ga-5-3/0000750005473000001440000000000012275260573010604 5ustar d3n000usersga-5-3/doc/0000750005473000001440000000000012275260563011350 5ustar d3n000usersga-5-3/doc/armci/0000750005473000001440000000000012275260564012444 5ustar d3n000usersga-5-3/doc/armci/armci_doc.pdf0000640005473000001440000026700411164523602015060 0ustar d3n000users%PDF-1.2 % 2 0 obj << /D [1 0 R /XYZ null 766 null] >> endobj 3 0 obj << /D [1 0 R /XYZ null 53 null] >> endobj 4 0 obj << /D [1 0 R /XYZ null 727 null] >> endobj 5 0 obj << /D [1 0 R /XYZ null 700 null] >> endobj 6 0 obj << /D [1 0 R /XYZ null 684 null] >> endobj 7 0 obj << /D [1 0 R /XYZ null 668 null] >> endobj 8 0 obj << /D [1 0 R /XYZ null 652 null] >> endobj 9 0 obj << /D [1 0 R /XYZ null 638 null] >> endobj 10 0 obj << /D [1 0 R /XYZ null 609 null] >> endobj 11 0 obj << /D [1 0 R /XYZ null 588 null] >> endobj 12 0 obj << /D [1 0 R /XYZ null 308 null] >> endobj 13 0 obj << /CreationDate (D:191001102164319) /Producer (\376\377\000A\000c\000r\000o\000b\000a\000t\000 \000D\000i\000s\000t\000i\000l\000l\000e\000r\000 \0003\000.\0000\0002) /Title (Untitled Document) /Creator (FrameMaker 5.5P4f) >> endobj 14 0 obj << /D [1 0 R /XYZ null null null] >> endobj 15 0 obj << /D [1 0 R /XYZ null null null] >> endobj 16 0 obj << /I << /Title (A) >> /F 17 0 R >> endobj 18 0 obj << /Length 4648 /Filter /FlateDecode >> stream HWK#X4ߏy7Hb#I.zȖX"קjJq `ĮLJׯ)1yؾ~DMib,΢2Y5y8~aoٝׯ$|sJSEM*qTUJL,Kk?3ᦎsQan4ʂ%$*a\y 8؅0#j3c)D=dn ƉyT  ΢0I8SYtQĹz4aMFg~5N&']pӈD$LC7aLHWY3k:?*SJe ܕqZҜ/LI*W2:TvbңI #cK`RX|WϾ8 4ʈΛUĤވJ%9Æi@ǖ؆){]O`OcX쟜@NMO`@ÃyTJ1VkzSSQܘI&jq鿅 , X>%òmc vs(4EU&* kęnUT7OEXhBA`qEy}wO .Q8lȧ#^HQ$V&;[4 sPӏ"_ Ln}Ӣ^ o/x>7*zޝ٩" sǐk?8VMDcZi?:s K6r&2ܑ#$є\)5\* c;?7bH5j9WYf;[6%I6~w͙)#rU''+/48P'06V).$=/?HG\-ʞIkEy ׀ZE'G%Eͷ8.hvbi1ȣ *E=vceՅ,[._89`nY%9:<^ DKBy7RRվsr\DȆ_kP"ˇx ~ؙ (pq"#Qr"sT9|b (x݋vw⤂%"x/VN^0(iT}EfxReOad J ZQҰT$9ᰄ5Q!JO}T-{-@qwo2/fhyt*W}k!GEeݿV JꯒQoy<1Z1CX[HfKjY+ճ^ i{Q\l( 愌v-#r=G/ pDi5GwWw/rH IRESamؿbTEU|8;L=-RÈJ7.Z#ꊰM0*i) yQ64sMU>6)L[5;jOᇭ$s8RI ]Qގ#l0hb(gl 8]𳸣 cζ C!,ćGrWtvA?zsǀ';󂇫Õ؝(X0:&Ta֞eYOœhd(K $V޸N~:{TulϷ: RK{upyc|2C悱{ab>WeKو=Pj 2Y_S։: rTΟl;ٵ7~u)c=Q]d0P(}`xfܵ_˜+7} hDDcu<@RjulQe }׹V`/P)IAP=LuloQ}Tz©b_zhh'GNȋX9";hv >?疱뗲Sf{.nk7RaGCz+U0<'&MG|Ihl-W}bZ}MAe:-(CҚ7?ũ12קhrv߸-ZH0&c?GxD<>g3;7S]AgFIsߖ}C7TJh) M'X|yDLvSndXy`”JPK4-X-GHE#u;aK/4A?G0RZzQMNRK 6F@r̍0&zTȍo0B ʚϋD +OmSev kCa~ͭFUH "j KH]sr-Ƞ3UwPG3hWb/}AoWϴ[*^/V | \Ӻ\?3D~ez"<]dSYv8`A: OK;DRs"U `Dm'%)3EȚ Rgı s(-{[.~=XH{\ǧu ȩr2<ϯwabs--br*į\;߲}G[:?99%od @BS^i1&*pZdAd0M J{܉i}x/H}b2tyA(:}-pi'pϧ^ r*ٛc*ۤ0)P^vA*HWu%eWpp9`GvXA2nL6;]UB 쮯aNZ]-“IN% +P-"Y*2J ,ZۆewqVma S2Fa|wjHlNz:|2g8͘3W/:*S؁pEkx'pD\q*&'(}aݜn i ڥ7S);n/gz:꺓!ӄ"n?\0Gvnс75no]:lq# cn:ot<5K cmBQ21{lM2^16-ՎBjg2o:EnFM NJ"4ME?ݸYhG9mVacB }W6Ao]Ee2p[MX4CN1k75^4QZ4J`ybi$6֬ګeYiV-m8K\u E׾mޖDָO;6_rmx(^tk =d~S>DWS%  endstream endobj 19 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F2 21 0 R /F3 22 0 R >> /ExtGState << /GS1 23 0 R >> >> endobj 26 0 obj << /D [25 0 R /XYZ null 730 null] >> endobj 27 0 obj << /D [25 0 R /XYZ null 580 null] >> endobj 28 0 obj << /D [25 0 R /XYZ null 339 null] >> endobj 29 0 obj << /D [25 0 R /XYZ null 279 null] >> endobj 30 0 obj << /D [25 0 R /XYZ null 211 null] >> endobj 31 0 obj << /D [25 0 R /XYZ null 193 null] >> endobj 32 0 obj << /D [25 0 R /XYZ null 146 null] >> endobj 33 0 obj << /D [25 0 R /XYZ null null null] >> endobj 35 0 obj << /Length 4997 /Filter /FlateDecode >> stream HWKoF0bćHq&Y0Ƙ12CjICKoU}ՒI~|ϗ~96yٽWFen'2VIWQY/b?ꥒIIeiZ|-ļ2)vAq\ȍ!\GE~/_C]k[ʊZM| ޸+QO݁5erg;T^ Oy}>:g>*/tØ] 3d[~=Jr[sT=R8tc#삍1386ud0-U#Gidjb{U (9zTOࠣBIkî峸zsЪEґBw&}3 PB6SGk蓰>GPɍ8|$rL:5;AZdCjWgyT!c%ZpgdwH>Pp|r$PH\lxQ5䚱(l \%V =ƃWj%Fݽ_ f1HJdmnzY9-XK BౝmB*h1WΊsw|! x (72 @ {*R2FWc BityLrFfHsP'xc}Z՗:Y/҃(Ia%<+ЖqFG=P.VbW;߷ Tj] ~$/78/ipwYGdWf]8ackJ2N057LQ H+-5ssʗ^̰7'a"=mɌ[VF%?̀A40:@W~/]ohp2 ٫ #nhb9Vt%7&ʯ G>#PLv_$C 7U,Ԃq߽}q DNGJ&JHʲk1A^+w4_MeĀ%H2y9Bf/T1RXj!JW=wLZ"WwTtuH!ʥ /?̡S/ "Jz#۹P- ` {[ac4g:F|EރQ\2VrJswpu6`duf?w?D IʸJug>P ^Gw -?QO k͖~J*FV\v9uz3 )-[Ď-`qaBr-{"ݪDn{ן44O5 -JO8QRh,ZK(Mh"6f%;bSZmՁl)reZэvdm朡6O}봁hn&Dxi+@7V zmF{'iz9 }vcpKTb9LDBX$cHj[Vg4T,ZrO4VUsϗZ>"@ cˑL80[A}*J)0GSQ*qkc:xg3T-hŮ|[/đSm?U8rC(m%m 0`\dVFY/K;4VUHV1C t.@?! >H{ERꪄr{ ^eS6 ==Є\P ůVhiq\Xt_0A.5i޽?3=侃bZl蛡Z`cIjHޖ;АPi-*tv~!Vj›ݠd -G@%nTčJ΂TjBoݠաW*cWصo"0k,hOKADi~!_݇wrve>8݃7_{N5olU:UIKǸ`MW޻Ժ{jw]k9nv!tNߥ{܇=>m?/o YfڮaڛWk̹*tFEN-YC%rFTpмֻo红%kݔ9+"i1kŋ w +?Z/Eunf#+noX7$XT!4ko>ӻo9(U:  R)Rt@cEN8mX-I1}IYZ[\3ϵEO<<(Y3nC$?Kn%SU*[j}>*0z?J.*X}_k_9*i/;Gasp"1'Kp %t I5~-ȣ0zq–3[ 4r6)Ev[Aa S\h;5[O$,np\d4dӣ|pW 9B=X˵~^4*q7gUքʒ[.9EOG\E{} l!8<~;p*9P!(5q8 ]Q>dD'PfD~jǩk+ogӘeo)6b0S[q4*f%} Ib.8IR7ʾ:ȽN,Q4J7*@W` */AqѐυGﴟmq}^,N]ndoG6D\T~O(u9/ïF0\5 endstream endobj 36 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F2 21 0 R /F3 22 0 R >> /ExtGState << /GS1 23 0 R >> >> endobj 38 0 obj << /D [37 0 R /XYZ null 524 null] >> endobj 39 0 obj << /D [37 0 R /XYZ null 511 null] >> endobj 40 0 obj << /D [37 0 R /XYZ null 498 null] >> endobj 41 0 obj << /D [37 0 R /XYZ null 486 null] >> endobj 42 0 obj << /D [37 0 R /XYZ null 473 null] >> endobj 43 0 obj << /D [37 0 R /XYZ null 461 null] >> endobj 44 0 obj << /D [37 0 R /XYZ null 442 null] >> endobj 45 0 obj << /D [37 0 R /XYZ null 405 null] >> endobj 46 0 obj << /D [37 0 R /XYZ null 387 null] >> endobj 47 0 obj << /D [37 0 R /XYZ null 344 null] >> endobj 48 0 obj << /D [37 0 R /XYZ null 587 null] >> endobj 49 0 obj << /D [37 0 R /XYZ null 91 null] >> endobj 50 0 obj << /D [37 0 R /XYZ null null null] >> endobj 34 0 obj << /P 25 0 R /R [63 63 549 729] /V 17 0 R /N 51 0 R >> endobj 52 0 obj << /Length 6752 /Filter /FlateDecode >> stream HWێܸ}7ࣴp)bdׁ . [ݣ/ Q*cbթSUԟn^z2ٿ~ؘW|9~Uϕ9<͖U~UQ;/bkn~EYZO7ۺfy{|g|Gey7MQentg~k"dSiAf!p{|xwt!{~-50{kk\0zuywypTV ͑ t\`;d/k! !G̯֍=vH3R tDI{=4Uk+fi:t7 ~{hf@!(kۙMrW^A KC[ ѕ[PkN4p?Q7ug=F਺2ɀiKNjXsfAxef/ zP̉R#s|8"5Ѯip/r HWphp`:⵶ Tx&H r &/Uꭼ#(2\ v^8z"=v89c)"/W&G^1-ɲO.H<tzb ( h'p"?PfBmԷS(ՙt5 F7Ɩɰq(#YĕKSέן.E'A|- 2x:MDîx"U-v# T+3?73Z :͑4@w 4 X#X4EPW1>RHE6:Sh1\`m:R)]OicX|\h}/| b 녭>uf]FaFcYئ.ʨNi + ;ۘv݂d4g·ᯅ Bj n!64$ jT*-,r@ǂxHJbYD'.% (Ax]@k`9$s.@W@)cK;GD⣲3%^z#DatDaS]BT4uE%lɞVX13@tʱ }PѢNdCVD˜b4: X*j9 pU[KNӀg 9XVnnJN3V@-$+ 5#cit"4iJ,E[`q/N|,:P)|t+n(T@ZֳQ=3%*QNXr"qlN[d)/ `֗HEKL:ehwymEsPqB\/At;l5KQ@NêJe-@OA}^9>+ e$)'C P-sbu*5%m9 ej}lSk $ǜE$h`ǹ1ttkO*ϽpUb XuKX% ڱEA8Et"K!,2瑔^dUp۴-.5_ݚ_^o^zolHomU[d<hxm|ٸƟoWƝޜ^e/l[˭qy~ڮڵfy]o]aj;$ޚCN*;#WGNLqZYZF|fG@o '\@T{M!?ΫG܆ ?;lc!X۽pJA}H>RRU6X`J({,èyx8r>]͎7˩o1giFy=݈Zm0!r4/K JZMTM0Di^a#y4&RH ǢEȽ ǫ1@J~?bٮ{Ag@ܳчtJG7r3]{Ҕ]d7Ȥ\pPnw͟ڽwm'v% I hfmwL qI+xÝ H:H@jta$ը԰`3Ӹ4 !5 1qd= V4#bz&Fצhg!8)QH0;NwuDj x_/ J)P3=ġD};rM]Q27({l;%XJ+efV&Nt p!x$h=tv,2kl[T*Vπ&>.VRA9=[iҷZԬX.ڒBLqz_*$wɳ}ێQ<ދq*^Ql1|LjbbA^ޫJa @R%e}YDmQxhJ;$Œ|Mz,mNI!o*ɅtЀGCT  PFKECCSTPY[)Y1Syem܏S3IP8(A0CDQy!GR)hyh`@KK}+4 ӌ=2H$*PXifbU&m (j9/389:Ub.zW<9.z h"-ҫZM`|(Х{8 ]w7HR&0BhߪW]Q7I@k;݅Md^FmK7E9Ͳ Awʑ9CM@S5.HvbqvaT1ΙE̠+1 96ɧM ьlgdQoCpflf02PPk%A-0 otۦ# μ-) s9Vx f`ul Kwm(!k9C':AC2f &g7oP[$CjJV1#S@# %@WAJIytmٗif`! 88АxWzH-45c,dbGI6;0yC؍7;l;eCT9v0[ki )3vKH??ƇbN;l;U$ȉnqт6W1i%I#jk h<1 %1jZ(#'<]%`rgBGgݟ/$"wfJhSƂl 8 1~ fZRǶ]Q8%) %`ggEhd~~hqҙdr߹zyybx ɧ/Cri{<'6pq{lv~]~ۍ|oOt!}OUW|J|vLe W~ǟ'&ʾWtDDřZגWK2˒][r@k0.|ry'c |__rWU61]пo_pE ?/0_cdƚ~b,|7G+#ZOq8ۅ+|fJMʹ](hmhtwXGY˪CV;/a~?1, ON ȌMzwU%;ӨNK2ܥs[X;43R+K<2<}xY>x]ҏ7V٨۠ =uR QVhoBM'dVPUї>TyJeP*ml!uh&—b6NiB !cr!]V;߶cv U/۳{^T2”M!M|[/Nu!aٮo3l@״YB$cf hZ,P [1,0Nig Xa.$.vyxc@!K'~HNW5 E۩Q D̖=d#]l&9rPNwI 3KOc Q#.A,b@y9%sfm"Y$ eƥ08i5k4CJ6Nw!$۳0x@/ v E4ofimf$U)к@ś 3&@9T!b*M Į[nö]]1 $:E$T [E*:PtTzъLen?B!O c[JOϫ47PUumTvtXs6: |v:OUr/OrjYY'{ 6IC!yZF@讒ݸaz/.Zlz͡f&,-%ERl MqyG&+*ݹ"r,(e"8C6LlTe4ZW fGlYCi\DUl#A0Vd29KO:nTLB+fwLawu7VʼnhQ4ev> ӬKO̘Q G֦RV}B.sN2e E)@`{0ҋhlf/\lbC(]%\^,ŖFô[a* !ѐt );,((t 0}ZFMl K8 (A8_y 햋3\, !uXPBcUV?! Uֵ` 1(PrF+^m'x .m]mQac\@TҨ׼:_Xae~ R2p|nR>B,9P`HG"iOz@2UeJ` 9 n8 FN*/dd #\@ŷQbA@ sJZFxՂp46d40c% F4lݔLvR#C;pA@bRyRWx=3108}`!kLdEA7Q~BIPֈL /Z` wx ңXEʤ(rlcZBz&[ =-=#Z6rJ$P8*G$HsJUlpp`&/iM6z#UXGJ- g>FFl5rGd@"2Yz/Wx3X1T35cދ z~{?g!@ŗn"m^{gt;0 7TD^?~顽ox7sݵ~Kg|MIyB3;;9)ۓ3=O. R{"]Q{ -écOor.?6\J</rN=zpml 64 PRy:xE]t.Ɛ9J˲sU endstream endobj 53 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F3 22 0 R /F4 54 0 R >> /ExtGState << /GS1 23 0 R >> >> endobj 56 0 obj << /D [55 0 R /XYZ null 497 null] >> endobj 57 0 obj << /D [55 0 R /XYZ null 484 null] >> endobj 58 0 obj << /D [55 0 R /XYZ null 471 null] >> endobj 59 0 obj << /D [55 0 R /XYZ null 459 null] >> endobj 60 0 obj << /D [55 0 R /XYZ null 446 null] >> endobj 61 0 obj << /D [55 0 R /XYZ null 434 null] >> endobj 62 0 obj << /D [55 0 R /XYZ null 415 null] >> endobj 63 0 obj << /D [55 0 R /XYZ null 379 null] >> endobj 64 0 obj << /D [55 0 R /XYZ null 350 null] >> endobj 65 0 obj << /D [55 0 R /XYZ null 307 null] >> endobj 66 0 obj << /D [55 0 R /XYZ null 270 null] >> endobj 67 0 obj << /D [55 0 R /XYZ null 251 null] >> endobj 68 0 obj << /D [55 0 R /XYZ null 155 null] >> endobj 69 0 obj << /D [55 0 R /XYZ null 137 null] >> endobj 70 0 obj << /D [55 0 R /XYZ null 121 null] >> endobj 71 0 obj << /D [55 0 R /XYZ null 104 null] >> endobj 72 0 obj << /D [55 0 R /XYZ null 563 null] >> endobj 73 0 obj << /D [55 0 R /XYZ null null null] >> endobj 51 0 obj << /P 37 0 R /R [63 63 549 729] /V 34 0 R /N 74 0 R >> endobj 75 0 obj << /Length 9368 /Filter /FlateDecode >> stream HW[۸~LmEu>%iRشE>,-G->n9qגּj}T>\$S. LϟjŪ݀UE=cJE2ASq$I_6(&;׮٨C_d>"6D')7Q6Q cljou;_D ; ̟ m׺tֳMWC4KHZ ;X-ݙ@7uy{!(Pއ6P ->WB2 r*>kd>qEj/J|(VX- ?V(2MEwbIieB4BW_>n 1x4\$gK(}mu EEg@-+9{?F( ,&bT r<)F%hu[n_Ne>.i%4oF1#[wՊL1@]Ԁ ?7`HJVnzsxb }Y-}3n'NL‰U)OL4H6 -1q-9xCy#P]-A+ pCsFt*C(MI &iCpH*1E06%+Yz~[4^a+t6@hi/BYI=c;aǦ-xtd:5w "VP7SomRYoSo|PU,r EqzՇ#7WBw7Eex%`d?GڧJ1^пكA}im1([CpU.ҺMaB#\{lgraڊG`K9et-uH ujd1Qu@O[ D1>)$:ޥcdy q=(0KQ |=.ѱ}RI~ݻr/>rj+~za8*H0V]֏(|Rkv\:'8RCX:_5m+d(0O6R)u{ J,:(̏Rm)_F*Y:oo.Λ̖lxڿ iNb{6.=Lpg>ߺ 2+7ۃl۱,*чPM%bPZ,`Rq/9穦\MuTq5+b:l],0/:Tp@Y1sID&I& *b?g1d""󱣄}e u]@~bȷz!Q}G׈q2ʂЎLHq|b}3b xLЖ{4r0/śaZ5ڞol#^"`XQjor1DR+bGpEl߾d@αЉ(TW.-y0.@͆~A%cs%\n'"l=_:˜T}4ԍeL2h]0+ 3+c1.$AmQ#̶G8κʹǬTqd'bqrY+$))ȇ硎;ߓ4AsHJ@Zm+s Dd8!N$*FpiW [`A\E,İ5 3 o1 |偅 v@l18GphOF*RofC 5D"k6JnV $+IG{ !CϻicG61obaB6eAh;jA;<ћ xw@7 F;T4XG-70;Xjo),zE$ɇsc9@5ƌ >>2]Ou50׽Rf O6GT UaSm,u75<[l. ?^PmWAaV^C) %ޱ®Ԧ#ѯQ:RzߍIv)ۏ*6!TbUDY1(3}BLZP)cW9Pjl͟}҂FXyuc بQt%ӍB9ND)/7aQV/JZ'ۄ OiԖ$. _X+/I]Q3G2OW6 H1iq_U;/_+M";+z3 ̭W*eBkOfAB%,'P6=^0Q)%5D0`7Ixɶ tlGZz8n݀C®aI8_thg%3*v},=+]4(EG2&GEƯgj lp( ɋmN=p <.޳[h*CD'*X9½PO~f)~] G2 }L>FG'Hcr;n\9/4dm|kSis:a&=y;ߑ9wO.46B۞'l}`ek1QƱ90w; DO _0y8Ԓq 02 刄L *zt&"X*2̞fPhB'Fʄቄ4 Fe\Ą=a\;HP8K zE!0H&H jr㈺Lj@ &D*cI Aָ\23nBDLZB*#0s"\W畟vfMcZ7 %P{-;)4o)PC%N\VFI+^ꐮaoF *Kf#XS1|9($fk?muGh2I5[m4;tWZQ%O&]$)5q[ \ &=]oke-xݚ~ڬ6_ˈ-J~hsvu+N8n),]wt3# bCO=#;a<#ѧ#_M nXg4:< 6`%V%8;ww +q!a8٦LD8- (+LIB*fFKe=xQuhjO&mfa'c[!Z81yU#0[8}ϯi,,{|8_`،,>b.(Ek&r1fu .Q~H0~Nl`{f3q{Y ztrr}`< V#$<칪oMd 4q0[r.x:]"Oq;F*-37#mA -\ Nxezi5kªgnx#E[I Pr م[OwQ9=5gȒ{:W&e) $4Rl?=~U>[A+ 0.,ak2]QSkUA%xe>V>a&=y;ߑwD/']&zxf-;$ma`S Y $ȼ Iٳ&HENI) [p kp N!!8ٲv*Ztmc ěB4noXwS<euS@Ԟ5RQQkF ,53Vѷ?3u.ݷ?1Hd<2X |ny כ{#l#3 WBB%Hc&#ǵZ8hZʦattb$I`iՅ+ gYrYYzy iV; +E *=a"uVP 5Y9)HAILZm"ZBzLCFXaVRl[Yw6.@oدx@OUfK` v#o[yc/- Xd֤Y2_\Rו| a;."r4܀!Ay; :N4HJt[sPj/l"jbl˚`R+8ay1ow EQg~e`+1Kc\$жgl> ۱&\TCBO 7߅opH$憯dqw*ScUA?Ǖ|4xZ( ͧ|7|R~ %QUQ =$烞Ax͋k5{\x ǿz /EZqzԖ=.J0 -{q7s0jWb\{́C uaZTT3\U h"q H˂A4e7GyPUpeC{# ;LAmGj1[p WS f)WˈSu~꬧l\S]H@Y EA4u] w8rs`NGUZ uPUP0]灠<͟`M*dK ۃAO:Εds[Btl}R0ikN< w;2fȻ*Tya(l rSD$\yL9a6)m:E{0L88{Үz'RX8 hŊBIQiU=GVbUaў_V=qXjl} #jX.ڷpH>隡^_\%ib^פ W4.zĚ"Sns8{#)HYyZM*F -Rm0osć:<o;vLϼ^ۣR"2/q6)wJz$[Inc [$= am"1.Q1hKlSv)pm-\s9\d/<;*^x ʄ\sxIGs8`{q`f3 z\osHcLU>.0Hsxp%}|H܀0~%) p,0Q(%x5IQ +R@{y. D <Y!`81K@@sxCbi(ᲁ}{0MމW ,_i\0wa*tjhh|j^OxIHU8X TnP%`2q0 Vzfye 0$yP}|VF3 {A^ /Z2c\yG] =uerZ"m5N) X7njRb da2٤Iinty͔nOVDn8 =kY9f޸ |ixbYpD]Lpr+z \(>#\:c:&b}9懽|>1-s+%ITx/gH&֒ 2#5ymkb,vz#@)\8%>pJ\K4ro/J^6M߽MU{7oXc| HSēĐ{"Z sx71t0E7.TtRܴ.wcTK 3p/gHπh Ȑ% Z+q#m4@M%_K j#^ow8^Oln;|hyEp[ֆmL?Bɵk`6/ꀄ*ケ8׀3 iewV s 5ғWei"B <5ǁ< pwzu -|Μ7g}YI"H RxPߠex=+.ru$Ċ,,' P ys r1[_0ǀd'㫖L2عJC6 G=l}-"oJnלw^2 .2̝tCI+Uh,ӹ`͑O&3k =/=ײ\snjR;MĸˁLJ@/ݣ+wQ!a%+]G}$/qkV<4pU 0 .\lH9,O]DW&OrdCb-ِؐ,."`^޶Q1y#pu_\ jco1,iB0jqy 8^OXx4w6oC9nMc Ac!K:ȱb%Xc!=c\l>߽k6{;FjRd/kّG\58^ln+MPg^-,Ǫ+cV`nϧ+͂2 >^2x˹"4rJlhHtdH9Go-ۈ:-Vs4`~`$.0HJ"d!M jJev"!;SD[ޕ&]o\E7y0Ow+0^*QgN,yk]6pYO0 ` `l.ݯsI .byoT8yJ#)1:H >[cW 7#P x#m{7[mR܇]>&|T壎S-iص jEW͍~{ΏegP/yWsF=gWP9C-[eQVpRosIHpKZ>#ҋ[9!=}0)'o[h LPbA U])%9ݣZxfiy/9^mn'D'5IA5LI!7zR ֓ڽYlmZ2Gڃ¸pF/+|/ӈP7L$%OKkgu3IO =NI7͑8nO4]^=Zxzeoin*gb,-/X{е{+QMRnkmz*uʜ/mּF+y#’m=\q^G[Pacu˭vϝ.B|?ZRx:i]Kixs+Y^+6ϿK,Zg Th$`.3 nZhSedb|2 8^Ya$TUs @= GOdEggG;4n>rp8tO /sQxUxpfs8n.el,о~;RܗP;wò_hn/3%,Wo\]ve- 7- ny^YIPɛT%vV kE-j˛ɐJ(oKy":`x4x}\>yEʕ&R*/Kd^ʡ*txrm, ;j㔈 G^N7mѬ3a˃aN 6 2Sl[IC%l0a-&aǐaa@YQ cQx?RHX*#j&:ɛӂKόöd`~%B0DKoe0 =@!=_y-ڥ SۡC6%"4$'E.GGz\K7"pj4eɵy86SgbdK`K愓!5H4T ZY* 0s7o? uĺ3í1G(S96@ۘm3(gkid!-'%oRHm'kMO!zz "0k-YK7"pj$LQ ɷy86XW,l l)w2A"*s|*h.c0z3-} ax;|Gkx;<'3>H/z3nH endstream endobj 76 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F3 22 0 R /F4 54 0 R >> /Pattern << /P1 77 0 R /P2 78 0 R /P3 79 0 R >> /ExtGState << /GS1 23 0 R >> /ColorSpace << /CS1 80 0 R >> >> endobj 80 0 obj [/Pattern /DeviceRGB ] endobj 82 0 obj << /D [81 0 R /XYZ null 730 null] >> endobj 83 0 obj << /D [81 0 R /XYZ null 714 null] >> endobj 84 0 obj << /D [81 0 R /XYZ null 698 null] >> endobj 85 0 obj << /D [81 0 R /XYZ null 683 null] >> endobj 86 0 obj << /D [81 0 R /XYZ null 667 null] >> endobj 87 0 obj << /D [81 0 R /XYZ null 651 null] >> endobj 88 0 obj << /D [81 0 R /XYZ null 636 null] >> endobj 89 0 obj << /D [81 0 R /XYZ null 620 null] >> endobj 90 0 obj << /D [81 0 R /XYZ null 594 null] >> endobj 91 0 obj << /D [81 0 R /XYZ null 575 null] >> endobj 92 0 obj << /D [81 0 R /XYZ null 550 null] >> endobj 93 0 obj << /D [81 0 R /XYZ null 470 null] >> endobj 94 0 obj << /D [81 0 R /XYZ null 445 null] >> endobj 95 0 obj << /D [81 0 R /XYZ null 312 null] >> endobj 96 0 obj << /D [81 0 R /XYZ null 179 null] >> endobj 97 0 obj << /D [81 0 R /XYZ null 136 null] >> endobj 98 0 obj << /D [81 0 R /XYZ null 111 null] >> endobj 99 0 obj << /D [81 0 R /XYZ null null null] >> endobj 74 0 obj << /P 55 0 R /R [63 63 549 729] /V 51 0 R /N 100 0 R >> endobj 101 0 obj << /Length 4597 /Filter /FlateDecode >> stream HW[o6~fu}pم!k豚Tԙ=7jd o|lQoU%. 岸*rMïF\-΢()I k92NL'ĦtL+C*VJ.Dk=us{7TFS6O{}d|xO FvsϵV}D<.Ѣ ]GW>ԥ yA49pEl0$ e^Adهvvk[w9F3 !0;߫^w]DBN I0]ͭVa yTɁ.T fEcPBٖۚCa&On?>tȲr(IT7'4ɪ*+AqwhVC.2il1JRXx &wr:iP(S0U-qV/pjbg_Hܢd՟_P4Eh!u!!.^ )"%NFAʟ .41c}N Q[*I'.,hpHg܌oB־"ċĕqؐ;qjӓ/m7z,g}|WuGa>,Ƞj:gg~GVq戙j&q◟ %hRu=Nl1I\ -Y'ꖔ2-1Bf Iu : n1Rz+|flictMbM }$b.D,N4=Wzm`y6Iٴj Mu^=_*0LѶN`:"$$ fk!3a[\T⁖^.T_ge[$IKx(Rs Ebþp$l"0ܠ/1|Aa :t07@IJf%fd0mF(ϝ;Ce 'Ucw(R\N5mM%9F L R/5;㧣5aX]PG@7!%$0W84%B-VEiOP}x@u"5#lX9PC ѦӶ,d<9$u ftEV-Gw^K*5vX,f %AqBՒsxtj != (!_,ZGTm Vڈ-+j'DsZnj(, O.l.c g2^3Ai 12 oh-fVd?8Y!ܗ3yY84t{\ 6|}do s;ڐI,($ꍤm1݆I 1~j%BFߋ>6OHgp3 QSjDJVЩy} W ]Yu? !l*Dĕ|@,4͓)O)&`+{VNh8@`8Îv]; Ր+Dﯹϩ< ?~ "cOyab1acME)& .}}%Hm tRn, jAk4us^<"qVtܦrR=& 9.JBoj㢀$ii,Y /*7XKb}ݶW+l+ٰ[[dy6~tθ )Xk8iSBCtMzZХbŒJFyFJ 9"&!LE3R&I2GU=>t6rg̶"b:GO KY[Y٣ q X]qf.m#lh!5Ć|ZEGؼ~đ<*V§ir=Dص.*p;]2 r$ןAƙ"M0r~|1X AElրz`pngVorVꌟ$?9CJ^y= GLgI6_{_y~[A%A @q'D nad]B\N%͖8_2qVpe<>4w^$ lÉ><0V7DAfs'A-/;vn,GBH_䙙Qm$rj8H:=t,TGפ CD""bũ\5+3Az@<뙄P00?Ϻlur\9\E٨5Q(P( "\dQAjxkJW'%t7}"&")3iot˸4Z:fI6hy#/xAz3S̈́܄ITasy3otf8<Kd'Z729 ͖[1bA\~*Oֱ\Z v$K1 N&p)B pE9es4z FOr ߵվ/Wz9'3'Ojom\%eo, kNlKaP <+JKEz՚sD)%6W9E%}v)e=ֲ ݩ,sd;V fp U<& >J~: f=ה#x+d_/!"!jD_>QX* q G\S͝r6ZZK \#pLKR钝?e2NNdYP)7pʯ sģܩ,_?˿&z endstream endobj 102 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F2 21 0 R /F3 22 0 R /F4 54 0 R >> /ExtGState << /GS1 23 0 R >> >> endobj 104 0 obj << /D [103 0 R /XYZ null 729 null] >> endobj 105 0 obj << /D [103 0 R /XYZ null 711 null] >> endobj 106 0 obj << /D [103 0 R /XYZ null 609 null] >> endobj 107 0 obj << /D [103 0 R /XYZ null 591 null] >> endobj 108 0 obj << /D [103 0 R /XYZ null 399 null] >> endobj 109 0 obj << /D [103 0 R /XYZ null 377 null] >> endobj 110 0 obj << /D [103 0 R /XYZ null 364 null] >> endobj 111 0 obj << /D [103 0 R /XYZ null 352 null] >> endobj 112 0 obj << /D [103 0 R /XYZ null 340 null] >> endobj 113 0 obj << /D [103 0 R /XYZ null 328 null] >> endobj 114 0 obj << /D [103 0 R /XYZ null 316 null] >> endobj 115 0 obj << /D [103 0 R /XYZ null 298 null] >> endobj 116 0 obj << /D [103 0 R /XYZ null 280 null] >> endobj 117 0 obj << /D [103 0 R /XYZ null 268 null] >> endobj 118 0 obj << /D [103 0 R /XYZ null 244 null] >> endobj 119 0 obj << /D [103 0 R /XYZ null 232 null] >> endobj 120 0 obj << /D [103 0 R /XYZ null 221 null] >> endobj 121 0 obj << /D [103 0 R /XYZ null 210 null] >> endobj 122 0 obj << /D [103 0 R /XYZ null 199 null] >> endobj 123 0 obj << /D [103 0 R /XYZ null 188 null] >> endobj 124 0 obj << /D [103 0 R /XYZ null 176 null] >> endobj 125 0 obj << /D [103 0 R /XYZ null 165 null] >> endobj 126 0 obj << /D [103 0 R /XYZ null 153 null] >> endobj 127 0 obj << /D [103 0 R /XYZ null 140 null] >> endobj 128 0 obj << /D [103 0 R /XYZ null 128 null] >> endobj 129 0 obj << /D [103 0 R /XYZ null 116 null] >> endobj 130 0 obj << /D [103 0 R /XYZ null 104 null] >> endobj 131 0 obj << /D [103 0 R /XYZ null 92 null] >> endobj 132 0 obj << /D [103 0 R /XYZ null null null] >> endobj 100 0 obj << /P 81 0 R /R [63 63 549 729] /V 74 0 R /N 133 0 R >> endobj 134 0 obj << /Length 4470 /Filter /FlateDecode >> stream HW]ۺ}GU(q6] ]7BkӶYRe9/ʲ7(Xp8Μ9(UqT&i*Pχb5vPM&+KqR+N̑~)U#~7FǣV>2&7~l"t߿C๮bS\8ɱʸ{8)εT6Lo\% rp[S8C4wpJ4IEiũUڏ .yeat'V%|Vn"ʹGB{Ꮪo<"g2}T"oh؀^&56u6ڱ*ˮGuy̆-g^'pV'D/7HP&E:?Q1(՞tpa |M{V5- i,gz^,U`@ Bm<LMo$G[ş ePq[p5&m@nk.; 14z g%M1"qc,y3dm~}'vZԀ ЗbR{ 00(: Pv$Z,1FNdtLdlSIeȗj6"%I!.N/!R!V2@,BJB=A̻ u#!2.AHwðԫWzf!S5)EW䇀'.Z$A GG/,wkQ=|7f:<7_H azlrϋ$ /o FcFFwG$3W 0DjnZY:|wqB&T(> s9 9n7#Q gz't=&v{RHmd \!Ѓ]?D_zɋ۬AW!> XT=[H9Iu'RCzĮC3wFK!SB,[j QɱJ#-A 1W.v,eb~?<~ !6tAJMLv\oL p&T!n :vrǠ8*H, v{$1UW`طeE9AIOd^!}sWP-dJ?`I! yqJJ&! 7/ D['8b?%O8rҡCQ SO,#%C=Rh1#>:uitET^*CJhq`5iȊB f]7" @xNP04tm7]` ws.6 /` P "Si 0Y4$fu\$]i#F^x=x{Yg 4EHF^x ͖jfOzxOO_:3ІZ_+Sу*Bd&.XNrvJ^Tjj{NdSN6ǰ`pFT\ -"x`pH uHзڒ\!cBҾ嬛T l<9 J7rn'2TAd^.&f/u4MeK\sVg0{/#NP&x?.s2 HfI>9r?@ŚP**Ze3yz  f ?re=>,(uMvV82D" 'z."Nc.CK+IQ@ qrͥח;L֙gx9 wWO07V5ĦᡡH(Ro<#[1^ϴ&}Ʀ@@N!׿~HEQ[6,{>@2Q~;DGŅR\< hnB}W׮Mg=gPYîĠu\7qă)B^ψKpW},?0f(PIBfC-4Od+z^-}ly'V[2&c)D /hbV(-) P86]/TJ^|".2jez._5Cf˙e4{cI.IJ=R8ٸ(r΍kj`5!H{Itnp[ͷ( 󑏝(YksЮz4x LK;oZKj&|(cM aRCpJDam ÈSM 0Ki0|7,`Ib%NYsqp +QU8TZ]#V􏆨qR|m{=JA-kS$/I=0hUH@ E{̊>lM-73;J"DgQ p_7N?x܎Sr'e(qT zΔ] k^*菕' g?P܈bf~~/=>5#ő:viQRk :\8^gྚL5}WOP ϾXǞD k {Bbw>ĔU`sDIj0gK>ZLZ8 >'4s!}mƌLBUxtkN4ʔ) tz:ds+Lhti.' Ƌ$r}Jwtv!c=ATրݎqKv=D\[ژ5!YLt ­Z̐J9^ev=-I3c"8'͇ʾyZFCJ6(9y|\J &#?mf~~|ú NmُX6? DRCDeHD=QfgS:kZj0*67܉Yec/lF1,ͺ0Pr,yk}LkBŸ`3LXZٰpʱ1AHA q P2H ;+I[ƈaee;jiʍl%HJ92W E 13GdBS6an nxV,{+:ބ0] 4|]%9"CBx'aY*hފ%FG5`؀zl_|{ v6\o' ˨+9G&fn"frM2z<'["uΆkVdyoRNrp!Gz5/'SKħli.{ikd՟/I{)'F;c- >4 {Wƃ$KH[%HzlޣY{WѤk;ۆm> $_xf@R>@hq]0|iy&~Q[q3sMܤ2'<)c:HƍdX ӰH$ }K%z-C׷ 'IQ$!pJR8sἛD"xEv4NI.V13֗tQ~"ex#CMo2@Oӟo. endstream endobj 135 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F2 21 0 R /F3 22 0 R /F4 54 0 R >> /ExtGState << /GS1 23 0 R >> >> endobj 137 0 obj << /D [136 0 R /XYZ null 730 null] >> endobj 138 0 obj << /D [136 0 R /XYZ null 718 null] >> endobj 139 0 obj << /D [136 0 R /XYZ null 706 null] >> endobj 140 0 obj << /D [136 0 R /XYZ null 694 null] >> endobj 141 0 obj << /D [136 0 R /XYZ null 681 null] >> endobj 142 0 obj << /D [136 0 R /XYZ null 657 null] >> endobj 143 0 obj << /D [136 0 R /XYZ null 646 null] >> endobj 144 0 obj << /D [136 0 R /XYZ null 635 null] >> endobj 145 0 obj << /D [136 0 R /XYZ null 623 null] >> endobj 146 0 obj << /D [136 0 R /XYZ null 612 null] >> endobj 147 0 obj << /D [136 0 R /XYZ null 601 null] >> endobj 148 0 obj << /D [136 0 R /XYZ null 590 null] >> endobj 149 0 obj << /D [136 0 R /XYZ null 578 null] >> endobj 150 0 obj << /D [136 0 R /XYZ null 566 null] >> endobj 151 0 obj << /D [136 0 R /XYZ null 554 null] >> endobj 152 0 obj << /D [136 0 R /XYZ null 541 null] >> endobj 153 0 obj << /D [136 0 R /XYZ null 529 null] >> endobj 154 0 obj << /D [136 0 R /XYZ null 517 null] >> endobj 155 0 obj << /D [136 0 R /XYZ null 505 null] >> endobj 156 0 obj << /D [136 0 R /XYZ null 493 null] >> endobj 157 0 obj << /D [136 0 R /XYZ null 475 null] >> endobj 158 0 obj << /D [136 0 R /XYZ null 456 null] >> endobj 159 0 obj << /D [136 0 R /XYZ null 432 null] >> endobj 160 0 obj << /D [136 0 R /XYZ null 408 null] >> endobj 161 0 obj << /D [136 0 R /XYZ null 396 null] >> endobj 162 0 obj << /D [136 0 R /XYZ null 384 null] >> endobj 163 0 obj << /D [136 0 R /XYZ null 371 null] >> endobj 164 0 obj << /D [136 0 R /XYZ null 359 null] >> endobj 165 0 obj << /D [136 0 R /XYZ null 347 null] >> endobj 166 0 obj << /D [136 0 R /XYZ null 323 null] >> endobj 167 0 obj << /D [136 0 R /XYZ null 311 null] >> endobj 168 0 obj << /D [136 0 R /XYZ null 299 null] >> endobj 169 0 obj << /D [136 0 R /XYZ null 286 null] >> endobj 170 0 obj << /D [136 0 R /XYZ null 274 null] >> endobj 171 0 obj << /D [136 0 R /XYZ null 262 null] >> endobj 172 0 obj << /D [136 0 R /XYZ null 250 null] >> endobj 173 0 obj << /D [136 0 R /XYZ null 238 null] >> endobj 174 0 obj << /D [136 0 R /XYZ null 214 null] >> endobj 175 0 obj << /D [136 0 R /XYZ null 189 null] >> endobj 176 0 obj << /D [136 0 R /XYZ null 177 null] >> endobj 177 0 obj << /D [136 0 R /XYZ null 165 null] >> endobj 178 0 obj << /D [136 0 R /XYZ null 153 null] >> endobj 179 0 obj << /D [136 0 R /XYZ null 141 null] >> endobj 180 0 obj << /D [136 0 R /XYZ null 128 null] >> endobj 181 0 obj << /D [136 0 R /XYZ null 104 null] >> endobj 182 0 obj << /D [136 0 R /XYZ null 92 null] >> endobj 183 0 obj << /D [136 0 R /XYZ null null null] >> endobj 133 0 obj << /P 103 0 R /R [63 63 549 729] /V 100 0 R /N 184 0 R >> endobj 185 0 obj << /Length 3828 /Filter /FlateDecode >> stream HWn8}Qn3Ox&Nc^%nɫV{ ߷.dK€[dԩ__M %_2ODS2O|U `5KW^+i,TRGQ$DY 5MB+UY-ouW]V5<- 6<Ե%?̿o},Z99#Ml-nq-'T2 H̔ Uoe|_7~.3g~] =[$9O d#lʔoh*+@޲g3zӻ/x6ev'3]mæcы+u ^t*BW8vLpW^oH6nKܒ 9jcvC]in}ѷb{}mAbO8Q#fwYܿf} .wёsiې\cHX˦gaʴ 19шU$bRG\0a8%Aٟa@38?A(O@(109,@;S\v7Ʈ 8̼qZj @uܭ.y\L!Qɫ#o":_bM]Hs^x̵>V/ VA萖{T >nxޅK xYG)n=h09p}GqJJx&eBRc AybaS%beHJdEZj28T+lEAޜ?/pH u.fDK"Yd%yl~k_pī@R ![EaZ?f[#/W[6+1Xٝ!*=Ap6!lxdk6;Vcn9J ֞Z?.As=}.DcyK2zOduI$Ue9Vwv-s:̾M4.bp e2 N/l)xr \OX.6m/V<%ga;d˴Ҋ e,̰JL+Ԁ&d> r7Z4-XC/t]JD{Lt, kVK+(/S#[̺G"AB/@*f +$k~BR^ $eBC扟7ӳi8IhNo0+{ӈ;P#B:;RȻ|;4v${ylLbVXq=p#4KCĚ6EJ XwM@*{Iѣw<(ǣ'p-{$ u 8 J6djMEL9i9bcWLf*p| % rm}YCPV)%G!j;|eBQ\ѩf$Um5<A?Zyl=ǓFlQst8%e y+4e+dr'Q= !vT30~yab_ b F\6nM^! ~Xn: I.qYN/+CTVblJ$sΏ9fy6T|Ox-HXn̉-?ַ_"jt\oâ%{ߐIl3oқ6UvoiSU9ThT-K#g)fl,j x׻ٙ<y߿\VT#ͱ1DdݑMKav9+^>J +%hB>tYOrscXf^s>q4X#=~R؃mϱ0^z-א0?NV159k;@Nbny輌r6iUf]>t:9ִx4ʉc=B=moPͷv˒ bȑRdZ8( D 8($NQL UD:29)%\ +(zGQ8 $CT75Y.&J \%Fky&2:Ѣe{+$jWG?ۓJq(du:"H), tP~ ~e)rM%\lO8*ygg>ƧpD OtKt\:]E%+ )S gͻgOvL2%7tt#ha)fQx6 (C wo%_s Y;WlEO/`6Cd]N#`m]Km52x9gPu'J9Hk`L.pO3C>%\_v6GpJ> /ExtGState << /GS1 23 0 R >> >> endobj 188 0 obj << /D [187 0 R /XYZ null 730 null] >> endobj 189 0 obj << /D [187 0 R /XYZ null 718 null] >> endobj 190 0 obj << /D [187 0 R /XYZ null 706 null] >> endobj 191 0 obj << /D [187 0 R /XYZ null 694 null] >> endobj 192 0 obj << /D [187 0 R /XYZ null 675 null] >> endobj 193 0 obj << /D [187 0 R /XYZ null 657 null] >> endobj 194 0 obj << /D [187 0 R /XYZ null 645 null] >> endobj 195 0 obj << /D [187 0 R /XYZ null 621 null] >> endobj 196 0 obj << /D [187 0 R /XYZ null 609 null] >> endobj 197 0 obj << /D [187 0 R /XYZ null 596 null] >> endobj 198 0 obj << /D [187 0 R /XYZ null 584 null] >> endobj 199 0 obj << /D [187 0 R /XYZ null 572 null] >> endobj 200 0 obj << /D [187 0 R /XYZ null 560 null] >> endobj 201 0 obj << /D [187 0 R /XYZ null 548 null] >> endobj 202 0 obj << /D [187 0 R /XYZ null 536 null] >> endobj 203 0 obj << /D [187 0 R /XYZ null 524 null] >> endobj 204 0 obj << /D [187 0 R /XYZ null 511 null] >> endobj 205 0 obj << /D [187 0 R /XYZ null 499 null] >> endobj 206 0 obj << /D [187 0 R /XYZ null 475 null] >> endobj 207 0 obj << /D [187 0 R /XYZ null 463 null] >> endobj 208 0 obj << /D [187 0 R /XYZ null 451 null] >> endobj 209 0 obj << /D [187 0 R /XYZ null 438 null] >> endobj 210 0 obj << /D [187 0 R /XYZ null 426 null] >> endobj 211 0 obj << /D [187 0 R /XYZ null 414 null] >> endobj 212 0 obj << /D [187 0 R /XYZ null 402 null] >> endobj 213 0 obj << /D [187 0 R /XYZ null 390 null] >> endobj 214 0 obj << /D [187 0 R /XYZ null 378 null] >> endobj 215 0 obj << /D [187 0 R /XYZ null 359 null] >> endobj 216 0 obj << /D [187 0 R /XYZ null 341 null] >> endobj 217 0 obj << /D [187 0 R /XYZ null 317 null] >> endobj 218 0 obj << /D [187 0 R /XYZ null 293 null] >> endobj 219 0 obj << /D [187 0 R /XYZ null 281 null] >> endobj 220 0 obj << /D [187 0 R /XYZ null 270 null] >> endobj 221 0 obj << /D [187 0 R /XYZ null 259 null] >> endobj 222 0 obj << /D [187 0 R /XYZ null 248 null] >> endobj 223 0 obj << /D [187 0 R /XYZ null 237 null] >> endobj 224 0 obj << /D [187 0 R /XYZ null 225 null] >> endobj 225 0 obj << /D [187 0 R /XYZ null 214 null] >> endobj 226 0 obj << /D [187 0 R /XYZ null 201 null] >> endobj 227 0 obj << /D [187 0 R /XYZ null 189 null] >> endobj 228 0 obj << /D [187 0 R /XYZ null 177 null] >> endobj 229 0 obj << /D [187 0 R /XYZ null 165 null] >> endobj 230 0 obj << /D [187 0 R /XYZ null 153 null] >> endobj 231 0 obj << /D [187 0 R /XYZ null 141 null] >> endobj 232 0 obj << /D [187 0 R /XYZ null 116 null] >> endobj 233 0 obj << /D [187 0 R /XYZ null 104 null] >> endobj 234 0 obj << /D [187 0 R /XYZ null 92 null] >> endobj 235 0 obj << /D [187 0 R /XYZ null null null] >> endobj 184 0 obj << /P 136 0 R /R [63 63 549 729] /V 133 0 R /N 236 0 R >> endobj 237 0 obj << /Length 2996 /Filter /FlateDecode >> stream HWm۸ t%-9$!1%[,uk[,n33-y{rAXSp8|Ͼ(r?OT<ȏS~@M!Q5} GϼLA"i`r? d~`X !A~>F'~zԃ7\`Sß0ۚ-6+G>HYLyu/cyݦ% ^# tB}܌FZ0QN Co3OXd9`X8Us_D~Dh7(:x3.. |ՕQ5WQ7LQ=+eM͖1UR-Ɖh=0p@ b*6,xgW:A{WϼՃaoI{u!XΰJU-ZMHLp"Hj{ ,qԆg!mBoLQD4R%ݹ?[6û7?oHysх ut/ԪF7zѣBAajoZWٞ6oGrJ= F]oclAvL5x1"a6pCpM&5U uDqg܏ \_(Q|ח#\$p%_;D!5U1q/3ABr4,Pu\X)&\6\30>^r]i,Z1uoN1mFWAFyxG%֋w f)z9"kFqêPXXࣨϷz1F;-B6@~Mw( E&ȶ#N-16Sk)UsRqRT1O m T:7k 뛕蔓(ZQvDDEsw 7Tڒu,*\Z(uIDfv::K Zwv^ra^qPV5ŕ,{,LppzQz3jԿDu(D2qjj_8ݚnk s/{sކ &qL 2J]D:YH׮kj"Qb$唫j7ޔ"-yy|&!_آчxwʞ#pp_3J!̽y:'!>+TA'視%8 ;Y&8f!#C?; f]׺w |;۱M]b:8C SG NŶ͟yN,Fj]G۩zy6H޵=8[oq._s5f$,7hA-ږn|DAy=u7 WH d'~ Ⱥؾ)XX 㥆$A7[c$6OauxSp*{ټx皡ǃtwŕ̻6 lH`Ga61rE+dNy?TAf\gDžf~wje]ꈞMxRsVUrz%%ZHݰ1ݫ :fo QS{R9Ab\FM P~\ `QtiJ'w\qiunQ+iKVnj*uWb4%7/rL{RR@&} 6Zd?$ 0> /ExtGState << /GS1 23 0 R >> >> endobj 240 0 obj << /D [239 0 R /XYZ null 730 null] >> endobj 241 0 obj << /D [239 0 R /XYZ null 718 null] >> endobj 242 0 obj << /D [239 0 R /XYZ null 706 null] >> endobj 243 0 obj << /D [239 0 R /XYZ null 694 null] >> endobj 244 0 obj << /D [239 0 R /XYZ null 682 null] >> endobj 245 0 obj << /D [239 0 R /XYZ null 670 null] >> endobj 246 0 obj << /D [239 0 R /XYZ null 652 null] >> endobj 247 0 obj << /D [239 0 R /XYZ null 634 null] >> endobj 248 0 obj << /D [239 0 R /XYZ null 598 null] >> endobj 249 0 obj << /D [239 0 R /XYZ null 574 null] >> endobj 250 0 obj << /D [239 0 R /XYZ null 562 null] >> endobj 251 0 obj << /D [239 0 R /XYZ null 550 null] >> endobj 252 0 obj << /D [239 0 R /XYZ null 538 null] >> endobj 253 0 obj << /D [239 0 R /XYZ null 526 null] >> endobj 254 0 obj << /D [239 0 R /XYZ null 513 null] >> endobj 255 0 obj << /D [239 0 R /XYZ null 501 null] >> endobj 256 0 obj << /D [239 0 R /XYZ null 489 null] >> endobj 257 0 obj << /D [239 0 R /XYZ null 477 null] >> endobj 258 0 obj << /D [239 0 R /XYZ null 465 null] >> endobj 259 0 obj << /D [239 0 R /XYZ null 453 null] >> endobj 260 0 obj << /D [239 0 R /XYZ null 429 null] >> endobj 261 0 obj << /D [239 0 R /XYZ null 417 null] >> endobj 262 0 obj << /D [239 0 R /XYZ null 405 null] >> endobj 263 0 obj << /D [239 0 R /XYZ null 393 null] >> endobj 264 0 obj << /D [239 0 R /XYZ null 381 null] >> endobj 265 0 obj << /D [239 0 R /XYZ null 369 null] >> endobj 266 0 obj << /D [239 0 R /XYZ null 351 null] >> endobj 267 0 obj << /D [239 0 R /XYZ null 333 null] >> endobj 268 0 obj << /D [239 0 R /XYZ null 321 null] >> endobj 269 0 obj << /D [239 0 R /XYZ null 297 null] >> endobj 270 0 obj << /D [239 0 R /XYZ null 285 null] >> endobj 271 0 obj << /D [239 0 R /XYZ null 273 null] >> endobj 272 0 obj << /D [239 0 R /XYZ null 261 null] >> endobj 273 0 obj << /D [239 0 R /XYZ null 249 null] >> endobj 274 0 obj << /D [239 0 R /XYZ null 237 null] >> endobj 275 0 obj << /D [239 0 R /XYZ null 224 null] >> endobj 276 0 obj << /D [239 0 R /XYZ null 212 null] >> endobj 277 0 obj << /D [239 0 R /XYZ null 200 null] >> endobj 278 0 obj << /D [239 0 R /XYZ null 188 null] >> endobj 279 0 obj << /D [239 0 R /XYZ null 176 null] >> endobj 280 0 obj << /D [239 0 R /XYZ null 158 null] >> endobj 281 0 obj << /D [239 0 R /XYZ null 140 null] >> endobj 282 0 obj << /D [239 0 R /XYZ null 128 null] >> endobj 283 0 obj << /D [239 0 R /XYZ null 104 null] >> endobj 284 0 obj << /D [239 0 R /XYZ null 92 null] >> endobj 285 0 obj << /D [239 0 R /XYZ null null null] >> endobj 236 0 obj << /P 187 0 R /R [63 63 549 729] /V 184 0 R /N 286 0 R >> endobj 287 0 obj << /Length 3522 /Filter /FlateDecode >> stream HW[o:~/G*눺plmO"ӎve+I΅|imi"pofލ^J_~ "?DE&Fׯ1߿*1[ר_77 ȏCw-Iɡ 4c0ŏ CAN܃lͳ tx/DKSz"8,>wPc2m0%:?",jKAw D^xy_p,P`st1s{v*Jaɇ9g"9,_$X!~Y@D]rP@ l^cw՝Πvy!yC@{dWbGm ¶%ĹicG+I$XIȸ̨4BNj&2 T#,YF6q45Xu6 #,{I׆K9nўiLj[AƘ|GVWӶI]΢[&٣W@bT&VЕCv<0Pڷ:k 8eV'tO0uos( P[%y"Z;EuU'OPabb^5@1 lJ4k-'n~ۚt/Yiң*ȷɺBRSusQ*;* d \hDtkj .ga1eROא3N7d Xq dc@!8P` 5P2j3}dc^"e.Ytk/ ~6(`*P/ w92Gjbqz;ZuٵH^rk/k^H*/h1 O*6 a8GAf_KhL=g^ͥiX-Ț/$E KQ Y+B,k"v9% 1Nn{0K<i7vL4I#W[#g:F=\T1V aQanwn ʲb쁒hJQ[)WoiM!U WEo^xH< }ᾨ{"skc݋hxTAR ilö Y(pCRTn2 _#v'?8Fuqyq$gnTg7X/} OrصKw.6!b"ڋ͋M+vzY,\,|jKʍMhiT0$sn~H?څ:J{zG?"m$$`9ؕX-GM"m~lim8x<Z#,Q3 ×>Wmw_oqݵ /ÃrӞɇD[=ކ߾S>PB?0U7&|:H>-?ݟG!@5CtNGZW#!O RE=}{:j12).#.~OM9(cGnuwj2ev84C(&a-]b+B[)uZ.`USw>WN WA*y6q P2%sD9`>ЬjΑ0xG$F-P5;K@&h$ ѥҪn,Sg5ڐ8s7[-Dj%MIZQd+0ͥ<K%y3@ot[,|*J + 喭-òcZ\ނMr^YIXR[R_;wU1\W(rSN=-+)BAo%fzѶ,_ XnL?.!dnGuP3k S=W46~%EUDCګa(#mWMQ3-4@#k4v!&D'a h)H 4/%Q k}i7$^I@eF*<#uH-;-IB63;5vOEV, Ru+qi5s^iZ7IC+ JwlNd#oU endstream endobj 288 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F3 22 0 R /F4 54 0 R >> /ExtGState << /GS1 23 0 R >> >> endobj 290 0 obj << /D [289 0 R /XYZ null 730 null] >> endobj 291 0 obj << /D [289 0 R /XYZ null 718 null] >> endobj 292 0 obj << /D [289 0 R /XYZ null 688 null] >> endobj 293 0 obj << /D [289 0 R /XYZ null 670 null] >> endobj 294 0 obj << /D [289 0 R /XYZ null 658 null] >> endobj 295 0 obj << /D [289 0 R /XYZ null 622 null] >> endobj 296 0 obj << /D [289 0 R /XYZ null 610 null] >> endobj 297 0 obj << /D [289 0 R /XYZ null 598 null] >> endobj 298 0 obj << /D [289 0 R /XYZ null 586 null] >> endobj 299 0 obj << /D [289 0 R /XYZ null 574 null] >> endobj 300 0 obj << /D [289 0 R /XYZ null 562 null] >> endobj 301 0 obj << /D [289 0 R /XYZ null 550 null] >> endobj 302 0 obj << /D [289 0 R /XYZ null 538 null] >> endobj 303 0 obj << /D [289 0 R /XYZ null 526 null] >> endobj 304 0 obj << /D [289 0 R /XYZ null 513 null] >> endobj 305 0 obj << /D [289 0 R /XYZ null 501 null] >> endobj 306 0 obj << /D [289 0 R /XYZ null 489 null] >> endobj 307 0 obj << /D [289 0 R /XYZ null 477 null] >> endobj 308 0 obj << /D [289 0 R /XYZ null 465 null] >> endobj 309 0 obj << /D [289 0 R /XYZ null 453 null] >> endobj 310 0 obj << /D [289 0 R /XYZ null 441 null] >> endobj 311 0 obj << /D [289 0 R /XYZ null 429 null] >> endobj 312 0 obj << /D [289 0 R /XYZ null 417 null] >> endobj 313 0 obj << /D [289 0 R /XYZ null 405 null] >> endobj 314 0 obj << /D [289 0 R /XYZ null 393 null] >> endobj 315 0 obj << /D [289 0 R /XYZ null 381 null] >> endobj 316 0 obj << /D [289 0 R /XYZ null 369 null] >> endobj 317 0 obj << /D [289 0 R /XYZ null 345 null] >> endobj 318 0 obj << /D [289 0 R /XYZ null 333 null] >> endobj 319 0 obj << /D [289 0 R /XYZ null 321 null] >> endobj 320 0 obj << /D [289 0 R /XYZ null 303 null] >> endobj 321 0 obj << /D [289 0 R /XYZ null 285 null] >> endobj 322 0 obj << /D [289 0 R /XYZ null 273 null] >> endobj 323 0 obj << /D [289 0 R /XYZ null 249 null] >> endobj 324 0 obj << /D [289 0 R /XYZ null 237 null] >> endobj 325 0 obj << /D [289 0 R /XYZ null 225 null] >> endobj 326 0 obj << /D [289 0 R /XYZ null 212 null] >> endobj 327 0 obj << /D [289 0 R /XYZ null 200 null] >> endobj 328 0 obj << /D [289 0 R /XYZ null 188 null] >> endobj 329 0 obj << /D [289 0 R /XYZ null 176 null] >> endobj 330 0 obj << /D [289 0 R /XYZ null 164 null] >> endobj 331 0 obj << /D [289 0 R /XYZ null 152 null] >> endobj 332 0 obj << /D [289 0 R /XYZ null 140 null] >> endobj 333 0 obj << /D [289 0 R /XYZ null 128 null] >> endobj 334 0 obj << /D [289 0 R /XYZ null 116 null] >> endobj 335 0 obj << /D [289 0 R /XYZ null 104 null] >> endobj 336 0 obj << /D [289 0 R /XYZ null 92 null] >> endobj 337 0 obj << /D [289 0 R /XYZ null null null] >> endobj 286 0 obj << /P 239 0 R /R [63 63 549 729] /V 236 0 R /N 338 0 R >> endobj 339 0 obj << /Length 2891 /Filter /FlateDecode >> stream HWmoF a?.#rR>y9PEEѶ߼쒢$[n.ERH3x쇷J(z,DG:TAh6AP\>(q[XϟIz*#,"ɂP#yCӎP,?( ^x"YߨQ[*T _JQHG˃Lvϖ^KHV?:ez:H8;I a`L;8*T$s?y~$./[/ ,=b*|p=)7$Rзk[p~) HúEmbpC{ko>t=eA`1:QGv y(h;)a\ 1G.˲DS{Mߵ*qx0s|Ȥr@Dk1[Vr,A gUpXy*k+0Jڥ}:~yN |Mh[+k 2zu8Ơ lXϏ= "~`r;`PJYtD7lo}tI@%P≔RJ`Fp-"ЇP觥=MSg*ƫ=RCf7TVv _ ^~wdF'9' 1փdQ aahE١0+/CAWD+Cb2d o acc%&Z\|?JDA6Ʈ޷@@Cy[fLJ`@:oŲk@_J {)WHwekP3>ALtU]ěvА\p_ v&QG*;_Om^}Mω{J_hy¼UlE_@rjVF❞@؞Rkеa:9afAy$5I!tdy86&j\z8</gJ]nYV7 Xx$Y+$Ԁ=K8yMgt,qx@ba9;4EFIu:!0T6 bآnKʠ/DܥRU5(gb;f.a;J1#lj  I*hcMJQO+|a|`+ J#H{ko#1HPXe⛖)syOLek0!)zXf %HEg 2'/Q.Gm24Ev54=@qr [_ ,m֬aȼ%+ox~i~MLW/d;o{o7Vv (l MQN0qncz>rgsqgTv-Jt)=Ls񧍀'zK6x[h{/ɧ(olO޲! qm n]7!eĶdsAXug&(LG9gS3Mt h]6jƯe1#PaK]>sei1c9o09BE;!?WC4zǿ@M5VG#Hf b`O @4 s++ؚfUF Ql19mƤ V>^U*fp!l#M;XqP8y:Lm*.EZuU}]+&cjP*h WqLVqQf1c)b%ݬC$TR* YfI?T*0W 3BzcXUaFEl kx( &|,(*Y4V- jĿP02v*HoV =`A*(H䀥sA)5Ԁ!FFAU[_(ս䔾3{ endstream endobj 340 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F3 22 0 R /F4 54 0 R >> /ExtGState << /GS1 23 0 R >> >> endobj 342 0 obj << /D [341 0 R /XYZ null 730 null] >> endobj 343 0 obj << /D [341 0 R /XYZ null 712 null] >> endobj 344 0 obj << /D [341 0 R /XYZ null 700 null] >> endobj 345 0 obj << /D [341 0 R /XYZ null 676 null] >> endobj 346 0 obj << /D [341 0 R /XYZ null 664 null] >> endobj 347 0 obj << /D [341 0 R /XYZ null 652 null] >> endobj 348 0 obj << /D [341 0 R /XYZ null 628 null] >> endobj 349 0 obj << /D [341 0 R /XYZ null 616 null] >> endobj 350 0 obj << /D [341 0 R /XYZ null 604 null] >> endobj 351 0 obj << /D [341 0 R /XYZ null 579 null] >> endobj 352 0 obj << /D [341 0 R /XYZ null 557 null] >> endobj 353 0 obj << /D [341 0 R /XYZ null 539 null] >> endobj 354 0 obj << /D [341 0 R /XYZ null 497 null] >> endobj 355 0 obj << /D [341 0 R /XYZ null 479 null] >> endobj 356 0 obj << /D [341 0 R /XYZ null 461 null] >> endobj 357 0 obj << /D [341 0 R /XYZ null 431 null] >> endobj 358 0 obj << /D [341 0 R /XYZ null 413 null] >> endobj 359 0 obj << /D [341 0 R /XYZ null null null] >> endobj 360 0 obj << /D [341 0 R /XYZ null null null] >> endobj 338 0 obj << /P 289 0 R /R [63 63 549 729] /V 286 0 R /N 361 0 R >> endobj 370 0 obj << /Length 3140 /Filter /FlateDecode >> stream HWKs8"D>@x<=ѬoM%q#J6~EQd*~~xx~F8??˃? *͂X SE|G<0/~0.UU4 sW.V6Wk?vn*L)( ec*q>L]OnƊOޓE"gxewY2~ Æ&^uq*\̆ȘW Ei9S,D^Ob*__dyDʊ',^3Dzо~"եA{o ^zw}_ 4paTY4!j⋬3" ^7&"ׄ b0M&p_5O+sGYb1In^1rcA"89=F0s5s"h ,رA༤F &%_)iهFj#<"R88Z+4Z9Xx9Q+dLhE Dpx!ÉFG4E_U&pX ^9MМP@Sgh@Cxzw6mן{q VrGlnLHtxҪnH!07G:OU]Q 1?~v<xMеݓW.NbQM@^d0B١\yy phfsp(JNu hUS ~B sBWC:UR('!;CRFQ GG@x C29{U(M0Yv1B"j)"{2֪RpB ^E蠥^0p\`x5in~&bT=QL`m=zF`<&H}C`<&=恙R@l q*BT1zjM5? >j|zPu{׾rrSC4}ntޢ"⇰ ds&y +AS9ec';*Uo?]=vMY1>zg^x?&'5wjءPSB_ lQ--dBj#mAݲz8ڎ7mョc5DR7x}ءX gIy4jfFe1hcZd)c;;P J'uf߿c 78}5 ԣHջ-8Vj0j%yM1r(6E{ߥ;mT,+\d^"xC3W$$ EYQѕKn2wgulb|:Q1/:>z9b7"X\bG Ov4a^ N^BӛтY{<ƑcSL4z9MؑOrtDo]=TS}L[ =ju4"dMirn-A:̻cQE +>ɖ?+Iw@'O4b%0Jذ-9sk5+ >Yt=++:rZqd(8Maz^sШGVRK߀rv DhٮqĝӄtǢp@@k48yKFu+3 _͋Y\w1dnhLR˞FN˩&s\cE DS ]jJo`aN]0@"Sfȅ qBPbI<)7&o%A&N-xHf~utp\eG` 1?y}B /ĺ'#{,d{;AKJ b<4$gvIT-Rhunv|(ɪZ3 Ě )Hcw)4J};Ց}t 󇬚Bu)eWe*FZdwQ3K@OH;lj節HݚCB^k.hI ٫`eDjf)k. |VR|xY(X _p4'Mp1o .ևb;S!RoAgIDTu/IC#=4.N.65T_vhY ٟ l9]&ȰN.asQ%|Ŋt&pw.ThKѝ g\R-бuZ+$'yȹ9&YZ$Ve376aPp{̈3yCYqIFg,?N-̤$FI,6JVi5r:5!k*J4K͹3BB@k OhnKJ.x!<6 u2AU. ;ĉTmj;\<<۬icoGA[b!`%nã{j^,8u*-(Z+DjCe ƟV=ϗq=FT&'*oA4W6Ǟ\!i4SyשeTԷK޵zP(op[$DDNڶ6 (:%ڑ4ը9TR*h (Bg+Wmhݱ77? endstream endobj 371 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F2 21 0 R /F3 22 0 R /F4 54 0 R /F5 372 0 R >> /ExtGState << /GS1 23 0 R >> >> endobj 375 0 obj << /ProcSet [/PDF /ImageB ] /ExtGState << /GS1 23 0 R >> >> endobj 77 0 obj << /Type /Pattern /PatternType 1 /Resources 375 0 R /Matrix [0.96 0 0 -0.96 9.45 773.85] /PaintType 1 /TilingType 1 /BBox [0 0 1 1] /XStep 1 /YStep 1 /Length 102 /Filter /FlateDecode >> stream H2T0¢t^.}`Cb^..P4+ AB^.C0GD*$r9y+XI0`=}JJFx(00¼\@偼\a endstream endobj 376 0 obj << /ProcSet [/PDF /ImageB ] /ExtGState << /GS1 23 0 R >> >> endobj 78 0 obj << /Type /Pattern /PatternType 1 /Resources 376 0 R /Matrix [0.96 0 0 -0.96 9.45 773.85] /PaintType 1 /TilingType 1 /BBox [0 0 1 1] /XStep 1 /YStep 1 /Length 99 /Filter /FlateDecode >> stream H2T0¢t^.}`Cb^..P4+ AB^.C0GD*$r9y+XI0`=}JJFx(C/+Py /@E7 endstream endobj 377 0 obj << /ProcSet [/PDF /ImageB ] /ExtGState << /GS1 23 0 R >> >> endobj 79 0 obj << /Type /Pattern /PatternType 1 /Resources 377 0 R /Matrix [0.96 0 0 -0.96 9.45 773.85] /PaintType 1 /TilingType 1 /BBox [0 0 1 1] /XStep 1 /YStep 1 /Length 104 /Filter /FlateDecode >> stream H2T0¢t^.}`Cb^..P4+ AB^.C0GD*$r9y+XI0`=}JJFx(|o?< d endstream endobj 378 0 obj << /Type /Halftone /HalftoneType 1 /HalftoneName (Default) /Frequency 60 /Angle 45 /SpotFunction /Round >> endobj 23 0 obj << /Type /ExtGState /SA false /OP false /HT /Default >> endobj 20 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Times-Roman >> endobj 21 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica-Bold >> endobj 22 0 obj << /Type /Font /Subtype /Type1 /Name /F3 /BaseFont /Times-Italic >> endobj 54 0 obj << /Type /Font /Subtype /Type1 /Name /F4 /BaseFont /Courier >> endobj 372 0 obj << /Type /Font /Subtype /Type1 /Name /F5 /Encoding 379 0 R /BaseFont /Times-Roman >> endobj 379 0 obj << /Type /Encoding /Differences [ 0/grave/acute/circumflex/tilde/macron/breve/dotaccent/dieresis /ring/cedilla/hungarumlaut/ogonek/caron/dotlessi/fi/fl /Lslash/lslash/Zcaron/zcaron/minus 39/quotesingle 96/grave 130/quotesinglbase /florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron /guilsinglleft/OE 145/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash /emdash/tilde/trademark/scaron/guilsinglright/oe 159/Ydieresis 164/currency 166/brokenbar 168/dieresis/copyright/ordfeminine 172/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu 183/periodcentered/cedilla /onesuperior/ordmasculine 188/onequarter/onehalf/threequarters 192/Agrave/Aacute/Acircumflex /Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex /Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve /Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute /Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex /atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex /edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve /oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute /ucircumflex/udieresis/yacute/thorn/ydieresis ] >> endobj 1 0 obj << /Type /Page /Parent 24 0 R /Resources 19 0 R /Contents 18 0 R /CropBox [0 0 612 791] /B [17 0 R] >> endobj 25 0 obj << /Type /Page /Parent 24 0 R /Resources 36 0 R /Contents 35 0 R /CropBox [0 0 612 791] /B [34 0 R] >> endobj 37 0 obj << /Type /Page /Parent 24 0 R /Resources 53 0 R /Contents 52 0 R /CropBox [0 0 612 791] /B [51 0 R] >> endobj 55 0 obj << /Type /Page /Parent 24 0 R /Resources 76 0 R /Contents 75 0 R /CropBox [0 0 612 791] /B [74 0 R] >> endobj 81 0 obj << /Type /Page /Parent 24 0 R /Resources 102 0 R /Contents 101 0 R /CropBox [0 0 612 791] /B [100 0 R] >> endobj 103 0 obj << /Type /Page /Parent 24 0 R /Resources 135 0 R /Contents 134 0 R /CropBox [0 0 612 791] /B [133 0 R] >> endobj 136 0 obj << /Type /Page /Parent 24 0 R /Resources 186 0 R /Contents 185 0 R /CropBox [0 0 612 791] /B [184 0 R] >> endobj 187 0 obj << /Type /Page /Parent 24 0 R /Resources 238 0 R /Contents 237 0 R /CropBox [0 0 612 791] /B [236 0 R] >> endobj 239 0 obj << /Type /Page /Parent 24 0 R /Resources 288 0 R /Contents 287 0 R /CropBox [0 0 612 791] /B [286 0 R] >> endobj 289 0 obj << /Type /Page /Parent 24 0 R /Resources 340 0 R /Contents 339 0 R /CropBox [0 0 612 791] /B [338 0 R] >> endobj 341 0 obj << /Type /Page /Parent 374 0 R /Resources 371 0 R /Contents 370 0 R /CropBox [0 0 612 791] /B [361 0 R] >> endobj 24 0 obj << /Type /Pages /Kids [1 0 R 25 0 R 37 0 R 55 0 R 81 0 R 103 0 R 136 0 R 187 0 R 239 0 R 289 0 R] /Count 10 /Parent 373 0 R >> endobj 374 0 obj << /Type /Pages /Kids [341 0 R] /Count 1 /Parent 373 0 R >> endobj 373 0 obj << /Type /Pages /Kids [24 0 R 374 0 R ] /Count 11 /MediaBox [0 0 612 792] >> endobj 380 0 obj << /Count 8 /First 362 0 R /Last 362 0 R >> endobj 362 0 obj << /Title (ARMCI: A Portable Aggregate Remote Memory Copy Interface) /Dest [1 0 R /XYZ null 737 null] /Parent 380 0 R /First 363 0 R /Last 369 0 R /Count 7 >> endobj 363 0 obj << /Title (Motivation and Background) /Dest [1 0 R /XYZ null 617 null] /Parent 362 0 R /Next 364 0 R >> endobj 364 0 obj << /Title (ARMCI Data Structures) /Dest [25 0 R /XYZ null 219 null] /Parent 362 0 R /Prev 363 0 R /Next 365 0 R >> endobj 365 0 obj << /Title (ARMCI Operations) /Dest [81 0 R /XYZ null 602 null] /Parent 362 0 R /Prev 364 0 R /Next 369 0 R /First 366 0 R /Last 368 0 R /Count 3 >> endobj 366 0 obj << /Title (Progress and ordering) /Dest [103 0 R /XYZ null 737 null] /Parent 365 0 R /Next 367 0 R >> endobj 367 0 obj << /Title (Memory allocation) /Dest [103 0 R /XYZ null 617 null] /Parent 365 0 R /Prev 366 0 R /Next 368 0 R >> endobj 368 0 obj << /Title (List of Operations) /Dest [103 0 R /XYZ null 406 null] /Parent 365 0 R /Prev 367 0 R >> endobj 369 0 obj << /Title (References) /Dest [341 0 R /XYZ null 587 null] /Parent 362 0 R /Prev 365 0 R >> endobj 361 0 obj << /P 341 0 R /R [63 63 549 729] /V 338 0 R /N 17 0 R >> endobj 17 0 obj << /T 16 0 R /P 1 0 R /R [63 63 549 729] /V 361 0 R /N 34 0 R >> endobj 381 0 obj [ 16 0 R ] endobj 382 0 obj << /Limits [(F) (G1000493)] /Names [(F) 15 0 R (G1000018) 174 0 R (G1000019) 175 0 R (G1000020) 176 0 R (G1000021) 177 0 R (G1000022) 178 0 R (G1000023) 179 0 R (G1000024) 180 0 R (G1000038) 217 0 R (G1000039) 218 0 R (G1000040) 219 0 R (G1000041) 220 0 R (G1000042) 221 0 R (G1000043) 222 0 R (G1000044) 223 0 R (G1000045) 224 0 R (G1000046) 225 0 R (G1000047) 226 0 R (G1000048) 232 0 R (G1000049) 233 0 R (G1000054) 227 0 R (G1000055) 228 0 R (G1000056) 229 0 R (G1000059) 231 0 R (G1000066) 230 0 R (G1000073) 234 0 R (G1000084) 182 0 R (G1000085) 188 0 R (G1000097) 167 0 R (G1000098) 168 0 R (G1000106) 152 0 R (G1000115) 128 0 R (G1000116) 129 0 R (G1000128) 248 0 R (G1000136) 249 0 R (G1000137) 250 0 R (G1000138) 251 0 R (G1000139) 252 0 R (G1000140) 253 0 R (G1000141) 254 0 R (G1000145) 262 0 R (G1000189) 255 0 R (G1000190) 256 0 R (G1000191) 257 0 R (G1000192) 258 0 R (G1000193) 259 0 R (G1000194) 261 0 R (G1000216) 260 0 R (G1000225) 181 0 R (G1000232) 166 0 R (G1000239) 344 0 R (G1000288) 323 0 R (G1000289) 324 0 R (G1000290) 325 0 R (G1000300) 322 0 R (G1000345) 346 0 R (G1000382) 347 0 R (G1000425) 348 0 R (G1000426) 349 0 R (G1000427) 350 0 R (G1000448) 331 0 R (G1000449) 332 0 R (G1000450) 333 0 R (G1000493) 291 0 R] >> endobj 383 0 obj << /Limits [(G1000504) (G1000923)] /Names [(G1000504) 281 0 R (G1000506) 290 0 R (G1000510) 282 0 R (G1000511) 283 0 R (G1000512) 284 0 R (G1000543) 279 0 R (G1000560) 268 0 R (G1000561) 269 0 R (G1000562) 270 0 R (G1000571) 271 0 R (G1000572) 272 0 R (G1000575) 275 0 R (G1000579) 276 0 R (G1000583) 277 0 R (G1000590) 278 0 R (G1000687) 70 0 R (G1000688) 112 0 R (G1000689) 139 0 R (G1000690) 137 0 R (G1000692) 156 0 R (G1000693) 171 0 R (G1000694) 172 0 R (G1000695) 191 0 R (G1000696) 242 0 R (G1000697) 265 0 R (G1000789) 215 0 R (G1000801) 204 0 R (G1000806) 203 0 R (G1000814) 193 0 R (G1000815) 194 0 R (G1000823) 195 0 R (G1000824) 196 0 R (G1000826) 197 0 R (G1000827) 198 0 R (G1000830) 199 0 R (G1000831) 200 0 R (G1000851) 214 0 R (G1000853) 205 0 R (G1000854) 206 0 R (G1000855) 207 0 R (G1000856) 208 0 R (G1000857) 209 0 R (G1000858) 210 0 R (G1000859) 211 0 R (G1000860) 212 0 R (G1000861) 213 0 R (G1000864) 345 0 R (G1000875) 201 0 R (G1000876) 202 0 R (G1000880) 240 0 R (G1000881) 241 0 R (G1000885) 130 0 R (G1000886) 131 0 R (G1000894) 153 0 R (G1000902) 154 0 R (G1000903) 155 0 R (G1000907) 169 0 R (G1000908) 170 0 R (G1000912) 189 0 R (G1000913) 190 0 R (G1000917) 263 0 R (G1000918) 264 0 R (G1000921) 329 0 R (G1000923) 327 0 R] >> endobj 384 0 obj << /Limits [(G1000924) (G997567)] /Names [(G1000924) 328 0 R (G1000936) 326 0 R (G1000943) 334 0 R (G1000944) 335 0 R (G1000945) 336 0 R (G1000961) 245 0 R (G1000981) 244 0 R (G1000990) 7 0 R (G1001002) 5 0 R (G1001005) 9 0 R (G1001022) 273 0 R (G1001023) 274 0 R (G1001046) 92 0 R (G1001056) 93 0 R (G1001064) 94 0 R (G1001067) 97 0 R (G1001075) 98 0 R (G1001098) 320 0 R (G1001104) 293 0 R (G1001107) 296 0 R (G1001108) 297 0 R (G1001109) 298 0 R (G1001110) 299 0 R (G1001111) 300 0 R (G1001126) 294 0 R (G1001127) 295 0 R (G1001134) 302 0 R (G1001135) 303 0 R (G1001136) 304 0 R (G1001139) 301 0 R (G1001145) 305 0 R (G1001146) 306 0 R (G1001147) 307 0 R (G1001153) 309 0 R (G1001154) 310 0 R (G1001155) 311 0 R (G1001162) 308 0 R (G1001180) 312 0 R (G1001181) 313 0 R (G1001193) 315 0 R (G1001194) 316 0 R (G1001195) 317 0 R (G1001196) 318 0 R (G1001197) 319 0 R (G1001205) 314 0 R (G997335) 3 0 R (G997338) 2 0 R (G997347) 4 0 R (G997358) 12 0 R (G997360) 28 0 R (G997371) 30 0 R (G997372) 31 0 R (G997378) 32 0 R (G997382) 38 0 R (G997383) 39 0 R (G997384) 40 0 R (G997385) 41 0 R (G997386) 42 0 R (G997387) 43 0 R (G997388) 47 0 R (G997390) 56 0 R (G997391) 57 0 R (G997394) 61 0 R (G997567) 59 0 R] >> endobj 385 0 obj << /Limits [(G997568) (G999785)] /Names [(G997568) 60 0 R (G997571) 62 0 R (G997581) 64 0 R (G997603) 157 0 R (G997604) 280 0 R (G997639) 115 0 R (G997658) 158 0 R (G997663) 192 0 R (G997665) 173 0 R (G997672) 140 0 R (G997679) 116 0 R (G997689) 105 0 R (G997698) 292 0 R (G997702) 321 0 R (G997703) 330 0 R (G997704) 107 0 R (G997712) 109 0 R (G997713) 110 0 R (G997714) 113 0 R (G997823) 48 0 R (G997952) 49 0 R (G997963) 8 0 R (G997984) 106 0 R (G997988) 108 0 R (G998097) 6 0 R (G998684) 67 0 R (G998823) 72 0 R (G998824) 90 0 R (G998865) 10 0 R (G998866) 11 0 R (G998964) 58 0 R (G999004) 343 0 R (G999010) 342 0 R (G999023) 65 0 R (G999024) 66 0 R (G999033) 44 0 R (G999039) 63 0 R (G999055) 45 0 R (G999056) 46 0 R (G999098) 91 0 R (G999101) 104 0 R (G999157) 247 0 R (G999215) 95 0 R (G999218) 351 0 R (G999268) 266 0 R (G999271) 246 0 R (G999281) 216 0 R (G999282) 243 0 R (G999296) 267 0 R (G999324) 26 0 R (G999328) 352 0 R (G999329) 29 0 R (G999352) 27 0 R (G999365) 355 0 R (G999412) 353 0 R (G999415) 354 0 R (G999422) 356 0 R (G999437) 357 0 R (G999450) 358 0 R (G999568) 96 0 R (G999780) 68 0 R (G999781) 69 0 R (G999782) 71 0 R (G999785) 82 0 R] >> endobj 386 0 obj << /Limits [(G999786) (P.9)] /Names [(G999786) 83 0 R (G999787) 84 0 R (G999788) 85 0 R (G999789) 86 0 R (G999793) 88 0 R (G999794) 89 0 R (G999798) 87 0 R (G999824) 111 0 R (G999827) 114 0 R (G999851) 149 0 R (G999869) 117 0 R (G999870) 125 0 R (G999871) 126 0 R (G999872) 138 0 R (G999878) 127 0 R (G999883) 118 0 R (G999891) 124 0 R (G999896) 119 0 R (G999897) 120 0 R (G999902) 121 0 R (G999908) 122 0 R (G999914) 123 0 R (G999922) 141 0 R (G999923) 142 0 R (G999924) 143 0 R (G999925) 144 0 R (G999926) 145 0 R (G999927) 146 0 R (G999928) 147 0 R (G999929) 148 0 R (G999935) 150 0 R (G999936) 151 0 R (G999957) 159 0 R (G999965) 160 0 R (G999966) 161 0 R (G999967) 162 0 R (G999977) 163 0 R (G999981) 164 0 R (G999985) 165 0 R (L) 360 0 R (P.1) 14 0 R (P.10) 337 0 R (P.11) 359 0 R (P.2) 33 0 R (P.3) 50 0 R (P.4) 73 0 R (P.5) 99 0 R (P.6) 132 0 R (P.7) 183 0 R (P.8) 235 0 R (P.9) 285 0 R] >> endobj 387 0 obj << /Kids [382 0 R 383 0 R 384 0 R 385 0 R 386 0 R] >> endobj 388 0 obj << /Dests 387 0 R >> endobj 389 0 obj << /Type /Catalog /Pages 373 0 R /Outlines 380 0 R /Threads 381 0 R /Names 388 0 R /OpenAction [1 0 R /XYZ null null null] /PageMode /UseOutlines >> endobj xref 0 390 0000000000 65535 f 0000076306 00000 n 0000000017 00000 n 0000000073 00000 n 0000000128 00000 n 0000000184 00000 n 0000000240 00000 n 0000000296 00000 n 0000000352 00000 n 0000000408 00000 n 0000000464 00000 n 0000000521 00000 n 0000000578 00000 n 0000000635 00000 n 0000000886 00000 n 0000000944 00000 n 0000001002 00000 n 0000079378 00000 n 0000001062 00000 n 0000005791 00000 n 0000074551 00000 n 0000074642 00000 n 0000074736 00000 n 0000074471 00000 n 0000077752 00000 n 0000076434 00000 n 0000005923 00000 n 0000005981 00000 n 0000006039 00000 n 0000006097 00000 n 0000006155 00000 n 0000006213 00000 n 0000006271 00000 n 0000006329 00000 n 0000012352 00000 n 0000006388 00000 n 0000011466 00000 n 0000076563 00000 n 0000011598 00000 n 0000011656 00000 n 0000011714 00000 n 0000011772 00000 n 0000011830 00000 n 0000011888 00000 n 0000011946 00000 n 0000012004 00000 n 0000012062 00000 n 0000012120 00000 n 0000012178 00000 n 0000012236 00000 n 0000012293 00000 n 0000020441 00000 n 0000012431 00000 n 0000019264 00000 n 0000074828 00000 n 0000076692 00000 n 0000019396 00000 n 0000019454 00000 n 0000019512 00000 n 0000019570 00000 n 0000019628 00000 n 0000019686 00000 n 0000019744 00000 n 0000019802 00000 n 0000019860 00000 n 0000019918 00000 n 0000019976 00000 n 0000020034 00000 n 0000020092 00000 n 0000020150 00000 n 0000020208 00000 n 0000020266 00000 n 0000020324 00000 n 0000020382 00000 n 0000031274 00000 n 0000020520 00000 n 0000029969 00000 n 0000073155 00000 n 0000073578 00000 n 0000073997 00000 n 0000030187 00000 n 0000076821 00000 n 0000030229 00000 n 0000030287 00000 n 0000030345 00000 n 0000030403 00000 n 0000030461 00000 n 0000030519 00000 n 0000030577 00000 n 0000030635 00000 n 0000030693 00000 n 0000030751 00000 n 0000030809 00000 n 0000030867 00000 n 0000030925 00000 n 0000030983 00000 n 0000031041 00000 n 0000031099 00000 n 0000031157 00000 n 0000031215 00000 n 0000037918 00000 n 0000031354 00000 n 0000036033 00000 n 0000076953 00000 n 0000036178 00000 n 0000036238 00000 n 0000036298 00000 n 0000036358 00000 n 0000036418 00000 n 0000036478 00000 n 0000036538 00000 n 0000036598 00000 n 0000036658 00000 n 0000036718 00000 n 0000036778 00000 n 0000036838 00000 n 0000036898 00000 n 0000036958 00000 n 0000037018 00000 n 0000037078 00000 n 0000037138 00000 n 0000037198 00000 n 0000037258 00000 n 0000037318 00000 n 0000037378 00000 n 0000037438 00000 n 0000037498 00000 n 0000037558 00000 n 0000037618 00000 n 0000037678 00000 n 0000037738 00000 n 0000037798 00000 n 0000037857 00000 n 0000045516 00000 n 0000037999 00000 n 0000042551 00000 n 0000077086 00000 n 0000042696 00000 n 0000042756 00000 n 0000042816 00000 n 0000042876 00000 n 0000042936 00000 n 0000042996 00000 n 0000043056 00000 n 0000043116 00000 n 0000043176 00000 n 0000043236 00000 n 0000043296 00000 n 0000043356 00000 n 0000043416 00000 n 0000043476 00000 n 0000043536 00000 n 0000043596 00000 n 0000043656 00000 n 0000043716 00000 n 0000043776 00000 n 0000043836 00000 n 0000043896 00000 n 0000043956 00000 n 0000044016 00000 n 0000044076 00000 n 0000044136 00000 n 0000044196 00000 n 0000044256 00000 n 0000044316 00000 n 0000044376 00000 n 0000044436 00000 n 0000044496 00000 n 0000044556 00000 n 0000044616 00000 n 0000044676 00000 n 0000044736 00000 n 0000044796 00000 n 0000044856 00000 n 0000044916 00000 n 0000044976 00000 n 0000045036 00000 n 0000045096 00000 n 0000045156 00000 n 0000045216 00000 n 0000045276 00000 n 0000045336 00000 n 0000045396 00000 n 0000045455 00000 n 0000052522 00000 n 0000045599 00000 n 0000049509 00000 n 0000077219 00000 n 0000049642 00000 n 0000049702 00000 n 0000049762 00000 n 0000049822 00000 n 0000049882 00000 n 0000049942 00000 n 0000050002 00000 n 0000050062 00000 n 0000050122 00000 n 0000050182 00000 n 0000050242 00000 n 0000050302 00000 n 0000050362 00000 n 0000050422 00000 n 0000050482 00000 n 0000050542 00000 n 0000050602 00000 n 0000050662 00000 n 0000050722 00000 n 0000050782 00000 n 0000050842 00000 n 0000050902 00000 n 0000050962 00000 n 0000051022 00000 n 0000051082 00000 n 0000051142 00000 n 0000051202 00000 n 0000051262 00000 n 0000051322 00000 n 0000051382 00000 n 0000051442 00000 n 0000051502 00000 n 0000051562 00000 n 0000051622 00000 n 0000051682 00000 n 0000051742 00000 n 0000051802 00000 n 0000051862 00000 n 0000051922 00000 n 0000051982 00000 n 0000052042 00000 n 0000052102 00000 n 0000052162 00000 n 0000052222 00000 n 0000052282 00000 n 0000052342 00000 n 0000052402 00000 n 0000052461 00000 n 0000058576 00000 n 0000052605 00000 n 0000055683 00000 n 0000077352 00000 n 0000055816 00000 n 0000055876 00000 n 0000055936 00000 n 0000055996 00000 n 0000056056 00000 n 0000056116 00000 n 0000056176 00000 n 0000056236 00000 n 0000056296 00000 n 0000056356 00000 n 0000056416 00000 n 0000056476 00000 n 0000056536 00000 n 0000056596 00000 n 0000056656 00000 n 0000056716 00000 n 0000056776 00000 n 0000056836 00000 n 0000056896 00000 n 0000056956 00000 n 0000057016 00000 n 0000057076 00000 n 0000057136 00000 n 0000057196 00000 n 0000057256 00000 n 0000057316 00000 n 0000057376 00000 n 0000057436 00000 n 0000057496 00000 n 0000057556 00000 n 0000057616 00000 n 0000057676 00000 n 0000057736 00000 n 0000057796 00000 n 0000057856 00000 n 0000057916 00000 n 0000057976 00000 n 0000058036 00000 n 0000058096 00000 n 0000058156 00000 n 0000058216 00000 n 0000058276 00000 n 0000058336 00000 n 0000058396 00000 n 0000058456 00000 n 0000058515 00000 n 0000065276 00000 n 0000058659 00000 n 0000062263 00000 n 0000077485 00000 n 0000062396 00000 n 0000062456 00000 n 0000062516 00000 n 0000062576 00000 n 0000062636 00000 n 0000062696 00000 n 0000062756 00000 n 0000062816 00000 n 0000062876 00000 n 0000062936 00000 n 0000062996 00000 n 0000063056 00000 n 0000063116 00000 n 0000063176 00000 n 0000063236 00000 n 0000063296 00000 n 0000063356 00000 n 0000063416 00000 n 0000063476 00000 n 0000063536 00000 n 0000063596 00000 n 0000063656 00000 n 0000063716 00000 n 0000063776 00000 n 0000063836 00000 n 0000063896 00000 n 0000063956 00000 n 0000064016 00000 n 0000064076 00000 n 0000064136 00000 n 0000064196 00000 n 0000064256 00000 n 0000064316 00000 n 0000064376 00000 n 0000064436 00000 n 0000064496 00000 n 0000064556 00000 n 0000064616 00000 n 0000064676 00000 n 0000064736 00000 n 0000064796 00000 n 0000064856 00000 n 0000064916 00000 n 0000064976 00000 n 0000065036 00000 n 0000065096 00000 n 0000065156 00000 n 0000065215 00000 n 0000069607 00000 n 0000065359 00000 n 0000068332 00000 n 0000077618 00000 n 0000068465 00000 n 0000068525 00000 n 0000068585 00000 n 0000068645 00000 n 0000068705 00000 n 0000068765 00000 n 0000068825 00000 n 0000068885 00000 n 0000068945 00000 n 0000069005 00000 n 0000069065 00000 n 0000069125 00000 n 0000069185 00000 n 0000069245 00000 n 0000069305 00000 n 0000069365 00000 n 0000069425 00000 n 0000069485 00000 n 0000069546 00000 n 0000079296 00000 n 0000078158 00000 n 0000078344 00000 n 0000078473 00000 n 0000078614 00000 n 0000078791 00000 n 0000078918 00000 n 0000079056 00000 n 0000079180 00000 n 0000069690 00000 n 0000072912 00000 n 0000074915 00000 n 0000077988 00000 n 0000077903 00000 n 0000073070 00000 n 0000073493 00000 n 0000073912 00000 n 0000074337 00000 n 0000075026 00000 n 0000078090 00000 n 0000079468 00000 n 0000079499 00000 n 0000080777 00000 n 0000082069 00000 n 0000083309 00000 n 0000084505 00000 n 0000085433 00000 n 0000085509 00000 n 0000085552 00000 n trailer << /Size 390 /Root 389 0 R /Info 13 0 R /ID [] >> startxref 85729 %%EOF ga-5-3/doc/armci/armci_overview.pdf0000640005473000001440000035615111164523540016164 0ustar d3n000users%PDF-1.2 %쏢 5 0 obj <> stream x=k&EuCs4bdH w=/DXYdٕvy,Y<!j$!AY4F\1QWRQJ,ĔgUJYtsg{}`LO>O…(?wAA`qiWO\3 n [{D7ugyxZ I^.A`qAVK {h0f>Ht@I =jYꪙH1PyZ[4kţy暪&Wb=qA>}zapїBK,5qV@KwQ^7/UDZ#` r oO+V f29Ÿi0daZÛazsbY>}jd1T:.[G^+"^Na~Z N|+ z hx\rdB5V|E4DhZ1lF24{7mGRMc#jX0CKQR,MюR#X'llnDcTXgcC>w?~'}vY#<7?8a~޴p1~_X{?|[[|O٣Wzo.?g0:/䣯8SrQ7|;q޿%Dܻo y郷? \va&}GWyĞ-]g8s M"eyL@S3b=ag߽7>s;=u/,CNEv+@IJ.H˅DۀGK: A$ HPoqȂ,s03+>s 8-FRj8ہ։%8gANèǂo.>~3 8^QA,v(iXGJ$ΆHliZ Rjd㢆5W IX,YXլjX3cǩ+I`KkqPpq XnD6؈4>{0Fd1E'R 1\ÐAðIQ80,ʅ8\b+ kE% E U8BxfK6lMp3U 00tJfh@0i|qeY6r& ExM7 U)x`9).i-, 3f MRK%OjBi7Ԅ~b5}iߩw<Kqw?ps~kvoƿ}dc;c iYfa=u-( WV_ s;fI‘]dMOaV3;bYjçhl˿%Bd韪 y& ]|e4RIZ'Z.''ryEy^B_=SHEO˽F> k瑭'9[ ˹ܙ?xj^m 1{cMI96 i Kj"*xoBc;Tah\\ۈ5IGj:E'_߻a]LԊradFdY|1B EWa,j+rфzr$IÄ|pzxzNnB} DUVR\('vLgo"rB4-1CL-tOz&-K| U\Z\9<(ZER4LIOuxQ6ĘՓ p_ˍ1sS:#Ec[+;D7ҞJoX#gFL`z3N"Z;+l[:(8SXrM -:6C'M4'Ky"nQOCo)go$3 /I1%iM$Ax)K(IxI /)1 TgdhS򍹜xoQ}Mp ,imA*K;O1IlBH[h0~4㗁'cDh㭦x#l4(҇aSe"t%$65|]k]˔c4l&>J-lX8) AiUdV.T+Ay ћh29zFu(QqTbqpqtA=lڂ*&H*LVR My`1)2֮5"Z/{>_ZI#FΑsYA#q!f 6!bx5ƔM:L2.G%rt#=#Qw*XFhꛖciN@_NI ϵĐk%d;ւL},ub/3Y7'y1REԒn^šCQtP}gF;MO]h|YG?Z2 JFَ WlTBh7 ƍ)cLdj-m h|ш|u?d&uJ|&PӔr VgTM!mH.9UX.LV'\*65xJ$V>Z;`mйm((.´څ>[lA}w;VDDY`'q84k\QLP qz^pM| 7#t *5hīH;(g,`R%9I]h1TdUj9SY{!5˨oөu ;*Hk 6BK٣MSkNy~9en+o)E[C&+9>-/i]Zq~'/E'h;C\YWis)<%{?RgT7X{AXwҥ0"aϥ.\r2uU\|1ז@tTrRiekV.đ?OIzнd]BSLTpIq%[r\_ 3;\'BݙAe;#֣FѤ,.{E˷%0;owpiXg@Ůgcd(yہU`0apS֬"v I @:Ni5BuaEz_G^X\U7wm*nkEݴyBVUݦnۀIjs$ƱQk ֛X\ > 1)kM^o.왦8ټ ǑaecY;j68EGʨu4!aªCGCFYQeԕ]27 OǙU- n Q[=5QAi1<&Augl-Xt~|gNK4m#vL@1Ir8">>xI#'DڳH diT e $@ )En}{g{1ĕrjq%B6n:d. b+/s F^cЭ}GE&pĦ3s1~bIO&O&T8(c㌜.d4m)Z(3KRs4r!VsIK}bmt%6wGߌĜ%kX 3aZ[C}sU%5ɗ]TKx.GWWBzq%az6U1i*`i^A4Tee\^EmQs5FHʲ%QzYuKzdVnѦ|enWak9VP?LLCSWh1+u'{o*7⎪Ud8oxLZLԡҪ}.-N- YaꀣÄX''s5tNq%y$Aܧ/: UfC<1Ry=r9 .JP^bR( $iࠢTC/PGkD3-&i:E7' bhX^3V&AL h9b#TNmbA-DJ}c#*far |jBYH9H̬>o7)Eo)H?9qy<d\`yk6mPң]Z+m]nNW؛Ԁ⮮|42IԪU7z4FɉQ.9AX:6s(n;=u@ ;<8,.<)gmըaʣdq\6GX=WK-G fv#jKM;*z |/ZK07WlOJˁQkQjBԟQ0mZ׍%şt>1c|݉>Vc}&5L9)S%LLZx;lG*q0 I9}}4RA= vL ] ׻*y0B47KJU*1ٵvGטD!Ggq8hg ܙk)}o/l,Ildw' /e|fO(I6k{)rtGpތ'[Su^!ܯOMjk³rF9YWě7#"lW z}|dʜ5nB)3G~'4Kf?uzEKIϋ/܆_|Q0F#)it҅x) hq-:/1J*l%`ٻHA`+j)\;@P)%Ӷ&Tj V?i}5=ҳ\nW o_oJf]1R,Mzuе3r^ :B uE Ki]Ōʈꖛ Y[bzw _ҫLeg6o9 5#:^ul9Zh>dPW&J.r٢t-)r7sdg#gVaM g< %-9=rY?tF^O}'Oo5P 4:lؘo jeytc3EnK;,"(]l~_-qj\f!> stream x_uUjz%8qK.R@̜*g ! !d(6b,)#{L!ŵU| c_p+E*or Ge.\(}Ng q%ݿW^ݧ+w/Om?=4=oO|WWO){_o=~t_z?|>-ozCvuZ~'vOُ~Ss]~s߿>*c_UԹ?x.v[Z}swް(fδ-,?_\߻y1|zϡkҾ~Dft2lne[5k4_eןcM{tMP U.ymj?◶x罣yaoۻ>5??_}yz}o~~ʻM_u/ BΨ?lk^7kov~݌a7e駀^{?~n!-+헷!of7vIl}ڜk[Xp"ېׯ/WXyLΛ~DI._3Z[-d>_oiwyg/˻ ~kU{+?Īs'!P]擑~{n9?,Yτ~qP۽!}a- XeK/W1`EKcWGxGO4dA{&37ζ=W7۫)oH'2"Εj7׻* G,8F.~>Dlnl\`{ICǕ߳~ TA'< xLcH!1  7?FH`r͝{oi *nv+_W77f$Nq3aR.Xm۟6s6"bp&s}2<ꞾIYAlr-sa]~#5{o7{_iI9@ׁ< <#c@Z 1uvF:!@fwQ .IܷB)9O\x`(E 4js=1$N.νuO[PC*~/:m6.j^nmg:\S)dcf!1,G E FMAVTḷ @z>% Oܬ{\x s|fCX8NےK>_LA|fztGH`˘=J;#{uٲt$gW2^r/%[cEWk048pyTIC?Lz Wy~dá^Rq;.K;2L0 啅@??Xd^OW-8>u~?/=g篾|jW|_W꫟YL7|p};gx3~nՂw-bd4OoU{FJr]^{}Y_yW}߷5iT>e82>e9"_X(ᗩ oPT?^胢,zEL>(r }PTenCIc_?c@gmeco[{_ck;rR+vHJMui?ړnY<}vn_u[rboL(ѹ 5ٴ90Bx>r_'ڻu"j F!%~Ku}{^r!I\R&W59Ӂ\RK%M2(Ў(yK8zrΡ63 7p yLV[Fxu9~"_+{KI; \ s+P腯;Q0|^Br7,I, hT)`oLra)>ү:m"gP@W.5u"ߍb)#ptIe_ҙ8i$G1)YeLz*U,;ё?U]E&^׆GN}AS쮝ȳ sW: JFMg:&fv֜{\|!u"/fHmHG ~ɖ}ld/M&viem4z!`v@2љ'Qt ͵&~ 1w[:r25?u292Yvh= ljZ\~nݦZw{zh1 tT>AhDaco+pRkevPgf6Gʡ$#uƟ(bv_gKkIsP_Ptj-ġ!G/YxHұp$Ej۫f֤v5NA'X9/Ɏ\QB9$ta\7QeNMCeze +~z4_{(jV(2+qڨe树ړsuedNTLxҺj9rf4yIxMHfr>UQe(ORd*OR2يx д϶ˤYgP? ,F~\}{HmTl;ojkI28~M>*5i/o>i*WUԏfz`;XI.y4ֹ%xWOcjߠUN Z=UYߠU۠ Z= tbl*꧜p[5w`'!߶k@ (V-/tmm򤗮lgRi 1sMVu7Y#G\NɆ'۪zݺ1rsͤklue+ZqV̈k;NF l SunW;R?w\9fN5*񎭞[=+[Mdj'xǶ r;j9* Ke,~q*zdqYu\ڷV3>}2wg5FW&ٻvd(*mawVS?e0(A$2ڝ-Y랱$랉י\UwgMu>+H~5:QOߪ3K~dP*5u"#6^HJ+Ȩ?CF8A=]hP͙/q9S{@^!Y%{qߣ{qJ޶ֻfrkU3N` 'NdwPcRg6 ܒv~ Q=tu}KG*( 2jmM7LimM ǹ~Gշ7 :O٘&;`⌿)!mL7[:WQen_jUOl3㑊k |λL6 #ѐx$ۆ](vFN@'s Y4?~RY#oQF-p9|~z_g *n|n]c/nog8{Fo=Rg|d|l_޳O|(zenszoz׃زs=-@CI+ד_|5p|=W:۳^/~h0|(pe [Çp )`|0|(pe )F%~6 A[_'p;B"Ut;nJR{fwrz;P?;ʼn}wr~{͜r]t]gܾǽtB7m`̂o˃k{7{[gO>Мy]1 hn'rղ6nTm\tZEuW5;ӿ t#|js>=rG;:ho*9(]0]e>v> azgE}p"l P'r}TQhnIC\Ԯ.d#iL ˅*wiH|LSֲW2d#Jע}V3Uɻ$ڞ♢̙!В %Mͭj_,/#[ŝ✺\ys;$ͩ%U6LW6|U~z͢|t@'ǝ:]ˌ¾iu|l%a<C,Ɍy;`vȶg8v$P8oM| ;{b@j)'!!";Գc*NءPː wQ&.Ιf~1֋*SwOOSOS!v-iE0B:ڐkIHȑ""8p΅gʆsi#Ϲs.59ޜ7t|LLV5{ΥJg XqN/*[ KK\bui+LApc<\ƣբ1Y^('ogB<񞜞=Z1a]ʭui٫iɩx(G M=\Pmx.Yf:QPpTx3C} #svKH! v-x{. DfOi٭ )]w+i0Lj;y_>  $3_L WƵk .qOn K,pe _-aQW}^胢 _Be9|7pC}jKZ+ Gon&%^wonT|ۑ(|Pi{r gvffmoϕt/~c")3s~9FXX헾D~-Objs5.539LI׶Xux-JvWɼ7cs+=㙤s:>WA,4@iKz'D?%Ldcj4$ڍq߈㠇\;>z)h7x^F/͢Yd1^PYbG/0zq(zAA:7A1sB_ 1}I_5/ef>XGhalrNƑd2KQ^b-E]n4oҾ|kIK ٸ>Aד=W gP{ ^nyI.Pzʫ-^(,C/V[z% uW٢.jh7̷ \> Pgbi|(b.ϕ>r{m+$ncvݰkd-_h BɪnD6bNC]Go 1U%hUn_yf#i|doVLȬvGxI vay#Ǿy z`V^P}p뤉AIf^w^Aq^ǵ|uXy++븅`wvg{L[LjL׍3{du s^řzy]yrd%^%yy^za孼LbXIΠ _+M~z~uW\mzݣM폿6GaY=i3i^VZte%KE$eu^첂-*@Lby|aFNfO9f̹6O9e^2X2ө9V~㺧4~ߒ_+澑O>rux pzc\>$1 vaJcfô0jǨV퀒by31 Ӊac8z/2yYm 4X9zh놖U W';Up< XYp< ϭk:$z^Lpl+G EW Wأ2kP~"=1owg%ay"'{lDz??H/D{=ćrRp eHɓ Mn!>Ȑ'dvܓx,cX}cĠ-Y2PHb}`($C;7 с7o(}{1~PA&Q ,1.]rG+sLS>Ɓec2Я! V8 ֍cq?ҍ d <Y0IJFfHb_`W4S.w 7-i3| ђA.^2k]vQL7x>RiP*!tH=L.zzeRv̦"I 3+!.`Tv);_vi_b.PYمw\vj .\풲 dSvQ+([ԕ]4 ە]ە] ;6_/&LPm8*s8-MU5J'xa9n*n\]p}5A yaQ𼒾,# \xD^xTI.%p-.l`^3E^6²qو<WGO\Da3V3s]<θꈂ>A:f[tb;آӠ\owXaTX0T%u17xE1{FU2" KԪ*"Yp˷UEߡK"j6UE}UDע*h0߾*.9F9s0 fsQꅮ,Zһ!́Lzqb~!q'8%F~yug>gL2ܨ1r8(54vC=G}{O&d 3|cJUoN L-q4qC1KjNj˵ɡn5 9T.;.j̒y3 Ii%((9'Is{&/V y0y:Jezg0k}KJ 䀅$EZ%2˴I2lj9FɁX@,V yaVɁm$9(9}Gr%=XQrP?ރE%=XUrxi쒃ֱb%I$p^LrlGE%r4J"I^Gu/ˉ;z󃳟#݃pkHIM+IRћLj\{I VARHǒ쒚F:f7ұHeZ%5͍ts̒rln.mFcXΕNW#?G \~J}R=r/,$6pxHoh R A , ;0p@f;82qp= pk|2;T;ܙ nx6Xr 2rfr᫴%<`>JzPô{"Gb4:=GC"OT_oj-59H\oRZ [ kr]KlMFIuIcoJ2TFj~^hx>zLz%MYYE 7I(XY" 1FE2EQ1dVD9wQ8zQH" w" iTD9NRDcUD.֤]F5 ψF/iwƅT\S"h:NWnhɐruo1s$&YٌBv#ntgmQk⮧9|F\QZK3w-m(H|6k_ziw~="ߺ G 6cd2|xBf҉7Xvb:I#ґTG0+1FՑ2#jwP]uD 3wAv;(Ӫ:q=Ǭ:"˿UG䞑VG`Pȍ#BŠ1_ck#mq-w9k zXza^tZ I H(+xcskYoIשzg z 2o{'9QI'bJIApX>( O9L*5/J8E Xqz$3N^ l8=GNEqzr4"I8=+N] .# pzTL8=۸A@ #@N#BWPp"W:Y`V8V#O*gVUFTвU szMcs殃ܵ;dgBcAgsJj^ ^zz\4U/ =ݮ|W YeZ'64*aa`ʟU OXYWqp,*DU$*VPQBf+(Ү apiUP {Y{NR.#Jչ"Hza!|M|<٘- QXb q^| BG䠠Dz ۷K .JPH#Ӷ.P^i=" Q'N:9bYƅ@ !Ou$9(@\荸CgbNZ  CKKIuAGȤT2󥤞{}x $ⱏ⿌K25kƯ;y%Ѓ w T)kmGTk{r ];s\%JYf_t#9`~`tgLA|xi/=g{vE8l?&+PFICvf:yqLg^-ӈW+H$9"e6e82"Ѳ2hI9eIٌh=D-cj(mL~_B99;< DPZDpO[z\UyPԿ*3ipUiE=UÞcF=ZIW~џPN CC9;W:5r wNAIfPw B(ծ T?~ґ8gQ-j#={`+8s8*]KAOC s~r df~e-<oACZ!،a{\5͇Y>mP2ɇܞ$–j|(χ k7!(\w !hwIygH?fC9zʪ]dse.v4S7%BIvMu'CkJMA#q|:Ґ dXIłL2y3 ɰ2,c @.BFV8 bfXvL2,*Ö}aվM % y^\wQz;lxF8(^A+3 X{x%?ZCo:^aa&w>^aV=L2mqxE4^lUJn,.^)mbaFJ}oW{XUR$o6 |orwx%ūzgf8z+(,^qWPQ8WfxWezHd띉WPM}Hx@.^AFJ8 ^a+M*^}X]RcaFJގE+z;iTV,^)Gz;d띉WPM}Hx@.^AFJ8 ^a+M*^}P]ҬCaFJE+z;itJގ7W A%ūzgf8z+(,^qWPQ8WfxWezUVoy3 Wi+((^I+l|x]i[ū2kFd넟RM>kǶ||)tӰ[mToܱE ڢca\F#(Uݑ *HeaGӌVuGL|FnĒngFvw L(VS|e˿4elmyÂLcPM}OXe~r46Ii>}%~?ULJ|#s|Wc/-)x0atA)$*Lo`Ao;65aOxuO>UbT 3_PRG#PRwYPRq(y0E J`(;JZj/Us ڳ$LQP},ROע bZ#&vղXղ:;RG\%*F00[0[8zp w9e܂o[Q;-X{+Rw4C nlp Wv$6kDr}\O 9ANP9qKd:('[g+/DNd$Sȟp9Oٽ"Fx:D*P٧~tBez ]8х;]х\4!]ȿKEC]pJ%Bv\@H?]hkoD x@R# c}*z G#\S +wY\S q@߶Î)FzL@/3?SW M6' DEepunrJ^(}$iMbBlog L{8ƪ-ڛXn-b,dc:GoFvKZ+(sO|b-b>K|"b>{e|10ig$B1t. R U^3irnu]a \+]?2`q}LZr9496p` `>Jg 3l@@A+vj2<`~a`V@la| u6,t,Hg;.wpq,L68s>PY L8,qm07qko>]$q~*ÝP8j9'IV "N(iUwB aPB{8:*ݲTD:;~" }f҄q5>irct.q>APY L$qryڧ -wo%;|{ucS8D^{އ؏=99cO\| 2rcRcV9L|v 9αLc9J2˱9? Bf9;\2rqk#H_o>.G(l)Ycu:c-?7Zn>Zg J'|U.jIwH heZe@ e@E2`2EQ( vn\3q m:{{@Ś|&a:ϧU L\'q4AifNy|<>I:":nOs*ו}ε@A6^q ,=A p<ZŻxF~-%Ic(e/yģyG'ixfxgCWGzo<4nxYkrNrZ8)ƶׂ׏9pN~<\w~\c\v]3PHIN܉?l9w"k}pHE$ RvUj"Um4Ȍ@"2+ "`M!Z "))D y3 H iA$("I'HVIyD<33 f4!R%{$3~ @$UkDQ'HXwKą )Dº[A2UDߪĂt|]oUTZǻ䗛|ڬJe$ ړspQ}{%yMG*Ҋ pP8NJ8*PyffVQ(͌ hSJT@f Ʒ2+׊ NBmHp8F5ezP]@A:0#x,!|ifM/t eٌ V@Btd3h7K,|Ga >)JK)<ݠh%O$OZW\Nj0wɢf#aOȢ~# 3heZEF8l{3Wyf&ʒŪpbF8XNCf嚑EF8XEF8YThk>Nܯ9n?3KlU>*dBW:'t Uv ]tUv*UptU:]հhirK*dCW3C*yUt] GWL#*qb[UU`FW%O*NlVtUV22t0 ]UYVtUuJC0 ]ź[2 #9;0]3&U> ]l*+LHW L*l1U<]յ>6v#G`O5/ =MԿ0ϥM40ʴ`ۛD lJ#W.GIfx ʗ'遪_гOdVF'U/YߊN_,PN^,@dyK:vxw( w\P*l JŝRAARJ.TPR)Q*e9J.(tcfmXop>'w9emH'ݶڶQuNfGyfi;g?2牷1Nt*9gdIm'~D$'I1Nbrbݭ(gS(t"W9D(h.N' PKyu1T/h$N(kH(kəbÔ\~ScrXT+=8zWzpeQ8`QUPuϢ^<3ۭXyNJE_IRy6z% fƢ$e{ϢT$!Ї%R@V,J~%I3+]I(:w4 KR_2ԦQiswbV= *2mPqTJ:ϊJ9 8T*tRcJUǡZP **յ~s)1,jS[JX:j}ċwkQ}Kq[$`i5Ujt-jXRJγR5`~Z-{Xڢu7j-jXw3XТ18' R}px${w9QAE̬z~>2 +i]AW(J'VUyt<33C*㡫ybJ8tt]+9+#j!yu\BWt-28 2]:u|#W8d\ fw5W<#8`GAFжΎ ړ].5uTv+imOs40#ΈҌ3BV4Gތ3rq hNvF$4j;l4j;lgT}ŠOruI$TuNf|RyfI|p#>uezdӋI $WOBAR>.PO*Ie9>^Ba˹r(hB866Ltr0 3ӘhB<6xP L#'qa[Ax̓/A<!,7avOA˴x B zP5癙Ѧk:Oj6:j6 ^!]c4M!VShS%Azg f8z@<( qxPē8N 8Wyff9xUC<p#<Ur$O!fTm?d"9~ sRuxez!ޠn%Azg f8z@<( qxPē8N 8Wyff9xUC<p#<Ur$O!fTm?d"9~ sRuxez@x5-Tm?d"SmB|NgԞxti#rDwaA&;s@a6Ԁ5gE Q(ӈH'V@y5<33KS*㩁ybj@85tO li5}'.k0I;:pJ+s I8 9G'n!>܃cH)IcK_⍽N>[\\fj rmծm%ڥ,Hv)h7<`J>N'8\'8 ;%w9r eKފ\:D3r<3ȥybrI8tO.+9' ΓZCh&g`rY\KK>%geZKZcF.z'w3 %S\>7)ΓK]yr.3F3<- #i;Iz]IC붿/?Jki#(dC2WϞ|dΰU:?,v}qx}xU miE NJ`i_Qy6}F!t4g(ϐfK Y,3HlEg U3؄$pT(r>PL SL#*qb[TUq0hs S82a*M3ڟ&DTcBLU7e{3)z33ML)o$0⧼ug[UJC0UPL SL#*qb[TUq0hs S82a*2PjOORG5k'gq~5P }@k\Zr45Ii QuGkj9NǴxZ#scDk4ӚJi󤴦:iM-؁25"'@P Zu5ez9 $rZ/Fz'?GvnqLJ rmծm%ڥLv1 Q& J橡@9̡/]Cw)f,fD1eOQLvY(ӊbbۛQLvZ33BŬ.+sbVmtbVmUp@1jUeUgDO-7;zH&~_zO{@+'No/|ϟ=pHCZjhBKmHh(dFCz4-\ Ii U\`n wb W BA6d2ِAd GL#2(q b[AUmFug39OL 1"`%dPyR2Xk d y@kQAwfbcFR٠=!gHjyzvi%$J2#lcTv I$Uv*ΑT9mI]r 29z^ l(G:=֊rP8NJG訪Lt0639ڈʜ'QMtx:<)5fl:ZvĮ|<Ė@bCc 1 m#"P>wbCa6Ć" 6w9 eAl b:صgfFc]y<Ė9O 1ؚ!v%[yR]kbkصg`]bE'Al.L!6+]fCUAlvG(b;Bv۠ʴتf[ݱhS+;ʜ'U5gU@Z!vvGU2 b; >bk;bcϘAlvAJ2@l(bs>P L#-qbc[AlUqhs 82!6cC^J2@l(bs>P L#-qbc[AlUqhs 82!6c>jPlwŒ ~#i L+mok9̌6by]Qy6]QyĮ?bWmwT!= Ac!f#b >b O 11\Bl3VL%AlvG(b;Bv۠ʴتf[ݱhS+;ʜ'U5gU@Z!vvGU2 b; >bk;bcϘAlvǖyu=ĆJǾ<%;z~~<^[1km_?o Gl8GҊ#pPG8N88Pyff<Usp#<#Tr'88Pv<8jNqAyb!G#`ez9BcEZ> -@Z$;mHH 쨐v)iAHfO1fDZ{Ob(ӊcۛZ33wiS,sT)tT)Vp@Zk'-U{UgDO3bS\'xҢS!iQ)>cFZz/f@IfwBZ )ij(Ȇ9CZ0`"-H iDZ$l{+ҢH dGZm? i]?R}<~p%m PYPUBovAUCoTk*W4nT>Q]ڢ*O{};K%?|4q (ᗩ~0|.cÇp q䢩tPTƽtPT?^胢,z&~i(iyw8 n %NJQFt/6׵ _wn;Eqjy3:mOTɪorϖB9%bgSrOi?uESB-(Z:s;1<^k RUA g]˒l=0ܐ\+j}C)8O)By.s % Iw/$r]__xYJ[ӵ_LcQ!*(ۖC9T|}3>S;M(i$--^}| 9iqIdz' "UǾCتm1F^[5G:!M&I bdMhR)hc <}j;fSzg(r o`yG%-~yt?x\ȓlW3:<7c+x7ˆ2c:W$Im^#+~^ՎدC%4l~sp2r+-?8?+~áo)$̞0S߂| N[lyo)귺PUoH,!64b֛R&5Bs( 4 =.Ʀ,r o }PT?^胢,ELyl# 8d\=~M2<е O_{>}c}kϿ O_ Kqsk_o-=5OoJtr>-y~⭯>ܓ򶷾߼߇~W[cs ͸uyZ󋷟)Ϯon{wֿa4m4lbv{7B_^hOUrwٍo(^ذ̿??>n>j=,Yut_[];᰽C NZOOΣkդJx7Eߎn/lls:׈Om/B~Azǖu󲞧݉{ny"-;)%+<ƶ'YߢY32vl[Altwouc濹_;Y/:^s7FjWaMهo?eLb~_-UmZ)Y7wO/Ѩ^}#e·d"o~3Qٻ(<>rKv}@4o>qGy.Щ} kVm[a ~{.7|([Bg`.xcj~5w^9ko7Eo#%1 e&;]%妙P'z!WIe{}`A =ιG1,(}* KE{Op^EVsp͉bs3q.%aoѻXqP9Y\^Dw~ޫ.HŢ`LDH~0k$/82Ѧ [5Zgʎi_]6=%XާMN#A.!En'e,u1X\e[1>"'a/x?eD΂˝{MĄ7̈z 7NB~|nGd2Ak/](MJf_'+Mt+%mU0J#DD>4L(WL"bxC=z^I@Ը\U,ac|_(ܪq.OF3Tw%I&{%G$UlWwJ%ƫ0%S;+kURgKsan٠r)wM﫛u\&o$k>_44-ra~ԛQtӘ/.oI-n<'{\(?nlD ,u1Rpf`) "jȂEAQ[Sm}GnB=*(KDs҅"_}e49.Pj!\I&* ;C䩉^u`QkWBJ]ߖ𳰧gٶ%~ {Beā JtK*RYlؘϒC];0zB+esVVQ1SQǹ~BU6+ -}D/xjltu5>8=*/)}xU a31ZwcpI d\i.H&>3\0Y>nv7*(w~n[t1릻om >(ӠӂRr^Ƙ* .s,?_NT칣bS6ifh3 ˆqܧ;VtWmquf![\Q9=i?_po[]UEmeNDHZC:htm݃9K:v_w08h`=jsc\_8c8mxrwLjmRdGt%]JƭRۍ/C};Cf\]v!,zg19ĕGl:8yФ~ft 빿~_ȳu8ӊG/įN̯I$;ɼ'T63Km."T#mYGȋ*>/T <8~v|a8G-'ݙ֤5XK|K1"c]k;Xjpq]\ 7BT&H~ށxeWqqk=ou B$u= LJC) Zb˯6IpJ=n.{ͯm} E|섨7cQS\Ws9'x<%/FlQ77hw?ޠ}>|xjeNKR<4Q&Mk$E_%.Pg'&Z$eQOb\'-'d3{%|[o(y̱!A!ϾE١7)ЧF+Um:Kcm 3 4{ %qČl/qµ/zb`jU*6Q EK,$-kWք'\p>8 _ڏb&2&f*yYcPC=Z_DA@SlNUH;|6w|1יH$5"@[_Ɏ]l4bL!o?vd+oQfWFHHh__hP7~Е/{8NkU"|1%hlQJ`l<~ǹNW6r+{!it"icWKi7ƗZc*NΑrgX)G3T"m-2Ez=2~YB.WNRaQj_Q7_m?fƴ{ $6=m?jR3rh|߭Cbx~0 ࣈ~w8}KpA+3mf> /Contents 5 0 R >> endobj 211 0 obj <> /Contents 212 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 211 0 R ] /Count 2 >> endobj 1 0 obj <> endobj 10 0 obj <>stream 0 0 0 0 64 70 d1 64 0 0 70 0 0 cm BI /IM true /W 64 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID &A0eD EI endstream endobj 11 0 obj <>stream 0 0 0 0 57 52 d1 57 0 0 52 0 0 cm BI /IM true /W 57 /H 52 /BPC 1 /D[1 0] /F/CCF /DP<> ID &3d2I>OY8 z_A EI endstream endobj 12 0 obj <>stream 0 0 0 0 49 54 d1 49 0 0 54 0 0 cm BI /IM true /W 49 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID &3.xOA ޗ?ޓ?|@ed?_Km-av!ma0d6|@ EI endstream endobj 13 0 obj <>stream 0 0 0 0 47 74 d1 47 0 0 74 0 0 cm BI /IM true /W 47 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &@h2@x 7O]?w_57 k d09c8p>@0{{r_^.a.+X0F@@@ EI endstream endobj 14 0 obj <>stream 0 0 0 0 37 72 d1 37 0 0 72 0 0 cm BI /IM true /W 37 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &}|>x EI endstream endobj 15 0 obj <>stream 0 0 0 0 90 70 d1 90 0 0 70 0 0 cm BI /IM true /W 90 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID & ON p  OOW@w]  EI endstream endobj 16 0 obj <>stream 0 0 0 0 51 54 d1 51 0 0 54 0 0 cm BI /IM true /W 51 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID &0̐.OC:I}'MWo~#v=>Ay *Xv]ip.+0a`8 EI endstream endobj 17 0 obj <>stream 0 0 0 0 43 52 d1 43 0 0 52 0 0 cm BI /IM true /W 43 /H 52 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Rp10:p&h EI endstream endobj 18 0 obj <>stream 0 0 0 0 46 72 d1 46 0 0 72 0 0 cm BI /IM true /W 46 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID 2}o5{{}Pv]iv0 %aa`d@ EI endstream endobj 19 0 obj <>stream 0 0 0 0 49 74 d1 49 0 0 74 0 0 cm BI /IM true /W 49 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &l^ oAoo&վook_zm/vKa+kk ,0Y  EI endstream endobj 20 0 obj <>stream 0 0 0 0 49 74 d1 49 0 0 74 0 0 cm BI /IM true /W 49 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &@1"!| A~~~ 8?A'AzOׯK:_K0Kb CD EI endstream endobj 21 0 obj <>stream 0 0 0 0 55 72 d1 55 0 0 72 0 0 cm BI /IM true /W 55 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &/IT&oo? EI endstream endobj 22 0 obj <>stream 0 0 0 0 14 44 d1 14 0 0 44 0 0 cm BI /IM true /W 14 /H 44 /BPC 1 /D[1 0] /F/CCF /DP<> ID &qO^~/|rj[ EI endstream endobj 23 0 obj <>stream 0 0 0 0 47 70 d1 47 0 0 70 0 0 cm BI /IM true /W 47 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID &M.e~ EI endstream endobj 24 0 obj <>stream 0 0 0 0 46 72 d1 46 0 0 72 0 0 cm BI /IM true /W 46 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &p! `ÝB8AAznnoP~a:iw] q\.\:4 EI endstream endobj 25 0 obj <>stream 0 0 0 0 57 70 d1 57 0 0 70 0 0 cm BI /IM true /W 57 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID aMD' oA8>~^+qPA@@ EI endstream endobj 26 0 obj <>stream 0 0 0 0 67 70 d1 67 0 0 70 0 0 cm BI /IM true /W 67 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID %!KA@8pBq 'o~oo/~}/K𗄼 N"(PRR` EI endstream endobj 27 0 obj <>stream 0 0 0 -73 57 0 d1 57 0 0 73 0 -73 cm BI /IM true /W 57 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID *j)8l']4 axk   EI endstream endobj 28 0 obj <>stream 0 0 0 0 36 68 d1 36 0 0 68 0 0 cm BI /IM true /W 36 /H 68 /BPC 1 /D[1 0] /F/CCF /DP<> ID &AI==?A>IkG&  EI endstream endobj 29 0 obj <>stream 0 0 0 0 55 72 d1 55 0 0 72 0 0 cm BI /IM true /W 55 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID $7&~E?A>7~7Wzkv4J&VRjAd>  EI endstream endobj 30 0 obj <>stream 0 0 0 0 33 79 d1 33 0 0 79 0 0 cm BI /IM true /W 33 /H 79 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3?߿߿߿߿߿߿߿߿  EI endstream endobj 31 0 obj <>stream 0 0 0 0 80 50 d1 80 0 0 50 0 0 cm BI /IM true /W 80 /H 50 /BPC 1 /D[1 0] /F/CCF /DP<> ID &zN^{ޯ_Wz}^{^ߵo^ߵoħDgk@ EI endstream endobj 32 0 obj <>stream 0 0 0 0 13 14 d1 13 0 0 14 0 0 cm BI /IM true /W 13 /H 14 /BPC 1 /D[1 0] /F/CCF /DP<> ID &w&ma EI endstream endobj 33 0 obj <>stream 0 0 0 0 86 52 d1 86 0 0 52 0 0 cm BI /IM true /W 86 /H 52 /BPC 1 /D[1 0] /F/CCF /DP<> ID *Ȩ/QIA8l4z^D=Nt[O )50@@@ EI endstream endobj 34 0 obj <>stream 0 0 0 0 40 54 d1 40 0 0 54 0 0 cm BI /IM true /W 40 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID &༊_,w!ppO5 k `K,, -. Ud6Xj0 ,' EI endstream endobj 35 0 obj <>stream 0 0 0 0 26 73 d1 26 0 0 73 0 0 cm BI /IM true /W 26 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID 5_ EI endstream endobj 36 0 obj <>stream 0 0 0 0 57 52 d1 57 0 0 52 0 0 cm BI /IM true /W 57 /H 52 /BPC 1 /D[1 0] /F/CCF /DP<> ID *j)8l'] rt8k}2  EI endstream endobj 37 0 obj <>stream 0 0 0 0 55 74 d1 55 0 0 74 0 0 cm BI /IM true /W 55 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &A8er x'0o D~AI?MWvv]^a[v]!k G@ EI endstream endobj 38 0 obj <>stream 0 0 0 0 49 54 d1 49 0 0 54 0 0 cm BI /IM true /W 49 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID &4H.OD1^ &z_z_m߶ - lVXaal@ EI endstream endobj 39 0 obj <>stream 0 0 0 0 55 50 d1 55 0 0 50 0 0 cm BI /IM true /W 55 /H 50 /BPC 1 /D[1 0] /F/CCF /DP<> ID &\W{?׽/ׯ~^}zׯ^}zޗq)Ñ EI endstream endobj 40 0 obj <>stream 0 0 0 0 55 75 d1 55 0 0 75 0 0 cm BI /IM true /W 55 /H 75 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Af=XAO>OGAZ?OO_j .{^׆0^@ EI endstream endobj 41 0 obj <>stream 0 0 0 0 46 54 d1 46 0 0 54 0 0 cm BI /IM true /W 46 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID &]>=C ނoIҿ}/"F5_C v] c ,0Y  EI endstream endobj 42 0 obj <>stream 0 0 0 0 39 73 d1 39 0 0 73 0 0 cm BI /IM true /W 39 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID A?ɨxME' !qkaxk ` EI endstream endobj 43 0 obj <>stream 0 0 0 0 26 71 d1 26 0 0 71 0 0 cm BI /IM true /W 26 /H 71 /BPC 1 /D[1 0] /F/CCF /DP<> ID 5_&ȿ EI endstream endobj 44 0 obj <>stream 0 0 0 0 55 75 d1 55 0 0 75 0 0 cm BI /IM true /W 55 /H 75 /BPC 1 /D[1 0] /F/CCF /DP<> ID &f Hek)MD }?W~}ivkKW{^^^C@ EI endstream endobj 49 0 obj <>stream 0 0 0 -47 43 0 d1 43 0 0 47 0 -47 cm BI /IM true /W 43 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID !!  EI endstream endobj 50 0 obj <>stream 0 0 0 0 40 37 d1 40 0 0 37 0 0 cm BI /IM true /W 40 /H 37 /BPC 1 /D[1 0] /F/CCF /DP<> ID &@H xAz|]߿OSMS_^^= k ,( EI endstream endobj 51 0 obj <>stream 0 0 0 0 57 36 d1 57 0 0 36 0 0 cm BI /IM true /W 57 /H 36 /BPC 1 /D[1 0] /F/CCF /DP<> ID $!vpaDWԍ!&k € EI endstream endobj 52 0 obj <>stream 0 0 0 0 39 37 d1 39 0 0 37 0 0 cm BI /IM true /W 39 /H 37 /BPC 1 /D[1 0] /F/CCF /DP<> ID & \.BDzjo.]kkaa  EI endstream endobj 53 0 obj <>stream 0 0 0 -48 40 1 d1 40 0 0 49 0 -48 cm BI /IM true /W 40 /H 49 /BPC 1 /D[1 0] /F/CCF /DP<> ID &pD%<' ZֹzCO_&av\0[{D@ EI endstream endobj 54 0 obj <>stream 0 0 0 0 37 37 d1 37 0 0 37 0 0 cm BI /IM true /W 37 /H 37 /BPC 1 /D[1 0] /F/CCF /DP<> ID &$0tCӧɪ~F>; A|W]p*x EI endstream endobj 55 0 obj <>stream 0 0 0 0 38 50 d1 38 0 0 50 0 0 cm BI /IM true /W 38 /H 50 /BPC 1 /D[1 0] /F/CCF /DP<> ID $W@OM?+X꺒X` EI endstream endobj 56 0 obj <>stream 0 0 0 0 38 50 d1 38 0 0 50 0 0 cm BI /IM true /W 38 /H 50 /BPC 1 /D[1 0] /F/CCF /DP<> ID &A8BDON.﹨jҵ!-5  EI endstream endobj 57 0 obj <>stream 0 0 0 0 12 49 d1 12 0 0 49 0 0 cm BI /IM true /W 12 /H 49 /BPC 1 /D[1 0] /F/CCF /DP<> ID j@ EI endstream endobj 58 0 obj <>stream 0 0 0 0 12 49 d1 12 0 0 49 0 0 cm BI /IM true /W 12 /H 49 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 59 0 obj <>stream 0 0 0 0 30 45 d1 30 0 0 45 0 0 cm BI /IM true /W 30 /H 45 /BPC 1 /D[1 0] /F/CCF /DP<> ID &V_kC G ? EI endstream endobj 60 0 obj <>stream 0 0 0 0 33 37 d1 33 0 0 37 0 0 cm BI /IM true /W 33 /H 37 /BPC 1 /D[1 0] /F/CCF /DP<> ID &S(C`XK!djK].BaM@ 6,">MW5  EI endstream endobj 61 0 obj <>stream 0 0 0 -47 40 0 d1 40 0 0 47 0 -47 cm BI /IM true /W 40 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID !_:Dû1x>.HDu]T(PP EI endstream endobj 62 0 obj <>stream 0 0 0 0 27 36 d1 27 0 0 36 0 0 cm BI /IM true /W 27 /H 36 /BPC 1 /D[1 0] /F/CCF /DP<> ID $?} (H[À EI endstream endobj 63 0 obj <>stream 0 0 0 0 28 49 d1 28 0 0 49 0 0 cm BI /IM true /W 28 /H 49 /BPC 1 /D[1 0] /F/CCF /DP<> ID &H G /{ q EI endstream endobj 64 0 obj <>stream 0 0 0 0 36 36 d1 36 0 0 36 0 0 cm BI /IM true /W 36 /H 36 /BPC 1 /D[1 0] /F/CCF /DP<> ID $^5 ma0 EI endstream endobj 65 0 obj <>stream 0 0 0 0 32 37 d1 32 0 0 37 0 0 cm BI /IM true /W 32 /H 37 /BPC 1 /D[1 0] /F/CCF /DP<> ID &@kZֵBh ޣ5^l0 xx3 EI endstream endobj 66 0 obj <>stream 0 0 0 -47 45 0 d1 45 0 0 47 0 -47 cm BI /IM true /W 45 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &pw0o}uX\QUBPRL3 EI endstream endobj 67 0 obj <>stream 0 0 0 0 37 37 d1 37 0 0 37 0 0 cm BI /IM true /W 37 /H 37 /BPC 1 /D[1 0] /F/CCF /DP<> ID &0pC🾜} EI endstream endobj 68 0 obj <>stream 0 0 0 0 55 36 d1 55 0 0 36 0 0 cm BI /IM true /W 55 /H 36 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Ħ^_}&lS_@ EI endstream endobj 69 0 obj <>stream 0 0 0 0 39 50 d1 39 0 0 50 0 0 cm BI /IM true /W 39 /H 50 /BPC 1 /D[1 0] /F/CCF /DP<> ID & AEuu-'}}wm;ȅ\0  EI endstream endobj 70 0 obj <>stream 0 0 0 -48 38 1 d1 38 0 0 49 0 -48 cm BI /IM true /W 38 /H 49 /BPC 1 /D[1 0] /F/CCF /DP<> ID &dS0M`Zd0BpZZZ 8 h &2ᐃ@@ EI endstream endobj 71 0 obj <>stream 0 0 0 -90 91 2 d1 91 0 0 92 0 -90 cm BI /IM true /W 91 /H 92 /BPC 1 /D[1 0] /F/CCF /DP<> ID &S@d< O=======?77} ^M}??5Tw^{va- ,,,Z@@ EI endstream endobj 72 0 obj <>stream 0 0 0 0 76 66 d1 76 0 0 66 0 0 cm BI /IM true /W 76 /H 66 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Uzz%վ'Iվ_[}o߫ҿ/&/W EI endstream endobj 73 0 obj <>stream 0 0 0 0 71 70 d1 71 0 0 70 0 0 cm BI /IM true /W 71 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Syy DH@]u_ xD6U@A?Azwau&mkkkkXaa@>stream 0 0 0 0 49 68 d1 49 0 0 68 0 0 cm BI /IM true /W 49 /H 68 /BPC 1 /D[1 0] /F/CCF /DP<> ID /}ݨ`PAxrjY y@ EI endstream endobj 75 0 obj <>stream 0 0 0 0 22 92 d1 22 0 0 92 0 0 cm BI /IM true /W 22 /H 92 /BPC 1 /D[1 0] /F/CCF /DP<> ID ɨ7  EI endstream endobj 76 0 obj <>stream 0 0 0 0 103 66 d1 103 0 0 66 0 0 cm BI /IM true /W 103 /H 66 /BPC 1 /D[1 0] /F/CCF /DP<> ID &P bi!}y/o[nkVj_j?ڵ@ EI endstream endobj 78 0 obj <>stream 0 0 0 -59 55 0 d1 55 0 0 59 0 -59 cm BI /IM true /W 55 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID ' 95Z~_zxhio[wmVoo@ EI endstream endobj 79 0 obj <>stream 0 0 0 0 40 62 d1 40 0 0 62 0 0 cm BI /IM true /W 40 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &΀0xAfAA_o߿!h' >OIWT]㽕kkk EI endstream endobj 80 0 obj <>stream 0 0 0 0 26 45 d1 26 0 0 45 0 0 cm BI /IM true /W 26 /H 45 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3?}(k{ÓP^  EI endstream endobj 81 0 obj <>stream 0 0 0 0 41 47 d1 41 0 0 47 0 0 cm BI /IM true /W 41 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &/!" 뮊?A+~hk0mmma0` EI endstream endobj 82 0 obj <>stream 0 0 0 0 38 47 d1 38 0 0 47 0 0 cm BI /IM true /W 38 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &d2s}>-_~d@xxyW ?h^ %뭬Y @ EI endstream endobj 83 0 obj <>stream 0 0 0 0 28 57 d1 28 0 0 57 0 0 cm BI /IM true /W 28 /H 57 /BPC 1 /D[1 0] /F/CCF /DP<> ID &΂怔D~ML1  EI endstream endobj 84 0 obj <>stream 0 0 0 -59 47 0 d1 47 0 0 59 0 -59 cm BI /IM true /W 47 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4 /////KK kûa׭uYdUUB*@ EI endstream endobj 85 0 obj <>stream 0 0 0 0 65 45 d1 65 0 0 45 0 0 cm BI /IM true /W 65 /H 45 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3 aZ}wPXaacbk[A4jMC EI endstream endobj 86 0 obj <>stream 0 0 0 0 41 47 d1 41 0 0 47 0 0 cm BI /IM true /W 41 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &gMpA< j^H O^j_0u EI endstream endobj 87 0 obj <>stream 0 0 0 -59 55 0 d1 55 0 0 59 0 -59 cm BI /IM true /W 55 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4 _N7&7&7&1?@ EI endstream endobj 88 0 obj <>stream 0 0 0 0 43 61 d1 43 0 0 61 0 0 cm BI /IM true /W 43 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID &30!Q^^^}zޗz_ׯ~ޗz_خ EI endstream endobj 89 0 obj <>stream 0 0 0 -60 48 2 d1 48 0 0 62 0 -60 cm BI /IM true /W 48 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &lП==:Ѩ.A >_&am[kaa AA EI endstream endobj 90 0 obj <>stream 0 0 0 0 40 62 d1 40 0 0 62 0 0 cm BI /IM true /W 40 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3񑇂Ay ׷_Wk}aa[XjMC EI endstream endobj 91 0 obj <>stream 0 0 0 -59 9 0 d1 9 0 0 59 0 -59 cm BI /IM true /W 9 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 92 0 obj <>stream 0 0 0 0 37 45 d1 37 0 0 45 0 0 cm BI /IM true /W 37 /H 45 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3 եk %Lk l)5€ EI endstream endobj 93 0 obj <>stream 0 0 0 0 29 61 d1 29 0 0 61 0 0 cm BI /IM true /W 29 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID &3 #Qt- EI endstream endobj 94 0 obj <>stream 0 0 0 0 36 47 d1 36 0 0 47 0 0 cm BI /IM true /W 36 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &yAִkCz+Tl c  @ EI endstream endobj 95 0 obj <>stream 0 0 0 -61 19 11 d1 19 0 0 72 0 -61 cm BI /IM true /W 19 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &ֺ____jw EI endstream endobj 96 0 obj <>stream 0 0 0 -61 19 11 d1 19 0 0 72 0 -61 cm BI /IM true /W 19 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID >ɪ___@ EI endstream endobj 97 0 obj <>stream 0 0 0 -61 8 0 d1 8 0 0 61 0 -61 cm BI /IM true /W 8 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID j/ EI endstream endobj 98 0 obj <>stream 0 0 0 0 34 47 d1 34 0 0 47 0 0 cm BI /IM true /W 34 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &y$;a8Z OK a-Z#*!  ( EI endstream endobj 99 0 obj <>stream 0 0 0 -44 60 0 d1 60 0 0 44 0 -44 cm BI /IM true /W 60 /H 44 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Ip~~^f__~~_){= EI endstream endobj 100 0 obj <>stream 0 0 0 0 40 63 d1 40 0 0 63 0 0 cm BI /IM true /W 40 /H 63 /BPC 1 /D[1 0] /F/CCF /DP<> ID &! ::&}>q_ɪ_om U]  EI endstream endobj 101 0 obj <>stream 0 0 0 0 8 61 d1 8 0 0 61 0 0 cm BI /IM true /W 8 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 102 0 obj <>stream 0 0 0 0 40 63 d1 40 0 0 63 0 0 cm BI /IM true /W 40 /H 63 /BPC 1 /D[1 0] /F/CCF /DP<> ID &1!l=)7OO^_ֿkխW3Kama0X EI endstream endobj 103 0 obj <>stream 0 0 0 -61 37 0 d1 37 0 0 61 0 -61 cm BI /IM true /W 37 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3 եk %Lk l,X EI endstream endobj 104 0 obj <>stream 0 0 0 -26 22 -18 d1 22 0 0 8 0 -26 cm BI /IM true /W 22 /H 8 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 105 0 obj <>stream 0 0 0 0 38 46 d1 38 0 0 46 0 0 cm BI /IM true /W 38 /H 46 /BPC 1 /D[1 0] /F/CCF /DP<> ID &DdO}|tH}?u  EI endstream endobj 106 0 obj <>stream 0 0 0 -10 9 0 d1 9 0 0 10 0 -10 cm BI /IM true /W 9 /H 10 /BPC 1 /D[1 0] /F/CCF /DP<> ID @ EI endstream endobj 107 0 obj <>stream 0 0 0 -59 8 -36 d1 8 0 0 23 0 -59 cm BI /IM true /W 8 /H 23 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 108 0 obj <>stream 0 0 0 0 17 78 d1 17 0 0 78 0 0 cm BI /IM true /W 17 /H 78 /BPC 1 /D[1 0] /F/CCF /DP<> ID 48w}ɩ~A_'@ EI endstream endobj 109 0 obj <>stream 0 0 0 -42 9 0 d1 9 0 0 42 0 -42 cm BI /IM true /W 9 /H 42 /BPC 1 /D[1 0] /F/CCF /DP<> ID ɨ恿  EI endstream endobj 110 0 obj <>stream 0 0 0 0 40 61 d1 40 0 0 61 0 0 cm BI /IM true /W 40 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3 Z KKKKKKKKKKKKKK iEUU]Ù{xo EI endstream endobj 111 0 obj <>stream 0 0 0 0 43 44 d1 43 0 0 44 0 0 cm BI /IM true /W 43 /H 44 /BPC 1 /D[1 0] /F/CCF /DP<> ID &@/{zޗzޗzޗ~ޗ  EI endstream endobj 112 0 obj <>stream 0 0 0 0 36 44 d1 36 0 0 44 0 0 cm BI /IM true /W 36 /H 44 /BPC 1 /D[1 0] /F/CCF /DP<> ID 2{{{{{{{{{(S EI endstream endobj 113 0 obj <>stream 0 0 0 -59 39 0 d1 39 0 0 59 0 -59 cm BI /IM true /W 39 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4'p+`<7/ "xT  EI endstream endobj 114 0 obj <>stream 0 0 0 -60 52 2 d1 52 0 0 62 0 -60 cm BI /IM true /W 52 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &p4HhӣP&@KK__?6w l/kl/ .{Xa`d  EI endstream endobj 115 0 obj <>stream 0 0 0 -10 12 10 d1 12 0 0 20 0 -10 cm BI /IM true /W 12 /H 20 /BPC 1 /D[1 0] /F/CCF /DP<> ID <[MWo EI endstream endobj 116 0 obj <>stream 0 0 0 0 51 59 d1 51 0 0 59 0 0 cm BI /IM true /W 51 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID &6  EI endstream endobj 117 0 obj <>stream 0 0 0 0 43 44 d1 43 0 0 44 0 0 cm BI /IM true /W 43 /H 44 /BPC 1 /D[1 0] /F/CCF /DP<> ID 'j]mkmkm_]ޞ|zWޓzWޓzWޓz\@ EI endstream endobj 118 0 obj <>stream 0 0 0 -59 49 0 d1 49 0 0 59 0 -59 cm BI /IM true /W 49 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID "û;w\%BEUUBwsPN\ U p EI endstream endobj 119 0 obj <>stream 0 0 0 0 15 61 d1 15 0 0 61 0 0 cm BI /IM true /W 15 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 120 0 obj <>stream 0 0 0 0 49 47 d1 49 0 0 47 0 0 cm BI /IM true /W 49 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &7 @׽>D]}&⽿5M/_د ,@ EI endstream endobj 121 0 obj <>stream 0 0 0 0 40 47 d1 40 0 0 47 0 0 cm BI /IM true /W 40 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &y`5 ֵk =G_rj- { k  EI endstream endobj 122 0 obj <>stream 0 0 0 0 49 61 d1 49 0 0 61 0 0 cm BI /IM true /W 49 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID :4KKKJ*uOoooooooooa EI endstream endobj 123 0 obj <>stream 0 0 0 0 15 61 d1 15 0 0 61 0 0 cm BI /IM true /W 15 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID j:@ EI endstream endobj 124 0 obj <>stream 0 0 0 0 45 45 d1 45 0 0 45 0 0 cm BI /IM true /W 45 /H 45 /BPC 1 /D[1 0] /F/CCF /DP<> ID :?چ +RRj @@ EI endstream endobj 125 0 obj <>stream 0 0 0 0 48 63 d1 48 0 0 63 0 0 cm BI /IM true /W 48 /H 63 /BPC 1 /D[1 0] /F/CCF /DP<> ID &73@}4 Ou}r0|'~?.;UAA EI endstream endobj 126 0 obj <>stream 0 0 0 -45 45 2 d1 45 0 0 47 0 -45 cm BI /IM true /W 45 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &2D2z~e8=&?! !Ĥ5X\^N_]pQ EI endstream endobj 127 0 obj <>stream 0 0 0 0 48 63 d1 48 0 0 63 0 0 cm BI /IM true /W 48 /H 63 /BPC 1 /D[1 0] /F/CCF /DP<> ID &ːaOZ~:־N/OI+y5O뿭 ckkap@ EI endstream endobj 128 0 obj <>stream 0 0 0 -59 53 0 d1 53 0 0 59 0 -59 cm BI /IM true /W 53 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID :}}}}k־K/_______Z EI endstream endobj 129 0 obj <>stream 0 0 0 -29 25 -17 d1 25 0 0 12 0 -29 cm BI /IM true /W 25 /H 12 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 130 0 obj <>stream 0 0 0 -61 48 2 d1 48 0 0 63 0 -61 cm BI /IM true /W 48 /H 63 /BPC 1 /D[1 0] /F/CCF /DP<> ID &`oa=}"tMki}0uNmmma?@ EI endstream endobj 131 0 obj <>stream 0 0 0 -59 56 0 d1 56 0 0 59 0 -59 cm BI /IM true /W 56 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID "@ppo}K`cQ]UBPH7$@ EI endstream endobj 132 0 obj <>stream 0 0 0 0 36 57 d1 36 0 0 57 0 0 cm BI /IM true /W 36 /H 57 /BPC 1 /D[1 0] /F/CCF /DP<> ID & &jޢ?5#c@ EI endstream endobj 133 0 obj <>stream 0 0 0 -59 55 0 d1 55 0 0 59 0 -59 cm BI /IM true /W 55 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID &?Ho EI endstream endobj 134 0 obj <>stream 0 0 0 0 34 45 d1 34 0 0 45 0 0 cm BI /IM true /W 34 /H 45 /BPC 1 /D[1 0] /F/CCF /DP<> ID :waAUMAD@ EI endstream endobj 135 0 obj <>stream 0 0 0 0 40 47 d1 40 0 0 47 0 0 cm BI /IM true /W 40 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &"F8\;N @rĊ7 at()P @*(Xd"#} ,O EI endstream endobj 136 0 obj <>stream 0 0 0 0 35 61 d1 35 0 0 61 0 0 cm BI /IM true /W 35 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID &:%j3'{À EI endstream endobj 137 0 obj <>stream 0 0 0 0 48 47 d1 48 0 0 47 0 0 cm BI /IM true /W 48 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &h\F xAב15MW^`\{[[[[[XaacX EI endstream endobj 138 0 obj <>stream 0 0 0 -60 61 2 d1 61 0 0 62 0 -60 cm BI /IM true /W 61 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &l3$6OO?P"ҿ}&?_Km.]+ ,,  EI endstream endobj 139 0 obj <>stream 0 0 0 0 48 62 d1 48 0 0 62 0 0 cm BI /IM true /W 48 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID :_$dza]܈M7QU: EI endstream endobj 140 0 obj <>stream 0 0 0 0 40 62 d1 40 0 0 62 0 0 cm BI /IM true /W 40 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &COOIzu}&[ .;Vav0D5 EI endstream endobj 141 0 obj <>stream 0 0 0 -59 23 -36 d1 23 0 0 23 0 -59 cm BI /IM true /W 23 /H 23 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3 EI endstream endobj 142 0 obj <>stream 0 0 0 -59 45 0 d1 45 0 0 59 0 -59 cm BI /IM true /W 45 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4_____F_]}u_]}uK믮 EI endstream endobj 143 0 obj <>stream 0 0 0 0 46 61 d1 46 0 0 61 0 0 cm BI /IM true /W 46 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID <@zOOG@7 EI endstream endobj 144 0 obj <>stream 0 0 0 0 38 59 d1 38 0 0 59 0 0 cm BI /IM true /W 38 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID h EI endstream endobj 145 0 obj <>stream 0 0 0 -60 42 2 d1 42 0 0 62 0 -60 cm BI /IM true /W 42 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &"ɤCFn <'K]pK!>ApOZ Ah06Q `.2C ]AǾ EI endstream endobj 146 0 obj <>stream 0 0 0 0 42 6 d1 42 0 0 6 0 0 cm BI /IM true /W 42 /H 6 /BPC 1 /D[1 0] /F/CCF /DP<> ID @ EI endstream endobj 147 0 obj <>stream 0 0 0 0 55 59 d1 55 0 0 59 0 0 cm BI /IM true /W 55 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID &ܠ{׿׿拯~OzO}zO}zO}zO}qX EI endstream endobj 148 0 obj <>stream 0 0 0 -59 27 8 d1 27 0 0 67 0 -59 cm BI /IM true /W 27 /H 67 /BPC 1 /D[1 0] /F/CCF /DP<> ID >ɪ@ EI endstream endobj 150 0 obj <>stream 0 0 0 -70 56 0 d1 56 0 0 70 0 -70 cm BI /IM true /W 56 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID :Vw[uu~[[@ EI endstream endobj 151 0 obj <>stream 0 0 0 0 52 70 d1 52 0 0 70 0 0 cm BI /IM true /W 52 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID :uZZZZ_X,UuWwws^Kɫ몪 F` EI endstream endobj 152 0 obj <>stream 0 0 0 0 50 70 d1 50 0 0 70 0 0 cm BI /IM true /W 50 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID $No? EI endstream endobj 153 0 obj <>stream 0 0 0 0 44 74 d1 44 0 0 74 0 0 cm BI /IM true /W 44 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &\$q xAk\ =>Nj{ mv a{<@ EI endstream endobj 154 0 obj <>stream 0 0 0 0 42 70 d1 42 0 0 70 0 0 cm BI /IM true /W 42 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID 5: @ EI endstream endobj 155 0 obj <>stream 0 0 0 13 58 23 d1 58 0 0 10 0 13 cm BI /IM true /W 58 /H 10 /BPC 1 /D[1 0] /F/CCF /DP<> ID @ EI endstream endobj 156 0 obj <>stream 0 0 0 0 48 70 d1 48 0 0 70 0 0 cm BI /IM true /W 48 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID !}(Z___X__ EI endstream endobj 157 0 obj <>stream 0 0 0 0 50 70 d1 50 0 0 70 0 0 cm BI /IM true /W 50 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID &$ EI endstream endobj 158 0 obj <>stream 0 0 0 -70 46 0 d1 46 0 0 70 0 -70 cm BI /IM true /W 46 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID :u@ EI endstream endobj 159 0 obj <>stream 0 0 0 0 48 70 d1 48 0 0 70 0 0 cm BI /IM true /W 48 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID )`88pG>{Z\N+ Ip EI endstream endobj 160 0 obj <>stream 0 0 0 0 44 70 d1 44 0 0 70 0 0 cm BI /IM true /W 44 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3@ EI endstream endobj 161 0 obj <>stream 0 0 0 0 45 70 d1 45 0 0 70 0 0 cm BI /IM true /W 45 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID ?]u  EI endstream endobj 163 0 obj <>stream 0 0 0 -73 23 13 d1 23 0 0 86 0 -73 cm BI /IM true /W 23 /H 86 /BPC 1 /D[1 0] /F/CCF /DP<> ID &^K^_/ׯ~~} EI endstream endobj 164 0 obj <>stream 0 0 0 -54 44 2 d1 44 0 0 56 0 -54 cm BI /IM true /W 44 /H 56 /BPC 1 /D[1 0] /F/CCF /DP<> ID &`BU >:D0:u߾ci,k O]u , EI endstream endobj 165 0 obj <>stream 0 0 0 0 39 54 d1 39 0 0 54 0 0 cm BI /IM true /W 39 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID ' }݅jPFNk )5  EI endstream endobj 166 0 obj <>stream 0 0 0 0 49 54 d1 49 0 0 54 0 0 cm BI /IM true /W 49 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3h[O҈I3Vi& EI endstream endobj 167 0 obj <>stream 0 0 0 0 41 56 d1 41 0 0 56 0 0 cm BI /IM true /W 41 /H 56 /BPC 1 /D[1 0] /F/CCF /DP<> ID &,0 Z">uA zA_j{am[EE<0`@@ EI endstream endobj 168 0 obj <>stream 0 0 0 0 44 73 d1 44 0 0 73 0 0 cm BI /IM true /W 44 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID MApc   EI endstream endobj 169 0 obj <>stream 0 0 0 18 48 23 d1 48 0 0 5 0 18 cm BI /IM true /W 48 /H 5 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 170 0 obj <>stream 0 0 0 -73 41 0 d1 41 0 0 73 0 -73 cm BI /IM true /W 41 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4KJX0SEkk a0X@ EI endstream endobj 171 0 obj <>stream 0 0 0 0 44 75 d1 44 0 0 75 0 0 cm BI /IM true /W 44 /H 75 /BPC 1 /D[1 0] /F/CCF /DP<> ID &g (> F OO=}?k_]`e"papaq EI endstream endobj 172 0 obj <>stream 0 0 0 0 42 74 d1 42 0 0 74 0 0 cm BI /IM true /W 42 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &_ Z$z EI endstream endobj 173 0 obj <>stream 0 0 0 -68 43 0 d1 43 0 0 68 0 -68 cm BI /IM true /W 43 /H 68 /BPC 1 /D[1 0] /F/CCF /DP<> ID &/sP| Q4 EI endstream endobj 174 0 obj <>stream 0 0 0 -72 44 -27 d1 44 0 0 45 0 -72 cm BI /IM true /W 44 /H 45 /BPC 1 /D[1 0] /F/CCF /DP<> ID &g 裏<'<&Mpz a" ,0 ,05K p k5 EI endstream endobj 175 0 obj <>stream 0 0 0 -54 41 0 d1 41 0 0 54 0 -54 cm BI /IM true /W 41 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4KJX0SEkk a5@@ EI endstream endobj 176 0 obj <>stream 0 0 0 0 44 75 d1 44 0 0 75 0 0 cm BI /IM true /W 44 /H 75 /BPC 1 /D[1 0] /F/CCF /DP<> ID &!f=r]9L 7O^{^_oJҵ EsD k  EI endstream endobj 177 0 obj <>stream 0 0 0 0 48 56 d1 48 0 0 56 0 0 cm BI /IM true /W 48 /H 56 /BPC 1 /D[1 0] /F/CCF /DP<> ID &`F z "?:>?>.K+ɪ' .׺^av %mml,5 @ EI endstream endobj 178 0 obj <>stream 0 0 0 -73 22 13 d1 22 0 0 86 0 -73 cm BI /IM true /W 22 /H 86 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4ɪu___ֽkֽkֽkW EI endstream endobj 179 0 obj <>stream 0 0 0 -59 75 0 d1 75 0 0 59 0 -59 cm BI /IM true /W 75 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID &PHkkkEޗޗޗ׮׿׮׿׮׿^׿^׿^[^  EI endstream endobj 180 0 obj <>stream 0 0 0 -59 43 0 d1 43 0 0 59 0 -59 cm BI /IM true /W 43 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID #Aû~:xU xo}]t 2*B` EI endstream endobj 181 0 obj <>stream 0 0 0 -59 35 0 d1 35 0 0 59 0 -59 cm BI /IM true /W 35 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4 #w恕  EI endstream endobj 182 0 obj <>stream 0 0 0 0 55 62 d1 55 0 0 62 0 0 cm BI /IM true /W 55 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &`^xA=PA&&;wW5_wm.m-avKb   EI endstream endobj 183 0 obj <>stream 0 0 0 -72 61 2 d1 61 0 0 74 0 -72 cm BI /IM true /W 61 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &P He(:ֵk1A IzU߿o\0`@ˎx{  ,XLZ  EI endstream endobj 184 0 obj <>stream 0 0 0 0 58 56 d1 58 0 0 56 0 0 cm BI /IM true /W 58 /H 56 /BPC 1 /D[1 0] /F/CCF /DP<> ID &\ < =>BAO߿OSjMV{vKk    EI endstream endobj 185 0 obj <>stream 0 0 0 0 54 56 d1 54 0 0 56 0 0 cm BI /IM true /W 54 /H 56 /BPC 1 /D[1 0] /F/CCF /DP<> ID &!+ =ӧjH/xx<^ %>뮸Yo  EI endstream endobj 186 0 obj <>stream 0 0 0 0 17 73 d1 17 0 0 73 0 0 cm BI /IM true /W 17 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 187 0 obj <>stream 0 0 0 0 57 56 d1 57 0 0 56 0 0 cm BI /IM true /W 57 /H 56 /BPC 1 /D[1 0] /F/CCF /DP<> ID &`6HgQ#bA<.]]tI`AG)gVja.]k}0T@ EI endstream endobj 188 0 obj <>stream 0 0 0 0 49 56 d1 49 0 0 56 0 0 cm BI /IM true /W 49 /H 56 /BPC 1 /D[1 0] /F/CCF /DP<> ID &A 3By1<}> @Ԃ `\% @.@N Uɪ`}8 BH`d@ EI endstream endobj 189 0 obj <>stream 0 0 0 0 47 56 d1 47 0 0 56 0 0 cm BI /IM true /W 47 /H 56 /BPC 1 /D[1 0] /F/CCF /DP<> ID &`

:5O a[  r@ EI endstream endobj 190 0 obj <>stream 0 0 0 0 17 73 d1 17 0 0 73 0 0 cm BI /IM true /W 17 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID 5?Xo EI endstream endobj 191 0 obj <>stream 0 0 0 0 53 54 d1 53 0 0 54 0 0 cm BI /IM true /W 53 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID 5{P([ If EI endstream endobj 192 0 obj <>stream 0 0 0 0 57 75 d1 57 0 0 75 0 0 cm BI /IM true /W 57 /H 75 /BPC 1 /D[1 0] /F/CCF /DP<> ID &N $)< |>>h >? M1AOZ/ ק+^MUwk{#Kk a EI endstream endobj 193 0 obj <>stream 0 0 0 0 86 54 d1 86 0 0 54 0 0 cm BI /IM true /W 86 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID )riVX0TIk 5 MC0 ` EI endstream endobj 194 0 obj <>stream 0 0 0 -73 29 13 d1 29 0 0 86 0 -73 cm BI /IM true /W 29 /H 86 /BPC 1 /D[1 0] /F/CCF /DP<> ID &kֽk_ZZ&{  EI endstream endobj 195 0 obj <>stream 0 0 0 -68 43 0 d1 43 0 0 68 0 -68 cm BI /IM true /W 43 /H 68 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Bu&D5#R EI endstream endobj 196 0 obj <>stream 0 0 0 0 40 54 d1 40 0 0 54 0 0 cm BI /IM true /W 40 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID 5OZ3  EI endstream endobj 197 0 obj <>stream 0 0 0 0 57 75 d1 57 0 0 75 0 0 cm BI /IM true /W 57 /H 75 /BPC 1 /D[1 0] /F/CCF /DP<> ID &4c\2I>}r }}}~&w\0?{[] p  EI endstream endobj 198 0 obj <>stream 0 0 0 0 60 74 d1 60 0 0 74 0 0 cm BI /IM true /W 60 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Sao^??׿׽޿Ozzׯ}>ޓz_7 EI endstream endobj 199 0 obj <>stream 0 0 0 -73 42 0 d1 42 0 0 73 0 -73 cm BI /IM true /W 42 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID &xJ#MD5P/{@ EI endstream endobj 200 0 obj <>stream 0 0 0 -73 57 2 d1 57 0 0 75 0 -73 cm BI /IM true /W 57 /H 75 /BPC 1 /D[1 0] /F/CCF /DP<> ID &f2zzzzqw}7~뿯kik a ,,  EI endstream endobj 201 0 obj <>stream 0 0 0 0 83 53 d1 83 0 0 53 0 0 cm BI /IM true /W 83 /H 53 /BPC 1 /D[1 0] /F/CCF /DP<> ID &@.DUU_ѭ_'_'_'ZZ{: EI endstream endobj 202 0 obj <>stream 0 0 0 0 53 73 d1 53 0 0 73 0 0 cm BI /IM true /W 53 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID 5{P([ `c EI endstream endobj 203 0 obj <>stream 0 0 0 -73 29 13 d1 29 0 0 86 0 -73 cm BI /IM true /W 29 /H 86 /BPC 1 /D[1 0] /F/CCF /DP<> ID :5O~o߿KKz/ׯ.^ EI endstream endobj 204 0 obj <>stream 0 0 0 -59 39 0 d1 39 0 0 59 0 -59 cm BI /IM true /W 39 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID h o@h@ EI endstream endobj 205 0 obj <>stream 0 0 0 -59 36 0 d1 36 0 0 59 0 -59 cm BI /IM true /W 36 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID &=??MnE  EI endstream endobj 206 0 obj <>stream 0 0 0 0 50 44 d1 50 0 0 44 0 0 cm BI /IM true /W 50 /H 44 /BPC 1 /D[1 0] /F/CCF /DP<> ID 5Rj[vmv[[]ozzԟzO}7zM^<@ EI endstream endobj 207 0 obj <>stream 0 0 0 -60 38 0 d1 38 0 0 60 0 -60 cm BI /IM true /W 38 /H 60 /BPC 1 /D[1 0] /F/CCF /DP<> ID MQ@e[oooooooooo}o: xa.Hu[X0ad EI endstream endobj 208 0 obj <>stream 0 0 0 0 72 45 d1 72 0 0 45 0 0 cm BI /IM true /W 72 /H 45 /BPC 1 /D[1 0] /F/CCF /DP<> ID :A?nkXJTi4aI(P EI endstream endobj 209 0 obj <> endobj 47 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ? ZjΈup_񮂊5s'L5#5.yGrOZ2F!5u:rLbHIqV4gm_Yܕb } YeVRR0AzNuD9>eV.ؕPΡFݎ;kw/ )cSQt#h$Is5}Va~Boh!ϱq0 | gu*>cy|:]Iz~{~ˌwqһ +Cӆy[|4mbֺi*hH"nXʏúLRyc ֚"ơQBSYI= {KY<1,«I!6ħ__sףg?94f 3Fj<њ4f 3Fj<њ4f 3Fj<њ4f 3Fj<њ4f 3Fj<њ4f 3Fj<њ4f 3Fj<њ4f 3Fj<њ4f 3Fj<њ4f 3Fj<њ4f 3Fj<њ4f 3Fj<њ4f 3FiI3Q4gTy4ggTy4ggTy4ggTy4ggTy4ggTy4ggTy4ggTy4ggTy4ggTy4g5is@Kբ((=ͺ3x Ί(;4Lzo5zC1[Sɢw  )hQ@fK9l"(EPsMP4M@3zq]sy袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y袀 z~:3y3y7~:(7~:3{3{7~:(7~:3{3{7~:(7~:3{3{7~:(7~:3{3{7~:(7~:3{3{7~:(7߯Όz袀 z߯Ί( endstream endobj 46 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?5M4s/?V])6_j4nb}Ā DmNƅtk<2|ە߇r?T}ѱv=l9S״|p.?GZjwfިIorjޘ(Oj￳.%DS3 94Ev4ܜbwoiA%snFIaEmgYՒ2]$uGʭhLn72սt16JGi:U <拷P](eH&[wWvʗ2fş1OJ.QӴ{m2YZz$eգE'JV ]5sq{{"25}1;H&*2W9JK[k-ıear5r߾v#5\_0MK䷽+[?$#׎9玵cg;噉'j@q׷9 ~ma cjޱFj?k.Wpې{'9@ʡuPghC`L]>eqrWRpi\ "O+zҒڤ1ۮihu, tJ[:9QK| mͣ=َ< yEzcP&k7&,32כrl 8;k0B;Ri5=BN6K3F00>j(>qimmwr^Y.Z HNI8ֆ4 \*Y\; Rd ('oZ9[k?hh! wrHnzqگYOV c]]ܳr ]vpsUE@r,W&eVi+Oѭ^5-mY75!ޘu4Q ɷTl?9Hۜsg sU|Isv(o%XYc տAƶh*XdiRahj>>}*=2{9e7(jߌsh' ww$Zq1Qp_RFaMi}& o#$̦F.ۗxF3kp9[Cy{4Nm)(~xR kNS.#($3sZZկ 1 %C? \1H滎+XG/z ;xB@TVG56V2^aϽ G=F~-m/aM:A&1r#p3ں:) nftT1-KEd^ֆh;Kl0,3!y{h\i~ #xTۃRyMynPk|xv#2A7!(z<R[3]Xs ݞp@99*X(,jN> 05RZy h7FT uo6 1PW:g WGE4G$_hܑO$_h*1N[{߷x-{ٴy1DŽ#ȹoLv(rS$H'^|]TqwR=]z!"].K(OSE>ar.&giuM /} ĐA4f+am-Ա _9YY . 1=>K|)iWlrp8;w$r@$qj[aqq>_4#?c.Sn..n^=A$^<\|ǰ?hJET*ĶfA=s@gџcLϰ>€cF}3>Œ ~}4 3(4g3(ϰџcLϰ>€cF}3>Œ ~}4 3(4g3(ϰџcLϰ>€cF}3>Œ ~}4 3@fw4`AJt?M!"4mVQWt8 HOxMFrHxյ?=S{Ndޥ-^D>,Cﵯ tЯ (Fգ/x y#ƌKhz*Aב<}i=H !#A^GbvIRg/RcJv.O)>q<#q~q<#W?(W?>q<#>q<#W?(W?>q<#>q<#W?(W?>q<#>q<#W?(W?>q<#>q<#W?(W?>q<#>q<#W?(W?>q<#>q<#W?(W?>q<#>q<#W?(W?>q<#>q<#W?(W?>q<#>q<#W?(W?>q<#>q<#W?(W?>q<#>q<#W?(W?>q<#>q<#W&(72zO/?p83hϱ3hϱ3hϱ3hϱ3hϱ3hϱ3hϱ3hϱ3hϱ3hϱ3hP3E endstream endobj 45 0 obj <>stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( (9N'@Qf(>f(>f(>f(>f(>f(>f(>f(>f(>f(>f(>f(>:QEqKERdd((uzE-Q@l$j 2p=P#כXirmRms.VM]w#kS).H> endobj 215 0 obj <>stream 0 0 0 -59 46 0 d1 46 0 0 59 0 -59 cm BI /IM true /W 46 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4 h EI endstream endobj 219 0 obj <>stream 0 0 0 -60 41 2 d1 41 0 0 62 0 -60 cm BI /IM true /W 41 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID & D 7zWV %SDZ0/!] Ǿ}` EI endstream endobj 220 0 obj <>stream 0 0 0 0 44 59 d1 44 0 0 59 0 0 cm BI /IM true /W 44 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID &h/A?oo  EI endstream endobj 221 0 obj <>stream 0 0 0 -59 53 0 d1 53 0 0 59 0 -59 cm BI /IM true /W 53 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 5^^^׬%(w#{5q]uUP  EI endstream endobj 222 0 obj <>stream 0 0 0 -59 62 0 d1 62 0 0 59 0 -59 cm BI /IM true /W 62 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 5E5Z޽{]jmk][~q[ EI endstream endobj 223 0 obj <>stream 0 0 0 0 45 46 d1 45 0 0 46 0 0 cm BI /IM true /W 45 /H 46 /BPC 1 /D[1 0] /F/CCF /DP<> ID &2D=a>_S: EI endstream endobj 224 0 obj <>stream 0 0 0 0 51 62 d1 51 0 0 62 0 0 cm BI /IM true /W 51 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &$Vj >}C1z:/ׯz}>W~z_}7  EI endstream endobj 225 0 obj <>stream 0 0 0 11 40 19 d1 40 0 0 8 0 11 cm BI /IM true /W 40 /H 8 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 226 0 obj <>stream 0 0 0 -44 70 0 d1 70 0 0 44 0 -44 cm BI /IM true /W 70 /H 44 /BPC 1 /D[1 0] /F/CCF /DP<> ID &@~oo~ ^}k}ko_o_[` EI endstream endobj 227 0 obj <>stream 0 0 0 -59 50 0 d1 50 0 0 59 0 -59 cm BI /IM true /W 50 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID Aû!\7{-p |*B0TP EI endstream endobj 228 0 obj <>stream 0 0 0 -59 66 0 d1 66 0 0 59 0 -59 cm BI /IM true /W 66 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID :}}}~_u߮Ӏ EI endstream endobj 229 0 obj <>stream 0 0 0 -59 42 0 d1 42 0 0 59 0 -59 cm BI /IM true /W 42 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID Pe EI endstream endobj 230 0 obj <>stream 0 0 0 0 51 62 d1 51 0 0 62 0 0 cm BI /IM true /W 51 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &pn#R< ZֵʲAzUu C ,0dD@@ EI endstream endobj 231 0 obj <>stream 0 0 0 0 16 59 d1 16 0 0 59 0 0 cm BI /IM true /W 16 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 232 0 obj <> endobj 218 0 obj <>/Length 2471>>stream x]=lsq.Bj,XXXI*NXXMXE@ 8.$ HAt!nȂ" 0DbLWH lBW 7ovfnwwYW,ٝ;[! aQSn|D2]y)O=__NCdd[{Y(:5(-=YE&-`X͖|F)I2x  9= X Ȗ%" WBɺ|#ğ%ERʩ,ZM4.+PUFy4RԢ)H] ֤}M: 7R(Q< L׼23a็멿i&W3IxG$y (%.RTG& q%Do-E4(Z _ᤋq:ݒlw?C?wա%0Jr+џp>@>e9aR'0{()CP'TV/?Kłmbd# @;}Jpp)%^gh.zWodC)t\x"q(tAh w!M)/oBg )W R^ɜr I7NK>l*=@v5xbO1xf"J9h ?]X)dK_'wF9oIҭF v+.AMʄ|=;F7s)oAF>%(q]#,%\:%Ecç5JIGJHQB|JIKZĔ2-'7ae8EK5-=TݻJ v+]H8#qMb,Š,wCGBP> W>!]&1`E`C#A oI!AԜR~%pQKU~ݣ&nm<ذ81hw)?i\ 7x[ ]K4ݩ%2g0$JgrL y[G e %>s+OL m_ucG}R@jJ 6Jrkq l?3rU)y`*> => >e-G}JQ ̕V@,sb>6. R)ʉ#m) I^7)GR q10Jȭ`S}DG-ٙ0R 3y[TR)U 8[َ7lmqp00$Q5mUJ+rrH*S6ٰqߡS iT)jjmpuC4jlXgZdPM"v=\g)Ζ[4)eliNH*ebJ録prӍ(Rhn1{,e'@R8b@Oi Hrn[.=^2ĸJ:!}{_MiϘxoE _OfR O*B)snW&hF Py4DUPJfff9Gt'ORōu޷ l?SNPCӖuW(26b1aQni\w׏K7!e[sܫ2J(Jg3JCҡtpFP:8t(Q:(J] endstream endobj 217 0 obj <>/Length 4375>>stream x]1lGSSHTD TY8S$QadaRaVq9:6`+B.B.. p6 0 fvvfܥv%+V]oasL2- +-9ImBU-JMnװW^h \Ի| F'lkV'9o2\T{tqhr`)ye畑0h70c=+.1\>r)_`Uv)Am-|-M=~5gV8Xߪí 4B.GQ"UQWUEx- *< 5xM}F#ĕÄR@|)[ (xZȒ@(g;6b ZEUI 0 w-:K&_ag2`JM`$S:/HuW R I<~SfL <+YvsĦ Z5"2߬\ji/7# (ɾSR)`c͞? jX嶪:|oGOk*22uJ@̵s.&/$ĩ.5&'A>?Ah)w|szTbsM.Mj@nR6*SF@r@PVTUD^Acܔl3UM.a|ꥪ\ُ:|z+l ?b)s{āW,R# I0h'z]ńk%J d)Oata~hE Fc?HXK-g22q ,թ砤պf)7xǔOÃĦ3n(S8ֆߙ|SeƶS޿ \GR# IY -!'#9mB<(jl#{>~o0L)sʭ8$xxSF> 23|-c1u X;~JKgzJ]+w|HNC,= 3wC)Z]"U5 FT|L/Xqˣ T *>kdq- DJձHT~ɂ)s r-}9 #rÔ-!Sn+o~jpּUQ8L9S'Q8BfIHFc0L$ |#vs^vU.CDMu]BL_ұC*wEN c:VLYC[LI [PkcTgùq9eG8BQa-Y4OjŔ uz>˨-{g5H#uls}/^B8LɆN0'1ǔo7[qIp Q1gJql[YM)ű堓|]SNJklJǬNpdN33W⟊<%Az}S`0R1eny$1er8aSyF23¨Sz>#i,`)1g8g^gB駒$)gÑ7/<}݀4#K6 Qڡ 2ZBߪ_a@A斎li[]&{UڪW3 ~8ͅq kBbF>R0KQ听(I8.fv mIiTNVcVŔ3=T񘍷LfmnŐd(ZUn?h1Sd4,s1e!LL(ըۘOـyk5tb _CCɔq-]n[Sf#_`QƄv}ە-?>JC9p M{cl $@Sv4f?Ŕfe"LozC_$/&E `Bas3*ےіzog6b`o9HKc27Ͻ cJ6į6H;yGѡB&m07bJ8\oIf-^F tIegG̜P oY8U9*:!ų [L KqĔ[YȌgQYEnj~dJe2͏(Q!n79 Vl-x!d36w2y"}ר2T2la\ľ9eਂCB& Q>Yg uq8kZ胇LImi+;8Žleܢ^ViczKNxq<19e?y%O2SnWx(͌@R(,KVo˔M7B7m-F6 lj+crJV~L]D󙶷N`zG}vʅ@gۖꜵUfvm=gv)Оe[X%,8E)ÂdJS=<% XLoM!X;/SB^VL]A[b+M~ 8[wl[ⲗLs$$)>)'Uz)t/d E'!j٬ WZ\n>saBocf{A-`A2Ae'a#$6[P6l5SNan gӓ*u=-#79E'[Z%)tnEG%5:f79#E)6#D9Jt+{):b̔;*_F |Yy8a7`u)QtȰGK (dgVg0&c{/ o肫M~$n X7O2SŔ-͝Yq"Ջ yߙegL3ؘ.'Cc?ղ:㸲{@o1n endstream endobj 216 0 obj <>/Length 2695>>stream x]!p(` $`H@' S\UD b`9UvUdp> JUU]uv HD68-NٙٙMR<c027Rx@H)C ew !7DFOwP67.SGGN@TK90LPTf x9Xv_$:ٚn= +F ?bM٠TR қ(Yw.FBM #BB=W9@,۩x&$4WS@M ĩA3f?uTX J9EJ1|z~Dk%S~4r0Gx ލ%pF+.ڣi(R.!h5:tޢ_|@ Y {d-*+o:QJ{p~ k~y4:@|O2,Эe74SY"DA)G67?] %餴5O6/φgAPR1&)ͭL%1h'r_1VY$`7>?kO}$eb['lqIЧ㓲1x ) =aN~dRHY|#n[.pDPQra~Ɣʳ1VDSd$=׽l]a0>)kLu)%~"G r~Ou)l lLj: 3HĐk󺢕g}MAېax|-ϯg \-zj]jv nVoTvB.RrڮA*pbĶN44ES~BRɏBd2Ԏ'~~qs7>h JyB9`Lu45yvm|Nx94.đW[pc#=7*~Bۜ"eMD'bC)6PJވ~M+SL^T}N-S7v- pUlJ!Mʹ%7>h bxudRɹlX58'W JY2Uխ]{IBhFi];A]H;/2{uW}xe>g_.`1nAo}uUaPo* WJж#v1(H XU2_ӌWhiƫ=fAdv; ]!GZf̆¤RTMR>EN\ZBKꕣKɥ@-w"(e(L 씜+FiBQm`ߢ\5q˄)g6BPrQ+j+RF߆%A)KBaRmXI\$MeU[06HGߍ:2-1uV^wlÑ ߮0K(&r48KP $RB!t;8R(c+BURA~,bZ\*K&vR&;LkBr|̮RFDG=|]3g1AJj%d/=a)=x> endobj 234 0 obj <>stream x]1n0 EwB70eQ \%Cd >/FontMatrix[1 0 0 1 0 0]/FontBBox[0 -11 1000 1000]/FirstChar 0/LastChar 13/Widths[ 752 636 636 770 774 712 652 500 924 770 995 637 734 372] /Subtype/Type3>> endobj 236 0 obj <>stream x]Kn9D}Bm6 \ my1 exR]EeFfӗ_~=nz\km}?k{cmݟcr_?Yc+١v29J!ex/aXeȄM´ _2d,C3ːF¶ _%ː< $ܖ!㳄2d<|,C&A`MEBZf VKwj jɛe_ VK^KVK$ٰ`͒: VK޴JVKwjɛ2X-y%oNՒ7`M#oX:Q_#ol8:D.7Xy+Z}VW5T`u&ǁmZdD)Y_؇61Q3p15ssQ5{'-7Fʹ{zF.VO OY2V5u~= Vi6>/FontMatrix[1 0 0 1 0 0]/FontBBox[0 -18 1000 1000]/FirstChar 0/LastChar 191/Widths[ 667 644 644 636 636 636 636 636 636 636 636 636 337 636 636 636 802 644 644 644 337 856 318 318 513 320 320 320 320 565 640 640 640 320 640 837 687 1042 678 734 675 716 716 343 343 478 595 733 493 435 712 593 830 712 924 716 720 850 652 678 493 343 924 684 635 411 615 613 392 695 974 612 863 592 698 635 295 634 352 550 390 390 278 521 818 635 278 635 634 361 634 318 275 278 337 579 592 525 603 775 318 611 592 762 343 687 593 665 343 712 716 675 716 837 415 716 830 478 682 493 595 435 678 850 716 635 460 748 732 557 635 500 684 337 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 989 686 575 787 734 687 675 343 678 595 593 343 712 716 1042 457 478 493 716 652 435 716 924 712 457 632 636 645 636 1042] /Subtype/Type3>> endobj 7 0 obj <>/FontMatrix[0.001 0 0 0.001 0 0]/FontBBox[-182 -235 1287 928]/FirstChar 0/LastChar 0/Widths[ 0] /Subtype/Type3>> endobj 238 0 obj <> endobj 149 0 obj <>/FontMatrix[0.001 0 0 0.001 0 0]/FontBBox[-18 -235 606 928]/FirstChar 0/LastChar 0/Widths[ 0] /Subtype/Type3>> endobj 239 0 obj <> endobj 48 0 obj <>/FontMatrix[0.001 0 0 0.001 0 0]/FontBBox[-198 -235 1417 928]/FirstChar 0/LastChar 0/Widths[ 0] /Subtype/Type3>> endobj 240 0 obj <> endobj 162 0 obj <>/FontMatrix[0.001 0 0 0.001 0 0]/FontBBox[-4 -235 606 928]/FirstChar 0/LastChar 0/Widths[ 0] /Subtype/Type3>> endobj 241 0 obj <> endobj 77 0 obj <>/FontMatrix[0.001 0 0 0.001 0 0]/FontBBox[-182 -235 1287 928]/FirstChar 0/LastChar 0/Widths[ 0] /Subtype/Type3>> endobj 242 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 243 0000000000 65535 f 0000044617 00000 n 0000116865 00000 n 0000044550 00000 n 0000044194 00000 n 0000000015 00000 n 0000007689 00000 n 0000114192 00000 n 0000115952 00000 n 0000110750 00000 n 0000044665 00000 n 0000044877 00000 n 0000045103 00000 n 0000045346 00000 n 0000045609 00000 n 0000045824 00000 n 0000046097 00000 n 0000046346 00000 n 0000046558 00000 n 0000046802 00000 n 0000047052 00000 n 0000047315 00000 n 0000047551 00000 n 0000047749 00000 n 0000047968 00000 n 0000048211 00000 n 0000048445 00000 n 0000048696 00000 n 0000048932 00000 n 0000049153 00000 n 0000049402 00000 n 0000049622 00000 n 0000049875 00000 n 0000050054 00000 n 0000050305 00000 n 0000050548 00000 n 0000050751 00000 n 0000050975 00000 n 0000051244 00000 n 0000051483 00000 n 0000051707 00000 n 0000051961 00000 n 0000052202 00000 n 0000052427 00000 n 0000052634 00000 n 0000093345 00000 n 0000089104 00000 n 0000086650 00000 n 0000114834 00000 n 0000052883 00000 n 0000053072 00000 n 0000053284 00000 n 0000053489 00000 n 0000053703 00000 n 0000053925 00000 n 0000054138 00000 n 0000054341 00000 n 0000054545 00000 n 0000054722 00000 n 0000054895 00000 n 0000055093 00000 n 0000055311 00000 n 0000055511 00000 n 0000055694 00000 n 0000055896 00000 n 0000056085 00000 n 0000056287 00000 n 0000056495 00000 n 0000056689 00000 n 0000056907 00000 n 0000057120 00000 n 0000057356 00000 n 0000057647 00000 n 0000057884 00000 n 0000058144 00000 n 0000058345 00000 n 0000058529 00000 n 0000115497 00000 n 0000058797 00000 n 0000059030 00000 n 0000059272 00000 n 0000059460 00000 n 0000059687 00000 n 0000059916 00000 n 0000060121 00000 n 0000060343 00000 n 0000060564 00000 n 0000060791 00000 n 0000061018 00000 n 0000061248 00000 n 0000061489 00000 n 0000061710 00000 n 0000061883 00000 n 0000062081 00000 n 0000062291 00000 n 0000062507 00000 n 0000062725 00000 n 0000062943 00000 n 0000063121 00000 n 0000063352 00000 n 0000063592 00000 n 0000063823 00000 n 0000063994 00000 n 0000064216 00000 n 0000064420 00000 n 0000064591 00000 n 0000064796 00000 n 0000064964 00000 n 0000065135 00000 n 0000065341 00000 n 0000065519 00000 n 0000065737 00000 n 0000065954 00000 n 0000066157 00000 n 0000066369 00000 n 0000066620 00000 n 0000066804 00000 n 0000067006 00000 n 0000067233 00000 n 0000067451 00000 n 0000067626 00000 n 0000067852 00000 n 0000068070 00000 n 0000068282 00000 n 0000068462 00000 n 0000068660 00000 n 0000068904 00000 n 0000069134 00000 n 0000069360 00000 n 0000069570 00000 n 0000069744 00000 n 0000069966 00000 n 0000070188 00000 n 0000070394 00000 n 0000070597 00000 n 0000070787 00000 n 0000071017 00000 n 0000071226 00000 n 0000071454 00000 n 0000071708 00000 n 0000071926 00000 n 0000072157 00000 n 0000072339 00000 n 0000072556 00000 n 0000072773 00000 n 0000072957 00000 n 0000073214 00000 n 0000073379 00000 n 0000073613 00000 n 0000114576 00000 n 0000073829 00000 n 0000074065 00000 n 0000074288 00000 n 0000074502 00000 n 0000074735 00000 n 0000074935 00000 n 0000075106 00000 n 0000075317 00000 n 0000075522 00000 n 0000075720 00000 n 0000075938 00000 n 0000076124 00000 n 0000115202 00000 n 0000076314 00000 n 0000076543 00000 n 0000076787 00000 n 0000076985 00000 n 0000077204 00000 n 0000077432 00000 n 0000077639 00000 n 0000077807 00000 n 0000078018 00000 n 0000078258 00000 n 0000078469 00000 n 0000078686 00000 n 0000078941 00000 n 0000079149 00000 n 0000079380 00000 n 0000079620 00000 n 0000079846 00000 n 0000080113 00000 n 0000080336 00000 n 0000080529 00000 n 0000080780 00000 n 0000081037 00000 n 0000081272 00000 n 0000081510 00000 n 0000081687 00000 n 0000081926 00000 n 0000082178 00000 n 0000082405 00000 n 0000082587 00000 n 0000082791 00000 n 0000083049 00000 n 0000083278 00000 n 0000083503 00000 n 0000083718 00000 n 0000083913 00000 n 0000084150 00000 n 0000084391 00000 n 0000084610 00000 n 0000084843 00000 n 0000085089 00000 n 0000085296 00000 n 0000085524 00000 n 0000085716 00000 n 0000085925 00000 n 0000086148 00000 n 0000086376 00000 n 0000086595 00000 n 0000095387 00000 n 0000044370 00000 n 0000007709 00000 n 0000044171 00000 n 0000109053 00000 n 0000095474 00000 n 0000105793 00000 n 0000101216 00000 n 0000098543 00000 n 0000095670 00000 n 0000095920 00000 n 0000096143 00000 n 0000096363 00000 n 0000096591 00000 n 0000096793 00000 n 0000097027 00000 n 0000097195 00000 n 0000097431 00000 n 0000097658 00000 n 0000097878 00000 n 0000098064 00000 n 0000098307 00000 n 0000098482 00000 n 0000108690 00000 n 0000108730 00000 n 0000109032 00000 n 0000109460 00000 n 0000110728 00000 n 0000114365 00000 n 0000114749 00000 n 0000115008 00000 n 0000115374 00000 n 0000115671 00000 n trailer << /Size 243 /Root 1 0 R /Info 2 0 R /ID [(挪pz`Yl9} `o)(挪pz`Yl9} `o)] >> startxref 116976 %%EOF ga-5-3/doc/armci/www/0000750005473000001440000000000012275260564013270 5ustar d3n000usersga-5-3/doc/armci/www/armci_doc.htm0000640005473000001440000025062111164521654015725 0ustar d3n000users ARMCI - Aggregate Remote Memory Copy Interface
Initialization & Termination
Put/Get (vector)
PutGet (strided)
Put/Get (contiguous)
Accumulate (vector)
Accumulate (strided)
Accumulate (contig.)
Register Ops
Fence / Wait / Barrier
Aggregation
Atomic / Sync
Memory Mgmt.
Collective Ops
Configuration Info

ARMCI - Programming Interfaces

ARMCI programming interfaces are explained below. This is an up-to-date document that containing all the supporting ARMCI APIs. There is also a document describing the ARMCI design (API corresponding to release 1.0 only) is available in the  PDF  format.

Header file
The interfaces are prototyped in the "armci.h" header file.
 

1 Initialization and Termination

int ARMCI_Init()
PURPOSE:     Initializes the ARMCI. This function must be called before any ARMCI functions.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_Finalize()
PURPOSE:     Finalizes the ARMCI. This function must be called after using ARMCI functions.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

void ARMCI_Cleanup()
PURPOSE: Releases any system resources (like System V shmem ids) that
ARMCI can be holding. It is intended to be used before terminating a program
(e.g., by calling MPI_Abort) in case of an error.

void ARMCI_Error(char *message, int code)
Purpose: Combines the functionality of ARMCI_Cleanup and MPI_Abort, and it prints (to the stdout and stderr) a user specified message followed by an integer code.
ARGUMENTS:   
message           - Message to print out
code              - Error code

2 Copy operations using the generalized I/O vector format

int ARMCI_PutV(armci_giov_t *dsrc_arr, int arr_len, int proc)
PURPOSE: Generalized  I/O vector operation that transfers data from the local memory of calling process (source) to the memory of a remote process (destination).
DATA TYPE:
       typedef struct {
         void **src_ptr_ar;  - Source starting addresses of each data segment.
         void **dst_ptr_ar;  - Destination starting addresses of each data segment.
         int bytes;         - The length of each segment in bytes.
         int ptr_ar_len;    - Number of data segment.
       }armci_giov_t;
ARGUMENTS:
       dsrc_arr - Array of data (type of armci_giov_t) to be put to remote process.
       arr_len  - Number of elements in the dsrc_arr.
       proc     - Remote process ID (destination).
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_NbPutV(armci_giov_t *dsrc_arr,int arr_len,int proc,armci_hdl_t* handle)
PURPOSE: Generalized Non-Blocking I/O vector operation that transfers data from the local memory of the calling process (source) to the memory of a remote process (destination).
DATA TYPE:
       typedef struct {
         void **src_ptr_ar;  - Source starting addresses of each data segment.
         void **dst_ptr_ar;  - Destination starting addresses of each data segment.
         int bytes;         - The length of each segment in bytes.
         int ptr_ar_len;    - Number of data segment.
       }armci_giov_t;
ARGUMENTS:
       dsrc_arr - Array of data (type of armci_giov_t) to be put to remote process.
       arr_len  - Number of elements in the dsrc_arr.
       proc     - Remote process ID (destination).
       handle   - Pointer to a desciptor associated with a particular non-blocking transfer. 
                  Passing of a NULL value for this arg makes this function do an implicit 
                  handle non-blocking transfer.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_GetV(armci_giov_t *dsrc_arr,int arr_len,int proc)
 PURPOSE: Generalized  I/O vector blocking operation that transfers data from the remote process memory (source) to the calling process local memory (destination).
DATA TYPE:
       typedef struct {
         void **src_ptr_ar;  - Source starting addresses of each data segment.
         void **dst_ptr_ar;  - Destination starting addresses of each data segment.
         int bytes;         - The length of each segment in bytes.
         int ptr_ar_len;    - Number of data segment.
       }armci_giov_t;
ARGUMENTS:
       dsrc_arr - Array of data (type of armci_giov_t) to get from remote process.
       arr_len  - Number of elements in the dsrc_arr.
       proc     - Remote process ID (source).
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_NbGetV(armci_giov_t *dsrc_arr,int arr_len,int proc,armci_hdl_t* handle)
PURPOSE: Generalized Non-blocking I/O vector operation that transfers data from the remote process memory (source) to the callingprocess local memory (destination).
DATA TYPE:
       typedef struct {
         void **src_ptr_ar;  - Source starting addresses of each data segment.
         void **dst_ptr_ar;  - Destination starting addresses of each data segment.
         int bytes;         - The length of each segment in bytes.
         int ptr_ar_len;    - Number of data segment.
       }armci_giov_t;
ARGUMENTS:

       dsrc_arr - Array of data (type of armci_giov_t) to get from remote process.
       arr_len  - Number of elements in the dsrc_arr.
       proc     - Remote process ID (source).
       handle   - Pointer to a desciptor associated with a particular non-blocking transfer. 
                  Passing of a NULL value for this arg makes this function do an implicit 
                  handle non-blocking transfer.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).
_____________________________________________________________________________

3 Copy operations using the strided format


int ARMCI_PutS(void* src_ptr, int src_stride_ar[], void* dst_ptr, int dst_stride_ar[],
               int count[], int stride_levels, int proc)
PURPOSE: Blocking strided  operation that transfers data from the local memory of calling process (source) to the memory of a remote process (destination).
ARGUMENTS:
       src_ptr        - Source starting address of the data block to put.
       src_stride_arr - Source array of stride distances in bytes.
       dst_ptr        - Destination starting address to put data.
       dst_stride_ar  - Destination array of stride distances in bytes.
       count          - Block size in each dimension. count[0] should be the
                        number of bytes of contiguous data in leading dimension.
       stride_levels  - The level of strides.
       proc           - Remote process ID (destination).
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_NbPutS(void* src_ptr, int src_stride_ar[], void* dst_ptr, int dst_stride_ar[],
                 int count[], int stride_levels, int proc,armci_hdl_t* handle)
PURPOSE: Non-blocking strided  operation that transfer data from the local memory of calling process (source) to the memory of a remote process (destination).
ARGUMENTS:
       src_ptr        - Source starting address of the data block to put.
       src_stride_arr - Source array of stride distances in bytes.
       dst_ptr        - Destination starting address to put data.
       dst_stride_ar  - Destination array of stride distances in bytes.
       count          - Block size in each dimension. count[0] should be the
                        number of bytes of contiguous data in leading dimension.
       stride_levels  - The level of strides.
       proc           - Remote process ID (destination).
       handle         - Pointer to a desciptor associated with a particular non-blocking transfer. 
                        Passing of a NULL value for this arg makes this function do an implicit 
                        handle non-blocking transfer.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_GetS(void *src_ptr c_ptr, int src_stride_ar[], void* dst_ptr,
               int dst_stride_ar[], int count[], int stride_levels, int proc)
PURPOSE: Blocking strided operation that transfers data from the remote process memory (source) to the calling process  local memory (destination).
ARGUMENTS:
src_ptr        - Source starting address of the data block to get.
       src_stride_arr - Source array of stride distances in bytes.
       dst_ptr        - Destination starting address to get data.
       dst_stride_arr - Destination array of stride distances in bytes.
       count          - Block size in each dimension. count[0] should be the
                        number of bytes of contiguous data in leading dimension.
       stride_levels  - The level of strides.
       proc           - Remote process ID (source).
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_NbGetS(void *src_ptr c_ptr, int src_stride_ar[], void* dst_ptr, int dst_stride_ar[],
                 int count[], int stride_levels, int proc, armci_hdl_t* handle)
PURPOSE: Non-blocking strided operation that transfers data from the remote process memory (source) to the calling process  local memory (destination).
     ARGUMENTS:
src_ptr        - Source starting address of the data block to get.
       src_stride_arr - Source array of stride distances in bytes.
       dst_ptr        - Destination starting address to get data.
       dst_stride_arr - Destination array of stride distances in bytes.
       count          - Block size in each dimension. count[0] should be the
                        number of bytes of contiguous data in leading dimension.
       stride_levels  - The level of strides.
       proc           - Remote process ID (source).
       handle         - Pointer to a desciptor associated with a particular non-blocking transfer. 
                        Passing of a NULL value for this arg makes this function do an implicit 
                        handle non-blocking transfer.
RETURN VALUE:
zero        - Successful.
       other value - Error code (described in the release notes).
_____________________________________________________________________________

4 Copy operations for contiguous data

int ARMCI_Put(void* src, void* dst, int bytes, int proc)
PURPOSE: Blocking transfer of contiguous data from the local process  memory (source) to remote process memory (destination).
ARGUMENTS:
       src     - Source starting address of the data block to put.
       dst     - Destination starting address to put data.
       bytes   - amount of data to transfer in bytes.
       proc    - Remote process ID (destination).
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_NbPut(void* src, void* dst, int bytes, int proc, armci_hdl_t* handle)
PURPOSE: Non-blocking transfer of contiguous data from the local process  memory (source) to remote process memory (destination).
ARGUMENTS:
       src     - Source starting address of the data block to put.
       dst     - Destination starting address to put data.
       bytes   - amount of data to transfer in bytes.
       proc    - Remote process ID (destination).
       handle  - Pointer to a desciptor associated with a particular non-blocking transfer. 
                 Passing of a NULL value for this arg makes this function do an implicit 
                 handle non-blocking transfer.

RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_Get(src, dst, bytes, proc)
PURPOSE: Blocking transfer of contiguous data from the remote process  memory (source) to the calling process memory (destination).
ARGUMENTS:
       src     - Source starting address of the data block to put.
       dst     - Destination starting address to put data.
       bytes   - amount of data to transfer in bytes.
       proc    - Remote process ID (destination).

RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_NbGet(src, dst, bytes, proc, armci_hdl_t* handle)
PURPOSE: Non-blocking transfer of contiguous data from the remote process  memory (source) to the calling process memory (destination).
ARGUMENTS:
       src     - Source starting address of the data block to put.
       dst     - Destination starting address to put data.
       bytes   - amount of data to transfer in bytes.
       proc    - Remote process ID (destination).
       handle  - Pointer to a desciptor associated with a particular non-blocking transfer. 
                 Passing of a NULL value for this arg makes this function do an implicit 
                 handle non-blocking transfer.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).
__________________________________________________________________________

5 Accumulate operation using the generalized I/O vector format

Accumulate operation performs atomic scaled reduction, i.e.,  remote += scale*local

int ARMCI_AccV(int datatype, void *scale, armci_giov_t *dsrc_arr, int arr_len, int proc, 
               armci_hdl_t* handle)

PURPOSE: Blocking generalized I/O vector operation that atomically updates the memory of
         a remote process (destination).
DATA TYPE:
       typedef struct {
         void **src_ptr_ar;  - Source starting addresses of each data segment.
         void **dst_ptr_ar;  - Destination starting addresses of each data segment.
         int bytes;         - The length of each segment in bytes.
         int ptr_ar_len;    - Number of data segment.
       }armci_giov_t;

ARGUMENTS:
       datatype  - Supported data types are:
                        ARMCI_ACC_INT -> int, ARMCI_ACC_LNG -> long,
                        ARMCI_ACC_FLT -> float, ARMCI_ACC_DBL-> double,
                        ARMCI_ACC_CPL -> complex, ARMCI_ACC_DCPL -> double complex.
       scale     - Scale for the data (dest = dest + scale * src).
       dsrc_arr  - Array of data (type of armci_giov_t) to be accumulated to the remote process.
       arr_len   - Number of elements in the dsrc_arr.
       proc      - Remote process ID.
       handle    - Pointer to a desciptor associated with a particular non-blocking transfer. 
                   Passing of a NULL value for this arg makes this function do an implicit 
                   handle non-blocking transfer.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_NbAccV(int datatype, void *scale, armci_giov_t *dsrc_arr, int arr_len, int proc,
armci_hdl_t* handle)
PURPOSE: Non-blocking generalized  I/O vector operation that atomically  updates the memory of a remote process (destination).
DATA TYPE:
       typedef struct {
         void **src_ptr_ar;  - Source starting addresses of each data segment.
         void **dst_ptr_ar;  - Destination starting addresses of each data segment.
         int bytes;         - The length of each segment in bytes.
         int ptr_ar_len;    - Number of data segment.
       }armci_giov_t;
ARGUMENTS:
       datatype  - Supported data types are:
                        ARMCI_ACC_INT -> int, ARMCI_ACC_LNG -> long,
                        ARMCI_ACC_FLT -> float, ARMCI_ACC_DBL-> double,
                        ARMCI_ACC_CPL -> complex, ARMCI_ACC_DCPL -> double complex.
       scale     - Scale for the data (dest = dest + scale * src).
       dsrc_arr  - Array of data (type of armci_giov_t) to be accumulated to the remote process.
       arr_len   - Number of elements in the dsrc_arr.
       proc      - Remote process ID.
       handle    - Pointer to a desciptor associated with a particular non-blocking transfer. 
                   Passing of a NULL value for this arg makes this function do an implicit 
                   handle non-blocking transfer.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).
_____________________________________________________________________________

6 Accumulate operation using the strided format

int ARMCI_AccS(int datatype, void *scale, void* src_ptr,int src_stride_ar[], void* dst_ptr, 
                 int dst_stride_ar[], int count[],  int stride_levels, int proc)
PURPOSE: Blocking strided operation that atomicaly updates the memory of a remote process (destination).
ARGUMENTS:
       datatype       - Supported data types are:
                        ARMCI_ACC_INT -> int, ARMCI_ACC_LNG -> long,
                        ARMCI_ACC_FLT -> float, ARMCI_ACC_DBL-> double,
                        ARMCI_ACC_CPL -> complex, ARMCI_ACC_DCPL -> double complex.
       scale          - Scale for the data (dest = dest + scale * src).
       src_ptr        - Source starting address of the data block to put.
       src_stride_arr - Source array of stride distances in bytes.
       dst_ptr        - Destination starting address to put data.
       dst_stride_arr - Destination array stride distances in bytes.
       count          - Block size in each dimension. count[0] should be the
                        number of bytes of contiguous data in leading dimension.
       stride_levels  - The level of strides.
       proc           - Remote process ID (destination).
RETURN VALUE:
       zero           - Successful.
       other value    - Error code (described in the release notes).

int ARMCI_NbAccS(int datatype, void *scale, void* src_ptr,int src_stride_ar[],
                  void* dst_ptr, int dst_stride_ar[], int count[],  int stride_levels,
                  int proc, armci_hdl_t* handle)
PURPOSE: Non-blocking strided operation that atomicaly updates the memory of a remote process (destination).
ARGUMENTS:
       datatype       - Supported data types are:
                        ARMCI_ACC_INT -> int, ARMCI_ACC_LNG -> long,
                        ARMCI_ACC_FLT -> float, ARMCI_ACC_DBL-> double,
                        ARMCI_ACC_CPL -> complex, ARMCI_ACC_DCPL -> double complex.
       scale          - Scale for the data (dest = dest + scale * src).
       src_ptr        - Source starting address of the data block to put.
       src_stride_arr - Source array of stride distances in bytes.
       dst_ptr        - Destination starting address to put data.
       dst_stride_arr - Destination array stride distances in bytes.
       count          - Block size in each dimension. count[0] should be the
                        number of bytes of contiguous data in leading dimension.
       stride_levels  - The level of strides.
       proc           - Remote process ID (destination).
       handle         - Pointer to a desciptor associated with a particular non-blocking transfer. 
                        Passing of a NULL value for this arg makes this function do an implicit 
                        handle non-blocking transfer.
RETURN VALUE:
       zero           - Successful.
       other value    - Error code (described in the release notes).

7 Accumulate operation using contiguous format

int ARMCI_Acc(int datatype, void *scale, void* src, void* dst, int bytes, int proc)
PURPOSE: Blocking operation that atomicaly updates the memory of a remote process (destination).

ARGUMENTS:
       datatype - Supported data types are:
                        ARMCI_ACC_INT -> int, ARMCI_ACC_LNG -> long,
                        ARMCI_ACC_FLT -> float, ARMCI_ACC_DBL-> double,
                        ARMCI_ACC_CPL -> complex, ARMCI_ACC_DCPL -> double complex.
       scale   - Scale for the data (dest = dest + scale * src).
       src     - Source starting address of the data to transfer.
       dst     - Destination starting address to add incoming data.
       bytes   - amount of data to transfer in bytes.
       proc    - Remote process ID (destination).
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_NbAcc(int datatype, void *scale, void* src, void* dst, int bytes, int proc,
                armci_hdl_t* handle)

PURPOSE: Bon-blocking operation that atomicaly updates the memory of a remote process (destination).
ARGUMENTS:
       datatype - Supported data types are:
                        ARMCI_ACC_INT -> int, ARMCI_ACC_LNG -> long,
                        ARMCI_ACC_FLT -> float, ARMCI_ACC_DBL-> double,
                        ARMCI_ACC_CPL -> complex, ARMCI_ACC_DCPL -> double complex.
       scale   - Scale for the data (dest = dest + scale * src).
       src     - Source starting address of the data to transfer.
       dst     - Destination starting address to add incoming data.
       bytes   - amount of data to transfer in bytes.
       proc    - Remote process ID (destination).
       handle   - Pointer to a desciptor associated with a particular non-blocking transfer. 
                  Passing of a NULL value for this arg makes this function do an implicit 
                  handle non-blocking transfer.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).
 _____________________________________________________________________________

8 Register Originated Data Transfer Operations

int ARMCI_PutValueXXX(DATATYPE src, void* dst, int proc)
PURPOSE: Transfer of a value stored in a register  of a local process to remote process memory (destination).   XXX can be "Long"/"Int"/"Double"/"Float"
ARGUMENTS:
DATA TYPE    - long, int, float, double according to XXX in the function name
       src   - Value in a register to put.
       dst   - Destination starting address to put data.
       proc  - Remote process ID (destination).
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_NbPutValueXXX(DATATYPE src, void* dst, int proc, armci_hdl_t* handle)
PURPOSE: Non-blocking transfer of a value stored in a register of a local process to remote process memory (destination).  XXX can be "Long"/"Int"/"Double"/"Float"
ARGUMENTS:
DATA TYPE:  - long, int, float, double according to XXX in the function name
      src   - Value in a register to put.
      dst   - Destination starting address to put data.
      proc  - Remote process ID (destination).
      handle - Pointer to a desciptor associated with a particular non-blocking transfer. 
                Passing of a NULL value for this arg makes this function do an implicit 
                handle non-blocking transfer.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

DATATYPE ARMCI_GetValueXXX(void *src, int proc)
PURPOSE: Transfer of a value stored in a register  of a process (source).   XXX can be "Long"/"Int"/"Double"/"Float"
ARGUMENTS:
DATATYPE    - long, int, float, double according to XXX in the function name
       src   - Source starting address.
       proc  - Remote process ID (source).
RETURN VALUE:
       the value (of type DATATYPE) is returned.
_____________________________________________________________________________

9 Completion of Outstanding Operations

int ARMCI_Fence(int proc)
PURPOSE: Blocks the calling process until all blocking put or accumulate operations
issued to the specified remote process complete at the destination.
ARGUMENTS:
    proc    - Remote process ID.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_AllFence()
PURPOSE: Blocks the calling process until all the outstanding blocking put or accumulate
operations complete remotely regardless of the destination processor.

ARGUMENTS: none


int ARMCI_Wait(armci_hdl_t* handle)
PURPOSE: A common function to be used  to wait for non-blocking ARMCI operations with explicit handle.
ARGUMENTS:
handle - Pointer to a desciptor associated with a particular non-blocking transfer. 
            A value of NULL for the pointer is erroneous. A value other then NULL would 
            make this routine act as a wait for an explicit non-blocking request with 
            the handle pointed to by reqid.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_Test(armci_hdl_t* handle)
PURPOSE: A function to be used as check completion status of  non-blocking ARMCI operations with explicit handle.
ARGUMENTS:
handle - Pointer to a desciptor associated with a particular non-blocking transfer.
            A value of NULL for the pointer is erroneous. A value other then NULL would 
            make this routine act as a wait for an explicit non-blocking request with 
            the handle pointed to by reqid.
RETURN VALUE:
       zero        - Completed
       1           - In progress
       other value - Error code (described in the release notes).

int ARMCI_WaitProc(int proc)
PURPOSE: Wait for all outstanding non-blocking operations with implicit handles to a particular process to finish.
ARGUMENTS:
       proc - proc for which all the outstanding non-blocking operations have to be completed.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_WaitAll()
PURPOSE: Wait for all outstanding non-blocking operations with implicit handles to finish.
ARGUMENTS: none
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_Barrier()

PURPOSE: Synchronize processors and memory. This operation combines functionality of
        MPI_Barrier and ARMCI_AllFence.
ARGUMENTS: none
RETURN VALUE: none
_____________________________________________________________________________

10 Aggregated Data Transfer Operations

ARMCI_SET_AGGREGATE_HANDLE (armci_hdl_t* handle)
handle - Pointer to a desciptor associated with a particular non-blocking transfer.
PURPOSE: Mark a handle as aggregate. This will allow ARMCI to combine nonblocking operations that use that particular handle and process them as a single operation. In the initial implementation only contiguous puts or gets could use aggregate handle. Specifying the same handle for a mix of put anmd get calls is not allowed i.e., only multiple put or only multiple get calls can use the same handle.

ARMCI_UNSET_AGGREGATE_HANDLE (armci_hdl_t* handle)

handle - Pointer to a desciptor associated with a particular non-blocking transfer.
PURPOSE: Clears a handle that has been marked as aggregate.

11 Atomic and Synchronization Operations

int ARMCI_Rmw(int op, void *ploc, void *prem, int value, proc)
PURPOSE: Combines atomically the specified integer  value with the corresponding integer value (int or long) at the remote memory location and returns the original value found at that location.
ARGUMENTS: 
    op    - Available operations are:
            ARMCI_FETCH_AND_ADD -> int
            ARMCI_FETCH_AND_ADD_LONG -> long
            ARMCI_SWAP -> int
            ARMCI_SWAP_LONG ->long
   ploc   - Pointer to the local memory.
   prem   - Pointer to the remote memory.
   value  - Value to be added to the remote memory.
   proc   - Remote process ID.

int ARMCI_Create_mutexes(int count)
PURPOSE: Collective operation to create sets of mutexes on individual processes.
Each process specifies the number of mutexes associated with that
process. The total number of mutexes allocate will be a sum of the
values specified on each process.
ARGUMENTS:
  count    - number of mutexes allocated on calling process
             count=0 means that no mutexes will be associated with that process.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_Destroy_mutexes(void)
PURPOSE: Collective operation to destroy mutex sets allocated by ARMCI_Create_mutexes.
ARGUMENTS:  none
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

void ARMCI_Lock(int mutex, int proc)
PURPOSE: Acquire the specified mutex on the specified process on behalf of the calling process.
ARGUMENTS:
 mutex    - Mutex number (0..count-1)
  proc    - Remote process ID

void ARMCI_Unlock(int mutex, int proc)
PURPOSE: Releas the specified mutex on the specified process on behalf of the calling process. The mutex must have been acquired with ARMCI_Lock.
ARGUMENTS:
    mutex    - Mutex number (0..count-1)
    proc     - Remote process ID

12 Memory Management

int ARMCI_Malloc(void* ptr[], armci_size_t bytes)
PURPOSE: Collective operation to allocate memory that can be used in the context
of ARMCI copy operations.

ARGUMENTS:
  ptr    - Pointer array. Each pointer points to the allocated memory of one process.
bytes    - The size of allocated memory in bytes.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

void* ARMCI_Malloc_local(armci_size_t bytes)
PURPOSE: Operation (noncollective) to allocate local memory. This memory can only be accessed locally. However, using this memory in ARMCI operations can improve performance on some systems. For example, on Myrinet or Infiniband, the memory is registered and therefore suitable for the native RDMA communication.
ARGUMENTS:
bytes    - The size of allocated memory in bytes.
RETURN VALUE:
       NULL pointer - Failure.
       other value - address of newly allocated memory.

int ARMCI_Free(void *address)
PURPOSE: Collective operation to free memory which was allocated by ARMCI_Malloc.
ARGUMENTS:
  address    - pointer to the allocated memory.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

int ARMCI_Free_local(void *address)
PURPOSE: Non-collective operation to free memory which was allocated by ARMCI_Malloc_local.
ARGUMENTS:
  address    - pointer to the allocated memory.
RETURN VALUE:
       zero        - Successful.
       other value - Error code (described in the release notes).

13 Collective Operations

These operations can be used as an alternative to the collective operations in a message-passing library ARMCI is running with. The programmer can use either.

void armci_msg_brdcst(void* buffer, int len, int root)
PURPOSE: broadcast data from process "root" to everybody else.
ARGUMENTS:
buffer - data to broadcast/receive
len - size of the data
root - rank of the sending process
RETURN VALUE: none

void armci_msg_gop2(void *x, int n, int type, char* op)
PURPOSE: allreduce operation for int, long, float, double corresponding to XXX is "i"/"l","f","d" 
ARGUMENTS:
x - data
n - number of elements
type - data type, one of: ARMCI_INT/ARMCI_LONG/ARMCI_FLOAT/ARMCI_DOUBLE
op - operator, one of: "+","-","*","min","max","abs"
RETURN VALUE: none

void armci_msg_barrier(void)
PURPOSE: synchronize all processors
ARGUMENTS: none
RETURN VALUE: none

void armci_msg_reduce(void *x, int n, char* op, int type, int root)
PURPOSE: reduce operation
ARGUMENTS:
x - data
len - size of the data
type - data type, one of: ARMCI_INT/ARMCI_LONG/ARMCI_FLOAT/ARMCI_DOUBLE
op - operator, one of: "+","-","*","min","max","abs"
RETURN VALUE: none

14 System Configuration

These operations can be used to determine configuration of the system the application  is running on.
The system configuration is described in terms of locality domains. For example on clusters with SMP nodes, SMP node is one of two locality domains for a process. The ARMCI header file predefines ARMCI_DOMAIN_SMP for querying configuration information on clusters composed of computer nodes with shared memory.

int armci_domain_nprocs(armci_domain_t domain, int id)
PURPOSE: return number of processes/tasks in locality domain represented by id. 
ARGUMENTS:
domain - domain name
id - identifier of a node within the locality domain, value < 0 means my node
RETURN VALUE:
< 0 - error
other value - number of processes/tasks (0, ..., armci_domain_count(domain)-1)

int armci_domain_count(armci_domain_t domain)
PURPOSE: return number of nodes in specified locality domain. 
ARGUMENTS:
domain - domain name
RETURN VALUE:
< 0 - error
other value - number of nodes

int armci_domain_id(armci_domain_t domain, int glob_proc_id)

PURPOSE: return ID of locality domain of specified process
ARGUMENTS:
domain - domain name
id - process/task id
RETURN VALUE
< 0 - error
other value - process/task id

int armci_domain_glob_proc_id(armci_domain_t domain, int id, int loc_proc_id)
PURPOSE: Returns global process/task id based on its id in a given locality domain node
ARGUMENTS:
  domain - domain name
  id - identifier of a node within the locality domain, value < 0 means my node
RETURN VALUE:
  < 0 - error
  other value - process/task id
int armci_domain_my_id(armci_domain_t domain)
PURPOSE: Returns id node in specified domain the calling process/task belongs to
ARGUMENTS:
domain - domain name
id - identifier of a node within the locality domain, value < 0 means my node
RETURN VALUE: id of domain


ga-5-3/doc/ga/0000750005473000001440000000000012275260563011737 5ustar d3n000usersga-5-3/doc/ga/ga_doc.pdf0000640005473000001440000361301411164522235013650 0ustar d3n000users%PDF-1.3 % 1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>stream xctem6۶mWRmgǶmWlvŶmGݧ{}O\sJƶ1['zfD¶ ; 9F H `L$0"ba!b!sw075s"RQT/?"Dt47!>l6NcE% @dbn א'U! ͍̍6j"[o?"#[cBsdvBБȀ`dp3â#8X;:~L lsdKdncdlt}9~KXm휈ʋNfNv4fٚ|K9o,`N6DNo-!7pv41/VGoo_qYK_R郹#ʄۦӷmSsDĖvs8+AT ƶ6VDFY[QϪ@Vk_#K9C9[YX7/"#H:|w`bnQ `,oddFdb`=m'gfw)Y|O69 _snɿS^~GIH֍ȓ{YXq|[df )c`F#"'M3JN6߫? s{gw,L\le5q_KpDC/`ki_X' [+u&>-mݘHg:5:lX?܂ q5] `nkQn$wAM0ϓz1^^ʲ;_E! Fq5 ם:ˆF^Cg :|eY+sW#HKP<:ς`%QJN8by6me_+]_;*O}/]Au6M_mƦlwT1<3 l.!y")(\1+7=\'nVNYڭD1$UEIXC VCmPYBu]_ ^6xj`:B<6=p5Xy s6n!t>TL~e ZzseB\o|Ugۀ/\ t "wҊ?8'N4Bf)#nYW dk8c*(R je{ Fzow$`EQ#"RXנmEvK@ c,϶1{X6TC\Fon-5ZE2EÉ', 테T@Q|]DiU  XLX;ADjN<(U='@Ogj| ܂2q|1)CEi"tS%I?bT-q e@h1di!V`sk"5$@ 61$@`θHh} 4n,,#&¨6PW٨xAoDgD$!.VkdxWziu_d׌9OMBޫ8d8Sq7`$ DG㵒IR XoDꩋh Χ6Hn(:mYZJk:Ȃ"D;߷ˑqS_5$LEgsʂ 7'o?Zl锒ۚ-Dè[G/ >Oj⪣bj\4z {RP=O%Qo_x061gwH{k1=pfsU[ݠ97k8 bt jC'.0%3/B޲;a[cr ) T9pd&Ra (= 'i= ,\)s{RI$FiB93y-%ckALґ$ZJ{3ex2V'(}g#63LdEךMmAufV>(2yu^Rn[89Y P >*?TWVwP pWC{Ym`q̵ kޔ;;44"`HKW x7*#/g7zC`|izB`"n(5`hyNMq\pIV\Y_ѥtjbg˔c*KXЈ93(f[+B{RF38wF=@KKBmà3Z(hKwQ* s<&kGb0ѹGB ]qoyŖPcju2ي-W0HSdVc׮B]7H&31d/EU. k0j_@sېWSbeJ3Ww# {I<_-(uő6F<;r- _?40vu+ dyn+M49DJ"Q%BVP5u6`k$'0nF4 fAf>f(` )h7eX2RU{NN8?կHwc :|/ ʷ9&57ĊU>".H"J}0xpN=[7p>1{h{4_C XiIEyпYd+ o=` =KQӨ:8wo`=r`'JTF|PSCXeoΎS{'͛$g@W&9JYSgdLɒf:s%_DII 5-z3;ќB]Qח1,r~ q}=n#/P$zv+| Hѯ,x}h,Ork"-dJz0ْL┹ %jg!2608>v`N9uӹR[ID|k.k~6tX;Ej&jʡ q!U^7^*P%nPJM1)…PcC+DaioE@ϵԏsd~y:ކ+TszQSKC&Uf:rȾOښB!f*x]毞FwJwƭe[3Е:Yg ! r抏YٿSeș܍}Eyi/8P3M@Wemp-.1q1r-,"xcow5%ǭ T?$а6\O*?w؃.FYL RoD GgdmuD-!F{(\k?qIx "d72Ed+ :{|GzYV޲ЗvOpl©>DwjxPUKر]ȣPPڿ܀mx6EkF*)g'9B@7Aq]bp!@LG(oK~wƸ)u/%>t!ijp9v+ [Aa+dą I$QtK '98we8J"~ꆸhqϦu!!L@Mߧ tUpQsG=_]h1|{0 qZWO9~ 0N|<z=) V}&qřwtPdh䴖xM22 `2,NeguXp#6PI[U )l[ouos1:* qTe S)Mth)wL+dyJUoSwP|zcvkW&Va4*Fʶиm$YɌۻT'=MlOmxuy[6Zi߉`$m&{i F* zn`Q%eS5RoGzTb1p 5juG vq6ѐ A HNщO^(#-IF?;ٸj#&Ccl.oŞ(:ɷ5@ru56 e7&Jдϭٵz4=<ֿT~>/UACGpp OθTK<7qz8gܼ4nK#s pRS{Oxq1ʘQ+n+ܥ0+zcT=_C;]#ch"5mʱS$%}O2 >3[B7Fއbcirs0#B^CI'x/ R33RG;vWԃtmg 遥MGɰ<'&QG>nlDT}A,!\p9eeW׾B$ ܌kjHz-3[CI.caw vnJS+iw"VݲXkL+|6\HZh%PtLvjy5Y1rV-qM!l+u2t8If;Mp3J3@;Om7]쎱Q2&wsj+_&8 H+к,hx|1NB D)x'{OSdn]h1;F6PP3u Y3 rn>:ŷS?k)+BeJ$z"Ѫ6thp:*Tg^qx5УS bMOԡr8؅ewN&'F)`džXo6!L҉quh;+ͧcĈ(*(1LKܺV(Τup \6Q׉4itН?=)nc`}a ΅ !o %_h/ra=h)zk_Lb= Z@#a_18^XNEI@*oOjO^IƪXv~E`Ts$[+(PMmAϱSHJ"+(o~#I/|JIE qr~pJڡfEՂl2#vg*S? f! xT և `i1UuPZb% 8B})߭ݻ;4p='ٵmW0? w泺P3]hC4hNksIP4 ڔ^~VOmrj_l`yn  f甇o֖IkzK>-b".'u`ң.3<#A\Ӑ{3\+Q*UCm<&%$Ɂk8+>"C-j푍I uҪq!o;f\q: .SI$#sq@HԇHRЇ_F%EVsڔl-'z)G JeSIirVRXU3TmL@ymSg %E7_?0f򧥴@.{~a]!ą;Ot+2;CS-b )'l 6Yv` HtX=~^A9H,ǩM|MӤ|hkV>~ESuJLZh=~nk[f=4!oVdh2z V7=zšv05"I+sm;EGro` 8E'' HuPXzS%opk}/R@(1=ĪT꧒Wo&7Dquz|OpStG"e;A"ԃrR)uuz,Y{elw+י0$JZ=V&Ͷ4U't a#g+/5h,_ULW˜]Cӓ?Z!k-fiu>lqx' SX>PkZE#<_~EWr {@ $9h\|<锩j"‚}BUXwEN=^0#!%=Z(sVJLc̹ړ~L6Ъ{} na#fKkۨE :+%[ q-;]33Iu ^~cdZ(<ʼC>cL@C8tŽ^JH1δE#5&E[7\Y}g'yh Iި{Hhb3u,4 Tg!-Uխ%HaBliSm3kvOꨏೳuM#ئ#dl^Ngl+LUEKg\o} fM9KF"[(ȿ/ oEDj-o.:c=@Ky@~֠~\XU%aJ[{u4BbNܣR^!0\}yYi| [V'S+svջ<')[p|g[\Hot9!; F{$, .8uw vBυ;vuK6}⍐*Dv57{9/hSc% @H6.jky@պ 'di.*1nHL.2f_>I r'U2CӇ;;g1 Sy4$x*q$2zJd_= ZHw~e¥X[m\eՋt3K%5*BS>{AܵupٝȪL_=潳.[i!iURѶ%ȧNd.i‘U\~qKc0I5YRA2:`+O/lAaQehܦsڸ,|T_B~9΋F(BD?fP/F/ M< c0RiPu { ǀ0BςoU*)?ˈO/gT#"[Q ^_c|af[7W1*=!RHz`j]ҌyY?FADg6Ձ4YQ]xo,6䀘1/[slRڕ}͎9,&^H-JdW ~cs ev'i& R'~ hr ya/( 顷awSj_ A#zL%78 o% ujX2aG <᯻jQAĹ2>Jk ~&?0ڼ/p򛔗M s$OZOk8f`nT6 OE}Vb'h֗DFA޵ӑ] W&Gb)  /TT,JvF-4?f ̋c*ggH\n1BD"AG=nB7a8K[ 5Q3Rv[<ϟX|ҳ.{@bR M̲/˓,^ fX&aN̮=\+V`qrڟH*idHm5 `0c.~yM*a[s;HK/}HcؚLς泬Ӵ{Oy~CcA:DF5iٝ`k/p=l׺U|4~iddt㊫*XhCפz"ІRIa EJTKm: 64PV4 Y1gp+6v_M }ޝv1$ ]_e= D=hK^k*q4Ĺ}JǞ}ׄD""v1s`pY(@bC)\P4XPt3χvj_#yf>;I)#xP(& ՑSQ!wWUIYw]n"UX.]i "s}K$3 KYv{;G+t7=ht8eJRXRw?2fdpKx%^e/l:e- ].b~0ɯEpNM~2n9x 3ԄguM/PE@Y|CU~uJl. DjH? gphQ^k>~5!Ln,kOlQA^@|1a؜4=gjFd: }Ǫf6: {]lڂ2l KTt և+c=M*+"tn&Ae&/v\ y5QE:Q˯x5 ڣL&NM5^Zג{}ȥZ"^c6g⢒:abH2><](9RM5}2{y0Bu#u}V'* QYidBUhC$XL0"X{L6^-U5QG|~r\c* d LRJvtA- q/1L?끡:(~Ws!ڂ\9& cXiۮ8+ɷ<@hlW9™Q!IeU0fXgџ_koˀ`okCPEi6H# &-b-x%2&z[؍  n"\HsqOka Ip#BNjo[ S4\86ׯ0m@5y~ ɮq'I1旻LO`wcoKʆf`0d *y8ٵ/Y1$t^!jLM(+bVYȅ|Ђ4 h|R\T[Ԡ$Nz>{d &]1|^"W%e2O&Ҩ澦f}XSMI_ S2U S@ Rxa#' Q?j¦PAQ\Kw/8U- zy'QDhj7rr^; 뉤$hk}<#X~c0B(0"RU& E| |R8Q-Qoc^LT[vG̗5*^b&=8a4fTT#yPO4Fy#WR> 2Pg7?nVp_f;T݌0a{If#BG -+b5^,ylT̋YtxY(#'|l!Kk ?QIJ]Kx]5j F' Ҁ+Ag't,;0=S&1N?E{8"3wnY`gkuvm1 Gz{D;A (V;aJ-c-3yɫ Nx" o&B43B Y*Y,G} &TH&#`>!aC?{I?áE< ۲ 7M 2znOעÖa+mת(De? G,a9x 3SV:.?K*4J@l1oClݭ,+pGhy#!Ugp|pAOANj0p6!lR8ӓlv}ˈnԘieT_$4bC3#:H4  VRLID 5D&͘900[`Ya*fzn*]<(v_iv9xJ읜UoJ~ʋ#W}1d<&iԀ/<(g c5;OuQ&wSc>"?uAOݽ]"YSq1]^LqJh#Q^!I~I.1kmP@Nu jG'V,6T-9E>?P@(n,\ Or HވIS:G`l ;):c".fʳI9F(hCT6}ٮ~(H˂ލiyݴn&4P;̏ lq:ਡ]LR1sS[l^?i֔ %toB{|* giu s2aI3;-Ԝ/9oV؄HH (<7I+DO3E:Էv] ?/@ @rKV|ՎHq#Y 60G5Po/9mʵV~*Ϡʠ =F?%Yed.|&"+]@hTzc3w4Z&g{Qu0bwlPZ}M}Q2i5?A\O=mVŝ\8W+29 =/V-'EDE@.]><˄_TBE❏[=ਯVBqYm-jvfА\2)B²gB̑Cޗ5 ٰP=X͛oL.&4~8#4سUU|hTy۩XЃӨ@FFra rd;sU5@ʿ[0$y(Pд`pKGLEg |8d>vo2Ors2D:)K&wZG>v@9Qj=PejŮo Qyw]}p,cܥ[|O\Afk/HO,8{d6n4 /z57:&"Nv< H$aȀ37]Eb[ێ-J wâie8Þ+Z]EJl2"`B:C-be.)7@h ]K{2kBϤ7sE|.B6lHOYc٧S/jFoKpCmvVsEi  ndy z#x 1vyNWD#;JڀbXayEC/T%=C9C)Z<'I +5S͉V1L!|U^ 㚇1H Py6ӿj$%܏ei,# Ɣ J~%$ .u,946=C2Uk^'S=.XB!2<ܰ{EMb)]ف=(O0eCzr.'79%j%PRAsIL#T1cБ/d 6ggT|N֋me2ۛTXG5XT** )¡$&ҬԨثe*fR[:*{W NpuhvS;&>5)zg>iZz%D"ZjPK['dq?zSB9=F;;1H E/1ppbN:^!kd s%)q?Jgy&L5h/'`XE;TNJEy<⺛lw 䍦{vo:7ix+_a1tm[2&צ8H ?lޤ&55LjM&Q Ń,{44D ijz$-{c%tK,nI0rgZ9!dAD8! fz˖1=DHNy*|-Х8/4cvS&[w @b?'CC= *A|P"GZM7A.*E{t~0oyO.B]ZͥG LpiֿY\P[z6mz70J[OZtg^ʌ4Pʻ>o5@Ni 2yW$$\5c1^p+@t2GPṮQU<'Mv>CtRɰA$Lt[/t- `i_> ֥~@z;G/syeRn_yG9wq-(T8Rp9t^Am" ]J*G[T-9O=;-K7#" Akd7,TL.!lR#-϶_f+^.HRQ ^&N9gvK*h @EQ3&aF6G~0>Hμ#Gl? &ƜzJZG-?UTa# ꮟ&nk}(Ջb-`Ui׆KV.K+DJ2 t6QFĎ@-w4w'Ԡ.NE٨}E`GWS|Xf#ק~'wt>s&m% )":;D;5qDj=`>\**ag,/ B&rƵn(:,TiL%)&}f0u懡D"WI{D#BkP9(5E^-~?/_ZEk˱텚Ep6?\HX<۲8qh;Ќ@׿SYnWL xa3lOum2z+Zc VA`[ 52]sW#GC(Ԁ{(1Lc[ɉ!H }m"WXYXMB!70w༈О'#y^<54wn8"|i6-練GXOעJzP!yz=7f︶G*Ĩx$YT*^ZÑKfޯoV /po.HYjeω/2/Vy#F,T{њtjOU`ă۫/(ʹ;=ƨ<̳SJlh8G >ZMK7y'J ^m_ОyQMdz<5\4pM8vZ-ADRDe"apK;_{DMgďƨ6ZisiUWQN+I38iF ĸRpm62=8M,!-,`[„z_8$?OesAeUU(˰ tr{HKYK8o4r{\|@ܶ(Nx/꽷'y+P鷧"_$:]+~3gq0#=O9HE(FKFOIϓ28 vА0Rþ L3ev)J6S!Nw#*vRBUbg65$a' AW* lj0lZP{˿)"܀d sirͲM~tP.i'єdjxrጱ5ܼ\N93?Vڭ.A[ oM\) {[-#LE=NfڸˈYF- |yMih2}V_iofVab!u~@?_,%)T*=|Pӎꭽ]D*aPzF9ݟㅲ 4͐>rC 3C]&r ƵLOnEgE%/ ݄-p[h-AQ  2Arv:ݼXh6/NC=ҟC UE%&`u){ӷ?xѾS;qQ@n3VD4SpN }ɾVF2&AAqѯ!W u {GD n*}p ξئXu<^Hk`B7]$ʫQMfƖ)JeyTCf P +"gob%7g$T{_] 9 ы[!i!"PD6i0)"[9XK rCR` "bVˏQOO:eJEG^km\)w}E%P^yBz~WSR_#Y@7glBStE]U X2{NƓXtF1dT#-ܻ+6>4;q36FL۩3^Bԩ}2g} (G1Tep"݋}a35줩w_`ذmxcGX| .1D0XN Oq*lTD8`J4{u2NpUfcu"ݙ^&]p4jE'G[#I=Fg뗨שs 7QdϽ.\Lq6NLCai#ݹ*ޞ99 n]<$ʻ2RW{ ,0.WOۜVlN_`+Gj1 x.A{63dt&3|_xF j+@'8o0&HY!/jX,'xwѸtjܔ_%f@,_%_?["V1$+uu3E)b[H9?y$[G1nWHN˕g#O. =)(-@ U#M=|ǧfr )ЗVqw*ܴsѺ5W"]P!4IG؆PvۮD?3o-a]~(O3[Ȣkbޖ/RV]eNmP WIfR'vۃp#!\r{.@z&(_k/dINX'W7X˜o2kȵVJi RXiRphe$ңt!Y'(Dצ >1rQrM&-̌e-`b0=XQBn;d2lM܃'qw 6US"/H{}$f3z;Hb20꿩j&P95g3 0E$5D&46iZ;6DUtsR+%,ӑ'33g[j\SYgkq2ZMZuN4?EkdT5"u*fdIJ~Ԛe.Xsvk}`IZaa4⦞YuLc"'rp?osJ^@R}eduK!?v=R^ɲQN2=ɰS4<η1OR ov.zF@/n}X-9 'ay7ܵyQ!hm&‹䤚l5n]tбסdt혔=A.aMNC{o<-9 F=-pVvwc&F䋸27쎁'>O#n'A;2IG`OV ?8WvICd§-MHb6 H]4PᑐhW(2yorqG<؎Sݽ:=X7񚋃:_eZ8hN#,u4J΍jU/c?v9 s3[A!fb?[9)0+&/Ï#YaqqEIv6ST ]Mra7f94R ٜ\۪f7޺J9 QjCPҖTrz1vb71P=12Up2 [ۦs69L~vbK@/XGTkv0ATNZt!/fO\28p4u؁˒O]u.\/xm\˽X'?ds-_DlQA_I1tvFv3x,_ױ>|þ*^z &Y!ENxd.}߳@"4z5gvƒzNMh0O9\42EF)xߕZENc]q1צR f;@ &Fˀ^9KŅ?H̷IC.vÜ6P 4$~]GgQOv<&mI$jW^,&;[O` +gS 0q,>‡ GXM ͮ K;񪸐ζ4g*ؼSXD<rT8g ӏY8sz{^(R XCvVҧZ_,#!<g0y|anh6$6NZprfY{,XNR錐0ZM>C :I.ļ&:roq>M-ͧSYR>vluSXbbdbkp؀m2$+tzg+EgX@O*/1$/l{hQr%,5nẉj|2BviSvVaPQEK/l`U56#Q{d(tCq^N87Of"̎nA_4IY3z݇.wl̸a0S"s!$ 38Sxb`Y,\у@pi.Q CP)łǍݒ寴BNbrOH$UuUj+%G1Ӯ\"˜nY-=}s광 [ X|no]cf"MF %) ybTH30@w>S39Mٛ5mG0"Ʀ`VHݭ{}j!ӖϦ܁RIYJ /fɛHlU,? 3cgjѷf- cwkX vluHr,?ԜTkmt;Cص9BHII]sNZ}0bD{N 9!G|?sxgn%cއݚqW4-MHziO4 < .>&1%h2d~-8% Pء'˨2`c8u{e~j }ӿ>HGQW61 ICc_B\W)ٛrl1#\I1&4VF  3%Ɠ2ڕVPTgEfaŎJO_32*qk,0Hڳ?- #hI\:.!\r6F*)th'):AOXܑpG?5ļ_0 b۬_XXWQ߱iܶV!ʲ{/AU8C^4.5.4H.kL*(NbK`k_u11 -ӲsOË"р>פDԖ ļ(F?Ε =CUC7_|AǨtԟX_f*e &e& Zd[F)?d}* zpq/,o=f,0zH!+']a]( Zc7BNVݦ{ElŽ3vL\beeP`ry7+ $+ PKuIQr!x4|moP%$M}tZl>/d݊gז]`r2Ih>>,3I8P1<..9E Ջ}zC9^` ]KKVvn.pp{p! $8?(ǩ?]Lk|7&U#O =5g䑐vh79:m.]T^5o%mgܜ>t?)JE#;e,gA`?% }6mVt[+Vc r9F$VVeސ%DGAH22cpW;TW}1 DXypax ZNo9$DDf>zY!fR4͐4yޏ4H YB?fl=6(D~OkR,t+:k ,Q=CAAkD-# PL iݪ4LcV28JCI=emV5rY3k[5'.ԐJҳ&AT.DwЇ)g݇Xux' /zܱ/l{ pа,h0 $A:M}P)0vd6%sZ])Q'ks4؎8J ItÓ6jTہSW^6;I&L*qXHE?׷M2Qx]X)[bHkbQ9pvJC&bdi <<x(ձC1fH|`LCF?S;6(noZn/4EIZ6_]hTeJG8JTw.@'QX*f%Hh5՘dB$̐?D\'als3NJŻ/+0'^`dq:3G/fR[HBsnGie['P^̧>`g*d/vΎ*PẀqn} pή(֭"x[_@ɃM8u=OўLiY%b_䨵KE}B:-QAr͒*EF5}1rm =pB/]ՂT{_z[pNk y 2*OqC䲇,Z|xGch-K0bY<0~_TK,<%T @n;U %Hよq8Y+M+W20L>n_ ڇ$x\\2jHk%Vc<5C&mq/߽s(T2lPM.t FT|_v#f8M%:)O(}ĎTSK%Er9Ծم"@ 'QB=n!!o`D:L>2z}9ʋqsI28ʩCl}lal$Y8pفO]mQRi3YFAq;kGh3t]^Nl %;Ǖe{j=ǓPBO_7T2F T5ঘ6Iga$Ѡv ؖg7_g-˫$P-ЋMνH@\7tRo&AAJ G'[ѽ huXsD(rt\l^Ei0J5 KvE8Yo$;rGDn BdDG)F 髽*8R:%x"Q;;,a7 En;_@9U|ERO[?_Qu+IXz% Gete>$g1g=w}:,LV4nXaQ]4ơu'1'9%L# H-;uz] ]{z?Ixe 0 Ù~ݺ'=Რ;3.mJagFJ$%nլNOipPDxOF Y\`}%Nx^öI@Z\#[k,i`C3څ|():wV5*D١9f#EcJwIl?WY})G.5xAk@@uyeC DCoo"KnE[OStM`(0^5)ѸG (KxGwmE`COzѓw`UϩVN #t(Q Ğ>9tna% G̢{-+rɠ|<nn(n4D$_=KLS?V!wlcGFp?U.Sz_}.,;{LVLkFm˞p#׿\]efzay2x `4Rկyx.$:_=9Tg؝hoΡGJI]: >6 p i;9ώCU29 s|S@.EJS?Q0}]wW.OwӐMUfXpµO l]1w| +JC.:M ,˾RfSsAUPk;R|cȍ0"`g/F#Z=Oqԕ ŷ猌 ɔ@&=4<\dwa P$9A dK,ZÏFGg(^y 9=E\KT7ݦ"| K>n9%7՗C9B=G#_#!t8qs-HhY"cq?'ԛ\]Nk dPӮ_({OC 'ʠ>C&UD&}c ՠS^f#=#k5EC9r F, ^˛GœmcS:ގC-MI` '~u?\f1Sx%wCϧ%-yL/^% G:!;Aê?bEFh9Fe-þLuCD3{5AjE?5@PCB9j(q,Z' 5/P&!u)O/xlY'_%=sG35aoQ=,Jp3_@HHs2Gb;%OvEJݞ$ȥx>IQ,=m;9gIh>\r{viBAXu2H^'f" [3)nF<ܭϝ l~?7?WPrrwj,Bi3Zim%ԡỏ;.3}<9`<~Z:W Јt2aSfhybnЉ{ %Z3~%g9ԑ#`c(a켿@D'a퀟"QL[!1ۧ넫-bOXb*xLY,{e ݥ_f>d(ڨ^w6:iy ]!0B/yIbnF{v\hCbQ9_-qRď)NL F^'Q~uZb}XtRz(n}Y湷Ye#i3LDlx ׁz8p6SMhJbzJy q˦Gg*!dl$ow'wPKc%J],^+xx(>l8N'>>H*bB5,,7{ Ni/мPB kM )mm .pzN>6fe?Kd@^&ܞ kv71t SwfI G# SpCj":zKNo:rNcfb!ثJ֓R+?q@+X ZĻ: Q\>>›Z(Qӷ zc/?qRON4gGQG3TX(tK!{jQKˏNBը~9]," qSB rXF:͌ݶkƃk@&Rjul1yO&P罨&δdJ߰Y[qL2]N:s獭,0$bK Dx2ۧ{߭#u7dp$*zVS3F~^Xqg"\A>g(1r#ܼo%/#6.8VGl9iW$% 3n]*fEE#ۋ&n%gF xY6OmA2Ǽ+瑷qܛ7&`}X7S· Rﹲ'|x&$5yDʼnfas쟀,Lc:B3M*HxS ${NR/9" }AMoRՋ4Yy++ &^t.|IÍ<ٹb tZp\ Q"?xP*._vXBhhmY$ dcl{ e y{>g\~6}g^Ԁ $(@ϥsQ^o2lIZ3 mzVEkY51_eέoA0g /5f+E7dO@K*p05$~ǁQ$We$ #̈́y,D0ت =ح  ލ@Z~lݳvܲ7k@:u:8,H`r uZ~f8m4VMSw&@c{b۞_l۶m۶db۶mۘ`?^lW}4f1[~+<|:YV3bNjxv`fR|i.CZ %I&5cޡ]W4Ī'B&fF '&-]\ ޣk7*RUp_)EQVW ͅN2#pӊ%find\ym&%Қx-x6J~+$:Q!Hd^?rk# fdJ:}! Н1-`$޶dHZNm F0h$)ekO|z5KfeUgONU^g RaVl,\CjN4=NPpx(U9V&Wt:S*0ȵB˘A{ήIGȁ&+uZNp'Lx8 ?=6Qbdד;W 5XiF淊M' 97nMpifB z}g4y?wG*-S'dlkA#8U@#a$$*:}D/{|Y㶶LNoPz҂4fSCos6a1.L4phGi~"0'^ =pcq 9QMӶ},g+O6Ơ4} N>6oչ?=ޒWV$׻&Cc`Hilr\ɋL>l}9? CeyY08Q2..IA)h<-?k0P6_edlX orFz"J0~8o1p=a |* /'MxN,>:e>( u!1wV)鳫6JΗKe#k:H:֘ ڴ.ze.wW͈87 ӴPxnyZg-K\YcLVda~@ Ȓ&GBɾɩDF1USyowqR+PS|r3Ea׆7^Sm5-hGI|}[N#sⳔ H pY9z?s8^ 9_׵O#O vXHD8!X]0Y'b!W~(κgb|)Ua?C0F!uo̮maA8}&ʵ7\[OG= "!&`nJ$~j8>)[v葢L}XqzԖ`Zd$eLjR(W>WE.*w7w?O@ yc=mz"DIZ&He#z aX E#*gtBnR!yQ\_ez[WB%x?8GQQO5LZ^?~tPȻ9*;wrm?k֐k:/ ʕiWkӮ{a~j\&)OJT3kHp]We k PRj /S듼lQ*'6p\ <1z FA*FY/tia &;*TU]#Xی>7%&$/!ksz~\^3-X^F;L":hA#4[R⃔He!x- ~TReӉF6* {[Qf{N75V+I6kBSqw' L:&dUCh%l q/-HۅؾvW^ Emg`kR[+*=gMe O3+_9/HQP7ZۣF$0*U]dA9&+OEEZ(]qґņ Hb ^,8ATe0"v>{Z?ny'|:y=D`sU W'dP߸k y9B+9tz@=9_ˑCSwwq-1KI9Zo=KR̢ ?>nŋ*gFTí׈P2• Vgjk+?qo >Ji k \=eJ'@% k/`pF=0xk3=cerN;ȦAXًKH/LaU#$NH׾k؟fG5Tn>$Fz1A{C_ѾY'x)N~J*0ueB?=|2n!zv^{Iwfjq$c/>f)`*P.ZldkYB{׼03n&Ný(6M B=`0,9b5؃86yNzζjCa$`3^| QrϞ9<( Fa%m:y7lnzĎD r+WֆHm]*,EaFۂXƶgX xΏ)rE)Q=`Iĥ&vQu&?RI<Ŗ%.,ڠG2m%Mzlo!8yx|63o*JfϨ7 Dy*֏J m3YW T!&ʷb0J±S?*hj|E6_!WS1ǃrc}d7<l׊?'x" i+J7EDэ,㞎MY[,I:En{ m=cq'`Gf۪>5YR;l<^s5Ri԰S9OcNvӮXyt8fjS؋3(fs͆BA Zd;_0.ˌW:@$m\L=D|@sV x!yIc NP pni9ˈ+oQURBW0s`f9[jNbW*FjzL6333ϳ^8Õ.0”">Xؓ1L~AGk޻>O~gtZ t}+4u@><yEYYZOF&tB$]vWޣ ڟهΝAoE': ɍ5RK gƣ[DO1`s3>h^.x]gzkyprR|hKz_R bx9n!jM~6V#F~6i"}HGױ[>Ʀ55hk0C64XgA}*\<[W-#BHd 5h}mi AqH;_]`tV(g|p[ >hتAsJ'haR1a:6nG8#\~)Xh-'cBhM ?!C ,)8" -$!лNpq6 Ea'PǾYLW!zD_/amU1+yfe}P9S;=M DX>yg:MmYk9\'eA>YDԊOc7hed Ջb}90 i5y|rQ`yq2(ŕHQXGn}z Iǹ#tKɾa쫽'|y T|1]s$I&C]ӿq,ap>2 0WqvT(vh"𪁲6gXjo+CH_:gOp"ERX[.`,^>k6K?]C(]4-ƥ|̘y(9?%hמ4qw0'vTj=ƒ}%]9_=J m2[80x(T n N[}`Ye*ӕYdR4sJ?(+?E 0*uK9̨AMwxබ:-VxT^=x=u',,t@bD`Xk,GLm al sRb0{ 8mH$K l']Yj''ZwǔT l&5{ۀt=2X24cĪBl+wFIL,I: 3W/iZY"TʸgN:K(wB!,wF\o Rd%y!5gwNԨ^sd6nOѝtY9(EgG$B(l 9Ƙ!g)3#SXV^Lq_0VzEsxpNP>[ 9 G.k2#e,ptrv? iafG=b]猐A4ƀS,f!5n|S.UܰmFQinC mȵ͎0s%b%vO*\P < |+%dAG:0s}LVY9TI WG^j7x5=K8\LBmQͲ n` aͥUGEx`6= .J ]p5C`C+1[L72*DrI3=Yzu|R)7Q3!@rTwvFȂΨqu[,J\>'fTm qNx/I JrD2mr(z GC1Ȗw2cz\[r?ς5mM0YJ3Y-<+=P$B PUczM*AMQz(U ]bJH5,+W}V~!7ê $N؀ϪÏ6M:g֞k` )ܚ[z+ڪK'(qA=^7 `] 3:!Y۸v,PbRJ*`sdx>[6LT-Avu~)aCޝjԌc  T 7<ԛ: A .ӑB' t kn-DlsqL B1rgDcJ׍G6ߤwKmFk,`4Okh֭ZeMb1u5U|EStwYϬ(M tJ0wkN5dK?%Xn@:dZj)wٸAd;кCI9>!COA}4]:[/xbf[L=Ec1ⳅ9.-j R[Ҁs8߸! v0<@z"Sk8ȷLe^4{{#;EAҝ uˌ2g-Z|"6iɠђ"ҝHq̘?>e/ W;)rn|hwsٜ) kVw87SƆ!^?m_Q{55KvYOl ?fb3Φ, !N®pQ9Ŧb%z )A ^o48>̈́7+b8Fu&sdXȏ"DYIp‡,$&z00ĤZqwő] vͼ,6bL^]QzyArQ n5 rv))e:Qe1H!®caonIZl"̰ VsֿJ=H#Z2Iuu| SKBd/MMKt됔&}Ԏ9BFl_6lB'e1դKqW/@ tEs}) %h%+v9 N/*ۼa->&M3 > {BPȊA0+^kITbX&{ԭ,ov#J Vꬿ޴J:aP-[h϶du]H|!rtQjC}=KFK~h"DxqÝJU y//{>F rfht2XM]ހ<-vE$r2:"뫠*LJfWpzU蠤çKX'܇pj0&0 /<";g,h8U+L*v2lk+;Ci˄9udNH96=oQ>?}w1ZCj$`i Ms>H?Q$62+sk˗ŖrrA7uǍ\U_‰Yk/ӎ*xO%G9v/D!̂xNzz7#)tVq7=?%~2!DoZp^~S6&20ST]ٞz%QDPHcM/xlִW7&@YkΉ(pYk]L.+\&][W~TRK~2ump@qDxi RbUQWGAA(堸.?OegmnZhu͆9};@OS{bo_͹?m9Ƙri97ˊ'#lOǫsn*ߕieJU4G? .D@:v_a0*2B-%V9dA. tv>a}ffSg4g~XOkuNE_ک,U>-O-Nu.\D]cb}(Ϥ},Nð+|`1Va|jciH(M&MSk1Stn==(ՠ,Nv18"05$$~^'(w`;^<ُ}45ЅV cͼ!N^IÑd5 eNOPwaq\BcpL U0,uC\}`DESR: jvx.5j0NשJcVgYM^;YۓoE_RhCD ?QyYqb_ uILݮ?d'Xx3}%Ysw_FҌ0AJ4`+v8=d i&en0W9ٹۑVi+ݲv,!Wג;-m¹ S ᖯ7.~׿& ?O?~xt0#JkYF2qWV O^oEm@ә-vGQPubZȚ3Q&cVp+kb'\Otc'Ӭ žZaM9LC%F8RUآ`il-#clCʗ/f_%$uCR-Kx2|fN)ks/207 %o˧ʖ $M?,!Iw*@@Uj&aQ=S]o)ނ ¶OzCj^Xݎ~9zzf#`>*#Ѓ_ν(G;^ 1P ATDHʡ' ;FP$(W|$=1Pʯ$Pfbɹ"\wyԖ/MLkM:n4ez9ق{-TaëXwVJM̈dL}>G̔[{~2jM ݢS tcTD!d4+ժs<Wdw0Lٗ^ i@Iq?*C w`"Uef$ RX6$P3J&6sՃ$Vժ'jlNTsq|pr-#rƮun_n<[Hpzr|qhAa}29|U>Cв(0o_90[ȔG1p*Pꯟv$xh|(ctɨ*x>D]ɓ\ƣXjL[UJ(#3zhn '3k%VzZ4`ɺVl"Jr 4Y^qqqu_Zj|0T`M:K3!,P2hp##jВNe鮳輋J7rsUH?eg)#GT kCf=lbէw~V\e4N Sv$L֢^-ZN lSF\4>ǍcԙJÞpР I=L;'KZv=t=l“, pw-6im T@;l498 ( p?VQh+'v~ds\8:U8rQSb3fE*+ cA:D u+NCVW>#ӱsDYeK_g%'hv62'aŘ.OΈSuMH 06R ={,m:?kB;c?!E)|!Ǯ]9d+V-ܵhS̏˹ӳf1(i夃>d*ȏ2 Z B>"l7ï[ovjRy?~U]*M'V/MX3b.۸9љ" B3u5AsvX!R7U4yR j*ڭ L ` !*@ 9FGHU~f1jy#Ab.k Jqȴ l8,tFD2cLTE=y6p`~#mR?0Z;Bz-QHETJ*ɉ͒iƲ4d~k"p|@{s1 xR ʚ%Ys`e(!;D8AC= \d%o< 671u_4ubJƑ*W4 u?^A~}@n 48"B*D&oXD k7JY5Ja#f".HFޠ& YB ޼6C%Ifi?md%SFTc*B@AAA_XI Qp]nwJZOg1+&1.AemT2w4N]52ۈ Z/c]!IfɅ-@ liNUҥ#G=6u֦ <Qㆼ8qɩx<BN}\i c@WǘB$PAӗsH!bbm@'֙bl#Npu1ܘ=Dt&<퇶4wY>/4Mž)߂祘$Q\Vz4^^Af-J@Enw/]V5okTv+rqfJr]4.(qZu:wk -o݀Z0􏎫8A\HrG)<3<̍J[0]*R"(|;~7ρ@e`͗YG$[%{i؅Lmht"ܬզ49 M,ɸ3dF#J!j[=<"DW~=rhΑ3l$'DOc;иJQ& >ym#OYwt$KȯGC;io}-Ry`uzf'ϚnJ AHHa{^y1|xx ^R'dj!ZTt}li:P(OϰWL/5w?xcUϣ$̞*"ٖok}_eC|8D̼JY\|ˤݩѸșQi^$l+Vڜ@apo=%$8Ӓ{M+ڡȥnսB`&7?GƊwءdAm}Zt/sDɥxLaTS]xbб =QH!%`xo#kGg;G+zIendstream endobj 4 0 obj<>endobj 5 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]endobj 6 0 obj<>stream xc@/회m{2&^٭lM5a&]mdO}c(ITEL FV&>ЙQ IDsōA@>& 4Xyyy(?u=,,AuMZzz#0Χ=upڃ>!U@0e4R )=jbke 2ڻi΀O??0}:!08M>Հ@X G`p6}7u5ǁOg?A>%>y`J. Sg+GӪ 4c p04s0u'X|rAV.0̬\m=?m9:[ W+{ 0v6||b_O@.@[s&VOOVtfs:+A4 f393*3NJ?P_q{kdiwſ_ux3rٸy\<nV? g+g, 7u0gUAf? +'Wgl,\e>Gv-4E8_4a{ZJ'ˊ(k-aaSbSĵ ' zf#kaGL.->|dyhGYahA&U]O`` ]-S;Gu&yNrvҴ5A43;~aFN>ln~q" - |or*\+d<ɦ)f F?iTUp?:C# #%A! bd#E/ d.t9}he)eLP}[-kV{eKARhq%Rˊ~d!20VyײU*KG(K_gLW~{vfxw ыv+\52 VO{'3O3$z8g89VW]s񠟖aSh20?|]Gkn)%G0QpN-Q|:Ӝ-?,+hi!!;sX>rIy % eo#.>=BFl&f73T-~ SZT [cQ;uF⒑z:EB.1#>+hep֪/20q!eXI@DWftZDx:@)n:ݽDP/cϺM]+8AT48%㑠\ļ hlBz 3YACʃ K$y2_qD߯' CYGۍ H\ntwqNK+qM(# 00LKtpǕ_+)脆Fh%y2u#/*f.oK8P>AZ[~|y|.m q3`at Ӟ~HlbGȜnC ݥMG%cHS[OApH&h([dg>%̓ԇ*p1G3u7|foi"eS};T:GzQJ̓MYaךh&Ed8 M)#ȋbՇ-fYhQh8/ڭt=cIsygdxGj}Ep݀R~h'_iC#7+ȪT*fueE!ʣ&cAh^5(.P)1}<ܯmɋg]]  C*ɽL'ԥi~nq:?4 ԘmIb"R- 2=QܨnNT -p;KF(D&a>8~~Yl3Xʧ=ϜtOG@iZ;g~C= s5ؕ͌ Fp):.ju 8p,c[%iOy Z,hf^ai|ܤh`%{%ZAf#d+Qjk!d3sAڐmk_z a[йթ( Y;V 㽼]!S$P]_/6p8{/߇\ E P= T#`=BCK"}{ԫIv[vxPOkD>L$zLi{Tt6,!*R$H&o;j07#{| 9Xskp.} Ǹr2Y lHRoϵX`uA7Ea-^Z(ݐ[v5 & ݕ%$, ) 6lۗj(t׋Y='Pz^ybFWD $'`hJz]d>ʱ\# P8Q7t% /R*Ħ7\G=B$))*큭d~_݇H+kACgG"$:􍳸r{2P@mHrۗYYmKk,N/z|nb,kA3k@1htSWc1B֛n+VlK<`CGVמ1«1*-PDcT8x 㖱$ܘPJ:nc{.ӐK}̹>ԏs@Kz FìvAu.2y"oOp٭1qi7lo2hD望a6tSa0H̜r)%7w®}椮L=]ѥ&8vp(v9$Rz.i&N6 06WצTq խCxu@6aŌk$nT,A~B d:1X7/UA0 _F7#^Ap`f^W/y+S PQ >#cc$O Qj4¡'4/Q9fY= /KSO귄Q&Dd`QިաnrwD:%V Xk,˴R (E^V;#{=9\"FB谠kdb!|KY^R$˗H XTj\y'/  %]pqntdyOU`y{KP)n4EOS[VOmoFk(Na86|-LR %H)zOP Rj3[YJ,^e50;:{yU)0h,cYVҼxuZ@Zī~ %"ݰҾj$uZm]Dì"}`MN?YJ0#<փ2^&AV,0j6'iw, =m;~8οm|@> ѵz2JiA;J>Äz2?z;Cmj<#uVi!AM C!'^Kۍ+y`o0p76V {p@N|DNZte|0 ؓ'ȱ#kj 9[gW|oWMMlKfÂB&}]ϱ ̀ Lz2ogB )k8ʮ:U3 ӯrt&mh>q>ڤjqJ5/X.NZDv2Lթ] 2r`^ר,yxȟ f(jRDbZl w9#4M@'3At\_CV'R`\c{ Zka$RpL\xyʢبLF aUvmhSFk@O ptq4Uxs=DcHm$ȜQ)fx Ae)^:mZE45'S;H3)T^gV5xt]m!"B5hII#kBVY:,6&_fcWšx8r+,5\D3W7\fQJ?s%C8jv~'DnK n6L[%H 2*&Bif%+BWt2Sc AU ,j[0j?šj0K(+;( >ԈFK4Mvtm2%mfF9lpH Q>N)q >ip _g2a_:Zlj| 58MaϊÒ/E )x2N8Ma,}F2܁JxRm>yāo}f;:nP/U|}dٯ .+ߴSHY =L;Z%>/eJG(@'!V] )/00Un3"Pxl.3$yމg ]d&U 4]J+/oAMq9E-o|\Ocr/4 ?@X` ڃ7IT)}/L!WF1|rLMf:LZJOֹ4TУr9!1yme|&Mmĵsbg=jTLeu+]f@b,xmQ_W;^=I8Yg+e6a\eC;%4V@݌4/G>U{m+'tCS]`&ڤ&Ym5zlړL(U)!`N)Bo/1ū{EUݓS8轢] >=yIgvdck$ EH ,^ՆJ4QpK/Wt|э&jOi(I[%yhBVV{Q[>8-EBxLR 87f#$d xqmRj~7l~I߅tceoT8hC[ڌu8d%0_tXU~c 0P8Ǒ^Ͼf#nA88JM: y6P-3N 6#Sk7=eRSPQ| %݊l;Ru3>ژBp/|jY;OT]៮ T!S`5#ʺUH -h)#ۓ.3l?s/!M.*2,RO,n_zQ ',pIA&yA5o&%M`4\׈Z27썹sF(Ԩz֮->M֥C9Z""@qD}k##{=8 Y]qAnQc3D3?Zjhdfv|Q)'lH<'!hVVJIv}%iޏwd\IFJ3ש%)L-W<%|cfDQQɐAaw28~;DOC"lpz ϷV[^C :mLmҩlgL+,G s3P_ [8ԛ c&%\"wnWw}y<-%[.G|-.3T)VyӉdF #Kgw6z1*0>ҵ85QB4 "G5[[?mԀ:tԝ/u"sULm/G/7 Q{yBMJKY^8ybX6Bv,켽`Ki` wAmhSDaqCy&OO| '3j ˺& y9ۜrbyYavlg*Љ  r$,/qXc+' n?:TDEar@0=7_αwDWANgn-6 o#"oG坅glqhz%Ӻ'76fgx8籧/G%JcZX('pAWb)d8~O4kO=Ф;7,]ebv@o Q3_{h)K(fTD{SC6D 4-Ob:6|sQ<):4 [ #mү#67 :PqA \rPV[tD`CϼҦ0.vMS)]m gwjqnIF &&Ľ= E֐fX0kK儓9fT⫇>Yj xkl]Y2 olv+f tAhԉfF4>U3Ge\?7l{]Ǜg4*6Ml [@_ˍ6 0[*&쟗+;ETZ/>:u:AϺW Z;--V̈7jݰ[`Cy\qu9&x~{@:(łZvs'vnaur#~vESqu߇[R!|>7pn3vza< dg(I841:GY~#ˑ>rJUުZ>5n%vѹr+D:jZz*PY14H7xi}U֙4¼mQyn nllC:IsC/@3[}{]9b&}@LJ26/2||XY k-OLlJbM玆Q=Ӂ<.,=pƩ1f¾tNArؔT67g 4uFF_Z9#]IݬoAC5)ȗ 8s[?~:W범 M$0;Ny}UkZNg NЍ߮zImuRZ6bh3j{_D+ 19vhŀnѽ(@&bs.g7Y0$`uikbO>P{*QfϾf tڄ+clD1ܗT?C|{x%aZ9eTqWK@w ,}+*3.;ݚd.g}diX%GoσIN hY5@iuh,)C0YVv\ /^IӪ0 DŽے֪.CwU&{Oݪ Ͱ|,@ɊP4uy做N<"W_?`dۤg8Hс16#f%_@|R@)@3~$&:7(C凄WQ4s#썏 $1^`@c/)z@Xg\Im!9LEڂ^ 1DCZ|<7#32H%wW~G__J~7$[lr?lEeؿhA3{cz\>~Q*p,L6 F=p(ìʁ Z ~8xIte~8 ~KSre҉[5u;'rVz0Ps˯eF)WrkvzX(+]H ^!ewScjF&4X4ρ_t Hf pFlCL'?Y_Q7Ϟ45jf3cZ/7G.XGX:3g%?Ko]H{>`|_xĠHFdBk@sgXܚ$̈uoAIz>#g@o8*,- >35SK01> 7ύ qHmBe7ep;.nxa Ƌe&Hsd8< [A(h(dNwc>b䎛&Je܄C@KoQDa&.B=AH_ uWzfx,}UWUyZ#=l:B붢5/WuaX$vIh]!6]~D\^]*nszFlQVZ"ٌ§s?Rƅu.x8;H)T-YvCm)%d Š5,yףMJv5+I 7->M܅?)cԣNVC?_5E^ 6v|M.c'@ >`h kTd`M޹UCjDytjX%]LnGvʒkΡH*BfOlzUa _"HRWpmuvtG# Il,n["5Q<aQ#RT61o+ xާY`5>iPB*o1lnp:}3C(#?uMMhQ/;G -u^}׽h~1[unb fKmMt͉w B''.ԓ[$#i]]2E\ -ߢ<\umşYG<#jJ g/-!_d Ҙϸ@eY` _97ΚY@Vz<~:ljA;#νbIC | .hӖ?a6@9Y>ӏ4K{D{eގmOsr@U~D-;ajoUߋ s/^4Ѕ^/?M qF!iNgd,A ¯s :xAPv7Ka$iJg?R9 `M_} a)֢.t"o_M0لJd 6ZoܳDAryr"+s$f"#eKKs r^џkau}Ÿ |n-BN%-͡[ͯRoOo~Fpw TU˸a`*l5)P.)H+c?wHOǯ2|Ut;^}P#lUy`Ea_vأ{WsF$H0;q!yN 6? kG9w-x{sѯha'PWI9[. qĈڇ'}rq+W4{\{znsfE]LycYt3#+ i9MM}w[3xɤ8ck+ui$K{t`r}0/mi8!٢,اOFXg'TpǪwMmnP̘?@xkKqj@ekLލhocPIl `&K\a\XF L-˅w=ƴV&{rʭ؆8ϙs$՚Y1Tk5&;y@D>5n|%[E‹7aZ܎ؕQFJNyKIWypX-EAűҡj**h%BΥ5L"0:tlh$\A%IYٛ?+AyN$~$EUOnbx1-:_y"FWٸCY}K) 'J= u#WKd֗Tzt1{15j2IiaFH'+E\~dSI!;667oX?h-vQ1~mNy1H`KT8.~˯5 u=.DԩW#ʽlB$"b!΃B sLB, 0 oVkdYsy^L/!:1䯌A,,bp:(Fȃ.IX39fhTyi4A:d_V'kEy\8>[/>ȁoEn*=~~,j,7 IѢtZ5I ogçEY /) 7!8I1CY2!ßn3"Y@+9Hh Т˂o_NW׋*`Ч-͙W?i;$i;I Bb͍7[m؍rt %"~s'wp͔v|9ÀLvNUbhNw%+Gl)38r*m@evJ;׺si[ޚ $XW{fu;ߋO0 [-s?dԪՕɡ&U8>TRLh9Q|-*i'_~ntA/{`Q_#S.B.:ܖ83?JaÞ~ȴgBҵ+JJ"G-_9rʛJw6G ={ NCD<ӇQD$묕p4$yq#g?- ۀ8\wZ܆ HIR9Ts| P.ޮRR nvُ[/饨SGJ5J*d: dUYg]wu}ՈKw]K⽑^itzj--+eoj^<{Bhk~u>녻zhvMm@vV89jDŽa]]s0O&H٫b$&ɗ'v+/hr$pWOrko\ejb'ɜ no}`*)KÄ6zj԰?95FsB#~Ptvm4.[ņ؉9-tK8D,˶ 7`.=G2rma!S`c)JC1Kd>dKOp}R%@XTa8O, Ɖbe\9+BL_y,p<^Wp֬޼2P{xtI3/#T?J34necS-65t`lGÈ4ld,P5Jmώ!T3ע: G&&ru-9b?װʻS[6|QrPd+-,vTsQ?DiH<\c,nj wofWL9E/Fҥ(oza(m'G4`^Ѐ'NƱ?Ƿ2L{:I[aph9PO7NѨ4l'AdKd*|H}T?Q^Rv][oY|um^@?_Vzb%-B w;G"TЧ~ݨ҆sbF.G~aςSU8GPYp![& f219w~*AZ߬c Ĝ"}Ω 0˱k.E܀A۶A:ӿP]z)r&xm;1a p8k1E,K9soR! urTԼlY+Gpu_3}Jΐ0 [8v0uw^yot4f{~N񃩑\*A؞Koe<;17UNΞgalaӆ,Pw')⟻8`s-N .Oy&l W6AzDf0k3Tc@|3͡ǿ*4;R*tPnG-Yb:}s(W܊ʥǦeQlQ3|t?3"T"$yL0B7I"q۱S1`cB!*]y DZvr Q VDogH^PA.5D$"5{*𐬧9UQSUEm4_4s-XLW3'P3 }!؏x-[%PYjqf^!"P+m֎̭XjFM )ы @j6ōxOTQc Đg"p1X~>$ő{ߠrp*ْ__xƨvb+N:gaogNjϨ,Gɸ2jMhI#UhTEsmNaشzC˖4zG`l6 `]R!}%RT|=svy-ƠdžX46Iw%n$STMΓDD}ֻ_Ľ cB :hjMc=;[.? 䲔x|VOD<ߣ@(;|I0°mSR, $Y< WO}AnlPn C!d'z %Is%ICQM~ H4(q)Oy;˼"=,Q7:4F,fDz%clEC`$ͭje| Q"۾xFD嶾ez%xow)Aw/[MYB? gTww P=|.,ӹWy'#vqנyZڰŷEWy{׀.tu]5UqM?k'(.I^ew^d}QoSL$ $?NVFds-R"Zb:vEvsE᫆8$/K7o. c2M efՙ?j N];jfPGZzVξbexhS,Un6;=;Jj׊x7R&aLurW | hY2& 0>hE41/<@ÿ6gS\F˚5Rc0v(~ѽ@Xo,'|;!$."YrGA#x rs7*}m}S= 9ɢ|kK A`n )a*0&mU1WS |);yׁ"~b3GrQc.눣r']6͕قhkttz 9|z4:A%PRM$ǜFJ%?2o,zb5ps|{tP(Z[ 4 aRp'P S6i3nE]U,f BON=nk<yzv"E -'W;zل٬#s$S4ua0ۗWr"g.u>c֍uy |FB r3^5Jv܉bC5K} [1q-B\1RO%FưkwwRRSAOۑ.Wm}ȡe(9ݏTVS>A+S2Nm]>ˍL_-t>(">1 /%Nd{xu~m]LG;Wr%?gT5{a54wa@wYzU`N@ /3~;?o!˔ XC'Zκ9Qc8 +^SjF(uQIqs&L~ D:Ty )$!fG.uRJa]! 3[Lg `(U `| fT].(5>ĄH9oLҔ=zQ}ɾO+ -VK&ښbkl؁Ʒ}nyפ~5?-YEg11ϛB#8w?\7#;ӘˈۀQhGɘzMe4E} ~(\[(;>'Acy& irR"0U6ܱ ƒTu+^dƶM#ZX|-OJФSe Fidl.Iv#EnJAfS_u,úݫD”JDioi0'WÜe}ΊGm]f )`2;kp[U~L}I1m.J'И3Lxt a@}tTMڞӥ\MY4rw!|{mѪO ,%`{UDEZr27%Qoq\r(⁘"ͻL':PBึ(O(=WIF۳;uWThM sڏC:اHm%rF| =,B"[M>0t#,A*}Zڋ ~eՋFoFf?4(NcB%VLBg]Zu/$y>פDӟb.:T -N`'S8pvBn\kcs{m8DJw \;SREayXAfPi1`o>s (,_q[%i*y? /^q atwf ] @&NU5{^MT; _FSA8rKG,Vխk]@Oet0N[(Z~4.6F\=V9OP`NFq %z vD 9̩c,…իM -΍{IѢ(uz;TN+aFA{h:܏Ay0՗eJGKj3;+v~D~RAZd+1Ɛ'E lM,B7G4DN9G( hL'IaŞ>w 5vm:YlT]NX^&;~_^H<~8Epxł7\kC€W4!x!xyZ!0gYشuPt"-x.{e׼xҧEQżvvsȳSB^&وrnoQV92&{4P7tPJOzyF~QRXb wMR_=?JQpg#+t\_0^kg_j"n>ҵ9_b.RH7LeH `y񹘿1w-˸"SsؑO,0a'J2;ť-,8ӶK AyoPlw8l0aBMjF2 f\H@i/ke%&; #uֈ!}]PBsDef0AS<9[Z2!~ "'Iu1v(ms]=8mQ3n\`_-|ȑ8wJE±t$Y97*) p<ʿf8G>>55a7lRZb HFP䡥ʷT Y0ig)MG  }(zLNλEh{ fo5Z]wGysN9"Vuo}y(خN(K(Qԫ +GGK:”bm<,%RAh8iC_3In/ k}±٣yjfN aU jJ|nFoN̟FFKQHU1tya/AWU3dbm)Ie$7Y_ҧRB9V +2y(U(|`2>p$?V9%擒l;Qn_TE)ŹpA[iXlU_tj&vOcZud\w=%:ҥ D.涂~oqDzh2H5eӣav/p d~{&eua\|(>#SX:9)M{GR1Mњ=a>r.EQQ}_< Ŗ˝@.h̽9kkk9oإq%>#"=Ԯb2&4yCRץs:XO :^-4@wZݐAY&թm 7g*B Oq Ca;'Xo@Qa6:%C>0#{$`wdӆ%D?>x_ V* P.`ٮ"{|IZy}Ee3X۵O&<Ɨ8tSfotI.ROCaLğYB4>ShKwry/ PQ8FӨGA5cu m-c:\kUUpymoOuDՉLWCwN4(t͌-5YYqIě`Z\Q켳 ?M+@vwuõ{5C{ikl; #ќ4,'naLJ)|zQ]ɇ@Zpҩ= bnna_c 7Ro{բOYlł;Rj߸jf,T ϫ#8v\u~C $QF)NS^jubGZ/A.D9)k-JB0w>MХ;dWbX]:1UUd. b J8*m%J]Tg,Vt5m!MDK*mm^b[,̣fxÝ}Jlؕ77Iå1 ƢzAМqYC{jl3ÍCsZ&L:,تE9$=6<8d).~wv+?v kbuNѲq5 bKzϲ+RM>X[J=^P,?Od\vKr6) 1HT7_hm.a+0. HO&W٨D)gQk}kX>tɢF#ΤMw.*ʻ\łC sXkxF*. D5 %tH2ErvQ+H_Q^[vvXPhleb@5;pYGj;j;`jmx&j-swm^ϛCVjSa;RO*j._Ѣ%"Wh@Mչ=DA8_ JY)jBf[n`(JDǛGe'KT}QwL6Dwu5]^T1Ky%+x"W7!ȫ&+M66eOYӎLNdWc ,,!vnSGwpx=ř"aK؉|j84cѭa~NV <&5N!BjGgEs >;d89kz̭hjAb\gJZ҈A;o;Y{Kn1~P ό[5/N4V?$iqRUOD`U=YxfǬf羕ҹi1i|@iާKaWu26?14>8?k&R"V I?];pf3E&?gx9Mqac3r/i=B8c D:m|da5 ҂'sd8K߾XYpRH:8_=l#1vp+#5{rqEMA) =XPɒ+Y WDG`n'tcR$-K߰}n]bINWú)U:/[n3\2ZN3gmuv7VPq|ϓߖ-rZcns\)~1& /8ib!MQ /0 *=FG(F#kzI<=פ;b*֌6ԔzǭĔD:J ™du1KԪWVA{~xz!)j!5 ȟ*lm?Z[3[h{@0@?mTE Mf=xcLȀM@,]z0񅇡~@p5KlfبhD %zJP63xɋLB.tvSfgڧvTq㍜֛ݴp7L(=KB)u*:Fui?o@d$ͣ4Gf\UBN:m0I+;Q6wlDٔ{Ũbǚ&iEÄ-}yAbST}00{Œ `kW`/ɜ8Rxs$nN ^ї&ᴭ{>R1xM=C@SRHrSp)j_fxF̿!mBCVto -fI4/d:ha@'eRQF՝ݑsjZC/%D쁣t vwBkMG{Ff )oo'S[4j-e-$xjɘrnfbD4pnVrKꁿvBcZV`RmW0'kkow4gNX՘\ښ 6]^^^eVj9)iת{x)!׈[*[Q$̘NN%7Vp exё=O/PJNa_fV3׀Ov@5.o?V ;ARBikE8~u ji7lCR9Y-r>h2q^r.\a!*ql鉔ᴵhYzQ23m6Mxf' 0LeP5Ο 3}.PqZ! jAi2Ɨ.pf%`~&qni+foRqx@w -H6\WSCR ^l,xh}cןw!M<Yg3ubnlL#z.#2>e أdS<쨶{Far K?Z>wqK{C_wy-moB$E°Q 5#Y1b2 4p{h.Zvҽ}X@>u_薪u";LFkЉAnk"1E0$[QdힴCB c?k҅))EgX<'!AJ\1O׫osRyS6 4Nh$ Cfjato1TJ!/b0d]b5oid:蒌-pu\kE5 z1mL6kN D\v*Mg b ރAhTHhA)):?'u)J'rAW,"S+ }KM&h_K&_)C3.U``tܢ\6=>a9%Yض +JvbILm)_ܜzqa?9(Xb:XjC(JQR{!ܥB.:wۨnd ~]ȐaY|pcenZhod!be'X\r.G=B qRCiQwLqCTJ+t!ryP.*9Lq;\x[fMe 1?5($`LυV8QOڝ豱wW{dHFX ۔N')5~*UBhK5-~7Ў_PHAeQvAS&O* "%93QvzٮU[`vEdE]7HZ_U醃戢@SiaڃZ*٨'P9hPXtbnI{-b5IM?j7V>#CMGO51F_xI~[f{)1͖VC#Zs3u&_K22"z OgQqNhQ# 'ziiLDZ䵒:ji=ٱ\؈d^~&oNRQdB/Wb y]D "b:Z#56Npml5}P?HJSXX}~nc2k..$1:#6c}wU%N?pqSl% 1 AIPnֵpeW1h{xMʰĦ,%)VG1w0de}"^o,bGqȴdw"ɴ -`^h_nJdBNy-Bғ 22)  z+K.a}K(r4rc[ J'/:o5;l\p}at@HbbZ{y!A.N1{ O1R2]Mңlg3'̷_Q2$&ZLsV!}ށbSO!x!xyu3X#zNioPIOA_2ˬo56j\~h(Ǡ^G*C?MiV8Cm]GeX_upq̖idrP*v?SHP{jM1K# bܠ 6oujjQsJ!e2# fǻnN #ѷ×X9Uw4΀uA4eئ\xs`wQRjsSKje}α_y3yzJ+eQ%}4VE0y dz !6Hg9Yqf0;VVx,%X^*3kKUocrŏIf,h`o`~q=.7T;mڵ]gF'2J2\R fpYɢu{j%Iu8 Tfd#& ‰βr bwrg=ઝJ2WDvaxRatO|Uf]O YBIY5 wbdJChT(D nB*9'ĽcgEМKO6/,iE½~ZxL^qPP[A+2 qSDr>P޿OLdJsb&*fro2Hh`d1nu_ڇ9knXxL mǙ*FƜjhs &|I9iqN7bQ2h;O^M+x _w2֪pȓK wz|LUi7VXa;+".hG%p \.̗\U^Rp0^Sy0|dOH]oM$!RsFٖ\[%b7æI, j02\3#etF_$SnD@Mv'  f*[^?bO|j7yK2/dZD]2zi&:÷i^JXFYVشoyvd6q:aՎ5]/a]5'}' 4D™5׏qG22zcv5 a#[*V2|.dymAidF p9_j0y~_d 7fr_,Vq-Ԁ8,1~&fH7HhI e m6(;4~zH2@N0דN.o׮h_nzDd<>f\A2ȑjcha6&Q]HM! >`PI5ΘxeFn 0(R ]O@pV.Pav@_ǿ ;_'u $6;rUj]}bO,Z-|eSq8L6TE ȺKqnvz/BBa*!2a]GlDk`crTwl].5ˑCkn!|`<:S>c&џ eGZ q] 6:HLqfRYs[R)%"%ZӭBGe,/CDzO5-[0]_r)Oe` 1Qܨn5k@~(v!j Ȋu,QPXݤďײwO_7OcZZf[>5MTNS<5Dʣ:YހF$ a5^I[VP2z,bD}DbuVe 0sh*uB8`t B7Q\"l?{_+32'9v+%Gns^v),AYw=̗&r>+̸̿ӉO! r(l>N`OWl&Դo8*bkY:ZET,#r \8jִе6R^0Vs$!XUhNS&h,i1]Ւ69F)Ҟ 2=ӃN!d,ȗғa%<&}e/`ZI-ܬ+N^sdu a6&J3E9;{ΎeķL90jՍ66)GG q`o$y)6rUg}VI_"u:8|iI{!\lyW&L} LYs"[&Jgj=p ΁eF%| 呔pų0$9P7k/P'Ea]{jDԹ*i 3v*n̝X+XiJ]z4? 0<LEǶSfrG]geV`i![Шl5wn:`5:z_ dǷՁ[[%HI/E;wL:EC/Rv5GNN0pCS)Lnx&{V!dX˨!ٸr]˳2-<)JaD`u4z{7}Xj#Ɇ \ݢ[t%Syk#nM_>KxՀ+ a4ߖ.Ż.K% *@oEK',r;-UsO>S4 OYʷ'Okۻv.Vy ZT$3rweD`Qw;a!_ %øhΞ31H"Lfj[!kۣkkX8g.zk& SَedRʬәXꉜY2ܺ  pG: U1ܐr*&";~LE@  R#:PB[WO>e? ̓Hc҄^Pq㘞( V/yZkaYm }?aO5D%I{m՟>IEoᵈITL` +eLD¼1g#z&(Sl}B;`Do1 jEB tmiRзo6؊gI7K 8 iBu!A m]f4D@"u(T'z=[fv%R3p@eͷI.M#[Cª 93H/ű6Be )zkP0^hhz[KUPR5J{H#~t!l8*jx-Wdc)$h|Gq\rE;rxb+ kc'7<2)-w꠵;[fXcOLUѧ#p0M*OOc[{]ZDh2]%áyݠ؈aC enrMKTo7FgMұL " iމFK8az:$RY4V1ljȓ0[06܎+b^|[RҜ:D`D_;-I5MF,IFa,$&D@ \h A.u:Vn|0=_3qֺ|:N#ա#}Jp0TdVtiG"elCr=P 旋󋺥rf |&T)lea{8:?IV'FM& ODNtҐ;&B0}|6`f#&`_n|YE?]lE :7+@e ~ R ڱL)eD,__19Dnk%(W:f U_g~_sfQA Dā£odr\(%`8GŦK/پќ]d|."{H6zmrdYFL`/x0P(,DEPUXK'~m P`srj=fW;R)6K X{ =QrHhn3|0>Sb@&K*4dpo&lIj"? 借\k+W{ ĶG.Q@L99ا=}?vP YT6@Ѡ}Q4 h|+ͥiLÒ0(>Ipۏ.D7*g5"-,xC1-@_G+DŽڅhˡ W(`¥H -n T8\04yY՞s.yx_VB$ִTC Ҍ7uٕ^O&zCz>@q5>%FMSp`JBd24V&㈖3PF)1INj~-%[i'aؽ7L%|N.t`"I0e{ͪ^3@܆.?f3@\aVguY08^/ڙ p"DvzažeSΖm  &^ݫT @EH]OKR|iU+f4`^L׸_fdD~Yh$,N$ =No1d9Ed:PIV;$jRz*>5MF$9ꐤܬx7 0` yV,ofGH$DpkǫD(fy丘'UxI3 +lZ-NF)LJz0W2wpTL}T n=_#+`}w(zL%pnj+hWdj>u&=*,-}/Z~v l(l1ՈP"~^k_d!æ ?,W?9է*GQ sh&AqLz5_SؿJTXNw0cT`JVB{LuUo <<~qZ0ϡZ+/c3<7{qT}tz`=, eCl:9ye 4r b!hK'UQI1-&,x|Ӟ؄u)pk9FAӢ#r`!n(%5$lxj⎉h#omU.Ң3keZ54;GXF  ȊпODIaB4NQ)L)[FȲmttM;}}—.پBRrفj=Fҳluv}V %q""OPRAH`٪zC.6zRE_U~m7!I^A$->Λ:Sz=|][d]Xuv;wj&̌e[n}ȝr pINf49͈1QD|޻?L5|.@Q9I͆ %ҏE͖2rK Qyf]ʓy2ͳm3߾ޛp{^~ $#{x´ Еgƫz9T^eBʽI(n?rX^MP}[P{~ay$ds6Wc 6(2 .u w'Uڧ-]:9HiM.{Q cyy(ϓLA 6Z v4w& %@6hmMS5DUwnA;sa2}=Z ]3S5FT.9WKl1[fH3.Qh>9*.3Z]šb \`ni}ɪH?OFG6 ?DM̾tH `vPw]ra,ή ^S~0S0hlݕxDMRTۢ&(УCYc[oJcdRuлm lxBk˔D|QJH影8W|Cф{巶as@:oJc-a%pš<&WJM&V\:S >#w7 `@JYn!1N \c3oryV d"觐Tp $ذsšELvؠ%UyW[d UH2e }6N/cihNiVM^.\{j^wW2Ť˜;0Q8cTEǍo_rSBa3FnpM1b:boD^OYRi|h4;0l_.1.Y]7a_p 2]酕eJMY6!´m_) yYdD FJD\* .jg ke"~;P$XY構!yFÞwa>\gGckO J3e /2ZAK`gƗ8`=k"v@G]7CU+_'*'Bcdvw׾59ke8ݑ!2G3>[eQ3..o_*l{[`ۚa8CתZ2Xv.'BA;-)_~ҝj^36Gwz(Njɀ ?.›ڻu-~RF@87C4 iʮ$kVu/@`xWJ.7Sw"VU[ FEV\Sf}+7<̽u{Sη[rKV(F-= ݇0wFOkLn` M ŗP>?`~ΉR +ْT^Ӯ/ǯБSeea%\Tԇ.N1Ib8GbMWX{a ߆@e\]8J&)۹MVw#&g{ﺩ=6Eh](:|t`ܯ8 z[yxVaS8"φRpæJZIef١^Gj\&Ih\ӭ'pkp@{XijdDIN^\gʔ]b{&ޯd@:Mm)S+h|i ĩ;{̃xR%WHK .9jzt%(ٳ!wMGٽu,=#q]|ƁH?&0W4kyWbf=/l( K@+-8+#J 7OXILe` ?֐+B'掎@2]p.3DACAn$ځsfNLAkL T7?\WYLi!x 5R$~ZXH)3:$] :}rkJ>|N ;}p=s_-.d.Y:}mdկPt)l7,>;:0\ăj7ZR86gq>_8 | \ۑ,,ˠ !{'47'aދR# HiYz"~M^ 7ECB<nX/3;BYKFGv Mv5\bprA|ű/cmVmv I_pZ)ʱޖ"ȣw6#E5b %cND8dD+ )i֏t>h)I:[LˑhUR6H*FԚhɆP9{}JK|5-^O[~G&##(۩+5Y#P aG<R)B8un}f{eQZpގAws Sу7zO*@@z:F[ 9Z h&Yχ6(޼Salr%+>@s9GOLާiE( T,yҸOH5bsoh(p`~m$ƕ/&V>_Vu?i'3sxF$ۥ#jC3S8a-Ms5OR@A4ssSBd8Q97t a&WK62 R+Rݘ ^)~5cP+83zSFmz>٩͵u)Q@?Xԕ:bHAM?Ƽed&,WϬhLYY0kXBj Z62[yTJ/7"aƖyϺ@) jͺL*J KniRI,'5ÙhS.‡X'9T쭷:Ȥ(})WQ$mW|4 b`*\#OζyQL KosS!LF*P ~0%iiRXրb fv,8H]z 4 ?Z~0^oaަ}Sŭ6rR4h #l# .ћ=L?J<?.t0\YѝVI-aafbՒ TJnع밵4T@XZ)ORh_6 kT3nele6<`MǺ'ք V)Ji|%J.yǺt@v#$CMNEi'EP^D@9"*m^HuPϫ֑3]1x7GVɺ֙!UHz-_o̒Ukhi?ϥ ~wLޠvbՀ 7@(!dװN . hQ֫Y47:J%F8DD)f &@!q(֖a-_(hK\:5Sq, N]C{Ϟ$ #^nYl α|kW؇[{rǛ'+4ꘗ2eZ.s*eOq/TcGP+Es٧zZ"7su]ꥻw\tiWˈeA:LjK9yI37܇EZ ۘxzv 'v48^SlbL WB7NՕ*!Z%Y\0kOhJn GO<uLǛ.MJB:7R7m{R,2>& ĵC #*aKh!!U(wQ8y3tKd. +qVaKH5[)ቷ#jQ7|F‰^,0I]" W2B%,t$?V .9t܊J%T}RǸi?5Y ;v.JU #14T_樛 W F q1 / f=PR7Ֆp!ڥ9ﴪJW| MItgᘀԧpt|NX#zt ENL,k=VWqPTn͝x-_?Q6-A-/%x59Sr`E/օIҢ}[Suj@5q"'W_VfYņy FcQ7 F @te>=B\#X ,+ʂV3˾CZqI6 xo] <%]Oq`߁%iQm&I4;egwOJ-GQ&CJatۧ/ ._w/@q0}k͖xYJ^qϜOSWZ3KbKSKPga#;s0Ǭid,:TRC90 YwY`%I^űi@1͒!uBhG*D)Ԍ=Efș 9)1)CP^eo8y$h]kּm*ٱ%+ȕ% [qFy'T7\v-Wp5MdVS18ĩ ?Uq0>b-^tnp N`bPpMɚߨ bBR.`6xYTM_#[.WN 7 Ɗ0TTFu ʋU,PR^ ?ǵ #r)>y #C&[Hb~`1Su2SxՙXA6dDn( *',u|!^fT$d҄h8LW{9}S7Զw>SMU@P{-A}'fE;1Dܓ6@ih;PP(ħRjoÔ˵g÷(R"G$y8&fBɊUgi%˷5'+fd*"fsAkokbҡUL(e폼H褉_t$KᘫD.-!9-qr(^p%9xs `}L9xkuɢp{b+v]  3~ҍ іS$Gh5[7H P|(R>X*t@TG>U 5؈rv$L%*#JTy=v0A! %1Lʶ>}?#)e@11Fc];y|3mTb%ƒ[aJHk) ~Qz°k1w^dG5=al)ô%YJ .z HRb n=BԉM1Goó@S.yJcX:]0e@쮧r~{e8Ff%o9z;*'-ų3~7nA.Z j5Q\ׯD9S=5Qojŷ 1^h}$ЁV_I/K.$~r0ڬA'=5*1ōڙ5lS[[Uy'#C>H3:S幧uNG}0<-Ş\Ks&@>XԒV ]z!7~ %mFvoW?f-XY'x悤ЈQekhz.0eI%{o*~ ڃM{tTGO$(vp  İvT1GMR^(N}gy, cd__s5䷍-wc`$b|HAkUC)><.$z.I>t ˺i1=25[J>D;x10| Wmx*gRZUKp$w?m;k閦=ڳwt Χя粖I|؀QІiL0: S PZgT Tm7z|s?T29]K)!oq~Id5GLsK-?pixBwAXMɌڬvgt|T dUV7h}Mpbfa[w~5$(-usLW_"]8uQg5Zci. ,)C$qwi.`-r,@iGsߒ &`4 I2.-@N\Vlwrm@htϢ~2-M$V8>57#K!YװMIzMB j)Ӊ_|CxpڎJ$4mjث/EXAZN.NJ+cG2`Ύ$boPw߭ Va]wAp$Z%KkЩt8Q/rNFz'̨h8d[AC>T,nmck&ȿ{J7jKVɏ3*=ܤ3+3 2%N$:Ӯ{SQicH] MkU7 E9T;ߧBSzN&AOV{Ƈp~E#NX"}{r-"bj.8LӐi7u[Lnnf8X@SQQyGqHy!FEw\\0v(TQE̝K`Ȟ8jQ) ٪0 )J _USF_y זY{窚$w4jGP2!6K~FoM޲F`b/hriF;yp@x{^;շf44P[_wLDzW5D)&R .6&^/O& !agEv7`w_ Xĥ3}ǯb)ͮcjm +rP8ҌAʚcy 4259՞P._,$ c ~ "U ^pyH8!0EXc sg|(jPI9-~šQ"y%an,=ލdpR{땭dSj;gs E[૔}n3ZUҬ-}j֑ɿ SqJ̻zg`[؊@-D7:˯PB>1CAݮFZ/; nJVڊE x_NEPR߼Y+(yS0 _KJ^1 V Jjk3֋9ʹVc$i.O4el.ҳhcTq4 `n=T(wG@‰hxn_uxNR.(":J!!.yhdp6 eaKo_vk956~=HhAf*'G#R)σW )Ño_֍a#y+'ЇTݻ~-9 ,FX'C?,V2_^ސ ب[9a"܂NXɴ)<_a:lEFG+Vvqm8Uo93a ?lRY,&z+.'M!L vSkmo-u6IH*!}?@w #8!6ޑ~>ι/?[ "/e&Z{r MҜp8~l60#| /9gnA5SUHVM8|-et"\E?esQǝP8S/U5<(BNa&RC3$$x*d'6i5gX3|1) Q?fRM# 1ߢ.$z@hZH?&t)OA=r<1!n} foLzK- V%dkjTjJh[-Em5` zh+8:(GA|A/ v 9| C&q3E0V͜lT=4RLBR7@)M`*bF:6,}`/(|Bα s~Ɏ$nq?cX%Og]8g#E?~ٕ?Lf(rf C V^bC}8E_CtFςNBQzSfZ H3[Ajzu$Hf\x΄?ǵHY.i"0FĤ6&@{ yk|0m.]Eieh,6/p!FfoyY\9mKi[6:>D֪#|HkUFUfi=#v)E2Ҵn2AsU&l\ Q o?:'sr{QKi)5]RrOv3ű݉:ߴ{W 87}W_”ʧlC 9uަwRmdZ>!kÃNi . < l$4 gv_]C~ὢ/'/?Gln~ 3t 論t؛ﯢUe%P\>' UH Z wAWR^c^^Aa/|̥a(y98]n7АD}m8o?aR/BZxu]eM錝k3 sW>vclv&G<}cX)@/ YT`{;Lik:|ܔy.!i(%:ܯTU?yptKYxRRٺk8\KX[^&*Yѣ. kunf}(E86?J\I U@u9?3o`‰:/QAs *b#bmk%eP#TorH;, `aZ*p>'s+V)++//ąmCd%dtN*%X~jppi|`vۼs,NA38&3G8 cuREj\ QHk/+~EqD`n|J j)J20Fdt[J F)XZp-=)ŷ0KZUDK}}H_ cVу$ UyO}pȉWW +;W%E)7FSZ*xL|DNMgmMIvԅZdVEZ闡xJߌ6>-h-ϷN$.D2 ,kMց Wڴ~3T:WT$y UJ(B-I_EG+_uXl\_ =,r"V 5խky<G:p$9zXʶW9SE@| G7tVp5qac?ٰK ̒eTm|?âHUjzΆO~k ]: BUhG5F R.K밨QvcY$(yj)컱`Iaig YqvNҥgs}Pw-XR^ՉD!l|[3;<_cL'q'VXla2LA.U{%qSUֵ7W X\w ]Qbm *wЊ %g n' =ܽՇ^7lB#L.Acub c :;Goשz>qMUطzBYSKte[k l(7DWG\,rZ{w41T4QrMf۱23v8'?\ =dxq-$fwF&Zy8 :`H\TD>.)*:#/|J(詶U~01j,=W" 0~|' %Ee5zJ.*h5âP ƞ?'MF_}4I3@'Qд,xH0&sMt&oA{ہ,.m>U!d9f60Z*eyfzI$ @Sk}ƕ_Ls}a 勉-ԵM!ŇM3ܶ*Τi,P*ۜ*O3qHr-:PXs["֡(NsϧYrGbp_D26ГlF(zՋҒZTY|jpwqMW \T_E]]P4Ljs8HVUl+8/_1uc=\H,;F>q7]Ss2\حk3tj̖fB:?!l۴ŨEX bԔAlR.e2?eѮ/6Q-GQ%?r#ثf` kPJͼN..QL  ~@Y&΃tws Ԭ)!4ƪr< 9WeΪHGVISIt.xhxAdh!!&9|߈Q%j&Cd 4`SlɱoеLLÀΚJ#c2LJcx_ }=f숌6b ڑ O,ȴ-X " TBŒ'u׏Z:! ‘g IwyQ@rW*#rP`zHU-Hb&q8M^yv9Ʃ0uJ<{v,(:3W:o_XfzRzc^ےKIOqY;[]gcSDZm+oH[36zWZcxh0.+OpՐui(9o\Y('As,V9ϵllVҖ^J9VdZ]Ϋٲm/ ٲUBRŪ&I%݀Kx\{d-8^C߼+KŮEX4B"Z-I9J?u,Ĕwdl*M ր[BhLl|T7.Z;Avs! mQ߷=7cXm?iB|zC:i"4bǖk5 mIyp*h`MأZ@U֖gNsFZ`4'u凵H^&FY8bV9}e_=061pt1pYendstream endobj 7 0 obj<>endobj 8 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]endobj 9 0 obj<>stream xcxd}?cb۶m۶c;ضyffwv_w^T]5?T]UJv&vδt ?Bv.&r.&o"+ )O1@`!Vp03wP(QRS7r5,ld&v6&&LL&S kBLV fbkh` w madbdB 0s|9l-I͉;'[ `0s4ue6bh-a6&odha */,q:8 343r߶ 1u6u8&c '{ko-G@p413p46qr6mwgҶ`dbmJ۷- ?"akj`d\MU f;c;[k) wg]5+ _iR.u5 4O5E3kɖp6n[o4edIX`j`8Z[ؚ|/p[:S60'Llǀ Bo ߶da߇hLvv#aє1pvph1100'aFWr65"(wL ,e Oa}욘DC/`lXd hi^X&(u&Q?- 1 rnt̍y!}s vr3ٸ^vA닚zS_+fL Q׻ ݁5 q;bn!'i.@I!Vq-ǃ2JΨ*tWֆ'F %:xM2% ih_~s]3&髊< * ))=^߂);kAoEnĻ @RƪA^E\zC<ߏFnc/*[AT?Jp/{A̋Lǻ8Y8꠽4л4ˀI)/C/&ŸigdGµOj\l2$E@{G;@cv⽡R_R"*-@ H˅3 |YE0lp ąH&]Zd@VxPľ=ߔ4jfimWZ"U~{alk}JH1hԭaBGQYj121/P~,|=-o4&IR'5|ݱ$=4￞?TD od3F=hQ;p JtL5a(ZVt5CcP&jz9k0Eh[EL#;I.a؁trca> EjL[aFZ]}@ UyJR%xֆ?ӧ+a||loX6̦gֿS/ Q+1hB8 Jq{އ$1-2.{l#!fjxfGd&RᚄpZm W=F"2 !rJF]l3N֌F᯵{"<[#V/O;t/T6{J.w/PgI647@%SBN؞{RXqZ)<O=?oR"#`cb $aOhG+k&PԣT"N旣})99ƴN&/%WB ?.^$L-uk*th6"bs/rU:EZN>x~[oWtrݬ@l,r|SpTxl/6ciP?ǼC6(d?tJLjQ(]NYui/D΄i{NΈ"YE{Cϑ 5j]ہkgoVVJ(xن;!]tXw-\wZrJضݮ\ 0pe%/*·"[BihCQ Ib4!O* +iV#裡Y1[q(KޙR-.q}F7hK/䉝Usˮ,¬#›_ڸ 80m&XxER62;SdT29xab(sKryֱǘz91j8]̖‹dU7WZۭnG{K9}Rн6YvP0̙z E'f"8jD_}P`,e9;NH>'u|GmZ Rƿ:ZH>',W@#һZSk%} `Guov iV/̿,aJB7 MPCe]՗:kZ.e9 !GVMVfyx>ԏ扇 @Țޕ&iZTt_+ANE<(.hH(3Dǥt8sY`-ϡ%(Ab兜a/i}_6^ 3N5xTO u@$R> Ղ~1Rϡ7evS|zZ1~p?Zc|_+ m@vjЙvz-!ho:׎!`}|LL*ߩǠaH40rK1Twz䰔giA{9uBW0<4P0 ]\ Oͧg$g=eH7Pak)fc39T! В9-a[NQqMCۢ3,Xd=O &~ElomSUoAHg*mĪ:Ԡ 'r`C՞P{uCXkNGoI;6:y040ˇPޫѯvi—M(h^ZC^>(% '._dGsDE@>8smX>IKăAkJh0Sk$73|k7 .HOdE;Wȫ}maDϦ\ȭ:9Erco6YY쥥`!䲄: rm6kWVBkBF..k[fF?!kk)$0xs315ƞ]]n{S٘x4},'s2Y.o6Iim'(iU]9~RÙ{`dn UY{wpw 4UvRj\79 Js2Xdn̾q%{[*;-JoG c!M2ͫ`Sqgd6Y8_犱O2TSj w{ƶN!V ]1HMKEȪStxeRÈFRθUT>JuQzyNPpϨuH"N܆!l wwT,M.kO_"ϩr;%]Ժ !Lϵ->[r|P Ճˠ 4.)o C('K똪8*K"$A'pYhZFvՊ3Z;w[EBҤl˶!a^=rWO]#̬^W{9W14"M [zqO SBs#;9ؚ ٤ܻNeq}!|H:TdJrg˕Κ錦?^/ sht|nFV̪ nʿpz#jTb-p &g:_гɩ ]䫷nyf+8mb<_7o %yFyߡ@{ \1GAjvaޒH`")cf#wf%nl% ML4zl{ ^Y7Ln.3,n=_-&^D+H~ٟ-h: "[}a0yā3Sh|>nzýCLnlUwt۷w c CZ'bLT M q N>p48䗣c ?|f*$+t}@>,: W5Oi"s (S.i'o:#JqMqJRygQˌov M`7)9 3֭4L"-jG#⇾0vLAM7ͺq"Nrǝ qȂgn%ޏ?j&t\㬧XIf6h±?$kH@ϐ X2` f+U-)pg?-6iQG}4Oigɳ }$-b:aoKmr#HlY+(}DцxbT'۲*I[;/xFG9Zwp%v$4镋K=F3[*gY̖19 . ;uT+}Ef 0UX&]*J9qC$ %:o[>] ]b)YR]O[6o>ϝP^2Cb{ljhmJ&0{+ݺZ0ܲPֳF>wӽ44!Di,Bʋޚ  m.@31^ }wӥl!>MrS0UK>̃fHZ&`,ITU:*жvGJa:vf,c@h c ~ ;zR+NJ X;]-AO)O@J<"2'N0# Ƽs, `[\ƈLBWiG!S)d@[|zeoPc.Ds*ҳh1GOEvE !BM/3k$-poRX,\Ey<.}!6 ~o~nX1ŘJ%/ݾme!V >zrE#\?JtN0 U.eA{LFJq꧃wg7XT薽p<{d{m߾06$f DzpeqCH`;J n*O޺c 4CKCE$# >ƪĨC=_SL8֧9.tw$TVf4VAr6 1K5Ct,{m.?f &Kg ,s2ƉO>6z^&G,غ٤BeFG.͸tZu#KX(p$P*}0Ϩ8pVƒ.Q+Rt5Qw= Vpֺã>rARJM-BhSsF8&6#5 8bbqY^0d]ixͻ%,sDA` ~jy\1<鲪)=NuyYx$J>Mim+4G_Up+!8r%Gמuz]%7(2;f%"~&vMsW>!-_ L/*7LLB)|iR"]g&O7Q87C1jVv l#H L_FJ$)5e֨ uWF{KRVm@6#+Lo & o;?m.F:S 8&=]%$HK<+⋕Q25*tk W Ǧȍ"U.M62'c[ W1ۚ\; nJex&a[P}w2stk~#%zT!':Fs~U k|0b>FݲP٤k$ ͬPZs6kJn:E%ٸ )_ L!?^\NSDhEzd %Q3x~"vqRO ub-AxD-jJ[Q4E z/Z)::)$VL=卞KafrdT8o|\d9lNw1?*Uh8;BŇLmE\B6;:1]MXߙ6@. c$p^-dvL[\(ж1&P&.Mi#?z~Kk/p*QѾ} oeqs*`n4UMXLg·닙&!ML}W\Tur]`n,m UE q>윣УKzH{eY6* ~*1k๿fds"A  aե7Jj~J\ 䤒$N麨F5_[HTv"448L<6jNА"0~!M^"։aQ7Y,%PmA{ʝ}-ug}}'E6GUڝp#/?W͍j޶}Gr(UY5, øx,z¼e 4w!9xd ?zch7y0do Km#B#o ]_zS瘀KsJK!UNN1\DjRܥR'Qn4{ i#b42eGmr}*yJ|4o-pFj U5 ;ՓrvH˘?psD>Rxnh^i6%=(LEVUS?qD;7eXg9+m*j%n7kE˖T(v"<#p "8ڙ_鬍iXJͣT5! x~Ț8`_ǹݿmQ7mre˴(8P;ȫ Z/0h/8,W˕OjD,Kh;=/m[rHZcO}RQ@XwXԟxd] xCˆc[9]Yq3nX Ši4T&J=Tvڠq) {|A' !=cpa#jPNxKIޅ=ͶIRv3 V2xj@l̥Kk_BYvi/W5Enj&Rk~lӽl[`eG"Lj۩ /^;,}v CxwՒ"! AIslD{ےR~574:4mΉF&,FJ&ZgہκTؤRWwgܬ#-SgϢ[U&t:fG"/GKӟFR; /*Vq1 04\qܔ%+Q+* #^q~_/ e]/kmeV3XKۏ%qá&ܺ>>2#3?sYW%N*Txdߜ1﵊ul\\^Wf+>րO W ds򞌡ez']afB*az-/]0tP?J}$f!y< u_IZ5~S)31eJ VG,vԥ%rUkO;Ƅ٩݇]W⅝fx<>:PuZ}5?̾xSxv.9gnrpK'l2R6-ѝ(j4tQCOkMUP/Ǥ W31[[ I%86p=~Ű3*⌮0y>+KI/vgK V^::2A[K_=M&N xiq 8RSS(K"DL? آ(I@eZ89OHY "{1&~502XKyDZD썁(Y*2VAQř2kh 6L"<.^1cGqۦ/`SP)9:LJt I~ʄ n93e2x1 7b cC9%% Kux'¿'"mkB;7*xSiy;Ei* yх<7Yyv۠;ݍ~@٠K{9e%[Vd}j_}-8E);_7{,Y3%X|sɨ7bUj: &Y5h0g3Zb-ܝԺ97Ya7[(I؄$Bbj$7 :aj{&IـT|ECZ\Yj*4r=4qdN>9 !=O s}Lb1LyQL*h}8M{ϰތY:ɶ+reP15鰲DjYΒP\;[,urx40w%s q5A1~ay  Q(7mKQj0`*E*$ED'-_7S(A 6dV%ѺY'rë45KU]"~dqU05WaCU v[*oҬX1vDJ؊s({* E%"IuguBK(ÇB[7N@B.dMdq?[bU05;:A-sBpj0~)=Ōs/>2bi"iJ" "~j y!LI ;A 6Vx|ޢ/&jN)Ύqm_i~o|8#"^!i+X e=w!}|&kꏻ^1OzAȠO0 [^C?"ISC& H`νU#O~ěLx!נupQ:bA?IegtY9.my!^;oQ=v_R^Xb=x[t窃qNJ\ M'_!Z}q$0sdaRZҵ{ 9~f7ј&``W)M˦JbdC4aSi( kRm*ژZ_ ?[YD+2sx%"Q[,$SsVAt84jD"7Qeⶱf*ϱj.}{.mAڔJ6dFGycb-ǻ> rx\u;_iMJ/m {8}*"pe&y |XsяSK7UC(O$tA](QpQdR&K2"FӃmvY揭v |'FmXµ¸QAt3 8glvV.ǥkOy!ZEl\LYkX uJq#tPI:*% b9]38eFE+7 9tV lJ pY2aY{`lx厥P뱹GpB~cS҅@.u- qs?e:3hgW9m^3~wXcO"(y4,j ؎g̟z#fWE*lY8*Z+岐V}V\,6Zv;GB[kp<-=D]^+2lX&i ,!E%+  T9M;-;h LGN_ݿC'dCudjWz|IA0f!ɜYej-6:zDמcka ֬)%{iaONL%ǧnUh /f8S9-ID0B"::cT]sTᶙ|1J2ujh9wY.8ÓMӶ+It'X6~єXt֠ iW.D]LiV?tb@)[ tw-L^QZ>۔a/DX n ߡd1ɩ bkN&mhU՚ cR|딘a26-3H#laxeBdrq1 ,<̽Y%ymvi#<b֕7-m0妒Z bkT~Knp;*TAʕؐ!ӽS*&V &6bugPamo:v;O'~}0-̟EM[ŲroOur(,_*G2 D$Z%`2X!W2 9R2UxzGmV^6 Gt̋tRDtOv:+뒟YZE~e rF-!hRycPf\l[`bJ+|% GY "+ڮT =Rda^SK5ؠ)&mk?M%c0`JĢA[SZ0UmSF &rcG<iTd ΒŒrWYlq z\v Hҝzq:|a#r$u[SRP4MY/Uw`5,vt0ZX;=?pSP6ty2@X\;$wd=-N Rt5U:DߦLz/m^'zBRQNgA򏴼 K2Mn &3:#3)Ç8C\Tӽȣ&nev*^0!`j`Muu9;iPV)@^SY]m5zNW٨x- f_bq[~zAdv]8+N!Jrhp4v]|`  n'u\/-HĝaZ9LPggįHm&H ;݋ޘ ((O*ydY!D{"A. 6ߠW@% =c59xJՍI?JLuALUgد;Z N\Y)m3Č&WPu>osu1aPP[Lg}NoQyQjyD۞%V'/(1 ##ZFzsу2LbأrjBvƃ)M"`B${k-٥CU?M"3[ѣpfΦ%oluyB'd\JA% ,ѵ~EԈo|n"QRS0d}pUzy֙P_!jDs :Pt{H>_URy uC[mNa1JRIIݜt /=adN:)& ]Bj? lnwWtI(L;SHN̪\Ub5@gQnF'~ac۸?zjf3OPJkN\.?/u!EpHj,C&:$eZMe)WTl C"׌>6P40OMLa `#CѨ3SW5gEck|9J4f_D˖] hKjT)9 >6bTL8i-V&pzai 8SQ'sT9ys ;knR{*\to'N \ Ǝ:Kᛎh LJ^[oPEK@O& C$K,~?\ +~Hz4>:ŗJ!K5n$ |+yKsH5n]Mc~UyTBfIJugv/98Ԍ )[CEBu4i}[K: ]0QEҎr1fW3#b<:o3:BŇqizwemYol-ƞKD41Izx>n8 ސW4=z#9gRC5ͺ{иA>ȃ#u ]Pe@TPLw(?Xk=ve\:Jj"Nqh(.G?N}w $Ę O0w3U u#̧ '*:!Kx:Eʁ"nFO8_۝/-!QЬ~9w)r4 ? 9#=ll^E$/op๶ J 6䋓㓋¶yFHӧTLl9P1ӡ/p@}ie( qOy$C?9cۚ.?{(s;J8ұyP+^`I!1{ש'!"uk!A:r'm:aoGHݝ 3uCXÚ"3ȗ S'Lʯ|ea5kݢ6-(:yERm1NyA@}%N:o!yes6JQ5UG_!TIh;M3*fm*?k}{ b+b=~ 2.mPmS/OŁhmӆgLFG 7 FffY &'7WW.!8GDqBaRit:TcS}#̨Yɛ|npXX*Nꔵ( *b6lu&mt8(l@~]J8pX,{d +b鮳ʅ2?ڝ1 &f0DNh\FU#f,.t<5=Q@;;ty.C@#k.\gp^;|z`T_OкCfn{9>ԟq#d=aR~C ch?wO5c ?\@~-%gZ_`r"³%+S}+'C)Bu{:ɴGp=8!R ;)[wkD(c %Н& M! .y(-ױw*pi yn7QΊXInYZz3K[@X`5=.cl:Rka I`&XgΔd,YOvAÇ?n7WW' o@C7,{`i:rͷ2(AҼ}9&=ԮLᦆ ,H1$5f.h9q4St^O֥us# Sgx k %{?A,}N/۳k:>D&F*4WOAgYgm*f+rm/@%3.R3 la5/lowAB_JxVI,QarYe=svZMZKaZj^DhIMW5x3! Pj tc0Ț/C{/=zػ%LSv^2&/cdA0s5fc┄Fb;Lů@$1Kܤx| iމ- =7Rhu.nV9Tf0tUSOROjrd~5;9$t㤈eVD1f)hUZHRjX@fd #xi Mp!2'IXע `(!ZNR}̺ycS[fTMD9޸t?ö*Y稒8rQQ>š'ǝ7D:PM̾.9;ܣ݂0Wf utlZwu\ލ*KTXƙ4cs&=< S.2 ̣X5[ $(x|GӀwnkQ8 680{׿\dNSydG,S>2VCn9]wǦ׈#wAi6W؀|^f}5fGnL"0'h)QP. )=PXfkZ#-hcv͆<2CHQ:|禑 f p6+ώ { ó`^I1XFDm~:?L2`gX,U:@+L;$[Ru{e^h6ȬkE0^.MSu(-oȏU)4mӽqqvWg5$uu Th;pײ;+9z.>Vat~@ 2S?[^?0'x7f|e@Mkj6cPk8G mʃ.JnteRL'<$am wJi4vV4L`e"Gk(_'ddFMPm$s*Jhvr>nG`Eel@xs31@՚Әh ª! &ц7h2x{_TE=C!'`/%"IT_`$0N4s/1H8&մ- N9Ȏ16 㴗G4sqG&s $a^+ 37wblՃd;#yܖdjF](Px- d'CHQzZ~cukz~$Fp,n-[^1 -Jve|yd$Mv ᮐ˝KG^ձ29LjηYzu#;,axT_<kACbp+ЖcGu9 \4^ ׾wxLVR+uN$ZA[ +ll v/PS\IC`]:0Zt{oZ%] ")kV^,\_z`DDsaw/e4:U+q&U4( YdDSB#r ϓwMBZ0c-J-с:I1Vu<ʽI|gp:ݶϖ0ݍm1K4;ս^Xo0iY&vKT TRRQ0 o|Zځ G2i( jޅ0 ؤ]'G >9jftj 8-)|愳p|"0Cٹ*aɂjE-0\TԼ ?RèhIuW>a"5JOV!32\ h1xuUcN r5E48ڳQ#iuMs54(YeaBip-lKy+C*$H*XӪwC$hJ*O x{s$wWeNH.Ko1 H1$hY̵F~w*xehxvl ğc'C쾝Z<}/#b ./iۙ&pf Х 3FJ1ӥcU-Uh=6%t翊{M|lqkא<BTaQS1nq CYidr^ n{Ӎ2^jlK^x3)EQę}bF=U#\[i 쫂'> qM@>;{TIFnA Es9%peDSoIh՘ܖniGd/$%kY* 1{i@G8jEPOTQߚAԺ_L‗O ,ȉXpxL7̈ (}A<,Dq] l"њRNx cBw^F=374ZBPCqƾQ3QyNgc7cʛ^s:JF缗HlO37%J>=<,GbY̋ܩ2EbBk0)b\e=傈N:4'jC8Ns=99GCDP8lEdHGS7s^BяRW+{FZX&6\mq bKЅvn{Wu~2!;0,y~o0I]|m2 XIzfrIy3 \ ZZvKA&=`NS {kIbE۾jc—W1(hf P[`"'O%B5ǔKütY.ٺ&5S1PZ8m9S]`aav>WDo)лn z<<''c6РVgMJB"9nu fdMً`hpٿ=֍Р:mRTEᐳwk,hL)VPz;pZZs5<{V4eB?fN$U9P^v؁Nc}Woy'#D%ZN5gv2?E?"(.G'9}EgqaI?YFh/ܤ-9ߕI9,Ygd.f?bZ ~ P]u6IG~@*ϟgBb]%.ۗF/+Y̜ܴشQa~VC/ rF^# OReT6] /y}#= 8Oji\7>8$|m'Iw9}4T.Fxd4dTE\ }h\B]XCtƆxʖ`.1{R)>(uda솢 B:AUCePF- [ [N }jv"j:;h%MgΎ'fBjOS >(doD~"YkGu== }Ӎ} *2߿>0>X"2_qۼ.hR$Ge{4dJ< r͂< ;;vh{BOI7o2=Xo1]}*C Ι7l)SCU/B,%8ޣ4țTwiqΉhv}c΢IgL$́mS?:&ql~jU /]v vup ;<(v(;ցVQz1@<>,̓MLV"4 VK4H-] nR*+ݍ9~2~'HHB .$ | ',k;7 0ZGiU]:)-(9X ay'C|qmeevIjŞt^eo-F`M_A+7*'^eYW\JX993Bq|Ry5HȅOltdWN^RulO-Ns$ tbWAJuƾ,CpB镩c{d-h.~h1$_a3Z Ş7N_̒ _  c^2+x!)헼Z kh;.쨵@~WF,{$ҺQRpc_GObwww>'/+,Ҁ.w2&Hڠ$T0_tnSoa Jv$&c1D?SJ_tnN}](LZ`SΪ`k%#^xe*L.>kYhlonRv)LeM,vAGFymk86?  '7I1>P-Vk) HCr*vd6wg9ZX!MOO{<tȕހy10V!3Y44ҤlDC3ԌivsD@ u5vlTKuU#tm_/H!.K.7ZthѰ'iJ?QN4n?̫Lt?٭28wqZeM566>3C&s fD.*Sq}x11Mzp|!T~ѷ텾?K jx߈19tENY4 Kdc&֣Y;}k~&5 ,SȌVWG$ahOJyzO TjG*`i:d,L ~@3X%,jؠ׭)+8Sv}:xZkw%ꅖP5_RfGb#R:e%Os qhqJ6; ݧ<; l>FHzM=y g׷ZIh>SG^[G-4"UX:)qc{ ֖CغQ嫚XU傫EE)9)[zІZcw4Vb}G]WT(|DeA&6YPvKiP<5Ek"|UĬP63?dk@=)0.2K+X j{ ] p\CEd=HrX~tO+B]%,Yb+]qP1 m)n3kubUSLJG?ܱo X4ptr n4E5ynj0AiBh;U0$-Y.m3%RN{oeB6G=3^&yoReO{;OMԐ4 p0>*dL) q;Ր8> 1M(G.E{`dpP80]a"j3g2Ͱ%Ts6Hoܜ(Mǡ7"yA:/6 ztm*ՙEeȔ,K!f(fi -wVOqآ܍FDsUz(}hR8wx&n/̆ d]{ M \ ڀ"qePk0+x89D%&2$\~܎ A2bkNkc9*cy `1ڵxћ4QQ${MſnHmEH/"û.[.|2K9-My:OicJ{n-Z4>LȜGVᘅ& (%:k{F!,z:$iqX'O*B~,FP 0H Par K⻮؈('>i AFgFZXXZݡw*0 }1[ ~NFm6KA&' /TɘF"rp HN2*WCG^u/9Ē)d4* )]l6JFh>őVfhݰwnȠfb&.lg2Y67sѡj*eQ˨vgLjg42M|ƛUSrkΰ*ږKu3 wܓF -8wXutMd{ n7:XB6wD5UHQQo klٗڑY{pyL[Gzoh<֑Nk;uY90sCIe lT/ɹ65mJnkǪeT6Q INdtM sKR:^Q NB>~6˩@BϔNKRz'iĔL筁B4#53۵jRSO{zԮܭs8@M?yeEYȋfA>#'b-̏6 譵R,K*;sj>/u \ ^L2v3P)𵨸UxKieWWq-WC@ 2T}ȹ.wbUa,aKזsO( ?^|֯CԔ ȱۮqޱVD$OD|vrTd麇|IJ"=Mӓ4T}S H C9/`Zy9אeL[yq.DxG=E}Jzi6b\Bf5?r/<NuScxk;P9 v<(o7I \ʚ @]a-1S0nM|ŚhG{?*v;芴kEr0RWĐ|ǔ'ؽk}*x#Ԣ0"(*zdָ.qû";0@b#L˫?#Ϥs^&9~&&)ڄߣ~ݧn0.RsU`ܑu퍞 vEޭ̋YnˮG2Hflrr/T1C)Iqx+`  ő W:|IHu{iKOyR̀$c NQa9ہL"_v cHnfSFl)$3|HDQcRWýjHIp3ZHD"I@Cm`I] gAgJư"fkE2I Jh7zpU߹t8g peeQsBߡI $]1mj^lk oGd4?ڭ -R,՚!Wˆ{J[ Z,g fENIn8],mu)F}isn_q9. @辙9/$yVi7TIKl?HuaTL>(A{!,^}g"[7*-k:1MQʣ Pu$Ш|]]s6 LCÓ/tq@x "më3|HMt91~Z'U2 trN؁fFLBQ$iDQ,?HQ>QY?%=8-j؈ ywSe=9q̟T "[xrb_{3>&d֡4d?1xJ1'-<-Wz&RY1v 0\ːIO12cRDV$jו \@a0@<1hdƕ}Оj&\rzs+ZAjeckq[+M1_Bt+$F !ڿ,7Tx5/6u8_NP1'N$`Byd|rD\v.HQBY^pIjCK|:喇{dT..?ɜ4تEZ UFK8k*"9&Km[tir|5-w0c9$v@![t\Ti ?q S:g+)edC|2 +F܂C!l/#.+TrR3Vij_Ur"{YѽJ Mюa< vM dELܞ^;}4eCI* %'oNpǬ]lC)y 9$ʇ';Wח/Pf|$#nטZ^ƙ׷ӎ.?4'+W'oGT 4d+p77c:!a帛OV~74͹7rFĆN%&e)@to!ߐSeHHM0ӸNGK$3FÓS@nGJOۂI++<:Tmj5E@P羃C8܊)+z?,35!/7z'#u 6.(n;iN)@6ʵ4䌍Ax1^.KDٛ3T4 5fNr#3}— [ j=d}n8ݥ0{6--)7 .Y'tX\SHqز]IpUWރ$(ml>Gp0]d8@ XMY5<pn#f"&Y؆?tO;兺 BLu~>M'?5PC5/ukDj!&Q˿=6ruL\bvHFI/ W̃tȺNJVp$sJE_|aJGŽh l[K_uǟ%WyzHQZB; TߙRi,VX1KZu$r\b~`[ i۴Dz:6?ΧJ.6mp ]|te_rh73Llz)r%{؛Jvwhx@0·Lm[z$48&QX"Ea,u%jV$X k~v)替:b{9|T`S籉k8z.-uJ7>IG,6r'3V?>`ss:CEA=T pD:#=y8iuXn\!aG'@$\y {jx{#h_anFım&JK%K7[jA/3hH‹fLrV0h5CH19` }U6U~?Q:LW$R62RV?k +{ xѠYή,O~3,v c EUƫКˆcY?[uZJIKB sG(N#L$!w۽Wd9Eq{ɉP5x4N,V,cRsX?UE-nOL"^ed7 dcޗc$ ->JEb'7 8#~dJspw"_^b\r|`/f:zl*GϗԻ2ZE:'l'99 0@KCLO-]7t؄ a m*~ڂ kқ/`%E|(<n˛WRV9Z> ӏ8$U38V)!!wElG7j=[4 gSMEe&ўTI+框 -eNg&[DÆ}mHE;[.Д܇i%}3btD7MFWg(adhzserVJ<"uEIZ1+avKsH<|0ot$@Q /9ukD2TtA[8#P{]Fat㛥#,~qkNv:"&7#{z)LҸ 2mac$7|I.@Q!@x*t~5틱9A -3:Dùa0da PX7}hox go޷(r܉&P9؂GFF³:a2jd8_$v`c-+>/Gr]oP lK]ljjǜD4^Phc:?B%4Y64? `5cV꽁%?c= <`\21%qt#KCc%Lc۶m۶;ѱqm۶ms0YLO-ju=#vS!@"6"C}B|uˇ{ǃo~h?^nqE4fn^ Rz񾵹l۳&#O `_tjXaekA>=/;KtKb`M1'# 07.H= |W^u!էd']Yr2 5t$ӟLZao7>q:2ӋEr珓?msΉYHtUۆ7$gmgfOFR<]X?tLJ5n+Y?G)_\-9TqtQ U2rކ^T2 Wyo~?josa# 5܅[9 +H0{tNhs,2_è(5YyB0|:"Q[/SZ^.A$ME*^ԅA$CL\zȶ%=nl+Ϥ`U Xds`*\j[{,ò2!Wic~!)/s=>+V(L]Nb@1]h1x *D:EpX~5 A',/?݂j0@d7]QqґTZǘrͨ +)>(#ݑ}1N<_h*ey^{NpѶU6UMW5뺐ƚ™$5wpVcKQ`ս[cyEMeZmr({l/^`/{b_J&ȶ:6Q*kݥ ߲am+wql50a>y"[o>lZN&Uc*[%"(чaΒ+~ q66pã+O*5]<J?۰a *]!Yjlk)Zb+U71uZH|tTc.e[2.tcc=h:nNH?{Ũ0Ir}Wv^j8NXt.͌ }ŻE) KڼBًHg hcG1Zem!)D(pQxŚ[ܔu*$bO}t籸c%†LLX͘Jt[Rr0rN +U(Bjfu5rP$EO{G`EDѹ_u-oó׳Yw!Y{ Py>(ST#/5W 3;@~Y\bmZ𲟿[kaQjaA*{]S&2q?u`c=MHȎE()bgᙍaN9Fbv.*ҧƽrR,Y㣂[Z[s=o\dʝQdbਝҤМD,x)10X+>q^nl.=/2*-l:5WaԂ@k҉{9b-:K+h>~0G 5MSڂgS;&Hr65A9!}pMdTqG|RBY1N:c[5Ɉҫ0LLKb-lQzF"0&@㚖XYIǁpCf xlBW ~RH Agd*R?p}&rwDҜ'-DA3b j@!~p؆ doŇH⬶7cŭ_U%&%`(G\e&϶bF3@\b ; 7bU-ۢI XN; d|7izjNjKv”rU ?QtŦV!=x@60CvKOuIf:Y/m|K7vw%ۨZәlx/KY ѐub۔l<`K\_S%s?-z^%Ww,kAvv)>!i"<s6ZT8 ^Jˣ=is/x  ppP( :S_Zz /T9\LO^<wRdqQ5=dH2*K}SrOjU/3bo=2lʮK?kaM.]BB /ᶫhn/"ClXBcBB!=6^A/ڀgHlZ]R*FL8BJb%&ǹpLwnyY.Zm}Xm6kz=IIX\f}= OZuA9F?k ΪòvTvpNV $I2P' -Jʹ"g6za:raԵQ8z?\vV Ӷ'P֊=aSǞC9`@8}o0=qa $"bp\՛ ܚH0\VŦ`pZ{>}3[1ەF~a~x@5ŧW0˧kl/:Qew^`f  3k1N-r$0H2ԾH1J96͍}EC9wz+DU8cH>k^u} zyRʦY:iEQjТAj?eYߎ`rIe >k] ]%=/':dUqLMQp#0b/f-5D!gLG*[X9vT]tQaeD l=6cUH'J- 6Zbي7)_y7AqFBȇEy;z1Ž~zBoaA;V ; q4Y/??z2[^rtE,u6&7B yE9.TX׷΄ڳ?S1ËUvݛ5`JhK\3#S/i 'RM/ ͫHJګP߯"‚ 0 wP"oMeo-m~bcҾ ;Z5حZS X)W#(GKPVU`]L5IZ],;"[|gW*Xd@neDܓf# V8 "dg9k j3 a[6Ơ8!+ T{du{_U t^薔rS"դ)X0'y Фk>϶^moPao(4 ~xc[pg_@;Z* ܥ[-1c@fS>DO;NA jR."[a f1мu T# DV ,}]U6Ɨ}9rz$3lI?U4IS/@Eͬ`@+bSGF[%vhn)>-{'7Na6/DhÍnIsGowF:Ʈxh){ iJ_HzAKl['> D9'aH=N0nqӨ6IHY`qhy?DtrXWzd{ӿd^mt3X(MMካT+c}F  jgUZp/"S. &aޭ00m=?`Ͱr_ F v\0`H׬uq`?gUDevV4UM [ݪ@QZauyV}5NvUJ*CXC9js}5`89,$pmA3.;ro $"Ko~w7Jۺ ^J{A+ޛ~69G+xQH8l k섻76VD2}˾N z[0HCj>IHF8o0!)KpST==}s1ax}gl#I2cIViƞ޽UPˁ\h0c'@iJgp~uJ(**9+h2de`dSݛG [fEK'X/#pi}Rz9lX?チeĝ=MG!abi(PnTR'Yihr+=YYNo9s+Cs.pttIdjGj"1u1R\Bgf*ָw!R kE-u,Sܤ^"Kw"')ٷ{OTR^y~*gPMda@3Pqe?=J2;ŷeT ̴̒6ԆIt{ |~, rfM^AtM%p8 c/؆,/L ԗяdpX+EFږN)$-"d5z)0\%*TLhD/̷,ԈP\ųF`Dž\yȥ AT `:T5#uŏwܾ~FTl#YB6Lu*6Oʄr9 I~_^CU1ZᩪIDI;7y;}Ml䇢=΃p"CrQP[ݒTWnTcu?&ٺFvH6„(PhJL#BOQ@VT7j&}'3L:\ގ[Pkմw 7e*׾&$S® _ .D5NIH(BFeeQɶ@&O/'FRQQv!Ȥ/l@"7ܲΌ"[)͇9:-%XT콙:9jʴ,E~}0ʄRt OM3_ڏ$+I+G8A7Mp;Rg2kO B쯝81xc;FRY^EJóh:O #HMڙRPů>:NS2q=6ɡyy!+/hLKN7M<{bc8OE8TE^kb~EAID[5 EJwԥbܝ= /86`Ϸ z q¯҅C0Eqٱ'0tuٳ e RS|#$߿u sٜoStk:]MTzRz8  Hr,(ec=9#c%TINP9=3à$wL(y'?ӖӯtphMQT*"ļPA T8k6؊U(oҬ/77JmE#5|e+">L0X'J)TUw0 ᷚ),wGէVp%/+h[}+Y3M+}66A}\ BVTϩL; R_R|0Z&6@LvWHEu= /b|Ż^ed=nF'S}x.M6;H7 :n n"%&1Hh>j 4cƢJ9J6?EIk7UV:'鳕u&o0)3Y~i:{ZtBXTBh+b꣝-o#,l68ED)>U-|>TL5}S)J?LQ>]w~ ‡QvU?) R$'UVb8@{a"\DӍ3)U :NM) Q3qC9M޿|h x 1skY3HRE˜_#}[TRDvq3YQ~"Stݮȵ#JefCNZ鱅M1K;6~8L{P~h[:9W[ۄn45Z>`ɘ^CBmǍ~&g ; ak$^9w}Y4 Տ'0O;-.ȜF r8Er(&{jw|z"xR.k33SvfM/?ˈ5am+}>!Nu=YU 4а j%$m,am#%pو6۬EF&S'NHiNI3s#,Ԥsu卾4,xh >^WNЋ hɰi?\Dɛx%欗fBOuʉyDucc6;}; =-&[͖YEC@\} Sr/Bi'<"4BPuh2M\iw>>U% L;q)/.ew I YQrP2m1zj]g*[VsBap|%1[#dkCJ'EL&wuBF ~6]IQI%8lBU(_i ʱFc)F/< | M6Cz yGށ(И>[^(4du8Kw- G_ }[0+lZ4ijF-8qR+N9KQz,{ѬJ! a,g X/oS;²endstream endobj 10 0 obj<>endobj 11 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]endobj 12 0 obj<>stream xsp_/ul;;m۶cvl;mcuNN:sTM՝Z>ދTEQR:X199:> ⮖ )Ȓmi4Xyyy)Nޮ@kFSM(̼vP}<,흜,ANJꖖ% ho WVѕUH+i--]M*f@s͒` $s;9Z ͍ Q7)fenlts<nkWSGg@N?|ҭ>S )SqrAO*Rdc Ƕ pp2w'X|rA@G70XݜM?m9冻<`ZZZ[}|b_N_>AnVLl6A4t wyX+A4 N K+xf%'g4gUf#)oyRJ r:?Ŵ-h,M];,E? g~@7) dn25-,]큎c-`deӰ9~N,KGſgߗL|0HӛVt\qGQL `daOx8_ @*\^HYX?1n F⟙W:Z|.E]-e%>ece-swWU=r--,cM 6YdɣF)KVPV~ ozs!z-=*M+QFeaW?M}]z~@@Ȋ2L*l6_%v@`,tHcp_W>r6|tcD`:_~8D 94ndpfQdZ?uLB5Dv-+%eXeT$F1q1Mlj&%$w.BƯ fmg0MUU \z֝^1'[>ܲxJ2, הG Mx2HLK{eyq/=G9@:Ӕ9gAk }vf9|O>Aj;ֺXmpf!43$Fq͗C6b(ZLtϬ&3f8limQO@!>\7`lzk;t  aG4*%HXqD~,rW|p+E4&]t~QEi/}@qN mW"c/Gz(}(&D򁟥%Ĥ4$%rOQuC60Nz̯ʙ)(/kWϔ '~p]9cB%; 3> \d=$>KZM B:ϖ|H$6yϲVi:&W:@ށwU ҩvm͆F׸x~S} O Xسm@D,l)i~Z7jg!@,c ZѷӐ>}+*%Nc5| 瘔snb-CQ,|^W&흟7jdiY_mjoNGluhޣo 6t,I0,y r~ς&cS__lh͋\G<%3ݹضZWtu'[ubUy7S(6`>EXRlf\P9?JJ  kJbVQ|/9[ި)D#_#E'Hc,BJ&`=wHdZ},۽S߆#mS&$KP VrV oDǯ- nZp#vT}dɄvPt\2s͖B,@SZ|M_z 4a+A*]c/<-JX<.Íٯyl@;H I>:UIMHcf<]K;e R&KBp Tm]q,g@h aM~ŀ{I#nY<˽265ɓ!$tD#%ٷR٩v<" evj Lah٨Bikq╳SS~A#$^r8zF\'!򄷨猼Dq5l-lw@-9QL߇ybc!O~Z(]bF0H=,Hw (\t'I2׌Yc O CJ w;nnC1~ݾm`hx ҉?韄.^X:2\.L{uiz#BK=&VgJi|*= 3oɞUã'vlx{ _INDCJ?KDO~ûc Aφp#j0osemT; K7IlvJ&tQqNnVg# X*ͭBCG߻t"s5V%/qrS֣ţ@~Yj#'M^8^jdHluw'!TtT)zLS|s!xXM~,])Kuݿ+DI`Hr? -H_$Uf97Ef:-lhBޭFە񊇛yGWlיy(0Zʪ@t%OF\.i2c\Ƚ)8G UG?T)&N*BjG-'HPnYكin;f@v57fM#.+=m 4E?<7ܧ@yGO0@͑a[ֱqͽjζ&TY_ ,@@}c;SĢVAU]iP)38Ma?<0 -8FsQN YmLiB߻'1[̒8>LdEB<%ĊD .%GPcK`@Mx;wB;N.V)G:m{Jgya762G{@]C{ij8 2F%js0V4;Ja,%(J9l=&qK7b/ I"t (>HE V2Ww4N*dO!4a*.˱kUMذV2h[_59:EK>c@F;v3(:,, vc R 3G[oɇVq-5z3k#Wiy*/dbjصsBq1rE;RE߉Ff'L%&8Hu(Qrd֥nWu_?wmcbiJN)lL*bwr&s=T}\7t.ZeA"4$u|ICum84f98 wIcJb):CM}{ &?,o o{>'^F?)a=UڨAEJ/ƅAO1ğ5֍L~g1Q<@qbYIr A4ZCI4P#;k]x=#H_%uZa6`;e R80Ud<5)f^4]щ|k0ƵoAz#G|(*bz*sZX!̇m[qG~🎼BY_A^;HW9rz,+2P=f6e w}`ķ'˯(`6?L<7Ty xd Z\Ӯ-  Cː #]jCX'Bϊtd):uHK!Dy_`\jk'*wOiw8ߏMcx-tp2޿7 HK& D=Jrx-*oZAcDŽHQ뤎R"`.jѩ4ɏ*_ *vGy5a̻B^D0(M {£1oK7'ZQT~W K=!jRuU¥GHs3kӃ¾B׎)6]nQNǙ#ʹ.+jԵ5Z_8N",;<Uxs 3-[4VRzOj9S9P@FDKzm8(ay,ACoMQ%ɂ V{Ck M"H4s=)dUzg}io7(D5*#j? 1H˰0:ȹc STZf9,Ɏp6rFqDC%ˌ{/q׵]dV](WƜ>o/kaɵYүAmHǦ}p%B{{X~ƽ/by28&_ı6 04Xx3GGPU B 3G_B?)'W0Qp^3nSy"*b?o9  HְZƒ}w,ǷfeO_4Z.kTk2U?;"H"gJ }Z{;UHNDʓ&1;{i3v.51Vy*K7;[N=&9[̇0v<>`?֟ -vX{@9b3},yd'{yKVUXż:8cQcql  2YR\'Vhi>r\Т)_8c-k^yWhՁ)ۯҁ1!F+6Wz|5O HRKwb ZȞOV_<*. W6P׬K$%MكzG^x}44"ԭ]8-9b܁gv֪ydXˢ<Y]ƖESD93 .IRIfj+Ly~n`Ƴ(w#x0UbՀf _G6 U;#qtӕ٧7_]4S&W8C{;=ph2[R>ꖰ7C_CJne5߬+Aq-T}gB&*nF tPC0?bvY9R bd>&Fv~љ)UOd53Ch0H`,}=d>g{W(iq!/Q ùZX؅qUz 賖_p$ǦQS?ޕ`'6y'^.(eQ;"jnyٞkfܛvΕ3Hޥgi,4de׍U~U#Wt<o:B턲ɚ/uw+n0$Q~) vF0|cby-YXFwz77S^kLlI\vʹ%W,E~t'dD*}tAB-oC=8%ԩ/8i ob#'Aܑh^5䄑2y~TO-C3*ᶸG`<%5Ġ2¶K.b f(~2TYkAcjV1 C8+ , Rx̣ "|zI%{ISRC;wRuBI٦*J~nՐ:~#4FMÛE}.l5@2gM6z^WOoi>`N*y%'s].g%%&(c/,F@53-I,Χ^ίRbsZ] gK ?iLq(?g*1V Y1坠cvߚ8<}n;93#DWm3/ k6OIMP!E=G=PͨL)1d5/E]cO+:TyuovĂ/)Qu'8bdʿ?B "3zU7(cPJ\}6PaI QC;&jAG3ay}P:s;bB%(z> Ϙc%޲h S09j?l6\duc [lcp%7>ghm4{C]X)-@<544O]g-:.ym!910cKܠ  ?B.'GpCi(lq{XGX{W]##[=gdw99gg"wTx_LYߕ/y!aίcX+R!6u@0h8{kqa)?yԑ砉ks S~Y~q:;vVV%j]Usbemr}x얍2}$VF%ټ ֖壞b6Bp= ^_NB2RGռyVE|6{k{c1ix65;{<Hӥ]*N1U~)YA%CN ] i1\hTqqeMvpM R=f7xet$K')iw {c5z]t41-$?afE_S|OhqBg &WY]RJcHJ:Fťq >CעwUU9%9#З*Oĺ3F|SB>i`:gRr8*/ ׿:4Â(= J{e )v(e0/䦢TEiMfij%ؗ"+ ]sd!A0 DRaX jZ|[ >1&oѰ 1eև 9)>\\^a/7~c}R[N3W#ԙ0C@prAnRyBY4[ъ~V ;T55_Otu‹$Zɸbbyd.#6R]O8o>;n^+Hջq!'ir?L>@1ͼDlC.tmcKڎH2уj ܟulwr|~?S3Ќ:[,ĿK IPCe&w2Ûv]~B-zggE2k'qK;lܽk{ kT:{rd;k?'/^4/TpziGEǞnEZ0 z >\uq=e=&%bW-fldjoI***ξ QV He+MEAC-d&=i*@7 9iTǚ"WB$2יqAT!J#wavQPfd[$'"-9O~!l[f_pME,cŏ;\|(!R(*.#/5ƐI#-ju1\ퟓw͉-Njp\Bt *ZX|GTh@AY9$w|i_gG;TY4$SWT Ĵ @v$~fWqCਏXMdوӥ!=fI/{9:'AucDij:HCLL.R*gږ7@(Ư`:W 5:RE9(x/>1q/M෩nz#%1%-qֹ:ns9hVS,~9=q}ZWE9{YݭJ|-ECPU$(P$GX{pd͕iƿ^3wPm]8nwNOA{~i EYF\mP/; dJ cl_b& ڴriu9rs0oمZe7Vh1ڙSg|l|Ş6dJC?-CS+ltf<x.m|xmh Κ2q~$0-[ccNږ!D ިp6V0 .{a( YxGn iNjAݯۻ=s$iv.82 4Ҳ ~5ȯbҪ* #񊤽"Gq3 #5gs(,^tĵqF0Iǃ R=NX2pi]('|7;P>$d\V/ǢC7C8̟! St$R3d?#' 4;؀:NQ/`Ԋ$$0`+ P}NВb]3:h/n4*CݝDmtd/yl @"*<pV?9b[-k'NvX\0w4ܪx ^>G-_ޭ@Xv\ "IbbS2Cٮ|b=OMpng6-uubHueP_>QE Sr?2ՍܫQ]8OYbdEH ߦw*!QhdOo}GN$puPx˶طwC̨]EZ?x5a\9^?paҘO':}1~O@0$^kngdeTxg)+2"c2_!X`E5A7Oc0)6VkΤ;SO +Kl0E<-bm\TRq;R9\iW)@W}mTcC /e-m9T4NrKM5M Bg~88_M)6{~_)t DD7#Q/Om  q%2kLZ<$u3;TsS1^x@ͺv^ ~jn?=FL*u^Ms1l; w1p].M&NZtq ЂaD.(T]+J#n>u}?EX`]hjn?%I57{jڟ\k{O;->mYZ.8&hE(*~Ytz9qD Q8UKPd$8ǎS4 8d`˜ezYL F9"Ylv< CFtJtxHt MTMaId\_ڍ\b^-Y@3Ekhb X3>X]\"9-GY0:a, Q/CI,z'>Wf٘K'*h A]7jXʍ*H&WBITV&93恻S>5&銍F;9G,t}l}+K-AB lSɨiwZaZXH7_cP*.m)$nRټ8tfMi>jj!ϛZL!4ay <ؚi9"qbd3$SQ]U>(22 Uee>Kэ%)<cAR}.nI-o *0M>s[XmaR`t^T́r]B̋L])ziAwg?nWDiԾR9^̕((4l>jA#';$Ў2ebwd25S"hrWn%"`<ْ Nnvi9ʁ]Ey룤H}QA]8@sxabnhRb(UKJ QdX֙%X-%}JugsnMOpÏ ƒ$F~~?bke8ײͶSV6hY/Ux1,;'qQ8̷W2 Ω:>[-G݈C%jR~Ga'3ΜByϴ,F51 *VW3w?(Q [Cr4GzFJEXun煡ƈ&nŘO4t?NP qK.yrfK@H*-1ϯqZmv{e8s.ߢ^cGq"3|< [odxHNyYL樿xM}et=RbId){{,[Ko)={B EVU790HhdP,@}Eez%&+v-^K.r&G@ %8ZJf\a0پpJbeB~ vsA@j1$֭T]_=ܩYUFćNMqƀd^gqc#zͮWMELU$8X KyĶMʆ*bq$n zM2pgy{*,׻A9= s@MV$]D0I UbZK޷`AWkp5w|g-FinP˂/?| P{'> X% `&x0|5䳉-K1P)+ bb$|P갻3,̋>IiqWH5m*j[ #0c1r|Ѡ߿[Sѳȯꎨ0ĕPIH޽m-e]3/nz:(]A-z ̇Z;!&5W /y;s.|ILku.2Bk<}wLB-7HN8)H m[գrQF>q^" F[ʋSHZ?4n(DY'Sljh OvO{x7 5ϋdQ"%Up4VWo~r'.+UtFn GHfHɇOW HSݵ't6Nc&m0?_sSV/ǺGAÜ![N,+g \"-DT7I;\m3RY.'[ۗC,p.r- '݆IMo 8{f5D1Bh‹(hGeޞ4OCaFQܧ%B.5;A~T"M 8wSP{u+v\CG!$5L0@'9@5 Ohnx$1N5/%2}84Pkr! $`F%W/Oˍp84YS ꩘"sզj}] JepC!g2`JNhCrp5[L~ QZb}&<{ļr7 qtd@!k!?ke\MCJ\HUmw"A)0 -č`k_c~^mIdI ;vCp `"/p3w!@_H6 ~:dҧD}3B>_V{2)3z@v 2}Xԅ=fh,91NrpfvkEq=m5*8)|kyuG{<;=3@_qphR NN3=p b^Li_ G=;#5rRdT9ѳI D&ՄkOd+G@?Wn4@}Z#3NEBg=T~/1ܢE$<}'J0e0m#n{3_:AfAlhHK!L9ĪGEBq@, .;/ oz {`V32`f+{S[1ϩ$SC+AvNߓ$Y+hHamJ3Z=9ݶOO 6k r ^xr\U`roMAH"IŏDr*?#>UЁgz{#gbᶜ+A]e8zLYtOj϶ Ѹ癣vjpu??1c)f\?bqI???pdhc1M%~#/GEfD u;5rQV]({SńC"NcmHqkt}w/>[.Km㢿lbPM(Yu4k`NB1؉RCAܲ[[}b}dѕmiɻ`u;[l~mˎ{)GJ-m.t+Ւ?1QKCџ!KȠP_*@տ9L~A0ޭ()h8YWt\ D [=`+juld毬tzuGW& .ʢ΁Z lSYgIMU (jf]Ԅ2)o1:Τ?kk"_W Th3W\˸BBş2(#kˤm>AbOk}$f8JLg庥i&-U7Y=X&shozX'2( '/璄Z~\!ׅVN۾csj|8 5"(#٩ j QB9]4O Xj6놈NC 9]x_B7)VWq3m\=?y(kzx4YGO2k29MX^N?? ) @^n)aq(3L1ሹxAJʆZJ~C&"\r"sG )IVkZ-*UHѷ{N垃yA3TߵQO3З GlC-.$rs"3>ɏ)g6ӄUAB)z?7ScGҍws ӱF!@nt[+JP\' 8/od;bG]GL 5%z!Lj@& +?gcaf n|lL* ^#({DMx';z[7ں:^Wc&gU|X4\^~qݶV#yKÏ3J|4]Igdg\!"/ۢgR!so!YGAis_8T޺U"70m@*}x\W$ 0 !+P%9Iyd+CcLBk-j^ w{$T D}M=U7X Ÿ#@UO˽N.8ǡםT}vt0.#ѮMԕIO ύt'iok%hI.3aS@WX|ƺ; Ի@ FVebAGP_3jKhCӊW%L2q!0SY(K_U/Kks`6 tשY6{CbFo2FtXN} OłБt 1I,Ǣ|bKP]gӪ^qš𭶌|i0i Kt,Vhy%+ϫe'Wc1[Ag0,֙a %H%674bхM/Y( )(p@ˑ~VnAr}4."Ttf"Ѹ̱.+@[lm)""mX/jvLϩiV\PS9b}D_[ÃMiŷ OWɮ#E޼}3Tj*>|Bt5׼ȫ=(zw(ED]j8q*[>qFӹmg,yV8uSUf)0Bԟ\*rbJ+g[.$Ɩ z3F[g4/S[Z}vi5|˳ۍו])d:wʲ(W@kE57[{|78m89֋; W3}Ejad@RfR<Þi(7A#po Tp°΍d3ulYǐo='E6eM%uz'_E;iT-KE0_gfB Ls㣚I/?J&:zW!zZm~ -*~آ\b{g_>x'fjUIF`!JČX m}qk <Ȓ*V぀ME'%YUTGq=ШeKw¦[ut\F`QIS\^L%!Dt3OsgO56>*K3$mcr9FQKu*(ᛖܙa*֚jF@3sf Ds8dqwf5Az6.*H``^9Χ؃!-jc(R | ˙qǹ3QVvHH~c[@#"\{_Qm~l~6k+yFP! +CeD/0Zr4 TmN4=djN1ĎR>\j(QiT{3-t*d UHCf˝dC4w L\n֠ *^6YAX~S0¾5VҗO N5'%[V*oO~="Fkʚ5y*!! m*Z(=`سaM@I̹vGJ0X#xb؆PӋ.77o>@`ЕrXibA5_,RPy}v K4^Qu QTlke0uХa,a^)Jo=뽋*/H~z rJw>RQ<ܕ{XPۑEq^ҫhc+RO=uƭW&KN BD )iMZӌ #E8]cWꥀd#gk'Hvst_LY#3 g067 $іev:(Gu99*)0êub]Y"MU{܈v2?v! ,~PlQ98:2);fg}_s&fnQpbCQl3/i 3CDa;=Xk"πyui#RjDhUoX~JsSX<6R ˜0.(n1p`O[TN4M/\]I*87z&3] 0`x\U`/ij0H Tw>ayME_,Bn] Y0 h+_pA=0MS5~WNɤdϴBqZ,eW8 Dl?s5ǹQ䷾_jN G̉GAK(p3 eT/0W>a=]ϏH;yu ρ搂q /5l9: YC_Q3"*= a>;NFzZ-1daPc~JD_e XԵ75:oZwzyd2+H.6P oL["'_Yig1g{~x[Xń;IX7O.:~*vP]M yj> ӑp~S)"( K8J6>e{Ml Z"l ]ná 2oV(Զk4rS=3Ԑ2WB\zn[Upi .^Bq6=I¨[i1O‘)I;5:]fY'{(RMfn>KpP=TZj L/5s?$"BO>k؃hp\a7H3EʆRWW%%ߊʦɌm#oۍ*7jPMcbɤ%ێȔ@d!sxo9j[ !+1 `` J0|Z~=5.%gig*gz3_W)8Ɨbf3 '[tZn='4Gs6C\b@ߚ?%]'n^Gx9dsT6}ORLv3}ۚ'tml nBl룔*$"y'MVq>M| w0cuX%9ph8j,R9ĆtO+x+QnIC͟J *ILQ6M-n[7[~ Ū64сC9r` 'ϸG1 _\\O?a>hwϝ#D^b=nk엍%|jSd<ߐx$5 n_{qt(jY/> NGJ6v0G 3X#d^K8dXY8ȸ$Iv΁@bb1&D6D]Y1o!ue)4 [_%RcIN % ']8KhEGJ_uڅo:߈,ÃYc0|q&p2vBe_Fԕ*O֊ /9f4=dXtUlcG[Fv]c85M-ģy`Uj HQZB9Wy2-g%SS~C߄WrYge/@EWۉP܃` K HAN@BߵT:N*@Ѵ 4h(NsQاvMD6%¹8:~"Gcffoo#|;u@b*"8W ג ‹ [BxtcSY۾s^;[seo+U5цW5p#ߟ[~4P-)=˸30StxSmB. u4I.9E ia3c¨{X/@Ո5mG }bpodnezmG^Mfz$iQ#HmV]8@Mfj .ըl0QNyVh2+8?.hG[ClGzÞ9IdR8c=T 9[xer̖t9x܃‚*p, |7XڊCxm}3|e!NA_g?C[]n=`4rzQIT#zX6LcF`qya4$^ͷjK(A܍{>R{iW-*|UMcʀIO `U8|SMXn~ɦWj,2e<vj ޯuqe Uo`)'7|Li *>1H}T&m)(a\p<=8ҠoLvJ1Y2o?45 VLn az/%xItU%`_;@6 l&ۺް@O4ޘ8נb QBLг,Ibjo}zz|=vj#@rq!_o+q4D?b/RQz">? oBDsT/&B^^'n`H?b.߾Nر{zk2P& ȫt f]zii}StaIɆVHJR-fՅ15^j &.ʔa&OQZD6<7ܘ?36P o~㛑\:+\wMJ+j:@bk%BSu]ɜ8 II9;nkW"mL L\=>{2(HjYyVBVఈ{u"/Yn|\]_j%&aolܘQH64Ӳ_F_.8l((Im22cFV0z~ݳUn?\1FJj~XF:d 7$VL\M~#0d>)r6IAKk}8湊Z,ھp^Q_H| &DyQY>JMr7>>W$D9Nٮ6V=]I$$$B}Ĥ1ܾ(E|$^:z ϖu}[׈zhk'Fx>ùdhŨʃl{&c[mW5&0WU;`{? V(#W+1`W7d4^϶:[eQBq;GFR5?Ӓ85Dȧ;C" R0x"0u)i+ix\`fvDN]EWс2[$ 48(3QOmn_Lhmd Kb^9hK([t*W$37}p˱A$7>,"WnX3^XGòMIϊISNș9R&02ݢ*(ϒwT́xԩo03Ht;P)$*tz>x 4~O[AEDz0SIz3㪅U͛\\Ԣ7[`0:(JC7v`a +ΐ*4W~ucV&;8HHJjGT*ipBWldlrEʃMO;}[A] *c`a~m?@.iY~WP07mF6V2" yd1NT7s3ssvzJ15;L52Tz!oi CzOSZgJ\GtuCĊ;${,?cAh]-r8|ae:̒j˷xvAxvx,RQH>;sK¹KQ7Y^jNQIT1& BbQ[߳`cm+W+V~$oe…lB$S_ulqɵw_~!8 "@,5I~VSvrB_xAA@B+&۫nc↠ScYU$GEy7@ ݐөA(5bJO zYh6(L VäEn~plM9OKo^{x(0=>5Sd7wR j Da1Kи^YeηOG#݈B3SH'ҭ3Rq~&tG$4nHFm`b03S 2Z%X/0"jzdɿ0~rX}=\nf@ǖ<05Ugaf|( PjF,-P[7b=݅\jEmoH)'0N:-22PصWYg_G;υ L74MQ:[c w 9A X6JdB ~1~'0KM%pN?iIER0#&-(v` $) m=wKg>ŖlSZ; 'bձ =!ɓY/((Kؑkk_l { (^3:!7swa>oK-j@\AٽkEy3SkGLI(6Msi-h9@e΂i{+{fu&Ti{ФTN{7t⋫Y],ftJ[m vx\_6fƎX5з^-=JS J~fʶʒ"81/t:/J_$?;"9<12 h+h*) ;"\$%߁BvY-~uG[mwʜgu3gu@v{4;0.E-V#dpyگ>f-[+he[<+ r~ϝ_ȇ _SՈK9,WT}<)zRIk*8h$ (H EƗwwrV)GrK$lba()ܫujW%Wy?k#V8n%5Y ,0dCt. )ǯm[;/Wb[M{-w%g(sBK N#SET^2DE0 % 5mH5|5lWq,[ YU7R0M"=/+cYMފm-ߐMj[˖cxѐ=\P uiʁ4-z(i$Hș02M X.[†WgzA؋˫ qf^r+vDE6osKZCpnuTFM☤L5%.NoO\m'l9DU}g@gtyjl Zhp=+cX o3浉 uɃ<%gAfA"#oK;2`ezX_˛&tw8#gf<,*[{vfX\ۢԦ~lHGER -Y'ݰ'xL6*- 40Q+~J^8'wռBwOʎ_KGR_S7nmJpI@qz9_@)2ϋWg!md4]q뗉 q'\Qȑ\6?uln2f( !6d3/Vv8F/ Cd!3ZCF ǫBr*!RCȻ*z{j]YL ȫ=v"!rv.6G*Kᮋ[KVr }%dqiqq+Fib+|䱏_dHIvtD=U.mm?,LˆZ6tU3 b2M=kqni޷Q{ݔӕ9.%zFWS-6x_\"|=`ř}G727HX(eI3r\90h^^O=Y?BVdtǨuKXvK3bKϟ Egܜ&<]zpGl"F)g@U}3X&d<1%Ė.9q{0 ]KтA V9 R+G[ $z)EF8ʘ(Wh.꾶R;k]tp OmG$/ R+aeeiX_!%Ee폵ݓA7L9B.* ,ι]j=z¢f1DVNy4:4Ni7uOa9̝d0J!>aMFz-ߜFZyYa7~]7Pc2ť(AojkC4G |})&|art~`Ęo)vP78VjY5 Oncss,dhP+ 9!L3;d1[c7W W-̳-?[8d [ N7; - AL[ULBMrN݉8l#0\f%Ү=Dݳe O}pj'/2 v &{'=̪kۺ!w(nSǛs&tWU"^afu*:/=YFAԘ#jwΉDUꟇzR'R5dHi`6y-StJˋ4B6J Q?uڝ40uc5'5*g'GٵD#g={dgJ7 yW6(v}"pCsoSo2o?BSaxxbaIK\G{K P]efrt!$loX8e5#^YH  &{;g&7XRl&hj@/)\D PE@axg/IXeUi+M8{D-O1|wtokQٜ-Fm'aq@? л snhTmEHmە4T"4< F8;٢~VCYT}Ap.mu[EOr< P]q\cPc:eQ[h"<Tlgd~5ò<@.ui†LC Y NXo2 b$r>oj 溢NϤHT$h̭s{V6+nM%O#V#Mƕ#M)|l[,[./ciaѠȓ*, tsҠ1,Ƌu< jx~;$|7yxd3uiDy.}R9Md2+4ngߩ(vi8mnmBOz@S@3U7~q`IWC6 ]C y d)q g'?1!DYI/Xz27x;ܗEV_E]ȍ8t$O~%56?ùťqN,|-+NU1"QMSk=(zX])FYΩP0Q ^đ;UgB)%h /kSO+ntG&mu\-i^ Z-  eI(+幁4yX%oDS w%'OP- Wр^AsVޡU eS]p-`Ҥ6wHٖe\vԈ^;qq)ݟʵ3W ,ZFBqA>xol^Dfc{v{ 6t2r0ˆpRͧV=k PEkF&O+hEiӹ"G~ h>lBpJD /gZʗ^)X#HNh}± !*J֢C"D2;nj+2-qv܀g֠$MT2΢/R#,sGw|7 ŞRǵY4ȹl;W0ɴ\spc ʋKS%)XERPꄩ+u#-4)odv#saGZ?5 ,5W3`9\i)Ebڐ(,tLqBndD`oP+Dn$tCQAb.pQʂB%H+j6 {BaOMh^̷i]~˄Dᅍ RCm]sXʈ&,,&-gsq҇>ĵ쒷8o_"!Ŕ)BD~[[U6+=J]M'_Cb=,J<<_^} BM&6wj3cF1v{A#APe"y*KV0t5X)2'ڡc;5~%?^!3Г`(}(6L`T7e S=UJ/Hy]o$`q[~dhf GUd+?_J w7Ͼ°cZ'K࡯K)$GB{WTScpҶ!y"{C9<Ȼ=8ɀّwBW} aLh{F #]~8ҡ_$ʐV\> /,iZ}*"9ƔEEt QHJ脥7&;dZsZbq9g{-R): ydia-~6:S# 3͝Ib,En`U$P@ 0 |e׫32*zbldkR+һTq?2.$Ή9 Wptg.Pq_/ =$nϢ~o- -،6߈-;-f:3{ .Ku2aU 8:hxU p dY F}(ͨE` VB֘ yŐ{&UGj9=ZxE M`D'1:9 t]9a˾W(Is :!:WUDPZmAUf=;zǨa4x25\HBO K^pрԗq}TeT\Xv$2)`X1K=GxcC¾tX0?y ē_Ar|)]Cc4$M[Z(n u*2ٺzdnȲlMnEMXq}5}C_zP~c ^| #)(]տCzYeŦP Cٿ%m1bdk X4Zs^"Av̷P& $WL}:>#zhJWd+cDvhHXVG\RסP CcD3~$«FM.\t8+y_+ZCDIaA + apM[w#-ҚdDI qL_mN]L:-|O%c>9T.:03y(-( fb 1*98cɕ14)BR]%ލ7 #_\ '?MRUr̜t{;!$%n;d79I~ȲMA-$8AWN\QFvK%Nޖ!zP "uk3kbh&.0`Wdzly*dq4128L$niaOD|Tj9EpQGk!-fJ1?ԙ/ ݴz[n@w IZnԇ `--Ynv7T_$5) ٗ&zu>)2'&ӟj0vmAluJ5 2o9il mZj#j|gW&rRuU9 x9SUW)Сh@J%rӳe «a+NjcrīX۔>HЮ [@4w6Uz+ ӫgFpWOz#o '͛mc>5:B~M15eL2~U'(%L8B"OniH^C`X_da~jvֽ S\3)Pf`\-i pBDP̬=,ͺ|Z93bƆu[v(R'lX`*nHK|MbIgЇ=_'ї^ m9 .V@0zXR|rIAb`rE%+ܸx^MFk564N,xb9̲Ahs4"ֳp/h%DQG+"_A,۠b#v6m߾/=ag6d"A.0'QwjYXMy5a(QLÝzO0O"ŏMXe"C4j?^k6^+pǶ&V Vv7Dђp ރ߃ j2d:[ifXT_.*Tmr(]x!Nvmss ˯/j6$#E',n4x5ڳ]!,%=HaLlK}\]ı sQ)7ˈ`Qe FCs|ρL+5nSY9 ^&Iwi|>RGL5>R)j66,w2>&~Є{@Ҩ?XG *M{Xhk0 7r+T|FEƺ@HvA}P$F% 0%8;2 ]-v$Šܐ3r+L}B0ՎRta4ܔ'injSԾM#6*µ?)svw{!Rlʋ7Š8!҇G I7IlصLX= 0˘讙oo1뒘#ReX  aa8l\X#zYJ<3_QYslR>qDY`MkSd*\z \f|[lVe ;^V2_@8Z8a+e^)Mg+_nI&ݯ0{'jYXt"'9Y9/Dv])l,kLЉ҈Y:Y|hC2?x)?d5UvnU+KH !=y[nBPeUa+'X&Bya";FGd.Mv /!gvY(gŠ{i9ʽ/r f|?0^u>xdfb&j (fXn6D|=Qr~+3A2ؚJ6)~vbؚkMubBZ\l6䉀Tu-o7 Jve.4e`@|EpmB^o+XYSjGY_K '.x۠ 2+ċ |QuG7oٌK?\`Q_6=(O> 2 zb#F4 aho /iL嚃SR:͢Hy4U J|u3AozWBVB)q֤)&O z2E :4cAp]b0e6̨iv|RFK?/פs57KbElEexOQ)rd)FM?hkmE}gId~ܐX.2U05 <t&&bxG ܥK+#Zӹ(̧5X+fFSW@G<5%fK?ɟ[/\}'IamE1'u˚D\%,!<`iW)8!?t9_?K#0p0d%T5e<ꢂY;t?2#t-yQ>RcN| V 08b) =ߘQǥqHZU?rz;_Op g:=DI·*%޶1E'ɻ-Uq/kF>ݝh,gE)k_q;eԽ8VR눏m07lV`JH]ꀩAR`nct W4T wO! 0/ +5"3q $@.v:2I _,5rU'P7K>Jg@A1e"e]!+[jmBPBeNޥo\?}aH_6ӭh=̳ cJ~<_z7O8)8UFV,xkZMP5 %"6YH6 >ox @>EYt$X,cTeFh5wET?UvAQ|Q 2Z>nk#9Y2/yԲ4Hk+ Fzd0-,;iv~j}ӷ`ug7(^r5"]QZ[HT&C7U䯴8j }NCKi4ݽ z"m{/Xl"X8$bN0 '1ߦ;7W@W##`q"3R0 : 7#>tKA} 7 k=r,HS]e8/vm%snr1'?y RE,n>y _gob5%i`~ ~C]Y̡{E 鼀3{Es'B$V3x[]Fe@5lyZכT{w_T=8v#Iʽ]&_uuapǏM0ͿEJ&Mé?Հ|o c-Xᴲ p[:RbPAZA~}CwMKtpQ,tPg@z%;& F1@Vwڼ @?lj5[վ jr1Ҫ_s^ǔ5<jtETuE#6Uxժ8h)eKM>endobj 14 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 250 333 408 500 500 833 778 180 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 600 444 444 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 333 500 500 500 500 200 500 333 760 276 500 564 564 760 333 400 564 300 300 333 500 453 250 333 300 310 500 750 750 750 444 722 722 722 722 722 722 889 667 611 611 611 611 333 333 333 333 722 722 722 722 722 722 722 564 722 722 722 722 722 722 556 500 444 444 444 444 444 444 667 444 444 444 444 444 278 278 278 278 500 500 500 500 500 500 500 564 500 500 500 500 500 500 500 500]endobj 15 0 obj<>stream xct]&vvlv*cVmRmuCU ڎL#lEnV&\=^ BXfM\ a$,9e/ߠ08cy'T.s~cLa0f=(IvN_}tή8À{232)묑-eŭ)&58}~"Y1`vNjWxa}vϡl֯܈y2:{[R+e}S?]Hl_!M?t ЂVf E3Ģ/rŚ,,qű5:AXfoO\ <}q'1bN1M"tKv&K F'>HUg@P`9bU |Y|q >':o u*2*N8*t.ZƆ'B^{X ۳.%4s~Fں!DgEa5ug\qi^WX45$j?ƕ^ ًALbyi*qEc^AߚaqF2ǑA}U|o&P]5 Lj Nba bWĪBW(6`F13mwK$X>&)޷]t[@3/G"et:,;8Zf4tnLDz +}ލT9tyh7,m{ Ϝ:vA#;vz|bFGW;UTM.*E>Ndğ\xƥ1 YiXz6rs|jQMi]f|,JAɇ(Z^AEH"*8cacDn#'4].uvy{e=:Hxs!=qth茵bD~=}THbѰOS S`-!oZz6m0K M`6\\m{ z/~ŁwT;dr?ũ Agi0&gPe(C^ &M3`<>!_ ߖZr? ޾0k(T!6MQXVYۄ z8`>N]*%k1hQ RCnس.֝^y 4`+-Q"VEFɖca LD{?mG!ѽJTHf C5Ck ^T.kz{Z֩;Bum0Ogb6Y1Tk8|Ǝh^{TGQO M.tĶJ7y XkxX;Tˮ]H%uO3!1@/!\giROt/"G@[YK,]WROeם;2@zO! ?}&5M !G% ٠8bqB"l8 ГbT:=S2{!Ӳ?Z7lU3lR>-*^xa?!e=z;{vEN@}%).j+-)GGa߉%4 ic )_*ZoJ29t'FcKEy*WՃ$kj!L!M+$)j ]u:XqV Ex,i9oodbJ  >]4bP $ׄbZe<5A~;G/ ∳ROϳ WgȒϯ.P s1/x1)/Ųmh?St )ObCihMMo6V}4U`؇[v&$ 7KxjR4M1%[.eh36mA 0[no{ƨ!.<+ܫsx88zj{H3GaCA'fe]qOMx5RD6agyU48W˹bopBhlM3~D-LXԩ1y_p.NU vxuteyA&p2&uerkD5!CY6u? lf" QfgJ4W6'k)r<“fMVʋW/eZ(4\ml\n{/ #ѡ8z{$, Pֱy% n 9Ez `rGBiM.JIؐTEK7ߔfVl1.e촕2P6FRV=ubMIOqזq:M޿_G _ջж3΋3 TB4Jm! 4MծF=KXʟн|[SՄl~.1f^~@ vcWeK R30=4܌E˯05JH>Q)P";q*| ' IGc~+"]HҮm3D}Oݭ N&N,KK=7Ba@~*6"N tE:ʶ<\-ږLzZ!ޙRTD~VB@ Π]= M?24'9ըmq'h-fN84&vk..xE+q1 ݙł-4SAΥsޝibZř2H^ڦ?A7q08mDVnVJO'8C7ng&l13CBN%gS )~9`I1oYspί\]5+YG%EOby9e0i,}9h}4„ɀ`z90sTI2yI.xk ΩdP@K\ng=dnҴ8jTDX> P\$!>#nCc}|G=bJ6"zzgAS/'k}i'TeZ7c9bxwv,: 4 pؚ5^gxI`=bM:}܅Gylimgbh9<r=a3W~NdaCbxW \PH-}3au87Gw nG,[B3Ν 0NsJϚq><30Hĺ#0ѷMo1Cc"XmvHLFD*SnT 2g vϸSWUg0[Q{Am 3J0>Kq@Uvɜ't@M 3X^=c" R/^hݞ&̊Y )x=Xy  WTN{Uf ы1mU4Tp*T[M6˟VEГ頡QH E'oWY*-636p.!x^ѧh9K ͘x߄k/w|nHH>PFI-T IYxu wS^FrPVån0*wU@Ead& V_3 >Gzlw TGC2#5Z!\Y+e#V Ӌt]]ܰ5?U\A>,_ 7B!%Yj 5{ Dnjf{VZ]CdP)Pԥ|Ĝ._ 3O~[ KIm'-'r E}y"ﺬiWь+|[~N՝@;’n TpT:J]k˝v |gVccD2TtbaSe^@eĨn3LFs53dZ:j'{?3(ӀA:Vd/ 3:Qm*hT&8;9-{hl9YM C`>6d~dgST}D\5'qDdep)&vhQ ]r8%Vl <"ݣ <ֽ]I)o 2hHmѵ1k/~!>x6:ܷFc\>=¦,p?0m"ҌB]غoݥU@)֘F7!l_)#+Np6 ѩVWUHC2<4l;,u(>BP\$& {ys\0s H])b3ԁeĈDh5Qc!˦=|R(53. n)Hx A:GGNX7uT[^GP9 <Ddc;b3R $&reswB!m t9Ny (N3Aϥa)M睴l^x _yxYK isUMMEG#8KV9+@ݩ͛ec\H ɨ2Ss z"hH˒\#U -tCLPb_\P*qU -$7^KXVx?x\Sr jޭ!垙A4ڛvg )\wCSL$(ZW2+U\[ZC>-\rCyV!d3%ŞgJjj"2 1`^],Yuݹ"TH&۷ۛY #Yj[ =ܗz8ͻv[u(WfIqz2R0M"8jPsa[Y6'Fוּu?ckia{I9jXkyVz>㰰L&CnAey4#gA݉?ptScE'b5T$DƂPDEpFwU&/8`𾕬kzvr 'IݕB("Qҋ@T&֨ChnD*eXG9]@Kɖϱ%'gk̼gp/"\iMNh 瓡J I; &ɠѦ јFUe; fE(/+F$А[:Y$|i%w'='7cZ-߈-o5X7qkL1 ^k`ٷoF܁~sm:pU Rä[؇[>JS }J2iY N\daZV^z;٩3FT( U(btqnb0;M-;ν$R|qqN[\dGr h;eMǀzViy( h dE|Np~?6X>TɒȔTW{W'G"1¬]GqWSpsC=]3-bfԶ 2kHBmr:j4R"8ɐ8s8Nu]MJ\X쎝&<+T\JYSf h`9y5WFyBڥZz++5؇nw٬mv/S #N~I$xbm؀WH\2qN&0*;Su"\aiLl:@*+@@&z [ۚ]Z$xdưetWGԩ@\k4yNņI][p눁I63 ˁ>Z7 O dhLτ*9׵;=47n9w+9;)aO6-;~R#[$w1f2/ />L FT#oGw&ujێg_\^=Jw'oAQBRUI\eK"-NsuNj{1 !G<\%Y\|)k%PhoN^k餀,SV+>lO49glx7dѹ1>7ڡUe!'$f!/!/ۦif Wq`4,ScSPmmt㑣1 vGAnˍIh7Oy}u E2^rerC- )c2*MXM<4m'4ÆmcǔRs[&/y-^Mt ʙYgik+HFݧ1c'=y 4MDdIL8Bx;S1#iofQ 2{55TvDҐprnnSç [Ֆr|RHq{דȳU }dR.VK_ySq-4Ve.M-ϢlJZv@EQD`h&=|뇋8~vwK9$m67\aH* ' lf>] l 6£Ŏ! G+iXz>{?a5ǣ>_Bڲ3/]#1=#JD~:HMx7d F2o[O| eؼ") !98ܛ5d\ ϩn$ąT); .MyZǎ=Ra.K܉O~۱uoB%tL JȂ$U7>A00HzLB90T>+1)ǡfMYr?M*@tX)C Rc@ϳֹ ͆o+.v j ˇ4q(Lǵ@@T*o5Z4%ޭOڋG :L & Ts ,[Mض@xΫ*L}P񇮏+V5q0{Zśѝ2 Ԥ\Q{mߢiw}NeQUGnwtL 6*Ot`WSETV 7D؊Ifۼ̡0e»7&#RS Iy . ;ǿ?@(AMFˉbP.@-p \O).), k3MÃŵ?m7ve^6/1dZKpu^WhEAFq.qX#Q?*{Z;|i" U9q=xQ '[TduYTjꅮNZFҍpOSH_|g6~a2w2pN<Ћ%‰%(e|.鶭0̙HR^#r|٨S4@X,׸|8llqSprfyN& F}@ڷEQ%/a=&>~?2;b%0(D.@İ U`xy27] o||%r]6AhՏ'*rЁyf1p4!U,` "Km/fPP]2sSCٹ|IҧNe,A~J+ 䆄ZJMp/ol'ݫ48='o+@,W q@| j&EXG-0ؼu#% V%'PcuWT!H h 6B&q r'Ed~&; |&tGNSbWJ|Tp4Cn#c,aD)s@O{{ zI`Q8&}{$K-W@زjf]w84%1t}{DXC=lZ1lĿ~a.<:ќ|,_ _QR DemP+=ʑ&J`Z$r\f"qOK H[a8 ؍m<,g˝jXMjt+f/_ݏO9Ah~+sն{/Z?nJP*YxZ=c}2bbrp0r9kG7X>סamkaB:spG/L-ɺV1CGzW[R욂ԣEFt!-wjݖFwgC`G){rAFV͊mD-#ng|{KfšO]9DAC>L]M&]SD9"?gj>FhI C~0e~~G,6bI߀ gjnpơ`QH  JF0c䙜rG3t Yo#qMaEy)&OKJo#DOfgrQ5KfP %-RTx,CޒUyt:Wpl) qPz}[@ט7=ǒmWeizOIn\e L)e0&$W 熋m p.2xχAݖ(,eBYI\}!H?_fDW^QI16 ד2`T"L/Nqnv'yԉS\B .UF|le51c9V"ٔT>Jl͙$*q]GD ӻ4sM%]`~FBskDoGf#Ip/ ~n0~svXB(CLZiRazϸne9MOd\Sa/PJPѪ(MHD8r'о$%l)B3Ox?`8Qx77vNW WP^IX;{5hMGV6'x&D|$`Y3pZ^\<;/FrT 8I)r ۩f(*vc'v_ Gr1ST=Dw;sIS#p:bڨF9GBX]a?0WvAp}`ȱ:`ĺt&/jKXI< Et4R/vA}ʫIEƷo~ c DA²<.[ʇsa' 薥}}&+!9Dz% W) <0l9"ޟE%萅ᾥ7鲖 .aSrCvsϻV2$01f˻Lcg*߅IRA+o!6㷴ޘ#{M=ݱΙ5W!wzgj9Ǣ`E54W&YzqpL+E $6C+yMlJ&\$7UWϹ€?tݓeKX֝d+z yqƇix_(l|f_#lXF]r咋M D) { G;@Ŀw1[vhdrN!Te簫y]P8;=c`Ţ?&N+}yyLO9up3w3"SY}"f5W'fȞ凌yZ(EiL8V'[} Qv+~KvRlMz3]o!L9BW8~\ 塪TDxt=dȽ|4HOi9"KB,?ꬼV$Kl%+9N͒27b媐\VP:=Z*eձR>CJg[= \U7[,7a:9,Vl/.ljolH08b/:*C@QF SO}F[8?.2k\L#Ѫ2y?4_ QJUNB0d{x۴Ԓ6TOBE4l#4Tv5~pQpuX()7K.dRp{@0ڕNIt + {`oÐ389EQX$U5N:8ొK]5Mќ;IUYjəȽ EA/9ag!séHh#,)9'n">\u06(ΟQO2{ax \e1`K!s ̩`):;vq ?ApURKs lF8,ik?42Ri9?*b !ft~7L1WsoWcI0??j[(aa:r:/ս-g5XTwU讒{-~Y' *aAk31`ѝo2a_*`#0ǞKMw uᠳsA}4_7; .,W\i" ]#q~^Eu_x@ͬ3 |-t iĬSxC}ѤmEbJŵq|(iEe"G c4`B{-I;ߩ+,,uJw|+ۮtS]I Bvǿˎ{#X/#Ԥ_TGJ߄W˥l1mqʳO:5t>&z׷U,49gARˢfJ;"id8nZʒe\ƧQX ]@&^." F,J.$!9H#7Ɔgݥu^n_&;@{{#^-v Pg9RiMkDRn$`dK<`О_w] r61c8Lln6ĨlX/bGb$Zofql":b(]?Q>WtwNT@MQDҼq` zz_銜?c /mt2OсoCV}ҒH% HMڰ*uv4;$-83o[_q]\|XFQRf-L*i/~}#ՊM\K^M'0[?x9nsȯ 4,Ai@R<2f/hN8Vb x az"OuCP^E X<PE˙ޛ4 d*bT2vYsX0(^hIavu]10_\ $3~[f*l'ËCTNtj S)l"o5Hc[$=K{ɾ.zc>HꦁxϠ:55 c}E!^^OQe!׼bҾJdqeF2Q#$x- l1StVr"h5[J<ئgzܣIali0V񛬤ciάNJwfNS*ݬHrVf-`)-\ 0>[{$D8:4 ~R!dL$ w,OrsOz92\C/ n:>y0/5WPb{:n-ۼ1zṪQ Vp ݞ6 ^6 ۔sp]!YDzw}\ ȏw},W=MLx ɑڧ+6h 49/QDIJr9굱Lj2Ff vNGA)x=nNØA&Ԃ4{9`܈jƩIf]&UpshUXwDwqˍrk2[r'=Od]\ie*`> "d¶hn-Z[F}KCs6LN,1JskgU[SxzK E~Xl-3$UwDQϛ_nSS=Pԃ{'K1}ƪđe\pl.[|@5pAmФ-| 6s4+h_} ]%f+'+޼2aM0կDl5"p;q/ur~[k$rֶ֣ZJX3*f5 Ӣ]؊Rgpj!pD&8~2&x߱l,8G$_މ tGk^WJ_ u,҉ko<|^=N_~6q;r>ū{9qYˆ뮼iPMPqv9NZTo}k5"sp{<;e.7k;C ~ъZ>H)a(i~S9ǁG+i#'|Bj[^M3*kհ" cm3P&Yƾi[>NҺ|sY@(\21tErY+M$ ˽oh”˭_,@8dLMKq\a]QsNK`f))EKS:E {id$AI2Mv 3YרZ=ǘ'k&.V?hV".L VAA&<7K$5 2% VBKˊpyPCXӴ( "8,Lem.0N?IP88ӹ1az֦H#KJma~wvP {ZZWx쬚SS,޳D6MawC) <&r}ATy\qe1k:(VsEjm}9PmɧÚeu"$r⋲()FvI`JN7߳Ym0X˜K̀K>f[ .,cpxO-3KeB<,Qze]}jGeSY)8S5QygN}~ 8XoY8WpϹ{NlU>Xrg X 8XZ>相0"o) ?s&ڐgN{ӝ&Q>ϓDHiQfd6>Ry/m`;yf!~ }`]i88ϒ?8Iᕞܧ L:5#ȔUǩOƪEpZ[XS{+QquV@&d]]dN[l cȃD/Ï3ڐӃV``֩e-\ i=s:i()+@kxx#N\l8cLM#sX 𬲟H$|T'WQn,6[7k /IVWw=Ht'&GaNJK⅂%&mrkeP,>'} 5.sda;>^d"OM4·%3nUޯ6uY7\T݈!'=Ið2&" ) 5838G3Y6$y^ëI lh nNo Sz?7C4V5HãySx<0}LgIxgk T*vN7 /˯jw?4$/!]:=y{L2}PMG/FLƷp 0W>C:LGuA<֌= w.К*O,Lt] h)u"3`MjY0H Ռ<6faOLM(([=gПP^- {>^7Wǚҥ+E\HؿXx)/RR 1;*!%)bnB7Q0)Ie&GI~ͺ>L= _8@oa ywzdbh.I_ߛ?}"83ƭ /ƳstBsBK}`}db®A;6ƅSe_9J=j%mދ >4| ',6A :av;!}2 aIg7WWO_|+Ι^\\_7E(2pn֍!{3r#d PNgA`xi $e߸S'pɻҽ:}<d:,ȳVgë֌9qT}kuk"RyOsZ^]U/*BoΟfI | @LrF[ίVݙ3QR8VUDrda?k^y$d0Ҳ@2kԠNę6™ŏ lN 8ׄgϗ&%͑SKFOؐ\,O#:.ʍg 8c>з!|5ēc؀x%43X\Z%ct% olW6H}t6';uSWŵ 7'rAֲ,d [ۙ7l^mBj_7as|De eS1.rؤ v5#q&Xh1's=ry7 Ǐ"vSY&{=QjEpcl'X]}њ(÷hNw ]m-f)n[Tk YSoVD'q]9NV{_Nش6h jzXWU ?|Ќ V"JluU\{`3;lR/ӊW ت^\í峡#CB ÕK𳷪eds1w.xa=]C2S# i0-LICʼtY+;2Y1^Wtō{ >{P KIwJӀ?p?]&8Z"0g6Gn*fbϓ--%>e]돻`r(p\Qk&6jdwDӎK dחSb7ӼZ ARd'1>bMODPѩ؆q@Rf6"k_*\b^)o 곓 |FF@\:1#.>RAJ \YkG.u^-R@*0 wތAdcVT%W5"eI)N7# 9;\~4z1.̬ y'ڢ &˱l>WuЄq%#"~-Q4*F:Me-fn<, un<޴!Q-ps$ 8ZA7bX;{@Sa)hFa^ ňxʳTtB.0<)0w H\gAq9!H)*T+Chi,e] XY"Rÿ  }Ar5vnBTQGLRfٳU&YMV$\~]Ј^4MXxV[\), ~ͣ:f?0;=-nFU;i!Ǟ|3!B[N G/Pt^FĖ 8/M+qq&8p{UoolkD&D-wH'z5cBHt&r5=&]o[RpZt6PO2qg+M.VHn-ؼr+B ;dtJ48tć f%ӆ,|qW&ux1^$%v!`6 Ӊ+QNKrv\zN'f(Oͧay58F d]qJ(U(ϊDH̘NJބ~ca(x)x8J4lt94g6v ?eloU5;JIR \l;%H~oղҋ)5%}!D#tD/%&':MJT|,~A,İ0L.`7Q͉)Y >CʗT?E b17Ȧ<wwZ<2aXC]1̇wt23&ٝ^ǐ) " t&k7ޢ<ԇ;1Ѷ@bqU*G@Ch,pZF3_O-M]esrV굛vEbU<%NNa+ )CHXK=Yε.&|><Z#axO3)ygG4p٧|/X¥%@]nv i]` Ә"g-L0.W6S۪„>9>%)F+"F}ʄ[Iu1wM_Ys z&T<&AXc+&Z 8yRQxA<b։r(uO_:bf)al̪QW?')^I ƥׯi `<{aͮ;Џ1otϹq l+{WyDHN>N4Rhqepm.V i=r!Re}lA>@🹹Tq*C wQPh\|̕c%ߌx1Cw`>kD{7nJYu9DU@RFx_)KYǏo#"%}*_}aSBM=(sRy)9;^ FQGMΝSjj yRd,wsKHJb}JEHG}=c {;9 Պ8y=ƅJP'y=&~v*Qn< `y%{Rp}LƄƜw+lQ#b0F&(?&=E LM Q~Xb u2p$s3* P Z ȿy *O6tmل(Y{Ӷ鷔Xj vv$)?36vDk: PsVHiԳC̱!DYg+kkCeu/ x*{PI^m*a$I3XS^p=ALl0Whd(q#%˓CrK "TRyNP8G.`E{BCp|'6gʘA}ΦCGLzϏbҙ;4J~抚ŵ r6l B5bCBo::`= _"}7UPCA;3V:5 oe" MȝLEr,9NW;,($)pxQ.ĺ4hM;03UVNά#uϨN[|.J#Խt^$mWj2&x@O7Tu%Ѻo["ہC?M(Od}B iꨝ>#(=H^B1g3^Jri].}iۍ#f5R[=:nN8n \S% Qa}q-<gBO4a2P=RXE8P{z+WS`CIZrS_>"6U`6٠ b)89۵* ގ(FB۝Q~EK|JRN[9(] )长:" ZahcX%l7Y. OsƊdQ>VI߀˵:α*!kԶh &T B/O)8H^;پn|ܯ#FIkoX;h!y$qN^'Xhnf`W!uiyZuC[Nz::9҇΂ÓQE= &'Y¤@'Zes0XmI|`Ub0 WM)TYS &qƯ#:]^ZZwk9*wqsΫ"bD'gZE.fzFbi_=;AEQ&oH 7V|J2~ЀM#$:ٝECj"th8wTA-r8.ʏ/ {0GqɊ;ĤO^]CXm,k&L+uƄܳg-5PV>i\lA?N&,U4w-v$3&hZ2-{Ll9k?w@+E!Mf. 1)2x.jyhgr Emchp~NTTЬ^%zH7x;f`CuClt'qg(/CPq= 4#1S1<`5Wna!(zIg]?lJB>J`1T6^o!{Nx;i׳G yuu'A$Zlsr@$ ^“7XD,n6ΤʹTwRCtvMm@Rsu8 <:٢, oVk{ƔU01U4ъ}&;>.i%mk eyjM goqpvҾMo$ =k<>p + 1%">JV.,R,WAR/^6q/@ aVަqqOs /z-s:z1>I,O:OW1g?xr HN(ОR++4]^mUj3JԂ +]M'XX+oRD6.@zuC>J3oԱάf;5Xʭ)~)ǩ&9uK DŽz km#/79!uAʢ9˛` uj#w.vƷL`|r *@ ڎ=y&V C]']?A|vW~F~# uyu2](q"]O. [φɻe9q~Z|i'vG3C;̠wR&TeZ<(l8!ˠLؠ~%} 2A$q QLh"50W.L*3Kʕ;6w>PV=㎵4ȚC gyg}Adhll7^O]`~|ǎ-}6ᵫdV5ZE%QYpGڃɀK1q˓gB=i7'dH=KY"Mjqhr̿3.I?gU8ު$\e3IbrHxH҄4T)JY'LS܍jSmvs~cmYwosm+ (7V?- SN[gC>S%9ɚcRP"?Bw51~'k sOD86%iC:3s$¾`@kܙ ?d3B [}JrSs Kc$~4jݝZr1@'nşu9[s*jic.ʢ'3s8zns?Iy 99;j~B0|N֛ 4bE26 lvV ADI.PȮm۠X! l4ͬO|}<Sw[rՖ4{,_$S~:6*Fߚioͣc& RK`zG.Y9̈ϔ:dbR/`וPvb! ]=Eq`o:} |QMד &&fBI$ TnHѱNyJC|%B57/ F3\S9x0\7I SK/F[=1%ZX?N{g<NuHzK ~OdY e<%Mۙ(׵% H@ CڷtN<-j@S?ɮ~-C~VKޞ}\t\@V8ʼnWE*խBh01&,5#L͹ Z'OQGj 2  B9X< SRU%BẄ́]'Z! p4+C,D&ǶxvWf?> "梹=Йz"!䂚d`Y6;ҙ7|6[Rsz3Ƅ3#T? L+w<ܱr(ͦurXz֗h"p9}sŐt9a_T!m_7J%aqbj9 gKt^2rJfyfa.:bU' 2lLm"SqEXr@胷Wo{P`=6;MӍ-y*T?Bg"hZO$dcޜK>mYU8[#c˙O}@1\*#2U(YvrUww9d&c1Gɂ0%$ KP($=.=KĖ\T>Ptp/yJy2Ѽ2@^' -Ugsl:<'O᧝L0rmJepuA͉øw/nP ~ob1T :9ֆ4W'3Y#.F?^w WU*=Fxy#_rHJ>/fx9/bv)MeSlxՇеs<i}9!E4&K+!4ę[%[\np 30]+uMpG$"Cɞ5)@1f4^- 9;AhO9 Cte%ȥPWMxMA`c#50{e-;+luC(yE'YG[,_a[J\K!cV}@tù9b3Ӝ1ii8U5>z,ָ 7H\ISf 76X["$,_Z5J;o29|ׅ4OڠhEB7ܳӳ 9C=N4 {oz z-iz)Ҕ1 `ҔGҧox?[+׏YR=9TFUHϴ 5ԑow?-XjTov9~D9gf,Ǭ1=;}U'N` Ѳ̿޹!޴= w3ܝ$ &ogV$DIXc9`ȇmzu?N9pMc2 JA?y^﬒dQx%aVD9$'gB6aiϺoMdՖW pG˿s)Jy a`Kϻ-JXRK}9JǞKlG]$9&w"`#ek9bQTocɤ fVe~b!x =A tW?iO\셰-6DKIG-|Jq`̹ GâW)3к_M* zdEqFX;i /Eg:B4/HşQW&g<<)_)ezb~]: 2,(&J*B+T`~]v53:6~X:M0RK4;O꛽%6wWkul=EV U)YP9&]% d#Pe&lXH,'1J :e[%huJx* akCn4be6񏅽0u4M`'l0E9y$ 0l|jI;VT[LMpcƧ/aWͿ2-ց$^g ηzmJ9ƹeQ2SHe&0SDj,Z /dž52VsѵV7WmpƖaK kί?V K Ίp:"+4 zQ;~ 1+r<}%eSUU&CwΝ|›^N^,/!loHTd;]y݅R]H~Ũt*<7k&cKT-錜"=UMTf~NY~dVybDW|ڱ>Odhl xοAK۠Z? ᄚ=b/SQ|)B c _`]\hBI6}`n-T8^R;x WBd#$xJՆAPfwUvglHw7%C!~wџQj|>śhJ HihQy P,1dmukSG7bh'{YTWLe3ǒ9Cw҉A4mjNwPlxjR ;?`}jb LPR{ϐ;d"e%նӄ M?ͪg5 Իu^U[ħq(ÿl[%cӘQ?.aqf%D **3cN֏@F1FmjEvHP>d7%㫏)r ^9*Tt"WHʾ~N&;C0Q1x<2nd=<~5\C@Q%j>up9jiǘ vccf_/H-+__ +Os2ͨXE@nV }A~7/{c.XIh;ɼ`y,/:Y(,[8-p]>[ŁSh^/ߏgDNGI |!G~w/,7|Y@g=g׾(uT `ddt>'a-4mjYK9;:qBf{ jgyakLnu0"\-L!"|t[ӡ,vXt< Hg-͔D;߳,[7Rwɬ925gWu3 " ;=:^;$X &D1ͮ#%GS ,+DF$ҭ!"x$YP,4k0( {D+KJe17R~y!C=c *MV2`-N-2)Us*{X_` xn r1dZ-0l%)?Md"6زx0e-="zK:)u'9_[s̯x=<:,- *WBXnkPbn&XfӽhP}ڍ%mKm=ųC(?ԗX`p+)@Ml+e(Il9e&6ii`(9#U}4ݨ?Ƚ|]ܞ93ZhDz'Hٻ- uA ȜװdJ[e☩9!nX#l,VFXYFAY 4Hb0^M8e''R葇Vxk,յbkýhz~`B k|ʋxe׷Ω&%EUZi!D0mN5;z*(%.?UήFt3us/eoٟ' 8LѿzI;!L#WHC-ba* ꘥#mpD9FI*MY]\S~v BxH0 Tʎ ^b]9T 15L,F  Lqeh4Rr|W>P4E2`i6RoB0IJ?ϣ=cN0[_4C?7ɗP1Z LF-j&3Ai >KȂcc1ULfQ1 [ܿ:aV3(s zhMXi= ʥ!à˞lͽFH*-Ԗ}nжkH;OND!ML ͪN`U{4mG2Zc94j=g|.qso\R UJY462мJsn*#M$9A [2F]n^p u5x˜Ya>7z{1u2tg(^>cdD!n.b×M.,t"huks0THcfōcY4,z Y*MA?8+ 9fl$c90f2҇]~r%uBTMZ]DQU\s?'5E 6ArO9}g1Vr;9X%B7zm+NvPifۍmVCJX|K et:;gvmϒޘ)Xk2JVI:Uj8fQkj,GRw.kc ]L{8UξDS()ѵӲB7k)˦_?ܛp 7mRv'hU2B`:kU12{n|'٬ {#gLO%.C["(GB z,bJSW%5`vbjhLc^.Ďh-]?SZƳ!fVQD "1O􀯃7QަewŸa=Y9`"_J{:R6ml~I~d <stj ;8NM݇Uf{7ёZ`7 -yҠO: $]sY7e3e h{Ѣxt܋-I͍s2hەwU)?ՋNAPE1GpU#YخܨIttxz|-|ݕlp$$z$}М6m&%\_u y^=PֶzmdR[*K %'r#JW C2 ;dRCl `m`وwWj*ӎ2:WT б߹T J'weN@HTa3rq|!h^(CFȲృS~3黼㷖hx{z#3~ͻ^WA\mjeFf!VCwz|eqs8KC? ?+Ū*:;z:#=g!oJ}ɟZIPA Iޙ_BS3ą/)s |bƝ!kQM c +!/)G6w ZP%[Ti_15E/GdI9BfOWHNKj5C۾Ktrp齱O+OOS^K̬TQgW_܀I=$r56%Dqř1P,,w 6 MGН43U%b4ȥ>U] +}$|71Tnjp{ĪJ(7Qc(aoozo:9lAlk #{e2p׾J\d#o/\SۅϲOp4ԫ LMa"','9q؎B\w/6ׅ1w<ֹPV4 'eʍhG̰AD4QϾMj@vA|vC' '|R~EV_vO {ٗ䓊w][7KxvAGGᖆ uhp 0qoEJS10 Ki땴&)ʆ5$N }oQtǥ5NYӐE5DfC6L >S95f!Q2h& -SzW|g _5̒ʑ䶊TSlIQZK)(g|C '%D 8a5p~3eT5b>RAIQY2H+81/<m"N*WTOHOqm>|Ld>f{jj9p*su?mKs{ۚy;sS  A) >Jp&w~M#3ũ'zr ><~$bB0^%IL\X>Do2= }>?0m{x%h>b-=G_3(Nַ˲-l/c3aߜO@$XՌ`<XJ:u%l9\7L2_0h?|25q(9D: w/^Bּچ ݉QS յX?`NXˀl_{u2y )`|gbVIęRrY2ur#AݒHry_uK&.E^lРӢgV~X'eQ&0idZ,RzAh J}?#95@c}%(g:[4=9eYNѨCAKr9ҠJib<~3S2Q-ZH _G7 m 6eO"=cjȰo]!?3_)O>dmľ39wTTWxyT~Pm?w\3?`y3‰Gs X  2#CZSd5HQDWq<zcVkȜgkm&Cpbh x@@85 x4(@Hծ] ^#?#e}!?. ̦yp&,)rX=K,*?;(Ѣԧ$4]7,t?w^_ Iv`ݓZ7z:? ~LoȜˍUSs|@hnyEOR_ EĜȶM^)`Wؘ{?6&&a8r(.^q MX)4qW)ebq}TW]q9BHnG UW4?v+̂Y \CMTj!yBK7>V0Tלto_lسL q^!01d-iFj TeMc#&x{EN Yn5)1|oRK+=X hEZ# M]+(̞2.(wt;eqYfɩ2" TJ u㳅 PBV_M@cWrf:+wI,ԒQ]: %U b4蒯-`G!mTӳ6+rc3|MD UԊ' \wƉ+vVbx`LIendstream endobj 16 0 obj<>endobj 17 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 250 333 555 500 500 1000 833 278 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444 394 220 394 520 600 500 500 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 333 500 500 500 500 220 500 333 747 300 500 570 570 747 333 400 570 300 300 333 556 540 250 333 300 330 500 750 750 750 500 722 722 722 722 722 722 1000 722 667 667 667 667 389 389 389 389 722 722 778 778 778 778 778 570 778 722 722 722 722 722 611 556 500 500 500 500 500 500 722 444 444 444 444 444 278 278 278 278 500 556 500 500 500 500 500 570 500 556 556 556 556 500 556 500]endobj 18 0 obj<>stream xcte].b{Ŷm[;+mJ*m۪>yo:wXGGksINJ/ljo sgf`Y]l,M_v8rrQ' 4M,,fnnn8r J]E(=linZmlv._׊@ 0D$T IjO,r&@;g 5 Eg03'4g/'FgttvZ,NFv._gb3q5ǁ/~88I~]M,\_V$?-{/IS{ /3E6F_,冫y@p9`9_>X8mYl|6cJL:' f02]@eXR?K,cZF5]*FvϘCbg(33-%,=J.&3# T3:X_KS4j+Y@;V4ȿ\g(}u_?6h{9,L_]g,lVoѕ7rq01011_;#ngboOٙ~M-]b_Ѳ0qr˖אP ?@8v0y2_G7{ҰX~2FȵleK8g!҈sOZMC= 3azE!A7u-Z^@<_BNdY[ ˮ Co%ll@;m Lv4:Zz~谑ST>ֽb,.@t5!lPl ʛl!'/L\4O.ٴY,36/kal!3[{+ʗf d5_д%u;orwosǩM'),сef&)WD5+O*oTxV63b*њ.ND}^xn3|唼BoUm ߴ{_^C?rjN('y5gTFUS~R7*jzmF` q=V8EēnsEbǽ'Ru¾ͷχ˵QĕDJԅ&A75O0a# {gG=F>Y8 u1T${әՐT)qCL<Ɣ[11u9yGårՙt>x7Un/ߛfZBi;R>~%LڮcmKA(?*B>FLheIIg,jWT}ΞDkw3Ěͣ O!q~3Wƅ nA׃CG3/Qd pCcqv&9IM+9&z4&T6,,`⮘ eoӨ2=T/^Op?ii@ULVjz0!&JI4&Wn@U*؛]jK_Ciu8S~cKyW@Ҫ(I#"މطbw D"]UMe^eCl]]}jz"hK&#NW\&{uuF[ EPJ*ebxW] GHREH7I}_iϡv҆ʋ͑@E C;3צvm^'&UOaa¨o;t7`]ЕYIWUv:@]vϥ\XeB" BF݆5%_QT?M3`R'~O,RS{}hmI:M5<#0V: +/ow%%`b2/}OvM ooT~,ҩlbɄ(m/(S#gOy%uUeRjS$9hWTj{}A;^e|tE1)Y{+bF**B9$\~TyS ia5Z9!A,Ł_xF0nkPܻٵֆ02 e^ /ة1ūV&A ~5l@ɷ,}\pM54v(!9`)g:n)W߄`)nD ڥ!ׂTTެYg@g;CZ׊rWΑq^kzVZvdSn`I4X[i)C6d~ϼUѺ ^[TOuۺ N,"o%l9QQ eo )tUS2 b3!~b`5IN-^\d('Kt7ނ;|!npmY]lmL@NBa%NԿ`rh^QmwfDs[b$u17y*|qSo}Ma~nhp!0qC?^HY%{0St1oar nK'OX`:oQ2BoaZk nqoS߸>;v]WcsaEF+ܘ-Ms߮53\v*8Ý q2a7/⋔6cρ6EK&][(KW<_9GA~m |7SJ87Wڛ4HFgWƷW@z*1|6Klĭ\6m6 `A(0vhCB. 5 p#?L}DFf-@[`R zG[ˍO|MċVY/VmP^vry ܿgg *:vZ1w,ͼGBx@sxeA/eF 65Wp|wpNsڼ\b*b[e1~kD2*J#F2 8ܞ)jr^C1XDBxC8QI`M v[ZCS?N??]LAxzT[| [w7="$ Ie08"dI2RM ڶ(/ eqPe@W$, 'l@{K? 찥}z$.'CK &خ`<}+=Ǹ99f*T;'deVKDo?fS93c( /Ӗ/7EbSGrAُ:'!GaǟC8f|ˑmilr.Z (B5K΅9#S'үv ʾgo6h<ʞm)  {@VM'W _cI$p + NRwWfrԨK$$1\ IV~ }rTqo[>gP>Fp׸M@~m_sSH8 ~K@`_oRIRzgh<2/p((n=\i|RLozOq3w\fGvěԠЗWTb ,"eW`C#,, 0ʡ*M0KV'QR?PwHuCĘ#%X 2qfrޗylE2GC=z>~,vܿ)XyH݊˔E&c1c,H(!YZŐ}֝^n9(߂;x`?IR !QxS@FS{WI\C_^#U=|w,esR3fMK=Flp).ą0p& ", Uؐd YPE«ySM=]h֖DeĂf*pp>[w&QJcMhxq]I붶"2S9!HȉTv=l3F_(h-%@59HOWbƜߌ(HH&a-iI`2.I\?M6+ٝiO(͗I]&А/3=z Z>BpRH 3XI[' K$V-; ^PK\[_j<|2@h(Ѷ<M="""k?8(96`5 f?_7(;cmWl)Vy\/(h[kYH#viN y|_jBw^$ ]kʌ)a`V q`Kɀ}tp:/53`jxD\x*v--xbAv9C;ժjC f1U|Pcg/=c=E l#W[ٿׅ̙M2K7gI!;آK.& u&4TK֛Ci+Ec0Ӹ<j\x Ey>;Cl͑KEdvQoimh*bB]VD5ƎI{]eMy4($4Os:{{I8I[rBd3>HPDٌմ u:<Ȉb(6=f%QRK4dKgQ4] W!3c$lw YV}+M<SZbp ut~Ĺ46 &_,E҃jR gbrF[ٵЬ},c;NJʯ"#dB%7?8(;5e&njʥGR r)&fHހ?o>]rK6f7UMg)F:-1ǎT2`X"5o"~Qhxoj#Y'ZRk3ΟU;Q WӐF|FwZOnry lɝB?(Jo_!v8"ϐ[Yymv-j wx{݁)Tv GlR9.,cy؜eō^$BEk'PYa`7`<0?8=Rsw,Ycѿ84ow4YXy0V'߼T͒]{"fnUwTW-X~[SMTTD4MBfB]&Id) Gd_=4DѪ3->zrc6IR|g״,YR+E} =.f[*ţG~! 1sE\CDNyޥaatl0%w`=\hC4aЍCM&:P(]%HM4sb115hU zdoCVY!%님CCwQT T ScN$݄=3=1 @rmoq;. fRaå֘g+*[_[8Uq\r25mYډ;szA5B*>r*qϥ-̶/ T}~H=_/oDR$CGls|/ "Pj pfpCWS]Tt>*ސnKki='ME9@ K(۞:5HlPi-XJ["MI;w9䅳{W&j&VԼ!&W[X`No188ݡ3QGm2ߋݧ1U)ʋ| !y}Y< l`_ {U^ A~O/JQω9DJf KLhaɪy=QvF[Hq4fs֓*F`X-WK ͽ㛴;TI^۰jh!.:vT<_ Mj݃%ʍ{qG57z  L tj.7^WQ&ʹ<J_{36}S.ۻ=rI*j*&J|N㝨qPl#$'\xTHҴGXmQa3#t/;[c䞂#Z)n!4׾08Ce&Ͳ +:aڅk[B[I_>d'NgYNf؋M&đpDI*SZ>?ZlOUc+lRahMMUoT/q2E⃖;VNrQh6)-gŤ7is=l!>k#"w=^thi5 ~2?XѨHGſZm9ނHA€`ZruFUc Sv-f U2|Tzj@S`̦n/]'yP똍?\k~pяɣl7 q"@ {sA pֆa:֯jԼV*f잢47L3AH ¢Ī$~0\ܮUPj'(hhwq_o =I-%)%"}i=U)=1,AɇazI/#S[X5 (D>9(ʛz%0] ,|.H*lM7譚x]Z]jL9=5Ν"M7~N B,Z)ģ)?"Wp< KfY'<;o,jf 9ID͏8Epjvi;!L+`, dw9g^N3 {Rg3xGz2SmglnIG&g q̢O;ObH+d!0ŏ|:H˲ŞLws߈DQC]xE }A,wUM-L.$@_m-F |:RÊP=.)C"MP_ZZ=(q% OKy rf>@uw2ۣ*}HB0QC1SsLZF0/WJ$C/fcʙ|JW |?]\V]\TNHJFZNҊAwh($)U|%O'ٙ,ܕdM!bcp7daEuHBu)Z i]ڧRW4PoH_̆Axnb{w9a>LFvn%xTJ#5wd򹘓7}oKT,?ڛڰea%49-3|m._N#{Y6YdVD_`>$Yhbxqvp/IPMkۜ{,t>wbY /`al8 7?#;^beύ$JV{)qA"C:gi+A,mEW]hĺ;b%=hXpѱ RĀ%X7MqA6{3_xs"4Fn4:pĆm&J*K:CKCel@sZjHeU yi ]O Xtd@fOw>˜=\Juʚ~V $ҿeRw|R_;5BpUrri~=[g$*n L1/ >yÂ>/;4G{mA[V4C(LK*68|LnHfCS҃W; 2mPFM=Q‚rmzWۂHGffy&ࠣJMw$vJ-$~p$ JCݙ(A",=DO)j:HA?7)ɍWeONݶ;Nf]tEܘ8q UU4 JX5+$] 70cmgM? E^._kn5̣Cݱy)@4M%_785̣\14|V >tOM 7x[Ë }z -ZE)CtYX(cPB6tXU:R j?A3ߕ*5L;%ѧ7"E;p/'dRȒ;FqwG͡F,zRJhg={Vn(ӮWH˦U-YU 0g5vc?fP;\_o1Ia0P_oV3X Q8smR ev^\O'f]b j9uu !lwEbS/45J8^yCl7΁XY٥ϒ !R6(7.ü{n=WI U)O 8g,r"AW仞oVdDrL&#u<Ґ-Xǂfn4JGO-G>s,Du?ɶxfx,^$^SmLfo ͤ ٕb}B,.EC]k!q SER. -|2;$BuRIa( (d}&?rK5iR yq,@0aO`'RN_=]3ѝ^Eկ}]qW3O io[F+Υwkb\KI8Aޭ?[h.~ >9@=C6/𶐁s{`87y=bogq f#K~^*.D/bC-'C.)j\ae{5|]B)B/ ㈋d34x72 jۓ)h>e61#sESmrvCi5 >G d~)v "J ƞQ%%0@9V JPnziDY `PN;9Юr:|-s4aF%8^dO#rVV1dKzoOy6"I8B1$ qBUF.B ɩoq_+D~tvpGNFVH]w)pfO$G|; 8\eC^Vxm+B`Z(ʐH܂.7Wfg,-P' ʼ7QG5ڸwsP`Ztei{+kVds7aܖGr)/#;;B 鬠*Uٽ};?Z8B-V5£e]j7MB|c#ZWVф?сW4MgrGx{{N;1:A4bDfv>x-DAsT*cLym?*or_y%(ARy,3'‰3!\O7'M^&e}y65MNzFg;X&Ծ:ΡDo)Cw҉ݘLÞC*LIb+r(]Mꘈ%_Mg 5o" ^,BKM 3^h]x~+gLظ׭.?zH!OSr⍯ρ,F2[ R&κ\EX#P^֬Xe6qƍ#t/:_l,r*G@Cqβ(BU{qG]\k.[n'HO$ɲt}E}'bXPp i4 &JCji:Q rاk,v:l%C>!RZU=!]6v_ѧF!mD7Z~>zlX~$.okPfaNb2-t8̆g~/ 5QKu'Zr5(NhZyWW y!fd32f}{ VX=_e2%)鲭t>L>]ZžZD8C#,O_)ki3owc<(au꤫<"0 AI;M>zsA$ʕoRAeCʄ߹q RE>I44&@*zkBhWQB=GΠ"f_dJCy)iz{^4m?D"/oC[鶇Hn[T_Z(4mn6L)BwQ 4@Z5[\8߉= ъfmO;i8\.Z_@sqnz$UC=Fiz(4ĥ`D6qSHv-%J$ $ܧZ/tHu {gUܹ%L`m%@I:bϼS݊zy!k?i5PZQޅIw/~;T(zp&vO K1;I:.4,ˏEo5QKCV埛GC X7pG{B_s] e><<_q?BcMrT{i}鄪6Qwľi~Z\qi`.GY0(R!oySHR9Y.njwȴ|c+Ʊ&1*!]vƜPݾ^¹(RpEL2/,Cp`a[6E2B[,gN沱_&'){͐)ɾ IU'KIpvtARP)%We8C]#D9jIp MRN)©oVf <0施b\y5ZiBpeEYnA9l\k!$ؕH#4ãP\:l̮`&ײ Ib " r@K6ۦi Xn%Yk+u]z'%{ziiSH툈'/1MN`.-smVlB4ɾ). /s^eى_\L?Xf 8gzM0^)AKkQ!E\SW*ѦSY)VmKv4Z *S(d*\b"!(PI+*^(;T5`Dsa!^J7UbZiBJe7afqiKVY(l`#8O;k-omÏ۽re  RQgǐV4Zrq66(P"<(n$P7ڠsmoB-h9k$pR*fR|_ƜkdVz;[ `BMga"ۂ4ۢNJ$ijD; =kWXho?&;6weiIЍ%ZsSMڄ0Ykmq-|2j%v=PM-%Q.ϡ};ꎧş;H }N+ N:L$_s<m yDEM=ʻnb-l4im`T}ϥofބΐE/5>!B E!  UKizNTl5wzޓhLjqw>\G]7x0#JUD;_!(9Qwu՞~r4YmŸ676./zߧlj*r˒&7~w?5'3}$aWpcD QVhbQU֫Otv 1[`3"k2$P@wkTkMG)rh !c[!/:fK.B;'NT"ɤkBxpHĉ(BHcOh}5W70mDea+] ?ׇi Z^%荟)dr:Z /p[QMDP x77hucߝ63ٿO'jJX5FHWQ. p'CAJBrIV Zόjc8c aYU&{V1p8KZe( ~\}(-2O^M;vx˶XQ&0+rUw<|ci NqG_i Hd c9*٣j, `~OaTO"phfg(&b[`F)̚ML?P$zzH.=E[ Zols59:Ӈu@pGdIC}xMv&D~T,nPI{6^ JO{VW"w|m{8S)LhYXv78i᲻ʰ#i?8TCaJ3 ䷓X_g 2t?z5LK<7`c"Jr 딡/R $ˀ\(1M&NGfkNEM?#3G2>5RTР KwDJ}qSe)p$aB-x2cix!H˨HJ.cL%{bw8 IW [*r7U`^R)!T[㇥ %ݓnUE | {#SL;4}u-$Xm*'L\i^4/n6%kAf7[ዷ'nr3qf0͕n5y.p!Fbw.݃"l%&CC٨̀/V'}3a xAS/יh Yj \}c[<댒s7쌆>OFU~T;L,K.+2BQOCL#!Ң5J}[1]O Gl#zZ9`%WIȓQrj4qauu 怴6]JBF* #v/!j-+b$E6FUcUS}ΨaMQ-ؐ7AGjX:Cuqql 7Gp!ꋍ!ǡep,dOtSI19*!v$`߯LtdZ jiC8C~.>,e8d5Q?::οOAn)rєs8-(W/GHBgqexr`\ )Il~KP- Ilѱ٧ŎsK=k =CZ?JZҞwt;hC7W<{JvW-YWSL[6?p6vJގWe@t| nB=uNT0-,p3|'R\ c]})iVC5W*]z$ڱoДT60)ҫN4[_X&?p[8IO>O|=%U,e{\̂\$q[CEKN'f :%?nm0=]i:jTqk#\CnXhVx'pwF[">:atDV^ {Œi)lapTlɾ JEW,FC]ԌZ߰X%YJ[,U 4ppnZ)UT85eܲ`"m7LRLI#j]ADž|hr-bQ3L%Iu51}Z3іl+WMW, +Rj.$f@I 'Eٵ>G%{`Cj05Ӻ`I(Z,D66'/sKD>Yi R0^[FEޯr)NHkYЩn֜;w.15Y5nkkL`XAp^+"r\7I:f N1YZQi׷ UƆ,%*0 F2WE&ͳf)Z mt{;RcyY J * 0euPDX͚8ϪLCۏigW^M-pOU tanJ.uYjH_ݵaDA]wKxbo6ʲ`ˮ8N8ezYcF6h{@r&z c06A:{` ;fq$٥~-j{q-h 4Ȍf1-6h…lm5ȟx0Trpxk ?x(wcnE$_YO92ډӰ1ZT(m\,- $:jUg^Br~џ+RvIBѶPm7,Kʆ'OOg[׷ȍF Y~ F)T<رF,hhVi$ӪJ֒ .4/<4 Wk!B0ۮ&GmHʳ{dcx {>;az6^ȹ}9jB4x Qn%Th={谔⮚xQ*-UI#!`K[5?a5hc@@`0 mr'^hK@LL&GyYb21* kZnD]x>1eƵg( HS/Po,G 2Stnd]"kxF?s%dѹK~d:csO9M~1dsnkղF_KyLb-H7!Q&X#WI3&;$S!]Q6 @*gi7V!{Y l K> ?O@ibk8>'pDYm'Y]pu:3hH|zlsb5hϣEa(UQ58V;lӤ=AK[y&(Z M3yv¯jˁL3vO#]I(`)"aZ(czjM*l"ȪF3?]lC[Z;{ OOc(t! J粐65ubsPw&B~Ÿ#m5҈U$rICLtJB&gR+`r9]|Ji*ո fH yb1vAtԪ=G#Lf0qM_^X" B<>n` ONMt fztVOꧨrwD,}-Mx5s|St0>!xr4Kٵ rbwTur9V쎮YEcCG ObZo:7{ô q;\8_1v ~҃:pp͎ ^Mv$\?t(,Azca_Sv@A[Y = uxȫ"e:dͅE) \69LY"FDV5[)ӑ-yt ~*q&L&~Z8z \C=y ddȟEq*ckN?Ն8-00s8m().yf#x|,Ф`˫H MDcFk؝Pwv$1+3n~T־A]q!`*hkS%A&nٵ${;)+G@e`N9 Oa&뗑fK$ _8o5NIB 51EF J*\ rT:HJ'6i-<Ǟc 좛W7L v3m| K$,`fD0(IN @uu<"&86VyO 8;LRIgk5x$PnlP#QWQp=1v2Y:%I s640 .ERUDDDښB?D't||X\;Ȼˬ3P%KfBv+7ʔ93Zf ^\{+F:&;}yO*}FJqګIi縀G0zYƕܯ_\j{+0k)2$zSq1c@JwG{4P77>k4X 1ϙG4>]yVm9F8j6a; VCOAXuOᄹbXuҒy կxywQk N? 7SaQHhrG Tt[Ch[%[Λ)um#|Mi)d8 8t&Vv.Z©m.I@tGsʯ (1tOWu Y [6\5I Q[A_6B7VԵR^L|fbU?7=pm#N c׊}h޹uF);Kf\dHi$Eٱ^ƿ'՛}  @|:\tTWA{iUkpRJ+ȡaq>5YMk 6E9o-st$[M2fHRos&,)7 40t_JgNHd͊@ r CB/f㥑*tGwB1TNsTѐŁbt%s#IΉ?$d `)[aHgx-`D{~U meME ؅4=mSW񯅅m# XTa ya.:6ڌ^Cؕ@q #,YȆrA$TVDg(!Ԩ8߅ ȈzTa~/f1*X(U<1W$oc2?;u2Y en bPa(#_-cc*݀&ۡQx(AӔ( !,Uk ]j>,b4@&aVؼx Kv/v>eةt`R4$WE Ջ<92Y֎Vd[^̺5 Agttl Na`T=syѪѫZc dL''uHbO,>au͆qF BOpQn~w:OH}i`؏zƢ !)}ΑI) c${Ļ.0scv1o/#s, y-b`LK4X e!cmbss' f6KK?á{\.ڻ ݹ=A,+嚻gQM- 0G}(=g}Ɠ<<*zҐ. Y*3gl.GLȿ<6S}k̀Ālgib5~>I@Tt& mW@%)dpoZQk.'#~+ảogBVMie{W{z[Uf)N#`BWK88 qzaVy(6*Gq,ݰT >P3F\ybcu)T;u[J=ݹ1݈ȷK!c<aB1V;ґ4S<++˕:'qchCNßZM'Pb 1ܻ%jP$#\HCBa 7҅Ցc^?j) /-*u+x(Fb%z^!]5fl,77gvcyMUξlɳsH*$-OBmfAcɞWeG% ū"C6tj-IȎ 1'o_I%[G|[Lq.$ZI EOTgk2P1[OrVf'˖Y%+]a S>Ш=t#%5GC­]ǡ;q[v /܎n\D^RLhO:IO̱-9i_e5*E[h))*dV]|B&&XסٗVxU"]>wZ꒿7_eA_^xS @EI^ ZLMD9te@drbJX:B9'X(_V:Jamw_K'wK(@ރ93 4#`Ƃn*M,l8l}m_D wrvގ^ &`70AC/Qes8&/EdU&8uu]ܹNgu3g=Ozb!ؑϓ_1QIL!d^5'~1t>RUN-I kS[wDw/ƒ"YƕWhdxXCDкb8#PF"۫gGe'`[,w.^vtq2;yYۦ"z;r.0'icBKPóʶ4UG%NF.n$`J]%^hx겝ae+!OwQu7#s.AY/Uoe`K[ Hz kkF~qHu ZG| k ifjE[(m>8P>|m#֣f6_o]4 s!Z/BRӷeqOk'VaE"I i}q2Qݮƌ68.rlqCA&۞Eevswmyff|8gWdU즊1Zpq'Qbv.7k jť~ ],-28Yw$:亊cG{6B"$yi=dAFΒSO}H`5CFTZ3|ڍ*,2 ᠈5+c*/:?ݖgs.x˔368bYyQ3>PQɲex0 BB_r+߸ҴYTLUtc`~\{yDC6_wBM(ߨ/:AX[DQNn%#$Mp; CLUSvQd_-QZϝg6ͅ*ݖRYJo[2 aq E`vW=[F )l/S)rҒ-G}# FTL9"#_?VcRw?0Ĝ d\tCޞnC詏0_uCxs+R '^"4D0GdLSlfNh w^s ڻ+վ]k(6pDJ{ !/> raj@-/#q~/dQ4orkɏPA}b&zN2S#͝! )jSAe*܍P ;2Peo|HRdnk 'xVǫBZ+nBVYQo0ܥ 1g􉺽Ex0'"ZM(u>~h^c;=pkG&%*;%ԕfwNhdž7mRW92shUxvU{ saB۷!)SO}&4͙~;Y X}eLS4zfF`nN8g//8>@^Wl)ž6qi E#MruUռ!K&X,jНS=C3ŻUG~ͲOgF?RAʍ ז%CA7!‹l#ubksZ^9QPO!fwg[PB8=)}a~F6ޯ,dOR(,ZJ?!΋P`ۜ(*z)<,kmd`Ef9[7eA ?yB3 SH)~۴,\g&)Y8O$z+[ig/f7{0~kAz?y@AaGEu%^KH|:KQ݈t}QvFjd t3&@ ٤:IVZ_"sV(aOP"VgڞD˾1{N1[쇕p!- {Yh,պf'yU=^X.#r{mj5L]ӷ5|m𡵞aMfL)ݷŐ\6do-3]%"tqsh՚hWw 4u@sĽ0jlthA8s묋@bo>wK}߭)~债)^};!ӎ EWq͂=eE>]MC2oq |Tsb!`-|K־}T ;>%6qA@3c=|6mrh7>go3aL7 Lːpz`Pw(b[4]* _q:T©|;z= 7E4G@x@rć3p ˡ!.qÞqyd ԻtSX 7ƮPvٱ-S$rymu[Gj+m{ұ$0KBobad|"'?|aa@[S7!3( Ƕm۶m۶m۶mޱm۶=?lv^T}|/u rE:~A΢TMP[! j%/B!XW[W7l5/qˮ?y#Blv@qWFOû Ȓ$i+ (/͎ ٤%~seui5h]2SlB34Ɓb`BkME o02B^GN~qls02 ]߻V%2`+0w+,=e/CqR;abɫC\ |R@Gds Eggw3t0/#vbG> ƱΧhtrRe9wz'e]pUnWm1a_c+E#'ydؽ62 ){b4FC&_xhh]C,D9K!|l@nU6jV=Sl [KAJJn&>|2M FT_`EtE6=ja֧/B#9=%nI=?V],A>b/x/V#p#WJ$GtzSFJ9|RJd<-yAW >!FzJiz_EοlȇZ~Ɣ' L$3|4h&iW}4*ta=ș1jg)&_ӑr׶ZhI@[qQ<2zUJc@xp _ѫ2yKmino%+͉׿E@'9cǀdYѨ/1NW*N1׬ª7Iyy ܱ >z@0~[B,6x Gux2uBreypU]`##lόcHt)% /#~=YʎHaXPAqgnx`rh{w[@{Q=&`6^0DzbE%MVPENo)Ћ 359R&h$oo\S#aǬ%Ʊ;\)]f-K'3D t\£xncSЌhf7Ug/⼣-_bś#tzFE.TȨ ۇMQgirX`ZcL@7Ɖ.wOYBGNeeF"GG]8u[Ṳϩ[k9|̋D k^Sإr?G`"r: +m=T6"J!Q烗G5@1qVm_5nP9d{ߥh=I3p#UFtPi|/l=#R]ߙBAPhaGI~57y ?J}Ge[-iGjWcb(M@>bV;Kjt~O;uV`!_3}ұ]}3#J$Y"&\ +𘁶҄a_l!B*5]eX #^Uh[=!9 ͯ",Hʻͽ9е,D_=A`/t>(aׁ݉k1*yN tR dG z|2-aK')\lj(5 Gog)ZgJNdP p._G20''=,SқRp"q=evA53/{1ѨK,W\^YViD]MJ۬D7{T/XcGWl1ܷ;+E>K(ǯ+/wg[qA{W\hY |sLU`]y9}ֹB)(V`i st  8 #0k:*Eէ?wU\C4"19Rp]Zt$Ha NG65+6r! ȫxۥzGǒ^x"[y_66b=uriF"V=]x.:` +-2DVR8ɳ+ c%VS+|d8E'wZE;1%8YQ~Ɠ}'OmtR%cQ cyB=bֹ@]bd|iG#8TVV-lߛ<8:Ƴ>EVk{|MGѯd bŇW*x\ٍj{ 9`IczQ>5gO] aK;7ŎV#LQd2PV -(vڧb@GSp&eC ~gh06ܶ&A‰yL$BsѬ b>kK,&YZMH9t2XK!QBƫSGGpmGQjWcM"c3ֽyO[ޖ!Fp&zWmN+gf2i-{$,GW5߮;0fG'9@lh*{͉i[wZ/ie2j>KH.)}1?~54 N/l6Ts/f@;̓߰'/0N.=Nf }G~A<.ɠ6x" #rrOz _9Kre4nzOnxg>+;Kr]uGlIQ'{-wstI"#t$td6) fH֨h/lɺqF]bĺ|ߌ! (jWdT.A"a$LJ=t$d߼OzaZ.cwM4*}f2:PӾ'*(rOX,Nɓ|:X_YnVnk.a$Wt=%+sAGD࿀-d#.m Hx,­<8s3sXoCTC+/c\5$cټVolH%c鐁%[1Sn.Orn0P耘UcشlG,jAI. H2_se+݀n~,%&ߵz*OICmc`oZd'hs`l>ɕ#os.K 9NCG MH O&f=_` mX8JFwA[:M6hPĈ/GPn[%Jgpf*/:]x>8xn4PNpU40rd;T#!>!fM_KbRI SNQ2LP+ȣxÍC58d r)Y;b?:] ,K!QS͛#.|ck1 =S|1՛31Qɨ5$0Cj=;+RM1N\zO#Gi>6Aڎ!Z2ae6v3}@gLFn1s-M|;pR~*ºf3CeE<(9H F侲a8ݻ0rM;VM )2 yy '|exTav5 ~Q"֗_\QE9Y2QC5CMT7YїH"ќe'l}~.aWǥ *;lj٘)#dpfYhCC1}ܧj#wh9l3z<Koq3qk Xm;~aȲ5(^7 v иhŧ qSrm4~n= RܼhJ@Yø!mv%nA&e"^l9k'E-ͷWM1C5q/鬢 oެNKiR4 o+C+QM  {fӑԷ.E ۜ/ykWck1kv;@HlɋtT+OfSW\&F|ؒM΁0`8Gd50ٮꀎČ7L=㙘6^KA4Y{STF)S*L_X}qB~a>_JӽQ{ITO@[D+ W -fJTY>o \ŃvkokƺťRbr҉Im4?j\(U/*T-BE}Pu*麜0Ҩwpz{z".A>_褑+}pJ}RtMLFSVQVFת;C.3 /E)|' x?DAeJp̏&TC"NUYX{ !1V.lƖq[Z$RbcC1 Burr~ٽ΁G#)n%A?\]L2 iTHQLi)AvVh_x; Մ.f5j#dTV"z9lL'Ō̗`CAYIfSEO6(6D9ܢs!EqR1ϸP\qSl5Ժ|P'K~]eoX{nTd?*WI4E(KYUEoObhýrW⅀ Jl]G]!MGQz36_X춓?&7Vg1b%ϫ"ov<Өq^\52SM؎M] eBZ~vٽ6YeԽ ]>{T7S)5vOt-KJ"ͳǔ$e{-ʌqm̡a.ubCg +rDޘT3;eOyڞ j OiN,aAVJF^忇rHP|3Vcs9j ڶ 6y!-mURK͋INhëNAloލ֫NF'9କ(G2MWN3h?E@2pБ9]򺷦3}2ʂVNW 'F}\ )A V=^v`Y),&$/l*O s0#7{*dʅw)'Vg~_L-faNM]c0ss*s& 4I)P-?L!zﱔT^T#sݽ9ݐ9tڻQT@R2_d6Ċ-\}F9$yi"lDY\3K*[R$=tQ>z̘E7d 4i<:J`O[Y쪑l;,ˁVPM$^9ìpwTTg;Y,Xǝ:N( G5(R ;&qAv"fRui*!gM`]ߵOJ.k$kJ܎ *\uF'ŹMa{[pݰYT7P~z8cѥv`' (#iO g} d<i/ogEϚ &jߎ; } pFK`s;@9!$j'jLxGƚBik=/ƒ;\# J|dMۗOQҌHXE3 _?t+\mYtv]7"+KEaI(˴u/n."?$gl 6ޗ?Io4"qC}v]{ _}C;ɠiGXv+JgX7vA-TV$lo ˕G(YjzvPa3 !5$S822!S@ʈ~ +?`.Ʊό^/ԯFUnD zhPv|o!_Ih_ ҦeDcxnJU+eLϸlP6-Io bkS`U(5qI?>x"kBL7 VwBomP'p>W\[%7²:.} N{,Æ/hā! Nto=혙ȕqna'@gEOT+jIRUB&V:3 yp|~gIЛ98"LKRWao5q9ɝWZ{V>*HLRKz~@TR񺶕KVGJ ~PP={o:Ҋ|sh.|U%鉢͝ix7sfCtCtH *֢s;s?X؜1_w9 n4` 9؂V40R4iX !/' RIN6yF+XʹR[F|%dZ"\#|j!.%Gew,?#qe7`_.^WzӲÇa /!K{zL5Yehkhg4t@nN>\ ZF}%F:5XXdhJ )h1-(0fG?jҔ 2IQ^ЀCn -}0߬d>H Q'ᔂiHC`VDŽV_wXYI'Vn#I~W#ax@|aKþc-. [倆19tj{hHa0Z1"<HZZWUaZ63ъ{HJKrm!#69}m&$.?Ye W%W ۿ}F%c5߉4lIG~?]B*/_Op73B~홀V/vnPsByp e8[P@LsDZz ĞgSxvPF[#nbA{ % 26"qd:LMmJr^#J,m\z-d &9΍ PBȐ%p `AΕC9p_h:)xFpw5(s פAvsm潵\zGNH|DJS}eJZeqqD<ꑰ# eUML#eGA_esX+ ^ TV㽯O ˁ_mL \m q8endstream endobj 19 0 obj<>endobj 20 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 250 333 420 500 500 833 778 214 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389 400 275 400 541 600 556 556 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 389 500 500 500 500 275 500 333 760 276 500 675 675 760 333 400 675 300 300 333 500 523 250 333 300 310 500 750 750 750 500 611 611 611 611 611 611 889 667 611 611 611 611 333 333 333 333 722 667 722 722 722 722 722 675 722 722 722 722 722 556 611 500 500 500 500 500 500 500 667 444 444 444 444 444 278 278 278 278 500 500 500 500 500 500 500 675 500 500 500 500 500 444 500 444]endobj 21 0 obj<>stream xeTdͲ-Sk^Hи;4 o#o~w~T3"C*)HTDL ,̼5+; )KGA! 4vr7v4fq)GsprtPh-|YXY(܁v@{/kCU j [bJ2 Rj)ull Pr3,rV@{ %g0u7h._A.@S/3)=lg rX8ۻ~`eojfO_r<~8:;|})9:[9*K;NWKc|X}_;L?0_ZWc+{+K0̬\m|9:[+ 7+{ 0v6||a>?yzcGG[Y;k`5gcaiN7w0[n:wDO|al`o01)8~%@WeFZJR+,j'Wa*vxo? lMo ,boE ,lD+I+O%աf@g[+{/`8ڛNgD7ARiW5/G ?5?X:x|X3xx8<~ 17vu2323+#ao`ۛ} VNn@2˗S210 4;]1*짿}ݴ 帴.HS0H{^ 5n伝cJ4xqz;ӴQvnH7Ra\AdXvWuPr~1'u_1@U92^i#D&۞VQ[6|:puE3k_; DWD 2.MЮCgneeXDR!%Smӎd6DA5n`t9%T?k7df."ŘG|>D~ &um`7q m󞏗R#M9O,@X 7o W`w(%ۺ3l"(4Grd\AeuVd%ĘoMC/])q]OKrP6}# {SwF0砘ߺ.ݚMҤƈnrѱ@oIfȕykZT;^%( 6SN Fs}>Z Qm[49~pQNzC0IL&Ó̈́#[UMdks6~jVivS̺vcNѻx?BǦnY⯪Zg2-,%E7Oh@)=;FWei  )f5Cĕ{N< $bQo 픂{+"J|vOi%G*{aIմ8pDl?ڔ|b(8oO֤kcA ՄRpts=M#5WrmEO,`7Cp{9wӽ CvIYPek.pҬ.{&3 'AAxvS"Q4K٤n0oG( ̳{j1odXlOb9\>)=BsanDAd'Px#E N)KCe PJ<N=Ry)< ަ}9vMXp.x 2FF]*jR@\UgYA X]@{cיWu99ָq.Z̮ED'HysdVV]ڪRo~ά+6[*_,9깹Lސމyr83PIS8cy5O33\1DUi3g?Mek+gd*m|3bb-㗧]+J'=\UGN 0&BS9TϥQ9_U',Hr)}L+TFb;- DG;Ҿqe꼴fT;G^7τQ~z@.c N[GD5۾J36+׉bh߫nj׊h:ez,UHBQĉa5Tf݂;λo kk_ȁK#e.FI Lnn#9T]аؔh(QyO4Pr*+'X`COQ-|تh; Xr$ΝCn/ kenZV|'F#T8$=#E)5# 6zT`3 [RR$-6FH4i{'a) Iq8l;_9ږ]#(&YΆJȆYaf6,T;e.nj> '}KǕ*"کytlC_p,FUiB7xi|ӴLr NӡCz MKY.ニ>ïa nn GCNS $Mrzpmȇ7<ĩ68x }}W@pq#F wIhVKOTFSkpTڞ 4|ѦdM!La/NS}9=S&ԄJ] NyH1C!!'Yږ#]׃$/H &I8njn6isvrHeAZU}jcﮗT @ '[bh&j녈]ŇW;IĻ[6g޻p{ B>~FA9hޚr~nȍOTwp >ֹת [틊 }gWrG@uQvhư:Q2īAi{fJ._ӣ8k<>7ֲH08&QaR d݉SmY&/Jd ]s;LkkXI"qJ2d7ua'S[X1흼~_,ޅ04*w4}[/`4*tGG ~p"{1ɏ"'B4Kea] {wO?;x$.P)[L|O2϶-{B|Ģ:Be;1 TV7 v?r֓-L#s=fk':| <1N~om|Uchԟ^{njKUeJph 4(KcWĨ+9D6-ho4\wRRmyҷڰ͚YڳBt,*ؚ! mEHx1Cqd:S??tX䴩z/tVrR|mw R=)f[w]]#"g)'.ZYg׹7:O<<̵)#M 9]AyFY?.LIǻyb|Y$AÚs vs`]GheK7=5jx7_&;FR6e[vA.S/ai%=hӂ i tLrA^cG;FMLPBk:?o-ȷ9aOPwUL s"P&du'PkU+ ,.vODt}JʲP|.b`mI^Hz$3e[?ňXȽBF$!ل2y{TC $+fV>!0M::kc5گg9<͝:?qSS WI9 >?09*e;I L^9ݥ :yδ6𗌝:%E}|mo:,?j?YNҼp*#<waP=n6PZw}t$J7Jھ5o .Wֶk73 evoYpBp(f]Ǥ,GJ >zuG;5OEAhy8х)"6`:yB!\t(7E;>b͘DT}cDА\T$~Cn]UtU_^1x|Tr̘D\>)X:ƍ5>cZXK#yR|6븿Ą]=B]! nb9 sT}ׯx4T޾{[s `Ux@p ZETy[gN-2 /.5𴇾NuZVYx9n$E<}LRu$F[Y +t@b,|qټb04#uO~?)Gn?]Oն oWDNƈuL>9*0gCu!ʭb1KAPuv\ FKun}/f-^¸'N c:.'r701Sv'+R]iE#P3tZΚB6E'Qs w;g,?|Rd?3t WjT,LD8WޟVy}V^;8wH TX#OcDӲ(&q҅4VF4y E}}f#NnE83,zjzɊ7#4VU9yb[l-D KYE4Wt_s|%eiPUd-gn>lӓ5YPf&a%[\m^iM w\Ƙc ![l${)| ~' tkmO; ^GZrHmu`z3|9 -'WG@@o'P*ȣ4 {@-|+>K܌2dM N!\?z"=޴tD=mb 鎗{@m50!aXP˦Jg ƙ(MaUĊs:C61 Kzۧz@!۔6ll&5uXoV)<`U5 (ƒ,z)դg:M(* 5fGRORCdZV;ƩVO OF󗷩sg rKY+=K? Nٮl*x[g~ֹ\̼d 㺟ݏ_i-|^3C%:Hzǽ@ⳊvIPDfOt޲*lr|lDɆI$1Kԝ\3x)X^Wz9 Q[]uv Ӎ8p '{(_|\ߗ3ewXlҙJbw}U|=0G;!%ߧI'{eM #e cT{j4Q4 dj`ҫCAYwü j{m>PmAN`ٻaMo8h Dš^֒ĚG^ v.с+W R= ǖBE_vlShmInC\ٗrq3ZOWʜ`ϐ;t"=OCPh=NNx%=R$ZL{-LbBgw[P&;N$m1@ʓVX*}ƹ/ %07'_/^eJrFF#]4K4#+V'T/Zav-Pw{BnjF* bΉaޘt٬C4PH͜;#xw`(q)mHJsC2̆4vhHbn"PdL'8&9q˘(s^W;綟_|0$cnRbH djkG:xc6C v zɿb ^XN+zn[-cƒf~c8d\?6' _F ^avN^b!l`+ktJ9BoXf w eg!d^EqZ}X땜=Q@rVަŲ9fɯj3upfP/~6#\!?YQ|Uդ8[UWod5tmFw i͙j%ݕL?ˇLJQtMwlSڦh%"f bv@NGݷDbeVC!j(Sifol^(Ϝz D_qc6~dO!B `҇޹pxTI-KXתBA6@NA2 t7F)ai;BDihN&Mwy*jcgkhA'Y:Y$#Պjp 1/Ns .FLjpkA6GAWʶK9/,rLOȹŰ(06iA66%/Q7*N6)-NiZct6meWIl(A5菍g|ބV@jML>> SF?rGǾ<^.@AkhU2|N~k@k0ܭfs[DyjTt$9z>tc %b-E 0 :0Ty}Hvibeoj:%VLa&\n#ֹZ-gq<=Upes9FJ;g) XaCO4Fm^1y ^orH%=`'Gacy,'y_l(zp("R*ra(Ba# ۝ltssx%*d(0~G;*8#q`EcdV\)/"]S|T HԻ6kdWl4b:|γVFjLK#4'>bGdHGc; LUC`p Zpf4 E4P2LԸF0:m,wޥ[[g{ڼ ;4'Vaݨfxt\h@P#s ˏԾ +BZ2 swaWhXq]ôkͱ6~M=N 92(=ntۼ?{lhG?.>2 Ҧ:,Z)YpӀ_\SնN. 1N+b#;x>fPf<%hMیag1wT_NUv ;%N[ Ov4|Co : -\U7`Ur }d[vKW^g H?ˣxIP&!-n%0!;S~t8wɳ=1=R~[ 1ZJyQǣK? RWi Kk∣}^n*K4.Fӌ{B^ w D9k${uSlz:kYjl~B4K0ZjGAӓ% KJ~2C ٌ:Qb&橕'ɡvsq}-nKn F]BjNe]g?>;Xc&4 չM.t0* ~SdQ,15F蓐řY<*(mrgRg*¾I3$#@BBA~?/&;YNкY)TKezՔ4o `FWí]Sf^mVL(y&R:Dڥòf~ G,%Ya֢30 5xA5CEg[TŔ-Kj=GDRp.mޢW.[N61?'S%*Y#P(q*Æ6!YPY*:gJOWd[PVFg<ڸa؃S?L)Ka?EklN1;"Vn>&a]T,&5wmTxK/P!.D;D,;A+zf+;6ea*ܚ+K#Swm~sd3nV]ݔΊfF[Mȍ8vhSXD)Ћ|e2g L5 *q⫙~VLRW4 xaðeXQW6M󴎋i冑 GQô׭Rjd뉇^K/H:g|K4"D?SUsJrtՋ oggMj.8bT{%nWZ]QnL!<63]ܾ)Rwd ,{͟㽾Y3].dc!r|;|-HĜ$B:jXSg8\H׷lBX}GpX50rL VV5efb0Z C'YPw%iㅕ~>y(YYG-qJ3- C-z ѤֈO0<$cEbs͉w_H6uLt+٪mI1`Z*+1XȅBo?$󣏔g'[ %8@V5Avy#lVrզF@4et# $OsљfNj_]T^TG3[zfW'b I ktBQ+.@#$.aKܹ@oCV4҅] ++b-N(]'l}:q"aavz@uʵ+{XɄ̃p+ !݊𘚬LU~+Ge<}f]k|^x0m"\O4Eg TqxZ]k_!}|'^Wל0L.Hśl^_pV4a'umL`@zoV> 5ZFZ’]rR^oq@nIW{oERKt;T׉D`~FZZ\mp8[$*oF_TQUCL=Np C}2H~Y-9]'PMMـcc ٠^y{$?p"6`U]5HɈ']i&2Yg%'~NyJ.piMB"89 Ѿbf(o}=uO,ѐd&ޟd|]Tnԝ3.|U"nѷQbyZUMY--{C5U ()Xyc'm\3@@ >ШÉ_b:V큻?b k#uixF0bTݍaHq B0'ZSDx]!&"RZVˡwN)/F Ǘ%9nY*(c[)g|q9rU_.  Rsq=IfPd"f^^2ro@O P䭇1ֆ{VAR~(2C'>}a"YTZk l\*vk&0 "A19)7 i.JY4^M3J 1VM< `s39nbɊXABАlBMhuϏ,GX=XR].7pE :oU4 8d ۂq݅rjJm Tx-- Qsp4:^ khqwPy?+̝z f\KG1~GTԪXp^deSW.9ۦDytėKјLcfJ{ZAf_2E+3 kkRKklxr-|7Þ sAP%jTA`:d&+gUFO8Np.TA"ļaEH`ZԦH_$ϑ9].!6Pcp5jgm]hh(jAU_o[$_E% r&.r}œ! m yQXzRL3`0Wˌ,{zNB^pʕJUSh_ENX0k?ZAЃ5K)K}!2ʛ+tu,9xsTn?P(DDˋs)skN@3t_ o1j>aBkEMF!`'-3; 6AokTk[%);vP6g6,ǣ-?MXA& }hCβUM?_*юCYnĄxGɔyk-e;2ҏPx) %0k~!ű Lg\?@,Sᮩ34A|M?;YՓ"t܉ ɵd#hkb"A}(uߒn$K59%u[hH ?_wa 7$5B3x yL&QP?aABڧ<7`na3ZԥCxq [B_ʃk&F$Oջya"Vwͣ~`8֛\ ԶXgʆ_& aqh'rhpAIXn'X&β>*M;gF5lA|I%pW%oODteDYXI7?ˢث UGul~WCwX2˲jx Ak]2z7XWNJ…QfP7*3ȽuвW )wpSm]7 hAF D:ıM!A}y.sR}vKl U1Yzf_X{)B*]'=:Mg)Y|X 7 ^!0Ϊq'W.c0Wx+^#SIa2sq"˨][[qeVprKj[&Ӓޏ_Y N@Jtүp!=lX~.iZ`gtmtvaN[&. ? \&XƆ՝viJ_|doY,kob ̂M PtRSvF68ȹu?Xi\WxW(9\{b,9,ݡyHM9'QV~R Z#뵊! |4#W.׫s(]#ynmlZAR#M~sDL0QtV.(`{%KWpᙗVN;iڲcgPOrѡcw:dV,LLf6/;\?Ksc.7<*CM܅zJoiпABAk͌ f02=R@+/sF >).Yj~@"!*cxXsQL(׿P *Z+a1*IHL62c=m5Qp{LP**ʘ@zƵtXH)YsԈpGe`zRŒ-&Rû ȇae6Kwvj2JCf jT#(?՟IhΉY7#X=\0q約YSg  Sg[H'('ڧ G{2RYXsbA1lKxYr!gT?(V92Z1u[CM +ʗH$dR]OS4B4>QkR;87_՘+Tݡ! ^HUG] =hx.8pPEOYg;! "%DHҢjX6wÏCO$zb,fTJ'bj|5Kv1+0 6pz⣁, hpmɞ_RߠEvXw/TeJ:t\'u+ Ub!a)bVrȽ +hpBr#Hh hUvn_/郰3ߧ~:v WCF0AlN+rQhx0uLŸK@u2>CWQ*юxQhc,h6*NQ, &HlcmFBKӯFRR.ˉf.f9KamK-wh*"jqHy6 ̀-JyT\$HjUq$Q&"bshrA{0EwßR' / ɱ< {S4W;ǿ2 hzft3%|/̐[ v򏟏^0!QN@xSBXcp+^1X2b< bl 4{Kf,k;Id,8L`WuEϙܢ]g%#Pyٲ[1fhMg'A^ϙw\kxߤQcMIjKL.~k˂|'ҹiMRNe٬Id5ftR8I/u&G{G1i.%ʷ/ftf-M;nldk tvr&)6"(Tk8j*Pw&C),f`æ-,aoԫ/nX։~`|".+H!f2E..X`c1-(.6[l5NEǸrglXK)~̛FDG@sᤘ<(dT(J/ E=eE+2P7 {^8/l!bT B{ğhEPSLV&|rs/:OgLʆA*ʍtң&iZnXVh@`BQ kK\ ;_)nA-qtVjat :>j``ȠL`#%@W\ID"8k@fUw3BWb"j03&Gx,aZa׵#NT@,P吝yKQM>-ìS1BeeyX"]1{h= )wS<45mf]߫_ϼe;+EhM*hCQ=r7Rn ~τyT[8-ubfü͵^ ~D{8>s_$y`\I- 7F&wI K?rkrBl8xż fru%A-Ir'b<%XzbMjZC~O*.@LtkI8'&RFF{i?32-c6o8"'Co;kay,7u%,{M!DFR\ ]F nU)3 .so}g%~,MKrȭ2'm N{ B=XB}zh#hvt̙%YYLiAZW $-LtUE.ѯXFqBޗ UM*)Hiy|)0W;RzXmӻ\GJ+ݨX<%A lV$#`~10υo&НɳGRX~4 BE(b+P4 T\LX^@˓ JSj`2 kZ+]ldAŷ;] =T@!+,@ӿi+(D^KA0J*Dtgxv{ 2͞׏9옟W7㻂I>@cǟ^=d֭21aZOMqJ~,WLlQ>>P~1*Eռ!HA戔/BNx^@o- E):|c{]D}'*E<<z6 1*@/įېo\]av2AbixeR0uİЂ1Rmlaγ2Nu6 jlV]VH  q^o1U+PM;j\Ҡ̝Z28iB *fG;%#Zk7ڟ▆El|зB1/=F->٢" Mt隨,u$%k4 ?:kRzX$<#B<3u&t)-ZJ( hGʖ$sP0`XYQTks&qđHѻsfr4C .^: *|?irN[wǾ 9uIҷhmNse*J+`'܉Et+ɹ %tի$>;(>[:dqs7+\s*Jω-NGOw!=d_/i 6*Jp[ϟG}6GU:z6kՠcIT`By~ @Y !~Ljt=is 0qpz7ρ)6Cn x %7!^!sHr-ݪtmB7=ރb3>4l7KBL2 K 7Wy&HB陣;=˿(Rg.nP^sfk0n|7i0IA{m4tK\\(9`1׈5t[.$'낖Qwj)gfF&[F_>P`o)6-ї&BGRPBYsCS X5ϐS/RzK8+l!!r۔(re-UM>MHȞVOAqY1iκ)o:E(n 4_we5M*Nb. ] AYƏaC#1L@<_+,M+[q/)+&`LgB*}tMK qa6C0]U8]<d;Xg^O3Uk/nb_?#j]}AmQH i$$PD>bǯ9fBR)˿i}8Ʋ}#!;$cP(Pf^iMEW m,]0EmD*oΣ9MW:pYNjrf\0[QO]е &G5T&+pV2U/ 8ŢtX&hXӋŋ8Ht2@YQO@>L" #hBKRde!Cn|VB{D&rLUaT50ՒUUٱp6 9ސұ΃F q!aa,2 fcZ{#ʄʵT MW; "%ʝÿC 6@aua!Jtg=ƻ)iC5ۥ{[3[\&EսeMo oA{.{Hx^:4&-mjĽ.U`_8J{,}~@gd?𨸺OpL\#sys Fsl:;#c0T_hnĢ:z LA 1N6ZE|)iϾ55p]T1d1w1ћ=P(\1:^}jMsȰ #;PZ%$buL> 5V+?rzf%|(P[!X9(qO?A݄#6vAu}\(C_Fbا5 ]!]KcĞx5GXyڣn{+P3i%hPQ,-Y;a#aV .$Ut`>s8Zo0< m(_dHhlVѱLKоDJ 3Ŕե"8X9ST/LJKN$|~o9ǒ~G/R\OWfe`Be,}C? Sr#93k{π o++ΰ﬍{Nߴ5υHl{&py='ױkӂCr>r eȬ3PhCxM=|K5j[g!hʤ"I~l:pwn!HeL/2vv" 3sOj~ѯx%)'%*hS}tƽD6j\-3Ncr891Pl(?E9q#؍h2q\ԯ DE<@Js,HUC8Nb&Y}=4qk[oGl$aЭɢ_o_7X! {{cER_ Eg'm\0#B Cb~BA Z〰xU^:!KVe2dl[xMM2ăf؊Nr0.xR\a@AmpzB0($xZC^?}}\mSXX09Aٝ^?YQ:H|3Y BD!ưͯjn\g[SO:-ohBG91B\0=3;\XbA4#Cv3T4=m !h'|l 0ؤB=zs'U_"':Pydp2[)3?{$C=h䖾MfYJ`뗺D5 տ!P\X/F=T7Z{+AC@&fli!&s3@ei}uqc$eUWw^=eWOWfrg;`bZ I1"gy)t{mBq;zbѦnj4XR H\pW}Z$H/q/q!{0N:ŝS, R5孧:J{%P*j8P1B_y&&1+ ]9N!cpEХmJ[,v~BѰ옠VS~eMW!Nɒq5"'8g;Vj[H-t7ף ` {F!,(Oժ&$c_P Q?}$AJ {(b\.MBmʹ>i'Y{'|,ՔfҒkPF-e"6\Oc]@(0OwǞ!_Hc6]`GBzğsgS7?.9RMe@H9Y߂)ë:,!b FAxC"7(jI g0髚D^Lt*Trg9s*F}(խ\1u!J7A ~T},@DOG#of 犜]1,{4AVk_S \e?]L=bdUaș<* Mqvi_NДERnpkGEȑEY(rI'DH]*[ڥDF해ł&~kQ JDq\S Gd]rܽ-6$eDYPDa)76)JFr]^*+ʐ4/3x_df7-\H̃czJKAjɥJ& y\y2m!dVi1k25OghN˴ֹlHz &DMUt /= 2a?olCx!=D,&ே˲"]/{d _="5)$@oM=n'Nؤ[-cExJeʗ4 ??paT21JsOYAA V,*|F0-g&c}G.MPH>Ԁ4>KgA`SܣEAIGiu2#;wM&N',өH؄H;daTsK8|VS$ Gwpb=f R o)# OjI:$aR3?ӓYmY $4f}S{]9|@phJoпXXOֵ+]Щ\pHbOTfƨ_VqaR6 -wo_fvA.d3 1̳IS{hYC,uG0GGU7зDٳpcfH"t\ 'M/GOGܳKV[Mp,3 %LRCGSV lj<-i"ni`CcՎ5췳ٕ!Vy\vt *jl])7GaOKD34\Ϝ*wY+.I_:WLQHZ;呹wyaocw ҥhCa;w}><6F6 lga(< p P%K?r_+9XbO"zʫCJ'%{+xXx _Ve3Ʈ9%I<(: 39Im+:I 2cVB_qɆZ$궱&ܝ^Ԇw>A2ZƒS3uHB9ÚV#W.FB-#P'&ʺ66=etnӹ0_™q%s`g̈́j ̤\?S7\ɡK,rӷ)IΡ_˱gTYTHl'Э[<]q=nTw* Д >WUu8 "Z@_^!XD/_v&6YG]Rh*BHas'lO0 |8M S ;3|l ̗a=y]L%MhڅWcjGuϒQslJqKt[[xD>؊3aKyD#!0=c%h D| F #}T(mzrdIxU0jLEfV%,-e~g>.{T*=[cHxěaI! Ú2Y+F q?"X K r釋AF?Ǚ} O;\(!cVo2 0,dϭ$+MShʌWq?x3*f:Jjl>E0]FG ,DFg 3*C%Ilj V7/vz[ qr-|Yy~OZ-"$/B]D@\d.>ثRRGW]3h~Oh_}5tuJ Qd ɱia (,lz#&GZ>O$^ZuXQ,Le[iv<{AZl Y "\2w[puR(f/e/H\Ҕ6 v`t,M%9co  ,TGWb]H[9 􈬖mHtye3h+VER!X%"g[B @NGsf$e%Ud7(!ã~JoO+ PUc}shLw } [B;!P#;Abϥ%Y s߁ս<<1&m+,gv91zGryn:h<<؊aIaj3J4~s?K'2PҐ+`֩&=vά]lj#X}2Vz\}|Zjo !A–:- eY}kg~{9EȁWK+8T\÷t2;FBKH?#BFb'~K:Yh 37eu3e14S8_~Y'e hw" ,$ z[Fe x\/mfC u ҡz :uzV42+W5GCiX8(MeHϕ'u]&t&]TeHMkhAeI1a*~M,b4Sm3␹+.lQ0< `IfTcMA*բkH^)q+l*jM pH$SbMnKa #=~th绖md K8¥_fa@(z'nKl *Sfˠ.]db= 'lt'5^N L6SТb(%t~$^;Ćnxjdmd89+KVY )zR_Sح WhϬ,@mdQ KzSM6ojJhak繅z ,jwQ3c+ru7Vو_HEUws,;LN[}#gv"PY,[ە/ n|B%xd nE3ɫGX?8 y@5vT!fKԣjO$^ѕmC?#k,)vf]hAN*"1U~ɕ:5x;<$piguHtMdx.M;a@v#aYpQT}B&QB185p҆%1=~쟧@ -(*kXX%eE#u9Q 9*)Oy=qMZiwf `>A 0^y9 pɔ+-H8B9Qiؼ9C~OMbPvGi!vXg9usBb1%z< ,/yd+ $S q-ExЗFXUbvS"SZ) fn&,آƊMR>ڬ(1)һW4\k, CTjw.ʁX%Mw.RT@C|AX˽J4]`dt馊PLg.η|_o{k&5@ET]وGT'cfK?l2 ed]l^ E4|+KV7`Uk0S<6W,`-6FnITiywJ!}(4Jj?#a0ר mwo,mm2F,p9GeŤ͡3j0x*V=^˄9+-9Ӧ @rb0@7q1@;)PIw[` w2艮*4!x"rMh8B7WV>divI&m3!PyDMä\%\z!s1>N9^SyO|H#Vr(jVNpG&ܨ# $6 oE׿Ɗ`i ple*Ӧ!vC=9Ȧ f*Z^ Xddt~騑ؾ3I~8Rqerѭ8kfx^l?$@XR6 ݕǢΝhL ;G;@HTOrLGpgt>'޾9z9MJ_~ȟҎ@)HYeՓ!m/E=⦩]vmLKՄi\~.1Wx e\D9_ziCr>ƣN"YC s.ny,+sc{>&@-bKߎ#Yng'ίA'75oZ0~>3S||MC?ff?/H[L$L!{+fKxmeD }@Ё"p{3a,׾"V 8U~K+/h{J-AG鱺^@QVaW 2 ޹TF9 s{"R#Cwqu$rW+DV!Rmw O1{4VFaT9rIV47-JQe矍xs+w$D/]gz!9 Ѭ11닣cR/=7h$$oB$bpR|k 3uRj? ykWΔL$^0[w#[+6B! aeFWaFa-S'#bc1 Gx۴,H F<!A1]U+9tI\q,ϟ>gbߜz*l4uP$ 2bkPHH#l깻MJݞ{#`3Vu[X$PNCc$I,ikg~v\7.ɧ.7e9e6@;Qµ}⯤j>nc?c 8 EpeO X _»wϹɥO,6/!lF H<,I;UO>zʒ#W>8ݳM.S*1ʑqÄ]8D [?nL w(Y#j,8&[/hd-码vQd 'SL2׀Qܿh4NA<'=e{@'גw.#a#u`%뺶 ͍yaIJ~;0?5xNVbV+P*?z+0`3ԎC { &n Lީ㹴Uυ8 -ÇXpoČ \GV2Z/WјIzӤJz${A pj]}>6!qB3;4Aݺ%bGyR@HQdwڟD_2)~0M)+l(JeH[SZ՟o7:=[{W¸_>m~ 56G+8Y^EwSZNP}N 說] DSa8zD!'d|ص{ 3 *j<7@ tŰ,;\=Ώ5ţ  r'" 𬘿rȶe@`%T#}B}mƙTzC+yq]6[PIO:%x?@>ȸ:[aMKTDj4 0_!';g YNuMD >aLGmp]|]^$n=&u_p"Ho}%=PŶa/;J|!W j[F*Т{(in2c5[vRR3mD1GfRF:#k(`2 :خYlOi F_01amQ'P?hL[v]siٿ!>YEIZ1QF?cHp44'Z"+PzL7S@g"F&%m4I3aV/@ U07=TIיaO(w^ FF<\p$HSfoZջmN wߑQa:c9zoӵ GJL3|tA/ʄSo\UÌ^OSs o#tRrF0QsU)BGiAe9x !~{YxuJx6$'!s"=~232WT aq'`MZ!27">lJ_u.|" lZ7k ](oTiEZbU9!w_Jx%C<_ja}b;%_rhpI- b=׿YUK(40r'D=-VDP|ͫg_%C L#:_nL~hdI ]NGƻ޷97v^[J] hdzٰ 3R7iOФBGM!™يy.TǟKO3t( oN ܲΊe ,S~?<w>O'w"{nswRS_moPoԔ7M-\AisGP pO%/jм=T~_l PBiWx&QoM9{||RB_2LBq?ېmC]T(f`/h$3ErJroB=7lu8x@E6|}RhwyY3a-bP(/TrZwhF«+2dw":mT"%֌*9c{&|lܸDrELq \[p٨r_Lیwo.lJbr_=֑A29Tt7)m?Sژ) lLrnKsJ N5?~kr)iro&h0&¦4ѾqVff8ZV{'ć#d\Go;$Κ 5)rM,]Z.N3t?IG8B\F~ dEsDs8wJI`pN#"\J2$ 6v4|= g i.;gyhV9c5NRt(U)d R7( 9,>@?YR΁vX:Fze!uʈ~g2O=>XmlXKY6ǶA:N[Ace1k{V ۺL-l'EGs*}S>lҧLc/=u*ٻI "/޸ S?^R'VTM[S0=*2-Ts#)yDV!h1RdE3q nu>CB'Ux&eVTdD"ߏFr*Tn4hz0+7Hv+ET>sadX>Y=@>3!6_CcbBeA]F*c={ ZKo-[:H[IAuTvR$Iwv*1.ȡzip{H)+'Nxr ͮ~qbӟ|X.}ǥtChVU+)#i)52Cɗ$^7~N dJ%xYȹ)C s^+׳9|!:ˢ ]T9x'=J; ;(7u7g>6;vGX݆/:$A֬>oG'=ʥ|Dn=,-n!?5d '˃HVmtH\la{QS˙;BF>kPR" |9HR4$[fOꁘCw%@mcD۶mNvǶm$_Onw jV>٣HQIe(Z=D/RtBdzO)Yb[S>|QUpuqpgPE]nF$&Sr$5\W%$xJj2NX#h02C;BV߸Lbu񝈻rR fgNDӓ>kP)}ʜ:|;-IPU9%ewގa o8Ӣ:ɘqV/re:*G>Aƻƫ^agt{`&(pAOw}啼`0Glۓ}eoH/PLp'P1'lfspvc4trN*Cɺf;LYcɲj~s6 ^)I2f(|@RHְT<ϥ/KB> z2 pMqXVSL7kg̕e e5U@v_:?lsXXYQStt%Pӹ&u<3B߳qVd&]]&y231v QHBpC(s&H@}{U{1gGхpB]\$T۷X>p>Uh+@kf %[CJ>+FA ex~~+U>Y~ ,1B5 J.&V45.^ޟ6Av ο؍KͳiߞVVe:5(ᑦ ߿}R<{MJ v|T/C5oIWSqu$xy`*M ^˄M 1<vTMv%g,c5P<4-̎ `gdyY |˽?e ";4e>Au( V>.Ϳ\ewK(׿㮕_ @=oODXSn^mueS'z=׃q( %9o%_kR|O V;,?o~Ay~fykZ'[|+ Ǹ~AH _';M2:cІ s;`(տh#UpoFZ^u4@0iݙK_`ɖ2ERSjKb^K0Eɸ'+NChth|n"¦B6 03u8ټ!nŢxД*l WA*J m)2]I i>T]~4oZO/>s<)ͱհcrEeViof8y`>8E ǀEn~=xf0e#qQXSĔtErD}Kn9\猑ϵPÔoAAWg恬d3.޿օXa L1&ŘJ̃+l@ʓ^>I+߰D tqIaݐd 5Tr.y;xͪ-W-8LL>e|nia S[cLSY0')YH٪ /d-TVl2u(R@ٳ. 5}+vgOmW3_hLo0krx5)rH!3W u.Xaa@GVþKg~'Y9&D4zAQ)lzm=Unj@R^$R3SeTIA7dm&pEB(1ҌKét">杯ݥ_s2P* u%tbc\Qnq+xXح—8_z}6\v(#NW{!@Vj^ h9; jkN^!|N Νϟ0 D~&ʥM:bjz?+W ^]bh}0=fT&Hp^ҿ?)G;cK:$,;dׅSo?pO2ߣhG窸o9p )v=2' QXG[=R͘l '_8t>H :v.fܢzjȸFO8՟SGx?ؒ h P+6fŬT7׎أ_[/uyf(!^k*~jj& #%#0a3ITqn+lJZfƞ$AM~gG,qQEVvI],k @2JDiaSl7V:+t7Wa-W mӐ * g0^*N lĽ4iMSY=CBR|9AV@V9WN({aJ7ĀZ05̗1fӵ~{(ԯ>iCB"&n lS\Y݅^C!;Ť+fxK}u4UO=wKYw}$xS?@J5^ΉI[()EEcPuE~7 pKX?\(v=nC'жe%ˁ-eI %\1իDžTk2%i^w`x $ґO*b(JVP0a1[?QK"L>1Z%}a%O|pʐ$$9Nb#{4#nڣuu;w+oF77`HcJ/,%+v3cy< Q}ί_7]H&~BǑJm@aqQޗ#R_[ǝ$Cg֨qY | Ew<5:Aٍ6NO5tVRtODžκKiQv@w-wi˙?@"I1orY/N !# j[3z$x,}Zo\(47*IHExƗ-A/ZU:}oLzo/d-X-al|hYZqUBo (9A#|=x_AUsC;7J-ģrO|eclp?2Yl[v+CGDds5T=?z'?ңHDIHiC{pcj/x3UWGP*Ba<9ѷ ~{>P-o|lxzi z;@ChVXBh\R-XP<֪V6<ǡg-{)Q ea۪GOBV61\tC0|i` BHjebRyi+^ԠhJì~ǜψI;n Yò7՛4"x8X|Vժqz]8c:d CӋh>g%x .' n..Œ%jg$O2#̸/ jĭ ேOQi K2ZoJ, e| gNdc D+gYSg/eI6OKi^cHa!79˩k v/J'p.}a"w=mFrˏb;6pz$r0sF43j}`H8QU|[҉\k<]߃^bҔ[DBd=\}o!(s7:>C7SB>8Jw!#Cl;J<˙S.0_~Y3F*z"\;V`t#=6tc"GT#WY@Zg! L 66isԔ5|L$Wڳ: g2&YQ&GkBŒR=EiK~(?T+r=gfk9 Bg2=e7Pt?kw;]tN/-8.=ͯr 1rdbFTt!w AWv:c9 Մf(:wyO)C E$=ŗS9g.QڰvHl<%N:Xn*.L)v4=u NJIɮ"0r?4W!*^cXt,{6J83i{aŚ]^t@C^ '1{VF+@_ꨈ$ ,tUCZcs' 䶭ݾU!s{.a%.hU%B@X3`o柫yY?wgc+OژH짥&\8 ~]'[+si,*(vA5ASTb^@dp AbyQ K_~ lp;k|ցțY ;eW}`G/\[aʑeEsCjpndAS@4ԋuRk5-EP@ 9tF4R;\Se})8f2fd[XxVӕ*n9|'ϢtA\>770i(Vx=j_Yyv:mҦ6^TK>7laC'w-1VdH(Z(';2͢CkLHqy&s)E3\ x:L2U=ʎa2yu1gx385Prh0D=/6wWիxf+Ӊ!la hU7siWsofoce7䢤YQU"$2i%۟ة]戾1Ѐn$ߥ B˅ܮ3ZV5;5djϭaQ®uJUfkzL:`Ar &n~7.Xv3c3 x\60 :9pyC $ ^(Yfk[z."%t.I;}@DB LgL13Q?$0ab0v &T68' Ԏ}9}vz?AmU ͦi_9އhE$Z8?2|p()mtCU|r'qSU,dɑQ.d>)^Yݣ {a7OQBn\)MAIiݙQS. TT`;ո-K]*ȶ._kSqr t= (!4c[C//C:1M])F FA[loo iSoyQIgAF2?4GkI|i|oRjo!\MW_O)26,Wm$hүYܛsYx!׫lE f b _'i:*|-vKW2=xmv5 ieE8<}[7>c/n$y EܐjD kߓ##{~>cFg ;ς{{fZŊg'ŖU#F{3E13~̍;"bD#n6Ў,k+v+/)GIsjF`8}}tI"5Q5Hƽ2y%;~55;(QJ >fսuiaoIdIaŰrPԬ %ص69jܕʵ e͎m dd+Y]'eɶI/\ٷV¶Xv]^GC[!n|[j)@+_rC0`q]KaOucce\ YkfGVjx4"#:n/;y؂:1X.: 6t;._#Ѻ`)Jv МLl;Vx[?MYg볹+F, Obа_ cX̋umC[i(űͷ_YR BU-R`kKecۂ4C.LGcqK7'a~ sB?0 G]< \!MѴS'R7I)Nr}\,op>.jdbVah}ɚu%Mu7fL4ʠliڌZxQITK>1}RFwZ#uK, CGVFqv~iؑ,zQWHWOzC$/-lFMC00ĽP? )BV޳Ƅn&ok(ckΥ0] iMEG_k!X 5UXI;}VK([rF6G5IF>rT"cw[^ƛZ \@+IE:GFڑ"kvQߊ?yZ8zKEy>bĮ:!7\T|@ CX `!c2~B.+j)";V?Û^!Sy^*nVG;5)[*Ay'dwK{Le)C_<ݿ<'Go2[T/UA5o ]hBp]=9o5X%ˉ|pP:%\5.# :MT qoG:j}@'O˗`/  :ܬgk{hXǕUs ]μ) Pg+~#$܂cv1DEYWJ3e@<]}r~g5W hGKX`OAI*b-ysA[gɦi9\i@m2zpW,R;r%=opʚ>7/7y|Z~@G`=VՁ/eUtL #Rbt!$y G֞mxH#;C5sI2to*P!U*×osZSe:65%ڳ&%M<-tG]pzxpJJ_oeg*IژXc~KS(|zHpMF`2nE}lkl ;b6t̡ĻVit02,[ZEDFc eeqɝO0b ~$|3*5)7tW{)n~nv>۳i'KV*3~{F3JgiA2WB&9grfv"9.|XU7 EMKW!'~ݟXDwU4 u|_}OikGيybTr@_2ͼ|5P^gwQ$C_kL_n,ƼdռXQu-cY D4+lp<6X*Oj},bgZEVWr8_0 Xz!Iu[v>ߍB=\- (4Gwo1A͚|l/iuiu*;5`!sXhsS2^#э>\臘_lE ]0$H.B|. I5R/kK! Z{}WJR&JұrE C>endobj 23 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 250 389 555 500 500 833 778 278 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 832 667 667 667 722 667 667 722 778 389 500 667 611 889 722 722 611 722 667 556 611 722 667 889 667 611 611 333 278 333 570 500 333 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278 556 444 667 500 444 389 348 220 348 570 600 500 500 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 389 500 500 500 500 220 500 333 747 266 500 606 606 747 333 400 570 300 300 333 576 500 250 333 300 300 500 750 750 750 500 667 667 667 667 667 667 944 667 667 667 667 667 389 389 389 389 722 722 722 722 722 722 722 570 722 722 722 722 722 611 611 500 500 500 500 500 500 500 722 444 444 444 444 444 278 278 278 278 500 556 500 500 500 500 500 570 500 556 556 556 556 444 500 444]endobj 24 0 obj<>stream xcpm7vvlv:mtl۶tl;ۙs0ufaW]oymɈLL\6n.Ɔ+ )7@ jj `f0qqqD<,-\JT44MG`oMgKs;XQba 01+hJI(%TvN6W#Kc) M03'4go'gSco5ScSXS'[Kg3`dh{?|; d-aSwvq6vtp|[U..vf;%M]7?0\CK;g7`d 0tv1 d/7\-Z77?8Q l[∭x^3LFX[ӛa A/-}rM3!:ya!wUCM@OF,;jOxM1?4g /\\hKTK m! ~ic猝B-ݍy2)]~yapv7hp28ýGY%|9})bjWXS)%Otz1^m%]c }N^k=d/n)'@H@&1H&$h dV}1hܭVOk@}r!r˳xɽgU6)̍Ac%=Vu S˂9}Aa /~+Z雀\!mcz)kFˮ[Ogܪ79P8ׂr+"I10+IHZ? MPv嬤w;!ϥt^"uJ@WimU>RR`\e]0Kˀ?J|*f z)҂љq@y]-LJlSB'ĆŽj9aϸPD0w3ƦK)=i]^TNʥ)7B%QbpuY#)'#MeNI!Z eBCH1݂O8D%[\hVș=)"bB{rTPOS۪썋C5AUé`#9cI2 &ߗl>5JM*x\U ZM.4,;zlS"s1O2)چ'&<]B(yh멂ogXyK'F @!tpkJ JS' n#x…K@gxSn$f(^&d(dz3 4-f( <{_o2G<:WmJy?ȍ(p!7˻ˡx xŊmLpS|N0C+#Ґ`3c&k:l*'.tl<:;|VwNUCP!ĩ |.#G!7GKF6#w񽲁tclWZz1ZJp]$ ʭ/Rss +o}|fzʨ s #+O׆RS}# ҡ1Gy\oT0di9a/uŚϗ-A$< {Uv5hqp.€ I.+e@Y#M|BJړ\Hr/"Or:ͳ`ج,^fn3K_1^*˻6(t/#9`7?t*׭(QmF_EYnùq6=_Sw<V8ߙ9;Avѡ8$x(xBct}*|Ẅ́HbR,E"&U[~þKS:dޚ K#ɍ뒽mKޤgM5ٿ+=è}x: 8TJGdIErf"p"8o[%bNU'к&?3k,_5*W%Z U2y/N5Ks5KE|1 ofőtgDa`~wP"HۏSLچO'L?l`m+h\Ao#<*Csx{^M;@vI~ci+Uo'&Lh`*ߍ-ɜ$Yhߟ ^J5:Bxڨr3'^@ ^sa556W&鞎[:kTD?֖L3' .aaG9^1{x7%\ NnV$g~/oA 6T쵋H qSr"O_A !2UNbn j(ӓ608փX"seJr s;Nf -u=G[̒@5U{2 Dal ߒ$)gp[2ܵ:Jݺ&4G GnUV LfMxWB~݂97?E|M T3 E׹/maٌ zK=aPcB1,BЛ΁g?H~˚ؒji2Xqjنړ,"WFO:D8;Cktzڄ~eM倔{!h5i] Jl^{lـ.~/3ιwڛDU$c1Oɼ8j#` ޓc@˹MN\f1(3Oj7{6(lOL )-T>sp /<׷9z }B? 'վ΀Q)@Ֆdu@[6#pHPgbN^prWLXF[ XEv-^O8=fjj>S :w?(vx Y\\^ d`޶/s%x8?I4Hv8\Prhx-2'f[FʓIl[K)ܶpK|$Bi,n)Z)3׿Ti!FzM4՘yO v& zz /1>)AX'Dh Ųڛ xv+|\ ͅMt3E^ѣQFS}| u|\H& Y_[wECw]\IJ4&v8E KgWEtiHt 9j{! 5O*jb]Ef).~e`nH^X V &sʼ3ALý"|Eid L.R y_$K%N C4sl Ƚr_EDU2·=W61K[K9S T"FO`ǣq6+`UH1}..=!^ǺqMK ocEecI ӗ|LXB P\~9~wKAM780xrb;`LtfOJϮF Nu4N8 `a숸y FVT_ ,~4PIrAoIrzH+LV%K3vu\E8n۰:Yr8-M,g9{Ͱb~t1;hi݆.,COL խ5XIZsq %)ow@PS5~a{L@jo܉@s7g__7^/_l@0bTAA[\q>q51Qb-\_Fn\G̮ 68:XP̍؟18מC*S[qQ>=4TuF&Ӄ#ü5f_V m@nbzȦ$'~qеJ\S[fׅ+uH?Y @H_f :(lN9h ; ;hޞ㓋y?qo?{xah9CZʕ=H)$<0*kK'*k WY)IZ84i N.1!Q_Bf{b5/I(ӕ&aU :cէ5mYa cq}#*m}߆2C\ |?ތi{1sȟǵRqC3L⋻SʆCG5U(>Ɠ\iZ1 UGȼp$ൈ YfY]7zxXu gäI/_Bi.ܫ)A7ޮ~ᯨEm#yZ͓ 3:\Z^=khڃz'#ةsIȥzFNm׾QJb-k`B7vBH=sc9` gt;oK0FAY~(p2wVpנ8rS/|AYGyO=|qU$͌7M*'?iÂ./#21yu.('"i-6[ *,WHi ?iIgљJ!T \fjܭY,Agĩ^WhCuՋatd/A:nXmvM:~f6G1:u_$ ,˞*1yhƣ;<7&.4Вn`X0tί?r;޳m67>$x1Rg3\u̧߅;c3`ҁKHH8^v`xUY|K,Vڱ] 2&%HLD:b爈mmfr{=zw8M~)+HiqnރͺYǐ9])L'\<5XUo5/E̬Kwx6Z86h֓dW{[MwaA5Y5s?~~Otea@S.Biv k%HޭNGUb[sX]akVE^+蠺85`^ۊŵK7BْO#>I)q_;^=򰣉vD/BhFB輶2e –%TVфg޼L!wB҉j.+m諣`zsr U-sr jNp7 ͓u7 J*]HQ:ӯ?}bNCgϪSÕGUͽ[03ldc2scZ2W7oAn *~51i}( BWC-_&OPXL)`6QJt9v"U%L$R~^{8J%ʧ5aqeP/Q 8koGYv Z]IA1dmcTgͰ@O OP1vc`BLPȉ/L hlR1(yɳy4x^!kdG6OL`#]^e8 ނ5m1=!jFA7) ;}" XY9-xhڨopzH/tF38NI _ -ye^:*_.ܒ$?Д\XZyYX1~ =у"4n1ļ/՚Y:=zZ1aY*D(=bVp+t;\ohnE`}A$eB&j4!U/(S& @${M7WΤnړԁEU+?R #KwUor^ye$Prl%Խ)t:0*7s++Im-7kL|(E/ElV_g/0O-N AK[d(#X gELRߐ޶|cy bJ=*VUo!g2[qꖔ+NZ!{@@ǻbQߪloޛP_/oiK.M.4R:D1L9Rh^/=w?qޛ !klvڶ4@ ,[ih>BOxôֶ@R_E5=<^L2BC>ur5pMs<%<}*}oR%/RRv`Z_N#(7p(F;D9_ڊZp;+Lzd!1?J,XsHՃqHFT,;~4ܘ/n0%Y# =ȳ .Sj & p'B5̈́=33jrU/R9j~U"e~{@-_ND--a+:,OjXcx"D+K/;x/ՖKݡf(KZAu> AvfbU6A}GqJj. j\X^ƼG?㢙MqoWoj]G@>)0Bs*JmHbٻF> `A%mqŒ` 6jTSk^" I-!U}3) 09^k8)f3ms79žKz$ܐS|r"4_Tu$vQ',D}Ca Ή<ʷB&Ǿw&t>­"t yvyb"3{_>Ly^9;6]/Gvʕբ|o(*Kz^R1DB, vn`(~`Q'([}Ǥ?a ď܈!~ (^tdV%tSbx{r8T7ۉmߩK=4F x*Z,1ɖ˝/׏E;4\Xs>~yɾƄh ԖDP-OȀݤ-4U6:x 鸏x9^K䩪9 2*:aORxB$:miN'"Ӳ@f2wV!pIc6v4 S=>D/޵׮+ Zr~-?o@5bT|hgj/NHd-&o#P +aSip1۾|m9B v/q5}ܼ&$C4GCCYM&uقÊNs g E&}v䭾*_$r%Q&Ě$ ]!#t9Rgzϐ&8Ձ`n`J*uT9ߘ8-W$mK8h_#)yl"4YTIiwn3ى@)k7ktHE\_֘UQfD0 9uvd$+E<% 1e8 eQx6iݽd%(YHr4a'l"WMF2q*E< Gv;.ɛjTp5ʐ<}vr/ M PY-ЎZ-N`k̖wu@sf6Cq)UߧH;ܵ<;KsD**~BP-x?l'UQ8p4="wyGz^SPrBBR F_jx6>mTzfˆ%ԩrEs U$o9p,!gdcjLMw!-{wTEڰn#-q_JMHlÎRfv~.&Ǭ~j$͠Bo ĉtV3Qk@6KkU.1\ ˘k!TȍCD7܈vm#;c/7i?TΊ>8:rJXpL]LySR\a( tKLl7ϝp[|e fЏ]#^!32Br3{e!(QȘX燌*$ ZqKQ#}z1 \m*9CS>D%QIX? R@^+2 FL'w0Ѓ\A\|e1Ѹ_Fq޳h%`[uq'G k:m+Zj,-H ϭA63Ԫ\ʯ ^-Y~9b@!Z:(ToAͿinrP18-`0( D G<张v9?%e\8..|?ݯAˋ"w4FmyMO+BIe~lAڒ%W?~>vjɴ{b`9Q!#"&n<}DEr0Vp|cBy0ߴ̮{k<">烶EV7Z;,-\<}8[ph2kEmnz4-q Ĕaa-*jmuEI#9߷LwG2/D.Vs}+53qY1&UAD1 n`z yꛨ%lEEЪ=SZaB4͎"ShkL=]Xukiqd Q?(R9FtyӭH]Tg 絟*w{64A \Me`AdD\mylc#UAa|*n(,HG/KGP ]bZ25K/8Ht2 >?3jR%o4lJ},\{MBb9>pth]7,'fZʅvI-+}2 פaj[lk{ '(~}Iv͗g дd&rE7Q7.Y5◑=Ifnol)zB?-0T^N@罶ܐnN[3:\ȓ5zi vr-ޖ OdIFRi[pTɵ5U$ÏqF4Ph|(nڃ^(3YפfeSI'++ɾήS h. j'0Hs>گY߻Pa[#\־"ݽp ¿ d &Y_#C{qD"@}ѿE 4,:׏ƬM%`KC/]7R uVau O&Fc,bU `()]'k (-}? rm? mN>>@0 tP[A"V;zuM9" [PgsN+9k%F\mP|A!"\fWv5$-go2b0 Q~Ipᐰ5\RdqZ|ᖀ0 q`X;C(KPr 7"zcHK_pշt\'[?Ɠ@ō!$d}l-2c,qF8ٝ~M@͝' vC>gAh+LV ̩?sZ3rGNv΅C=Qvc!$" I?o]n{g%*Tݵa"Ihɳ *{nA6߿ 5Gc%?l`dt=L&gdaJˬO? 8* h-gh&fF)FZWm*jXÑ)cq͚Zj9LɪV(ļ ӤpFo@Vjz=d|6g Z4:q7RZ#& . T}ֻ_lP_<*4IC5*mw(r,QThk2"T?Vk3o0il5 *h:*+R`BdT١ٽO h!O\x:۴+CO/ݵN6AoHS+_/I׶aT49tw${MjKB\W//K8R [qOk#>>'o&,6h~JݩnD[/ O_pBV XDx殭"XɛC/сla^V_#|AV.af|LmXOk.n*JƑk jL !1VLMNXኅ 57.Njy6;#ANqm/9T.]i/ϴ8T?"%sO/fӣWBvq81ܣ]6CIr M9 Q,&J1~J^9_UFx :=]Bx5 r쾕 ({X$IֳpɃ:կڝqSQ9sue*^ J3T_`W_;(@UV zե%iYR#;s܏`[{f,'sU1/% gP2tTDhܟ M@m*8æ3 5,|L67sn+yg 3*~~d5QlRzI+~?D8Qa#-^dwG3h> /9زm!C+#<Bnȧì^c; f\`L"DG3+'j \Χi(bYlv,Ƌ@n4IHM=1Z-HNayq^>饪"B`?_arH1ؐ"b] D qp-1j#-a&1uU8v= /uٹh䚹 +eփ|zW˄y@/֭E Z ,7:޵r0f~*:3<}.h/٦@qőP{2|TV$,;j/,l+l3Gt]/sm kC" pt?GFf0$ muJмzҭJj0bƊ\Y q2wg9@ƿxBeCw=T;I+p I  YX5p`v/L@0Wm"zB.;Wxu)TT{G}c~ 8%)ɓ,KY]k̴q86}i ǁSS)%\?wIFnuzcX.S׮#9>I1p$wWe6[_e̼.$23M}L$SӮ"6b >ɦYw7H᥎|QdNS.r`Jw\Eix !۲ZfA).L3DaPc:)Q km+.ʮ阉&gZb.~3=^Di Zʄ"0tro++S}wc cWlvܻϤV/e‰ A=Kn7+@!!RB'Fm:!CB=lZZƒt0:f @c,90-];~<*& H? UI'OSv Aff`2U*jߨ]Fx(F#'F8 A; 0S3ȱ@'7?s|&TN\RfU mȯ+,,UT []a,Dv棺<ƈ3M(UfC߸Jl IkѨX]Rap|Պ-۠3y;rC\:@W͔lpWNM#M#[_K#+F%i{/&كEUAB>T^yv4eyBO~&Mr:EI[Q-3Y,ؾo /pN nh ?늺T?oj9}!j,Q29k^'vsQ^[Ӌ.dJzoUı>Z l:΀eT=~ny.xL\6 (.y??='A욾. â43S]Cxۙ.{{)ow*}eSG=vkd/Ʈ{ӔD}zԿ(šW{[\q*?Ň4a6+B>SLJizpQ< T9)vr-# $MZH%;zaa%yj?+]4(.&<岯 (~Dq>Hduij|%T+QGvLew[mQ:uy][]@aŰ n i(% .3( -1ZGm.+XP3mKg?zR-z"V|_f\v*Bf69 ;{k覊1v+p',m4ߺ`M f)o0^0A' zU-岙{IӮb(ԅ\mR9Tz({\eޯ>W3XsV~g*[EʈzP}ũNH>*x4̚\2tuRX:\-b5 %׼"Оze}q6g3nEDqIM {yPB=lF2Ƒ_~GICVn8Y[;"zDdoaAq˭$g~`=fZ"HH;4k4cL t8LfYc@G/t;w&ib).gUXJ1!~2Q`^y EZd=뭵cQmj(,W 3w}QpTmLY۟2e-05t,bm+{S(RA9t^1&Ng.`Gcη7Mӽ,j"g46}?ɸx~_CPtNK݌H뱄K]mXn7{2NniУHUc%ry0(?=XR5nN9 _$LxqS횒A-I84K6N[r^X!9Q|赚ʃR3@ ȇT2Va'(+?Lu.r7/(CPԏ=o_[]dOS3>o mA KR#9TPf7]-^TMߙ_*v;u.Z03E MƧ4}ڧ)~>v<ؗF3]AZ*m\6L1]]⮾tT7a"x4劌73b.d7ΏU/͵tؘl 8W'OVDgdнV9@B^C!yt):Vc-®&~d˺IzP\v14(D8`=u2Yi0ѫ2jX#=̄q Aq%yE9@\6餋犅̠Tȫ{_dЌPm bft2-Ma!SKH76 Ĭ-4,TK& 2Z_΋ CDL??M!7;o\o0Ldd Ny f )M8_2[Ȼ짐 34L1o! Pg{GD4L2>Ol1Oр?dTiGk2%SLX7P-hchB=F:bƓCeh8|cPwQD7 WC^޻x@`TQt}ЄKY!;jrKod0R.`4|JK5Oeikm{,;BU, Yl j|i h:xln8O3_Q Uʋv "^>O :7]=]S\5繍נp`,;vy[TZbU'Ӑ,+#1&6;- VTv^4HaQB1jzF˩rD { bM+TO|?AݗpZLJE* G&6t4UnbfjtYOuQ6ٹp';\2ikm(C?7d`T&  Nf9e{>X4xpxt-VHH`Il8  QJf'vc9YdpUE@YGa/,m:W% (5O|rkxb6E1OdЬa(Lǣ4Rʛ<͞s1c;Z$3i[Aޢ 7*΁Mς?k'0:_m"0@ڧM]N(̣Jџ[\7T|:C|n+uFgC"6swW0.ϹrR  q wBd;b­*~+D7*Z/C,'^' +[xaQn;|*S(3 dWVZB+ T2M=g"uت1NXVkƩN/ź\1HYҦB0mAcTzM D|n KH!E_<_"!RTe3xbtݸ V=x.)A6Ow(Û?/<&$ d/Ȯ[Y;oqy`K 1&=`NS {MC~1KF*^!\P^AkA ၴ,7{vRN*WݾVVUœ+ }npj1ts>3|v_6Ft-9V\{R#z7Rs5?@sTUI;7&WPs*E$7syvs0o}<gHmI3G%ʼB t5|;#)*!{ﮛSnSXz < K\~_h*2xdd`2.ل*WGw :" :ϏJBb`?{šuvZqS&\`ӻkfXbK,Xrׁ-RY~Z}-hGd*S4^;7ap|Cۓf.d;dkjkE}`a:ၮ I3PCmeU*Ovj_ ~;u0)cnKr9wxWOx(<~}a րRE贆.{T b1s%OR#J7~0{5m?">O# U|0R#8krw+z qfPR!i6-B!n|)׻zyG)km3 {뼞qra^8h⹿@nKWopUEU'Pj2:vB {U{XfYqs&Uĩf{v(/cMݒt w*MQۻbܶYC4ϔ6@L윰)DئPÔUYcͅmg~ȧxsygBȔ. Q̵<n0j{Y0a?:ƕ'J9 .KTxuOq[tؐYգ'G2aHKl"${yzF_۸]~DdsWOJn+g EA7{yU#, >+'&Յp¹}oUlMhwU}C*svR8>MY6ζpo8g6qx 6feһLmz'\_z1$XB,<`N?⸣1:VO:M;ʼnǼ~=ɗ[<6əoF%Sc>€V砄g/0"lwx> {BwCkԣ>S$Vh0)[r 6)Io;'wz6%` P}V`mֹZuMj򚺺/U%ôFWF=>?e}P3In9ZG s.]1)M\я%>+TEw/gF%cDTL Dj>_SqW!%-thsN`|FĿr{ Tg|U!`5=mQΚko;^D3V'^70<W^GfFVGڑp5Gs$R:1*t%ʐVu.qC|%+E|qLU :d,O[Kof̣=CP,!#FXqxz\<3B/͉3vqRٶ-D@w0TR miBRW0x6/#YX! %yrR/-ִh`T-DB",G6V~{­0ݺŵ^%(,}W;~W*GjY [4Q&MSHB d)m4_>Vgs` ):q|x詮D[L~ ê}A==|kelХߎ/fؼ;hm'D?R.hP/ZJ-+ C1.jad/S͡V)pQ\V&@@c2$ᚠVc\7^غMjd]ڱV(,Ukug# X1f?w}F3N)7J2Q0$ VV7͝C1V'P@KzEE˅8rUBʁ %w _QHw/Y!<_ܡڑ//.)ZxX]}ئ7c 9?'hD/] lV[R\EQ3 ǁ>υ<¾ݤ.a%,nf K1䮏Bu=u*:>$w8.,gؓ2.D^a?ˎx^8&GÝ[~871hHv@"\6A=r|UIp/^k)y8S- Ȝo{$C>]l }i3NYJށ|01b:Ɲ=?{捴8_W>$.leGqlE-]_(+#ĐFC mpa[Y~I2F;8)tKތ9c 4:_ ZfY9:?g\" ^8<7YJf*l|ZyGaS/dZU_4^G3? GҦI-֐:E~<,]ZUnM}I*e2E0fg[MuosS40b (Ѝ,iÈ0-C&ԝ(@ q` FU\jtNMĦrcQ]2 z0S:/߆0UXiB<7(Z=vĎYmP R( V=` GQDv.Kfq=A0?ׅVVO1Τ5E9u5.2tu\3LpM1c+˩:'o4l=.@d5`]ZZc7dmԷ7nbJi,+{ٵLq+~ϫkZYߴ6KN-ʞW~ɆC~ j2Ɉi)E! wԍ CiVȺ?sr_uw$n3L;@VE `r~jIn|w: ` iK{%Jø0E}1:5^{bTUv:C}VRYJlÿ́sJQ OEjz{Zx"lj58PE93vZhi:l=B2ceO2P0%M^nRc!&np]h\Evg uw/F##C[eE$dPVRJ4UD &KTt3˲IRj!u踯 = d?i@bDB'8?*UͰNPvYX8jMb.P܆&wJL), LKϙ݅Py5yQEr׆ijر) CT)nױzY۵754f?lDB7z4)龻BpF<쵻[r Fr j# C75&U |=z4 )NKCM/c<~Q8eZS`[8 BWj`hfK^ďz¡a DLou JPA-UJ`+aEȵKln@3ָ,kH` [Ԡf"AoeytExxFz_G{xQr?/b1lloJwf ihkYiCOG̾˭pn#6Q! Z/~j,ĶB`WwzM>k̰@EdpV崙Xk*Zw6DH0Cw A^ zd$/_9SL]9!ifP(/Ɖ\(ƺbf@qO6TzVXX:ÊPNPm }(ʢQ,aIX^P9 ٢63n$Pwz>#B$nd3*]|rB64ъ(A=i>`DzvWc<,A̩cɰײwOigKp70P}6% ,k_c`ڽwֈxc4mmiH(VPL ^8gmy]J5tr qi$}2ućzZ csϭZ^XԦ;Tat|Ddx/5cA#zw5 #ɮstytsvmLf5}|xűfǹ.\$ 7א: )"uugxpfb(:kN/IXhL5Gf1-z9Y Vs mpCUOlzg{Q9SN8;u|Y/*@όgJ!3v-#c Eʖi:e%X9dm?%#(18xtWm&)ڿSq{Ue{ZF冰Lz`߉mw½"[T>{! /MZ[.$roS5I\dH>'î/c{NUt?%8&!ݼޓrMcܼY(h@:|ߐ's韉ZT-xCޟ)eqozBi.cynu:c1Wn_  ; hûmD,T[:S$;VK2J01Aewt6|MASHHn[eLh~;6LpDO60%'@ <`G/eIg^%NdmF=.Hw,yQ8+q/;4P)ABt„]ڪhhADh][`b-Vϳ^ݏLdԹHP )P k^r{_FQ"nyStĞ_` FhnWAD31S XGQwn#]R5hqTmB(ڑv|Q@9͋D9\:yV[-,K .2ӁaȱUPOU$8|aæ񮔉*/P:!nI0CxY3J!^m(7Q׀ N&= #LX"%qUi MctiR{'NuQ&ŽyV)§xge/nnwMI``r+"l 7nKiJS#Q:Ej,.}ѧ*5HL 2{jMgsirHvaq[y!nnkslLtV6494ZZىFKR+rĥf.e:R|>K^h^>ѫ=9pv#5ԟq=Kg}%HWbb)'*!r W1+Ja]Sa"ȼ!C ~ 7+a p;xݴ#/#]^Ax݇We*J!OG;B @scħs6><| uig%/d܊{1kݡ ( a#K^ҜF%jx(lG+CH#ɑ%7.νw&~w+ )w"Ww:'5cc c'_G&5$E # $q;5=ψ?g;r{eLɹv_r vD,g Kxyq[+T`~EF?8=jq.ofh@wKx 7UI-12-} !CiSъW3Q"_"Z:D#~zܔ:FfO(ՏHI>ǽ0ĭmd42T)` Uv,hSZF``]8MQҟ V,reopl`}ėYs,5L*c6! huW\ ?'N'?LVXRW tQ4n8enϡaf8AcP AY5<0ON6c >]Y8 4Ԡ8B Um,0fP1 aYi;:A_2 ٮFӕXmZ6iR؅p?AO_2ŜLflڀëbI>AE,S̏0)юs'ZDaz肹ygͽ!dr*Z<ݥ !Ջ`qWnZ B5\|l5$9)2\ 6d9J?$i^(:UnPđ;l-L92  =&=aOeDa\6R} N"but4VPI\w'"DV6ԽOaWY*sb"jVP}$dQ3$Qa-EÆf#J9<}T4|e ?gxkN. rqʩKa2K?JЯv*1hS.:^wAܑ"[T¦Xː#dUyȏn9^sA#lk,Q\iRb7^/h36ƴX}6Cci{(0"^ɄfɊ`f"4/!F԰D1#fO;-^yF5k)ūfW;s a%+P#@$yݤ=Qs:jU `B8vݭ U;(U0%1ɀA2D74Rx ZA"#'HA kByeYV 41-TIG -s<q'狼ygWjA9+xZ fW2kHJ砙{\Bb\qHOδS%aݗ[!fD-"93=s(Zy % "Nn$DI}FOi'opGf;~MUDte5&(p_+aY]%v$Z0yވ%>BR2TpeS0j'g2 o\4-sX^MR[D̬yÓs\8gFҔo_u=S}c FfI6wZiXLMz)>Y9K&{NO"sݹۮ уJ0+`p/P<"@u֝7Ǜb[ dۦ-F1חMh/85HWbPc#c&MuM)6 LũC\iH)Hq+֧YcUT1M5>; vh/5i1 b{KE<\c{>zWcQ<}  dp&9Pig=ܭ-EN=ìJS:|!X:pǨ^suڏ^bu}Ѹ1̫6Bv-!2I:Fz?){@)ƋDZ[C7Ues`̣b[z `s6nfr/y9R,&%3=phdyA%uufOG<"[\?5/U ?$ =]?zĉQHh:#+Un!+VcMO| L)[*&i){C CCy$oYqGQ0L2\j$#"m1ј9A bw"`pe!h=par;95O3E<ʟOrQSo  sH}f6Og'JDL>%}DkG}fM?SfD. /"K=bP,%.V;+.8Zoz!']=KDԣR(' }\|^~Z9ut*p\'=<,*{x{ I(#!QfZ -=qxs͡ѡG,? gkĆŷKRGAXok.5|QlV.1ݿAd lΩ#;Ja E&:@شu G0䧖ek]챲;f&t#6B TIAiu)`Ŗ\]*hVYOB\W8<· EĄ8&:^b0u8ָJƀO80MtyuMg}& 8#Ǿ+X+ XIѽHBȀkx x!YJu Ѝލ˚!sFmp>L88%nW Dғ,@XULQbͪ4->)OY1gm?4Ԏd]\[A{ +bd0(m_~EgibK%9Ag@i[RS1hTJYHnx4O]ߚ,mpI_Dc=M˟8Q/&#N5H߿QsT6UWYV<;Sb]UEOL,g(ȋ8 ~)(Hmնp&)e5 jH޹dV%$sciDm@R2Vl˾>ܠ˙"GaƞeZBmIiPc7aΥ7b?Vi ARb$cQr6њi䥑q Θ;0u%x&`[01> p r[YyK?Xj178ߑ泦BߖzLwAL5jf5"mC:!)> 6!FJ'q@M¦Ϙo$Y$) v4#%eq"u08[H\OgeɐRe_}Oxf5M~Llu./)]Ek\h)Vo uOLOɔBTVvJ$'HOÕ:3Qm "m=7+.Q=S08ȓ{w˒幨q}.؞,o;F̾4eN&TՖ!ifv; _pN6@"dre 7->_+hnZz22WJB0_=l5)6j&3]+ m soEHb-R9}2lLt~ssR~RYy"h^io^QXLkȂv|nuNv|s%t"ijU=`3:< Jhn<1Z=8Adt!gbA#_Jpݰ8Eb[ADW ؀Y7MϪY:.1dRnm|YF ILK|׎V_JenJحIԏ/YPg &+&G܏ ><W0>śl?2Dkl1: }bbS\5BH5kH[VC}7`A@o%ї,0 ?P? ŘFPd؎K$em - mdX̬E5KqHmmq E?7ϋ}{} J{{NR?DWXDcSGZhV Z:18o/%#8{R1cR#n*:! ]q=ܣVRX kYpvkuwZF.-;cHx?v;ߥNAf^RjKC2Q7@d3e 3)?Dm"~+dqE8J8~*X/7KF ZqN7kUz8js@I_.gBQٟv&keo s BB9yGV\ŵ!$ִpyY_^CDh%oQ_'Wtr?Z*ttm;+՗rB"H/TB׏?ZGq0z&r5Ǧƽu'v,u i CXB>$unrXMu2J R:QH]ɖu+egNaF! `) (8erǫ)1 wY+ֶ(M}j+S9K6Wp&K-F>=eGfYZ=I9QllUC/u{h{f}O9/YAsb>LK63M-)7AQ5`>֙N]}(:"rW0O J\:n9o kud OhbpI8B_jo"~P@'t[D*܉}U" l5Ԍ68¿4j :p{{ Sƌ3@+ Iո~]L,~ v\ GU[%o>Ow Q/_orDDO_/ GFGS@n:endstream endobj 25 0 obj<>endobj 26 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 278 278 355 556 556 889 667 191 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 333 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 600 333 333 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 333 556 556 556 556 260 556 333 737 370 556 584 584 737 333 606 584 351 351 333 556 537 278 333 351 365 556 869 869 869 611 667 667 667 667 667 667 1000 722 667 667 667 667 278 278 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 666 666 611 556 556 556 556 556 556 889 500 556 556 556 556 278 278 278 278 556 556 556 556 556 556 556 584 611 556 556 556 556 500 555 500]endobj 27 0 obj<>stream xc|e]/[b۶ݱb۶mttlv:V8y}|:wFHQN(ngLD Z- M_46822G34&...823R: Sy'뤓-k :> ́S k @DAQSJ^@)!  .FY c `j"ٚXBNC=h`tprZ,f_9pX[+_J$lx_휜-_VEOgsCl;Y|v_&v.K?jΆNg`X8[z|Rfh/7\,lZ#K?89[{ݿ g')=Mc/fp 􉔭?&.s:+A ՗&v)WOwU#){{d)yw.6_ __?r6&B@)gï5F&,-܁&SC믱]hma ax*V_` hkoTg?_VYˡP.g{Yaa;w kY\\>;R9+gh _!kojlLzegC[//Ί PJ/[._/,J s@w1ܟe> L~mm adǥSlFǭXg[?7C\844[ڱBt DC҃ĝoު`w4FS+O?>7<4-.A4 m"Qm-y6(lβ|$6nwE^a.%9mWeX|Uj~bhvPBL/gu%>Meà exMy^f 0!>ZW*`سq3%a xJ?H]0(3.Q$6͋ZKc:c9'ITՉ~ DoyhaW1W u\JG]{P,H~13:gz\OJh6R|W0i,kyE,(7np0="Nxsz?=GޞZܳ~u=2j~$q$XiQKn-_W٭' OxE+-(+¡T8 [=$vvwXK4/x1ڋCo-gp`}_F0h{|K(&E ~d)RHN##i;#ȫ)^0-BlۧgIA"ag{םTـ0m+[FAm)y"Yj9`?:^w;C+MA_WBsRxn oI0V ͹PFy ]FS*^%Z1L:1L~DĞ|%9IJq Or)ioOv|&j-f.@!nhf虿̣ۀeYB8Jxwx|Tb«ӕ:v?]3w_cܹl&dA\RXiF(VH0`?T3q)ڏ;gY|Iyv/:ǹw,6rWx>%BNjOǠ7Oa7U̲la e/\GLuw /$g[`C;YAϪ2v4ex bMSKDoT+8.`9'l@%ZH-ܯ2L7j7lZr(kʦx{b^` 0,:MPi/T9K%Yg;E8(SiQ2Z@Vfv5FQǪR'R[Ƿaeq,_fRC}hYgKѷs{⥛,`lqR)aB^VƝ=ZQO3hI#kH`kD3;?Syvy L'8 ENhK"z'Ēf{O!Dw01 Uk̺1ۛnJT',w s CH;4fptX6aIH;.7% Ӈ4߀W{k/ONn\?r'M>N01=~DŧUm $t]ūe'.hfqxCuylt$T";$h|sZC"wSS"R<pߴ(^گq72!d{n936tqK:M&7la8hkǁX*1r-{j(Sa:8#\;By\$EyXEsT[úHQD<XLq !:&D/F*@)|!˾Πltz Otq\po p6o'B}_KPc"8(Z)'&?O eO֛s~JPKgmIp/f2G]fTU2mUrۅ$տ P>7lٱkTVM';S5 2c@/#q0.O=1X6Dfۘz\aS_E _|>a{-" * eUgB:H4y8r.vgҼq7o.k 8/C)NGS1|rX#|̦]&. $gnߩsxc qyeL*#j{Wp|DFw M1}\.å%U]?4sIЖ4 m>TգY7è$3/ֹ:;_|U՜$}-6!NnodU4JE+,5U\Jtjz+囯'O.^< _G0RAg(q[EG\ˬ"1[^jc)TF̭,NN}X(7vt,dE`a,}n_iiICfuln1ұ(h(Ρ5șv, aMr[QmePѳL)M⊿$` UuaA.jb9-ѭ4LS0 ܢfBnk|c&RAr9om*SL4(%+aory,>[[ln)Ӥ/`kRh7M@jnMUzskn]75 z/` Sh"A@4B7tAV4Y-ԡTp*-T㖪Ls#ʡ }z]7zʷ"N ҕXH%81M[VÛ~W0AlpGJ5,GNo`{XCLa,TRƴPݱd=|-`xo o ]j[ӵ(%+ IT/,)'[F{){.qѾjD؄ԌcMl{<BU i1֍u) 4h sA/8tL 9:۸yE1Y;K;POvF % 1I9 ?;^ Hx2 F]xRZd+'&c8Kފ)"cT@JADm/IirY P:*əF9-9z )8uL>gP?gj^3dke[6vjIݰҴV& CMNwl߽aDkT,&>uawf}ҔQdU%*HH C ؞N-zb/pe蹱S] ʣ%!d{U8j&jD笤#t'G| \?6-pTL8˟usL%%I& ,]O^ͱ%:ռu7An˫ݩusLBPhXUY9vqtڪ33JI-A!u'0!@5Ja UaR *N#-rCZ;l;o ,Wjzٗ)KiL\ cz";5ฺU;֎# BZd(9dAtK'h8cTG^F?XC RsO |b{dXۈJsM/7TA6 O]g픕 #ѵ32v(Ec)OEYŸ"Gm}3eϑt)i/Sq y<F+ܔvw7)L%miƇɻRB3LG (O:HX[mBޝ(vu 1_R]ZcˡM])AA%T {6.ONԽxO'r@W p:?IFRg9Gֱ vDr >nPcHv#|JaPk EaAA6oyV=lnUN3'-.mL 얽Vj":M&g.u*F6wIK[)h1" CVHG &pԟȺDB$\3A}ZbYg|Fm%ۀ͋8YU|F#}$Q9t0 Yhqu.-m/$1DwN_ŲԦG+YH;JL0)ВNX?H/OHQU|w,|Ñ=Sf`x}͏&n oܮ|TI|*isv+7UB-eK܉7 )G &^T- a-2aDhl(C@iZƜnƇ:NY/R뗑y6Ԣ*û?4&la= s(,﬍R3Ƒ|2H=˴l3+{ $/.h- X;.*uchĈTQg6ѬGo`ȇFO@V9Йw8(zy1eZN:|ZObSpJrȴ6IVQ 룤E|j!A#N4HQ5ןbA2J~KblqPMUo8_uTOc !ugnPDRЎزvZm׺X_aѱOd*MR=Sh*ܑd눳D-5bH_aDbo3jFYTa/L= ^Z݁-t'Xsr R뮅D~)(u8ů!wzT Ez**R ,*&v7kz D$"T9t c ٤eNۚiȞHg ZiᢼT6؈_LYߛڡ]%H_ rN]&qϛF=23k+›JZ+V-Iwh(ҁرya)2ZEEfV[ЇPkk\5S4j.P'Sn9Ck 3}%BE]gs|X>JQӀr=76ӌ(.HTÌy-{+m)^9utӪ= 4N |/4(5/lZ2l(L^ZغDFtcN>o`Zh[`kg-j9QZY֏a1n(Ǫ]&=#ykϯ'E#|΁}~)nwj'#Kԥ|~fYIq *y,H]k4An$i4os̡γպ P ѷ2 Ⱦ/^30z?4?i-X}/t R~AC'㣫$*ō v_ohwDgPQd.!X0f7w=9H3 ĹKNU}=7)U m#)=[=jq_$c]T QgqfN@-& Tt@EvS . %UCg uww۞x h.SoC3=9N3gCQ{'qt`H]KX'M pmb},Ě6ӨPڊ99IL?(bRL%')m(4[$cmWbEơ2@ޫ`+=πI>$F꼨Y̻3  O^t.BE2o=n.F6*CsV1#(HDLIԁ{{&JE@`*fkTjoUqsv&Y&tb{u*bܙL^slC-u^zЩqW1ib+g= JRr%/'#Z$gEKjAaGR2 ٚj܆DR5=Ihؔ9ߡh1ǃ8BEdP3={}g)$I/ M$Md!p#G*(gj(X,?F8&ql}E$rfņup2:.䮭W-ɿLJgVuEr*65_AqƩc!*?JCh5Mm @'}$],$v weSzWlbrsZg*jzYڽ ԄoQDqzYlJEýI#wNdN ˯[P"@1,?6b8FgOȣ!DVO4Ρ*t$ &^ :mĎ*1n?ZBGnM0IXNѯ—J*! {@F? &• _xV{^":j$1-,B3Aj_O Nńmyhag'Qz5\Bo8֤&,[6OVN1uAwl?X:9t#{> `O-zsnu9Af@یLDD^I\ Y=3̪ wr5e1Aw\\/a#1Nf܂{.f5kTہ n s)RGX*ioG YW9l=Eݧ؎02¼[Xǯf'"8vgpEYkҶf$ ʃt@vKI8);7#oh0 GM=QScp2r"g\*l-Lw'TĐmYؤowmE0qV#/)cC\CHmmf-?G'֓L@x)i~L('yXc 9!zo)o K141VXp^"? ˯do(iW!_FF+ Wtts~3 n6n -%/hbDD]J-쇅kiWR^Ҍ&.[r˜&:\/Fّ-p}{LցTDS[;xm ^Ӈnh zABh (CVvrc& n#O}&wXfg]xGNYy*V4p$D|POq)hg2!#b7Ȉ{I_2_b$ڲ3 hHP9X@ۢ a7Co+Q3=bff1%E=D?JܦK[UՔLw&"h +P1Kښuc %mV:@]8'4_@)yo,Slx1t\A% y$Fښ 6|~)mp䓒 Z- SK\}kɦ{{gsIq߼(%z=T|qҳ쉌[.P|?m:HIsh>w7,W ٩e4F"^0!!m-X܍.^y/thJwNvkR>b]6*(XwvOb6x$ sۊg[`!t3lH`1Ѝ@ʗ<"vci ky6m '4mɾ6/1{ڶ*"̊e&B/ eu;D=yQrkƁ=!rѸh ޒf3N@H8DfSQlR"r, yPeC]ڭ\ݔ]4\hh3;M?cIZik8Q̏5.!%)R# 6$M8>)`yn1xuŇ`B|G]Q aCvu(XD原dw"jǡ_h34(LGзb]j_C֩\X#\,I<'zeFppJ"+b;xG& MPՒ~M$:.O_߂h(]Qg`AU076fWQJnYj~|Aiy}n*a2d>R硖|=v)Y\ٽҋY&HWA7 r K7T1Y0yP2 c.;^휏ޗ,Ӕ(&ĕҙ EdgvLxiB9j]APTRO.9)pٴQZ+  =w}c w0gĸ/xbkԛL`W+bU. ksk{B^2is *(Hp#G`k,S]L̘ml,Af"-C|42EbPuBM\ґ}T8q}1Bi"&_PG/-v5+ɚZ6:^e6E϶klt32Q3qS^ 1ZA!k"ژu$Ys}.OaAXD)R $@ۿX1WmPsw㘤Wa Vu Ϊ2Nz5Yɗ{Mp.ɴoѾOXٶ@\/[z_-NhpoIs[LQY"Fӊs[ _CܒHZ2gR af3vDOnEv -iEQr3sZu2A,mr43e#Uz39h}# u2 Lpڄs@`^apl)!I* ?g1HL I{@C5@c%k"{FHQJĦ&. !L{X\a>1eE[z:\kCjT.l6SVI M m05YRqp8p#8ߦs}=q.M6cATa+E*bu2ˋcҁ.>|GdCÑK4:" E1:d:'چ!i>Xp zղv+2lzSMFoɋF@AZ"eذrI$|K4-Ћ%&T ¥U鄑W=$0m~ \m$;)akܠ<\' _9f jŎDQ>9>`5JD# |Q=xb$Aqmf qCG}F&[IcڜCAGNW Io7KP=գn|,v}{?YyjIQ\(2%'Z,,\6:݇xOeۦ!aVYƔ'˗øf!uJzİfBtn2tvx^n#kx.4(1#0&B( bBvFT(]"sDҺA$QNC}g]eCL܏tk>lGŎ} j,7_\|{q4LW_A!IKMIXk@-,u^ diBԊ3h0 #*\o7CL4yT';YhEYvJנ}.H])p#HG#A1PkIG9E9m6oʮy͊\?n8=_O̎7~œ Ju!N!֨ e7Jxʹ9V)eڬVIXMqjAna3,FS-CyQ c*YGR@7LE}wARNHb+mS^q{Ej6{,/ؾbźnxm]ZQn%?f=vtİB*zF4luN''}v4hf9Fۯ:ouFN84Ζ `91TM듼 }qvlTm1Qs֮$Q`6.SfBUꎟenC%6v{Ϫu}[(Dՠo4#5bnO-Z'V[2{Nڟ>Lw6Ը)_|")KSZ.|ɿ-!00TB*n8~[ $;,8 "'kN.Nsyd[b]9Ew0o,i^3 #P&:ˆ7CLcQ. %t٭Km'u"IHztq#|.[n5HûHaABp&>Bei/* BCd|>ӘLg'!A/*{ *7.ܚ6絀 X zatc{*A:ο RlꋫZc3]WQ$f˹#fL 5|Oݹbb6 d߉BjM M1o|+TӞ{M JĂN#xIcy|tz'+[~7;.X"(ASU`% hNLXɨf \*!gM QԀT{:!gKЙ'/osNS e>&7c)]^_!t~thjZnBsT?}K}qgŊSx7׃6( HR0E9:tEGST OE Y>.:T<ĒȧnqF>.M<3t6X#̞U?< cN$vd-j@%(Gw׋B" 7[g{|sM_vF` \7H.-_7J+rwn#<#';WMMAMgc=;ڣ8wUlnFhɥUÉ467~|Zd>\6 N$UGuSg+ރ#*sm+Zk}8ⱽMڕ =KiBF/RM˩ߙ;x>7D=,qt1(ѧݝush}57X LDUv`,x:UJIyf-&J}#NP?wU{ra@ZJ.!gJ184I:Y>tb(` TjuA95zyW> tC W$٘RgblY{-CO뤟UƑ7Nz%:Zަ@߂X2{w l3F7蠋wi!oxt^3kVцK1Jm6F)[ ~OagԼ鶚YVr1} ,'>՟`mBajǁeS!ΫBw+3*$7kd*5^aXs"vBDs,[M󶳘4e~@_B:q}Tp|GhМ$mH7oG꜎(OaGX-=}M^\ +hbu{N垃V1(љqzWB&xrneb4QNU6 {ϻ&BspJj\ 7Š^͚)tzVsC?^ q9cV ɞxQ@rV׌ʴ}x##?9 ǁ@9^hJX9@6$Pf)>]M! iYU 8>M 6?+e?%+`:fKF\_pyK{9/h=iyBT\;6^F`BC"ϒWoOGxj,{CXf8ğVAB2B}[B=˗vDF>\-4ϯ n[|Q.-VM3# O9 g- Ѽm^u_%~ 8eR3;ġ2a_<,ߟȿK/e 3{ỡk3jaJoSJ y4/tHӿK?W ]=7\%ꐬ8>D[}pgCc"_4b+TA662<v]t)ޡP rW<eUX,ߋ.t{8CI,wKyO7h1Kk@oAm%;Cٰ/쎠 )^_!O`]wP(U@ ڳN]%Ãk.A)cٍ,@՜޿V`(bﲎVjTK|41kHFcs?m>ǼNN)r08HPcNWQ(YLG` bqM$AͿ7,@ϩ-~|1dv;ٝp3?'OCQS`Sbq=OPlCF9\nNi5W%Q#Պ +M]<&([g݈LPzZ7ouzxI pOV`ճVb 0i &=d&Ƀ7 G9 =M oګ5dvݒL-c-%S&dk\D\ӆWa|*p-Bíϛ¯K 4T{UM`e.)2n1ydV_n/&7d34|:瑮5͉$Y65⍪ZzĄkXxN쉥IMLTd`"d%s!**_g%.巁1mWP\@ŘRR8!2`٦O/5řV{ Lgl>ka1gbej^ExW|ьqq9aɶdf$ wkzss,>ole2](@n:!BG(JTZӏb3R48dB֛)k2XCqLf}1G0hI MǺl-q#W:i30r')h|\D׭LA8gSA)sےIG9_6B'tz4=,| ~."HY| sH-dH]E"DkJ?|QA0&ýToVpJgVh! X\W{':kC K9;m4aQHWo?ⲯs al:)vUILx74mtVGf1PeIAeW[ g +,KϤ+ JߙV#֗% f?!Ph8<ٴl<-Wlݑ<6ap= daVQ_[l?Amv~KƢXs[e#p a11N]RJTedgzkPwևwmA@㌚iY}/qbkd6ݹOn4,Hs$QDc _g]_hiP_К&%@BehE|`_D)gdoY(Ѣw&{c7#K+ kWAuӐ02g?C !.=yJ[Wb48ߓQHizS,ImϪ\i92x"Jo> Pz Cd, ,f8>õ|1m8)zp5{ :K0Tց=D3%i5c) zKKT'V*y37a&'F&W] #}VK2N] e#B?#2]BEd-ƈyHŷdX:֡}i#a-4w-W'kmY"j8ʭTnLꖉ+%#vnu 'K`1;O2Ϥ.R4 |jГ s<s%x^ՖꑀL 9c^؝ACn>x㬣ӹsub$5l鱤Ojuu S*kfE ^DY`+.26@}n:1Hf2d6ANn7\nc,(ZPaCod Pʯ|9L>U0ٶ"Η]{ǒ Gt?JL^oye^C{}Ae]n.SDGy ȭ1Tk Sta[|,g lɻbb9)H}/",߅O&?O"eR3.KS`{ T ̭17*nl',__W.xMCpCḆEjݳ@;>PWNUL<'&>lƣHOJXY@m'LUdxsdu Ft FQI;OoPSHaB{T0To ˵,]}xd{.f]Ď+Z 3c-DM;TdgF߱a|?yaW?Vz1x_*kEL"^H).jJnLos?L%-rɣ'?jWVI/tߚ؅[ Lc-H+#)#fcljۜ &aR=ԠWwH9u|S҇ڵ$نHzbPLg)޲=?{ok0m9vxqߤ/x>(u$u.Vnnecm82:TY]*mXnۋ ~&*i@AN^8+EM hhтg 1%!VD+u&Sײ%NN2շW͊2B>ʢyҩ<{h"dNJ9}՛ɩmK*[m{ő!Ki80Oxd;;UM/Ck<7&gqz[o220R=hv@|e+&xOkU:_h&[>`N_q׉#UԸ%t o$3y,>\q5 ,U:ڌs_~!u5!KPZW k3G`E ƥ8J@`7 Ԡ1 3@)/@xÀ 2pF6aunClT_4пMlT4o+4n@.0黁iݳ!h|bS瑑 B_z]ES ,ފsTM ėFpu&J`hf+ ٿ0`Tb5CuƌY"Gc؊grMݰ[=]χ'C,Et ~Ъ99/'D6wjB3]fHN\Ú&- ܠm^+%T)hI8?wɩiDEBC*h󸏵𛞢>:%&_Z#TyL@!U錷 @Mޠe҄)°&٘ysS(NоQ_>&NVd04󔇺*"-OPbsM!ȰDޮ<=7P!w{m&G^.u͙j, nQ]1&g mpn_1h%jK_Zv+ (E5+ŔlyKʐgܮZ%v9afoΜ+h7|gnrH4:vX)5s͗O$5UJZ]Pmws->()8 fV\Xls'%8z-<2ѧMԖ⫿nlbE:1~qR\lii-.{tƳMk[TA.+цzI5ޞ-_=Hq/ @ =zkf0XuLT"AەXO| fg"O^U?\jvȖ׹ I8)[%=]tǎ)H})I$㬸'?b'XE M'+9LauGX~4lMK;YZGjpѹ2f8Pl7/ufK `]̬vU#OZY=tIV'HK.hfzk.k=D ɼǖln |n +D՚:&]㕰dCg h13vZ{+ٷB@D6.NSPunCQHb58L5DT.YjNK,N$C!,i}c ,)PyC)^+Qm ۜ{eQm#$?9wTo7duT=e meBiLvm9Ni+ڱW |X]>`Oj0Z& /?L>;i3[lまYjVE~_DSj_ϗ~I!m~ψ)Zqxf $RK2M9Hmus`QSw,ɲ<4Lxd,/GfYI17C)a &lk /ފpLB֎?) j73poCɻ) ag䘾m.UYܮ]U~#sSF~t22ET!(F wTZ -,T w~vKtvJ=9S2u;y=lWy*L}CO)Ӛ" h6k@p@!+_?ih+3J$$9aLJ:zt0=7?UlMmP(J9"uT'Cj PLG:aBD} *5 :t.m3vَ]*Em FP]%|):?ħiC Ow-!#f5CYk3Ջ`yOv>WBQ*{|RC Z'I隥+ك6b2i+}*? hF^FCRcݒd3ܬu\77qP%ːņaK8ғXm m ~ Z_5vl\ 65B`xb3{u3 E_Hr/nRjнG! žLCQi3 @rXQ_`F7Rzҋ `:ō,'{b3GUa "Pk:zv%v(*X"iXK%C;lƷ(:܂,qӈGWk0;WsžOC*dzڔ!֔рg);ʼ6Ϛw=ci 4#"9+41P",o^ɱ.w:HlQIdGn<[7ͪkyܒ0?<Y&5[.ẹ*~]C~p&Nrs5eo{mN\<ll⼣w?rwSdm!! K;Y,B<e okK3;_+ioχ1OrTWuLÍ9a@X%H31+V @PDW;wP0&53%Ot-275EL4C~;s.,5b7@f  $Y)k֚RpGji|Z(n}Ă.Tb|Qzeo(G|fs6=S布XJG08%:iwL:čR]}~AiH^SG>UT;^GQ #kq!!b'‘hB3䃏ui%[2Q=waab?7M^ W,Bsxi}+ 7#ȑK">MIRY#tu&'fXAۓj-L+{b+;:9:~֕6G袺v~ӼTB/;ɮVIքycto#n _!LED%UC0MO/00٫VǸar.{co W3(8&]ثstq,܈c5 }g(`|bLHq;ĊY Dn(|œgF!ـz뮁ΩX K;mD?-Wc4ղ@%`D6݌ߣDKvFv^6v&xS]/-#l#N\WN *@Yg|Hȴ eO%,… ^>K81?pN-Wò {le#2Vk (1gxj {s (\C1aem~=җ;>}DO"2T[JO ޑ " >y .=h0ҹ*"5؀Ar_ḀD=eϪ-NADe;q4~!6QcyfeO{;OMw-=r؋+J嵄KE3}R0Р9K6k[y7E2NQN/iy7tًa<).^3X2zX0iΥhukWlNb~*LpRImGs- |ۘ>@jtf]&TۥNЊ-#u`s i(6zBhT B؁ P^YY|һNa*DlY)N9kX74!f V@`8$#"ťGFիv괜jcJ(b㠾)#b+;B-]ϖDƏ#L.zk߮RCR_Yȝ޵*4ǿ钛VXoz=gZZn$#B'ǀ۲\/'ff?7#̣BNB5PB"zM C\ ?yw Lilͧ[CLȮד7=~X$G|fw씏\Y3cV GPA'R= =1}DL8x?b2^$G (ZҤrH*mہ#)4F,+_*VD?ANCuVBES$ n$XAԫ;1J@ia΂|:b_R'V 1*s9[ʥ eZ([vr7?LTF׶v!7Ԍc^432Ȝu?5yD -f`ҤrT?Y1\n^QFXg )pՄER Bο( "8CGӚ:픑4-Zrs9xG |E?LsB3,HH.aп>roXl>b΢nڤ~8X尲+tM%|MPĆ< {e&˚Q(P8O+G(+IγlKwKy ".|. &_zj2дuЬ; fw1 ʢnY7ĂI;ӿ#ԇq>Rjh<-&VQ£$.vc=|X4t>iG܇ ߪ֘b2O5>>ZNE圷bMl<n7Q41ֶ3*'͇u-l_Q|d[!W}7vZ6|$$djQSVj8Kx O2U,|Uҍ f%0Cn 89^.eߦeU m<_ t-s5{XXlہoSMY)y%?edVwJf4)fo̙qWaB}BўcHND PI3Vi?>U6%'7îf}#|&4Lb Jhxԡ]3c>a٣C X'!wE"żonctOK,K>lc]?X+)L Q0P\"!Le+ɑ{ [uEqTk1ѱ?e?އ~^s!Fk N8&~V9n7P:|t;Q 44=aOnCޖe?ۏ1;2 oMf3ceqEf ABFi!Y꣐\XlѨ]~H|]x [۴6c ӝc[Oba1\=MH: ׃XxnQsE^&3*4+Տ-w&XsA~%)U(#,LG2@%o[3v AFnWV*AgXώ&9]ޢȈ'CQ5xhdz80t )f8>x+k|jrh"4bA H/l5nSX'] |캪N!Yl7**(hŅC`cm5$ڒ/X,@pk19iy~L$qP˟3~B}UtAQzCh>sq8Dq 8m.iҖ3.^y <$>]DI +*La-՗wXiȆ;{գ_txrϹ+YΈ/1svYv Rߩ(OAg$nTOj5̦wi^,A.5 G;KN?/D#_[y2B sϭ"6NWPm|J^ΒR$gS+4=2 [)Iv /*nEB&L$v5Z&>^Svu1-4&3NֹUcE@W/<.zdQi2\12mϒt 5eթU,(ՆzofYևI#iDImoSVӒj@MSdbbV} fPIs\'/>V0|q`(j»F'DW6`13-#MBȅ9jv_}W ^Oֈ?hnu+֡】βrRUKvT~.b~g_鱪;6ȍ^ pwstf76ukd ]6lTM +R5ϛSo @D_j{լMgz2.u#}WNXVM8=D#Kq}sjk_(S'\yGߴ 9y $ȗ, cO w8ኔܜLŔBBݯ:3[՚ƙ6]_;압b p- ^'V _bHӁ|A]J<`S.xG VRs8ygpV.Ơ_C< 'b}Y]endstream endobj 28 0 obj<>endobj 29 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 278 333 474 556 556 889 722 238 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 333 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389 584 600 500 500 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 333 556 556 556 556 280 556 333 737 370 556 584 584 737 333 606 584 351 351 333 611 556 278 333 351 365 556 869 869 869 611 722 722 722 722 722 722 1000 722 667 667 667 667 278 278 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667 667 611 556 556 556 556 556 556 889 556 556 556 556 556 278 278 278 278 611 611 611 611 611 611 611 584 611 611 611 611 611 556 611 556]endobj 30 0 obj<>stream xw4]6GQ]F/!`h5%D]D QD[{{{gks/jhsI[- p {hwOLL29 ɚ#!@:He<P[$HWK F# @a6J!m! k$PPI]Ī R s \ l k8@p 70 A<,!NW.Nuq~A]@6sbBAPn ℀#LtD@ `V Yp"m͑Ws@7n [:B`H U4\@H`, +'07  ؘ# ..@ Uv~zNNކ/(`͍ b\-eruAJ0>tl0`~ 0UH䯐jp`p΃pXX)0e_EzYz_\?a`p-'(2G =A JlA<08`rrEzAܫqq2&`p4_2k\-v Y}@5 x%&1w.;RjiK&1  @`9uw4GZ P;:cFF(7D˵'w;o i?pW@^ A5 P"@ _1T#~ ;!W 8B ȿÄgkk* ߠή_i \/_w k-w , :!aƵ WY@.w-0Z ~ Z'\iF' U5wf~~H4ZnPs51DZ+G V"XӈHu+Q>t \p ϣDsK{}) @ߕ?ܯ~`9B j^2s` p1p|1D>Y^ 0/@ꏂd 0rE5h\ ^*0/h? zY+ `K @SY`{`󯢾q`:6V^`0Wt@;&64]7?j @V+`>U5Z}u,|J8\|fkDO4 1J㮤O5 >AaPӕY;S5VFaq jSB^ Ɓȿ48- J~2g!>[ݯRC+(]5?;*X\ w3O^ +_ %pr#}+8+\?ֿ<6+kN+z8.0Aс];1thB@}n`*zѕrupAmQE"JkDN"+U*y-0?_;,]mpׇRb3a¹CyDjd$i)Sgp|:`Z%@̤G93btVLlQ^rp̘E-2O[Ks=ۡNpTuoِC 7"|9<},L >T [?l=E“-FntA`ۇ'#˔O #$4[(Fa$˱n}8+xɕLrYi ~Fߓ"ASPSB!O߰S=sK\NM+3Ւq6ӯC`hdmDd*C.r"3%TpT'eA\1:R{TK~VF!# jUho?JJW?>}}*z@4K)v:,~͊ +b!ew F}ِ%NEbG@W]R52͑.xvx2^lf Xำom> y6'1߃$f.RnqYy\4GߔAĪ-yX0ZZ?irRNs e9 :nl~qc3bs^md(=@pCiꡀʅO,JݤA~3iYbL8~gCX*pѨQa8tʽmm\A$-Z,*fոQEn[{%XfЂon K;ʁV̳<*8M1.ub/ 0O|^˧pyW&XQ֔%3$~fؚ\-}pk,O[ˍ`1-<:RϪ*RXapL UQ Jחiռ J_Oң6F9c0zC~鎜EˆCR8fcq.QZF|zo,j{{.TYoQh}]{&&mK 2oM(||Zo:LZm\A=6/,@u#ޘ?wg,@~C8HxmUi|xP6#:yz<\޶ pLð!,+tw.bGN bAIP4 |irJtn {35VQ._"n&/5b[JV-u&5h 0"Syؘt="h#ȥΦ7pm@Yv{:GLprJ1\:t`fOP 70GuxB 'o6FNH)ʹ1}Ls_\#f0}=be*hkg~]_~ԙ~D\5w|‘AbN|#62ES~uN3+DYnS],,Qg?~axצ{*62}Cl.чc? c.ubi uޣz3PYݍ%l˥em 7D;o)9~ޞqsMO):z@1:ٴUF.S=jCY2QX/tJQi"MR1.jRդ_:5Tmt d>ݣ۩DB1vdX~g WxOD͸(^&1&;O1h{ZpM:ۆLW ^FH݄!]~]6ЌשZxo+]}6.BOnMIBzO|XOMr"[{Zk|icGkҝɉ{/@ Ui ͚;ѕHOaTÖ?Q7ك빤(٤ {dkIOub']vjifoⲎ!VY.7QCW1G4<`;bFnD"SIQ{SyaRJ_3F?mzmeĘ'HleN2EnsQӝE,E#YS1j(g٧M?erdDxxBmmtB~ ^qr1$A|BY#1%vBu;a߽ϥ6ֺHaTp3A)Z}4Ru4r`ltf1Eak<^~5hQB^Xrmjmp)N5XyGAJQ5vipTz/~t{o%bՎLme_S(bم߱xoA1$+9n۽Bö^[J7#)89ܳ=y-2BIBGԫ]& Kޛ{~v_h䋃 : w^eyxM1is6^ k!ik|AlQ|DmxOg+޲P\zLr4|D'Ė@CAm7]TSYѐ$]P>VbaweRF8Vܢ+KIȌ֙KeIcyumS_i݌%:c?]AbW{X/ΘF £n »'虺UhBR`y|ɐ /Ʒz5DŽj'ϰۼֽ]x{*=*Ƕ´ZP=%<LwNLVF{ȵ }Qs M9t~T`ٰbd;P _G.tL^bnbϲdQyV ߃Zn8Sq( &ILt}.?E ~?7^n=Mhg قwѠ7O;d k-#QKK:δ00QիP)|[|cqzz=ڴv1Xő͐Uh\6LrcDkg}{ol) É'đcWT:Q/SN|"9?y_B-UewHuYy'1w_vBB#.FΗ^'ZDq3t,]XU>yCP*4:ˢnq˵}Z 0B=pqVhxA1dѴ>F͓|kyG YÍ`̳ŕxYAێj?ֵ=Hl6:lI4볺|G#f įhs kϯY[Q>H*˱G^4ym=^iy=-jV\T})ز `X۹lDe-dGY0QQQp]RL$t9g'ݓ,GڌI8ߏK-7seTMze@i^-6h#qSV2^G1~Jjz BM(, +\N°I1lM~ scѻ1ɜ4?|Ydז0n:0)7yM,ضfCm CDɣ?LIOߘL:EPKizela}/]ɦ.IHAb?fJ ~`kJ5&2Ĭ Q1-shMh:Vv=4|XSm+}M?σqÍfwN6h* sE_l &15֬2|_hZA ,>yN8>?+C=BGyYչf GJBUdO"Y\nm(z4f绞i}!b(fɑHZ zTQ;ۉe˃*6;xcTzt_rmGzĖSp.!,o(&;./.zLla>\ˤs#V/m9()cD+}BfM]^{>k 0cF^}Cg5q6s,Zۉ鋜@hd4+ŧ1瘋<Ӛ^x9BZ**-HCAC|)ĝ}yR-687Dc>?(%mq_>Վ)~ Y9Fe$m]-.tC<i>6.h6P~,"f񥝏] A3#V(YP)~׌,F8&F2STx0&q GR3|hVݯf>i+ =/E%vu|5U^~$R=j"BT-jUxKHǏPܗfFfiL0Xz.qXj[e8 SO;|ٖ~lon @u)*l-9e=[E$KѤU "cE13c( `aJ)JBn.Bk4/q3t]9+8~{w4Fm:M%GK;tp|^`ɰ+F2ih|ԚY֊LȍWO6Cx}e ܙ 8adg[ʰ=vԱYe' `޶_f-/)&&w0e2VvP_ U7u#Z|A:||v߲x0WSy]RCr;c!4)4iR![dIxQo0HdyU6-ޮF.oLkVĄ*h]1ޢ] wcsbI5I,'7٦?GfE>\[úoJu_kT2ɷLHkM6K DE6px%YPPjbSyz QbnB[IFOs(ǝ|(Zf"}TLB1΅*Ot΀"Jq^co鹊נ70>zƎyGv3H땚'dqo>čN 3$yOm8S'0#K ҌgqD W$` \s[G8m0ӢjÉwV_gkNi&Z'm (M]b,}4vv6dMmG"V-}Gge>k@Ra᩵j_y`]S4]Ym߫sQ>ʔIӫbڲJ9PAK4c HibZb%(VJ3[|BL5}ˮHXh__}3mWh"-,4P۾x&.Q8@pFkۢ!sb=U2OGZC#zL=6|,ogV{0kmGGz5B0Ji<7|7fG+(=z>1av:QHC7*rX+;"D6HC𐓊8!$  WC(c6NOWhXu"P؅8>$-/yz?Vʠs'IVX{1)~OTʕ9yt# sڲK?ښl&.`4mO0+"Lu_7UmleR&f v^|&e5Eix@&u% UDW0d0gB|4&si|rV;y=pb)a|/_}E8FGgynx+G(f[фxK6{\aU Tm'Нd 7+[.x$g&頯`Dmgę|װ 3rxjٹp pWs 4NO\ v!97) V+ڡ{R0wkoo+-׻w<2rlU5{EnC5e)ҪP6? #gλqdcd2xIS 5>d0=pZ_wڅ&5DYLfF$kr\ U4WlJΩ[Mc%9_} 4 Rl;,zq*9r(Ӯ[ _HғA4F|׮c(vGo4޷Ч޻ܾdܮfmz!lg*1BSI,ٜ&akvڇZaw//OM-6oKeہYG%J`A~8ӗonyb0ˮvn1GyWvz"jCU9KtYs"s,h*%m+&Uo6Y[:\,o Zoa>-y@7P HA.'[%فLc۴n;|ͬwl;UMV>=M{$b&t]G1`&xv*\l"[wǃ=nG0E*壬k$_lpVɻzw^{r'g8sO˪ j+ <=HVz!`Zoq[AY?6@d4>خ6_]$Z?nMWi#z$ZfC_A34|Edi Kx%F,PWf|a i^8gMVۧ1Gc/3;o_*iFpw YP[^?!Wy5Qj͍Ozoݭkr-=%Y~ +m;h֖3v~ʯ QoeCD\%ޞCxխ\B# .W&bJŃHU$I(⌢ ߝjB HSLML}ov͔xD7: 8zbNb, `0׆ǯaPF?+iuw::S } 9RDvw+x.~;\g<cᬬ'Z"MҦuL49QC6璩Gur1нR!\p(>w r |u}/= }pq~Aʷ: W71Ӑ;wٸ gNo4nO~4Ki̺z\ըXUuyma(-0O7yKExG!cmx֚LED[_u EKHSO':Ձ_*k}撝d`SZzݓ Eq[65W%|A+.;Cuw0Rݺ,<`Wkp)J$y_>RT@=bUѢi)E1\|" >S=9swe1˓:!u LXt$Lo-;^̾T<I |*G)*^Ӎ|X5$jv{|>1exVSNjʈ\EoQ%-l 3 l"͂.51IAsT4_,G/h3! VI2 L#t3yO;}. 7Cd$_g\_d) QW˓nwǣ?Ӽ^Vy-]O> Vӷ&ydꓙ uO- ;ޞ$~޵[}CP4:T᱇Sֳ/.C/Nkĥ1G0>RN}{k l>' Yq |a..}ilއ%_X7L eC՞c5͔.`(, gҗE]y7nz̥ bU2Y&L/XFf>Cz;Eòw9,0m'M20e U2JV-|cij02^zɍT34nJ FCI(Oh(~% t1Ýo։XhL+Gu-V?U}|Ι '[r6jKRSP|ICgS_1-HDn&VD(V;iB}bT{wt2_̠n &47EީNϾ+bf[Sc":xج|[$l-'4zZ[m y.⅄o{e[y*Sj槮IC_*6;uo9>|QKozPx;us!i(o:ueL.VKx*|ڦ%d-W'6.ôQf:r hd#Zu:h?6*>Y9^-6:_6{MM=+ - Lێ&aЧy0+6mJ`oxla^81N:6__K \?yZq=,A]'n㦌\쮸<8Nd.^,S6w&i¶SM2= m` Ӆ٩46DĄ$ӄgu_:($)X[…ua~>xҘP,|tT؄Ri(aޮli<̍qu5Ӳ|Ϝ;Ga!C15`rT.7kJ_хƄxU`XOj']zRvSpPrYpGϑn3jZB2_Ǟӹ3L-Q%Ƃ@\[{#{P$<nM"!݉X4iECU ~? W:17yYKcQqO̚!Dr/Oh[NLnVIooJٸx2;D9uvB+Ġ@ hrťK XVPNvF>85,˻QRжG7 sa1qHf~YͲ߇($Fe6IGTf8eBtQ =B)s'NUgʋ=?f{^TpaXVƖ}{]1?C/_-rӎ*OԬ&09oZqyZmrCTJ N'iʼƣbk %U&V o?7A= -ßΠΜcg.֌ fiat %ay|WgMa0WT:?feM-_eƄ:zTe ֈ;< D"I$()љҿN1TV)Bog2GߞH ^ ȡxc_fKg _se#{bK7I7uBk*;1cO`죲Tzc8 IG F3A#ŹM%UƢfw6_Z,-r3ɩXl3#G_5Q1Ln´zbIйtj.H a"vG8mB,-4MD;sOrZ|/g; {p7oJs>diSM6`y0}kӻ8º3,/b.աb,DG,۬OٸqzΧ;7gp_VBKw=ޮ @W:xjGJyj+ӹDdBEFZ)5eBIe}A,ς%MK3 ,s~$ߛs;a>67' ~;.%ȟ71Lx-?\/6q?.߄`h~N߶Qf "w,iu-.I*iFD.# h5hX@Hz!O "~;7ȶby+WI>2C$t}e<1] cz7qzZZ? _)8 G=$iRâЗrmUf"aMaRºW&o0US-=!9T2~ӥ B,4l׍3WbR\ۆ?NqĨ߲  e!S>mVyG/1iv мK[Ѱ} cKIƢ ϫJL/ƈg9sר_*>PJvpNjrQ̮()[(*x MZ촘i2h< FǾ%ѯtf{?n{X\F9c'lߧ=΂wfmV%guMAwꭁEnWފ.Ydm%Hel<3O aV; E8E.8Rщ 3̮h>Kص*zSTXޥqJ("-bbib a`ְ {)٨s\u][Kܪ;엢AΌ-)&޲sT3/fb` )tkc`@ Nsb " $ OT5 ( h3~[K~e--Y[-~;[κihT᜹cmRj| :gg%^O"7N>'IS gR[s3mCtt[K]m}z ~#c1?'4fm|?HӪEe& l:bY/2+J#XC*z#sVM E"<~e—?t,1g+e57Egh"׿_a ~`晇C(3}FfI9sC\f5?boW֨Ub$!k=TFsrY8)U€y8ִxdΏst3j IS ΞiX;_(~`'lcMѮ.*g$&Q8]{4\>Cd`WOnG쪀aXmǫȰriڲvYGIvqpjtЖw+52#o|H3-Y,qMXuc5nhYmmԣ"wDZ0Z(RWbLE#f]ṳtxT3;L(8"''bJ#\rk3S>Vlúrݜ>n*F.,weaLvjY )~u0yz##(Bq|, aK Ld`Tۼ|xMq]FJz#ʈڔԁ{Hic\PHz&U`8[J-r^ǴX=b粸K}#xzt$8%jfžupKpCbhAⲨۮ0K)1oۏ1di7$?+޿ N\~v+ȯDR~}AbFBꙟB E||m[1)&GSQKgϥ}ʷB{.i  mGj+(rYL/mm873 83OL-r;2<.fhJ+T-\G6IC$g; {Svi݇}8.}&~ZD-(3|7[ؘ(Iyy3C#g<_k%Ƨ(Xu^ZH́/!-!F|t\Kg߯yv^2ځУ75"tձ2+ 5o *.IHҊM,Jj#3g'̾Uڬp~Bv!K7j1qg7>E= ?C. ˶m۶m۶m۶vٶm6WUpOI:dQZA ?Z'Mmʌ[#6NF cX栔+".ufR͊}q>i_z,aICM~QpP\CY8ʲdL LDPS Ftn2F@k#iƟ^-h@_?MMT^_v2 yk(mBYeJb6b$f7TcQꞱl0f c! J}YB&ں0s+%CܽbհBی3fDl u E"vuǒdwmzޡ')YPyd7y<6IbrLkF BM4E+a)5WgGO7¿2k'ݴ.iSQ*X7 ր4Tø?mCtBz}4-Ff?O-'Tݏ&r]{k ysZD J5<0d{sCKd1BIx%?YȨ -V&X[z{ܯ6"@r7%9`՟$5="hq9mNft`0B^-w׬1 芍#%Dq1=RN&yk@:71\E^g66Sh D~`D_)V5[(S8ǣisf$'Zԍ;hv&qfZL' :M3D)%·7&$vpͺ/7]1nLܻ2B vyC ͉m&Νm] 失 sAy*bĸr>].P }xU{1ȟRTXgazUYO #ʾ+M@e8!IOa=pg:9[zO=[U%K9x~]6^ԏqH^]&s10Z##ʬ"Dg΄F,]`P'N.4|Cs6kͺ#j-k}M;/j@S_:j/.~D,47s#g١Lbe}6$rGR%Hy]lvM]:q#m fû W.cRk ۃ"cN;cp7y{}G,&:Ɉ¸g|ݪ {`~&:/P1BEWRZJIt^Cƅ Lsa<i'ʣ:Zm],ͧFJ"Y*Xc΂v~Qf9η,P *Xªz;EV8.𥖟]*Is3p cF_ԛGϥVI.: ZPCIC_ Z?ؖQr $탞r譡sfJ}h]*gnD Z"NrGw\J~`@PkfCpD&+RW1?NyyO_W Z4XN7!j#RR7&Zpʸ}̔^jpęLF(*Ծ/UMO,^@esChuG(Yl 2)YsBŭDHJQZf1lO}y1* ;?lh昕ݮ"#UM>+@=<ۖdh%:ն˃Κ腗A EU#-cwkz ko{ͱf()FpDt_$k]E9:<mjQaד)4v3c|U ڽ^LZU_n[_=ΆJ:Z7칚>1L2}Qq.Oոs' 3ɭc!fQW-vB3f ?d:YFnagzkר*xd9aDB{t{J4z 2& { YSZ4psN$>o_]I/{6xm\78Wi3l9HH6 y>d?F!+7˹=u&T!ǰbƩ2@\a A L*H[2\uE5+:rqƠXy 2r+3ۮ"ܙ 3­_*QeߌUk10V-]}:XX+k{}vvMMnuM!ɚyUW3$[ǚx,A8h<[-ERɮ!·kF5@y_`v<+ਗj!ұ8T q|RμipߚxY׏S]B_2ЃA&?kۥ8 ;@JȺ%_.5^.vʰ fR3^@īZ;:~Q5Vw\^UV.F%.܇@3j;X Ʌ0uSrL)2G#XU=QUT.DԷ7,`r`h19ms*h\u"C#j۱hsZƐ9=<6 _gM|bcQ Sihf/8njm"e\M.vAsnMjv_-h) $m,\^q`<4d>>COLC+{pY# R9 RcGG藝"b 3A/pGE yQ%/ F5_"P/tW " , j;$%QQ0l*N lκ{Ij]Tu3@,wkH b82t$~eKV.ZBqY@)Ge~Ep8C###mQ {Bw~B&y^nowч]sy"n_Ubn&q ?(jƪol>QYr.C/U4\}k ŔvE0 d(pQZO{9w.IiwQ>2'Obf|_O>t ȗ1@}Ta7+,6L6Vs{R$XYONWJAὬ0F4t4?0gZsm\'v .[V1~M prXDn)]DV}MI - MyO@~O3~ :dPףnGL_^.+ U*9֨,_SF"G"ѩȸpC7:XqTDjK"%^X8:xSka5fĈO?_ ViA=hL:(q V,ο0:]\ N7~ dQ,qOcΕ޳hhs\ы6{MvyA%`f>h1k 'YgAρʀY79Sk `8I Bp @Tv'1Aѣ{ I,a)M퀓ݑƑꁷfAUe+lڄ!;ƨl}7rƼ)`\ܖ0)/SdӠx׶:v~״-g{1mP0+8Ouٴl '(< ZUrRT]ht}VaGq<@ H'3X]U D]cuw\j~HEh$ PQpZ4gq?5{ހVJi{:{pYAi%Ú)))Ce(Ml %`>CEf(}˗utmg_DQmmkkSKÕ"i KZ-?)U5 :16 |p)챻vN9:®v?Tj:jO_NÖʟMrwADDQ^!*Nb{U0q>'_-^]4ZҊ0s(҃޸lKXKe?# wD\D.4%HP@a-eWFv|'5:JWeׯxd͇q~ea~K9{xGp#>^Ɔ0V|̄ W U⺘ƨ6/Ӫq9)|9YGt+v(Zh!`:+DYƿc0M a0Frv:n:97wE1^||%,C6_)v/O^i MFА:pW DW}ޭ;#fy:s+m_* ڝ޺ 02O!r!r|1sJXi2R)wI'SlyfyowLCb1tW q#K8r T6=Ie 2Q%3yF[gjܭED [ޯ: vtmd#_H,{dfrer sG5dD`Sdp zgld  F M5j&jyZUd4ݻ`cK̸(8?,VFU ;0s-V l)8:$;e 8~A}DNᨮ&+?+.f>[`BGU5KX|c4“e:z9i=U(+ֻJ*ˉr`nWaϯ{Z!~1:Yv-8'6[% qXv})X_lH%YE".aSTHTZn{< ?aq ?)bQ]*lߕg/X~m!`=}bkuE^J2AIpe=Pѿb^F T 6hLU[2q7 @PJյC{yt&AOMfOMZ10LA6g/FB;yx#wYܘޝ1Onwz\g60KJZ`u>*]ӷ>! `S=Wџ?EwgEYXJq9h2!3sXBO#-=p@NMt.@KK4 Ӥ^GM~9jE"?Bs$0#A1_Ox8nqWb_J#Ž{o'4'YpdY f-hmiW4E+noJ8v Н!^8Oê4t z/Ar6ȨWбt)+4nd\r!^,Dnak𒽜f@1}]=amجPÖ7J8މp'QX =̺eys`c(8@p,L\zЊODCcr(lvѵɼm+5SU5iCCgڧz-ϕ(&'BR@(s&PNR`߄STW!lz7=MOAg~%5<k)?3v4wӇoe߃\sAl[)bA酄ǓܠTiG~&+N:mUz"rԄe=H{5Xm3%uȐnlkxo=^cJW\E6cJHc2+'y=Nyr]\9RZ, ccwpA㮌 d CM7N2ဲIbATAo0YJ=%p2ή\P /n)ysOjhn{#!W5iږ2"?Fc!$Ŭ=v8: ޡ P< Vbwbm(H {i[%'xtī&"VzChAS{(=*+8eIl Gk#%k~@M"xsP.5w #7l(ruiI#R|.p# :9>ZrݝN~N5 3jq6A`CoQ[1_Eռ1{ ^-K;dXa H^A6Eԛ8llH6Pg4uЇr@yf.kϋ 36"B6fKC4WߩK&Jg#>t=ffF*L h߈vDCϖu:yWc%vLsL9B}ࡠ9;٭sP|K@75*@(cReN a(?^ g@SN![G1I*GpR/D4CyZ=p7 ܎B.eR*8[e;6g \bUİAf~@7$EH| rؤLL!Qc>mq>x,^rkZ < =xX+I9P"pMEԳaqc蔂ɣ&SL# ڻ@MF\{)Y\ϊbujx{x#Sّ;5tʞYeM#9EI9CU*xH;A(/l %~OKsfcz Fʾgc٥dgɊ"u#LBq blnj{&/ % Imxax5TӴ4,OwchsԂ Nڐ5NEIύ)2/_{i4b(6 ,1D(ר!p+0}й~wzD=bLOXO'7JN|CV"9(/K~$SP  OOWN"KSf<jfy*)dϒ>Otf[><yhVX)9 J` cy!`Yc C0DŽEKv`~ƣ>WΙ/\y(gg5mL/ Srm3S39\ApǨγbmOxn0k<:߲d`j=o,vfĕhpt|1܅>8\Ëtmi͈!~ʜWm:qӛHg0rA+HCO{sTj U7lZ^Wnr=af\V1*@v50۹[uL3> d>mC$Hg,WAtzk.<](nqDOb}au):zCRu}ү"-Fdmʔw̹Cl'f4Gu[weH&oEP17?3iobMGvk.90_!6XQےR_hd/n,x\O0g,y!3S5XvSL8劖(Ql]c"ɍ9ѽ +v.KL)Ya'9퍼/]q=dd e5/On+ uW:6i {V:]U Ը(5FAdk8zU;LwH^pʳ@|tT?t'bk=I3@ٍZA|mMw)s B<^9)a}>pon9(@)uv5WeWhQDrpwO2Ʉ$vGĽ-)SwW[Fa]$CtT>;Gq-,P>:U"e=*7ðJ'}7r7{O NTg]_(uEu\tPLX#ѓc[g'#&l{Wb?+`AoI:Z١-]5jÈ?O$"|% gh]'׵S6'L덢4nYu5T%>t)Zet2Km}GZvTh0މebbg⊮`@IVpߌV077U+UWDp{ D2N`ì Sõ F1U9755+o=kGl+Q&&~N)٬t0lWVFvJ&)y&1Ox;`b&;7gtg#0Iq}a|>4uڝdiUr\hj%ޚ2cزOgx^~ }|B55sH^ wwABQS8=!m*" /I%cQYԩHNRNz9n)9Js>it!w>\XQalcK>\OxVٓń߁ ,m2fʭtmqQo!*IdRʧ=tg0akwa=PF (r <R[PLnc 3'!\}>{;!CO"`1h9>:2U[|exжo֐g Ge_1J =$7&.u;4Bxߞvw,;W${Iq "ހUG;h9 -,#vY}~@ڄt]s~  $:tc&8V_;"Qg8Ͷll$ "^'%F|Kwiqi $XQBUmf:kQe; +D6Rݏq*u]yd " Z'Yτq(rЈ$DOj{횿 /os( F'!x7]/84UՒAFRl]V;{=V¯&%{m29`rYFg Z30` =}Em!,2 p4 `Z|T)T%.큔M Y`C6#tL^VXEOiq^a;*y r%$H$&l-eBJk;>8>K;Vf2\[K߼5<`4P<Ũ£LZ _3WBz%bvȒܯ11H5<&I2ڣë?5Y!AK^ťdKׯ4*i_71 C$-ep^L/*'Wֈt1 ;*On- E?))/ qM%u`gp %/lWiXt a>U;N Bwuq5TޝA⻯.FL%D8Ja(@#rzZ~K̠ny%QE >EY+8ÓG &n`qT`N]a6k7YO}{S-A6/^JF¤{x`OIoҙg+]M j`R~$,R=iLb={zi0Vzev/рG|・~;[ *[Rkx}pi5Hecw|X{e("1NIYDfFpHxJ+)N̨/1J@ZJE0T5Z {l!$\N0"zz {͒DŽvLCs(K`PVjCwyNfvsh7#=,1t b;μ_n[{fj SX6˔UB$znqO\ZPtz8`u2)yWk!g6:J3s>ϞF}I2ys[#\+ctV錗0 Jօ ze'ʸ^ȟlƱ{~(s*JQ/*oqz[C L9S'S ϕNl?Nt@YAB'P`8` 6ӑ|L ˘dު3Kr(Ô5 0~[<e0vvL̦d$.{lu 6WI<=Kmca_2`ymg[aoaendstream endobj 31 0 obj<>endobj 32 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 250 333 713 500 549 833 778 439 333 333 500 549 250 549 250 278 500 500 500 500 500 500 500 500 500 500 278 278 549 549 549 444 549 722 667 722 612 611 763 603 722 333 631 722 686 889 722 722 768 741 556 592 611 690 439 768 645 795 611 333 863 333 658 500 500 631 549 549 494 439 521 411 603 329 603 549 549 576 521 549 549 521 549 603 439 576 713 686 493 686 494 480 200 480 549 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 762 620 247 549 167 713 500 753 753 753 753 1042 987 603 987 603 400 549 411 549 549 713 494 460 549 549 549 549 1000 603 1000 658 823 686 795 987 768 768 823 768 768 713 713 713 713 713 713 713 768 713 790 790 890 823 549 250 713 603 603 1042 987 603 987 603 494 329 790 790 786 713 384 384 384 384 384 384 494 494 494 494 600 329 274 686 686 686 384 384 384 384 384 384 494 494 494 600]endobj 33 0 obj<>endobj 34 0 obj<>endobj 35 0 obj<>endobj 36 0 obj<>endobj 37 0 obj<>endobj 38 0 obj<>endobj 39 0 obj<>endobj 40 0 obj<>endobj 41 0 obj<>endobj 42 0 obj<>endobj 43 0 obj<>stream xetUYe{]I!B}g  W"↻kyuU\+ ḇKzf>io4E (07+07M(0KhTh\h9q-4ɛlqiƎ13e_鑲k.}~hO},@CՇbRĤJH;X2ON<1533)8Rxn[Kn/]lewヤbފ +V.8V'n9YLݎ]皾,nWrBۡm/tDōӕ7V:Vq uw.6ܫhWauۃkoW/>_jt. "!%!,C榱 ctJS8Kns+Ktq~FdF-׋C[n&/#Ns_q|cb6Ѥ+wly\RʢV>d Afw4y4=u܄p4fxy4j)}nʌnMu@C VҘ/s 4|dLIg:Ď>p:Oה);*d:#Ѱb8 ܴZHx&uRF-']VVK0+\SWpSB1Kܔo-_?䦸`MI4-N+C&I[6Ҍ6$ JĢoJSϓӡJoqdDN1ySdbNnvQC|+~坾a-Ho+珟n츣M'QJs;)6bj" Ctҫ?HbS7[nr|'7Ed5On#?>0e1[V~wL[i+ 2?k;e岊#FE^Msv$M uR?+|.Y5/OE4E_Ѥ\. B AUк+ lRD:{AOήt{I=(LSto;{10I*'6XTKIC uvZ֡lvK=nJ3nv`KCaAn!lea7u#;iKt "7ʹ $p[qk<jEGÔoM}& s.MZ1()zJ$ލ.XŤ&.EPorz+]Yx4T c5ۉwڨ:B|+EHrW)CId$(2d Xdg)ȂlmxwWb“ K,02M?ӪN>vR+R |PPҸN914.$>&1y9zyFl4ӨTSUzAz6k'lch{q[I4𻑼|5oET}?1ߞ|07)ҟch%>ƊTU+p 2Nu㚢"(f GvceƉn8w7%n[nNI&)Tpq.E~:߈MEnv7nxY)24zIZ4DXfI֎pKQ6N5^KD{&m7|„@ J_nvjdw&Y\BR.~ɯN0HE;N! + Ѣ]4]g#O2ي{ʼn[XDZFc_}24pJ9j`SSb',-:2zڟ|g]~O7Y]z>#dn!K[$VXH@Mə%TyT 1tۘ4նUxW=a P-R=-9QcA I9 \FjN2C>27Ɵ2r#y9nJ|OnsLba :)W7kO3U R|+4M70~I\El:2NW2hv*yMu(3L;dí8tu(ȓ)YK7?ߴ[+eT$H@fw(SvhF 8M4X2agidOԾb[uQۓ/J}{ʧ3NEGe$&G5S3?kح_m'eG7KHNi -:O'Ax#Ứrn aQ6[ S7mhUXŮ3L'T 1"TR\V3o2Kj ;:Dc+/|7n-l$LD^h<p2ٚ&ZƮW;ӡ]u&Өզjl)28 '3̵n˟ )nIljYڣuo.L-kXKvT[R Wd6$mҎ6@MsiB*KP<hw3~g[ b !O-|d+|q,y|MIƗͯ>-m~uߞyx?f TUBX=&q_{4È45 MRf[E *Tk Z1<g˄KodOk]{0hIF,2MhH⌈59C40<4-hԍb4Fb I;*A䒸jZgNXˏ?O+2 ]Gg1 ޸0$Ip\M:Fig憓 /O]}H^y<+n!xeRƪTzL~,'0*:d$[G [5@i,4q?=sպ|A覧bR _ @ ,bM 8DfJvDZMa[r@[ ݆j*id\zo˭Ɖ[n~P (nIܬg2azIig?pZT]Iuw.><_sUII˒7|=:>}Ciz}繧. ^R7|NxOԕJܑhfy0:0q^V V3[rl-7K1]ngB''ejEn@?ˌ\,nefK$x<-0PHő"ϓЙT+7;jts ,[N X˰ c7 b63C~f Y6%+(.qyǗ^n|Z`#! BDE "w6ĭ6;P願NNDo4JWFѴ²u"rGo`ECu!q8^Jf&ZpM4b cpGOWoUkED|`?z%(E99y 8Mjދ0,^ Av1ѨbpS" hIL7NB~iۜf3cؙ]fp)w~.@+D)SN=33윂)o.^te;V~^zgyK{*ذ2`ec5_|ꖓ(ju}-.vRKNT8]ylWo޾Pwbý{-ZV=ƛo?m^xqSCc6y9k.yne{.+ms:kǩG/~ _uePBc/OZ7eibЅSҾ,m}u'ZkwN:a %Ҏ̐) 0xҌSOdUg %nKlzͺ皾>|7Q)n4O@7x~dWP̏lf=-B-"J':He-+ENL&LqkDbI{ш1J܈lZٖE_!]):sx4L (hWiZ?;ՇjGRtiYҖM&L\_|,&lAMJF1S j ӑt 8s([>[$l[HUat x|-@M1 }\PR>nFJȊًT!DEdh2A8=Vh\Jƶa-;2ى8Qشʼn^v4f:IvmBӹフM L` ҭb.ʹk?5*m~Y}mA)z>VL;vz+7_DŽ5z3 }g,)aKw]GōBSOv^3tRLVx\W Ȩ+ʡlZ5#'0SlrB1j".蒴lO[_8eHyWF^9tNnU&+ Vi{+Jޔ5=9Ws3taoCgr>E;hMV?2>o ]DZ^VeB4<W&i,~ˤB xҹ\su&B H_HF͗Tȃwrccg˒v:R99T@Xx &!BOHhtR\,,M]4ه:ui[_pдnХkuƍ6s˲*ZPo8dt܁\='ZNYýK`:i,퀅z!+ Sz*\ ^&ċ ZK2>d8Ǯ:x_y-aVnt}f/4 _NnQtInSBeD:%a\A@`LOzP䡞+ / /@w>u!CGp;}Ha>%sSs O2YUeeBl:V|˛gן/=҆{h_MKo8xLpϙzaxl3_@>y3UĚ|hPaЖ:Vp0 ]2DBR U)ݐ4# R ;yReLpk\F'|Ć =H,7 &$c8j-b22;"F}V-8@"V 77S'pٲ7ǯ܍nP3ϡVCOM>1cms\i֕<4"ZrxM>\뒺;N-CXG wN`Muubzd3Z҈MX{>)Q#*E xҽy_]hx\Rsg_Q@#ކ^?,tu* (1BIeu JGB̷aɰ_oGZf"n=5H2~ _{X|Q E u2{N(Rl #{ ïj]b֊5[+iGgjp.jyxiyҚsL߭]dM ڡkPp2j&n2 ^4yn ݐUva(бN`&>Ʒ6äBn&Kx (nܴTo`2u_7j7>/o{3wGO׿iM!cb=1eƸA^FcBRfY$o`# [^]hsw@3~M؄iN4 Z0.y}BƱ׶^zI~і|_V;}-w0o3q6bsQ 6_ņ:3u\]/;5~ymB1UgZQ/<:>;|۪ pߏ֟5|ףV7m\IN0|ًϋ攼8k?3~6Gx脥WDDnfZBp*"s#yVvӵl;.m69Y,~X UiK7TE󿬸ՙ'0oO^-,-/02}yTBzDxOFpQ`cO_y\q׃W_nx{?rK[_w(bq4j|^R|7% ܣSx2e>dQ>UIiD<ȵs OCv,5;kε|sT מzѷe)bqS ޘjG/ Y L=Ce,i~SzWikt.WN5zu|ȥ^3b:{_i~)*jxvB&DM-6 ^le{}sޜY|CWnD6kv^}k?hH/ 4YiJ^yrmѵoh^n~Y~CKP|uGyd_a "ǰcyrՅMD*x`o 771'&glxCnfYcڲ}} \1iP/6jkʘer:PLJ/^lyr5kx\~㻽WD,²m167x/ŵ_HM\\+_z6|aRUfVl91vQiZ!ub"6Y4=c?s0:mVUfM~Y7>r[*KUT-<نA HžMzNHgS.Y*nDx'gY مOKGL^6M1-z5i8gUb~F@GM*!1p3ma2PJ޽:tpCȁĎ2V}­9C&D2yIvs57_ n>t壼腦-XK-//)Bϑ9_JIZ9sm#z }J_ME;NԿ=E Αu]\b=-p`4٪  X,Fu̠RtvmUx6V,kL틢E}}M3t7?#o47~{so_5-Mm0ptBf3}SSQ*xkQSȹg6O۫ tjٶ-df|i& O5<0>l}Pf>=\.x[b݃,f r0uoϫo}O_7?u\z oV]l~1k=#9Znґ޳ё '%y:9G>:D9t7T=x_Dt@}`3H9 7Hnv7n&f-;PltѲeZ4!bsLƁ-ߞiۉ yDX }g鏟 MO1?ܷޘp<+{\5b!z4gBۊƇŕ7o}TBiѨ .rBW9?UB,qa2td@LJ59 _#ōIdCD˜#o?렉W\awcϾ6} @ VjzVlC9Cg(~ǧo sԈwtS5^1)B:Lfekȍ}l:$[;n,) sT₺D|7M朒ցE&Kܜ*:=M<Ɏ^GU8#(Ljv]8h1E-!.%lX<4EwC<\vC6GOC>!=)_g1ITWv骻8u$nKDy' w 0ņGޟUA]皱gQ5Ξu<:,\b:|Aɭ{y3v/^n~P=AZvoCoB#{$~-C忈`Z҉)(G i)j|lJgj+g[Eu]y1c31`GI݅)w3->V\Ei'D-{|X1C# p7W&hD ,F96v(o9/#uY/trǹk?`/j-f^s6LYp5^3R{4](ыyZ5Z*'B\4м(m6PSCKBLⲨ~7<)"c(]0.ac9OB ^i))-By?nA)ϵ}K#tXAFN ][ 3^@ :~<]:b ƄcphCzۇKMJ.ՇLϵ` F5 ~ԁFU;)6pfgK֬ς d8QMٺyTvJnc?ui>F}2*]M{yiKpM\}s dFgۿ,6@Rݍ (ko^M'ĂcO wS*Y衶}^Cl~|Nb0L{c:v?Q,uz%,'Jk3vPsOz}dOCfDH9G1k=C=!,Qu@]\ue|\D C& ;/7<5>>›9Xզ5[a-GJ\eh;*;v+6 ,҅`tL~NwMX柎G 77RY4Ei ԶU@ #|Ij}fMKkn6"UZc*SZ ,MяXƱe+҃oU0y.S{I2ze]SM{pM9l 5q??F:|7 ~Kr7lWGˎcPuAG>/ xh򪭳6nfg,*nU5p7yd6>M%wwo4sv d<+5(FjY,1 TQЊTBD͵SeU[)߸*wOU+G+U*M?miGNQ"urp8K$k@ˠNq2Ý'qHl56|^nI;O b4eh4e@%M/{j&E$jNIrE/;b*RGkZ^VOkB}mAzѹj>rIߥv>f-L#}ԳWUT0WgQևxN/6܇>X§76<(0_ b6E{W\FM8""[ !ō;'r2jlk"^?!r]qSc\ic41Uc%]4 tRb7rbgt0e/5TC! d8=9PUe3fzn;7>?Yi-B-ý4?S$k>tl2TÓXe<:>zS-tRƆۏ4ިiV[H뒦ט"qkzT3!„|N 3商K`cD3:`w[*MK~ gLtr0MɄu1cb4be{ X3{nQ hŻ_^i~^TqU=*i{{ĭ]((i1)'BcgiS2]C֐"4I=l\2zM J>( (n4 ^2+zFST5 -)sFڑGIذIxE< -1n;Jjna=̆N.ꅳeW;Ɩ ta)":`nG킸%[0Q;_&`HwsͯQȚ1>lHL\Qc.ڶ<θ>TUwL9_{+>8پ֑8ݨsJAc bL"RS6RÇ8e+>jڢuf&/̞`3RwPҶZI7+7#-˲2#W2njҧ&(H?tAx!pV-t[pl]xš9y"BWɢ2 W,YdxH(Z<: 9gzN&!̋6`moM>w8cIśDGӗm eeEӳ59h4Mԣ5ȫh%S6~cd1h4k7Ta²"6\cT Er&ud;-qA 7?(j(pq&.j_QCٙ˭WZ sϋe9ڸl;/3 b=ψwbً_C"2g6扯1DÓ6>8\4q 3ADŽz%-n7JNqWs7&Dm?XJ!#ܦԮY Xl}c^lSZ19i(+'2̭(. 7Rr*nQN᮴#]^:H! n-mͭCM h[ 欒 XxhBr9G*Z\jId{96հHˡs3!>$-"`u@i$TX̾p;!tv18],9Zt֊5:Y9rEJ ,obmJHm27C#_J,)Kj&̵߉ZMe:s"}I-۠aH[jFN'\ƞ vɴAɩbyT OS-5\f=ijv4kcF@ n 2P6ePU ĕL(߅Q@ᦂV 77O55 /n*%ԟ'8(4G=QgU[o1<1h_Yl2.8ٓsÍyW@aU2j}˒֧_ݳB~˺qz5q~"̕4)DI"z甤E>2:x:9,2܏$ ,~Wn$*m^UWYwk*S̖kg. w H$'γYEåm)+B\U#7E2~\^+JG[[oBd2c}\ ~3oc?6tispKV~ˍw7-Ʒ/_Q'f \UY2rMܲ~GD1ua%v(ܦ`Ed)mX2QEv؁)vi[0}ͶP\E{2tBzEPLo舅ō~< }f:>5v[ԓJOYͷG.S=g)Y{n?Sq3_Zo)Vq;H 7?X^(.K@fwX2zC;Jdz팓W(g'bk0*Ү?_]{q-ocx4ϴldЖκ6DLpsz)kGt -:[w8`l㗯[OO|{yc5uW4?NF,.i=*6aa.aJR~!aD'$cLHJncUk#).!t#\lh@v#0H6 ^׾4EįR\|IaWlg 6ncv416x{Ǜi_jZ>$3#M|{X6hLԐ1N19Yr3fL \YvQ<Pv;ytB_\jO-U)^ =M}b7"oY.o+}goBWB{).!^_O@c8`t<3Ar$&,gg(pT[" gF,oo0YSu=']V\5 Yb,øxVӋeI Q2}]ToO rg})PC).y:~6R ܚ6YPއ$jBP6-Bx.׍X'ŪYƑơKu}fH& g4` gE:"|a1 V}tLjc#XL ¤ecTDbOʣECaeƑk VR3~۱z7bN>a.j:{cg*Brȏ0rLo,iT&g '=mT}ㇹO9} *rk:(0;ul 鰣mĀё1x0Zo(ZZ, AY*爵ІLdF~x SUjUp_Sަ=BD.Ah~ S~A죾z:˚E`@ 0YǦAS^3DҽL5j*s@/l cYy3PZR'6Vj簾d,-&jO#Z;*h% oU('^}GN1L /1o?vKag)JDqMTBNqG_-8d͈ksI`h}?3٨CI7E1Z`f4N5 _eJ՗ϳH`Ch#Gcw% V1 .% ,NT6.hf˛R c&?[#p5p&y083`*OH (v܌Sgk_@ q h =;0T3b6VhU& q;W/:)Jq)}-6 ^?@|@a@"4T$516sXQ'pUB;Mea Z]?( [6Y,PBh sT**to/4^=8cB?Aj0'э 9;˂tC7p0lcr "\C9&[/H:b,'m4ՊW&i)i߀ھF-W[W>Ea?j2b@&0d03E.6֡o6n2(펆E+0Zhn zOp+%J($eQIh4l0b 0|/cJЕ<2w0=;1$9FS<  I S VHH@\.9&P@X XM:K$;q<]eM(T`1a+ 5A,uy:ބi,1g4z,4_I*<NقQЉNMI1gN)?94Y"j"i1\7A~pK&oP;hk qKr( p,r<7htX^b$C$4]yR\!+&gMX{ d(DMk/2n(8aӖDכeƁ<@;uS(#yvD[a y.@ M%Q#m7%JF͒Lx_ZxMa]넥b4F.S;%#I&NH 1S0ALfbC|hӷ|e (s \iXmdm͚*ts~`ςKC4;dMټ)]%Da™:Mzp'ȇ 7!7 d8jBMY%}g<~2x;XT0Os\"#:  ƐUBa@Z(*S'#@5,&;E{?%H?,(2HI/#'WHVr.+Ԑeԗ)%zh,ryc6DL cq5Ҩ`i| _+A! ]Rۑp)M(vuᵺ<5Lz+:,UŇt|24;-&1MXnֈE*=N,HHWT)k : tJ_%O&'Pҹ2DF2zKx\1u_tT 2AȾ ]aUoOt-u0U[(8u0{)xwDnD"y:i `ƇloNR`ҍ(aj ͮ|p$pq n ŠJòjQ֤s$gTO-dM**.DƜ~: *HHPЏX3{h pGT OIĔ,G_8= T匱 @%4I+wHpU"VˈT@t4}2W>M[xMc0翰{h:<#uh7CfUeIg(A@ӏ-{h) }յG8%YHR6*8´'n#: yw^ `IH؍4]Xs,hPX*1HAJCa=H$o*baE\:DGRTϗzKwf7TG?CQၕ@Y3S a1/~<i5mg%BèLluZ2gCpLI (nԋad/N,gVdf+sN=UGΒ Úh<vfSQ=|+HEt@F+Vb0չMԉ32q[0:JG4451>Ge֍g08a@v` ?J(X!VLIX#4/1XE:bd"^X8i⚝7 \XP-g ghM!R p7GEY]{D$0 &/U@pSn<7El7FxYll'.@y.Lx7HjY$X'G+I),~0tVe jUX QW~PM۬:&f"WԘWI&D뜐Hswe | Pݸ)雛dT2uR {V2Iʋ|\J8ф^C~iwù_ 4:d9[#L|o 9%(^mՄx#I/N4K#tV^N7}Cu,:^8:$#w/OA[^:":ZF S9' *T*@,2tLQRĈA2:EHÔeNJlC3O*H.vS8L4cǘ2s/H5oݾ ['pɾeB]q r!C1GbR%IZ{,yI'durFygM)<7s­K.Q;w_Snoņ+sWxW)Lݎ]皾,nWrBۡm/S1Dōӕ7VbJʊ^s^EӽʖU^\{aͷ}~/o<|͹@+Fwcipj]'A\I]:w>H[ w.ru}5?k2J]7Tdoehu P.G4K׋w_M$x?~y3**u&** "!a a1YDYEVٗ,[Uݝ!7ʹNuuuխO'ɭ{Lc ~&Nl`aS< +(҄Kb5Z+kȐ!I =κ}tW)+Ay{{Qc#&G&G'g@&fU333*JVk؏v>sd2S713!BDWeI$ ubbe~Ds2U|6lx\ 8څ8kLs]_{pSWw+kxyz/B46"7U Mг]?K8,>< ^"чIy!O"Gb7''´ yl'ggAm< ;J 9:%霽yd \!˙ @ٗKH1uWq`B#M:JqgrO, C?: A 89O , hvg!?ʛDd[z֡x`fQ.X}\ }?:z&1dЪ ;$s83ZaS_Űqv:1%|ۊײވxC?b9ZE!Nߐa(F*s N4,{גyM9=?6a51e8`4΍hlyEM- DCG Da/X5`C20~?{ m+0_ B>79 \F30fg"133gٱ\BZðQϓ\"DB }Z{H=Yk[%vctPPAtG,%_Z}aD(x*i"OS@ aBD_ou2cC_&5z(-R&P\lIf*Ha/!̊)<²/Βi9N>^xfTS )/6<9Tez=FBs:J5ۂa7NG#"@R›ķ`] d"Yv1#s 0+ gqzbVo%me?-`{"Q.R ѓ,NK|T#Er^ {t's|'C֡u ?[ raPL#AV;8r~(c~(?rC9Pr64P.Ed=rcry~(<~(EYP~(  4#?VҮңCC2vtVӪ?~Zn"O S@:vy2=-wü/7v˛u1YyÚ),@p1A![ ϙg+3-͡ ^,F΢\#vFP\\ES2w~_f-\fabN>!jc:gߔl=Es;|AB/e{'H<|%WoމǯM][o+U}x!zBa@,,*G*%/r_$=}\PK7Ӌ:|Sٔ_\X\Y]kY]Uoblhx~oខÓ#S2465<13:~(ojVA@aR("ALNlU2kr7mD+Ħ@VGqY)7!&=`ySvCy;M Pp[iț^7o>2͆e={Ӏ70oT6`Ǽ9x`Kͮ!9 ff›KͅT(E`"Lk~9IeK^u[~M{˷u$^'$^^yEvev𦧤`6o&aެ@Ǜof37[نowc{Ǜ̾ ̛O ixsVwiJP( PlJFUwKm? ۉLNV:D~ZSΒgZv؛Nˉ=]#{xjaߴӏR-<ߴ ̰{i9{iM›>벢>Rx ^Uxj7 o4+j(j&Z&F›= 톼tq>NNO7IdN'/+=M)E` ^03c/7oDYG|o#6bmiJQMb:ǮwAiҟ\cw^}A_=}&K3I'y:m`ÝgB.a?vgo"q›AIEf =bM {M|#&GN w/j[ovm9?47fBE"@3@2`"r@*ZljcjV.f}zFǸmND8\󱿸J\{Q]vr!CL`7ǯ&YVI7v7So;ݹKJwQGdgc館i΍@[򢐔2(*iVUjYvUJދ{O_/}PT,,}kCyZRPV\VԾhx7[zz7ufKgoN98:84:alx񉩉I,SS&1S`SiJP( Uhf6=ljе-nYoyg G-[E;E;v:9|Kľs_ϋFvv丧WOŵK___x盉.Aw]CR.^wExG μ!Q>-I KF+J/_,yP*Ug>O̮HzR)ϩHͩH˭ȫV( _eg=yV[^U󺎊vj:jt4t7w}& z08;4at`pᑱѱ N`i.8on>M)E`Q!ۖ㗷wt m'=~}N+?[x쳾^[Anr}Lѳ! 9vqN^ 7$4w DNQ~ .nH\b/ݒz$xM _D)ũⴠ[1EH",!S%J%? "}Pȗ)'ef?xZ/WVdVfW?)ySZSPQWXY_R𬦩-uͯZk_77t6kijj{mwﻞ޾1GKsbX$V/??Ex=R\BQY"qTw+(R(@9)H G0i`:vd4j)I^Z qС⧤>E"+ wDvr pش"@P$T*ě$ID&9D吃%[̈́N0q8ьj ]V_pB 4 <̰\R-F'3`j(GW"fˡz R$=oL|A8ԁ%t _7i;E"h F?WUe3 jLyS6st)&E"@P(E"@"oxbendstream endobj 44 0 obj<>stream xph>ٛn@HBܥ5.DB ! IH 3n`ؽ_nk:!t|=|d'2N&% 1ㄍY$!x1F#8$BO` DB8a3M"HOa 2RYTXhqZ=gEM5;c+n"BO1J 5jII014F&/5M,%Pa`22DRU\+3E)ĶQ ()&=w9lli 1LQj쳘IaI*-S.*Zp)'fBp00iBd ~?GW(Y[-FUO3aD^󫔳Su& SS:IS0ܔj2q&/3 II-}? *n #,dCSw?00U6ה4)m(w9F1&٤ H0b22q\3Uݳ1|؁U!ƒ8 !wH@+G5"r i5즁C:<5=q+W9Qѝ]7l^,b$ah?K`S9Ω;WXҳB頏H%Z4$+9g[Xu7~.N^r㐆YK~gu.?#nqD5le3C\W#g9?w =7G"@2AAȿ)cĩ 2!N;H /n;8.80z9t4SGsQ ǍzE@ǫ]# vz),rbh▪m~Ie}GhZBD0qsxAjoCzSbx8Sa >J,/%Y4K3uF鶑; *niWu_)0*Q o~gdA4+:B?qmO^轡ȥC2:+bcoo'fxᕰN^eG]ҪF<DUsm)/nʾp ^.L(^i0\xIѻdt I;E)JWq U-;U\24]ӫ#x+?KۗEm3(])ڳFĚŠ[#NO 95UK#pӶ;mg]0 !&=m_QX.%q5I^iHxi)l#/mN-}퓷!F8j!\Qj\tie5 QS56!4L= XSt+,}G>Z*VfN`}bwAUCDApZmpw:34 ;){bcz䭚i<Ќ =m3g\]c"s\bGk;GKPbEh 1,|ak /-I8 exuSۆxxiy7>Mt*~16WJmq#0~#.2vwtO,W꺦빧Xd1|ݓ.fTw&Սέ,='.?l똸ycZ&B\ê$)hBU*O TF'Y]vn)/s)˨orɣ+O.=iw||/|0sdW꾵skxǕsG.-N~6<756:zuo>+UBɂWi钾SLDfI<ψgwisix*{vL6N-MxА[SP/c{uSz#c6; u@L>Xz: 4IʾS&V>>9}g|r?9+J0+,(C"GoV?Ǐ?է?wʩn>_1쇻^“ .n1EE.}^|{Goܺ,expjgwx䧉S\z6 =mlRS=7uBmҶ c+#4횜w@s)HЄ3za#68 GLOlȣնܒ5|8hHs0!B@10%nU^ݽxg=~W?zuܚ>2ۈbׄjrZru]zUܟQ~ocjmtaIxbiҨ}^'6rQto䲞k+0pW3X_:UݷP~{.<-i?s)~::XQbg3ȹH#Fi" u׈j+­ˎXs5'hJ0lcə],=zq٫g?>|rw^|ӫ_^u]񈯱S!;ҀkbK%qe]]2Bʂ.\[~Fޱ7:[?v|H72죋CH4 ΕwOtMwH鵎*UK8I9^/CXs'ta( W.J,qn9[%8Y=rC .F06BI[yt;眘wi< A (ZgQ 2Z, 8p@T\L.} 'q(g?⿼C)Un)\R}I5bШY22_}rɳ;GN/=߷W3>2<0s 00ZFo]c#(u,(a"}|zޫwa4K̽,7u&*RjPN6 -A9-2q%' Q|mlsxg⎚U #/5V[8Xz~c/@q8q6⏞|IÏ/ZlbkS`:&5:&794[Fxy%U$]E'nv/E]TWqTIT4.h3=>~mmm75Ofξ0P)(l웶v(Ɣb򍼒U wq<~ڝTUЂ<Jhm/=6vp/?W硤6 P}jXz5vIbjG4 \ \lNsKJ(ɛ$UߩsfL Q̊Ŷ}72kz۳d$€^ Ȩ ̬KDOR_J[X>zwj.Ɉml-|U)Q&s}GRA07(O@5ֵ7o#lgPs q ح'n AgSkwY{&VUuS4,TDyE(;'G6$㐖i yX%n =*4[c119T}3:ިМPp TX_Wu_ZTKTӣ~)^wr Zu(fMZYeDͅG ٘1cR`_]xB+V.GJ|pnzyWo{vТٮ-#M|0Gq 9I؄=< } 4ܲUTOZ%JG9'ekltK.n|=˫)bfDmLi/º.m;-h#T}tFp!fPIX%#TS]>v5lETYxc橂*G,B%䖟j.kR3=;qgtUF?1%oj@H !vih H5x%QTR5t`]m*N;r!\71 x iĖ-FEbGfV&@ix;>a1o/ðC?{ sL"1MN'D"kM#azha`A`oWYU׬3rI'-d-b^_s{6ʦpʍṆUdkPĜ ɬarbs,mR2l}^R_=%]1=Onۧƈ2#?yh|ERcҏhѹ}ӫ Vg/=x4mjϯFԈӰrKm#fPiEz`UR+ tr=s4\2UO٦g`j}TҏKC7 zeu4*-L/:mpXF t=&'NY;KaT98xce潁+cwA_l46>|N?PG * ,73"!%jfx=RF 4/G&oz&UAZiz-ې꺧˚GzbBRKCAZGIWSxAi';+;JAus{^a :gTAO#0O6[}XKŝsWWٱŇwVfzOy-s! :hJP -?wgWG[>}u1F/uH'6Qܹ6m-9%shK/5%Bw f89Xl=ծH_v)9;n l}6a/=F3i0 t-ׁFN}{O޺tpëSᕣZngD敧M9C59tT=jq<#Lxw\Z1Q|i SK/n(xPz_b[x3GO*X`ΈbFC]Mۿ-ad {-1^Q/+|z"گ-CnX휼H#s=Wo@nf杀tfo?yƭcS]rੱI=3q LG%B ˻{瞠yydFڍެv ?9hy-qIrn}Cѵ02\v~-r37{—0 ">s{  SsϵE]*Kyށ%jk;0K>6Oze,y̪Ȣv-v9á'u*I!fAN FV``~Et>4NchwC^0Rܹls J)K(" 埐?БkRam| 6>o 7CmSW=s/]%׻D a5;>iUA L.$َ"&ч"˽ C,βȱm䑡C7P԰>ay#Pc GAk8XFwd[:eMq偫+[prwrE]^R.>8Wةctր omeo`Z.eu#quZGJߛlAwyT)"mNm"PvN>+Я̬qy;/ò0J([&J%L2@(=$yw^/0u?-kαɢ yucwpZxE%# c#RZˇdT(nZ p똹qS6 1 DLQ 0S,X&n]+hh4X|i 35BtnmxVePjo9n.[:[<5G=4v2qVcث9 ,\s+.N.#gI> W,°9b: VNe~s: "npk8"xdS x< 86.v !YC0uL0,pKҷ'Ciaf(NPۧgQ=2#ӷ{WJ/ĄM{{&+.gT$T%T&qg$ƛ{D|̜vr{Iʨ*Zn(5,k1Vj C s[C7s*Ee܌FC7ؽ 2SȾ$`I8<3O OD.VaٟKCym0P(;0}Άгosݷ ]_50_~gׇN"V/ m22+R.fV6O5JsLӱ(p94r Hj9'>#W%ԩqq8`)VgF}諾{aEy}k~ \HGD&("BFY1SP-2m'~qAETc҇=@w@ϊ,߼0<|&WuOO7.V dbF{IRGL?e[[p!)$$((8;.?)mU+z\A2!B،i燐K;N*W1o*Ja8\RPu鴪Sz6{kcT@d _KN7ڜsɧ3SۧtqDa9`&Tac7J;˺nwzy`KUtmumc(x]GRႦyuM[kZVyDdq{E1zKl`e_Ղ'=Q8mL:&T[K`ē:xŎ*hKk95@q4o!NccF:/,2O7 S 1JyPaF4_quVw._OM6`K+E#9 =5gې+kȭmV "cn?/<Tubaa[s0t3.knK4鏼Ws.bs2H΅QHơ+g2k{3kУVٞV֊@';:,di`Rl*x4I(=RHi= 9mSy= wDk٪e`cfP|"t{cgbJqч(q1t-qi^9kNX".FF0LѲ+lv, #!?E\$ 3RNEhnEbj932`'^ݝVՕRс!ҖĒ.5B:4< 8^PgKhshfSgtGnMEdqTm;aE*&L_sd/\IE=cxv%\22@nSXY2hj[P-mcCJ]G m 4w<Σq.DR 3O7 e6!6 ~I/[smh2?U\{]҇ 4Aw `cwkZ& JSTZR%cO H AmTCNJQr;hɥK6QU]ԣ Fi\`beo|ikF3 5y,Q"rsֆfU1C!} h7Qu"{f 7s  Vlcn|蟷|Qwa[>c㯷/ Ӭ֞TO*niu]4Ѵ,Vߎv2MFI+?CDvI+YwZ[JZ[A`Pc%g/CcJڢ[.G^ƌv-@fׅdeT) 77;Ur ж~q`JSTA3N*FMVC_l}iy}[ 9/6񣃅O9>]O:?mFރg(ƎW}YLE Y@Fga푟`&M1f= mjCY˂f\j^,J g ˿ ڡ9d'$>S!UXX]9h]G&R:1ffϨD=T EQ? f/Tȭ_|Cn[xn )rℶcks7ίn|1ܷ'ꨆf3Oj|Do~Kc856 )2#uISаԞiSM?nٮf0)_VCDм&HPy t2GN*8'fܢs]"b18S!B/1j59h @km&!L9A6,{~8/6jFC7(>0dkL {Ez0653OV Nj.a;?Nn')wZim~6u\q.k?8IXvn=3 !_c{3YlCXz:FJf ׿Y~`A⻥y#7@+~Ӈg F7H _xb{jYK% j pwTv"Q7 iXEVc*}Dc 5òC2mS0 yFBƁ5 XC7;#}#4m$:?lG voȪ$&1)MD~PFwB1`*z~!4 ,0nG8 mg3WPl Ն%VUN !"[/q|ǟ6]1 #lE? 87STHj:mae =tܪFkk ;<`jN G 2EO5?}mk;uk6(G-D6slزc5ۥ8fkyr.5OA9 YíO` !5B 7BT,qz6(Vg֢i;GײO<@?˭OEō§dfMn!L."4tkjkZ6ѬGvG0(P(j%.! 6p?:ü|g8ے =GP1\,xBw9NN()=KePhq:`ݬKE%D%6Pxlظc8Ƿ" sX'̱^%,YQcM!k7K}d#'8v-DZ^N%"\jlС@5_ ,6BuQ4v(9IMv' g*gۉh)-LXg"FUrҷ Dwv +d647 pIXΒ_CQWbhzc2]¿ᗛ?[ѷX<跮mq>Ydz0zY4t1Oӷl;f QD>,@E,3X1f4ڭ^s>?zj qlXϷvuoewo^C8cfn8f|cײd.y {IߧB ðC9)Dhtdf!j*V.~N0X؜4)eyƞSIQ",8E&xw!Hn 62nߺo[aթa)tM0-m _Q?]/IwVFM\V ^)rA]cΫ׉a%IOq}m6_Hp$Alz`*-? No!~#57rl!Wk6*%oOLۤ8vy'`שw+|G}S]2lN7& ؑ>{qLROemW٣@$.e%,EM Rw4p43q 8hꚻZFSY0ԘֈelUiMC+9ǔ |]@7Ӎ\|r#4F] pw֒gHXex°ˆ\{Mzp+:. &wR)~ R-a)haa±]ai1l-AF$a96|-[v|'uc7t\caq^ ?NY .@gAI+# W$`n$0Kd >egAj4fXRMH.cMRA-#ȃ mѝ0*1:&`lٚ t֑E,K=W-~\SE"y6%pwl! nl`iPlt:C'IRw/j#$R%^p47ڗdNY 3"9u;dRBEYV!ֻXzoP,fwXwu` MT{A GM ְ^6lCqriXjDx'ư,`.i6xahݏOǗeUq@@FHDNUWSrTwC9\i G-UpԨ^54̚59Ję~AZo~$Og?𥈴:Qcfb'w$UڊG+n a'=~Fi))"ƈc_Il$l5.$;MDى< ԙ&,h:RQ\%Fz)QhO!m|PV[+ϱ׋q|'wX/Ȃ bDBBm9 > 7?[m_fXuΈ āwZevTu^Se=ǩ;r2P(Hݫ nKKC'l7B1K ~;d̹diGu@bk8F t&X}#G KG{:&1xLQGȩ2gNk5@sEdI`F87 T "Ҫ-P2n)gQpH1"W(YS~EP^D  p|u58ֱd(I(5l |߅/K >Z_h1"p!~6&ۏ\c;O߽4T]z8+PqH(X#qzsonK?Z +}=0#Fi XܑjW4=•!X ǹ}ێSOQN[BtN@̦L@MJ+\=^b5*!a4aN5:qE RHCP < gfhIqͭϬ;HxdN8=bp^z6^[IoD?Vb(Ț86 !ԇI&6hDYW{cAv+o}M_fi$TS|Te%,Y˞^Xp"U%y08tf*,6P6NZhpjcg]foy}&pf QBx_$IŽ`Q^0]uxOE [_ʴtsE]skpl֭#v!uQy%5I\O(}]$d5M4/un|pI}jBHq8q|_ 8?u&(7"lF`YdL@Y@ ؇قo2 &&˖G9 J}(y쵐 A8 pq7{a_]ĉ%'z2vNF3*R}zQQdI C{&ڹaFJUH!XYdWvGz/"@,m&/ίd!-4HZ<~m`==A9]3TKgXr(;M]?W;ةPU wE-*~VQ-[wÅG=nKp<|?O m^o.]/vubpODn DolyGwx}gk[6|K?81͌/Æjvt`u@4=  ۾;CWQ ^bcPe%״'Uteo۟h7]*#y)(~`/lR iik1rQ;b㥙}GYؤdtݶʶXGJqnӎ#Z'aQyl^B<&n]v\؅ǚ?w_};_^1 6^ɪޑӁg?{'udmZpOevk>44[Zuj72ѻ\Z#yEe<yw)gWNMcj#U^YѰqaI4Rݗ\ݿdGE=!F/(Ce PI|(_ؚ@] 2DjKVlbYG۠,஄CNY&8p= 0quQn#v_aͦV4 i;;\߂%Ǯ[+6 :8?wΦoG<6}έyAt Or8yMKRykƦA܏&'+'bOJESZeuxܕTڐR֜Vgu~!imwچGbhς-ԇPOEF-5m#"]K2گ슮i:'Š, X >b`KX-s" #L[c`mL{A5PC،={U\o>pγZuΧ:}ʭVmy~i00=ΧFr[7v0uNfv0/y1幬8wq*'2̨;Eqb,r4>8vJ,;x*wϩԚkؿ9/ȑ ]r#@|=Fn.h wPWEa~؈l}5X윳Q80^+t7 g".+Y/pgݶue$qT^@9Dj`k}+04znqi뺊;_;|>1p6ɚ='r\d棧+3ֵ:S>>`kPf/ 7r~rrp%HAK-.ơmKw>S`;/z7P|Y"JxL4/) ,y7P$k+ȼ9y˙ Tg$i셅EPI.*Ch jd&4mp_ȷM<+iج%58qyXGU̸V, FasEgkb* %1CXJ4 1ᶈn\BDymdUS2X#:LØyG´b!Ṿ<&(#E6UXC^#*i[C~`0/DOh4KqSi_-A{T I\&Sz M<-uPmQ',B.ieDe#c$[`!; eFg!-#-פjGԽRA 5{#0y9knLLEΔ;ܖrb(kZJAŠl&jxǂ򫨋(~ :[]Wv^[gIq䵭YMg0=7 _-ͥg ha7⟊/>XC|ZM"Ef:L:KYnlj9׭lvPU.3)#$&VM-llQu1|/eYQG>FqŞ =?6&,؆uyӡu_\|(gr/c 1Q{_2w]Į!tp|J˅ES % :&-icki,Z:V΢$cT蠘P tWkAYnEСXn87@ÜXygE%E;Wوi=jہ[(l""OLj2u7PK%EOA>48C "6¨dQO"m,_z_P ˫M-ThM8W(윶Zq' Jb= zuKAh\v %X ! L۱/@G$I_!V쌍dGΥHkmX4e,hbm~5 |,HɼL10mPvٗeIB;Sόu,dc=_1ta˨XFa(0¡^C9n>¨aБb'emG)ҞhRi Er{~1+hMSÐcl>ܖn#B mms1&Ċ;x @|:e#>l,/X箟lWw{1xP ̩LҁHaT@PR9m\*j_)lcVPq1b!>XIk^ "Oj At*|,9#љNA2!ҞP5 `51r{3^D{13qQV*opgϥU O}5^P(W6I̤aDV[t*W m2:sY]7IKZ/|8C\ϢXA},A œR,>"Pib7I+kז+CnVYbԎ3@J/\mef(OɸfH'մ;H4J׶E.t!*٩V"*U u̕ت >4@ӴrjO`O.G*<}qsc@8 Rka(W SU#9 6n`DYrdw'6/B=ƎwfH2f`r6 BO"霴@0,pw@ыJ*N ծsu2Ĝ!hz+#P&BS ~ҠM x9\Fgũlj$f43eҤڹuG^?EG  ! (0>@AZȢ.E Mn*F#-7pk;*:l bRy8^=$}YeX*J1IzQؾ6X4*QՂ]tjӉ<7Lg<:L<1$47MT^l yO'|՟# Pﵬsl~0C DGg.b-`r3p[4A,"L-Y0k8:p'43fiYB 3OU9 xLź-bό'Wphnh 7W>'۹Mg8TƷ_鿖 u翖@-Ӝ5d nS1d)6źq [=߭q@kƢ @i%U#jZљKZ.Mm]}cnS:}Oܰ,@a wݳn`-]Rk#~ct/ĩ &'1C͞J0Va]ODʂpS6STy ds!sFsbMmӥ>qdův9s,^S|r#*r;)kĭ{ vmſ]^+Wbj׼q.'@'VYj*Aӽ7>Yח~±kDOu+r,-wp76"$wzOg߭x7N Pi734K}:E/[iߞ-#,}mJ6IXw,rU~D_RHqvc$NEGVgn#n]dgz:k !4z( @Gք[dY9GГcpb}3ʎ+ӶI+~>쏐't8rN.ZzZ:+/ػ9vTD"y{aֺݴ"n{z}3բЍBINo"wu:[@X3voV~nwwmff]ltၵf[hm,v/tÐ ul@횖 }oŊ[bt{37.vܔGhsW5 _wx+DojT;e>stream xsv1Xb`8L G10  endstream endobj 46 0 obj<]/Filter/FlateDecode/Width 28/Height 11/BitsPerComponent 2/Length 76 >>stream x[ Z5uՒLPaK$Eݖ @I"$S0ԑ-liVch۪USCW  xendstream endobj 47 0 obj<]/Filter/FlateDecode/Width 715/Height 279/BitsPerComponent 4/Length 5191 >>stream x흽nJGr` ,m|- Nҗ 's|_tWW7 t10LP /4h~k .pNy{^v{أSރuý Ge=p/;=Q{)A`:Ny{^v{أSރuý Ge=p/;=Q{)A`:Zߏgf>.wq+&?~/Rr7Rn[l՟r5DVl96ʭ֌sMjjH٪OsΨr5ehU(7[3P3lnMl՟nU vk2e^o9ke`V5P6X([0ObMl՟kުy >ߞs)h>#e\V96% |N9M)o5_SylSrp׺ ޳TOnRo9K&uiRf_Y@䚷DB5E ~ˤ Q&=Fu}=,Y(%"DsiQ՟k*#e(eLl5}=,Y(snEe)`2ꃗ9dԢ?'׼UN9MN989&8%8rNoӮc)?Sރue ^0)lca'c2_ԓ;Ħ` 6X@M,Fw2n2I΋%DireI(YSQE9+ty?M7D7)dSћr~d ('7e β3t3Ppu:<ߴyY|Y8-aPĦr2OaG6 +_D9F#e˙.D/ ..X2B~3PWRe'ߧwz"ELfD y6@.68*`WIZe9PҲ=m^1 E 63sPFH?"HQU?DqrG#BW/ H~B!e-@UǮ*I)P(35m8N9& (RFa\4N#2v4Ҏ)#  jmk#"ј!Aw0UcvVDtx/k+ey:UenM1Ҁ5k QVz)eZEFʌ9N7#~|}]7gW1-8eYqL?)'9Pg%_X)cb 0Ve{z~aOP9VʈN0LYrF- %hW7x /p{|q9CB^I=NRF3)r$ysʀ𢣑6}_`p5DbMb f@B"/O Tt5VD |>|Kre9AL{I?8K8fSK|L<k e1 ,Gó $ NG-x(/)'cUm>B[͔9PC+kQJУV&/e< 9 ;GqaxVF,t%!;S˴8VB 4fp(RCH<2 p#ʉmGy9|JBOPv+K;!N9j㛲ڔ)>.72ƧU?B7M-k. "YbHpRpJ$9wc>*e9b&S5q@ ,T]m[rm2ckG1krq)~f'^/(KK0)k22tRTPP聽L1kz0V],Gy֩.rLp֝fQ B٪*uQ~bIu2j};\(Jyn1'fM2oCeaD͞fpBM2$} MjG uYfU1+j%) ^jA3y9.LRe`\2Sw\՟2k5E ˜*1eN Pjng(-2kuƽ>!A$[A?hƠA2\R^xS?]IXrWR(52}ʣǺrro 9i(=irߥX_ǀ.B&RU{PΨi#q9Q{q#`ro2.ҥ%tRT6a)69_Z47Oz78ED_lsQܜHY<'jdͤOW*V8_*vIUTW8$p/ZPKl_wA`kZEo̷".NV28Z,RmꋖD8:N˒Z׆ؿ~eŦFlܩu*p@cR"R9cp%ߐ4RFZgN9Tw+Đ*/~SV2 E_4F^2(HRƇhm2xŇ:Bl),;J?@YE;o ,;MB~t|dʍO}#5S_22*8l:`~x]f^7{ ݈ ƼwF&v`IxX 7Seb?6vkU/1XrWPBǦnMl<2>\f Z)I ^_FҾ8D٪[} %w|QPŚH٪!e4,O<%xW˿!qlկJye> ^F4`>xGwU_4/ORR NY.Ura[Mr2ɽ\VzӪ/ƽ,ƭ.bś/D}e'qq/Xx~=i\Rޤ'0 |5iamq/3V?K 45N씛hey hf<iznsqXJOгlzB-핀vN-a2H/N`,/=A1Q^02H~R3!?ɁC "$\R5ZaeSXaǫE885$;NcZ&)賔H (5Kʸ_Hb[z)Kj#dgFm3R@51Qb 5)׬^D%J32[rN96Y0rf3媕r2s͓[T G{^V|iwVv/ ѓ527j,\?)ƧU {{Uu8ec)oV)+POaSbOC.cs/IZ,^ѭmMʧw\թ|<8Fס=USQNkOW<wMgZigS8$PA}֫TP%uSYNy'SOf:12<4deGGiG绗G |3d deϊf@;Y+ gWg p+@]SE)qvNy U8YD+ gWg p+@]SE)qvNy\lLJr|b~o r\R8S5MNyHlܩ]̪S:4S^pe](s_Fc /׾wY)W(x)gCqo=u eNy-'e|H^^3R^:2cջ ^_FveDd_]]/Filter/FlateDecode/Width 498/Height 239/BitsPerComponent 1/Length 1610 >>stream x훿E-8GԒiH2 !DpV -d֧ .BwvWTa<%kg~_UuǁC^0[o(P-*i)qwkw޴*N9 F;>8|R_ϫ׽}?ubmU4%~b|}cx;.Z8}aU>\4o _YvK;PR/NqCU4CR+n ~tA/x Cu/k&e:x+>^O'm]_0.'_{-.xG m7g]=*(棴ץkݤga.^W-iz&eb7b/>iyqO.T-QLsҭ'^{5 !7>xz<\A <^֗(Gn'=sgEu])ž~{ymӏ3d:QoG%]s8t8Cl{lۏ}=q6^}=f1>+ltyF"8C6NO1_>\4o 8E8j .ք=6lnL,onW$9qGeAk|:۸zqUwq5=rݐg=\wnYau+gj}(G&NhK+=b` K݃, ޭ|.FeW:si6.pk[y%yX ^2ʑ5dvpI,6O<}Lg#O_2[<.≧/)^dwC >Gy#?Ex/ܲJ#~γi6o\%UǨbܞRҽ\!Hs+.y!HW-gv ώ;8!_)}D0/ Y!8a nDhXg+!H76jd4u-.wߺxCHendstream endobj 49 0 obj<]/Filter/FlateDecode/Width 498/Height 239/BitsPerComponent 1/Length 1498 >>stream x훿nG P02 )\461 "J)]Rpa@J> cD(|svn$AB&g~..pu "iξ#/2m.m rp9TÅ#jG1(k_ EྋCYl+WL6X)߇8\< 3:>L~ȻoQmfc~Cv͗C^ϧtGm e9T{4gq]CϮ[DZ#& ' 3S硱J%>7-'-';酓@-cm\r;eu2&/MKg?u'.)QU[id^|q}vR \m&rj/qV_s 2u\Mi&vCZ8orJ$樜=LdW;mTJ+Ti_JPx/F%Nέ؟^,bu&q^rG4~E.x);e9ov)˼@aryYeh9D} eJz36FN8Y< Ջ9BivxVR_.m8Gu7¥xK.e9pR''W'.ށU0>stream x0 EC%҉[ȍ#eA9xۓ rZN[I<4jVǚTbKLx_B>k!Ǝ|D^_jւD&ieK#y,ݵey`.?a%s_XgfeH>w4{X{|u//OZ'U|˄(5{޽_55;ߧAs}|jy);+hM+p6{6W!CKں`͚G1em /OMx"^1? /O$+gcx|쩼^BJwendstream endobj 51 0 obj<]/Filter/FlateDecode/Width 604/Height 183/BitsPerComponent 1/Length 322 >>stream x0 EC%҉[ȍ#eA9xۓ rZN[I<4jVǚTbKLx_B>k!Ǝ|D^_jւD&ieK#y,ݵey`.?a%s_XgfeH>w4{X{|u//OZ'U|˄(5{޽_55;ߧAs}|jy);+hM+p6{6W!CKں`͚G1em /OMx"^1? /O$+gcx|쩼^BJwendstream endobj 52 0 obj<>stream x 0 E#1, `H6]/Filter/FlateDecode/Width 628/Height 183/BitsPerComponent 1/Length 322 >>stream x 0 E#1, `H6>stream x풱 0E 5kCقJfPP2)03P8nY~,ۘ[ ݝOZA+Kg=-g"fveWWG9U5#'ʇ1MpgndFXP^4,tHv@Ҁd@H'````````endstream endobj 55 0 obj<]/Filter/FlateDecode/Width 270/Height 166/BitsPerComponent 1/Length 263 >>stream xPWo@3֣B5 KG(BS;z#ݽ?l!@s_w©Ay7V4Qendstream endobj 56 0 obj<>stream xAkAŞA9ЛKm)5W=sPד$͓vEi"cOdwM#%F)sfݝ@7{oy _x\&E3x 5=^#?pp4pJb91x78j+25#[kwe{Hu=2wއN޵j_{vBll~M6UִoijGvSm׳Qw Pf?[Ϻ՗Wϗ=FU9i Z =g4eYh&͈4`Á@h 4@h 4@h 4>_!K>V̏2P-/gC>gtU?Ά0HeUgT S](hݳ9@tӥY֜EA PLs5:׍z;9>C_E }'`e;<ڄ 'G̃FXħdLšhQoOK_"R۽G Zi{ɮ>Ȩ%"2NBZB"--멜կBgM;&kendstream endobj 57 0 obj<]/Filter/FlateDecode/Width 338/Height 228/BitsPerComponent 1/Length 774 >>stream xkA  zC^jKz衞B(:{D"9zݢ4"cOvM#P#u9Lf0A!dޛ헗ow`YQ 49 c4  { !L#>Qpn4^;p52A9k9odhowj٦6]BV|(k~`vMo+F9 j/B]+87/;w_>=MVe> XFaYbB|C|aCaꈏ(uYL}Nz|0#CdC M*r@9P(:b7DfDU:Rφr@9P(Lrc(Yk4@^n--pYpv^؅4zzݴ/TqyAZ_yT3l\pZ휽i/U-~)OБ؀z9endstream endobj 58 0 obj<>stream x=K@/ -&.E"CۡbHqc>nBTƀ/"tOr{̋rs=ks)Gv[JMxcA rULŽe#D'iЖ.Q4@h 4@h 4@c Aendstream endobj 59 0 obj<]/Filter/FlateDecode/Width 337/Height 168/BitsPerComponent 1/Length 787 >>stream x혿kA/`'&K; F--DR(26B8wXR b!(c=f7^r"9؛Oo|vrD[yHzRHŸ>QoŃDbU: g2$Gu 3hBԮuDa'LtO9s~xᇏ3OBky*@*[|#=z3ܗ%F&rFϯn%mk4 aGgh3>l Tsqm[-λI4/?}VYJFTuHwvJ;fG"h(>U`|F2 |E,ct|A  Dłgvf0 :?N@b \f rh)f!kʼnjWA)*ւf,5@2ÂđAy*fڢ1)9iGAUxQhZ@*:Pbo+*1Vq(1R1GjFU/FUT+9}r-+r2[H@@G H =fo_TU$jQ;}I*cOвk[  yWKl?`kw&aqmBW7ӯlme,xA6ڼY:@ͨSH Y퓫B:W6 cUn&~ s1jT 'uMؓGrն<<`WmQ0LmvdٿX S.VnwQ?."endstream endobj 60 0 obj<>stream x1KPǭЭPC~?NbDC "]R:T_7)󒜗'\tݏ# IEДa܍ *:v'!8T"| }0USV\U1TՏocT *8-C_oV~5:wG pqA.E]n(n%] ]uF3zZ?3Ϧ.e·#!unVݳA/.kfo<ےZrN~JGbP.\魪@IX aƼ&wB毨NILؚoB'S%_?5ȶ2@ d 2@ d 2@_ũendstream endobj 61 0 obj<]/Filter/FlateDecode/Width 337/Height 168/BitsPerComponent 1/Length 1020 >>stream x혱kq[HBtȟPp))Rl(&H.J) Jpn(W)r/qZz˻O^w&Dŷ #~OQ^/rִ܁ ,m.@]0Z*!6ҁuP%;@N` tNz@(?aBY+Z{6'dU15cVi 4 pRE8D}a;?w Lä8gࣵf6Eھo _ k5^[gUڶ,kKCSV uQUQІ-X(+ڂ_43GǎVdUZnmQdfEHЗHkkuk#h6^\u )RQqendstream endobj 62 0 obj<>stream x10Q ]/Filter/FlateDecode/Width 289/Height 125/BitsPerComponent 4/Length 529 >>stream x]r i B/b1$MJxGI lގs;anG@K>stream x}Ti5Nָ q$x! ,HB\'=@;XU{{{?:T]]z= !0A7G  lM>4LNC<r!^<^0>c b.9 b.1y!x< 9@ l5q 9<ǢX,7 V-X!oΗ-jc3L\8y0'.. wpOuHd`<]w<DǰKPo7?׍O"4FB7BZ r NH!ۃ& QL1a pAfL9OⲆ?4 hi DyA =4BehPÁăȣ1$ %WZUנfd?#hCHDOb!#t0p`ߧ!# !#A!4xTaiH'&,O3' dcp]̞&?=0x, 7 " ^@S%682 (5pya_@ rcI3Aaa?㥿?oO;p;4O(+7jŏc7P]Af < IX^:Ca}vW7>dCgà s C̡A@`TfzAnP3o1CrXs|v\7DB #83jc  B(h@7pt?sߋb 65H}TK!&$BGM?{9 # I@C<07uCX<6a{9ޞֶ^}yֺ mVbpL.1@g]]S- ] m-M--M]m^>"j@zFm1: 4oę* 0&$9diD~:H޿s߉5}Cl mHC 6chC jG\ILz.m0 a0}xv]^g8<&snonwnv0uJ[Mv~|PLgt0X=L0=&vz]]S5>yӆ/[kZۙݝ}ށ~@Ib;ÅP%&~W+4x4r XNzFA;^ȽGbbx'G'GMrwqV Z$ހ cnbĒ ̈4>/A-br{X]uu/veY7Jng9Pp`ٽǟ]iKCǚo>r^ͭooy~ËT{㛛u:>7C#TǴ ,߾*g~5? P@3$Ȑ<_ ?ηh3n'푿s߅䑏Y;ׁ@ ŷc3R#LAxMg {Ggwvvw6~}|Ņ×fIZ蘼!ygU#iqsy[='>{Ӈo{֛+_=U:lnʄʞ=8ŗfzGXRX!QZ9|RԌD}lW| g8 |tr `TH4PN?\!؀$&iMw  ^Y A|Q!$Hxˈ`º83&w4y .慔O^b9O/iRhx~<\'+M\wD3n\}ߒpP3a@$@C H {5@œIz/%؊?ATH@v1zYΎ/ou귲ؓ1KUϙ.gp/JHBMi]jJJZsœ$o|icw[@0b@B xuۘvMoev447t6}kzc}{]cw3' z;&,B).xwȖtr]oyɼS ++.̝"|Q*N˙$''?:Ԭx]RFY ]?C=oJSO,'m&GgFzɃkj477tuL&͢dL J@0r>J߆PVd}CcRg`mm <~6Cg;휮VfS}ǧo~yGf[  K,Vj7Ʒ1j oٜnfOGgsc/O?xP^S̓n~pacO- msz Pwyq67ȣu39-||VIĕe|N5;L"óEf U?՚g\w|5Y`w56n?Zk-onz U͔/(&oͿĄUyq뗷/6t~iiuuӛY+־SD[UX_<3+ 8\ea[>lAj d& r=ÌVFǖgz^`xΚ&V7q@]A/89=7<yJߵ\}??qxXޞֺw o>wW^_,K3(spd Rޒ1n.⩾ʻ]BhV(SJq5C6S\K+MO0ϛA]YFu^?MͧMk߽kzzVS+ gơ|pހ1jL`p𣀷`6712kkhQN"Cx`厄A~V7ӷSZAڽ/Op\=i𡽱`hؑ3C͟ BH7_=7W Z+.gnFyEO~>~QW7u w.]:Q3S&]$S`wB!V("i( #SFA[4F5V(JIN*$S>E1ob8M'=X:i#)gJ=q߼o|q6?SYwցf?Tbxd˔[2 \FPW>yzvg{:II.+ r!__:K^־3}ҖϪصRnUnMG}SoGa Nkʿ80 kX\ȅ T/~{}vQմ_oDs~l|j-Ϩ]z*e祢+ ~=}Sn_?Լz/>{/;uws"zԭkT9Ǥt龙F L.0>6 ÓL2*YkXRTU +ffdJfzgx揗/_:2o6mnuKNfRQxp/wTvO}yu~knh8@ d sY=Hlh\ͧ_?ՋǏ)/p؛'m[X d"J  ymo}s~Uv5'e1a*_'Ok|Igr8 .R!0ϒ=cWuSuCI雧@hNf]muobzQ2F{ďyۉ񦤍v q vWbgҚiU^;Yq;Nݾ~ޕO}Iz%Y'cN)&fηSmQF԰޲]mB4VUv) C F;V>Ϗ`Y,Q@Dx*9vG nC* bG=JҢylYVrWX4YU}>w{<'^m]ua5C $-?חN>|aFQTP{c#=~^~jljieO 3WӈI}ˏ|x=O=w*W6f,QA0^ 6?gLmFh$1[x́jq.bF(~:p) !lu86:c۫5^?8z{bt֪qpreeIuMRJ񷗏jvzUĺGS%\*ɸZ#-bO';zYq vbR6(P-Y4L'xC5Ѫq"h(ݚ(^_0P T$&j'h+o-g)k!nȿ~G?ɢTB.];(C7^qLJV jvKUX[4676upޡFp7KWE1;vWԂ)OΝ|v/>7}iCIofֵգW=T}@$ ҧ[ƸR,vP#ljz 3=*v9vU^ܺ͛ϵ _dpY 6p)8be#XC7H~W9„C|`lB?ldIy*vJ@t&hqdet*tO2>2Ÿr~&>_2_ݲ e }tܩYNJI62&bFDrryv:Efپ&U_^-?.=^֞'O?3^V>Lxs׼_y_{v!v/4%go|݇ׯ?y-г=ǗܬH?r'd*ۨ$Y+(GS}LtRЉ_Jso=_ഷta3!D -A ;%L` (t bSv t5BlD6ޯ3}@g dHA@!pE=~^/D@z>FU#@i14@4rTN~;DNDc쿆QnU Iob!B|~#WFo>8mbtHJEI(6F4n[mmP5 ErNFvfdi6QzTQp4<1Bq|i4T{4$x{X{GqX#H](=h]0 `%,ڡ"tbEh Zڋ<ڪ eYKTP|(F:HXA|BQ4G-TP!juK\8WCݻֺ5_>jʸSQ f[cul4j'eU+Rn9t{[OxxsNM 9觉sr'x)GͨM[,4c/ݾ:#ʡ窞8E svv7Pl\_R@~AM س|*O|2KJ.9'o*_BWrj, 1KFN^nn&rqJYJ ? 2nl}!3#MpN2]=]ݭ Mk?߮=uZI-;gXZBB_UHn~ʭߎݺvS9vrGj?W-ʙ*AGSK8`9WJow@ʸu ٻo\S4sdK\XeX:丩%9*Ƹ(Ǐ tS Ջc䢠թ;oTfto7U)cMIVM)Tƕ~{ћ/Z:ZZm 9lY4 sHϠQF32m€N֒s\f-޲!QSxt~#4"1$XVozrcH3[ذS#id:aИ@F t!O_1NUCClV+Kǧo_{zĽ/=KvԨs"֟ ϶iV1øbadÒ +`ˁ&个Z讼ׅg/k/ABRFFƱ&d T {t{j:h;@iZI.* N1vrѶraҁ[4z5E   HȄKIJҗ 5Jut0vMuTUUz亩帩M2əd1(yYdP^!Sݶ*f7T:h3No=ܦlŦGV.4.o= UqLv y&.RӜ5VȻ|k }- ܵ]%*E4"k;ͽ69VV*6*Yv**N*T\C`s6-( YW?qב󕹿|p__ mu qgAZ/cR/wP_H@5$搽SH -#8*~xݦΰ0!-7W]3B+y<@H$_fb7;'Ap15̿C f;p!7,&ZɁƮ:_ęC;+"W+_fb%\IBm:Uؤ6sV@jJ:9IG =!Z Ekh*TEBRGѺ L)121Rqr,UMUIQ3 2 ciWuRSF!:l+^]tUhN# SP+4p0CPJBrzM \O\O= Ҝ4mbUA3nKST-F<)@*0GMBdR#..۝LWR)(Ȣ2h h=!Ṯeh2byERh(AW Зܥ/KO(\?L f1"Mb(VE)i+Rc bC$v[)٩3oiid{K,]scVN,aÅ w?}~Q3Hg ؃ҞT5YdS3Ru!WcF@f$%H0IԯFH!%`"cAr$ *@܀Hs5e@#kcްApĎv7%l7}@@'9؄kHjgWϟK_;#zmZ =|ʗM=f5ӎ,E+`R2 ofZFqDIvElKl ,܌z?׬da~NFjt@ QB;)(@o@`pDdtlTvuMJB`,F @NAt@3ɇ"4@0h!"~BMh+(PCPu`T[L;7l!c P+j^qava-wWiGή^ Ul&Ov5f4pNJ~^I%~Gf;^zbIx()sdI$ FZmD 1ʒ *E˅R$imӒڪ)|q4OI#wa&|N1Ro_]z/:Zw$+kAv$B`7Ph/Hp_ `,Y pfLc| 8 5`"zo~xsH zŃSdtӈD2WxGgj"^$@?yEb&  l\4 č8p\(` $օlHшCܪÄ԰iDZ~jWZ7v6v{1= &؀0POeM^fu1ؽL.y MF<@2'@>8퀟-{'\ .h 'EZcB/b/R?CSiSmNL;0ɶϪۢdxՓj-M,S(e͗f-P@`Xt*L4wj*h닄GJW$V)D3p@`ǃy")rsd݅DSٹflvs/7y/֦6 Jm@'ӈ4tqg - pP>gA,зDL9= tH#d Џ" ,! A5Ѕ4ET4һ[z{DꛚkZ[ &G^چo--<~wnCGw||K͇\)P3շM$hc݌pKcʃ, B(x#[夈X?3pʑa,U䤒b'"9롐.&"*S, f+b+bb0l!f!’b&b)n#`&Ǘd#f$f,goۚi& YKff$YK[$$d3ܔhVr-⬨)4DcC-l7PiUNMqEj*EU0^"-HZ+-&kD3Q Vت)jj%b%h.y8:p ijVG87wQµĶ!%%k o"jISvP̴v@h{\s).4[ttn#~DK$D+3d+t[dsh"(J &XHCX?B,&HIt^d\;9O%<3 3uvj+joIUi>EfEn>Ucuo7_|]S1zY=D$%B 6 /E"9 8~b r ɣCOT@W7d9P18>mǷCtJlgBz&>blzoPe6{ZA˻5/?Uym)Sg?!qI^YK~+-i^ڳٱ2Om_Q/~YN 5A jBǛ,=ӯAwcU4^?ys=^s=N 2pd A*#˷x@]x}t^wg+I9ilm閇}9˃dc!M/V9P2H ,K\;jR 87M0IKWLqP(3K[x\0xf\dDnc)p$@Bo~dIF~9^&9fyV{hŞN|&[N+O?K7Im|lFJ|D!~0e.ff%$%Q(N/^o<X&JEi(\N̍rj ^j4*}5׆щFfa|d:@GW'U%J*X4PԠpceB,㌅<4+,{% vC`%boedcڟmav-5%B$q"0|'`O2h*4&̰XC`T)&j_N^{w^?`ك˩Ǣ&ޗ`{Gwxb7ttvu{M;*a tt4wt}zCFY1oV[EI.Gvk`IEEYQNzJ5L*@ B4Q.SdUmAdQh7Cj/j/ÞJ^G}OMR?;U렷 ĝ+)fxf1̫42!0QjM M( 8]"Z+6m(DY$ZG:X1\)B4A?ޔ.QFϏ|8RvA b^+g ?&@>" g@[atw7gCz,YLxe%=ޡC(Be7.$'3Ä`Ӌ78QaN/`ǝNOo>rׯk=hyUsm-u7~hy[%ٻKN$%L2[E.VBdB!~r~4_ap@mWNVYpv.CիԎ)=6^ S L?<AOFi؁Jʎ*Kl5P 4fib ?z]zޖڮVhFomf˽M/Ѓ: 2Zm-Vh<bwmN!Eoif44~z˛ۗfg,dD}4ڠ%`L߂FqbұV* =0SH X[$7 WȉV+ٽQUA]/w~n{o_<{G*?DՃSOϟtJ׫nj/{?~ W@]_ __BO)Jk'i~XC+0]"l"U6c Ŝ鶧6ͬXW̷to VO^@ =Rfڥ̰Nn>:sMTDoj\\o $G+Ř&[kfeiyd}hM^7,GdkJ|h 48sCA(ȍ0 ˤ7A\`q!7 宴괸/ou5|w ^4F(,[,%(P]y&~xDE·Fm 2Q 8{84Z|j:'jV*z)y)Q mGScaT>g4cL3JbZf~h$Q^QU }^e>Z~:fYg{dɦ% } /BMsVKtPb%(YJULb6>Tn͵AN_A$DM,JS,F_:[2yD R;lw$x AبvF*D*G(l* ʣMڂAq`x94JE{ ɷIҗK3)u0`[+chTjcxQ+5ʽ`6phJೊ6? CvDD)ezseG˶}$nIڭސw6i;iyһ#yos)xseU=s˼pּUφ~~fn'=-hJﵑ뤘 l5h.T Sy\>^T;놉~9"CgO̟dn=_ / 4wGK][5p,@zrlUV/H\.8GyL*@_QHSJSS"1O[Wt&;7M .n? xKB>vN?A1i a(A [ ,H4"#J!O}}]6g/޼gָqiz:)F2ɺRiJ*/s`^lL..|OԪ,9D[@'Ҝael![C:R5iZ:n=*xVzֺo[Oα:|i&'ӯj^q~6+ FKpO`G|ĜPƖDt׬Fghv(mo`2¡&B(X 2gB4%#c d$DIA:(MaqU^GN9:UzڧhI==zaf]CpF#5Ri eef9qP}-DŃEH(Tt$i2 ",bDuQt9udf0k%*zIg;p]"%|~Z'$CBh'E(X?"K?m5d^GB'B'+p7ۃ)2r~OU0TifkC=9SLUϕ#)X^0N #Tv+l6PlZL QV? Ij0BCAR1_Pw?PR?|r~U"+l*0 lJoWި%U0Yg|l 5ZRK~Y,sT2U*A gj2gaFCyH^G"p5qh _.J(Hrhe ͂4QHldnn)z|ڸhPRr#aslp- B@~P⪿St"={vrE4G}nNJZXmۗ=A+G_rw:S{ S^{mmXPẀN OjH$ԀM8W@dsxC"Wa# o\ \jÔ}s4k%N%2.՞ VKW{H;'wdQ?NM;=IT˳U8=IU:^:&ojQDAb\qэbT#4C2%F).? P M Eb/f x| tɓ 1Ew#Q*@E6HMeU5PEi+Ev &)kE7KHo!!/)"FR@I{@Y]g˔;$d:C(*#45FǸ .m8;.q^$T;/|cu 4g91D0N._:@~bǮ>Z/\)ʯ`xo|kGU)c"ܮ[tNi/.≒)Qݫn4񲜩teb*4]Y!7.1QL:BwZ60]af[hD'j4c*m zT;hw8L NK5:vko0HHP3ߛ7Q{KtsŚ݅]e# xZ5S9h\L .](=Xvj+5~vM>תdy&SAyR e&K3%Jh`{y>Y쬬}TIOi>A>I>͞'ip[fwpEUCnH@37O%cQt0W` '-(=Z%}|+_R /"mگj-G-R \zV# yn``q0p/|wi]hEpfIBzq%1> <  t=y6y#rde{v,c,Vؗ ߶_#V#y8" }U+'Vm4sUV]ccOw>KܫB[W#^WM|D'ri}F8Yby;/ُŇtlm>q5gJ]]>RiЉEҙ\a:WxhK-W=zs4FkU_A_}HIWK+r 4bnR>)HqVooux_Ax,1^TB>VGmcple!ݹj♁7! 4_z;OsiWO04t="3h{"־;dZ–=l43.up/1)frIa_gd2PCs%ȰϽ*:x>EREl*T8V~*pU/Ņ,5Jnp].יO^:rv@wv[ 4,ҧm F61joqvz{<=e.xpȆܣe$[g*; 5c9=@QjsIUoDryS(J'd@8rj\B eSM'0>r,~<|辫SWf>T;~W?+/ je9yo߸J54D=;>3^w1:xd}+sJÅቢ\Yd,  M'VN,t<}hbE:r <c9BS˔[>=SbcvJEɍǥ0O%ʍvyS7G3D>y^8y]ѫR0,8NHv$W =߱\coTQ6e|Y6sVF]w枰ïz\(F{CeWh |0&\tZ:f]; tGN,$El>WpưϡE#KG)NT<:LqrUGV\&YXTM<\_ZH鋨ƭc$*]==k&>Тz-d@7 :a"(ٗ:Q"C kL'YeBJ*5!҈N, E (l|R.|2An<, (@SPJ7!-r y*.nrpu5yWvV 19I0OHA|V-@Vlo`0_s6xA}0Ovh(NrTf˴hLaņ ǪjNZ8peljeO\smO>OOΝ;EXug+ ãȊ6vy5_;_?ܯzGn_L.0ÅCž?(gpROT '!Ątz,_6/+?CM{.0.5@eL' |S%ѱXGWc7|/ɵQ=~ ud8=RưưRPoE#,1%]aIOT1' ap" (7YBOD4u6gWVPj3Y6k9=kCM%P. T*:>z"nΡ`8wvU,!M qaP5ULB'+R]m}>s E̖sUa)XgBza=?؇ }VzNôKmgrry-7ݟ([ [Ñzd̒Ӥﳘ1knd2W1Nd"aO|oϯ_jG|WN_Z?Z/ Q씯L6)YIOH e8i LĔx!R7%I_CӶ5m.~ZT^?(o)J7HMRPj$5 q}WTfJfXۧ'i |"R+?2Č  ࢊr2& L޽ˊqP|<ۉ҃dOG;b"ڧ;ivv;d kuk݆fBU#HdOcs8 D Uo5!4 Fc¾|BTB:׎T;u7&O(yv/];:owahWAd 4CN.pM|Z!BJ6xC\{gTWσ C'{ ȡuz%}Ȁ cqhԖ ɧ~ɬ}cZV<ïU 덴3$;2jL8AE'|:0I %л%Kw죯`^NR ?oGwu9F_u.p蘽;o}^?ϟZwؚ aj6%M$4X%@^+@>Z<9H @#"}MЙpgs]eޙBTE=d@I`Խ>غg։ksB\ܳ4N!j$%i jiw1&/1 ',*^YoT7@,@6L: Ö kl̪lq9jjFqJBmjM:|,MwxJrF5DW_VGWYX]J Vd?dh]%cHE 2}a6D `QldFpxC P54zkksFfhh i<"'HP^@$-̤\+]Km y|l r۾ྊW 0;$'#HOӪF˝a+GPGE+D*|HGԼHUp†?BnH"v( {B,wEUo W"d &jA TZ  eR{w:3??O{m re)PۢٗxO}KOu zu]y!ktQiԡ꾠0~@$8 gһʋXRup.((L G޴3Sȱ>VDxe&fQտ5'stGVzÇVO^|ڼ9*˷,=zETiHdB"W{\*~^889XdlCe>uK]"4v\ٔhG=!}m7!lC&ͥc*Ƿ ֟$uKv-طrᾕ fWd+ 'uwB=9\uG.W}9ѕ9}n]D/ms+qDS;ᐳ.8q~gǫ>یR@_/DLDo ?#Hvt r&/.*4Ǜrqd5;duzaNءjBC p )LeD㇗$-NrCFᕙoY;`8o6r~x9|OFkKf,=ʣ OFNwvFf*ӕيh&ٝuD]Pn|pªK..LfR4;žs 4Q,#@юw̷;F39q瑌l0WJiqWkwk+E);uEѥP}Q3jIq 6N]sY(ϐ.u>S3o">\gA}]OuУ錙P0b6rxYТ\izwIfpbϢœՋ;3%t?4*NO *BuG#b|l-#Wyn4o]:N٫*E:‰('A<ͬѡjzpǷ/?#鈋a 79SZt`KwW̔drܗΈ#w2Ca:){/@vYyQ(٭ȓ'8 ŨK?6>ՠjyQ/~Ύ4y}NT}ۊCå]XڃƭNƥ4njPK@KWWIy@;I";}ax&]ir]>:N~&SN+"ߐ]LE#+³>P{xE᱅|]]AZcUgKx=ɂ e2ab, VYPf2gWUz̑Ǯ(=`ECsN\Yx|uhϽ }hB}uQxf,ìٌkRFP5ۭvcӴͪ_Z`_+%3w2lc,"ZOzs^ٞо({'VZ21[UL02y:Ox?& S%|Ap(eޞ¹=UFfnj oZt77k0KW+jT}$0mr5IJ$Ƞ;|ҡneC9"f>tW]^ppqz"Ī|t`n;uZt(%5:%A*9nG: hQ!Xḇ5uZJjyϝ?*|\ lĨD:%ӷΝ&/<]#vty9ψ5䌽n X+FvYVNYcq4zd< .k\o0)qd~f7JjSWvUE{Aq.6͠USQlm "UKnLU(zm($z"y|QˋO4^wpQY^vc-/[\ f} //<ySW, Pj܄uOJۢ k&a&n!իkS]%1ályeWT\ZwQ>ಢC+*"y([vTf*-e|G:5TH36M {w0*uL-=>OC4a]}VU MK1'FKY=_ԭY;o?;ꋨBdk6b%@…~kwn%٘H#*S4NQq+ sڝ. $]&+mqHa5_mjџQJjM2B$f<-GYrluIaj8اjX3&qGapbS`N%N4LSHa›XpO H|'<.|W|r))!jiXb- ŏ C2IrS{ċܖGkz^|lmS虩q\1cKL0͡!lҭ$2%pִ݄~=s9 CaXaS=.gżt%n2GGE2~Y\ޯUʊBJ9Ub(֍dbF a8 ?~c3nIֈg08 ]Fl 1 fbMJƶ ְg煃 ܷtWٵ|ɿ{gοqk6WC[bY("w9o^z_/>ֱw,d I\P~b(G %G?UU3j*y"FV5 .#2Y F2@w 48&Ȯ%Ik⦎$ޑbgR疷q< ldcMm )gFJwi7(^j\ﴁ'o;Dv0lػ@v,#0Z,p#08y= v灚e ?Йp6MMq)PRP졗d̘[%n+ܲG{_Q2_!?Q冿̻Hz̫}M뗏..ֆpD/Pt# 0 C\dl'A#wA; '@KwoYãBZQmW߂RmyG>p5q sg5#qϟ@J4Z!OٵcdEz6Q:D e“ed`A(nT]d[f#{EMa}ҨׯvPb5D?SΙRqzE!ʜEc d F(=8C_IT۞r *.tUZ] 9榔=mgX0vЈ;GlAA!#Vy@%ߠW>W> !!<[zՃJ n /-'^uF3~|\lp7!\ AIGTW"G6ZPPB oC_tYijA5GU-qeG=dQUnvts4MIMGԕ"@:J$ž6ǀu\~di9b$7a(fE ArjWjyYt4OJn n 1IWBI3[/Am~]/ޱBhm;ez{Ռlcf(A1Th80i^݆;>Y9wP^8/pGNm#cjU%eb;tZUP-r拪]1@-30Hz+B൐Yܳ0g߲ƒW2Lm:8R ڕ%>$i2|:s8rEv$\M1OcȻfOA~~L^aؤ1Pk@a]5AT{GSAq!wVgm3f@.kGnl{ʷ$"vO~gH>UC4ϯ؞gݜwVw(N86,Z$ISOXi蔂}IW\x>5.ǥ"} ,2W* ِik|tUd ʗVl?a!~YxHh@% A Оb!0o .܅(qEE9 Txے#M{R#k-::ZY+ 2UbVO/ۭ ZFɤ0h<`To)I]lF/KWC8A.J'y#z(r1lcE^1'Pp6s$cg})SGDP}A1m~?;e:8f>Q ;8;u+Տ~tWa|a.q/~!܄yRAy?bޮ#/uԄ q6"HSA؀vv4ppMyeaꝅސj8mRc#,9yU6]aWiXG '=gMhHXZzbM*goBMd |^~\|ŐI'S+5&t%y 9 9BB@nt;0u~_]}má,\㖭JuBzqvU2ʂ{Su~J@u(u̔brI>E!O]#DY؇F*!} |kkzS"F$89Αq#SeQ7ˇVU\V~xOaj8N&>A0r1h&nYO\.H3M6@3f6|mܵDb68eR M&FzYBM[[m~VrWv$̃y.~#ۮw >@GZfd( KU/Mv)EZx]K3<cH nRit)b,n7Kn܂K1,qo/} ; QAOdžbf~MsQq׉1FJ\%25nuOS;[C|273MC.˥=ˢ{c1>x_%lxG3]wC e |WIdc^h]=Ow[/00r`yqEvꎘʽ^x'w\wun e6qoF >+l@ xE$b 1(նND Βy#~)hBcSD2xyfM)K[Qkn18:)lfLL-4hyVzĮE`yz⁁td0EMn&m"46dw*wUmwۭ7ؤ !!"R!M>qM(:lnL OBw~:R~͢^ov) gt\Β$ С(ΥqLxi| ӛpF&=@ ~R7d"+v\UJA2Ģ%1s8+SpZW~6p8uNYSZM_@/$2k-cMM$uHP"y;^*f*1f|Vާ%"li rBCI/ᔏEMPFGFrU*x)MD4= \ #UOv엍?8?}1Jpz }Ln"hw9` րP< O7$0YO'*א:)Ro [?/kTQ^_RUQUJ-MUGƪRcP!:]JlիkzuZ]+m4)X;y+QK*<٠bҔ x,ZwIsper_2 y3/2 : rhtT229-N5vmO^*"@d$bo&[s7 -9D.;m zL1koWʄł3* faeFy{+ ܒ4'Nl^޶0޹83h|A޼}A ܭtjylI) `;lBtD_>bz(V-[6L]pYzhMJ v-Ź(ˈuu:btZ(o#Azx ,(p<<$wN]E $L(ʕqrrʹb~fpmv29֒ypu#exO~4)dFۊ6c+2@S3X;4e9J? D,^VY|+vĭ"y r."n0?J<"FFMMIΞxN[< nv+ళMv+-,L玖 =&vj^{΃C3ԇ}zBfhRG҈>F1Lx_ϳ?1:6癒j lUXt2a(PC~SQ}yB)N^umTɯE{EɢuX[:|pp0 xΡk('K/ $^чj(vq G)$ "/ѐh*JB QQ!JPϝ&&a,ȶJ5 &t3iHVݗ  V 9>j{҉!v5FaVXBnXlX[rhf>s_7geB h+uW"[!j m$TY7Ƙ[,ufK3d#/dMnY j8w"'Te|ҽeũdh6G②Tb / )f^ w!­)k;,@.m ܦ:*ć4I,5pO+L)5bBe[/+[d'%b#>RgdvN>~ӴcߩޡyQުb'dIvן/P@I0M'QhhxJFsT8Tb,'5;"~DwpDd Ь3K!0pڃ)T]Ay484A˰Цw mCθY[+S|F"D)=%p]!n} e++]RoK; th:_Y4])&o:X &IE<ٮgZgWP[#!B 25ۤ;SݣS1-^߃ιh)ظfGnq`lb |04;H7J5k) q+"eΪjnԨd6I!).#CVM5')y'r#ӬL4~E|xqEiIx@jr(/אmk;UN&~`{rq\v8e8oU<JvrJ"ťQĽ3b `ocƤE2K/eb?_&J7o]djE%3otף^SgpE8Г uړtF2-GV˾ck6+Eo4f!򶐦=@Nj8>qZQ8eG':-A Zghtzd@"وyX!ݭRj1c@{ۓ8jλ 6n#ն%l!ozore@:.k{u}8ܚ 4Eq?LptnO75@ 0m03슁/':o" ~> 莋^mKEZDgLAM5j{֚t&^}''Z[e]՟rJo m:eY kklzzOXoj9d%iIC9"`IxPo `HoX Y}@a'xfDo)8R44#N`|:+\&0[4R:9nY ܫ?UJUv8l#HGb= :WbW=v{vd_&>_:RN4QDp˥[|yÑ1r@0՝c,ueԦj,2aeQ JDX~_zI^oѧe] j3gտj{[ϒE#+5ecH[0,1! dnd 2bU-ȭ7XPZxtŴ4fdF,Ĕ`J0G(< E @PQxn=n@j @QAOyA{A%/PpnXzK#rd8;m1g+Q۸z;pwN/u~k^8}WO\| ޚU¡_?޿F/nHAbv}(_SUJ)iq!1IYlbS>RPbt1]emu(Z~FNܠ3l7*hJ.,ӱKȹH&,Ww-w޳=:L^|[vsSXU%OZI}N&X.Q,X(H#:(ξʜ%=%y7(LDYqs“ၘAJbR*` .Hf_9dSdl.@ϖͳ$ j z"t5Ԉ&TDN&^jp8̟$[n7[jFN-ݍOނG沫G_:M(:Pb` ({?hcEf )ڲ 5̬վ?!h"FBx)Qcu<쑶d,~]!EC4rL{vv)D`*zC^.=Z}yw, BAS QTn[ܲb/'~Ͼ?}Gn{pk§M膈FtO]|/Ob߻oL /==q浝o~קO\|W_;]8x9ʉ~^b]BwLG]!ٮ^|jo?~̫#^7_:38sׯx+Xn)|y=WC>TD5"l%8&)xHd퓯?uu9% gclk>>?cy)92~iZdFXJ$B\(7 K %\c[W?r_8=x _O&GXwFXUHstj$*[2f"ztY; -r별X4uN5DMN]̣ϢyMZlanA/CAI|˂)@=ȥh@H];Fb.KUoFɳ^KX ږst5&VPJֹ!w19#ZTiYXwpA8-TolHU *iZC&`:t6+օ,Wb.|͟z~O7D{fG]8t_ᕑ3gΝyՉxqgv bd7OyUڌ= NΜ| Իg^u_p_m>"y'y_U[}>v8ռ띺"tB",%Cۖob}?~>~:{>sӇ{c7 i0vٯ=TB$ D"JrE'tX n6K:eh+o(HSKzV>\[1_pkx,]S̬OQG&Hi BC&z)fBhPsm>@T:uY "Ŧ@|Д̅HF f$[ eMj6(I o#n ٜ_.7S99cXN[~fCY eEC+<Ν? 76lRݫzQNW׼?$|ª1]~/<ӧO\0u5> Q?{g޽+y};uw$N\gW#`r=e%Ih"J՛m PDN"Yp |R@x@RLUj#~3 G>ەn)m>,7 k|[+SWd͋G^՞*]|ԅ{Ν}ՙ3L}m97}//|nr ݫC_{N>W^+o}_u]:w^_._Xg]xV̞.ٶLsJT.D0*o"$S.jFaG>7&e 8vu[Ȳɩ"b>kc[֮5Ɵs/{o&V_>̹9v;=˓g_tE%r˓SŨvW擏0V$}p>kv9ud`<9=3ma皉gID`5֘[ N) vɃ6p4jjά cdTjjfeƖZ N=_rETv@V֥T,2hsFH^gְ_xg^pD/yJs e"6^if20(:W_>p@Rh<%V t:̈́=a9f,]t~'-ߖ^{;K/I(Ճ)Ѽq.~ܫ/ֵ1޽66(ZcDNbY[Y&+ "gL(v) }H+]cnռG%HcXH}آ4k&t~fyl5O,'῔#o~Ttg=‰ط壷,)sâm=,54"dM,~rmd. 'ƻZșDcA/:@+K˔1 ;/B&&,g>H8ځǑ#`A*֨2[T^dGCxȑq <`b/4΋xFGbQWSZ Gʠ\\?fceJ=<N4*prJ V..۞÷C N\ػ|}'c2-r8I /Pƿ -_V&'M䬉]q*?E]/,JQ9נeƲzrPW+ "y9+Apxi4Qgh0-ő&m~ܼ9X mz/y緭'v{D?A&\}" GqܬZRya<2]Qʁ-Ӂy0@#gQPsw A(Q6%aUE@"Y-W8:U{:V[C!iG@G2~, P r"-(B`R @0:Q; A-- ,5eC!  +6#fq?Bds2I{|f!1a9"D膘9WV&0cA, e.*"dQ'ڃY3 WrVnS$, WoLFm1Pz9`0q I*t7S'3y-OxAs"iPhj33$B6g''Mz>}} @sD,L:NrfW@ @t¸Yy";w%64k ؂8U{ gϊi :eWP ㌿ 2{"K9ïGߖ<2j{pa ̔f) XuICu8Z9m64O5;M}C?|^^p?+0Ytm ]Ӵ | mŴ }X}:B"Zu55)',7"3,]ܗG#|jT ]$uCΓ%$re6b HPDK[Bx~JS`'"#*B]"q_w7EGUb:aNUa4%G tE<4BrP;xS hN_1vp]LHdJ=λ-ڻ#79;>]\ 1h/9')#ַ-jLDWhH C$V@fM&B?3 Q|gZoC,¶:E9h$vw 1y||DoM<kY#@2Fc;p=|1/KiPOE W<@I?*߲r_u=N?@"fq3ÿ5ԐPXW81鷷z漯8& W$D)tS86[BҪVmt/)fr-x*ty0QyyL7I;W6DEkƏ[$ip^q=u<3G,!uR% ByZ@ܣ[mA_Y>чM&c0?TSYJi}*zZ 5&ӏJѰj!;/+'@:9ڵk2bP"jBhThk_s_K_[T@ob赴H  R9!ņO ~8%*΍ȉRQD2%*S9f2fиXsmK-=W+7xuF$L6 "1XwDhb*8ݔԵFՐ XtB!cر,1Ƨ> <@@Bݛ#Z^unMaxxդ.uh:'B}-.frT_\y=9վC@ ~UJTNvハϪDQcIE9FeСh BG A#7rNʷqv7_s+ڣ/ާ3 hsK$u *.E\IQ_vd[Ž?O[ H9$ pTƪ9h(:əYw֗h cwFr[[YM̺z/s=J_ nZte͑ɱ/VՑm18u~Ty_ag.xG$ˣ+cbCBf}M*:Mz*'g +ۚ5ΜmфTKk)d;Xf}?VXcҗu&}%&_j7#6gV2RٙI#õ@אHXIk>y&r9s0(EGMmE5f$F#9h7-<_)/Ļk%ɯ:EW$}$^[,Q =Jr_\9u-@ 3#ÝO ³2#ձU1-)ፉuqAQ~vB [Jix#o+z}Ѕ{|Ԃ휶2ZO&cԢj7Yָ`ԘT4Tő 'f*A7Oꨅ ]tӌi_&h535]-_%\)M4G1zCMb?CF칁R_*!gS;׻;9;1 ;V3=)#2i-wPgg)1 gAzf-&P GU-x)_bxy/M}K,~QT qd JZ4"4 ( 41^*y>D͔*Em .7+]xɲ XIo-+y...39-SF5T (p½WY[2U%LXRC gR[=   J̜bZ-U~b:^`) ,xdۿ"vӨB z@, L {n>˲'dm`16Z/?~P:2?ַ-mdf4ס XoM\{hnE# O  5m 5T2htJpHKۼFTZqj0V1HN\yH 1L?BcO؟ex~c !u؛~ɝ8&!X("0^U}v `&,kɮ-3X#R;TO5Xkkik\~۬ko&k\ͱ?o4 >yPPt]\@\ݘhM`  >#C[(\_PbE>^-=k|u:w)zT&5[eE\70qg? &q^Pw>͡=#` 3ᢂjM` D! |^rnҩRJz.Ha 1ܲrtHe")GUb"Q L %vTcI$U+뗻ni_֣0ɹ<յ"ŭ$D>%^ۈ5ܽ7Ƭ DQSZBS㿂7(0K8Sjs!EݐN1rXV ˾̟nMh41;ӥ5Pi}i=m2l:T  FHb{ĭw`X4Zo%isRo^jSؤ7S r-Nw̘;H-Ch_˙L(t adlt(WZ?+Ǐs֍~JI;n7G 9YyZ7;'HXMUQKug RDe0˨W+l+r&>2S(.5gyʼnâ.Ml.EkD $AijSbgة0#h.ݔy;0P"a<}IH̩T{p9nl$Zï k0PQc^xy <:k|YWg`wLH)lÆN`iK"'…d;܈Ղ.^!w0*k'>L^"sa5uaM1i΍|y (sb$et@WpA<j j@!ق/#L<ȑS#.嘿r CF"ɉE*l?g'5I,3޵KӞRq @J~\|EH?)gV3yWyl9%QΩ0[Y؝k领xn^D5 O"n*|^BoG┇ (t:ӏn띘lj[4KfnbV[I3Iv}y~E69Kr6Zv3wH r“ f_?kh6i@41 Ad!L7!^Q鍡iN "1L-Lp 5 /8QH$(@bS ]w}}dUMyߕ`1*%j$xu(%ƹ؂Я z$S <38р\r!Vٗpazݐ%RDetWA`sgO|O"*6{e{-g? ς.k ]_r{Zuotݻٞlל`ۚhMd[̜xag;σ%Fؑܓҕ"/*0<^\@ e tirDάR%Si.@)vqA6ݞ v{FWFĬ bEff jf9qjJhOilxfs4͊xUQkn5Br(wqM-fE")ijn]$QT=a0dFH/sa2$6#Chh##Ԡ{CgLYɛ?ϟG+]|NjA\c]uYu1F XHiC%QrU UU,ٹ0VZB_",/?;?7W1wZ^ЉtXNP5F#זhJIpzd7D9u'ygIaŕxi,=o85/{H R=0Άя0GP@ c_|)xBP*#xFY+a`$FaX+gS53jՂ`Ũ 4$HjWȫVʪ\ʓQeUo}rxuJdNl蹘J^Xs?[Rrε~:Mr#rpHe xǁtJzrb`-V}+R)dVk<9Ց(Jw$9Q?=;)NpW$5~"rW~53oRʘUBm>;qӰn0|5 XG/ۯ<7a֏<}lܾuSJ0Tӕ1UeЃu9,<'noD CH s-[\vwV9+RIv=1]Qu6@Pvu"?ZM J; f\ '0nNTLU(s̆z̉vk7f?u^'?x;t1LFg@zރwޝsRnwJiwI->t*MޟRw{aZ+Ӧ ,).Pcu-jۧijɩ~r3k/%J]3l+6yHh[  Afiv@ڪwVI0.W7_tgzF5 51@۫Q@oXuIn=7miMoD0 {Vw$QnԆVOKJgCAޣoku1cy{YHWgD g.t_: ڀŐ%fbZUA;BvX0xpl 0<"d(q!TD `@ј+SШAqLW=ɣj'UD+ V5$E͐6]t{4qԵ_jH'<>ewɗYnwHݠyA~&ziw693{mp ]<.ka5Eppx 8ǒ.=MЖ# w J(P"ej6jrwm.zb jjgB%T$02\2=9mthGlOqG&A8mfásg/c-"塜<Y9|D q*h+LqYh!SyLh8_ -4(3XyU82LwSe)ʈ kq];0K<%onB(=p L1G,H5fG]{g`()11|^hK\zq(dpt"c#FBHy mM\" m_U `PwgmaаvЩjL'CB>`Ie&VV ]۳ƫ{7@;9kwj҃nT8e!qђ}Av{?~3Sk~BpS94Qnn;/Q n\چ=N{0ȠocSc,W0V}; _t8cH"?M\$|@`GTY pGj K)0/[RM~ tanvYyf~)xz&~9e#P sPY>20ay@F>wl^ӽ<#&H~eC? DR- cWDRd-媮5gwxn+U-iDQy G- & 5T:qVpMzZ):|0%щ{ֹ~G_5jg:u7B8hB-Up>`{W<kP ֨тa *WX0fϯ8mWXw[ fjƲfCj_=sZK~!cij*G͚7& -vpUXg7졑 D7tog]qkMvnJty6&qk U:CryDސo>*3':ͳ3OkmNFK#bpu`r^k+"D%aI某ģPmf#m;LY\bpoCV Yօ @D0Q!8؜lZn{z7Mf&4Vs*70|9ę9 գ~QpcdD4O3CL޾nхg6V$PaD:H$)Ir̝V̮ JBej+~OH" @\,)_+?OpT~@b+hܑy@.ڢp +"Xe[Fu^;;25#TM%݌懑o$۟N?\"aD <ةޫY{̣ӏu[_7h}1 8YnSGޫ}Hq:,_˄dQr0FeW}Ek ' x9q!qbZPtS}ڃjc<L\Togsy ]\l[ɈPvzAN 4KN׎55 vu=f~jϒ̯Xɬ%5Pw*ژ4W %6*!i^?@3a-s&'{Bz+R p&%qΝm[}*&V7L|CrU%!ף|Jl䌜z#4I @,\?,n#j6\J7bDs6!dѠn~2C>u&>+|-ͷ1 Xx8LBp Td9_gsCEá'k5qMPkK7& +Y9^S`CA!q?֏[_6/%RH>f֕NZz)^ƪ]%+Ie02p#BI @d;:~pg //Tvu3PC%hS %1J@jQ"*bu&(I*ŠtJSKE1ơ7=?a7˒Q-PIZ 5 5'D)12?8g3= =W NU^v~3/^o2KU6cv05!#,$*Fp|P C,~`Ȕjt]{,5('D#ԼbbN' 6yp2:'zh#4LlW8n2[49.PFm~lXtIhsFGjОn[D;>pHխAhN蒯(K|KrSR_ŶVa'v>,qhl^ؼħӠ16SN0h0TE7}_ds|?"_bw L!e#W""IO]o~ ڽg|!!i[M.l/0ccU~87b]&J֖ٱ̫5ɵ)^\+qƪ7ūoQ xu%y)5 Hk Aea.|%'<1%$RUryX=)$gmX*Jƚ Q~0_y2eY0'Gw_+:+yB<@V?eբJ" wq>uc=@4A1ahiG Κ@dx8B,zi~)>9*hQخw$2w lO[WDGk7s񻑾I˫S_6D;K'ЀB4zNx<dnuH&<$>U12M ScG!På!5 )h3TfKڦF-5@c4 ߚSc++Ec_6Xƺt@;SPCI?Pc(jK@\a8rlF7"Ԏ(HbP&&o:b9W! ?jsqqLN^hT.46t\Łmׅwϳ62/6p4ŻOQ EںFz {`yv&L4,ax%,@'uօ71t+w8(FNDP+㗆 :Aq|Y4` F98) 4G{vem٢PCMc|i C_^pޗ@U8yӈ]ڂ?vƝ+WIe ˪P;a<8FKomzm[M7_]՛,|5N) vī%yt],Lh`QRZH6ш4Xш5߼6}vlna~ӂXkm@׬IkiJ`4KNIv⇯F?%*'tCAP@kԎ T0*՜jZ{l =m˼JBE6fSʾԗ_,="mwgj^Wxsu-k"^cm)0 w]&=f-]_D2@OrPu>Eݺzwvפ'ip[l]7H|/?{@fY(&UIB laNQNI⎕u5ʫo )ꪘkۖ%L'U@i]TD\c̙HK8`8v47*Ae5 lhOeQ`os$K_VY=1(Gb3׻G:vuz`uXTLØ{0Va0}p^U4]ƭTB9mk8žvD7":;C ׷F\_3U%ƪ wjH߸`D"-G#;Iū s",%G s)` 0G dd9IRr"̤-R>zGM&S3B ?RPgX <'!;Yj`:1i?y_t5\8v_QHYa(?ׇoP~ DUAN?x-yH%KъE 5ۍ+";/\4GHkH~L2ZIĕASy1" u Ґo5j~R( &t84z7ᡋO,3W 57}a2հ2ǫGX['>.4nv݇:$1Nv YYZY8__r.o򯦾Wo ߆h&]5VҾ.o@]jY,X̩5کySe8&yUf0*#o6ج:eM bv+ЉR [}mx|MV[Jm"SֹB 8KR.5c$,؋}5ꢝW87,sϾ0O2ؤkt Q(de(5rf[ _]Z숒/"W7 U(ˍ8HDRw!5XL &r>KHJ h>| MA03~3J|TnFD[]O\cPNJEdPqҽ)^Y7"AMkצ8U9_j*TZHYZb`#q9i V%9m˕ͪ}7!]u1V6D)Zjd~2v+pj"PxkfnKJjC|\C߈G9zBh A|'WmSAݦ(8z1 $I7Da*n#,_hѦGlW=+Ơ?C^jȪBԼhlplB;CC17ٰ1qgE$x"\oFE0+y,+l tD/:ZTOǂgJ^5̽Sgh%tG \=Rcnf9״{~xl7kP[Ոp"U:8VY'.? pO|j`Ꝇ?|s`@C"iobh< -3xi>aikx[0i|^:F _6DJj+kܽ9Ӂ;][gGo'ssLY$M /Ϯ2U, c]_W-gF+V*Z׹0iy6žB̆H/B]R v*Q'0 VŊ~蝶z~6ħoRݛYK۳'cߴt&Gx7)4|s 8VWE{C3 4goUl_!( cMkJjIr}@(PT5|PV2_\?# iSe2XTPPX \# F3$ shT.|J ToYBr3͟MCOGs%DuK$ep @Z$50I"h7JY~4}XE"_F7@Oo wl58_XҀ㕞wHa;GbF?Vu!L P0*?*_y lceLX!<ʦ6Smr9Axfd@#qQ R `09zaj̣|y^y I}7+ۋMTgX$rBk` ʅ(e_CV'nʯ- ,| 4S9]pL!u-CKBĕm|gzR=9Dl HIK i{5'%֧Wf`iy cv:bX$v/^_._h.+/Xz/}lF@,P 0Y\څh9jxBqEĈd"J:.u5Η_bI8nw k廇]i25îgh)@J@-~x39m ٠̡{m@iw~zL[PjӴBhʮUOO8etOU $N)@I[@ NF3× `;\cRr %h1Jp$g~Qq+amB?6JBys m6$S8-ƗD v}YшJX} MS_S=9" ;E%s|>!h*K9PīeD+- O9$j=ydD0 Bv 8j9̫^t58C|au) Y`g+t4Scֱ{7r6J1 2Uv0D\`Q?9F!jpG^Ӏ+[x5-7/7n]wa_ǺK/o/^\Զʿiw=dbŮ=KB%RWel`A(Z;25 >hL|;64b;O.$x;TbzbуgO;9X.cg7c>m\>t%s_1NܫՃ k"۫_ӛuZ0Dk77{ [fugzZɈL󛏻ηn.ZՅ;_\o_պDwyu@j ˽l6}}{,֮*,]Q@ZGa,yc^ZBqp'Hf>2pn]S#5HڇCH C4߷]G[uWv@',LA}"Ǧj-cca1{co;ho& lR^eo@ PMn:*%PsS%kX3iZ.0RLRN~E# "|/ԍJ.$=$L|l̹W|3H HK\b=2F|Yœ'CP^@2Ƴd;:e3>P ,I)鈘{X+d22SmR(XbgK'sŪ Zb~=C#uTȾƓi`iYs.K=HQvN(l*(%DW(?~'mtiwjjz]~O"ы|DJB%EnC75p[e.~ Ck? F5;æ:1YN94DO*}4 MNivY&G^v G3͎={,:,/>ҠX5wau賑=ya`ZC +9.pqťEm a/m־=R74nX5Qh]J0}ay!LElk%*Ŭm7? ф&dx޲lz ~Wt.w~nZfrpuZ[’= 2tkϯM+djS>whT {'Ì@=rf8@5iy7)\Z |;`.hY*PK[P[ħ<ڷt!?B!94=PU0߫tZ1ζqR? 򳥑ׁ3 N-%p^ 'ܼs>|k^cal 5PA7c=wJMtOaVF-z* YcAf 7;dN! ԥ`LK*"koO- TʁyA4cCYYs K+7֧;儩"ܳB]҃iT?DCvk <ӽ]r=U kd/ūi t!dGdTK 8$md[ޖX$Ҍ{w2 $w&45hg/@4q5  Jyfulٽ_ҁq]#5INIugixG̀{ t4`<KL쑒U>_Fx.HUNxiw +xx Lo_{qmKU~+j< Bl. Q(5!y:u톔͡bVm[_}9kw^Rͧ/_$_2_)K'_*X f^K\1Y%؀-W~sϽy#53Hbh4[7lO5/b'bܙG Ϡ鿿⃆rl3VB"Xxڅgu(6VxZJ0.K,+#&^Bjͳ]ƀ3{>N\'/֞tZNqjBR8Y&!.}տ=\N4nxmh_;g7KV-d Đ2<˕А`iJL}vɮl-0{9E$jpVOHЉ46K@Vo|;.ȸI\ne S%P+-[홮".Y6\ *>er ,_ 4_m^wJv7s4EA^/\'EHka4LX/$S&& 8#uxR6X()z!&)1ۼpdDe I')5apR퟊~J9b5>FPi0(CB2;xs!0S9 Щ2ңy- 3.f:IH;ƫގ:IsZIje}~oGƦG'@}QjP3;E֙Tf*6FM?|åpDx)+$pTFR8=J#=7-V.t,^Zձܳu̍5  ˈ68{n}&jlt0ZPūbCQ%k287iXWȽzG*UV *_۶^e;z-V[ vpywj}KMk}k5U 룵j7_|4eqb揚;j0Orݳ&HVuSi\}ukoINHVd$3IE0GƫpͽV`Ycu(_G, PB_ׅ]YlK Y-Z,z r=ޥysb K]ʣceۅu>-/7_eY[ǿo Z[ch{aK Vz7\ؕ""BJ6ix+L5 2N u5f8dzvgqkX'/o^ 9P, q]T\]^Aq[|φEbi^?8̅zIZ7Ku2T!]^BȩJzw#JG>wpPSԊ ؝2J7n[%aovmc@CvƩ[ոίaoRq{2m\(e:|HH)JB$ݩ4@^C@QbO+]'Um 2C%c",ٵ,'@aejIéƃ>7j铀k1YϿR33?a] 6_uԤG=%t=Ξd帳R- AS;KG^l_&"5Ň$yb=*}ދx V&ǫg bg3遒X?>=^Ϊ#COnZ:GL df@Pٴو`8NL4en'nM_ZL]Io?ʶ>㇈3tY'at+>~*JԲT^̀*eAA1"0Gd*'C ")TR!QUFC\xHl{vFʦx9?zr(/3\|ԍ8܋vNc9irmKt nn?Ǐ w0Tsĉ6jrROMv´jncu]Bm}?W$p}ɅH_&`*5P,N`5S_YbҋH;_G>5]꩷\V # +\ɣTF>qB$R!L)󆿴 0}VζЇ7.0p9TwYeS|4=m\=2s]+!Ao p: TnR[vG{Søȥtk󎀁:j>VY]XдZѺ^ {EE= pa2_VnSS8~RŮ9DRa־ڴpqwBE-B[ _o\ձx5M+%MEU 9NNrOb+w[ :DޞZ2cfrU=!k>?C>?s 7eDvΞ-S](x$ ^)XmvU"fLZ!*|0 ف!]Tj?mm+Z6DyUW;Ww]Vx8@OR2|h  ׈ T=j=|ґ&Du|3gcFPl 5/ЀR /J)ҵnke"كC /Nan#6?L]sK2uSkBH> jCM0E}tVwfVZmp*q@GQVsWSֶ {-@PSK@'@g˖96/UC}co[sj߶>5k.HH:\Tl!f!vF$X:XM! 3Hnnx/]A3}HxzؗRqAd~]?=55SEVK9gTEBj kS6RlcO[ [M.j\İTIgQ)9s 4{&BP۷x'y%;]?#Z+'㜎yއ".J ~ nr,TbX S?ٟ'-}/V?J /fD7hA#Nm0B8=M1!R܈sHcI(,/zkq3k:;b1!ǨGug N_Ĺ?mOWs^&Bc X\=`LF@%18kE.<>{+m 8r@5#YHMCXᘋhoG9)XyZqu4p:U;Cd˕<*=q^ɥ&]ƪǟ}l~p?>:6=j3Ws^|+j,R4TqcA 1`4O~u]h//::45( A.8ڐ!pd CX) *rVb !|DRUYY>XwqOQ_=טcJTg7 >4M6O7 h،pWf?ؠ `rl9[.v?}ؿB$jh;. >e?*!(jQ68@'Gnvٞsd!3I+ vvNQD Ujn" ?_']){郮C>Ιٽ;cˉkSMbň."m0+}Z>%e O;؀ z9i d,%XW[?Ww fMMG+F1ğxf΀ω7^@l@A˙j *NgׂlPW'ɛĕWMWi™jFPߖy!%F/WWgpB[n@yxp3@ 9D%Bx;x, mIx?y'1q(̌99@o5xι,r"6ʦ'/OՍO\P"RJ17~k4j,uVe}YFϔ 3\8+y6#@,6b0~?G0ɶeRFݕ?zwDT׆=s"Q˙9ZiFbCvoTd zfQDNd.e ʨdmҠsf;1GBLg ' MJS+'_+,J >k绔y(6*:ۿdpL92z hӾFQM0ffy烢[Q*x߃Wǩkk+r|]{$~ž}\9b9fO81RQAg=s=mS)g39Q$q.Ԏt]*%6q/,4xf4>]sdwaO1a}_֎}\2Bn| E _$n 7 soǤos}DbQoek tuOwZ,]V;/!^#:v{R7?\:4)#:vZ 00ecuO q FaB^U:fYHb` 'h%YM`7I8ܻ3V9P p|q:uJ.|Ȳ<äwek^.YzU=Oapq殏.M:꼅X-zѧ{rrوyv|tvz zgAAL=_ 69G?|#&a%YIppʒ]TɕrpXggSEI]D}_V>5]$OOs=tȚ}Xac?\:2.kmXG2p~at Ͳ:&Ȩ|0n:b3W3mHkhBC4iHDe\"MDvI^9f\r.=>9|e15z̅DdY` D+~l{ǸEI8Hqbf"n|AmZ,ipl( D^`: [z硓\̑'׆z[:C̃xfj巺։MNC+ͧ|a<:mݣ#3/̷zQj`MFG סAbxQ-]U.^a1~6(_-]83?֗3N&8kj4G16R]$'KMtr8<)> [mn"zsč$R.сƁ:>Vn7b7b0JYsm`Gq;8³t12KE9ͱ,lpp!$/3]u*e.i*A7RʉU|9zA1=cJ` I)WBCo7WG8ՁN4zL˃=5ՠ%hir4d99>,a`玂bbQ bft뀶a79 8L`M5ϛs\ى"j nMrL. xq. ;ls$ퟋ[|q ,Nu*ˡ<+#H柔3?6uj՘MPjzK:)ʟ@`Y,]*cAn`6'p bj,SP P 6'83bN\?ҝx ~0OIx5ϕ*rg(aŲh,z~:˦b^S1mmsCsx C+ؒ` Lܱ>z=7J xVVsJ+u:Z;{(`at=D Vڊ%y@n7Q$Vz{kAEi| ҈}$GTODꈼ/(0tA懥[as,Oݵm(5cCXÇE6@&Nַ{(?*.9uSEmScɐҒ6| nO;i%B0[e:{C(wFoi#`7T|2z䀻57ao$|Cg(RP @wK ar=BAscz}s嬿(rbq$JD) iB N9'XR).i"T?Lv'Y4w*OڼW?s-32mK Dc?O]0RSfvzRӗ?:YXu7˷Z,BRvSa06'xOQ5P`UalBGf. 11 ?# P"bM0f[`Y1G^7wt ^2܉JFCӍ3Xnn$5?.C4ĿR5S$,f] 8g*hi &H}Hհݘ@⤴8\>;ܮ};F͗怚&dvǟnYDT^ 9A_s711CAo3Hͳ =`mj z7|9.T(4%0>fJT$^?'c`^$ IqyN R.@"̉Pд/KpĹ^̣3i1ɛKW4H8}/C]fštZڭw>oؓ;EpD`$JIRlEixx\.ǰ֌[,܆8%MOe)BY23oΜ "z!S*J泰pJw'¤B)ݭݷGebaq͑BB"StD"_\GZkδ -LQy12%!‘0uE 4ۙ_#KQ㥬:VzU4< :|y(N KM!EpgX)`(0;37"L2c\b)s~fC7Aa A03O~ؘR \z,Kʰg Y6(P<٢qA|yM-e`1Fx6FzՅiPdPaq:Ʋҩ5^;=ÒshOg7GM-q*&+&KcuMM7BaKk5͇L(,]P)6e+t$yNT\wB<LI՗*vwysSOH|62 7F0bn>]$R;Zb|d)yh*)lN\n/ч $M3v>$Z9TѴ@W: yBȩP+s`r^+_ODVjH}$d| /bwWMwq^$Np(5d‹R3@%J1L f${%~yjsF{AC&/&ov#͑.^LbԜx C;æ[ qLH73qz^#`?my!Pus&AnlgD9r`cHv,/Y!8RIhFϲk4dFC҇`@EZ^YY^PPNnўX%δSZ! qtUuqe# %9>r([$?N1}e;q ]B%3_NʑPIn&x[~eщB6":_/ >!H "֞͝1vX0IpE"@/et#{؝6pc\{ŀH  B:#| ]zyM,B9_NtҖ8iC{z#S@ ngv nx Wh-+άy9B:UZѨ#Ku;ATE <)VWN8vyJqWƳymnE,=}Cj#$w\g;2]̮TI)""SIM_6Hz$}5ATb>R؆/ `MN7nw?3]j!#Jͤu޿;|Qyկo4V_U^Qs,8 L9T-x.&$2DHu!!~b#6Hu(sY$8)'O)8!߯Ee\<`r{f12L d,8CMs޵p.z 6} !!@pwBu]uu/! B}˙ٙKm]KO}>Wj!y}$ H 54\g`ţʱZl!oQ+;)GH6nbelR^i)u_Р \?$h BW~h(Tg妻ߕ&.(-A3D!UÕ? C! rۡFdv%ag 㾣TR3:T3 v:槼!gJֻ{Fbo"Iz/w]`׳jh@`FdCQnNrA?: )W~=BKGh5*|,!9=BoݶfkMiЗ5l{bpW&)`. ~Վԥ-ؤ "?t;L׺rrJS]/%v/ jݶ0ۮxPߩ)ȵ#̫3bvDvLJu'vƅ4G54Ex`YlU³*b1mt6ףjN-qFңtɇ DןN/&g}QWVzkL]sZ~K*3㬯}9;f:~°5% va"×z!``![}ƌ `! .욑{ sM>~RwWJERgOwW"8t\(:7۵_ܾxhR) 3jC$JbN51|wAG락O<@`.=qc^0NJA?A c5uvC^@@㪛!u yqs4^1ir/v4 Z$Rx"q,PqR(5J 'tF8{`i)GquT.{ ]F~\ڵҥ+ɩ5ѱc ҚkBaTfgUtaw9ٯiHn%0PADH`(Zƴ0kS1=р SVP4FfzE'GfmN,nf7;S`;SF\F!@.:):4 &(l^e橧6iAr9*v߻up=mzh֣C .f1.B]{  4)o?K (klOvBW^]>n$jzY79vD:#=]\[];~c=Z!)  TBUh*PP^@ ^B!˴k3a h**]➷9kv_Y0r{r"؆$LxPVq`ׅxGHzw"8Č aQ+i/\:Zr)5ʚx!>M^ EAi p4B<ý##}p5xՆEp}9Su:a-]CCMY!|\ZiUA(/P-iT |hcjHnŁ\9>gc )0os]3a/XgPٶ&o#!+JWz]GDKqoǮd׮$^[[sAZvkyx`Ɂ1lrkO¢(m]jWE%xBAdC47e31'cGJCK|Gf++p0z[zjTwnKcK (FZ_0]0تè/"AlT Bj,p6 .RJ?{8sgZd~@6p(BR%fLʗIJ'(5BO:2ƽSyKܩ3ObVK !9H1g"c,:ɌZlAP#Ч4J0YR`S k*ͩTv ĸOG6A{%{ԤxDnyӶn}%J`{Yx3F>́@[9x=!TNw7@DyOcLX 0[Ge CQyJͤApQ=~S6~(םgew<ҧD֧/ׯ*YˍԆ(^JBR3JPԐa!Wr0NU {lcO/o<@JҰӀ" _3X:iv45Q=I]Hl8 fS5dē;ѿ,إ(Խ$.pF鑕n?}XVV1؎g ]͕~+mOG뭳Rm3j!Z#1y=gv^ CECB]n?sDV99> Z/Eaw@X"S#J )^e}hU-'o.;gr*/}x)J-(|֫}qy[; _{bԏx0 VU]]הx1>b\H~3ϖpRn vn u kvipDXb αh6X[yvzIp-3 4C*T+kagNJ& Ǝ  fIZ5:#WJdw|ۚ*<io82N XHDk " VvEA@l,%ZZa5 rN2e1]#"9͗ގw8oOԽU*ĝ#QAW 9'j;ꑷzğU~wr ATɮǟɟ4xʢ EW2۠"^Eh!< YmDkF:Dkh{|@CELUm`ì0 !v6WscD=Ǯ+yCE[m VYSi}]<>ԩnF)oX pqL时cBV?~{Vv]M,,+Ȩa㤕nKeAxf\zis1#uLQ yF#M @0R Q]9p?珋Te %y/K_10T1uHSV;^(|rQu[=_OK4ac*Aƒ~< m(U]O#f`7muOXtZᬷ1|]ZbP{[ L@.v;Bw7ˬ/)œ?#ߧw%|B<],/pw>⌅6zZWWx\pY>8"y8!v@3< T ?`-"M6YgXZ@mu{ӳt{\9?rqsXBM tƨc EJiٸ\>*(.ru{X5bCz DRZx X8^Oo ;x].ulkx9y:y6:9 oP1XQ~"JzIXFv"@ -`^"1#omr"8TTɏ SOzG>t4T.S7(#9@_,> `;ɑg@sE)m,!Hk2/; fj&S,(:SRU?ox6]UPO4JS=8k lw̽/(HmWW*5Ҳ=M_'4v:H[ ް[H;QbAtHUF8_?'j@tnD΀(G[/{m>k~^琫nf;6YLG @r?~d]Ԍ`o owD-3kA]F2$4f~hyسc %o6(RO. )'&T.nL=g]3u,hGYL,L sm3 7QT\λc)T6{d3~HU?^<4Q&'@}ITd7M{bubJޒҸ:/sBL i:T6pp<${J=>dut5@dp m>d̉:ge?jU̎bbz7T0魍tW8\AUl禍TAB!E&(5UM"X#8fͦzTo Q$!\ЄU^<ś>?dž1P7cRt+T؏\ܣF dk}Y,< /KZ;AblMrŤ5D[;s'*|vJs*Ɛrϛ͇"i ŵQ=d|N$vujWƢγKw P.;{|hzZ&܇Jp7⻙U:dyhbzNg9"H0o1 wҴ"i55 W9jLK3Br jN-f)Ȼ@1;.!~BK q1^F]scO~}S(HAW R'f oZҶt?6-uo`zgmh{jtak!)2xaՎ[4"#Q8&4A ? ,M4˦\Nk3ӛts.I!fq pv* `qcrc½6'琝>=xp==NҲitV!619Mɉ6lg k8Crnɥg?4 y3;&k%X%e-RE tP\S4+@+׉g!r1+-u0*s1g%\jwsK ˹fNFjv-Z׸[pڕ9e|n~ӥv-ő!D@8иa ;6ʭ u ] P] E!|8^0"Zo/Vhft0@Ă U^[eۘD!=hd }X%xZY&K=\>鹨x8SSp\7ϳ@ *t?߽Zp679.%ֆ ]%$ZׄӫȎ&: Bٹt/sP\q2u͇:-tRZ(ݵ:ifx݋//F0J2oE Mڗ*G~f|;ƥ_#$^V -~%ߟugŲ6Ö3g%0RqU4Ba^iWmgTdwvf@ tb96PB?`xdϮ\Wuk*6>"7 CU:49&f~FBI*0mcݖއCm8ҋ)W]vӑwܻk^NӉZ14jtcZP旗9\ZnO2Zdqi g kQBd ? [{mS!hev>ݸqί`fO 9NcdR'ښ┶7wOsL,Qa4w0>@Xo `a fPj?/ͭ#;1ꪔm3'?B3sbx\Asuh yt'ɉs<0n@뗪Rtio嘕/\{.LV3 ~6oFus00W=[93\TI;pQAI_Cemϥ=ʷq*] sRsjqn6=(fK!iw3(9 Rky])H$yG$r^nKy'0MaH ay\|IsSh( )d:ODpVվ}Mc`nw.CX7}K\[bصfpFSQ'G[wx la`8'/&YÍ-wCgŲA 2[}ՎΆ.&X]65V5K~g{uR8Y\˞'gZށuDlk"QE#ԅ$rw$\]:凕ԀHǍNB9T4J5:Kɉ>_?OTOH |µ DTD "ړ.]Iat-2Ҳ3Ťf Jq#̛ڳ? I{_1Rj&gM/SY)q>&dTD,jK0Xw檍o<r[00B0]I@ŢRHx7o ;5{~hZҜնz< L/$DQMe$ηစm>e|Rcw fz ÕfuLPqvXjQqT~\-b̨b;j9f?bKބYqqaIi3x YTU몁{(5u"S"3l#;K ,&CSeiz47;/7v$ط;4 YtlcEA'Ԡ5ݍ>~J;H¤{j%pT`ofriuÔe,l Q3a̴ f(t7] Z`8,GTj=$]m~OC݀ 8 oʎfS (RqzZVl{v%z L.hPRD!TUkoieGa6kBo߃.|9 VB G2[JR' [@,5<sa6z3LಓƆZeCXq d{jgU`ѹk?=ev57ы\<֑"A9'Γ^^ȑ>&LAm=̯/6i|9޼3LWLB`__]]i^{Cs}C0oV![@S/@!Rhk>#x)tAth֎Zg/pfk8Z[?H7;>N$ 5xA/ׄJ1~%o[ .F;:'Mj!B6Y28Pm$!h{A;ݽڈVpҜtιd |ʃ&X/[is}5jf7V.7b[FߣFjʏ?V0&D&k"(!'c EJM9p8rX@ 歈mFPKwp]ルgM\!AFs" `]>UApfZ!BUEI K~ލHp=`kّ;_q}VcS=;I̎_b$T) S{̭%tqӟFK##VI< _Vl Ҏ"NH h͇xS@$ςrFE(5m?8~ģUnJNVגmZcu1&I̦dfUiS=2ړ!Z,opV ,2ރeiczzi{th0>̷AK7G>p-:ڑ4?2'/2. /53_j R{vR\&~_3 %jo^۸+^u^,vCk~}icZ80/gHȸbɜk+mo~}KW9UnRe< @ȭD"u5fHU+a`.~.u@&Tϙe_όuBj wGZNPҴhNlhZ(RPLYZoW"blpl{E1Z:oB_ tGBlj/O-|uΡmґw"jBzU1-(wuiQ]a[e_F)Һ/suu^ulZt}]iSҋ?x?Z~;'uF2kYpY0Y@ 4"R;)jXmKO$Dj3JLs7ߔm{ɛW@Yrրԃ-xև}%Ɔ- ]ڗڗEBDhX^šq~$Zw1 SQԚƾ%Um{FUS>M*,#M0<F9 >dƕm2ЬiRqc6ڄ)57#Ă01oAes8dM&B[QyI6T#r"怬}1߻tuCZ$Z5Id=3SyceXR?,/A=+;|RR?L* &,dzDWv /ePSSipHt}VjQfp5]00Yˀ/6P` :nƙ BNRbNAEyY&&--V^ZT0!EKqSbb_CP>6ӓʑxO|¢KΦvnXuT$@\pP;A]m=;k7 ?N6dL~nؙnևM{1  N +_}+"g 翕Rm4ftyrZW+}Cr?@&TҀj'Z&FK׵%)N%QM cz~-Ma7z]^ܱЦ1'QǼ69Rԙ?~X&yܥRu`LsC%J MHy> /vtN:@bCUE@ȷiKCe2FHߤY.>l=3<*{pύK37rD4:7%QgkaSS2m&reoʤfM{Vί=)w|W.8XfDHr<M]byZՀ cGͫbr%9-@GP}ةagX sέv}R`RhzcYk5K 70 7|=dL`D'bN;g3NeRYKe6 E,z8LZyE L{+C-%&PaPx!ɵg粂Uq|oka{=Åp4DH=;4|%kGQ~iPA3S)j397ȬZXv }dW3'彃ӡNT:"1罠02Y*]'*HXT0AD< pIUF}hJ q T@DL،emG0N?nYZ`{!С$б,ع&Ƴ:;=w]~z*%Hc'ava8`#U az4xV'0hf`苫(p-۶Pf{r׀ p#BT\,`՞1@xeqOS˨r'ڃrj/ ^HI!$_I v../ 9tdw.35>]%~y֯HJ3;39RF& f('ƧDG_k;Oٚ=٦G &uC~PABQLʹ 52u{]WRjVvٵ^P^(˫!7SO]?V]9FCM$RYή{k{c'79ማ.&Z3UZ;r,Vh1I4̱W?k]/hB!7jATbahpu``Rog@n9dGFsдݹ~0Ю.ߕse &\1(v* |MN&L]7^ 6m.$N!0\^Aj^\PodS!o5JRL!p44{Ph58JE^B/QK+^M-6ݢcT2cކaN'f˨-pł9NC 0c8e=dgoh:D,"S$b& xD#r+MvdàrPR^@-'~>v4pPRhJ <D5\kQR*p9Ϟ HF5]DvRwґhlT>X7PAIzd+`w!f%_q0\MـҌ>'1GOp^rO|d5OeӭpwU <) x+l|QoWu.J(.]@' FFjm&w~Њ4J"(#¹YxHj"|:8IB)ov-WJˤA>dh)Ub2`\ٍxmƀ(ڮPF'9'yuMq/7W]_qmwK8({\ws?tBoy)~~v5x8*Tsfc1DgO~z*ZB73YI噝Π`P1jR:ԟ_5e f%8ƈ -Ӱ_\e\g#ݻnroj::78@Q'4HJ_Pp38*u2=aK8?cu2h/Vx&:e~S<=МgX=`}ԇ]jA geK&EGoJbÚRqn2~4knr?4K bhm_WGr]s̳hYEYbÌ0xyI22ڪ*ԪUn$m >Q} " ds1aLKL<mV&'3*KZQQ[ _5K 5q7c3],Vbxץ-!ف9IjGOeАNb?KKXޖH?2 1U[i\kVoSo:Se^iY,*-qʎeFkB܅u Vv8[vbYٲN1Nؚs r9s>t7vT?.S$Gi+"$p)$e6SR /P)8h2QWE3H,j;~MCܵˬD[|׸.mڑzeOmuI) go$Y B 9wXIG2,W-poq`֖|d 8; zao}O7anhn^+![F)Z ,YMg}{_KT*%ANY [`L ՓoMm~2&P-ޏ0\t>C}M(p8/5x&uk釨"}Ӽ 2ܵLs]2h c'9˃5Iǃ/- w ?0gcŘE 7n04:!8!hC]漢z>>+w qwwO@)$.@p)m:Ԩ BHB܅:ssg%99g_o8 # TBxY~l$6 mÝ0xHq SZ&^-^.+rzSCFש r*7jZ#t*:cXwXtvo;ܾױ{c2UÍkt QL&-VASu,.)ח!J"i2rI7̳]SSQgTyR!\eEq`&b"~"v|R./GNýloy5  @0sczzs}Rk:#K#4r4 Ma:LT9![~*F# ֭g%-N@aQQ%刺V, sp3WHRƥ5r{] ȻAJmF7SKlStM$>$Ȟ$Ɲ$U/Rݟn t!0 7y6v/dRv] Ԭ](Htnfߊ㏛".NJ;x`m{A'Eآs,_ ~, !c`翗>Ξ^ȟ\NY, mWj7u.̟-UnKPo#tK岿 G&=1[Up~lb5-0~0=۬!?XZkFԚ>櫊d3SbMG'`G ۧeRC ] |x yvxF5m@ً+uȄj) _WǙvAP5I@8{a/ sRu^$^9!.0N6tp|9I69=*0ޣ,_Uy$>Awٳ"lz , +ZI9_f%C !P9tم:0#6$*$N0XY.B{4h`NlT%F1aZCA0@}麈kvn0ir (|8 > Em cl  򧕤vvq!ś( Ӄ;JRʅ?PS}@m勧''_.//-5hiռb0Cqp 8<w̻vYR*l0%u`975kxx5yԹ8Ժ7ϷTpųUQ Q&Hujt v2N* 2V`3^},4.-lԣ#vhxћ ď^~ IK4|܉*@g],.Wy ͹#F\APEwD ~S!ꬖSQ 3$EGG.\oX#+V}{o=Mw˃ǃ8]նkHb۽C-:~z݁Junڕ:tK,k /r'{Z t 6+>g.ED[zFSg f _=O.؀BMK"t[BYߓF\G.J)ϙ . yq%$TsC?ȵ(-\C>'rNɑ2ǁxjugOJ^w0?Te! 9'IZC14b4 "& ޴hECCYbct {Tn @N|AcYX7nq^l.sN+퉡_!}OވWnKpvSUs`k8d-f{!Acn-IZ;27аDcᔋe 6 [x>3_w/k#(>+jU0x~NM$]O&g 6=ޣ9cdcZbtDϘ3k,lr-modߪVFkaMM7}~/}ļ4d%#o-Nv&G8EBq mdA 6;.(I&!"_ -LWc]7t›WU{`;h@/#1R9Jc5 TCz]2I'(y 'Ar&HɒP-MT4) {YWyՂX!W(a.fnphzz}=Fm5QYflTIIgx2[rJG3V^ 5an.^gzmH2׸$~ؔ瘥HNU4΢ĊX KhmK&UK87WͿgeY|ѹ Rs1 ?y1 >fWDzc܋ʹeK㥯W[ /iob&XמTDW\Z!N=/ञqQtNl.IC>EZV z鮦Gy-hR3f ʼnd3`rE8]|틗yp@} mݏT; j}4F[u[4tD[{`{[eTk^c\kSn/ /JGB+Z"VoXwఓt:n/6@X(mio4\,` pYXKU**U5@/h[d%.s<Ͼ@،yW{#*^AkzCn$)L90glkp(wtUp+w U R,u)t.sn t*+t+;`'A߿zvewE3鯡-Qԋfan?ny>P$ڤ, AXU.wqvc.I\ؼލ39Q[|Y6G3}릓;ٗ${4 mԋb@s~`x]YqHo펷+53CUb5+bu^EvJgM`.@,X"\:Ry"E%V*Xh(^ryg I?b7TtYEa^dFA`:z'ķ[^~UL7~y{//ۋ˥ UL*/ Xj2C"#J ::',qCpo!j #RSYi:5^fg.wٟ>Ț~R염󩐖eDl~mhqǂDóA \[<& F"ج.T:uﮈ\%Z,c[$U\-W^\&P%\-V!Z[]E"Ne@aJ7I%-~|;v*FiB4@7*4W lC)4x.ffo0/o!i E\|I$وt[4;K[E rٌ*͏canjN}Pi|Iۭ RI"=W9R  /?Hl-(1sw-dHkG gZ3J'O>-vOl+tnmBrwYM}U6L .C R%U!X ~gMrJ\:-K?(FJ`0Vfr 4-V6[IAGa)F|'O(qr.T{ qaS|:OgE:$˄O]a=ӓԼ#ٙzpH$yvi7,譂:}^NiaLrI++߉:q9qA3#u%]rA L8OY=By8^BmAa1FmI9!K;Rx "X ٷϋIeIV=)pX8.<%mGHV76f_|>p6&fk9 ! R&Nvm~mJ ́rx#ȷɷ+tF)ĩ $nӼM?Q?^/AcU{cկlڡ?U{0Q{h8(D/_~ʟYE͟{UjqSz~UA'PEr]ƞauL;cih]j`> E5}-ĴIF:\~{.{iRpߋO_O56nc7h'cs7z\wM2Trׂe^[\gTSt\GjOfWr{\WLo@*@ʕxa,7E(UEj+k+j=I4zY߬| '0_;r>@u!q#Pc,ۃO;>f{Dq{/+tQN$sMDaO]e)Yo's;ʢ?D[%1[N_`om0Oﻟ4p\aMo1ݾ36[3ZlKOirahd3"56uNJMZ0)nrRh0qO[[WG]V]f8A}z]Ru΢9&UWG1C_:HOn]wЬ$N=Y IG墕x);Yy/R.K- ;g"|xP/b(TxaD}%ڃt tؐaDLHɵ"6$ߎ9SH?:c)p E$ϖ۳;sR[*"&A-L!|[jo@WyuwNzɢ9-G)/WW9]8ʼ lJr%kȋ9* 8`*A0$1aDӥV4^/aG˖b@ %$ S^)]]O˪_ۧ̿}hBF˙1h ?I QJ$C~k(5-~I67PoOoݛ<{'#d#N8[[bFkWvb5ϫs%{IdrisjpY]4ge{"\,m(ϡBJ{) `wkt?,y.MPqQQ&I5I!op%O)[.d"7aٰ]EcsRv5gcEt}RdőaqR ݸErPmW_V8+|̉=7L&;P*G:M9r^ ;C;9O3< hnW-_lOu)w(c+%*w WF+R'ȎZ-Ďo!E$ςْFO?FOs|# 4 yR 4' 4v_|3[2f{;)^߼w~ *=v̲d/—oauɐ ND2pvҌ=9oA;w;b#X/hF_C[LEL7'r'xe!'ueDCeDa.KdMjI%+zXRsRe r* Vk 4W?1LT q di4|n䐫LﺓGՉNt_@lM`2tb>:mq#(5t7% _7>bAw]_o~?GA ,E\m$%ixs6&)$Ŏ=ŕ3͋$R(UKI+I%3a5 Hib y!ƙU.쎗ZixLIX'ܐX .1f/0,ShɞkžK.ӗ=j w:hZXe(gIR$ \ %9fDkj>L.c6ěQ#D1Ӎ%)0z/A][VDl [RŠ"sRaC=;-׃;*ӔZ(B ǐ@69؏a D$=;9F*tK{RiJ$&JRKlL=c6Ȳʲɰ,//\V H|ʼn1Ym OLORR 2LݔG` 4Zz,f6Vf&_޺]^6n^2U" aрgtXh5e=e;zÕokڮu{jwoI\-~#Fzĕp&WVG'op_xP{]c6p%ކ_&d< j}5J ,5 `;AHYw,/+ x5LO]ʦm*tZCz"µZԫ䊝% $K\uLTӬr|9rjxTqBS< 6hu( I |` TY{E!EM@iĵq*X%~anlrx>j+Xr5R]\ eqwNXS'@YM77n68AGWC˰+w˺O7N}eV7lg&8ߊ/Ő+OD(d9U Ҥ„TXctdչqu՟?]{>ⷽe]31?_o;rrȘ]q=XXZ ;4Kɷ*4HT8~H1CSB 39m2/np؞x ؒNUM^"ׂ7ךЖ#6D$πJu88r4H PY%ν2,( @c늍)8 ྂ 3Wm"7"xY}~+|~|}|>}Hf][i/\ U(M6L-N:"sSS4yD5e HkʗuzUHC] R(WlĂոIS'P/XG̉)9guZ=|ѭQ d(LM; Fiebjqzzeym'HG;jf 3իũ߿-.Ѧvӂh,I#T%5d>Kd-\%Vlօуœœ݇tx._V?G``N}hA@@JMr" 0"~Af%^%K)z/t0}5,wE.^i5Rٱz@^ĄԠC R)d7!`nBrǫZ:`ûQA;/sgϑFL M8mIitaoŤa(p/HA Lm۪LU<-'Fus;Tb7Lw~4 uxJ*]V,e+v)rɵdH㐙T}=V w_ _-OJ WWH_-O5hdh-=og [%)5%&5F<ՆFFn8}@(V>QR,*&He~M@|`@>Zm||D l>/"Ra*ajaAݾ H!it×dȕ͞ *Eب Ӱ[ XȺ!:g5i: TE$%5t3NZJ(X9nvpGcip:%G$HEm~7|4ld|(fsbzl,a0@1ʫOg菾[o&Y\ Tl ShS V RT PT RB EH1rd$M/u=Zf,E&JM<2eCD"$oߊQIϽx&wkB9L?f%Qϑ}Uft/Rd[NɁD٫ ԯūE˶Hw)GhD &li:䦄 gk'bSԉq3P`)ZMgF fo_szns; 2SWj~X^;qW#Ćb+߉S u{qBw$^ rs3^?A.V夛R?(6D fr0(EJ,:#=h޶1ܼNlUnir اmpR!5|/ :Wy5W499;U!.+R/ ^.7g%.ݼ,fڄLoVO;:G U*s3\q%>L)|;Zn8qcG݋Vw-֠:H 6!Zdn-^9\>5^zG;%5);Zvh$-lz4A7R#H_S`f_P$[MۮݻS3x_jj;)%;!%Ti_qGy[z( pKt޿`4E)bǕG?-~/Q^xbD\ Cz(J77qwhߊU+#ZFH٫aR!@&{{`~?aZ(GrHqdv &Ck-[ZܽD{b;NSU l3(Sc^FMML.ҦĒ~DPYiج<ŧ7>߽mKoZX;H+X `I:Rhkg%mjߵhTB"CEFH%‰Tz7^ 5B:P3៳`@ Rnՠ̎`ֱ- %D6Ɂ#壯r`xRyɝ3'V"5ΉUQUS**\i/Xh/$q^,H؁ to*ZA" dtRc7t5(5+z-3UYvPf2/kwkp%><>hih1|7ℯŊ F t^ES.Qmpz UB1m$۔b8D(]ϯkXڱ ]frFOO}^Z%]+\) f'r\;.ȯ7;pF!fMl:"NB2^k' XSYЊ駥ϊV~ȯLROs>ƞёӋË͋N&:W߈s3^J@__O gpxgz'aw 2N \Z6T?#ŧ:Ub[[lxm81e;r^;bgάj7хɕ.)pocSYq"8y.O__[]EMK[›ڗ!@```pNDeJgEhu;PjfƠb>vwH$q.l9$ۜ›.PƦ)n5@"L8nxI8K,R3WɌ5zWVHVo( brvrzqzy y 5yջ׸V;85p68knqǞك.Af/Iv,7Q6,)N7PAqcpzԃ>[3ꢔ9&_^Gôu煋ܱGqZh'*f]q%{|/3Q6wkGoYdַF_9?:eoNvzI^jPzji?n%?*iAA+''&̋ʶdi$-O^[X|UEֳg9S{ Cfy58(?cj!i:Crd:4ox.=ܤ!aPhmБhkDJ:}{hr+l>}Y#kVNkoĊߊ.x#L`(BBqb$0ࣃ#ذhdplsnWbQcQo%#!\kUe^]Y f-)w&5՞(82$P̏笝B>{?eE2@3TJ_RP^L5gr[.4mFGwW?Tt3#D#vAh;$Rvԃ{-R2q)"B E_ B#~=Jp t`~;Aj⻽9|خx49.ln1lR]k{9>0E["|a;̬.t`{G>ƌ33(5}WD<Ʃ܍չck棚EtWˆߖ.veumK KBl>@3Qp6KM%fٶ 絟p.eI{\fc8ip-T/XlH L *` W%| g<\0[r#|:@13ϑrŒ5l.orSyLtG'm;dٻp'u?|QG[e==o!Gw'wG)n_ AVk:}1}qZ=Q]J}7v^Iܦ4+ĒZk"# | UA'$珲!AZoA֛ƕ\͛owwTz";8wbs(N䇻ہ\K܍e(\~{q*bo )]Wv3Dj`kr}8|ѣ Uvx+2=8Rqbwv)ۦsUi~kGggۧLdNN1MLG6$`r%L?b)U6ڱ}^?neۜqڝ:݄U] *3&ۏ9WÛ;>zGmRlz q/FF0k#nNjߊ+s+Fׇ^to4^{ce+8E:x"^mZwg5ofD ?J RiE6vٚ3՞'_H ܸJ\xs,r,2` C u@8,0#FlGkފ3 սa<fx+-z}yW!┉K|U3qjrWQghWGh ĆZEfxR#E?]ܧruLW3-"m5k9E $.9kxw?cR|2^>EH(bk/efdz+o+ӥS|‰l/¶g̭NY_s'IURE\f]FA5I!ɰ +R,>p+^?l`TRa|K5ƀ=Q8j-6M@ 6 ȘBB_+3% )ީ){ t t.EaU$$DKC܁5t6;$MΝ޽&*I:-?iue[kd !QycV:Z?+ix=?3?<{K-HZr/3F3 ƪ릗':u<U1 qݑJԬxX܊k׳-?T[6,cR(c-Aզ$YI\Le֨w n e8(ʇGߔ >FHMh@{{o>__+w{xߌU.B x8 `f@cB23 zL!\H)BkR,Է5DM%!H  $ۅ|(mƯ}I%Gl4\kNVNO2Ӎ̯%YnĕH*Qy_tya|6|%i0u Q}w!)cɖɔ;b5iFj^TFoSZj'hc40HZ՛jc\_gi&~3T,@挫|ĸn{|`fvizjC,`+ LX^| DKZ쯖q$ ,HGl$ }4İ4Qf4')ؾJ3Q\lXUrǐXJU:)%'9h3Q!-}0;>*lBJTFN`΋gO:ZyUnl:bvIOYAb:ֲڢBXdW=S 9gF5ψ;fW̗Z~̓S:241ic-b!هF+gq]PB7~~/I̗:[>$qL3s0H(5\@ w\'E0ۏ䷘HɁhwG`|8M/&Mϡ  ^G-I+6> W|W7boPVS4kp]f-"[=U}dfxstβ١ d6x@pl˦9 K[+̣|&O5/})p$}5::%-[+9"/L5~O3y$nj׮RoTSiWuݒodxCI?d; Ȯabp-15?vا۽M(f[W#doDc5 =:"^A@dqfA) M`q)).;GؖUh [)0ʀ1be&S.U-WT^R$cU{*{h3(>/G\=3WP $/R2%[V+wRl SWC7B;9_E2 '*g2A([(تV8jm5^ʥhIhKJ Ђ{ ]m:^ע0*zeV_ cS+wP$NrlwG H)T-TX=ƗZ @Vlu D4jCmG\ e ;9Sִ) - -5J 'q/û2]ɛolл{ ^:`Fvp[|Np?׹ aԄaI1!ШPC4-~ll3"ӓ[Yfeu^= 坶?|7? y8j`fYX2e> @VSj*( z=&_L{#,}dS $ ع|?_誝א=4u: X6nI#VݫCо1-o7}@Qm\*oD+ <omS3y3rܠA; OΔԠ!%Cg 4 r&S J/M@|L8dX|j5U(:E>/g 9fPfIdx.YB%ȥN?3 R*5+b_bD15H*e{r!+rҞdU&"OvvZfEv I!'75sH`rWX~whg^(5BJ)Z.J1A\EWs='vZUKWǸ $~Kc,u!\2@|AY%@p}<#7RX!ėKJ+o^4:Z4>Z)kԈҧXKp2TIQzckHfW)]+1 ѪV0MB-HK醁i0lLl\LFo`,Lݎ,]e-3]2(k4/بJfR_gi фC!%)^ˑ}0'T 69Mhb|K }K%ql:݈I3lTHQO.jС?i H 5+RdG6$ۑTpwR5$nO W&{`-M_"AZ(Oң;–&)9)$uC F:Mo 8칩q>3UJkqK(r̶X,$͞e!v f2 eairH %> MaK$!B4[%+ Thabe1#[+]%ᨹ2D+ߎT{SC%f090z6t ɉiV\ɡdBGxt_LZ(LsS϶ʃ]&k8>[hUc) O|ot#T9 \} b[r{jW'BW9D=rԱ6Hn۫篓6.ʧ./LbLAN =HPUX9GBCCT3UC{OB$RhM緙޽|:G'F"0]RIS^˅O>.E 6\͉"L9\|儇6驊c,P@pC…IO2X\JA]z9`g:L!*.tbH*ݪ;}tnԽщ*t0se |kz5dU!9`v8^wRv'qw^.*VUʝ"}r@S&7t$glprtjjfnaqy9KZ&+L"oA#?UOy&#$(#4Ut+n*盭jZ:BVrtȪ bUɗIzjbGmOD;*g[*f[%CK2v:vrmtdB.ZHg >:mE;jqGJN(D"G^>6,V,of% j նL$O+iZ^j]yH ra볯|3\4=ַu Es_+awڃlF:JxvI51olsm 2n\  26xiܿG'\JqOEseuEW!=^7ZSHxaolmH[eo}^p>>ww޻~i ?}p=p}",k>N}kICᕝ.1h9?%.GeZx@,v$_˞}UJ7 7YTD E~O'X1Sml"#l^2Ηuyvg?-Q=hIU}{[rE۸1'U~bC<@}]2As2۸;/aj=cí3sg'ufw\$Fq&ol6xJ(AӺCgkm~c0G]UYyyVVy"b;Z/@~}NSᨄs7ΨkAZ(H(ns Aݰ) 'NP~11.>ԗ8Y4o'="6@ hӶ0z>\u`W-S r,UJ8F@=J͵۫{-VDXAg^K)Rc-fMMXW6\,F[q7I!.έ7\*øs,:3 ֌\/[x>944r~tǣ_j-@ɉ޾Uxd{C6Rgid)}L*N1J(::&2(8a]@p"6{q˾vf #y4BA_ߺ4{v^n;rȂ7ysW59Q.CӾs nOj6'诚{]#EkYfyJyB|V?νU^=o?WP#\X,aRrX-j jfk)t#R'j-f=Ӷ1u`v) GI3a7J$fGMB Oj0XGµiy56'bLr4eO{c@hF,\]Wz1X)]1وȗڲEI 2.n v)-%3 9962eD'XĚ eg[ai1`ݘ<43hioөfM#ք)z`H__{LX%JԜ]UC.VȌ],b׹pͭrQCKnSnc^C.@:@.~bóB3s&봥}HC?C6?Q57QU2iL_r Ƥivl,4rz& lBG27^;$V#\6aٶtKl[98)`\\\T*U`WFjDEi7Fj5h SoVkԪW-PAz&&={x)~Do 7=Wj&s㾥ed ,2K/K2{°{{/?kANlW&ȅDq9G1VHvni/F+ˁ묛fyR+T Yoi6 &9<@,`=f$WvBNI:mb$;rPj@$K C2" \ƺj}SG5׿?rWp:TǓJ)(j|?WR^9GТ/-2K-8Lb#gΙYg@dk7&#gˢ3)pdXZj;;kf;);)'S,ՑsZ:.T8fvDǒ'@vz}zfI`4H#s_iLG-dMV,h~Ѫ275Eos#_cPÖ- HCzRW1#1ȇv|]c%t,>(/YR<9GTPk 7JY`Bv埉w)\?-ii7^{^1?59*ojBz Aqy?!bhd^l)Ӯ6v!p3řt;<. .(E=;c6R=fyT!:`Vֆ7ph:H-38U9747l\+@1@*ӕUR-.M90Hϡz,ga);à Y5 <9 o *4< |2"ʒ.w5[S6@O ٹgI~*g,d̕D۞I^ WXj6D nH$I$K!= .Z'5~$[CPd2:,$pUMuD녺 1#LzяS1!(0C;sNr'dSzqwZmr' ~G>+bF,ʅݨ5y/?ⴜcvsvzfv.FE&yF6:g5OUsdqOyKvHx4L㴡Iy /duV<g84^t)t6 'ݟ/gmrC[?}4ǟֺ䬓d{L!笱 {kq(.&i oƏ t3>ҡh zOL:lp8oz<ޙ:(sQ϶3<ǃtLt\v9yGjH5ŌSX#d#}d X6y)<-ġMF7K?V?o5-DА8S tT z-0Y(΢4 nNP9PmfH; ?ь(Կh&˶.`g@’$cK=CO_?D_=ˆlBy>L~|@F*5ާA($.jڷ#O$ d2B*݄jKY| 9BvSh5jH)Rh­\%%NY6k vL`:[3T!{Cf4/i+CJuO{wnA?L@'Alass]/ƨ8]Z+Ȯ5d+NkIEp,(M/N6I$Y- tԢ .mC6hՈ3V'!KZC0?釅t2uZ&wЅ)oDW\>=7GvZ}GMca,G$kdhp$b%# Ċ"A@Bc"R"1'>eW(6?X0(CgL_(J"&3rZ{7hI2cTQpAad++x31B\ߴA84n# cu+riz5;nqorv7{P ZN&d2 ĺ1 W]Mm#jh$p ̢Y3+.ΐ Dχ8h,+( **G1 v$TDum-s6LtW#[|:f隙Ɓ1BĤFzZ# ? ;ϕn(UvmjgǬ YX!o{ zs~:7ƞFqY_ h`[5-M4WT`a P5\_gQ$J$NlGĬ1ܺ4eQfCMN;A_KOmՑ 1]%O~itxjfrvfT f}p %nqGNK_ȒԜ{H1aACjJ-*ID*ʭUWޢgĽ 2;kbt(}6+t7@欁JM::qz$٦D֪79b!Or6Ȁ3 T6N7aj46xxrYjsjQ9$-R̈)7Z>9X0,kk1|#u0@ $ Px/ue2X,Y7QPkCa:HW?(Pڦ,_S}EؓW)EUvmCz 猍p$$Z" |*%%KϿB G𲃑)vU^\ɪMɑ]d$M6ȓ |-|MqMSi #tp&@:S e,-6Gi} Բ顗ܔjKDKosٯ@娵n=\5Erf+Inp/g^{gF<_=wP7D?\9;Z+Q;\ᬱ8fR鶊vJxqK6J lG#EuxA^l%2nH>a(C߼M<ٱ⠶$ZMj1JO^8Iw(K->>}󷯿..aͿX@ ֙_j :=/@;Cf |__q*BDKӏV~ϫ*[UVˆI~柍 kdQ7੄·M(mF>87y9Zk//;r[|&苻ȁ©aœV RgoTCPҡX3P7b|zRLhp*-]|Y)fW靷V>iKwx1?^eyv%NJyʮLzʃX(kBD$?y]KC6B;"2YE$t#;L铲xas$擛 =mad35C DOR3a4rhPTa޼ - ȽK)l.l8t5xJQZ! +yVxTzk} j.K;˂L+Ln%碩% L^ŬӪۺ"4LK/r_Q[u{M[Msm*H`ö&aP.ttD[z껭-qS|":fQah ̕`h).ԙC2էfz8dZ$ppuqhPC:z9ZTwHRKZYi%sՓtXyB|Sv ;X#@)UG9D(iCx#SZ$ʚ$3PBA3#tP?!J+X0 EJŕx`X 1:>X & Mس! < W8*ǔ\;z^锹DY aea ?͛n\elbrSfHeq$ĐCBo<'~|堏!+#FuԎ및iSW٣MM>R8*5.\g:ȴP75Y3: eL`j1dOg/!yT?΅wCqDJfn%uaÇOT讬H@3\CJA܄uE[? Oޫ{2?ص8E쳲݉`,4?X DsSYg9R;ɓפVT]BvvYÙT4ѽlTDAxX1ed]4j]*:;7:79  jKc|\t<pr:I(+`M6Ct< C WRB+CB#4 V6\(5P?e^t0LW__hbw?4vHT:|{^_If/ni{aBV.ElxM!#Um[ݗ[ݍFd3 \VvB3w+m,"Nx}v/@n혁18$+&FKRo CSgJay &T#혱6yP承Fn5 Q TOR7!QdO571 pe Y*ӌNRW[xV_=xQ-&0{1b^x3Huj^bb 4,j0Ia9pdn3cW[@ڿL#@ ([9xQ%vpYycES5D}tCE8WX!eW*M6Tӣ!1%-ce@/:aY._b#OlK4sT+9@U/I@mM=J\Ա2E`iN K6V)yb6¡]Գh.7RE Br'ts`"I^!(`EbDN_~^ p/{~eFo\s;id 5X*9R+Zz'F'fFG^T͓),֬qk6jp2k1hp׫r, dq냴4j}ky044 a777̫_GCKC_^@t ~!w|~hG Ŏz6m):幰s99^z5٩v)֪jNWm:24.w2UN5ēLF86G]5 Ld Me M$J-dk̕ ץd À8X׻ 30ݠNp.+q69^PG?|쏒[9(\[b^؂oW`+3ʶ៴28ۏ X?Àl/jQs0yCu = DE^R梊UZQꭾTKU<se3$O![G[ s8ٶ&)3z-ju3=MeW2ۆɺ]'~kH/6YB LǠ ;"]gHfE `auy:7A5啻j勤rE (x {}^'~ Z  (0yk.03>>7j ro DJN^?җ[⥗뮓ŽhhvR霩|9+ٌl"pJtcbb'yIU9+vje}͋mF`fҩ7+{T0 }e>Z/X?+afeMѢcvzl ge1]+ HٰwKGo 4<Ȇ؈},$NR;#-^Ӱ;ߵ4y  iwնy"\st#vW%@-QyH},f +zpa,QiǕ p"c܎ﲿoUɠcMVk,^N^ea֧8:ә{}|*x壶x+mX_b9ē:sr]ZA}9)kh̦pÑVp!urO N:eMBDB#+d֬nҽϮ}mE5j~n>XU%NEV:"bSBt3 tF7ϔʓ= zy$IsdwXL@G]_C~ĉ]!TRovz}֪xBx]`gjƫS\`f!jhYK5>T!L.D-JiҼʤ1TXdZd^dQ$*(I3cՊ_a|&fZP/$xpsd̫"`@ "tLB7w#ʴ'L_U(WV݊mj#sSMUQmL2t` &XjЗ_Sm:~?;7yx_6?Z nZs?{|&{+ݒdyM-]@J,k$ xoE',Ip^!AvIR}>)WoŶMKSQM^ZW=κ]ކ#Dcl:7Vǘq,w sF+FƦ*1_`pn*Z:[A^cBAH ݌ ]3h<;efpy2ư4cWek/)|g}}uuӣ0Ժ刋( !.N]:9v~UY-/0C[tG ;~efKyUXZPg^$b!1 }ގc~nЁaaܡCOsL|̦߫AA -2,8xGwӲ>t23= ˃w3& TGz&@19l@90&* 9;'OOiv5YTlUļ{Ka qHOclBSRs +&W !ZBDk"鏯]XrlYggk=j@oHO›NY6 VƬbh`9$H"OKWa'P8xkHaلmIr;?U- +pi"dUDk71!k'd?̾,y{Kl =Mͱ_tո :{l;C,;L9;M^2/85TRůpαP*f(+AO51jm|,d' 29<³/TS󎆑_1#ZԓBGW̢,>}8ǝg{V(4G|'0utSRM5 5ҭFΦ ...!.m6uB7TbZlRf^^botIʰTn*9Ćs 9mM^7X끹HBhSZjgʰPjGXf> 6D7cބf-rґFYPtA'xρPc\n~꥾ק v': N4L͵-̵Qdiž{uϦ7NymO;A;ρeyMX.$:@&dX)~nf633u[Gon䘿n_vӋ^ܳzM{$q%n C,ΰ$%z:c<ԎCmsӝ3p5 HLb+^Fv]|jƠ&6XC("/3W߫:5$O6$fPP 乩U馚I'{g1=>s $S}-0 +Lfsl 5NqYV9|'R GAYyiO`vav: W yl^ ;O>.ǜ=ozьFW؀ܻ${Ų!l6! pe{~ !l߇|d!޹o9|"+(M^214Y "+NT y:Py:F64a0Y8lYCyp:rԪcPɂP Hw. %;b sYegY//?ӚU+-ttJHK3/arAE "]& a(9KKǴ B?b'WC4*^;Uy!Zˡຑ73GUrޯ9ޘ:wc64HbC?ۄ u&ir:wys޵SOؐմ8 Ju050yOel0P`]}2ikt Z'u%/=‘a+c7[\U;x2|3g@L@pf >`-L }T8}'| \ٲ(tG.VHa=[3Wo|ձ-jjidh >;y?T+!r>"rUί.׽4hPU kUlT$znUL[[O\bR iTSoϏ|t@S$Šm0}@NgRh (yT-_1\jzf.Ϊ}]'NuEPojY'}Z^}0|K'л7]~*ih_vW :5t {jב5!/?v1bM\<2[gu(Z}`p+ #LGQb٥ .E z8 ? FQ7{nQS9ڐSCLJ}?>yytK5= _V_Ya;p+B |;=ОmO4 n7c45 q֎H]{u?р1bM 7-T`C_۳3Nq b&'o[ꁰM/¿[zEm2ycbK&(kޅ+ p^݈b j3ڂ$l*0Tarh02kp NRڥZu!<d{>ս427t;]>{0}Y0&*P1n MO}ލOR=aĔcf(YԳl>ŤV0@-"EC!K.όʄ|V:ʢ6Ј+ VlVeֹnA.`nE>VTA+FyCS˛ϗ\;ؕ(C:h2{c*\<ՋݦϾ;~wPSse *\{0Z\]~q+ǿDd8r"˷ocRQ~7kߝc =xvϩ7T/&CV6dKQ$I-\+ U6Pc_=䬢X+ԻuE7:p@KzPGQ8C CMklrbfO<{ɚO|?;w3ӽ'gt|1 #Ӊ6y/ݽ?wƾ8ttihU|=GVh[9K]G!sz}:p?FJz6\ث[:D~~eأo>2/ $O.qM,p%qëM85[qppىuxP@<dt {hT'CCk3<ݿQ~,vM76 ۏJGO2]'JTEB!`lJ9c;]c<{/t2߾.q-"_d}iUkDD{7}Դ%5>LK>)g[$KJe}LLSpAmgf Ky'KXp՛ByQҎ(`M!bj.(C@ d˞evxןO=hxﲈuv /S78yn& 85mu}s~B ͫwn^9s㟾JciGs  y`r)Ouhh .+l*K@ϗ (%0/Plav8ـt<}ŶyDA?^U^'Jvb땼o?$2ڗ^~g>&/GN:y*$P2.#GQ)dR^{p_K_Cm壺5j'pWB-&A[Q$<: ;U>'gE$E[MџXShGL0Z[Xܜs.sAc&jlABX*+Gvo}֓^`_wڋ;9ujSg/5ܘq!ܧ]h_s-ռ,fhqdܠEu(?$* 㿜ؚw @x6jJRNM>Z O} f[=+9D:rk%` .ْ +m1E|=O >{ p|d.!HLKhdo>ey1֩~EA44~}Uw3a+/o\hJ5k#ۂ[*Np IH(~#6dxpȝB #= (qoA}Г1"jgSc3Y{8@n R[h@-B 7 R'c*Y ZtIq(SP2gسذwqratv(Yћ(틗D|h~0E'T.uZa/R'?aF־e!;B룼o]wg0CQ |f45027!y ko\Avˏ#Uyi $аI@c1w(dܝ2~Z\kY^Z g`W(5J#@l­!ŔBrxbn]o7` 1X½8EC>].x:(z@o# (!q IzjӮG#XV"ZĦX/|c'C>1x] @\U΃qs!y~\W=npd&S9IT~"*ª`~e#5Ҳ vDXOJ"T)xeM VhQâaUgYU µty4@2j?;7c}G}X~VvꯝLHݹ\~ql(pїIp/?+up߸ϱ?ڸ;]1>`? {(΂znoHzI=bsb%)jJD(HA^IUi"动J9UTDT y:6Q u=k w:v`I(nUxԈ3]YIoVgDb^#e9nUj=1XKicK/Σ^^F:v!ƫ+Xod杕Wba]yīgug*à}}om„̒<=o02T(f .%m(h[v"W1!)(ul#G < %|+P2wȘ;DL!@+ʥJN-.p^Z 'L,h;#qPF(wWYG+zw #³?=űn:?3IZ[ڹPNH?n@@#a =~ 9̥f I%A@>zVȁCsiW ߻(yk'~f@ V7m/022UnrDۣVPZc@:] dbu5xx`[rBDDv03flI[%iҍ^`(q Eɤy[r;Б:E=8H7^\{E:K}s iTAs7IUW8z#qPkQlRZ:yB\*Vu-FN]SU4zENݮy@F- y"Z a|RCo4l=3'F@yTB۽;f; H7O b|/Ac>hw< :X3`ui[1/8z@/H[ōQ`7[Mf.C<f{Pm"Vy0U}lB+$? :}>ɿLRkL4}a2 {u݁zT<4UnCc% e{;ٝJ}s,suX~[#"$C`M 5BîrrkH A KTFZ#TI  oK6"IP J}N/9&ݡ0Ng3 cD0G)&*y18Th{΁ECK`ne#.c+G G)h?.%`כg.M_} XJYE0„zm]"7W ΍+S~zw34P0#5@C @MYMLSg59e6!SW,RZFժMN]eV(`b4ZٰmA.x0LjԘWbxhn<|0@ǡ\e&u$m.r>4}tc1ߞG}1%1JB9(x[ o[_t<}~sAKSƷ.ڽԍ"&-66q?UZzhį f^'n˛J)* \%y7Fզ٩VwK9T8Y@5[&M>SO^ţ?it6{4\p*= SCwO /G?G uo0pLJA ! WW+Tn.Y~ TUo.K2rRPvy:Q֘J5$k"%>NQϰJ'SdUa[@-ݧh9h78wp|S&4QTiU%^999в~e>zPy2VCT fw",51J| d$Zeh= 5ޞ~|й/.{}f/.M9{CSϞi;s ݀ޔ=pWn]3M/#N |;s=ь5jgXj(+GLpZ{"ȡ꧓Z+}EJ#IyE Ih@,T PoeU9^CPcU9&vQj`jLhU DJ52^S'6hzA[b"Y )< }F3[2(ƓELjG=`+-þ*R٥!S)\TTamH 0PF@_e v @2*ņ}YoGҞ !r] Lji Zdb@ŨF^]nf[2̢9LU\*I6BZ ՠ5(EuR~\Ш# ϋ^"c)ؕj^V0Y1"Z?lspTD+MLQJOOON&I/mT9y䅙'fMA[ myk$fBv`Z@%ow']w''Rj$iq\Vު5 <)\+ZJ-QKEb63F,:$LfR*O堈ɦv2t2rԶ}BIP73jĒʅݰdWL$S8niMj)(> fE͙OOte8wgv߸1t>B_XtEHq԰l![DJz |{j̭^MYTfNK\Sև)BU!2?'7_0Cyo:hu 1ѵ>75_mӨzBgؔvnwt(J5EL$=zCECpx|o"&.qs|2_gfnJށR8@ō+GFϑaU[~HaZFJ.z?˜`WR,&v+"RE#ya"b$vd!z0s%t>}3x^4R=0  vT ,OHw9yH$`%XeZ|w_ $Mӄa3 6B*]g/7=?<APLMJ$DE I6d$1 >UԹ"LÇTg5.uG+̈wB[a7yQA1{N>8gqlujPV>;45/a/^*^[`/oɜ?}ǝgN//u_ eb]_ B8\EΠvp\9PQ1WNǦ؃ 3eJ &s 7B:[|H(Qr O:?[SS٥S7گ>pʙB:}Bop1-^9e/|~ wtMHڨ >`4"T܀-)S2 X=|8)dxlc'O}#wN{ݟozic YCg"ͽWnBЍkhdg zמ=V!tK<`ݧ4ƀ_kz$}Qj !وPb<I!myCc<8l7ʄ3$ddqp"WzFs ΅QةvuDGm v>6sb)ҧԗ]Wǁ0 (ҧ/ ?w4^ɸ^^P(qCdwQp*HI8paCzPMvzDfg_=1' p<C.cȍ^!Ey IJ,pf;OލP{r*v.\'7K:tɋoW?$EQ&+Lt" yv (­*7x @عJNKyB5 7i;c)AS1@t3 y?T`Zj$@;FMk}աPQveb5H#(H6"S8ӷ  fɔ7lҟR+Ԇd_NTbg Ot=m(#{L`k_~/?-KTuwI,Vsr")$ϕ27BDLmDtR1?()diÿn #4ǀ f(m".0FXvh N=c FH :w(4QF5vOpۿ|X  BX(CCT\ZX Nkt"RKB$tbfqNġ?oQUT;#h:b4R5Vu[gB!TaHr :aQaoQlWUrP UKUVoi[@ij'`Rr/*;Y9PUPEuP,0DEAs\\beUmp6@%ۭ?0' 9DGBR5@VLE#\d`TnAsG5)P+2Hu5ZK]"I\WyTAn|'vG; f5n[c~s6|[E OY: o]lCLwtG&!nJh`t(׊kW-،a눰B"䂐*2H`vOm@(pP{O}fvPjz5 5h]w4tlnO_us(; " |lM1ULIIi F-t{AU(DR'>X +TjVy]ʮ* F%B/ {w'Ʌp2# ֛FӶhf=cr父%Q+?Yy{gG?/|?dm4Z8N$qrB<݊  (qQTBDρyc&*/H*fOIyr~ۅ._ܞ;/R|3yel\(^lUB3 Z ?XnO_*kٳU ]J-ɡ v[Clca#!3ehSfQeC@JN#%Dq CpcmI2~K'Pԛ]Y2MX\-XSng JДA nqqp nyțECs)j|aX0Z1X_Tk w5_0]F|o߃_FA]Z+t^:Y`eOh#1a.HwO$A:7A6C[m!]VDka懌]wMӟT =S5:] DbC 04gHJ+tJIJ'FZQgVh:&P6:uz]YSIҷӀdUM=Juhaߝzpi Jɼ$Hj[2URЪ?k~b𩨒Du~$Bݐh79WP6:̍vG]grE): ޗ~aU}G.\РAۄD\?W,(IK4̦v$V%r U"Pk1'{\-^]K)HQa}IO.V>^i02Y.66!!M6YMIHfiJ[}`%N]׈z苋, J"!TWGg`T rB*S(4 *5<RRTp`~.#DO&߯RGSPB>an4E["Q q[±,P3J ' `x֞$݋"/%p@kq0P~z$?m>ta3tFBP"ѯLCQ% V(#k2PcwڿW/߽s4㛦 o'IܹPqg/??wYZx^$&elAA *FkvaCPC&)lG=T Z./4a폴Wh:2P)6\1D_|)З dUDeuK]8FWoxQԁiZ<oD:gY6'GoYzoha},]HU  G#.0X"!}]4Ͳ<@"m|Č?!ʶ=t/qj:Ízt!JbAJ x9:&r1_H=nNt݇yQ7T~5_ mF.K`vQcy EX1ۇ[,1{oy$1E8BiF( ,dIAʵssBU|PxxɯO9? $д@_`d&!CG1&N!Z;`B@$ K'|> C #="`U"5(mpj; g`$ G:TKѴ@`̻`#Zסkl z8h:HF#yUTڕUMA^SڭQ1OZe3W:Lv=T*{FF Ӈ;9"6 I^AJmbP8!{I{t6@:A:XT$x&&B3EqP<Gz,kt)CZ P'&i;" ħ&GF::&&!C>\$pI냬m! {Zzh64 x`lfQR`3`}k8'hdYgwk)>ڕX%j,oŷanP_q^|"H=/Fy^2`*vAPC5G9%X;CS! M:+O7&f#7UP޻z5Hqr: g;S;+cx5F^Tļ=uy>_|0 sFSŚX̅6SCYiuE5%8)lr_5U a߂BY d@_D$SE|# N :PP z)50ՀO4Q|}'e3(}[]Խ]jR{-:Ⱥb?Ou"cΥeW#&Ĝ Xz&%w)D1v*JIVyf}Vⴖ->gC-!#)=.=np[<&@.H)zQ&ba)$_9g&Lde6.J6Id;zifX8=ZVe4;$Nag`UN h\Z@2\6i{J#0 ;ߺ>u}2J)vdBUg9&cÞ8meЖ֔Dos)ƆB@s pBP/5 C2<>998- //lStuTH1f盩j_Ϸ窍mNj-I!-r^" :jqX`?A ;vt% 8p~3 F&l}P16;d\/SOO_+.L͝"3ݙt>gAL>t\:}ħkwή\ެ^0<_BYgo07ku1s >4E&blа  ZrjJ j <(C`VyFj+Hu.KӌZݎBS""W{qf50V(Wct-`)(ր@jUV*op pl%krBqD,ռ*妫Z26 `wH8n ˆB7:yZ% '4J\؍@}L RIRp 3&-#4 n 4,H+v]JX/ d "Mp,pPBT d2˒+@@>X XN,g0_s*Ǻqۡk:zcADC?RN)3]DG")da$fn1UtUn3&0|WllcvpfM#ڡKpX֊%-2V)Btb 9/o-<ghU>b# ! Y]l N \VNKTL-r=yW!]~ 9th"͍"nQ+;#- 6tτ3LJǎLlߺ-ȳN,mY<& Rf)y1>!TŃt 3vK,ɡmv 1ow>|>$pf33Yٜu Z&s,n>!qV`ef^âۂâP3?/UlsdfQF:TXnK XBKY\+_ϗFR=n172x6滖Ĭ9B:bˣ+-&. bm1ˌ: 4xѦj$@.= UBtS/%Pw_~ޙsg/BR=ܺy19ߡ!?sֶ*O05լ[w4|_^y{%i -BB*"U)65BH[jAYbA#p xPa;@;V4L@z\*P%oȗ*%:x e iaS{Y둴EjLxJfPt(=m}v|? MAF ^е"tBU*v2YFab!H`~l T6 2ɵNa\bЊ'[. 0JZ;Ч&&& #nuj+"HU#mlD Ǚw`q0}E/H̓ y Y.8K"S(rY*IbYj<`mC>2*,"Q涒q*mtMMdfeV >^:5*0QTIȠm`!oL7G,|+[օq^*8/%KRa LM pM|nWZm"rpzbXT] DGP!/D<|*4TZ.ٛ>;'s7( z6Fc&ܸqԵS'O?mo?wD](.(y:ȃ mڎ }M ,ۡl`Uo:}Z H}$LW3 P(EV0A| "@ M=,;dJezͤ$N*4vlH/!H PBXPQwuuuu]]ײ6DEj4k}AB}s~e[`; meN[Ϸtŕ;sKYkawIл<"Ub (mZn7VѪ9 9p\/zP %[ý ,JN=3f(1)2rBM#Srb "E||Lz5U46"JT@MB|Y6ߩD=G˹J(Ơ$r|<ϣM5ʽ&8e6F" ( ^s˲c_ϵY9&INM[B2\?[הgLr-r@82BpE[2γhi`5# xS">/j``[Trz>mEq-1 WRm |LJ;Y"9@qr |Vie%#.Q*QLUENqeNiö$!*[.c4̳ki@ph]6霪wCMX;G ZHj T(Uq1,ZB%}z#fu˒\ׯw;tf5G#\h(d,@c"u7 gr~p(ۣ"Q40(}3"πL##s$V.eH8PuТ9}ԅg._AfN5!ԵC@A4$B _8ŕc_L~ah]sfDsq^mfJ]VjuZ"$yMkJRA]8yMnYҧ Xh6ꂱ+::O<HQmQEVAS1E"A x*9ve&ZhnJ#+?}wAƶM9"& աAU@Eך1|KXs p GN|jk )yA…lrமLAdp2UY4M$] (*\W(vF}2(8feOR,< -)6A䦸YInhC1 tǩ:(Ľc3wdm ';@BObjLJA? hqa7?s]dQ+eG+x| Zh&m7D@_-@,*Ґa[7&j (caga׻G@cvJ}ZAt0@z#8 98Qg"@y8TboC :QA_"|*twvp`mwfJbtVfeLgsO3纺!=} "Z'?ٯo©&ԮkKB앓_w7֯^{ unBS4x:3kI">% tćXrYy싓'w5r2T23>M2>aPcH$:`E%p31Dmn2bN azβd/>|@95>驼.LH)zd]L~ܨ$buc(!,HR 6q|⃨dauÄ8` Q1P,Y\ O@%`^쇥k!=*+PG0sYV`͏bIF#vGuz:NSE (Jnc- zLuO4e?̳hl0'&?C. )7Yk el r .|gI> 9ŐSj>k<6&*3pd-~0Jǧ.ݴ4\9">T x WI|ŇG9p|x g*"|"C'2"D@r]`?qP˅@haK]|PxQ0!>is]VݔF$Qp s[K2a\֤ @,HY* 2429׋+C:5p{X p:Y$Qza~Xzǹ{sb?fp?qZbU r׉h ٲu9Ӡ>߾7^laսLoth5ӢYRPLC84LW4V0M_<+DљħPsYu N8~1t %R \Kޢuĕ?8G֔uRDZO쮨~ EţV#L*4C)l|U{9.@kaŵElu8 y!T.s+ "x,9h+`oa\UY|c+,v[ΰ/$gaj``ǚ BAX +lLz=IM:i(s-\/ADZhGKR6\1OhT1:$h9q&ƨq"F?zg6! yE],w-><݈mp 0T"2@)x ?Ϫd"ߏϢdCY@-IB)@)CFZ0-`]4""βcD9MEkRj?Ռ8޲cGe f J7m+{퍏~ uPZn`"hyx=SV" 6# EGtQ0ssoƒH:5"dFB4ϲ*+W2n7V^ O1uUFluv,ʠ ݆Yd< 96XtB0d)w[%Xƙ!n˄  u#n2d@roFjr2 }*"&јUM+8LfX˒1=@ːT9WLJU ګL5o?Ӎ)tYgM.NmSDXÑ hjD5+;Z rsX gf4Um?>Z|gZBKnA9QN@8#A=G(LQ 㨍m+Rˑ=ge(Ԭ6@?YXZ E j2l,T*>vhV>Tg[~Һg_`7@cA㎣PN,`9+~~\sM3) AmhrKe vQP_aȰ. R6~ 6'" 5yH'i{ ,=-Va7iF$;m-v/~/Ր]+B~&\ň$d$Bs!@ UM%:'}gշ^^kW_'퓷oj!wy`&HU ZʫQ+P0;@@Hp|FCu7Ip_J&8L|@L#t@/jC"(G <BGN=ˤ]q`?1]4gq")#ꉘUI8W9pL.L1c%Cُ)8HT2ǦdDZE5I3}9e5{gO).]$b۟-|5Մy()흗cknJ|ąiԖ{biTfPTuU z⃨7)cwHUaQ"O!> op3kI&E v+)HK~XVU;Pq#Udeur.IW_jٜ0 )/(X`ɩE\6 P#\|8xrNŌi^ڴ._t9TIU |`삽.z"G؟}U3둰06/*Y3:_Ad1.4R&j53 wɟh;uWH8"gR g& ;BljXBo,ww\j@9\G;c^Ú%kz'liP u#^!҇A!3X#&܄DG G!0y_Z~.: E+ FnweEVt/% }DiEbM>2 nTQ#d~b+e-ų 6B Qms x^>o*xtE29H+/lD9hrD7eoB%w xCCG1 o0NJSC/i7bL,Ƨc Sp[+‰  Cs=>I z->tͅIMkT*"Z<=aoD{3ICz:|C@4**,zez5Fܙ+r6҈Lqs^aZfn s5*^\;M 7 jTO#:l-8{b<|^{Üث{}?߸ShᑊmûζLBmmc*ROhG,J4ӳBeQUBhX}ߜ(9`?(Ar@@8I@ZQ~l:Ξ:G :ՄI৮j©Fk&LPjpm.R/wùqʹݟ南ެ[]f$ XX]`ˉE/:rl+bhϱGI:(aj qSn_0MsD?CUhYbfQYm+9zw:0Qy%r?;!Vo0&-JwU  W1 3;%. 闺 > NĨ 7$mO}g gxI`ԡCXZz|vK? k>~X^L|v nOZ+dg~dNR}oKڜ!J|,Š DjYbj6;lº (Eշc@VcAG8rfxq@&HR[X8r^ g]x dYmz AkJ+qoO k@ 6<0> DɾY;m d=$vtKv:4R5z%홲8( kM4PI8_R+l 캆RM:&f&dZBmϬ兙sID$O$bk{OC:. kU@RE-s5!8!cNU!ېmِm\|.ssߞ=z{g~oO,_eBQKZ+H<$F\܋6x1 K5ٹ^Llc4+ȉlt$V"7\óy.J3l͏[iiʱlI' osX'/pmw<04gg֞ 8s6y9,Žy ; -Y%'4'nNB]](us =6mɍӿK%PNT*7K˰vIyN% /0g|P| qD-Ipve Oggϖ^] AZ|O{CI5[vH%E1Zjښ3 Fv".l.$8ũEprN&-#9 B6*z)xAl7P?ք 7\:4u9Ԍc7d?ޭz;o* &~ԃ#s^o`sgckO ]'muQʚikKz&Wze:Wf{`zJ8( ͙-Yx3v,($ıH68  ڹd$& t>,G4fzdh1jTAvF>"J&F")#K$)SF%'>6򆽫jm(::2 W5" J8hP?E? P]fT|Ivw8W]+ɡb?ןł C05e^јk0:"eJDƫY&kgCfEΰGR(V k ۤ6m,7wS SogW p[}r\r[{%n,0Ժ0>>'+KR0J4⌀t91ufe,޶?=,拏z7W-yM ]rLC!8&FoDs W+L|օ< ?L|&ԇC-⳩4 >8p ac` "\,0b$Y_#& )ΤuR9ej|-vik47fb0.쐒Քkm.d8nofsy9M-%L V'c;Vs)A%d;e4I?JQЗ5Ѐ91-[uBM-ݤnHw GiF5BՄ>&?SԤ~T⢾5Ǿ\1 (& 15j'C/H[g};k蘙< !溜gܟ1Oծ|Ξ&Ϝ>sLT "\DW,BEOlHajjDMM·Fd. 6hT(2^;})wo]wL~[p>*pCrd)TYto`POPuEA}H6GgU.Sﹽ4gۀ}hvqD]:^ΰrJs+EhSoL"監&1!(qD Q<?-S X % QI(ft[ M:Q d(Rgm%:)*߂yG)rNoΒM=ݜnwビ pMw݊ϪP|BFu I|KD|Pe!> |+0rG4=$&t Qnyx-*Zϧ]dU,4*!,挮PEɢXL|d'm3" gg] {ǮeCc#-56?,GBs.s떄C}.E0aJBc?|fqa  z\~tC 7F $cЪbS [p`BRb"x:C1I|p?U yPBxk E (~Gp- ֣k!Q;dҬkAUKD v$Nfl=Ċ7LmrV 7>@{V=h6#_^!,6L8/a EA{82B'/J}mbGt J&tz>\ 4}rF!%0쇩eu?q`x};[xEYLj~qI{qmnxţqmcm1JGT}codzb/(qƪ%o>~rh ַ Cw3ǔhTCiS r$MtjBI}?Dy[gK$Ϝ9?nNAvrmuy>hl‡̢ l4&Vs-MƍMXq t`srL `(\&uG+! tP׌E8VףrYS  +`t 5ɇvS1ݱGRbb]U.XcB{?jW`hh?hvK[hOw֚ؓݰ V v.Ǿ6 #R$L| !j|$>D||{ 忌-l.-U R M# u@kWpsFaYc3Q|Y  ^F4V{4>B[栴<1!M>MmSacMIaZ0HR Dw~EL+9%\L=`?q&V4aT!_ aibU򣜓{omVPܜl];+c|1ǥxoiVNpg=9Ԙ>ŌxMQBy64P_DdXdk(.v3t}ǽnDlzjLEsдYSI4J I{7~akOn+Ͻoேdk Csݝ])Bhb%8 BST5jB@dW u˵T#ɵ&\0!]#1VT;"Fm3]_~]w"DŽ@".Ͱ1$.a.OTqjT&,ž:SWX{O}]^t=fIb&aCY,ŐQRJQݣv  ʨ 8t1pH>05MŖm}yH;Ȼ{cOu d-s08{Rz&`"h͊tɢfeBŅih®Ǎ@sfZT3ML78[ҦPabuZs~d X>>G>8G:~gOtG:w<zT  g=BIsT($I&MGC|]T{;`!Ok8w?jHvR\l$ -O. 0Vd9w7ĿԹoAb >=dyOB=Mƿ0mkv|۞|,]Cj䚴H^W#R):|EJQ45ڍ&ƭDջ}5n]'vu!ɵg[E٠,&UaTVɈM*ʱ4 1UٲҪ oL}fd>bھ>pE4}Y3 f9tRgXTT$'EETúmx`m;?Lon -5 ʭO I~z7 ̛z6ЬJF4Q֤i8a"-7Gn͆@C}z7*=CZ1ddu]e-<QesJ, ȷ<5X mq GgTMX>$jHҤI$QӣPnPIl(MHuH42Zn՜/qg!TR_}hp+"W%*5K+JGK%Pjrzfě&ic˂ 5V SҽTM Rz߲r:mj˳Ͼiܟ~wl)óꆤVxƭm)2,,IROqFbi~;PAT4\/IC=,|ߠU3{y7l]8q'GfX5 ??[o-_~Si:p9l:yᢀ1b}zs뵯Léj(gD$ jt"g+Z>/WM?>'cbFc[ʛb Ch&H;(P=\U[71pӁ ?0DrOI}TO=Sjؐ!.P-nVsR3},[[R_&YY'kHlH5nI7oN3mN3nN34%jR[]d\b 1 t1%ƨ }d^Z+.KPG<5jEP Tm rM1W:K]D7[? k,uyڼBb9Υٮ%& [M:h}T(A!Su= j PyjrPHã/rGI~}[ uۋs՛{dus9OyM6E§XSnHݑjޜjh pc.KDxi@S1'`\ېd\qiPUZ)z j24Ѿ^i*t!bdUueoQcqg[vU-ٚ- x /*Mkׯ땏q-cb",鶥c:w\Gc#&[fE&h>3׀7WI+˅Yh!"^B'heдIҐd(='R6T>  C)My]#\d6o4>6geGD0"QGh{z@̞=UK -Mi҆m sdu늍[6s5qM5U UM2 \ q\IN=)Th@}DbuBRbVpc=;3!>DkXYB-3NR<џ7-ņ/6Vl.{#|!>T%=5ƾzfwr˦W7ls%& ǏHIK5DOpjE1ʎin`RӀUUyΥee==!nc=ܪEOV]?u‚QіEoNqQ1*Ζ#ǯwNцŮN@_h|sG?|+'yW^^x%c3c|jj4H'GQVsGkgnW~R?M1 ICRSYgSoo|K>k?oS?9w$ \>͖ő $ ?L5kDFh\:r++;:5ܬǥ!7N3?˷-w4xFs7ꟽQ̘#en^־=G9 3odOvM>OSy{릾M}=;'o$ k-FRq}̸7jQ{Tݪ۔*"nGS:f$QfP`%|lԂH~&0#CXb/-`0Ks} s7ISIz95b*0vC[NwaMwDmִ"U:+fcnOl>[ e88Ǹzf}@Rޱ[z7䩛r Tz1Wo,uliuIC^FpTKxtGtJkըߨVܪE96:.1fQ-nQW X.{C~/}g>__|o/> Sw>w|C@}ǧ>=otsO̞[7[4牱#eޞGTk}0];98?ߵ_j`FyqTHsT?ƈ! .+7|_|Co^lr+Ǯ\jpbW;%0'Wgߣ0ѨK54a$H3,΀"\tɓO򎲹UH1T-ͱ,I0n3n*6oyzQXdyVnJ62y@<ͲexUE- F.I*"VdW)jhC,TuY< a|ljԍGB։)6SrPsp vqX$ v%` &T|n\d\`±:(q) ?3*͹ώ5(}@`۠i;fI:(y`ꖁi26O_STg{ @*bʃ=:j2uYN;۞:8Nj7Zv緸;hM# SHr@wA$F+ԃearٍj%iM1 tJ߬GOeԝg>ޝx_~/>?v7_[38G?'9|ѣ'Ouji?y';st˱SL:vvv}_}|ǿW~/8W3[_M˷,8^7ه'knMU)nʆZdC#IGݴl_=g?WG>:tcߴMW_ï#gOm yRfw;6lp((9Lm8\6q3*>}H۩ێq⣮w+{mϷ_r͹7?PaCyRw[]l|`1#mބH|},oC9Qו+]tD~HkSNJ&&;@k©vpajSWN?o^Z{YiM3o`/80$i@>uZ ˳l婖^D0bTG]]|xX(cm DT@ 'tu#paA A4DoS7Ǎn^=.3|gmWlce aΝ#{ow඄Hzꖸ,[vf=jqwE ;z&b$7 vze{VKA}R66n_7eжm,5jzhr,Y^D C3 cn.,4'"$^d)8R<fzS8tMv sDSzg[}c]>>c>xǴ$T䥅=foHm,[o~_9|\ۑ֖.TΟji=׊2.ӺyŖSgϞ>wL;b/ w :N;z엧}Wg>voזCo=^? [gskVBo{8A7׻g_~w<_}ّ/Ovv4B(m'>š}^{׿G[{b.> 4x-Deˤ+߶}{D']8x/N8{㧾WOW?߿zcO(bSj8J4~}g΂>[XB>݁y…nrЖ}. La^|9zU9C1tIO:mN;|?;o>~VlLgmAL7ۋL,d|8 uI/8QkxQ{ :-Q2,b\Ԯ*eP855Z,BthۊӞ.x' 4LOSl'%'ҵ-=iaʋ]׮*66`ik/*zij%H-B%ST3#+0ptm3צ].'$oIQ1. 53m_^-ٱm3nvoVƃS'HrLvK2+reE⊔}_ۿ|^]_+_{B79'mBwf5qJk'Uj=o]|<@n/Bsg[ZZOu;}ㇾǾxO;xvcBW_r:;g~Z[Nhηwsg fgδm=uS-GQ/䩣"#q  TE2L!` BH\jj#Ν9x7_;GZ?} oٲenן{Cq*;*M#D iXo?.Q\3W?_O,4Wj/> ừ"KJO?`7 ۮezܤDhQ1O p}iKCU_fErB)݄2>[$˷aY_hk3qjĴ6'!-EexCs n+#T楸y:?쉽ǬY/IuEu#^w]b#2E?|];VSD=Z1F$K5cq\^Pz50аJސ`9yH Oޅv-ȌLYW̤ <<M<`Zf^XmεyJM]U`Ggm)?ڐk4Y|rx z^RW^Oo~7>|/]5iHHi^v^>66}Qa2)vY42޻{YŇ{Wϟ;}ʷ|{qpg8+ Q p5/Co/a{]Gw "<9`W=w_9%鯿f:s mh,uyȤ2?꬐Q2_Ay3m]g;ϷuoG@IQd]wW?1 k l ;η^h;qxm_ro>x7~CVl9i#]gZUgD;HgS *.}'~b1~CyX01=90(!LfKϲ*Te@ʎ}"Y !υjs#zGɞ){ȔO I߻Ĺؾ~`psC3DSu5(S М KߐLqh{T"Fj[t2xl*sހ:' L̸  eݜS)e&JѬiJޔDKb-+16 KӯSA=Ml[=îlM4F=f~ܦ卝`6m.M#O7& T('L?2oҷOynd#3ܐ0XWq:Y6[KFe^us&|C S's|OG>ɏwU-}H% V*D3LulVu?|73pڸ3T5rKbޅnL0fy#J8"rNjh"йGt΃ts<1yoi9z!WG I P@ģEb ~߿~wA%+@(Ѳjl9vO~'?18%ǨLpu-,E4Q^'W-4v);rД] l.rC߿4-ldGFiS*ްoI-R&}qб0վ,dzlúb:X=b@XTeԦk߰4A T oʚ4z3VU <&]FTS} <^SzCvsq@K7?пO!B7P/_Hͽ ٪5A*);Ri4&Jږ?qLJ֣mG/>q\Mq7>waQ][PaP& 5K4+Q$&Q13DcK@)0P}fF7yr6gNg^﬽ʻ˥9];aEl8~.i߮W?jiDԶ`Z/J&M E;&5~u'4Koa@cY@ I@Cܣx,mhꄸ|X}ᷱI|r1 6Xc=0u/P Xȇr4BD#4J> @ֈ &zTO6^&_xu!AϏ0}9vO;bPCEO"Z_)Sw:uĂd=xElqRn?0vJ.>>FrtQ/N`e !gb-Z"1lzAv8'˛B "A#Y눵)źeL±}_p !HѮYwvvv_ 6fqX- Vʍr:ZuqysdΞ[coGʭ͑ɏvR3wF;-vFY틳{?QbyF#MڏQ $vh ·z,nLȷ1kog*@* pcUv Kn%r@oBs~,8t%%w>׮T FuC>z%Ц%յ N纥{M8%Pe#NO\GS +$-w@ s2k1<܉ېb;a-9SjT4;]GjqyZ"44EM zm%\ Gp(Z.d %l^pA mI~_lX3xY1{긭 owޔd{~:fʹ~_nu(%zw;ΈAܾd)Q 򗈟_"dmǪ[q .;YU {.ENToi6C6if64㳉xs,esor 8 nifLNN Mɞ[S<6;ggY ^ima&zernk8&n6̏5og+jG;f̶YmlNcOp['p.I@QF$D|xLޗ+!hS7X",`f>w'8Mp߆(eEv]KܿtrXEC#y{.|Ӽ - 7XAΟUh.hV16 UJaØxi0LLt3M'@t 6=ah \{F *6 y@t`I[QPk"tfv"A f&G`@&_8 P0.}3II!=~7շRTǢW>`\,6jMCyU맏~vzȌd-%y[``!*'vm}V'g$duΎ̎^c:\$p'zr$_fNnF C.h5DMf "5[aӖ2D1O(jcD Wm_$`W֖8qw4iMK\:. uX&_.Yf0xe8qk"W-8TfQ:/54q ɌgaM^-UV2\[a)NՖ.;YPIژ`oq},*uf*BH셛MC37->ܬ&r(h\,3X)3B ʆ ۩bV\_ޭk 4mNN}C5F`w-/Qt_?EGGzt^ -RZal}T5R ^xȮ=£ yG ~ѵl:j#yl>ǿxe2Z"2(c"b729󿟺S g(KC 0}Kf2MvKv3@2g [SnxcݰjNĀMɲwzM>8ち{v˩E-5jkM=[ǭ&_VXOd֬콢כQAMNj_2#cXl7^,e 1ûy*ʉrE2'Tduso\)*)$d '0A3GFAbb]rOp3U657Tk4^IK*a2M` >jr-4 $y 5_C QI$U@[pCl 1OSkžXc5`GNWRXћgǙK/Jx0'C 83B'ӫb1Ц={.O}pS_yK 5`c ԰98QյZdk>ҩ3}GqCn)7ԘdH.!$ kS` 0Ҋ<{@PhnV撚b?,0t2HL؃q!^x ٚh=f`K uՐ-9 ^r,N8OۏqOp*8J8cAB$'h5_0Sj:]bD8t;m4`'7Ul8œ{Յ!chʆu`āۑӄ?(\˄,h$\pu0:s\?7TN],- p fT⑎{:w3&1Cf8 !/3V43ԭ3N|zv5Y žōhF "j%fpeLH}u#doAX.ݹk7\=x}Jp^>l>1"[9#K9X"ܽ~ttmbp:ή9\8(9k2\*6BRb12+#P&0M a.4oF\(dDsI\/ BA#Ă6'R<-mFp 2ðH7SyXrQ>c}&ϋv[#x[Z>AkDyPlr:zgFvo֮>ng&297ƘKNr-  -cio2!i…}ŅM.w87 ?ٞ8W7d⣽uM$o1tNccF!~'~pkȝ}vO79xJjʿ\z,YJc _)kY;Q7@o /1䭏[k/|v0wʈeCR%xzt\z A.м oDzE{?$ g8+18gDwEr}<M{yڏ*$5_7Nq'~:;]O`ECRFD&B3%Xg,۵ƚS?:..le/حwʐX.2]"2}VhUd d0L3tO7߽خ?|Ǐ9 (VNoo:okVl9&_Ñ|s >Uwr0cƒ<_h0yIB?k0bY5[.`77Bf9$X|bGޕᄐw֐_~ÐmąZֿo#+PK%G׿Ճg/o55e4U+_~ᆬ(7~Wj߻YTpr{߮rOe.}%΁CBSM8v"uY"*0#E[¥~APP-ў\DH]L:7~ŋߊ*/[ŝۊjH7R GyXp͊;V\W^XUpnДV\]VڤB͊[+{˯l>|ںA }9"}s&ykX.j['ivtEA^6B_݂E ː#SQuU%Jme㺚RTxwF}vV&] &X-K1U0n.,OGo_*W!^ IVR[ՂrVDX ;f$T4AU[(xmj45 Xe፪xiIüƄ-amѾX~ut^iowPѱ}[ n*+FZ8 hmPd k3 '@)Y `449ԴU]P?]n=I ZI`!U⣐aBY|R M!REAM(( QIs͘TUW>((,zXPp3|r|玱]EE  *|=6S/g1!RoIˤ}ak-.[Q3&R5E+K**5^߉: ,cQ6JKn9lޑ\<ȍdHȚ=G0Il24&7j< f@]we)X(sq=Êh.ڠ]{^k td!/BjxaBl"iP갉) &2D&Mt!.'FSuA7o=:zNՁ={r?^hF=~"q'7QD:k舏vY\ӈ,[B?+;/ qj}ikb3:ޱ#5kMŠ?ܻe ~O63ofHb2t)A=#! a&uu`2B ϡF! jkPcH,t$>12־K.#Il0 &TD!Q|S05B+88 Q4zknPTw L ui (wGQHMp|w?~ro/ܱnXPz:PfМPE(:)hPjjqU6wĝ4iZՏ5Eׯ|W2%*bК=7&x|7֣r?~JX&gX#YnjtWߗtPC)|ȣe=ԴPfyb9BgR7ZE iy |VJڌޒ+~+[Z]-.V*  raX UAy Q5L fU?P3 ? EV*ʯzk1, WS^gajSYA= uz|aw;Լd\}7F3Z%tĊ*,/{n)wE"܀6a:Nz-D @`QKSCSjim4* UXu 1 (O5:4+#/ZuxDo/!I]}ŽBZ~ϱڞoN5*1C8t@HI=yU}Lgs<[{=S/ `a U ~CQ{3هr0D҇95PPFZA L:æJvapǐ"b0Aw!{;4[D,WI:x LJwS]W(oTVݽvǯ곋ULK xPOPE ;B]׌r]Gߑ/hkowh"1:Cv)Sf"aJ#* @#4%^!UBL@ZP a Jd",Ew>b{G'D:K,͘0oPcӋP蹼2μ':bXPA {H {╊2Rְ΃?ˉ9O t3#_ n~TCi<3/phLta,dh :jxD"Cn4"O"͉<Y44(Rv`Hn F1`s103 m^m$ 5 Zӡ7@ߊ#5IV?`L+ڀsQy=4as#CN ?x_O[kmx{24^7T>stream xA0 ;r0gf ( Kx(c˒J@gP-ٟR: 8D_7]/1du8\wF*Ū0ųaO5`Le%XFü5i܍*owza *;>yiխ&ǎ@Ձ9IFA csyuJlFnM+:VY `:X]ؚW.ہu> b*iPtL%P\u>V u]m+(r|PFt4 V`8:;a 5r?`us^;v3UbFa \[/hϋ<=7[Fг es`:ʰ|||?3 yj?u$;g&?[;6} x[C…J %b?]/Filter/FlateDecode/Width 528/Height 327/BitsPerComponent 4/Length 3528 >>stream x훽$ ۹BGԋ r/&sd]j} 6Љ~#(DXUCnEQRWV .N D;/Qi祵7G!Ԯ(4qjWk[ vRN8O8Ü/t;d7qb'`CJ0{)?/x?KS3mC;/<r~ݾ 3ry) \ O8ÌSM*+d``Osƅhwڢ# i4 |JP qdqqH X>4~OKfZa^{?PңlPH8*Y 0hr\2rlqBs^yiJIDҳb&%QL,84#,,,R) ;,,R) ;,,R) ;,,R) ;,,R)P8r艝jEҳc1zM(TC %^ڏndSu-aHiIϑJsK6=CIAD{'Wr0T%C)Ī1('cCG,,,R) ;鍻KoJO8tX>4'翄Ђ,B>;BҼzJPK6URUA.Ġ$4gLK6P%X+ڻsHRB%RC:TSY~?9i.=z&=HXn컥RȒA^)58Dǒ3>:<㴡y|,\=zɦRJ٪1(ލLݱI=z&s*RC!Hδ0 v=;R_Hӡ$ HδzCUK^:B8x28{Awpi'0!3]b&%QH!ZyLgLK6PB 8x"8{#|fj4꿇b&%Q4%piܱI=z&s*R9c[}Tw#W%u9T}H%}wlyiOrQWj"I٥c1zM(TC{yE{W*C]rPR>٣ I! 9mYrճwb&%QH!TL䡤R}*GAB-0ēsH饔O/j@iIHz/ ճGA%شzұIZ}ֹVB٢i/5j 8qw ;׳R(X ^q8}8aN`F +LI ~{yr?Ǧ6 R/aI`"-t/>fJL vs6X/f*zrs|q B7"9XaU# h@S酖 D a;MaP$0F9(\bB .ZH3܇.\ӝbIqPCsr'PI4 Ut2F#`0[x*: _r~z ;`%bD? 0 Σb@Օ #D7qQ~/(FPF8V,\9!ba8,ZЅa|x㡈p8||H 8d2v¤;C-JaqS1 _C!ޱm8/ުMlTXȏLeH9Ӏ2pxFHCJòIGL܍14tF!E06&@p}<,X>;c{409'+?_$)U@>oc?򯁃8Ȫ;Ì-WkR6 ?xGQ‰?/PpaАEX[)\JusmonYwpF4X9.2rsx#|WF_*o|y" - ;bH8>sR=%]x1 '-RRWHEȇg+TxZY uj@VCC{ȇ4ruCr<;J2Žwa sX'y+!~Æ'pȁoݟCJ59 l>;<?߿A4k;_RgJMs@i>,]{qe‰ے.?F9!(R~_V-fcOC,GQ&|L=R%3;ѳn[0l  ZDh 5;Pk<HhAvb'&+%r`"(-ʒbJ=2cLiV{*fE:!endstream endobj 67 0 obj<]/Filter/FlateDecode/Width 633/Height 333/BitsPerComponent 2/Length 5914 >>stream xniO F9 x`ne.ɈL`WpAs6^E]ɢHy{dwf)S;zb!ϱlѪ o?vހyXR?iɝ3Ysֱ*3=!_S/!3veW[>s:0z^w5k%O^fmƓm` ͤm/ETxud2 Q˺7OEUQ(2I#ޖ4t_{xҏ36$m~o2Ѓh4"~Ժ8lj07p.9/T_oZS2/0>^x-CHtS6%oK.{m!d\g.lWN!>WxǸL<䀧TZfǮ.95Zn]-}W֕4?LᕉB8qr#Kfװ`R!=ܶi{tWb~hZYxE.^Zeչ: ?}o$jUKsnLm]CvV%=Yj^C|pfI h҅k_u+t]Gxe}clas@.1xK+ xj^{4;/kKe3A=Z*MoZO/fuE=w&.,fË mx.hY=1gsYO`Tٹaw Hr3IxYַb6Y3ùcqhǃ[-xJӵ89b/rpKk[^iwĜœ3bo&#Ux]C7N9ZO{W"k=n׵8Y鴴VֻCk9s7hy Z蛚+ڌBeqpqރԃ֌W3]SНpG|Tb<`b p&~r-7s}8/d|WBsi*{%93 :W/o?- ֚ O So#F*gxAs ջ\OWS& 1xҷ .-T\4mLzsҷ컆z5AaqijM5u}nh@ oN `q@<9F4IGAI<oI(6̕hdЉÓ{/ۓ/pY9o{z؉gҴhvkQ޺ ؉;X3 vbw5O. oWyx8t3)yx cM{ YQZj|w.seqxjq0x#9sMd2ɓ|"]鏃G[sy眧w; 3Mo c]VX<:<>|Ydj/[3zq0Qg{0q"$|@rGuoj}<ۚ9A\h|ϸ֭{w{șH?wO㹮ReX1EY7%nM=H򱻟sxwJBoΙ <:F` O`MYGQ÷05е̑_FϨ-b~ȘO&t\g0FœI<"EQg8oh#6<$QC{2 >Kl=w ^)<;@px'w6zfqI|oxO̓8h zryj~?׊}m3ʹ~:װh!W(,Aڌ n^ )<=5N&[0o:£y6l:3Ѩŝx|JxCAD ;w`<9n]B9U]q m#,í6E8w?25~g55xᆀ^/pn΄J57K7[V}/v'7h7 l^<}u.'t; B%ot[ovC:znϻ\aed]xr3 -gOm`ӦM tO᷊E$2L2sG^`j!߯N` "4zilӒ\(N^N4Fe{kv\kpivWP^} {A@.Rowm|pFNIh3$)+nI`xݽ-A7G%8uxFv&,} ^} ?̅ԹܩkxNF^,OOMDy7fVfx;I K~|钲86P|E#?D19'ޞqO짨G>j#A"^$tƹ[$X\BUaf#pל^ʌ:{8uAdX >m7r+ @LS/c쨁诚x[BD7VG_Z]֡ ߶Ƚk|5 bW(y:ҁ*Yx%H R `B\m BQu,B| 0N|6FOyzF d I^G~iBn݊gՄRu^ȁUh//sBhȇӶuj~A/z:*;DOEz$t)VzbOx2mY?Nv޾ςJM.m|5rc&б z-vaaY?p+㥐sؑ.E=>٭r9'8? ^J.$ ^ƹмDc.Ou\G>g559hTӱ >L A+P /vp}L 0592O䭦U8s/m?*t k9:pTscQț01 ^fk g[('O~R>Zv: F ,'@wݙ!έEGYv_կ/][$YoY"8? 2_%'J_E󦦈DXi1-/!NZYq)F-/_c7C{83kvH5s5ݗ:4-6 ɛDC&@"ӾMN0 ϛ37 ޝh2FЂ3*߿lJĻ5BQ"kJx8ҍj^nRC4JklxQYx 㹩a=/nժǿA*822V(GksQc<)eKy +d3d9}]F]w랮jJRxes}v#gûDѐ;fֽT6Z!d]!~M\RRZ VcA㽱dWf[*ou*uEj6ގeB7kr۹td][ݡ0$H-̎LT92qrjhqVw? [-^|֩4u^2{Tn\h! +g~xZŞH<0g=+k2Ne.3:B<\ӈ=icEᡲR x}viK!ćyw W52 e sH#8RbL.Swwiѵ KΨKu4hx&1ODt1z1;JeCg:uev,:sq6[^UǗZDX(::UXHoo_?.^?m:Nd=j~\BO5;u[Hۥ[nƹ> f¹Ų=~H`=(o@ u*%qyS}?$}S+"ŕ4 ^[Plo!ga:??ꫯ^^ibAEcJc r *M0LaS k^\P10zQ7A8u*{J97 >ȾIvI+c? QBqZϽ،ǘ멳[Ʋax{xaxrԁ,XSg^~b5#u69iՃйi(-S@vsas?|,PƎk9./,[O>b]/Filter/FlateDecode/Width 192/Height 194/BitsPerComponent 1/Length 890 >>stream x1O@2dAݍP['#:0v`Hi!K]БH V%ZFrTHxʪ>[%f@ R)ytz{9m@\̹bm21s2`[&I ?pw.П?qA|qE_q]4"7O8\CRۗ4vGZ(#.K*O1I-}7MkЖ.V=dZ;.S>kn@!c'ʏ:^`\P^NugיLr Ӌic9h_9wnM{{m(KBpmN(|x r;s̨>~}$ҿޏy e$ E߉Vݸ~]R YkYcB6y&x8u}~?0ỎUW5w W/~[xJzQ"$U9/$Wq^dgԉψ~˯Qp_8Uy?r:άsGwזO$'9o_~Lr| 9}-༤Dǿ8|2nÎZ5/&z-rCoBc~d\v~^gemNoWendstream endobj 69 0 obj<]/Filter/FlateDecode/Width 519/Height 226/BitsPerComponent 1/Length 2778 >>stream x1qTLm #\qiÅp po@ȫՉ.FRoHJEbD߼y3y#5+Yuk8^ٹn.p\bѤgpX`CPXo\K|ϑ›p?É4\b--w[_@n-ܢ 0kM.0vkG;D!\)R8]\z} }/~Kt&8Ì ۷kokxVkm/V!\gY/! dl?W,K'5WK;7riR|~jNm Ӛ W#w71`9 ;[4{/3\NUmWuX>[9wwq?c>b@Lua0$'#a@={xq-K}d u={xzD)辣3Yza@GzfWKF^ƂIz5 R-<Д;Yxn[mM7(sk;# 8ҺL*t rM4a+ 8s 4u)Jb<<7Jk,ӛ({j0>hX 0Xh @յ`5qP >@}.q^Āy?ӄy"[Y]pBAXt1`&*i vY_uΫ^XP>X?〖|M{4n=Jy@޺^Ɣ ̉c j)ΉkĵΐQuE?-`t5=t w"$X,@*ّFa93B i',țYV"Pu#LVX5IQH'3S504u5]`UWPgy$#@Zĵ\NO2@M[d!`3FtCn)nbN\&K@zYT|W74= xz~OOZZ FLʢGM 7/SU*.5 xz V @)Q?@l [9Q bR?r4&&ThZ[*Ǽ^Y]#^r+1>Y P3X kyr0gCW*Uz)&Go5 D\1[PW󁨳|[7a cJԙ3V;3D?N 9Nyߪ3D\qG2u7Ro!T'ъfuMiN~Hg:%rg>ж }s eڥtL973!wOyF\063v* ;с*m9/E9we$N?[q_Kŵ҄r]q-DŝY=+&:Ǐ TXu^|W q]ā M⹨sΉ3:y-U,@O`o8!Z4f `Ǽ&wfr 隩3|HykμJ+ÊquubQEXZHVXF:;rRE yJ1w"Qdu^sG' bL]c7Wtv 0t2͹&OAX@:c_yv' Itge )dez'B^ee#P||`c,K/l`3i738zAq(gmVgA@q maJ#uAMkA^W|BqJӗ o}5Ĝp4aWeH<&_⏲Q& >v)dL-UzLTw!Sb^p$()֞ш!mM&@zɝ[pVպQrgܭP.| {$˭gvżVvZZT=4[WN c(.f= - (sڔ7,&=ޔ=/9(s xnjU([Jֆ&d9+!7 bW+y#EuN(%޺wEX̝ECl%wz/ΰ?,.D`,rlT砇8pkp"@0.y+V&UF{ȝ`B$ĚO9KD7,t4&T 'Zt"P;?^ {~h~Tiddu-DO`M)y QgקsĂ'Μ;7 x߈Ï' ƪJ|&$%8A6wٱ0`"ڸ= q+ܵ0tv.XJoE:\܄a]@u:$smM\`sTE$(5Uv,qpk'r F`endstream endobj 70 0 obj<]/Filter/FlateDecode/Width 497/Height 226/BitsPerComponent 1/Length 1228 >>stream x홱n0SdG3t,P@! t@ AZ :ttPA <Ȇd^J#<E ϿHSD#>F @XDuBרg5M3{)j .s_)'ZWE]k@?5+E(:l? W@?w@w{B^랷<Yw=vNuj k y+k 5@G¥B5?ƓຜDH l6 ye JHiB0PiBiB(f(%5^55f. 5Mf.j|SkRmkjqj uW0"cƱR1;l|̰1W 0ǙNN HtUim/pAi)`a-p a|p a'?1i*\7G/u3OIM$n+.k}5p;يL[ڌ5ѻ]74,f7M`z[opWƫsB\GV:$cmOLy|uƌM4fX6lyfrĸh&ܮSB,qiX7!։VuZI20 OZ!aKf9Dflsx ["eHNeb8༆m 8g5lױQ8k<őedN끣k_wΏu =6nXKyG_"=v;*}YEν1}հܛF5iX7iX7NhѰg%}@ʹ,37զaEI8<1զaeIo' .3#ZmV.KzE)B낛_l^s̭a%u ^sh J|p{R>cnpġ5(Ϩ<.~vձһx¦z{ʰsXdX<"sXH@3f ayںװ&8\}x k{8a~52|:O}6$ ?FsXy4=T9ss:Vb. k#a7#a!W{5l6^sXa?7Fk̰&vo{2a~]gqJأgv_̺endstream endobj 71 0 obj<]/Filter/FlateDecode/Width 483/Height 196/BitsPerComponent 1/Length 1615 >>stream xoDۮD@B_,N=*u8J=Јh_P{ ME@(mȥ7MO,uNv:E'Ό3}ox~2.Q9\{su]||aL}w J9Da)p]ySP~6 >dN}bL1[4zGS 8@oJLIaK3keYl}YIyRXv ]n~g'^aD~:њ=|P=\=ܤna. oyQK' itbЌM9R^x$s;aXni`=|g7)ˡQAb$YM^+i0VmFimz! `jw!((^UOj"fzʥZsJΟV.cl_|:_9-.V9q#y]?7x[TAb~hDITtӘ0|Pq|Fl͉MOuk<~w)l21N ʬf_x>W>J@ZG{O vk'o\9x_=,mS4gb_x8nvwo}~}i_~jn;,LXaAz۝p~ۓ&Kd<)9\%J~;:=­fK S kxÍ+{$J]/Filter/FlateDecode/Width 187/Height 187/BitsPerComponent 2/Length 716 >>stream xXAn@ 7>= zg}p`WffErEJ[!n#Nj5&w З~ : ^BB254OFoqu8'r щGH'BӛHoHg T^s^3cP sԲBT$AH('ڱp,j\"CT2՞wݸg e}H5A3 =ObR{_{hԔٷ;OowGoEH_J-IA:y̦bVB_(SWp\ Joqp|u51hnb|RNNq2D#}Q5z\O'>tKE俧v?:N yePQ SHw$K=endstream endobj 73 0 obj<>endobj 74 0 obj<>endobj 75 0 obj<>endobj 76 0 obj<>endobj 77 0 obj<>endobj 78 0 obj<>endobj 79 0 obj<>endobj 80 0 obj<>endobj 81 0 obj<>endobj 82 0 obj<>endobj 83 0 obj<>endobj 84 0 obj<>endobj 85 0 obj<>endobj 86 0 obj<>endobj 87 0 obj<>endobj 88 0 obj<>endobj 89 0 obj<>endobj 90 0 obj<>endobj 91 0 obj<>endobj 92 0 obj<>endobj 93 0 obj<>endobj 94 0 obj<>endobj 95 0 obj<>endobj 96 0 obj<>endobj 97 0 obj<>endobj 98 0 obj<>endobj 99 0 obj<>endobj 100 0 obj<>endobj 101 0 obj<>endobj 102 0 obj[74 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R]endobj 103 0 obj<>endobj 104 0 obj<>endobj 105 0 obj<>endobj 106 0 obj<>endobj 107 0 obj<>endobj 108 0 obj<>endobj 109 0 obj<>endobj 110 0 obj<>endobj 111 0 obj<>endobj 112 0 obj<>endobj 113 0 obj<>endobj 114 0 obj<>endobj 115 0 obj<>endobj 116 0 obj<>endobj 117 0 obj<>endobj 118 0 obj<>endobj 119 0 obj<>endobj 120 0 obj<>endobj 121 0 obj<>endobj 122 0 obj<>endobj 123 0 obj<>endobj 124 0 obj<>endobj 125 0 obj<>endobj 126 0 obj<>endobj 127 0 obj<>endobj 128 0 obj<>endobj 129 0 obj[103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R]endobj 130 0 obj<>endobj 131 0 obj<>endobj 132 0 obj<>endobj 133 0 obj<>endobj 134 0 obj<>endobj 135 0 obj<>endobj 136 0 obj[130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R]endobj 137 0 obj<>endobj 138 0 obj<>endobj 139 0 obj<>endobj 140 0 obj<>endobj 141 0 obj[138 0 R 140 0 R]endobj 142 0 obj<>endobj 143 0 obj<>endobj 144 0 obj<>endobj 145 0 obj[143 0 R 144 0 R]endobj 146 0 obj<>endobj 147 0 obj<>endobj 148 0 obj<>endobj 149 0 obj<>endobj 150 0 obj[147 0 R 149 0 R]endobj 151 0 obj<>endobj 152 0 obj<>endobj 153 0 obj[152 0 R]endobj 154 0 obj<>endobj 155 0 obj[154 0 R]endobj 156 0 obj<>endobj 157 0 obj<>endobj 158 0 obj<>endobj 159 0 obj<>endobj 160 0 obj<>endobj 161 0 obj<>endobj 162 0 obj<>endobj 163 0 obj<>endobj 164 0 obj<>endobj 165 0 obj<>endobj 166 0 obj<>endobj 167 0 obj<>endobj 168 0 obj<>endobj 169 0 obj<>endobj 170 0 obj[157 0 R 159 0 R 161 0 R 163 0 R 165 0 R 167 0 R 169 0 R]endobj 171 0 obj<>endobj 172 0 obj<>endobj 173 0 obj<>endobj 174 0 obj<>endobj 175 0 obj<>endobj 176 0 obj<>endobj 177 0 obj<>endobj 178 0 obj<>endobj 179 0 obj<>endobj 180 0 obj<>endobj 181 0 obj<>endobj 182 0 obj<>endobj 183 0 obj[172 0 R 174 0 R 176 0 R 178 0 R 180 0 R 182 0 R]endobj 184 0 obj<>endobj 185 0 obj<>endobj 186 0 obj<>endobj 187 0 obj<>endobj 188 0 obj<>endobj 189 0 obj<>endobj 190 0 obj<>endobj 191 0 obj<>endobj 192 0 obj<>endobj 193 0 obj<>endobj 194 0 obj<>endobj 195 0 obj<>endobj 196 0 obj<>endobj 197 0 obj<>endobj 198 0 obj<>endobj 199 0 obj<>endobj 200 0 obj<>endobj 201 0 obj<>endobj 202 0 obj<>endobj 203 0 obj<>endobj 204 0 obj<>endobj 205 0 obj<>endobj 206 0 obj[185 0 R 187 0 R 189 0 R 191 0 R 193 0 R 195 0 R 197 0 R 199 0 R 201 0 R 203 0 R 205 0 R]endobj 207 0 obj<>endobj 208 0 obj<>endobj 209 0 obj<>endobj 210 0 obj<>endobj 211 0 obj<>endobj 212 0 obj<>endobj 213 0 obj<>endobj 214 0 obj<>endobj 215 0 obj[208 0 R 210 0 R 212 0 R 214 0 R]endobj 216 0 obj<>endobj 217 0 obj<>endobj 218 0 obj<>endobj 219 0 obj<>endobj 220 0 obj[217 0 R 219 0 R]endobj 221 0 obj<>endobj 222 0 obj<>endobj 223 0 obj<>endobj 224 0 obj<>endobj 225 0 obj<>endobj 226 0 obj<>endobj 227 0 obj<>endobj 228 0 obj<>endobj 229 0 obj[222 0 R 224 0 R 226 0 R 228 0 R]endobj 230 0 obj<>endobj 231 0 obj<>endobj 232 0 obj<>endobj 233 0 obj<>endobj 234 0 obj<>endobj 235 0 obj<>endobj 236 0 obj<>endobj 237 0 obj<>endobj 238 0 obj<>endobj 239 0 obj<>endobj 240 0 obj<>endobj 241 0 obj<>endobj 242 0 obj<>endobj 243 0 obj<>endobj 244 0 obj<>endobj 245 0 obj<>endobj 246 0 obj<>endobj 247 0 obj<>endobj 248 0 obj<>endobj 249 0 obj<>endobj 250 0 obj[231 0 R 233 0 R 235 0 R 237 0 R 239 0 R 241 0 R 243 0 R 245 0 R 247 0 R 249 0 R]endobj 251 0 obj<>endobj 252 0 obj<>endobj 253 0 obj<>endobj 254 0 obj<>endobj 255 0 obj<>endobj 256 0 obj<>endobj 257 0 obj<>endobj 258 0 obj<>endobj 259 0 obj<>endobj 260 0 obj<>endobj 261 0 obj<>endobj 262 0 obj<>endobj 263 0 obj[252 0 R 254 0 R 256 0 R 258 0 R 260 0 R 262 0 R]endobj 264 0 obj<>endobj 265 0 obj<>endobj 266 0 obj<>endobj 267 0 obj<>endobj 268 0 obj<>endobj 269 0 obj<>endobj 270 0 obj[265 0 R 267 0 R 269 0 R]endobj 271 0 obj<>endobj 272 0 obj<>endobj 273 0 obj<>endobj 274 0 obj<>endobj 275 0 obj<>endobj 276 0 obj<>endobj 277 0 obj<>endobj 278 0 obj<>endobj 279 0 obj[272 0 R 274 0 R 276 0 R 278 0 R]endobj 280 0 obj<>endobj 281 0 obj<>endobj 282 0 obj<>endobj 283 0 obj<>endobj 284 0 obj<>endobj 285 0 obj<>endobj 286 0 obj<>endobj 287 0 obj<>endobj 288 0 obj[281 0 R 283 0 R 285 0 R 287 0 R]endobj 289 0 obj<>endobj 290 0 obj<>endobj 291 0 obj<>endobj 292 0 obj<>endobj 293 0 obj<>endobj 294 0 obj<>endobj 295 0 obj<>endobj 296 0 obj<>endobj 297 0 obj<>endobj 298 0 obj<>endobj 299 0 obj<>endobj 300 0 obj<>endobj 301 0 obj<>endobj 302 0 obj<>endobj 303 0 obj<>endobj 304 0 obj<>endobj 305 0 obj[290 0 R 292 0 R 294 0 R 296 0 R 298 0 R 300 0 R 302 0 R 304 0 R]endobj 306 0 obj<>endobj 307 0 obj<>endobj 308 0 obj<>endobj 309 0 obj<>endobj 310 0 obj<>endobj 311 0 obj<>endobj 312 0 obj<>endobj 313 0 obj<>endobj 314 0 obj[307 0 R 309 0 R 311 0 R 313 0 R]endobj 315 0 obj<>endobj 316 0 obj<>endobj 317 0 obj<>endobj 318 0 obj<>endobj 319 0 obj<>endobj 320 0 obj<>endobj 321 0 obj<>endobj 322 0 obj<>endobj 323 0 obj[316 0 R 318 0 R 320 0 R 322 0 R]endobj 324 0 obj<>endobj 325 0 obj<>endobj 326 0 obj<>endobj 327 0 obj<>endobj 328 0 obj<>endobj 329 0 obj<>endobj 330 0 obj[325 0 R 327 0 R 329 0 R]endobj 331 0 obj<>endobj 332 0 obj<>endobj 333 0 obj<>endobj 334 0 obj<>endobj 335 0 obj<>endobj 336 0 obj<>endobj 337 0 obj[332 0 R 334 0 R 336 0 R]endobj 338 0 obj<>endobj 339 0 obj<>endobj 340 0 obj<>endobj 341 0 obj<>endobj 342 0 obj<>endobj 343 0 obj<>endobj 344 0 obj[339 0 R 341 0 R 343 0 R]endobj 345 0 obj<>endobj 346 0 obj<>endobj 347 0 obj<>endobj 348 0 obj<>endobj 349 0 obj<>endobj 350 0 obj<>endobj 351 0 obj<>endobj 352 0 obj<>endobj 353 0 obj<>endobj 354 0 obj<>endobj 355 0 obj<>endobj 356 0 obj<>endobj 357 0 obj<>endobj 358 0 obj<>endobj 359 0 obj<>endobj 360 0 obj<>endobj 361 0 obj<>endobj 362 0 obj<>endobj 363 0 obj[346 0 R 348 0 R 350 0 R 352 0 R 354 0 R 356 0 R 358 0 R 360 0 R 362 0 R]endobj 364 0 obj<>endobj 365 0 obj<>endobj 366 0 obj<>endobj 367 0 obj<>endobj 368 0 obj<>endobj 369 0 obj<>endobj 370 0 obj<>endobj 371 0 obj<>endobj 372 0 obj<>endobj 373 0 obj<>endobj 374 0 obj<>endobj 375 0 obj<>endobj 376 0 obj<>endobj 377 0 obj<>endobj 378 0 obj[365 0 R 367 0 R 369 0 R 371 0 R 373 0 R 375 0 R 377 0 R]endobj 379 0 obj<>endobj 380 0 obj<>endobj 381 0 obj<>endobj 382 0 obj<>endobj 383 0 obj<>endobj 384 0 obj<>endobj 385 0 obj[380 0 R 382 0 R 384 0 R]endobj 386 0 obj<>endobj 387 0 obj<>endobj 388 0 obj<>endobj 389 0 obj<>endobj 390 0 obj<>endobj 391 0 obj<>endobj 392 0 obj<>endobj 393 0 obj<>endobj 394 0 obj<>endobj 395 0 obj<>endobj 396 0 obj<>endobj 397 0 obj<>endobj 398 0 obj<>endobj 399 0 obj<>endobj 400 0 obj<>endobj 401 0 obj<>endobj 402 0 obj<>endobj 403 0 obj<>endobj 404 0 obj[387 0 R 389 0 R 391 0 R 393 0 R 395 0 R 397 0 R 399 0 R 401 0 R 403 0 R]endobj 405 0 obj<>endobj 406 0 obj<>endobj 407 0 obj<>endobj 408 0 obj<>endobj 409 0 obj<>endobj 410 0 obj<>endobj 411 0 obj<>endobj 412 0 obj<>endobj 413 0 obj<>endobj 414 0 obj<>endobj 415 0 obj<>endobj 416 0 obj<>endobj 417 0 obj[406 0 R 408 0 R 410 0 R 412 0 R 414 0 R 416 0 R]endobj 418 0 obj<>endobj 419 0 obj<>endobj 420 0 obj[419 0 R]endobj 421 0 obj<>endobj 422 0 obj<>endobj 423 0 obj<>endobj 424 0 obj<>endobj 425 0 obj[422 0 R 424 0 R]endobj 426 0 obj<>endobj 427 0 obj<>endobj 428 0 obj<>endobj 429 0 obj<>endobj 430 0 obj<>endobj 431 0 obj<>endobj 432 0 obj<>endobj 433 0 obj<>endobj 434 0 obj<>endobj 435 0 obj<>endobj 436 0 obj[427 0 R 429 0 R 431 0 R 433 0 R 435 0 R]endobj 437 0 obj<>endobj 438 0 obj<>endobj 439 0 obj<>endobj 440 0 obj<>endobj 441 0 obj<>endobj 442 0 obj<>endobj 443 0 obj<>endobj 444 0 obj<>endobj 445 0 obj<>endobj 446 0 obj<>endobj 447 0 obj<>endobj 448 0 obj<>endobj 449 0 obj<>endobj 450 0 obj<>endobj 451 0 obj<>endobj 452 0 obj<>endobj 453 0 obj<>endobj 454 0 obj<>endobj 455 0 obj<>endobj 456 0 obj<>endobj 457 0 obj<>endobj 458 0 obj<>endobj 459 0 obj<>endobj 460 0 obj<>endobj 461 0 obj[438 0 R 440 0 R 442 0 R 444 0 R 446 0 R 448 0 R 450 0 R 452 0 R 454 0 R 456 0 R 458 0 R 460 0 R]endobj 462 0 obj<>endobj 463 0 obj<>endobj 464 0 obj<>endobj 465 0 obj<>endobj 466 0 obj<>endobj 467 0 obj<>endobj 468 0 obj<>endobj 469 0 obj<>endobj 470 0 obj[463 0 R 465 0 R 467 0 R 469 0 R]endobj 471 0 obj<>endobj 472 0 obj<>endobj 473 0 obj<>endobj 474 0 obj<>endobj 475 0 obj<>endobj 476 0 obj<>endobj 477 0 obj[472 0 R 474 0 R 476 0 R]endobj 478 0 obj<>endobj 479 0 obj<>endobj 480 0 obj<>endobj 481 0 obj<>endobj 482 0 obj<>endobj 483 0 obj<>endobj 484 0 obj<>endobj 485 0 obj<>endobj 486 0 obj<>endobj 487 0 obj<>endobj 488 0 obj<>endobj 489 0 obj<>endobj 490 0 obj<>endobj 491 0 obj<>endobj 492 0 obj<>endobj 493 0 obj<>endobj 494 0 obj<>endobj 495 0 obj<>endobj 496 0 obj<>endobj 497 0 obj<>endobj 498 0 obj<>endobj 499 0 obj<>endobj 500 0 obj<>endobj 501 0 obj<>endobj 502 0 obj[479 0 R 481 0 R 483 0 R 485 0 R 487 0 R 489 0 R 491 0 R 493 0 R 495 0 R 497 0 R 499 0 R 501 0 R]endobj 503 0 obj<>endobj 504 0 obj<>endobj 505 0 obj<>endobj 506 0 obj<>endobj 507 0 obj<>endobj 508 0 obj<>endobj 509 0 obj[504 0 R 506 0 R 508 0 R]endobj 510 0 obj<>endobj 511 0 obj<>endobj 512 0 obj<>endobj 513 0 obj<>endobj 514 0 obj<>endobj 515 0 obj<>endobj 516 0 obj[511 0 R 513 0 R 515 0 R]endobj 517 0 obj<>endobj 518 0 obj<>endobj 519 0 obj<>endobj 520 0 obj<>endobj 521 0 obj<>endobj 522 0 obj<>endobj 523 0 obj<>endobj 524 0 obj<>endobj 525 0 obj<>endobj 526 0 obj<>endobj 527 0 obj<>endobj 528 0 obj<>endobj 529 0 obj<>endobj 530 0 obj<>endobj 531 0 obj<>endobj 532 0 obj<>endobj 533 0 obj<>endobj 534 0 obj<>endobj 535 0 obj<>endobj 536 0 obj<>endobj 537 0 obj<>endobj 538 0 obj<>endobj 539 0 obj<>endobj 540 0 obj<>endobj 541 0 obj<>endobj 542 0 obj<>endobj 543 0 obj<>endobj 544 0 obj<>endobj 545 0 obj[518 0 R 520 0 R 522 0 R 524 0 R 526 0 R 528 0 R 530 0 R 532 0 R 534 0 R 536 0 R 538 0 R 540 0 R 542 0 R 544 0 R]endobj 546 0 obj<>endobj 547 0 obj<>endobj 548 0 obj<>endobj 549 0 obj<>endobj 550 0 obj<>endobj 551 0 obj<>endobj 552 0 obj<>endobj 553 0 obj<>endobj 554 0 obj[547 0 R 549 0 R 551 0 R 553 0 R]endobj 555 0 obj<>endobj 556 0 obj<>endobj 557 0 obj<>endobj 558 0 obj<>endobj 559 0 obj<>endobj 560 0 obj<>endobj 561 0 obj[556 0 R 558 0 R 560 0 R]endobj 562 0 obj<>endobj 563 0 obj<>endobj 564 0 obj<>endobj 565 0 obj<>endobj 566 0 obj<>endobj 567 0 obj<>endobj 568 0 obj<>endobj 569 0 obj<>endobj 570 0 obj<>endobj 571 0 obj<>endobj 572 0 obj<>endobj 573 0 obj<>endobj 574 0 obj<>endobj 575 0 obj<>endobj 576 0 obj<>endobj 577 0 obj<>endobj 578 0 obj<>endobj 579 0 obj<>endobj 580 0 obj<>endobj 581 0 obj<>endobj 582 0 obj[563 0 R 565 0 R 567 0 R 569 0 R 571 0 R 573 0 R 575 0 R 577 0 R 579 0 R 581 0 R]endobj 583 0 obj<>endobj 584 0 obj<>endobj 585 0 obj<>endobj 586 0 obj<>endobj 587 0 obj<>endobj 588 0 obj<>endobj 589 0 obj<>endobj 590 0 obj<>endobj 591 0 obj<>endobj 592 0 obj<>endobj 593 0 obj<>endobj 594 0 obj<>endobj 595 0 obj<>endobj 596 0 obj<>endobj 597 0 obj<>endobj 598 0 obj<>endobj 599 0 obj<>endobj 600 0 obj<>endobj 601 0 obj<>endobj 602 0 obj<>endobj 603 0 obj<>endobj 604 0 obj<>endobj 605 0 obj[584 0 R 586 0 R 588 0 R 590 0 R 592 0 R 594 0 R 596 0 R 598 0 R 600 0 R 602 0 R 604 0 R]endobj 606 0 obj<>endobj 607 0 obj<>endobj 608 0 obj<>endobj 609 0 obj<>endobj 610 0 obj<>endobj 611 0 obj<>endobj 612 0 obj<>endobj 613 0 obj<>endobj 614 0 obj<>endobj 615 0 obj<>endobj 616 0 obj<>endobj 617 0 obj<>endobj 618 0 obj<>endobj 619 0 obj<>endobj 620 0 obj<>endobj 621 0 obj<>endobj 622 0 obj<>endobj 623 0 obj<>endobj 624 0 obj<>endobj 625 0 obj<>endobj 626 0 obj<>endobj 627 0 obj<>endobj 628 0 obj<>endobj 629 0 obj<>endobj 630 0 obj<>endobj 631 0 obj<>endobj 632 0 obj[607 0 R 609 0 R 611 0 R 613 0 R 615 0 R 617 0 R 619 0 R 621 0 R 623 0 R 625 0 R 627 0 R 629 0 R 631 0 R]endobj 633 0 obj<>endobj 634 0 obj<>endobj 635 0 obj<>endobj 636 0 obj<>endobj 637 0 obj<>endobj 638 0 obj<>endobj 639 0 obj<>endobj 640 0 obj<>endobj 641 0 obj<>endobj 642 0 obj<>endobj 643 0 obj<>endobj 644 0 obj<>endobj 645 0 obj[634 0 R 636 0 R 638 0 R 640 0 R 642 0 R 644 0 R]endobj 646 0 obj<>endobj 647 0 obj<>endobj 648 0 obj<>endobj 649 0 obj<>endobj 650 0 obj<>endobj 651 0 obj<>endobj 652 0 obj<>endobj 653 0 obj<>endobj 654 0 obj<>endobj 655 0 obj<>endobj 656 0 obj<>endobj 657 0 obj<>endobj 658 0 obj[647 0 R 649 0 R 651 0 R 653 0 R 655 0 R 657 0 R]endobj 659 0 obj<>endobj 660 0 obj<>endobj 661 0 obj<>endobj 662 0 obj<>endobj 663 0 obj<>endobj 664 0 obj<>endobj 665 0 obj<>endobj 666 0 obj<>endobj 667 0 obj<>endobj 668 0 obj<>endobj 669 0 obj<>endobj 670 0 obj<>endobj 671 0 obj[660 0 R 662 0 R 664 0 R 666 0 R 668 0 R 670 0 R]endobj 672 0 obj<>endobj 673 0 obj<>endobj 674 0 obj<>endobj 675 0 obj<>endobj 676 0 obj<>endobj 677 0 obj<>endobj 678 0 obj<>endobj 679 0 obj<>endobj 680 0 obj<>endobj 681 0 obj<>endobj 682 0 obj<>endobj 683 0 obj<>endobj 684 0 obj<>endobj 685 0 obj<>endobj 686 0 obj<>endobj 687 0 obj<>endobj 688 0 obj<>endobj 689 0 obj<>endobj 690 0 obj<>endobj 691 0 obj<>endobj 692 0 obj<>endobj 693 0 obj<>endobj 694 0 obj<>endobj 695 0 obj<>endobj 696 0 obj<>endobj 697 0 obj<>endobj 698 0 obj<>endobj 699 0 obj<>endobj 700 0 obj<>endobj 701 0 obj<>endobj 702 0 obj[673 0 R 675 0 R 677 0 R 679 0 R 681 0 R 683 0 R 685 0 R 687 0 R 689 0 R 691 0 R 693 0 R 695 0 R 697 0 R 699 0 R 701 0 R]endobj 703 0 obj<>endobj 704 0 obj<>endobj 705 0 obj<>endobj 706 0 obj<>endobj 707 0 obj<>endobj 708 0 obj<>endobj 709 0 obj<>endobj 710 0 obj<>endobj 711 0 obj<>endobj 712 0 obj<>endobj 713 0 obj<>endobj 714 0 obj<>endobj 715 0 obj<>endobj 716 0 obj<>endobj 717 0 obj<>endobj 718 0 obj<>endobj 719 0 obj<>endobj 720 0 obj<>endobj 721 0 obj<>endobj 722 0 obj<>endobj 723 0 obj<>endobj 724 0 obj<>endobj 725 0 obj<>endobj 726 0 obj<>endobj 727 0 obj<>endobj 728 0 obj<>endobj 729 0 obj<>endobj 730 0 obj<>endobj 731 0 obj<>endobj 732 0 obj<>endobj 733 0 obj[704 0 R 706 0 R 708 0 R 710 0 R 712 0 R 714 0 R 716 0 R 718 0 R 720 0 R 722 0 R 724 0 R 726 0 R 728 0 R 730 0 R 732 0 R]endobj 734 0 obj<>endobj 735 0 obj<>endobj 736 0 obj<>endobj 737 0 obj<>endobj 738 0 obj<>endobj 739 0 obj<>endobj 740 0 obj<>endobj 741 0 obj<>endobj 742 0 obj<>endobj 743 0 obj<>endobj 744 0 obj<>endobj 745 0 obj<>endobj 746 0 obj<>endobj 747 0 obj<>endobj 748 0 obj<>endobj 749 0 obj<>endobj 750 0 obj<>endobj 751 0 obj<>endobj 752 0 obj<>endobj 753 0 obj<>endobj 754 0 obj<>endobj 755 0 obj<>endobj 756 0 obj<>endobj 757 0 obj<>endobj 758 0 obj[735 0 R 737 0 R 739 0 R 741 0 R 743 0 R 745 0 R 747 0 R 749 0 R 751 0 R 753 0 R 755 0 R 757 0 R]endobj 759 0 obj<>endobj 760 0 obj<>endobj 761 0 obj<>endobj 762 0 obj<>endobj 763 0 obj<>endobj 764 0 obj<>endobj 765 0 obj<>endobj 766 0 obj<>endobj 767 0 obj<>endobj 768 0 obj<>endobj 769 0 obj[760 0 R 762 0 R 764 0 R 766 0 R 768 0 R]endobj 770 0 obj<>endobj 771 0 obj<>endobj 772 0 obj<>endobj 773 0 obj<>endobj 774 0 obj<>endobj 775 0 obj<>endobj 776 0 obj<>endobj 777 0 obj<>endobj 778 0 obj<>endobj 779 0 obj<>endobj 780 0 obj<>endobj 781 0 obj<>endobj 782 0 obj<>endobj 783 0 obj<>endobj 784 0 obj<>endobj 785 0 obj<>endobj 786 0 obj<>endobj 787 0 obj<>endobj 788 0 obj<>endobj 789 0 obj<>endobj 790 0 obj<>endobj 791 0 obj<>endobj 792 0 obj<>endobj 793 0 obj<>endobj 794 0 obj[771 0 R 773 0 R 775 0 R 777 0 R 779 0 R 781 0 R 783 0 R 785 0 R 787 0 R 789 0 R 791 0 R 793 0 R]endobj 795 0 obj<>endobj 796 0 obj<>endobj 797 0 obj<>endobj 798 0 obj<>endobj 799 0 obj<>endobj 800 0 obj<>endobj 801 0 obj<>endobj 802 0 obj<>endobj 803 0 obj<>endobj 804 0 obj<>endobj 805 0 obj<>endobj 806 0 obj<>endobj 807 0 obj<>endobj 808 0 obj<>endobj 809 0 obj[796 0 R 798 0 R 800 0 R 802 0 R 804 0 R 806 0 R 808 0 R]endobj 810 0 obj<>endobj 811 0 obj<>endobj 812 0 obj<>endobj 813 0 obj<>endobj 814 0 obj<>endobj 815 0 obj<>endobj 816 0 obj<>endobj 817 0 obj<>endobj 818 0 obj<>endobj 819 0 obj<>endobj 820 0 obj<>endobj 821 0 obj<>endobj 822 0 obj<>endobj 823 0 obj<>endobj 824 0 obj<>endobj 825 0 obj<>endobj 826 0 obj<>endobj 827 0 obj<>endobj 828 0 obj<>endobj 829 0 obj<>endobj 830 0 obj<>endobj 831 0 obj<>endobj 832 0 obj[811 0 R 813 0 R 815 0 R 817 0 R 819 0 R 821 0 R 823 0 R 825 0 R 827 0 R 829 0 R 831 0 R]endobj 833 0 obj<>endobj 834 0 obj<>endobj 835 0 obj<>endobj 836 0 obj<>endobj 837 0 obj<>endobj 838 0 obj<>endobj 839 0 obj[834 0 R 836 0 R 838 0 R]endobj 840 0 obj<>endobj 841 0 obj<>endobj 842 0 obj<>endobj 843 0 obj<>endobj 844 0 obj<>endobj 845 0 obj<>endobj 846 0 obj<>endobj 847 0 obj<>endobj 848 0 obj<>endobj 849 0 obj<>endobj 850 0 obj<>endobj 851 0 obj<>endobj 852 0 obj<>endobj 853 0 obj<>endobj 854 0 obj<>endobj 855 0 obj<>endobj 856 0 obj[841 0 R 843 0 R 845 0 R 847 0 R 849 0 R 851 0 R 853 0 R 855 0 R]endobj 857 0 obj<>endobj 858 0 obj<>endobj 859 0 obj<>endobj 860 0 obj<>endobj 861 0 obj<>endobj 862 0 obj<>endobj 863 0 obj<>endobj 864 0 obj<>endobj 865 0 obj<>endobj 866 0 obj<>endobj 867 0 obj<>endobj 868 0 obj<>endobj 869 0 obj<>endobj 870 0 obj<>endobj 871 0 obj<>endobj 872 0 obj<>endobj 873 0 obj<>endobj 874 0 obj<>endobj 875 0 obj<>endobj 876 0 obj<>endobj 877 0 obj<>endobj 878 0 obj<>endobj 879 0 obj<>endobj 880 0 obj<>endobj 881 0 obj[858 0 R 860 0 R 862 0 R 864 0 R 866 0 R 868 0 R 870 0 R 872 0 R 874 0 R 876 0 R 878 0 R 880 0 R]endobj 882 0 obj<>endobj 883 0 obj<>endobj 884 0 obj<>endobj 885 0 obj<>endobj 886 0 obj<>endobj 887 0 obj<>endobj 888 0 obj<>endobj 889 0 obj<>endobj 890 0 obj<>endobj 891 0 obj<>endobj 892 0 obj<>endobj 893 0 obj<>endobj 894 0 obj<>endobj 895 0 obj<>endobj 896 0 obj<>endobj 897 0 obj<>endobj 898 0 obj<>endobj 899 0 obj<>endobj 900 0 obj<>endobj 901 0 obj<>endobj 902 0 obj[883 0 R 885 0 R 887 0 R 889 0 R 891 0 R 893 0 R 895 0 R 897 0 R 899 0 R 901 0 R]endobj 903 0 obj<>endobj 904 0 obj<>endobj 905 0 obj<>endobj 906 0 obj<>endobj 907 0 obj<>endobj 908 0 obj<>endobj 909 0 obj<>endobj 910 0 obj<>endobj 911 0 obj<>endobj 912 0 obj<>endobj 913 0 obj<>endobj 914 0 obj<>endobj 915 0 obj<>endobj 916 0 obj<>endobj 917 0 obj<>endobj 918 0 obj<>endobj 919 0 obj<>endobj 920 0 obj<>endobj 921 0 obj[904 0 R 906 0 R 908 0 R 910 0 R 912 0 R 914 0 R 916 0 R 918 0 R 920 0 R]endobj 922 0 obj<>endobj 923 0 obj<>endobj 924 0 obj<>endobj 925 0 obj<>endobj 926 0 obj<>endobj 927 0 obj<>endobj 928 0 obj<>endobj 929 0 obj<>endobj 930 0 obj<>endobj 931 0 obj<>endobj 932 0 obj<>endobj 933 0 obj<>endobj 934 0 obj[923 0 R 925 0 R 927 0 R 929 0 R 931 0 R 933 0 R]endobj 935 0 obj<>endobj 936 0 obj<>endobj 937 0 obj<>endobj 938 0 obj<>endobj 939 0 obj<>endobj 940 0 obj<>endobj 941 0 obj<>endobj 942 0 obj<>endobj 943 0 obj<>endobj 944 0 obj<>endobj 945 0 obj<>endobj 946 0 obj<>endobj 947 0 obj[936 0 R 938 0 R 940 0 R 942 0 R 944 0 R 946 0 R]endobj 948 0 obj<>endobj 949 0 obj<>endobj 950 0 obj<>endobj 951 0 obj<>endobj 952 0 obj<>endobj 953 0 obj<>endobj 954 0 obj<>endobj 955 0 obj<>endobj 956 0 obj[949 0 R 951 0 R 953 0 R 955 0 R]endobj 957 0 obj<>endobj 958 0 obj<>endobj 959 0 obj<>endobj 960 0 obj<>endobj 961 0 obj<>endobj 962 0 obj<>endobj 963 0 obj<>endobj 964 0 obj<>endobj 965 0 obj<>endobj 966 0 obj<>endobj 967 0 obj<>endobj 968 0 obj<>endobj 969 0 obj<>endobj 970 0 obj<>endobj 971 0 obj<>endobj 972 0 obj<>endobj 973 0 obj<>endobj 974 0 obj<>endobj 975 0 obj<>endobj 976 0 obj<>endobj 977 0 obj[958 0 R 960 0 R 962 0 R 964 0 R 966 0 R 968 0 R 970 0 R 972 0 R 974 0 R 976 0 R]endobj 978 0 obj<>endobj 979 0 obj<>endobj 980 0 obj<>endobj 981 0 obj<>endobj 982 0 obj<>endobj 983 0 obj<>endobj 984 0 obj<>endobj 985 0 obj<>endobj 986 0 obj<>endobj 987 0 obj<>endobj 988 0 obj<>endobj 989 0 obj<>endobj 990 0 obj<>endobj 991 0 obj<>endobj 992 0 obj<>endobj 993 0 obj<>endobj 994 0 obj<>endobj 995 0 obj<>endobj 996 0 obj[979 0 R 981 0 R 983 0 R 985 0 R 987 0 R 989 0 R 991 0 R 993 0 R 995 0 R]endobj 997 0 obj<>endobj 998 0 obj<>endobj 999 0 obj<>endobj 1000 0 obj<>endobj 1001 0 obj<>endobj 1002 0 obj<>endobj 1003 0 obj<>endobj 1004 0 obj<>endobj 1005 0 obj<>endobj 1006 0 obj<>endobj 1007 0 obj<>endobj 1008 0 obj<>endobj 1009 0 obj<>endobj 1010 0 obj<>endobj 1011 0 obj<>endobj 1012 0 obj<>endobj 1013 0 obj<>endobj 1014 0 obj<>endobj 1015 0 obj<>endobj 1016 0 obj<>endobj 1017 0 obj[998 0 R 1000 0 R 1002 0 R 1004 0 R 1006 0 R 1008 0 R 1010 0 R 1012 0 R 1014 0 R 1016 0 R]endobj 1018 0 obj<>endobj 1019 0 obj<>endobj 1020 0 obj<>endobj 1021 0 obj<>endobj 1022 0 obj<>endobj 1023 0 obj<>endobj 1024 0 obj<>endobj 1025 0 obj<>endobj 1026 0 obj<>endobj 1027 0 obj<>endobj 1028 0 obj<>endobj 1029 0 obj<>endobj 1030 0 obj<>endobj 1031 0 obj<>endobj 1032 0 obj<>endobj 1033 0 obj<>endobj 1034 0 obj<>endobj 1035 0 obj<>endobj 1036 0 obj[1019 0 R 1021 0 R 1023 0 R 1025 0 R 1027 0 R 1029 0 R 1031 0 R 1033 0 R 1035 0 R]endobj 1037 0 obj<>endobj 1038 0 obj<>endobj 1039 0 obj<>endobj 1040 0 obj<>endobj 1041 0 obj<>endobj 1042 0 obj<>endobj 1043 0 obj<>endobj 1044 0 obj<>endobj 1045 0 obj<>endobj 1046 0 obj<>endobj 1047 0 obj<>endobj 1048 0 obj<>endobj 1049 0 obj[1038 0 R 1040 0 R 1042 0 R 1044 0 R 1046 0 R 1048 0 R]endobj 1050 0 obj<>endobj 1051 0 obj<>endobj 1052 0 obj[1051 0 R]endobj 1053 0 obj<>endobj 1054 0 obj<>endobj 1055 0 obj<>endobj 1056 0 obj<>endobj 1057 0 obj<>endobj 1058 0 obj<>endobj 1059 0 obj<>endobj 1060 0 obj<>endobj 1061 0 obj[1054 0 R 1056 0 R 1058 0 R 1060 0 R]endobj 1062 0 obj<>endobj 1063 0 obj<>endobj 1064 0 obj<>endobj 1065 0 obj<>endobj 1066 0 obj<>endobj 1067 0 obj<>endobj 1068 0 obj<>endobj 1069 0 obj<>endobj 1070 0 obj<>endobj 1071 0 obj<>endobj 1072 0 obj<>endobj 1073 0 obj<>endobj 1074 0 obj<>endobj 1075 0 obj<>endobj 1076 0 obj<>endobj 1077 0 obj<>endobj 1078 0 obj[1063 0 R 1065 0 R 1067 0 R 1069 0 R 1071 0 R 1073 0 R 1075 0 R 1077 0 R]endobj 1079 0 obj<>endobj 1080 0 obj<>endobj 1081 0 obj<>endobj 1082 0 obj<>endobj 1083 0 obj<>endobj 1084 0 obj<>endobj 1085 0 obj<>endobj 1086 0 obj<>endobj 1087 0 obj<>endobj 1088 0 obj<>endobj 1089 0 obj<>endobj 1090 0 obj<>endobj 1091 0 obj[1080 0 R 1082 0 R 1084 0 R 1086 0 R 1088 0 R 1090 0 R]endobj 1092 0 obj<>endobj 1093 0 obj<>endobj 1094 0 obj<>endobj 1095 0 obj<>endobj 1096 0 obj<>endobj 1097 0 obj<>endobj 1098 0 obj<>endobj 1099 0 obj<>endobj 1100 0 obj<>endobj 1101 0 obj<>endobj 1102 0 obj<>endobj 1103 0 obj<>endobj 1104 0 obj<>endobj 1105 0 obj<>endobj 1106 0 obj<>endobj 1107 0 obj<>endobj 1108 0 obj<>endobj 1109 0 obj<>endobj 1110 0 obj<>endobj 1111 0 obj<>endobj 1112 0 obj[1093 0 R 1095 0 R 1097 0 R 1099 0 R 1101 0 R 1103 0 R 1105 0 R 1107 0 R 1109 0 R 1111 0 R]endobj 1113 0 obj<>endobj 1114 0 obj<>endobj 1115 0 obj<>endobj 1116 0 obj<>endobj 1117 0 obj<>endobj 1118 0 obj<>endobj 1119 0 obj<>endobj 1120 0 obj<>endobj 1121 0 obj<>endobj 1122 0 obj<>endobj 1123 0 obj<>endobj 1124 0 obj<>endobj 1125 0 obj<>endobj 1126 0 obj<>endobj 1127 0 obj<>endobj 1128 0 obj<>endobj 1129 0 obj<>endobj 1130 0 obj<>endobj 1131 0 obj[1114 0 R 1116 0 R 1118 0 R 1120 0 R 1122 0 R 1124 0 R 1126 0 R 1128 0 R 1130 0 R]endobj 1132 0 obj<>endobj 1133 0 obj<>endobj 1134 0 obj<>endobj 1135 0 obj<>endobj 1136 0 obj<>endobj 1137 0 obj<>endobj 1138 0 obj<>endobj 1139 0 obj<>endobj 1140 0 obj<>endobj 1141 0 obj<>endobj 1142 0 obj<>endobj 1143 0 obj<>endobj 1144 0 obj<>endobj 1145 0 obj<>endobj 1146 0 obj<>endobj 1147 0 obj<>endobj 1148 0 obj<>endobj 1149 0 obj<>endobj 1150 0 obj<>endobj 1151 0 obj<>endobj 1152 0 obj<>endobj 1153 0 obj<>endobj 1154 0 obj<>endobj 1155 0 obj<>endobj 1156 0 obj<>endobj 1157 0 obj<>endobj 1158 0 obj<>endobj 1159 0 obj<>endobj 1160 0 obj<>endobj 1161 0 obj<>endobj 1162 0 obj<>endobj 1163 0 obj<>endobj 1164 0 obj<>endobj 1165 0 obj<>endobj 1166 0 obj<>endobj 1167 0 obj<>endobj 1168 0 obj<>endobj 1169 0 obj<>endobj 1170 0 obj<>endobj 1171 0 obj<>endobj 1172 0 obj<>endobj 1173 0 obj<>endobj 1174 0 obj<>endobj 1175 0 obj<>endobj 1176 0 obj<>endobj 1177 0 obj<>endobj 1178 0 obj<>endobj 1179 0 obj<>endobj 1180 0 obj<>endobj 1181 0 obj<>endobj 1182 0 obj<>endobj 1183 0 obj<>endobj 1184 0 obj<>endobj 1185 0 obj<>endobj 1186 0 obj<>endobj 1187 0 obj<>endobj 1188 0 obj<>endobj 1189 0 obj<>endobj 1190 0 obj<>endobj 1191 0 obj<>endobj 1192 0 obj<>endobj 1193 0 obj<>endobj 1194 0 obj<>endobj 1195 0 obj<>endobj 1196 0 obj<>endobj 1197 0 obj<>endobj 1198 0 obj<>endobj 1199 0 obj<>endobj 1200 0 obj<>endobj 1201 0 obj<>endobj 1202 0 obj<>endobj 1203 0 obj<>endobj 1204 0 obj<>endobj 1205 0 obj<>endobj 1206 0 obj<>endobj 1207 0 obj<>endobj 1208 0 obj<>endobj 1209 0 obj<>endobj 1210 0 obj<>endobj 1211 0 obj<>endobj 1212 0 obj<>endobj 1213 0 obj<>endobj 1214 0 obj<>endobj 1215 0 obj<>endobj 1216 0 obj<>endobj 1217 0 obj<>endobj 1218 0 obj<>endobj 1219 0 obj<>endobj 1220 0 obj<>endobj 1221 0 obj<>endobj 1222 0 obj<>endobj 1223 0 obj<>endobj 1224 0 obj<>endobj 1225 0 obj<>endobj 1226 0 obj<>endobj 1227 0 obj<>endobj 1228 0 obj<>endobj 1229 0 obj<>endobj 1230 0 obj<>endobj 1231 0 obj<>endobj 1232 0 obj<>endobj 1233 0 obj<>endobj 1234 0 obj<>endobj 1235 0 obj<>endobj 1236 0 obj<>endobj 1237 0 obj<>endobj 1238 0 obj<>endobj 1239 0 obj<>endobj 1240 0 obj<>endobj 1241 0 obj<>endobj 1242 0 obj<>endobj 1243 0 obj<>/XObject<>>>>>endobj 1244 0 obj<>stream x=N0~9R؎c+($&u~Q=Nh97Wh -N\a.0FiY.vd 8JD ?:h 8BM)׷C_E{f1+3ŵoE~zIwҩMozL.xkLB etC ߌ#1sU;.I@Aendstream endobj 1245 0 obj<>/XObject<<>>>>/Annots 102 0 R>>endobj 1246 0 obj<>stream xZےE }߯7 N_ VYS<;$BznP<%sܠymKBho-Q- E3]fLF>bCL|3M,>c뮟R _.Cd Ǟmr_p..ar.k/]v$.뵭0Kk%i6Y^Os>>^`%f/M{#wb^XBNad-6bqeV:Gu1GҠi~Z z|OS(/r96m\qDLN|&JSn6"dk{NrDakDNШs1+N ~{8{g֛UpÓMŸ,\8汍'PPLiqt]?z=7 i8U:w۱/o.ۋ'׆tjWgGŋS$˛ֶWc?=#v0FqE¯n7W[JtMwf9ȂVҝߓWl}y[·3x\4\ؕ jbS?&뎴Ig j゚ +"؀uO?]HtN@ĝλj!g8{ϐ[{i[r}_JBV!զ_#Gk%_զK)~_r'<+endstream endobj 1247 0 obj<>/XObject<<>>>>/Annots 129 0 R>>endobj 1248 0 obj<>stream xZn6}W1(7ۈ1Y^˶U*o_339Roq\I%De"Zm89Dyn,Di\ Md(7"81/OT 9&>4QMy ˸V.&bʿ^g-s xa=D&2!S2FDY*0$J<(7QUa v%`@2XLPDOAJABAЄTOM 9P;B[F& OYζ(JXن#PIjӸZ:XI!xVĚ,c8c,m'5X8)X"UlXR\j ADLF;yRcZb['daXf5[bB:-͓ߴ܀ >P r8lQp m&S"6sEܲ b!KRcHX m(Z@LDA'5&zVĦ%e:dm'5ؚb!X9YKFҬ,F^ f8ds<)ja14MA 8ikB5TbfKCiIY`\*#E7p +8⨔u \YG\-0w,E `HVl44*)bgR*сb3*)U?RI e^8OT,Y0qdٖM6!#,yA@u4QA$ y8vSI}Fm8 (\Lvc CLRhd+ڕ0Uc5,px0ZrJ-2Me 7I\Z66o~k_XM]")d ݼcz}m8z_<^%#mWCjv]TJxJ:%QCʒĨ(_}1t6 ?O{ˮF-LA܇YMY0+ AF tP+ٹm 錴߅뷋*jEJG8I1~nW͂V )y04HS`+QaҊI4 ;CvjzV'n3ƿ$,Lȟ(Z256ea8K]By?yOѵAIxmfr~JI! LJzü^6 ~^pE{YNoJB+ɷ J2"Ʈ!\hy \pz!w ;1yu9fv$%OGlV;>MY#+_5C3ۜ;̲0n^LOȺ)js<0W+y֝nZ|ޜ-Mh'3_%p18%jVЎ5^_\% f{ka<{┹IԬ*\|\%ذSsSIM0.OE$ cӭk﫰1*ٕK8N $^dܶl9#n s3ϏCAr-nEq3}{e }sjv$S4bmيO:i@=IvNt{OPa1FLJr.ǧ|L4R IRhg4YSUw)wK"{s>S|ґCwص_ij zEj3fI5ldl/E3\{TS,#OKӒxr.}xh~qe5`LUב dbendstream endobj 1249 0 obj<>/XObject<<>>>>/Annots 136 0 R>>endobj 1250 0 obj<>stream x͕n0EY OekFEQ>@eC,%"a"3 A? N`{\42V#~5<,yo錥(Zԣ`/Gs3(KGp`/(5L53\BSMn%JIxӢQ\=)L55m&96.jlZt'#VL!b`i/S_T$nU&q}%U/mcu_=FhE5؂]^<%{XM_6SgqT~]NKgnөx&dk1ug0~ f4:KtD !JA'&eZ#`? :vS uKʢCLI.KyR u)F[4=[jbە\>/XObject<<>>>>>>endobj 1252 0 obj<>stream xmVr8+t+-)'viwS:/LL̯ٚVZ5SQ;nglGZ?vwqsG[άh[,ew)vbs>r]Zެ8:oi]g[>- COދsiwA9#TRx%Rg l>xQUH٣VFҖ".=s +ZSr!u^Mą!#nQcz~hKœvxWMPjC@Q]"y*\I " W!(3z2B)ft: 9me FDVuh`SvO \b]S`BtxTA-~ AGJ=BլJ:TP n{\^KúDW]fp:Y,nfiTX@k-$x& mJemR:z֝{#5jBdK2|Ch6zYi@;pUmTr|/R!wOW a'IeZ";t0yt0ì>= rzqI x.uD5̫=H[E&h:wU4t3mCGgŮb*\^æ@Xu H"Z#>/XObject<<>>>>>>endobj 1254 0 obj<>stream xWn8+l'nMvZln(R%}3l.آ8޼y3q3~洼{*Y1×_aGqjQ,h]ɩ?hJz\wʚtf<:/V 9Z5m典WAWƇ#VG]̸vηhӘbRm)W{G!#!*}Zh&y5p>P7&=AA*ˮJ=mF@ eg*q.[tJ%RفI sHoi7<~0Ή+Qo_u#/9Hr=VSQ䯒tvoBPk:|5)(t,1*&tyUDLﻪڣB nwF36.2X)tؓh*]M;g+YGIS;*:NE;PikR *./ƠvAKLcg OKẋUӠBP;SrjЊZ4K[ФLLl;&iTn< ؄=QdB0/;*tRk J},r hN`sTJ/D-I[[DpUΚ4,cMd`f%_HPb5=L$Rp3'˅NۓU@fWIt8A# ]:7BR0܁S| Hi2!(Ey!W9^> dJX0 lovlK[P?U7l0W ƈ5hȂS.jzc"7):4@No_FcBP^xOT/qGXGV׀|L?޲.L~iO148xr}>1,#+/d pFh3teHeU18eB&{škPt^ұ`؏PO;h@;wLj[Joh) t$whݘj>7s5r iW"ﰷ0Y EtTϴ Nt$ppWz!Y&l xf=ԯJT=c"O9W/t} m[AhtET-rOV/S\&;ӯJ7dv 8P$PFGSK%$ AAOnnf6Ʋ5NSqr,NS #݋zLk,vhc3yzW7A d@9ZN.r G2p%p\}\,b&5oy γw:%kdxa=ioY4- ϛhj'endstream endobj 1255 0 obj<>/XObject<>>>>>endobj 1256 0 obj<>stream xuUMo8W zrX,%YpoP"Jo(U-'1?f޼f>/XObject<<>>>>>>endobj 1258 0 obj<>stream xVKsF+e #`yF6O9$+.#hgFvz[[nU2i{R/+h6qIiJ}ڬy<4SVA7"DNQNmXx \AU $Ka0_Fd=pM||ǛI{R!e DP7Ek'i (30=jiM~':֑$UZpL?TM2L-%tcƢi*-I C0зe$*(Hߡkeh0ц,0ىZͱhugLS&ʝ=@RogtAp*t%200_*9Nq(TJDUj i *y4 4S15 e +З8*husMQ" }BqV*fz,PS_ZT~?lCư-[;!9]%>k@xpyj$Șguamg50$]c@mkɷuM7, Gendstream endobj 1259 0 obj<>/XObject<<>>>>>>endobj 1260 0 obj<>stream xn0 ~ SVرcW=0̽ȴUh"1[x88CK Qו ZTIs6:Q:O)gТ98ӕLڐg3d0J|ջk0h9ir>Vl\<9:f}Empoq)k5ȶanyOن{9hg4Ia.FTm ySlS5H~x4F[ZܮBmuM:{endstream endobj 1261 0 obj<>/XObject<<>>>>/Annots 141 0 R>>endobj 1262 0 obj<>stream xWr6}W2#AUT:#;։UIqP$d3% *`zI3Ş={Dž`jC]LWNo)xAc3G:^<.؁,=6)lVKueBQy^$sxKH+3~01:SNMH;5cnkH=!] N,- hLyrŀh1H4.V?`]ǘp*/Ck+56f7_`K.ٔ ]vd\۬Bi)0!5$1k2.` e&3N;45Y3uβG\Gp;rA*P\6 TLyiB2H1uh!N`H1ECSxjʝ h@fC.h1H4.V?`]ǘ& p*/b|3Ñ-^8ifd7u4|.*ɟpY'i cXyNo(sfWs x =.|6r`3)){XD90n'TYڅD"$/acH(JDN'0hp# Ry,r<` )KCEP ^R ۂQ2QV-"zIY="뎱& d]FO>yIF|l8;y(e?W# 8B%#<ޤX-pkzl2^=ZCXC<'nIUe*^&+P,+dShrS>Һc(~/+-DI9ݗ!~ З Kb]Ծ !'y>U Ssd:Ѯ/K|]$yɋW^(ZS$žTd?1Oa`dnX;8q/0A. 6Hyş޴]J jCX̗ۇCʋֆs_T8@W\T$EG?9B'W7< k=XH՗([صg6 77jޑ2lv 8Ƕ-eRn9v>E6Xh} _$ 7) =$lkߥ?Pxl5LA/oאnM"R#0Jbȝ2ߑ8'?Gk$*(9@x69a4=U[̱g'{K؞#DZl"6}::"TmqO/c6rmا;ѕfo\Qg>GfI|qGUZUx%IyQ]q5dH҇F4*L6cIg)U8ϰԩU &,[_/yendstream endobj 1263 0 obj<>/XObject<<>>>>>>endobj 1264 0 obj<>stream xYOH_1ˉ8SGr`**!U&1*]ۡ忿M=^Ȏ{3v0 N`=c\}T`:Og2 qmJ&)~TKHxU$MtP26|$,$84#lC:Q8&nNE!q|v42I\rm/u.E0wOfLd8F̅qә\!q|vz8ƛC/aPR.Ԕ6Y`2NɌ) Lj4~: 1N>AL$s<\rl/dI"U;'ӦH2#B8Ft.8t>;i=|D~LrM^j&cPa蘭̘"p1Ogr8ơ٩y?U.E* )jL-RAl.~2m$1b.4cN" qC糓gsE( !ݔ6Y`2NɌ) Hi#t&Ac:Ğ\rl/E0wOfLd8F̅qә\!q|vzS% @ʅ& L 6I?1E11Ogr8ơI>" 5e{M-BAl.~2c 1b.4c"qCSGD>& 5e{I&KL 6I?6E11Os8ơI"'+>0\tSd"T;'32#墧qә\!q|vz83s, @ʅ& L 6I?1E11Ogr8ơIмht'GBaHPSd"T;'32#B8FL.8teoO'=@Lb|[5ac|&h P1oME80\!M~)T=jH(H*_Bڲ[1Z heIDn>}.ӟ!DD?;5vNosH5j6<u}s$SKe7"V1#%Y7fWVнt}4»>[jIږMǬJx8:E~ĕq~0S0L*Q9_fsW qZ>]R3LM"uzn]ߌ M*{H+.N揁h˂z۽x=QIhlh7Xu_J ,--.((4l>/XObject<<>>>>/Annots 145 0 R>>endobj 1266 0 obj<>stream xXrH}WS!q:.j $Āf[$~ w6ݧ{ri#&WCg˷+w2t\gCǧ)U|ga:w>N)yxXǁiSA,~JpY8m+K"s\F]g \vQ^k W6BøL@@+?E 8X9sYxa=^, r'Q. VW_W/1_b|-@ЅIH*e|a߾-oV\n?->{|Rf( Ee6-]np/fRWF2&C6shԺDV%j# u?o?Aߗ?yæ}ZU w HTxj/X..Vk6C~tqI]6^3Q\j>Dڢ ;3Mz<7LH?,9?7w;kSv.PH]7]ߺyr稴.z TtvkGE+p Jw ݰ's\#E 27]w({hf Jw%ӡUE -tL? h%'l* {2Gj,2 HC6(O2Q}QGR! s" apApȫ$U<=&Ȉ|ϠOwzιOwiI/(aV#[l0=D<3`@p&Ԡሪij}augG?hg#=K6 Lދ wx8p}/KFA4 ߮^ |endstream endobj 1267 0 obj<>/XObject<<>>>>/Annots 150 0 R>>endobj 1268 0 obj<>stream xW]OF}W\$l$c>,K!j'{ƝG\W+UDQ]@k0K |ޤuЉ`J4?DZr~ܭ>{<\=!a%tqr|bYOM\"4*c+e"kUSm K]&Yf6g!-zjfm>e[EqK!yNIM9skliGjFp_c qs"PB}8ZŽB犞 QJHU)QHz`@pl-[@7#Rb,r:9Ẕ&G~~xH_q`?16^K3ˁGDlG|+, H3s_Ռ>ԝS>[ݛ>ˍUu -u$قs2M:'T JiBaTyY.&!ą2A秞p+CMpQh:vr }[5$޹Zm&e cT0anK9c{1=Y O7V[_0_4Y#܎/^Sj^Օq')DY8) +…s0',,x7gendstream endobj 1269 0 obj<>/XObject<<>>>>/Annots 153 0 R>>endobj 1270 0 obj<>stream xV]o6|{:y?^[q# ^\܋-Q2JQRwI(i,;;;;ܟ| `69}}[FS825n3Hxָ GdxxiGR)|C&X&#Ȼw'(ŐH) )ǐ8eYbOuf$ԩobo;>vA0"CbX~ywحGv+5BGᑗ{X-ph*.pM^J}p SɡHk0 I0dHBj}* 1;0K GL#U~T?'U\?W5 (feZKu8M4g≒YZ0Z0d^Ҩ;7H^1R4ST |NV%SKFoPnX[.Zҡ DڛGTFm:F{)Xdh4F(߽Oqye;U.pn]mak.u%}Sf3 M֎\\3ގ}\Н`F/ܑ:9j":38JĈA)DckE#0Qwd-!Bhs gr`f݌kqэ7s|[,)PAS(0QX^hZ*L$uHx81D_0U~$`dhf8SACK8kԖ+!wHB)T$j9WGj^!})?2,ֹ9e·8sQuFhbc$:7BdUa4zP 1D@}@U 2i!e22X ]R>wjZ= B6mc'C=q*S9h]`'|Vhv97=(X4^n=BcɴdToiy`>ɯx/lWj( /䌽tY} 3)~Ã\Zp/mt9p$]XR9%X3dupmp\fip)pN*߬M-,oJ?Auզ--atUMC_Gvj7NH`2yϬ[WlF`1ox6&i]5v4]zendstream endobj 1271 0 obj<>/XObject<<>>>>/Annots 155 0 R>>endobj 1272 0 obj<>stream xV]o8}ﯸ}YQQilA}۝$d'xHlva^ $s=:o$Yށp>?<4'A*)^gF2G.m⤣^?nOn`dhiS]Nwk&`6U /ܬ!:?@;QbHFV_!xhhP^9(*jMazC @{2 - خXE,.^aCps;_.:,.jJ~PejQ>F \nЊt7_vU4º8TXD֠ PNv؃C:d-$+Y)82Fg@*ETm!/~vMmMm S%Ԝ,M/L|ct>W.f"=ah` 4~hL:?V&atzu%^3r:G1݌8 )7 ap4On˾؞N6K֌nݥȚcu;cƩX#x&RdRp c~>yg CEp5H?nC{m@*SQFv7>Om)lm|Bׂendstream endobj 1273 0 obj<>/XObject<<>>>>>>endobj 1274 0 obj<>stream xV]oF}ϯD況D!mHq 3M;@dj%;sϝg-jE6u.(nf?ƨKE ҿ//;%ަIQ\O2"*d,MJRlLR%XxX4&u*ΣΚ:aktq2zC6O Ѭ]֩?t2;;5ٛTvίEL~J_6FʃP+y" qba)b66>G4% Jl$b2`T%RgC{oߠZ͚R)%j^ mIqn{4A  r[8̜Iʑ69%hIH(WW/i]#q'3"jk+7 hI8_K=a=GzjdkpңsYse"_yF%E33糭絖Z(F/ԲQ>\1"M(^ DG1}T N_EThΧY«݉wsNS+b,Ob~g-vek>9 qnhhRiLlxf!rF_ ' 9$T!Ctd&2\8wTN}c3}V5}ۍn5^fFGW ݳa׫Y'fqxTCq[ D΋%t`?@"X)TДygA.jԙ=fH)ף5ZA5%\]b4þ O3߁OélTn  KRdAQBrZArs2j;1W̱~JޏK;-zꍲFgR%xߏsC,K¦ rҋ#O0򕕐.NB u u~J'xe iOU D<2avp j ,>]YE .?MnނR㖽g9?=z{jRkڀejؖjn6,@HN\hKeSo7 G _"|G{`{8hVt:USڇ>G1N^U`Pm*Aozaų;i}Hi`:zb ]Ay֘9uE\6~;XXendstream endobj 1275 0 obj<>/XObject<<>>>>>>endobj 1276 0 obj<>stream xVmoFίH`H@jKQ E~w];361NڻD읗g晗@ a40^oNw7h !;M[^'ߢ61l"k3M}a:c;柎;y^=,FC%LFI.?/iK,LU& ()BVdJ34G󱉺 Eq2Bƕwp{?& & mS{İ4G h @ JE¾pYKDП/uHL-dSep{LusR16 0}6iWڨKQyp7CVYܭwa`Wf28ı)ѳ,kKS@Lri%s.1Pm 4:y^|Yֿ;-S|V[Kh[Aξr0F( Jt1HvX_ {{ae0okoLu9 ?L-CjP8KJm sTg0UGqu SduAi8W&odfu:јJrcR0(8Ҷ*,o3{!vpԆ$Ԏ Ա1u=x1t5 K)1a>5Uʨ.%rY:S2 lY5v b4B,Ьz_=뀆 H[Q!VP ۹vLH~-ԐU}C[G>1:!T8K M& <;^]l56e*]hbPF89s˰у (wé͒`CEZpRCO#NR&7pR LpVW%O0W]_nxcZf??R;ҪľX N2@P3{a;BEA4[QЊ,y0XܩtUn<[+ۆ?M=taY/f.V]c#~1*zfkoJ8X"0 &7 4윀hɒ &x:uI%ɥ7Ot endstream endobj 1277 0 obj<>/XObject<<>>>>>>endobj 1278 0 obj<>stream xmVr8}W000!<$RNfEF< lCC-tnAzixD'dӃ^˽Pw >Mrz4 2=&- ^Ҽ!=#*Թf%>Z"y^O.ΟzvJ[%QaXċ-vB\<[;{ ϻWKKa(gJ-+XRLby}nї'_23r-3 *c 'L"%hmF.j$U1Awo+e.\'RLQRx%}+)g!UnCBUya~.@º t%JKiU킘N84OsrSxKn念s`˵sv>y[L su?+S+=SگŬ%,梗XR|x#H:*IB__YCPǾgf2Q 6١N _ixBqvͩ& =t@v-]M:0wbGڨ"#}uKv(6+84r!?Vc*/чqQEoC{6t BJ9Zy5vMk>QbȗYG^hD T6~D`JjQqBJ-㓊-B-꣺E LQj5%1j[\vw"vm.x'F^ʿҷp.Oamo ϓۈ뚞fO٤L pwup)UpW9R1})_Y.O<àX-M;W,3)xi4=Cz3#endstream endobj 1279 0 obj<>/XObject<<>>>>>>endobj 1280 0 obj<>stream xV]o8|ϯXlv~$-pJBK͋Dd[f)ɖE,^h-.jNq~>S<>&4Q"f9oo(J|̔8x/\e%[Q!)UL/xJ:gLh]BRU&,d.u)Je4~! KJKF]Li< /C š*QJLܬMv GWw&YƸ^i]-H_FRjMN}DRi@eJҦ"ԕMk,)*4Ē;efSTұ-P:1{G7eH^QRAq^oT ѱ}dq{RhPƾ.Y Io[ִpjHx BxY͵ґSApt2sawR+4d'JMe;@bhahX4ʟN_yi8 ,s'zxz4²TV܄}#;f !ZU*$&< q^iP/Nsh>EN5,ŋo+v^ϹITZ: D;j`bHAɎH^E ڗ7;c ##!B~KZ"cP!գˎ8kmpV#Ar8OcY/kZ ̹q6oe@ 3`2V>r oؕjGΓ><)S9fT X6̅~ [P^eR 0yH_.{d5 A`!;ю.pq~Pxg͏BkQr͠?,rG}Lژvt$gb+u `:U2*'}kD0[*/区rhߏދ{&f7xG;uP*xzK|k;!6--=$+߀9g LX?%k圃?(ƅp>/XObject<<>>>>>>endobj 1282 0 obj<>stream xMoH#A2-3JPVnvB.݆ݞn; ~j vH㮯ުދi1M攖_W\h2[ⳤd!p2<ؾwhx;8ufX.'B(Ea_)e Ykk(/Sn{EkrvdIZDd6}TgB XgnZݰ;+.HB*2HV*=iOEh2E?qIliX,s16yB /i0yѫd">Y@)2 ٜ/tzetI2է@_ ϽmY]Z{YSn!uYF{$ JJuSTui~a-TmVKjCr Ǡ1QPE'>?ЗkR? 0d dvR.jʒk m7P'7h6ӒE:`lzB"*yJ趥whQ7V9V,u_XN9O: v9?ʶRyP#c'<Ƙ(~/8w6% ) Xt$@!JUZw8MdTj3j\q66Q;, OFtPt3Kw/K$#GDy ٽB 4oo & IX2 r:@76IaOFbC܋EaSўc7砢Ot؎t%@.:ݕ~7U2͕ jX 8oKJ9DFnxbBd"p ];,'OO(idI h?[vLE2_Wٜoֽz>endstream endobj 1283 0 obj<>/XObject<<>>>>>>endobj 1284 0 obj<>stream xmTr0{Ċ:viN/#Yr%yO-S`<}$ #P5Tym_68֒l.FHhcIZabU^}aޖ;gNy,o!& GG%`5~P)hCK=bюgv|z%yr74>w(oRyNFl*vj$sXX̗,W!w squR~>:>٩ ;<\t,VWB$bm?Eendstream endobj 1285 0 obj<>/XObject<<>>>>>>endobj 1286 0 obj<>stream xV]S6}ϯ0 I }K f:$[Jr\Ɇm2pq9hL|B"k_jWE~g.hULsbtТD֐0VOWOKSl@ XG[u9%5OV$V#$&($^Uv$jaZ#zڊpoo3.傲4QF |8pN>X|xPB'\ e,ye/qklPz<0U"S*Ak hUբ#U頪*ng]6R1ڝBg.Vt~3rQ(~X'c69Uj8cE)mn+[`˄ٽ>EmF? (GV`M_*a60q 㱈5I'#Zm62M 8zW wi ϻo&} Fce;=c)eUR@ n+]kB랇`@Gpz I3}ÌBBeBŤE&c?.Tį %HCҘ 'Q'!0[MK p BW+c ͮ@6cHEɳx<| 8>Y\h5W%.S< AKH٢fBS*bFճ7e033!tؕԦv(aEфu쵿B0gDÌAímj=:n?r Rɜ(£ᮅT ԛ@|`"hSV +N=vhcB$BW:kz6^r53k@aɠk,\!Bc}nx'mjszk*ãi *~'^;kB?H8`i<ȉЦuCInHCoq̮Q\?2\ ;H,^LDS0&z`m=W]d k :pDG'KzE׈[O֧E;O; Ȕ pm`)=p  =n x-l/z9O[Sn1~P=b$<ũ8Ca{d}3]Gr YBl l5'+חם(_mBDL&#R="RGsEfKWf`?ᾝ&r6b_/l85^pW_GSfendstream endobj 1287 0 obj<>/XObject<<>>>>>>endobj 1288 0 obj<>stream xuWMo7WQd+ܛZ$nFA{0PfInI + |I̛]i_sZ=լnO74foWmxfFr9H{Fx̞ju <K[IʨD Y')02"?lt~Wr边/ "7ξJҮ5ePx7Qx,j_8>0IUeGAr2DĦ[;P7Cťk# Α)s{'tAp{{Td^]1/$zuЉT.˝A_! Ijz C{n=O}AGLE0 G) d'yK'<%hb N<L*D>ejIM牱 z[ j=hS0Vu_ZNu^U0%^+hh+>O"?Qc/*Dh_e+W 1*nPX#c x,!֨27I+E`hg@`:CErHW2(drDJKc|ᚲ.dD#"n?Pg`gy¾umSoub @fwjU/2bQ,C(I &Pb(+~lns{_endstream endobj 1289 0 obj<>/XObject<<>>>>>>endobj 1290 0 obj<>stream xWMo8Wb5NY4 t[([TI*mh66?f޼fbF3 S\bn+E;^V(VZzR!"DV@ŨVZ#/0&q1jy2V scQ:֊}(L30,pL),,;TV4# ![=/-7׽YUm=U{<|y6-b eI6ɪ7iwVy/5|1F('H,bEt-fԓ~NqEO5  Eߚy{!(l@ $"=`PK:"dtj؂S:.Py ʑ6L\:GK""G c'WjbL sal$x Z TdTց8G ljUf8v>-NAV~|ӆh\+sU{ +Bwx\/Yd"Z Dl១hf`ZNxCɁQʰ~i P>EeYb-5RcgPKy51IõtU)O7l4?kK|0S[9O# a 1 )#'9~(M`I^&`Z/q4`Kk+|t~<9fWQ&뇗61&Ym'ϓ`5\ReLzE#l>xM᡹cʖþИA8ia:~\rx./RŪk⯋c-endstream endobj 1291 0 obj<>/XObject<<>>>>/Annots 170 0 R>>endobj 1292 0 obj<>stream xVmo6_q&V-[K}H~ZhDj${m{I{=wR738u,(eɌjLW}$P3v"wt3;fYX`yw'@S\Nlw'NUoz;Ӱ:NKx~؍+}:Ӗ]FiJ ^̒rJ"P1U>l[ ˇ ZƚXW{r[Vii-Α MV[I΋3F䒔#quVj 2b`LtW^钄.߬0 F3MTKpX42V^J}0̒E gpu |"ARz8.%3}cph]Id (gG㈯#̱ VFY'tZill<-eb{ch-k82XP['8`kŞ ExZKwD$ 6$mZ3Ho\2:P|\l!.SN[?XoE̊c] ` dȵkk8O$[^ƽ 9' xẇ`./_A ̯(sҫWX<`O^pͳd>[`Iʗ_ ~-^endstream endobj 1293 0 obj<>/XObject<<>>>>/Annots 183 0 R>>endobj 1294 0 obj<>stream xVn6}WLV,I6m\ LlEKQ~}ϐ,;4PBqgs+~ci0DzQoxGS ѐ4'_2zjqσLqujaDzox2tcHQ7[M,pj'oO|{8Onj1-RNu4GـkmI[8RrJdp䔖Dd7tu5'oZA27˯u; 1#W"uҞmt[Ii'ω~H`CUyU|t\9xFy:+|t* VZjcLiy}/A\n+&W>+7OҾD):# 1 ybJ+6rMn qMeOҟSe Gfu|`֔mCZ JgPX vI~W Q&Ḛ*@@B2k"_ico% AŨ|]p31l/|Q)-S҂%MhtpA6`,gXz7?JdYd>߷juiI? 2LZ ۿw'i2_ vܸEQD?}Ajրu|J{V.#{ sH!Z{Gy:/"+%YJީ5)٨:褂)"C&ݙ*1vg0)mOhSVLb_`D3,vD9bn z9C͎#џmCeBA;%OSC@(9=4H$A#KL.R8-Ghgz6n n:>y-*]#dgVsIu NI/d*x 1ռP3j(,˷۟[pPZrO5YnM\ 0\ qYW5+|]p4{tQ\T|@M~UӏoWj#|bN4KzG:݄~Kqq1XPNz`Ox}V[~k bendstream endobj 1295 0 obj<>/XObject<<>>>>/Annots 206 0 R>>endobj 1296 0 obj<>stream xVK8+H&'TTeÞB&t0x!$[Im[R{\ $x!$Eu\\9>D ?t|(@Y=H]I7pK+E/>Q:zq`Fz[$[(utňu($]Nw9fOzxJ]< 1*ɯ)rًN£.l~0_c8tF#)yҟo5L1(DL ̾,rӞue@R.נj)sa(F'NAL&JX=4z_&$%%iacJZbF@עPW7Ya̢_V=Rx-N^U,d '[e9+w?~x6y͇,x|j$19< 'kQ~Ԥ3oFkHM P3c^TԉQM0saՍVӪh:E s<0 hct|jC?JMpow2D~1z`]a|(OCcsl?,UWtI?5/<g+khFCϛv?}Jmڷ*՛5+[/$ћ Q߽iXۙ݋]d3}mYj6ABȫ'4wvY.d%1 絃nO p'L'o`~B|Vyiy:ʃAnb(;c-r[$~/Ab?/`ީ/TW9wYGa䎾q#߉hUzr{ c*endstream endobj 1297 0 obj<>/XObject<>>>/Annots 215 0 R>>endobj 1298 0 obj<>stream xUM8+rb66_s#Ⰷ$l!F-9< I PTQe~֏NLc )SVv"aiىg1KiٔJN"6>}G#|%4 4|h9,B4Igl&C&1T싧36@QL4}_ߢ69 zf wYWdٻ[Dԏ6DK/_{~|T=ђWBg߿|`cCF;Ҋ89QVw6]HISȷk9UHɆ^{ )Q=Zh ?:0R\f8硜?n{?n{ DSc A4xJ@p+Ɵ!\"xgad&/>i!Z_[Ps,soѷ`wf\7+ؿxa0$Л٬VoȊS ~vJR٘ uF:K(B2IaفE;Zg=Уw+A\| enioto8%on[h=fD^\(7,Qv64;YSRZ PgPV7tP 5qGޜEVcAST]nVI]7( ",\U%jSi+9xjL ^JDC5vDm0lw>/XObject<>>>/Annots 220 0 R>>endobj 1300 0 obj<>stream xVMs6WQH(ʒݛ֮M'z3H$$dIYd:=#zo߾]$c,)YSVOjuvIaAzMB80>z, 6w ,)IxcVѧI,&7ֆ0{^rglp1mZ-Mm(-hM$4 keBk)Y)g7䫨JRJjYF4֋B:!5f23][7^}:Y鄸~ϝx{6$Zo?|ݑ5F}ќyj68?~N>Nlendstream endobj 1301 0 obj<>/XObject<>>>/Annots 229 0 R>>endobj 1302 0 obj<>stream xVr8+hO$$7|Jœ ! h jadWr,6zyE_f!>9\-GQ!L^HY0ۭjx?y4Fd+i)Zi{AR9X^]^. ju6VT!1&QB[C8Xپ{Cp^11cJOqS_>~;IbJmC-R=>;z2N>/XObject<>>>>>endobj 1304 0 obj<>stream xVn6+.f6VeIE YhXȢ_sIʲ5Al&sշrJ7ΧYz44􋡯ϛ~ˋӜ&amd83M~d, ڗf+J֊3/h_)We ERxAR;oT5(IΔ9>mi4Yϲ)ネښ\9)xz[*|,Cʍզړ7]*%! fvbyaϩY6!ɐkG+X6tʹ4\\,Bg+Pa2EM ) rH_*^Fo!IrL'J"("昈ʽ>*2gWtAU>w~Dg|+QKF2t,%Oypi텶k<EB٣pS ~4( =})xSU:2=JFx<0C"g*pR䷰% ąO23z CDMMF&gZ$=` o?[!rhG#z~W:7Mj7_$][uԦzᝨ^?{gtth?;qR# #U.D(]q3%Sj5\^T;osJ 8N`2`$ocR0ЧL^.kjVwD'5FPb !U~( ^^^"Q ߹rS }Oœ!iώt밟KoE} p47܅O@>fw A͞۝kqbgRd42x'0\'N8 qO5Y.jGiݯ1:h樽0Z<[.V0{._viYendstream endobj 1305 0 obj<>/XObject<<>>>>/Annots 250 0 R>>endobj 1306 0 obj<>stream xVMo6Wѻd. ~ %ZV#YRj}C*ID93o"1%" Bvau)jb $m"+ތp8t![ SM=v$X6I7>l_MIqy_MqC6^g~52 qÖd%bD>w]T&(^o`MhW+$axB(Rz+KɿD5/gX*NV;Q]h{`n"ULe!#!}Dؕ %j~WDM#M?ztƔ~1I|^&p݌P̃/w@?NZt΅V }m@'3BN;kRts! r1O+lMF]$91eWʺ"WԽj< uy9o5Yݢ z5XOpMmVtwLJ< l/D7NL{endstream endobj 1307 0 obj<>/XObject<<>>>>/Annots 263 0 R>>endobj 1308 0 obj<>stream xVMs6 WZÖ|LML7-3ZdtH}J=L&<|x߳BA-%~|}QĐ l,YLhwWMavoe~w!I"ۍ`j}8Xw+](J"_ϻiO !J,x&]j].*7ּX tdE!g 8 /*0-EyVN5J(ejTjsc6A?gKX16uW̙ j,q7(Pv3:0 ޙ5Y}1X ENESLL8ˏ>G`w:Z~/L8! $}[xmz2n_'zaL}C.F'Q ɴ<߁+[їn^jUcHL~1݋u="CkgbAw78xfQVƅ4©ՀrlX<^Ea|# ?pfO8=h,8p `89Ͱn 9Z7d>/XObject<<>>>>/Annots 270 0 R>>endobj 1310 0 obj<>stream x͎0>/XObject<<>>>>/Annots 279 0 R>>endobj 1312 0 obj<>stream xVMs6WJ#"E}''}jҦDBP@-KϤ36I.vQH3h$͂\-xD+2#XpBY1+#=cʼn`n.Ln{guveYy9uhhsd!˭2Z{[Yt :xrC+3=sm٧OpFEr-(_-(a5\ȾYќu̫] Q0糫7^}o(vBYfmxP)dR2:B%R'iSfb Cghq>Cw";cKI'atcrB.e2Գ A_:D3UDȲTTTA ,f4 ,YUG]W|F %󱆴ie頎:K#" (IlO5|z =3gDZyL sA̵y!IUOcxܽBs]u]0K*i$]kZ6C\X3x˘YT|%,Q`:PiIH ۔A#h# Nme%yC5g(]*<F".F"6J Xti͠O.;vVQ1R|f|G: 1σx:Մ m^1mvN(X.Ds%!,sy½s%CtrcWsϨ:e+͙4[rN|_{m"sltLjә7*DUi:QTQ!]-:tDz||/l}h\)sQT*)=:h5)^+_l jL˓Lcg+5d`rV6W*cҫ_IO6 TE;K:4!nJyP%fNٺW䶢SNOoæ7hj"yt=7©enc *$N#LJ'Hm'tT{oTI:~FO,H*fW~:@6=;6x?Zty*wOȂ1*l!ӟ֟mQ =|Mf/M|_{}۷pw{{noO .^]d]YPrߢP4mjkQ74p;014cdu'_;y5oI8\l ϋ`Iv3Y;Sd~6?FX;1ꪅ9wG폯ۖs-b~x$WqZ`2߶?G mendstream endobj 1313 0 obj<>/XObject<<>>>>/Annots 288 0 R>>endobj 1314 0 obj<>stream xWKo6W̭JVDYEvEuOE@[@'(;CJx 77!LؔKnҙB,! #?jV|hq$e?Ȯt:fI'emӀt튤ZF!w 'Jd;`  il-`;bsQLZ'Jc |ʉV:)zbJFS+a9S"?>%a? [`Ɖg?Oaٞ `2YHU\Pk^ך?:G k3|ZdP+kaDU[jCRAmP^\-FL.3ϰ>ly gdDRr\ P/aF/KĬB smA)`(1J+dJr((҈աFMIEb31Ϧ-W(ʆJ*!xS-2װ/+  JC+ډR7Am1ŒAL{nBpo+ff5nZaԫ6˪/+W׷M N]]LO֩n<֮`j/ZϺ&(+mtk.# KWȮ ! ˡ B"wL&+nvm { ߉zQ!c:&VW=gA:|) 'g %.^_t?Jf=vʓHDjRެ귶L܆Td?2sobqgYHvuZq KYpǘO _ً>ӞGCF8l67K4YdK]:)Zfę[K7ȍa>,  7PTr-4Qg7f݅8͟J8_?O,8qSkPwObq^w,( o;.e8qcl1[īȱX O,8} OB@N8 {X`4m79z8^ʯ06f/cizw| ^Z/xs C L\fI>=MqKb?@! gAc]EvS/hvg̶ 0q =GR`Ynxup KS?MasҎˡnF{F~\iH-G sendstream endobj 1315 0 obj<>/XObject<<>>>>/Annots 305 0 R>>endobj 1316 0 obj<>stream xWMo6W̭ʮXt{hhH*J 8&AӢ&!3ÙǙ7?G>*l4~Ӏ¹(ix^ әW5]h-in]ljj-:X\fl9X 쯭N[uvWh>!呮6O6s ՌgFQթ$T2CIPQW YJ*M*T%bQ }S(+*JIcYUI+Y%SFXOf4q16x8&P)R5%K9u,xzE EA{߄u(UHv ##P8c"%Qⴻ`[oEN2{I8ISXO2=1>/XObject<<>>>>/Annots 314 0 R>>endobj 1318 0 obj<>stream xUM6+6l0 TIU䄩)-LdT*=ݒmlMUURu9`ρ/8+oߣ#zvO MVߧz wĠhճՋu3#+7 D420[82 C6{δ֩-dp|hj2u$hǥ3e\wCb,2}ʇ6o^(SsM6>q<d5b}@mX̓tTO`wt,VyYTL\z? 1c7^[9j-n 킻2.׿~ʏXEc8jZFzi@W6ew<=CpoDwecчspګ/=qٸ2+ܭp98zp=7}qx=+j-6"|?ִ,r?sy >/XObject<<>>>>/Annots 323 0 R>>endobj 1320 0 obj<>stream xVKsF+h<,TIf (l$5H$pRӣ7R**,c{ 8x \_m3 ;EO81H.Cx]`jc.aQ^E |aQT.F2* !៞4}zjZ7-f*cO]_) nvn6vrLOi. ʡ)C\nf X0rk19܀c~[M`phR[thp|وAwe۬LC_&'PHAN:6^F^)CoBA\[JoeAO|D)ⰎQ ~¿}KȲm[`q0{JtQRnIW@tiwKUWdaƱ(kkX( cDi崇::1)R<җ{n)}?&K1u R8BX]O7PՏp"Bj~J HPu4@B\[rB9E)f$2&2dq_%F*ޘ lLt,Tz/-G\WFpx YԪ/r-_@53^8')s,FY5 ilB%V`s093Й\Nk54BЯTR^H%OL_ 8QeiVdabƕUr^cArDvzxgpRPM3Hwq /+*{Z%U>/XObject<>>>>>endobj 1322 0 obj<>stream x}Tn@|+Jp`lc'oDyԴT÷gswg x{,^X9}-śo8]j8rsendstream endobj 1323 0 obj<>/XObject<>>>>>endobj 1324 0 obj<>stream xUK0W1$ěU*u 86Ĭ4˿߱E٪]5(#y2@Bl.nto @u\8AuM5UW.k5\|/ GHB#Z ?7Ana9 AF@s#n›/W (]YP6\>O%sxގC(u*%ܙ,v/_ /ڥm7#ږxٌ-Dx]z:@NI9IL~:=nR!D~Ts'ӊL{:RuUD8Ir}@7F3T`Є:}*RդJn zh<:2㬀aJt|}&x A{eRIĆHq ƃkKS%;_A8{`kLDH&Bh7~ 3[;OB=9g1_&#ằBFiɪ+zz?0 szendstream endobj 1327 0 obj<>/XObject<>>>/Annots 337 0 R>>endobj 1328 0 obj<>stream xUKo0 W讎bg!떠 횝"pl9X-GJvҸ-ZPh>?nxE`3Cuo;qXH<$]v#WmW>&JQ%EU eY;4g!~\6}.jH&ɏ*~FM!X7 n6ON3̟</sY5U\jSF=ud䥀rzҬmsgnV$*[|I>2zAO@<<ߋ٪Ϯ ($`w[@ J kF:=Az{1SOV/fBrFN"PWš+_Cqo]^*iQ$oX>/XObject<<>>>>>>endobj 1330 0 obj<>stream xUMo@+H$06P)R+{"9ldR7҂lAv{>tSn)zf*㋌&7 RW |FQ8},ITLwU9Y4܄M̐B[C*uH*7FCj[iQ6o7*^iMeZ pNY2.πxQ&e|3茒K,&Z3V_(ILUvLGЈBH$O-YYW*L (gBFe У˔y:L!3Tk|c iRJ'vM{f9\v0^rBЖ<lcBYw/,=* 4?ZZ-3NN2ȴ'ahz˜OKC-48șڝUЩi 37$mTպ zOv~6$=! ݓ45u-[Yh?(endstream endobj 1331 0 obj<>/XObject<>>>/Annots 344 0 R>>endobj 1332 0 obj<>stream xUoF~\؎tm}:hحv$BPT7}ÏA! d8g8c NR*|~@A a8)Kѓaʾtf #JCY쉭,1_lzDo1^C GO&X@zm$R"ZUs-Y #;ѩjmH2QcYDmZ)st  2e}-:WFn*UMU ~ZnGxys";7,u*{906%, 3BkCՕs׼m6qx(+nӐvR8TӢuAc;50F"nNdމ!j5DY y tȇ4])W?hD9b{J`_wWIvZ}kHM.fcp}fZqLmrr%<ҽt7|ﯯ_ &]v &|~1t?pZ)F{V$aGG@7Nw*'fC%mU#[CTfo+sHmA=(b)Ajt{$Q7f/OԮl6t*K'B+R-^//֪4BƊiLI$AAX{L:5 ˋk=ãhv?/LYdP6N@@n:^zG<ҧ{POás^,]w8K}X̃cVR{FHS^t|7M-0J{ǴҏێZ/2i[LχB| mp endstream endobj 1333 0 obj<>/XObject<>>>>>endobj 1334 0 obj<>stream xRn0{ á6U UhTQxvO??loӶ\bY<61RO8+CZ"_E41.讁OY3>`¼t~=܂r"{y:TRIɟx I7ӪdJv(ˢs&sM) (3)tFKP)7>< R(]D->V }=Z\¹&muI A~,VVusw٢۪m7|)\KDPx<"u֡u&=BZ`k(TY1vMH$8N+FRcc$endstream endobj 1335 0 obj<>/XObject<<>>>>>>endobj 1336 0 obj<>stream x엿OGlj(.ٓ\XV*HE)("Ǣ &e'LyH.=exc!Utgo;o0?NIA{w}~{qc q}ѺXv^#nL &q{'_5؈d|,c旍x-! 1~q߁s+7Kg̹b.{[e TC)H_HU0gTql" SO{ o04)@8yt #<*k'38;BG902AG]Rypf`q*V5"dv`ND`#22so+RZ8/LpVTIP|ç럀}PMxJIc6yO"81Z# !őRAQ::ÈeN"d;,Q5ތ>o-RGOۮjDQ U5>KC0۳QG2[ቂQ<].wzTͧo$P Q^s|S@ Nv\18T4n٫{4g~ gpq{7"*z^zTn-*.ꠒּK\GD]2@_s+xAj⏥x@HȼRCL5:v:x{,p4y%o\f#Iun{3J5Wƹ}\]7Z\X:ʨxB֛9t(Wx{|w-# 1 2hu&N._osҦ =:j !ۂC&hDr}Y65^Qy!Cl Of>no{'3n<2woN%{5xobk`{JHP@0NfQx-}DL--ڵ$Z 9"ШHաv (y-*r1R1sm |Z'7TWg9?|'sx-%/r Uێ6}߯G|ټ%E(-/ DJ˺!%FY/5sR,ǝV8Pۉ5wz|݉m>/v[\npO kZ~%vkis&)'ƿ;~EV|}މC۳Ey=*,,c;Q)UE-jeɪF$]m,iaT3αU& +ԵV!m|YlףSߢA0ܱ Z\AYmhtXR6 jU\`!:C5نMue5}CP-˧TQ_!f3d4V:gK噉(IͶkT0m1ݭLs5\gA,1'>TA%!QNMZ+3b{LzmߜQ%ik#oY^$*>:J2Ԍ WFX3=^㤨Sڅ h!Ut cTUu0=d#IQLh (F?)֦ꥍN'ᾩMvX :\Ь砘 N&9FumrI*u-:s CO6,\ʜʦ(#Bٛ^@E4F'$h])A:B=|^KTMˎaO=0Rz nX\ |BTwĺprX9p~c!ڵZD]#å }Wجi-?+y[|`>lFBIJ'ꦉ!/yK%O9y \gBH;GcfX M!@/i↑cț0cb&bfN,+2??涿jM(8/vq|Bw|9v)>?\endstream endobj 1337 0 obj<>/XObject<<>>>>/Annots 363 0 R>>endobj 1338 0 obj<>stream xVnH+("ŝѳ!F2@h-pqnRi0c4t-%?b|A/cvLK*9'AeVDiM[oOxlr؎Z*;g\'Kg 7M/^KpL^跖]i׋p j?׍+6 -'wR?֓ l{r(\ S]TjP&SxR*NIWTKVCjs3%}I*x)VLQo֏,GEle(R!v4 YT,ot=6S<][VysT,xҮґ;oBZRV3K&=/.HYdØԕ>/XObject<<>>>>/Annots 378 0 R>>endobj 1340 0 obj<>stream xUY0~W^qll-]5<5AՇ*2GZ/lIR~vRj `3>c@fCm KEgX  Ȑ15gU]|:O?yFciqVjQgB/ ]ޞ5oZ p[ oN&n2mM&uzOfq`z<4<Ctkqk3^Zp?ؓGİ;̳Qv>/XObject<<>>>>/Annots 385 0 R>>endobj 1342 0 obj<>stream xVn6}Ẉ3,ɗ4[Zmܷ#lv%%4w˦];93 $0+l'&2i",bxjq9? 14t\Myu9?tv %mMMB,9l*)M~ڽ5%:])?mܮ3Hb.LJ!ƼtUU"A)AgTѢCNŀj7Ka%"OB)ߪi d&Bw:ǟE$2wX Ƃ+h5FBD|foe;d'9 ҪNepXr5/L<Ӥq}֨K5Ev7F٣sNmMqrZKLoC֌qd},!A$HkZiԮ#["_l/?94 w5a҂tTEX.2c}xEn.%p4pL__d|ewz{Dh\VñK "C?y&ł~gЁ`D?n&MDmendstream endobj 1343 0 obj<>/XObject<<>>>>/Annots 404 0 R>>endobj 1344 0 obj<>stream xVMs0+Vg0CҖLgCzc&#lJmJrZ}W 6m@Xݕm@ ?Y 1 #ev@&$L a5HƭTDi84qX['m7Y['9mJ+ILr丹6|dB7qӒq"4G\/fSZ%Ni#sNI(٠60:r(VXCY7ghu7s- mUk +  h)LF0/]"L*?vc,Tr ZR>L%wucG:0!!!2xXp/. ^?{>/p=SO`z:mk;.j x}Zs f@3r-MP(F +;7)]D#^ݑJ`s#>PQ>{`A!a-S>MiwS]}5/G,l b%qǰH7m~w#B ?I^I~7 w~ꋗ<ނ8ș"KtꝀ\> /0|q;k~ltES/֏s 9T7xY>_F5['f}Ë l(p,Φڰ 'ipʭlܞI=b@dLhj'Gܞ]*m8SBq.mY/64ح=>iC{7Z!RzŅ' ^Upm\~6 2:DWP:( J ZlX2xWѶ1`@/O=Pw>l#|Dǚ(m%8JѝwT4C: hbӐn#Uh͒, qzhdO]endstream endobj 1345 0 obj<>/XObject<<>>>>/Annots 417 0 R>>endobj 1346 0 obj<>stream xUM0+涠mLѪzh7!!6vvK}Naa rxoy~@BBy7(HCH ݪQmf9e7Em O+Ei>Byf]ݷc j%" !$OlAQ9>OItӈZc=F>xj6|! Fx=YO|e)k bJI8c@йc͛.rmۺ`2 dd6tAzaJq۰pȅbG%K54,n[QC(*) T51ҝYrKkX(EO LQåЏr U=爥<kf#ӑ#K&65alFOi1! X$@@ X_z^Rںz/gn]M8I8ipĹx_>~$0endstream endobj 1347 0 obj<>/XObject<<>>>>/Annots 420 0 R>>endobj 1348 0 obj<>stream xVr0{$3 0΄L=dƖ$үlcC&0`kW}^z@< Ҽ7fc|s~Oo oӄECcј5rnɭ^nZ,`:)2@MXn0(| ˵Ob ˴ORq-ʶya< Q!J%] naō :QG[[a!>Njzd>a0EԖ3\ٍ0ZDJ1bL' gIJҟiѕ \;@3'1y;B݈Bn'\*LAXX&XL-*Ԩ,'%kVb6;Qs8a`Y~s*>JKm  w,۝#\a">knF*4g^ջ~E@7:B9D@#XWԡC}?PRs7G'>{<G+%[9hl4-0HMC~AHh?)_MD>`2>$#RB9:$؟:;k*m$ZUUZD}Z)9ǩF*OCk8Ipڡ2Dl Fk *N_! /: 4;h%"P*TLMr<ǍJ u~lNFwԝ:G@oڜ*m50UnS(g~w6;GxÏ`ׁ..X:]T}[ G<40/u!b6KS UWPa,Da<5 !g W99-{z՚endstream endobj 1349 0 obj<>/XObject<<>>>>/Annots 425 0 R>>endobj 1350 0 obj<>stream xR]O0}WGI\O>0,1a0[6ÿEfmҤ=|ܛ; l#PJy>31X8-cN+}C[;,zA ŪW,6 !òI /G_p׳wiTFi]Dzmsw/ߖ LƼt?m&4V[.u!uM8ƞWTvסrN8()ۋ+Ġd2^gX&ib$lp<$<'1Ȓڧyp>1uendstream endobj 1351 0 obj<>/XObject<<>>>>/Annots 436 0 R>>endobj 1352 0 obj<>stream xVn6}ẈuKoy.E(PhidKZJM8ŹsGL7eTLIϣb&pl[i:ʦs|6;Ī[ vn^1x#giu>X*~\vpsaSSOJWsT6x!ˠGҠAY6n Ȳ:_9Ev+u:qIUuk(:(ϑ%G} vֆ=2*(4jKO5@ *Mn5jE;YBbL+Ud<"TucG:3e} M f4&^^wQWg"#RFc7@cgHLK .fi{#2;R*#+O>O[?GWa'G{┯74Be'9YG;%jO{s_,u1KW[ߔe!UYD{endstream endobj 1353 0 obj<>/XObject<<>>>>/Annots 461 0 R>>endobj 1354 0 obj<>stream xVKs6 W}X+e;lf顇vKf X&U3qL@J<* zI癈O~D{Yb-FW+ʋI'ڕh#bQˆlv-I]10-t[YA2=d.ʁH\TĨNbmzαҨk,eDѳxT_'dP-KTMnA_ԃ:Mao޽=;@g`NT릑OWWR9>H}}z^TM>Z Rkh VqYZsYH}afmPu|PJA.[ A*[01k1 :kKSz4m#{3~Lj Kӵe[IVcqk3c1 5?.R]nŤm EsU'/*}Z8ф5u+\LׅZՐJ=([k8a 6jAL*˺Dz݃!0PxO@:e4e] B5C cy0]94'09R>*|4.;(?_ωbs2/ G;2syTLJq2c݉3SpSSh["PغaCu6 }t\(T54M ? 3d[NG+)-",3Y.lqleΏ5b)kMcTsװo_'F\ՋYSͤz>p8W~ 2,Ϙ/uy~ ^ /8|Fq!"~u. KMI< koMa2 %hf_Iq'endstream endobj 1355 0 obj<>/XObject<>>>/Annots 470 0 R>>endobj 1356 0 obj<>stream xT_o0S#UIHo];6i[TBNlO&NoC E[Gf%PF327/oB2"0"q˜_& %Cu妟i0N1&t )%!lN2gdq\9<& LbDVgC(! Prr:y1&9oQe[05>U#_ "'-9o˵S7ưrٷub]kهÕ+3]#r&(+㼖t+ n`ȳ* P ~' 0Aj. h{ڀ7|antE-XiV4XA7-zaFPb'N&:xW|Hm+mPJ3侺鯻doZ`g a\mDjr!SbUC˿}^:Do6>/XObject<<>>>>/Annots 477 0 R>>endobj 1358 0 obj<>stream xWMoFW z%Y]CUPQ`ȕ R_7-1)~{3fv)4Q덒޴z|NF$OEoRZzLh -bkkUYʔ:*GuJSմٺPQ"*ݐٛVk1߽ 3__+\v7Λj 0`n}0)sKh{Zx;mf87 p=lMύeZ]N˾N6ɉїEP:+8< ƒr!Bwˋu€8_1{U:ЋaJ stj{1L9Wa` Dv邩^/YAPqd pٺP1J V@<[e*hZAUmlV9$+b^׮(܁ecO (!wȇǷG)*IfQW#ͲyT`ŏo;S}( Ow=]O@AWdMQ k;G{8jmelH#Ԟu F벐pfxc+S¬V*pP>S ke SAٵѫCs5sOD`Kqŀ`af?t2ԼjXz6 ? :кJvI*ta?GE3lLϺ=`2x ,jTAz\?Of⦳Z6Cw57eQ<,/F܏bZ._g!_'(y lͻȋG*H6v2i]qry}<]O9FJRsPgq /Χ|v$Xr5W,zoz &iendstream endobj 1359 0 obj<>/XObject<<>>>>/Annots 502 0 R>>endobj 1360 0 obj<>stream xWMs6WI$%ݜmڨӃр$ I%Q}w~U;N2Sk$.i䃇?f1w#ȏ#׃(N JܰmIYMgZ37&A2:gZYueX]PTkfUyl0kP`yBʵBwl ^)WG ~,Ǡ &-Z0L]'wѝRl~X/,)z V]`p<6Rw ͛ ]^,̘ z,TŮ3ȱp7 YF~<RcSi9Zy@ӐĖwL)g q6 e& ǣΙS6=r:Dv'%8L֏'nZ=+OpJ940ͣ\^z>>Zql#Eté+FH噸\06& l+McBqv'RSE6՛%tQh3I)>) C%: C:CFxZ/񢭧?8Ej_橫endstream endobj 1361 0 obj<>/XObject<>>>>>endobj 1362 0 obj<>stream xTMo0W1]V{06mUMdf7~@*ǝ݁:B-=jdHDQ f_)ayA@V!:ft}Ȋy!{4Hhd|9ms@YTçQ\89m*Eϰ-d4LXOb/.l`fPs(aP J1aw}:K= \_ TqW2m] &AJ%*ʜRԎ\ mѮP0<]a,h:3A> ` dOP]^ɂiVhn{n(*t/5rT.o%U7zQEM{2aL"Wj;t9I+T&/F^Yۢcq(΍==ɽIk8JƚF1<j3Ny :) hoyV*+89/<>tT Ou 8oІUafG:WoKa8+"Dũ؃33MOaϲ}F,F޶at!)kJ|Fx=(FFt IH`$Smm␰HI@Ȗh*%Ioi Yv&=u#endstream endobj 1363 0 obj<>/XObject<>>>/Annots 509 0 R>>endobj 1364 0 obj<>stream xUmo0ί.!!}`/*m1K$;2l^ڨ:N|>{9I9#Ü\$ltT>YW$#]Gg8S33Td,t8;. pq&f~fpqAlP)̪{8/jX4֯\A#Wk@-5x˵`̽4J ˥;\\" m{@]pCa/ ipݬJ(c@1 0Hs^"+@:p+^NcYc*%0]Wj/Jm7%B{wboHiX~cUQ0m^(+G8X=؄$/\|]-tXڊ#u%K lO6ak6vKYH+* vR0RLDz5wB)Ԃ[Ds_K9e{̜+L͓(+j"G $e$\WPOGUM57mP;GB`66a:3 {ܗ+l !,iH5.+= Uev2l,{MnC4.nzqWM̭i< (F$U=X0>i^ޝ^woOFVW)w8݁V@56D_`ETITdd(zDxp< I6be :>/XObject<<>>>>/Annots 516 0 R>>endobj 1366 0 obj<>stream xVnF}W73D2y(tU>0HbE{ )JCqڀs h#Po?p( r 3X?eGo>q_|~j?!1Of:S )hl״J !bO$$8>[ݻCF< 1(TH_%o%)Y;>tWQ, $Xd2@TH V [*f+r'Ҳ/8 -OZ䒊}IEd&sY:͡ 1'~Nh_1KmL'z-, HR(IuRh[NwaDK#It};ϫ"ma3`' e&N̘gGP JVlB+~3 E a~C|A|Q#y9GkCg&|{ڎej޿gk}VF"[_,Zy!_91&_E30d[r  FO7~ =syĽlz^=nRhDG3tKV.݃GK47sykʦ28٪ a쯺ZEG|qjUAxX2o7/F]Baa';F}Ύ mGv۱V[WhG6%Htp}>9Y65%Mpq igWFRT3vr}C/Bo6/N:ԫB8]{ 5Im*g I̲ɶIfxC/~o[fKE =l^\:-"{u&젪.-R S8qu7R0ӡ?xYOfkStI{1A0,=Y#اl##e>/XObject<<>>>>/Annots 545 0 R>>endobj 1368 0 obj<>stream xVߏ8~篘R趬*{9Lb UibJ_3v!\VJ |3yf#61pHw#۲q<?tvĶ5R_GoVe7iYpA[#[-ue!!iu0VK\F߾.Z/Xw2==h~VidѺ&_o#uc GK2j:%C~)_30RG|E$%~H:8ONt1Hx~XqBõ!Ix6?xmXQMYT岄 _T/͒?fzy`($#G'U!`_40٫aR'a(_pb$  Yny#UHra~4|L\N%xǾDy}j@a ' Ol\/UO)TBG7Zʮg3SI!erqzHi`,ugL:tEϭӘ=צE oYO#E.>C+#"}wϨ?xy1;9LB;>` F*]^YaS1Y~JFh endstream endobj 1369 0 obj<>/XObject<<>>>>/Annots 554 0 R>>endobj 1370 0 obj<>stream xVn6}Ẉk+ڢi(HU{|E6FJ33s ~1-4[,h/xG ͢)4YF-?Z|=['ъ`M 9/ގ즉^·ycw~2ՎǴ""ZgIC""دL0a<] M:d^[ڂm(nk$}j?pI4e9c0axo+_ XH :lQdvIS?E^fbD'cCycb6κF䝝?1`mԒ`1ԑUS cRνcXX,UgDwim,q0ϧP{3Jv*Np4dDimWvX MNjym*Ғ°z)qYdPRL*TtL#iK }eF JO*l quQr̈6 @+J)y%A[!=kv5iG'ehH<“v, S/_&@wxمEDcc)BrqǶKW}oϤ](^;U7P: X QSϽ.sDQ59vZ L*$(ңgj,WRj Q1СuC{[y}8}R['yPq]y]v2W/ )^Ŋh4RV[~G=請-q_]pY㢶lvQG:2q;a7J W5Q]SI%`G PvOogendstream endobj 1371 0 obj<>/XObject<<>>>>/Annots 561 0 R>>endobj 1372 0 obj<>stream xVmo0ίo$HӨ&^RHqΆPRڕr9nuöl|R /׳\ kp=Z=nUݮ)lIt.yq%OpF]b AJ4K7(C)Jdlfj]h5kBڠ64_2䊵52tz &ʷ-hϒTиJp; 5bCbԆH#F1҈"NM@_Y]T>[{p9_?Z1 jUZEkw5`8L&F$3#Lg5Q&UQ̶4F4ijhPJ9lKcd}N.H7 Y:=)^QyQ=Y;z1 jSelt\.\ԅչ7DB-f[0PR}*[hi :PQ| -NLanWzXqncϚi&j}&,[!\KIطp]"Y1r^cU I`K X%/2}3&gw 'INРh4Y;OX(KA$yRO9tdsq&S$a.F 0eȹMdX#9>/XObject<<>>>>/Annots 582 0 R>>endobj 1374 0 obj<>stream xWn@}+plo4zq_Dhm0265FJ57 6EM{ pL`68}|5Lk:XVWa̲5^H1|i`1$s.*i7lVi @k溸Lч[$sA-#JڮLwj]Fkb&6jՋVJ;fM2%)]T1 rmeMduf\ysk4.89L<FzFK %y8 3xZ'A $S1&i>^<=4cц?"N1#7A?M>:ŏONYp%c*t!,0V&^ wr2\ɸ7 ], ПTʣ²1U׀S%" SA]S܀/ LL ⢱ᅑG? )qdV f062 )%gG i nxQ !I  !e q?֤.Jcpn{) $F|ISߌ._~7S_,?z=:.?2HU%DKv t(R'K E5Qjxɾ%id~K P Mq42L\wW@|]UH"V-&tK6^EI(2qkO21iendstream endobj 1375 0 obj<>/XObject<<>>>>/Annots 605 0 R>>endobj 1376 0 obj<>stream xVrF }WQq$\OvMվ͒\ݥc}]${ 8gׅ.zP4 q/"BsRh c'^.:,ubr90  (-򦙃^fI"gP+Eb,7p\3z6j9645Dz%k=U QEG 0,)0ȉ0xAhyH"9*y!RelJC b G~3 D!OǯݻpX1Ҵ)CtQqꆺC% c/Kz׼V.7XY -vE5F }B#F7b_I_ݎKPZ|\U XA'Ah $%kU)2u=O͕:绝(b ,9Sh¶~ o:lXj3T"!@8Sϡ$ɳ7і^r;p:芵օb)hW`-gV;ޗ5Xj-Z'ҝ% @(P%=l$C1N0"|xD/3L{l01MR Xؖj{.̎_1,/vs'bNpsΓt"FrV_҄^\`5pf2t9ަa?E 刄@Y^F@p嘐Kx!?m~t?OVzi ѧH;]-o,_5k+cU!ϒg~UʲyxY^˲4Y#Ҡv9^D8+iuXOX6ibpխ̼Vbrts2rVV&xxIiQ8ah{S,U(`-Tz X'nv?a:Iڋ#(ɇ4.endstream endobj 1377 0 obj<>/XObject<<>>>>/Annots 632 0 R>>endobj 1378 0 obj<>stream xVKo8WImEhI4Hr*՞ J* w$Nnȏ}qay3=g݄"<'ɒ5pnjD4s'"!*eE-rkEq-FΔfyK#=8] U3N^<њѦH i($S'"IWyl~}~\VBjy* =sd$'I5Jl8 3-8q=f/XZ6v,EĆ5;t,#Aa/Ml1ɬD2qסavde; &~EPIiմ HyfƙUL}с4b]-r  &U-8ǝKw1DQ-uZ["G NvFb|9 j먪=u 8᳋Z*p]G  w),ƣ3, aYV7xGc~)~Jީ9zG>p5ML;I$P;BP- x?v+jҜ[y/iwظ9O3^xu{q`J9I'M .endstream endobj 1379 0 obj<>/XObject<<>>>>/Annots 645 0 R>>endobj 1380 0 obj<>stream xVYo@~W#$1RzRYYj_ߙBTkAÿQKcԟ/aƆn9*,MfZ[,%Z>MUdRUua8QXH8PR߫;h&kCht"]]wZs>K߆$$L/Gi,xxޢ A,a&?u;MK˓mTtJg1yoPQUms)2"eodi} J][..6(GڞH<^2b/`2t~OCvhDPZ;XqP *o AP@!*6B&]F꘮=4F j`!1S&$ȤqzU1Vh!: |F}]7Ay^yUTTSFCFHhnUkjv5tb(04w=5W>Q[5RpS|7ip1Qm3s ف6$$m-oJendstream endobj 1381 0 obj<>/XObject<<>>>>/Annots 658 0 R>>endobj 1382 0 obj<>stream xVYo0 ~cڮo;m;0dǍ]H}-}1a D~H7N:E8\AbIw驌JdٖE[u߲4êk|UP|U5%J9M( a{5DbI,<+ *ALN˂eĪrp`4҃_2]/Ga?ahmbLXg,bc@Z1rdw Y#E88Y1)MŊNl\˄6ʶIz gwi*`2 å>/XObject<<>>>>/Annots 671 0 R>>endobj 1384 0 obj<>stream xVKO@W1IE8T=%YdS{]@E, CA}|c m8˴p|?Lӂ`O&渖1-k8vMh\<ΦXjV^!h; u6&R JJa N2_,YB5FkJ}M!ڧ.)|ogNE=!%dendstream endobj 1385 0 obj<>/XObject<<>>>>/Annots 702 0 R>>endobj 1386 0 obj<>stream xŖMS0{ Ke;7BZK'3cS[?b& L0ɰ^i>J?G \cr,#qIu6@ LJ509ncp=.9=Aac NXbN@acuq73;Xj`zI^ۙ ֲq| o@^cuq9 ZE"\l3Luk>ۖJƍENS_ 21,f5T_ES ί|` [ 8 I p8SPzkX>Ke[8&+7dU57$aɠ I㫲ҕ,7Hr *7:C\w٭^\BLseFF}v?Y ݬ`̀38;Ҕe#?FTcWa 0SqiZ#eYZbʺ4Zn_plE^Q=|8ȁps[1*C4Mӭ`MG$nA+ 3~PK]VpTUn[>mh76+-h%EA^+tvޢ]ikmii=Ch{ճog؜{ȫ6GwNv,fƋOEC0.=*jF,ċjAp#:ԯJgYldNE&hҞǬƻڽ>zCŏFG2}xendstream endobj 1387 0 obj<>/XObject<<>>>>/Annots 733 0 R>>endobj 1388 0 obj<>stream xWn@ +xtQni=@fˊBK%iP)PԐ|C9`㿀Cl'@-rw28"t,H)\EZ/ħ DZc %+=ےҮl˥B`JCiC`>KƮD7R)Fx%kh4i ^i+V>gإ<87Kl:hBJ(KƮO[JZA'ڒAVvEtQi?EHCdEW=N,hn!WeT8~> f37PlH`udZOd>>N[ Fb 2noZ4{z?9:+g:;*|vfRpk2E oZJ`{>(q֐JQ@i0o<&qSVd!]Ӹ̐)݃QxI) J „ DS[PXx ^lQV-:l,l-,:/yIlgY;,P^ V%zQmpm2M*Ś\$ӴOysٰJ!Iԭ9>u ;473O.>SlnP9쿉۫ql7%@@ ;쳲SslWxnf&^c)h:;O$iiBbgT50Yahadc{{@ }K 쇽PgcFD$NVy T÷:F0 g,1#!txE;\!=_!Cendstream endobj 1389 0 obj<>/XObject<<>>>>/Annots 758 0 R>>endobj 1390 0 obj<>stream xWYsH~W#& F[ R M$%:X߯gmW蟑E&-#03u3 B& |z*#4<Gt]f*&E\M17t,Q6{j=#Li:n`,xj_ЯA&IMim*br:yh8PԠײިmM)ށfDs~X 6'?gN#ˢ7T$-bUZSn/<[UfD g\mDqSy4RZOiZT駙]c+bZ0UBPnޯn-Dؼ@_4/UT`RQdo/URFeheHKwx"}nj-u-~]]iUeӢwЄ ~ת&oG:B^晊X DUʲ5tcQ ZJRC'U{&e !aq@Vu.oqbAў */llrI'ڸ,X2Z^胳uG3Py6ܬ )xyͦ==0'4Wrjʃֹ=yr۟k|6y 9m{;ȣ.{N$GdD |7H$X4A? ~HʄR,m)Q>mYLDmk\r@w)V=v<]!g;W~]ۯٻr?'PF{pʇ^Ycloi\m75ٿRWV]suQ]ম A>kf#Edzi7{t7ΉmD]5{Lи5n E/YnY ȚnEى%g{ oNGL1p#c `s?gNM9͐uendstream endobj 1391 0 obj<>/XObject<<>>>>/Annots 769 0 R>>endobj 1392 0 obj<>stream xVMs6Wq,F/N!3i2Hb  R}ԇƮ=n A,v߾^L4Ih8 ~0hDS(aRtכ΢$oшtОt+ ~AMb +D)ܦi4-MJqLMl6yf2yvA+庼K%y+P$~b&E1:Cd6/~}#jStVPkIl? \2WZf钊L0c1Dd Z /$%l!/7լHP#3o,㆑ MKI"e~70)񈠇u GRnJ]ٚ~b}Je!|(SҺziMK- sQmEv{E-ݲŢi_4MxmbT}fu5gjyV%Օ.@N[nq}Pu&KZU |u{:,-{of%AÂ1^G/mB:87 uχ ?s}-_<[6kȕ*&P;Cat5_(\ZfuRlnf/Od1ߵv%2BYX;J,{Nɦm+%ضzGr[:\MrB ]մI,-?# EZn#R(0pAp(.Jᖮ;aZ@i}YRCR\H[Q> 88ڙq%q'|:H OPO:I{&t3a.*2- BGJѽ6H*V]KvPKLHզ!=ĝ"dep*He @áXZ``(mah1 4aJOJZ:c-n'1J'锇Dz夥OBB@2+>tFObvۼGANendstream endobj 1393 0 obj<>/XObject<<>>>>/Annots 794 0 R>>endobj 1394 0 obj<>stream xWmo8ίoGoK@>յRVH$lvh_c; $m괻tgf ;?8M|Ku'^aaya)p 7Az#9k#`gS+YE毨}<(`)'iwdQab$ BG֯줃6*NZ9%-9jm6aavgt,8 GXSfVɔ`<,atJH- ?Yh㚮fÊ,wt]-934`>=K;eo8ǚG`r ŭH BrVz8=qM&׹X|*%O&eA¯UT&1api$X t"qJ$1Q&MWúxS4 ~NQzp!cܳ<^S\=d$B] O1ơHTVΜEjP^7#qdL2E 9790K [٧C yOdz$ɝTTiL>0݂xp MpMwy5زɇ&'1ÒUĴg{A𕿭~&И&`;agx ACuG`U6+Hs(&Ú fAxu/(~3V҄)~ZB1vR14 ACG0ﮱ z`lY~X?j^T2Y7,]'k(h%6ӊhG,;5wW TKq*t~D%Q416WqOAHR"mM4G4% pjĖkQc;X+ʩ$9Hћ~;ݯq G%ms76 /<Gڦ7e <*W`F}?YR vVU!C>^<^^z?6^n0!Ufnqp+2KE1#+jmG^<oqh>Xpendstream endobj 1395 0 obj<>/XObject<<>>>>/Annots 809 0 R>>endobj 1396 0 obj<>stream xVMs6WQI,Z>(Tձ=94um DB4PHeMܙ{F$`v]݊҄zCʪV7ᎿPF U[ FԏQxK ~k<aUf{#SQ2R,'[Nzi40:M`ٟFGay3#uz)OqL1 GǡKӬjrҒ{4V^\楤JT g+ Y~BdN]8^ǻ?Lj]Gi>w4oMUIR[ZR.VNn19=G[z.Jƈ   ;Av1:G5UIkrxQeɋt6Q3穓 A`q0嗻ǰfwkț_Aa6=S5һІ.ל;D TZQ!Ranh? TK悥L4G@w%U-KY J ]QRXOJ4|/q)2% -K(ҏL+BbJ6\rң-D]m2*vDw]fF$8;ї!F4HKek')]䧢+WUe { v5ߵg7\iA$P>}x@>/XObject<<>>>>/Annots 832 0 R>>endobj 1398 0 obj<>stream xW[s~Z(Q79Of'Vϊ\[ʲeŶ9m2c qȩ9M4S\>9z{lJ8SCA{<dMx|Z"%,#X0T쯡bM NY8HDvR i*slř6MQy_ýjr592m`AᘿlhgtMd%TI<٦2 hl3T8Mehӳ1ij?> )`Y%u3Eg"aʭ8%"|#@}=^ [L]j{3Ĥ6 -F71?Nc} xU_~)iN5 i^:Ӽ$G,u%»M4VJ=VFC.WV/W_T伽zr|LE79F66"0r߹s̋o }6+dw22Ѫ9GN_3}54F!vt2nKus.*0ِfӀـ5W{c/% V  @(c#ƳvS/tPn#mr }w;gkd+mA_x,pn0 p{rP|sHf;Cy%5KK# )v`)VcAn`kwnm;0ޑ3%]`X&g4b1J~I;7R%:11vcb$;,& [MWt.j g@B|0}V` "L``FN+Jc{(*[a-5^'˹}2XTQ¡MDָ o1q{# "t&oмpM*v̩-(7<vUeF2q3O{N`<|{gȴ!P1ON8TE ,R z3%C -| CU>̊BzF.Ue9ٲw0M]\?vPΐwOS,In/w'endstream endobj 1399 0 obj<>/XObject<<>>>>/Annots 839 0 R>>endobj 1400 0 obj<>stream xUn0+ "ٲ,MNAF(PKR6ܯ.-?M6`]l"b v!܏xLa&A -Lq+ tr$x% W4tկC6|p}CAV!y  !+B9n`whVsB+Xk+%s B++ʁu2"7@W7#%T.E+]Ndig3K4^7HEeUR,Ac` a:UPQ0n(jo@7"qX}+ L6]ntrٗgjxm6o{֝O:k-},-Jy~8@0f"!VTG_ܫŷ*wc2 57{`b [ԨԎS0Á)ҖAאhԄ*94̢yW(7䖣ܷ6uE8舖]^Nk=A`m9}oWLZ,4NR#9RP c򔒣I6xtVB24Rf=8vz_7ɳ0c\=a? 840K Ng04 SE{4꘤,%ݦE69Z9%MS>n)QELly,Dendstream endobj 1401 0 obj<>/XObject<<>>>>/Annots 856 0 R>>endobj 1402 0 obj<>stream xVn6}W:]Y͒[ -u6h^ITI:v@vD9sxfM|χ$0xo/`Ρ Qt i6\";Yߛj/p} b.i>/XObject<<>>>>/Annots 881 0 R>>endobj 1404 0 obj<>stream xWmoHί o؆o\rD']~*UkȱI3^l驧DBe3=b҇vŞA8 8vV*/M\'dK,6HH}Ð|YiCIPx,,u01# &roR9}|!ivF؍EQFi6cMlx3RO>Y owIcLEo?%1p' kTK Dy'Dq:v19}nendstream endobj 1405 0 obj<>/XObject<<>>>>/Annots 902 0 R>>endobj 1406 0 obj<>stream xWS6~p/x\L{3枎bXԱR!oWv()SjY@4 )S>xuvLFK]Sx9QFֳ1bv4FS~ȳ ʨ1fhke${ É+~$A= 5fHf'S!##aX;`5f#GE=2o'X퐂h:_^F4O$'p\_ 0^I'vq`йEY]]M+Gmݖ&הԢЙVN/DZ.eK;ol"/אfRӥ~z8laM#DGk2^|m%%I!RG| ,K]z k\swX;G%E+@]ijZtIvΩhZ%d@mTYIp9*y:p"kTejEL98%\ce̹&BgGM- CeiD^cV2tQ<;͹U*zj.u%3֛҃5% !LIwEuqw^Y\z^3 JuFq3THFk"med8&=3HR #ӊFz}Ӌ3M uP /!wi7hyVIE9;u9<X KҖ)! !{lludreUɜvVg06kT{ Kթ<9.එ-M[Kw]Hæ,줥?r&{dd/kG?p; f} 9?hޥh7ǷsYEYS.N/*ySnd9$mV56_H2>\>d|`S\e B0T4) ䷇V[QB'#|μ]ň9\~W90v z% lMjċa2ˇNկ?7endstream endobj 1407 0 obj<>/XObject<<>>>>/Annots 921 0 R>>endobj 1408 0 obj<>stream xVK6 W&e;[ Ŷ뢗Vul)+ٓο/)IAF("ԧ#!3XF/ FaJn,H *ajX8%S[̃vCDܮ;9NV֟6֟쥫(BUV$;geDKnEEkQD{j-\TqV$Eh!-mޢg ` #<_-:4wf㋬O0pcZjew韣nNK |6:½:jSqiD' Og p60V@ [54V@vH[̂>-q,E B=IU%T:Ga'}BaAWϝ6B r*ˉ׀4pMzϺ3EӺJ"T߸^Q<SLAuY Eѣ Wp@,:R2i Hm@SJ25֨iS2 cjQ`(ҹ~?{3| Ď{f7^޿e~Ibl6/3d>#(lL,k5`v;i\D(+f7kľYZj2)չiePe?.Ef^#ep>x@eZ\*r8>rk l(rWbfCYB}W\%ͯ=LȻp$S7( bix{ a!!]w #qyrkE847.W:vǿxu. ZBZ}cJ}=o"dl'FW>V-XRPܤ殶dc WxQ"b+rh!Gz>+L d~oُ >t.,='$=ۭ:]o+ANv$Zo_ž"SLGULbך~ qendstream endobj 1409 0 obj<>/XObject<>>>/Annots 934 0 R>>endobj 1410 0 obj<>stream xŕO0W|n#{CBn~g'Cik(|pH#cul=w<c$q`tAk4|;qjaƽU&ᱳ)iLވl[;($NS"QtOnv!t}[){h>Ȗԇ$x 僔qjm# .RZ4Vُ`4O6hLɊAXOZa٪-ȅB@(mFTO RK(]Hf-H2FiaZ(+!ĐT! kucpq\Z{ hzb[EiֺJ6oŻXH(o${شcMcoז (ԊFa%jo-NGN{T6Osܮ;:Fǒh6weo[]5i Aэ> bpsyauȜIY^OeU9T+B|hI0~"Qe![2nO*ѻ:F{ȁxBYֆ#>(?S=.|FT=σ烆[-~CكdEMQo3OMd8XQx^ybeRAB!i8uxڗ3>IG`: endstream endobj 1411 0 obj<>/XObject<<>>>>/Annots 947 0 R>>endobj 1412 0 obj<>stream xUQo0~W#ŵ@XU= 2o!$PjfEcke'Sev5eQG{1t3>#5rXYy^\اom%hS[1=ř%BUY@ހQȴ^t;NQe8 r0串vv}sK*,@_K{7n vQno~S@x+zѡ` Jf;+(̞E0XX?FG]@]FXihhU uPuLWj }]'[Y2"#O+Vsn!ZmQx)R'_ׇ;ad!)QY=ViT LZQSն{1Bz[OoamE?˲E{`EL0~?؋EGqiDУte>endstream endobj 1413 0 obj<>/XObject<>>>/Annots 956 0 R>>endobj 1414 0 obj<>stream xTr0+h&EXr! ^a-:d~}WM줓0Yv}:9FecJͱvjBc>,>m5+q`2 mif7J\kY+urm'13kFo7F!hn9mPȥTZia.&h~uv8UU}Y/ S|aحbK Wgr>o֛}޲pePSK#%k JX.+pmغvP m{zYE@pJ1*Fm#R*J%^vpx({?VT,3ț\ah2>MytVendstream endobj 1415 0 obj<>/XObject<<>>>>/Annots 977 0 R>>endobj 1416 0 obj<>stream xVn8}ẈVn&(F}1`p!)%u3[6&$̙9(?!3(QׇQ~iϠ(V Ga4%;7F:Yc?8F0RyoR|4vZ6$h"j0H,Cx6 j; 7s7YdzQ\:du#kⲴz  r0f~PT常d %CD$1d=0hx(ҭf3F!t`aB|lF=2Q/˫a{x!q7n`W-W;{pw\?kRe+ˤy@^*YC QmAm`d jc!aoY^A7-lVתd䂶JZYm3;ipxJ-D~}WU;J/Nj9  jL NSR5;- d((1^3ApO#>ʫvlˁvpy ە'yr\^`W 㖪ţN3Xn a4B,0R%dISz/BjI)] Iml6:|Ȩ??†3c1'jEűX:JP-SpH fհa*^_R痆O>۳6tϑ\mg'Ύ)` oU. _ dVhD˫hWm|L>OYʊ BXNQ堉!a^m{ߋ2|dř1!{f|ҨHQW]'obUL p^}7h'(Kj:8OC12]נo6]c\" @3Qt'%hlxӤbΰtʆ+?Aj0e"g1W1g%uendstream endobj 1417 0 obj<>/XObject<<>>>>/Annots 996 0 R>>endobj 1418 0 obj<>stream xVQs6~Wۑd ޸dL[I6~lcI6"߷߮h_F3SI& iN3*cY|ɉ͘7Wd8;yMZ )CDpu:jW'$YInձ#U\VA]u,YjW~ |CQ OjG+F:|L29u_IU*^ܬ؞/{OUvVő.7 eJrs湂+e^6 :sx\`Pn,`iϋ8=c z/h'S>H$ī+%9^7rKbȎsKWKNeћ)Y7#(Df|6ܵ>j1^/^F?g%5! gj f7ez`endstream endobj 1419 0 obj<>/XObject<<>>>>/Annots 1017 0 R>>endobj 1420 0 obj<>stream xVn0+,E-M렇&]S]$;*,ʡڜN4 `h8ޣt;b?/9+׋bۅ m pǎk Zoj%^lSE/c:Y*zV"o0zmfcFM樳^>z|lԙ2.â0]xCQwaF[ ) L `N=ԃEJsv`h c]cAƺ!-x^J%00B%U}-Z"\ֹ̖͊e Ҽ8GO6mQ(aM2jm[}8~Z=aAwW)\^>˅~86G3>|,Bꏟ{ݏ:?9fՋb[^화~6~m9rX%-3UK&+NrM \>.R۪4"U^joM.0ߺjFE4|z/Z1PfMX8V/'Vr1jkYY2,bE%ߔoXyaGW4I0,hxHEV\l~4ywg 1߲qyԕ]<">MDŽoϲgn`'˻>/XObject<<>>>>/Annots 1036 0 R>>endobj 1422 0 obj<>stream xVM6+Ԃ37CCN!E [6E$Y$3S&3UVw?u߽|4 i<$/ן^0 &7‰e iMJHc|tYҍ"vn[#vtǞo]k9 kokuànT:R<O7t;+au:/4"BH M'%")( 0#3q@Gqn C rq0G:/2ғ:%phD) t[6L(@ȍl^2iƏ7 w"V{acY Q9L*;-b{69 a&]jf@OBR t* m>Fk"+Ǧ+Y+k"%%ť^"2/41fl3H -maÕOFyX9$0h{-lL~mϐ="H #WjHoN}seW\roHнd[u7)pd.G"X#vv.b$O\DSNP5ȰmmH2'XL+2߁?(*U=( ) VJ6J^t ďpOp98KXlY%X` ⺵g^\7M8ՔmWFen 7@4saęwBE:iE Ɇ2..I. DlG>)Iu()YP]7̖oÛ8ȡ|a{M;^YY4n nnnYљ_?=}+ڈ+ţ_ #jtݢ>dUuׯ͊Ѳ!r0yQ<xM2z{h] eE2a0s{6Ǒhyi"Dj} c.endstream endobj 1423 0 obj<>/XObject<<>>>>/Annots 1049 0 R>>endobj 1424 0 obj<>stream xTM0W̑6!UUՒVB&1I$ Uwl6BB hy"@䁿\ŕ׵EB Dž<࿉XxaaN $!N0F0q6TDAV5d׋L$ xHQ|E8(I| ׅ,Bzgr >uǠ[9- {qɞLC.GRY1{zu z#冉C3o&Q*[km{ }+4<=+ AKPI둚Y=AN;1`u_1ρ xa;&3@G k<:*v~CyۊvE6*=*΀Yj:?;,T iW[{@K@[SQYHg س`)R8/&LeZjIIK=W6վgʝ(bNҺӨヅ/g{iMZ~Z3 $^G Q6 MT6guS(pE/?nőY_?+endstream endobj 1425 0 obj<>/XObject<>>>/Annots 1052 0 R>>endobj 1426 0 obj<>stream xTMs0+ޑ ApsRBs(M{cȖ#}dCZv[}[/?LC&7><Sd Q3>Ix! QׯoK?%F3woֽv:4`&1 1cHsWه4/`<*A^*X Yߥ?zXDB[nO&Q_L9;E0 '$YeZ#ϙxyeӌphy n܁;Eggp `U5% 5\V z":p~aL=DX+AfށIaJ),'rw1"?AL@ˌ8YՖK~PTDGm}Se=>/XObject<<>>>>>>endobj 1428 0 obj<>stream xUn@}+F ki%>TqՇBzۮwzMB{g$mU3;93QhBM赠נ3&3=w ~4%8x)c`a<ЀZ(#x\$4K1ywyROVO%luCsʂcŬ "K 0DR2AB,Sr,1R6wT({GT* 7䖒ݠTqw :VH SV*2S f4N-ٌ*6LeGX t^uZ&v⣉QY{F3-u8|G=[|R83dHFGݝc]Mr JA֩x38RHnYF\LmjC<#A 0Dީ#4 iB۾?Jd˪sBDV%{G,ivR.__N`E9{kqK# sr **sE)5y5BU]?RͿZPS1Wsx!ip!4YYEoDR&bo~3NUdpWo<n]\@=gmd>oN gLw@kۄZ1X/=*tO6L\Pz>REҕ_XN-endstream endobj 1429 0 obj<>/XObject<<>>>>>>endobj 1430 0 obj<>stream xTr0;`b D3I&N䋐(%*R:J!3fى`ΐ rkiB]9:.(l tJf1d;?ϯ3+!i^Ϟ;C1)t4YpNI {hJ@XI 5Pj5vBIP(n%~qXjIKP[{RɐjM-sއR| S3 WJW΅U+}nf ࡚dP*\]jE FM`aG5 ir*Ѵvg귄bI+nq%m68]PoW[s6% ܫnٿֿx')8V\ɼEm\sAy+DJb(aIE <ۻr'0MhǫJXS#Ѣж#q9'퉸(`UT^7MH# G휵Ҍ=ZE^] Xf vJ|p TRmm 5а32B񍣄LԲ.'--a$$N&ÙW1*-ɡFQ.]$&4 -m ޜԅendstream endobj 1431 0 obj<>/XObject<>>>>>endobj 1432 0 obj<>stream x]TMs0W`-&39dL8"$jA$9ݕ% 3}oGQ?,k-@fYj7j5eSz?yZ,3L&kְAX| s,^a#s6bCAIwnȉ3[63LL Zx$UQzV E y. mTm8@h.icR*w)m{ >/XObject<<>>>>/Annots 1061 0 R>>endobj 1434 0 obj<>stream xWnF}WKi]-oN}pcEM]ew)EY^,3ESܝ9g_Φ4)f4:$u6ϒ ͖dA.SIg2b|?|pTNS-O _'v= tq9^^]&sZg1 z=m3R*^ :K#՞:‰MɕÖrXW;2%o=fT`go֟&t>#u6jP̑؏p<)#/.G66FQr QN=Ug |FwD)JTbLlGIR*ड TiSQZr)*VqP-um6^8 AlL:v]Қ}uS8 ůF%8uP<Uޫ1 sq & ,j% F: VLjAYۛa#^ץǎTqF@8D=9%ǔ _B$U+%h QуGj1~4P,ހ6Ϡ>IZ˳Kh h@SVfg!#m(SA[`逻hv>6[Є!qET44Pڹ-l݁]k$(۳BJ?w AEc}@Щۦ ESei( կo1LIC leR#h#U!J!}%P"!>n3GmӛxCTd"``2uFBE7'E2,v$Ik|+cz8F 0:pO_! ,{6Tµ0Šh^܋gTLWcF AH-'n42 !*##ZBkP~(JgK艠=VhEy ѴA~][v&="sR\b[fL)Z#-~Gc}q8s+FgTDB~.z@dh rn9$5bx&kQJʭ^t]o)[}qwIYJo:,Řlz j(k9 _E<=e5`!d#J@jw4iGOwW?oO^Cnn|94U}XƢFλ82m{tz]#e,8N\dɵԱVֶ1e(C3Ų5Q>}!2lXOaj-\8{ϪU%ĸr?HMB߃2*%j,p|5n1PӽX ٟgV7Bendstream endobj 1435 0 obj<>/XObject<<>>>>/Annots 1078 0 R>>endobj 1436 0 obj<>stream xVMs6WQH4$RiI벧(HHDB A%[e{2V5owm9xr̛,{>) /vџ&!)#;{Њnx;q );; r0ˑZa{1n E nwvATitHޮAaq&ik7_2HW 4H_. ʶ bQVXX}ۋ~.b5}TV6;ޫэ,Vc~[Յ3|>Mf7t^]Tz#WW{s}6i8pʐ9n}lU-j3 F mIwԖr]n -INDhcօ4el9V-E[f5ɖYlOc8|ɂcΘD^TՅN-vlB>/XObject<<>>>>>>endobj 1438 0 obj<>stream x}VMs6WљIevԇ6@ Do$z-]-h/vMmw5/8~>?ni݁yqw!|tsN;yT!8O_k߫dy[,7Yogb^,oZ >جڮVŸ08ΙWFsRlJ\Gȶ:h qȹJ9"/R9iK_ش tpƸE#>. RXJm@NB\;)3Bҩ@šʃhMDFy3|%nS]`FXQ5N5Åkiku O}|m+RM{g4I IxE)|-'KH.q؍RsU 5-F,5GqE\,lrrޔ^>9D{` `-"q#8$ RrVM VI3dW"ğ; :D-_U@Q(IIb(C/(CTMAJFƭGv6`ʔLaJꃖ2&I\8_Ջ,;q^KyըV3t60+It])iڬS_*罰 ğ`Ew; >"LH6k~:Vgm'__k6={E>V1ymӌiQkt(#webwsmrFg 1QߏFKR'clRAW`f}3FGZu!I9ȼQVf9ɡ.K 3KJ\@59!:3a$F 8Pi( F178BxA =)x:bCbI~ܬ}o! Xz.(>r.o9G!w 1QXtzQxڈ=zYA=~"uZX&i2c;iAGL+3춪 OۺSr֝=@qݽ M?MtMsx3J6u*sOeH eb] 1M,c,m 6id;:B -cC]$_?G=wy ]O}ʛe}zbwsXXLyItbh-.{ M68ቖ7ङ`GlX=?n$^\'byWlW,=)G_oƅ]s?g4tendstream endobj 1439 0 obj<>/XObject<>>>>>endobj 1440 0 obj<>stream xuUMo6W؊o6Ebf`AIV"~Σd9V #gmQߌ Znh&oH /OɚVbuO~?L$EV, ׻M/PƚԴ v3r8p䮺8[Nn( <.񬰒tު˒!P)O"Ԟ*kB<4ϖ`~(-({SňաDڔEܸOu8wQl[YC9cG%:DJ`HU袰t2nv҂eLf/(VQ/(p֕ R%ɷ FS\h"Ys.m-ږ7 *T\rrL#5Ou.ٮ8"YtzQU7u放YU)l+ )S3J#[K>>o_lU~3n'zzi֋$2(a-g6!AaWmk,or/R..]_?+FȘ´W*t!ew w.z~?ZGskDcojC|a 1}'3v]L[Bn6BS1>Nq:BC1)^pW4t1.5L~.Kƒ`maq6~pv!O#ʯ@Xx0Ά68؅ (AO;onҠU1ggǗT2lz˄x6Tǧ>n.3[k ψ Πo!ڴf?[$-/XE8o|QZVໃycV(em.#(nn/,٭6<(οdRہ6su&}{W*nvݯy endstream endobj 1441 0 obj<>/XObject<<>>>>/Annots 1091 0 R>>endobj 1442 0 obj<>stream xUn0+1}- m90hUȢKRIۯ )۲tACrޛqug>fy|HRE Y2ZϦ6F9&QRH% [(AK3W ڛH,istLs h"ؓ=" ,4,rڔ2@b71 6fdMy^lm [ƾ$XmK|(+/o4J;}Q~]&a yF, tn2H?ވF(X}eZC×;D,tC,.^` YfrCxYzV_9tz2`1$dAAi5TJE F8씬R\[TdoxSFj,]J@1 .JÇGY Qo c(%̠z םXϢv3endstream endobj 1443 0 obj<>/XObject<<>>>>/Annots 1112 0 R>>endobj 1444 0 obj<>stream xUK8 Wjvgbuo$*l)dο_RJlNФ>JWq)d[hU2]9K r Ksx|a*m/MƣhZ*!h㤄}Qm~Q@ǽ5H<w:8$´1+]uopΟj'b%i^ьr ~AGwnFz eoA>p>/XObject<<>>>>/Annots 1131 0 R>>endobj 1446 0 obj<>stream xVn6}ẈP.-ڮ %VKZ!ݽ$9@̜RsaAd1$M2qsȂ Ht$GFo_y=4"A@N8r Ar:{" x=4&A@N^$|dzhcSVeHxg.vEü<.Ͱ 7 bc>KRw,>3Cx!8-|7n1g$+7P'x@Сl9V@YBYm3 ATBCE `$sfpLC#h1Wk@/[a+yR <Z}W a%xxe2m5p&lh+ZqZULk2]*>fqK5k52gV%PCnMvʵB:_`wRX ;\@ыJы~ iĶ,>vVf@XX+0Jv=g%HC$[B|I-Ϗ dqyx c$ YaREB-[O G8zQ=mg߹OĎlKǗF%${_J\z;͎3aJJo2%Ԥj\d$Uul,/ŗ{%S<˯or8rkjnu |/O޸J7\s._+3A٪4 i _Y?Q?_'1~ O (f#U pC[3D$@qysSZ u4L1Q1Իy_PpaR@NXaq; uvR?L"|'~(ȍ[YgT[/V1nNUJ "GRXoS@GqpXD 8* jцI$*O gN>/XObject<<>>>>>>endobj 1448 0 obj<>stream x=0>ō8P[A ur0} `*L|{A/%`bZ!Pٖb RjHx'PUѺx_`>endobj 1450 0 obj<>endobj 1451 0 obj<>endobj 1452 0 obj<>endobj 1453 0 obj<>endobj 1454 0 obj<>endobj 1455 0 obj<>endobj 1456 0 obj<>endobj 1457 0 obj<>endobj 1458 0 obj<>endobj 1459 0 obj<>endobj 1460 0 obj<>endobj 1461 0 obj<>endobj 1462 0 obj<>endobj 1463 0 obj<>endobj 1464 0 obj<>endobj 1465 0 obj<>endobj 1466 0 obj<>endobj 1467 0 obj<>endobj 1468 0 obj<>endobj 1469 0 obj<>endobj 1470 0 obj<>endobj 1471 0 obj<>endobj 1472 0 obj<>endobj 1473 0 obj<>endobj 1474 0 obj<>endobj 1475 0 obj<>endobj 1476 0 obj<>endobj 1477 0 obj<>endobj 1478 0 obj<>endobj 1479 0 obj<>endobj 1480 0 obj<>endobj 1481 0 obj<>endobj 1482 0 obj<>endobj 1483 0 obj<>endobj 1484 0 obj<>endobj 1485 0 obj<>endobj 1486 0 obj<>endobj 1487 0 obj<>endobj 1488 0 obj<>endobj 1489 0 obj<>endobj 1490 0 obj<>endobj 1491 0 obj<>endobj 1492 0 obj<>endobj 1493 0 obj<>endobj 1494 0 obj<>endobj 1495 0 obj<>endobj 1496 0 obj<>endobj 1497 0 obj<>endobj 1498 0 obj<>endobj 1499 0 obj<>endobj 1500 0 obj<>endobj 1501 0 obj<>endobj 1502 0 obj<>endobj 1503 0 obj<>endobj 1504 0 obj<>endobj 1505 0 obj<>endobj 1506 0 obj<>endobj 1507 0 obj<>endobj 1508 0 obj<>1<>4<>9<>21<>34<>49<>54<>79<>91<>94<>97<>]>>>>endobj xref 0 1509 0000000000 65535 f 0000000015 00000 n 0000000371 00000 n 0000001723 00000 n 0000046348 00000 n 0000046528 00000 n 0000047567 00000 n 0000096922 00000 n 0000097107 00000 n 0000098146 00000 n 0000141413 00000 n 0000141604 00000 n 0000142644 00000 n 0000187522 00000 n 0000187710 00000 n 0000188750 00000 n 0000232333 00000 n 0000232520 00000 n 0000233563 00000 n 0000277870 00000 n 0000278061 00000 n 0000279101 00000 n 0000322611 00000 n 0000322805 00000 n 0000323845 00000 n 0000358739 00000 n 0000358925 00000 n 0000359967 00000 n 0000394790 00000 n 0000394981 00000 n 0000396022 00000 n 0000426411 00000 n 0000426594 00000 n 0000427638 00000 n 0000427772 00000 n 0000427911 00000 n 0000428055 00000 n 0000428195 00000 n 0000428334 00000 n 0000428475 00000 n 0000428620 00000 n 0000428758 00000 n 0000428901 00000 n 0000429021 00000 n 0000456863 00000 n 0000483912 00000 n 0000484136 00000 n 0000484415 00000 n 0000489835 00000 n 0000491632 00000 n 0000493317 00000 n 0000493816 00000 n 0000494337 00000 n 0000494836 00000 n 0000495357 00000 n 0000495729 00000 n 0000496191 00000 n 0000496987 00000 n 0000497960 00000 n 0000498507 00000 n 0000499493 00000 n 0000500045 00000 n 0000501264 00000 n 0000501644 00000 n 0000502390 00000 n 0000694918 00000 n 0000696323 00000 n 0000700117 00000 n 0000706230 00000 n 0000707307 00000 n 0000710272 00000 n 0000711687 00000 n 0000713489 00000 n 0000714404 00000 n 0000714440 00000 n 0000714525 00000 n 0000714565 00000 n 0000714650 00000 n 0000714752 00000 n 0000714855 00000 n 0000714958 00000 n 0000715061 00000 n 0000715164 00000 n 0000715266 00000 n 0000715369 00000 n 0000715472 00000 n 0000715575 00000 n 0000715678 00000 n 0000715781 00000 n 0000715883 00000 n 0000715986 00000 n 0000716089 00000 n 0000716192 00000 n 0000716295 00000 n 0000716398 00000 n 0000716501 00000 n 0000716604 00000 n 0000716706 00000 n 0000716809 00000 n 0000716912 00000 n 0000717015 00000 n 0000717119 00000 n 0000717223 00000 n 0000717431 00000 n 0000717534 00000 n 0000717638 00000 n 0000717742 00000 n 0000717846 00000 n 0000717949 00000 n 0000718053 00000 n 0000718157 00000 n 0000718261 00000 n 0000718365 00000 n 0000718469 00000 n 0000718573 00000 n 0000718676 00000 n 0000718780 00000 n 0000718884 00000 n 0000718988 00000 n 0000719092 00000 n 0000719196 00000 n 0000719299 00000 n 0000719403 00000 n 0000719507 00000 n 0000719611 00000 n 0000719715 00000 n 0000719819 00000 n 0000719922 00000 n 0000720026 00000 n 0000720130 00000 n 0000720355 00000 n 0000720458 00000 n 0000720562 00000 n 0000720666 00000 n 0000720770 00000 n 0000720874 00000 n 0000720978 00000 n 0000721043 00000 n 0000721123 00000 n 0000721210 00000 n 0000721255 00000 n 0000721342 00000 n 0000721375 00000 n 0000721449 00000 n 0000721536 00000 n 0000721640 00000 n 0000721673 00000 n 0000721755 00000 n 0000721842 00000 n 0000721917 00000 n 0000722004 00000 n 0000722037 00000 n 0000722094 00000 n 0000722181 00000 n 0000722206 00000 n 0000722308 00000 n 0000722333 00000 n 0000722426 00000 n 0000722513 00000 n 0000722609 00000 n 0000722696 00000 n 0000722784 00000 n 0000722871 00000 n 0000722968 00000 n 0000723055 00000 n 0000723155 00000 n 0000723242 00000 n 0000723330 00000 n 0000723417 00000 n 0000723505 00000 n 0000723592 00000 n 0000723665 00000 n 0000723764 00000 n 0000723851 00000 n 0000723953 00000 n 0000724040 00000 n 0000724137 00000 n 0000724224 00000 n 0000724316 00000 n 0000724403 00000 n 0000724499 00000 n 0000724586 00000 n 0000724674 00000 n 0000724761 00000 n 0000724826 00000 n 0000724914 00000 n 0000725001 00000 n 0000725092 00000 n 0000725179 00000 n 0000725276 00000 n 0000725363 00000 n 0000725452 00000 n 0000725539 00000 n 0000725628 00000 n 0000725715 00000 n 0000725807 00000 n 0000725894 00000 n 0000725990 00000 n 0000726077 00000 n 0000726172 00000 n 0000726259 00000 n 0000726354 00000 n 0000726441 00000 n 0000726539 00000 n 0000726626 00000 n 0000726722 00000 n 0000726809 00000 n 0000726914 00000 n 0000727006 00000 n 0000727093 00000 n 0000727188 00000 n 0000727275 00000 n 0000727372 00000 n 0000727459 00000 n 0000727555 00000 n 0000727642 00000 n 0000727691 00000 n 0000727787 00000 n 0000727874 00000 n 0000727974 00000 n 0000728061 00000 n 0000728094 00000 n 0000728190 00000 n 0000728277 00000 n 0000728379 00000 n 0000728466 00000 n 0000728572 00000 n 0000728659 00000 n 0000728755 00000 n 0000728842 00000 n 0000728891 00000 n 0000728942 00000 n 0000729029 00000 n 0000729079 00000 n 0000729166 00000 n 0000729212 00000 n 0000729299 00000 n 0000729344 00000 n 0000729431 00000 n 0000729483 00000 n 0000729570 00000 n 0000729621 00000 n 0000729708 00000 n 0000729755 00000 n 0000729842 00000 n 0000729888 00000 n 0000729975 00000 n 0000730028 00000 n 0000730115 00000 n 0000730167 00000 n 0000730254 00000 n 0000730351 00000 n 0000730399 00000 n 0000730486 00000 n 0000730533 00000 n 0000730620 00000 n 0000730667 00000 n 0000730754 00000 n 0000730801 00000 n 0000730888 00000 n 0000730933 00000 n 0000731020 00000 n 0000731065 00000 n 0000731152 00000 n 0000731217 00000 n 0000731307 00000 n 0000731394 00000 n 0000731487 00000 n 0000731574 00000 n 0000731672 00000 n 0000731759 00000 n 0000731800 00000 n 0000731886 00000 n 0000731973 00000 n 0000732059 00000 n 0000732146 00000 n 0000732235 00000 n 0000732322 00000 n 0000732420 00000 n 0000732507 00000 n 0000732556 00000 n 0000732642 00000 n 0000732729 00000 n 0000732815 00000 n 0000732902 00000 n 0000732991 00000 n 0000733078 00000 n 0000733176 00000 n 0000733263 00000 n 0000733312 00000 n 0000733398 00000 n 0000733485 00000 n 0000733571 00000 n 0000733658 00000 n 0000733747 00000 n 0000733834 00000 n 0000733931 00000 n 0000734018 00000 n 0000734109 00000 n 0000734196 00000 n 0000734287 00000 n 0000734374 00000 n 0000734468 00000 n 0000734555 00000 n 0000734653 00000 n 0000734740 00000 n 0000734821 00000 n 0000734911 00000 n 0000734998 00000 n 0000735088 00000 n 0000735175 00000 n 0000735268 00000 n 0000735355 00000 n 0000735453 00000 n 0000735540 00000 n 0000735589 00000 n 0000735678 00000 n 0000735765 00000 n 0000735854 00000 n 0000735941 00000 n 0000736033 00000 n 0000736120 00000 n 0000736218 00000 n 0000736305 00000 n 0000736354 00000 n 0000736449 00000 n 0000736536 00000 n 0000736634 00000 n 0000736721 00000 n 0000736819 00000 n 0000736906 00000 n 0000736947 00000 n 0000737042 00000 n 0000737129 00000 n 0000737227 00000 n 0000737314 00000 n 0000737412 00000 n 0000737499 00000 n 0000737540 00000 n 0000737635 00000 n 0000737722 00000 n 0000737820 00000 n 0000737907 00000 n 0000738005 00000 n 0000738092 00000 n 0000738133 00000 n 0000738222 00000 n 0000738309 00000 n 0000738398 00000 n 0000738485 00000 n 0000738574 00000 n 0000738661 00000 n 0000738751 00000 n 0000738838 00000 n 0000738926 00000 n 0000739013 00000 n 0000739101 00000 n 0000739188 00000 n 0000739276 00000 n 0000739363 00000 n 0000739452 00000 n 0000739539 00000 n 0000739630 00000 n 0000739717 00000 n 0000739806 00000 n 0000739897 00000 n 0000739984 00000 n 0000740075 00000 n 0000740162 00000 n 0000740254 00000 n 0000740341 00000 n 0000740439 00000 n 0000740526 00000 n 0000740624 00000 n 0000740711 00000 n 0000740809 00000 n 0000740896 00000 n 0000740988 00000 n 0000741075 00000 n 0000741148 00000 n 0000741243 00000 n 0000741330 00000 n 0000741430 00000 n 0000741517 00000 n 0000741614 00000 n 0000741701 00000 n 0000741742 00000 n 0000741838 00000 n 0000741925 00000 n 0000742026 00000 n 0000742113 00000 n 0000742210 00000 n 0000742297 00000 n 0000742384 00000 n 0000742471 00000 n 0000742560 00000 n 0000742647 00000 n 0000742737 00000 n 0000742824 00000 n 0000742916 00000 n 0000743003 00000 n 0000743100 00000 n 0000743187 00000 n 0000743284 00000 n 0000743371 00000 n 0000743460 00000 n 0000743553 00000 n 0000743640 00000 n 0000743736 00000 n 0000743823 00000 n 0000743920 00000 n 0000744007 00000 n 0000744095 00000 n 0000744182 00000 n 0000744273 00000 n 0000744360 00000 n 0000744457 00000 n 0000744544 00000 n 0000744609 00000 n 0000744696 00000 n 0000744783 00000 n 0000744808 00000 n 0000744898 00000 n 0000744985 00000 n 0000745082 00000 n 0000745169 00000 n 0000745202 00000 n 0000745289 00000 n 0000745376 00000 n 0000745466 00000 n 0000745553 00000 n 0000745651 00000 n 0000745738 00000 n 0000745825 00000 n 0000745912 00000 n 0000746002 00000 n 0000746089 00000 n 0000746146 00000 n 0000746244 00000 n 0000746331 00000 n 0000746419 00000 n 0000746506 00000 n 0000746597 00000 n 0000746684 00000 n 0000746782 00000 n 0000746869 00000 n 0000746956 00000 n 0000747043 00000 n 0000747133 00000 n 0000747220 00000 n 0000747318 00000 n 0000747405 00000 n 0000747492 00000 n 0000747579 00000 n 0000747669 00000 n 0000747756 00000 n 0000747854 00000 n 0000747941 00000 n 0000748037 00000 n 0000748124 00000 n 0000748223 00000 n 0000748310 00000 n 0000748423 00000 n 0000748521 00000 n 0000748608 00000 n 0000748707 00000 n 0000748794 00000 n 0000748897 00000 n 0000748984 00000 n 0000749082 00000 n 0000749169 00000 n 0000749218 00000 n 0000749311 00000 n 0000749398 00000 n 0000749494 00000 n 0000749581 00000 n 0000749679 00000 n 0000749766 00000 n 0000749807 00000 n 0000749900 00000 n 0000749987 00000 n 0000750080 00000 n 0000750167 00000 n 0000750263 00000 n 0000750350 00000 n 0000750448 00000 n 0000750535 00000 n 0000750629 00000 n 0000750716 00000 n 0000750810 00000 n 0000750897 00000 n 0000750994 00000 n 0000751081 00000 n 0000751179 00000 n 0000751266 00000 n 0000751359 00000 n 0000751446 00000 n 0000751539 00000 n 0000751626 00000 n 0000751722 00000 n 0000751809 00000 n 0000751907 00000 n 0000751994 00000 n 0000752107 00000 n 0000752193 00000 n 0000752280 00000 n 0000752369 00000 n 0000752456 00000 n 0000752554 00000 n 0000752641 00000 n 0000752682 00000 n 0000752770 00000 n 0000752857 00000 n 0000752948 00000 n 0000753035 00000 n 0000753133 00000 n 0000753220 00000 n 0000753261 00000 n 0000753348 00000 n 0000753435 00000 n 0000753522 00000 n 0000753609 00000 n 0000753698 00000 n 0000753785 00000 n 0000753874 00000 n 0000753961 00000 n 0000754050 00000 n 0000754137 00000 n 0000754235 00000 n 0000754322 00000 n 0000754420 00000 n 0000754507 00000 n 0000754605 00000 n 0000754692 00000 n 0000754785 00000 n 0000754872 00000 n 0000754968 00000 n 0000755055 00000 n 0000755153 00000 n 0000755240 00000 n 0000755332 00000 n 0000755419 00000 n 0000755514 00000 n 0000755601 00000 n 0000755699 00000 n 0000755786 00000 n 0000755915 00000 n 0000756007 00000 n 0000756094 00000 n 0000756186 00000 n 0000756273 00000 n 0000756368 00000 n 0000756455 00000 n 0000756553 00000 n 0000756640 00000 n 0000756689 00000 n 0000756784 00000 n 0000756871 00000 n 0000756969 00000 n 0000757056 00000 n 0000757154 00000 n 0000757241 00000 n 0000757282 00000 n 0000757375 00000 n 0000757462 00000 n 0000757555 00000 n 0000757642 00000 n 0000757735 00000 n 0000757822 00000 n 0000757915 00000 n 0000758002 00000 n 0000758097 00000 n 0000758184 00000 n 0000758279 00000 n 0000758366 00000 n 0000758461 00000 n 0000758548 00000 n 0000758646 00000 n 0000758733 00000 n 0000758831 00000 n 0000758918 00000 n 0000759016 00000 n 0000759103 00000 n 0000759200 00000 n 0000759292 00000 n 0000759379 00000 n 0000759474 00000 n 0000759561 00000 n 0000759659 00000 n 0000759746 00000 n 0000759844 00000 n 0000759931 00000 n 0000760032 00000 n 0000760119 00000 n 0000760217 00000 n 0000760304 00000 n 0000760399 00000 n 0000760486 00000 n 0000760584 00000 n 0000760671 00000 n 0000760769 00000 n 0000760856 00000 n 0000760957 00000 n 0000761044 00000 n 0000761148 00000 n 0000761235 00000 n 0000761340 00000 n 0000761438 00000 n 0000761525 00000 n 0000761613 00000 n 0000761700 00000 n 0000761791 00000 n 0000761878 00000 n 0000761976 00000 n 0000762063 00000 n 0000762157 00000 n 0000762244 00000 n 0000762341 00000 n 0000762428 00000 n 0000762526 00000 n 0000762613 00000 n 0000762709 00000 n 0000762796 00000 n 0000762895 00000 n 0000762982 00000 n 0000763080 00000 n 0000763167 00000 n 0000763269 00000 n 0000763356 00000 n 0000763461 00000 n 0000763548 00000 n 0000763646 00000 n 0000763733 00000 n 0000763854 00000 n 0000763948 00000 n 0000764035 00000 n 0000764132 00000 n 0000764219 00000 n 0000764317 00000 n 0000764404 00000 n 0000764504 00000 n 0000764591 00000 n 0000764694 00000 n 0000764781 00000 n 0000764879 00000 n 0000764966 00000 n 0000765031 00000 n 0000765126 00000 n 0000765213 00000 n 0000765311 00000 n 0000765398 00000 n 0000765496 00000 n 0000765583 00000 n 0000765684 00000 n 0000765771 00000 n 0000765875 00000 n 0000765962 00000 n 0000766060 00000 n 0000766147 00000 n 0000766212 00000 n 0000766307 00000 n 0000766394 00000 n 0000766492 00000 n 0000766579 00000 n 0000766677 00000 n 0000766764 00000 n 0000766865 00000 n 0000766952 00000 n 0000767056 00000 n 0000767143 00000 n 0000767241 00000 n 0000767328 00000 n 0000767393 00000 n 0000767490 00000 n 0000767577 00000 n 0000767677 00000 n 0000767764 00000 n 0000767862 00000 n 0000767949 00000 n 0000768044 00000 n 0000768131 00000 n 0000768229 00000 n 0000768316 00000 n 0000768414 00000 n 0000768501 00000 n 0000768597 00000 n 0000768684 00000 n 0000768783 00000 n 0000768870 00000 n 0000768968 00000 n 0000769055 00000 n 0000769150 00000 n 0000769237 00000 n 0000769335 00000 n 0000769422 00000 n 0000769520 00000 n 0000769607 00000 n 0000769698 00000 n 0000769785 00000 n 0000769879 00000 n 0000769966 00000 n 0000770064 00000 n 0000770151 00000 n 0000770288 00000 n 0000770381 00000 n 0000770468 00000 n 0000770564 00000 n 0000770651 00000 n 0000770750 00000 n 0000770837 00000 n 0000770930 00000 n 0000771017 00000 n 0000771113 00000 n 0000771200 00000 n 0000771299 00000 n 0000771386 00000 n 0000771474 00000 n 0000771561 00000 n 0000771652 00000 n 0000771739 00000 n 0000771838 00000 n 0000771925 00000 n 0000772021 00000 n 0000772108 00000 n 0000772207 00000 n 0000772294 00000 n 0000772393 00000 n 0000772480 00000 n 0000772569 00000 n 0000772656 00000 n 0000772748 00000 n 0000772835 00000 n 0000772934 00000 n 0000773021 00000 n 0000773158 00000 n 0000773253 00000 n 0000773340 00000 n 0000773438 00000 n 0000773525 00000 n 0000773624 00000 n 0000773711 00000 n 0000773802 00000 n 0000773889 00000 n 0000773983 00000 n 0000774070 00000 n 0000774168 00000 n 0000774255 00000 n 0000774347 00000 n 0000774434 00000 n 0000774529 00000 n 0000774616 00000 n 0000774714 00000 n 0000774801 00000 n 0000774898 00000 n 0000774985 00000 n 0000775085 00000 n 0000775172 00000 n 0000775266 00000 n 0000775353 00000 n 0000775466 00000 n 0000775564 00000 n 0000775651 00000 n 0000775749 00000 n 0000775836 00000 n 0000775937 00000 n 0000776024 00000 n 0000776122 00000 n 0000776209 00000 n 0000776283 00000 n 0000776369 00000 n 0000776426 00000 n 0000776514 00000 n 0000776601 00000 n 0000776692 00000 n 0000776779 00000 n 0000776877 00000 n 0000776964 00000 n 0000777056 00000 n 0000777143 00000 n 0000777238 00000 n 0000777325 00000 n 0000777423 00000 n 0000777510 00000 n 0000777601 00000 n 0000777688 00000 n 0000777782 00000 n 0000777869 00000 n 0000777967 00000 n 0000778054 00000 n 0000778147 00000 n 0000778234 00000 n 0000778330 00000 n 0000778417 00000 n 0000778515 00000 n 0000778602 00000 n 0000778715 00000 n 0000778770 00000 n 0000778856 00000 n 0000778943 00000 n 0000779030 00000 n 0000779120 00000 n 0000779207 00000 n 0000779305 00000 n 0000779392 00000 n 0000779485 00000 n 0000779572 00000 n 0000779668 00000 n 0000779755 00000 n 0000779853 00000 n 0000779940 00000 n 0000780013 00000 n 0000780104 00000 n 0000780191 00000 n 0000780285 00000 n 0000780372 00000 n 0000780470 00000 n 0000780557 00000 n 0000780621 00000 n 0000780707 00000 n 0000780758 00000 n 0000780845 00000 n 0000780896 00000 n 0000780982 00000 n 0000781060 00000 n 0000781146 00000 n 0000781217 00000 n 0000781303 00000 n 0000781355 00000 n 0000781442 00000 n 0000781494 00000 n 0000781580 00000 n 0000781660 00000 n 0000781747 00000 n 0000781852 00000 n 0000781944 00000 n 0000782031 00000 n 0000782126 00000 n 0000782213 00000 n 0000782310 00000 n 0000782397 00000 n 0000782438 00000 n 0000782527 00000 n 0000782614 00000 n 0000782703 00000 n 0000782790 00000 n 0000782882 00000 n 0000782969 00000 n 0000783067 00000 n 0000783154 00000 n 0000783250 00000 n 0000783337 00000 n 0000783433 00000 n 0000783520 00000 n 0000783619 00000 n 0000783706 00000 n 0000783804 00000 n 0000783891 00000 n 0000783972 00000 n 0000784065 00000 n 0000784152 00000 n 0000784245 00000 n 0000784332 00000 n 0000784428 00000 n 0000784515 00000 n 0000784613 00000 n 0000784700 00000 n 0000784789 00000 n 0000784876 00000 n 0000784965 00000 n 0000785052 00000 n 0000785144 00000 n 0000785231 00000 n 0000785329 00000 n 0000785416 00000 n 0000785506 00000 n 0000785593 00000 n 0000785683 00000 n 0000785770 00000 n 0000785863 00000 n 0000785950 00000 n 0000786048 00000 n 0000786135 00000 n 0000786248 00000 n 0000786345 00000 n 0000786432 00000 n 0000786529 00000 n 0000786616 00000 n 0000786716 00000 n 0000786803 00000 n 0000786901 00000 n 0000786988 00000 n 0000787084 00000 n 0000787171 00000 n 0000787270 00000 n 0000787357 00000 n 0000787455 00000 n 0000787542 00000 n 0000787638 00000 n 0000787725 00000 n 0000787825 00000 n 0000787912 00000 n 0000788010 00000 n 0000788097 00000 n 0000788194 00000 n 0000788283 00000 n 0000788370 00000 n 0000788462 00000 n 0000788549 00000 n 0000788646 00000 n 0000788733 00000 n 0000788822 00000 n 0000788909 00000 n 0000789001 00000 n 0000789088 00000 n 0000789185 00000 n 0000789272 00000 n 0000789368 00000 n 0000789455 00000 n 0000789554 00000 n 0000789641 00000 n 0000789739 00000 n 0000789826 00000 n 0000789915 00000 n 0000790012 00000 n 0000790099 00000 n 0000790199 00000 n 0000790286 00000 n 0000790383 00000 n 0000790470 00000 n 0000790567 00000 n 0000790654 00000 n 0000790754 00000 n 0000790841 00000 n 0000790938 00000 n 0000791025 00000 n 0000791090 00000 n 0000791187 00000 n 0000791274 00000 n 0000791374 00000 n 0000791461 00000 n 0000791558 00000 n 0000791645 00000 n 0000791742 00000 n 0000791829 00000 n 0000791929 00000 n 0000792016 00000 n 0000792113 00000 n 0000792200 00000 n 0000792265 00000 n 0000792347 00000 n 0000792434 00000 n 0000792531 00000 n 0000792618 00000 n 0000792718 00000 n 0000792805 00000 n 0000792902 00000 n 0000792989 00000 n 0000793038 00000 n 0000793133 00000 n 0000793220 00000 n 0000793318 00000 n 0000793405 00000 n 0000793502 00000 n 0000793589 00000 n 0000793671 00000 n 0000793757 00000 n 0000793847 00000 n 0000793934 00000 n 0000794027 00000 n 0000794114 00000 n 0000794211 00000 n 0000794298 00000 n 0000794395 00000 n 0000794482 00000 n 0000794582 00000 n 0000794669 00000 n 0000794766 00000 n 0000794853 00000 n 0000794950 00000 n 0000795039 00000 n 0000795126 00000 n 0000795218 00000 n 0000795305 00000 n 0000795401 00000 n 0000795488 00000 n 0000795575 00000 n 0000795662 00000 n 0000795749 00000 n 0000795836 00000 n 0000795926 00000 n 0000796013 00000 n 0000796103 00000 n 0000796190 00000 n 0000796287 00000 n 0000796374 00000 n 0000796471 00000 n 0000796558 00000 n 0000796647 00000 n 0000796737 00000 n 0000796824 00000 n 0000796914 00000 n 0000797002 00000 n 0000797096 00000 n 0000797185 00000 n 0000797284 00000 n 0000797373 00000 n 0000797469 00000 n 0000797558 00000 n 0000797657 00000 n 0000797746 00000 n 0000797845 00000 n 0000797934 00000 n 0000798023 00000 n 0000798112 00000 n 0000798204 00000 n 0000798293 00000 n 0000798392 00000 n 0000798481 00000 n 0000798588 00000 n 0000798683 00000 n 0000798772 00000 n 0000798870 00000 n 0000798959 00000 n 0000799058 00000 n 0000799147 00000 n 0000799242 00000 n 0000799331 00000 n 0000799429 00000 n 0000799518 00000 n 0000799616 00000 n 0000799705 00000 n 0000799807 00000 n 0000799896 00000 n 0000800001 00000 n 0000800090 00000 n 0000800189 00000 n 0000800278 00000 n 0000800377 00000 n 0000800470 00000 n 0000800559 00000 n 0000800655 00000 n 0000800744 00000 n 0000800842 00000 n 0000800931 00000 n 0000801027 00000 n 0000801116 00000 n 0000801215 00000 n 0000801304 00000 n 0000801403 00000 n 0000801492 00000 n 0000801564 00000 n 0000801648 00000 n 0000801736 00000 n 0000801763 00000 n 0000801864 00000 n 0000801953 00000 n 0000802057 00000 n 0000802146 00000 n 0000802245 00000 n 0000802334 00000 n 0000802432 00000 n 0000802521 00000 n 0000802575 00000 n 0000802676 00000 n 0000802765 00000 n 0000802864 00000 n 0000802953 00000 n 0000803054 00000 n 0000803143 00000 n 0000803247 00000 n 0000803336 00000 n 0000803435 00000 n 0000803524 00000 n 0000803619 00000 n 0000803708 00000 n 0000803806 00000 n 0000803895 00000 n 0000803994 00000 n 0000804083 00000 n 0000804173 00000 n 0000804270 00000 n 0000804359 00000 n 0000804459 00000 n 0000804548 00000 n 0000804642 00000 n 0000804731 00000 n 0000804828 00000 n 0000804917 00000 n 0000805019 00000 n 0000805108 00000 n 0000805213 00000 n 0000805302 00000 n 0000805374 00000 n 0000805471 00000 n 0000805560 00000 n 0000805660 00000 n 0000805749 00000 n 0000805846 00000 n 0000805935 00000 n 0000806035 00000 n 0000806124 00000 n 0000806226 00000 n 0000806315 00000 n 0000806420 00000 n 0000806509 00000 n 0000806610 00000 n 0000806699 00000 n 0000806803 00000 n 0000806892 00000 n 0000806992 00000 n 0000807081 00000 n 0000807184 00000 n 0000807273 00000 n 0000807381 00000 n 0000807476 00000 n 0000807565 00000 n 0000807662 00000 n 0000807751 00000 n 0000807846 00000 n 0000807935 00000 n 0000808030 00000 n 0000808119 00000 n 0000808214 00000 n 0000808303 00000 n 0000808401 00000 n 0000808490 00000 n 0000808588 00000 n 0000808677 00000 n 0000808775 00000 n 0000808864 00000 n 0000808962 00000 n 0000809051 00000 n 0000809150 00000 n 0000809186 00000 n 0000809222 00000 n 0000811137 00000 n 0000811182 00000 n 0000811227 00000 n 0000811272 00000 n 0000811317 00000 n 0000811362 00000 n 0000811407 00000 n 0000811452 00000 n 0000811497 00000 n 0000811542 00000 n 0000811587 00000 n 0000811632 00000 n 0000811677 00000 n 0000811722 00000 n 0000811767 00000 n 0000811812 00000 n 0000811857 00000 n 0000811902 00000 n 0000811947 00000 n 0000811992 00000 n 0000812037 00000 n 0000812082 00000 n 0000812127 00000 n 0000812172 00000 n 0000812217 00000 n 0000812262 00000 n 0000812307 00000 n 0000812352 00000 n 0000812397 00000 n 0000812442 00000 n 0000812487 00000 n 0000812532 00000 n 0000812577 00000 n 0000812622 00000 n 0000812667 00000 n 0000812712 00000 n 0000812757 00000 n 0000812802 00000 n 0000812847 00000 n 0000812892 00000 n 0000812937 00000 n 0000812982 00000 n 0000813027 00000 n 0000813072 00000 n 0000813117 00000 n 0000813162 00000 n 0000813207 00000 n 0000813252 00000 n 0000813297 00000 n 0000813342 00000 n 0000813387 00000 n 0000813432 00000 n 0000813477 00000 n 0000813522 00000 n 0000813567 00000 n 0000813612 00000 n 0000813657 00000 n 0000813702 00000 n 0000813747 00000 n 0000813792 00000 n 0000813837 00000 n 0000813882 00000 n 0000813927 00000 n 0000813972 00000 n 0000814017 00000 n 0000814062 00000 n 0000814107 00000 n 0000814152 00000 n 0000814197 00000 n 0000814242 00000 n 0000814287 00000 n 0000814332 00000 n 0000814377 00000 n 0000814422 00000 n 0000814467 00000 n 0000814512 00000 n 0000814557 00000 n 0000814602 00000 n 0000814647 00000 n 0000814692 00000 n 0000814737 00000 n 0000814782 00000 n 0000814827 00000 n 0000814872 00000 n 0000814917 00000 n 0000814962 00000 n 0000815007 00000 n 0000815052 00000 n 0000815097 00000 n 0000815142 00000 n 0000815187 00000 n 0000815232 00000 n 0000815277 00000 n 0000815322 00000 n 0000815367 00000 n 0000815412 00000 n 0000815457 00000 n 0000815502 00000 n 0000815547 00000 n 0000815592 00000 n 0000815637 00000 n 0000815682 00000 n 0000815727 00000 n 0000815772 00000 n 0000815817 00000 n 0000815862 00000 n 0000815907 00000 n 0000815952 00000 n 0000816928 00000 n 0000817131 00000 n 0000817413 00000 n 0000817609 00000 n 0000819771 00000 n 0000819967 00000 n 0000822130 00000 n 0000822326 00000 n 0000823017 00000 n 0000823188 00000 n 0000824556 00000 n 0000824758 00000 n 0000826381 00000 n 0000826604 00000 n 0000827544 00000 n 0000827736 00000 n 0000828808 00000 n 0000828980 00000 n 0000829519 00000 n 0000829736 00000 n 0000831368 00000 n 0000831539 00000 n 0000833397 00000 n 0000833603 00000 n 0000835614 00000 n 0000835831 00000 n 0000837413 00000 n 0000837640 00000 n 0000838943 00000 n 0000839170 00000 n 0000840307 00000 n 0000840509 00000 n 0000841830 00000 n 0000842011 00000 n 0000843199 00000 n 0000843390 00000 n 0000844736 00000 n 0000844938 00000 n 0000846295 00000 n 0000846497 00000 n 0000847591 00000 n 0000847772 00000 n 0000848471 00000 n 0000848663 00000 n 0000850078 00000 n 0000850259 00000 n 0000851773 00000 n 0000851975 00000 n 0000853621 00000 n 0000853837 00000 n 0000855180 00000 n 0000855406 00000 n 0000856614 00000 n 0000856820 00000 n 0000857824 00000 n 0000858062 00000 n 0000859088 00000 n 0000859326 00000 n 0000860579 00000 n 0000860807 00000 n 0000861788 00000 n 0000861991 00000 n 0000863223 00000 n 0000863409 00000 n 0000864502 00000 n 0000864708 00000 n 0000865820 00000 n 0000866016 00000 n 0000866557 00000 n 0000866773 00000 n 0000868290 00000 n 0000868496 00000 n 0000869825 00000 n 0000870051 00000 n 0000871373 00000 n 0000871589 00000 n 0000872591 00000 n 0000872797 00000 n 0000873980 00000 n 0000874203 00000 n 0000874920 00000 n 0000875123 00000 n 0000875885 00000 n 0000876134 00000 n 0000877069 00000 n 0000877307 00000 n 0000878153 00000 n 0000878334 00000 n 0000879186 00000 n 0000879424 00000 n 0000880357 00000 n 0000880570 00000 n 0000881037 00000 n 0000881259 00000 n 0000883459 00000 n 0000883665 00000 n 0000884661 00000 n 0000884857 00000 n 0000885435 00000 n 0000885651 00000 n 0000886707 00000 n 0000886913 00000 n 0000887893 00000 n 0000888109 00000 n 0000888946 00000 n 0000889162 00000 n 0000890106 00000 n 0000890302 00000 n 0000890715 00000 n 0000890942 00000 n 0000892088 00000 n 0000892294 00000 n 0000893328 00000 n 0000893567 00000 n 0000894377 00000 n 0000894583 00000 n 0000896071 00000 n 0000896277 00000 n 0000897402 00000 n 0000897615 00000 n 0000898400 00000 n 0000898648 00000 n 0000899560 00000 n 0000899766 00000 n 0000901011 00000 n 0000901217 00000 n 0000902286 00000 n 0000902502 00000 n 0000903658 00000 n 0000903874 00000 n 0000904843 00000 n 0000905039 00000 n 0000905835 00000 n 0000906041 00000 n 0000907117 00000 n 0000907303 00000 n 0000908324 00000 n 0000908510 00000 n 0000909431 00000 n 0000909617 00000 n 0000910464 00000 n 0000910650 00000 n 0000911545 00000 n 0000911731 00000 n 0000912581 00000 n 0000912767 00000 n 0000913711 00000 n 0000913897 00000 n 0000914972 00000 n 0000915168 00000 n 0000916274 00000 n 0000916480 00000 n 0000917711 00000 n 0000917927 00000 n 0000919121 00000 n 0000919327 00000 n 0000921190 00000 n 0000921386 00000 n 0000922232 00000 n 0000922438 00000 n 0000923549 00000 n 0000923745 00000 n 0000924837 00000 n 0000925033 00000 n 0000926429 00000 n 0000926645 00000 n 0000927751 00000 n 0000927989 00000 n 0000928753 00000 n 0000928959 00000 n 0000929816 00000 n 0000930054 00000 n 0000930886 00000 n 0000931092 00000 n 0000932182 00000 n 0000932408 00000 n 0000933584 00000 n 0000933791 00000 n 0000934734 00000 n 0000934942 00000 n 0000936057 00000 n 0000936264 00000 n 0000936937 00000 n 0000937166 00000 n 0000937949 00000 n 0000938140 00000 n 0000939009 00000 n 0000939201 00000 n 0000939993 00000 n 0000940206 00000 n 0000940958 00000 n 0000941175 00000 n 0000942752 00000 n 0000942949 00000 n 0000943906 00000 n 0000944087 00000 n 0000945480 00000 n 0000945683 00000 n 0000946689 00000 n 0000946886 00000 n 0000947751 00000 n 0000947948 00000 n 0000948848 00000 n 0000949045 00000 n 0000950115 00000 n 0000950276 00000 n 0000950505 00000 n 0000950564 00000 n 0000950667 00000 n 0000950821 00000 n 0000950944 00000 n 0000951054 00000 n 0000951176 00000 n 0000951289 00000 n 0000951472 00000 n 0000951619 00000 n 0000951731 00000 n 0000951855 00000 n 0000951970 00000 n 0000952079 00000 n 0000952250 00000 n 0000952379 00000 n 0000952486 00000 n 0000952607 00000 n 0000952722 00000 n 0000952845 00000 n 0000952969 00000 n 0000953076 00000 n 0000953252 00000 n 0000953374 00000 n 0000953498 00000 n 0000953616 00000 n 0000953739 00000 n 0000953852 00000 n 0000954022 00000 n 0000954151 00000 n 0000954247 00000 n 0000954342 00000 n 0000954510 00000 n 0000954646 00000 n 0000954750 00000 n 0000954868 00000 n 0000954997 00000 n 0000955144 00000 n 0000955282 00000 n 0000955441 00000 n 0000955575 00000 n 0000955686 00000 n 0000955809 00000 n 0000955968 00000 n 0000956064 00000 n 0000956239 00000 n 0000956362 00000 n 0000956465 00000 n 0000956601 00000 n 0000956717 00000 n 0000956821 00000 n 0000956975 00000 n 0000957098 00000 n 0000957200 00000 n 0000957340 00000 n 0000957463 00000 n 0000957573 00000 n 0000957699 00000 n 0000957821 00000 n 0000957944 00000 n trailer <]>> startxref 958347 %%EOF ga-5-3/doc/ga/Doxyfile0000640005473000001440000014525411430612245013447 0ustar d3n000users# Doxyfile 1.4.7 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = Global Arrays # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = 5.0 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, # Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, # Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, # Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, # Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # This tag can be used to specify the encoding used in the generated output. # The encoding is not always determined by the language that is chosen, # but also whether or not the output is meant for Windows or non-Windows users. # In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES # forces the Windows encoding (this is the default for the Windows binary), # whereas setting the tag to NO uses a Unix-style encoding (the default for # all platforms other than Windows). USE_WINDOWS_ENCODING = NO # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explicit @brief command for a brief description. JAVADOC_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = YES # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES OPTIMIZE_OUTPUT_FOR_FORTRAN = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to # include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from the # version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ../../global/src # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py FILE_PATTERNS = *.c *.h *.f *.fh # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentstion. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a caller dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable caller graphs for selected # functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that a graph may be further truncated if the graph's # image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH # and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), # the graph is not depth-constrained. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, which results in a white background. # Warning: Depending on the platform used, enabling this option may lead to # badly anti-aliased labels on the edges of a graph (i.e. they become hard to # read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO ga-5-3/doc/ga/ga_c_api.pdf0000640005473000001440000107246011164524073014162 0ustar d3n000users%PDF-1.3 %쏢 5 0 obj <> stream x\4Ļ@+u[HT'KZ@J-I͝3ޞv.3س?սyJhpi8Κ+,tAlZj?x[sxuǫuAvߕ;7kKho˲7UtJN7`xnwBC,^}wBz,.*­~+r۬NuW8Ǻh%/Sbw5)A+Z1pa|?HO' d?XO NԙFt|UZUJ>o%z᭦0jJMu@|dÃW/\ )_E)TgįEPKgyx5:֙Gc(KOWuz*GЫFz }ûm+77 k>ڀk'<$J:噍)OxG%"rRfB q2f<$Kr*O"0YA6M×q3޼,IY|v|8x={C?#|@;ba )?c3 H)NuIۀ6j1We7n>[jAWSڍYFMg03}#z [$MHO-65iQMej^T|aiyo6TRС #Hlz p' 97-:M,o/>ңf*tRBFcT|tCnG?#073K17v9OnE`*S |=oP$gwӚ=ڙA?<1jۉS61󣶚m mNکeNM{h\kCl@k4Гh0[<0` X@keV6CO ,aJMc(ip<+D瀕TBSx7[[,NFfK? x8\+<<ϰ幻0b][`+F1v_'>6)tP ɤT)@y5a&NMr+v>i1TAyJ#p0?PNUpX\|jTsOPuL, dAzĨ {)ftQ9ɩdT֊0'o I!Kwgl-`)9܆q1BoS!"gSNA"*Ֆ<,8%>SiKz|δP\P#ur:ɞ=k{Pnc .T8 HB%}Z:. /EKF}#逃A *r{ΈM4©_ RRWe˙xC&xA0 7?a5rhϓfcCNI6v+NzcJ)u83dN##.7n2Kj ԒA\TLvv3(ܥܾ}K_IYaa;҈0 a!%,F[Ym0*} 80(*>h g(qk< 4sd9`϶/i!"Id)8{0$aq_Ran~X?A9!,%:G=J(sm٧<bO==,5%Ν 5wV:eAMͅB)_@vRfW3)>8qc9hj/bvH/@iK͗sUSdz߹OURksYSʨh(9*CA,UEMAjyW~檼W u8]JwH97\ڝ&KAk0Lg5%[frՔ sؠ >.NRG6"3hiC"LMby`i{N @MJ]SGIrQ]$!+rr {Ќ_̋PI)<(g@*jFDMu[ BQ'$(xM"NSq7 @Qc(`UłsEI}(FPp6YO8Y,N'!88I%#[UwX0YAb eɥ|oh-@WVq ]UR;$p >@-M/; Ms1QO^~#9zendstream endobj 6 0 obj 2313 endobj 74 0 obj <> stream x\[4Ľ@-FoE Lu$^Vhj+ DZ۪ ;$v<ߌ4l k{:ctՓЬ4/8kw??ǫUs t_5~i9J]?qQյ׮Ҷ_:ku f̓xbX6fx*ݷZl϶rշëwNŧHw~C^x4oEn/߱.viIŇAU& {A+Z1pˇCkߢ?jeZ' d?x-ʟ8i2? :$ ,dīùr'}Jҿ_Fè+wiI8#[8)_E)Tįc ob۱F~`QOQ< Gk(gKҧqd*/GЧFz mÛm+76 kǑs&>ÏXI6{.oǫ?OV)lLyk*=y2K61Y$Q_P |#^ pdDr(zh:ކm'AH2ߣ * ԍUު<C otk(_:#8G(7 O}a74)q*n}WjnEam6ILS'UIÌb)4_ExjC bmȢ <$Ġg2N52K 4%;)*7P-ءmXUy( `-.fq 0!Ja)!liY AYܶ4rݗ&.4śQ?-:iz@`D R?Tsf~~f&`#9XAUx<-J\ōyL(]LH5JXéJRAԻS2bo)Bi7wJBX1H[i[ųK}qB`k+ejhqR&Qxs4{5.x'mN_%uVP"@A0f91pt5 z qͨw|Ƞ@;Ӕ>qĖ?c.u4eoǡY, n!;5$eH6Tftrcpul `X2qn ScG-bDzIV 9q3^癠"x;-1#aT%oK>̠%U Px[ƗCEJ){H<`8Nr9:ՕU)#t_a5&$3p˳3vd:"ހz-A-}Vs٤k65>`AMI&;gc:dzH8p@d\p5 ++Bmsf7ԡ$|2Z>OGw͆(0>S#s#MBt=!ũS鳨̲v8#4s<<ϔg82U왤8@ϴ>&&!5;+GP8Q7$z4Xt'`y`S9%P3[t ;Pr? ܁,|8хsSYVN|P&Q⸮*CۑAMJe ÉR9U} ׌*y|=8_UWacAR6UlDnv꾃k91Ȫl.E-8E8R@嚂T\v0̕(m_;P.UeD(噍am@ gxB*VUCjb\>׮T΅L,Olme&ؠڸԴ(f,0eDܢv+4)Ե{&#<%:^.t(ФdUm}澰.Sx c,=sendstream endobj 75 0 obj 2382 endobj 84 0 obj <> stream x[o5Ļ@$injm>REKZJ wwhd^?~3ߌwg/'}tZ==:La8 7C?ӟGqut v.ƒ2ni%ज़U2?Ql!x)xn~%6Wcbi&l/]zhz#S#ɳ8.iD⫆Z|;ҲZ\/7 XǑ05FBĺ5/ rᘩ4{AVwDPtXkvVN-l# @rz[cp%\K ~A$jT3T@Οfcu\%p-vdϒ}FޠQRh3 VZg%s rA+H{IuwDN`{Mv3R+ N`]^z~^胧?\9-}T) rQԄm!#j~j u mY JĴ6f)> J?B~8LۮGwd*(bh 1"u ʩҒ0H| *M䔁)7*[(m(JQ)tW9"ZvZR a>6,>[smO{m ( JBiRRP@I~^7yM/!6(o,@zH~)L 3 ) 5n\7LkڡG !^j) [{ob dendstream endobj 85 0 obj 1900 endobj 101 0 obj <> stream xi7 sع*>f4Fo$qBL!aI8pb$p>B0:5jF;vߚWrV+j-ͪ>`Um_==,yuo:r?)k3);zíf]=9=pŪk3\wnJt:<=2kʬtfS-*zm:! v vz %nۮIg[ d_1 c a7Mg[ 9jVyc nN `@7AWJqUt_4<=ڪ旉ʑ~觀Mi7 ݢkWAx N VPFIf~Bh8Ϯr&o+ PoM@[J߆t%Uo/_vM#M4_ɘE/ 2 A ߅簫De_Iy*;n":Hh Z 3DS b^I@t4ڮ@(069BΗcKu*l?+Jr:3 c ~0j0&&v}ɷF0hbS2-Xr2Rs-F*l$`C[8KkHͨqblv]x{"4@ȠH+:Z7IE[ոE HB_[g߁A/| hķ"v v:,~_ߺZ?ؘ jϡ!|W)F80 7,dkcoudr,ƻZ мȶ39 aUl|HD~sojz.Qgyx.Œ}Y7ˉ`ALMB :Kk:FzE,C\]SXED$.Bs?0P̔m~iq>őJeF#R>G6A~di,&2>7˃h,yV4$·Ui2q񓓅:;gF҇sEȁbMV7Y/yDgurj9Jw: i̅2ZYPtBF#kS{X`f6;Tv'2K, ;Y^!f\`$/cMOc`4*G1DqtW2jCY9=`ҖD1݅lB(ts һ3[oBRLY+3-T9{") 퐃jdM ;eOmE/}WdùJN Sn_1$aFMUJ!g*$CfnRIop0$ zQôkrIUy}1z^|%r=/?.ʃaL~g#V dW]}XyB6 H26 2[`*_ t97hNYXs/!`eRo3\pHk٤ ȹPfZ=FOEq,smDdK:Xiꆺ4 bbVO.#Rm3Mv4jZΚйv H`2ء&7F{pvbA=dKIP)j I>Mc[;0bME8(P%uo^F3TДmำ)ږP 'J 96sfx$HafۇckOǭi ʼnfp֖#6A%-f vjyZգ)]A8kR6-#6 ^]BTTuֳu4}'"E(7 o7r\g\eOzk0ލXݣ7l+o\Nv'ݮ@[ p_nJm:,|aH_bx -MpU%*BC .hjeB(#UA(g?Kƿ^ŋnp܏ǐ`>L~,kFƑ$Es ܦ|Ow4n Jwr[nϱdqPdU:Ԋw-heus\bb`H9s7a + &az!]9J_-fޓ#_KkΤ=1ҩnXWvѩnٴSxTjT3wAo}> 駁jFf Dk ofˁLrsˁsMFʋ@UŒ=Dy%  }Ÿ{~"q$Y*;>dW E%P '7ea8v4-\:j!IdĬZ/v|m\Gôov xiちir%y^+đw)蕜Y͉YPDZ ,ze3`KMnʈSkwպ>8.M+?#LHIєfI#q}Sl޶[K#oѷvgi?]+w΂'ӪCgG8#s!l.$OuK6Ԃb-]3Ÿ;_Xԯe@M5^嘕Al504Ӵ yuQ_ dzcJmU?ڒ}rOpB4#<И){t~Gy^y-M EUݜF٢GI-:MN4QPO'DP߬0gu3sH m?* endstream endobj 102 0 obj 3974 endobj 184 0 obj <> stream x%5Y9 8&\t:]eh$аuaYֽP4Fc@Y|ߏN}~N9瞽ww {-?ɝ٭w~l;eBe;/U<;;75NL_?}X;۳[d,>5qB[U&-mnyջ*#m?8ٜmkLqYrS*2[ T xe U0UuJL@'Ι~I,z2aW\+vQS(Lq(RD @s:S2sݢ[#  f|:Z*FX!3sj [M2yxs*[m T֌y] וS[<'p42eg_hh &=miYEzz3'={7x(ZOĆx(*0fhIs44)b3Eu 'Wj 8zl{qowVR۱\j)׆G۴SYFa6zB2{٩hy8 gg%v^1Z-ơ`p(}\Ab {[+e p_ΌddrK'cಈi-q 6ڣgg`pil&U> 1Eg%EbvfCܯ`9N:ԹhWsɩ nwSMsFcdպ=+\h3`̔[uhUyLhK&FzI@Q1]" jtkOZ^f8p-dSNnB*Q㢄k5E996ANHFib87yn UT΋BQZBW?I+`Tߴ6XlS" * юe.cm#4*iXǎH¨u&=,hyAըvK tEX92уd^!tX"Hu}(fEtgШY&_G-RZs3 z`y04ueFMnJ9"G&kUHۨMtU4\ѥC^@FmKHGUBjjTљD؅QW|޺y!lx S7Ψ1aQCD, ⨪0͝ɤ8 "bk"L'Jq5*'Piw$ ?ac7k!d]bmV)`8(4 /m ֵvoL ٻXfis8ƣ_,N/T+xka],vPQZ.Vysqtb.Z$ ۋ^)JB5Q+t˰t.6⏀]}#5n"'Dc*F/[B+S6!boƤ @_0@IDhRYXTFsiEْmgπAO8tR߹F|ɚ<6=Fp#A5h#9E<ñN 481TYbo!}g N˧|C᷀ʮc*Ns+ O.[ID.MG&2(]"`M*'*?ͣ,qv(Vel1$vsd6@%-t*7Cv% M-t c;rRS<j>G z zq@=ۚk.t ~cAD 7vZ4Ck*]st5N( =9ShcDN|53ZΝ&oVaeB+DE-KPȹΉ$׳^!9Vρ@, bs~ACptgb*nP_G̊IB$Ϛq Rzkjܩ͗:JAԤAF49G"m@43ٻqRb0F4RU)KfBY >Co$D6"0)D.-S7*5P͠3㡪&(Qζ}):e:Ht q/y2. 'qKg G5#50X,ϓ\#IM8C,a᜗z JxgJl S.61X6Jґ[`G>ۆsNM (P)gM#Y1Lj 0(J-ӂ.:PqDaWO*wS{KL aIPgs&Gy0O_C\m{w;)5=鐩mL6=35GWݓ1xNTz 72ì/@kPOŘJa7D &%Qܮ`xR9 `D $.>3d&у1cF3JDA6&V p@`OQw4Sd1DXEӞ+0t3s9$ӦUGݬtT >=)@:3.L^] i  ųXBY8ԥc{r-T5l!WD52Um,zIdD|N+5f\&WBkg7]2P4H|2ղrEhh_b@|IsS ȭry1G2bN# I2/p=|Hp9=20&8'"!BBQ_H;dVZ{e K-Pk['wrn?.|-[%!"%owF_wGVepio|ۋQE k[KlH `,u)~C|=șڄQ:GݧJ?S7˥AAp!.i=ʫzR0dN]Os{Ea nl.^NFI7^I}=׋`k0,01k|$y2oiߔ|#;G>tvKNR']ek˓` ֋wq{4qC"jcC,z٥gf2u8GǶӗ1fN*:fjcx?IgT,wKl \8]Ű Bs?ɒJp&(\=~ _hp N* )i > stream x=&GUMr(Y@tOϣ&2)6%@Xe6J(" U >P>@9=}Μo޹߽w>}<9s(t'RM:MY-_m1yw Oovλq? ]?Sמ>ht/MUlo^rͮq]].BߗVU盗]nߵ*齙giRߵ-th5UWl$[йamoVES]ޘ6r`fcprmoc}*1`}oDNhU5LzU0+*Z?ZkpES%C8TXA/{y~B W65B kU un" rՑy?Y?<v4UDRyonE\R\ *BnNo&XT^[POчwciʴf )JC0FXigbaؗS~S?mSqЇLK_=(d00)Əï |WZ"ԡY{:JV_|+Pi}D߆mrP T0Ajia[FaEOB]azPwiK#PUam14DMXykFŪS},r GqހǷ Y^=؇AL+mP%t!# ]Qdgѕ܂aCsSxClg6SH-´vͰVw`_+2qEG U׮MFFf],:"}_% lExIF^$aiBK-I91< v lqrQY] 1~6Ƅd/6LMZ`yvhy^AmK^a_ :Zh ?7S_M+TS9<@tew?23,)V^-ç$bw `ٸŗQ0wy[|/O߇+ѩMI:B@!ynhE*&Zvr^sG7H*Hpob^B98[2aS/9|{MJƠMO$=`Cmi"w2G"x_~;-.b8RSza{Ɠ9ihˌMO[H`V`bcfHjTP_X)+m=Q ;brAlQ9s8t Dvu7%g)WR&G׈K܊+QmEʾQRFYN`pOϥGңihYJTDv*34# T^TN7jKIte1aݬ !9w~mGIEGvՄngL]~pR2a/6o R1]2!+"7n$GDF)HaSs6#RY&=?)gM.Y^2;oS-}ؔ6k:l#3S3<Ʈ9;^p;N5;-b-U{gUvh< _Mz80F2%jT <+`)M΍6)ˢ^ptaOܥjT1@ SN] ̆ wz,<C͓ZrBX#s&ҖpQ M~\zm"0MvSr2-4 R:R\#dNBDxZ_R5:Jm16t˖etMPyߡg y6-?}Z}%Oݓp-ȦD @3uJ.ē:==\m-Hm1G*ė+^U5\uxƎrW#8a&;\z'\/)Y1$wa` n&]Sl'*iWwS8~&Iȷ9W@L.Y:#$oW:\>0Q&!;jF))pd =ZiL.MSg;pӟWO\.LN#TTsNͿ#">59dUg"x>'ԏ]5N4j6cq؁KEE)I-W|ۛ<l5o aMs\¦15֌G-r缔˞ZAf /Z[OVmGùrIc&3!Br6!pdMN!- ZٲņP1bsv9"Il&ڈvi+I=GS p7Gg [ՙ(YAA}x؎hUĐS2ҁ@Q.:T-w⮑T 1hw$F~HM Ky Mopl,Q%jQyefYee'0`v̡QLCr"w(҃H8AC ;) o\2υKs>B km:s.nڻFN]#7X:5'jSik_/4)eSwP%J\PGU 6ZpetZ3u?Mpv7=ߘ Ϳ#k{躁@D?&g'a#+ JAo@۠`\i1e5`gg IBABj@Ar~OTadHo@1P~ŷ #2L0;kd'P0\´Jzǂ,ǡ !оF k 9DX|zb2 `wĀPL8Se1kiaϢb[4s̶~V.@1ۀsэǾ9(e]4dde 8Wj?(?MgX\̳d3Hӝ@vhϮ H/8Hk%:J|2 ;8%K!S0:wuvKbЂCEs"ū/krNTl0iث%TPeb|e-FERb)?MeuNpub9&W"ո/"A UL|lٍ TbLyqz A vA}12g Xmf-0BRqo쩚 O' \~ fDTt6ɫ9<|A6&3\ K8ڛW#]@Z44b  ~WMUkO (F\O3ʶr]PY.F`yRŧIZY#\_R /J/J9FqsۑLK mlHnr[L!h,5 nTWOyLm w\x&? ޷[| ~@a; zpo KUFQɳHZ9g"eN(bv*XT.λO9ܻJ٧L'>Px޻ȕ1H O HeJ~Y>/Uͣa8hMhl*5[ɜǮkDy7*ؠ<~ }e| c'hUwlzL/G,N2nJ[l(k:kR%h1R1=|iRDuߞB(g= ꓠ%=L84skh_W;4`/-YA΃$wdea!D/Og;r&E ~Zľe ˑw@;xz0'gˣ8XL^x;hH7)YK=||/ k+ a1?D'quZY(h3]ߦ/ !I m$'%mKY +تڎ .L.Â0B 6ބ?%̼JC\tv & imӍ_M]oi߇ޘ }A|q\|FM|92H*)6?DS~r4v?MD 2$G.Ҍe-Tn uNRħ%+KgWl˓upv {}o,+Y@_B^<OE|UO5ffW7E_Jfdt*eG!K0'g|"syA:-iSg[Ww",Aw@hrG.A:$> stream x]dEh rrVխ0 C4 e~b51&*_P场uׯ p @) m^:J "3]c[Mf 03#3GWy07ڨ|5h*8Ҩ[E 9A0 t+ثB uơݜf38tǎ3<ӄH) ܆ukS @$ ڸ -뀒ѸD:4FdHTr~q. r,(+ t%{8RLDA.ѿ K2K,3{eE%3cJ@á,P@&IǼ8bJ s͙Io:97&7v*ЖI-I#~YŒtg=0Ez7Deo;xJCyFw%2Oh6$MP@io\Mb#A qaǹDSAM $ Fr_ۯ W< %']=[AZO ċ^=]ӾLM,C[a,|'GK r။? WrvԢ :b;۽  `S. wl՝7O:ZU@~X ZxzuFC&ca =0L a{,z]ZܼhOnuӵ"ՐV|8 ,=S}9XO70VX:&m`hOcke eX*`Z\!s}߇@>M)b"%VL5hK~`]ލ?hMb8-j!>LM:` ϣxwl}VsؤJ@IbRI+ Tw4 bFx= gA&o^dw {JuBφN'Q@*ӄk:JLh׺i}D@ z$YdRLg:dtyJu 301<AL3HC2`4 COٛh{ƒmpr$WώF)F[_!xԡy`v3lehyd_DKz7( &eQSͶ A'nx-2 4aW~:qx1ui| {bd<><8 ~? {8!/ܠo#ao < Aɜ؇:e'iB2ˎS) .h|pf;!fDxAU2Cۦ .S0YB;Ygy1 .&;>홺̳_>ͨ,iceO@@S״'a$29'z`oC%1q#c̐!Y( %흋``3)R^F~xF;hgҽ١^?݀6,#9i:s̉7YSHܖVɂ3gk@Q@Yb3b-fIb9t@; i{K\S|g(h 0)5o=DZa-dm{DBݶ?5ope/nlxI=勮3:dœ.ɅQZY? $yT n29LO+"S3a ޘﱾpr}a}z_,8[=p͚e{v|6{08|ʖ|Ab}sdc(@ ?&DZ+~2[L;J]~[qV\/V;deBSb~ŢZeehqL pϰGXL{b}aWv9x:pa#c^",ޯz̲o PB2B]fRAk(ח [RA0B]/trDbrm`eVUN3Fxej%We…eVo|use R!p2Ό"YV`cM LvY $ Qw!c~@jWZ kr*r܏I$uٮ4memmm 6,O&p٤9.3}4_ Iu7=*+BC@G;H) 5Z?YX$O,vI.]kgDeu{ºԋ%ٺ(IYkaSK*兤0)$yVARre|qپkkJt ;RߟbXkzW1) {>;Eeu*52G83Lrbsi{Fx%,nV*bз?Ư%|9 |M{AS}`> stream xEUP ~(K >>f?PĀԋh(-V['CbJ@o *Q,q윳~[4{Μ93sf,*;'3Q6ISӊ<;*E6=N,[ܗZر#gգg߱-ۋoΊlλ4?ȦR,l׽oVi YPdKa  2sl\7BYp^b~K@9)=e%U Лm&|ʖrJMJXA% ZY/hmo7į*J (,B i{#sT04 BȤv*[y' i :;=*u_/6Y]CI?@Swx\Ita\ꔣ)Lt |RQ. +Aq(΂4p_k->ᕣ\kA-&%e> "PdH LwB86V9=EVڏvoJ xO+KNm1A{;ZWYٙ_ {໠~[V 5Qa~mգh5R"4 oߪm&UQؒ68bR#ZMQetGs \x$1#iC7#"P%L9LSM\E*ףm|a֔7=Sf2Ӣeo$M@[ oTXKgY#jD%v$F XDl$>Ĺ"jWTjYnQԣDQdGcN#tR}2JtҐQ6ًShC% ּ ;o"Bge Xˢb!VdlWak+RxdhuXRŠE*V8h3KE,B 9*a2HiaZ~ԮԾ(TTf&a"I5̓Fv'㐁nPNW^q( 󃚸BhG͸\m.Ёr&yzύ57!'&;hҟ9 {9+a7WEKv zI)Lht]BY;pKaϖOB1j9Ѷ"١}Aq_F]y_%zECPq)rO÷a۫LV_ Tb TOP= (W.a>{\VN?i&SD , ?c;#[$?GAr~" 6m~ iaiF20s=C0OQu65sH\#p8| ^ P: C}ƺ0By dYh f I3+v|`\T5 ::h[:,I:T4e s{QOn&UleT6rMҲ$6âⰏ(y1¼Sӑ,(6QabPa{P LG2UŽ}F6P,ӳDΟlEJm),SSthۃ^o辕7A$' $r/2E9B=͈ ~[vbaoXP6Qx8OCuVS(-{+;EŴG3LjaĀo"哛'c$NUw8nxD<rׇC{I{*>d9֥i%Qx="%:hXQ4'sV|WL j\ $JNSF4 ,nxLR5w(i WPR ;oI~]'m͡M{h >pJ/=Hf| LM,FR_JQ,StūՁpŸBrA!8wR %0M n.+py"n$t[GW;mD"@8z & fr О]Ef\5vJN'NP>GTF\kv DO@ wE'EL}0&X˴-ːE-Mb9NY!حZ"MX\fjn-DlR9OQp7s\q˨ W1iZ&3SvE>򼹃9̸")(1ThxW? g7 Gꦹ>J[?F8RΥud }D|zRh``b]">{ōJLJnN2:q2!y{YgF<_{ 6+ ]]e{^I!e[ vh.1 !ՍOPş"$ߣt~:H(0)`W8O;:Nا?#[W_%]cN/xdG^I7R{-[?"K_o3P$S0+^E]EՁǙL1x v?(Lb^#cE 5>fߞ7OϥNI/Fd3RbW^P|Y1|xTdle]*L?Sih#w.IK;T@C ]cN*-|@|.s#U^~/f]Mm$wl6-+@0Nl 08 /qٛ[<.V~f(X3aa956'RdlOdqr.Rj>=X8*R"wP&o3kio`wvI+J7* mqaB$4Jʹ?*ZYvY@:{ݭ+vXK8cf7cSTg ;`+4B F *ݤl q 窡tڙeWe  LW_7yxrҺu#TMb%d[`N}c!%ؗX)l8ʍ( 9kpDe {G乘<ѓnYƳaWJi``V/~Iہ+v#ycAIf(iL!Fț/T_ gztV=zV,: *#N-{r:|mBHxyyP7-,d]֣)}fѿ:j3:h2߭K+sSs?tۃW)" dsQ3h~mF|*%UʹkWG~]PܰBqY p3s8Cn?q|&ߒ[&;xu2Uj=QgFG|&Acendstream endobj 253 0 obj 4552 endobj 261 0 obj <> stream x]G$X#‘'ć/7b b1~/ HD 8$ HğEU=]=;o])y}UWUkr7XU&Om.ߞܜpUWՖKwM]]Hҿmk+7Vu9e3 .nU'7'O=]j?6ڊ YmnM6NT[6_I:_hc*J;c dFPq h៚gEK@c@E8F4)fy0˯U0Ώ+L XVZ #_htm:'g`=^7W g&Թ]|9З>Ko-"H8+ )QI6 &;2/ m9iy2_Fhƌ@R-d;鑓8VX9$"^_Zx.s]!ۀ~=pgx̯Q;P[e] E5KsyPuTSޱQUq74(|ۏvUݕ8~/'|5gȴfV8UG@؂[ :1LX8З,k:zrԫ;X<#kw#ASFt{WKt^H4m%._U[Tbb6pۍal(&ƥ=5 K<POD=2HiWw*AIw8ps`{#;Zw/1<6А"'ёm*cH# !H.cO-F" +t3`X(0h~&C8MY0Y =svLCVT9'. ʩOAHB#(OӮ1#f6۫=WsùC0pGaWfBSkQx8E^7ײ,'PځnZ]D0':+t%rqv(d8hJ8+@\SEz-ݰ@J/_s_tea'RϮ4R]E.s13Zu#9kY|mխJjS$jeiSm.$^K+iO6zr=9S^_0:)ɦ-6>K WP#sﱏRQbJ͏,<F.u+3>FpG k85 Tڈ)gLV%s^W*{IDA/xGEʜZLY8H[`xX1W\)<wJjb/=x“Fkwf.6 bH| dg}ܡ<-.kr7LƊG=%Zѱjd=>~3)^? I R?k'aTjFȿ0H|a5VTfM6N +=4 [y4%ij:Dا٬÷so .q|6L_j7ւY% Cg QƐ ױ쓑hAtqS6}Lܫ!sC^h9$F!}Lhxx;%h[^o +|f֞O9o{vS oYU'a+$fd39 28AnN3QCnȝ.8\i̧D ; dTN'CL ʂL@i7|'kj9Ŭm}1!ӆ{:|p6t/\C~i2]dDV!- q O@Ӷ?)|R-ERK=Cߛxeս\O}g~HQŃՃ~/l|>"t+!o"*mȞ{'#u45t,px5k雅هPP,wtbPRHE/L#endstream endobj 262 0 obj 3864 endobj 267 0 obj <> stream x]Gs "|l'A! ezz-qlC 1 cmxB Q"d' ?y(gvwv6,%W=U}7|_d|8{bѨ[ɳ١I"Ϯ꺥?fWgggv/Qw0;{0{LdWf8PJfe_ggM^=vl^Xl]t¶& X+AUNځrhPtݎKlW6 vm.UQtG $K,u.T&oK!QYcB"mq XC/t|Ҏ[g*_l|kx:;St_?mgY#J?[OS/8MxMy )JoOa3dGpEeђ< Cq.Ag@WrS9rdZPo iIA>-e)e~6AT$U"Zh=0{V1TX^kf~B+Ӫ*l'V,kªVJ|qv勚_[ݯ o<mZ-4mv-;+ơ*r蓃á~[Y1l6sgF p* @jl{ByWTm}33Bp"FmN7ViOI:ZFm2E"QHQ*vL4Xs)* 2*"/.Gw570T^B%'Co @U9!=XŮ?ھf$7*UAkⓍ5~ <Hs*\+e oP|Pnșe\W<qvHq˪ 5zt, y Bٳo t*|ie)p 坖3:!u`|S˦[OA| pfKb ?EZk-R- hv,up3]([$ նLjZb#9g1ܪ#rE ohL~ kE ?CcdO#oySrwƽ:/XxYtI=dHI#q.v9akM]q#ֆն!(>@e$I˘9/Qn3+q)p {D^6EKE&岅K]eˀ="PnO)vm[yPQUbzJ@n){)@$ڔN2Ig\X>DyF"FV؎S3DۧzJ-ك$5ЀHe闈QPW8iFp[0 rYN"ћJ2{}@N *b<{R$ךڎML+`AQu0^ W1 2*| 0UJb:zb!WyZ mlIVŊ<=%҂9p ]MK}cDP_{%ov+ÌC룿C5$GZnqIڦm!7&9"zkQ:Y9LVDW(eϡX*@|1jg]&X_7uBc^bZzWkUzZ$2ng FU#@cNL+pN ـ-sZ|Jq.vBwƫҥfyCS}VEF<5H:ÞsEֽQ0Z`=q`و8\9®dS'ԧ\&bUC8el.V|̂3 ǞwAM7Y5lW|]/} `<N ?Yb2#JH<~O dT-aSm#Uxs pfC: Bޥ:|s`~ %U3Y֌de]/}hzƥB%[*|jĸ=Efd0]lWܧ}ϽJ,]ւM9E`n6OSXҨzQT*|;8nX6}axA­W!~4@qj-P ^'O]sPkUAIW{|tk pѹtޅ7laijB+* 5F/F&8?]Z`29 wDk8اjͪM+KfPNV&#'m`u:tҼ1Zz-R.rPQy5JhTPI;+CB^Z3M,A(0!(9L M@O.N>>}vۭZص-췢G4,=p!Oť_j2Ӳ{~0-8*O: -U[M_W(Bީ o*QvC&#}Z~uyQh[}W5;(7RjZ#+L oخFy.S"ҹx8ŕU*=Z=AoP%VVѲ^-O0 Zo r5=4tmv@@I[~h,l+Cq@Q#32~`հruZD0/c IbwxgvZ`Y܌Wufj#B;YcNq>1QtL?]@RF\UuqQ}d_ {Nٍ4*4U#4ѹz8s">ԝjx70x)SEʪ5o%-a91kSJ/&]?ySLͯZ?:W:?O7WҮ~]؎ٯ^YW}"3[!YuTƇ|C5Gtyk޴'YEo <'$T0޳kendstream endobj 268 0 obj 3731 endobj 277 0 obj <> stream x]e5Ո 30I&wwwMuEhЁG ĉԘH|01$Q&Xj=̝{$puvruMk_} c˻w{6Km^6)^}nҮ-9gu)wbj]_qO5=wx'>+Tk:7 kV:oѼq[ll߸5Q4&8}6i ڱ{k!t-EBIeӻLfTEbšm^DڦvLz.փ BVF/dV: Ȅ{ۇ:nv1h#G'^8.μ0Yӻr>jo|.t qV0Ze#>ZA|K''NtrCm D%q4N x13Tr}/!r멪S6[F 9#ee!GwJ_NИX3ԒC%=z˻|k̟Cϴ:$` ׍niƘcVuy `H@^j!P=3. ͳ?P6!ӊI )6}4.lL}'pߕIkk0TK22"{5 Z Fka-F?q8^ O`JM0:&abշ)xGQ@<>(E %QƜ0,r%QƜ0qƜ0ā%&aQR{y]؀ K(cNjQ9 G(cNZQ K8cNj|@N N}0(*d%5)*)J0-ˆ2faE-ˆ2faE0-3f'd-4yw|<Ԣh  K(#[ 2*(ZeD0u+a8F0,E 0qn- >q h ͌2A/GEkU/W^] OQDh6*\K2&ڵd%!v-Ie6ɵdi)HKN0#ʘM10p#`[e̦jvQ0-3fSL= >q E&aTM1}'IC(' u h F1h5 ˨h F1h- (hF1h5 >q h LI %u u hF1h5 (hF1h- ( h F1h5 >q h60٠R{yP`X`D3ðLa8`D3VpL#`X`3r`p<@]Qg;FP $u3;j E %Ql-Y2*(Ze֒0ql-YO)Ziu3vZEkIDXKAZϋ 3g|OZ ҋN\un>c3 Qz|43 ނ]}bWa  |7;r*p(!0s"Hdb0B}ii#,cbY? I$5\I.ť%[ד%.KrWKkx)uAJU:ܵ 4HiKsigK]Ad%KկٸJ癕o}3=J[JsV3y: Tv # l<v\IҀwP7N5Rh|$;|g촲70uhbR%G[t e==@/h5L 5{"< &Z97jLRM}%;"QT'YoG>ƝjD\SyB9_yf~4;2NOZ)A9 ?G[ Ʌ/2K65s"O /%nC@iYj~%:ӤFAx*PX?(yRvҞ;~rM;:a@Ƌ~ z-#mX6|P)` ϝxio>7T- z, P*HGfǯ@+- W|#㚍H@cލWm;8'G ($q𮓯@Ъ'^߄_YZV|۴]A~ 9~oAD R%Wmj?Ðj*WP߼ i L d N2m8_衩\ikKW0|cN;C R;S8~Ff# y_L04RNу({m1Xj|>OuQt!E 'u {a%6@Gb0ve\yQM<( %*e:T%T GAP/B5q]N3%#51$}AY/=,5pRAݏ0Ƴ?, \y_Ƙkà C)G~eJpctq%2W0 &~Ad5Li=|ˋ\1NRtfnn醻 cDl.֋Ew|r`kr4|q3PXAL-ǝ"=q8X8Exs/.haCE 4kṦ 8;.Xd%ǤËL\6AaLcme кǬ0O0Dr66;3oUZؚPlQZ~b Ⱦ12z1oljSޝ 34}-Uͷx ԑKcyjkQ(]"9̹!%6Tg͸}Rc=ѢDQԸb"6QE:DoEۊ )$ lBG<ɴN1MQ.a`RIwˎQ-5[j~:F^vx DGm:?И6$kz@J5CBO]yY4%+EiW]Ǡ[=X޹NGk2Yh m_15bRgxh78#RP+3QrP)9ɗkBQT[;)eam#a(QC}*YȮ4>ߏ<0ةw?^vyo!6Np.c[`M'cxIcQ}*D'`՗>Ѿb)lj4׸Pjḅ꫖(~>)RSߍg#0c"l; Y_DÑ;  B -sCohߍy麞6~> stream x]%EUqWQ&23=3 ]PxAy |#D_~Tt<ι}d}zW5|rm=΅3Q59WDݑ'd+~EAre;ᶂyVJC-D$Z$æԔP ^ɼPY~pf0叚roclZam142Ǖ ` %%ҵqۮVUM1\'Lj:LkETr#(OS/wt#pܾ,aR>%)7JO-BGIK74EKZ1J -7Qm=}%ו+GQ-ny^RA^U22~&A$ڠZh=UNƱ\jx3RhјVUQ>n,#?4i@̚mUJ=SP~(T_U6NC]5*hWïP撧*hWï hi!kx3wˬ*A=Z& Z럆1\\"Cv}H"A/-?w`c[>c]]yX`!ծUZ_K/R@m}گ[A]ÔaMGxe+򪨻5%P>8u 4ǠohQR(e()% - :l3.2Re )Ҕہ~/e(6 e`RE+UƐ,TBCe57Zn@=]h2}7H NA9Ԣn:WֲZ#l8ZP D3{)dQAM`O $)|5&qs9PĦ< ˣUU@s ёpe5ZR =45kf8Yh6$Q34yٔ  CMFt G)`L6nĉ[F#+pUj Z0!/'j?!pέZTƝ"P\ᓑotC"D$(ӪJND$3G@m!QƸMMpD!Hx#yl%&$<1]*X ˶l`lB}_njhI.mR5yA79۵L%n;blƉ~ B)2aXi'cȺ8\SiQP/ <:,<[(gC˙IQK(]-5.1l8=n."_Q,ڎ}hn\fk%uEs%#x>nw]P'%CnTպ{| ? Hto"WҖDu:::7ʮ*K*MVVxU&JO"`~ p̈9R5KCUR5fOYOyE"ؚ.ROFQJ9h;E%΍"j茖e~yJ65:NdXVZ]X3{6a#!AGWbQoDK+)ւ%_eD:Dz6zQSU}"תDkm(`)pE%8ey̯].0z߬fwƅ (k *}WqIӰnocp h pۏ%3#0!4{%'H0YoVSjW[MSRp0zb}N,j|[7vJj)kcIl|MWhF- }UfX9|T-K$_#r44/#Bg^H;?uکuG$Z?6}`i5aDZ!kfwVyǀ*0KyГ ?Kz:GDNGrb+Mzʋݛv[yByXyƖhwlZZ7p,xܬJ ]YJTI6s/:JGDkǨs FN*s,N8竃E^cHDy·d@zp(*'s ^*x9{dD|hlA`EM&K,| K_4o.@p!˳]{&0z 1top6y;'YiǮ&^7n`iCK"K"$@{%BԵ@:<kh@B7&\˶O|fIޔhaq ޶=G}mk1^ؑ+8|#8?o&5{#TA W LEHA@V~CNꨟn@9{Er/9 Ne7CsJyAdceg$ixbsJf\zuQ8U?gjȷꘚ R;o7:Rns^JhdHn&U `;wa mgILQQn.mJՃ*5mF(N*dG)֞Y6(1%%wsZR~pxA)2~pw5Aó`k!Tprs7P[؁+]4HGe2N%gU5JEvQ (F!t_C;0"ή|.U  =,۠ŌR OBJ;_d9"7 ~cm}, &ۨ0 dBhd;bl͛B7G^ ~}~ov_,ƍ"zk}d.ŰN<]Q6a4-YQr7x`f^eAb9j,9?tJC5c&XwM{Nt*\X[MhہN[IDx3[Ca[g6ٷQk]R31=ܤ\IµPp\(f'JjXD+=bP40R\t)b,II9ɦmtEZwe x\p&'=|50 voauy_js%sn{ͱpl s|*hL`b룫%p EBs샯}x'܆}n"ҮBRo (.Wc &<K Mɜƍ!QWCp yW磌$A-İPJV~E.S%\K_2"`CKEIȢHn|n9ti$w.;]q[*)Ʀ vB'%hEAJMo3쵘jqPh~)Duq /H:m n^U%6J9WͯXS(r=n!Nuk`mn' *t@?}jLC18ԱHGd-_0pJ2*c@r|wv\0e,$h;:M!ydQJݠso}2ft;dfaR Ō# a,6s1b0wO~~TY[Ѷpۭ(AQMLD'AO:*AezAh%O9)܊ZMVʬT3 J՛<*-|QJ*e>TpgFb*{bKe&0iP5p_𤡌`3)U9Y[Op]r%rMt!-PXbJQG-EOr>=9 +3VX r(7O+T$w]m'3j%*gqeCͿU bJ풳˜mS+AZv|A+Y Fɺˤ- sV"0a(kIoPHH&Hp"w~,7/Cޡe zzxje'D'q-)~04.AP-j'D-{MÔ(m:Q᪥,h8{{A~є"!yr5XcX/ L {6);>I<8ҟXzk8ՓH8m"zCGbܓ$7bͬ ~2-(w*mHPȪ|€ W. U˧8scUג%n ՂNl/#Wq):`]ReS-X|k'8fgUVM6Zks[j&ԶXY*TFޖ"Uٍjcendstream endobj 286 0 obj 4917 endobj 298 0 obj <> stream x]ۯ7tAB/ihACAv/$ @[ QH^Oۤ}AP E\$OH|>?;;{(R{{>w?{.*Jqor,_\mY0.=P,4'<19S<;}?<{{ʼnɝNjؽ4NP3Y|{;>ݧ&,vQ[dŔ!SB]l5/\㶶.ܳ0%SlYWï2G%]Bv&l'-F$23*Dȳ%BFy,%z=@h"ڧj1m β/8q=x4G!4QG@Eʍx)q5t䨖- E+hDƟn q*J8L)͌CƇo056ğJ?V3B"éTcWIAV|xʹ`$ɤIۡ6ؒ‡r΂Ӂi  3 hʻM26iYh,0QEŴYFדK[ B3z*awx#cݾC"g\ojAGG2*b)TI٥8B-/Ks@Z[6L-{ip$%]c撱QCV3)1۶]庐5#B"M2O[Lg GD' Ui i& 8̄Dٞ=|U 4b9/zuΊJFqxc'ogpo&P:sPvQzxtsaY̤SUG^VGĹdԳ4s$^$ՔzEU!37 a2'T6YT]I0B+ 8sᝄτ޹\g4H7w}q+xDrJRiɿUQyML"bLg>Tt-eCCByR;ʬ?SLLK.N |drs yJE2"lUg/a-}ss lHFK/ kcv7/B(LuYyNr@sY:;L@ p^!Rzz֜*ވ'TI[ek}ōhUN?̞eu9eDdCdyR3VMe%N`qEŚ(vd""/ 6}e C}ֆZtafVW%WyIJij=PUvo=_Ǿ~y;,ԙoh?[|׮ ըZA$S6ѢNV ݮCa-~MSڲ(xT<$}}YU'îL< bWiӟG=z6إx >:=(C!IR1#bkNǸ)CNSjpU65fPY8l%pCȶ ur '&6umU%E7l=}i1F|&U"*KV]_sQ^?Pͽ}XUC_1,V6Ց;mE'B%f]L]~ΰ&;mqM+yI$U>)\|ڋ߷hOoѱ Ap E0Āz{hQ+ajsF!! !n!>D>@J6DPDӿ2-_G9HuA̾!X~W*nh?_e`c[ qsPtkᩄ?MG_wCfq_!BMmjܲ۶bhZZG1viz7% _@q(ӯaO( |f|! T (NFkiѡ7Vg%!`T6rW˧n>y*Y jZ#)FVvX 3:7N:t/TbVy="$V$N!(,lC`u GP-W DS{8n(P\?n~(Y Ôg1hS7%#m5Vr[_1/mrdxvT.qֆ_ShhÄZB%i{6\U{!YmOc^# `;BskAŰQcd.S|ȸƲqx-_ޢlH-k nζi+==3aac_i&%oꃾPwbrWycAJC6nc̀XX]j&621ޮi 7,bAOq1rl^3Y3dzc[$Kā~/ ?,w\D-M 4ğf*=ô\t8-sXi67b#!6wܞ5IX-MGZ]HxU58I"Lu|1p4C-7 u(P+kT@V?n^$'ҏlr^vFCԲ+Z\ b& }Ƿv]8ޣUuW{@ ?<K!qV7P{Xy- 8^}h . (eZלg7H~[`mԕT+reK|f| M"\DJwd_~ha}a7u fuw#^%U^>y /uc[|-p+qyJ^#M˄L(A4xE[ccUO6+sw_ir׸rT?&eڳrs&{T?BQ)w۠/ :#R_%}n88v%KqARZrfQhŷxtD6%屿"CK@M3DknFڏh<){ ^U4af" o |$mbqYɇ iPg1&e^̽4KK2e@CEBdAJ=_X|̂=t-IR3^ԡrM2uoS~iGZǻ-b`ͿZ^Fendstream endobj 299 0 obj 4757 endobj 307 0 obj <> stream xɒGA#e0AXF0K1 $l@8@Q\~Z2+UmF3քzU][R=7vš/o?'ڮH4x\)eo? ͍QX94uխov kp߱!L7lm{緮mN[/{ >AkeQĹPfxȃT@X΀.APj{f,UvVmnAT GxǪe]cⓏg F~(d9Ҟ˟9b(O PTXW5cWHçarxH&jͲDZ*R凐Y/x%^V BK'>FdcnNCYGAq(Μ ? gCDmW:q{9dWyz̅"r\`zÉWundk3ogӤ,0)Y?0^~8k bcei++_pj9h}|d^6v\m>ڴ 0=2<:``TiT9i`ax m|!dۮ. az8"۵-b,W g w{v!MPI=IT)xEinmUBČcФ "X$4@qwb<D7Y0γ`#Edn5Ii-p*B ʈAŠͨb;X`k*jN$QI: gby%=e0PC><M(0CYZ#Tqd7_ 2ⶃbq4CM@5.$'9ktaZ{+Ǿ"s2S 1M3Ɔes$?C)z6P]Cx9KuhہėHřP݇1GNXsTTB/bLưn[xCsJ1:]kVӹҮ{c6 oeW ɦ;OsU݋wp2o%MEKtaO mo}1LLoTv F51Q[Xd__"wu(:Y\emTE"Pᠪ%Y凕37GaIј뫉drYZ [D,xwP;z9[WK4H޽ּUv'iyiNދn_ZӮc&b&ѻ=$ _ ?f!E KStFI¦(Oyq\=YFн/x;>9^ tBNU^[E`ى u#aK5ABdX1IcI a)/ԟ'dDѭ/.Ep&Q-Û͉0; %Eۄqӌl1(hʸjٸ1$|3q-r:ge-_cJMzn(:Z2;F&GLM"6CwU|K4Y"f< ҾNB|;Cyk|vKW|84I;f^X{[!ludMͬ-H1QmL}ʝ6q]ҦNFXD[+ z{~㼠c3d:;@"%}fUUi2w&{(Ѵ%,+HT'w0tTJ(ZWxYѣm ɥ h=L\Od$pZZчzbkqXюT~Cw-.2](jR׍UTݡ1 ~-t#qܿdmE<*v K[t`lv|/SloWEԂ-bBOCQY݉1G5=*^R_K\4SPaӡrveՙb/{~2]w)(WYr;ҡVⶢNj@ϽQEc)| NlGe|"!ۓEr_Z$=b2-T%7ڞ6b*(" [|~fǵ>3gv;. t+hyE~P;я+z^<T.B=MtMu(l|.؟M\1TEOʝ q֗?ލ}?jI` <%^Llk{%ɃxvϿxendstream endobj 308 0 obj 3140 endobj 316 0 obj <> stream x\[G&60 H9H3uU<$v Me8^'DP$ Pc_9u{gv{ǻhe˞3u;:ճS V잋ʋhK]mOuum]kgfOVg~C; ῧs{Xyyۅ\js{v}wo^5+mxvOj=y‘F[247*P }?訶\pj뭾+}OTCG~^Ҩ>J䦚AvY ߨыʸFC+21GiW\լt㠙-p4RLzvL;=-F1W"I? POA@}Q|83~U]5,Jĩ ߉ 8I|(w>֠, NNT"23d& OP99i>{ȍhk>QZ*U|Γ:^%U 2ǡejo҃,O|_5zwY1gg&[eXlxs6ؘ&eFN1-܆q` US:S򗭿 >|d2.ir϶;R C<÷{ke<@m#WIy![UxBSBTf;W!=Mi_󴮀:xlC|3/|w 9c{Ft#ڳC-yr pk DPOb{߶ᅨ!>i7ai] XU!䗰۱f߇o1bƤzQNU֒Ғ/Zo,ha:LD^/ѦS-{ńݪ2t 48d4⅒Zl,e5+mFک6%}IĐ r2'?616R$2x۷| Bqjh+pzxzR02"@0]BN!&[dY%WR 'd6"iϾ^Q#LbBh1ؽ \C?뻮wplRb6 S]B{wуX kxFvM4+ {4_ Yf.]#>\k+v/LJ8SK$u*a4(,␚(@-S %PWKv5l.;%36 9CAx:Gcq>i.#5n]y;.wekx; Kװ1q&jC56w=ke iΞރA)]yI[c9ɩt#wGSlE&{g 1Ut^@8Xi,ÈrXn'rodᆢA@ 6i8w{|whbY>QhZUc kpmglx,HXd1eEV'!+Lm7 Gao տƗccW|ȟ2·πn޽6Տm#ڮ7K ܳ$^"mۄ_yGlӚrH\$@(=(٢rt&d?&ѓ3HØeB,!npɪՅse@rUX|y ˨XQB,c@+?%?O_w06JL [RETv/vd71΂‹&lmsv sգ> stream x][Gc0A:F! ͤNb.B1vd{!?+S]g{v׻kZ~9SSUo;U`U+[/ kg;3KSmWuusTC_7g/Ξg~5; ϕG+V-pݹ{!Lh*!ZnzǖgJfًs/pbceUT[5^EnX/ڒdP2uHoуN| ^ F&)og&[eqVK%iRfn v+#0Tխή~k>Q24wu϶^&]E]U("Wza@ *tCb - Ǔs9Q!]U7YhEpJЅJE DgKÜfy0'/((LZaЋt\$*I72.T.Np/YdWo;c&6πW9:M*slywjzڙ8Z* & ]Z Z/Y(kWbKҩckEH。Sc'62(hb tUb~槩xR:=Ysig}2ep'?Pg7/nsxEW:ry/Y͖30F5fkG; ;qWc@nVQ*a{e0pj9dԝb:h_)c_:-~2]լ ;BZB>qŕeh7]fi]F\ƪVU9q@IwIXH@n 5~`6H*c$1\LL`mÄ?=ɭ7'`hJyO6Tx]Y qn9s%rR!d bia@鉖rj(%a=qPaF on|@a w=Cg4},̥_Z#>Ԭ%]3νEqW%' ;)9Ph7&d/֥L^d \_Zw&oO^ܛQ C㟬C׆UwH?Źˆ2\ilWo˄\;3۵RCʻξٞJ@Hmsڣex +`8ǏC7Z5RݮjS1e[ǍBSq|SAòp$*>ej@֕PV-UѪe+< jaw!FѪkʪ_\Z?nCw=8ZOphnn8N);~h'gPiduFG~a"O$dDO$d~#N Hؒ]'y F']w4& |"O$]S<;&D2H(NdzB%)fLB=(6 {F&*hFn$ytf )eXyYFV*i%t+_N%ZlӢvW.\^+"~NO57xkhUH(׌T ?]J՝Prs?Kc>oǡqr=6C#Yo =7qq9=OyLKI#B`OȷyT.H[_o3z G@NJ_r!/4XYc EOvPendstream endobj 325 0 obj 3177 endobj 335 0 obj <> stream x][Gk@cxH3KW "q\0#MK J@@/D]Ω]3=޹즴=gԹU9tdr_ߟ 9;" ,.~↏-KPBrZ|.Αki`8gFFσZǦr|h*YR[ 2)r*}AN '6` -GɷDRDZ\f>Jt1Ma;73cAG;3U&Jޘ׊aCiw_(\4oYm><@Cf-˗˼rW!;GnPTmvJ֑x#6Jx*5=z+H$8`Sm~\ysЌ۶Qepkv{] "vv{UHq5/ώ(Yt9c9#_x95^߷\BC@<t#!_芭* FYPr zF&LN%RX1@!QAݧ%QQYrxgA .庾 zW1`oxٹF4ܚ2l%#t܄y\JԳmbB/Ly {Bn 1nykS37 "P3}svvB7}ޛ>99V ;_󧦗ReÈ׍46?F;1C]օo; Ƨ\(xƉQE/>/Çd`Y8+Iz{Grc)R5J\˜ш@ \+D +:"HFlKf91*շ|?*Zrd+j^ܚ8p}c>M;yCAM }[ |ۗL9I,({érf}?[[ҦK.1XAӠi^}^(V`t6dePv[Afyi2L.q^,b@.]s.kH] ˔M{oU7YRka@T "IBkV`X-jZ/l~B ^lB mvL:h8 wFA zA({m*j݋^lЇ0[#|>3 Mzϥv깑1NO?f#ч#ު,*x'!,a!H03'& E( i|l(Ȥu:ʘnHuZjHǘcnzfKY=P:[KWq(T굔>%B8ڪLyځ:5XXw1gCveN%mg9b{敜鵲Rq [{-< Vm#iWY2%Hdy4;CZ PIh:[C=k6|hVx؞[h팓}˳@Kȭ3K?} ovMY".ٶ6ݿ/@.7; tr1/49~4Ru7w}_B( o+"4&/ KQΔDf"#Z9I;ʼ &!cK1WĩwP^sǠ*tR ~H8Wdy-)AO[ 97OkD/[e0VM2a{DgLD6SENX5:~^Qg$xv3Z%|s"5ckt"A.">A."HnO@.LI+dcI1S}n֤){ k&6#XU)bª9]);c_k_Ne> iy,O9ؖ#: l_!? \F F^k:bUMȁ~յn>b-[nގw`Z΄^:dNcapJA~;eܚۙE'D!5nHtiڳ٘_&sDNG6,+UA-svA%6]GF_SP2K,щKsF| z䬦A^ǥoϧ%*]l+p.2 A9dZ=. l4Y79d H H f"N2h")U#%0R#%0FJ`FJ`Ţ+E0!0BҒO=Qh5֛_m XAy؅/Ę\TOgzjIERΫ$5w MCTۘH,O8Z|X-Fo(KYsս8{rqR/E/ #{fDXlQ~dh<\ }cF4[Q4Ēk~CGu V KaL\R@ne]^+@5DB@*qb|1!^p+6!> stream x]ۏ&E4*",m|C׭p[Y5.AXd/<4 ĻhĘ5_|ɻVWS]o ̙sSU~S}(YQ6wg!(<1;7UYp]6,ΔMgw\_^wzigv+vv]u{#.H;̮ȑsGkZ[SRQoh(SvVC*U/qUY荮J/yK Uԛ\U]O!y]E/Q =]B'*Y[J d7om~[C l $d1Ӎjrd*ϐ@l Jʸt4d\S k)Nmfni{ 6sļr[p]Dˆ ltS%<36Zkvү'" rLYX~$jiw:;249jѠHvV sɅx۾ 8:͐ij֬J+Cͱkv#ĮN=W4yh':¿"q v\j$VҁI"!L\烬V Lȥ=1yE+mgNyM O3Ѧ/G?m֡D6~_P|7sf@) &8^Ǜx;oHo 2}a7C I }LABWyJL͗䶫.C "B&ScN BҮMf:%_Hc*ZQz f% Xʲ")Ke`)m( H`yltSY]Xɯ s| hp2=nZ:X߈2Fzi/Xef0j)y `b u)ʀ &n8W42_l(#+jmCR)J G bM &nH^-7mO vsݹOѲ/P Vue A05vKkѧ> H'ɌuO{-٘ HzQV#/vͬiB{j["=Խ@>֕:> b[zLX8J>5Z.͊ʚ<$jA{g0Y\Ѓk7$Rx&Le]?(4 nYcꛑ r9A./$zis:"Gdk|ȄM֟C|J($_(W=s2*Hk&ϵPXyN?}`_z v$"5iߚdsW:i//>dx{P*  d9{'ّ;j ̰oWtp5 迻bp$Oʐycuovq]uBrO.X.?~L$s;*l<$|$yz_9v6͜ki3vQc2kjdZ-<$Pzr$HrOby~eZ- x(xb~I]D<҃;yl8׳ vO,>X'8aMN;cM6QNR-u>g䴂;jsDf|fBy}QÌ(a8aEendstream endobj 342 0 obj 4155 endobj 356 0 obj <> stream x]&5UPwՠ c霞ި}R`'^|e^2Quumm;~ޕg{f_T7wzVxy}wh惘ŃWxW/]}7&V4oN~fm}6}%yE:ܞ{tiJp ^-%hښJ_>Y7tݸ]0ӼfHB5-?avȱ-y!ےj84Պ=[7aۺCzV۟2_'P΀wɗ^ 9r D4O3EPӼ^C#} g@& w`)9dgRo+5OYj*"qs$Jʐ(M8, AD *">rqߍ=&[V7gPxNc,jovJ!V:2.AkG]۟ ţRA[ $}!?Bݭu ru0,~dQcNꫭs<vb &HF#׃0%aNL뇞M3Wts4ċO:2w_j XZ7뫘_TƮ#8gf|q=L aj&ԕhx4IFydY{ iBT8 1=8ՙE:aGʼ==sj px3+ Uv:JDnZԵL3T`f՞rkĔg2S`r g]Iz ~Zn6.n}17# "t9k +KZGл\q<P/h*b{-vVNQ0[\tŢ# .'SU(moc1п;GH r{{L`mE㻼0Ň$zzaB\[*y^,pI:riڠp863@@UUlq-yR $w=vx5]i|MzńL8cpmp[rr -}ʑv[lg6!AHٓvЬӥңTP6.ɑ('>ðjb_n|o}`h=ry1J[( +Ҟ{4^\~2&|qNDDY}CLP)*WhTƿ:l㲱S /}H~"ekq bQ x/Ng-no2v~ k ^[MщKҔ1(ul,R2 ́KbʨLՌZwDbіP0sπjF/3R<'80Rkz)SvK䮘  #6WW!N#7G 5< K:3f F9Ad|#!DQct Nsb(jN乘+R,p ǞLZItNe8M Q8I:p)NIF&cgzdFK?˔%عN~䄅r jq\愥t!ٔsE4+#ؠ\յ>JdCOb8`Jca ȑ,ta2MmxR!{eY =- Z͠D.!VX:G>=yFHj}pjt Kӂ I$FmZmggā1Ef/mha%"Y}zlYrk'tyE\sGX;4Q\omz)B%0,-^Rj额RUzxJeZTGnk׋V8n 5yOEuOc?@Yu!UN"'lo܀3-[J$_ TPg 뻜G`X`hf|X=R9[T0y=^i#؜IvXye{j ے;7\Uߡ~NrORN:J/\3 {I$J0|0.MQ6 JRۼ'CDMMk߫7rQ=?&a.[)SW7c^t~zíwWl\fŘ(JY;l#t"/kcՆt*ގ'xcKP}LCIΒiSZkIF:u"f U,q=0/fi坮,,Й!+)E\2PQ5y"zurH}U$D Y1e+B0:i}h\򍁇$dsLPRa ;>`hөeNGG8m:+A]1NflRBGQ `u'\ ΢Or4`$TJG3otomRhUS5![e;-5m:|2˿S1mjs1zs169H;Gb#1ڭ}$mU)+H>{v+r~sKd#oVߛ@ɾT3^;IM꩓xOK:tk%l2|Wޜ6N/^n:^U; 饓'|:V,TưU}ej"/2,C?c:k*-Uc" (@ic^$kmSw7`:TyLg:_endstream endobj 357 0 obj 5148 endobj 363 0 obj <> stream x][eEQ{hD>241\a@ H :r # 5 hI4"@|D}x eڵҧOwkzMVZUj״۬iK.'_Mn.M2ͳ:I諹p]mܙvGÚ'&8!!U;myzƍɭW7SS#cCl"P*Xa] <,T=ѻBG-{x9K =iD$I5S1ȮꖨIC0U Kye1_L] O[#d i/((H1\̫a午\UT+õP9RyJO_F5fYW"ug 8=7]8+X:g/݂&h !=ˬ#=y#(噓r- jQUn[nI/ɒ g viSS2_Ep<}5A9bEޙ<ۛHS a*% 6pXvNu'>X=Jfb׮m>+] x-gf4ftC*rx-jy[6K7?giD02ivQi *X^Z߇-'0Y?!0(c#%3]}BWr[Oi+;N1φYTd7 %VvF9q[̏PX8a}TbM#)*^|TGiz _LgM"X3 BT+t=h>ҁ_Bc/^ W/|Ga0 nRy#Ҟʈ?-譭,+X]Fr2L9q& 8b0o Yԣ݀y(YEwLs{CLZ *':e6YO7(s^iK\ˠ+/lW"[[S/,S0|qi t֑"T:Hp;߾7Cdڡ>WV*ri V[AONb ZZf&q(3At9`ͳMmpSU+uKime*t݀6 *Uɺ2 ۆ!+^_sd+rGܚ4qyw2o&I mїոҙkbiغ(xpJ'vpf4T(D<%:Ek :1@ͼ  f Jm#N~H (p2 u:~jbMYx& q'<8N_gA¨Te#1)FPd7y{B}ݚ^sHF~{`&&Ø8Eʹř8:U>M4DU:E:[i*I4Q*R9x(N]WqN`[hhHVΖu+,d!i{EtǝD~*IKxXchPy8؍O7A-2^H5`tnҸL &KW{ Vg@@aB<ʶW8c3oSlREi\U&w LXQZ; oaqgAUR沯sI@v`QKؕEPmȮiV(LWdeas֕@2UbFݤka܀M[θ+N140H/(f0)nP [$N*;y0XEQ?-IWaVБZ"ʉڗcߘlZB"-#˿zӕ2OjQUƎlTnAzvHCn=T5MFKOj NkGC tWj8*I|n6F9GiF:I>㝚szЌN?ENjMI=+*֪.P޻@bh "ެ=gZ1:d X"f\Q\?Q=)ձz؞Ѽ~^%{nh Lχ^|_0ZxH RTǃ"L)͠%y g܌t}jօlCFۯъmh+߃4J^W]qQF}ы-AqTOl}5Y,P1'Y zSCmG2 0_gx1$h_QKXUq,-3Cb {a}G'o<{ }At|@5„aEȓn %*A|+pN_fg6Dڄɠ;_Fe8UUEWL{=l0@a <vA<|i4_pD|#Txu=Эp${UW'_Ǵ# Lh-ɇhh=kR?=-.p2|*u5*E6foė++I$g?BҍV&[ݍ6}e~ C^9N?ay%.pe6W ؓL*n5/E ^ 2q![Xr4w75'z"9q?92/#R{)z@}b 7G=GCa<@sP n}RrTs'rTX/7\C?q^2֭Z/>&5~u0LF[8=E6y]8ρs1+d13W奯#x5/'FsG~;x˓|_5>0>>~&u7>>>r'յy,nNO?5侺Jsw=A_3?T,f>u}̣ͣ~#dcWsŴxh2]f'gJĶҟ<~g9:zsfv: snjWns}d$ڝZ(hh:jt֙VnG8_ZS q8!ux5藠\};\?=T8-: a31"ƺMRSeEuO0 ;G\b2n[W/endstream endobj 364 0 obj 4050 endobj 373 0 obj <> stream xێ\Gp`@@%11$LN& fa#mw=}άwv[~Twuݺݦۓ'.2%w'&ۆrlOmsk"N?&7&/5;G4|sP!3wuyjkē iMpݩT7 3lmOߗnNnJ[LRV;4o<eA u!ځ-(:J9B-`?<]qt} U G-Hu3e `AKwR҉JB=)x*Z5q̰',p6B;!L[=z-ҍFx1?2 BmiGW4S(g`>k!n>,[U5DX % 0~lrǣ/qsOy1ЙYKdX&:8)4?{ӥ|EWUT9ag$Si\Faf,(DGU:ЙE/lMcNx'Lk o`87(D0>hgb!kUdsǓk_1B _(͋ێANyh-%sפ xGo<0<byV,j΂@ 0v<BaV@!*0oeN- BX41;LHoD9y4cL?>l)xj>*K//B*\'4M@"x6GØ4 c)gScr t ,s8§x0,CwQ=ILuNxX"=Sƻ7puH %| t^kxK$r pC(#2=[s*=e+7)8z=_,\d#aُniya;ce[<.%cG]UՄ+sI"L$[jIS47nk/Q>Ivd'Pt# ZMwqJ!mA3ۻg;w;s!&aW2M肘O؛΂^S"h*64?2]T p(.!N{|,^Gy3=R3Z7:d=Fd)O>w˓+΋ă{\ ]Q R(1c'²`BgvGtit9FuiҪ.$aFbXYG9y ( Y_WWn}V/޼%7搪qP7rKkx(tcbvrHй?-.Yb3 !,L 5֍,ϛ%5# 7x 8i敮}6d)UْHy*|F6-EEY!3Y`t4wr6`]Dőn|O/'bkn>T|H 8k 0u?"BH{0UqZ|)Pʉ,S5? ~WJ?E\kG!e)&%IiBm5\r-KO?ʞ?$3:m6W)~n#UDW| 44W;>{m$]uY7:=QCU=ۈf>O|$;ԧk"xIiCp"k!jb!j!j!j!ֹs)|"u5 } >LGmp1ݓFݟ׎M &Z::oXch;$,}:$*0๾Ŀo|>x{NZbmPd^$*WEo@!{J =t7ЩCkGQKA"r(hdyK4̫a\/S9HkǼР+aIZ..4QGtTerCK b`ߣZ-kn ́og^鋟f0^'g_ Eͽ2|hy_(S 921t#; yxPÏN$?<<5yxkA5yCoZNh,Ж' /,-(f{W6"Iyd3+5~5Xy"iU y!(|H'Ott`ڀlS~{e)ԇ]Jg۲iBendstream endobj 374 0 obj 2959 endobj 379 0 obj <> stream x][\Gl$@ v 1뾜6$lq"kvOH!!'xyP^ ~}s۝:G~[ݺN= ;3sF#Y#ZO>RϾ󣧚0Wssn?wGGgnx}ui-vK5;[i@f,yԓ82634MZeSn 1O]y=a"A]%J42XNeW%:dt34*h ra؊L}SFG#@ iǨިHq4AT'HW5W(}9R'<պO4jͳd*JaPY{>N_8+0@OE[g@>CaSd\"2d& OP9k! F;R/@:sL{IT9`g" E.s\~x3ՠ簅EowvGm\cʅ7QIim[Sp[~x࢝ V=jZ_77]}ؠ=qٸr'M]d"=NJ唀'H/w`u[N7ihyPE%4 GԂ8H\:ᷪrPX @j5s%vZձ| 7М̏9fUWuz.TsBMo.+I6]@o b]D˨_2e6 !P| ӵl?6+'a~OS B2-OU \$ `07xHqnk0)g/11KB qLm:|˸y~ 7bYR#Z^!v:3h@67#= $"f~Hc^3거߹zWTr4 cQ][B=%:U,ZA4~l BP+:8l9Xvf"EVx6|62f͆ c-?WhdN6EPxYX,X$qOtVd fݿ \Ft-E2. Jk<G)`ye &Vq {HقdjQLDy5zן@ԝ*g`Ldujvu 'iŝPS (\~<Źk6׸mr2NBlTS"}(ړtsVcS yx[=w})d*<tڞDݙ(]M z:%X*TrjBl]+%6C#V%f(N%XF>s)SDYyh'roA8_#tDox*]ܛ3Y$|DE_oЇvʚWbXފ:*Jފ :-Am2t}H6\c;iPaRnYR\ D6VkNF@.zjV qo 17NڥZ,אC-3(C]D=4VZ 7I4v@c4]L؅L0e6G{p {6QVnsAwWOoŔ_]nָT}Vs ڷ-2q hs-_nl,om0#SNgw-,t6Z*+K17Zn6[ŪȧtĊpj]bif)#Jf~4}:\/s.?.?.m>. \~̷N\^iFS ׆̞hz1̙zar-=|Eg*CBtT[릹Ź_r֗EeW36*ob' f\7-(Np}#' 6UXߏ^snjLAww"}(8S?Ag8CEVgݗKڴ]h Fm4+bL5P55;lS(Ya`'1Nn8d֏@d{vib{6=;7={!{endstream endobj 380 0 obj 3231 endobj 387 0 obj <> stream xMG 8@lb 8W÷Y'ؐ`8ƻxp$ _ p!G#=U=S==3}owMHVQ^ؘF[Wݡh }8tP4=4m*>?yy>kWpםc5jMژ57+θ"&ӅT, quAϔPQ`^jVV,1)ԛH;@NrT++%Np V )OTl>[Ka#)¼ifUWt =[favY\ ! aS{_#Dg 3hm36Ig0/"F|w Cs.v~ i'>(cYW`Q#!?sz]zz`:6ڣEu8R5e2!w_Ii@#@(LENR1Aʏ<_'Y`5`aLHLU n煙X 39FC|=lt-ll|?qo o,NW0M= F@ro'7Qh sMļWnWwQy8kZfŝ::4Jm׆@6Pmon5]AR2fp`P6IcPtWFƞ2cɮCX#kbTHlIvr.<^)$ NP=xzމdp1Gqh7SkP$=C8b["7qT1KL"ums`kqlxlS5: ܌NN_tհ@˹ޒla*eMu ٔ1ZXm$D;vnQu7̴n].@IM(=00uͳ#z t(0-q=1`=UԏdamNU ήJ\v9U\@B>wz!!^1Yp!wBtvl罒N>ņ~AFCgڑƅ/KU|-Ȯ?SFybr#M*(&2IJgd3pg`vHgYL!_# ]Ig* Ore16&N@` 25J2aA`BO՜g>zף=K<, 01 k=c1 n ={;fhzva`;^%o=L(qG~~,kB w܉V I?毤tjfE|b[U͉}X gUל ɥƒil,3w_fIbQNsxT'?S8t]d̘ʪtݡ;GO=aY?4mE`MSVr[FR^7Kqfw {ɲѱY}%xjzjS^qDrޤWSjgzoh Y0-qbQ(X>qEӇqr; *[M dU['3>/\Ikx^SɄ$LBSMתlpJ9&m϶J;"L~+IlA3 }lDܭ-OօY^%bkՒK@ݦZ.+/^:JKh4'~~\ңS,jZlɼ[_ߗANAHb&!OT@= w =y<-yBPƗ2PyKEz)*Oo'j*KatW=5@DfMB`5rh[zC/@8^pլ]xendstream endobj 388 0 obj 4028 endobj 399 0 obj <> stream x]ۯ&EE?2&>wMQ@eAt]=+1QF-Ѩ$j|'R3w&_MtWWWWfb;-k\^\\6\ 2o ,88x}5}~\:za7skqǝ k^KCn6Bf`q>nmFɛ%՞Ƒ͡Y6zKhMOua6'<:p+K5tB&SBQin5;9Rt:><}C4e]UoO=qхar3PSq-h oGa[|FefIO@Cy^NV2{.kpRuaa3\݀Uha W7AN<@xUft8?8<@xy`y1* J42;?L\ `67c9B=k-!rȓ ?C1(Tl| D׀u>=qYi;s3M+J{@YŻ L||Iɺ;G{ 5I :"\)f%\6S$T;n]An5Ċ MRӞZךR[B%r-#4qf,\ ^dgrZMtjj)j[**ᘕ%v,Bu2vH1'=f&{qRlGx(l U] wOW)H_Q(@sp?$엁TT0~he 4GU~ Di8ñ_^Dtq @"SOBG/Zq2g$GxaCðՁدS9~N Q }+^q;p_T.ޠk>`IBxȦt 'hr"݃*b(.c_ A`y+S]BRNX"}@[/b@Ur1kvqAwz]Ni ؤAhG7}ze6 8n2+aT zy|C?k B+SEb +d*j$4{L=,Cn|C!Q84H#> i4J"o@aCۻ8w `+# UρA^ĎDK' Ŀ@36R2Hxay()[k0=2搃E964;"pk}F}:g ,LzyƪAV&Ӽؾ^JM2s<{9Wet*k*>GYl8 Z2_d<H 3 l»`2T# C~aB8x'.mAݻ~tI?@m+yGKuĻ6B&q]#oS8wx oRKyP-a$"{xb#?-䫀,ꨮ!8ζC~꣦P ZtLSnϪHRߥ4n:7Q$*$ݘtREpap[vOpK"ZECOeɗ`xf>~w^D/L (Ϣ+c8/2ajks4@Ibh>HR #!^5&!qň!X X<{3ɡm`H(׸/7W8cA a'A'T\r|LfnvS:[@ѯ< 6jl o0fPǎcwT;&/h] Y@98? 8ĺ#/9?!7#Qk=|e^H >:Tyzm3:Y_5n'T;'lCz&@\sXQ$mbe&z+oMm"ñָ?),9m(fDڻ 0{/[MkIZ\xi/enY^118i|9՚܇IѪ=~|]v ƥhr5=z]!-6Q2|T@z$xr8=zO;_' ҽHtQ0'Y\9C4 Am#XR55S 58՗>4FT\M;B]bB=wi>-H6^rgu4: xTr l%?U#w%(I<3rWN]ǷVc~d6N+ Y!d-#+Y|M$ vFaA#]9cϭg̀O,Aqۆ[>OK~!/q˜brE,.c4aG0CYi;3FN |ߌ6щ SK1űDxpNqVOhӾu%跗V W|xR_' +^w*J 4>3r]0fK36WG8[BQgN Vr:/wva(dȖ>'6ǥkpm̥\uzRfR0{+!{g`%#+8ituNgzx:W%Rg/ȍhyN]3+[Q6~dZ;<v,B}ku*gV \iҒts Mؙ `Pԑow$cs%>gJɖT3u:եyႠ->6> stream x]%5UVٕ+%*+b[Z5t$o`+΢G!He_8'NsgvjjM|tfb˺bywSW^]/D*.U럔ᬺhMWV{ zpyynRWB.jgwGsuʎxW[܃gCG}1*2mUku`cs:"GĠ=46-@Jvr]mAr=e-an_ 4\!3xaT̖O9X`ojO h9q19 BW"m-ɺopwAҾkpgj j|/N~sGy" |sLK@CtFZL4s9itvDi@CQr{9gA3HW"颈t]`zXKWCg+Io!MckysX&e[:q{Jimg/ʫ:J&94) C4ï4Hz< 0DC9|h7_ס3Ë4@ fpMjۥ"toxXU>A̯˿NE[Mxu>چ'R`KUu1; iK4%*O{+m nhx*>~]5kUs3߁/q_F&*C#ܨ)<i)߄ $t`v0;dBo ^A Co;eA}X0 f$_2,rMլz V-T"{wPH3(Ȩ/@#WS@B돢h/>8{ǏLnyxppd0y3ORpQ< p=밬!rm>R5ra {8j~%(DnA&@^uo:%#8UJ., *eKdf"@ۑ[ak< :ިShwa2qE "(vg`ݩsTq9cOCQ`Lu}:By,GurOH&"g4D~t,΅(c:P̦=lQoy} yʒ[D3dH3d:Bo\ń:oÚ&~; #@HBn e>Cr㆔[" - YM7碜77ƇD%;q5a.L2n> sXQt- #,z2ryxtq-Ky!A9M:r5(ef\fP.b3 ]+oBKrHYt%o@c;#k{7ax3T,.Y1M `+FKYk]X H{<3Tc*UwC%~Y5=MRU-^1M̴ʐ̲>dQ1j(o37onns3\A&e-AVBE O.֔uYjB1&iݬo %md%nӹPii?:OX[^(l%TqW-Y&g.Ov8YH3jD&<=b(*"-zd+L*:E ;zO,P4HK^bl`h6 (ԅŃ|I "yX(U7eImf%݄-8"Ge<y̴bw3Tll՜[7 l-Z'Ūf6ye$P\Sז}-oҧKI|0jk媡\~1t CݺBRxJaXTJ& . 8K n|OY!hT9ڕϦ7Q@g#Iy6Di?ؤRtgA_ĔhM/T9wp+8Ϋogujɽ`]#l|lY,;X9A[8Ymt#9Y[77Mr ;Ϊǯ+ڝ!G0I)^,c )!Rd"dnTMeĴYpm1dC)Q ʤ AY;%tdisu֯a0ol&x}8ScMID 3iT1 Zf贫xO pס:zԭ|(Βy"@'ph{tUtךh<>6ng >Tߋŏ B^4Ea^;&ktzʓGw . $ T诃ܱw?|8G("oܫS>?'GBzo`sU;D̀cpHlg[z';D&"!3.tPZ@ ˛ܖ@e%@Wa1aT7䐕17QohcnwDK>-.G+Nkై&YbR:%Mc[ ʕ|W@*/64);H6t-k ypx.rSH|wV% ysBl>G4G{)rT7I=i3wG [-y !%0,!Vsw7s${|{U+XYn(hv Te=F zjXrc&C2FM+bRV4C5(\g4gpL6d%{ی~++  "@Qux4fiP%%׵s7兪RY%XgjPw}tO8VhI7>֝~dQ,cnl;7e2S7P@fZ4X%+]1*}&nK)WN:e˾L,WM QX=aw:T>i")7.7Yc ҇_SX9ο \TX12qoz Ln7n _#SpS:$߹C&LXca\#c6tc8&q,5:hI7D;ڗ4|Ur"V|/ihV-mFUߧ KlʕW zYz^ޝ936E츘ÛVK.  25 OB K04a5jd%ShIrɜU4185~khM=1~ěyn"7 Qw >9߰uf'eZ)ᩳO’> qkC+i}^.vl;k`g}%єӰ9yi,ɧ=J @D>PNe@\I- $O ER>!4 fBԃCPR<>:H,%HgR"a^hjURLf^!'qHLZ:4iLbavîV`t+a'šfn?)1zkG{~siA''k|ƽQ?G`?z&=)]0~cI&r6#"V< _]%sD[y`Gj E([%/ONyiywBeWAF Xć&-,DNs0ޭ Uei q E# `Gy񦿒Z|hD:]_~\f@Q%fc{H/u%nP>۵<t9oNߝdJiR$p>ɗkLUz5l&;ム(["Xͅw2LJ)bbdx":u hti) )cbd&Xņ*@r+YMwh3P,{~A688|p'w}s_ϵ[.guy0xnyl,[Ɵ7dq^ 9ԞMrv9Bv&u5ACOWs+·? +'t >NÛйM&p/>Tb V֌ ,xOR Qm99[= #,9=SddDnh3k)ovһS@l[2)#.;4bO^:z;K?UzfGdr&;(t+U6ŅHwLt)$|MƞᒃJoݳJ~miCάYь򐳁1ze]N}9`=%(Tn*#Rzʸ xĤH|wVWg+d] v/=w{ m?Lbxmg{550gz7iٔ8aෑPAL3آ2 .d>C}{U썯QBѿ~AЏҚ$dz׌Sr~ЭX ɦL4Au7\ xn?׮endstream endobj 416 0 obj 3684 endobj 422 0 obj <> stream x]KG\ 814E@WW`;6 obd;2ر1⡄D) V<~!!~KH:=;c;#[{nUW:ϯNVj~ݚBrY]xzvu&RW[6.͔jgc:|vgqv:9HŪ3w>m6J Umn{݇7/Κ3mzOj=ydh~oU[EQXɃTweqjhm:uُKU[}W]@HVs1ȮjJX۩kQA_*Y (/๪tm }owbғi' w(@1T` U\֝9Pq}-~UW Kq߅{nb rPhSa*ԓ£0!2ax6]ed$ á! _5=iխEYR (r*E}AA '>b-GiLeXlxs6ؘ&eFN1m8q` UcXc5G}:F乤9|y><"0C9|+yZ C<÷ t]x7oxmӓx7÷-C <÷oHVϢ-]NM.3K!KRlWߢQG #VI8&<"8"2GctȻ `6拷颢r<`TU3K4zhI&}2#Ӻ6cQf B5 YDA$`m*@ mb (#,QQ3{% YaPU0C{+vdz)4  Lo2Dy/JV?沑e~þ a*+VTg͊۞e6C75zv#,à f(!l@s<*2$ƌ0<%q & FY.%̨lJ%#9]OIۤq Fr:o{^ $}U+ri L=`q{i7\t~F-Rg )%iliv!MSRgٽJS7//YsUà1cPScL? [i+%Ѳo{W6Y)x酥P`c<ڹPWS= J"!Y)5ڬƣ3XƠG6Pں!V}X JvWK}̘W=%#y;E$K0* ; ʯeiȦ@ETIزApE@zw p?bPjn8ِvOXÁG8!?E l*4g)"RcK6vvrlVӽxݚ$f$Z Ob SO f5};z3 <'a@aa;Y\$Y^ vlX䯄)>0ϩSr6,afUA_򴮀21`2h u f;e:oGڄ?gLeq%X+Ȝ 2/#C* F;Ex<@b:H_n նqÈZd/NB:ql:kViK4x/V{Z1sڴi/M6-ݰd=NiU`rl uҐ֓6M]]w+%!̤ ہn&n6_|WCXp7!M@~VF_("|  顦JhL>ʵ6qSE2R9t~(X W`0Lg{t_Ttli>͡~IP%| t3#HaF֫]k67U!\M~ 0Q#GD ̩dUsUv ?2^de54Vx#F7 8pkX[=]s~kkB-`ݶV>p${o,Nq}܍Sq-nb@jVi7.Z~ V[+x%vZjD$o!Pn;(<݁,֛8gPiuDB5s~BG2TN4) _S%5:v Owg%e0#VYߪbeų`Hazm&cge9Lg-OjӮ!E,Dt/W@3nC3>SrD#ma ﮆ^x8B=էܻ*2(Hן G4O/`&i9M'Md0_{_[8IXȊSvx \}ezk^Evy<ԑ|V,+JtΥUؑa% oh;}J.ӊD~pZ\Y&^~܏ Q4ȟ뒣m.U'ܒqqJhb7Y t k= 𤫲Ei̠Ђ^k( \[[FܒWqu iRg ͣ0{:~(]!1?*hƣf 8NT{ t& PE'<\^Ċe.<%H81ͯ8?O T( nXR$vCuDP㣻aR',UDsdWt7@^ Soc,$3*8? kJHO4-ftTcjG+S;LXz75;Y+ @w&YW]RHYI{`U8F [YHӊO.eeS/k.SRl]5k-fk61 E]\endstream endobj 423 0 obj 3515 endobj 428 0 obj <> stream xKEPm 5A뫪BF(x F6F0 .a.Υ[]8:}}y,O뼫u/6kZ?09umӓѵ 9mD)C?OL<9 s5 .=fa3w}r궆5&F=LnO:Ӹ4fxv`l~]hM^ZECk * ]]YaZ4}2KUЛCW݈Ń4S12 t6h;{)4*h 2؊HCZ54()$zfrwq"r~UνJpxOBx༝s )\‡ >~d6.korepFFyX\\nGgM4q_A {|@$8-('5Gb;K'?1A#j3<,#F6wH#*lƩ? G& 뎄q\aa].L8! Hh p; ``-;>vnlE/ yxThDYרa5~ݒAWSƅQ$e|啑+a W> MSdk+.kQhG!|sfH4NO䚚bo ",cqQAK j"u*: * j*AYKqIm8cիav;-`0(d΃G] Y,ޔd3G![fB\$3e;g@UWզ׾T:fOTP#4I9~8ݙv؝& )j`Q6p78$UqUZͰemdHnVTδㅼҶ{ڦm8BL Tw*A - EoY)W!I#mrxrdv.X46?{0Ž tMGJw ;{Nl3&pR2֔0BQQ@$7 M1swh"l^vcgYs"Ν _]*~x544uxp,tv71X/i[+vkGZ+2! X5{N V0b!K-pb#zZAwI .S|`2Q|tq{L8ZX'&'A1(y,vͨ7pX'+;Ǖ?ġh6 2rRr>[+53-]>`D #HhD?yuc0U\WJ2}Ї79{fxw /FІHTzf`G( 0:Y(N;0zNjAZ"W 6m ~4%*V\!d$I}j`¶W7ׁK}T08Zƫ+ \Ƞ{ZLivneTƂ䘋7Idz 46sE8g{%c~* Esh BUA2Qfjc}1]W-L|(Y+'_$fo1&TXx+ ݺ~N'♌ܜHaD!<[ųk|"Iv!4b-j)VE$ BըV6 =u+I6ԉ,}r-PLjɦ6 Ov80yKUmfr^$b3e@Xf~0*iݠP"f6l9/P\S!0nŏ[|M5tbZ3,t~@E\=^TDM%Py$a"x'S@?z:\SH::yĒg@hE5ajU}(SoY]RU"YdF$QJAh)zb+:PW21#a?u{:/ f{ʲ+! SvT6bKPWⲆ8Zb|T#[uyWojaLjcVml6GMTzvJu sF po<\ .!9S>ㆋfjYҡ`] j۪!X-IjjZ)7V(+Щ13+V|;<[9|Q2-#-TmRÌ#i./K*U>]K s/rAS|9×Fmf23 yzON҇0'WnXW=^endstream endobj 429 0 obj 3859 endobj 440 0 obj <> stream xMG%@C ަ?gbBX6" H@r\ 'tWWt뙷ymd*JJ?˳{kU]|fvuQV')Q]KfTWfzõ ??/WvgWjŒvJ;ڽ<5}zִi=7fցa0\Wz*}-l^[%t`>r"6: ?$D UўdjHtA :t!@RDG2R )БsKxև8"E7 :s&,)ΌEIL0i3܏,ƝЪBx,dr¥ p Qpd'w aݩB,+qpW0[Ua[-c[8!au;ŒNDu Œ(>8*Ɛozb62iq͎;ͽuז^_"U;Z 8WT׾2Ϫ;d N( 9*& g4j~)wL-#mZ0bHAg<hQb7M8FcT((YYd3!% ʭ ܖ<ΝD~7}&rr+^MvmZ0\^dM{fׇ 4O ct\=:OA BM:mb cIHx??&ԥ|xc`13`^bdӾfi xrؤy~sV"LgC4+CPͳ cķՇ`s'bb<_xȖ~hZ?}N|A)3yN[Ⳅ"m ZS#% ˨.x6Lދ2gE$k^VL<`^7'@U2B+N%ߋ܇#)S Q420F:ˋ\D' 2kȉ° U -tplc % Jh?G?jFYPfHmh s;\̨O܅H]xV_bIV)Kw$%FC)jn3^lذ)'CnFҙ!2 ,)$ͺ]SW~.;sanzFUCkKY"sqIf=9q).ǛCys ̊1 Lڪ pd I-  ! +ra6YHQaacA.' ~}'*qcIʔ+(bAG}`/=Rɯqq("">.)Lg9ΞWD[#qG sȄ٪vq Vс.Lg}gbYc"~Q|HEJP  ?Iۏ#28,L?)3W"N%T_Zb%\p&ٻ1uQ?DQ1!͊*icKտQ"/ m#3lqBZՠGT-hpH! ciTP3:nbS 7QQ_Pc'MUFXJJ-zIнciw+LŸYC\~} &:ΏЅy9NEb\XJⲵnPaԞEwG Cja/4Cݼ[ y^Kl[m)0o[ ܶƙ:N7@a^@LWELNJ.ee)͂w__6H;A0$.֍Xg%2u t&6HX Dba?4̐Cj AQstvG=q=]l\h@ľz_E i/ ntsކ5Nٶm[vqKضm[㶭qָmk\IָiqZ|mbkXwk\fi G7M5nrmEN=au֤Rdgʝ=ۖ4)l,-oXۛDVcnhRJmۭnvd-KNlMZnF-ڔF)ʚuT4Q߻[ϑuti>*V7޻By6Ҥlc*Z< }_V|Þi1ضR,Gɼj2I aҌdA6¼?)klobyE ۮs|t+ɗ~.O[FAk(y9/endstream endobj 441 0 obj 3100 endobj 446 0 obj <> stream xKGLp`@ $C@u-8į@l ;r+rNv BJDB\@~B qArGU]=};3dOMճVˬautrc6jT]qVSkx]]Igѓ:0|Xbga3wa:2:rb;v,˲ZY=Ϯ\)]ٕV.xy5@Z047*@w֦ } *=߁@;}W'@gyIT}wm&v ոEW:k{;%42"Am'XTmn؎pGhGa,E1Pc7'@ qC/dxՄy>X%{$l_󫶕bTM*,,r?@(Sa2ԃMwdQfA3'3'͇ 4ڲ)-QT>A6^%%~8d(C˔)M`qڢzGONٿ0ZZ>ʆ[cu;E VYXIa  /.ʫؠ%qIVu>8֖q>&÷zPem;ZF?fv|fCa9f+]U  $#+ 3EYfQBܢ/#`Bw}+x&&"fAGbx2VP\ /bEp 6Uà &Wsv(qrZgd(\97Pj~G3|q͡EA@,@c+U 9JVݎw*Y_Ù WYύKɋm{GJDW5"}ZTC#wdCBm=ToÎ#7 "eD6^šC<^o,0l_\x>s/%r@ظ˺c ?6`9ysORZ҂Guieᘩ txIӪĆa3 3m8bųl&M'Hk"="AH?$=Y׀ 8UmQt a@XB<[RIP&,d( fx2|jhΦdxsZT?C֮,Wj4X4.>U/c7:bQ($.9\A--6^YgrBߒnyvlQͪxqw3+Ӿ`V+X| !W*ixA Wb'|[v؜tCs/).Neu#/Vz(V\7@Ch1}U^$ . cKR{? K0vJ(bGH%/:V`EDҔ])eXi̽X:9^J ¤DoI|!5Q]f=x~@|^vD0>ES){(xvR?Ŋ貐2ySZbٶ[d*hѼws;B7\|R;jTOIip &1rorhQ V&O#Hr3\~e.XW0S 7a˃6DxC$Se;K(MA > P=Rd ? c!SꌻcsH)%fu_}ûai0Jvy`.gz7?T%2Nr ?% bƁ(/=w7=[|/e2ýX(QyRNF)߸DC@(uoM:X%W(dbPbNdoZ-){- dk\iOl/"nN_ :boTpб (raeY9b16x]aş%5NC*几\,PRUކG@V̨~#v<źC3D59 JɄorwa&RpAӳj`>drk:dȼӼ-9C"[7>tsv5S]|P 3D/. :U*E `Q*SUuendstream endobj 447 0 obj 3475 endobj 455 0 obj <> stream x۲\EUD-TͰHĻ&Z`$IŜh胠ZeQŃO>PؗzrfN愩pfM{ɋRkۆKOmss듗[WsYpۅaɧ\SAnf!g98<nLmI?_f*^ i"LCnSMYH[E ,>ď-8Kt\X@(:N,Α9EefNš8ss6e!OV;QU+t6/)sNe<-E,s~7p#jPCrB&ϻ)Zܛw4) LJn Cl6-)n:Wq@{KfnqPV*pm1s000|WǁvnUp2:̰,``-FR.k>@wj4W\HViJɭ?X]4:!T'SjBͤC_D@?:' {G"KE.=TrkI!*Pڹ.U:641 !i9*d"wS&7 Ӛ4`-|p>,ec} ~𛉻 `sN͹,{;22 a\7qEr0P]i!8N=ܒs#vLS_A!?Lgk1^s@Od?0} ̱A/&k.k/_gYΗ q7Ow 8."Yu*gx53|pmۄyP~E -BAnsja6*C:$Jt0 cnd PMΓV?Id'9(.)N٠uFy3F(!ξZ t~@"?G)Zi$"Ep2`L-p-~geh^K Wf'XBޖZ&̼XW=pb]Dh. >LxUMxhVlz8?e"f(6]6(L} (?3e-8j^cJpGmX%K< $(U`Z2ȋKBi/ YʋixUhS>GT>+䯊õ|09)=F6Zۙ r .r/:UpȻ; Y.aҦux2 ̢h릥I҅AE v+*Vzys:kpR;| S"QC5?ڴ(kyˈ_:I랍gkQ4{k8w \!JW^ŏo"Tp#Nxq^hil v;I)-`x +4IS0!{L߷xc,Q _N@!s#_HXBO*+WVʊf<cm@5^OHrÆ ݾ0`]) 8v?Rmþ,:geAhŲ^ZHжJU? endstream endobj 456 0 obj 2970 endobj 461 0 obj <> stream xێG!KZ4㮪7$YP6`cGkX' P"G<%滪J亚^tY7@=(ѓʸBC+" )gTT*Ca206Ȣ4 mP3'3'Op4ڊO xը*JyI; q(b E۾ WCgݛ|;4FZ;VKkO)5<֦5MN܆q7Z;k+mJ[֗:h%qIsxj|8n8@C)q è:ŁcCg[Ђq>e> ZpJLyG ǩ;V$Y GYv񞯗e&amMDSlEKGIf:N~[kEZ^I]Y{XUxd~u2vn@: Vv-l/OК mP{ |;?kv{9ـw)v) s?0xa*_ WCX@PI`)AU52^(q.422 PW}ȤqAS& `[Na;}IÄ1{*> 8 Ic|ٕtpQC9 Aiędt*0/'YlF\B)˝3X!\&HV5*YcssDSėjH.(_ݦ"SXA2FeD.ɛ!hg5 ,`)ѽb*smVsq>jƵڀ. h ;1n"l",4| }AYkxse"e0Zb=Z $z\fx cXraˎ(:(bp4qwsPt݇A&O,t>KU2\+J5Vbִ𠝡f De/ϓ%:R,#XWj> UqgQ75&h(u;,oV\jjT@:QI?@e*OjE2x3+ @BB9<8 "$tӲZtU s ]pE3A^ϯncF˟d/m0IKeGFoEWX룺 [U5^߄H?QJ}Eӓ퉙Fxt1+=d{ zA*OŃҋZwx8H/ϕ0(Km^ =ҧRTq o.ė"{5?uN9Q9%@ J%^Qo )2޵.WވpnA~דWQVZI8dNӥ$WfrJ[+:hJ#f+gmQO%F[#U8y|m4]4(4åְJszQ'^ϕpmCI:10Y\>d7 7z!)^6ZM A]e|\յgcj=/~jz62K%KS! V e|E%[ 2Z2!'cO7*":aarƂgvMk)K[Sl d盁3|3G}3xs3fS{=>^vendstream endobj 462 0 obj 3305 endobj 468 0 obj <> stream xێG5 !!6 ͺ.oY(vXk$$Oy~ٮgo{95;dÚ3w>tl}3;{^I؝^߃s>@,EѮ ~AF6L{pÁGOGY\~F?T^aj~ā\7n^@~AO* Q G:<}L7 F >iO9b(̇Q <훹hH'= ax8S~WH,ť &Mxi?<T^Xz306:MVzY&+((ř'(ͶJ[ZTzЊ[%܋ SyXBR B ʡ3^ښ=c΄k{ǾX&Dtov!6>o' m_6?Et؇L%W[`-/c8,÷zu {`` m@Qc0R$͂=Ygul̾_d-L0Q+H2"HM:4Z_F4} ;0㾷3ll4Qnس,5^جMtdvU=AD>-yBB2_@֫[&9L+0 h~Lw ,",ӑn8qg-Q~A1k:"{QΎ7"[c"u(Wâ'z,\<ӻEl8BH9XUvv[1}>y .a%a 7j8[ȍQh܍E ] Do4L}ѿmJ#lebFmqh%s5lEb[V%Mȑ [V2i!D4CjjˎdCJV1Ҟ'MSSKܔHɊ|;Q5K1ErDg } nC|!Ir4\(D`s\TaQdh| 3KҀOQ;j>l ț%ӊzf~$@K}(S!"Hn 5v!!UL^It۞Sd/*8UU0dCiF)i+(^1W'*D%]0Bl/9fUw+QT,]$qrli-*>V _=o!@({ЩO;|XI!seoH )4-IJtF]L{diҥdOSqyiVX:Ϯ ^Q YM(8VDY~qB3Exm}JXl}ՍYIs&,kZin!jH:j4x3Ӑ>j1Ӕj#:RLɳ*] yQ=2Տќe1ɻ QaRI:!NoD/4;&q|t70_w\A?y:H'm*6䨚Xt+JJ_VVۮTQ-eR#Բdx}8W9-oLzrXCFMW c gYׯ꬛ʬvb_vzKlgTߜu->u%5pb]IúJP] XJkdoN<++sx!IF>},JAVsѩ>7,/ն{})4kFy_1{X D“;`B铤6&GHߪZA;uVKfU\"Z~ԇXmZOʟ,<^c9Cm\Є*{HE-NHsn13Yf?WhPH!N{+nM:+wm;{K< &yP.Np:je|˯ƦLG)0IM[5qϹk򐧻(Ù3e!G놅t$b.񼖤vzDAF.i[dZJ˓K<_8rj>4vf)RCG7 li3Xt{y&G|§[{*O2o8"v&,_Zk/c'T1C(}oڙ:ΖL]{ %岒($4h,"op yB_UܧM՘۬`KPIRTC5u1Cr"0+/Vf%eU2G*\L ciZ> stream xIG 0 `qL[sWUv !;1LĒ >pA, w8 $qA^MoyS]U^~[UƪW6&'/6ZU^ܚUWF-) 쟸1yntus֪.UX ]٨άONX~uN횩D&Co2iCo <vՕbDZ*#x3<'p4LBoCx FGJ̐ʭC,v"^5ح[K9A4l3EG&8j &ɓ֤ٱZ:?Jq6i2 <,ܚW/9Ez'Տ8y5>~dk^k8~|8ը"0ЇCw8~+xe`pVtq@o3ɰ^ӕ6}^J0u`"~/]Q8 q:PPt6(Hg+un@CTh$a-n?&0U Q܈ЩNʶWvbJùuʌׁ!Q]hM%u`rJYn<ڍ%0 yx<-d ;!!XHފD3տK+jg{HM6_]DGqN TdYSZ$S1IL6[)kMx{^0'ݵ X *®8_Ovֽ!%&{\B゠E[AN7UZ/!f&MF..'#c23z,ʇc>Ia !QB@x_c.4FElM_FyQto )Xٿ"aޥWxa*Nb܅*Z'ŠP[tqa DnvR!~ǗMWv2*4h AXW~,,6qw9JQ@яGGa $ޅ6a[wZӁA|6 r H%5~=4h0!,Z&riȆ`1hQOf_1.^e9|& A^2H1g g ~ږJU |i  _:ѶsU MI2}fZnAGtӰ~6[? P|ˉbH:,(_t'vz1 θ3p* %bȃTh E6ɵ* hlw9**Դ̪s)ҜH4J/FÁv/]xKb$,eNy 5zKȻD1r&I$>B,ˢPzwzÈ"!Ta 'h l6Իʩ ,$' Mpno1 &B,^IݾbSfx'ɏf_)bO{VC_+<)̈́uDڻ~'v&tjܔ@k?|?Yw(fZniteӔWqo{P6/ʌi_dKZRVJ5`ͅ\_!sgjsQ~ZKO׽Vd2sqb)"JZ;Sn#Z wh/d8 FqI&η0p\$l9 e#7°ޏY~O+f&9•ߊTYbbY:$/ުrfkz%[+9.|> stream x\K\G&DGx؉EbzR6c' fŎ1vd<&3A$ C$GB!_`%+``Uߩ[nϫf1}^U|f * KōWF[#]BtV֨,qkU\7,Ư3,֯hqAjShZ뛣')JFO7֠| C)6i%,ˆ$QC Wrtn)ϗ W#H{A\9+l C(:ҽ,Oj9Ģko؟iKDi[ӌI)Dnt7F;Zl(b{_(j:!JFfmv桬+ CA $ G3ֶ/fEԏ[-gc՘>=`bqYʪ~I.ηG\>2fZքB#mj#p<Z8S! ==e}4~*'ikVֹ&~J0iC/q{}(Z%OeYVVM%ic4~C|u+OA_tͤW1XC H)Ho[|b ~4MMKN "aƬEUK$oRF*\;˳o24G5|ʼn\Rfl$"-v/Y.F;?-k¨ԻQ>?9i{_:SD {@xo#fǖyOVς-y\\VHz+]WJBMib8ѥCdaҶNY-/B1 XDbF!#TWRP?ODkpc(>(g2{xf*u!zj)eq"ᅪ7{Zu/ vC:7aíd ?%4B4K&x^h΅~qچ}E?:ghVD 9=L$ ;Ln&o˅o8B3fz6-69݂n&+5E7v}g|kZۣ*ڃ[eej'2|F+gUT%겞ah/Ȑ; *o'D ܞ2e…^a\ F=x-f_ǦAYV0l7N 1.ҰA ȵO')-νցlk=^X}/QaF4XzǢ"~^cdY?wBC2LRA1LxOJNS2&mO:GN/OhU~ѱ02$ ҃[AI(nZ0dfu"A%uy~15w*QhLS<+`O8qskVhUrƽڰ 1&SVe~NsPp˜ y>Uk*Y5}r:vVdĦuA*X+~M_V9ZqG ke.7Xz)]5.zJ9^6-}t7GEݵH>>e>JdY N˘=]tue+5ǂOX$ѱ0q,bڹjV^cû^) ^=6W}"/a'g Nw'ycendstream endobj 482 0 obj 2741 endobj 487 0 obj <> stream x\͏eE{a@ 4y[us34A$>gDnc"Fcdb0DMرgʕ;{ԫG^=N:[U;pքs:vΨ Ұdh#,}=b,<ع%υg6;5za;qZ9Qlk{Wˑϴ")XDD dj16KbkR߯im$7t=͑Q_CF%v5M),3Uvߍ R0(bjEn i ;fқ@3c?"t2߄\ǤoިDq4M||˦75|:'@I⬆ij;Viߍ7 `F(z `(Ltp: cy%,~! 7jTI];6:]Rl@dRFid/=4:-,5z쌤S>5ʧZiRDeIS> a5}ut_O,˚-][售 dnNoWtm$ozY2L7[TeY2L7)vӇ>&+&m,}OŨ/8:ӱ]Ĺ]z@,҆ɟN8 @^`O` /sEosA?WͿsa~&.B6E) 軠,a3ߢ ci{Q-ŽMlR͛Qɔ>. OCA"BHDr;UH"B< Ff*u}3`g 4O b4OW_pL N`׶ଆe!U Kk+`^l,ttK9|"[-"Q j pL{bY0 +Q1H7wB hb* Ot%Pܱm"fK'k[d+_pn"*& js%EU(5xf1՞U\$FX|*A$W\Cli]HK"&H'"1xǰ~u@{ 0K?!vz/Bt䛷BT$Ά m:}`h@LUA1JGPQ.ړS\ {Nʰd`s[G5{Ye38l  ̺2xs裸,]0oӏ7PlP}Hv?|D&.3 ; c?t u+vfl1(UUfeֶ~r|8z]u`eq# m3c5"rlDޯX rOIm_*s[Fi gU`  ZPzKggUbg\Hy :π89^,̀]C@wCFϛ Ha$0n)K93m^qJc'H5מ{#}P#}N Z!b@Mo's?8 "DsET~ `w44 + %Rt݀ɺ_R3<.W岭r?_6hnS%jj;y/$w!ᤧ!&bbQj-&OW [+dGp^ ~V!h!E6(\ hZ٥ca:4Dg+@ed9m]9׃i(dqW/f=n , l7t*( β K$kOMxWwŸ n/@8&QɢU_w׵S33'Ԋ(u-m RvqVgPϱy!:36Kwx\RjMQףp|<_wr:XLÉD)p8^|D"D{8^݉娞hseh+N KXVc jJN&_WBXe J`񧰕֐5't{ n8 upB5lFkH"3៭7&߰7l | ny}r8m?endstream endobj 488 0 obj 2561 endobj 493 0 obj <> stream x]͏GO l! 81 4鏙;A%aGCdB!rIN "r 9/ H3=Zɞ_UTն(?;;~ZuqL5U!)vݕieU8k˯/~2{ZU~ڦ֑[Y.UvUzu沛5 RPxGJ[j.jXcUHC,VbeRNe]0'Q3%:ZhvPB3k~כ)A|eZY(?σn޺(u&>=ϺUMшh* ?6anpFy)”^A(ŅX"`YX6#p8ϒ5}ɭh0-*w$D B`CeJ\FQ<BM,zjg4ͺ0gڪ]JBuBN!mwo݅0mMqم/^Q25uζ?عQla6 [97 C<7$mdZ ydj]l~4zI?x\Gtj*MyJ+soiI;TGTꐥ zdEnw[ns$2hx"_NҶ3l܃8܉yK{j#y]3!7i dU<> 7iFk&|Hώ+3]tpG[aRr`\j'LmGiD#l {.;4~c=[g#z .Uטo.9iZ?mM hoH!,YB*) kU:Bސ\/uX  Grd@]GJ.eHxicTߘJiZe&Ķܙ&L`G˂&qGnPaOZ,AvbEO?&;RK~ o6\2SeUT5s](&iMK''hz o]J ݟuT׏mp'_#9g#>ary{Vۥ+9Yr)SJb(Wa:{N1UJR/)4]=IZ0=+}|NY%xWow0XHffV0ƝaWKkmP*9m8\'NL9&, GU>Y͔hvexc MI`n cח$N(5J j?j8Oi)M8 7&TB1M*ݬ:MK< 7&,[-R[Lȹ _l&|oo]ӷ.[) T ӷ.ӷ. [fVTٞ*LO[Z9zbbiK{>:~6 G^,KYTSK.o~¿Wonᖻtl+[^3uطC>+Vi[{s4f 7fOkq?@XN'EԷi}5:8N `*ց`/eXgA)Bd D&Ll{@Mt^,CƢGendstream endobj 494 0 obj 2779 endobj 500 0 obj <> stream x[&EUV(vaI|@Tu ]uawe//F Q4P 17-rNu{c:麝{:ۭmV5xmqlxuB⭮'񦺺g ?Wu!xq3wZuzgqU;nM%mY\[/[E~Ae]o]Y#~Zo_F+9JBgmoF T5Z;H YJd* 0|'?68х~T0:Af: cS,̐<Cqd!JDiWyZq{9[`d(CT("!XjP&ٝowvFZXֶ;E ҃v!VZ*Zc_U7%cr؇K&V7l{ 5[q!Zx0rsx+1SpXno)l0Xj/2p]aot\tEe籂B'x 7YқfXO|O)`sp\`PB_ ϭcnӉu{!?;`ɢ{+)w4L,YɆW+ AQk2/p۳WXq'Ǎt.w͕eT}EF=*^֬S2fNٵ1Ex-uQwk4Г4Qj+F:TZ,|~zfըPdPe@^$KH Q3ai`fzwbuWH>Q0mo;ȅ3v+UR|{ca<_"] >$hm]ia ߁ݺn= ()"j$- V;o%N t+E,;4gl6vwkrWRѩ?9$1}i tzӓ.c%˨ R߻_c\>Au̪SW< VdY0œMi({2/r:*M`={KE?@ /,^`c N90s>J~4!aI= aa޹#ZG8Tzfr2 egO>ƱfBo>H3EB<ƒP/(!ulA,t w1CvRqR8t%ChFp5،lO0#SP)߁>=QLy"AŀeڎE1; 2IDZ>= fd6K˫:LFOƺقF/IL.J4xBEտppUtsV$Wb>u7"K*\H^ QEVjH$Y[r(c)!Ϗ'eɎy2ywϫ^Ԭg|&D)y{e.0?>y M{8B5LJ*GUX_EEiDbdZԙHG6(2Ssps)CiЦ )S=sp)g7%Eu8uH$uld)Õ S4/4kg˄(9/2 ɷ(?nNNg^\֞ըIoa{z6! . evkL41$CyЁmBfı(()m5 bX; {{TzpgL"_=XY` ;æYiGO2VBsqŹU:f,C3l-(:y!To.h/DI4Ǥ2b^!:6 EyNoLgm@z=WD۔aTR):ǃjK=M;?yXz 9}h=*5N3*Kٽβ=獞ǚf\8~:T}9+=-uޗJEu[w f.a$:"8o㧫 w3SXک!KkLu!..R+ž+mhhp+Xxc XIr}zS'ި,A9: H%QKyLE]d9> NcOd J \6=D/kf&L1KEq9=`C(_GlHԑ)VmkXjПPoc>^4D%A(4aݗ3 !WӾ 79LyoCF6Qfse(e%ز~R B'%64RA1yf9RS9p I%if[cNO{?0޳fMf`ٸ|f?R,Z-\v ."l"FGC/Sn.n], \3U;LO| jp hy Vw8fJJ=hYB=:ztdG_/ZX c=Q?ЉɋUï(??endstream endobj 501 0 obj 2970 endobj 506 0 obj <> stream x\Y\G&$CAH,PDV@ ؉bP&Nf";( R@l/'W~ UgOmFsOթTU*Mw''ƋONte؅OSxwb?Nޞ{%>G]R$~?wũI! ;f^h3b;y3OϯLZ/HKR.ȾF upT ܉1h*APC/.܊i[Nh$IT/T4lp `TUD.+H9M8xj OD7Қ{3% _& et#z>hAJr0'R|Z15MeH=)="D+ Q:B $u~_9q @gKAy(Sh 1J=RIz$y&N$"rgw jx| nWx/vJ]Y2(?%cNj|u: zXÐMOuжH!9t^10dS fuʏtТTPm;…?Oez1|h'.UAfl8gZ3(MB )D$27'Ⱥ֤?ē"MɗS4ypw3'ucX琱(sל^~+{B<ΐL#N:eaެρˁ`j:W +i+II(㊚$ޠaTbY P%rQ; RbJEK(EPGltbP!ӓX3\: A^=N[XkOt`}={ˡ?s 5&u]rIk6y ӕ" @O#W7*FpPHK>!@=vXLmF%AJZ\AXv+%42945r%Ɓf5/eq=poa8YxFgPt;c"eO@ƸwicQtGiv.;u&uM>F•)cx\CM'y7vwm>ە m逖LkL,ue;fTӨU1:+qh(O"`iō<<=7eM]X4Ksv m=jd_}/}rEYXHmpW_sN_`h'D9B<2lU-mɿS"][q۠Ċ:,ya,)(ɳb7,p]u ڃ7+gJu~yXw`cb1zuqtB;ʍư6kamaf7ægT=V aWBfpNs-O#DPUTN C3ۂ}I+ۂu*<3 l<\#3Qy#*S5jXq oMuid &t`xV & &]: wZ7K_,Y +ЯAC| Z"yxiGT1%w-[ 2i$ߤRoY)+!ŤcI.y^Q/6Ń%?ms6m '27}RnTk6}vli']x 蘒C~zFIQ9-oۙ,)ЇGܴCQv䟉YX^!y$YL7<;IA R 52Dendstream endobj 507 0 obj 2366 endobj 515 0 obj <> stream xMG KDGBlb$icz A/(eHg p@(o)>2 K qDOwUTOϼ}vښmWF.*oGb(uVH)C3z}r*.^?tTx{u83:u΍;nB۪=/*Sv^=E1|v`@أ"@y,³![xpGGy$QOcЕ7<]T@B^vaSlWy ,,2 b:hfF5,q4B'ABfcӨq4A^ȊB:tU1.Ycx2<*ݳUoTgP lj/sOKgP> CaIۖȱ qpʳ [p+7ڙO |1t/xЙ[uI+ q(r6l#8ĀjP&wݿQicLVpŴLPpv. ZTu+sэ85U}9Fָ:YJ`-<.:f< xïbyC5l0" xWw)6[S f;g0 by 3]aC 7- Im.a >zۢ GV Y"0ؿqu쒗!w ݃k @ay£/"g*LG&baT{: 5t 1 \p b_Z 1tA<̼l\+!gF]Q'Y:ņSl|Ʊye"*xEPo:[eq3}lLCP3u |vf%Z+͖A@h'A_>Lt콰?r&~ Bi:AE8FQOGu2!. M.r̖D.)=>g?V${QObD6EpjZc!]BAF[4ov'HѺ[jJRXH"<]=ivYhXŝ$zLS9^ѓV _؜5UZ8 w6YJh8XcD˨cd KR ^ĥUš_U1L.X׷D/N7= m\m5>G-r'A\Ľ/M6g eҐq'QA߃d.{gVdb* D oԦz <ƾW_@ FF s ]=/b&o7S[ Z4`/|PUU _".Q$pʐJnˆBXlyUH0ѫ[AˎNYu҉K[D\&=C4ClztVq3̥.Dޱۙ41 CZԢE9%[] a5L%RgNʥ\?3&I~Gvɶ;%ض=lkIpF'T?qUP-Eg* "LZ%6C~ eٸˁ&k)X >vSamg˥(iTSPNX3OK&h>1,He}g8[smٝ'$=O5Wu:xi*R%gjO|T`qj"R:G^I 7M*VͽiHi&t9;*q/)z~Rl1HHW05CKtLPMB;NB L0ٟBȜ-:zi_~d&m]gPJK"HW\$W[-u8U6ǶJ1])'ֿZY, ¬dkf.Fxib݆7nۉh9,'$6f1ݸqM!vf.q6wT7G+ut.:7ףՓ]؜oNӣ*e\elЇԼ\^7; Gy^ g쥰+|^ 93F5>cw@Q ,D<8Uu:49 iC9>-P䀣`e0ͨf[ L=>Kp$\TL\WDoRMSub'}# cgTIU#%J>Pe+F@IaBvՔ4` <m;j Ǭ6ІEi&k65V)^ul4e(\Ǵ%@`Pr.k!Uz;,wX7:,r_Vx<!CyA؁ ߞDD_\Dc\}@LzBpD&D"u^x{EpEҶҚ\ M.t2LܾdM0&Xc D2~;m Z[VTK̓o\n+[5mzvU}CuFӒnU%ް*f~i7tMӰߋi6~EWbdn endstream endobj 516 0 obj 3253 endobj 523 0 obj <> stream x˲7ab:HѬv$o8;ع!aސ@(* {W TGFyܹSYZݚ]/ukr*UqDT(e]ld4x~ⅉU\8ܺnp7Vqfsrtkwju3Ӆ3UlnM6oL*]6bZ:um@N, ˵}ځT tu{".FU>׵.oRSKKtx|5*htF}+  'b)jA2S3XXhtCma! 5e!<:J*^!B5tXnֺxJT#C[:#p VO6幗F$ NL'al̑!k p(%5 F}"7|ځFu$ K* Xdh"RD̿ BJ04Z:ЉFܜ"N=/`^;p  I{Cc~ sef6@/`tyxTF$W>$X4OdQdVhe1Eq ® Fq f CdWK.)/KK` `nW5+``"v*Yd+*ZPqCf{a{bM@ mN| ޘ"9muCZ%MX1GL̀FI*dBE m7a`Z8lX[~z ] L(!BL芭&bKI@M|Q2N.'e\Sm$R(jf%{%SN6׼վQ/h{ko65A*X?e1kjUF)c@ g*+<'^$Ux,;$>D\ "I9gOttQ;m_2C)EǬPYVbrYeX :&eB52!9\dQ pG հ~e8mo/kשL#7Kq@,r狘ɜ-W ëeah ^x e댚[$ >l,B<0/1i=? :EʙD4E]W jM+PH14(8*xgv&[Q>K \pFp+ A,?ЈW`fU(0Px @brНXC!deRQ$1 ǘ^x5B{igY $$LDQ4pb;d;bg_,7En'7Mt?0#h)gLp[p!\0+[/:.Ƕ M*ڮOr?DY8Y,f-d)-e6G^a1d6i whv^%*'ya(ɛ7ĭ0gX[~Xd3A$k8;{(HD0Uگ6nV:um~ <6kq%bg kvZ1 3 [=qƩij طD8hUMp%:Bt,r/w F(m9ɡȵ=D]# YZƓ4v `ty`;$6A0Gvˬkvfk&{CӠWwY؎Z-S #RԐ2- ugӄŤ/KȮH T4k.z8eud^X:;, BHD5}"]TT_a`V9r0yqAв*MM7o$含ڃZ_ #-85UJ1)Ǯj9>5U^)\tC'}9*pUnWqTB%vY;6;g먇FFin:BŕHSža+\?q K(Hzŵ"wϨ )QWp%,,W>3<2,i`W(X髹$ơPݳm-}I9zl9qȆKձ,Mh9nb9 2\[$?P=FAՆx(D _d QWR~OiȢ TX4Ù`% Ut/r59 Ey_v]viZqC.6oslv}L-Igr$r f /Yu9I9nw:8DOqM!ym~!2RĂdV} {H%ɒi!QU7:@de44tߡ,?4zr/DLEm/80WUx*kzvB'eV(nIJ1Ix)c&ʆ`&;TpgvWф!>f' :;yeǡ(5tb40tM:[<@=نiX& rIU׉CˈN=~B3v'+> stream xێ$7A!$C@I.ː C `hYP-!|-9.g{)ۧ]/Vy*ځ5`i݋PK<8v0hIeD("1 (Y[HCa1nO,Dqid ajv|ʮ+)/; xA6j< U R?MLtaN Brs-P ~FdanHF)Aq(Y9~ll-:ëDUy҂Z2%eXZe(:_? LwB8U*QCrHɷ oc|uiG}{c0F>hob!d4ŃW'U`^2 oW[h* 0? Q^4`amRͲ8@[Uo@'sR) t kۙJشv"d=B?,C˳|[ע>@#\nojs (.Q"tL}/ZTtV }̻n)Ki#=* *80d ކ0 PH>ISm23~.ZC"L")© 4N)$v11 +Q햄 .$BGkӪACB\!6 YT.)jQKf^^fՒ95W-4m5 vNee +ָ]Mto#ÿij_n|ӻV}oj8|4}ʝ /Bɼ`Ǜ~ I䋘 OC%a!r(hwԁ$ywQaם@ k@TkoGV10p897] $ȞF> ZK J`J]AB`zpy 'Y{#DRH$,03NH( Q!@֏Y(+,Acʐ'oH 둪=  "{q5}2sϑ'AT vP 'W,#'^':[y ~Q ,vPj mT嫠LpI},Gd)w.3{xfշǵ3`~͌PG0RK%R8;w'w|0~ |ޔZw8_َ4=Gg[^>yT/5ȅ`F!M+xiV…HMUFUyC rWBˠ-h\v:YMW]_ \Yu.gog9[h{fl-_lrGEXF:o,ڬ_O,'P@4+qٗSu/eXT9 `UbL5z@Z wϺ1ޝ9:j5Gv[UIϜV;yA ˵ߣFێŘ3)FBHXne_e61uGwxO Vf;;Ө%E6NynW\ )4/zT8=tP~rO?2Wb1wKra4q)C"v89t^~wIcTOWe`2s`g+GM?V] ކ%iJ6+4S#_*BՔ=s.߮Y^I__a^j֦9uRg#QȺI(Q)tczOjc# t$tØpIu~9O.Tej1a׫ F,k*ݱ|z !$kQK7MEAhm"])+wcFE״Xt%1XG`iTKxeZR}ҩS"iKy|LTԍn،׵Ӕx0sŪ˖ìlW/j*b|2ꦜWod["K݁fQqNwdK &,) ͬz.TZ7]̠%#/[:} _5NvAW_zW( bKY5]f^~a͙vB76#*s7Xl`5g&,s?X`IϜ.d?Xt[{?Rڎ~ &q}ZSdx;٧Oh2/`EDy]ZOl]ZKKkCSޘArVnʍZCQ6):f\̭ZU+j ץ37su<]>s֧Ŕ>қmӪXݧQܧeܧ} &^ŚWUV+s[UnʭZUk~8jVܪ̹UBjf!#O)S=+5uEɅJוX6tB}}])X}]׵.{lendstream endobj 530 0 obj 3286 endobj 535 0 obj <> stream xٮG\Id63x!s < $@D Q, ;Tt̙GSgk[EŊLN]P.>5UYpY;SyYܘ(W'/7'n353 +;ɩ Vl_SAz)R}qj 'O@^L7,vòGܨ( 8pӂJãGYcnF?>]%ѺySLE/FmnATkDя"RP-r L Pb-=?Fxf>4BWSYa}B[lx8@a-_&t~/`0| s8[M%yDc˖X'4[&z,\8md&$1}xƻYBpؚ\n1oJW e-o DHfnb`v?yy!fԸ'8(l0!?2$K;C  yްTVfe9 `T F[3&a'Q LE"*c*tùoABafsխ'I`kJ Q3H,A̅>=B(-Cf| [R{qwT }xkTeB.Պ8%$T B2/}f+=UЄЉlk$j`GeK-]6i.V[üTتc_ VChپJY#s3ب_xPnƕp?c]LnN*4[@it|Mߩ <~`T^*/R%"ća7(:(r~$/6L;( %.@;@e~"ye;bNj .]n }BˀuMm3s@:2ʼ2t~LQvX?l0o⾃&b.6܋ -hׄ]yVSAc8CRhTSm۫Zmq)JOd #M)T_/˰A;ޕB7A=t,sx7B/,a3` M߂| ey6^N;DAhUV&z-eݲ)@o?*ѻ2lQ`P"5Et :XdNwΉD8ArpN e]oM݆H{{aoԹo֜NX&k"orDPe4ױ..gɆc1J)Ā`8b#-c׷SlAo%&=>/cX{hПbmu8:H-CzUZ*/O\AbTq)@I;)"F8Q UOeA CCP[PqÜ{RD|Uy[MߝW?ڣz*QH{¢ gYZlb*ɲYU,h0D#]b^g%S⃆5irag`UNrDB%({:6_Y&',m6bKf,g%j.Ղ$: {եa_uSZSy¨{~1jwsDHFdY1g*ÇFMzt/8u6L%0׮ W3lMYz8 ?Mpue(zEW5 [9 UBOj i?OZ%H3\ZD3 Ͱp$DlHEti~T\7 aS7Kqvٓ:uOQ M}{”p )%U{ҎuO=aJ87HXa!蟾 .؀ŔlR i2m'1H{yǤ2, 3J08=fv[/Ew'h<O"g|]1Gv5_lm}T%?ȲѻcA*rw-b×u@S1agfZ;or<߸lQPaQa^c+#J,Kn)ᵭlx8_"-A 1AF(7(I]EIf*O3\/KeB%'v6cbB99w_JuG-D$!\ zrtR/}OPG}LnC[cT}@/ I>(FcbUB.R Lrrc}4͎onHun]aF|T*{nkJendstream endobj 536 0 obj 3584 endobj 543 0 obj <> stream xˎ\GLHHB ΃`z|u%~0$ Q9l`,b ^`ǒԭS]=ݾ3m_dzw:ug7YU3JkhK]mO - JG#Ĥ YcG}odN A2ayU5u'x4|:!YZ< L%T#wx!pV B K+P>CadGalJEd&P99i~ lh+>QZ*U|҃V:^%eXP2H}A'>G_5jW6詭WDeX{sX&eNm:q7z;+-saTW_\664%qIsmSeq>fo%=^)uڏTiU=EMmf<P.=gKSQuˆ2BS Q#T(8&:UɆhgUb!hk>?{KG< ۟l dHOdE?K-i_gpުG 㖉# qh˒f0(`j@tqwdT~\%86&QMXQr+O̡q 1a>ў7h2ȤS.f}e[hy\yR:Eq*5I,0GlSiB'~3B;oJ[q{D)B%no/^hfeN+L0)i<(9Z|b(j(hʸe!f덅۫Ɂǎ"$l#>3,B&x_5a87؅R$zB.ݓb95Ng`vgM5l i1 k g<wg=M"9(@:$و;` ~Z_hWe^e` N;sѳQ_"E^F@u@dr|Lܔ=vm'7 uGq>Z>f OA\ p v XWs@~ 8.*.&MEq-.E!W!ܚ[I&v@$bR^Pq膽gnӴ~W]S w_Υj`yQW_Sa6{2-.z, tua`[q?_#>':zS$|CD @?]7?T:AT#'^"ށ-272&D ̍Dz*dZd(w"6q@hN16A;dD 'fuL3Ps.NOqX4. 9mj˽UAQj3i%vΘp@0:; ӄK̛-{Z5![ARy='4>Dp IHuwzz-Yv tiN9C-SG2&ZxsEcYI;sLȬ,Dfnh-9eřɒDYK5Ǽc`|/#QE[mOL}IodE;Ɇ̍ryvjr8.sS2>֓dq2_=R9@:@i5OiV5p / TlYbt< { YTLåfSx~]6[h\ pnY %rfH[DL7k:Tԓ8 hI4([;F#gb9u<\JLRbR$JDtt KD2?΋$̚qiݧ"^% A`OpQH%X"NaHD5D__C[M$ӑuM2ƉN$LF|J&Qb9յ)V%ɄdS+z f†Jkղ.i#AxG[=b+y:@rgFQ;!z(=M6$09WBl_}7wEN N%Kj Ս><뼂0p/Qhiy D/ZNDQ4l.9gKl[Em54KW"D.^˱y?4hEP!^ u%7\40my Rf~:Lѱo JLO'{MMg C$`q8"5=;^h{ɉS,v^yEb2Qvb订 rQg@+Hpb>&w ;/c5fF?6ME Y_e)͂$mJR7$G o*Do cLfL?s*]Bpa'cT56-pG9SAh7tƭ N"lu}# !=tܟrcnoiT2h++TY1oZJ@1bkIJeNٵ{5.MJmJ z]Mw".К в Q3yE="/=e+V=y^~17'B1Z5V]"}ghT6!2[V70ENҡ:Hҁ/qwNq,:"2 z+ڨN6]2,K:%ְh,Ks tt,#n,Kj,0e|cߥo,2x)r?chendstream endobj 544 0 obj 3527 endobj 549 0 obj <> stream x[%EQP0rs鞙pٕT~]<`BHLIo?jW-ggnd%OOTUWUWUWTkVjosRٗv.TuYp{SxY\ܑw~HŽ8w|S{=;w]bwe>TZE%ֲ۹C_}nn ݧw6yyinnQGloUg?jZ.Xk'LS*x(}NTB3/yIu})*iXUIpe;Vn/N U"P4%JL:J0Mb6o YhCGGHb7ɖEW+Qv /OîuҴ~VaڟomToFs;8n!p(B ya/m0^tYHZ24oơ0s2sv!hW^*U>gz<-)qNdE(R"hx_Pmgvw.%+Vo棬V~qz-v-r,U0:{;Nyvpmͦv|M֚=ּbT+͙]dۿIs4sZԲZDԵ0UtPNjp,b^t0PuQP@P*3E긧 hV ʿfo\eՔ t;u73@1݃{B0޵˰`i$$鳏yqսXZxn}9M)";J"EB>gI񒑵},ƽ~14 B6H=X0*KzX%5(4 vB.y:0iPyce5k6$.eO$%kBYU= &sTUI%y׼h$_+$;h8A;`g!c]`9ro 3 ;TR%n~[k"M;+=]# ȭh\9o_C_>Â!R* /[Vu@\1mR!.wSODKܤW!I\~ƋW1kFQWFc`ʉ`?B\ Tl1r"7j.ƆΟr z}⣳hC#pJ'{_ZWB࠳")j {p H :@$`e›V}KWC-OE۩16&)>ਜfo7Sde!|ݡI@aet'%FU%27Gu~YzsMh;MO庱EHJ;H1Wȅߔ:\qt+/U')#d6F5jtX %mdj!ohxq56m7M E6;q'HV!B[av gZ꺂[zŷ<Lz CxĶIe0>xȦpΟgId @U5t>b`jhKb xCN`907C*ǰ\-U x+וumJJJ-0Kknc4ѽntR: 5AY˵iRscdjе߆F(?F(MX-gz<34Ibs/QNR"QW&m9dc`2:xD6 ŀy2EUx}f>9֏궧}rl!}Z_ppO'N&Eu#12eSKN^i,~cD0}4 bFΕֆژAmxD} p}Ծ;鳏*y }b#kZB71[gch~q,nTԠWTZ⣎JȚͰܨK4OlBѭ;`r^9#-V59nf_=CmF5m`Lٰl$:'~ǽ P[&N&NExꁃd!C뾌f22~Onj؜ żbO=\ sKۺshel6p/mD'\(GOp Nq fEm%~-{4U6w@Y蚤9oIQ94˓|jVEs9 yCq3u` f_G`dË jiR_`"Ϟ2JCG'=`GSuБx2H.Xqa)Unx?gI]s_p4;<0%vA : bwX.6<|&Q^!A^=r?!dBIRB ݜ u$b8I34R(.YNy䎤00*G7$E“nb_ j潲-w40}ඵ連AnZ 2 >aYcKǥd> GesS;Љ?;UeI8A'!) ۑ;A(KmWo51)Rߖ6Y4kuUpgIS^K:88ϑge~2B|}d,۶kn)} o.(_`&|M-\r`M#sڮhXʒoC8T%`%u ZdžŠaiE1tygyŤR*VLǿ@XnVmQ)Zhl UAMY@ݹvEW|}eH0;uŃኈe@+:nl$u vɨ :r`NBH@^(O7gϗȖ%5 0确}}V=ީL\ε/$CK>tx˰/7r\)kJpK2Z!͂KlOZFIHisY _vD۝>(kLơIw R f7=# b{v:rQN^ȳ75^KH}Fҏ!4%qo} `*Kc~Y @Ci6)Rʬ33b;{r*un8xa YGP.{K1`m"LKwfb~IÕ'N\|=V$@R*5)Uex6.è'cl"4z&+%@KYdNbD$0#aHɦ,e2dGD"[LչuZO g.fgUU򽦕Q/vMxst^O\w%6tpRϠȞF[eRŠu~qnVVs5VS.\YS`7eS4;=Oa.|1O;n垘A)肦VLV,f=#@c#Df@ӀPʐTaD(F6Ԧ)JͺdܥqR *rlMIQze{MNPٰϭAj{ Цa0rDڲՄk͕/O<=d,2T7KO޹F1Aڱ26Hyg5<4SتzO;jgWi~GG#RXџPeU0؆&/Ŏ0g#L^J #tYNyP!هA >}U  8dӛ6WaD?v qhsu-Z+ۏxl,d`L >k\C 6F֗E&Lc 6-M;}:&rg5U)}&Q1-endstream endobj 550 0 obj 4729 endobj 558 0 obj <> stream x]$EUV\d4jĠf.]U첀шKP1? E?0>>;|8NuuL߹a;vUUS}X{(?KUϽ:;Uuq`-/gR6icŕxAsz~OgwWbwn~Tuؓ|fřj gfw]gA^̹O5>Oµ}ZUƂ' ([hzm@ t< ئuQ9M1ѕ͈ƍ]z>NQtO˒ErPf{fW!&,a! 6ttTmqCfsZ^TnSv\YE1^n@Bx}k]( U t'qYYS> ʔ ^tt3(3'#?:To;**Wq jv<-)qNfwE,CTu[ cƉgF D?w8vڼh&DF16*e;F*^jym-&[ɠ_VhqzYBp@K?KW5_W{(P Lch*[ cy67]VЩKղ뀙>Fz ` %ׁ/Bo[4 L"0Ze_0esgVyUk ޑ۷9~]sv~4Y,)p#$ sx5\lYWJ+Që*wbtNPF߲pCKW\/% '_o"Ȱhz|/Z 7Й9-+gj;tO~hKA8Հ8K `6P &]STݢ{ L4!@&ge<C*Ko!!>OGrY;U;G54Ycک+o! ❐U0?Y0MppTm.UDE%x EB}Z!"dQ??/$5(pq ؇N9r~߄PҷLQGQj7lN+`MĝНޠk7`aqskvnVîܽm*7,.~m.$JDn)݁! [- OnHa? B "aD2j W-9 hF\(: }z,2c1/}):<y6)(£:< d$"2|B_EcnhW.4@$Ctr.PkDD]kD} Fw /^LO« J ")Ⴗ*ڶ$8 䐀Gcieв b#mfqÏ*Jٹ7ӘRVû,[RQ4mAd6`TɒyvtGRwa~>)c7 W ]0gW{diބsKU 6-W4l%SD&G^|V~T+cY{^P4^4{wls!4bB:ضUd4,GU_P={c/jҕ4y!XmroT =lȧvN٪ŴUIFЉDx=XP;6N#N2) Gv9on {=ǿKKmgPMUfZjCef/4'*3Q@*pq%وTsSv Kg 5)HEsxT!/ +O ٢9֐1&K߻ dG?5Tɓzw*o&w,*dciw6 UF;*$%HDǕ 'Q&O|h,o[HK:MF`RMˍ@bftF--D+A`PѮk`/%e1#D'h Zbȫyu8Iz> 2wG;/d tB5^?eJ4;I|'+B_ֵ^FBo0x?14ڌqܬw֡g\om|:n>࿐;nwYY_n]eWa{t-nxfw&o8S^n@]Ns`w:uNyw:ulӸFX+2N3QsVDQ.clA|/օFW ,]I" ]I>)>}fR\ɫuېR>P?S3fk*j]>mQVRZ ޫ@cJ:z_'9+y/"U@r۲4uq t䚫ZlnJ7Cw߳ h''6ъ7zUz쯛qaꬓ#Lw̹Y'3!9q7uJ> stream xIG8 $^rH@3(!$8ǟs8"dq GPD ,Bĝ?#gjy^Mu|d^z]U=cU/O=#US`ҴuŅ/ex]]HoU=iqe; {sUڻ 8Et,A(:V0 Nؔ"2d&OP99i> 6h+TFU߃V*^%eq 2ǡe*&!X*P:{/ac 4!2wn CQ%5ǭZ L%i o8@Cx  blqYaWJY7޾<:Rwg< TPq[P~X ϝ0޴MD- VD8qx*h=\ f)rq̿`.t 8@1'CFRit'ho7yʞtrxOTڻSwCG, JC^'PvOɧJ;CgEk**l5,2FXSĽ$ M,|XoIo=FNST tdFelGۺܛliVJoc{JgnD&kA[fv*%AXV&n?C*B7KrLR]w@d$T |36X12):.yqtO $։zfΖerjK;bCf[\謖C!=yK/)VWֵnG˼d Pn?^.υN:KS^ȋ'Q,&8͐+b0Ǖ^Ő fVuךsY1Ri^O,H_J[Mי03W{^[ |MzsCm:MMf&+<<ǻdn0~!f@dhH ׯIƲP[Pk8c=I$1]FKikX6[64zD΄\]IsGDFr .:Τ{AP>ӒnцPPQ@ >  عx}xrIo\Xx7 P$[z{*=LJW:K[Rj0^+h~h/A#foպO%Vڇ TήGLB!DVgn]ib`JeC/E++y$SƌVgơȒ1PL*UV U]S1v󍖩HDS֘T”sCL@oeԷ_ǂr +COwk\.5.c ׮ոZX2ָD 5.cXҫYc X2ָ5.'$c˜k\ve) `.m$X2b_ݙ/Ll+1G_Sh(xd>5w3},91Knбtd,zوw^kX2E/cX2,kcXrE/Cу+bo+bBXzi6Ĭg)q//?YDYM!hiz ^;_" ]ɗ+LRc\DpZI/<1.)IX2֟՟p%#(xdz,XÕl"uZߓhvTeŏŕ?2V?(BrmƊTpf ŊθtEHGD"0ۛ~8n!UJ5x~{QW{lwSxhgҙ#3~l K0tX'?H(S2rjckGD>wX1I~/[PVj2qDZІ"#29YŷZI@E YE~1x{gG髽c%=Ű!OTRwIÞ ohS7Uz(6]X>bq Gendstream endobj 572 0 obj 3458 endobj 578 0 obj <> stream x=˲-IUt8bhs4}٧+*+DgaD4 !s :op'\++ת{Ft6iivSsӵӁwC RMp)Nꗗ6d[37.S3'2Ch+4}mܜ2xk(c?ih׃O˱Kky, f4YW}*ǯⵏy|Cy ZSq?,| =&=}Wl&4?CܑǯA?^*ΫEPK{I7`K,Cwa!9u :;?}zua֓;OxwuW<-'0!N':ҧ>~&Dz ;MlnQSxZ?Ckrf8xSNpK^!du:6g=WHl]pOg/ .@ZZ %89gpe?"t_r`EYDv9V6,TN04_| d@aOW"Zy;Y!"-39p5ڞ| GĹ4 bb1%H 6 Qr'ߐa.UMGJin~<9QvrS$DCˈd2#}n 4fr*s6 ¨z[H3jc'c#VCkB$ wd\\}s(W6@-`叅#*C\eO8Ű  `:o)mX{ā4⹾Hޟr>T?W  ET #|wfx Ļo&pr܂t`-ɶ/maWata,PS$a m;vvNJ Yg:.MI.d__}N aLLm99c79`t{6Ivx53u^g/n KBci^4-s)vU ݢGT>#IPWƶuE1<]%Iig#礉@l2zY M iμ b՜Mqmۓ%{!yQ\φ(zI;KZZPHCpЌ>!K`Fz&&ZZA>(*9]&x@Ked.+)L? @ƖD*gA*fPI?*MG PA Z1ˢ&8R`) 7CfԘ?Fg,<5с[~>_gx'~jv3 钠߉3Z[ͧvˈ^NAb)ra fbpk|*- Ebd976[b"XNZ2H"ҡ`].c 5ѧE-[ w#!vg?s'h϶`5_u^iFJ"yMn\?;Zm'=y'\qĦº6{L:##;fKI,bQ( 5籠7ڹd'cמH{L< <7&Z2+—٭3\DE_\@VXa^ oh>:3k:%1g:IbCTF=9tgEN|&݄b0WTc% _a0bDY&/8q5ByvSi(x% 4Njd?! GlsgaZ+'Q2mQ3p_p=#QT&i2xC ˢl;}8X9g#x4LG%:D)1Rvq9sa:/dP[Yn8]5E>@:fR` Oȷj=g0M]O@NdBRhig 4w'0Yr0^--zot1e?^#^,MӲ#}~!bUaE ]iR$~GZy].&jP&<kROrXMIqQrpC]AЬ KԴli78.Nx̪/195m]CM9#(˸&aN0-Fq79h<]fD^_HmW /9x0I[R&źuc gD/E#{Pg#gc#Z^IXȮњ s}RIETM2p 5)y$HĪY9||\IVqP,FAapn=S4rWt, .Ebۮbb=:H[GgmY3^_qkKcg}Y75?? |lkrOG,L/E7DN;q P!eךiL+Nn1,y$(<#[5ZJA)UI o*MȘYJOބX3!ӏÉ$ʒFgErQ(rS^_:+$ dF푪c$?G~1T\{,+Ib?y)BH Hk-g GĈê,Tp@4 \lq$<]ZP Z !VjGϭ gD2f$6cUz6IzH <$-` QqofmLk^32-c;fz B5XˡJ*ԋH++oe; e4P~ ,%3f++ʯ;5C4&eJ͏"y,hM;Z1u >`dMܳ~Fl M)\XlLeV#%.;yL[b#*$ uI$2#kH!mnx2!k> ;VwLD*9ܨiz,2ѹZLS~$AXO2'*iQ3}wuxKWVptszÜKyG`uao[v *%Cry#J)r 5\bvR6*js);zIm@%䎛Feݩ# JafSbT" -H^rˍKO~f 8.fj#e=/ʹ_OQ59zOji֋r_M0nBTXK&5p/DD;n.=؝`:^jZXKoԨ{/DApOK +z;<Mk<KBqX+^GH/qtnfo'_efD=Azm,,nn>XeF6 IK&ŜED!jyh=a5 А!(Mk\_vVxhCtZR..˶eBC5 `\]B$E0#ke 7˜`XU̷ x\TʹD]PZXazjaf{Yy F3hYkMM? kwK”]F'd zz򯇵!lD~~nʋ{;j(. `.|V3%a^0ΜOd;Ԋ%i,ٿ7it\qND[vcz\߇?GRBxx"ɘg/DQ6mÒ9e,Ѳ+<@@$[/ JI} n&bHc<@Dg rIl! Ro.pueɨG,m[*l}I,'R_EfJ~s&894"oΕ[gh8t9с{YtňǟOaG_I\L ^؞^Sx#ۇAq,5qm)4Z%>n%lX &cSEDžri8{xr, BY'3pQQhqPESfF#ה;jwZ, hgP21G="i$?aV9kB6 \ OkDeVEip~/jY殉^PYPmKхajBUKnD6 rk gДDDѕbhc8ʕ#3t@(ȈY0(vkq8a[ pa\5y'1^V(*ペ~nݢT@ƒZ$1gJ]Ċ$ח[:B5[D5bJT%F5VG*5P?rendstream endobj 579 0 obj 5504 endobj 4 0 obj <> /Contents 5 0 R >> endobj 73 0 obj <> /Contents 74 0 R >> endobj 83 0 obj <> /Contents 84 0 R >> endobj 100 0 obj <> /Contents 101 0 R >> endobj 183 0 obj <> /Contents 184 0 R >> endobj 223 0 obj <> /Contents 224 0 R >> endobj 244 0 obj <> /Contents 245 0 R >> endobj 251 0 obj <> /Contents 252 0 R >> endobj 260 0 obj <> /Contents 261 0 R >> endobj 266 0 obj <> /Contents 267 0 R >> endobj 276 0 obj <> /Contents 277 0 R >> endobj 284 0 obj <> /Contents 285 0 R >> endobj 297 0 obj <> /Contents 298 0 R >> endobj 306 0 obj <> /Contents 307 0 R >> endobj 315 0 obj <> /Contents 316 0 R >> endobj 323 0 obj <> /Contents 324 0 R >> endobj 334 0 obj <> /Contents 335 0 R >> endobj 340 0 obj <> /Contents 341 0 R >> endobj 355 0 obj <> /Contents 356 0 R >> endobj 362 0 obj <> /Contents 363 0 R >> endobj 372 0 obj <> /Contents 373 0 R >> endobj 378 0 obj <> /Contents 379 0 R >> endobj 386 0 obj <> /Contents 387 0 R >> endobj 398 0 obj <> /Contents 399 0 R >> endobj 408 0 obj <> /Contents 409 0 R >> endobj 414 0 obj <> /Contents 415 0 R >> endobj 421 0 obj <> /Contents 422 0 R >> endobj 427 0 obj <> /Contents 428 0 R >> endobj 439 0 obj <> /Contents 440 0 R >> endobj 445 0 obj <> /Contents 446 0 R >> endobj 454 0 obj <> /Contents 455 0 R >> endobj 460 0 obj <> /Contents 461 0 R >> endobj 467 0 obj <> /Contents 468 0 R >> endobj 473 0 obj <> /Contents 474 0 R >> endobj 480 0 obj <> /Contents 481 0 R >> endobj 486 0 obj <> /Contents 487 0 R >> endobj 492 0 obj <> /Contents 493 0 R >> endobj 499 0 obj <> /Contents 500 0 R >> endobj 505 0 obj <> /Contents 506 0 R >> endobj 514 0 obj <> /Contents 515 0 R >> endobj 522 0 obj <> /Contents 523 0 R >> endobj 528 0 obj <> /Contents 529 0 R >> endobj 534 0 obj <> /Contents 535 0 R >> endobj 542 0 obj <> /Contents 543 0 R >> endobj 548 0 obj <> /Contents 549 0 R >> endobj 557 0 obj <> /Contents 558 0 R >> endobj 570 0 obj <> /Contents 571 0 R >> endobj 577 0 obj <> /Contents 578 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 73 0 R 83 0 R 100 0 R 183 0 R 223 0 R 244 0 R 251 0 R 260 0 R 266 0 R 276 0 R 284 0 R 297 0 R 306 0 R 315 0 R 323 0 R 334 0 R 340 0 R 355 0 R 362 0 R 372 0 R 378 0 R 386 0 R 398 0 R 408 0 R 414 0 R 421 0 R 427 0 R 439 0 R 445 0 R 454 0 R 460 0 R 467 0 R 473 0 R 480 0 R 486 0 R 492 0 R 499 0 R 505 0 R 514 0 R 522 0 R 528 0 R 534 0 R 542 0 R 548 0 R 557 0 R 570 0 R 577 0 R ] /Count 48 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 11 0 obj <>stream 0 0 0 0 64 70 d1 64 0 0 70 0 0 cm BI /IM true /W 64 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID &A0eD EI endstream endobj 12 0 obj <>stream 0 0 0 0 57 52 d1 57 0 0 52 0 0 cm BI /IM true /W 57 /H 52 /BPC 1 /D[1 0] /F/CCF /DP<> ID &3d2I>OY8 z_A EI endstream endobj 13 0 obj <>stream 0 0 0 0 49 54 d1 49 0 0 54 0 0 cm BI /IM true /W 49 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID &3.xOA ޗ?ޓ?|@ed?_Km-av!ma0d6|@ EI endstream endobj 14 0 obj <>stream 0 0 0 0 47 74 d1 47 0 0 74 0 0 cm BI /IM true /W 47 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &@h2@x 7O]?w_57 k d09c8p>@0{{r_^.a.+X0F@@@ EI endstream endobj 15 0 obj <>stream 0 0 0 0 37 72 d1 37 0 0 72 0 0 cm BI /IM true /W 37 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &}|>x EI endstream endobj 16 0 obj <>stream 0 0 0 0 90 70 d1 90 0 0 70 0 0 cm BI /IM true /W 90 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID & ON p  OOW@w]  EI endstream endobj 17 0 obj <>stream 0 0 0 0 51 54 d1 51 0 0 54 0 0 cm BI /IM true /W 51 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID &0̐.OC:I}'MWo~#v=>Ay *Xv]ip.+0a`8 EI endstream endobj 18 0 obj <>stream 0 0 0 0 43 52 d1 43 0 0 52 0 0 cm BI /IM true /W 43 /H 52 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Rp10:p&h EI endstream endobj 19 0 obj <>stream 0 0 0 0 46 72 d1 46 0 0 72 0 0 cm BI /IM true /W 46 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID 2}o5{{}Pv]iv0 %aa`d@ EI endstream endobj 20 0 obj <>stream 0 0 0 0 49 74 d1 49 0 0 74 0 0 cm BI /IM true /W 49 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &l^ oAoo&վook_zm/vKa+kk ,0Y  EI endstream endobj 21 0 obj <>stream 0 0 0 0 49 74 d1 49 0 0 74 0 0 cm BI /IM true /W 49 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &@1"!| A~~~ 8?A'AzOׯK:_K0Kb CD EI endstream endobj 22 0 obj <>stream 0 0 0 0 55 72 d1 55 0 0 72 0 0 cm BI /IM true /W 55 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &/IT&oo? EI endstream endobj 23 0 obj <>stream 0 0 0 0 14 44 d1 14 0 0 44 0 0 cm BI /IM true /W 14 /H 44 /BPC 1 /D[1 0] /F/CCF /DP<> ID &qO^~/|rj[ EI endstream endobj 24 0 obj <>stream 0 0 0 0 57 70 d1 57 0 0 70 0 0 cm BI /IM true /W 57 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID aMD' oA8>~^+qPA@@ EI endstream endobj 25 0 obj <>stream 0 0 0 0 67 70 d1 67 0 0 70 0 0 cm BI /IM true /W 67 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID %!KA@8pBq 'o~oo/~}/K𗄼 N"(PRR` EI endstream endobj 26 0 obj <>stream 0 0 0 -73 57 0 d1 57 0 0 73 0 -73 cm BI /IM true /W 57 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID *j)8l']4 axk   EI endstream endobj 27 0 obj <>stream 0 0 0 0 36 68 d1 36 0 0 68 0 0 cm BI /IM true /W 36 /H 68 /BPC 1 /D[1 0] /F/CCF /DP<> ID &AI==?A>IkG&  EI endstream endobj 28 0 obj <>stream 0 0 0 0 55 72 d1 55 0 0 72 0 0 cm BI /IM true /W 55 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID $7&~E?A>7~7Wzkv4J&VRjAd>  EI endstream endobj 29 0 obj <>stream 0 0 0 0 33 79 d1 33 0 0 79 0 0 cm BI /IM true /W 33 /H 79 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3?߿߿߿߿߿߿߿߿  EI endstream endobj 30 0 obj <>stream 0 0 0 0 80 50 d1 80 0 0 50 0 0 cm BI /IM true /W 80 /H 50 /BPC 1 /D[1 0] /F/CCF /DP<> ID &zN^{ޯ_Wz}^{^ߵo^ߵoħDgk@ EI endstream endobj 31 0 obj <>stream 0 0 0 0 13 14 d1 13 0 0 14 0 0 cm BI /IM true /W 13 /H 14 /BPC 1 /D[1 0] /F/CCF /DP<> ID &w&ma EI endstream endobj 32 0 obj <>stream 0 0 0 0 86 52 d1 86 0 0 52 0 0 cm BI /IM true /W 86 /H 52 /BPC 1 /D[1 0] /F/CCF /DP<> ID *Ȩ/QIA8l4z^D=Nt[O )50@@@ EI endstream endobj 33 0 obj <>stream 0 0 0 0 40 54 d1 40 0 0 54 0 0 cm BI /IM true /W 40 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID &༊_,w!ppO5 k `K,, -. Ud6Xj0 ,' EI endstream endobj 34 0 obj <>stream 0 0 0 0 26 73 d1 26 0 0 73 0 0 cm BI /IM true /W 26 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID 5_ EI endstream endobj 35 0 obj <>stream 0 0 0 0 57 52 d1 57 0 0 52 0 0 cm BI /IM true /W 57 /H 52 /BPC 1 /D[1 0] /F/CCF /DP<> ID *j)8l'] rt8k}2  EI endstream endobj 36 0 obj <>stream 0 0 0 0 55 74 d1 55 0 0 74 0 0 cm BI /IM true /W 55 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &A8er x'0o D~AI?MWvv]^a[v]!k G@ EI endstream endobj 37 0 obj <>stream 0 0 0 0 49 54 d1 49 0 0 54 0 0 cm BI /IM true /W 49 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID &4H.OD1^ &z_z_m߶ - lVXaal@ EI endstream endobj 38 0 obj <>stream 0 0 0 0 55 50 d1 55 0 0 50 0 0 cm BI /IM true /W 55 /H 50 /BPC 1 /D[1 0] /F/CCF /DP<> ID &\W{?׽/ׯ~^}zׯ^}zޗq)Ñ EI endstream endobj 39 0 obj <>stream 0 0 0 0 55 75 d1 55 0 0 75 0 0 cm BI /IM true /W 55 /H 75 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Af=XAO>OGAZ?OO_j .{^׆0^@ EI endstream endobj 40 0 obj <>stream 0 0 0 0 46 54 d1 46 0 0 54 0 0 cm BI /IM true /W 46 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID &]>=C ނoIҿ}/"F5_C v] c ,0Y  EI endstream endobj 41 0 obj <>stream 0 0 0 0 55 75 d1 55 0 0 75 0 0 cm BI /IM true /W 55 /H 75 /BPC 1 /D[1 0] /F/CCF /DP<> ID &f Hek)MD }?W~}ivkKW{^^^C@ EI endstream endobj 42 0 obj <>stream 0 0 0 0 48 5 d1 48 0 0 5 0 0 cm BI /IM true /W 48 /H 5 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 43 0 obj <>stream 0 0 0 0 26 71 d1 26 0 0 71 0 0 cm BI /IM true /W 26 /H 71 /BPC 1 /D[1 0] /F/CCF /DP<> ID 5_&ȿ EI endstream endobj 44 0 obj <>stream 0 0 0 0 52 50 d1 52 0 0 50 0 0 cm BI /IM true /W 52 /H 50 /BPC 1 /D[1 0] /F/CCF /DP<> ID &s!m-Km-Km-+kk~={D7W7^>q5@ EI endstream endobj 46 0 obj <>stream 0 0 0 -60 41 2 d1 41 0 0 62 0 -60 cm BI /IM true /W 41 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &bAp@N M}tuq_axav= - ! EI endstream endobj 47 0 obj <>stream 0 0 0 0 46 59 d1 46 0 0 59 0 0 cm BI /IM true /W 46 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4 Rj]ckfK޻w>~ EI endstream endobj 48 0 obj <>stream 0 0 0 15 40 19 d1 40 0 0 4 0 15 cm BI /IM true /W 40 /H 4 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 49 0 obj <>stream 0 0 0 0 39 59 d1 39 0 0 59 0 0 cm BI /IM true /W 39 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID )}t,*T;;{kȩUPR EI endstream endobj 50 0 obj <>stream 0 0 0 0 38 62 d1 38 0 0 62 0 0 cm BI /IM true /W 38 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &"E=}7o }|-, B|, KAh- 0Wrj?av^.ǿ C EI endstream endobj 51 0 obj <>stream 0 0 0 -59 44 0 d1 44 0 0 59 0 -59 cm BI /IM true /W 44 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID & ޿z^W7ޓ|@ EI endstream endobj 52 0 obj <>stream 0 0 0 0 37 59 d1 37 0 0 59 0 0 cm BI /IM true /W 37 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID h EI endstream endobj 53 0 obj <>stream 0 0 0 0 38 61 d1 38 0 0 61 0 0 cm BI /IM true /W 38 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID &bBՄzz]=| ~ EI endstream endobj 54 0 obj <>stream 0 0 0 0 37 59 d1 37 0 0 59 0 0 cm BI /IM true /W 37 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID hO@@ EI endstream endobj 55 0 obj <>stream 0 0 0 -59 38 0 d1 38 0 0 59 0 -59 cm BI /IM true /W 38 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4 gp#8xo}\.ȩ㪨PR0  EI endstream endobj 56 0 obj <>stream 0 0 0 0 46 59 d1 46 0 0 59 0 0 cm BI /IM true /W 46 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID &7  EI endstream endobj 57 0 obj <>stream 0 0 0 0 37 62 d1 37 0 0 62 0 0 cm BI /IM true /W 37 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Yh&KU~ mv5 ! EI endstream endobj 58 0 obj <>stream 0 0 0 0 38 59 d1 38 0 0 59 0 0 cm BI /IM true /W 38 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4 4  EI endstream endobj 59 0 obj <>stream 0 0 0 0 40 62 d1 40 0 0 62 0 0 cm BI /IM true /W 40 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &A"A4=====OO}?߿___k~]ح k , EI endstream endobj 60 0 obj <>stream 0 0 0 0 43 59 d1 43 0 0 59 0 0 cm BI /IM true /W 43 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4KKKKKKtK[J+ꦉ EI endstream endobj 61 0 obj <>stream 0 0 0 0 44 59 d1 44 0 0 59 0 0 cm BI /IM true /W 44 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4___ֽkֽkZX\Xp怏kEUT(R  EI endstream endobj 62 0 obj <>stream 0 0 0 0 34 59 d1 34 0 0 59 0 0 cm BI /IM true /W 34 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID MA ?Ip EI endstream endobj 63 0 obj <>stream 0 0 0 0 39 59 d1 39 0 0 59 0 0 cm BI /IM true /W 39 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID pW߿_Z륮YT*)` EI endstream endobj 64 0 obj <>stream 0 0 0 0 42 59 d1 42 0 0 59 0 0 cm BI /IM true /W 42 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3 DO7IMoSOp EI endstream endobj 65 0 obj <>stream 0 0 0 0 38 59 d1 38 0 0 59 0 0 cm BI /IM true /W 38 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 453_K___}}|@ EI endstream endobj 66 0 obj <>stream 0 0 0 0 46 59 d1 46 0 0 59 0 0 cm BI /IM true /W 46 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID &3>?[o}o}oI}+o&n EI endstream endobj 67 0 obj <>stream 0 0 0 0 35 59 d1 35 0 0 59 0 0 cm BI /IM true /W 35 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4 #w恕  EI endstream endobj 68 0 obj <>stream 0 0 0 0 48 59 d1 48 0 0 59 0 0 cm BI /IM true /W 48 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID ' 5M.-Kn^m}-_޻Km~z?=>h>z_MW}7z_p EI endstream endobj 69 0 obj <>stream 0 0 0 0 40 59 d1 40 0 0 59 0 0 cm BI /IM true /W 40 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID N v߽߽߽߽  EI endstream endobj 70 0 obj <>stream 0 0 0 0 40 71 d1 40 0 0 71 0 0 cm BI /IM true /W 40 /H 71 /BPC 1 /D[1 0] /F/CCF /DP<> ID &\ZzOO]#L'XOOOOOD17޿Oc5__߶av+k  EI endstream endobj 71 0 obj <> endobj 72 0 obj <> endobj 76 0 obj <>endobj 77 0 obj <>stream 0 0 0 -61 19 11 d1 19 0 0 72 0 -61 cm BI /IM true /W 19 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &_Z___j{@ EI endstream endobj 78 0 obj <>stream 0 0 0 -61 19 11 d1 19 0 0 72 0 -61 cm BI /IM true /W 19 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3 To߽߿߿__^KK  EI endstream endobj 79 0 obj <>stream 0 0 0 0 49 59 d1 49 0 0 59 0 0 cm BI /IM true /W 49 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID & WY_W_]޾ EI endstream endobj 80 0 obj <>stream 0 0 0 -59 34 0 d1 34 0 0 59 0 -59 cm BI /IM true /W 34 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID &%??MnGA) EI endstream endobj 81 0 obj <> endobj 82 0 obj <> endobj 86 0 obj <>endobj 87 0 obj <>stream 0 0 0 -60 37 0 d1 37 0 0 60 0 -60 cm BI /IM true /W 37 /H 60 /BPC 1 /D[1 0] /F/CCF /DP<> ID MQ8e[oooooooo}߽{^ .a.>k ,Yx EI endstream endobj 88 0 obj <>stream 0 0 0 0 37 63 d1 37 0 0 63 0 0 cm BI /IM true /W 37 /H 63 /BPC 1 /D[1 0] /F/CCF /DP<> ID &"BOGEtOW}aqK\0 EI endstream endobj 89 0 obj <>stream 0 0 0 0 37 61 d1 37 0 0 61 0 0 cm BI /IM true /W 37 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID a1? EI endstream endobj 90 0 obj <>stream 0 0 0 0 36 57 d1 36 0 0 57 0 0 cm BI /IM true /W 36 /H 57 /BPC 1 /D[1 0] /F/CCF /DP<> ID &F\]k#j EI endstream endobj 91 0 obj <>stream 0 0 0 0 38 47 d1 38 0 0 47 0 0 cm BI /IM true /W 38 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &bCO==>t zO}?د~5k~Kح0€ EI endstream endobj 92 0 obj <>stream 0 0 0 0 35 45 d1 35 0 0 45 0 0 cm BI /IM true /W 35 /H 45 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3?ok EI endstream endobj 93 0 obj <>stream 0 0 0 0 37 47 d1 37 0 0 47 0 0 cm BI /IM true /W 37 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Dd>OGK{~ܚS3gxkK ]l,Y @ EI endstream endobj 94 0 obj <>stream 0 0 0 0 35 62 d1 35 0 0 62 0 0 cm BI /IM true /W 35 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID & Zֿ'K_ EI endstream endobj 95 0 obj <>stream 0 0 0 0 44 44 d1 44 0 0 44 0 0 cm BI /IM true /W 44 /H 44 /BPC 1 /D[1 0] /F/CCF /DP<> ID (jmim^im[iml}mmo4ޓޕޓzMޓzMޯ EI endstream endobj 96 0 obj <>stream 0 0 0 0 37 62 d1 37 0 0 62 0 0 cm BI /IM true /W 37 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3 ==8΂MO_~+aT-0( EI endstream endobj 97 0 obj <>stream 0 0 0 0 33 47 d1 33 0 0 47 0 0 cm BI /IM true /W 33 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &y4 qpۙpA<& W20]Z#3 W_y &ᅃ EI endstream endobj 98 0 obj <> endobj 99 0 obj <> endobj 103 0 obj <>endobj 105 0 obj <>stream 0 0 0 -90 89 2 d1 89 0 0 92 0 -90 cm BI /IM true /W 89 /H 92 /BPC 1 /D[1 0] /F/CCF /DP<> ID &KDXC4< z)CA=z].K_]_>A kU O׿uv^mv 0 .xaa  dX6Hi*@ EI endstream endobj 106 0 obj <>stream 0 0 0 0 96 88 d1 96 0 0 88 0 0 cm BI /IM true /W 96 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID )/j2pU*ĺ_[ul}~rp1_׺m~^{uK/߯߯߭߭ EI endstream endobj 107 0 obj <>stream 0 0 0 17 60 29 d1 60 0 0 12 0 17 cm BI /IM true /W 60 /H 12 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 108 0 obj <>stream 0 0 0 -88 46 0 d1 46 0 0 88 0 -88 cm BI /IM true /W 46 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID &J$P7  EI endstream endobj 109 0 obj <>stream 0 0 0 0 100 88 d1 100 0 0 88 0 0 cm BI /IM true /W 100 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID #@k ]uuMB______}}}}FK_/K_/K//K/KK!4k_ EI endstream endobj 110 0 obj <>stream 0 0 0 0 88 88 d1 88 0 0 88 0 0 cm BI /IM true /W 88 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID &jQ4 ) EI endstream endobj 111 0 obj <>stream 0 0 0 0 77 88 d1 77 0 0 88 0 0 cm BI /IM true /W 77 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID &yP 6H4  EI endstream endobj 112 0 obj <>stream 0 0 0 0 80 88 d1 80 0 0 88 0 0 cm BI /IM true /W 80 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID ړT5{{{{{{~߷| EI endstream endobj 113 0 obj <>stream 0 0 0 0 81 88 d1 81 0 0 88 0 0 cm BI /IM true /W 81 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID &yP ޟʀo!O8 EI endstream endobj 115 0 obj <>stream 0 0 0 -44 43 0 d1 43 0 0 44 0 -44 cm BI /IM true /W 43 /H 44 /BPC 1 /D[1 0] /F/CCF /DP<> ID &޿޿|zW7~zWM EI endstream endobj 116 0 obj <>stream 0 0 0 0 42 47 d1 42 0 0 47 0 0 cm BI /IM true /W 42 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &g}pA|] O}?cMWߺk\{[Xa@@ EI endstream endobj 117 0 obj <>stream 0 0 0 0 41 66 d1 41 0 0 66 0 0 cm BI /IM true /W 41 /H 66 /BPC 1 /D[1 0] /F/CCF /DP<> ID Pr??8 EI endstream endobj 118 0 obj <>stream 0 0 0 0 40 63 d1 40 0 0 63 0 0 cm BI /IM true /W 40 /H 63 /BPC 1 /D[1 0] /F/CCF /DP<> ID &BuΧO&[aqȅ  EI endstream endobj 119 0 obj <>stream 0 0 0 -60 41 2 d1 41 0 0 62 0 -60 cm BI /IM true /W 41 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &bAz@zzu}sX ȣ!kUl^m{^]Xaah@ EI endstream endobj 120 0 obj <>stream 0 0 0 0 46 59 d1 46 0 0 59 0 0 cm BI /IM true /W 46 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID !y5_ukk__;k{__@ EI endstream endobj 121 0 obj <>stream 0 0 0 11 49 19 d1 49 0 0 8 0 11 cm BI /IM true /W 49 /H 8 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 122 0 obj <>stream 0 0 0 -59 36 0 d1 36 0 0 59 0 -59 cm BI /IM true /W 36 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 9 ?  EI endstream endobj 123 0 obj <>stream 0 0 0 0 36 45 d1 36 0 0 45 0 0 cm BI /IM true /W 36 /H 45 /BPC 1 /D[1 0] /F/CCF /DP<> ID !_PkړP ( EI endstream endobj 124 0 obj <>stream 0 0 0 0 38 57 d1 38 0 0 57 0 0 cm BI /IM true /W 38 /H 57 /BPC 1 /D[1 0] /F/CCF /DP<> ID &k_uޢ?j EI endstream endobj 125 0 obj <>stream 0 0 0 0 41 47 d1 41 0 0 47 0 0 cm BI /IM true /W 41 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &D3>Z滄?ɪ~ʋcc׃^Cad=p EI endstream endobj 126 0 obj <>stream 0 0 0 0 40 61 d1 40 0 0 61 0 0 cm BI /IM true /W 40 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID & ZF]u@ EI endstream endobj 127 0 obj <>stream 0 0 0 0 37 44 d1 37 0 0 44 0 0 cm BI /IM true /W 37 /H 44 /BPC 1 /D[1 0] /F/CCF /DP<> ID A5Ooooooooo  EI endstream endobj 128 0 obj <>stream 0 0 0 0 42 47 d1 42 0 0 47 0 0 cm BI /IM true /W 42 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &1 0@뮺ȋP'> UKk @ EI endstream endobj 129 0 obj <>stream 0 0 0 -61 23 11 d1 23 0 0 72 0 -61 cm BI /IM true /W 23 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &KK__/MS߿߿߿߽߽o~@ EI endstream endobj 130 0 obj <>stream 0 0 0 0 22 72 d1 22 0 0 72 0 0 cm BI /IM true /W 22 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID '5O߽߿߿KKz׭z EI endstream endobj 131 0 obj <>stream 0 0 0 0 72 70 d1 72 0 0 70 0 0 cm BI /IM true /W 72 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID %ɩ@i_i[s_io__i߱_oP EI endstream endobj 132 0 obj <>stream 0 0 0 0 45 50 d1 45 0 0 50 0 0 cm BI /IM true /W 45 /H 50 /BPC 1 /D[1 0] /F/CCF /DP<> ID 5D.kooooo~߷}@ EI endstream endobj 133 0 obj <>stream 0 0 0 -72 65 2 d1 65 0 0 74 0 -72 cm BI /IM true /W 65 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Hx@S@t=z믮_2@ɪ _]^mva])ج0X`d 4"  EI endstream endobj 134 0 obj <>stream 0 0 0 0 55 72 d1 55 0 0 72 0 0 cm BI /IM true /W 55 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &旄oo{?׿{B}z߾~_׫}z^z_׭~^y!qDq EI endstream endobj 135 0 obj <>stream 0 0 0 0 95 88 d1 95 0 0 88 0 0 cm BI /IM true /W 95 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID )Avj ÇMB߆ ~߿߿~__//_K/ xK^A# )LH` EI endstream endobj 136 0 obj <>stream 0 0 0 -45 36 2 d1 36 0 0 47 0 -45 cm BI /IM true /W 36 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &^F#2L'p/|.?,AEx\%]h.B\AAUd3ɪF~?  EI endstream endobj 137 0 obj <>stream 0 0 0 0 43 45 d1 43 0 0 45 0 0 cm BI /IM true /W 43 /H 45 /BPC 1 /D[1 0] /F/CCF /DP<> ID '"rkk4D?Ԛ0 EI endstream endobj 138 0 obj <>stream 0 0 0 0 41 45 d1 41 0 0 45 0 0 cm BI /IM true /W 41 /H 45 /BPC 1 /D[1 0] /F/CCF /DP<> ID >!iG\J}'jMB&@ EI endstream endobj 139 0 obj <>stream 0 0 0 0 35 46 d1 35 0 0 46 0 0 cm BI /IM true /W 35 /H 46 /BPC 1 /D[1 0] /F/CCF /DP<> ID & ˥uH>  EI endstream endobj 140 0 obj <>stream 0 0 0 0 35 61 d1 35 0 0 61 0 0 cm BI /IM true /W 35 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID &5f>t{@ EI endstream endobj 141 0 obj <>stream 0 0 0 0 40 47 d1 40 0 0 47 0 0 cm BI /IM true /W 40 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &/ ]tk!?AQ5F`mil0V @ EI endstream endobj 142 0 obj <>stream 0 0 0 0 32 45 d1 32 0 0 45 0 0 cm BI /IM true /W 32 /H 45 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3(jPefk{Rj  EI endstream endobj 143 0 obj <>stream 0 0 0 0 42 61 d1 42 0 0 61 0 0 cm BI /IM true /W 42 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID &8f!}߿^?i߿W߿W޿z7U6  EI endstream endobj 144 0 obj <>stream 0 0 0 -61 37 2 d1 37 0 0 63 0 -61 cm BI /IM true /W 37 /H 63 /BPC 1 /D[1 0] /F/CCF /DP<> ID &A^A8S: =7O^׿}ַ߭JULX`  EI endstream endobj 145 0 obj <>stream 0 0 0 0 35 47 d1 35 0 0 47 0 0 cm BI /IM true /W 35 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Y:ִjC ='zׯ??m c a EI endstream endobj 146 0 obj <>stream 0 0 0 -61 17 11 d1 17 0 0 72 0 -61 cm BI /IM true /W 17 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID f' EI endstream endobj 147 0 obj <>stream 0 0 0 -61 18 11 d1 18 0 0 72 0 -61 cm BI /IM true /W 18 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID MD? EI endstream endobj 148 0 obj <>stream 0 0 0 -73 39 0 d1 39 0 0 73 0 -73 cm BI /IM true /W 39 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID A?ɨxME' !qkaxk ` EI endstream endobj 149 0 obj <>stream 0 0 0 -70 28 0 d1 28 0 0 70 0 -70 cm BI /IM true /W 28 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID 5O# EI endstream endobj 150 0 obj <>stream 0 0 0 -73 24 15 d1 24 0 0 88 0 -73 cm BI /IM true /W 24 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID & XZւ׭/ׯ׭^?MW}}{@ EI endstream endobj 151 0 obj <>stream 0 0 0 -73 24 15 d1 24 0 0 88 0 -73 cm BI /IM true /W 24 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID 0w&=o߿_K^҈UP@@ EI endstream endobj 152 0 obj <>stream 0 0 0 -72 46 -27 d1 46 0 0 45 0 -72 cm BI /IM true /W 46 /H 45 /BPC 1 /D[1 0] /F/CCF /DP<> ID &3=>A>xMM`aXaaXaax 3xKa,0ÓTX}X|q׿ EI endstream endobj 153 0 obj <>stream 0 0 0 -56 61 -4 d1 61 0 0 52 0 -56 cm BI /IM true /W 61 /H 52 /BPC 1 /D[1 0] /F/CCF /DP<> ID &`XX,, X @@`  Ap<<<x```axx<  EI endstream endobj 154 0 obj <>stream 0 0 0 -70 26 -43 d1 26 0 0 27 0 -70 cm BI /IM true /W 26 /H 27 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3 @ EI endstream endobj 155 0 obj <>stream 0 0 0 0 55 72 d1 55 0 0 72 0 0 cm BI /IM true /W 55 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &!? xAA~A}'~''U]]ov׵aVk`e EI endstream endobj 156 0 obj <>stream 0 0 0 -88 83 0 d1 83 0 0 88 0 -88 cm BI /IM true /W 83 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID *A5 T'?g}@W ~߿^z^Jb(PR@ EI endstream endobj 157 0 obj <>stream 0 0 0 0 96 88 d1 96 0 0 88 0 0 cm BI /IM true /W 96 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID __Zj '///////___KKK%\W `0||~o___K^J18PNA EI endstream endobj 158 0 obj <>stream 0 0 0 0 95 92 d1 95 0 0 92 0 0 cm BI /IM true /W 95 /H 92 /BPC 1 /D[1 0] /F/CCF /DP<> ID &FPC0_< xDG@ސaސoII_Jo_V_ɪ_w[[um[a-`,5   !  EI endstream endobj 159 0 obj <>stream 0 0 0 0 99 90 d1 99 0 0 90 0 0 cm BI /IM true /W 99 /H 90 /BPC 1 /D[1 0] /F/CCF /DP<> ID &DdXxA?@lAOM?__>8 EI endstream endobj 160 0 obj <>stream 0 0 0 -90 85 2 d1 85 0 0 92 0 -90 cm BI /IM true /W 85 /H 92 /BPC 1 /D[1 0] /F/CCF /DP<> ID &FdXC4WxALxDoA}&'ҿ}/VԂ_5_ mmwo]]]l.aa  dL4Hi*@ EI endstream endobj 161 0 obj <>stream 0 0 0 -59 39 0 d1 39 0 0 59 0 -59 cm BI /IM true /W 39 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID $_@pp|' K,uUB EI endstream endobj 162 0 obj <>stream 0 0 0 0 40 62 d1 40 0 0 62 0 0 cm BI /IM true /W 40 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &0yL }'A./ uS>cԚw]dB.D5 EI endstream endobj 163 0 obj <>stream 0 0 0 0 34 45 d1 34 0 0 45 0 0 cm BI /IM true /W 34 /H 45 /BPC 1 /D[1 0] /F/CCF /DP<> ID $ޡaA1!oxrj@@ EI endstream endobj 164 0 obj <>stream 0 0 0 0 36 46 d1 36 0 0 46 0 0 cm BI /IM true /W 36 /H 46 /BPC 1 /D[1 0] /F/CCF /DP<> ID &LyA:}t@ EI endstream endobj 165 0 obj <>stream 0 0 0 0 40 62 d1 40 0 0 62 0 0 cm BI /IM true /W 40 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID !_ȑ#==8Nﮭo}WR[XjMC8( EI endstream endobj 166 0 obj <>stream 0 0 0 -45 36 2 d1 36 0 0 47 0 -45 cm BI /IM true /W 36 /H 47 /BPC 1 /D[1 0] /F/CCF /DP<> ID &y:ֵ}p=|Wܚ[av{X0P EI endstream endobj 167 0 obj <>stream 0 0 0 -60 40 -22 d1 40 0 0 38 0 -60 cm BI /IM true /W 40 /H 38 /BPC 1 /D[1 0] /F/CCF /DP<> ID &/>B|<.}𘌚aXaaxAN0-X}X|q EI endstream endobj 168 0 obj <>stream 0 0 0 -15 17 12 d1 17 0 0 27 0 -15 cm BI /IM true /W 17 /H 27 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4ɪ{@ EI endstream endobj 169 0 obj <>stream 0 0 0 0 34 44 d1 34 0 0 44 0 0 cm BI /IM true /W 34 /H 44 /BPC 1 /D[1 0] /F/CCF /DP<> ID Toooooooooo(K EI endstream endobj 170 0 obj <>stream 0 0 0 -45 37 18 d1 37 0 0 63 0 -45 cm BI /IM true /W 37 /H 63 /BPC 1 /D[1 0] /F/CCF /DP<> ID &^MG|>? }>}>ֈoA='5_kmv\wk "j  EI endstream endobj 171 0 obj <>stream 0 0 0 -11 19 13 d1 19 0 0 24 0 -11 cm BI /IM true /W 19 /H 24 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Jz.<7{߀ EI endstream endobj 172 0 obj <>stream 0 0 0 0 57 73 d1 57 0 0 73 0 0 cm BI /IM true /W 57 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID &/Ȕ!KK//KKK^׿~߆~߷~ߐE@ EI endstream endobj 173 0 obj <>stream 0 0 0 0 73 92 d1 73 0 0 92 0 0 cm BI /IM true /W 73 /H 92 /BPC 1 /D[1 0] /F/CCF /DP<> ID &` Wk L 6>oM__޿k idJ` X%K Aiu\r2X(FAAB]jm{] `}ʐHd x2L H4@ EI endstream endobj 174 0 obj <>stream 0 0 0 0 88 88 d1 88 0 0 88 0 0 cm BI /IM true /W 88 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID &kQzzOz7zWޕ^zOzW}>^zWzMq"  EI endstream endobj 175 0 obj <>stream 0 0 0 0 44 61 d1 44 0 0 61 0 0 cm BI /IM true /W 44 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID &30}}~^O^^C__WoK~'S EI endstream endobj 176 0 obj <>stream 0 0 0 -61 36 0 d1 36 0 0 61 0 -61 cm BI /IM true /W 36 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID !}_Pk  EI endstream endobj 177 0 obj <>stream 0 0 0 -61 35 0 d1 35 0 0 61 0 -61 cm BI /IM true /W 35 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3?okX EI endstream endobj 178 0 obj <>stream 0 0 0 0 79 88 d1 79 0 0 88 0 0 cm BI /IM true /W 79 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID *@5 T) tc  EI endstream endobj 179 0 obj <>stream 0 0 0 0 37 61 d1 37 0 0 61 0 0 cm BI /IM true /W 37 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID &IP5 EI endstream endobj 180 0 obj <>stream 0 0 0 -72 51 2 d1 51 0 0 74 0 -72 cm BI /IM true /W 51 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &$:K8#7^}?Ԛgֵ Y 0KXAhH(r0(. *W^Arc&k x`5 @C! EI endstream endobj 181 0 obj <> endobj 182 0 obj <> endobj 186 0 obj <>endobj 187 0 obj <>stream 0 0 0 -59 40 0 d1 40 0 0 59 0 -59 cm BI /IM true /W 40 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID ( }_]_X__ EI endstream endobj 188 0 obj <>stream 0 0 0 -60 38 2 d1 38 0 0 62 0 -60 cm BI /IM true /W 38 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Y+-kZ)A_&[ .K`d4  EI endstream endobj 189 0 obj <>stream 0 0 0 -61 21 11 d1 21 0 0 72 0 -61 cm BI /IM true /W 21 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID ( . EI endstream endobj 190 0 obj <>stream 0 0 0 0 21 72 d1 21 0 0 72 0 0 cm BI /IM true /W 21 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &? EI endstream endobj 191 0 obj <>stream 0 0 0 0 41 61 d1 41 0 0 61 0 0 cm BI /IM true /W 41 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID !/]/].Ҿ+꺻 =@ EI endstream endobj 192 0 obj <>stream 0 0 0 -26 22 -18 d1 22 0 0 8 0 -26 cm BI /IM true /W 22 /H 8 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 193 0 obj <>stream 0 0 0 0 37 62 d1 37 0 0 62 0 0 cm BI /IM true /W 37 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID & ACr@Ooalw k``@ EI endstream endobj 194 0 obj <>stream 0 0 0 -12 15 12 d1 15 0 0 24 0 -12 cm BI /IM true /W 15 /H 24 /BPC 1 /D[1 0] /F/CCF /DP<> ID >+U߿~  EI endstream endobj 195 0 obj <>stream 0 0 0 0 38 61 d1 38 0 0 61 0 0 cm BI /IM true /W 38 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID 3 K].K^n= EI endstream endobj 196 0 obj <>stream 0 0 0 0 42 44 d1 42 0 0 44 0 0 cm BI /IM true /W 42 /H 44 /BPC 1 /D[1 0] /F/CCF /DP<> ID &@b޿[~[}o߫}+@ EI endstream endobj 197 0 obj <>stream 0 0 0 -72 63 2 d1 63 0 0 74 0 -72 cm BI /IM true /W 63 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &N W. ޓ7Oޗ~/ k=׿ow׵]]a B  $ EI endstream endobj 198 0 obj <>stream 0 0 0 -30 25 -22 d1 25 0 0 8 0 -30 cm BI /IM true /W 25 /H 8 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 199 0 obj <>stream 0 0 0 -70 58 0 d1 58 0 0 70 0 -70 cm BI /IM true /W 58 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID aMD' AG' _@ EI endstream endobj 200 0 obj <>stream 0 0 0 -73 23 13 d1 23 0 0 86 0 -73 cm BI /IM true /W 23 /H 86 /BPC 1 /D[1 0] /F/CCF /DP<> ID ! EI endstream endobj 201 0 obj <>stream 0 0 0 -73 23 13 d1 23 0 0 86 0 -73 cm BI /IM true /W 23 /H 86 /BPC 1 /D[1 0] /F/CCF /DP<> ID   EI endstream endobj 202 0 obj <>stream 0 0 0 -44 61 -16 d1 61 0 0 28 0 -44 cm BI /IM true /W 61 /H 28 /BPC 1 /D[1 0] /F/CCF /DP<> ID PZɐo  EI endstream endobj 203 0 obj <>stream 0 0 0 -42 20 13 d1 20 0 0 55 0 -42 cm BI /IM true /W 20 /H 55 /BPC 1 /D[1 0] /F/CCF /DP<> ID &zz.<7{ zz EI endstream endobj 204 0 obj <>stream 0 0 0 -70 76 2 d1 76 0 0 72 0 -70 cm BI /IM true /W 76 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &X|J0j&___}}~C__///////_//////댆Z}` EI endstream endobj 205 0 obj <>stream 0 0 0 0 73 72 d1 73 0 0 72 0 0 cm BI /IM true /W 73 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &H0D 6B ==z5ȣ>8@ EI endstream endobj 206 0 obj <>stream 0 0 0 0 57 70 d1 57 0 0 70 0 0 cm BI /IM true /W 57 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID 5O!kFo  EI endstream endobj 207 0 obj <>stream 0 0 0 -70 70 0 d1 70 0 0 70 0 -70 cm BI /IM true /W 70 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID @MD'@///////////_KKDB8~߇o_|%y/U @ EI endstream endobj 208 0 obj <>stream 0 0 0 -82 94 0 d1 94 0 0 82 0 -82 cm BI /IM true /W 94 /H 82 /BPC 1 /D[1 0] /F/CCF /DP<> ID aj ]uP______ __~__~__~_~~_____}}}}}A kZ@ EI endstream endobj 209 0 obj <>stream 0 0 0 0 83 86 d1 83 0 0 86 0 0 cm BI /IM true /W 83 /H 86 /BPC 1 /D[1 0] /F/CCF /DP<> ID &SdHC,=I@ zOA=./]z_!?Y5jokk `v I=  E@@@ EI endstream endobj 210 0 obj <>stream 0 0 0 0 90 82 d1 90 0 0 82 0 0 cm BI /IM true /W 90 /H 82 /BPC 1 /D[1 0] /F/CCF /DP<> ID *&NE@K.o]߯٠]v׮^kz]_~~~@@ EI endstream endobj 211 0 obj <>stream 0 0 0 15 56 27 d1 56 0 0 12 0 15 cm BI /IM true /W 56 /H 12 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 212 0 obj <>stream 0 0 0 -84 80 2 d1 80 0 0 86 0 -84 cm BI /IM true /W 80 /H 86 /BPC 1 /D[1 0] /F/CCF /DP<> ID &j  < x z* oAoI~Wҿ}+Zj'~k]aH' { ,)"@DZl EI endstream endobj 213 0 obj <>stream 0 0 0 0 89 82 d1 89 0 0 82 0 0 cm BI /IM true /W 89 /H 82 /BPC 1 /D[1 0] /F/CCF /DP<> ID %F P/___K}/ y } ? oK𗄼7xADUB+  EI endstream endobj 214 0 obj <>stream 0 0 0 0 75 82 d1 75 0 0 82 0 0 cm BI /IM true /W 75 /H 82 /BPC 1 /D[1 0] /F/CCF /DP<> ID MBr 4 _6O?lҟ@ EI endstream endobj 215 0 obj <>stream 0 0 0 0 82 82 d1 82 0 0 82 0 0 cm BI /IM true /W 82 /H 82 /BPC 1 /D[1 0] /F/CCF /DP<> ID &3)? EI endstream endobj 216 0 obj <>stream 0 0 0 0 89 86 d1 89 0 0 86 0 0 cm BI /IM true /W 89 /H 86 /BPC 1 /D[1 0] /F/CCF /DP<> ID &k I, P A&oI/V_Jo_Kw_Km{Km-[ % ؅  A^A EI endstream endobj 217 0 obj <>stream 0 0 0 0 74 82 d1 74 0 0 82 0 0 cm BI /IM true /W 74 /H 82 /BPC 1 /D[1 0] /F/CCF /DP<> ID !_  t EI endstream endobj 218 0 obj <>stream 0 0 0 0 43 82 d1 43 0 0 82 0 0 cm BI /IM true /W 43 /H 82 /BPC 1 /D[1 0] /F/CCF /DP<> ID MBaHo EI endstream endobj 219 0 obj <>stream 0 0 0 0 103 88 d1 103 0 0 88 0 0 cm BI /IM true /W 103 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID &J!A EI endstream endobj 220 0 obj <>stream 0 0 0 -44 49 0 d1 49 0 0 44 0 -44 cm BI /IM true /W 49 /H 44 /BPC 1 /D[1 0] /F/CCF /DP<> ID &!HfޮWz?_q} EI endstream endobj 221 0 obj <> endobj 222 0 obj <> endobj 226 0 obj <>endobj 227 0 obj <>stream 0 0 0 -44 49 0 d1 49 0 0 44 0 -44 cm BI /IM true /W 49 /H 44 /BPC 1 /D[1 0] /F/CCF /DP<> ID & ÚkϬk~{z7w??  EI endstream endobj 228 0 obj <>stream 0 0 0 -57 61 -3 d1 61 0 0 54 0 -57 cm BI /IM true /W 61 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID &`XX,   ,,(ÃT  <<<0x0px<p EI endstream endobj 229 0 obj <>stream 0 0 0 -72 47 0 d1 47 0 0 72 0 -72 cm BI /IM true /W 47 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &j EI endstream endobj 230 0 obj <>stream 0 0 0 0 96 82 d1 96 0 0 82 0 0 cm BI /IM true /W 96 /H 82 /BPC 1 /D[1 0] /F/CCF /DP<> ID %?5AQ $ EI endstream endobj 231 0 obj <>stream 0 0 0 0 68 86 d1 68 0 0 86 0 0 cm BI /IM true /W 68 /H 86 /BPC 1 /D[1 0] /F/CCF /DP<> ID &\ #  7 _M}/X𵄰\ )(,h.X\% K\.A"DH((U L~:MUm}vmv^]!a}%a@bCA<]  EI endstream endobj 232 0 obj <>stream 0 0 0 -61 40 2 d1 40 0 0 63 0 -61 cm BI /IM true /W 40 /H 63 /BPC 1 /D[1 0] /F/CCF /DP<> ID &b@$8==8NxM^__WZk %UԆXac@ EI endstream endobj 233 0 obj <>stream 0 0 0 -12 10 0 d1 10 0 0 12 0 -12 cm BI /IM true /W 10 /H 12 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 234 0 obj <>stream 0 0 0 -42 15 12 d1 15 0 0 54 0 -42 cm BI /IM true /W 15 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID >+U߿~!_g EI endstream endobj 235 0 obj <>stream 0 0 0 -72 49 2 d1 49 0 0 74 0 -72 cm BI /IM true /W 49 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &39|< Gz77}?j[ivim[ X xA7z7ޓ7Ok~vim`mmaH EI endstream endobj 237 0 obj <>stream 0 0 0 -53 52 0 d1 52 0 0 53 0 -53 cm BI /IM true /W 52 /H 53 /BPC 1 /D[1 0] /F/CCF /DP<> ID $d[k][km[kmmmo_z}맢B}7ޓ}7ޓ~ޗޓ~ޗޓ~ EI endstream endobj 238 0 obj <>stream 0 0 0 -72 50 2 d1 50 0 0 74 0 -72 cm BI /IM true /W 50 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &4H.zxA#A}&o_on(iC (Aa5V߿߲C>}k߶k`v=a`Ȁ) EI endstream endobj 239 0 obj <>stream 0 0 0 -73 38 16 d1 38 0 0 89 0 -73 cm BI /IM true /W 38 /H 89 /BPC 1 /D[1 0] /F/CCF /DP<> ID &\-k\%X%eWɨ QXkp EI endstream endobj 240 0 obj <>stream 0 0 0 -73 38 16 d1 38 0 0 89 0 -73 cm BI /IM true /W 38 /H 89 /BPC 1 /D[1 0] /F/CCF /DP<> ID ( P7N~{_8xXZ %ֽ_륓Q¨( EI endstream endobj 241 0 obj <>stream 0 0 0 -70 46 2 d1 46 0 0 72 0 -70 cm BI /IM true /W 46 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &p! `ÝB8AAznnoP~a:iw] q\.\:4 EI endstream endobj 242 0 obj <> endobj 243 0 obj <> endobj 247 0 obj <>endobj 248 0 obj <>stream 0 0 0 -70 47 0 d1 47 0 0 70 0 -70 cm BI /IM true /W 47 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID &M.e~ EI endstream endobj 249 0 obj <> endobj 250 0 obj <> endobj 254 0 obj <>endobj 255 0 obj <>stream 0 0 0 -70 99 0 d1 99 0 0 70 0 -70 cm BI /IM true /W 99 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID &`M]?[OP}[Ko/K/'}_w_븑CA} EI endstream endobj 256 0 obj <>stream 0 0 0 0 123 88 d1 123 0 0 88 0 0 cm BI /IM true /W 123 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID #@5 h/eU_MW7__MWWS~~Pouw]@ EI endstream endobj 257 0 obj <>stream 0 0 0 -60 39 2 d1 39 0 0 62 0 -60 cm BI /IM true /W 39 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &"ww܆.<xV,/pKX\% @( ,as@ EI endstream endobj 258 0 obj <> endobj 259 0 obj <> endobj 263 0 obj <>endobj 264 0 obj <> endobj 265 0 obj <> endobj 269 0 obj <>endobj 270 0 obj <>stream 0 0 0 0 103 88 d1 103 0 0 88 0 0 cm BI /IM true /W 103 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID kZדP@4!:^z^z^ץz^z^}z^z^]u]u*o߷?o7 ~o~߰oۉȐ  EI endstream endobj 271 0 obj <>stream 0 0 0 -88 90 0 d1 90 0 0 88 0 -88 cm BI /IM true /W 90 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID ; h;8.8pMBoo//_K𗄼^F/.7>T x7oK^ y^"B w` EI endstream endobj 272 0 obj <>stream 0 0 0 0 31 93 d1 31 0 0 93 0 0 cm BI /IM true /W 31 /H 93 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Ղ!nPAI!z[P EI endstream endobj 273 0 obj <>stream 0 0 0 -70 60 0 d1 60 0 0 70 0 -70 cm BI /IM true /W 60 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID % 8rj!8;*߇/ y+#\.o~߿߿_z^$ET(PP EI endstream endobj 274 0 obj <> endobj 275 0 obj <> endobj 279 0 obj <>endobj 280 0 obj <>stream 0 0 0 0 69 70 d1 69 0 0 70 0 0 cm BI /IM true /W 69 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Ijz^z^z^z^z^z^u]u]to0oo~o7?oF@ EI endstream endobj 281 0 obj <>stream 0 0 0 -72 69 2 d1 69 0 0 74 0 -72 cm BI /IM true /W 69 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &N xF^@MIoKJ}d~_zۮvm.m- lK 0+ ,0f  EI endstream endobj 282 0 obj <> endobj 283 0 obj <> endobj 287 0 obj <>endobj 288 0 obj <>stream 0 0 0 -59 40 2 d1 40 0 0 61 0 -59 cm BI /IM true /W 40 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID &A"B=====?^j/>stream 0 0 0 -46 42 -4 d1 42 0 0 42 0 -46 cm BI /IM true /W 42 /H 42 /BPC 1 /D[1 0] /F/CCF /DP<> ID &1%Xo` EI endstream endobj 290 0 obj <>stream 0 0 0 -59 40 8 d1 40 0 0 67 0 -59 cm BI /IM true /W 40 /H 67 /BPC 1 /D[1 0] /F/CCF /DP<> ID 4j EI endstream endobj 291 0 obj <>stream 0 0 0 -60 38 2 d1 38 0 0 62 0 -60 cm BI /IM true /W 38 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &bCz}A>}&}oV6J}?z5M/m~]v0Kkkk ,53  EI endstream endobj 292 0 obj <>stream 0 0 0 -61 61 0 d1 61 0 0 61 0 -61 cm BI /IM true /W 61 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID &f$P7MC(2@ EI endstream endobj 293 0 obj <>stream 0 0 0 -37 42 -13 d1 42 0 0 24 0 -37 cm BI /IM true /W 42 /H 24 /BPC 1 /D[1 0] /F/CCF /DP<> ID &+  EI endstream endobj 294 0 obj <>stream 0 0 0 -59 38 0 d1 38 0 0 59 0 -59 cm BI /IM true /W 38 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID $ EI endstream endobj 295 0 obj <> endobj 296 0 obj <> endobj 300 0 obj <>endobj 301 0 obj <>stream 0 0 0 0 66 70 d1 66 0 0 70 0 0 cm BI /IM true /W 66 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID & OOCOJս+oI+ҾI+ҿxA EI endstream endobj 302 0 obj <>stream 0 0 0 -59 42 0 d1 42 0 0 59 0 -59 cm BI /IM true /W 42 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID &@cĤ  EI endstream endobj 303 0 obj <>stream 0 0 0 -59 40 0 d1 40 0 0 59 0 -59 cm BI /IM true /W 40 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID !pw |7߽_-uYEuUU   EI endstream endobj 304 0 obj <> endobj 305 0 obj <> endobj 309 0 obj <>endobj 310 0 obj <>stream 0 0 0 -59 42 0 d1 42 0 0 59 0 -59 cm BI /IM true /W 42 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID ( ??@ EI endstream endobj 311 0 obj <>stream 0 0 0 -59 42 0 d1 42 0 0 59 0 -59 cm BI /IM true /W 42 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID C*{S EI endstream endobj 312 0 obj <>stream 0 0 0 -59 37 0 d1 37 0 0 59 0 -59 cm BI /IM true /W 37 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID $) E@ EI endstream endobj 313 0 obj <> endobj 314 0 obj <> endobj 318 0 obj <>endobj 319 0 obj <>stream 0 0 0 0 24 78 d1 24 0 0 78 0 0 cm BI /IM true /W 24 /H 78 /BPC 1 /D[1 0] /F/CCF /DP<> ID :;;}  EI endstream endobj 320 0 obj <>stream 0 0 0 -60 36 -22 d1 36 0 0 38 0 -60 cm BI /IM true /W 36 /H 38 /BPC 1 /D[1 0] /F/CCF /DP<> ID &!_OOxMMPxK < V ,0A< (GxAa[,5? EI endstream endobj 321 0 obj <> endobj 322 0 obj <> endobj 326 0 obj <>endobj 327 0 obj <>stream 0 0 0 -70 58 0 d1 58 0 0 70 0 -70 cm BI /IM true /W 58 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID 5W 87i?  EI endstream endobj 328 0 obj <>stream 0 0 0 -48 25 0 d1 25 0 0 48 0 -48 cm BI /IM true /W 25 /H 48 /BPC 1 /D[1 0] /F/CCF /DP<> ID &!?} EI endstream endobj 329 0 obj <>stream 0 0 0 0 31 48 d1 31 0 0 48 0 0 cm BI /IM true /W 31 /H 48 /BPC 1 /D[1 0] /F/CCF /DP<> ID &:\98zn~ɨ8.-xip.+ͥ!~? EI endstream endobj 330 0 obj <>stream 0 0 0 -59 39 2 d1 39 0 0 61 0 -59 cm BI /IM true /W 39 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID &"WQ.u0AnܚGtwK6\ e EI endstream endobj 331 0 obj <>stream 0 0 0 0 33 49 d1 33 0 0 49 0 0 cm BI /IM true /W 33 /H 49 /BPC 1 /D[1 0] /F/CCF /DP<> ID &J =zW~__5_׺uKuivج5a@@ EI endstream endobj 332 0 obj <> endobj 333 0 obj <> endobj 337 0 obj <>endobj 338 0 obj <> endobj 339 0 obj <> endobj 343 0 obj <>endobj 344 0 obj <>stream 0 0 0 -73 32 0 d1 32 0 0 73 0 -73 cm BI /IM true /W 32 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID / EI endstream endobj 345 0 obj <>stream 0 0 0 0 58 54 d1 58 0 0 54 0 0 cm BI /IM true /W 58 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID &\ < Fo@ޓ77?5_[im[Xam``d N  EI endstream endobj 346 0 obj <>stream 0 0 0 -73 27 13 d1 27 0 0 86 0 -73 cm BI /IM true /W 27 /H 86 /BPC 1 /D[1 0] /F/CCF /DP<> ID k R EI endstream endobj 347 0 obj <>stream 0 0 0 -73 28 13 d1 28 0 0 86 0 -73 cm BI /IM true /W 28 /H 86 /BPC 1 /D[1 0] /F/CCF /DP<> ID MB EI endstream endobj 348 0 obj <>stream 0 0 0 -47 61 -14 d1 61 0 0 33 0 -47 cm BI /IM true /W 61 /H 33 /BPC 1 /D[1 0] /F/CCF /DP<> ID d EI endstream endobj 349 0 obj <>stream 0 0 0 -72 59 2 d1 59 0 0 74 0 -72 cm BI /IM true /W 59 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &` HhzxOFޓ~ޕz__ɪu[]a0@ EI endstream endobj 350 0 obj <>stream 0 0 0 -73 66 0 d1 66 0 0 73 0 -73 cm BI /IM true /W 66 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID &_Y0\־׵xaxay EI endstream endobj 351 0 obj <>stream 0 0 0 0 32 73 d1 32 0 0 73 0 0 cm BI /IM true /W 32 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID /?5}==={} EI endstream endobj 352 0 obj <>stream 0 0 0 -33 30 -19 d1 30 0 0 14 0 -33 cm BI /IM true /W 30 /H 14 /BPC 1 /D[1 0] /F/CCF /DP<> ID @ EI endstream endobj 353 0 obj <> endobj 354 0 obj <> endobj 358 0 obj <>endobj 359 0 obj <>stream 0 0 0 0 44 44 d1 44 0 0 44 0 0 cm BI /IM true /W 44 /H 44 /BPC 1 /D[1 0] /F/CCF /DP<> ID :5&vu[kommozҽ[[o EI endstream endobj 360 0 obj <> endobj 361 0 obj <> endobj 365 0 obj <>endobj 366 0 obj <>stream 0 0 0 -59 44 0 d1 44 0 0 59 0 -59 cm BI /IM true /W 44 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID $_____J+wouGUP l EI endstream endobj 367 0 obj <>stream 0 0 0 -60 46 2 d1 46 0 0 62 0 -60 cm BI /IM true /W 46 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &A1!HKOβ /H5kIN4{:zOzO&__i{i}Xkz/~9ᅃ'  EI endstream endobj 368 0 obj <>stream 0 0 0 -45 42 -6 d1 42 0 0 39 0 -45 cm BI /IM true /W 42 /H 39 /BPC 1 /D[1 0] /F/CCF /DP<> ID &a`, X XA`aPPPpprk <<0x0< EI endstream endobj 369 0 obj <>stream 0 0 0 -45 42 -6 d1 42 0 0 39 0 -45 cm BI /IM true /W 42 /H 39 /BPC 1 /D[1 0] /F/CCF /DP<> ID 8Ã&<<0`ax,,X@A`a AB  EI endstream endobj 370 0 obj <> endobj 371 0 obj <> endobj 375 0 obj <>endobj 376 0 obj <> endobj 377 0 obj <> endobj 381 0 obj <>endobj 382 0 obj <>stream 0 0 0 -61 32 13 d1 32 0 0 74 0 -61 cm BI /IM true /W 32 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID & \<.a(Ww&}5 EI endstream endobj 383 0 obj <>stream 0 0 0 -61 32 13 d1 32 0 0 74 0 -61 cm BI /IM true /W 32 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID !prj>}Z Z]_k,UUA@@ EI endstream endobj 384 0 obj <> endobj 385 0 obj <> endobj 389 0 obj <>endobj 390 0 obj <>stream 0 0 0 -59 37 0 d1 37 0 0 59 0 -59 cm BI /IM true /W 37 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 0/O`_, EI endstream endobj 391 0 obj <>stream 0 0 0 -59 37 0 d1 37 0 0 59 0 -59 cm BI /IM true /W 37 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID 0/ EI endstream endobj 392 0 obj <>stream 0 0 0 -70 8 -43 d1 8 0 0 27 0 -70 cm BI /IM true /W 8 /H 27 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 393 0 obj <>stream 0 0 0 -42 10 0 d1 10 0 0 42 0 -42 cm BI /IM true /W 10 /H 42 /BPC 1 /D[1 0] /F/CCF /DP<> ID j7 EI endstream endobj 394 0 obj <>stream 0 0 0 0 95 112 d1 95 0 0 112 0 0 cm BI /IM true /W 95 /H 112 /BPC 1 /D[1 0] /F/CCF /DP<> ID &x`\.]u]]yV( d5 x AaH7 7zMWz^ޗWMW_ۭ״m- l4!aX0X0Y 5yN EI endstream endobj 395 0 obj <>stream 0 0 0 0 40 62 d1 40 0 0 62 0 0 cm BI /IM true /W 40 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &1#O__zTzl5{" .D3 EI endstream endobj 396 0 obj <> endobj 397 0 obj <> endobj 401 0 obj <>endobj 402 0 obj <>stream 0 0 0 0 96 88 d1 96 0 0 88 0 0 cm BI /IM true /W 96 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID &uʵ[}oV[}o[[}o[}o~[տ}n$L2@ EI endstream endobj 403 0 obj <>stream 0 0 0 -70 13 2 d1 13 0 0 72 0 -70 cm BI /IM true /W 13 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &w&ma@ EI endstream endobj 404 0 obj <>stream 0 0 0 -72 75 2 d1 75 0 0 74 0 -72 cm BI /IM true /W 75 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &ܜ6)XA5NZ VkIҮK}?4tޓ^\O__i{ m׺^^{C.ׯ7?_^v.Ǿ`d`iHeR  EI endstream endobj 405 0 obj <>stream 0 0 0 0 72 70 d1 72 0 0 70 0 0 cm BI /IM true /W 72 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID &N ?O^HO+I+&_[ҿ[ooJF\7  EI endstream endobj 406 0 obj <> endobj 407 0 obj <> endobj 411 0 obj <>endobj 412 0 obj <> endobj 413 0 obj <> endobj 417 0 obj <>endobj 418 0 obj <>stream 0 0 0 0 93 88 d1 93 0 0 88 0 0 cm BI /IM true /W 93 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID &  Y-m-n-ۯKmv봷]-m-Kbk߭-tKtOtHzMޓ}^Mzz^ޗzMޓq" EI endstream endobj 419 0 obj <> endobj 420 0 obj <> endobj 424 0 obj <>endobj 425 0 obj <> endobj 426 0 obj <> endobj 430 0 obj <>endobj 431 0 obj <>stream 0 0 0 -70 68 0 d1 68 0 0 70 0 -70 cm BI /IM true /W 68 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID *QL;un[im[um[inomk֖W}>Oz^ޗ}7MĈT_  EI endstream endobj 432 0 obj <>stream 0 0 0 -59 8 -36 d1 8 0 0 23 0 -59 cm BI /IM true /W 8 /H 23 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 434 0 obj <>stream 0 0 0 -52 65 0 d1 65 0 0 52 0 -52 cm BI /IM true /W 65 /H 52 /BPC 1 /D[1 0] /F/CCF /DP<> ID #W5)׿ᄸk]0j@ EI endstream endobj 435 0 obj <>stream 0 0 0 0 42 68 d1 42 0 0 68 0 0 cm BI /IM true /W 42 /H 68 /BPC 1 /D[1 0] /F/CCF /DP<> ID &<A!>?M!Lje81 EI endstream endobj 436 0 obj <>stream 0 0 0 0 29 83 d1 29 0 0 83 0 0 cm BI /IM true /W 29 /H 83 /BPC 1 /D[1 0] /F/CCF /DP<> ID )ƒww&!k  EI endstream endobj 437 0 obj <> endobj 438 0 obj <> endobj 442 0 obj <>endobj 443 0 obj <> endobj 444 0 obj <> endobj 448 0 obj <>endobj 449 0 obj <>stream 0 0 0 0 72 82 d1 72 0 0 82 0 0 cm BI /IM true /W 72 /H 82 /BPC 1 /D[1 0] /F/CCF /DP<> ID MBr 6  EI endstream endobj 450 0 obj <>stream 0 0 0 -82 77 0 d1 77 0 0 82 0 -82 cm BI /IM true /W 77 /H 82 /BPC 1 /D[1 0] /F/CCF /DP<> ID ! >q$| ?}/K/#%PBn  EI endstream endobj 451 0 obj <>stream 0 0 0 -59 42 0 d1 42 0 0 59 0 -59 cm BI /IM true /W 42 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID a>߿kar1UPAܐ߿KbAI0\@ EI endstream endobj 452 0 obj <> endobj 453 0 obj <> endobj 457 0 obj <>endobj 458 0 obj <> endobj 459 0 obj <> endobj 463 0 obj <>endobj 464 0 obj <>stream 0 0 0 -56 61 -4 d1 61 0 0 52 0 -56 cm BI /IM true /W 61 /H 52 /BPC 1 /D[1 0] /F/CCF /DP<> ID .`ÓT<<<x```a<X,,,X X X@A``aPPPA@@ EI endstream endobj 465 0 obj <> endobj 466 0 obj <> endobj 470 0 obj <>endobj 471 0 obj <> endobj 472 0 obj <> endobj 476 0 obj <>endobj 477 0 obj <>stream 0 0 0 0 22 23 d1 22 0 0 23 0 0 cm BI /IM true /W 22 /H 23 /BPC 1 /D[1 0] /F/CCF /DP<> ID >/ EI endstream endobj 478 0 obj <> endobj 479 0 obj <> endobj 483 0 obj <>endobj 484 0 obj <> endobj 485 0 obj <> endobj 489 0 obj <>endobj 490 0 obj <> endobj 491 0 obj <> endobj 495 0 obj <>endobj 496 0 obj <>stream 0 0 0 -74 8 23 d1 8 0 0 97 0 -74 cm BI /IM true /W 8 /H 97 /BPC 1 /D[1 0] /F/CCF /DP<> ID  EI endstream endobj 497 0 obj <> endobj 498 0 obj <> endobj 502 0 obj <>endobj 503 0 obj <> endobj 504 0 obj <> endobj 508 0 obj <>endobj 509 0 obj <>stream 0 0 0 0 138 88 d1 138 0 0 88 0 0 cm BI /IM true /W 138 /H 88 /BPC 1 /D[1 0] /F/CCF /DP<> ID &j cXiSt]~WOt]~]?B~ޛ}+zo龵_Jޛ}+uo}oҿ?KKoK鸑0Q  EI endstream endobj 510 0 obj <>stream 0 0 0 -90 58 0 d1 58 0 0 90 0 -90 cm BI /IM true /W 58 /H 90 /BPC 1 /D[1 0] /F/CCF /DP<> ID &(&  EI endstream endobj 511 0 obj <>stream 0 0 0 -59 38 0 d1 38 0 0 59 0 -59 cm BI /IM true /W 38 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID  族! EI endstream endobj 512 0 obj <> endobj 513 0 obj <> endobj 517 0 obj <>endobj 518 0 obj <>stream 0 0 0 -90 65 0 d1 65 0 0 90 0 -90 cm BI /IM true /W 65 /H 90 /BPC 1 /D[1 0] /F/CCF /DP<> ID MVAoooo I7{xa={$>/ַ߭VPҰ05 -Ȃ et@ EI endstream endobj 519 0 obj <>stream 0 0 0 -60 38 0 d1 38 0 0 60 0 -60 cm BI /IM true /W 38 /H 60 /BPC 1 /D[1 0] /F/CCF /DP<> ID Eu!X5 EI endstream endobj 520 0 obj <> endobj 521 0 obj <> endobj 525 0 obj <>endobj 526 0 obj <> endobj 527 0 obj <> endobj 531 0 obj <>endobj 532 0 obj <> endobj 533 0 obj <> endobj 537 0 obj <>endobj 538 0 obj <>stream 0 0 0 -82 115 0 d1 115 0 0 82 0 -82 cm BI /IM true /W 115 /H 82 /BPC 1 /D[1 0] /F/CCF /DP<> ID aɨS0<7 }??___W____\l]  EI endstream endobj 539 0 obj <>stream 0 0 0 0 88 82 d1 88 0 0 82 0 0 cm BI /IM true /W 88 /H 82 /BPC 1 /D[1 0] /F/CCF /DP<> ID +R08p!0 ~߿_~~}/K/7xADB V EI endstream endobj 540 0 obj <> endobj 541 0 obj <> endobj 545 0 obj <>endobj 546 0 obj <> endobj 547 0 obj <> endobj 551 0 obj <>endobj 552 0 obj <>stream 0 0 0 0 49 59 d1 49 0 0 59 0 0 cm BI /IM true /W 49 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID &$$}әz߿_~? EI endstream endobj 553 0 obj <>stream 0 0 0 -56 46 0 d1 46 0 0 56 0 -56 cm BI /IM true /W 46 /H 56 /BPC 1 /D[1 0] /F/CCF /DP<> ID &P8A>oO׮ 5mpaa0`X <z`Ba8uk&a-0 EI endstream endobj 554 0 obj <>stream 0 0 0 -59 40 8 d1 40 0 0 67 0 -59 cm BI /IM true /W 40 /H 67 /BPC 1 /D[1 0] /F/CCF /DP<> ID &ֿ__kֿ___ֿ___ֿ___ֽkP EI endstream endobj 555 0 obj <> endobj 556 0 obj <> endobj 560 0 obj <>endobj 561 0 obj <>stream 0 0 0 -59 38 0 d1 38 0 0 59 0 -59 cm BI /IM true /W 38 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID & EI endstream endobj 562 0 obj <>stream 0 0 0 -60 39 2 d1 39 0 0 62 0 -60 cm BI /IM true /W 39 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &E}ϊ -Op@}}cׯ~]Ka[[[Xaa EI endstream endobj 563 0 obj <>stream 0 0 0 0 38 62 d1 38 0 0 62 0 0 cm BI /IM true /W 38 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &aHfrqς<&?Za,|W\.|>_pkHFC  EI endstream endobj 564 0 obj <>stream 0 0 0 0 37 61 d1 37 0 0 61 0 0 cm BI /IM true /W 37 /H 61 /BPC 1 /D[1 0] /F/CCF /DP<> ID &< qN#n߿~K4/ 뮺pC` EI endstream endobj 565 0 obj <>stream 0 0 0 -59 42 0 d1 42 0 0 59 0 -59 cm BI /IM true /W 42 /H 59 /BPC 1 /D[1 0] /F/CCF /DP<> ID &`_5sAI~~߿~~߿Ǿ@ EI endstream endobj 566 0 obj <>stream 0 0 0 -60 38 2 d1 38 0 0 62 0 -60 cm BI /IM true /W 38 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &A^C =={ Wޗqֶ҆ S40`Uo@ v=  ( EI endstream endobj 567 0 obj <>stream 0 0 0 -60 39 2 d1 39 0 0 62 0 -60 cm BI /IM true /W 39 /H 62 /BPC 1 /D[1 0] /F/CCF /DP<> ID &"BՂ$OuU^^a-Xauz:o7Oav %Y<@ EI endstream endobj 568 0 obj <> endobj 569 0 obj <> endobj 573 0 obj <>endobj 574 0 obj <>stream 0 0 0 0 93 84 d1 93 0 0 84 0 0 cm BI /IM true /W 93 /H 84 /BPC 1 /D[1 0] /F/CCF /DP<> ID &SPC0[<z===_&|'oվ}+[ȃ>8 EI endstream endobj 575 0 obj <> endobj 576 0 obj <> endobj 580 0 obj <>endobj 581 0 obj <>stream 0 0 0 0 116 105 d1 116 0 0 105 0 0 cm BI /IM true /W 116 /H 105 /BPC 1 /D[1 0] /F/CCF /DP<> ID "@&[o~][@4-z/Kt-K.{Kuد~ EI endstream endobj 582 0 obj <>stream 0 0 0 0 93 112 d1 93 0 0 112 0 0 cm BI /IM true /W 93 /H 112 /BPC 1 /D[1 0] /F/CCF /DP<> ID &k)# OZ"y O}>_&kjxk׃2  EI endstream endobj 583 0 obj <>stream 0 0 0 0 48 110 d1 48 0 0 110 0 0 cm BI /IM true /W 48 /H 110 /BPC 1 /D[1 0] /F/CCF /DP<> ID P_'L xOOOO{~kkk ,P EI endstream endobj 584 0 obj <>stream 0 0 0 0 63 100 d1 63 0 0 100 0 0 cm BI /IM true /W 63 /H 100 /BPC 1 /D[1 0] /F/CCF /DP<> ID &A$Aވ } ߿^eq?)&_ EI endstream endobj 585 0 obj <>stream 0 0 0 0 86 79 d1 86 0 0 79 0 0 cm BI /IM true /W 86 /H 79 /BPC 1 /D[1 0] /F/CCF /DP<> ID &ATXx@zoDGzM7ޓ}7zj_m~zKa- ,,,X EI endstream endobj 586 0 obj <>stream 0 0 0 0 98 77 d1 98 0 0 77 0 0 cm BI /IM true /W 98 /H 77 /BPC 1 /D[1 0] /F/CCF /DP<> ID &I0.Ii\5%㺉&[[[Xaa5PYz EI endstream endobj 587 0 obj <>stream 0 0 0 0 85 79 d1 85 0 0 79 0 0 cm BI /IM true /W 85 /H 79 /BPC 1 /D[1 0] /F/CCF /DP<> ID & d+>Ow0F~xU(/c22 F?ƽkK q]p`!fA\p EI endstream endobj 588 0 obj <>stream 0 0 0 0 48 110 d1 48 0 0 110 0 0 cm BI /IM true /W 48 /H 110 /BPC 1 /D[1 0] /F/CCF /DP<> ID P_ EI endstream endobj 589 0 obj <>stream 0 0 0 -105 97 0 d1 97 0 0 105 0 -105 cm BI /IM true /W 97 /H 105 /BPC 1 /D[1 0] /F/CCF /DP<> ID P~L@GɀCm@ EI endstream endobj 590 0 obj <>stream 0 0 0 0 87 75 d1 87 0 0 75 0 0 cm BI /IM true /W 87 /H 75 /BPC 1 /D[1 0] /F/CCF /DP<> ID #BɨR0@ntۭ.m-mwK߭KK_=={OoJ&ҽ&$\d EI endstream endobj 591 0 obj <>stream 0 0 0 0 92 107 d1 92 0 0 107 0 0 cm BI /IM true /W 92 /H 107 /BPC 1 /D[1 0] /F/CCF /DP<> ID !`MB`Q"? (}?M7__߿]^ %]EH-,P EI endstream endobj 592 0 obj <>stream 0 0 0 0 70 79 d1 70 0 0 79 0 0 cm BI /IM true /W 70 /H 79 /BPC 1 /D[1 0] /F/CCF /DP<> ID &A0)NMK)f!ûapԚ 9.@LpKKK\ 2H4P#a izd~m}v׆`v= S $@ EI endstream endobj 593 0 obj <>stream 0 0 0 0 77 70 d1 77 0 0 70 0 0 cm BI /IM true /W 77 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID g5#0"׺ۯ^unvk٘hׯu^zׯu^[~P EI endstream endobj 594 0 obj <>stream 0 0 0 0 50 52 d1 50 0 0 52 0 0 cm BI /IM true /W 50 /H 52 /BPC 1 /D[1 0] /F/CCF /DP<> ID &?E~k55 ,@ EI endstream endobj 595 0 obj <>stream 0 0 0 0 62 75 d1 62 0 0 75 0 0 cm BI /IM true /W 62 /H 75 /BPC 1 /D[1 0] /F/CCF /DP<> ID &h+ Ӌ5& Kxiq5{ _? EI endstream endobj 596 0 obj <>stream 0 0 0 0 65 52 d1 65 0 0 52 0 0 cm BI /IM true /W 65 /H 52 /BPC 1 /D[1 0] /F/CCF /DP<> ID &5$2j>O*C }!  EI endstream endobj 597 0 obj <>stream 0 0 0 0 54 54 d1 54 0 0 54 0 0 cm BI /IM true /W 54 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID &6H0<'BoD@G7O_ƣjvKl%[Xk ,0` ) EI endstream endobj 598 0 obj <>stream 0 0 0 0 47 54 d1 47 0 0 54 0 0 cm BI /IM true /W 47 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID &g)ܧnu}&c A\ kˆPPR4\",zY5U{]c}dhpd y EI endstream endobj 599 0 obj <>stream 0 0 0 0 45 73 d1 45 0 0 73 0 0 cm BI /IM true /W 45 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID &#QMaA^[kmqdA EI endstream endobj 600 0 obj <>stream 0 0 0 -72 71 2 d1 71 0 0 74 0 -72 cm BI /IM true /W 71 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &H D$ x@8@ zOKץ_? FUw]mw]]a  aA EI endstream endobj 601 0 obj <>stream 0 0 0 0 62 72 d1 62 0 0 72 0 0 cm BI /IM true /W 62 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID #`Q[ O%_4/W_]kK*T%“Pi ! EI endstream endobj 602 0 obj <>stream 0 0 0 0 58 54 d1 58 0 0 54 0 0 cm BI /IM true /W 58 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID &a"U%p r5_߲|>5k,rc^ q]u EI endstream endobj 603 0 obj <>stream 0 0 0 0 62 75 d1 62 0 0 75 0 0 cm BI /IM true /W 62 /H 75 /BPC 1 /D[1 0] /F/CCF /DP<> ID &41^eOD"$ǂ"~K5_]ovk h ? EI endstream endobj 604 0 obj <>stream 0 0 0 -70 36 9 d1 36 0 0 79 0 -70 cm BI /IM true /W 36 /H 79 /BPC 1 /D[1 0] /F/CCF /DP<> ID ({߿߿߿߿߿߿߿߿߿߿ EI endstream endobj 605 0 obj <>stream 0 0 0 -52 52 2 d1 52 0 0 54 0 -52 cm BI /IM true /W 52 /H 54 /BPC 1 /D[1 0] /F/CCF /DP<> ID &\ < !7 G7^]ɪA@]mxkc  ^ EI endstream endobj 606 0 obj <>stream 0 0 0 0 61 50 d1 61 0 0 50 0 0 cm BI /IM true /W 61 /H 50 /BPC 1 /D[1 0] /F/CCF /DP<> ID & +޿t}oo_~[}oȀ EI endstream endobj 607 0 obj <>stream 0 0 0 0 97 52 d1 97 0 0 52 0 0 cm BI /IM true /W 97 /H 52 /BPC 1 /D[1 0] /F/CCF /DP<> ID l_55 q״\0 ĈCҭ m5 MAad5>stream 0 0 0 0 66 73 d1 66 0 0 73 0 0 cm BI /IM true /W 66 /H 73 /BPC 1 /D[1 0] /F/CCF /DP<> ID #GMFkz_^z^]]uׯko7~o8O EI endstream endobj 609 0 obj <>stream 0 0 0 0 62 74 d1 62 0 0 74 0 0 cm BI /IM true /W 62 /H 74 /BPC 1 /D[1 0] /F/CCF /DP<> ID &$^DɔwþoM}?߿ ~]A?O~߿av?[%\0ai5 EI endstream endobj 610 0 obj <>stream 0 0 0 -70 62 0 d1 62 0 0 70 0 -70 cm BI /IM true /W 62 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID 0? EI endstream endobj 611 0 obj <>stream 0 0 0 -70 37 0 d1 37 0 0 70 0 -70 cm BI /IM true /W 37 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID F L EI endstream endobj 612 0 obj <>stream 0 0 0 0 61 72 d1 61 0 0 72 0 0 cm BI /IM true /W 61 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &D}oo~_^?_??b}>?OzOW?WwG EI endstream endobj 613 0 obj <>stream 0 0 0 -70 74 0 d1 74 0 0 70 0 -70 cm BI /IM true /W 74 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID &Q PO' OČ  EI endstream endobj 614 0 obj <>stream 0 0 0 -70 98 0 d1 98 0 0 70 0 -70 cm BI /IM true /W 98 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID *Sf`!O??_Io&o[I_VcF~ EI endstream endobj 615 0 obj <>stream 0 0 0 -70 79 2 d1 79 0 0 72 0 -70 cm BI /IM true /W 79 /H 72 /BPC 1 /D[1 0] /F/CCF /DP<> ID &C yXAT: _M___E#@ EI endstream endobj 616 0 obj <>stream 0 0 0 -70 83 0 d1 83 0 0 70 0 -70 cm BI /IM true /W 83 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID "Q#02`B, EI endstream endobj 617 0 obj <>stream 0 0 0 0 66 70 d1 66 0 0 70 0 0 cm BI /IM true /W 66 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID %QCp_`~/ ^Y @ EI endstream endobj 618 0 obj <>stream 0 0 0 -70 80 0 d1 80 0 0 70 0 -70 cm BI /IM true /W 80 /H 70 /BPC 1 /D[1 0] /F/CCF /DP<> ID *%]uQ______}}}}U____~__~__|W_____}}}}}Vk EI endstream endobj 619 0 obj <> endobj 620 0 obj <> endobj 621 0 obj <>stream x]n0D KJCYPC\08$O/^֞~yY~\?RK}[Fr;qkN/PF|FNcK6ysS鿡T3dW:]!fcv+l]S)Bd!r)R]! +D]3NY {kC' 8!`|6 8!`f'RF 8!`Lf'Of'-MBR`&VGFV!oBg>U*yUSƫ`UP*yk;DZ V%` VZ( V%owB`U&ZjyT:mU=_ EUk  u: q 7 PBF !7 b@.PQkt^ZF665F8 .deX;v7*e7ž{mƇ=ZfnU 5h endstream endobj 622 0 obj 529 endobj 433 0 obj <>/FontMatrix[1 0 0 1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 0/LastChar 64/Widths[ 727 462 602 703 752 602 838 602 337 1123 696 602 696 602 1107 867 602 602 602 602 602 602 602 602 602 602 872 776 699 380 462 667 727 648 380 762 596 699 563 776 527 699 727 636 563 430 854 699 648 699 365 609 581 1058 693 699 703 468 581 872 1107 872 945 752 914] /Subtype/Type3>> endobj 623 0 obj <>stream xeKn7 OdyI1tE,m8ɢ  >ϧ_~ӟ?{ic}.JGh#kmRi,SC{-8%oKwX]\˺rF,~X*^׈e]de˪,׈eM׈es5b~Xau=^9au]XzSXz}%VCS)qXz"KNթ+cu=XzCXz3VCoթL:N\c=$^Ɇջ6ͥ1sE'jLlIn@5&kLŽuϖ^ ;ֽZw{{_}/Y]֟r endstream endobj 624 0 obj 1522 endobj 10 0 obj <>/FontMatrix[1 0 0 1 0 0]/FontBBox[0 -17 1000 1000]/FirstChar 0/LastChar 255/Widths[ 667 644 644 636 636 1024 1024 1024 636 636 636 636 337 337 802 644 644 644 337 856 318 948 948 948 948 948 948 565 565 560 560 500 500 500 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 854 776 500 468 914 744 703 730 762 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 527 527 527 867 602 602 602 602 602 602 602 602 602 602 602 602 370 370 390 390 500 838 460 640 752 831 871 872 796 602 602 602 602 602 602 602 602 602 602 318 606 722 714 602 602 602 710 602 685 602 602 602 602 602 602 602 602 602 602 765 338 694 390 390 838 337 875 843 664 753 914 854 776 500 796 831 762 744 871 710 468 945 602 602 838 696 945 722 602 602 602 636 592 636 636 636 636 636 1028 1107 602 869 845 310 735 747 747 602 602 602 602 838 602 602 660 602 602 602 602 602 602 602 730 636 636 636 636 380 667 473 473 838 696 727 380 415 602 602 602 602 602 602 602 602 602 275 602 871 602 776 402 890 722 776 712 602] /Subtype/Type3>> endobj 236 0 obj <>/FontMatrix[0.001 0 0 0.001 0 0]/FontBBox[-182 -235 1287 928]/FirstChar 0/LastChar 0/Widths[ 0] /Subtype/Type3>> endobj 625 0 obj <> endobj 8 0 obj <>/FontMatrix[0.001 0 0 0.001 0 0]/FontBBox[-182 -235 1287 928]/FirstChar 0/LastChar 0/Widths[ 0] /Subtype/Type3>> endobj 626 0 obj <> endobj 114 0 obj <>/FontMatrix[0.001 0 0 0.001 0 0]/FontBBox[-18 -235 606 928]/FirstChar 0/LastChar 0/Widths[ 0] /Subtype/Type3>> endobj 627 0 obj <> endobj 45 0 obj <>/FontMatrix[0.001 0 0 0.001 0 0]/FontBBox[-4 -235 606 928]/FirstChar 0/LastChar 0/Widths[ 0] /Subtype/Type3>> endobj 628 0 obj <> endobj 104 0 obj <>/FontMatrix[0.001 0 0 0.001 0 0]/FontBBox[-185 -235 1361 939]/FirstChar 0/LastChar 0/Widths[ 0] /Subtype/Type3>> endobj 629 0 obj <> endobj 9 0 obj <> endobj 2 0 obj <>endobj xref 0 630 0000000000 65535 f 0000188272 00000 n 0000279308 00000 n 0000187838 00000 n 0000179612 00000 n 0000000015 00000 n 0000002398 00000 n 0000188320 00000 n 0000276003 00000 n 0000278071 00000 n 0000271166 00000 n 0000188361 00000 n 0000188573 00000 n 0000188799 00000 n 0000189042 00000 n 0000189305 00000 n 0000189520 00000 n 0000189793 00000 n 0000190042 00000 n 0000190254 00000 n 0000190498 00000 n 0000190748 00000 n 0000191011 00000 n 0000191247 00000 n 0000191445 00000 n 0000191679 00000 n 0000191930 00000 n 0000192166 00000 n 0000192387 00000 n 0000192636 00000 n 0000192856 00000 n 0000193109 00000 n 0000193288 00000 n 0000193539 00000 n 0000193782 00000 n 0000193985 00000 n 0000194209 00000 n 0000194478 00000 n 0000194717 00000 n 0000194941 00000 n 0000195195 00000 n 0000195436 00000 n 0000195685 00000 n 0000195849 00000 n 0000196056 00000 n 0000277036 00000 n 0000196288 00000 n 0000196533 00000 n 0000196759 00000 n 0000196926 00000 n 0000197143 00000 n 0000197392 00000 n 0000197621 00000 n 0000197804 00000 n 0000198015 00000 n 0000198203 00000 n 0000198413 00000 n 0000198613 00000 n 0000198838 00000 n 0000199029 00000 n 0000199264 00000 n 0000199484 00000 n 0000199703 00000 n 0000199900 00000 n 0000200114 00000 n 0000200327 00000 n 0000200535 00000 n 0000200758 00000 n 0000200947 00000 n 0000201189 00000 n 0000201398 00000 n 0000201643 00000 n 0000201673 00000 n 0000179780 00000 n 0000002418 00000 n 0000004872 00000 n 0000201723 00000 n 0000201765 00000 n 0000201982 00000 n 0000202199 00000 n 0000202439 00000 n 0000202646 00000 n 0000202678 00000 n 0000179950 00000 n 0000004893 00000 n 0000006865 00000 n 0000202708 00000 n 0000202750 00000 n 0000202976 00000 n 0000203204 00000 n 0000203405 00000 n 0000203610 00000 n 0000203833 00000 n 0000204031 00000 n 0000204258 00000 n 0000204461 00000 n 0000204687 00000 n 0000204905 00000 n 0000205134 00000 n 0000205166 00000 n 0000180120 00000 n 0000006886 00000 n 0000010934 00000 n 0000205196 00000 n 0000277648 00000 n 0000205239 00000 n 0000205534 00000 n 0000205793 00000 n 0000205964 00000 n 0000206179 00000 n 0000206458 00000 n 0000206681 00000 n 0000206899 00000 n 0000207145 00000 n 0000276606 00000 n 0000207378 00000 n 0000207594 00000 n 0000207819 00000 n 0000208022 00000 n 0000208245 00000 n 0000208485 00000 n 0000208707 00000 n 0000208875 00000 n 0000209073 00000 n 0000209267 00000 n 0000209471 00000 n 0000209698 00000 n 0000209901 00000 n 0000210102 00000 n 0000210325 00000 n 0000210546 00000 n 0000210761 00000 n 0000211006 00000 n 0000211223 00000 n 0000211497 00000 n 0000211746 00000 n 0000212019 00000 n 0000212256 00000 n 0000212464 00000 n 0000212673 00000 n 0000212875 00000 n 0000213085 00000 n 0000213313 00000 n 0000213508 00000 n 0000213738 00000 n 0000213960 00000 n 0000214178 00000 n 0000214370 00000 n 0000214568 00000 n 0000214797 00000 n 0000215005 00000 n 0000215236 00000 n 0000215468 00000 n 0000215724 00000 n 0000215974 00000 n 0000216158 00000 n 0000216410 00000 n 0000216665 00000 n 0000216941 00000 n 0000217233 00000 n 0000217500 00000 n 0000217792 00000 n 0000218000 00000 n 0000218238 00000 n 0000218431 00000 n 0000218629 00000 n 0000218843 00000 n 0000219062 00000 n 0000219302 00000 n 0000219490 00000 n 0000219693 00000 n 0000219941 00000 n 0000220135 00000 n 0000220377 00000 n 0000220696 00000 n 0000220949 00000 n 0000221176 00000 n 0000221376 00000 n 0000221580 00000 n 0000221809 00000 n 0000222016 00000 n 0000222294 00000 n 0000222329 00000 n 0000180294 00000 n 0000010956 00000 n 0000015421 00000 n 0000222386 00000 n 0000222429 00000 n 0000222637 00000 n 0000222869 00000 n 0000223060 00000 n 0000223253 00000 n 0000223462 00000 n 0000223633 00000 n 0000223859 00000 n 0000224046 00000 n 0000224260 00000 n 0000224477 00000 n 0000224748 00000 n 0000224919 00000 n 0000225142 00000 n 0000225338 00000 n 0000225541 00000 n 0000225723 00000 n 0000225932 00000 n 0000226198 00000 n 0000226450 00000 n 0000226660 00000 n 0000226914 00000 n 0000227186 00000 n 0000227472 00000 n 0000227726 00000 n 0000227897 00000 n 0000228184 00000 n 0000228449 00000 n 0000228679 00000 n 0000228899 00000 n 0000229186 00000 n 0000229413 00000 n 0000229623 00000 n 0000229869 00000 n 0000230094 00000 n 0000230129 00000 n 0000180468 00000 n 0000015443 00000 n 0000020893 00000 n 0000230160 00000 n 0000230203 00000 n 0000230433 00000 n 0000230681 00000 n 0000230902 00000 n 0000231140 00000 n 0000231450 00000 n 0000231668 00000 n 0000231840 00000 n 0000232042 00000 n 0000275774 00000 n 0000232319 00000 n 0000232562 00000 n 0000232834 00000 n 0000233075 00000 n 0000233315 00000 n 0000233562 00000 n 0000233597 00000 n 0000180642 00000 n 0000020915 00000 n 0000025102 00000 n 0000233641 00000 n 0000233684 00000 n 0000233907 00000 n 0000233942 00000 n 0000180816 00000 n 0000025124 00000 n 0000029750 00000 n 0000233973 00000 n 0000234016 00000 n 0000234305 00000 n 0000234601 00000 n 0000234844 00000 n 0000234879 00000 n 0000180990 00000 n 0000029772 00000 n 0000033710 00000 n 0000234910 00000 n 0000234953 00000 n 0000234988 00000 n 0000181156 00000 n 0000033732 00000 n 0000037537 00000 n 0000235019 00000 n 0000235062 00000 n 0000235343 00000 n 0000235628 00000 n 0000235856 00000 n 0000236112 00000 n 0000236147 00000 n 0000181330 00000 n 0000037559 00000 n 0000042314 00000 n 0000236178 00000 n 0000236221 00000 n 0000236479 00000 n 0000236754 00000 n 0000236789 00000 n 0000181504 00000 n 0000042336 00000 n 0000047327 00000 n 0000236820 00000 n 0000236863 00000 n 0000237075 00000 n 0000237276 00000 n 0000237498 00000 n 0000237743 00000 n 0000237954 00000 n 0000238136 00000 n 0000238330 00000 n 0000238365 00000 n 0000181678 00000 n 0000047349 00000 n 0000052180 00000 n 0000238396 00000 n 0000238439 00000 n 0000238678 00000 n 0000238881 00000 n 0000239094 00000 n 0000239129 00000 n 0000181852 00000 n 0000052202 00000 n 0000055416 00000 n 0000239160 00000 n 0000239203 00000 n 0000239410 00000 n 0000239623 00000 n 0000239815 00000 n 0000239850 00000 n 0000182026 00000 n 0000055438 00000 n 0000058886 00000 n 0000239881 00000 n 0000239924 00000 n 0000240133 00000 n 0000240372 00000 n 0000240407 00000 n 0000182200 00000 n 0000058908 00000 n 0000062159 00000 n 0000240438 00000 n 0000240481 00000 n 0000240706 00000 n 0000240910 00000 n 0000241131 00000 n 0000241367 00000 n 0000241589 00000 n 0000241624 00000 n 0000182374 00000 n 0000062181 00000 n 0000065708 00000 n 0000241655 00000 n 0000241698 00000 n 0000241733 00000 n 0000182540 00000 n 0000065730 00000 n 0000069959 00000 n 0000241764 00000 n 0000241807 00000 n 0000242014 00000 n 0000242254 00000 n 0000242449 00000 n 0000242652 00000 n 0000242835 00000 n 0000243091 00000 n 0000243328 00000 n 0000243540 00000 n 0000243714 00000 n 0000243749 00000 n 0000182714 00000 n 0000069981 00000 n 0000075203 00000 n 0000243780 00000 n 0000243823 00000 n 0000244043 00000 n 0000244078 00000 n 0000182888 00000 n 0000075225 00000 n 0000079349 00000 n 0000244109 00000 n 0000244152 00000 n 0000244370 00000 n 0000244630 00000 n 0000244858 00000 n 0000245085 00000 n 0000245120 00000 n 0000183062 00000 n 0000079371 00000 n 0000082404 00000 n 0000245151 00000 n 0000245194 00000 n 0000245229 00000 n 0000183228 00000 n 0000082426 00000 n 0000085731 00000 n 0000245260 00000 n 0000245303 00000 n 0000245531 00000 n 0000245758 00000 n 0000245793 00000 n 0000183402 00000 n 0000085753 00000 n 0000089855 00000 n 0000245824 00000 n 0000245867 00000 n 0000246058 00000 n 0000246244 00000 n 0000246416 00000 n 0000246598 00000 n 0000246920 00000 n 0000247144 00000 n 0000247179 00000 n 0000183576 00000 n 0000089877 00000 n 0000093572 00000 n 0000247210 00000 n 0000247253 00000 n 0000247517 00000 n 0000247728 00000 n 0000248030 00000 n 0000248277 00000 n 0000248312 00000 n 0000183750 00000 n 0000093594 00000 n 0000097648 00000 n 0000248343 00000 n 0000248386 00000 n 0000248421 00000 n 0000183916 00000 n 0000097670 00000 n 0000101428 00000 n 0000248452 00000 n 0000248495 00000 n 0000248773 00000 n 0000248808 00000 n 0000184090 00000 n 0000101450 00000 n 0000105039 00000 n 0000248839 00000 n 0000248882 00000 n 0000248917 00000 n 0000184256 00000 n 0000105061 00000 n 0000108994 00000 n 0000248948 00000 n 0000248991 00000 n 0000249253 00000 n 0000268273 00000 n 0000249424 00000 n 0000249650 00000 n 0000249875 00000 n 0000250087 00000 n 0000250122 00000 n 0000184430 00000 n 0000109016 00000 n 0000112190 00000 n 0000250163 00000 n 0000250206 00000 n 0000250241 00000 n 0000184596 00000 n 0000112212 00000 n 0000115761 00000 n 0000250272 00000 n 0000250315 00000 n 0000250531 00000 n 0000250781 00000 n 0000250999 00000 n 0000251034 00000 n 0000184770 00000 n 0000115783 00000 n 0000118827 00000 n 0000251075 00000 n 0000251118 00000 n 0000251153 00000 n 0000184936 00000 n 0000118849 00000 n 0000122228 00000 n 0000251184 00000 n 0000251227 00000 n 0000251477 00000 n 0000251512 00000 n 0000185110 00000 n 0000122250 00000 n 0000125694 00000 n 0000251553 00000 n 0000251596 00000 n 0000251631 00000 n 0000185276 00000 n 0000125716 00000 n 0000129457 00000 n 0000251672 00000 n 0000251715 00000 n 0000251892 00000 n 0000251927 00000 n 0000185450 00000 n 0000129479 00000 n 0000132294 00000 n 0000251968 00000 n 0000252011 00000 n 0000252046 00000 n 0000185616 00000 n 0000132316 00000 n 0000134951 00000 n 0000252077 00000 n 0000252120 00000 n 0000252155 00000 n 0000185782 00000 n 0000134973 00000 n 0000137826 00000 n 0000252186 00000 n 0000252229 00000 n 0000252409 00000 n 0000252444 00000 n 0000185956 00000 n 0000137848 00000 n 0000140892 00000 n 0000252485 00000 n 0000252528 00000 n 0000252563 00000 n 0000186122 00000 n 0000140914 00000 n 0000143354 00000 n 0000252604 00000 n 0000252647 00000 n 0000252958 00000 n 0000253188 00000 n 0000253395 00000 n 0000253430 00000 n 0000186296 00000 n 0000143376 00000 n 0000146703 00000 n 0000253471 00000 n 0000253514 00000 n 0000253776 00000 n 0000254000 00000 n 0000254035 00000 n 0000186470 00000 n 0000146725 00000 n 0000150420 00000 n 0000254076 00000 n 0000254119 00000 n 0000254154 00000 n 0000186636 00000 n 0000150442 00000 n 0000153802 00000 n 0000254195 00000 n 0000254238 00000 n 0000254273 00000 n 0000186802 00000 n 0000153824 00000 n 0000157482 00000 n 0000254304 00000 n 0000254347 00000 n 0000254640 00000 n 0000254903 00000 n 0000254938 00000 n 0000186976 00000 n 0000157504 00000 n 0000161105 00000 n 0000254979 00000 n 0000255022 00000 n 0000255057 00000 n 0000187142 00000 n 0000161127 00000 n 0000165930 00000 n 0000255098 00000 n 0000255141 00000 n 0000255376 00000 n 0000255642 00000 n 0000255864 00000 n 0000255899 00000 n 0000187316 00000 n 0000165952 00000 n 0000170436 00000 n 0000255940 00000 n 0000255983 00000 n 0000256195 00000 n 0000256446 00000 n 0000256684 00000 n 0000256909 00000 n 0000257134 00000 n 0000257380 00000 n 0000257635 00000 n 0000257670 00000 n 0000187490 00000 n 0000170458 00000 n 0000173990 00000 n 0000257711 00000 n 0000257754 00000 n 0000258017 00000 n 0000258052 00000 n 0000187664 00000 n 0000174012 00000 n 0000179590 00000 n 0000258093 00000 n 0000258136 00000 n 0000258419 00000 n 0000258710 00000 n 0000258948 00000 n 0000259198 00000 n 0000259472 00000 n 0000259718 00000 n 0000260000 00000 n 0000260224 00000 n 0000260474 00000 n 0000260731 00000 n 0000261014 00000 n 0000261302 00000 n 0000261544 00000 n 0000261759 00000 n 0000262006 00000 n 0000262231 00000 n 0000262471 00000 n 0000262720 00000 n 0000262946 00000 n 0000263218 00000 n 0000263466 00000 n 0000263712 00000 n 0000263966 00000 n 0000264190 00000 n 0000264438 00000 n 0000264662 00000 n 0000264914 00000 n 0000265153 00000 n 0000265423 00000 n 0000265636 00000 n 0000265843 00000 n 0000266091 00000 n 0000266324 00000 n 0000266595 00000 n 0000266849 00000 n 0000267081 00000 n 0000267316 00000 n 0000267574 00000 n 0000267609 00000 n 0000267650 00000 n 0000268252 00000 n 0000269549 00000 n 0000271144 00000 n 0000275949 00000 n 0000276176 00000 n 0000276779 00000 n 0000277207 00000 n 0000277823 00000 n trailer << /Size 630 /Root 1 0 R /Info 2 0 R /ID [(Һibiܥz)(Һibiܥz)] >> startxref 279419 %%EOF ga-5-3/doc/pario/0000750005473000001440000000000012275260563012462 5ustar d3n000usersga-5-3/doc/style0000640005473000001440000005131311426350570012432 0ustar d3n000users############################################################################## # This is the Artistic Style (astyle) options file used by Global Arrays. ############################################################################## # # The command line options have precedence. If there is a conflict between # a command line option and an option in the default options file, the # command line option will be used. # # Lines within this options file that begin with '#' are considered # line-comments. # # astyle looks for this file in the following locations (in order): # 1. the file indicated by the --options= command line option; # 2. the file and directory indicated by the environment variable # ARTISTIC_STYLE_OPTIONS (if it exists); # 3. the file named .astylerc in the directory pointed to by the HOME # environment variable (e.g. "$HOME/.astylerc" on Linux); # 4. the file named astylerc in the directory pointed to by the # USERPROFILE environment variable (e.g. "%USERPROFILE%\astylerc" on # Windows). # ############################################################################## ### Global Arrays Style Options ############################################## ############################################################################## # --indent=spaces=2 --brackets=linux --indent-classes --indent-switches --indent-namespaces --indent-col1-comments --max-instatement-indent=40 --pad-oper --pad-header --unpad-paren --break-closing-brackets --add-brackets --convert-tabs --align-pointer=name # ############################################################################## ### Tab and Bracket Options ################################################## ############################################################################## # ## default indent option ## If no indentation option is set, the default option of 4 spaces will be ## used (e.g. -s4 --indent=spaces=4). # # ---------------------------------------------------------------------------- # --indent=spaces / --indent=spaces=# / -s# # Indent using # spaces per indent (e.g. -s6 --indent=spaces=6). # must be # between 2 and 20. Not specifying # will result in a default of 4 spaces per # indent. # # ---------------------------------------------------------------------------- # --indent=tab / --indent=tab=# / -t / -t# # Indent using tab characters. Treat each tab as # spaces # (e.g. -t6 / --indent=tab=6). # must be between 2 and 20. If no # is set, # treats tabs as 4 spaces. # # ---------------------------------------------------------------------------- # --indent=force-tab / --indent=force-tab=# / -T / -T# # Indent using tab characters. Treat each tab as # spaces # (e.g. -T6 / --indent=force-tab=6). Uses tabs as indents where ‑‑indent=tab # prefers to use spaces, such as inside multi-line statements. # must be # between 2 and 20. If no # is set, treats tabs as 4 spaces. # # ---------------------------------------------------------------------------- ## default brackets option ## If no brackets option is set, the brackets will not be changed. # # ---------------------------------------------------------------------------- # --brackets=break / -b # Break brackets from their pre-block statements ( e.g. Allman / ANSI style ). # # void Foo(bool isFoo) # { # if (isFoo) # { # bar(); # } # else # { # anotherBar(); # } # } # # ---------------------------------------------------------------------------- # --brackets=attach / -a # Attach brackets to their pre-block statements ( e.g. Java style ). # # void Foo(bool isFoo) { # if (isFoo) { # bar(); # } else { # anotherBar(); # } # } # # ---------------------------------------------------------------------------- # --brackets=linux / -l # Break brackets from namespace, class, and function definitions, but attach # brackets to statements within a function ( e.g. K&R / Linux style ). # # With C++ files brackets are attached for function definitions within a class # (inline class functions). The brackets are also attached for arrays, structs, # enums, and other top level objects that are not classes or functions. This # option is effective for C/C++ files only. # # void Foo(bool isFoo) # { # if (isFoo) { # bar(); # } else { # anotherBar; # } # } # # ---------------------------------------------------------------------------- # --brackets=stroustrup / -u # Break brackets from function definitions only. Attach brackets to # namespaces, classes, and statements within a function ( e.g. Stroustrup # style ). # # With C++ files brackets are attached for function definitions within a class # (inline class functions). The brackets are also attached for arrays, structs, # enums, and other top level objects that are not classes or functions. This # option is effective for C/C++ files only. # # void Foo(bool isFoo) # { # if (isFoo) { # bar(); # } else { # anotherBar; # } # } # # ---------------------------------------------------------------------------- # --brackets=horstmann / -g # Break brackets from their pre-block statements but allow run-in statements # on the same line as an opening bracket ( e.g. Horstmann style ). # # void Foo(bool isFoo) # { if (isFoo()) # { bar1(); # bar2(); # } # else # { anotherBar(); # } # } # ############################################################################## ### Indentation Options ###################################################### ############################################################################## # # --indent-classes / -C # Indent 'class' and 'struct' blocks so that the blocks 'public:', # 'protected:' and 'private:' are indented. The struct blocks are indented # only if an access modifier is declared somewhere in the struct. The entire # block is indented. This option is effective for C++ files only. # # class Foo # { # public: # Foo(); # virtual ~Foo(); # }; # # becomes: # # class Foo # { # public: # Foo(); # virtual ~Foo(); # }; # # ---------------------------------------------------------------------------- # --indent-switches / -S # Indent 'switch' blocks so that the 'case X:' statements are indented in the # switch block. The entire case block is indented. # # switch (foo) # { # case 1: # a += 1; # break; # # case 2: # { # a += 2; # break; # } # } # # becomes: # # switch (foo) # { # case 1: # a += 1; # break; # # case 2: # { # a += 2; # break; # } # } # # ---------------------------------------------------------------------------- # --indent-cases / -K # Indent 'case X:' blocks from the 'case X:' headers. Case statements not # enclosed in blocks are NOT indented. # # switch (foo) # { # case 1: # a += 1; # break; # # case 2: # { # a += 2; # break; # } # } # # becomes: # # switch (foo) # { # case 1: # a += 1; # break; # # case 2: # { # a += 2; # break; # } # } # # ---------------------------------------------------------------------------- # --indent-brackets / -B # Add extra indentation to brackets. This is the option used for Whitesmith # and Banner style formatting/indenting. If both ‑‑indent‑brackets and # ‑‑indent‑blocks are used the result will be ‑‑indent‑blocks. This option # will be ignored if used with a predefined style. # # if (isFoo) # { # bar(); # } # else # anotherBar(); # # becomes: # # if (isFoo) # { # bar(); # } # else # anotherBar(); # # ---------------------------------------------------------------------------- # --indent-blocks / -G # Add extra indentation to blocks within a function. The opening bracket for # namespaces, classes, and functions is not indented. This is the option used # for GNU style formatting/indenting. This option will be ignored if used with # a predefined style. # # if (isFoo) # { # bar(); # } # else # anotherBar(); # # becomes: # # if (isFoo) # { # bar(); # } # else # anotherBar(); # # ---------------------------------------------------------------------------- # --indent-namespaces / -N # Add extra indentation to namespace blocks. This option has no effect on Java # files. # # namespace foospace # { # class Foo # { # public: # Foo(); # virtual ~Foo(); # }; # } # # becomes: # # namespace foospace # { # class Foo # { # public: # Foo(); # virtual ~Foo(); # }; # } # # ---------------------------------------------------------------------------- # --indent-labels / -L # Add extra indentation to labels so they appear 1 indent less than the # current indentation, rather than being flushed to the left (the default). # # void Foo() { # while (isFoo) { # if (isFoo) # goto error; # ... # error: # ... # } # } # # becomes (with indented 'error:'): # # void Foo() { # while (isFoo) { # if (isFoo) # goto error; # ... # error: # ... # } # } # # ---------------------------------------------------------------------------- # --indent-preprocessor / -w # Indent multi-line preprocessor definitions ending with a backslash. Should # be used with --convert-tabs for proper results. Does a pretty good job, but # can not perform miracles in obfuscated preprocessor definitions. Without # this option the preprocessor statements remain unchanged. # # #define Is_Bar(arg,a,b) \ # (Is_Foo((arg), (a)) \ # || Is_Foo((arg), (b))) # # becomes: # # #define Is_Bar(arg,a,b) \ # (Is_Foo((arg), (a)) \ # || Is_Foo((arg), (b))) # # ---------------------------------------------------------------------------- # --indent-col1-comments / -Y # Indent C++ comments beginning in column one. By default C++ comments # beginning in column one are not indented. This option will allow the # comments to be indented with the code. # # void Foo()\n" # { # // comment # if (isFoo) # bar(); # } # # becomes: # # void Foo()\n" # { # // comment # if (isFoo) # bar(); # } # # ---------------------------------------------------------------------------- # --max-instatement-indent=# / -M# # Indent a maximum of # spaces in a continuous statement, relative to the # previous line (e.g. ‑‑max‑instatement‑indent=40). # must be less than 80. If # no # is set, the default value of 40 will be used. A maximum of less than # two indent lengths will be ignored. # # fooArray[] = { red, # green, # blue }; # # fooFunction(barArg1, # barArg2, # barArg3); # # becomes (with larger value): # # fooArray[] = { red, # green, # blue }; # # fooFunction(barArg1, # barArg2, # barArg3); # # ---------------------------------------------------------------------------- # --min-conditional-indent=# / -m# # Set the minimal indent that is added when a header is built of # multiple-lines. This indent makes helps to easily separate the header from # the command statements that follow. The value for # must be less than 40. # The default setting for this option is twice the current indent # (e.g. --min-conditional-indent=8). # # // default setting makes this non-bracketed code clear # if (a < b # || c > d) # foo++; # # // but creates an exaggerated indent in this bracketed code # if (a < b # || c > d) # { # foo++; # } # # becomes (when setting --min-conditional-indent=0): # # // setting makes this non-bracketed code less clear # if (a < b # || c > d) # foo++; # # // but makes this bracketed code clearer # if (a < b # || c > d) # { # foo++; # } # ############################################################################## ### Padding Options ########################################################## ############################################################################## # # --break-blocks / -f # Pad empty lines around header blocks (e.g. 'if', 'for', 'while'...). # # isFoo = true; # if (isFoo) { # bar(); # } else { # anotherBar(); # } # isBar = false; # # becomes: # # isFoo = true; # # if (isFoo) { # bar(); # } else { # anotherBar(); # } # # isBar = false; # # ---------------------------------------------------------------------------- # --break-blocks=all / -F # Pad empty lines around header blocks (e.g. 'if', 'for', 'while'...). Treat # closing header blocks (e.g. 'else', 'catch') as stand-alone blocks. # # isFoo = true; # if (isFoo) { # bar(); # } else { # anotherBar(); # } # isBar = false; # # becomes: # # isFoo = true; # # if (isFoo) { # bar(); # # } else { # anotherBar(); # } # # isBar = false; # # ---------------------------------------------------------------------------- # --pad-oper / -p # Insert space padding around operators. Operators inside block parens [] are # not padded. Any end of line comments will remain in the original column, if # possible. Note that there is no option to unpad. Once padded, they stay # padded. # # if (foo==2) # a=bar((b-c)*a,*d--); # # becomes: # # if (foo == 2) # a = bar((b - c) * a, * d--); # # ---------------------------------------------------------------------------- # --pad-paren / -P # Insert space padding around parenthesis on both the outside and the inside. # Any end of line comments will remain in the original column, if possible. # # if (isFoo(a, b)) # bar(a, b); # # becomes: # # if ( isFoo ( a, b ) ) # bar ( a, b ); # # ---------------------------------------------------------------------------- # --pad-paren-out / -d # Insert space padding around parenthesis on the outside only. Any end of line # comments will remain in the original column, if possible. This can be used # with unpad-paren below to remove unwanted spaces. # # if (isFoo(a, b)) # bar(a, b); # # becomes: # # if (isFoo (a, b) ) # bar (a, b); # # ---------------------------------------------------------------------------- # --pad-paren-in / -D # Insert space padding around parenthesis on the inside only. Any end of line # comments will remain in the original column, if possible. This can be used # with unpad-paren below to remove unwanted spaces. # # if (isFoo(a, b)) # bar(a, b); # # becomes: # # if ( isFoo( a, b ) ) # bar( a, b ); # # ---------------------------------------------------------------------------- # --pad-header / -H # Insert space padding after paren headers only (e.g. 'if', 'for', 'while'...). # Any end of line comments will remain in the original column, if possible. # This can be used with unpad-paren to remove unwanted spaces. # # if(isFoo(a, b)) # bar(a, b); # # becomes: # # if (isFoo(a, b)) # bar(a, b); # # ---------------------------------------------------------------------------- # --unpad-paren / -U # Remove extra space padding around parenthesis on the inside and outside. # Any end of line comments will remain in the original column, if possible. # This option can be used in combination with the paren padding options # pad‑paren, pad‑paren‑out, pad‑paren‑in, and pad‑header above. Only padding # that has not been requested by other options will be removed. # # For example, if a source has parens padded on both the inside and outside, # and you want inside only. You need to use unpad-paren to remove the outside # padding, and pad‑paren‑in to retain the inside padding. Using only # pad‑paren‑in would not remove the outside padding. # # if ( isFoo( a, b ) ) # bar ( a, b ); # # becomes (with no padding option requested): # # if (isFoo(a, b)) # bar(a, b); # # ---------------------------------------------------------------------------- # --delete-empty-lines / -x # Delete empty lines within a function or method. Empty lines outside of # functions or methods are NOT deleted. If used with break-blocks or # break-blocks=all it will delete all lines EXCEPT the lines added by the # break-blocks options. # # void Foo() # { # # foo1 = 1; # # foo2 = 2; # # } # # becomes: # # void Foo() # { # foo1 = 1; # foo2 = 2; # } # # ---------------------------------------------------------------------------- # --fill-empty-lines / -E # Fill empty lines with the white space of the previous line. # ############################################################################## ### Formatting Options ####################################################### ############################################################################## # # --break-closing-brackets / -y # When used with --brackets=attach, --brackets=linux, or --brackets=stroustrup, # this breaks closing headers (e.g. 'else', 'catch', ...) from their # immediately preceding closing brackets. Closing header brackets are always # broken with broken brackets, horstmann brackets, indented blocks, and # indented brackets. # # void Foo(bool isFoo) { # if (isFoo) { # bar(); # } else { # anotherBar(); # } # } # # becomes (with a broken 'else'): # # void Foo(bool isFoo) { # if (isFoo) { # bar(); # } # else { # anotherBar(); # } # } # # ---------------------------------------------------------------------------- # --break-elseifs / -e # Break "else if" header combinations into separate lines. This option has no # effect if keep-one-line-statements is used, the "else if" statements will # remain as they are. # # If this option is NOT used, "else if" header combinations will be placed on # a single line. # # if (isFoo) { # bar(); # } # else if (isFoo1()) { # bar1(); # } # else if (isFoo2()) } # bar2; # } # # becomes: # # if (isFoo) { # bar(); # } # else # if (isFoo1()) { # bar1(); # } # else # if (isFoo2()) { # bar2(); # } # # ---------------------------------------------------------------------------- # --add-brackets / -j # Add brackets to unbracketed one line conditional statements (e.g. 'if', # 'for', 'while'...). The statement must be on a single line. The brackets # will be added according to the currently requested predefined style or # bracket type. If no style or bracket type is requested the brackets will be # attached. If --add-one-line-brackets is also used the result will be one # line brackets. # # if (isFoo) # isFoo = false; # # becomes: # # if (isFoo) { # isFoo = false; # } # # ---------------------------------------------------------------------------- # --add-one-line-brackets / -J # Add one line brackets to unbracketed one line conditional statements (e.g. # 'if', 'for', 'while'...). The statement must be on a single line. The option # implies --keep-one-line-blocks and will not break the one line blocks. # # if (isFoo) # isFoo = false; # # becomes: # # if (isFoo) # { isFoo = false; } # # ---------------------------------------------------------------------------- # --keep-one-line-blocks / -O # Don't break one-line blocks. # # if (isFoo) # { isFoo = false; cout << isFoo << endl; } # # remains unchanged. # # ---------------------------------------------------------------------------- # --keep-one-line-statements / -o # Don't break complex statements and multiple statements residing on a single # line. # # if (isFoo) # { # isFoo = false; cout << isFoo << endl; # } # # remains unchanged. # # if (isFoo) DoBar(); # # remains unchanged. # # ---------------------------------------------------------------------------- # --convert-tabs / -c # Converts tabs into spaces in the non-indentation part of the line. The # number of spaces inserted will maintain the spacing of the tab. The current # setting for spaces per tab is used. It may not produce the expected results # if convert-tabs is used when changing spaces per tab. Tabs are not replaced # in quotes. # # ---------------------------------------------------------------------------- # --align-pointer=type / -k1 # --align-pointer=middle / -k2 # --align-pointer=name / -k3 # Attach a pointer or reference operator (* or &) to either the variable type # (left) or variable name (right), or place it between the type and name. The # spacing between the type and name will be preserved, if possible. This # option is effective for C/C++ files only. # # char *foo1; # # becomes (with align-pointer=type): # # char* foo1; # # char* foo2; # # becomes (with align-pointer=middle): # # char * foo2; # # char& foo3; # # becomes (with align-pointer=name): # # char &foo3; # # ---------------------------------------------------------------------------- # --mode=c # --mode=cs # --mode=java # Indent a C/C++, C#, or Java file. The option is usually set from the file # extension for each file. You can override the setting with this entry. It # will be used for all files regardless of the file extension. It allows the # formatter to identify language specific syntax such as C++ classes, # templates, and keywords. # ga-5-3/Makefile.am0000640005473000001440000025446012133277610012645 0ustar d3n000users############################################################################## # Makefile.am for Global Arrays. # # Rationale: # This Makefile.am follows many of the suggestions outlined in the paper # "Recursive Make Considered Harmful". We do not use automake's # 'include' feature (instead preferring a single, large Makefile.am). # We do recurse into the armci directory, but since armci is a stand-alone # package this is the correct behavior. # # Additional targets: # Besides the traditional make targets supplied by automake, we have added the # "checkprogs" target to build example programs and test programs. # # Notes: # In general, each subdirectory has a corresponding section within this # Makefile.am with the notable exception being the many examples getting # rolled up into the global/examples section. # # The usual aclocal nonsense to get include paths right. ACLOCAL_AMFLAGS = -I m4 # All public headers, installed programs, test programs, and example programs # are listed in these variables. Appended to throughout. These are the # automake variables used. include_HEADERS = nodist_include_HEADERS = bin_PROGRAMS = bin_SCRIPTS = check_PROGRAMS = check_LTLIBRARIES = lib_LTLIBRARIES = libga.la libga_la_SOURCES = libga_la_LIBADD = nodist_libga_la_SOURCES = EXTRA_DIST = README BUILT_SOURCES = MOSTLYCLEANFILES = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = AM_FFLAGS = AM_CFLAGS = AM_CXXFLAGS = AM_CPPFLAGS = AM_LDFLAGS = FLDFLAGS = LDADD = AM_FFLAGS += $(GA_FOPT) AM_FFLAGS += $(GA_F_WARN) AM_FFLAGS += $(FFLAG_INT) AM_CFLAGS += $(GA_COPT) AM_CFLAGS += $(GA_C_WARN) AM_CXXFLAGS += $(GA_CXXOPT) AM_CXXFLAGS += $(GA_CXX_WARN) AM_CPPFLAGS += $(SCALAPACK_CPPFLAGS) AM_CPPFLAGS += $(LAPACK_CPPFLAGS) AM_CPPFLAGS += $(BLAS_CPPFLAGS) AM_CPPFLAGS += $(GA_MP_CPPFLAGS) AM_CPPFLAGS += $(ARMCI_NETWORK_CPPFLAGS) AM_LDFLAGS += $(SCALAPACK_LDFLAGS) AM_LDFLAGS += $(LAPACK_LDFLAGS) AM_LDFLAGS += $(BLAS_LDFLAGS) AM_LDFLAGS += $(GA_MP_LDFLAGS) AM_LDFLAGS += $(ARMCI_NETWORK_LDFLAGS) if ENABLE_F77 AM_LDFLAGS += $(FLD_NOMAIN) endif FLDFLAGS += $(SCALAPACK_LDFLAGS) FLDFLAGS += $(LAPACK_LDFLAGS) FLDFLAGS += $(BLAS_LDFLAGS) FLDFLAGS += $(GA_MP_LDFLAGS) FLDFLAGS += $(ARMCI_NETWORK_LDFLAGS) LDADD += $(LTLIBOBJS) LDADD += libga.la LDADD += $(SCALAPACK_LIBS) LDADD += $(LAPACK_LIBS) LDADD += $(BLAS_LIBS) LDADD += $(GA_MP_LIBS) LDADD += $(ARMCI_NETWORK_LIBS) # Certain trickery when turning Fortran support on or off. if ENABLE_F77 MAYBE_DUMMY_F_LINK = dummy.f MAYBE_FLIBS = $(FLIBS) endif ############################################################################## # compiler and linker flags # # Important for external tools wanting to know how to link to GA. This # functionality caries over from the pre-autotools GA build. SED_NORMALIZE_WHITESPACE = $(SED) 's/ [ ]*/ /g;s/" /"/g;s/ "/"/g' .PHONY: flags flags: @echo '# =========================================================================== ' @echo 'F77="$(F77)"' @echo 'CC="$(CC)"' if CXX_BINDINGS @echo 'CXX="$(CXX)"' endif @echo '# Suggested compiler/linker options are as follows.' @echo '# GA libraries are installed in $(libdir)' @echo '# GA headers are installed in $(includedir)' @echo '#' @echo 'CPPFLAGS="$(SCALAPACK_CPPFLAGS) $(LAPACK_CPPFLAGS) $(BLAS_CPPFLAGS) $(GA_MP_CPPFLAGS) $(ARMCI_NETWORK_CPPFLAGS) -I$(includedir)"' | $(SED_NORMALIZE_WHITESPACE) @echo '#' @echo 'LDFLAGS="$(SCALAPACK_LDFLAGS) $(LAPACK_LDFLAGS) $(BLAS_LDFLAGS) $(GA_MP_LDFLAGS) $(ARMCI_NETWORK_LDFLAGS) -L$(libdir)"' | $(SED_NORMALIZE_WHITESPACE) @echo '#' @echo '# For Fortran Programs: ' @echo 'FFLAGS="$(AM_FFLAGS)"' | $(SED_NORMALIZE_WHITESPACE) @echo 'LIBS="-lga $(SCALAPACK_LIBS) $(LAPACK_LIBS) $(BLAS_LIBS) $(GA_MP_LIBS) $(ARMCI_NETWORK_LIBS)"' | $(SED_NORMALIZE_WHITESPACE) @echo '#' @echo '# For C Programs: ' @echo 'CFLAGS="$(AM_CFLAGS)"' | $(SED_NORMALIZE_WHITESPACE) @echo 'LIBS="-lga $(SCALAPACK_LIBS) $(LAPACK_LIBS) $(BLAS_LIBS) $(GA_MP_LIBS) $(ARMCI_NETWORK_LIBS) $(MAYBE_FLIBS)"' | $(SED_NORMALIZE_WHITESPACE) if CXX_BINDINGS @echo '#' @echo '# For C++ Programs: ' @echo 'CXXFLAGS="$(AM_CXXFLAGS)"' | $(SED_NORMALIZE_WHITESPACE) @echo 'LIBS="-lga++ -lga $(SCALAPACK_LIBS) $(LAPACK_LIBS) $(BLAS_LIBS) $(GA_MP_LIBS) $(ARMCI_NETWORK_LIBS) $(MAYBE_FLIBS)"' | $(SED_NORMALIZE_WHITESPACE) endif @echo '# =========================================================================== ' bin_SCRIPTS += tools/ga-config CLEANFILES += $(bin_SCRIPTS) ############################################################################## # config # # The config.h file is automatically generated from config.h.in at configure # time. However, it contains symbols which certain Fortran compilers do not # understand. Therefore, we create a config.fh file which is Fortran-specific # and works with all Fortran compilers. # BUILT_SOURCES += config.fh CLEANFILES += config.fh nodist_libga_la_SOURCES += config.fh config.fh: config.h @-rm -f $@ $(SED_V) \ $(SED) "/^#/!d" config.h > $@ ############################################################################## # compat # # Although the compat directory houses replacements for missing or erroneous # standard C functions and such sources are conditionally compiled based on # results from configure tests, without the "random" implementation the # m4-generated tests always fail for scatter and copy_patch. libga_la_SOURCES += compat/random.c ############################################################################## # ma # libga_la_SOURCES += ma/error.c libga_la_SOURCES += ma/f2c.c libga_la_SOURCES += ma/ma.c libga_la_SOURCES += ma/ma.h libga_la_SOURCES += ma/memcpy.h libga_la_SOURCES += ma/string-util.c libga_la_SOURCES += ma/table.c if ENABLE_F77 libga_la_SOURCES += ma/maf.F endif include_HEADERS += ma/error.h include_HEADERS += ma/macdecls.h include_HEADERS += ma/macommon.h include_HEADERS += ma/maf2c.fh include_HEADERS += ma/mafdecls.fh include_HEADERS += ma/matypes.h include_HEADERS += ma/scope.h include_HEADERS += ma/string-util.h include_HEADERS += ma/table.h AM_CPPFLAGS += -I$(top_build_prefix)ma AM_CPPFLAGS += -I$(top_srcdir)/ma check_PROGRAMS += ma/testc check_PROGRAMS += ma/test-coalesce check_PROGRAMS += ma/test-inquire if ENABLE_F77 check_PROGRAMS += ma/testf endif MA_SERIAL_TESTS = MA_SERIAL_TESTS_XFAIL = MA_PARALLEL_TESTS = MA_PARALLEL_TESTS_XFAIL = MA_TESTS = $(MA_SERIAL_TESTS) $(MA_PARALLEL_TESTS) MA_TESTS_XFAIL = $(MA_SERIAL_TESTS_XFAIL) $(MA_PARALLEL_TESTS_XFAIL) #MA_SERIAL_TESTS += ma/testc$(EXEEXT) # iteractive prompt MA_SERIAL_TESTS += ma/test-coalesce$(EXEEXT) MA_SERIAL_TESTS += ma/test-inquire$(EXEEXT) if ENABLE_F77 MA_SERIAL_TESTS += ma/testf$(EXEEXT) MA_SERIAL_TESTS_XFAIL += ma/testf$(EXEEXT) endif ma_testf_SOURCES = ma/testf.F ma_testc_SOURCES = ma/testc.c ma_test_coalesce_SOURCES = ma/test-coalesce.c ma_test_inquire_SOURCES = ma/test-inquire.c ma_testf_LDFLAGS = $(FLDFLAGS) nodist_EXTRA_ma_testc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_ma_test_coalesce_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_ma_test_inquire_SOURCES = $(MAYBE_DUMMY_F_LINK) ############################################################################## # LinAlg/lapack+blas # # Since we gave all linalg routines a gal_ prefix, we can unconditionally # compile our internal linalg routines. # if ENABLE_F77 libga_la_SOURCES += LinAlg/lapack+blas/dgetf2.f libga_la_SOURCES += LinAlg/lapack+blas/dgetrf.f libga_la_SOURCES += LinAlg/lapack+blas/dgetrs.f libga_la_SOURCES += LinAlg/lapack+blas/dlacpy.f libga_la_SOURCES += LinAlg/lapack+blas/dlaset.f libga_la_SOURCES += LinAlg/lapack+blas/dlaswp.f libga_la_SOURCES += LinAlg/lapack+blas/ilaenv.f libga_la_SOURCES += LinAlg/lapack+blas/lsame.f libga_la_SOURCES += LinAlg/lapack+blas/xerbla.f libga_la_SOURCES += LinAlg/lapack+blas/cgemm.f libga_la_SOURCES += LinAlg/lapack+blas/dblas.f libga_la_SOURCES += LinAlg/lapack+blas/sgemm.f libga_la_SOURCES += LinAlg/lapack+blas/zaxpy.f libga_la_SOURCES += LinAlg/lapack+blas/zgemm.f endif libga_la_SOURCES += LinAlg/lapack+blas/xgemm.c libga_la_SOURCES += LinAlg/lapack+blas/xgemm.h libga_la_SOURCES += LinAlg/lapack+blas/galinalg.h libga_la_SOURCES += LinAlg/lapack+blas/galinalg.fh AM_CPPFLAGS += -I$(top_srcdir)/LinAlg/lapack+blas EXTRA_DIST += LinAlg/lapack+blas/README ############################################################################## # global # EXTRA_DIST += global/README ############################################################################## # tools # # The following to support tracing, profiling, etc. # if ENABLE_PROFILING if HAVE_SYS_WEAK_ALIAS_PRAGMA lib_LTLIBRARIES += libwapi.la libwapi_la_SOURCES = libwapi_la_SOURCES += tools/ga-wapi.c if ENABLE_GPARRAYS libwapi_la_SOURCES += tools/gp-wapi.c endif else nodist_libga_la_SOURCES += tools/ga-wapi.c if ENABLE_GPARRAYS nodist_libga_la_SOURCES += tools/gp-wapi.c endif endif endif if ENABLE_GPARRAYS EXTRA_DIST += tools/gpwapigen.py endif EXTRA_DIST += tools/wapigen.py EXTRA_DIST += tools/wapigen_counts.py EXTRA_DIST += tools/wapigen_trace.py ############################################################################## # global/src # PAPI_H = $(top_srcdir)/global/src/ga-papi.h global/src/ga-wapi.h: $(PAPI_H) @-rm -f $@ $(SED_V) \ $(SED) -e "s/PAPI/WAPI/g" \ -e "s/pnga_/wnga_/g" \ -e "/typedef/d" \ $(PAPI_H) > $@ global/src/ga-wapidefs.h: $(PAPI_H) @-rm -f $@ $(SED_V) \ $(SED) -e "s/PAPI/WAPIDEFS/g" \ -e "s/^.*p\(nga_.*\)(.*$$/#define w\1 p\1/g" \ -e "/^ /d" \ -e "/^\/\*/d" \ -e "/^ \*/d" \ -e "/typedef/d" \ $(PAPI_H) > $@ BUILT_SOURCES += global/src/ga-wapi.h BUILT_SOURCES += global/src/ga-wapidefs.h CLEANFILES += global/src/ga-wapi.h CLEANFILES += global/src/ga-wapidefs.h libga_la_SOURCES += global/src/abstract_ops.h libga_la_SOURCES += global/src/base.c libga_la_SOURCES += global/src/base.h libga_la_SOURCES += global/src/capi.c libga_la_SOURCES += global/src/cnames.h libga_la_SOURCES += global/src/collect.c libga_la_SOURCES += global/src/datatypes.c libga_la_SOURCES += global/src/decomp.c libga_la_SOURCES += global/src/diag.fh libga_la_SOURCES += global/src/DP.c libga_la_SOURCES += global/src/elem_alg.c libga_la_SOURCES += global/src/fapi.c libga_la_SOURCES += global/src/ga_ckpt.h libga_la_SOURCES += global/src/gaconfig.h libga_la_SOURCES += global/src/ga_diag_seqc.c libga_la_SOURCES += global/src/ga_malloc.c libga_la_SOURCES += global/src/ga_profile.h libga_la_SOURCES += global/src/ga_solve_seq.c libga_la_SOURCES += global/src/ga_symmetr.c libga_la_SOURCES += global/src/ga_trace.c libga_la_SOURCES += global/src/ghosts.c libga_la_SOURCES += global/src/global.h libga_la_SOURCES += global/src/global.nalg.c libga_la_SOURCES += global/src/global.npatch.c libga_la_SOURCES += global/src/global.periodic.c libga_la_SOURCES += global/src/globalp.h libga_la_SOURCES += global/src/global.util.c libga_la_SOURCES += global/src/hsort.scat.c libga_la_SOURCES += global/src/matmul.c libga_la_SOURCES += global/src/matmul.h libga_la_SOURCES += global/src/matrix.c libga_la_SOURCES += global/src/nbutil.c libga_la_SOURCES += global/src/onesided.c libga_la_SOURCES += global/src/peigstubs.c libga_la_SOURCES += global/src/scalapack.fh libga_la_SOURCES += global/src/sclstubs.c libga_la_SOURCES += global/src/select.c libga_la_SOURCES += global/src/sparse.c libga_la_SOURCES += global/src/types.xh libga_la_SOURCES += global/src/types2.xh nodist_libga_la_SOURCES += global/src/ga-wapidefs.h if ENABLE_F77 libga_la_SOURCES += global/src/complex.F libga_la_SOURCES += global/src/ga_diag_seq.F libga_la_SOURCES += global/src/rsg.f if CRAY_XT_NETWORKS libga_la_SOURCES += global/src/ga_dgemmf.F endif # CRAY_XT_NETWORKS if ENABLE_PEIGS libga_la_SOURCES += global/src/ga_diag.F endif # ENABLE_PEIGS if HAVE_SCALAPACK libga_la_SOURCES += global/src/scalapack.F endif # HAVE_SCALAPACK endif # ENABLE_F77 if ENABLE_CHECKPOINT libga_la_SOURCES += global/src/ga_ckpt.c endif include_HEADERS += global/src/gacommon.h include_HEADERS += global/src/ga.h include_HEADERS += global/src/global.fh include_HEADERS += global/src/ga-papi.h if MSG_COMMS_MPI include_HEADERS += global/src/ga-mpi.h include_HEADERS += global/src/ga-mpi.fh endif nodist_include_HEADERS += global/src/ga-wapi.h AM_CPPFLAGS += -I$(top_build_prefix)global/src AM_CPPFLAGS += -I$(top_srcdir)/global/src ############################################################################## # global/testing # AM_CPPFLAGS += -I$(top_srcdir)/global/testing check_PROGRAMS += global/testing/big check_PROGRAMS += global/testing/elempatch check_PROGRAMS += global/testing/gatscat check_PROGRAMS += global/testing/getmem check_PROGRAMS += global/testing/mtest check_PROGRAMS += global/testing/mulmatpatchc check_PROGRAMS += global/testing/ntestc check_PROGRAMS += global/testing/ntestfc check_PROGRAMS += global/testing/packc check_PROGRAMS += global/testing/patch_enumc check_PROGRAMS += global/testing/perf2 check_PROGRAMS += global/testing/print check_PROGRAMS += global/testing/scan_addc check_PROGRAMS += global/testing/scan_copyc check_PROGRAMS += global/testing/testc check_PROGRAMS += global/testing/testmatmultc check_PROGRAMS += global/testing/testmult check_PROGRAMS += global/testing/testmultrect check_PROGRAMS += global/testing/unpackc if ENABLE_F77 check_PROGRAMS += global/testing/bin check_PROGRAMS += global/testing/blktest check_PROGRAMS += global/testing/d2test check_PROGRAMS += global/testing/g2test check_PROGRAMS += global/testing/g3test check_PROGRAMS += global/testing/ga_lu check_PROGRAMS += global/testing/ga_shift check_PROGRAMS += global/testing/ghosts check_PROGRAMS += global/testing/jacobi check_PROGRAMS += global/testing/mir_perf2 check_PROGRAMS += global/testing/mmatrix check_PROGRAMS += global/testing/mulmatpatch check_PROGRAMS += global/testing/nb2test check_PROGRAMS += global/testing/ndim check_PROGRAMS += global/testing/patch check_PROGRAMS += global/testing/patch2 check_PROGRAMS += global/testing/patch_enumf check_PROGRAMS += global/testing/perfmod check_PROGRAMS += global/testing/perform check_PROGRAMS += global/testing/perf check_PROGRAMS += global/testing/pg2testmatmult check_PROGRAMS += global/testing/pg2test check_PROGRAMS += global/testing/pgtestmatmult check_PROGRAMS += global/testing/pgtest check_PROGRAMS += global/testing/random check_PROGRAMS += global/testing/scan check_PROGRAMS += global/testing/simple_groups check_PROGRAMS += global/testing/sparse check_PROGRAMS += global/testing/sprsmatmult check_PROGRAMS += global/testing/stride check_PROGRAMS += global/testing/testeig check_PROGRAMS += global/testing/testmatmult check_PROGRAMS += global/testing/testsolve check_PROGRAMS += global/testing/test check_PROGRAMS += global/testing/test_mirrored check_PROGRAMS += global/testing/types_test check_PROGRAMS += global/testing/field_test if HAVE_SCALAPACK check_PROGRAMS += global/testing/testspd endif # HAVE_SCALAPACK else # !ENABLE_F77 if HAVE_LAPACK check_PROGRAMS += global/testing/ga_lu endif endif # ENABLE_F77 if MSG_COMMS_MPI check_PROGRAMS += global/testing/ga-mpi check_PROGRAMS += global/testing/lock check_PROGRAMS += global/testing/simple_groups_comm check_PROGRAMS += global/testing/simple_groups_commc endif if SYSV check_PROGRAMS += global/testing/ipc_clean endif # TODO somehow unit tests depend on MPI -- need to fix if MSG_COMMS_MPI check_PROGRAMS += global/testing/unit-tests/ga_abs_value check_PROGRAMS += global/testing/unit-tests/ga_acc check_PROGRAMS += global/testing/unit-tests/ga_add check_PROGRAMS += global/testing/unit-tests/ga_add_constant check_PROGRAMS += global/testing/unit-tests/ga_add_constantpatch check_PROGRAMS += global/testing/unit-tests/ga_add_diagonal check_PROGRAMS += global/testing/unit-tests/ga_add_patch check_PROGRAMS += global/testing/unit-tests/ga_copy2 check_PROGRAMS += global/testing/unit-tests/ga_copy3 check_PROGRAMS += global/testing/unit-tests/ga_copy check_PROGRAMS += global/testing/unit-tests/ga_copypatch2 check_PROGRAMS += global/testing/unit-tests/ga_copypatch check_PROGRAMS += global/testing/unit-tests/ga_create1 check_PROGRAMS += global/testing/unit-tests/ga_create2 check_PROGRAMS += global/testing/unit-tests/ga_create3 check_PROGRAMS += global/testing/unit-tests/ga_create check_PROGRAMS += global/testing/unit-tests/ga_create_handle check_PROGRAMS += global/testing/unit-tests/ga_create_irreg2 check_PROGRAMS += global/testing/unit-tests/ga_create_irreg3 check_PROGRAMS += global/testing/unit-tests/ga_create_irreg check_PROGRAMS += global/testing/unit-tests/ga_destroy check_PROGRAMS += global/testing/unit-tests/ga_dgop check_PROGRAMS += global/testing/unit-tests/ga_dot check_PROGRAMS += global/testing/unit-tests/ga_duplicate check_PROGRAMS += global/testing/unit-tests/ga_elem_divide check_PROGRAMS += global/testing/unit-tests/ga_elem_dividepatch check_PROGRAMS += global/testing/unit-tests/ga_elem_maximum check_PROGRAMS += global/testing/unit-tests/ga_elem_maximumpatch check_PROGRAMS += global/testing/unit-tests/ga_elem_minimum check_PROGRAMS += global/testing/unit-tests/ga_elem_minimumpatch check_PROGRAMS += global/testing/unit-tests/ga_elem_multiply check_PROGRAMS += global/testing/unit-tests/ga_elem_multiplypatch check_PROGRAMS += global/testing/unit-tests/ga_fill check_PROGRAMS += global/testing/unit-tests/ga_fillpatch1 check_PROGRAMS += global/testing/unit-tests/ga_fillpatch check_PROGRAMS += global/testing/unit-tests/ga_gather2 check_PROGRAMS += global/testing/unit-tests/ga_gather3 check_PROGRAMS += global/testing/unit-tests/ga_gather check_PROGRAMS += global/testing/unit-tests/ga_get_blockinfo check_PROGRAMS += global/testing/unit-tests/ga_get check_PROGRAMS += global/testing/unit-tests/ga_get_diagonal check_PROGRAMS += global/testing/unit-tests/ga_igop2 check_PROGRAMS += global/testing/unit-tests/ga_igop check_PROGRAMS += global/testing/unit-tests/ga_inquire check_PROGRAMS += global/testing/unit-tests/ga_intialize check_PROGRAMS += global/testing/unit-tests/ga_lgop check_PROGRAMS += global/testing/unit-tests/ga_median check_PROGRAMS += global/testing/unit-tests/ga_ndim2 check_PROGRAMS += global/testing/unit-tests/ga_ndim check_PROGRAMS += global/testing/unit-tests/ga_nnodes check_PROGRAMS += global/testing/unit-tests/ga_nodeid check_PROGRAMS += global/testing/unit-tests/ga_pgroup_create2 check_PROGRAMS += global/testing/unit-tests/ga_pgroup_create3 check_PROGRAMS += global/testing/unit-tests/ga_pgroup_create4 check_PROGRAMS += global/testing/unit-tests/ga_pgroup_create5 check_PROGRAMS += global/testing/unit-tests/ga_pgroup_create check_PROGRAMS += global/testing/unit-tests/ga_pgroup_destroy2 check_PROGRAMS += global/testing/unit-tests/ga_pgroup_destroy check_PROGRAMS += global/testing/unit-tests/ga_pgroup_nnodes_nodeid check_PROGRAMS += global/testing/unit-tests/ga_pgroup_setdefault check_PROGRAMS += global/testing/unit-tests/ga_put2 check_PROGRAMS += global/testing/unit-tests/ga_put check_PROGRAMS += global/testing/unit-tests/ga_scale2 check_PROGRAMS += global/testing/unit-tests/ga_scale check_PROGRAMS += global/testing/unit-tests/ga_scale_cols check_PROGRAMS += global/testing/unit-tests/ga_scale_patch check_PROGRAMS += global/testing/unit-tests/ga_scale_rows check_PROGRAMS += global/testing/unit-tests/ga_scatter check_PROGRAMS += global/testing/unit-tests/ga_set_data check_PROGRAMS += global/testing/unit-tests/ga_set_diagonal check_PROGRAMS += global/testing/unit-tests/ga_set_restricted check_PROGRAMS += global/testing/unit-tests/ga_solve check_PROGRAMS += global/testing/unit-tests/ga_sync check_PROGRAMS += global/testing/unit-tests/ga_transpose2 check_PROGRAMS += global/testing/unit-tests/ga_transpose3 check_PROGRAMS += global/testing/unit-tests/ga_transpose check_PROGRAMS += global/testing/unit-tests/ga_zero check_PROGRAMS += global/testing/unit-tests/ga_zerodiagonal check_PROGRAMS += global/testing/unit-tests/ga_zeropatch2 check_PROGRAMS += global/testing/unit-tests/ga_zeropatch endif GLOBAL_SERIAL_TESTS = GLOBAL_SERIAL_TESTS_XFAIL = GLOBAL_PARALLEL_TESTS = GLOBAL_PARALLEL_TESTS_XFAIL = GLOBAL_TESTS = $(GLOBAL_SERIAL_TESTS) $(GLOBAL_PARALLEL_TESTS) GLOBAL_TESTS_XFAIL = $(GLOBAL_SERIAL_TESTS_XFAIL) $(GLOBAL_PARALLEL_TESTS_XFAIL) #GLOBAL_PARALLEL_TESTS += global/testing/big$(EXEEXT) # needs lots of memory GLOBAL_PARALLEL_TESTS += global/testing/elempatch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/gatscat$(EXEEXT) # broken GLOBAL_PARALLEL_TESTS += global/testing/getmem$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/mtest$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/mulmatpatchc$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/ntestc$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/ntestfc$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/packc$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/patch_enumc$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/print$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/scan_addc$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/scan_copyc$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/testc$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/testmatmultc$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/testmult$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/testmultrect$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/unpackc$(EXEEXT) if ENABLE_F77 GLOBAL_PARALLEL_TESTS += global/testing/bin$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/blktest$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/d2test$(EXEEXT) # needs input file GLOBAL_PARALLEL_TESTS += global/testing/g2test$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/g3test$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/ga_lu$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/ga_shift$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/ghosts$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/jacobi$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/mir_perf2$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/mmatrix$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/mulmatpatch$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/nb2test$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/ndim$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/patch$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/patch2$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/patch_enumf$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/perfmod$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/perform$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/perf$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/perf2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/pg2testmatmult$(EXEEXT) # needs 8 procs exactly GLOBAL_PARALLEL_TESTS += global/testing/pg2test$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/pgtestmatmult$(EXEEXT) # needs 8 procs exactly GLOBAL_PARALLEL_TESTS += global/testing/pgtest$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/random$(EXEEXT) # takes too long GLOBAL_PARALLEL_TESTS += global/testing/scan$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/simple_groups$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/sparse$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/sprsmatmult$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/stride$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/testeig$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/testmatmult$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/testsolve$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/test$(EXEEXT) if HAVE_SCALAPACK GLOBAL_PARALLEL_TESTS += global/testing/testspd$(EXEEXT) endif else if HAVE_LAPACK GLOBAL_PARALLEL_TESTS += global/testing/ga_lu$(EXEEXT) endif endif if MSG_COMMS_MPI GLOBAL_PARALLEL_TESTS += global/testing/ga-mpi$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/lock$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/simple_groups_comm$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/simple_groups_commc$(EXEEXT) endif if SYSV #GLOBAL_PARALLEL_TESTS += global/testing/ipc_clean$(EXEEXT) endif #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_abs_value$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_acc$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_add$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_add_constant$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_add_constantpatch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_add_diagonal$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_add_patch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_copy2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_copy3$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_copy$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_copypatch2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_copypatch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_create1$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_create2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_create3$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_create$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_create_handle$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_create_irreg2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_create_irreg3$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_create_irreg$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_destroy$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_dgop$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_dot$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_duplicate$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_elem_divide$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_elem_dividepatch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_elem_maximum$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_elem_maximumpatch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_elem_minimum$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_elem_minimumpatch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_elem_multiply$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_elem_multiplypatch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_fill$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_fillpatch1$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_fillpatch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_gather2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_gather3$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_gather$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_get_blockinfo$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_get$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_get_diagonal$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_igop2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_igop$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_inquire$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_intialize$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_lgop$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_median$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_ndim2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_ndim$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_nnodes$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_nodeid$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_create2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_create3$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_create4$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_create5$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_create$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_destroy2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_destroy$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_nnodes_nodeid$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_setdefault$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_put2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_put$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_scale2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_scale$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_scale_cols$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_scale_patch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_scale_rows$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_scatter$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_set_data$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_set_diagonal$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_set_restricted$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_solve$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_sync$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_transpose2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_transpose3$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_transpose$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_zero$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_zerodiagonal$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_zeropatch2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_zeropatch$(EXEEXT) if HAVE_M4 GLOBAL_TESTING_M4_DEPS = GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_GA_FILL.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_main.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_NGA_ACC.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_NGA_ADD_PATCH.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_NGA_COPY_PATCH.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_NGA_DOT_PATCH.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_NGA_FILL_PATCH.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_NGA_GATHER.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_NGA_GET.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_NGA_PERIODIC_ACC.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_NGA_PERIODIC_GET.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_NGA_PERIODIC_PUT.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_NGA_PUT.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_NGA_SCALE_PATCH.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_NGA_SCATTER_ACC.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_NGA_SCATTER.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_util_comm.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ndim_util.src GLOBAL_TESTING_M4_DEPS += global/testing/ngatest_src/ngatest.def GLOBAL_TESTING_M4_DEPS += global/testing/nga-onesided.m4 GLOBAL_TESTING_M4_DEPS += global/testing/nga-patch.m4 GLOBAL_TESTING_M4_DEPS += global/testing/nga-periodic.m4 GLOBAL_TESTING_M4_DEPS += global/testing/nga-scatter.m4 GLOBAL_TESTING_M4_DEPS += global/testing/ngatest.m4 GLOBAL_TESTING_M4_DEPS += global/testing/nga-util.m4 EXTRA_DIST += $(GLOBAL_TESTING_M4_DEPS) EXTRA_DIST += global/testing/README global/testing/nga-onesided.F: $(GLOBAL_TESTING_M4_DEPS) global/testing/nga-patch.F: $(GLOBAL_TESTING_M4_DEPS) global/testing/nga-periodic.F: $(GLOBAL_TESTING_M4_DEPS) global/testing/nga-scatter.F: $(GLOBAL_TESTING_M4_DEPS) global/testing/nga-util.F: $(GLOBAL_TESTING_M4_DEPS) global/testing/ngatest.F: $(GLOBAL_TESTING_M4_DEPS) CLEANFILES += global/testing/nga-onesided.F CLEANFILES += global/testing/nga-patch.F CLEANFILES += global/testing/nga-periodic.F CLEANFILES += global/testing/nga-scatter.F CLEANFILES += global/testing/nga-util.F CLEANFILES += global/testing/ngatest.F if ENABLE_F77 check_PROGRAMS += global/testing/nga-onesided check_PROGRAMS += global/testing/nga-patch check_PROGRAMS += global/testing/nga-periodic check_PROGRAMS += global/testing/nga-scatter check_PROGRAMS += global/testing/nga-util check_PROGRAMS += global/testing/ngatest endif if ENABLE_F77 GLOBAL_PARALLEL_TESTS += global/testing/nga-onesided$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/nga-patch$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/nga-periodic$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/nga-scatter$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/nga-scatter$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/nga-util$(EXEEXT) GLOBAL_PARALLEL_TESTS += global/testing/ngatest$(EXEEXT) endif .m4.F: $(M4_V) \ $(M4) -I$(top_srcdir)/global/testing $< > $@ endif gtsrc = gtsrc += global/testing/testutil.fh gtsrc += global/testing/testutil.h gtsrc += global/testing/util.c if ENABLE_F77 gtsrc += global/testing/ffflush.F gtsrc += global/testing/testblas.F endif global_testing_big_SOURCES = global/testing/big.c $(gtsrc) global_testing_bin_SOURCES = global/testing/bin.F $(gtsrc) global_testing_blktest_SOURCES = global/testing/blktest.F $(gtsrc) global_testing_d2test_SOURCES = global/testing/d2test.F $(gtsrc) global_testing_elempatch_SOURCES = global/testing/elempatch.c $(gtsrc) global_testing_field_test_SOURCES = global/testing/field-test.F $(gtsrc) global_testing_g2test_SOURCES = global/testing/g2test.F $(gtsrc) global_testing_g3test_SOURCES = global/testing/g3test.F $(gtsrc) global_testing_ga_lu_SOURCES = global/testing/ga_lu.c $(gtsrc) global_testing_ga_mpi_SOURCES = global/testing/ga-mpi.c $(gtsrc) global_testing_ga_shift_SOURCES = global/testing/ga_shift.F $(gtsrc) global_testing_gatscat_SOURCES = global/testing/gatscat.c $(gtsrc) global_testing_getmem_SOURCES = global/testing/getmem.c $(gtsrc) global_testing_ghosts_SOURCES = global/testing/ghosts.F $(gtsrc) global_testing_ipc_clean_SOURCES = global/testing/ipc.clean.c $(gtsrc) global_testing_jacobi_SOURCES = global/testing/jacobi.F $(gtsrc) global_testing_lock_SOURCES = global/testing/lock.c $(gtsrc) global_testing_mir_perf2_SOURCES = global/testing/mir_perf2.F $(gtsrc) global_testing_mmatrix_SOURCES = global/testing/mmatrix.F $(gtsrc) global_testing_mtest_SOURCES = global/testing/mtest.c $(gtsrc) global_testing_mulmatpatch_SOURCES = global/testing/mulmatpatch.F $(gtsrc) global_testing_mulmatpatchc_SOURCES = global/testing/mulmatpatchc.c $(gtsrc) global_testing_nb2test_SOURCES = global/testing/nb2test.F $(gtsrc) global_testing_ndim_SOURCES = global/testing/ndim.F $(gtsrc) global_testing_ntestc_SOURCES = global/testing/ntestc.c $(gtsrc) global_testing_ntestfc_SOURCES = global/testing/ntestfc.c $(gtsrc) global_testing_packc_SOURCES = global/testing/packc.c $(gtsrc) global_testing_patch_SOURCES = global/testing/patch.F $(gtsrc) global_testing_patch2_SOURCES = global/testing/patch2.F $(gtsrc) global_testing_patch_enumc_SOURCES = global/testing/patch_enumc.c $(gtsrc) global_testing_patch_enumf_SOURCES = global/testing/patch_enumf.F $(gtsrc) global_testing_perf_SOURCES = global/testing/perf.F $(gtsrc) global_testing_perf2_SOURCES = global/testing/perf2.c $(gtsrc) global_testing_perfmod_SOURCES = global/testing/perfmod.F $(gtsrc) global_testing_perform_SOURCES = global/testing/perform.F $(gtsrc) global_testing_pg2test_SOURCES = global/testing/pg2test.F $(gtsrc) global_testing_pg2testmatmult_SOURCES = global/testing/pg2testmatmult.F $(gtsrc) global_testing_pgtest_SOURCES = global/testing/pgtest.F $(gtsrc) global_testing_pgtestmatmult_SOURCES = global/testing/pgtestmatmult.F $(gtsrc) global_testing_print_SOURCES = global/testing/print.c $(gtsrc) global_testing_random_SOURCES = global/testing/random.F $(gtsrc) global_testing_scan_SOURCES = global/testing/scan.F $(gtsrc) global_testing_scan_addc_SOURCES = global/testing/scan_addc.c $(gtsrc) global_testing_scan_copyc_SOURCES = global/testing/scan_copyc.c $(gtsrc) global_testing_simple_groups_SOURCES = global/testing/simple_groups.F $(gtsrc) global_testing_simple_groups_comm_SOURCES = global/testing/simple_groups_comm.F $(gtsrc) global_testing_simple_groups_commc_SOURCES = global/testing/simple_groups_commc.c $(gtsrc) global_testing_sparse_SOURCES = global/testing/sparse.F $(gtsrc) global_testing_sprsmatmult_SOURCES = global/testing/sprsmatmult.F $(gtsrc) global_testing_stride_SOURCES = global/testing/stride.F $(gtsrc) global_testing_test_SOURCES = global/testing/test.F $(gtsrc) global_testing_test_mirrored_SOURCES = global/testing/test.F $(gtsrc) global_testing_testc_SOURCES = global/testing/testc.c $(gtsrc) global_testing_testeig_SOURCES = global/testing/testeig.F $(gtsrc) global_testing_testmatmult_SOURCES = global/testing/testmatmult.F $(gtsrc) global_testing_testmatmultc_SOURCES = global/testing/testmatmultc.c $(gtsrc) global_testing_testmult_SOURCES = global/testing/testmult.c $(gtsrc) global_testing_testmultrect_SOURCES = global/testing/testmultrect.c $(gtsrc) global_testing_testsolve_SOURCES = global/testing/testsolve.F $(gtsrc) global_testing_testspd_SOURCES = global/testing/testspd.F $(gtsrc) global_testing_types_test_SOURCES = global/testing/types-test.F $(gtsrc) global_testing_unpackc_SOURCES = global/testing/unpackc.c $(gtsrc) nodist_global_testing_nga_onesided_SOURCES = global/testing/nga-onesided.F $(gtsrc) nodist_global_testing_nga_patch_SOURCES = global/testing/nga-patch.F $(gtsrc) nodist_global_testing_nga_periodic_SOURCES = global/testing/nga-periodic.F $(gtsrc) nodist_global_testing_nga_scatter_SOURCES = global/testing/nga-scatter.F $(gtsrc) nodist_global_testing_nga_util_SOURCES = global/testing/nga-util.F $(gtsrc) nodist_global_testing_ngatest_SOURCES = global/testing/ngatest.F $(gtsrc) UNIT_TEST_EXTRA_SRC = UNIT_TEST_EXTRA_SRC += global/testing/unit-tests/mock.c UNIT_TEST_EXTRA_SRC += global/testing/unit-tests/mock.h global_testing_unit_tests_ga_abs_value_SOURCES = global/testing/unit-tests/ga_abs_value.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_acc_SOURCES = global/testing/unit-tests/ga_acc.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_add_SOURCES = global/testing/unit-tests/ga_add.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_add_constant_SOURCES = global/testing/unit-tests/ga_add_constant.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_add_constantpatch_SOURCES = global/testing/unit-tests/ga_add_constantpatch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_add_diagonal_SOURCES = global/testing/unit-tests/ga_add_diagonal.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_add_patch_SOURCES = global/testing/unit-tests/ga_add_patch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_copy2_SOURCES = global/testing/unit-tests/ga_copy2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_copy3_SOURCES = global/testing/unit-tests/ga_copy3.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_copy_SOURCES = global/testing/unit-tests/ga_copy.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_copypatch2_SOURCES = global/testing/unit-tests/ga_copypatch2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_copypatch_SOURCES = global/testing/unit-tests/ga_copypatch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_create1_SOURCES = global/testing/unit-tests/ga_create1.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_create2_SOURCES = global/testing/unit-tests/ga_create2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_create3_SOURCES = global/testing/unit-tests/ga_create3.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_create_SOURCES = global/testing/unit-tests/ga_create.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_create_handle_SOURCES = global/testing/unit-tests/ga_create_handle.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_create_irreg2_SOURCES = global/testing/unit-tests/ga_create_irreg2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_create_irreg3_SOURCES = global/testing/unit-tests/ga_create_irreg3.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_create_irreg_SOURCES = global/testing/unit-tests/ga_create_irreg.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_destroy_SOURCES = global/testing/unit-tests/ga_destroy.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_dgop_SOURCES = global/testing/unit-tests/ga_dgop.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_dot_SOURCES = global/testing/unit-tests/ga_dot.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_duplicate_SOURCES = global/testing/unit-tests/ga_duplicate.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_elem_divide_SOURCES = global/testing/unit-tests/ga_elem_divide.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_elem_dividepatch_SOURCES = global/testing/unit-tests/ga_elem_dividepatch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_elem_maximum_SOURCES = global/testing/unit-tests/ga_elem_maximum.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_elem_maximumpatch_SOURCES = global/testing/unit-tests/ga_elem_maximumpatch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_elem_minimum_SOURCES = global/testing/unit-tests/ga_elem_minimum.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_elem_minimumpatch_SOURCES = global/testing/unit-tests/ga_elem_minimumpatch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_elem_multiply_SOURCES = global/testing/unit-tests/ga_elem_multiply.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_elem_multiplypatch_SOURCES = global/testing/unit-tests/ga_elem_multiplypatch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_fill_SOURCES = global/testing/unit-tests/ga_fill.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_fillpatch1_SOURCES = global/testing/unit-tests/ga_fillpatch1.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_fillpatch_SOURCES = global/testing/unit-tests/ga_fillpatch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_gather2_SOURCES = global/testing/unit-tests/ga_gather2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_gather3_SOURCES = global/testing/unit-tests/ga_gather3.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_gather_SOURCES = global/testing/unit-tests/ga_gather.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_get_blockinfo_SOURCES = global/testing/unit-tests/ga_get_blockinfo.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_get_SOURCES = global/testing/unit-tests/ga_get.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_get_diagonal_SOURCES = global/testing/unit-tests/ga_get_diagonal.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_igop2_SOURCES = global/testing/unit-tests/ga_igop2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_igop_SOURCES = global/testing/unit-tests/ga_igop.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_inquire_SOURCES = global/testing/unit-tests/ga_inquire.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_intialize_SOURCES = global/testing/unit-tests/ga_intialize.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_lgop_SOURCES = global/testing/unit-tests/ga_lgop.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_median_SOURCES = global/testing/unit-tests/ga_median.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_ndim2_SOURCES = global/testing/unit-tests/ga_ndim2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_ndim_SOURCES = global/testing/unit-tests/ga_ndim.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_nnodes_SOURCES = global/testing/unit-tests/ga_nnodes.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_nodeid_SOURCES = global/testing/unit-tests/ga_nodeid.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_create2_SOURCES = global/testing/unit-tests/ga_pgroup_create2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_create3_SOURCES = global/testing/unit-tests/ga_pgroup_create3.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_create4_SOURCES = global/testing/unit-tests/ga_pgroup_create4.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_create5_SOURCES = global/testing/unit-tests/ga_pgroup_create5.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_create_SOURCES = global/testing/unit-tests/ga_pgroup_create.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_destroy2_SOURCES = global/testing/unit-tests/ga_pgroup_destroy2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_destroy_SOURCES = global/testing/unit-tests/ga_pgroup_destroy.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_nnodes_nodeid_SOURCES = global/testing/unit-tests/ga_pgroup_nnodes_nodeid.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_setdefault_SOURCES = global/testing/unit-tests/ga_pgroup_setdefault.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_put2_SOURCES = global/testing/unit-tests/ga_put2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_put_SOURCES = global/testing/unit-tests/ga_put.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_scale2_SOURCES = global/testing/unit-tests/ga_scale2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_scale_SOURCES = global/testing/unit-tests/ga_scale.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_scale_cols_SOURCES = global/testing/unit-tests/ga_scale_cols.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_scale_patch_SOURCES = global/testing/unit-tests/ga_scale_patch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_scale_rows_SOURCES = global/testing/unit-tests/ga_scale_rows.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_scatter_SOURCES = global/testing/unit-tests/ga_scatter.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_set_data_SOURCES = global/testing/unit-tests/ga_set_data.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_set_diagonal_SOURCES = global/testing/unit-tests/ga_set_diagonal.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_set_restricted_SOURCES = global/testing/unit-tests/ga_set_restricted.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_solve_SOURCES = global/testing/unit-tests/ga_solve.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_sync_SOURCES = global/testing/unit-tests/ga_sync.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_transpose2_SOURCES = global/testing/unit-tests/ga_transpose2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_transpose3_SOURCES = global/testing/unit-tests/ga_transpose3.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_transpose_SOURCES = global/testing/unit-tests/ga_transpose.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_zero_SOURCES = global/testing/unit-tests/ga_zero.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_zerodiagonal_SOURCES = global/testing/unit-tests/ga_zerodiagonal.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_zeropatch2_SOURCES = global/testing/unit-tests/ga_zeropatch2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_zeropatch_SOURCES = global/testing/unit-tests/ga_zeropatch.c $(UNIT_TEST_EXTRA_SRC) global_testing_bin_LDFLAGS = $(FLDFLAGS) global_testing_blktest_LDFLAGS = $(FLDFLAGS) global_testing_d2test_LDFLAGS = $(FLDFLAGS) global_testing_field_test_LDFLAGS = $(FLDFLAGS) global_testing_g2test_LDFLAGS = $(FLDFLAGS) global_testing_g3test_LDFLAGS = $(FLDFLAGS) global_testing_ga_shift_LDFLAGS = $(FLDFLAGS) global_testing_ghosts_LDFLAGS = $(FLDFLAGS) global_testing_jacobi_LDFLAGS = $(FLDFLAGS) global_testing_mir_perf2_LDFLAGS = $(FLDFLAGS) global_testing_mmatrix_LDFLAGS = $(FLDFLAGS) global_testing_mulmatpatch_LDFLAGS = $(FLDFLAGS) global_testing_nb2test_LDFLAGS = $(FLDFLAGS) global_testing_ndim_LDFLAGS = $(FLDFLAGS) global_testing_nga_onesided_LDFLAGS = $(FLDFLAGS) global_testing_nga_patch_LDFLAGS = $(FLDFLAGS) global_testing_nga_periodic_LDFLAGS = $(FLDFLAGS) global_testing_nga_scatter_LDFLAGS = $(FLDFLAGS) global_testing_ngatest_LDFLAGS = $(FLDFLAGS) global_testing_nga_util_LDFLAGS = $(FLDFLAGS) global_testing_patch_enumf_LDFLAGS = $(FLDFLAGS) global_testing_patch_LDFLAGS = $(FLDFLAGS) global_testing_patch2_LDFLAGS = $(FLDFLAGS) global_testing_perf_LDFLAGS = $(FLDFLAGS) global_testing_perfmod_LDFLAGS = $(FLDFLAGS) global_testing_perform_LDFLAGS = $(FLDFLAGS) global_testing_pg2test_LDFLAGS = $(FLDFLAGS) global_testing_pg2testmatmult_LDFLAGS = $(FLDFLAGS) global_testing_pgtest_LDFLAGS = $(FLDFLAGS) global_testing_pgtestmatmult_LDFLAGS = $(FLDFLAGS) global_testing_random_LDFLAGS = $(FLDFLAGS) global_testing_scan_LDFLAGS = $(FLDFLAGS) global_testing_simple_groups_LDFLAGS = $(FLDFLAGS) global_testing_simple_groups_comm_LDFLAGS = $(FLDFLAGS) global_testing_sparse_LDFLAGS = $(FLDFLAGS) global_testing_sprsmatmult_LDFLAGS = $(FLDFLAGS) global_testing_stride_LDFLAGS = $(FLDFLAGS) global_testing_testeig_LDFLAGS = $(FLDFLAGS) global_testing_test_LDFLAGS = $(FLDFLAGS) global_testing_test_mirrored_LDFLAGS = $(FLDFLAGS) global_testing_testmatmult_LDFLAGS = $(FLDFLAGS) global_testing_testsolve_LDFLAGS = $(FLDFLAGS) global_testing_testspd_LDFLAGS = $(FLDFLAGS) global_testing_types_test_LDFLAGS = $(FLDFLAGS) nodist_EXTRA_global_testing_big_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_elempatch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_ga_lu_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_ga_mpi_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_gatscat_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_getmem_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_ipc_clean_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_lock_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_mtest_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_mulmatpatchc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_ntestc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_ntestfc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_packc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_patch_enumc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_perf2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_print_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_scan_addc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_scan_copyc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_simple_groups_commc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_testc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_testmatmultc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_testmult_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_testmultrect_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unpackc_SOURCES = $(MAYBE_DUMMY_F_LINK) global_testing_test_mirrored_CPPFLAGS = $(AM_CPPFLAGS) -DMIRROR=1 nodist_EXTRA_global_testing_unit_tests_ga_abs_value_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_acc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_add_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_add_constant_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_add_constantpatch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_add_diagonal_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_add_patch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_copy2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_copy3_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_copy_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_copypatch2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_copypatch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_create1_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_create2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_create3_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_create_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_create_handle_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_create_irreg2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_create_irreg3_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_create_irreg_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_destroy_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_dgop_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_dot_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_duplicate_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_elem_divide_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_elem_dividepatch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_elem_maximum_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_elem_maximumpatch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_elem_minimum_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_elem_minimumpatch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_elem_multiply_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_elem_multiplypatch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_fill_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_fillpatch1_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_fillpatch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_gather2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_gather3_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_gather_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_get_blockinfo_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_get_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_get_diagonal_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_igop2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_igop_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_inquire_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_intialize_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_lgop_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_median_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_ndim2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_ndim_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_nnodes_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_nodeid_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_create2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_create3_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_create4_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_create5_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_create_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_destroy2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_destroy_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_nnodes_nodeid_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_setdefault_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_put2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_put_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_scale2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_scale_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_scale_cols_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_scale_patch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_scale_rows_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_scatter_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_set_data_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_set_diagonal_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_set_restricted_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_solve_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_sync_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_transpose2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_transpose3_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_transpose_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_zero_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_zerodiagonal_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_zeropatch2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_zeropatch_SOURCES = $(MAYBE_DUMMY_F_LINK) ############################################################################## # global/examples # check_PROGRAMS += global/examples/lennard-jones/lennard if ENABLE_F77 check_PROGRAMS += global/examples/boltzmann/boltz check_PROGRAMS += global/examples/conjugate_gradient/ga_cg check_PROGRAMS += global/examples/md_cluster/grp_sim check_PROGRAMS += global/examples/scf/scf endif GLOBAL_PARALLEL_TESTS += global/examples/lennard-jones/lennard$(EXEEXT) if ENABLE_F77 GLOBAL_PARALLEL_TESTS += global/examples/boltzmann/boltz$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/examples/conjugate_gradient/ga_cg$(EXEEXT) # needs input #GLOBAL_PARALLEL_TESTS += global/examples/md_cluster/grp_sim$(EXEEXT) # needs input #GLOBAL_PARALLEL_TESTS += global/examples/scf/scf$(EXEEXT) # needs input endif global_examples_boltzmann_boltz_SOURCES = \ global/examples/boltzmann/boltzmann.F \ global/examples/boltzmann/common \ global/examples/boltzmann/equil.F \ global/examples/boltzmann/get_patch.F \ global/examples/boltzmann/initpar.F \ global/examples/boltzmann/main.F \ global/examples/boltzmann/printdat.F \ global/examples/boltzmann/properties.F \ global/examples/boltzmann/setup.F \ global/examples/boltzmann/timestep.F \ global/examples/boltzmann/vorticity.F global_examples_boltzmann_boltz_LDFLAGS = $(FLDFLAGS) global_examples_boltzmann_boltz_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/global/examples/boltzmann global_examples_conjugate_gradient_ga_cg_SOURCES = \ global/examples/conjugate_gradient/computeloops.F \ global/examples/conjugate_gradient/finclude.h \ global/examples/conjugate_gradient/ga_cg.c \ global/examples/conjugate_gradient/matvecmul.c \ global/examples/conjugate_gradient/read_input.c global_examples_lennard_jones_lennard_SOURCES = \ global/examples/lennard-jones/lennard.c nodist_EXTRA_global_examples_lennard_jones_lennard_SOURCES = $(MAYBE_DUMMY_F_LINK) global_examples_md_cluster_grp_sim_SOURCES = \ global/examples/md_cluster/cell_list.F \ global/examples/md_cluster/cl_sim.F \ global/examples/md_cluster/cluster.F \ global/examples/md_cluster/common.fh \ global/examples/md_cluster/estats.F \ global/examples/md_cluster/factor.F \ global/examples/md_cluster/force.F \ global/examples/md_cluster/gather.F \ global/examples/md_cluster/grp_sim.F \ global/examples/md_cluster/hash.F \ global/examples/md_cluster/heapsort.F \ global/examples/md_cluster/kin.F \ global/examples/md_cluster/mdinit.F \ global/examples/md_cluster/mdout.F \ global/examples/md_cluster/mdstep.F \ global/examples/md_cluster/newcfg.F \ global/examples/md_cluster/nextc.F \ global/examples/md_cluster/pairs.F \ global/examples/md_cluster/ran3.F \ global/examples/md_cluster/rdpar.F \ global/examples/md_cluster/scatter.F \ global/examples/md_cluster/shuffle.F \ global/examples/md_cluster/sort.F \ global/examples/md_cluster/tstats.F \ global/examples/md_cluster/update.F global_examples_md_cluster_grp_sim_LDFLAGS = $(FLDFLAGS) global_examples_scf_scf_SOURCES = \ global/examples/scf/cscf.h \ global/examples/scf/input.F \ global/examples/scf/integ.F \ global/examples/scf/output.F \ global/examples/scf/scf.F \ global/examples/scf/timer.F global_examples_scf_scf_LDFLAGS = $(FLDFLAGS) EXTRA_DIST += global/examples/boltzmann/README EXTRA_DIST += global/examples/lennard-jones/README EXTRA_DIST += global/examples/md_cluster/atom.inp EXTRA_DIST += global/examples/scf/be16.inpt EXTRA_DIST += global/examples/scf/be.inpt EXTRA_DIST += global/examples/scf/ft-scf.F EXTRA_DIST += global/examples/scf/README ############################################################################## # global/X # if ENABLE_XREGION if NO_X else bin_PROGRAMS += global/X/xregion global_X_xregion_SOURCES = \ global/X/xregion_colormap.c \ global/X/xregion_dialog.c \ global/X/xregion_display.c \ global/X/xregion_fileio.c \ global/X/xregion_main.c \ global/X/xregion_overview.c \ global/X/xregion_pixregion.c \ global/X/xregion_scrollbars.c \ global/X/xregion_util.c \ global/X/xregion_view.c \ global/X/xregion_xcmap.c global_X_xregion_CPPFLAGS = $(X_CPPFLAGS) global_X_xregion_LDFLAGS = $(X_LDFLAGS) global_X_xregion_LDADD = -lXaw -lXmu -lXt -lX11 -lXau -lXdmcp -lXext endif endif EXTRA_DIST += global/X/README ############################################################################## # global/trace # bin_PROGRAMS += global/trace/adjust bin_PROGRAMS += global/trace/collisions global_trace_adjust_SOURCES = global/trace/adjust.c global_trace_adjust_LDFLAGS = global_trace_adjust_LDADD = global_trace_collisions_SOURCES = global/trace/collisions.c global_trace_collisions_LDFLAGS = global_trace_collisions_LDADD = EXTRA_DIST += global/trace/README EXTRA_DIST += global/trace/test.f ############################################################################## # global/doc # EXTRA_DIST += global/doc/README EXTRA_DIST += global/doc/Supercomputing94.pdf EXTRA_DIST += global/doc/user.pdf ############################################################################## # pario # libga_la_SOURCES += pario/dra/buffers.c libga_la_SOURCES += pario/dra/buffers.h libga_la_SOURCES += pario/dra/capi.c libga_la_SOURCES += pario/dra/disk.arrays.c libga_la_SOURCES += pario/dra/disk.param.c libga_la_SOURCES += pario/dra/draf2c.h libga_la_SOURCES += pario/dra/drap.h libga_la_SOURCES += pario/dra/env.c libga_la_SOURCES += pario/dra/fortran.c libga_la_SOURCES += pario/dra/patch.util.c libga_la_SOURCES += pario/eaf/eaf.c libga_la_SOURCES += pario/eaf/eaf_f2c.c libga_la_SOURCES += pario/eaf/eafP.h libga_la_SOURCES += pario/elio/elio.c libga_la_SOURCES += pario/elio/eliop.h libga_la_SOURCES += pario/elio/pablo.h libga_la_SOURCES += pario/elio/stat.c libga_la_SOURCES += pario/sf/sf_capi.c libga_la_SOURCES += pario/sf/sff2c.h libga_la_SOURCES += pario/sf/sf_fortran.c libga_la_SOURCES += pario/sf/shared.files.c include_HEADERS += pario/dra/dra.fh include_HEADERS += pario/dra/dra.h include_HEADERS += pario/eaf/eaf.fh include_HEADERS += pario/eaf/eaf.h include_HEADERS += pario/elio/chemio.h include_HEADERS += pario/elio/elio.h include_HEADERS += pario/sf/coms.h include_HEADERS += pario/sf/sf.fh include_HEADERS += pario/sf/sf.h AM_CPPFLAGS += -I$(top_srcdir)/pario/dra AM_CPPFLAGS += -I$(top_srcdir)/pario/eaf AM_CPPFLAGS += -I$(top_srcdir)/pario/elio AM_CPPFLAGS += -I$(top_srcdir)/pario/sf EXTRA_DIST += pario/dra/dbg_read.c EXTRA_DIST += pario/dra/dbg_write.c EXTRA_DIST += pario/dra/dra2arviz.c EXTRA_DIST += pario/dra/global.unsup.c if ENABLE_F77 check_PROGRAMS += pario/dra/big check_PROGRAMS += pario/dra/dra_mxm check_PROGRAMS += pario/dra/ntest check_PROGRAMS += pario/dra/perf check_PROGRAMS += pario/dra/perf2 check_PROGRAMS += pario/dra/perf3 check_PROGRAMS += pario/dra/test check_PROGRAMS += pario/dra/test_mxm check_PROGRAMS += pario/dra/time_mxm check_PROGRAMS += pario/eaf/test check_PROGRAMS += pario/sf/test endif check_PROGRAMS += pario/dra/bign check_PROGRAMS += pario/dra/dbg_read check_PROGRAMS += pario/dra/dbg_write check_PROGRAMS += pario/dra/dra2arviz check_PROGRAMS += pario/dra/ntestc check_PROGRAMS += pario/dra/perfn check_PROGRAMS += pario/dra/rate PARIO_SERIAL_TESTS = PARIO_SERIAL_TESTS_XFAIL = PARIO_PARALLEL_TESTS = PARIO_PARALLEL_TESTS_XFAIL = PARIO_TESTS = $(PARIO_SERIAL_TESTS) $(PARIO_PARALLEL_TESTS) PARIO_TESTS_XFAIL = $(PARIO_SERIAL_TESTS_XFAIL) $(PARIO_PARALLEL_TESTS_XFAIL) PARIO_PARALLEL_TESTS += pario/dra/bign$(EXEEXT) #PARIO_PARALLEL_TESTS += pario/dra/dbg_read$(EXEEXT) # barely compiles, wrong test #PARIO_PARALLEL_TESTS += pario/dra/dbg_write$(EXEEXT) # barely compiles, wrong test #PARIO_PARALLEL_TESTS += pario/dra/dra2arviz$(EXEEXT) # not a test? PARIO_PARALLEL_TESTS += pario/dra/ntestc$(EXEEXT) PARIO_PARALLEL_TESTS += pario/dra/perfn$(EXEEXT) PARIO_PARALLEL_TESTS += pario/dra/rate$(EXEEXT) dtsrc = dtsrc += pario/dra/ffflush.F dtsrc += pario/dra/util.c pario_dra_big_SOURCES = pario/dra/big.F $(dtsrc) pario_dra_bign_SOURCES = pario/dra/bign.c pario_dra_dbg_read_SOURCES = pario/dra/dbg_read.c pario_dra_dbg_write_SOURCES = pario/dra/dbg_write.c pario_dra_dra2arviz_SOURCES = pario/dra/dra2arviz.c pario_dra_dra_mxm_SOURCES = pario/dra/dra_mxm.F $(dtsrc) pario_dra_ntest_SOURCES = pario/dra/ntest.F $(dtsrc) pario_dra_ntestc_SOURCES = pario/dra/ntestc.c pario_dra_perf_SOURCES = pario/dra/perf.F $(dtsrc) pario_dra_perf2_SOURCES = pario/dra/perf2.F $(dtsrc) pario_dra_perf3_SOURCES = pario/dra/perf3.F $(dtsrc) pario_dra_perfn_SOURCES = pario/dra/perfn.c pario_dra_rate_SOURCES = pario/dra/rate.c pario_dra_test_SOURCES = pario/dra/test.F $(dtsrc) pario_dra_test_mxm_SOURCES = pario/dra/test_mxm.F $(dtsrc) pario_dra_time_mxm_SOURCES = pario/dra/time_mxm.F $(dtsrc) pario_eaf_test_SOURCES = pario/eaf/test.F $(dtsrc) pario_sf_test_SOURCES = pario/sf/test.F $(dtsrc) nodist_EXTRA_pario_dra_bign_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_pario_dra_dbg_read_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_pario_dra_dbg_write_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_pario_dra_dra2arviz_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_pario_dra_ntestc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_pario_dra_perfn_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_pario_dra_rate_SOURCES = $(MAYBE_DUMMY_F_LINK) pario_dra_big_LDFLAGS = $(FLDFLAGS) pario_dra_dra_mxm_LDFLAGS = $(FLDFLAGS) pario_dra_ntest_LDFLAGS = $(FLDFLAGS) pario_dra_perf_LDFLAGS = $(FLDFLAGS) pario_dra_perf2_LDFLAGS = $(FLDFLAGS) pario_dra_perf3_LDFLAGS = $(FLDFLAGS) pario_dra_test_LDFLAGS = $(FLDFLAGS) pario_dra_test_mxm_LDFLAGS = $(FLDFLAGS) pario_dra_time_mxm_LDFLAGS = $(FLDFLAGS) pario_eaf_test_LDFLAGS = $(FLDFLAGS) pario_sf_test_LDFLAGS = $(FLDFLAGS) EXTRA_DIST += pario/dra/README ############################################################################## # ga++/src # if CXX_BINDINGS lib_LTLIBRARIES += libga++.la libga___la_SOURCES = libga___la_SOURCES += ga++/src/GAServices.cc libga___la_SOURCES += ga++/src/GlobalArray.cc libga___la_SOURCES += ga++/src/PGroup.cc libga___la_SOURCES += ga++/src/init_term.cc libga___la_SOURCES += ga++/src/overload.cc libga___la_SOURCES += ga++/src/services.cc include_HEADERS += ga++/src/ga++.h include_HEADERS += ga++/src/GAServices.h include_HEADERS += ga++/src/GlobalArray.h include_HEADERS += ga++/src/init_term.h include_HEADERS += ga++/src/PGroup.h include_HEADERS += ga++/src/services.h AM_CPPFLAGS += -I$(top_srcdir)/ga++/src endif # CXX_BINDINGS EXTRA_DIST += ga++/README ############################################################################## # ga++/testing # if CXX_BINDINGS check_PROGRAMS += ga++/testing/elempatch check_PROGRAMS += ga++/testing/mtest check_PROGRAMS += ga++/testing/ntestc check_PROGRAMS += ga++/testing/testc check_PROGRAMS += ga++/testing/testmult CXX_SERIAL_TESTS = CXX_SERIAL_TESTS_XFAIL = CXX_PARALLEL_TESTS = CXX_PARALLEL_TESTS_XFAIL = CXX_TESTS = $(CXX_SERIAL_TESTS) $(CXX_PARALLEL_TESTS) CXX_TESTS_XFAIL = $(CXX_SERIAL_TESTS_XFAIL) $(CXX_PARALLEL_TESTS_XFAIL) CXX_PARALLEL_TESTS += ga++/testing/elempatch$(EXEEXT) CXX_PARALLEL_TESTS += ga++/testing/mtest$(EXEEXT) CXX_PARALLEL_TESTS += ga++/testing/ntestc$(EXEEXT) CXX_PARALLEL_TESTS += ga++/testing/testc$(EXEEXT) CXX_PARALLEL_TESTS += ga++/testing/testmult$(EXEEXT) ga___testing_elempatch_SOURCES = ga++/testing/elempatch.cc ga___testing_mtest_SOURCES = ga++/testing/mtest.cc ga___testing_ntestc_SOURCES = ga++/testing/ntestc.cc \ ga++/testing/util.c ga___testing_testc_SOURCES = ga++/testing/testc.cc ga___testing_testmult_SOURCES = ga++/testing/testmult.cc ga___testing_elempatch_LDADD = libga++.la $(LDADD) $(MAYBE_FLIBS) ga___testing_mtest_LDADD = libga++.la $(LDADD) $(MAYBE_FLIBS) ga___testing_ntestc_LDADD = libga++.la $(LDADD) $(MAYBE_FLIBS) ga___testing_testc_LDADD = libga++.la $(LDADD) $(MAYBE_FLIBS) ga___testing_testmult_LDADD = libga++.la $(LDADD) $(MAYBE_FLIBS) ga___testing_elempatch_LDFLAGS = $(FLDFLAGS) ga___testing_mtest_LDFLAGS = $(FLDFLAGS) ga___testing_ntestc_LDFLAGS = $(FLDFLAGS) ga___testing_testc_LDFLAGS = $(FLDFLAGS) ga___testing_testmult_LDFLAGS = $(FLDFLAGS) endif # CXX_BINDINGS ############################################################################## # python # if HAVE_PYTHON python: install (cd $(top_srcdir)/python && $(PYTHON) setup.py build_ext -L$(libdir) -I$(includedir)) || exit 1 (cd $(top_srcdir)/python && $(PYTHON) setup.py install) || exit 1 endif ############################################################################## # gparrays # if ENABLE_GPARRAYS GPPAPI_H = $(top_srcdir)/gparrays/src/gp-papi.h gparrays/src/gp-wapi.h: $(GPPAPI_H) @-rm -f $@ $(SED_V) \ $(SED) -e "s/GPPAPI/GPWAPI/g" \ -e "s/pgp_/wgp_/g" \ -e "/typedef/d" \ $(GPPAPI_H) > $@ gparrays/src/gp-wapidefs.h: $(GPPAPI_H) @-rm -f $@ $(SED_V) \ $(SED) -e "s/GPPAPI/GPWAPIDEFS/g" \ -e "s/^.*p\(gp_.*\)(.*$$/#define w\1 p\1/g" \ -e "/^ /d" \ -e "/^\/\*/d" \ -e "/^ \*/d" \ -e "/typedef/d" \ -e "/include/d" \ $(GPPAPI_H) > $@ BUILT_SOURCES += gparrays/src/gp-wapi.h BUILT_SOURCES += gparrays/src/gp-wapidefs.h CLEANFILES += gparrays/src/gp-wapi.h CLEANFILES += gparrays/src/gp-wapidefs.h libga_la_SOURCES += gparrays/src/gpbase.c libga_la_SOURCES += gparrays/src/gpbase.h libga_la_SOURCES += gparrays/src/gpcapi.c libga_la_SOURCES += gparrays/src/gpfapi.c libga_la_SOURCES += gparrays/src/gponesided.c libga_la_SOURCES += gparrays/src/gp-papi.h nodist_libga_la_SOURCES += gparrays/src/gp-wapidefs.h include_HEADERS += gparrays/src/gp.h include_HEADERS += gparrays/src/gp-papi.h nodist_include_HEADERS += gparrays/src/gp-wapi.h if ENABLE_F77 check_PROGRAMS += gparrays/testing/test endif check_PROGRAMS += gparrays/testing/testc check_PROGRAMS += gparrays/testing/transpose gparrays_testing_test_SOURCES = gparrays/testing/test.F gparrays_testing_testc_SOURCES = gparrays/testing/testc.c gparrays_testing_transpose_SOURCES = gparrays/testing/transpose.c nodist_EXTRA_gparrays_testing_testc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_gparrays_testing_transpose_SOURCES = $(MAYBE_DUMMY_F_LINK) gparrays_testing_test_LDFLAGS = $(FLDFLAGS) AM_CPPFLAGS += -I$(top_build_prefix)gparrays/src AM_CPPFLAGS += -I$(top_srcdir)/gparrays/src endif # ENABLE_GPARRAYS ############################################################################## # gaf2c # libga_la_SOURCES += gaf2c/gaf2c.c libga_la_SOURCES += gaf2c/drand.c if ENABLE_F77 libga_la_SOURCES += gaf2c/farg.F endif include_HEADERS += gaf2c/typesf2c.h include_HEADERS += gaf2c/farg.h AM_CPPFLAGS += -I$(top_build_prefix)gaf2c AM_CPPFLAGS += -I$(top_srcdir)/gaf2c if ENABLE_F77 check_PROGRAMS += gaf2c/testarg endif GAF2C_SERIAL_TESTS = GAF2C_SERIAL_TESTS_XFAIL = GAF2C_PARALLEL_TESTS = GAF2C_PARALLEL_TESTS_XFAIL = GAF2C_TESTS = $(GAF2C_SERIAL_TESTS) $(GAF2C_PARALLEL_TESTS) GAF2C_TESTS_XFAIL = $(GAF2C_SERIAL_TESTS_XFAIL) $(GAF2C_PARALLEL_TESTS_XFAIL) if ENABLE_F77 GAF2C_SERIAL_TESTS += gaf2c/testarg$(EXEEXT) endif gaf2c_testarg_SOURCES = gaf2c/testarg.c gaf2c/testargf.f gaf2c_testarg_LDFLAGS = $(FLDFLAGS) ############################################################################## # tcgmsg # libga_la_SOURCES += tcgmsg/capi.c libga_la_SOURCES += tcgmsg/fapi.c include_HEADERS += tcgmsg/tcgmsg.fh include_HEADERS += tcgmsg/tcgmsg.h include_HEADERS += tcgmsg/tcgmsg-mpi/msgtypesc.h include_HEADERS += tcgmsg/tcgmsg-mpi/msgtypesf.h AM_CPPFLAGS += -I$(top_srcdir)/tcgmsg ############################################################################## # tcgmsg/examples # # NOTE: While we don't build the tcgmsg examples, we include everything in the # distribution anyway. # EXTRA_DIST += tcgmsg/examples/blkdat120lin.f EXTRA_DIST += tcgmsg/examples/blkdat15.f EXTRA_DIST += tcgmsg/examples/blkdat240lin.f EXTRA_DIST += tcgmsg/examples/blkdat30.f EXTRA_DIST += tcgmsg/examples/blkdat60.f EXTRA_DIST += tcgmsg/examples/blkdat60lin.f EXTRA_DIST += tcgmsg/examples/cscf120lin.h EXTRA_DIST += tcgmsg/examples/cscf15.h EXTRA_DIST += tcgmsg/examples/cscf240lin.h EXTRA_DIST += tcgmsg/examples/cscf30.h EXTRA_DIST += tcgmsg/examples/cscf60.h EXTRA_DIST += tcgmsg/examples/cscf60lin.h EXTRA_DIST += tcgmsg/examples/cscf.h EXTRA_DIST += tcgmsg/examples/daxpy1.s EXTRA_DIST += tcgmsg/examples/daxpy.f EXTRA_DIST += tcgmsg/examples/ddot.f EXTRA_DIST += tcgmsg/examples/demo.proto EXTRA_DIST += tcgmsg/examples/diagon.f EXTRA_DIST += tcgmsg/examples/dscal.f EXTRA_DIST += tcgmsg/examples/fexit.f.proto EXTRA_DIST += tcgmsg/examples/getmem.c EXTRA_DIST += tcgmsg/examples/grid.c EXTRA_DIST += tcgmsg/examples/ieeetrap.c EXTRA_DIST += tcgmsg/examples/integ.f EXTRA_DIST += tcgmsg/examples/jacobi.f EXTRA_DIST += tcgmsg/examples/Makefile.proto EXTRA_DIST += tcgmsg/examples/mc.f EXTRA_DIST += tcgmsg/examples/mc.input EXTRA_DIST += tcgmsg/examples/md.f EXTRA_DIST += tcgmsg/examples/mxv_daxpy1.f EXTRA_DIST += tcgmsg/examples/mxv_dgemv.f EXTRA_DIST += tcgmsg/examples/mxv_fortran.f EXTRA_DIST += tcgmsg/examples/output.f EXTRA_DIST += tcgmsg/examples/prtri.f EXTRA_DIST += tcgmsg/examples/random.c EXTRA_DIST += tcgmsg/examples/README EXTRA_DIST += tcgmsg/examples/runit EXTRA_DIST += tcgmsg/examples/runit.grid EXTRA_DIST += tcgmsg/examples/scfblas.f EXTRA_DIST += tcgmsg/examples/scf.f EXTRA_DIST += tcgmsg/examples/timer.f EXTRA_DIST += tcgmsg/examples/trace.out EXTRA_DIST += tcgmsg/examples/xpix.shar ############################################################################## # tcgmsg/tcgmsg-mpi # if MSG_COMMS_MPI libga_la_SOURCES += tcgmsg/tcgmsg-mpi/checkbyte.c libga_la_SOURCES += tcgmsg/tcgmsg-mpi/clustercheck.c libga_la_SOURCES += tcgmsg/tcgmsg-mpi/collect.c libga_la_SOURCES += tcgmsg/tcgmsg-mpi/drand48.c libga_la_SOURCES += tcgmsg/tcgmsg-mpi/evlog.c libga_la_SOURCES += tcgmsg/tcgmsg-mpi/evlog.h libga_la_SOURCES += tcgmsg/tcgmsg-mpi/evon.c libga_la_SOURCES += tcgmsg/tcgmsg-mpi/llog.c libga_la_SOURCES += tcgmsg/tcgmsg-mpi/misc.c libga_la_SOURCES += tcgmsg/tcgmsg-mpi/niceftn.c libga_la_SOURCES += tcgmsg/tcgmsg-mpi/nxtval-armci.c libga_la_SOURCES += tcgmsg/tcgmsg-mpi/p2p.c libga_la_SOURCES += tcgmsg/tcgmsg-mpi/pbeginf.c libga_la_SOURCES += tcgmsg/tcgmsg-mpi/pfilecopy.c libga_la_SOURCES += tcgmsg/tcgmsg-mpi/sizeof.c libga_la_SOURCES += tcgmsg/tcgmsg-mpi/sndrcv.h libga_la_SOURCES += tcgmsg/tcgmsg-mpi/srftoc.h libga_la_SOURCES += tcgmsg/tcgmsg-mpi/tcgmsgP.h AM_CPPFLAGS += -I$(top_srcdir)/tcgmsg/tcgmsg-mpi check_PROGRAMS += tcgmsg/tests/test_asyn check_PROGRAMS += tcgmsg/tests/test if ENABLE_F77 check_PROGRAMS += tcgmsg/tests/testf endif #TCGMSG_PARALLEL_TESTS += tcgmsg/tests/test_asyn$(EXEEXT) # useless test #TCGMSG_PARALLEL_TESTS += tcgmsg/tests/test$(EXEEXT) # requires user input #if ENABLE_F77 #TCGMSG_PARALLEL_TESTS += tcgmsg/tests/testf$(EXEEXT) #endif tcgmsg_tests_test_asyn_SOURCES = tcgmsg/tests/test_asyn.c tcgmsg_tests_testf_SOURCES = tcgmsg/tests/testf.F tcgmsg_tests_test_SOURCES = tcgmsg/tests/test.c tcgmsg_tests_testf_LDFLAGS = $(FLDFLAGS) nodist_EXTRA_tcgmsg_tests_test_asyn_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_tcgmsg_tests_test_SOURCES = $(MAYBE_DUMMY_F_LINK) endif # MSG_COMMS_MPI EXTRA_DIST += tcgmsg/tcgmsg-mpi/README ############################################################################## # armci # if TCGMSG is coming from ARMCI if ARMCI_NETWORK_ARMCI else if MSG_COMMS_TCGMSG4 AM_CPPFLAGS += -I$(top_srcdir)/armci/tcgmsg endif if MSG_COMMS_TCGMSG5 AM_CPPFLAGS += -I$(top_srcdir)/armci/tcgmsg endif endif ############################################################################## # armci if ARMCI_NETWORK_ARMCI else if ARMCI_SRC_DIR_COMEX MAYBE_COMEX = comex else MAYBE_ARMCI = armci endif endif SUBDIRS = $(MAYBE_COMEX) $(MAYBE_ARMCI) . if ARMCI_NETWORK_ARMCI else if ARMCI_SRC_DIR_COMEX comex/libarmci.la: ($(am__cd) comex && $(MAKE) $(AM_MAKEFLAGS) all) || exit 1; else armci/libarmci.la: ($(am__cd) armci && $(MAKE) $(AM_MAKEFLAGS) all) || exit 1; endif endif if ARMCI_SRC_DIR_COMEX else endif if ARMCI_NETWORK_ARMCI else if ARMCI_NETWORK_PORTALS AM_CPPFLAGS += -I$(top_srcdir)/armci/src-portals AM_CPPFLAGS += -I$(top_srcdir)/armci/tcgmsg else if ARMCI_NETWORK_GEMINI AM_CPPFLAGS += -I$(top_srcdir)/armci/src-gemini AM_CPPFLAGS += -I$(top_srcdir)/armci/tcgmsg else AM_CPPFLAGS += -I$(top_srcdir)/armci/src/include AM_CPPFLAGS += -I$(top_srcdir)/armci/tcgmsg endif endif endif # As of ga-5-2 libarmci is no longer rolled up into libga. libga_la_LIBADD += $(SCALAPACK_LIBS) libga_la_LIBADD += $(LAPACK_LIBS) libga_la_LIBADD += $(BLAS_LIBS) if ARMCI_NETWORK_ARMCI libga_la_LIBADD += $(ARMCI_NETWORK_LIBS) libga_la_LIBADD += $(GA_MP_LIBS) else if ARMCI_SRC_DIR_COMEX libga_la_LIBADD += comex/libarmci.la else libga_la_LIBADD += armci/libarmci.la endif libga_la_LIBADD += $(GA_MP_LIBS) libga_la_LIBADD += $(ARMCI_NETWORK_LIBS) endif ############################################################################## # tascel # The tascel directory is not automatically configured nor added to SUBDIRS. # However, it is still distributed with GA. EXTRA_DIST += tascel dist-hook: tascel-dist-hook .PHONY: tascel-dist-hook tascel-dist-hook: rm -rf $(distdir)/tascel/autom4te.cache ############################################################################## # gfutex # The gfutex directory is not automatically configured nor added to SUBDIRS. # However, it is still distributed with GA. EXTRA_DIST += gfutex dist-hook: gfutex-dist-hook .PHONY: gfutex-dist-hook gfutex-dist-hook: rm -rf $(distdir)/gfutex/autom4te.cache ############################################################################## # the end # .PHONY: checkprogs checkprogs-recursive checkprogs-am checkprogs: checkprogs-recursive checkprogs-am: $(check_PROGRAMS) GA_RECURSIVE_TARGETS = checkprogs-recursive # COPIED FROM MAKEFILE GENERATED BY AUTOMAKE 1.11.1 # Modified to use our own recursive targets. $(GA_RECURSIVE_TARGETS): all @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" # END COPY # support verbose/silent make rules for additional programs # m4 M4_V = $(M4__v_$(V)) M4__v_ = $(M4__v_$(AM_DEFAULT_VERBOSITY)) M4__v_0 = @echo " M4 " $@; # sed SED_V = $(SED__v_$(V)) SED__v_ = $(SED__v_$(AM_DEFAULT_VERBOSITY)) SED__v_0 = @echo " SED " $@; # python PYTHON_V = $(PYTHON__v_$(V)) PYTHON__v_ = $(PYTHON__v_$(AM_DEFAULT_VERBOSITY)) PYTHON__v_0 = @echo " PYTHON" $@; # cp CP = cp CP_V = $(CP__v_$(V)) CP__v_ = $(CP__v_$(AM_DEFAULT_VERBOSITY)) CP__v_0 = @echo " CP " $@; .PHONY: pfiles clean-pfiles if MSG_COMMS_TCGMSG4 pfiles: $(check_PROGRAMS) for p in $(check_PROGRAMS); do \ echo "`whoami` `hostname` $(NPROCS) `pwd`/$$p /tmp" > $$p.p; \ done check: pfiles clean-pfiles: find . -name '*.p' -exec rm {} \; ; clean-local: clean-pfiles MAYBE_PFILES = pfiles endif # MSG_COMMS_TCGMSG4 ############################################################################## # test suite # # Tests were broken up into groups depending on the piece of the distribution # which they tested. # # Some tests were commented out either because they required an input file or # they were failing for unknown reasons and we didn't want to further debug. # Some tests were based on old versions of GA which no longer applied but we # kept anyway (see pario). # # We leave pario tests out of the main set of tests because not all systems # can handle the disk requirements. # SERIAL_TESTS = SERIAL_TESTS += $(MA_SERIAL_TESTS) SERIAL_TESTS += $(GLOBAL_SERIAL_TESTS) SERIAL_TESTS += $(CXX_SERIAL_TESTS) SERIAL_TESTS_XFAIL = SERIAL_TESTS_XFAIL += $(MA_SERIAL_TESTS_XFAIL) SERIAL_TESTS_XFAIL += $(GLOBAL_SERIAL_TESTS_XFAIL) SERIAL_TESTS_XFAIL += $(CXX_SERIAL_TESTS_XFAIL) PARALLEL_TESTS = PARALLEL_TESTS += $(MA_PARALLEL_TESTS) PARALLEL_TESTS += $(GLOBAL_PARALLEL_TESTS) PARALLEL_TESTS += $(CXX_PARALLEL_TESTS) PARALLEL_TESTS_XFAIL = PARALLEL_TESTS_XFAIL += $(MA_PARALLEL_TESTS_XFAIL) PARALLEL_TESTS_XFAIL += $(GLOBAL_PARALLEL_TESTS_XFAIL) PARALLEL_TESTS_XFAIL += $(CXX_PARALLEL_TESTS_XFAIL) TESTS = TESTS += $(SERIAL_TESTS) TESTS += $(PARALLEL_TESTS) XFAIL_TESTS = XFAIL_TESTS += $(SERIAL_TESTS_XFAIL) XFAIL_TESTS += $(PARALLEL_TESTS_XFAIL) if MSG_COMMS_TCGMSG4 LOG_COMPILER = \ maybe_tcgexec=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo ""; else echo "$(TCGEXEC)"; fi`; eval $$maybe_tcgexec else if MSG_COMMS_TCGMSG5 LOG_COMPILER = tst="$$dir$$f -np $(NPROCS)"; eval else if CROSS_COMPILING maybe_mpiexec=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo "$(MPIEXEC)" | $(SED) 's/%NP%/1/'; else echo "$(MPIEXEC)" | $(SED) 's/%NP%/$(NPROCS)/'; fi`; eval $$maybe_mpiexec else LOG_COMPILER = \ maybe_mpiexec=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo ""; else if echo "$(MPIEXEC)" | $(GREP) "%NP%" > /dev/null; then echo "$(MPIEXEC)" | $(SED) 's/%NP%/$(NPROCS)/'; else echo "$(MPIEXEC)"; fi; fi`; eval $$maybe_mpiexec endif # CROSS_COMPILING endif # MSG_COMMS_TCGMSG5 endif # MSG_COMMS_TCGMSG4 .PHONY: check-ga check-ga: $(all-am) $(check_LTLIBRARIES) $(check_PROGRAMS) $(MAYBE_PFILES) $(MAKE) $(AM_MAKEFLAGS) check-TESTS .PHONY: check-ma check-ma: $(all-am) $(check_LTLIBRARIES) $(MA_TESTS) $(MAYBE_PFILES) $(MAKE) $(AM_MAKEFLAGS) TESTS="$(MA_TESTS)" XFAIL_TESTS="$(MA_TESTS_XFAIL)" check-TESTS .PHONY: check-global check-global: $(all-am) $(check_LTLIBRARIES) $(GLOBAL_TESTS) $(MAYBE_PFILES) $(MAKE) $(AM_MAKEFLAGS) TESTS="$(GLOBAL_TESTS)" XFAIL_TESTS="$(GLOBAL_TESTS_XFAIL)" check-TESTS .PHONY: check-pario check-pario: $(all-am) $(check_LTLIBRARIES) $(PARIO_TESTS) $(MAYBE_PFILES) $(MAKE) $(AM_MAKEFLAGS) TESTS="$(PARIO_TESTS)" XFAIL_TESTS="$(PARIO_TESTS_XFAIL)" check-TESTS .PHONY: check-ga++ if CXX_BINDINGS check-ga++: $(all-am) $(check_LTLIBRARIES) $(CXX_TESTS) $(MAYBE_PFILES) $(MAKE) $(AM_MAKEFLAGS) TESTS="$(CXX_TESTS)" XFAIL_TESTS="$(CXX_TESTS_XFAIL)" check-TESTS endif # Because pario tests are not listed in the TESTS variable, the log targets # are not generated by automake. Do them manually here. pario/dra/bign.log: pario/dra/bign$(EXEEXT) @p='pario/dra/bign$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) pario/dra/ntestc.log: pario/dra/ntestc$(EXEEXT) @p='pario/dra/ntestc$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) pario/dra/perfn.log: pario/dra/perfn$(EXEEXT) @p='pario/dra/perfn$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) pario/dra/rate.log: pario/dra/rate$(EXEEXT) @p='pario/dra/rate$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) ga-5-3/ga++/0000750005473000001440000000000012275260574011322 5ustar d3n000usersga-5-3/ga++/doc/0000750005473000001440000000000012275260573012066 5ustar d3n000usersga-5-3/ga++/doc/Doxyfile0000640005473000001440000020410611430612245013565 0ustar d3n000users# Doxyfile 1.7.0 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = "Global Arrays C++ Binding" # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = 5.0 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this # tag. The format is ext=language, where ext is a file extension, and language # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = cc=C++ h=C++ # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. The create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = YES # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ../src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.c \ *.h \ *.f \ *.fh # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the stylesheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = YES # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = NO # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client # using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server # based approach is that it scales better to large projects and allows # full text search. The disadvances is that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans.ttf # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES ga-5-3/ga++/README0000640005473000001440000000732711430612245012200 0ustar d3n000usersGA++: C++ Bindings for Global Arrays ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Overview ======== GA++ provides a C++ interface to global arrays (GA) libraries. This is the second beta release. Here is the doxygen documentation of GA++: http://www.emsl.pnl.gov/docs/global/ga++/index.html The GA C++ bindings are a layer built directly on top of the GA C bindings. GA++ provides new names for the C bindings of GA functions (For example, GA_Add_patch() is renamed as addPatch()). GA++ classes ============ GA++ declares a GA namespace. Within this namespace is the GlobalArray class and various "service" functions. For backwards compatibility, the GAServices class and its GA::SERVICES singleton is preserved within the GA namespace, however we recommend using the same functions found within the GA namespace. Although namespace is part of ANSI C++ standard, not all C++ compilers support namespaces. The configure script will automatically detect whether namespaces are supported. In the rare case where namespaces are not supported, you will not be able to use the GA++ interface:: namespace GA { class GAServices; class GlobalArray; }; The current implementation has no derived classes (no (virtual) inheritance), templates or exception handling. Eventually, more object oriented functionalities will be added, and standard library facilities will be used without affecting the performance. Initialization and Termination ============================== GA namespace has the following functions for initialization and termination of Global Arrays:: GA::Initialize(): Initialize Global Arrays, allocates and initializes internal data structures in Global Arrays. This is a collective operation. GA::Terminate(): Delete all active arrays and destroy internal data structures. This is a collective operation. namespace GA { void Initialize(int argc, char *argv[], size_t limit = 0); void Initialize(int argc, char *argv[], unsigned long heapSize, unsigned long stackSize, int type, size_t limit = 0); void Terminate(); }; Example: #include #include "ga++.h" int main(int argc, char **argv) { GA::Initialize(argc, argv, 0); cout << "Hello World\n"; GA::Terminate(); } GAServices ========== NOTE: The GAServices class is deprecated in favor of using the same functions directly within the GA namespace. GAServices class has member functions that does all the global operations (non-array operations) like Process Information (number of processes, process id, ..), Inter-process Synchronization (sync, lock, broadcast, reduce,..), etc,. SERVICES Object =============== NOTE: The SERVICES object is deprecated. See GAServices above. GA namespace has a global singleton "SERVICES" object (of type "GAServices"), which can be used to invoke the non-array operations. To call the functions (for example, sync()), we invoke them on this SERVICES object (for example, GA::SERVICES.sync()). As this object is in the global address space, the functions can be invoked from anywhere inside the program (provided the ga++.h is included in that file/program). Global Array ============ GlobalArray class has member functions that do: * Array operations, * One-sided(get/put), * Collective array operations, * Utility operations , etc,. Note: In order to build GA++, configure must be run with --enable-cxx:: configure --enable-cxx Testing ======= If the GA++ interface is enabled, the GA++ test programs located in ga++/testing will automatically be built and run as part of the GA test suite. See the top-level README for details. ga-5-3/ga++/testing/0000750005473000001440000000000012275260574012777 5ustar d3n000usersga-5-3/ga++/testing/util.c0000640005473000001440000002571411633461607014127 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include # define sleep(x) Sleep(1000*(x)) #endif #ifdef MPI # include #else # include #endif #include "ga.h" #include "macdecls.h" #include "testutil.h" #include "globalp.h" /*#define MAXDIM 10*/ #define BASE 100 /***************************** macros ************************/ #define COPY(src, dst, bytes) memcpy((dst),(src),(bytes)) #define GA_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define GA_MIN(a,b) (((a) <= (b)) ? (a) : (b)) /*#define GA_ABS(a) (((a) <0) ? -(a) : (a))*/ /*\ generate random range for a section of multidimensional array \*/ void get_range( int ndim, int dims[], int lo[], int hi[]) { int dim; for(dim=0; dim 0)? rand()%range : lo[dim]; new_lo[dim] = toss; new_hi[dim] = toss + diff -1; assert(new_hi[dim] < dims[dim]); assert(diff == (new_hi[dim] -new_lo[dim]+1)); } } /*\ print range of n-dimensional array with two strings before and after \*/ void print_range(char *pre,int ndim, int lo[], int hi[], char* post) { int i; printf("%s[",pre); for(i=0;i #include #include using namespace std; #include "testutil.h" #include "ga++.h" #define N 10 // First dimension #define NDIM 4 // Number of dimensions #define BASE 0 #define PERMUTE_ #define GA_DATA_TYPE MT_F_REAL void fillPatch(double *ptr, int dim[], int ld[], int ndim, double val) { int i, j, stride=1; switch (ndim){ case 0: GA_Error((char *)"fill_patch: error",ndim); case 1: for(i=0;i handle()); /* print info about array we got */ g_a->inquire(&type, &ndim, adims); if(me==0)printf("After Inquire\n"); g_a->printDistribution(); GA::SERVICES.sync(); /* duplicate array A with ga_create irreg rather than ga_duplicate * -- want to show distribution control * -- with ga_duplicate it would be g_b=GA_Duplicate(g_a,name) */ if(me==0)printf("\nReconstructing distribution description for A\n"); /* get memory for arrays describing distribution */ proclist = (int*)malloc(nproc*sizeof(int)); if(!proclist)GA_Error((char *)"malloc failed for proclist",0); regions = (patch_t*)malloc(nproc*sizeof(patch_t)); if(!regions)GA_Error((char *)"malloc failed for regions",0); map = (int*)malloc((nproc+ndim)*sizeof(int)); /* ubound= nproc+mdim */ if(!map)GA_Error((char *)"malloc failed for map",0); /* first find out how array g_a is distributed */ for(i=0;ilocateRegion(lo, hi, (int*)regions, proclist); if(proc<1) GA_Error((char *)"error in NGA_Locate_region",proc); /* determine blocking for each dimension */ for(i=0;iadims[d] ){ map[offset] = regions[i].lo[d]; offset++; block[d]++; adims[d]= regions[i].hi[d]; } if(me==0){ printf("Distribution map contains %d elements\n",offset); print_subscript((char *)"number of blocks for each dimension", ndim,block,(char *)"\n"); print_subscript((char *)"distribution map",offset,map,(char *)"\n\n"); fflush(stdout); } if(me==0)printf("Creating array B applying distribution of A\n"); # ifdef USE_DUPLICATE GA::GlobalArray *g_b = GA::SERVICES.createGA(g_a, "array B"); # else GA::GlobalArray *g_b = GA::SERVICES.createGA(MT_F_DBL, NDIM, dims, (char *)"array B", block, map); # endif if(!g_b) GA_Error((char *)"create failed: B",0); if(me==0)printf("OK\n\n"); free(proclist); free(regions); free(map); g_b->printDistribution(); GA::SERVICES.sync(); if(me==0){ printf("\nCompare distributions of A and B\n"); if(g_a->compareDistr(g_b)) printf("Failure: distributions NOT identical\n"); else printf("Success: distributions identical\n"); fflush(stdout); } if(me==0){ printf("\nAccessing local elements of A: set them to the owner process id\n"); fflush(stdout); } GA::SERVICES.sync(); g_a->distribution(me, lo, hi); if(hi[0]>=0){/* -1 means no elements stored on this processor */ double *ptr; int locdim[NDIM]; g_a->access(lo, hi, &ptr, ld); for(i=0;i=0){ char msg[100]; sprintf(msg,(char *)"%d: leading dimensions",me); print_subscript(msg,ndim-1,ld,(char *)"\n"); fflush(stdout); } GA::SERVICES.sync(); } GA::SERVICES.sync(); if(me==0)printf("\nRandomly checking the update using ga_get on array sections\n"); GA::SERVICES.sync(); /* show ga_get working and verify array updates * every process does N random gets * for simplicity get only a single row at a time */ srand(me); /* different seed for every process */ hi[ndim-1]=adims[ndim-1] -1 + BASE; for(i=1;iget(lo, hi, buf, ld); /* check values */ for(i=0;ilocate(lo); if((double)p != buf[i]) { char msg[100]; sprintf(msg,(char *)"%d: wrong value: %d != %f a",me, p, buf[i]); print_subscript(msg,ndim,lo,(char *)"\n"); GA_Error((char *)"Error - bye",i); } lo[ndim-1]++; } } free(buf); GA::SERVICES.sync(); if(me==0)printf("OK\n"); g_a->destroy(); g_b->destroy(); if(!me) cout << "Terminating\n"; GA::Terminate(); } ga-5-3/ga++/testing/testutil.h0000640005473000001440000000201511417373344015021 0ustar d3n000users#define add_range_ F77_FUNC_(add_range,ADD_RANGE) #define compare_patches_ F77_FUNC_(compare_patches,COMPARE_PATCHES) #define copy_range_ F77_FUNC_(copy_range,COPY_RANGE) #define dot_range_ F77_FUNC_(dot_range,DOT_RANGE) #define init_array_ F77_FUNC_(init_array,INIT_ARRAY) #define print_range_ F77_FUNC_(print_range,PRINT_RANGE) #define scale_patch_ F77_FUNC_(scale_patch,SCALE_PATCH) #define util_mdtob_ F77_FUNC_(util_mdtob,UTIL_MDTOB) #define util_mitob_ F77_FUNC_(util_mitob,UTIL_MITOB) #define util_timer_ F77_FUNC_(util_timer,UTIL_TIMER) #ifdef __cplusplus extern "C" { #endif extern void get_range( int ndim, int dims[], int lo[], int hi[]); extern void new_range(int ndim, int dims[], int lo[], int hi[], int new_lo[], int new_hi[]); extern void print_range(char *pre,int ndim, int lo[], int hi[], char* post); extern void print_subscript(char *pre,int ndim, int subscript[], char* post); extern void print_distribution(int g_a); #ifdef __cplusplus } #endif ga-5-3/ga++/testing/mtest.cc0000640005473000001440000010657611373305234014451 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include using namespace std; #include "ga++.h" #define GA_DATA_TYPE MT_F_REAL #define N 4 /* dimension of matrices */ #define MAXDIM GA_MAX_DIM #define OP_SHIFT_DIAGONAL 1 #define OP_SET_DIAGONAL 2 #define OP_ADD_DIAGONAL 3 #define OP_GET_DIAGONAL 4 #define OP_NORM1 5 #define OP_NORM_INFINITY 6 #define OP_MEDIAN 7 #define OP_MEDIAN_PATCH 8 #define OP_SCALE_ROWS 9 #define OP_SCALE_COLS 10 #define GA_ABS(a) (((a) >= 0) ? (a) : (-(a))) #define GA_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define GA_MIN(a,b) (((a) <= (b)) ? (a) : (b)) # define THRESH 1e-5 #define MISMATCHED(x,y) GA_ABS((x)-(y))>=THRESH void test_scale_cols (GA::GlobalArray *g_a, GA::GlobalArray *g_v) { int index[MAXDIM]; void *min, *max; int imin, imax; float fmin, fmax; long lmin, lmax; double dmin, dmax; DoubleComplex dcmin, dcmax; void *alpha, *beta; int ai = 1, bi = -1; long al = 1, bl = -1; float af = 1.0, bf = -1.0; double ad = 1.0, bd = -1.0; DoubleComplex adc = { 1.0, 0.0 }, bdc = { -1.0, 0.0}; GA::GlobalArray * g_b, *g_c; int me = GA_Nodeid (); void *val; int ival = -2; double dval = -2.0; float fval = -2.0; long lval = -2; DoubleComplex dcval = { -2.0, 0.0 }; void *val2; int ival2 = 4; double dval2 = 4.0; float fval2 = 4.0; long lval2 = 4; DoubleComplex dcval2 = { 4.0, 0.0 }; int type, ndim, dims[MAXDIM]; int vtype, vndim, vdims[MAXDIM]; g_a->inquire (&type, &ndim, dims); g_v->inquire (&vtype, &vndim, vdims); switch (type) { case C_INT: alpha = (void *)&ai; beta = (void *)&bi; break; case C_DCPL: alpha = (void *)&adc; beta = (void *)&bdc; break; case C_DBL: alpha = (void *)&ad; beta =(void *) &bd; break; case C_FLOAT: alpha =(void *) ⁡ beta = (void *)&bf; break; case C_LONG: alpha = (void *)&al; beta = (void *)&bl; break; default: GA::SERVICES.error ((char *)"test_scale_cols:wrong data type.", type); } switch (type) { case C_INT: val = (void *)&ival; val2 = (void *)&ival2; break; case C_DCPL: val = (void *)&dcval; val2 = (void *)&dcval2; break; case C_DBL: val = (void *)&dval; val2 = (void *)&dval2; break; case C_FLOAT: val = (void *)&fval; val2 = (void *)&fval2; break; case C_LONG: val = (void *)&lval; val2 = (void *)&lval2; break; default: GA::SERVICES.error ((char *)"test_scale_cols:wrong data type.", type); } if (me == 0) printf ("Testing GA_Scale_cols..."); g_a->fill(val); g_v->fill(val); g_a->scaleCols (g_v); /*the result is the same same as g_b filled with val2 */ g_b = GA::SERVICES.createGA (g_a, (char *)"B"); g_c = GA::SERVICES.createGA (g_a, (char *)"C"); g_b->fill(val2); g_c->add(alpha, g_a, beta, g_b); switch (type) { case C_INT: max = (void *)&imax; min = (void *)&imin; break; case C_DCPL: max = (void *)&dcmax; min = (void *)&dcmin; break; case C_DBL: max = (void *)&dmax; min =(void *) &dmin; break; case C_FLOAT: max = (void *)&fmax; min = (void *)&fmin; break; case C_LONG: max = (void *)&lmax; min = (void *)&lmin; break; default: GA::SERVICES.error ((char *)"test_scale_rows:wrong data type.", type); } g_c->selectElem ((char *)"max", max, index); g_c->selectElem ((char *)"min", min, index); switch (type) { double r, m; case C_INT: if (me == 0) { if (MISMATCHED (imax, imin) || (imax != 0) || (imin != 0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_DCPL: r = dcmax.real - dcmin.real; m = dcmax.imag - dcmin.imag; if (me == 0) { if (MISMATCHED (dcmax.real, dcmin.real) || (dcmax.real != 0.0) || (dcmin.real != 0.0) || MISMATCHED (dcmax.imag, dcmin.imag) || (dcmax.imag != 0.0) || (dcmin.imag != 0.0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_DBL: if (me == 0) { if (MISMATCHED (dmax, dmin) || (dmax != 0) || (dmin != 0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_FLOAT: if (me == 0) { if (MISMATCHED (fmax, fmin) || (fmax != 0) || (fmin != 0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_LONG: if (me == 0) { if (MISMATCHED (lmax, lmin) || (lmax != 0) || (lmin != 0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; default: GA::SERVICES.error ((char *)"test_scale_rows:wrong data type.", type); } } void test_scale_rows (GA::GlobalArray *g_a, GA::GlobalArray *g_v) { int index[MAXDIM]; void *min, *max; int imin, imax; float fmin, fmax; long lmin, lmax; double dmin, dmax; DoubleComplex dcmin, dcmax; void *alpha, *beta; int ai = 1, bi = -1; long al = 1, bl = -1; float af = 1.0, bf = -1.0; double ad = 1.0, bd = -1.0; DoubleComplex adc = { 1.0, 0.0 }; DoubleComplex bdc = {-1.0, 0.0 }; GA::GlobalArray *g_b, *g_c; int me = GA_Nodeid (); void *val; int ival = -2; double dval = -2.0; float fval = -2.0; long lval = -2; DoubleComplex dcval = { -2.0, 0.0 }; void *val2; int ival2 = 4; double dval2 = 4.0; float fval2 = 4.0; long lval2 = 4; DoubleComplex dcval2 = { 4.0, 0.0 }; int type, ndim, dims[MAXDIM]; int vtype, vndim, vdims[MAXDIM]; g_a->inquire (&type, &ndim, dims); g_v->inquire (&vtype, &vndim, vdims); switch (type) { case C_INT: alpha = (void *)&ai; beta = (void *)&bi; break; case C_DCPL: alpha = (void *)&adc; beta = (void *)&bdc; break; case C_DBL: alpha = (void *)&ad; beta =(void *) &bd; break; case C_FLOAT: alpha = (void *)⁡ beta = (void *)&bf; break; case C_LONG: alpha = (void *)&al; beta = (void *)&bl; break; default: GA::SERVICES.error ((char *)"test_scale_rows:wrong data type.", type); } switch (type) { case C_INT: val = (void *)&ival; val2 = (void *)&ival2; break; case C_DCPL: val = (void *)&dcval; val2 = (void *)&dcval2; break; case C_DBL: val = (void *)&dval; val2 = (void *)&dval2; break; case C_FLOAT: val =(void *) &fval; val2 = (void *)&fval2; break; case C_LONG: val = (void *)&lval; val2 = (void *)&lval2; break; default: GA::SERVICES.error ((char *)"test_scale_rows:wrong data type.", type); } if (me == 0) printf ("Testing GA_Scale_rows..."); g_a->fill (val); g_v->fill (val); g_a->scaleRows (g_v); /*the result is the same same as g_b filled with val2 */ g_b = GA::SERVICES.createGA (g_a, (char *)"B"); g_c = GA::SERVICES.createGA (g_a, (char *)"C"); g_b->fill (val2); g_c->add (alpha, g_a, beta, g_b); switch (type) { case C_INT: max = (void *)&imax; min = (void *)&imin; break; case C_DCPL: max = (void *)&dcmax; min = (void *)&dcmin; break; case C_DBL: max = (void *)&dmax; min = (void *)&dmin; break; case C_FLOAT: max = (void *)&fmax; min = (void *)&fmin; break; case C_LONG: max = (void *)&lmax; min =(void *) &lmin; break; default: GA::SERVICES.error ((char *)"test_scale_rows:wrong data type.", type); } g_c->selectElem ((char *)"max", max, index); g_c->selectElem ((char *)"min", min, index); switch (type) { double r, m; case C_INT: if (me == 0) { if (MISMATCHED (imax, imin) || (imax != 0) || (imin != 0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_DCPL: r = dcmax.real - dcmin.real; m = dcmax.imag - dcmin.imag; if (me == 0) { if (MISMATCHED (dcmax.real, dcmin.real) || (dcmax.real != 0.0) || (dcmin.real != 0.0) || MISMATCHED (dcmax.imag, dcmin.imag) || (dcmax.imag != 0.0) || (dcmin.imag != 0.0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_DBL: if (me == 0) { if (MISMATCHED (dmax, dmin) || (dmax != 0) || (dmin != 0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_FLOAT: if (me == 0) { if (MISMATCHED (fmax, fmin) || (fmax != 0) || (fmin != 0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_LONG: if (me == 0) { if (MISMATCHED (lmax, lmin) || (lmax != 0) || (lmin != 0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; default: GA::SERVICES.error ((char *)"test_scale_rows:wrong data type.", type); } } void test_median_patch (GA::GlobalArray * g_a, int *alo, int *ahi, GA::GlobalArray * g_b, int *blo, int *bhi, GA::GlobalArray * g_c, int *clo, int *chi, GA::GlobalArray * g_m, int *mlo, int *mhi) { GA::GlobalArray * g_e; int index[MAXDIM]; void *min, *max; int imin, imax; float fmin, fmax; long lmin, lmax; double dmin, dmax; DoubleComplex dcmin, dcmax; void *alpha, *beta; int ai = 1, bi = -1; long al = 1, bl = -1; float af = 1.0, bf = -1.0; double ad = 1.0, bd = -1.0; DoubleComplex adc = { 1.0, 0.0 }; DoubleComplex bdc = {-1.0, 0.0 }; void *val; int ival = -2; double dval = -2.0; float fval = -2.0; long lval = -2; DoubleComplex dcval; void *val2; int ival2 = 6; double dval2 = 6.0; float fval2 = 6.0; long lval2 = 6; DoubleComplex dcval2; void *val3; int ival3 = 4; double dval3 = 4.0; float fval3 = 4.0; long lval3 = 4; DoubleComplex dcval3; int me = GA_Nodeid (); int type, ndim, dims[MAXDIM]; g_a->inquire (&type, &ndim, dims); switch (type) { case C_INT: alpha = (void *)&ai; beta =(void *) &bi; break; case C_DCPL: alpha =(void *) &adc; beta = (void *)&bdc; break; case C_DBL: alpha = (void *)&ad; beta = (void *)&bd; break; case C_FLOAT: alpha = (void *)⁡ beta = (void *)&bf; break; case C_LONG: alpha = (void *)&al; beta = (void *)&bl; break; default: GA::SERVICES.error ((char *)"test_median:wrong data type.", type); } dcval.real = -2.0; dcval.imag = -0.0; dcval2.real = 6.0; dcval2.imag = 0.0; dcval3.real = 4.0; dcval3.imag = 0.0; switch (type) { case C_INT: val = (void *)&ival; val2 = (void *)&ival2; val3 = (void *)&ival3; break; case C_DCPL: val = (void *)&dcval; val2 = (void *)&dcval2; val3 = (void *)&dcval3; break; case C_DBL: val = (void *)&dval; val2 = (void *)&dval2; val3 = (void *)&dval3; break; case C_FLOAT: val = (void *)&fval; val2 = (void *)&fval2; val3 = (void *)&fval3; break; case C_LONG: val = (void *)&lval; val2 = (void *)&lval2; val3 = (void *)&lval3; break; default: GA::SERVICES.error ((char *)"test_median:test_median:wrong data type.", type); } if (me == 0) printf ("Testing GA_Median_patch..."); g_a->zero (); g_b->zero (); g_c->zero (); g_m->zero (); g_a->fillPatch (alo, ahi, val); g_b->fillPatch (blo, bhi, val2); g_c->fillPatch (alo, bhi, val3); g_m->medianPatch (g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi, mlo, mhi); /* The result array should be g_c due to the value I chose: val3 is the median of the three values val, val2, and val3 */ /* g_e = g_c - g_m */ g_e = GA::SERVICES.createGA(g_a, (char *)"E"); g_e->zero (); g_e->addPatch (alpha, g_c, clo, chi, beta, g_m, mlo, mhi, alo, ahi); switch (type) { case C_INT: max = (void *)&imax; min = (void *)&imin; break; case C_DCPL: max = (void *)&dcmax; min = (void *)&dcmin; break; case C_DBL: max = (void *)&dmax; min = (void *)&dmin; break; case C_FLOAT: max = (void *)&fmax; min = (void *)&fmin; break; case C_LONG: max = (void *)&lmax; min = (void *)&lmin; break; default: GA_Error ((char *)"test_median:wrong data type.", type); } g_e->selectElem ((char *)"max", max, index); g_e->selectElem ((char *)"min", min, index); switch (type) { double r, m; case C_INT: if (me == 0) { if (MISMATCHED (imax, imin) || (imax != 0) || (imin != 0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_DCPL: r = dcmax.real - dcmin.real; m = dcmax.imag - dcmin.imag; if (me == 0) { if (MISMATCHED (dcmax.real, dcmin.real) || (dcmax.real != 0.0) || (dcmin.real != 0.0) || MISMATCHED (dcmax.imag, dcmin.imag) || (dcmax.imag != 0.0) || (dcmin.imag != 0.0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_DBL: if (me == 0) { if (MISMATCHED (dmax, dmin) || (dmax != 0) || (dmin != 0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_FLOAT: if (me == 0) { if (MISMATCHED (fmax, fmin) || (fmax != 0) || (fmin != 0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_LONG: if (me == 0) { if (MISMATCHED (lmax, lmin) || (lmax != 0) || (lmin != 0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; default: GA::SERVICES.error ((char *)"test_median:wrong data type.", type); } } void test_median (GA::GlobalArray * g_a, GA::GlobalArray * g_b, GA::GlobalArray * g_c, GA::GlobalArray * g_m) { GA::GlobalArray *g_e; int index[MAXDIM]; void *min, *max; int imin, imax; float fmin, fmax; long lmin, lmax; double dmin, dmax; DoubleComplex dcmin, dcmax; void *alpha, *beta; int ai = 1, bi = -1; long al = 1, bl = -1; float af = 1.0, bf = -1.0; double ad = 1.0, bd = -1.0; DoubleComplex adc = { 1.0, 0.0 }; DoubleComplex bdc = {-1.0, 0.0 }; void *val; int ival = -2; double dval = -2.0; float fval = -2.0; long lval = -2; DoubleComplex dcval; void *val2; int ival2 = 6; double dval2 = 6.0; float fval2 = 6.0; long lval2 = 6; DoubleComplex dcval2; void *val3; int ival3 = 4; double dval3 = 4.0; float fval3 = 4.0; long lval3 = 4; DoubleComplex dcval3; int me = GA_Nodeid (); int type, ndim, dims[MAXDIM]; g_a->inquire (&type, &ndim, dims); switch (type) { case C_INT: alpha = (void *)&ai; beta = (void *)&bi; break; case C_DCPL: alpha = (void *)&adc; beta =(void *) &bdc; break; case C_DBL: alpha = (void *)&ad; beta = (void *)&bd; break; case C_FLOAT: alpha =(void *) ⁡ beta = (void *)&bf; break; case C_LONG: alpha = (void *)&al; beta = (void *)&bl; break; default: GA::SERVICES.error ((char *)"test_median:wrong data type.", type); } dcval.real = -2.0; dcval.imag = -0.0; dcval2.real = 6.0; dcval2.imag = 0.0; dcval3.real = 4.0; dcval3.imag = 0.0; switch (type) { case C_INT: val = (void *)&ival; val2 =(void *) &ival2; val3 = (void *)&ival3; break; case C_DCPL: val = (void *)&dcval; val2 =(void *) &dcval2; val3 =(void *) &dcval3; break; case C_DBL: val = (void *)&dval; val2 = (void *)&dval2; val3 = (void *)&dval3; break; case C_FLOAT: val = (void *)&fval; val2 = (void *)&fval2; val3 = (void *)&fval3; break; case C_LONG: val = (void *)&lval; val2 = (void *)&lval2; val3 = (void *)&lval3; break; default: GA_Error ((char *)"test_median:test_median:wrong data type.", type); } if (me == 0) printf ("Testing GA_Median..."); g_a->zero(); g_b->zero(); g_c->zero(); g_m->zero(); g_a->fill (val); g_b->fill (val2); g_c->fill (val3); g_m->median (g_a, g_b, g_c); /* The result array should be g_c due to the value I chose: val3 is the median of the three values val, val2, and val3 */ /* g_e = g_c - g_m */ g_e = GA::SERVICES.createGA (g_a, (char *)"E"); g_e->add (alpha, g_c, beta, g_m); switch (type) { case C_INT: max =(void *) &imax; min = (void *)&imin; break; case C_DCPL: max =(void *) &dcmax; min = (void *)&dcmin; break; case C_DBL: max = (void *)&dmax; min = (void *)&dmin; break; case C_FLOAT: max = (void *)&fmax; min = (void *)&fmin; break; case C_LONG: max = (void *)&lmax; min = (void *)&lmin; break; default: GA::SERVICES.error ((char *)"test_median:wrong data type.", type); } g_e->selectElem ((char *)"max", max, index); g_e->selectElem ((char *)"min", min, index); switch (type) { double r, m; case C_INT: if (me == 0) { if (MISMATCHED (imax, imin) || (imax != 0) || (imin != 0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_DCPL: r = dcmax.real - dcmin.real; m = dcmax.imag - dcmin.imag; if (me == 0) { if (MISMATCHED (dcmax.real, dcmin.real) || (dcmax.real != 0.0) || (dcmin.real != 0.0) || MISMATCHED (dcmax.imag, dcmin.imag) || (dcmax.imag != 0.0) || (dcmin.imag != 0.0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_DBL: if (me == 0) { if (MISMATCHED (dmax, dmin) || (dmax != 0) || (dmin != 0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_FLOAT: if (me == 0) { if (MISMATCHED (fmax, fmin) || (fmax != 0) || (fmin != 0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_LONG: if (me == 0) { if (MISMATCHED (lmax, lmin) || (lmax != 0) || (lmin != 0)) printf ("not ok.\n"); else printf ("ok.\n"); } break; default: GA::SERVICES.error ((char *)"test_median:wrong data type.", type); } } void test_norm_infinity (GA::GlobalArray * g_a) { void *val; int ival = -2; double dval = -2.0; float fval = -2.0; long lval = -2; DoubleComplex dcval; double norm_infinity = -1.0, result = -1.0; int me = GA_Nodeid (); int type, ndim, dims[MAXDIM]; g_a->inquire (&type, &ndim, dims); dcval.real = -2.0; dcval.imag = -0.0; switch (type) { case C_INT: val = (void *)&ival; break; case C_DCPL: val = (void *)&dcval; break; case C_DBL: val = (void *)&dval; break; case C_FLOAT: val =(void *) &fval; break; case C_LONG: val = (void *)&lval; break; default: GA::SERVICES.error ((char *)"test_norm_infinity:wrong data type.", type); } if (me == 0) printf ("Testing GA_Norm_infinity..."); g_a->fill (val); g_a->normInfinity (&norm_infinity); // GA_Print(g_a); //printf("norm_infinity = %lf\n",norm_infinity); switch (type) { case C_INT: result = (double) GA_ABS (ival); break; case C_LONG: result = (double) GA_ABS (lval); break; case C_FLOAT: result = (double) GA_ABS (fval); break; case C_DBL: result = GA_ABS (dval); break; case C_DCPL: result = sqrt (dcval.real * dcval.real + dcval.imag * dcval.imag); break; default: GA::SERVICES.error ((char *)"test_norm_infinity: wrong data type.\n", type); } result = result * dims[0]; if (me == 0) { if (MISMATCHED (result, norm_infinity)) printf ("not ok.\n"); else printf ("ok.\n"); } } void test_norm1 (GA::GlobalArray * g_a) { void *val; int ival = -2; double dval = -2.0; float fval = -2.0; long lval = -2; DoubleComplex dcval; double norm1 = 0.0, result = -1.0; int me = GA_Nodeid (); int type, ndim, dims[MAXDIM]; g_a->inquire (&type, &ndim, dims); dcval.real = -2.0; dcval.imag = -0.0; switch (type) { case C_INT: val = (void *)&ival; break; case C_DCPL: val =(void *) &dcval; break; case C_DBL: val = (void *)&dval; break; case C_FLOAT: val = (void *)&fval; break; case C_LONG: val = (void *)&lval; break; default: GA::SERVICES.error ((char *)"test_norm1:wrong data type.", type); } if (me == 0) printf ("Testing GA_Norm1..."); g_a->fill (val); g_a->norm1 (&norm1); // GA_Print(g_a); //printf("norm1=%lf\n", norm1); switch (type) { case C_INT: result = (double) GA_ABS (ival); break; case C_LONG: result = (double) GA_ABS (lval); break; case C_FLOAT: result = (double) GA_ABS (fval); break; case C_DBL: result = GA_ABS (dval); break; case C_DCPL: result = sqrt (dcval.real * dcval.real + dcval.imag * dcval.imag); break; default: GA::SERVICES.error ((char *)"test_norm1: wrong data type.\n", type); } result = result * dims[1]; if (me == 0) { if (MISMATCHED (result, norm1)) printf ("not ok.\n"); else printf ("ok.\n"); } } void test_get_diagonal (GA::GlobalArray * g_a, GA::GlobalArray * g_v) { int me = GA_Nodeid (); void *val; int ival = -2; double dval = -2.0; float fval = -2.0; long lval = -2; DoubleComplex dcval; int idot, iresult, ldot, lresult; double fdot, ddot, fresult, dresult; DoubleComplex zdot, zresult; int type, ndim, dims[MAXDIM]; int vtype, vndim, vdims[MAXDIM]; g_a->inquire (&type, &ndim, dims); g_v->inquire (&vtype, &vndim, vdims); dcval.real = -2.0; dcval.imag = -0.0; switch (type) { case C_INT: val = (void *)&ival; break; case C_DCPL: val = (void *)&dcval; break; case C_DBL: val = (void *)&dval; break; case C_FLOAT: val =(void *) &fval; break; case C_LONG: val =(void *) &lval; break; default: GA::SERVICES.error ((char *)"test_get_diagonal:wrong data type.", type); } if (me == 0) printf ("Testing GA_Get_diagonal..."); g_v->zero (); g_a->fill (val); g_v->getDiagonal (g_a); switch (type) { case C_INT: idot = vdims[0] * ival * ival; iresult = g_v->idot (g_v); if (me == 0) { if (MISMATCHED (idot, iresult)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_LONG: ldot = ((long) vdims[0]) * lval * lval; lresult = g_v->ldot (g_v); if (me == 0) { if (MISMATCHED (ldot, lresult)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_FLOAT: fdot = ((float) vdims[0]) * fval * fval; fresult = g_v->fdot (g_v); if (me == 0) { if (MISMATCHED (fdot, fresult)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_DBL: ddot = ((double) vdims[0]) * dval * dval; dresult = g_v->ddot (g_v); if (me == 0) { if (MISMATCHED (ddot, dresult)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_DCPL: zdot.real = ((double) vdims[0]) * (dcval.real * dcval.real - dcval.imag * dcval.imag); zdot.imag = ((double) vdims[0]) * (2.0 * dcval.real * dcval.imag); zresult = g_v->zdot (g_v); if (me == 0) { if (MISMATCHED (zdot.real, zresult.real) || MISMATCHED (zdot.imag, zresult.imag)) printf ("not ok.\n"); else printf ("ok.\n"); } break; default: GA::SERVICES.error ((char *)"test_get_diagonal:wrong data type:", type); } } void test_add_diagonal (GA::GlobalArray * g_a, GA::GlobalArray * g_v) { int me = GA_Nodeid (); void *val; int ival = -2; double dval = -2.0; float fval = -2.0; long lval = -2; DoubleComplex dcval; int idot, iresult, ldot, lresult; double fdot, ddot, fresult, dresult; DoubleComplex zdot, zresult; int type, ndim, dims[MAXDIM]; int vtype, vndim, vdims[MAXDIM]; g_a->inquire (&type, &ndim, dims); dcval.real = -2.0; dcval.imag = -0.0; g_v->inquire (&vtype, &vndim, vdims); switch (type) { case C_INT: val =(void *) &ival; break; case C_DCPL: val = (void *)&dcval; break; case C_DBL: val =(void *) &dval; break; case C_FLOAT: val =(void *) &fval; break; case C_LONG: val = (void *)&lval; break; default: GA::SERVICES.error ((char *)"test_add_diagonal:wrong data type.", type); } if (me == 0) printf ("Testing GA_Add_diagonal..."); g_a->zero (); g_v->fill (val); g_a->setDiagonal (g_v); /*reassign value to val */ ival = 3; dval = 3.0; fval = 3.0; lval = 3; dcval.real = 3.0; dcval.imag = -0.0; /*refile the global array g_v */ g_v->fill (val); /*Add g_v to the diagonal of g_a */ g_a->addDiagonal (g_v); /*after this line, the g_a should only have 1 on the diagonal and zeros every where else */ switch (type) { case C_INT: idot = vdims[0]; iresult = g_a->idot (g_a); if (me == 0) { if (MISMATCHED (idot, iresult)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_LONG: ldot = ((long) vdims[0]); lresult = g_a->ldot (g_a); if (me == 0) { if (MISMATCHED (ldot, lresult)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_FLOAT: fdot = ((float) vdims[0]); fresult = g_a->fdot (g_a); if (me == 0) { if (MISMATCHED (fdot, fresult)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_DBL: ddot = (double) vdims[0]; dresult = g_a->ddot (g_a); if (me == 0) { if (MISMATCHED (ddot, dresult)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_DCPL: zdot.real = ((double) vdims[0]); zdot.imag = 0.0; zresult = g_a->zdot (g_a); if (me == 0) { if (MISMATCHED (zdot.real, zresult.real) || MISMATCHED (zdot.imag, zresult.imag)) printf ("not ok.\n"); else printf ("ok.\n"); } break; default: GA::SERVICES.error ((char *)"test_add_diagonal:wrong data type:", type); } } void test_set_diagonal (GA::GlobalArray * g_a, GA::GlobalArray * g_v) { int me = GA_Nodeid (); void *val; int ival = -2; double dval = -2.0; float fval = -2.0; long lval = -2; DoubleComplex dcval; int idot, iresult, ldot, lresult; double fdot, ddot, fresult, dresult; DoubleComplex zdot, zresult; int type, ndim, dims[MAXDIM]; int vtype, vndim, vdims[MAXDIM]; g_a->inquire (&type, &ndim, dims); g_v->inquire (&vtype, &vndim, vdims); dcval.real = -2.0; dcval.imag = -0.0; switch (type) { case C_INT: val = (void *)&ival; break; case C_DCPL: val = (void *)&dcval; break; case C_DBL: val = (void *)&dval; break; case C_FLOAT: val = (void *)&fval; break; case C_LONG: val =(void *) &lval; break; default: GA::SERVICES.error ((char *)"test_set_diagonal:wrong data type.", type); } if (me == 0) printf ("Testing GA_Set_diagonal..."); g_a->zero (); g_v->fill (val); g_a->setDiagonal (g_v); switch (type) { case C_INT: idot = vdims[0] * ival * ival; iresult = g_a->idot (g_a); if (me == 0) { if (MISMATCHED (idot, iresult)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_LONG: ldot = ((long) vdims[0]) * lval * lval; lresult = g_a->ldot (g_a); if (me == 0) { if (MISMATCHED (ldot, lresult)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_FLOAT: fdot = ((float) vdims[0]) * fval * fval; fresult = g_a->fdot (g_a); if (me == 0) { if (MISMATCHED (fdot, fresult)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_DBL: ddot = ((double) vdims[0]) * dval * dval; dresult = g_a->ddot (g_a); if (me == 0) { if (MISMATCHED (ddot, dresult)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_DCPL: zdot.real = ((double) vdims[0]) * (dcval.real * dcval.real - dcval.imag * dcval.imag); zdot.imag = ((double) dims[0]) * (2.0 * dcval.real * dcval.imag); zresult = g_a->zdot (g_a); if (me == 0) { if (MISMATCHED (zdot.real, zresult.real) || MISMATCHED (zdot.imag, zresult.imag)) printf ("not ok.\n"); else printf ("ok.\n"); } break; default: GA::SERVICES.error ((char *)"test_set_diagonal:wrong data type:", type); } } void test_shift_diagonal (GA::GlobalArray *g_a) { int me = GA_Nodeid (); void *val; int ival = -2; double dval = -2.0; float fval = -2.0; long lval = -2; DoubleComplex dcval; int idot, iresult, ldot, lresult; double fdot, ddot, fresult, dresult; DoubleComplex zdot, zresult; int type, ndim, dims[MAXDIM]; int dim; /*the length of the diagonal */ g_a->inquire (&type, &ndim, dims); dim = GA_MIN (dims[0], dims[1]); dcval.real = -2.0; dcval.imag = -0.0; switch (type) { case C_INT: val = (void *)&ival; break; case C_DCPL: val = (void *)&dcval; break; case C_DBL: val = (void *)&dval; break; case C_FLOAT: val =(void *) &fval; break; case C_LONG: val =(void *) &lval; break; default: GA::SERVICES.error ((char *)"test_shift_diagonal:wrong data type.", type); } if (me == 0) printf ("Testing GA_Shift_diagonal..."); g_a->zero (); g_a->shiftDiagonal (val); switch (type) { case C_INT: idot = dim * ival * ival; iresult = g_a->idot (g_a); if (me == 0) { if (MISMATCHED (idot, iresult)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_LONG: ldot = ((long) dim) * lval * lval; lresult = g_a->ldot (g_a); if (me == 0) { if (MISMATCHED (ldot, lresult)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_FLOAT: fdot = ((float) dim) * fval * fval; fresult = g_a->fdot (g_a); if (me == 0) { if (MISMATCHED (fdot, fresult)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_DBL: ddot = ((double) dim) * dval * dval; dresult = g_a->ddot (g_a); if (me == 0) { if (MISMATCHED (ddot, dresult)) printf ("not ok.\n"); else printf ("ok.\n"); } break; case C_DCPL: zdot.real = ((double) dim) * (dcval.real * dcval.real - dcval.imag * dcval.imag); zdot.imag = ((double) dim) * (2.0 * dcval.real * dcval.imag); zresult = g_a->zdot (g_a); if (me == 0) { if (MISMATCHED (zdot.real, zresult.real) || MISMATCHED (zdot.imag, zresult.imag)) printf ("not ok.\n"); else printf ("ok.\n"); } break; default: GA::SERVICES.error ((char *)"test_shift_diagonal:wrong data type: ", type); } } void do_work (int type, int op) { GA::GlobalArray *g_a, *g_b, *g_c, *g_m, *g_v; int n = N; int dims[2] = { N, /*N columns */ N + 2 /*N+2 rows */ }; int vdim; int lo[2], hi[2]; lo[0] = 1; hi[0] = dims[0] - 1; lo[1] = 1; hi[1] = dims[1] - 1; switch (op) { case OP_SHIFT_DIAGONAL: g_a = GA::SERVICES.createGA (type, 2, dims, (char *)"A", NULL); test_shift_diagonal (g_a); g_a->destroy(); break; case OP_SET_DIAGONAL: g_a = GA::SERVICES.createGA (type, 2, dims, (char *)"A", NULL); /*find out the diagonal length of the matrix A */ vdim = GA_MIN (dims[0], dims[1]); g_v = GA::SERVICES.createGA (type, 1, &vdim, (char *)"V", NULL); test_set_diagonal (g_a, g_v); g_a->destroy (); g_v->destroy (); break; case OP_ADD_DIAGONAL: g_a = GA::SERVICES.createGA (type, 2, dims, (char *)"A", NULL); /*find out the diagonal length of the matrix A */ vdim = GA_MIN (dims[0], dims[1]); g_v = GA::SERVICES.createGA (type, 1, &vdim, (char *)"V", NULL); test_add_diagonal (g_a, g_v); g_a->destroy (); g_v->destroy (); break; case OP_GET_DIAGONAL: g_a = GA::SERVICES.createGA (type, 2, dims, (char *)"A", NULL); /*find out the diagonal length of the matrix A */ vdim = GA_MIN (dims[0], dims[1]); g_v = GA::SERVICES.createGA (type, 1, &vdim, (char *)"V", NULL); test_get_diagonal (g_a, g_v); g_a->destroy (); g_v->destroy (); break; case OP_NORM1: g_a = GA::SERVICES.createGA (type, 2, dims, (char *)"A", NULL); if (!g_a) GA_Error ((char *)"create failed: A", n); test_norm1 (g_a); g_a->destroy (); break; case OP_NORM_INFINITY: g_a = GA::SERVICES.createGA (type, 2, dims,(char *) "A", NULL); test_norm_infinity (g_a); g_a->destroy (); break; case OP_MEDIAN: g_a = GA::SERVICES.createGA (type, 2, dims, (char *)"A", NULL); /*duplicate g_a */ g_b = GA::SERVICES.createGA (g_a, (char *)"B"); g_c = GA::SERVICES.createGA (g_a, (char *)"C"); #if 0 //test g_m is different from g_a, g_b, amd g_c g_m = GA::SERVICES.createGA (g_a, (char *)"M"); test_median (g_a, g_b, g_c, g_m); #else //test g_m = g_c test_median (g_a, g_b, g_c, g_a); #endif g_a->destroy (); g_b->destroy (); g_c->destroy (); #if 0 //test g_m is different from g_a, g_b, g_c g_m->destroy (); #endif break; case OP_MEDIAN_PATCH: g_a = GA::SERVICES.createGA (type, 2, dims, (char *)"A", NULL); /*duplicate g_a */ g_b = GA::SERVICES.createGA (g_a, (char *)"B"); g_c = GA::SERVICES.createGA (g_a, (char *)"C"); g_m = GA::SERVICES.createGA (g_a, (char *)"M"); test_median_patch (g_a, lo, hi, g_b, lo, hi, g_c, lo, hi, g_m, lo, hi); g_a->destroy (); g_b->destroy (); g_c->destroy (); g_m->destroy (); break; case OP_SCALE_ROWS: g_a = GA::SERVICES.createGA (type, 2, dims, (char *)"A", NULL); /*find out the diagonal length of the matrix A */ vdim = dims[1]; g_v = GA::SERVICES.createGA (type, 1, &vdim, (char *)"V", NULL); test_scale_rows (g_a, g_v); g_a->destroy (); g_v->destroy (); break; case OP_SCALE_COLS: g_a = GA::SERVICES.createGA (type, 2, dims, (char *)"A", NULL); /*find out the diagonal length of the matrix A */ vdim = dims[0]; g_v = GA::SERVICES.createGA (type, 1, &vdim, (char *)"V", NULL); test_scale_cols (g_a, g_v); g_a->destroy (); g_v->destroy (); break; default: GA::SERVICES.error ((char *)"test_function: wrong operation.", op); } } int main(int argc, char *argv[]) { int me, nproc; int heap = 200000, stack = 200000; int op; GA::Initialize(argc, argv, heap, stack, GA_DATA_TYPE, 0); me=GA_Nodeid(); nproc=GA_Nnodes(); if(!me) cout << "Using " << nproc << " processes\n"; for (op = 1; op < 11; op++) { if(me == 0) printf ("\n\n"); if (me == 0) printf ("type = C_INT \t "); do_work (C_INT, op); if (me == 0) printf ("type = C_LONG \t "); do_work (C_LONG, op); if (me == 0) printf ("type = C_FLOAT \t "); do_work (C_FLOAT, op); if (me == 0) printf ("type = C_DBL \t "); do_work (C_DBL, op); if (me == 0) printf ("type = C_DCPL \t "); do_work (C_DCPL, op); } if(!me) cout << "Terminating\n"; GA::Terminate(); } ga-5-3/ga++/testing/elempatch.cc0000640005473000001440000002320511430321361015233 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include using namespace std; #include "ga++.h" #define N 10 // First dimension #define NDIM 4 // Number of dimensions #define BASE 0 #define PERMUTE_ #define GA_DATA_TYPE MT_F_REAL #define MAXDIM GA_MAX_DIM #define C_DBL MT_C_DBL #define C_INT MT_C_INT #define C_FLOAT MT_C_FLOAT #define C_DCPL MT_C_DCPL #define C_LONG MT_C_LONGINT #define C_SCPL MT_C_SCPL #define GA_ABS(a) (((a) >= 0) ? (a) : (-(a))) #define GA_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define GA_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define THRESH 1e-5 #define MISMATCHED(x,y) GA_ABS((x)-(y))>=THRESH #define OP_ELEM_MULT 0 #define OP_ELEM_DIV 1 #define OP_ELEM_MAX 2 #define OP_ELEM_MIN 3 #define OP_ABS 4 #define OP_ADD_CONST 5 #define OP_RECIP 6 #define MY_TYPE 2002 /* Integer _ga_lo[MAXDIM], _ga_hi[MAXDIM], _ga_work[MAXDIM];*/ # define COPYINDEX_C2F(carr, farr, n){\ int i; for(i=0; i< (n); i++)(farr)[n-i-1]=(Integer)(carr)[i]+1;} int test_fun (int type, int dim, int OP) { GA::GlobalArray *g_a, *g_b, *g_c, *g_d, *g_e; int me = GA_Nodeid (); int i; int dims[MAXDIM]; int lo[MAXDIM], hi[MAXDIM]; int index[MAXDIM]; void *val; int ival = -2; double dval = -2.0; float fval = -2.0; long lval = -2; DoubleComplex dcval; void *val2; int ival2 = -3; double dval2 = -3.0; float fval2 = -3.0; long lval2 = -3; DoubleComplex dcval2; int ok = 1; int result; void *min, *max; float fmin, fmax; long lmin, lmax; double dmin, dmax; DoubleComplex dcmin, dcmax; void *alpha, *beta; int ai = 1, bi = -1; long al = 1, bl = -1; float af = 1.0, bf = -1.0; double ad = 1.0, bd = -1.0; DoubleComplex adc, bdc; char name_A[] = "A"; char name_B[] = "B"; char name_C[] = "C"; char name_D[] = "D"; char name_E[] = "E"; char name_max[] = "max"; char name_min[] = "min"; adc.real = 1.0; adc.imag = 0.0; bdc.real = -1.0; bdc.imag = 0.0; dcval.real = -sin (3.0); dcval.imag = -cos (3.0); dcval2.real = 2 * sin (3.0); dcval2.imag = 2 * cos (3.0); for (i = 0; i < dim; i++) dims[i] = N; for (i = 0; i < dim; i++) { lo[i] = 0; hi[i] = N - 1; } g_a = GA::SERVICES.createGA (type, dim, dims, name_A, NULL); g_b = GA::SERVICES.createGA (g_a, name_B); g_c = GA::SERVICES.createGA (g_a, name_C); g_d = GA::SERVICES.createGA (g_a, name_D); g_e = GA::SERVICES.createGA (g_a, name_E); /*initialize with zero */ g_a->zero (); g_b->zero (); g_c->zero (); g_d->zero (); g_e->zero (); switch (type) { case C_INT: val = (void *)&ival; val2 = (void *)&ival2; break; case C_DCPL: val = (void *)&dcval; val2 = (void *)&dcval2; break; case C_DBL: val = (void *)&dval; val2 = (void *)&dval2; break; case C_FLOAT: val = (void *)&fval; val2 = (void *)&fval2; break; case C_LONG: val = (void *)&lval; val2 = (void *)&lval2; break; default: GA::SERVICES.error ("wrong data type.", type); } g_a->fillPatch (lo, hi, val); switch (OP) { double tmp, tmp2; DoubleComplex dctemp; case OP_ABS: if (me == 0) printf ("Testing GA_Abs_value..."); g_a->absValuePatch (lo, hi); ival = GA_ABS (ival); dval = GA_ABS (dval); fval = GA_ABS (fval); lval = GA_ABS (lval); dcval.real = dcval.real * dcval.real + dcval.imag * dcval.imag; dcval.imag = 0.0; g_d->fillPatch (lo, hi, val); break; case OP_ADD_CONST: if (me == 0) printf ("Testing GA_Add_const..."); g_a->addConstantPatch (lo, hi, val2); ival = ival + ival2; dval = dval + dval2; fval = fval + fval2; lval = lval + lval2; dcval.real = dcval.real + dcval2.real; dcval.imag = dcval.imag + dcval2.imag; g_d->fillPatch (lo, hi, val); break; case OP_RECIP: if (me == 0) printf ("Testing GA_Recip..."); g_a->recipPatch (lo, hi); ival = 1 / ival; dval = 1.0 / dval; fval = 1.0 / fval; lval = 1 / lval; tmp = dcval.real * dcval.real + dcval.imag * dcval.imag; dcval.real = dcval.real / tmp; dcval.imag = -dcval.imag / tmp; g_d->fillPatch (lo, hi, val); break; case OP_ELEM_MULT: if (me == 0) printf ("Testin GA_Elem_multiply..."); g_b->fillPatch (lo, hi, val); #if 0 //g_c is different from g_a or g_b g_c->elemMultiplyPatch (g_a, lo, hi, g_b, lo, hi, lo, hi); #else //g_c is g_b g_b->elemMultiplyPatch (g_a, lo, hi, g_b, lo, hi, lo, hi); #endif ival = ival * ival2; dval = dval * dval2; fval = fval * fval2; lval = lval * lval2; dctemp.real = dcval.real * dcval2.real - dcval.imag * dcval2.imag; dctemp.imag = dcval.real * dcval2.imag + dcval2.real * dcval.imag; dcval = dctemp; g_d->fillPatch (lo, hi, val); break; case OP_ELEM_DIV: if (me == 0) printf ("Testin GA_Elem_divide..."); g_b->fillPatch (lo, hi, val2); g_c->elemDividePatch (g_a, lo, hi, g_b, lo, hi, lo, hi); ival = ival / ival2; dval = dval / dval2; fval = fval / fval2; lval = lval / lval2; tmp = dcval2.real * dcval2.real + dcval2.imag * dcval2.imag; dctemp.real = (dcval.real * dcval2.real + dcval.imag * dcval2.imag) / tmp; dctemp.imag = (-dcval.real * dcval2.imag + dcval2.real * dcval.imag) / tmp; dcval = dctemp; g_d->fillPatch (lo, hi, val); break; case OP_ELEM_MAX: if (me == 0) printf ("Testin GA_Elem_maximum..."); g_b->fillPatch (lo, hi, val2); g_c->elemMaximumPatch (g_a, lo, hi, g_b, lo, hi, lo, hi); ival = GA_MAX (ival, ival2); dval = GA_MAX (dval, dval2); fval = GA_MAX (fval, fval2); lval = GA_MAX (lval, lval2); tmp = dcval.real * dcval.real + dcval.imag * dcval.imag; tmp2 = dcval2.real * dcval2.real + dcval2.imag * dcval2.imag; if (tmp2 > tmp) dcval = dcval2; g_d->fillPatch (lo, hi, val); break; case OP_ELEM_MIN: if (me == 0) printf ("Testin GA_Elem_minimum..."); g_b->fillPatch (lo, hi, val2); g_c->elemMinimumPatch (g_a, lo, hi, g_b, lo, hi, lo, hi); ival = GA_MIN (ival, ival2); dval = GA_MIN (dval, dval2); fval = GA_MIN (fval, fval2); lval = GA_MIN (lval, lval2); tmp = dcval.real * dcval.real + dcval.imag * dcval.imag; tmp2 = dcval2.real * dcval2.real + dcval2.imag * dcval2.imag; if (tmp2 < tmp) dcval = dcval2; g_d->fillPatch (lo, hi, val); break; default: GA::SERVICES.error ("test_function: wrong operation.", OP); } switch (type) { case C_INT: alpha = (void *)&ai; beta = (void *)&bi; break; case C_DCPL: alpha = (void *)&adc; beta = (void *)&bdc; break; case C_DBL: alpha = (void *)&ad; beta = (void *)&bd; break; case C_FLOAT: alpha = (void *)⁡ beta =(void *) &bf; break; case C_LONG: alpha = (void *)&al; beta = (void *)&bl; break; default: GA::SERVICES.error ("wrong data type.", type); } if (OP < 4) g_e->addPatch (alpha, g_c, lo, hi, beta, g_d, lo, hi, lo, hi); else g_e->addPatch (alpha, g_a, lo, hi, beta, g_d, lo, hi, lo, hi); switch (type) { case C_INT: max = (void *)&lmax; min = (void *)&lmin; break; case C_DCPL: max = (void *)&dcmax; min = (void *)&dcmin; break; case C_DBL: max = (void *)&dmax; min = (void *)&dmin; break; case C_FLOAT: max = (void *)&fmax; min = (void *)&fmin; break; case C_LONG: max = (void *)&lmax; min = (void *)&lmin; break; default: GA::SERVICES.error ("wrong data type.", type); } g_e->selectElem (name_max, max, index); g_e->selectElem (name_min, min, index); switch (type) { double r, im; case C_INT: result = lmax - lmin; break; case C_DCPL: r = dcmax.real - dcmin.real; im = dcmax.imag - dcmin.imag; result = (int) (GA_ABS (r) + GA_ABS (im)); break; case C_DBL: result = (int) (dmax - dmin); break; case C_FLOAT: result = (int) (fmax - fmin); break; case C_LONG: result = (int) (lmax - lmin); break; default: GA::SERVICES.error ("wrong data type.", type); } if (me == 0) { if (MISMATCHED (result, 0)) printf ("is not ok\n"); else printf ("is ok.\n"); } /* g_a->printPatch(lo, hi, 1); g_d->printPatch(lo, hi, 1); g_a->printPatch(lo, hi, 1); */ g_a->destroy (); g_b->destroy (); g_c->destroy (); g_d->destroy (); g_e->destroy (); return ok; } int main(int argc, char *argv[]) { int me, nproc; int heap = 200000, stack = 200000; int d, op, ok = 1; GA::Initialize(argc, argv, heap, stack, GA_DATA_TYPE, 0); me=GA_Nodeid(); nproc=GA_Nnodes(); cout << "Rank = " << me << " : Size = " << nproc << "\n"; cout << "After Initialize()\n"; for (op = 0; op < 7; op++) { for (d = 1; d < 4; d++) { if (me == 0) printf ("\n\ndim =%d\n\n", d); if (me == 0) printf ("data type: int\t\t"); ok = test_fun (C_INT, d, op); if (me == 0) printf ("data type: double\t"); ok = test_fun (C_DBL, d, op); if (me == 0) printf ("data type: float\t"); ok = test_fun (C_FLOAT, d, op); if (me == 0) printf ("data type: long\t\t"); ok = test_fun (C_LONG, d, op); if (me == 0) printf ("data type: complex\t"); test_fun (C_DCPL, d, op); } } if(!me) cout << "Terminating\n"; GA::Terminate(); } ga-5-3/ga++/testing/testmult.cc0000640005473000001440000001200311430612245015150 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include /* utilities for GA test programs */ #include "testutil.h" #if HAVE_MATH_H # include #endif #define N 256 /* first dimension */ #define BASE 0 #define PERMUTE_ #define GA_DATA_TYPE MT_C_FLOAT #define GA_ABS(a) (((a) >= 0) ? (a) : (-(a))) #define TOLERANCE 0.000001 #ifdef MPIPP #include #define CLOCK_ MPI_Wtime #else #include "tcgmsg.h" #define CLOCK_ tcg_time #endif DoublePrecision gTime=0.0, gStart; void test(int data_type, int ndim) { int me=GA_Nodeid(); GA::GlobalArray *g_a, *g_b, *g_c, *g_A, *g_B, *g_C; int dims[GA_MAX_DIM]={N,N,2,2,2,1,1}; int lo[GA_MAX_DIM]={1,1,1,1,1,0,0}; int hi[GA_MAX_DIM]={N-2,N-2,1,1,1,0,0}; int clo[2], chi[2], m, n, k; double value1_dbl = 2.0, value2_dbl = 2.0; double alpha_dbl = 1.0, beta_dbl = 0.0; float value1_flt = 2.0, value2_flt = 2.0; float alpha_flt = 1.0, beta_flt = 0.0; DoubleComplex value1_dcpl = {2.0, 2.0}, value2_dcpl = {2.0, 2.0}; DoubleComplex alpha_dcpl = {1.0, 0.0} , beta_dcpl = {0.0, 0.0}; void *value1, *value2, *alpha, *beta; char name_a[] = "array A"; char name_b[] = "array B"; char name_c[] = "array C"; char name_a_[] = "array A_"; char name_b_[] = "array B_"; char name_c_[] = "array C_"; switch (data_type) { case C_FLOAT: alpha = (void *)&alpha_flt; beta = (void *)&beta_flt; value1 = (void *)&value1_flt; value2 = (void *)&value2_flt; if(me==0) printf("Single Precision: Testing GA_Sgemm,NGA_Matmul_patch for %d-Dimension", ndim); break; case C_DBL: alpha = (void *)&alpha_dbl; beta = (void *)&beta_dbl; value1 = (void *)&value1_dbl; value2 = (void *)&value2_dbl; if(me==0) printf("Double Precision: Testing GA_Dgemm,NGA_Matmul_patch for %d-Dimension", ndim); break; case C_DCPL: alpha = (void *)&alpha_dcpl; beta = (void *)&beta_dcpl; value1 = (void *)&value1_dcpl; value2 = (void *)&value2_dcpl; if(me==0) printf("Double Complex: Testing GA_Zgemm,NGA_Matmul_patch for %d-Dimension", ndim); break; default: GA::SERVICES.error("wrong data type", data_type); } g_a = GA::SERVICES.createGA(data_type, ndim, dims, name_a, NULL); g_b = GA::SERVICES.createGA(g_a, name_b); g_c = GA::SERVICES.createGA(g_a, name_c); g_a->fill(value1); g_b->fill( value2); g_c->zero(); /** g_c = g_a * g_b */ g_c->matmulPatch('N', 'N', alpha, beta, g_a, lo, hi, g_b, lo, hi, lo, hi); g_a->destroy(); g_b->destroy(); /** * Verifying g_c: * 1. Create g_A(=g_a) and g_B(=g_b) * 2. g_C = g_A*g_B; (Using Gemm routines) * 3. g_A = g_c; (copy the 2-d patch og g_c into g_A) * 4. g_C = g_A - g_C; (Using add() routine by making beta=-1.0) * 5. If all the elements in g_C is zero, implies SUCCESS. */ dims[0] = dims[1] = m = n = k = N-2; g_A = GA::SERVICES.createGA(data_type, 2, dims, name_a_, NULL); g_B = GA::SERVICES.createGA(g_A, name_b_); g_C = GA::SERVICES.createGA(g_A, name_c_); g_A->fill(value1); g_B->fill(value2); g_C->zero(); gStart = CLOCK_(); switch (data_type) { case C_FLOAT: g_C->sgemm('N', 'N', m, n, k, alpha_flt, g_A, g_B, beta_flt); beta_flt = -1.0; break; case C_DBL: g_C->dgemm('N', 'N', m, n, k, alpha_dbl, g_A, g_B, beta_dbl); beta_dbl = -1.0; break; case C_DCPL: g_C->zgemm('N', 'N', m, n, k, alpha_dcpl, g_A, g_B, beta_dcpl); beta_dcpl.real = -1.0; break; default: GA::SERVICES.error("wrong data type", data_type); } gTime += CLOCK_()-gStart; g_B->destroy(); clo[0] = clo[1] = 0; chi[0] = chi[1] = N-3; g_A->copyPatch('N', g_c, lo, hi, clo, chi) ; g_C->add(alpha, g_A, beta, g_C); switch (data_type) { case C_FLOAT: value1_flt = g_C->fdot(g_C); if(value1_flt != 0.0) GA::SERVICES.error("GA_Sgemm, NGA_Matmul_patch Failed", 0); break; case C_DBL: value1_dbl = g_C->ddot(g_C); if(value1_dbl != 0.0) GA::SERVICES.error("GA_Dgemm, NGA_Matmul_patch Failed", 0); break; case C_DCPL: value1_dcpl = g_C->zdot(g_C); if(value1_dcpl.real != 0.0 || value1_dcpl.imag != 0.0) GA::SERVICES.error("GA_Zgemm, NGA_Matmul_patch Failed", 0); break; default: GA::SERVICES.error("wrong data type", data_type); } if(me==0) printf("....OK\n"); g_A->destroy(); g_c->destroy(); g_C->destroy(); } void do_work() { int i; int me = GA_Nodeid(); for(i=2; i<=GA_MAX_DIM; i++) { test(C_FLOAT, i); test(C_DBL, i); test(C_DCPL, i); if(me == 0) printf("\n\n"); GA::SERVICES.sync(); } } int main(int argc, char **argv) { Integer heap=9000000, stack=9000000; int me; DoublePrecision time; GA::Initialize(argc, argv, heap, stack, GA_DATA_TYPE, 0); me=GA_Nodeid(); time = CLOCK_(); do_work(); #ifdef TIME printf("%d Total Time = %lf\n", me, CLOCK_()-time); printf("%d GEMM Total Time = %lf\n", me, gTime); #endif if(me==0)printf("\nSuccessfull\n\n"); GA::Terminate(); return 0; } ga-5-3/ga++/testing/testc.cc0000640005473000001440000000474211633461607014435 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include using namespace std; #include "ga++.h" #define N 5 #define GA_DATA_TYPE MT_F_REAL /* using std::cout; using std::printf; using std::sin; using std::endl; */ int main(int argc, char *argv[]) { int ONE=1; /* useful constants */ int n=N, type=MT_F_DBL; int me, nproc; int i, row; int dims[2]={N,N}; int lo[2], hi[2]; /* Note: on all current platforms DoublePrecision == double */ double buf[N], err, alpha, beta; int heap = 200000; int stack = 200000; GA::Initialize(argc, argv, heap, stack, GA_DATA_TYPE, 0); me = GA_Nodeid(); nproc = GA_Nnodes(); if(me==0)printf("Size: %d: Creating matrix A\n", nproc); GA::GlobalArray *g_a = GA::SERVICES.createGA(type, 2, dims, (char *)"A", NULL); if(me==0)printf("OK\n"); if(me==0)printf("Creating matrix B\n"); /* create matrix B so that it has dims and distribution of A*/ GA::GlobalArray *g_b = GA::SERVICES.createGA(g_a, (char *)"B"); if(me==0)printf("OK\n"); g_a->zero(); /* zero the matrix */ if(me==0)printf("Initializing matrix A\n"); /* fill in matrix A with random values in range 0.. 1 */ lo[1]=0; hi[1]=n-1; for(row=me; rowput(lo, hi, buf, &n); } // g_a->print(); if(me==0)printf("Symmetrizing matrix A\n"); g_a->symmetrize(); /* symmetrize the matrix A = 0.5*(A+A') */ /* check if A is symmetric */ if(me==0)printf("Checking if matrix A is symmetric\n"); g_a->transpose(g_b); /* B=A' */ alpha=1.; beta=-1.; g_b->add(&alpha, g_a, &beta, g_b); /* B= A - B */ err= g_b->ddot(g_b); if(me==0)printf("Error=%f\n",(double)err); if(me==0)printf("\nChecking atomic accumulate \n"); g_a->zero(); /* zero the matrix */ for(i=0; iacc(lo, hi, buf, &ONE, &alpha ); GA::SERVICES.sync(); if(me==0){ /* node 0 is checking the result */ g_a->get(lo, hi, buf,&ONE); for(i=0; idestroy(); g_b->destroy(); if(me==0) cout << "Terminating...\n"; GA::Terminate(); } ga-5-3/ga++/src/0000750005473000001440000000000012275260574012111 5ustar d3n000usersga-5-3/ga++/src/GAServices.h0000640005473000001440000006206111726173765014270 0ustar d3n000users#ifndef _GA_SERVICES_H #define _GA_SERVICES_H namespace GA { class GlobalArray; /** * Global Arrays Services class. * * @author Manoj Kumar Krishnan, PNNL. * @deprecated Please use the same functions found within the GA namespace. * * Collecting the global information: who am I, and how many processors * are being used. Initialize the communication library (either MPI or * TCSMSG) and Global array. Allocate momory to be used by GA by calling MA * and create global arrays. */ class GAServices { public: /** * Null-constructor. The component won't really be 'alive' * much at all until after setServices is called on it. */ GAServices(); /** Destructor. */ ~GAServices(); /** * Creates an ndim-dimensional array using the regular distribution model * and returns integer handle representing the array. * * The array can be distributed evenly or not. The control over the * distribution is accomplished by specifying chunk (block) size for all or * some of array dimensions. * * For example, for a 2-dimensional array, setting chunk[0]=dim[0] gives * distribution by vertical strips (chunk[0]*dims[0]); * setting chunk[1]=dim[1] gives distribution by horizontal strips * (chunk[1]*dims[1]). Actual chunks will be modified so that they are at * least the size of the minimum and each process has either zero or one * chunk. Specifying chunk[i] as <1 will cause that dimension to be * distributed evenly. * * As a convenience, when chunk is specified as NULL, the entire array is * distributed evenly. * * This is a collective operation. * * @param[in] type data type(MT_F_DBL,MT_F_INT,MT_F_DCPL) * @param[in] ndim number of array dimensions * @param[in] dims[ndim] array of dimensions * @param[in] arrayname a unique character string * @param[in] chunk[ndim] array of chunks, each element specifies * minimum size that given dimensions should be * chunked up into * * @return pointer to GlobalArray object created; NULL if it fails */ GlobalArray * createGA(int type, int ndim, int dims[], char *arrayname, int chunk[]); /** * Creates an array by following the user-specified distribution and * returns integer handle representing the array. * * The distribution is specified as a Cartesian product of distributions * for each dimension. The array indices start at 0. For example, the * following figure demonstrates distribution of a 2-dimensional array 8x10 * on 6 (or more) processors. nblock[2]={3,2}, the size of map array is s=5 * and array map contains the following elements map={0,2,6, 0, 5}. The * distribution is nonuniform because, P1 and P4 get 20 elements each and * processors P0,P2,P3, and P5 only 10 elements each. * * * * * * *
5 5
P0 P3 2
P1 P4 4
P2 P5 2
* * This is a collective operation. * * @param[in] arrayname a unique character string * @param[in] type MA data type (MT_F_DBL,MT_F_INT,MT_F_DCPL) * @param[in] ndim number of array dimensions * @param[in] dims array of dimension values * @param[in] block [ndim] no. of blocks each dimension is divided into * @param[in] maps [s] starting index for for each block; * the size s is a sum all elements of nblock array * * @return pointer to GlobalArray object created; NULL if it fails */ GlobalArray * createGA(int type, int ndim, int dims[], char *arrayname, int block[], int maps[]); /** * Creates a new array by applying all the properties of another existing * array. * * This is a collective operation. * * @param[in] arrayname a character string * @param[in] g_b integer handle for reference array * * @return pointer to GlobalArray object created; NULL if it fails */ GlobalArray * createGA(const GlobalArray *g_b, char *arrayname); /** * Creates a new array by applying all the properties of another existing * array. * * This is a collective operation. * * @param[in] g_b integer handle for reference array * * @return pointer to GlobalArray object created; NULL if it fails */ GlobalArray * createGA(const GlobalArray &g_b); /** * Creates a 10x10 global array of type "double"(default). * * This is a collective operation. * * @return pointer to GlobalArray object created; NULL if it fails */ GlobalArray * createGA(); /** * Creates an ndim-dimensional array with a layer of ghost cells around * the visible data on each processor using the regular distribution * model and returns an integer handle representing the array. * The array can be distributed evenly or not evenly. The control over * the distribution is accomplished by specifying chunk (block) size for * all or some of the array dimensions. For example, for a 2-dimensional * array, setting chunk(1)=dim(1) gives distribution by vertical strips * (chunk(1)*dims(1)); setting chunk(2)=dim(2) gives distribution by * horizontal strips (chunk(2)*dims(2)). Actual chunks will be modified * so that they are at least the size of the minimum and each process * has either zero or one chunk. Specifying chunk(i) as <1 will cause * that dimension (i-th) to be distributed evenly. The width of the * ghost cell layer in each dimension is specified using the array * width(). The local data of the global array residing on each * processor will have a layer width[n] ghosts cells wide on either * side of the visible data along the dimension n. * * This is a collective operation. * * @param[in] array_name a unique character string * @param[in] type data type (MT_DBL,MT_INT,MT_DCPL) * @param[in] ndim number of array dimensions * @param[in] dims [ndim] array of dimensions * @param[in] width [ndim] array of ghost cell widths * @param[in] chunk [ndim] array of chunks, each element specifies * minimum size that given dimensions should be * chunked up into * * @returns pointer to GlobalArray object created; NULL if it fails */ GlobalArray * createGA_Ghosts(int type, int ndim, int dims[], int width[], char *array_name, int chunk[]); /** * Creates an array with ghost cells by following the user-specified * distribution and returns integer handle representing the array. * The distribution is specified as a Cartesian product of distributions * for each dimension. For example, the following figure demonstrates * distribution of a 2-dimensional array 8x10 on 6 (or more) processors. * nblock(2)={3,2}, the size of map array is s=5 and array map contains * the following elements map={1,3,7, 1, 6}. The distribution is * nonuniform because, P1 and P4 get 20 elements each and processors * P0,P2,P3, and P5 only 10 elements each. * * * * * * *
5 5
P0 P3 2
P1 P4 4
P2 P5 2
* * The array width[] is used to control the width of the ghost cell * boundary around the visible data on each processor. The local data * of the global array residing on each processor will have a layer * width[n] ghosts cells wide on either side of the visible data along * the dimension n. * * This is a collective operation. * * @param[in] array_name a unique character string * @param[in] type data type (MT_DBL,MT_INT,MT_DCPL) * @param[in] ndim number of array dimensions * @param[in] dims [ndim] array of dimensions * @param[in] width [ndim] array of ghost cell widths * @param[in] nblock [ndim] no. of blocks each dimension is divided into * @param[in] map [s] starting index for for each block; * the size s is a sum of all elements of nblock array * * @return pointer to GlobalArray object created; NULL if it fails */ GlobalArray * createGA_Ghosts(int type, int ndim, int dims[], int width[], char *array_name, int map[], int nblock[]); /** * Broadcast from process root to all other processes a message of * length lenbuf. This is operation is provided only for convenience * purposes: it is available regardless of the message-passing library * that GA is running with. * * This is a collective operation. * * @param[in] lenbuf length of buffer * @param[in,out] buf [lenbuf] data * @param[in] root root process */ void brdcst(void *buf, int lenbuf, int root); /** * Returns the current value of the internal debug flag. * * This is a local operation. * * @return 0 if the debug flag is false, 1 if it is true. */ int getDebug(); /** * This functions returns the total number of nodes that the program is * running on. * * On SMP architectures, this will be less than or equal to the total * number of processors. * * This is a local operation. * * @return the number of nodes the program is running on */ int clusterNnodes(); /** * This function returns the node ID of the process. * * On SMP architectures with more than one processor per node, several * processes may return the same node id. * * This is a local operation. * * @return the node ID of the process */ int clusterNodeid(); /** * This function returns the cluster node ID of the specified process. * * On SMP architectures with more than one processor per node, several * processes may return the same node id. * * This is a local operation. * * @return the cluster node ID of the specified process */ int clusterProcNodeid(int iproc); /** * This function returns the number of processors available on node inode. * * This is a local operation. * * @param[in] inode * * @return the number of processors available on the given node */ int clusterNprocs(int inode); /** * This function returns the processor id associated with node inode and * the local processor id iproc. * * If node inode has N processors, then the value of iproc lies between * 0 and N-1. * * This is a local operation. * * @param[in] inode * @param[in] iproc * * @return the processor ID associated with the given node and local processor * ID */ int clusterProcid(int inode, int iproc); /** * Creates a set containing the number of mutexes. * * Mutex is a simple synchronization object used to protect Critical * Sections. Only one set of mutexes can exist at a time. Array of mutexes * can be created and destroyed as many times as needed. * Mutexes are numbered: 0, ..., number -1. * * This is a collective operation. * * @param[in] number of mutexes in mutex array * * @return 0 if the operation succeeded or 1 when failed. */ int createMutexes(int number); /** * Remove a user defined data type from GA * * @param[in] type - user defined data type * * @return 0 is operation is successful * -2 if type not registered * -1 if type reserved */ int deregisterType(int type); /** * Destroys the set of mutexes created with ga_create_mutexes. * * This is a collective operation. * * @return 0 if the operation succeeded or 1 when failed. */ int destroyMutexes(); /** * Double Global OPeration. * * X(1:N) is a vector present on each process. DGOP 'sums' elements of * X accross all nodes using the commutative operator OP. The result is * broadcast to all nodes. Supported operations include '+', '*', 'max', * 'min', 'absmax', 'absmin'. The use of lowerecase for operators is * necessary. This is operation is provided only for convenience purposes: * it is available regardless of the message-passing library that GA is * running with. * * This is a collective operation. * * @param[in] n number of elements * @param[in,out] x [n] array of elements * @param[in] op operator */ void dgop(double x[], int n, char *op); /** * Creates a new array by applying all the properties of another existing * array. * * This is a collective operation. * * @param[in] array_name a character string * @param[in] g_a integer handle for reference array * * @return array handle; a non-zero array handle means the call was succesful. */ int duplicate(int g_a, char* array_name); /** * To be called in case of an error. * * Print an error message and an integer value that represents error code. * Releases some system resources. * This is the required way of aborting the program execution. * * This operation is local. * * @param[in] message string to print * @param[in] code code to print */ void error(const char *message, int code); /** * Blocks the calling process until all the data transfers corresponding to * GA operations called after ga_init_fence complete. * * For example, since ga_put might return before the data reaches the final * destination, ga_init_fence and ga_fence allow process to wait until the * data tranfer is fully completed: * * @code * ga_init_fence(); * ga_put(g_a, ...); * ga_fence(); * @endcode * * ga_fence must be called after ga_init_fence. A barrier, ga_sync, assures * completion of all data transfers and implicitly cancels all outstanding * ga_init_fence calls. ga_init_fence and ga_fence must be used in pairs, * multiple calls to ga_fence require the same number of corresponding * ga_init_fence calls. ga_init_fence/ga_fence pairs can be nested. * * ga_fence works for multiple GA operations. For example: * * @code * ga_init_fence(); * ga_put(g_a, ...); * ga_scatter(g_a, ...); * ga_put(g_b, ...); * ga_fence(); * @endcode * * The calling process will be blocked until data movements initiated by * two calls to ga_put and one ga_scatter complete. */ void fence(); /** * Integer Global OPeration. * * The integer version of ga_dgop described above, also include the bitwise OR * operation. This is operation is provided only for convenience purposes: it * is available regardless of the message-passing library that GA is running * with. * * This is a collective operation. * * @param[in] n number of elements * @param[in,out] x [n] array of elements * @param[in] op operator */ void gop(int x[], int n, char *op); /** * Long Global OPeration. * * X(1:N) is a vector present on each process. LGOP 'sums' elements of * X accross all nodes using the commutative operator OP. The result is * broadcast to all nodes. Supported operations include '+', '*', 'max', * 'min', 'absmax', 'absmin'. The use of lowerecase for operators is * necessary. This is operation is provided only for convenience purposes: * it is available regardless of the message-passing library that GA is * running with. * * This is a collective operation. * * @param[in] n number of elements * @param[in,out] x [n] array of elements * @param[in] op operator */ void gop(long x[], int n, char *op); /** * Float Global OPeration. * * X(1:N) is a vector present on each process. FGOP 'sums' elements of * X accross all nodes using the commutative operator OP. The result is * broadcast to all nodes. Supported operations include '+', '*', 'max', * 'min', 'absmax', 'absmin'. The use of lowerecase for operators is * necessary. This is operation is provided only for convenience purposes: * it is available regardless of the message-passing library that GA is * running with. * * This is a collective operation. * * @param[in] n number of elements * @param[in,out] x [n] array of elements * @param[in] op operator */ void gop(float x[], int n, char *op); /** * Double Global OPeration. * * X(1:N) is a vector present on each process. DGOP 'sums' elements of * X accross all nodes using the commutative operator OP. The result is * broadcast to all nodes. Supported operations include '+', '*', 'max', * 'min', 'absmax', 'absmin'. The use of lowerecase for operators is * necessary. This is operation is provided only for convenience purposes: * it is available regardless of the message-passing library that GA is * running with. * * This is a collective operation. * * @param[in] n number of elements * @param[in,out] x [n] array of elements * @param[in] op operator */ void gop(double x[], int n, char *op); /** * Integer Global OPeration. * * The integer (more precisely long) version of ga_dgop described above, * also include the bitwise OR operation. * This is operation is provided only for convenience purposes: it is * available regardless of the message-passing library that GA is running * with. * * This is a collective operation. * * @param[in] n number of elements * @param[in,out] x [n] array of elements * @param[in] op operator */ void igop(int x[], int n, char *op); /** * Initializes tracing of completion status of data movement operations. * * This operation is local. */ void initFence(); /** * Returns amount of memory (in bytes) used in the allocated global * arrays on the calling processor. * * This operation is local. * * @return amount of memory (in bytes) used in the allocated global arrays on * the calling processor */ size_t inquireMemory(); /** * Long Global OPeration. * * X(1:N) is a vector present on each process. LGOP 'sums' elements of * X accross all nodes using the commutative operator OP. The result is * broadcast to all nodes. Supported operations include '+', '*', 'max', * 'min', 'absmax', 'absmin'. The use of lowerecase for operators is * necessary. This is operation is provided only for convenience purposes: * it is available regardless of the message-passing library that GA is * running with. * * This is a collective operation. * * @param[in] n number of elements * @param[in,out] x [n] array of elements * @param[in] op operator */ void lgop(long x[], int n, char *op); /** * Locks a mutex object identified by the mutex number. It is a fatal * error for a process to attempt to lock a mutex which was already * locked by this process. * * @param[in] mutex object id */ void lock(int mutex); /** * Mask the intrinsic sync operations during collective calls. * * GA Collective calls has Sync calls at the begining and ending of * of the call. Sometimes there may be some redundacy in sync calls, which * can be avoided by masking the sync operations. * * Setting the parameters as zero will mask (disable) the call. Any non-zero * value will enable the call. Initially these params are set to non-zero * value. * * @param[in] first masks the sync at the begining of the collective call. * @param[in] last masks the sync at the end of the collective call. */ void maskSync(int first, int last); /** * If GA_uses_ma returns true, then GA_Memory_avail returns the * lesser of the amount available under the GA limit and the amount * available from MA (according to ma_inquire_avail operation). * If no GA limit has been set, it returns what MA says is available. * If ( ! GA_Uses_ma() && ! GA_Memory_limited() ) returns < 0, indicating * that the bound on currently available memory cannot be determined. * * This operation is local. * * @return amount of memory (in bytes) left for allocation of new * global arrays on the calling processor. * */ int memoryAvailable() ; /** * Indicates if limit is set on memory usage in Global Arrays on the * calling processor. * * This operation is local. * * @return 1 means "yes", "0" means "no". */ int memoryLimited(); /** * Force completion of a nonblocking operation locally. * * Waiting on a nonblocking put or an accumulate operation assures that data * was injected into the network and the user buffer can be now be reused. * Completing a get operation assures data has arrived into the user memory * and is ready for use. Wait operation ensures only local completion. Unlike * their blocking counterparts, the nonblocking operations are not ordered * with respect to the destination. Performance being one reason, the other * reason is that by ensuring ordering we incur additional and possibly * unnecessary overhead on applications that do not require their operations * to be ordered. For cases where ordering is necessary, it can be done by * calling a fence operation. The fence operation is provided to the user to * confirm remote completion if needed. * * This is a local operation. * * @param[in] nbhandle nonblocking handle */ void nbWait(GANbhdl *nbhandle); /** * Returns the GA process id (0, ..., ga_Nnodes()-1) of the requesting * compute process. * * This operation is local. * * @return the GA process ID of the requesting process */ int nodeid(); /** * Returns the number of the GA compute (user) processes. * * This operation is local. * * @return the number of GA processes */ int nodes(); /** * Print statistical information on GA use. * * This non-collective (MIMD) operation prints information about: * - number of calls to * - create * - duplicate * - destroy * - get * - put * - scatter * - gather * - read_and_inc operations * - total amount of data moved in the primitive operations * - amount of data moved in the primitive operations to logicaly remote * locations * - maximum memory consumption in global arrays * - number of requests serviced in the interrupt-driven implementations * by the calling process. * * This operation is local. */ void printStats(); /** * Add a user defined data type to GA * * @param[in] size - size (in bytes) of user defined data type * * @return handle for new data type */ int registerType(size_t size); /** * This function sets an internal flag in the GA library to either true or * false. * * The value of this flag can be recovered at any time using the * getDebug function. The flag is set to false when the the GA library * is initialized. This can be useful in a number of debugging situations, * especially when examining the behavior of routines that are called in * multiple locations in a code. * * This is a local operation. * * @param[in] dbg value to set internal flag */ void setDebug(int dbg); /** * Sets the amount of memory to be used (in bytes) per process. * * This is a local operation. * * @param[in] limit the amount of memory in bytes per process */ void setMemoryLimit(size_t limit); /** * Prints info about allocated arrays. * * @param[in] verbose if true print distribution info */ void summarize(int verbose); /** * Synchronize processes (a barrier) and ensure that all GA operations * completed. * * This is a collective operation. */ void sync(); /** * Unlocks a mutex object identified by the mutex number. * * It is a fatal error for a process to attempt to unlock a mutex which has * not been locked by this process. * * @param[in] mutex object id */ void unlock(int mutex); /** * Returns whether memory comes from internal or external allocator. * * This operation is local. * * @return "1" if memory comes from MA; * "0" if memory comes from another source e.g. System V shared memory */ int usesMA(); /** * Returns whether GA is using Fortran indexing. * * @return "1" if uses fortran API, else returns "0" */ int usesFAPI(); /** * This function return a wall (or elapsed) time on the calling processor. * * Returns time in seconds representing elapsed wall-clock time * since an arbitrary time in the past. Example: * * @code * double starttime, endtime; * starttime = GA::SERVICES.wtime(); * // {{.... code snippet to be timed ....}} * endtime = GA::SERVICES.wtime(); * printf("Time taken = %lf seconds\n", endtime-starttime); * @endcode * * This is a local operation. * * @note This function is only available in release 4.1 or greater. */ double wtime(); }; extern GAServices SERVICES; } #endif /* _GA_SERVICES_H */ ga-5-3/ga++/src/services.h0000640005473000001440000005572411726173765014130 0ustar d3n000users#ifndef _SERVICES_H #define _SERVICES_H namespace GA { class GlobalArray; /** * Creates an ndim-dimensional array using the regular distribution model * and returns integer handle representing the array. * * The array can be distributed evenly or not. The control over the * distribution is accomplished by specifying chunk (block) size for all or * some of array dimensions. * * For example, for a 2-dimensional array, setting chunk[0]=dim[0] gives * distribution by vertical strips (chunk[0]*dims[0]); * setting chunk[1]=dim[1] gives distribution by horizontal strips * (chunk[1]*dims[1]). Actual chunks will be modified so that they are at * least the size of the minimum and each process has either zero or one * chunk. Specifying chunk[i] as <1 will cause that dimension to be * distributed evenly. * * As a convenience, when chunk is specified as NULL, the entire array is * distributed evenly. * * This is a collective operation. * * @param[in] type data type(MT_F_DBL,MT_F_INT,MT_F_DCPL) * @param[in] ndim number of array dimensions * @param[in] dims[ndim] array of dimensions * @param[in] arrayname a unique character string * @param[in] chunk[ndim] array of chunks, each element specifies * minimum size that given dimensions should be * chunked up into * * @return pointer to GlobalArray object created; NULL if it fails */ GlobalArray* createGA(int type, int ndim, int dims[], char *arrayname, int chunk[]); /** * Creates an array by following the user-specified distribution and * returns integer handle representing the array. * * The distribution is specified as a Cartesian product of distributions * for each dimension. The array indices start at 0. For example, the * following figure demonstrates distribution of a 2-dimensional array 8x10 * on 6 (or more) processors. nblock[2]={3,2}, the size of map array is s=5 * and array map contains the following elements map={0,2,6, 0, 5}. The * distribution is nonuniform because, P1 and P4 get 20 elements each and * processors P0,P2,P3, and P5 only 10 elements each. * * * * * * *
5 5
P0 P3 2
P1 P4 4
P2 P5 2
* * This is a collective operation. * * @param[in] arrayname a unique character string * @param[in] type MA data type (MT_F_DBL,MT_F_INT,MT_F_DCPL) * @param[in] ndim number of array dimensions * @param[in] dims array of dimension values * @param[in] block [ndim] no. of blocks each dimension is divided into * @param[in] maps [s] starting index for for each block; * the size s is a sum all elements of nblock array * * @return pointer to GlobalArray object created; NULL if it fails */ GlobalArray * createGA(int type, int ndim, int dims[], char *arrayname, int block[], int maps[]); /** * Creates a new array by applying all the properties of another existing * array. * * This is a collective operation. * * @param[in] arrayname a character string * @param[in] g_b integer handle for reference array * * @return pointer to GlobalArray object created; NULL if it fails */ GlobalArray * createGA(const GlobalArray *g_b, char *arrayname); /** * Creates a new array by applying all the properties of another existing * array. * * This is a collective operation. * * @param[in] g_b integer handle for reference array * * @return pointer to GlobalArray object created; NULL if it fails */ GlobalArray * createGA(const GlobalArray &g_b); /** * Creates a 10x10 global array of type "double"(default). * * This is a collective operation. * * @return pointer to GlobalArray object created; NULL if it fails */ GlobalArray * createGA(); /** * Creates an ndim-dimensional array with a layer of ghost cells around * the visible data on each processor using the regular distribution * model and returns an integer handle representing the array. * The array can be distributed evenly or not evenly. The control over * the distribution is accomplished by specifying chunk (block) size for * all or some of the array dimensions. For example, for a 2-dimensional * array, setting chunk(1)=dim(1) gives distribution by vertical strips * (chunk(1)*dims(1)); setting chunk(2)=dim(2) gives distribution by * horizontal strips (chunk(2)*dims(2)). Actual chunks will be modified * so that they are at least the size of the minimum and each process * has either zero or one chunk. Specifying chunk(i) as <1 will cause * that dimension (i-th) to be distributed evenly. The width of the * ghost cell layer in each dimension is specified using the array * width(). The local data of the global array residing on each * processor will have a layer width[n] ghosts cells wide on either * side of the visible data along the dimension n. * * This is a collective operation. * * @param[in] array_name a unique character string * @param[in] type data type (MT_DBL,MT_INT,MT_DCPL) * @param[in] ndim number of array dimensions * @param[in] dims [ndim] array of dimensions * @param[in] width [ndim] array of ghost cell widths * @param[in] chunk [ndim] array of chunks, each element specifies * minimum size that given dimensions should be * chunked up into * * @returns pointer to GlobalArray object created; NULL if it fails */ GlobalArray * createGA_Ghosts(int type, int ndim, int dims[], int width[], char *array_name, int chunk[]); /** * Creates an array with ghost cells by following the user-specified * distribution and returns integer handle representing the array. * The distribution is specified as a Cartesian product of distributions * for each dimension. For example, the following figure demonstrates * distribution of a 2-dimensional array 8x10 on 6 (or more) processors. * nblock(2)={3,2}, the size of map array is s=5 and array map contains * the following elements map={1,3,7, 1, 6}. The distribution is * nonuniform because, P1 and P4 get 20 elements each and processors * P0,P2,P3, and P5 only 10 elements each. * * * * * * *
5 5
P0 P3 2
P1 P4 4
P2 P5 2
* * The array width[] is used to control the width of the ghost cell * boundary around the visible data on each processor. The local data * of the global array residing on each processor will have a layer * width[n] ghosts cells wide on either side of the visible data along * the dimension n. * * This is a collective operation. * * @param[in] array_name a unique character string * @param[in] type data type (MT_DBL,MT_INT,MT_DCPL) * @param[in] ndim number of array dimensions * @param[in] dims [ndim] array of dimensions * @param[in] width [ndim] array of ghost cell widths * @param[in] nblock [ndim] no. of blocks each dimension is divided into * @param[in] map [s] starting index for for each block; * the size s is a sum of all elements of nblock array * * @return pointer to GlobalArray object created; NULL if it fails */ GlobalArray * createGA_Ghosts(int type, int ndim, int dims[], int width[], char *array_name, int map[], int nblock[]); /** * Broadcast from process root to all other processes a message of * length lenbuf. This is operation is provided only for convenience * purposes: it is available regardless of the message-passing library * that GA is running with. * * This is a collective operation. * * @param[in] lenbuf length of buffer * @param[in,out] buf [lenbuf] data * @param[in] root root process */ void brdcst(void *buf, int lenbuf, int root); /** * Returns the current value of the internal debug flag. * * This is a local operation. * * @return 0 if the debug flag is false, 1 if it is true. */ int getDebug(); /** * This functions returns the total number of nodes that the program is * running on. * * On SMP architectures, this will be less than or equal to the total * number of processors. * * This is a local operation. * * @return the number of nodes the program is running on */ int clusterNnodes(); /** * This function returns the node ID of the process. * * On SMP architectures with more than one processor per node, several * processes may return the same node id. * * This is a local operation. * * @return the node ID of the process */ int clusterNodeid(); /** * This function returns the cluster node ID of the specified process. * * On SMP architectures with more than one processor per node, several * processes may return the same node id. * * This is a local operation. * * @return the cluster node ID of the specified process */ int clusterProcNodeid(int iproc); /** * This function returns the number of processors available on node inode. * * This is a local operation. * * @param[in] inode * * @return the number of processors available on the given node */ int clusterNprocs(int inode); /** * This function returns the processor id associated with node inode and * the local processor id iproc. * * If node inode has N processors, then the value of iproc lies between * 0 and N-1. * * This is a local operation. * * @param[in] inode * @param[in] iproc * * @return the processor ID associated with the given node and local processor * ID */ int clusterProcid(int inode, int iproc); /** * Creates a set containing the number of mutexes. * * Mutex is a simple synchronization object used to protect Critical * Sections. Only one set of mutexes can exist at a time. Array of mutexes * can be created and destroyed as many times as needed. * Mutexes are numbered: 0, ..., number -1. * * This is a collective operation. * * @param[in] number of mutexes in mutex array * * @return 0 if the opereation succeeded or 1 when failed. */ int createMutexes(int number); /** * Remove a user defined data type from GA * * @param[in] type - user defined data type * * @return 0 is operation is successful * -2 if type not registered * -1 if type reserved */ int deregisterType(int type); /** * Destroys the set of mutexes created with ga_create_mutexes. * * This is a collective operation. * * @return 0 if the operation succeeded or 1 when failed. */ int destroyMutexes(); /** * Double Global OPeration. * * X(1:N) is a vector present on each process. DGOP 'sums' elements of * X accross all nodes using the commutative operator OP. The result is * broadcast to all nodes. Supported operations include '+', '*', 'max', * 'min', 'absmax', 'absmin'. The use of lowerecase for operators is * necessary. This is operation is provided only for convenience purposes: * it is available regardless of the message-passing library that GA is * running with. * * This is a collective operation. * * @param[in] n number of elements * @param[in,out] x [n] array of elements * @param[in] op operator */ void dgop(double x[], int n, char *op); /** * Creates a new array by applying all the properties of another existing * array. * * This is a collective operation. * * @param[in] array_name a character string * @param[in] g_a integer handle for reference array * * @return array handle; a non-zero array handle means the call was succesful. */ int duplicate(int g_a, char* array_name); /** * To be called in case of an error. * * Print an error message and an integer value that represents error code. * Releases some system resources. * This is the required way of aborting the program execution. * * This operation is local. * * @param[in] message string to print * @param[in] code code to print */ void error(const char *message, int code); /** * Blocks the calling process until all the data transfers corresponding to * GA operations called after ga_init_fence complete. * * For example, since ga_put might return before the data reaches the final * destination, ga_init_fence and ga_fence allow process to wait until the * data tranfer is fully completed: * * @code * ga_init_fence(); * ga_put(g_a, ...); * ga_fence(); * @endcode * * ga_fence must be called after ga_init_fence. A barrier, ga_sync, assures * completion of all data transfers and implicitly cancels all outstanding * ga_init_fence calls. ga_init_fence and ga_fence must be used in pairs, * multiple calls to ga_fence require the same number of corresponding * ga_init_fence calls. ga_init_fence/ga_fence pairs can be nested. * * ga_fence works for multiple GA operations. For example: * * @code * ga_init_fence(); * ga_put(g_a, ...); * ga_scatter(g_a, ...); * ga_put(g_b, ...); * ga_fence(); * @endcode * * The calling process will be blocked until data movements initiated by * two calls to ga_put and one ga_scatter complete. */ void fence(); /** * Integer Global OPeration. * * The integer version of ga_dgop described above, also include the bitwise OR * operation. This is operation is provided only for convenience purposes: it * is available regardless of the message-passing library that GA is running * with. * * This is a collective operation. * * @param[in] n number of elements * @param[in,out] x [n] array of elements * @param[in] op operator */ void gop(int x[], int n, char *op); /** * Long Global OPeration. * * X(1:N) is a vector present on each process. LGOP 'sums' elements of * X accross all nodes using the commutative operator OP. The result is * broadcast to all nodes. Supported operations include '+', '*', 'max', * 'min', 'absmax', 'absmin'. The use of lowerecase for operators is * necessary. This is operation is provided only for convenience purposes: * it is available regardless of the message-passing library that GA is * running with. * * This is a collective operation. * * @param[in] n number of elements * @param[in,out] x [n] array of elements * @param[in] op operator */ void gop(long x[], int n, char *op); /** * Float Global OPeration. * * X(1:N) is a vector present on each process. FGOP 'sums' elements of * X accross all nodes using the commutative operator OP. The result is * broadcast to all nodes. Supported operations include '+', '*', 'max', * 'min', 'absmax', 'absmin'. The use of lowerecase for operators is * necessary. This is operation is provided only for convenience purposes: * it is available regardless of the message-passing library that GA is * running with. * * This is a collective operation. * * @param[in] n number of elements * @param[in,out] x [n] array of elements * @param[in] op operator */ void gop(float x[], int n, char *op); /** * Double Global OPeration. * * X(1:N) is a vector present on each process. DGOP 'sums' elements of * X accross all nodes using the commutative operator OP. The result is * broadcast to all nodes. Supported operations include '+', '*', 'max', * 'min', 'absmax', 'absmin'. The use of lowerecase for operators is * necessary. This is operation is provided only for convenience purposes: * it is available regardless of the message-passing library that GA is * running with. * * This is a collective operation. * * @param[in] n number of elements * @param[in,out] x [n] array of elements * @param[in] op operator */ void gop(double x[], int n, char *op); /** * Integer Global OPeration. * * The integer (more precisely long) version of ga_dgop described above, * also include the bitwise OR operation. * This is operation is provided only for convenience purposes: it is * available regardless of the message-passing library that GA is running * with. * * This is a collective operation. * * @param[in] n number of elements * @param[in,out] x [n] array of elements * @param[in] op operator */ void igop(int x[], int n, char *op); /** * Initializes tracing of completion status of data movement operations. * * This operation is local. */ void initFence(); /** * Returns amount of memory (in bytes) used in the allocated global * arrays on the calling processor. * * This operation is local. * * @return amount of memory (in bytes) used in the allocated global arrays on * the calling processor */ size_t inquireMemory(); /** * Long Global OPeration. * * X(1:N) is a vector present on each process. LGOP 'sums' elements of * X accross all nodes using the commutative operator OP. The result is * broadcast to all nodes. Supported operations include '+', '*', 'max', * 'min', 'absmax', 'absmin'. The use of lowerecase for operators is * necessary. This is operation is provided only for convenience purposes: * it is available regardless of the message-passing library that GA is * running with. * * This is a collective operation. * * @param[in] n number of elements * @param[in,out] x [n] array of elements * @param[in] op operator */ void lgop(long x[], int n, char *op); /** * Locks a mutex object identified by the mutex number. It is a fatal * error for a process to attempt to lock a mutex which was already * locked by this process. * * @param[in] mutex object id */ void lock(int mutex); /** * Mask the intrinsic sync operations during collective calls. * * GA Collective calls has Sync calls at the begining and ending of * of the call. Sometimes there may be some redundacy in sync calls, which * can be avoided by masking the sync operations. * * Setting the parameters as zero will mask (disable) the call. Any non-zero * value will enable the call. Initially these params are set to non-zero * value. * * @param[in] first masks the sync at the begining of the collective call. * @param[in] last masks the sync at the end of the collective call. */ void maskSync(int first, int last); /** * If GA_uses_ma returns true, then GA_Memory_avail returns the * lesser of the amount available under the GA limit and the amount * available from MA (according to ma_inquire_avail operation). * If no GA limit has been set, it returns what MA says is available. * If ( ! GA_Uses_ma() && ! GA_Memory_limited() ) returns < 0, indicating * that the bound on currently available memory cannot be determined. * * This operation is local. * * @return amount of memory (in bytes) left for allocation of new * global arrays on the calling processor. * */ int memoryAvailable() ; /** * Indicates if limit is set on memory usage in Global Arrays on the * calling processor. * * This operation is local. * * @return 1 means "yes", "0" means "no". */ int memoryLimited(); /** * Force completion of a nonblocking operation locally. * * Waiting on a nonblocking put or an accumulate operation assures that data * was injected into the network and the user buffer can be now be reused. * Completing a get operation assures data has arrived into the user memory * and is ready for use. Wait operation ensures only local completion. Unlike * their blocking counterparts, the nonblocking operations are not ordered * with respect to the destination. Performance being one reason, the other * reason is that by ensuring ordering we incur additional and possibly * unnecessary overhead on applications that do not require their operations * to be ordered. For cases where ordering is necessary, it can be done by * calling a fence operation. The fence operation is provided to the user to * confirm remote completion if needed. * * This is a local operation. * * @param[in] nbhandle nonblocking handle */ void nbWait(GANbhdl *nbhandle); /** * Returns the GA process id (0, ..., ga_Nnodes()-1) of the requesting * compute process. * * This operation is local. * * @return the GA process ID of the requesting process */ int nodeid(); /** * Returns the number of the GA compute (user) processes. * * This operation is local. * * @return the number of GA processes */ int nodes(); /** * Print statistical information on GA use. * * This non-collective (MIMD) operation prints information about: * - number of calls to * - create * - duplicate * - destroy * - get * - put * - scatter * - gather * - read_and_inc operations * - total amount of data moved in the primitive operations * - amount of data moved in the primitive operations to logicaly remote * locations * - maximum memory consumption in global arrays * - number of requests serviced in the interrupt-driven implementations * by the calling process. * * This operation is local. */ void printStats(); /** * Add a user defined data type to GA * * @param[in] size - size (in bytes) of user defined data type * * @return handle for new data type */ int registerType(size_t size); /** * This function sets an internal flag in the GA library to either true or * false. * * The value of this flag can be recovered at any time using the * getDebug function. The flag is set to false when the the GA library * is initialized. This can be useful in a number of debugging situations, * especially when examining the behavior of routines that are called in * multiple locations in a code. * * This is a local operation. * * @param[in] dbg value to set internal flag */ void setDebug(int dbg); /** * Sets the amount of memory to be used (in bytes) per process. * * This is a local operation. * * @param[in] limit the amount of memory in bytes per process */ void setMemoryLimit(size_t limit); /** * Prints info about allocated arrays. * * @param[in] verbose if true print distribution info */ void summarize(int verbose); /** * Synchronize processes (a barrier) and ensure that all GA operations * completed. * * This is a collective operation. */ void sync(); /** * Unlocks a mutex object identified by the mutex number. * * It is a fatal error for a process to attempt to unlock a mutex which has * not been locked by this process. * * @param[in] mutex object id */ void unlock(int mutex); /** * Returns whether memory comes from internal or external allocator. * * This operation is local. * * @return "1" if memory comes from MA; * "0" if memory comes from another source e.g. System V shared memory */ int usesMA(); /** * Returns whether GA is using Fortran indexing. * * @return "1" if uses fortran API, else returns "0" */ int usesFAPI(); /** * This function return a wall (or elapsed) time on the calling processor. * * Returns time in seconds representing elapsed wall-clock time * since an arbitrary time in the past. Example: * * @code * double starttime, endtime; * starttime = GA::wtime(); * // {{.... code snippet to be timed ....}} * endtime = GA::wtime(); * printf("Time taken = %lf seconds\n", endtime-starttime); * @endcode * * This is a local operation. * * @note This function is only available in release 4.1 or greater. */ double wtime(); } #endif /* _SERVICES_H */ ga-5-3/ga++/src/init_term.cc0000640005473000001440000000161211640201576014403 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "mp3.h" #include "ga++.h" void GA::Initialize(int argc, char *argv[], size_t limit) { MP_INIT(argc, argv); // GA Initialization if(limit == 0) GA_Initialize(); else GA_Initialize_ltd(limit); } void GA::Initialize(int argc, char *argv[], unsigned long heapSize, unsigned long stackSize, int type, size_t limit) { MP_INIT(argc, argv); // GA Initialization if(limit == 0) GA_Initialize(); else GA_Initialize_ltd(limit); //if(GA_Uses_ma()) { int nProcs = GA_Nnodes(); // Initialize memory allocator heapSize /= ((unsigned long) nProcs); stackSize /= ((unsigned long) nProcs); if(!MA_init(type, stackSize, heapSize)) GA_Error((char *)"MA_init failed",stackSize+heapSize); // } } void GA::Terminate() { /* Terminate GA */ GA_Terminate(); MP_FINALIZE(); } ga-5-3/ga++/src/ga++.h0000640005473000001440000000333111430612245012764 0ustar d3n000users/** * @file ga++.h * * @author Manoj Kumar Krishnan, PNNL. * @author Jeff Daily, PNNL. */ /** * @mainpage * * @author Manoj Kumar Krishnan, PNNL. * @author Jeff Daily, PNNL. * * The GA Toolkit * * The Global Arrays (GA) toolkit provides an efficient and portable * “shared-memory” programming interface for distributed-memory computers. * Each process in a MIMD parallel program can asynchronously access logical * blocks of physically distributed dense multi-dimensional arrays, without * need for explicit cooperation by other processes. Unlike other * shared-memory environments, the GA model exposes to the programmer the * non-uniform memory access (NUMA) characteristics of the high performance * computers and acknowledges that access to a remote portion of the shared * data is slower than to the local portion. The locality information for the * shared data is available, and a direct access to the local portions of * shared data is provided. * * Global Arrays have been designed to complement rather than substitute for * the message-passing programming model. The programmer is free to use both * the shared-memory and message-passing paradigms in the same program, and to * take advantage of existing message-passing software libraries. Global * Arrays are compatible with the Message Passing Interface (MPI). * * The Global Arrays toolkit has been in the public domain since 1994. It has * been actively supported and employed in several large codes since then. */ #ifndef _GAPP_H #define _GAPP_H #include "ga.h" #include "macdecls.h" #define GANbhdl ga_nbhdl_t #include "init_term.h" #include "services.h" #include "PGroup.h" #include "GlobalArray.h" #include "GAServices.h" #endif // _GAPP_H ga-5-3/ga++/src/init_term.h0000640005473000001440000000404311633461607014253 0ustar d3n000users/** * @file init_term.h * * Ga Initialize and Terminate calls. */ #ifndef _INITTERM_H #define _INITTERM_H namespace GA { /** * Initialize Global Arrays. * Allocate and initialize internal data structures in Global Arrays. * The limit is per process: it is the amount of memory that the given * processor can contribute to collective allocation of global arrays. * It does not include temporary storage that GA might be allocating (and * releasing) during execution of a particular operation. * limit < 0 means "allow unlimited memory usage" in which case this * operation is equivalent to GA_initialize. This is a collective operation. * @param argc,argv - command line argument lists. * @param limit - amount of memory in bytes per process [input] */ void Initialize(int argc, char *argv[], size_t limit = 0); /** *Initialize Global Arrays. * Allocate and initialize internal data structures in Global Arrays. * The limit is per process: it is the amount of memory that the given * processor can contribute to collective allocation of global arrays. * It does not include temporary storage that GA might be allocating (and * releasing) during execution of a particular operation. * limit < 0 means "allow unlimited memory usage" in which case this * operation is equivalent to GA_initialize. This is a collective operation. * @param argc,argv - command line argument lists. * @param limit - amount of memory in bytes per process [input] * @param heapSize, stackSize - all of the dynamically allocated local memory * @param type - data type. * in GA comes from its companion library, the Memory Allocator (MA) library. * MA allocates and manages local memory using stack and heap disciplines. * [refer section 3.2 of GA USer manual for more info] */ void Initialize(int argc, char *argv[], unsigned long heapSize, unsigned long stackSize, int type, size_t limit = 0); /** * Delete all active arrays and destroy internal data structures. * This is a collective operation. */ void Terminate(); } #endif /* _INITTERM_H */ ga-5-3/ga++/src/GlobalArray.cc0000640005473000001440000011547312127315324014621 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "ga++.h" #define GA_DATA_TYPE C_DBL #define INVALID_HANDLE -1000 static int sTmpVar = 0; /** * Constructors and Destructor of GlobalArray */ GA::GlobalArray::GlobalArray(int type, int ndim, int dims[], char *arrayname, int chunk[]) { mHandle = NGA_Create(type, ndim, dims, arrayname, chunk); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(int type, int ndim, int dims[], char *arrayname, int chunk[], GA::PGroup * p_handle) { mHandle = NGA_Create_config(type, ndim, dims, arrayname, chunk, p_handle->handle()); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(int type, int ndim, int64_t dims[], char *arrayname, int64_t chunk[]) { mHandle = NGA_Create64(type, ndim, dims, arrayname, chunk); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(int type, int ndim, int64_t dims[], char *arrayname, int64_t chunk[], GA::PGroup * p_handle) { mHandle = NGA_Create_config64(type, ndim, dims, arrayname, chunk, p_handle->handle()); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(int type, int ndim, int dims[], char *arrayname, int block[], int maps[]) { mHandle = NGA_Create_irreg(type, ndim, dims, arrayname, block, maps); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(int type, int ndim, int dims[], char *arrayname, int block[], int maps[], GA::PGroup * p_handle) { mHandle = NGA_Create_irreg_config(type, ndim, dims, arrayname, block, maps, p_handle->handle()); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(int type, int ndim, int64_t dims[], char *arrayname, int64_t block[], int64_t maps[]) { mHandle = NGA_Create_irreg64(type, ndim, dims, arrayname, block, maps); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(int type, int ndim, int64_t dims[], char *arrayname, int64_t block[], int64_t maps[], GA::PGroup * p_handle) { mHandle = NGA_Create_irreg_config64(type, ndim, dims, arrayname, block, maps, p_handle->handle()); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(int type, int ndim, int dims[], int width[], char *arrayname, int chunk[], char ghosts) { mHandle = NGA_Create_ghosts(type, ndim, dims, width, arrayname, chunk); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(int type, int ndim, int64_t dims[], int64_t width[], char *arrayname, int64_t chunk[], char ghosts) { mHandle = NGA_Create_ghosts64(type, ndim, dims, width, arrayname, chunk); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(int type, int ndim, int dims[], int width[], char *arrayname, int chunk[], GA::PGroup * p_handle, char ghosts) { mHandle = NGA_Create_ghosts_config(type, ndim, dims, width, arrayname, chunk, p_handle->handle()); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(int type, int ndim, int64_t dims[], int64_t width[], char *arrayname, int64_t chunk[], GA::PGroup * p_handle, char ghosts) { mHandle = NGA_Create_ghosts_config64(type, ndim, dims, width, arrayname, chunk, p_handle->handle()); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(int type, int ndim, int dims[], int width[], char *arrayname, int block[], int maps[], char ghosts) { mHandle = NGA_Create_ghosts_irreg(type, ndim, dims, width, arrayname, block, maps); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(int type, int ndim, int64_t dims[], int64_t width[], char *arrayname, int64_t block[], int64_t maps[], char ghosts) { mHandle = NGA_Create_ghosts_irreg64(type, ndim, dims, width, arrayname, block, maps); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(int type, int ndim, int dims[], int width[], char *arrayname, int block[], int maps[], GA::PGroup * p_handle, char ghosts) { mHandle = NGA_Create_ghosts_irreg_config(type, ndim, dims, width, arrayname, block, maps, p_handle->handle()); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(int type, int ndim, int64_t dims[], int64_t width[], char *arrayname, int64_t block[], int64_t maps[], GA::PGroup * p_handle, char ghosts) { mHandle = NGA_Create_ghosts_irreg_config64(type, ndim, dims, width, arrayname, block, maps, p_handle->handle()); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(const GA::GlobalArray &g_a, char *arrayname) { mHandle = GA_Duplicate(g_a.mHandle, arrayname); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::GlobalArray(const GA::GlobalArray &g_a) { char temp_name[20]; sprintf(temp_name, "tmpGA%d", sTmpVar++); mHandle = GA_Duplicate(g_a.mHandle, temp_name); if(!mHandle) GA_Error((char *)" GA creation failed",0); GA_Copy(g_a.mHandle, mHandle); } GA::GlobalArray::GlobalArray() { mHandle = GA_Create_handle(); if(!mHandle) GA_Error((char *)" GA creation failed",0); } GA::GlobalArray::~GlobalArray() { GA_Destroy(mHandle); mHandle = INVALID_HANDLE; } /********************************************************************* * Member functions of GA::GlobalArray * *********************************************************************/ void GA::GlobalArray::acc(int lo[], int hi[], void *buf, int ld[], void *alpha) const { NGA_Acc(mHandle, lo, hi, buf, ld, alpha); } void GA::GlobalArray::acc(int64_t lo[], int64_t hi[], void *buf, int64_t ld[], void *alpha) const { NGA_Acc64(mHandle, lo, hi, buf, ld, alpha); } void GA::GlobalArray::access(int lo[], int hi[], void *ptr, int ld[]) const { NGA_Access(mHandle, lo, hi, ptr, ld); } void GA::GlobalArray::access(int64_t lo[], int64_t hi[], void *ptr, int64_t ld[]) const { NGA_Access64(mHandle, lo, hi, ptr, ld); } void GA::GlobalArray::accessBlock(int idx, void *ptr, int ld[]) const { NGA_Access_block(mHandle, idx, ptr, ld); } void GA::GlobalArray::accessBlock(int64_t idx, void *ptr, int64_t ld[]) const { NGA_Access_block64(mHandle, idx, ptr, ld); } void GA::GlobalArray::accessBlockGrid(int index[], void *ptr, int ld[]) const { NGA_Access_block_grid(mHandle, index, ptr, ld); } void GA::GlobalArray::accessBlockGrid(int64_t index[], void *ptr, int64_t ld[]) const { NGA_Access_block_grid64(mHandle, index, ptr, ld); } void GA::GlobalArray::accessBlockSegment(int proc, void *ptr, int *len) const { NGA_Access_block_segment(mHandle, proc, ptr, len); } void GA::GlobalArray::accessBlockSegment(int proc, void *ptr, int64_t *len) const { NGA_Access_block_segment64(mHandle, proc, ptr, len); } void GA::GlobalArray::accessGhosts(int dims[], void *ptr, int ld[]) const { NGA_Access_ghosts(mHandle, dims, ptr, ld); } void GA::GlobalArray::accessGhosts(int64_t dims[], void *ptr, int64_t ld[]) const { NGA_Access_ghosts64(mHandle, dims, ptr, ld); } void GA::GlobalArray::accessGhostElement(void *ptr, int subscript[], int ld[]) const { NGA_Access_ghost_element(mHandle, ptr, subscript, ld); } void GA::GlobalArray::accessGhostElement(void *ptr, int64_t subscript[], int64_t ld[]) const { NGA_Access_ghost_element64(mHandle, ptr, subscript, ld); } void GA::GlobalArray::add(void *alpha, const GA::GlobalArray * g_a, void *beta, const GA::GlobalArray * g_b) const { GA_Add(alpha, g_a->mHandle, beta, g_b->mHandle, mHandle); } void GA::GlobalArray::addPatch (void *alpha, const GA::GlobalArray * g_a, int alo[], int ahi[], void *beta, const GA::GlobalArray * g_b, int blo[], int bhi[], int clo[], int chi[]) const { NGA_Add_patch(alpha, g_a->mHandle, alo, ahi, beta, g_b->mHandle, blo, bhi, mHandle, clo, chi); } void GA::GlobalArray::addPatch (void *alpha, const GA::GlobalArray * g_a, int64_t alo[], int64_t ahi[], void *beta, const GA::GlobalArray * g_b, int64_t blo[], int64_t bhi[], int64_t clo[], int64_t chi[]) const { NGA_Add_patch64(alpha, g_a->mHandle, alo, ahi, beta, g_b->mHandle, blo, bhi, mHandle, clo, chi); } int GA::GlobalArray::allocate() const { return GA_Allocate(mHandle); } void GA::GlobalArray::allocGatscatBuf(int nelems) const { NGA_Alloc_gatscat_buf(nelems); } void GA::GlobalArray::checkHandle(char* string) const { GA_Check_handle(mHandle, string); } int GA::GlobalArray::compareDistr(const GA::GlobalArray *g_a) const { return GA_Compare_distr(mHandle, g_a->mHandle); } void GA::GlobalArray::copy(const GA::GlobalArray *g_a) const { GA_Copy(g_a->mHandle, mHandle); } void GA::GlobalArray::copyPatch(char trans, const GA::GlobalArray* ga, int alo[], int ahi[], int blo[], int bhi[]) const { NGA_Copy_patch(trans, ga->mHandle, alo, ahi, mHandle, blo, bhi); } void GA::GlobalArray::copyPatch(char trans, const GA::GlobalArray* ga, int64_t alo[], int64_t ahi[], int64_t blo[], int64_t bhi[]) const { NGA_Copy_patch64(trans, ga->mHandle, alo, ahi, mHandle, blo, bhi); } double GA::GlobalArray::ddot(const GA::GlobalArray * g_a) const { return GA_Ddot(mHandle, g_a->mHandle); } double GA::GlobalArray::ddotPatch(char ta, int alo[], int ahi[], const GA::GlobalArray * g_a, char tb, int blo[], int bhi[]) const { return NGA_Ddot_patch(mHandle, ta, alo, ahi, g_a->mHandle, tb, blo, bhi); } double GA::GlobalArray::ddotPatch(char ta, int64_t alo[], int64_t ahi[], const GA::GlobalArray * g_a, char tb, int64_t blo[], int64_t bhi[]) const { return NGA_Ddot_patch64(mHandle, ta, alo, ahi, g_a->mHandle, tb, blo, bhi); } void GA::GlobalArray::destroy() { GA_Destroy(mHandle); mHandle = INVALID_HANDLE; } void GA::GlobalArray::dgemm(char ta, char tb, int m, int n, int k, double alpha, const GA::GlobalArray *g_a, const GA::GlobalArray *g_b, double beta) const { GA_Dgemm(ta, tb, m, n, k, alpha, g_a->mHandle, g_b->mHandle, beta, mHandle); } void GA::GlobalArray::dgemm(char ta, char tb, int64_t m, int64_t n, int64_t k, double alpha, const GA::GlobalArray *g_a, const GA::GlobalArray *g_b, double beta) const { GA_Dgemm64(ta, tb, m, n, k, alpha, g_a->mHandle, g_b->mHandle, beta, mHandle); } void GA::GlobalArray::diag(const GA::GlobalArray *g_s, GA::GlobalArray *g_v, void *eval) const { GA_Diag(mHandle, g_s->mHandle, g_v->mHandle, eval); } void GA::GlobalArray::diagReuse(int control, const GA::GlobalArray *g_s, GA::GlobalArray *g_v, void *eval) const { GA_Diag_reuse(control, mHandle, g_s->mHandle, g_v->mHandle, eval); } void GA::GlobalArray::diagStd(GlobalArray *g_v, void *eval) const { GA_Diag_std(mHandle, g_v->mHandle, eval); } void GA::GlobalArray::diagSeq(const GA::GlobalArray * g_s, const GA::GlobalArray * g_v, void *eval) const { GA_Diag_seq(mHandle, g_s->mHandle, g_v->mHandle, eval); } void GA::GlobalArray::diagStdSeq(const GA::GlobalArray * g_v, void *eval) const { GA_Diag_std_seq(mHandle, g_v->mHandle, eval); } void GA::GlobalArray::distribution(int me, int* lo, int* hi) const { NGA_Distribution(mHandle, me, lo, hi); } void GA::GlobalArray::distribution(int me, int64_t* lo, int64_t* hi) const { NGA_Distribution64(mHandle, me, lo, hi); } float GA::GlobalArray::fdot(const GA::GlobalArray * g_a) const { return GA_Fdot(mHandle, g_a->mHandle); } float GA::GlobalArray::fdotPatch(char t_a, int alo[], int ahi[], const GA::GlobalArray * g_b, char t_b, int blo[], int bhi[]) const { return NGA_Fdot_patch(mHandle, t_a, alo, ahi, g_b->mHandle, t_b, blo, bhi); } float GA::GlobalArray::fdotPatch(char t_a, int64_t alo[], int64_t ahi[], const GA::GlobalArray * g_b, char t_b, int64_t blo[], int64_t bhi[]) const { return NGA_Fdot_patch64(mHandle, t_a, alo, ahi, g_b->mHandle, t_b, blo, bhi); } void GA::GlobalArray::fill(void *value) const { GA_Fill(mHandle, value); } void GA::GlobalArray::fillPatch (int lo[], int hi[], void *val) const { NGA_Fill_patch(mHandle, lo, hi, val); } void GA::GlobalArray::fillPatch (int64_t lo[], int64_t hi[], void *val) const { NGA_Fill_patch64(mHandle, lo, hi, val); } void GA::GlobalArray::freeGatscatBuf() { NGA_Free_gatscat_buf(); } void GA::GlobalArray::gather(void *v, int * subsarray[], int n) const { NGA_Gather(mHandle, v, subsarray, n); } void GA::GlobalArray::gather(void *v, int64_t * subsarray[], int64_t n) const { NGA_Gather64(mHandle, v, subsarray, n); } void GA::GlobalArray::get(int lo[], int hi[], void *buf, int ld[]) const { NGA_Get(mHandle, lo, hi, buf, ld); } void GA::GlobalArray::get(int64_t lo[], int64_t hi[], void *buf, int64_t ld[]) const { NGA_Get64(mHandle, lo, hi, buf, ld); } void GA::GlobalArray::getBlockInfo(int num_blocks[], int block_dims[]) { GA_Get_block_info(mHandle, num_blocks, block_dims); } int GA::GlobalArray::hasGhosts() const { return GA_Has_ghosts(mHandle); } int GA::GlobalArray::idot(const GA::GlobalArray * g_a) const { return GA_Idot(mHandle, g_a->mHandle); } long GA::GlobalArray::idotPatch(char ta, int alo[], int ahi[], const GA::GlobalArray * g_a, char tb, int blo[], int bhi[]) const { return NGA_Idot_patch(mHandle, ta, alo, ahi, g_a->mHandle, tb, blo, bhi); } long GA::GlobalArray::idotPatch(char ta, int64_t alo[], int64_t ahi[], const GA::GlobalArray * g_a, char tb, int64_t blo[], int64_t bhi[]) const { return NGA_Idot_patch64(mHandle, ta, alo, ahi, g_a->mHandle, tb, blo, bhi); } void GA::GlobalArray::inquire(int *type, int *ndim, int dims[]) const { NGA_Inquire(mHandle, type, ndim, dims); } void GA::GlobalArray::inquire(int *type, int *ndim, int64_t dims[]) const { NGA_Inquire64(mHandle, type, ndim, dims); } char* GA::GlobalArray::inquireName() const { return GA_Inquire_name(mHandle); } long GA::GlobalArray::ldot(const GA::GlobalArray * g_a) const { return GA_Ldot(mHandle, g_a->mHandle); } long GA::GlobalArray::ldotPatch(char ta, int alo[], int ahi[], const GA::GlobalArray * g_a, char tb, int blo[], int bhi[]) const { return NGA_Ldot_patch(mHandle, ta, alo, ahi, g_a->mHandle, tb, blo, bhi); } long GA::GlobalArray::ldotPatch(char ta, int64_t alo[], int64_t ahi[], const GA::GlobalArray * g_a, char tb, int64_t blo[], int64_t bhi[]) const { return NGA_Ldot_patch64(mHandle, ta, alo, ahi, g_a->mHandle, tb, blo, bhi); } int GA::GlobalArray::lltSolve(const GA::GlobalArray * g_a) const { return GA_Llt_solve(g_a->mHandle, mHandle); } int GA::GlobalArray::locate(int subscript[]) const { return NGA_Locate(mHandle, subscript); } int GA::GlobalArray::locate(int64_t subscript[]) const { return NGA_Locate64(mHandle, subscript); } int GA::GlobalArray::locateRegion(int lo[], int hi[], int map[], int procs[]) const { return NGA_Locate_region(mHandle, lo, hi, map, procs); } int GA::GlobalArray::locateRegion(int64_t lo[], int64_t hi[], int64_t map[], int procs[]) const { return NGA_Locate_region64(mHandle, lo, hi, map, procs); } void GA::GlobalArray::luSolve(char trans, const GA::GlobalArray * g_a) const { GA_Lu_solve(trans, g_a->mHandle, mHandle); } void GA::GlobalArray::matmulPatch(char transa, char transb, void* alpha, void *beta, const GA::GlobalArray *g_a, int ailo, int aihi, int ajlo, int ajhi, const GA::GlobalArray *g_b, int bilo, int bihi, int bjlo, int bjhi, int cilo, int cihi, int cjlo, int cjhi) const { GA_Matmul_patch(transa, transb, alpha, beta, g_a->mHandle, ailo, aihi, ajlo, ajhi, g_b->mHandle, bilo, bihi, bjlo, bjhi, mHandle, cilo, cihi, cjlo, cjhi); } void GA::GlobalArray::matmulPatch(char transa, char transb, void* alpha, void *beta, const GA::GlobalArray *g_a, int64_t ailo, int64_t aihi, int64_t ajlo, int64_t ajhi, const GA::GlobalArray *g_b, int64_t bilo, int64_t bihi, int64_t bjlo, int64_t bjhi, int64_t cilo, int64_t cihi, int64_t cjlo, int64_t cjhi) const { GA_Matmul_patch64(transa, transb, alpha, beta, g_a->mHandle, ailo, aihi, ajlo, ajhi, g_b->mHandle, bilo, bihi, bjlo, bjhi, mHandle, cilo, cihi, cjlo, cjhi); } void GA::GlobalArray::matmulPatch(char transa, char transb, void* alpha, void *beta, const GA::GlobalArray *g_a, int *alo, int *ahi, const GA::GlobalArray *g_b, int *blo, int *bhi, int *clo, int *chi) const { NGA_Matmul_patch(transa, transb, alpha, beta, g_a->mHandle, alo, ahi, g_b->mHandle, blo, bhi, mHandle, clo, chi); } void GA::GlobalArray::matmulPatch(char transa, char transb, void* alpha, void *beta, const GA::GlobalArray *g_a, int64_t *alo, int64_t *ahi, const GA::GlobalArray *g_b, int64_t *blo, int64_t *bhi, int64_t *clo, int64_t *chi) const { NGA_Matmul_patch64(transa, transb, alpha, beta, g_a->mHandle, alo, ahi, g_b->mHandle, blo, bhi, mHandle, clo, chi); } void GA::GlobalArray::mergeDistrPatch(int alo[], int ahi[], GlobalArray *g_b, int blo[], int bhi[]) { NGA_Merge_distr_patch(mHandle, alo, ahi, g_b->mHandle, blo, bhi); } void GA::GlobalArray::mergeDistrPatch(int64_t alo[], int64_t ahi[], GlobalArray *g_b, int64_t blo[], int64_t bhi[]) { NGA_Merge_distr_patch64(mHandle, alo, ahi, g_b->mHandle, blo, bhi); } int GA::GlobalArray::isMirrored() { return GA_Is_mirrored(mHandle); } void GA::GlobalArray::mergeMirrored() { GA_Merge_mirrored(mHandle); } void GA::GlobalArray::nbAcc(int lo[], int hi[], void *buf, int ld[], void *alpha, GANbhdl *nbhandle) { NGA_NbAcc(mHandle, lo, hi, buf, ld, alpha, nbhandle); } void GA::GlobalArray::nbAcc(int64_t lo[], int64_t hi[], void *buf, int64_t ld[], void *alpha, GANbhdl *nbhandle) { NGA_NbAcc64(mHandle, lo, hi, buf, ld, alpha, nbhandle); } void GA::GlobalArray::nbGet(int lo[], int hi[], void *buf, int ld[], GANbhdl *nbhandle) { NGA_NbGet(mHandle, lo, hi, buf, ld, nbhandle); } void GA::GlobalArray::nbGet(int64_t lo[], int64_t hi[], void *buf, int64_t ld[], GANbhdl *nbhandle) { NGA_NbGet64(mHandle, lo, hi, buf, ld, nbhandle); } void GA::GlobalArray::nbGetGhostDir(int mask[], GANbhdl *nbhandle) { NGA_NbGet_ghost_dir(mHandle, mask, nbhandle); } void GA::GlobalArray::nbGetGhostDir(int64_t mask[], GANbhdl *nbhandle) { NGA_NbGet_ghost_dir64(mHandle, mask, nbhandle); } void GA::GlobalArray::nblock(int numblock[]) const { GA_Nblock(mHandle, numblock); } void GA::GlobalArray::nbPut(int lo[], int hi[], void *buf, int ld[], GANbhdl *nbhandle) { NGA_NbPut(mHandle, lo, hi, buf, ld, nbhandle); } void GA::GlobalArray::nbPut(int64_t lo[], int64_t hi[], void *buf, int64_t ld[], GANbhdl *nbhandle) { NGA_NbPut64(mHandle, lo, hi, buf, ld, nbhandle); } int GA::GlobalArray::ndim() const { return GA_Ndim(mHandle); } void GA::GlobalArray::pack(const GA::GlobalArray *g_dest, const GA::GlobalArray *g_mask, int lo, int hi, int *icount) const { GA_Pack(mHandle, g_dest->mHandle, g_mask->mHandle, lo, hi, icount); } void GA::GlobalArray::pack(const GA::GlobalArray *g_dest, const GA::GlobalArray *g_mask, int64_t lo, int64_t hi, int64_t *icount) const { GA_Pack64(mHandle, g_dest->mHandle, g_mask->mHandle, lo, hi, icount); } void GA::GlobalArray::patchEnum(int lo, int hi, void *start, void *inc) { GA_Patch_enum(mHandle, lo, hi, start, inc); } void GA::GlobalArray::patchEnum(int64_t lo, int64_t hi, void *start, void *inc) { GA_Patch_enum64(mHandle, lo, hi, start, inc); } void GA::GlobalArray::periodicAcc(int lo[], int hi[], void* buf, int ld[], void* alpha) const { NGA_Periodic_acc(mHandle, lo, hi, buf, ld, alpha); } void GA::GlobalArray::periodicAcc(int64_t lo[], int64_t hi[], void* buf, int64_t ld[], void* alpha) const { NGA_Periodic_acc64(mHandle, lo, hi, buf, ld, alpha); } void GA::GlobalArray::periodicGet(int lo[], int hi[], void* buf, int ld[]) const { NGA_Periodic_get(mHandle, lo, hi, buf, ld); } void GA::GlobalArray::periodicGet(int64_t lo[], int64_t hi[], void* buf, int64_t ld[]) const { NGA_Periodic_get64(mHandle, lo, hi, buf, ld); } void GA::GlobalArray::periodicPut(int lo[], int hi[], void* buf, int ld[]) const { NGA_Periodic_put(mHandle, lo, hi, buf, ld); } void GA::GlobalArray::periodicPut(int64_t lo[], int64_t hi[], void* buf, int64_t ld[]) const { NGA_Periodic_put64(mHandle, lo, hi, buf, ld); } void GA::GlobalArray::print() const { GA_Print(mHandle); } void GA::GlobalArray::printDistribution() const { GA_Print_distribution(mHandle); } void GA::GlobalArray::printFile(FILE *file) const { GA_Print_file(file, mHandle); } void GA::GlobalArray::printPatch(int* lo, int* hi, int pretty) const { NGA_Print_patch(mHandle, lo, hi, pretty); } void GA::GlobalArray::printPatch(int64_t* lo, int64_t* hi, int pretty) const { NGA_Print_patch64(mHandle, lo, hi, pretty); } void GA::GlobalArray::procTopology(int proc, int coord[]) const { NGA_Proc_topology(mHandle, proc, coord); } void GA::GlobalArray::put(int lo[], int hi[], void *buf, int ld[]) const { NGA_Put(mHandle, lo, hi, buf, ld); } void GA::GlobalArray::put(int64_t lo[], int64_t hi[], void *buf, int64_t ld[]) const { NGA_Put64(mHandle, lo, hi, buf, ld); } long GA::GlobalArray::readInc(int subscript[], long inc) const { return NGA_Read_inc(mHandle, subscript, inc); } long GA::GlobalArray::readInc(int64_t subscript[], long inc) const { return NGA_Read_inc64(mHandle, subscript, inc); } void GA::GlobalArray::release(int lo[], int hi[]) const { NGA_Release(mHandle, lo, hi); } void GA::GlobalArray::release(int64_t lo[], int64_t hi[]) const { NGA_Release64(mHandle, lo, hi); } void GA::GlobalArray::releaseBlock(int idx) const { NGA_Release_block(mHandle, idx); } void GA::GlobalArray::releaseBlockGrid(int index[]) const { NGA_Release_block_grid(mHandle, index); } void GA::GlobalArray::releaseBlockSegment(int proc) const { NGA_Release_block_segment(mHandle, proc); } void GA::GlobalArray::releaseGhosts() const { NGA_Release_ghosts(mHandle); } void GA::GlobalArray::releaseGhostElement(int subscript[]) const { NGA_Release_ghost_element(mHandle, subscript); } void GA::GlobalArray::releaseGhostElement(int64_t subscript[]) const { NGA_Release_ghost_element64(mHandle, subscript); } void GA::GlobalArray::releaseUpdate(int lo[], int hi[]) const { NGA_Release_update(mHandle, lo, hi); } void GA::GlobalArray::releaseUpdate(int64_t lo[], int64_t hi[]) const { NGA_Release_update64(mHandle, lo, hi); } void GA::GlobalArray::releaseUpdateBlock(int idx) const { NGA_Release_update_block(mHandle, idx); } void GA::GlobalArray::releaseUpdateBlockGrid(int index[]) const { NGA_Release_update_block_grid(mHandle, index); } void GA::GlobalArray::releaseUpdateBlockSegment(int idx) const { NGA_Release_update_block_segment(mHandle, idx); } void GA::GlobalArray::releaseUpdateGhosts() const { NGA_Release_update_ghosts(mHandle); } void GA::GlobalArray::releaseUpdateGhostElement(int subscript[]) const { NGA_Release_update_ghost_element(mHandle, subscript); } void GA::GlobalArray::releaseUpdateGhostElement(int64_t subscript[]) const { NGA_Release_update_ghost_element64(mHandle, subscript); } void GA::GlobalArray::scale(void *value) const { GA_Scale(mHandle, value); } void GA::GlobalArray::scalePatch (int lo[], int hi[], void *val) const { NGA_Scale_patch(mHandle, lo, hi, val); } void GA::GlobalArray::scalePatch (int64_t lo[], int64_t hi[], void *val) const { NGA_Scale_patch64(mHandle, lo, hi, val); } void GA::GlobalArray::scanAdd(const GA::GlobalArray *g_dest, const GlobalArray *g_mask, int lo, int hi, int excl) const { GA_Scan_add(mHandle, g_dest->mHandle, g_mask->mHandle, lo, hi, excl); } void GA::GlobalArray::scanAdd(const GA::GlobalArray *g_dest, const GlobalArray *g_mask, int64_t lo, int64_t hi, int excl) const { GA_Scan_add64(mHandle, g_dest->mHandle, g_mask->mHandle, lo, hi, excl); } void GA::GlobalArray::scanCopy(const GA::GlobalArray *g_dest, const GA::GlobalArray *g_mask, int lo, int hi) const { GA_Scan_copy(mHandle, g_dest->mHandle, g_mask->mHandle, lo, hi); } void GA::GlobalArray::scanCopy(const GA::GlobalArray *g_dest, const GA::GlobalArray *g_mask, int64_t lo, int64_t hi) const { GA_Scan_copy64(mHandle, g_dest->mHandle, g_mask->mHandle, lo, hi); } void GA::GlobalArray::scatter(void *v, int *subsarray[], int n) const { NGA_Scatter(mHandle, v, subsarray, n); } void GA::GlobalArray::scatter(void *v, int64_t *subsarray[], int64_t n) const { NGA_Scatter64(mHandle, v, subsarray, n); } void GA::GlobalArray::scatterAcc(void *v, int *subsarray[], int n, void *alpha) const { NGA_Scatter_acc(mHandle, v, subsarray, n, alpha); } void GA::GlobalArray::scatterAcc(void *v, int64_t *subsarray[], int64_t n, void *alpha) const { NGA_Scatter_acc64(mHandle, v, subsarray, n, alpha); } void GA::GlobalArray::selectElem(char *op, void* val, int index[]) const { NGA_Select_elem(mHandle, op, val, index); } void GA::GlobalArray::selectElem(char *op, void* val, int64_t index[]) const { NGA_Select_elem64(mHandle, op, val, index); } void GA::GlobalArray::setArrayName(char *name) const { GA_Set_array_name(mHandle, name); } void GA::GlobalArray::setBlockCyclic(int dims[]) const { GA_Set_block_cyclic(mHandle, dims); } void GA::GlobalArray::setBlockCyclicProcGrid(int dims[], int proc_grid[]) const{ GA_Set_block_cyclic_proc_grid(mHandle, dims, proc_grid); } void GA::GlobalArray::setChunk(int chunk[]) const { GA_Set_chunk(mHandle, chunk); } void GA::GlobalArray::setChunk(int64_t chunk[]) const { GA_Set_chunk64(mHandle, chunk); } void GA::GlobalArray::setData(int ndim, int dims[], int type) const { GA_Set_data(mHandle, ndim, dims, type); } void GA::GlobalArray::setData(int ndim, int64_t dims[], int type) const { GA_Set_data64(mHandle, ndim, dims, type); } void GA::GlobalArray::setGhosts(int width[]) const { GA_Set_ghosts(mHandle, width); } void GA::GlobalArray::setGhosts(int64_t width[]) const { GA_Set_ghosts64(mHandle, width); } void GA::GlobalArray::setIrregDistr(int mapc[], int nblock[]) const { GA_Set_irreg_distr(mHandle, mapc, nblock); } void GA::GlobalArray::setIrregDistr(int64_t mapc[], int64_t nblock[]) const { GA_Set_irreg_distr64(mHandle, mapc, nblock); } void GA::GlobalArray::setRestricted(int list[], int nprocs) const { GA_Set_restricted(mHandle, list, nprocs); } void GA::GlobalArray::setRestrictedRange(int lo_proc, int hi_proc) const { GA_Set_restricted_range(mHandle, lo_proc, hi_proc); } void GA::GlobalArray::setPGroup(GA::PGroup *pHandle) const { GA_Set_pgroup(mHandle, pHandle->handle()); } void GA::GlobalArray::sgemm(char ta, char tb, int m, int n, int k, float alpha, const GA::GlobalArray *g_a, const GA::GlobalArray *g_b, float beta) const { GA_Sgemm(ta, tb, m, n, k, alpha, g_a->mHandle, g_b->mHandle, beta, mHandle); } void GA::GlobalArray::sgemm(char ta, char tb, int64_t m, int64_t n, int64_t k, float alpha, const GA::GlobalArray *g_a, const GA::GlobalArray *g_b, float beta) const { GA_Sgemm64(ta, tb, m, n, k, alpha, g_a->mHandle, g_b->mHandle, beta, mHandle); } int GA::GlobalArray::solve(const GA::GlobalArray * g_a) const { return GA_Solve(g_a->mHandle, mHandle); } int GA::GlobalArray::spdInvert() const { return GA_Spd_invert(mHandle); } void GA::GlobalArray::stridedAcc(int lo[], int hi[], int skip[], void*buf, int ld[], void *alpha) const { NGA_Strided_acc(mHandle, lo, hi, skip, buf, ld, alpha); } void GA::GlobalArray::stridedAcc(int64_t lo[], int64_t hi[], int64_t skip[], void*buf, int64_t ld[], void *alpha) const { NGA_Strided_acc64(mHandle, lo, hi, skip, buf, ld, alpha); } void GA::GlobalArray::stridedGet(int lo[], int hi[], int skip[], void*buf, int ld[]) const { NGA_Strided_get(mHandle, lo, hi, skip, buf, ld); } void GA::GlobalArray::stridedGet(int64_t lo[], int64_t hi[], int64_t skip[], void*buf, int64_t ld[]) const { NGA_Strided_get64(mHandle, lo, hi, skip, buf, ld); } void GA::GlobalArray::stridedPut(int lo[], int hi[], int skip[], void*buf, int ld[]) const { NGA_Strided_put(mHandle, lo, hi, skip, buf, ld); } void GA::GlobalArray::stridedPut(int64_t lo[], int64_t hi[], int64_t skip[], void*buf, int64_t ld[]) const { NGA_Strided_put64(mHandle, lo, hi, skip, buf, ld); } void GA::GlobalArray::summarize(int verbose) const { GA_Summarize(verbose); } void GA::GlobalArray::symmetrize() const { GA_Symmetrize(mHandle); } int GA::GlobalArray::totalBlocks() const { return GA_Total_blocks(mHandle); } void GA::GlobalArray::transpose(const GA::GlobalArray * g_a) const { GA_Transpose(mHandle, g_a->mHandle); } void GA::GlobalArray::unpack(GlobalArray *g_dest, GlobalArray *g_mask, int lo, int hi, int *icount) const { GA_Unpack(mHandle, g_dest->mHandle, g_mask->mHandle, lo, hi, icount); } void GA::GlobalArray::unpack(GlobalArray *g_dest, GlobalArray *g_mask, int64_t lo, int64_t hi, int64_t *icount) const { GA_Unpack64(mHandle, g_dest->mHandle, g_mask->mHandle, lo, hi, icount); } void GA::GlobalArray::updateGhosts() const { GA_Update_ghosts(mHandle); } void GA::GlobalArray::updateGhostsNb(GANbhdl *nbhandle) const{ NGA_Update_ghosts_nb(mHandle, nbhandle); } int GA::GlobalArray::updateGhostDir(int dimension, int idir, int cflag) const { return NGA_Update_ghost_dir(mHandle, dimension, idir, cflag); } void GA::GlobalArray::getGhostBlock(int lo[], int hi[], void *buf, int ld[]) const { NGA_Get_ghost_block(mHandle, lo, hi, buf, ld); } void GA::GlobalArray::getGhostBlock(int64_t lo[], int64_t hi[], void *buf, int64_t ld[]) const { NGA_Get_ghost_block64(mHandle, lo, hi, buf, ld); } DoubleComplex GA::GlobalArray::zdot(const GA::GlobalArray * g_a) const { return GA_Zdot(mHandle, g_a->mHandle); } DoubleComplex GA::GlobalArray::zdotPatch(char ta, int alo[], int ahi[], const GA::GlobalArray * g_a, char tb, int blo[], int bhi[]) const { return NGA_Zdot_patch(mHandle, ta, alo, ahi, g_a->mHandle, tb, blo, bhi); } DoubleComplex GA::GlobalArray::zdotPatch(char ta, int64_t alo[], int64_t ahi[], const GA::GlobalArray * g_a, char tb, int64_t blo[], int64_t bhi[]) const { return NGA_Zdot_patch64(mHandle, ta, alo, ahi, g_a->mHandle, tb, blo, bhi); } void GA::GlobalArray::zero() const { GA_Zero(mHandle); } void GA::GlobalArray::zeroPatch (int lo[], int hi[]) const { NGA_Zero_patch(mHandle, lo, hi); } void GA::GlobalArray::zeroPatch (int64_t lo[], int64_t hi[]) const { NGA_Zero_patch64(mHandle, lo, hi); } void GA::GlobalArray::zgemm(char ta, char tb, int m, int n, int k, DoubleComplex alpha, const GA::GlobalArray *g_a, const GA::GlobalArray *g_b, DoubleComplex beta) const { GA_Zgemm(ta, tb, m, n, k, alpha, g_a->mHandle, g_b->mHandle, beta, mHandle); } void GA::GlobalArray::zgemm(char ta, char tb, int64_t m, int64_t n, int64_t k, DoubleComplex alpha, const GA::GlobalArray *g_a, const GA::GlobalArray *g_b, DoubleComplex beta) const { GA_Zgemm64(ta, tb, m, n, k, alpha, g_a->mHandle, g_b->mHandle, beta, mHandle); } /* recent additions */ void GA::GlobalArray::absValue() const { GA_Abs_value(mHandle); } void GA::GlobalArray::addConstant(void* alpha) const { GA_Add_constant(mHandle, alpha); } void GA::GlobalArray::recip() const { GA_Recip(mHandle); } void GA::GlobalArray::elemMultiply(const GA::GlobalArray * g_a, const GA::GlobalArray * g_b) const { GA_Elem_multiply(g_a->mHandle, g_b->mHandle, mHandle); } void GA::GlobalArray::elemDivide(const GA::GlobalArray * g_a, const GA::GlobalArray * g_b) const { GA_Elem_divide(g_a->mHandle, g_b->mHandle, mHandle); } void GA::GlobalArray::elemMaximum(const GA::GlobalArray * g_a, const GA::GlobalArray * g_b) const { GA_Elem_maximum(g_a->mHandle, g_b->mHandle, mHandle); } void GA::GlobalArray::elemMinimum(const GA::GlobalArray * g_a, const GA::GlobalArray * g_b) const { GA_Elem_minimum(g_a->mHandle, g_b->mHandle, mHandle); } void GA::GlobalArray::absValuePatch(int *lo, int *hi) const { GA_Abs_value_patch(mHandle, lo, hi); } void GA::GlobalArray::absValuePatch(int64_t *lo, int64_t *hi) const { GA_Abs_value_patch64(mHandle, lo, hi); } void GA::GlobalArray::addConstantPatch(int *lo,int *hi, void *alpha) const { GA_Add_constant_patch(mHandle, lo, hi, alpha); } void GA::GlobalArray::addConstantPatch(int64_t *lo,int64_t *hi, void *alpha) const { GA_Add_constant_patch64(mHandle, lo, hi, alpha); } void GA::GlobalArray::recipPatch(int *lo, int *hi) const { GA_Recip_patch(mHandle, lo, hi); } void GA::GlobalArray::recipPatch(int64_t *lo, int64_t *hi) const { GA_Recip_patch64(mHandle, lo, hi); } void GA::GlobalArray::stepMax(const GA::GlobalArray * g_a, double *step) const {// CHECK all Step Max functions GA_Step_max(mHandle, g_a->mHandle, step); } void GA::GlobalArray::stepMaxPatch(int *alo, int *ahi, const GA::GlobalArray * g_b, int *blo, int *bhi, double *step) const { GA_Step_max_patch(mHandle, alo, ahi, g_b->mHandle, blo, bhi, step); } void GA::GlobalArray::stepMaxPatch(int64_t *alo, int64_t *ahi, const GA::GlobalArray * g_b, int64_t *blo, int64_t *bhi, double *step) const { GA_Step_max_patch64(mHandle, alo, ahi, g_b->mHandle, blo, bhi, step); } void GA::GlobalArray::elemMultiplyPatch(const GA::GlobalArray * g_a, int *alo,int *ahi, const GA::GlobalArray * g_b, int *blo,int *bhi, int *clo,int *chi) const { GA_Elem_multiply_patch(g_a->mHandle, alo, ahi, g_b->mHandle, blo, bhi, mHandle, clo, chi); } void GA::GlobalArray::elemMultiplyPatch(const GA::GlobalArray * g_a, int64_t *alo,int64_t *ahi, const GA::GlobalArray * g_b, int64_t *blo,int64_t *bhi, int64_t *clo,int64_t *chi) const { GA_Elem_multiply_patch64(g_a->mHandle, alo, ahi, g_b->mHandle, blo, bhi, mHandle, clo, chi); } void GA::GlobalArray::elemDividePatch(const GA::GlobalArray * g_a,int *alo,int *ahi, const GA::GlobalArray * g_b,int *blo,int *bhi, int *clo,int *chi) const { GA_Elem_divide_patch(g_a->mHandle, alo, ahi, g_b->mHandle, blo, bhi, mHandle, clo, chi); } void GA::GlobalArray::elemDividePatch(const GA::GlobalArray * g_a,int64_t *alo, int64_t *ahi, const GA::GlobalArray * g_b, int64_t *blo, int64_t *bhi, int64_t *clo, int64_t *chi) const { GA_Elem_divide_patch64(g_a->mHandle, alo, ahi, g_b->mHandle, blo, bhi, mHandle, clo, chi); } void GA::GlobalArray::elemMaximumPatch(const GA::GlobalArray * g_a, int *alo,int *ahi, const GA::GlobalArray * g_b, int *blo,int *bhi, int *clo,int *chi) const { GA_Elem_maximum_patch(g_a->mHandle, alo, ahi, g_b->mHandle, blo, bhi, mHandle, clo, chi); } void GA::GlobalArray::elemMaximumPatch(const GA::GlobalArray * g_a, int64_t *alo, int64_t *ahi, const GA::GlobalArray * g_b, int64_t *blo, int64_t *bhi, int64_t *clo, int64_t *chi) const { GA_Elem_maximum_patch64(g_a->mHandle, alo, ahi, g_b->mHandle, blo, bhi, mHandle, clo, chi); } void GA::GlobalArray::elemMinimumPatch(const GA::GlobalArray * g_a, int *alo,int *ahi, const GA::GlobalArray * g_b, int *blo,int *bhi, int *clo,int *chi) const { GA_Elem_minimum_patch(g_a->mHandle, alo, ahi, g_b->mHandle, blo, bhi, mHandle, clo, chi); } void GA::GlobalArray::elemMinimumPatch(const GA::GlobalArray * g_a, int64_t *alo, int64_t *ahi, const GA::GlobalArray * g_b, int64_t *blo, int64_t *bhi, int64_t *clo, int64_t *chi) const { GA_Elem_minimum_patch64(g_a->mHandle, alo, ahi, g_b->mHandle, blo, bhi, mHandle, clo, chi); } /*Added by Limin for matrix operations*/ void GA::GlobalArray::shiftDiagonal(void *c) const { GA_Shift_diagonal(mHandle, c); } void GA::GlobalArray::setDiagonal(const GA::GlobalArray * g_v) const { GA_Set_diagonal(mHandle, g_v->mHandle); } void GA::GlobalArray::zeroDiagonal() const { GA_Zero_diagonal(mHandle); } void GA::GlobalArray::addDiagonal(const GA::GlobalArray * g_v) const { GA_Add_diagonal(mHandle, g_v->mHandle); } void GA::GlobalArray::getDiagonal(const GA::GlobalArray * g_a) const { GA_Get_diag(g_a->mHandle, mHandle); } void GA::GlobalArray::scaleRows(const GA::GlobalArray * g_v) const { GA_Scale_rows(mHandle, g_v->mHandle); } void GA::GlobalArray::scaleCols(const GA::GlobalArray * g_v) const { GA_Scale_cols(mHandle, g_v->mHandle); } void GA::GlobalArray::norm1(double *nm) const { GA_Norm1(mHandle, nm); } void GA::GlobalArray::normInfinity(double *nm) const { GA_Norm_infinity(mHandle, nm); } void GA::GlobalArray::median(const GA::GlobalArray * g_a, const GA::GlobalArray * g_b, const GA::GlobalArray * g_c) const { GA_Median(g_a->mHandle, g_b->mHandle, g_c->mHandle, mHandle); } void GA::GlobalArray::medianPatch(const GA::GlobalArray * g_a, int *alo, int *ahi, const GA::GlobalArray * g_b, int *blo, int *bhi, const GA::GlobalArray * g_c, int *clo, int *chi, int *mlo, int *mhi) const { GA_Median_patch(g_a->mHandle, alo, ahi, g_b->mHandle, blo, bhi, g_c->mHandle, clo, chi, mHandle, mlo, mhi); } void GA::GlobalArray::medianPatch(const GA::GlobalArray * g_a, int64_t *alo, int64_t *ahi, const GA::GlobalArray * g_b, int64_t *blo, int64_t *bhi, const GA::GlobalArray * g_c, int64_t *clo, int64_t *chi, int64_t *mlo, int64_t *mhi) const { GA_Median_patch64(g_a->mHandle, alo, ahi, g_b->mHandle, blo, bhi, g_c->mHandle, clo, chi, mHandle, mlo, mhi); } ga-5-3/ga++/src/services.cc0000640005473000001440000000727311726173765014262 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "ga++.h" GA::GlobalArray * GA::createGA(int type, int ndim, int dims[], char *arrayname, int chunk[]) { return new GA::GlobalArray(type, ndim, dims, arrayname, chunk); } GA::GlobalArray * GA::createGA(int type, int ndim, int dims[], char *arrayname, int block[], int maps[]) { return new GA::GlobalArray(type, ndim, dims, arrayname, block, maps); } GA::GlobalArray * GA::createGA(const GA::GlobalArray *g_b, char *arrayname) { return new GA::GlobalArray(*g_b, arrayname); } GA::GlobalArray * GA::createGA(const GA::GlobalArray &g_b) { return new GA::GlobalArray(g_b); } GA::GlobalArray * GA::createGA() { return new GA::GlobalArray(); } GA::GlobalArray * GA::createGA_Ghosts(int type, int ndim, int dims[], int width[], char *array_name, int chunk[]) { /* last argument is a dummy argument, just to increase the count of the number of arguments, inorder to avoid conflict in # of args */ return new GA::GlobalArray(type, ndim, dims, width, array_name, chunk, 'g'); } GA::GlobalArray * GA::createGA_Ghosts(int type, int ndim, int dims[], int width[], char *array_name, int map[], int nblock[]) { return new GA::GlobalArray(type, ndim, dims, width, array_name, map, nblock, 'g'); } int GA::getDebug() { return GA_Get_debug(); } void GA::brdcst(void *buf, int lenbuf, int root) { GA_Brdcst(buf, lenbuf, root); } int GA::clusterNnodes() { return GA_Cluster_nnodes(); } int GA::clusterNodeid() { return GA_Cluster_nodeid(); } int GA::clusterProcNodeid(int iproc) { return GA_Cluster_proc_nodeid(iproc); } int GA::clusterNprocs(int inode) { return GA_Cluster_nprocs(inode); } int GA::clusterProcid(int inode, int iproc) { return GA_Cluster_procid(inode, iproc); } int GA::createMutexes(int number) { return GA_Create_mutexes(number); } int GA::deregisterType(int size) { return NGA_Deregister_type(size); } int GA::destroyMutexes() { return GA_Destroy_mutexes(); } void GA::dgop(double x[], int n, char *op) { GA_Dgop(x, n, op); } int GA::duplicate(int g_a, char* array_name) { return GA_Duplicate(g_a, array_name); } void GA::error(const char *message, int code) { GA_Error((char *)message, code); } void GA::fence() { GA_Fence(); } void GA::gop(int x[], int n, char *op) { GA_Igop(x, n, op); } void GA::gop(long x[], int n, char *op) { GA_Lgop(x, n, op); } void GA::gop(float x[], int n, char *op) { GA_Fgop(x, n, op); } void GA::gop(double x[], int n, char *op) { GA_Dgop(x, n, op); } void GA::igop(int x[], int n, char *op) { GA_Igop(x, n, op); } void GA::initFence() { GA_Init_fence(); } size_t GA::inquireMemory() { return GA_Inquire_memory(); } void GA::lgop(long x[], int n, char *op) { GA_Lgop(x, n, op); } void GA::lock(int mutex) { GA_Lock(mutex); } void GA::maskSync(int first, int last) { GA_Mask_sync(first, last); } int GA::memoryAvailable() { return GA_Memory_avail(); } int GA::memoryLimited() { return GA_Memory_limited(); } void GA::nbWait(GANbhdl *nbhandle) { NGA_NbWait(nbhandle); } int GA::nodeid() { return GA_Nodeid(); } int GA::nodes() { return GA_Nnodes(); } void GA::printStats() { GA_Print_stats(); } int GA::registerType(size_t size) { return NGA_Register_type(size); } void GA::setDebug(int dbg) { return GA_Set_debug(dbg); } void GA::setMemoryLimit(size_t limit) { GA_Set_memory_limit(limit); } void GA::summarize(int verbose) { GA_Summarize(verbose); } void GA::sync() { GA_Sync(); } void GA::unlock(int mutex) { GA_Unlock(mutex); } int GA::usesMA() { return GA_Uses_ma(); } int GA::usesFAPI() { return GA_Uses_fapi(); } double GA::wtime() { return GA_Wtime(); } ga-5-3/ga++/src/PGroup.h0000640005473000001440000001652011650362754013502 0ustar d3n000users#ifndef _PGROUP_H #define _PGROUP_H namespace GA { /** * PGroup class description TODO. */ class PGroup { public: /** * This constructor creates a processor group. * * It must be invoked by all processors in the current default processor * group. The list of processors use the indexing scheme of the default * processor group. If the default processor group is the world group, then * these indices are the usual processor indices. This function returns a * process group handler that can be used to reference this group by other * functions. * * This is a collective operation on the default processor group. * * @param[in] plist [size] list of processor IDs in group * @param[in] size number of processors in group * */ PGroup(int *plist, int size); /** * PGroup destructor. */ ~PGroup(); /* access the data */ /** @return the array handle */ int handle() const { return mPHandle; } /* Process Group Operations - static */ /** * This function will return a handle to the default processor group, * which can then be used to create a global array using one of the * create_*_config or setPGroup calls. * * This is a local operation. * * @return the new PGroup */ static PGroup* getDefault(); /** * This function will return a handle to the mirrored processor group, * which can then be used to create a global array using one of the * GA create_*_config or setPgroup calls. * * This is a local operation. * * @return the new PGroup */ static PGroup* getMirror(); /** * This function will return a handle to the world processor group, * which can then be used to create a global array using one of the * GA create_*_config or GA_Set_pgroup calls. * * This is a local operation. * * @return the new PGroup */ static PGroup* getWorld(); /** * This function can be used to reset the default processor group on a * collection of processors. * * All processors in the group referenced by p_handle must make a call to * this function. Any standard global array call that is made after * resetting the default processor group will be restricted to processors in * that group. Global arrays that are created after resetting the default * processor group will only be defined on that group and global operations * such as sync or igop will be restricted to processors in that group. The * pgroupSetDefault call can be used to rapidly convert large applications, * written with GA, into routines that run on processor groups. * * The default processor group can be overridden by using GA calls that * require an explicit group handle as one of the arguments. * * This is a collective operation on the group represented by the handle * p_handle. * * @param[in] p_handle processor group handle */ static void setDefault(PGroup* p_handle); /* Process Group Operations */ /** * Broadcast data from processor specified by root to all other * processors in this processor group. * * The length of the message in bytes is specified by lenbuf. The initial and * broadcasted data can be found in the buffer specified by the pointer * buf. * * This is a collective operation on the processor group. * * @param[in,out] buf pointer to buffer containing data * @param[in] lenbuf length of data (in bytes) * @param[in] root processor sending message */ void brdcst(void* buf, int lenbuf, int root); /** * The pgroup gop 'sums' all elements in buf[n] across all processors in the * group using the commutative operation specified by the character string op. * * buf[n] is a double precision array present on each processor in the * processor group. The result is broadcast to all processor in this group. * Allowed strings are "+", "*", "max", "min", "absmax", "absmin". The use of * lowerecase for operators is necessary. * * This is a collective operation on the processor group. * * @param[in,out] buf buffer containing data * @param[in] n number of elements in x * @param[in] op operation to be performed */ void gop(double *buf, int n, char* op); /** * The gop 'sums' all elements in buf[n] across all processors in the group * using the commutative operation specified by the character string op. * * buf[n] is an integer(int) array present on each processor in the * processor group. The result is broadcast to all processor in this group. * Allowed strings are "+", "*", "max", "min", "absmax", "absmin". The use of * lowerecase for operators is necessary. * * This is a collective operation on the processor group. * * @param[in,out] buf buffer containing data * @param[in] n number of elements in x * @param[in] op operation to be performed */ void gop(int *buf, int n, char* op); /** * The gop 'sums' all elements in buf[n] across all processors in the group * using the commutative operation specified by the character string op. * * buf[n] is an integer(long) array present on each processor in the * processor group. The result is broadcast to all processor in this group. * Allowed strings are "+", "*", "max", "min", "absmax", "absmin". The use of * lowerecase for operators is necessary. * * This is a collective operation on the processor group. * * @param[in,out] buf buffer containing data * @param[in] n number of elements in x * @param[in] op operation to be performed */ void gop(long *buf, int n, char* op); /** * The gop 'sums' all elements in buf[n] across all processors in the group * using the commutative operation specified by the character string op. * * buf[n] is a float array present on each processor in the * processor group. The result is broadcast to all processor in this group. * Allowed strings are "+", "*", "max", "min", "absmax", "absmin". The use of * lowerecase for operators is necessary. * * This is a collective operation on the processor group. * * @param[in,out] buf buffer containing data * @param[in] n number of elements in x * @param[in] op operation to be performed */ void gop(float *buf, int n, char* op); /** * This function returns the relative index of the processor in the * processor group specified by p_handle. * * This index will generally differ from the absolute processor index * returned by GA_Nodeid if the processor group is not the world group. * * This is a local operation. * * @return relative index of the processor in the group given by p_handle */ int nodeid(); /** * This function returns the number of processors contained in the * group specified by p_handle. * * This is a local local operation. * * @return number of processors contained in the group given by p_handle */ int nodes(); /** * This operation executes a synchronization group across the * processors in the processor group specified by p_handle. * * Nodes outside this group are unaffected. * * This is a collective operation on the processor group. */ void sync(); private: int mPHandle; /*<< process group handle */ static PGroup *pgMirror; static PGroup *pgDefault; static PGroup *pgWorld; PGroup(void); }; } #endif /* _PGROUP_H */ ga-5-3/ga++/src/GAServices.cc0000640005473000001440000001123211726173765014420 0ustar d3n000users/** * @file GAServices.cc * @author Manoj Kumar Krishnan, PNNL. */ #if HAVE_CONFIG_H # include "config.h" #endif #include "ga++.h" GA::GAServices::GAServices() { } GA::GAServices::~GAServices() { } GA::GlobalArray * GA::GAServices::createGA(int type, int ndim, int dims[], char *arrayname, int chunk[]) { GA::GlobalArray * GA = new GA::GlobalArray(type, ndim, dims, arrayname, chunk); return GA; } GA::GlobalArray * GA::GAServices::createGA(int type, int ndim, int dims[], char *arrayname, int block[], int maps[]) { GA::GlobalArray * GA = new GA::GlobalArray(type, ndim, dims, arrayname, block, maps); return GA; } GA::GlobalArray * GA::GAServices::createGA(const GA::GlobalArray *g_b, char *arrayname) { GA::GlobalArray * GA = new GA::GlobalArray(*g_b, arrayname); return GA; } GA::GlobalArray * GA::GAServices::createGA(const GA::GlobalArray &g_b) { GA::GlobalArray * GA = new GA::GlobalArray(g_b); return GA; } GA::GlobalArray * GA::GAServices::createGA() { GA::GlobalArray * GA = new GA::GlobalArray(); return GA; } GA::GlobalArray * GA::GAServices::createGA_Ghosts(int type, int ndim, int dims[], int width[], char *array_name, int chunk[]) { /* last argument is a dummy argument, just to increase the count of the number of arguments, inorder to avoid conflict in # of args */ GA::GlobalArray * GA = new GA::GlobalArray(type, ndim, dims, width, array_name, chunk, 'g'); return GA; } GA::GlobalArray * GA::GAServices::createGA_Ghosts(int type, int ndim, int dims[], int width[], char *array_name, int map[], int nblock[]) { GA::GlobalArray * GA = new GA::GlobalArray(type, ndim, dims, width, array_name, map, nblock, 'g'); return GA; } int GA::GAServices::getDebug() { return GA_Get_debug(); } void GA::GAServices::brdcst(void *buf, int lenbuf, int root) { GA_Brdcst(buf, lenbuf, root); } int GA::GAServices::clusterNnodes() { return GA_Cluster_nnodes(); } int GA::GAServices::clusterNodeid() { return GA_Cluster_nodeid(); } int GA::GAServices::clusterProcNodeid(int iproc) { return GA_Cluster_proc_nodeid(iproc); } int GA::GAServices::clusterNprocs(int inode) { return GA_Cluster_nprocs(inode) ; } int GA::GAServices::clusterProcid(int inode, int iproc) { return GA_Cluster_procid(inode, iproc); } int GA::GAServices::createMutexes(int number) { return GA_Create_mutexes(number); } int GA::GAServices::deregisterType(int type) { return NGA_Deregister_type(type); } int GA::GAServices::destroyMutexes() { return GA_Destroy_mutexes(); } void GA::GAServices::dgop(double x[], int n, char *op) { GA_Dgop(x, n, op); } int GA::GAServices::duplicate(int g_a, char* array_name) { return GA_Duplicate(g_a, array_name); } void GA::GAServices::error(const char *message, int code) { GA_Error((char *)message, code); } void GA::GAServices::fence() { GA_Fence(); } void GA::GAServices::gop(int x[], int n, char *op) { GA_Igop(x, n, op); } void GA::GAServices::gop(long x[], int n, char *op) { GA_Lgop(x, n, op); } void GA::GAServices::gop(float x[], int n, char *op) { GA_Fgop(x, n, op); } void GA::GAServices::gop(double x[], int n, char *op) { GA_Dgop(x, n, op); } void GA::GAServices::igop(int x[], int n, char *op) { GA_Igop(x, n, op); } void GA::GAServices::initFence() { GA_Init_fence(); } size_t GA::GAServices::inquireMemory() { return GA_Inquire_memory(); } void GA::GAServices::lgop(long x[], int n, char *op) { GA_Lgop(x, n, op); } void GA::GAServices::lock(int mutex) { GA_Lock(mutex); } void GA::GAServices::maskSync(int first, int last) { GA_Mask_sync(first, last); } int GA::GAServices::memoryAvailable() { return GA_Memory_avail(); } int GA::GAServices::memoryLimited() { return GA_Memory_limited(); } void GA::GAServices::nbWait(GANbhdl *nbhandle) { NGA_NbWait(nbhandle); } int GA::GAServices::nodeid() { return GA_Nodeid(); } int GA::GAServices::nodes() { return GA_Nnodes(); } void GA::GAServices::printStats() { GA_Print_stats(); } int GA::GAServices::registerType(size_t size) { return NGA_Register_type(size); } void GA::GAServices::setDebug(int dbg) { return GA_Set_debug(dbg); } void GA::GAServices::setMemoryLimit(size_t limit) { GA_Set_memory_limit(limit); } void GA::GAServices::summarize(int verbose) { GA_Summarize(verbose); } void GA::GAServices::sync() { GA_Sync(); } void GA::GAServices::unlock(int mutex) { GA_Unlock(mutex); } int GA::GAServices::usesMA() { return GA_Uses_ma(); } int GA::GAServices::usesFAPI() { return GA_Uses_fapi(); } double GA::GAServices::wtime() { return GA_Wtime(); } GA::GAServices GA::SERVICES; ga-5-3/ga++/src/overload.cc0000640005473000001440000000460611277314575014244 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "ga++.h" #ifdef FALSE #undef FALSE #endif #ifdef TRUE #undef TRUE #endif #define FALSE 0 #define TRUE 1 /** * More operator overloading stuff (a lot!!) to come. */ GA::GlobalArray& GA::GlobalArray::operator=(const GA::GlobalArray &g_a) { if(this != &g_a) { GA_Destroy(mHandle); mHandle = GA_Duplicate(g_a.mHandle, g_a.inquireName()); if(!mHandle) GA_Error((char *)" GA creation failed",0); GA_Copy(g_a.mHandle, mHandle); } return *this; } int GA::GlobalArray::operator==(const GA::GlobalArray &g_a) const { long isEqual = TRUE; int i, type1, type2, ndim1, ndim2, dims1[GA_MAX_DIM], dims2[GA_MAX_DIM]; int alo[GA_MAX_DIM], ahi[GA_MAX_DIM], blo[GA_MAX_DIM], bhi[GA_MAX_DIM]; NGA_Inquire(mHandle, &type1, &ndim1, dims1); NGA_Inquire(g_a.mHandle, &type2, &ndim2, dims2); if(type1 != type2) isEqual = FALSE; // check type if(GA_Compare_distr(mHandle, g_a.mHandle)) isEqual = FALSE; NGA_Distribution(mHandle, GA_Nodeid(), alo, ahi); NGA_Distribution(g_a.mHandle, GA_Nodeid(), blo, bhi); if(ahi[0] != bhi[0]) isEqual = FALSE; // check process owns data? if(ahi[0] >= 0) { // true => process owns data void *ptr1 = NULL, *ptr2 = NULL; int ld1[GA_MAX_DIM]; int ld2[GA_MAX_DIM]; int num = 0; NGA_Access(mHandle, alo, ahi, &ptr1, ld1); NGA_Access(g_a.mHandle, blo, bhi, &ptr2, ld2); // number of elements I own. for(i=0; imPHandle = GA_Pgroup_get_default(); } return pgDefault; } GA::PGroup* GA::PGroup::getMirror() { if(pgMirror == NULL) { pgMirror = new PGroup(); pgMirror->mPHandle = GA_Pgroup_get_mirror(); } return pgMirror; } GA::PGroup* GA::PGroup::getWorld() { if(pgWorld == NULL) { pgWorld = new PGroup(); pgWorld->mPHandle = GA_Pgroup_get_world(); } return pgWorld; } void GA::PGroup::setDefault(GA::PGroup* p_handle) { pgDefault->mPHandle = p_handle->mPHandle; } void GA::PGroup::brdcst(void* buf, int lenbuf, int root) { GA_Pgroup_brdcst(mPHandle, buf, lenbuf, root); } void GA::PGroup::gop(double *buf, int n, char* op) { GA_Pgroup_dgop(mPHandle, buf, n, op); } void GA::PGroup::gop(long *buf, int n, char* op) { GA_Pgroup_lgop(mPHandle, buf, n, op); } void GA::PGroup::gop(int *buf, int n, char* op) { GA_Pgroup_igop(mPHandle, buf, n, op); } void GA::PGroup::gop(float *buf, int n, char* op) { GA_Pgroup_fgop(mPHandle, buf, n, op); } int GA::PGroup::nodeid() { return GA_Pgroup_nodeid(mPHandle); } int GA::PGroup::nodes() { return GA_Pgroup_nnodes(mPHandle); } void GA::PGroup::sync() { GA_Pgroup_sync(mPHandle); } ga-5-3/ga++/src/GlobalArray.h0000640005473000001440000031056012127315324014455 0ustar d3n000users#ifndef _GLOBALARRAY_H #define _GLOBALARRAY_H namespace GA { class PGroup; /** * This is the GlobalArray class. */ class GlobalArray { public: /** * Creates an ndim-dimensional array using the regular distribution * model and returns integer handle representing the array. * The array can be distributed evenly or not. The control over the * distribution is accomplished by specifying chunk (block) size for all or * some of array dimensions. * For example, for a 2-dimensional array, setting chunk[0]=dim[0] gives * distribution by vertical strips (chunk[0]*dims[0]); * setting chunk[1]=dim[1] gives distribution by horizontal strips * (chunk[1]*dims[1]). Actual chunks will be modified so that they are at * least the size of the minimum and each process has either zero or one * chunk. Specifying chunk[i] as <1 will cause that dimension to be * distributed evenly. * As a convenience, when chunk is specified as NULL, the entire array is * distributed evenly. * This is a collective operation. * @param[in] type data type(MT_F_DBL,MT_F_INT,MT_F_DCPL) * @param[in] ndim number of array dimensions * @param[in] dims [ndim] array of dimensions * @param[in] arrayname a unique character string * @param[in] chunk [ndim] array of chunks, each element specifies * minimum size that given dimensions should be chunked * up into */ GlobalArray(int type, int ndim, int dims[], char *arrayname, int chunk[]); /** * @copydoc GlobalArray::GlobalArray(int,int,int[],char*,int[]) * @param[in] p_handle processor group handle */ GlobalArray(int type, int ndim, int dims[], char *arrayname, int chunk[], PGroup* p_handle); /** * @copydoc GlobalArray::GlobalArray(int,int,int[],char*,int[]) */ GlobalArray(int type, int ndim, int64_t dims[], char *arrayname, int64_t chunk[]); /** * @copydoc GlobalArray::GlobalArray(int,int,int[],char*,int[]) * @param[in] p_handle processor group handle */ GlobalArray(int type, int ndim, int64_t dims[], char *arrayname, int64_t chunk[], PGroup* p_handle); /** * Creates an array by following the user-specified distribution. * * The distribution is specified as a Cartesian product of distributions * for each dimension. The array indices start at 0. For example, the * following figure demonstrates distribution of a 2-dimensional array 8x10 * on 6 (or more) processors. nblock[2]={3,2}, the size of map array is s=5 * and array map contains the following elements map={0,2,6, 0, 5}. The * distribution is nonuniform because, P1 and P4 get 20 elements each and * processors P0,P2,P3, and P5 only 10 elements each. * * * * * * *
5 5
P0 P3 2
P1 P4 4
P2 P5 2
* * This is a collective operation. * * @param[in] type MA data type (MT_F_DBL,MT_F_INT,MT_F_DCPL) * @param[in] ndim number of array dimensions * @param[in] dims array of dimension values * @param[in] arrayname a unique character string * @param[in] block [ndim] no. of blocks each dimension is divided into * @param[in] maps [s] starting index for for each block; * the size s is a sum all elements of nblock array */ GlobalArray(int type, int ndim, int dims[], char *arrayname, int block[], int maps[]); /** * @copydoc GlobalArray::GlobalArray(int,int,int[],char*,int[],int[]) * @param[in] p_handle processor group handle */ GlobalArray(int type, int ndim, int dims[], char *arrayname, int block[], int maps[], PGroup* p_handle); /** * @copydoc GlobalArray::GlobalArray(int,int,int[],char*,int[],int[]) */ GlobalArray(int type, int ndim, int64_t dims[], char *arrayname, int64_t block[], int64_t maps[]); /** * @copydoc GlobalArray::GlobalArray(int,int,int[],char*,int[],int[]) * @param[in] p_handle processor group handle */ GlobalArray(int type, int ndim, int64_t dims[], char *arrayname, int64_t block[], int64_t maps[], PGroup* p_handle); /** * Creates an ndim-dimensional array with a layer of ghost cells around * the visible data on each processor using the regular distribution model. * * The array can be distributed evenly or not evenly. The control over * the distribution is accomplished by specifying chunk (block) size for * all or some of the array dimensions. For example, for a 2-dimensional * array, setting chunk(1)=dim(1) gives distribution by vertical strips * (chunk(1)*dims(1)); setting chunk(2)=dim(2) gives distribution by * horizontal strips (chunk(2)*dims(2)). Actual chunks will be modified * so that they are at least the size of the minimum and each process * has either zero or one chunk. Specifying chunk(i) as <1 will cause * that dimension (i-th) to be distributed evenly. The width of the * ghost cell layer in each dimension is specified using the array * width(). The local data of the global array residing on each * processor will have a layer width[n] ghosts cells wide on either * side of the visible data along the dimension n. * * @param[in] type data type (MT_DBL,MT_INT,MT_DCPL) * @param[in] ndim number of array dimensions * @param[in] dims [ndim] array of dimensions * @param[in] width [ndim] array of ghost cell widths * @param[in] arrayname a unique character string * @param[in] chunk [ndim] array of chunks, each element specifies * minimum size that given dimensions should be * chunked up into * @param[in] ghosts this is a dummy parameter: added to increase the * number of arguments, inorder to avoid the conflicts * among constructors. (ghosts = 'g' or 'G') */ GlobalArray(int type, int ndim, int dims[], int width[], char *arrayname, int chunk[], char ghosts); /** * @copydoc GlobalArray::GlobalArray(int,int,int[],int[],char*,int[],char) * @param[in] p_handle processor group handle */ GlobalArray(int type, int ndim, int dims[], int width[], char *arrayname, int chunk[], PGroup* p_handle, char ghosts); /** * @copydoc GlobalArray::GlobalArray(int,int,int[],int[],char*,int[],char) */ GlobalArray(int type, int ndim, int64_t dims[], int64_t width[], char *arrayname, int64_t chunk[], char ghosts); /** * @copydoc GlobalArray::GlobalArray(int,int,int[],int[],char*,int[],char) * @param[in] p_handle processor group handle */ GlobalArray(int type, int ndim, int64_t dims[], int64_t width[], char *arrayname, int64_t chunk[], PGroup* p_handle, char ghosts); /** * Creates an array with ghost cells by following the user-specified * distribution. * * The distribution is specified as a Cartesian product of distributions * for each dimension. For example, the following figure demonstrates * distribution of a 2-dimensional array 8x10 on 6 (or more) processors. * nblock(2)={3,2}, the size of map array is s=5 and array map contains * the following elements map={1,3,7, 1, 6}. The distribution is * nonuniform because, P1 and P4 get 20 elements each and processors * P0,P2,P3, and P5 only 10 elements each. * * * * * * *
5 5
P0 P3 2
P1 P4 4
P2 P5 2
* * The array width[] is used to control the width of the ghost cell * boundary around the visible data on each processor. The local data * of the global array residing on each processor will have a layer * width[n] ghosts cells wide on either side of the visible data along * the dimension n. This is a collective operation. * * @param[in] type data type (MT_DBL,MT_INT,MT_DCPL) * @param[in] ndim number of array dimensions * @param[in] dims [ndim] array of dimensions * @param[in] width [ndim] array of ghost cell widths * @param[in] arrayname a unique character string * @param[in] block [ndim] no. of blocks each dimension is divided into * @param[in] maps [s] starting index for for each block; * the size s is a sum of all elements of nblock array * @param[in] ghosts this is a dummy parameter: added to increase the * number of arguments, inorder to avoid the conflicts * among constructors. (ghosts = 'g' or 'G') */ GlobalArray(int type, int ndim, int dims[], int width[], char *arrayname, int block[], int maps[], char ghosts); /** * @copydoc GlobalArray::GlobalArray(int,int,int[],int[],char*,int[],int[],char) * @param[in] p_handle processor group handle */ GlobalArray(int type, int ndim, int dims[], int width[], char *arrayname, int block[], int maps[], PGroup* p_handle, char ghosts); /** * @copydoc GlobalArray::GlobalArray(int,int,int[],int[],char*,int[],int[],char) */ GlobalArray(int type, int ndim, int64_t dims[], int64_t width[], char *arrayname, int64_t block[], int64_t maps[], char ghosts); /** * @copydoc GlobalArray::GlobalArray(int,int,int[],int[],char*,int[],int[],char) * @param[in] p_handle processor group handle */ GlobalArray(int type, int ndim, int64_t dims[], int64_t width[], char *arrayname, int64_t block[], int64_t maps[], PGroup* p_handle, char ghosts); /** * Creates a new array by applying all the properties of another existing * array. * * This is a collective operation. * * @param[in] arrayname a character string * @param[in] g_a integer handle for reference array */ GlobalArray(const GlobalArray &g_a, char *arrayname); /** * Creates a new array by applying all the properties of another existing * array. * * This is a collective operation. * * @param[in] g_a integer handle for reference array */ GlobalArray(const GlobalArray &g_a); /** * Creates a new array with no existing attributes. * * @note All attributes must subsequently be set using the "set" methods. * * This is a collective operation. */ GlobalArray(); /** Destructor */ ~GlobalArray(); /* access the data */ /** @return the array handle */ int handle() const { return mHandle; } /* Global Array operations */ /** * Combines data from local array buffer with data in the global array * section. * * @note The local array is assumed to be have the same number of dimensions * as the global array. * * global array section (lo[],hi[]) += *alpha * buffer * * This is a one-sided and atomic operation. * * @param[in] lo [ndim] array of starting indices for array section * @param[in] hi [ndim] array of ending indices for array section * @param[in] buf pointer to the local buffer array * @param[in] ld [ndim-1] array specifying leading * dimensions/strides/extents for buffer array * @param[in] alpha scale factor (double/DoubleComplex/long *) */ void acc(int lo[], int hi[], void *buf, int ld[], void *alpha) const; /** * @copydoc GlobalArray::acc(int[],int[],void*,int[],void*)const */ void acc(int64_t lo[], int64_t hi[], void *buf, int64_t ld[], void *alpha) const; /** * Provides access to the specified patch of a global array. * * Returns array of leading dimensions ld and a pointer to the first element * in the patch. This routine allows to access directly, in place * elements in the local section of a global array. It useful for * writing new GA operations. A call to ga_access normally follows a * previous call to ga_distribution that returns coordinates of the * patch associated with a processor. You need to make sure that the * coordinates of the patch are valid (test values returned from * ga_distribution). * * Each call to ga_access has to be followed by a call to either * ga_release or ga_release_update. You can access in this fashion only * local data. Since the data is shared with other processes, you need * to consider issues of mutual exclusion. This operation is local. * * @param[in] lo [ndim] array of starting indices for array section * @param[in] hi [ndim] array of ending indices for array section * @param[out] ptr points to location of first element in patch * @param[out] ld [ndim-1] leading dimensions for the pacth elements */ void access(int lo[], int hi[], void *ptr, int ld[]) const; /** * @copydoc GlobalArray::access(int[],int[],void*,int[])const */ void access(int64_t lo[], int64_t hi[], void *ptr, int64_t ld[]) const; /** * Provides access to the specified block of a global array that is using * simple block-cyclic data distribution. Returns array of leading * dimensions ld and a pointer to the first element in the patch. This * routine allows user to access directly, in-place * elements in the * local section of a global array. It useful for writing new GA * operations. A call to ga_access normally follows a previous call to * ga_distribution that returns coordinates of the patch associated with * a processor. You need to make sure that the coordinates of the patch * are valid (test values returned from * ga_distribution). * * Each call to ga_access_block has to be followed by a call to either * ga_release_block or ga_release_block_update. You can access in this * fashion only local data. Since the data is shared with other processes, * you need to consider issues of mutual exclusion. This operation is * local. * * @param[in] idx index of block * @param[out] ptr points to location of first element in patch * @param[out] ld [ndim-1] leading dimensions for the pacth elements */ void accessBlock(int idx, void *ptr, int ld[]) const; /** * @copydoc GlobalArray::accessBlock(int,void*,int[])const */ void accessBlock(int64_t idx, void *ptr, int64_t ld[]) const; /** * Provides access to the specified block of a global array that is using * SCALAPACK type block-cyclic data distribution. Returns array of leading * dimensions ld and a pointer to the first element in the patch. This * routine allows user to access directly, in-place * elements in the * local section of a global array. It useful for writing new GA * operations. A call to ga_access_block normally follows a previous call to * ga_distribution that returns coordinates of the patch associated with * a processor. You need to make sure that the coordinates of the patch * are valid (test values returned from * ga_distribution). * * Each call to ga_access_block_grid has to be followed by a call to either * ga_release_block_grid or ga_release_block_grid_update. You can access in * this fashion only local data. Since the data is shared with other * processes, you need to consider issues of mutual exclusion. This * operation is local. * * @param[in] index [ndim] indices of block in processor grid * @param[out] ptr points to location of first element in patch * @param[out] ld [ndim-1] leading dimensions for the pacth elements */ void accessBlockGrid(int index[], void *ptr, int ld[]) const; /** * @copydoc GlobalArray::accessBlockGrid(int[],void*,int[])const */ void accessBlockGrid(int64_t index[], void *ptr, int64_t ld[]) const; /** * Provides access to the local data of a global array that is using * either the simple or SCALAPACK type block-cyclic data distribution. * Returns the length of the local data block and a pointer to the first * element. This routine allows user to access directly, in-place * elements in the local section of a global array. It useful for writing * new GA operations. * * Each call to ga_access_segment has to be followed by a call to either * ga_release_segment or ga_release_segmentupdate. You can access in * this fashion only local data. Since the data is shared with other * processes, you need to consider issues of mutual exclusion. This * operation is local. * * @param[in] index processor ID * @param[out] ptr points to location of first element * @param[out] len length of locally held data */ void accessBlockSegment(int index, void *ptr, int *len) const; /** * @copydoc GlobalArray::accessBlockSegment(int,void*,int*)const */ void accessBlockSegment(int index, void *ptr, int64_t *len) const; /** * Provides access to the local patch of the global array. Returns * leading dimension ld and and pointer for the data. This routine * will provide access to the ghost cell data residing on each processor. * Calls to accessGhosts should normally follow a call to * distribution that returns coordinates of the visible data patch * associated with a processor. You need to make sure that the coordinates * of the patch are valid (test values returned from distribution). * * You can only access local data. * This is a local operation. * * @param[out] dims [ndim] array of dimensions of local patch, * including ghost cells * @param[out] ptr returns an index corresponding to the origin the global * array patch held locally on the processor * @param[out] ld [ndim-1] physical dimensions of the local array patch, * including ghost cells */ void accessGhosts(int dims[], void *ptr, int ld[]) const; /** * @copydoc GlobalArray::accessGhosts(int[],void*,int[])const */ void accessGhosts(int64_t dims[], void *ptr, int64_t ld[]) const; /** * This function can be used to return a pointer to any data element * in the locally held portion of the global array and can be used to * directly access ghost cell data. The array subscript refers to the * local index of the element relative to the origin of the local * patch (which is assumed to be indexed by (0,0,...)). * * This is a local operation. * * @param[out] ptr index pointing to location of element * indexed by subscript[] * @param[in] subscript [ndim] array of integers that index desired element * @param[out] ld [ndim-1] array of strides for local data patch. * These include ghost cell widths. */ void accessGhostElement(void *ptr, int subscript[], int ld[]) const; /** * @copydoc GlobalArray::accessGhostElement(void*,int[],int[])const */ void accessGhostElement(void *ptr, int64_t subscript[], int64_t ld[]) const; /** * The arrays are aded together elemet-wise: * [for example: g_c.add(...,g_a, .., g_b);] * c = alpha * a + beta * b * The result c may replace one of he input arrays(a/b). * This is a collective operation. * * @param[in] alpha scale factor * @param[in] g_a array * @param[in] beta scale factor * @param[in] g_b array */ void add(void *alpha, const GlobalArray * g_a, void *beta, const GlobalArray * g_b) const; /** * Patches of arrays (which must have the same number of elements) are * added together element-wise. * c[ ][ ] = alpha * a[ ][ ] + beta * b[ ][ ]. * * This is a collective operation. * * @param[in] alpha scale factor * @param[in] g_a global array * @param[in] alo patch of g_a * @param[in] ahi patch of g_a * @param[in] beta scale factor * @param[in] g_b global array * @param[in] blo patch of g_b * @param[in] bhi patch of g_b * @param[in] clo patch of this GlobalArray * @param[in] chi patch of this GlobalArray */ void addPatch(void *alpha, const GlobalArray * g_a, int alo[], int ahi[], void *beta, const GlobalArray * g_b, int blo[], int bhi[], int clo[], int chi[]) const; /** * @copydoc GlobalArray::addPatch(void*,const GlobalArray*,int[],int[],void*,const GlobalArray*,int[],int[],int[],int[])const */ void addPatch( void *alpha, const GlobalArray * g_a, int64_t alo[], int64_t ahi[], void *beta, const GlobalArray * g_b, int64_t blo[], int64_t bhi[], int64_t clo[], int64_t chi[]) const; /** * Allocate internal memory etc. to create a global array * * @return TODO */ int allocate() const; /** * This function can be used to preallocate internal buffers that are used by * the gather, scatter and scatter accumulate calls. This avoids repeated * memory allocations in these calls that can reduce performance. The value of * nelems should be set to the maximum number of elements that will be moved * in any single call. * * This is a local operation. * * @param[in] nelems The maximum number of elements that will be moved in * any gather, scatter, scatter-accumulate call */ void allocGatscatBuf(int nelems) const; /** * Check that the global array handle g_a is valid ... if not call * ga_error with the string provided and some more info. * * This operation is local. * * @param[in] string message */ void checkHandle(char* string) const; /** * Compares distributions of two global arrays. * * This is a collective operation. * * @param[in] g_a GlobalArray to compare * * @return 0 if distributions are identical and 1 when they are not. */ int compareDistr(const GlobalArray *g_a) const; /** * Copies elements in array represented by g_a into the array * represented by g_b [say for example: g_b.copy(g_a);]. * The arrays must be the same type, shape, and identically aligned. * * This is a collective operation. * * @param[in] g_a GlobalArray to copy */ void copy(const GlobalArray *g_a) const; /** * Copies elements in a patch of one array (ga) into another one (say for * example:gb.copyPatch(...,ga,....); ). * * The patches of arrays may be of different shapes but must have the same * number of elements. Patches must be nonoverlapping (if gb=ga). * * trans = 'N' or 'n' means that the transpose operator should not be * applied. trans = 'T' or 't' means that transpose operator should be * applied. This is a collective operation. * * @param[in] trans see above * @param[in] ga global array * @param[in] alo ga patch coordinates * @param[in] ahi ga patch coordinates * @param[in] blo this GlobalArray's patch coordinates * @param[in] bhi this GlobalArray's patch coordinates */ void copyPatch(char trans, const GlobalArray* ga, int alo[], int ahi[], int blo[], int bhi[]) const; /** * @copydoc GlobalArray::copyPatch(char,const GlobalArray*,int[],int[],int[],int[])const */ void copyPatch( char trans, const GlobalArray* ga, int64_t alo[], int64_t ahi[], int64_t blo[], int64_t bhi[]) const; /** * Computes element-wise dot product of the two arrays which must be of * the same types and same number of elements. * return value = SUM_ij a(i,j)*b(i,j) * * This is a collective operation. * * @param[in] g_a GlobalArray operand */ double ddot(const GlobalArray * g_a) const; /** * Computes the element-wise dot product of the two (possibly transposed) * patches which must be of the same type and have the same number of * elements. * * @param[in] ta transpose flags * @param[in] alo g_a patch coordinates * @param[in] ahi g_a patch coordinates * @param[in] g_a global array * @param[in] tb transpose flags * @param[in] blo g_b patch coordinates * @param[in] bhi g_b patch coordinates */ double ddotPatch(char ta, int alo[], int ahi[], const GlobalArray * g_a, char tb, int blo[], int bhi[]) const; /** * @copydoc GlobalArray::ddotPatch(char,int[],int[],const GlobalArray*,char,int[],int[]const */ double ddotPatch( char ta, int64_t alo[], int64_t ahi[], const GlobalArray * g_a, char tb, int64_t blo[], int64_t bhi[]) const; /** * Deallocates the array and frees any associated resources. */ void destroy(); /** * Performs one of the matrix-matrix operations: * [say: g_c.dgemm(..., g_a, g_b,..);] * * C := alpha*op( A )*op( B ) + beta*C, \n * where op( X ) is one of \n * op( X ) = X or op( X ) = X', \n * alpha and beta are scalars, and A, B and C are matrices, with op( A ) * an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. * On entry, transa specifies the form of op( A ) to be used in the * matrix multiplication as follows:\n * ta = 'N' or 'n', op( A ) = A. \n * ta = 'T' or 't', op( A ) = A'. \n * * This is a collective operation. * * @param[in] ta transpose operators * @param[in] tb transpose operators * @param[in] m number of rows of op(A) and of matrix C * @param[in] n number of columns of op(B) and of matrix C * @param[in] k number of columns of op(A) and rows of matrix op(B) * @param[in] alpha scale factors * @param[in] g_a input arrays * @param[in] g_b input arrays * @param[in] beta scale factors */ void dgemm(char ta, char tb, int m, int n, int k, double alpha, const GlobalArray *g_a, const GlobalArray *g_b,double beta) const; /** * @copydoc GlobalArray::dgemm(char,char,int,int,int,double,const GlobalArray*,const GlobalArray*,double)const */ void dgemm(char ta, char tb, int64_t m, int64_t n, int64_t k, double alpha, const GlobalArray *g_a, const GlobalArray *g_b,double beta) const; /** * Solve the generalized eigen-value problem returning all eigen-vectors * and values in ascending order. The input matrices are not overwritten * or destroyed. * * This is a collective operation. * * @param[in] g_s Metric * @param[out] g_v Global matrix to return evecs * @param[out] eval Local array to return evals * */ void diag(const GlobalArray *g_s, GlobalArray *g_v, void *eval) const; /** * Solve the generalized eigen-value problem returning all eigen-vectors * and values in ascending order. Recommended for REPEATED calls if g_s * is unchanged. Values of the control flag: * * value action/purpose * * 0 indicates first call to the eigensolver * * >0 consecutive calls (reuses factored g_s) * * <0 only erases factorized g_s; g_v and eval unchanged * (should be called after previous use if another * eigenproblem, i.e., different g_a and g_s, is to * be solved) * * The input matrices are not destroyed. * * This is a collective operation. * * @param[in] control Control flag * @param[in] g_s Metric * @param[out] g_v Global matrix to return evecs * @param[out] eval Local array to return evals */ void diagReuse(int control, const GlobalArray *g_s, GlobalArray *g_v, void *eval) const; /** * Solve the standard (non-generalized) eigenvalue problem returning * all eigenvectors and values in the ascending order. The input matrix * is neither overwritten nor destroyed. * * This is a collective operation. * * @param[out] g_v Global matrix to return evecs * @param[out] eval Local array to return evals */ void diagStd(GlobalArray *g_v, void *eval) const; /** * TODO */ void diagSeq(const GlobalArray * g_s, const GlobalArray * g_v, void *eval) const; /** * TODO */ void diagStdSeq(const GlobalArray * g_v, void *eval) const; /** * If no array elements are owned by process 'me', the range is returned * as lo[]=-1 and hi[]=-2 for all dimensions. * * The operation is local. * * @param[in] me process number * @param[in] lo [ndim] array of starting indices for array section * @param[in] hi [ndim] array of ending indices for array section */ void distribution(int me, int* lo, int* hi) const; /** * @copydoc GlobalArray::distribution(int,int*,int*)const */ void distribution(int me, int64_t* lo, int64_t* hi) const; /** * TODO */ float fdot(const GlobalArray * g_a) const; /** * TODO */ float fdotPatch( char t_a, int alo[], int ahi[], const GlobalArray * g_b, char t_b, int blo[], int bhi[]) const; /** * @copydoc GlobalArray::fdotPatch(char,int[],int[],const GlobalArray*,char,int[],int[])const */ float fdotPatch( char t_a, int64_t alo[], int64_t ahi[], const GlobalArray * g_b, char t_b, int64_t blo[], int64_t bhi[]) const; /** * Assign a single value to all elements in the array. * * This is a collective operation. * * @param[in] value pointer to the value of appropriate type * (double/DoubleComplex/long) that matches array type. */ void fill(void *value) const; /** * Fill the patch with value of 'val' * * This is a collective operation. * * @param[in] lo patch of this GlobalArray * @param[in] hi patch of this GlobalArray * @param[in] val value to fill * */ void fillPatch (int lo[], int hi[], void *val) const; /** * @copydoc GlobalArray::fillPatch(int[],int[],void*)const */ void fillPatch (int64_t lo[], int64_t hi[], void *val) const; /** * This function can be used to free preallocate internal buffers that were * set using the allocGatscatBuf call. * * This is a local operation. */ void freeGatscatBuf(); /** * Gathers array elements from a global array into a local array. * The contents of the input arrays (v, subscrArray) are preserved, * but their contents might be (consistently) shuffled on return. * * @code * for(k=0; k<= n; k++){ * v[k] = a[subsArray[k][0]][subsArray[k][1]][subsArray[k][2]]...; * } * @endcode * * This is a one-sided operation. * * @param[in] n number of elements * @param[in] v [n] array containing values * @param[in] subsarray [n][ndim] array of subscripts for each element */ void gather(void *v, int * subsarray[], int n) const; /** * @copydoc GlobalArray::gather(void*,int*[],int)const */ void gather(void *v, int64_t * subsarray[], int64_t n) const; /** * Copies data from global array section to the local array buffer. The * local array is assumed to be have the same number of dimensions as the * global array. Any detected inconsitencies/errors in the input arguments * are fatal. * * Example: For ga_get operation transfering data from the [10:14,0:4] * section of 2-dimensional 15x10 global array into local buffer 5x10 * array we have: lo={10,0}, hi={14,4}, ld={10} * * One-side operation. * * @param[in] lo [ndim] array of starting indices for global array section * @param[in] hi [ndim] array of ending indices for global array section * @param[out] buf pointer to the local buffer array where the data goes * @param[in] ld [ndim-1] array specifying leading * dimensions/strides/extents for buffer array */ void get(int lo[], int hi[], void *buf, int ld[]) const; /** * @copydoc GlobalArray::get(int[],int[],void*,int[])const */ void get(int64_t lo[], int64_t hi[], void *buf, int64_t ld[]) const; /** * The function retrieves the number of blocks along each coordinate dimension * and the dimensions of the individual blocks for a global array with a * block-cyclic data distribution. * * This is a local operation. * * @param[out] num_blocks [ndim] array containing number of blocks along each * coordinate direction * @param[out] block_dims [ndim] array containing block dimensions */ void getBlockInfo(int num_blocks[], int block_dims[]); /** * This function returns 1 if the global array has some dimensions for * which the ghost cell width is greater than zero, it returns 0 otherwise. * * This is a local operation. * * @return 1 if this GlobalArray has some dimensions for which teh ghost * cell width is greater than zero; 0 otherwise */ int hasGhosts() const; /** * Computes element-wise dot product of the two arrays which must be of * the same types and same number of elements. * * This is a collective operation. * * @param[in] g_a GlobalArray * @return value = SUM_ij a(i,j)*b(i,j) */ int idot(const GlobalArray * g_a) const; /** * Computes the element-wise dot product of the two (possibly transposed) * patches which must be of the same type and have the same number of * elements. * * @param[in] ta transpose flags * @param[in] alo g_a patch coordinates * @param[in] ahi g_a patch coordinates * @param[in] g_a global array * @param[in] tb transpose flags * @param[in] blo this GlobalArray's patch coordinates * @param[in] bhi this GlobalArray's patch coordinates */ long idotPatch( char ta, int alo[], int ahi[], const GlobalArray * g_a, char tb, int blo[], int bhi[]) const; /** * @copydoc GlobalArray::idotPatch(char,int[],int[],const GlobalArray*,char,int[],int[])const */ long idotPatch( char ta, int64_t alo[], int64_t ahi[], const GlobalArray * g_a, char tb, int64_t blo[], int64_t bhi[]) const; /** * Returns data type and dimensions of the array. * * This operation is local. * * @param[out] type data type * @param[out] ndim number of dimensions * @param[out] dims array of dimensions */ void inquire(int *type, int *ndim, int dims[]) const; /** * @copydoc GlobalArray::inquire(int*,int*,int[])const */ void inquire(int *type, int *ndim, int64_t dims[]) const; /** * Returns the name of an array represented by the handle g_a. * * This operation is local. * * @return copy of the name of this GlobalArray */ char* inquireName() const; /** * Computes element-wise dot product of the two arrays which must be of * the same types and same number of elements. * * * This is a collective operation. * * @param[in] g_a array handle * * @return value = SUM_ij a(i,j)*b(i,j) */ long ldot(const GlobalArray * g_a) const; /** * Computes the element-wise dot product of the two (possibly transposed) * patches which must be of the same type and have the same number of * elements. * * @param[in] ta transpose flags * @param[in] alo g_a patch coordinates * @param[in] ahi g_a patch coordinates * @param[in] g_a global array * @param[in] tb transpose flags * @param[in] blo this GlobalArray's patch coordinates * @param[in] bhi this GlobalArray's patch coordinates */ long ldotPatch( char ta, int alo[], int ahi[], const GlobalArray * g_a, char tb, int blo[], int bhi[]) const; /** * @copydoc GlobalArray::ldotPatch(char,int[],int[],const GlobalArray*,char,int[],int[])const */ long ldotPatch( char ta, int64_t alo[], int64_t ahi[], const GlobalArray * g_a, char tb, int64_t blo[], int64_t bhi[]) const; /** * Solves a system of linear equations * * A * X = B * * using the Cholesky factorization of an NxN double precision symmetric * positive definite matrix A (epresented by handle g_a). On successful * exit B will contain the solution X. * * This is a collective operation. * * @param[in] g_a coefficient matrix * * @return = 0 : successful exit\n * > 0 : the leading minor of this order is not positive * definite and the factorization could not be completed */ int lltSolve(const GlobalArray * g_a) const; /** * Return in owner the GA compute process id that 'owns' the data. If any * element of subscript[] is out of bounds "-1" is returned. * * This operation is local. * * @param[in] subscript [ndim] element subscript * * @return ID of compute process which owns the data */ int locate(int subscript[]) const; /** * @copydoc GlobalArray::locate(int[])const */ int locate(int64_t subscript[]) const; /** * Return the list of the GA processes id that 'own' the data. Parts of the * specified patch might be actually 'owned' by several processes. If lo/hi * are out of bounds "0" is returned, otherwise return value is equal to the * number of processes that hold the data. This operation is local. * * map[i][0:ndim-1] - lo[i] * * map[i][ndim:2*ndim-1] - hi[i] * * procs[i] - processor id that owns data in patch * lo[i]:hi[i] * * @param[in] lo [ndim] array of starting indices for array section * @param[in] hi [ndim] array of ending indices for array section * @param[out] map [][2*ndim] array with mapping information * @param[out] procs [nproc] list of processes that own a part of selection * * @return 0 if lo/hi are out of bounds, otherwise the number of processes * holding data */ int locateRegion(int lo[], int hi[], int map[], int procs[]) const; /** * @copydoc GlobalArray::locateRegion(int[],int[],int[],int[])const */ int locateRegion(int64_t lo[], int64_t hi[], int64_t map[], int procs[]) const; /** * Solve the system of linear equations op(A)X = B based on the LU * factorization. * * op(A) = A or A' depending on the parameter trans: * * trans = 'N' or 'n' means that the transpose operator should not * be applied. * * trans = 'T' or 't' means that the transpose operator should be applied. * * Matrix A is a general real matrix. Matrix B contains possibly multiple * rhs vectors. The array associated with the handle g_b is overwritten * by the solution matrix X. * This is a collective operation. * * @param[in] trans transpose or not transpose * @param[in] g_a coefficient matrix */ void luSolve(char trans, const GlobalArray * g_a) const; /** * ga_matmul_patch is a patch version of ga_dgemm: * * C[cilo:cihi,cjlo:cjhi] := alpha* AA[ailo:aihi,ajlo:ajhi] * * BB[bilo:bihi,bjlo:bjhi] ) + * beta*C[cilo:cihi,cjlo:cjhi], * * where AA = op(A), BB = op(B), and op( X ) is one of * op( X ) = X or op( X ) = X', * * Valid values for transpose arguments: 'n', 'N', 't', 'T'. It works * for both double and DoubleComplex data tape. * This is a collective operation. * * @param[in] g_a global array * @param[in] g_b global array * @param[in] ailo patch of g_a * @param[in] aihi patch of g_a * @param[in] ajlo patch of g_a * @param[in] ajhi patch of g_a * @param[in] bilo patch of g_b * @param[in] bihi patch of g_b * @param[in] bjlo patch of g_b * @param[in] bjhi patch of g_b * @param[in] cilo patch of g_c * @param[in] cihi patch of g_c * @param[in] cjlo patch of g_c * @param[in] cjhi patch of g_c * @param[in] alpha scale factors * @param[in] beta scale factors * @param[in] transa transpose operators * @param[in] transb transpose operators */ void matmulPatch(char transa, char transb, void* alpha, void *beta, const GlobalArray *g_a, int ailo, int aihi, int ajlo, int ajhi, const GlobalArray *g_b, int bilo, int bihi, int bjlo, int bjhi, int cilo, int cihi, int cjlo, int cjhi) const; /** * @copydoc GlobalArray::matmulPatch(char,char,void*,void*,const GlobalArray*,int,int,int,int,const GlobalArray*,int,int,int,int,int,int,int,int)const */ void matmulPatch(char transa, char transb, void* alpha, void *beta, const GlobalArray *g_a, int64_t ailo, int64_t aihi, int64_t ajlo, int64_t ajhi, const GlobalArray *g_b, int64_t bilo, int64_t bihi, int64_t bjlo, int64_t bjhi, int64_t cilo, int64_t cihi, int64_t cjlo, int64_t cjhi) const; /** * nga_matmul_patch is a n-dimensional patch version of ga_dgemm: * * C[clo[]:chi[]] := alpha* AA[alo[]:ahi[]] * * BB[blo[]:bhi[]]) + * beta*C[clo[]:chi[]], * * where AA = op(A), BB = op(B), and op( X ) is one of * op( X ) = X or op( X ) = X', * * Valid values for transpose arguments: 'n', 'N', 't', 'T'. It works * for both double and DoubleComplex data tape. * * This is a collective operation. * * @param[in] g_a global array * @param[in] g_b global array * @param[in] alo array of patch of g_a * @param[in] ahi array of patch of g_a * @param[in] blo array of patch of g_b * @param[in] bhi array of patch of g_b * @param[in] clo array of patch of g_c * @param[in] chi array of patch of g_c * @param[in] alpha scale factors * @param[in] beta scale factors * @param[in] transa transpose operators * @param[in] transb transpose operators */ void matmulPatch(char transa, char transb, void* alpha, void *beta, const GlobalArray *g_a, int *alo, int *ahi, const GlobalArray *g_b, int *blo, int *bhi, int *clo, int *chi) const; /** * @copydoc GlobalArray::matmulPatch(char,char,void*,void*,const GlobalArray*,int*,int*,const GlobalArray*,int*,int*,int*,int*)const */ void matmulPatch(char transa, char transb, void* alpha, void *beta, const GlobalArray *g_a, int64_t *alo, int64_t *ahi, const GlobalArray *g_b, int64_t *blo, int64_t *bhi, int64_t *clo, int64_t *chi) const; /** * This function merges all values in a patch of a mirrored array into * a patch in another global array g_b. * * This is a collective operation. * * @param[in] alo [ndim] patch indices of mirrored array * @param[in] ahi [ndim] patch indices of mirrored array * @param[in] blo [ndim] patch indices of result array * @param[in] bhi [ndim] patch indices of result array * @param[out] g_a global array containing result */ void mergeDistrPatch(int alo[], int ahi[], GlobalArray *g_a, int blo[], int bhi[]); /** * @copydoc GlobalArray::mergeDistrPatch(int[],int[],GlobalArray*,int[],int[]) */ void mergeDistrPatch(int64_t alo[], int64_t ahi[], GlobalArray *g_a, int64_t blo[], int64_t bhi[]); /** * This function returns 0 if a global array is not mirrored and 1 if it is. */ int isMirrored(); /** * This function adds together all copies of a mirrored array so that all * copies are the same. * * This is a collective operation. */ void mergeMirrored(); /** * Non-blocking accumalate operation. This is function performs an * accumulate operation and returns a nblocking handle. Completion of the * operation can be forced by calling the nbwait method on the handle. * * This is a onesided operation. * * @param[in] lo [ndim] patch coordinates of block * @param[in] hi [ndim] patch coordinates of block * @param[in] buf local buffer containing data * @param[in] ld [ndim-1] array of strides for local data * @param[in] alpha multiplier for data before adding to existing results * @param[out] nbhandle nonblocking handle */ void nbAcc(int lo[], int hi[], void *buf, int ld[], void *alpha, GANbhdl *nbhandle); /** * @copydoc GlobalArray::nbAcc(int[],int[],void*,int[],void*,GANbhdl*) */ void nbAcc(int64_t lo[], int64_t hi[], void *buf, int64_t ld[], void *alpha, GANbhdl *nbhandle); /** * Non-blocking get operation. This is function gets a data block from a * global array, copies it into a local buffer, and returns a nonblocking * handle. Completion of the operation can be forced by calling the nbwait * method on the handle. * * This is a onesided operation. * * @param[in] lo [ndim] patch coordinates of block * @param[in] hi [ndim] patch coordinates of block * @param[in] buf local buffer to receive data * @param[in] ld [ndim-1] array of strides for local data * @param[out] nbhandle nonblocking handle */ void nbGet(int lo[], int hi[], void *buf, int ld[], GANbhdl *nbhandle); /** * @copydoc GlobalArray::nbGet(int[],int[],void*,int[],GANbhdl*) */ void nbGet(int64_t lo[], int64_t hi[], void *buf, int64_t ld[], GANbhdl *nbhandle); /** * Non-blocking update operation for arrays with ghost cells. Ghost cells * along the coordinates specified in the mask array are updated with * non-blocking get calls. The mask array must contain either 0's or 1's. * * This is a onesided operation. * * @param[in] mask [ndim] array with flags for directions that are * to be updated * @param[out] nbhandle nonblocking handle */ void nbGetGhostDir(int mask[], GANbhdl *nbhandle); /** * @copydoc GlobalArray::nbGetGhostDir(int[],GANbhdl*) */ void nbGetGhostDir(int64_t mask[], GANbhdl *nbhandle); /** * Given a distribution of an array represented by the handle g_a, * returns the number of partitions of each array dimension. * * This operation is local. * * @param[out] nblock [ndim] number of partitions for each dimension */ void nblock(int nblock[]) const; /** * Non-blocking put operation. This is function puts a data block from a * local array, copies it into a global array, and returns a nonblocking * handle. Completion of the operation can be forced by calling the nbwait * method on the handle. * * This is a onesided operation. * * @param[in] lo [ndim] patch coordinates of block * @param[in] hi [ndim] patch coordinates of block * @param[in] buf local buffer that supplies data * @param[in] ld [ndim-1] array of strides for local data * @param[out] nbhandle nonblocking handle */ void nbPut(int lo[], int hi[], void *buf, int ld[], GANbhdl *nbhandle); /** * @copydoc GlobalArray::nbPut(int[],int[],void*,int[],GANbhdl*) */ void nbPut(int64_t lo[], int64_t hi[], void *buf, int64_t ld[], GANbhdl *nbhandle); /** * Returns the number of dimensions in this GlobalArray. * * This operation is local. * * @return number of dimensions aka rank */ int ndim() const; /** * The pack subroutine is designed to compress the values in the source vector * g_src into a smaller destination array g_dest based on the values in an * integer mask array g_mask. The values lo and hi denote the range of * elements that should be compressed and icount is a variable that on output * lists the number of values placed in the compressed array. This operation * is the complement of the ga_unpack operation. An example is shown below * * g_src->pack(g_dest, g_mask, 1, n, icount) * g_mask: 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0 * g_src: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 * g_dest: 1 7 9 12 15 16 * icount: 6 * * The calling array is the source array. * * This is a collective operation. * * @param[out] g_dest destination array * @param[in] g_mask mask array * @param[in] lo coordinate interval to pack * @param[in] hi coordinate interval to pack * @param[out] icount number of packed elements */ void pack(const GlobalArray *g_dest, const GlobalArray *g_mask, int lo, int hi, int *icount) const; /** * @copydoc GlobalArray::pack(const GlobalArray*,const GlobalArray*,int,int,int*)const */ void pack(const GlobalArray *g_dest, const GlobalArray *g_mask, int64_t lo, int64_t hi, int64_t *icount) const; /** * This subroutine enumerates the values of an array between elements lo and * hi starting with the value istart and incrementing each subsequent value by * inc. This operation is only applicable to 1-dimensional arrays. An example * of its use is shown below: * * call g_a->patch_enum(g_a, 1, n, 7, 2) * g_a: 7 9 11 13 15 17 19 21 23 ... * * This is a collective operation. * * @param[in] lo coordinate interval to enumerate * @param[in] hi coordinate interval to enumerate * @param[in] istart starting value of enumeration * @param[in] inc increment value */ void patchEnum(int lo, int hi, void *istart, void *inc); /** * @copydoc GlobalArray::patchEnum(int,int,int,int) */ void patchEnum(int64_t lo, int64_t hi, void *start, void *inc); /** * Same as nga_acc except the indices can extend beyond the array * boundary/dimensions in which case the library wraps them around. * * This is a one-sided and atomic operation. * * @param[in] lo [ndim] array of starting indices for array section * @param[in] hi [ndim] array of ending indices for array section * @param[in] buf pointer to the local buffer array * @param[in] ld [ndim-1] array specifying leading * dimensions/strides/extents for buffer array * @param[in] alpha double/DoubleComplex/long scale factor */ void periodicAcc(int lo[], int hi[], void* buf, int ld[], void* alpha) const; /** * @copydoc GlobalArray::periodicAcc(int[],int[],void*,int[],void*)const */ void periodicAcc(int64_t lo[], int64_t hi[], void* buf, int64_t ld[], void* alpha) const; /** * Same as nga_get except the indices can extend beyond the array * boundary/dimensions in which case the library wraps them around. * * This is a one-sided operation. * * @param[in] lo [ndim] array of starting indices for global array section * @param[in] hi [ndim] array of ending indices for global array section * @param[out] buf pointer to the local buffer array where the data goes * @param[in] ld [ndim-1] array specifying leading * dimensions/strides/extents for buffer array */ void periodicGet(int lo[], int hi[], void* buf, int ld[]) const; /** * @copydoc GlobalArray::periodicGet(int[],int[],void*,int[])const */ void periodicGet(int64_t lo[], int64_t hi[], void* buf, int64_t ld[]) const; /** * Same as nga_put except the indices can extend beyond the array * boundary/dimensions in which case the library wraps them around. * * This is a one-sided operation. * * @param[in] lo [ndim] array of starting indices for global array section * @param[in] hi [ndim] array of ending indices for global array section * @param[in] buf pointer to the local buffer array where the data goes * @param[in] ld [ndim-1] array specifying leading * dimensions/strides/extents for buffer array */ void periodicPut(int lo[], int hi[], void* buf, int ld[]) const; /** * @copydoc GlobalArray::periodicPut(int[],int[],void*,int[])const */ void periodicPut(int64_t lo[], int64_t hi[], void* buf, int64_t ld[]) const; /** * Prints an entire array to the standard output. * * This is a collective operation. */ void print() const ; /** * Prints the array distribution. * * This is a collective operation. */ void printDistribution() const ; /** * Prints the array distribution to a file. * * This is a collective operation. */ void printFile(FILE *file) const; /** * Prints a patch of g_a array to the standard output. If pretty has the * value 0 then output is printed in a dense fashion. If pretty has the * value 1 then output is formatted and rows/columns labeled. * This is a collective operation. * * @param[in] lo coordinates of the patch * @param[in] hi coordinates of the patch * @param[in] pretty formatting flag */ void printPatch(int* lo, int* hi, int pretty) const; /** * @copydoc GlobalArray::printPatch(int*,int*,int)const */ void printPatch(int64_t* lo, int64_t* hi, int pretty) const; /** * Based on the distribution of an array associated with handle g_a, * determines coordinates of the specified processor in the virtual * processor grid corresponding to the distribution of array g_a. The * numbering starts from 0. The values of -1 means that the processor * doesn't 'own' any section of array represented by g_a. * * This operation is local. * * @param[in] proc process id * @param[out] coord [ndim] coordinates in processor grid * */ void procTopology(int proc, int coord[]) const; /*void procTopology(int proc, int *prow, int *pcol);*/ /** * Copies data from local array buffer to the global array section . The * local array is assumed to be have the same number of dimensions as the * global array. Any detected inconsitencies/errors in input arguments are * fatal. This is a one-sided operation. * * @param[in] lo [ndim] array of starting indices for global array section * @param[in] hi [ndim] array of ending indices for global array section * @param[in] buf pointer to the local buffer array where the data is * @param[in] ld [ndim-1] array specifying leading * dimensions/strides/extents for buffer array * @param[in] buf buffer array */ void put(int lo[], int hi[], void *buf, int ld[]) const; /** * @copydoc GlobalArray::put(int[],int[],void*,int[])const */ void put(int64_t lo[], int64_t hi[], void *buf, int64_t ld[]) const; /** * Atomically read and increment an element in an integer array. * * *BEGIN CRITICAL SECTION* * * old_value = a(subscript) * * a(subscript) += inc * * *END CRITICAL SECTION* * * return old_value * * This is a one-sided and atomic operation. * * @param[in] subscript [ndim] subscript array for the referenced element * @param[in] inc how much to increment by * @return the incremented value */ long readInc(int subscript[], long inc) const; /** * @copydoc GlobalArray::readInc(int[],long)const */ long readInc(int64_t subscript[], long inc) const; /** * Releases access to a global array when the data was read only. * Your code should look like: * * @code * g_a->distribution(myproc, lo,hi); * g_a->access(lo, hi, &ptr, ld); * // * g_a->release(lo, hi); * @endcode * * @note see restrictions specified for ga_access. * * This operation is local. * * @param[in] lo [ndim] array of starting indices for array section * @param[in] hi [ndim] array of ending indices for array section */ void release(int lo[], int hi[]) const; /** * @copydoc GlobalArray::release(int[],int[])const */ void release(int64_t lo[], int64_t hi[]) const; /** * Releases access to the block of data specified by the integer * index when data was accessed as read only. This is only applicable to * block-cyclic data distributions created using the simple block-cyclic * distribution. * * This is a local operation. * * @param[in] index block index */ void releaseBlock(int index) const; /** * Releases access to the block of data specified by the subscript * array when data was accessed as read only. This is only applicable to * block-cyclic data distributions created using the SCALAPACK data * distribution. * * This is a local operation. * * @param[in] index [ndim] indices of block in array */ void releaseBlockGrid(int index[]) const; /** * Releases access to the block of locally held data for a block-cyclic * array, when data was accessed as read-only. This is a local operation. * * @param[in] proc process ID/rank */ void releaseBlockSegment(int proc) const; /** * Releases access to the data. It must be used if the data was accessed * for writing. NOTE: see restrictions specified for ga_access. * * This operation is local. * * @param[in] lo [ndim] array of starting indices for array section * @param[in] hi [ndim] array of ending indices for array section */ void releaseUpdate(int lo[], int hi[]) const; /** * @copydoc GlobalArray::releaseUpdate(int[],int[])const */ void releaseUpdate(int64_t lo[], int64_t hi[]) const; /** * Releases access to the block of data specified by the integer index when * data was accessed in read-write mode. This is only applicable to * block-cyclic data distributions created using the simple block-cyclic * distribution. * * This is a local operation. * * @param[in] index block index */ void releaseUpdateBlock(int index) const; /** * Releases access to the block of data specified by the subscript * array when data was accessed in read-write mode. This is only applicable * to block-cyclic data distributions created using the SCALAPACK data * distribution. * * This is a local operation. * * @param[in] index [ndim] indices of block in array */ void releaseUpdateBlockGrid(int index[]) const; /** * Releases access to the block of locally held data for a block-cyclic * array, when data was accessed in read-write mode. * * This is a local operation. * * @param[in] proc process ID/rank */ void releaseUpdateBlockSegment(int proc) const; /** * Releases access to a global array containing ghost cells when the data was * read only. * Your code should look like: * * @code * g_a->accessGhosts(dims, &ptr, ld) * // * g_a->releasGhosts(); * @endcode * * This operation is local. * */ void releaseGhosts() const; /** * Releases access to a global array containing ghost cells when the data was * accessed in read-write mode. * * This operation is local. * */ void releaseUpdateGhosts() const; /** * Releases access to a global array containing ghost cells when the data was * read only. * Your code should look like: * * @code * g_a->accessGhostElement(&ptr, subscript, ld) * // * g_a->releaseGhostElement(subscript); * @endcode * * This operation is local. * @param[in] indices of element * */ void releaseGhostElement(int subscript[]) const; /** * @copydoc GlobalArray::releaseGhostElement(int subscript[]) const */ void releaseGhostElement(int64_t subscript[]) const; /** * Releases access to a global array containing ghost cells when the data was * accessed in read-write mode. * * This operation is local. * @param[in] indices of element * */ void releaseUpdateGhostElement(int subscript[]) const; /** * @copydoc GlobalArray::releaseUpdateGhostElement(int subscript[]) const */ void releaseUpdateGhostElement(int64_t subscript[]) const; /** * Scales an array by the constant s. Note that the library is unable * to detect errors when the pointed value is of different type than * the array. * * This is a collective operation. * * @param[in] value pointer to the value of appropriate type */ void scale(void *value) const; /** * Scale an array by the factor 'val'. * * This is a collective operation. * * @param[in] lo patch of g_a * @param[in] hi patch of g_a * @param[in] val scale factor */ void scalePatch (int lo[], int hi[], void *val) const; /** * @copydoc GlobalArray::scalePatch(int[],int[],void*)const */ void scalePatch (int64_t lo[], int64_t hi[], void *val) const; /** * This operation will add successive elements in a source vector g_src * and put the results in a destination vector g_dest. The addition will * restart based on the values of the integer mask vector g_mask. The scan * is performed within the range specified by the integer values lo and * hi. Note that this operation can only be applied to 1-dimensional * arrays. The excl flag determines whether the sum starts with the value * in the source vector corresponding to the location of a 1 in the mask * vector (excl=0) or whether the first value is set equal to 0 * (excl=1). Some examples of this operation are given below. * * g_src->scanAdd(g_dest, g_mask, 1, n, 0); * g_mask: 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0 * g_src: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 * g_dest: 1 3 6 10 16 21 7 15 9 19 30 12 25 39 15 16 33 * * g_src->scanAdd(g_dest, g_mask, 1, n, 1); * g_mask: 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0 * g_src: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 * g_dest: 0 1 3 6 10 15 0 7 0 9 19 0 12 25 0 0 16 * * This is a collective operation. * * @param[out] g_dest handle for destination array * @param[in] g_mask handle for integer array representing mask * @param[in] lo low and high values of range on which operation * is performed * @param[in] hi low and high values of range on which operation * is performed * @param[in] excl value to signify if masked values are included in in add */ void scanAdd(const GlobalArray *g_dest, const GlobalArray *g_mask, int lo, int hi, int excl) const; /** * @copydoc GlobalArray::scanAdd(const GlobalArray*,const GlobalArray*,int,int,int)const */ void scanAdd(const GlobalArray *g_dest, const GlobalArray *g_mask, int64_t lo, int64_t hi, int excl) const; /** * This subroutine does a segmented scan-copy of values in the * source array g_src into a destination array g_dest with segments * defined by values in the integer mask array g_mask. The scan-copy * operation is only applied to the range between the lo and hi * indices. This operation is restriced to 1-dimensional arrays. The * resulting destination array will consist of segments of consecutive * elements with the same value. An example is shown below * * g_src->scanCopy(g_dest, g_mask, 1, n); * g_mask: 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0 * g_src: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 * g_dest: 1 1 1 1 1 1 7 7 9 9 9 12 12 12 15 16 16 * * This is a collective operation. * * @param[out] g_dest handle for destination array * @param[in] g_mask handle for integer array representing mask * @param[in] lo low and high values of range on which operation * is performed * @param[in] hi low and high values of range on which operation * is performed */ void scanCopy(const GlobalArray *g_dest, const GlobalArray *g_mask, int lo, int hi) const; /** * @copydoc GlobalArray::scanCopy(const GlobalArray*,const GlobalArray*,int,int)const */ void scanCopy(const GlobalArray *g_dest, const GlobalArray *g_mask, int64_t lo, int64_t hi) const; /** * Scatters array elements into a global array. The contents of the input * arrays (v,subscrArray) are preserved, but their contents might be * (consistently) shuffled on return. * * @code * for(k=0; k<= n; k++) { * a[subsArray[k][0]][subsArray[k][1]][subsArray[k][2]]... = v[k]; * } * @endcode * * This is a one-sided operation. * * @param[in] n number of elements * @param[in] v [n] array containing values * @param[in] subsarray [n][ndim] array of subscripts for each element */ void scatter(void *v, int *subsarray[], int n) const; /** * @copydoc GlobalArray::scatter(void*,int*[],int)const */ void scatter(void *v, int64_t *subsarray[], int64_t n) const; /** * Adds element a local array to array elements into a global array after * multiplying by alpha. The contents of the input arrays (v,subscrArray) * are preserved, but their contents might be (consistently) shuffled on * return. * * @code * for(k=0; k<= n; k++) { * a[subsArray[k][0]][subsArray[k][1]][subsArray[k][2]]... = v[k]; * } * @endcode * * This is a one-sided operation. * * @param[in] n number of elements * @param[in] v [n] array containing values * @param[in] subsarray [n][ndim] array of subscripts for each element * @param[in] alpha scale factor */ void scatterAcc(void *v, int *subsarray[], int n, void *alpha) const; /** * @copydoc GlobalArray::scatterAcc(void*,int*[],int,void*)const */ void scatterAcc(void *v, int64_t *subsarray[], int64_t n, void *alpha) const; /** * Returns the value and index for an element that is selected by the * specified operator in a global array corresponding to g_a handle. * * This is a collective operation. * * @param[in] op operator {"min","max"} * @param[out] val address where value should be stored * @param[out] index [ndim] array index for the selected element */ void selectElem(char *op, void* val, int index[]) const; /** * @copydoc GlobalArray::selectElem(char*,void*,int[])const */ void selectElem(char *op, void* val, int64_t index[]) const; /** * This function can be used to assign a unique character * string name to a global array handle that was obtained * using the createHandle function. * * This is a collective operation. * * @param[in] name array name */ void setArrayName(char *name) const; /** * This subroutine is used to create a global array with a simple * block-cyclic data distribution. The array is broken up into blocks of * size dims and each block is numbered sequentially using a column major * indexing scheme. The blocks are then assigned in a simple round-robin * fashion to processors. This is illustrated in the figure below for an * array containing 25 blocks distributed on 4 processors. Blocks at the * edge of the array may be smaller than the block size specified in * dims. In the example below, blocks 4,9,14,19,20,21,22,23, and 24 might * be smaller thatn the remaining blocks. Most global array operations * are insensitive to whether or not a block-cyclic data distribution is * used, although performance may be slower in some cases if the global * array is using a block-cyclic data distribution. Individual data * blocks can be accessesed using the block-cyclic access functions. * * This is a collective operation. * * @param[in] dims array of block dimensions */ void setBlockCyclic(int dims[]) const; /** * This subroutine is used to create a global array with a * SCALAPACK-type block cyclic data distribution. The user specifies * the dimensions of the processor grid in the array proc_grid. The * product of the processor grid dimensions must equal the number of * total number of processors and the number of dimensions in the * processor grid must be the same as the number of dimensions in the * global array. The data blocks are mapped onto the processor grid * in a cyclic manner along each of the processor grid axes. This is * illustrated below for an array consisting of 25 data blocks * disributed on 6 processors. The 6 processors are configured in a 3 * by 2 processor grid. Blocks at the edge of the array may be * smaller than the block size specified in dims. Most global array * operations are insensitive to whether or not a block-cyclic data * distribution is used, although performance may be slower in some * cases if the global array is using a block-cyclic data * distribution. Individual data blocks can be accessesed using the * block-cyclic access functions. * * This is a collective operation. * * @param[in] dims array of block dimensions * @param[in] proc_grid processor grid dimensions */ void setBlockCyclicProcGrid(int dims[], int proc_grid[]) const; /** * This function is used to set the chunk array for a global array handle * that was obtained using the createHandle function. The chunk array * is used to determine the minimum number of array elements assigned to * each processor along each coordinate direction. * * This is a collective operation. * * @param[in] chunk array of chunk widths */ void setChunk(int chunk[]) const; /** * @copydoc GlobalArray::setChunk(int[])const */ void setChunk(int64_t chunk[]) const; /** * This function can be used to set the array dimension, the coordinate * dimensions, and the data type assigned to a global array handle obtained * using the GA_Create_handle function. * * This is a collective operation. * * @param[in] ndim dimension of global array * @param[in] dims dimensions of global array * @param[in] type data type of global array */ void setData(int ndim, int dims[], int type) const; /** * @copydoc GlobalArray::setData(int,int[],int)const */ void setData(int ndim, int64_t dims[], int type) const; /** * This function can be used to set the ghost cell widths for a global * array handle that was obtained using the createHandle function. The * ghosts cells widths indicate how many ghost cells are used to pad the * locally held array data along each dimension. The padding can be set * independently for each coordinate dimension. * * This is a collective operation. * * @param[in] width [ndim] array of ghost cell widths */ void setGhosts(int width[]) const; /** * @copydoc GlobalArray::setGhosts(int[])const */ void setGhosts(int64_t width[]) const; /** * This function can be used to partition the array data among the * individual processors for a global array handle obtained using the * GA_Create_handle function. * * The distribution is specified as a Cartesian product of distributions * for each dimension. For example, the following figure demonstrates * distribution of a 2-dimensional array 8x10 on 6 (or more) * processors. nblock(2)={3, 2}, the size of mapc array is s=5 and array * mapc contains the following elements mapc={1, 3, 7, 1, 6}. The * distribution is nonuniform because, P1 and P4 get 20 elements each and * processors P0,P2,P3, and P5 only 10 elements each. * * The array width() is used to control the width of the ghost cell * boundary around the visible data on each processor. The local data of * the global array residing on each processor will have a layer width(n) * ghosts cells wide on either side of the visible data along the dimension * n. * * This is a collective operation. * * @param[in] mapc [s] starting index for each block; the size * s is the sum of all elements of the array nblock * @param[in] nblock [ndim] number of blocks that each dimension is * divided into */ void setIrregDistr(int mapc[], int nblock[]) const; /** * @copydoc GlobalArray::setIrregDistr(int mapc[], int nblock[]) const */ void setIrregDistr(int64_t mapc[], int64_t nblock[]) const; /** * This function can be used to set the processor configuration assigned to * a global array handle that was obtained using the * createHandle function. It can be used to create mirrored arrays by * using the mirrored array processor configuration in this function * call. It can also be used to create an array on a processor group by * using a processor group handle in this call. * * This is a collective operation. * * @param[in] pHandle processor group handle */ void setPGroup(PGroup *pHandle) const; /** * This function is used to restrict the number of processors in a global * array that actually contain data. It can also be used to rearrange the * layout of data on a processor from the default distribution. Only the * processes listed in list[] will actually contain data, the remaining * processes will be able to see the data in the global array but they will * not contain any of the global array data locally. * * @param[in] list list of processors that should contain data * @param[in] nprocs number of processors in list * */ void setRestricted(int list[], int nprocs) const; /** * This function is used to restrict the number of processors in a global * array that actually contain data. Only the processors in the range * [lo_proc:hi_proc] (inclusive) will actually contain data, the remaining * processes will be able to see the data in the global array but they will * not contain any of the global array data locally. * * @param[in] lo_proc low end of processor range * @param[in] hi_proc high end of processor range */ void setRestrictedRange(int lo_proc, int hi_proc) const; /** * Performs one of the matrix-matrix operations: * * C := alpha*op( A )*op( B ) + beta*C, * where op( X ) is one of * op( X ) = X or op( X ) = X', * alpha and beta are scalars, and A, B and C are matrices, with op( A ) * an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. * On entry, transa specifies the form of op( A ) to be used in the * matrix multiplication as follows: * * ta = 'N' or 'n', op( A ) = A. * * ta = 'T' or 't', op( A ) = A'. * * This is a collective operation. * * @param[in] g_a handles to input arrays * @param[in] g_b handles to input arrays * @param[in] ta transpose operators * @param[in] tb transpose operators * @param[in] m number of rows of op(A) and of matrix C * @param[in] n number of columns of op(B) and of matrix C * @param[in] k number of columns of op(A) and rows of matrix op(B) * @param[in] alpha scale factors * @param[in] beta scale factors * */ void sgemm(char ta, char tb, int m, int n, int k, float alpha, const GlobalArray *g_a, const GlobalArray *g_b, float beta) const; /** * @copydoc GlobalArray::sgemm(char,char,int,int,int,float,const GlobalArray*,const GlobalArray*,float)const */ void sgemm(char ta, char tb, int64_t m, int64_t n, int64_t k, float alpha, const GlobalArray *g_a, const GlobalArray *g_b, float beta) const; /** * Solves a system of linear equations * A * X = B * It first will call the Cholesky factorization routine and, if * sucessfully, will solve the system with the Cholesky solver. If * Cholesky will be not be able to factorize A, then it will call the * LU factorization routine and will solve the system with forward/backward * substitution. On exit B will contain the solution X. * * This is a collective operation. * * @param[in] g_a coefficient matrix * * @return = 0 : Cholesky factoriztion was succesful\n * > 0 : the leading minor of this order * is not positive definite, Cholesky factorization * could not be completed and LU factoriztion was used */ int solve(const GlobalArray * g_a) const; /** * It computes the inverse of a double precision using the Cholesky * factorization of a NxN double precision symmetric positive definite * matrix A stored in the global array represented by g_a. On successful * exit, A will contain the inverse. * * This is a collective operation. * * @return = 0 : successful exit\n * > 0 : the leading minor of this order is not positive * definite and the factorization could not be completed\n * < 0 : it returns the index i of the (i,i) * element of the factor L/U that is zero and * the inverse could not be computed */ int spdInvert() const; /** * This operation is the same as "acc", except that the values * corresponding to dimension n in buf are accumulated to every skip[n] * values of the global array. * * This is a one-sided operation. * * @param[in] lo [ndim] array of starting indices for glob array section * @param[in] hi [ndim] array of ending indices for global array section * @param[in] skip [ndim] array of strides for each dimension * @param[in] buf pointer to local buffer array where data goes * @param[in] ld [ndim-1] rray specifying leading * dimensions/strides/extents for buffer array * @param[in] alpha double/DoublComplex/long scale factor */ void stridedAcc(int lo[], int hi[], int skip[], void*buf, int ld[], void *alpha) const; /** * @copydoc GlobalArray::stridedAcc(int[],int[],int[],void*,int[],void*)const */ void stridedAcc(int64_t lo[], int64_t hi[], int64_t skip[], void*buf, int64_t ld[], void *alpha) const; /** * This operation is the same as "get", except that the values * corresponding to dimension n in buf are accumulated to every skip[n] * values of the global array. * * This is a one-sided operation. * * @param[in] lo [ndim] array of starting indices for glob array section * @param[in] hi [ndim] array of ending indices for global array section * @param[in] skip [ndim] array of strides for each dimension * @param[out] buf pointer to local buffer array where data goes * @param[in] ld [ndim-1] array specifying leading * dimensions/strides/extents for buffer array */ void stridedGet(int lo[], int hi[], int skip[], void*buf, int ld[]) const; /** * @copydoc GlobalArray::stridedGet(int[],int[],int[],void*,int[])const */ void stridedGet(int64_t lo[], int64_t hi[], int64_t skip[], void*buf, int64_t ld[]) const; /** * This operation is the same as "put", except that the values * corresponding to dimension n in buf are accumulated to every skip[n] * values of the global array. * * This is a one-sided operation. * * @param[in] lo [ndim] array of starting indices for glob array section * @param[in] hi [ndim] array of ending indices for global array section * @param[in] skip [ndim] array of strides for each dimension * @param[in] buf pointer to local buffer array where data goes * @param[in] ld [ndim-1] array specifying leading * dimensions/strides/extents for buffer array */ void stridedPut(int lo[], int hi[], int skip[], void*buf, int ld[]) const; /** * "long" interface for stridedPut */ void stridedPut(int64_t lo[], int64_t hi[], int64_t skip[], void*buf, int64_t ld[]) const; /** * Prints info about allocated arrays. * * @param[in] verbose If true print distribution info */ void summarize(int verbose) const; /** * Symmmetrizes matrix A with handle A:=.5 * (A+A'). * * This is a collective operation */ void symmetrize() const; /** * This function returns the total number of blocks contained in a global * array with a block-cyclic data distribution. * * This is a local operation. * * @return number of blocks contained in this block-cyclic distribution */ int totalBlocks() const; /** * Transposes a matrix: B = A', where A and B are represented by * handles g_a and g_b [say, g_b.transpose(g_a);]. * * This is a collective operation. * * @param[in] g_a GlobalArray to transpose and assign to this GlobalArray */ void transpose(const GlobalArray * g_a) const; /** * The unpack subroutine is designed to expand the values in the source * vector g_src into a larger destination array g_dest based on the values * in an integer mask array g_mask. The values lo and hi denote the range * of elements that should be compressed and icount is a variable that on * output lists the number of values placed in the uncompressed array. This * operation is the complement of the pack operation. An example is * shown below * * g_src->unpack(g_dest, g_mask, 1, n, &icount); * g_src: 1 7 9 12 15 16 * g_mask: 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0 * g_dest: 1 0 0 0 0 0 7 0 9 0 0 12 0 0 15 16 0 * icount: 6 * * This is a collective operation. * * @param[out] g_dest handle for destination array * @param[in] g_mask handle for integer array representing mask * @param[in] lo low value of range on which operation is performed * @param[in] hi high value of range on which operation is performed * @param[out] icount number of values in uncompressed array */ void unpack(GlobalArray *g_dest, GlobalArray *g_mask, int lo, int hi, int *icount) const; /** * @copydoc GlobalArray::unpack(GlobalArray*,GlobalArray*,int,int,int*)const */ void unpack(GlobalArray *g_dest, GlobalArray *g_mask, int64_t lo, int64_t hi, int64_t *icount) const; /** * This call updates the ghost cell regions on each processor with the * corresponding neighbor data from other processors. The operation assumes * that all data is wrapped around using periodic boundary data so that * ghost cell data that goes beyound an array boundary is wrapped around to * the other end of the array. The updateGhosts call contains two * sync calls before and after the actual update operation. For some * applications these calls may be unecessary, if so they can be removed * using the maskSync subroutine. * * This is a collective operation. */ void updateGhosts() const; /** * This operation is similar to the standard updateGhosts operation except * that it returns a non-blocking handle after initiating the call. Completion * of the operation can be guaranteed by call call the NbWait function on the * handle. Data in the local buffers is then ready for use. * * This is a collective operation. */ void updateGhostsNb(GANbhdl *nbhandle) const; /** * This function can be used to update the ghost cells along individual * directions. It is designed for algorithms that can overlap updates * with computation. The variable dimension indicates which coordinate * direction is to be updated (e.g. dimension = 1 would correspond to the * y axis in a two or three dimensional system), the variable idir can take * the values +/-1 and indicates whether the side that is to be updated lies * in the positive or negative direction, and cflag indicates whether or not * the corners on the side being updated are to be included in the update. * The following calls would be equivalent to a call to updateGhosts * for a 2-dimensional system: * * status = g_a->updateGhostDir(0,-1,1);\n * status = g_a->updateGhostDir(0,1,1);\n * status = g_a->updateGhostDir(1,-1,0);\n * status = g_a->updateGhostDir(1,1,0);\n * * The variable cflag is set equal to 1 (or non-zero) in the first two * calls so that the corner ghost cells are update, it is set equal to 0 in * the second two calls to avoid redundant updates of the corners. Note * that updating the ghosts cells using several independent calls to the * nga_update_ghost_dir functions is generally not as efficient as using * updateGhosts unless the individual calls can be effectively overlapped * with computation. * * This is a collective operation. * * @param[in] dimension array dimension that is to be updated * @param[in] idir direction of update (+/- 1) * @param[in] cflag flag (0/1) to include corners in update */ int updateGhostDir(int dimension, int idir, int cflag) const; /** * This operation is designed to extract ghost cell data from a global array * and copy it to a local array. If the request can be satisfied using * completely local data, then a local copy will be used. Otherwise, the * method calls periodicGet. The request can be satisfied locally if * lo is greater than or equal to the lower bound of data held on the * processor minus the ghost cell width and hi is less than or equal to the * upper bound of data held on the processor plus the ghost cell width. Cell * indices using the global address space should be used for lo and hi. These * may exceed the global array dimensions. * * @param[in] lo [ndim] array of starting indices for global array section * @param[in] hi [ndim] array of ending indices for global array section * @param[out] buf pointer to the local buffer array where the data goes * @param[in] ld [ndim-1] array specifying leading * dimensions/strides/extents for buffer array */ void getGhostBlock(int lo[], int hi[], void *buf, int ld[]) const; /** * @copydoc GlobalArray::getGhostBlock(int[],int[],void*,int[])const */ void getGhostBlock(int64_t lo[], int64_t hi[], void *buf, int64_t ld[]) const; /** * Computes element-wise dot product of the two arrays which must be of * the same types and same number of elements. * * This is a collective operation. * * @param[in] g_a array handle * * @return value = SUM_ij a(i,j)*b(i,j) */ DoubleComplex zdot(const GlobalArray * g_a) const; /** * Computes the element-wise dot product of the two (possibly transposed) * patches which must be of the same type and have the same number of * elements. * * @param[in] ta transpose flags * @param[in] alo g_a patch coordinates * @param[in] ahi g_a patch coordinates * @param[in] g_a global array * @param[in] tb transpose flags * @param[in] blo g_b patch coordinates * @param[in] bhi g_b patch coordinates * @return value */ DoubleComplex zdotPatch(char ta, int alo[], int ahi[], const GlobalArray * g_a, char tb, int blo[], int bhi[]) const; /** * @copydoc GlobalArray::zdotPatch(char,int[],int[],const GlobalArray*,char,int[],int[])const */ DoubleComplex zdotPatch(char ta, int64_t alo[], int64_t ahi[], const GlobalArray * g_a, char tb, int64_t blo[], int64_t bhi[]) const; /** * Sets value of all elements in the array to zero. * * This is a collective operation. */ void zero() const; /** * Set all the elements in the patch to zero. * This is a collective operation. * * @param[in] lo * @param[in] hi */ void zeroPatch (int lo[], int hi[]) const; /** * @copydoc GlobalArray::zeroPatch(int[],int[])const */ void zeroPatch (int64_t lo[], int64_t hi[]) const; /** * Performs one of the matrix-matrix operations: * C := alpha*op( A )*op( B ) + beta*C, * where op( X ) is one of * op( X ) = X or op( X ) = X', * alpha and beta are scalars, and A, B and C are matrices, with op( A ) * an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. * On entry, transa specifies the form of op( A ) to be used in the * matrix multiplication as follows: * * ta = 'N' or 'n', op( A ) = A. * * ta = 'T' or 't', op( A ) = A'. * * * This is a collective operation. * * @param[in] g_a handles to input arrays * @param[in] g_b handles to input arrays * @param[in] ta transpose operators * @param[in] tb transpose operators * @param[in] m number of rows of op(A) and of matrix C * @param[in] n number of columns of op(B) and of matrix C * @param[in] k number of columns of op(A) and rows of matrix op(B) * @param[in] alpha scale factors * @param[in] beta scale factors */ void zgemm(char ta, char tb, int m, int n, int k, DoubleComplex alpha, const GlobalArray *g_a, const GlobalArray *g_b, DoubleComplex beta) const; /** * @copydoc GlobalArray::zgemm(char,char,int,int,int,DoubleComplex,const GlobalArray*,const GlobalArray*,DoubleComplex)const */ void zgemm(char ta, char tb, int64_t m, int64_t n, int64_t k, DoubleComplex alpha, const GlobalArray *g_a, const GlobalArray *g_b, DoubleComplex beta) const; /* New additional functionalities from Limin. */ /** * Take element-wise absolute value of the array. * * This is a collective operation. */ void absValue() const; /** * Take element-wise absolute value of the patch. * * This is a collective operation. * * @param[in] lo patch coordinates * @param[in] hi patch coordinates */ void absValuePatch(int *lo, int *hi) const; /** * @copydoc GlobalArray::absValuePatch(int*,int*)const */ void absValuePatch(int64_t *lo, int64_t *hi) const; /** * Add the constant pointed by alpha to each element of the array. * * This is a collective operation. * * @param[in] alpha double/complex/int/long/float */ void addConstant(void* alpha) const; /** * Add the constant pointed by alpha to each element of the patch. * * This is a collective operation. * * @param[in] lo g_a patch coordinates * @param[in] hi g_a patch coordinates * @param[in] alpha double/complex/int/long/float */ void addConstantPatch(int *lo, int *hi, void *alpha) const; /** * @copydoc GlobalArray::addConstantPatch(int*,int*,void*)const */ void addConstantPatch(int64_t *lo, int64_t *hi, void *alpha) const; /** * Take element-wise reciprocal of the array. * * This is a collective operation. */ void recip() const; /** * Take element-wise reciprocal of the patch. * * This is a collective operation. * * @param[in] lo patch coordinates * @param[in] hi patch coordinates */ void recipPatch(int *lo, int *hi) const; /** * @copydoc GlobalArray::recipPatch(int*,int*)const */ void recipPatch(int64_t *lo, int64_t *hi) const; /** * Computes the element-wise product of the two arrays * which must be of the same types and same number of * elements. For two-dimensional arrays, * * c(i, j) = a(i,j)*b(i,j) * * The result (c) may replace one of the input arrays (a/b). * This is a collective operation. * * @param[in] g_a GlobalArray * @param[in] g_b GlobalArray */ void elemMultiply(const GlobalArray * g_a, const GlobalArray * g_b) const; /** * Computes the element-wise product of the two patches * which must be of the same types and same number of * elements. For two-dimensional arrays, * * c(i, j) = a(i,j)*b(i,j) * * The result (c) may replace one of the input arrays (a/b). * * This is a collective operation. * * @param[in] g_a global array * @param[in] g_b global array * @param[in] alo g_a patch coordinates * @param[in] ahi g_a patch coordinates * @param[in] blo g_b patch coordinates * @param[in] bhi g_b patch coordinates * @param[in] clo g_c patch coordinates * @param[in] chi g_c patch coordinates */ void elemMultiplyPatch(const GlobalArray * g_a,int *alo,int *ahi, const GlobalArray * g_b,int *blo,int *bhi, int *clo,int *chi) const; /** * @copydoc GlobalArray::elemMultiplyPatch(const GlobalArray*,int*,int*,const GlobalArray*,int*,int*,int*,int*)const */ void elemMultiplyPatch(const GlobalArray * g_a,int64_t *alo,int64_t *ahi, const GlobalArray * g_b,int64_t *blo,int64_t *bhi, int64_t *clo,int64_t *chi) const; /** * Computes the element-wise quotient of the two arrays * which must be of the same types and same number of * elements. For two-dimensional arrays, * * c(i, j) = a(i,j)/b(i,j) * * The result (c) may replace one of the input arrays (a/b). If one of * the elements of array g_b is zero, the quotient for the element of g_c * will be set to GA_NEGATIVE_INFINITY. * * This is a collective operation. * * @param[in] g_a global array * @param[in] g_b global array */ void elemDivide(const GlobalArray * g_a, const GlobalArray * g_b) const; /** * Computes the element-wise quotient of the two patches * which must be of the same types and same number of * elements. For two-dimensional arrays, * * c(i, j) = a(i,j)/b(i,j) * * The result (c) may replace one of the input arrays (a/b). * * This is a collective operation. * * @param[in] g_a global array * @param[in] g_b global array * @param[in] alo g_a patch coordinates * @param[in] ahi g_a patch coordinates * @param[in] blo g_b patch coordinates * @param[in] bhi g_b patch coordinates * @param[in] clo g_c patch coordinates * @param[in] chi g_c patch coordinates */ void elemDividePatch(const GlobalArray * g_a,int *alo,int *ahi, const GlobalArray * g_b,int *blo,int *bhi, int *clo,int *chi) const; /** * @copydoc GlobalArray::elemDividePatch(const GlobalArray*,int*,int*,const GlobalArray*,int*,int*,int*,int*)const */ void elemDividePatch(const GlobalArray * g_a,int64_t *alo,int64_t *ahi, const GlobalArray * g_b,int64_t *blo,int64_t *bhi, int64_t *clo,int64_t *chi) const; /** * Computes the element-wise maximum of the two arrays * which must be of the same types and same number of * elements. For two dimensional arrays, * * c(i, j) = max{a(i,j), b(i,j)} * * The result (c) may replace one of the input arrays (a/b). * * This is a collective operation. * * @param[in] g_a global array * @param[in] g_b global array */ void elemMaximum(const GlobalArray * g_a, const GlobalArray * g_b) const; /** * Computes the element-wise maximum of the two patches * which must be of the same types and same number of * elements. For two-dimensional of noncomplex arrays, * * c(i, j) = max{a(i,j), b(i,j)} * * If the data type is complex, then * c(i, j).real = max{ |a(i,j)|, |b(i,j)|} while c(i,j).image = 0. * * The result (c) may replace one of the input arrays (a/b). * * This is a collective operation. * * @param[in] g_a global array * @param[in] g_b global array * @param[in] alo g_a patch coordinates * @param[in] ahi g_a patch coordinates * @param[in] blo g_b patch coordinates * @param[in] bhi g_b patch coordinates * @param[in] clo g_c patch coordinates * @param[in] chi g_c patch coordinates */ void elemMaximumPatch(const GlobalArray * g_a,int *alo,int *ahi, const GlobalArray * g_b,int *blo,int *bhi, int *clo,int *chi) const; /** * @copydoc GlobalArray::elemMaximumPatch(const GlobalArray*,int*,int*,const GlobalArray*,int*,int*,int*,int*)const */ void elemMaximumPatch(const GlobalArray * g_a,int64_t *alo,int64_t *ahi, const GlobalArray * g_b,int64_t *blo,int64_t *bhi, int64_t *clo,int64_t *chi) const; /** * Computes the element-wise minimum of the two arrays * which must be of the same types and same number of * elements. For two dimensional arrays, * * c(i, j) = min{a(i,j), b(i,j)} * * The result (c) may replace one of the input arrays (a/b). * * This is a collective operation. * * @param[in] g_a global array * @param[in] g_b global array */ void elemMinimum(const GlobalArray * g_a, const GlobalArray * g_b) const; /** * Computes the element-wise minimum of the two patches * which must be of the same types and same number of * elements. For two-dimensional of noncomplex arrays, * * c(i, j) = min{a(i,j), b(i,j)} * * If the data type is complex, then * c(i, j).real = min{ |a(i,j)|, |b(i,j)|} while c(i,j).image = 0. * * The result (c) may replace one of the input arrays (a/b). * * This is a collective operation. * * @param[in] g_a global array * @param[in] g_b global array * @param[in] alo g_a patch coordinates * @param[in] ahi g_a patch coordinates * @param[in] blo g_b patch coordinates * @param[in] bhi g_b patch coordinates * @param[in] clo g_c patch coordinates * @param[in] chi g_c patch coordinates */ void elemMinimumPatch(const GlobalArray * g_a,int *alo,int *ahi, const GlobalArray * g_b,int *blo,int *bhi, int *clo,int *chi) const; /** * @copydoc GlobalArray::elemMinimumPatch(const GlobalArray*,int*,int*,const GlobalArray*,int*,int*,int*,int*)const */ void elemMinimumPatch(const GlobalArray * g_a, int64_t *alo, int64_t *ahi, const GlobalArray * g_b, int64_t *blo, int64_t *bhi, int64_t *clo, int64_t *chi) const; /** * Calculates the largest multiple of a vector g_b that can be added * to this vector g_a while keeping each element of this vector * nonnegative. * * This is a collective operation. * * @param[in] g_b global array where g_b is the step direction. * @param[out] step the maximum step */ void stepMax(const GlobalArray * g_b, double *step) const; /** * @copydoc GlobalArray::stepMax(const GlobalArray*,double*)const * @param[in] alo g_a patch coordinates * @param[in] ahi g_a patch coordinates * @param[in] blo g_b patch coordinates * @param[in] bhi g_b patch coordinates */ void stepMaxPatch(int *alo, int *ahi, const GlobalArray * g_b, int *blo, int *bhi, double *step) const; /** * @copydoc GlobalArray::stepMaxPatch(int*,int*,const GlobalArray*,int*,int*,double*)const */ void stepMaxPatch(int64_t *alo, int64_t *ahi, const GlobalArray * g_b, int64_t *blo, int64_t *bhi, double *step) const; /** Matrix Operations */ /** * Adds this constant to the diagonal elements of the matrix. * * This is a collective operation. * * @param[in] c double/complex/int/long/float constant to add */ void shiftDiagonal(void *c) const; /** * Sets the diagonal elements of this matrix g_a with the elements of the * vector g_v. * * This is a collective operation. * * @param[in] g_v global array */ void setDiagonal(const GlobalArray * g_v) const; /** * Sets the diagonal elements of this matrix g_a with zeros. * * This is a collective operation. */ void zeroDiagonal() const; /** * Adds the elements of the vector g_v to the diagonal of this matrix g_a. * * This is a collective operation. * * @param[in] g_v global array */ void addDiagonal(const GlobalArray * g_v) const; /** * Inserts the diagonal elements of this matrix g_a into the vector g_v. * * This is a collective operation. * * @param[in] g_a global array */ void getDiagonal(const GlobalArray * g_a) const; /** * Scales the rows of this matrix g_a using the vector g_v. * * This is a collective operation. * * @param[in] g_v global array */ void scaleRows(const GlobalArray * g_v) const; /** * Scales the columns of this matrix g_a using the vector g_v. * * This is a collective operation. * * @param[in] g_v global array */ void scaleCols(const GlobalArray * g_v) const; /** * Computes the 1-norm of the matrix or vector g_a. * * This is a collective operation. * * @param[in] nm matrix/vector 1-norm value */ void norm1(double *nm) const; /** * Computes the 1-norm of the matrix or vector g_a. * * This is a collective operation. * * @param[in] nm - matrix/vector 1-norm value */ void normInfinity(double *nm) const; /** * Computes the componentwise Median of three arrays g_a, g_b, and g_c, and * stores the result in this array g_m. The result (m) may replace one of * the input arrays (a/b/c). * * This is a collective operation. * * @param[in] g_a global array * @param[in] g_b global array * @param[in] g_c global array */ void median(const GlobalArray * g_a, const GlobalArray * g_b, const GlobalArray * g_c) const; /** * Computes the componentwise Median of three patches g_a, g_b, and g_c, and * stores the result in this patch g_m. The result (m) may replace one of * the input patches (a/b/c). * * This is a collective operation. * * @param[in] g_a global array * @param[in] g_b global array * @param[in] g_c global array * @param[in] alo g_a patch coordinates * @param[in] ahi g_a patch coordinates * @param[in] blo g_b patch coordinates * @param[in] bhi g_b patch coordinates * @param[in] clo g_c patch coordinates * @param[in] chi g_c patch coordinates * @param[in] mlo g_m patch coordinates * @param[in] mhi g_m patch coordinates */ void medianPatch(const GlobalArray * g_a, int *alo, int *ahi, const GlobalArray * g_b, int *blo, int *bhi, const GlobalArray * g_c, int *clo, int *chi, int *mlo, int *mhi) const; /** * @copydoc GlobalArray::medianPatch(const GlobalArray*,int*,int*,const GlobalArray*,int*,int*,const GlobalArray*,int*,int*,int*,int*)const */ void medianPatch(const GlobalArray * g_a, int64_t *alo, int64_t *ahi, const GlobalArray * g_b, int64_t *blo, int64_t *bhi, const GlobalArray * g_c, int64_t *clo, int64_t *chi, int64_t *mlo, int64_t *mhi) const; GlobalArray& operator=(const GlobalArray &g_a); int operator==(const GlobalArray &g_a) const; int operator!=(const GlobalArray &g_a) const; private: int mHandle; /**<< g_a handle */ }; } #endif /* _GLOBALARRAY_H */ ga-5-3/configure0000750005473000001440000466543512274750307012540 0ustar d3n000users#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Global Arrays (GA) 5.3. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and hpctools@pnl.gov $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Global Arrays (GA)' PACKAGE_TARNAME='ga' PACKAGE_VERSION='5.3' PACKAGE_STRING='Global Arrays (GA) 5.3' PACKAGE_BUGREPORT='hpctools@pnl.gov' PACKAGE_URL='http://www.emsl.pnl.gov/docs/global/' ac_config_libobj_dir=compat ac_unique_file="global/src/ga.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_list= enable_option_checking=no ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS subdirs TCGEXEC MPIEXEC NPROCS ENABLE_GPARRAYS_FALSE ENABLE_GPARRAYS_TRUE MA_ACCESS_INDEX_TYPE_C MA_ACCESS_INDEX_TYPE GA_ACCESS_INDEX_TYPE MA_LONG_DOUBLE ENABLE_ARMCI_MEM_OPTION_FALSE ENABLE_ARMCI_MEM_OPTION_TRUE CXXCPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL ac_ct_AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP LIBTOOL RANLIB AR_FLAGS AR NO_X_FALSE NO_X_TRUE ENABLE_XREGION_FALSE ENABLE_XREGION_TRUE X_LDFLAGS X_CPPFLAGS XMKMF HAVE_PERL_FALSE HAVE_PERL_TRUE HAVE_M4_FALSE HAVE_M4_TRUE M4 HAVE_PYTHON_FALSE HAVE_PYTHON_TRUE pkgpyexecdir pyexecdir pkgpythondir pythondir PYTHON_PLATFORM PYTHON_EXEC_PREFIX PYTHON_PREFIX PYTHON_VERSION PYTHON SED HAVE_SCALAPACK_FALSE HAVE_SCALAPACK_TRUE SCALAPACK_CPPFLAGS SCALAPACK_LDFLAGS SCALAPACK_LIBS HAVE_LAPACK_FALSE HAVE_LAPACK_TRUE LAPACK_CPPFLAGS LAPACK_LDFLAGS LAPACK_LIBS HAVE_BLAS_FALSE HAVE_BLAS_TRUE BLAS_CPPFLAGS BLAS_LDFLAGS BLAS_LIBS am__v_F77LD_0 F77LINK GA_FOPT F2C_DOUBLE_PRECISION_C_TYPE F2C_REAL_C_TYPE F2C_INTEGER_C_TYPE F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS F2C_IARGC F2C_GETARG FLD_NOMAIN FFLAG_INT FLIBS GA_F_WARN ENABLE_F77_FALSE ENABLE_F77_TRUE NOFORT_FALSE NOFORT_TRUE ac_ct_F77 FFLAGS F77 MPIF77 am__fastdepCCAS_FALSE am__fastdepCCAS_TRUE CCASDEPMODE CCASFLAGS CCAS CXX_NAMESPACES_FALSE CXX_NAMESPACES_TRUE GA_CXXOPT GA_CXX_WARN am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX MPICXX GA_COPT PLOTLIB C_POINTER_AS_INTEGER HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE SYSV_FALSE SYSV_TRUE CRAY_XT_NETWORKS_FALSE CRAY_XT_NETWORKS_TRUE ARMCI_SRC_DIR_SRC_FALSE ARMCI_SRC_DIR_SRC_TRUE ARMCI_SRC_DIR_COMEX_FALSE ARMCI_SRC_DIR_COMEX_TRUE ARMCI_SRC_DIR_GEMINI_FALSE ARMCI_SRC_DIR_GEMINI_TRUE ARMCI_SRC_DIR_PORTALS_FALSE ARMCI_SRC_DIR_PORTALS_TRUE ARMCI_SRC_DIR DCMF_VER_0_3_FALSE DCMF_VER_0_3_TRUE DCMF_VER_0_2_FALSE DCMF_VER_0_2_TRUE DCMF_VER_2_FALSE DCMF_VER_2_TRUE ARMCI_NETWORK_CPPFLAGS ARMCI_NETWORK_LIBS ARMCI_NETWORK_LDFLAGS ARMCI_NETWORK_SOCKETS_FALSE ARMCI_NETWORK_SOCKETS_TRUE ARMCI_NETWORK_PORTALS_FALSE ARMCI_NETWORK_PORTALS_TRUE ARMCI_NETWORK_PORTALS4_FALSE ARMCI_NETWORK_PORTALS4_TRUE ARMCI_NETWORK_GEMINI_FALSE ARMCI_NETWORK_GEMINI_TRUE ARMCI_NETWORK_OPENIB_FALSE ARMCI_NETWORK_OPENIB_TRUE ARMCI_NETWORK_OFA_FALSE ARMCI_NETWORK_OFA_TRUE ARMCI_NETWORK_MPI_SPAWN_FALSE ARMCI_NETWORK_MPI_SPAWN_TRUE ARMCI_NETWORK_MPI_MT_FALSE ARMCI_NETWORK_MPI_MT_TRUE ARMCI_NETWORK_MPI_TS_FALSE ARMCI_NETWORK_MPI_TS_TRUE ARMCI_NETWORK_LAPI_FALSE ARMCI_NETWORK_LAPI_TRUE ARMCI_NETWORK_DMAPP_FALSE ARMCI_NETWORK_DMAPP_TRUE ARMCI_NETWORK_DCMF_FALSE ARMCI_NETWORK_DCMF_TRUE ARMCI_NETWORK_CRAY_SHMEM_FALSE ARMCI_NETWORK_CRAY_SHMEM_TRUE ARMCI_NETWORK_BGML_FALSE ARMCI_NETWORK_BGML_TRUE ARMCI_NETWORK_ARMCI_FALSE ARMCI_NETWORK_ARMCI_TRUE HAVE_ARMCI_MSG_FINALIZE_FALSE HAVE_ARMCI_MSG_FINALIZE_TRUE HAVE_ARMCI_MSG_INIT_FALSE HAVE_ARMCI_MSG_INIT_TRUE HAVE_ARMCI_NOTIFY_FALSE HAVE_ARMCI_NOTIFY_TRUE HAVE_ARMCI_STRIDE_INFO_INIT_FALSE HAVE_ARMCI_STRIDE_INFO_INIT_TRUE HAVE_ARMCI_INITIALIZED_FALSE HAVE_ARMCI_INITIALIZED_TRUE HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE HAVE_ARMCI_GROUP_COMM_FALSE HAVE_ARMCI_GROUP_COMM_TRUE PERL GA_C_WARN EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MPICC THREAD_LIBRARY THREAD_SAFE_FALSE THREAD_SAFE_TRUE ENABLE_TRACE_FALSE ENABLE_TRACE_TRUE ENABLE_PROFILING_FALSE ENABLE_PROFILING_TRUE ENABLE_PEIGS_FALSE ENABLE_PEIGS_TRUE ENABLE_CHECKPOINT_FALSE ENABLE_CHECKPOINT_TRUE CXX_BINDINGS_FALSE CXX_BINDINGS_TRUE GA_MP_CPPFLAGS GA_MP_LDFLAGS GA_MP_LIBS MSG_COMMS_TCGMSG5_FALSE MSG_COMMS_TCGMSG5_TRUE MSG_COMMS_TCGMSG4_FALSE MSG_COMMS_TCGMSG4_TRUE MSG_COMMS_MPI_FALSE MSG_COMMS_MPI_TRUE MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM CROSS_COMPILING_FALSE CROSS_COMPILING_TRUE SOLARIS_FALSE SOLARIS_TRUE SGITFP_FALSE SGITFP_TRUE SGI_N32_FALSE SGI_N32_TRUE SGI_FALSE SGI_TRUE NEC_FALSE NEC_TRUE MACX_FALSE MACX_TRUE LINUX_FALSE LINUX_TRUE LAPI_FALSE LAPI_TRUE INTERIX_FALSE INTERIX_TRUE IBM_FALSE IBM_TRUE HPUX_FALSE HPUX_TRUE HITACHI_FALSE HITACHI_TRUE FUJITSU_VPP_FALSE FUJITSU_VPP_TRUE DECOSF_FALSE DECOSF_TRUE CYGWIN_FALSE CYGWIN_TRUE CYGNUS_FALSE CYGNUS_TRUE CRAY_YMP_FALSE CRAY_YMP_TRUE CRAY_XT_FALSE CRAY_XT_TRUE CRAY_T3E_FALSE CRAY_T3E_TRUE CRAY_SV2_FALSE CRAY_SV2_TRUE CRAY_SV1_FALSE CRAY_SV1_TRUE CATAMOUNT_FALSE CATAMOUNT_TRUE BGP_FALSE BGP_TRUE BGL_FALSE BGL_TRUE host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode with_PACKAGE with_mpi enable_f77 enable_cxx enable_mpi_tests enable_warnings enable_checkpoint enable_opt enable_peigs enable_profiling enable_trace enable_thread_safety enable_dependency_tracking enable_autodetect with_armci with_bgml with_cray_shmem with_dcmf with_dmapp with_gemini with_lapi with_mpi_mt with_mpi_spawn with_mpi_ts with_ofa with_openib with_portals4 with_portals with_sockets enable_assert enable_largefile enable_weak enable_underscoring enable_i4 enable_i8 with_blas with_blas4 with_blas8 with_lapack with_scalapack with_scalapack8 enable_xregion with_x enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock enable_gparrays ' ac_precious_vars='build_alias host_alias target_alias THREAD_LIBRARY MPICC CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP GA_COPT MPICXX CXX CXXFLAGS CCC GA_CXXOPT CCAS CCASFLAGS MPIF77 F77 FFLAGS FFLAG_INT F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS GA_FOPT PYTHON XMKMF AR AR_FLAGS RANLIB CXXCPP NPROCS MPIEXEC' ac_subdirs_all='armci comex' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Global Arrays (GA) 5.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/ga] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Global Arrays (GA) 5.3:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-f77 disable Fortran code --enable-cxx build C++ interface --disable-mpi-tests disable MPI linker tests --enable-warnings use compiler-specific warnings --enable-checkpoint enable checkpointing --disable-opt don't use hard-coded optimization flags --enable-peigs enable Parallel Eigensystem Solver interface --enable-profiling enable profiling --enable-trace enable tracing --enable-thread-safety **unsupported** turn on thread safety --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-autodetect attempt to locate ARMCI_NETWORK besides SOCKETS --disable-assert turn off assertions --disable-largefile omit support for large files --disable-weak don't use weak symbols for profiling --enable-underscoring force single underscore for all external Fortran symbols [default: use compiler defaults for external Fortran symbols] --enable-i4 enable 4-byte integers [default: sizeof(void*)] --enable-i8 enable 8-byte integers [default: sizeof(void*)] --enable-xregion build global/X/xregion --enable-shared[=PKGS] build shared libraries [default=no] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-gparrays enable Global Pointer Arrays Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-PACKAGE[=ARG] for most of the external software packages, ARG can be one or more whitespace-separated directories, linker or preprocessor directives; for example, --with-PACKAGE="/path/to/PACKAGE -lmylib -I/mydir" --with-mpi[=ARG] select MPI as the messaging library (default); leave ARG blank to use MPI compiler wrappers --with-armci[=ARG] select armci network as external; path to external ARMCI library --with-bgml[=ARG] select armci network as IBM BG/L --with-cray-shmem[=ARG] select armci network as Cray XT shmem --with-dcmf[=ARG] select armci network as IBM BG/P Deep Computing Message Framework --with-dmapp[=ARG] select armci network as (Comex) Cray DMAPP --with-gemini[=ARG] select armci network as Cray XE Gemini using libonesided --with-lapi[=ARG] select armci network as IBM LAPI --with-mpi-mt[=ARG] select armci network as MPI-2 multi-threading --with-mpi-spawn[=ARG] select armci network as MPI-2 dynamic process mgmt --with-mpi-ts[=ARG] select armci network as (Comex) MPI-1 two-sided --with-ofa[=ARG] select armci network as (Comex) Infiniband OpenIB --with-openib[=ARG] select armci network as Infiniband OpenIB --with-portals4[=ARG] select armci network as (Comex) Portals4 --with-portals[=ARG] select armci network as Cray XT portals --with-sockets[=ARG] select armci network as Ethernet TCP/IP --with-blas[=ARG] use external BLAS library; attempt to detect sizeof(INTEGER) --with-blas4[=ARG] use external BLAS library compiled with sizeof(INTEGER)==4 --with-blas8[=ARG] use external BLAS library compiled with sizeof(INTEGER)==8 --with-lapack=[ARG] use external LAPACK library --with-scalapack=[ARG] use ScaLAPACK library compiled with sizeof(INTEGER)==4 --with-scalapack8=[ARG] use ScaLAPACK library compiled with sizeof(INTEGER)==8 --with-x use the X Window System --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). Some influential environment variables: THREAD_LIBRARY See --enable-thread-safety MPICC MPI C compiler CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor GA_COPT GA C optimization flags MPICXX MPI C++ compiler CXX C++ compiler command CXXFLAGS C++ compiler flags GA_CXXOPT GA C++ optimization flags CCAS assembler compiler command (defaults to CC) CCASFLAGS assembler compiler flags (defaults to CFLAGS) MPIF77 MPI Fortran 77 compiler F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags FFLAG_INT Fortran 77 compiler flag to set desired integer size F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS if cross compiling, set to either "yes" (default) or "no" (after string) GA_FOPT GA Fortran 77 optimization flags PYTHON the Python interpreter XMKMF Path to xmkmf, Makefile generator for X Window System AR archiver used by libtool (default: ar) AR_FLAGS archiver flags used by libtool (default: cru) RANLIB generates index to archive (default: ranlib) CXXCPP C++ preprocessor NPROCS number of procs to use for parallel tests (default 4) MPIEXEC how to run parallel tests if built with MPI e.g. "mpiexec -np %NP%" Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . Global Arrays (GA) home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Global Arrays (GA) configure 5.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------- ## ## Report this to hpctools@pnl.gov ## ## ------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 $as_echo_n "checking for $2.$3... " >&6; } if eval \${$4+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else eval "$4=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$4 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_find_intX_t LINENO BITS VAR # ----------------------------------- # Finds a signed integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 $as_echo_n "checking for int$2_t... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in int$2_t 'int' 'long int' \ 'long long int' 'short int' 'signed char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main () { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main () { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if eval test \"x\$"$3"\" = x"no"; then : else break fi done fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_intX_t # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_f77_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_f77_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_f77_try_compile # ac_fn_f77_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_f77_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_f77_try_link # ac_fn_f77_try_run LINENO # ------------------------ # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_f77_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_f77_try_run # ac_fn_f77_check_func LINENO FUNC VAR # ------------------------------------ # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_f77_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main call $2 end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_f77_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Global Arrays (GA) $as_me 5.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_header_list " stdlib.h" as_fn_append ac_header_list " unistd.h" as_fn_append ac_header_list " sys/param.h" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in build-aux "$srcdir"/build-aux; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers config.h" ############################################################################### # Must occur before automake init ############################################################################### # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # AH_TEMPLATE for all known TARGETs { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TARGET base (64bit-ness checked later)" >&5 $as_echo_n "checking for TARGET base (64bit-ness checked later)... " >&6; } if ${ga_cv_target_base+:} false; then : $as_echo_n "(cached) " >&6 else ga_cv_target_base=UNKNOWN if test "x$ga_cv_target_base" = xUNKNOWN; then : if test -f /bgsys/drivers/ppcfloor/arch/include/common/bgp_personality.h; then : ga_cv_target_base=BGP fi fi if test "x$ga_cv_target_base" = xUNKNOWN; then : if test -d /bgl/BlueLight/ppcfloor/bglsys/include; then : ga_cv_target_base=BGL fi fi if test "x$ga_cv_target_base" = xUNKNOWN; then : case $host in #( *bgl*) : ga_cv_target_base=BGL ;; #( *bgp*) : ga_cv_target_base=BGP ;; #( #[TODO], [ga_cv_target_base=CATAMOUNT], #[TODO], [ga_cv_target_base=CRAY_XT], *cygwin*) : ga_cv_target_base=CYGWIN ;; #( *fujitsu*) : ga_cv_target_base=FUJITSU_VPP ;; #( *hpux*) : ga_cv_target_base=HPUX ;; #( *ibm*) : ga_cv_target_base=IBM ;; #( #[TODO], [ga_cv_target_base=LAPI], *linux*) : ga_cv_target_base=LINUX ;; #( *darwin*) : ga_cv_target_base=MACX ;; #( *apple*) : ga_cv_target_base=MACX ;; #( *superux*) : ga_cv_target_base=NEC ;; #( *solaris*) : ga_cv_target_base=SOLARIS ;; #( *) : ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_target_base" >&5 $as_echo "$ga_cv_target_base" >&6; } cat >>confdefs.h <<_ACEOF #define $ga_cv_target_base 1 _ACEOF # A horrible hack that should go away somehow... { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we think this system is what we call SYSV" >&5 $as_echo_n "checking whether we think this system is what we call SYSV... " >&6; } if ${ga_cv_sysv+:} false; then : $as_echo_n "(cached) " >&6 else case $ga_cv_target_base in #( SUN|SOLARIS|SGI|SGI_N32|SGITFP|HPUX|IBM|DECOSF|LINUX|INTERIX|NEC|LAPI) : ga_cv_sysv=yes ;; #( *) : ga_cv_sysv=no ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_sysv" >&5 $as_echo "$ga_cv_sysv" >&6; } if test x$ga_cv_sysv = xyes; then : $as_echo "#define SYSV 1" >>confdefs.h fi # Hopefully these will never be used and we can remove them soon. if test "$ga_cv_target_base" = BGL; then BGL_TRUE= BGL_FALSE='#' else BGL_TRUE='#' BGL_FALSE= fi if test "$ga_cv_target_base" = BGP; then BGP_TRUE= BGP_FALSE='#' else BGP_TRUE='#' BGP_FALSE= fi if test "$ga_cv_target_base" = CATAMOUNT; then CATAMOUNT_TRUE= CATAMOUNT_FALSE='#' else CATAMOUNT_TRUE='#' CATAMOUNT_FALSE= fi if test "$ga_cv_target_base" = CRAY_SV1; then CRAY_SV1_TRUE= CRAY_SV1_FALSE='#' else CRAY_SV1_TRUE='#' CRAY_SV1_FALSE= fi if test "$ga_cv_target_base" = CRAY_SV2; then CRAY_SV2_TRUE= CRAY_SV2_FALSE='#' else CRAY_SV2_TRUE='#' CRAY_SV2_FALSE= fi if test "$ga_cv_target_base" = CRAY_T3E; then CRAY_T3E_TRUE= CRAY_T3E_FALSE='#' else CRAY_T3E_TRUE='#' CRAY_T3E_FALSE= fi if test "$ga_cv_target_base" = CRAY_XT; then CRAY_XT_TRUE= CRAY_XT_FALSE='#' else CRAY_XT_TRUE='#' CRAY_XT_FALSE= fi if test "$ga_cv_target_base" = CRAY_YMP; then CRAY_YMP_TRUE= CRAY_YMP_FALSE='#' else CRAY_YMP_TRUE='#' CRAY_YMP_FALSE= fi if test "$ga_cv_target_base" = CYGNUS; then CYGNUS_TRUE= CYGNUS_FALSE='#' else CYGNUS_TRUE='#' CYGNUS_FALSE= fi if test "$ga_cv_target_base" = CYGWIN; then CYGWIN_TRUE= CYGWIN_FALSE='#' else CYGWIN_TRUE='#' CYGWIN_FALSE= fi if test "$ga_cv_target_base" = DECOSF; then DECOSF_TRUE= DECOSF_FALSE='#' else DECOSF_TRUE='#' DECOSF_FALSE= fi if test "$ga_cv_target_base" = FUJITSU_VPP; then FUJITSU_VPP_TRUE= FUJITSU_VPP_FALSE='#' else FUJITSU_VPP_TRUE='#' FUJITSU_VPP_FALSE= fi if test "$ga_cv_target_base" = HITACHI; then HITACHI_TRUE= HITACHI_FALSE='#' else HITACHI_TRUE='#' HITACHI_FALSE= fi if test "$ga_cv_target_base" = HPUX; then HPUX_TRUE= HPUX_FALSE='#' else HPUX_TRUE='#' HPUX_FALSE= fi if test "$ga_cv_target_base" = IBM; then IBM_TRUE= IBM_FALSE='#' else IBM_TRUE='#' IBM_FALSE= fi if test "$ga_cv_target_base" = INTERIX; then INTERIX_TRUE= INTERIX_FALSE='#' else INTERIX_TRUE='#' INTERIX_FALSE= fi if test "$ga_cv_target_base" = LAPI; then LAPI_TRUE= LAPI_FALSE='#' else LAPI_TRUE='#' LAPI_FALSE= fi if test "$ga_cv_target_base" = LINUX; then LINUX_TRUE= LINUX_FALSE='#' else LINUX_TRUE='#' LINUX_FALSE= fi if test "$ga_cv_target_base" = MACX; then MACX_TRUE= MACX_FALSE='#' else MACX_TRUE='#' MACX_FALSE= fi if test "$ga_cv_target_base" = NEC; then NEC_TRUE= NEC_FALSE='#' else NEC_TRUE='#' NEC_FALSE= fi if test "$ga_cv_target_base" = SGI; then SGI_TRUE= SGI_FALSE='#' else SGI_TRUE='#' SGI_FALSE= fi if test "$ga_cv_target_base" = SGI_N32; then SGI_N32_TRUE= SGI_N32_FALSE='#' else SGI_N32_TRUE='#' SGI_N32_FALSE= fi if test "$ga_cv_target_base" = SGITFP; then SGITFP_TRUE= SGITFP_FALSE='#' else SGITFP_TRUE='#' SGITFP_FALSE= fi if test "$ga_cv_target_base" = SOLARIS; then SOLARIS_TRUE= SOLARIS_FALSE='#' else SOLARIS_TRUE='#' SOLARIS_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if ${ga_cv_cross_compiling+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$ga_cv_target_base" = xBGP; then : cross_compiling=yes fi ga_cv_cross_compiling=$cross_compiling fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_cross_compiling" >&5 $as_echo "$ga_cv_cross_compiling" >&6; } if test "x$cross_compiling" = xyes; then CROSS_COMPILING_TRUE= CROSS_COMPILING_FALSE='#' else CROSS_COMPILING_TRUE='#' CROSS_COMPILING_FALSE= fi ############################################################################### # Init automake ############################################################################### am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='ga' VERSION='5.3' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Don't emit "rebuild rules" for configure, Makefile.ins, etc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE ############################################################################### # Misc. information and package setup. ############################################################################### # Check whether --with-PACKAGE was given. if test "${with_PACKAGE+set}" = set; then : withval=$with_PACKAGE; fi GA_TOP_BUILDDIR="`pwd`" cd "$srcdir" GA_TOP_SRCDIR="`pwd`" cd "$GA_TOP_BUILDDIR" if test "$GA_TOP_BUILDDIR" != "$GA_TOP_SRCDIR"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: Detected VPATH build" >&5 $as_echo "$as_me: Detected VPATH build" >&6;} fi # Determine messaging library up front because if MPI is desired we use the # MPI compiler wrappers instead of the standard compilers. # GA_MP_* vars might exist in environment, but they are really internal. # Reset them. GA_MP_LIBS= GA_MP_LDFLAGS= GA_MP_CPPFLAGS= # Check whether --with-mpi was given. if test "${with_mpi+set}" = set; then : withval=$with_mpi; else with_mpi=yes fi with_mpi_need_parse=no case $with_mpi in #( yes) : with_mpi_wrappers=yes; ga_msg_comms=MPI ;; #( no) : case $ga_cv_target_base in #( MACX|LAPI|CYGNUS|CYGWIN|INTERIX) : ga_msg_comms=TCGMSG5 ;; #( *) : ga_msg_comms=TCGMSG ;; esac ;; #( *) : with_mpi_need_parse=yes; ga_msg_comms=MPI ;; #( *) : ;; esac if test "x$ga_msg_comms" = xMPI; then MSG_COMMS_MPI_TRUE= MSG_COMMS_MPI_FALSE='#' else MSG_COMMS_MPI_TRUE='#' MSG_COMMS_MPI_FALSE= fi if test "x$ga_msg_comms" = xTCGMSG; then MSG_COMMS_TCGMSG4_TRUE= MSG_COMMS_TCGMSG4_FALSE='#' else MSG_COMMS_TCGMSG4_TRUE='#' MSG_COMMS_TCGMSG4_FALSE= fi if test "x$ga_msg_comms" = xTCGMSG5; then MSG_COMMS_TCGMSG5_TRUE= MSG_COMMS_TCGMSG5_FALSE='#' else MSG_COMMS_TCGMSG5_TRUE='#' MSG_COMMS_TCGMSG5_FALSE= fi case $ga_msg_comms in #( MPI) : $as_echo "#define MSG_COMMS_MPI 1" >>confdefs.h ;; #( TCGMSG) : $as_echo "#define MSG_COMMS_TCGMSG4 1" >>confdefs.h $as_echo "#define MSG_COMMS_TCGMSG 1" >>confdefs.h $as_echo "#define TCGMSG 1" >>confdefs.h ;; #( TCGMSG5) : $as_echo "#define MSG_COMMS_TCGMSG5 1" >>confdefs.h $as_echo "#define MSG_COMMS_TCGMSG 1" >>confdefs.h $as_echo "#define TCGMSG 1" >>confdefs.h ;; #( *) : ;; esac # Whether to disable/enable Fortran 77 or C++ bindings. # Note that compiling the Fortran 77 source is enabled by default. # Check whether --enable-f77 was given. if test "${enable_f77+set}" = set; then : enableval=$enable_f77; else enable_f77=yes fi # Check whether --enable-cxx was given. if test "${enable_cxx+set}" = set; then : enableval=$enable_cxx; enable_cxx=yes else enable_cxx=no fi if test x$enable_cxx = xyes; then CXX_BINDINGS_TRUE= CXX_BINDINGS_FALSE='#' else CXX_BINDINGS_TRUE='#' CXX_BINDINGS_FALSE= fi # Check whether --enable-mpi-tests was given. if test "${enable_mpi_tests+set}" = set; then : enableval=$enable_mpi_tests; else enable_mpi_tests=yes fi # Check whether --enable-warnings was given. if test "${enable_warnings+set}" = set; then : enableval=$enable_warnings; enable_warnings=yes else enable_warnings=no fi # Check whether --enable-checkpoint was given. if test "${enable_checkpoint+set}" = set; then : enableval=$enable_checkpoint; enable_checkpoint=yes $as_echo "#define ENABLE_CHECKPOINT 1" >>confdefs.h else enable_checkpoint=no fi if test x$enable_checkpoint = xyes; then ENABLE_CHECKPOINT_TRUE= ENABLE_CHECKPOINT_FALSE='#' else ENABLE_CHECKPOINT_TRUE='#' ENABLE_CHECKPOINT_FALSE= fi # Check whether --enable-opt was given. if test "${enable_opt+set}" = set; then : enableval=$enable_opt; enable_opt=no else enable_opt=yes fi # Check whether --enable-peigs was given. if test "${enable_peigs+set}" = set; then : enableval=$enable_peigs; else enable_peigs=no fi if test "x$enable_peigs" = xno; then : $as_echo "#define ENABLE_PEIGS 0" >>confdefs.h else $as_echo "#define ENABLE_PEIGS 1" >>confdefs.h fi if test x$enable_peigs = xyes; then ENABLE_PEIGS_TRUE= ENABLE_PEIGS_FALSE='#' else ENABLE_PEIGS_TRUE='#' ENABLE_PEIGS_FALSE= fi # Check whether --enable-profiling was given. if test "${enable_profiling+set}" = set; then : enableval=$enable_profiling; else enable_profiling=no fi if test x$enable_profiling = xyes; then ENABLE_PROFILING_TRUE= ENABLE_PROFILING_FALSE='#' else ENABLE_PROFILING_TRUE='#' ENABLE_PROFILING_FALSE= fi if test "x$enable_profiling" = xyes; then : $as_echo "#define ENABLE_PROFILING 1" >>confdefs.h else $as_echo "#define ENABLE_PROFILING 0" >>confdefs.h fi # Check whether --enable-trace was given. if test "${enable_trace+set}" = set; then : enableval=$enable_trace; enable_trace=yes $as_echo "#define ENABLE_TRACE 1" >>confdefs.h else enable_trace=no fi if test x$enable_trace = xyes; then ENABLE_TRACE_TRUE= ENABLE_TRACE_FALSE='#' else ENABLE_TRACE_TRUE='#' ENABLE_TRACE_FALSE= fi # Check whether --enable-thread-safety was given. if test "${enable_thread_safety+set}" = set; then : enableval=$enable_thread_safety; thread_safety=yes $as_echo "#define THREAD_SAFE 1" >>confdefs.h else thread_safety=no fi if test x$thread_safety = xyes; then THREAD_SAFE_TRUE= THREAD_SAFE_FALSE='#' else THREAD_SAFE_TRUE='#' THREAD_SAFE_FALSE= fi # Unless we rename all preprocessor symbols of MPI and MPIPP # in the source code, this hack is necessary. ######################################### # C compiler ######################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: C compiler" >&5 $as_echo "$as_me: C compiler" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} ga_save_CFLAGS="$CFLAGS" DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi case $ga_cv_target_base in #( BGP) : ga_mpicc_pref=mpixlc_r; ga_cc_pref=bgxlc_r ;; #( *) : ;; esac # In the case of using MPI wrappers, set CC=MPICC since CC will override # absolutely everything in our list of compilers. # Save CC, just in case. if test x$with_mpi_wrappers = xyes; then : if test "x$CC" != "x$MPICC"; then : ga_orig_CC="$CC" fi case x$CC:x$MPICC in #( x:x) : ;; #( x:x*) : CC="$MPICC" ;; #( x*:x) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired but CC is set while MPICC is unset." >&5 $as_echo "$as_me: WARNING: MPI compilers desired but CC is set while MPICC is unset." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CC will be ignored during compiler selection, but will be" >&5 $as_echo "$as_me: WARNING: CC will be ignored during compiler selection, but will be" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&5 $as_echo "$as_me: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: meant to set MPICC instead of or in addition to CC?" >&5 $as_echo "$as_me: WARNING: meant to set MPICC instead of or in addition to CC?" >&2;} CC= ;; #( x*:x*) : if test "x$CC" != "x$MPICC"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired, MPICC and CC are set, and MPICC!=CC." >&5 $as_echo "$as_me: WARNING: MPI compilers desired, MPICC and CC are set, and MPICC!=CC." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Choosing MPICC over CC." >&5 $as_echo "$as_me: WARNING: Choosing MPICC over CC." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CC will be tested first during MPI compiler unwrapping." >&5 $as_echo "$as_me: WARNING: CC will be tested first during MPI compiler unwrapping." >&2;} fi CC="$MPICC" ;; #( *) : as_fn_error $? "CC/MPICC case failure" "$LINENO" 5 ;; esac fi ga_cc="bgxlc_r bgxlc xlc_r xlc pgcc pathcc icc sxcc fcc opencc suncc craycc gcc cc ecc cl ccc" ga_mpicc="mpicc mpixlc_r mpixlc hcc mpxlc_r mpxlc sxmpicc mpifcc mpgcc mpcc cmpicc cc" if test x$with_mpi_wrappers = xyes; then : CC_TO_TEST="$ga_mpicc_pref $ga_mpicc" else CC_TO_TEST="$ga_cc_pref $ga_cc" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CC_TO_TEST do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in $CC_TO_TEST do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi CFLAGS="$ga_save_CFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5 $as_echo_n "checking for C compiler vendor... " >&6; } if ${ga_cv_c_compiler_vendor+:} false; then : $as_echo_n "(cached) " >&6 else ga_save_ac_ext="$ac_ext" ga_cv_c_compiler_vendor=unknown ga_cpp_vendor_symbols= for vendor in intel ibm pathscale amd cray gnu sun hp dec borland comeau kai lcc metrowerks sgi microsoft watcom portland fujitsu do case $vendor in #( amd) : ga_cpp_vendor_symbols="defined(__OPEN64__)" ;; #( borland) : ga_cpp_vendor_symbols="defined(__BORLANDC__) || defined(__TURBOC__)" ;; #( comeau) : ga_cpp_vendor_symbols="defined(__COMO__)" ;; #( cray) : ga_cpp_vendor_symbols="defined(_CRAYC) || defined(_ADDR64)" ;; #( dec) : ga_cpp_vendor_symbols="defined(__DECC) || defined(__DECCXX) || defined(__DECC_VER) || defined(__DECCXX_VER)" ;; #( fujitsu) : ga_cpp_vendor_symbols="defined(__fcc__) || defined(__fcc_version__) || defined(_FCC_VER) || defined(__FCC_VER_)" ;; #( gnu) : ga_cpp_vendor_symbols="defined(__GNUC__)" ;; #( hp) : ga_cpp_vendor_symbols="defined(__HP_cc) || defined(__HP_aCC)" ;; #( ibm) : ga_cpp_vendor_symbols="defined(__xlc__) || defined(__xlC__) || defined(__IBMC__) || defined(__IBMCPP__)" ;; #( intel) : ga_cpp_vendor_symbols="defined(__ICC) || defined(__ECC) || defined(__INTEL_COMPILER)" ;; #( kai) : ga_cpp_vendor_symbols="defined(__KCC)" ;; #( lcc) : ga_cpp_vendor_symbols="defined(__LCC__)" ;; #( metrowerks) : ga_cpp_vendor_symbols="defined(__MWERKS__)" ;; #( microsoft) : ga_cpp_vendor_symbols="defined(_MSC_VER)" ;; #( pathscale) : ga_cpp_vendor_symbols="defined(__PATHCC__) || defined(__PATHSCALE__)" ;; #( portland) : ga_cpp_vendor_symbols="defined(__PGI)" ;; #( sgi) : ga_cpp_vendor_symbols="defined(__sgi) || defined(sgi)" ;; #( sun) : ga_cpp_vendor_symbols="defined(__SUNPRO_C) || defined(__SUNPRO_CC)" ;; #( watcom) : ga_cpp_vendor_symbols="defined(__WATCOMC__)" ;; #( *) : ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if !($ga_cpp_vendor_symbols) chokeonthis #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ga_cv_c_compiler_vendor=$vendor; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done ga_cpp_vendor_symbols= ac_ext="$ga_save_ac_ext" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_compiler_vendor" >&5 $as_echo "$ga_cv_c_compiler_vendor" >&6; } if test "x$enable_warnings" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C warning flags" >&5 $as_echo_n "checking for C warning flags... " >&6; } if ${ga_cv_c_warning_flags+:} false; then : $as_echo_n "(cached) " >&6 else case $ga_cv_c_compiler_vendor in #( amd) : ga_cv_c_warning_flags="-Wall -W -Wdeclaration-after-statement" ;; #( borland) : ga_cv_c_warning_flags= ;; #( comeau) : ga_cv_c_warning_flags= ;; #( cray) : ga_cv_c_warning_flags= ;; #( dec) : ga_cv_c_warning_flags= ;; #( fujitsu) : ga_cv_c_warning_flags="-Xc -pvctl,fullmsg" ;; #( gnu) : ga_cv_c_warning_flags="-Wall -Wextra -Wdeclaration-after-statement -Wno-unused-parameter -pedantic -Wno-long-long -Wnested-externs -ansi" ;; #( hp) : ga_cv_c_warning_flags= ;; #( ibm) : ga_cv_c_warning_flags= ;; #( intel) : ga_cv_c_warning_flags="-Wall" ;; #( kai) : ga_cv_c_warning_flags= ;; #( lcc) : ga_cv_c_warning_flags= ;; #( metrowerks) : ga_cv_c_warning_flags= ;; #( microsoft) : ga_cv_c_warning_flags= ;; #( pathscale) : ga_cv_c_warning_flags="-Wall -fullwarn -Wno-unused-parameter -pedantic -Wno-long-long -Wnested-externs" ;; #( portland) : ga_cv_c_warning_flags="-Xc" ;; #( sgi) : ga_cv_c_warning_flags= ;; #( sun) : ga_cv_c_warning_flags= ;; #( watcom) : ga_cv_c_warning_flags= ;; #( *) : ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: ga_cv_c_warning_flags: $ga_cv_c_warning_flags" >&5 $as_echo "$ga_cv_c_warning_flags" >&6; } GA_C_WARN=$ga_cv_c_warning_flags fi ga_save_CFLAGS="$CFLAGS" CFLAGS="$ga_cv_c_warning_flags $CFLAGS" if test x$with_mpi_wrappers = xyes; then : # Find perl. # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Create inside.pl. rm -f inside.pl cat >inside.pl <<"EOF" #!/usr/bin/perl use strict; use warnings; my $numargs = $#ARGV + 1; if ($numargs != 2) { print "Usage: wrapped.txt naked.txt\n"; exit 1; } # Read each input file as a string (rather than a list). local $/=undef; open WRAPPED, "$ARGV[0]" or die "Could not open wrapped text file: $!"; my $wrapped_lines = ; close WRAPPED; open NAKED, "$ARGV[1]" or die "Could not open naked text file: $!"; my $naked_lines = ; close NAKED; # Replace newlines, + from wrapped and naked lines. $wrapped_lines =~ tr/\n+/ /; $naked_lines =~ tr/\n+/ /; # Remove whitespace from beginning of wrapped and naked lines. $wrapped_lines =~ s/^\s+//; $naked_lines =~ s/^\s+//; # Remove whitespace from end of wrapped and naked lines. $wrapped_lines =~ s/\s+$//; $naked_lines =~ s/\s+$//; # If either wrapped_lines or naked_lines are empty, this is an error. # It is assumed that the particular version string which created the input # files should generate SOMETHING. unless ($wrapped_lines) { exit 1; } unless ($naked_lines) { exit 1; } # Cray compilers append a timestamp into their version string. Remove it. if ($wrapped_lines =~ /\QCray\E/) { $wrapped_lines = substr $wrapped_lines, 0, -28; $naked_lines = substr $naked_lines, 0, -28; } # Can the naked lines be found within the wrapped lines? if ($wrapped_lines =~ /\Q$naked_lines\E/) { #print "Found as substring\n"; exit 0; } # Are the naked lines exactly the same as the wrapped lines? elsif ($wrapped_lines eq $naked_lines) { #print "Found equal\n"; exit 0; } else { #print "Not found\n"; exit 1; } EOF inside="$PERL inside.pl" wrapped="$CC" case $wrapped in #( *_r) : compilers="bgxlc_r xlc_r" ;; #( *) : compilers="bgxlc xlc pgcc pathcc icc sxcc fcc opencc suncc craycc gcc ecc cl ccc cc" ;; #( *) : ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for base $wrapped compiler" >&5 $as_echo_n "checking for base $wrapped compiler... " >&6; } if ${ga_cv_mpic_naked+:} false; then : $as_echo_n "(cached) " >&6 else base="`$wrapped -show 2>/dev/null | sed 's/[ ].*$//' | head -1`" ga_save_CC="$CC" CC="$base" # if -m32 or -m64 is present in the -show params, or separately, add it unwrapped_args="`$wrapped -show 2>/dev/null`" extra_arg="" for arg in $unwrapped_args $wrapped do case $arg in #( *-m32*) : extra_arg="-m32" ;; #( *-m64*) : extra_arg="-m64" ;; #( *) : ;; esac done if test "x$extra_arg" != x; then : base="$base $extra_arg" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_cv_mpic_naked="$base" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CC="$ga_save_CC" versions="--version -v -V -qversion" found_wrapped_version=0 # Try separating stdout and stderr. Only compare stdout. if test "x$ga_cv_mpic_naked" = x; then : # prepend any CC/CXX/F77 the user may have specified compilers="$ga_orig_CC $compilers" echo "only comparing stdout" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err naked.txt naked.err if $wrapped $version 1>mpi.txt 2>mpi.err; then : found_wrapped_version=1 for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpic_naked" != x; then : break fi done fi # Perhaps none of the MPI compilers had a zero exit status (this is bad). # In this case we have to do a brute force match regardless of exit status. if test "x$found_wrapped_version" = x0; then : if test "x$ga_cv_mpic_naked" = x; then : echo "no zero exit status found for MPI compilers" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpic_naked" != x; then : break fi done fi fi # Try by combining stdout/err into one file. if test "x$ga_cv_mpic_naked" = x; then : echo "try combining stdout and stderr into one file" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt naked.txt if $wrapped $version 1>mpi.txt 2>&1; then : for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>&1; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpic_naked" != x; then : break fi done fi # If we got this far, then it's likely that the MPI compiler had a zero exit # status when it shouldn't have for one version flag, but later had a non-zero # exit status for a flag it shouldn't have. One false positive hid a false # negative. In this case, brute force compare all MPI compiler output against # all compiler output. if test "x$ga_cv_mpic_naked" = x; then : echo "we have a very badly behaving MPI compiler" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpic_naked" != x; then : break fi done fi rm -f mpi.txt mpi.err naked.txt naked.err fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_mpic_naked" >&5 $as_echo "$ga_cv_mpic_naked" >&6; } if test "x$ga_cv_mpic_naked" = x; then : as_fn_error $? "Could not determine the C compiler wrapped by MPI" "$LINENO" 5 else if test "x$ga_orig_CC" != x && test "x$ga_orig_CC" != "x$ga_cv_mpic_naked"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unwrapped $wrapped ($ga_cv_mpic_naked) does not match user-specified $ga_orig_CC" >&5 $as_echo "$as_me: WARNING: unwrapped $wrapped ($ga_cv_mpic_naked) does not match user-specified $ga_orig_CC" >&2;} fi fi rm -f inside.pl else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_mpi ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : GA_MP_LIBS="$GA_MP_LIBS $arg" ;; #( -L*) : GA_MP_LDFLAGS="$GA_MP_LDFLAGS $arg" ;; #( -WL*) : GA_MP_LDFLAGS="$GA_MP_LDFLAGS $arg" ;; #( -Wl*) : GA_MP_LDFLAGS="$GA_MP_LDFLAGS $arg" ;; #( -I*) : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS $arg" ;; #( *.a) : GA_MP_LIBS="$GA_MP_LIBS $arg" ;; #( *.so) : GA_MP_LIBS="$GA_MP_LIBS $arg" ;; #( *lib) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( -mkl*) : GA_MP_LIBS="$GA_MP_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi done fi # If F77 is enabled, only perform a simple compilation test. if test "x$with_mpi" != xno; then : case $enable_f77:$enable_mpi_tests in #( yes:*) : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a simple C MPI program compiles" >&5 $as_echo_n "checking whether a simple C MPI program compiles... " >&6; } if ${ga_cv_c_mpi_test_compile+:} false; then : $as_echo_n "(cached) " >&6 else ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" if ac_fn_c_try_compile "$LINENO"; then : ga_cv_c_mpi_test_compile=yes else ga_cv_c_mpi_test_compile=no fi rm -f core conftest.err conftest.$ac_objext CPPFLAGS="$ga_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_compile" >&5 $as_echo "$ga_cv_c_mpi_test_compile" >&6; } rm -f conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "x$ga_cv_c_mpi_test_compile" = xno; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "could not compile simple C MPI program See \`config.log' for more details" "$LINENO" 5; } fi ;; #( no:yes) : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ga_cv_c_mpi_test_link=no if test "x$ga_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a C MPI program links natively" >&5 $as_echo_n "checking whether a C MPI program links natively... " >&6; } if ac_fn_c_try_link "$LINENO"; then : ga_cv_c_mpi_test_link=yes GA_MP_LIBS= GA_MP_LDFLAGS= GA_MP_CPPFLAGS= else ga_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_link" >&5 $as_echo "$ga_cv_c_mpi_test_link" >&6; } fi # That didn't work, so now let's try adding our GA_MP_* flags. # The CPPFLAGS and LDFLAGS are added up top here, but LIBS will change. ga_save_LIBS="$LIBS" ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" if test "x$ga_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a C MPI program links with additional env" >&5 $as_echo_n "checking whether a C MPI program links with additional env... " >&6; } LIBS="$LIBS $GA_MP_LIBS" if ac_fn_c_try_link "$LINENO"; then : ga_cv_c_mpi_test_link=yes else ga_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_link" >&5 $as_echo "$ga_cv_c_mpi_test_link" >&6; } fi # That didn't work, so now let's try with specific libs. if test "x$ga_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mvapich libraries" >&5 $as_echo_n "checking for mvapich libraries... " >&6; } for lib in "-lmpich -lpthread" "-lmpich" do LIBS="$LIBS $lib" if ac_fn_c_try_link "$LINENO"; then : ga_cv_c_mpi_test_link="$lib"; break else ga_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_link" >&5 $as_echo "$ga_cv_c_mpi_test_link" >&6; } fi if test "x$ga_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mpich libraries" >&5 $as_echo_n "checking for mpich libraries... " >&6; } for lib in "-lmpich -lpthread" "-lmpich" do LIBS="$LIBS $lib" if ac_fn_c_try_link "$LINENO"; then : ga_cv_c_mpi_test_link="$lib"; break else ga_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_link" >&5 $as_echo "$ga_cv_c_mpi_test_link" >&6; } fi if test "x$ga_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hpmpi libraries" >&5 $as_echo_n "checking for hpmpi libraries... " >&6; } for lib in "-lhpmpio -lhpmpi" "-lhpmpi" do LIBS="$LIBS $lib" if ac_fn_c_try_link "$LINENO"; then : ga_cv_c_mpi_test_link="$lib"; break else ga_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_link" >&5 $as_echo "$ga_cv_c_mpi_test_link" >&6; } fi if test "x$ga_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intelmpi libraries" >&5 $as_echo_n "checking for intelmpi libraries... " >&6; } for lib in "-lmpi -lmpiif -lmpigi -lrt -lpthread" "-lmpi -lmpiif -lmpigi" do LIBS="$LIBS $lib" if ac_fn_c_try_link "$LINENO"; then : ga_cv_c_mpi_test_link="$lib"; break else ga_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_link" >&5 $as_echo "$ga_cv_c_mpi_test_link" >&6; } fi if test "x$ga_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openmpi libraries" >&5 $as_echo_n "checking for openmpi libraries... " >&6; } for lib in "-lmpi -lpthread" "-lmpi" do LIBS="$LIBS $lib" if ac_fn_c_try_link "$LINENO"; then : ga_cv_c_mpi_test_link="$lib"; break else ga_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_link" >&5 $as_echo "$ga_cv_c_mpi_test_link" >&6; } fi rm -f conftest.$ac_ext LIBS="$ga_save_LIBS" LDFLAGS="$ga_save_LDFLAGS" CPPFLAGS="$ga_save_CPPFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu case $ga_cv_c_mpi_test_link in #( yes) : ;; #( no) : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "could not link a C MPI program See \`config.log' for more details" "$LINENO" 5; } ;; #( *) : GA_MP_LIBS="$ga_cv_c_mpi_test_link" ;; #( *) : ;; esac ;; #( no:no) : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a simple C MPI program compiles" >&5 $as_echo_n "checking whether a simple C MPI program compiles... " >&6; } if ${ga_cv_c_mpi_test_compile+:} false; then : $as_echo_n "(cached) " >&6 else ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" if ac_fn_c_try_compile "$LINENO"; then : ga_cv_c_mpi_test_compile=yes else ga_cv_c_mpi_test_compile=no fi rm -f core conftest.err conftest.$ac_objext CPPFLAGS="$ga_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_compile" >&5 $as_echo "$ga_cv_c_mpi_test_compile" >&6; } rm -f conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "x$ga_cv_c_mpi_test_compile" = xno; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "could not compile simple C MPI program See \`config.log' for more details" "$LINENO" 5; } fi ;; #( *) : ;; esac fi # Hack to append .x to executables. EXEEXT=.x$EXEEXT if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_target64_sizeof_voidp" ""; then : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TARGET 64bit-ness" >&5 $as_echo_n "checking for TARGET 64bit-ness... " >&6; } if ${ga_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else if test x$ga_target64_sizeof_voidp = x8; then : ga_cv_target=${ga_cv_target_base}64 else ga_cv_target=$ga_cv_target_base fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_target" >&5 $as_echo "$ga_cv_target" >&6; } cat >>confdefs.h <<_ACEOF #define $ga_cv_target 1 _ACEOF # Establish the underlying network infrastructure (SOCKETS, OPENIB, etc) # Clear the variables we will be using, just in case. ga_armci_network= ARMCI_NETWORK_LIBS= ARMCI_NETWORK_LDFLAGS= ARMCI_NETWORK_CPPFLAGS= # Check whether --enable-autodetect was given. if test "${enable_autodetect+set}" = set; then : enableval=$enable_autodetect; fi # First, all of the "--with" stuff is taken care of. armci_network_count=0 # Check whether --with-armci was given. if test "${with_armci+set}" = set; then : withval=$with_armci; fi if test "x$with_armci" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_armci ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi done fi if test "x$with_armci" != xno && test "x$with_armci" != x; then : ga_armci_network=ARMCI as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-bgml was given. if test "${with_bgml+set}" = set; then : withval=$with_bgml; fi if test "x$with_bgml" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_bgml ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi done fi if test "x$with_bgml" != xno && test "x$with_bgml" != x; then : ga_armci_network=BGML as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-cray-shmem was given. if test "${with_cray_shmem+set}" = set; then : withval=$with_cray_shmem; fi if test "x$with_cray_shmem" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_cray_shmem ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi done fi if test "x$with_cray_shmem" != xno && test "x$with_cray_shmem" != x; then : ga_armci_network=CRAY_SHMEM as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-dcmf was given. if test "${with_dcmf+set}" = set; then : withval=$with_dcmf; fi if test "x$with_dcmf" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_dcmf ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi done fi if test "x$with_dcmf" != xno && test "x$with_dcmf" != x; then : ga_armci_network=DCMF as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-dmapp was given. if test "${with_dmapp+set}" = set; then : withval=$with_dmapp; fi if test "x$with_dmapp" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_dmapp ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi done fi if test "x$with_dmapp" != xno && test "x$with_dmapp" != x; then : ga_armci_network=DMAPP as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-gemini was given. if test "${with_gemini+set}" = set; then : withval=$with_gemini; fi if test "x$with_gemini" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_gemini ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi done fi if test "x$with_gemini" != xno && test "x$with_gemini" != x; then : ga_armci_network=GEMINI as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-lapi was given. if test "${with_lapi+set}" = set; then : withval=$with_lapi; fi if test "x$with_lapi" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_lapi ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi done fi if test "x$with_lapi" != xno && test "x$with_lapi" != x; then : ga_armci_network=LAPI as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-mpi-mt was given. if test "${with_mpi_mt+set}" = set; then : withval=$with_mpi_mt; fi if test "x$with_mpi_mt" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_mpi_mt ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi done fi if test "x$with_mpi_mt" != xno && test "x$with_mpi_mt" != x; then : ga_armci_network=MPI_MT as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-mpi-spawn was given. if test "${with_mpi_spawn+set}" = set; then : withval=$with_mpi_spawn; fi if test "x$with_mpi_spawn" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_mpi_spawn ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi done fi if test "x$with_mpi_spawn" != xno && test "x$with_mpi_spawn" != x; then : ga_armci_network=MPI_SPAWN as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-mpi-ts was given. if test "${with_mpi_ts+set}" = set; then : withval=$with_mpi_ts; fi if test "x$with_mpi_ts" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_mpi_ts ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi done fi if test "x$with_mpi_ts" != xno && test "x$with_mpi_ts" != x; then : ga_armci_network=MPI_TS as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-ofa was given. if test "${with_ofa+set}" = set; then : withval=$with_ofa; fi if test "x$with_ofa" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_ofa ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi done fi if test "x$with_ofa" != xno && test "x$with_ofa" != x; then : ga_armci_network=OFA as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-openib was given. if test "${with_openib+set}" = set; then : withval=$with_openib; fi if test "x$with_openib" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_openib ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi done fi if test "x$with_openib" != xno && test "x$with_openib" != x; then : ga_armci_network=OPENIB as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-portals4 was given. if test "${with_portals4+set}" = set; then : withval=$with_portals4; fi if test "x$with_portals4" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_portals4 ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi done fi if test "x$with_portals4" != xno && test "x$with_portals4" != x; then : ga_armci_network=PORTALS4 as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-portals was given. if test "${with_portals+set}" = set; then : withval=$with_portals; fi if test "x$with_portals" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_portals ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi done fi if test "x$with_portals" != xno && test "x$with_portals" != x; then : ga_armci_network=PORTALS as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-sockets was given. if test "${with_sockets+set}" = set; then : withval=$with_sockets; fi if test "x$with_sockets" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_sockets ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi done fi if test "x$with_sockets" != xno && test "x$with_sockets" != x; then : ga_armci_network=SOCKETS as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Temporarily add ARMCI_NETWORK_CPPFLAGS to CPPFLAGS. ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $ARMCI_NETWORK_CPPFLAGS" # Temporarily add ARMCI_NETWORK_LDFLAGS to LDFLAGS. ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $ARMCI_NETWORK_LDFLAGS" # Temporarily add ARMCI_NETWORK_LIBS to LIBS. ga_save_LIBS="$LIBS"; LIBS="$ARMCI_NETWORK_LIBS $LIBS" if test "x$enable_autodetect" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for ARMCI_NETWORK..." >&5 $as_echo "$as_me: searching for ARMCI_NETWORK..." >&6;} if test "x$ga_armci_network" = x && test "x$with_bgml" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for BGML..." >&5 $as_echo "$as_me: searching for BGML..." >&6;} happy=yes if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing BGLML_memcpy" >&5 $as_echo_n "checking for library containing BGLML_memcpy... " >&6; } if ${ac_cv_search_BGLML_memcpy+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char BGLML_memcpy (); int main () { return BGLML_memcpy (); ; return 0; } _ACEOF for ac_lib in '' msglayer.rts; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib -lrts.rts -ldevices.rts $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_BGLML_memcpy=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_BGLML_memcpy+:} false; then : break fi done if ${ac_cv_search_BGLML_memcpy+:} false; then : else ac_cv_search_BGLML_memcpy=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_BGLML_memcpy" >&5 $as_echo "$ac_cv_search_BGLML_memcpy" >&6; } ac_res=$ac_cv_search_BGLML_memcpy if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_BGLML_memcpy in #( "none required") : ;; #( no) : ;; #( *) : # add msglayer.rts to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *msglayer.rts*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lmsglayer.rts" ;; esac # add extra lib rts.rts to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *rts.rts*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lrts.rts" ;; esac # add extra lib devices.rts to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *devices.rts*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -ldevices.rts" ;; esac ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=BGML; with_bgml=yes; fi fi if test "x$ga_armci_network" = x && test "x$with_cray_shmem" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for CRAY_SHMEM..." >&5 $as_echo "$as_me: searching for CRAY_SHMEM..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "mpp/shmem.h" "ac_cv_header_mpp_shmem_h" "$ac_includes_default" if test "x$ac_cv_header_mpp_shmem_h" = xyes; then : else ac_fn_c_check_header_mongrel "$LINENO" "shmem.h" "ac_cv_header_shmem_h" "$ac_includes_default" if test "x$ac_cv_header_shmem_h" = xyes; then : else happy=no fi fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing shmem_init" >&5 $as_echo_n "checking for library containing shmem_init... " >&6; } if ${ac_cv_search_shmem_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shmem_init (); int main () { return shmem_init (); ; return 0; } _ACEOF for ac_lib in '' sma; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_shmem_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_shmem_init+:} false; then : break fi done if ${ac_cv_search_shmem_init+:} false; then : else ac_cv_search_shmem_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_shmem_init" >&5 $as_echo "$ac_cv_search_shmem_init" >&6; } ac_res=$ac_cv_search_shmem_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_shmem_init in #( "none required") : ;; #( no) : ;; #( *) : # add sma to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *sma*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lsma" ;; esac ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=CRAY_SHMEM; with_cray_shmem=yes; fi fi if test "x$ga_armci_network" = x && test "x$with_dcmf" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for DCMF..." >&5 $as_echo "$as_me: searching for DCMF..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "dcmf.h" "ac_cv_header_dcmf_h" "$ac_includes_default" if test "x$ac_cv_header_dcmf_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing DCMF_Messager_initialize" >&5 $as_echo_n "checking for library containing DCMF_Messager_initialize... " >&6; } if ${ac_cv_search_DCMF_Messager_initialize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char DCMF_Messager_initialize (); int main () { return DCMF_Messager_initialize (); ; return 0; } _ACEOF for ac_lib in '' dcmf.cnk; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib -ldcmfcoll.cnk -lSPI.cna -lrt $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_DCMF_Messager_initialize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_DCMF_Messager_initialize+:} false; then : break fi done if ${ac_cv_search_DCMF_Messager_initialize+:} false; then : else ac_cv_search_DCMF_Messager_initialize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_DCMF_Messager_initialize" >&5 $as_echo "$ac_cv_search_DCMF_Messager_initialize" >&6; } ac_res=$ac_cv_search_DCMF_Messager_initialize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_DCMF_Messager_initialize in #( "none required") : ;; #( no) : ;; #( *) : # add dcmf.cnk to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *dcmf.cnk*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -ldcmf.cnk" ;; esac # add extra lib dcmfcoll.cnk if not there case $ARMCI_NETWORK_LIBS in #( *dcmfcoll.cnk*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -ldcmfcoll.cnk" ;; esac # add extra lib SPI.cna if not there case $ARMCI_NETWORK_LIBS in #( *SPI.cna*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lSPI.cna" ;; esac # add extra lib rt if not there case $ARMCI_NETWORK_LIBS in #( *rt*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lrt" ;; esac ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=DCMF; with_dcmf=yes; fi fi if test "x$ga_armci_network" = x && test "x$with_lapi" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for LAPI..." >&5 $as_echo "$as_me: searching for LAPI..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "lapi.h" "ac_cv_header_lapi_h" "$ac_includes_default" if test "x$ac_cv_header_lapi_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing LAPI_Init" >&5 $as_echo_n "checking for library containing LAPI_Init... " >&6; } if ${ac_cv_search_LAPI_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char LAPI_Init (); int main () { return LAPI_Init (); ; return 0; } _ACEOF for ac_lib in '' lapi_r lapi; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_LAPI_Init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_LAPI_Init+:} false; then : break fi done if ${ac_cv_search_LAPI_Init+:} false; then : else ac_cv_search_LAPI_Init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_LAPI_Init" >&5 $as_echo "$ac_cv_search_LAPI_Init" >&6; } ac_res=$ac_cv_search_LAPI_Init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_LAPI_Init in #( "none required") : ;; #( no) : ;; #( *) : # add missing lib to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *$ac_cv_search_LAPI_Init*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_LAPI_Init" ;; esac ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=LAPI; with_lapi=yes; fi fi if test "x$ga_armci_network" = x && test "x$with_ofa" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for OFA..." >&5 $as_echo "$as_me: searching for OFA..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "infiniband/verbs.h" "ac_cv_header_infiniband_verbs_h" "$ac_includes_default" if test "x$ac_cv_header_infiniband_verbs_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ibv_open_device" >&5 $as_echo_n "checking for library containing ibv_open_device... " >&6; } if ${ac_cv_search_ibv_open_device+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ibv_open_device (); int main () { return ibv_open_device (); ; return 0; } _ACEOF for ac_lib in '' ibverbs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ibv_open_device=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ibv_open_device+:} false; then : break fi done if ${ac_cv_search_ibv_open_device+:} false; then : else ac_cv_search_ibv_open_device=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ibv_open_device" >&5 $as_echo "$ac_cv_search_ibv_open_device" >&6; } ac_res=$ac_cv_search_ibv_open_device if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_ibv_open_device in #( "none required") : ;; #( no) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_ibv_open_device" ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=OFA; with_ofa=yes; fi fi if test "x$ga_armci_network" = x && test "x$with_openib" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for OPENIB..." >&5 $as_echo "$as_me: searching for OPENIB..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "infiniband/verbs.h" "ac_cv_header_infiniband_verbs_h" "$ac_includes_default" if test "x$ac_cv_header_infiniband_verbs_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ibv_open_device" >&5 $as_echo_n "checking for library containing ibv_open_device... " >&6; } if ${ac_cv_search_ibv_open_device+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ibv_open_device (); int main () { return ibv_open_device (); ; return 0; } _ACEOF for ac_lib in '' ibverbs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ibv_open_device=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ibv_open_device+:} false; then : break fi done if ${ac_cv_search_ibv_open_device+:} false; then : else ac_cv_search_ibv_open_device=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ibv_open_device" >&5 $as_echo "$ac_cv_search_ibv_open_device" >&6; } ac_res=$ac_cv_search_ibv_open_device if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_ibv_open_device in #( "none required") : ;; #( no) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_ibv_open_device" ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=OPENIB; with_openib=yes; fi fi if test "x$ga_armci_network" = x && test "x$with_portals4" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for PORTALS4..." >&5 $as_echo "$as_me: searching for PORTALS4..." >&6;} happy=yes if test "x$happy" = xyes; then : ga_armci_network=PORTALS4; with_portals4=yes; fi fi if test "x$ga_armci_network" = x && test "x$with_portals" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for PORTALS..." >&5 $as_echo "$as_me: searching for PORTALS..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "portals/portals3.h" "ac_cv_header_portals_portals3_h" "$ac_includes_default" if test "x$ac_cv_header_portals_portals3_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "portals/nal.h" "ac_cv_header_portals_nal_h" "$ac_includes_default" if test "x$ac_cv_header_portals_nal_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing PtlInit" >&5 $as_echo_n "checking for library containing PtlInit... " >&6; } if ${ac_cv_search_PtlInit+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char PtlInit (); int main () { return PtlInit (); ; return 0; } _ACEOF for ac_lib in '' portals; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_PtlInit=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_PtlInit+:} false; then : break fi done if ${ac_cv_search_PtlInit+:} false; then : else ac_cv_search_PtlInit=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_PtlInit" >&5 $as_echo "$ac_cv_search_PtlInit" >&6; } ac_res=$ac_cv_search_PtlInit if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : ga_armci_network=PORTALS; with_portals=yes; fi fi if test "x$ga_armci_network" = x && test "x$with_dmapp" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for DMAPP..." >&5 $as_echo "$as_me: searching for DMAPP..." >&6;} happy=yes if test "x$happy" = xyes; then : ga_armci_network=DMAPP; with_dmapp=yes; fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethugepagesize" >&5 $as_echo_n "checking for library containing gethugepagesize... " >&6; } if ${ac_cv_search_gethugepagesize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethugepagesize (); int main () { return gethugepagesize (); ; return 0; } _ACEOF for ac_lib in '' hugetlbfs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gethugepagesize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gethugepagesize+:} false; then : break fi done if ${ac_cv_search_gethugepagesize+:} false; then : else ac_cv_search_gethugepagesize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethugepagesize" >&5 $as_echo "$ac_cv_search_gethugepagesize" >&6; } ac_res=$ac_cv_search_gethugepagesize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi case $ac_cv_search_gethugepagesize in #( "none required") : ;; #( no) : ;; #( *) : # add missing lib to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *$ac_cv_search_gethugepagesize*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_gethugepagesize" ;; esac ;; esac fi fi if test "x$ga_armci_network" = x && test "x$with_gemini" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for GEMINI..." >&5 $as_echo "$as_me: searching for GEMINI..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_compile "$LINENO" "numatoolkit.h" "ac_cv_header_numatoolkit_h" " $ac_includes_default #include " if test "x$ac_cv_header_numatoolkit_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing NTK_Init" >&5 $as_echo_n "checking for library containing NTK_Init... " >&6; } if ${ac_cv_search_NTK_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char NTK_Init (); int main () { return NTK_Init (); ; return 0; } _ACEOF for ac_lib in '' numatoolkit; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_NTK_Init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_NTK_Init+:} false; then : break fi done if ${ac_cv_search_NTK_Init+:} false; then : else ac_cv_search_NTK_Init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_NTK_Init" >&5 $as_echo "$ac_cv_search_NTK_Init" >&6; } ac_res=$ac_cv_search_NTK_Init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi # CPPFLAGS must have CRAY_UGNI before looking for the next headers. gemini_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS -DCRAY_UGNI" if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "onesided.h" "ac_cv_header_onesided_h" "$ac_includes_default" if test "x$ac_cv_header_onesided_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "gni.h" "ac_cv_header_gni_h" "$ac_includes_default" if test "x$ac_cv_header_gni_h" = xyes; then : else happy=no fi fi CPPFLAGS="$gemini_save_CPPFLAGS" if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gniInit" >&5 $as_echo_n "checking for library containing gniInit... " >&6; } if ${ac_cv_search_gniInit+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gniInit (); int main () { return gniInit (); ; return 0; } _ACEOF for ac_lib in '' onesided; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gniInit=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gniInit+:} false; then : break fi done if ${ac_cv_search_gniInit+:} false; then : else ac_cv_search_gniInit=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gniInit" >&5 $as_echo "$ac_cv_search_gniInit" >&6; } ac_res=$ac_cv_search_gniInit if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : ga_armci_network=GEMINI; with_gemini=yes; fi # check for a function introduced in libonesided/1.5 # we purposefully abuse the ac_cv_search_onesided_mem_htflush value if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing onesided_mem_htflush" >&5 $as_echo_n "checking for library containing onesided_mem_htflush... " >&6; } if ${ac_cv_search_onesided_mem_htflush+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char onesided_mem_htflush (); int main () { return onesided_mem_htflush (); ; return 0; } _ACEOF for ac_lib in '' onesided; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_onesided_mem_htflush=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_onesided_mem_htflush+:} false; then : break fi done if ${ac_cv_search_onesided_mem_htflush+:} false; then : else ac_cv_search_onesided_mem_htflush=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_onesided_mem_htflush" >&5 $as_echo "$ac_cv_search_onesided_mem_htflush" >&6; } ac_res=$ac_cv_search_onesided_mem_htflush if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_onesided_mem_htflush" != xno; then : ac_cv_search_onesided_mem_htflush=1 else ac_cv_search_onesided_mem_htflush=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ONESIDED_MEM_HTFLUSH $ac_cv_search_onesided_mem_htflush _ACEOF fi # check for a function introduced in libonesided/1.6 # we purposefully abuse the ac_cv_search_onesided_fadd value if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing onesided_fadd" >&5 $as_echo_n "checking for library containing onesided_fadd... " >&6; } if ${ac_cv_search_onesided_fadd+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char onesided_fadd (); int main () { return onesided_fadd (); ; return 0; } _ACEOF for ac_lib in '' onesided; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_onesided_fadd=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_onesided_fadd+:} false; then : break fi done if ${ac_cv_search_onesided_fadd+:} false; then : else ac_cv_search_onesided_fadd=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_onesided_fadd" >&5 $as_echo "$ac_cv_search_onesided_fadd" >&6; } ac_res=$ac_cv_search_onesided_fadd if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_onesided_fadd" != xno; then : ac_cv_search_onesided_fadd=1 else ac_cv_search_onesided_fadd=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ONESIDED_FADD $ac_cv_search_onesided_fadd _ACEOF fi fi if test "x$ga_armci_network" = x && test "x$with_armci" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for external ARMCI..." >&5 $as_echo "$as_me: searching for external ARMCI..." >&6;} happy=yes CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" LIBS="$LIBS $GA_MP_LIBS" if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "armci.h" "ac_cv_header_armci_h" "$ac_includes_default" if test "x$ac_cv_header_armci_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ARMCI_Init" >&5 $as_echo_n "checking for library containing ARMCI_Init... " >&6; } if ${ac_cv_search_ARMCI_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ARMCI_Init (); int main () { return ARMCI_Init (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ARMCI_Init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ARMCI_Init+:} false; then : break fi done if ${ac_cv_search_ARMCI_Init+:} false; then : else ac_cv_search_ARMCI_Init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ARMCI_Init" >&5 $as_echo "$ac_cv_search_ARMCI_Init" >&6; } ac_res=$ac_cv_search_ARMCI_Init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_ARMCI_Init in #( "none required") : ;; #( no) : ;; #( *) : # add missing lib to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *$ac_cv_search_ARMCI_Init*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_ARMCI_Init" ;; esac ;; esac fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_group_comm" >&5 $as_echo_n "checking for library containing armci_group_comm... " >&6; } if ${ac_cv_search_armci_group_comm+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_group_comm (); int main () { return armci_group_comm (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_group_comm=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_group_comm+:} false; then : break fi done if ${ac_cv_search_armci_group_comm+:} false; then : else ac_cv_search_armci_group_comm=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_group_comm" >&5 $as_echo "$ac_cv_search_armci_group_comm" >&6; } ac_res=$ac_cv_search_armci_group_comm if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_group_comm" != xno; then : ac_cv_search_armci_group_comm=1 else ac_cv_search_armci_group_comm=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_GROUP_COMM $ac_cv_search_armci_group_comm _ACEOF fi if test "x$happy" = xyes; then : ac_fn_c_check_member "$LINENO" "ARMCI_Group" "comm" "ac_cv_member_ARMCI_Group_comm" "#include " if test "x$ac_cv_member_ARMCI_Group_comm" = xyes; then : fi if test "x$ac_cv_member_ARMCI_Group_comm" != xno; then : ac_cv_member_ARMCI_Group_comm=1 else ac_cv_member_ARMCI_Group_comm=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_GROUP_COMM_MEMBER $ac_cv_member_ARMCI_Group_comm _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ARMCI_Initialized" >&5 $as_echo_n "checking for library containing ARMCI_Initialized... " >&6; } if ${ac_cv_search_ARMCI_Initialized+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ARMCI_Initialized (); int main () { return ARMCI_Initialized (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ARMCI_Initialized=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ARMCI_Initialized+:} false; then : break fi done if ${ac_cv_search_ARMCI_Initialized+:} false; then : else ac_cv_search_ARMCI_Initialized=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ARMCI_Initialized" >&5 $as_echo "$ac_cv_search_ARMCI_Initialized" >&6; } ac_res=$ac_cv_search_ARMCI_Initialized if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_ARMCI_Initialized" != xno; then : ac_cv_search_ARMCI_Initialized=1 else ac_cv_search_ARMCI_Initialized=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_INITIALIZED $ac_cv_search_ARMCI_Initialized _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_stride_info_init" >&5 $as_echo_n "checking for library containing armci_stride_info_init... " >&6; } if ${ac_cv_search_armci_stride_info_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_stride_info_init (); int main () { return armci_stride_info_init (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_stride_info_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_stride_info_init+:} false; then : break fi done if ${ac_cv_search_armci_stride_info_init+:} false; then : else ac_cv_search_armci_stride_info_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_stride_info_init" >&5 $as_echo "$ac_cv_search_armci_stride_info_init" >&6; } ac_res=$ac_cv_search_armci_stride_info_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_stride_info_init" != xno; then : ac_cv_search_armci_stride_info_init=1 else ac_cv_search_armci_stride_info_init=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_STRIDE_INFO_INIT $ac_cv_search_armci_stride_info_init _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_notify" >&5 $as_echo_n "checking for library containing armci_notify... " >&6; } if ${ac_cv_search_armci_notify+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_notify (); int main () { return armci_notify (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_notify=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_notify+:} false; then : break fi done if ${ac_cv_search_armci_notify+:} false; then : else ac_cv_search_armci_notify=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_notify" >&5 $as_echo "$ac_cv_search_armci_notify" >&6; } ac_res=$ac_cv_search_armci_notify if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_notify" != xno; then : ac_cv_search_armci_notify=1 else ac_cv_search_armci_notify=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_NOTIFY $ac_cv_search_armci_notify _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_msg_init" >&5 $as_echo_n "checking for library containing armci_msg_init... " >&6; } if ${ac_cv_search_armci_msg_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_msg_init (); int main () { return armci_msg_init (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_msg_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_msg_init+:} false; then : break fi done if ${ac_cv_search_armci_msg_init+:} false; then : else ac_cv_search_armci_msg_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_msg_init" >&5 $as_echo "$ac_cv_search_armci_msg_init" >&6; } ac_res=$ac_cv_search_armci_msg_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_msg_init" != xno; then : ac_cv_search_armci_msg_init=1 else ac_cv_search_armci_msg_init=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_MSG_INIT $ac_cv_search_armci_msg_init _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_msg_finalize" >&5 $as_echo_n "checking for library containing armci_msg_finalize... " >&6; } if ${ac_cv_search_armci_msg_finalize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_msg_finalize (); int main () { return armci_msg_finalize (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_msg_finalize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_msg_finalize+:} false; then : break fi done if ${ac_cv_search_armci_msg_finalize+:} false; then : else ac_cv_search_armci_msg_finalize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_msg_finalize" >&5 $as_echo "$ac_cv_search_armci_msg_finalize" >&6; } ac_res=$ac_cv_search_armci_msg_finalize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_msg_finalize" != xno; then : ac_cv_search_armci_msg_finalize=1 else ac_cv_search_armci_msg_finalize=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_MSG_FINALIZE $ac_cv_search_armci_msg_finalize _ACEOF fi if test "x$ac_cv_search_armci_group_comm" = x1; then HAVE_ARMCI_GROUP_COMM_TRUE= HAVE_ARMCI_GROUP_COMM_FALSE='#' else HAVE_ARMCI_GROUP_COMM_TRUE='#' HAVE_ARMCI_GROUP_COMM_FALSE= fi if test "x$ac_cv_member_ARMCI_Group_comm" = x1; then HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE= HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE='#' else HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE='#' HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE= fi if test "x$ac_cv_search_ARMCI_Initialized" = x1; then HAVE_ARMCI_INITIALIZED_TRUE= HAVE_ARMCI_INITIALIZED_FALSE='#' else HAVE_ARMCI_INITIALIZED_TRUE='#' HAVE_ARMCI_INITIALIZED_FALSE= fi if test "x$ac_cv_search_armci_stride_info_init" = x1; then HAVE_ARMCI_STRIDE_INFO_INIT_TRUE= HAVE_ARMCI_STRIDE_INFO_INIT_FALSE='#' else HAVE_ARMCI_STRIDE_INFO_INIT_TRUE='#' HAVE_ARMCI_STRIDE_INFO_INIT_FALSE= fi if test "x$ac_cv_search_armci_notify" = x1; then HAVE_ARMCI_NOTIFY_TRUE= HAVE_ARMCI_NOTIFY_FALSE='#' else HAVE_ARMCI_NOTIFY_TRUE='#' HAVE_ARMCI_NOTIFY_FALSE= fi if test "x$ac_cv_search_armci_msg_init" = x1; then HAVE_ARMCI_MSG_INIT_TRUE= HAVE_ARMCI_MSG_INIT_FALSE='#' else HAVE_ARMCI_MSG_INIT_TRUE='#' HAVE_ARMCI_MSG_INIT_FALSE= fi if test "x$ac_cv_search_armci_msg_finalize" = x1; then HAVE_ARMCI_MSG_FINALIZE_TRUE= HAVE_ARMCI_MSG_FINALIZE_FALSE='#' else HAVE_ARMCI_MSG_FINALIZE_TRUE='#' HAVE_ARMCI_MSG_FINALIZE_FALSE= fi if test "x$happy" = xyes; then : ga_armci_network=ARMCI; with_armci=yes; fi fi if test "x$ga_armci_network" = x; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !!!" >&5 $as_echo "$as_me: WARNING: !!!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No ARMCI_NETWORK detected, defaulting to SOCKETS" >&5 $as_echo "$as_me: WARNING: No ARMCI_NETWORK detected, defaulting to SOCKETS" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !!!" >&5 $as_echo "$as_me: WARNING: !!!" >&2;} ga_armci_network=SOCKETS; with_sockets=yes fi else # Not autodetecting # Check whether multiple armci networks were selected by user. case $armci_network_count in #( 0) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No ARMCI_NETWORK specified, defaulting to SOCKETS" >&5 $as_echo "$as_me: WARNING: No ARMCI_NETWORK specified, defaulting to SOCKETS" >&2;} ga_armci_network=SOCKETS; with_sockets=yes ;; #( 1) : if test "x$ga_armci_network" = xARMCI; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for external ARMCI..." >&5 $as_echo "$as_me: searching for external ARMCI..." >&6;} happy=yes CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" LIBS="$LIBS $GA_MP_LIBS" if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "armci.h" "ac_cv_header_armci_h" "$ac_includes_default" if test "x$ac_cv_header_armci_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ARMCI_Init" >&5 $as_echo_n "checking for library containing ARMCI_Init... " >&6; } if ${ac_cv_search_ARMCI_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ARMCI_Init (); int main () { return ARMCI_Init (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ARMCI_Init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ARMCI_Init+:} false; then : break fi done if ${ac_cv_search_ARMCI_Init+:} false; then : else ac_cv_search_ARMCI_Init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ARMCI_Init" >&5 $as_echo "$ac_cv_search_ARMCI_Init" >&6; } ac_res=$ac_cv_search_ARMCI_Init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_ARMCI_Init in #( "none required") : ;; #( no) : ;; #( *) : # add missing lib to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *$ac_cv_search_ARMCI_Init*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_ARMCI_Init" ;; esac ;; esac fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_group_comm" >&5 $as_echo_n "checking for library containing armci_group_comm... " >&6; } if ${ac_cv_search_armci_group_comm+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_group_comm (); int main () { return armci_group_comm (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_group_comm=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_group_comm+:} false; then : break fi done if ${ac_cv_search_armci_group_comm+:} false; then : else ac_cv_search_armci_group_comm=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_group_comm" >&5 $as_echo "$ac_cv_search_armci_group_comm" >&6; } ac_res=$ac_cv_search_armci_group_comm if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_group_comm" != xno; then : ac_cv_search_armci_group_comm=1 else ac_cv_search_armci_group_comm=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_GROUP_COMM $ac_cv_search_armci_group_comm _ACEOF fi if test "x$happy" = xyes; then : ac_fn_c_check_member "$LINENO" "ARMCI_Group" "comm" "ac_cv_member_ARMCI_Group_comm" "#include " if test "x$ac_cv_member_ARMCI_Group_comm" = xyes; then : fi if test "x$ac_cv_member_ARMCI_Group_comm" != xno; then : ac_cv_member_ARMCI_Group_comm=1 else ac_cv_member_ARMCI_Group_comm=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_GROUP_COMM_MEMBER $ac_cv_member_ARMCI_Group_comm _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ARMCI_Initialized" >&5 $as_echo_n "checking for library containing ARMCI_Initialized... " >&6; } if ${ac_cv_search_ARMCI_Initialized+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ARMCI_Initialized (); int main () { return ARMCI_Initialized (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ARMCI_Initialized=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ARMCI_Initialized+:} false; then : break fi done if ${ac_cv_search_ARMCI_Initialized+:} false; then : else ac_cv_search_ARMCI_Initialized=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ARMCI_Initialized" >&5 $as_echo "$ac_cv_search_ARMCI_Initialized" >&6; } ac_res=$ac_cv_search_ARMCI_Initialized if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_ARMCI_Initialized" != xno; then : ac_cv_search_ARMCI_Initialized=1 else ac_cv_search_ARMCI_Initialized=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_INITIALIZED $ac_cv_search_ARMCI_Initialized _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_stride_info_init" >&5 $as_echo_n "checking for library containing armci_stride_info_init... " >&6; } if ${ac_cv_search_armci_stride_info_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_stride_info_init (); int main () { return armci_stride_info_init (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_stride_info_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_stride_info_init+:} false; then : break fi done if ${ac_cv_search_armci_stride_info_init+:} false; then : else ac_cv_search_armci_stride_info_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_stride_info_init" >&5 $as_echo "$ac_cv_search_armci_stride_info_init" >&6; } ac_res=$ac_cv_search_armci_stride_info_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_stride_info_init" != xno; then : ac_cv_search_armci_stride_info_init=1 else ac_cv_search_armci_stride_info_init=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_STRIDE_INFO_INIT $ac_cv_search_armci_stride_info_init _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_notify" >&5 $as_echo_n "checking for library containing armci_notify... " >&6; } if ${ac_cv_search_armci_notify+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_notify (); int main () { return armci_notify (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_notify=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_notify+:} false; then : break fi done if ${ac_cv_search_armci_notify+:} false; then : else ac_cv_search_armci_notify=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_notify" >&5 $as_echo "$ac_cv_search_armci_notify" >&6; } ac_res=$ac_cv_search_armci_notify if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_notify" != xno; then : ac_cv_search_armci_notify=1 else ac_cv_search_armci_notify=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_NOTIFY $ac_cv_search_armci_notify _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_msg_init" >&5 $as_echo_n "checking for library containing armci_msg_init... " >&6; } if ${ac_cv_search_armci_msg_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_msg_init (); int main () { return armci_msg_init (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_msg_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_msg_init+:} false; then : break fi done if ${ac_cv_search_armci_msg_init+:} false; then : else ac_cv_search_armci_msg_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_msg_init" >&5 $as_echo "$ac_cv_search_armci_msg_init" >&6; } ac_res=$ac_cv_search_armci_msg_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_msg_init" != xno; then : ac_cv_search_armci_msg_init=1 else ac_cv_search_armci_msg_init=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_MSG_INIT $ac_cv_search_armci_msg_init _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_msg_finalize" >&5 $as_echo_n "checking for library containing armci_msg_finalize... " >&6; } if ${ac_cv_search_armci_msg_finalize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_msg_finalize (); int main () { return armci_msg_finalize (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_msg_finalize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_msg_finalize+:} false; then : break fi done if ${ac_cv_search_armci_msg_finalize+:} false; then : else ac_cv_search_armci_msg_finalize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_msg_finalize" >&5 $as_echo "$ac_cv_search_armci_msg_finalize" >&6; } ac_res=$ac_cv_search_armci_msg_finalize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_msg_finalize" != xno; then : ac_cv_search_armci_msg_finalize=1 else ac_cv_search_armci_msg_finalize=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_MSG_FINALIZE $ac_cv_search_armci_msg_finalize _ACEOF fi if test "x$ac_cv_search_armci_group_comm" = x1; then HAVE_ARMCI_GROUP_COMM_TRUE= HAVE_ARMCI_GROUP_COMM_FALSE='#' else HAVE_ARMCI_GROUP_COMM_TRUE='#' HAVE_ARMCI_GROUP_COMM_FALSE= fi if test "x$ac_cv_member_ARMCI_Group_comm" = x1; then HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE= HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE='#' else HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE='#' HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE= fi if test "x$ac_cv_search_ARMCI_Initialized" = x1; then HAVE_ARMCI_INITIALIZED_TRUE= HAVE_ARMCI_INITIALIZED_FALSE='#' else HAVE_ARMCI_INITIALIZED_TRUE='#' HAVE_ARMCI_INITIALIZED_FALSE= fi if test "x$ac_cv_search_armci_stride_info_init" = x1; then HAVE_ARMCI_STRIDE_INFO_INIT_TRUE= HAVE_ARMCI_STRIDE_INFO_INIT_FALSE='#' else HAVE_ARMCI_STRIDE_INFO_INIT_TRUE='#' HAVE_ARMCI_STRIDE_INFO_INIT_FALSE= fi if test "x$ac_cv_search_armci_notify" = x1; then HAVE_ARMCI_NOTIFY_TRUE= HAVE_ARMCI_NOTIFY_FALSE='#' else HAVE_ARMCI_NOTIFY_TRUE='#' HAVE_ARMCI_NOTIFY_FALSE= fi if test "x$ac_cv_search_armci_msg_init" = x1; then HAVE_ARMCI_MSG_INIT_TRUE= HAVE_ARMCI_MSG_INIT_FALSE='#' else HAVE_ARMCI_MSG_INIT_TRUE='#' HAVE_ARMCI_MSG_INIT_FALSE= fi if test "x$ac_cv_search_armci_msg_finalize" = x1; then HAVE_ARMCI_MSG_FINALIZE_TRUE= HAVE_ARMCI_MSG_FINALIZE_FALSE='#' else HAVE_ARMCI_MSG_FINALIZE_TRUE='#' HAVE_ARMCI_MSG_FINALIZE_FALSE= fi if test "x$happy" = xyes; then : ga_armci_network=ARMCI; with_armci=yes; else as_fn_error $? "test for ARMCI_NETWORK=ARMCI failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xBGML; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for BGML..." >&5 $as_echo "$as_me: searching for BGML..." >&6;} happy=yes if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing BGLML_memcpy" >&5 $as_echo_n "checking for library containing BGLML_memcpy... " >&6; } if ${ac_cv_search_BGLML_memcpy+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char BGLML_memcpy (); int main () { return BGLML_memcpy (); ; return 0; } _ACEOF for ac_lib in '' msglayer.rts; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib -lrts.rts -ldevices.rts $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_BGLML_memcpy=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_BGLML_memcpy+:} false; then : break fi done if ${ac_cv_search_BGLML_memcpy+:} false; then : else ac_cv_search_BGLML_memcpy=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_BGLML_memcpy" >&5 $as_echo "$ac_cv_search_BGLML_memcpy" >&6; } ac_res=$ac_cv_search_BGLML_memcpy if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_BGLML_memcpy in #( "none required") : ;; #( no) : ;; #( *) : # add msglayer.rts to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *msglayer.rts*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lmsglayer.rts" ;; esac # add extra lib rts.rts to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *rts.rts*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lrts.rts" ;; esac # add extra lib devices.rts to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *devices.rts*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -ldevices.rts" ;; esac ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=BGML; with_bgml=yes; else as_fn_error $? "test for ARMCI_NETWORK=BGML failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xCRAY_SHMEM; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for CRAY_SHMEM..." >&5 $as_echo "$as_me: searching for CRAY_SHMEM..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "mpp/shmem.h" "ac_cv_header_mpp_shmem_h" "$ac_includes_default" if test "x$ac_cv_header_mpp_shmem_h" = xyes; then : else ac_fn_c_check_header_mongrel "$LINENO" "shmem.h" "ac_cv_header_shmem_h" "$ac_includes_default" if test "x$ac_cv_header_shmem_h" = xyes; then : else happy=no fi fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing shmem_init" >&5 $as_echo_n "checking for library containing shmem_init... " >&6; } if ${ac_cv_search_shmem_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shmem_init (); int main () { return shmem_init (); ; return 0; } _ACEOF for ac_lib in '' sma; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_shmem_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_shmem_init+:} false; then : break fi done if ${ac_cv_search_shmem_init+:} false; then : else ac_cv_search_shmem_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_shmem_init" >&5 $as_echo "$ac_cv_search_shmem_init" >&6; } ac_res=$ac_cv_search_shmem_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_shmem_init in #( "none required") : ;; #( no) : ;; #( *) : # add sma to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *sma*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lsma" ;; esac ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=CRAY_SHMEM; with_cray_shmem=yes; else as_fn_error $? "test for ARMCI_NETWORK=CRAY_SHMEM failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xDCMF; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for DCMF..." >&5 $as_echo "$as_me: searching for DCMF..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "dcmf.h" "ac_cv_header_dcmf_h" "$ac_includes_default" if test "x$ac_cv_header_dcmf_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing DCMF_Messager_initialize" >&5 $as_echo_n "checking for library containing DCMF_Messager_initialize... " >&6; } if ${ac_cv_search_DCMF_Messager_initialize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char DCMF_Messager_initialize (); int main () { return DCMF_Messager_initialize (); ; return 0; } _ACEOF for ac_lib in '' dcmf.cnk; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib -ldcmfcoll.cnk -lSPI.cna -lrt $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_DCMF_Messager_initialize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_DCMF_Messager_initialize+:} false; then : break fi done if ${ac_cv_search_DCMF_Messager_initialize+:} false; then : else ac_cv_search_DCMF_Messager_initialize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_DCMF_Messager_initialize" >&5 $as_echo "$ac_cv_search_DCMF_Messager_initialize" >&6; } ac_res=$ac_cv_search_DCMF_Messager_initialize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_DCMF_Messager_initialize in #( "none required") : ;; #( no) : ;; #( *) : # add dcmf.cnk to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *dcmf.cnk*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -ldcmf.cnk" ;; esac # add extra lib dcmfcoll.cnk if not there case $ARMCI_NETWORK_LIBS in #( *dcmfcoll.cnk*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -ldcmfcoll.cnk" ;; esac # add extra lib SPI.cna if not there case $ARMCI_NETWORK_LIBS in #( *SPI.cna*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lSPI.cna" ;; esac # add extra lib rt if not there case $ARMCI_NETWORK_LIBS in #( *rt*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lrt" ;; esac ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=DCMF; with_dcmf=yes; else as_fn_error $? "test for ARMCI_NETWORK=DCMF failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xDMAPP; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for DMAPP..." >&5 $as_echo "$as_me: searching for DMAPP..." >&6;} happy=yes if test "x$happy" = xyes; then : ga_armci_network=DMAPP; with_dmapp=yes; else as_fn_error $? "test for ARMCI_NETWORK=DMAPP failed" "$LINENO" 5 fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethugepagesize" >&5 $as_echo_n "checking for library containing gethugepagesize... " >&6; } if ${ac_cv_search_gethugepagesize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethugepagesize (); int main () { return gethugepagesize (); ; return 0; } _ACEOF for ac_lib in '' hugetlbfs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gethugepagesize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gethugepagesize+:} false; then : break fi done if ${ac_cv_search_gethugepagesize+:} false; then : else ac_cv_search_gethugepagesize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethugepagesize" >&5 $as_echo "$ac_cv_search_gethugepagesize" >&6; } ac_res=$ac_cv_search_gethugepagesize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi case $ac_cv_search_gethugepagesize in #( "none required") : ;; #( no) : ;; #( *) : # add missing lib to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *$ac_cv_search_gethugepagesize*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_gethugepagesize" ;; esac ;; esac fi fi if test "x$ga_armci_network" = xLAPI; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for LAPI..." >&5 $as_echo "$as_me: searching for LAPI..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "lapi.h" "ac_cv_header_lapi_h" "$ac_includes_default" if test "x$ac_cv_header_lapi_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing LAPI_Init" >&5 $as_echo_n "checking for library containing LAPI_Init... " >&6; } if ${ac_cv_search_LAPI_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char LAPI_Init (); int main () { return LAPI_Init (); ; return 0; } _ACEOF for ac_lib in '' lapi_r lapi; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_LAPI_Init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_LAPI_Init+:} false; then : break fi done if ${ac_cv_search_LAPI_Init+:} false; then : else ac_cv_search_LAPI_Init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_LAPI_Init" >&5 $as_echo "$ac_cv_search_LAPI_Init" >&6; } ac_res=$ac_cv_search_LAPI_Init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_LAPI_Init in #( "none required") : ;; #( no) : ;; #( *) : # add missing lib to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *$ac_cv_search_LAPI_Init*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_LAPI_Init" ;; esac ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=LAPI; with_lapi=yes; else as_fn_error $? "test for ARMCI_NETWORK=LAPI failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xMPI_TS; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for MPI_TS..." >&5 $as_echo "$as_me: searching for MPI_TS..." >&6;} happy=yes if test "x$happy" = xyes; then : ga_armci_network=MPI_TS; with_mpi_ts=yes; else as_fn_error $? "test for ARMCI_NETWORK=MPI_TS failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xMPI_MT; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for MPI_MT..." >&5 $as_echo "$as_me: searching for MPI_MT..." >&6;} happy=yes CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" LIBS="$LIBS $GA_MP_LIBS" if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "mpi.h" "ac_cv_header_mpi_h" "$ac_includes_default" if test "x$ac_cv_header_mpi_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing MPI_Init_thread" >&5 $as_echo_n "checking for library containing MPI_Init_thread... " >&6; } if ${ac_cv_search_MPI_Init_thread+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char MPI_Init_thread (); int main () { return MPI_Init_thread (); ; return 0; } _ACEOF for ac_lib in '' mpi mpich.cnk mpich.rts; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_MPI_Init_thread=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_MPI_Init_thread+:} false; then : break fi done if ${ac_cv_search_MPI_Init_thread+:} false; then : else ac_cv_search_MPI_Init_thread=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_MPI_Init_thread" >&5 $as_echo "$ac_cv_search_MPI_Init_thread" >&6; } ac_res=$ac_cv_search_MPI_Init_thread if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : ga_armci_network=MPI_MT; with_mpi_mt=yes; else as_fn_error $? "test for ARMCI_NETWORK=MPI_MT failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xMPI_SPAWN; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for MPI_SPAWN..." >&5 $as_echo "$as_me: searching for MPI_SPAWN..." >&6;} happy=yes CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" LIBS="$LIBS $GA_MP_LIBS" if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "mpi.h" "ac_cv_header_mpi_h" "$ac_includes_default" if test "x$ac_cv_header_mpi_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing MPI_Comm_spawn_multiple" >&5 $as_echo_n "checking for library containing MPI_Comm_spawn_multiple... " >&6; } if ${ac_cv_search_MPI_Comm_spawn_multiple+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char MPI_Comm_spawn_multiple (); int main () { return MPI_Comm_spawn_multiple (); ; return 0; } _ACEOF for ac_lib in '' mpi mpich.cnk mpich.rts; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_MPI_Comm_spawn_multiple=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_MPI_Comm_spawn_multiple+:} false; then : break fi done if ${ac_cv_search_MPI_Comm_spawn_multiple+:} false; then : else ac_cv_search_MPI_Comm_spawn_multiple=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_MPI_Comm_spawn_multiple" >&5 $as_echo "$ac_cv_search_MPI_Comm_spawn_multiple" >&6; } ac_res=$ac_cv_search_MPI_Comm_spawn_multiple if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : ga_armci_network=MPI_SPAWN; with_mpi_spawn=yes; else as_fn_error $? "test for ARMCI_NETWORK=MPI_SPAWN failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xOFA; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for OFA..." >&5 $as_echo "$as_me: searching for OFA..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "infiniband/verbs.h" "ac_cv_header_infiniband_verbs_h" "$ac_includes_default" if test "x$ac_cv_header_infiniband_verbs_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ibv_open_device" >&5 $as_echo_n "checking for library containing ibv_open_device... " >&6; } if ${ac_cv_search_ibv_open_device+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ibv_open_device (); int main () { return ibv_open_device (); ; return 0; } _ACEOF for ac_lib in '' ibverbs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ibv_open_device=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ibv_open_device+:} false; then : break fi done if ${ac_cv_search_ibv_open_device+:} false; then : else ac_cv_search_ibv_open_device=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ibv_open_device" >&5 $as_echo "$ac_cv_search_ibv_open_device" >&6; } ac_res=$ac_cv_search_ibv_open_device if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_ibv_open_device in #( "none required") : ;; #( no) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_ibv_open_device" ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=OFA; with_ofa=yes; else as_fn_error $? "test for ARMCI_NETWORK=OFA failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xOPENIB; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for OPENIB..." >&5 $as_echo "$as_me: searching for OPENIB..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "infiniband/verbs.h" "ac_cv_header_infiniband_verbs_h" "$ac_includes_default" if test "x$ac_cv_header_infiniband_verbs_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ibv_open_device" >&5 $as_echo_n "checking for library containing ibv_open_device... " >&6; } if ${ac_cv_search_ibv_open_device+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ibv_open_device (); int main () { return ibv_open_device (); ; return 0; } _ACEOF for ac_lib in '' ibverbs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ibv_open_device=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ibv_open_device+:} false; then : break fi done if ${ac_cv_search_ibv_open_device+:} false; then : else ac_cv_search_ibv_open_device=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ibv_open_device" >&5 $as_echo "$ac_cv_search_ibv_open_device" >&6; } ac_res=$ac_cv_search_ibv_open_device if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_ibv_open_device in #( "none required") : ;; #( no) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_ibv_open_device" ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=OPENIB; with_openib=yes; else as_fn_error $? "test for ARMCI_NETWORK=OPENIB failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xPORTALS4; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for PORTALS4..." >&5 $as_echo "$as_me: searching for PORTALS4..." >&6;} happy=yes if test "x$happy" = xyes; then : ga_armci_network=PORTALS4; with_portals4=yes; else as_fn_error $? "test for ARMCI_NETWORK=PORTALS4 failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xPORTALS; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for PORTALS..." >&5 $as_echo "$as_me: searching for PORTALS..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "portals/portals3.h" "ac_cv_header_portals_portals3_h" "$ac_includes_default" if test "x$ac_cv_header_portals_portals3_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "portals/nal.h" "ac_cv_header_portals_nal_h" "$ac_includes_default" if test "x$ac_cv_header_portals_nal_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing PtlInit" >&5 $as_echo_n "checking for library containing PtlInit... " >&6; } if ${ac_cv_search_PtlInit+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char PtlInit (); int main () { return PtlInit (); ; return 0; } _ACEOF for ac_lib in '' portals; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_PtlInit=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_PtlInit+:} false; then : break fi done if ${ac_cv_search_PtlInit+:} false; then : else ac_cv_search_PtlInit=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_PtlInit" >&5 $as_echo "$ac_cv_search_PtlInit" >&6; } ac_res=$ac_cv_search_PtlInit if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : ga_armci_network=PORTALS; with_portals=yes; else as_fn_error $? "test for ARMCI_NETWORK=PORTALS failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xGEMINI; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for GEMINI..." >&5 $as_echo "$as_me: searching for GEMINI..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_compile "$LINENO" "numatoolkit.h" "ac_cv_header_numatoolkit_h" " $ac_includes_default #include " if test "x$ac_cv_header_numatoolkit_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing NTK_Init" >&5 $as_echo_n "checking for library containing NTK_Init... " >&6; } if ${ac_cv_search_NTK_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char NTK_Init (); int main () { return NTK_Init (); ; return 0; } _ACEOF for ac_lib in '' numatoolkit; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_NTK_Init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_NTK_Init+:} false; then : break fi done if ${ac_cv_search_NTK_Init+:} false; then : else ac_cv_search_NTK_Init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_NTK_Init" >&5 $as_echo "$ac_cv_search_NTK_Init" >&6; } ac_res=$ac_cv_search_NTK_Init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi # CPPFLAGS must have CRAY_UGNI before looking for the next headers. gemini_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS -DCRAY_UGNI" if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "onesided.h" "ac_cv_header_onesided_h" "$ac_includes_default" if test "x$ac_cv_header_onesided_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "gni.h" "ac_cv_header_gni_h" "$ac_includes_default" if test "x$ac_cv_header_gni_h" = xyes; then : else happy=no fi fi CPPFLAGS="$gemini_save_CPPFLAGS" if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gniInit" >&5 $as_echo_n "checking for library containing gniInit... " >&6; } if ${ac_cv_search_gniInit+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gniInit (); int main () { return gniInit (); ; return 0; } _ACEOF for ac_lib in '' onesided; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gniInit=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gniInit+:} false; then : break fi done if ${ac_cv_search_gniInit+:} false; then : else ac_cv_search_gniInit=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gniInit" >&5 $as_echo "$ac_cv_search_gniInit" >&6; } ac_res=$ac_cv_search_gniInit if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : ga_armci_network=GEMINI; with_gemini=yes; else as_fn_error $? "test for ARMCI_NETWORK=GEMINI failed" "$LINENO" 5 fi # check for a function introduced in libonesided/1.5 # we purposefully abuse the ac_cv_search_onesided_mem_htflush value if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing onesided_mem_htflush" >&5 $as_echo_n "checking for library containing onesided_mem_htflush... " >&6; } if ${ac_cv_search_onesided_mem_htflush+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char onesided_mem_htflush (); int main () { return onesided_mem_htflush (); ; return 0; } _ACEOF for ac_lib in '' onesided; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_onesided_mem_htflush=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_onesided_mem_htflush+:} false; then : break fi done if ${ac_cv_search_onesided_mem_htflush+:} false; then : else ac_cv_search_onesided_mem_htflush=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_onesided_mem_htflush" >&5 $as_echo "$ac_cv_search_onesided_mem_htflush" >&6; } ac_res=$ac_cv_search_onesided_mem_htflush if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_onesided_mem_htflush" != xno; then : ac_cv_search_onesided_mem_htflush=1 else ac_cv_search_onesided_mem_htflush=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ONESIDED_MEM_HTFLUSH $ac_cv_search_onesided_mem_htflush _ACEOF fi # check for a function introduced in libonesided/1.6 # we purposefully abuse the ac_cv_search_onesided_fadd value if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing onesided_fadd" >&5 $as_echo_n "checking for library containing onesided_fadd... " >&6; } if ${ac_cv_search_onesided_fadd+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char onesided_fadd (); int main () { return onesided_fadd (); ; return 0; } _ACEOF for ac_lib in '' onesided; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_onesided_fadd=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_onesided_fadd+:} false; then : break fi done if ${ac_cv_search_onesided_fadd+:} false; then : else ac_cv_search_onesided_fadd=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_onesided_fadd" >&5 $as_echo "$ac_cv_search_onesided_fadd" >&6; } ac_res=$ac_cv_search_onesided_fadd if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_onesided_fadd" != xno; then : ac_cv_search_onesided_fadd=1 else ac_cv_search_onesided_fadd=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ONESIDED_FADD $ac_cv_search_onesided_fadd _ACEOF fi fi ;; #( *) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: too many armci networks specified: $armci_network_count" >&5 $as_echo "$as_me: WARNING: too many armci networks specified: $armci_network_count" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: the following were specified:" >&5 $as_echo "$as_me: WARNING: the following were specified:" >&2;} if test "x$with_armci" != x && test "x$with_armci" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-armci=$with_armci" >&5 $as_echo "$as_me: WARNING: --with-armci=$with_armci" >&2;} fi if test "x$with_bgml" != x && test "x$with_bgml" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-bgml=$with_bgml" >&5 $as_echo "$as_me: WARNING: --with-bgml=$with_bgml" >&2;} fi if test "x$with_cray_shmem" != x && test "x$with_cray_shmem" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-cray-shmem=$with_cray_shmem" >&5 $as_echo "$as_me: WARNING: --with-cray-shmem=$with_cray_shmem" >&2;} fi if test "x$with_dcmf" != x && test "x$with_dcmf" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-dcmf=$with_dcmf" >&5 $as_echo "$as_me: WARNING: --with-dcmf=$with_dcmf" >&2;} fi if test "x$with_dmapp" != x && test "x$with_dmapp" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-dmapp=$with_dmapp" >&5 $as_echo "$as_me: WARNING: --with-dmapp=$with_dmapp" >&2;} fi if test "x$with_lapi" != x && test "x$with_lapi" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-lapi=$with_lapi" >&5 $as_echo "$as_me: WARNING: --with-lapi=$with_lapi" >&2;} fi if test "x$with_mpi_ts" != x && test "x$with_mpi_ts" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-mpi-ts=$with_mpi_ts" >&5 $as_echo "$as_me: WARNING: --with-mpi-ts=$with_mpi_ts" >&2;} fi if test "x$with_mpi_mt" != x && test "x$with_mpi_mt" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-mpi-mt=$with_mpi_mt" >&5 $as_echo "$as_me: WARNING: --with-mpi-mt=$with_mpi_mt" >&2;} fi if test "x$with_mpi_spawn" != x && test "x$with_mpi_spawn" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-mpi-spawn=$with_mpi_spawn" >&5 $as_echo "$as_me: WARNING: --with-mpi-spawn=$with_mpi_spawn" >&2;} fi if test "x$with_ofa" != x && test "x$with_ofa" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-ofa=$with_ofa" >&5 $as_echo "$as_me: WARNING: --with-ofa=$with_ofa" >&2;} fi if test "x$with_openib" != x && test "x$with_openib" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-openib=$with_openib" >&5 $as_echo "$as_me: WARNING: --with-openib=$with_openib" >&2;} fi if test "x$with_portals4" != x && test "x$with_portals4" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-portals4=$with_portals4" >&5 $as_echo "$as_me: WARNING: --with-portals4=$with_portals4" >&2;} fi if test "x$with_portals" != x && test "x$with_portals" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-portals=$with_portals" >&5 $as_echo "$as_me: WARNING: --with-portals=$with_portals" >&2;} fi if test "x$with_gemini" != x && test "x$with_gemini" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-gemini=$with_gemini" >&5 $as_echo "$as_me: WARNING: --with-gemini=$with_gemini" >&2;} fi if test "x$with_sockets" != x && test "x$with_sockets" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-sockets=$with_sockets" >&5 $as_echo "$as_me: WARNING: --with-sockets=$with_sockets" >&2;} fi as_fn_error $? "please select only one armci network" "$LINENO" 5 ;; esac fi # Remove ARMCI_NETWORK_CPPFLAGS from CPPFLAGS. CPPFLAGS="$ga_save_CPPFLAGS" # Remove ARMCI_NETWORK_LDFLAGS from LDFLAGS. LDFLAGS="$ga_save_LDFLAGS" # Remove ARMCI_NETWORK_LIBS from LIBS. LIBS="$ga_save_LIBS" if test "x$with_armci" != x && test "x$with_armci" != xno; then ARMCI_NETWORK_ARMCI_TRUE= ARMCI_NETWORK_ARMCI_FALSE='#' else ARMCI_NETWORK_ARMCI_TRUE='#' ARMCI_NETWORK_ARMCI_FALSE= fi if test "x$with_bgml" != x && test "x$with_bgml" != xno; then ARMCI_NETWORK_BGML_TRUE= ARMCI_NETWORK_BGML_FALSE='#' else ARMCI_NETWORK_BGML_TRUE='#' ARMCI_NETWORK_BGML_FALSE= fi if test "x$with_cray_shmem" != x && test "x$with_cray_shmem" != xno; then ARMCI_NETWORK_CRAY_SHMEM_TRUE= ARMCI_NETWORK_CRAY_SHMEM_FALSE='#' else ARMCI_NETWORK_CRAY_SHMEM_TRUE='#' ARMCI_NETWORK_CRAY_SHMEM_FALSE= fi if test "x$with_dcmf" != x && test "x$with_dcmf" != xno; then ARMCI_NETWORK_DCMF_TRUE= ARMCI_NETWORK_DCMF_FALSE='#' else ARMCI_NETWORK_DCMF_TRUE='#' ARMCI_NETWORK_DCMF_FALSE= fi if test "x$with_dmapp" != x && test "x$with_dmapp" != xno; then ARMCI_NETWORK_DMAPP_TRUE= ARMCI_NETWORK_DMAPP_FALSE='#' else ARMCI_NETWORK_DMAPP_TRUE='#' ARMCI_NETWORK_DMAPP_FALSE= fi if test "x$with_lapi" != x && test "x$with_lapi" != xno; then ARMCI_NETWORK_LAPI_TRUE= ARMCI_NETWORK_LAPI_FALSE='#' else ARMCI_NETWORK_LAPI_TRUE='#' ARMCI_NETWORK_LAPI_FALSE= fi if test "x$with_mpi_ts" != x && test "x$with_mpi_ts" != xno; then ARMCI_NETWORK_MPI_TS_TRUE= ARMCI_NETWORK_MPI_TS_FALSE='#' else ARMCI_NETWORK_MPI_TS_TRUE='#' ARMCI_NETWORK_MPI_TS_FALSE= fi if test "x$with_mpi_mt" != x && test "x$with_mpi_mt" != xno; then ARMCI_NETWORK_MPI_MT_TRUE= ARMCI_NETWORK_MPI_MT_FALSE='#' else ARMCI_NETWORK_MPI_MT_TRUE='#' ARMCI_NETWORK_MPI_MT_FALSE= fi if test "x$with_mpi_spawn" != x && test "x$with_mpi_spawn" != xno; then ARMCI_NETWORK_MPI_SPAWN_TRUE= ARMCI_NETWORK_MPI_SPAWN_FALSE='#' else ARMCI_NETWORK_MPI_SPAWN_TRUE='#' ARMCI_NETWORK_MPI_SPAWN_FALSE= fi if test "x$with_ofa" != x && test "x$with_ofa" != xno; then ARMCI_NETWORK_OFA_TRUE= ARMCI_NETWORK_OFA_FALSE='#' else ARMCI_NETWORK_OFA_TRUE='#' ARMCI_NETWORK_OFA_FALSE= fi if test "x$with_openib" != x && test "x$with_openib" != xno; then ARMCI_NETWORK_OPENIB_TRUE= ARMCI_NETWORK_OPENIB_FALSE='#' else ARMCI_NETWORK_OPENIB_TRUE='#' ARMCI_NETWORK_OPENIB_FALSE= fi if test "x$with_gemini" != x && test "x$with_gemini" != xno; then ARMCI_NETWORK_GEMINI_TRUE= ARMCI_NETWORK_GEMINI_FALSE='#' else ARMCI_NETWORK_GEMINI_TRUE='#' ARMCI_NETWORK_GEMINI_FALSE= fi if test "x$with_portals4" != x && test "x$with_portals4" != xno; then ARMCI_NETWORK_PORTALS4_TRUE= ARMCI_NETWORK_PORTALS4_FALSE='#' else ARMCI_NETWORK_PORTALS4_TRUE='#' ARMCI_NETWORK_PORTALS4_FALSE= fi if test "x$with_portals" != x && test "x$with_portals" != xno; then ARMCI_NETWORK_PORTALS_TRUE= ARMCI_NETWORK_PORTALS_FALSE='#' else ARMCI_NETWORK_PORTALS_TRUE='#' ARMCI_NETWORK_PORTALS_FALSE= fi if test "x$with_sockets" != x && test "x$with_sockets" != xno; then ARMCI_NETWORK_SOCKETS_TRUE= ARMCI_NETWORK_SOCKETS_FALSE='#' else ARMCI_NETWORK_SOCKETS_TRUE='#' ARMCI_NETWORK_SOCKETS_FALSE= fi # TODO if test x != x; then DCMF_VER_2_TRUE= DCMF_VER_2_FALSE='#' else DCMF_VER_2_TRUE='#' DCMF_VER_2_FALSE= fi # always false if test x != x; then DCMF_VER_0_2_TRUE= DCMF_VER_0_2_FALSE='#' else DCMF_VER_0_2_TRUE='#' DCMF_VER_0_2_FALSE= fi # always false if test x = x; then DCMF_VER_0_3_TRUE= DCMF_VER_0_3_FALSE='#' else DCMF_VER_0_3_TRUE='#' DCMF_VER_0_3_FALSE= fi # always true # permanent hack case $ga_armci_network in #( DMAPP) : ARMCI_SRC_DIR=comex ;; #( GEMINI) : ARMCI_SRC_DIR=src-gemini ;; #( MPI_MT) : ARMCI_SRC_DIR=src ;; #( MPI_TS) : ARMCI_SRC_DIR=comex ;; #( OFA) : ARMCI_SRC_DIR=comex ;; #( OPENIB) : ARMCI_SRC_DIR=src ;; #( PORTALS4) : ARMCI_SRC_DIR=comex ;; #( PORTALS) : ARMCI_SRC_DIR=src-portals ;; #( GEMINI) : ARMCI_SRC_DIR=src-gemini ;; #( *) : ARMCI_SRC_DIR=src ;; esac if test "x$ARMCI_SRC_DIR" = "xsrc-portals"; then ARMCI_SRC_DIR_PORTALS_TRUE= ARMCI_SRC_DIR_PORTALS_FALSE='#' else ARMCI_SRC_DIR_PORTALS_TRUE='#' ARMCI_SRC_DIR_PORTALS_FALSE= fi if test "x$ARMCI_SRC_DIR" = "xsrc-gemini"; then ARMCI_SRC_DIR_GEMINI_TRUE= ARMCI_SRC_DIR_GEMINI_FALSE='#' else ARMCI_SRC_DIR_GEMINI_TRUE='#' ARMCI_SRC_DIR_GEMINI_FALSE= fi if test "x$ARMCI_SRC_DIR" = "xcomex"; then ARMCI_SRC_DIR_COMEX_TRUE= ARMCI_SRC_DIR_COMEX_FALSE='#' else ARMCI_SRC_DIR_COMEX_TRUE='#' ARMCI_SRC_DIR_COMEX_FALSE= fi if test "x$ARMCI_SRC_DIR" = "xsrc"; then ARMCI_SRC_DIR_SRC_TRUE= ARMCI_SRC_DIR_SRC_FALSE='#' else ARMCI_SRC_DIR_SRC_TRUE='#' ARMCI_SRC_DIR_SRC_FALSE= fi # tcgmsg5 requires this if test x$ga_armci_network = xLAPI; then : $as_echo "#define NOTIFY_SENDER 1" >>confdefs.h $as_echo "#define LAPI 1" >>confdefs.h fi ga_cray_xt_networks=no if test x$ga_armci_network = xPORTALS; then : ga_cray_xt_networks=yes fi if test x$ga_armci_network = xCRAY_SHMEM; then : ga_cray_xt_networks=yes fi if test x$ga_cray_xt_networks = xyes; then CRAY_XT_NETWORKS_TRUE= CRAY_XT_NETWORKS_FALSE='#' else CRAY_XT_NETWORKS_TRUE='#' CRAY_XT_NETWORKS_FALSE= fi ga_cv_sysv_hack=no # Only perform this hack for ARMCI build. if test "x$ARMCI_TOP_BUILDDIR" != x; then : if test x$ga_cv_sysv = xno; then : case $ga_armci_network in #( BGML|DCMF|PORTALS|GEMINI) : ga_cv_sysv_hack=no ;; #( *) : ga_cv_sysv_hack=yes ;; esac else ga_cv_sysv_hack=yes fi if test x$ga_cv_sysv_hack = xyes; then : $as_echo "#define SYSV 1" >>confdefs.h fi fi if test x$ga_cv_sysv_hack = xyes; then SYSV_TRUE= SYSV_FALSE='#' else SYSV_TRUE='#' SYSV_FALSE= fi # if not using external armci library, the following functions are always available if test "x$ga_armci_network" != xARMCI; then : $as_echo "#define HAVE_ARMCI_GROUP_COMM 1" >>confdefs.h $as_echo "#define HAVE_ARMCI_INITIALIZED 1" >>confdefs.h $as_echo "#define HAVE_ARMCI_NOTIFY 1" >>confdefs.h $as_echo "#define HAVE_ARMCI_MSG_INIT 1" >>confdefs.h $as_echo "#define HAVE_ARMCI_MSG_FINALIZE 1" >>confdefs.h fi if test "x$ac_cv_member_ARMCI_Group_comm" = x1; then HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE= HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE='#' else HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE='#' HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE= fi if test "x$ga_armci_network" != xARMCI; then HAVE_ARMCI_GROUP_COMM_TRUE= HAVE_ARMCI_GROUP_COMM_FALSE='#' else HAVE_ARMCI_GROUP_COMM_TRUE='#' HAVE_ARMCI_GROUP_COMM_FALSE= fi if test "x$ga_armci_network" != xARMCI; then HAVE_ARMCI_INITIALIZED_TRUE= HAVE_ARMCI_INITIALIZED_FALSE='#' else HAVE_ARMCI_INITIALIZED_TRUE='#' HAVE_ARMCI_INITIALIZED_FALSE= fi if test "x$ga_armci_network" != xARMCI; then HAVE_ARMCI_NOTIFY_TRUE= HAVE_ARMCI_NOTIFY_FALSE='#' else HAVE_ARMCI_NOTIFY_TRUE='#' HAVE_ARMCI_NOTIFY_FALSE= fi if test "x$ga_armci_network" != xARMCI; then HAVE_ARMCI_MSG_INIT_TRUE= HAVE_ARMCI_MSG_INIT_FALSE='#' else HAVE_ARMCI_MSG_INIT_TRUE='#' HAVE_ARMCI_MSG_INIT_FALSE= fi if test "x$ga_armci_network" != xARMCI; then HAVE_ARMCI_MSG_FINALIZE_TRUE= HAVE_ARMCI_MSG_FINALIZE_FALSE='#' else HAVE_ARMCI_MSG_FINALIZE_TRUE='#' HAVE_ARMCI_MSG_FINALIZE_FALSE= fi # the armci iterators only available in the conglomerate sources case $ga_armci_network in #( ARMCI|GEMINI|PORTALS) : ;; #( *) : $as_echo "#define HAVE_ARMCI_STRIDE_INFO_INIT 1" >>confdefs.h ;; esac if test "x$ga_armci_network" != xARMCI && test "x$ga_armci_network" != xGEMINI && test "x$ga_armci_network" != xPORTALS; then HAVE_ARMCI_STRIDE_INFO_INIT_TRUE= HAVE_ARMCI_STRIDE_INFO_INIT_FALSE='#' else HAVE_ARMCI_STRIDE_INFO_INIT_TRUE='#' HAVE_ARMCI_STRIDE_INFO_INIT_FALSE= fi # ugly hack for working around NWChem memory requirements # and MPI startup verus the 'classic' ARMCI startup delay_tcgmsg_mpi_startup=1 case $ga_armci_network in #( ARMCI) : delay_tcgmsg_mpi_startup=0 ;; #( BGML) : delay_tcgmsg_mpi_startup=1 ;; #( CRAY_SHMEM) : delay_tcgmsg_mpi_startup=1 ;; #( DCMF) : delay_tcgmsg_mpi_startup=1 ;; #( DMAPP) : delay_tcgmsg_mpi_startup=0 ;; #( LAPI) : delay_tcgmsg_mpi_startup=1 ;; #( MPI_TS) : delay_tcgmsg_mpi_startup=0 ;; #( MPI_SPAWN) : delay_tcgmsg_mpi_startup=1 ;; #( OFA) : delay_tcgmsg_mpi_startup=0 ;; #( OPENIB) : delay_tcgmsg_mpi_startup=1 ;; #( GEMINI) : delay_tcgmsg_mpi_startup=1 ;; #( PORTALS4) : delay_tcgmsg_mpi_startup=0 ;; #( PORTALS) : delay_tcgmsg_mpi_startup=1 ;; #( SOCKETS) : delay_tcgmsg_mpi_startup=1 ;; #( *) : ;; esac cat >>confdefs.h <<_ACEOF #define NEED_DELAY_TCGMSG_MPI_STARTUP $delay_tcgmsg_mpi_startup _ACEOF # Checks for C header files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable assertions" >&5 $as_echo_n "checking whether to enable assertions... " >&6; } # Check whether --enable-assert was given. if test "${enable_assert+set}" = set; then : enableval=$enable_assert; ac_enable_assert=$enableval if test "x$enableval" = xno; then : $as_echo "#define NDEBUG 1" >>confdefs.h elif test "x$enableval" != xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: invalid argument supplied to --enable-assert" >&5 $as_echo "$as_me: WARNING: invalid argument supplied to --enable-assert" >&2;} ac_enable_assert=yes fi else ac_enable_assert=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_enable_assert" >&5 $as_echo "$ac_enable_assert" >&6; } ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval \${$as_ac_Header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if ${ac_cv_header_stdbool_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { _Bool s: 1; _Bool t; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(_Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (_Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ _Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; int main () { bool e = &s; *pq |= q; *pq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdbool_h=yes else ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 $as_echo "$ac_cv_header_stdbool_h" >&6; } ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi if test $ac_cv_header_stdbool_h = yes; then $as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if ${ac_cv_header_sys_wait_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes else ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 $as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi for ac_header in assert.h do : ac_fn_c_check_header_mongrel "$LINENO" "assert.h" "ac_cv_header_assert_h" "$ac_includes_default" if test "x$ac_cv_header_assert_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ASSERT_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_ASSERT_H 0 _ACEOF fi done for ac_header in errno.h do : ac_fn_c_check_header_mongrel "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default" if test "x$ac_cv_header_errno_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ERRNO_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_ERRNO_H 0 _ACEOF fi done for ac_header in fcntl.h do : ac_fn_c_check_header_mongrel "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default" if test "x$ac_cv_header_fcntl_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FCNTL_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_FCNTL_H 0 _ACEOF fi done for ac_header in ffio.h do : ac_fn_c_check_header_mongrel "$LINENO" "ffio.h" "ac_cv_header_ffio_h" "$ac_includes_default" if test "x$ac_cv_header_ffio_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FFIO_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_FFIO_H 0 _ACEOF fi done for ac_header in limits.h do : ac_fn_c_check_header_mongrel "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" if test "x$ac_cv_header_limits_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIMITS_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_LIMITS_H 0 _ACEOF fi done for ac_header in linux/limits.h do : ac_fn_c_check_header_mongrel "$LINENO" "linux/limits.h" "ac_cv_header_linux_limits_h" "$ac_includes_default" if test "x$ac_cv_header_linux_limits_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LINUX_LIMITS_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_LINUX_LIMITS_H 0 _ACEOF fi done for ac_header in malloc.h do : ac_fn_c_check_header_mongrel "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default" if test "x$ac_cv_header_malloc_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MALLOC_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_MALLOC_H 0 _ACEOF fi done for ac_header in math.h do : ac_fn_c_check_header_mongrel "$LINENO" "math.h" "ac_cv_header_math_h" "$ac_includes_default" if test "x$ac_cv_header_math_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MATH_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_MATH_H 0 _ACEOF fi done for ac_header in stddef.h do : ac_fn_c_check_header_mongrel "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default" if test "x$ac_cv_header_stddef_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDDEF_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STDDEF_H 0 _ACEOF fi done for ac_header in stdint.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 0 _ACEOF fi done for ac_header in stdio.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdio.h" "ac_cv_header_stdio_h" "$ac_includes_default" if test "x$ac_cv_header_stdio_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDIO_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STDIO_H 0 _ACEOF fi done for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 0 _ACEOF fi done for ac_header in string.h do : ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRING_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STRING_H 0 _ACEOF fi done for ac_header in strings.h do : ac_fn_c_check_header_mongrel "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default" if test "x$ac_cv_header_strings_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRINGS_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STRINGS_H 0 _ACEOF fi done for ac_header in sys/file.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" if test "x$ac_cv_header_sys_file_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_FILE_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_FILE_H 0 _ACEOF fi done for ac_header in sys/fsid.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/fsid.h" "ac_cv_header_sys_fsid_h" "$ac_includes_default" if test "x$ac_cv_header_sys_fsid_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_FSID_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_FSID_H 0 _ACEOF fi done for ac_header in sys/fstyp.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/fstyp.h" "ac_cv_header_sys_fstyp_h" "$ac_includes_default" if test "x$ac_cv_header_sys_fstyp_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_FSTYP_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_FSTYP_H 0 _ACEOF fi done for ac_header in sys/ioctl.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" if test "x$ac_cv_header_sys_ioctl_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_IOCTL_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_IOCTL_H 0 _ACEOF fi done for ac_header in sys/iosw.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/iosw.h" "ac_cv_header_sys_iosw_h" "$ac_includes_default" if test "x$ac_cv_header_sys_iosw_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_IOSW_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_IOSW_H 0 _ACEOF fi done for ac_header in sys/ipc.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/ipc.h" "ac_cv_header_sys_ipc_h" "$ac_includes_default" if test "x$ac_cv_header_sys_ipc_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_IPC_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_IPC_H 0 _ACEOF fi done for ac_header in sys/mman.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" if test "x$ac_cv_header_sys_mman_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_MMAN_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_MMAN_H 0 _ACEOF fi done for ac_header in sys/mount.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/mount.h" "ac_cv_header_sys_mount_h" "$ac_includes_default" if test "x$ac_cv_header_sys_mount_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_MOUNT_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_MOUNT_H 0 _ACEOF fi done for ac_header in sys/param.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" if test "x$ac_cv_header_sys_param_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_PARAM_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_PARAM_H 0 _ACEOF fi done for ac_header in sys/sem.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/sem.h" "ac_cv_header_sys_sem_h" "$ac_includes_default" if test "x$ac_cv_header_sys_sem_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SEM_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SEM_H 0 _ACEOF fi done for ac_header in sys/shm.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/shm.h" "ac_cv_header_sys_shm_h" "$ac_includes_default" if test "x$ac_cv_header_sys_shm_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SHM_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SHM_H 0 _ACEOF fi done for ac_header in sys/statfs.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/statfs.h" "ac_cv_header_sys_statfs_h" "$ac_includes_default" if test "x$ac_cv_header_sys_statfs_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_STATFS_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_STATFS_H 0 _ACEOF fi done for ac_header in sys/stat.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/stat.h" "ac_cv_header_sys_stat_h" "$ac_includes_default" if test "x$ac_cv_header_sys_stat_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_STAT_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_STAT_H 0 _ACEOF fi done for ac_header in sys/statvfs.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/statvfs.h" "ac_cv_header_sys_statvfs_h" "$ac_includes_default" if test "x$ac_cv_header_sys_statvfs_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_STATVFS_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_STATVFS_H 0 _ACEOF fi done for ac_header in sys/time.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" if test "x$ac_cv_header_sys_time_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_TIME_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_TIME_H 0 _ACEOF fi done for ac_header in sys/types.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" if test "x$ac_cv_header_sys_types_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_TYPES_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_TYPES_H 0 _ACEOF fi done for ac_header in sys/vfs.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/vfs.h" "ac_cv_header_sys_vfs_h" "$ac_includes_default" if test "x$ac_cv_header_sys_vfs_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_VFS_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_VFS_H 0 _ACEOF fi done for ac_header in time.h do : ac_fn_c_check_header_mongrel "$LINENO" "time.h" "ac_cv_header_time_h" "$ac_includes_default" if test "x$ac_cv_header_time_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TIME_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_TIME_H 0 _ACEOF fi done for ac_header in unistd.h do : ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" if test "x$ac_cv_header_unistd_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UNISTD_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_UNISTD_H 0 _ACEOF fi done for ac_header in windows.h do : ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default" if test "x$ac_cv_header_windows_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINDOWS_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_WINDOWS_H 0 _ACEOF fi done # Checks for C typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 $as_echo_n "checking for C/C++ restrict keyword... " >&6; } if ${ac_cv_c_restrict+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_restrict=no # The order here caters to the fact that C++ does not require restrict. for ac_kw in __restrict __restrict__ _Restrict restrict; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int * int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int main () { int s[1]; int * $ac_kw t = s; t[0] = 0; return foo(t) ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_restrict=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_restrict" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 $as_echo "$ac_cv_c_restrict" >&6; } case $ac_cv_c_restrict in restrict) ;; no) $as_echo "#define restrict /**/" >>confdefs.h ;; *) cat >>confdefs.h <<_ACEOF #define restrict $ac_cv_c_restrict _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5 $as_echo_n "checking for working volatile... " >&6; } if ${ac_cv_c_volatile+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { volatile int x; int * volatile y = (int *) 0; return !x && !y; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_volatile=yes else ac_cv_c_volatile=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 $as_echo "$ac_cv_c_volatile" >&6; } if test $ac_cv_c_volatile = no; then $as_echo "#define volatile /**/" >>confdefs.h fi ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" case $ac_cv_c_int64_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int64_t $ac_cv_c_int64_t _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double" >&5 $as_echo_n "checking for long double... " >&6; } if ${ac_cv_type_long_double+:} false; then : $as_echo_n "(cached) " >&6 else if test "$GCC" = yes; then ac_cv_type_long_double=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* The Stardent Vistra knows sizeof (long double), but does not support it. */ long double foo = 0.0L; int main () { static int test_array [1 - 2 * !(/* On Ultrix 4.3 cc, long double is 4 and double is 8. */ sizeof (double) <= sizeof (long double))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_long_double=yes else ac_cv_type_long_double=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double" >&5 $as_echo "$ac_cv_type_long_double" >&6; } if test $ac_cv_type_long_double = yes; then $as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 $as_echo_n "checking return type of signal handlers... " >&6; } if ${ac_cv_type_signal+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_signal=int else ac_cv_type_signal=void fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 $as_echo "$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 $as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } if ${ac_cv_sys_largefile_source+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* for off_t */ #include int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=no; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE_SOURCE 1 #include /* for off_t */ #include int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=1; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_cv_sys_largefile_source=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 $as_echo "$ac_cv_sys_largefile_source" >&6; } case $ac_cv_sys_largefile_source in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source _ACEOF ;; esac rm -rf conftest* # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug # in glibc 2.1.3, but that breaks too many other things. # If you want fseeko and ftello with glibc, upgrade to a fixed glibc. if test $ac_cv_sys_largefile_source != unknown; then $as_echo "#define HAVE_FSEEKO 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for preprocessor symbol for function name" >&5 $as_echo_n "checking for preprocessor symbol for function name... " >&6; } if ${ga_cv_cpp_function+:} false; then : $as_echo_n "(cached) " >&6 else if test x$ga_cv_cpp_function = x; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern int printf(const char *format, ...); int main () { printf("__func__ = %s\n", __func__); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ga_cv_cpp_function=__func__ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test x$ga_cv_cpp_function = x; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern int printf(const char *format, ...); int main () { printf("__FUNCTION__ = %s\n", __FUNCTION__); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ga_cv_cpp_function=__FUNCTION__ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test x$ga_cv_cpp_function = x; then : ga_cv_cpp_function='"Unknown"' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_cpp_function" >&5 $as_echo "$ga_cv_cpp_function" >&6; } cat >>confdefs.h <<_ACEOF #define FUNCTION_NAME $ga_cv_cpp_function _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C global variable containing the name of the program" >&5 $as_echo_n "checking for C global variable containing the name of the program... " >&6; } if ${ga_cv_progname+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ga_cv_progname=none for name in __progname program_invocation_short_name __progname_full program_invocation_name do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include extern const char * $name; int main () { printf("%s\n", $name); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_cv_progname=$name break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_progname" >&5 $as_echo "$ga_cv_progname" >&6; } if test x$ga_cv_progname != xnone; then : val=1 else val=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_PROGNAME $val _ACEOF cat >>confdefs.h <<_ACEOF #define PROGNAME $ga_cv_progname _ACEOF # Check whether --enable-weak was given. if test "${enable_weak+set}" = set; then : enableval=$enable_weak; else enable_weak=yes fi if test "x$ga_cv_target_base" = xCYGWIN; then : enable_weak=no fi if test "x$enable_weak" = xyes; then : ax_sys_weak_alias=no # Test whether compiler accepts #pragma form of weak aliasing { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports #pragma weak" >&5 $as_echo_n "checking whether $CC supports #pragma weak... " >&6; } if ${ax_cv_sys_weak_alias_pragma+:} false; then : $as_echo_n "(cached) " >&6 else # Try linking with a weak alias... cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void weakf(int c); #pragma weak weakf = __weakf void __weakf(int c) {} int main () { weakf(0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_sys_weak_alias_pragma=yes else ax_cv_sys_weak_alias_pragma=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_sys_weak_alias_pragma" >&5 $as_echo "$ax_cv_sys_weak_alias_pragma" >&6; } # What was the result of the test? if test $ax_sys_weak_alias = no && test $ax_cv_sys_weak_alias_pragma = yes; then : ax_sys_weak_alias=pragma $as_echo "#define HAVE_SYS_WEAK_ALIAS_PRAGMA 1" >>confdefs.h fi else ax_cv_sys_weak_alias_pragma=no $as_echo "#define HAVE_SYS_WEAK_ALIAS_PRAGMA 0" >>confdefs.h fi if test "x$ax_cv_sys_weak_alias_pragma" = xyes; then HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE= HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE='#' else HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE='#' HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE= fi # enable shared libs automatically if profiling using weak symbols if test "x$ax_cv_sys_weak_alias_pragma" = xyes; then : if test "x$enable_profiling" = xyes; then : enable_shared=yes fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for union semun in sys/sem.h" >&5 $as_echo_n "checking for union semun in sys/sem.h... " >&6; } if ${ga_cv_union_semun+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { union semun arg; semctl(0, 0, 0, arg); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ga_cv_union_semun=yes else ga_cv_union_semun=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_union_semun" >&5 $as_echo "$ga_cv_union_semun" >&6; } if test x$ga_cv_union_semun = xyes; then : $as_echo "#define HAVE_UNION_SEMUN 1" >>confdefs.h fi # Checks for C type sizes. # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5 $as_echo_n "checking size of void*... " >&6; } if ${ac_cv_sizeof_voidp+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default"; then : else if test "$ac_cv_type_voidp" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void*) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_voidp=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_voidp" >&5 $as_echo "$ac_cv_sizeof_voidp" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_VOIDP $ac_cv_sizeof_voidp _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 $as_echo_n "checking size of char... " >&6; } if ${ac_cv_sizeof_char+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then : else if test "$ac_cv_type_char" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (char) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_char=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 $as_echo "$ac_cv_sizeof_char" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_CHAR $ac_cv_sizeof_char _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 $as_echo_n "checking size of short... " >&6; } if ${ac_cv_sizeof_short+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : else if test "$ac_cv_type_short" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (short) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_short=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 $as_echo "$ac_cv_sizeof_short" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 $as_echo_n "checking size of int... " >&6; } if ${ac_cv_sizeof_int+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : else if test "$ac_cv_type_int" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_int=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 $as_echo "$ac_cv_sizeof_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 $as_echo_n "checking size of long... " >&6; } if ${ac_cv_sizeof_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 $as_echo "$ac_cv_sizeof_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 $as_echo_n "checking size of long long... " >&6; } if ${ac_cv_sizeof_long_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 $as_echo "$ac_cv_sizeof_long_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float" >&5 $as_echo_n "checking size of float... " >&6; } if ${ac_cv_sizeof_float+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float" "$ac_includes_default"; then : else if test "$ac_cv_type_float" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (float) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_float=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5 $as_echo "$ac_cv_sizeof_float" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_FLOAT $ac_cv_sizeof_float _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 $as_echo_n "checking size of double... " >&6; } if ${ac_cv_sizeof_double+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then : else if test "$ac_cv_type_double" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (double) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_double=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 $as_echo "$ac_cv_sizeof_double" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_DOUBLE $ac_cv_sizeof_double _ACEOF if test x$ac_cv_type_long_double = xyes; then : # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5 $as_echo_n "checking size of long double... " >&6; } if ${ac_cv_sizeof_long_double+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double" "$ac_includes_default"; then : else if test "$ac_cv_type_long_double" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long double) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long_double=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5 $as_echo "$ac_cv_sizeof_long_double" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for smallest C integer matching void*" >&5 $as_echo_n "checking for smallest C integer matching void*... " >&6; } if ${ga_cv_c_pointer_as_integer+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$ac_cv_sizeof_voidp" = "x$ac_cv_sizeof_short"; then : ga_cv_c_pointer_as_integer=short elif test "x$ac_cv_sizeof_voidp" = "x$ac_cv_sizeof_int"; then : ga_cv_c_pointer_as_integer=int elif test "x$ac_cv_sizeof_voidp" = "x$ac_cv_sizeof_long"; then : ga_cv_c_pointer_as_integer=long elif test "x$ac_cv_sizeof_voidp" = "x$ac_cv_sizeof_long_long"; then : ga_cv_c_pointer_as_integer="long long" else as_fn_error $? "Could not determine smallest C integer matching void*" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_pointer_as_integer" >&5 $as_echo "$ga_cv_c_pointer_as_integer" >&6; } C_POINTER_AS_INTEGER=$ga_cv_c_pointer_as_integer # Checks for C library functions. for ac_header in vfork.h do : ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" if test "x$ac_cv_header_vfork_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VFORK_H 1 _ACEOF fi done for ac_func in fork vfork do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_fork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 $as_echo_n "checking for working fork... " >&6; } if ${ac_cv_func_fork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_fork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_fork_works=yes else ac_cv_func_fork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 $as_echo "$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 $as_echo_n "checking for working vfork... " >&6; } if ${ac_cv_func_vfork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_vfork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #ifdef HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (0); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_vfork_works=yes else ac_cv_func_vfork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 $as_echo "$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then $as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h else $as_echo "#define vfork fork" >>confdefs.h fi if test "x$ac_cv_func_fork_works" = xyes; then $as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h fi for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpagesize do : ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" if test "x$ac_cv_func_getpagesize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 $as_echo_n "checking for working mmap... " >&6; } if ${ac_cv_func_mmap_fixed_mapped+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_mmap_fixed_mapped=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include #if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main () { char *data, *data2, *data3; const char *cdata2; int i, pagesize; int fd, fd2; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) return 2; if (write (fd, data, pagesize) != pagesize) return 3; close (fd); /* Next, check that the tail of a page is zero-filled. File must have non-zero length, otherwise we risk SIGBUS for entire page. */ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); if (fd2 < 0) return 4; cdata2 = ""; if (write (fd2, cdata2, 1) != 1) return 5; data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); if (data2 == MAP_FAILED) return 6; for (i = 0; i < pagesize; ++i) if (*(data2 + i)) return 7; close (fd2); if (munmap (data2, pagesize)) return 8; /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) return 9; if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) return 10; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) return 11; /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) return 12; if (read (fd, data3, pagesize) != pagesize) return 13; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) return 14; close (fd); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_mmap_fixed_mapped=yes else ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 $as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then $as_echo "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt for ac_header in sys/select.h sys/socket.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for select" >&5 $as_echo_n "checking types of arguments for select... " >&6; } if ${ac_cv_func_select_args+:} false; then : $as_echo_n "(cached) " >&6 else for ac_arg234 in 'fd_set *' 'int *' 'void *'; do for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #ifdef HAVE_SYS_SELECT_H # include #endif #ifdef HAVE_SYS_SOCKET_H # include #endif int main () { extern int select ($ac_arg1, $ac_arg234, $ac_arg234, $ac_arg234, $ac_arg5); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_select_args="$ac_arg1,$ac_arg234,$ac_arg5"; break 3 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done done done # Provide a safe default value. : "${ac_cv_func_select_args=int,int *,struct timeval *}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_select_args" >&5 $as_echo "$ac_cv_func_select_args" >&6; } ac_save_IFS=$IFS; IFS=',' set dummy `echo "$ac_cv_func_select_args" | sed 's/\*/\*/g'` IFS=$ac_save_IFS shift cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG1 $1 _ACEOF cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG234 ($2) _ACEOF cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG5 ($3) _ACEOF rm -f conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing floor" >&5 $as_echo_n "checking for library containing floor... " >&6; } if ${ac_cv_search_floor+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char floor (); int main () { return floor (); ; return 0; } _ACEOF for ac_lib in '' m; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_floor=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_floor+:} false; then : break fi done if ${ac_cv_search_floor+:} false; then : else ac_cv_search_floor=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_floor" >&5 $as_echo "$ac_cv_search_floor" >&6; } ac_res=$ac_cv_search_floor if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_floor=1 else have_floor=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_FLOOR $have_floor _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing modf" >&5 $as_echo_n "checking for library containing modf... " >&6; } if ${ac_cv_search_modf+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char modf (); int main () { return modf (); ; return 0; } _ACEOF for ac_lib in '' m; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_modf=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_modf+:} false; then : break fi done if ${ac_cv_search_modf+:} false; then : else ac_cv_search_modf=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_modf" >&5 $as_echo "$ac_cv_search_modf" >&6; } ac_res=$ac_cv_search_modf if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_modf=1 else have_modf=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_MODF $have_modf _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pow" >&5 $as_echo_n "checking for library containing pow... " >&6; } if ${ac_cv_search_pow+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pow (); int main () { return pow (); ; return 0; } _ACEOF for ac_lib in '' m; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_pow=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_pow+:} false; then : break fi done if ${ac_cv_search_pow+:} false; then : else ac_cv_search_pow=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pow" >&5 $as_echo "$ac_cv_search_pow" >&6; } ac_res=$ac_cv_search_pow if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_pow=1 else have_pow=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_POW $have_pow _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sqrt" >&5 $as_echo_n "checking for library containing sqrt... " >&6; } if ${ac_cv_search_sqrt+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sqrt (); int main () { return sqrt (); ; return 0; } _ACEOF for ac_lib in '' m; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_sqrt=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_sqrt+:} false; then : break fi done if ${ac_cv_search_sqrt+:} false; then : else ac_cv_search_sqrt=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sqrt" >&5 $as_echo "$ac_cv_search_sqrt" >&6; } ac_res=$ac_cv_search_sqrt if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_sqrt=1 else have_sqrt=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_SQRT $have_sqrt _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing hypot" >&5 $as_echo_n "checking for library containing hypot... " >&6; } if ${ac_cv_search_hypot+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char hypot (); int main () { return hypot (); ; return 0; } _ACEOF for ac_lib in '' m; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_hypot=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_hypot+:} false; then : break fi done if ${ac_cv_search_hypot+:} false; then : else ac_cv_search_hypot=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_hypot" >&5 $as_echo "$ac_cv_search_hypot" >&6; } ac_res=$ac_cv_search_hypot if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_hypot=1 else have_hypot=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_HYPOT $have_hypot _ACEOF for ac_func in bcopy do : ac_fn_c_check_func "$LINENO" "bcopy" "ac_cv_func_bcopy" if test "x$ac_cv_func_bcopy" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BCOPY 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_BCOPY 0 _ACEOF fi done for ac_func in bzero do : ac_fn_c_check_func "$LINENO" "bzero" "ac_cv_func_bzero" if test "x$ac_cv_func_bzero" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BZERO 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_BZERO 0 _ACEOF fi done for ac_func in create_shared_region do : ac_fn_c_check_func "$LINENO" "create_shared_region" "ac_cv_func_create_shared_region" if test "x$ac_cv_func_create_shared_region" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_CREATE_SHARED_REGION 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_CREATE_SHARED_REGION 0 _ACEOF fi done for ac_func in ftruncate do : ac_fn_c_check_func "$LINENO" "ftruncate" "ac_cv_func_ftruncate" if test "x$ac_cv_func_ftruncate" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FTRUNCATE 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_FTRUNCATE 0 _ACEOF fi done for ac_func in gethostbyname do : ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETHOSTBYNAME 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_GETHOSTBYNAME 0 _ACEOF fi done for ac_func in gethostname do : ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname" if test "x$ac_cv_func_gethostname" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETHOSTNAME 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_GETHOSTNAME 0 _ACEOF fi done for ac_func in getpagesize do : ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" if test "x$ac_cv_func_getpagesize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 0 _ACEOF fi done for ac_func in gettimeofday do : ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday" if test "x$ac_cv_func_gettimeofday" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETTIMEOFDAY 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_GETTIMEOFDAY 0 _ACEOF fi done for ac_func in memalign do : ac_fn_c_check_func "$LINENO" "memalign" "ac_cv_func_memalign" if test "x$ac_cv_func_memalign" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MEMALIGN 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_MEMALIGN 0 _ACEOF fi done for ac_func in memcpy do : ac_fn_c_check_func "$LINENO" "memcpy" "ac_cv_func_memcpy" if test "x$ac_cv_func_memcpy" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MEMCPY 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_MEMCPY 0 _ACEOF fi done for ac_func in memset do : ac_fn_c_check_func "$LINENO" "memset" "ac_cv_func_memset" if test "x$ac_cv_func_memset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MEMSET 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_MEMSET 0 _ACEOF fi done for ac_func in munmap do : ac_fn_c_check_func "$LINENO" "munmap" "ac_cv_func_munmap" if test "x$ac_cv_func_munmap" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MUNMAP 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_MUNMAP 0 _ACEOF fi done for ac_func in pause do : ac_fn_c_check_func "$LINENO" "pause" "ac_cv_func_pause" if test "x$ac_cv_func_pause" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PAUSE 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_PAUSE 0 _ACEOF fi done for ac_func in posix_memalign do : ac_fn_c_check_func "$LINENO" "posix_memalign" "ac_cv_func_posix_memalign" if test "x$ac_cv_func_posix_memalign" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_POSIX_MEMALIGN 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_POSIX_MEMALIGN 0 _ACEOF fi done for ac_func in putenv do : ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv" if test "x$ac_cv_func_putenv" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PUTENV 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_PUTENV 0 _ACEOF fi done for ac_func in select do : ac_fn_c_check_func "$LINENO" "select" "ac_cv_func_select" if test "x$ac_cv_func_select" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SELECT 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SELECT 0 _ACEOF fi done for ac_func in setenv do : ac_fn_c_check_func "$LINENO" "setenv" "ac_cv_func_setenv" if test "x$ac_cv_func_setenv" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SETENV 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SETENV 0 _ACEOF fi done for ac_func in shared_malloc do : ac_fn_c_check_func "$LINENO" "shared_malloc" "ac_cv_func_shared_malloc" if test "x$ac_cv_func_shared_malloc" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SHARED_MALLOC 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SHARED_MALLOC 0 _ACEOF fi done for ac_func in shmalloc do : ac_fn_c_check_func "$LINENO" "shmalloc" "ac_cv_func_shmalloc" if test "x$ac_cv_func_shmalloc" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SHMALLOC 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SHMALLOC 0 _ACEOF fi done for ac_func in socket do : ac_fn_c_check_func "$LINENO" "socket" "ac_cv_func_socket" if test "x$ac_cv_func_socket" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SOCKET 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SOCKET 0 _ACEOF fi done for ac_func in srand do : ac_fn_c_check_func "$LINENO" "srand" "ac_cv_func_srand" if test "x$ac_cv_func_srand" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SRAND 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SRAND 0 _ACEOF fi done for ac_func in srandom do : ac_fn_c_check_func "$LINENO" "srandom" "ac_cv_func_srandom" if test "x$ac_cv_func_srandom" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SRANDOM 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SRANDOM 0 _ACEOF fi done for ac_func in strchr do : ac_fn_c_check_func "$LINENO" "strchr" "ac_cv_func_strchr" if test "x$ac_cv_func_strchr" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRCHR 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STRCHR 0 _ACEOF fi done for ac_func in strdup do : ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup" if test "x$ac_cv_func_strdup" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRDUP 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STRDUP 0 _ACEOF fi done for ac_func in strerror do : ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror" if test "x$ac_cv_func_strerror" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRERROR 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STRERROR 0 _ACEOF fi done for ac_func in strstr do : ac_fn_c_check_func "$LINENO" "strstr" "ac_cv_func_strstr" if test "x$ac_cv_func_strstr" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRSTR 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STRSTR 0 _ACEOF fi done for ac_func in strtol do : ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol" if test "x$ac_cv_func_strtol" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRTOL 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STRTOL 0 _ACEOF fi done # Checks for C libraries. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openpl in -lplot" >&5 $as_echo_n "checking for openpl in -lplot... " >&6; } if ${ac_cv_lib_plot_openpl+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lplot $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char openpl (); int main () { return openpl (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_plot_openpl=yes else ac_cv_lib_plot_openpl=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_plot_openpl" >&5 $as_echo "$ac_cv_lib_plot_openpl" >&6; } if test "x$ac_cv_lib_plot_openpl" = xyes; then : PLOTLIB=-lplot $as_echo "#define HAVE_LIBPLOT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for specific C optimizations" >&5 $as_echo_n "checking for specific C optimizations... " >&6; } if ${ga_cv_c_opt+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$GA_COPT" != x; then : ga_cv_c_opt="$GA_COPT" else ga_cv_c_opt= fi if test "x$ga_cv_c_opt" = x && test "x$enable_opt" = xyes; then : case $ga_cv_target:$ga_cv_c_compiler_vendor:$host_cpu in #( BGL:*:*) : ga_cv_c_opt="-O0" ;; #( BGP:ibm:*) : ga_cv_c_opt="-O3 -qstrict -qarch=450 -qtune=450" ;; #( BGP:gnu:*) : ga_cv_c_opt="-O2" ;; #( CATAMOUNT:*:*) : ga_cv_c_opt= ;; #( CRAY_XT:*:*) : ga_cv_c_opt= ;; #( CYGWIN:*:*) : ga_cv_c_opt= ;; #( FUJITSU_VPP64:*:*) : ga_cv_c_opt= ;; #( FUJITSU_VPP:*:*) : ga_cv_c_opt="-KA32" ;; #( HPUX64:*:*) : ga_cv_c_opt="-Ae" ;; #( HPUX64:*:ia64) : ga_cv_c_opt="-Ae" ;; #( HPUX:*:*) : ga_cv_c_opt="-Ae" ;; #( IBM64:*:*) : ga_cv_c_opt= ;; #( IBM:*:*) : ga_cv_c_opt= ;; #( LAPI64:*:*) : ga_cv_c_opt= ;; #( LAPI:*:*) : ga_cv_c_opt= ;; #( LINUX64:fujitsu:ia64) : ga_cv_c_opt="-Kfast" ;; #( LINUX64:fujitsu:x86_64) : ga_cv_c_opt="-Kfast" ;; #( LINUX64:gnu:ia64) : ga_cv_c_opt="-O3 -funroll-loops" ;; #( LINUX64:gnu:powerpc64) : ga_cv_c_opt="-funroll-loops" ;; #( LINUX64:gnu:ppc64) : ga_cv_c_opt="-funroll-loops" ;; #( LINUX64:gnu:x86_64) : ga_cv_c_opt="-O2 -funroll-loops" ;; #( LINUX64:ibm:powerpc64) : ga_cv_c_opt="-qinline=100 -qstrict -qarch=auto -qtune=auto" ;; #( LINUX64:ibm:ppc64) : ga_cv_c_opt="-qinline=100 -qstrict -qarch=auto -qtune=auto" ;; #( LINUX64:ibm:x86_64) : ga_cv_c_opt= ;; #( LINUX64:intel:ia64) : ga_cv_c_opt="-fno-alias -ftz" ;; #( LINUX:fujitsu:*) : ga_cv_c_opt="-Kfast" ;; #( LINUX:gnu:786) : ga_cv_c_opt="-O2 -funroll-loops -malign-double" ;; #( LINUX:gnu:*) : ga_cv_c_opt="-O2 -funroll-loops" ;; #( LINUX:gnu:x86) : ga_cv_c_opt="-O2 -funroll-loops -malign-double" ;; #( LINUX:ibm:*) : ga_cv_c_opt="-q32" ;; #( LINUX:intel:*) : ga_cv_c_opt="-O3 -prefetch" ;; #( MACX64:*:*) : ga_cv_c_opt= ;; #( MACX:*:*) : ga_cv_c_opt= ;; #( NEC64:*:*) : ga_cv_c_opt="-Cvsafe -size_t64" ;; #( NEC:*:*) : ga_cv_c_opt="-Cvsafe" ;; #( SOLARIS64:fujitsu:*) : ga_cv_c_opt="-Kfast -KV9FMADD" ;; #( SOLARIS64:gnu:*) : ga_cv_c_opt="-dalign -xarch=v9" ;; #( SOLARIS64:gnu:i386) : ga_cv_c_opt="-dalign -xarch=amd64" ;; #( SOLARIS:fujitsu:*) : ga_cv_c_opt="-Kfast -KV8PFMADD" ;; #( SOLARIS:gnu:*) : ga_cv_c_opt="-dalign" ;; #( SOLARIS:gnu:i386) : ga_cv_c_opt="-dalign -xarch=sse2" ;; #( *) : ga_cv_c_opt= ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_opt" >&5 $as_echo "$ga_cv_c_opt" >&6; } GA_COPT=$ga_cv_c_opt CFLAGS="$ga_save_CFLAGS" ######################################### # C++ compiler ######################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} if test "x$enable_cxx" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: C++ compiler" >&5 $as_echo "$as_me: C++ compiler" >&6;} else { $as_echo "$as_me:${as_lineno-$LINENO}: C++ compiler (disabled, but some tests still required)" >&5 $as_echo "$as_me: C++ compiler (disabled, but some tests still required)" >&6;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu # GA_PROG_MPICXX is required to silence complaints that C++ source exists # even if C++ support has been disabled. ga_save_CXXFLAGS="$CXXFLAGS" case $ga_cv_target_base in #( BGP) : ga_mpicxx_pref=mpixlcxx_r; ga_cxx_pref=bgxlC_r ;; #( *) : ;; esac # In the case of using MPI wrappers, set CXX=MPICXX since CXX will override # absolutely everything in our list of compilers. if test x$with_mpi_wrappers = xyes; then : if test "x$CXX" != "x$MPICXX"; then : ga_orig_CXX="$CXX" fi case x$CXX:x$MPICXX in #( x:x) : ;; #( x:x*) : CXX="$MPICXX" ;; #( x*:x) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired but CXX is set while MPICXX is unset." >&5 $as_echo "$as_me: WARNING: MPI compilers desired but CXX is set while MPICXX is unset." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CXX will be ignored during compiler selection, but will be" >&5 $as_echo "$as_me: WARNING: CXX will be ignored during compiler selection, but will be" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&5 $as_echo "$as_me: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: meant to set MPICXX instead of or in addition to CXX?" >&5 $as_echo "$as_me: WARNING: meant to set MPICXX instead of or in addition to CXX?" >&2;} CXX= ;; #( x*:x*) : if test "x$CXX" != "x$MPICXX"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired, MPICXX and CXX are set, and MPICXX!=CXX." >&5 $as_echo "$as_me: WARNING: MPI compilers desired, MPICXX and CXX are set, and MPICXX!=CXX." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Choosing MPICXX over CXX." >&5 $as_echo "$as_me: WARNING: Choosing MPICXX over CXX." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CXX will be tested first during MPI compiler unwrapping." >&5 $as_echo "$as_me: WARNING: CXX will be tested first during MPI compiler unwrapping." >&2;} fi CXX="$MPICXX" ;; #( *) : as_fn_error $? "CXX/MPICXX case failure" "$LINENO" 5 ;; esac fi ga_cxx="icpc pgCC pathCC sxc++ xlC_r xlC bgxlC_r bgxlC openCC sunCC crayc++ g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC" ga_mpicxx="mpic++ mpicxx mpiCC sxmpic++ hcp mpxlC_r mpxlC mpixlcxx_r mpixlcxx mpg++ mpc++ mpCC cmpic++ mpiFCC CC" if test x$with_mpi_wrappers = xyes; then : CXX_TO_TEST="$ga_mpicxx_pref $ga_mpicxx" else CXX_TO_TEST="$ga_cxx_pref $ga_cxx" fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in $CXX_TO_TEST do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CXX_TO_TEST do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi CXXFLAGS="$ga_save_CXXFLAGS" if test x$with_mpi_wrappers = xyes; then : # Find perl. # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Create inside.pl. rm -f inside.pl cat >inside.pl <<"EOF" #!/usr/bin/perl use strict; use warnings; my $numargs = $#ARGV + 1; if ($numargs != 2) { print "Usage: wrapped.txt naked.txt\n"; exit 1; } # Read each input file as a string (rather than a list). local $/=undef; open WRAPPED, "$ARGV[0]" or die "Could not open wrapped text file: $!"; my $wrapped_lines = ; close WRAPPED; open NAKED, "$ARGV[1]" or die "Could not open naked text file: $!"; my $naked_lines = ; close NAKED; # Replace newlines, + from wrapped and naked lines. $wrapped_lines =~ tr/\n+/ /; $naked_lines =~ tr/\n+/ /; # Remove whitespace from beginning of wrapped and naked lines. $wrapped_lines =~ s/^\s+//; $naked_lines =~ s/^\s+//; # Remove whitespace from end of wrapped and naked lines. $wrapped_lines =~ s/\s+$//; $naked_lines =~ s/\s+$//; # If either wrapped_lines or naked_lines are empty, this is an error. # It is assumed that the particular version string which created the input # files should generate SOMETHING. unless ($wrapped_lines) { exit 1; } unless ($naked_lines) { exit 1; } # Cray compilers append a timestamp into their version string. Remove it. if ($wrapped_lines =~ /\QCray\E/) { $wrapped_lines = substr $wrapped_lines, 0, -28; $naked_lines = substr $naked_lines, 0, -28; } # Can the naked lines be found within the wrapped lines? if ($wrapped_lines =~ /\Q$naked_lines\E/) { #print "Found as substring\n"; exit 0; } # Are the naked lines exactly the same as the wrapped lines? elsif ($wrapped_lines eq $naked_lines) { #print "Found equal\n"; exit 0; } else { #print "Not found\n"; exit 1; } EOF inside="$PERL inside.pl" wrapped="$CXX" case $wrapped in #( *_r) : compilers="bgxlC_r xlC_r" ;; #( *) : compilers="icpc pgCC pathCC sxc++ xlC bgxlC openCC sunCC crayc++ g++ c++ gpp aCC cxx cc++ cl.exe FCC KCC RCC CC" ;; #( *) : ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for base $wrapped compiler" >&5 $as_echo_n "checking for base $wrapped compiler... " >&6; } if ${ga_cv_mpicxx_naked+:} false; then : $as_echo_n "(cached) " >&6 else base="`$wrapped -show 2>/dev/null | sed 's/[ ].*$//' | head -1`" ga_save_CXX="$CXX" CXX="$base" # if -m32 or -m64 is present in the -show params, or separately, add it unwrapped_args="`$wrapped -show 2>/dev/null`" extra_arg="" for arg in $unwrapped_args $wrapped do case $arg in #( *-m32*) : extra_arg="-m32" ;; #( *-m64*) : extra_arg="-m64" ;; #( *) : ;; esac done if test "x$extra_arg" != x; then : base="$base $extra_arg" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ga_cv_mpicxx_naked="$base" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CXX="$ga_save_CXX" versions="--version -v -V -qversion" found_wrapped_version=0 # Try separating stdout and stderr. Only compare stdout. if test "x$ga_cv_mpicxx_naked" = x; then : # prepend any CC/CXX/F77 the user may have specified compilers="$ga_orig_CXX $compilers" echo "only comparing stdout" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err naked.txt naked.err if $wrapped $version 1>mpi.txt 2>mpi.err; then : found_wrapped_version=1 for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpicxx_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpicxx_naked" != x; then : break fi done fi # Perhaps none of the MPI compilers had a zero exit status (this is bad). # In this case we have to do a brute force match regardless of exit status. if test "x$found_wrapped_version" = x0; then : if test "x$ga_cv_mpicxx_naked" = x; then : echo "no zero exit status found for MPI compilers" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpicxx_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpicxx_naked" != x; then : break fi done fi fi # Try by combining stdout/err into one file. if test "x$ga_cv_mpicxx_naked" = x; then : echo "try combining stdout and stderr into one file" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt naked.txt if $wrapped $version 1>mpi.txt 2>&1; then : for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>&1; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpicxx_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpicxx_naked" != x; then : break fi done fi # If we got this far, then it's likely that the MPI compiler had a zero exit # status when it shouldn't have for one version flag, but later had a non-zero # exit status for a flag it shouldn't have. One false positive hid a false # negative. In this case, brute force compare all MPI compiler output against # all compiler output. if test "x$ga_cv_mpicxx_naked" = x; then : echo "we have a very badly behaving MPI compiler" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpicxx_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpicxx_naked" != x; then : break fi done fi rm -f mpi.txt mpi.err naked.txt naked.err fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_mpicxx_naked" >&5 $as_echo "$ga_cv_mpicxx_naked" >&6; } if test "x$ga_cv_mpicxx_naked" = x; then : as_fn_error $? "Could not determine the C++ compiler wrapped by MPI" "$LINENO" 5 else if test "x$ga_orig_CXX" != x && test "x$ga_orig_CXX" != "x$ga_cv_mpicxx_naked"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unwrapped $wrapped ($ga_cv_mpicxx_naked) does not match user-specified $ga_orig_CXX" >&5 $as_echo "$as_me: WARNING: unwrapped $wrapped ($ga_cv_mpicxx_naked) does not match user-specified $ga_orig_CXX" >&2;} fi fi rm -f inside.pl fi if test "x$enable_cxx" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler vendor" >&5 $as_echo_n "checking for C++ compiler vendor... " >&6; } if ${ga_cv_cxx_compiler_vendor+:} false; then : $as_echo_n "(cached) " >&6 else ga_save_ac_ext="$ac_ext" ga_cv_cxx_compiler_vendor=unknown ga_cpp_vendor_symbols= for vendor in intel ibm pathscale amd cray gnu sun hp dec borland comeau kai lcc metrowerks sgi microsoft watcom portland fujitsu do case $vendor in #( amd) : ga_cpp_vendor_symbols="defined(__OPEN64__)" ;; #( borland) : ga_cpp_vendor_symbols="defined(__BORLANDC__) || defined(__TURBOC__)" ;; #( comeau) : ga_cpp_vendor_symbols="defined(__COMO__)" ;; #( cray) : ga_cpp_vendor_symbols="defined(_CRAYC) || defined(_ADDR64)" ;; #( dec) : ga_cpp_vendor_symbols="defined(__DECC) || defined(__DECCXX) || defined(__DECC_VER) || defined(__DECCXX_VER)" ;; #( fujitsu) : ga_cpp_vendor_symbols="defined(__fcc__) || defined(__fcc_version__) || defined(_FCC_VER) || defined(__FCC_VER_)" ;; #( gnu) : ga_cpp_vendor_symbols="defined(__GNUC__)" ;; #( hp) : ga_cpp_vendor_symbols="defined(__HP_cc) || defined(__HP_aCC)" ;; #( ibm) : ga_cpp_vendor_symbols="defined(__xlc__) || defined(__xlC__) || defined(__IBMC__) || defined(__IBMCPP__)" ;; #( intel) : ga_cpp_vendor_symbols="defined(__ICC) || defined(__ECC) || defined(__INTEL_COMPILER)" ;; #( kai) : ga_cpp_vendor_symbols="defined(__KCC)" ;; #( lcc) : ga_cpp_vendor_symbols="defined(__LCC__)" ;; #( metrowerks) : ga_cpp_vendor_symbols="defined(__MWERKS__)" ;; #( microsoft) : ga_cpp_vendor_symbols="defined(_MSC_VER)" ;; #( pathscale) : ga_cpp_vendor_symbols="defined(__PATHCC__) || defined(__PATHSCALE__)" ;; #( portland) : ga_cpp_vendor_symbols="defined(__PGI)" ;; #( sgi) : ga_cpp_vendor_symbols="defined(__sgi) || defined(sgi)" ;; #( sun) : ga_cpp_vendor_symbols="defined(__SUNPRO_C) || defined(__SUNPRO_CC)" ;; #( watcom) : ga_cpp_vendor_symbols="defined(__WATCOMC__)" ;; #( *) : ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if !($ga_cpp_vendor_symbols) chokeonthis #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ga_cv_cxx_compiler_vendor=$vendor; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done ga_cpp_vendor_symbols= ac_ext="$ga_save_ac_ext" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_cxx_compiler_vendor" >&5 $as_echo "$ga_cv_cxx_compiler_vendor" >&6; } if test "x$enable_warnings" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ warning flags" >&5 $as_echo_n "checking for C++ warning flags... " >&6; } if ${ga_cv_cxx_warning_flags+:} false; then : $as_echo_n "(cached) " >&6 else ga_cv_cxx_warning_flags= fi { $as_echo "$as_me:${as_lineno-$LINENO}: ga_cv_cxx_warning_flags: $ga_cv_cxx_warning_flags" >&5 $as_echo "$ga_cv_cxx_warning_flags" >&6; } GA_CXX_WARN=$ga_cv_cxx_warning_flags fi ga_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$ga_cv_cxx_warning_flags $CXXFLAGS" if test "x$with_mpi" != xno; then : if test "x$with_mpi" != xno; then : ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a simple C++ MPI program works" >&5 $as_echo_n "checking whether a simple C++ MPI program works... " >&6; } if ${ga_cv_cxx_mpi_test+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ga_cv_cxx_mpi_test=yes else ga_cv_cxx_mpi_test=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext # That didn't work, so now let's try with our GA_MP_* flags. if test "x$ga_cv_cxx_mpi_test" = xno; then : ga_save_LIBS="$LIBS"; LIBS="$LIBS $GA_MP_LIBS" ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ga_cv_cxx_mpi_test=yes else ga_cv_cxx_mpi_test=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ga_save_LIBS" CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" fi # That didn't work, so now let's try with our GA_MP_* flags and various libs. if test "x$ga_cv_cxx_mpi_test" = xno; then : for lib in -lmpi -lmpich; do ga_save_LIBS="$LIBS"; LIBS="$LIBS $GA_MP_LIBS $lib" ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ga_cv_cxx_mpi_test=$lib; break else ga_cv_cxx_mpi_test=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ga_save_LIBS" CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" done LIBS="$ga_save_LIBS" CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_cxx_mpi_test" >&5 $as_echo "$ga_cv_cxx_mpi_test" >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu case $ga_cv_cxx_mpi_test in #( yes) : ;; #( no) : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "could not link simple C++ MPI program See \`config.log' for more details" "$LINENO" 5; } ;; #( *) : GA_MP_LIBS="$ga_cv_cxx_mpi_test" ;; #( *) : ;; esac fi fi # Checks for C++ header files. # Checks for C++ typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler implements namespaces" >&5 $as_echo_n "checking whether the compiler implements namespaces... " >&6; } if ${ga_cv_cxx_namespaces+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ namespace Outer { namespace Inner { int i = 0; }} int main () { using namespace Outer::Inner; return i; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ga_cv_cxx_namespaces=yes else ga_cv_cxx_namespaces=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_cxx_namespaces" >&5 $as_echo "$ga_cv_cxx_namespaces" >&6; } if test x$ga_cv_cxx_namespaces = xyes; then : $as_echo "#define HAVE_NAMESPACES 1" >>confdefs.h fi # Checks for C++ type sizes. # Checks for C++ library functions. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for specific C++ optimizations" >&5 $as_echo_n "checking for specific C++ optimizations... " >&6; } if ${ga_cv_cxx_opt+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$GA_CXXOPT" != x; then : ga_cv_cxx_opt="$GA_CXXOPT" else ga_cv_cxx_opt= fi if test "x$ga_cv_cxx_opt" = x && test "x$enable_opt" = xyes; then : case $ga_cv_target:$ga_cv_cxx_compiler_vendor:$host_cpu in #( LINUX:*:*) : ga_cv_cxx_opt="-O0" ;; #( NEC64:*:*) : ga_cv_cxx_opt="-Cvsafe -size_t64" ;; #( NEC:*:*) : ga_cv_cxx_opt="-Cvsafe" ;; #( *) : ga_cv_cxx_opt= ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_cxx_opt" >&5 $as_echo "$ga_cv_cxx_opt" >&6; } GA_CXXOPT=$ga_cv_cxx_opt CXXFLAGS="$ga_save_CXXFLAGS" fi # conditionals must be defined unconditionally if test x$ga_cv_cxx_namespaces = xyes; then CXX_NAMESPACES_TRUE= CXX_NAMESPACES_FALSE='#' else CXX_NAMESPACES_TRUE='#' CXX_NAMESPACES_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ######################################### # Assembler ######################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Assembler" >&5 $as_echo "$as_me: Assembler" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} if test "x$CCAS" = x; then : case $ga_cv_target in #( NEC|NEC64) : CCAS=sxas ;; #( *) : ;; esac fi if test "x$CCASFLAGS" = x; then : case $ga_cv_target in #( NEC) : CCASFLAGS= ;; #( NEC64) : CCASFLAGS="-h size_t64" ;; #( *) : ;; esac fi # By default we simply use the C compiler to build assembly code. test "${CCAS+set}" = set || CCAS=$CC test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS depcc="$CCAS" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CCAS_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CCAS_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CCAS_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CCAS_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 $as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then am__fastdepCCAS_TRUE= am__fastdepCCAS_FALSE='#' else am__fastdepCCAS_TRUE='#' am__fastdepCCAS_FALSE= fi ######################################### # Fortran compiler ######################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} if test "x$enable_f77" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: Fortran compiler" >&5 $as_echo "$as_me: Fortran compiler" >&6;} else { $as_echo "$as_me:${as_lineno-$LINENO}: Fortran compiler (disabled, but some tests still required)" >&5 $as_echo "$as_me: Fortran compiler (disabled, but some tests still required)" >&6;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ga_save_FFLAGS="$FFLAGS" case $ga_cv_target_base in #( BGP) : ga_mpif77_pref=mpixlf77_r;ga_f77_pref=bgxlf_r ;; #( BGL) : ga_mpif77_pref=mpxlf95; ga_f77_pref=blrts_xlf95 ;; #( *) : ;; esac # If FC is set, override F77. Similarly for MPIFC/MPIF77 and FCFLAGS/FFLAGS. if test "x$FC" != x; then : F77="$FC" fi if test "x$MPIFC" != x; then : MPIF77="$MPIFC" fi if test "x$FCFLAGS" != x; then : FFLAGS="$FCFLAGS" fi # In the case of using MPI wrappers, set F77=MPIF77 since F77 will override # absolutely everything in our list of compilers. # Save F77, just in case. if test x$with_mpi_wrappers = xyes; then : if test "x$F77" != "x$MPIF77"; then : ga_orig_F77="$F77" fi case x$F77:x$MPIF77 in #( x:x) : ;; #( x:x*) : F77="$MPIF77" ;; #( x*:x) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired but F77 is set while MPIF77 is unset." >&5 $as_echo "$as_me: WARNING: MPI compilers desired but F77 is set while MPIF77 is unset." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: F77 will be ignored during compiler selection, but will be" >&5 $as_echo "$as_me: WARNING: F77 will be ignored during compiler selection, but will be" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&5 $as_echo "$as_me: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: meant to set MPIF77 instead of or in addition to F77?" >&5 $as_echo "$as_me: WARNING: meant to set MPIF77 instead of or in addition to F77?" >&2;} F77= ;; #( x*:x*) : if test "x$F77" != "x$MPIF77"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired, MPIF77 and F77 are set, and MPIF77!=F77." >&5 $as_echo "$as_me: WARNING: MPI compilers desired, MPIF77 and F77 are set, and MPIF77!=F77." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Choosing MPIF77 over F77." >&5 $as_echo "$as_me: WARNING: Choosing MPIF77 over F77." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: F77 will be tested first during MPI compiler unwrapping." >&5 $as_echo "$as_me: WARNING: F77 will be tested first during MPI compiler unwrapping." >&2;} fi F77="$MPIF77" ;; #( *) : as_fn_error $? "F77/MPIF77 case failure" "$LINENO" 5 ;; esac fi ga_mpif95="mpif95 mpxlf95_r mpxlf95 ftn" ga_mpif90="mpif90 mpxlf90_r mpxlf90 mpf90 cmpif90c sxmpif90" ga_mpif77="mpif77 hf77 mpxlf_r mpxlf mpifrt mpf77 cmpifc" ga_f95="xlf95 pgf95 pathf95 ifort g95 f95 fort ifc efc openf95 sunf95 crayftn gfortran lf95 ftn" ga_f90="xlf90 f90 pgf90 pghpf pathf90 epcf90 sxf90 openf90 sunf90" ga_f77="xlf f77 frt pgf77 pathf77 g77 cf77 fort77 fl32 af77" if test x$with_mpi_wrappers = xyes; then : F77_TO_TEST="$ga_mpif77_pref $ga_mpif95 $ga_mpif90 $ga_mpif77" else F77_TO_TEST="$ga_f77_pref $ga_f95 $ga_f90 $ga_f77" fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $F77_TO_TEST do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_F77+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $F77" >&5 $as_echo "$F77" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in $F77_TO_TEST do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_F77+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_F77" >&5 $as_echo "$ac_ct_F77" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_F77" && break done if test "x$ac_ct_F77" = x; then F77="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac F77=$ac_ct_F77 fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran 77 compiler" >&5 $as_echo_n "checking whether we are using the GNU Fortran 77 compiler... " >&6; } if ${ac_cv_f77_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_compiler_gnu" >&5 $as_echo "$ac_cv_f77_compiler_gnu" >&6; } ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts -g" >&5 $as_echo_n "checking whether $F77 accepts -g... " >&6; } if ${ac_cv_prog_f77_g+:} false; then : $as_echo_n "(cached) " >&6 else FFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ac_cv_prog_f77_g=yes else ac_cv_prog_f77_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_g" >&5 $as_echo "$ac_cv_prog_f77_g" >&6; } if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi if test $ac_compiler_gnu = yes; then G77=yes else G77= fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu FFLAGS="$ga_save_FFLAGS" # If Fortran 77 compiler was not found, we disable support for it. if test "x$F77" = x; then : enable_f77=no fi # If Fortran 77 compiler does not work, we disable support for it. cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Fortran compiler does not work, disabling" >&5 $as_echo "$as_me: WARNING: Fortran compiler does not work, disabling" >&2;} enable_f77=no F77= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "x$enable_f77" = xyes; then : $as_echo "#define NOFORT 0" >>confdefs.h $as_echo "#define ENABLE_F77 1" >>confdefs.h else $as_echo "#define NOFORT 1" >>confdefs.h $as_echo "#define ENABLE_F77 0" >>confdefs.h fi if test "x$enable_f77" = xno; then NOFORT_TRUE= NOFORT_FALSE='#' else NOFORT_TRUE='#' NOFORT_FALSE= fi if test "x$enable_f77" = xyes; then ENABLE_F77_TRUE= ENABLE_F77_FALSE='#' else ENABLE_F77_TRUE='#' ENABLE_F77_FALSE= fi # Perform Fortran 77 tests only if enabled. if test "x$enable_f77" = xyes; then : if test x$with_mpi_wrappers = xyes; then : # Find perl. # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Create inside.pl. rm -f inside.pl cat >inside.pl <<"EOF" #!/usr/bin/perl use strict; use warnings; my $numargs = $#ARGV + 1; if ($numargs != 2) { print "Usage: wrapped.txt naked.txt\n"; exit 1; } # Read each input file as a string (rather than a list). local $/=undef; open WRAPPED, "$ARGV[0]" or die "Could not open wrapped text file: $!"; my $wrapped_lines = ; close WRAPPED; open NAKED, "$ARGV[1]" or die "Could not open naked text file: $!"; my $naked_lines = ; close NAKED; # Replace newlines, + from wrapped and naked lines. $wrapped_lines =~ tr/\n+/ /; $naked_lines =~ tr/\n+/ /; # Remove whitespace from beginning of wrapped and naked lines. $wrapped_lines =~ s/^\s+//; $naked_lines =~ s/^\s+//; # Remove whitespace from end of wrapped and naked lines. $wrapped_lines =~ s/\s+$//; $naked_lines =~ s/\s+$//; # If either wrapped_lines or naked_lines are empty, this is an error. # It is assumed that the particular version string which created the input # files should generate SOMETHING. unless ($wrapped_lines) { exit 1; } unless ($naked_lines) { exit 1; } # Cray compilers append a timestamp into their version string. Remove it. if ($wrapped_lines =~ /\QCray\E/) { $wrapped_lines = substr $wrapped_lines, 0, -28; $naked_lines = substr $naked_lines, 0, -28; } # Can the naked lines be found within the wrapped lines? if ($wrapped_lines =~ /\Q$naked_lines\E/) { #print "Found as substring\n"; exit 0; } # Are the naked lines exactly the same as the wrapped lines? elsif ($wrapped_lines eq $naked_lines) { #print "Found equal\n"; exit 0; } else { #print "Not found\n"; exit 1; } EOF inside="$PERL inside.pl" wrapped="$F77" case $wrapped in #( *_r) : compilers="bgxlf95_r xlf95_r bgxlf90_r xlf90_r bgxlf_r xlf_r" ;; #( *) : compilers="gfortran g95 bgxlf95 xlf95 f95 fort ifort ifc efc pgf95 pathf95 lf95 openf95 sunf95 crayftn bgxlf90 xlf90 f90 pgf90 pathf90 pghpf epcf90 sxf90 openf90 sunf90 g77 bgxlf xlf f77 frt pgf77 pathf77 cf77 fort77 fl32 af77" ;; #( *) : ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for base $wrapped compiler" >&5 $as_echo_n "checking for base $wrapped compiler... " >&6; } if ${ga_cv_mpif77_naked+:} false; then : $as_echo_n "(cached) " >&6 else base="`$wrapped -show 2>/dev/null | sed 's/[ ].*$//' | head -1`" ga_save_F77="$F77" F77="$base" # if -m32 or -m64 is present in the -show params, or separately, add it unwrapped_args="`$wrapped -show 2>/dev/null`" extra_arg="" for arg in $unwrapped_args $wrapped do case $arg in #( *-m32*) : extra_arg="-m32" ;; #( *-m64*) : extra_arg="-m64" ;; #( *) : ;; esac done if test "x$extra_arg" != x; then : base="$base $extra_arg" fi cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_cv_mpif77_naked="$base" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext F77="$ga_save_F77" versions="--version -v -V -qversion" found_wrapped_version=0 # Try separating stdout and stderr. Only compare stdout. if test "x$ga_cv_mpif77_naked" = x; then : # prepend any CC/CXX/F77 the user may have specified compilers="$ga_orig_F77 $compilers" echo "only comparing stdout" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err naked.txt naked.err if $wrapped $version 1>mpi.txt 2>mpi.err; then : found_wrapped_version=1 for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpif77_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpif77_naked" != x; then : break fi done fi # Perhaps none of the MPI compilers had a zero exit status (this is bad). # In this case we have to do a brute force match regardless of exit status. if test "x$found_wrapped_version" = x0; then : if test "x$ga_cv_mpif77_naked" = x; then : echo "no zero exit status found for MPI compilers" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpif77_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpif77_naked" != x; then : break fi done fi fi # Try by combining stdout/err into one file. if test "x$ga_cv_mpif77_naked" = x; then : echo "try combining stdout and stderr into one file" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt naked.txt if $wrapped $version 1>mpi.txt 2>&1; then : for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>&1; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpif77_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpif77_naked" != x; then : break fi done fi # If we got this far, then it's likely that the MPI compiler had a zero exit # status when it shouldn't have for one version flag, but later had a non-zero # exit status for a flag it shouldn't have. One false positive hid a false # negative. In this case, brute force compare all MPI compiler output against # all compiler output. if test "x$ga_cv_mpif77_naked" = x; then : echo "we have a very badly behaving MPI compiler" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpif77_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpif77_naked" != x; then : break fi done fi rm -f mpi.txt mpi.err naked.txt naked.err fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_mpif77_naked" >&5 $as_echo "$ga_cv_mpif77_naked" >&6; } if test "x$ga_cv_mpif77_naked" = x; then : as_fn_error $? "Could not determine the Fortran 77 compiler wrapped by MPI" "$LINENO" 5 else if test "x$ga_orig_F77" != x && test "x$ga_orig_F77" != "x$ga_cv_mpif77_naked"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unwrapped $wrapped ($ga_cv_mpif77_naked) does not match user-specified $ga_orig_F77" >&5 $as_echo "$as_me: WARNING: unwrapped $wrapped ($ga_cv_mpif77_naked) does not match user-specified $ga_orig_F77" >&2;} fi fi rm -f inside.pl fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 compiler vendor" >&5 $as_echo_n "checking for Fortran 77 compiler vendor... " >&6; } if ${ga_cv_f77_compiler_vendor+:} false; then : $as_echo_n "(cached) " >&6 else ga_save_ac_ext="$ac_ext" ac_ext=F ga_cv_f77_compiler_vendor=unknown ga_cpp_vendor_symbols= for vendor in intel ibm pathscale amd cray gnu sun hp dec borland comeau kai lcc metrowerks sgi microsoft watcom portland fujitsu do case $vendor in #( amd) : ga_cpp_vendor_symbols="defined(__OPEN64__)" ;; #( borland) : ga_cpp_vendor_symbols="defined(__BORLANDC__) || defined(__TURBOC__)" ;; #( comeau) : ga_cpp_vendor_symbols="defined(__COMO__)" ;; #( cray) : ga_cpp_vendor_symbols="defined(_CRAYC) || defined(_ADDR64)" ;; #( dec) : ga_cpp_vendor_symbols="defined(__DECC) || defined(__DECCXX) || defined(__DECC_VER) || defined(__DECCXX_VER)" ;; #( fujitsu) : ga_cpp_vendor_symbols="defined(__fcc__) || defined(__fcc_version__) || defined(_FCC_VER) || defined(__FCC_VER_)" ;; #( gnu) : ga_cpp_vendor_symbols="defined(__GNUC__)" ;; #( hp) : ga_cpp_vendor_symbols="defined(__HP_cc) || defined(__HP_aCC)" ;; #( ibm) : ga_cpp_vendor_symbols="defined(__xlc__) || defined(__xlC__) || defined(__IBMC__) || defined(__IBMCPP__)" ;; #( intel) : ga_cpp_vendor_symbols="defined(__ICC) || defined(__ECC) || defined(__INTEL_COMPILER)" ;; #( kai) : ga_cpp_vendor_symbols="defined(__KCC)" ;; #( lcc) : ga_cpp_vendor_symbols="defined(__LCC__)" ;; #( metrowerks) : ga_cpp_vendor_symbols="defined(__MWERKS__)" ;; #( microsoft) : ga_cpp_vendor_symbols="defined(_MSC_VER)" ;; #( pathscale) : ga_cpp_vendor_symbols="defined(__PATHCC__) || defined(__PATHSCALE__)" ;; #( portland) : ga_cpp_vendor_symbols="defined(__PGI)" ;; #( sgi) : ga_cpp_vendor_symbols="defined(__sgi) || defined(sgi)" ;; #( sun) : ga_cpp_vendor_symbols="defined(__SUNPRO_C) || defined(__SUNPRO_CC)" ;; #( watcom) : ga_cpp_vendor_symbols="defined(__WATCOMC__)" ;; #( *) : ;; esac cat > conftest.$ac_ext <<_ACEOF program main #if !($ga_cpp_vendor_symbols) chokeonthis #endif end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ga_cv_f77_compiler_vendor=$vendor; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done ga_cpp_vendor_symbols= ac_ext="$ga_save_ac_ext" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_compiler_vendor" >&5 $as_echo "$ga_cv_f77_compiler_vendor" >&6; } if test "x$enable_warnings" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 warning flags" >&5 $as_echo_n "checking for Fortran 77 warning flags... " >&6; } if ${ga_cv_f77_warning_flags+:} false; then : $as_echo_n "(cached) " >&6 else ga_cv_f77_warning_flags= fi { $as_echo "$as_me:${as_lineno-$LINENO}: ga_cv_f77_warning_flags: $ga_cv_f77_warning_flags" >&5 $as_echo "$ga_cv_f77_warning_flags" >&6; } GA_F_WARN=$ga_cv_f77_warning_flags fi ga_save_FFLAGS="$FFLAGS" FFLAGS="$ga_cv_f77_warning_flags $FFLAGS" # If F77 is enabled, perform a simple link test for MPI. if test "x$with_mpi" != xno; then : if test "x$enable_mpi_tests" = xyes; then : ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main include 'mpif.h' integer ierr call MPI_Init( ierr ) call MPI_Finalize( ierr ) end _ACEOF ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ga_cv_f77_mpi_test_link=no if test "x$ga_cv_f77_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a Fortran MPI program links natively" >&5 $as_echo_n "checking whether a Fortran MPI program links natively... " >&6; } if ac_fn_f77_try_link "$LINENO"; then : ga_cv_f77_mpi_test_link=yes GA_MP_LIBS= GA_MP_LDFLAGS= GA_MP_CPPFLAGS= else ga_cv_f77_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_mpi_test_link" >&5 $as_echo "$ga_cv_f77_mpi_test_link" >&6; } fi # That didn't work. Let's try adding our GA_MP_* flags. # The CPPFLAGS are added to FFLAGS since *.f doesn't use CPP. LIBS changes. ga_save_LIBS="$LIBS" ga_save_FFLAGS="$FFLAGS"; FFLAGS="$FFLAGS $GA_MP_CPPFLAGS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" if test "x$ga_cv_f77_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a Fortran MPI program links with additional env" >&5 $as_echo_n "checking whether a Fortran MPI program links with additional env... " >&6; } LIBS="$LIBS $GA_MP_LIBS" if ac_fn_f77_try_link "$LINENO"; then : ga_cv_f77_mpi_test_link=yes else ga_cv_f77_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_mpi_test_link" >&5 $as_echo "$ga_cv_f77_mpi_test_link" >&6; } fi # That didn't work, so now let's try with specific libs. if test "x$ga_cv_f77_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mvapich libraries" >&5 $as_echo_n "checking for mvapich libraries... " >&6; } for lib in "-lmpichf90nc -lmpichfarg -lmpich -lpthread" "-lmpichf90 -lmpichfarg -lmpich -pthread" "-lmpichf90nc -lmpichfarg -lmpich" "-lmpichf90 -lmpichfarg -lmpich" "-lmpichfarg -lmpich -lpthread" "-lmpichfarg -lmpich" do LIBS="$LIBS $lib" if ac_fn_f77_try_link "$LINENO"; then : ga_cv_f77_mpi_test_link="$lib"; break else ga_cv_f77_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_mpi_test_link" >&5 $as_echo "$ga_cv_f77_mpi_test_link" >&6; } fi if test "x$ga_cv_f77_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mpich libraries" >&5 $as_echo_n "checking for mpich libraries... " >&6; } for lib in "-lmpichf90 -lmpich -lpthread" "-lmpichf90 -lmpich" "-lmpich -pthread" "-lmpich" do LIBS="$LIBS $lib" if ac_fn_f77_try_link "$LINENO"; then : ga_cv_f77_mpi_test_link="$lib"; break else ga_cv_f77_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_mpi_test_link" >&5 $as_echo "$ga_cv_f77_mpi_test_link" >&6; } fi if test "x$ga_cv_f77_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hpmpi libraries" >&5 $as_echo_n "checking for hpmpi libraries... " >&6; } for lib in "-lhpmpio -lhpmpi" do LIBS="$LIBS $lib" if ac_fn_f77_try_link "$LINENO"; then : ga_cv_f77_mpi_test_link="$lib"; break else ga_cv_f77_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_mpi_test_link" >&5 $as_echo "$ga_cv_f77_mpi_test_link" >&6; } fi if test "x$ga_cv_f77_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intelmpi libraries" >&5 $as_echo_n "checking for intelmpi libraries... " >&6; } for lib in "-lmpi -lmpigf -lmpigi -lpthread" "-lmpi -lmpigf -lmpigi" do LIBS="$LIBS $lib" if ac_fn_f77_try_link "$LINENO"; then : ga_cv_f77_mpi_test_link="$lib"; break else ga_cv_f77_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_mpi_test_link" >&5 $as_echo "$ga_cv_f77_mpi_test_link" >&6; } fi if test "x$ga_cv_f77_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openmpi libraries" >&5 $as_echo_n "checking for openmpi libraries... " >&6; } for lib in "-lmpi_f90 -lmpi_f77 -lmpi" "-lmpi_f77 -lmpi" do LIBS="$LIBS $lib" if ac_fn_f77_try_link "$LINENO"; then : ga_cv_f77_mpi_test_link="$lib"; break else ga_cv_f77_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_mpi_test_link" >&5 $as_echo "$ga_cv_f77_mpi_test_link" >&6; } fi rm -f conftest.$ac_ext LIBS="$ga_save_LIBS" LDFLAGS="$ga_save_LDFLAGS" FFLAGS="$ga_save_FFLAGS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ga_cv_f77_mpi_test_link in #( yes) : ;; #( no) : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "could not link simple Fortran MPI program See \`config.log' for more details" "$LINENO" 5; } ;; #( *) : GA_MP_LIBS="$ga_cv_f77_mpi_test_link" ;; #( *) : ;; esac else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main include 'mpif.h' integer ierr call MPI_Init( ierr ) call MPI_Finalize( ierr ) end _ACEOF ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a simple Fortran MPI program compiles" >&5 $as_echo_n "checking whether a simple Fortran MPI program compiles... " >&6; } if ${ga_cv_f77_mpi_test_compile+:} false; then : $as_echo_n "(cached) " >&6 else ga_save_FFLAGS="$FFLAGS"; FFLAGS="$FFLAGS $GA_MP_CPPFLAGS" if ac_fn_f77_try_compile "$LINENO"; then : ga_cv_f77_mpi_test_compile=yes else ga_cv_f77_mpi_test_compile=no fi rm -f core conftest.err conftest.$ac_objext FFLAGS="$ga_save_FFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_mpi_test_compile" >&5 $as_echo "$ga_cv_f77_mpi_test_compile" >&6; } rm -f conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "x$ga_cv_f77_mpi_test_compile" = xno; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "could not compile simple Fortran MPI program See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 flag to suppress info messages" >&5 $as_echo_n "checking for Fortran 77 flag to suppress info messages... " >&6; } if ${ga_cv_f77_suppress+:} false; then : $as_echo_n "(cached) " >&6 else ga_save_FFLAGS="$FFLAGS" ga_save_werror_flag=$ac_f77_werror_flag ac_f77_werror_flag=yes for flag in none -qsuppress=cmpmsg ; do FFLAGS=$ga_save_FFLAGS if test "x$flag" != xnone; then : FFLAGS="$FFLAGS $flag" fi cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_cv_f77_suppress="$flag"; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done FFLAGS=$ga_save_FFLAGS ac_f77_werror_flag=$ga_save_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_suppress" >&5 $as_echo "$ga_cv_f77_suppress" >&6; } ga_mpi_unwrap_push_save_CC="$CC" ga_mpi_unwrap_push_save_CXX="$CXX" ga_mpi_unwrap_push_save_F77="$F77" ga_mpi_unwrap_push_save_FC="$FC" if test "x$ga_cv_mpic_naked" != x; then : CC="$ga_cv_mpic_naked" fi if test "x$ga_cv_mpicxx_naked" != x; then : CXX="$ga_cv_mpicxx_naked" fi if test "x$ga_cv_mpif77_naked" != x; then : F77="$ga_cv_mpif77_naked" fi if test "x$ga_cv_mpifc_naked" != x; then : FC="$ga_cv_mpifc_naked" fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $F77" >&5 $as_echo_n "checking how to get verbose linking output from $F77... " >&6; } if ${ac_cv_prog_f77_v+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ac_cv_prog_f77_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_verb" eval "set x $ac_link" shift $as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` $as_echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_f77_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_f77_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_f77_v"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $F77" >&5 $as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 $as_echo "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_v" >&5 $as_echo "$ac_cv_prog_f77_v" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 libraries of $F77" >&5 $as_echo_n "checking for Fortran 77 libraries of $F77... " >&6; } if ${ac_cv_f77_libs+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$FLIBS" != "x"; then ac_cv_f77_libs="$FLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_cv_prog_f77_v" eval "set x $ac_link" shift $as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` $as_echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac ac_cv_f77_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_f77_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) case $host_os in *cygwin*) ;; *) ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_arg="$ac_arg $ac_j" ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`$as_echo "$ac_f77_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_libs" >&5 $as_echo "$ac_cv_f77_libs" >&6; } FLIBS="$ac_cv_f77_libs" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu CC="$ga_mpi_unwrap_push_save_CC" CXX="$ga_mpi_unwrap_push_save_CXX" F77="$ga_mpi_unwrap_push_save_F77" FC="$ga_mpi_unwrap_push_save_FC" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether FLIBS needs -lgcc_s" >&5 $as_echo_n "checking whether FLIBS needs -lgcc_s... " >&6; } if ${ga_cv_flibs_gcc_s+:} false; then : $as_echo_n "(cached) " >&6 else happy=yes ga_save_LIBS="$LIBS"; LIBS="$LIBS $FLIBS" ga_save_FLIBS="$FLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_cv_flibs_gcc_s=no else LIBS="$LIBS -lgcc_s" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : FLIBS="$FLIBS -lgcc_s" ga_cv_flibs_gcc_s=yes else happy=no FLIBS="$ga_save_FLIBS" ga_cv_flibs_gcc_s=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ga_save_LIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_flibs_gcc_s" >&5 $as_echo "$ga_cv_flibs_gcc_s" >&6; } if test "x$happy" = xno; then : { ac_cv_f77_libs=; unset ac_cv_f77_libs;} { FLIBS=; unset FLIBS;} { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $F77" >&5 $as_echo_n "checking how to get verbose linking output from $F77... " >&6; } if ${ac_cv_prog_f77_v+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ac_cv_prog_f77_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_verb" eval "set x $ac_link" shift $as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` $as_echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_f77_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_f77_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_f77_v"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $F77" >&5 $as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 $as_echo "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_v" >&5 $as_echo "$ac_cv_prog_f77_v" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 libraries of $F77" >&5 $as_echo_n "checking for Fortran 77 libraries of $F77... " >&6; } if ${ac_cv_f77_libs+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$FLIBS" != "x"; then ac_cv_f77_libs="$FLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_cv_prog_f77_v" eval "set x $ac_link" shift $as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` $as_echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac ac_cv_f77_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_f77_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) test x"$CYGWIN" != xyes && ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_arg="$ac_arg $ac_j" ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" fi done ;; -Y*) for ac_j in `$as_echo "$ac_arg" | sed -e 's/-Y/-L/;s/"//g;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_arg="$ac_arg $ac_j" ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`$as_echo "$ac_f77_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_libs" >&5 $as_echo "$ac_cv_f77_libs" >&6; } FLIBS="$ac_cv_f77_libs" ga_save_LIBS="$LIBS"; LIBS="$LIBS $FLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : happy=yes else happy=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ga_save_LIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu fi if test "x$happy" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: FLIBS does not work" >&5 $as_echo "$as_me: WARNING: FLIBS does not work" >&2;} fi # Check whether --enable-underscoring was given. if test "${enable_underscoring+set}" = set; then : enableval=$enable_underscoring; fi if test "x$enable_underscoring" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $F77 flag to add single underscore to external names" >&5 $as_echo_n "checking for $F77 flag to add single underscore to external names... " >&6; } if ${ga_cv_f77_underscore_flag+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ void my_sub_() {} _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS="$LIBS" LIBS="cfortran_test.$ac_objext $LIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu for ga_flag in none -qextname -qEXTNAME -funderscoring -fno-second-underscore -f +ppu ; do ga_save_FFLAGS="$FFLAGS" if test "x$ga_flag" != xnone; then : FFLAGS="$FFLAGS $ga_flag" fi cat > conftest.$ac_ext <<_ACEOF program main call my_sub end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_cv_f77_underscore_flag="$ga_flag" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext FFLAGS="$ga_save_FFLAGS" if test "x$ga_cv_f77_underscore_flag" != x; then : break fi done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$ga_save_LIBS" rm -f cfortran_test.$ac_objext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_underscore_flag" >&5 $as_echo "$ga_cv_f77_underscore_flag" >&6; } if test "x$ga_cv_f77_underscore_flag" != xnone; then : if test "x$ga_cv_f77_underscore_flag" != x; then : FFLAGS="$FFLAGS $ga_cv_f77_underscore_flag" fi fi fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran 77 libraries" >&5 $as_echo_n "checking for dummy main to link with Fortran 77 libraries... " >&6; } if ${ac_cv_f77_dummy_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_f77_dm_save_LIBS=$LIBS LIBS="$LIBS $FLIBS" ac_fortran_dm_var=F77_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_fortran_dummy_main=none else ac_cv_fortran_dummy_main=unknown fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define $ac_fortran_dm_var $ac_func #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_cv_f77_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_f77_dm_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_dummy_main" >&5 $as_echo "$ac_cv_f77_dummy_main" >&6; } F77_DUMMY_MAIN=$ac_cv_f77_dummy_main if test "$F77_DUMMY_MAIN" != unknown; then : if test $F77_DUMMY_MAIN != none; then cat >>confdefs.h <<_ACEOF #define F77_DUMMY_MAIN $F77_DUMMY_MAIN _ACEOF if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then $as_echo "#define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 name-mangling scheme" >&5 $as_echo_n "checking for Fortran 77 name-mangling scheme... " >&6; } if ${ac_cv_f77_mangling+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_f77_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_f77_mangling="$ac_cv_f77_mangling, no underscore" else ac_cv_f77_mangling="$ac_cv_f77_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_f77_mangling="$ac_cv_f77_mangling, no extra underscore" else ac_cv_f77_mangling="$ac_cv_f77_mangling, extra underscore" fi else ac_cv_f77_mangling="unknown" fi else ac_cv_f77_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See \`config.log' for more details" "$LINENO" 5; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_mangling" >&5 $as_echo "$ac_cv_f77_mangling" >&6; } ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in "lower case, no underscore, no extra underscore") $as_echo "#define F77_FUNC(name,NAME) name" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") $as_echo "#define F77_FUNC(name,NAME) name" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") $as_echo "#define F77_FUNC(name,NAME) name ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") $as_echo "#define F77_FUNC(name,NAME) name ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") $as_echo "#define F77_FUNC(name,NAME) NAME" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") $as_echo "#define F77_FUNC(name,NAME) NAME" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") $as_echo "#define F77_FUNC(name,NAME) NAME ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") $as_echo "#define F77_FUNC(name,NAME) NAME ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 $as_echo "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to pass symbols to preprocessed $F77" >&5 $as_echo_n "checking how to pass symbols to preprocessed $F77... " >&6; } if ${ga_cv_f77_cpp_symbol+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=F for symbol in -D -WF,-D -Wp,-D do ga_save_CPPFLAGS="$CPPFLAGS" ga_save_FFLAGS="$FFLAGS" CPPFLAGS="$CPPFLAGS ${symbol}GABLAHBLAH" FFLAGS="$CPPFLAGS $FFLAGS" cat > conftest.$ac_ext <<_ACEOF #ifndef GABLAHBLAH this is an error #endif end program _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ga_cv_f77_cpp_symbol="$symbol" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ga_save_CPPFLAGS" FFLAGS="$ga_save_FFLAGS" if test "x$ga_cv_f77_cpp_symbol" != x; then : break fi done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_cpp_symbol" >&5 $as_echo "$ga_cv_f77_cpp_symbol" >&6; } if test "x$ga_cv_f77_cpp_symbol" = x; then : as_fn_error $? "don't know how to pass symbols to preprocessed Fortran" "$LINENO" 5 fi case $ga_cv_f77_cpp_symbol in #( -D) : ;; #( *) : FFLAGS="$FFLAGS ${ga_cv_f77_cpp_symbol}HAVE_CONFIG_H" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 needs a flag to compile fixed format source" >&5 $as_echo_n "checking whether $F77 needs a flag to compile fixed format source... " >&6; } if ${ga_cv_f77_fixed_flag+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu for testflag in none -ffixed-form -qfixed -Mfixed -fixedform "-f fixed" +source=fixed -fix ; do ga_save_FFLAGS=$FFLAGS if test "x$testflag" != xnone; then : FFLAGS="$FFLAGS $testflag" fi cat > conftest.$ac_ext <<_ACEOF c some comment end program _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ga_cv_f77_fixed_flag=$testflag fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext FFLAGS=$ga_save_FFLAGS if test "x$ga_cv_f77_fixed_flag" != x; then : break fi done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_fixed_flag" >&5 $as_echo "$ga_cv_f77_fixed_flag" >&6; } if test "x$ga_cv_f77_fixed_flag" != xnone; then : if test "x$ga_cv_f77_fixed_flag" != x; then : FFLAGS="$FFLAGS $ga_cv_f77_fixed_flag" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 needs a flag to compile inconsistent types" >&5 $as_echo_n "checking whether $F77 needs a flag to compile inconsistent types... " >&6; } if ${ga_cv_f77_mismatch_type_flag+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu for testflag in none "-mismatch_all -dusty" do ga_save_FFLAGS="$FFLAGS" if test "x$testflag" != xnone; then : FFLAGS="$FFLAGS $testflag" fi cat > conftest.$ac_ext <<_ACEOF integer function the_test () implicit none logical foo external foo character*1 byte_mb integer int_mb the_test = 0 if (foo(byte_mb)) return if (foo( int_mb)) return the_test = 1 return end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ga_cv_f77_mismatch_type_flag="$testflag" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext FFLAGS="$ga_save_FFLAGS" if test "x$ga_cv_f77_mismatch_type_flag" != x; then : break fi done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_mismatch_type_flag" >&5 $as_echo "$ga_cv_f77_mismatch_type_flag" >&6; } if test "x$ga_cv_f77_mismatch_type_flag" != xnone; then : if test "x$ga_cv_f77_mismatch_type_flag" != x; then : FFLAGS="$FFLAGS $ga_cv_f77_mismatch_type_flag" fi fi # Check whether --enable-i4 was given. if test "${enable_i4+set}" = set; then : enableval=$enable_i4; enable_i4=yes fi # Check whether --enable-i8 was given. if test "${enable_i8+set}" = set; then : enableval=$enable_i8; enable_i8=yes fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_f77_integer_size" "$ac_includes_default"; then : else ga_f77_integer_size=0 fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for desired Fortran INTEGER size" >&5 $as_echo_n "checking for desired Fortran INTEGER size... " >&6; } if ${ga_cv_f77_integer_size+:} false; then : $as_echo_n "(cached) " >&6 else if test x$enable_i4 = xyes; then : if test x$enable_i8 = xyes; then : as_fn_error $? "Cannot enable both i4 and i8" "$LINENO" 5 else ga_cv_f77_integer_size=4 fi else if test x$enable_i8 = xyes; then : ga_cv_f77_integer_size=8 else ga_cv_f77_integer_size=$ga_f77_integer_size fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_integer_size" >&5 $as_echo "$ga_cv_f77_integer_size" >&6; } # Now determine the correct compiler flag to adjust the integer size. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for INTEGER size compile flag" >&5 $as_echo_n "checking for INTEGER size compile flag... " >&6; } if ${ga_cv_f77_integer_size_flag+:} false; then : $as_echo_n "(cached) " >&6 else case $cross_compiling:$ga_cv_f77_integer_size in #( yes:4) : ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ga_result= ga_save_FFLAGS="$FFLAGS" ga_save_suppress_FFLAGS="$FFLAGS" ga_save_werror_flag=$ac_f77_werror_flag ac_f77_werror_flag=yes if test "x$ga_cv_f77_suppress" != xnone; then : ga_save_suppress_FFLAGS="$FFLAGS $ga_cv_f77_suppress" fi if test "x$FFLAG_INT" != x; then : FFLAGS="$ga_save_suppress_FFLAGS $FFLAG_INT" cat > conftest.$ac_ext <<_ACEOF program main integer i end program _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_result=$flag fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test "x$ga_result" = x; then : for flag in -fdefault-integer-4 -qintsize=4 "-integer-size 32" -CcdII4 "-s integer32" -xtypemap=integer:32 -i4 +i4 do FFLAGS="$ga_save_suppress_FFLAGS $flag" cat > conftest.$ac_ext <<_ACEOF program main integer i end program _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ac_ext=F cat > conftest.$ac_ext <<_ACEOF program main integer i end program _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_result=$flag; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=f fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi ac_f77_werror_flag=$ga_save_werror_flag FFLAGS="$ga_save_FFLAGS" ga_cv_f77_integer_size_flag="$ga_result" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ;; #( yes:8) : ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ga_result= ga_save_FFLAGS="$FFLAGS" ga_save_suppress_FFLAGS="$FFLAGS" ga_save_werror_flag=$ac_f77_werror_flag ac_f77_werror_flag=yes if test "x$ga_cv_f77_suppress" != xnone; then : ga_save_suppress_FFLAGS="$FFLAGS $ga_cv_f77_suppress" fi if test "x$FFLAG_INT" != x; then : FFLAGS="$ga_save_suppress_FFLAGS $FFLAG_INT" cat > conftest.$ac_ext <<_ACEOF program main integer i end program _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_result=$flag fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test "x$ga_result" = x; then : for flag in -fdefault-integer-8 -qintsize=8 "-integer-size 64" -CcdII8 "-s integer64" -xtypemap=integer:64 -i8 +i8 do FFLAGS="$ga_save_suppress_FFLAGS $flag" cat > conftest.$ac_ext <<_ACEOF program main integer i end program _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ac_ext=F cat > conftest.$ac_ext <<_ACEOF program main integer i end program _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_result=$flag; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=f fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi ac_f77_werror_flag=$ga_save_werror_flag FFLAGS="$ga_save_FFLAGS" ga_cv_f77_integer_size_flag="$ga_result" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ;; #( *:4) : for flag in none $FFLAG_INT -fdefault-integer-4 -qintsize=4 "-integer-size 32" -CcdII4 "-s integer32" -xtypemap=integer:32 -i4 +i4 do ga_save_FFLAGS="$FFLAGS" if test "x$flag" != xnone; then : FFLAGS="$flag $FFLAGS" fi sizeof_integer=0 ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SIZE" ;; lower*) ac_val="size" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac size="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef __cplusplus extern "C" { #endif void $size(char *a, char *b) { long diff = (long) (b - a); FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%ld\n", diff); fclose(f); } #ifdef __cplusplus } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $CLIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat > conftest.$ac_ext <<_ACEOF program main external size INTEGER x(2) call size(x(1),x(2)) end _ACEOF if ac_fn_f77_try_run "$LINENO"; then : sizeof_integer=`cat conftestval` else sizeof_integer=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$ga_save_LIBS rm -f cfortran_test* else sizeof_integer=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu rm -rf conftest* FFLAGS="$ga_save_FFLAGS" if test x$sizeof_integer = x4; then : ga_cv_f77_integer_size_flag=$flag; break fi done ;; #( *:8) : for flag in none $FFLAG_INT -fdefault-integer-8 -qintsize=8 "-integer-size 64" -CcdII8 "-s integer64" -xtypemap=integer:64 -i8 +i8 do ga_save_FFLAGS="$FFLAGS" if test "x$flag" != xnone; then : FFLAGS="$flag $FFLAGS" fi sizeof_integer=0 ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SIZE" ;; lower*) ac_val="size" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac size="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef __cplusplus extern "C" { #endif void $size(char *a, char *b) { long diff = (long) (b - a); FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%ld\n", diff); fclose(f); } #ifdef __cplusplus } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $CLIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat > conftest.$ac_ext <<_ACEOF program main external size INTEGER x(2) call size(x(1),x(2)) end _ACEOF if ac_fn_f77_try_run "$LINENO"; then : sizeof_integer=`cat conftestval` else sizeof_integer=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$ga_save_LIBS rm -f cfortran_test* else sizeof_integer=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu rm -rf conftest* FFLAGS="$ga_save_FFLAGS" if test x$sizeof_integer = x8; then : ga_cv_f77_integer_size_flag=$flag; break fi done ;; #( *) : ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_integer_size_flag" >&5 $as_echo "$ga_cv_f77_integer_size_flag" >&6; } if test "x$ga_cv_f77_integer_size_flag" != x; then : if test "x$ga_cv_f77_integer_size_flag" != xnone; then : FFLAG_INT=$ga_cv_f77_integer_size_flag fi fi if test "x$ga_cv_f77_integer_size" = x8; then : if test "x$ga_cv_f77_integer_size_flag" = x; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >&5 $as_echo "$as_me: WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to find a flag to promote Fortran integers" >&5 $as_echo "$as_me: WARNING: Unable to find a flag to promote Fortran integers" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: INTEGER*8 promotion is not supported" >&5 $as_echo "$as_me: WARNING: INTEGER*8 promotion is not supported" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >&5 $as_echo "$as_me: WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >&2;} fi fi # Checks for Fortran typedefs, structures, and compiler characteristics. # Checks for Fortran type sizes. ga_save_FFLAGS="$FFLAGS"; FFLAGS="$FFLAGS $FFLAG_INT" { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of Fortran INTEGER" >&5 $as_echo_n "checking size of Fortran INTEGER... " >&6; } if ${ga_cv_f77_sizeof_INTEGER+:} false; then : $as_echo_n "(cached) " >&6 else if test x$cross_compiling = xyes; then : ga_cv_f77_sizeof_INTEGER=$ga_cv_f77_integer_size else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SIZE" ;; lower*) ac_val="size" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac size="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef __cplusplus extern "C" { #endif void $size(char *a, char *b) { long diff = (long) (b - a); FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%ld\n", diff); fclose(f); } #ifdef __cplusplus } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $CLIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat > conftest.$ac_ext <<_ACEOF program main external size INTEGER x(2) call size(x(1),x(2)) end _ACEOF if ac_fn_f77_try_run "$LINENO"; then : ga_cv_f77_sizeof_INTEGER=`cat conftestval` else ga_cv_f77_sizeof_INTEGER=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$ga_save_LIBS rm -f cfortran_test* else ga_cv_f77_sizeof_INTEGER=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu rm -rf conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_sizeof_INTEGER" >&5 $as_echo "$ga_cv_f77_sizeof_INTEGER" >&6; } if test x$cross_compiling = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot determine size of INTEGER when cross-compiling." >&5 $as_echo "$as_me: WARNING: Cannot determine size of INTEGER when cross-compiling." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Defaulting to $ga_cv_f77_integer_size" >&5 $as_echo "$as_me: WARNING: Defaulting to $ga_cv_f77_integer_size" >&2;} fi cat >>confdefs.h <<_ACEOF #define SIZEOF_F77_INTEGER $ga_cv_f77_sizeof_INTEGER _ACEOF FFLAGS="$ga_save_FFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of Fortran REAL" >&5 $as_echo_n "checking size of Fortran REAL... " >&6; } if ${ga_cv_f77_sizeof_REAL+:} false; then : $as_echo_n "(cached) " >&6 else if test x$cross_compiling = xyes; then : ga_cv_f77_sizeof_REAL=4 else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SIZE" ;; lower*) ac_val="size" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac size="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef __cplusplus extern "C" { #endif void $size(char *a, char *b) { long diff = (long) (b - a); FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%ld\n", diff); fclose(f); } #ifdef __cplusplus } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $CLIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat > conftest.$ac_ext <<_ACEOF program main external size REAL x(2) call size(x(1),x(2)) end _ACEOF if ac_fn_f77_try_run "$LINENO"; then : ga_cv_f77_sizeof_REAL=`cat conftestval` else ga_cv_f77_sizeof_REAL=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$ga_save_LIBS rm -f cfortran_test* else ga_cv_f77_sizeof_REAL=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu rm -rf conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_sizeof_REAL" >&5 $as_echo "$ga_cv_f77_sizeof_REAL" >&6; } if test x$cross_compiling = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot determine size of REAL when cross-compiling." >&5 $as_echo "$as_me: WARNING: Cannot determine size of REAL when cross-compiling." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Defaulting to 4" >&5 $as_echo "$as_me: WARNING: Defaulting to 4" >&2;} fi cat >>confdefs.h <<_ACEOF #define SIZEOF_F77_REAL $ga_cv_f77_sizeof_REAL _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of Fortran DOUBLE PRECISION" >&5 $as_echo_n "checking size of Fortran DOUBLE PRECISION... " >&6; } if ${ga_cv_f77_sizeof_DOUBLE_PRECISION+:} false; then : $as_echo_n "(cached) " >&6 else if test x$cross_compiling = xyes; then : ga_cv_f77_sizeof_DOUBLE_PRECISION=8 else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SIZE" ;; lower*) ac_val="size" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac size="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef __cplusplus extern "C" { #endif void $size(char *a, char *b) { long diff = (long) (b - a); FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%ld\n", diff); fclose(f); } #ifdef __cplusplus } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $CLIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat > conftest.$ac_ext <<_ACEOF program main external size DOUBLE PRECISION x(2) call size(x(1),x(2)) end _ACEOF if ac_fn_f77_try_run "$LINENO"; then : ga_cv_f77_sizeof_DOUBLE_PRECISION=`cat conftestval` else ga_cv_f77_sizeof_DOUBLE_PRECISION=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$ga_save_LIBS rm -f cfortran_test* else ga_cv_f77_sizeof_DOUBLE_PRECISION=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu rm -rf conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_sizeof_DOUBLE_PRECISION" >&5 $as_echo "$ga_cv_f77_sizeof_DOUBLE_PRECISION" >&6; } if test x$cross_compiling = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot determine size of DOUBLE PRECISION when cross-compiling." >&5 $as_echo "$as_me: WARNING: Cannot determine size of DOUBLE PRECISION when cross-compiling." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Defaulting to 8" >&5 $as_echo "$as_me: WARNING: Defaulting to 8" >&2;} fi cat >>confdefs.h <<_ACEOF #define SIZEOF_F77_DOUBLE_PRECISION $ga_cv_f77_sizeof_DOUBLE_PRECISION _ACEOF # Checks for Fortran library functions. for ac_func in dtime etime do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_f77_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 0 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $F77 flush routine" >&5 $as_echo_n "checking for $F77 flush routine... " >&6; } if ${ga_cv_f77_flush+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu for testflag in none -qextname=flush ; do ga_save_FFLAGS=$FFLAGS if test "x$testflag" != xnone; then : FFLAGS="$FFLAGS $testflag" fi cat > conftest.$ac_ext <<_ACEOF call flush(13) end program _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_cv_f77_flush_flag=$testflag fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext FFLAGS=$ga_save_FFLAGS if test "x$ga_cv_f77_flush_flag" != x; then : break fi done if test "x$ga_cv_f77_flush_flag" != x; then : ga_cv_f77_flush=flush else cat > conftest.$ac_ext <<_ACEOF call forflush(13) end program _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_cv_f77_flush=forflush fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_flush" >&5 $as_echo "$ga_cv_f77_flush" >&6; } if test "x$ga_cv_f77_flush" != x; then : cat >>confdefs.h <<_ACEOF #define F77_FLUSH $ga_cv_f77_flush _ACEOF $as_echo "#define HAVE_F77_FLUSH 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not determine name of $F77 flush routine" >&5 $as_echo "$as_me: WARNING: Could not determine name of $F77 flush routine" >&2;} $as_echo "#define HAVE_F77_FLUSH 0" >>confdefs.h fi if test "x$ga_cv_f77_flush" = xflush; then : if test "x$ga_cv_f77_flush_flag" != xnone; then : FFLAGS="$FFLAGS $ga_cv_f77_flush_flag" fi fi # The rest of the Fortran 77 to C compatibility checks. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for flag to disable $F77 main when linking with C main" >&5 $as_echo_n "checking for flag to disable $F77 main when linking with C main... " >&6; } if ${ga_cv_fld_nomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu for flag in none -nofor-main -nofor_main -Mnomain -mlcmain=main; do ga_save_FFLAGS=$FFLAGS if test "x$flag" != xnone; then : FFLAGS="$FFLAGS $flag" fi cat > conftest.$ac_ext <<_ACEOF subroutine donothing() end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_cv_fld_nomain=$flag fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext FFLAGS=$ga_save_FFLAGS if test "x$ga_cv_fld_nomain" != x; then : break fi done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$ga_save_LIBS rm -f cfortran_test.$ac_objext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_fld_nomain" >&5 $as_echo "$ga_cv_fld_nomain" >&6; } if test "x$ga_cv_fld_nomain" != xnone; then : FLD_NOMAIN=$ga_cv_fld_nomain fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for routines to access the command line from Fortran" >&5 $as_echo_n "checking for routines to access the command line from Fortran... " >&6; } # User-specified values # Standard practice, uppercase if test "x$ga_f77_getarg" = x; then : ga_fxx_module= ga_f77_getarg_decl="external GETARG" ga_f77_getarg=GETARG ga_f77_getarg_args="i,s" ga_f77_iargc=IARGC cat > conftest.$ac_ext <<_ACEOF program main $ga_fxx_module integer i, j, l, ier character*20 s $ga_f77_getarg_decl i = 0 call $ga_f77_getarg($ga_f77_getarg_args) i=$ga_f77_iargc() if (i .gt. 1) then j = i - $ga_f77_iargc() j = 1.0 / j endif end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : else ga_f77_getarg= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # Standard practice, lowercase if test "x$ga_f77_getarg" = x; then : ga_fxx_module= ga_f77_getarg_decl="external getarg" ga_f77_getarg=getarg ga_f77_getarg_args="i,s" ga_f77_iargc=iargc cat > conftest.$ac_ext <<_ACEOF program main $ga_fxx_module integer i, j, l, ier character*20 s $ga_f77_getarg_decl i = 0 call $ga_f77_getarg($ga_f77_getarg_args) i=$ga_f77_iargc() if (i .gt. 1) then j = i - $ga_f77_iargc() j = 1.0 / j endif end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : else ga_f77_getarg= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # Posix alternative if test "x$ga_f77_getarg" = x; then : ga_fxx_module= ga_f77_getarg_decl="external pxfgetarg" ga_f77_getarg=pxfgetarg ga_f77_getarg_args="i,s,l,ier" ga_f77_iargc=ipxfargc cat > conftest.$ac_ext <<_ACEOF program main $ga_fxx_module integer i, j, l, ier character*20 s $ga_f77_getarg_decl i = 0 call $ga_f77_getarg($ga_f77_getarg_args) i=$ga_f77_iargc() if (i .gt. 1) then j = i - $ga_f77_iargc() j = 1.0 / j endif end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : else ga_f77_getarg= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # Nag f90_unix_env module if test "x$ga_f77_getarg" = x; then : ga_fxx_module=" use f90_unix_env" ga_f77_getarg_decl= ga_f77_getarg=getarg ga_f77_getarg_args="i,s" ga_f77_iargc=iargc cat > conftest.$ac_ext <<_ACEOF program main $ga_fxx_module integer i, j, l, ier character*20 s $ga_f77_getarg_decl i = 0 call $ga_f77_getarg($ga_f77_getarg_args) i=$ga_f77_iargc() if (i .gt. 1) then j = i - $ga_f77_iargc() j = 1.0 / j endif end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : else ga_f77_getarg= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # Nag f90_unix module if test "x$ga_f77_getarg" = x; then : ga_fxx_module=" use f90_unix" ga_f77_getarg_decl= ga_f77_getarg=getarg ga_f77_getarg_args="i,s" ga_f77_iargc=iargc cat > conftest.$ac_ext <<_ACEOF program main $ga_fxx_module integer i, j, l, ier character*20 s $ga_f77_getarg_decl i = 0 call $ga_f77_getarg($ga_f77_getarg_args) i=$ga_f77_iargc() if (i .gt. 1) then j = i - $ga_f77_iargc() j = 1.0 / j endif end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : else ga_f77_getarg= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # gfortran won't find getarg if it is marked as external if test "x$ga_f77_getarg" = x; then : ga_fxx_module= ga_f77_getarg_decl="intrinsic GETARG" ga_f77_getarg=GETARG ga_f77_getarg_args="i,s" ga_f77_iargc=IARGC cat > conftest.$ac_ext <<_ACEOF program main $ga_fxx_module integer i, j, l, ier character*20 s $ga_f77_getarg_decl i = 0 call $ga_f77_getarg($ga_f77_getarg_args) i=$ga_f77_iargc() if (i .gt. 1) then j = i - $ga_f77_iargc() j = 1.0 / j endif end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : else ga_f77_getarg= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test "x$ga_f77_getarg" = x; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Could not find way to access Fortran cmd line from C" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } cat >>confdefs.h <<_ACEOF #define F77_GETARG_DECL $ga_f77_getarg_decl _ACEOF cat >>confdefs.h <<_ACEOF #define F77_GETARG $ga_f77_getarg _ACEOF cat >>confdefs.h <<_ACEOF #define F77_GETARG_ARGS $ga_f77_getarg_args _ACEOF cat >>confdefs.h <<_ACEOF #define F77_IARGC $ga_f77_iargc _ACEOF cat >>confdefs.h <<_ACEOF #define FXX_MODULE $ga_fxx_module _ACEOF ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="F2C_GETARG" ;; lower*) ac_val="f2c_getarg" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac case $ac_cv_f77_mangling in *," extra underscore"*) ac_val="$ac_val"_ ;; esac F2C_GETARG="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="F2C_IARGC" ;; lower*) ac_val="f2c_iargc" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac case $ac_cv_f77_mangling in *," extra underscore"*) ac_val="$ac_val"_ ;; esac F2C_IARGC="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran hidden string length convention is after args" >&5 $as_echo_n "checking whether Fortran hidden string length convention is after args... " >&6; } if ${ga_cv_f2c_string_after_args+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS" != x; then : ga_cv_f2c_string_after_args="$F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS" fi if test "x$ga_cv_f2c_string_after_args" = x; then : if test x$cross_compiling = xyes; then : if test "x" != x; then : ga_cv_f2c_string_after_args="" else ga_cv_f2c_string_after_args="yes" fi fi fi if test "x$ga_cv_f2c_string_after_args" = x; then : ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SUB" ;; lower*) ac_val="sub" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac SUB="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #define LEN 80 void fix_c_string_for_f(char *s, int len); void fix_f_string_for_c(char *s, int len); void $SUB(char *fname, char *lname, int fname_len, int lname_len) { char result[LEN]; fix_f_string_for_c(fname, fname_len); fix_f_string_for_c(lname, lname_len); snprintf(result, LEN, "The names passed to C: %s %s\n", fname, lname); fix_c_string_for_f(fname, fname_len); fix_c_string_for_f(lname, lname_len); } void fix_c_string_for_f(char *s, int len) { int i; for (i=strlen(s); i < len; i++) { s[i] = ' '; } } void fix_f_string_for_c(char *s, int len) { int i; for (i=len-1; s[i] == ' ' && i>=0; i--) { s[i] = '\0'; } } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $CLIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat > conftest.$ac_ext <<_ACEOF program main character(LEN=10) :: first_name character(LEN=15) :: last_name first_name = "John" last_name = "Doe" call sub(first_name, last_name) end _ACEOF if ac_fn_f77_try_run "$LINENO"; then : ga_cv_f2c_string_after_args="yes" else : fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$ga_save_LIBS rm -f cfortran_test* else : fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu rm -rf conftest* fi if test "x$ga_cv_f2c_string_after_args" = x; then : ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SUB" ;; lower*) ac_val="sub" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac SUB="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #define LEN 80 void fix_c_string_for_f(char *s, int len); void fix_f_string_for_c(char *s, int len); void $SUB(char *fname, int fname_len, char *lname, int lname_len) { char result[LEN]; fix_f_string_for_c(fname, fname_len); fix_f_string_for_c(lname, lname_len); snprintf(result, LEN, "The names passed to C: %s %s\n", fname, lname); fix_c_string_for_f(fname, fname_len); fix_c_string_for_f(lname, lname_len); } void fix_c_string_for_f(char *s, int len) { int i; for (i=strlen(s); i < len; i++) { s[i] = ' '; } } void fix_f_string_for_c(char *s, int len) { int i; for (i=len-1; s[i] == ' ' && i>=0; i--) { s[i] = '\0'; } } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $CLIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat > conftest.$ac_ext <<_ACEOF program main character(LEN=10) :: first_name character(LEN=15) :: last_name first_name = "John" last_name = "Doe" call sub(first_name, last_name) end _ACEOF if ac_fn_f77_try_run "$LINENO"; then : ga_cv_f2c_string_after_args="no" else : fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$ga_save_LIBS rm -f cfortran_test* else : fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu rm -rf conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f2c_string_after_args" >&5 $as_echo "$ga_cv_f2c_string_after_args" >&6; } if test x$cross_compiling = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cross compiling: cannot determine f2c string convention" >&5 $as_echo "$as_me: WARNING: cross compiling: cannot determine f2c string convention" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: default is after args (=yes) but can be changed using" >&5 $as_echo "$as_me: WARNING: default is after args (=yes) but can be changed using" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS=no" >&5 $as_echo "$as_me: WARNING: F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS=no" >&2;} fi if test "x$ga_cv_f2c_string_after_args" = "xyes"; then : $as_echo "#define F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS 1" >>confdefs.h fi if test "x$ga_cv_f2c_string_after_args" != x; then : : else as_fn_error $? "f2c string convention is neither after args nor after string" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C type corresponding to INTEGER" >&5 $as_echo_n "checking for C type corresponding to INTEGER... " >&6; } if ${ga_cv_f2c_INTEGER+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$ga_cv_f2c_INTEGER"; then : if test "$ac_cv_sizeof_short" = "$ga_cv_f77_sizeof_INTEGER"; then : ga_cv_f2c_INTEGER="short" fi fi if test -z "$ga_cv_f2c_INTEGER"; then : if test "$ac_cv_sizeof_int" = "$ga_cv_f77_sizeof_INTEGER"; then : ga_cv_f2c_INTEGER="int" fi fi if test -z "$ga_cv_f2c_INTEGER"; then : if test "$ac_cv_sizeof_long" = "$ga_cv_f77_sizeof_INTEGER"; then : ga_cv_f2c_INTEGER="long" fi fi if test -z "$ga_cv_f2c_INTEGER"; then : if test "$ac_cv_sizeof_long_long" = "$ga_cv_f77_sizeof_INTEGER"; then : ga_cv_f2c_INTEGER="long long" fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f2c_INTEGER" >&5 $as_echo "$ga_cv_f2c_INTEGER" >&6; } if test "x$ga_cv_f2c_INTEGER" = x; then : as_fn_error $? "Could not determine C type matching Fortran INTEGER" "$LINENO" 5 fi F2C_INTEGER_C_TYPE=$ga_cv_f2c_INTEGER { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C type corresponding to REAL" >&5 $as_echo_n "checking for C type corresponding to REAL... " >&6; } if ${ga_cv_f2c_REAL+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$ga_cv_f2c_REAL"; then : if test "$ac_cv_sizeof_float" = "$ga_cv_f77_sizeof_REAL"; then : ga_cv_f2c_REAL="float" fi fi if test -z "$ga_cv_f2c_REAL"; then : if test "$ac_cv_sizeof_double" = "$ga_cv_f77_sizeof_REAL"; then : ga_cv_f2c_REAL="double" fi fi if test -z "$ga_cv_f2c_REAL"; then : if test "$ac_cv_sizeof_long_double" = "$ga_cv_f77_sizeof_REAL"; then : ga_cv_f2c_REAL="long double" fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f2c_REAL" >&5 $as_echo "$ga_cv_f2c_REAL" >&6; } if test "x$ga_cv_f2c_REAL" = x; then : as_fn_error $? "Could not determine C type matching Fortran REAL" "$LINENO" 5 fi F2C_REAL_C_TYPE=$ga_cv_f2c_REAL { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C type corresponding to DOUBLE PRECISION" >&5 $as_echo_n "checking for C type corresponding to DOUBLE PRECISION... " >&6; } if ${ga_cv_f2c_DOUBLE_PRECISION+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$ga_cv_f2c_DOUBLE_PRECISION"; then : if test "$ac_cv_sizeof_float" = "$ga_cv_f77_sizeof_DOUBLE_PRECISION"; then : ga_cv_f2c_DOUBLE_PRECISION="float" fi fi if test -z "$ga_cv_f2c_DOUBLE_PRECISION"; then : if test "$ac_cv_sizeof_double" = "$ga_cv_f77_sizeof_DOUBLE_PRECISION"; then : ga_cv_f2c_DOUBLE_PRECISION="double" fi fi if test -z "$ga_cv_f2c_DOUBLE_PRECISION"; then : if test "$ac_cv_sizeof_long_double" = "$ga_cv_f77_sizeof_DOUBLE_PRECISION"; then : ga_cv_f2c_DOUBLE_PRECISION="long double" fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f2c_DOUBLE_PRECISION" >&5 $as_echo "$ga_cv_f2c_DOUBLE_PRECISION" >&6; } if test "x$ga_cv_f2c_DOUBLE_PRECISION" = x; then : as_fn_error $? "Could not determine C type matching Fortran DOUBLE PRECISION" "$LINENO" 5 fi F2C_DOUBLE_PRECISION_C_TYPE=$ga_cv_f2c_DOUBLE_PRECISION { $as_echo "$as_me:${as_lineno-$LINENO}: checking for specific Fortran optimizations" >&5 $as_echo_n "checking for specific Fortran optimizations... " >&6; } if ${ga_cv_f77_opt+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$GA_FOPT" != x; then : ga_cv_f77_opt="$GA_FOPT" else ga_cv_f77_opt= fi if test "x$ga_cv_f77_opt" = x && test "x$enable_opt" = xyes; then : case $ga_cv_target:$ga_cv_f77_compiler_vendor:$host_cpu in #( BGL:*:*) : ga_cv_f77_opt="-O0" ;; #( BGP:ibm:*) : ga_cv_f77_opt="-O3 -qstrict -qarch=450 -qtune=450" ;; #( BGP:gnu:*) : ga_cv_f77_opt="-O2" ;; #( CATAMOUNT:*:*) : ga_cv_f77_opt="-O3" ;; #( CRAY_XT:*:*) : ga_cv_f77_opt= ;; #( CYGWIN:*:*) : ga_cv_f77_opt= ;; #( FUJITSU_VPP64:*:*) : ga_cv_f77_opt="-Sw" ;; #( FUJITSU_VPP:*:*) : ga_cv_f77_opt="-Sw -KA32" ;; #( HPUX64:*:*) : ga_cv_f77_opt="-O1" ;; #( HPUX64:*:ia64) : ga_cv_f77_opt="-O1" ;; #( HPUX:*:*) : ga_cv_f77_opt="-O1" ;; #( IBM64:*:*) : ga_cv_f77_opt="-qarch=auto" ;; #( IBM:*:*) : ga_cv_f77_opt="-qarch=auto" ;; #( LAPI64:*:*) : ga_cv_f77_opt="-qarch=auto" ;; #( LAPI:*:*) : ga_cv_f77_opt="-qarch=auto" ;; #( LINUX64:*:alpha) : ga_cv_f77_opt="-align_dcommons -fpe3 -check nooverflow -assume accuracy_sensitive -check nopower -check nounderflow" ;; #( LINUX64:fujitsu:ia64) : ga_cv_f77_opt="-Kfast -X9 -Am -fw" ;; #( LINUX64:fujitsu:x86_64) : ga_cv_f77_opt="-Kfast -X9 -Am -fw" ;; #( LINUX64:gnu:x86_64) : ga_cv_f77_opt="-O" ;; #( LINUX64:ibm:x86_64) : ga_cv_f77_opt= ;; #( LINUX64:intel:ia64) : ga_cv_f77_opt="-cm -w90 -w95 -align" ;; #( LINUX64:intel:powerpc64) : ga_cv_f77_opt= ;; #( LINUX64:intel:ppc64) : ga_cv_f77_opt= ;; #( LINUX64:intel:x86_64) : ga_cv_f77_opt="-O3 -w -cm -xW -tpp7" ;; #( LINUX64:portland:x86_64) : ga_cv_f77_opt="-Mdalign" ;; #( LINUX:fujitsu:*) : ga_cv_f77_opt="-Kfast -X9 -Am -fw" ;; #( LINUX:gnu:786) : ga_cv_f77_opt="-O2 -funroll-loops -malign-double" ;; #( LINUX:gnu:*) : ga_cv_f77_opt="-O2 -funroll-loops" ;; #( LINUX:gnu:x86) : ga_cv_f77_opt="-O2 -funroll-loops -malign-double" ;; #( LINUX:ibm:*) : ga_cv_f77_opt="-q32" ;; #( LINUX:intel:*) : ga_cv_f77_opt="-O3 -prefetch -w -cm" ;; #( LINUX:portland:*) : ga_cv_f77_opt="-Mdalign -Minform,warn -Mnolist -Minfo=loop -Munixlogical" ;; #( MACX64:ibm:*) : ga_cv_f77_opt= ;; #( MACX64:intel:*) : ga_cv_f77_opt="-O3 -prefetch -w -cm" ;; #( MACX:gnu:*) : ga_cv_f77_opt="-O3 -funroll-loops" ;; #( MACX:intel:*) : ga_cv_f77_opt="-O3 -prefetch -w -cm" ;; #( NEC64:*:*) : ga_cv_f77_opt="-Cvsafe -size_t64" ;; #( NEC:*:*) : ga_cv_f77_opt="-Cvsafe" ;; #( SOLARIS64:fujitsu:*) : ga_cv_f77_opt="-fw -Kfast -KV9FMADD" ;; #( SOLARIS64:gnu:*) : ga_cv_f77_opt="-xs -dalign -xarch=v9" ;; #( SOLARIS64:gnu:i386) : ga_cv_f77_opt="-xs -dalign -xarch=amd64" ;; #( SOLARIS:fujitsu:*) : ga_cv_f77_opt="-fw -Kfast -KV8PFMADD" ;; #( SOLARIS:gnu:*) : ga_cv_f77_opt="-xs -dalign" ;; #( SOLARIS:gnu:i386) : ga_cv_f77_opt="-xs -dalign -xarch=sse2" ;; #( *) : ga_cv_f77_opt= ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_opt" >&5 $as_echo "$ga_cv_f77_opt" >&6; } GA_FOPT=$ga_cv_f77_opt FFLAGS="$ga_save_FFLAGS" else # enable_f77=no version of AC_F77_WRAPPERS $as_echo "#define F77_FUNC(name,NAME) name ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name ## _" >>confdefs.h # enable_f77=no version of GA_F77_CHECK_SIZEOF cat >>confdefs.h <<_ACEOF #define SIZEOF_F77_INTEGER $ac_cv_sizeof_voidp _ACEOF cat >>confdefs.h <<_ACEOF #define SIZEOF_F77_REAL 4 _ACEOF cat >>confdefs.h <<_ACEOF #define SIZEOF_F77_DOUBLE_PRECISION 8 _ACEOF # enable_f77=no version of GA_F2C_NOMAIN # enable_f77=no version of GA_F2C_CMDARGS F2C_GETARG="F2C_GETARG" F2C_IARGC="F2C_IARGC" # enable_f77=no version of GA_F2C_HIDDEN_STRING_LENGTH_CONVENTION $as_echo "#define F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS 1" >>confdefs.h # enable_f77=no version of GA_F2C_MATCH_TYPES F2C_INTEGER_C_TYPE=long F2C_REAL_C_TYPE=float F2C_DOUBLE_PRECISION_C_TYPE=double fi # This is required to override what automake does, if needed. if test "x$enable_f77" = xyes; then : F77LINK='$(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@' am__v_F77LD_0='@echo " F77LD " $@;' else F77LINK='$(LINK)' am__v_F77LD_0='$(am__v_CCLD_0)' fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ############################################################################### # Checks for BLAS/LAPACK/SCALAPACK require both C and Fortran features to # have been detected. Further, they assume the current AC_LANG is C. ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Checks for BLAS,LAPACK,ScaLAPACK" >&5 $as_echo "$as_me: Checks for BLAS,LAPACK,ScaLAPACK" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} blas_size=4 blas_size_hack=no # Check whether --with-blas was given. if test "${with_blas+set}" = set; then : withval=$with_blas; blas_size_hack=yes fi # Check whether --with-blas4 was given. if test "${with_blas4+set}" = set; then : withval=$with_blas4; blas_size=4; with_blas="$with_blas4" fi # Check whether --with-blas8 was given. if test "${with_blas8+set}" = set; then : withval=$with_blas8; blas_size=8; with_blas="$with_blas8" fi ga_blas_ok=no if test "x$with_blas" = xno; then : ga_blas_ok=skip fi # Parse --with-blas argument. Clear previous values first. BLAS_LIBS= BLAS_LDFLAGS= BLAS_CPPFLAGS= if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_blas ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : BLAS_LIBS="$BLAS_LIBS $arg" ;; #( -L*) : BLAS_LDFLAGS="$BLAS_LDFLAGS $arg" ;; #( -WL*) : BLAS_LDFLAGS="$BLAS_LDFLAGS $arg" ;; #( -Wl*) : BLAS_LDFLAGS="$BLAS_LDFLAGS $arg" ;; #( -I*) : BLAS_CPPFLAGS="$BLAS_CPPFLAGS $arg" ;; #( *.a) : BLAS_LIBS="$BLAS_LIBS $arg" ;; #( *.so) : BLAS_LIBS="$BLAS_LIBS $arg" ;; #( *lib) : if test -d $arg; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( -mkl*) : BLAS_LIBS="$BLAS_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi done # Get fortran linker names of BLAS functions to check for. ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="CGEMM" ;; lower*) ac_val="cgemm" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cgemm="$ac_val" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DGEMM" ;; lower*) ac_val="dgemm" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac dgemm="$ac_val" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SGEMM" ;; lower*) ac_val="sgemm" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac sgemm="$ac_val" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="ZGEMM" ;; lower*) ac_val="zgemm" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac zgemm="$ac_val" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ga_save_LIBS="$LIBS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$BLAS_LDFLAGS $LDFLAGS" ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$BLAS_CPPFLAGS $CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: Attempting to locate BLAS library" >&5 $as_echo "$as_me: Attempting to locate BLAS library" >&6;} # First, check environment/command-line variables. # If failed, erase BLAS_LIBS but maintain BLAS_LDFLAGS and BLAS_CPPFLAGS. if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS with user-supplied flags" >&5 $as_echo_n "checking for BLAS with user-supplied flags... " >&6; } LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" if test $ga_blas_ok = yes; then : if test $blas_size_hack = yes; then : case "$BLAS_LIBS $LIBS $LDFLAGS $CPPFLAGS" in #( *ilp64*) : blas_size=8 ;; #( # Intel MKL *_int64*) : blas_size=8 ;; #( *) : ;; esac fi fi # AMD ACML { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # AMD Core Math Library (ACML) if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in AMD Core Math Library" >&5 $as_echo_n "checking for BLAS in AMD Core Math Library... " >&6; } # add -lacml to BLAS_LIBS if missing from LIBS case $LIBS in #( *acml*) : ;; #( *) : BLAS_LIBS="-lacml" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" if test "x$ga_blas_ok" = xyes; then : if test $blas_size_hack = yes; then : case "$BLAS_LIBS $LIBS $LDFLAGS $CPPFLAGS" in #( *_int64*) : blas_size=8 ;; #( *) : ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # Intel MKL library if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in Intel Math Kernel Library" >&5 $as_echo_n "checking for BLAS in Intel Math Kernel Library... " >&6; } # add -lmkl to BLAS_LIBS if missing from LIBS case $LIBS in #( *mkl*) : ;; #( *) : BLAS_LIBS="-lmkl" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" if test "x$ga_blas_ok" = xyes; then : if test $blas_size_hack = yes; then : case "$BLAS_LIBS $LIBS $LDFLAGS $CPPFLAGS" in #( *ilp64*) : blas_size=8 ;; #( *) : ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # ATLAS library (http://math-atlas.sourceforge.net/) if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in ATLAS" >&5 $as_echo_n "checking for BLAS in ATLAS... " >&6; } if test "x$enable_f77" = xno; then : # add -lcblas if needed but missing from LIBS case $LIBS in #( *cblas*) : ;; #( *) : BLAS_LIBS="-lcblas" ;; esac else # add -lf77blas if needed but missing from LIBS case $LIBS in #( *f77blas*) : ;; #( *) : BLAS_LIBS="-lf77blas" ;; esac fi # add -latlas if needed but missing from LIBS case $LIBS in #( *atlas*) : ;; #( *) : BLAS_LIBS="$BLAS_LIBS -latlas" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # PhiPACK libraries (requires generic BLAS lib, too) if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in PhiPACK libraries" >&5 $as_echo_n "checking for BLAS in PhiPACK libraries... " >&6; } # add -lblas to BLAS_LIBS if missing from LIBS case $LIBS in #( *blas*) : ;; #( *) : BLAS_LIBS="-lblas" ;; esac # add -ldgemm to BLAS_LIBS if missing from LIBS case $LIBS in #( *dgemm*) : ;; #( *) : BLAS_LIBS="-ldgemm $BLAS_LIBS" ;; esac # add -lsgemm to BLAS_LIBS if missing from LIBS case $LIBS in #( *sgemm*) : ;; #( *) : BLAS_LIBS="-lsgemm $BLAS_LIBS" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # Apple Accelerate.framework if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in Apple Accelerate.framework" >&5 $as_echo_n "checking for BLAS in Apple Accelerate.framework... " >&6; } # add -framework Accelerate to BLAS_LIBS if missing from LIBS case $LIBS in #( *Accelerate*) : ;; #( *) : BLAS_LIBS="-framework Accelerate" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # Apple vecLib.framework if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in Apple vecLib.framework" >&5 $as_echo_n "checking for BLAS in Apple vecLib.framework... " >&6; } # add -framework vecLib to BLAS_LIBS if missing from LIBS case $LIBS in #( *vecLib*) : ;; #( *) : BLAS_LIBS="-framework vecLib" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # Alpha CXML library (CXML stands for Compaq Extended Math Library) if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in Alpha CXML library" >&5 $as_echo_n "checking for BLAS in Alpha CXML library... " >&6; } # add -lcxml to BLAS_LIBS if missing from LIBS case $LIBS in #( *cxml*) : ;; #( *) : BLAS_LIBS="-lcxml" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" if test $ga_blas_ok = no; then : # add -lcxml to BLAS_LIBS if missing from LIBS case $LIBS in #( *cxml*) : ;; #( *) : BLAS_LIBS="-lcxml" ;; esac # add -lcpml to BLAS_LIBS if missing from LIBS case $LIBS in #( *cpml*) : ;; #( *) : BLAS_LIBS="$BLAS_LIBS -lcpml" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # Alpha DXML library (now called CXML, see above) # Sun Performance library if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in Sun Performance Library" >&5 $as_echo_n "checking for BLAS in Sun Performance Library... " >&6; } # add -xlic_lib=sunperf to BLAS_LIBS if missing from LIBS case $LIBS in #( *sunperf*) : ;; #( *) : BLAS_LIBS="-xlic_lib=sunperf" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" if test $ga_blas_ok = no; then : # add -xlic_lib=sunperf to BLAS_LIBS if missing from LIBS case $LIBS in #( *sunperf*) : ;; #( *) : BLAS_LIBS="-xlic_lib=sunperf" ;; esac # add -lsunmath to BLAS_LIBS if missing from LIBS case $LIBS in #( *sunmath*) : ;; #( *) : BLAS_LIBS="$BLAS_LIBS -lsunmath" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # SCSL library (SCSL stands for SGI/Cray Scientific Library) if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in SGI/Cray Scientific Library" >&5 $as_echo_n "checking for BLAS in SGI/Cray Scientific Library... " >&6; } # add -lscs to BLAS_LIBS if missing from LIBS case $LIBS in #( *scs*) : ;; #( *) : BLAS_LIBS="-lscs" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # SGIMATH library if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in SGIMATH library" >&5 $as_echo_n "checking for BLAS in SGIMATH library... " >&6; } # add -lcomplib.sgimath to BLAS_LIBS if missing from LIBS case $LIBS in #( *complib.sgimath*) : ;; #( *) : BLAS_LIBS="-lcomplib.sgimath" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # IBM ESSL library (requires generic BLAS lib, too) if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in IBM ESSL library" >&5 $as_echo_n "checking for BLAS in IBM ESSL library... " >&6; } # add -lessl to BLAS_LIBS if missing from LIBS case $LIBS in #( *essl*) : ;; #( *) : BLAS_LIBS="-lessl" ;; esac # add -lblas to BLAS_LIBS if missing from LIBS case $LIBS in #( *blas*) : ;; #( *) : BLAS_LIBS="$BLAS_LIBS -lblas" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # Generic BLAS library if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in generic library" >&5 $as_echo_n "checking for BLAS in generic library... " >&6; } BLAS_LIBS="-lblas" LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" # Tests are complete. Execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test $ga_blas_ok = yes; then : have_blas=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: BLAS library not found, using internal BLAS" >&5 $as_echo "$as_me: WARNING: BLAS library not found, using internal BLAS" >&2;} blas_size=$ga_cv_f77_integer_size # reset blas integer size to desired have_blas=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_BLAS $have_blas _ACEOF cat >>confdefs.h <<_ACEOF #define BLAS_SIZE $blas_size _ACEOF if test $ga_blas_ok = yes; then HAVE_BLAS_TRUE= HAVE_BLAS_FALSE='#' else HAVE_BLAS_TRUE='#' HAVE_BLAS_FALSE= fi # Check whether --with-lapack was given. if test "${with_lapack+set}" = set; then : withval=$with_lapack; fi ga_lapack_ok=no if test "x$with_lapack" = xno; then : ga_lapack_ok=skip fi # Parse --with-lapack argument. Clear previous values first. LAPACK_LIBS= LAPACK_LDFLAGS= LAPACK_CPPFLAGS= if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_lapack ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : LAPACK_LIBS="$LAPACK_LIBS $arg" ;; #( -L*) : LAPACK_LDFLAGS="$LAPACK_LDFLAGS $arg" ;; #( -WL*) : LAPACK_LDFLAGS="$LAPACK_LDFLAGS $arg" ;; #( -Wl*) : LAPACK_LDFLAGS="$LAPACK_LDFLAGS $arg" ;; #( -I*) : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS $arg" ;; #( *.a) : LAPACK_LIBS="$LAPACK_LIBS $arg" ;; #( *.so) : LAPACK_LIBS="$LAPACK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : LAPACK_LDFLAGS="$LAPACK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : LAPACK_LDFLAGS="$LAPACK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : LAPACK_LDFLAGS="$LAPACK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : LAPACK_LDFLAGS="$LAPACK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi ;; #( -mkl*) : LAPACK_LIBS="$LAPACK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : LAPACK_LDFLAGS="$LAPACK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : LAPACK_LDFLAGS="$LAPACK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : LAPACK_LDFLAGS="$LAPACK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : LAPACK_LDFLAGS="$LAPACK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi done # Get fortran linker name of LAPACK function to check for. ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DGETRS" ;; lower*) ac_val="dgetrs" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac dgetrs="$ac_val" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ga_save_LIBS="$LIBS" ga_save_LDFLAGS="$LDFLAGS" ga_save_CPPFLAGS="$CPPFLAGS" LDFLAGS="$LAPACK_LDFLAGS $BLAS_LDFLAGS $LDFLAGS" CPPFLAGS="$LAPACK_CPPFLAGS $BLAS_CPPFLAGS $CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: Attempting to locate LAPACK library" >&5 $as_echo "$as_me: Attempting to locate LAPACK library" >&6;} # We cannot use LAPACK if BLAS is not found if test $ga_blas_ok != yes; then : ga_lapack_ok=noblas fi # First, check environment/command-line variables. # If failed, erase LAPACK_LIBS but maintain LAPACK_LDFLAGS and LAPACK_CPPFLAGS. if test $ga_lapack_ok = no; then : LIBS="$LAPACK_LIBS $BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C LAPACK with user-supplied flags" >&5 $as_echo_n "checking for C LAPACK with user-supplied flags... " >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char dgetrs (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char result = dgetrs (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_lapack_ok=yes else LAPACK_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 LAPACK with user-supplied flags" >&5 $as_echo_n "checking for Fortran 77 LAPACK with user-supplied flags... " >&6; } ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none external DGETRS CALL DGETRS () end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_lapack_ok=yes else LAPACK_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_lapack_ok" >&5 $as_echo "$ga_lapack_ok" >&6; } LIBS="$ga_save_LIBS" fi # Generic LAPACK library? for lib in lapack lapack_rs6k; do if test $ga_lapack_ok = no; then : ga_save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" as_ac_Lib=`$as_echo "ac_cv_lib_$lib''_$dgetrs" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dgetrs in -l$lib" >&5 $as_echo_n "checking for $dgetrs in -l$lib... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$lib $FLIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $dgetrs (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $dgetrs (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : ga_lapack_ok=yes; LAPACK_LIBS="-l$lib" fi LIBS="$ga_save_LIBS" fi done CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test $ga_lapack_ok = yes; then : have_lapack=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: LAPACK library not found, using internal LAPACK" >&5 $as_echo "$as_me: WARNING: LAPACK library not found, using internal LAPACK" >&2;} have_lapack=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_LAPACK $have_lapack _ACEOF if test $ga_lapack_ok = yes; then HAVE_LAPACK_TRUE= HAVE_LAPACK_FALSE='#' else HAVE_LAPACK_TRUE='#' HAVE_LAPACK_FALSE= fi scalapack_size=4 # Check whether --with-scalapack was given. if test "${with_scalapack+set}" = set; then : withval=$with_scalapack; scalapack_size=4 fi # Check whether --with-scalapack8 was given. if test "${with_scalapack8+set}" = set; then : withval=$with_scalapack8; scalapack_size=8; with_scalapack="$with_scalapack8" fi ga_scalapack_ok=no if test "x$with_scalapack" = xno; then : ga_scalapack_ok=skip fi # Parse --with-scalapack argument. Clear previous values first. SCALAPACK_LIBS= SCALAPACK_LDFLAGS= SCALAPACK_CPPFLAGS= if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_scalapack ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : SCALAPACK_LIBS="$SCALAPACK_LIBS $arg" ;; #( -L*) : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS $arg" ;; #( -WL*) : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS $arg" ;; #( -Wl*) : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS $arg" ;; #( -I*) : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS $arg" ;; #( *.a) : SCALAPACK_LIBS="$SCALAPACK_LIBS $arg" ;; #( *.so) : SCALAPACK_LIBS="$SCALAPACK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi ;; #( -mkl*) : SCALAPACK_LIBS="$SCALAPACK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi done ga_save_LIBS="$LIBS" ga_save_LDFLAGS="$LDFLAGS" ga_save_CPPFLAGS="$CPPFLAGS" LDFLAGS="$SCALAPACK_LDFLAGS $LAPACK_LDFLAGS $BLAS_LDFLAGS $GA_MP_LDFLAGS $LDFLAGS" CPPFLAGS="$SCALAPACK_CPPFLAGS $LAPACK_CPPFLAGS $BLAS_CPPFLAGS $GA_MP_CPPFLAGS $CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: Attempting to locate SCALAPACK library" >&5 $as_echo "$as_me: Attempting to locate SCALAPACK library" >&6;} # First, check environment/command-line variables. # If failed, erase SCALAPACK_LIBS but maintain SCALAPACK_LDFLAGS and # SCALAPACK_CPPFLAGS. if test $ga_scalapack_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SCALAPACK with user-supplied flags" >&5 $as_echo_n "checking for SCALAPACK with user-supplied flags... " >&6; } LIBS="$SCALAPACK_LIBS $LAPACK_LIBS $BLAS_LIBS $GA_MP_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char pdgetrs (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char result = pdgetrs (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_scalapack_ok=yes else SCALAPACK_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none external PDGETRS CALL PDGETRS () end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_scalapack_ok=yes else SCALAPACK_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_scalapack_ok" >&5 $as_echo "$ga_scalapack_ok" >&6; } fi # Generic ScaLAPACK library? if test $ga_scalapack_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SCALAPACK in generic library" >&5 $as_echo_n "checking for SCALAPACK in generic library... " >&6; } SCALAPACK_LIBS="-lscalapack" LIBS="$SCALAPACK_LIBS $LAPACK_LIBS $BLAS_LIBS $GA_MP_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char pdgetrs (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char result = pdgetrs (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_scalapack_ok=yes else SCALAPACK_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none external PDGETRS CALL PDGETRS () end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_scalapack_ok=yes else SCALAPACK_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_scalapack_ok" >&5 $as_echo "$ga_scalapack_ok" >&6; } fi CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" if test "x$scalapack_size" = x8; then : $as_echo "#define SCALAPACK_I8 1" >>confdefs.h fi # test for pdsyevr which some implementations may not have if test $ga_scalapack_ok = yes; then : ga_save_LIBS="$LIBS" ga_save_LDFLAGS="$LDFLAGS" ga_save_CPPFLAGS="$CPPFLAGS" LIBS="$SCALAPACK_LIBS $LAPACK_LIBS $BLAS_LIBS $GA_MP_LIBS $LIBS" LDFLAGS="$SCALAPACK_LDFLAGS $LAPACK_LDFLAGS $BLAS_LDFLAGS $GA_MP_LDFLAGS $LDFLAGS" CPPFLAGS="$SCALAPACK_CPPFLAGS $LAPACK_CPPFLAGS $BLAS_CPPFLAGS $GA_MP_CPPFLAGS $CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether SCALAPACK implements pdsyevr" >&5 $as_echo_n "checking whether SCALAPACK implements pdsyevr... " >&6; } if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pdsyevr (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return pdsyevr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : have_pdsyevr=1; have_pdsyevr_msg=yes else have_pdsyevr=0; have_pdsyevr_msg=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main call pdsyevr end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : have_pdsyevr=1; have_pdsyevr_msg=yes else have_pdsyevr=0; have_pdsyevr_msg=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_pdsyevr_msg" >&5 $as_echo "$have_pdsyevr_msg" >&6; } cat >>confdefs.h <<_ACEOF #define HAVE_PDSYEVR $have_pdsyevr _ACEOF LIBS="$ga_save_LIBS" LDFLAGS="$ga_save_LDFLAGS" CPPFLAGS="$ga_save_CPPFLAGS" fi # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test $ga_scalapack_ok = yes; then : have_scalapack=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ScaLAPACK library not found, interfaces won't be defined" >&5 $as_echo "$as_me: WARNING: ScaLAPACK library not found, interfaces won't be defined" >&2;} have_scalapack=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_SCALAPACK $have_scalapack _ACEOF if test $ga_scalapack_ok = yes; then HAVE_SCALAPACK_TRUE= HAVE_SCALAPACK_FALSE='#' else HAVE_SCALAPACK_TRUE='#' HAVE_SCALAPACK_FALSE= fi ############################################################################### # Checks for programs. ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Checks for additional programs" >&5 $as_echo "$as_me: Checks for additional programs" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed # Find any Python interpreter. if test -z "$PYTHON"; then for ac_prog in python python2 python3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 $as_echo "$PYTHON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PYTHON" && break done test -n "$PYTHON" || PYTHON=":" fi am_display_PYTHON=python if test "$PYTHON" = :; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 $as_echo_n "checking for $am_display_PYTHON version... " >&6; } if ${am_cv_python_version+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 $as_echo "$am_cv_python_version" >&6; } PYTHON_VERSION=$am_cv_python_version PYTHON_PREFIX='${prefix}' PYTHON_EXEC_PREFIX='${exec_prefix}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 $as_echo_n "checking for $am_display_PYTHON platform... " >&6; } if ${am_cv_python_platform+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 $as_echo "$am_cv_python_platform" >&6; } PYTHON_PLATFORM=$am_cv_python_platform { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 $as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } if ${am_cv_python_pythondir+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$prefix" = xNONE then am_py_prefix=$ac_default_prefix else am_py_prefix=$prefix fi am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null` case $am_cv_python_pythondir in $am_py_prefix*) am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` ;; *) case $am_py_prefix in /usr|/System*) ;; *) am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 $as_echo "$am_cv_python_pythondir" >&6; } pythondir=$am_cv_python_pythondir pkgpythondir=\${pythondir}/$PACKAGE { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 $as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } if ${am_cv_python_pyexecdir+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$exec_prefix" = xNONE then am_py_exec_prefix=$am_py_prefix else am_py_exec_prefix=$exec_prefix fi am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null` case $am_cv_python_pyexecdir in $am_py_exec_prefix*) am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` ;; *) case $am_py_exec_prefix in /usr|/System*) ;; *) am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 $as_echo "$am_cv_python_pyexecdir" >&6; } pyexecdir=$am_cv_python_pyexecdir pkgpyexecdir=\${pyexecdir}/$PACKAGE fi if test "x$PYTHON" != x; then HAVE_PYTHON_TRUE= HAVE_PYTHON_FALSE='#' else HAVE_PYTHON_TRUE='#' HAVE_PYTHON_FALSE= fi # Extract the first word of "m4", so it can be a program name with args. set dummy m4; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_M4+:} false; then : $as_echo_n "(cached) " >&6 else case $M4 in [\\/]* | ?:[\\/]*) ac_cv_path_M4="$M4" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_M4="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_M4" && ac_cv_path_M4="notfound" ;; esac fi M4=$ac_cv_path_M4 if test -n "$M4"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $M4" >&5 $as_echo "$M4" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$M4" != xnotfound; then HAVE_M4_TRUE= HAVE_M4_FALSE='#' else HAVE_M4_TRUE='#' HAVE_M4_FALSE= fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="notfound" ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$PERL" != xnotfound; then HAVE_PERL_TRUE= HAVE_PERL_FALSE='#' else HAVE_PERL_TRUE='#' HAVE_PERL_FALSE= fi # X needed for xregion program, but only if desired. # Check whether --enable-xregion was given. if test "${enable_xregion+set}" = set; then : enableval=$enable_xregion; enable_xregion=yes else enable_xregion=no fi if test "x$enable_xregion" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.i conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi if test "x$x_includes" != x; then : X_CPPFLAGS="-I$x_includes" else X_CPPFLAGS= fi if test "x$x_libraries" != x; then : X_LDFLAGS="-L$x_libraries" else X_LDFLAGS= fi fi if test "x$enable_xregion" = xyes; then ENABLE_XREGION_TRUE= ENABLE_XREGION_FALSE='#' else ENABLE_XREGION_TRUE='#' ENABLE_XREGION_FALSE= fi if test "$no_x" = xyes; then NO_X_TRUE= NO_X_FALSE='#' else NO_X_TRUE='#' NO_X_FALSE= fi ############################################################################### # Libtool setup -- no compiler/linker tests after this ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Libtool setup" >&5 $as_echo "$as_me: Libtool setup" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} # temporarily restore unwrapped compilers # this works around a bug where libtool sadly relies on matching compiler # names in order to determine features (Fortran only, I think) # libtool doesn't recognize MPI compiler names, nor should it if test x$with_mpi_wrappers = xyes; then : ga_mpi_unwrap_push_save_CC="$CC" ga_mpi_unwrap_push_save_CXX="$CXX" ga_mpi_unwrap_push_save_F77="$F77" ga_mpi_unwrap_push_save_FC="$FC" if test "x$ga_cv_mpic_naked" != x; then : CC="$ga_cv_mpic_naked" fi if test "x$ga_cv_mpicxx_naked" != x; then : CXX="$ga_cv_mpicxx_naked" fi if test "x$ga_cv_mpif77_naked" != x; then : F77="$ga_cv_mpif77_naked" fi if test "x$ga_cv_mpifc_naked" != x; then : FC="$ga_cv_mpifc_naked" fi fi if test "x$AR" = x; then : case $ga_cv_target in #( NEC|NEC64) : AR=sxar ;; #( *) : ;; esac fi if test "x$RANLIB" = x; then : case $ga_cv_target in #( NEC|NEC64) : RANLIB=true ;; #( *) : ;; esac fi case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf # Set options # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=no fi enable_dlopen=no enable_win32_dll=no # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_direct_absolute_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no inherit_rpath_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds reload_flag_F77=$reload_flag reload_cmds_F77=$reload_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC compiler_F77=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` GCC=$G77 if test -n "$compiler"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } GCC_F77="$G77" LD_F77="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_F77='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_F77= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_F77=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_F77='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl_F77='-Xlinker ' if test -n "$lt_prog_compiler_pic_F77"; then lt_prog_compiler_pic_F77="-Xcompiler $lt_prog_compiler_pic_F77" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='--shared' lt_prog_compiler_static_F77='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl_F77='-Wl,-Wl,,' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-qpic' lt_prog_compiler_static_F77='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; *Portland\ Group*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_F77='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; rdos*) lt_prog_compiler_static_F77='-non_shared' ;; solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl_F77='-Qoption ld ';; *) lt_prog_compiler_wl_F77='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; unicos*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_can_build_shared_F77=no ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_F77=$lt_prog_compiler_pic_F77 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_F77" >&5 $as_echo "$lt_cv_prog_compiler_pic_F77" >&6; } lt_prog_compiler_pic_F77=$lt_cv_prog_compiler_pic_F77 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... " >&6; } if ${lt_cv_prog_compiler_pic_works_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_F77=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_F77" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_F77" >&6; } if test x"$lt_cv_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_F77=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_F77=yes fi else lt_cv_prog_compiler_static_works_F77=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_F77" >&5 $as_echo "$lt_cv_prog_compiler_static_works_F77" >&6; } if test x"$lt_cv_prog_compiler_static_works_F77" = xyes; then : else lt_prog_compiler_static_F77= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_F77=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_F77" >&5 $as_echo "$lt_cv_prog_compiler_c_o_F77" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_F77=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_F77" >&5 $as_echo "$lt_cv_prog_compiler_c_o_F77" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag_F77= always_export_symbols_F77=no archive_cmds_F77= archive_expsym_cmds_F77= compiler_needs_object_F77=no enable_shared_with_static_runtimes_F77=no export_dynamic_flag_spec_F77= export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic_F77=no hardcode_direct_F77=no hardcode_direct_absolute_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported inherit_rpath_F77=no link_all_deplibs_F77=unknown module_cmds_F77= module_expsym_cmds_F77= old_archive_from_new_cmds_F77= old_archive_from_expsyms_cmds_F77= thread_safe_flag_spec_F77= whole_archive_flag_spec_F77= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_F77='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_F77=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='' ;; m68k) archive_cmds_F77='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' export_dynamic_flag_spec_F77='${wl}--export-all-symbols' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_F77='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_F77=no fi ;; haiku*) archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_F77=yes ;; interix[3-9]*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec_F77= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_F77=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec_F77='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_F77=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_F77='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec_F77='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_F77='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs_F77=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = no; then runpath_var= hardcode_libdir_flag_spec_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_F77=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_F77=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_F77='' hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes file_list_spec_F77='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_F77=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_F77='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_F77=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_F77='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__F77+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__F77=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__F77 fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__F77+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__F77=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__F77 fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_F77='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77='$convenience' fi archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='' ;; m68k) archive_cmds_F77='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes file_list_spec_F77='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, F77)='true' enable_shared_with_static_runtimes_F77=yes exclude_expsyms_F77='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds_F77='chmod 644 $oldlib' postlink_cmds_F77='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes_F77=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_F77=no hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_F77='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' compiler_needs_object_F77=yes else whole_archive_flag_spec_F77='' fi link_all_deplibs_F77=yes allow_undefined_flag_F77="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_F77="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_F77="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_F77="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_F77="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs_F77=no fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_F77='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds_F77='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: case $host_cpu in hppa*64*|ia64*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; *) hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat > conftest.$ac_ext <<_ACEOF subroutine foo end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc_F77='no' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: inherit_rpath_F77=yes link_all_deplibs_F77=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no hardcode_direct_absolute_F77=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs_F77=no fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc_F77='no' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_F77='-rpath $libdir' fi archive_cmds_need_lc_F77='no' hardcode_libdir_separator_F77=: ;; solaris*) no_undefined_flag_F77=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_F77='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds_F77='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec_F77='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs_F77=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_F77='${wl}-z,text' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_F77='${wl}-z,text' allow_undefined_flag_F77='${wl}-z,nodefs' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-R,$libdir' hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec_F77='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_F77" >&5 $as_echo "$ld_shlibs_F77" >&6; } test "$ld_shlibs_F77" = no && can_build_shared=no with_gnu_ld_F77=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_F77+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 pic_flag=$lt_prog_compiler_pic_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_F77=no else lt_cv_archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_F77" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_F77" >&6; } archive_cmds_need_lc_F77=$lt_cv_archive_cmds_need_lc_F77 ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_F77\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_F77\"" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || test -n "$runpath_var_F77" || test "X$hardcode_automatic_F77" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_F77" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_F77" >&5 $as_echo "$hardcode_action_F77" >&6; } if test "$hardcode_action_F77" = relink || test "$inherit_rpath_F77" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: # and now that that's over, put the MPI compilers back # also, the above hack incorrectly sets the base compiler as the linker if test x$with_mpi_wrappers = xyes; then : CC="$ga_mpi_unwrap_push_save_CC" CXX="$ga_mpi_unwrap_push_save_CXX" F77="$ga_mpi_unwrap_push_save_F77" FC="$ga_mpi_unwrap_push_save_FC" compiler="$CC" LTCC="$CC" lt_save_CC="$CC" compiler_DEFAULT="$CC" compiler_CXX="$CXX" compiler_F77="$F77" fi ############################################################################### # Remaining setup -- some tests, some individual components ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Miscellaneous remaining setup" >&5 $as_echo "$as_me: Miscellaneous remaining setup" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} # Establish some preprocessor symbols. case $ga_armci_network in #( BGML) : $as_echo "#define NO_SHM 1" >>confdefs.h $as_echo "#define USE_MALLOC 1" >>confdefs.h $as_echo "#define BGML 1" >>confdefs.h ;; #( CRAY_SHMEM) : $as_echo "#define CLUSTER 1" >>confdefs.h $as_echo "#define CRAY_XT 1" >>confdefs.h $as_echo "#define CRAY_SHMEM 1" >>confdefs.h ;; #( DCMF) : $as_echo "#define NO_SHM 1" >>confdefs.h $as_echo "#define ARMCIX 1" >>confdefs.h $as_echo "#define DCMF 1" >>confdefs.h ;; #( ELAN3) : $as_echo "#define PTHREADS 1" >>confdefs.h $as_echo "#define SERVER_THREAD 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define ACC_SMP 1" >>confdefs.h $as_echo "#define QUADRICS 1" >>confdefs.h if test x$LIBELAN_NATTACH != x; then : $as_echo "#define MULTI_CTX 1" >>confdefs.h else $as_echo "#define ALLOC_MUNMAP 1" >>confdefs.h fi ;; #( ELAN4) : $as_echo "#define PTHREADS 1" >>confdefs.h $as_echo "#define SERVER_THREAD 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define ACC_SMP 1" >>confdefs.h $as_echo "#define QUADRICS 1" >>confdefs.h $as_echo "#define DOELAN4 1" >>confdefs.h ;; #( GEMINI) : $as_echo "#define LIBONESIDED 1" >>confdefs.h $as_echo "#define CRAY_UGNI 1" >>confdefs.h $as_echo "#define GEMINI 1" >>confdefs.h ;; #( GM) : $as_echo "#define PTHREADS 1" >>confdefs.h $as_echo "#define DATA_SERVER 1" >>confdefs.h $as_echo "#define ALLOW_PIN 1" >>confdefs.h $as_echo "#define SERVER_THREAD 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define GM 1" >>confdefs.h ;; #( LAPI) : $as_echo "#define LAPI 1" >>confdefs.h if test x$LAPI_RDMA != x; then : $as_echo "#define ALLOW_PIN 1" >>confdefs.h $as_echo "#define LAPI_RDMA 1" >>confdefs.h fi ;; #( MELLANOX) : $as_echo "#define PTHREADS 1" >>confdefs.h $as_echo "#define DATA_SERVER 1" >>confdefs.h $as_echo "#define SERVER_THREAD 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define VAPI 1" >>confdefs.h $as_echo "#define ALLOW_PIN 1" >>confdefs.h $as_echo "#define MELLANOX 1" >>confdefs.h ;; #( MPI_MT) : $as_echo "#define PTHREADS 1" >>confdefs.h $as_echo "#define DATA_SERVER 1" >>confdefs.h $as_echo "#define SERVER_THREAD 1" >>confdefs.h $as_echo "#define MPI_MT 1" >>confdefs.h ;; #( MPI_SPAWN) : $as_echo "#define DATA_SERVER 1" >>confdefs.h $as_echo "#define MPI_SPAWN 1" >>confdefs.h if test x$ARMCI_SPAWN_CRAY_XT != x; then : $as_echo "#define SPAWN_CRAY_XT 1" >>confdefs.h fi ;; #( OPENIB) : $as_echo "#define PTHREADS 1" >>confdefs.h $as_echo "#define DATA_SERVER 1" >>confdefs.h $as_echo "#define SERVER_THREAD 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define VAPI 1" >>confdefs.h $as_echo "#define ALLOW_PIN 1" >>confdefs.h $as_echo "#define PEND_BUFS 1" >>confdefs.h $as_echo "#define OPENIB 1" >>confdefs.h ;; #( PORTALS) : $as_echo "#define DATA_SERVER 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define SERVER_THREAD 1" >>confdefs.h $as_echo "#define CRAY_XT 1" >>confdefs.h $as_echo "#define PORTALS 1" >>confdefs.h ;; #( SOCKETS) : $as_echo "#define DATA_SERVER 1" >>confdefs.h $as_echo "#define SOCKETS 1" >>confdefs.h ;; #( VIA) : $as_echo "#define PTHREADS 1" >>confdefs.h $as_echo "#define DATA_SERVER 1" >>confdefs.h $as_echo "#define SERVER_THREAD 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define VIA 1" >>confdefs.h ;; #( *) : ;; esac if test x$REPORT_SHMMAX != x; then : $as_echo "#define REPORT_SHMMAX 1" >>confdefs.h fi if test x$thread_safety = xyes; then : $as_echo "#define POSIX_THREADS 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h fi # Set up MA. if test x$TARGET != xBGL; then : $as_echo "#define ENABLE_ARMCI_MEM_OPTION 1" >>confdefs.h fi if test x$TARGET != xBGL; then ENABLE_ARMCI_MEM_OPTION_TRUE= ENABLE_ARMCI_MEM_OPTION_FALSE='#' else ENABLE_ARMCI_MEM_OPTION_TRUE='#' ENABLE_ARMCI_MEM_OPTION_FALSE= fi if test $ac_cv_type_long_double = yes; then : ma_long_double="long double" else ma_long_double="struct {double dummy2;}" fi MA_LONG_DOUBLE=$ma_long_double $as_echo "#define STATS 1" >>confdefs.h $as_echo "#define VERIFY 1" >>confdefs.h if test "x$ga_cv_target" = xLINUX64; then : case $host_cpu in #( x86_64|ppc64) : $as_echo "#define NOUSE_MMAP 1" >>confdefs.h ;; #( *) : ;; esac fi # Create proper types for our access functions. if test "x$ac_cv_sizeof_voidp" = "x8"; then : ga_access_index_type="integer*8" ga_access_index_type_c="long" else ga_access_index_type="integer" ga_access_index_type_c="int" fi GA_ACCESS_INDEX_TYPE=$ga_access_index_type MA_ACCESS_INDEX_TYPE=$ga_access_index_type MA_ACCESS_INDEX_TYPE_C=$ga_access_index_type_c # Make GP arrays optional. # Check whether --enable-gparrays was given. if test "${enable_gparrays+set}" = set; then : enableval=$enable_gparrays; else enable_gparrays=no fi if test "x$enable_gparrays" = xyes; then ENABLE_GPARRAYS_TRUE= ENABLE_GPARRAYS_FALSE='#' else ENABLE_GPARRAYS_TRUE='#' ENABLE_GPARRAYS_FALSE= fi ############################################################################### # Test suite setup ############################################################################### if test "x$NPROCS" = x; then : NPROCS=4 fi case $ga_msg_comms in #( TCGMSG) : TCGEXEC="`pwd`/armci/parallel.x" ;; #( TCGMSG5) : TCGEXEC= ;; #( MPI|TCGMSGMPI) : if test "x$MPIEXEC" = x; then : for ac_prog in mpirun mpiexec do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MPIEXEC+:} false; then : $as_echo_n "(cached) " >&6 else case $MPIEXEC in [\\/]* | ?:[\\/]*) ac_cv_path_MPIEXEC="$MPIEXEC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MPIEXEC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MPIEXEC=$ac_cv_path_MPIEXEC if test -n "$MPIEXEC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPIEXEC" >&5 $as_echo "$MPIEXEC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$MPIEXEC" && break done MPIEXEC="$MPIEXEC -n %NP%" fi ;; #( *) : ;; esac ############################################################################### # The End ############################################################################### ac_config_files="$ac_config_files Makefile gaf2c/farg.h gaf2c/typesf2c.h global/src/global.fh ma/mafdecls.fh ma/matypes.h" ac_config_files="$ac_config_files tools/ga-config" subdirs="$subdirs armci" subdirs="$subdirs comex" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${BGL_TRUE}" && test -z "${BGL_FALSE}"; then as_fn_error $? "conditional \"BGL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BGP_TRUE}" && test -z "${BGP_FALSE}"; then as_fn_error $? "conditional \"BGP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CATAMOUNT_TRUE}" && test -z "${CATAMOUNT_FALSE}"; then as_fn_error $? "conditional \"CATAMOUNT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_SV1_TRUE}" && test -z "${CRAY_SV1_FALSE}"; then as_fn_error $? "conditional \"CRAY_SV1\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_SV2_TRUE}" && test -z "${CRAY_SV2_FALSE}"; then as_fn_error $? "conditional \"CRAY_SV2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_T3E_TRUE}" && test -z "${CRAY_T3E_FALSE}"; then as_fn_error $? "conditional \"CRAY_T3E\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_XT_TRUE}" && test -z "${CRAY_XT_FALSE}"; then as_fn_error $? "conditional \"CRAY_XT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_YMP_TRUE}" && test -z "${CRAY_YMP_FALSE}"; then as_fn_error $? "conditional \"CRAY_YMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CYGNUS_TRUE}" && test -z "${CYGNUS_FALSE}"; then as_fn_error $? "conditional \"CYGNUS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CYGWIN_TRUE}" && test -z "${CYGWIN_FALSE}"; then as_fn_error $? "conditional \"CYGWIN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DECOSF_TRUE}" && test -z "${DECOSF_FALSE}"; then as_fn_error $? "conditional \"DECOSF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FUJITSU_VPP_TRUE}" && test -z "${FUJITSU_VPP_FALSE}"; then as_fn_error $? "conditional \"FUJITSU_VPP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HITACHI_TRUE}" && test -z "${HITACHI_FALSE}"; then as_fn_error $? "conditional \"HITACHI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HPUX_TRUE}" && test -z "${HPUX_FALSE}"; then as_fn_error $? "conditional \"HPUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${IBM_TRUE}" && test -z "${IBM_FALSE}"; then as_fn_error $? "conditional \"IBM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${INTERIX_TRUE}" && test -z "${INTERIX_FALSE}"; then as_fn_error $? "conditional \"INTERIX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LAPI_TRUE}" && test -z "${LAPI_FALSE}"; then as_fn_error $? "conditional \"LAPI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LINUX_TRUE}" && test -z "${LINUX_FALSE}"; then as_fn_error $? "conditional \"LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MACX_TRUE}" && test -z "${MACX_FALSE}"; then as_fn_error $? "conditional \"MACX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NEC_TRUE}" && test -z "${NEC_FALSE}"; then as_fn_error $? "conditional \"NEC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SGI_TRUE}" && test -z "${SGI_FALSE}"; then as_fn_error $? "conditional \"SGI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SGI_N32_TRUE}" && test -z "${SGI_N32_FALSE}"; then as_fn_error $? "conditional \"SGI_N32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SGITFP_TRUE}" && test -z "${SGITFP_FALSE}"; then as_fn_error $? "conditional \"SGITFP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SOLARIS_TRUE}" && test -z "${SOLARIS_FALSE}"; then as_fn_error $? "conditional \"SOLARIS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CROSS_COMPILING_TRUE}" && test -z "${CROSS_COMPILING_FALSE}"; then as_fn_error $? "conditional \"CROSS_COMPILING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MSG_COMMS_MPI_TRUE}" && test -z "${MSG_COMMS_MPI_FALSE}"; then as_fn_error $? "conditional \"MSG_COMMS_MPI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MSG_COMMS_TCGMSG4_TRUE}" && test -z "${MSG_COMMS_TCGMSG4_FALSE}"; then as_fn_error $? "conditional \"MSG_COMMS_TCGMSG4\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MSG_COMMS_TCGMSG5_TRUE}" && test -z "${MSG_COMMS_TCGMSG5_FALSE}"; then as_fn_error $? "conditional \"MSG_COMMS_TCGMSG5\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CXX_BINDINGS_TRUE}" && test -z "${CXX_BINDINGS_FALSE}"; then as_fn_error $? "conditional \"CXX_BINDINGS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_CHECKPOINT_TRUE}" && test -z "${ENABLE_CHECKPOINT_FALSE}"; then as_fn_error $? "conditional \"ENABLE_CHECKPOINT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PEIGS_TRUE}" && test -z "${ENABLE_PEIGS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PEIGS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PROFILING_TRUE}" && test -z "${ENABLE_PROFILING_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PROFILING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_TRACE_TRUE}" && test -z "${ENABLE_TRACE_FALSE}"; then as_fn_error $? "conditional \"ENABLE_TRACE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${THREAD_SAFE_TRUE}" && test -z "${THREAD_SAFE_FALSE}"; then as_fn_error $? "conditional \"THREAD_SAFE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_GROUP_COMM_TRUE}" && test -z "${HAVE_ARMCI_GROUP_COMM_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_GROUP_COMM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE}" && test -z "${HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_GROUP_COMM_MEMBER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_INITIALIZED_TRUE}" && test -z "${HAVE_ARMCI_INITIALIZED_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_INITIALIZED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_STRIDE_INFO_INIT_TRUE}" && test -z "${HAVE_ARMCI_STRIDE_INFO_INIT_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_STRIDE_INFO_INIT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_NOTIFY_TRUE}" && test -z "${HAVE_ARMCI_NOTIFY_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_NOTIFY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_MSG_INIT_TRUE}" && test -z "${HAVE_ARMCI_MSG_INIT_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_MSG_INIT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_MSG_FINALIZE_TRUE}" && test -z "${HAVE_ARMCI_MSG_FINALIZE_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_MSG_FINALIZE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_GROUP_COMM_TRUE}" && test -z "${HAVE_ARMCI_GROUP_COMM_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_GROUP_COMM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE}" && test -z "${HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_GROUP_COMM_MEMBER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_INITIALIZED_TRUE}" && test -z "${HAVE_ARMCI_INITIALIZED_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_INITIALIZED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_STRIDE_INFO_INIT_TRUE}" && test -z "${HAVE_ARMCI_STRIDE_INFO_INIT_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_STRIDE_INFO_INIT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_NOTIFY_TRUE}" && test -z "${HAVE_ARMCI_NOTIFY_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_NOTIFY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_MSG_INIT_TRUE}" && test -z "${HAVE_ARMCI_MSG_INIT_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_MSG_INIT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_MSG_FINALIZE_TRUE}" && test -z "${HAVE_ARMCI_MSG_FINALIZE_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_MSG_FINALIZE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_ARMCI_TRUE}" && test -z "${ARMCI_NETWORK_ARMCI_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_ARMCI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_BGML_TRUE}" && test -z "${ARMCI_NETWORK_BGML_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_BGML\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_CRAY_SHMEM_TRUE}" && test -z "${ARMCI_NETWORK_CRAY_SHMEM_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_CRAY_SHMEM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_DCMF_TRUE}" && test -z "${ARMCI_NETWORK_DCMF_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_DCMF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_DMAPP_TRUE}" && test -z "${ARMCI_NETWORK_DMAPP_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_DMAPP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_LAPI_TRUE}" && test -z "${ARMCI_NETWORK_LAPI_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_LAPI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_MPI_TS_TRUE}" && test -z "${ARMCI_NETWORK_MPI_TS_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_MPI_TS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_MPI_MT_TRUE}" && test -z "${ARMCI_NETWORK_MPI_MT_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_MPI_MT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_MPI_SPAWN_TRUE}" && test -z "${ARMCI_NETWORK_MPI_SPAWN_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_MPI_SPAWN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_OFA_TRUE}" && test -z "${ARMCI_NETWORK_OFA_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_OFA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_OPENIB_TRUE}" && test -z "${ARMCI_NETWORK_OPENIB_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_OPENIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_GEMINI_TRUE}" && test -z "${ARMCI_NETWORK_GEMINI_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_GEMINI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_PORTALS4_TRUE}" && test -z "${ARMCI_NETWORK_PORTALS4_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_PORTALS4\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_PORTALS_TRUE}" && test -z "${ARMCI_NETWORK_PORTALS_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_PORTALS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_SOCKETS_TRUE}" && test -z "${ARMCI_NETWORK_SOCKETS_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_SOCKETS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DCMF_VER_2_TRUE}" && test -z "${DCMF_VER_2_FALSE}"; then as_fn_error $? "conditional \"DCMF_VER_2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DCMF_VER_0_2_TRUE}" && test -z "${DCMF_VER_0_2_FALSE}"; then as_fn_error $? "conditional \"DCMF_VER_0_2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DCMF_VER_0_3_TRUE}" && test -z "${DCMF_VER_0_3_FALSE}"; then as_fn_error $? "conditional \"DCMF_VER_0_3\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_SRC_DIR_PORTALS_TRUE}" && test -z "${ARMCI_SRC_DIR_PORTALS_FALSE}"; then as_fn_error $? "conditional \"ARMCI_SRC_DIR_PORTALS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_SRC_DIR_GEMINI_TRUE}" && test -z "${ARMCI_SRC_DIR_GEMINI_FALSE}"; then as_fn_error $? "conditional \"ARMCI_SRC_DIR_GEMINI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_SRC_DIR_COMEX_TRUE}" && test -z "${ARMCI_SRC_DIR_COMEX_FALSE}"; then as_fn_error $? "conditional \"ARMCI_SRC_DIR_COMEX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_SRC_DIR_SRC_TRUE}" && test -z "${ARMCI_SRC_DIR_SRC_FALSE}"; then as_fn_error $? "conditional \"ARMCI_SRC_DIR_SRC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_XT_NETWORKS_TRUE}" && test -z "${CRAY_XT_NETWORKS_FALSE}"; then as_fn_error $? "conditional \"CRAY_XT_NETWORKS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SYSV_TRUE}" && test -z "${SYSV_FALSE}"; then as_fn_error $? "conditional \"SYSV\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE}" && test -z "${HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_GROUP_COMM_MEMBER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_GROUP_COMM_TRUE}" && test -z "${HAVE_ARMCI_GROUP_COMM_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_GROUP_COMM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_INITIALIZED_TRUE}" && test -z "${HAVE_ARMCI_INITIALIZED_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_INITIALIZED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_NOTIFY_TRUE}" && test -z "${HAVE_ARMCI_NOTIFY_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_NOTIFY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_MSG_INIT_TRUE}" && test -z "${HAVE_ARMCI_MSG_INIT_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_MSG_INIT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_MSG_FINALIZE_TRUE}" && test -z "${HAVE_ARMCI_MSG_FINALIZE_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_MSG_FINALIZE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_STRIDE_INFO_INIT_TRUE}" && test -z "${HAVE_ARMCI_STRIDE_INFO_INIT_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_STRIDE_INFO_INIT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE}" && test -z "${HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE}"; then as_fn_error $? "conditional \"HAVE_SYS_WEAK_ALIAS_PRAGMA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CXX_NAMESPACES_TRUE}" && test -z "${CXX_NAMESPACES_FALSE}"; then as_fn_error $? "conditional \"CXX_NAMESPACES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NOFORT_TRUE}" && test -z "${NOFORT_FALSE}"; then as_fn_error $? "conditional \"NOFORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_F77_TRUE}" && test -z "${ENABLE_F77_FALSE}"; then as_fn_error $? "conditional \"ENABLE_F77\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_BLAS_TRUE}" && test -z "${HAVE_BLAS_FALSE}"; then as_fn_error $? "conditional \"HAVE_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LAPACK_TRUE}" && test -z "${HAVE_LAPACK_FALSE}"; then as_fn_error $? "conditional \"HAVE_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SCALAPACK_TRUE}" && test -z "${HAVE_SCALAPACK_FALSE}"; then as_fn_error $? "conditional \"HAVE_SCALAPACK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PYTHON_TRUE}" && test -z "${HAVE_PYTHON_FALSE}"; then as_fn_error $? "conditional \"HAVE_PYTHON\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_M4_TRUE}" && test -z "${HAVE_M4_FALSE}"; then as_fn_error $? "conditional \"HAVE_M4\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PERL_TRUE}" && test -z "${HAVE_PERL_FALSE}"; then as_fn_error $? "conditional \"HAVE_PERL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_XREGION_TRUE}" && test -z "${ENABLE_XREGION_FALSE}"; then as_fn_error $? "conditional \"ENABLE_XREGION\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NO_X_TRUE}" && test -z "${NO_X_FALSE}"; then as_fn_error $? "conditional \"NO_X\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_ARMCI_MEM_OPTION_TRUE}" && test -z "${ENABLE_ARMCI_MEM_OPTION_FALSE}"; then as_fn_error $? "conditional \"ENABLE_ARMCI_MEM_OPTION\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_GPARRAYS_TRUE}" && test -z "${ENABLE_GPARRAYS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_GPARRAYS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Global Arrays (GA) $as_me 5.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . Global Arrays (GA) home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ Global Arrays (GA) config.status 5.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' LD_F77='`$ECHO "$LD_F77" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_F77='`$ECHO "$reload_flag_F77" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_F77='`$ECHO "$reload_cmds_F77" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_F77='`$ECHO "$old_archive_cmds_F77" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' compiler_F77='`$ECHO "$compiler_F77" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' GCC_F77='`$ECHO "$GCC_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_F77='`$ECHO "$lt_prog_compiler_no_builtin_flag_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_F77='`$ECHO "$lt_prog_compiler_pic_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_F77='`$ECHO "$lt_prog_compiler_wl_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_F77='`$ECHO "$lt_prog_compiler_static_F77" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_F77='`$ECHO "$lt_cv_prog_compiler_c_o_F77" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_F77='`$ECHO "$archive_cmds_need_lc_F77" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_F77='`$ECHO "$enable_shared_with_static_runtimes_F77" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_F77='`$ECHO "$export_dynamic_flag_spec_F77" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_F77='`$ECHO "$whole_archive_flag_spec_F77" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_F77='`$ECHO "$compiler_needs_object_F77" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_F77='`$ECHO "$old_archive_from_new_cmds_F77" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_F77='`$ECHO "$old_archive_from_expsyms_cmds_F77" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_F77='`$ECHO "$archive_cmds_F77" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_F77='`$ECHO "$archive_expsym_cmds_F77" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_F77='`$ECHO "$module_cmds_F77" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_F77='`$ECHO "$module_expsym_cmds_F77" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_F77='`$ECHO "$with_gnu_ld_F77" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_F77='`$ECHO "$allow_undefined_flag_F77" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_F77='`$ECHO "$no_undefined_flag_F77" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_F77='`$ECHO "$hardcode_libdir_flag_spec_F77" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_F77='`$ECHO "$hardcode_libdir_separator_F77" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_F77='`$ECHO "$hardcode_direct_F77" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_F77='`$ECHO "$hardcode_direct_absolute_F77" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_F77='`$ECHO "$hardcode_minus_L_F77" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_F77='`$ECHO "$hardcode_shlibpath_var_F77" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_F77='`$ECHO "$hardcode_automatic_F77" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_F77='`$ECHO "$inherit_rpath_F77" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_F77='`$ECHO "$link_all_deplibs_F77" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_F77='`$ECHO "$always_export_symbols_F77" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_F77='`$ECHO "$export_symbols_cmds_F77" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_F77='`$ECHO "$exclude_expsyms_F77" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_F77='`$ECHO "$include_expsyms_F77" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_F77='`$ECHO "$prelink_cmds_F77" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_F77='`$ECHO "$postlink_cmds_F77" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_F77='`$ECHO "$file_list_spec_F77" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_F77='`$ECHO "$hardcode_action_F77" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_F77='`$ECHO "$compiler_lib_search_dirs_F77" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_F77='`$ECHO "$predep_objects_F77" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_F77='`$ECHO "$postdep_objects_F77" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' predeps_F77='`$ECHO "$predeps_F77" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_F77='`$ECHO "$postdeps_F77" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_F77='`$ECHO "$compiler_lib_search_path_F77" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ LD_F77 \ reload_flag_CXX \ reload_flag_F77 \ compiler_CXX \ compiler_F77 \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_no_builtin_flag_F77 \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_static_CXX \ lt_prog_compiler_static_F77 \ lt_cv_prog_compiler_c_o_CXX \ lt_cv_prog_compiler_c_o_F77 \ export_dynamic_flag_spec_CXX \ export_dynamic_flag_spec_F77 \ whole_archive_flag_spec_CXX \ whole_archive_flag_spec_F77 \ compiler_needs_object_CXX \ compiler_needs_object_F77 \ with_gnu_ld_CXX \ with_gnu_ld_F77 \ allow_undefined_flag_CXX \ allow_undefined_flag_F77 \ no_undefined_flag_CXX \ no_undefined_flag_F77 \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_separator_CXX \ hardcode_libdir_separator_F77 \ exclude_expsyms_CXX \ exclude_expsyms_F77 \ include_expsyms_CXX \ include_expsyms_F77 \ file_list_spec_CXX \ file_list_spec_F77 \ compiler_lib_search_dirs_CXX \ compiler_lib_search_dirs_F77 \ predep_objects_CXX \ predep_objects_F77 \ postdep_objects_CXX \ postdep_objects_F77 \ predeps_CXX \ predeps_F77 \ postdeps_CXX \ postdeps_F77 \ compiler_lib_search_path_CXX \ compiler_lib_search_path_F77; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ reload_cmds_F77 \ old_archive_cmds_CXX \ old_archive_cmds_F77 \ old_archive_from_new_cmds_CXX \ old_archive_from_new_cmds_F77 \ old_archive_from_expsyms_cmds_CXX \ old_archive_from_expsyms_cmds_F77 \ archive_cmds_CXX \ archive_cmds_F77 \ archive_expsym_cmds_CXX \ archive_expsym_cmds_F77 \ module_cmds_CXX \ module_cmds_F77 \ module_expsym_cmds_CXX \ module_expsym_cmds_F77 \ export_symbols_cmds_CXX \ export_symbols_cmds_F77 \ prelink_cmds_CXX \ prelink_cmds_F77 \ postlink_cmds_CXX \ postlink_cmds_F77; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "gaf2c/farg.h") CONFIG_FILES="$CONFIG_FILES gaf2c/farg.h" ;; "gaf2c/typesf2c.h") CONFIG_FILES="$CONFIG_FILES gaf2c/typesf2c.h" ;; "global/src/global.fh") CONFIG_FILES="$CONFIG_FILES global/src/global.fh" ;; "ma/mafdecls.fh") CONFIG_FILES="$CONFIG_FILES ma/mafdecls.fh" ;; "ma/matypes.h") CONFIG_FILES="$CONFIG_FILES ma/matypes.h" ;; "tools/ga-config") CONFIG_FILES="$CONFIG_FILES tools/ga-config" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX F77 " # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: F77 # The linker used to build libraries. LD=$lt_LD_F77 # How to create reloadable object files. reload_flag=$lt_reload_flag_F77 reload_cmds=$lt_reload_cmds_F77 # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_F77 # A language specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU compiler? with_gcc=$GCC_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_F77 # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_F77 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_F77 # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_F77 # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_F77 # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_F77 # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_F77 # Specify filename containing input files. file_list_spec=$lt_file_list_spec_F77 # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_F77 # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_F77 postdep_objects=$lt_postdep_objects_F77 predeps=$lt_predeps_F77 postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # ### END LIBTOOL TAG CONFIG: F77 _LT_EOF ;; "tools/ga-config":F) chmod +x tools/ga-config ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi # # CONFIG_SUBDIRS section. # if test "$no_recursion" != yes; then # Remove --cache-file, --srcdir, and --disable-option-checking arguments # so they do not pile up. ac_sub_configure_args= ac_prev= eval "set x $ac_configure_args" shift for ac_arg do if test -n "$ac_prev"; then ac_prev= continue fi case $ac_arg in -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ | --c=*) ;; --config-cache | -C) ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) ;; --disable-option-checking) ;; *) case $ac_arg in *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_sub_configure_args " '$ac_arg'" ;; esac done # Always prepend --prefix to ensure using the same prefix # in subdir configurations. ac_arg="--prefix=$prefix" case $ac_arg in *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" # Pass --silent if test "$silent" = yes; then ac_sub_configure_args="--silent $ac_sub_configure_args" fi # Always prepend --disable-option-checking to silence warnings, since # different subdirs can have different --enable and --with options. ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" ac_popdir=`pwd` for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue # Do not complain, so a configure script can configure whichever # parts of a large source tree are present. test -d "$srcdir/$ac_dir" || continue ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 $as_echo "$ac_msg" >&6 as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" # Check for guested configure; otherwise get Cygnus style configure. if test -f "$ac_srcdir/configure.gnu"; then ac_sub_configure=$ac_srcdir/configure.gnu elif test -f "$ac_srcdir/configure"; then ac_sub_configure=$ac_srcdir/configure elif test -f "$ac_srcdir/configure.in"; then # This should be Cygnus configure. ac_sub_configure=$ac_aux_dir/configure else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} ac_sub_configure= fi # The recursion is here. if test -n "$ac_sub_configure"; then # Make the cache file name correct relative to the subdirectory. case $cache_file in [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; *) # Relative name. ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 $as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} # The eval makes quoting arguments work. eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 fi cd "$ac_popdir" done fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi # Report on what we found. { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: **************************************************************" >&5 $as_echo "$as_me: **************************************************************" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: $PACKAGE_NAME configured as follows:" >&5 $as_echo "$as_me: $PACKAGE_NAME configured as follows:" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: **************************************************************" >&5 $as_echo "$as_me: **************************************************************" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: TARGET=$ga_cv_target" >&5 $as_echo "$as_me: TARGET=$ga_cv_target" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: MSG_COMMS=$ga_msg_comms" >&5 $as_echo "$as_me: MSG_COMMS=$ga_msg_comms" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_MP_LIBS=$GA_MP_LIBS" >&5 $as_echo "$as_me: GA_MP_LIBS=$GA_MP_LIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_MP_LDFLAGS=$GA_MP_LDFLAGS" >&5 $as_echo "$as_me: GA_MP_LDFLAGS=$GA_MP_LDFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_MP_CPPFLAGS=$GA_MP_CPPFLAGS" >&5 $as_echo "$as_me: GA_MP_CPPFLAGS=$GA_MP_CPPFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: ARMCI_NETWORK=$ga_armci_network" >&5 $as_echo "$as_me: ARMCI_NETWORK=$ga_armci_network" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: ARMCI_NETWORK_LDFLAGS=$ARMCI_NETWORK_LDFLAGS" >&5 $as_echo "$as_me: ARMCI_NETWORK_LDFLAGS=$ARMCI_NETWORK_LDFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: ARMCI_NETWORK_LIBS=$ARMCI_NETWORK_LIBS" >&5 $as_echo "$as_me: ARMCI_NETWORK_LIBS=$ARMCI_NETWORK_LIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: ARMCI_NETWORK_CPPFLAGS=$ARMCI_NETWORK_CPPFLAGS" >&5 $as_echo "$as_me: ARMCI_NETWORK_CPPFLAGS=$ARMCI_NETWORK_CPPFLAGS" >&6;} if test "x$enable_f77" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: F77=$F77" >&5 $as_echo "$as_me: F77=$F77" >&6;} if test "x$with_mpi_wrappers" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: unwrapped F77=$ga_cv_mpif77_naked" >&5 $as_echo "$as_me: unwrapped F77=$ga_cv_mpif77_naked" >&6;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: FFLAGS=$FFLAGS" >&5 $as_echo "$as_me: FFLAGS=$FFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: FFLAG_INT=$FFLAG_INT" >&5 $as_echo "$as_me: FFLAG_INT=$FFLAG_INT" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_FOPT=$GA_FOPT" >&5 $as_echo "$as_me: GA_FOPT=$GA_FOPT" >&6;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: CC=$CC" >&5 $as_echo "$as_me: CC=$CC" >&6;} if test "x$with_mpi_wrappers" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: unwrapped CC=$ga_cv_mpic_naked" >&5 $as_echo "$as_me: unwrapped CC=$ga_cv_mpic_naked" >&6;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: CFLAGS=$CFLAGS" >&5 $as_echo "$as_me: CFLAGS=$CFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_COPT=$GA_COPT" >&5 $as_echo "$as_me: GA_COPT=$GA_COPT" >&6;} if test "x$enable_cxx" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: CXX=$CXX" >&5 $as_echo "$as_me: CXX=$CXX" >&6;} if test "x$with_mpi_wrappers" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: unwrapped CXX=$ga_cv_mpicxx_naked" >&5 $as_echo "$as_me: unwrapped CXX=$ga_cv_mpicxx_naked" >&6;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: CXXFLAGS=$CXXFLAGS" >&5 $as_echo "$as_me: CXXFLAGS=$CXXFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_CXXOPT=$GA_CXXOPT" >&5 $as_echo "$as_me: GA_CXXOPT=$GA_CXXOPT" >&6;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: CPP=$CPP" >&5 $as_echo "$as_me: CPP=$CPP" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CPPFLAGS=$CPPFLAGS" >&5 $as_echo "$as_me: CPPFLAGS=$CPPFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: LDFLAGS=$LDFLAGS" >&5 $as_echo "$as_me: LDFLAGS=$LDFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: LIBS=$LIBS" >&5 $as_echo "$as_me: LIBS=$LIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: FLIBS=$FLIBS" >&5 $as_echo "$as_me: FLIBS=$FLIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: BLAS_LDFLAGS=$BLAS_LDFLAGS" >&5 $as_echo "$as_me: BLAS_LDFLAGS=$BLAS_LDFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: BLAS_LIBS=$BLAS_LIBS" >&5 $as_echo "$as_me: BLAS_LIBS=$BLAS_LIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: BLAS_CPPFLAGS=$BLAS_CPPFLAGS" >&5 $as_echo "$as_me: BLAS_CPPFLAGS=$BLAS_CPPFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: AR=$AR" >&5 $as_echo "$as_me: AR=$AR" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: AR_FLAGS=$AR_FLAGS" >&5 $as_echo "$as_me: AR_FLAGS=$AR_FLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CCAS=$CCAS" >&5 $as_echo "$as_me: CCAS=$CCAS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CCAS_FLAGS=$CCAS_FLAGS" >&5 $as_echo "$as_me: CCAS_FLAGS=$CCAS_FLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: DEFS=$DEFS" >&5 $as_echo "$as_me: DEFS=$DEFS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: SHELL=$SHELL" >&5 $as_echo "$as_me: SHELL=$SHELL" >&6;} case $ga_msg_comms in #( MPI|TCGMSGMPI) : { $as_echo "$as_me:${as_lineno-$LINENO}: MPIEXEC=$MPIEXEC" >&5 $as_echo "$as_me: MPIEXEC=$MPIEXEC" >&6;} ;; #( *) : ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: NPROCS=$NPROCS" >&5 $as_echo "$as_me: NPROCS=$NPROCS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} ga-5-3/armci/0000750005473000001440000000000012275260545011676 5ustar d3n000usersga-5-3/armci/doc/0000750005473000001440000000000012275260542012440 5ustar d3n000usersga-5-3/armci/doc/README.PVM0000640005473000001440000000305011300316052013742 0ustar d3n000users Regarding to the group used in PVM, a global variable is defined in armci.h and a extra optional function, ARMCI_PVM_Init, can be used to pass a PVM group to ARMCI. On CrayT3E: the default group is the global group which is (char *)NULL It is the only working group. On Workstations: the default group is "mp_working_group". User can set the group name by calling the ARMCI_PVM_init (defined in message.c) and passing the group name to the library. Differencies between Cray and Unix Workstations 1. Linker libraries: On Cray: -lpvm3 On Unix Workstations: -lgpvm3 -lpvm3 also need the group lib 2. Groups On Cray: There is a default global group, which can be referred to (char *)NULL, or PVMALL) On Unix Workstations: There is no default group. 3. Obtaining PE number. On Cray: pvm_get_PE(get_mytid()) to obtain their own PE number. On Unix Workstations: pvm_getinst(group, mytid) standard. 4. Running the program On Cray: PVM daemon should not be started. The pvm_spawn is not called. The number of process is controlled at compile time, or by using the run command mpprun. mpprun -n 4 test.x So there is no need to initialize the PVM in the test.c On Unix Workstations: Must run PVM daemon first % pvm and then quit Call pvm_spawn to creat other processes. In test.c, there is a initialization routine and the format to run is test.x ga-5-3/armci/doc/README.myrinet0000640005473000001440000000775411300316052015006 0ustar d3n000usersThe following instructions describe how to setup Myrinet and build ARMCI to run over Myrinet using the Myricom GM interface and MPICH/GM. Notes: - any other message-passing library is not supported - This code was tested and is supported only on Linux Intel & Sparc and Solaris/sparc platforms. If you have other configuration please try if it works, otherwise please send a message to 1. Installation of Myrinet and the GM library (must have root privilege) * To build gm on linux smp nodes, run configure with the following options. For details, refer to README-linux. --enable-linux-smp --enable-linux-modversions then run make * Install the driver, cd binary ./GM_INSTAll * Run mapper cd sbin mapper active.args * Check the configuration gm_board_info It lists the driver information and routing table. 2. Setting up the environment * Note: We strongly recommend using GM version 1.2 or higher * ARMCI on top of GM requires the following environment variables to be set (Examples are taken on colony cluster of PNNL, using csh) setenv TARGET LINUX setenv GM_HOME /home/myrinet/gm-1.2/gm setenv GM_INCLUDE $GM_HOME/include setenv GM_LIB $GM_HOME/lib setenv ARMCI_NETWORK GM * For MPICH-GM the following additional environment variables need to be set (again using examples of colony cluster of PNNL and csh) setenv MPI_LOC /home/myrinet/mpich-1.2/mpich-gm setenv MPI_LIB $MPI_LOC/build/LINUX/ch_gm/lib setenv MPI_INCLUDE $MPI_LOC/include set path = ($MPI_LOC/bin $MPI_LOC/build/LINUX/ch_gm/bin $path) setenv LIBMPI -lmpich However, if you prefer to use MPICH compiler wrappers mpicc, mpif77 etc these definitions are not needed. Also, since the default name for the MPI library assumed by armci is -lmpi, you would need to set LIBMPI="" or "-lmpich". -- without PBS set a $HOME/.gmpi/conf file like this: # .gmpi/conf file begin # first the number of nodes in the file 8 # the list of (node,port) that make the MPI World nb26.colony.emsl.pnnl.gov 2 nb26.colony.emsl.pnnl.gov 4 nb27.colony.emsl.pnnl.gov 2 nb27.colony.emsl.pnnl.gov 4 nb28.colony.emsl.pnnl.gov 2 nb28.colony.emsl.pnnl.gov 4 nb29.colony.emsl.pnnl.gov 2 nb29.colony.emsl.pnnl.gov 4 # .gmpi/conf file end -- with PBS node files are created dynamically, but should have the same format as the default .gmpi/conf IT IS REQUIRED THAT MPI TASKS RUNNING ON THE SAME SMP NODE BE NUMBERED CONSECUTIVELY GM Port Usage: The current ARMCI implementation uses two GM ports. If STATIC_PORTS is defined, they are called ARMCI_GM_SERVER_RCV_PORT ARMCI_GM_SERVER_SND_PORT The default port numbers are 5 and 6, set in the file armci/src/myrinet.h. Users can choose different ports by editing the definition, depending on the system settings and at least not conflicting with the ports used by MPI. If STATIC_PORTS is NOT defined, ARMCI will search for first two available ports on up to two myrinet boards. 3. Test run Go to armci/src and make test.x Using mpich-gm: run it as regular mpi programs (make sure the mpirun is come from mpich-gm. many systems have multiple mpi installed) mpirun -np #procs test.x This will read the default .gmpi/conf 4. Contact info and bug report email: parsoft-support@emsl.pnl.gov 5. Other issues: GM does not allow fork. This system call is normally used on Unix in ARMCI to test how big a shared memory segment can be allocated. This test is diabled under Myrinet/GM. It means that ARMCI can use only shared memory segments predefined _SHMMAX in shmem.c for a particular platform. If you increase that limit in the system, _SHMMAX must be accordingly modiefied and ARMCI recompiled. The current port or ARMCI to GM is not fully optimized yet. ga-5-3/armci/doc/armci.pdf0000640005473000001440000026700411300316052014222 0ustar d3n000users%PDF-1.2 % 2 0 obj << /D [1 0 R /XYZ null 766 null] >> endobj 3 0 obj << /D [1 0 R /XYZ null 53 null] >> endobj 4 0 obj << /D [1 0 R /XYZ null 727 null] >> endobj 5 0 obj << /D [1 0 R /XYZ null 700 null] >> endobj 6 0 obj << /D [1 0 R /XYZ null 684 null] >> endobj 7 0 obj << /D [1 0 R /XYZ null 668 null] >> endobj 8 0 obj << /D [1 0 R /XYZ null 652 null] >> endobj 9 0 obj << /D [1 0 R /XYZ null 638 null] >> endobj 10 0 obj << /D [1 0 R /XYZ null 609 null] >> endobj 11 0 obj << /D [1 0 R /XYZ null 588 null] >> endobj 12 0 obj << /D [1 0 R /XYZ null 308 null] >> endobj 13 0 obj << /CreationDate (D:191001102164319) /Producer (\376\377\000A\000c\000r\000o\000b\000a\000t\000 \000D\000i\000s\000t\000i\000l\000l\000e\000r\000 \0003\000.\0000\0002) /Title (Untitled Document) /Creator (FrameMaker 5.5P4f) >> endobj 14 0 obj << /D [1 0 R /XYZ null null null] >> endobj 15 0 obj << /D [1 0 R /XYZ null null null] >> endobj 16 0 obj << /I << /Title (A) >> /F 17 0 R >> endobj 18 0 obj << /Length 4648 /Filter /FlateDecode >> stream HWK#X4ߏy7Hb#I.zȖX"קjJq `ĮLJׯ)1yؾ~DMib,΢2Y5y8~aoٝׯ$|sJSEM*qTUJL,Kk?3ᦎsQan4ʂ%$*a\y 8؅0#j3c)D=dn ƉyT  ΢0I8SYtQĹz4aMFg~5N&']pӈD$LC7aLHWY3k:?*SJe ܕqZҜ/LI*W2:TvbңI #cK`RX|WϾ8 4ʈΛUĤވJ%9Æi@ǖ؆){]O`OcX쟜@NMO`@ÃyTJ1VkzSSQܘI&jq鿅 , X>%òmc vs(4EU&* kęnUT7OEXhBA`qEy}wO .Q8lȧ#^HQ$V&;[4 sPӏ"_ Ln}Ӣ^ o/x>7*zޝ٩" sǐk?8VMDcZi?:s K6r&2ܑ#$є\)5\* c;?7bH5j9WYf;[6%I6~w͙)#rU''+/48P'06V).$=/?HG\-ʞIkEy ׀ZE'G%Eͷ8.hvbi1ȣ *E=vceՅ,[._89`nY%9:<^ DKBy7RRվsr\DȆ_kP"ˇx ~ؙ (pq"#Qr"sT9|b (x݋vw⤂%"x/VN^0(iT}EfxReOad J ZQҰT$9ᰄ5Q!JO}T-{-@qwo2/fhyt*W}k!GEeݿV JꯒQoy<1Z1CX[HfKjY+ճ^ i{Q\l( 愌v-#r=G/ pDi5GwWw/rH IRESamؿbTEU|8;L=-RÈJ7.Z#ꊰM0*i) yQ64sMU>6)L[5;jOᇭ$s8RI ]Qގ#l0hb(gl 8]𳸣 cζ C!,ćGrWtvA?zsǀ';󂇫Õ؝(X0:&Ta֞eYOœhd(K $V޸N~:{TulϷ: RK{upyc|2C悱{ab>WeKو=Pj 2Y_S։: rTΟl;ٵ7~u)c=Q]d0P(}`xfܵ_˜+7} hDDcu<@RjulQe }׹V`/P)IAP=LuloQ}Tz©b_zhh'GNȋX9";hv >?疱뗲Sf{.nk7RaGCz+U0<'&MG|Ihl-W}bZ}MAe:-(CҚ7?ũ12קhrv߸-ZH0&c?GxD<>g3;7S]AgFIsߖ}C7TJh) M'X|yDLvSndXy`”JPK4-X-GHE#u;aK/4A?G0RZzQMNRK 6F@r̍0&zTȍo0B ʚϋD +OmSev kCa~ͭFUH "j KH]sr-Ƞ3UwPG3hWb/}AoWϴ[*^/V | \Ӻ\?3D~ez"<]dSYv8`A: OK;DRs"U `Dm'%)3EȚ Rgı s(-{[.~=XH{\ǧu ȩr2<ϯwabs--br*į\;߲}G[:?99%od @BS^i1&*pZdAd0M J{܉i}x/H}b2tyA(:}-pi'pϧ^ r*ٛc*ۤ0)P^vA*HWu%eWpp9`GvXA2nL6;]UB 쮯aNZ]-“IN% +P-"Y*2J ,ZۆewqVma S2Fa|wjHlNz:|2g8͘3W/:*S؁pEkx'pD\q*&'(}aݜn i ڥ7S);n/gz:꺓!ӄ"n?\0Gvnс75no]:lq# cn:ot<5K cmBQ21{lM2^16-ՎBjg2o:EnFM NJ"4ME?ݸYhG9mVacB }W6Ao]Ee2p[MX4CN1k75^4QZ4J`ybi$6֬ګeYiV-m8K\u E׾mޖDָO;6_rmx(^tk =d~S>DWS%  endstream endobj 19 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F2 21 0 R /F3 22 0 R >> /ExtGState << /GS1 23 0 R >> >> endobj 26 0 obj << /D [25 0 R /XYZ null 730 null] >> endobj 27 0 obj << /D [25 0 R /XYZ null 580 null] >> endobj 28 0 obj << /D [25 0 R /XYZ null 339 null] >> endobj 29 0 obj << /D [25 0 R /XYZ null 279 null] >> endobj 30 0 obj << /D [25 0 R /XYZ null 211 null] >> endobj 31 0 obj << /D [25 0 R /XYZ null 193 null] >> endobj 32 0 obj << /D [25 0 R /XYZ null 146 null] >> endobj 33 0 obj << /D [25 0 R /XYZ null null null] >> endobj 35 0 obj << /Length 4997 /Filter /FlateDecode >> stream HWKoF0bćHq&Y0Ƙ12CjICKoU}ՒI~|ϗ~96yٽWFen'2VIWQY/b?ꥒIIeiZ|-ļ2)vAq\ȍ!\GE~/_C]k[ʊZM| ޸+QO݁5erg;T^ Oy}>:g>*/tØ] 3d[~=Jr[sT=R8tc#삍1386ud0-U#Gidjb{U (9zTOࠣBIkî峸zsЪEґBw&}3 PB6SGk蓰>GPɍ8|$rL:5;AZdCjWgyT!c%ZpgdwH>Pp|r$PH\lxQ5䚱(l \%V =ƃWj%Fݽ_ f1HJdmnzY9-XK BౝmB*h1WΊsw|! x (72 @ {*R2FWc BityLrFfHsP'xc}Z՗:Y/҃(Ia%<+ЖqFG=P.VbW;߷ Tj] ~$/78/ipwYGdWf]8ackJ2N057LQ H+-5ssʗ^̰7'a"=mɌ[VF%?̀A40:@W~/]ohp2 ٫ #nhb9Vt%7&ʯ G>#PLv_$C 7U,Ԃq߽}q DNGJ&JHʲk1A^+w4_MeĀ%H2y9Bf/T1RXj!JW=wLZ"WwTtuH!ʥ /?̡S/ "Jz#۹P- ` {[ac4g:F|EރQ\2VrJswpu6`duf?w?D IʸJug>P ^Gw -?QO k͖~J*FV\v9uz3 )-[Ď-`qaBr-{"ݪDn{ן44O5 -JO8QRh,ZK(Mh"6f%;bSZmՁl)reZэvdm朡6O}봁hn&Dxi+@7V zmF{'iz9 }vcpKTb9LDBX$cHj[Vg4T,ZrO4VUsϗZ>"@ cˑL80[A}*J)0GSQ*qkc:xg3T-hŮ|[/đSm?U8rC(m%m 0`\dVFY/K;4VUHV1C t.@?! >H{ERꪄr{ ^eS6 ==Є\P ůVhiq\Xt_0A.5i޽?3=侃bZl蛡Z`cIjHޖ;АPi-*tv~!Vj›ݠd -G@%nTčJ΂TjBoݠաW*cWصo"0k,hOKADi~!_݇wrve>8݃7_{N5olU:UIKǸ`MW޻Ժ{jw]k9nv!tNߥ{܇=>m?/o YfڮaڛWk̹*tFEN-YC%rFTpмֻo红%kݔ9+"i1kŋ w +?Z/Eunf#+noX7$XT!4ko>ӻo9(U:  R)Rt@cEN8mX-I1}IYZ[\3ϵEO<<(Y3nC$?Kn%SU*[j}>*0z?J.*X}_k_9*i/;Gasp"1'Kp %t I5~-ȣ0zq–3[ 4r6)Ev[Aa S\h;5[O$,np\d4dӣ|pW 9B=X˵~^4*q7gUքʒ[.9EOG\E{} l!8<~;p*9P!(5q8 ]Q>dD'PfD~jǩk+ogӘeo)6b0S[q4*f%} Ib.8IR7ʾ:ȽN,Q4J7*@W` */AqѐυGﴟmq}^,N]ndoG6D\T~O(u9/ïF0\5 endstream endobj 36 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F2 21 0 R /F3 22 0 R >> /ExtGState << /GS1 23 0 R >> >> endobj 38 0 obj << /D [37 0 R /XYZ null 524 null] >> endobj 39 0 obj << /D [37 0 R /XYZ null 511 null] >> endobj 40 0 obj << /D [37 0 R /XYZ null 498 null] >> endobj 41 0 obj << /D [37 0 R /XYZ null 486 null] >> endobj 42 0 obj << /D [37 0 R /XYZ null 473 null] >> endobj 43 0 obj << /D [37 0 R /XYZ null 461 null] >> endobj 44 0 obj << /D [37 0 R /XYZ null 442 null] >> endobj 45 0 obj << /D [37 0 R /XYZ null 405 null] >> endobj 46 0 obj << /D [37 0 R /XYZ null 387 null] >> endobj 47 0 obj << /D [37 0 R /XYZ null 344 null] >> endobj 48 0 obj << /D [37 0 R /XYZ null 587 null] >> endobj 49 0 obj << /D [37 0 R /XYZ null 91 null] >> endobj 50 0 obj << /D [37 0 R /XYZ null null null] >> endobj 34 0 obj << /P 25 0 R /R [63 63 549 729] /V 17 0 R /N 51 0 R >> endobj 52 0 obj << /Length 6752 /Filter /FlateDecode >> stream HWێܸ}7ࣴp)bdׁ . [ݣ/ Q*cbթSUԟn^z2ٿ~ؘW|9~Uϕ9<͖U~UQ;/bkn~EYZO7ۺfy{|g|Gey7MQentg~k"dSiAf!p{|xwt!{~-50{kk\0zuywypTV ͑ t\`;d/k! !G̯֍=vH3R tDI{=4Uk+fi:t7 ~{hf@!(kۙMrW^A KC[ ѕ[PkN4p?Q7ug=F਺2ɀiKNjXsfAxef/ zP̉R#s|8"5Ѯip/r HWphp`:⵶ Tx&H r &/Uꭼ#(2\ v^8z"=v89c)"/W&G^1-ɲO.H<tzb ( h'p"?PfBmԷS(ՙt5 F7Ɩɰq(#YĕKSέן.E'A|- 2x:MDîx"U-v# T+3?73Z :͑4@w 4 X#X4EPW1>RHE6:Sh1\`m:R)]OicX|\h}/| b 녭>uf]FaFcYئ.ʨNi + ;ۘv݂d4g·ᯅ Bj n!64$ jT*-,r@ǂxHJbYD'.% (Ax]@k`9$s.@W@)cK;GD⣲3%^z#DatDaS]BT4uE%lɞVX13@tʱ }PѢNdCVD˜b4: X*j9 pU[KNӀg 9XVnnJN3V@-$+ 5#cit"4iJ,E[`q/N|,:P)|t+n(T@ZֳQ=3%*QNXr"qlN[d)/ `֗HEKL:ehwymEsPqB\/At;l5KQ@NêJe-@OA}^9>+ e$)'C P-sbu*5%m9 ej}lSk $ǜE$h`ǹ1ttkO*ϽpUb XuKX% ڱEA8Et"K!,2瑔^dUp۴-.5_ݚ_^o^zolHomU[d<hxm|ٸƟoWƝޜ^e/l[˭qy~ڮڵfy]o]aj;$ޚCN*;#WGNLqZYZF|fG@o '\@T{M!?ΫG܆ ?;lc!X۽pJA}H>RRU6X`J({,èyx8r>]͎7˩o1giFy=݈Zm0!r4/K JZMTM0Di^a#y4&RH ǢEȽ ǫ1@J~?bٮ{Ag@ܳчtJG7r3]{Ҕ]d7Ȥ\pPnw͟ڽwm'v% I hfmwL qI+xÝ H:H@jta$ը԰`3Ӹ4 !5 1qd= V4#bz&Fצhg!8)QH0;NwuDj x_/ J)P3=ġD};rM]Q27({l;%XJ+efV&Nt p!x$h=tv,2kl[T*Vπ&>.VRA9=[iҷZԬX.ڒBLqz_*$wɳ}ێQ<ދq*^Ql1|LjbbA^ޫJa @R%e}YDmQxhJ;$Œ|Mz,mNI!o*ɅtЀGCT  PFKECCSTPY[)Y1Syem܏S3IP8(A0CDQy!GR)hyh`@KK}+4 ӌ=2H$*PXifbU&m (j9/389:Ub.zW<9.z h"-ҫZM`|(Х{8 ]w7HR&0BhߪW]Q7I@k;݅Md^FmK7E9Ͳ Awʑ9CM@S5.HvbqvaT1ΙE̠+1 96ɧM ьlgdQoCpflf02PPk%A-0 otۦ# μ-) s9Vx f`ul Kwm(!k9C':AC2f &g7oP[$CjJV1#S@# %@WAJIytmٗif`! 88АxWzH-45c,dbGI6;0yC؍7;l;eCT9v0[ki )3vKH??ƇbN;l;U$ȉnqт6W1i%I#jk h<1 %1jZ(#'<]%`rgBGgݟ/$"wfJhSƂl 8 1~ fZRǶ]Q8%) %`ggEhd~~hqҙdr߹zyybx ɧ/Cri{<'6pq{lv~]~ۍ|oOt!}OUW|J|vLe W~ǟ'&ʾWtDDřZגWK2˒][r@k0.|ry'c |__rWU61]пo_pE ?/0_cdƚ~b,|7G+#ZOq8ۅ+|fJMʹ](hmhtwXGY˪CV;/a~?1, ON ȌMzwU%;ӨNK2ܥs[X;43R+K<2<}xY>x]ҏ7V٨۠ =uR QVhoBM'dVPUї>TyJeP*ml!uh&—b6NiB !cr!]V;߶cv U/۳{^T2”M!M|[/Nu!aٮo3l@״YB$cf hZ,P [1,0Nig Xa.$.vyxc@!K'~HNW5 E۩Q D̖=d#]l&9rPNwI 3KOc Q#.A,b@y9%sfm"Y$ eƥ08i5k4CJ6Nw!$۳0x@/ v E4ofimf$U)к@ś 3&@9T!b*M Į[nö]]1 $:E$T [E*:PtTzъLen?B!O c[JOϫ47PUumTvtXs6: |v:OUr/OrjYY'{ 6IC!yZF@讒ݸaz/.Zlz͡f&,-%ERl MqyG&+*ݹ"r,(e"8C6LlTe4ZW fGlYCi\DUl#A0Vd29KO:nTLB+fwLawu7VʼnhQ4ev> ӬKO̘Q G֦RV}B.sN2e E)@`{0ҋhlf/\lbC(]%\^,ŖFô[a* !ѐt );,((t 0}ZFMl K8 (A8_y 햋3\, !uXPBcUV?! Uֵ` 1(PrF+^m'x .m]mQac\@TҨ׼:_Xae~ R2p|nR>B,9P`HG"iOz@2UeJ` 9 n8 FN*/dd #\@ŷQbA@ sJZFxՂp46d40c% F4lݔLvR#C;pA@bRyRWx=3108}`!kLdEA7Q~BIPֈL /Z` wx ңXEʤ(rlcZBz&[ =-=#Z6rJ$P8*G$HsJUlpp`&/iM6z#UXGJ- g>FFl5rGd@"2Yz/Wx3X1T35cދ z~{?g!@ŗn"m^{gt;0 7TD^?~顽ox7sݵ~Kg|MIyB3;;9)ۓ3=O. R{"]Q{ -écOor.?6\J</rN=zpml 64 PRy:xE]t.Ɛ9J˲sU endstream endobj 53 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F3 22 0 R /F4 54 0 R >> /ExtGState << /GS1 23 0 R >> >> endobj 56 0 obj << /D [55 0 R /XYZ null 497 null] >> endobj 57 0 obj << /D [55 0 R /XYZ null 484 null] >> endobj 58 0 obj << /D [55 0 R /XYZ null 471 null] >> endobj 59 0 obj << /D [55 0 R /XYZ null 459 null] >> endobj 60 0 obj << /D [55 0 R /XYZ null 446 null] >> endobj 61 0 obj << /D [55 0 R /XYZ null 434 null] >> endobj 62 0 obj << /D [55 0 R /XYZ null 415 null] >> endobj 63 0 obj << /D [55 0 R /XYZ null 379 null] >> endobj 64 0 obj << /D [55 0 R /XYZ null 350 null] >> endobj 65 0 obj << /D [55 0 R /XYZ null 307 null] >> endobj 66 0 obj << /D [55 0 R /XYZ null 270 null] >> endobj 67 0 obj << /D [55 0 R /XYZ null 251 null] >> endobj 68 0 obj << /D [55 0 R /XYZ null 155 null] >> endobj 69 0 obj << /D [55 0 R /XYZ null 137 null] >> endobj 70 0 obj << /D [55 0 R /XYZ null 121 null] >> endobj 71 0 obj << /D [55 0 R /XYZ null 104 null] >> endobj 72 0 obj << /D [55 0 R /XYZ null 563 null] >> endobj 73 0 obj << /D [55 0 R /XYZ null null null] >> endobj 51 0 obj << /P 37 0 R /R [63 63 549 729] /V 34 0 R /N 74 0 R >> endobj 75 0 obj << /Length 9368 /Filter /FlateDecode >> stream HW[۸~LmEu>%iRشE>,-G->n9qגּj}T>\$S. LϟjŪ݀UE=cJE2ASq$I_6(&;׮٨C_d>"6D')7Q6Q cljou;_D ; ̟ m׺tֳMWC4KHZ ;X-ݙ@7uy{!(Pއ6P ->WB2 r*>kd>qEj/J|(VX- ?V(2MEwbIieB4BW_>n 1x4\$gK(}mu EEg@-+9{?F( ,&bT r<)F%hu[n_Ne>.i%4oF1#[wՊL1@]Ԁ ?7`HJVnzsxb }Y-}3n'NL‰U)OL4H6 -1q-9xCy#P]-A+ pCsFt*C(MI &iCpH*1E06%+Yz~[4^a+t6@hi/BYI=c;aǦ-xtd:5w "VP7SomRYoSo|PU,r EqzՇ#7WBw7Eex%`d?GڧJ1^пكA}im1([CpU.ҺMaB#\{lgraڊG`K9et-uH ujd1Qu@O[ D1>)$:ޥcdy q=(0KQ |=.ѱ}RI~ݻr/>rj+~za8*H0V]֏(|Rkv\:'8RCX:_5m+d(0O6R)u{ J,:(̏Rm)_F*Y:oo.Λ̖lxڿ iNb{6.=Lpg>ߺ 2+7ۃl۱,*чPM%bPZ,`Rq/9穦\MuTq5+b:l],0/:Tp@Y1sID&I& *b?g1d""󱣄}e u]@~bȷz!Q}G׈q2ʂЎLHq|b}3b xLЖ{4r0/śaZ5ڞol#^"`XQjor1DR+bGpEl߾d@αЉ(TW.-y0.@͆~A%cs%\n'"l=_:˜T}4ԍeL2h]0+ 3+c1.$AmQ#̶G8κʹǬTqd'bqrY+$))ȇ硎;ߓ4AsHJ@Zm+s Dd8!N$*FpiW [`A\E,İ5 3 o1 |偅 v@l18GphOF*RofC 5D"k6JnV $+IG{ !CϻicG61obaB6eAh;jA;<ћ xw@7 F;T4XG-70;Xjo),zE$ɇsc9@5ƌ >>2]Ou50׽Rf O6GT UaSm,u75<[l. ?^PmWAaV^C) %ޱ®Ԧ#ѯQ:RzߍIv)ۏ*6!TbUDY1(3}BLZP)cW9Pjl͟}҂FXyuc بQt%ӍB9ND)/7aQV/JZ'ۄ OiԖ$. _X+/I]Q3G2OW6 H1iq_U;/_+M";+z3 ̭W*eBkOfAB%,'P6=^0Q)%5D0`7Ixɶ tlGZz8n݀C®aI8_thg%3*v},=+]4(EG2&GEƯgj lp( ɋmN=p <.޳[h*CD'*X9½PO~f)~] G2 }L>FG'Hcr;n\9/4dm|kSis:a&=y;ߑ9wO.46B۞'l}`ek1QƱ90w; DO _0y8Ԓq 02 刄L *zt&"X*2̞fPhB'Fʄቄ4 Fe\Ą=a\;HP8K zE!0H&H jr㈺Lj@ &D*cI Aָ\23nBDLZB*#0s"\W畟vfMcZ7 %P{-;)4o)PC%N\VFI+^ꐮaoF *Kf#XS1|9($fk?muGh2I5[m4;tWZQ%O&]$)5q[ \ &=]oke-xݚ~ڬ6_ˈ-J~hsvu+N8n),]wt3# bCO=#;a<#ѧ#_M nXg4:< 6`%V%8;ww +q!a8٦LD8- (+LIB*fFKe=xQuhjO&mfa'c[!Z81yU#0[8}ϯi,,{|8_`،,>b.(Ek&r1fu .Q~H0~Nl`{f3q{Y ztrr}`< V#$<칪oMd 4q0[r.x:]"Oq;F*-37#mA -\ Nxezi5kªgnx#E[I Pr م[OwQ9=5gȒ{:W&e) $4Rl?=~U>[A+ 0.,ak2]QSkUA%xe>V>a&=y;ߑwD/']&zxf-;$ma`S Y $ȼ Iٳ&HENI) [p kp N!!8ٲv*Ztmc ěB4noXwS<euS@Ԟ5RQQkF ,53Vѷ?3u.ݷ?1Hd<2X |ny כ{#l#3 WBB%Hc&#ǵZ8hZʦattb$I`iՅ+ gYrYYzy iV; +E *=a"uVP 5Y9)HAILZm"ZBzLCFXaVRl[Yw6.@oدx@OUfK` v#o[yc/- Xd֤Y2_\Rו| a;."r4܀!Ay; :N4HJt[sPj/l"jbl˚`R+8ay1ow EQg~e`+1Kc\$жgl> ۱&\TCBO 7߅opH$憯dqw*ScUA?Ǖ|4xZ( ͧ|7|R~ %QUQ =$烞Ax͋k5{\x ǿz /EZqzԖ=.J0 -{q7s0jWb\{́C uaZTT3\U h"q H˂A4e7GyPUpeC{# ;LAmGj1[p WS f)WˈSu~꬧l\S]H@Y EA4u] w8rs`NGUZ uPUP0]灠<͟`M*dK ۃAO:Εds[Btl}R0ikN< w;2fȻ*Tya(l rSD$\yL9a6)m:E{0L88{Үz'RX8 hŊBIQiU=GVbUaў_V=qXjl} #jX.ڷpH>隡^_\%ib^פ W4.zĚ"Sns8{#)HYyZM*F -Rm0osć:<o;vLϼ^ۣR"2/q6)wJz$[Inc [$= am"1.Q1hKlSv)pm-\s9\d/<;*^x ʄ\sxIGs8`{q`f3 z\osHcLU>.0Hsxp%}|H܀0~%) p,0Q(%x5IQ +R@{y. D <Y!`81K@@sxCbi(ᲁ}{0MމW ,_i\0wa*tjhh|j^OxIHU8X TnP%`2q0 Vzfye 0$yP}|VF3 {A^ /Z2c\yG] =uerZ"m5N) X7njRb da2٤Iinty͔nOVDn8 =kY9f޸ |ixbYpD]Lpr+z \(>#\:c:&b}9懽|>1-s+%ITx/gH&֒ 2#5ymkb,vz#@)\8%>pJ\K4ro/J^6M߽MU{7oXc| HSēĐ{"Z sx71t0E7.TtRܴ.wcTK 3p/gHπh Ȑ% Z+q#m4@M%_K j#^ow8^Oln;|hyEp[ֆmL?Bɵk`6/ꀄ*ケ8׀3 iewV s 5ғWei"B <5ǁ< pwzu -|Μ7g}YI"H RxPߠex=+.ru$Ċ,,' P ys r1[_0ǀd'㫖L2عJC6 G=l}-"oJnלw^2 .2̝tCI+Uh,ӹ`͑O&3k =/=ײ\snjR;MĸˁLJ@/ݣ+wQ!a%+]G}$/qkV<4pU 0 .\lH9,O]DW&OrdCb-ِؐ,."`^޶Q1y#pu_\ jco1,iB0jqy 8^OXx4w6oC9nMc Ac!K:ȱb%Xc!=c\l>߽k6{;FjRd/kّG\58^ln+MPg^-,Ǫ+cV`nϧ+͂2 >^2x˹"4rJlhHtdH9Go-ۈ:-Vs4`~`$.0HJ"d!M jJev"!;SD[ޕ&]o\E7y0Ow+0^*QgN,yk]6pYO0 ` `l.ݯsI .byoT8yJ#)1:H >[cW 7#P x#m{7[mR܇]>&|T壎S-iص jEW͍~{ΏegP/yWsF=gWP9C-[eQVpRosIHpKZ>#ҋ[9!=}0)'o[h LPbA U])%9ݣZxfiy/9^mn'D'5IA5LI!7zR ֓ڽYlmZ2Gڃ¸pF/+|/ӈP7L$%OKkgu3IO =NI7͑8nO4]^=Zxzeoin*gb,-/X{е{+QMRnkmz*uʜ/mּF+y#’m=\q^G[Pacu˭vϝ.B|?ZRx:i]Kixs+Y^+6ϿK,Zg Th$`.3 nZhSedb|2 8^Ya$TUs @= GOdEggG;4n>rp8tO /sQxUxpfs8n.el,о~;RܗP;wò_hn/3%,Wo\]ve- 7- ny^YIPɛT%vV kE-j˛ɐJ(oKy":`x4x}\>yEʕ&R*/Kd^ʡ*txrm, ;j㔈 G^N7mѬ3a˃aN 6 2Sl[IC%l0a-&aǐaa@YQ cQx?RHX*#j&:ɛӂKόöd`~%B0DKoe0 =@!=_y-ڥ SۡC6%"4$'E.GGz\K7"pj4eɵy86SgbdK`K愓!5H4T ZY* 0s7o? uĺ3í1G(S96@ۘm3(gkid!-'%oRHm'kMO!zz "0k-YK7"pj$LQ ɷy86XW,l l)w2A"*s|*h.c0z3-} ax;|Gkx;<'3>H/z3nH endstream endobj 76 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F3 22 0 R /F4 54 0 R >> /Pattern << /P1 77 0 R /P2 78 0 R /P3 79 0 R >> /ExtGState << /GS1 23 0 R >> /ColorSpace << /CS1 80 0 R >> >> endobj 80 0 obj [/Pattern /DeviceRGB ] endobj 82 0 obj << /D [81 0 R /XYZ null 730 null] >> endobj 83 0 obj << /D [81 0 R /XYZ null 714 null] >> endobj 84 0 obj << /D [81 0 R /XYZ null 698 null] >> endobj 85 0 obj << /D [81 0 R /XYZ null 683 null] >> endobj 86 0 obj << /D [81 0 R /XYZ null 667 null] >> endobj 87 0 obj << /D [81 0 R /XYZ null 651 null] >> endobj 88 0 obj << /D [81 0 R /XYZ null 636 null] >> endobj 89 0 obj << /D [81 0 R /XYZ null 620 null] >> endobj 90 0 obj << /D [81 0 R /XYZ null 594 null] >> endobj 91 0 obj << /D [81 0 R /XYZ null 575 null] >> endobj 92 0 obj << /D [81 0 R /XYZ null 550 null] >> endobj 93 0 obj << /D [81 0 R /XYZ null 470 null] >> endobj 94 0 obj << /D [81 0 R /XYZ null 445 null] >> endobj 95 0 obj << /D [81 0 R /XYZ null 312 null] >> endobj 96 0 obj << /D [81 0 R /XYZ null 179 null] >> endobj 97 0 obj << /D [81 0 R /XYZ null 136 null] >> endobj 98 0 obj << /D [81 0 R /XYZ null 111 null] >> endobj 99 0 obj << /D [81 0 R /XYZ null null null] >> endobj 74 0 obj << /P 55 0 R /R [63 63 549 729] /V 51 0 R /N 100 0 R >> endobj 101 0 obj << /Length 4597 /Filter /FlateDecode >> stream HW[o6~fu}pم!k豚Tԙ=7jd o|lQoU%. 岸*rMïF\-΢()I k92NL'ĦtL+C*VJ.Dk=us{7TFS6O{}d|xO FvsϵV}D<.Ѣ ]GW>ԥ yA49pEl0$ e^Adهvvk[w9F3 !0;߫^w]DBN I0]ͭVa yTɁ.T fEcPBٖۚCa&On?>tȲr(IT7'4ɪ*+AqwhVC.2il1JRXx &wr:iP(S0U-qV/pjbg_Hܢd՟_P4Eh!u!!.^ )"%NFAʟ .41c}N Q[*I'.,hpHg܌oB־"ċĕqؐ;qjӓ/m7z,g}|WuGa>,Ƞj:gg~GVq戙j&q◟ %hRu=Nl1I\ -Y'ꖔ2-1Bf Iu : n1Rz+|flictMbM }$b.D,N4=Wzm`y6Iٴj Mu^=_*0LѶN`:"$$ fk!3a[\T⁖^.T_ge[$IKx(Rs Ebþp$l"0ܠ/1|Aa :t07@IJf%fd0mF(ϝ;Ce 'Ucw(R\N5mM%9F L R/5;㧣5aX]PG@7!%$0W84%B-VEiOP}x@u"5#lX9PC ѦӶ,d<9$u ftEV-Gw^K*5vX,f %AqBՒsxtj != (!_,ZGTm Vڈ-+j'DsZnj(, O.l.c g2^3Ai 12 oh-fVd?8Y!ܗ3yY84t{\ 6|}do s;ڐI,($ꍤm1݆I 1~j%BFߋ>6OHgp3 QSjDJVЩy} W ]Yu? !l*Dĕ|@,4͓)O)&`+{VNh8@`8Îv]; Ր+Dﯹϩ< ?~ "cOyab1acME)& .}}%Hm tRn, jAk4us^<"qVtܦrR=& 9.JBoj㢀$ii,Y /*7XKb}ݶW+l+ٰ[[dy6~tθ )Xk8iSBCtMzZХbŒJFyFJ 9"&!LE3R&I2GU=>t6rg̶"b:GO KY[Y٣ q X]qf.m#lh!5Ć|ZEGؼ~đ<*V§ir=Dص.*p;]2 r$ןAƙ"M0r~|1X AElրz`pngVorVꌟ$?9CJ^y= GLgI6_{_y~[A%A @q'D nad]B\N%͖8_2qVpe<>4w^$ lÉ><0V7DAfs'A-/;vn,GBH_䙙Qm$rj8H:=t,TGפ CD""bũ\5+3Az@<뙄P00?Ϻlur\9\E٨5Q(P( "\dQAjxkJW'%t7}"&")3iot˸4Z:fI6hy#/xAz3S̈́܄ITasy3otf8<Kd'Z729 ͖[1bA\~*Oֱ\Z v$K1 N&p)B pE9es4z FOr ߵվ/Wz9'3'Ojom\%eo, kNlKaP <+JKEz՚sD)%6W9E%}v)e=ֲ ݩ,sd;V fp U<& >J~: f=ה#x+d_/!"!jD_>QX* q G\S͝r6ZZK \#pLKR钝?e2NNdYP)7pʯ sģܩ,_?˿&z endstream endobj 102 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F2 21 0 R /F3 22 0 R /F4 54 0 R >> /ExtGState << /GS1 23 0 R >> >> endobj 104 0 obj << /D [103 0 R /XYZ null 729 null] >> endobj 105 0 obj << /D [103 0 R /XYZ null 711 null] >> endobj 106 0 obj << /D [103 0 R /XYZ null 609 null] >> endobj 107 0 obj << /D [103 0 R /XYZ null 591 null] >> endobj 108 0 obj << /D [103 0 R /XYZ null 399 null] >> endobj 109 0 obj << /D [103 0 R /XYZ null 377 null] >> endobj 110 0 obj << /D [103 0 R /XYZ null 364 null] >> endobj 111 0 obj << /D [103 0 R /XYZ null 352 null] >> endobj 112 0 obj << /D [103 0 R /XYZ null 340 null] >> endobj 113 0 obj << /D [103 0 R /XYZ null 328 null] >> endobj 114 0 obj << /D [103 0 R /XYZ null 316 null] >> endobj 115 0 obj << /D [103 0 R /XYZ null 298 null] >> endobj 116 0 obj << /D [103 0 R /XYZ null 280 null] >> endobj 117 0 obj << /D [103 0 R /XYZ null 268 null] >> endobj 118 0 obj << /D [103 0 R /XYZ null 244 null] >> endobj 119 0 obj << /D [103 0 R /XYZ null 232 null] >> endobj 120 0 obj << /D [103 0 R /XYZ null 221 null] >> endobj 121 0 obj << /D [103 0 R /XYZ null 210 null] >> endobj 122 0 obj << /D [103 0 R /XYZ null 199 null] >> endobj 123 0 obj << /D [103 0 R /XYZ null 188 null] >> endobj 124 0 obj << /D [103 0 R /XYZ null 176 null] >> endobj 125 0 obj << /D [103 0 R /XYZ null 165 null] >> endobj 126 0 obj << /D [103 0 R /XYZ null 153 null] >> endobj 127 0 obj << /D [103 0 R /XYZ null 140 null] >> endobj 128 0 obj << /D [103 0 R /XYZ null 128 null] >> endobj 129 0 obj << /D [103 0 R /XYZ null 116 null] >> endobj 130 0 obj << /D [103 0 R /XYZ null 104 null] >> endobj 131 0 obj << /D [103 0 R /XYZ null 92 null] >> endobj 132 0 obj << /D [103 0 R /XYZ null null null] >> endobj 100 0 obj << /P 81 0 R /R [63 63 549 729] /V 74 0 R /N 133 0 R >> endobj 134 0 obj << /Length 4470 /Filter /FlateDecode >> stream HW]ۺ}GU(q6] ]7BkӶYRe9/ʲ7(Xp8Μ9(UqT&i*Pχb5vPM&+KqR+N̑~)U#~7FǣV>2&7~l"t߿C๮bS\8ɱʸ{8)εT6Lo\% rp[S8C4wpJ4IEiũUڏ .yeat'V%|Vn"ʹGB{Ꮪo<"g2}T"oh؀^&56u6ڱ*ˮGuy̆-g^'pV'D/7HP&E:?Q1(՞tpa |M{V5- i,gz^,U`@ Bm<LMo$G[ş ePq[p5&m@nk.; 14z g%M1"qc,y3dm~}'vZԀ ЗbR{ 00(: Pv$Z,1FNdtLdlSIeȗj6"%I!.N/!R!V2@,BJB=A̻ u#!2.AHwðԫWzf!S5)EW䇀'.Z$A GG/,wkQ=|7f:<7_H azlrϋ$ /o FcFFwG$3W 0DjnZY:|wqB&T(> s9 9n7#Q gz't=&v{RHmd \!Ѓ]?D_zɋ۬AW!> XT=[H9Iu'RCzĮC3wFK!SB,[j QɱJ#-A 1W.v,eb~?<~ !6tAJMLv\oL p&T!n :vrǠ8*H, v{$1UW`طeE9AIOd^!}sWP-dJ?`I! yqJJ&! 7/ D['8b?%O8rҡCQ SO,#%C=Rh1#>:uitET^*CJhq`5iȊB f]7" @xNP04tm7]` ws.6 /` P "Si 0Y4$fu\$]i#F^x=x{Yg 4EHF^x ͖jfOzxOO_:3ІZ_+Sу*Bd&.XNrvJ^Tjj{NdSN6ǰ`pFT\ -"x`pH uHзڒ\!cBҾ嬛T l<9 J7rn'2TAd^.&f/u4MeK\sVg0{/#NP&x?.s2 HfI>9r?@ŚP**Ze3yz  f ?re=>,(uMvV82D" 'z."Nc.CK+IQ@ qrͥח;L֙gx9 wWO07V5ĦᡡH(Ro<#[1^ϴ&}Ʀ@@N!׿~HEQ[6,{>@2Q~;DGŅR\< hnB}W׮Mg=gPYîĠu\7qă)B^ψKpW},?0f(PIBfC-4Od+z^-}ly'V[2&c)D /hbV(-) P86]/TJ^|".2jez._5Cf˙e4{cI.IJ=R8ٸ(r΍kj`5!H{Itnp[ͷ( 󑏝(YksЮz4x LK;oZKj&|(cM aRCpJDam ÈSM 0Ki0|7,`Ib%NYsqp +QU8TZ]#V􏆨qR|m{=JA-kS$/I=0hUH@ E{̊>lM-73;J"DgQ p_7N?x܎Sr'e(qT zΔ] k^*菕' g?P܈bf~~/=>5#ő:viQRk :\8^gྚL5}WOP ϾXǞD k {Bbw>ĔU`sDIj0gK>ZLZ8 >'4s!}mƌLBUxtkN4ʔ) tz:ds+Lhti.' Ƌ$r}Jwtv!c=ATրݎqKv=D\[ژ5!YLt ­Z̐J9^ev=-I3c"8'͇ʾyZFCJ6(9y|\J &#?mf~~|ú NmُX6? DRCDeHD=QfgS:kZj0*67܉Yec/lF1,ͺ0Pr,yk}LkBŸ`3LXZٰpʱ1AHA q P2H ;+I[ƈaee;jiʍl%HJ92W E 13GdBS6an nxV,{+:ބ0] 4|]%9"CBx'aY*hފ%FG5`؀zl_|{ v6\o' ˨+9G&fn"frM2z<'["uΆkVdyoRNrp!Gz5/'SKħli.{ikd՟/I{)'F;c- >4 {Wƃ$KH[%HzlޣY{WѤk;ۆm> $_xf@R>@hq]0|iy&~Q[q3sMܤ2'<)c:HƍdX ӰH$ }K%z-C׷ 'IQ$!pJR8sἛD"xEv4NI.V13֗tQ~"ex#CMo2@Oӟo. endstream endobj 135 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F2 21 0 R /F3 22 0 R /F4 54 0 R >> /ExtGState << /GS1 23 0 R >> >> endobj 137 0 obj << /D [136 0 R /XYZ null 730 null] >> endobj 138 0 obj << /D [136 0 R /XYZ null 718 null] >> endobj 139 0 obj << /D [136 0 R /XYZ null 706 null] >> endobj 140 0 obj << /D [136 0 R /XYZ null 694 null] >> endobj 141 0 obj << /D [136 0 R /XYZ null 681 null] >> endobj 142 0 obj << /D [136 0 R /XYZ null 657 null] >> endobj 143 0 obj << /D [136 0 R /XYZ null 646 null] >> endobj 144 0 obj << /D [136 0 R /XYZ null 635 null] >> endobj 145 0 obj << /D [136 0 R /XYZ null 623 null] >> endobj 146 0 obj << /D [136 0 R /XYZ null 612 null] >> endobj 147 0 obj << /D [136 0 R /XYZ null 601 null] >> endobj 148 0 obj << /D [136 0 R /XYZ null 590 null] >> endobj 149 0 obj << /D [136 0 R /XYZ null 578 null] >> endobj 150 0 obj << /D [136 0 R /XYZ null 566 null] >> endobj 151 0 obj << /D [136 0 R /XYZ null 554 null] >> endobj 152 0 obj << /D [136 0 R /XYZ null 541 null] >> endobj 153 0 obj << /D [136 0 R /XYZ null 529 null] >> endobj 154 0 obj << /D [136 0 R /XYZ null 517 null] >> endobj 155 0 obj << /D [136 0 R /XYZ null 505 null] >> endobj 156 0 obj << /D [136 0 R /XYZ null 493 null] >> endobj 157 0 obj << /D [136 0 R /XYZ null 475 null] >> endobj 158 0 obj << /D [136 0 R /XYZ null 456 null] >> endobj 159 0 obj << /D [136 0 R /XYZ null 432 null] >> endobj 160 0 obj << /D [136 0 R /XYZ null 408 null] >> endobj 161 0 obj << /D [136 0 R /XYZ null 396 null] >> endobj 162 0 obj << /D [136 0 R /XYZ null 384 null] >> endobj 163 0 obj << /D [136 0 R /XYZ null 371 null] >> endobj 164 0 obj << /D [136 0 R /XYZ null 359 null] >> endobj 165 0 obj << /D [136 0 R /XYZ null 347 null] >> endobj 166 0 obj << /D [136 0 R /XYZ null 323 null] >> endobj 167 0 obj << /D [136 0 R /XYZ null 311 null] >> endobj 168 0 obj << /D [136 0 R /XYZ null 299 null] >> endobj 169 0 obj << /D [136 0 R /XYZ null 286 null] >> endobj 170 0 obj << /D [136 0 R /XYZ null 274 null] >> endobj 171 0 obj << /D [136 0 R /XYZ null 262 null] >> endobj 172 0 obj << /D [136 0 R /XYZ null 250 null] >> endobj 173 0 obj << /D [136 0 R /XYZ null 238 null] >> endobj 174 0 obj << /D [136 0 R /XYZ null 214 null] >> endobj 175 0 obj << /D [136 0 R /XYZ null 189 null] >> endobj 176 0 obj << /D [136 0 R /XYZ null 177 null] >> endobj 177 0 obj << /D [136 0 R /XYZ null 165 null] >> endobj 178 0 obj << /D [136 0 R /XYZ null 153 null] >> endobj 179 0 obj << /D [136 0 R /XYZ null 141 null] >> endobj 180 0 obj << /D [136 0 R /XYZ null 128 null] >> endobj 181 0 obj << /D [136 0 R /XYZ null 104 null] >> endobj 182 0 obj << /D [136 0 R /XYZ null 92 null] >> endobj 183 0 obj << /D [136 0 R /XYZ null null null] >> endobj 133 0 obj << /P 103 0 R /R [63 63 549 729] /V 100 0 R /N 184 0 R >> endobj 185 0 obj << /Length 3828 /Filter /FlateDecode >> stream HWn8}Qn3Ox&Nc^%nɫV{ ߷.dK€[dԩ__M %_2ODS2O|U `5KW^+i,TRGQ$DY 5MB+UY-ouW]V5<- 6<Ե%?̿o},Z99#Ml-nq-'T2 H̔ Uoe|_7~.3g~] =[$9O d#lʔoh*+@޲g3zӻ/x6ev'3]mæcы+u ^t*BW8vLpW^oH6nKܒ 9jcvC]in}ѷb{}mAbO8Q#fwYܿf} .wёsiې\cHX˦gaʴ 19шU$bRG\0a8%Aٟa@38?A(O@(109,@;S\v7Ʈ 8̼qZj @uܭ.y\L!Qɫ#o":_bM]Hs^x̵>V/ VA萖{T >nxޅK xYG)n=h09p}GqJJx&eBRc AybaS%beHJdEZj28T+lEAޜ?/pH u.fDK"Yd%yl~k_pī@R ![EaZ?f[#/W[6+1Xٝ!*=Ap6!lxdk6;Vcn9J ֞Z?.As=}.DcyK2zOduI$Ue9Vwv-s:̾M4.bp e2 N/l)xr \OX.6m/V<%ga;d˴Ҋ e,̰JL+Ԁ&d> r7Z4-XC/t]JD{Lt, kVK+(/S#[̺G"AB/@*f +$k~BR^ $eBC扟7ӳi8IhNo0+{ӈ;P#B:;RȻ|;4v${ylLbVXq=p#4KCĚ6EJ XwM@*{Iѣw<(ǣ'p-{$ u 8 J6djMEL9i9bcWLf*p| % rm}YCPV)%G!j;|eBQ\ѩf$Um5<A?Zyl=ǓFlQst8%e y+4e+dr'Q= !vT30~yab_ b F\6nM^! ~Xn: I.qYN/+CTVblJ$sΏ9fy6T|Ox-HXn̉-?ַ_"jt\oâ%{ߐIl3oқ6UvoiSU9ThT-K#g)fl,j x׻ٙ<y߿\VT#ͱ1DdݑMKav9+^>J +%hB>tYOrscXf^s>q4X#=~R؃mϱ0^z-א0?NV159k;@Nbny輌r6iUf]>t:9ִx4ʉc=B=moPͷv˒ bȑRdZ8( D 8($NQL UD:29)%\ +(zGQ8 $CT75Y.&J \%Fky&2:Ѣe{+$jWG?ۓJq(du:"H), tP~ ~e)rM%\lO8*ygg>ƧpD OtKt\:]E%+ )S gͻgOvL2%7tt#ha)fQx6 (C wo%_s Y;WlEO/`6Cd]N#`m]Km52x9gPu'J9Hk`L.pO3C>%\_v6GpJ> /ExtGState << /GS1 23 0 R >> >> endobj 188 0 obj << /D [187 0 R /XYZ null 730 null] >> endobj 189 0 obj << /D [187 0 R /XYZ null 718 null] >> endobj 190 0 obj << /D [187 0 R /XYZ null 706 null] >> endobj 191 0 obj << /D [187 0 R /XYZ null 694 null] >> endobj 192 0 obj << /D [187 0 R /XYZ null 675 null] >> endobj 193 0 obj << /D [187 0 R /XYZ null 657 null] >> endobj 194 0 obj << /D [187 0 R /XYZ null 645 null] >> endobj 195 0 obj << /D [187 0 R /XYZ null 621 null] >> endobj 196 0 obj << /D [187 0 R /XYZ null 609 null] >> endobj 197 0 obj << /D [187 0 R /XYZ null 596 null] >> endobj 198 0 obj << /D [187 0 R /XYZ null 584 null] >> endobj 199 0 obj << /D [187 0 R /XYZ null 572 null] >> endobj 200 0 obj << /D [187 0 R /XYZ null 560 null] >> endobj 201 0 obj << /D [187 0 R /XYZ null 548 null] >> endobj 202 0 obj << /D [187 0 R /XYZ null 536 null] >> endobj 203 0 obj << /D [187 0 R /XYZ null 524 null] >> endobj 204 0 obj << /D [187 0 R /XYZ null 511 null] >> endobj 205 0 obj << /D [187 0 R /XYZ null 499 null] >> endobj 206 0 obj << /D [187 0 R /XYZ null 475 null] >> endobj 207 0 obj << /D [187 0 R /XYZ null 463 null] >> endobj 208 0 obj << /D [187 0 R /XYZ null 451 null] >> endobj 209 0 obj << /D [187 0 R /XYZ null 438 null] >> endobj 210 0 obj << /D [187 0 R /XYZ null 426 null] >> endobj 211 0 obj << /D [187 0 R /XYZ null 414 null] >> endobj 212 0 obj << /D [187 0 R /XYZ null 402 null] >> endobj 213 0 obj << /D [187 0 R /XYZ null 390 null] >> endobj 214 0 obj << /D [187 0 R /XYZ null 378 null] >> endobj 215 0 obj << /D [187 0 R /XYZ null 359 null] >> endobj 216 0 obj << /D [187 0 R /XYZ null 341 null] >> endobj 217 0 obj << /D [187 0 R /XYZ null 317 null] >> endobj 218 0 obj << /D [187 0 R /XYZ null 293 null] >> endobj 219 0 obj << /D [187 0 R /XYZ null 281 null] >> endobj 220 0 obj << /D [187 0 R /XYZ null 270 null] >> endobj 221 0 obj << /D [187 0 R /XYZ null 259 null] >> endobj 222 0 obj << /D [187 0 R /XYZ null 248 null] >> endobj 223 0 obj << /D [187 0 R /XYZ null 237 null] >> endobj 224 0 obj << /D [187 0 R /XYZ null 225 null] >> endobj 225 0 obj << /D [187 0 R /XYZ null 214 null] >> endobj 226 0 obj << /D [187 0 R /XYZ null 201 null] >> endobj 227 0 obj << /D [187 0 R /XYZ null 189 null] >> endobj 228 0 obj << /D [187 0 R /XYZ null 177 null] >> endobj 229 0 obj << /D [187 0 R /XYZ null 165 null] >> endobj 230 0 obj << /D [187 0 R /XYZ null 153 null] >> endobj 231 0 obj << /D [187 0 R /XYZ null 141 null] >> endobj 232 0 obj << /D [187 0 R /XYZ null 116 null] >> endobj 233 0 obj << /D [187 0 R /XYZ null 104 null] >> endobj 234 0 obj << /D [187 0 R /XYZ null 92 null] >> endobj 235 0 obj << /D [187 0 R /XYZ null null null] >> endobj 184 0 obj << /P 136 0 R /R [63 63 549 729] /V 133 0 R /N 236 0 R >> endobj 237 0 obj << /Length 2996 /Filter /FlateDecode >> stream HWm۸ t%-9$!1%[,uk[,n33-y{rAXSp8|Ͼ(r?OT<ȏS~@M!Q5} GϼLA"i`r? d~`X !A~>F'~zԃ7\`Sß0ۚ-6+G>HYLyu/cyݦ% ^# tB}܌FZ0QN Co3OXd9`X8Us_D~Dh7(:x3.. |ՕQ5WQ7LQ=+eM͖1UR-Ɖh=0p@ b*6,xgW:A{WϼՃaoI{u!XΰJU-ZMHLp"Hj{ ,qԆg!mBoLQD4R%ݹ?[6û7?oHysх ut/ԪF7zѣBAajoZWٞ6oGrJ= F]oclAvL5x1"a6pCpM&5U uDqg܏ \_(Q|ח#\$p%_;D!5U1q/3ABr4,Pu\X)&\6\30>^r]i,Z1uoN1mFWAFyxG%֋w f)z9"kFqêPXXࣨϷz1F;-B6@~Mw( E&ȶ#N-16Sk)UsRqRT1O m T:7k 뛕蔓(ZQvDDEsw 7Tڒu,*\Z(uIDfv::K Zwv^ra^qPV5ŕ,{,LppzQz3jԿDu(D2qjj_8ݚnk s/{sކ &qL 2J]D:YH׮kj"Qb$唫j7ޔ"-yy|&!_آчxwʞ#pp_3J!̽y:'!>+TA'視%8 ;Y&8f!#C?; f]׺w |;۱M]b:8C SG NŶ͟yN,Fj]G۩zy6H޵=8[oq._s5f$,7hA-ږn|DAy=u7 WH d'~ Ⱥؾ)XX 㥆$A7[c$6OauxSp*{ټx皡ǃtwŕ̻6 lH`Ga61rE+dNy?TAf\gDžf~wje]ꈞMxRsVUrz%%ZHݰ1ݫ :fo QS{R9Ab\FM P~\ `QtiJ'w\qiunQ+iKVnj*uWb4%7/rL{RR@&} 6Zd?$ 0> /ExtGState << /GS1 23 0 R >> >> endobj 240 0 obj << /D [239 0 R /XYZ null 730 null] >> endobj 241 0 obj << /D [239 0 R /XYZ null 718 null] >> endobj 242 0 obj << /D [239 0 R /XYZ null 706 null] >> endobj 243 0 obj << /D [239 0 R /XYZ null 694 null] >> endobj 244 0 obj << /D [239 0 R /XYZ null 682 null] >> endobj 245 0 obj << /D [239 0 R /XYZ null 670 null] >> endobj 246 0 obj << /D [239 0 R /XYZ null 652 null] >> endobj 247 0 obj << /D [239 0 R /XYZ null 634 null] >> endobj 248 0 obj << /D [239 0 R /XYZ null 598 null] >> endobj 249 0 obj << /D [239 0 R /XYZ null 574 null] >> endobj 250 0 obj << /D [239 0 R /XYZ null 562 null] >> endobj 251 0 obj << /D [239 0 R /XYZ null 550 null] >> endobj 252 0 obj << /D [239 0 R /XYZ null 538 null] >> endobj 253 0 obj << /D [239 0 R /XYZ null 526 null] >> endobj 254 0 obj << /D [239 0 R /XYZ null 513 null] >> endobj 255 0 obj << /D [239 0 R /XYZ null 501 null] >> endobj 256 0 obj << /D [239 0 R /XYZ null 489 null] >> endobj 257 0 obj << /D [239 0 R /XYZ null 477 null] >> endobj 258 0 obj << /D [239 0 R /XYZ null 465 null] >> endobj 259 0 obj << /D [239 0 R /XYZ null 453 null] >> endobj 260 0 obj << /D [239 0 R /XYZ null 429 null] >> endobj 261 0 obj << /D [239 0 R /XYZ null 417 null] >> endobj 262 0 obj << /D [239 0 R /XYZ null 405 null] >> endobj 263 0 obj << /D [239 0 R /XYZ null 393 null] >> endobj 264 0 obj << /D [239 0 R /XYZ null 381 null] >> endobj 265 0 obj << /D [239 0 R /XYZ null 369 null] >> endobj 266 0 obj << /D [239 0 R /XYZ null 351 null] >> endobj 267 0 obj << /D [239 0 R /XYZ null 333 null] >> endobj 268 0 obj << /D [239 0 R /XYZ null 321 null] >> endobj 269 0 obj << /D [239 0 R /XYZ null 297 null] >> endobj 270 0 obj << /D [239 0 R /XYZ null 285 null] >> endobj 271 0 obj << /D [239 0 R /XYZ null 273 null] >> endobj 272 0 obj << /D [239 0 R /XYZ null 261 null] >> endobj 273 0 obj << /D [239 0 R /XYZ null 249 null] >> endobj 274 0 obj << /D [239 0 R /XYZ null 237 null] >> endobj 275 0 obj << /D [239 0 R /XYZ null 224 null] >> endobj 276 0 obj << /D [239 0 R /XYZ null 212 null] >> endobj 277 0 obj << /D [239 0 R /XYZ null 200 null] >> endobj 278 0 obj << /D [239 0 R /XYZ null 188 null] >> endobj 279 0 obj << /D [239 0 R /XYZ null 176 null] >> endobj 280 0 obj << /D [239 0 R /XYZ null 158 null] >> endobj 281 0 obj << /D [239 0 R /XYZ null 140 null] >> endobj 282 0 obj << /D [239 0 R /XYZ null 128 null] >> endobj 283 0 obj << /D [239 0 R /XYZ null 104 null] >> endobj 284 0 obj << /D [239 0 R /XYZ null 92 null] >> endobj 285 0 obj << /D [239 0 R /XYZ null null null] >> endobj 236 0 obj << /P 187 0 R /R [63 63 549 729] /V 184 0 R /N 286 0 R >> endobj 287 0 obj << /Length 3522 /Filter /FlateDecode >> stream HW[o:~/G*눺plmO"ӎve+I΅|imi"pofލ^J_~ "?DE&Fׯ1߿*1[ר_77 ȏCw-Iɡ 4c0ŏ CAN܃lͳ tx/DKSz"8,>wPc2m0%:?",jKAw D^xy_p,P`st1s{v*Jaɇ9g"9,_$X!~Y@D]rP@ l^cw՝Πvy!yC@{dWbGm ¶%ĹicG+I$XIȸ̨4BNj&2 T#,YF6q45Xu6 #,{I׆K9nўiLj[AƘ|GVWӶI]΢[&٣W@bT&VЕCv<0Pڷ:k 8eV'tO0uos( P[%y"Z;EuU'OPabb^5@1 lJ4k-'n~ۚt/Yiң*ȷɺBRSusQ*;* d \hDtkj .ga1eROא3N7d Xq dc@!8P` 5P2j3}dc^"e.Ytk/ ~6(`*P/ w92Gjbqz;ZuٵH^rk/k^H*/h1 O*6 a8GAf_KhL=g^ͥiX-Ț/$E KQ Y+B,k"v9% 1Nn{0K<i7vL4I#W[#g:F=\T1V aQanwn ʲb쁒hJQ[)WoiM!U WEo^xH< }ᾨ{"skc݋hxTAR ilö Y(pCRTn2 _#v'?8Fuqyq$gnTg7X/} OrصKw.6!b"ڋ͋M+vzY,\,|jKʍMhiT0$sn~H?څ:J{zG?"m$$`9ؕX-GM"m~lim8x<Z#,Q3 ×>Wmw_oqݵ /ÃrӞɇD[=ކ߾S>PB?0U7&|:H>-?ݟG!@5CtNGZW#!O RE=}{:j12).#.~OM9(cGnuwj2ev84C(&a-]b+B[)uZ.`USw>WN WA*y6q P2%sD9`>ЬjΑ0xG$F-P5;K@&h$ ѥҪn,Sg5ڐ8s7[-Dj%MIZQd+0ͥ<K%y3@ot[,|*J + 喭-òcZ\ނMr^YIXR[R_;wU1\W(rSN=-+)BAo%fzѶ,_ XnL?.!dnGuP3k S=W46~%EUDCګa(#mWMQ3-4@#k4v!&D'a h)H 4/%Q k}i7$^I@eF*<#uH-;-IB63;5vOEV, Ru+qi5s^iZ7IC+ JwlNd#oU endstream endobj 288 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F3 22 0 R /F4 54 0 R >> /ExtGState << /GS1 23 0 R >> >> endobj 290 0 obj << /D [289 0 R /XYZ null 730 null] >> endobj 291 0 obj << /D [289 0 R /XYZ null 718 null] >> endobj 292 0 obj << /D [289 0 R /XYZ null 688 null] >> endobj 293 0 obj << /D [289 0 R /XYZ null 670 null] >> endobj 294 0 obj << /D [289 0 R /XYZ null 658 null] >> endobj 295 0 obj << /D [289 0 R /XYZ null 622 null] >> endobj 296 0 obj << /D [289 0 R /XYZ null 610 null] >> endobj 297 0 obj << /D [289 0 R /XYZ null 598 null] >> endobj 298 0 obj << /D [289 0 R /XYZ null 586 null] >> endobj 299 0 obj << /D [289 0 R /XYZ null 574 null] >> endobj 300 0 obj << /D [289 0 R /XYZ null 562 null] >> endobj 301 0 obj << /D [289 0 R /XYZ null 550 null] >> endobj 302 0 obj << /D [289 0 R /XYZ null 538 null] >> endobj 303 0 obj << /D [289 0 R /XYZ null 526 null] >> endobj 304 0 obj << /D [289 0 R /XYZ null 513 null] >> endobj 305 0 obj << /D [289 0 R /XYZ null 501 null] >> endobj 306 0 obj << /D [289 0 R /XYZ null 489 null] >> endobj 307 0 obj << /D [289 0 R /XYZ null 477 null] >> endobj 308 0 obj << /D [289 0 R /XYZ null 465 null] >> endobj 309 0 obj << /D [289 0 R /XYZ null 453 null] >> endobj 310 0 obj << /D [289 0 R /XYZ null 441 null] >> endobj 311 0 obj << /D [289 0 R /XYZ null 429 null] >> endobj 312 0 obj << /D [289 0 R /XYZ null 417 null] >> endobj 313 0 obj << /D [289 0 R /XYZ null 405 null] >> endobj 314 0 obj << /D [289 0 R /XYZ null 393 null] >> endobj 315 0 obj << /D [289 0 R /XYZ null 381 null] >> endobj 316 0 obj << /D [289 0 R /XYZ null 369 null] >> endobj 317 0 obj << /D [289 0 R /XYZ null 345 null] >> endobj 318 0 obj << /D [289 0 R /XYZ null 333 null] >> endobj 319 0 obj << /D [289 0 R /XYZ null 321 null] >> endobj 320 0 obj << /D [289 0 R /XYZ null 303 null] >> endobj 321 0 obj << /D [289 0 R /XYZ null 285 null] >> endobj 322 0 obj << /D [289 0 R /XYZ null 273 null] >> endobj 323 0 obj << /D [289 0 R /XYZ null 249 null] >> endobj 324 0 obj << /D [289 0 R /XYZ null 237 null] >> endobj 325 0 obj << /D [289 0 R /XYZ null 225 null] >> endobj 326 0 obj << /D [289 0 R /XYZ null 212 null] >> endobj 327 0 obj << /D [289 0 R /XYZ null 200 null] >> endobj 328 0 obj << /D [289 0 R /XYZ null 188 null] >> endobj 329 0 obj << /D [289 0 R /XYZ null 176 null] >> endobj 330 0 obj << /D [289 0 R /XYZ null 164 null] >> endobj 331 0 obj << /D [289 0 R /XYZ null 152 null] >> endobj 332 0 obj << /D [289 0 R /XYZ null 140 null] >> endobj 333 0 obj << /D [289 0 R /XYZ null 128 null] >> endobj 334 0 obj << /D [289 0 R /XYZ null 116 null] >> endobj 335 0 obj << /D [289 0 R /XYZ null 104 null] >> endobj 336 0 obj << /D [289 0 R /XYZ null 92 null] >> endobj 337 0 obj << /D [289 0 R /XYZ null null null] >> endobj 286 0 obj << /P 239 0 R /R [63 63 549 729] /V 236 0 R /N 338 0 R >> endobj 339 0 obj << /Length 2891 /Filter /FlateDecode >> stream HWmoF a?.#rR>y9PEEѶ߼쒢$[n.ERH3x쇷J(z,DG:TAh6AP\>(q[XϟIz*#,"ɂP#yCӎP,?( ^x"YߨQ[*T _JQHG˃Lvϖ^KHV?:ez:H8;I a`L;8*T$s?y~$./[/ ,=b*|p=)7$Rзk[p~) HúEmbpC{ko>t=eA`1:QGv y(h;)a\ 1G.˲DS{Mߵ*qx0s|Ȥr@Dk1[Vr,A gUpXy*k+0Jڥ}:~yN |Mh[+k 2zu8Ơ lXϏ= "~`r;`PJYtD7lo}tI@%P≔RJ`Fp-"ЇP觥=MSg*ƫ=RCf7TVv _ ^~wdF'9' 1փdQ aahE١0+/CAWD+Cb2d o acc%&Z\|?JDA6Ʈ޷@@Cy[fLJ`@:oŲk@_J {)WHwekP3>ALtU]ěvА\p_ v&QG*;_Om^}Mω{J_hy¼UlE_@rjVF❞@؞Rkеa:9afAy$5I!tdy86&j\z8</gJ]nYV7 Xx$Y+$Ԁ=K8yMgt,qx@ba9;4EFIu:!0T6 bآnKʠ/DܥRU5(gb;f.a;J1#lj  I*hcMJQO+|a|`+ J#H{ko#1HPXe⛖)syOLek0!)zXf %HEg 2'/Q.Gm24Ev54=@qr [_ ,m֬aȼ%+ox~i~MLW/d;o{o7Vv (l MQN0qncz>rgsqgTv-Jt)=Ls񧍀'zK6x[h{/ɧ(olO޲! qm n]7!eĶdsAXug&(LG9gS3Mt h]6jƯe1#PaK]>sei1c9o09BE;!?WC4zǿ@M5VG#Hf b`O @4 s++ؚfUF Ql19mƤ V>^U*fp!l#M;XqP8y:Lm*.EZuU}]+&cjP*h WqLVqQf1c)b%ݬC$TR* YfI?T*0W 3BzcXUaFEl kx( &|,(*Y4V- jĿP02v*HoV =`A*(H䀥sA)5Ԁ!FFAU[_(ս䔾3{ endstream endobj 340 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F3 22 0 R /F4 54 0 R >> /ExtGState << /GS1 23 0 R >> >> endobj 342 0 obj << /D [341 0 R /XYZ null 730 null] >> endobj 343 0 obj << /D [341 0 R /XYZ null 712 null] >> endobj 344 0 obj << /D [341 0 R /XYZ null 700 null] >> endobj 345 0 obj << /D [341 0 R /XYZ null 676 null] >> endobj 346 0 obj << /D [341 0 R /XYZ null 664 null] >> endobj 347 0 obj << /D [341 0 R /XYZ null 652 null] >> endobj 348 0 obj << /D [341 0 R /XYZ null 628 null] >> endobj 349 0 obj << /D [341 0 R /XYZ null 616 null] >> endobj 350 0 obj << /D [341 0 R /XYZ null 604 null] >> endobj 351 0 obj << /D [341 0 R /XYZ null 579 null] >> endobj 352 0 obj << /D [341 0 R /XYZ null 557 null] >> endobj 353 0 obj << /D [341 0 R /XYZ null 539 null] >> endobj 354 0 obj << /D [341 0 R /XYZ null 497 null] >> endobj 355 0 obj << /D [341 0 R /XYZ null 479 null] >> endobj 356 0 obj << /D [341 0 R /XYZ null 461 null] >> endobj 357 0 obj << /D [341 0 R /XYZ null 431 null] >> endobj 358 0 obj << /D [341 0 R /XYZ null 413 null] >> endobj 359 0 obj << /D [341 0 R /XYZ null null null] >> endobj 360 0 obj << /D [341 0 R /XYZ null null null] >> endobj 338 0 obj << /P 289 0 R /R [63 63 549 729] /V 286 0 R /N 361 0 R >> endobj 370 0 obj << /Length 3140 /Filter /FlateDecode >> stream HWKs8"D>@x<=ѬoM%q#J6~EQd*~~xx~F8??˃? *͂X SE|G<0/~0.UU4 sW.V6Wk?vn*L)( ec*q>L]OnƊOޓE"gxewY2~ Æ&^uq*\̆ȘW Ei9S,D^Ob*__dyDʊ',^3Dzо~"եA{o ^zw}_ 4paTY4!j⋬3" ^7&"ׄ b0M&p_5O+sGYb1In^1rcA"89=F0s5s"h ,رA༤F &%_)iهFj#<"R88Z+4Z9Xx9Q+dLhE Dpx!ÉFG4E_U&pX ^9MМP@Sgh@Cxzw6mן{q VrGlnLHtxҪnH!07G:OU]Q 1?~v<xMеݓW.NbQM@^d0B١\yy phfsp(JNu hUS ~B sBWC:UR('!;CRFQ GG@x C29{U(M0Yv1B"j)"{2֪RpB ^E蠥^0p\`x5in~&bT=QL`m=zF`<&H}C`<&=恙R@l q*BT1zjM5? >j|zPu{׾rrSC4}ntޢ"⇰ ds&y +AS9ec';*Uo?]=vMY1>zg^x?&'5wjءPSB_ lQ--dBj#mAݲz8ڎ7mョc5DR7x}ءX gIy4jfFe1hcZd)c;;P J'uf߿c 78}5 ԣHջ-8Vj0j%yM1r(6E{ߥ;mT,+\d^"xC3W$$ EYQѕKn2wgulb|:Q1/:>z9b7"X\bG Ov4a^ N^BӛтY{<ƑcSL4z9MؑOrtDo]=TS}L[ =ju4"dMirn-A:̻cQE +>ɖ?+Iw@'O4b%0Jذ-9sk5+ >Yt=++:rZqd(8Maz^sШGVRK߀rv DhٮqĝӄtǢp@@k48yKFu+3 _͋Y\w1dnhLR˞FN˩&s\cE DS ]jJo`aN]0@"Sfȅ qBPbI<)7&o%A&N-xHf~utp\eG` 1?y}B /ĺ'#{,d{;AKJ b<4$gvIT-Rhunv|(ɪZ3 Ě )Hcw)4J};Ց}t 󇬚Bu)eWe*FZdwQ3K@OH;lj節HݚCB^k.hI ٫`eDjf)k. |VR|xY(X _p4'Mp1o .ևb;S!RoAgIDTu/IC#=4.N.65T_vhY ٟ l9]&ȰN.asQ%|Ŋt&pw.ThKѝ g\R-бuZ+$'yȹ9&YZ$Ve376aPp{̈3yCYqIFg,?N-̤$FI,6JVi5r:5!k*J4K͹3BB@k OhnKJ.x!<6 u2AU. ;ĉTmj;\<<۬icoGA[b!`%nã{j^,8u*-(Z+DjCe ƟV=ϗq=FT&'*oA4W6Ǟ\!i4SyשeTԷK޵zP(op[$DDNڶ6 (:%ڑ4ը9TR*h (Bg+Wmhݱ77? endstream endobj 371 0 obj << /ProcSet [/PDF /Text ] /Font << /F1 20 0 R /F2 21 0 R /F3 22 0 R /F4 54 0 R /F5 372 0 R >> /ExtGState << /GS1 23 0 R >> >> endobj 375 0 obj << /ProcSet [/PDF /ImageB ] /ExtGState << /GS1 23 0 R >> >> endobj 77 0 obj << /Type /Pattern /PatternType 1 /Resources 375 0 R /Matrix [0.96 0 0 -0.96 9.45 773.85] /PaintType 1 /TilingType 1 /BBox [0 0 1 1] /XStep 1 /YStep 1 /Length 102 /Filter /FlateDecode >> stream H2T0¢t^.}`Cb^..P4+ AB^.C0GD*$r9y+XI0`=}JJFx(00¼\@偼\a endstream endobj 376 0 obj << /ProcSet [/PDF /ImageB ] /ExtGState << /GS1 23 0 R >> >> endobj 78 0 obj << /Type /Pattern /PatternType 1 /Resources 376 0 R /Matrix [0.96 0 0 -0.96 9.45 773.85] /PaintType 1 /TilingType 1 /BBox [0 0 1 1] /XStep 1 /YStep 1 /Length 99 /Filter /FlateDecode >> stream H2T0¢t^.}`Cb^..P4+ AB^.C0GD*$r9y+XI0`=}JJFx(C/+Py /@E7 endstream endobj 377 0 obj << /ProcSet [/PDF /ImageB ] /ExtGState << /GS1 23 0 R >> >> endobj 79 0 obj << /Type /Pattern /PatternType 1 /Resources 377 0 R /Matrix [0.96 0 0 -0.96 9.45 773.85] /PaintType 1 /TilingType 1 /BBox [0 0 1 1] /XStep 1 /YStep 1 /Length 104 /Filter /FlateDecode >> stream H2T0¢t^.}`Cb^..P4+ AB^.C0GD*$r9y+XI0`=}JJFx(|o?< d endstream endobj 378 0 obj << /Type /Halftone /HalftoneType 1 /HalftoneName (Default) /Frequency 60 /Angle 45 /SpotFunction /Round >> endobj 23 0 obj << /Type /ExtGState /SA false /OP false /HT /Default >> endobj 20 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Times-Roman >> endobj 21 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica-Bold >> endobj 22 0 obj << /Type /Font /Subtype /Type1 /Name /F3 /BaseFont /Times-Italic >> endobj 54 0 obj << /Type /Font /Subtype /Type1 /Name /F4 /BaseFont /Courier >> endobj 372 0 obj << /Type /Font /Subtype /Type1 /Name /F5 /Encoding 379 0 R /BaseFont /Times-Roman >> endobj 379 0 obj << /Type /Encoding /Differences [ 0/grave/acute/circumflex/tilde/macron/breve/dotaccent/dieresis /ring/cedilla/hungarumlaut/ogonek/caron/dotlessi/fi/fl /Lslash/lslash/Zcaron/zcaron/minus 39/quotesingle 96/grave 130/quotesinglbase /florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron /guilsinglleft/OE 145/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash /emdash/tilde/trademark/scaron/guilsinglright/oe 159/Ydieresis 164/currency 166/brokenbar 168/dieresis/copyright/ordfeminine 172/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu 183/periodcentered/cedilla /onesuperior/ordmasculine 188/onequarter/onehalf/threequarters 192/Agrave/Aacute/Acircumflex /Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex /Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve /Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute /Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex /atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex /edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve /oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute /ucircumflex/udieresis/yacute/thorn/ydieresis ] >> endobj 1 0 obj << /Type /Page /Parent 24 0 R /Resources 19 0 R /Contents 18 0 R /CropBox [0 0 612 791] /B [17 0 R] >> endobj 25 0 obj << /Type /Page /Parent 24 0 R /Resources 36 0 R /Contents 35 0 R /CropBox [0 0 612 791] /B [34 0 R] >> endobj 37 0 obj << /Type /Page /Parent 24 0 R /Resources 53 0 R /Contents 52 0 R /CropBox [0 0 612 791] /B [51 0 R] >> endobj 55 0 obj << /Type /Page /Parent 24 0 R /Resources 76 0 R /Contents 75 0 R /CropBox [0 0 612 791] /B [74 0 R] >> endobj 81 0 obj << /Type /Page /Parent 24 0 R /Resources 102 0 R /Contents 101 0 R /CropBox [0 0 612 791] /B [100 0 R] >> endobj 103 0 obj << /Type /Page /Parent 24 0 R /Resources 135 0 R /Contents 134 0 R /CropBox [0 0 612 791] /B [133 0 R] >> endobj 136 0 obj << /Type /Page /Parent 24 0 R /Resources 186 0 R /Contents 185 0 R /CropBox [0 0 612 791] /B [184 0 R] >> endobj 187 0 obj << /Type /Page /Parent 24 0 R /Resources 238 0 R /Contents 237 0 R /CropBox [0 0 612 791] /B [236 0 R] >> endobj 239 0 obj << /Type /Page /Parent 24 0 R /Resources 288 0 R /Contents 287 0 R /CropBox [0 0 612 791] /B [286 0 R] >> endobj 289 0 obj << /Type /Page /Parent 24 0 R /Resources 340 0 R /Contents 339 0 R /CropBox [0 0 612 791] /B [338 0 R] >> endobj 341 0 obj << /Type /Page /Parent 374 0 R /Resources 371 0 R /Contents 370 0 R /CropBox [0 0 612 791] /B [361 0 R] >> endobj 24 0 obj << /Type /Pages /Kids [1 0 R 25 0 R 37 0 R 55 0 R 81 0 R 103 0 R 136 0 R 187 0 R 239 0 R 289 0 R] /Count 10 /Parent 373 0 R >> endobj 374 0 obj << /Type /Pages /Kids [341 0 R] /Count 1 /Parent 373 0 R >> endobj 373 0 obj << /Type /Pages /Kids [24 0 R 374 0 R ] /Count 11 /MediaBox [0 0 612 792] >> endobj 380 0 obj << /Count 8 /First 362 0 R /Last 362 0 R >> endobj 362 0 obj << /Title (ARMCI: A Portable Aggregate Remote Memory Copy Interface) /Dest [1 0 R /XYZ null 737 null] /Parent 380 0 R /First 363 0 R /Last 369 0 R /Count 7 >> endobj 363 0 obj << /Title (Motivation and Background) /Dest [1 0 R /XYZ null 617 null] /Parent 362 0 R /Next 364 0 R >> endobj 364 0 obj << /Title (ARMCI Data Structures) /Dest [25 0 R /XYZ null 219 null] /Parent 362 0 R /Prev 363 0 R /Next 365 0 R >> endobj 365 0 obj << /Title (ARMCI Operations) /Dest [81 0 R /XYZ null 602 null] /Parent 362 0 R /Prev 364 0 R /Next 369 0 R /First 366 0 R /Last 368 0 R /Count 3 >> endobj 366 0 obj << /Title (Progress and ordering) /Dest [103 0 R /XYZ null 737 null] /Parent 365 0 R /Next 367 0 R >> endobj 367 0 obj << /Title (Memory allocation) /Dest [103 0 R /XYZ null 617 null] /Parent 365 0 R /Prev 366 0 R /Next 368 0 R >> endobj 368 0 obj << /Title (List of Operations) /Dest [103 0 R /XYZ null 406 null] /Parent 365 0 R /Prev 367 0 R >> endobj 369 0 obj << /Title (References) /Dest [341 0 R /XYZ null 587 null] /Parent 362 0 R /Prev 365 0 R >> endobj 361 0 obj << /P 341 0 R /R [63 63 549 729] /V 338 0 R /N 17 0 R >> endobj 17 0 obj << /T 16 0 R /P 1 0 R /R [63 63 549 729] /V 361 0 R /N 34 0 R >> endobj 381 0 obj [ 16 0 R ] endobj 382 0 obj << /Limits [(F) (G1000493)] /Names [(F) 15 0 R (G1000018) 174 0 R (G1000019) 175 0 R (G1000020) 176 0 R (G1000021) 177 0 R (G1000022) 178 0 R (G1000023) 179 0 R (G1000024) 180 0 R (G1000038) 217 0 R (G1000039) 218 0 R (G1000040) 219 0 R (G1000041) 220 0 R (G1000042) 221 0 R (G1000043) 222 0 R (G1000044) 223 0 R (G1000045) 224 0 R (G1000046) 225 0 R (G1000047) 226 0 R (G1000048) 232 0 R (G1000049) 233 0 R (G1000054) 227 0 R (G1000055) 228 0 R (G1000056) 229 0 R (G1000059) 231 0 R (G1000066) 230 0 R (G1000073) 234 0 R (G1000084) 182 0 R (G1000085) 188 0 R (G1000097) 167 0 R (G1000098) 168 0 R (G1000106) 152 0 R (G1000115) 128 0 R (G1000116) 129 0 R (G1000128) 248 0 R (G1000136) 249 0 R (G1000137) 250 0 R (G1000138) 251 0 R (G1000139) 252 0 R (G1000140) 253 0 R (G1000141) 254 0 R (G1000145) 262 0 R (G1000189) 255 0 R (G1000190) 256 0 R (G1000191) 257 0 R (G1000192) 258 0 R (G1000193) 259 0 R (G1000194) 261 0 R (G1000216) 260 0 R (G1000225) 181 0 R (G1000232) 166 0 R (G1000239) 344 0 R (G1000288) 323 0 R (G1000289) 324 0 R (G1000290) 325 0 R (G1000300) 322 0 R (G1000345) 346 0 R (G1000382) 347 0 R (G1000425) 348 0 R (G1000426) 349 0 R (G1000427) 350 0 R (G1000448) 331 0 R (G1000449) 332 0 R (G1000450) 333 0 R (G1000493) 291 0 R] >> endobj 383 0 obj << /Limits [(G1000504) (G1000923)] /Names [(G1000504) 281 0 R (G1000506) 290 0 R (G1000510) 282 0 R (G1000511) 283 0 R (G1000512) 284 0 R (G1000543) 279 0 R (G1000560) 268 0 R (G1000561) 269 0 R (G1000562) 270 0 R (G1000571) 271 0 R (G1000572) 272 0 R (G1000575) 275 0 R (G1000579) 276 0 R (G1000583) 277 0 R (G1000590) 278 0 R (G1000687) 70 0 R (G1000688) 112 0 R (G1000689) 139 0 R (G1000690) 137 0 R (G1000692) 156 0 R (G1000693) 171 0 R (G1000694) 172 0 R (G1000695) 191 0 R (G1000696) 242 0 R (G1000697) 265 0 R (G1000789) 215 0 R (G1000801) 204 0 R (G1000806) 203 0 R (G1000814) 193 0 R (G1000815) 194 0 R (G1000823) 195 0 R (G1000824) 196 0 R (G1000826) 197 0 R (G1000827) 198 0 R (G1000830) 199 0 R (G1000831) 200 0 R (G1000851) 214 0 R (G1000853) 205 0 R (G1000854) 206 0 R (G1000855) 207 0 R (G1000856) 208 0 R (G1000857) 209 0 R (G1000858) 210 0 R (G1000859) 211 0 R (G1000860) 212 0 R (G1000861) 213 0 R (G1000864) 345 0 R (G1000875) 201 0 R (G1000876) 202 0 R (G1000880) 240 0 R (G1000881) 241 0 R (G1000885) 130 0 R (G1000886) 131 0 R (G1000894) 153 0 R (G1000902) 154 0 R (G1000903) 155 0 R (G1000907) 169 0 R (G1000908) 170 0 R (G1000912) 189 0 R (G1000913) 190 0 R (G1000917) 263 0 R (G1000918) 264 0 R (G1000921) 329 0 R (G1000923) 327 0 R] >> endobj 384 0 obj << /Limits [(G1000924) (G997567)] /Names [(G1000924) 328 0 R (G1000936) 326 0 R (G1000943) 334 0 R (G1000944) 335 0 R (G1000945) 336 0 R (G1000961) 245 0 R (G1000981) 244 0 R (G1000990) 7 0 R (G1001002) 5 0 R (G1001005) 9 0 R (G1001022) 273 0 R (G1001023) 274 0 R (G1001046) 92 0 R (G1001056) 93 0 R (G1001064) 94 0 R (G1001067) 97 0 R (G1001075) 98 0 R (G1001098) 320 0 R (G1001104) 293 0 R (G1001107) 296 0 R (G1001108) 297 0 R (G1001109) 298 0 R (G1001110) 299 0 R (G1001111) 300 0 R (G1001126) 294 0 R (G1001127) 295 0 R (G1001134) 302 0 R (G1001135) 303 0 R (G1001136) 304 0 R (G1001139) 301 0 R (G1001145) 305 0 R (G1001146) 306 0 R (G1001147) 307 0 R (G1001153) 309 0 R (G1001154) 310 0 R (G1001155) 311 0 R (G1001162) 308 0 R (G1001180) 312 0 R (G1001181) 313 0 R (G1001193) 315 0 R (G1001194) 316 0 R (G1001195) 317 0 R (G1001196) 318 0 R (G1001197) 319 0 R (G1001205) 314 0 R (G997335) 3 0 R (G997338) 2 0 R (G997347) 4 0 R (G997358) 12 0 R (G997360) 28 0 R (G997371) 30 0 R (G997372) 31 0 R (G997378) 32 0 R (G997382) 38 0 R (G997383) 39 0 R (G997384) 40 0 R (G997385) 41 0 R (G997386) 42 0 R (G997387) 43 0 R (G997388) 47 0 R (G997390) 56 0 R (G997391) 57 0 R (G997394) 61 0 R (G997567) 59 0 R] >> endobj 385 0 obj << /Limits [(G997568) (G999785)] /Names [(G997568) 60 0 R (G997571) 62 0 R (G997581) 64 0 R (G997603) 157 0 R (G997604) 280 0 R (G997639) 115 0 R (G997658) 158 0 R (G997663) 192 0 R (G997665) 173 0 R (G997672) 140 0 R (G997679) 116 0 R (G997689) 105 0 R (G997698) 292 0 R (G997702) 321 0 R (G997703) 330 0 R (G997704) 107 0 R (G997712) 109 0 R (G997713) 110 0 R (G997714) 113 0 R (G997823) 48 0 R (G997952) 49 0 R (G997963) 8 0 R (G997984) 106 0 R (G997988) 108 0 R (G998097) 6 0 R (G998684) 67 0 R (G998823) 72 0 R (G998824) 90 0 R (G998865) 10 0 R (G998866) 11 0 R (G998964) 58 0 R (G999004) 343 0 R (G999010) 342 0 R (G999023) 65 0 R (G999024) 66 0 R (G999033) 44 0 R (G999039) 63 0 R (G999055) 45 0 R (G999056) 46 0 R (G999098) 91 0 R (G999101) 104 0 R (G999157) 247 0 R (G999215) 95 0 R (G999218) 351 0 R (G999268) 266 0 R (G999271) 246 0 R (G999281) 216 0 R (G999282) 243 0 R (G999296) 267 0 R (G999324) 26 0 R (G999328) 352 0 R (G999329) 29 0 R (G999352) 27 0 R (G999365) 355 0 R (G999412) 353 0 R (G999415) 354 0 R (G999422) 356 0 R (G999437) 357 0 R (G999450) 358 0 R (G999568) 96 0 R (G999780) 68 0 R (G999781) 69 0 R (G999782) 71 0 R (G999785) 82 0 R] >> endobj 386 0 obj << /Limits [(G999786) (P.9)] /Names [(G999786) 83 0 R (G999787) 84 0 R (G999788) 85 0 R (G999789) 86 0 R (G999793) 88 0 R (G999794) 89 0 R (G999798) 87 0 R (G999824) 111 0 R (G999827) 114 0 R (G999851) 149 0 R (G999869) 117 0 R (G999870) 125 0 R (G999871) 126 0 R (G999872) 138 0 R (G999878) 127 0 R (G999883) 118 0 R (G999891) 124 0 R (G999896) 119 0 R (G999897) 120 0 R (G999902) 121 0 R (G999908) 122 0 R (G999914) 123 0 R (G999922) 141 0 R (G999923) 142 0 R (G999924) 143 0 R (G999925) 144 0 R (G999926) 145 0 R (G999927) 146 0 R (G999928) 147 0 R (G999929) 148 0 R (G999935) 150 0 R (G999936) 151 0 R (G999957) 159 0 R (G999965) 160 0 R (G999966) 161 0 R (G999967) 162 0 R (G999977) 163 0 R (G999981) 164 0 R (G999985) 165 0 R (L) 360 0 R (P.1) 14 0 R (P.10) 337 0 R (P.11) 359 0 R (P.2) 33 0 R (P.3) 50 0 R (P.4) 73 0 R (P.5) 99 0 R (P.6) 132 0 R (P.7) 183 0 R (P.8) 235 0 R (P.9) 285 0 R] >> endobj 387 0 obj << /Kids [382 0 R 383 0 R 384 0 R 385 0 R 386 0 R] >> endobj 388 0 obj << /Dests 387 0 R >> endobj 389 0 obj << /Type /Catalog /Pages 373 0 R /Outlines 380 0 R /Threads 381 0 R /Names 388 0 R /OpenAction [1 0 R /XYZ null null null] /PageMode /UseOutlines >> endobj xref 0 390 0000000000 65535 f 0000076306 00000 n 0000000017 00000 n 0000000073 00000 n 0000000128 00000 n 0000000184 00000 n 0000000240 00000 n 0000000296 00000 n 0000000352 00000 n 0000000408 00000 n 0000000464 00000 n 0000000521 00000 n 0000000578 00000 n 0000000635 00000 n 0000000886 00000 n 0000000944 00000 n 0000001002 00000 n 0000079378 00000 n 0000001062 00000 n 0000005791 00000 n 0000074551 00000 n 0000074642 00000 n 0000074736 00000 n 0000074471 00000 n 0000077752 00000 n 0000076434 00000 n 0000005923 00000 n 0000005981 00000 n 0000006039 00000 n 0000006097 00000 n 0000006155 00000 n 0000006213 00000 n 0000006271 00000 n 0000006329 00000 n 0000012352 00000 n 0000006388 00000 n 0000011466 00000 n 0000076563 00000 n 0000011598 00000 n 0000011656 00000 n 0000011714 00000 n 0000011772 00000 n 0000011830 00000 n 0000011888 00000 n 0000011946 00000 n 0000012004 00000 n 0000012062 00000 n 0000012120 00000 n 0000012178 00000 n 0000012236 00000 n 0000012293 00000 n 0000020441 00000 n 0000012431 00000 n 0000019264 00000 n 0000074828 00000 n 0000076692 00000 n 0000019396 00000 n 0000019454 00000 n 0000019512 00000 n 0000019570 00000 n 0000019628 00000 n 0000019686 00000 n 0000019744 00000 n 0000019802 00000 n 0000019860 00000 n 0000019918 00000 n 0000019976 00000 n 0000020034 00000 n 0000020092 00000 n 0000020150 00000 n 0000020208 00000 n 0000020266 00000 n 0000020324 00000 n 0000020382 00000 n 0000031274 00000 n 0000020520 00000 n 0000029969 00000 n 0000073155 00000 n 0000073578 00000 n 0000073997 00000 n 0000030187 00000 n 0000076821 00000 n 0000030229 00000 n 0000030287 00000 n 0000030345 00000 n 0000030403 00000 n 0000030461 00000 n 0000030519 00000 n 0000030577 00000 n 0000030635 00000 n 0000030693 00000 n 0000030751 00000 n 0000030809 00000 n 0000030867 00000 n 0000030925 00000 n 0000030983 00000 n 0000031041 00000 n 0000031099 00000 n 0000031157 00000 n 0000031215 00000 n 0000037918 00000 n 0000031354 00000 n 0000036033 00000 n 0000076953 00000 n 0000036178 00000 n 0000036238 00000 n 0000036298 00000 n 0000036358 00000 n 0000036418 00000 n 0000036478 00000 n 0000036538 00000 n 0000036598 00000 n 0000036658 00000 n 0000036718 00000 n 0000036778 00000 n 0000036838 00000 n 0000036898 00000 n 0000036958 00000 n 0000037018 00000 n 0000037078 00000 n 0000037138 00000 n 0000037198 00000 n 0000037258 00000 n 0000037318 00000 n 0000037378 00000 n 0000037438 00000 n 0000037498 00000 n 0000037558 00000 n 0000037618 00000 n 0000037678 00000 n 0000037738 00000 n 0000037798 00000 n 0000037857 00000 n 0000045516 00000 n 0000037999 00000 n 0000042551 00000 n 0000077086 00000 n 0000042696 00000 n 0000042756 00000 n 0000042816 00000 n 0000042876 00000 n 0000042936 00000 n 0000042996 00000 n 0000043056 00000 n 0000043116 00000 n 0000043176 00000 n 0000043236 00000 n 0000043296 00000 n 0000043356 00000 n 0000043416 00000 n 0000043476 00000 n 0000043536 00000 n 0000043596 00000 n 0000043656 00000 n 0000043716 00000 n 0000043776 00000 n 0000043836 00000 n 0000043896 00000 n 0000043956 00000 n 0000044016 00000 n 0000044076 00000 n 0000044136 00000 n 0000044196 00000 n 0000044256 00000 n 0000044316 00000 n 0000044376 00000 n 0000044436 00000 n 0000044496 00000 n 0000044556 00000 n 0000044616 00000 n 0000044676 00000 n 0000044736 00000 n 0000044796 00000 n 0000044856 00000 n 0000044916 00000 n 0000044976 00000 n 0000045036 00000 n 0000045096 00000 n 0000045156 00000 n 0000045216 00000 n 0000045276 00000 n 0000045336 00000 n 0000045396 00000 n 0000045455 00000 n 0000052522 00000 n 0000045599 00000 n 0000049509 00000 n 0000077219 00000 n 0000049642 00000 n 0000049702 00000 n 0000049762 00000 n 0000049822 00000 n 0000049882 00000 n 0000049942 00000 n 0000050002 00000 n 0000050062 00000 n 0000050122 00000 n 0000050182 00000 n 0000050242 00000 n 0000050302 00000 n 0000050362 00000 n 0000050422 00000 n 0000050482 00000 n 0000050542 00000 n 0000050602 00000 n 0000050662 00000 n 0000050722 00000 n 0000050782 00000 n 0000050842 00000 n 0000050902 00000 n 0000050962 00000 n 0000051022 00000 n 0000051082 00000 n 0000051142 00000 n 0000051202 00000 n 0000051262 00000 n 0000051322 00000 n 0000051382 00000 n 0000051442 00000 n 0000051502 00000 n 0000051562 00000 n 0000051622 00000 n 0000051682 00000 n 0000051742 00000 n 0000051802 00000 n 0000051862 00000 n 0000051922 00000 n 0000051982 00000 n 0000052042 00000 n 0000052102 00000 n 0000052162 00000 n 0000052222 00000 n 0000052282 00000 n 0000052342 00000 n 0000052402 00000 n 0000052461 00000 n 0000058576 00000 n 0000052605 00000 n 0000055683 00000 n 0000077352 00000 n 0000055816 00000 n 0000055876 00000 n 0000055936 00000 n 0000055996 00000 n 0000056056 00000 n 0000056116 00000 n 0000056176 00000 n 0000056236 00000 n 0000056296 00000 n 0000056356 00000 n 0000056416 00000 n 0000056476 00000 n 0000056536 00000 n 0000056596 00000 n 0000056656 00000 n 0000056716 00000 n 0000056776 00000 n 0000056836 00000 n 0000056896 00000 n 0000056956 00000 n 0000057016 00000 n 0000057076 00000 n 0000057136 00000 n 0000057196 00000 n 0000057256 00000 n 0000057316 00000 n 0000057376 00000 n 0000057436 00000 n 0000057496 00000 n 0000057556 00000 n 0000057616 00000 n 0000057676 00000 n 0000057736 00000 n 0000057796 00000 n 0000057856 00000 n 0000057916 00000 n 0000057976 00000 n 0000058036 00000 n 0000058096 00000 n 0000058156 00000 n 0000058216 00000 n 0000058276 00000 n 0000058336 00000 n 0000058396 00000 n 0000058456 00000 n 0000058515 00000 n 0000065276 00000 n 0000058659 00000 n 0000062263 00000 n 0000077485 00000 n 0000062396 00000 n 0000062456 00000 n 0000062516 00000 n 0000062576 00000 n 0000062636 00000 n 0000062696 00000 n 0000062756 00000 n 0000062816 00000 n 0000062876 00000 n 0000062936 00000 n 0000062996 00000 n 0000063056 00000 n 0000063116 00000 n 0000063176 00000 n 0000063236 00000 n 0000063296 00000 n 0000063356 00000 n 0000063416 00000 n 0000063476 00000 n 0000063536 00000 n 0000063596 00000 n 0000063656 00000 n 0000063716 00000 n 0000063776 00000 n 0000063836 00000 n 0000063896 00000 n 0000063956 00000 n 0000064016 00000 n 0000064076 00000 n 0000064136 00000 n 0000064196 00000 n 0000064256 00000 n 0000064316 00000 n 0000064376 00000 n 0000064436 00000 n 0000064496 00000 n 0000064556 00000 n 0000064616 00000 n 0000064676 00000 n 0000064736 00000 n 0000064796 00000 n 0000064856 00000 n 0000064916 00000 n 0000064976 00000 n 0000065036 00000 n 0000065096 00000 n 0000065156 00000 n 0000065215 00000 n 0000069607 00000 n 0000065359 00000 n 0000068332 00000 n 0000077618 00000 n 0000068465 00000 n 0000068525 00000 n 0000068585 00000 n 0000068645 00000 n 0000068705 00000 n 0000068765 00000 n 0000068825 00000 n 0000068885 00000 n 0000068945 00000 n 0000069005 00000 n 0000069065 00000 n 0000069125 00000 n 0000069185 00000 n 0000069245 00000 n 0000069305 00000 n 0000069365 00000 n 0000069425 00000 n 0000069485 00000 n 0000069546 00000 n 0000079296 00000 n 0000078158 00000 n 0000078344 00000 n 0000078473 00000 n 0000078614 00000 n 0000078791 00000 n 0000078918 00000 n 0000079056 00000 n 0000079180 00000 n 0000069690 00000 n 0000072912 00000 n 0000074915 00000 n 0000077988 00000 n 0000077903 00000 n 0000073070 00000 n 0000073493 00000 n 0000073912 00000 n 0000074337 00000 n 0000075026 00000 n 0000078090 00000 n 0000079468 00000 n 0000079499 00000 n 0000080777 00000 n 0000082069 00000 n 0000083309 00000 n 0000084505 00000 n 0000085433 00000 n 0000085509 00000 n 0000085552 00000 n trailer << /Size 390 /Root 389 0 R /Info 13 0 R /ID [] >> startxref 85729 %%EOF ga-5-3/armci/Makefile.am0000640005473000001440000007765712115442660013752 0ustar d3n000users############################################################################## # Makefile.am for ARMCI. # # Rationale: # This Makefile.am follows many of the suggestions outlined in the paper # "Recursive Make Considered Harmful". We do not use Automake's # 'include' feature (instead preferring a single, large Makefile.am). # # Additional targets: # Besides the traditional make targets supplied by Automake, we have added the # "examples" and "checkprogs" targets to build example programs and test # programs, respectively. # # Notes: # In general, each subdirectory has a corresponding section of this # Makefile.am with the notable exception being the many examples getting # rolled up into the examples section. # # The usual aclocal nonsense to get include paths right. ACLOCAL_AMFLAGS = -I m4 -I ../m4 # All public headers, installed programs, test programs, and example programs # are listed in these variables. Appended to throughout. These are the # automake variables used. include_HEADERS = bin_PROGRAMS = check_PROGRAMS = check_LTLIBRARIES = lib_LTLIBRARIES = EXTRA_DIST = README BUILT_SOURCES = MOSTLYCLEANFILES = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = AM_FFLAGS = AM_CFLAGS = AM_CXXFLAGS = AM_CPPFLAGS = AM_LDFLAGS = LDADD = if ARMCI_NETWORK_ARMCI else lib_LTLIBRARIES += libarmci.la endif libarmci_la_SOURCES = nodist_libarmci_la_SOURCES = libarmci_la_LIBADD = AM_FFLAGS += $(ARMCI_FOPT) AM_FFLAGS += $(GA_F_WARN) AM_FFLAGS += $(FFLAG_INT) AM_CFLAGS += $(ARMCI_COPT) AM_CFLAGS += $(GA_C_WARN) AM_CXXFLAGS += $(ARMCI_CXXOPT) AM_CXXFLAGS += $(GA_CXX_WARN) AM_CPPFLAGS += $(GA_MP_CPPFLAGS) AM_CPPFLAGS += $(ARMCI_NETWORK_CPPFLAGS) if MSG_COMMS_MPI else AM_CPPFLAGS += -I$(top_srcdir)/tcgmsg endif LDFLAGS_BASE = LDFLAGS_BASE += $(GA_MP_LDFLAGS) LDFLAGS_BASE += $(ARMCI_NETWORK_LDFLAGS) AM_LDFLAGS += $(LDFLAGS_BASE) if ARMCI_NETWORK_ARMCI LDADD += $(ARMCI_NETWORK_LIBS) LDADD += $(GA_MP_LIBS) else LDADD += libarmci.la LDADD += $(LTLIBOBJS) LDADD += $(GA_MP_LIBS) LDADD += $(ARMCI_NETWORK_LIBS) endif if ARMCI_NETWORK_ARMCI else libarmci_la_LIBADD += $(GA_MP_LIBS) libarmci_la_LIBADD += $(ARMCI_NETWORK_LIBS) endif ############################################################################## # compiler and linker flags # # Important for external tools wanting to know how to link to ARMCI. SED_NORMALIZE_WHITESPACE = $(SED) 's/ [ ]*/ /g;s/" /"/g;s/ "/"/g' .PHONY: flags flags: @echo ' =========================================================================== ' @echo ' Suggested compiler/linker options are as follows.' @echo ' ARMCI libraries are installed in $(libdir)' @echo ' ARMCI headers are installed in $(includedir)' @echo ' ' @echo ' CPPFLAGS="$(GA_MP_CPPFLAGS) $(ARMCI_NETWORK_CPPFLAGS) -I$(includedir)"' | $(SED_NORMALIZE_WHITESPACE) @echo ' ' @echo ' LDFLAGS="$(GA_MP_LDFLAGS) $(ARMCI_NETWORK_LDFLAGS) -L$(libdir)"' | $(SED_NORMALIZE_WHITESPACE) @echo ' ' @echo ' For C/C++ Programs: ' @echo ' LIBS="-larmci $(GA_MP_LIBS) $(ARMCI_NETWORK_LIBS) $(MAYBE_FLIBS)"' | $(SED_NORMALIZE_WHITESPACE) @echo ' =========================================================================== ' ############################################################################## # src-portals # if ARMCI_NETWORK_PORTALS include $(top_srcdir)/src-portals/Makefile.inc ############################################################################## # src-gemini # else # !ARMCI_NETWORK_PORTALS if ARMCI_NETWORK_GEMINI include $(top_srcdir)/src-gemini/Makefile.inc ############################################################################## # src # else # !ARMCI_NETWORK_GEMINI libarmci_la_SOURCES += src/collectives/message.c libarmci_la_SOURCES += src/common/aggregate.c libarmci_la_SOURCES += src/common/armci.c libarmci_la_SOURCES += src/common/ccopy.c libarmci_la_SOURCES += src/common/clusterinfo.c libarmci_la_SOURCES += src/common/pack.c libarmci_la_SOURCES += src/common/iterator.c libarmci_la_SOURCES += src/include/iterator.h libarmci_la_SOURCES += src/ft/armci_chkpt.h libarmci_la_SOURCES += src/ft/armci_storage.h libarmci_la_SOURCES += src/include/acc.h libarmci_la_SOURCES += src/include/armcip.h libarmci_la_SOURCES += src/include/asm-ppc.h libarmci_la_SOURCES += src/include/atomic_ops_ia64.h libarmci_la_SOURCES += src/include/atomics-i386.h libarmci_la_SOURCES += src/include/copy.h libarmci_la_SOURCES += src/include/fujitsu-vpp.h libarmci_la_SOURCES += src/include/kr_malloc.h libarmci_la_SOURCES += src/include/locks.h libarmci_la_SOURCES += src/include/memlock.h libarmci_la_SOURCES += src/include/request.h libarmci_la_SOURCES += src/include/semaphores.h libarmci_la_SOURCES += src/include/shmalloc.h libarmci_la_SOURCES += src/include/shmem.h libarmci_la_SOURCES += src/include/shmlimit.h libarmci_la_SOURCES += src/include/signaltrap.h libarmci_la_SOURCES += src/include/spinlock.h libarmci_la_SOURCES += src/include/utils.h libarmci_la_SOURCES += src/locks/locks.c libarmci_la_SOURCES += src/locks/memlock.c libarmci_la_SOURCES += src/locks/mutex.c libarmci_la_SOURCES += src/locks/semaphores.c libarmci_la_SOURCES += src/memory/kr_malloc.c libarmci_la_SOURCES += src/memory/memory.c libarmci_la_SOURCES += src/progress/fence.c libarmci_la_SOURCES += src/progress/wait.c libarmci_la_SOURCES += src/xfer/caccumulate.c libarmci_la_SOURCES += src/xfer/rmw.c libarmci_la_SOURCES += src/xfer/strided.c libarmci_la_SOURCES += src/xfer/vector.c if MSG_COMMS_MPI libarmci_la_SOURCES += src/common/groups.c endif if ARMCI_NETWORK_BGML AM_CPPFLAGS += -I$(top_srcdir)/src/devices/bgml libarmci_la_SOURCES += src/devices/bgml/bgmlacc.h libarmci_la_SOURCES += src/devices/bgml/bgml.c libarmci_la_SOURCES += src/devices/bgml/bgmldefs.h libarmci_la_SOURCES += src/devices/bgml/bgml.h endif if ARMCI_NETWORK_CRAY_SHMEM AM_CPPFLAGS += -I$(top_srcdir)/src/devices/cray-shmem libarmci_la_SOURCES += src/memory/shmalloc.c endif if ARMCI_NETWORK_DCMF AM_CPPFLAGS += -I$(top_srcdir)/src/devices/dcmf libarmci_la_SOURCES += src/devices/dcmf/armcix.h if DCMF_VER_2 libarmci_la_SOURCES += src/devices/dcmf/dcmf2/armcix_acc.c libarmci_la_SOURCES += src/devices/dcmf/dcmf2/armcix_fence.c libarmci_la_SOURCES += src/devices/dcmf/dcmf2/armcix_get.c libarmci_la_SOURCES += src/devices/dcmf/dcmf2/armcix_impl.c libarmci_la_SOURCES += src/devices/dcmf/dcmf2/armcix_lock.c libarmci_la_SOURCES += src/devices/dcmf/dcmf2/armcix_put.c libarmci_la_SOURCES += src/devices/dcmf/dcmf2/armcix_rmw.c libarmci_la_SOURCES += src/devices/dcmf/dcmf2/armcix_wait.c endif if DCMF_VER_0_2 libarmci_la_SOURCES += src/devices/dcmf/dcmf-0.2.0/armcix_acc.c libarmci_la_SOURCES += src/devices/dcmf/dcmf-0.2.0/armcix_fence.c libarmci_la_SOURCES += src/devices/dcmf/dcmf-0.2.0/armcix_get.c libarmci_la_SOURCES += src/devices/dcmf/dcmf-0.2.0/armcix_impl.c libarmci_la_SOURCES += src/devices/dcmf/dcmf-0.2.0/armcix_lock.c libarmci_la_SOURCES += src/devices/dcmf/dcmf-0.2.0/armcix_put.c libarmci_la_SOURCES += src/devices/dcmf/dcmf-0.2.0/armcix_rmw.c libarmci_la_SOURCES += src/devices/dcmf/dcmf-0.2.0/armcix_wait.c endif if DCMF_VER_0_3 libarmci_la_SOURCES += src/devices/dcmf/dcmf-0.3.0/armcix_acc.c libarmci_la_SOURCES += src/devices/dcmf/dcmf-0.3.0/armcix_fence.c libarmci_la_SOURCES += src/devices/dcmf/dcmf-0.3.0/armcix_get.c libarmci_la_SOURCES += src/devices/dcmf/dcmf-0.3.0/armcix_impl.c libarmci_la_SOURCES += src/devices/dcmf/dcmf-0.3.0/armcix_lock.c libarmci_la_SOURCES += src/devices/dcmf/dcmf-0.3.0/armcix_put.c libarmci_la_SOURCES += src/devices/dcmf/dcmf-0.3.0/armcix_rmw.c libarmci_la_SOURCES += src/devices/dcmf/dcmf-0.3.0/armcix_wait.c endif endif # ARMCI_NETWORK_DCMF if ARMCI_NETWORK_LAPI AM_CPPFLAGS += -I$(top_srcdir)/src/devices/lapi libarmci_la_SOURCES += src/common/async.c libarmci_la_SOURCES += src/common/request.c libarmci_la_SOURCES += src/devices/lapi/lapi.c libarmci_la_SOURCES += src/devices/lapi/lapidefs.h libarmci_la_SOURCES += src/memory/buffers.c endif if ARMCI_NETWORK_MPI_MT AM_CPPFLAGS += -I$(top_srcdir)/src/devices/mpi-mt libarmci_la_SOURCES += src/common/ds-shared.c libarmci_la_SOURCES += src/common/request.c libarmci_la_SOURCES += src/common/spawn.c libarmci_la_SOURCES += src/devices/mpi-mt/mpi2_client.c libarmci_la_SOURCES += src/devices/mpi-mt/mpi2.h libarmci_la_SOURCES += src/devices/mpi-mt/mpi2_server.c libarmci_la_SOURCES += src/memory/buffers.c endif if ARMCI_NETWORK_MPI_SPAWN AM_CPPFLAGS += -I$(top_srcdir)/src/devices/mpi-spawn libarmci_la_SOURCES += src/common/ds-shared.c libarmci_la_SOURCES += src/common/request.c libarmci_la_SOURCES += src/devices/mpi-spawn/mpi2_client.c libarmci_la_SOURCES += src/devices/mpi-spawn/mpi2.h libarmci_la_SOURCES += src/devices/mpi-spawn/mpi2_server.c libarmci_la_SOURCES += src/memory/buffers.c endif if ARMCI_NETWORK_OPENIB AM_CPPFLAGS += -I$(top_srcdir)/src/devices/openib libarmci_la_SOURCES += src/common/async.c libarmci_la_SOURCES += src/common/ds-shared.c libarmci_la_SOURCES += src/common/regions.c libarmci_la_SOURCES += src/common/request.c libarmci_la_SOURCES += src/common/spawn.c libarmci_la_SOURCES += src/devices/openib/armci-vapi.h libarmci_la_SOURCES += src/devices/openib/cbuf.c libarmci_la_SOURCES += src/devices/openib/cbuf.h libarmci_la_SOURCES += src/devices/openib/openib.c libarmci_la_SOURCES += src/devices/openib/pendbufs.c libarmci_la_SOURCES += src/devices/openib/pendbufs.h libarmci_la_SOURCES += src/devices/openib/rtinfo.c libarmci_la_SOURCES += src/memory/buffers.c endif if ARMCI_NETWORK_SOCKETS AM_CPPFLAGS += -I$(top_srcdir)/src/devices/sockets libarmci_la_SOURCES += src/common/async.c libarmci_la_SOURCES += src/common/ds-shared.c libarmci_la_SOURCES += src/common/request.c libarmci_la_SOURCES += src/common/spawn.c libarmci_la_SOURCES += src/devices/sockets/dataserv.c libarmci_la_SOURCES += src/devices/sockets/sockets.c libarmci_la_SOURCES += src/devices/sockets/sockets.h libarmci_la_SOURCES += src/memory/buffers.c endif if ENABLE_CHECKPOINT libarmci_la_SOURCES += src/ft/armci_chkpt.c libarmci_la_SOURCES += src/ft/armci_storage.c endif if ARMCI_ENABLE_GPC_CALLS libarmci_la_SOURCES += src/common/gpc.c endif if MACX libarmci_la_SOURCES += src/common/signaltrap.c libarmci_la_SOURCES += src/memory/shmalloc.c libarmci_la_SOURCES += src/memory/winshmem.c AM_CPPFLAGS += -DSHMEM -DMMAP else if CYGWIN libarmci_la_SOURCES += src/common/signaltrap.c libarmci_la_SOURCES += src/memory/shmalloc.c libarmci_la_SOURCES += src/memory/winshmem.c AM_CPPFLAGS += -DSHMEM -DMMAP else if SYSV libarmci_la_SOURCES += src/common/signaltrap.c libarmci_la_SOURCES += src/memory/shmem.c libarmci_la_SOURCES += src/memory/shmlimit.c endif endif endif if NB_NONCONT libarmci_la_SOURCES += src/common/noncont.c endif if THREAD_SAFE libarmci_la_SOURCES += src/common/utils.c libarmci_la_SOURCES += src/util/threads.c endif if NEC libarmci_la_SOURCES += src/locks/tas-sx.s src/locks/tas-sx.o: src/locks/tas-sx.s $(AM_V_CCAS) \ $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) \ -c -o src/locks/tas-sx.o $(top_srcdir)/src/locks/tas-sx.s src/locks/tas-sx.lo: src/locks/tas-sx.s $(AM_V_CCAS) \ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(AM_CCASFLAGS) \ $(CCASFLAGS) -c -o src/locks/tas-sx.lo $(top_srcdir)/src/locks/tas-sx.s endif include_HEADERS += src/include/armci.h include_HEADERS += src/include/gpc.h include_HEADERS += src/include/message.h AM_CPPFLAGS += -I$(top_srcdir)/src/include endif # ARMCI_NETWORK_GEMINI endif # ARMCI_NETWORK_PORTALS ############################################################################## # profiling # if ENABLE_PROFILING if HAVE_SYS_WEAK_ALIAS_PRAGMA lib_LTLIBRARIES += libarmci_prof.la libarmci_prof_la_SOURCES = libarmci_prof_la_SOURCES += tools/armci_prof.c libarmci_la_SOURCES += src/common/capi.c else # HAVE_SYS_WEAK_ALIAS_PRAGMA libarmci_la_SOURCES += tools/armci_prof.c endif # HAVE_SYS_WEAK_ALIAS_PRAGMA else # ENABLE_PROFILING libarmci_la_SOURCES += src/common/capi.c endif include_HEADERS += src/include/parmci.h ############################################################################## # tcgmsg # EXTRA_DIST += tcgmsg/README ############################################################################## # tcgmsg/ipcv4.0 # if MSG_COMMS_TCGMSG4 AM_CPPFLAGS += -I$(top_srcdir)/tcgmsg/ipcv4.0 libarmci_la_SOURCES += tcgmsg/ipcv4.0/brdcst.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/checkbyte.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/cluster.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/cluster.h libarmci_la_SOURCES += tcgmsg/ipcv4.0/defglobals.h libarmci_la_SOURCES += tcgmsg/ipcv4.0/drand48.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/error.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/evlog.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/evlog.h libarmci_la_SOURCES += tcgmsg/ipcv4.0/evon.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/globalop.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/llog.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/mdtob.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/mdtoi.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/mitob.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/mitod.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/mtime.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/niceftn.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/nnodes.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/nodeid.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/nxtval.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/pbegin.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/pbeginf.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/pfilecopy.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/sema.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/sema.h libarmci_la_SOURCES += tcgmsg/ipcv4.0/setdbg.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/shmem.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/signals.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/signals.h libarmci_la_SOURCES += tcgmsg/ipcv4.0/snd.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/sndrcv.h libarmci_la_SOURCES += tcgmsg/ipcv4.0/sndrcvP.h libarmci_la_SOURCES += tcgmsg/ipcv4.0/sockets.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/srftoc.h libarmci_la_SOURCES += tcgmsg/ipcv4.0/srmover.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/stats.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/synch.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/usleep.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/waitall.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/waitcom.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/xdrstuff.c libarmci_la_SOURCES += tcgmsg/ipcv4.0/xdrstuff.h bin_PROGRAMS += parallel parallel_SOURCES = tcgmsg/ipcv4.0/parallel.c endif # MSG_COMMS_TCGMSG4 ############################################################################## # tcgmsg/ipcv5.0 # if MSG_COMMS_TCGMSG5 AM_CPPFLAGS += -I$(top_srcdir)/tcgmsg/ipcv5.0 libarmci_la_SOURCES += tcgmsg/ipcv5.0/drand48.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/evlog.h libarmci_la_SOURCES += tcgmsg/ipcv5.0/globalop.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/llog.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/mdtob.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/mdtoi.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/misc.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/mitob.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/mitod.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/mtime.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/niceftn.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/nnodes.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/nodeid.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/pbegin.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/pfilecopy.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/queues.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/signals.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/sndrcv.h libarmci_la_SOURCES += tcgmsg/ipcv5.0/snd_rcv_probe.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/srftoc.h libarmci_la_SOURCES += tcgmsg/ipcv5.0/tcgmsgP.h libarmci_la_SOURCES += tcgmsg/ipcv5.0/usleep.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/waitall.c if ARMCI_NETWORK_LAPI libarmci_la_SOURCES += tcgmsg/ipcv5.0/async_send_lapi.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/lapi_putget.c else libarmci_la_SOURCES += tcgmsg/ipcv5.0/async_send.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/busy.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/error.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/nxtval.shm.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/pbeginf.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/shmem.c libarmci_la_SOURCES += tcgmsg/ipcv5.0/synch.c endif # ARMCI_NETWORK_LAPI endif # MSG_COMMS_TCGMSG5 ############################################################################## # testing # check_PROGRAMS += testing/msgcheck check_PROGRAMS += testing/perf check_PROGRAMS += testing/perf2 check_PROGRAMS += testing/perf_aggr check_PROGRAMS += testing/perf_nb check_PROGRAMS += testing/shmclean check_PROGRAMS += testing/shmtest check_PROGRAMS += testing/simplelock check_PROGRAMS += testing/test check_PROGRAMS += testing/test2 if HAVE_ARMCI_NOTIFY check_PROGRAMS += testing/testnotify endif if ENABLE_CHECKPOINT check_PROGRAMS += testing/fttest endif if ARMCI_ENABLE_GPC_CALLS check_PROGRAMS += testing/gpctest endif if MSG_COMMS_MPI check_PROGRAMS += testing/simple check_PROGRAMS += testing/test_groups if SYSV if ARMCI_NETWORK_ARMCI else check_PROGRAMS += testing/ipctest endif endif endif if THREAD_SAFE check_PROGRAMS += testing/test_mt endif if ARMCI_NETWORK_PORTALS check_PROGRAMS += testing/clone check_PROGRAMS += testing/fork check_PROGRAMS += testing/origptl check_PROGRAMS += testing/ptltest check_PROGRAMS += testing/te endif if HAVE_ARMCI_STRIDE_INFO_INIT check_PROGRAMS += testing/testitr endif atsrc = if HAVE_ARMCI_MSG_INIT else atsrc += testing/rpl_armci_msg_init.c endif if HAVE_ARMCI_MSG_FINALIZE else atsrc += testing/rpl_armci_msg_finalize.c endif ARMCI_SERIAL_TESTS = ARMCI_SERIAL_TESTS_XFAIL = ARMCI_PARALLEL_TESTS = ARMCI_PARALLEL_TESTS_XFAIL = ARMCI_TESTS = $(ARMCI_SERIAL_TESTS) $(ARMCI_PARALLEL_TESTS) ARMCI_TESTS_XFAIL = $(ARMCI_SERIAL_TESTS_XFAIL) $(ARMCI_PARALLEL_TESTS_XFAIL) ARMCI_PARALLEL_TESTS += testing/msgcheck$(EXEEXT) ARMCI_PARALLEL_TESTS += testing/perf$(EXEEXT) #ARMCI_PARALLEL_TESTS += testing/perf2(EXEEXT) # only a benchmark ARMCI_PARALLEL_TESTS += testing/perf_aggr$(EXEEXT) #ARMCI_PARALLEL_TESTS += testing/perf_nb$(EXEEXT) # needs bug fixes #ARMCI_SERIAL_TESTS += testing/shmclean$(EXEEXT) # not sure we need this #ARMCI_SERIAL_TESTS += testing/shmtest$(EXEEXT) # not sure we need this ARMCI_PARALLEL_TESTS += testing/simplelock$(EXEEXT) ARMCI_PARALLEL_TESTS += testing/test$(EXEEXT) ARMCI_PARALLEL_TESTS += testing/test2$(EXEEXT) if HAVE_ARMCI_NOTIFY ARMCI_PARALLEL_TESTS += testing/testnotify$(EXEEXT) endif if ENABLE_CHECKPOINT ARMCI_PARALLEL_TESTS += testing/fttest$(EXEEXT) endif if ARMCI_ENABLE_GPC_CALLS ARMCI_PARALLEL_TESTS += testing/gpctest$(EXEEXT) endif if MSG_COMMS_MPI ARMCI_PARALLEL_TESTS += testing/simple$(EXEEXT) ARMCI_PARALLEL_TESTS += testing/test_groups$(EXEEXT) if SYSV if ARMCI_NETWORK_ARMCI else #ARMCI_PARALLEL_TESTS += testing/ipctest$(EXEEXT) # needs bug fixes endif endif endif if THREAD_SAFE ARMCI_PARALLEL_TESTS += testing/test_mt$(EXEEXT) endif if ARMCI_NETWORK_PORTALS #ARMCI_PARALLEL_TESTS += testing/clone$(EXEEXT) #ARMCI_PARALLEL_TESTS += testing/fork$(EXEEXT) #ARMCI_PARALLEL_TESTS += testing/origptl$(EXEEXT) #ARMCI_PARALLEL_TESTS += testing/ptltest$(EXEEXT) #ARMCI_PARALLEL_TESTS += testing/te$(EXEEXT) endif if HAVE_ARMCI_STRIDE_INFO_INIT ARMCI_SERIAL_TESTS += testing/testitr$(EXEEXT) endif testing_clone_SOURCES = testing/clone.c $(atsrc) testing_fork_SOURCES = testing/fork.c $(atsrc) testing_fttest_SOURCES = testing/fttest.c $(atsrc) testing_gpctest_SOURCES = testing/gpctest.c $(atsrc) testing_ipctest_SOURCES = testing/ipctest.c $(atsrc) testing_msgcheck_SOURCES = testing/msgcheck.c $(atsrc) testing_origptl_SOURCES = testing/origptl.c $(atsrc) testing_perf_aggr_SOURCES = testing/perf_aggr.c $(atsrc) testing_perf_nb_SOURCES = testing/perf_nb.c $(atsrc) testing_perf_SOURCES = testing/perf.c $(atsrc) testing_perf2_SOURCES = testing/perf2.c $(atsrc) testing_ptltest_SOURCES = testing/ptltest.c $(atsrc) testing_shmclean_SOURCES = testing/shmclean.c $(atsrc) testing_shmtest_SOURCES = testing/shmtest.c $(atsrc) testing_simple_SOURCES = testing/simple.c $(atsrc) testing_simplelock_SOURCES = testing/simplelock.c $(atsrc) testing_te_SOURCES = testing/te.c $(atsrc) testing_test2_SOURCES = testing/test2.c $(atsrc) testing_test_groups_SOURCES = testing/test_groups.c $(atsrc) testing_testitr_SOURCES = testing/testitr.c $(atsrc) testing_test_mt_SOURCES = testing/test_mt.c $(atsrc) testing_testnotify_SOURCES = testing/testnotify.c $(atsrc) testing_test_SOURCES = testing/test.c $(atsrc) testing_testitr_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/src/include ############################################################################## # examples # check_PROGRAMS += examples/benchmarks/cg/armci_sharedmemory/cg check_PROGRAMS += examples/benchmarks/lu/armci_blocking/lu-b-bc check_PROGRAMS += examples/benchmarks/lu/armci_blocking/lu-block check_PROGRAMS += examples/benchmarks/lu/armci_blocking/lu check_PROGRAMS += examples/benchmarks/lu/armci_nonblocking/lu_nb_get check_PROGRAMS += examples/benchmarks/lu/armci_nonblocking/lu_nb_put check_PROGRAMS += examples/benchmarks/lu/pthreads/lu-thread check_PROGRAMS += examples/features/aggregation/simple/simple check_PROGRAMS += examples/features/aggregation/sparse_matvecmul/sparse_matvecmul check_PROGRAMS += examples/features/non-blocking/simple/simple check_PROGRAMS += examples/features/symmetric_memory/simple/simple check_PROGRAMS += examples/simpleApps/transp1D-c if HAVE_ARMCI_NOTIFY check_PROGRAMS += examples/features/concurrency/simple/comdegree check_PROGRAMS += examples/features/notification/simple/testnotify endif if ARMCI_ENABLE_GPC_CALLS check_PROGRAMS += examples/features/gpc/hashtable/test_hashtable if HAVE_BLAS if HAVE_LAPACK check_PROGRAMS += examples/features/proc_affinity/computation_impact/computation_impact endif # HAVE_LAPACK endif # HAVE_BLAS check_PROGRAMS += examples/features/proc_affinity/simple/simple endif # ARMCI_ENABLE_GPC_CALLS if MSG_COMMS_MPI check_PROGRAMS += examples/features/concurrency/multidma/multidma check_PROGRAMS += examples/features/non-blocking/overlap/overlap endif if RANDOM_ACCESS check_PROGRAMS += examples/benchmarks/RandomAccess/simple/simple check_PROGRAMS += examples/benchmarks/RandomAccess/smp_bucket/smp_bucket endif if THREAD_SAFE check_PROGRAMS += examples/benchmarks/lu/armci_multithreaded/lu-block-th endif #ARMCI_PARALLEL_TESTS += examples/benchmarks/cg/armci_sharedmemory/cg$(EXEEXT) # needs input file ARMCI_PARALLEL_TESTS += examples/benchmarks/lu/armci_blocking/lu-b-bc$(EXEEXT) ARMCI_PARALLEL_TESTS += examples/benchmarks/lu/armci_blocking/lu-block$(EXEEXT) ARMCI_PARALLEL_TESTS += examples/benchmarks/lu/armci_blocking/lu$(EXEEXT) ARMCI_PARALLEL_TESTS += examples/benchmarks/lu/armci_nonblocking/lu_nb_get$(EXEEXT) ARMCI_PARALLEL_TESTS += examples/benchmarks/lu/armci_nonblocking/lu_nb_put$(EXEEXT) ARMCI_PARALLEL_TESTS += examples/benchmarks/lu/pthreads/lu-thread$(EXEEXT) ARMCI_PARALLEL_TESTS += examples/features/aggregation/simple/simple$(EXEEXT) #ARMCI_PARALLEL_TESTS += examples/features/aggregation/sparse_matvecmul/sparse_matvecmul$(EXEEXT) # needs input file ARMCI_PARALLEL_TESTS += examples/features/non-blocking/simple/simple$(EXEEXT) if HAVE_ARMCI_NOTIFY ARMCI_PARALLEL_TESTS += examples/features/concurrency/simple/comdegree$(EXEEXT) ARMCI_PARALLEL_TESTS += examples/features/notification/simple/testnotify$(EXEEXT) endif ARMCI_PARALLEL_TESTS += examples/features/symmetric_memory/simple/simple$(EXEEXT) ARMCI_PARALLEL_TESTS += examples/simpleApps/transp1D-c$(EXEEXT) if ARMCI_ENABLE_GPC_CALLS ARMCI_PARALLEL_TESTS += examples/features/gpc/hashtable/test_hashtable$(EXEEXT) if HAVE_BLAS if HAVE_LAPACK ARMCI_PARALLEL_TESTS += examples/features/proc_affinity/computation_impact/computation_impact$(EXEEXT) endif # HAVE_LAPACK endif # HAVE_BLAS ARMCI_PARALLEL_TESTS += examples/features/proc_affinity/simple/simple$(EXEEXT) endif # ARMCI_ENABLE_GPC_CALLS if MSG_COMMS_MPI #ARMCI_PARALLEL_TESTS += examples/features/concurrency/multidma/multidma$(EXEEXT) # needs bug fixes #ARMCI_PARALLEL_TESTS += examples/features/non-blocking/overlap/overlap$(EXEEXT) # needs bug fixes endif if RANDOM_ACCESS ARMCI_PARALLEL_TESTS += examples/benchmarks/RandomAccess/simple/simple$(EXEEXT) ARMCI_PARALLEL_TESTS += examples/benchmarks/RandomAccess/smp_bucket/smp_bucket$(EXEEXT) endif if THREAD_SAFE ARMCI_PARALLEL_TESTS += examples/benchmarks/lu/armci_multithreaded/lu-block-th$(EXEEXT) endif examples_benchmarks_cg_armci_sharedmemory_cg_SOURCES = \ examples/benchmarks/cg/armci_sharedmemory/cg.c \ examples/benchmarks/cg/armci_sharedmemory/compute.c \ examples/benchmarks/cg/armci_sharedmemory/read_input.c \ examples/benchmarks/cg/armci_sharedmemory/timing.c $(atsrc) examples_benchmarks_lu_armci_blocking_lu_SOURCES = \ examples/benchmarks/lu/armci_blocking/lu.c \ examples/benchmarks/lu/armci_blocking/timing.c $(atsrc) examples_benchmarks_lu_armci_blocking_lu_block_SOURCES = \ examples/benchmarks/lu/armci_blocking/lu-block.c \ examples/benchmarks/lu/armci_blocking/timing.c $(atsrc) examples_benchmarks_lu_armci_blocking_lu_b_bc_SOURCES = \ examples/benchmarks/lu/armci_blocking/lu-b-bc.c \ examples/benchmarks/lu/armci_blocking/timing.c $(atsrc) examples_benchmarks_lu_armci_multithreaded_lu_block_th_SOURCES = \ examples/benchmarks/lu/armci_multithreaded/lu-block-th.c \ examples/benchmarks/lu/armci_multithreaded/timing.c $(atsrc) examples_benchmarks_lu_armci_nonblocking_lu_nb_put_SOURCES = \ examples/benchmarks/lu/armci_nonblocking/lu_nb_put.c \ examples/benchmarks/lu/armci_nonblocking/timing.c $(atsrc) examples_benchmarks_lu_armci_nonblocking_lu_nb_get_SOURCES = \ examples/benchmarks/lu/armci_nonblocking/lu_nb_get.c \ examples/benchmarks/lu/armci_nonblocking/timing.c $(atsrc) examples_benchmarks_lu_pthreads_lu_thread_SOURCES = \ examples/benchmarks/lu/pthreads/barrier.c \ examples/benchmarks/lu/pthreads/barrier.h \ examples/benchmarks/lu/pthreads/errors.h \ examples/benchmarks/lu/pthreads/lu-thread.c \ examples/benchmarks/lu/pthreads/timing.c $(atsrc) examples_benchmarks_lu_pthreads_lu_thread_LDADD = -lpthread examples_benchmarks_RandomAccess_simple_simple_SOURCES = \ examples/benchmarks/RandomAccess/simple/simple.c \ examples/benchmarks/RandomAccess/timing.c $(atsrc) examples_benchmarks_RandomAccess_smp_bucket_smp_bucket_SOURCES = \ examples/benchmarks/RandomAccess/smp_bucket/smp_bucket.c \ examples/benchmarks/RandomAccess/timing.c $(atsrc) examples_features_aggregation_simple_simple_SOURCES = \ examples/features/aggregation/simple/simple.c $(atsrc) examples_features_aggregation_sparse_matvecmul_sparse_matvecmul_SOURCES = \ examples/features/aggregation/sparse_matvecmul/sparse_matvecmul.c $(atsrc) examples_features_concurrency_multidma_multidma_SOURCES = \ examples/features/concurrency/multidma/multidma.c $(atsrc) examples_features_concurrency_simple_comdegree_SOURCES = \ examples/features/concurrency/simple/comdegree.c $(atsrc) examples_features_gpc_hashtable_test_hashtable_SOURCES = \ examples/features/gpc/hashtable/DistHashmap.cc \ examples/features/gpc/hashtable/DistHashmap.h \ examples/features/gpc/hashtable/GPCHashmap.cc \ examples/features/gpc/hashtable/GPCHashmap.h \ examples/features/gpc/hashtable/GPCHashmapHandler.cc \ examples/features/gpc/hashtable/Hash_common.h \ examples/features/gpc/hashtable/HashFunctions.cc \ examples/features/gpc/hashtable/hash_map.h \ examples/features/gpc/hashtable/HashUtil.cc \ examples/features/gpc/hashtable/test_hashtable.cc \ examples/features/gpc/hashtable/Util.h $(atsrc) examples_features_gpc_hashtable_test_hashtable_LDFLAGS = $(LDFLAGS_BASE) examples_features_gpc_hashtable_test_hashtable_LDADD = $(LDADD) $(MAYBE_FLIBS) examples_features_non_blocking_overlap_overlap_SOURCES = \ examples/features/non-blocking/overlap/overlap.c $(atsrc) examples_features_non_blocking_simple_simple_SOURCES = \ examples/features/non-blocking/simple/simple.c $(atsrc) examples_features_notification_simple_testnotify_SOURCES = \ examples/features/notification/simple/testnotify.c $(atsrc) examples_features_proc_affinity_computation_impact_computation_impact_SOURCES = \ examples/features/proc_affinity/computation_impact/computation_impact.c $(atsrc) examples_features_proc_affinity_computation_impact_computation_impact_LDFLAGS = \ $(AM_LDFLAGS) \ $(LAPACK_LDFLAGS) \ $(BLAS_LDFLAGS) examples_features_proc_affinity_computation_impact_computation_impact_LDADD = \ $(LDADD) \ $(LAPACK_LIBS) \ $(BLAS_LIBS) examples_features_proc_affinity_simple_simple_SOURCES = \ examples/features/proc_affinity/simple/simple.c $(atsrc) examples_features_symmetric_memory_simple_simple_SOURCES = \ examples/features/symmetric_memory/simple/simple.c $(atsrc) examples_simpleApps_transp1D_c_SOURCES = \ examples/simpleApps/transp1D-c.c $(atsrc) EXTRA_DIST += examples/benchmarks/lu/README EXTRA_DIST += examples/features/aggregation/README EXTRA_DIST += examples/features/concurrency/README EXTRA_DIST += examples/features/gpc/hashtable/README EXTRA_DIST += examples/features/non-blocking/README EXTRA_DIST += examples/features/notification/README EXTRA_DIST += examples/features/proc_affinity/README EXTRA_DIST += examples/README ############################################################################## # the end # .PHONY: checkprogs checkprogs: $(check_PROGRAMS) # support verbose/silent make rules for additional programs # sed SED_V = $(SED__v_$(V)) SED__v_ = $(SED__v_$(AM_DEFAULT_VERBOSITY)) SED__v_0 = @echo " SED " $@; # ARMCI_TAS_AS ARMCI_TAS_AS_V = $(ARMCI_TAS_AS__v_$(V)) ARMCI_TAS_AS__v_ = $(ARMCI_TAS_AS__v_$(AM_DEFAULT_VERBOSITY)) ARMCI_TAS_AS__v_0 = @echo " GCC " $@; # ARMCI_X86COPY_AS ARMCI_X86COPY_AS_V = $(ARMCI_X86COPY_AS__v_$(V)) ARMCI_X86COPY_AS__v_ = $(ARMCI_X86COPY_AS__v_$(AM_DEFAULT_VERBOSITY)) ARMCI_X86COPY_AS__v_0 = @echo " GCC " $@; .PHONY: pfiles clean-pfiles if MSG_COMMS_TCGMSG4 pfiles: $(check_PROGRAMS) for p in $(check_PROGRAMS); do \ echo "`whoami` `hostname` $(NPROCS) `pwd`/$$p /tmp" > $$p.p; \ done check: pfiles clean-pfiles: find . -name '*.p' -exec rm {} \; ; clean-local: clean-pfiles endif # MSG_COMMS_TCGMSG4 ############################################################################## # test suite # # Some tests were commented out either because they required an input file or # they were failing for unknown reasons and we didn't want to further debug. # SERIAL_TESTS = SERIAL_TESTS += $(GAF2C_SERIAL_TESTS) SERIAL_TESTS += $(TCGMSG_SERIAL_TESTS) SERIAL_TESTS += $(ARMCI_SERIAL_TESTS) SERIAL_TESTS_XFAIL = SERIAL_TESTS_XFAIL += $(GAF2C_SERIAL_TESTS_XFAIL) SERIAL_TESTS_XFAIL += $(TCGMSG_SERIAL_TESTS_XFAIL) SERIAL_TESTS_XFAIL += $(ARMCI_SERIAL_TESTS_XFAIL) PARALLEL_TESTS = PARALLEL_TESTS += $(GAF2C_PARALLEL_TESTS) PARALLEL_TESTS += $(TCGMSG_PARALLEL_TESTS) PARALLEL_TESTS += $(ARMCI_PARALLEL_TESTS) PARALLEL_TESTS_XFAIL = PARALLEL_TESTS_XFAIL += $(GAF2C_PARALLEL_TESTS_XFAIL) PARALLEL_TESTS_XFAIL += $(TCGMSG_PARALLEL_TESTS_XFAIL) PARALLEL_TESTS_XFAIL += $(ARMCI_PARALLEL_TESTS_XFAIL) TESTS = TESTS += $(SERIAL_TESTS) TESTS += $(PARALLEL_TESTS) XFAIL_TESTS = XFAIL_TESTS += $(SERIAL_TESTS_XFAIL) XFAIL_TESTS += $(PARALLEL_TESTS_XFAIL) if MSG_COMMS_TCGMSG4 LOG_COMPILER = \ maybe_parexec=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo ""; else echo "$(TCGEXEC)"; fi`; eval $$maybe_parexec else if MSG_COMMS_TCGMSG5 LOG_COMPILER = tst="$$dir$$f -np $(NPROCS)"; eval else if CROSS_COMPILING maybe_mpiexec=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo "$(MPIEXEC)" | $(SED) 's/%NP%/1/'; else echo "$(MPIEXEC)" | $(SED) 's/%NP%/$(NPROCS)/'; fi`; eval $$maybe_mpiexec else LOG_COMPILER = \ maybe_mpiexec=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo ""; else if echo "$(MPIEXEC)" | $(GREP) "%NP%" > /dev/null; then echo "$(MPIEXEC)" | $(SED) 's/%NP%/$(NPROCS)/'; else echo "$(MPIEXEC)"; fi; fi`; eval $$maybe_mpiexec endif # CROSS_COMPILING endif # MSG_COMMS_TCGMSG5 endif # MSG_COMMS_TCGMSG4 .PHONY: check-gaf2c check-gaf2c: $(all-am) $(check_LTLIBRARIES) $(GAF2C_TESTS) $(MAYBE_PFILES) $(MAKE) $(AM_MAKEFLAGS) TESTS="$(GAF2C_TESTS)" XFAIL_TESTS="$(GAF2C_TESTS_XFAIL)" check-TESTS .PHONY: check-tcgmsg check-tcgmsg: $(all-am) $(check_LTLIBRARIES) $(TCGMSG_TESTS) $(MAYBE_PFILES) $(MAKE) $(AM_MAKEFLAGS) TESTS="$(TCGMSG_TESTS)" XFAIL_TESTS="$(TCGMSG_TESTS_XFAIL)" check-TESTS .PHONY: check-armci check-armci: $(all-am) $(check_LTLIBRARIES) $(ARMCI_TESTS) $(MAYBE_PFILES) $(MAKE) $(AM_MAKEFLAGS) TESTS="$(ARMCI_TESTS)" XFAIL_TESTS="$(ARMCI_TESTS_XFAIL)" check-TESTS ga-5-3/armci/configure0000750005473000001440000334445012274750307013621 0ustar d3n000users#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Aggregate Remote Memory Copy Interface (ARMCI) 1.5. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and hpctools@pnl.gov $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Aggregate Remote Memory Copy Interface (ARMCI)' PACKAGE_TARNAME='armci' PACKAGE_VERSION='1.5' PACKAGE_STRING='Aggregate Remote Memory Copy Interface (ARMCI) 1.5' PACKAGE_BUGREPORT='hpctools@pnl.gov' PACKAGE_URL='http://www.emsl.pnl.gov/docs/parsoft/armci/' ac_config_libobj_dir=compat ac_unique_file="src/common/armci.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS TCGEXEC MPIEXEC NPROCS ENABLE_SHARED_FALSE ENABLE_SHARED_TRUE RANDOM_ACCESS_FALSE RANDOM_ACCESS_TRUE ga_cv_path_rsh CXXCPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL ac_ct_AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP LIBTOOL RANLIB AR_FLAGS AR SED HAVE_LAPACK_FALSE HAVE_LAPACK_TRUE HAVE_BLAS_FALSE HAVE_BLAS_TRUE am__fastdepCCAS_FALSE am__fastdepCCAS_TRUE CCASDEPMODE CCASFLAGS CCAS ARMCI_CXXOPT GA_CXX_WARN am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX MPICXX ARMCI_COPT C_POINTER_AS_INTEGER HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE SYSV_FALSE SYSV_TRUE CRAY_XT_NETWORKS_FALSE CRAY_XT_NETWORKS_TRUE ARMCI_SRC_DIR_SRC_FALSE ARMCI_SRC_DIR_SRC_TRUE ARMCI_SRC_DIR_COMEX_FALSE ARMCI_SRC_DIR_COMEX_TRUE ARMCI_SRC_DIR_GEMINI_FALSE ARMCI_SRC_DIR_GEMINI_TRUE ARMCI_SRC_DIR_PORTALS_FALSE ARMCI_SRC_DIR_PORTALS_TRUE ARMCI_SRC_DIR DCMF_VER_0_3_FALSE DCMF_VER_0_3_TRUE DCMF_VER_0_2_FALSE DCMF_VER_0_2_TRUE DCMF_VER_2_FALSE DCMF_VER_2_TRUE ARMCI_NETWORK_CPPFLAGS ARMCI_NETWORK_LIBS ARMCI_NETWORK_LDFLAGS ARMCI_NETWORK_SOCKETS_FALSE ARMCI_NETWORK_SOCKETS_TRUE ARMCI_NETWORK_PORTALS_FALSE ARMCI_NETWORK_PORTALS_TRUE ARMCI_NETWORK_PORTALS4_FALSE ARMCI_NETWORK_PORTALS4_TRUE ARMCI_NETWORK_GEMINI_FALSE ARMCI_NETWORK_GEMINI_TRUE ARMCI_NETWORK_OPENIB_FALSE ARMCI_NETWORK_OPENIB_TRUE ARMCI_NETWORK_OFA_FALSE ARMCI_NETWORK_OFA_TRUE ARMCI_NETWORK_MPI_SPAWN_FALSE ARMCI_NETWORK_MPI_SPAWN_TRUE ARMCI_NETWORK_MPI_MT_FALSE ARMCI_NETWORK_MPI_MT_TRUE ARMCI_NETWORK_MPI_TS_FALSE ARMCI_NETWORK_MPI_TS_TRUE ARMCI_NETWORK_LAPI_FALSE ARMCI_NETWORK_LAPI_TRUE ARMCI_NETWORK_DMAPP_FALSE ARMCI_NETWORK_DMAPP_TRUE ARMCI_NETWORK_DCMF_FALSE ARMCI_NETWORK_DCMF_TRUE ARMCI_NETWORK_CRAY_SHMEM_FALSE ARMCI_NETWORK_CRAY_SHMEM_TRUE ARMCI_NETWORK_BGML_FALSE ARMCI_NETWORK_BGML_TRUE ARMCI_NETWORK_ARMCI_FALSE ARMCI_NETWORK_ARMCI_TRUE HAVE_ARMCI_MSG_FINALIZE_FALSE HAVE_ARMCI_MSG_FINALIZE_TRUE HAVE_ARMCI_MSG_INIT_FALSE HAVE_ARMCI_MSG_INIT_TRUE HAVE_ARMCI_NOTIFY_FALSE HAVE_ARMCI_NOTIFY_TRUE HAVE_ARMCI_STRIDE_INFO_INIT_FALSE HAVE_ARMCI_STRIDE_INFO_INIT_TRUE HAVE_ARMCI_INITIALIZED_FALSE HAVE_ARMCI_INITIALIZED_TRUE HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE HAVE_ARMCI_GROUP_COMM_FALSE HAVE_ARMCI_GROUP_COMM_TRUE PERL GA_C_WARN EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MPICC THREAD_LIBRARY THREAD_SAFE_FALSE THREAD_SAFE_TRUE ENABLE_TRACE_FALSE ENABLE_TRACE_TRUE ENABLE_CHECKPOINT_FALSE ENABLE_CHECKPOINT_TRUE ENABLE_PROFILING_FALSE ENABLE_PROFILING_TRUE NB_NONCONT_FALSE NB_NONCONT_TRUE ARMCI_GROUP_FALSE ARMCI_GROUP_TRUE ARMCI_ENABLE_GPC_CALLS_FALSE ARMCI_ENABLE_GPC_CALLS_TRUE PORTALS_ENABLE_NEW_MALLOC_FALSE PORTALS_ENABLE_NEW_MALLOC_TRUE GA_MP_CPPFLAGS GA_MP_LDFLAGS GA_MP_LIBS MSG_COMMS_TCGMSG5_FALSE MSG_COMMS_TCGMSG5_TRUE MSG_COMMS_TCGMSG4_FALSE MSG_COMMS_TCGMSG4_TRUE MSG_COMMS_MPI_FALSE MSG_COMMS_MPI_TRUE MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM CROSS_COMPILING_FALSE CROSS_COMPILING_TRUE SOLARIS_FALSE SOLARIS_TRUE SGITFP_FALSE SGITFP_TRUE SGI_N32_FALSE SGI_N32_TRUE SGI_FALSE SGI_TRUE NEC_FALSE NEC_TRUE MACX_FALSE MACX_TRUE LINUX_FALSE LINUX_TRUE LAPI_FALSE LAPI_TRUE INTERIX_FALSE INTERIX_TRUE IBM_FALSE IBM_TRUE HPUX_FALSE HPUX_TRUE HITACHI_FALSE HITACHI_TRUE FUJITSU_VPP_FALSE FUJITSU_VPP_TRUE DECOSF_FALSE DECOSF_TRUE CYGWIN_FALSE CYGWIN_TRUE CYGNUS_FALSE CYGNUS_TRUE CRAY_YMP_FALSE CRAY_YMP_TRUE CRAY_XT_FALSE CRAY_XT_TRUE CRAY_T3E_FALSE CRAY_T3E_TRUE CRAY_SV2_FALSE CRAY_SV2_TRUE CRAY_SV1_FALSE CRAY_SV1_TRUE CATAMOUNT_FALSE CATAMOUNT_TRUE BGP_FALSE BGP_TRUE BGL_FALSE BGL_TRUE host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode with_PACKAGE with_mpi enable_portals_new_malloc enable_gpc enable_armci_group enable_nb_noncont enable_profiling enable_mpi_tests enable_warnings enable_checkpoint enable_opt enable_trace enable_thread_safety enable_dependency_tracking enable_autodetect with_armci with_bgml with_cray_shmem with_dcmf with_dmapp with_gemini with_lapi with_mpi_mt with_mpi_spawn with_mpi_ts with_ofa with_openib with_portals4 with_portals with_sockets enable_assert enable_weak enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock ' ac_precious_vars='build_alias host_alias target_alias THREAD_LIBRARY MPICC CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP ARMCI_COPT MPICXX CXX CXXFLAGS CCC ARMCI_CXXOPT CCAS CCASFLAGS AR AR_FLAGS RANLIB CXXCPP NPROCS MPIEXEC' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Aggregate Remote Memory Copy Interface (ARMCI) 1.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/armci] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Aggregate Remote Memory Copy Interface (ARMCI) 1.5:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-portals-new-malloc add -DNEW_MALLOC to CPPFLAGS --enable-gpc enable GPC calls --enable-armci-group TODO --enable-nb-noncont TODO --enable-profiling enable profiling --disable-mpi-tests disable MPI linker tests --enable-warnings use compiler-specific warnings --enable-checkpoint enable checkpointing --disable-opt don't use hard-coded optimization flags --enable-trace enable tracing --enable-thread-safety **unsupported** turn on thread safety --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-autodetect attempt to locate ARMCI_NETWORK besides SOCKETS --disable-assert turn off assertions --disable-weak don't use weak symbols for profiling --enable-shared[=PKGS] build shared libraries [default=no] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-PACKAGE[=ARG] for most of the external software packages, ARG can be one or more whitespace-separated directories, linker or preprocessor directives; for example, --with-PACKAGE="/path/to/PACKAGE -lmylib -I/mydir" --with-mpi[=ARG] select MPI as the messaging library (default); leave ARG blank to use MPI compiler wrappers --with-armci[=ARG] select armci network as external; path to external ARMCI library --with-bgml[=ARG] select armci network as IBM BG/L --with-cray-shmem[=ARG] select armci network as Cray XT shmem --with-dcmf[=ARG] select armci network as IBM BG/P Deep Computing Message Framework --with-dmapp[=ARG] select armci network as (Comex) Cray DMAPP --with-gemini[=ARG] select armci network as Cray XE Gemini using libonesided --with-lapi[=ARG] select armci network as IBM LAPI --with-mpi-mt[=ARG] select armci network as MPI-2 multi-threading --with-mpi-spawn[=ARG] select armci network as MPI-2 dynamic process mgmt --with-mpi-ts[=ARG] select armci network as (Comex) MPI-1 two-sided --with-ofa[=ARG] select armci network as (Comex) Infiniband OpenIB --with-openib[=ARG] select armci network as Infiniband OpenIB --with-portals4[=ARG] select armci network as (Comex) Portals4 --with-portals[=ARG] select armci network as Cray XT portals --with-sockets[=ARG] select armci network as Ethernet TCP/IP --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). Some influential environment variables: THREAD_LIBRARY See --enable-thread-safety MPICC MPI C compiler CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor ARMCI_COPT ARMCI C optimization flags MPICXX MPI C++ compiler CXX C++ compiler command CXXFLAGS C++ compiler flags ARMCI_CXXOPT ARMCI C++ optimization flags CCAS assembler compiler command (defaults to CC) CCASFLAGS assembler compiler flags (defaults to CFLAGS) AR archiver used by libtool (default: ar) AR_FLAGS archiver flags used by libtool (default: cru) RANLIB generates index to archive (default: ranlib) CXXCPP C++ preprocessor NPROCS number of procs to use for parallel tests (default 4) MPIEXEC how to run parallel tests if built with MPI e.g. "mpiexec -np %NP%" Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . Aggregate Remote Memory Copy Interface (ARMCI) home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Aggregate Remote Memory Copy Interface (ARMCI) configure 1.5 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------- ## ## Report this to hpctools@pnl.gov ## ## ------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 $as_echo_n "checking for $2.$3... " >&6; } if eval \${$4+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else eval "$4=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$4 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_find_intX_t LINENO BITS VAR # ----------------------------------- # Finds a signed integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 $as_echo_n "checking for int$2_t... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in int$2_t 'int' 'long int' \ 'long long int' 'short int' 'signed char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main () { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main () { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if eval test \"x\$"$3"\" = x"no"; then : else break fi done fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_intX_t # ac_fn_c_find_uintX_t LINENO BITS VAR # ------------------------------------ # Finds an unsigned integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 $as_echo_n "checking for uint$2_t... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if eval test \"x\$"$3"\" = x"no"; then : else break fi done fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Aggregate Remote Memory Copy Interface (ARMCI) $as_me 1.5, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_header_list " stdlib.h" as_fn_append ac_header_list " unistd.h" as_fn_append ac_header_list " sys/param.h" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in build-aux "$srcdir"/build-aux; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers config.h" ############################################################################### # Must occur before automake init ############################################################################### # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # AH_TEMPLATE for all known TARGETs { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TARGET base (64bit-ness checked later)" >&5 $as_echo_n "checking for TARGET base (64bit-ness checked later)... " >&6; } if ${ga_cv_target_base+:} false; then : $as_echo_n "(cached) " >&6 else ga_cv_target_base=UNKNOWN if test "x$ga_cv_target_base" = xUNKNOWN; then : if test -f /bgsys/drivers/ppcfloor/arch/include/common/bgp_personality.h; then : ga_cv_target_base=BGP fi fi if test "x$ga_cv_target_base" = xUNKNOWN; then : if test -d /bgl/BlueLight/ppcfloor/bglsys/include; then : ga_cv_target_base=BGL fi fi if test "x$ga_cv_target_base" = xUNKNOWN; then : case $host in #( *bgl*) : ga_cv_target_base=BGL ;; #( *bgp*) : ga_cv_target_base=BGP ;; #( #[TODO], [ga_cv_target_base=CATAMOUNT], #[TODO], [ga_cv_target_base=CRAY_XT], *cygwin*) : ga_cv_target_base=CYGWIN ;; #( *fujitsu*) : ga_cv_target_base=FUJITSU_VPP ;; #( *hpux*) : ga_cv_target_base=HPUX ;; #( *ibm*) : ga_cv_target_base=IBM ;; #( #[TODO], [ga_cv_target_base=LAPI], *linux*) : ga_cv_target_base=LINUX ;; #( *darwin*) : ga_cv_target_base=MACX ;; #( *apple*) : ga_cv_target_base=MACX ;; #( *superux*) : ga_cv_target_base=NEC ;; #( *solaris*) : ga_cv_target_base=SOLARIS ;; #( *) : ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_target_base" >&5 $as_echo "$ga_cv_target_base" >&6; } cat >>confdefs.h <<_ACEOF #define $ga_cv_target_base 1 _ACEOF # A horrible hack that should go away somehow... { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we think this system is what we call SYSV" >&5 $as_echo_n "checking whether we think this system is what we call SYSV... " >&6; } if ${ga_cv_sysv+:} false; then : $as_echo_n "(cached) " >&6 else case $ga_cv_target_base in #( SUN|SOLARIS|SGI|SGI_N32|SGITFP|HPUX|IBM|DECOSF|LINUX|INTERIX|NEC|LAPI) : ga_cv_sysv=yes ;; #( *) : ga_cv_sysv=no ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_sysv" >&5 $as_echo "$ga_cv_sysv" >&6; } if test x$ga_cv_sysv = xyes; then : $as_echo "#define SYSV 1" >>confdefs.h fi # Hopefully these will never be used and we can remove them soon. if test "$ga_cv_target_base" = BGL; then BGL_TRUE= BGL_FALSE='#' else BGL_TRUE='#' BGL_FALSE= fi if test "$ga_cv_target_base" = BGP; then BGP_TRUE= BGP_FALSE='#' else BGP_TRUE='#' BGP_FALSE= fi if test "$ga_cv_target_base" = CATAMOUNT; then CATAMOUNT_TRUE= CATAMOUNT_FALSE='#' else CATAMOUNT_TRUE='#' CATAMOUNT_FALSE= fi if test "$ga_cv_target_base" = CRAY_SV1; then CRAY_SV1_TRUE= CRAY_SV1_FALSE='#' else CRAY_SV1_TRUE='#' CRAY_SV1_FALSE= fi if test "$ga_cv_target_base" = CRAY_SV2; then CRAY_SV2_TRUE= CRAY_SV2_FALSE='#' else CRAY_SV2_TRUE='#' CRAY_SV2_FALSE= fi if test "$ga_cv_target_base" = CRAY_T3E; then CRAY_T3E_TRUE= CRAY_T3E_FALSE='#' else CRAY_T3E_TRUE='#' CRAY_T3E_FALSE= fi if test "$ga_cv_target_base" = CRAY_XT; then CRAY_XT_TRUE= CRAY_XT_FALSE='#' else CRAY_XT_TRUE='#' CRAY_XT_FALSE= fi if test "$ga_cv_target_base" = CRAY_YMP; then CRAY_YMP_TRUE= CRAY_YMP_FALSE='#' else CRAY_YMP_TRUE='#' CRAY_YMP_FALSE= fi if test "$ga_cv_target_base" = CYGNUS; then CYGNUS_TRUE= CYGNUS_FALSE='#' else CYGNUS_TRUE='#' CYGNUS_FALSE= fi if test "$ga_cv_target_base" = CYGWIN; then CYGWIN_TRUE= CYGWIN_FALSE='#' else CYGWIN_TRUE='#' CYGWIN_FALSE= fi if test "$ga_cv_target_base" = DECOSF; then DECOSF_TRUE= DECOSF_FALSE='#' else DECOSF_TRUE='#' DECOSF_FALSE= fi if test "$ga_cv_target_base" = FUJITSU_VPP; then FUJITSU_VPP_TRUE= FUJITSU_VPP_FALSE='#' else FUJITSU_VPP_TRUE='#' FUJITSU_VPP_FALSE= fi if test "$ga_cv_target_base" = HITACHI; then HITACHI_TRUE= HITACHI_FALSE='#' else HITACHI_TRUE='#' HITACHI_FALSE= fi if test "$ga_cv_target_base" = HPUX; then HPUX_TRUE= HPUX_FALSE='#' else HPUX_TRUE='#' HPUX_FALSE= fi if test "$ga_cv_target_base" = IBM; then IBM_TRUE= IBM_FALSE='#' else IBM_TRUE='#' IBM_FALSE= fi if test "$ga_cv_target_base" = INTERIX; then INTERIX_TRUE= INTERIX_FALSE='#' else INTERIX_TRUE='#' INTERIX_FALSE= fi if test "$ga_cv_target_base" = LAPI; then LAPI_TRUE= LAPI_FALSE='#' else LAPI_TRUE='#' LAPI_FALSE= fi if test "$ga_cv_target_base" = LINUX; then LINUX_TRUE= LINUX_FALSE='#' else LINUX_TRUE='#' LINUX_FALSE= fi if test "$ga_cv_target_base" = MACX; then MACX_TRUE= MACX_FALSE='#' else MACX_TRUE='#' MACX_FALSE= fi if test "$ga_cv_target_base" = NEC; then NEC_TRUE= NEC_FALSE='#' else NEC_TRUE='#' NEC_FALSE= fi if test "$ga_cv_target_base" = SGI; then SGI_TRUE= SGI_FALSE='#' else SGI_TRUE='#' SGI_FALSE= fi if test "$ga_cv_target_base" = SGI_N32; then SGI_N32_TRUE= SGI_N32_FALSE='#' else SGI_N32_TRUE='#' SGI_N32_FALSE= fi if test "$ga_cv_target_base" = SGITFP; then SGITFP_TRUE= SGITFP_FALSE='#' else SGITFP_TRUE='#' SGITFP_FALSE= fi if test "$ga_cv_target_base" = SOLARIS; then SOLARIS_TRUE= SOLARIS_FALSE='#' else SOLARIS_TRUE='#' SOLARIS_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if ${ga_cv_cross_compiling+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$ga_cv_target_base" = xBGP; then : cross_compiling=yes fi ga_cv_cross_compiling=$cross_compiling fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_cross_compiling" >&5 $as_echo "$ga_cv_cross_compiling" >&6; } if test "x$cross_compiling" = xyes; then CROSS_COMPILING_TRUE= CROSS_COMPILING_FALSE='#' else CROSS_COMPILING_TRUE='#' CROSS_COMPILING_FALSE= fi ############################################################################### # Init automake ############################################################################### am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='armci' VERSION='1.5' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Don't emit "rebuild rules" for configure, Makefile.ins, etc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE ############################################################################### # Misc. information and package setup. ############################################################################### # Check whether --with-PACKAGE was given. if test "${with_PACKAGE+set}" = set; then : withval=$with_PACKAGE; fi ARMCI_TOP_BUILDDIR="`pwd`" cd "$srcdir" ARMCI_TOP_SRCDIR="`pwd`" cd "$ARMCI_TOP_BUILDDIR" if test "$ARMCI_TOP_BUILDDIR" != "$ARMCI_TOP_SRCDIR"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: Detected VPATH build" >&5 $as_echo "$as_me: Detected VPATH build" >&6;} fi # Determine messaging library up front because if MPI is desired we use the # MPI compiler wrappers instead of the standard compilers. # GA_MP_* vars might exist in environment, but they are really internal. # Reset them. GA_MP_LIBS= GA_MP_LDFLAGS= GA_MP_CPPFLAGS= # Check whether --with-mpi was given. if test "${with_mpi+set}" = set; then : withval=$with_mpi; else with_mpi=yes fi with_mpi_need_parse=no case $with_mpi in #( yes) : with_mpi_wrappers=yes; ga_msg_comms=MPI ;; #( no) : case $ga_cv_target_base in #( MACX|LAPI|CYGNUS|CYGWIN|INTERIX) : ga_msg_comms=TCGMSG5 ;; #( *) : ga_msg_comms=TCGMSG ;; esac ;; #( *) : with_mpi_need_parse=yes; ga_msg_comms=MPI ;; #( *) : ;; esac if test "x$ga_msg_comms" = xMPI; then MSG_COMMS_MPI_TRUE= MSG_COMMS_MPI_FALSE='#' else MSG_COMMS_MPI_TRUE='#' MSG_COMMS_MPI_FALSE= fi if test "x$ga_msg_comms" = xTCGMSG; then MSG_COMMS_TCGMSG4_TRUE= MSG_COMMS_TCGMSG4_FALSE='#' else MSG_COMMS_TCGMSG4_TRUE='#' MSG_COMMS_TCGMSG4_FALSE= fi if test "x$ga_msg_comms" = xTCGMSG5; then MSG_COMMS_TCGMSG5_TRUE= MSG_COMMS_TCGMSG5_FALSE='#' else MSG_COMMS_TCGMSG5_TRUE='#' MSG_COMMS_TCGMSG5_FALSE= fi case $ga_msg_comms in #( MPI) : $as_echo "#define MSG_COMMS_MPI 1" >>confdefs.h ;; #( TCGMSG) : $as_echo "#define MSG_COMMS_TCGMSG4 1" >>confdefs.h $as_echo "#define MSG_COMMS_TCGMSG 1" >>confdefs.h $as_echo "#define TCGMSG 1" >>confdefs.h ;; #( TCGMSG5) : $as_echo "#define MSG_COMMS_TCGMSG5 1" >>confdefs.h $as_echo "#define MSG_COMMS_TCGMSG 1" >>confdefs.h $as_echo "#define TCGMSG 1" >>confdefs.h ;; #( *) : ;; esac # Hack to enable NEW_MALLOC feature # Check whether --enable-portals-new-malloc was given. if test "${enable_portals_new_malloc+set}" = set; then : enableval=$enable_portals_new_malloc; fi if test "x$enable_portals_new_malloc" = xyes; then : $as_echo "#define NEW_MALLOC 1" >>confdefs.h fi if test "x$enable_portals_new_malloc" = xyes; then PORTALS_ENABLE_NEW_MALLOC_TRUE= PORTALS_ENABLE_NEW_MALLOC_FALSE='#' else PORTALS_ENABLE_NEW_MALLOC_TRUE='#' PORTALS_ENABLE_NEW_MALLOC_FALSE= fi # Check whether --enable-gpc was given. if test "${enable_gpc+set}" = set; then : enableval=$enable_gpc; enable_gpc=yes else enable_gpc=no fi if test $enable_gpc = yes; then : $as_echo "#define ARMCI_ENABLE_GPC_CALLS 1" >>confdefs.h else $as_echo "#define ARMCI_ENABLE_GPC_CALLS 0" >>confdefs.h fi if test x$enable_gpc = xyes; then ARMCI_ENABLE_GPC_CALLS_TRUE= ARMCI_ENABLE_GPC_CALLS_FALSE='#' else ARMCI_ENABLE_GPC_CALLS_TRUE='#' ARMCI_ENABLE_GPC_CALLS_FALSE= fi # Check whether --enable-armci_group was given. if test "${enable_armci_group+set}" = set; then : enableval=$enable_armci_group; enable_armci_group=yes $as_echo "#define ARMCI_GROUP 1" >>confdefs.h else enable_armci_group=no fi if test x$enable_armci_group = xyes; then ARMCI_GROUP_TRUE= ARMCI_GROUP_FALSE='#' else ARMCI_GROUP_TRUE='#' ARMCI_GROUP_FALSE= fi # Check whether --enable-nb_noncont was given. if test "${enable_nb_noncont+set}" = set; then : enableval=$enable_nb_noncont; enable_nb_noncont=yes $as_echo "#define NB_NONCONT 1" >>confdefs.h else enable_nb_noncont=no fi if test x$enable_nb_noncont = xyes; then NB_NONCONT_TRUE= NB_NONCONT_FALSE='#' else NB_NONCONT_TRUE='#' NB_NONCONT_FALSE= fi # Check whether --enable-profiling was given. if test "${enable_profiling+set}" = set; then : enableval=$enable_profiling; else enable_profiling=no fi if test "x$enable_profiling" = xyes; then : $as_echo "#define ARMCI_PROFILE 1" >>confdefs.h fi if test "x$enable_profiling" = xyes; then ENABLE_PROFILING_TRUE= ENABLE_PROFILING_FALSE='#' else ENABLE_PROFILING_TRUE='#' ENABLE_PROFILING_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ARMCI_DEFAULT_SHMMAX upper bound" >&5 $as_echo_n "checking for ARMCI_DEFAULT_SHMMAX upper bound... " >&6; } if ${armci_cv_shmmax+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$ARMCI_DEFAULT_SHMMAX_UBOUND" != x; then : armci_cv_shmmax=$ARMCI_DEFAULT_SHMMAX_UBOUND else armci_cv_shmmax=8192 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $armci_cv_shmmax" >&5 $as_echo "$armci_cv_shmmax" >&6; } if test $armci_cv_shmmax -le 1; then : as_fn_error $? "invalid ARMCI_DEFAULT_SHMMAX upper bound; <= 1" "$LINENO" 5 fi cat >>confdefs.h <<_ACEOF #define ARMCI_DEFAULT_SHMMAX_UBOUND $armci_cv_shmmax _ACEOF # Check whether --enable-mpi-tests was given. if test "${enable_mpi_tests+set}" = set; then : enableval=$enable_mpi_tests; else enable_mpi_tests=yes fi # Check whether --enable-warnings was given. if test "${enable_warnings+set}" = set; then : enableval=$enable_warnings; enable_warnings=yes else enable_warnings=no fi # Check whether --enable-checkpoint was given. if test "${enable_checkpoint+set}" = set; then : enableval=$enable_checkpoint; enable_checkpoint=yes $as_echo "#define ENABLE_CHECKPOINT 1" >>confdefs.h else enable_checkpoint=no fi if test x$enable_checkpoint = xyes; then ENABLE_CHECKPOINT_TRUE= ENABLE_CHECKPOINT_FALSE='#' else ENABLE_CHECKPOINT_TRUE='#' ENABLE_CHECKPOINT_FALSE= fi # Check whether --enable-opt was given. if test "${enable_opt+set}" = set; then : enableval=$enable_opt; enable_opt=no else enable_opt=yes fi # Check whether --enable-trace was given. if test "${enable_trace+set}" = set; then : enableval=$enable_trace; enable_trace=yes $as_echo "#define ENABLE_TRACE 1" >>confdefs.h else enable_trace=no fi if test x$enable_trace = xyes; then ENABLE_TRACE_TRUE= ENABLE_TRACE_FALSE='#' else ENABLE_TRACE_TRUE='#' ENABLE_TRACE_FALSE= fi # Check whether --enable-thread-safety was given. if test "${enable_thread_safety+set}" = set; then : enableval=$enable_thread_safety; thread_safety=yes $as_echo "#define THREAD_SAFE 1" >>confdefs.h else thread_safety=no fi if test x$thread_safety = xyes; then THREAD_SAFE_TRUE= THREAD_SAFE_FALSE='#' else THREAD_SAFE_TRUE='#' THREAD_SAFE_FALSE= fi # Unless we rename all preprocessor symbols of MPI and MPIPP # in the source code, this hack is necessary. ######################################### # C compiler ######################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: C compiler" >&5 $as_echo "$as_me: C compiler" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} ga_save_CFLAGS="$CFLAGS" DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi case $ga_cv_target_base in #( BGP) : ga_mpicc_pref=mpixlc_r; ga_cc_pref=bgxlc_r ;; #( *) : ;; esac # In the case of using MPI wrappers, set CC=MPICC since CC will override # absolutely everything in our list of compilers. # Save CC, just in case. if test x$with_mpi_wrappers = xyes; then : if test "x$CC" != "x$MPICC"; then : ga_orig_CC="$CC" fi case x$CC:x$MPICC in #( x:x) : ;; #( x:x*) : CC="$MPICC" ;; #( x*:x) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired but CC is set while MPICC is unset." >&5 $as_echo "$as_me: WARNING: MPI compilers desired but CC is set while MPICC is unset." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CC will be ignored during compiler selection, but will be" >&5 $as_echo "$as_me: WARNING: CC will be ignored during compiler selection, but will be" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&5 $as_echo "$as_me: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: meant to set MPICC instead of or in addition to CC?" >&5 $as_echo "$as_me: WARNING: meant to set MPICC instead of or in addition to CC?" >&2;} CC= ;; #( x*:x*) : if test "x$CC" != "x$MPICC"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired, MPICC and CC are set, and MPICC!=CC." >&5 $as_echo "$as_me: WARNING: MPI compilers desired, MPICC and CC are set, and MPICC!=CC." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Choosing MPICC over CC." >&5 $as_echo "$as_me: WARNING: Choosing MPICC over CC." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CC will be tested first during MPI compiler unwrapping." >&5 $as_echo "$as_me: WARNING: CC will be tested first during MPI compiler unwrapping." >&2;} fi CC="$MPICC" ;; #( *) : as_fn_error $? "CC/MPICC case failure" "$LINENO" 5 ;; esac fi ga_cc="bgxlc_r bgxlc xlc_r xlc pgcc pathcc icc sxcc fcc opencc suncc craycc gcc cc ecc cl ccc" ga_mpicc="mpicc mpixlc_r mpixlc hcc mpxlc_r mpxlc sxmpicc mpifcc mpgcc mpcc cmpicc cc" if test x$with_mpi_wrappers = xyes; then : CC_TO_TEST="$ga_mpicc_pref $ga_mpicc" else CC_TO_TEST="$ga_cc_pref $ga_cc" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CC_TO_TEST do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in $CC_TO_TEST do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi CFLAGS="$ga_save_CFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5 $as_echo_n "checking for C compiler vendor... " >&6; } if ${ga_cv_c_compiler_vendor+:} false; then : $as_echo_n "(cached) " >&6 else ga_save_ac_ext="$ac_ext" ga_cv_c_compiler_vendor=unknown ga_cpp_vendor_symbols= for vendor in intel ibm pathscale amd cray gnu sun hp dec borland comeau kai lcc metrowerks sgi microsoft watcom portland fujitsu do case $vendor in #( amd) : ga_cpp_vendor_symbols="defined(__OPEN64__)" ;; #( borland) : ga_cpp_vendor_symbols="defined(__BORLANDC__) || defined(__TURBOC__)" ;; #( comeau) : ga_cpp_vendor_symbols="defined(__COMO__)" ;; #( cray) : ga_cpp_vendor_symbols="defined(_CRAYC) || defined(_ADDR64)" ;; #( dec) : ga_cpp_vendor_symbols="defined(__DECC) || defined(__DECCXX) || defined(__DECC_VER) || defined(__DECCXX_VER)" ;; #( fujitsu) : ga_cpp_vendor_symbols="defined(__fcc__) || defined(__fcc_version__) || defined(_FCC_VER) || defined(__FCC_VER_)" ;; #( gnu) : ga_cpp_vendor_symbols="defined(__GNUC__)" ;; #( hp) : ga_cpp_vendor_symbols="defined(__HP_cc) || defined(__HP_aCC)" ;; #( ibm) : ga_cpp_vendor_symbols="defined(__xlc__) || defined(__xlC__) || defined(__IBMC__) || defined(__IBMCPP__)" ;; #( intel) : ga_cpp_vendor_symbols="defined(__ICC) || defined(__ECC) || defined(__INTEL_COMPILER)" ;; #( kai) : ga_cpp_vendor_symbols="defined(__KCC)" ;; #( lcc) : ga_cpp_vendor_symbols="defined(__LCC__)" ;; #( metrowerks) : ga_cpp_vendor_symbols="defined(__MWERKS__)" ;; #( microsoft) : ga_cpp_vendor_symbols="defined(_MSC_VER)" ;; #( pathscale) : ga_cpp_vendor_symbols="defined(__PATHCC__) || defined(__PATHSCALE__)" ;; #( portland) : ga_cpp_vendor_symbols="defined(__PGI)" ;; #( sgi) : ga_cpp_vendor_symbols="defined(__sgi) || defined(sgi)" ;; #( sun) : ga_cpp_vendor_symbols="defined(__SUNPRO_C) || defined(__SUNPRO_CC)" ;; #( watcom) : ga_cpp_vendor_symbols="defined(__WATCOMC__)" ;; #( *) : ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if !($ga_cpp_vendor_symbols) chokeonthis #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ga_cv_c_compiler_vendor=$vendor; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done ga_cpp_vendor_symbols= ac_ext="$ga_save_ac_ext" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_compiler_vendor" >&5 $as_echo "$ga_cv_c_compiler_vendor" >&6; } if test "x$enable_warnings" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C warning flags" >&5 $as_echo_n "checking for C warning flags... " >&6; } if ${ga_cv_c_warning_flags+:} false; then : $as_echo_n "(cached) " >&6 else case $ga_cv_c_compiler_vendor in #( amd) : ga_cv_c_warning_flags="-Wall -W -Wdeclaration-after-statement" ;; #( borland) : ga_cv_c_warning_flags= ;; #( comeau) : ga_cv_c_warning_flags= ;; #( cray) : ga_cv_c_warning_flags= ;; #( dec) : ga_cv_c_warning_flags= ;; #( fujitsu) : ga_cv_c_warning_flags="-Xc -pvctl,fullmsg" ;; #( gnu) : ga_cv_c_warning_flags="-Wall -Wextra -Wdeclaration-after-statement -Wno-unused-parameter -pedantic -Wno-long-long -Wnested-externs -ansi" ;; #( hp) : ga_cv_c_warning_flags= ;; #( ibm) : ga_cv_c_warning_flags= ;; #( intel) : ga_cv_c_warning_flags="-Wall" ;; #( kai) : ga_cv_c_warning_flags= ;; #( lcc) : ga_cv_c_warning_flags= ;; #( metrowerks) : ga_cv_c_warning_flags= ;; #( microsoft) : ga_cv_c_warning_flags= ;; #( pathscale) : ga_cv_c_warning_flags="-Wall -fullwarn -Wno-unused-parameter -pedantic -Wno-long-long -Wnested-externs" ;; #( portland) : ga_cv_c_warning_flags="-Xc" ;; #( sgi) : ga_cv_c_warning_flags= ;; #( sun) : ga_cv_c_warning_flags= ;; #( watcom) : ga_cv_c_warning_flags= ;; #( *) : ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: ga_cv_c_warning_flags: $ga_cv_c_warning_flags" >&5 $as_echo "$ga_cv_c_warning_flags" >&6; } GA_C_WARN=$ga_cv_c_warning_flags fi ga_save_CFLAGS="$CFLAGS" CFLAGS="$ga_cv_c_warning_flags $CFLAGS" if test x$with_mpi_wrappers = xyes; then : # Find perl. # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Create inside.pl. rm -f inside.pl cat >inside.pl <<"EOF" #!/usr/bin/perl use strict; use warnings; my $numargs = $#ARGV + 1; if ($numargs != 2) { print "Usage: wrapped.txt naked.txt\n"; exit 1; } # Read each input file as a string (rather than a list). local $/=undef; open WRAPPED, "$ARGV[0]" or die "Could not open wrapped text file: $!"; my $wrapped_lines = ; close WRAPPED; open NAKED, "$ARGV[1]" or die "Could not open naked text file: $!"; my $naked_lines = ; close NAKED; # Replace newlines, + from wrapped and naked lines. $wrapped_lines =~ tr/\n+/ /; $naked_lines =~ tr/\n+/ /; # Remove whitespace from beginning of wrapped and naked lines. $wrapped_lines =~ s/^\s+//; $naked_lines =~ s/^\s+//; # Remove whitespace from end of wrapped and naked lines. $wrapped_lines =~ s/\s+$//; $naked_lines =~ s/\s+$//; # If either wrapped_lines or naked_lines are empty, this is an error. # It is assumed that the particular version string which created the input # files should generate SOMETHING. unless ($wrapped_lines) { exit 1; } unless ($naked_lines) { exit 1; } # Cray compilers append a timestamp into their version string. Remove it. if ($wrapped_lines =~ /\QCray\E/) { $wrapped_lines = substr $wrapped_lines, 0, -28; $naked_lines = substr $naked_lines, 0, -28; } # Can the naked lines be found within the wrapped lines? if ($wrapped_lines =~ /\Q$naked_lines\E/) { #print "Found as substring\n"; exit 0; } # Are the naked lines exactly the same as the wrapped lines? elsif ($wrapped_lines eq $naked_lines) { #print "Found equal\n"; exit 0; } else { #print "Not found\n"; exit 1; } EOF inside="$PERL inside.pl" wrapped="$CC" case $wrapped in #( *_r) : compilers="bgxlc_r xlc_r" ;; #( *) : compilers="bgxlc xlc pgcc pathcc icc sxcc fcc opencc suncc craycc gcc ecc cl ccc cc" ;; #( *) : ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for base $wrapped compiler" >&5 $as_echo_n "checking for base $wrapped compiler... " >&6; } if ${ga_cv_mpic_naked+:} false; then : $as_echo_n "(cached) " >&6 else base="`$wrapped -show 2>/dev/null | sed 's/[ ].*$//' | head -1`" ga_save_CC="$CC" CC="$base" # if -m32 or -m64 is present in the -show params, or separately, add it unwrapped_args="`$wrapped -show 2>/dev/null`" extra_arg="" for arg in $unwrapped_args $wrapped do case $arg in #( *-m32*) : extra_arg="-m32" ;; #( *-m64*) : extra_arg="-m64" ;; #( *) : ;; esac done if test "x$extra_arg" != x; then : base="$base $extra_arg" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_cv_mpic_naked="$base" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CC="$ga_save_CC" versions="--version -v -V -qversion" found_wrapped_version=0 # Try separating stdout and stderr. Only compare stdout. if test "x$ga_cv_mpic_naked" = x; then : # prepend any CC/CXX/F77 the user may have specified compilers="$ga_orig_CC $compilers" echo "only comparing stdout" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err naked.txt naked.err if $wrapped $version 1>mpi.txt 2>mpi.err; then : found_wrapped_version=1 for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpic_naked" != x; then : break fi done fi # Perhaps none of the MPI compilers had a zero exit status (this is bad). # In this case we have to do a brute force match regardless of exit status. if test "x$found_wrapped_version" = x0; then : if test "x$ga_cv_mpic_naked" = x; then : echo "no zero exit status found for MPI compilers" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpic_naked" != x; then : break fi done fi fi # Try by combining stdout/err into one file. if test "x$ga_cv_mpic_naked" = x; then : echo "try combining stdout and stderr into one file" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt naked.txt if $wrapped $version 1>mpi.txt 2>&1; then : for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>&1; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpic_naked" != x; then : break fi done fi # If we got this far, then it's likely that the MPI compiler had a zero exit # status when it shouldn't have for one version flag, but later had a non-zero # exit status for a flag it shouldn't have. One false positive hid a false # negative. In this case, brute force compare all MPI compiler output against # all compiler output. if test "x$ga_cv_mpic_naked" = x; then : echo "we have a very badly behaving MPI compiler" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpic_naked" != x; then : break fi done fi rm -f mpi.txt mpi.err naked.txt naked.err fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_mpic_naked" >&5 $as_echo "$ga_cv_mpic_naked" >&6; } if test "x$ga_cv_mpic_naked" = x; then : as_fn_error $? "Could not determine the C compiler wrapped by MPI" "$LINENO" 5 else if test "x$ga_orig_CC" != x && test "x$ga_orig_CC" != "x$ga_cv_mpic_naked"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unwrapped $wrapped ($ga_cv_mpic_naked) does not match user-specified $ga_orig_CC" >&5 $as_echo "$as_me: WARNING: unwrapped $wrapped ($ga_cv_mpic_naked) does not match user-specified $ga_orig_CC" >&2;} fi fi rm -f inside.pl else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_mpi ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : GA_MP_LIBS="$GA_MP_LIBS $arg" ;; #( -L*) : GA_MP_LDFLAGS="$GA_MP_LDFLAGS $arg" ;; #( -WL*) : GA_MP_LDFLAGS="$GA_MP_LDFLAGS $arg" ;; #( -Wl*) : GA_MP_LDFLAGS="$GA_MP_LDFLAGS $arg" ;; #( -I*) : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS $arg" ;; #( *.a) : GA_MP_LIBS="$GA_MP_LIBS $arg" ;; #( *.so) : GA_MP_LIBS="$GA_MP_LIBS $arg" ;; #( *lib) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( -mkl*) : GA_MP_LIBS="$GA_MP_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi done fi if test "x$with_mpi" != xno; then : case $enable_mpi_tests in #( yes) : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ga_cv_c_mpi_test_link=no if test "x$ga_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a C MPI program links natively" >&5 $as_echo_n "checking whether a C MPI program links natively... " >&6; } if ac_fn_c_try_link "$LINENO"; then : ga_cv_c_mpi_test_link=yes GA_MP_LIBS= GA_MP_LDFLAGS= GA_MP_CPPFLAGS= else ga_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_link" >&5 $as_echo "$ga_cv_c_mpi_test_link" >&6; } fi # That didn't work, so now let's try adding our GA_MP_* flags. # The CPPFLAGS and LDFLAGS are added up top here, but LIBS will change. ga_save_LIBS="$LIBS" ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" if test "x$ga_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a C MPI program links with additional env" >&5 $as_echo_n "checking whether a C MPI program links with additional env... " >&6; } LIBS="$LIBS $GA_MP_LIBS" if ac_fn_c_try_link "$LINENO"; then : ga_cv_c_mpi_test_link=yes else ga_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_link" >&5 $as_echo "$ga_cv_c_mpi_test_link" >&6; } fi # That didn't work, so now let's try with specific libs. if test "x$ga_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mvapich libraries" >&5 $as_echo_n "checking for mvapich libraries... " >&6; } for lib in "-lmpich -lpthread" "-lmpich" do LIBS="$LIBS $lib" if ac_fn_c_try_link "$LINENO"; then : ga_cv_c_mpi_test_link="$lib"; break else ga_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_link" >&5 $as_echo "$ga_cv_c_mpi_test_link" >&6; } fi if test "x$ga_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mpich libraries" >&5 $as_echo_n "checking for mpich libraries... " >&6; } for lib in "-lmpich -lpthread" "-lmpich" do LIBS="$LIBS $lib" if ac_fn_c_try_link "$LINENO"; then : ga_cv_c_mpi_test_link="$lib"; break else ga_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_link" >&5 $as_echo "$ga_cv_c_mpi_test_link" >&6; } fi if test "x$ga_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hpmpi libraries" >&5 $as_echo_n "checking for hpmpi libraries... " >&6; } for lib in "-lhpmpio -lhpmpi" "-lhpmpi" do LIBS="$LIBS $lib" if ac_fn_c_try_link "$LINENO"; then : ga_cv_c_mpi_test_link="$lib"; break else ga_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_link" >&5 $as_echo "$ga_cv_c_mpi_test_link" >&6; } fi if test "x$ga_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intelmpi libraries" >&5 $as_echo_n "checking for intelmpi libraries... " >&6; } for lib in "-lmpi -lmpiif -lmpigi -lrt -lpthread" "-lmpi -lmpiif -lmpigi" do LIBS="$LIBS $lib" if ac_fn_c_try_link "$LINENO"; then : ga_cv_c_mpi_test_link="$lib"; break else ga_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_link" >&5 $as_echo "$ga_cv_c_mpi_test_link" >&6; } fi if test "x$ga_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openmpi libraries" >&5 $as_echo_n "checking for openmpi libraries... " >&6; } for lib in "-lmpi -lpthread" "-lmpi" do LIBS="$LIBS $lib" if ac_fn_c_try_link "$LINENO"; then : ga_cv_c_mpi_test_link="$lib"; break else ga_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_link" >&5 $as_echo "$ga_cv_c_mpi_test_link" >&6; } fi rm -f conftest.$ac_ext LIBS="$ga_save_LIBS" LDFLAGS="$ga_save_LDFLAGS" CPPFLAGS="$ga_save_CPPFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu case $ga_cv_c_mpi_test_link in #( yes) : ;; #( no) : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "could not link a C MPI program See \`config.log' for more details" "$LINENO" 5; } ;; #( *) : GA_MP_LIBS="$ga_cv_c_mpi_test_link" ;; #( *) : ;; esac ;; #( no) : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a simple C MPI program compiles" >&5 $as_echo_n "checking whether a simple C MPI program compiles... " >&6; } if ${ga_cv_c_mpi_test_compile+:} false; then : $as_echo_n "(cached) " >&6 else ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" if ac_fn_c_try_compile "$LINENO"; then : ga_cv_c_mpi_test_compile=yes else ga_cv_c_mpi_test_compile=no fi rm -f core conftest.err conftest.$ac_objext CPPFLAGS="$ga_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_compile" >&5 $as_echo "$ga_cv_c_mpi_test_compile" >&6; } rm -f conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "x$ga_cv_c_mpi_test_compile" = xno; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "could not compile simple C MPI program See \`config.log' for more details" "$LINENO" 5; } fi ;; #( *) : ;; esac fi # Hack to append .x to executables. EXEEXT=.x$EXEEXT if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_target64_sizeof_voidp" ""; then : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TARGET 64bit-ness" >&5 $as_echo_n "checking for TARGET 64bit-ness... " >&6; } if ${ga_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else if test x$ga_target64_sizeof_voidp = x8; then : ga_cv_target=${ga_cv_target_base}64 else ga_cv_target=$ga_cv_target_base fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_target" >&5 $as_echo "$ga_cv_target" >&6; } cat >>confdefs.h <<_ACEOF #define $ga_cv_target 1 _ACEOF # Establish the underlying network infrastructure (SOCKETS, OPENIB, etc) # Clear the variables we will be using, just in case. ga_armci_network= ARMCI_NETWORK_LIBS= ARMCI_NETWORK_LDFLAGS= ARMCI_NETWORK_CPPFLAGS= # Check whether --enable-autodetect was given. if test "${enable_autodetect+set}" = set; then : enableval=$enable_autodetect; fi # First, all of the "--with" stuff is taken care of. armci_network_count=0 # Check whether --with-armci was given. if test "${with_armci+set}" = set; then : withval=$with_armci; fi if test "x$with_armci" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_armci ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_armci not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_armci not parsed" >&2;} fi done fi if test "x$with_armci" != xno && test "x$with_armci" != x; then : ga_armci_network=ARMCI as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-bgml was given. if test "${with_bgml+set}" = set; then : withval=$with_bgml; fi if test "x$with_bgml" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_bgml ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_bgml not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_bgml not parsed" >&2;} fi done fi if test "x$with_bgml" != xno && test "x$with_bgml" != x; then : ga_armci_network=BGML as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-cray-shmem was given. if test "${with_cray_shmem+set}" = set; then : withval=$with_cray_shmem; fi if test "x$with_cray_shmem" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_cray_shmem ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_cray_shmem not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_cray_shmem not parsed" >&2;} fi done fi if test "x$with_cray_shmem" != xno && test "x$with_cray_shmem" != x; then : ga_armci_network=CRAY_SHMEM as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-dcmf was given. if test "${with_dcmf+set}" = set; then : withval=$with_dcmf; fi if test "x$with_dcmf" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_dcmf ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dcmf not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dcmf not parsed" >&2;} fi done fi if test "x$with_dcmf" != xno && test "x$with_dcmf" != x; then : ga_armci_network=DCMF as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-dmapp was given. if test "${with_dmapp+set}" = set; then : withval=$with_dmapp; fi if test "x$with_dmapp" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_dmapp ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi done fi if test "x$with_dmapp" != xno && test "x$with_dmapp" != x; then : ga_armci_network=DMAPP as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-gemini was given. if test "${with_gemini+set}" = set; then : withval=$with_gemini; fi if test "x$with_gemini" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_gemini ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_gemini not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_gemini not parsed" >&2;} fi done fi if test "x$with_gemini" != xno && test "x$with_gemini" != x; then : ga_armci_network=GEMINI as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-lapi was given. if test "${with_lapi+set}" = set; then : withval=$with_lapi; fi if test "x$with_lapi" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_lapi ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapi not parsed" >&2;} fi done fi if test "x$with_lapi" != xno && test "x$with_lapi" != x; then : ga_armci_network=LAPI as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-mpi-mt was given. if test "${with_mpi_mt+set}" = set; then : withval=$with_mpi_mt; fi if test "x$with_mpi_mt" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_mpi_mt ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_mt not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_mt not parsed" >&2;} fi done fi if test "x$with_mpi_mt" != xno && test "x$with_mpi_mt" != x; then : ga_armci_network=MPI_MT as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-mpi-spawn was given. if test "${with_mpi_spawn+set}" = set; then : withval=$with_mpi_spawn; fi if test "x$with_mpi_spawn" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_mpi_spawn ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_spawn not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_spawn not parsed" >&2;} fi done fi if test "x$with_mpi_spawn" != xno && test "x$with_mpi_spawn" != x; then : ga_armci_network=MPI_SPAWN as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-mpi-ts was given. if test "${with_mpi_ts+set}" = set; then : withval=$with_mpi_ts; fi if test "x$with_mpi_ts" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_mpi_ts ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi done fi if test "x$with_mpi_ts" != xno && test "x$with_mpi_ts" != x; then : ga_armci_network=MPI_TS as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-ofa was given. if test "${with_ofa+set}" = set; then : withval=$with_ofa; fi if test "x$with_ofa" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_ofa ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi done fi if test "x$with_ofa" != xno && test "x$with_ofa" != x; then : ga_armci_network=OFA as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-openib was given. if test "${with_openib+set}" = set; then : withval=$with_openib; fi if test "x$with_openib" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_openib ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_openib not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_openib not parsed" >&2;} fi done fi if test "x$with_openib" != xno && test "x$with_openib" != x; then : ga_armci_network=OPENIB as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-portals4 was given. if test "${with_portals4+set}" = set; then : withval=$with_portals4; fi if test "x$with_portals4" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_portals4 ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi done fi if test "x$with_portals4" != xno && test "x$with_portals4" != x; then : ga_armci_network=PORTALS4 as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-portals was given. if test "${with_portals+set}" = set; then : withval=$with_portals; fi if test "x$with_portals" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_portals ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals not parsed" >&2;} fi done fi if test "x$with_portals" != xno && test "x$with_portals" != x; then : ga_armci_network=PORTALS as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Check whether --with-sockets was given. if test "${with_sockets+set}" = set; then : withval=$with_sockets; fi if test "x$with_sockets" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_sockets ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( -L*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -WL*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS $arg" ;; #( -I*) : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS $arg" ;; #( *.a) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *.so) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi ;; #( -mkl*) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : ARMCI_NETWORK_LDFLAGS="$ARMCI_NETWORK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : ARMCI_NETWORK_CPPFLAGS="$ARMCI_NETWORK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_sockets not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_sockets not parsed" >&2;} fi done fi if test "x$with_sockets" != xno && test "x$with_sockets" != x; then : ga_armci_network=SOCKETS as_fn_arith $armci_network_count + 1 && armci_network_count=$as_val fi # Temporarily add ARMCI_NETWORK_CPPFLAGS to CPPFLAGS. ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $ARMCI_NETWORK_CPPFLAGS" # Temporarily add ARMCI_NETWORK_LDFLAGS to LDFLAGS. ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $ARMCI_NETWORK_LDFLAGS" # Temporarily add ARMCI_NETWORK_LIBS to LIBS. ga_save_LIBS="$LIBS"; LIBS="$ARMCI_NETWORK_LIBS $LIBS" if test "x$enable_autodetect" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for ARMCI_NETWORK..." >&5 $as_echo "$as_me: searching for ARMCI_NETWORK..." >&6;} if test "x$ga_armci_network" = x && test "x$with_bgml" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for BGML..." >&5 $as_echo "$as_me: searching for BGML..." >&6;} happy=yes if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing BGLML_memcpy" >&5 $as_echo_n "checking for library containing BGLML_memcpy... " >&6; } if ${ac_cv_search_BGLML_memcpy+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char BGLML_memcpy (); int main () { return BGLML_memcpy (); ; return 0; } _ACEOF for ac_lib in '' msglayer.rts; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib -lrts.rts -ldevices.rts $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_BGLML_memcpy=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_BGLML_memcpy+:} false; then : break fi done if ${ac_cv_search_BGLML_memcpy+:} false; then : else ac_cv_search_BGLML_memcpy=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_BGLML_memcpy" >&5 $as_echo "$ac_cv_search_BGLML_memcpy" >&6; } ac_res=$ac_cv_search_BGLML_memcpy if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_BGLML_memcpy in #( "none required") : ;; #( no) : ;; #( *) : # add msglayer.rts to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *msglayer.rts*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lmsglayer.rts" ;; esac # add extra lib rts.rts to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *rts.rts*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lrts.rts" ;; esac # add extra lib devices.rts to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *devices.rts*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -ldevices.rts" ;; esac ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=BGML; with_bgml=yes; fi fi if test "x$ga_armci_network" = x && test "x$with_cray_shmem" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for CRAY_SHMEM..." >&5 $as_echo "$as_me: searching for CRAY_SHMEM..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "mpp/shmem.h" "ac_cv_header_mpp_shmem_h" "$ac_includes_default" if test "x$ac_cv_header_mpp_shmem_h" = xyes; then : else ac_fn_c_check_header_mongrel "$LINENO" "shmem.h" "ac_cv_header_shmem_h" "$ac_includes_default" if test "x$ac_cv_header_shmem_h" = xyes; then : else happy=no fi fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing shmem_init" >&5 $as_echo_n "checking for library containing shmem_init... " >&6; } if ${ac_cv_search_shmem_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shmem_init (); int main () { return shmem_init (); ; return 0; } _ACEOF for ac_lib in '' sma; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_shmem_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_shmem_init+:} false; then : break fi done if ${ac_cv_search_shmem_init+:} false; then : else ac_cv_search_shmem_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_shmem_init" >&5 $as_echo "$ac_cv_search_shmem_init" >&6; } ac_res=$ac_cv_search_shmem_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_shmem_init in #( "none required") : ;; #( no) : ;; #( *) : # add sma to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *sma*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lsma" ;; esac ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=CRAY_SHMEM; with_cray_shmem=yes; fi fi if test "x$ga_armci_network" = x && test "x$with_dcmf" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for DCMF..." >&5 $as_echo "$as_me: searching for DCMF..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "dcmf.h" "ac_cv_header_dcmf_h" "$ac_includes_default" if test "x$ac_cv_header_dcmf_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing DCMF_Messager_initialize" >&5 $as_echo_n "checking for library containing DCMF_Messager_initialize... " >&6; } if ${ac_cv_search_DCMF_Messager_initialize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char DCMF_Messager_initialize (); int main () { return DCMF_Messager_initialize (); ; return 0; } _ACEOF for ac_lib in '' dcmf.cnk; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib -ldcmfcoll.cnk -lSPI.cna -lrt $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_DCMF_Messager_initialize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_DCMF_Messager_initialize+:} false; then : break fi done if ${ac_cv_search_DCMF_Messager_initialize+:} false; then : else ac_cv_search_DCMF_Messager_initialize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_DCMF_Messager_initialize" >&5 $as_echo "$ac_cv_search_DCMF_Messager_initialize" >&6; } ac_res=$ac_cv_search_DCMF_Messager_initialize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_DCMF_Messager_initialize in #( "none required") : ;; #( no) : ;; #( *) : # add dcmf.cnk to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *dcmf.cnk*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -ldcmf.cnk" ;; esac # add extra lib dcmfcoll.cnk if not there case $ARMCI_NETWORK_LIBS in #( *dcmfcoll.cnk*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -ldcmfcoll.cnk" ;; esac # add extra lib SPI.cna if not there case $ARMCI_NETWORK_LIBS in #( *SPI.cna*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lSPI.cna" ;; esac # add extra lib rt if not there case $ARMCI_NETWORK_LIBS in #( *rt*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lrt" ;; esac ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=DCMF; with_dcmf=yes; fi fi if test "x$ga_armci_network" = x && test "x$with_lapi" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for LAPI..." >&5 $as_echo "$as_me: searching for LAPI..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "lapi.h" "ac_cv_header_lapi_h" "$ac_includes_default" if test "x$ac_cv_header_lapi_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing LAPI_Init" >&5 $as_echo_n "checking for library containing LAPI_Init... " >&6; } if ${ac_cv_search_LAPI_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char LAPI_Init (); int main () { return LAPI_Init (); ; return 0; } _ACEOF for ac_lib in '' lapi_r lapi; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_LAPI_Init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_LAPI_Init+:} false; then : break fi done if ${ac_cv_search_LAPI_Init+:} false; then : else ac_cv_search_LAPI_Init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_LAPI_Init" >&5 $as_echo "$ac_cv_search_LAPI_Init" >&6; } ac_res=$ac_cv_search_LAPI_Init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_LAPI_Init in #( "none required") : ;; #( no) : ;; #( *) : # add missing lib to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *$ac_cv_search_LAPI_Init*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_LAPI_Init" ;; esac ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=LAPI; with_lapi=yes; fi fi if test "x$ga_armci_network" = x && test "x$with_ofa" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for OFA..." >&5 $as_echo "$as_me: searching for OFA..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "infiniband/verbs.h" "ac_cv_header_infiniband_verbs_h" "$ac_includes_default" if test "x$ac_cv_header_infiniband_verbs_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ibv_open_device" >&5 $as_echo_n "checking for library containing ibv_open_device... " >&6; } if ${ac_cv_search_ibv_open_device+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ibv_open_device (); int main () { return ibv_open_device (); ; return 0; } _ACEOF for ac_lib in '' ibverbs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ibv_open_device=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ibv_open_device+:} false; then : break fi done if ${ac_cv_search_ibv_open_device+:} false; then : else ac_cv_search_ibv_open_device=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ibv_open_device" >&5 $as_echo "$ac_cv_search_ibv_open_device" >&6; } ac_res=$ac_cv_search_ibv_open_device if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_ibv_open_device in #( "none required") : ;; #( no) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_ibv_open_device" ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=OFA; with_ofa=yes; fi fi if test "x$ga_armci_network" = x && test "x$with_openib" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for OPENIB..." >&5 $as_echo "$as_me: searching for OPENIB..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "infiniband/verbs.h" "ac_cv_header_infiniband_verbs_h" "$ac_includes_default" if test "x$ac_cv_header_infiniband_verbs_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ibv_open_device" >&5 $as_echo_n "checking for library containing ibv_open_device... " >&6; } if ${ac_cv_search_ibv_open_device+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ibv_open_device (); int main () { return ibv_open_device (); ; return 0; } _ACEOF for ac_lib in '' ibverbs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ibv_open_device=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ibv_open_device+:} false; then : break fi done if ${ac_cv_search_ibv_open_device+:} false; then : else ac_cv_search_ibv_open_device=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ibv_open_device" >&5 $as_echo "$ac_cv_search_ibv_open_device" >&6; } ac_res=$ac_cv_search_ibv_open_device if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_ibv_open_device in #( "none required") : ;; #( no) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_ibv_open_device" ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=OPENIB; with_openib=yes; fi fi if test "x$ga_armci_network" = x && test "x$with_portals4" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for PORTALS4..." >&5 $as_echo "$as_me: searching for PORTALS4..." >&6;} happy=yes if test "x$happy" = xyes; then : ga_armci_network=PORTALS4; with_portals4=yes; fi fi if test "x$ga_armci_network" = x && test "x$with_portals" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for PORTALS..." >&5 $as_echo "$as_me: searching for PORTALS..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "portals/portals3.h" "ac_cv_header_portals_portals3_h" "$ac_includes_default" if test "x$ac_cv_header_portals_portals3_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "portals/nal.h" "ac_cv_header_portals_nal_h" "$ac_includes_default" if test "x$ac_cv_header_portals_nal_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing PtlInit" >&5 $as_echo_n "checking for library containing PtlInit... " >&6; } if ${ac_cv_search_PtlInit+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char PtlInit (); int main () { return PtlInit (); ; return 0; } _ACEOF for ac_lib in '' portals; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_PtlInit=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_PtlInit+:} false; then : break fi done if ${ac_cv_search_PtlInit+:} false; then : else ac_cv_search_PtlInit=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_PtlInit" >&5 $as_echo "$ac_cv_search_PtlInit" >&6; } ac_res=$ac_cv_search_PtlInit if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : ga_armci_network=PORTALS; with_portals=yes; fi fi if test "x$ga_armci_network" = x && test "x$with_dmapp" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for DMAPP..." >&5 $as_echo "$as_me: searching for DMAPP..." >&6;} happy=yes if test "x$happy" = xyes; then : ga_armci_network=DMAPP; with_dmapp=yes; fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethugepagesize" >&5 $as_echo_n "checking for library containing gethugepagesize... " >&6; } if ${ac_cv_search_gethugepagesize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethugepagesize (); int main () { return gethugepagesize (); ; return 0; } _ACEOF for ac_lib in '' hugetlbfs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gethugepagesize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gethugepagesize+:} false; then : break fi done if ${ac_cv_search_gethugepagesize+:} false; then : else ac_cv_search_gethugepagesize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethugepagesize" >&5 $as_echo "$ac_cv_search_gethugepagesize" >&6; } ac_res=$ac_cv_search_gethugepagesize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi case $ac_cv_search_gethugepagesize in #( "none required") : ;; #( no) : ;; #( *) : # add missing lib to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *$ac_cv_search_gethugepagesize*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_gethugepagesize" ;; esac ;; esac fi fi if test "x$ga_armci_network" = x && test "x$with_gemini" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for GEMINI..." >&5 $as_echo "$as_me: searching for GEMINI..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_compile "$LINENO" "numatoolkit.h" "ac_cv_header_numatoolkit_h" " $ac_includes_default #include " if test "x$ac_cv_header_numatoolkit_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing NTK_Init" >&5 $as_echo_n "checking for library containing NTK_Init... " >&6; } if ${ac_cv_search_NTK_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char NTK_Init (); int main () { return NTK_Init (); ; return 0; } _ACEOF for ac_lib in '' numatoolkit; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_NTK_Init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_NTK_Init+:} false; then : break fi done if ${ac_cv_search_NTK_Init+:} false; then : else ac_cv_search_NTK_Init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_NTK_Init" >&5 $as_echo "$ac_cv_search_NTK_Init" >&6; } ac_res=$ac_cv_search_NTK_Init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi # CPPFLAGS must have CRAY_UGNI before looking for the next headers. gemini_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS -DCRAY_UGNI" if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "onesided.h" "ac_cv_header_onesided_h" "$ac_includes_default" if test "x$ac_cv_header_onesided_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "gni.h" "ac_cv_header_gni_h" "$ac_includes_default" if test "x$ac_cv_header_gni_h" = xyes; then : else happy=no fi fi CPPFLAGS="$gemini_save_CPPFLAGS" if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gniInit" >&5 $as_echo_n "checking for library containing gniInit... " >&6; } if ${ac_cv_search_gniInit+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gniInit (); int main () { return gniInit (); ; return 0; } _ACEOF for ac_lib in '' onesided; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gniInit=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gniInit+:} false; then : break fi done if ${ac_cv_search_gniInit+:} false; then : else ac_cv_search_gniInit=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gniInit" >&5 $as_echo "$ac_cv_search_gniInit" >&6; } ac_res=$ac_cv_search_gniInit if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : ga_armci_network=GEMINI; with_gemini=yes; fi # check for a function introduced in libonesided/1.5 # we purposefully abuse the ac_cv_search_onesided_mem_htflush value if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing onesided_mem_htflush" >&5 $as_echo_n "checking for library containing onesided_mem_htflush... " >&6; } if ${ac_cv_search_onesided_mem_htflush+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char onesided_mem_htflush (); int main () { return onesided_mem_htflush (); ; return 0; } _ACEOF for ac_lib in '' onesided; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_onesided_mem_htflush=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_onesided_mem_htflush+:} false; then : break fi done if ${ac_cv_search_onesided_mem_htflush+:} false; then : else ac_cv_search_onesided_mem_htflush=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_onesided_mem_htflush" >&5 $as_echo "$ac_cv_search_onesided_mem_htflush" >&6; } ac_res=$ac_cv_search_onesided_mem_htflush if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_onesided_mem_htflush" != xno; then : ac_cv_search_onesided_mem_htflush=1 else ac_cv_search_onesided_mem_htflush=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ONESIDED_MEM_HTFLUSH $ac_cv_search_onesided_mem_htflush _ACEOF fi # check for a function introduced in libonesided/1.6 # we purposefully abuse the ac_cv_search_onesided_fadd value if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing onesided_fadd" >&5 $as_echo_n "checking for library containing onesided_fadd... " >&6; } if ${ac_cv_search_onesided_fadd+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char onesided_fadd (); int main () { return onesided_fadd (); ; return 0; } _ACEOF for ac_lib in '' onesided; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_onesided_fadd=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_onesided_fadd+:} false; then : break fi done if ${ac_cv_search_onesided_fadd+:} false; then : else ac_cv_search_onesided_fadd=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_onesided_fadd" >&5 $as_echo "$ac_cv_search_onesided_fadd" >&6; } ac_res=$ac_cv_search_onesided_fadd if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_onesided_fadd" != xno; then : ac_cv_search_onesided_fadd=1 else ac_cv_search_onesided_fadd=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ONESIDED_FADD $ac_cv_search_onesided_fadd _ACEOF fi fi if test "x$ga_armci_network" = x && test "x$with_armci" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for external ARMCI..." >&5 $as_echo "$as_me: searching for external ARMCI..." >&6;} happy=yes CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" LIBS="$LIBS $GA_MP_LIBS" if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "armci.h" "ac_cv_header_armci_h" "$ac_includes_default" if test "x$ac_cv_header_armci_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ARMCI_Init" >&5 $as_echo_n "checking for library containing ARMCI_Init... " >&6; } if ${ac_cv_search_ARMCI_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ARMCI_Init (); int main () { return ARMCI_Init (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ARMCI_Init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ARMCI_Init+:} false; then : break fi done if ${ac_cv_search_ARMCI_Init+:} false; then : else ac_cv_search_ARMCI_Init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ARMCI_Init" >&5 $as_echo "$ac_cv_search_ARMCI_Init" >&6; } ac_res=$ac_cv_search_ARMCI_Init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_ARMCI_Init in #( "none required") : ;; #( no) : ;; #( *) : # add missing lib to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *$ac_cv_search_ARMCI_Init*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_ARMCI_Init" ;; esac ;; esac fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_group_comm" >&5 $as_echo_n "checking for library containing armci_group_comm... " >&6; } if ${ac_cv_search_armci_group_comm+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_group_comm (); int main () { return armci_group_comm (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_group_comm=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_group_comm+:} false; then : break fi done if ${ac_cv_search_armci_group_comm+:} false; then : else ac_cv_search_armci_group_comm=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_group_comm" >&5 $as_echo "$ac_cv_search_armci_group_comm" >&6; } ac_res=$ac_cv_search_armci_group_comm if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_group_comm" != xno; then : ac_cv_search_armci_group_comm=1 else ac_cv_search_armci_group_comm=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_GROUP_COMM $ac_cv_search_armci_group_comm _ACEOF fi if test "x$happy" = xyes; then : ac_fn_c_check_member "$LINENO" "ARMCI_Group" "comm" "ac_cv_member_ARMCI_Group_comm" "#include " if test "x$ac_cv_member_ARMCI_Group_comm" = xyes; then : fi if test "x$ac_cv_member_ARMCI_Group_comm" != xno; then : ac_cv_member_ARMCI_Group_comm=1 else ac_cv_member_ARMCI_Group_comm=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_GROUP_COMM_MEMBER $ac_cv_member_ARMCI_Group_comm _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ARMCI_Initialized" >&5 $as_echo_n "checking for library containing ARMCI_Initialized... " >&6; } if ${ac_cv_search_ARMCI_Initialized+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ARMCI_Initialized (); int main () { return ARMCI_Initialized (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ARMCI_Initialized=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ARMCI_Initialized+:} false; then : break fi done if ${ac_cv_search_ARMCI_Initialized+:} false; then : else ac_cv_search_ARMCI_Initialized=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ARMCI_Initialized" >&5 $as_echo "$ac_cv_search_ARMCI_Initialized" >&6; } ac_res=$ac_cv_search_ARMCI_Initialized if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_ARMCI_Initialized" != xno; then : ac_cv_search_ARMCI_Initialized=1 else ac_cv_search_ARMCI_Initialized=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_INITIALIZED $ac_cv_search_ARMCI_Initialized _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_stride_info_init" >&5 $as_echo_n "checking for library containing armci_stride_info_init... " >&6; } if ${ac_cv_search_armci_stride_info_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_stride_info_init (); int main () { return armci_stride_info_init (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_stride_info_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_stride_info_init+:} false; then : break fi done if ${ac_cv_search_armci_stride_info_init+:} false; then : else ac_cv_search_armci_stride_info_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_stride_info_init" >&5 $as_echo "$ac_cv_search_armci_stride_info_init" >&6; } ac_res=$ac_cv_search_armci_stride_info_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_stride_info_init" != xno; then : ac_cv_search_armci_stride_info_init=1 else ac_cv_search_armci_stride_info_init=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_STRIDE_INFO_INIT $ac_cv_search_armci_stride_info_init _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_notify" >&5 $as_echo_n "checking for library containing armci_notify... " >&6; } if ${ac_cv_search_armci_notify+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_notify (); int main () { return armci_notify (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_notify=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_notify+:} false; then : break fi done if ${ac_cv_search_armci_notify+:} false; then : else ac_cv_search_armci_notify=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_notify" >&5 $as_echo "$ac_cv_search_armci_notify" >&6; } ac_res=$ac_cv_search_armci_notify if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_notify" != xno; then : ac_cv_search_armci_notify=1 else ac_cv_search_armci_notify=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_NOTIFY $ac_cv_search_armci_notify _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_msg_init" >&5 $as_echo_n "checking for library containing armci_msg_init... " >&6; } if ${ac_cv_search_armci_msg_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_msg_init (); int main () { return armci_msg_init (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_msg_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_msg_init+:} false; then : break fi done if ${ac_cv_search_armci_msg_init+:} false; then : else ac_cv_search_armci_msg_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_msg_init" >&5 $as_echo "$ac_cv_search_armci_msg_init" >&6; } ac_res=$ac_cv_search_armci_msg_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_msg_init" != xno; then : ac_cv_search_armci_msg_init=1 else ac_cv_search_armci_msg_init=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_MSG_INIT $ac_cv_search_armci_msg_init _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_msg_finalize" >&5 $as_echo_n "checking for library containing armci_msg_finalize... " >&6; } if ${ac_cv_search_armci_msg_finalize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_msg_finalize (); int main () { return armci_msg_finalize (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_msg_finalize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_msg_finalize+:} false; then : break fi done if ${ac_cv_search_armci_msg_finalize+:} false; then : else ac_cv_search_armci_msg_finalize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_msg_finalize" >&5 $as_echo "$ac_cv_search_armci_msg_finalize" >&6; } ac_res=$ac_cv_search_armci_msg_finalize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_msg_finalize" != xno; then : ac_cv_search_armci_msg_finalize=1 else ac_cv_search_armci_msg_finalize=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_MSG_FINALIZE $ac_cv_search_armci_msg_finalize _ACEOF fi if test "x$ac_cv_search_armci_group_comm" = x1; then HAVE_ARMCI_GROUP_COMM_TRUE= HAVE_ARMCI_GROUP_COMM_FALSE='#' else HAVE_ARMCI_GROUP_COMM_TRUE='#' HAVE_ARMCI_GROUP_COMM_FALSE= fi if test "x$ac_cv_member_ARMCI_Group_comm" = x1; then HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE= HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE='#' else HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE='#' HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE= fi if test "x$ac_cv_search_ARMCI_Initialized" = x1; then HAVE_ARMCI_INITIALIZED_TRUE= HAVE_ARMCI_INITIALIZED_FALSE='#' else HAVE_ARMCI_INITIALIZED_TRUE='#' HAVE_ARMCI_INITIALIZED_FALSE= fi if test "x$ac_cv_search_armci_stride_info_init" = x1; then HAVE_ARMCI_STRIDE_INFO_INIT_TRUE= HAVE_ARMCI_STRIDE_INFO_INIT_FALSE='#' else HAVE_ARMCI_STRIDE_INFO_INIT_TRUE='#' HAVE_ARMCI_STRIDE_INFO_INIT_FALSE= fi if test "x$ac_cv_search_armci_notify" = x1; then HAVE_ARMCI_NOTIFY_TRUE= HAVE_ARMCI_NOTIFY_FALSE='#' else HAVE_ARMCI_NOTIFY_TRUE='#' HAVE_ARMCI_NOTIFY_FALSE= fi if test "x$ac_cv_search_armci_msg_init" = x1; then HAVE_ARMCI_MSG_INIT_TRUE= HAVE_ARMCI_MSG_INIT_FALSE='#' else HAVE_ARMCI_MSG_INIT_TRUE='#' HAVE_ARMCI_MSG_INIT_FALSE= fi if test "x$ac_cv_search_armci_msg_finalize" = x1; then HAVE_ARMCI_MSG_FINALIZE_TRUE= HAVE_ARMCI_MSG_FINALIZE_FALSE='#' else HAVE_ARMCI_MSG_FINALIZE_TRUE='#' HAVE_ARMCI_MSG_FINALIZE_FALSE= fi if test "x$happy" = xyes; then : ga_armci_network=ARMCI; with_armci=yes; fi fi if test "x$ga_armci_network" = x; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !!!" >&5 $as_echo "$as_me: WARNING: !!!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No ARMCI_NETWORK detected, defaulting to SOCKETS" >&5 $as_echo "$as_me: WARNING: No ARMCI_NETWORK detected, defaulting to SOCKETS" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !!!" >&5 $as_echo "$as_me: WARNING: !!!" >&2;} ga_armci_network=SOCKETS; with_sockets=yes fi else # Not autodetecting # Check whether multiple armci networks were selected by user. case $armci_network_count in #( 0) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No ARMCI_NETWORK specified, defaulting to SOCKETS" >&5 $as_echo "$as_me: WARNING: No ARMCI_NETWORK specified, defaulting to SOCKETS" >&2;} ga_armci_network=SOCKETS; with_sockets=yes ;; #( 1) : if test "x$ga_armci_network" = xARMCI; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for external ARMCI..." >&5 $as_echo "$as_me: searching for external ARMCI..." >&6;} happy=yes CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" LIBS="$LIBS $GA_MP_LIBS" if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "armci.h" "ac_cv_header_armci_h" "$ac_includes_default" if test "x$ac_cv_header_armci_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ARMCI_Init" >&5 $as_echo_n "checking for library containing ARMCI_Init... " >&6; } if ${ac_cv_search_ARMCI_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ARMCI_Init (); int main () { return ARMCI_Init (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ARMCI_Init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ARMCI_Init+:} false; then : break fi done if ${ac_cv_search_ARMCI_Init+:} false; then : else ac_cv_search_ARMCI_Init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ARMCI_Init" >&5 $as_echo "$ac_cv_search_ARMCI_Init" >&6; } ac_res=$ac_cv_search_ARMCI_Init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_ARMCI_Init in #( "none required") : ;; #( no) : ;; #( *) : # add missing lib to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *$ac_cv_search_ARMCI_Init*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_ARMCI_Init" ;; esac ;; esac fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_group_comm" >&5 $as_echo_n "checking for library containing armci_group_comm... " >&6; } if ${ac_cv_search_armci_group_comm+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_group_comm (); int main () { return armci_group_comm (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_group_comm=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_group_comm+:} false; then : break fi done if ${ac_cv_search_armci_group_comm+:} false; then : else ac_cv_search_armci_group_comm=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_group_comm" >&5 $as_echo "$ac_cv_search_armci_group_comm" >&6; } ac_res=$ac_cv_search_armci_group_comm if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_group_comm" != xno; then : ac_cv_search_armci_group_comm=1 else ac_cv_search_armci_group_comm=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_GROUP_COMM $ac_cv_search_armci_group_comm _ACEOF fi if test "x$happy" = xyes; then : ac_fn_c_check_member "$LINENO" "ARMCI_Group" "comm" "ac_cv_member_ARMCI_Group_comm" "#include " if test "x$ac_cv_member_ARMCI_Group_comm" = xyes; then : fi if test "x$ac_cv_member_ARMCI_Group_comm" != xno; then : ac_cv_member_ARMCI_Group_comm=1 else ac_cv_member_ARMCI_Group_comm=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_GROUP_COMM_MEMBER $ac_cv_member_ARMCI_Group_comm _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ARMCI_Initialized" >&5 $as_echo_n "checking for library containing ARMCI_Initialized... " >&6; } if ${ac_cv_search_ARMCI_Initialized+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ARMCI_Initialized (); int main () { return ARMCI_Initialized (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ARMCI_Initialized=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ARMCI_Initialized+:} false; then : break fi done if ${ac_cv_search_ARMCI_Initialized+:} false; then : else ac_cv_search_ARMCI_Initialized=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ARMCI_Initialized" >&5 $as_echo "$ac_cv_search_ARMCI_Initialized" >&6; } ac_res=$ac_cv_search_ARMCI_Initialized if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_ARMCI_Initialized" != xno; then : ac_cv_search_ARMCI_Initialized=1 else ac_cv_search_ARMCI_Initialized=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_INITIALIZED $ac_cv_search_ARMCI_Initialized _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_stride_info_init" >&5 $as_echo_n "checking for library containing armci_stride_info_init... " >&6; } if ${ac_cv_search_armci_stride_info_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_stride_info_init (); int main () { return armci_stride_info_init (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_stride_info_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_stride_info_init+:} false; then : break fi done if ${ac_cv_search_armci_stride_info_init+:} false; then : else ac_cv_search_armci_stride_info_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_stride_info_init" >&5 $as_echo "$ac_cv_search_armci_stride_info_init" >&6; } ac_res=$ac_cv_search_armci_stride_info_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_stride_info_init" != xno; then : ac_cv_search_armci_stride_info_init=1 else ac_cv_search_armci_stride_info_init=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_STRIDE_INFO_INIT $ac_cv_search_armci_stride_info_init _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_notify" >&5 $as_echo_n "checking for library containing armci_notify... " >&6; } if ${ac_cv_search_armci_notify+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_notify (); int main () { return armci_notify (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_notify=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_notify+:} false; then : break fi done if ${ac_cv_search_armci_notify+:} false; then : else ac_cv_search_armci_notify=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_notify" >&5 $as_echo "$ac_cv_search_armci_notify" >&6; } ac_res=$ac_cv_search_armci_notify if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_notify" != xno; then : ac_cv_search_armci_notify=1 else ac_cv_search_armci_notify=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_NOTIFY $ac_cv_search_armci_notify _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_msg_init" >&5 $as_echo_n "checking for library containing armci_msg_init... " >&6; } if ${ac_cv_search_armci_msg_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_msg_init (); int main () { return armci_msg_init (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_msg_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_msg_init+:} false; then : break fi done if ${ac_cv_search_armci_msg_init+:} false; then : else ac_cv_search_armci_msg_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_msg_init" >&5 $as_echo "$ac_cv_search_armci_msg_init" >&6; } ac_res=$ac_cv_search_armci_msg_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_msg_init" != xno; then : ac_cv_search_armci_msg_init=1 else ac_cv_search_armci_msg_init=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_MSG_INIT $ac_cv_search_armci_msg_init _ACEOF fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing armci_msg_finalize" >&5 $as_echo_n "checking for library containing armci_msg_finalize... " >&6; } if ${ac_cv_search_armci_msg_finalize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char armci_msg_finalize (); int main () { return armci_msg_finalize (); ; return 0; } _ACEOF for ac_lib in '' armci; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_armci_msg_finalize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_armci_msg_finalize+:} false; then : break fi done if ${ac_cv_search_armci_msg_finalize+:} false; then : else ac_cv_search_armci_msg_finalize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_armci_msg_finalize" >&5 $as_echo "$ac_cv_search_armci_msg_finalize" >&6; } ac_res=$ac_cv_search_armci_msg_finalize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_armci_msg_finalize" != xno; then : ac_cv_search_armci_msg_finalize=1 else ac_cv_search_armci_msg_finalize=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ARMCI_MSG_FINALIZE $ac_cv_search_armci_msg_finalize _ACEOF fi if test "x$ac_cv_search_armci_group_comm" = x1; then HAVE_ARMCI_GROUP_COMM_TRUE= HAVE_ARMCI_GROUP_COMM_FALSE='#' else HAVE_ARMCI_GROUP_COMM_TRUE='#' HAVE_ARMCI_GROUP_COMM_FALSE= fi if test "x$ac_cv_member_ARMCI_Group_comm" = x1; then HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE= HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE='#' else HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE='#' HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE= fi if test "x$ac_cv_search_ARMCI_Initialized" = x1; then HAVE_ARMCI_INITIALIZED_TRUE= HAVE_ARMCI_INITIALIZED_FALSE='#' else HAVE_ARMCI_INITIALIZED_TRUE='#' HAVE_ARMCI_INITIALIZED_FALSE= fi if test "x$ac_cv_search_armci_stride_info_init" = x1; then HAVE_ARMCI_STRIDE_INFO_INIT_TRUE= HAVE_ARMCI_STRIDE_INFO_INIT_FALSE='#' else HAVE_ARMCI_STRIDE_INFO_INIT_TRUE='#' HAVE_ARMCI_STRIDE_INFO_INIT_FALSE= fi if test "x$ac_cv_search_armci_notify" = x1; then HAVE_ARMCI_NOTIFY_TRUE= HAVE_ARMCI_NOTIFY_FALSE='#' else HAVE_ARMCI_NOTIFY_TRUE='#' HAVE_ARMCI_NOTIFY_FALSE= fi if test "x$ac_cv_search_armci_msg_init" = x1; then HAVE_ARMCI_MSG_INIT_TRUE= HAVE_ARMCI_MSG_INIT_FALSE='#' else HAVE_ARMCI_MSG_INIT_TRUE='#' HAVE_ARMCI_MSG_INIT_FALSE= fi if test "x$ac_cv_search_armci_msg_finalize" = x1; then HAVE_ARMCI_MSG_FINALIZE_TRUE= HAVE_ARMCI_MSG_FINALIZE_FALSE='#' else HAVE_ARMCI_MSG_FINALIZE_TRUE='#' HAVE_ARMCI_MSG_FINALIZE_FALSE= fi if test "x$happy" = xyes; then : ga_armci_network=ARMCI; with_armci=yes; else as_fn_error $? "test for ARMCI_NETWORK=ARMCI failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xBGML; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for BGML..." >&5 $as_echo "$as_me: searching for BGML..." >&6;} happy=yes if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing BGLML_memcpy" >&5 $as_echo_n "checking for library containing BGLML_memcpy... " >&6; } if ${ac_cv_search_BGLML_memcpy+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char BGLML_memcpy (); int main () { return BGLML_memcpy (); ; return 0; } _ACEOF for ac_lib in '' msglayer.rts; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib -lrts.rts -ldevices.rts $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_BGLML_memcpy=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_BGLML_memcpy+:} false; then : break fi done if ${ac_cv_search_BGLML_memcpy+:} false; then : else ac_cv_search_BGLML_memcpy=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_BGLML_memcpy" >&5 $as_echo "$ac_cv_search_BGLML_memcpy" >&6; } ac_res=$ac_cv_search_BGLML_memcpy if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_BGLML_memcpy in #( "none required") : ;; #( no) : ;; #( *) : # add msglayer.rts to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *msglayer.rts*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lmsglayer.rts" ;; esac # add extra lib rts.rts to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *rts.rts*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lrts.rts" ;; esac # add extra lib devices.rts to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *devices.rts*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -ldevices.rts" ;; esac ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=BGML; with_bgml=yes; else as_fn_error $? "test for ARMCI_NETWORK=BGML failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xCRAY_SHMEM; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for CRAY_SHMEM..." >&5 $as_echo "$as_me: searching for CRAY_SHMEM..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "mpp/shmem.h" "ac_cv_header_mpp_shmem_h" "$ac_includes_default" if test "x$ac_cv_header_mpp_shmem_h" = xyes; then : else ac_fn_c_check_header_mongrel "$LINENO" "shmem.h" "ac_cv_header_shmem_h" "$ac_includes_default" if test "x$ac_cv_header_shmem_h" = xyes; then : else happy=no fi fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing shmem_init" >&5 $as_echo_n "checking for library containing shmem_init... " >&6; } if ${ac_cv_search_shmem_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shmem_init (); int main () { return shmem_init (); ; return 0; } _ACEOF for ac_lib in '' sma; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_shmem_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_shmem_init+:} false; then : break fi done if ${ac_cv_search_shmem_init+:} false; then : else ac_cv_search_shmem_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_shmem_init" >&5 $as_echo "$ac_cv_search_shmem_init" >&6; } ac_res=$ac_cv_search_shmem_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_shmem_init in #( "none required") : ;; #( no) : ;; #( *) : # add sma to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *sma*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lsma" ;; esac ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=CRAY_SHMEM; with_cray_shmem=yes; else as_fn_error $? "test for ARMCI_NETWORK=CRAY_SHMEM failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xDCMF; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for DCMF..." >&5 $as_echo "$as_me: searching for DCMF..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "dcmf.h" "ac_cv_header_dcmf_h" "$ac_includes_default" if test "x$ac_cv_header_dcmf_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing DCMF_Messager_initialize" >&5 $as_echo_n "checking for library containing DCMF_Messager_initialize... " >&6; } if ${ac_cv_search_DCMF_Messager_initialize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char DCMF_Messager_initialize (); int main () { return DCMF_Messager_initialize (); ; return 0; } _ACEOF for ac_lib in '' dcmf.cnk; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib -ldcmfcoll.cnk -lSPI.cna -lrt $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_DCMF_Messager_initialize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_DCMF_Messager_initialize+:} false; then : break fi done if ${ac_cv_search_DCMF_Messager_initialize+:} false; then : else ac_cv_search_DCMF_Messager_initialize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_DCMF_Messager_initialize" >&5 $as_echo "$ac_cv_search_DCMF_Messager_initialize" >&6; } ac_res=$ac_cv_search_DCMF_Messager_initialize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_DCMF_Messager_initialize in #( "none required") : ;; #( no) : ;; #( *) : # add dcmf.cnk to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *dcmf.cnk*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -ldcmf.cnk" ;; esac # add extra lib dcmfcoll.cnk if not there case $ARMCI_NETWORK_LIBS in #( *dcmfcoll.cnk*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -ldcmfcoll.cnk" ;; esac # add extra lib SPI.cna if not there case $ARMCI_NETWORK_LIBS in #( *SPI.cna*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lSPI.cna" ;; esac # add extra lib rt if not there case $ARMCI_NETWORK_LIBS in #( *rt*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lrt" ;; esac ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=DCMF; with_dcmf=yes; else as_fn_error $? "test for ARMCI_NETWORK=DCMF failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xDMAPP; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for DMAPP..." >&5 $as_echo "$as_me: searching for DMAPP..." >&6;} happy=yes if test "x$happy" = xyes; then : ga_armci_network=DMAPP; with_dmapp=yes; else as_fn_error $? "test for ARMCI_NETWORK=DMAPP failed" "$LINENO" 5 fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethugepagesize" >&5 $as_echo_n "checking for library containing gethugepagesize... " >&6; } if ${ac_cv_search_gethugepagesize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethugepagesize (); int main () { return gethugepagesize (); ; return 0; } _ACEOF for ac_lib in '' hugetlbfs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gethugepagesize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gethugepagesize+:} false; then : break fi done if ${ac_cv_search_gethugepagesize+:} false; then : else ac_cv_search_gethugepagesize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethugepagesize" >&5 $as_echo "$ac_cv_search_gethugepagesize" >&6; } ac_res=$ac_cv_search_gethugepagesize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi case $ac_cv_search_gethugepagesize in #( "none required") : ;; #( no) : ;; #( *) : # add missing lib to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *$ac_cv_search_gethugepagesize*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_gethugepagesize" ;; esac ;; esac fi fi if test "x$ga_armci_network" = xLAPI; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for LAPI..." >&5 $as_echo "$as_me: searching for LAPI..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "lapi.h" "ac_cv_header_lapi_h" "$ac_includes_default" if test "x$ac_cv_header_lapi_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing LAPI_Init" >&5 $as_echo_n "checking for library containing LAPI_Init... " >&6; } if ${ac_cv_search_LAPI_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char LAPI_Init (); int main () { return LAPI_Init (); ; return 0; } _ACEOF for ac_lib in '' lapi_r lapi; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_LAPI_Init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_LAPI_Init+:} false; then : break fi done if ${ac_cv_search_LAPI_Init+:} false; then : else ac_cv_search_LAPI_Init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_LAPI_Init" >&5 $as_echo "$ac_cv_search_LAPI_Init" >&6; } ac_res=$ac_cv_search_LAPI_Init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_LAPI_Init in #( "none required") : ;; #( no) : ;; #( *) : # add missing lib to ARMCI_NETWORK_LIBS if not there case $ARMCI_NETWORK_LIBS in #( *$ac_cv_search_LAPI_Init*) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_LAPI_Init" ;; esac ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=LAPI; with_lapi=yes; else as_fn_error $? "test for ARMCI_NETWORK=LAPI failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xMPI_TS; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for MPI_TS..." >&5 $as_echo "$as_me: searching for MPI_TS..." >&6;} happy=yes if test "x$happy" = xyes; then : ga_armci_network=MPI_TS; with_mpi_ts=yes; else as_fn_error $? "test for ARMCI_NETWORK=MPI_TS failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xMPI_MT; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for MPI_MT..." >&5 $as_echo "$as_me: searching for MPI_MT..." >&6;} happy=yes CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" LIBS="$LIBS $GA_MP_LIBS" if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "mpi.h" "ac_cv_header_mpi_h" "$ac_includes_default" if test "x$ac_cv_header_mpi_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing MPI_Init_thread" >&5 $as_echo_n "checking for library containing MPI_Init_thread... " >&6; } if ${ac_cv_search_MPI_Init_thread+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char MPI_Init_thread (); int main () { return MPI_Init_thread (); ; return 0; } _ACEOF for ac_lib in '' mpi mpich.cnk mpich.rts; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_MPI_Init_thread=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_MPI_Init_thread+:} false; then : break fi done if ${ac_cv_search_MPI_Init_thread+:} false; then : else ac_cv_search_MPI_Init_thread=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_MPI_Init_thread" >&5 $as_echo "$ac_cv_search_MPI_Init_thread" >&6; } ac_res=$ac_cv_search_MPI_Init_thread if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : ga_armci_network=MPI_MT; with_mpi_mt=yes; else as_fn_error $? "test for ARMCI_NETWORK=MPI_MT failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xMPI_SPAWN; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for MPI_SPAWN..." >&5 $as_echo "$as_me: searching for MPI_SPAWN..." >&6;} happy=yes CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" LIBS="$LIBS $GA_MP_LIBS" if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "mpi.h" "ac_cv_header_mpi_h" "$ac_includes_default" if test "x$ac_cv_header_mpi_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing MPI_Comm_spawn_multiple" >&5 $as_echo_n "checking for library containing MPI_Comm_spawn_multiple... " >&6; } if ${ac_cv_search_MPI_Comm_spawn_multiple+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char MPI_Comm_spawn_multiple (); int main () { return MPI_Comm_spawn_multiple (); ; return 0; } _ACEOF for ac_lib in '' mpi mpich.cnk mpich.rts; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_MPI_Comm_spawn_multiple=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_MPI_Comm_spawn_multiple+:} false; then : break fi done if ${ac_cv_search_MPI_Comm_spawn_multiple+:} false; then : else ac_cv_search_MPI_Comm_spawn_multiple=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_MPI_Comm_spawn_multiple" >&5 $as_echo "$ac_cv_search_MPI_Comm_spawn_multiple" >&6; } ac_res=$ac_cv_search_MPI_Comm_spawn_multiple if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : ga_armci_network=MPI_SPAWN; with_mpi_spawn=yes; else as_fn_error $? "test for ARMCI_NETWORK=MPI_SPAWN failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xOFA; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for OFA..." >&5 $as_echo "$as_me: searching for OFA..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "infiniband/verbs.h" "ac_cv_header_infiniband_verbs_h" "$ac_includes_default" if test "x$ac_cv_header_infiniband_verbs_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ibv_open_device" >&5 $as_echo_n "checking for library containing ibv_open_device... " >&6; } if ${ac_cv_search_ibv_open_device+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ibv_open_device (); int main () { return ibv_open_device (); ; return 0; } _ACEOF for ac_lib in '' ibverbs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ibv_open_device=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ibv_open_device+:} false; then : break fi done if ${ac_cv_search_ibv_open_device+:} false; then : else ac_cv_search_ibv_open_device=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ibv_open_device" >&5 $as_echo "$ac_cv_search_ibv_open_device" >&6; } ac_res=$ac_cv_search_ibv_open_device if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_ibv_open_device in #( "none required") : ;; #( no) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_ibv_open_device" ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=OFA; with_ofa=yes; else as_fn_error $? "test for ARMCI_NETWORK=OFA failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xOPENIB; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for OPENIB..." >&5 $as_echo "$as_me: searching for OPENIB..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "infiniband/verbs.h" "ac_cv_header_infiniband_verbs_h" "$ac_includes_default" if test "x$ac_cv_header_infiniband_verbs_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ibv_open_device" >&5 $as_echo_n "checking for library containing ibv_open_device... " >&6; } if ${ac_cv_search_ibv_open_device+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ibv_open_device (); int main () { return ibv_open_device (); ; return 0; } _ACEOF for ac_lib in '' ibverbs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ibv_open_device=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ibv_open_device+:} false; then : break fi done if ${ac_cv_search_ibv_open_device+:} false; then : else ac_cv_search_ibv_open_device=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ibv_open_device" >&5 $as_echo "$ac_cv_search_ibv_open_device" >&6; } ac_res=$ac_cv_search_ibv_open_device if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_ibv_open_device in #( "none required") : ;; #( no) : ;; #( *) : ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_ibv_open_device" ;; esac fi if test "x$happy" = xyes; then : ga_armci_network=OPENIB; with_openib=yes; else as_fn_error $? "test for ARMCI_NETWORK=OPENIB failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xPORTALS4; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for PORTALS4..." >&5 $as_echo "$as_me: searching for PORTALS4..." >&6;} happy=yes if test "x$happy" = xyes; then : ga_armci_network=PORTALS4; with_portals4=yes; else as_fn_error $? "test for ARMCI_NETWORK=PORTALS4 failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xPORTALS; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for PORTALS..." >&5 $as_echo "$as_me: searching for PORTALS..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "portals/portals3.h" "ac_cv_header_portals_portals3_h" "$ac_includes_default" if test "x$ac_cv_header_portals_portals3_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "portals/nal.h" "ac_cv_header_portals_nal_h" "$ac_includes_default" if test "x$ac_cv_header_portals_nal_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing PtlInit" >&5 $as_echo_n "checking for library containing PtlInit... " >&6; } if ${ac_cv_search_PtlInit+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char PtlInit (); int main () { return PtlInit (); ; return 0; } _ACEOF for ac_lib in '' portals; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_PtlInit=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_PtlInit+:} false; then : break fi done if ${ac_cv_search_PtlInit+:} false; then : else ac_cv_search_PtlInit=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_PtlInit" >&5 $as_echo "$ac_cv_search_PtlInit" >&6; } ac_res=$ac_cv_search_PtlInit if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : ga_armci_network=PORTALS; with_portals=yes; else as_fn_error $? "test for ARMCI_NETWORK=PORTALS failed" "$LINENO" 5 fi fi if test "x$ga_armci_network" = xGEMINI; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for GEMINI..." >&5 $as_echo "$as_me: searching for GEMINI..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_compile "$LINENO" "numatoolkit.h" "ac_cv_header_numatoolkit_h" " $ac_includes_default #include " if test "x$ac_cv_header_numatoolkit_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing NTK_Init" >&5 $as_echo_n "checking for library containing NTK_Init... " >&6; } if ${ac_cv_search_NTK_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char NTK_Init (); int main () { return NTK_Init (); ; return 0; } _ACEOF for ac_lib in '' numatoolkit; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_NTK_Init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_NTK_Init+:} false; then : break fi done if ${ac_cv_search_NTK_Init+:} false; then : else ac_cv_search_NTK_Init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_NTK_Init" >&5 $as_echo "$ac_cv_search_NTK_Init" >&6; } ac_res=$ac_cv_search_NTK_Init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi # CPPFLAGS must have CRAY_UGNI before looking for the next headers. gemini_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS -DCRAY_UGNI" if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "onesided.h" "ac_cv_header_onesided_h" "$ac_includes_default" if test "x$ac_cv_header_onesided_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "gni.h" "ac_cv_header_gni_h" "$ac_includes_default" if test "x$ac_cv_header_gni_h" = xyes; then : else happy=no fi fi CPPFLAGS="$gemini_save_CPPFLAGS" if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gniInit" >&5 $as_echo_n "checking for library containing gniInit... " >&6; } if ${ac_cv_search_gniInit+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gniInit (); int main () { return gniInit (); ; return 0; } _ACEOF for ac_lib in '' onesided; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gniInit=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gniInit+:} false; then : break fi done if ${ac_cv_search_gniInit+:} false; then : else ac_cv_search_gniInit=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gniInit" >&5 $as_echo "$ac_cv_search_gniInit" >&6; } ac_res=$ac_cv_search_gniInit if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : ga_armci_network=GEMINI; with_gemini=yes; else as_fn_error $? "test for ARMCI_NETWORK=GEMINI failed" "$LINENO" 5 fi # check for a function introduced in libonesided/1.5 # we purposefully abuse the ac_cv_search_onesided_mem_htflush value if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing onesided_mem_htflush" >&5 $as_echo_n "checking for library containing onesided_mem_htflush... " >&6; } if ${ac_cv_search_onesided_mem_htflush+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char onesided_mem_htflush (); int main () { return onesided_mem_htflush (); ; return 0; } _ACEOF for ac_lib in '' onesided; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_onesided_mem_htflush=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_onesided_mem_htflush+:} false; then : break fi done if ${ac_cv_search_onesided_mem_htflush+:} false; then : else ac_cv_search_onesided_mem_htflush=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_onesided_mem_htflush" >&5 $as_echo "$ac_cv_search_onesided_mem_htflush" >&6; } ac_res=$ac_cv_search_onesided_mem_htflush if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_onesided_mem_htflush" != xno; then : ac_cv_search_onesided_mem_htflush=1 else ac_cv_search_onesided_mem_htflush=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ONESIDED_MEM_HTFLUSH $ac_cv_search_onesided_mem_htflush _ACEOF fi # check for a function introduced in libonesided/1.6 # we purposefully abuse the ac_cv_search_onesided_fadd value if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing onesided_fadd" >&5 $as_echo_n "checking for library containing onesided_fadd... " >&6; } if ${ac_cv_search_onesided_fadd+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char onesided_fadd (); int main () { return onesided_fadd (); ; return 0; } _ACEOF for ac_lib in '' onesided; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_onesided_fadd=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_onesided_fadd+:} false; then : break fi done if ${ac_cv_search_onesided_fadd+:} false; then : else ac_cv_search_onesided_fadd=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_onesided_fadd" >&5 $as_echo "$ac_cv_search_onesided_fadd" >&6; } ac_res=$ac_cv_search_onesided_fadd if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_onesided_fadd" != xno; then : ac_cv_search_onesided_fadd=1 else ac_cv_search_onesided_fadd=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_ONESIDED_FADD $ac_cv_search_onesided_fadd _ACEOF fi fi ;; #( *) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: too many armci networks specified: $armci_network_count" >&5 $as_echo "$as_me: WARNING: too many armci networks specified: $armci_network_count" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: the following were specified:" >&5 $as_echo "$as_me: WARNING: the following were specified:" >&2;} if test "x$with_armci" != x && test "x$with_armci" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-armci=$with_armci" >&5 $as_echo "$as_me: WARNING: --with-armci=$with_armci" >&2;} fi if test "x$with_bgml" != x && test "x$with_bgml" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-bgml=$with_bgml" >&5 $as_echo "$as_me: WARNING: --with-bgml=$with_bgml" >&2;} fi if test "x$with_cray_shmem" != x && test "x$with_cray_shmem" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-cray-shmem=$with_cray_shmem" >&5 $as_echo "$as_me: WARNING: --with-cray-shmem=$with_cray_shmem" >&2;} fi if test "x$with_dcmf" != x && test "x$with_dcmf" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-dcmf=$with_dcmf" >&5 $as_echo "$as_me: WARNING: --with-dcmf=$with_dcmf" >&2;} fi if test "x$with_dmapp" != x && test "x$with_dmapp" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-dmapp=$with_dmapp" >&5 $as_echo "$as_me: WARNING: --with-dmapp=$with_dmapp" >&2;} fi if test "x$with_lapi" != x && test "x$with_lapi" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-lapi=$with_lapi" >&5 $as_echo "$as_me: WARNING: --with-lapi=$with_lapi" >&2;} fi if test "x$with_mpi_ts" != x && test "x$with_mpi_ts" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-mpi-ts=$with_mpi_ts" >&5 $as_echo "$as_me: WARNING: --with-mpi-ts=$with_mpi_ts" >&2;} fi if test "x$with_mpi_mt" != x && test "x$with_mpi_mt" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-mpi-mt=$with_mpi_mt" >&5 $as_echo "$as_me: WARNING: --with-mpi-mt=$with_mpi_mt" >&2;} fi if test "x$with_mpi_spawn" != x && test "x$with_mpi_spawn" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-mpi-spawn=$with_mpi_spawn" >&5 $as_echo "$as_me: WARNING: --with-mpi-spawn=$with_mpi_spawn" >&2;} fi if test "x$with_ofa" != x && test "x$with_ofa" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-ofa=$with_ofa" >&5 $as_echo "$as_me: WARNING: --with-ofa=$with_ofa" >&2;} fi if test "x$with_openib" != x && test "x$with_openib" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-openib=$with_openib" >&5 $as_echo "$as_me: WARNING: --with-openib=$with_openib" >&2;} fi if test "x$with_portals4" != x && test "x$with_portals4" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-portals4=$with_portals4" >&5 $as_echo "$as_me: WARNING: --with-portals4=$with_portals4" >&2;} fi if test "x$with_portals" != x && test "x$with_portals" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-portals=$with_portals" >&5 $as_echo "$as_me: WARNING: --with-portals=$with_portals" >&2;} fi if test "x$with_gemini" != x && test "x$with_gemini" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-gemini=$with_gemini" >&5 $as_echo "$as_me: WARNING: --with-gemini=$with_gemini" >&2;} fi if test "x$with_sockets" != x && test "x$with_sockets" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-sockets=$with_sockets" >&5 $as_echo "$as_me: WARNING: --with-sockets=$with_sockets" >&2;} fi as_fn_error $? "please select only one armci network" "$LINENO" 5 ;; esac fi # Remove ARMCI_NETWORK_CPPFLAGS from CPPFLAGS. CPPFLAGS="$ga_save_CPPFLAGS" # Remove ARMCI_NETWORK_LDFLAGS from LDFLAGS. LDFLAGS="$ga_save_LDFLAGS" # Remove ARMCI_NETWORK_LIBS from LIBS. LIBS="$ga_save_LIBS" if test "x$with_armci" != x && test "x$with_armci" != xno; then ARMCI_NETWORK_ARMCI_TRUE= ARMCI_NETWORK_ARMCI_FALSE='#' else ARMCI_NETWORK_ARMCI_TRUE='#' ARMCI_NETWORK_ARMCI_FALSE= fi if test "x$with_bgml" != x && test "x$with_bgml" != xno; then ARMCI_NETWORK_BGML_TRUE= ARMCI_NETWORK_BGML_FALSE='#' else ARMCI_NETWORK_BGML_TRUE='#' ARMCI_NETWORK_BGML_FALSE= fi if test "x$with_cray_shmem" != x && test "x$with_cray_shmem" != xno; then ARMCI_NETWORK_CRAY_SHMEM_TRUE= ARMCI_NETWORK_CRAY_SHMEM_FALSE='#' else ARMCI_NETWORK_CRAY_SHMEM_TRUE='#' ARMCI_NETWORK_CRAY_SHMEM_FALSE= fi if test "x$with_dcmf" != x && test "x$with_dcmf" != xno; then ARMCI_NETWORK_DCMF_TRUE= ARMCI_NETWORK_DCMF_FALSE='#' else ARMCI_NETWORK_DCMF_TRUE='#' ARMCI_NETWORK_DCMF_FALSE= fi if test "x$with_dmapp" != x && test "x$with_dmapp" != xno; then ARMCI_NETWORK_DMAPP_TRUE= ARMCI_NETWORK_DMAPP_FALSE='#' else ARMCI_NETWORK_DMAPP_TRUE='#' ARMCI_NETWORK_DMAPP_FALSE= fi if test "x$with_lapi" != x && test "x$with_lapi" != xno; then ARMCI_NETWORK_LAPI_TRUE= ARMCI_NETWORK_LAPI_FALSE='#' else ARMCI_NETWORK_LAPI_TRUE='#' ARMCI_NETWORK_LAPI_FALSE= fi if test "x$with_mpi_ts" != x && test "x$with_mpi_ts" != xno; then ARMCI_NETWORK_MPI_TS_TRUE= ARMCI_NETWORK_MPI_TS_FALSE='#' else ARMCI_NETWORK_MPI_TS_TRUE='#' ARMCI_NETWORK_MPI_TS_FALSE= fi if test "x$with_mpi_mt" != x && test "x$with_mpi_mt" != xno; then ARMCI_NETWORK_MPI_MT_TRUE= ARMCI_NETWORK_MPI_MT_FALSE='#' else ARMCI_NETWORK_MPI_MT_TRUE='#' ARMCI_NETWORK_MPI_MT_FALSE= fi if test "x$with_mpi_spawn" != x && test "x$with_mpi_spawn" != xno; then ARMCI_NETWORK_MPI_SPAWN_TRUE= ARMCI_NETWORK_MPI_SPAWN_FALSE='#' else ARMCI_NETWORK_MPI_SPAWN_TRUE='#' ARMCI_NETWORK_MPI_SPAWN_FALSE= fi if test "x$with_ofa" != x && test "x$with_ofa" != xno; then ARMCI_NETWORK_OFA_TRUE= ARMCI_NETWORK_OFA_FALSE='#' else ARMCI_NETWORK_OFA_TRUE='#' ARMCI_NETWORK_OFA_FALSE= fi if test "x$with_openib" != x && test "x$with_openib" != xno; then ARMCI_NETWORK_OPENIB_TRUE= ARMCI_NETWORK_OPENIB_FALSE='#' else ARMCI_NETWORK_OPENIB_TRUE='#' ARMCI_NETWORK_OPENIB_FALSE= fi if test "x$with_gemini" != x && test "x$with_gemini" != xno; then ARMCI_NETWORK_GEMINI_TRUE= ARMCI_NETWORK_GEMINI_FALSE='#' else ARMCI_NETWORK_GEMINI_TRUE='#' ARMCI_NETWORK_GEMINI_FALSE= fi if test "x$with_portals4" != x && test "x$with_portals4" != xno; then ARMCI_NETWORK_PORTALS4_TRUE= ARMCI_NETWORK_PORTALS4_FALSE='#' else ARMCI_NETWORK_PORTALS4_TRUE='#' ARMCI_NETWORK_PORTALS4_FALSE= fi if test "x$with_portals" != x && test "x$with_portals" != xno; then ARMCI_NETWORK_PORTALS_TRUE= ARMCI_NETWORK_PORTALS_FALSE='#' else ARMCI_NETWORK_PORTALS_TRUE='#' ARMCI_NETWORK_PORTALS_FALSE= fi if test "x$with_sockets" != x && test "x$with_sockets" != xno; then ARMCI_NETWORK_SOCKETS_TRUE= ARMCI_NETWORK_SOCKETS_FALSE='#' else ARMCI_NETWORK_SOCKETS_TRUE='#' ARMCI_NETWORK_SOCKETS_FALSE= fi # TODO if test x != x; then DCMF_VER_2_TRUE= DCMF_VER_2_FALSE='#' else DCMF_VER_2_TRUE='#' DCMF_VER_2_FALSE= fi # always false if test x != x; then DCMF_VER_0_2_TRUE= DCMF_VER_0_2_FALSE='#' else DCMF_VER_0_2_TRUE='#' DCMF_VER_0_2_FALSE= fi # always false if test x = x; then DCMF_VER_0_3_TRUE= DCMF_VER_0_3_FALSE='#' else DCMF_VER_0_3_TRUE='#' DCMF_VER_0_3_FALSE= fi # always true # permanent hack case $ga_armci_network in #( DMAPP) : ARMCI_SRC_DIR=comex ;; #( GEMINI) : ARMCI_SRC_DIR=src-gemini ;; #( MPI_MT) : ARMCI_SRC_DIR=src ;; #( MPI_TS) : ARMCI_SRC_DIR=comex ;; #( OFA) : ARMCI_SRC_DIR=comex ;; #( OPENIB) : ARMCI_SRC_DIR=src ;; #( PORTALS4) : ARMCI_SRC_DIR=comex ;; #( PORTALS) : ARMCI_SRC_DIR=src-portals ;; #( GEMINI) : ARMCI_SRC_DIR=src-gemini ;; #( *) : ARMCI_SRC_DIR=src ;; esac if test "x$ARMCI_SRC_DIR" = "xsrc-portals"; then ARMCI_SRC_DIR_PORTALS_TRUE= ARMCI_SRC_DIR_PORTALS_FALSE='#' else ARMCI_SRC_DIR_PORTALS_TRUE='#' ARMCI_SRC_DIR_PORTALS_FALSE= fi if test "x$ARMCI_SRC_DIR" = "xsrc-gemini"; then ARMCI_SRC_DIR_GEMINI_TRUE= ARMCI_SRC_DIR_GEMINI_FALSE='#' else ARMCI_SRC_DIR_GEMINI_TRUE='#' ARMCI_SRC_DIR_GEMINI_FALSE= fi if test "x$ARMCI_SRC_DIR" = "xcomex"; then ARMCI_SRC_DIR_COMEX_TRUE= ARMCI_SRC_DIR_COMEX_FALSE='#' else ARMCI_SRC_DIR_COMEX_TRUE='#' ARMCI_SRC_DIR_COMEX_FALSE= fi if test "x$ARMCI_SRC_DIR" = "xsrc"; then ARMCI_SRC_DIR_SRC_TRUE= ARMCI_SRC_DIR_SRC_FALSE='#' else ARMCI_SRC_DIR_SRC_TRUE='#' ARMCI_SRC_DIR_SRC_FALSE= fi # tcgmsg5 requires this if test x$ga_armci_network = xLAPI; then : $as_echo "#define NOTIFY_SENDER 1" >>confdefs.h $as_echo "#define LAPI 1" >>confdefs.h fi ga_cray_xt_networks=no if test x$ga_armci_network = xPORTALS; then : ga_cray_xt_networks=yes fi if test x$ga_armci_network = xCRAY_SHMEM; then : ga_cray_xt_networks=yes fi if test x$ga_cray_xt_networks = xyes; then CRAY_XT_NETWORKS_TRUE= CRAY_XT_NETWORKS_FALSE='#' else CRAY_XT_NETWORKS_TRUE='#' CRAY_XT_NETWORKS_FALSE= fi ga_cv_sysv_hack=no # Only perform this hack for ARMCI build. if test "x$ARMCI_TOP_BUILDDIR" != x; then : if test x$ga_cv_sysv = xno; then : case $ga_armci_network in #( BGML|DCMF|PORTALS|GEMINI) : ga_cv_sysv_hack=no ;; #( *) : ga_cv_sysv_hack=yes ;; esac else ga_cv_sysv_hack=yes fi if test x$ga_cv_sysv_hack = xyes; then : $as_echo "#define SYSV 1" >>confdefs.h fi fi if test x$ga_cv_sysv_hack = xyes; then SYSV_TRUE= SYSV_FALSE='#' else SYSV_TRUE='#' SYSV_FALSE= fi # if not using external armci library, the following functions are always available if test "x$ga_armci_network" != xARMCI; then : $as_echo "#define HAVE_ARMCI_GROUP_COMM 1" >>confdefs.h $as_echo "#define HAVE_ARMCI_INITIALIZED 1" >>confdefs.h $as_echo "#define HAVE_ARMCI_NOTIFY 1" >>confdefs.h $as_echo "#define HAVE_ARMCI_MSG_INIT 1" >>confdefs.h $as_echo "#define HAVE_ARMCI_MSG_FINALIZE 1" >>confdefs.h fi if test "x$ac_cv_member_ARMCI_Group_comm" = x1; then HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE= HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE='#' else HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE='#' HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE= fi if test "x$ga_armci_network" != xARMCI; then HAVE_ARMCI_GROUP_COMM_TRUE= HAVE_ARMCI_GROUP_COMM_FALSE='#' else HAVE_ARMCI_GROUP_COMM_TRUE='#' HAVE_ARMCI_GROUP_COMM_FALSE= fi if test "x$ga_armci_network" != xARMCI; then HAVE_ARMCI_INITIALIZED_TRUE= HAVE_ARMCI_INITIALIZED_FALSE='#' else HAVE_ARMCI_INITIALIZED_TRUE='#' HAVE_ARMCI_INITIALIZED_FALSE= fi if test "x$ga_armci_network" != xARMCI; then HAVE_ARMCI_NOTIFY_TRUE= HAVE_ARMCI_NOTIFY_FALSE='#' else HAVE_ARMCI_NOTIFY_TRUE='#' HAVE_ARMCI_NOTIFY_FALSE= fi if test "x$ga_armci_network" != xARMCI; then HAVE_ARMCI_MSG_INIT_TRUE= HAVE_ARMCI_MSG_INIT_FALSE='#' else HAVE_ARMCI_MSG_INIT_TRUE='#' HAVE_ARMCI_MSG_INIT_FALSE= fi if test "x$ga_armci_network" != xARMCI; then HAVE_ARMCI_MSG_FINALIZE_TRUE= HAVE_ARMCI_MSG_FINALIZE_FALSE='#' else HAVE_ARMCI_MSG_FINALIZE_TRUE='#' HAVE_ARMCI_MSG_FINALIZE_FALSE= fi # the armci iterators only available in the conglomerate sources case $ga_armci_network in #( ARMCI|GEMINI|PORTALS) : ;; #( *) : $as_echo "#define HAVE_ARMCI_STRIDE_INFO_INIT 1" >>confdefs.h ;; esac if test "x$ga_armci_network" != xARMCI && test "x$ga_armci_network" != xGEMINI && test "x$ga_armci_network" != xPORTALS; then HAVE_ARMCI_STRIDE_INFO_INIT_TRUE= HAVE_ARMCI_STRIDE_INFO_INIT_FALSE='#' else HAVE_ARMCI_STRIDE_INFO_INIT_TRUE='#' HAVE_ARMCI_STRIDE_INFO_INIT_FALSE= fi # ugly hack for working around NWChem memory requirements # and MPI startup verus the 'classic' ARMCI startup delay_tcgmsg_mpi_startup=1 case $ga_armci_network in #( ARMCI) : delay_tcgmsg_mpi_startup=0 ;; #( BGML) : delay_tcgmsg_mpi_startup=1 ;; #( CRAY_SHMEM) : delay_tcgmsg_mpi_startup=1 ;; #( DCMF) : delay_tcgmsg_mpi_startup=1 ;; #( DMAPP) : delay_tcgmsg_mpi_startup=0 ;; #( LAPI) : delay_tcgmsg_mpi_startup=1 ;; #( MPI_TS) : delay_tcgmsg_mpi_startup=0 ;; #( MPI_SPAWN) : delay_tcgmsg_mpi_startup=1 ;; #( OFA) : delay_tcgmsg_mpi_startup=0 ;; #( OPENIB) : delay_tcgmsg_mpi_startup=1 ;; #( GEMINI) : delay_tcgmsg_mpi_startup=1 ;; #( PORTALS4) : delay_tcgmsg_mpi_startup=0 ;; #( PORTALS) : delay_tcgmsg_mpi_startup=1 ;; #( SOCKETS) : delay_tcgmsg_mpi_startup=1 ;; #( *) : ;; esac cat >>confdefs.h <<_ACEOF #define NEED_DELAY_TCGMSG_MPI_STARTUP $delay_tcgmsg_mpi_startup _ACEOF # Checks for C header files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable assertions" >&5 $as_echo_n "checking whether to enable assertions... " >&6; } # Check whether --enable-assert was given. if test "${enable_assert+set}" = set; then : enableval=$enable_assert; ac_enable_assert=$enableval if test "x$enableval" = xno; then : $as_echo "#define NDEBUG 1" >>confdefs.h elif test "x$enableval" != xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: invalid argument supplied to --enable-assert" >&5 $as_echo "$as_me: WARNING: invalid argument supplied to --enable-assert" >&2;} ac_enable_assert=yes fi else ac_enable_assert=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_enable_assert" >&5 $as_echo "$ac_enable_assert" >&6; } ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval \${$as_ac_Header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if ${ac_cv_header_stdbool_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { _Bool s: 1; _Bool t; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(_Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (_Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ _Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; int main () { bool e = &s; *pq |= q; *pq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdbool_h=yes else ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 $as_echo "$ac_cv_header_stdbool_h" >&6; } ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi if test $ac_cv_header_stdbool_h = yes; then $as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if ${ac_cv_header_sys_wait_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes else ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 $as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi for ac_header in assert.h c_asm.h errno.h fcntl.h float.h ia64/sys/inline.h malloc.h math.h memory.h mpp/shmem.h netdb.h netinet/in.h netinet/tcp.h process.h setjmp.h signal.h stdarg.h stdint.h stdio.h stdlib.h string.h strings.h sys/types.h sys/atomic_op.h sys/errno.h sys/file.h sys/ipc.h sys/mman.h sys/param.h sys/sem.h sys/shm.h sys/socket.h sys/stat.h sys/syscall.h sys/systemcfg.h sys/time.h sys/uio.h sys/wait.h time.h unistd.h windows.h winsock.h rpc/rpc.h rpc/types.h rpc/xdr.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#ifdef HAVE_RPC_TYPES_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_IPC_H #include #endif " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 0 _ACEOF fi done # Checks for C typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 $as_echo_n "checking for C/C++ restrict keyword... " >&6; } if ${ac_cv_c_restrict+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_restrict=no # The order here caters to the fact that C++ does not require restrict. for ac_kw in __restrict __restrict__ _Restrict restrict; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int * int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int main () { int s[1]; int * $ac_kw t = s; t[0] = 0; return foo(t) ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_restrict=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_restrict" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 $as_echo "$ac_cv_c_restrict" >&6; } case $ac_cv_c_restrict in restrict) ;; no) $as_echo "#define restrict /**/" >>confdefs.h ;; *) cat >>confdefs.h <<_ACEOF #define restrict $ac_cv_c_restrict _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5 $as_echo_n "checking for working volatile... " >&6; } if ${ac_cv_c_volatile+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { volatile int x; int * volatile y = (int *) 0; return !x && !y; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_volatile=yes else ac_cv_c_volatile=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 $as_echo "$ac_cv_c_volatile" >&6; } if test $ac_cv_c_volatile = no; then $as_echo "#define volatile /**/" >>confdefs.h fi ac_fn_c_find_intX_t "$LINENO" "16" "ac_cv_c_int16_t" case $ac_cv_c_int16_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int16_t $ac_cv_c_int16_t _ACEOF ;; esac ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" case $ac_cv_c_int32_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int32_t $ac_cv_c_int32_t _ACEOF ;; esac ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" case $ac_cv_c_int64_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int64_t $ac_cv_c_int64_t _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 $as_echo_n "checking return type of signal handlers... " >&6; } if ${ac_cv_type_signal+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_signal=int else ac_cv_type_signal=void fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 $as_echo "$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" if test "x$ac_cv_type_ssize_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define ssize_t int _ACEOF fi ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) $as_echo "#define _UINT8_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint8_t $ac_cv_c_uint8_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" case $ac_cv_c_uint16_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define uint16_t $ac_cv_c_uint16_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) $as_echo "#define _UINT32_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint32_t $ac_cv_c_uint32_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" case $ac_cv_c_uint64_t in #( no|yes) ;; #( *) $as_echo "#define _UINT64_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint64_t $ac_cv_c_uint64_t _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PTRDIFF_T 1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for preprocessor symbol for function name" >&5 $as_echo_n "checking for preprocessor symbol for function name... " >&6; } if ${ga_cv_cpp_function+:} false; then : $as_echo_n "(cached) " >&6 else if test x$ga_cv_cpp_function = x; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern int printf(const char *format, ...); int main () { printf("__func__ = %s\n", __func__); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ga_cv_cpp_function=__func__ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test x$ga_cv_cpp_function = x; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern int printf(const char *format, ...); int main () { printf("__FUNCTION__ = %s\n", __FUNCTION__); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ga_cv_cpp_function=__FUNCTION__ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test x$ga_cv_cpp_function = x; then : ga_cv_cpp_function='"Unknown"' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_cpp_function" >&5 $as_echo "$ga_cv_cpp_function" >&6; } cat >>confdefs.h <<_ACEOF #define FUNCTION_NAME $ga_cv_cpp_function _ACEOF # Check whether --enable-weak was given. if test "${enable_weak+set}" = set; then : enableval=$enable_weak; else enable_weak=yes fi if test "x$ga_cv_target_base" = xCYGWIN; then : enable_weak=no fi if test "x$enable_weak" = xyes; then : ax_sys_weak_alias=no # Test whether compiler accepts #pragma form of weak aliasing { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports #pragma weak" >&5 $as_echo_n "checking whether $CC supports #pragma weak... " >&6; } if ${ax_cv_sys_weak_alias_pragma+:} false; then : $as_echo_n "(cached) " >&6 else # Try linking with a weak alias... cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void weakf(int c); #pragma weak weakf = __weakf void __weakf(int c) {} int main () { weakf(0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_sys_weak_alias_pragma=yes else ax_cv_sys_weak_alias_pragma=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_sys_weak_alias_pragma" >&5 $as_echo "$ax_cv_sys_weak_alias_pragma" >&6; } # What was the result of the test? if test $ax_sys_weak_alias = no && test $ax_cv_sys_weak_alias_pragma = yes; then : ax_sys_weak_alias=pragma $as_echo "#define HAVE_SYS_WEAK_ALIAS_PRAGMA 1" >>confdefs.h fi else ax_cv_sys_weak_alias_pragma=no $as_echo "#define HAVE_SYS_WEAK_ALIAS_PRAGMA 0" >>confdefs.h fi if test "x$ax_cv_sys_weak_alias_pragma" = xyes; then HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE= HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE='#' else HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE='#' HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE= fi # enable shared libs automatically if profiling using weak symbols if test "x$ax_cv_sys_weak_alias_pragma" = xyes; then : if test "x$enable_profiling" = xyes; then : enable_shared=yes fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for union semun in sys/sem.h" >&5 $as_echo_n "checking for union semun in sys/sem.h... " >&6; } if ${ga_cv_union_semun+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { union semun arg; semctl(0, 0, 0, arg); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ga_cv_union_semun=yes else ga_cv_union_semun=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_union_semun" >&5 $as_echo "$ga_cv_union_semun" >&6; } if test x$ga_cv_union_semun = xyes; then : $as_echo "#define HAVE_UNION_SEMUN 1" >>confdefs.h fi # Checks for C type sizes. # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5 $as_echo_n "checking size of void*... " >&6; } if ${ac_cv_sizeof_voidp+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default"; then : else if test "$ac_cv_type_voidp" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void*) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_voidp=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_voidp" >&5 $as_echo "$ac_cv_sizeof_voidp" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_VOIDP $ac_cv_sizeof_voidp _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 $as_echo_n "checking size of char... " >&6; } if ${ac_cv_sizeof_char+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then : else if test "$ac_cv_type_char" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (char) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_char=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 $as_echo "$ac_cv_sizeof_char" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_CHAR $ac_cv_sizeof_char _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 $as_echo_n "checking size of short... " >&6; } if ${ac_cv_sizeof_short+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : else if test "$ac_cv_type_short" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (short) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_short=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 $as_echo "$ac_cv_sizeof_short" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 $as_echo_n "checking size of int... " >&6; } if ${ac_cv_sizeof_int+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : else if test "$ac_cv_type_int" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_int=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 $as_echo "$ac_cv_sizeof_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 $as_echo_n "checking size of long... " >&6; } if ${ac_cv_sizeof_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 $as_echo "$ac_cv_sizeof_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 $as_echo_n "checking size of long long... " >&6; } if ${ac_cv_sizeof_long_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 $as_echo "$ac_cv_sizeof_long_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float" >&5 $as_echo_n "checking size of float... " >&6; } if ${ac_cv_sizeof_float+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float" "$ac_includes_default"; then : else if test "$ac_cv_type_float" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (float) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_float=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5 $as_echo "$ac_cv_sizeof_float" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_FLOAT $ac_cv_sizeof_float _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 $as_echo_n "checking size of double... " >&6; } if ${ac_cv_sizeof_double+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then : else if test "$ac_cv_type_double" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (double) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_double=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 $as_echo "$ac_cv_sizeof_double" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_DOUBLE $ac_cv_sizeof_double _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for smallest C integer matching void*" >&5 $as_echo_n "checking for smallest C integer matching void*... " >&6; } if ${ga_cv_c_pointer_as_integer+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$ac_cv_sizeof_voidp" = "x$ac_cv_sizeof_short"; then : ga_cv_c_pointer_as_integer=short elif test "x$ac_cv_sizeof_voidp" = "x$ac_cv_sizeof_int"; then : ga_cv_c_pointer_as_integer=int elif test "x$ac_cv_sizeof_voidp" = "x$ac_cv_sizeof_long"; then : ga_cv_c_pointer_as_integer=long elif test "x$ac_cv_sizeof_voidp" = "x$ac_cv_sizeof_long_long"; then : ga_cv_c_pointer_as_integer="long long" else as_fn_error $? "Could not determine smallest C integer matching void*" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_pointer_as_integer" >&5 $as_echo "$ga_cv_c_pointer_as_integer" >&6; } C_POINTER_AS_INTEGER=$ga_cv_c_pointer_as_integer # Checks for C library functions. for ac_header in vfork.h do : ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" if test "x$ac_cv_header_vfork_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VFORK_H 1 _ACEOF fi done for ac_func in fork vfork do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_fork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 $as_echo_n "checking for working fork... " >&6; } if ${ac_cv_func_fork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_fork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_fork_works=yes else ac_cv_func_fork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 $as_echo "$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 $as_echo_n "checking for working vfork... " >&6; } if ${ac_cv_func_vfork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_vfork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #ifdef HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (0); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_vfork_works=yes else ac_cv_func_vfork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 $as_echo "$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then $as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h else $as_echo "#define vfork fork" >>confdefs.h fi if test "x$ac_cv_func_fork_works" = xyes; then $as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h fi for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpagesize do : ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" if test "x$ac_cv_func_getpagesize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 $as_echo_n "checking for working mmap... " >&6; } if ${ac_cv_func_mmap_fixed_mapped+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_mmap_fixed_mapped=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include #if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main () { char *data, *data2, *data3; const char *cdata2; int i, pagesize; int fd, fd2; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) return 2; if (write (fd, data, pagesize) != pagesize) return 3; close (fd); /* Next, check that the tail of a page is zero-filled. File must have non-zero length, otherwise we risk SIGBUS for entire page. */ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); if (fd2 < 0) return 4; cdata2 = ""; if (write (fd2, cdata2, 1) != 1) return 5; data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); if (data2 == MAP_FAILED) return 6; for (i = 0; i < pagesize; ++i) if (*(data2 + i)) return 7; close (fd2); if (munmap (data2, pagesize)) return 8; /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) return 9; if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) return 10; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) return 11; /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) return 12; if (read (fd, data3, pagesize) != pagesize) return 13; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) return 14; close (fd); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_mmap_fixed_mapped=yes else ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 $as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then $as_echo "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt for ac_header in sys/select.h sys/socket.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for select" >&5 $as_echo_n "checking types of arguments for select... " >&6; } if ${ac_cv_func_select_args+:} false; then : $as_echo_n "(cached) " >&6 else for ac_arg234 in 'fd_set *' 'int *' 'void *'; do for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #ifdef HAVE_SYS_SELECT_H # include #endif #ifdef HAVE_SYS_SOCKET_H # include #endif int main () { extern int select ($ac_arg1, $ac_arg234, $ac_arg234, $ac_arg234, $ac_arg5); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_select_args="$ac_arg1,$ac_arg234,$ac_arg5"; break 3 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done done done # Provide a safe default value. : "${ac_cv_func_select_args=int,int *,struct timeval *}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_select_args" >&5 $as_echo "$ac_cv_func_select_args" >&6; } ac_save_IFS=$IFS; IFS=',' set dummy `echo "$ac_cv_func_select_args" | sed 's/\*/\*/g'` IFS=$ac_save_IFS shift cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG1 $1 _ACEOF cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG234 ($2) _ACEOF cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG5 ($3) _ACEOF rm -f conftest* for ac_func in vprintf do : ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" if test "x$ac_cv_func_vprintf" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VPRINTF 1 _ACEOF ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" if test "x$ac_cv_func__doprnt" = xyes; then : $as_echo "#define HAVE_DOPRNT 1" >>confdefs.h fi fi done if test "x$ga_msg_comms" = xTCGMSG; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing xdr_array" >&5 $as_echo_n "checking for library containing xdr_array... " >&6; } if ${ac_cv_search_xdr_array+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char xdr_array (); int main () { return xdr_array (); ; return 0; } _ACEOF for ac_lib in '' rpclib; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_xdr_array=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_xdr_array+:} false; then : break fi done if ${ac_cv_search_xdr_array+:} false; then : else ac_cv_search_xdr_array=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_xdr_array" >&5 $as_echo "$ac_cv_search_xdr_array" >&6; } ac_res=$ac_cv_search_xdr_array if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing floor" >&5 $as_echo_n "checking for library containing floor... " >&6; } if ${ac_cv_search_floor+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char floor (); int main () { return floor (); ; return 0; } _ACEOF for ac_lib in '' m; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_floor=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_floor+:} false; then : break fi done if ${ac_cv_search_floor+:} false; then : else ac_cv_search_floor=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_floor" >&5 $as_echo "$ac_cv_search_floor" >&6; } ac_res=$ac_cv_search_floor if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_floor=1 else have_floor=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_FLOOR $have_floor _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pow" >&5 $as_echo_n "checking for library containing pow... " >&6; } if ${ac_cv_search_pow+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pow (); int main () { return pow (); ; return 0; } _ACEOF for ac_lib in '' m; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_pow=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_pow+:} false; then : break fi done if ${ac_cv_search_pow+:} false; then : else ac_cv_search_pow=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pow" >&5 $as_echo "$ac_cv_search_pow" >&6; } ac_res=$ac_cv_search_pow if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_pow=1 else have_pow=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_POW $have_pow _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sqrt" >&5 $as_echo_n "checking for library containing sqrt... " >&6; } if ${ac_cv_search_sqrt+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sqrt (); int main () { return sqrt (); ; return 0; } _ACEOF for ac_lib in '' m; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_sqrt=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_sqrt+:} false; then : break fi done if ${ac_cv_search_sqrt+:} false; then : else ac_cv_search_sqrt=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sqrt" >&5 $as_echo "$ac_cv_search_sqrt" >&6; } ac_res=$ac_cv_search_sqrt if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" have_sqrt=1 else have_sqrt=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_SQRT $have_sqrt _ACEOF for ac_func in bzero fastbcopy ftruncate gethostbyname getpagesize gettimeofday memset munmap select socket strchr strdup strerror strstr strtol _lock_try _acquire_lock xdr_char do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 0 _ACEOF fi done for ac_func in pthread_getconcurrency pthread_setconcurrency do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 0 _ACEOF fi done # Checks for C libraries. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for specific C optimizations" >&5 $as_echo_n "checking for specific C optimizations... " >&6; } if ${armci_cv_c_opt+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$ARMCI_COPT" != x; then : armci_cv_c_opt="$ARMCI_COPT" else armci_cv_c_opt= fi if test "x$armci_cv_c_opt" = x && test "x$enable_opt" = xyes; then : case $ga_cv_target:$ga_cv_c_compiler_vendor:$host_cpu:$ga_armci_network in #( BGL:*:*:*) : armci_cv_c_opt="-O0" ;; #( BGP:ibm:*:*) : armci_cv_c_opt="-O3 -qstrict -qarch=450 -qtune=450" ;; #( BGP:gnu:*:*) : armci_cv_c_opt="-O2" ;; #( CATAMOUNT:*:*:*) : armci_cv_c_opt= ;; #( CRAY_XT:*:*:*) : armci_cv_c_opt= ;; #( CYGWIN:*:*:*) : armci_cv_c_opt="-malign-double" ;; #( FUJITSU_VPP64:*:*:*) : armci_cv_c_opt="-x100" ;; #( FUJITSU_VPP:*:*:*) : armci_cv_c_opt="-x100 -KA32" ;; #( HPUX64:*:*:*) : armci_cv_c_opt="-Ae" ;; #( HPUX64:*:ia64:*) : armci_cv_c_opt="-Ae" ;; #( HPUX:*:*:*) : armci_cv_c_opt="-Ae" ;; #( IBM64:*:*:*) : armci_cv_c_opt="-O3 -qinline=100 -qstrict -qarch=auto -qtune=auto" ;; #( IBM:*:*:*) : armci_cv_c_opt="-O3 -qinline=100 -qstrict -qarch=auto -qtune=auto" ;; #( LAPI64:*:*:*) : armci_cv_c_opt="-O3 -qinline=100 -qstrict -qarch=auto -qtune=auto" ;; #( LAPI:*:*:*) : armci_cv_c_opt="-O3 -qinline=100 -qstrict -qarch=auto -qtune=auto" ;; #( LINUX64:fujitsu:ia64:*) : armci_cv_c_opt="-Kfast" ;; #( LINUX64:fujitsu:x86_64:*) : armci_cv_c_opt="-Kfast" ;; #( LINUX64:gnu:ia64:*) : armci_cv_c_opt="-O0 -g" ;; #( LINUX64:gnu:x86_64:*) : armci_cv_c_opt="-O3 -funroll-loops" ;; #( LINUX64:ibm:powerpc64:*) : armci_cv_c_opt="-O3 -qinline=100 -qstrict -qarch=auto -qtune=auto" ;; #( LINUX64:ibm:ppc64:*) : armci_cv_c_opt="-O3 -qinline=100 -qstrict -qarch=auto -qtune=auto" ;; #( LINUX64:ibm:x86_64:*) : armci_cv_c_opt="" ;; #( LINUX64:intel:ia64:*) : armci_cv_c_opt="-w1" ;; #( LINUX64:unknown:alpha:*) : armci_cv_c_opt="-assume no2underscore -fpe3 -check nooverflow -assume accuracy_sensitive -check nopower -check nounderflow" ;; #( LINUX:fujitsu:*:*) : armci_cv_c_opt="-Kfast" ;; #( LINUX:gnu:686:*) : armci_cv_c_opt="-O2 -finline-functions -funroll-loops -march=pentiumpro -malign-double" ;; #( LINUX:gnu:686:MELLANOX) : armci_cv_c_opt="-O2 -finline-functions -funroll-loops -march=pentiumpro" ;; #( LINUX:gnu:686:OPENIB) : armci_cv_c_opt="-O2 -finline-functions -funroll-loops -march=pentiumpro" ;; #( LINUX:gnu:786:*) : armci_cv_c_opt="-O2 -finline-functions -funroll-loops -march=pentiumpro -malign-double" ;; #( LINUX:gnu:786:MELLANOX) : armci_cv_c_opt="-O2 -finline-functions -funroll-loops -march=pentiumpro" ;; #( LINUX:gnu:786:OPENIB) : armci_cv_c_opt="-O2 -finline-functions -funroll-loops -march=pentiumpro" ;; #( LINUX:gnu:x86:*) : armci_cv_c_opt="-O2 -finline-functions -funroll-loops -malign-double" ;; #( LINUX:gnu:x86:MELLANOX) : armci_cv_c_opt="-O2 -finline-functions -funroll-loops " ;; #( LINUX:gnu:x86:OPENIB) : armci_cv_c_opt="-O2 -finline-functions -funroll-loops " ;; #( LINUX:ibm:*:*) : armci_cv_c_opt="-q32" ;; #( LINUX:intel:*:*) : armci_cv_c_opt="-O3 -prefetch" ;; #( MACX64:*:*:*) : armci_cv_c_opt= ;; #( MACX:*:*:*) : armci_cv_c_opt= ;; #( NEC64:*:*:*) : armci_cv_c_opt="-Cvsafe -size_t64" ;; #( NEC:*:*:*) : armci_cv_c_opt="-Cvsafe" ;; #( SOLARIS64:fujitsu:*:*) : armci_cv_c_opt="-Kfast -KV9FMADD -x0" ;; #( SOLARIS64:gnu:*:*) : armci_cv_c_opt="-dalign" ;; #( SOLARIS64:gnu:i386:*) : armci_cv_c_opt="-dalign -xarch=amd64" ;; #( SOLARIS:fujitsu:*:*) : armci_cv_c_opt="-Kfast -KV8PFMADD -x0" ;; #( SOLARIS:gnu:*:*) : armci_cv_c_opt="-dalign" ;; #( SOLARIS:gnu:i386:*) : armci_cv_c_opt="-dalign -xarch=sse2" ;; #( *) : armci_cv_c_opt= ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $armci_cv_c_opt" >&5 $as_echo "$armci_cv_c_opt" >&6; } ARMCI_COPT=$armci_cv_c_opt CFLAGS="$ga_save_CFLAGS" ######################################### # C++ compiler ######################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} if test "x$enable_cxx" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: C++ compiler" >&5 $as_echo "$as_me: C++ compiler" >&6;} else { $as_echo "$as_me:${as_lineno-$LINENO}: C++ compiler (disabled, but some tests still required)" >&5 $as_echo "$as_me: C++ compiler (disabled, but some tests still required)" >&6;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu # GA_PROG_MPICXX is required to silence complaints that C++ source exists # even if C++ support has been disabled. ga_save_CXXFLAGS="$CXXFLAGS" case $ga_cv_target_base in #( BGP) : ga_mpicxx_pref=mpixlcxx_r; ga_cxx_pref=bgxlC_r ;; #( *) : ;; esac # In the case of using MPI wrappers, set CXX=MPICXX since CXX will override # absolutely everything in our list of compilers. if test x$with_mpi_wrappers = xyes; then : if test "x$CXX" != "x$MPICXX"; then : ga_orig_CXX="$CXX" fi case x$CXX:x$MPICXX in #( x:x) : ;; #( x:x*) : CXX="$MPICXX" ;; #( x*:x) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired but CXX is set while MPICXX is unset." >&5 $as_echo "$as_me: WARNING: MPI compilers desired but CXX is set while MPICXX is unset." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CXX will be ignored during compiler selection, but will be" >&5 $as_echo "$as_me: WARNING: CXX will be ignored during compiler selection, but will be" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&5 $as_echo "$as_me: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: meant to set MPICXX instead of or in addition to CXX?" >&5 $as_echo "$as_me: WARNING: meant to set MPICXX instead of or in addition to CXX?" >&2;} CXX= ;; #( x*:x*) : if test "x$CXX" != "x$MPICXX"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired, MPICXX and CXX are set, and MPICXX!=CXX." >&5 $as_echo "$as_me: WARNING: MPI compilers desired, MPICXX and CXX are set, and MPICXX!=CXX." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Choosing MPICXX over CXX." >&5 $as_echo "$as_me: WARNING: Choosing MPICXX over CXX." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CXX will be tested first during MPI compiler unwrapping." >&5 $as_echo "$as_me: WARNING: CXX will be tested first during MPI compiler unwrapping." >&2;} fi CXX="$MPICXX" ;; #( *) : as_fn_error $? "CXX/MPICXX case failure" "$LINENO" 5 ;; esac fi ga_cxx="icpc pgCC pathCC sxc++ xlC_r xlC bgxlC_r bgxlC openCC sunCC crayc++ g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC" ga_mpicxx="mpic++ mpicxx mpiCC sxmpic++ hcp mpxlC_r mpxlC mpixlcxx_r mpixlcxx mpg++ mpc++ mpCC cmpic++ mpiFCC CC" if test x$with_mpi_wrappers = xyes; then : CXX_TO_TEST="$ga_mpicxx_pref $ga_mpicxx" else CXX_TO_TEST="$ga_cxx_pref $ga_cxx" fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in $CXX_TO_TEST do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CXX_TO_TEST do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi CXXFLAGS="$ga_save_CXXFLAGS" if test x$with_mpi_wrappers = xyes; then : # Find perl. # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Create inside.pl. rm -f inside.pl cat >inside.pl <<"EOF" #!/usr/bin/perl use strict; use warnings; my $numargs = $#ARGV + 1; if ($numargs != 2) { print "Usage: wrapped.txt naked.txt\n"; exit 1; } # Read each input file as a string (rather than a list). local $/=undef; open WRAPPED, "$ARGV[0]" or die "Could not open wrapped text file: $!"; my $wrapped_lines = ; close WRAPPED; open NAKED, "$ARGV[1]" or die "Could not open naked text file: $!"; my $naked_lines = ; close NAKED; # Replace newlines, + from wrapped and naked lines. $wrapped_lines =~ tr/\n+/ /; $naked_lines =~ tr/\n+/ /; # Remove whitespace from beginning of wrapped and naked lines. $wrapped_lines =~ s/^\s+//; $naked_lines =~ s/^\s+//; # Remove whitespace from end of wrapped and naked lines. $wrapped_lines =~ s/\s+$//; $naked_lines =~ s/\s+$//; # If either wrapped_lines or naked_lines are empty, this is an error. # It is assumed that the particular version string which created the input # files should generate SOMETHING. unless ($wrapped_lines) { exit 1; } unless ($naked_lines) { exit 1; } # Cray compilers append a timestamp into their version string. Remove it. if ($wrapped_lines =~ /\QCray\E/) { $wrapped_lines = substr $wrapped_lines, 0, -28; $naked_lines = substr $naked_lines, 0, -28; } # Can the naked lines be found within the wrapped lines? if ($wrapped_lines =~ /\Q$naked_lines\E/) { #print "Found as substring\n"; exit 0; } # Are the naked lines exactly the same as the wrapped lines? elsif ($wrapped_lines eq $naked_lines) { #print "Found equal\n"; exit 0; } else { #print "Not found\n"; exit 1; } EOF inside="$PERL inside.pl" wrapped="$CXX" case $wrapped in #( *_r) : compilers="bgxlC_r xlC_r" ;; #( *) : compilers="icpc pgCC pathCC sxc++ xlC bgxlC openCC sunCC crayc++ g++ c++ gpp aCC cxx cc++ cl.exe FCC KCC RCC CC" ;; #( *) : ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for base $wrapped compiler" >&5 $as_echo_n "checking for base $wrapped compiler... " >&6; } if ${ga_cv_mpicxx_naked+:} false; then : $as_echo_n "(cached) " >&6 else base="`$wrapped -show 2>/dev/null | sed 's/[ ].*$//' | head -1`" ga_save_CXX="$CXX" CXX="$base" # if -m32 or -m64 is present in the -show params, or separately, add it unwrapped_args="`$wrapped -show 2>/dev/null`" extra_arg="" for arg in $unwrapped_args $wrapped do case $arg in #( *-m32*) : extra_arg="-m32" ;; #( *-m64*) : extra_arg="-m64" ;; #( *) : ;; esac done if test "x$extra_arg" != x; then : base="$base $extra_arg" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ga_cv_mpicxx_naked="$base" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CXX="$ga_save_CXX" versions="--version -v -V -qversion" found_wrapped_version=0 # Try separating stdout and stderr. Only compare stdout. if test "x$ga_cv_mpicxx_naked" = x; then : # prepend any CC/CXX/F77 the user may have specified compilers="$ga_orig_CXX $compilers" echo "only comparing stdout" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err naked.txt naked.err if $wrapped $version 1>mpi.txt 2>mpi.err; then : found_wrapped_version=1 for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpicxx_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpicxx_naked" != x; then : break fi done fi # Perhaps none of the MPI compilers had a zero exit status (this is bad). # In this case we have to do a brute force match regardless of exit status. if test "x$found_wrapped_version" = x0; then : if test "x$ga_cv_mpicxx_naked" = x; then : echo "no zero exit status found for MPI compilers" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpicxx_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpicxx_naked" != x; then : break fi done fi fi # Try by combining stdout/err into one file. if test "x$ga_cv_mpicxx_naked" = x; then : echo "try combining stdout and stderr into one file" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt naked.txt if $wrapped $version 1>mpi.txt 2>&1; then : for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>&1; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpicxx_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpicxx_naked" != x; then : break fi done fi # If we got this far, then it's likely that the MPI compiler had a zero exit # status when it shouldn't have for one version flag, but later had a non-zero # exit status for a flag it shouldn't have. One false positive hid a false # negative. In this case, brute force compare all MPI compiler output against # all compiler output. if test "x$ga_cv_mpicxx_naked" = x; then : echo "we have a very badly behaving MPI compiler" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpicxx_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpicxx_naked" != x; then : break fi done fi rm -f mpi.txt mpi.err naked.txt naked.err fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_mpicxx_naked" >&5 $as_echo "$ga_cv_mpicxx_naked" >&6; } if test "x$ga_cv_mpicxx_naked" = x; then : as_fn_error $? "Could not determine the C++ compiler wrapped by MPI" "$LINENO" 5 else if test "x$ga_orig_CXX" != x && test "x$ga_orig_CXX" != "x$ga_cv_mpicxx_naked"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unwrapped $wrapped ($ga_cv_mpicxx_naked) does not match user-specified $ga_orig_CXX" >&5 $as_echo "$as_me: WARNING: unwrapped $wrapped ($ga_cv_mpicxx_naked) does not match user-specified $ga_orig_CXX" >&2;} fi fi rm -f inside.pl fi if test "x$enable_cxx" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler vendor" >&5 $as_echo_n "checking for C++ compiler vendor... " >&6; } if ${ga_cv_cxx_compiler_vendor+:} false; then : $as_echo_n "(cached) " >&6 else ga_save_ac_ext="$ac_ext" ga_cv_cxx_compiler_vendor=unknown ga_cpp_vendor_symbols= for vendor in intel ibm pathscale amd cray gnu sun hp dec borland comeau kai lcc metrowerks sgi microsoft watcom portland fujitsu do case $vendor in #( amd) : ga_cpp_vendor_symbols="defined(__OPEN64__)" ;; #( borland) : ga_cpp_vendor_symbols="defined(__BORLANDC__) || defined(__TURBOC__)" ;; #( comeau) : ga_cpp_vendor_symbols="defined(__COMO__)" ;; #( cray) : ga_cpp_vendor_symbols="defined(_CRAYC) || defined(_ADDR64)" ;; #( dec) : ga_cpp_vendor_symbols="defined(__DECC) || defined(__DECCXX) || defined(__DECC_VER) || defined(__DECCXX_VER)" ;; #( fujitsu) : ga_cpp_vendor_symbols="defined(__fcc__) || defined(__fcc_version__) || defined(_FCC_VER) || defined(__FCC_VER_)" ;; #( gnu) : ga_cpp_vendor_symbols="defined(__GNUC__)" ;; #( hp) : ga_cpp_vendor_symbols="defined(__HP_cc) || defined(__HP_aCC)" ;; #( ibm) : ga_cpp_vendor_symbols="defined(__xlc__) || defined(__xlC__) || defined(__IBMC__) || defined(__IBMCPP__)" ;; #( intel) : ga_cpp_vendor_symbols="defined(__ICC) || defined(__ECC) || defined(__INTEL_COMPILER)" ;; #( kai) : ga_cpp_vendor_symbols="defined(__KCC)" ;; #( lcc) : ga_cpp_vendor_symbols="defined(__LCC__)" ;; #( metrowerks) : ga_cpp_vendor_symbols="defined(__MWERKS__)" ;; #( microsoft) : ga_cpp_vendor_symbols="defined(_MSC_VER)" ;; #( pathscale) : ga_cpp_vendor_symbols="defined(__PATHCC__) || defined(__PATHSCALE__)" ;; #( portland) : ga_cpp_vendor_symbols="defined(__PGI)" ;; #( sgi) : ga_cpp_vendor_symbols="defined(__sgi) || defined(sgi)" ;; #( sun) : ga_cpp_vendor_symbols="defined(__SUNPRO_C) || defined(__SUNPRO_CC)" ;; #( watcom) : ga_cpp_vendor_symbols="defined(__WATCOMC__)" ;; #( *) : ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if !($ga_cpp_vendor_symbols) chokeonthis #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ga_cv_cxx_compiler_vendor=$vendor; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done ga_cpp_vendor_symbols= ac_ext="$ga_save_ac_ext" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_cxx_compiler_vendor" >&5 $as_echo "$ga_cv_cxx_compiler_vendor" >&6; } if test "x$enable_warnings" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ warning flags" >&5 $as_echo_n "checking for C++ warning flags... " >&6; } if ${ga_cv_cxx_warning_flags+:} false; then : $as_echo_n "(cached) " >&6 else ga_cv_cxx_warning_flags= fi { $as_echo "$as_me:${as_lineno-$LINENO}: ga_cv_cxx_warning_flags: $ga_cv_cxx_warning_flags" >&5 $as_echo "$ga_cv_cxx_warning_flags" >&6; } GA_CXX_WARN=$ga_cv_cxx_warning_flags fi ga_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$ga_cv_cxx_warning_flags $CXXFLAGS" if test "x$with_mpi" != xno; then : if test "x$with_mpi" != xno; then : ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a simple C++ MPI program works" >&5 $as_echo_n "checking whether a simple C++ MPI program works... " >&6; } if ${ga_cv_cxx_mpi_test+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ga_cv_cxx_mpi_test=yes else ga_cv_cxx_mpi_test=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext # That didn't work, so now let's try with our GA_MP_* flags. if test "x$ga_cv_cxx_mpi_test" = xno; then : ga_save_LIBS="$LIBS"; LIBS="$LIBS $GA_MP_LIBS" ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ga_cv_cxx_mpi_test=yes else ga_cv_cxx_mpi_test=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ga_save_LIBS" CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" fi # That didn't work, so now let's try with our GA_MP_* flags and various libs. if test "x$ga_cv_cxx_mpi_test" = xno; then : for lib in -lmpi -lmpich; do ga_save_LIBS="$LIBS"; LIBS="$LIBS $GA_MP_LIBS $lib" ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ga_cv_cxx_mpi_test=$lib; break else ga_cv_cxx_mpi_test=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ga_save_LIBS" CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" done LIBS="$ga_save_LIBS" CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_cxx_mpi_test" >&5 $as_echo "$ga_cv_cxx_mpi_test" >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu case $ga_cv_cxx_mpi_test in #( yes) : ;; #( no) : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "could not link simple C++ MPI program See \`config.log' for more details" "$LINENO" 5; } ;; #( *) : GA_MP_LIBS="$ga_cv_cxx_mpi_test" ;; #( *) : ;; esac fi fi # Checks for C++ header files. # Checks for C++ typedefs, structures, and compiler characteristics. # Checks for C++ type sizes. # Checks for C++ library functions. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for specific C++ optimizations" >&5 $as_echo_n "checking for specific C++ optimizations... " >&6; } if ${armci_cv_cxx_opt+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$ARMCI_CXXOPT" != x; then : armci_cv_cxx_opt="$ARMCI_CXXOPT" else armci_cv_cxx_opt= fi if test "x$armci_cv_cxx_opt" = x && test "x$enable_opt" = xyes; then : case $ga_cv_target:$ga_cv_cxx_compiler_vendor:$host_cpu:$ga_armci_network in #( LINUX:*:*:*) : armci_cv_cxx_opt="-O0" ;; #( NEC64:*:*:*) : armci_cv_cxx_opt="-Cvsafe -size_t64" ;; #( NEC:*:*:*) : armci_cv_cxx_opt="-Cvsafe" ;; #( *) : armci_cv_cxx_opt= ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $armci_cv_cxx_opt" >&5 $as_echo "$armci_cv_cxx_opt" >&6; } ARMCI_CXXOPT=$armci_cv_cxx_opt CXXFLAGS="$ga_save_CXXFLAGS" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ######################################### # Assembler ######################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Assembler" >&5 $as_echo "$as_me: Assembler" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} if test "x$CCAS" = x; then : case $ga_cv_target in #( NEC|NEC64) : CCAS=sxas ;; #( *) : ;; esac fi if test "x$CCASFLAGS" = x; then : case $ga_cv_target in #( NEC) : CCASFLAGS= ;; #( NEC64) : CCASFLAGS="-h size_t64" ;; #( *) : ;; esac fi # By default we simply use the C compiler to build assembly code. test "${CCAS+set}" = set || CCAS=$CC test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS depcc="$CCAS" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CCAS_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CCAS_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CCAS_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CCAS_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 $as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then am__fastdepCCAS_TRUE= am__fastdepCCAS_FALSE='#' else am__fastdepCCAS_TRUE='#' am__fastdepCCAS_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NO_I386ASM is needed" >&5 $as_echo_n "checking whether NO_I386ASM is needed... " >&6; } if ${armci_cv_as_no_i386asm+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$ax_cv_c_compiler_vendor" = xfujitsu; then : armci_cv_as_no_i386asm=yes else armci_cv_as_no_i386asm=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $armci_cv_as_no_i386asm" >&5 $as_echo "$armci_cv_as_no_i386asm" >&6; } if test "x$armci_cv_as_no_i386asm" = xyes; then : $as_echo "#define NO_I386ASM 1" >>confdefs.h fi ############################################################################### # BLAS/LAPACK are used in one test program. We don't locate these libraries due # to many of them requiring Fortran. An enthusiastic user of the lone test # program can still build it if they are highly motivated -- but the build will # not be automated. ############################################################################### if test 0 = 1; then HAVE_BLAS_TRUE= HAVE_BLAS_FALSE='#' else HAVE_BLAS_TRUE='#' HAVE_BLAS_FALSE= fi if test 0 = 1; then HAVE_LAPACK_TRUE= HAVE_LAPACK_FALSE='#' else HAVE_LAPACK_TRUE='#' HAVE_LAPACK_FALSE= fi ############################################################################### # Checks for programs. ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Checks for additional programs" >&5 $as_echo "$as_me: Checks for additional programs" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed ############################################################################### # Libtool setup -- no compiler/linker tests after this ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Libtool setup" >&5 $as_echo "$as_me: Libtool setup" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} # temporarily restore unwrapped compilers # this works around a bug where libtool sadly relies on matching compiler # names in order to determine features (Fortran only, I think) # libtool doesn't recognize MPI compiler names, nor should it if test x$with_mpi_wrappers = xyes; then : ga_mpi_unwrap_push_save_CC="$CC" ga_mpi_unwrap_push_save_CXX="$CXX" ga_mpi_unwrap_push_save_F77="$F77" ga_mpi_unwrap_push_save_FC="$FC" if test "x$ga_cv_mpic_naked" != x; then : CC="$ga_cv_mpic_naked" fi if test "x$ga_cv_mpicxx_naked" != x; then : CXX="$ga_cv_mpicxx_naked" fi if test "x$ga_cv_mpif77_naked" != x; then : F77="$ga_cv_mpif77_naked" fi if test "x$ga_cv_mpifc_naked" != x; then : FC="$ga_cv_mpifc_naked" fi fi if test "x$AR" = x; then : case $ga_cv_target in #( NEC|NEC64) : AR=sxar ;; #( *) : ;; esac fi if test "x$RANLIB" = x; then : case $ga_cv_target in #( NEC|NEC64) : RANLIB=true ;; #( *) : ;; esac fi case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf # Set options # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=no fi enable_dlopen=no enable_win32_dll=no # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: # and now that that's over, put the MPI compilers back # also, the above hack incorrectly sets the base compiler as the linker if test x$with_mpi_wrappers = xyes; then : CC="$ga_mpi_unwrap_push_save_CC" CXX="$ga_mpi_unwrap_push_save_CXX" F77="$ga_mpi_unwrap_push_save_F77" FC="$ga_mpi_unwrap_push_save_FC" compiler="$CC" LTCC="$CC" lt_save_CC="$CC" compiler_DEFAULT="$CC" compiler_CXX="$CXX" compiler_F77="$F77" fi ############################################################################### # Remaining setup -- some tests, some individual components ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Miscellaneous remaining setup" >&5 $as_echo "$as_me: Miscellaneous remaining setup" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} # Establish some preprocessor symbols. case $ga_armci_network in #( BGML) : $as_echo "#define NO_SHM 1" >>confdefs.h $as_echo "#define USE_MALLOC 1" >>confdefs.h $as_echo "#define BGML 1" >>confdefs.h ;; #( CRAY_SHMEM) : $as_echo "#define CLUSTER 1" >>confdefs.h $as_echo "#define CRAY_XT 1" >>confdefs.h $as_echo "#define CRAY_SHMEM 1" >>confdefs.h ;; #( DCMF) : $as_echo "#define NO_SHM 1" >>confdefs.h $as_echo "#define ARMCIX 1" >>confdefs.h $as_echo "#define DCMF 1" >>confdefs.h ;; #( ELAN3) : $as_echo "#define PTHREADS 1" >>confdefs.h $as_echo "#define SERVER_THREAD 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define ACC_SMP 1" >>confdefs.h $as_echo "#define QUADRICS 1" >>confdefs.h if test x$LIBELAN_NATTACH != x; then : $as_echo "#define MULTI_CTX 1" >>confdefs.h else $as_echo "#define ALLOC_MUNMAP 1" >>confdefs.h fi ;; #( ELAN4) : $as_echo "#define PTHREADS 1" >>confdefs.h $as_echo "#define SERVER_THREAD 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define ACC_SMP 1" >>confdefs.h $as_echo "#define QUADRICS 1" >>confdefs.h $as_echo "#define DOELAN4 1" >>confdefs.h ;; #( GEMINI) : $as_echo "#define LIBONESIDED 1" >>confdefs.h $as_echo "#define CRAY_UGNI 1" >>confdefs.h $as_echo "#define GEMINI 1" >>confdefs.h ;; #( GM) : $as_echo "#define PTHREADS 1" >>confdefs.h $as_echo "#define DATA_SERVER 1" >>confdefs.h $as_echo "#define ALLOW_PIN 1" >>confdefs.h $as_echo "#define SERVER_THREAD 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define GM 1" >>confdefs.h ;; #( LAPI) : $as_echo "#define LAPI 1" >>confdefs.h if test x$LAPI_RDMA != x; then : $as_echo "#define ALLOW_PIN 1" >>confdefs.h $as_echo "#define LAPI_RDMA 1" >>confdefs.h fi ;; #( MELLANOX) : $as_echo "#define PTHREADS 1" >>confdefs.h $as_echo "#define DATA_SERVER 1" >>confdefs.h $as_echo "#define SERVER_THREAD 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define VAPI 1" >>confdefs.h $as_echo "#define ALLOW_PIN 1" >>confdefs.h $as_echo "#define MELLANOX 1" >>confdefs.h ;; #( MPI_MT) : $as_echo "#define PTHREADS 1" >>confdefs.h $as_echo "#define DATA_SERVER 1" >>confdefs.h $as_echo "#define SERVER_THREAD 1" >>confdefs.h $as_echo "#define MPI_MT 1" >>confdefs.h ;; #( MPI_SPAWN) : $as_echo "#define DATA_SERVER 1" >>confdefs.h $as_echo "#define MPI_SPAWN 1" >>confdefs.h if test x$ARMCI_SPAWN_CRAY_XT != x; then : $as_echo "#define SPAWN_CRAY_XT 1" >>confdefs.h fi ;; #( OPENIB) : $as_echo "#define PTHREADS 1" >>confdefs.h $as_echo "#define DATA_SERVER 1" >>confdefs.h $as_echo "#define SERVER_THREAD 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define VAPI 1" >>confdefs.h $as_echo "#define ALLOW_PIN 1" >>confdefs.h $as_echo "#define PEND_BUFS 1" >>confdefs.h $as_echo "#define OPENIB 1" >>confdefs.h ;; #( PORTALS) : $as_echo "#define DATA_SERVER 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define SERVER_THREAD 1" >>confdefs.h $as_echo "#define CRAY_XT 1" >>confdefs.h $as_echo "#define PORTALS 1" >>confdefs.h ;; #( SOCKETS) : $as_echo "#define DATA_SERVER 1" >>confdefs.h $as_echo "#define SOCKETS 1" >>confdefs.h ;; #( VIA) : $as_echo "#define PTHREADS 1" >>confdefs.h $as_echo "#define DATA_SERVER 1" >>confdefs.h $as_echo "#define SERVER_THREAD 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define VIA 1" >>confdefs.h ;; #( *) : ;; esac if test x$REPORT_SHMMAX != x; then : $as_echo "#define REPORT_SHMMAX 1" >>confdefs.h fi if test x$thread_safety = xyes; then : $as_echo "#define POSIX_THREADS 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h fi # Set up TCGMSG. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remote shell" >&5 $as_echo "$as_me: checking for remote shell" >&6;} for ac_prog in rsh remsh ssh do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ga_cv_path_rsh+:} false; then : $as_echo_n "(cached) " >&6 else case $ga_cv_path_rsh in [\\/]* | ?:[\\/]*) ac_cv_path_ga_cv_path_rsh="$ga_cv_path_rsh" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ga_cv_path_rsh="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ga_cv_path_rsh=$ac_cv_path_ga_cv_path_rsh if test -n "$ga_cv_path_rsh"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_path_rsh" >&5 $as_echo "$ga_cv_path_rsh" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ga_cv_path_rsh" && break done test -n "$ga_cv_path_rsh" || ga_cv_path_rsh="not found" if test "x$ga_cv_path_rsh" = "xnot found"; then : as_fn_error $? "Could not find remote shell for use by TCGMSG" "$LINENO" 5 fi cat >>confdefs.h <<_ACEOF #define TCGMSG_RSH "$ga_cv_path_rsh" _ACEOF $as_echo "#define TCGMSG_TIMINGS 1" >>confdefs.h # TODO not sure, but thus far required for 'dist' target at least if test x != x; then RANDOM_ACCESS_TRUE= RANDOM_ACCESS_FALSE='#' else RANDOM_ACCESS_TRUE='#' RANDOM_ACCESS_FALSE= fi # always false # Whether to use PIC for the inline GCC code. if test x$enable_shared = xyes; then ENABLE_SHARED_TRUE= ENABLE_SHARED_FALSE='#' else ENABLE_SHARED_TRUE='#' ENABLE_SHARED_FALSE= fi if test "x$ga_cv_target" = xLINUX64; then : case $host_cpu in #( x86_64|ppc64|ia64) : $as_echo "#define NEED_MEM_SYNC 1" >>confdefs.h ;; #( *) : ;; esac fi if test "x$host_cpu" = xPWR4; then : $as_echo "#define NEED_MEM_SYNC 1" >>confdefs.h fi ############################################################################### # Test suite setup ############################################################################### if test "x$NPROCS" = x; then : NPROCS=4 fi case $ga_msg_comms in #( TCGMSG) : TCGEXEC="`pwd`/parallel.x" ;; #( TCGMSG5) : TCGEXEC= ;; #( MPI) : if test "x$MPIEXEC" = x; then : for ac_prog in mpirun mpiexec do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MPIEXEC+:} false; then : $as_echo_n "(cached) " >&6 else case $MPIEXEC in [\\/]* | ?:[\\/]*) ac_cv_path_MPIEXEC="$MPIEXEC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MPIEXEC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MPIEXEC=$ac_cv_path_MPIEXEC if test -n "$MPIEXEC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPIEXEC" >&5 $as_echo "$MPIEXEC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$MPIEXEC" && break done MPIEXEC="$MPIEXEC -n %NP%" fi ;; #( *) : ;; esac ############################################################################### # The End ############################################################################### ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${BGL_TRUE}" && test -z "${BGL_FALSE}"; then as_fn_error $? "conditional \"BGL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BGP_TRUE}" && test -z "${BGP_FALSE}"; then as_fn_error $? "conditional \"BGP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CATAMOUNT_TRUE}" && test -z "${CATAMOUNT_FALSE}"; then as_fn_error $? "conditional \"CATAMOUNT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_SV1_TRUE}" && test -z "${CRAY_SV1_FALSE}"; then as_fn_error $? "conditional \"CRAY_SV1\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_SV2_TRUE}" && test -z "${CRAY_SV2_FALSE}"; then as_fn_error $? "conditional \"CRAY_SV2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_T3E_TRUE}" && test -z "${CRAY_T3E_FALSE}"; then as_fn_error $? "conditional \"CRAY_T3E\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_XT_TRUE}" && test -z "${CRAY_XT_FALSE}"; then as_fn_error $? "conditional \"CRAY_XT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_YMP_TRUE}" && test -z "${CRAY_YMP_FALSE}"; then as_fn_error $? "conditional \"CRAY_YMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CYGNUS_TRUE}" && test -z "${CYGNUS_FALSE}"; then as_fn_error $? "conditional \"CYGNUS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CYGWIN_TRUE}" && test -z "${CYGWIN_FALSE}"; then as_fn_error $? "conditional \"CYGWIN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DECOSF_TRUE}" && test -z "${DECOSF_FALSE}"; then as_fn_error $? "conditional \"DECOSF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FUJITSU_VPP_TRUE}" && test -z "${FUJITSU_VPP_FALSE}"; then as_fn_error $? "conditional \"FUJITSU_VPP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HITACHI_TRUE}" && test -z "${HITACHI_FALSE}"; then as_fn_error $? "conditional \"HITACHI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HPUX_TRUE}" && test -z "${HPUX_FALSE}"; then as_fn_error $? "conditional \"HPUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${IBM_TRUE}" && test -z "${IBM_FALSE}"; then as_fn_error $? "conditional \"IBM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${INTERIX_TRUE}" && test -z "${INTERIX_FALSE}"; then as_fn_error $? "conditional \"INTERIX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LAPI_TRUE}" && test -z "${LAPI_FALSE}"; then as_fn_error $? "conditional \"LAPI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LINUX_TRUE}" && test -z "${LINUX_FALSE}"; then as_fn_error $? "conditional \"LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MACX_TRUE}" && test -z "${MACX_FALSE}"; then as_fn_error $? "conditional \"MACX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NEC_TRUE}" && test -z "${NEC_FALSE}"; then as_fn_error $? "conditional \"NEC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SGI_TRUE}" && test -z "${SGI_FALSE}"; then as_fn_error $? "conditional \"SGI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SGI_N32_TRUE}" && test -z "${SGI_N32_FALSE}"; then as_fn_error $? "conditional \"SGI_N32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SGITFP_TRUE}" && test -z "${SGITFP_FALSE}"; then as_fn_error $? "conditional \"SGITFP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SOLARIS_TRUE}" && test -z "${SOLARIS_FALSE}"; then as_fn_error $? "conditional \"SOLARIS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CROSS_COMPILING_TRUE}" && test -z "${CROSS_COMPILING_FALSE}"; then as_fn_error $? "conditional \"CROSS_COMPILING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MSG_COMMS_MPI_TRUE}" && test -z "${MSG_COMMS_MPI_FALSE}"; then as_fn_error $? "conditional \"MSG_COMMS_MPI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MSG_COMMS_TCGMSG4_TRUE}" && test -z "${MSG_COMMS_TCGMSG4_FALSE}"; then as_fn_error $? "conditional \"MSG_COMMS_TCGMSG4\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MSG_COMMS_TCGMSG5_TRUE}" && test -z "${MSG_COMMS_TCGMSG5_FALSE}"; then as_fn_error $? "conditional \"MSG_COMMS_TCGMSG5\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PORTALS_ENABLE_NEW_MALLOC_TRUE}" && test -z "${PORTALS_ENABLE_NEW_MALLOC_FALSE}"; then as_fn_error $? "conditional \"PORTALS_ENABLE_NEW_MALLOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_ENABLE_GPC_CALLS_TRUE}" && test -z "${ARMCI_ENABLE_GPC_CALLS_FALSE}"; then as_fn_error $? "conditional \"ARMCI_ENABLE_GPC_CALLS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_GROUP_TRUE}" && test -z "${ARMCI_GROUP_FALSE}"; then as_fn_error $? "conditional \"ARMCI_GROUP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NB_NONCONT_TRUE}" && test -z "${NB_NONCONT_FALSE}"; then as_fn_error $? "conditional \"NB_NONCONT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PROFILING_TRUE}" && test -z "${ENABLE_PROFILING_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PROFILING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_CHECKPOINT_TRUE}" && test -z "${ENABLE_CHECKPOINT_FALSE}"; then as_fn_error $? "conditional \"ENABLE_CHECKPOINT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_TRACE_TRUE}" && test -z "${ENABLE_TRACE_FALSE}"; then as_fn_error $? "conditional \"ENABLE_TRACE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${THREAD_SAFE_TRUE}" && test -z "${THREAD_SAFE_FALSE}"; then as_fn_error $? "conditional \"THREAD_SAFE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_GROUP_COMM_TRUE}" && test -z "${HAVE_ARMCI_GROUP_COMM_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_GROUP_COMM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE}" && test -z "${HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_GROUP_COMM_MEMBER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_INITIALIZED_TRUE}" && test -z "${HAVE_ARMCI_INITIALIZED_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_INITIALIZED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_STRIDE_INFO_INIT_TRUE}" && test -z "${HAVE_ARMCI_STRIDE_INFO_INIT_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_STRIDE_INFO_INIT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_NOTIFY_TRUE}" && test -z "${HAVE_ARMCI_NOTIFY_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_NOTIFY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_MSG_INIT_TRUE}" && test -z "${HAVE_ARMCI_MSG_INIT_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_MSG_INIT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_MSG_FINALIZE_TRUE}" && test -z "${HAVE_ARMCI_MSG_FINALIZE_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_MSG_FINALIZE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_GROUP_COMM_TRUE}" && test -z "${HAVE_ARMCI_GROUP_COMM_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_GROUP_COMM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE}" && test -z "${HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_GROUP_COMM_MEMBER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_INITIALIZED_TRUE}" && test -z "${HAVE_ARMCI_INITIALIZED_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_INITIALIZED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_STRIDE_INFO_INIT_TRUE}" && test -z "${HAVE_ARMCI_STRIDE_INFO_INIT_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_STRIDE_INFO_INIT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_NOTIFY_TRUE}" && test -z "${HAVE_ARMCI_NOTIFY_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_NOTIFY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_MSG_INIT_TRUE}" && test -z "${HAVE_ARMCI_MSG_INIT_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_MSG_INIT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_MSG_FINALIZE_TRUE}" && test -z "${HAVE_ARMCI_MSG_FINALIZE_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_MSG_FINALIZE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_ARMCI_TRUE}" && test -z "${ARMCI_NETWORK_ARMCI_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_ARMCI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_BGML_TRUE}" && test -z "${ARMCI_NETWORK_BGML_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_BGML\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_CRAY_SHMEM_TRUE}" && test -z "${ARMCI_NETWORK_CRAY_SHMEM_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_CRAY_SHMEM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_DCMF_TRUE}" && test -z "${ARMCI_NETWORK_DCMF_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_DCMF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_DMAPP_TRUE}" && test -z "${ARMCI_NETWORK_DMAPP_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_DMAPP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_LAPI_TRUE}" && test -z "${ARMCI_NETWORK_LAPI_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_LAPI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_MPI_TS_TRUE}" && test -z "${ARMCI_NETWORK_MPI_TS_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_MPI_TS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_MPI_MT_TRUE}" && test -z "${ARMCI_NETWORK_MPI_MT_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_MPI_MT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_MPI_SPAWN_TRUE}" && test -z "${ARMCI_NETWORK_MPI_SPAWN_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_MPI_SPAWN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_OFA_TRUE}" && test -z "${ARMCI_NETWORK_OFA_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_OFA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_OPENIB_TRUE}" && test -z "${ARMCI_NETWORK_OPENIB_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_OPENIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_GEMINI_TRUE}" && test -z "${ARMCI_NETWORK_GEMINI_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_GEMINI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_PORTALS4_TRUE}" && test -z "${ARMCI_NETWORK_PORTALS4_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_PORTALS4\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_PORTALS_TRUE}" && test -z "${ARMCI_NETWORK_PORTALS_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_PORTALS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_NETWORK_SOCKETS_TRUE}" && test -z "${ARMCI_NETWORK_SOCKETS_FALSE}"; then as_fn_error $? "conditional \"ARMCI_NETWORK_SOCKETS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DCMF_VER_2_TRUE}" && test -z "${DCMF_VER_2_FALSE}"; then as_fn_error $? "conditional \"DCMF_VER_2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DCMF_VER_0_2_TRUE}" && test -z "${DCMF_VER_0_2_FALSE}"; then as_fn_error $? "conditional \"DCMF_VER_0_2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DCMF_VER_0_3_TRUE}" && test -z "${DCMF_VER_0_3_FALSE}"; then as_fn_error $? "conditional \"DCMF_VER_0_3\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_SRC_DIR_PORTALS_TRUE}" && test -z "${ARMCI_SRC_DIR_PORTALS_FALSE}"; then as_fn_error $? "conditional \"ARMCI_SRC_DIR_PORTALS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_SRC_DIR_GEMINI_TRUE}" && test -z "${ARMCI_SRC_DIR_GEMINI_FALSE}"; then as_fn_error $? "conditional \"ARMCI_SRC_DIR_GEMINI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_SRC_DIR_COMEX_TRUE}" && test -z "${ARMCI_SRC_DIR_COMEX_FALSE}"; then as_fn_error $? "conditional \"ARMCI_SRC_DIR_COMEX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARMCI_SRC_DIR_SRC_TRUE}" && test -z "${ARMCI_SRC_DIR_SRC_FALSE}"; then as_fn_error $? "conditional \"ARMCI_SRC_DIR_SRC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_XT_NETWORKS_TRUE}" && test -z "${CRAY_XT_NETWORKS_FALSE}"; then as_fn_error $? "conditional \"CRAY_XT_NETWORKS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SYSV_TRUE}" && test -z "${SYSV_FALSE}"; then as_fn_error $? "conditional \"SYSV\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_GROUP_COMM_MEMBER_TRUE}" && test -z "${HAVE_ARMCI_GROUP_COMM_MEMBER_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_GROUP_COMM_MEMBER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_GROUP_COMM_TRUE}" && test -z "${HAVE_ARMCI_GROUP_COMM_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_GROUP_COMM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_INITIALIZED_TRUE}" && test -z "${HAVE_ARMCI_INITIALIZED_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_INITIALIZED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_NOTIFY_TRUE}" && test -z "${HAVE_ARMCI_NOTIFY_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_NOTIFY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_MSG_INIT_TRUE}" && test -z "${HAVE_ARMCI_MSG_INIT_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_MSG_INIT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_MSG_FINALIZE_TRUE}" && test -z "${HAVE_ARMCI_MSG_FINALIZE_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_MSG_FINALIZE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ARMCI_STRIDE_INFO_INIT_TRUE}" && test -z "${HAVE_ARMCI_STRIDE_INFO_INIT_FALSE}"; then as_fn_error $? "conditional \"HAVE_ARMCI_STRIDE_INFO_INIT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE}" && test -z "${HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE}"; then as_fn_error $? "conditional \"HAVE_SYS_WEAK_ALIAS_PRAGMA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_BLAS_TRUE}" && test -z "${HAVE_BLAS_FALSE}"; then as_fn_error $? "conditional \"HAVE_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LAPACK_TRUE}" && test -z "${HAVE_LAPACK_FALSE}"; then as_fn_error $? "conditional \"HAVE_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${RANDOM_ACCESS_TRUE}" && test -z "${RANDOM_ACCESS_FALSE}"; then as_fn_error $? "conditional \"RANDOM_ACCESS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SHARED_TRUE}" && test -z "${ENABLE_SHARED_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SHARED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Aggregate Remote Memory Copy Interface (ARMCI) $as_me 1.5, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . Aggregate Remote Memory Copy Interface (ARMCI) home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ Aggregate Remote Memory Copy Interface (ARMCI) config.status 1.5 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi # Report on what we found. { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: **************************************************************" >&5 $as_echo "$as_me: **************************************************************" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: $PACKAGE_NAME configured as follows:" >&5 $as_echo "$as_me: $PACKAGE_NAME configured as follows:" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: **************************************************************" >&5 $as_echo "$as_me: **************************************************************" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: TARGET=$ga_cv_target" >&5 $as_echo "$as_me: TARGET=$ga_cv_target" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: MSG_COMMS=$ga_msg_comms" >&5 $as_echo "$as_me: MSG_COMMS=$ga_msg_comms" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_MP_LIBS=$GA_MP_LIBS" >&5 $as_echo "$as_me: GA_MP_LIBS=$GA_MP_LIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_MP_LDFLAGS=$GA_MP_LDFLAGS" >&5 $as_echo "$as_me: GA_MP_LDFLAGS=$GA_MP_LDFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_MP_CPPFLAGS=$GA_MP_CPPFLAGS" >&5 $as_echo "$as_me: GA_MP_CPPFLAGS=$GA_MP_CPPFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: ARMCI_NETWORK=$ga_armci_network" >&5 $as_echo "$as_me: ARMCI_NETWORK=$ga_armci_network" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: ARMCI_NETWORK_LDFLAGS=$ARMCI_NETWORK_LDFLAGS" >&5 $as_echo "$as_me: ARMCI_NETWORK_LDFLAGS=$ARMCI_NETWORK_LDFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: ARMCI_NETWORK_LIBS=$ARMCI_NETWORK_LIBS" >&5 $as_echo "$as_me: ARMCI_NETWORK_LIBS=$ARMCI_NETWORK_LIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: ARMCI_NETWORK_CPPFLAGS=$ARMCI_NETWORK_CPPFLAGS" >&5 $as_echo "$as_me: ARMCI_NETWORK_CPPFLAGS=$ARMCI_NETWORK_CPPFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CC=$CC" >&5 $as_echo "$as_me: CC=$CC" >&6;} if test "x$with_mpi_wrappers" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: unwrapped CC=$ga_cv_mpic_naked" >&5 $as_echo "$as_me: unwrapped CC=$ga_cv_mpic_naked" >&6;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: CFLAGS=$CFLAGS" >&5 $as_echo "$as_me: CFLAGS=$CFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: ARMCI_COPT=$ARMCI_COPT" >&5 $as_echo "$as_me: ARMCI_COPT=$ARMCI_COPT" >&6;} if test "x$enable_cxx" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: CXX=$CXX" >&5 $as_echo "$as_me: CXX=$CXX" >&6;} if test "x$with_mpi_wrappers" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: unwrapped CXX=$ga_cv_mpicxx_naked" >&5 $as_echo "$as_me: unwrapped CXX=$ga_cv_mpicxx_naked" >&6;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: CXXFLAGS=$CXXFLAGS" >&5 $as_echo "$as_me: CXXFLAGS=$CXXFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: ARMCI_CXXOPT=$ARMCI_CXXOPT" >&5 $as_echo "$as_me: ARMCI_CXXOPT=$ARMCI_CXXOPT" >&6;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: CPP=$CPP" >&5 $as_echo "$as_me: CPP=$CPP" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CPPFLAGS=$CPPFLAGS" >&5 $as_echo "$as_me: CPPFLAGS=$CPPFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: LDFLAGS=$LDFLAGS" >&5 $as_echo "$as_me: LDFLAGS=$LDFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: LIBS=$LIBS" >&5 $as_echo "$as_me: LIBS=$LIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: FLIBS=$FLIBS" >&5 $as_echo "$as_me: FLIBS=$FLIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: AR=$AR" >&5 $as_echo "$as_me: AR=$AR" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: AR_FLAGS=$AR_FLAGS" >&5 $as_echo "$as_me: AR_FLAGS=$AR_FLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CCAS=$CCAS" >&5 $as_echo "$as_me: CCAS=$CCAS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CCAS_FLAGS=$CCAS_FLAGS" >&5 $as_echo "$as_me: CCAS_FLAGS=$CCAS_FLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: DEFS=$DEFS" >&5 $as_echo "$as_me: DEFS=$DEFS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: SHELL=$SHELL" >&5 $as_echo "$as_me: SHELL=$SHELL" >&6;} case $ga_msg_comms in #( MPI) : { $as_echo "$as_me:${as_lineno-$LINENO}: MPIEXEC=$MPIEXEC" >&5 $as_echo "$as_me: MPIEXEC=$MPIEXEC" >&6;} ;; #( *) : ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: NPROCS=$NPROCS" >&5 $as_echo "$as_me: NPROCS=$NPROCS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} ga-5-3/armci/src-gemini/0000750005473000001440000000000012275260542013730 5ustar d3n000usersga-5-3/armci/src-gemini/rtinfo.c0000640005473000001440000000102111466102622015363 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: rtinfo.c,v 1.1 2003-03-20 00:57:27 d3h325 Exp $ Run-time system configuration */ #include #include /*\ determine number of CPUs on the current SMP node- Linux version for now \*/ int armci_getnumcpus(void) { int numproc=0; FILE* fp; char line[80]; fp=fopen("/proc/cpuinfo","r"); if(fp==NULL) return -1; while(!feof(fp)){ fgets(line,80,fp); if(strncmp(line,"processor",9)==0) numproc++; } fclose(fp); return(numproc); } ga-5-3/armci/src-gemini/locks.c0000640005473000001440000000432511622516074015213 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: locks.c,v 1.15.6.1 2006-12-14 13:24:36 manoj Exp $ */ #define _LOCKS_C_ #include "armcip.h" #include "locks.h" #ifndef WIN32 # include #endif #include extern void armci_die(char*,int); #if defined(SPINLOCK) || defined(PMUTEXES) void **ptr_arr; void CreateInitLocks(int num_locks, lockset_t *plockid) { int locks_per_proc, size; extern void armci_set_serv_mutex_arr(void *); ARMCI_PR_DBG("enter",0); ptr_arr = (void**)malloc(armci_nproc*sizeof(void*)); locks_per_proc = (num_locks*armci_nclus)/armci_nproc + 1; size=locks_per_proc*sizeof(PAD_LOCK_T); PARMCI_Malloc(ptr_arr, size); _armci_int_mutexes = (PAD_LOCK_T*) ptr_arr[armci_master]; # ifdef PORTALS_SPECIFIC_QUESTION if(armci_me==armci_master)armci_set_serv_mutex_arr(_armci_int_mutexes); # endif if(!_armci_int_mutexes) armci_die("Failed to create spinlocks",size); #ifdef PMUTEXES if(armci_me == armci_master) { int i; pthread_mutexattr_t pshared; if(pthread_mutexattr_init(&pshared)) armci_die("armci_allocate_locks: could not init mutex attr",0); # ifndef LINUX if(pthread_mutexattr_setpshared(&pshared,PTHREAD_PROCESS_SHARED)) armci_die("armci_allocate_locks: could not set PROCESS_SHARED",0); # endif for(i=0; i< locks_per_proc*armci_clus_info[armci_clus_me].nslave; i++){ if(pthread_mutex_init(_armci_int_mutexes+i,&pshared)) armci_die("armci_allocate_locks: could not init mutex",i); } } #else bzero((char*)ptr_arr[armci_me],size); ARMCI_PR_DBG("exit",0); #endif } void InitLocks(int num_locks, lockset_t lockid) { /* what are you doing here ? All processes should've called CreateInitLocks(). Check preprocessor directtives and see lock allocation in armci_init */ armci_die("InitLocks(): what are you doing here ?",armci_me); } void DeleteLocks(lockset_t lockid) { _armci_int_mutexes = (PAD_LOCK_T*)0; } #else /*********************** every thing else *************************/ void CreateInitLocks(int num_locks, lockset_t *lockid) {} void InitLocks(int num_locks, lockset_t lockid) { } void DeleteLocks(lockset_t lockid) { } #endif ga-5-3/armci/src-gemini/message.h0000640005473000001440000000645011643667455015547 0ustar d3n000users#ifndef _MESSAGE_H_ #define _MESSAGE_H_ #include "armci.h" #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif #define ARMCI_INT -99 #define ARMCI_LONG -101 #define ARMCI_LONG_LONG -102 #define ARMCI_FLOAT -306 #define ARMCI_DOUBLE -307 #define SCOPE_ALL 333 #define SCOPE_NODE 337 #define SCOPE_MASTERS 339 #define armci_msg_sel(x,n,op,type,contribute)\ armci_msg_sel_scope(SCOPE_ALL,(x),(n),(op),(type),(contribute)) #if 0 #define armci_msg_bcast(buffer, len, root)\ armci_msg_bcast_scope(SCOPE_ALL, (buffer), (len), (root)) #else extern void armci_msg_bcast(void *buffer, int len, int root); #endif extern void armci_msg_sel_scope(int scope, void *x, int n, char* op, int type, int contribute); extern void armci_msg_bcast_scope(int scope, void* buffer, int len, int root); extern void armci_msg_brdcst(void* buffer, int len, int root); extern void armci_msg_snd(int tag, void* buffer, int len, int to); extern void armci_msg_rcv(int tag, void* buffer, int buflen, int *msglen, int from); extern int armci_msg_rcvany(int tag, void* buffer, int buflen, int *msglen); extern void armci_msg_reduce(void *x, int n, char *op, int type); extern void armci_msg_reduce_scope(int scope, void *x, int n, char *op, int type); extern void armci_msg_gop_scope(int scope, void *x, int n, char* op, int type); extern void armci_msg_igop(int *x, int n, char* op); extern void armci_msg_lgop(long *x, int n, char* op); extern void armci_msg_llgop(long long *x, int n, char* op); extern void armci_msg_fgop(float *x, int n, char* op); extern void armci_msg_dgop(double *x, int n, char* op); extern void armci_exchange_address(void *ptr_ar[], int n); extern void armci_msg_barrier(); extern void armci_msg_bintree(int scope, int* Root, int *Up, int *Left, int *Right); extern int armci_msg_me(); extern int armci_msg_nproc(); extern void armci_msg_abort(int code); extern void armci_msg_init(int *argc, char ***argv); extern void armci_msg_finalize(); extern double armci_timer(); extern void armci_msg_clus_brdcst(void *buf, int len); extern void armci_msg_clus_igop(int *x, int n, char* op); extern void armci_msg_clus_fgop(float *x, int n, char* op); extern void armci_msg_clus_lgop(long *x, int n, char* op); extern void armci_msg_clus_llgop(long long *x, int n, char* op); extern void armci_msg_clus_dgop(double *x, int n, char* op); extern void armci_msg_group_gop_scope(int scope, void *x, int n, char* op, int type, ARMCI_Group *group); extern void armci_msg_group_igop(int *x, int n, char* op,ARMCI_Group *group); extern void armci_msg_group_lgop(long *x, int n, char* op,ARMCI_Group *group); extern void armci_msg_group_llgop(long long *x, int n, char* op,ARMCI_Group *group); extern void armci_msg_group_fgop(float *x, int n, char* op,ARMCI_Group *group); extern void armci_msg_group_dgop(double *x, int n,char* op,ARMCI_Group *group); extern void armci_exchange_address_grp(void *ptr_arr[], int n, ARMCI_Group *group); extern void armci_msg_group_barrier(ARMCI_Group *group); extern void armci_msg_group_bcast_scope(int scope, void *buf, int len, int root, ARMCI_Group *group); extern void armci_grp_clus_brdcst(void *buf, int len, int grp_master, int grp_clus_nproc,ARMCI_Group *mastergroup); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif ga-5-3/armci/src-gemini/mutex.c0000640005473000001440000002615711710201637015243 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: mutex.c,v 1.24.10.1 2006-12-21 23:50:48 manoj Exp $ */ #include "armcip.h" #include "copy.h" #include "request.h" #include #define DEBUG 0 #define MAX_LOCKS 32768 #define SPINMAX 1000 #if defined(LAPI) || defined(GM) # define SERVER_LOCK #endif double _dummy_work_=0.; #ifdef LAPI /*fix to if cmpl handler for a pending unlock runs after destroy*/ int mymutexcount; double _dummy_server_work_=0.; #endif static int num_mutexes=0, *tickets; typedef struct { int mutex; int turn; msg_tag_t tag; } waiting_list_t; /* data structure to store info about blocked (waiting) process for mutex */ static waiting_list_t* blocked=(waiting_list_t*)0; typedef struct { int* token; int* turn; int* tickets; int count; } mutex_entry_t; void** mutex_mem_ar; mutex_entry_t *glob_mutex; int PARMCI_Create_mutexes(int num) { int rc,p, totcount; int *mutex_count = (int*)armci_internal_buffer; if((sizeof(int)*armci_nproc) > armci_getbufsize()){ mutex_count = (double *)malloc(sizeof(int)*armci_nproc); } if (num < 0 || num > MAX_LOCKS) return(FAIL); if(num_mutexes) armci_die("mutexes already created",num_mutexes); if(armci_nproc == 1){ num_mutexes=1; return(0); } /* local memory allocation for mutex arrays*/ mutex_mem_ar = (void*) malloc(armci_nproc*sizeof(void*)); if(!mutex_mem_ar) armci_die("PARMCI_Create_mutexes: malloc failed",0); glob_mutex = (void*)malloc(armci_nproc*sizeof(mutex_entry_t)); if(!glob_mutex){ free(mutex_mem_ar); armci_die("PARMCI_Create_mutexes: malloc 2 failed",0); } /* bzero(mutex_count,armci_nproc*sizeof(int));*/ bzero((char*)mutex_count,sizeof(int)*armci_nproc); /* find out how many mutexes everybody allocated */ mutex_count[armci_me]=num; armci_msg_igop(mutex_count, armci_nproc, "+"); for(p=totcount=0; p< armci_nproc; p++)totcount+=mutex_count[p]; tickets = calloc(totcount,sizeof(int)); if(!tickets) { free(glob_mutex); free(mutex_mem_ar); return(FAIL2); } /* we need memory for token and turn - 2 ints */ rc = PARMCI_Malloc(mutex_mem_ar,2*num*sizeof(int)); if(rc){ free(glob_mutex); free(mutex_mem_ar); free(tickets); return(FAIL3); } if(num)bzero((char*)mutex_mem_ar[armci_me],2*num*sizeof(int)); /* setup global mutex array */ for(p=totcount=0; p< armci_nproc; p++){ glob_mutex[p].token = mutex_mem_ar[p]; glob_mutex[p].turn = glob_mutex[p].token + mutex_count[p]; glob_mutex[p].count = mutex_count[p]; glob_mutex[p].tickets = tickets + totcount; totcount += mutex_count[p]; } num_mutexes= totcount; #ifdef LAPI mymutexcount = num; #endif PARMCI_Barrier(); if(DEBUG) fprintf(stderr,"%d created (%d,%d) mutexes\n",armci_me,num,totcount); return(0); } void armci_serv_mutex_create() { int mem = armci_nproc*sizeof(waiting_list_t); blocked = (waiting_list_t*)malloc(mem); if(!blocked) armci_die("armci server:error allocating mutex memory ",0); } void armci_serv_mutex_close() { if(blocked) free(blocked ); blocked = (waiting_list_t*)0; } int PARMCI_Destroy_mutexes() { #ifdef LAPI /*fix to if cmpl handler for a pending unlock runs after destroy*/ int proc, mutex, i,factor=0; #endif if(num_mutexes==0)armci_die("armci_destroy_mutexes: not created",0); if(armci_nproc == 1) return(0); armci_msg_barrier(); #ifdef LAPI /*fix to if cmpl handler for a pending unlock runs after destroy*/ for(proc=0;proc myturn) armci_die2("armci: problem with tickets",myturn,next_in_line); /* apply a linear backoff delay before retrying */ for(i=0; i< SPINMAX * factor; i++) _dummy_work_ += 1.; factor += 1; }while (myturn != next_in_line); glob_mutex[proc].tickets[mutex] = myturn; /* save ticket value */ } static void armci_generic_unlock(int mutex, int proc) { int *mutex_ticket= glob_mutex[proc].turn + mutex; int *newval = glob_mutex[proc].tickets +mutex; int len=sizeof(int); /* update ticket for next process requesting this mutex */ (*newval) ++; /* write new ticket value stored previously in tickets */ PARMCI_Put(newval, mutex_ticket, len, proc); MEM_FENCE; } /*\ Acquire mutex for "proc" * -must be executed in hrecv/AM handler thread * -application thread must use generic_lock routine \*/ int armci_server_lock_mutex(int mutex, int proc, msg_tag_t tag) { int myturn; int *mutex_ticket, next_in_line, len=sizeof(int); int owner = armci_me; if(DEBUG)fprintf(stderr,"SLOCK=%d owner=%d p=%d m=%d\n", armci_me,owner, proc,mutex); mutex_ticket= glob_mutex[owner].turn + mutex; myturn = register_in_mutex_queue(mutex, owner); armci_copy(mutex_ticket, &next_in_line, len); if(next_in_line > myturn) armci_die2("armci-s: problem with tickets",myturn,next_in_line); if(next_in_line != myturn){ if(!blocked)armci_serv_mutex_create(); blocked[proc].mutex = mutex; blocked[proc].turn = myturn; blocked[proc].tag = tag; if(DEBUG) fprintf(stderr,"SLOCK=%d proc=%d blocked (%d,%d)\n", armci_me, proc, next_in_line,myturn); return -1; } else { if(DEBUG) fprintf(stderr,"SLOCK=%d proc=%d sending ticket (%d)\n", armci_me, proc, myturn); /* send ticket to requesting node */ /* GA_SEND_REPLY(tag, &myturn, sizeof(int), proc); */ return (myturn); } } /*\ Release mutex "id" held by proc * called from hrecv/AM handler AND application thread \*/ int armci_server_unlock_mutex(int mutex, int proc, int Ticket, msg_tag_t* ptag) { #define NOBODY -1 int owner = armci_me; int i, p=NOBODY, *mutex_ticket= glob_mutex[owner].turn + mutex; int len=sizeof(int); if(DEBUG) fprintf(stderr,"SUNLOCK=%d node=%d mutex=%d ticket=%d\n", armci_me,proc,mutex,Ticket); Ticket++; armci_copy(&Ticket, mutex_ticket, len); /* if mutex is free then nobody is reqistered in queue */ if(armci_mutex_free(mutex, proc)) return -1; /* search for the next process in queue waiting for this mutex */ for(i=0; i< armci_nproc; i++){ if(!blocked)break; /* not allocated yet - nobody is waiting */ if(DEBUG)fprintf(stderr,"SUNLOCK=%d node=%d list=(%d,%d)\n", armci_me, i, blocked[i].mutex, blocked[i].turn); if((blocked[i].mutex == mutex) && (blocked[i].turn == Ticket)){ p = i; break; } } /* send Ticket to a process waiting for mutex */ if(p != NOBODY){ if(p == armci_me)armci_die("server_unlock: cannot unlock self",0); else { if(DEBUG)fprintf(stderr,"SUNLOCK=%d node=%d unlock ticket=%d go=%d\n", armci_me, proc, Ticket, p); /* GA_SEND_REPLY(blocked[p].tag, &Ticket, sizeof(int), p); */ *ptag = blocked[p].tag; return p; } } return -1; /* nobody is waiting */ } void PARMCI_Lock(int mutex, int proc) { #if defined(SERVER_LOCK) int direct; #endif if(DEBUG)fprintf(stderr,"%d enter lock\n",armci_me); if(!num_mutexes) armci_die("armci_lock: create mutexes first",0); if(mutex > glob_mutex[proc].count) armci_die2("armci_lock: mutex not allocated", mutex, glob_mutex[proc].count); if(armci_nproc == 1) return; # if defined(SERVER_LOCK) direct=SAMECLUSNODE(proc); if(!direct) armci_rem_lock(mutex,proc, glob_mutex[proc].tickets + mutex ); else # endif armci_generic_lock(mutex,proc); if(DEBUG)fprintf(stderr,"%d leave lock\n",armci_me); } void PARMCI_Unlock(int mutex, int proc) { if(DEBUG)fprintf(stderr,"%d enter unlock\n",armci_me); if(!num_mutexes) armci_die("armci_lock: create mutexes first",0); if(mutex > glob_mutex[proc].count) armci_die2("armci_lock: mutex not allocated", mutex, glob_mutex[proc].count); if(armci_nproc == 1) return; # if defined(SERVER_LOCK) if(armci_nclus >1) { if(proc != armci_me) armci_rem_unlock(mutex, proc, glob_mutex[proc].tickets[mutex]); else { int ticket = glob_mutex[proc].tickets[mutex]; msg_tag_t tag; int waiting; waiting = armci_server_unlock_mutex(mutex, proc, ticket, &tag); if(waiting >-1) armci_unlock_waiting_process(tag, waiting, ++ticket); } } else # endif armci_generic_unlock(mutex, proc); if(DEBUG)fprintf(stderr,"%d leave unlock\n",armci_me); } ga-5-3/armci/src-gemini/shmem.h0000640005473000001440000000115011466071465015215 0ustar d3n000users#ifndef _SHMEM_H_ #define _SHMEM_H_ extern void Set_Shmem_Limit(unsigned long shmemlimit); extern void Delete_All_Regions(); extern char* Create_Shared_Region(long idlist[], long size, long *offset); extern char* Attach_Shared_Region(long idlist[], long size, long offset); extern void Free_Shmem_Ptr(long id, long size, char* addr); extern long armci_shmem_reg_size(int i, long id); extern char* armci_shmem_reg_ptr(int i); #define POST_ALLOC_CHECK(temp,size) ; #define MAX_REGIONS 64 #if defined(WIN32) #define SHMIDLEN 3 #else #define SHMIDLEN (MAX_REGIONS + 2) #endif #define IDLOC (SHMIDLEN - 3) #endif ga-5-3/armci/src-gemini/ds-shared.c0000640005473000001440000004037611506433273015760 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "armcip.h" #include "request.h" #include "message.h" #include "memlock.h" #include "copy.h" #include "gpc.h" #include #include #ifdef WIN32 #include #else #include #endif #define DEBUG_ 0 #define DEBUG1 0 #ifndef SERV # define SERV 2 #endif #ifdef SOCKETS # define EQ_TAGS(a_, b_) ((a_) == (b_)) #else # define EQ_TAGS(a_, b_) !memcmp(&(a_), &(b_), sizeof(a_)) #endif int _armci_server_started=0; extern active_socks_t *_armci_active_socks; #ifdef ARMCI_CHECK_STATE typedef struct sarns{ int data; long data1; struct sarns *next; } sarnode; sarnode **sarn_np=NULL; sarnode * sarlist_add(int pr, int i,long j) { sarnode **p = &sarn_np[pr]; sarnode *n = (sarnode *)malloc(sizeof(sarnode)); assert(n != NULL); n->next = *p; *p = n; n->data = i; n->data1 = j; return *p; } void sarlist_remove(sarnode **p) { if(*p != NULL){ sarnode *n = *p; *p = (*p)->next; free(n); } } sarnode **sarlist_search(sarnode **n, long i) { while (*n != NULL){ if ((*n)->data == i){ return n; } n = &(*n)->next; } return NULL; } void sarlist_print(int proc) { sarnode *n =sarn_np[proc]; if (n == NULL){ /*printf("sarlist is empty\n");*/ } while (n != NULL){ printf("(%d):%d %d next=%d\n", armci_me,n->data,n->data1,(n->next==NULL)?0:1); n = n->next; } } #endif /*\ client sends request to server \*/ void armci_send_req(int proc, request_header_t* msginfo, int len,int tag) { int hdrlen = sizeof(request_header_t); int bytes; ARMCI_PR_DBG("enter",0); if(msginfo->operation == GET) { if(msginfo->format==VECTOR && msginfo->ehlen > 0) { printf("%d [cp] unhandled condition in send_req for VECTOR and ehlen\n",armci_me); abort(); bytes = msginfo->dscrlen + hdrlen + msginfo->datalen; } else { bytes = msginfo->dscrlen + hdrlen; } } else bytes = msginfo->bytes + hdrlen; if(0 || DEBUG_) { printf("%d: sending req %d (len=%d dscr=%d data=%d) to %d \n", armci_me, msginfo->operation, bytes,msginfo->dscrlen, msginfo->datalen,proc); fflush(stdout); } if(bytes > len) armci_die2("armci_send_req:buffer overflow",bytes,len); // msginfo->tag.data_ptr = (msginfo+1); // not really data, but dscr ptr armci_send_req_msg(proc,msginfo, bytes,tag); ARMCI_PR_DBG("exit",0); } /*\ client sends strided data + request to server \*/ void armci_send_strided(int proc, request_header_t *msginfo, char *bdata, void *ptr, int strides, int stride_arr[], int count[],int tag) { int hdrlen = sizeof(request_header_t); int dscrlen = msginfo->dscrlen; int datalen = msginfo->datalen; int cluster = armci_clus_id(proc); int bytes; int i,na; char *a; double *tmp; ARMCI_PR_DBG("enter",0); bytes = msginfo->bytes + hdrlen; if(0){ printf("%d:sending strided %d to(%d,%d,%d) bytes=%d dslen=%d dlen=%d,\n", armci_me, msginfo->operation, msginfo->to, cluster, proc, bytes, dscrlen, datalen); fflush(stdout); } armci_write_strided(ptr, strides, stride_arr, count, bdata); // msginfo->tag.data_ptr = (msginfo+1); #ifdef RMO_DEBUG_ a = (char *) (msginfo + 1); a += msginfo->dscrlen; tmp = (double *) a; na = msginfo->datalen/sizeof(double); for(i=0; idatalen; char *buf; ARMCI_PR_DBG("enter",0); if(rcvlen)datalen=rcvlen; if(DEBUG_) { printf("%d:armci_rcv_data: bytes= %d \n", armci_me, datalen); fflush(stdout); } if(datalen == 0) armci_die("armci_rcv_data: no data to receive",datalen); buf = armci_ReadFromDirect(proc, msginfo, datalen); if(DEBUG_){ printf("%d:armci_rcv_data: got %d bytes \n",armci_me,datalen); fflush(stdout); } ARMCI_PR_DBG("exit",0); return(buf); } /*\ client receives vector data from server and unpacks to the right loc \*/ void armci_rcv_vector_data(int proc, request_header_t* msginfo, armci_giov_t darr[], int len) { ARMCI_PR_DBG("enter",0); char *buf = armci_rcv_data(proc, msginfo, 0); armci_vector_from_buf(darr, len, buf); ARMCI_PR_DBG("exit",0); } /*\ client receives strided data from server \*/ void armci_rcv_strided_data(int proc, request_header_t* msginfo, int datalen, void *ptr, int strides,int stride_arr[],int count[]) { char *databuf; ARMCI_PR_DBG("enter",0); if(DEBUG_){ printf("%d: armci_rcv_strided_data: expecting datalen %d from %d\n", armci_me, datalen, proc); fflush(stdout); } databuf = armci_ReadFromDirect(proc,msginfo,0); armci_read_strided(ptr, strides, stride_arr, count, databuf); ARMCI_PR_DBG("exit",0); } void armci_rem_state(int clus) { int bufsize = sizeof(request_header_t)+sizeof(int); int destproc = 0; request_header_t *msginfo; destproc = SERVER_NODE(clus); msginfo = (request_header_t *)GET_SEND_BUFFER(bufsize,STATE,destproc); int tag=0; ARMCI_PR_DBG("enter",0); msginfo->dscrlen = 0; msginfo->from = armci_me; msginfo->to = SERVER_NODE(clus); msginfo->operation = STATE; msginfo->bytes =0; msginfo->datalen =sizeof(int); // msginfo->tag.data_ptr = (msginfo+1); if(DEBUG_){ printf("%d(c):sending ACKreq to %d clus=%d\n",armci_me,msginfo->to,clus); fflush(stdout); } armci_send_req(armci_clus_info[clus].master, msginfo, bufsize,tag); armci_rcv_data(armci_clus_info[clus].master, msginfo,0); /* receive */ FREE_SEND_BUFFER(msginfo); ARMCI_PR_DBG("exit",0); } /*\ get ACK from server \*/ void armci_rem_ack(int clus) { int bufsize = sizeof(request_header_t)+sizeof(int); int destproc = 0; request_header_t *msginfo; destproc = SERVER_NODE(clus); msginfo = (request_header_t *) GET_SEND_BUFFER(bufsize,ACK,destproc); int tag=0; ARMCI_PR_DBG("enter",0); msginfo->dscrlen = 0; msginfo->from = armci_me; msginfo->to = SERVER_NODE(clus); msginfo->operation = ACK; msginfo->bytes =0; msginfo->datalen =sizeof(int); // msginfo->tag.data_ptr = (msginfo+1); if(DEBUG_){ printf("%d(c):sending ACKreq to %d clus=%d\n",armci_me,msginfo->to,clus); fflush(stdout); } armci_send_req(armci_clus_info[clus].master, msginfo, bufsize,tag); armci_rcv_data(armci_clus_info[clus].master, msginfo,0); /* receive ACK */ FREE_SEND_BUFFER(msginfo); ARMCI_PR_DBG("exit",0); } /*\ request to QUIT sent by client \*/ void armci_serv_quit() { int bufsize = sizeof(request_header_t)+sizeof(int); int destproc; request_header_t *msginfo; destproc = SERVER_NODE(armci_clus_me); msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,QUIT,destproc); int tag=0; ARMCI_PR_DBG("enter",0); if(DEBUG_){ printf("%d master: sending quit request to server\n",armci_me); fflush(stdout); } msginfo->dscrlen = 0; msginfo->from = armci_me; msginfo->to = SERVER_NODE(armci_clus_me); msginfo->operation = QUIT; if(ACK_QUIT) msginfo->bytes = msginfo->datalen = sizeof(int); /* ACK */ else msginfo->bytes = msginfo->datalen = 0; /* no ACK */ armci_send_req(armci_master, msginfo, bufsize,tag); if(ACK_QUIT){ int stat; stat = *(int*)armci_rcv_data(armci_master,msginfo,0); /* receive ACK */ if(stat != QUIT) armci_die("armci_serv_quit: wrong response from server", stat); FREE_SEND_BUFFER(msginfo); } ARMCI_PR_SDBG("exit",0); } /***************************** server side *********************************/ static void armci_check_req(request_header_t *msginfo, int buflen) { ARMCI_PR_SDBG("enter",msginfo->operation); if((msginfo->to != armci_me && msginfo->to < armci_master) || msginfo->to >= armci_master + armci_clus_info[armci_clus_me].nslave) /*armci_die("armci_check_req: invalid to", msginfo->to);*/ printf("\n%d:got following to %d",armci_me,msginfo->to); if(msginfo->dscrlen < 0) armci_die("armci_check_req: dscrlen < 0", msginfo->dscrlen); if(msginfo->datalen < 0) armci_die("armci_check_req: datalen < 0", msginfo->datalen); if(msginfo->dscrlen > (int)msginfo->bytes) armci_die2("armci_check_req: dsclen > bytes", msginfo->dscrlen, msginfo->bytes); ARMCI_PR_SDBG("exit",0); } /*\ server response - send data to client \*/ void armci_send_data(request_header_t* msginfo, void *data) { int to = msginfo->from; ARMCI_PR_SDBG("enter",0); armci_WriteToDirect(to, msginfo, data); ARMCI_PR_SDBG("exit",0); } /*\ server sends strided data back to client \*/ void armci_send_strided_data(int proc, request_header_t *msginfo, char *bdata, void *ptr, int strides, int stride_arr[], int count[]) { int i,na; double *a = NULL; int to = msginfo->from; ARMCI_PR_SDBG("enter",0); if(DEBUG_){ printf("%d(server): sending datalen = %d to %d %p\n", armci_me, msginfo->datalen, to,ptr); fflush(stdout); } /* for small contiguous blocks copy into a buffer before sending */ armci_write_strided(ptr, strides, stride_arr, count, bdata); #ifdef RMO_PORTALS_DEBUG_GET a = (double *) bdata; na = msginfo->datalen/sizeof(double); for(i=0; idatalen,to); fflush(stdout); } ARMCI_PR_SDBG("exit",0); } /*\ server sends ACK to client ptl_event_t *ev = (ptl_event_t *) msginfo->tag.user_ptr; ARMCI_PR_SDBG("enter",0); if(DEBUG_){ printf("%d server: terminating request by %d\n",armci_me,msginfo->from); fflush(stdout); } portals_ds_send_ack(ev->initiator,ev->hdr_data); \*/ void armci_server_ack(request_header_t* msginfo) { int *ack=(int*)(msginfo+1); ARMCI_PR_SDBG("enter",0); if(DEBUG_){ printf("%d server: sending ACK to %d\n",armci_me,msginfo->from); fflush(stdout); } *ack = ACK; if(msginfo->datalen != sizeof(int)) armci_die("armci_server_ack: bad datalen=",msginfo->datalen); armci_send_data(msginfo,ack); ARMCI_PR_SDBG("exit",0); } /*\ server action triggered by request to quit \*/ void armci_server_goodbye(request_header_t* msginfo) { #ifdef LIBONESIDED #else ptl_event_t *ev = (ptl_event_t *) msginfo->tag.user_ptr; ARMCI_PR_SDBG("enter",0); if(DEBUG_){ printf("%d server: terminating request by %d\n",armci_me,msginfo->from); fflush(stdout); } portals_ds_send_ack(ev->initiator,ev->hdr_data); #ifdef ARMCI_CHECK_STATE_ for(int i=0;ifrom; if(DEBUG_){ printf("%d(serv):got %d request from %d\n",armci_me,msginfo->operation, from); fflush(stdout); } /*if(msginfo->operation==GET)fprintf(stderr,"GET request received with tag: %d\n",msginfo->tag);*/ switch(msginfo->operation){ # ifdef ARMCI_CHECK_STATE case STATE: printf("[ds %d]: operation=%d not supported yet\n",armci_me,msginfo->operation); abort(); if(DEBUG_){printf("\n%d:state request\n",armci_me);fflush(stdout);} sarlist_print(msginfo->from); armci_WriteToDirect(msginfo->from, msginfo, (msginfo+1)); break; # endif case QUIT: if(DEBUG_){ printf("%d(serv):got QUIT request from %d\n",armci_me, from); fflush(stdout); } armci_server_goodbye(msginfo); break; /*pessimism?*/ case ACK: // printf("[ds %d]: operation=%d not supported yet\n",armci_me,msginfo->operation); // abort(); if(DEBUG_) { fprintf(stdout, "%d(server): got ACK request from %d\n", armci_me, msginfo->from); fflush(stdout); } armci_server_ack(msginfo); break; case ATTACH: printf("[ds %d]: operation=%d not supported yet\n",armci_me,msginfo->operation); abort(); // if(DEBUG_){ // printf("%d(serv):got ATTACH request from%d\n",armci_me, from); // fflush(stdout); // } // armci_server_ipc(msginfo, descr, buffer, buflen); break; case ARMCI_SWAP: case ARMCI_SWAP_LONG: case ARMCI_FETCH_AND_ADD: case ARMCI_FETCH_AND_ADD_LONG: armci_server_rmw(msginfo,descr,buffer); break; case LOCK: printf("[ds %d]: operation=%d not supported yet\n",armci_me,msginfo->operation); abort(); // armci_server_lock(msginfo); break; case UNLOCK: printf("[ds %d]: operation=%d not supported yet\n",armci_me,msginfo->operation); abort(); // armci_server_unlock(msginfo, descr); // msginfo->tag.ack=ARMCI_STAMP; // x_net_send_ack(msginfo,msginfo->from,msginfo->tag.ack_ptr,&msginfo->tag.ack); break; default: if(msginfo->format == VECTOR){ armci_server_vector(msginfo, descr, buffer, buflen); // point 1 if(msginfo->operation==PUT || ARMCI_ACC(msginfo->operation)) { // point 2 armci_server_send_ack(msginfo); } // the obove if clause and the similar cause below for a strided operation // was the reason for the race condition in the original portals code. // if the original request was a get, it could return it's data to the CP // once the the data is returned, the CP could fire off a new request which // would overwrite the 'now' volatile msginfo ... in which case, after returning // from armci_server_vector (having finished the get); the operation could now be // a put, in which case, it would repy back that it has also finished the put, // with out actually doing it. Msginfo could be different at points 1 and 2 if // at point 1 the operation was a get. } else if(msginfo->format == STRIDED){ // if(msginfo->operation != PUT && msginfo->operation != GET && !ARMCI_ACC(msginfo->operation)) { // printf("[ds %d]: operation=%d (format==STRIDED) not supported yet\n",armci_me,msginfo->operation); // abort(); // } armci_server(msginfo, descr, buffer, buflen); // point 1 if(msginfo->operation==PUT || ARMCI_ACC(msginfo->operation)){ // point 2 armci_server_send_ack(msginfo); } } else armci_die2("armci_data_serv: unknown format code", msginfo->format, msginfo->from); } ARMCI_PR_SDBG("exit",0); } ga-5-3/armci/src-gemini/pendbufs.h0000640005473000001440000000431411466071465015717 0ustar d3n000users/** @file Split buffer implementation. * @author Sriram Krishnamoorthy * * Supports multiple short/immediate buffers posted per client and a * client-independent number of buffers to handle large messages. */ #ifndef _PENDBUFS_H_ #define _PENDBUFS_H_ #if defined(PEND_BUFS) #include "armcip.h" #include "request.h" /**The buf should be the first field in immbuf_t and pendbuf_t. For example, look at openib.c:armci_rcv_req and maybe other places*/ typedef struct immbuf_t { char *buf; /*immediate buffer[IMMBUF_LEN]*/ /* IMMBUF_NW_T fields; */ IMMBUF_NW_T struct immbuf_t *immbuf_list_next; } immbuf_t; typedef struct pendbuf_t { char *buf; /*pending buffer[PENDBUF_LEN]*/ /* PENDBUF_NW_T fields; */ PENDBUF_NW_T int status; /* # define SPINLOCK # define TESTANDSET(x) __lock_test_and_set((x), 1) # define RELEASE_SPINLOCK __lock_release /*#elif defined(AIX)*/ #elif HAVE_SYS_ATOMIC_OP_H # if DEBUG_SPINLOCK # warning SPINLOCK: sys/atomic_op.h (AIX) # endif # include # define SPINLOCK # define TESTANDSET(x) (_check_lock((x), 0, 1)==TRUE) # define RELEASE_SPINLOCK(x) _clear_lock((x),0) #elif defined(SOLARIS) # if DEBUG_SPINLOCK # warning SPINLOCK: SOLARIS # endif # include # include # define SPINLOCK # define TESTANDSET(x) (!_lock_try((x))) # define RELEASE_SPINLOCK _lock_clear #elif defined(MACX) #elif defined(HPUX__) # if DEBUG_SPINLOCK # warning SPINLOCK: HPUX__ # endif extern int _acquire_lock(); extern void _release_lock(); # define SPINLOCK # define TESTANDSET(x) (!_acquire_lock((x))) # define RELEASE_SPINLOCK _release_lock #elif defined(HPUX) && defined(__ia64) /* HPUX on IA64, non gcc */ # if DEBUG_SPINLOCK # warning SPINLOCK: HPUX ia64 # endif # define SPINLOCK typedef unsigned int slock_t; # include # define TESTANDSET(lock) _Asm_xchg(_SZ_W, lock, 1, _LDHINT_NONE) # define RELEASE_SPINLOCK(lock) (*((volatile LOCK_T *) (lock)) = 0) #elif defined(NEC) # if DEBUG_SPINLOCK # warning SPINLOCK: NEC # endif extern ullong ts1am_2me(); # define LOCK_T ullong # define _LKWD (1ULL << 63) # define SPINLOCK # define TESTANDSET(x) ((_LKWD & ts1am_2me(_LKWD, 0xffULL, (ullong)(x)))) # define MEMORY_BARRIER mpisx_clear_cache extern void mpisx_clear_cache(); # define RELEASE_SPINLOCK(x) ts1am_2me(0ULL, 0xffULL, (ullong)x); #endif #ifdef SPINLOCK #if DEBUG_ # if HAVE_STDIO_H # include # endif #endif #if HAVE_UNISTD_H # include #endif #ifndef DBL_PAD # define DBL_PAD 16 #endif /* make sure that locks are not sharing the same cache line */ typedef struct{ double lock[DBL_PAD]; }pad_lock_t; #ifndef LOCK_T # define LOCK_T int #endif #define PAD_LOCK_T pad_lock_t static inline void armci_init_spinlock(LOCK_T *mutex) { #if OPENPA OPA_store_int(mutex, 0); #else *mutex =0; #endif } #ifdef TESTANDSET static inline void armci_acquire_spinlock(LOCK_T *mutex) { #if defined(BGML) || defined(DCMF) return; #else int loop=0, maxloop =10; while (TESTANDSET(mutex)){ loop++; if(loop==maxloop){ # if DEBUG_ extern int armci_me; printf("%d:spinlock sleeping\n",armci_me); fflush(stdout); # endif usleep(1); loop=0; } } #endif } #ifdef RELEASE_SPINLOCK # ifdef MEMORY_BARRIER # define armci_release_spinlock(x) MEMORY_BARRIER(); RELEASE_SPINLOCK(x) # else # define armci_release_spinlock(x) RELEASE_SPINLOCK(x) # endif #else static inline void armci_release_spinlock(LOCK_T *mutex) { #if defined(BGML) || defined(DCMF) return; #else # ifdef MEMORY_BARRIER MEMORY_BARRIER (); # endif #if OPENPA OPA_store_int(mutex, 0); #else *mutex =0; #endif # ifdef MEMORY_BARRIER MEMORY_BARRIER (); # endif # if (defined(MACX)||defined(LINUX)) && defined(__GNUC__) && defined(__ppc__) __asm__ __volatile__ ("isync" : : : "memory"); # endif #endif } #endif /* RELEASE_SPINLOCK */ #endif /* TESTANDSET */ #endif /* SPINLOCK */ #endif /* SPINLOCK_H */ ga-5-3/armci/src-gemini/shmlimit.h0000640005473000001440000000027511466071465015741 0ustar d3n000users#ifndef _SHMLIMIT_H_ #define _SHMLIMIT_H_ extern int armci_me, armci_master; extern void armci_die(char *, int); extern int armci_shmem_test(); extern int armci_child_shmem_init(); #endif ga-5-3/armci/src-gemini/Makefile.inc0000640005473000001440000000456012115161655016144 0ustar d3n000userslibarmci_la_SOURCES += src-gemini/acc.h libarmci_la_SOURCES += src-gemini/aggregate.c libarmci_la_SOURCES += src-gemini/armci.c libarmci_la_SOURCES += src-gemini/armci-onesided.c libarmci_la_SOURCES += src-gemini/armci-onesided.h libarmci_la_SOURCES += src-gemini/armcip.h libarmci_la_SOURCES += src-gemini/atomics-i386.h libarmci_la_SOURCES += src-gemini/buffers.c libarmci_la_SOURCES += src-gemini/caccumulate.c libarmci_la_SOURCES += src-gemini/ccopy.c libarmci_la_SOURCES += src-gemini/clusterinfo.c libarmci_la_SOURCES += src-gemini/copy.h libarmci_la_SOURCES += src-gemini/ds-shared.c libarmci_la_SOURCES += src-gemini/fence.c libarmci_la_SOURCES += src-gemini/groups.c libarmci_la_SOURCES += src-gemini/kr_malloc.c libarmci_la_SOURCES += src-gemini/kr_malloc.h libarmci_la_SOURCES += src-gemini/locks.c libarmci_la_SOURCES += src-gemini/locks.h libarmci_la_SOURCES += src-gemini/memlock.c libarmci_la_SOURCES += src-gemini/memlock.h libarmci_la_SOURCES += src-gemini/memory.c libarmci_la_SOURCES += src-gemini/message.c libarmci_la_SOURCES += src-gemini/mutex.c libarmci_la_SOURCES += src-gemini/pack.c libarmci_la_SOURCES += src-gemini/pendbufs.h libarmci_la_SOURCES += src-gemini/request.c libarmci_la_SOURCES += src-gemini/request.h libarmci_la_SOURCES += src-gemini/rmw.c libarmci_la_SOURCES += src-gemini/rtinfo.c libarmci_la_SOURCES += src-gemini/semaphores.c libarmci_la_SOURCES += src-gemini/semaphores.h libarmci_la_SOURCES += src-gemini/shmalloc.h libarmci_la_SOURCES += src-gemini/shmem.c libarmci_la_SOURCES += src-gemini/shmem.h libarmci_la_SOURCES += src-gemini/shmlimit.c libarmci_la_SOURCES += src-gemini/shmlimit.h libarmci_la_SOURCES += src-gemini/signaltrap.c libarmci_la_SOURCES += src-gemini/signaltrap.h libarmci_la_SOURCES += src-gemini/sockets.h libarmci_la_SOURCES += src-gemini/spawn.c libarmci_la_SOURCES += src-gemini/spinlock.h libarmci_la_SOURCES += src-gemini/strided.c libarmci_la_SOURCES += src-gemini/utils.h libarmci_la_SOURCES += src-gemini/vector.c if ARMCI_ENABLE_GPC_CALLS libarmci_la_SOURCES += src-gemini/gpc.c endif if THREAD_SAFE libarmci_la_SOURCES += src-gemini/threads.c libarmci_la_SOURCES += src-gemini/utils.c endif include_HEADERS += src-gemini/armci.h include_HEADERS += src-gemini/gpc.h include_HEADERS += src-gemini/message.h AM_CPPFLAGS += -I$(top_srcdir)/src-gemini AM_CPPFLAGS += -I$(top_srcdir)/src/include LDADD += -lnumatoolkit LDADD += -lonesided ga-5-3/armci/src-gemini/utils.h0000640005473000001440000000724611643645222015253 0ustar d3n000users/* $Id: utils.h,v 1.1.2.3 2007-07-02 05:35:31 d3p687 Exp $ * * primitives for transparent handling of multi-threading */ #ifndef UTILS_H #define UTILS_H /* * This header file describes the "barrier" synchronization * construct. The type barrier_t describes the full state of the * barrier including the POSIX 1003.1c synchronization objects * necessary. * * A barrier causes threads to wait until a set of threads has * all "reached" the barrier. The number of threads required is * set when the barrier is initialized, and cannot be changed * except by reinitializing. */ #ifdef THREAD_SAFE # ifdef POSIX_THREADS # include #if 1 typedef pthread_mutex_t thread_lock_t; # define THREAD_LOCK_INIT(x) pthread_mutex_init(&x,NULL) # define THREAD_LOCK_DESTROY(x) pthread_mutex_destroy(&x) # define THREAD_LOCK(x) pthread_mutex_lock(&x) # define THREAD_UNLOCK(x) pthread_mutex_unlock(&x) #else #ifndef INLINE # define INLINE # include "spinlock.h" # undef INLINE #else # include "spinlock.h" #endif typedef LOCK_T thread_lock_t; # define THREAD_LOCK_INIT(x) armci_init_spinlock(&x) # define THREAD_LOCK_DESTROY(x) 0 # define THREAD_LOCK(x) armci_acquire_spinlock(&x) # define THREAD_UNLOCK(x) armci_release_spinlock(&x) #endif typedef pthread_t thread_t; # define THREAD_CREATE(th_,func_,arg_) pthread_create(th_,NULL,func_,arg_) # define THREAD_JOIN(th_,ret_) pthread_join(th_,ret_) /* structure describing a barrier */ typedef struct thread_barrier_tag { pthread_mutex_t mutex; /* Control access to barrier */ pthread_cond_t cv; /* wait for barrier */ int valid; /* set when valid */ int threshold; /* number of threads required */ int counter; /* current number of threads */ int cycle; /* alternate wait cycles (0 or 1) */ } thread_barrier_t; # define BARRIER_VALID 0xdbcafe /* support static initialization of barriers */ # define BARRIER_INITIALIZER(cnt) {\ PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER,\ BARRIER_VALID, cnt, cnt, 0} # else # error ONLY PTHREADS SUPPORT HAS BEEN IMPLEMENTED # endif # define TH2PROC(th_) (th_/mt_tpp) /* computes processor from thread id */ /* barrier functions */ int thread_barrier_init (thread_barrier_t *barrier, int count); int thread_barrier_destroy (thread_barrier_t *barrier); int thread_barrier_wait (thread_barrier_t *barrier); /* multi-threaded memory functions */ int armci_malloc_mt(void *ptr[], int bytes); int armci_free_mt(void *ptr, int th_idx); # define ARMCI_MALLOC_MT armci_malloc_mt # define ARMCI_FREE_MT armci_free_mt # define TH_INIT(p_,t_) mt_size=p_;mt_tpp=t_;\ thread_barrier_init(&mt_barrier,mt_tpp) # define TH_FINALIZE() thread_barrier_destroy(&mt_barrier) # define MT_BARRIER() if (thread_barrier_wait(&mt_barrier)==-1) armci_msg_barrier();\ thread_barrier_wait(&mt_barrier) extern int mt_size; extern int mt_tpp; extern thread_barrier_t mt_barrier; #else # define THREAD_LOCK_INIT(x) # define THREAD_LOCK_DESTROY(x) # define THREAD_LOCK(x) # define THREAD_UNLOCK(x) # define TH_INIT(p_,t_) # define TH_FINALIZE() # define MT_BARRIER armci_msg_barrier # define ARMCI_MALLOC_MT PARMCI_Malloc # define ARMCI_FREE_MT(p_,th_) PARMCI_Free(p_) #endif #endif/*UTILS_H*/ ga-5-3/armci/src-gemini/ccopy.c0000640005473000001440000002213511645616370015221 0ustar d3n000users/*************************************************************************** COPYRIGHT The following is a notice of limited availability of the code, and disclaimer which must be included in the prologue of the code and in all source listings of the code. Copyright Notice + 2009 University of Chicago Permission is hereby granted to use, reproduce, prepare derivative works, and to redistribute to others. This software was authored by: Jeff R. Hammond Leadership Computing Facility Argonne National Laboratory Argonne IL 60439 USA phone: (630) 252-5381 e-mail: jhammond@anl.gov GOVERNMENT LICENSE Portions of this material resulted from work developed under a U.S. Government Contract and are subject to the following license: the Government is granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable worldwide license in this computer software to reproduce, prepare derivative works, and perform publicly and display publicly. DISCLAIMER This computer code material was prepared, in part, as an account of work sponsored by an agency of the United States Government. Neither the United States, nor the University of Chicago, nor any of their employees, makes any warranty express or implied, or assumes any legal liability or responsibility for the accuracy, completeness, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use would not infringe privately owned rights. ***************************************************************************/ #if HAVE_CONFIG_H # include "config.h" #endif #include "copy.h" /* ONE-DIMENSIONAL COPY OPERATIONS */ #if 0 subroutine dcopy1d_n(A, B, n) integer n,i double precision A(n), B(n) ccdir$ no_cache_alloc a,b do i = 1, n B(i) = A(i) end do end #endif void c_dcopy1d_n_(const double* const restrict A, double* const restrict B, const int* const restrict n) { int i; for ( i = 0 ; i < (*n) ; i++ ){ B[i] = A[i]; } return; } #if 0 subroutine dcopy1d_u(A, B, n) integer n,n1,i double precision A(n), B(n) double precision d1, d2, d3, d4 n1 = iand(max0(n,0),3) do i = 1, n1 B(i) = A(i) end do do i = n1+1, n, 4 d1 = a(i) d2 = a(i+1) d3 = a(i+2) d4 = a(i+3) b(i) = d1 b(i+1) = d2 b(i+2) = d3 b(i+3) = d4 end do end #endif void c_dcopy1d_u_(const double* const restrict A, double* const restrict B, const int* const restrict n) { int i; int m = (*n) - ((*n)%4); for ( i = 0 ; i < m ; i+=4 ){ B[i ] = A[i ]; B[i+1] = A[i+1]; B[i+2] = A[i+2]; B[i+3] = A[i+3]; } for ( i = m ; i < (*n) ; i++ ){ B[i] = A[i]; } return; } /* TWO-DIMENSIONAL COPY OPERATIONS */ #if 0 subroutine dcopy21(rows, cols, A, ald, buf, cur) integer rows, cols integer c, r, ald, cur double precision A(ald,*), buf(ald) cur = 0 do c = 1, cols do r = 1, rows cur = cur+1 buf(cur) = A(r,c) end do end do end #endif void c_dcopy21_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict buf, int* const restrict cur) { int r, c, i=0; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ buf[i++] = A[ c * (*ald) + r ]; } } (*cur) = i; return; } #if 0 subroutine dcopy12(rows, cols, A, ald, buf, cur) integer rows, cols integer c, r, ald, cur double precision A(ald,*), buf(ald) cur = 0 do c = 1, cols do r = 1, rows cur = cur+1 A(r,c) = buf(cur) end do end do end #endif void c_dcopy12_(const int* const restrict rows, const int* const restrict cols, double* const restrict A, const int* const restrict ald, const double* const restrict buf, int* const restrict cur) { int r, c, i=0; i = 0; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] = buf[i++]; } } (*cur) = i; return; } #if 0 subroutine dcopy2d_n(rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double precision A(ald,*), B(bld,*) do c = 1, cols do r = 1, rows B(r,c) = A(r,c) end do end do end #endif void c_dcopy2d_n_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict B, const int* const restrict bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ B[ c * (*bld) + r ] = A[ c * (*ald) + r ]; } } return; } #if 0 subroutine dcopy2d_u(rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double precision A(ald,*), B(bld,*) integer r1 double precision d1, d2, d3, d4 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 c$$$ b(r,c) = a(r,c) + b(r,c) * 0 b(r,c) = a(r,c) end do do r = r1 + 1, rows, 4 d1 = a(r,c) d2 = a(r+1,c) d3 = a(r+2,c) d4 = a(r+3,c) b(r,c) = d1 b(r+1,c) = d2 b(r+2,c) = d3 b(r+3,c) = d4 c$$$ b(r,c) = a(r,c) + b(r,c) * 0 c$$$ b(r+1,c) = a(r+1,c) + b(r+1,c) * 0 c$$$ b(r+2,c) = a(r+2,c) + b(r+2,c) * 0 c$$$ b(r+3,c) = a(r+3,c) + b(r+3,c) * 0 enddo enddo end #endif void c_dcopy2d_u_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict B, const int* const restrict bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ int m = (*rows) - ((*rows)%4); for ( r = 0 ; r < m ; r+=4 ){ B[ c * (*bld) + r ] = A[ c * (*ald) + r ]; B[ c * (*bld) + r+1 ] = A[ c * (*ald) + r+1 ]; B[ c * (*bld) + r+2 ] = A[ c * (*ald) + r+2 ]; B[ c * (*bld) + r+3 ] = A[ c * (*ald) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ B[ c * (*bld) + r ] = A[ c * (*ald) + r ]; } } return; } /* THREE-DIMENSIONAL COPY OPERATIONS */ #if 0 subroutine dcopy31(rows, cols, planes, A, aldr, aldc, buf, cur) integer rows, cols, planes integer c, r, p, aldr, aldc, cur double precision A(aldr, aldc, *), buf(aldr) cur = 0 do p = 1, planes do c = 1, cols do r = 1, rows cur = cur+1 buf(cur) = A(r,c,p) end do end do end do end #endif void c_dcopy31_(const int* const restrict rows, const int* const restrict cols, const int* const restrict plns, const double* const restrict A, const int* const restrict aldr, const int* const restrict aldc, double* const restrict buf, int* const restrict cur) { int r, c, p, i=0; for ( p = 0 ; p < (*plns) ; p++ ){ for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ buf[i++] = A[ p * (*aldc) * (*aldr) + c * (*aldr) + r ]; } } } (*cur) = i; return; } #if 0 subroutine dcopy13(rows, cols, planes, A, aldr, aldc, buf, cur) integer rows, cols, planes integer c, r, p, aldr, aldc, cur double precision A(aldr, aldc, *), buf(aldr) cur = 0 do p = 1, planes do c = 1, cols do r = 1, rows cur = cur+1 A(r,c,p) = buf(cur) end do end do end do end #endif void c_dcopy13_(const int* const restrict rows, const int* const restrict cols, const int* const restrict plns, double* const restrict A, const int* const restrict aldr, const int* const restrict aldc, const double* const restrict buf, int* const restrict cur) { int r, c, p, i=0; for ( p = 0 ; p < (*plns) ; p++ ){ for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ p * (*aldc) * (*aldr) + c * (*aldr) + r ] = buf[i++]; } } } (*cur) = i; return; } ga-5-3/armci/src-gemini/armci_portals.h0000640005473000001440000001051511466071465016750 0ustar d3n000users#ifndef ARMCI_PORTALS_H #define ARMCI_PORTALS_H /* portals header file */ #include #include #include #define NUM_COMP_DSCR 4 #define ARMCI_PORTALS_PTL_NUMBER 37 #define HAS_RDMA_GET #define NUM_SERV_BUFS 1 /*corresponds to num of different armci mem regions*/ #define MAX_MEM_REGIONS 10 #define VBUF_DLEN_ORG 4*64*1024 #define VBUF_DLEN 16*1024 #define MSG_BUFLEN_DBL_VT ((VBUF_DLEN)>>3) /* VBUF_DLEN are only used in Vinod's code */ #ifdef PORTALS_USE_RENDEZ_VOUS # define MSG_BUFLEN_DBL 262144 /* for rendez-vous, this can go bigger i think */ #else # define MSG_BUFLEN_DBL 1280 /* this is smaller when rendez-vous is off */ #endif #define ARMCI_NET_ERRTOSTR(__ARMCI_ERC_) ptl_err_str[__ARMCI_ERC_] typedef enum op { ARMCI_PORTALS_PUT, ARMCI_PORTALS_NBPUT, ARMCI_PORTALS_GET, ARMCI_PORTALS_NBGET, ARMCI_PORTALS_ACC, ARMCI_PORTALS_NBACC, ARMCI_PORTALS_GETPUT, ARMCI_PORTALS_NBGETPUT } armci_portals_optype; typedef struct { void *data_ptr; /* pointer where the data should go */ long ack; /* header ack */ void *ack_ptr; /* pointer where the data should go */ void *user_ptr; #if defined(SERV_QUEUE) int imm_msg; size_t data_len; #endif } msg_tag_t; typedef struct armci_portals_desc{ int active; int tag; int dest_id; armci_portals_optype type; ptl_md_t mem_dsc; ptl_handle_md_t mem_dsc_hndl; char *bufptr; }comp_desc; /*for buffers*/ extern char *armci_portals_client_buf_allocate(int); #define BUF_ALLOCATE armci_portals_client_buf_allocate #define BUF_EXTRA_FIELD_T comp_desc* #define INIT_SEND_BUF(_field,_snd,_rcv) _snd=1;_rcv=1;_field=NULL #define GET_SEND_BUFFER _armci_buf_get #define FREE_SEND_BUFFER _armci_buf_release #define CLEAR_SEND_BUF_FIELD(_field,_snd,_rcv,_to,_op) if((_op==UNLOCK || _op==PUT || ARMCI_ACC(_op)) && _field!=NULL)x_buf_wait_ack((request_header_t *)((void **)&(_field)+1),((char *)&(_field)-sizeof(BUF_INFO_T)));_field=NULL; #define TEST_SEND_BUF_FIELD(_field,_snd,_rcv,_to,_op,_ret) #define COMPLETE_HANDLE _armci_buf_complete_nb_request #define NB_CMPL_T comp_desc* #define ARMCI_NB_WAIT(_cntr) if(_cntr){\ int rc;\ if(nb_handle->tag)\ if(nb_handle->tag==_cntr->tag)\ rc = armci_client_complete(0,nb_handle->proc,nb_handle->tag,_cntr);\ } else{\ printf("\n%d:wait null ctr\n",armci_me);} #ifndef MAX_DS #define MAX_DS 16 #endif /* structure of computing process */ typedef struct { ptl_pt_index_t ptl; ptl_process_id_t rank; ptl_handle_ni_t ni_h; ptl_handle_eq_t eq_h; ptl_process_id_t Srank; ptl_handle_ni_t Sni_h; ptl_handle_eq_t Seq_h; int outstanding_puts; int outstanding_gets; ptl_process_id_t *procid_map; ptl_process_id_t *servid_map; int free_comp_desc_index; caddr_t dsbase[MAX_DS]; size_t dssizes[MAX_DS]; ptl_match_bits_t heap_mb[MAX_DS]; ptl_md_t heap_md[MAX_DS]; ptl_handle_me_t heap_me_h[MAX_DS]; ptl_handle_md_t heap_md_h[MAX_DS]; void *brval[MAX_DS]; long serv_offs[MAX_DS]; int cur_ds; }armci_portals_proc_t; typedef struct { ptl_match_bits_t mb; ptl_md_t md; ptl_handle_me_t me_h; ptl_handle_md_t md_h; }armci_portals_serv_mem_t; typedef struct { int reg_count; int outstanding_puts; int outstanding_gets; armci_portals_serv_mem_t meminfo[MAX_MEM_REGIONS]; }armci_portals_serv_t; extern void print_mem_desc_table(void); extern int armci_init_portals(caddr_t); extern void armci_fini_portals(void); extern int armci_post_descriptor(ptl_md_t *md); extern int armci_prepost_descriptor(void* start, long bytes); extern ptl_size_t armci_get_offset(ptl_md_t md, void *ptr,int proc); extern int armci_get_md(void * start, int bytes , ptl_md_t * md, ptl_match_bits_t * mb); extern void armci_portals_put(int,void *,void *,int,void **,int ); extern void armci_portals_get(int,void *,void *,int,void **,int ); extern void comp_desc_init(); extern int armci_client_complete(ptl_event_kind_t evt,int proc_id, int nb_tag ,comp_desc * cdesc); extern void armci_portals_memsetup(long); extern MPI_Comm portals_smp_comm; #endif /* ARMCI_PORTALS_H */ ga-5-3/armci/src-gemini/spawn.c0000640005473000001440000000550511466102622015225 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* OS specific server process/thread creation and destruction * JN/03.25.2000 */ #include #include #include "armcip.h" #ifdef WIN32 /************************** Windows threads **************************/ #include #include thread_id_t armci_serv_tid; unsigned long armci_serv_handle; #ifndef NO_STDLIBC #define NEWTHREAD CreateThread #else #define NEWTHREAD _beginthreadex #endif unsigned __stdcall armci_wrap_func(void *arg) { void (*func)(void*); func = arg; /* boost the server thread priority be better responsiveness */ (void)SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_HIGHEST); func(NULL); return (unsigned)0; } void armci_create_server_thread ( void* (* func)(void*) ) { /* as we need to use std C rt library we cannot use CreateThread */ armci_serv_handle = NEWTHREAD(NULL, 0, armci_wrap_func, (void*)func, 0, &armci_serv_tid); if(!armci_serv_handle) armci_die("armci_create_server_thread: create failed",0); } void armci_terminate_server_thread() { /*int rc;*/ /* TerminateThread(armci_serv_handle,&rc);*/ } /****************************** PTHREADS *****************************/ #elif defined(PTHREADS) #include thread_id_t armci_serv_tid; void armci_create_server_thread ( void* (* func)(void*) ) { pthread_attr_t attr; int rc; if(pthread_attr_init(&attr)) armci_die("armci_create_server_thread: attr init failed",0); #if defined(AIX) || defined(SOLARIS) pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); #endif rc = pthread_create(&armci_serv_tid, &attr, func, NULL); if(rc) armci_die("armci_create_server_thread: create failed",errno); pthread_attr_destroy(&attr); } void armci_terminate_server_thread() { if(pthread_join(armci_serv_tid,NULL)) armci_die("armci_terminate_server_thread: failed",0); } #else /**************************** Unix processes ******************************/ #include #include #include pid_t server_pid= (pid_t)0; char child_stack[256*1024]; char *child_stack_top = &child_stack[256*1024-1]; void armci_create_server_process ( void* (* func)(void*) ) { pid_t pid; /* if ( (pid = fork() ) < 0) armci_die("fork failed", (int)pid); */ pid = clone(func, (void*)child_stack_top, CLONE_THREAD|CLONE_SIGHAND|CLONE_VM, NULL); if (pid == -1) { armci_die("fork failed", (int)pid); } server_pid = pid; } void armci_wait_server_process() { int stat; pid_t rc; if(!server_pid) return; rc = wait (&stat); if (rc != server_pid){ perror("ARMCI master: wait for child process (server) failed:"); } server_pid = (pid_t)0; } #endif ga-5-3/armci/src-gemini/utils.c0000640005473000001440000001456711622516074015251 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* * A barrier causes threads to wait until a set of threads has * all "reached" the barrier. The number of threads required is * set when the barrier is initialized, and cannot be changed * except by reinitializing. * * The barrier_init() and barrier_destroy() functions, * respectively, allow you to initialize and destroy the * barrier. * * The barrier_wait() function allows a thread to wait for a * barrier to be completed. One thread (the one that happens to * arrive last) will return from barrier_wait() with the status * -1 on success -- others will return with 0. The special * status makes it easy for the calling code to cause one thread * to do something in a serial region before entering another * parallel section of code. */ #include #include #include #include #include #include #include #include #include "utils.h" #define DEBUG_ int mt_size; /* number of processes: needed for collective mt ops */ int mt_tpp; /* number of threads used for collective ops */ thread_barrier_t mt_barrier; /* static barrier used for multi-threaded MT_BARRIER */ int armci_malloc_mt(void *ptr[], int bytes) { int rc, th_size, i, j; th_size = mt_size * mt_tpp; if (thread_barrier_wait(&mt_barrier)==-1) { rc = PARMCI_Malloc(ptr, bytes * mt_tpp); #ifdef DEBUG printf("bytes=%d\n", bytes); for (i = 0; i < mt_size; i++) printf("ptr[%d]=%p\n",i,ptr[i]); #endif /* at this point proc ptrs are at beggining of the list */ for (i = mt_size - 1; i >= 0; i--) for (j = mt_tpp - 1; j >= 0; j--) { #ifdef DEBUG printf("mt_size=%d,mt_tpp=%d,i=%d,j=%d,ptr[%d]=%p+%d\n", mt_size,mt_tpp,i,j,i*mt_tpp+j,ptr[i],j*bytes); fflush(stdout); #endif ptr[i * mt_tpp + j] = ((char*)ptr[i]) + j * bytes; } } thread_barrier_wait(&mt_barrier); return rc; } int armci_free_mt(void *ptr, int th_idx) { } #ifdef POSIX_THREADS /* * Initialize a barrier for use. */ int thread_barrier_init (thread_barrier_t *barrier, int count) { int status; barrier->threshold = barrier->counter = count; barrier->cycle = 0; status = pthread_mutex_init (&barrier->mutex, NULL); if (status != 0) return status; status = pthread_cond_init (&barrier->cv, NULL); if (status != 0) { pthread_mutex_destroy (&barrier->mutex); return status; } barrier->valid = BARRIER_VALID; return 0; } /* * Destroy a barrier when done using it. */ int thread_barrier_destroy (thread_barrier_t *barrier) { int status, status2; if (barrier->valid != BARRIER_VALID) return EINVAL; status = pthread_mutex_lock (&barrier->mutex); if (status != 0) return status; /* * Check whether any threads are known to be waiting; report * "BUSY" if so. */ if (barrier->counter != barrier->threshold) { pthread_mutex_unlock (&barrier->mutex); return EBUSY; } barrier->valid = 0; status = pthread_mutex_unlock (&barrier->mutex); if (status != 0) return status; /* * If unable to destroy either 1003.1c synchronization * object, return the error status. */ status = pthread_mutex_destroy (&barrier->mutex); status2 = pthread_cond_destroy (&barrier->cv); return (status == 0 ? status : status2); } /* * Wait for all members of a barrier to reach the barrier. When * the count (of remaining members) reaches 0, broadcast to wake * all threads waiting. */ int thread_barrier_wait (thread_barrier_t *barrier) { int status, cancel, tmp, cycle; if (barrier->valid != BARRIER_VALID) return EINVAL; status = pthread_mutex_lock (&barrier->mutex); if (status != 0) return status; cycle = barrier->cycle; /* Remember which cycle we're on */ if (--barrier->counter == 0) { barrier->cycle = !barrier->cycle; barrier->counter = barrier->threshold; status = pthread_cond_broadcast (&barrier->cv); /* * The last thread into the barrier will return status * -1 rather than 0, so that it can be used to perform * some special serial code following the barrier. */ if (status == 0) status = -1; } else { /* * Wait with cancellation disabled, because barrier_wait * should not be a cancellation point. */ pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &cancel); /* * Wait until the barrier's cycle changes, which means * that it has been broadcast, and we don't want to wait * anymore. */ while (cycle == barrier->cycle) { status = pthread_cond_wait ( &barrier->cv, &barrier->mutex); if (status != 0) break; } pthread_setcancelstate (cancel, &tmp); } /* * Ignore an error in unlocking. It shouldn't happen, and * reporting it here would be misleading -- the barrier wait * completed, after all, whereas returning, for example, * EINVAL would imply the wait had failed. The next attempt * to use the barrier *will* return an error, or hang, due * to whatever happened to the mutex. */ pthread_mutex_unlock (&barrier->mutex); return status; /* error, -1 for waker, or 0 */ } #endif #if 0 /*** NAME timing.c PURPOSE Timing routines for calculating the execution time: void start_timer(void); Set the timer. double elapsed_time(void); Return the timing elapsed since the timer has been set. NOTES Jialin Ju - Oct 16, 1995 Created. ***/ /* Timing routines that use standard Unix gettingofday() */ static struct timezone tz; static struct timeval start_time, finish_time; /* Start measuring a time delay */ void start_timer(void) { gettimeofday( &start_time, &tz); } /* Retunrn elapsed time in milliseconds */ double elapsed_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*(finish_time.tv_sec - start_time.tv_sec) + (finish_time.tv_usec - start_time.tv_usec)/1000.0 ); } /* Return the stopping time in milliseconds */ double stop_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*finish_time.tv_sec + finish_time.tv_usec/1000.0); } #endif ga-5-3/armci/src-gemini/code_options.h0000640005473000001440000001234111466071465016575 0ustar d3n000users/* Questions: ORNL - tipparajuv@ornl.gov CRAY - ryan@cray.com */ /* --------------------------------------------------------------------------- *\ PORTALS_USE_RENDEZ_VOUS ======================= When the number of PEs gets very large, the data server is required to have buffer space available for all possible incoming messages which is defined by PORTALS_MAX_DESCRIPTORS = (MAX_BUFS+MAX_SMALL_BUFS). For each PE, the DS must have at least: min_memory_per_pe = PORTALS_MAX_BUFS*PORTALS_BUF_SIZE + PORTALS_MAX_SMALL_BUFS*PORTALS_SMALL_BUF_SIZE This becomes a memory constraint at large core count. Rendez-vous message is one mechanism to get around requiring the DS to have buffer space for all messages. When rendez-vous (RZV) messaging is enabled, the messages what use the large buffers no longer send the entire buffer "eagerly". Instead, only the data request (request_header_t) gets sent to the data server. When the data server is ready to handle the request, it "pulls" the entire buffer over via a portals_get operation. One can immediately see that this can lead to a slow down in performance, since the data server is idle when it has to pull the data over. This is the price paid when you remove the bufferign for those messsages. Ideally, when the DS is pulling the message, it could be processing another request. This double buffering technique needs to be programmed in. Care must be taken to ensure proper ARMCI behavior. The next request handled can not be from the same PE, nor can it be a FENCE operation ... all other (?) requests/operations can be double buffered. \* --------------------------------------------------------------------------- */ # define PORTALS_USE_RENDEZ_VOUS /* --------------------------------------------------------------------------- *\ PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE ===================================== Another means to reduce the required buffer needed by the data server is to limit the number of cores that can talk to the data server at any given moment. When this options is turned on, only 1 request per node is allowed to be in the buffer of any given data server. On a 10 core node, the size of the buffer required by the data server is reduced by more than an order of magnitude. You get more than an order of magnitude, because you don't need to reserve space for any of the small buffers, since you can only have one small or one large from any given node in the ds buffer at any one time. Another major benefit is you can increase MAX_BUFS and MAX_SMALL_BUFS to increase concurrency without affecting the DS's buffer size. Can be used with PORTALS_USE_RENDEZ_VOUS. notes: every request needs to respond with an ack, even gets. acks actually send data when we limit remote request ... the ack response is needed to trigger that the outstanding request has been finished by the data server ... the ack zeros out the index in the active_requests_by_node array. \* --------------------------------------------------------------------------- */ # define PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE_TURNED_OFF /* --------------------------------------------------------------------------- *\ PORTALS_AFFINITY ================ When initializing compute processes and data servers, the affinity passed in by aprun/alps is ignored. Compute processes are bound strictly to a particular core. Cores are evenly divided between sockets keeping the last core (mask = 1 << (ncpus-1)) free for the data server. If the node is not fully subscribed, then the data server is bound to the last core on the node (mask = 1 << (ncpus-1)); otherwise, the data server is "free floating" (mask = (1 << ncpus)-1) on a fully subscribed node. \* --------------------------------------------------------------------------- */ # define PORTALS_AFFINITY # define PORTALS_AFFINITY_NSOCKETS 2 /* --------------------------------------------------------------------------- *\ CRAY_USE_MDMD_COPY ================== Used MDMD copy instead of PtlGetRegion for on-node "local" transfers \* --------------------------------------------------------------------------- */ # define CRAY_USE_MDMD_COPY /* --------------------------------------------------------------------------- *\ ORNL_USE_DS_FOR_REMOTE_GETS =========================== Vinod informed us of a modification that can be made to enable the use of the data server for remote gets. Without this option, direct gets are used. This can cause severe network congestion, because many armci_gets are not stride 1. The data server packs those gets into contiguous blocks and sends them back as a single put. However, the direct gets, require many small messages. Unfortunately, there is a small bug in the DS for remote gets. This bug may cause the program to abort or print out the following message: %d: server wrote data at unexpected offset %d This is a bug actively being worked on @ CRAY and ORNL. \* --------------------------------------------------------------------------- */ # define ORNL_USE_DS_FOR_REMOTE_GETS # define CRAY_USE_ARMCI_CLIENT_BUFFERS ga-5-3/armci/src-gemini/pack.c0000640005473000001440000002711411466102622015013 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: pack.c,v 1.36.10.1 2006-12-14 13:24:37 manoj Exp $ */ #include "armcip.h" #include #if !defined(ACC_COPY) &&!defined(CRAY_YMP) &&!defined(CYGNUS)&&!defined(CYGWIN) &&!defined(BGML) # define REMOTE_OP #endif #if defined(REMOTE_OP) # define OP_STRIDED armci_rem_strided #else # define OP_STRIDED(_a,_b,_c,_d,_e,_f,_g,_h,_i,_delete1,_j,_hdl)\ armci_op_strided(_a,_b,_c,_d,_e,_f,_g,_h,_i,_j,_hdl) #endif /*\ determine if patch fits in the ARMCI buffer, and if not * at which stride level (patch dim) need to decompose it * *fit_level is the value of stride level to perform packing at * *nb means number of elements of count[*fit_level] that fit in buf \*/ static void armci_fit_buffer(int count[], int stride_levels, int* fit_level, int *nb, int bufsize) { int bytes=1, sbytes=1; int level; /* find out at which stride level BUFFER becomes too small */ for(level=0; level<= stride_levels; level++){ sbytes = bytes; /* store #bytes at current level to save div cost later */ bytes *= count[level]; if(bufsize < bytes) break; } /* buffer big enough for entire patch */ if(bufsize >= bytes){ *fit_level = stride_levels; *nb = count[stride_levels]; return; } /* buffer too small */ switch (level){ case 0: /* smaller than a single column */ *fit_level = 0; *nb = bufsize; break; case -1: /* one column fits */ *fit_level = 0; *nb = sbytes; break; default: /* it could keep nb instances of (level-1)-dimensional patch */ *fit_level = level; *nb = bufsize/sbytes; } } /*\ The function decomposes a multi-dimensional patch so that it fits in the * internal ARMCI buffer. * It works by recursively reducing patch dimension until some portion of the * subpatch fits in the buffer. * The recursive process is controlled by "fit_level" and "nb" arguments, * which have to be set to -1 at the top-level of the recursion tree. * * Argument last and variable looplast are used to indicate to sending/packing * routine that we are dealing with the last portion of the request. * Due to the recursive nature of packing code, the algorithm is following: * if last=1 then internal for loop passes 1 for the last chunk * else it passes 0 * \*/ int armci_pack_strided(int op, void* scale, int proc, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, ext_header_t *h, int fit_level, int nb, int last,armci_ihdl_t nb_handle) { int rc=0, sn, bufsize=BUFSIZE,noswap=0; void *src, *dst; #ifdef REMOTE_OP int flag=0; #else int flag=1; #endif int b; static int call_count; #ifdef STRIDED_GET_BUFLEN if(op==GET) bufsize=STRIDED_GET_BUFLEN; # ifdef HITACHI else if(stride_levels || ARMCI_ACC(op)) bufsize=MSG_BUFLEN_SMALL-PAGE_SIZE; # endif #endif #if (defined(GM_) || defined(VIA_) || defined(VAPI_)) /*we cant assume that the entire available buffer will be used for data, fact that the header and descriptor also go in the same buffer should be considered while packing. */ bufsize-=(sizeof(request_header_t)+(MAX_STRIDE_LEVEL+4)*sizeof(int)+2*sizeof(void *)); # if defined(PIPE_BUFSIZE) && defined(MAX_PIPELINE_CHUNKS) bufsize-=8*MAX_PIPELINE_CHUNKS; # endif #endif #ifdef BALANCE_FACTOR /* Added the following for balancing buffers */ if(op==PUT){ int bytes=1, i; for(i=0; i<= stride_levels; i++) bytes *= count[i]; if(bytes > bufsize && bytes/bufsize < 3 && bytes%bufsize < BALANCE_BUFSIZE){ /* bytes div bufsize - 1 is to increase the balence factor for 3 buffer case */ bufsize = bytes/ (bytes/bufsize - 1 + BALANCE_FACTOR); noswap = 1; /*** yuck: if set to 1, error in buffers.c ***/ } bytes = bufsize%8; bufsize -= bytes; } #endif /* determine decomposition of the patch to fit in the buffer */ if(fit_level<0){ armci_fit_buffer(count, stride_levels, &fit_level, &nb, bufsize); last = 1; } // printf("%s [cp]: pack_strided: flag=%d, bufsize=%ld; fit_level=%d; stride_level=%d; nb=%d\n",Portals_ID(),flag,(long) bufsize,fit_level,stride_levels,nb); if(fit_level == stride_levels){ /* we can fit subpatch into the buffer */ int chunk = count[fit_level]; int dst_stride, src_stride; if(nb == chunk){ /* take shortcut when whole patch fits in the buffer */ if(h) h->last = last?1:0; if(nb_handle && call_count ){ nb_handle->bufid=NB_MULTI; call_count++; } return(OP_STRIDED(op, scale, proc, src_ptr, src_stride_arr, dst_ptr,dst_stride_arr,count,stride_levels,h,flag,nb_handle)); } if(fit_level){ dst_stride = dst_stride_arr[fit_level -1]; src_stride = src_stride_arr[fit_level -1]; }else{ dst_stride = src_stride = 1; } if(op == GET || noswap == 1) b =nb; else{ b = chunk%nb; if(b==0)b=nb; } /* put smallest piece first */ for(sn = 0; sn < chunk; ){ src = (char*)src_ptr + src_stride* sn; dst = (char*)dst_ptr + dst_stride* sn; count[fit_level] = ARMCI_MIN(b, chunk-sn); /*modify count for this level*/ if(h) h->last = (last && ((sn+b)>=chunk))? 1: 0 ; if(nb_handle)call_count++; rc = OP_STRIDED( op, scale, proc, src, src_stride_arr, dst,dst_stride_arr,count,fit_level,h,flag,nb_handle); if(rc) break; sn += b; b = nb; } count[fit_level] = chunk; /* restore original count */ } else { for(sn = 0; sn < count[stride_levels]; sn++){ int looplast =0; src = (char*)src_ptr + src_stride_arr[stride_levels -1]* sn; dst = (char*)dst_ptr + dst_stride_arr[stride_levels -1]* sn; if(last && (sn == count[stride_levels]-1)) looplast =1; rc = armci_pack_strided(op, scale, proc, src, src_stride_arr, dst, dst_stride_arr, count, stride_levels -1, h,fit_level, nb, looplast,nb_handle); if(rc) return rc; } } if(nb_handle && call_count ) nb_handle->bufid=NB_MULTI; return rc; } /*\ decompose strided data into chunks and call func on each chunk \*/ void armci_dispatch_strided(void *ptr, int stride_arr[], int count[], int strides, int fit_level, int nb, int bufsize, void (*fun)(void*,int*,int*,int,void*), void *arg) { int sn,first_call=0; void *ptr_upd; /* determine decomposition of the patch to fit in the buffer */ if(fit_level<0){ first_call=1; armci_fit_buffer(count, strides, &fit_level, &nb, bufsize); } if(fit_level == strides){ /* we can fit subpatch into the buffer */ int chunk = count[fit_level]; int stride_upd; # ifdef PIPE_MEDIUM_BUFSIZE_ /* for first call we adjust nb for performance in medium request */ if(first_call && strides==0) if(chunk<2*bufsize && chunk>PIPE_MEDIUM_BUFSIZE) nb = PIPE_MEDIUM_BUFSIZE; # endif if(nb == chunk){ /* take shortcut when whole patch fits in the buffer */ fun(ptr, stride_arr, count, strides, arg); } if(fit_level) stride_upd = stride_arr[fit_level -1]; else stride_upd = 1; for(sn = 0; sn < chunk; sn += nb){ ptr_upd = (char*)ptr + stride_upd* sn; count[fit_level] = ARMCI_MIN(nb, chunk-sn); /*modify count for this level*/ fun(ptr_upd, stride_arr, count, fit_level, arg); } count[fit_level] = chunk; /* restore original count */ }else for(sn = 0; sn < count[strides]; sn++){ ptr_upd = (char*)ptr + stride_arr[strides -1]* sn; armci_dispatch_strided(ptr_upd, stride_arr, count, strides -1, fit_level, nb, bufsize, fun, arg); } } /* how much space is needed to move data + reduced descriptor ? */ int armci_vector_bytes( armci_giov_t darr[], int len) { int i, bytes=0; for(i=0; isrc_ptr_array=NULL; /* go through the sets looking for set to be split */ for(s=0;sBUFSIZE1){ split =(BUFSIZE1 -bytes-2*sizeof(int))/(darr[s].bytes +sizeof(void*)); if(split == 0) s--; /* no room available - do not split */ break; }else bytes+=csize; if(BUFSIZE1 -bytes < 64) break; /* stop here if almost full */ } if(s==len)s--; /* adjust loop counter should be < number of sets */ *nlen = s+1; if(split){ /* save the value to be overwritten only if "save" is not filled */ if(!save->src_ptr_array)*save= darr[s]; /* split the set: reduce # of elems, "extra" keeps info for rest of set*/ *extra = darr[s]; darr[s].ptr_array_len = split; extra->ptr_array_len -= split; extra->src_ptr_array = &extra->src_ptr_array[split]; extra->dst_ptr_array = &extra->dst_ptr_array[split]; } } int armci_pack_vector(int op, void *scale, armci_giov_t darr[],int len, int proc,armci_ihdl_t nb_handle) { armci_giov_t extra; /* keeps data remainder of set to be processed in chunks */ armci_giov_t save; /* keeps original value of set to be processed in chunks */ armci_giov_t *ndarr; /* points to first array element to be processed now */ int rc=0, nlen, count=0; ndarr = darr; save.src_ptr_array=NULL; /* indicates that save slot is empty */ while(len){ armci_split_dscr_array(ndarr, len, &extra, &nlen, &save); # if defined(REMOTE_OP) rc = armci_rem_vector(op, scale, ndarr,nlen,proc,0,nb_handle); # else if(ARMCI_ACC(op))rc=armci_acc_vector(op,scale,ndarr,nlen,proc); else rc = armci_copy_vector(op,ndarr,nlen,proc); # endif if(rc) break; /* non-NULL pointer indicates that set was split */ if(extra.src_ptr_array){ if(nb_handle) { nb_handle->bufid = NB_MULTI; /*can be set multiple times here; but not reset here*/ } ndarr[nlen-1]=extra; /* set the pointer to remainder of last set */ nlen--; /* since last set not done in full need to process it again */ }else{ if(save.src_ptr_array){ ndarr[0]=save; save.src_ptr_array=NULL; /* indicates that save slot is empty */ } if(nlen==0) armci_die("vector packetization problem:buffer too small",BUFSIZE1); } len -=nlen; ndarr +=nlen; count ++; } return rc; } ga-5-3/armci/src-gemini/memlock.c0000640005473000001440000001622011466102622015520 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: memlock.c,v 1.24.2.3 2007-08-29 17:32:32 manoj Exp $ */ #include "armcip.h" #include "locks.h" #include "copy.h" #include "memlock.h" #include #define DEBUG_ 0 #define INVALID_VAL -9999999 #ifdef DATA_SERVER # define CORRECT_PTR #endif size_t armci_mem_offset=0; /* We start by using table: assign address of local variable set to 1 * On shmem systems, this addres is overwritten by a shared memory location * when memlock array is allocated in armci_init * Therefore, any process within shmem node can reset armci_use_memlock_table * to "not used" when offset changes. Since the variable is in shmem, everybody * on that SMP node will see the change and use the same locking functions */ int init_use_memlock_table=1; int *armci_use_memlock_table=&init_use_memlock_table; static int locked_slot=INVALID_VAL; volatile double armci_dummy_work=0.; void **memlock_table_array; /* constants for cache line alignment */ # define CALGN 64 # define LOG_CALGN 6 #define ALIGN_ADDRESS(x) (char*)((((unsigned long)x) >> LOG_CALGN) << LOG_CALGN) static memlock_t table[MAX_SLOTS]; /*\ simple locking scheme that ignores addresses \*/ void armci_lockmem_(void *pstart, void *pend, int proc) { #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif if(DEBUG_){ printf("%d: armci_lockmem_ proc=%d lock=%d\n",armci_me,proc,lock); fflush(stdout); } NATIVE_LOCK(lock,proc); if(DEBUG_){ printf("%d: armci_lockmem_ done\n",armci_me); fflush(stdout); } } void armci_unlockmem_(int proc) { #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif if(DEBUG_){ printf("%d: armci_unlockmem_ proc=%d lock=%d\n",armci_me,proc,lock); fflush(stdout); } NATIVE_UNLOCK(lock,proc); } /*\ idle for a time proportional to factor \*/ void armci_waitsome(int factor) { int i=factor*100000; if(factor <= 1) armci_dummy_work =0.; if(factor < 1) return; while(--i){ armci_dummy_work = armci_dummy_work + 1./(double)i; } } /*\ acquire exclusive LOCK to MEMORY area owned by process "proc" * . only one area can be locked at a time by the calling process * . must unlock it with armci_unlockmem \*/ void armci_lockmem(void *start, void *end, int proc) { register void* pstart, *pend; register int slot, avail=0; int turn=0, conflict=0; memlock_t *memlock_table; #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif #ifdef CORRECT_PTR if(! *armci_use_memlock_table){ /* if offset invalid, use dumb locking scheme ignoring addresses */ armci_lockmem_(start, end, proc); return; } # ifndef SGIALTIX /* when processes are attached to a shmem region at different addresses, * addresses written to memlock table must be adjusted to the node master */ if(armci_mem_offset){ start = armci_mem_offset + (char*)start; end = armci_mem_offset + (char*)end; } # endif #endif if(DEBUG_){ printf("%d: calling armci_lockmem for %d range %p -%p\n", armci_me, proc, start,end); fflush(stdout); } memlock_table = (memlock_t*)memlock_table_array[proc]; #ifdef ALIGN_ADDRESS /* align address range on cache line boundary to avoid false sharing */ pstart = ALIGN_ADDRESS(start); pend = CALGN -1 + ALIGN_ADDRESS(end); #else pstart=start; pend =end; #endif #ifdef CRAY_SHMEM { /* adjust according the remote process raw address */ long bytes = (long) ((char*)pend-(char*)pstart); extern void* armci_shmalloc_remote_addr(void *ptr, int proc); pstart = armci_shmalloc_remote_addr(pstart, proc); pend = (char*)pstart + bytes; } #endif while(1){ NATIVE_LOCK(lock,proc); armci_get(memlock_table, table, sizeof(table), proc); /* armci_copy(memlock_table, table, sizeof(table));*/ /* inspect the table */ conflict = 0; avail =-1; for(slot = 0; slot < MAX_SLOTS; slot ++){ /* nonzero starting address means the slot is occupied */ if(table[slot].start == NULL){ /* remember a free slot to store address range */ avail = slot; }else{ /*check for conflict: overlap between stored and current range*/ if( (pstart >= table[slot].start && pstart <= table[slot].end) || (pend >= table[slot].start && pend <= table[slot].end) ){ conflict = 1; break; } /* printf("%d: locking %ld-%ld (%d) conflict\n", armci_me, */ } } if(avail != -1 && !conflict) break; NATIVE_UNLOCK(lock,proc); armci_waitsome( ++turn ); } /* we got the memory lock: enter address into the table */ table[avail].start = pstart; table[avail].end = pend; armci_put(table+avail,memlock_table+avail,sizeof(memlock_t),proc); FENCE_NODE(proc); NATIVE_UNLOCK(lock,proc); locked_slot = avail; } /*\ release lock to the memory area locked by previous call to armci_lockemem \*/ void armci_unlockmem(int proc) { void *null[2] = {NULL,NULL}; memlock_t *memlock_table; #ifdef CORRECT_PTR if(! *armci_use_memlock_table){ /* if offset invalid, use dumb locking scheme ignoring addresses */ armci_unlockmem_(proc); return; } #endif #ifdef DEBUG if(locked_slot == INVALID_VAL) armci_die("armci_unlock: empty",0); if(locked_slot >= MAX_SLOTS || locked_slot <0) armci_die("armci_unlock: corrupted slot?",locked_slot); #endif memlock_table = (memlock_t*)memlock_table_array[proc]; armci_put(null,&memlock_table[locked_slot].start,2*sizeof(void*),proc); } /*\ based on address for set by master, determine correction for * memory addresses set in memlock table * if the correction/offset ever changes stop using memlock table locking \*/ void armci_set_mem_offset(void *ptr) { extern size_t armci_mem_offset; size_t off; static int first_time=1; volatile void *ref_ptr; ARMCI_PR_DBG("enter",0); /* do not care if memlock not used */ if(! *armci_use_memlock_table) return; if(!ptr) armci_die("armci_set_mem_offset : null ptr",0); ref_ptr = *(void**)ptr; off = (size_t)((char*)ref_ptr - (char*)ptr); if(first_time){ armci_mem_offset =off; first_time =0; if(DEBUG_){ printf("%d memlock offset=%ld ref=%p ptr=%p\n",armci_me, (long)armci_mem_offset, ref_ptr, ptr); fflush(stdout); } }else{ if(armci_mem_offset != off){ *armci_use_memlock_table =0; fprintf(stderr, "%d: WARNING:armci_set_mem_offset: offset changed %ld to %ld\n", armci_me, (long)armci_mem_offset, (long)off); fflush(stdout); } } } ga-5-3/armci/src-gemini/armci.h0000640005473000001440000004002111711747214015172 0ustar d3n000users/*$id$*/ /* ARMCI header file */ #ifndef _ARMCI_H #define _ARMCI_H /* for size_t */ #include #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif typedef unsigned long long u64Int; typedef long long s64Int; extern int armci_sameclusnode(int proc); typedef struct { void **src_ptr_array; void **dst_ptr_array; int ptr_array_len; int bytes; } armci_giov_t; typedef long armci_size_t; extern int armci_notify(int proc); extern int armci_notify_wait(int proc,int *pval); extern int ARMCI_Init(void); /* initialize ARMCI */ extern int ARMCI_Init_args(int *argc, char ***argv); extern void ARMCI_Barrier(void); /* ARMCI Barrier*/ extern int ARMCI_Put(void *src, void* dst, int bytes, int proc); extern int ARMCI_Put_flag(void *src, void* dst,int bytes,int *f,int v,int proc); #define ARMCI_Put1(_s,_d,_b,_p) memcpy(_d,_s,_b), 0 extern int ARMCI_PutS( /* strided put */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ); extern int ARMCI_PutS_flag_dir( /* put with flag that uses direct put */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int *flag, /* pointer to remote flag */ int val, /* value to set flag upon completion of data transfer */ int proc /* remote process(or) ID */ ); extern int ARMCI_PutS_flag( void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int *flag, /* pointer to remote flag */ int val, /* value to set flag upon completion of data transfer */ int proc /* remote process(or) ID */ ); extern int ARMCI_Acc(int optype, void *scale, void *src, void *dst, int bytes, int proc); extern int ARMCI_AccS( /* strided accumulate */ int optype, /* operation */ void *scale, /* scale factor x += scale*y */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ); extern int ARMCI_Get(void *src, void* dst, int bytes, int proc); extern int ARMCI_GetS( /* strided get */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ); extern int ARMCI_GetV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int ARMCI_PutV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int ARMCI_AccV( int op, /* operation code */ void *scale, /* scaling factor for accumulate */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int ARMCI_PutValueInt(int src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc /* remote process (or) ID */ ); extern int ARMCI_PutValueLong(long src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc /* remote process (or) ID */ ); extern int ARMCI_PutValueFloat(float src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc /* remote process (or) ID */ ); extern int ARMCI_PutValueDouble(double src,/* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc /* remote process (or) ID */ ); extern int ARMCI_GetValueInt(void *src, int proc); extern long ARMCI_GetValueLong(void *src, int proc); extern float ARMCI_GetValueFloat(void *src, int proc); extern double ARMCI_GetValueDouble(void *src, int proc); extern int ARMCI_Malloc(void* ptr_arr[], armci_size_t bytes); extern int ARMCI_Free(void *ptr); extern void* ARMCI_Malloc_local(armci_size_t bytes); extern int ARMCI_Free_local(void *ptr); extern int ARMCI_Same_node(int proc); extern void ARMCI_Finalize(); /* terminate ARMCI */ extern void ARMCI_Error(char *msg, int code); extern void ARMCI_Fence(int proc); extern void ARMCI_DoFence(int proc); extern void ARMCI_AllFence(void); extern int ARMCI_Rmw(int op, void *ploc, void *prem, int extra, int proc); extern void ARMCI_Cleanup(void); extern int ARMCI_Create_mutexes(int num); extern int ARMCI_Destroy_mutexes(void); extern void ARMCI_Lock(int mutex, int proc); extern void ARMCI_Unlock(int mutex, int proc); extern void ARMCI_Set_shm_limit(unsigned long shmemlimit); extern int ARMCI_Uses_shm(); extern void ARMCI_Copy(void *src, void *dst, int n); #define FAIL -1 #define FAIL2 -2 #define FAIL3 -3 #define FAIL4 -4 #define FAIL5 -5 #define FAIL6 -6 #define FAIL7 -7 #define FAIL8 -8 #define ARMCI_SWAP 10 #define ARMCI_SWAP_LONG 11 #define ARMCI_FETCH_AND_ADD 12 #define ARMCI_FETCH_AND_ADD_LONG 13 #define ARMCI_ACC_OFF 36 #define ARMCI_ACC_INT (ARMCI_ACC_OFF + 1) #define ARMCI_ACC_DBL (ARMCI_ACC_OFF + 2) #define ARMCI_ACC_FLT (ARMCI_ACC_OFF + 3) #define ARMCI_ACC_CPL (ARMCI_ACC_OFF + 4) #define ARMCI_ACC_DCP (ARMCI_ACC_OFF + 5) #define ARMCI_ACC_LNG (ARMCI_ACC_OFF + 6) #define ARMCI_ACC_RA (ARMCI_ACC_OFF + 7) #define ARMCI_MAX_STRIDE_LEVEL 8 #ifdef BGML #define ARMCI_CRITICAL_SECTION_ENTER() BGML_CriticalSection_enter(); #define ARMCI_CRITICAL_SECTION_EXIT() BGML_CriticalSection_exit(); #else #define ARMCI_CRITICAL_SECTION_ENTER() #define ARMCI_CRITICAL_SECTION_EXIT() #endif /************ locality information **********************************************/ typedef int armci_domain_t; #define ARMCI_DOMAIN_SMP 0 /* SMP node domain for armci_domain_XXX calls */ extern int armci_domain_nprocs(armci_domain_t domain, int id); extern int armci_domain_id(armci_domain_t domain, int glob_proc_id); extern int armci_domain_glob_proc_id(armci_domain_t domain, int id, int loc_proc_id); extern int armci_domain_my_id(armci_domain_t domain); extern int armci_domain_count(armci_domain_t domain); extern int armci_domain_same_id(armci_domain_t domain, int proc); extern int armci_smp_master(int); /* PVM group * On CrayT3E: the default group is the global group which is (char *)NULL * It is the only working group. * On Workstations: the default group is "mp_working_group". User can set * the group name by calling the ARMCI_PVM_init (defined * in message.c) and passing the group name to the library. */ extern char *mp_group_name; /*********************stuff for non-blocking API******************************/ /*\ the request structure for non-blocking api. rmo: it appears that we need measure the size of armci_ireq_t and set the size of armci_hdl_t accordingly. this really needs to be re-designed. \*/ #define ARMCI_ONESIDED_SIZEOF_IREQ 21016 typedef struct { char data[ARMCI_ONESIDED_SIZEOF_IREQ]; } armci_hdl_t; #define armci_req_t armci_hdl_t typedef int ARMCI_Group; extern void ARMCI_Group_create(int n, int *pid_list, ARMCI_Group *group_out); extern void ARMCI_Group_create_child(int n, int *pid_list, ARMCI_Group *group_out, ARMCI_Group *group_parent); extern void ARMCI_Group_free(ARMCI_Group *group); extern int ARMCI_Group_rank(ARMCI_Group *group, int *rank); extern void ARMCI_Group_size(ARMCI_Group *group, int *size); extern void ARMCI_Group_set_default(ARMCI_Group *group); extern void ARMCI_Group_get_default(ARMCI_Group *group_out); extern void ARMCI_Group_get_world(ARMCI_Group *group_out); extern int ARMCI_Malloc_group(void *ptr_arr[], armci_size_t bytes,ARMCI_Group *group); extern int ARMCI_Free_group(void *ptr, ARMCI_Group *group); extern int ARMCI_NbPut(void *src, void* dst, int bytes, int proc,armci_hdl_t* nb_handle); extern int ARMCI_NbPutS( /* strided put */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbAccS( /* strided accumulate */ int optype, /* operation */ void *scale, /* scale factor x += scale*y */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbGet(void *src, void* dst, int bytes, int proc,armci_hdl_t* nb_handle); extern int ARMCI_NbGetS( /* strided get */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handler/*armci_non-blocking request handle*/ ); extern int ARMCI_NbGetV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbPutV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbAccV( int op, /* operation code */ void *scale, /* scaling factor for accumulate */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbPutValueInt(int src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc, /* remote process (or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle */ ); extern int ARMCI_NbPutValueLong(long src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc, /* remote process (or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle */ ); extern int ARMCI_NbPutValueFloat(float src,/* value in a register to put */ void *dst,/* dest starting addr to put data */ int proc, /* remote process (or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle */ ); extern int ARMCI_NbPutValueDouble(double src,/* value in a register to put */ void *dst,/* dest starting addr to put data*/ int proc, /* remote process (or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle */ ); extern int ARMCI_Wait(armci_hdl_t* nb_handle); /*non-blocking request handle*/ extern int ARMCI_Test(armci_hdl_t* nb_handle); /*non-blocking request handle*/ extern int ARMCI_WaitAll (void); extern int ARMCI_WaitProc (int proc); extern void ARMCI_SET_AGGREGATE_HANDLE(armci_hdl_t* nb_handle); extern void ARMCI_UNSET_AGGREGATE_HANDLE(armci_hdl_t* nb_handle); extern void ARMCI_INIT_HANDLE(void *hdl); /* -------------- ARMCI Non-collective memory allocator ------------- */ typedef struct armci_meminfo_ds { char * armci_addr; /* remote address of the creator which can be used in ARMCI communication */ char *addr; /* local address of creator which can be used in to set SMP memoffset, armci_set_mem_offset() */ size_t size; /* size of remote pid's segment (bytes) */ int cpid; /* armci pid of creator */ long idlist[64]; } armci_meminfo_t; extern void ARMCI_Memget(size_t bytes, armci_meminfo_t *meminfo, int memflg); extern void* ARMCI_Memat(armci_meminfo_t *meminfo, long offset); extern void ARMCI_Memdt(armci_meminfo_t *meminfo, int memflg); extern void ARMCI_Memctl(armci_meminfo_t *meminfo); /* ------------------- ARMCI Checkpointing/Recovery ----------------- */ #ifdef DO_CKPT #define ARMCI_CKPT 0 #define ARMCI_RESTART 1 typedef struct { void **ptr_arr; size_t *sz; int *saveonce; int count; }armci_ckpt_ds_t; void ARMCI_Ckpt_create_ds(armci_ckpt_ds_t *ckptds, int count); int ARMCI_Ckpt_init(char *filename, ARMCI_Group *grp, int savestack, int saveheap, armci_ckpt_ds_t *ckptds); int ARMCI_Ckpt(int rid); void ARMCI_Ckpt_finalize(int rid); #define ARMCI_Restart_simulate armci_irecover # ifdef MPI ARMCI_Group * ARMCI_Get_ft_group(); # endif #endif /* ------------------------------------------------------------------ */ #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* _ARMCI_H */ ga-5-3/armci/src-gemini/caccumulate.c0000640005473000001440000006037011645616370016375 0ustar d3n000users/*************************************************************************** COPYRIGHT The following is a notice of limited availability of the code, and disclaimer which must be included in the prologue of the code and in all source listings of the code. Copyright Notice + 2009 University of Chicago Permission is hereby granted to use, reproduce, prepare derivative works, and to redistribute to others. This software was authored by: Jeff R. Hammond Leadership Computing Facility Argonne National Laboratory Argonne IL 60439 USA phone: (630) 252-5381 e-mail: jhammond@anl.gov GOVERNMENT LICENSE Portions of this material resulted from work developed under a U.S. Government Contract and are subject to the following license: the Government is granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable worldwide license in this computer software to reproduce, prepare derivative works, and perform publicly and display publicly. DISCLAIMER This computer code material was prepared, in part, as an account of work sponsored by an agency of the United States Government. Neither the United States, nor the University of Chicago, nor any of their employees, makes any warranty express or implied, or assumes any legal liability or responsibility for the accuracy, completeness, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use would not infringe privately owned rights. ***************************************************************************/ /*********************************************************************** * accumulate operation for the following datatypes: * real, double precision, complex, double complex, integer * * WARNING: This file must be compiled WITH optimization under AIX. * IBM fortran compilers generate bad code with -g option. * * Two versions of each routine are provided: * original and unrolled loops. * ***********************************************************************/ #if HAVE_CONFIG_H # include "config.h" #endif #include "acc.h" #if 0 subroutine d_accumulate_1d(alpha, A, B, rows) integer rows, r double precision A(*), B(*), alpha ccdir$ no_cache_alloc a,b do r = 1, rows A(r) = A(r)+ alpha*B(r) enddo end #endif void c_d_accumulate_1d_(const double* const restrict alpha, double* restrict A, const double* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i] += (*alpha) * B[i]; } return; } #if 0 subroutine d_accumulate_2d(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double precision A(ald,*), B(bld,*), alpha ccdir$ no_cache_alloc a,b do c = 1, cols do r = 1, rows A(r,c) = A(r,c)+ alpha*B(r,c) enddo enddo end #endif void c_d_accumulate_2d_(const double* const alpha, const int* const rows, const int* const cols, double* restrict A, const int* const ald, const double* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 subroutine f_accumulate_1d(alpha, A, B, rows) integer rows, r real A(*), B(*), alpha do r = 1, rows A(r) = A(r)+ alpha*B(r) enddo end #endif void c_f_accumulate_1d_(const float* const restrict alpha, float* const restrict A, const float* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i] += (*alpha) * B[i]; } return; } #if 0 subroutine f_accumulate_2d(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld real A(ald,*), B(bld,*), alpha do c = 1, cols do r = 1, rows A(r,c) = A(r,c)+ alpha*B(r,c) enddo enddo end #endif void c_f_accumulate_2d_(const float* const alpha, const int* const rows, const int* const cols, float* restrict A, const int* const ald, const float* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 subroutine z_accumulate_1d(alpha, A, B, rows) integer rows, r double complex A(*), B(*), alpha do r = 1, rows A(r) = A(r)+ alpha*B(r) enddo end #endif void c_c_accumulate_1d_(const complex_t* const restrict alpha, complex_t* const restrict A, const complex_t* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i].real += (*alpha).real * B[i].real - (*alpha).imag * B[i].imag; A[i].imag += (*alpha).imag * B[i].real + (*alpha).real * B[i].imag; } return; } #if 0 subroutine z_accumulate_2d(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double complex A(ald,*), B(bld,*), alpha do c = 1, cols do r = 1, rows A(r,c) = A(r,c)+ alpha*B(r,c) enddo enddo end #endif void c_c_accumulate_2d_(const complex_t* const alpha, const int* const rows, const int* const cols, complex_t* restrict A, const int* const ald, const complex_t* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ) { for ( r = 0 ; r < (*rows) ; r++ ) { A[ c * (*ald) + r ].real += (*alpha).real * B[ c * (*bld) + r ].real - (*alpha).imag * B[ c * (*bld) + r ].imag; A[ c * (*ald) + r ].imag += (*alpha).imag * B[ c * (*bld) + r ].real + (*alpha).real * B[ c * (*bld) + r ].imag; } } return; } #if 0 subroutine c_accumulate_1d(alpha, A, B, rows) integer rows, r complex A(*), B(*), alpha do r = 1, rows A(r) = A(r)+ alpha*B(r) enddo end #endif void c_z_accumulate_1d_(const dcomplex_t* const restrict alpha, dcomplex_t* const restrict A, const dcomplex_t* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i].real += (*alpha).real * B[i].real - (*alpha).imag * B[i].imag; A[i].imag += (*alpha).imag * B[i].real + (*alpha).real * B[i].imag; } return; } #if 0 subroutine c_accumulate_2d(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld complex A(ald,*), B(bld,*), alpha do c = 1, cols do r = 1, rows A(r,c) = A(r,c)+ alpha*B(r,c) enddo enddo end #endif void c_z_accumulate_2d_(const dcomplex_t* const alpha, const int* const rows, const int* const cols, dcomplex_t* restrict A, const int* const ald, const dcomplex_t* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ) { for ( r = 0 ; r < (*rows) ; r++ ) { A[ c * (*ald) + r ].real += (*alpha).real * B[ c * (*bld) + r ].real - (*alpha).imag * B[ c * (*bld) + r ].imag; A[ c * (*ald) + r ].imag += (*alpha).imag * B[ c * (*bld) + r ].real + (*alpha).real * B[ c * (*bld) + r ].imag; } } return; } #if 0 subroutine i_accumulate_2d(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld integer A(ald,*), B(bld,*), alpha do c = 1, cols do r = 1, rows A(r,c) = A(r,c)+ alpha*B(r,c) enddo enddo end #endif void c_i_accumulate_1d_(const int* const restrict alpha, int* const restrict A, const int* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i] += (*alpha) * B[i]; } return; } void c_l_accumulate_1d_(const long* const restrict alpha, long* const restrict A, const long* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i] += (*alpha) * B[i]; } return; } void c_ll_accumulate_1d_(const long long* const restrict alpha, long long* const restrict A, const long long* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i] += (*alpha) * B[i]; } return; } #if 0 subroutine i_accumulate_1d(alpha, A, B, rows) integer rows, r integer A(*), B(*), alpha do r = 1, rows A(r) = A(r)+ alpha*B(r) enddo end #endif void c_i_accumulate_2d_(const int* const alpha, const int* const rows, const int* const cols, int* restrict A, const int* const ald, const int* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } void c_l_accumulate_2d_(const long* const alpha, const int* const rows, const int* const cols, long* restrict A, const int* const ald, const long* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } void c_ll_accumulate_2d_(const long long* const alpha, const int* const rows, const int* const cols, long long* restrict A, const int* const ald, const long long* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 subroutine d_accumulate_2d_u(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double precision A(ald,*), B(bld,*), alpha integer r1 doubleprecision d1, d2, d3, d4 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 a(r,c) = a(r,c) + alpha*b(r,c) end do do r = r1 + 1, rows, 4 d1 = a(r,c) + alpha*b(r,c) d2 = a(r+1,c) + alpha*b(r+1,c) d3 = a(r+2,c) + alpha*b(r+2,c) d4 = a(r+3,c) + alpha*b(r+3,c) a(r,c) = d1 a(r+1,c) = d2 a(r+2,c) = d3 a(r+3,c) = d4 enddo enddo end #endif void c_d_accumulate_2d_u_(const double* const alpha, const int* const rows, const int* const cols, double* restrict A, const int* const ald, const double* const B, const int* const bld) { int r, c; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; A[ c * (*ald) + r+1 ] += (*alpha) * B[ c * (*bld) + r+1 ]; A[ c * (*ald) + r+2 ] += (*alpha) * B[ c * (*bld) + r+2 ]; A[ c * (*ald) + r+3 ] += (*alpha) * B[ c * (*bld) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 subroutine f_accumulate_2d_u(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld real A(ald,*), B(bld,*), alpha integer r1 real d1, d2, d3, d4 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 a(r,c) = a(r,c) + alpha*b(r,c) end do do r = r1 + 1, rows, 4 d1 = a(r,c) + alpha*b(r,c) d2 = a(r+1,c) + alpha*b(r+1,c) d3 = a(r+2,c) + alpha*b(r+2,c) d4 = a(r+3,c) + alpha*b(r+3,c) a(r,c) = d1 a(r+1,c) = d2 a(r+2,c) = d3 a(r+3,c) = d4 enddo enddo end #endif void c_f_accumulate_2d_u_(const float* const alpha, const int* const rows, const int* const cols, float* restrict A, const int* const ald, const float* const B, const int* const bld) { int r, c; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; A[ c * (*ald) + r+1 ] += (*alpha) * B[ c * (*bld) + r+1 ]; A[ c * (*ald) + r+2 ] += (*alpha) * B[ c * (*bld) + r+2 ]; A[ c * (*ald) + r+3 ] += (*alpha) * B[ c * (*bld) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 subroutine z_accumulate_2d_u(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double complex A(ald,*), B(bld,*), alpha integer r1 double complex x1, x2, x3, x4 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 a(r,c) = a(r,c) + alpha*b(r,c) end do do r = r1 + 1, rows, 4 x1 = a(r,c) + alpha*b(r,c) x2 = a(r+1,c) + alpha*b(r+1,c) x3 = a(r+2,c) + alpha*b(r+2,c) x4 = a(r+3,c) + alpha*b(r+3,c) a(r,c) = x1 a(r+1,c) = x2 a(r+2,c) = x3 a(r+3,c) = x4 enddo enddo end #endif void c_c_accumulate_2d_u_(const complex_t* const alpha, const int* const rows, const int* const cols, complex_t* restrict A, const int* const ald, const complex_t* const B, const int* const bld) { int r, c; int jA, jB; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ jA = c * (*ald) + r; jB = c * (*bld) + r; A[ jA ].real += (*alpha).real * B[ jB ].real - (*alpha).imag * B[ jB ].imag; A[ jA ].imag += (*alpha).imag * B[ jB ].real + (*alpha).real * B[ jB ].imag; A[ jA+1 ].real += (*alpha).real * B[ jB+1 ].real - (*alpha).imag * B[ jB+1 ].imag; A[ jA+1 ].imag += (*alpha).imag * B[ jB+1 ].real + (*alpha).real * B[ jB+1 ].imag; A[ jA+2 ].real += (*alpha).real * B[ jB+2 ].real - (*alpha).imag * B[ jB+2 ].imag; A[ jA+2 ].imag += (*alpha).imag * B[ jB+2 ].real + (*alpha).real * B[ jB+2 ].imag; A[ jA+3 ].real += (*alpha).real * B[ jB+3 ].real - (*alpha).imag * B[ jB+3 ].imag; A[ jA+3 ].imag += (*alpha).imag * B[ jB+3 ].real + (*alpha).real * B[ jB+3 ].imag; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ].real += (*alpha).real * B[ c * (*bld) + r ].real - (*alpha).imag * B[ c * (*bld) + r ].imag; A[ c * (*ald) + r ].imag += (*alpha).imag * B[ c * (*bld) + r ].real + (*alpha).real * B[ c * (*bld) + r ].imag; } } return; } #if 0 subroutine c_accumulate_2d_u(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld complex A(ald,*), B(bld,*), alpha integer r1 complex x1, x2, x3, x4 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 a(r,c) = a(r,c) + alpha*b(r,c) end do do r = r1 + 1, rows, 4 x1 = a(r,c) + alpha*b(r,c) x2 = a(r+1,c) + alpha*b(r+1,c) x3 = a(r+2,c) + alpha*b(r+2,c) x4 = a(r+3,c) + alpha*b(r+3,c) a(r,c) = x1 a(r+1,c) = x2 a(r+2,c) = x3 a(r+3,c) = x4 enddo enddo end #endif void c_z_accumulate_2d_u_(const dcomplex_t* const alpha, const int* const rows, const int* const cols, dcomplex_t* restrict A, const int* const ald, const dcomplex_t* const B, const int* const bld) { int r, c; int jA, jB; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ jA = c * (*ald) + r; jB = c * (*bld) + r; A[ jA ].real += (*alpha).real * B[ jB ].real - (*alpha).imag * B[ jB ].imag; A[ jA ].imag += (*alpha).imag * B[ jB ].real + (*alpha).real * B[ jB ].imag; A[ jA+1 ].real += (*alpha).real * B[ jB+1 ].real - (*alpha).imag * B[ jB+1 ].imag; A[ jA+1 ].imag += (*alpha).imag * B[ jB+1 ].real + (*alpha).real * B[ jB+1 ].imag; A[ jA+2 ].real += (*alpha).real * B[ jB+2 ].real - (*alpha).imag * B[ jB+2 ].imag; A[ jA+2 ].imag += (*alpha).imag * B[ jB+2 ].real + (*alpha).real * B[ jB+2 ].imag; A[ jA+3 ].real += (*alpha).real * B[ jB+3 ].real - (*alpha).imag * B[ jB+3 ].imag; A[ jA+3 ].imag += (*alpha).imag * B[ jB+3 ].real + (*alpha).real * B[ jB+3 ].imag; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ].real += (*alpha).real * B[ c * (*bld) + r ].real - (*alpha).imag * B[ c * (*bld) + r ].imag; A[ c * (*ald) + r ].imag += (*alpha).imag * B[ c * (*bld) + r ].real + (*alpha).real * B[ c * (*bld) + r ].imag; } } return; } #if 0 subroutine i_accumulate_2d_u(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld integer A(ald,*), B(bld,*), alpha integer r1, j2, j3, j4, j5 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 a(r,c) = a(r,c) + alpha*b(r,c) end do do r = r1 + 1, rows, 4 j2 = a(r,c) + alpha*b(r,c) j3 = a(r+1,c) + alpha*b(r+1,c) j4 = a(r+2,c) + alpha*b(r+2,c) j5 = a(r+3,c) + alpha*b(r+3,c) a(r,c) = j2 a(r+1,c) = j3 a(r+2,c) = j4 a(r+3,c) = j5 enddo enddo end #endif void c_i_accumulate_2d_u_(const int* const alpha, const int* const rows, const int* const cols, int* restrict A, const int* const ald, const int* const B, const int* const bld) { int r, c; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; A[ c * (*ald) + r+1 ] += (*alpha) * B[ c * (*bld) + r+1 ]; A[ c * (*ald) + r+2 ] += (*alpha) * B[ c * (*bld) + r+2 ]; A[ c * (*ald) + r+3 ] += (*alpha) * B[ c * (*bld) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } void c_l_accumulate_2d_u_(const long* const alpha, const int* const rows, const int* const cols, long* restrict A, const int* const ald, const long* const B, const int* const bld) { int r, c; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; A[ c * (*ald) + r+1 ] += (*alpha) * B[ c * (*bld) + r+1 ]; A[ c * (*ald) + r+2 ] += (*alpha) * B[ c * (*bld) + r+2 ]; A[ c * (*ald) + r+3 ] += (*alpha) * B[ c * (*bld) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } void c_ll_accumulate_2d_u_(const long long* const alpha, const int* const rows, const int* const cols, long long* restrict A, const int* const ald, const long long* const B, const int* const bld) { int r, c; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; A[ c * (*ald) + r+1 ] += (*alpha) * B[ c * (*bld) + r+1 ]; A[ c * (*ald) + r+2 ] += (*alpha) * B[ c * (*bld) + r+2 ]; A[ c * (*ald) + r+3 ] += (*alpha) * B[ c * (*bld) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 c---------- operations used in armci gops -------------- c subroutine fort_dadd(n, x, work) integer n,i double precision x(n), work(n) do i= 1,n x(i) = x(i) + work(i) enddo end #endif void c_dadd_(const int* const restrict n, double* const restrict x, const double* const restrict work) { int i; for ( i = 0 ; i < (*n) ; i++ ){ x[i] += work[i]; } return; } #if 0 subroutine fort_dadd2(n, x, work, work2) integer n,i double precision x(n), work(n), work2(n) do i= 1,n x(i) = work(i) + work2(i) enddo end #endif void c_dadd2_(const int* const restrict n, double* const restrict x, const double* const restrict work, const double* const restrict work2) { int i; for ( i = 0 ; i < (*n) ; i++ ){ x[i] = work[i] + work2[i]; } return; } #if 0 subroutine fort_dmult(n, x, work) integer n,i double precision x(n), work(n) do i= 1,n x(i) = x(i) * work(i) enddo end #endif void c_dmult_(const int* const restrict n, double* const restrict x, const double* const restrict work) { int i; for ( i = 0 ; i < (*n) ; i++ ){ x[i] *= work[i]; } return; } #if 0 subroutine fort_dmult2(n, x, work,work2) integer n,i double precision x(n), work(n) do i= 1,n x(i) = work(i)*work2(i) enddo end #endif void c_dmult2_(const int* const restrict n, double* const restrict x, const double* const restrict work, const double* const restrict work2) { int i; for ( i = 0 ; i < (*n) ; i++ ){ x[i] = work[i] * work2[i]; } return; } // specific to src-portals && to src-gemini void RA_ACCUMULATE_2D_(long* alpha, int* rows, int* cols, long* a, int* lda, long* b, int* ldb) { int i,j; for(j=0;j< *cols; j++){ long *aa = a + j* *lda; long *bb = b + j* *ldb; for(i=0;i< *rows; i++) aa[i] ^= bb[i]; } } ga-5-3/armci/src-gemini/run_test0000750005473000001440000000017311466071465015527 0ustar d3n000users#!/bin/tcsh rm -f core* limit coredumpsize 128megabytes # setenv CRAY_PORTALS_USE_BLOCKING_POLL 1 aprun -n 4 -N 2 ./test.x ga-5-3/armci/src-gemini/sockets.h0000640005473000001440000000321211466071465015560 0ustar d3n000users#ifndef SOCKETS_H_ #define SOCKETS_H_ #include "armci.h" #ifndef WIN32 #define USE_SOCKET_VECTOR_API #endif #if defined(USE_SOCKET_VECTOR_API) # include #endif extern int tcp_sendrcv_bufsize; extern int armci_PollSocket(int sock); extern int armci_WaitSock(int *socklist, int num, int *ready); extern int armci_ReadFromSocket(int sock, void* buffer, int lenbuf); extern int armci_WriteToSocket (int sock, void* buffer, int lenbuf); #if defined(USE_SOCKET_VECTOR_API) extern int armci_RecvStridedFromSocket(int sock,void* buffer,int *str_arr,int *cnt,int str_level,struct iovec *iov); extern int armci_SendStridedToSocket(int sock,void* buffer,int *str_arr,int *cnt,int str_level,struct iovec *iov); extern int armci_RecvVectorFromSocket(int sock,armci_giov_t darr[], int len,struct iovec *iov); extern int armci_SendVectorToSocket(int sock,armci_giov_t darr[], int len,struct iovec *iov); extern int armci_ReadVFromSocket(int sock,struct iovec *iov, int iovlength, int totalsize); extern int armci_WriteVToSocket (int sock,struct iovec *iov, int iovlength, int totalsize); #endif extern void armci_ListenSockAll(int* socklist, int num); extern void armci_AcceptSockAll(int* socklist, int num); extern int armci_CreateSocketAndConnect(char *hostname, int port); extern void armci_ShutdownAll(int socklist[], int num); extern void armci_CreateSocketAndBind(int *sock, int *port); #define PACKET_SIZE tcp_sendrcv_bufsize #define TIMEOUT_ACCEPT 60 #define GET_SEND_BUFFER _armci_buf_get_clear_busy #define FREE_SEND_BUFFER _armci_buf_release #ifndef UIO_MAXIOV #define MAX_IOVEC 8 #else #define MAX_IOVEC (UIO_MAXIOV>100?100:UIO_MAXIOV) #endif #endif ga-5-3/armci/src-gemini/acc.c0000640005473000001440000000727211466102622014626 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: acc.c,v 1.13 2006-09-13 23:43:36 andriy Exp $ */ #if defined(__crayx1) #else #define restrict #endif void L_ACCUMULATE_2D(long* restrict alpha, int* restrict rows, int* restrict cols, long* restrict a, int* restrict lda, long* restrict b, int* restrict ldb) { int i,j; #ifdef __crayx1 #pragma _CRI concurrent #endif for(j=0;j< *cols; j++){ long * restrict aa = a + j* *lda; long * restrict bb = b + j* *ldb; for(i=0;i< *rows; i++) aa[i] += *alpha * bb[i]; } } void L_ACCUMULATE_1D(long * restrict alpha, long * restrict a, long * restrict b, int * restrict rows) { int i; for(i=0;i< *rows; i++) a[i] += *alpha * b[i]; } #if defined(CRAY_T3E) || defined(CATAMOUNT) void F_ACCUMULATE_2D_(float* alpha, int* rows, int* cols, float* a, int* lda, float* b, int* ldb) { int i,j; for(j=0;j< *cols; j++){ float *aa = a + j* *lda; float *bb = b + j* *ldb; for(i=0;i< *rows; i++) aa[i] += *alpha * bb[i]; } } #endif void RA_ACCUMULATE_2D_(long* alpha, int* rows, int* cols, long* a, int* lda, long* b, int* ldb) { int i,j; for(j=0;j< *cols; j++){ long *aa = a + j* *lda; long *bb = b + j* *ldb; for(i=0;i< *rows; i++) aa[i] ^= bb[i]; } } #ifdef NOFORT typedef struct { float imag; float real; } cmpl_t; typedef struct { double imag; double real; } dcmpl_t; void I_ACCUMULATE_2D(int* alpha, int* rows, int* cols, int* a, int* lda, int* b, int* ldb) { int i,j; for(j=0;j< *cols; j++){ int *aa = a + j* *lda; int *bb = b + j* *ldb; for(i=0;i< *rows; i++) aa[i] += *alpha * bb[i]; } } #if !defined(CRAY_T3E) && !defined(CATAMOUNT) void F_ACCUMULATE_2D(float* alpha, int* rows, int* cols, float* a, int* lda, float* b, int* ldb) { int i,j; for(j=0;j< *cols; j++){ float *aa = a + j* *lda; float *bb = b + j* *ldb; for(i=0;i< *rows; i++) aa[i] += *alpha * bb[i]; } } #endif void D_ACCUMULATE_2D(double* alpha, int* rows, int* cols, double* a, int* lda, double* b, int* ldb) { int i,j; for(j=0;j< *cols; j++){ double *aa = a + j* *lda; double *bb = b + j* *ldb; for(i=0;i< *rows; i++) aa[i] += *alpha * bb[i]; } } void C_ACCUMULATE_2D(cmpl_t* alpha, int* rows, int* cols, cmpl_t* a, int* lda, cmpl_t* b, int* ldb) { int i,j; for(j=0;j< *cols; j++){ cmpl_t *aa = a + j* *lda; cmpl_t *bb = b + j* *ldb; for(i=0;i< *rows; i++){ aa[i].real += alpha->real * bb[i].real - alpha->imag * bb[i].imag; aa[i].imag += alpha->imag * bb[i].real + alpha->real * bb[i].imag; } } } void Z_ACCUMULATE_2D(dcmpl_t* alpha, int* rows, int* cols, dcmpl_t* a, int* lda, dcmpl_t* b, int* ldb) { int i,j; for(j=0;j< *cols; j++){ dcmpl_t *aa = a + j* *lda; dcmpl_t *bb = b + j* *ldb; for(i=0;i< *rows; i++){ aa[i].real += alpha->real * bb[i].real - alpha->imag * bb[i].imag; aa[i].imag += alpha->imag * bb[i].real + alpha->real * bb[i].imag; } } } void FORT_DADD(int *n, double *x, double *work){ int i; for(i=0;i<*n;i++) x[i] = x[i] + work[i]; } void FORT_DADD2(int *n, double *x, double *work, double *work2){ int i; for(i=0;i<*n;i++) x[i] = work[i] + work2[i]; } void FORT_DMULT(int *n, double *x, double *work){ int i; for(i=0;i<*n;i++) x[i] = x[i]*work[i]; } void FORT_DMULT2(int *n, double *x, double *work, double *work2){ int i; for(i=0;i<*n;i++) x[i] = work[i]*work2[i]; } #endif ga-5-3/armci/src-gemini/semaphores.h0000640005473000001440000000231411701667223016250 0ustar d3n000users#ifndef _SEMAPHORES_H_ #define _SEMAPHORES_H_ #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_IPC_H # include #endif #if HAVE_SYS_SEM_H # include #endif #if !HAVE_UNION_SEMUN union semun { int val; /* value for SETVAL */ struct semid_ds *buf; /* buffer for IPC_STAT, IPC_SET */ unsigned short int *array; /* array for GETALL, SETALL */ struct seminfo *__buf; /* buffer for IPC_INFO */ }; #endif /* how many semaphores are available ? */ #ifndef SEMMSL # ifdef AIX # define SEMMSL 8094 # else # define SEMMSL 16 # endif #endif /* on HPUX 10.2 SEMMSL is much bigger than realistically we can allocate */ #ifdef HPUX #undef SEMMSL #define SEMMSL 64 #endif extern struct sembuf sops; extern int semaphoreID; int semop(); #define ALL_SEMS -1 #define _P_code -1 #define _V_code 1 #define P_semaphore(s) \ {\ sops.sem_num = (s);\ sops.sem_op = _P_code;\ sops.sem_flg = 0; \ semop(semaphoreID,&sops,1);\ } #define V_semaphore(s) \ {\ sops.sem_num = (s);\ sops.sem_op = _V_code;\ sops.sem_flg = 0; \ semop(semaphoreID,&sops,1);\ } typedef int lockset_t; #endif ga-5-3/armci/src-gemini/bufalloc.c0000640005473000001440000002610411466102622015662 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: bufalloc.c,v 1.2 2001-06-07 23:23:23 d3h325 Exp $ * storage manager for a chunk of memory passed by user in armci_init_buf_alloc * derived from K&R that manages a chunk of memory */ #include #define USAGE_ extern char *buf_allocate(); /* Used to get memory from the system */ extern void armci_die(); #define VALID1 0xaaaaaaaa /* For validity check on headers */ #define VALID2 0x55555555 #define LOG_ALIGN 6 #define ALIGNMENT (1 << LOG_ALIGN) #define DEFAULT_NALLOC (1024 - ALIGNMENT) #ifdef USAGE static struct shmalloc_struct { size_t total; /* Amount request from system in units */ long nchunk; /* No. of chunks of system memory */ long inuse; /* Amount in use in units */ long maxuse; /* Maximum value of inuse */ long nfrags; /* No. of fragments divided into */ long nmcalls; /* No. of calls to shmalloc */ long nfcalls; /* No. of calls to buf_free */ } usage; #endif union header{ struct { unsigned valid1; /* Token to check if is not overwritten */ union header *ptr; /* next block if on free list */ size_t size; /* size of this block*/ unsigned valid2; /* Another token acting as a guard */ } s; char align[ALIGNMENT]; /* Align to ALIGNMENT byte boundary */ }; typedef union header Header; static Header base; /* empty list to get started */ static Header *freep = NULL; /* start of free list */ static Header *usedp = NULL; /* start of used list */ static size_t nalloc = DEFAULT_NALLOC; static size_t max_nalloc = DEFAULT_NALLOC; static int do_verify = 0; /* Flag for automatic heap verification */ static int initialized=0; static void buf_error(char* s, unsigned long i) { void buf_alloc_print_stats(); fflush(stdout); fprintf(stderr,"buf_alloc error: %s %ld(0x%lx)\n", s, i, i); fflush(stderr); #ifdef USAGE buf_alloc_print_stats(); #endif armci_die("buf_alloc: fatal error", i); } void armci_buf_alloc_request(size_t size, size_t maxsize) { nalloc = (size+ALIGNMENT-1) >> LOG_ALIGN; max_nalloc = (maxsize+ALIGNMENT-1) >> LOG_ALIGN; } void armci_buf_alloc_debug(int code) { do_verify = code; } void armci_buf_alloc_verify() { Header *p; if ( freep ) { /* Check the used list */ for (p=usedp; p; p=p->s.ptr) { if (p->s.valid1 != VALID1 || p->s.valid2 != VALID2) buf_error("invalid header on usedlist", (unsigned long) p->s.valid1); #ifdef USAGE if (p->s.size > usage.total) buf_error("invalid size in header usedlist",(unsigned long)p->s.size); #endif } /* Check the free list */ p = base.s.ptr; while (p != &base) { if (p->s.valid1 != VALID1 || p->s.valid2 != VALID2) buf_error("invalid header on freelist", (unsigned long) p->s.valid1); #ifdef USAGE if (p->s.size > usage.total) buf_error("invalid size in header freelist",(unsigned long)p->s.size); #endif p = p->s.ptr; } } /* end if */ } static void addtofree(char* ap) { Header *bp, *p, **up; #ifdef USAGE usage.nfcalls++; #endif if (do_verify) armci_buf_alloc_verify(); /* only do something if pointer is not NULL */ if ( ap ) { bp = (Header *) ap - 1; /* Point to block header */ if (bp->s.valid1 != VALID1 || bp->s.valid2 != VALID2) buf_error("buf_free: pointer not from buf_alloc", (unsigned long) ap); #ifdef USAGE usage.inuse -= bp->s.size; /* Decrement memory usage */ #endif /* Extract the block from the used linked list ... for debug only */ for (up=&usedp; ; up = &((*up)->s.ptr)) { if (!*up) buf_error("buf_free:block not found in used list\n",(unsigned long)ap); if (*up == bp) { *up = bp->s.ptr; break; } } /* Join the memory back into the free linked list */ for (p=freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; /* Freed block at start or end of arena */ if (bp + bp->s.size == p->s.ptr) {/* join to upper neighbour */ bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; #ifdef USAGE usage.nfrags--; /* Lost a fragment */ #endif } else bp->s.ptr = p->s.ptr; if (p + p->s.size == bp) { /* Join to lower neighbour */ p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; #ifdef USAGE usage.nfrags--; /* Lost a fragment */ #endif } else p->s.ptr = bp; freep = p; } /* end if on ap */ } void armci_init_buf_alloc(size_t len, void* buffer) { char *cp; Header *up, *prevp; size_t nu; /* need to initialize the free list */ if (sizeof(Header) != ALIGNMENT) buf_error("Alignment is not valid", (unsigned long) ALIGNMENT); if(initialized)armci_die("armci_init_buf_alloc: already initialized",0); #ifdef USAGE usage.total = 0; /* Initialize statistics */ usage.nchunk = 0; usage.inuse = 0; usage.nfrags = 0; usage.maxuse = 0; usage.nmcalls= 0; usage.nfcalls= 0; #endif base.s.ptr = freep = prevp = &base; /* Initialize linked list */ base.s.size = 0; base.s.valid1 = VALID1; base.s.valid2 = VALID2; nu = len/sizeof(Header); /* nu must by a multiplicity of nalloc */ max_nalloc = nu*nalloc; if(nu<1) armci_die("buffer less than nalloc",(int)len); cp = (char*)buffer; #ifdef USAGE usage.total += nu; /* Have just got nu more units */ usage.nchunk++; /* One more chunk */ usage.nfrags++; /* Currently one more frag */ usage.inuse += nu; /* Inuse will be decremented by buf_free */ #endif up = (Header *) cp; up->s.size = nu; up->s.valid1 = VALID1; up->s.valid2 = VALID2; /* Insert into linked list of blocks in use so that buf_free works ... for debug only */ up->s.ptr = usedp; usedp = up; addtofree((char *)(up+1)); /* Try to join into the free list */ } /*\ return a chunk memory of given size \*/ char *armci_buf_alloc(size_t nbytes) { Header *p, *prevp; size_t nunits; char *return_ptr; /* need to initialize the free list */ if ((prevp = freep) == NULL) armci_die("not initialized", 0); #ifdef USAGE usage.nmcalls++; #endif if (do_verify) armci_buf_alloc_verify(); /* Rather than divide make the alignment a known power of 2 */ nunits = ((nbytes + sizeof(Header) - 1)>>LOG_ALIGN) + 1; for (p=prevp->s.ptr; ; prevp = p, p = p->s.ptr) { if (p->s.size >= nunits) { /* Big enuf */ if (p->s.size == nunits) /* exact fit */ prevp->s.ptr = p->s.ptr; else { /* allocate tail end */ p->s.size -= nunits; p += p->s.size; p->s.size = nunits; p->s.valid1 = VALID1; p->s.valid2 = VALID2; #ifdef USAGE usage.nfrags++; /* Have just increased the fragmentation */ #endif } /* Insert into linked list of blocks in use ... for debug only */ p->s.ptr = usedp; usedp = p; #ifdef USAGE usage.inuse += nunits; /* Record usage */ if (usage.inuse > usage.maxuse) usage.maxuse = usage.inuse; #endif freep = prevp; return_ptr = (char *) (p+1); break; } if (p == freep){ /* wrapped around the free list */ return_ptr = (char *) NULL; break; } } return return_ptr; } void armci_buf_free(char *ap) { Header *bp, *p, **up; #ifdef USAGE usage.nfcalls++; #endif if (do_verify) armci_buf_alloc_verify(); /* only do something if pointer is not NULL */ if ( ap ) { bp = (Header *) ap - 1; /* Point to block header */ if (bp->s.valid1 != VALID1 || bp->s.valid2 != VALID2) buf_error("buf_free: pointer not from buf_alloc", (unsigned long) ap); #ifdef USAGE usage.inuse -= bp->s.size; /* Decrement memory usage */ #endif /* Extract the block from the used linked list for debug only */ for (up=&usedp; ; up = &((*up)->s.ptr)) { if (!*up) buf_error("buf_free:block not found in used list\n",(unsigned long)ap); if (*up == bp) { *up = bp->s.ptr; break; } } /* Join the memory back into the free linked list */ for (p=freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; /* Freed block at start or end of arena */ if (bp + bp->s.size == p->s.ptr) {/* join to upper neighbour */ bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; #ifdef USAGE usage.nfrags--; /* Lost a fragment */ #endif } else bp->s.ptr = p->s.ptr; if (p + p->s.size == bp) { /* Join to lower neighbour */ p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; #ifdef USAGE usage.nfrags--; /* Lost a fragment */ #endif } else p->s.ptr = bp; freep = p; } /* end if on ap */ } #ifdef USAGE /* Return stats on buf_alloc performance. Use arg list instead of returning structure so that FORTRAN can eventually use it */ void buf_alloc_stats(size_t *total, long* nchunk, size_t * inuse, size_t * maxuse, long* nfrags, long* nmcalls,long* nfcalls) { *total = usage.total * sizeof(Header); *nchunk = usage.nchunk; *inuse = (size_t)usage.inuse * sizeof(Header); *maxuse = (size_t)usage.maxuse* sizeof(Header); *nfrags = usage.nfrags; *nmcalls= usage.nmcalls; *nfcalls= usage.nfcalls; } /* Print to standard output the usage statistics. */ void buf_alloc_print_stats() { size_t total, inuse, maxuse; long nchunk, nfrags, nmcalls, nfcalls; buf_alloc_stats(&total, &nchunk, &inuse, &maxuse, &nfrags, &nmcalls, &nfcalls); fflush(stderr); printf("\nbuf_alloc statistics\n-------------------\n\n"); printf("Total memory from system ... %ld bytes\n", (long)total); printf("Current memory usage ....... %ld bytes\n", (long)inuse); printf("Maximum memory usage ....... %ld bytes\n", (long)maxuse); printf("No. chunks from system ..... %ld\n", nchunk); printf("No. of fragments ........... %ld\n", nfrags); printf("No. of calls to buf_alloc ... %ld\n", nmcalls); printf("No. of calls to buf_free ..... %ld\n", nfcalls); printf("\n"); fflush(stdout); } #endif #if 0 void armci_die(char *str, int c) { fprintf(stderr,"%s %d\n",str,c); _exit(1); } #define LEN (16*1024) char buf[LEN]; main (int argc, char **argv) { int i,k,total=0,size=1024; char *ar[100]; armci_init_buf_alloc(LEN, buf); for(i=0; i<100; i++)ar[i]=(char*)0; for(i=0; i<100; i++){ ar[i] =armci_buf_alloc(size); if(!ar[i]){ printf("i =%d total=%d\n", i, total); buf_alloc_print_stats(); k=i; break; } total+=size; } for(i=0; i #include "armcip.h" #include "locks.h" #include "gpc.h" #define GPC_SLOTS 32 #define GPC_OFFSET -100 static void *_table[GPC_SLOTS]={ (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0}; #if (defined(LAPI) || defined(GM) || defined(VAPI) || defined(QUADRICS)) && ARMCI_ENABLE_GPC_CALLS /*\ callback functions must be registered -- user gets int handle back \*/ int ARMCI_Gpc_register( int (*func) ()) { int handle =-1, candidate = 0; PARMCI_Barrier(); do{ if(!_table[candidate]){ handle = candidate; _table[candidate]=func; } candidate++; }while(candidate < GPC_SLOTS && handle == -1); return(GPC_OFFSET-handle); } /*\ release/deassociate handle with previously registered callback function \*/ void ARMCI_Gpc_release(int handle) { int h = -handle + GPC_OFFSET; PARMCI_Barrier(); if(h<0 || h >= GPC_SLOTS) armci_die("ARMCI_Gpc_release: bad handle",h); _table[h] = (void*)0; } /*\ Send Request to Execute callback function in a global address space * Arguments: * f - handle to the callback function * p - remote processor * hdr - header data - used to pack extra args for callback (local buffer) * hlen - size of header data < ARMCI_GPC_HLEN * data - bulk data passed to callback (local buffer) * dlen - length of bulk data * rhdr - ptr to reply header (return args from callback) * rhlen - length of buffer to store reply header < ARMCI_GPC_HLEN * rdata - ptr to where reply data from callback should be stored (local buf) * rdlen - size of the buffer to store reply data * nbh - nonblocking handle * \*/ int ARMCI_Gpc_exec(int h, int p, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, void *rdata, int rdlen, gpc_hdl_t* nbh) { int hnd = -h + GPC_OFFSET; int err = 0; armci_hdl_t *ahdl = (nbh ? &(nbh->ahdl): NULL); if(hnd <0 || hnd>= GPC_SLOTS) err += fprintf(stderr, "ARMCI_Gpc_exec: bad callback handle %d: %d\n",hnd,GPC_SLOTS); if(!_table[hnd]) err += fprintf(stderr, "ARMCI_Gpc_exec: NULL function %d",hnd); if(hlen<0 || hlen>=ARMCI_Gpc_get_hlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid send header size %d %d\n", hlen, ARMCI_Gpc_get_hlen()); if(rhlen<0 || rhlen>=ARMCI_Gpc_get_hlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid recv header size %d %d\n", rhlen, ARMCI_Gpc_get_hlen()); if(dlen<0 || dlen>=ARMCI_Gpc_get_dlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid send data size %d %d\n", dlen, ARMCI_Gpc_get_dlen()); if(rdlen<0 || rdlen>=ARMCI_Gpc_get_dlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid recv data size %d %d\n", rdlen, ARMCI_Gpc_get_dlen()); if(hlen>0 && hdr==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null send header for non-zero header size %d\n", hlen); if(rhlen>0 && rhdr==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null recv header for non-zero header size %d\n", rhlen); if(dlen>0 && data==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null send data for non-zero data size %d\n", dlen); if(rdlen>0 && rdata==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null recv data for non-zero header size %d\n", rdlen); if(p<0 || p >= armci_nproc) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid target processor id %d\n", p, armci_nproc); if(err) return FAIL; if(rhlen + rdlen == 0) armci_die("Zero reply header + data length not yet supported", 0); if(nbh) nbh->proc = p; #if 1 if(SAMECLUSNODE(p) && armci_nproc==1) { int rhsize, rdsize; int (*func)(); /* fprintf(stderr, "%d:: armci gpc exec. SAMECLUSNODE\n", armci_me); */ func = _table[hnd]; if(func(p, armci_me, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, rdata, rdlen, &rdsize, GPC_INIT) != GPC_DONE) { func(p, armci_me, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, rdata, rdlen, &rdsize, GPC_WAIT); } #ifndef VAPI PARMCI_Fence(p); #endif return 0; } #endif /* fprintf(stderr, "%d:: armci gpc exec. invoking armci gpc\n", armci_me); */ return armci_gpc(h, p, hdr, hlen, data, dlen, rhdr, rhlen, rdata, rdlen, ahdl); } /* func - handle to the function executed at each process in the chain callba- handle to the callback to be executed when hdr - header data used to pack extra args for callback (local buffer) hlen - size of header data < ARMCI_GPC_HLEN data - bulk data passed to callback (local buffer) dlen - length of bulk data rhdr - ptr to reply header (return args from callback) rhlen - length of buffer to store reply header < ARMCI_GPC_HLEN rdata - ptr to where reply data from callback should be stored (local buf) rdlen - size of the buffer to store reply data idlen - number of ID's idslst- list of id's in the chained GPC nbh - nonblocking handle which also acts as a context for each individual GPC Tree - the id of tree function used (default is 0=>binary, 1=>binomial, n=> user defined) */ int ARMCI_Gpc_chained_exec(int func, int callback, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, void *rdata, int rdlen, int idlen, int *idlst, gpc_hdl_t* nbh, int TREE) { #if 0 int hnd = -func + GPC_OFFSET; int err = 0; armci_hdl_t *ahdl = (nbh ? &(nbh->ahdl): NULL); if(hnd <0 || hnd>= GPC_SLOTS) err += fprintf(stderr, "ARMCI_Gpc_exec: bad callback handle %d: %d\n",hnd,GPC_SLOTS); if(!_table[hnd]) err += fprintf(stderr, "ARMCI_Gpc_exec: NULL function %d",hnd); if(hlen<0 || hlen>=ARMCI_Gpc_get_hlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid send header size %d %d\n", hlen, ARMCI_Gpc_get_hlen()); if(rhlen<0 || rhlen>=ARMCI_Gpc_get_hlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid recv header size %d %d\n", rhlen, ARMCI_Gpc_get_hlen()); if(dlen<0 || dlen>=ARMCI_Gpc_get_dlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid send data size %d %d\n", dlen, ARMCI_Gpc_get_dlen()); if(rdlen<0 || rdlen>=ARMCI_Gpc_get_dlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid recv data size %d %d\n", rdlen, ARMCI_Gpc_get_dlen()); if(hlen>0 && hdr==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null send header for non-zero header size %d\n", hlen); if(rhlen>0 && rhdr==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null recv header for non-zero header size %d\n", rhlen); if(dlen>0 && data==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null send data for non-zero data size %d\n", dlen); if(rdlen>0 && rdata==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null recv data for non-zero header size %d\n", rdlen); if(p<0 || p >= armci_nproc) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid target processor id %d\n", p, armci_nproc); if(err) return FAIL; if(rhlen + rdlen == 0) armci_die("Zero reply header + data length not yet supported", 0); tree_id = armci_msg_generate_tree(idlst,idlen,id_tree,TREE); if(nbh) nbh->proc = p; #if 1 if(SAMECLUSNODE(p) && armci_nproc==1) { int rhsize, rdsize; int (*func)(); /* fprintf(stderr, "%d:: armci gpc exec. SAMECLUSNODE\n", armci_me); */ func = _table[hnd]; if(func(p, armci_me, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, rdata, rdlen, &rdsize, GPC_INIT) != GPC_DONE) { func(p, armci_me, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, rdata, rdlen, &rdsize, GPC_WAIT); } #ifndef VAPI PARMCI_Fence(p); #endif return 0; } #endif /* fprintf(stderr, "%d:: armci gpc exec. invoking armci gpc\n", armci_me); */ return armci_gpc(h, p, hdr, hlen, data, dlen, rhdr, rhlen, rdata, rdlen, ahdl); #endif } int armci_gpc_local_exec(int h, int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, void *rdata, int rdlen, int rtype) { int rhsize, rdsize; int (*func)(); int hnd = -h + GPC_OFFSET; if(hnd <0 || hnd>= GPC_SLOTS) armci_die2("armci_gpc_local_exec: bad callback handle",hnd,GPC_SLOTS); if(!_table[hnd]) armci_die("armci_gpc_local_exec: NULL function",hnd); func = _table[hnd]; if(!SAMECLUSNODE(to)) armci_die("armci_gpc_local_exec: GPC call to a different node received!", armci_me); /* func(to, from, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, */ /* rdata, rdlen, &rdsize); */ /* return 0; */ return func(to, from, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, rdata, rdlen, &rdsize, rtype); } /*\ * This is a template for the callback function * The arguments are passed as specified in ARMCI_Gpc_exec * In addition, * rhsize specifies the actual size of reply header data returned * rdsize specifies the actual size of reply data returned \*/ int example_func(int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, int *rhsize, void *rdata, int rdlen, int *rdsize, int rtype); #ifdef LAPI void armci_gpc_set_serverpid(){ } #endif /*\ * Translate pointer to memory on processor "proc" * to be used in a callback function send by processor "from" \*/ void * ARMCI_Gpc_translate(void *ptr, int proc, int from) { return ptr; } /*\ acquire lock in a callback function executed in context of processor "proc" \*/ void ARMCI_Gpc_lock(int proc) { #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif NATIVE_LOCK(lock,proc); } /*\ try acquire lock in a callback function to be executed in context of * processor "proc" * return value: 1 - success * 0 - failure (already locked by another thread) \*/ int ARMCI_Gpc_trylock(int proc) { armci_die("ARMCI_Gpc_trylock: not yet implemented",0); return 0; } /*\ release lock in a callback function executed in context of processor "proc" \*/ void ARMCI_Gpc_unlock(int proc) { #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif NATIVE_UNLOCK(lock,proc); } void ARMCI_Gpc_init_handle(gpc_hdl_t *nbh) { nbh->proc = armci_me; ARMCI_INIT_HANDLE(&nbh->ahdl); } void ARMCI_Gpc_wait(gpc_hdl_t *nbh) { if(SAMECLUSNODE(nbh->proc)) return; PARMCI_Wait(&nbh->ahdl); } void ARMCI_Gpc_test(gpc_hdl_t *nbh) { if(SAMECLUSNODE(nbh->proc)) return; PARMCI_Test(&nbh->ahdl); } #define ARMCI_GPC_HLEN 65536 #define ARMCI_GPC_DLEN 65536 int ARMCI_Gpc_get_hlen() { return ARMCI_GPC_HLEN; } int ARMCI_Gpc_get_dlen() { return ARMCI_GPC_DLEN; } #endif ga-5-3/armci/src-gemini/fence.c0000640005473000001440000000355611622516074015165 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: fence.c,v 1.25.4.6 2007-08-30 19:17:02 manoj Exp $ */ #include "armcip.h" #include "armci.h" #include "copy.h" #include #if defined(PVM) # include #elif defined(TCGMSG) # include #elif defined(BGML) # include "bgml.h" #else # include #endif char *_armci_fence_arr; void armci_init_fence() { _armci_fence_arr=calloc(armci_nproc,1); if(!_armci_fence_arr) armci_die("armci_init_fence: calloc failed",0); } void ARMCI_DoFence(int proc) { int i; if(!SAMECLUSNODE(proc) && (armci_nclus >1)){ int cluster = armci_clus_id(proc); armci_rem_ack(cluster); } } void PARMCI_Fence(int proc) { int i; #if defined(DATA_SERVER) && !(defined(GM) && defined(ACK_FENCE)) // printf("%d [cp] fence_arr(%d)=%d\n",armci_me,proc,FENCE_ARR(proc)); if(FENCE_ARR(proc) && (armci_nclus >1)){ int cluster = armci_clus_id(proc); int master=armci_clus_info[cluster].master; armci_rem_ack(cluster); /* one ack per cluster node suffices */ /* note, in multi-threaded case it will only clear for current thread */ bzero(&FENCE_ARR(master),armci_clus_info[cluster].nslave); } #elif defined(BGML) BGML_WaitProc(proc); MEM_FENCE; #else FENCE_NODE(proc); MEM_FENCE; #endif } /* portals developers' note: armci fence is not guaranteed to be correct unless PUT_START events are captured PUT_ENDs do NOT guarantee order; only PUT_STARTs */ void PARMCI_AllFence() { #if defined(CLUSTER) { int p; for(p=0;p=(_reg__.serv_ptr) \ && (_ptr__) <= ( (char *)(_reg__.serv_ptr)+_reg__.size)) #endif static cos_mdesc_t _send_mdesc, _recv_mdesc; static cos_mdesc_t *send_mdesc = NULL; static cos_mdesc_t *recv_mdesc = NULL; int armci_onesided_direct_get_enabled = 1; int armci_onesided_direct_put_enabled = 1; cos_desc_t __global_1sided_direct_comm_desc; cos_desc_t __global_1sided_direct_get_comm_desc; // linked-list to hold mdh arrays for all ARMCI_Malloc calls remote_mdh_node_t *remote_mdh_base_node = NULL; char **client_buf_ptrs; int armci_onesided_init() { int i; cos_parameters_t cos_params; cos_params.options = ONESIDED_DS_PER_NUMA; cos_params.nDataServers = 1; cos_params.maxDescriptors = ARMCI_MAX_DESCRIPTORS*10; cos_params.maxRequestSize = ARMCI_MAX_REQUEST_SIZE; cos_params.dsHandlerFunc = armci_onesided_ds_handler; bzero(&__global_1sided_direct_comm_desc,sizeof(cos_desc_t)); // check to make sure things are properly sized if(armci_me == 0) { // ARMCI_ONESIDED_SIZEOF_IREQ is defined in armci.h if(sizeof(armci_ireq_t) != ARMCI_ONESIDED_SIZEOF_IREQ) { printf("ARMCI_ONESIDED_SIZEOF_IREQ is not sized correctly.\n"); printf("ARMCI_ONESIDED_SIZEOF_IREQ = %d\nsizeof(armci_ireq_t) = %d\n", ARMCI_ONESIDED_SIZEOF_IREQ,sizeof(armci_ireq_t)); abort(); } } // initialize libonesided COS_Init( &cos_params ); // initialize armci memory # ifdef ARMCI_REGISTER_SHMEM _rem_meminfo = (rem_meminfo_t *)calloc(armci_nproc,sizeof(rem_meminfo_t)); _tmp_rem_reginfo = (aptl_reginfo_t *)malloc(sizeof(aptl_reginfo_t)*armci_nproc); if( _rem_meminfo==NULL || _tmp_rem_reginfo ==NULL) { armci_die("malloc failed in init_portals",0); } if(armci_me == 0) { printf("sizeof(rem_meminfo_t)=%ld\n",sizeof(rem_meminfo_t)); } # endif client_buf_ptrs = (char **) calloc(armci_nproc,sizeof(char *)); assert(client_buf_ptrs); armci_msg_barrier(); _armci_buf_init(); // each armci buffer has a cos_request_t associated with it // initialize that cos_request_t now // moved into the above _armci_buf_init routine // for(i=0; idscrlen + msginfo->datalen; // print_data(msginfo); cpReqInit(remote_node, req); cpPrePostRecv(buffer, length, req); cpCopyLocalDataMDesc(req, &msginfo->tag.response_mdesc); if(length > ARMCI_MAX_REQUEST_SIZE) length = sizeof(request_header_t); cpReqSend(msginfo, length, req); // cpReqWait(req); // required until a new fence operation is created } void print_data(void* buf) { request_header_t *msginfo = (request_header_t *) buf; char *buffer = (char *) buf; buffer += sizeof(request_header_t) + msginfo->dscrlen; int ndouble = msginfo->datalen/8; double *data = (double *) buffer; printf("%d: [0]=%lf; [%d]=%lf; from=%d; to=%d\n",armci_me,data[0],ndouble-1,data[ndouble-1],msginfo->from, msginfo->to); } static void armci_onesided_recv(void* buffer, request_header_t *msginfo, int remote_node, cos_request_t *req) { size_t length = sizeof(request_header_t) + msginfo->dscrlen; size_t reg_len = length + msginfo->datalen; cpReqInit(remote_node, req); cpPrePostRecv(buffer, reg_len, req); cpCopyLocalDataMDesc(req, &msginfo->tag.response_mdesc); if(length > ARMCI_MAX_REQUEST_SIZE) length = sizeof(request_header_t); cpReqSend(msginfo, length, req); } static void armci_onesided_oper(void* buffer, request_header_t *msginfo, int remote_node, cos_request_t *req) { size_t length = sizeof(request_header_t); cpReqInit(remote_node, req); cpPrePostRecv(buffer, length, req); cpCopyLocalDataMDesc(req, &msginfo->tag.response_mdesc); cpReqSend(msginfo, length, req); } static void armci_onesided_rmw(void *buffer, request_header_t *msginfo, int remote_node, cos_request_t *req) { size_t length = sizeof(request_header_t) + msginfo->dscrlen + msginfo->datalen; cpReqInit(remote_node, req); cpPrePostRecv(buffer, msginfo->datalen, req); cpCopyLocalDataMDesc(req, &msginfo->tag.response_mdesc); cpReqSend(msginfo, length, req); } extern _buf_ackresp_t *_buf_ackresp_first,*_buf_ackresp_cur; #if defined CRAY_REGISTER_ARMCI_MALLOC && HAVE_ONESIDED_FADD void armci_onesided_fadd(void *ploc, void *prem, int extra, int proc) { onesided_hnd_t cp_hnd; cos_desc_t comm_desc; cos_mdesc_t local_mdh, remote_mdh, *mdh = NULL; cpGetOnesidedHandle(&cp_hnd); armci_onesided_search_remote_mdh_list(prem, proc, &remote_mdh); onesided_mem_register(cp_hnd, ploc, sizeof(long), NULL, &local_mdh); onesided_desc_init(cp_hnd, &local_mdh, &remote_mdh, 0, &comm_desc); onesided_fadd(extra, &comm_desc); onesided_wait(&comm_desc); } #endif int armci_send_req_msg(int proc, void *buf, int bytes, int tag) { int cluster = armci_clus_id(proc); int serv = armci_clus_info[cluster].master; char *buffer = (char *) buf; request_header_t *msginfo = (request_header_t *) buf; # ifdef ARMCI_LIMIT_REMOTE_REQUESTS_BY_NODE _armci_buf_ensure_one_outstanding_op_per_node(buf,cluster); # endif # ifdef SPECIAL_PUT_OPERATION_BROKEN_WHEN_INITIATED_FROM_USER_BUFFER // ensure any outstanding onesided direct operations have finished int state = __global_1sided_direct_comm_desc.state; onesided_wait(&__global_1sided_direct_comm_desc); if(state) cpMemDeregister(&__global_1sided_direct_comm_desc.local_mdesc); # endif BUF_INFO_T *bufinfo=_armci_buf_to_bufinfo(msginfo); _buf_ackresp_t *ar = &bufinfo->ar; cos_request_t *req = &ar->req; if(msginfo->operation == PUT || ARMCI_ACC(msginfo->operation)) { armci_onesided_send(buffer, msginfo, cluster, req); } else if(msginfo->operation == GET) { // move the buffer shift into the data server handler // buffer = (char *) buf; // buffer += sizeof(request_header_t); // buffer += msginfo->dscrlen; armci_onesided_recv(buffer, msginfo, cluster, req); } else if(msginfo->operation == ACK) { armci_onesided_oper(buffer, msginfo, cluster, req); #if HAVE_ONESIDED_MEM_HTFLUSH onesided_mem_htflush(cluster); #endif } else if(msginfo->operation == ARMCI_SWAP || msginfo->operation == ARMCI_SWAP_LONG || msginfo->operation == ARMCI_FETCH_AND_ADD || msginfo->operation == ARMCI_FETCH_AND_ADD_LONG) { buffer = (char *) buf; buffer += sizeof(request_header_t); buffer += msginfo->dscrlen; armci_onesided_rmw(buffer, msginfo, cluster, req); } else { cosError("armci_send_req_msg: operation not supported",msginfo->operation); } // this had to be included in the portals version or shit would go down ... not sure y! // for now, we'll leave it in and see what happens later when we remote it # if 1 ar->val = ar->valc = 0; if(ar==_buf_ackresp_first)_buf_ackresp_first=ar->next; if(ar->next!=NULL){ ar->next->previous=ar->previous; } if(ar->previous!=NULL){ ar->previous->next=ar->next; if(_buf_ackresp_cur==ar)_buf_ackresp_cur=ar->previous; } if(_buf_ackresp_cur==ar)_buf_ackresp_cur=NULL; ar->previous=ar->next=NULL; # endif return 0; } char * armci_ReadFromDirect(int proc, request_header_t *msginfo, int len) { // this is a CP funciton BUF_INFO_T *bufinfo = _armci_buf_to_bufinfo(msginfo); cos_request_t *req = &bufinfo->ar.req; cpReqWait(req); // return pointer to data char *ret = (char *) msginfo; ret += sizeof(request_header_t); ret += msginfo->dscrlen; return ret; } void armci_WriteToDirect(int proc, request_header_t *msginfo, void *buf) { // this is a DS function cos_desc_t resp_desc; cos_mdesc_t *resp_mdesc = &msginfo->tag.response_mdesc; dsDescInit(resp_mdesc, &resp_desc); resp_desc.event_type = EVENT_LOCAL | EVENT_REMOTE; if(send_mdesc == NULL) { send_mdesc = &_send_mdesc; dsMemRegister(MessageSndBuffer, sizeof(double)*MSG_BUFLEN_DBL, send_mdesc); } memcpy(&resp_desc.local_mdesc, send_mdesc, sizeof(cos_mdesc_t)); resp_desc.local_mdesc.addr = (uint64_t) buf; resp_desc.local_mdesc.length = (uint64_t) msginfo->datalen; // cosPut(buf, msginfo->datalen, &resp_desc); cosPutWithDesc(&resp_desc); dsDescWait(&resp_desc); } int armci_onesided_ds_handler(void *buffer) { size_t length = 0; cos_desc_t get_desc; cos_mdesc_t *mdesc = NULL; void *buffer_to_data_server = buffer; request_header_t *request = (request_header_t *) buffer; if(request->operation == PUT || ARMCI_ACC(request->operation)) { length = sizeof(request_header_t) + request->dscrlen + request->datalen; if(length > ARMCI_MAX_REQUEST_SIZE) { char *get_buffer = (char *) MessageRcvBuffer; if(recv_mdesc == NULL) { recv_mdesc = &_recv_mdesc; dsMemRegister(MessageRcvBuffer, sizeof(double)*MSG_BUFLEN_DBL, recv_mdesc); } mdesc = &request->tag.response_mdesc; dsDescInit(mdesc, &get_desc); get_desc.event_type = EVENT_LOCAL; memcpy(&get_desc.local_mdesc, recv_mdesc, sizeof(cos_mdesc_t)); get_desc.local_mdesc.length = length; assert(length <= sizeof(double)*MSG_BUFLEN_DBL); cosGetWithDesc(&get_desc); dsDescWait(&get_desc); buffer_to_data_server = (void *) get_buffer; } } else if(request->operation == GET) { length = sizeof(request_header_t) + request->dscrlen; if(length > ARMCI_MAX_REQUEST_SIZE) { // printf("[ds %d]: boom - rz fetch of get dscr\n",armci_me); char *get_buffer = (char *) MessageRcvBuffer; if(recv_mdesc == NULL) { recv_mdesc = &_recv_mdesc; dsMemRegister(MessageRcvBuffer, sizeof(double)*MSG_BUFLEN_DBL, recv_mdesc); } mdesc = &request->tag.response_mdesc; dsDescInit(mdesc, &get_desc); get_desc.event_type = EVENT_LOCAL; memcpy(&get_desc.local_mdesc, recv_mdesc, sizeof(cos_mdesc_t)); get_desc.local_mdesc.length = length; assert(length <= sizeof(double)*MSG_BUFLEN_DBL); cosGetWithDesc(&get_desc); dsDescWait(&get_desc); buffer_to_data_server = (void *) get_buffer; } // regardless of rendez-vous or eager protocols // we have to shift the buffer and data lengths in the response_mdesc tag request = (request_header_t *) buffer_to_data_server; char *rbuf = (char *) request->tag.response_mdesc.addr; rbuf += length; request->tag.response_mdesc.addr = (uint64_t) rbuf; request->tag.response_mdesc.length -= length; } if(request->operation == 0) { printf("%d [ds] possible zeroed buffer problem\n",armci_me); abort(); } armci_data_server(buffer_to_data_server); } void armci_rcv_req(void *mesg,void *phdr,void *pdescr,void *pdata,int *buflen) { int i,na; char *a; double *tmp; request_header_t *msginfo = (request_header_t *)mesg; ARMCI_PR_SDBG("enter",msginfo->operation); *(void **) phdr = msginfo; if(0) { printf("%d [ds]: got %d req (hdrlen=%d dscrlen=%d datalen=%d %d) from %d\n", armci_me, msginfo->operation, sizeof(request_header_t), msginfo->dscrlen, msginfo->datalen, msginfo->bytes,msginfo->from); fflush(stdout); } /* we leave room for msginfo on the client side */ *buflen = MSG_BUFLEN - sizeof(request_header_t); if(send_mdesc == NULL) { send_mdesc = &_send_mdesc; dsMemRegister(MessageSndBuffer, sizeof(double)*MSG_BUFLEN_DBL, send_mdesc); } // printf("%d [ds] oper=%d; bytes=%d\n",armci_me,msginfo->operation,msginfo->bytes); if(msginfo->bytes) { *(void **) pdescr = msginfo+1; *(void **) pdata = msginfo->dscrlen + (char*)(msginfo+1); if(msginfo->operation == GET) { // the descriptor will exists after the request header // but there will be no data buffer // use the MessageRcvBuffer *(void**) pdata = MessageSndBuffer; // printf("%s (server) overriding pdata in rcv_req\n",Portals_ID()); if(send_mdesc == NULL) { send_mdesc = &_send_mdesc; dsMemRegister(MessageSndBuffer, sizeof(double)*MSG_BUFLEN_DBL, send_mdesc); // printf("send_mdesc registered\n"); // fflush(stdout); } } } else { // printf("%d [ds]: hit this\n",armci_me); *(void**) pdescr = NULL; *(void**) pdata = MessageRcvBuffer; if(recv_mdesc == NULL) { recv_mdesc = &_recv_mdesc; dsMemRegister(MessageRcvBuffer, sizeof(double)*MSG_BUFLEN_DBL, recv_mdesc); } } ARMCI_PR_SDBG("exit",msginfo->operation); } void armci_server_send_ack(request_header_t *msginfo) { // this is a DS function cos_desc_t resp_desc; cos_mdesc_t *resp_mdesc = &msginfo->tag.response_mdesc; dsDescInit(resp_mdesc, &resp_desc); resp_desc.event_type = EVENT_LOCAL | EVENT_REMOTE; cosPut(NULL, 0, &resp_desc); dsDescWait(&resp_desc); } void x_buf_wait_ack(request_header_t *msginfo, BUF_INFO_T *bufinfo) { armci_die("x_buf_wait_ack not implemented",911); } void x_net_send_ack(request_header_t *msginfo, int proc, void *dst, void *src) { armci_die("x_net_send_ack not implemented",911); } long x_net_offset(char *buf, int proc) { armci_die("x_net_offset not implemented",911); # if 0 ARMCI_PR_DBG("enter",_rem_meminfo[proc].reg_count); if(DEBUG_COMM) { printf("\n%d:%s:buf=%p",armci_me,__FUNCTION__,buf);fflush(stdout); } for(i=0;i<_rem_meminfo[proc].reg_count;i++) { if(IN_REGION(buf,_rem_meminfo[proc].reginfo[i])) { return((long)((char *)_rem_meminfo[proc].reginfo[i].serv_ptr-(char *)_rem_meminfo[proc].reginfo[i].base_ptr)); } } ARMCI_PR_DBG("exit",0); # endif return 0; } // currently our list of remote mdhs appears that it can get several entries with various // lengths. we should scan the mdh list first to see if an entry exists in the list // if so, that could be an indication that the remote list entry function is not working // properly, or that a different type of armci_free call is being used to by pass the // removal of the mdh entry. either way, we need to examine these occurences. void armci_onesided_append_remote_mdh_list(void* tgt_ptr, int proc, cos_mdesc_t *ret_mdh) { } void armci_onesided_search_remote_mdh_list(void* tgt_ptr, int proc, cos_mdesc_t *ret_mdh) { int node = armci_clus_id(proc); uint64_t length; uint64_t rem_addr; uint64_t tgt_addr = (uint64_t) tgt_ptr; remote_mdh_node_t *ll = remote_mdh_base_node; const cos_mdesc_t *mdh = NULL; // search the link-list for remote address and return the while(ll) { // if we are in this routine, we are doing a direct onesided operations on a chuck of local // memory that was registered by the master process on this node. typically, an armci operation // would work directly off the virtual address of that data as attached by the current process; // however, because we are going to do a UGNI operation targetted at the MDH registered by the // armci_master rank on this node, we have to translate the virtual address on this rank to the // virtual address on armci_master. this means we have to find the mdh by searching the ptrs // array and not the mdhs[*].addr values if(SAMECLUSNODE(proc) && armci_me != armci_master) { rem_addr = (uint64_t) ll->ptrs[proc]; } else { rem_addr = (uint64_t) ll->mdhs[proc].addr; } length = ll->mdhs[proc].length; if(tgt_addr >= rem_addr && tgt_addr < (rem_addr+length) /* check length of msg */) { mdh = &ll->mdhs[proc]; break; } ll = ll->next; } // if remote mdh not found if(mdh == NULL) { printf("[cp %d]: warning - could not locate remote mdh for a direct put.\n",armci_me); printf("[cp %d]: searching for tgt_ptr=%p on node=%d / proc=%d\n",armci_me,tgt_ptr,node,proc); ll = remote_mdh_base_node; while(ll) { rem_addr = (uint64_t) ll->ptrs[proc]; length = ll->mdhs[proc].length; printf("[cp %d]: ll->ptrs[proc]=%p; ll->mdhs[node].length=%ld\n",armci_me,ll->ptrs[proc], length); ll = ll->next; } abort(); } // setup return mdh // on the remote side the node master is the only rank that registers the "shared" memmory. however, // shmat doesn't guarantee that all ranks on the node share the same starting virtual address. that // is why we have to calculate the offset from the starting address on the node master based on the // actual virutal addresses on the remote rank. memcpy(ret_mdh, mdh, sizeof(cos_mdesc_t)); // ret_mdh->addr += (tgt_addr-rem_addr); // if(ret_mdh->addr != tgt_addr) { // printf("%d: ret_mdh->addr=%ld; tgt_addr=%ld\n",armci_me,ret_mdh->addr, tgt_addr); // fflush(stdout); // } // if we are targeting a rank on the node for a direct operation, we need to translate the address // if not, then we can use the tgt_addr as passed in if(SAMECLUSNODE(proc) && armci_me != armci_master) { ret_mdh->addr += (tgt_addr-rem_addr); } else { ret_mdh->addr = tgt_addr; } } void armci_onesided_remove_from_remote_mdh_list(void *tgt_ptr) { cos_comm_t info; cos_mdesc_t *mdh = NULL; onesided_hnd_t cp_hnd; int node = armci_clus_id(armci_me); long total_bytes; remote_mdh_node_t *rm_ll, *ll = remote_mdh_base_node; NTK_MPI_GetComm(MPI_COMM_WORLD, &info); // get the onesided v2.0 api handle for the compute process cpGetOnesidedHandle(&cp_hnd); // find mdh while(ll) { if(tgt_ptr == ll->ptrs[armci_me]) { mdh = &ll->mdhs[armci_me]; break; } ll = ll->next; } // ensure we have a valid mdh if(mdh == NULL) abort(); // sum the total bytes allocated on the node MPI_Allreduce(&mdh->length, &total_bytes, 1, MPI_LONG, MPI_SUM, info.numa_comm); // node master only if(info.numa_me == 0 && total_bytes) { // deregister memory onesided_mem_deregister(cp_hnd, mdh); // cpMemDeregister(mdh); } // free mdhs free(ll->mdhs); ll->mdhs = NULL; // update linked-list rm_ll = ll; if(rm_ll == remote_mdh_base_node) remote_mdh_base_node = rm_ll->next; else { ll = remote_mdh_base_node; while(ll->next != rm_ll) ll = ll->next; assert(ll->next == rm_ll); ll->next = rm_ll->next; } free(rm_ll); } void ARMCI_INIT_HANDLE(void *hdl) { bzero(hdl, ARMCI_ONESIDED_SIZEOF_IREQ); } void armci_direct_on() { armci_onesided_direct_get_enabled = 1; armci_onesided_direct_put_enabled = 1; } void armci_direct_off() { armci_onesided_direct_get_enabled = 0; armci_onesided_direct_put_enabled = 0; } void armci_direct_on_() { armci_direct_on(); } void armci_direct_off_() { armci_direct_off(); } ga-5-3/armci/src-gemini/shmlimit.c0000640005473000001440000000561011466102622015720 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: shmlimit.c,v 1.13 2000-10-11 21:37:01 d3h325 Exp $ */ /* * This code is used to test shared memory limits within * a separately forked child process. * This has to be done in a child process to make sure that * swap space allocated in test is not counted against ARMCI processes. * Some systems do not release swap after shmem ids are deleted * until the process exits. * JN/07.07.99 */ #include #include #include #include #include #include #include "shmlimit.h" #define DEBUG_ 0 #if defined(DECOSF) || defined(SOLARIS64) || defined(HPUX) #define PIPE_AFTER_FORK_BUG #endif void (*armci_sig_chld_orig)(); static int status=0; int armci_shmlimit_caught_sigchld=0; #if defined(SUN) && !defined(SOLARIS) static void SigChldHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else static void SigChldHandler(sig) #endif int sig; { #ifdef DISABLED int pid; pid = wait(&status); #endif armci_shmlimit_caught_sigchld=1; } static void TrapSigChld() { if ( (armci_sig_chld_orig = signal(SIGCHLD, SigChldHandler)) == SIG_ERR) armci_die("TrapSigChld: error from signal setting SIGCHLD",0); } static void RestoreSigChld() { if ( signal(SIGCHLD, armci_sig_chld_orig) == SIG_ERR) armci_die("Restore_SigChld: error from restoring signal SIGChld",0); } static int child_finished() { return armci_shmlimit_caught_sigchld; } int armci_child_shmem_init() { pid_t pid; int x; #ifdef PIPE_AFTER_FORK_BUG int i; #endif int y; int fd[2]; if(pipe(fd)==-1) armci_die("armci shmem_test pipe failed",0); TrapSigChld(); if ( (pid = fork() ) < 0) armci_die("armci shmem_test fork failed", (int)pid); else if(pid == 0){ x= armci_shmem_test(); #ifdef PIPE_AFTER_FORK_BUG /* due to a bug in OSF1 V4.0/1229/alpha first item written gets hosed*/ for(i=0;i<2;i++) #endif if(write(fd[1],&x,sizeof(int)) #include #include #include #include #include #include #include #include "shmem.h" #include "kr_malloc.h" #include "shmlimit.h" #include "message.h" #include "armcip.h" #ifdef ALLOC_MUNMAP #include #include static size_t pagesize=0; static int logpagesize=0; /* allow only that big shared memory segment (in MB)- incresed from 128 11/02 */ #define MAX_ALLOC_MUNMAP 128 #define MAX_ALLOC_MUNMAP_ 368 static long max_alloc_munmap=MAX_ALLOC_MUNMAP; #endif #if defined(SUN) extern char *shmat(); #endif #define SHM_UNIT (1024) /* Need to determine the max shmem segment size. There are 2 alternatives: * 1. use predefined SHMMAX if available or set some reasonable values, or * 2. trial-and-error search for a max value (default) * case a) fork a process to determine shmmax size (more accurate) * case b) search w/o forking until success (less accurate) */ /* under Myrinet GM, we cannot fork */ #if defined(GM) || defined(VAPI) # define SHMMAX_SEARCH_NO_FORK #endif #if defined(LAPI) || defined(AIX) || defined(SHMMAX_SEARCH_NO_FORK) || defined(CRAY_XT) || defined(CRAY_UGNI) # define NO_SHMMAX_SEARCH #endif /* Limits for the largest shmem segment are in Kilobytes to avoid passing * Gigavalues to kr_malloc * the limit for the KSR is lower than SHMMAX in sys/param.h because * shmat would fail -- SHMMAX cannot be trusted (a bug) */ #define _SHMMAX 4*1024 #if defined(SUN)||defined(SOLARIS) # undef _SHMMAX # define _SHMMAX (1024) /* memory in KB */ #elif defined(SGI64) || defined(AIX) || defined(CONVEX) # undef _SHMMAX # define _SHMMAX ((unsigned long)512*1024) #elif defined(SGI) && !defined(SGI64) # undef _SHMMAX # define _SHMMAX ((unsigned long)128*1024) #elif defined(KSR) # undef _SHMMAX # define _SHMMAX ((unsigned long)512*1024) #elif defined(HPUX) # undef _SHMMAX # define _SHMMAX ((unsigned long)64*1024) #elif defined(__FreeBSD__) # undef _SHMMAX # define _SHMMAX ((unsigned long)3*1024) #elif defined(LINUX) # if !defined(SHMMAX) /* Red Hat does not define SHMMAX */ # undef _SHMMAX # if defined(__sparc__) || defined(__powerpc__) # define _SHMMAX ((unsigned long)16*1024) # elif defined(__alpha__) # define _SHMMAX ((unsigned long)4072) # else /* Intel */ # define _SHMMAX ((unsigned long)32*1024) # endif # endif #elif defined(SHMMAX) # undef _SHMMAX # define _SHMMAX (((unsigned long)SHMMAX)>>10) #endif static unsigned long MinShmem_per_core = 0; static unsigned long MaxShmem_per_core = 0; static unsigned long MinShmem = _SHMMAX; static unsigned long MaxShmem = MAX_REGIONS*_SHMMAX; static context_t ctx_shmem; /* kr_malloc context */ static context_t *ctx_shmem_global; /* kr_malloc context stored in shmem */ static int create_call=0; #ifdef SHMMAX_SEARCH_NO_FORK static char *ptr_search_no_fork = (char*)0; static int id_search_no_fork=0; #endif #ifdef LINUX #define CLEANUP_CMD(command) sprintf(command,"/usr/bin/ipcrm shm %d",id); #elif defined(SOLARIS) #define CLEANUP_CMD(command) sprintf(command,"/bin/ipcrm -m %d",id); #elif defined(SGI) #define CLEANUP_CMD(command) sprintf(command,"/usr/sbin/ipcrm -m %d",id); #else #define CLEANUP_CMD(command) sprintf(command,"/usr/bin/ipcrm -m %d",id); #endif #ifdef ALLOC_MUNMAP #ifdef QUADRICS # include # include static char *armci_elan_starting_address = (char*)0; # ifdef __ia64__ # define ALLOC_MUNMAP_ALIGN 1024*1024 # else # define ALLOC_MUNMAP_ALIGN 64*1024 # endif # define ALGN_MALLOC(s,a) elan_allocMain(elan_base->state, (a), (s)) #else # define ALGN_MALLOC(s,a) malloc((s)) #endif static char* alloc_munmap(size_t size) { char *tmp; unsigned long iptr; size_t bytes = size+pagesize-1; if(armci_elan_starting_address){ tmp = armci_elan_starting_address; armci_elan_starting_address += size; # ifdef ALLOC_MUNMAP_ALIGN armci_elan_starting_address += ALLOC_MUNMAP_ALIGN; # endif if(DEBUG_) {printf("%d: address for shm attachment is %p size=%ld\n", armci_me,tmp,(long)size); fflush(stdout); } } else { tmp = ALGN_MALLOC(bytes, getpagesize()); if(tmp){ iptr = (unsigned long)tmp + pagesize-1; iptr >>= logpagesize; iptr <<= logpagesize; if(DEBUG_) printf("%d:unmap ptr=%p->%p size=%d pagesize=%d\n",armci_me, tmp,(char*)iptr,(int)size,pagesize); tmp = (char*)iptr; if(munmap(tmp, size) == -1) armci_die("munmap failed",0); if(DEBUG_){printf("%d: unmap OK\n",armci_me); fflush(stdout);} }else armci_die("alloc_munmap: malloc failed",(int)size); } return tmp; } #endif /*\ A wrapper to shmget. Just to be sure that ID is not 0. \*/ int armci_shmget(size_t size,char *from) { int id; id = shmget(IPC_PRIVATE, size, (IPC_CREAT | 00600)); /*attaching with id 0 somehow fails (Seen on pentium4+linux24+gm163) *so if id=0, shmget again. */ while(id==0){ /* free id=0 and get a new one */ if(shmctl((int)id,IPC_RMID,(struct shmid_ds *)NULL)) { fprintf(stderr,"id=%d \n",id); armci_die("allocate: failed to _delete_ shared region ",id); } id = shmget(IPC_PRIVATE, size, (IPC_CREAT | 00600)); } if(DEBUG_){ printf("\n%d:armci_shmget sz=%ld caller=%s id=%d\n",armci_me,(long)size, from,id); fflush(stdout); } return(id); } static int Semget(key_t key,int nsems,int semflg) { int ret; if((ret = semget(key,nsems,semflg)) == -1) { switch(errno) { case EACCES: fprintf(stdout," semget errno=EACCES.\n"); break; case EINVAL: fprintf(stdout," semget errno=EINVAL.\n"); break; case ENOENT: fprintf(stdout," semget errno=ENOENT.\n"); break; case ENOSPC: fprintf(stdout," semget errno=ENOSPC -- check system limit for sysv semaphores.\n"); break; case ENOMEM: fprintf(stdout," semget errno=ENOMEM.\n"); break; case EEXIST: fprintf(stdout," semget errno=EEXIST.\n"); break; default: fprintf(stdout," unusual semget errno=%d\n",errno); break; } armci_die("semget failed",errno); } return ret; } int armci_semget(int count) { int id; id = Semget(IPC_PRIVATE,2,0600); return id; } int armci_semrm(int id) { semctl(id,0,IPC_RMID); } int armci_shmrm(int id) { int ret; if((ret = shmctl(id,IPC_RMID,NULL)) != 0) { fprintf(stdout,"[cp]: shmctl return an error.\n"); switch(errno) { case EINVAL: fprintf(stdout," Error EINVAL: shmid is not a valid shared memory segment.\n"); break; case EFAULT: fprintf(stdout," Error EFAULT: argument 3 is not a valid struct shmid_ds.\n"); break; case EPERM: fprintf(stdout," Error EPREM: permission to access/change shared mem segment denied.\n"); break; default: fprintf(stdout," unusual shmctl errno=%d\n",errno); break; break; } armci_die("error deleting shmid",id); } return ret; } /*\ test is a shared memory region of a specified size can be allocated * return 0 (no) or 1 (yes) \*/ int armci_test_allocate(long size) { char *ptr; int id = armci_shmget((size_t)size,"armci_test_allocate"); if (id <0) return 0; /* attach to segment */ ptr = shmat(id, (char *) NULL, 0); /* delete segment id */ if(shmctl( id, IPC_RMID, (struct shmid_ds *)NULL)) fprintf(stderr,"failed to remove shm id=%d\n",id); /* test pointer */ if (((long)ptr) == -1L) return 0; else return 1; } /*\ try to allocate a shared memory region of a specified size; return pointer \*/ static int armci_shmalloc_try(long size) { #ifdef SHMMAX_SEARCH_NO_FORK char *ptr; int id = armci_shmget((size_t) size,"armci_shmalloc_try"); if (id <0) return 0; /* attach to segment */ ptr = shmat(id, (char *) NULL, 0); /* test pointer */ if (((long)ptr) == -1L) return 0; ptr_search_no_fork = ptr; id_search_no_fork = id; #endif return 1; } /* parameters that define range and granularity of search for shm segment size * UBOUND is chosen to be < 2GB to avoid overflowing on 32-bit systems * smaller PAGE gives more accurate results but with more search steps * LBOUND is set to minimum amount for our purposes * change UBOUND=512MB if you need larger arrays than 512 MB */ #define PAGE (16*65536L) #define LBOUND 1048576L #if defined(MULTI_CTX) && defined(QUADRICS) #define UBOUND (256*LBOUND) #else #define UBOUND (512*LBOUND) #endif static long get_user_shmmax() { char *uval; long x=0; uval = getenv("ARMCI_DEFAULT_SHMMAX"); if(uval != NULL){ sscanf(uval,"%ld",&x); if(x<1L || x> 2048L){ fprintf(stderr,"incorrect ARMCI_DEFAULT_SHMMAX should be <1,2048>mb and 2^N Found=%ld\n",x); x=0; } } return x*1048576; /* return value in bytes */ } /*\ determine the max shmem segment size using bisection \*/ int armci_shmem_test() { long x; int i,rc; long upper_bound=UBOUND; long lower_bound=0; x = get_user_shmmax(); if(!x) x = upper_bound; else upper_bound =x; if(DEBUG_){printf("%d: x = %ld upper_bound=%ld\n",armci_me, x, upper_bound); fflush(stdout);} for(i=1;;i++){ long step; rc = armci_test_allocate(x); if(DEBUG_) printf("%d:test %d size=%ld bytes status=%d\n",armci_me,i,x,rc); if(rc){ lower_bound = x; step = (upper_bound -x)>>1; if(step < PAGE) break; x += step; }else{ upper_bound = x; step = (x-lower_bound)>>1; if(step>=20; x <<=20; } if(!lower_bound){ /* try if can get LBOUND - necessary if search starts from UBOUND */ lower_bound=LBOUND; rc = armci_test_allocate(lower_bound); if(!rc) return(0); } if(DEBUG_) printf("%ld bytes segment size, %d calls \n",lower_bound,i); return (int)( lower_bound>>20); /* return shmmax in mb */ } #ifdef SHMMAX_SEARCH_NO_FORK /*\ determine the max shmem segment size by halving \*/ static int armci_shmem_test_no_fork() { long x; int i,rc; long lower_bound=_SHMMAX*SHM_UNIT; #define UBOUND_SEARCH_NO_FORK (256*SHM_UNIT*SHM_UNIT) x = get_user_shmmax(); if(!x) x = UBOUND_SEARCH_NO_FORK; for(i=1;;i++){ rc = armci_shmalloc_try(x); if(DEBUG_) printf("%d:test by halving size=%ld bytes rc=%d\n",armci_me,x,rc); if(rc){ lower_bound = x; break; }else{ x >>= 1 ; if(x>20); /* return shmmax in mb */ } #endif #ifdef MULTI_CTX void armci_nattach_preallocate_info(int* segments, int *segsize) { int x; char *uval; uval = getenv("LIBELAN_NATTACH"); if(uval != NULL){ sscanf(uval,"%d",&x); if(x<2 || x>8) armci_die("Error in LIBELAN_NATTACH <8, >1 ",(int)x); }else armci_die("Inconsistent configuration: ARMCI needs LIBELAN_NATTACH",0); *segments =x; *segsize = (int) (SHM_UNIT * MinShmem); } #endif /* Create shared region to store kr_malloc context in shared memory */ void armci_krmalloc_init_ctxshmem() { void *myptr=NULL; long idlist[SHMIDLEN]; long size; int offset = sizeof(void*)/sizeof(int); /* to store shared memory context and myptr */ size = SHMEM_CTX_MEM; if(armci_me == armci_master ){ myptr = Create_Shared_Region(idlist+1,size,idlist); if(!myptr && size>0 ) armci_die("armci_krmalloc_init_ctxshmem: could not create", (int)(size>>10)); if(size) *(volatile void**)myptr = myptr; if(DEBUG_){ printf("%d:armci_krmalloc_init_ctxshmem addr mptr=%p ref=%p size=%ld\n", armci_me, myptr, *(void**)myptr, size); fflush(stdout); } /* Bootstrapping: allocate storage for ctx_shmem_global. NOTE:there is offset,as master places its address at begining for others to see */ ctx_shmem_global = (context_t*) ( ((int*)myptr)+offset ); *ctx_shmem_global = ctx_shmem; /*master copies ctx into shared region */ } /* broadcast shmem id to other processes on the same cluster node */ armci_msg_clus_brdcst(idlist, SHMIDLEN*sizeof(long)); if(armci_me != armci_master){ myptr=(double*)Attach_Shared_Region(idlist+1,size,idlist[0]); if(!myptr)armci_die("armci_krmalloc_init_ctxshmem: could not attach", (int)(size>>10)); /* now every process in a SMP node needs to find out its offset * w.r.t. master - this offset is necessary to use memlock table */ if(size) armci_set_mem_offset(myptr); if(DEBUG_){ printf("%d:armci_krmalloc_init_ctxshmem attached addr mptr=%p ref=%p size=%ld\n", armci_me,myptr, *(void**)myptr,size); fflush(stdout); } /* store context info */ ctx_shmem_global = (context_t*) ( ((int*)myptr)+offset ); if(DEBUG_){ printf("%d:armci_krmalloc_init_ctxshmem: shmid=%d off=%ld size=%ld\n", armci_me, ctx_shmem_global->shmid, ctx_shmem_global->shmoffset, (long)ctx_shmem_global->shmsize); fflush(stdout); } } } void armci_shmem_init() { #ifdef ALLOC_MUNMAP #if defined(QUADRICS) # if (defined(__ia64__) || defined(__alpha)) && !defined(DECOSF) /* this is to determine size of Elan Main memory allocator for munmap */ long x; char *uval; uval = getenv("LIBELAN_ALLOC_SIZE"); if(uval != NULL){ sscanf(uval,"%ld",&x); if((x>80000000) && (x< 4*1024*1024*1024L)){ max_alloc_munmap = (x>>20) - 72; if(DEBUG_){ printf("%d: max_alloc_munmap is %ld\n",armci_me,max_alloc_munmap); fflush(stdout); } } } /* an alternative approach is to use MMAP area where we get the address from the Elan environment variable in qsnetlibs 1.4+ */ uval = getenv("LIBELAN3_MMAPBASE"); if(uval != NULL){ sscanf(uval,"%p",&armci_elan_starting_address); } # endif # if defined(__ia64__) /* need aligment on 1MB boundary rather than the actual pagesize */ pagesize = 1024*1024; logpagesize = 20; # else /* determine log2(pagesize) needed for address alignment */ int tp=512; logpagesize = 9; pagesize = getpagesize(); if(tp>pagesize)armci_die("armci_shmem_init:pagesize",pagesize); while(tpmax_alloc_munmap && !armci_elan_starting_address) x=max_alloc_munmap; # else x = 10; /* mb */ # endif # endif if(DEBUG_){ printf("%d:shmem_init: %d mbytes max segment size\n",armci_me,x);fflush(stdout);} MinShmem = (long)(x<<10); /* make sure it is in kb: mb <<10 */ MaxShmem = MAX_REGIONS*MinShmem; # ifdef REPORT_SHMMAX printf("%d using x=%d SHMMAX=%ldKB\n", armci_me,x, MinShmem); fflush(stdout); # endif #else /* nothing to do here - limits were given */ #endif } armci_krmalloc_init_ctxshmem(); if(DEBUG_)printf("%d: out of shmem_init\n",armci_me); } void armci_set_shmem_limit_per_node(int nslaves) { if (MaxShmem_per_core > 0) MaxShmem = nslaves*MaxShmem_per_core; if (MinShmem_per_core > 0) MinShmem = nslaves*MinShmem_per_core; } void armci_set_shmem_limit_per_core(unsigned long shmemlimit) { MaxShmem_per_core = (shmemlimit + SHM_UNIT - 1)/SHM_UNIT; MinShmem_per_core = (shmemlimit + SHM_UNIT - 1)/SHM_UNIT; } /*\ application can reset the upper limit (bytes) for memory allocation \*/ void armci_set_shmem_limit(unsigned long shmemlimit) { unsigned long kbytes; kbytes = (shmemlimit + SHM_UNIT -1)/SHM_UNIT; if(MaxShmem > kbytes) MaxShmem = kbytes; if(MinShmem > kbytes) MinShmem = kbytes; } static void shmem_errmsg(size_t size) { long sz=(long)size; printf("******************* ARMCI INFO ************************\n"); printf("The application attempted to allocate a shared memory segment "); printf("of %ld bytes in size. This might be in addition to segments ",sz); printf("that were allocated succesfully previously. "); printf("The current system configuration does not allow enough "); printf("shared memory to be allocated to the application.\n"); printf("This is most often caused by:\n1) system parameter SHMMAX "); printf("(largest shared memory segment) being too small or\n"); printf("2) insufficient swap space.\n"); printf("Please ask your system administrator to verify if SHMMAX "); printf("matches the amount of memory needed by your application and "); printf("the system has sufficient amount of swap space. "); printf("Most UNIX systems can be easily reconfigured "); printf("to allow larger shared memory segments,\n"); printf("see http://www.emsl.pnl.gov/docs/global/support.shtml\n"); printf("In some cases, the problem might be caused by insufficient swap space.\n"); printf("*******************************************************\n"); } static struct shm_region_list{ char *addr; long id; long sz; long attached; }region_list[MAX_REGIONS]; static int alloc_regions=0; static long occup_blocks=0; /* Terminology * region - actual piece of shared memory allocated from OS * block - a part of allocated shmem that is given to the requesting process */ static int last_allocated=-1; unsigned long armci_max_region() { return MinShmem; } int find_regions(char *addrp, long* id, int *region) { int nreg, reg; if(last_allocated!=-1){ reg=last_allocated; last_allocated = -1; } else{ for(reg=-1,nreg=0;nreg= region_list[nreg].addr && addrp < (region_list[nreg].addr + region_list[nreg].sz)) { reg = nreg; break; } } if(reg == -1) armci_die("find_regions: failed to locate shared region", 0L); } *region = reg; *id = region_list[reg].id; return 1; } /* returns the shmem info based on the addr */ int armci_get_shmem_info(char *addrp, int* shmid, long *shmoffset, size_t *shmsize) { int region; long id; find_regions(addrp, &id, ®ion); *shmid = id; *shmoffset = (long)(addrp - region_list[region].addr); *shmsize = region_list[region].sz; return 1; } long armci_shm_reg_size(int i, long id) { if(i<0 || i>= MAX_REGIONS)armci_die("armci_shmem_reg_size: bad i",i); return region_list[i].sz; } void* armci_shm_reg_ptr(int i) { if(i<0 || i>= MAX_REGIONS)armci_die("armci_shmem_reg_ptr: bad i",i); return (void *)region_list[i].addr; } Header *armci_get_shmem_ptr(int shmid, long shmoffset, size_t shmsize) { /* returns, address of the shared memory region based on shmid, offset. * (i.e. return_addr = stating address of shmid + offset)*/ long idlist[SHMIDLEN]; Header *p = NULL; idlist[1] = (long)shmid; idlist[0] = shmoffset; idlist[IDLOC+1] = shmsize; /* CHECK : idlist in CreateShmem????*/ if(!(p=(Header*)Attach_Shared_Region(idlist+1, shmsize, idlist[0]))) armci_die("kr_malloc:could not attach",(int)(p->s.shmsize>>10)); #if DEBUG_ printf("%d: armci_get_shmem_ptr: %d %ld %ld %p\n", armci_me, idlist[1], idlist[0], shmsize, p); fflush(stdout); #endif return p; } char *Attach_Shared_Region(id, size, offset) long *id, offset, size; { int reg, found, shmflag=0; static char *temp; if(alloc_regions>=MAX_REGIONS) armci_die("Attach_Shared_Region: to many regions ",0); if(DEBUG_){ printf("%d:AttachSharedRegion %d:size=%ld id=%ld\n", armci_me, create_call++, size,*id); fflush(stdout); } /* under Linux we can get valid id=0 */ #ifndef LINUX if(!*id) armci_die("Attach_Shared_Region: shmem ID=0 ",(int)*id); #endif /* first time needs to initialize region_list structure */ if(!alloc_regions){ for(reg=0;reg= MAX_REGIONS) armci_die("Create_Shared_Region:allocate:too many regions allocated ",0); last_allocated = alloc_regions; #ifdef SHMMAX_SEARCH_NO_FORK if (ptr_search_no_fork){ temp = ptr_search_no_fork; id = id_search_no_fork; ptr_search_no_fork = (char*)0; /* do not look at it again */ }else #endif { if ( (id = armci_shmget(sz,"armci_allocate")) < 0 ) { fprintf(stderr,"id=%d size=%ld\n",id, size); shmem_errmsg(sz); armci_die("allocate: failed to create shared region ",id); } if ( (long)( (temp = shmat(id, pref_addr, shmflag))) == -1L){ char command[64]; CLEANUP_CMD(command); if(system(command) == -1) printf("Please clean shared memory (id=%d): see man ipcrm\n",id); armci_die("allocate: failed to attach to shared region id=",id); } if(DEBUG_){ printf("%d:allocate:attach:id=%d paddr=%p size=%ld\n",armci_me,id,temp,size); fflush(stdout); } #if 1 /* delete segment id so that OS cleans it when all attached processes are gone */ if(shmctl( id, IPC_RMID, (struct shmid_ds *)NULL)) fprintf(stderr,"failed to remove shm id=%d\n",id); #endif } POST_ALLOC_CHECK(temp,sz); region_list[alloc_regions].addr = temp; region_list[alloc_regions].id = id; region_list[alloc_regions].attached=1; region_list[alloc_regions].sz=sz; alloc_regions++; if(DEBUG2_){ printf("%d:allocate:id=%d addr=%p size=%ld\n",armci_me,id,temp,size); fflush(stdout); } return (void*) (temp); } /******************** common code for the two versions *********************/ /*\ Allocate a block of shared memory - called by master process \*/ char *Create_Shared_Region(long *id, long size, long *offset) { char *temp; int reg, refreg=0,nreg; if(alloc_regions>=MAX_REGIONS) armci_die("Create_Shared_Region: to many regions ",0); if(DEBUG_){ printf("%d:CreateSharedRegion %d:size=%ld\n",armci_me,create_call++,size); fflush(stdout); } /*initialization: 1st allocation request */ if(!alloc_regions){ for(reg=0;regtag)\ if(nb_handle->tag==_cntr->tag)\ rc = armci_client_complete(0,nb_handle->proc,nb_handle->tag,_cntr);\ } else{\ printf("\n%d:wait null ctr\n",armci_me);} #endif #define ARMCI_NB_WAIT(_cntr) #endif ga-5-3/armci/src-gemini/groups.c0000640005473000001440000004147511643667455015443 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: groups.c,v 1.4.6.2 2007-08-15 08:37:16 manoj Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_ASSERT_H # include #endif #ifndef MPI # define MPI #endif #include "armcip.h" #include "message.h" #define DEBUG_ 0 MPI_Comm ARMCI_COMM_WORLD; /*dup of MPI_COMM_WORLD. Initialized first thing in ARMCI_Init*/ ARMCI_Group ARMCI_Default_Proc_Group = 0; ARMCI_Group ARMCI_World_Proc_Group = 0; typedef struct group_list_struct { ARMCI_Group group; ARMCI_iGroup igroup; struct group_list_struct *next; } group_list_t; group_list_t *group_list = NULL; ARMCI_iGroup* armci_get_igroup_from_group(ARMCI_Group *group) { group_list_t *current_group_list_item = group_list; assert(group_list != NULL); while (current_group_list_item != NULL) { if (current_group_list_item->group == *group) { return ¤t_group_list_item->igroup; } current_group_list_item = current_group_list_item->next; } armci_die("ARMCI_Group lookup failed", -1); return NULL; } static void armci_create_group_and_igroup(ARMCI_Group *group, ARMCI_iGroup **igroup) { group_list_t *new_group_list_item = NULL; group_list_t *last_group_list_item = NULL; /* create the new group in the linked list */ last_group_list_item = group_list; while (last_group_list_item->next != NULL) { last_group_list_item = last_group_list_item->next; } new_group_list_item = malloc(sizeof(group_list_t)); new_group_list_item->group = last_group_list_item->group + 1; new_group_list_item->next = NULL; *igroup = &new_group_list_item->igroup; *group = new_group_list_item->group; last_group_list_item->next = new_group_list_item; } #ifdef ARMCI_GROUP void ARMCI_Bcast_(void *buffer, int len, int root, ARMCI_Group *group) { armci_msg_group_bcast_scope(SCOPE_ALL, buffer, len, ARMCI_Absolute_id(group, root), group); } #else void ARMCI_Bcast_(void *buffer, int len, int root, ARMCI_Comm comm) { int result; MPI_Comm_compare(comm, ARMCI_COMM_WORLD, &result); if(result == MPI_IDENT) armci_msg_brdcst(buffer, len, root); else MPI_Bcast(buffer, len, MPI_BYTE, root, (MPI_Comm)comm); } #endif int ARMCI_Group_rank(ARMCI_Group *group, int *rank) { ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); #ifdef ARMCI_GROUP if(!igroup) return MPI_ERR_GROUP; *rank = igroup->grp_attr.grp_me; return MPI_SUCCESS; #else return MPI_Group_rank((MPI_Group)(igroup->igroup), rank); #endif } void ARMCI_Group_size(ARMCI_Group *group, int *size) { ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); #ifdef ARMCI_GROUP *size = igroup->grp_attr.nproc; #else MPI_Group_size((MPI_Group)(igroup->igroup), size); #endif } int ARMCI_Absolute_id(ARMCI_Group *group,int group_rank) { int abs_rank,status; ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); #ifdef ARMCI_GROUP assert(group_rank < igroup->grp_attr.nproc); return igroup->grp_attr.proc_list[group_rank]; #else MPI_Group grp; status = MPI_Comm_group(ARMCI_COMM_WORLD,&grp); MPI_Group_translate_ranks(igroup->igroup,1,&group_rank,grp,&abs_rank); return(abs_rank); #endif } void ARMCI_Group_set_default(ARMCI_Group *group) { ARMCI_Default_Proc_Group = *group; } void ARMCI_Group_get_default(ARMCI_Group *group_out) { *group_out = ARMCI_Default_Proc_Group; } void ARMCI_Group_get_world(ARMCI_Group *group_out) { *group_out = ARMCI_World_Proc_Group; } static void get_group_clus_id(ARMCI_iGroup *igroup, int grp_nproc, int *grp_clus_id) { #ifdef ARMCI_GROUP int i; assert(grp_nproc<=igroup->grp_attr.nproc); for(i=0; igrp_attr.proc_list[i]); } #else int i, *ranks1, *ranks2; MPI_Group group2; /* Takes the list of processes from one group and attempts to determine * the corresponding ranks in a second group (here, ARMCI_COMM_WORLD) */ ranks1 = (int *)malloc(2*grp_nproc*sizeof(int)); ranks2 = ranks1 + grp_nproc; for(i=0; iigroup, grp_nproc, ranks1, group2, ranks2); /* get the clus_id of processes */ for(i=0; iicomm; #endif int grp_me, grp_nproc, grp_nclus, grp_clus_me; armci_clus_t *grp_clus_info=NULL; #ifdef CLUSTER int i, len, root=0; #endif #ifndef ARMCI_GROUP if(comm==MPI_COMM_NULL || igroup->igroup==MPI_GROUP_NULL) armci_die("group_process_list: NULL COMMUNICATOR",0); #endif ARMCI_Group_rank(group, &grp_me); ARMCI_Group_size(group, &grp_nproc); #ifdef CLUSTER # ifdef ARMCI_GROUP /*all processes construct the clus_info structure in parallel*/ grp_clus_info = group_construct_clusinfo(&grp_nclus, group); # else /* process 0 gets group cluster information: grp_nclus, grp_clus_info */ if(grp_me == 0) { grp_clus_info = group_construct_clusinfo(&grp_nclus, group); } /* process 0 broadcasts group cluster information */ len = sizeof(int); ARMCI_Bcast_(&grp_nclus, len, root, comm); if(grp_me){ /* allocate memory */ grp_clus_info = (armci_clus_t*)malloc(grp_nclus*sizeof(armci_clus_t)); if(!armci_clus_info)armci_die("malloc failed for clusinfo",armci_nclus); } len = sizeof(armci_clus_t)*grp_nclus; ARMCI_Bcast_(grp_clus_info, len, root, comm); # endif /* determine current group cluster node id by comparing me to master */ grp_clus_me = grp_nclus-1; for(i =0; i< grp_nclus-1; i++) { if(grp_me < grp_clus_info[i+1].master){ grp_clus_me=i; break; } } #else /* !CLUSTER */ grp_clus_me = 0; grp_nclus = 1; grp_clus_info = (armci_clus_t*)malloc(grp_nclus*sizeof(armci_clus_t)); if(!grp_clus_info)armci_die("malloc failed for clusinfo",grp_nclus); strcpy(grp_clus_info[0].hostname, armci_clus_info[0].hostname); grp_clus_info[0].master=0; grp_clus_info[0].nslave=grp_nproc; #endif /* CLUSTER */ #ifdef ARMCI_GROUP /*Set in ARMCI_Group_create. ARMCI_Group_rank is used before setting this field. So moving it there in the generic implementation.*/ #else grp_attr->grp_me = grp_me; #endif grp_attr->grp_clus_info = grp_clus_info; grp_attr->grp_nclus = grp_nclus; grp_attr->grp_clus_me = grp_clus_me; } /* attribute caching: group_cluster_information and memory_offset should be cached in group data structure */ static void armci_cache_attr(ARMCI_Group *group) { armci_grp_attr_t *grp_attr; ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); /* allocate storage for the attribute content. Note: Attribute contents should be stored in persistent memory */ grp_attr = &(igroup->grp_attr); /* get group cluster information and grp_attr */ group_process_list(group, grp_attr); } armci_grp_attr_t *ARMCI_Group_getattr(ARMCI_Group *group) { ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); return(&(igroup->grp_attr)); } static void armci_igroup_finalize(ARMCI_iGroup *igroup) { #ifdef ARMCI_GROUP int world_me, i; world_me = armci_msg_me(); for(i=0; igrp_attr.nproc; i++) { if(igroup->grp_attr.proc_list[i] == world_me) { break; } } if(i==igroup->grp_attr.nproc) { return; /*not in group to be freed*/ } assert(igroup); free(igroup->grp_attr.grp_clus_info); free(igroup->grp_attr.proc_list); igroup->grp_attr.nproc = 0; #else int rv; assert(igroup); /*the following was causing seg fault*/ /*free(igroup->grp_attr.grp_clus_info);*/ rv=MPI_Group_free(&(igroup->igroup)); if(rv != MPI_SUCCESS) armci_die("MPI_Group_free: Failed ",armci_me); if(igroup->icomm != MPI_COMM_NULL) { rv = MPI_Comm_free( (MPI_Comm*)&(igroup->icomm) ); if(rv != MPI_SUCCESS) armci_die("MPI_Comm_free: Failed ",armci_me); } #endif } void ARMCI_Group_free(ARMCI_Group *group) { group_list_t *current_group_list_item = group_list; group_list_t *previous_group_list_item = NULL; /* find the group to free */ while (current_group_list_item != NULL) { if (current_group_list_item->group == *group) { break; } previous_group_list_item = current_group_list_item; current_group_list_item = current_group_list_item->next; } /* make sure we found a group */ assert(current_group_list_item != NULL); /* remove the group from the linked list */ if (previous_group_list_item != NULL) { previous_group_list_item->next = current_group_list_item->next; } /* free the group */ armci_igroup_finalize(¤t_group_list_item->igroup); free(current_group_list_item); } /* Create a child group for to the given group. @param n IN #procs in this group (<= that in group_parent) @param pid_list IN The list of proc ids (w.r.t. group_parent) @param group_out OUT Handle to store the created group @param group_parent IN Parent group */ void ARMCI_Group_create_child(int n, int *pid_list, ARMCI_Group *group_out, ARMCI_Group *grp_parent) { int i,grp_me; ARMCI_iGroup *igroup = NULL; #ifdef ARMCI_GROUP int world_me, parent_grp_me; armci_grp_attr_t *grp_attr = NULL; #else int rv; ARMCI_iGroup *igroup_parent = NULL; MPI_Group *group_parent = NULL; MPI_Comm *comm_parent = NULL; #endif armci_create_group_and_igroup(group_out, &igroup); #ifdef ARMCI_GROUP grp_attr = &igroup->grp_attr; ARMCI_Group_rank(grp_parent, &parent_grp_me); for(i=0; inproc=0; grp_attr->proc_list = NULL; return; /*not in group to be created*/ } for(i=0; i pid_list[i+1]){ armci_die("ARMCI_Group_create: Process ids are not sorted ",armci_me); break; } } grp_attr->grp_clus_info = NULL; grp_attr->nproc = n; grp_attr->proc_list = (int *)malloc(n*sizeof(int)); assert(grp_attr->proc_list!=NULL); for(i=0; iproc_list[i] = ARMCI_Absolute_id(grp_parent,pid_list[i]); } world_me = armci_msg_me(); grp_attr->grp_me = grp_me = MPI_UNDEFINED; for(i=0; igrp_attr.proc_list[i] == world_me) { grp_attr->grp_me = grp_me = i; break; } } if(grp_me != MPI_UNDEFINED) armci_cache_attr(group_out); armci_msg_group_barrier(group_out); #else igroup_parent = armci_get_igroup_from_group(grp_parent); /* NOTE: default group is the parent group */ group_parent = &(igroup_parent->igroup); comm_parent = &(igroup_parent->icomm); rv=MPI_Group_incl(*group_parent, n, pid_list, &(igroup->igroup)); if(rv != MPI_SUCCESS) armci_die("MPI_Group_incl: Failed ",armci_me); { MPI_Comm comm, comm1, comm2; int lvl=1, local_ldr_pos; MPI_Group_rank((MPI_Group)(igroup->igroup), &grp_me); if(grp_me == MPI_UNDEFINED) { igroup->icomm = MPI_COMM_NULL; /*FIXME: keeping the group around for now*/ return; } assert(grp_me>=0); /*SK: sanity check for the following bitwise operations*/ MPI_Comm_dup(MPI_COMM_SELF, &comm); /*FIXME: can be optimized away*/ local_ldr_pos = grp_me; while(n> lvl) { int tag=0; int remote_ldr_pos = local_ldr_pos^lvl; if(remote_ldr_pos < n) { int remote_leader = pid_list[remote_ldr_pos]; MPI_Comm peer_comm = *comm_parent; int high = (local_ldr_posicomm = comm; MPI_Group_free(&igroup->igroup); /*cleanup temporary group*/ MPI_Comm_group(igroup->icomm, &igroup->igroup); /*the group associated with comm*/ igroup->grp_attr.grp_clus_info=NULL; /* processes belong to this group should cache attributes */ armci_cache_attr(group_out); } #endif } void ARMCI_Group_create(int n, int *pid_list, ARMCI_Group *group_out) { ARMCI_Group_create_child(n, pid_list, group_out, (ARMCI_Group *)&ARMCI_Default_Proc_Group); } void armci_group_init() { #ifdef ARMCI_GROUP int i; #else int grp_me; #endif ARMCI_iGroup *igroup; /* Initially, World group is the default group */ ARMCI_World_Proc_Group = 0; ARMCI_Default_Proc_Group = 0; /* create the head of the group linked list */ assert(group_list == NULL); group_list = malloc(sizeof(group_list_t)); group_list->group = ARMCI_World_Proc_Group; group_list->next = NULL; igroup = &group_list->igroup; #ifdef ARMCI_GROUP /*setup the world proc group*/ igroup->grp_attr.nproc = armci_msg_nproc(); igroup->grp_attr.grp_me = armci_msg_me(); igroup->grp_attr.proc_list = (int *)malloc(igroup->grp_attr.nproc*sizeof(int)); assert(igroup->grp_attr.proc_list != NULL); for(i=0; igrp_attr.nproc; i++) { igroup->grp_attr.proc_list[i] = i; } igroup->grp_attr.grp_clus_info = NULL; armci_cache_attr(&ARMCI_World_Proc_Group); #else /* save MPI world group and communicatior in ARMCI_World_Proc_Group */ igroup->icomm = ARMCI_COMM_WORLD; MPI_Comm_group(ARMCI_COMM_WORLD, &(igroup->igroup)); /* processes belong to this group should cache attributes */ MPI_Group_rank((MPI_Group)(igroup->igroup), &grp_me); if(grp_me != MPI_UNDEFINED) { armci_cache_attr(&ARMCI_World_Proc_Group); } #endif } void armci_group_finalize() { group_list_t *current_group_list_item = group_list; group_list_t *previous_group_list_item = NULL; /* don't free the world group (the list head) */ current_group_list_item = current_group_list_item->next; while (current_group_list_item != NULL) { previous_group_list_item = current_group_list_item; current_group_list_item = current_group_list_item->next; armci_igroup_finalize(&previous_group_list_item->igroup); free(previous_group_list_item); } } /* ISSUES: 1. Make sure ARMCI_Group_free frees the attribute data structures 2. replace malloc with, kr_malloc using local_context. */ ga-5-3/armci/src-gemini/signaltrap.c0000640005473000001440000003163411466102622016243 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: signaltrap.c,v 1.28 2005-05-13 19:06:40 vinod Exp $ */ /******************************************************\ * Signal handler functions for the following signals: * * SIGINT, SIGCHLD, SIGBUS, SIGFPE, SIGILL, * * SIGSEGV, SIGSYS, SIGTRAP, SIGHUP, SIGTERM * * Used to call armci_error that frees up IPC resources * \******************************************************/ #include #include #ifndef WIN32 #include #include #include #include #include #endif #define PAUSE_ON_ERROR #define Error armci_die #if (defined(ENCORE) || defined(SEQUENT) || defined(ARDENT)) # define SigType int #else # define SigType void #endif #ifndef SIG_ERR # define SIG_ERR (SigType (*)())-1 #endif #if defined(SUN) || defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || \ defined(AIX) || defined(NEXT) #include #endif extern void Error(); extern int armci_me; int AR_caught_sigint=0; int AR_caught_sigterm=0; int AR_caught_sigchld=0; int AR_caught_sigsegv=0; int AR_caught_sig=0; SigType (*SigChldOrig)(), (*SigIntOrig)(), (*SigHupOrig)(), (*SigTermOrig)(); SigType (*SigSegvOrig)(); /*********************** SIGINT *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigIntHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigIntHandler(sig) #endif int sig; { AR_caught_sigint = 1; AR_caught_sig= sig; Error("SigIntHandler: interrupt signal was caught",(int) sig); } void TrapSigInt() /* Trap the signal SIGINT so that we can propagate error conditions and also tidy up shared system resources in a manner not possible just by killing everyone */ { if ( (SigIntOrig = signal(SIGINT, SigIntHandler)) == SIG_ERR) Error("TrapSigInt: error from signal setting SIGINT",0); } void RestoreSigInt() /* Restore the original signal handler */ { if(AR_caught_sigint) SigIntOrig(SIGINT); if ( signal(SIGINT, SigIntOrig) == SIG_ERR) Error("RestoreSigInt: error from restoring signal SIGINT",0); } /*********************** SIGABORT *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigAbortHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigAbortHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("SigIntHandler: abort signal was caught: cleaning up",(int) sig); } void TrapSigAbort() /* Trap the signal SIGINT so that we can propagate error conditions and also tidy up shared system resources in a manner not possible just by killing everyone */ { if ( signal(SIGINT, SigAbortHandler) == SIG_ERR) Error("TrapSigAbort: error from signal setting SIGABORT",0); } /*********************** SIGCHLD *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigChldHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigChldHandler(sig) #endif int sig; { int status; #if defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || defined(NEXT) union wait ustatus; #endif #if defined(LINUX) pid_t ret; /* Trap signal as soon as possible to avoid race */ if ( (SigChldOrig = signal(SIGCHLD, SigChldHandler)) == SIG_ERR) Error("SigChldHandler: error from signal setting SIGCHLD",0); #endif #if defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || defined(NEXT) # if defined(LINUX) ret = wait(&ustatus); if((ret == 0) || ((ret == -1) && (errno == ECHILD))) { return; } # else (void) wait(&ustatus); # endif status = ustatus.w_status; #else # if defined(LINUX) ret = waitpid(0, &status, WNOHANG); if((ret == 0) || ((ret == -1) && (errno == ECHILD))) { return; } # else (void)wait(&status); # endif #endif AR_caught_sigchld=1; AR_caught_sig= sig; Error("Child process terminated prematurely, status=",(int) status); } void TrapSigChld() /* Trap SIGCHLD so that can tell if children die unexpectedly. */ { if ( (SigChldOrig = signal(SIGCHLD, SigChldHandler)) == SIG_ERR) Error("TrapSigChld: error from signal setting SIGCHLD",0); } void RestoreSigChld() /* Restore the original signal handler */ { if(AR_caught_sigchld) SigChldOrig(SIGCHLD); if ( signal(SIGCHLD, SigChldOrig) == SIG_ERR) Error("RestoreSigChld: error from restoring signal SIGChld",0); } void RestoreSigChldDfl() { (void) signal(SIGCHLD, SIG_DFL); } /*********************** SIGBUS *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigBusHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigBusHandler(sig) #endif int sig; { AR_caught_sig= sig; #ifdef PAUSE_ON_ERROR fprintf(stderr,"%d(%d): Bus Error ... pausing\n", armci_me, getpid() );pause(); #endif Error("Bus error, status=",(int) sig); } void TrapSigBus() /* Trap SIGBUS */ { if ( signal(SIGBUS, SigBusHandler) == SIG_ERR) Error("TrapSigBus: error from signal setting SIGBUS", 0); } /*********************** SIGFPE *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigFpeHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigFpeHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Floating Point Exception error, status=",(int) sig); } void TrapSigFpe() /* Trap SIGFPE */ { if ( signal(SIGFPE, SigFpeHandler) == SIG_ERR) Error("TrapSigFpe: error from signal setting SIGFPE", 0); } /*********************** SIGILL *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigIllHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigIllHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Illegal Instruction error, status=",(int) sig); } void TrapSigIll() /* Trap SIGILL */ { if ( signal(SIGILL, SigIllHandler) == SIG_ERR) Error("TrapSigIll: error from signal setting SIGILL", 0); } /*********************** SIGSEGV *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigSegvHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigSegvHandler(sig) #endif int sig; { AR_caught_sig= sig; AR_caught_sigsegv=1; #ifdef PAUSE_ON_ERROR fprintf(stderr,"%d(%d): Segmentation Violation ... pausing\n", armci_me, getpid() );pause(); #endif Error("Segmentation Violation error, status=",(int) sig); } #ifdef DO_CKPT static void * signal_arr[100]; SigType SigSegvActionSa(int sig,siginfo_t *sinfo, void *ptr) { int (*func)(); AR_caught_sig= sig; AR_caught_sigsegv=1; func = signal_arr[sig]; /*printf("\n%d:in sigaction %p, %d\n",armci_me,sinfo->si_addr,sinfo->si_errno);fflush(stdout);*/ if(func(sinfo->si_addr,sinfo->si_errno,sinfo->si_fd)) Error("Segmentation Violation error, status=",(int) SIGSEGV); } void TrapSigSegvSigaction() { struct sigaction sa; sa.sa_sigaction = (void *)SigSegvActionSa; sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; sigaction(SIGSEGV, &sa, NULL); } #endif void TrapSigSegv() /* Trap SIGSEGV */ { if ( (SigSegvOrig=signal(SIGSEGV, SigSegvHandler)) == SIG_ERR) Error("TrapSigSegv: error from signal setting SIGSEGV", 0); } void RestoreSigSegv() /* Restore the original signal handler */ { /* if(AR_caught_sigsegv) SigSegvOrig(SIGSEGV); */ #ifdef DO_CKPT__ struct sigaction sa; sa.sa_handler = (void *)SigSegvOrig; sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; sigaction(SIGSEGV, &sa, NULL); sigaction(SIGSEGV,&sa,NULL); #else if ( signal(SIGSEGV,SigSegvOrig) == SIG_ERR) Error("RestoreSigSegv: error from restoring signal SIGSEGV",0); #endif } /*********************** SIGSYS *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigSysHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigSysHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Bad Argument To System Call error, status=",(int) sig); } void TrapSigSys() /* Trap SIGSYS */ { #ifndef LINUX if ( signal(SIGSYS, SigSysHandler) == SIG_ERR) Error("TrapSigSys: error from signal setting SIGSYS", 0); #endif } /*********************** SIGTRAP *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigTrapHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigTrapHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Trace Trap error, status=",(int) sig); } void TrapSigTrap() /* Trap SIGTRAP */ { if ( signal(SIGTRAP, SigTrapHandler) == SIG_ERR) Error("TrapSigTrap: error from signal setting SIGTRAP", 0); } /*********************** SIGHUP *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigHupHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigHupHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Hangup error, status=",(int) sig); } void TrapSigHup() /* Trap SIGHUP */ { if ( (SigHupOrig = signal(SIGHUP, SigHupHandler)) == SIG_ERR) Error("TrapSigHup: error from signal setting SIGHUP", 0); } void RestoreSigHup() /* Restore the original signal handler */ { if(AR_caught_sig== SIGHUP) SigHupOrig(SIGHUP); if ( signal(SIGHUP, SigHupOrig) == SIG_ERR) Error("RestoreSigHUP: error from restoring signal SIGHUP",0); } /*********************** SIGTERM *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigTermHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigTermHandler(sig) #endif int sig; { AR_caught_sigterm = 1; AR_caught_sig= sig; Error("Terminate signal was sent, status=",(int) sig); } void TrapSigTerm() /* Trap SIGTERM */ { if ( (SigTermOrig = signal(SIGTERM, SigTermHandler)) == SIG_ERR) Error("TrapSigTerm: error from signal setting SIGTERM", 0); } void RestoreSigTerm() /* Restore the original signal handler */ { if(AR_caught_sigterm && (SigTermOrig != SIG_DFL) ) SigTermOrig(SIGTERM); if ( signal(SIGTERM, SigTermOrig) == SIG_ERR) Error("RestoreSigTerm: error from restoring signal SIGTerm",0); } /*********************** SIGIOT *************************************/ #ifdef SIGIOT #if defined(SUN) && !defined(SOLARIS) SigType SigIotHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigIotHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("IOT signal was sent, status=",(int) sig); } void TrapSigIot() /* Trap SIGIOT */ { if ( signal(SIGIOT, SigIotHandler) == SIG_ERR) Error("TrapSigIot: error from signal setting SIGIOT", 0); } #endif /*********************** SIGCONT *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigContHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigContHandler(sig) #endif int sig; { /* Error("Trace Cont error, status=",(int) sig);*/ AR_caught_sig= sig; } void TrapSigCont() /* Trap SIGCONT */ { if ( signal(SIGCONT, SigContHandler) == SIG_ERR) Error("TrapSigCont: error from signal setting SIGCONT", 0); } /*********************** SIGXCPU *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigXcpuHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigXcpuHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Terminate signal was sent, status=",(int) sig); } void TrapSigXcpu() /* Trap SIGXCPU */ { if ( signal(SIGXCPU, SigXcpuHandler) == SIG_ERR) Error("TrapSigXcpu: error from signal setting SIGXCPU", 0); } /******************* external API *********************************/ void ARMCI_ChildrenTrapSignals() { #ifndef LAPI TrapSigBus(); #endif TrapSigFpe(); TrapSigIll(); #ifdef DO_CKPT TrapSigSegvSigaction(); #else TrapSigSegv(); #endif TrapSigSys(); TrapSigTrap(); TrapSigAbort(); TrapSigTerm(); TrapSigInt(); #if defined(LAPI) || defined(SGI) TrapSigIot(); #endif #ifdef SGI TrapSigXcpu(); #endif } void ARMCI_ParentTrapSignals() { #ifndef LAPI TrapSigChld(); #endif TrapSigHup(); } void ARMCI_RestoreSignals() { RestoreSigTerm(); RestoreSigInt(); RestoreSigSegv(); } void ARMCI_ParentRestoreSignals() { #ifndef LAPI RestoreSigChld(); #endif ARMCI_RestoreSignals(); RestoreSigHup(); } #ifdef DO_CKPT /*user can register a function with 3 parameters, 1st offending address * 2nd err number and third file descriptor*/ void ARMCI_Register_Signal_Handler(int sig, void (*func)()) { signal_arr[sig]=func; } #endif ga-5-3/armci/src-gemini/portals.c0000640005473000001440000003434111466102622015561 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* ---------------------------------------------------------------------------------------------- *\ portals.c -- wrapper for commonly used portals calls author: ryan olson email: ryan@cray.com \* ---------------------------------------------------------------------------------------------- */ # include "armcip.h" /* ---------------------------------------------------------------------------------------------- *\ global variables \* ---------------------------------------------------------------------------------------------- */ ptl_process_id_t *portals_id_map = NULL; ptl_process_id_t *portals_cloned_id_map = NULL; size_t portalsMaxEagerMessageSize; MPI_Comm portals_smp_comm; /* ---------------------------------------------------------------------------------------------- *\ static variables for this object \* ---------------------------------------------------------------------------------------------- */ static int portals_verbose = 0; /* ---------------------------------------------------------------------------------------------- *\ portals wrappers \* ---------------------------------------------------------------------------------------------- */ int portals_init(ptl_handle_ni_t *nih) { int num_interfaces = 0; int rc; rc = PtlInit(&num_interfaces); if (rc != PTL_OK) { printf("PtlInit err %d\n", rc); return rc; } rc = PtlNIInit(CRAY_UK_SSNAL, PTL_PID_ANY, NULL, NULL, nih); if (rc != PTL_OK && rc != PTL_IFACE_DUP) { printf("PtlNIInit err %d\n", rc); return rc; } portalsMaxEagerMessageSize = PORTALS_MAX_EAGER_MESSAGE_SIZE; return PTL_OK; } int portals_finalize(ptl_handle_ni_t nih) { PtlNIFini(nih); PtlFini(); return PTL_OK; } int portals_getid(ptl_handle_ni_t nih, ptl_process_id_t *id) { int rc; rc = PtlGetId(nih, id); if(rc != PTL_OK) { printf("PtlGetId err %d\n",rc); return rc; } return PTL_OK; } int portals_create_eq(ptl_handle_ni_t nih, ptl_size_t count, ptl_handle_eq_t *eq_handle) { int rc; rc = PtlEQAlloc(nih, count, PTL_EQ_HANDLER_NONE, eq_handle); if (rc != PTL_OK) { printf("PtlEQAlloc err %d\n", rc); return rc; } return PTL_OK; } int portals_free_eq(ptl_handle_eq_t eq) { int rc; rc = PtlEQFree(eq); if (rc != PTL_OK) { printf("PtlEQFree err %d\n",rc); return rc; } return PTL_OK; } /* permanent buffers - such as unexpected receive buffers or data requests buffers should not be unlinked. client side buffers, such as large puts/accs would create a ME in front of the MATCH ALL unexpected buffer/data req ME. on the client side, the MATCH ALL ME should catch the ACKs */ int portals_me_attach(ptl_handle_ni_t nih, ptl_process_id_t match_id, ptl_match_bits_t match_bits, ptl_match_bits_t ignore_bits, ptl_handle_me_t *me_handle) { int rc = PtlMEAttach(nih,PORTALS_INDEX,match_id,match_bits,ignore_bits, PTL_UNLINK,PTL_INS_BEFORE,me_handle); if (rc != PTL_OK) { printf("PtlAttach err %d in me_attach\n",rc); return rc; } return PTL_OK; } int portals_me_insert(ptl_handle_me_t base, ptl_process_id_t pe_match_id, ptl_match_bits_t match_bits, ptl_match_bits_t ignore_bits, ptl_handle_me_t *me_handle) { int rc = PtlMEInsert(base,pe_match_id,match_bits,ignore_bits, PTL_UNLINK,PTL_INS_BEFORE,me_handle); if (rc != PTL_OK) { printf("PtlME err %d in portals_push_me\n",rc); return rc; } return rc; } int portals_me_unlink(ptl_handle_me_t meh) { int rc = PtlMEUnlink(meh); if(rc != PTL_OK) { printf("PtlMEUnlink err %d in me_unlink\n",rc); } return rc; } int portals_md_attach(ptl_handle_me_t me_handle, ptl_md_t md, ptl_unlink_t unlink_op, ptl_handle_md_t *md_handle) { int rc = PtlMDAttach(me_handle, md, unlink_op, md_handle); if (rc != PTL_OK) { printf("PtlMDAttach err %d\n",rc); return rc; } return PTL_OK; } int portals_md_bind(ptl_handle_ni_t nih, ptl_md_t md, ptl_unlink_t unlink_op, ptl_handle_md_t *md_handle) { int rc = PtlMDBind(nih, md, unlink_op, md_handle); if (rc != PTL_OK) { printf("PtlMDBind err %d\n",rc); return rc; } return rc; } int portals_eqwait(ptl_handle_eq_t eqh, ptl_event_t *ev) { int rc = PtlEQWait(eqh, ev); if (rc != PTL_OK) { printf("PtlEQWait err %d\n",rc); return rc; } return PTL_OK; } static int notify(portals_desc_t *desc, int state, char *name) { if(desc->state & state) { desc->state &= ~state; if(desc->state == 0) desc->done = 1; return 1; } else { printf("event: %s with desc state %x not %x\n",name,desc->state,state); abort(); return 0; } } int portals_wait(portals_desc_t *wait_on_desc) { int rc; ptl_event_t ev; portals_desc_t *desc = NULL; while(wait_on_desc->state) { rc = portals_eqwait(wait_on_desc->eqh, &ev); if (rc != PTL_OK) { printf("eq wait error in portals_wait\n"); abort(); } desc = (portals_desc_t *) ev.md.user_ptr; switch(ev.type) { case PTL_EVENT_SEND_START: if (portals_verbose) printf("%s event: send start\n",Portals_ID()); notify(desc, STATE_SEND_START, "send start"); break; case PTL_EVENT_SEND_END: if (portals_verbose) printf("%s event: send end\n",Portals_ID()); notify(desc, STATE_SEND_END, "send end"); break; case PTL_EVENT_REPLY_START: if (portals_verbose) printf("%s event: reply start\n",Portals_ID()); notify(desc, STATE_REPLY_START, "reply start"); break; case PTL_EVENT_REPLY_END: if (portals_verbose) printf("%s event: reply end\n",Portals_ID()); notify(desc, STATE_REPLY_END, "reply end"); break; case PTL_EVENT_ACK: if (portals_verbose) printf("%s event: ack\n",Portals_ID()); printf("%s event ack: md.threshold=%d\n",Portals_ID(),ev.md.threshold); notify(desc, STATE_ACK, "ack"); break; case PTL_EVENT_PUT_START: if (portals_verbose) printf("%s event: put start\n",Portals_ID()); notify(desc, STATE_PUT_START, "put start"); break; case PTL_EVENT_PUT_END: if (portals_verbose) printf("%s event: put end\n",Portals_ID()); if (notify(desc, STATE_PUT_END, "put end")) { // desc->len = ev.mlength; // desc->off = ev.offset; } break; case PTL_EVENT_GET_START: if (portals_verbose) printf("%s event: get start\n",Portals_ID()); notify(desc, STATE_GET_START, "get start"); break; case PTL_EVENT_GET_END: if (portals_verbose) printf("%s event: get end\n",Portals_ID()); notify(desc, STATE_GET_END, "get end"); break; case PTL_EVENT_UNLINK: if (portals_verbose) printf("%s event: unlink\n",Portals_ID()); notify(desc, STATE_UNLINK, "unlink"); break; default: printf("%s event: %d\n",Portals_ID(), ev.type); break; } } return PTL_OK; } int portals_put(portals_desc_t *desc) { int rc; int threshold = 1; ptl_md_t md = { 0 }; ptl_handle_md_t md_handle; ptl_ack_req_t ack_req = PTL_NOACK_REQ; # ifdef PORTALS_PUT_USE_ACK ack_req = PTL_ACK_REQ; threshold++; # endif md.start = desc->buffer; md.length = desc->length; md.threshold = threshold; md.options = 0; # ifndef PORTALS_PUT_USE_START md.options |= PTL_MD_EVENT_START_DISABLE; # endif md.user_ptr = desc; md.eq_handle = desc->eqh; rc = portals_md_bind(desc->nih, md, PTL_UNLINK, &md_handle); if (rc != PTL_OK) { printf("failed to bind local md in put; err %d",rc); Fatal_error(rc); } rc = PtlPut(md_handle, ack_req, desc->id, PORTALS_INDEX, 0, desc->mbits, 0, desc->hdr); if (rc != PTL_OK) { printf("PtlPut err %d\n",rc); return rc; } desc->done = 0; desc->state = STATE_SEND_END; # ifdef PORTALS_PUT_USE_START desc->state |= STATE_SEND_START; # endif # ifdef PORTALS_PUT_USE_ACK desc->state |= STATE_ACK; # endif return PTL_OK; } int portals_get(portals_desc_t* desc) { int rc; ptl_md_t md = { 0 }; ptl_handle_md_t md_handle; md.start = desc->buffer; md.length = desc->length; md.threshold = 2; md.options = 0; # ifndef PORTALS_GET_USE_START md.options |= PTL_MD_EVENT_START_DISABLE; # endif md.user_ptr = desc; md.eq_handle = desc->eqh; rc = portals_md_bind(desc->nih, md, PTL_UNLINK, &md_handle); if (rc != PTL_OK) { printf("failed to bind local md in get; err %d\n",rc); Fatal_error(rc); } rc = PtlGet(md_handle, desc->id, PORTALS_INDEX, 0, desc->mbits, 0); if (rc != PTL_OK) { printf("PtlGet err %d\n",rc); Fatal_error(rc); } desc->done = 0; desc->state = STATE_REPLY_END | STATE_SEND_END; # ifdef PORTALS_GET_USE_START desc->state |= STATE_REPLY_START; # endif return PTL_OK; } /* portals_desc_t* portals_get_free_desc(void) { int i,rc; portals_desc_t *desc = NULL; while(desc == NULL) { for(i=0; i= 0;bit--) { if ((mask << bit) & (unsigned char)*(data+ptr)) { printf("1"); } else { printf("0"); } } printf(" "); } printf("\n"); } void portals_print_summary() { printf("PORTALS_MAX_DESCRIPTORS = %d\n",PORTALS_MAX_DESCRIPTORS); printf("PORTALS_MAX_BUFS = %d\n",PORTALS_MAX_BUFS); printf("PORTALS_MAX_SMALL_BUFS = %d\n",PORTALS_MAX_SMALL_BUFS); printf("PORTALS_BUF_SIZE = %d\n",PORTALS_BUF_SIZE); printf("PORTALS_SMALL_BUF_SIZE = %d\n",PORTALS_SMALL_BUF_SIZE); printf("PORTALS_NREQUEST_BUFFERS = %d\n",PORTALS_NREQUEST_BUFFERS); printf("PORTALS_MAX_EAGER_MESSAGE_SIZE = %d\n",PORTALS_MAX_EAGER_MESSAGE_SIZE); return; } ga-5-3/armci/src-gemini/acc.h0000640005473000001440000002175512122647421014636 0ustar d3n000users#ifndef _ACC_H_ #define _ACC_H_ typedef struct { float real; float imag; } complex_t; typedef struct { double real; double imag; } dcomplex_t; void c_d_accumulate_1d_(const double* const restrict alpha, double* const restrict A, const double* const restrict B, const int* const restrict rows); void c_f_accumulate_1d_(const float* const restrict alpha, float* const restrict A, const float* const restrict B, const int* const restrict rows); void c_c_accumulate_1d_(const complex_t* const restrict alpha, complex_t* const restrict A, const complex_t* const restrict B, const int* const restrict rows); void c_z_accumulate_1d_(const dcomplex_t* const restrict alpha, dcomplex_t* const restrict A, const dcomplex_t* const restrict B, const int* const restrict rows); void c_i_accumulate_1d_(const int* const restrict alpha, int* const restrict A, const int* const restrict B, const int* const restrict rows); void c_l_accumulate_1d_(const long* const restrict alpha, long* const restrict A, const long* const restrict B, const int* const restrict rows); void c_ll_accumulate_1d_(const long long* const restrict alpha, long long* const restrict A, const long long* const restrict B, const int* const restrict rows); void c_d_accumulate_2d_(const double* const restrict alpha, const int* const restrict rows, const int* const restrict cols, double* const restrict A, const int* const restrict ald, const double* const restrict B, const int* const restrict bld); void c_f_accumulate_2d_(const float* const restrict alpha, const int* const restrict rows, const int* const restrict cols, float* const restrict A, const int* const restrict ald, const float* const restrict B, const int* const restrict bld); void c_c_accumulate_2d_(const complex_t* const restrict alpha, const int* const restrict rows, const int* const restrict cols, complex_t* const restrict A, const int* const restrict ald, const complex_t* const restrict B, const int* const restrict bld); void c_z_accumulate_2d_(const dcomplex_t* const restrict alpha, const int* const restrict rows, const int* const restrict cols, dcomplex_t* const restrict A, const int* const restrict ald, const dcomplex_t* const restrict B, const int* const restrict bld); void c_i_accumulate_2d_(const int* const restrict alpha, const int* const restrict rows, const int* const restrict cols, int* const restrict A, const int* const restrict ald, const int* const restrict B, const int* const restrict bld); void c_l_accumulate_2d_(const long* const restrict alpha, const int* const restrict rows, const int* const restrict cols, long* const restrict A, const int* const restrict ald, const long* const restrict B, const int* const restrict bld); void c_ll_accumulate_2d_(const long long* const restrict alpha, const int* const restrict rows, const int* const restrict cols, long long* const restrict A, const int* const restrict ald, const long long* const restrict B, const int* const restrict bld); void c_d_accumulate_2d_u_(const double* const restrict alpha, const int* const restrict rows, const int* const restrict cols, double* const restrict A, const int* const restrict ald, const double* const restrict B, const int* const restrict bld); void c_f_accumulate_2d_u_(const float* const restrict alpha, const int* const restrict rows, const int* const restrict cols, float* const restrict A, const int* const restrict ald, const float* const restrict B, const int* const restrict bld); void c_c_accumulate_2d_u_(const complex_t* const restrict alpha, const int* const restrict rows, const int* const restrict cols, complex_t* const restrict A, const int* const restrict ald, const complex_t* const restrict B, const int* const restrict bld); void c_z_accumulate_2d_u_(const dcomplex_t* const restrict alpha, const int* const restrict rows, const int* const restrict cols, dcomplex_t* const restrict A, const int* const restrict ald, const dcomplex_t* const restrict B, const int* const restrict bld); void c_i_accumulate_2d_u_(const int* const restrict alpha, const int* const restrict rows, const int* const restrict cols, int* const restrict A, const int* const restrict ald, const int* const restrict B, const int* const restrict bld); void c_l_accumulate_2d_u_(const long* const restrict alpha, const int* const restrict rows, const int* const restrict cols, long* const restrict A, const int* const restrict ald, const long* const restrict B, const int* const restrict bld); void c_ll_accumulate_2d_u_(const long long* const restrict alpha, const int* const restrict rows, const int* const restrict cols, long long* const restrict A, const int* const restrict ald, const long long* const restrict B, const int* const restrict bld); void RA_ACCUMULATE_2D_(long*, int*, int*, long*, int*, long*, int*); void c_dadd_(const int* const restrict n, double* const restrict x, const double* const restrict work); void c_dadd2_(const int* const restrict n, double* const restrict x, const double* const restrict work, const double* const restrict work2); void c_dmult_(const int* const restrict n, double* const restrict x, const double* const restrict work); void c_dmult2_(const int* const restrict n, double* const restrict x, const double* const restrict work, const double* const restrict work2); #define I_ACCUMULATE_1D c_i_accumulate_1d_ #define L_ACCUMULATE_1D c_l_accumulate_1d_ #define LL_ACCUMULATE_1D c_ll_accumulate_1d_ #define D_ACCUMULATE_1D c_d_accumulate_1d_ #define C_ACCUMULATE_1D c_c_accumulate_1d_ #define Z_ACCUMULATE_1D c_z_accumulate_1d_ #define F_ACCUMULATE_1D c_f_accumulate_1d_ #define I_ACCUMULATE_2D c_i_accumulate_2d_ #define L_ACCUMULATE_2D c_l_accumulate_2d_ #define LL_ACCUMULATE_2D c_ll_accumulate_2d_ #define D_ACCUMULATE_2D c_d_accumulate_2d_ #define C_ACCUMULATE_2D c_c_accumulate_2d_ #define Z_ACCUMULATE_2D c_z_accumulate_2d_ #define F_ACCUMULATE_2D c_f_accumulate_2d_ #define FORT_DADD c_dadd_ #define FORT_DADD2 c_dadd2_ #define FORT_DMULT c_dmult_ #define FORT_DMULT2 c_dmult2_ #endif /* _ACC_H_ */ ga-5-3/armci/src-gemini/request.c0000640005473000001440000007764411643667455015623 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: request.c,v 1.74.2.11 2007-10-18 06:09:37 d3h325 Exp $ */ #include "armcip.h" #include "request.h" #include "memlock.h" #include "shmem.h" #include "copy.h" #include "gpc.h" #include #include #define DEBUG_ 0 #define DEBUG_MEM 0 #if 0 # define MARK_ENTER(func_) { fprintf(stdout, "ENTERING %s\n", func_); fflush(stdout); } # define MARK_EXIT(func_) { fprintf(stdout, "EXITING %s\n", func_); fflush(stdout); } #else # define MARK_ENTER(func_) # define MARK_EXIT(func_) #endif #if 0 # define PRNDBG3(m,a1,a2,a3) \ fprintf(stderr,"DBG %d: " m,armci_me,a1,a2,a3);fflush(stderr) # define PRNDBG(m) PRNDBG3(m,0,0,0) # define PRNDBG1(m,a1) PRNDBG3(m,a1,0,0) # define PRNDBG2(m,a1,a2) PRNDBG3(m,a1,a2,0) #else # define PRNDBG(m) # define PRNDBG1(m,a1) # define PRNDBG2(m,a1,a2) # define PRNDBG3(m,a1,a2,a3) #endif #if !defined(GM) && !defined(VIA) && !defined(LAPI) &&!defined(VAPI) double _armci_rcv_buf[MSG_BUFLEN_DBL]; double _armci_snd_buf[MSG_BUFLEN_DBL]; char* MessageSndBuffer = (char*)_armci_snd_buf; char* MessageRcvBuffer = (char*)_armci_rcv_buf; #endif #define MAX_EHLEN 248 #define ADDBUF(buf,type,val) *(type*)(buf) = (val); (buf) += sizeof(type) #define GETBUF(buf,type,var) (var) = *(type*)(buf); (buf) += sizeof(type) #define ALLIGN8(buf){size_t _adr=(size_t)(buf); \ _adr>>=3; _adr<<=3; _adr+=8; (buf) = (char*)_adr; } #ifndef CLN # define CLN 1 #endif #ifndef SERV # define SERV 2 #endif /*******************Routines to handle completion descriptor******************/ /*\ *Following the the routines to fill a completion descriptor, if necessary *copy the data to destination based on completion descriptor *NOTE, THE FOLLOWING ROUTINES ARE FOR CLIENTS ONLY \*/ /*\Routine to complete a vector request, data is in buf and descriptor in dscr \*/ extern int armci_direct_vector_get(request_header_t *msginfo , armci_giov_t darr[], int len, int proc); static void armci_complete_vector_get(armci_giov_t darr[],int len,void *buf) { int proc; request_header_t *msginfo = (request_header_t*) buf; proc = msginfo->to; #if defined(USE_SOCKET_VECTOR_API) armci_direct_vector_get(msginfo, darr, len, proc); #else armci_rcv_vector_data(proc, msginfo, darr, len); #endif FREE_SEND_BUFFER(buf); } /*\ Routine called from buffers.c to complete a request for which the buffer was * used for, so that the buffer can be reused. \*/ void armci_complete_req_buf(BUF_INFO_T *info, void *buffer) { request_header_t *msginfo = (request_header_t*) buffer; ARMCI_PR_DBG("enter",0); if(info->protocol==0)return; else if(info->protocol==SDSCR_IN_PLACE){ char *dscr = info->dscr; void *loc_ptr; int stride_levels; int *loc_stride_arr,*count; loc_ptr = *(void**)dscr; dscr += sizeof(void*); stride_levels = *(int*)dscr; dscr += sizeof(int); loc_stride_arr = (int*)dscr; dscr += stride_levels*sizeof(int); count = (int*)dscr; if(0 || DEBUG_){ if(armci_me==0){ printf("\n%d:extracted loc_ptr=%p, stridelevels=%d\n",armci_me, loc_ptr,stride_levels); fflush(stdout); } } armci_rcv_strided_data(msginfo->to, msginfo, msginfo->datalen, loc_ptr, stride_levels,loc_stride_arr,count); FREE_SEND_BUFFER(msginfo); } else if(info->protocol==VDSCR_IN_PLACE || info->protocol==VDSCR_IN_PTR){ char *dscr; int len,i; if(info->protocol==VDSCR_IN_PLACE){ dscr = info->dscr; //printf("\n%d:vdscr in place\n",armci_me); } else { dscr = info->ptr.dscrbuf; //printf("\n%d:vdscr in buf\n",armci_me); } GETBUF(dscr, long ,len); { armci_giov_t *darr; darr = (armci_giov_t *)malloc(sizeof(armci_giov_t)*len); if(!darr)armci_die("malloc in complete_req_buf failed",len); for(i = 0; i< len; i++){ int parlen, bytes; GETBUF(dscr, int, parlen); GETBUF(dscr, int, bytes); darr[i].ptr_array_len = parlen; darr[i].bytes = bytes; if(msginfo->operation==GET)darr[i].dst_ptr_array=(void **)dscr; else darr[i].src_ptr_array=(void **)dscr; dscr+=sizeof(void *)*parlen; } if (msginfo->operation==GET) armci_complete_vector_get(darr,len,buffer); } } else armci_die("armci_complete_req_buf,protocol val invalid",info->protocol); ARMCI_PR_DBG("exit",0); } extern long x_net_offset(void *,int); /*\ save a part of strided descriptor needed to complete request rmo: it seems as if save_ \*/ void armci_save_strided_dscr(char **bptr, void *rem_ptr,int rem_stride_arr[], int count[], int stride_levels,int is_nb,int proc) { int i; char *bufptr=*bptr; BUF_INFO_T *info=NULL; long network_offset,tmpoffset; ARMCI_PR_DBG("enter",0); # ifdef PORTALS_UNRESOLVED if(!is_nb){ network_offset=x_net_offset(rem_ptr,proc); if(DEBUG_){printf("\n%d:rem_ptr=%p offset=%d newrem=%p",armci_me,rem_ptr,network_offset,(char *)rem_ptr+network_offset);fflush(stdout);} rem_ptr = (char *)rem_ptr+network_offset; } # endif if(is_nb){ info=BUF_TO_BUFINFO(*bptr); bufptr = (info->dscr); } *(void**)bufptr = rem_ptr; bufptr += sizeof(void*); *(int*)bufptr = stride_levels; bufptr += sizeof(int); for(i=0;idscr); if(armci_me==0) printf("\n%d:rem_ptr %p=%p stride_levels %d=%d\n",armci_me, *(void**)bufptr,rem_ptr, *(int*)(bufptr + sizeof(void*)),stride_levels); } /*remote_strided expects the pointer to point to the end of descr hence..*/ if(is_nb) info->protocol=SDSCR_IN_PLACE; else *bptr=bufptr; ARMCI_PR_DBG("exit",0); } /*\ save a part of vector descriptor needed to complete request \*/ void armci_save_vector_dscr(char **bptr,armci_giov_t darr[],int len, int op,int is_nb, int proc) { int i,size=sizeof(int); BUF_INFO_T *info; char *buf,*bufptr=*bptr; void *rem_ptr; long offst; ARMCI_PR_DBG("enter",0); if(is_nb){ for(i=0;idscr; info->protocol=VDSCR_IN_PLACE; } else { info->ptr.dscrbuf = (void *)malloc(size); buf = (char *)info->ptr.dscrbuf; info->protocol=VDSCR_IN_PTR; } } else buf=bufptr; ADDBUF(buf,long,len); /* number of sets */ for(i=0;ibufid to val, else set it to the id of the buf \*/ void armci_set_nbhandle_bufid(armci_ihdl_t nb_handle,char *buf,int val) { BUF_INFO_T *info; if(buf){ info = BUF_TO_BUFINFO(buf); val = info->bufid; } nb_handle->bufid = val; } /**************End--Routines to handle completion descriptor******************/ /*\ send request to server to LOCK MUTEX \*/ void armci_rem_lock(int mutex, int proc, int *ticket) { request_header_t *msginfo; int *ibuf; int bufsize = sizeof(request_header_t)+sizeof(int); msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,LOCK,proc); bzero(msginfo,sizeof(request_header_t)); msginfo->datalen = sizeof(int); msginfo->dscrlen = 0; msginfo->from = armci_me; msginfo->to = proc; msginfo->operation = LOCK; msginfo->format = mutex; msginfo->bytes = msginfo->datalen + msginfo->dscrlen; ibuf = (int*)(msginfo+1); *ibuf = mutex; armci_send_req(proc, msginfo, bufsize, 0); /* receive ticket from server */ *ticket = *(int*)armci_rcv_data(proc,msginfo,0); FREE_SEND_BUFFER(msginfo); if(DEBUG_)fprintf(stderr,"%d receiving ticket %d\n",armci_me, *ticket); } void armci_server_lock(request_header_t *msginfo) { int *ibuf = (int*)(msginfo+1); int proc = msginfo->from; int mutex; int ticket; ARMCI_PR_DBG("enter",0); mutex = *(int*)ibuf; /* acquire lock on behalf of requesting process */ ticket = armci_server_lock_mutex(mutex, proc, msginfo->tag); if(ticket >-1){ /* got lock */ msginfo->datalen = sizeof(int); armci_send_data(msginfo, &ticket); } ARMCI_PR_DBG("exit",0); } /*\ send request to server to UNLOCK MUTEX \*/ void armci_rem_unlock(int mutex, int proc, int ticket) { request_header_t *msginfo; int *ibuf; int bufsize = sizeof(request_header_t)+sizeof(ticket); msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,UNLOCK,proc); bzero(msginfo,sizeof(request_header_t)); msginfo->dscrlen = msginfo->bytes = sizeof(ticket); msginfo->datalen = 0; msginfo->from = armci_me; msginfo->to = proc; msginfo->operation = UNLOCK; msginfo->format = mutex; ibuf = (int*)(msginfo+1); *ibuf = ticket; if(DEBUG_)fprintf(stderr,"%d sending unlock\n",armci_me); armci_send_req(proc, msginfo, bufsize,0); } /*\ server unlocks mutex and passes lock to the next waiting process \*/ void armci_server_unlock(request_header_t *msginfo, char* dscr) { int ticket = *(int*)dscr; int mutex = msginfo->format; int proc = msginfo->to; int waiting; waiting = armci_server_unlock_mutex(mutex,proc,ticket,&msginfo->tag); if(waiting >-1){ /* -1 means that nobody is waiting */ ticket++; /* pass ticket to the waiting process */ msginfo->from = waiting; msginfo->datalen = sizeof(ticket); armci_send_data(msginfo, &ticket); } } void armci_unlock_waiting_process(msg_tag_t tag, int proc, int ticket) { request_header_t header; request_header_t *msginfo = &header; msginfo->datalen = sizeof(int); msginfo->tag = tag; msginfo->from = proc; msginfo->to = armci_me; armci_send_data(msginfo, &ticket); } void * armci_server_ptr(int id){ char *buf; int bufsize = sizeof(int); request_header_t *msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,ATTACH,armci_me); bzero(msginfo,sizeof(request_header_t)); msginfo->from = armci_me; msginfo->to = SERVER_NODE(armci_clus_me); msginfo->dscrlen = 0; msginfo->datalen = sizeof(int); msginfo->operation = ATTACH; msginfo->bytes = msginfo->dscrlen+ msginfo->datalen; armci_copy(&id, msginfo +1, sizeof(int)); if(DEBUG_MEM){ printf("\n%d:attach req:sending id %d \n",armci_me,id);fflush(stdout); } armci_send_req(armci_master, msginfo, bufsize,0); buf= armci_rcv_data(armci_master,msginfo,sizeof(void *));/* receive response */ if(DEBUG_MEM){ printf("\n%d:attach req:got %p \n",armci_me,buf);fflush(stdout); } FREE_SEND_BUFFER(msginfo); ARMCI_PR_DBG("exit",0); return (void *)buf; } /*\ control message to the server, e.g.: ATTACH to shmem, return ptr etc. \*/ void armci_serv_attach_req(void *info, int ilen, long size, void* resp,int rlen) { char *buf; ARMCI_PR_DBG("enter",0); int bufsize = 2*sizeof(request_header_t)+ilen + sizeof(long)+sizeof(rlen); long *idlist=(long *)info; request_header_t *msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,ATTACH,armci_me); bzero(msginfo,sizeof(request_header_t)); msginfo->from = armci_me; msginfo->to = SERVER_NODE(armci_clus_me); msginfo->dscrlen = ilen; msginfo->datalen = sizeof(long)+sizeof(int); msginfo->operation = ATTACH; msginfo->bytes = msginfo->dscrlen+ msginfo->datalen; armci_copy(info, msginfo +1, ilen); if(DEBUG_MEM){printf("\n%d:sending idlist+1 %d, size %d, idlist[0] %d, idlist[1] %d\n",armci_me,idlist+1,size,idlist[0],idlist[1]);} buf = ((char*)msginfo) + ilen + sizeof(request_header_t); *((long*)buf) =size; *(int*)(buf+ sizeof(long)) = rlen; armci_send_req(armci_master, msginfo, bufsize,0); if(rlen){ buf= armci_rcv_data(armci_master, msginfo,rlen); /* receive response */ bcopy(buf, resp, rlen); FREE_SEND_BUFFER(msginfo); if(DEBUG_MEM){printf("%d:client attaching got ptr=%p %d bytes\n",armci_me,buf,rlen); fflush(stdout); } } ARMCI_PR_DBG("exit",0); } /*\ server initializes its copy of the memory lock data structures \*/ static void server_alloc_memlock(void *ptr_myclus) { int i; /* for protection, set pointers for processes outside local node NULL */ memlock_table_array = calloc(armci_nproc,sizeof(void*)); if(!memlock_table_array) armci_die("malloc failed for ARMCI lock array",0); /* set pointers for processes on local cluster node * ptr_myclus - corresponds to the master process */ for(i=0; i< armci_clus_info[armci_clus_me].nslave; i++){ memlock_table_array[armci_master +i] = ((char*)ptr_myclus) + MAX_SLOTS*sizeof(memlock_t)*i; } /* set pointer to the use flag */ #ifdef MEMLOCK_SHMEM_FLAG armci_use_memlock_table = (int*) (MAX_SLOTS*sizeof(memlock_t) + (char*) memlock_table_array[armci_clus_last]); if(DEBUG_) fprintf(stderr,"server initialized memlock %p\n",armci_use_memlock_table); #endif } static int allocate_memlock=1; /*\ server actions triggered by client request to ATTACH \*/ void armci_server_ipc(request_header_t* msginfo, void* descr, void* buffer, int buflen) { double *ptr; long *idlist = (long*)descr; long size = *(long*)buffer; int rlen = *(int*)(sizeof(long)+(char*)buffer); extern int **_armci_int_mutexes; ARMCI_PR_DBG("enter",0); if(size<0) armci_die("armci_server_ipc: size<0",(int)size); if(DEBUG_MEM)printf("\n%d:got idlist+1 %p, size %d, idlist[0] %d, idlist[1] %d",armci_me,idlist+1,size,idlist[0],idlist[1]); ptr=(double*)Attach_Shared_Region(idlist+1,size,idlist[0]); if(!ptr)armci_die("armci_server_ipc: failed to attach",0); /* provide data server with access to the memory lock data structures */ if(allocate_memlock){ allocate_memlock = 0; server_alloc_memlock(ptr); } if(_armci_int_mutexes==NULL){ printf("unresolved portals external\n"); abort(); # ifdef PORTALS_UNRESOLVED extern int _armci_server_mutex_ready; extern void *_armci_server_mutex_ptr; if(_armci_server_mutex_ready){ _armci_int_mutexes=(int **)_armci_server_mutex_ptr; } # endif } if(size>0)armci_set_mem_offset(ptr); if(msginfo->datalen != sizeof(long)+sizeof(int)) armci_die("armci_server_ipc: bad msginfo->datalen ",msginfo->datalen); if(rlen==sizeof(ptr)){ msginfo->datalen = rlen; armci_send_data(msginfo, &ptr); } else armci_die("armci_server_ipc: bad rlen",rlen); ARMCI_PR_DBG("exit",0); } /*\ send RMW request to server \*/ void armci_rem_rmw(int op, void *ploc, void *prem, int extra, int proc) { request_header_t *msginfo; char *buf; void *buffer; int bufsize = sizeof(request_header_t)+sizeof(long)+sizeof(void*); long offst; ARMCI_PR_DBG("enter",0); msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,op,proc); bzero(msginfo,sizeof(request_header_t)); msginfo->dscrlen = sizeof(void*); msginfo->from = armci_me; msginfo->to = proc; msginfo->operation = op; msginfo->datalen = sizeof(long); # ifdef PORTALS_UNRESOLVED offst=x_net_offset(prem,proc); prem = ((char *)prem+offst); # endif buf = (char*)(msginfo+1); ADDBUF(buf, void*, prem); /* pointer is shipped as descriptor */ /* data field: extra argument in fetch&add and local value in swap */ if(op==ARMCI_SWAP){ ADDBUF(buf, int, *((int*)ploc)); }else if(op==ARMCI_SWAP_LONG) { ADDBUF(buf, long, *((long*)ploc) ); msginfo->datalen = sizeof(long); }else { ADDBUF(buf, int, extra); } msginfo->bytes = msginfo->datalen+msginfo->dscrlen ; if(DEBUG_){ printf("%d sending RMW request %d to %d\n",armci_me,op,proc); fflush(stdout); } armci_send_req(proc, msginfo, bufsize,0); buffer = armci_rcv_data(proc,msginfo,0); /* receive response */ if(op==ARMCI_FETCH_AND_ADD || op== ARMCI_SWAP) *(int*)ploc = *(int*)buffer; else *(long*)ploc = *(long*)buffer; FREE_SEND_BUFFER(msginfo); ARMCI_PR_DBG("exit",0); } /*\ server response to RMW \*/ void armci_server_rmw(request_header_t* msginfo,void* ptr, void* pextra) { long lold; int iold; void *pold=0; int op = msginfo->operation; ARMCI_PR_DBG("enter",0); if(DEBUG_){ printf("%d server: executing RMW from %d. op=%d pextra=%p\n",armci_me,msginfo->from, op, pextra); fflush(stdout); } if(msginfo->datalen != sizeof(long)) armci_die2("armci_server_rmw: bad datalen=",msginfo->datalen,op); /* for swap operations *pextra has the value to swap * for fetc&add it carries the increment argument */ switch(op){ case ARMCI_SWAP: iold = *(int*) pextra; case ARMCI_FETCH_AND_ADD: pold = &iold; break; case ARMCI_SWAP_LONG: lold = *(long*) pextra; case ARMCI_FETCH_AND_ADD_LONG: pold = &lold; break; default: armci_die("armci_server_rmw: bad operation code=",op); } armci_generic_rmw(op, pold, *(int**)ptr, *(int*) pextra, msginfo->to); armci_send_data(msginfo, pold); ARMCI_PR_DBG("exit",0); } extern int armci_direct_vector_snd(request_header_t *msginfo , armci_giov_t darr[], int len, int proc); extern int armci_direct_vector(request_header_t *msginfo , armci_giov_t darr[], int len, int proc); int armci_rem_vector(int op, void *scale, armci_giov_t darr[],int len,int proc,int flag, armci_ihdl_t nb_handle) { char *buf,*buf0; request_header_t *msginfo; int bytes =0, s, slen=0; size_t adr; int bufsize = sizeof(request_header_t); int tag=0; if(nb_handle)tag=nb_handle->tag; /* compute size of the buffer needed */ for(s=0; stag,0); if(nb_handle->bufid == NB_NONE) armci_set_nbhandle_bufid(nb_handle,buf,0); } buf += sizeof(request_header_t); /* fill vector descriptor */ armci_save_vector_dscr(&buf,darr,len,op,0,proc); /* align buf for doubles (8-bytes) before copying data */ adr = (size_t)buf; adr >>=3; adr <<=3; adr +=8; buf = (char*)adr; msginfo->ehlen = 0; /* fill message header */ msginfo->dscrlen = buf - buf0 - sizeof(request_header_t); msginfo->from = armci_me; msginfo->to = proc; msginfo->operation = op; msginfo->format = VECTOR; msginfo->datalen = bytes; /* put scale for accumulate */ switch(op){ case ARMCI_ACC_INT: *(int*)buf = *(int*)scale; slen= sizeof(int); break; case ARMCI_ACC_DCP: ((double*)buf)[0] = ((double*)scale)[0]; ((double*)buf)[1] = ((double*)scale)[1]; slen=2*sizeof(double);break; case ARMCI_ACC_DBL: *(double*)buf = *(double*)scale; slen = sizeof(double); break; case ARMCI_ACC_CPL: ((float*)buf)[0] = ((float*)scale)[0]; ((float*)buf)[1] = ((float*)scale)[1]; slen=2*sizeof(float);break; case ARMCI_ACC_FLT: *(float*)buf = *(float*)scale; slen = sizeof(float); break; default: slen=0; } buf += slen; msginfo->datalen += slen; msginfo->bytes = msginfo->datalen+msginfo->dscrlen; /* for put and accumulate copy data into buffer */ if(op != GET){ /* fprintf(stderr,"sending %lf\n",*(double*)darr[0].src_ptr_array[0]);*/ armci_vector_to_buf(darr, len, buf); } armci_send_req(proc, msginfo, bufsize,tag); /*x_buf_send_complete(buf0);*/ if(nb_handle && op==GET) armci_save_vector_dscr(&buf0,darr,len,op,1,proc); if(op == GET&& !nb_handle){ armci_complete_vector_get(darr,len,msginfo); } return 0; } #define CHUN_ (8*8096) #define CHUN 200000 /*\ client version of remote strided operation \*/ int armci_rem_strided(int op, void* scale, int proc, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, ext_header_t *h, int flag,armci_ihdl_t nb_handle) { char *buf, *buf0; request_header_t *msginfo; int i, slen=0, bytes; void *rem_ptr; int *rem_stride_arr; int bufsize = sizeof(request_header_t); int ehlen =0; msg_tag_t msg_tag; int tag=0; /* we send ext header only for last chunk */ #if 0 if(h) ehlen = h->len; #else if(h) if(h->last) ehlen = h->len; #endif if(ehlen>MAX_EHLEN || ehlen <0) armci_die2("armci_rem_strided ehlen out of range",MAX_EHLEN,ehlen); /* calculate size of the buffer needed */ for(i=0, bytes=1;i<=stride_levels;i++)bytes*=count[i]; bufsize += bytes+sizeof(void*)+2*sizeof(int)*(stride_levels+1) +ehlen +2*sizeof(double) + 16; /* +scale+alignment */ if (flag){ printf("%d: flag=%d\n",armci_me,flag); if(op==GET)bufsize -=bytes; } buf = buf0= GET_SEND_BUFFER((bufsize),op,proc); msginfo = (request_header_t*)buf; bzero(msginfo,sizeof(request_header_t)); if(nb_handle) #ifdef ACC_SMP if(!ARMCI_ACC(op)) #endif { // printf("%s: non-blocking ops not yet supported\n",Portals_ID()); // abort(); /* INIT_SENDBUF_INFO(nb_handle,buf,op,proc); same as _armci_buf_set_tag, why here? */ _armci_buf_set_tag(buf,nb_handle->tag,0); if(nb_handle->bufid == NB_NONE) armci_set_nbhandle_bufid(nb_handle,buf,0); tag = nb_handle->tag; } if(op == GET){ rem_ptr = src_ptr; rem_stride_arr = src_stride_arr; }else{ rem_ptr = dst_ptr; rem_stride_arr = dst_stride_arr; } msginfo->datalen=bytes; /* fill strided descriptor */ buf += sizeof(request_header_t); /*this function fills the dscr into buf and also moves the buf ptr to the end of the dscr*/ armci_save_strided_dscr(&buf,rem_ptr,rem_stride_arr,count,stride_levels,0,proc); /* align buf for doubles (8-bytes) before copying data */ ALLIGN8(buf); /* fill message header */ msginfo->from = armci_me; msginfo->to = proc; msginfo->format = STRIDED; msginfo->operation = op; /* put scale for accumulate */ switch(op){ case ARMCI_ACC_INT: *(int*)buf = *(int*)scale; slen= sizeof(int); break; case ARMCI_ACC_DCP: ((double*)buf)[0] = ((double*)scale)[0]; ((double*)buf)[1] = ((double*)scale)[1]; slen=2*sizeof(double);break; case ARMCI_ACC_DBL: *(double*)buf = *(double*)scale; slen = sizeof(double); break; case ARMCI_ACC_CPL: ((float*)buf)[0] = ((float*)scale)[0]; ((float*)buf)[1] = ((float*)scale)[1]; slen=2*sizeof(float);break; case ARMCI_ACC_FLT: *(float*)buf = *(float*)scale; slen = sizeof(float); break; case ARMCI_ACC_LNG: *(long*)buf = *(long*)scale; slen = sizeof(long); break; default: slen=0; } /* if(ARMCI_ACC(op))printf("%d client len=%d alpha=%lf data=%lf,%lf\n", armci_me, buf-(char*)msginfo,((double*)buf)[0],*((double*)src_ptr), ((double*)buf)[1]); */ buf += slen; /**** add extended header *******/ if(ehlen){ bcopy(h->exthdr,buf,ehlen); i = ehlen%8; ehlen += (8-i); /* make sure buffer is still alligned */ buf += ehlen; } msginfo->ehlen = ehlen; msginfo->dscrlen = buf - buf0 - sizeof(request_header_t); msginfo->bytes = msginfo->datalen+msginfo->dscrlen; if(op == GET){ /* if(nb_handle) { printf("%s rem_strided: nb gets not yet available\n",Portals_ID()); abort(); } */ armci_send_req(proc, msginfo, bufsize,tag); armci_save_strided_dscr(&buf0,dst_ptr,dst_stride_arr,count, stride_levels,1,proc); if(!nb_handle){ armci_rcv_strided_data(proc, msginfo, msginfo->datalen, dst_ptr, stride_levels, dst_stride_arr, count); FREE_SEND_BUFFER(msginfo); } } else { /* for put and accumulate send data */ armci_send_strided(proc,msginfo, buf, src_ptr, stride_levels, src_stride_arr, count,tag); } return 0; } void armci_process_extheader(request_header_t *msginfo, char *dscr, char* buf, int buflen) { armci_flag_t *h; int *flag; h = (armci_flag_t*)(dscr + msginfo->dscrlen - msginfo->ehlen); #if 0 if(msginfo->ehlen)printf("%d:server from=%d len=%d: ptr=%p val=%d\n",armci_me,msginfo->from, msginfo->ehlen,h->ptr,h->val); fflush(stdout); #endif flag = (int*)(h->ptr); *flag = h->val; } void armci_server(request_header_t *msginfo, char *dscr, char* buf, int buflen) { int buf_stride_arr[MAX_STRIDE_LEVEL+1]; int *loc_stride_arr,slen; int *count, stride_levels; void *buf_ptr, *loc_ptr; void *scale; char *dscr_save = dscr; int rc, i,proc; int stat; ARMCI_PR_DBG("enter",msginfo->datalen);fflush(stdout); /*return if using readv/socket for put*/ if(msginfo->operation==PUT && msginfo->datalen==0){ if(msginfo->ehlen) /* process extra header if available */ armci_process_extheader(msginfo, dscr, buf, buflen); return; } /* unpack descriptor record */ loc_ptr = *(void**)dscr; dscr += sizeof(void*); stride_levels = *(int*)dscr; dscr += sizeof(int); loc_stride_arr = (int*)dscr; dscr += stride_levels*sizeof(int); count = (int*)dscr; /* compute stride array for buffer */ buf_stride_arr[0]=count[0]; for(i=0; i< stride_levels; i++) buf_stride_arr[i+1]= buf_stride_arr[i]*count[i+1]; /* get scale for accumulate, adjust buf to point to data */ switch(msginfo->operation){ case ARMCI_ACC_INT: slen = sizeof(int); break; case ARMCI_ACC_DCP: slen = 2*sizeof(double); break; case ARMCI_ACC_DBL: slen = sizeof(double); break; case ARMCI_ACC_CPL: slen = 2*sizeof(float); break; case ARMCI_ACC_FLT: slen = sizeof(float); break; case ARMCI_ACC_LNG: slen = sizeof(long); break; default: slen=0; } scale = dscr_save+ (msginfo->dscrlen - slen -msginfo->ehlen); /* if(ARMCI_ACC(msginfo->operation)) fprintf(stderr,"%d in server len=%d slen=%d alpha=%lf data=%lf\n", armci_me, msginfo->dscrlen, slen, *(double*)scale,*(double*)buf); */ buf_ptr = buf; /* data in buffer */ proc = msginfo->to; if(msginfo->operation == GET){ armci_send_strided_data(proc, msginfo, buf, loc_ptr, stride_levels, loc_stride_arr, count); /* fprintf(stderr, "GET response sent with tag: %d\n, msginfo->tag", msginfo->tag); */ } else{ if((rc = armci_op_strided(msginfo->operation, scale, proc, buf_ptr, buf_stride_arr, loc_ptr, loc_stride_arr, count, stride_levels, 1,NULL))) armci_die("server_strided: op from buf failed",rc); } if(msginfo->ehlen) /* process extra header if available */ armci_process_extheader(msginfo, dscr_save, buf, buflen); ARMCI_PR_DBG("exit",0); } void armci_server_vector( request_header_t *msginfo, char *dscr, char* buf, int buflen) { int proc; long len; void *scale; int i,s; char *sbuf = buf; if(msginfo->operation==PUT && msginfo->datalen==0)return;/*return if using readv/socket for put*/ /* unpack descriptor record */ GETBUF(dscr, long ,len); /* get scale for accumulate, adjust buf to point to data */ scale = buf; switch(msginfo->operation){ case ARMCI_ACC_INT: buf += sizeof(int); break; case ARMCI_ACC_DCP: buf += 2*sizeof(double); break; case ARMCI_ACC_DBL: buf += sizeof(double); break; case ARMCI_ACC_CPL: buf += 2*sizeof(float); break; case ARMCI_ACC_FLT: buf += sizeof(float); break; } proc = msginfo->to; /*fprintf(stderr,"scale=%lf\n",*(double*)scale);*/ /* execute the operation */ switch(msginfo->operation) { case GET: /* fprintf(stderr, "%d:: Got a vector message!!\n", armci_me); */ if(msginfo->ehlen) { armci_die("Unexpected vector message with non-zero ehlen. GPC call?", msginfo->ehlen); } else { for(i = 0; i< len; i++){ int parlen, bytes; void **ptr; GETBUF(dscr, int, parlen); GETBUF(dscr, int, bytes); /* fprintf(stderr,"len=%d bytes=%d parlen=%d\n",len,bytes,parlen);*/ ptr = (void**)dscr; dscr += parlen*sizeof(char*); for(s=0; s< parlen; s++){ armci_copy(ptr[s], buf, bytes); buf += bytes; } } /* fprintf(stderr,"%d:: VECTOR GET. server sending buffer %p datalen=%d\n",armci_me, sbuf, msginfo->datalen); */ armci_send_data(msginfo, sbuf); } break; case PUT: /* fprintf(stderr,"received in buffer %lf\n",*(double*)buf);*/ for(i = 0; i< len; i++){ int parlen, bytes; void **ptr; GETBUF(dscr, int, parlen); GETBUF(dscr, int, bytes); ptr = (void**)dscr; dscr += parlen*sizeof(char*); for(s=0; s< parlen; s++){ /* armci_copy(buf, ptr[s], bytes); */ bcopy(buf, ptr[s], (size_t)bytes); buf += bytes; } } break; default: /* this should be accumulate */ if(!ARMCI_ACC(msginfo->operation)) armci_die("v server: wrong op code",msginfo->operation); /* fprintf(stderr,"received first=%lf last =%lf in buffer\n",*/ /* *((double*)buf),((double*)buf)[99]);*/ for(i = 0; i< len; i++){ int parlen, bytes; void **ptr; GETBUF(dscr, int, parlen); GETBUF(dscr, int, bytes); ptr = (void**)dscr; dscr += parlen*sizeof(char*); armci_lockmem_scatter(ptr, parlen, bytes, proc); for(s=0; s< parlen; s++){ armci_acc_2D(msginfo->operation, scale, proc, buf, ptr[s], bytes, 1, bytes, bytes, 0); buf += bytes; } ARMCI_UNLOCKMEM(proc); } } } ga-5-3/armci/src-gemini/armci.c0000640005473000001440000006042612036056644015201 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: armci.c,v 1.114.2.17 2007-08-30 22:58:18 manoj Exp $ */ /* DISCLAIMER * * This material was prepared as an account of work sponsored by an * agency of the United States Government. Neither the United States * Government nor the United States Department of Energy, nor Battelle, * nor any of their employees, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR * ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, * COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, * SOFTWARE, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT * INFRINGE PRIVATELY OWNED RIGHTS. * * * ACKNOWLEDGMENT * * This software and its documentation were produced with United States * Government support under Contract Number DE-AC06-76RLO-1830 awarded by * the United States Department of Energy. The United States Government * retains a paid-up non-exclusive, irrevocable worldwide license to * reproduce, prepare derivative works, perform publicly and display * publicly by or for the US Government, including the right to * distribute to other US Government contractors. */ #define EXTERN /*#define PRINT_BT*/ #define _GNU_SOURCE #include #include #include #if defined(CRAY) && !defined(__crayx1) # include # include # include #endif #ifdef LAPI # include "lapidefs.h" #endif #include #include "armcip.h" #include "copy.h" #include "memlock.h" #include "shmem.h" #include "signaltrap.h" #ifdef ARMCIX #include "x/armcix.h" #endif #ifdef BGML #include "bgml.h" #include #include "bgmldefs.h" extern void armci_msg_barrier(void); #endif #ifdef CRAY_SHMEM # ifdef CRAY_XT # include # else # include # endif #endif #include /* global variables */ int armci_me, armci_Sme, armci_nproc; int armci_clus_me, armci_nclus, armci_master; int armci_clus_first, armci_clus_last; int *_armci_argc=NULL; char ***_armci_argv=NULL; int _armci_initialized_args=0; int _armci_initialized=0; int _armci_terminating =0; thread_id_t armci_usr_tid; armci_ireq_t armci_inb_handle[ARMCI_MAX_IMPLICIT];/*implicit non-blocking handle*/ #ifndef HITACHI double armci_internal_buffer[BUFSIZE_DBL]; #endif #if defined(SYSV) || defined(WIN32) || defined(MMAP) || defined(HITACHI) || defined(CATAMOUNT) || defined(BGML) # include "locks.h" lockset_t lockid; #endif int* armci_prot_switch_fence=NULL; int armci_prot_switch_preproc = -1; int armci_prot_switch_preop = -1; #ifdef BGML /* void armci_allocate_locks(); */ void armci_init_memlock(); #endif #ifdef LIBELAN_ATOMICS ELAN_ATOMIC *a; #warning "Enabling new atomics" #endif typedef struct{ int sent; int received; int waited; }armci_notify_t; armci_notify_t **_armci_notify_arr; void ARMCI_Cleanup() { #if defined(DATA_SERVER) #if defined(LIBONESIDED) dsTurnOff(); #else if(armci_nclus >1){ armci_wait_for_server(); } #endif #endif #if (defined(SYSV) || defined(WIN32) || defined(MMAP))&& !defined(HITACHI) Delete_All_Regions(); if(armci_nproc>1) #if !defined(LAPI) DeleteLocks(lockid); #endif #ifndef WIN32 ARMCI_RestoreSignals(); #endif #endif armci_transport_cleanup(); } int armci_getbufsize() { return(BUFSIZE); } void armci_notify_init() { int rc,bytes=sizeof(armci_notify_t)*armci_nproc; #ifdef DOELAN4 armci_elan_notify_init(); return; #endif _armci_notify_arr= (armci_notify_t**)malloc(armci_nproc*sizeof(armci_notify_t*)); if(!_armci_notify_arr)armci_die("armci_notify_ini:malloc failed",armci_nproc); if((rc=PARMCI_Malloc((void **)_armci_notify_arr, bytes))) armci_die(" armci_notify_init: armci_malloc failed",bytes); bzero(_armci_notify_arr[armci_me], bytes); } static void armci_perror_msg() { char perr_str[80]; if(!errno)return; sprintf(perr_str,"Last System Error Message from Task %d:",armci_me); perror(perr_str); } static void armci_abort(int code) { abort(); #if !defined(BGML) armci_perror_msg(); #endif ARMCI_Cleanup(); /* data server process cannot use message-passing library to abort * it simply exits, parent will get SIGCHLD and abort the program */ #if defined(DATA_SERVER) if(armci_me<0)_exit(1); else #endif armci_msg_abort(code); } void armci_die(char *msg, int code) { void *bt[100]; if(_armci_terminating)return; else _armci_terminating=1; if(SERVER_CONTEXT){ fprintf(stdout,"%d(s):%s: %d\n",armci_me, msg, code); fflush(stdout); // fprintf(stderr,"%d(s):%s: %d\n",armci_me, msg, code); }else{ fprintf(stdout,"%d:%s: %d\n",armci_me, msg, code); fflush(stdout); //fprintf(stderr,"%d:%s: %d\n",armci_me, msg, code); } #ifdef PRINT_BT backtrace_symbols_fd(bt, backtrace(bt, 100), 2); #endif armci_abort(code); } void armci_die2(char *msg, int code1, int code2) { void *bt[100]; if(_armci_terminating)return; else _armci_terminating=1; if(SERVER_CONTEXT){ fprintf(stdout,"%d(s):%s: (%d,%d)\n",armci_me,msg,code1,code2); fflush(stdout); fprintf(stderr,"%d(s):%s: (%d,%d)\n",armci_me,msg,code1,code2); }else{ fprintf(stdout,"%d:%s: (%d,%d)\n",armci_me,msg,code1,code2); fflush(stdout); fprintf(stderr,"%d:%s: (%d,%d)\n",armci_me,msg,code1,code2); } #ifdef PRINT_BT backtrace_symbols_fd(bt, backtrace(bt, 100), 2); #endif armci_abort(code1); } void ARMCI_Error(char *msg, int code) { armci_die(msg,code); } void armci_allocate_locks() { /* note that if ELAN_ACC is defined the scope of locks is limited to SMP */ #if !defined(CRAY_SHMEM) && (defined(HITACHI) || defined(CATAMOUNT) || \ (defined(QUADRICS) && defined(_ELAN_LOCK_H) && !defined(ELAN_ACC))) armcill_allocate_locks(NUM_LOCKS); #elif (defined(SYSV) || defined(WIN32) || defined(MMAP)) && !defined(HITACHI) if(armci_nproc == 1)return; # if defined(SPINLOCK) || defined(PMUTEX) || defined(PSPIN) CreateInitLocks(NUM_LOCKS, &lockid); # else if(armci_master==armci_me)CreateInitLocks(NUM_LOCKS, &lockid); armci_msg_clus_brdcst(&lockid, sizeof(lockid)); if(armci_master != armci_me)InitLocks(NUM_LOCKS, lockid); # endif #endif } void ARMCI_Set_shm_limit(unsigned long shmemlimit) { #if (defined(SYSV) || defined(WIN32) || defined(MMAP)) && !defined(HITACHI) #define EXTRASHM 1024 /* extra shmem used internally in ARMCI */ unsigned long limit; limit = shmemlimit + EXTRASHM; armci_set_shmem_limit_per_core(limit); #endif } /*\ allocate and initialize memory locking data structure \*/ void armci_init_memlock() { int bytes = MAX_SLOTS*sizeof(memlock_t); int rc, msize_per_proc=bytes; #ifdef MEMLOCK_SHMEM_FLAG /* last proc on node allocates memlock flag in shmem */ if(armci_clus_last == armci_me) bytes += sizeof(int); #endif memlock_table_array = malloc(armci_nproc*sizeof(void*)); if(!memlock_table_array) armci_die("malloc failed for ARMCI lock array",0); rc = PARMCI_Malloc(memlock_table_array, bytes); if(rc) armci_die("failed to allocate ARMCI memlock array",rc); armci_msg_barrier(); bzero(memlock_table_array[armci_me],bytes); #ifdef BGML bgml_init_locks ((void *) memlock_table_array[armci_me]); #elif ARMCIX ARMCIX_init_memlock ((memlock_t *) memlock_table_array[armci_me]); #endif #ifdef MEMLOCK_SHMEM_FLAG /* armci_use_memlock_table is a pointer to local memory variable=1 * we overwrite the pointer with address of shared memory variable * armci_use_memlock_table and initialize it >0 */ armci_use_memlock_table = (int*) (msize_per_proc + (char*) memlock_table_array[armci_clus_last]); /* printf("%d: last=%d bytes=%d ptr =(%d, %d)\n", armci_me,armci_clus_last,bytes,armci_use_memlock_table, memlock_table_array[armci_clus_last]); fflush(stdout); */ if(armci_clus_last == armci_me) *armci_use_memlock_table =1+armci_me; #endif *armci_use_memlock_table = 0; armci_msg_barrier(); } #if defined(SYSV) || defined(WIN32) static void armci_check_shmmax() { long mylimit, limit; mylimit = limit = (long) armci_max_region(); armci_msg_bcast_scope(SCOPE_MASTERS, &limit, sizeof(long), 0); if(mylimit != limit){ printf("%d:Shared mem limit in ARMCI is %ld bytes on node %s vs %ld on %s\n", armci_me,mylimit<<10,armci_clus_info[armci_clus_me].hostname, limit<<10, armci_clus_info[0].hostname); fflush(stdout); sleep(1); armci_die("All nodes must have the same SHMMAX limit if NO_SHM is not defined",0); } } #endif extern void armci_region_shm_malloc(void *ptr_arr[], size_t bytes); void ARMCI_NetInit() { /*armci_portals_net_init();*/ } int PARMCI_Init_args(int *argc, char ***argv) { armci_msg_init(argc,argv); _armci_argc = argc; _armci_argv = argv; _armci_initialized_args=1; PARMCI_Init(); } extern void *sbrk(intptr_t); extern void code_summary(); int PARMCI_Init() { caddr_t atbeginbrval = (caddr_t)sbrk(0); if(_armci_initialized>0) return 0; #ifdef NEW_MALLOC mallopt(M_MMAP_MAX, 0); mallopt(M_TRIM_THRESHOLD, -1); #endif armci_msg_init(NULL, NULL); armci_nproc = armci_msg_nproc(); armci_me = armci_msg_me(); armci_usr_tid = THREAD_ID_SELF(); /*remember the main user thread id */ armci_init_clusinfo(); armci_prot_switch_fence = malloc(sizeof(int*)*armci_nproc); assert(armci_prot_switch_fence !=NULL); # ifdef LIBONESIDED armci_onesided_init(); # endif #ifdef MPI armci_group_init(); #endif #ifndef NEW_MALLOC armci_krmalloc_init_localmem(); #endif #if defined(SYSV) || defined(WIN32) || defined(MMAP) if(ARMCI_Uses_shm() ) { armci_shmem_init(); } #endif armci_allocate_locks(); armci_init_fence(); #if ARMCI_ENABLE_GPC_CALLS gpc_init_signals(); #endif armci_msg_barrier(); armci_init_memlock(); /* allocate data struct for locking memory areas */ armci_msg_barrier(); //if(armci_me == 0) code_summary(); armci_msg_barrier(); armci_msg_gop_init(); _armci_initialized++; return 0; } void PARMCI_Finalize() { if(!_armci_initialized)return; _armci_initialized--; if(_armci_initialized)return; _armci_terminating =1; armci_msg_barrier(); if(armci_me==armci_master) ARMCI_ParentRestoreSignals(); #ifdef PORTALS request_header_t msg; portals_ds_req_t req; ptl_process_id_t dsid = portals_id_map[armci_me]; msg.operation = QUIT; if(armci_me == armci_master) { portalsBlockingRemoteOperationToNode(&msg,sizeof(request_header_t),armci_clus_me); } armci_msg_barrier(); portals_cp_finalize(); #else ARMCI_Cleanup(); armci_msg_barrier(); armci_group_finalize(); free(armci_prot_switch_fence); #endif #ifdef MPI MPI_Comm_free(&ARMCI_COMM_WORLD); /*JD: free at last*/ #endif } /* Indicates whether ARMCI_Init or ARMCI_Init_args has been called. */ int PARMCI_Initialized() { return (_armci_initialized > 0) ? 1 : 0; } #if !(defined(SYSV) || defined(WIN32)) void ARMCI_Set_shmem_limit(unsigned long shmemlimit) { /* not applicable here * aborting would make user's life harder */ } #endif void ARMCI_Copy(void *src, void *dst, int n) { armci_copy(src,dst,n); } extern void cpu_yield(); void armci_util_wait_int(volatile int *p, int val, int maxspin) { int count=0; extern void cpu_yield(); while(*p != val) if((++count)proc); if(direct) { return(success); } if(nb_handle) { if(nb_handle->onesided_direct) { for(i=0; icomm_desc[i].state) { onesided_wait(&nb_handle->comm_desc[i]); cpMemDeregister(&nb_handle->comm_desc[i].local_mdesc); } } __asm__ __volatile__ ("mfence" ::: "memory"); __asm__ __volatile__ ("sfence" ::: "memory"); ARMCI_INIT_HANDLE(nb_handle); return(success); } if(nb_handle->agg_flag) { armci_agg_complete(nb_handle, UNSET); return (success); } if(nb_handle->tag!=0 && nb_handle->bufid==NB_NONE) { ARMCI_NB_WAIT(nb_handle->cmpl_info); __asm__ __volatile__ ("mfence" ::: "memory"); __asm__ __volatile__ ("sfence" ::: "memory"); return(success); } # ifdef COMPLETE_HANDLE COMPLETE_HANDLE(nb_handle->bufid,nb_handle->tag,(&success)); # endif } __asm__ __volatile__ ("mfence" ::: "memory"); __asm__ __volatile__ ("sfence" ::: "memory"); return(success); } /** * implicit handle */ static char hdl_flag[ARMCI_MAX_IMPLICIT]; static int impcount=0; armci_ihdl_t armci_set_implicit_handle (int op, int proc) { int i=impcount%ARMCI_MAX_IMPLICIT; if(hdl_flag[i]=='1') PARMCI_Wait((armci_hdl_t*)&armci_inb_handle[i]); #ifdef BGML armci_inb_handle[i].count=0; #endif armci_inb_handle[i].tag = GET_NEXT_NBTAG(); armci_inb_handle[i].op = op; armci_inb_handle[i].proc = proc; armci_inb_handle[i].bufid = NB_NONE; armci_inb_handle[i].agg_flag = 0; hdl_flag[i]='1'; ++impcount; return &armci_inb_handle[i]; } /* wait for all non-blocking operations to finish */ int PARMCI_WaitAll (void) { #ifdef BGML BGML_WaitAll(); #elif ARMCIX ARMCIX_WaitAll (); #else int i; if(impcount) { for(i=0; iagg_flag = 1; ((armci_ihdl_t)(nb_handle))->proc = -1; } void ARMCI_UNSET_AGGREGATE_HANDLE(armci_hdl_t* nb_handle) { ((armci_ihdl_t)(nb_handle))->agg_flag = 0; ((armci_ihdl_t)(nb_handle))->proc = -1; } int parmci_notify(int proc) { #ifdef DOELAN4 if(proc==armci_me){ return 0; } #endif #if defined(GM) || (defined(DOELAN4) && defined(ELAN_ACC)) { extern int armci_inotify_proc(int); return(armci_inotify_proc(proc)); } #else armci_notify_t *pnotify = _armci_notify_arr[armci_me]+proc; pnotify->sent++; # ifdef MEM_FENCE if(SAMECLUSNODE(proc)) MEM_FENCE; # endif PARMCI_Put(&pnotify->sent,&(_armci_notify_arr[proc]+armci_me)->received, sizeof(pnotify->sent),proc); return(pnotify->sent); #endif } /*\ blocks until received count becomes >= waited count * return received count and store waited count in *pval \*/ int parmci_notify_wait(int proc,int *pval) { int retval; #ifdef DOELAN4 if(proc==armci_me){ #ifdef MEM_FENCE MEM_FENCE; #endif return 0; } #endif #if defined(GM) || (defined(DOELAN4) && defined(ELAN_ACC)) { extern int armci_inotify_wait(int,int*); retval=armci_inotify_wait(proc,pval); } #else { long loop=0; armci_notify_t *pnotify = _armci_notify_arr[armci_me]+proc; pnotify->waited++; while( pnotify->waited > pnotify->received) { if(++loop == 1000) { loop=0;cpu_yield(); } armci_util_spin(loop, pnotify); } *pval = pnotify->waited; retval=pnotify->received; } #endif return retval; } long armci_util_long_getval(long* p) { return *p; } int armci_util_int_getval(int* p) { return *p; } int PARMCI_Test(armci_hdl_t *usr_hdl) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int success=0; #ifdef BGML success=(int)nb_handle->count; #else int direct=SAMECLUSNODE(nb_handle->proc); if(direct)return(success); if(nb_handle) { if(nb_handle->agg_flag) { armci_die("test for aggregate handle not yet implemented\n",0); } } if(nb_handle){ # ifdef ARMCI_NB_TEST if(nb_handle->tag==0){ ARMCI_NB_TEST(nb_handle->cmpl_info,&success); return(success); } # ifdef LAPI if(nb_handle->tag!=0 && nb_handle->bufid==NB_NONE){ ARMCI_NB_TEST(nb_handle->cmpl_info,&success); return(success); } # endif # endif # ifdef TEST_HANDLE TEST_HANDLE(nb_handle->bufid,nb_handle->tag,(&success)); # endif } #endif return(success); } #ifdef DO_CKPT void ARMCI_Ckpt_create_ds(armci_ckpt_ds_t *ckptds, int count) { armci_create_ckptds(ckptds,count); } int ARMCI_Ckpt_init(char *filename, ARMCI_Group *grp, int savestack, int saveheap, armci_ckpt_ds_t *ckptds) { int rid; rid = armci_icheckpoint_init(filename,grp,savestack,saveheap,ckptds); return(rid); } int ARMCI_Ckpt(int rid) { return(armci_icheckpoint(rid)); } void ARMCI_Ckpt_Recover(int rid, int iamreplacement) { armci_irecover(rid, iamreplacement); } void ARMCI_Ckpt_finalize(int rid) { armci_icheckpoint_finalize(rid); } #endif #if ARMCI_ENABLE_GPC_CALLS int armci_gpc(int hndl, int proc, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, void *rdata, int rdlen, armci_hdl_t* nbh) { armci_ihdl_t nb_handle = (armci_ihdl_t)nbh; armci_giov_t darr[2]; /* = {{&rhdr, &rhdr, 1, rhlen}, {&rdata, &rdata, 1, rdlen}};*/ gpc_send_t send; char *ptr; /* initialize giov */ darr[0].src_ptr_array = &rhdr; darr[0].dst_ptr_array = &rhdr; darr[0].ptr_array_len = 1; darr[0].bytes = rhlen; darr[1].src_ptr_array = &rdata; darr[1].dst_ptr_array = &rdata; darr[1].ptr_array_len = 1; darr[1].bytes = rdlen; /* if(hlen<0 || hlen>=ARMCI_Gpc_get_hlen()) */ /* return FAIL2; */ /* if(rhlen<0 || rhlen>=ARMCI_Gpc_get_hlen()) */ /* return FAIL2; */ /* if(dlen<0 || dlen>=ARMCI_Gpc_get_dlen()) */ /* return FAIL2; */ /* if(rdlen<0 || rdlen>=ARMCI_Gpc_get_dlen()) */ /* return FAIL2; */ if(hlen>0 && hdr==NULL) return FAIL3; if(rhlen>0 && rhdr==NULL) return FAIL3; if(dlen>0 && data==NULL) return FAIL3; if(rdlen>0 && rdata==NULL) return FAIL3; if(proc<0 || proc >= armci_nproc) return FAIL4; send.hndl = hndl; send.hlen = hlen; send.dlen = dlen; send.hdr = hdr; send.data = data; if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = GET; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else { ORDER(GET,proc); /*ensure ordering */ nb_handle = NULL; } #if defined(LAPI) || defined(GM) || defined(VAPI) || defined(QUADRICS) if(armci_rem_gpc(GET, darr, 2, &send, proc, 1, nb_handle)) #endif return FAIL2; return 0; } int armci_sameclusnode(int proc) { return SAMECLUSNODE(proc); } #endif void _armci_init_handle(armci_hdl_t *hdl) { ((double *)((hdl)->data))[0]=0; ((double *)((hdl)->data))[1]=0; } static inline int val_to_char(int v) { if (v >= 0 && v < 10) return '0' + v; else if (v >= 10 && v < 16) return ('a' - 10) + v; else return -1; } static const char *nexttoken(const char *q, int sep) { if (q) q = strchr(q, sep); if (q) q++; return q; } #ifdef PORTALS_UNRESOLVED int cstr_to_cpuset(cpu_set_t * mask, const char *str) { const char *p, *q; q = str; CPU_ZERO(mask); while (p = q, q = nexttoken(q, ','), p) { unsigned int a; /* beginning of range */ unsigned int b; /* end of range */ unsigned int s; /* stride */ const char *c1, *c2; if (sscanf(p, "%u", &a) < 1) return 1; b = a; s = 1; c1 = nexttoken(p, '-'); c2 = nexttoken(p, ','); if (c1 != NULL && (c2 == NULL || c1 < c2)) { if (sscanf(c1, "%u", &b) < 1) return 1; c1 = nexttoken(c1, ':'); if (c1 != NULL && (c2 == NULL || c1 < c2)) if (sscanf(c1, "%u", &s) < 1) { return 1; } } if (!(a <= b)) return 1; while (a <= b) { CPU_SET(a, mask); a += s; } } return 0; } char *cpuset_to_cstr(cpu_set_t * mask, char *str) { int i; char *ptr = str; int entry_made = 0; for (i = 0; i < CPU_SETSIZE; i++) { if (CPU_ISSET(i, mask)) { int j; int run = 0; entry_made = 1; for (j = i + 1; j < CPU_SETSIZE; j++) { if (CPU_ISSET(j, mask)) run++; else break; } if (!run) sprintf(ptr, "%d,", i); else if (run == 1) { sprintf(ptr, "%d,%d,", i, i + 1); i++; } else { sprintf(ptr, "%d-%d,", i, i + run); i += run; } while (*ptr != 0) ptr++; } } ptr -= entry_made; *ptr = 0; return str; } char *cpuset_to_str(cpu_set_t * mask, char *str) { int base; char *ptr = str; char *ret = 0; for (base = CPU_SETSIZE - 4; base >= 0; base -= 4) { char val = 0; if (CPU_ISSET(base, mask)) val |= 1; if (CPU_ISSET(base + 1, mask)) val |= 2; if (CPU_ISSET(base + 2, mask)) val |= 4; if (CPU_ISSET(base + 3, mask)) val |= 8; if (!ret && val) ret = ptr; *ptr++ = val_to_char(val); } *ptr = 0; return ret ? ret : ptr - 1; } #endif long armci_cksm_copy(char *src, char *dst, size_t bytes) { long sum = 0; size_t count=bytes; while( count > 1 ) { sum += * (unsigned int *) src++; count -= 4; } if( count > 0 ){ printf("\nblistering barnicles"); sum += * (unsigned char *) src; } while (sum>>32) sum = (sum & 0xffffffff) + (sum >> 32); return(~sum); } void code_summary() { printf("\nActive #defines that could affect ARMCI"); printf("\n----------------------------------------"); # ifdef ORNL_USE_DS_FOR_REMOTE_GETS printf("\n#define ORNL_USE_DS_FOR_REMOTE_GETS"); # endif # ifdef PORTALS_USE_RENDEZ_VOUS printf("\n#define PORTALS_USE_RENDEZ_VOUS"); # endif # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE printf("\n#define PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE"); # endif # ifdef PORTALS_AFFINITY printf("\n#define PORTALS_AFFINITY"); # endif /* # ifdef CRAY_USE_MDMD_COPY printf("\n#define CRAY_USE_MDMD_COPY"); # endif */ printf("\n----------------------------------------"); printf("\nInfo @ armci/src/code_options.h"); printf("\n----------------------------------------\n"); # ifdef PORTALS portals_print_summary(); # endif } ga-5-3/armci/src-gemini/portals.h0000640005473000001440000001734711466071465015607 0ustar d3n000users/* ---------------------------------------------------------------------------------------------- *\ portals.h header \* ---------------------------------------------------------------------------------------------- */ # ifndef _PORTALS_H_ # define _PORTALS_H_ # define PORTALS_INDEX 1 # define ONE_KB 1024 # define ONE_MB 1048576 # define MAX_DS_MSG_SIZE ONE_MB # define PORTALS_MAX_DESCRIPTORS (MAX_BUFS+MAX_SMALL_BUFS) # define PORTALS_MAX_BUFS MAX_BUFS # define PORTALS_MAX_SMALL_BUFS MAX_SMALL_BUFS # define PORTALS_BUF_SIZE MSG_BUFLEN /* defined in requesh.h */ /* define small buf length here - formerly request.h */ # ifdef PORTALS_USE_RENDEZ_VOUS # define PORTALS_SMALL_BUF_SIZE 1024 /* for use with nwchem only -- will not pass armci test.x */ # define PORTALS_MAX_EAGER_MESSAGE_SIZE PORTALS_SMALL_BUF_SIZE # else # define PORTALS_SMALL_BUF_SIZE 1024 # define PORTALS_MAX_EAGER_MESSAGE_SIZE PORTALS_BUF_SIZE # endif # define PORTALS_NREQUEST_BUFFERS 40 # define PORTALS_REQUEST_BUFFER_SIZE_WARNING (128*ONE_MB) # define PORTALS_READ_ACCESS 1 # define PORTALS_WRITE_ACCESS 1000 # define MATCH_ALL_MBITS 0x8000000000000000 /* should be set for all data requests */ # define MATCH_ALL_IBITS ~MATCH_ALL_MBITS /* used to mask out all other bits, but MATCH_ALL */ # define STATE_SEND_START 0x1 # define STATE_SEND_END 0x2 # define STATE_REPLY_START 0x4 # define STATE_REPLY_END 0x8 # define STATE_ACK 0x10 # define STATE_PUT_START 0x20 # define STATE_PUT_END 0x40 # define STATE_GET_START 0x80 # define STATE_GET_END 0x100 # define STATE_UNLINK 0x200 # define DS_RESPONSE_ACK 0x100000000000000 # define DS_RESPONSE_PUT 0x200000000000000 # define DS_RESPONSE_GET 0x400000000000000 # define PORTALS_ALLOW_NBGETS # define PORTALS_USE_ARMCI_CLIENT_BUFFERS # define PORTALS_PUT_USE_ACK_TURNED_OFF # define PORTALS_PUT_USE_START_TURNED_OFF # define PORTALS_GET_USE_START_TURNED_OFF /* ---------------------------------------------------------------------------------------------- *\ portals types \* ---------------------------------------------------------------------------------------------- */ typedef struct portals_desc_s { void* buffer; // used for the md ptl_size_t length; // used for the md ptl_process_id_t id; // on whom the operation is acting on ptl_match_bits_t mbits; // operations destination mbits ptl_hdr_data_t hdr; // used for puts/unique counter value ptl_handle_ni_t nih; // network interface handle ptl_handle_eq_t eqh; // event handler ptl_handle_me_t meh; // me handle (if necessary) ptl_handle_md_t mdh; // md handle (if necessary) int state; // track outstanding events remaining on the descriptor int done; // flag to test whether all work on the descriptor is finished int noperations; // the number of remote operations allowed on buffer // this is only used when preposting/pinning CP memory // for remote operations initiated by the data server } portals_desc_t; typedef struct portals_ds_req_s { portals_desc_t req_desc; portals_desc_t ack_desc; portals_desc_t data_desc; ptl_process_id_t dsid; size_t unique_msg_id; int active; int remote_node; } portals_ds_req_t; /* ---------------------------------------------------------------------------------------------- *\ portals global variables \* ---------------------------------------------------------------------------------------------- */ ptl_handle_ni_t cp_nih; ptl_handle_ni_t ds_nih; ptl_handle_eq_t cp_eqh; ptl_handle_eq_t ds_eqh; ptl_process_id_t *portals_id_map; ptl_process_id_t *portals_cloned_id_map; int portals_ds_ready; int portals_cp_finished; size_t portalsMaxEagerMessageSize; /* ---------------------------------------------------------------------------------------------- *\ portals prototypes \* ---------------------------------------------------------------------------------------------- */ int portals_init(ptl_handle_ni_t*); int portals_finalize(ptl_handle_ni_t); int portals_getid(ptl_handle_ni_t,ptl_process_id_t *); int portals_free_eq(ptl_handle_eq_t); int portals_create_eq(ptl_handle_ni_t, ptl_size_t, ptl_handle_eq_t*); int portals_create_matchall_me(ptl_handle_me_t*); int portals_me_attach(ptl_handle_ni_t,ptl_process_id_t,ptl_match_bits_t,ptl_match_bits_t,ptl_handle_me_t*); int portals_me_insert(ptl_handle_me_t,ptl_process_id_t,ptl_match_bits_t,ptl_match_bits_t,ptl_handle_me_t*); int portals_me_unlink(ptl_handle_me_t); int portals_md_attach(ptl_handle_me_t,ptl_md_t,ptl_unlink_t,ptl_handle_md_t*); int portals_md_bind(ptl_handle_ni_t,ptl_md_t,ptl_unlink_t,ptl_handle_md_t*); int portals_eqwait(ptl_handle_eq_t,ptl_event_t*); int portals_put(portals_desc_t*); int portals_get(portals_desc_t*); int portals_wait(portals_desc_t*); void* portalsCloneDataServer(void *); void portalsSpinLockOnInt(volatile int*, int, int); void portals_print_event_details(ptl_event_t *ev); void Fatal_error(int); const char *Portals_ID(); void bit_print(const char *,int); void hex_print(const char *,int); void portals_print_summary(); /* ---------------------------------------------------------------------------------------------- *\ portals data server prototypes \* ---------------------------------------------------------------------------------------------- */ void* portals_ds_thread(void* args); int portals_ds_init(void); int portals_ds(void); int portal_send_test_ack(int to,int val); int portals_ds_requeue_md(int); void portals_ds_get_from_cp(void*,ptl_size_t,ptl_process_id_t,ptl_match_bits_t); //void ds_handler(DDI_Patch*,ptl_process_id_t); /* ---------------------------------------------------------------------------------------------- *\ portals compute process prototypes \* ---------------------------------------------------------------------------------------------- */ int portals_cp_init(void); int portals_cp_getid(ptl_process_id_t *id); void portals_req_send(void *buffer, size_t size, portals_ds_req_t *req); void portals_req_nbsend(void *buffer, size_t size, portals_ds_req_t *req); void portals_req_wait(portals_ds_req_t *req); void portals_remote_get(void *buffer, request_header_t *msginfo, int remote_node); void portals_remote_put(void *buffer, request_header_t *msginfo, int remote_node); void portals_remote_acc(void *buffer, request_header_t *msginfo, int remote_node); void portals_remote_rmw(void *buffer, request_header_t *msginfo, int remote_node, portals_ds_req_t *req); void portals_remote_nbget(void *buffer, request_header_t *msginfo, int remote_node, portals_ds_req_t *req); void portals_remote_nbput(void *buffer, request_header_t *msginfo, int remote_node, portals_ds_req_t *req); void portals_remote_nbacc(void *buffer, request_header_t *msginfo, int remote_node, portals_ds_req_t *req); void portalsRemoteOperation(void*,size_t,ptl_process_id_t,portals_ds_req_t*); void portalsRemoteOperationToRank(void*,size_t,int,portals_ds_req_t*); void portalsRemoteOperationToNode(void*,size_t,int,portals_ds_req_t*); void portalsBlockingRemoteOperationToNode(void*,size_t,int); static inline unsigned int cpuid_ebx(unsigned int op) { unsigned int eax, ebx; __asm__("cpuid" : "=a" (eax), "=b" (ebx) : "0" (op) : "cx", "dx" ); return ebx; } # endif ga-5-3/armci/src-gemini/threads.c0000640005473000001440000000672211466102622015531 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: threads.c,v 1.1.2.5 2007-08-28 21:29:46 manoj Exp $ */ #if 0 # define PRNDBG3(m,a1,a2,a3) \ fprintf(stderr,"DBG %d: " m,armci_me,a1,a2,a3);fflush(stderr) # define PRNDBG(m) PRNDBG3(m,0,0,0) # define PRNDBG1(m,a1) PRNDBG3(m,a1,0,0) # define PRNDBG2(m,a1,a2) PRNDBG3(m,a1,a2,0) #else # define PRNDBG(m) # define PRNDBG1(m,a1) # define PRNDBG2(m,a1,a2) # define PRNDBG3(m,a1,a2,a3) #endif #include #include "armcip.h" armci_user_threads_t armci_user_threads; void armci_init_threads() { int i, bytes; char *uval = getenv("ARMCI_MAX_THREADS"); armci_user_threads.max = 1; armci_user_threads.avail = 0; if (uval != NULL) sscanf(uval, "%d", &armci_user_threads.max); if (armci_user_threads.max < 1 || armci_user_threads.max > ARMCI_THREADS_LIMIT) { printf("Error: Only 1-%d threads are supported. ",ARMCI_THREADS_LIMIT); printf("Set ARMCI_MAX_THREADS appropriately\n"); fflush(stdout); armci_die("armci_init_threads: failed", 0); } bytes = sizeof(thread_id_t) * armci_user_threads.max; if ( !(armci_user_threads.ids = (thread_id_t*) malloc(bytes)) ) { armci_die("armci_init_threads: armci_user_threads.ids malloc failed", armci_user_threads.max); } memset(armci_user_threads.ids, 0, bytes); #if 0 /* spinlock has void return value */ if (THREAD_LOCK_INIT(armci_user_threads.lock) || THREAD_LOCK_INIT(armci_user_threads.buf_lock) || THREAD_LOCK_INIT(armci_user_threads.net_lock)) armci_die("armci_init_threads:locks initialization failed", 0); #else THREAD_LOCK_INIT(armci_user_threads.lock); THREAD_LOCK_INIT(armci_user_threads.buf_lock); THREAD_LOCK_INIT(armci_user_threads.net_lock); #endif #if 0 /* using one lock per socket for now, it might be feasible (and usefull) * to use two (one for sending and one for receiving) */ armci_user_threads.sock_locks = malloc(armci_nclus *sizeof(thread_lock_t)); for (i = 0; i < armci_nclus; i++) if (THREAD_LOCK_INIT(armci_user_threads.sock_locks[i])) armci_die("armci_init_threads:sock locks initialization failed", i); #endif } void armci_finalize_threads() { THREAD_LOCK_DESTROY(armci_user_threads.lock); THREAD_LOCK_DESTROY(armci_user_threads.net_lock); THREAD_LOCK_DESTROY(armci_user_threads.buf_lock); free(armci_user_threads.ids); } /* calling armci_thread_idx for every function that accesses thread-private data * might be expensive -- needs optiomization */ INLINE int armci_thread_idx() { int i, n = ARMCI_MIN(armci_user_threads.avail, armci_user_threads.max); thread_id_t id = THREAD_ID_SELF(); for (i = 0; i < n; i++) if (id == armci_user_threads.ids[i]) { /*PRNDBG2("thread id=%ld already registered, idx=%d\n", id, i);*/ return i; } /* see this thread for the first time */ return armci_register_thread(id); } INLINE int armci_register_thread(thread_id_t id) { int i; THREAD_LOCK(armci_user_threads.lock); i = armci_user_threads.avail; armci_user_threads.avail++; THREAD_UNLOCK(armci_user_threads.lock); if (i < armci_user_threads.max) armci_user_threads.ids[i] = id; else armci_die("armci_thread_idx: too many threads, adjust ARMCI_MAX_THREADS", armci_user_threads.avail); PRNDBG2("registered a new thread: idx=%d, id=%ld\n", i, id); return i; } ga-5-3/armci/src-gemini/generategnuplot.sh0000640005473000001440000000046411466071465017501 0ustar d3n000users#!/bin/sh echo "#Range number process" > profile_3d.dat for (( i = 0 ; i <= 128; i++ )) do affile="armci_profile.${i}" if test -s $affile then head -n 28 $affile | tail -n 22 | awk '{print $7" "$0+$1+$2" '$i'"}' | awk -F- '{print $2}' | awk -F")" '{print $1" "$2}' >> profile_3d.dat fi done ga-5-3/armci/src-gemini/rmw.c0000640005473000001440000000771711711747214014716 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: rmw.c,v 1.24.2.5 2007-08-29 17:32:47 manoj Exp $ */ #include "armcip.h" #include "locks.h" #include "copy.h" #include #if (defined(__i386__) || defined(__x86_64__)) && !defined(_CRAYC) # include "atomics-i386.h" #endif #ifdef LIBELAN_ATOMICS ELAN_ATOMIC *a; int elan_int_fadd(int *target, int inc, int vp) { int result; elan_wait(elan_atomic32(a, ELAN_ATOMIC_ADD, target, inc, 0, vp, &result), elan_base->waitType); return(result); } int elan_long_fadd(long *target, long inc, int vp) { long result; #ifdef _LP64 elan_wait(elan_atomic64(a, ELAN_ATOMIC_ADD, target, inc, 0, vp, &result), elan_base->waitType); #else elan_wait(elan_atomic32(a, ELAN_ATOMIC_ADD, target, inc, 0, vp, &result), elan_base->waitType); #endif return(result); } int elan_int_swap(int *target, int value, int vp) { int result; elan_wait(elan_atomic32(a, ELAN_ATOMIC_SWAP, target, value, 0, vp, &result), elan_base->waitType); return(result); } int elan_long_swap(long *target, long value, int vp) { long result; #ifdef _LP64 elan_wait(elan_atomic64(a, ELAN_ATOMIC_SWAP, target, value, 0, vp, &result), elan_base->waitType); #else elan_wait(elan_atomic32(a, ELAN_ATOMIC_SWAP, target, value, 0, vp, &result), elan_base->waitType); #endif return(result); } #endif /* LIBELAN_ATOMICS */ /* enable use of newer interfaces in SHMEM */ #ifndef CRAY #ifndef LIBELAN_ATOMICS /* manpages for shmem_fadd exist on the T3E but library code does not */ #define SHMEM_FADD #endif #endif /* global scope to prevent compiler optimization of volatile code */ int _a_temp; long _a_ltemp; void armci_generic_rmw(int op, void *ploc, void *prem, int extra, int proc) { #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif ARMCI_PR_DBG("enter",0); NATIVE_LOCK(lock,proc); switch (op) { case ARMCI_FETCH_AND_ADD: armci_get(prem,ploc,sizeof(int),proc); _a_temp = *(int*)ploc + extra; armci_put(&_a_temp,prem,sizeof(int),proc); break; case ARMCI_FETCH_AND_ADD_LONG: armci_get(prem,ploc,sizeof(long),proc); _a_ltemp = *(long*)ploc + extra; armci_put(&_a_ltemp,prem,sizeof(long),proc); break; case ARMCI_SWAP: #if (defined(__i386__) || defined(__x86_64__)) && !defined(_CRAYC) if(SERVER_CONTEXT || armci_nclus==1){ atomic_exchange(ploc, prem, sizeof(int)); } else #endif { armci_get(prem,&_a_temp,sizeof(int),proc); armci_put(ploc,prem,sizeof(int),proc); *(int*)ploc = _a_temp; } break; case ARMCI_SWAP_LONG: armci_get(prem,&_a_ltemp,sizeof(long),proc); armci_put(ploc,prem,sizeof(long),proc); *(long*)ploc = _a_ltemp; break; default: armci_die("rmw: operation not supported",op); } /*TODO memfence here*/ NATIVE_UNLOCK(lock,proc); ARMCI_PR_DBG("exit",0); } int PARMCI_Rmw(int op, void *ploc, void *prem, int extra, int proc) { if(!SAMECLUSNODE(proc)){ # if defined CRAY_REGISTER_ARMCI_MALLOC && HAVE_ONESIDED_FADD if(op == ARMCI_FETCH_AND_ADD_LONG) { armci_onesided_fadd(ploc, prem, extra, proc); } else { # endif armci_rem_rmw(op, ploc, prem, extra, proc); # if defined CRAY_REGISTER_ARMCI_MALLOC && HAVE_ONESIDED_FADD } # endif return 0; } switch (op) { case ARMCI_FETCH_AND_ADD_LONG: # if defined CRAY_REGISTER_ARMCI_MALLOC && HAVE_ONESIDED_FADD armci_onesided_fadd(ploc, prem, extra, proc); break; # endif case ARMCI_FETCH_AND_ADD: case ARMCI_SWAP: case ARMCI_SWAP_LONG: armci_generic_rmw(op, ploc, prem, extra, proc); break; default: armci_die("rmw: operation not supported",op); } return 0; } ga-5-3/armci/src-gemini/signaltrap.h0000640005473000001440000000054611466071465016260 0ustar d3n000users#ifndef _SIGNALTRAP_H_ #define _SIGNALTRAP_H_ #ifdef SYSV extern void ARMCI_ChildrenTrapSignals(); extern void ARMCI_ParentTrapSignals(); extern void ARMCI_ParentRestoreSignals(); extern void ARMCI_RestoreSignals(); #else # define ARMCI_ChildrenTrapSignals() # define ARMCI_ParentTrapSignals() # define ARMCI_ParentRestoreSignals() #endif #endif ga-5-3/armci/src-gemini/gpc.h0000640005473000001440000000204711622516074014655 0ustar d3n000users#ifndef __GPCDEF #if ARMCI_ENABLE_GPC_CALLS #define __GPCDEF #include "armci.h" #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif #define GPC_INIT 1 #define GPC_PROBE 2 #define GPC_WAIT 3 #define GPC_DONE 4 #define GPC_PENDING 5 typedef struct { int proc; armci_hdl_t ahdl; }gpc_hdl_t; /* #define ARMCI_GPC_HLEN 1024 */ /* #define ARMCI_GPC_DLEN 1024*1024 */ extern int ARMCI_Gpc_register( int (*func) ()); extern void ARMCI_Gpc_release(int handle); extern void * ARMCI_Gpc_translate(void *ptr, int proc, int from); extern void ARMCI_Gpc_lock(int proc); extern void ARMCI_Gpc_unlock(int proc); extern int ARMCI_Gpc_trylock(int proc); extern int ARMCI_Gpc_exec(int h,int p, void *hdr, int hlen, void *data,int dlen, void *rhdr, int rhlen, void *rdata, int rdlen, gpc_hdl_t* nbh); extern int PARMCI_Get_gpc_hlen(); extern int PARMCI_Get_gpc_dlen(); extern void ARMCI_Gpc_init_handle(gpc_hdl_t *nbh); extern void ARMCI_Gpc_wait(gpc_hdl_t *nbh); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif #endif ga-5-3/armci/src-gemini/request.h0000640005473000001440000003354511711747214015604 0ustar d3n000users#ifndef _REQUEST_H_ #define _REQUEST_H_ /******** client buffer managment ops ****************************/ extern void _armci_buf_init(); extern char* _armci_buf_get(int size, int operation, int to); extern void _armci_buf_release(void *buf); extern int _armci_buf_to_index(void *buf); extern char* _armci_buf_ptr_from_id(int id); extern void _armci_buf_ensure_one_outstanding_op_per_node(void *buf, int node); #if defined(SERV_QUEUE) extern void _armci_buf_ensure_pend_outstanding_op_per_node(void *buf, int node); #endif extern void _armci_buf_complete_nb_request(int bufid,unsigned int tag, int *retcode); extern void _armci_buf_test_nb_request(int bufid,unsigned int tag, int *retcode); extern void _armci_buf_set_tag(void *bufptr,unsigned int tag,short int protocol); extern void _armci_buf_clear_all(); extern void x_buf_send_complete(void *); extern INLINE char *_armci_buf_get_clear_busy(int size, int operation, int to); extern INLINE void _armci_buf_set_busy(void *buf, int state); extern INLINE void _armci_buf_set_busy_idx(int tbl_idx, int state); extern INLINE int _armci_buf_cmpld(int bufid); extern INLINE void _armci_buf_set_cmpld(void *buf, int state); extern INLINE void _armci_buf_set_cmpld_idx(int idx, int state); #ifdef LAPI # include "lapidefs.h" #elif LIBONESIDED typedef armci_onesided_msg_tag_t msg_tag_t; #elif PORTALS # include "armci_portals.h" #elif defined(GM) # include "myrinet.h" #elif defined(DOELAN4) # include "elandefs.h" #elif defined(QUADRICS) # include typedef void* msg_tag_t; # ifdef _ELAN_PUTGET_H # define NB_CMPL_T ELAN_EVENT* # endif #elif defined(VIA) # include "via.h" typedef void* msg_tag_t; #elif defined(VAPI) # include "armci-vapi.h" #elif defined(SOCKETS) # include "sockets.h" typedef long msg_tag_t; typedef unsigned short msg_id_t; # define DTAG_ ((1<<(sizeof(msg_id_t)*8))-1) # define NB_SOCKETS_ /* define NB_SOCKETS to allow non-blocking path */ #elif defined(HITACHI) # include "sr8k.h" #elif defined(BGML) # include "bgml.h" # include "bgmldefs.h" # define NB_CMPL_T BG1S_t typedef long msg_tag_t; #elif defined(MPI_SPAWN) # include "mpi2.h" # define MSG_BUFLEN_DBL 500000 typedef long msg_tag_t; #else typedef long msg_tag_t; #endif #ifndef CLEAR_HNDL_FIELD # define CLEAR_HNDL_FIELD(_x) #endif #define ACK_QUIT 0 #define QUIT 33 #define ATTACH 34 #define REGISTER 35 /*\ the internal request structure for non-blocking api. \*/ typedef struct{ unsigned int tag; int bufid; int agg_flag; int op; int proc; #ifdef NB_CMPL_T NB_CMPL_T cmpl_info; #endif int onesided_direct; cos_desc_t comm_desc[MAX_OUTSTANDING_ONESIDED_GETS]; } armci_ireq_t; /*\ the internal request structure for non-blocking api. \*/ typedef armci_ireq_t* armci_ihdl_t; extern void armci_set_nbhandle_bufid(armci_ihdl_t nb_handle, char *buf, int val); extern void set_nbhandle(armci_ihdl_t *nbh, armci_hdl_t *nb_handle, int op, int proc); typedef struct { int to; /* message recipient */ int from; /* message sender */ int operation; /* operation code */ int format; /* data format used */ int bytes; /* number of bytes requested */ int datalen; /* >0 in lapi means that data is included */ int ehlen; /* size of extra header and the end of descr */ int dscrlen; /* >0 in lapi means that descriptor is included */ msg_tag_t tag; /* message tag for response to this request, MUST BE LAST */ }request_header_t; typedef struct _buf_ackresp{ long val,valc; cos_request_t req; struct _buf_ackresp *next, *previous; } _buf_ackresp_t; /*******gpc call strctures*************/ #include #define MAX_GPC_REQ 1 #define MAX_GPC_REPLY_LEN (64*1024) #define MAX_GPC_SEND_LEN (64*1024) #define GPC_COMPLETION_SIGNAL SIGUSR1 typedef struct { int hndl; int hlen, dlen; void *hdr, *data; int rhlen, rdlen; void *rhdr, *rdata; } gpc_call_t; typedef struct { int active; /* int zombie; */ request_header_t msginfo; gpc_call_t call; char send[MAX_GPC_SEND_LEN]; char reply[MAX_GPC_REPLY_LEN]; } gpc_buf_t; /* gpc_buf_t *gpc_req; */ extern gpc_buf_t *gpc_req; extern void block_pthread_signal(int signo); extern void unblock_pthread_signal(int signo); /*******structures copied from async.c for storing cmpl dscr for nb req*******/ #define UBUF_LEN 112 typedef struct { unsigned int tag; /* request id*/ _buf_ackresp_t ar; short int bufid; /* communication buffer id */ short int protocol; /* what does this buf hold?*/ union { void *dscrbuf; /*in case dscr below is not enough, do a*/ double pad; /*malloc, save pointer in dscrbuf and use it*/ }ptr; char dscr[UBUF_LEN]; /*place to store the dscr*/ }_buf_info_t; #define BUF_INFO_T _buf_info_t extern BUF_INFO_T *_armci_buf_to_bufinfo(void *buf); #define BUF_TO_BUFINFO _armci_buf_to_bufinfo void armci_complete_req_buf(BUF_INFO_T *info, void *buffer); extern INLINE BUF_INFO_T *_armci_id_to_bufinfo(int bufid); #ifndef MAX_BUFS #define MAX_BUFS 8 #error "MAX_BUFS set to 8" #endif #ifndef MAX_SMALL_BUFS #define MAX_SMALL_BUFS 16 #error "MAX_SMALL_BUFS set to 16" #endif /* tracks sockets used for receiving responces from data server (GET) */ typedef struct { int socks[MAX_BUFS+MAX_SMALL_BUFS]; /* sock # or -1 if not used */ int ready[MAX_BUFS+MAX_SMALL_BUFS]; /* 1 - ready, 0 - not */ } active_socks_t; /*valid values for the element protocol in BUF_INFO_T*/ #define SDSCR_IN_PLACE 1 /*indicated that strided descriptor is in place*/ #define VDSCR_IN_PLACE 2 /*indicated that vector descriptor is in place*/ #define VDSCR_IN_PTR 3 /*indicates that the vector descriptor in allocated and pointer stored in dscrbuf */ /****************************************************************************/ /* this effects: buf_ext_t, portalsEagerMessageSendSize, portals ds buffer size */ /* note: MSG_BUFLEN_DBL is being defined earlier in armci-portals.h */ #ifndef MSG_BUFLEN_DBL # error "MSG_BUFLEN_DBL not yet defined" # if defined(HITACHI) # define MSG_BUFLEN_DBL 0x50000 # else # ifdef PORTALS_USE_RENDEZ_VOUS # define MSG_BUFLEN_DBL 50000 /* for rendez-vous, this can go bigger i think */ # else # define MSG_BUFLEN_DBL 8192 /* this is smaller when rendez-vous is off */ # endif # endif #endif #define MSG_BUFLEN sizeof(double)*MSG_BUFLEN_DBL extern char* MessageRcvBuffer; extern char* MessageSndBuffer; #ifdef LAPI # define GET_SEND_BUFFER_(_size)(MessageSndBuffer+sizeof(lapi_cmpl_t));\ CLEAR_COUNTER(*((lapi_cmpl_t*)MessageSndBuffer));\ SET_COUNTER(*((lapi_cmpl_t*)MessageSndBuffer),1); # define GET_SEND_BUFFER _armci_buf_get # define GA_SEND_REPLY armci_lapi_send #else # ifdef SOCKETS # define GA_SEND_REPLY(tag, buf, len, p) armci_sock_send(p,buf,len) # else # define GA_SEND_REPLY(tag, buf, len, p) # endif #endif #ifdef QUADRICS_ # define GET_SEND_BUFFER(_size,_op,_to) MessageSndBuffer;\ while(((request_header_t*)MessageSndBuffer)->tag)\ armci_util_spin(100, MessageSndBuffer) # define FREE_SEND_BUFFER(_ptr) ((request_header_t*)MessageSndBuffer)->tag = (void*)0 #endif #ifndef GET_SEND_BUFFER # define GET_SEND_BUFFER(_size,_op,_to) MessageSndBuffer #endif #ifndef FREE_SEND_BUFFER #define FREE_SEND_BUFFER(_ptr) #endif #ifndef INIT_SENDBUF_INFO #define INIT_SENDBUF_INFO(_hdl,_buf,_op,_proc) #endif typedef struct { char *buf; char* buf_posted; int count; int proc; int op; int extra; } buf_arg_t; /*includes for SERVER_LOCK*/ #if defined(SERVER_THREAD) && !defined(VIA) extern void armci_rem_lock(int mutex, int proc, int *ticket); extern void armci_rem_unlock(int mutex, int proc, int ticket); extern void armci_unlock_waiting_process(msg_tag_t tag,int proc, int ticket); #endif #ifdef PIPE_BUFSIZE extern void armcill_pipe_post_bufs(void *ptr, int stride_arr[], int count[], int strides, void* argvoid); extern void armcill_pipe_extract_data(void *ptr,int stride_arr[],int count[], int strides, void* argvoid); extern void armcill_pipe_send_chunk(void *data, int stride_arr[],int count[], int strides, void* argvoid); #endif extern void armci_send_strided(int proc, request_header_t *msginfo, char *bdata, void *ptr, int strides, int stride_arr[], int count[],int tag); extern void armci_rcv_hdlr(request_header_t* msginfo); extern char *armci_rcv_data(int proc, request_header_t *msginfo, int rcvlen); extern void armci_rcv_strided_data_bypass(int proc, request_header_t *msginfo, void *ptr, int stride_levels); extern void armci_send_strided_data_bypass(int proc, request_header_t *msginfo, void *loc_buf, int msg_buflen, void *loc_ptr, int *loc_stride_arr, void *rem_ptr, int *rem_stride_arr, int *count, int stride_levels); extern void armci_rcv_strided_data(int proc, request_header_t* msginfo, int datalen, void *ptr, int strides,int stride_arr[],int count[]); extern void armci_send_strided_data(int proc, request_header_t *msginfo, char *bdata, void *ptr, int strides, int stride_arr[], int count[]); extern void armci_send_req(int proc, request_header_t* msginfo, int len,int tag); extern void armci_server_rmw(request_header_t* msginfo,void* ptr, void* pextra); extern int armci_rem_vector(int op, void *scale, armci_giov_t darr[],int len, int proc,int flag,armci_ihdl_t nb_handle); extern int armci_rem_strided(int op, void* scale, int proc, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, ext_header_t *h, int lockit,armci_ihdl_t nb_handle); extern void armci_rem_rmw(int op, void *ploc, void *prem, int extra, int proc); extern void armci_rem_ack(int clus); extern void armci_server(request_header_t *msginfo, char *dscr, char* buf, int buflen); extern void armci_server_vector(request_header_t *msginfo, char *dscr, char* buf, int buflen); extern void *armci_server_ptr(int); extern void armci_serv_attach_req(void *info, int ilen, long size, void* resp,int rlen); extern void armci_server_lock(request_header_t *msginfo); extern void armci_server_unlock(request_header_t *msginfo, char* dscr); extern void armci_create_server_thread ( void* (* func)(void*) ); extern int armci_server_lock_mutex(int mutex, int proc, msg_tag_t tag); extern void armci_send_data(request_header_t* msginfo, void *data); extern int armci_server_unlock_mutex(int mutex, int p, int tkt, msg_tag_t* tag); extern void armci_rcv_vector_data(int p, request_header_t* msginfo, armci_giov_t dr[], int len); #if !defined(LAPI) extern void armci_wait_for_server(); extern void armci_start_server(); extern void armci_transport_cleanup(); extern int armci_send_req_msg(int proc, void *buf, int bytes,int tag); extern void armci_WriteToDirect(int proc, request_header_t* msginfo, void *buf); extern char *armci_ReadFromDirect(int proc, request_header_t *msginfo, int len); extern void armci_init_connections(); extern void *armci_server_code(void *data); extern void armci_rcv_req(void *mesg, void *phdr, void *pdescr, void *pdata, int *buflen); extern void armci_client_connect_to_servers(); extern void armci_data_server(void *mesg); extern void armci_server_initial_connection(); extern void armci_call_data_server(); #endif #ifdef SOCKETS extern void armci_ReadStridedFromDirect(int proc, request_header_t* msginfo, void *ptr, int strides, int stride_arr[], int count[]); extern void armci_WriteStridedToDirect(int proc, request_header_t* msginfo, void *ptr, int strides, int stride_arr[], int count[]); extern void armci_serv_quit(); extern int armci_send_req_msg_strided(int proc, request_header_t *msginfo, char *ptr, int strides, int stride_arr[],int count[]); extern void armci_server_goodbye(request_header_t* msginfo); #endif #ifdef MPI_SPAWN extern void armci_serv_quit(); extern void armci_server_goodbye(request_header_t* msginfo); #endif #ifdef HITACHI extern void armci_server_goodbye(request_header_t* msginfo); extern void armci_serv_quit(); #endif extern void armci_server_ipc(request_header_t* msginfo, void* descr, void* buffer, int buflen); #ifdef PIPE_BUFSIZE extern void armci_pipe_prep_receive_strided(request_header_t *msginfo,char *buf, int strides, int stride_arr[], int count[], int bufsize); extern void armci_pipe_receive_strided(request_header_t* msginfo, void *ptr, int stride_arr[], int count[], int strides); extern void armci_pipe_send_req(int proc, void *buf, int bytes); #endif extern void armci_rcv_strided_data_bypass_both(int, request_header_t*,void*, int*, int); extern int armci_rem_get(int proc, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, armci_ihdl_t nb_handle,void *mhloc,void *mhrem); #if defined(ALLOW_PIN) && defined(VAPI) extern int armci_two_phase_send(int proc,void *src_ptr,int src_stride_arr[], void *dst_ptr,int dst_stride_arr[],int count[], int stride_levels,void ** context_ptr,armci_ihdl_t nbhandle, ARMCI_MEMHDL_T *mhloc); extern int armci_two_phase_get(int proc, void*src_ptr, int src_stride_arr[], void*dst_ptr,int dst_stride_arr[], int count[], int stride_levels, void**context_ptr, armci_ihdl_t nbhandle, ARMCI_MEMHDL_T *mhloc); #endif #endif ga-5-3/armci/src-gemini/message.c0000640005473000001440000017750211643667455015551 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: message.c,v 1.58.6.4 2007-04-24 10:08:26 vinod Exp $ */ #if defined(BGML) # include "bgml.h" #elif defined(PVM) # include #elif defined(TCGMSG) # include #else # ifndef MPI # define MPI # endif # include #endif #include "message.h" #include "armcip.h" #include "copy.h" #if HAVE_STDIO_H # include #endif #if HAVE_ASSERT_H # include #endif #ifdef _POSIX_PRIORITY_SCHEDULING #ifndef HITACHI # include #endif #endif #include "armci.h" #include "acc.h" #define DEBUG_ 0 #if defined(SYSV) || defined(MMAP) ||defined (WIN32) # include "shmem.h" #endif /* global operations are use buffer size of BUF_SIZE doubles */ #define BUF_SIZE (4*2048) #define INFO_BUF_SIZE (BUF_SIZE*sizeof(BUF_SIZE) - sizeof(double)) #undef EMPTY #define EMPTY 0 #define FULL 1 static double *work=NULL; static long *lwork = NULL; static long long *llwork = NULL; static int *iwork = NULL; static float *fwork = NULL; static int _armci_gop_init=0; /* tells us if we have a buffers allocated */ static int _armci_gop_shmem =0; /* tells us to use shared memory for gops */ extern void armci_util_wait_int(volatile int *, int , int ); static int empty=EMPTY,full=FULL; #if !defined(SGIALTIX) && defined(SYSV) || defined(MMAP) || defined(WIN32) static void **ptr_arr=NULL; #endif typedef struct { union { volatile int flag; double dummy[16]; }a; union { volatile int flag; double dummy[16]; }b; double array[BUF_SIZE]; } bufstruct; static bufstruct *_gop_buffer; #define GOP_BUF(p) (_gop_buffer+((p)-armci_master)) /*\ macro to set a flag includes mem barrier to assure that flag is not set * before any outstanding writes complete \*/ #ifdef NEED_MEM_SYNC # ifdef AIX # define SET_SHM_FLAG(_flg,_val) _clear_lock((int *)(_flg),_val); # elif defined(NEC) # define SET_SHM_FLAG(_flg,_val) MEM_FENCE; *(_flg)=(_val) # elif defined(__ia64) # if defined(__GNUC__) && !defined (__INTEL_COMPILER) # define SET_SHM_FLAG(_flg,_val)\ __asm__ __volatile__ ("mf" ::: "memory"); *(_flg)=(_val) # else /* Intel Compiler */ extern void _armci_ia64_mb(); # define SET_SHM_FLAG(_flg,_val)\ _armci_ia64_mb(); *(_flg)=(_val); # endif # elif defined(MACX) # if defined(__GNUC__) # define SET_SHM_FLAG(_flg,_val)\ *(_flg)=(_val);__asm__ __volatile__ ("isync" ::: "memory") # endif # endif #endif #ifndef SET_SHM_FLAG # define SET_SHM_FLAG(_flg,_val) *(_flg)=_val; #endif /*\ * Variables/structures for use in Barrier and for Binomial tree \*/ #if HAVE_MATH_H # include #endif int barr_switch; static int LnB=0,powof2nodes,Lp2; typedef struct { volatile int flag1; double dum[16]; volatile int flag2; } barrier_struct; barrier_struct *_bar_buff; #define BAR_BUF(p) (_bar_buff+((p))) void **barr_snd_ptr,**barr_rcv_ptr; int _armci_barrier_init=0; int _armci_barrier_shmem=0; /*\ * Tree generation code \*/ static void _dfs_bintree_parse(int *idlist, int index, int max, int *result) { int left = (int)2*index+1; int right = (int) 2*index+2; static int pos=0; int r_end,l_end; l_end=pos++; result[pos++]=idlist[index]; if(leftarray; /* each process finds its place */ GOP_BUF(armci_me)->a.flag=EMPTY; /* initially buffer is empty */ GOP_BUF(armci_me)->b.flag=EMPTY; /* initially buffer is empty */ if(armci_me == armci_master ){ GOP_BUF(armci_clus_last+1)->a.flag=EMPTY;/*initially buffer is empty*/ GOP_BUF(armci_clus_last+2)->a.flag=EMPTY;/*initially buffer is empty*/ GOP_BUF(armci_clus_last+1)->b.flag=EMPTY;/*initially buffer is empty*/ GOP_BUF(armci_clus_last+2)->b.flag=EMPTY;/*initially buffer is empty*/ } _armci_gop_shmem = 1; } #endif /*stuff needed for barrier and binomial bcast/reduce*/ #ifdef LAPI if(!_armci_barrier_shmem){ int size = 2*sizeof(int); /*allocate memory to send/rcv data*/ barr_snd_ptr = (void **)malloc(sizeof(void *)*armci_nproc); barr_rcv_ptr = (void **)malloc(sizeof(void *)*armci_nproc); if(PARMCI_Malloc(barr_snd_ptr,size))armci_die("malloc barrinit failed",0); if(PARMCI_Malloc(barr_rcv_ptr,size))armci_die("malloc barrinit failed",0); if(barr_rcv_ptr[armci_me]==NULL || barr_snd_ptr[armci_me]==NULL) armci_die("problems in malloc barr_init",0); powof2nodes=1; LnB = floor(log(armci_nclus)/log(2))+1; if(pow(2,LnB-1)-1) _armci_dummy_work *=DUMMY_INIT; if(_armci_dummy_work>(double)armci_msg_nproc())_armci_dummy_work=DUMMY_INIT; } /***************************Barrier Code*************************************/ void armci_msg_barr_init(){ #if defined(SYSV) || defined(MMAP) || defined(WIN32) int size=sizeof(barrier_struct)*armci_clus_info[armci_clus_me].nslave; char *tmp; void **ptr_arr; barr_switch=0; /*First allocate space for flags*/ ptr_arr = (void**)malloc(armci_nproc*sizeof(void*)); if(armci_me==armci_master) size = size+128; else size=0; PARMCI_Malloc(ptr_arr, size); tmp = (char*)ptr_arr[armci_master]; size=2*sizeof(int); if(!tmp)armci_die("allocate barr shm failed",0); _bar_buff=(barrier_struct *)tmp; SET_SHM_FLAG(&(BAR_BUF(armci_me-armci_master)->flag1),empty); SET_SHM_FLAG(&(BAR_BUF(armci_me-armci_master)->flag2),empty); /*allocate memory to send/rcv data*/ barr_snd_ptr = (void **)malloc(sizeof(void *)*armci_nproc); barr_rcv_ptr = (void **)malloc(sizeof(void *)*armci_nproc); if(PARMCI_Malloc(barr_snd_ptr,size))armci_die("malloc barr_init failed",0); if(PARMCI_Malloc(barr_rcv_ptr,size))armci_die("malloc barr_init failed",0); if(barr_rcv_ptr[armci_me]==NULL || barr_snd_ptr[armci_me]==NULL) armci_die("problems in malloc barr_init",0); /*we have to figure if we have power of ,two nodes*/ powof2nodes=1; LnB = (int)floor(log(armci_nclus)/log(2))+1; if(pow(2,LnB-1)flag1,FULL,100000); SET_SHM_FLAG(&(BAR_BUF(i)->flag1),empty); } if(armci_nclus>1){ last = ((int)pow(2,(LnB-1)))^armci_clus_me; if(last>=0 && lastarmci_clus_me){ /*the pow2 set of procs*/ if(last=0 && next armci_me){ armci_msg_snd(ARMCI_TAG, srcp,4,next_node); armci_msg_rcv(ARMCI_TAG, dstn,4,NULL,next_node); } else{ /*would we gain anything by doing a snd,rcv instead of rcv,snd*/ armci_msg_rcv(ARMCI_TAG, dstn,4,NULL,next_node); armci_msg_snd(ARMCI_TAG, srcp,4,next_node); } armci_util_wait_int((volatile int *)dstn,barr_count,100000); } } if(last1*/ for(i=1;iflag2),full); } else { /*if not master, partake in the smp barrier,only*/ i=armci_me-armci_master; SET_SHM_FLAG(&(BAR_BUF(i)->flag1),full); armci_util_wait_int(&BAR_BUF(i)->flag2,FULL,100000); SET_SHM_FLAG(&(BAR_BUF(i)->flag2),empty); } } #endif /*barrier enabled only for lapi*/ void parmci_msg_barrier() { #ifdef BGML bgml_barrier (3); /* this is always faster than MPI_Barrier() */ #elif defined(MPI) MPI_Barrier(ARMCI_COMM_WORLD); # elif defined(PVM) pvm_barrier(mp_group_name, armci_nproc); # elif defined(LAPI) #if !defined(NEED_MEM_SYNC) if(_armci_barrier_init) _armci_msg_barrier(); else #endif { tcg_synch(ARMCI_TAG); } # else { tcg_synch(ARMCI_TAG); } # endif } /***********************End Barrier Code*************************************/ void armci_msg_init(int *argc, char ***argv) { #if defined(TCGMSG) if (!tcg_ready()) { tcg_pbegin(argc,argv); } #elif defined(BGML) /* empty */ #elif defined(MPI) int flag=0; MPI_Initialized(&flag); if (!flag) { # if defined(DCMF) || defined(MPI_MT) int provided; MPI_Init_thread(argc, argv, MPI_THREAD_MULTIPLE, &provided); # else MPI_Init(argc, argv); # endif } if (!PARMCI_Initialized()) { MPI_Comm_dup(MPI_COMM_WORLD, &ARMCI_COMM_WORLD); } #endif } int armci_msg_me() { #ifdef BGML return BGML_Messager_rank(); #elif defined(DCMF) return DCMF_Messager_rank(); #elif defined(MPI) static int counter = 0; if (counter == 0) { int me; MPI_Comm_rank(ARMCI_COMM_WORLD, &me); armci_me = me; counter = 1; } return armci_me; #elif defined(PVM) return(pvm_getinst(mp_group_name,pvm_mytid())); #else return (int)tcg_nodeid(); #endif } int armci_msg_nproc() { #ifdef BGML return BGML_Messager_size(); #elif defined(DCMF) return DCMF_Messager_size(); #elif defined(MPI) static int counter = 0; if (counter == 0) { int nproc; MPI_Comm_size(ARMCI_COMM_WORLD, &nproc); armci_nproc = nproc; counter = 1; } return armci_nproc; #elif defined(PVM) return(pvm_gsize(mp_group_name)); #else return (int)tcg_nnodes(); #endif } #ifdef CRAY_YMP #define BROKEN_MPI_ABORT #endif #ifndef PVM double armci_timer() { #ifdef BGML return BGML_Timer(); #elif defined(DCMF) return DCMF_Timer(); #elif defined(MPI) return MPI_Wtime(); #else return tcg_time(); #endif } #endif void armci_msg_abort(int code) { #ifdef BGML fprintf(stderr,"ARMCI aborting [%d]\n", code); #elif defined(DCMF) fprintf(stderr,"ARMCI aborting [%d]\n", code); #elif defined(MPI) # ifndef BROKEN_MPI_ABORT MPI_Abort(ARMCI_COMM_WORLD,code); # endif #elif defined(PVM) char error_msg[25]; sprintf(error_msg, "ARMCI aborting [%d]", code); pvm_halt(); #else tcg_error("ARMCI aborting",(long)code); #endif fprintf(stderr,"%d:aborting\n",armci_me); /* trap for broken abort in message passing libs */ _exit(1); } void armci_msg_finalize() { #if defined(TCGMSG) tcg_pend(); #elif defined(MPI) MPI_Finalize(); #endif } void armci_msg_bintree(int scope, int* Root, int *Up, int *Left, int *Right) { int root, up, left, right, index, nproc; if(scope == SCOPE_NODE){ root = armci_clus_info[armci_clus_me].master; nproc = armci_clus_info[armci_clus_me].nslave; index = armci_me - root; up = (index-1)/2 + root; if( up < root) up = -1; left = 2*index + 1 + root; if(left >= root+nproc) left = -1; right = 2*index + 2 + root; if(right >= root+nproc)right = -1; }else if(scope ==SCOPE_MASTERS){ root = armci_clus_info[0].master; nproc = armci_nclus; if(armci_me != armci_master){up = -1; left = -1; right = -1; } else{ index = armci_clus_me - root; up = (index-1)/2 + root; up = ( up < root)? -1: armci_clus_info[up].master; left = 2*index + 1 + root; left = ( left >= root+nproc)? -1: armci_clus_info[left].master; right = 2*index + 2 + root; right =( right >= root+nproc)? -1: armci_clus_info[right].master; } }else{ root = 0; nproc = armci_nproc; index = armci_me - root; up = (index-1)/2 + root; if( up < root) up = -1; left = 2*index + 1 + root; if(left >= root+nproc) left = -1; right = 2*index + 2 + root; if(right >= root+nproc)right = -1; } *Up = up; *Left = left; *Right = right; *Root = root; } /*\ root broadcasts to everyone else \*/ void armci_msg_bcast_scope(int scope, void *buf, int len, int root) { int up, left, right, Root; if(!buf)armci_die("armci_msg_bcast: NULL pointer", len); #ifdef BGML BGTr_Bcast(root, buf, len, 3); #else armci_msg_bintree(scope, &Root, &up, &left, &right); if(root !=Root){ if(armci_me == root) armci_msg_snd(ARMCI_TAG, buf,len, Root); if(armci_me ==Root) armci_msg_rcv(ARMCI_TAG, buf, len, NULL, root); } /* printf("%d: scope=%d left=%d right=%d up=%d\n",armci_me, scope, left, right, up);*/ if(armci_me != Root && up!=-1) armci_msg_rcv(ARMCI_TAG, buf, len, NULL, up); if (left > -1) armci_msg_snd(ARMCI_TAG, buf, len, left); if (right > -1) armci_msg_snd(ARMCI_TAG, buf, len, right); #endif } /*\ shared memory based broadcast for a single SMP node \*/ void armci_smp_bcast(void *x, int n , int root) { int ndo, len,i, bufsize = BUF_SIZE*sizeof(double); static int bufid=1; if(armci_clus_info[armci_clus_me].nslave<2) return; /* nothing to do */ if(!x)armci_die("armci_msg_bcast: NULL pointer", n); /* enable or balance pipeline for messages comparable to bufsize */ if((n>bufsize/2) && (n <(2*bufsize-64))){ bufsize = n/2; bufsize>>=3; bufsize<<=3; } while ((ndo = (n<=bufsize) ? n : bufsize)) { len = ndo; if(armci_me==root){ /* wait for the flag protecting the buffer to clear */ armci_util_wait_int(&(GOP_BUF(armci_clus_last+bufid)->a.flag),EMPTY,100); SET_SHM_FLAG(&(GOP_BUF(armci_clus_last+bufid)->a.flag),full); #if 0 for(i=armci_clus_first; i <= armci_clus_last; i++) if(i!=root)armci_util_wait_int(&GOP_BUF(i)->b.flag, EMPTY, 100); armci_copy(x,GOP_BUF(armci_clus_last+bufid+1)->array,len); for(i=armci_clus_first; i <= armci_clus_last; i++) if(i!=root) GOP_BUF(i)->b.flag=FULL; #else armci_copy(x,GOP_BUF(armci_clus_last+bufid)->array,len); for(i=armci_clus_first; i <= armci_clus_last; i++) if(i!=root){ armci_util_wait_int(&GOP_BUF(i)->b.flag, EMPTY, 100); SET_SHM_FLAG(&(GOP_BUF(i)->b.flag),full); } #endif }else{ armci_util_wait_int(&GOP_BUF(armci_me)->b.flag, FULL, 100); armci_copy(GOP_BUF(armci_clus_last+bufid)->array,x,len); SET_SHM_FLAG(&(GOP_BUF(armci_me)->b.flag),empty); } n -=ndo; x = len + (char*)x; bufid = (bufid)%2 +1; /* since root waited for everybody to check in the previous buffer is free*/ if(armci_me==root){ SET_SHM_FLAG(&(GOP_BUF(armci_clus_last+bufid)->a.flag),empty); } } } /*\ shared memory based broadcast for a single SMP node out of shmem buffer \*/ void armci_smp_buf_bcast(void *x, int n, int root, void *shmbuf ) { int i, nslave = armci_clus_info[armci_clus_me].nslave; if(nslave<2){ armci_copy(shmbuf,x,n); return; /* nothing to do */ } if(!x)armci_die("armci_msg_bcast: NULL pointer", n); if(!shmbuf)armci_die("armci_msg_bcast: NULL pointer", n); if(armci_me==root){ /* notify others that the data in buffer is ready */ for(i=armci_clus_first; i <= armci_clus_last; i++) if(i!=root){ armci_util_wait_int(&GOP_BUF(i)->b.flag, EMPTY, 100); GOP_BUF(i)->b.flag=FULL; } /* root also needs to copy */ armci_copy(shmbuf,x,n); /* wait until everybody is finished -- can reclaim buffer */ for(i=armci_clus_first; i <= armci_clus_last; i++) if(i!=root)armci_util_wait_int(&GOP_BUF(i)->b.flag, EMPTY,100000); }else{ /* spin until data in buffer is ready */ armci_util_wait_int(&GOP_BUF(armci_me)->b.flag , FULL, 100000); armci_copy(shmbuf,x,n); /* copy data */ GOP_BUF(armci_me)->b.flag = EMPTY; /* indicate we are done */ } } void _armci_msg_binomial_bcast(void *buf, int len, int root){ int Root = armci_master; int nslave = armci_clus_info[armci_clus_me].nslave; int i,next_node,next; /* int my_rank,root_rank,next_rank; */ /* inter-node operation between masters */ if(root !=armci_clus_info[0].master){ Root = armci_clus_info[0].master; if(armci_me == root) armci_msg_snd(ARMCI_TAG, buf,len, Root); if(armci_me ==Root) armci_msg_rcv(ARMCI_TAG, buf, len, NULL, root); root = Root; Root = armci_master; } if(armci_nclus>1 &&armci_me==armci_master){/*the internode bcast, first*/ /*first do the recv*/ int rcv_proc=armci_clus_me,flag=1,diff=1; if(armci_me!=root){ while(!(rcv_proc & flag)){ diff=diff<<1; flag=flag<<1; } rcv_proc = armci_clus_info[armci_clus_me-diff].master; armci_msg_rcv(ARMCI_TAG, buf,len,NULL,rcv_proc); /*printf("\n%d: recv from %d \n",armci_me,rcv_proc);fflush(stdout);*/ } else diff = Lp2; /*printf("\n%d: %d diff>>1 = %d\n",armci_me,Lp2,diff>>1);*/ for(i=diff>>1;i>=1;i=i>>1){ next=i^armci_clus_me; if(next>=0 && next1)armci_msg_bcast_scope(SCOPE_MASTERS, buf, len, root); else Root = root; /* intra-node operation */ #if 1 if(_armci_gop_shmem && nslave<33) armci_smp_bcast(buf, len, Root); else #endif armci_msg_bcast_scope(SCOPE_NODE, buf, len, Root); } #endif void armci_msg_brdcst(void* buffer, int len, int root) { if(!buffer)armci_die("armci_msg_brdcast: NULL pointer", len); #ifdef BGML BGTr_Bcast(root, buffer, len, PCLASS); # elif defined(MPI) MPI_Bcast(buffer, len, MPI_CHAR, root, ARMCI_COMM_WORLD); # elif defined(PVM) armci_msg_bcast(buffer, len, root); # else { long ttag=ARMCI_TAG, llen=len, rroot=root; tcg_brdcst(ttag, buffer, llen, rroot); } # endif } void armci_msg_snd(int tag, void* buffer, int len, int to) { # ifdef MPI MPI_Send(buffer, len, MPI_CHAR, to, tag, ARMCI_COMM_WORLD); # elif defined(PVM) pvm_psend(pvm_gettid(mp_group_name, to), tag, buffer, len, PVM_BYTE); # elif defined(BGML) /* We don't actually used armci_msg_snd in ARMCI. we use optimized * collectives where * armci_msg_snd is used. If you build Global Arrays, the MPI flag is * set, so that * will work fine */ armci_die("bgl shouldn't use armci_msg_snd", armci_me); # else long ttag=tag, llen=len, tto=to, block=1; tcg_snd(ttag, buffer, llen, tto, block); # endif } /*\ receive message of specified tag from proc and get its len if msglen!=NULL \*/ void armci_msg_rcv(int tag, void* buffer, int buflen, int *msglen, int from) { # ifdef MPI MPI_Status status; MPI_Recv(buffer, buflen, MPI_CHAR, from, tag, ARMCI_COMM_WORLD, &status); if(msglen) MPI_Get_count(&status, MPI_CHAR, msglen); # elif defined(PVM) int src, rtag,mlen; pvm_precv(pvm_gettid(mp_group_name, from), tag, buffer, buflen, PVM_BYTE, &src, &rtag, &mlen); if(msglen)*msglen=mlen; #elif defined(BGML) armci_die("bgl shouldn't use armci_msg_rcv", armci_me); # else long ttag=tag, llen=buflen, mlen, ffrom=from, sender, block=1; tcg_rcv(ttag, buffer, llen, &mlen, ffrom, &sender, block); if(msglen)*msglen = (int)mlen; # endif } int armci_msg_rcvany(int tag, void* buffer, int buflen, int *msglen) { #if defined(MPI) int ierr; MPI_Status status; ierr = MPI_Recv(buffer, buflen, MPI_CHAR, MPI_ANY_SOURCE, tag, ARMCI_COMM_WORLD, &status); if(ierr != MPI_SUCCESS) armci_die("armci_msg_rcvany: Recv failed ", tag); if(msglen)if(MPI_SUCCESS!=MPI_Get_count(&status, MPI_CHAR, msglen)) armci_die("armci_msg_rcvany: count failed ", tag); return (int)status.MPI_SOURCE; # elif defined(PVM) int src, rtag,mlen; pvm_precv(-1, tag, buffer, buflen, PVM_BYTE, &src, &rtag, &mlen); if(msglen)*msglen=mlen; return(pvm_getinst(mp_group_name,src)); # elif defined (BGML) armci_die("bgl shouldn't use armci_msg_rcvany", armci_me); # else long ttag=tag, llen=buflen, mlen, ffrom=-1, sender, block=1; tcg_rcv(ttag, buffer, llen, &mlen, ffrom, &sender, block); if(msglen)*msglen = (int)mlen; return (int)sender; # endif } /*\ cluster master broadcasts to everyone else in the same cluster \*/ void armci_msg_clus_brdcst(void *buf, int len) { int root, up, left, right; int tag=ARMCI_TAG, lenmes; armci_msg_bintree(SCOPE_NODE, &root, &up, &left, &right); if(armci_me != root) armci_msg_rcv(tag, buf, len, &lenmes, up); if (left > -1) armci_msg_snd(tag, buf, len, left); if (right > -1) armci_msg_snd(tag, buf, len, right); } /*\ reduce operation for long \*/ static void ldoop(int n, char *op, long *x, long* work) { if (strncmp(op,"+",1) == 0) while(n--) *x++ += *work++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ *= *work++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register long x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register long x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MIN(x1, x2); x++; work++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x |= *work; x++; work++; } else armci_die("ldoop: unknown operation requested", n); } /*\ reduce operation for long x= op(work,work2) \*/ static void ldoop2(int n, char *op, long *x, long* work, long* work2) { if (strncmp(op,"+",1) == 0) while(n--) *x++ = *work++ + *work2++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ = *work++ * *work2++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register long x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MAX(x1, x2); x++; work++; work2++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register long x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MIN(x1, x2); x++; work++; work2++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x = *work | *work2; x++; work++; work2++; } else armci_die("ldoop2: unknown operation requested", n); } /*\ reduce operation for long long \*/ static void lldoop(int n, char *op, long long *x, long long* work) { if (strncmp(op,"+",1) == 0) while(n--) *x++ += *work++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ *= *work++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register long long x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register long long x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MIN(x1, x2); x++; work++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x |= *work; x++; work++; } else armci_die("lldoop: unknown operation requested", n); } /*\ reduce operation for long long x= op(work,work2) \*/ static void lldoop2(int n, char *op, long long *x, long long* work, long long* work2) { if (strncmp(op,"+",1) == 0) while(n--) *x++ = *work++ + *work2++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ = *work++ * *work2++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register long long x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MAX(x1, x2); x++; work++; work2++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register long long x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MIN(x1, x2); x++; work++; work2++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x = *work | *work2; x++; work++; work2++; } else armci_die("ldoop2: unknown operation requested", n); } /*\ reduce operation for int \*/ static void idoop(int n, char *op, int *x, int* work) { if (strncmp(op,"+",1) == 0) while(n--) *x++ += *work++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ *= *work++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register int x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register int x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MIN(x1, x2); x++; work++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x |= *work; x++; work++; } else armci_die("idoop: unknown operation requested", n); } /*\ reduce operation for int x= op(work,work2) \*/ static void idoop2(int n, char *op, int *x, int* work, int* work2) { if (strncmp(op,"+",1) == 0) while(n--) *x++ = *work++ + *work2++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ = *work++ * *work2++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register int x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MAX(x1, x2); x++; work++; work2++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register int x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MIN(x1, x2); x++; work++; work2++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x = *work | *work2; x++; work++; work2++; } else armci_die("idoop2: unknown operation requested", n); } /*\ reduce operation for double \*/ static void ddoop(int n, char* op, double* x, double* work) { if (strncmp(op,"+",1) == 0){ if(n>63) FORT_DADD(&n,x,work); else while(n--) *x++ += *work++; }else if (strncmp(op,"*",1) == 0){ if(n>63) FORT_DMULT(&n,x,work); else while(n--) *x++ *= *work++; }else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register double x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register double x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MIN(x1, x2); x++; work++; } else armci_die("ddoop: unknown operation requested", n); } /*\ reduce operation for double x= op(work,work2) \*/ static void ddoop2(int n, char *op, double *x, double* work, double* work2) { if (strncmp(op,"+",1) == 0){ if(n>63) FORT_DADD2(&n,x,work,work2); else while(n--) *x++ = *work++ + *work2++; }else if (strncmp(op,"*",1) == 0){ if(n>63) FORT_DMULT2(&n,x,work,work2); while(n--) *x++ = *work++ * *work2++; }else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register double x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MAX(x1, x2); x++; work++; work2++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register double x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MIN(x1, x2); x++; work++; work2++; } else armci_die("ddoop2: unknown operation requested", n); } /*\ reduce operation for float \*/ static void fdoop(int n, char* op, float* x, float* work) { if (strncmp(op,"+",1) == 0) while(n--) *x++ += *work++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ *= *work++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register float x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register float x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MIN(x1, x2); x++; work++; } else armci_die("fdoop: unknown operation requested", n); } /*\ reduce operation for float x= op(work,work2) \*/ static void fdoop2(int n, char *op, float *x, float* work, float* work2) { if (strncmp(op,"+",1) == 0) while(n--) *x++ = *work++ + *work2++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ = *work++ * *work2++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register float x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MAX(x1, x2); x++; work++; work2++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register float x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MIN(x1, x2); x++; work++; work2++; } else armci_die("fdoop2: unknown operation requested", n); } /*\ combine array of longs/ints accross all processes \*/ void armci_msg_gop_scope(int scope, void *x, int n, char* op, int type) { int root, up, left, right, size; int tag=ARMCI_TAG; int ndo, len, lenmes, orign =n, ratio; void *origx =x; if(!x)armci_die("armci_msg_gop: NULL pointer", n); if(work==NULL)_allocate_mem_for_work(); #ifdef BGML BGML_Dt dt; BGML_Op theop; if(n > 0 && (strncmp(op, "+", 1) == 0) && (type==ARMCI_INT || type==ARMCI_DOUBLE)) { theop=BGML_SUM; if(type==ARMCI_INT) dt=BGML_SIGNED_INT; else if(type==ARMCI_DOUBLE) dt=BGML_DOUBLE; BGTr_Allreduce(origx, x, n, dt, theop, -1, PCLASS); } else if(n > 0 && (strncmp(op, "max", 3) == 0) && (type==ARMCI_INT || type==ARMCI_DOUBLE)) { theop=BGML_MAX; if(type==ARMCI_INT) dt=BGML_SIGNED_INT; else if(type==ARMCI_DOUBLE) dt=BGML_DOUBLE; BGTr_Allreduce(origx, x, n, dt, theop, -1, PCLASS); } else if(n > 0 && (strncmp(op, "min", 3) == 0) && (type==ARMCI_INT || type==ARMCI_DOUBLE)) { theop=BGML_MIN; if(type==ARMCI_INT) dt=BGML_SIGNED_INT; else if(type==ARMCI_DOUBLE) dt=BGML_DOUBLE; BGTr_Allreduce(origx, x, n, dt, theop, -1, PCLASS); } else #endif { armci_msg_bintree(scope, &root, &up, &left, &right); if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); ratio = sizeof(double)/size; while ((ndo = (n<=BUF_SIZE*ratio) ? n : BUF_SIZE*ratio)) { len = lenmes = ndo*size; if (left > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, left); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op,(long long*)x,llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (right > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, right); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op,(long long*)x,llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (armci_me != root && up!=-1) armci_msg_snd(tag, x, len, up); n -=ndo; x = len + (char*)x; } /* Now, root broadcasts the result down the binary tree */ len = orign*size; armci_msg_bcast_scope(scope, origx, len, root); } } void armci_msg_reduce_scope(int scope, void *x, int n, char* op, int type) { int root, up, left, right, size; int tag=ARMCI_TAG; int ndo, len, lenmes, ratio; if(!x)armci_die("armci_msg_gop: NULL pointer", n); if(work==NULL)_allocate_mem_for_work(); armci_msg_bintree(scope, &root, &up, &left, &right); if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); ratio = sizeof(double)/size; while ((ndo = (n<=BUF_SIZE*ratio) ? n : BUF_SIZE*ratio)) { len = lenmes = ndo*size; if (left > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, left); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op,(long long*)x,llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (right > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, right); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op,(long long*)x,llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (armci_me != root && up!=-1) armci_msg_snd(tag, x, len, up); n -=ndo; x = len + (char*)x; } } static void gop(int type, int ndo, char* op, void *x, void *work) { if(type==ARMCI_INT) idoop(ndo, op, (int*)x, (int*)work); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, (long*)work); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op, (long long*)x, (long long*)work); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, (float*)work); else ddoop(ndo, op, (double*)x, (double*)work); } static void gop2(int type, int ndo, char* op, void *x, void *work, void *work2) { #if 0 int size; if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); armci_copy(work2,x,ndo*size); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, (int*)work); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, (long*)work); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op, (long long*)x, (long long*)work); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, (float*)work); else ddoop(ndo, op, (double*)x, (double*)work); #else if(type==ARMCI_INT) idoop2(ndo, op, (int*)x, (int*)work, (int*)work2); else if(type==ARMCI_LONG)ldoop2(ndo,op,(long*)x,(long*)work,(long*)work2); else if(type==ARMCI_LONG_LONG) lldoop2(ndo,op,(long long*)x,(long long*)work,(long long*)work2); else if(type==ARMCI_FLOAT)fdoop2(ndo,op,(float*)x,(float*)work,(float*)work2); else ddoop2(ndo, op, (double*)x, (double*)work,(double*)work2); #endif } /*\ shared memory based reduction for a single SMP node \*/ static void armci_smp_reduce(void *x, int n, char* op, int type) { int root, up, left, right, size; int ndo, len, lenmes, ratio; int nslave = armci_clus_info[armci_clus_me].nslave; if(nslave<2) return; /* nothing to do */ if(!x)armci_die("armci_msg_gop: NULL pointer", n); armci_msg_bintree(SCOPE_NODE, &root, &up, &left, &right); if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); ratio = sizeof(double)/size; while ((ndo = (n<=BUF_SIZE*ratio) ? n : BUF_SIZE*ratio)) { len = lenmes = ndo*size; armci_util_wait_int(&GOP_BUF(armci_me)->a.flag, EMPTY, 100); #if 1 if(left<0 && right<0) armci_copy(x,GOP_BUF(armci_me)->array,len); /* version oblivious to the order of data arrival */ { int need_left = left >-1; int need_right = right >-1; int from, first =1, maxspin=100, count=0; bufstruct *b; while(need_left || need_right){ from =-1; if(need_left && GOP_BUF(left)->a.flag == FULL){ from =left; need_left =0; }else if(need_right && GOP_BUF(right)->a.flag == FULL) { from =right; need_right =0; } if(from != -1){ b = GOP_BUF(from); #if 1 if(armci_me == root) gop(type, ndo, op, x, b->array); else { if(first) gop2(type, ndo, op, GOP_BUF(armci_me)->array, b->array,x); else gop(type, ndo, op, GOP_BUF(armci_me)->array, b->array); } first =0; #else gop(type, ndo, op, GOP_BUF(armci_me)->array, b->array); #endif SET_SHM_FLAG(&( b->a.flag),empty); }else if((++count)array,len); /* this version requires a specific order of data arrival */ if (left >-1) { while(GOP_BUF(left)->a.flag != FULL) cpu_yield(); gop(type, ndo, op, GOP_BUF(armci_me)->array, GOP_BUF(left)->array); SET_SHM_FLAG(&( GOP_BUF(left)->a.flag),empty); } if (right >-1 ) { while(GOP_BUF(right)->a.flag != FULL) cpu_yield(); gop(type, ndo, op, GOP_BUF(armci_me)->array, GOP_BUF(right)->array); GOP_BUF(right)->a.flag = EMPTY; } #endif if (armci_me != root ) { SET_SHM_FLAG(&(GOP_BUF(armci_me)->a.flag),full); } #if 0 else /* NOTE: this copy can be eliminated in a cluster configuration */ armci_copy(GOP_BUF(armci_me)->array,x,len); #endif n -=ndo; x = len + (char*)x; } } void _armci_msg_binomial_reduce(void *x, int n, char* op, int type){ int root = armci_clus_info[0].master; int i,next_node,next; int size, ratio, ndo, lenmes,len; /* int my_rank,root_rank,next_rank; */ if(work==NULL)_allocate_mem_for_work(); if(armci_me!=armci_master)return; if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); ratio = sizeof(double)/size; while ((ndo = (n<=BUF_SIZE*ratio) ? n : BUF_SIZE*ratio)) { int snd_proc=armci_clus_me,flag=1,diff=1; len = lenmes = ndo*size; if(armci_me!=root){ while(!(snd_proc & flag)){ diff=diff<<1; flag=flag<<1; } snd_proc = armci_clus_info[armci_clus_me-diff].master; } else diff = Lp2; /*printf("\n%d: %d diff>>1 = %d\n",armci_me,Lp2,diff>>1);*/ for(i=diff>>1;i>=1;i=i>>1){ next=i^armci_clus_me; if(next>=0 && next1){ #ifdef LAPI if(_armci_gop_init) _armci_msg_binomial_reduce(x,n,op,type); else #endif armci_msg_reduce_scope(SCOPE_MASTERS, x, n, op, type); } } static void armci_msg_gop2(void *x, int n, char* op, int type) { int size, root=0; if(work==NULL)_allocate_mem_for_work(); if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); #ifdef BGML /*optimize what we can at the message layer */ void *origx=x; BGML_Dt dt; BGML_Op rop; if(n>0 && (strncmp(op, "+", 1) == 0)) { rop=BGML_SUM; if(type == ARMCI_INT) { dt=BGML_SIGNED_INT; BGTr_Allreduce(origx, x, n, dt, rop, -1, 3); } else if(type == ARMCI_LONG || type == ARMCI_LONG_LONG) { armci_msg_reduce(x, n, op, type); armci_msg_bcast(x, size*n, root); /* dt=BGML_UNSIGNED_LONG; */ /* BGTr_Allreduce(origx, x, n, dt, rop, -1, 3);*/ } else if(type == ARMCI_DOUBLE) { dt=BGML_DOUBLE; BGTr_Allreduce(origx, x, n, dt, rop, -1, 3); } else if(type == ARMCI_FLOAT) { armci_msg_reduce(x, n, op, type); armci_msg_bcast(x, size*n, root); } else { fprintf(stderr,"Unknown data type\n"); exit(1); } } else if(n>0 && ((strncmp(op, "max", 3) == 0) || (strncmp(op, "min", 3) ==0 ))) { if(strncmp(op, "max", 3) == 0) rop=BGML_MAX; else rop=BGML_MIN; if(type == ARMCI_INT) dt=BGML_SIGNED_INT; else if(type == ARMCI_DOUBLE) dt=BGML_DOUBLE; else if(type == ARMCI_FLOAT) dt=BGML_FLOAT; else if(type == ARMCI_LONG) dt=BGML_SIGNED_LONG; else if(type == ARMCI_LONG_LONG) { armci_msg_reduce(x, n, op, type); armci_msg_bcast(x, size*n, root); } else { fprintf(stderr,"Unknown data type\n"); exit(1); } if(type != ARMCI_LONG_LONG) BGTr_Allreduce(origx, x, n, dt, rop, -1, 3); } else #endif { /* brackets needed for final gelse clause of bgml */ armci_msg_reduce(x, n, op, type); armci_msg_bcast(x, size*n, root); } } static void armci_sel(int type, char *op, void *x, void* work, int n) { int selected=0; switch (type) { case ARMCI_INT: if(strncmp(op,"min",3) == 0){ if(*(int*)x > *(int*)work) selected=1; }else if(*(int*)x < *(int*)work) selected=1; break; case ARMCI_LONG: if(strncmp(op,"min",3) == 0){ if(*(long*)x > *(long*)work) selected=1; }else if(*(long*)x < *(long*)work) selected=1; break; case ARMCI_LONG_LONG: if(strncmp(op,"min",3) == 0){ if(*(long long*)x > *(long long*)work) selected=1; }else if(*(long long*)x < *(long long*)work) selected=1; break; case ARMCI_FLOAT: if(strncmp(op,"min",3) == 0){ if(*(float*)x > *(float*)work) selected=1; }else if(*(float*)x < *(float*)work) selected=1; break; default: if(strncmp(op,"min",3) == 0){ if(*(double*)x > *(double*)work) selected=1; }else if(*(double*)x < *(double*)work) selected=1; } if(selected)armci_copy(work,x, n); } /*\ global for op with extra info \*/ void armci_msg_sel_scope(int scope, void *x, int n, char* op, int type, int contribute) { int root, up, left, right; int tag=ARMCI_TAG; int len, lenmes, min; min = (strncmp(op,"min",3) == 0); if(!min && (strncmp(op,"max",3) != 0)) armci_die("armci_msg_gop_info: operation not supported ", 0); if(!x)armci_die("armci_msg_gop_info: NULL pointer", n); if(n>((int)INFO_BUF_SIZE))armci_die("armci_msg_gop_info: info too large",n); len = lenmes = n; armci_msg_bintree(scope, &root, &up, &left, &right); if (left > -1) { /* receive into work if contributing otherwise into x */ if(contribute)armci_msg_rcv(tag, work, len, &lenmes, left); else armci_msg_rcv(tag, x, len, &lenmes, left); if(lenmes){ if(contribute) armci_sel(type, op, x, work, n); else contribute =1; /* now we got data to pass */ } } if (right > -1) { /* receive into work if contributing otherwise into x */ if(contribute) armci_msg_rcv(tag, work, len, &lenmes, right); else armci_msg_rcv(tag, x, len, &lenmes, right); if(lenmes){ if(contribute) armci_sel(type, op, x, work, n); else contribute =1; /* now we got data to pass */ } } if (armci_me != root){ if(contribute) armci_msg_snd(tag, x, len, up); else armci_msg_snd(tag, x, 0, up); /* send 0 bytes */ } /* Now, root broadcasts the result down the binary tree */ armci_msg_bcast_scope(scope, x, n, root); } /*\ combine array of longs/ints/doubles accross all processes \*/ #if defined(NEC) void armci_msg_igop(int *x, int n, char* op) { armci_msg_gop_scope(SCOPE_ALL,x, n, op, ARMCI_INT); } void armci_msg_lgop(long *x, int n, char* op) { armci_msg_gop_scope(SCOPE_ALL,x, n, op, ARMCI_LONG); } void armci_msg_llgop(long long *x, int n, char* op) { armci_msg_gop_scope(SCOPE_ALL,x, n, op, ARMCI_LONG_LONG); } void armci_msg_dgop(double *x, int n, char* op) { armci_msg_gop_scope(SCOPE_ALL,x, n, op, ARMCI_DOUBLE); } void armci_msg_fgop (float *x, int n, char* op) { armci_msg_gop_scope(SCOPE_ALL,x, n, op, ARMCI_FLOAT);} #else void armci_msg_igop(int *x, int n, char* op) { armci_msg_gop2(x, n, op, ARMCI_INT); } void armci_msg_lgop(long *x, int n, char* op) { armci_msg_gop2(x, n, op, ARMCI_LONG); } void armci_msg_llgop(long long *x, int n, char* op) { armci_msg_gop2(x, n, op, ARMCI_LONG_LONG); } void armci_msg_fgop(float *x, int n, char* op) { armci_msg_gop2(x, n, op, ARMCI_FLOAT); } void armci_msg_dgop(double *x, int n, char* op) { armci_msg_gop2(x, n, op, ARMCI_DOUBLE); } #endif /*\ add array of longs/ints within the same cluster node \*/ void armci_msg_clus_igop(int *x, int n, char* op) { armci_msg_gop_scope(SCOPE_NODE,x, n, op, ARMCI_INT); } void armci_msg_clus_lgop(long *x, int n, char* op) { armci_msg_gop_scope(SCOPE_NODE,x, n, op, ARMCI_LONG); } void armci_msg_clus_llgop(long long *x, int n, char* op) { armci_msg_gop_scope(SCOPE_NODE,x, n, op, ARMCI_LONG_LONG); } void armci_msg_clus_fgop(float *x, int n, char* op) { armci_msg_gop_scope(SCOPE_NODE,x, n, op, ARMCI_FLOAT); } void armci_msg_clus_dgop_scope(double *x, int n, char* op) { armci_msg_gop_scope(SCOPE_NODE,x, n, op, ARMCI_DOUBLE); } void armci_exchange_address(void *ptr_ar[], int n) { int ratio = sizeof(void*)/sizeof(int); /* armci_msg_lgop((long*)ptr_ar, n, "+"); */ if(DEBUG_)printf("%d: exchanging %ld ratio=%d\n",armci_me,(long)ptr_ar[armci_me],ratio); armci_msg_gop2(ptr_ar, n*ratio, "+",ARMCI_INT); } /** * ********************* Begin ARMCI Groups Code **************************** * NOTE: This part is MPI dependent (i.e. ifdef MPI) */ #ifdef MPI MPI_Comm armci_group_comm(ARMCI_Group *group) { #ifdef ARMCI_GROUP return MPI_COMM_NULL; #else ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); return (MPI_Comm)igroup->icomm; #endif } void parmci_msg_group_barrier(ARMCI_Group *group) { ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); #ifdef ARMCI_GROUP { int val=0; armci_msg_group_igop(&val, 1, "+", group); } #else MPI_Barrier((MPI_Comm)(igroup->icomm)); #endif } #ifdef ARMCI_GROUP extern void ARMCI_Bcast_(void *buffer, int len, int root, ARMCI_Group *group); #else extern void ARMCI_Bcast_(void *buffer, int len, int root, ARMCI_Comm comm); #endif void armci_grp_clus_brdcst(void *buf, int len, int grp_master, int grp_clus_nproc, ARMCI_Group *mastergroup) { ARMCI_iGroup *igroup = armci_get_igroup_from_group(mastergroup); int i, *pid_list, root=0; #ifdef ARMCI_GROUP ARMCI_Group group; #else MPI_Group group_world; MPI_Group group; MPI_Comm comm; #endif /* create a communicator for the processes with in a node */ pid_list = (int *)malloc(grp_clus_nproc*sizeof(int)); for(i=0; iicomm), &group_world); MPI_Group_incl(group_world, grp_clus_nproc, pid_list, &group); MPI_Comm_create((MPI_Comm)(igroup->icomm), (MPI_Group)group, (MPI_Comm*)&comm); /* Broadcast within the node (for this sub group of processes) */ ARMCI_Bcast_(buf, len, root, comm); free(pid_list); MPI_Comm_free(&comm); /* free the temporary communicator */ MPI_Group_free(&group); #endif } /* to avoid warning */ extern int ARMCI_Absolute_id(ARMCI_Group *group,int group_rank); void armci_msg_group_bintree(int scope, int* Root, int *Up, int *Left, int *Right, ARMCI_Group *group) { int root, up, left, right, index, nproc,grp_clus_me,grp_me,grp_master,grp_nproc; armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); grp_me = grp_attr->grp_me; grp_clus_me = grp_attr->grp_clus_me; grp_master = grp_attr->grp_clus_info[grp_clus_me].master; ARMCI_Group_size(group, &grp_nproc); if(scope == SCOPE_NODE){ root = grp_attr->grp_clus_info[grp_clus_me].master; nproc = grp_attr->grp_clus_info[grp_clus_me].nslave; index = grp_me - root; up = (index-1)/2 + root; if( up < root) up = -1; left = 2*index + 1 + root; if(left >= root+nproc) left = -1; right = 2*index + 2 + root; if(right >= root+nproc)right = -1; }else if(scope ==SCOPE_MASTERS){ root = grp_attr->grp_clus_info[0].master; nproc = grp_attr->grp_nclus; if(grp_me != grp_master){up = -1; left = -1; right = -1; } else{ index = grp_clus_me - root; up = (index-1)/2 + root; up = ( up < root)? -1: grp_attr->grp_clus_info[up].master; left = 2*index + 1 + root; left =( left >= root+nproc)?-1:grp_attr->grp_clus_info[left].master; right= 2*index + 2 + root; right=( right>=root+nproc)?-1:grp_attr->grp_clus_info[right].master; } }else{ root = 0; nproc = grp_nproc; index = grp_me - root; up = (index-1)/2 + root; if( up < root) up = -1; left = 2*index + 1 + root; if(left >= root+nproc) left = -1; right = 2*index + 2 + root; if(right >= root+nproc)right = -1; } *Up = (up==-1)?up:ARMCI_Absolute_id(group,up); *Left = (left==-1)?left:ARMCI_Absolute_id(group,left); *Right = (right==-1)?right:ARMCI_Absolute_id(group,right); *Root = (root==-1)?root:ARMCI_Absolute_id(group,root); } void armci_msg_group_bcast_scope(int scope, void *buf, int len, int root, ARMCI_Group *group) { int up, left, right, Root; int grp_me; ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); if(!buf)armci_die("armci_msg_bcast: NULL pointer", len); if(!group)armci_msg_bcast_scope(scope,buf,len,root); else grp_me = igroup->grp_attr.grp_me; armci_msg_group_bintree(scope, &Root, &up, &left, &right,group); if(root !=Root){ if(armci_me == root) armci_msg_snd(ARMCI_TAG, buf,len, Root); if(armci_me ==Root) armci_msg_rcv(ARMCI_TAG, buf, len, NULL, root); } /* printf("%d: scope=%d left=%d right=%d up=%d\n",armci_me, scope, left, right, up);*/ if(armci_me != Root && up!=-1) armci_msg_rcv(ARMCI_TAG, buf, len, NULL, up); if (left > -1) armci_msg_snd(ARMCI_TAG, buf, len, left); if (right > -1) armci_msg_snd(ARMCI_TAG, buf, len, right); } void armci_msg_group_gop_scope(int scope, void *x, int n, char* op, int type, ARMCI_Group *group) { int root, up, left, right, size; int tag=ARMCI_TAG,grp_me; int ndo, len, lenmes, orign =n, ratio; void *origx =x; ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); if(!group)armci_msg_gop_scope(scope,x,n,op,type); else grp_me = igroup->grp_attr.grp_me; if(!x)armci_die("armci_msg_gop: NULL pointer", n); if(work==NULL)_allocate_mem_for_work(); armci_msg_group_bintree(scope, &root, &up, &left, &right,group); if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); ratio = sizeof(double)/size; while ((ndo = (n<=BUF_SIZE*ratio) ? n : BUF_SIZE*ratio)) { len = lenmes = ndo*size; if (left > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, left); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op, (long long*)x,llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (right > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, right); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op,(long long*)x, llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (armci_me != root && up!=-1) armci_msg_snd(tag, x, len, up); n -=ndo; x = len + (char*)x; } /* Now, root broadcasts the result down the binary tree */ len = orign*size; armci_msg_group_bcast_scope(scope, origx, len, root,group); } void armci_exchange_address_grp(void *ptr_arr[], int n, ARMCI_Group *group) { int ratio = sizeof(void*)/sizeof(int); ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); int grp_me = igroup->grp_attr.grp_me; if(DEBUG_){ printf("%d: exchanging %ld ratio=%d\n",armci_me, (long)ptr_arr[grp_me], ratio); } armci_msg_group_gop_scope(SCOPE_ALL, ptr_arr, n*ratio, "+", ARMCI_INT, group); } /*\ combine array of longs/ints/doubles accross all processes \*/ void armci_msg_group_igop(int *x, int n, char* op, ARMCI_Group *group) { armci_msg_group_gop_scope(SCOPE_ALL,x, n, op, ARMCI_INT,group); } void armci_msg_group_lgop(long *x, int n, char* op,ARMCI_Group *group) { armci_msg_group_gop_scope(SCOPE_ALL,x, n, op, ARMCI_LONG,group); } void armci_msg_group_llgop(long long *x, int n, char* op,ARMCI_Group *group) { armci_msg_group_gop_scope(SCOPE_ALL,x, n, op, ARMCI_LONG_LONG,group); } void armci_msg_group_fgop(float *x, int n, char* op,ARMCI_Group *group) { armci_msg_group_gop_scope(SCOPE_ALL,x, n, op, ARMCI_FLOAT,group); } void armci_msg_group_dgop(double *x, int n, char* op,ARMCI_Group *group) { armci_msg_group_gop_scope(SCOPE_ALL,x, n, op, ARMCI_DOUBLE,group); } # endif /* ifdef MPI */ /*********************** End ARMCI Groups Code ****************************/ #ifdef PVM /* set the group name if using PVM */ void ARMCI_PVM_Init(char *mpgroup) { #ifdef CRAY mp_group_name = (char *)NULL; #else if(mpgroup != NULL) { /* free(mp_group_name); */ mp_group_name = (char *)malloc(25 * sizeof(char)); strcpy(mp_group_name, mpgroup); } #endif } #endif ga-5-3/armci/src-gemini/portals_cp.c0000640005473000001440000007746211615565754016275 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* ---------------------------------------------------------------------------------------------- *\ portals_cp.c -- compute process portals calls author: ryan olson email: ryan@cray.com \* ---------------------------------------------------------------------------------------------- */ # include "armcip.h" # include # include # include # include /* ---------------------------------------------------------------------------------------------- *\ \* ---------------------------------------------------------------------------------------------- */ static ptl_handle_ni_t cp_nih; static ptl_handle_eq_t cp_eqh; static ptl_handle_eq_t cp_tx_eqh; static void *portals_eager_send_buffer = NULL; static size_t portals_unique_msg_counter = 373; static int portals_smp_sem = -1; static int *active_requests_by_node = NULL; /* ---------------------------------------------------------------------------------------------- *\ \* ---------------------------------------------------------------------------------------------- */ int portals_cp_finished = 0; /* ---------------------------------------------------------------------------------------------- *\ Implementation \* ---------------------------------------------------------------------------------------------- */ int portals_cp_init(void) { int rc; int me; ptl_process_id_t id; rc = portals_init(&cp_nih); if(rc != PTL_OK) { printf("error in portals_init: err %d\n",rc); Fatal_error(rc); } rc = portals_create_eq(cp_nih,10*PORTALS_MAX_DESCRIPTORS,&cp_eqh); if(rc != PTL_OK) { printf("failed to create cp event queue; err %d\n",rc); Fatal_error(911); } rc = portals_create_eq(cp_nih,30,&cp_tx_eqh); if(rc != PTL_OK) { printf("failed to create cp_tx event queue; err %d\n",rc); Fatal_error(911); } rc = portals_cp_getid(&id); if(rc != PTL_OK) { printf("failed to get the portals id; err %d\n",rc); Fatal_error(rc); } /* creating an smp/intra-node communicator */ MPI_Comm_rank(ARMCI_COMM_WORLD,&me); MPI_Comm_split(ARMCI_COMM_WORLD,id.nid,me,&portals_smp_comm); /* set affinity */ # ifdef PORTALS_AFFINITY int smp_np, smp_me; unsigned long mask; unsigned int len = sizeof(mask); unsigned long ncpus; unsigned int nsockets, siblings; int cores_per_socket, cps_per_socket; int verbose = 0; MPI_Comm_size(portals_smp_comm,&smp_np); MPI_Comm_rank(portals_smp_comm,&smp_me); if((ncpus = sysconf(_SC_NPROCESSORS_ONLN)) < 0) { printf("%d [cp] sysconf(_SC_NPROCESSORS_ONLN) failed; err=%d\n", ncpus); armci_die("sysconf in init_throttle",911); } if(sched_getaffinity(0, len, &mask) < 0) { perror("sched_getaffinity"); armci_die("getaffinity error in ds_init",911); } if(armci_clus_me == 0 && /* verbose */ 0 ) { printf("%d [cp]: old affinity = 0x%x, ncpus = %d\n", armci_me, mask, ncpus); } if(smp_me == 0) { mask = 1 << (ncpus-1); if(sched_setaffinity(0, len, (cpu_set_t *) &mask) < 0) { perror("sched_setaffinity to probe the socket count"); armci_die("setaffinity error in ds_init",911); } siblings = cpuid_ebx(1) >>16 & 0xff; nsockets = ncpus / siblings; } MPI_Bcast(&nsockets,1,MPI_INT,0,portals_smp_comm); cores_per_socket = ncpus/nsockets; cps_per_socket = (smp_np / nsockets); cps_per_socket += (smp_np % nsockets); if(nsockets > 2) { armci_die("nsockets > 2 not supported",911); } if(smp_me < cps_per_socket) { mask = 1 << smp_me; } else { mask = 1 << (smp_me + (cores_per_socket - cps_per_socket)); } if(sched_setaffinity(0, len, (cpu_set_t *) &mask) < 0) { perror("sched_setaffinity"); armci_die("setaffinity error in ds_init",911); } if(sched_getaffinity(0, len, &mask) < 0) { perror("sched_getaffinity"); armci_die("getaffinity error (#2) in ds_init",911); } if(armci_clus_me == 0 && verbose) { printf("%d [cp]: new affinity = 0x%x, ncpus = %d\n", armci_me, mask, ncpus); } # endif return PTL_OK; } int portals_cp_finalize() { int rc; # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE armci_semrm(portals_smp_sem); # endif rc = portals_free_eq(cp_eqh); if (rc != PTL_OK) { printf("error freeing cp_eqh; err %d\n",rc); } MPI_Barrier(ARMCI_COMM_WORLD); MPI_Finalize(); portals_cp_finished = 1; exit(0); return PTL_OK; // return portals_finalize(cp_nih); } int portals_cp_getid(ptl_process_id_t *id) { return portals_getid(cp_nih, id); } static size_t portals_get_unique_msg_id(void) { size_t val = armci_me*1000; portals_unique_msg_counter++; if(portals_unique_msg_counter == 1000) portals_unique_msg_counter=1; val += portals_unique_msg_counter; return val; } static void portals_req_clear(portals_ds_req_t *req) { req->active = 0; req->unique_msg_id = 0; req->req_desc.done = 1; req->req_desc.state = 0; req->req_desc.eqh = cp_tx_eqh; req->ack_desc.done = 1; req->ack_desc.state = 0; req->ack_desc.eqh = cp_eqh; req->data_desc.done = 1; req->data_desc.state = 0; req->data_desc.eqh = cp_eqh; req->remote_node = -1; } static ptl_process_id_t portals_get_dsid_from_node(int remote_node) { int rank = armci_clus_info[remote_node].master; if(portals_cloned_id_map) return portals_cloned_id_map[rank]; else return portals_id_map[rank]; } static ptl_process_id_t portals_get_dsid_from_rank(int remote_id) { if(portals_cloned_id_map) return portals_cloned_id_map[remote_id]; else return portals_id_map[remote_id]; } void portals_req_nbsend(void *buffer, size_t size, portals_ds_req_t *req) { int rc; portals_desc_t *desc = &req->req_desc; assert(req->unique_msg_id); assert(size < portalsMaxEagerMessageSize); assert(req->remote_node >= 0); /* ---------------------------------------------------------------------------- *\ if we get here, we can guarantee that where are no outstanding requests from this PE to the remote node; however, we can not guarantee that other PEs on this node aren't talking to the intended data server ... so now we wait on value in the "shared" array. \* ---------------------------------------------------------------------------- */ # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE int got_lock = 0; while(!got_lock) { portalsSpinLockOnInt(&active_requests_by_node[req->remote_node],0,1000); semaphoreAcquire(portals_smp_sem,1,PORTALS_WRITE_ACCESS); if(active_requests_by_node[req->remote_node] == 0) { active_requests_by_node[req->remote_node] = 1; got_lock = 1; } semaphoreRelease(portals_smp_sem,1,PORTALS_WRITE_ACCESS); } # endif desc->buffer = buffer; desc->length = size; desc->id = req->dsid; desc->mbits = MATCH_ALL_MBITS; desc->hdr = req->unique_msg_id; desc->state = 0; desc->eqh = cp_tx_eqh; desc->nih = cp_nih; rc = portals_put(desc); if(rc != PTL_OK) { printf("portals_put err %d\n",rc); Fatal_error(rc); } } void portals_req_send(void *buffer, size_t size, portals_ds_req_t *req) { int rc; portals_desc_t *desc = &req->req_desc; portals_req_nbsend(buffer,size,req); rc = portals_wait(desc); if(rc != PTL_OK) { printf("portals_wait err %d\n",rc); Fatal_error(rc); } } static inline void portals_req_wait(portals_ds_req_t *req) { int rc; if(req->req_desc.state) { rc = portals_wait( &(req->req_desc) ); if(rc != PTL_OK) { printf("portals wait error on req_desc in req_wait; err=%d\n",rc); Fatal_error(rc); } } if(req->ack_desc.state) { rc = portals_wait( &(req->ack_desc) ); if(rc != PTL_OK) { printf("portals wait error on ack_desc in req_wait; err=%d\n",rc); Fatal_error(rc); } } if(req->data_desc.state) { rc = portals_wait( &(req->data_desc) ); if(rc != PTL_OK) { printf("portals wait error on data_desc in req_wait; err=%d\n",rc); Fatal_error(rc); } } req->active = 0; return; } void portalsWaitOnRequest(portals_ds_req_t *req) { portals_req_wait(req); } static int portals_prepost_ack_from_ds(portals_ds_req_t *req) { int rc; ptl_md_t md; portals_desc_t *desc = &req->ack_desc; unsigned long mbits = req->unique_msg_id; assert(req->unique_msg_id); assert(req->remote_node >= 0); # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE desc->buffer = &active_requests_by_node[req->remote_node]; desc->length = sizeof(int); # else desc->buffer = NULL; desc->length = 0; # endif desc->id = req->dsid; desc->mbits = mbits | DS_RESPONSE_ACK; desc->hdr = mbits; desc->eqh = cp_eqh; rc = portals_me_attach(cp_nih,desc->id,desc->mbits,0,&desc->meh); if(rc != PTL_OK) { printf("me failed in prepost ack\n"); Fatal_error(rc); } md.start = desc->buffer; md.length = desc->length; md.threshold = 1; md.options = PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; md.user_ptr = desc; md.eq_handle = cp_eqh; rc = portals_md_attach(desc->meh,md,PTL_UNLINK,&desc->mdh); if(rc != PTL_OK) { printf("md failed in prepost ack\n"); Fatal_error(rc); } // desc->state = STATE_PUT_END; // |= needed for rendez-vous gets; put and get using the same descriptor desc->state |= STATE_PUT_END; desc->done = 0; } static int portals_prepost_put_from_ds(void *buffer, size_t size, portals_ds_req_t *req) { int rc; int nputs; ptl_md_t md; portals_desc_t *desc = &req->data_desc; unsigned long mbits = req->unique_msg_id; assert(req->unique_msg_id); desc->buffer = buffer; desc->length = size; desc->id = req->dsid; desc->mbits = mbits | DS_RESPONSE_PUT; desc->hdr = mbits; desc->eqh = cp_eqh; rc = portals_me_attach(cp_nih,desc->id,desc->mbits,0,&desc->meh); if(rc != PTL_OK) { printf("me failed in prepost put\n"); Fatal_error(rc); } md.start = buffer; md.length = size; md.threshold = desc->noperations; md.options = PTL_MD_OP_PUT | PTL_MD_EVENT_AUTO_UNLINK_ENABLE | PTL_MD_EVENT_START_DISABLE | PTL_MD_EVENT_END_DISABLE; md.user_ptr = (void *) desc; md.eq_handle = cp_eqh; rc = portals_md_attach(desc->meh,md,PTL_UNLINK,&desc->mdh); if(rc != PTL_OK) { printf("md failed in prepost put\n"); Fatal_error(rc); } // desc->state = STATE_UNLINK; // |= needed for rendez-vous gets; put and get using the same descriptor desc->state |= STATE_UNLINK; desc->done = 0; } static int portals_prepost_get_from_ds(void *buffer, size_t size, portals_ds_req_t *req) { int rc; ptl_md_t md; portals_desc_t *desc = &req->data_desc; unsigned long mbits = req->unique_msg_id; assert(req->unique_msg_id); desc->buffer = buffer; desc->length = size; desc->id = req->dsid; desc->mbits = mbits | DS_RESPONSE_GET; desc->hdr = mbits; desc->eqh = cp_eqh; rc = portals_me_attach(cp_nih,desc->id,desc->mbits,0,&desc->meh); if(rc != PTL_OK) { printf("me failed in prepost get\n"); Fatal_error(rc); } md.start = buffer; md.length = size; md.threshold = desc->noperations; md.options = PTL_MD_OP_GET | PTL_MD_EVENT_START_DISABLE; // | PTL_MD_EVENT_AUTO_UNLINK_ENABLE // | PTL_MD_EVENT_START_DISABLE // | PTL_MD_EVENT_END_DISABLE; md.user_ptr = (void *) desc; md.eq_handle = cp_eqh; rc = portals_md_attach(desc->meh,md,PTL_UNLINK,&desc->mdh); if(rc != PTL_OK) { printf("md failed in prepost get\n"); Fatal_error(rc); } // printf("%d: preposted get of lenght=%ld\n",armci_me,size); // desc->state = STATE_UNLINK; // desc->state = STATE_GET_END; // |= needed for rendez-vous gets; put and get using the same descriptor desc->state |= STATE_GET_END; desc->done = 0; } void portalsBlockingRemoteOperationToNode(void *buffer, size_t length, int remote_node) { portals_ds_req_t req; portals_req_clear(&req); portalsRemoteOperationToNode(buffer,length,remote_node,&req); portalsWaitOnRequest(&req); } void portalsRemoteOperationToNode(void *buffer, size_t length, int remote_node, portals_ds_req_t *req) { ptl_process_id_t id = portals_get_dsid_from_node(remote_node); req->remote_node = remote_node; portalsRemoteOperation(buffer,length,id,req); } /* void portalsRemoteOperationToRank(void *buffer, size_t length, int remote_rank, portals_ds_req_t *req) { ptl_process_id_t id = portals_get_dsid_from_rank(remote_rank); portalsRemoteOperation(buffer,length,id,req); } */ void portalsRemoteOperation(void *buffer, size_t length, ptl_process_id_t dsid, portals_ds_req_t *req) { /* --------------------------------------------------------------------- *\ initialize the data server request \* --------------------------------------------------------------------- */ // portals_req_clear(req); req->active = 1; req->unique_msg_id = portals_get_unique_msg_id(); req->dsid = dsid; /* --------------------------------------------------------------------- *\ the only response from the ds will be a 0-byte ack coming in as a put \* --------------------------------------------------------------------- */ portals_prepost_ack_from_ds(req); /* --------------------------------------------------------------------- *\ send data request; this is a completely blocking req \* --------------------------------------------------------------------- */ portals_req_send(buffer,length,req); } void portals_send_oper(int remote_node,int val, portals_ds_req_t *req) { int rc; request_header_t msg; /* --------------------------------------------------------------------- *\ initialize the data server request \* --------------------------------------------------------------------- */ portals_req_clear(req); req->active = 1; req->unique_msg_id = portals_get_unique_msg_id(); req->dsid = portals_get_dsid_from_node(remote_node); req->remote_node = remote_node; /* --------------------------------------------------------------------- *\ the only response from the ds will be a 0-byte ack coming in as a put \* --------------------------------------------------------------------- */ portals_prepost_ack_from_ds(req); /* --------------------------------------------------------------------- *\ prepare data request and send it; this is a completely blocking req \* --------------------------------------------------------------------- */ msg.operation = val; portals_req_send(&msg,sizeof(request_header_t),req); return; } void portals_send_QUIT(int remote_node) { portals_ds_req_t req; portals_send_oper(remote_node,QUIT,&req); portals_req_wait(&req); } static int portals_determine_remote_op_count(request_header_t *msg) { #ifdef DDI int nr,nc,np; int datatype_extent = sizeof(double); /* --------------------------------------------------------------------- *\ previously we have worked with words, but to provide support for other data types, we must work with bytes. note to developers: datatype_extent = the size in bytes of the stored datatype \* --------------------------------------------------------------------- */ if(msg->size*datatype_extent <= MAX_DS_MSG_SIZE) return 1; /* --------------------------------------------------------------------- *\ the data must be moved in segments; determine patch dimensions \* --------------------------------------------------------------------- */ nr = msg->ihi - msg->ilo + 1; nc = msg->jhi - msg->jlo + 1; /* --------------------------------------------------------------------- *\ each column individually is too long to fit in the buffer \* --------------------------------------------------------------------- */ if(nr*datatype_extent < MAX_DS_MSG_SIZE) { /* ------------------------------------------------------------------ *\ np the number of "evenly" sized passed needed to send a column \* ------------------------------------------------------------------ */ np = 2; while(((nr/np)+((nr%np)?1:0)*datatype_extent)>MAX_DS_MSG_SIZE) np++; /* ------------------------------------------------------------------ *\ noperations is np times the number of columns to be sent \* ------------------------------------------------------------------ */ return np*nc; } /* --------------------------------------------------------------------- *\ determine the number of full columns that can be sent in one pass break down the subpatch on this metric \* --------------------------------------------------------------------- */ else { /* ------------------------------------------------------------------ *\ np is the number of passes needed to send the full patch which is broken down into "evenly" sized sets of columns that fit in the allocated buffer region \* ------------------------------------------------------------------ */ np = 2; while(nr*((nc/np)+((nc%np)?1:0))*datatype_extent>MAX_DS_MSG_SIZE) np++; /* ------------------------------------------------------------------ *\ noperations is np \* ------------------------------------------------------------------ */ return np; } assert(0); // should not happen return -1; #else return 1; #endif } void portals_remote_rmw(void *buffer, request_header_t *msginfo, int remote_node, portals_ds_req_t *req) { ptl_size_t length; /* --------------------------------------------------------------------- *\ initialize the data server request \* --------------------------------------------------------------------- */ portals_req_clear(req); req->active = 1; req->unique_msg_id = portals_get_unique_msg_id(); req->dsid = portals_get_dsid_from_node(remote_node); req->remote_node = remote_node; /* --------------------------------------------------------------------- *\ prepare the buffer into which the ds will put data \* --------------------------------------------------------------------- */ req->data_desc.noperations=portals_determine_remote_op_count(msginfo); portals_prepost_put_from_ds(buffer,msginfo->datalen,req); # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE portals_prepost_ack_from_ds(req); # endif /* --------------------------------------------------------------------- *\ send data request note: from armci_send_req - if get, the value of bytes (local: length) is msginfo->dscrlen + (hdrlen=sizeof(request_header_t) ... this is the size of the "data server request message" to be sent \* --------------------------------------------------------------------- */ length = sizeof(request_header_t) + msginfo->dscrlen + msginfo->datalen; portals_req_send(msginfo,length,req); } void portals_remote_get(void *buffer, request_header_t *msginfo, int remote_node) { portals_ds_req_t req; portals_remote_nbget(buffer,msginfo,remote_node,&req); portals_req_wait(&req); } void portals_remote_nbget(void *buffer, request_header_t *msginfo, int remote_node, portals_ds_req_t *req) { ptl_size_t length; /* --------------------------------------------------------------------- *\ initialize the data server request \* --------------------------------------------------------------------- */ portals_req_clear(req); req->active = 1; req->unique_msg_id = portals_get_unique_msg_id(); req->dsid = portals_get_dsid_from_node(remote_node); req->remote_node = remote_node; /* --------------------------------------------------------------------- *\ prepare the buffer into which the ds will put data \* --------------------------------------------------------------------- */ req->data_desc.noperations=portals_determine_remote_op_count(msginfo); portals_prepost_put_from_ds(buffer,msginfo->datalen,req); # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE portals_prepost_ack_from_ds(req); # endif /* --------------------------------------------------------------------- *\ send data request note: from armci_send_req - if get, the value of bytes (local: length) is msginfo->dscrlen + (hdrlen=sizeof(request_header_t) ... this is the size of the "data server request message" to be sent \* --------------------------------------------------------------------- */ length = sizeof(request_header_t) + msginfo->dscrlen; # if defined(PORTALS_USE_RENDEZ_VOUS) if(length < portalsMaxEagerMessageSize) portals_req_send(msginfo,length,req); else { req->data_desc.noperations = 1; portals_prepost_get_from_ds(msginfo,length,req); /* ------------------------------------------------------------------ *\ send data request: branch here for eager vs. rendez-vous \* ------------------------------------------------------------------ */ assert(length <= PORTALS_BUF_SIZE); portals_req_send(msginfo,sizeof(request_header_t),req); } # else portals_req_send(msginfo,length,req); # endif } void portals_remote_put(void *buffer, request_header_t *msginfo, int remote_node) { portals_ds_req_t req; portals_remote_nbput(buffer,msginfo,remote_node,&req); portals_req_wait(&req); } void portals_remote_nbput(void *buffer, request_header_t *msginfo, int remote_node, portals_ds_req_t *req) { char *eagerBuffer = NULL; size_t eagerSendSize = 0; /* --------------------------------------------------------------------- *\ initialize the data server request \* --------------------------------------------------------------------- */ portals_req_clear(req); req->active = 1; req->unique_msg_id = portals_get_unique_msg_id(); req->dsid = portals_get_dsid_from_node(remote_node); req->remote_node = remote_node; /* --------------------------------------------------------------------- *\ prepost ack response from the data server \* --------------------------------------------------------------------- */ portals_prepost_ack_from_ds(req); /* --------------------------------------------------------------------- *\ eager vs. rendez-vous messaging eager: pack and send the message immediate (only for small messages) developers note: since portals_eager_send_buffer only exists once, this has to be a blocking send (ie the data is on the wire when req_send has finished and the buffer can be reused. for greater overlap, create a set of eager send buffers ... however they have to be managed ... probably best to do it in a ring. note: armci put/acc buffer is prepacked. \* --------------------------------------------------------------------- */ eagerSendSize = sizeof(request_header_t) + msginfo->dscrlen + msginfo->datalen; if(eagerSendSize < portalsMaxEagerMessageSize) { // printf("sending eager message\n"); # if 0 /* armci prepacked */ eagerBuffer = (char *) portals_eager_send_buffer; memcpy(eagerBuffer,msginfo,sizeof(request_header_t)); eagerBuffer += sizeof(request_header_t); memcpy(eagerBuffer,buffer,msginfo->bytes); # endif eagerBuffer = (char *) msginfo; /* buffer == msginfo for armci */ portals_req_send(eagerBuffer,eagerSendSize,req); } /* --------------------------------------------------------------------- *\ rendez-vous: send the ds a request; ds will "get/pull" data \* --------------------------------------------------------------------- */ else { # ifdef PORTALS_USE_RENDEZ_VOUS /* ------------------------------------------------------------------ *\ prepare the buffer into which the ds will put data \* ------------------------------------------------------------------ */ // req->data_desc.noperations=portals_determine_remote_op_count(msginfo); req->data_desc.noperations = 1; portals_prepost_get_from_ds(msginfo,eagerSendSize,req); /* ------------------------------------------------------------------ *\ send data request: branch here for eager vs. rendez-vous \* ------------------------------------------------------------------ */ assert(eagerSendSize <= PORTALS_BUF_SIZE); portals_req_send(msginfo,sizeof(request_header_t),req); # else printf("%d [cp]: rendez-vous messaging not supported\n",armci_me); abort(); # endif } } #if 0 void portals_remote_acc(void *buffer, request_header_t *msginfo, int remote_node) { portals_ds_req_t req; portals_remote_nbacc(buffer,msginfo,remote_node,&req); portals_req_wait(&req); } void portals_remote_nbacc(void *buffer, request_header_t *msginfo, int remote_node, portals_ds_req_t *req) { char *eagerBuffer = NULL; size_t eagerSendSize = 0; assert(msginfo->bytes); /* --------------------------------------------------------------------- *\ initialize the data server request \* --------------------------------------------------------------------- */ portals_req_clear(req); req->active = 1; req->unique_msg_id = portals_get_unique_msg_id(); req->dsid = portals_get_dsid_from_node(remote_node); /* --------------------------------------------------------------------- *\ eager vs. rendez-vous messaging eager: pack and send the message immediate (only for small messages) \* --------------------------------------------------------------------- */ eagerSendSize = msginfo->bytes + sizeof(request_header_t); if(eagerSendSize < portalsMaxEagerMessageSize) { /* ------------------------------------------------------------------ *\ prepost ack response from the data server developers note: if you globally fence an array with a collective operation prior to a section of code and defence it after, then you don't need to micro manage the fence on a per request basis in that section; this eliminates the need for a DS ack \* ------------------------------------------------------------------ */ portals_prepost_ack_from_ds(req); /* ------------------------------------------------------------------ *\ pack and send eager data request blocking for now, since portals_eager_send_buffer only exists once create multiple eager buffers for greater overlap \* ------------------------------------------------------------------ */ eagerBuffer = (char *) portals_eager_send_buffer; memcpy(eagerBuffer,msginfo,sizeof(request_header_t)); eagerBuffer += sizeof(request_header_t); memcpy(eagerBuffer,buffer,msginfo->bytes); eagerBuffer = (char *) portals_eager_send_buffer; portals_req_send(eagerBuffer,eagerSendSize,req); } /* --------------------------------------------------------------------- *\ rendez-vous: send the ds a request; ds will "get/pull" data developers note: a ds ack is not required for a rendez-vous pull, this is because the ds will not start the pull until a local fence has been raised (if needed - see note above) \* --------------------------------------------------------------------- */ else { /* ------------------------------------------------------------------ *\ prepare the buffer from which the ds will pull data \* ------------------------------------------------------------------ */ req->data_desc.noperations=portals_determine_remote_op_count(msginfo); portals_prepost_get_from_ds(buffer,msginfo->bytes,req); /* ------------------------------------------------------------------ *\ send data request \* ------------------------------------------------------------------ */ portals_req_send(msginfo,sizeof(request_header_t),req); portalsWaitOnRequest(req); } } #endif extern int armci_shmget(size_t,char*); extern int armci_semget(int); extern void *shmat(int,int,int); void portals_cp_init_throttle(int nnodes) { int i, shmid, smp_np, smp_me; size_t size = nnodes*sizeof(int); char *buf = NULL; MPI_Comm_size(portals_smp_comm,&smp_np); MPI_Comm_rank(portals_smp_comm,&smp_me); # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE if(armci_me == armci_master) { if(smp_me != 0) armci_die("smp_me and armci_master are different",911); } if(smp_me == 0) { shmid = armci_shmget(size,"portals_cp_init_throttle"); active_requests_by_node = (int *) shmat(shmid,0,0); if(active_requests_by_node == (void *) -1) { printf("%d [cp] shmat failed for shmid %d\n",armci_me,shmid); armci_die("badness",911); } armci_shmrm(shmid); for(i=0; i #include #define SERVER_GET 1 #define SERVER_NBGET 2 #define DIRECT_GET 3 #define DIRECT_NBGET 4 #define SERVER_PUT 5 #define SERVER_NBPUT 6 #define DIRECT_PUT 7 #define DIRECT_NBPUT 8 # define DO_FENCE(__proc,__prot) if(__prot==SERVER_GET);\ else if(__prot==SERVER_PUT);\ else if(__prot==DIRECT_GET || __prot==DIRECT_NBGET){\ if(armci_prot_switch_fence[__proc]==SERVER_PUT)\ ARMCI_DoFence(__proc);\ }\ else if(__prot==DIRECT_PUT || __prot==DIRECT_NBPUT){\ if(armci_prot_switch_fence[__proc]==SERVER_PUT)\ ARMCI_DoFence(__proc);\ }\ else;\ armci_prot_switch_fence[__proc]=__prot /* defined in acc.h so don't redefine here #ifndef ARMCI_COMPLEX_TYPES typedef struct { float real; float imag; } complex_t; typedef struct { double real; double imag; } dcomplex_t; #endif */ /* void I_ACCUMULATE(void* scale, int elems, void*src, void* dst) { int j; int *a=(int*)dst, *b=(int*)src; int alpha = *(int*)scale; for(j=0;j BUFSIZE/2){ /* for large segments use strided implementation */ for(j=0; j< dr.ptr_array_len; j++){ rc = armci_acc_copy_strided(op, scale,proc, dr.src_ptr_array[j], NULL, dr.dst_ptr_array[j],NULL, &dr.bytes, 0); if(rc)return(rc); } }else{ armci_giov_t dl; /*lock memory:should optimize it to lock only a chunk at a time*/ armci_lockmem_scatter(dr.dst_ptr_array, dr.ptr_array_len, dr.bytes, proc); /* copy as many blocks as possible into the local buffer */ dl.bytes = dr.bytes; nb = ARMCI_MIN(PWORKLEN,BUFSIZE/dr.bytes); for(j=0; j< dr.ptr_array_len; j+= nb){ int nblocks = ARMCI_MIN(nb, dr.ptr_array_len -j); int k; /* setup vector descriptor for remote memory copy to bring data into buffer*/ dl.ptr_array_len = nblocks; dl.src_ptr_array = dr.dst_ptr_array + j; /* GET destination becomes source for copy */ for(k=0; k< nblocks; k++) pwork[k] = k*dl.bytes + (char*)armci_internal_buffer; dl.dst_ptr_array = pwork; /* get data to the local buffer */ rc = armci_copy_vector(GET, &dl, 1, proc); if(rc){ ARMCI_UNLOCKMEM(proc); return(rc);} /* update source array for accumulate */ dl.src_ptr_array = dr.src_ptr_array +j; /* do scatter accumulate updating copy of data in buffer */ armci_scatter_acc(op, scale, dl, armci_me, 0); /* modify descriptor-now source becomes destination for PUT*/ dl.dst_ptr_array = dr.dst_ptr_array + j; dl.src_ptr_array = pwork; /* put data back */ rc = armci_copy_vector(PUT, &dl, 1, proc); FENCE_NODE(proc); if(rc){ ARMCI_UNLOCKMEM(proc); return(rc);} } ARMCI_UNLOCKMEM(proc); } }/*endfor*/ } #endif return 0; } int armci_copy_vector(int op, /* operation code */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ) { int i,s,shmem= SAMECLUSNODE(proc); int armci_th_idx = ARMCI_THREAD_IDX; if(shmem){ /* local/shared memory copy */ for(i = 0; i< len; i++){ for( s=0; s< darr[i].ptr_array_len; s++){ armci_copy(darr[i].src_ptr_array[s],darr[i].dst_ptr_array[s],darr[i].bytes); } } }else { switch(op){ case PUT: for(i = 0; i< len; i++){ UPDATE_FENCE_STATE(proc, PUT, darr[i].ptr_array_len); for( s=0; s< darr[i].ptr_array_len; s++){ armci_put(darr[i].src_ptr_array[s],darr[i].dst_ptr_array[s], darr[i].bytes, proc); } } break; case GET: for(i = 0; i< len; i++){ for( s=0; s< darr[i].ptr_array_len; s++){ armci_get(darr[i].src_ptr_array[s],darr[i].dst_ptr_array[s], darr[i].bytes,proc); } } break; default: armci_die("armci_copy_vector: wrong optype",op); } } return 0; } void armci_vector_to_buf(armci_giov_t darr[], int len, void* buf) { int i,s; char *ptr = (char*)buf; for(i = 0; i< len; i++){ for( s=0; s< darr[i].ptr_array_len; s++){ armci_copy(darr[i].src_ptr_array[s],ptr,darr[i].bytes); ptr += darr[i].bytes; } } } void armci_vector_from_buf(armci_giov_t darr[], int len, void* buf) { int i,s; char *ptr = (char*)buf; for(i = 0; i< len; i++){ for( s=0; s< darr[i].ptr_array_len; s++){ armci_copy(ptr, darr[i].dst_ptr_array[s],darr[i].bytes); ptr += darr[i].bytes; } } } int PARMCI_PutV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ) { int rc=0, i,direct=1; if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; ORDER(PUT,proc); /* ensure ordering */ direct=SAMECLUSNODE(proc); if(direct){ if(!SAMECLUSNODE(proc))DO_FENCE(proc,DIRECT_PUT); rc = armci_copy_vector(PUT, darr, len, proc); } else{ DO_FENCE(proc,SERVER_PUT); rc = armci_pack_vector(PUT, NULL, darr, len, proc,NULL); } if(rc) return FAIL6; else return 0; } int PARMCI_GetV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ) { int rc=0, i,direct=1; if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; ORDER(GET,proc); /* ensure ordering */ #ifndef QUADRICS direct=SAMECLUSNODE(proc); #endif if(direct){ if(!SAMECLUSNODE(proc))DO_FENCE(proc,DIRECT_GET); rc = armci_copy_vector(GET, darr, len, proc); } else{ DO_FENCE(proc,SERVER_GET); rc = armci_pack_vector(GET, NULL, darr, len, proc,NULL); } if(rc) return FAIL6; else return 0; } int PARMCI_AccV( int op, /* oeration code */ void *scale, /*scaling factor for accumulate */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ) { int rc=0, i,direct=0; if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; ORDER(op,proc); /* ensure ordering */ direct=SAMECLUSNODE(proc); # if defined(ACC_COPY) && !defined(ACC_SMP) if(armci_me != proc) direct=0; # error "grrr" # endif if(direct) { rc = armci_acc_vector( op, scale, darr, len, proc); } else { DO_FENCE(proc,SERVER_PUT); rc = armci_pack_vector(op, scale, darr, len, proc,NULL); } if(rc) return FAIL6; else return 0; } /*****************************************************************************/ /*\ Non-blocking vector API \*/ int PARMCI_NbPutV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /*non-blocking request handle*/ ) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int rc=0, i,direct=1; if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; direct=SAMECLUSNODE(proc); /* aggregate put */ if(nb_handle && nb_handle->agg_flag == SET) { if(!direct) { rc=armci_agg_save_giov_descriptor(darr, len, proc, PUT, nb_handle); return rc; } } else { /*ORDER(PUT,proc); ensure ordering */ UPDATE_FENCE_INFO(proc); /*set tag and op in the nb handle*/ if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = PUT; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = armci_set_implicit_handle(PUT, proc); } if(direct){ if(!SAMECLUSNODE(proc))DO_FENCE(proc,DIRECT_PUT); rc = armci_copy_vector(PUT, darr, len, proc); } else{ DO_FENCE(proc,SERVER_NBPUT); rc = armci_pack_vector(PUT, NULL, darr, len, proc,nb_handle); } if(rc) return FAIL6; else return 0; } int PARMCI_NbGetV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /*non-blocking request handle*/ ) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int rc=0, i,direct=1; if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; direct=SAMECLUSNODE(proc); /* aggregate get */ if(nb_handle && nb_handle->agg_flag == SET) { if(!direct) { rc=armci_agg_save_giov_descriptor(darr, len, proc, GET, nb_handle); return rc; } } else { /* ORDER(GET,proc); ensure ordering */ if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = GET; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = armci_set_implicit_handle(GET, proc); } if(direct){ if(!SAMECLUSNODE(proc))DO_FENCE(proc,DIRECT_GET); rc = armci_copy_vector(GET, darr, len, proc); } else{ DO_FENCE(proc,SERVER_NBGET); rc = armci_pack_vector(GET, NULL, darr, len, proc,nb_handle); } if(rc) return FAIL6; else return 0; } int PARMCI_NbAccV( int op, /* oeration code */ void *scale, /*scaling factor for accumulate */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /*non-blocking request handle*/ ) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int rc=0, i,direct=1; if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; UPDATE_FENCE_INFO(proc); direct=SAMECLUSNODE(proc); if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = op; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = armci_set_implicit_handle(op, proc); # if defined(ACC_COPY) && !defined(ACC_SMP) if(armci_me != proc) direct=0; # endif if(direct) rc = armci_acc_vector( op, scale, darr, len, proc); else{ DO_FENCE(proc,SERVER_NBPUT); rc = armci_pack_vector(op, scale, darr, len, proc,nb_handle); } if(rc) return FAIL6; else return 0; } /*****************************************************************************/ ga-5-3/armci/src-gemini/aggregate.c0000640005473000001440000003011211622516074016017 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** $Id: aggregate.c,v 1.6 2003-10-22 22:12:14 d3h325 Exp $ * Aggregate Put/Get requests */ #include "armcip.h" #include /* memcpy */ #include #define _MAX_AGG_BUFFERS 32 /* Maximum # of aggregation buffers available*/ #define _MAX_AGG_BUFSIZE 2048 /* size of each buffer. should be < 2^15 */ #define _MAX_PTRS 256 /* < 2^15, as it is "short int" in agg_req_t */ #define _MAX_AGG_HANDLE _MAX_AGG_BUFFERS /* Max # of aggregation handles */ /* aggregate request handle */ typedef struct { unsigned int tag; /* non-blocking request tag */ short int proc; /* remote process id */ short int request_len ; /* number of requests */ short int ptr_array_len; /* pointer length for this request */ short int buf_pos_end; /* position of buffer (from right end) */ armci_giov_t *darr; /* giov vectors */ }agg_req_t; static agg_req_t *aggr[_MAX_AGG_HANDLE]; /* aggregate request handle */ /* data structure for dynamic buffer management */ typedef struct { int size; /* represents the size of the list (not linked list) */ int index[_MAX_AGG_HANDLE]; } agg_list_t; static agg_list_t ulist, alist;/*in-use & available aggr buffer index list*/ /* aggregation buffer */ static char agg_buf[_MAX_AGG_BUFFERS][_MAX_AGG_BUFSIZE]; /* aggregation buffer to store the pointers */ static void* agg_src_ptr[_MAX_AGG_BUFFERS][_MAX_PTRS]; static void* agg_dst_ptr[_MAX_AGG_BUFFERS][_MAX_PTRS]; /** * --------------------------------------------------------------------- * fill descriptor from this side (left to right) * ---> * _______________________________________________ * | | | |. . . . . . . . . . | | | | * |__|__|__|_____________________________|__|__|__| * * <--- * fill src and dst pointer (arrays) in this direction * (right to left) * * Once they are about to cross each other (implies buffer is full), * complete the data transfer. * --------------------------------------------------------------------- */ #define AGG_INIT_NB_HANDLE(op_type, p, nb_handle) \ if(nb_handle->proc < 0) { \ nb_handle->tag = GET_NEXT_NBTAG(); \ nb_handle->op = op_type; \ nb_handle->proc = p; \ nb_handle->bufid= NB_NONE; \ } \ else if(nb_handle->op != op_type) \ armci_die("ARMCI_NbXXX: AGG_INIT_NB_HANDLE(): Aggregate Failed, Invalid non-blocking handle", nb_handle->op); \ else if(nb_handle->proc != p) \ armci_die("ARMCI_NbXXX: AGG_INIT_NB_HANDLE(): Aggregate Failed, Invalid non-blocking handle", p) /* initialize/set the fields in the buffer*/ #define _armci_agg_set_buffer(index, tag, proc, len) { \ aggr[(index)]->tag = (tag); \ aggr[(index)]->proc = (proc); \ aggr[(index)]->request_len = (len); \ ulist.index[ulist.size++] = (index);/* add the new index to the in-use list and increment it's size*/ \ } /* get the index of the aggregation buffer to be used */ static int _armci_agg_get_bufferid(armci_ihdl_t nb_handle) { int i, index, tag = nb_handle->tag, proc = nb_handle->proc; /* check if there is an entry for this handle in the existing list*/ for(i=ulist.size-1; i>=0; i--) { index = ulist.index[i]; if(aggr[index]->tag == tag && aggr[index]->proc == proc) return index; } /* else it is a new handle, so get a aggr buffer from either of the lists. ???? don't throw exception here */ if(ulist.size >= _MAX_AGG_BUFFERS && alist.size == 0) armci_die("_armci_agg_get_index: Too many outstanding aggregation requests\n", ulist.size); /*If there is a buffer in readily available list,use it*/ if(alist.size > 0) index = alist.index[--alist.size]; else { /* else use/get a buffer from the main list */ index = ulist.size; /* allocate memory for aggregate request handle */ aggr[index] = (agg_req_t *)agg_buf[index]; aggr[index]->request_len = 0; aggr[index]->ptr_array_len = 0; aggr[index]->buf_pos_end = _MAX_AGG_BUFSIZE; /* allocate memory for giov vector field in aggregate request handler */ aggr[index]->darr = (armci_giov_t *)(agg_buf[index]+sizeof(agg_req_t)); } _armci_agg_set_buffer(index, tag, proc, 0); return index; } static void _armci_agg_update_lists(int index) { int i; /* remove that index from the in-use list and bring the last element in the in-use list to the position of the removed one. */ for(i=0; irequest_len; /* index of giov descriptor */ bytes_remaining = aggr[index]->buf_pos_end - (sizeof(agg_req_t) + aggr[index]->request_len*sizeof(armci_giov_t)); /* extra bytes required to store registered put data */ if(is_registered_put) bytes_needed = bytes; /* if (byte-)sizes are equal, use previously created descriptor else get a new descriptor */ if( rid && bytes==aggr[index]->darr[rid-1].bytes) --rid; else { get_new_descr=1; bytes_needed += sizeof(armci_giov_t); } /* If buffer is full, then complete data transfer. After completion, if still ptr array_len is greater than maximum limit(_MAX_PTRS), then do it by parts. Determine new ptr_array_len that fits buffer */ if( (bytes_needed > bytes_remaining) || (_MAX_PTRS - aggr[index]->ptr_array_len < *ptr_array_len)) { armci_agg_complete(nb_handle, SET); rid = 0; get_new_descr=1; if(*ptr_array_len > _MAX_PTRS) *ptr_array_len = _MAX_PTRS; } /* if new descriptor, allocate memory for src_ptr & dst_ptr arrays */ if(get_new_descr) { int i = aggr[index]->ptr_array_len; aggr[index]->darr[rid].src_ptr_array = (void **)&agg_src_ptr[index][i]; aggr[index]->darr[rid].dst_ptr_array = (void **)&agg_dst_ptr[index][i]; aggr[index]->darr[rid].ptr_array_len = 0; aggr[index]->request_len++; } /* store registered put data */ if(is_registered_put) { aggr[index]->buf_pos_end -= bytes; memcpy(&((char *)aggr[index])[aggr[index]->buf_pos_end], *((char **)registered_put_data), bytes); *(char **)registered_put_data = (char *)&((char *)aggr[index])[aggr[index]->buf_pos_end]; } aggr[index]->ptr_array_len += *ptr_array_len; return (&aggr[index]->darr[rid]); } int armci_agg_save_descriptor(void *src, void *dst, int bytes, int proc, int op, int is_registered_put, armci_ihdl_t nb_handle) { int one=1, idx; armci_giov_t * darr; /* set up the handle if it is a new aggregation request */ AGG_INIT_NB_HANDLE(op, proc, nb_handle); darr = _armci_agg_get_descriptor(&one, bytes, nb_handle, is_registered_put, &src); idx = darr->ptr_array_len; darr->src_ptr_array[idx] = src; darr->dst_ptr_array[idx] = dst; darr->bytes = bytes; darr->ptr_array_len += 1; fflush(stdout); return 0; } int armci_agg_save_giov_descriptor(armci_giov_t dscr[], int len, int proc, int op, armci_ihdl_t nb_handle) { int i, j, k, idx, bytes, ptr_array_len; armci_giov_t * darr; /* set up the handle if it is a new aggregation request */ AGG_INIT_NB_HANDLE(op, proc, nb_handle); for(i=0; iptr_array_len; for(j=idx; jsrc_ptr_array[j] = dscr[i].src_ptr_array[k]; darr->dst_ptr_array[j] = dscr[i].dst_ptr_array[k]; } darr->bytes = dscr[i].bytes; darr->ptr_array_len += ptr_array_len; ptr_array_len = dscr[i].ptr_array_len - ptr_array_len; if(ptr_array_len <0) armci_die("agg_save_giov_descr failed", 0L); } while(k < darr[i].ptr_array_len); } return 0; } int armci_agg_save_strided_descriptor(void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, int proc, int op, armci_ihdl_t nb_handle) { int i, j, k, idx, ptr_array_len=1, total1D=1, num1D=0; int offset1, offset2, factor[MAX_STRIDE_LEVEL]; armci_giov_t * darr; /* set up the handle if it is a new aggregation request */ AGG_INIT_NB_HANDLE(op, proc, nb_handle); for(i=1; i<=stride_levels; i++) { total1D *= count[i]; factor[i-1]=0; } ptr_array_len = total1D; do { darr=_armci_agg_get_descriptor(&ptr_array_len,count[0],nb_handle,0,0); idx = darr->ptr_array_len; /* converting stride into giov vector */ for(i=idx; isrc_ptr_array[i] = (char *)src_ptr + offset1; darr->dst_ptr_array[i] = (char *)dst_ptr + offset2; ++factor[0]; ++num1D; for(j=1; jbytes = count[0]; darr->ptr_array_len += ptr_array_len; ptr_array_len = total1D - ptr_array_len; if(ptr_array_len <0) armci_die("agg_save_strided_descr failed", 0L); } while(num1D < total1D); return 0; } void armci_agg_complete(armci_ihdl_t nb_handle, int condition) { int i, index=0, rc; /* get the buffer index for this handle */ for(i=ulist.size-1; i>=0; i--) { index = ulist.index[i]; if(aggr[index]->tag == nb_handle->tag && aggr[index]->proc == nb_handle->proc) break; } if(i<0) return; /* implies this handle has no requests at all */ #if 0 printf("%d: Aggregation Complete to remote process %d (%d:%d requests)\n", armci_me, nb_handle->proc, index, aggr[index]->request_len); #endif /* complete the data transfer. NOTE: in LAPI, Non-blocking calls (followed by wait) performs better than blocking put/get */ if(aggr[index]->request_len) { switch(nb_handle->op) { #ifdef LAPI armci_hdl_t usr_hdl; case PUT: ARMCI_INIT_HANDLE(&usr_hdl); if((rc=PARMCI_NbPutV(aggr[index]->darr, aggr[index]->request_len, nb_handle->proc, (armci_hdl_t*)&usr_hdl))) ARMCI_Error("armci_agg_complete: nbputv failed",rc); PARMCI_Wait((armci_hdl_t*)&usr_hdl); break; case GET: ARMCI_INIT_HANDLE(&usr_hdl); if((rc=PARMCI_NbGetV(aggr[index]->darr, aggr[index]->request_len, nb_handle->proc, (armci_hdl_t*)&usr_hdl))) ARMCI_Error("armci_agg_complete: nbgetv failed",rc); PARMCI_Wait((armci_hdl_t*)&usr_hdl); break; #else case PUT: if((rc=PARMCI_PutV(aggr[index]->darr, aggr[index]->request_len, nb_handle->proc))) ARMCI_Error("armci_agg_complete: putv failed",rc); break; case GET: if((rc=PARMCI_GetV(aggr[index]->darr, aggr[index]->request_len, nb_handle->proc))) ARMCI_Error("armci_agg_complete: getv failed",rc); break; #endif } } /* setting request length to zero, as the requests are completed */ aggr[index]->request_len = 0; aggr[index]->ptr_array_len = 0; aggr[index]->buf_pos_end = _MAX_AGG_BUFSIZE; /* If armci_agg_complete() is called PARMCI_Wait(), then unset nb_handle*/ if(condition==UNSET) { nb_handle->proc = -1; _armci_agg_update_lists(index); } } ga-5-3/armci/src-gemini/clusterinfo.c0000640005473000001440000003434211744312006016431 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: clusterinfo.c,v 1.36.2.3 2007-06-13 00:46:13 vinod Exp $ */ /****************************************************************************** * file: cluster.c * purpose: Determine cluster info i.e., number of machines and processes * running on each of them. * *******************************************************************************/ #include #include #include #ifdef unix #include #endif #include "message.h" #include "armcip.h" #ifdef WIN32 /* this is where gethostbyname is declared */ # include #endif /* NO_SHMEM enables to simulate cluster environment on a single workstation. * Must define NO_SHMMAX_SEARCH in shmem.c to prevent depleting shared memory * due to a gready shmem request by the master process on cluster node 0. */ #if defined(DECOSF) && defined(QUADRICS) # if !defined(REGION_ALLOC) # define NO_SHMEM extern int armci_enable_alpha_hack(); # endif #else # define armci_enable_alpha_hack() 1 #endif #define DEBUG 0 #define MAX_HOSTNAME 80 #define CHECK_NODE_NAMES /* print info on how many cluster nodes detected */ #ifdef CLUSTER # define PRINT_CLUSTER_INFO 1 #else # define PRINT_CLUSTER_INFO 0 #endif #if defined(GM) static char *network_protocol="Myrinet GM"; #elif defined(VIA) static char *network_protocol="VIA"; #elif defined(MELLANOX) static char *network_protocol="Mellanox Verbs API"; #elif defined(OPENIB) static char *network_protocol="OpenIB Verbs API"; #elif defined(DOELAN4) static char *network_protocol="Quadrics ELAN-4"; #elif defined(QUADRICS) static char *network_protocol="Quadrics ELAN-3"; #elif defined(PM) static char *network_protocol="Score PM"; #elif defined(PORTALS) static char *network_protocol="PORTALS"; #elif defined(MPI_SPAWN) static char *network_protocol="MPI-SPAWN"; #elif defined(LIBONESIDED) static char *network_protocol="Cray Onesided"; #else static char *network_protocol="TCP/IP Sockets"; #endif /*** stores cluster configuration ***/ armci_clus_t *armci_clus_info; #ifdef HITACHI #include # define GETHOSTNAME sr_gethostname ndes_t _armci_group; static int sr_gethostname(char *name, int len) { int no; pid_t ppid; if(hmpp_nself (&_armci_group,&no,&ppid,0,NULL) <0) return -1; if(len<6)armci_die("len too small",len); if(no>1024)armci_die("expected node id <1024",no); sprintf(name,"n%d",no); return 0; } #elif defined(SGIALTIX) # define GETHOSTNAME altix_gethostname static int altix_gethostname(char *name, int len) { sprintf(name,"altix"); return 0; } #elif defined(XT3) && !defined(PORTALS) #define GETHOSTNAME cnos_gethostname static int cnos_gethostname(char *name, int len) { sprintf(name,"%d",cnos_get_rank()); } #else # define GETHOSTNAME gethostname #endif static char* merge_names(char *name) { int jump = 1, rem, to, from; int lenmes, lenbuf, curlen, totbuflen= armci_nproc*HOSTNAME_LEN; int len = strlen(name); char *work = malloc(totbuflen); if(!work)armci_die("armci: merge_names: malloc failed: ",totbuflen); strcpy(work, name); curlen = len+1; /* prefix tree merges names in the order of process numbering in log(P)time * result = name_1//name_2//...//name_P-1 */ do { jump *= 2; rem = armci_me%jump; if(rem){ to = armci_me - rem; armci_msg_snd(ARMCI_TAG, work, curlen, to); break; }else{ from = armci_me + jump/2; if(from < armci_nproc){ lenbuf = totbuflen - curlen; armci_msg_rcv(ARMCI_TAG, work+curlen, lenbuf, &lenmes, from); curlen += lenmes; } } }while (jump < armci_nproc); return(work); } static void process_hostlist(char *names) { #ifdef CLUSTER int i, cluster=0; char *s,*master; int len, root=0; /******** inspect list of machine names to determine locality ********/ if (armci_me==0){ /* first find out how many cluster nodes we got */ armci_nclus =1; s=master=names; for(i=1; i < armci_nproc; i++){ s += strlen(s)+1; if(strcmp(s,master)){ /* we found a new machine name on the list */ master = s; armci_nclus++; /*fprintf(stderr,"new name %s len =%d\n",master, strlen(master));*/ } } /* allocate memory */ armci_clus_info = (armci_clus_t*)malloc(armci_nclus*sizeof(armci_clus_t)); if(!armci_clus_info)armci_die("malloc failed for clusinfo",armci_nclus); /* fill the data structure -- go through the list again */ s=names; master="*-"; /* impossible hostname */ cluster =0; for(i=0; i < armci_nproc; i++){ if(strcmp(s,master)){ /* we found a new machine name on the list */ master = s; armci_clus_info[cluster].nslave=1; armci_clus_info[cluster].master=i; strcpy(armci_clus_info[cluster].hostname, master); #ifdef CHECK_NODE_NAMES /* need consecutive task id allocated on the same node * the current test only compares hostnames against first cluster */ if(cluster) if(!strcmp(master,armci_clus_info[0].hostname)){ /* we have seen that hostname before */ fprintf(stderr, "\nIt appears that tasks allocated on the same"); fprintf(stderr, " host machine do not have\n"); fprintf(stderr, "consecutive message-passing IDs/numbers. "); fprintf(stderr,"This is not acceptable \nto the ARMCI library "); fprintf(stderr,"as it prevents SMP optimizations and would\n"); fprintf(stderr,"lead to poor resource utilization.\n\n"); fprintf(stderr,"Please contact your System Administrator "); fprintf(stderr,"or, if you can, modify the "); # if defined(MPI) fprintf(stderr,"MPI"); # elif defined(TCGMSG) fprintf(stderr,"TCGMSG"); # elif defined(PVM) fprintf(stderr,"PVM"); # endif fprintf(stderr,"\nmessage-passing job startup configuration.\n\n"); #ifdef HITACHI fprintf(stderr,"On Hitachi it can be done by setting environment variable MPIR_RANK_NO_ROUND, for example\n setenv MPIR_RANK_NO_ROUND yes\n\n"); #endif sleep(1); armci_die("Cannot run: improper task to host mapping!",0); } #endif cluster++; }else{ /* the process is still on the same host */ armci_clus_info[cluster-1].nslave++; } s += strlen(s)+1; } if(armci_nclus != cluster) armci_die("inconsistency processing clusterinfo",armci_nclus); } /******** process 0 got all data ********/ /* now broadcast locality info struct to all processes * two steps are needed because of the unknown length of hostname list */ len = sizeof(int); armci_msg_brdcst(&armci_nclus, len, root); if(armci_me){ /* allocate memory */ armci_clus_info = (armci_clus_t*)malloc(armci_nclus*sizeof(armci_clus_t)); if(!armci_clus_info)armci_die("malloc failed for clusinfo",armci_nclus); } len = sizeof(armci_clus_t)*armci_nclus; armci_msg_brdcst(armci_clus_info, len, root); /******** all processes 0 got all data ********/ /* now determine current cluster node id by comparing me to master */ armci_clus_me = armci_nclus-1; for(i =0; i< armci_nclus-1; i++) if(armci_me < armci_clus_info[i+1].master){ armci_clus_me=i; break; } #else armci_clus_me=0; armci_nclus=1; armci_clus_info = (armci_clus_t*)malloc(armci_nclus*sizeof(armci_clus_t)); if(!armci_clus_info)armci_die("malloc failed for clusinfo",armci_nclus); strcpy(armci_clus_info[0].hostname, names); armci_clus_info[0].master=0; armci_clus_info[0].nslave=armci_nproc; #endif armci_clus_first = armci_clus_info[armci_clus_me].master; armci_clus_last = armci_clus_first +armci_clus_info[armci_clus_me].nslave-1; } /*\ Substring Replacement: replace needle with nail in a haystack \*/ static char *substr_replace(char *haystack, char *needle, char *nail) { char *tmp, *pos, *first; size_t len=strlen(needle), nlen=strlen(nail),bytes; size_t left; pos = strstr(haystack,needle); if (pos ==NULL) return NULL; first= tmp = calloc(strlen(haystack)+nlen-len+1+1,1); if(first==NULL) return(NULL); bytes = pos - haystack; while(bytes){ *tmp = *haystack; tmp++; haystack++; bytes--;} while(nlen) { *tmp = *nail; tmp++; nail++; nlen--;} haystack += len; left = strlen(haystack); while(left>0){*tmp = *haystack; tmp++; haystack++; left --;} *tmp='\0'; return(first); } /*\ ARMCI_HOSTNAME_REPLACE contains "needle/nail" string to derive new hostname \*/ static char *new_hostname(char *host) { char *tmp, *needle, *nail; if((tmp =getenv("ARMCI_HOSTNAME_REPLACE"))){ needle = strdup(tmp); if(needle== NULL) return NULL; nail = strchr(needle,'/'); if(nail == NULL) return NULL; *nail = '\0'; nail++; if(nail == (needle+1)){ char* tmp1 = calloc(strlen(host)+strlen(nail)+1,1); if(tmp1 == NULL) return NULL; strcpy(tmp1,host); strcat(tmp1,nail); return tmp1; } return substr_replace(host,needle,nail); } else return NULL; } static void print_clus_info() { int i; if(PRINT_CLUSTER_INFO && armci_nclus >1 && armci_me ==0){ #if defined(DATA_SERVER) || defined(SERVER_THREAD) printf("ARMCI configured for %d cluster nodes. Network protocol is '%s'.\n", armci_nclus, network_protocol); #else printf("ARMCI configured for %d cluster nodes\n", armci_nclus); #endif fflush(stdout); } if(armci_me==0 && DEBUG) for(i=0;i= MAX_HOSTNAME) armci_die("armci: hostname too long",strlen(tmp)); strcpy(name,tmp); printf("%d using %s hostname\n",armci_me, name); fflush(stdout); } len = strlen(name); /*a simple way to run as many servers as compute processes*/ enval = getenv("ARMCI_NSERV_EQ_NPROC"); if(enval != NULL){ sprintf(name+len,"n%d",getpid()); len = strlen(name); printf("\n%s\n",name); } #ifdef HOSTNAME_TRUNCATE { /* in some cases (e.g.,SP) when name is used to determine * cluster structure but not to establish communication * we can truncate hostnames to save memory */ int i; limit = HOSTNAME_LEN-1; for(i=0; i",i+1); } if(len>limit)name[limit]='\0'; len =limit; } #else if(len >= HOSTNAME_LEN-1) armci_die("armci: gethostname overrun name string length",len); #endif #ifdef NO_SHMEM if(armci_enable_alpha_hack()) { name[len]='0'+armci_me; name[len+1]='\0'; len++; } #endif if(DEBUG) fprintf(stderr,"%d: %s len=%d\n",armci_me, name,(int)strlen(name)); #ifdef CLUSTER merged = merge_names(name); /* create hostname list */ process_hostlist(merged); /* compute cluster info */ free(merged); #else process_hostlist(name); /* compute cluster info */ #endif #ifndef NO_SHMEM armci_set_shmem_limit_per_node(armci_clus_info[0].nslave); #endif armci_master = armci_clus_info[armci_clus_me].master; #ifdef NO_SHMEM if(armci_enable_alpha_hack()) { int i; for(i=0;i= armci_nproc)armci_die("armci_clus_id: out of range",p); if(p < armci_clus_first){ from = 0; to = armci_clus_me;} else {from = armci_clus_me; to = armci_nclus;} found = to-1; for(c = from; c< to-1; c++) if(p < armci_clus_info[c+1].master){ found=c; break; } return (found); } int armci_smp_master(int i) { return(armci_clus_info[i].master); } /*\ return number of processes in the domain represented by id; id<0 means my node \*/ int armci_domain_nprocs(armci_domain_t domain, int id) { if(id>= armci_nclus) armci_die2("armci domain error",id,armci_nclus); if(id<0) id = armci_clus_me; return armci_clus_info[id].nslave; } /*\ return number of nodes in diven domain \*/ int armci_domain_count(armci_domain_t domain) { return armci_nclus; } /*\ return domain ID of the specified process \*/ int armci_domain_id(armci_domain_t domain, int glob_proc_id) { int id = glob_proc_id; if(id<0 || id>= armci_nproc) armci_die2("armci domain error",id,armci_nproc); return armci_clus_id(glob_proc_id); } /*\ return global ID of a process loc_proc_id in domain identified by id * armci_domain_nproc(id)< loc_proc_id >=0 \*/ int armci_domain_glob_proc_id(armci_domain_t domain, int id, int loc_proc_id) { if(id<0 || id>= armci_nclus) armci_die2("armci domain error",id,armci_nclus); if(loc_proc_id<0 || loc_proc_id>= armci_clus_info[id].nslave) armci_die2("armci domain proc error",loc_proc_id,armci_clus_info[id].nslave); return (armci_clus_info[id].master + loc_proc_id); } /*\ return ID of domain that the calling process belongs to \*/ int armci_domain_my_id(armci_domain_t domain) { return(armci_clus_me); } int armci_domain_same_id (armci_domain_t domain, int proc) { int rc = SAMECLUSNODE(proc); return(rc); } ga-5-3/armci/src-gemini/memory.c0000640005473000001440000010277611711606516015421 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: memory.c,v 1.56.2.3 2007-04-25 23:49:55 d3p687 Exp $ */ #ifndef NEW_MALLOC #include #include #include "armcip.h" #include "message.h" #include "kr_malloc.h" #define DEBUG_ 0 #define USE_MALLOC #define USE_SHMEM_ #define SHM_UNIT 1024 static context_t ctx_localmem; /* static context_t ctx_mlocalmem; */ #if defined(SYSV) || defined(WIN32) || defined(MMAP) || defined(HITACHI) #include "shmem.h" #if !defined(USE_SHMEM) && (defined(HITACHI) || defined(MULTI_CTX)) # define USE_SHMEM #endif #if !(defined(LAPI)||defined(QUADRICS)||defined(SERVER_THREAD)) ||\ defined(USE_SHMEM)||defined(LIBONESIDED) #define RMA_NEEDS_SHMEM #endif void kr_check_local() { #if 0 kr_malloc_print_stats(&ctx_localmem); #endif kr_malloc_verify(&ctx_localmem); } void armci_print_ptr(void **ptr_arr, int bytes, int size, void* myptr, int off) { int i; int nproc = armci_clus_info[armci_clus_me].nslave; ARMCI_PR_DBG("enter",0); for(i=0; i< armci_nproc; i++){ int j; if(armci_me ==i){ printf("%d master =%d nproc=%d off=%d\n",armci_me, armci_master,nproc, off); printf("%d:bytes=%d mptr=%p s=%d ",armci_me, bytes, myptr,size); for(j = 0; j< armci_nproc; j++)printf(" %p",ptr_arr[j]); printf("\n"); fflush(stdout); } armci_msg_barrier(); } ARMCI_PR_DBG("exit",0); } /*\ master exports its address of shmem region at the beggining of that region \*/ static void armci_master_exp_attached_ptr(void* ptr) { ARMCI_PR_DBG("enter",0); if(!ptr) armci_die("armci_master_exp_att_ptr: null ptr",0); *(volatile void**)ptr = ptr; ARMCI_PR_DBG("exit",0); } /*\ Collective Memory Allocation on shared memory systems \*/ void armci_shmem_malloc(void *ptr_arr[], armci_size_t bytes) { void *myptr=NULL, *ptr=NULL; long idlist[SHMIDLEN]; long size=0, offset=0; long *size_arr; void **ptr_ref_arr; int i,cn, len; int nproc = armci_clus_info[armci_clus_me].nslave; ARMCI_PR_DBG("enter",0); bzero((char*)ptr_arr,armci_nproc*sizeof(void*)); /* allocate work arrays */ size_arr = (long*)calloc(armci_nproc,sizeof(long)); if(!size_arr)armci_die("armci_malloc:calloc failed",armci_nproc); /* allocate arrays for cluster address translations */ ptr_ref_arr = calloc(armci_nclus,sizeof(void*)); /* must be zero */ if(!ptr_ref_arr)armci_die("armci_malloc:calloc 2 failed",armci_nclus); /* combine all memory requests into size_arr */ size_arr[armci_me] = bytes; armci_msg_lgop(size_arr, armci_nproc, "+"); /* determine aggregate request size on the cluster node */ for(i=0, size=0; i< nproc; i++) size += size_arr[i+armci_master]; /* master process creates shmem region and then others attach to it */ if(armci_me == armci_master ){ /* can malloc if there is no data server process and has 1 process/node*/ # ifndef RMA_NEEDS_SHMEM if(nproc == 1) myptr = kr_malloc(size, &ctx_localmem, 0, NULL, NULL); else # endif myptr = Create_Shared_Region(idlist+1,size,idlist); if(!myptr && size>0 )armci_die("armci_malloc: could not create", (int)(size>>10)); /* place its address at begining of attached region for others to see */ if(size)armci_master_exp_attached_ptr(myptr); if(DEBUG_){ printf("%d:armci_malloc addr mptr=%p size=%ld\n",armci_me,myptr,size); fflush(stdout); } } /* broadcast shmem id to other processes on the same cluster node */ armci_msg_clus_brdcst(idlist, SHMIDLEN*sizeof(long)); if(armci_me != armci_master){ myptr=(double*)Attach_Shared_Region(idlist+1,size,idlist[0]); if(!myptr)armci_die("armci_malloc: could not attach", (int)(size>>10)); /* now every process in a SMP node needs to find out its offset * w.r.t. master - this offset is necessary to use memlock table */ if(size) armci_set_mem_offset(myptr); if(DEBUG_){ printf("%d:armci_malloc attached addr mptr=%p ref=%p size=%ld\n", armci_me,myptr, *(void**)myptr,size); fflush(stdout); } } # if defined(DATA_SERVER) /* get server reference address for every cluster node to perform * remote address translation for global address space */ if(armci_nclus>1){ if(armci_me == armci_master){ # ifdef SERVER_THREAD ptr_ref_arr[armci_clus_me]=myptr; # else { extern int _armci_server_started; if(_armci_server_started) { armci_serv_attach_req(idlist, SHMIDLEN*sizeof(long), size, &ptr, sizeof(void*)); ptr_ref_arr[armci_clus_me]= myptr; /* from server*/ } else /* server not yet started */ ptr_ref_arr[armci_clus_me]=myptr; } if(DEBUG_){ printf("%d:addresses server=%p myptr=%p\n",armci_me,ptr,myptr); fflush(stdout); } # endif } /* exchange ref addr of shared memory region on every cluster node*/ armci_exchange_address(ptr_ref_arr, armci_nclus); # ifdef ARMCI_REGISTER_SHMEM armci_register_shmem(myptr,size,idlist+1,idlist[0],ptr_ref_arr[armci_clus_me]); # endif }else { ptr_ref_arr[armci_master] = myptr; } /* translate addresses for all cluster nodes */ for(cn = 0; cn < armci_nclus; cn++){ int master = armci_clus_info[cn].master; offset = 0; /* on local cluster node use myptr directly */ ptr = (armci_clus_me == cn) ? myptr: ptr_ref_arr[cn]; /* compute addresses pointing to the memory regions on cluster node*/ for(i=0; i< armci_clus_info[cn].nslave; i++){ /* NULL if request size is 0*/ ptr_arr[i+master] = (size_arr[i+master])? ((char*)ptr)+offset : NULL; offset += size_arr[i+master]; } } # else /* compute addresses for local cluster node */ offset =0; for(i=0; i< nproc; i++) { ptr_ref_arr[i] = (size_arr[i+armci_master])? ((char*)myptr)+offset : 0L; offset += size_arr[i+armci_master]; } /* exchange addreses with all other processes */ ptr_arr[armci_me] = (char*)ptr_ref_arr[armci_me-armci_master]; armci_exchange_address(ptr_arr, armci_nproc); /* overwrite entries for local cluster node with ptr_ref_arr */ bcopy((char*)ptr_ref_arr, (char*)(ptr_arr+armci_master), nproc*sizeof(void*)); /* armci_print_ptr(ptr_arr, bytes, size, myptr, offset);*/ # endif armci_msg_barrier(); /* free work arrays */ free(ptr_ref_arr); free(size_arr); ARMCI_PR_DBG("exit",0); } /******************************************************************** * Non-collective Memory Allocation on shared memory systems \*/ void armci_shmem_memget(armci_meminfo_t *meminfo, size_t size) { void *myptr=NULL; void *armci_ptr=NULL; /* legal ARCMIptr used in ARMCI data xfer ops */ long idlist[SHMIDLEN]; /* can malloc if there is no data server process & has 1 process/node*/ #ifndef RMA_NEEDS_SHMEM if( armci_clus_info[armci_clus_me].nslave == 1) myptr = kr_malloc(size, &ctx_localmem, 0, NULL, NULL); else #endif myptr = Create_Shared_Region(idlist+1,size,idlist); if(!myptr && size>0 ) armci_die("armci_shmem_memget: create failed", (int)(size>>10)); if(DEBUG_) { printf("%d: armci_shmem_memget: addr=%p size=%ld %ld %ld \n", armci_me, myptr, size, idlist[0], idlist[1]); fflush(stdout); } armci_ptr = myptr; #if defined(DATA_SERVER) /* get server reference address to perform * remote address translation for global address space */ if(armci_nclus>1) { # ifdef SERVER_THREAD /* data server thread runs on master process */ if(armci_me != armci_master) { armci_serv_attach_req(idlist, SHMIDLEN*sizeof(long), size, &armci_ptr, sizeof(void*)); } # else /* ask dataserver process to attach to region and get ptr*/ { extern int _armci_server_started; if(_armci_server_started) { armci_serv_attach_req(idlist, SHMIDLEN*sizeof(long), size, &armci_ptr, sizeof(void*)); } } # endif } #endif /* fill the meminfo structure */ meminfo->armci_addr = armci_ptr; meminfo->addr = myptr; meminfo->size = size; meminfo->cpid = armci_me; bcopy(idlist, meminfo->idlist, SHMIDLEN*sizeof(long)); } void* armci_shmem_memat(armci_meminfo_t *meminfo) { void *ptr=NULL; long size = (long) meminfo->size; long *idlist = (long*) meminfo->idlist; if(SAMECLUSNODE(meminfo->cpid)) { /* Attach to the shared memory segment */ ptr=(double*)Attach_Shared_Region(idlist+1,size,idlist[0]); if(!ptr)armci_die("ARMCi_Memat: could not attach", (int)(size>>10)); /* CHECK: now every process in a SMP node needs to find out its offset * w.r.t. master - this offset is necessary to use memlock table */ if(size) armci_set_mem_offset(ptr); } else { ptr = meminfo->armci_addr; /* remote address */ } return ptr; } void armci_shmem_memctl(armci_meminfo_t *meminfo) { /* only the creator can delete the segment */ if(meminfo->cpid == armci_me) { void *ptr = meminfo->addr; #ifdef RMA_NEEDS_SHMEM Free_Shmem_Ptr(0,0,ptr); #else if(armci_clus_info[armci_clus_me].nslave>1) Free_Shmem_Ptr(0,0,ptr); else kr_free(ptr, &ctx_localmem); #endif } } /****** End: Non-collective memory allocation on shared memory systems *****/ #ifdef MPI /******************************************************************** * Group Memory Allocation on shared memory systems for ARMCI Groups \*/ void armci_shmem_malloc_group(void *ptr_arr[], armci_size_t bytes, ARMCI_Group *group) { void *myptr=NULL, *ptr=NULL; long idlist[SHMIDLEN]; long size=0, offset=0; long *size_arr; void **ptr_ref_arr; int i,cn, len; /* int nproc = armci_clus_info[armci_clus_me].nslave; ? change ? */ int grp_me, grp_nproc, grp_nclus, grp_master, grp_clus_nproc, grp_clus_me; armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); ARMCI_PR_DBG("enter",0); /* Get the group info: group size & group rank */ ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); if(grp_me == MPI_UNDEFINED) { /* check if the process is in this group */ armci_die("armci_malloc_group: process is not a member in this group", armci_me); } grp_nclus = grp_attr->grp_nclus; grp_clus_me = grp_attr->grp_clus_me; grp_master = grp_attr->grp_clus_info[grp_clus_me].master; grp_clus_nproc = grp_attr->grp_clus_info[grp_clus_me].nslave; bzero((char*)ptr_arr,grp_nproc*sizeof(void*)); /* allocate work arrays */ size_arr = (long*)calloc(grp_nproc,sizeof(long)); if(!size_arr)armci_die("armci_malloc_group:calloc failed",grp_nproc); /* allocate arrays for cluster address translations */ # if defined(DATA_SERVER) len = grp_nclus; # else len = grp_clus_nproc; # endif ptr_ref_arr = calloc(len,sizeof(void*)); /* must be zero */ if(!ptr_ref_arr)armci_die("armci_malloc_group:calloc 2 failed",len); /* combine all memory requests into size_arr */ size_arr[grp_me] = bytes; armci_msg_group_gop_scope(SCOPE_ALL, size_arr, grp_nproc, "+", ARMCI_LONG, group); /* determine aggregate request size on the cluster node */ for(i=0, size=0; i< grp_clus_nproc; i++) size += size_arr[i+grp_master]; /* master process creates shmem region and then others attach to it */ if(grp_me == grp_master ){ /* can malloc if there is no data server process and has 1 process/node*/ # ifndef RMA_NEEDS_SHMEM if( armci_clus_info[armci_clus_me].nslave == 1) myptr = kr_malloc(size, &ctx_localmem, 0, NULL, NULL); else # endif myptr = Create_Shared_Region(idlist+1,size,idlist); if(!myptr && size>0 ) armci_die("armci_malloc_group: could not create", (int)(size>>10)); /* place its address at begining of attached region for others to see */ if(size)armci_master_exp_attached_ptr(myptr); if(DEBUG_){ printf("%d:armci_malloc_group addr mptr=%p ref=%p size=%ld %ld %ld \n",armci_me,myptr,*(void**)myptr, size,idlist[0],idlist[1]); fflush(stdout); } } /* broadcast shmem id to other processes (in the same group) on the same cluster node */ armci_grp_clus_brdcst(idlist, SHMIDLEN*sizeof(long), grp_master, grp_clus_nproc, group); if(grp_me != grp_master){ myptr=(double*)Attach_Shared_Region(idlist+1,size,idlist[0]); if(!myptr)armci_die("armci_malloc_group: could not attach", (int)(size>>10)); /* now every process in a SMP node needs to find out its offset * w.r.t. master - this offset is necessary to use memlock table */ if(size) armci_set_mem_offset(myptr); if(DEBUG_){ printf("%d:armci_malloc_group attached addr mptr=%p ref=%p size=%ld\n", armci_me,myptr, *(void**)myptr,size); fflush(stdout); } } # if defined(DATA_SERVER) /* get server reference address for every cluster node in the group * to perform remote address translation for global address space */ if(grp_nclus>1){ if(grp_me == grp_master){ # ifdef SERVER_THREAD /* data server thread runs on master process */ if(ARMCI_Absolute_id(group,grp_master)!=armci_master){ /*printf("\n%d: grp_master=%d %ld %ld \n",armci_me,ARMCI_Absolute_id(group,grp_master),idlist[0],idlist[1]);*/ armci_serv_attach_req(idlist, SHMIDLEN*sizeof(long), size, &ptr, sizeof(void*)); ptr_ref_arr[grp_clus_me]= ptr; /* from server*/ } else ptr_ref_arr[grp_clus_me]=myptr; # else /* ask data server process to attach to the region and get ptr */ { extern int _armci_server_started; if(_armci_server_started) { armci_serv_attach_req(idlist, SHMIDLEN*sizeof(long), size, &ptr, sizeof(void*)); ptr_ref_arr[grp_clus_me]= ptr; /* from server*/ } else /* server not yet started */ ptr_ref_arr[grp_clus_me]=myptr; } if(DEBUG_){ printf("%d:addresses server=%p myptr=%p\n",grp_me,ptr,myptr); fflush(stdout); } # endif } /* exchange ref addr of shared memory region on every cluster node*/ { int ratio = sizeof(void*)/sizeof(int); if(DEBUG_)printf("%d: exchanging %ld ratio=%d\n",armci_me, (long)ptr_arr[grp_me], ratio); armci_msg_group_gop_scope(SCOPE_ALL, ptr_ref_arr, grp_nclus*ratio, "+", ARMCI_INT, group); # ifdef ARMCI_REGISTER_SHMEM armci_register_shmem_grp(myptr,size,idlist+1,idlist[0],ptr_ref_arr[armci_clus_me],group); # endif } }else { ptr_ref_arr[grp_master] = myptr; } /* translate addresses for all cluster nodes */ for(cn = 0; cn < grp_nclus; cn++){ int master = grp_attr->grp_clus_info[cn].master; offset = 0; /* on local cluster node use myptr directly */ ptr = (grp_clus_me == cn) ? myptr: ptr_ref_arr[cn]; /* compute addresses pointing to the memory regions on cluster node*/ for(i=0; i< grp_attr->grp_clus_info[cn].nslave; i++){ /* NULL if request size is 0*/ ptr_arr[i+master] =(size_arr[i+master])? ((char*)ptr)+offset: NULL; offset += size_arr[i+master]; } } # else /* compute addresses for local cluster node */ offset =0; for(i=0; i< grp_clus_nproc; i++) { ptr_ref_arr[i] = (size_arr[i+grp_master])? ((char*)myptr)+offset : 0L; offset += size_arr[i+grp_master]; } /* exchange addreses with all other processes */ ptr_arr[grp_me] = (char*)ptr_ref_arr[grp_me-grp_master]; armci_exchange_address_grp(ptr_arr, grp_nproc, group); /* overwrite entries for local cluster node with ptr_ref_arr */ bcopy((char*)ptr_ref_arr, (char*)(ptr_arr+grp_master), grp_clus_nproc*sizeof(void*)); # endif /* armci_print_ptr(ptr_arr, bytes, size, myptr, offset);*/ armci_msg_group_barrier(group); /* free work arrays */ free(ptr_ref_arr); free(size_arr); ARMCI_PR_DBG("exit",0); } #endif /* ifdef MPI */ #else void armci_shmem_malloc(void* ptr_arr[], int bytes) { armci_die("armci_shmem_malloc should never be called on this system",0); } void armci_shmem_memget(armci_meminfo_t *meminfo, size_t size) { armci_die("armci_shmem_memget should never be called on this system",0); } void* armci_shmem_memat(armci_meminfo_t *meminfo) { armci_die("armci_shmem_memat should never be called on this system",0); } void armci_shmem_memctl(armci_meminfo_t *meminfo) { armci_die("armci_shmem_memctl should never be called on this system",0); } # ifdef MPI void armci_shmem_malloc_group(void *ptr_arr[], armci_size_t bytes, ARMCI_Group *group) { armci_die("armci_shmem_malloc_group should never be called on this system",0); } # endif #endif /* public constructor to initialize the kr_malloc context */ void armci_krmalloc_init_localmem() { #if defined(ALLOW_PIN) kr_malloc_init(0, 0, 0, reg_malloc, 0, &ctx_localmem); kr_malloc_init(0, 0, 0, malloc, 0, &ctx_mlocalmem); ctx_mlocalmem.ctx_type = KR_CTX_LOCALMEM; #elif defined(CRAY_SHMEM) && defined(CRAY_XT) # ifdef CATAMOUNT int units_avail = (cnos_shmem_size() - 1024 * 1024) / SHM_UNIT; # else extern size_t get_xt_heapsize(); int units_avail = (get_xt_heapsize() - 1024 * 1024) / SHM_UNIT; # endif if(DEBUG_) { fprintf(stderr,"%d:krmalloc_init_localmem: symheap=%llu,units(%d)=%d\n", armci_me, SHM_UNIT*units_avail, SHM_UNIT, units_avail); } kr_malloc_init(SHM_UNIT, units_avail, units_avail, shmalloc, 0, &ctx_localmem); armci_shmalloc_exchange_offsets(&ctx_localmem); #else kr_malloc_init(0, 0, 0, malloc, 0, &ctx_localmem); #endif ctx_localmem.ctx_type = KR_CTX_LOCALMEM; } /** * Local Memory Allocation and Free */ void *PARMCI_Malloc_local(armci_size_t bytes) { void *rptr; ARMCI_PR_DBG("enter",0); ARMCI_PR_DBG("exit",0); rptr = (void *)kr_malloc((size_t)bytes, &ctx_localmem, 0, NULL, NULL); # ifdef CRAY_REGISTER_ARMCI_MALLOC onesided_hnd_t cp_hnd; cos_mdesc_t local_mdesc; // get the onesided v2.0 api handle for the compute process cpGetOnesidedHandle(&cp_hnd); // register the memory onesided_mem_register(cp_hnd, rptr, bytes, 0, &local_mdesc); // for now; until we can search through the linked-list of registered memory // to deregister it by pointer (ptr) value only [see ARMCI_Free_local], we'll // take advanatage of lazy deregistration and assume that this segment will // be kept around as long as it's active. onesided_mem_deregister(cp_hnd, &local_mdesc); # endif //printf("\n%d:%s:%d:%p\n",armci_me,__FUNCTION__,bytes,rptr); return rptr; } int PARMCI_Free_local(void *ptr) { ARMCI_PR_DBG("enter",0); kr_free((char *)ptr, &ctx_localmem); ARMCI_PR_DBG("exit",0); return 0; } /*\ Collective Memory Allocation * returns array of pointers to blocks of memory allocated by everybody * Note: as the same shared memory region can be mapped at different locations * in each process address space, the array might hold different values * on every process. However, the addresses are legitimate * and can be used in the ARMCI data transfer operations. * ptr_arr[nproc] \*/ int PARMCI_Malloc(void *ptr_arr[], armci_size_t bytes) { void *ptr; char *new_base; size_t new_size=0; ARMCI_PR_DBG("enter",0); if(DEBUG_){ fprintf(stderr,"%d bytes in armci_malloc %d\n",armci_me, (int)bytes); fflush(stderr); armci_msg_barrier(); } # ifdef USE_MALLOC if(armci_nproc == 1) { # ifdef CRAY_REGISTER_ARMCI_MALLOC printf("%d: special case where ARMCI_Malloc uses malloc for nppn=1 - broken!\n",armci_me); abort(); # endif ptr = kr_malloc((size_t) bytes, &ctx_localmem, 0, NULL, NULL); if(bytes) if(!ptr) armci_die("armci_malloc:malloc 1 failed",(int)bytes); ptr_arr[armci_me] = ptr; ARMCI_PR_DBG("exit",0); return (0); } # endif // static int one_time = 0; if( ARMCI_Uses_shm() ) { // if(one_time++ == 0 && armci_me==0) printf("%d: ARMCI_Uses_shm = true\n",armci_me); armci_shmem_malloc(ptr_arr,bytes); } else { /* on distributed-memory systems just malloc & collect all addresses */ ptr = kr_malloc(bytes, &ctx_localmem, 1, &new_base, &new_size); if(bytes) if(!ptr) armci_die("armci_malloc:malloc 2 failed",bytes); bzero((char*)ptr_arr,armci_nproc*sizeof(void*)); ptr_arr[armci_me] = ptr; /* now combine individual addresses into a single array */ armci_exchange_address(ptr_arr, armci_nproc); # ifdef ARMCI_REGISTER_SHMEM if(new_size) armci_register_shmem(new_base,new_size,NULL,0,new_base); else armci_register_shmem(ptr,bytes,NULL,0,ptr); # endif } # ifdef CRAY_REGISTER_ARMCI_MALLOC int i; cos_comm_t info; cos_mdesc_t mdesc, *mdhs; onesided_hnd_t cp_hnd; //uint64_t options = 0; uint64_t options = ONESIDED_MEM_NO_UDREG | ONESIDED_MEM_NO_RX_CQH; remote_mdh_node_t *ll; int node_master = armci_me; long total_bytes, lbytes = (long) bytes; NTK_MPI_GetComm(MPI_COMM_WORLD, &info); long *bytes_per_rank = (long *) malloc(info.numa_np*sizeof(long)); // not a wonderfully scalable solution // revisit this at a later time and make the storage node based if(info.np > 80000 && armci_me == 0) { // make it obvious!!!! for(i=0; i<50; i++) printf("WARNING: Examine ARMCI_Malloc for memory scaling issues at large scale.\n"); } mdhs = (cos_mdesc_t *) malloc(info.np*sizeof(cos_mdesc_t)); ptr = ptr_arr[armci_me]; // determine the total number of bytes on the node that were allocated // also allgather the number of bytes per rank on the node so we can set the offsets MPI_Allreduce(&lbytes, &total_bytes, 1, MPI_LONG, MPI_SUM, info.numa_comm); MPI_Allgather(&lbytes, 1, MPI_LONG, bytes_per_rank, 1, MPI_LONG, info.numa_comm); // get the onesided v2.0 api handle for the compute process cpGetOnesidedHandle(&cp_hnd); if(info.numa_me == 0 && total_bytes) { // register the data for the entire node // ABHINAV: ASSERT(armci_me == node master) onesided_mem_register(cp_hnd, ptr, total_bytes, options, &mdesc); } else { bzero(&mdesc, sizeof(cos_mdesc_t)); } // bcast rank of the node master and and the mdesc for the nodes shared-memory segment MPI_Bcast(&node_master, 1, MPI_INT, 0, info.numa_comm); MPI_Bcast(&mdesc, sizeof(cos_mdesc_t), MPI_BYTE, 0, info.numa_comm); // each rank need to compare is starting virtual address to the master's starting virtual // address. if it is differnet (ptr != mdesc.addr), then set the offset // each rank will update mdesc to point at the memory region it owns uint64_t offset = 0; for(i=0; i<(armci_me-node_master); i++) offset += bytes_per_rank[i]; mdesc.addr += offset; mdesc.length = bytes_per_rank[armci_me-node_master]; // now we allgather over all np ranks - this used to be over the node master - much more scalable // but i couldn't come up with a simple solution to look up remote mdhs MPI_Allgather(&mdesc, sizeof(cos_mdesc_t), MPI_BYTE, mdhs, sizeof(cos_mdesc_t), MPI_BYTE, info.world_comm); // update the linked list ll = remote_mdh_base_node; if(ll == NULL) { remote_mdh_base_node = ll = (remote_mdh_node_t *) malloc(sizeof(remote_mdh_node_t)); ll->ptrs = ptr_arr; ll->mdhs = mdhs; ll->next = NULL; } else { while(ll->next != NULL) { ll = ll->next; } assert(ll->next == NULL); ll->next = (remote_mdh_node_t *) malloc(sizeof(remote_mdh_node_t)); ll = ll->next; ll->ptrs = ptr_arr; ll->mdhs = mdhs; ll->next = NULL; } # endif ARMCI_PR_DBG("exit",0); //printf("\n%d:%s:%d:%p\n",armci_me,__FUNCTION__,bytes,ptr_arr[armci_me]); return(0); } /*\ shared memory is released to kr_malloc only on process 0 * with data server malloc cannot be used \*/ int PARMCI_Free(void *ptr) { ARMCI_PR_DBG("enter",0); # ifdef CRAY_REGISTER_ARMCI_MALLOC // assumes that PARMCI_Free is a collective operation, the following function requires // a collective operation for all ranks on the node armci_onesided_remove_from_remote_mdh_list(ptr); # endif // if ptr is NULL, we can now return if(!ptr)return 1; # if (defined(SYSV) || defined(WIN32) || defined(MMAP)) && !defined(NO_SHM) # ifdef USE_MALLOC if(armci_nproc > 1) # endif if(ARMCI_Uses_shm()){ if(armci_me==armci_master){ # ifdef RMA_NEEDS_SHMEM Free_Shmem_Ptr(0,0,ptr); # else if(armci_clus_info[armci_clus_me].nslave>1) { kr_free(ptr, &ctx_localmem); // Free_Shmem_Ptr(0,0,ptr); } # endif } ptr = NULL; return 0; } # endif // kr_free(ptr, &ctx_localmem); //armci_unregister_shmem(ptr,0); ptr = NULL; ARMCI_PR_DBG("exit",0); return 0; } int ARMCI_Uses_shm() { int uses=0; #if (defined(SYSV) || defined(WIN32) || defined(MMAP) ||defined(HITACHI)) \ && !defined(NO_SHM) # ifdef RMA_NEEDS_SHMEM if(armci_nproc >1) uses= 1; /* always unless serial mode */ # else if(armci_nproc != armci_nclus)uses= 1; /* only when > 1 node used */ # endif #endif if(DEBUG_ || 0) fprintf(stderr,"%d:uses shmem %d\n",armci_me, uses); return uses; } #ifdef MPI int ARMCI_Uses_shm_grp(ARMCI_Group *group) { int uses=0, grp_me, grp_nproc, grp_nclus; ARMCI_PR_DBG("enter",0); armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); grp_nclus = grp_attr->grp_nclus; #if (defined(SYSV) || defined(WIN32) || defined(MMAP) ||defined(HITACHI)) \ && !defined(NO_SHM) # ifdef RMA_NEEDS_SHMEM if(grp_nproc >1) uses= 1; /* always unless serial mode */ # else if(grp_nproc != grp_nclus)uses= 1; /* only when > 1 node used */ # endif #endif if(DEBUG_) fprintf(stderr,"%d (grp_id=%d):uses shmem %d\n",armci_me, grp_me, uses); ARMCI_PR_DBG("exit",0); return uses; } /*\ ************** Begin Group Collective Memory Allocation ****************** * returns array of pointers to blocks of memory allocated by everybody * Note: as the same shared memory region can be mapped at different locations * in each process address space, the array might hold different values * on every process. However, the addresses are legitimate * and can be used in the ARMCI data transfer operations. * ptr_arr[nproc] \*/ int ARMCI_Malloc_group(void *ptr_arr[], armci_size_t bytes, ARMCI_Group *group) { void *ptr; int grp_me, grp_nproc; ARMCI_PR_DBG("enter",0); ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); if(DEBUG_)fprintf(stderr,"%d (grp_id=%d) bytes in armci_malloc_group %d\n", armci_me, grp_me, (int)bytes); #ifdef USE_MALLOC if(grp_nproc == 1) { ptr = kr_malloc((size_t) bytes, &ctx_localmem, 0, NULL, NULL); if(bytes) if(!ptr) armci_die("armci_malloc_group:malloc 1 failed",(int)bytes); ptr_arr[grp_me] = ptr; ARMCI_PR_DBG("exit",0); return (0); } #endif if( ARMCI_Uses_shm_grp(group) ) { # ifdef SGIALTIX armci_altix_shm_malloc_group(ptr_arr,bytes,group); # else armci_shmem_malloc_group(ptr_arr,bytes,group); # endif } else { void *new_base=NULL; size_t new_size=NULL; ptr = kr_malloc(bytes, &ctx_localmem, 1, &new_base, &new_size); if(bytes) if(!ptr) armci_die("armci_malloc:malloc 2 failed",bytes); bzero((char*)ptr_arr,grp_nproc*sizeof(void*)); ptr_arr[grp_me] = ptr; /* now combine individual addresses into a single array */ armci_exchange_address_grp(ptr_arr, grp_nproc, group); } ARMCI_PR_DBG("exit",0); return(0); } /*\ shared memory is released to kr_malloc only on process 0 * with data server malloc cannot be used \*/ int ARMCI_Free_group(void *ptr, ARMCI_Group *group) { int grp_me, grp_nproc, grp_master, grp_clus_me; armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); ARMCI_PR_DBG("enter",0); if(!ptr)return 1; ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); if(grp_me == MPI_UNDEFINED) { /* check if the process is in this group */ armci_die("armci_malloc_group: process is not a member in this group", armci_me); } /* get the group cluster info */ grp_clus_me = grp_attr->grp_clus_me; grp_master = grp_attr->grp_clus_info[grp_clus_me].master; # if (defined(SYSV) || defined(WIN32) || defined(MMAP)) && !defined(NO_SHM) # ifdef USE_MALLOC if(grp_nproc > 1) # endif if(ARMCI_Uses_shm_grp(group)){ if(grp_me == grp_master) { # ifdef RMA_NEEDS_SHMEM Free_Shmem_Ptr(0,0,ptr); # else if(armci_clus_info[armci_clus_me].nslave>1) Free_Shmem_Ptr(0,0,ptr); else kr_free(ptr, &ctx_localmem); # endif } ptr = NULL; ARMCI_PR_DBG("exit",0); return 0; } # endif kr_free(ptr, &ctx_localmem); ptr = NULL; ARMCI_PR_DBG("exit",0); return 0; } /* ***************** End Group Collective Memory Allocation ******************/ /* ************** Begin Non-Collective Memory Allocation ****************** * Prototype similar to SysV shared memory. */ /** * CHECK: On Altix we are forced to use SysV as shmalloc is collective. We * may use a preallocated shmalloc memory, however, it may NOT still solve * our problem... * NOTE: "int memflg" option for future optimiztions. */ void PARMCI_Memget(size_t bytes, armci_meminfo_t *meminfo, int memflg) { void *myptr=NULL; void *armci_ptr=NULL; /* legal ARCMI ptr used in ARMCI data xfer ops*/ size_t size = bytes; if(size<=0) armci_die("PARMCI_Memget: size must be > 0", (int)size); if(meminfo==NULL) armci_die("PARMCI_Memget: Invalid arg #2 (NULL ptr)",0); if(memflg!=0) armci_die("PARMCI_Memget: Invalid memflg", memflg); if( !ARMCI_Uses_shm() ) { armci_ptr = myptr = kr_malloc(size, &ctx_localmem, 0, NULL, NULL); if(size) if(!myptr) armci_die("PARMCI_Memget failed", (int)size); /* fill the meminfo structure */ meminfo->armci_addr = armci_ptr; meminfo->addr = myptr; meminfo->size = size; meminfo->cpid = armci_me; /* meminfo->attr = NULL; */ } else { armci_shmem_memget(meminfo, size); } if(DEBUG_){ printf("%d: PARMCI_Memget: addresses server=%p myptr=%p bytes=%ld\n", armci_me, meminfo->armci_addr, meminfo->addr, bytes); fflush(stdout); } } void* PARMCI_Memat(armci_meminfo_t *meminfo, long memflg) { void *ptr=NULL; if(meminfo==NULL) armci_die("PARMCI_Memget: Invalid arg #2 (NULL ptr)",0); if(memflg!=0) armci_die("PARMCI_Memget: Invalid memflg", memflg); if(meminfo->cpid==armci_me) { ptr = meminfo->addr; return ptr; } if( !ARMCI_Uses_shm()) { ptr = meminfo->addr; } else { ptr = armci_shmem_memat(meminfo); } if(DEBUG_) { printf("%d:PARMCI_Memat: attached addr mptr=%p size=%ld\n", armci_me, ptr, meminfo->size); fflush(stdout); } return ptr; } void ARMCI_Memdt(armci_meminfo_t *meminfo, int memflg) { /** * Do nothing. May be we need to have reference counting in future. This * is to avoid the case of dangling pointers when the creator of shm * segment calls Memctl and other processes are still attached to this * segment */ } void ARMCI_Memctl(armci_meminfo_t *meminfo) { if(meminfo==NULL) armci_die("PARMCI_Memget: Invalid arg #2 (NULL ptr)",0); /* only the creator can delete the segment */ if(meminfo->cpid == armci_me) { if( !ARMCI_Uses_shm() ) { void *ptr = meminfo->addr; kr_free(ptr, &ctx_localmem); } else { armci_shmem_memctl(meminfo); } } meminfo->addr = NULL; meminfo->armci_addr = NULL; /* if(meminfo->attr!=NULL) free(meminfo->attr); */ } /* ***************** End Non-Collective Memory Allocation ******************/ #endif #endif ga-5-3/armci/src-gemini/copy.h0000640005473000001440000003752112122647421015060 0ustar d3n000users/* $Id: copy.h,v 1.86.2.6 2007-08-29 17:32:32 manoj Exp $ */ #ifndef _COPY_H_ #define _COPY_H_ #include #include #ifdef WIN32 # include #endif #ifdef DECOSF #include #endif #ifndef EXTERN # define EXTERN extern #endif #if defined(SGI) || defined(FUJITSU) || defined(HPUX) || defined(SOLARIS) || defined (DECOSF) || defined(__ia64__) || defined(__crayx1) # define PTR_ALIGN #endif #if defined(NB_NONCONT) && !defined(CRAY_SHMEM) && !defined(QUADRICS) #error NB_NONCONT is only available on CRAY_SHMEM,QUADRICS and PORTALS #endif #if defined(SHMEM_HANDLE_SUPPORTED) && !defined(CRAY_SHMEM) #error SHMEM_HANDLE_SUPPORTED should not be defined on a non CRAY_SHMEM network #endif /* 08/30/06 moved up here from lines 252-397, MEM_FENCE before FENCE_NODE */ #if defined(NEED_MEM_SYNC) # ifdef AIX # define MEM_FENCE {int _dummy=1; _clear_lock((int *)&_dummy,0); } # elif defined(__ia64) # if defined(__GNUC__) && !defined (__INTEL_COMPILER) # define MEM_FENCE __asm__ __volatile__ ("mf" ::: "memory"); # else /* Intel Compiler */ extern void _armci_ia64_mb(); # define MEM_FENCE _armci_ia64_mb(); # endif # elif defined(LINUX) && defined(__GNUC__) && defined(__ppc__) # define MEM_FENCE \ __asm__ __volatile__ ("isync" : : : "memory"); # endif #endif #ifndef armci_copy # define armci_copy(src,dst,n) bcopy(src,dst,n) #endif /****************************** 2D Copy *******************/ # define DCopy2D(rows, cols, src_ptr, src_ld, dst_ptr, dst_ld){\ int j, nbytes = sizeof(double)* rows;\ char *ps=src_ptr, *pd=dst_ptr;\ for (j = 0; j < cols; j++){\ armci_copy(ps, pd, nbytes);\ ps += sizeof(double)* src_ld;\ pd += sizeof(double)* dst_ld;\ }\ } # define ByteCopy2D(bytes, count, src_ptr, src_stride, dst_ptr,dst_stride){\ int _j;\ char *ps=src_ptr, *pd=dst_ptr;\ for (_j = 0; _j < count; _j++){\ armci_copy(ps, pd, bytes);\ ps += src_stride;\ pd += dst_stride;\ }\ } #if defined(FUJITSU) # define armci_put2D(p, bytes,count,src_ptr,src_stride,dst_ptr,dst_stride)\ CopyPatchTo(src_ptr, src_stride, dst_ptr, dst_stride, count,bytes, p) # define armci_get2D(p, bytes, count, src_ptr,src_stride,dst_ptr,dst_stride)\ CopyPatchFrom(src_ptr, src_stride, dst_ptr, dst_stride,count,bytes,p) #elif defined(HITACHI) || defined(_ELAN_PUTGET_H) && !defined(NB_NONCONT) #if defined(QUADRICS) #if 0 # define WAIT_FOR_PUTS elan_putWaitAll(elan_base->state,200) # define WAIT_FOR_GETS elan_getWaitAll(elan_base->state,200) #else # define WAIT_FOR_PUTS armcill_wait_put() # define WAIT_FOR_GETS armcill_wait_get() extern void armcill_wait_put(); extern void armcill_wait_get(); #endif #endif extern void armcill_put2D(int proc, int bytes, int count, void* src_ptr,int src_stride, void* dst_ptr,int dst_stride); extern void armcill_get2D(int proc, int bytes, int count, void* src_ptr,int src_stride, void* dst_ptr,int dst_stride); # define armci_put2D armcill_put2D # define armci_get2D armcill_get2D #elif defined(NB_NONCONT) extern void armcill_wait_put(); extern void armcill_wait_get(); # define WAIT_FOR_PUTS armcill_wait_put() # define WAIT_FOR_GETS armcill_wait_get() extern void armcill_put2D(int proc, int bytes, int count, void* src_ptr,int src_stride, void* dst_ptr,int dst_stride); extern void armcill_get2D(int proc, int bytes, int count, void* src_ptr,int src_stride, void* dst_ptr,int dst_stride); # define armci_put2D armcill_put2D # define armci_get2D armcill_get2D # if defined(QUADRICS) # define armcill_nb_put(_dst, _src, _sz, _proc, _hdl)\ _hdl = elan_put(elan_base->state,_src,_dst,(size_t)_sz,_proc) # define armcill_nb_get(_dst, _src, _sz, _proc, _hdl)\ _hdl = elan_get(elan_base->state,_src,_dst,(size_t)_sz,_proc) # define armcill_nb_wait(_hdl)\ elan_wait(_hdl,100) # elif defined(CRAY_SHMEM) # define armcill_nb_wait(_hdl)\ shmem_wait_nb(_hdl) /*VT:this should be ifdef'ed based on if shmem_handle is defined or not*/ # if defined (CRAY_XT) # define armcill_nb_put(_dst, _src, _sz, _proc, _hdl)\ shmem_putmem(_dst, _src, (size_t)_sz, _proc) # define armcill_nb_get(_dst, _src, _sz, _proc, _hdl)\ shmem_getmem(_dst, _src, (size_t)_sz, _proc) # else # define armcill_nb_put(_dst, _src, _sz, _proc, _hdl)\ _hdl = shmem_putmem_nb(_dst, _src, (size_t)_sz, _proc, &(_hdl)) # define armcill_nb_get(_dst, _src, _sz, _proc, _hdl)\ _hdl = shmem_getmem_nb(_dst, _src, (size_t)_sz, _proc, &(_hdl)) # endif # endif #else # define armci_put2D(proc,bytes,count,src_ptr,src_stride,dst_ptr,dst_stride){\ int _j;\ char *ps=src_ptr, *pd=dst_ptr;\ for (_j = 0; _j < count; _j++){\ armci_put(ps, pd, bytes, proc);\ ps += src_stride;\ pd += dst_stride;\ }\ } # define armci_get2D(proc,bytes,count,src_ptr,src_stride,dst_ptr,dst_stride){\ int _j;\ char *ps=src_ptr, *pd=dst_ptr;\ for (_j = 0; _j < count; _j++){\ armci_get(ps, pd, bytes, proc);\ ps += src_stride;\ pd += dst_stride;\ }\ } #endif /* macros to ensure ordering of consecutive puts or gets following puts */ #if defined(LAPI) # include "lapidefs.h" #elif defined(_CRAYMPP) || defined(QUADRICS) || defined(__crayx1)\ || defined(CRAY_SHMEM) #if defined(CRAY) || defined(CRAY_XT) # include #else # include #ifndef ptrdiff_t # include #endif # include #endif # ifdef ELAN_ACC # define FENCE_NODE(p) {\ if(((p)armci_clus_last))armci_elan_fence(p);} # define UPDATE_FENCE_STATE(p, op, nissued) # else int cmpl_proc; # ifdef DECOSF # define FENCE_NODE(p) if(cmpl_proc == (p)){\ if(((p)armci_clus_last))shmem_quiet();\ else asm ("mb"); } # else # define FENCE_NODE(p) if(cmpl_proc == (p)){\ if(((p)armci_clus_last))shmem_quiet(); } # endif # define UPDATE_FENCE_STATE(p, op, nissued) if((op)==PUT) cmpl_proc=(p); # endif #else # if defined(GM) && defined(ACK_FENCE) extern void armci_gm_fence(int p); # define FENCE_NODE(p) armci_gm_fence(p) # elif defined(BGML) # include "bgmldefs.h" # define FENCE_NODE(p) BGML_WaitProc(p) # else # define FENCE_NODE(p) # endif # define UPDATE_FENCE_STATE(p, op, nissued) #endif #ifdef NEC # define THRESH 1 # define THRESH1D 1 #else # define THRESH 32 # define THRESH1D 512 #endif #define ALIGN_SIZE sizeof(double) /********* interface to C 1D and 2D memory copy functions ***********/ /* dcopy2d_u_ uses explicit unrolled loops to depth 4 */ void c_dcopy2d_n_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict B, const int* const restrict bld); void c_dcopy2d_u_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict B, const int* const restrict bld); void c_dcopy1d_n_(const double* const restrict A, double* const restrict B, const int* const restrict n); void c_dcopy1d_u_(const double* const restrict A, double* const restrict B, const int* const restrict n); void c_dcopy21_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict buf, int* const restrict cur); void c_dcopy12_(const int* const restrict rows, const int* const restrict cols, double* const restrict A, const int* const restrict ald, const double* const restrict buf, int* const restrict cur); void c_dcopy31_(const int* const restrict rows, const int* const restrict cols, const int* const restrict plns, const double* const restrict A, const int* const restrict aldr, const int* const restrict aldc, double* const restrict buf, int* const restrict cur); void c_dcopy13_(const int* const restrict rows, const int* const restrict cols, const int* const restrict plns, double* const restrict A, const int* const restrict aldr, const int* const restrict aldc, const double* const restrict buf, int* const restrict cur); /********* interface to fortran 1D and 2D memory copy functions ***********/ #if defined(AIX) || defined(BGML) # define DCOPY2D c_dcopy2d_u_ # define DCOPY1D c_dcopy1d_u_ #elif defined(LINUX) || defined(__crayx1) || defined(HPUX64) || defined(DECOSF) || defined(CRAY) || defined(WIN32) || defined(HITACHI) # define DCOPY2D c_dcopy2d_n_ # define DCOPY1D c_dcopy1d_n_ #else # define DCOPY2D c_dcopy2d_u_ # define DCOPY1D c_dcopy1d_u_ #endif #define DCOPY21 c_dcopy21_ #define DCOPY12 c_dcopy12_ #define DCOPY31 c_dcopy31_ #define DCOPY13 c_dcopy13_ /***************************** 1-Dimensional copy ************************/ #if defined(QUADRICS) # include # if defined(_ELAN_PUTGET_H) # define qsw_put(src,dst,n,proc) \ elan_wait(elan_put(elan_base->state,src,dst,n,proc),elan_base->waitType) # define qsw_get(src,dst,n,proc) \ elan_wait(elan_get(elan_base->state,src,dst,n,proc),elan_base->waitType) /* # define ARMCI_NB_PUT(src,dst,n,proc,phandle)\ *(phandle)=elan_put(elan_base->state,src,dst,n,proc) */ #ifdef DOELAN4 extern void armci_elan_put_with_tracknotify(char *src,char *dst,int n,int proc, ELAN_EVENT **phandle); # define ARMCI_NB_PUT(src,dst,n,proc,phandle)\ armci_elan_put_with_tracknotify(src,dst,n,proc,phandle) #endif # define ARMCI_NB_GET(src,dst,n,proc,phandle)\ *(phandle)=elan_get(elan_base->state,src,dst,n,proc) # define ARMCI_NB_WAIT(handle) if(handle)elan_wait(handle,elan_base->waitType) # define ARMCI_NB_TEST(handle,_succ) (*(_succ))= (handle)? !elan_poll(handle,1L): 1 # else # define qsw_put(src,dst,n,proc) shmem_putmem((dst),(src),(int)(n),(proc)) # define qsw_get(src,dst,n,proc) shmem_getmem((dst),(src),(int)(n),(proc)) # endif # define armci_put(src,dst,n,proc)\ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { qsw_put(src,dst,n,proc);} # define armci_get(src,dst,n,proc) \ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { qsw_get((src),(dst),(int)(n),(proc));} #elif defined(CRAY_T3E) || defined(CRAY_SHMEM) # define armci_copy_disabled(src,dst,n)\ if((n)<256 || n%sizeof(long) ) memcpy((dst),(src),(n));\ else {\ shmem_put((long*)(dst),(long*)(src),(int)(n)/sizeof(long),armci_me);\ shmem_quiet(); } # define armci_put(src,dst,n,proc) \ shmem_put32((void *)(dst),(void *)(src),(int)(n)/4,(proc));\ shmem_quiet() # define armci_get(src,dst,n,proc) \ shmem_get32((void *)(dst),(void *)(src),(int)(n)/4,(proc));\ shmem_quiet() #elif defined(HITACHI) extern void armcill_put(void *src, void *dst, int bytes, int proc); extern void armcill_get(void *src, void *dst, int bytes, int proc); # define armci_put(src,dst,n,proc) \ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { armcill_put((src), (dst),(n),(proc));} # define armci_get(src,dst,n,proc)\ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { armcill_get((src), (dst),(n),(proc));} #elif defined(FUJITSU) # include "fujitsu-vpp.h" # ifndef __sparc # define armci_copy(src,dst,n) _MmCopy((char*)(dst), (char*)(src), (n)) # endif # define armci_put CopyTo # define armci_get CopyFrom #elif defined(LAPI) # include extern lapi_handle_t lapi_handle; # define armci_put(src,dst,n,proc)\ if(proc==armci_me){\ armci_copy(src,dst,n);\ } else {\ if(LAPI_Put(lapi_handle, (uint)proc, (uint)n, (dst), (src),\ NULL,&(ack_cntr[ARMCI_THREAD_IDX].cntr),&cmpl_arr[proc].cntr))\ ARMCI_Error("LAPI_put failed",0); else;} /**** this copy is nonblocking and requires fence to complete!!! ****/ # define armci_get(src,dst,n,proc) \ if(proc==armci_me){\ armci_copy(src,dst,n);\ } else {\ if(LAPI_Get(lapi_handle, (uint)proc, (uint)n, (src), (dst), \ NULL, &(get_cntr[ARMCI_THREAD_IDX].cntr)))\ ARMCI_Error("LAPI_Get failed",0);else;} # define ARMCI_NB_PUT(src,dst,n,proc,cmplt)\ {if(LAPI_Setcntr(lapi_handle, &((cmplt)->cntr), 0))\ ARMCI_Error("LAPI_Setcntr in NB_PUT failed",0);\ (cmplt)->val=1;\ if(LAPI_Put(lapi_handle, (uint)proc, (uint)n, (dst), (src),\ NULL, &((cmplt)->cntr), &cmpl_arr[proc].cntr))\ ARMCI_Error("LAPI_put failed",0); else;} # define ARMCI_NB_GET(src,dst,n,proc,cmplt)\ {if(LAPI_Setcntr(lapi_handle, &((cmplt)->cntr), 0))\ ARMCI_Error("LAPI_Setcntr in NB_GET failed",0);\ (cmplt)->val=1;\ if(LAPI_Get(lapi_handle, (uint)proc, (uint)n, (src), (dst), \ NULL, &((cmplt)->cntr)))\ ARMCI_Error("LAPI_Get NB_GET failed",0);else;} # define ARMCI_NB_WAIT(cmplt) CLEAR_COUNTER((cmplt)) # define ARMCI_NB_TEST(cmplt,_succ) TEST_COUNTER((cmplt),(_succ)) #elif defined(PORTALS) # define armci_put(src,dst,n,proc) \ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { armci_portals_put((proc),(src), (dst),(n),NULL,0);} # define armci_get(src,dst,n,proc)\ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { armci_portals_get((proc),(src), (dst),(n),NULL,0);} # define ARMCI_NB_PUT(src,dst,n,proc,cmplt)\ nb_handle->tag=GET_NEXT_NBTAG();armci_portals_put((proc),(src),\ (dst),(n),cmplt,nb_handle->tag) # define ARMCI_NB_GET(src,dst,n,proc,cmplt)\ nb_handle->tag=GET_NEXT_NBTAG();armci_portals_get((proc),(src),\ (dst),(n),cmplt,nb_handle->tag) #elif defined(BGML) #define armci_get(src, dst, n, p) PARMCI_Get(src, dst, n, p) #define armci_put(src, dst, n, p) PARMCI_Put(src, dst, n, p) #else # define armci_get(src,dst,n,p) armci_copy((src),(dst),(n)) # define armci_put(src,dst,n,p) armci_copy((src),(dst),(n)) #endif #ifndef MEM_FENCE # define MEM_FENCE #endif #ifndef armci_copy_fence # define armci_copy_fence armci_copy #endif #endif ga-5-3/armci/src-gemini/new_memory.c0000640005473000001440000002555711622516074016273 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #include "armcip.h" #include "message.h" #define DEBUG_ 0 #define USE_SHMEM_ #define SHM_UNIT 1024 void armci_print_ptr(void **ptr_arr, int bytes, int size, void* myptr, int off) { int i; int nproc = armci_clus_info[armci_clus_me].nslave; ARMCI_PR_DBG("enter",0); for(i=0; i< armci_nproc; i++){ int j; if(armci_me ==i){ printf("%d master =%d nproc=%d off=%d\n",armci_me, armci_master,nproc, off); printf("%d:bytes=%d mptr=%p s=%d ",armci_me, bytes, myptr,size); for(j = 0; j< armci_nproc; j++)printf(" %p",ptr_arr[j]); printf("\n"); fflush(stdout); } armci_msg_barrier(); } ARMCI_PR_DBG("exit",0); } /******************************************************************** * Non-collective Memory Allocation on shared memory systems \*/ void armci_shmem_memget(armci_meminfo_t *meminfo, size_t size) { void *myptr=NULL; void *armci_ptr=NULL; /* legal ARCMIptr used in ARMCI data xfer ops */ /* can malloc if there is no data server process & has 1 process/node*/ } void* armci_shmem_memat(armci_meminfo_t *meminfo) { return NULL; } void armci_shmem_memctl(armci_meminfo_t *meminfo) { } /****** End: Non-collective memory allocation on shared memory systems *****/ /** * Local Memory Allocation and Free */ void *PARMCI_Malloc_local(armci_size_t bytes) { void *rptr; ARMCI_PR_DBG("enter",0); ARMCI_PR_DBG("exit",0); return malloc(bytes); } int PARMCI_Free_local(void *ptr) { ARMCI_PR_DBG("enter",0); free(ptr); ARMCI_PR_DBG("exit",0); return 0; } /*\ A wrapper to shmget. Just to be sure that ID is not 0. \*/ static int armci_shmget(size_t size,char *from) { int id; id = shmget(IPC_PRIVATE, size, (IPC_CREAT | 00600)); /*attaching with id 0 somehow fails (Seen on pentium4+linux24+gm163) *so if id=0, shmget again. */ while(id==0){ /* free id=0 and get a new one */ if(shmctl((int)id,IPC_RMID,(struct shmid_ds *)NULL)) { fprintf(stderr,"id=%d \n",id); armci_die("allocate: failed to _delete_ shared region ",id); } id = shmget(IPC_PRIVATE, size, (IPC_CREAT | 00600)); } if(DEBUG_){ printf("\n%d:armci_shmget sz=%ld caller=%s id=%d\n",armci_me,(long)size, from,id); fflush(stdout); } return(id); } /*\ Collective Memory Allocation * returns array of pointers to blocks of memory allocated by everybody * Note: as the same shared memory region can be mapped at different locations * in each process address space, the array might hold different values * on every process. However, the addresses are legitimate * and can be used in the ARMCI data transfer operations. * ptr_arr[nproc] \*/ #define CLEANUP_CMD(command) sprintf(command,"/usr/bin/ipcrm shm %d",id); int PARMCI_Malloc(void *ptr_arr[], armci_size_t bytes) { int mynslave = armci_clus_info[armci_clus_me].nslave; void *servptr,*mynodeptrs[mynslave]; int id,nodeids[mynslave],mynodeid=armci_me-armci_master; ARMCI_PR_DBG("enter",0); #ifdef DEBUG_MEM fprintf(stderr,"%d bytes in armci_malloc %d\n",armci_me, (int)bytes); fflush(stderr); armci_msg_barrier(); #endif if(bytes>0){ if(mynslave>1){ #ifdef DEBUG_MEM printf("\n%d:%s:mynslave is %d",armci_me,__FUNCTION__,mynslave);fflush(stdout); #endif bzero((void *)nodeids,sizeof(int)*mynslave); id =nodeids[mynodeid]= armci_shmget(bytes,"PARMCI_Malloc"); armci_msg_gop_scope(SCOPE_NODE,nodeids,mynslave,"+",ARMCI_INT); for(int i=0;i1){ servptr = armci_server_ptr(id); } else servptr = mynodeptrs[mynodeid]; } else{ #ifdef DEBUG_MEM printf("\n%d:%s:mynslave is %d, doing malloc",armci_me,__FUNCTION__,mynslave);fflush(stdout); #endif mynodeptrs[mynodeid] = servptr = malloc(bytes); } } else{ mynodeptrs[mynodeid] = servptr = NULL; } bzero((char*)ptr_arr,armci_nproc*sizeof(void*)); /*ptr_arr[armci_me] = servptr;*/ ptr_arr[armci_me] = mynodeptrs[mynodeid]; armci_exchange_address(ptr_arr,armci_nproc); if(mynslave>1)for(int i=0;i1){ armci_portals_memsetup((long)servptr-(long)ptr_arr[armci_me]); } ARMCI_PR_DBG("exit",0); return(0); } int PARMCI_Free(void *ptr) { ARMCI_PR_DBG("enter",0); if(!ptr)return 1; ARMCI_PR_DBG("exit",0); return 0; } int ARMCI_Uses_shm() { int uses=0; #if (defined(SYSV) || defined(WIN32) || defined(MMAP) ||defined(HITACHI)) \ && !defined(NO_SHM) # ifdef RMA_NEEDS_SHMEM if(armci_nproc >1) uses= 1; /* always unless serial mode */ # else if(armci_nproc != armci_nclus)uses= 1; /* only when > 1 node used */ # endif #endif if(DEBUG_) fprintf(stderr,"%d:uses shmem %d\n",armci_me, uses); return uses; } #ifdef MPI int ARMCI_Uses_shm_grp(ARMCI_Group *group) { int uses=0, grp_me, grp_nproc, grp_nclus; ARMCI_PR_DBG("enter",0); armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); grp_nclus = grp_attr->grp_nclus; #if (defined(SYSV) || defined(WIN32) || defined(MMAP) ||defined(HITACHI)) \ && !defined(NO_SHM) # ifdef RMA_NEEDS_SHMEM if(grp_nproc >1) uses= 1; /* always unless serial mode */ # else if(grp_nproc != grp_nclus)uses= 1; /* only when > 1 node used */ # endif #endif if(DEBUG_) fprintf(stderr,"%d (grp_id=%d):uses shmem %d\n",armci_me, grp_me, uses); ARMCI_PR_DBG("exit",0); return uses; } /*\ ************** Begin Group Collective Memory Allocation ****************** * returns array of pointers to blocks of memory allocated by everybody * Note: as the same shared memory region can be mapped at different locations * in each process address space, the array might hold different values * on every process. However, the addresses are legitimate * and can be used in the ARMCI data transfer operations. * ptr_arr[nproc] \*/ int ARMCI_Malloc_group(void *ptr_arr[], armci_size_t bytes, ARMCI_Group *group) { void *ptr; int grp_me, grp_nproc; ARMCI_PR_DBG("enter",0); ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); if(DEBUG_)fprintf(stderr,"%d (grp_id=%d) bytes in armci_malloc_group %d\n", armci_me, grp_me, (int)bytes); ARMCI_PR_DBG("exit",0); return(0); } int ARMCI_Free_group(void *ptr, ARMCI_Group *group) { int grp_me, grp_nproc, grp_master, grp_clus_me; armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); ARMCI_PR_DBG("enter",0); if(!ptr)return 1; ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); if(grp_me == MPI_UNDEFINED) { /* check if the process is in this group */ armci_die("armci_malloc_group: process is not a member in this group", armci_me); } /* get the group cluster info */ grp_clus_me = grp_attr->grp_clus_me; grp_master = grp_attr->grp_clus_info[grp_clus_me].master; ARMCI_PR_DBG("exit",0); return 0; } /* ***************** End Group Collective Memory Allocation ******************/ /* ************** Begin Non-Collective Memory Allocation ****************** * Prototype similar to SysV shared memory. */ /** * CHECK: On Altix we are forced to use SysV as shmalloc is collective. We * may use a preallocated shmalloc memory, however, it may NOT still solve * our problem... * NOTE: "int memflg" option for future optimiztions. */ void PARMCI_Memget(size_t bytes, armci_meminfo_t *meminfo, int memflg) { void *myptr=NULL; void *armci_ptr=NULL; /* legal ARCMI ptr used in ARMCI data xfer ops*/ size_t size = bytes; if(size<=0) armci_die("PARMCI_Memget: size must be > 0", (int)size); if(meminfo==NULL) armci_die("PARMCI_Memget: Invalid arg #2 (NULL ptr)",0); if(memflg!=0) armci_die("PARMCI_Memget: Invalid memflg", memflg); if( !ARMCI_Uses_shm() ) { /* fill the meminfo structure */ meminfo->armci_addr = armci_ptr; meminfo->addr = myptr; meminfo->size = size; meminfo->cpid = armci_me; /* meminfo->attr = NULL; */ } else { armci_shmem_memget(meminfo, size); } if(DEBUG_){ printf("%d: PARMCI_Memget: addresses server=%p myptr=%p bytes=%ld\n", armci_me, meminfo->armci_addr, meminfo->addr, bytes); fflush(stdout); } } void* PARMCI_Memat(armci_meminfo_t *meminfo, long memflg) { void *ptr=NULL; if(meminfo==NULL) armci_die("PARMCI_Memget: Invalid arg #2 (NULL ptr)",0); if(memflg!=0) armci_die("PARMCI_Memget: Invalid memflg", memflg); if(meminfo->cpid==armci_me) { ptr = meminfo->addr; return ptr; } if( !ARMCI_Uses_shm()) { ptr = meminfo->addr; } else { ptr = armci_shmem_memat(meminfo); } if(DEBUG_) { printf("%d:PARMCI_Memat: attached addr mptr=%p size=%ld\n", armci_me, ptr, meminfo->size); fflush(stdout); } return ptr; } void ARMCI_Memdt(armci_meminfo_t *meminfo, int memflg) { /** * Do nothing. May be we need to have reference counting in future. This * is to avoid the case of dangling pointers when the creator of shm * segment calls Memctl and other processes are still attached to this * segment */ } void ARMCI_Memctl(armci_meminfo_t *meminfo) { if(meminfo==NULL) armci_die("PARMCI_Memget: Invalid arg #2 (NULL ptr)",0); /* only the creator can delete the segment */ if(meminfo->cpid == armci_me) { if( !ARMCI_Uses_shm() ) { void *ptr = meminfo->addr; } else { armci_shmem_memctl(meminfo); } } meminfo->addr = NULL; meminfo->armci_addr = NULL; /* if(meminfo->attr!=NULL) free(meminfo->attr); */ } /* ***************** End Non-Collective Memory Allocation ******************/ #endif ga-5-3/armci/src-gemini/kr_malloc.h0000640005473000001440000000651111466071465016055 0ustar d3n000users#ifndef KR_MALLOC_H /* K&R malloc */ #define KR_MALLOC_H #ifdef CRAY #define LOG_ALIGN 6 #elif defined(KSR) #define LOG_ALIGN 7 #else #define LOG_ALIGN 6 #endif #define ALIGNMENT (1 << LOG_ALIGN) #define KR_CTX_SHMEM 101 #define KR_CTX_LOCALMEM 102 union header{ struct { unsigned valid1; /* Token to check if is not overwritten */ union header *ptr; /* next block if on free list */ int shmid; /* next block's shared memory id */ long shmoffset; /* next block's shmem offset */ size_t shmsize; /* next block's shared memory segment size */ size_t size; /* size of this block*/ unsigned valid2; /* Another token acting as a guard */ } s; char align[ALIGNMENT]; /* Align to ALIGNMENT byte boundary */ }; typedef union header Header; typedef struct malloc_context { size_t usize; /* unit size in bytes */ size_t nalloc; /* No. of units of length ALIGNMENT */ size_t max_nalloc; /* Maximum no. of units that can get */ void * (*alloc_fptr)(); /* function pointer to memory alloc routine */ size_t total; /* Amount request from system in units */ long nchunk; /* No. of chunks of system memory */ long inuse; /* Amount in use in units */ long maxuse; /* Maximum value of inuse */ long nfrags; /* No. of fragments divided into */ long nmcalls; /* No. of calls to _armci_alloc() */ long nfcalls; /* No. of calls to memfree */ int ctx_type; /* context id. -1 represents ctx_local context. otherwise, it is ctx_shmem context. */ int shmid; /* first free block's (i.e.freep) shmem id */ long shmoffset; /* first free block's shmem offset */ size_t shmsize; /* first free block's shmem total size */ Header base; /* empty list to get started */ Header *freep; /* start of free list */ Header *usedp; /* start of used list */ } context_t; /* Memory required to store the shmem context in shared memory. This shmem context shuld be stored in shared memory and is stored in the first shared memory segment created (i.e.armci_krmalloc_init_ctxshmem) */ #define SHMEM_CTX_MEM (sizeof(context_t)+sizeof(void*)) #define SHMEM_CTX_BYTES ((SHMEM_CTX_MEM + sizeof(Header) - 1)>>LOG_ALIGN) + 1; extern void kr_malloc_init(size_t usize, /* unit size in bytes */ size_t nalloc, size_t max_nalloc, void * (*alloc_fptr)(), /* memory alloc routine */ int debug, context_t *ctx); /* Returns data aligned on a quad boundary. Even if the request size is zero it returns a non-zero pointer. */ extern char *kr_malloc(size_t size, context_t *ctx, int new_allocation, void **new_base, size_t *new_size); /* Frees memory allocated by kr_malloc(). Ignores NULL pointers but must not be called twice for the same pointer or called with non-memalloc'ed pointers */ extern void kr_free(char *ptr, context_t *ctx); /* Print to standard output the usage statistics ... a wrapper for kr_malloc_stats(); */ extern void kr_malloc_print_stats(context_t *ctx); extern void kr_malloc_verify(context_t *ctx); #endif ga-5-3/armci/src-gemini/armcip.h0000640005473000001440000003655411744312006015363 0ustar d3n000users/* $Id: armcip.h,v 1.82.2.9 2007-08-29 17:32:31 manoj Exp $ */ /* armci private header file */ #ifndef _ARMCI_P_H #define _ARMCI_P_H #include #include "armci.h" #include "message.h" // #include "code_options.h" #if 0 #define ARMCI_PR_DBG(__ARMCI_ST,__ARMCI_NU) \ printf("\n%d:%s:%d:%s:%s:%d",armci_me,__FILE__,__LINE__,__FUNCTION__,__ARMCI_ST,__ARMCI_NU);fflush(stdout) #define ARMCI_PR_SDBG(__ARMCI_ST,__ARMCI_NU) \ printf("\n(%d):%s:%d:%s:%s:%d",armci_me,__FILE__,__LINE__,__FUNCTION__,__ARMCI_ST,__ARMCI_NU);fflush(stdout) #else #define ARMCI_PR_DBG(__ARMCI_ST,__ARMCI_NU) #define ARMCI_PR_SDBG(__ARMCI_ST,__ARMCI_NU) #endif #ifdef LIBONESIDED #include "armci-onesided.h" #endif #define DATA_SERVER #define SERVER_THREAD /*#define ARMCI_CHECK_STATE*/ #define ARMCI_STAMP 11214 #define ARMCI_TAIL 31121 #ifdef QUADRICS #include #ifdef QSNETLIBS_VERSION_CODE #ifndef DECOSF # define ELAN_ACC # define PENDING_OPER(x) ARMCI_ACC_INT #endif # if QSNETLIBS_VERSION_CODE > QSNETLIBS_VERSION(1,5,0) # define LIBELAN_ATOMICS # endif #endif extern void armci_elan_fence(int p); #endif /* we got problems on IA64/Linux64 with Elan if inlining is used */ #if defined(__GNUC__) && !defined(QUADRICS) # define INLINE inline #else # define INLINE #endif #ifdef WIN32 #include #define sleep(x) Sleep(100*(x)) #else #include #endif #if (defined(SYSV) || defined(WIN32)|| defined(MMAP)) && !defined(NO_SHM) && !defined(HITACHI) && !defined(CATAMOUNT) #define CLUSTER #ifdef SERVER_THREAD # define SERVER_NODE(c) (armci_clus_info[(c)].master); # define NODE_SERVER(c) (c); #else # define SOFFSET -1000000 # define SERVER_NODE(c) ((int)(SOFFSET -armci_clus_info[(c)].master)); # define NODE_SERVER(c) ((int)(SOFFSET - c)) #endif #endif /*\GPC call stuff \*/ typedef struct { int hndl, hlen, dlen; void *hdr, *data; }gpc_send_t; /*\ Stuff for non-blocking API \*/ #define NB_MULTI -1 /*more than one armci buffer(buffers.c) used for nbcall*/ #define NB_NONE -2 /*no armci buffer(buffers.c) used for nbcall*/ extern unsigned int _armci_get_next_tag(); #define GET_NEXT_NBTAG _armci_get_next_tag #define ARMCI_MAX_IMPLICIT 15 typedef struct{ int len; int last; void *exthdr; } ext_header_t; typedef struct{ int val; void *ptr; } armci_flag_t; #if defined(LAPI) || defined(PTHREADS) || defined(POSIX_THREADS) # include typedef pthread_t thread_id_t; # define THREAD_ID_SELF pthread_self #elif defined(WIN32) # include typedef DWORD thread_id_t; # define THREAD_ID_SELF GetCurrentThreadId #else typedef int thread_id_t; # define THREAD_ID_SELF() 1 #endif extern thread_id_t armci_usr_tid; #ifdef SERVER_THREAD # define SERVER_CONTEXT (armci_usr_tid != THREAD_ID_SELF()) #else # define SERVER_CONTEXT (armci_me<0) #endif #if defined(LAPI) || defined(CLUSTER) || defined(CRAY) \ || defined(CRAY_SHMEM) || defined(BGML) || defined(DCMF) # include "request.h" #endif /* ------------------------ ARMCI threads support ------------------------- */ #define ARMCI_THREADS_LIMIT 32 #include "utils.h" #if defined(THREAD_SAFE) typedef struct { int max; /* max # of threads per proc */ int avail; /* next available position */ thread_id_t *ids; /* list of threads' ids */ thread_lock_t lock; /* general case lock */ thread_lock_t buf_lock; /* lock for buffer access */ thread_lock_t net_lock; /* lock for network accees */ } armci_user_threads_t; extern armci_user_threads_t armci_user_threads; extern void armci_init_threads(); extern void armci_finalize_threads(); extern int armci_thread_idx(); extern INLINE int armci_register_thread(thread_id_t id); #define ARMCI_THREAD_IDX armci_thread_idx() /* needs to be optimized */ #else # define ARMCI_THREAD_IDX 0 #endif /* ------------------------------------------------------------------------ */ /* min amount of data in strided request to be sent in single TCP/IP message*/ #if defined(SOCKETS) || defined(MPI_SPAWN_ZEROCOPY) # define TCP_PAYLOAD 128 # define LONG_GET_THRESHOLD TCP_PAYLOAD # define LONG_GET_THRESHOLD_STRIDED LONG_GET_THRESHOLD # define LONG_PUT_THRESHOLD 128 #endif #ifdef WIN32 # define bzero(a,len){\ int _i;\ char *_c = (char*)(a);\ for(_i=0; _i< (int)(len); _i++)_c[_i]=(char)0;\ } # define bcopy(a,b,len) memcpy(b,a,len) #else # include #endif /*#define ACC_COPY*/ #if defined(CRAY_T3E) || defined(FUJITSU)\ || defined(HITACHI) || (defined(QUADRICS) && !defined(ELAN_ACC)) #define ACC_COPY #endif #ifndef FATR # ifdef WIN32 # define FATR __stdcall # else # define FATR # endif #endif #define MAX_PROC 8096 #define MAX_STRIDE_LEVEL ARMCI_MAX_STRIDE_LEVEL /* msg tag ARMCI uses in collective ops */ #define ARMCI_TAG 30000 #ifndef EXTRA_MSG_BUFLEN_DBL # define RESERVED_BUFLEN ((sizeof(request_header_t)>>3)+3*MAX_STRIDE_LEVEL) #else # define RESERVED_BUFLEN ((sizeof(request_header_t)>>3)+3*MAX_STRIDE_LEVEL +\ EXTRA_MSG_BUFLEN_DBL) #endif #if defined(HITACHI) # define BUFSIZE ((0x50000) * sizeof(double)) #else /* packing algorithm for double complex numbers requires even number */ # ifdef MSG_BUFLEN_DBL # define BUFSIZE_DBL (MSG_BUFLEN_DBL - RESERVED_BUFLEN) # else # define BUFSIZE_DBL 32768 # endif # define BUFSIZE (BUFSIZE_DBL * sizeof(double)) #endif /* note opcodes must be lower than ARMCI_ACC_OFF !!! */ #define PUT 1 #define GET 2 #define RMW 3 #define LOCK 4 #define UNLOCK 5 #define ACK 6 #define STATE 11214 /* must fit in two bits, see msginfo->format in request.h */ #define STRIDED 1 #define VECTOR 2 extern int armci_me, armci_nproc; extern int _armci_initialized; #ifdef HITACHI extern int sr8k_server_ready; extern double *armci_internal_buffer; #else extern double armci_internal_buffer[BUFSIZE_DBL]; #endif extern int armci_getbufsize(); extern void armci_shmem_init(); extern void armci_krmalloc_init_localmem(); extern void armci_die(char *msg, int code); extern void armci_die2(char *msg, int code1, int code2); extern void armci_write_strided(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf); extern void armci_read_strided(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf); extern int armci_op_strided(int op, void* scale, int proc,void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, int lockit,armci_ihdl_t nb_handle); extern int armci_copy_vector(int op, /* operation code */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int armci_acc_vector(int op, /* operation code */ void *scale, /* scale factor */ armci_giov_t darr[],/* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int armci_pack_strided(int op, void* scale, int proc, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, ext_header_t *hdr, int fit_level, int nb, int last,armci_ihdl_t nb_handle); extern int armci_pack_vector(int op, void *scale, armci_giov_t darr[],int len,int proc,armci_ihdl_t nb_handle); extern void armci_lockmem(void *pstart, void* pend, int proc); extern void armci_unlockmem(int proc); extern int armci_acc_copy_strided(int optype, void* scale, int proc, void* src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels); extern void armci_vector_to_buf(armci_giov_t darr[], int len, void* buf); extern void armci_vector_from_buf(armci_giov_t darr[], int len, void* buf); extern void armci_init_fence(); #ifdef SOCKETS #ifdef SERVER_THREAD extern void armci_create_server_thread ( void* (* func)(void*) ); extern void armci_terminate_server_thread(); #else extern void armci_create_server_process ( void* (* func)(void*) ); extern void armci_wait_server_process(); extern void RestoreSigChldDfl(); #endif #endif #ifdef MPI_SPAWN extern void armci_create_server_MPIprocess (); #endif #define ARMCI_MAX(a,b) (((a)>(b))?(a):(b)) #define ARMCI_MIN(a,b) (((a)<(b))?(a):(b)) #define ARMCI_ABS(a) (((a) >= 0) ? (a) : (-(a))) #define ARMCI_ACC(op) ((((int)(op))-ARMCI_ACC_INT)>=0) #ifdef CLUSTER extern char *_armci_fence_arr; # define FENCE_ARR(p_) (_armci_fence_arr[p_]) # define SAMECLUSNODE(p)\ ( ((p) <= armci_clus_last) && ((p) >= armci_clus_first) ) #elif defined(__crayx1) # define SAMECLUSNODE(p) 1 #elif defined(ARMCIX) # define SAMECLUSNODE(p) 0 #else # define SAMECLUSNODE(p) ((p)==armci_me) #endif #if defined(LAPI) || defined(ELAN_ACC) # define ORDER(op,proc)\ if( proc == armci_me || ( ARMCI_ACC(op) && ARMCI_ACC(PENDING_OPER(proc))) );\ else FENCE_NODE(proc) # define UPDATE_FENCE_INFO(proc_) #elif defined(CLUSTER) && !defined(QUADRICS) && !defined(HITACHI)\ && !defined(CRAY_SHMEM) # define ORDER(op_,proc_)\ if(!SAMECLUSNODE(proc_) && op_ != GET )FENCE_ARR(proc_)=1 # define UPDATE_FENCE_INFO(proc_) if(!SAMECLUSNODE(proc_))FENCE_ARR(proc_)=1 #else # if defined(GM) && defined(ACK_FENCE) # define ORDER(op,proc) # else # define ORDER(op,proc) if(proc != armci_me) FENCE_NODE(proc) # endif # define UPDATE_FENCE_INFO(proc_) #endif typedef struct { int ptr_array_len; int bytes; void **ptr_array; } armci_riov_t; /*\ consider up to HOSTNAME_LEN characters in host name * we can truncate names of the SP nodes since it is not used * to establish socket communication like on the networks of workstations * SP node names must be distinct within first HOSTNAME_LEN characters \*/ #if defined(LAPI) && defined(AIX) # define HOSTNAME_TRUNCATE # define HOSTNAME_LEN 12 #else # define HOSTNAME_LEN 64 #endif typedef struct { int master; int nslave; char hostname[HOSTNAME_LEN]; } armci_clus_t; extern armci_clus_t *armci_clus_info; extern int armci_nclus, armci_clus_me, armci_master; extern int armci_clus_first, armci_clus_last; extern int armci_clus_id(int p); extern void armci_init_clusinfo(); extern void armci_set_mem_offset(void *ptr); extern int _armci_terminating; extern void armci_acc_2D(int op, void* scale, int proc, void *src_ptr, void *dst_ptr, int bytes, int cols, int src_stride, int dst_stride, int lockit); extern void armci_lockmem_scatter(void *ptr_array[], int len, int bytes, int p); extern void armci_generic_rmw(int op, void *ploc, void *prem, int extra, int p); extern unsigned long armci_max_region(); extern void armci_dispatch_strided(void *ptr, int stride_arr[], int count[], int strides, int fit_level, int nb, int bufsize, void (*fun)(void*,int*,int*,int,void*), void *arg); extern void armci_msg_gop_init(); extern void armci_util_spin(int n, void *notused); #if defined(SYSV) || defined(WIN32) extern void armci_shmem_init(); extern void armci_set_shmem_limit_per_core(unsigned long shmemlimit); extern void armci_set_shmem_limit_per_node(int nslaves); extern void armci_set_shmem_limit(unsigned long shmemlimit); #endif #define ALIGN_PTR_LONG(type, x) if( ((long)(x)) % sizeof(long)) { long _y = (long)(x);\ if(sizeof(long)==8){_y>>=3; _y<<=3; }\ else { _y>>=2; _y<<=2; }\ _y += sizeof(long); (x) = (type*)_y; } #define SIXTYFOUR 64 #define ALIGN64ADD(buf) (SIXTYFOUR-(((ssize_t)(buf))%SIXTYFOUR)) #define ALIGNLONGADD(buf) ((((ssize_t)(buf))%sizeof(long))?(sizeof(long)-(((ssize_t)(buf))%sizeof(long))):0) #define SET 1 #define UNSET 0 extern int armci_agg_save_strided_descriptor(void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, int proc, int op, armci_ihdl_t nb_handle); extern int armci_agg_save_giov_descriptor(armci_giov_t darr[], int len, int proc, int op, armci_ihdl_t nb_handle); extern int armci_agg_save_descriptor(void *src, void *dst, int bytes, int proc, int op, int is_registered_put, armci_ihdl_t nb_handle); extern void armci_agg_complete(armci_ihdl_t nb_handle, int condition); extern armci_ihdl_t armci_set_implicit_handle (int op, int proc); extern int armci_getnumcpus(void); extern long armci_util_long_getval(long* p); extern int armci_util_int_getval(int* p); extern void armci_region_register_shm(void *start, long size); extern void armci_region_register_loc(void *start, long size); extern void armci_region_clus_record(int node, void *start, long size); extern void armci_region_init(); extern int armci_region_clus_found(int node, void *start, int size); extern int armci_region_loc_found(void *start, int size); extern int armci_region_both_found(void *loc, void *rem, int size, int node); #ifdef REGIONS_REQUIRE_MEMHDL extern int get_armci_region_local_hndl(void *loc, int node, ARMCI_MEMHDL_T **loc_memhdl); #endif extern void armci_region_exchange(void *start, long size); extern void cpu_yield(); #ifdef ALLOW_PIN extern void armci_global_region_exchange(void *, long); #endif /* -------------------- ARMCI Groups ---------------------- */ /* data structure that caches a group's attribute */ #ifdef BGML #define PCLASS 3 #endif #ifdef MPI typedef int ARMCI_Datatype; extern int ATTR_KEY; /* attribute key */ /* #define ARMCI_GROUP /\*Generic ARMCI implementation*\/ */ typedef struct { armci_clus_t *grp_clus_info; int grp_me; /* my group id */ int grp_nclus; /* number of cluster nodes */ int grp_clus_me; /* my cluster node id */ int mem_offset; /* memory offset */ #ifdef ARMCI_GROUP int nproc; /* #procs in this group*/ int *proc_list; /* Ids of procs in this group (w.r.t. MPI_COMM_WORLD)*/ #endif }armci_grp_attr_t; #include "mpi.h" /**dup of MPI_COMM_WORLD for internal MPI communication*/ extern MPI_Comm ARMCI_COMM_WORLD; #ifdef PORTALS #include "portals.h" #endif typedef MPI_Comm ARMCI_Comm; typedef struct { #ifndef ARMCI_GROUP MPI_Comm icomm; MPI_Group igroup; #endif armci_grp_attr_t grp_attr; }ARMCI_iGroup; armci_grp_attr_t *ARMCI_Group_getattr(ARMCI_Group *grp); extern void armci_group_init(); extern void armci_group_finalize(); extern ARMCI_iGroup* armci_get_igroup_from_group(ARMCI_Group *group); #endif /* ifdef MPI */ /* -------------------------------------------------------- */ /* ------------ ARMCI Chekcpointing/Recovery -------------- */ #ifdef DO_CKPT extern int armci_init_checkpoint(); extern void armci_create_ckptds(armci_ckpt_ds_t *ckptds, int count); extern int armci_icheckpoint_init(char *filename, ARMCI_Group *grp, int savestack, int saveheap, armci_ckpt_ds_t *ckptds); extern int armci_icheckpoint(int rid); extern int armci_irecover(int rid,int iamreplacement); extern void armci_icheckpoint_finalize(int rid); #endif /* ifdef DO_CKPT */ /* -------------------------------------------------------- */ #endif ga-5-3/armci/src-gemini/buffers.c0000640005473000001440000007276511656603047015555 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: buffers.c,v 1.29.6.9 2007-07-02 05:16:50 d3p687 Exp $ **/ #define SIXTYFOUR 64 #define DEBUG_ 0 #define DEBUG2_ 0 #define EXTRA_ERR_CHECK /**********************************************************************/ #include #include #include #include "armcip.h" #include "request.h" #ifdef WIN32 # include typedef unsigned long ssize_t; #else # include #endif # define EQ_TAGS(a_, b_) !memcmp(&(a_), &(b_), sizeof(a_)) #define ALIGN64ADD(buf) (SIXTYFOUR-(((ssize_t)(buf))%SIXTYFOUR)) /* the following symbols should be defined if needed in protocol specific header file: BUF_EXTRA_FIELD, BUF_ALLOCATE */ #ifndef BUF_ALLOCATE # define BUF_ALLOCATE malloc #endif #if defined LIBONESIDED # define SMALL_BUF_LEN ARMCI_SMALL_BUF_SIZE #else # if defined(SERV_QUEUE) # define SMALL_BUF_LEN 4096 # else # define SMALL_BUF_LEN 2048 # endif #endif #ifndef MSG_BUFLEN_SMALL # define MSG_BUFLEN_SMALL (MSG_BUFLEN >>0) #endif #define LEFT_GUARD 11.11e11 #define RIGHT_GUARD 22.22e22 #define CLEAR_TABLE_SLOT(idx) *((int*)(_armci_buf_state->table+(idx))) =0 #ifndef BUF_NET_INIT #define BUF_NET_INIT(x,xX,Xx) #endif _buf_ackresp_t *_buf_ackresp_first,*_buf_ackresp_cur; /* we allow multiple buffers (up to 15) per single request * adjacent buffers can be coalesced into a large one */ typedef struct { int op; /* pending operation code */ int snd; /* if 1 then buffer is used for sending request */ int rcv; /* if 1 then buffer is used for receiving data */ int async; /* if 1 then request is nonblocking */ int first; /* id of the 1st buffer in the set in same request */ int count; /* count is not used and is always 1 (or 0???) */ /*unsigned int count:4; \* how many buffers used for this request 8 possible */ int busy; /* if 1 buffer is used and cannot be completed */ int cmpl; /* set to 1 if buffer was completed and can be released */ int to; /* serv/proc to which request was sent, 8172 possible */ }buf_state_t; #ifndef BUFID_PAD_T #define BUFID_PAD_T BUF_INFO_T #endif /* message send buffer data structure */ typedef struct { BUF_INFO_T id; # ifdef BUF_EXTRA_FIELD_T BUF_EXTRA_FIELD_T field; # endif char buffer[MSG_BUFLEN_SMALL]; } buf_ext_t; /* message send buffer data structure */ typedef struct { BUF_INFO_T id; # ifdef BUF_EXTRA_FIELD_T BUF_EXTRA_FIELD_T field; # endif char buffer[SMALL_BUF_LEN]; } buf_smext_t; /* we keep table and buffer pointer together for better locality */ typedef struct { double left_guard; /* stamp to verify if array was corrupted */ buf_state_t table[MAX_BUFS+MAX_SMALL_BUFS]; /*array with state of buffer */ buf_ext_t *buf; /* address of buffer pool */ buf_smext_t *smallbuf; /* address of the large buffer pool */ int avail; int smavail; int pad; double right_guard; /* stamp to verify if array was corrupted */ unsigned buf_bitmap; /* bitmaps to track available buffers: */ unsigned smbuf_bitmap;/* 1 - available, 0 - not available */ } reqbuf_pool_t; #ifndef BUF_EXTRA_FIELD_T # define SIZE_BUF_EXTRA_FIELD 0 # define BUF_TO_EBUF(buf) (buf_ext_t*)(((char*)buf) - sizeof(BUFID_PAD_T) -\ SIZE_BUF_EXTRA_FIELD) # define BUF_TO_SMEBUF(buf) (buf_smext_t*)(((char*)buf)- sizeof(BUFID_PAD_T) -\ SIZE_BUF_EXTRA_FIELD) #else # define BUF_TO_EBUF(buf) (buf_ext_t*)(((char*)buf) - sizeof(BUFID_PAD_T) -\ sizeof(BUF_EXTRA_FIELD_T)) # define BUF_TO_SMEBUF(buf) (buf_smext_t*)(((char*)buf)- sizeof(BUFID_PAD_T) -\ sizeof(BUF_EXTRA_FIELD_T)) #endif #define BUF_TO_BUFINDEX(buf) (BUF_TO_EBUF((buf)))->id.bufid #define BUF_TO_SMBUFINDEX(buf) (BUF_TO_SMEBUF((buf)))->id.bufid buf_ext_t *_armci_buffers; /* these are the actual buffers */ buf_smext_t *_armci_smbuffers; /* no, these are the actual buffers */ reqbuf_pool_t* _armci_buf_state; /* array that describes state of each buf */ extern active_socks_t *_armci_active_socks; /* returns bufinfo, given bufid */ INLINE BUF_INFO_T *_armci_id_to_bufinfo(int bufid) { if (bufid < 0 || bufid >= (MAX_BUFS+MAX_SMALL_BUFS)) armci_die2("_armci_id_to_bufinfo: bad id",bufid,MAX_BUFS); return bufid < MAX_BUFS ? &(_armci_buf_state->buf[bufid].id) : &(_armci_buf_state->smallbuf[bufid-MAX_BUFS].id); } /*\ we allocate alligned buffer space * this operation can be implemented in platform specific files \*/ void _armci_buf_init() { char *tmp; int extra=0; int smallbuf_size = sizeof(buf_smext_t)*(MAX_SMALL_BUFS); // tmp = (char *) BUF_ALLOCATE((MAX_BUFS*sizeof(buf_ext_t) + 64 + smallbuf_size + 64)); tmp = (char *) malloc((MAX_BUFS*sizeof(buf_ext_t) + 64 + smallbuf_size + 64)); bzero(tmp,MAX_BUFS*sizeof(buf_ext_t) + 64 + smallbuf_size + 64); extra= ALIGN64ADD(tmp); /* libonesided: register buffer memory */ # ifdef CRAY_REGISTER_ARMCI_MALLOC onesided_hnd_t cp_hnd; cos_mdesc_t local_mdesc; uint64_t length = (MAX_BUFS*sizeof(buf_ext_t) + 64 + smallbuf_size + 64); // get the onesided v2.0 api handle for the compute process cpGetOnesidedHandle(&cp_hnd); // register the memory onesided_mem_register(cp_hnd, tmp, length, 0, &local_mdesc); // for now; until we can search through the linked-list of registered memory // to deregister it by pointer (ptr) value only [see ARMCI_Free_local], we'll // take advanatage of lazy deregistration and assume that this segment will // be kept around as long as it's active. onesided_mem_deregister(cp_hnd, &local_mdesc); # endif _armci_buffers = (buf_ext_t *) (tmp + extra); tmp = (char *)(_armci_buffers + MAX_BUFS); extra = ALIGN64ADD(tmp); _armci_smbuffers = (buf_smext_t *) (tmp + extra); if(DEBUG2_){ printf("%d:armci_init_bufs: pointer %p, before align ptr=%p bufptr=%p end of region is %p size=%d extra=%d\n", armci_me,_armci_buffers,tmp,_armci_buffers->buffer,(_armci_buffers+MAX_BUFS), MAX_BUFS*sizeof(buf_ext_t),extra); fflush(stdout); } /* now allocate state array */ tmp = malloc(sizeof(reqbuf_pool_t) + 64); bzero(tmp,sizeof(reqbuf_pool_t) + 64); if(!tmp)armci_die("_armci_buf_init calloc failed",0); extra= ALIGN64ADD(tmp); _armci_buf_state = (reqbuf_pool_t*)(tmp + extra); /* initialize it */ _armci_buf_state->left_guard = LEFT_GUARD; _armci_buf_state->right_guard = RIGHT_GUARD; _armci_buf_state->avail =0; _armci_buf_state->smavail =MAX_BUFS; _armci_buf_state->buf = _armci_buffers; _armci_buf_state->smallbuf = _armci_smbuffers; _buf_ackresp_first=_buf_ackresp_cur=NULL; if(BUF_TO_EBUF(_armci_buf_state->buf[0].buffer)!=_armci_buf_state->buf) armci_die("buffers.c, internal structure alignment problem",0); # ifdef LIBONESIDED int i; for(i=0; i (void *)_armci_buffers && buf < (void *)(_armci_buffers+MAX_BUFS)){ index = BUF_TO_BUFINDEX(ptr); if((index >= MAX_BUFS)|| (index<0)) armci_die2("armci_buf_to_index: bad index:",index,MAX_BUFS); return(index); } else if(buf > (void *)_armci_smbuffers && buf < (void *)(_armci_smbuffers+MAX_SMALL_BUFS)){ index = BUF_TO_SMBUFINDEX(ptr); if((index >= MAX_BUFS+MAX_SMALL_BUFS)|| (indextable + index; ARMCI_PR_DBG("enter",0); if(index>=MAX_BUFS){ int relidx; relidx = index-MAX_BUFS; CLEAR_SEND_BUF_FIELD(_armci_buf_state->smallbuf[relidx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op); } else CLEAR_SEND_BUF_FIELD(_armci_buf_state->buf[index].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op); ARMCI_PR_DBG("exit",0); } /*\ complete outstanding operation that uses the specified buffer \*/ void _armci_buf_complete_index(int idx, int called) { int count; buf_state_t *buf_state = _armci_buf_state->table +idx; cos_request_t *req = NULL; count = buf_state->count; if(DEBUG_ || 0) { printf("%d:buf_complete_index:%d op=%d first=%d count=%d called=%d\n", armci_me,idx,buf_state->op,buf_state->first,buf_state->count, called); fflush(stdout); } if(buf_state->first != (unsigned int)idx){ armci_die2("complete_buf_index:inconsistent Index:",idx,buf_state->first); } /* need to call platform specific function */ if(idx>=MAX_BUFS){ int relidx,rr; relidx = idx-MAX_BUFS; //printf("\n%d:in clear idx=%d %d",armci_me,idx,_armci_buf_state->smallbuf[relidx].id.tag);fflush(stdout); /* ------------------------------------------------------------------------------------------- *\ active buffers need to be completed \* ------------------------------------------------------------------------------------------- */ # ifdef LIBONESIDED req = &_armci_buf_state->smallbuf[relidx].id.ar.req; cpReqWait(req); # else if(_armci_buf_state->smallbuf[relidx].id.tag && (_armci_buf_state->smallbuf[relidx].field)->tag>0) { rr=armci_client_complete(0,buf_state->to,_armci_buf_state->smallbuf[relidx].id.tag,_armci_buf_state->smallbuf[relidx].field); } CLEAR_SEND_BUF_FIELD(_armci_buf_state->smallbuf[relidx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op); # endif // later, we might just need to do this for all operations, not just get // Complete NBGET: non-blocking get if(_armci_buf_state->smallbuf[relidx].id.tag!=0 &&(buf_state->op == GET)){ armci_complete_req_buf(&(_armci_buf_state->smallbuf[relidx].id), _armci_buf_state->smallbuf[relidx].buffer); } _armci_buf_state->smallbuf[relidx].id.tag=0; } else { int rr; /* ------------------------------------------------------------------------------------------- *\ active buffers need to be completed \* ------------------------------------------------------------------------------------------- */ # ifdef LIBONESIDED req = &_armci_buf_state->buf[idx].id.ar.req; cpReqWait(req); # else if(_armci_buf_state->buf[idx].id.tag && (_armci_buf_state->buf[idx].field)->tag>0 ) rr=armci_client_complete(0,buf_state->to,_armci_buf_state->buf[idx].id.tag,_armci_buf_state->buf[idx].field); CLEAR_SEND_BUF_FIELD(_armci_buf_state->buf[idx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op); //printf("\n%d:in clear large idx=%d %d",armci_me,idx,_armci_buf_state->buf[idx].id.tag);fflush(stdout); # endif // later, we might just need to do this for all operations, not just get // Complete NBGET: non-blocking get if(_armci_buf_state->buf[idx].id.tag!=0 &&(buf_state->op == GET)){ armci_complete_req_buf(&(_armci_buf_state->buf[idx].id), _armci_buf_state->buf[idx].buffer); } _armci_buf_state->buf[idx].id.tag=0; } /* clear table slots for all the buffers in the set for this request */ for(; count; count--, buf_state++) *(int*)buf_state = 0; } /*\ test outstanding operation that uses the specified buffer for complete * It is important not to change the state of the buffer, the buffer has * to remain as it was, only completion has to be indicated \*/ int _armci_buf_test_index(int idx, int called) { int count,retval=0; buf_state_t *buf_state = _armci_buf_state->table +idx; count = buf_state->count; if(DEBUG_ ){ printf("%d:buf_test_index:%d op=%d first=%d count=%d called=%d\n", armci_me,idx,buf_state->op,buf_state->first,buf_state->count, called); fflush(stdout); } if(buf_state->first != (unsigned int)idx){ armci_die2("_buf_test_index:inconsistent index:",idx,buf_state->first); } # ifdef BUF_EXTRA_FIELD_T /* need to call platform specific function */ if(idx>=MAX_BUFS){ int relidx; relidx = idx-MAX_BUFS; /*printf("\n%d:relidx=%d \n",armci_me,relidx);fflush(stdout);*/ TEST_SEND_BUF_FIELD(_armci_buf_state->smallbuf[relidx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op,&retval); } else { TEST_SEND_BUF_FIELD(_armci_buf_state->buf[idx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op,&retval); } # endif if(DEBUG_ ){ printf("%d:buf_test_index:%d op=%d first=%d count=%d called=%d ret=%d\n", armci_me,idx,buf_state->op,buf_state->first,buf_state->count, called,retval); fflush(stdout); } return(retval); } /** an addition to the below operation to allow for multiple outstanding operations per server node */ void _armci_buf_ensure_pend_outstanding_op_per_node(void *buf, int node) { int i; int index =_armci_buf_to_index(buf); int this = _armci_buf_state->table[index].first; int nfirst, nlast; void _armci_buf_release_index(int i); int buf_pend_count=0; int changeid=0; nfirst=armci_clus_info[node].master; nlast = nfirst+armci_clus_info[node].nslave-1; if(_armci_buf_state->table[index].to<0){ _armci_buf_state->table[index].to = 0-1e6-_armci_buf_state->table[index].to; changeid=1; } if((_armci_buf_state->table[index].to<(unsigned int) nfirst) || (_armci_buf_state->table[index].to>(unsigned int) nlast)) armci_die2("_armci_buf_ensure_pend_outstanding_op_per_node: bad to",node, (int)_armci_buf_state->table[index].to); buf_pend_count=0; for(i=0;itable +i; if((buf_state->to >= nfirst) && (buf_state->to<= (unsigned int) nlast)) if( (buf_state->first != (unsigned int) this) && (buf_state->first==(unsigned int) i) && buf_state->op){ buf_pend_count++; if(buf_pend_count == NUM_SERV_BUFS){ _armci_buf_complete_index(i,0); _armci_buf_release_index(i); break; } } } if(changeid)_armci_buf_state->table[index].to = 0-1e6-_armci_buf_state->table[index].to; } /*\ make sure that there are no other pending operations to that smp node * this operation is called from platforms specific routine that sends * request * we could have accomplished the same in armci_buf_get but as Vinod * is pointing out, it is better to delay completing outstanding * calls to overlap memcpy for the current buffer with communication \*/ void _armci_buf_ensure_one_outstanding_op_per_node(void *buf, int node) { int i; int index =_armci_buf_to_index(buf); int this = _armci_buf_state->table[index].first; int nfirst, nlast; void _armci_buf_release_index(int i); nfirst=armci_clus_info[node].master; nlast = nfirst+armci_clus_info[node].nslave-1; if((_armci_buf_state->table[index].to<(unsigned int) nfirst) || (_armci_buf_state->table[index].to>(unsigned int) nlast)) armci_die2("_armci_buf_ensure_one_outstanding_op_per_node: bad to",node, (int)_armci_buf_state->table[index].to); for(i=0;itable +i; if((buf_state->to >= nfirst) && (buf_state->to<= (unsigned int) nlast)) { if((buf_state->first != (unsigned int) this)&&(buf_state->first==(unsigned int) i) && buf_state->op) { _armci_buf_complete_index(i,0); _armci_buf_release_index(i); } } } } /*\ same as above but for process \*/ void _armci_buf_ensure_one_outstanding_op_per_proc(void *buf, int proc) { int i; int index = _armci_buf_to_index(buf); int this = _armci_buf_state->table[index].first; void _armci_buf_release_index(int i); if(_armci_buf_state->table[index].to !=(unsigned int) proc ) armci_die2("_armci_buf_ensure_one_outstanding_op_per_proc: bad to", proc, (int)_armci_buf_state->table[index].to); for(i=0;itable +i; if(buf_state->to == (unsigned int) proc) { if((buf_state->first != (unsigned int) this)&&(buf_state->first==(unsigned int) i) && buf_state->op) { _armci_buf_complete_index(i,0); _armci_buf_release_index(i); } } } } #define HISTORY__ #ifdef HISTORY typedef struct{ int size; int op; int count; int id; } history_t; history_t history[100]; int h=0; void print_history() { int i; fflush(stdout); printf("%d records\n",h); for(i=0; ibuf[history[i].id].buffer, history[i].count, history[i].op); fflush(stdout); } #endif /*\ call corresponding to GET_SEND_BUF \*/ char *_armci_buf_get_small(int size, int operation, int to) { int avail=_armci_buf_state->smavail,i; _buf_ackresp_t *ar; if(_armci_buf_state->table[avail].op || _armci_buf_state->table[avail].first || _armci_buf_state->smallbuf[avail-MAX_BUFS].id.ar.req.active) { for(i=MAX_BUFS;itable[i].op && !_armci_buf_state->table[i].first && !_armci_buf_state->smallbuf[i-MAX_BUFS].id.ar.req.active) break; } if(i<(MAX_SMALL_BUFS+MAX_BUFS))avail = i; else { _armci_buf_complete_index(avail,1); } } _armci_buf_state->table[avail].op = operation; _armci_buf_state->table[avail].to = to; _armci_buf_state->table[avail].count= 1; _armci_buf_state->table[avail].first = avail; _armci_buf_state->smallbuf[avail-MAX_BUFS].id.tag=0; _armci_buf_state->smallbuf[avail-MAX_BUFS].id.bufid= avail; _armci_buf_state->smallbuf[avail-MAX_BUFS].id.protocol=0; ar=&_armci_buf_state->smallbuf[avail-MAX_BUFS].id.ar; assert(ar->val==0);assert(ar->next==NULL);assert(ar->previous==NULL); ar->req.active = 1; if(_buf_ackresp_cur!=NULL) _buf_ackresp_cur->next=ar; if(_buf_ackresp_first==NULL) _buf_ackresp_first=ar; ar->previous=_buf_ackresp_cur; ar->next=NULL; _buf_ackresp_cur=ar; if(DEBUG_ || 0) { printf("%d:buf_get_sm1:size=%d max=%d got %d ptr=%p op=%d to=%d count=%d first=%d\n", armci_me,size,SMALL_BUF_LEN,avail, _armci_buf_state->smallbuf[avail-MAX_BUFS].buffer,operation,to, (int)_armci_buf_state->table[avail].count,(int)_armci_buf_state->table[avail].first); fflush(stdout); } # ifdef BUF_EXTRA_FIELD_T INIT_SEND_BUF(_armci_buf_state->smallbuf[avail-MAX_BUFS].field,_armci_buf_state->table[avail].snd,_armci_buf_state->table[avail].rcv); #endif _armci_buf_state->smavail = (avail+1-MAX_BUFS)%MAX_SMALL_BUFS + MAX_BUFS; if(DEBUG_ || 0) { printf("%d:buf_get_sm:size=%d max=%d got %d ptr=%p op=%d to=%d count=%d first=%d\n", armci_me,size,SMALL_BUF_LEN,avail, _armci_buf_state->smallbuf[avail-MAX_BUFS].buffer,operation,to, _armci_buf_state->table[avail].count,_armci_buf_state->table[avail].first); fflush(stdout); } return(_armci_buf_state->smallbuf[avail-MAX_BUFS].buffer); } /*\ call corresponding to GET_SEND_BUF \*/ static char *rmo_buffer = NULL; char *_armci_buf_get(int size, int operation, int to) { int avail=_armci_buf_state->avail; int count=1, i; _buf_ackresp_t *ar; /*if small buffer, we go to another routine that gets smallbuf*/ if(size MSG_BUFLEN_SMALL) ){ double val = (double)size; /* use double due to a bug in gcc */ val /= MSG_BUFLEN_SMALL; count=(int)val; if(size%MSG_BUFLEN_SMALL) count++; assert(0); } /* start from 0 if there is not enough bufs available from here */ if((avail+count) > MAX_BUFS)avail = 0; /* avail should never point to buffer in a middle of a set of used bufs */ if(_armci_buf_state->table[avail].op && (_armci_buf_state->table[avail].first != (unsigned int) avail)){ sleep(1); printf("%d: inconsistent first. avail=%d count=%d first=%d size=%d\n", armci_me, avail, count, _armci_buf_state->table[avail].first, size); armci_die2("armci_buf_get: inconsistent first", avail, _armci_buf_state->table[avail].first); } /* we need complete "count" number of buffers */ for(i=0;itable[cur].op && _armci_buf_state->table[cur].first==(unsigned int) cur) || _armci_buf_state->buf[cur].id.ar.req.active) { _armci_buf_complete_index(cur,1); } } for(i=0; itable[avail+i].op = operation; _armci_buf_state->table[avail+i].to = to; _armci_buf_state->table[avail+i].count= count; _armci_buf_state->table[avail+i].first = avail; } _armci_buf_state->buf[avail].id.tag=0; _armci_buf_state->buf[avail].id.bufid=avail; _armci_buf_state->buf[avail].id.protocol=0; ar=&_armci_buf_state->buf[avail].id.ar; assert(ar->val==0);assert(ar->next==NULL);assert(ar->previous==NULL); assert(ar->req.active == 0); ar->req.active = 1; if(_buf_ackresp_cur!=NULL) _buf_ackresp_cur->next=ar; if(_buf_ackresp_first==NULL) _buf_ackresp_first=ar; ar->previous=_buf_ackresp_cur; ar->next=NULL; _buf_ackresp_cur = ar; # ifdef BUF_EXTRA_FIELD_T INIT_SEND_BUF(_armci_buf_state->buf[avail].field,_armci_buf_state->table[avail].snd,_armci_buf_state->table[avail].rcv); #endif #ifdef HISTORY history[h].size=size; history[h].op=operation; history[h].count=count; history[h].id = avail; h++; #endif if(DEBUG_ || 0) { printf("%d:buf_get:size=%d max=%d got %d ptr=%p count=%d op=%d to=%d\n", armci_me,size,MSG_BUFLEN_SMALL,avail, _armci_buf_state->buf[avail].buffer, count,operation,to); fflush(stdout); } /* select candidate buffer for next allocation request */ _armci_buf_state->avail = avail+count; _armci_buf_state->avail %= MAX_BUFS; return(_armci_buf_state->buf[avail].buffer); } void _armci_buf_release_index(int index) { int count; buf_state_t *buf_state = _armci_buf_state->table +index; char *_armci_buf_ptr_from_id(int id); if((index >= MAX_BUFS+MAX_SMALL_BUFS)|| (index<0)) armci_die2("armci_buf_release: bad index:",index,MAX_BUFS); count = _armci_buf_state->table[index].count; if(DEBUG_ || 0) { printf("%d:_armci_buf_release_index %d ptr=%p count=%d op=%d smavail=%d\n", armci_me,index,_armci_buf_ptr_from_id(index),count, _armci_buf_state->table[index].op,_armci_buf_state->smavail); fflush(stdout); } /* clear table slots for all the buffers in the set for this request */ for(; count; count--, buf_state++) *(int*)buf_state = 0; if(index >= MAX_BUFS){ _armci_buf_state->smallbuf[index-MAX_BUFS].id.tag=0; //_armci_buf_state->smavail = index; } else{ _armci_buf_state->buf[index].id.tag=0; // _armci_buf_state->avail = index; } /* the current buffer is prime candidate to satisfy next buffer request */ } /*\ release buffer when it becomes free \*/ void _armci_buf_release(void *buf) { _armci_buf_release_index(_armci_buf_to_index(buf)); } /*\ return pointer to buffer number id \*/ char *_armci_buf_ptr_from_id(int id) { if(id <0 || id >=(MAX_BUFS+MAX_SMALL_BUFS)) armci_die2("armci_buf_ptr_from_id: bad id",id,MAX_BUFS); if(id >=MAX_BUFS)return(_armci_buf_state->smallbuf[id-MAX_BUFS].buffer); return(_armci_buf_state->buf[id].buffer); } /*\function called from PARMCI_Wait to wait for non-blocking ops \*/ void _armci_buf_complete_nb_request(int bufid,unsigned int tag, int *retcode) { int i=0; #if 0 printf("\n%d:wait called with bufid=%d tag=%d \n",armci_me,bufid,tag); fflush(stdout); #endif if(bufid == NB_NONE) *retcode=0; else if(bufid == NB_MULTI) { for(i=0;ibuf[i].id.tag) _armci_buf_complete_index(i,1); } for(i=0;ismallbuf[i].id.tag) _armci_buf_complete_index(i+MAX_BUFS,1); } *retcode=0; } else { if(bufidbuf[bufid].id.tag) _armci_buf_complete_index(bufid,1); } else{ if(tag && tag==_armci_buf_state->smallbuf[bufid-MAX_BUFS].id.tag) _armci_buf_complete_index(bufid,1); } *retcode=0; } } /*\function called from PARMCI_Test to test completion of non-blocking ops \*/ void _armci_buf_test_nb_request(int bufid,unsigned int tag, int *retcode) { int i; if(bufid == NB_NONE) *retcode=0; else if(bufid == NB_MULTI) { for(i=0;ibuf[i].id.tag){ if(_armci_buf_test_index(i,1)){ *retcode=1; break; } } } for(i=0;ismallbuf[i].id.tag) if(_armci_buf_test_index(i+MAX_BUFS,1)){ *retcode=1; break; } } } else { if(bufidbuf[bufid].id.tag) *retcode = _armci_buf_test_index(bufid,1); } else{ if(tag && tag==_armci_buf_state->smallbuf[bufid-MAX_BUFS].id.tag) *retcode = _armci_buf_test_index(bufid,1); } } } /*\function to set the buffer tag and the protocol \*/ void _armci_buf_set_tag(void *bufptr,unsigned int tag,short int protocol) { int index = _armci_buf_to_index(bufptr); /*_armci_buf_state->table[index].async=1;*/ if(indexbuf[index].id.tag=tag; _armci_buf_state->buf[index].id.protocol=protocol; } else{ _armci_buf_state->smallbuf[index-MAX_BUFS].id.tag=tag; _armci_buf_state->smallbuf[index-MAX_BUFS].id.protocol=protocol; } } int _armci_buf_get_tag(void *bufptr) { int index = _armci_buf_to_index(bufptr); if(indexbuf[index].id.tag); else return(_armci_buf_state->smallbuf[index-MAX_BUFS].id.tag); } /*\function to return bufinfo, given buf ptr \*/ BUF_INFO_T *_armci_buf_to_bufinfo(void *buf){ if(buf > (void *)_armci_buffers && buf < (void *)(_armci_buffers+MAX_BUFS)){ return(&((BUF_TO_EBUF(buf))->id)); } else if(buf > (void *)_armci_smbuffers && buf < (void *)(_armci_smbuffers+MAX_SMALL_BUFS)){ return(&((BUF_TO_SMEBUF(buf))->id)); } else { armci_die("armci_buf_to_index: bad pointer",0); return(0); } } /*\function to clear all buffers \*/ void _armci_buf_clear_all() { int i; for(i=0;itable[i].op || _armci_buf_state->table[i].first) CLEAR_SEND_BUF_FIELD(_armci_buf_state->buf[i].field,_armci_buf_state->table[i].snd,_armci_buf_state->table[i].rcv,_armci_buf_state->table[i].to,_armci_buf_state->table[i].op); #endif } for(i=MAX_BUFS;itable[i].op || _armci_buf_state->table[i].first) CLEAR_SEND_BUF_FIELD(_armci_buf_state->smallbuf[i-MAX_BUFS].field,_armci_buf_state->table[i].snd,_armci_buf_state->table[i].rcv,_armci_buf_state->table[i].to,_armci_buf_state->table[i].op); #endif } } /* function to return bufinfo, given buf tag */ BUF_INFO_T *_armci_tag_to_bufinfo(msg_tag_t tag) { int idx; for (idx=0; idx < MAX_BUFS; idx++) if (EQ_TAGS(_armci_buffers[idx].id.tag, tag)) break; if (idx == MAX_BUFS) {/* not found is regular buffers */ for (idx = 0; idx < MAX_SMALL_BUFS; idx++) if (EQ_TAGS(_armci_smbuffers[idx].id.tag, tag)) break; if (idx == MAX_SMALL_BUFS) /* not found at all */ armci_die("_armci_tag_to_bufinfo: bad tag",0); return &(_armci_smbuffers[idx].id); } else return &(_armci_buffers[idx].id); } /* inline primitives for buffer state management */ INLINE char *_armci_buf_get_clear_busy(int size, int operation, int to) { char *buf = _armci_buf_get(size, operation, to); _armci_buf_set_busy(buf, 0); return buf; } INLINE void _armci_buf_set_busy(void *buf, int state) { _armci_buf_state->table[_armci_buf_to_index(buf)].busy = state; } INLINE void _armci_buf_set_busy_idx(int idx, int state) { _armci_buf_state->table[idx].busy = state; } #if 0 INLINE int _armci_buf_cmpld(void *buf) { return _armci_buf_state->table[_armci_buf_to_index(buf)].cmpl; } #else INLINE int _armci_buf_cmpld(int bufid) { return _armci_buf_state->table[bufid].cmpl; } #endif INLINE void _armci_buf_set_cmpld(void *buf, int state) { _armci_buf_state->table[_armci_buf_to_index(buf)].cmpl = state; } INLINE void _armci_buf_set_cmpld_idx(int idx, int state) { _armci_buf_state->table[idx].cmpl = state; } ga-5-3/armci/src-gemini/semaphores.c0000640005473000001440000000401711701667223016245 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: semaphores.c,v 1.12 2005-03-10 19:11:23 vinodtipparaju Exp $ */ #include "semaphores.h" #include #include int num_sem_alloc=0; void perror(); #ifdef SUN int fprintf(); void fflush(); int semget(),semctl(); #endif extern void armci_die(char*, int); struct sembuf sops; int semaphoreID; int SemGet(num_sem) int num_sem; { semaphoreID = semget(IPC_PRIVATE,num_sem, IPC_CREAT | 0600); if(semaphoreID<0){ fprintf(stderr," Semaphore Allocation Failed \nsuggestions to fix the problem: \n"); fprintf(stderr," 1. run ipcs and ipcrm -s commands to clean any semaphore ids\n"); fprintf(stderr," 2. verify if constant SEMMSL defined in file semaphore.h is set correctly for your system\n"); fprintf(stderr," 3. recompile semaphore.c\n"); sleep(1); perror("Error message from failed semget:"); armci_die(" exiting ...", num_sem); } num_sem_alloc = num_sem; return(semaphoreID); } void SemInit(id,value) int id,value; { int i, semid, num_sem; union semun semctl_arg; semctl_arg.val = value; if(id == ALL_SEMS){ semid = 0; num_sem = num_sem_alloc;} else { semid = id; num_sem = 1;} for(i=0; i< num_sem; i++){ if( semctl(semaphoreID, semid, SETVAL,semctl_arg )<0){ perror((char*)0); armci_die("SemInit error",id); } semid++; } } /* release semaphore(s) */ void SemDel() { union semun dummy; /* this is only to avoid compiler whinning about the unitialized variable*/ dummy.val=0; (void) semctl(semaphoreID,0,IPC_RMID,dummy); } void Sem_CreateInitLocks(int num, lockset_t *id) { *id = SemGet(num); SemInit(ALL_SEMS,1); } void Sem_InitLocks(int num, lockset_t id) { semaphoreID = id; num_sem_alloc = num; } void Sem_DeleteLocks(lockset_t id) { union semun dummy; /* this is only to avoid compiler whinning about the unitialized variable*/ dummy.val=0; (void) semctl(id,0,IPC_RMID,dummy); } ga-5-3/armci/src-gemini/armci_portals.c0000640005473000001440000021225311622516074016740 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /*$id:$*/ #define _GNU_SOURCE #include #include #include "armcip.h" #include "message.h" #include #include #include #include #include #define DEBUG_COMM 0 #define DEBUG_INIT 0 #define DEBUG_SERV 0 #define PUT_LOCAL_ONLY_COMPLETION__ typedef struct arminfo{ caddr_t ptr[MAX_DS]; size_t size[MAX_DS]; long serv_offs[MAX_DS]; int cur_ds; }rm_info_t; static rm_info_t *all_meminfo; static int client_md_count=0,serv_md_count=0; typedef struct arns{ long data; long data1; struct arns *next; } arnode; #ifdef ARMCI_CHECK_STATE arnode * arlist_add(arnode **p, long i,long j) { arnode *n = (arnode *)malloc(sizeof(arnode)); if(n == NULL) return NULL; n->next = *p; *p = n; n->data = i; n->data1 = j; return *p; } void arlist_remove(arnode **p) { if(*p != NULL){ arnode *n = *p; *p = (*p)->next; free(n); } } arnode **arlist_search(arnode **n, long i) { while (*n != NULL){ if ((*n)->data == i){ return n; } n = &(*n)->next; } return NULL; } void arlist_print(arnode *n) { if (n == NULL){ /*printf("arlist is empty\n");*/ } while (n != NULL){ printf("%d:%d %d next=%d\n", armci_me,n->data,n->data1,(n->next==NULL)?0:1); n = n->next; } } #endif extern void armci_util_wait_int(volatile int *, int , int ); extern void armci_util_wait_long(volatile long *, long, int ); int _armci_portals_server_ready=0; int _armci_portals_client_ready=0; int _armci_server_mutex_ready=0; void *_armci_server_mutex_ptr = NULL; #ifdef ARMCI_REGISTER_SHMEM typedef struct { void *base_ptr; void *serv_ptr; size_t size; int islocal; int valid; }aptl_reginfo_t; typedef struct { aptl_reginfo_t reginfo[MAX_MEM_REGIONS]; int reg_count; } rem_meminfo_t; #endif typedef struct serv_buf_t{ ptl_handle_md_t md_h; ptl_handle_me_t me_h; ptl_md_t md; char *buf; char *bufend; } serv_buf_t; char **client_buf_ptrs; static int armci_server_terminating=0; serv_buf_t *serv_bufs; long servackval=ARMCI_STAMP,*serv_ack_ptr=&servackval; ptl_handle_md_t serv_ack_md_h,serv_response_md_h; static armci_portals_proc_t _armci_portals_proc_struct; static armci_portals_serv_t _armci_portals_serv_struct; static armci_portals_proc_t *portals = &_armci_portals_proc_struct; static armci_portals_serv_t *serv_portals = &_armci_portals_serv_struct; /*static */comp_desc _compdesc_array[NUM_COMP_DSCR]; static arnode *arn = NULL; #ifdef ARMCI_REGISTER_SHMEM static rem_meminfo_t *_rem_meminfo; static aptl_reginfo_t *_tmp_rem_reginfo; #define IN_REGION(_ptr__,_reg__) ((_reg__.valid) && (_ptr__)>=(_reg__.serv_ptr) \ && (_ptr__) <= ( (char *)(_reg__.serv_ptr)+_reg__.size)) #endif static int ptl_initialized = 0; extern pid_t server_pid; ptl_ni_limits_t armci_ptl_nilimits; ptl_ni_limits_t armci_ptl_Snilimits; void armci_portals_init_ptl() { int rc; int npes,i; ARMCI_PR_DBG("enter",0); /*initialize data structures*/ portals->ptl = ARMCI_PORTALS_PTL_NUMBER; /* our own ptl number */ rc=PtlNIInit(IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK,PTL_IFACE_SS), PTL_PID_ANY, NULL, &armci_ptl_nilimits, &(portals->ni_h)); switch(rc) { case PTL_OK: /*printf("\n%d:ok for nii\n",armci_me);*/ break; case PTL_IFACE_DUP: /*printf("\n%d:dup for nii\n",armci_me);*/ break; default: printf( "PtlNIInit() failed %d error=%s\n",rc,ARMCI_NET_ERRTOSTR(rc) ); exit(1); } if((rc=PtlGetId(portals->ni_h,&portals->rank)) !=PTL_OK) { printf("%s: PtlGetId failed: %d(%d)\n",__FUNCTION__, rc, server_pid); exit(1); } ARMCI_PR_DBG("exit",0); } static inline void init_serv_buf(serv_buf_t *tmp) { int rc; ptl_match_bits_t ignbits = 0xFFFFFFFFF00000FF; ptl_match_bits_t mbits; ptl_process_id_t match_id; ptl_md_t *md_ptr,md; ARMCI_PR_DBG("enter",0); tmp->md.user_ptr=tmp; tmp->md.start=tmp->buf; tmp->md.length=armci_nproc*NUM_SERV_BUFS*VBUF_DLEN; tmp->md.eq_handle=portals->Seq_h; tmp->md.max_size=0; tmp->md.threshold=PTL_MD_THRESH_INF; tmp->md.options=PTL_MD_OP_GET | PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; { match_id.nid = PTL_NID_ANY; match_id.pid = PTL_PID_ANY; mbits = 16<<8; rc = PtlMEAttach(portals->Sni_h,portals->ptl,match_id,mbits,ignbits, PTL_RETAIN,PTL_INS_AFTER,&(tmp->me_h)); if (rc != PTL_OK) { printf("(%d):PtlMEAttach: %s\n", portals->Srank,ARMCI_NET_ERRTOSTR(rc)); armci_die("portals attach error isb",rc); } tmp->md.options=PTL_MD_OP_GET | PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE | PTL_MD_MANAGE_REMOTE; rc = PtlMDAttach((tmp->me_h),tmp->md,PTL_RETAIN,&(tmp->md_h)); if (rc != PTL_OK) { printf("%d:PtlMDAttach: %s %d\n", portals->Srank, ARMCI_NET_ERRTOSTR(rc),(serv_md_count+client_md_count) ); exit(1); } serv_md_count++; } /*set up for sending acks */ md_ptr = &(md); md_ptr->start = serv_ack_ptr; md_ptr->length = sizeof(long); md_ptr->threshold = PTL_MD_THRESH_INF; md_ptr->options = PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; md_ptr->user_ptr = NULL; md_ptr->max_size = sizeof(long); md_ptr->eq_handle = portals->Seq_h; rc = PtlMDBind(portals->Sni_h,md,PTL_RETAIN,&serv_ack_md_h); if (rc != PTL_OK){ fprintf(stderr, "%d:PtlMDBindxn: %s %d\n", portals->Srank.nid, ARMCI_NET_ERRTOSTR(rc),(serv_md_count+client_md_count)); armci_die("ptlmdbind failed",0); } serv_md_count++; /*set up for sending response */ md_ptr = &(md); md_ptr->start = tmp->buf; md_ptr->length = tmp->md.length; md_ptr->threshold = PTL_MD_THRESH_INF; md_ptr->options = PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; md_ptr->user_ptr = NULL; md_ptr->max_size = tmp->md.length; md_ptr->eq_handle = portals->Seq_h; rc = PtlMDBind(portals->Sni_h, md, PTL_RETAIN, &serv_response_md_h); if (rc != PTL_OK){ fprintf(stderr, "%d:PtlMDBindxn: %s %d\n", portals->Srank.nid, ARMCI_NET_ERRTOSTR(rc),(serv_md_count+client_md_count)); armci_die("ptlmdbind failed",0); } serv_md_count++; ARMCI_PR_DBG("exit",0); } void armci_portals_wait_for_client() { int rc; int *procidinfo; extern armci_clus_t *armci_clus_info; ptl_process_id_t *tmp; ARMCI_PR_SDBG("enter",0); //printf(" "); armci_util_wait_int(&_armci_portals_client_ready,1,1000); if((armci_me)!=armci_master){ exit(0); } else{ if(DEBUG_SERV){ printf("\n%d:chosen one nid,pid=%d,%d\n",armci_me,portals->Srank.nid,portals->Srank.pid); } } ARMCI_PR_SDBG("exit",0); } void armci_portals_prepare_server() { int rc,i,j; ARMCI_PR_SDBG("enter",0); serv_bufs=(serv_buf_t *)malloc(sizeof(serv_buf_t)); bzero(serv_bufs,sizeof(serv_buf_t)); assert(serv_bufs); serv_bufs->buf=(char *)malloc((NUM_SERV_BUFS*armci_nproc*VBUF_DLEN)); bzero(serv_bufs->buf,(NUM_SERV_BUFS*armci_nproc*VBUF_DLEN)); assert(serv_bufs->buf); serv_bufs->bufend=(char *)serv_bufs->buf+(NUM_SERV_BUFS*armci_nproc*VBUF_DLEN); rc = PtlEQAlloc(portals->Sni_h,4*(NUM_SERV_BUFS*armci_nproc),NULL, &(portals->Seq_h)); if (rc != PTL_OK) { printf("(%d):Ptleaalloc() failed: %s %d (%d)\n",portals->Srank, ARMCI_NET_ERRTOSTR(rc),(NUM_SERV_BUFS*armci_nproc),rc); armci_die("EQ Alloc failed",rc); } init_serv_buf(serv_bufs); _armci_portals_server_ready=1; ARMCI_PR_SDBG("exit",0); } void *armci_server_code(void *data) { int rc,num_interface; ARMCI_PR_SDBG("enter",0); if(DEBUG_INIT) printf("%d: in server after creating thread.\n",armci_me); rc = PtlInit(&num_interface); if (rc != PTL_OK) { printf("PtlInit() failed %d %s\n",rc, ARMCI_NET_ERRTOSTR(rc) ); exit(1); } rc=PtlNIInit(IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK,PTL_IFACE_SS), PTL_PID_ANY, NULL, &armci_ptl_Snilimits, &(portals->Sni_h)); switch(rc) { case PTL_OK: //printf("\n(%d):ok for serv nii\n",armci_me); break; case PTL_IFACE_DUP: //printf("\n(%d):dup for serv nii\n",armci_me); break; default: printf( "PtlNIInit() serv failed %d error=%s\n",rc,ARMCI_NET_ERRTOSTR(rc) ); exit(1); } if((rc=PtlGetId(portals->Sni_h,&portals->Srank)) !=PTL_OK) { printf("%s: PtlGetId failed: %d(%d)\n",__FUNCTION__, rc, server_pid); exit(1); } /*printf("\n(%d):server nid=%d pid=%d\n",armci_me,portals->Srank.nid,portals->Srank.pid);*/ armci_portals_wait_for_client(); armci_portals_prepare_server(); if(DEBUG_INIT) { printf("(%d): connected to all computing processes\n",armci_me); fflush(stdout); } armci_call_data_server(); armci_transport_cleanup(); ARMCI_PR_SDBG("exit",0); return(NULL); } void armci_client_connect_to_servers() { int rc; ptl_size_t offset_local = 0, offset_remote=0; ptl_md_t md_local; ptl_handle_md_t md_hdl_local; ptl_process_id_t *tmp; int *procidinfo; int c_info; int *flag,shmid; void *addr; char *buf; extern int _armci_server_started; ARMCI_PR_DBG("enter",0); _armci_portals_client_ready=1; if(armci_me==armci_master){ armci_util_wait_int(&_armci_portals_server_ready,1,1000); } armci_msg_barrier(); _armci_server_started=1; if(armci_me==armci_master){ portals->servid_map[armci_clus_me].pid=portals->Srank.pid; portals->servid_map[armci_clus_me].nid=portals->Srank.nid; } armci_msg_gop_scope(SCOPE_ALL,portals->servid_map,(sizeof(ptl_process_id_t)*armci_nclus)/sizeof(int),"+",ARMCI_INT); ARMCI_PR_DBG("exit",0); } static int check_meminfo(void *ptr, long size, int proc) { for(int i=0;i=0) && (right>=size)) return(i+1); } return 0; } static void add_meminfo(void *ptr, size_t size, int proc) { if(check_meminfo(ptr,(long)size,proc)!=0)armci_die("repeat add request for dss",proc); all_meminfo[proc].cur_ds++; all_meminfo[proc].ptr[all_meminfo[proc].cur_ds]=ptr; all_meminfo[proc].size[all_meminfo[proc].cur_ds]=size; #ifdef DEBUG_MEM printf("\n%d:%s:adding %p %ld %d at %d",armci_me,__FUNCTION__,ptr,size,proc,all_meminfo[proc].cur_ds); #endif } typedef struct{ void *ptr; size_t size; size_t serv_offs; } meminfo_t; void armci_exchange_meminfo(void *ptr, size_t size,size_t off) { static meminfo_t exng[armci_nproc]; bzero(exng,sizeof(meminfo_t)*armci_nproc); exng[armci_me].ptr=ptr; exng[armci_me].size=size; exng[armci_me].serv_offs = off; armci_msg_gop_scope(SCOPE_ALL,exng,(sizeof(meminfo_t)*armci_nproc)/sizeof(int),"+",ARMCI_INT); for(int i=0;ibrval[portals->cur_ds]){ ptl_md_t *md_ptr; ptl_match_bits_t ignbits = 0xFFFFFFFFFFFFFF00; ptl_process_id_t match_id; int rc,cds=++portals->cur_ds; if(cds>=MAX_DS)armci_die("increase MAX_CDS",cds); portals->dsbase[cds]=portals->brval[cds-1]; //portals->dsbase[cds]=sbrk(0); ptr = portals->brval[cds] = br_val; size = portals->dssizes[cds]=((caddr_t)portals->brval[cds] - portals->dsbase[cds]); portals->serv_offs[cds] = serv_offset; printf("\n%d:%s:base=%p brval=%p dslen=%ld %p end=%p",armci_me,__FUNCTION__,portals->dsbase[cds],br_val, portals->dssizes[cds],portals->brval[cds],get_heap_bottom_addr()); md_ptr = &(portals->heap_md[cds]); md_ptr->start = portals->dsbase[cds]; md_ptr->length = portals->dssizes[cds]; md_ptr->threshold = PTL_MD_THRESH_INF; md_ptr->options = PTL_MD_OP_PUT | PTL_MD_OP_GET | PTL_MD_MANAGE_REMOTE; md_ptr->user_ptr = NULL; md_ptr->max_size = 0; md_ptr->eq_handle = PTL_EQ_NONE; portals->heap_mb[cds]=cds+1; match_id.nid = PTL_NID_ANY; match_id.pid = PTL_PID_ANY; rc = PtlMEAttach(portals->ni_h,portals->ptl,match_id, portals->heap_mb[cds], ignbits, PTL_RETAIN,PTL_INS_AFTER, &(portals->heap_me_h[cds])); if (rc != PTL_OK) { printf("%d:PtlMEAttach: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("portals attach error reg",rc); } rc = PtlMDAttach((portals->heap_me_h[cds]), *md_ptr,PTL_RETAIN, &(portals->heap_md_h[cds])); if (rc != PTL_OK) { printf("%d:PtlMDAttach: %s %d\n", portals->rank, ARMCI_NET_ERRTOSTR(rc),(client_md_count+serv_md_count)); armci_die("portals attach error reg",rc); } } else{ #ifdef DEBUG_MEM_ extern caddr_t _end; printf("\n%d:%s:curds=%d brvalin=%p curbrval=%p _end=%p &_end=%p",armci_me,__FUNCTION__,portals->cur_ds,portals->brval[portals->cur_ds],br_val,_end,&_end); #endif } armci_exchange_meminfo(ptr,size,serv_offset); } #ifndef PMI_SUCCESS #define PMI_SUCCESS 0 #endif static int *_client_servbuf_count; int armci_init_portals(caddr_t atbeginbrval) { #ifndef OLD_PORTALS_CODE int i,rc,np,me; ptl_process_id_t id; ptl_process_id_t clone_id; MPI_Comm_size(ARMCI_COMM_WORLD,&np); MPI_Comm_rank(ARMCI_COMM_WORLD,&me); if(armci_me != me) { printf("[mpi %d]: armci_me=%d ... this is a problem\n",me,armci_me); armci_die("mpi rank mismatch",911); } portals_cp_init(); MPI_Barrier(ARMCI_COMM_WORLD); portals_ds_ready = 0; if(armci_me == armci_master) { portalsCloneDataServer( portals_ds_thread ); portalsSpinLockOnInt( &portals_ds_ready,1,10000 ); } MPI_Barrier(ARMCI_COMM_WORLD); i=0; if((rc=PMI_Initialized(&i))!=PMI_SUCCESS){ printf("PMI_Initialized failed\n"); } if(i==0){ if((rc==PMI_Init(&i))!=PMI_SUCCESS){ printf("MPI_Init failed (npes=%d)\n", armci_nproc); } } if((rc=PMI_CNOS_Get_nidpid_map(&portals_id_map))!=PMI_SUCCESS){ printf("Getting proc map failed (npes=%d)\n", armci_nproc); } /* create intra-node communicator */ MPI_Barrier(ARMCI_COMM_WORLD); portals_cp_init_throttle(armci_nclus); MPI_Barrier(ARMCI_COMM_WORLD); /* stuff from old code ... */ bzero(portals,sizeof(armci_portals_proc_t)); // note: i got rid of this rem_meminfo stuff with the gemini version // see that code to see how to remove it here # ifdef ARMCI_REGISTER_SHMEM _rem_meminfo = (rem_meminfo_t *)calloc(armci_nproc,sizeof(rem_meminfo_t)); _tmp_rem_reginfo = (aptl_reginfo_t *)malloc(sizeof(aptl_reginfo_t)*armci_nproc); if( _rem_meminfo==NULL || _tmp_rem_reginfo ==NULL) armci_die("malloc failed in init_portals",0); //if(armci_me == 0) { // printf("sizeof(rem_meminfo_t)=%ld\n",sizeof(rem_meminfo_t)); //} # endif # ifdef CRAY_USE_ARMCI_CLIENT_BUFFERS client_buf_ptrs = (char **) calloc(armci_nproc,sizeof(char *)); assert(client_buf_ptrs); armci_msg_barrier(); _armci_buf_init(); # endif /* end old stuff */ return 0; #else int num_interface; int rc; int npes,i; ARMCI_PR_DBG("enter",0); bzero(portals,sizeof(armci_portals_proc_t)); _rem_meminfo = (rem_meminfo_t *)calloc(armci_nproc,sizeof(rem_meminfo_t)); _tmp_rem_reginfo = (aptl_reginfo_t *)malloc(sizeof(aptl_reginfo_t)*armci_nproc); if( _rem_meminfo==NULL || _tmp_rem_reginfo ==NULL) armci_die("malloc failed in init_portals",0); portals->servid_map=(ptl_process_id_t *)calloc(armci_nclus,sizeof(ptl_process_id_t)); if(portals->servid_map==NULL)armci_die("calloc of servidmap failed",0); rc = PtlInit(&num_interface); if (rc != PTL_OK) { printf("PtlInit() failed %d %s\n",rc, ARMCI_NET_ERRTOSTR(rc) ); exit(1); } armci_portals_init_ptl(); #if 1 i=0; if((rc=PMI_Initialized(&i))!=PMI_SUCCESS){ printf("PMI_Initialized failed\n"); } if(i==0){ if((rc==PMI_Init(&i))!=PMI_SUCCESS){ printf("MPI_Init failed (npes=%d)\n", armci_nproc); } } if((rc=PMI_CNOS_Get_nidpid_map(&portals->procid_map))!=PMI_SUCCESS){ printf("Getting proc map failed (npes=%d)\n", armci_nproc); } //printf(" "); # else portals->procid_map = (ptl_process_id_t *) calloc(armci_nproc,sizeof(ptl_process_id_t)); portals->procid_map[armci_me]=portals->rank; armci_msg_gop_scope(SCOPE_ALL,portals->procid_map,(sizeof(ptl_process_id_t)*armci_nproc)/sizeof(int),"+",ARMCI_INT); //printf(" "); #endif client_buf_ptrs = (char **) calloc(armci_nproc,sizeof(char *)); assert(client_buf_ptrs); armci_msg_barrier(); if(armci_me==armci_master)armci_create_server_process( armci_server_code ); rc = PtlEQAlloc(portals->ni_h,16*NUM_COMP_DSCR,NULL, &(portals->eq_h)); if (rc != PTL_OK) { printf("%d:Ptleqalloc() failed: %s (%d)\n", armci_me, ARMCI_NET_ERRTOSTR(rc) , rc); armci_die("EQ Alloc failed",rc); } /*printf("\n%d:client nid=%d pid=%d\n",armci_me,portals->rank.nid,portals->rank.pid);*/ _armci_buf_init(); for(i=0;ieq_h; _compdesc_array[i].mem_dsc.max_size=0; /*_compdesc_array[i].mem_dsc.threshold=PTL_MD_THRESH_INF;*/ _compdesc_array[i].mem_dsc.threshold=2; _compdesc_array[i].mem_dsc.options=PTL_MD_OP_GET | PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; } ptl_initialized = 1; portals->free_comp_desc_index=0; /*for(i=0;iprocid_map[i].nid,portals->procid_map[i].pid);*/ _client_servbuf_count = calloc(armci_nclus,sizeof(int)); armci_msg_barrier(); armci_client_connect_to_servers(); armci_msg_barrier(); if(DEBUG_COMM){ cpu_set_t mycpuid,new_mask; char cid[8],*cidptr; int rrr; extern char * cpuset_to_cstr(cpu_set_t *mask, char *str); rrr=sched_getaffinity(0, sizeof(mycpuid), &mycpuid); if(rrr)perror("sched_getaffinity"); cidptr = cpuset_to_cstr(&mycpuid,cid); printf("%d:my affinity is to %s\n",armci_me,cid); } #ifdef NEW_MALLOC /*post entire heap wildcard for direct communication*/ { ptl_md_t *md_ptr; ptl_match_bits_t ignbits = 0xFFFFFFFFFFFFFF00; ptl_process_id_t match_id; portals->cur_ds = 0; portals->dsbase[0]=get_heap_bottom_addr(); //portals->brval[0] = sbrk(0); portals->brval[0] = atbeginbrval; portals->dssizes[0]=((caddr_t)portals->brval[0] - portals->dsbase[0]); printf("\n%d:base=%p dslen=%ld %p",armci_me,portals->dsbase[0], portals->dssizes[0],portals->brval[0]); md_ptr = &(portals->heap_md[0]); md_ptr->start = portals->dsbase[0]; md_ptr->length = portals->dssizes[0]; md_ptr->threshold = PTL_MD_THRESH_INF; md_ptr->options = PTL_MD_OP_PUT | PTL_MD_OP_GET | PTL_MD_MANAGE_REMOTE; md_ptr->user_ptr = NULL; md_ptr->max_size = 0; md_ptr->eq_handle = PTL_EQ_NONE; portals->heap_mb[0]=1; match_id.nid = PTL_NID_ANY; match_id.pid = PTL_PID_ANY; rc = PtlMEAttach(portals->ni_h,portals->ptl,match_id, portals->heap_mb[0], ignbits, PTL_RETAIN,PTL_INS_AFTER, &(portals->heap_me_h[0])); if (rc != PTL_OK) { printf("%d:PtlMEAttach: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("portals attach error reg",rc); } rc = PtlMDAttach((portals->heap_me_h[0]), *md_ptr,PTL_RETAIN, &(portals->heap_md_h[0])); if (rc != PTL_OK) { printf("%d:PtlMDAttach: %s %d\n", portals->rank, ARMCI_NET_ERRTOSTR(rc),(client_md_count+serv_md_count)); armci_die("portals attach error reg",rc); } all_meminfo = (rm_info_t *)malloc(sizeof(rm_info_t)*armci_nproc); all_meminfo[armci_me].cur_ds = -1; armci_exchange_meminfo(portals->dsbase[0],portals->dssizes[0],0); } #endif ARMCI_PR_DBG("exit",0); return 0; #endif } void armci_fini_portals() { ARMCI_PR_DBG("enter",0); if(DEBUG_INIT){ printf("ENTERING ARMCI_FINI_PORTALS\n");fflush(stdout); } #ifdef ARMCI_CHECK_STATE arlist_print(arn); #endif PtlNIFini(portals->ni_h); /*PtlFini();*/ if(DEBUG_INIT){ printf("LEAVING ARMCI_FINI_PORTALS\n");fflush(stdout); } ARMCI_PR_DBG("exit",0); } void armci_pin_contig1(void *start,size_t bytes) { } #ifdef ARMCI_REGISTER_SHMEM #ifndef NEW_MALLOC void armci_register_req(void *start,int bytes, int ID) { int rc; ptl_md_t *md_ptr; ptl_match_bits_t ignbits = 0xFFFFFFFFFFFFFF00; ptl_process_id_t match_id; ARMCI_PR_DBG("enter",serv_portals->reg_count); #ifdef DEBUG_MEM printf("\n(%d):armci_register_req start=%p bytes=%d\n", armci_me,start,bytes);fflush(stdout); #endif md_ptr = &(serv_portals->meminfo[serv_portals->reg_count].md); md_ptr->start = start; md_ptr->length = bytes; md_ptr->threshold = PTL_MD_THRESH_INF; md_ptr->options = PTL_MD_OP_PUT | PTL_MD_OP_GET | PTL_MD_MANAGE_REMOTE; md_ptr->user_ptr = NULL; md_ptr->max_size = 0; md_ptr->eq_handle = PTL_EQ_NONE; serv_portals->meminfo[serv_portals->reg_count].mb=serv_portals->reg_count+1; match_id.nid = PTL_NID_ANY; match_id.pid = PTL_PID_ANY; rc = PtlMEAttach(portals->ni_h,portals->ptl,match_id, serv_portals->meminfo[serv_portals->reg_count].mb, ignbits, PTL_RETAIN,PTL_INS_AFTER, &(serv_portals->meminfo[serv_portals->reg_count].me_h)); if (rc != PTL_OK) { printf("%d:PtlMEAttach: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("portals attach error reg",rc); } rc = PtlMDAttach((serv_portals->meminfo[serv_portals->reg_count].me_h), *md_ptr,PTL_RETAIN, &serv_portals->meminfo[serv_portals->reg_count].md_h); if (rc != PTL_OK) { printf("%d:PtlMDAttach: %s %d\n", portals->rank, ARMCI_NET_ERRTOSTR(rc),(client_md_count+serv_md_count)); armci_die("portals attach error reg",rc); } client_md_count++; serv_portals->reg_count++; ARMCI_PR_DBG("exit",serv_portals->reg_count); } #endif #endif int armci_must_remotecomplete=1; extern _buf_ackresp_t *_buf_ackresp_first,*_buf_ackresp_cur; int x_net_wait_ackresp(_buf_ackresp_t *ar) { int rc; ptl_event_t ev_t; ptl_event_t *ev=&ev_t; comp_desc *temp_comp = NULL; int loop=1; int temp_proc; ARMCI_PR_DBG("enter",0); while(ar->val){ ev->type=0; if((rc = PtlEQWait(portals->eq_h, ev)) != PTL_OK){ printf("%d:PtlEQWait(): %d %s\n", portals->rank,rc, ARMCI_NET_ERRTOSTR(rc) ); armci_die("EQWait problem",rc); } if (ev->ni_fail_type != PTL_NI_OK) { temp_comp = (comp_desc *)ev->md.user_ptr; printf("%d:NI sent %d in event %d,%d.\n", armci_me,portals->rank.nid, portals->rank.pid, ev->ni_fail_type); armci_die("event failure problem",temp_comp->dest_id); } if(DEBUG_COMM){ printf("\n%d:net_wait_ackresp:done waiting type=%d\n",armci_me, ev->type); fflush(stdout); } if (ev->type == PTL_EVENT_SEND_END){ if(DEBUG_COMM){ printf("\n%d:net_wait_ackresp:event send end\n",armci_me); fflush(stdout); } temp_comp = (comp_desc *)ev->md.user_ptr; if(temp_comp->type==ARMCI_PORTALS_GETPUT || temp_comp->type==ARMCI_PORTALS_NBGETPUT){ temp_comp->active=0; temp_comp->tag=-1; continue; } if(!armci_must_remotecomplete){ if(temp_comp->type==ARMCI_PORTALS_PUT || temp_comp->type==ARMCI_PORTALS_NBPUT){ temp_comp->active=0; temp_comp->tag=-1; } else continue; } else{ temp_comp->active++; continue; } } else if (ev->type == PTL_EVENT_REPLY_END){ temp_comp = (comp_desc *)ev->md.user_ptr; if(DEBUG_COMM){ printf("\n%d:net_wait_ackresp:reply end tag=%d\n",armci_me,temp_comp->tag); fflush(stdout); } temp_comp->active = 0; /*this was a get request, so we are done*/ temp_comp->tag=-1; continue; } else if (ev->type == PTL_EVENT_ACK){ temp_comp = (comp_desc *)ev->md.user_ptr; if(DEBUG_COMM){ printf("\n%d:net_wait_ackresp:event ack tag=%d\n",armci_me,temp_comp->tag); fflush(stdout); } temp_comp->active=0; temp_comp->tag=-1; portals->outstanding_puts--; } else if (ev->type==PTL_EVENT_PUT_END){ _buf_ackresp_t *sweep=_buf_ackresp_first; if(DEBUG_COMM){printf("\n%d:put end offset=%d",armci_me,ev->offset);fflush(stdout);} if(ar->val==ev->offset){ /*bingo!*/ ar->val=0; } else{ while(sweep!=NULL){ if(sweep->val==ev->offset){ sweep->val=0; break; } sweep=sweep->next; } /*if(sweep==NULL)armci_die("server wrote data at unexpected offset",ev->offset);*/ if(sweep==NULL){ int y; printf("%d:server wrote data at unexpected offset %d",armci_me,ev->offset);fflush(stdout); abort(); # ifdef ARMCI_CHECK_STATE for(y=0;yservid_map[y].pid==ev->initiator.pid && portals->servid_map[y].nid==ev->initiator.nid)break; assert(y!=armci_nclus); arlist_print(arn); armci_rem_state(y); # endif } } } else armci_die("in net_wait_ackresp unknown event",ev->type); } # ifdef ARMCI_CHECK_STATE arlist_remove(arlist_search(&arn, ar->valc)); # endif ar->valc=0; if(ar==_buf_ackresp_first)_buf_ackresp_first=ar->next; if(ar->next!=NULL){ ar->next->previous=ar->previous; } if(ar->previous!=NULL){ /*printf("\n%d:prev=%p %d %p %p\n",armci_me,ar->previous, ar->val,ar->next,ar);fflush(stdout);*/ ar->previous->next=ar->next; if(_buf_ackresp_cur==ar)_buf_ackresp_cur=ar->previous; } if(_buf_ackresp_cur==ar)_buf_ackresp_cur=NULL; ar->previous=ar->next=NULL; ARMCI_PR_DBG("exit",0); return rc; } int armci_client_complete(ptl_event_kind_t evt,int proc_id, int nb_tag, comp_desc *cdesc) { int rc; ptl_event_t ev_t; ptl_event_t *ev=&ev_t; comp_desc *temp_comp = NULL; int loop=1; int temp_proc; ARMCI_PR_DBG("enter",0); if(DEBUG_COMM){ printf("\n%d:enter:client_complete active=%d tag=%d %d\n",armci_me, cdesc->active,cdesc->tag,nb_tag);fflush(stdout); } if(nb_tag>0){ if(cdesc->tag!=nb_tag)return 0; } while(cdesc->active!=0){ ev->type=0; if((rc = PtlEQWait(portals->eq_h, ev)) != PTL_OK){ printf("%d:PtlEQWait(): %d %s\n", portals->rank,rc, ARMCI_NET_ERRTOSTR(rc) ); armci_die("EQWait problem",rc); } if (ev->ni_fail_type != PTL_NI_OK) { temp_comp = (comp_desc *)ev->md.user_ptr; printf("%d:NI sent %d in event %d,%d.\n", armci_me,portals->rank.nid, portals->rank.pid, ev->ni_fail_type); armci_die("event failure problem",temp_comp->dest_id); } if(DEBUG_COMM){ printf("\n%d:armci_client_complete:done waiting type=%d\n",armci_me, ev->type); fflush(stdout); } if(cdesc!=ev->md.user_ptr){ /*printf("\n%d:expecting desc %p completing %p\n",armci_me,cdesc,ev->md.user_ptr);*/ } if (ev->type == PTL_EVENT_SEND_END){ if(DEBUG_COMM){ printf("\n%d:armci_client_complete:event send end\n",armci_me); fflush(stdout); } temp_comp = (comp_desc *)ev->md.user_ptr; if(temp_comp->type==ARMCI_PORTALS_GETPUT || temp_comp->type==ARMCI_PORTALS_NBGETPUT){ temp_comp->active=0; temp_comp->tag=-1; continue; } if(!armci_must_remotecomplete){ if(temp_comp->type==ARMCI_PORTALS_PUT || temp_comp->type==ARMCI_PORTALS_NBPUT){ temp_comp->active=0; temp_comp->tag=-1; } else continue; } else{ temp_comp->active++; continue; } } else if (ev->type == PTL_EVENT_REPLY_END){ temp_comp = (comp_desc *)ev->md.user_ptr; if(DEBUG_COMM){ printf("\n%d:client_send_complete:reply end tag=%d\n",armci_me,temp_comp->tag); fflush(stdout); } temp_comp->active = 0; /*this was a get request, so we are done*/ temp_comp->tag=-1; continue; } else if (ev->type == PTL_EVENT_ACK){ temp_comp = (comp_desc *)ev->md.user_ptr; if(DEBUG_COMM){ printf("\n%d:client_send_complete:event ack tag=%d\n",armci_me,temp_comp->tag); fflush(stdout); } temp_comp->active=0; temp_comp->tag=-1; portals->outstanding_puts--; } else if (ev->type==PTL_EVENT_PUT_END){ _buf_ackresp_t *ar=_buf_ackresp_first; while(ar!=NULL){ if(ar->val==ev->offset){ ar->val=0; break; } ar=ar->next; } if(ar==NULL)armci_die("server wrote data at unexpected offset",ev->offset); if(DEBUG_COMM){printf("\n%d:put end offset=%d",armci_me,ev->offset);fflush(stdout);} } else armci_die("in client_complete unknown event",ev->type); } if(DEBUG_COMM){ printf("\n%d:exit:client_complete active=%d tag=%d %d\n",armci_me, cdesc->active,cdesc->tag,nb_tag);fflush(stdout); } ARMCI_PR_DBG("exit",0); return rc; } comp_desc * get_free_comp_desc(int * comp_id) { comp_desc * c; int rc = PTL_OK; ARMCI_PR_DBG("enter",0); c = &(_compdesc_array[portals->free_comp_desc_index]); if(c->active!=0 && c->tag>0) armci_client_complete(0,c->dest_id,c->tag,c); else{ /* if(c->active!=0) printf("\n%d:potential problem:active completion descriptor but tag=%d",armci_me,c->tag); else printf("\n%d:potential problem:active completion descriptor with tag=%d",armci_me,c->tag); */ } if(!armci_must_remotecomplete){ do{ rc = PtlMDUnlink(c->mem_dsc_hndl); }while(rc==PTL_MD_IN_USE); } *comp_id = portals->free_comp_desc_index; if(DEBUG_COMM){ printf("\nthe value of comp_desc_id is %d\n",*comp_id); fflush(stdout); } portals->free_comp_desc_index = (portals->free_comp_desc_index+1) % NUM_COMP_DSCR; ARMCI_PR_DBG("exit",0); return c; } void print_mem_desc(ptl_md_t * md) { printf("%d:%p:start=%p length=%d threshold=%d max_size=%d options=%d eq_handle=%d\n",armci_me,md,md->start, md->length,md->threshold,md->max_size,md->options,md->eq_handle); fflush(stdout); } #ifndef NEW_MALLOC #if 0 void armci_unregister_shmem(void *my_ptr, long size) { int i=0,dst,found=0; long id ; long reg_size=0; int reg_num = _rem_meminfo[armci_me].reg_count; void *tptr; ARMCI_PR_DBG("enter",reg_num); #ifdef DEBUG_MEM printf("%d:%s:got size=%ld myptr %p\n",armci_me,__FUNCTION__,size,my_ptr); fflush(stdout); #endif bzero(_tmp_rem_reginfo,sizeof(aptl_reginfo_t)*armci_nproc); if(reg_num>=MAX_MEM_REGIONS) armci_die("reg_num corrupted",reg_num); for(i=0;i=MAX_MEM_REGIONS) armci_die("reg_num corrupted",reg_num); for(i=0;i=MAX_MEM_REGIONS-1){ printf("\n%d:more than expected regions -- %d, increase MAX_MEM_REGIONS",armci_me,_rem_meminfo[i].reg_count++);fflush(stdout); armci_die2("more than expected regions",_rem_meminfo[i].reg_count,MAX_MEM_REGIONS); } } #ifdef DEBUG_MEM printf("%d: regist id=%ld found=%d size=%ld reg_num=%d\n", armci_me,id,found,reg_size,reg_num); fflush(stdout); #endif ARMCI_PR_DBG("exit",0); } void armci_register_shmem_grp(void *my_ptr, long size, long *idlist, long off, void *sptr,ARMCI_Group *group) { ARMCI_Group orig_group; ARMCI_PR_DBG("enter",0); ARMCI_Group_get_default(&orig_group); ARMCI_Group_set_default(group); armci_register_shmem(my_ptr,size,idlist,off,sptr); ARMCI_Group_set_default(&orig_group); ARMCI_PR_DBG("enter",0); } #endif #endif // end #ifdef ARMCI_REGISTER_SHMEM static int _get_rem_servinfo(int serv,size_t bytes, size_t* offset) { int i; ARMCI_PR_DBG("enter",0); i = 16<<8; *offset=(armci_me*NUM_SERV_BUFS+_client_servbuf_count[serv])*VBUF_DLEN; _client_servbuf_count[serv] = (_client_servbuf_count[serv]+1)%NUM_SERV_BUFS; ARMCI_PR_DBG("exit",i); return i; } static int _get_rem_info(int proc, void *ptr,size_t bytes, size_t* offset) { #ifdef ARMCI_REGISTER_SHMEM int i; ARMCI_PR_DBG("enter",0); #ifdef NEW_MALLOC i = check_meminfo(ptr,(long)bytes,proc); if(i==0){ printf("\n%d:ptr=%p bytes=%d proc=%d",armci_me,ptr,bytes,proc); armci_die("region not found",proc); } *offset = (size_t)((caddr_t)ptr-(caddr_t)portals->dsbase[i-1]); printf("\n%d:ptr=%p dsbase[0]=%p offs=%ld",armci_me,ptr,portals->dsbase[0],*offset);fflush(stdout); if(*offset>=0){ ARMCI_PR_DBG("exit A",(i+1)); return(i); } #else rem_meminfo_t *mem_info=&(_rem_meminfo[proc]); aptl_reginfo_t *memreg = mem_info->reginfo; for(i=0;ireg_count;i++){ /*for now size is not verified*/ if(DEBUG_COMM){ printf("\n%d:proc=%d regcount=%d reg=%d base=%p size=%d end=%p checkptr=%p\n",armci_me,proc,mem_info->reg_count,i,memreg[i].base_ptr,memreg[i].size, ((char *)memreg[i].base_ptr+memreg[i].size), ptr);fflush(stdout); } if((memreg[i].valid) && ptr>= memreg[i].base_ptr && ptr< ((char *)memreg[i].base_ptr+memreg[i].size)){ *offset = ((char *)ptr-(char *)memreg[i].base_ptr); ARMCI_PR_DBG("exit A",(i+1)); return (i+1); } } #endif ARMCI_PR_DBG("exit B",i); armci_die("_get_rem_info, rem memory region not found",bytes); #else printf("_get_rem_info called ... this shouldn't happen"); abort(); #endif } void armci_client_direct_get(ptl_process_id_t dest_proc, ptl_size_t offset_remote, ptl_match_bits_t mb, size_t bytes, ptl_md_t *md_local, ptl_handle_md_t *md_hdl_local) { int rc; ptl_size_t offset_local = 0; ARMCI_PR_DBG("enter",0); if(DEBUG_COMM){ printf("\n%d:armci_client_direct_get:BYTES = %d\n",armci_me,bytes); printf("\n%d:offr=%ld offl=%ld\n",armci_me,offset_remote,offset_local); fflush(stdout); } rc = PtlMDBind(portals->ni_h,*md_local, PTL_UNLINK, md_hdl_local); if (rc != PTL_OK){ printf("%d:PtlMDBind: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("ptlmdbind get failed",0); } #ifdef CRAY_USE_MDMD_COPY if (dest_proc.nid == portals->rank.nid) { rc = PtlMDMDCopy(*md_hdl_local, dest_proc, portals->ptl, 0, mb, offset_remote); } else { #endif rc = PtlGetRegion(*md_hdl_local,offset_local,bytes,dest_proc, portals->ptl, 0, mb, offset_remote); #ifdef CRAY_USE_MDMD_COPY } #endif if (rc != PTL_OK){ printf("%d:PtlGetRegion: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("PtlGetRegion failed",0); } if(DEBUG_COMM){ printf("\n%d:issued get\n",armci_me);fflush(stdout); } ARMCI_PR_DBG("exit",0); } void armci_portals_get(int proc, void *src_buf, void *dst_buf, int bytes, void** cptr,int tag) { int rc; ptl_size_t offset_local = 0, offset_remote=0; ptl_md_t *md_local; ptl_handle_md_t *md_hdl_local; int rem_info; comp_desc *cdesc; ptl_process_id_t dest_proc; int c_info; int cluster = armci_clus_id(proc); ARMCI_PR_DBG("enter",0); /*first remote process information*/ /*dest_proc.nid = portals->procid_map[proc].nid; dest_proc.pid = portals->procid_map[proc].pid;*/ dest_proc.nid = portals->servid_map[cluster].nid; dest_proc.pid = portals->servid_map[cluster].pid; /*create local xfer info*/ cdesc = get_free_comp_desc(&c_info); md_local = &cdesc->mem_dsc; md_hdl_local = &cdesc->mem_dsc_hndl; md_local->length=bytes; md_local->start=dst_buf; md_local->user_ptr = (void *)cdesc; md_local->options = PTL_MD_OP_GET | PTL_MD_EVENT_START_DISABLE; /*get remote info*/ rem_info = _get_rem_info(proc,src_buf,bytes,&offset_remote); cdesc->dest_id = proc; if (tag){ *((comp_desc **)cptr) = cdesc; cdesc->tag = tag; cdesc->type = ARMCI_PORTALS_NBGET; /*printf("\n%d:get tag=%d c_info=%d * %p",armci_me,tag,c_info,cdesc);fflush(stdout);*/ } else{ cdesc->tag = 0; cdesc->type = ARMCI_PORTALS_GET; } cdesc->active = 1; armci_client_direct_get(dest_proc,offset_remote,(ptl_match_bits_t)rem_info, bytes,md_local,md_hdl_local); if(!tag){ armci_client_complete(0,proc,0,cdesc); /* check this later */ } ARMCI_PR_DBG("exit",0); } void armci_client_nb_get(int proc, void *src_buf, int *src_stride_arr, void *dst_buf, int *dst_stride_arr, int bytes, void** cptr,int tag) { } void armci_client_direct_send(ptl_process_id_t dest_proc, ptl_size_t offset_remote, ptl_match_bits_t mb, size_t bytes, ptl_md_t *md_local, ptl_handle_md_t *md_hdl_local) { int rc; ptl_size_t offset_local = 0; ARMCI_PR_DBG("enter",0); if(DEBUG_COMM){ printf("%d:armci_client_direct_send:BYTES = %d\n",armci_me,bytes); printf("\n%d:offr=%ld offl=%ld\n",armci_me,offset_remote,offset_local); fflush(stdout); } /*print_mem_desc(md_local);*/ rc = PtlMDBind(portals->ni_h,*md_local, PTL_UNLINK, md_hdl_local); if (rc != PTL_OK){ fprintf(stderr, "%d:PtlMDBind: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc)); armci_die("ptlmdbind send failed",0); } if(armci_must_remotecomplete){ rc = PtlPutRegion(*md_hdl_local,offset_local,bytes, PTL_ACK_REQ, dest_proc,portals->ptl,0, mb,offset_remote, 0); } else{ rc = PtlPutRegion(*md_hdl_local,offset_local,bytes, PTL_NOACK_REQ, dest_proc,portals->ptl,0, mb,offset_remote, 0); } if (rc != PTL_OK){ fprintf(stderr, "%d:PtlPutRegion: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("PtlPutRegion failed",0); } ARMCI_PR_DBG("exit",0); } void armci_portals_put(int proc, void *src_buf, void *dst_buf, int bytes, void** cptr,int tag) { int rc; ptl_size_t offset_local = 0, offset_remote=0; ptl_md_t *md_local; ptl_handle_md_t *md_hdl_local; int rem_info; comp_desc *cdesc; ptl_process_id_t dest_proc; int c_info; int cluster = armci_clus_id(proc); ARMCI_PR_DBG("enter",0); /*first process information*/ dest_proc.nid = portals->servid_map[cluster].nid; dest_proc.pid = portals->servid_map[cluster].pid; /*dest_proc.nid = portals->procid_map[proc].nid; dest_proc.pid = portals->procid_map[proc].pid;*/ /*create local xfer info*/ cdesc = get_free_comp_desc(&c_info); md_local = &cdesc->mem_dsc; md_hdl_local = &cdesc->mem_dsc_hndl; md_local->length=bytes; md_local->start=src_buf; md_local->user_ptr = (void *)cdesc; md_local->options = PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; /*get remote info*/ rem_info = _get_rem_info(proc,dst_buf,bytes,&offset_remote); if(DEBUG_COMM){ printf("\n%d:offr=%ld offl=%ld\n",armci_me,offset_remote,offset_local); } cdesc->dest_id = proc; if (tag){ *((comp_desc **)cptr) = cdesc; cdesc->tag = tag; cdesc->type = ARMCI_PORTALS_NBPUT; /*printf("\n%d:put tag=%d c_info=%d * %p",armci_me,tag,c_info,cdesc);fflush(stdout);*/ } else{ cdesc->tag = 0; cdesc->type = ARMCI_PORTALS_PUT; } cdesc->active = 1; armci_client_direct_send(dest_proc,offset_remote,(ptl_match_bits_t)rem_info, bytes,md_local,md_hdl_local); if(!tag){ armci_client_complete(0,proc,0,cdesc); /* check this later */ } else portals->outstanding_puts++; ARMCI_PR_DBG("exit",0); } void armci_client_nb_send(int proc, void *src_buf, int *src_stride_arr, void *dst_buf, int *dst_stride_arr, int bytes, void** cptr,int tag) { } /*using non-blocking for multiple 1ds inside a 2d*/ void armci_network_strided(int op, void* scale, int proc,void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, armci_ihdl_t nb_handle) { int i, j,tag=0; long idxs,idxd; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int bvalue_s[MAX_STRIDE_LEVEL], bunit[MAX_STRIDE_LEVEL]; int bvalue_d[MAX_STRIDE_LEVEL]; int bytes = count[0]; void *sptr,*dptr; NB_CMPL_T cptr; ptl_process_id_t dest_proc; ptl_size_t offset_remote; comp_desc *cdesc; int c_info; ptl_md_t *md_local; int rem_info; int cluster = armci_clus_id(proc); ARMCI_PR_DBG("enter",0); printf("%s calling abort ... network_strided not implemented\n",Portals_ID()); abort(); if(nb_handle)tag=nb_handle->tag; /*first remote process information*/ dest_proc.nid = portals->servid_map[cluster].nid; dest_proc.pid = portals->servid_map[cluster].pid; /*dest_proc.nid = portals->procid_map[proc].nid; dest_proc.pid = portals->procid_map[proc].pid;*/ rem_info = _get_rem_info(proc,(op==GET)?src_ptr:dst_ptr,bytes,&offset_remote); /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ bvalue_s[0] = 0; bvalue_s[1] = 0; bunit[0] = 1; bvalue_d[0] = 0; bvalue_d[1] = 0; bunit[1] = 1; for(i=2; i<=stride_levels; i++) { bvalue_s[i] = bvalue_d[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } if(ARMCI_ACC(op)){ /*for now die for acc*/ /*lock here*/ # ifdef ARMCI_CHECK_STATE arlist_print(arn); armci_rem_state(armci_clus_info[proc].master%armci_clus_info[0].nslave); # endif printf("\nSHOULD NOT DO NETWORK_STRIDED FOR ACCS \n",armci_me); fflush(stdout); armci_die("network_strided called for acc",proc); } /*loop over #contig chunks*/ for(i=0; i (count[j]-1)) bvalue_s[j] = 0; if(bvalue_d[j] > (count[j]-1)) bvalue_d[j] = 0; } sptr = ((char *)src_ptr)+idxs; dptr = ((char *)dst_ptr)+idxd; cdesc = get_free_comp_desc(&c_info); md_local = &cdesc->mem_dsc; md_hdl_local = &cdesc->mem_dsc_hndl; md_local->length=bytes; md_local->start=(op==GET)?dptr:sptr; md_local->user_ptr = (void *)cdesc; cdesc->dest_id = proc; cdesc->tag = tag; if(op==GET){ md_local->options = PTL_MD_OP_GET | PTL_MD_EVENT_START_DISABLE; cdesc->active = 1; cdesc->type = ARMCI_PORTALS_NBGET; /* printf("\n%d:reminfo=%d off=%d idxs=%d idxd=%d",armci_me, rem_info, offset_remote, idxs, idxd); */ armci_client_direct_get( dest_proc,offset_remote+idxs,rem_info, bytes,md_local,md_hdl_local); } else if(op==PUT){ cdesc->active = 1; cdesc->type = ARMCI_PORTALS_NBPUT; md_local->options = PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; armci_client_direct_send(dest_proc,offset_remote+idxd,rem_info, bytes,md_local,md_hdl_local); if(op==PUT)portals->outstanding_puts++; } else if(ARMCI_ACC(op)){ assert(0); } else{ ARMCI_PR_DBG("exit",0); armci_die("in network_strided unknown opcode",op); } armci_client_complete(0,proc,tag,cdesc); } if(ARMCI_ACC(op)){ /*unlock here*/ } if(nb_handle){ /* completing the last call is sufficient, given ordering semantics*/ nb_handle->tag=tag; nb_handle->cmpl_info=cdesc; } else{ /*completing the last call ensures everything before it is complete this * is one of the main reasons why dataserver is necessary*/ /*armci_client_complete(0,proc,tag,cdesc);*/ } ARMCI_PR_DBG("exit",0); } void armci_client_direct_getput(ptl_process_id_t dest_proc, ptl_size_t offset_remote, ptl_match_bits_t mb, size_t bytes, ptl_md_t *md_local_get,ptl_md_t *md_local_put, ptl_handle_md_t *md_hdl_local_get, ptl_handle_md_t *md_hdl_local_put) { int rc; ptl_size_t offset_get = 0; ptl_size_t offset_put = 0; ARMCI_PR_DBG("enter",0); if(DEBUG_COMM){ printf("%d:armci_client_direct_getput:BYTES = %d\n",armci_me,bytes); printf("\n%d:offr=%ld\n",armci_me,offset_remote);fflush(stdout); } rc = PtlGetPutRegion(*md_hdl_local_get, offset_get, *md_hdl_local_put, offset_put,bytes,dest_proc, portals->ptl,0,mb, offset_remote,0); if (rc != PTL_OK){ printf("%d:PtlGetPutRegion: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("PtlGetPutRegion failed",0); } ARMCI_PR_DBG("exit",0); } long a_p_putfrom; long a_p_getinto; int armci_portals_rmw_(int op, int *ploc, int *prem, int extra, int proc) { printf("error rmw"); return(0); } void armci_portals_shmalloc_allocate_mem(int num_lks) { void **ptr_arr; void *ptr; armci_size_t bytes = 128; int i; ARMCI_PR_DBG("enter",0); ptr_arr = (void**)malloc(armci_nproc*sizeof(void*)); if(!ptr_arr) armci_die("armci_shmalloc_get_offsets: malloc failed", 0); bzero((char*)ptr_arr,armci_nproc*sizeof(void*)); PARMCI_Malloc(ptr_arr,bytes); ARMCI_PR_DBG("exit",0); return; } void armci_wait_for_server() { ARMCI_PR_DBG("enter",0); armci_server_terminating=1; armci_serv_quit(); ARMCI_PR_DBG("exit",0); } /*client buffers info*/ void armci_portals_client_buf_info(char *buf, ptl_match_bits_t *mb, ptl_size_t *offset,int proc) { ARMCI_PR_DBG("enter",0); *mb = (1<<30); *offset = buf-client_buf_ptrs[proc]; if(DEBUG_SERV){printf("\n(%d):serv writing to ofset %d on %d\n",armci_me,*offset,proc);fflush(stdout);} ARMCI_PR_DBG("exit",0); } /*memory for client buffers*/ char *armci_portals_client_buf_allocate(int bytes) { void *ptr; ptl_match_bits_t ignbits = 0xFFFFFFFF0FFFFFFF; ptl_match_bits_t mbits = 1; ptl_md_t *md_ptr,md; ptl_process_id_t match_id; ptl_handle_me_t me_h; ptl_handle_md_t md_h; int rc; ARMCI_PR_DBG("enter",sizeof(ptl_match_bits_t)); ptr = malloc(bytes); bzero(ptr,bytes); assert(ptr); mbits = (1<<30); md_ptr = &(md); md_ptr->start = ptr; md_ptr->length = bytes; md_ptr->threshold = PTL_MD_THRESH_INF; md_ptr->options = PTL_MD_OP_PUT | PTL_MD_OP_GET | PTL_MD_MANAGE_REMOTE | PTL_MD_EVENT_START_DISABLE; md_ptr->user_ptr = NULL; md_ptr->max_size = 0; /*logic that says, eq_h is now recieving data for the buffers, including acks! */ md_ptr->eq_handle = portals->eq_h; match_id.nid = PTL_NID_ANY; match_id.pid = PTL_PID_ANY; rc = PtlMEAttach(portals->ni_h,portals->ptl,match_id, mbits,ignbits,PTL_RETAIN,PTL_INS_AFTER,&(me_h)); if (rc != PTL_OK){ printf("%d:PtlMEAttach: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("portals attach error2",rc); } rc = PtlMDAttach(me_h,md,PTL_RETAIN,&md_h); if (rc != PTL_OK) { printf("%d:PtlMDAttach: %s %d\n", portals->rank, ARMCI_NET_ERRTOSTR(rc),(client_md_count+serv_md_count) ); armci_die("portals attach error CBA",rc); } client_md_count++; client_buf_ptrs[armci_me]=ptr; armci_msg_barrier(); armci_exchange_address(client_buf_ptrs,armci_nproc); ARMCI_PR_DBG("exit",0); return(ptr); } void armci_transport_cleanup() { /*for i=0tomaxpendingclean*/ ARMCI_PR_DBG("enter",0); free(client_buf_ptrs); ARMCI_PR_DBG("exit",0); } void free_serv_bufs() { if(serv_bufs) free(serv_bufs); } int armci_send_req_msg(int proc, void *buf, int bytes,int tag) { #ifndef OLD_PORTALS_CODE int cluster = armci_clus_id(proc); int serv = armci_clus_info[cluster].master; char *buffer = NULL; request_header_t *msginfo = (request_header_t *) buf; // # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE _armci_buf_ensure_one_outstanding_op_per_node(buf,cluster); // # endif # ifdef PORTALS_USE_ARMCI_CLIENT_BUFFERS BUF_INFO_T *bufinfo=_armci_buf_to_bufinfo(msginfo); _buf_ackresp_t *ar = &bufinfo->ar; portals_ds_req_t *req = &ar->req; # endif if(msginfo->operation == PUT || ARMCI_ACC(msginfo->operation)) { // printf("%s cp: sending packed put\n",Portals_ID()); # ifdef PORTALS_USE_ARMCI_CLIENT_BUFFERS portals_remote_nbput(buf, buf, cluster, req); // portalsWaitOnRequest(req); # else portals_remote_put(buf, buf, cluster); # endif // printf("%s cp: finished packed put\n",Portals_ID()); } else if(msginfo->operation == GET) { buffer = (char *) buf; buffer += sizeof(request_header_t); buffer += msginfo->dscrlen; // printf("%s cp: sending blocking get request\n",Portals_ID()); # ifdef PORTALS_USE_ARMCI_CLIENT_BUFFERS portals_remote_nbget(buffer, msginfo, cluster, req); // portalsWaitOnRequest(req); # else portals_remote_get(buffer, msginfo, cluster); # endif // printf("%s cp: get request finished\n",Portals_ID()); } else if(msginfo->operation == ACK) { # ifdef PORTALS_USE_ARMCI_CLIENT_BUFFERS portalsRemoteOperationToNode(buf, bytes, cluster, req); // portalsWaitOnRequest(req); # else portalsBlockingRemoteOperationToNode(buf, bytes, cluster); # endif } else if(msginfo->operation == ARMCI_SWAP || msginfo->operation == ARMCI_SWAP_LONG || msginfo->operation == ARMCI_FETCH_AND_ADD || msginfo->operation == ARMCI_FETCH_AND_ADD_LONG) { buffer = (char *) buf; buffer += sizeof(request_header_t); buffer += msginfo->dscrlen; portals_remote_rmw(buffer, msginfo, cluster, req); # ifndef PORTALS_USE_ARMCI_CLIENT_BUFFERS portalsWaitOnOperation(req); # endif } else { printf("%s cp: msginfo->operation=%d not supported yet\n",Portals_ID(),msginfo->operation); abort(); } # ifdef PORTALS_USE_ARMCI_CLIENT_BUFFERS /* for now, clear the ackresp structure because the call had to have been blocking later, we will allow a modified x_net_wait_ackresp clear it */ ar->val = ar->valc = 0; if(ar==_buf_ackresp_first)_buf_ackresp_first=ar->next; if(ar->next!=NULL){ ar->next->previous=ar->previous; } if(ar->previous!=NULL){ ar->previous->next=ar->next; if(_buf_ackresp_cur==ar)_buf_ackresp_cur=ar->previous; } if(_buf_ackresp_cur==ar)_buf_ackresp_cur=NULL; ar->previous=ar->next=NULL; # endif return 0; #else int rc; ptl_size_t offset_local = 0, offset_remote=0; ptl_md_t *md_local; ptl_handle_md_t *md_hdl_local; int rem_info; comp_desc *cdesc; void *cptr; ptl_process_id_t dest_proc; int c_info; int cluster = armci_clus_id(proc); int serv = armci_clus_info[cluster].master; request_header_t *msginfo = (request_header_t *)buf; ARMCI_PR_DBG("enter",0); if(msginfo->operation==GET && msginfo->dscrlen<=msginfo->datalen){ *(long *)((char *)(msginfo+1)+msginfo->datalen)=0; } /*badbadbad*/ msginfo->tag.ack_ptr=&(msginfo->tag.ack); cptr = (void *)((double *)buf-1); /*first process information*/ dest_proc.nid = portals->servid_map[cluster].nid; dest_proc.pid = portals->servid_map[cluster].pid; /*create local xfer info*/ cdesc = get_free_comp_desc(&c_info); md_local = &cdesc->mem_dsc; md_hdl_local = &cdesc->mem_dsc_hndl; md_local->length=bytes; md_local->start=buf; md_local->user_ptr = (void *)cdesc; md_local->options = PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; /*get remote info*/ rem_info = _get_rem_servinfo(cluster,(size_t)bytes,&offset_remote); if(DEBUG_COMM){ printf("\n%d:offr=%ld offl=%ld\n",armci_me,offset_remote,offset_local); } cdesc->dest_id = serv; *((comp_desc **)cptr) = cdesc; if(tag==0)tag=GET_NEXT_NBTAG(); cdesc->tag = tag; cdesc->type = ARMCI_PORTALS_NBPUT; /*printf("\n%d:put tag=%d c_info=%d * %p",armci_me,tag,c_info,cdesc);fflush(stdout);*/ cdesc->active = 1; if(msginfo->operation==PUT || msginfo->operation == UNLOCK || ARMCI_ACC(msginfo->operation)){ _buf_ackresp_cur->valc = _buf_ackresp_cur->val = (char *)msginfo->tag.ack_ptr-client_buf_ptrs[armci_me]; # ifdef ARMCI_CHECK_STATE arlist_add(&arn,_buf_ackresp_cur->val,msginfo->operation); # endif } else { _buf_ackresp_cur->valc = _buf_ackresp_cur->val = (char *)msginfo->tag.data_ptr-client_buf_ptrs[armci_me]; # ifdef ARMCI_CHECK_STATE arlist_add(&arn,_buf_ackresp_cur->val,msginfo->operation); # endif } if(DEBUG_COMM){printf("\n%d:registered %d in val to %d at %d %d\n",armci_me,_buf_ackresp_cur->val,serv,offset_remote,msginfo->operation);fflush(stdout);} _armci_buf_ensure_pend_outstanding_op_per_node(buf,cluster); armci_client_direct_send(dest_proc,offset_remote,(ptl_match_bits_t)rem_info, bytes,md_local,md_hdl_local); /*if(msginfo->operation==GET){ BUF_INFO_T *info=((char *)msginfo-sizeof(BUF_EXTRA_FIELD_T)-sizeof(BUF_INFO_T)); armci_client_complete(0,proc,cdesc->tag,cdesc); }*/ /*armci_client_complete(0,proc,cdesc->tag,cdesc);*/ portals->outstanding_puts++; ARMCI_PR_DBG("exit",0); return 0; #endif } char *armci_ReadFromDirect(int proc, request_header_t *msginfo, int len) { #ifndef OLD_PORTALS_CODE # ifdef PORTALS_USE_ARMCI_CLIENT_BUFFERS BUF_INFO_T *bufinfo = _armci_buf_to_bufinfo(msginfo); portals_ds_req_t *req = &bufinfo->ar.req; portalsWaitOnRequest(req); # endif char *ret = (char *) msginfo; ret += sizeof(request_header_t); ret += msginfo->dscrlen; return ret; #else long *flag; int loop; BUF_INFO_T *bufinfo=_armci_buf_to_bufinfo(msginfo); ARMCI_PR_DBG("enter",0); if(len) flag = (long *)((char *)(msginfo+1)+len); else flag = (long *)((char *)(msginfo+1)+msginfo->datalen); x_net_wait_ackresp(&(bufinfo->ar)); while(armci_util_long_getval(flag) != ARMCI_TAIL){ loop++; loop %=100000; if(loop==0){ if(DEBUG_COMM){ printf("%d: client flag(%p)=%ld off=%d %d\n", armci_me,flag,*flag,msginfo->datalen,*((int*)(msginfo+1))); fflush(stdout); } } } *flag=0; ARMCI_PR_DBG("exit",0); return (msginfo+1); #endif } #ifdef ARMCI_CHECK_STATE extern void sarlist_add(int,int,long); #endif void armci_WriteToDirect(int proc, request_header_t* msginfo, void *buf) { #ifndef OLD_PORTALS_CODE ptl_size_t bytes = (ptl_size_t) msginfo->datalen; ptl_event_t *ev = (ptl_event_t *) msginfo->tag.user_ptr; portals_ds_send_put(buf, msginfo->datalen, ev->initiator, ev->hdr_data); // you could do an assertion that the portals_id_map of proc == ev->initiator #else long *tail; int bytes; void *dst_addr = msginfo->tag.data_ptr; ptl_match_bits_t ignbits = 0xFFFFFFFF0FFFFFFF; ptl_match_bits_t mbits = 1; ptl_md_t *md_ptr,md; ptl_process_id_t match_id; ptl_handle_me_t me_h; ptl_size_t offst,localoffset; int rc; /* set tail ack, make sure it is alligned */ ARMCI_PR_SDBG("enter",0); bytes = msginfo->datalen+sizeof(long); if(!(buf>=serv_bufs->buf && bufbufend)){ bcopy(buf,(msginfo+1),bytes); buf=(msginfo+1); } tail = (long*)(buf + msginfo->datalen); *tail = ARMCI_TAIL; armci_portals_client_buf_info((char *)dst_addr,&mbits,&offst,proc); # ifdef ARMCI_CHECK_STATE sarlist_add(proc,msginfo->operation,offst); # endif match_id.nid = portals->procid_map[proc].nid; match_id.pid = portals->procid_map[proc].pid; localoffset=(char *)buf-(char *)serv_bufs->buf; if(DEBUG_COMM){ printf("\n(%d):dst=%p,mbits=%d,localoffset=%d,offst=%d,proc=%d,nid=%d,pid=%d len=%d\n",armci_me, dst_addr,mbits,localoffset,offst,proc,portals->procid_map[proc].nid, portals->procid_map[proc].pid,bytes);fflush(stdout); } rc = PtlPutRegion(serv_response_md_h,localoffset,bytes,PTL_NOACK_REQ, match_id,portals->ptl,0,mbits,offst,0); if (rc != PTL_OK){ fprintf(stderr, "%d:PtlPutRegion: %s\n", portals->Srank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("PtlPutRegion failed",0); } ARMCI_PR_SDBG("exit",0); #endif } void armci_rcv_req(void *mesg,void *phdr,void *pdescr,void *pdata,int *buflen) { int i,na; char *a; double *tmp; request_header_t *msginfo = (request_header_t *)mesg; ARMCI_PR_SDBG("enter",msginfo->operation); *(void **)phdr = msginfo; if(0){ printf("%s [ds]: got %d req (hdrlen=%d dscrlen=%d datalen=%d %d) from %d\n", Portals_ID(), msginfo->operation, sizeof(request_header_t), msginfo->dscrlen, msginfo->datalen, msginfo->bytes,msginfo->from); fflush(stdout); } /* we leave room for msginfo on the client side */ *buflen = MSG_BUFLEN - sizeof(request_header_t); if(msginfo->bytes) { *(void **)pdescr = msginfo+1; *(void **)pdata = msginfo->dscrlen + (char*)(msginfo+1); if(msginfo->operation == GET) { // the descriptor will exists after the request header // but there will be no data buffer // use the MessageRcvBuffer *(void**) pdata = MessageSndBuffer; // printf("%s (server) overriding pdata in rcv_req\n",Portals_ID()); } printf("%s [ds] oper=%d; bytes=%d\n",armci_me,msginfo->operation,msginfo->bytes); } else { printf("%s [ds] bytes=%d\n",armci_me,msginfo->bytes); *(void**)pdescr = NULL; *(void**)pdata = MessageRcvBuffer; } ARMCI_PR_SDBG("exit",msginfo->operation); } void armci_call_data_server() { int rc; ptl_event_t ev_t; ptl_event_t *ev=&ev_t; serv_buf_t *compbuf = NULL; int loop=1; int temp_proc; int ccc=2,rrr; cpu_set_t mycpuid,new_mask; char str[CPU_SETSIZE]; char ncid[8],*cidptr,cid[8]; extern char * cpuset_to_cstr(cpu_set_t *mask, char *str); ARMCI_PR_SDBG("enter",0); //if(armci_me==0)unsetenv("CRAY_PORTALS_USE_BLOCKING_POLL"); sprintf (cid, "%d", ccc); rrr = cstr_to_cpuset(&new_mask,cid); /* ------------------------------------------------------------ *\ Change affinity for the data server \* ------------------------------------------------------------ */ if(sched_setaffinity(0, sizeof (new_mask), &new_mask)) { perror("sched_setaffinity"); printf("failed to set pid %d's affinity.\n", getpid()); } if(DEBUG_SERV){ rrr=sched_getaffinity(0, sizeof(mycpuid), &mycpuid); if(rrr)perror("sched_getaffinity"); cidptr = cpuset_to_cstr(&mycpuid,ncid); printf("(%d):my affinity is to %s\n",armci_me,ncid); fflush(stdout); } /* ------------------------------------- *\ Main data server loop \* ------------------------------------- */ while(armci_server_terminating==0){ /* ------------------------------------------------------------ *\ check event queue for incoming data requests from remote CPs \* ------------------------------------------------------------ */ ev->type=0; if((rc = PtlEQWait(portals->Seq_h, ev)) != PTL_OK){ printf("(%d):PtlEQWait(): %d %s\n", armci_me,rc,ARMCI_NET_ERRTOSTR(rc) ); armci_die("EQWait problem",rc); } if (ev->ni_fail_type != PTL_NI_OK) { printf("(%d)%d,%d:NI sent %d in event.\n", armci_me,portals->Srank.nid, portals->Srank.pid,ev->ni_fail_type); fflush(stdout); armci_die2("event failure problem",ev->initiator.nid,ev->initiator.pid); } if(DEBUG_SERV){ printf("\n(%d):armci_call_data_server: ptl event detected=%d\n",armci_me,ev->type); fflush(stdout); } /* ------------------------------------------------------------ *\ PTL_EVENT_SEND_END: is ignored. This event is triggered as the DS returns data to a remote CP via a PtlPut. This event signals that that PtlPut has complete. \* ------------------------------------------------------------ */ if(ev->type == PTL_EVENT_SEND_END) continue; /* ------------------------------------------------------------ *\ PTL_EVENT_PUT_END: this is the key portals event for the DS. PUT_END signifies that a remote data request has come in from a remote CP. This data request will be handled by the data server: armci_data_server \* ------------------------------------------------------------ */ else if(ev->type == PTL_EVENT_PUT_END) { if(DEBUG_SERV) { printf("\n(%d):ev->offset=%d from %d%d",armci_me,ev->offset, ev->initiator.pid,ev->initiator.nid); fflush(stdout); } armci_data_server(((char *)serv_bufs->buf+ev->offset)); } /* ------------------------------------------------------------ *\ Unexpected Portals Event -- Panic! \* ------------------------------------------------------------ */ else { armci_die("unexpected event in data server",ev->type); } } ARMCI_PR_SDBG("exit",0); } void x_buf_wait_ack(request_header_t *msginfo, BUF_INFO_T *bufinfo) { ARMCI_PR_DBG("enter",bufinfo->ar.val); if(DEBUG_COMM){printf("\n%d:waiting for ack at %p",armci_me,&(msginfo->tag.ack));fflush(stdout);} x_net_wait_ackresp(&(bufinfo->ar)); armci_util_wait_long(&(msginfo->tag.ack),ARMCI_STAMP,10000); if(DEBUG_COMM){printf("\n%d:done waiting for ack at %p",armci_me,&(msginfo->tag.ack));fflush(stdout);} msginfo->tag.ack=0; ARMCI_PR_DBG("exit",0); } void x_net_send_ack(request_header_t *msginfo, int proc,void *dst,void *src) { long *tail; int bytes=sizeof(long); ptl_size_t offst; ptl_match_bits_t ignbits = 0xFFFFFFFF0FFFFFFF; ptl_match_bits_t mbits = 1; ptl_process_id_t match_id; int rc; /* set tail ack, make sure it is alligned */ ARMCI_PR_SDBG("enter",0); armci_portals_client_buf_info((char *)dst,&mbits,&offst,proc); # ifdef ARMCI_CHECK_STATE sarlist_add(proc,msginfo->operation,offst); # endif match_id.nid = portals->procid_map[proc].nid; match_id.pid = portals->procid_map[proc].pid; if(DEBUG_SERV){ printf("\n(%d):dst=%p,mbits=%d,offst=%d,proc=%d,nid=%d,pid=%d len=%d\n",armci_me, dst,mbits,offst,proc,portals->procid_map[proc].nid, portals->procid_map[proc].pid,bytes);fflush(stdout); } rc = PtlPutRegion(serv_ack_md_h,0,bytes,PTL_NOACK_REQ, match_id,portals->ptl,0,mbits,offst,0); if (rc != PTL_OK){ fprintf(stderr, "%d:PtlPutRegion: %s\n", portals->Srank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("PtlPutRegion failed",0); } ARMCI_PR_SDBG("exit",0); } long x_net_offset(char *buf,int proc) { #ifdef ARMCI_REGISTER_SHMEM int i; #if NEW_MALLOC if((i=check_meminfo(buf,1,proc))==0) armci_die("x_net_offset,reg not found",proc); return(all_meminfo[proc].serv_offs[i]); #else ARMCI_PR_DBG("enter",_rem_meminfo[proc].reg_count); if(DEBUG_COMM){printf("\n%d:%s:buf=%p",armci_me,__FUNCTION__,buf);fflush(stdout); } for(i=0;i<_rem_meminfo[proc].reg_count;i++){ if(IN_REGION(buf,_rem_meminfo[proc].reginfo[i])){ #ifdef DEBUG_MEM {printf("\n%d:found it in reg=%d (%p,%d) for proc=%d",armci_me,i,_rem_meminfo[proc].reginfo[i].base_ptr,_rem_meminfo[proc].reginfo[i].size,proc);} #endif return((long)((char *)_rem_meminfo[proc].reginfo[i].serv_ptr-(char *)_rem_meminfo[proc].reginfo[i].base_ptr)); } } #endif ARMCI_PR_DBG("exit",0); #else printf("x_net_offset called; this shouldn't happen ...\n"); abort(); #endif } void armci_set_serv_mutex_arr(void *ptr) { int i; long offset; ARMCI_PR_DBG("enter",0); offset=x_net_offset(ptr,armci_me); _armci_server_mutex_ready=1; _armci_server_mutex_ptr = (char *)ptr+offset; ARMCI_PR_DBG("exit",0); } ga-5-3/armci/src-gemini/atomics-i386.h0000640005473000001440000000071611466071465016241 0ustar d3n000users/** Atomic instructions for i386. To be populated as need arises. * @author Sriram Krishnamoorthy */ #ifndef __ATOMICS_I386__ #define __ATOMICS_I386__ #include #define v4b (volatile unsigned int *) static inline void atomic_exchange(void *val, void *ptr, int size) { assert(size == 4); __asm__ __volatile__ ("xchgl %0, %1" : "=r"(*v4b(val)), "+m"(*v4b(ptr)) : "0"(*v4b(val)) : "memory"); } #undef v4b #endif /*__ATOMICS_I386__*/ ga-5-3/armci/src-gemini/timer.c0000640005473000001440000000176711466102622015223 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: timer.c,v 1.3 2004-04-09 22:03:51 manoj Exp $ */ #ifdef WIN32 static double msec; /* reference for timer */ # include #else # include # include static unsigned firstsec=0; /* Reference for timer */ static unsigned firstusec=0; /* Reference for timer */ #endif static int first_call=1; double armci_timer() { #ifdef WIN32 double t0 = (double)GetCurrentTime(); if(first_call){ first_call=0; msec=t0; return 0.0; } t0 -=msec; if(t0<0.0)t0 += (double)0xffffffff; return 0.01*t0; #else double low, high; struct timeval tp; struct timezone tzp; (void) gettimeofday(&tp,&tzp); if (first_call) { firstsec = tp.tv_sec; firstusec = tp.tv_usec; first_call = 0; } low = (double)(tp.tv_usec>>1) - (double) (firstusec>>1); high = (double) (tp.tv_sec - firstsec); return high + 1.0e-6*(low+low); #endif } ga-5-3/armci/src-gemini/portals_ds.c0000640005473000001440000004514111466102622016247 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif # include "armcip.h" # include # include # include # include static ptl_handle_ni_t ds_nih; static ptl_handle_eq_t ds_eqh; static ptl_handle_eq_t request_eqh; static ptl_handle_me_t matchall_meh; static int request_buffer_cur_block; static ptl_md_t request_buffer_md[PORTALS_NREQUEST_BUFFERS]; static ptl_handle_me_t request_buffer_meh[PORTALS_NREQUEST_BUFFERS]; int portals_ds_ready = 0; // void *portals_ds_working_buffer = NULL; void* portals_ds_thread(void* args) { portals_ds_init(); portals_ds(); portals_ds_finalize(); portalsSpinLockOnInt(&portals_cp_finished,1,1000); exit(0); return NULL; } int portals_ds_init() { int i,rc; size_t bufferSize; float warningSize; portals_ds_ready = 0; /* --------------------------------------------------------------------- *\ unhook set affinity ... data servers can roam \* --------------------------------------------------------------------- */ # ifdef PORTALS_AFFINITY int smp_np, smp_me; unsigned long mask; unsigned int len = sizeof(mask); unsigned long ncpus; int verbose = 0; MPI_Comm_size(portals_smp_comm,&smp_np); MPI_Comm_rank(portals_smp_comm,&smp_me); if((ncpus = sysconf(_SC_NPROCESSORS_ONLN)) < 0) { printf("%d [ds] sysconf(_SC_NPROCESSORS_ONLN) failed; err=%d\n", armci_me, ncpus); armci_die("sysconf in init_throttle",911); } if(sched_getaffinity(0, len, &mask) < 0) { perror("sched_getaffinity"); armci_die("getaffinity error in ds_init",911); } if(armci_clus_me == 0 && /* verbose */ 0 ) { printf("%d [ds]: old affinity = 0x%x, ncpus = %d\n", armci_me, mask, ncpus); } if(smp_np == ncpus) { mask = (1 << ncpus) - 1; /* let the data server roam over all cores */ } else { mask = 1 << (ncpus - 1); /* pin the ds to the last core on the node */ } if(sched_setaffinity(0, len, (cpu_set_t *) &mask) < 0) { perror("sched_setaffinity"); armci_die("setaffinity error in ds_init",911); } if(sched_getaffinity(0, len, &mask) < 0) { perror("sched_getaffinity"); armci_die("getaffinity error (#2) in ds_init",911); } if(armci_clus_me == 0 && verbose) { printf("%d [ds]: new affinity = 0x%x, ncpus = %d\n", armci_me, mask, ncpus); } # endif /* --------------------------------------------------------------------- *\ initialize the network interface \* --------------------------------------------------------------------- */ rc = portals_init(&ds_nih); if (rc != PTL_OK) { printf("failed to initialize portals on ds; err %d\n",rc); Fatal_error(rc); } /* --------------------------------------------------------------------- *\ used for responding to data requests; this keeps the response events in a separate queue from the multitude of incoming data requests \* --------------------------------------------------------------------- */ rc = portals_create_eq(ds_nih, 200, &ds_eqh); /* --------------------------------------------------------------------- *\ used to process incoming data requests. at very large scale we will have to do some sort of messaging by node group to reduce the worst case scenario off all to one type operations. use the data server to message forward from node groups. \* --------------------------------------------------------------------- */ i = ARMCI_MAX(6*PORTALS_MAX_DESCRIPTORS*armci_nproc,200); i = ARMCI_MAX(6*armci_nproc,200); rc = portals_create_eq(ds_nih, i, &request_eqh); if (rc != PTL_OK) { printf("failed to create request event queue"); Fatal_error(rc); } /* --------------------------------------------------------------------- *\ create ME list that matches all incoming data requests this will be a dead ME with no MD ... it will only be used as a place holder in which the "active" me/md will be placed in front of. \* --------------------------------------------------------------------- */ rc = portals_create_matchall_me(&matchall_meh); if (rc != PTL_OK) { printf("failed to create matchall ME\n"); Fatal_error(rc); } /* --------------------------------------------------------------------- *\ create buffer space for the ds buffer \* --------------------------------------------------------------------- */ assert(portalsMaxEagerMessageSize > sizeof(request_header_t)); bufferSize = portalsMaxEagerMessageSize; # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE bufferSize *= armci_nclus; # else bufferSize *= armci_nproc; # endif bufferSize = bufferSize/(PORTALS_NREQUEST_BUFFERS-2); bufferSize = ARMCI_MAX(bufferSize,portalsMaxEagerMessageSize); // if(armci_me == 0) printf("%s: bufferSize=%ld\n",Portals_ID(),bufferSize); /* if(bufferSize*PORTALS_NREQUEST_BUFFERS > PORTALS_REQUEST_BUFFER_SIZE_WARNING) { warningSize = (float) bufferSize * PORTALS_NREQUEST_BUFFERS; warningSize /= ONE_MB; printf("[data server]: internal request buffer is %.2f MB\n",warningSize); } */ for(i=0; itag.user_ptr = (void *) &ev; if(request->operation == PUT || ARMCI_ACC(request->operation)) { buffersize = sizeof(request_header_t) + request->dscrlen + request->datalen; if(buffersize >= portalsMaxEagerMessageSize) { buffer = (char *) MessageRcvBuffer; portals_ds_get_from_cp(buffer,buffersize,ev.initiator,ev.hdr_data); request = (request_header_t *) buffer; request->tag.user_ptr = (void *) &ev; armci_data_server(buffer); // printf("%d: FINISHED RENDEZ-VOUS!\n",armci_me); break; } } if(request->operation == GET) { buffersize = sizeof(request_header_t) + request->dscrlen; if(buffersize >= portalsMaxEagerMessageSize) { buffer = (char *) MessageRcvBuffer; portals_ds_get_from_cp(buffer,buffersize,ev.initiator,ev.hdr_data); request = (request_header_t *) buffer; request->tag.user_ptr = (void *) &ev; armci_data_server(buffer); // printf("%d: FINISHED RENDEZ-VOUS!\n",armci_me); break; } } /* ------------------------------------------------------------- *\ process request \* ------------------------------------------------------------- */ armci_data_server(buffer); if(request->operation == QUIT) active = 0; break; case PTL_EVENT_UNLINK: // printf("captured an unlink event!!\n"); // portals_print_event_details(&ev); /* if((long) ev.md.user_ptr != request_buffer_cur_block) { printf("sanity check failed: user_ptr=%ld; cur_block=%ld\n",(long) ev.md.user_ptr, request_buffer_cur_block); armci_die("hummm ... unlink issue?",911); } */ portals_ds_requeue_md((long) ev.md.user_ptr); break; default: printf("unexpected event type %d in recvany\n"); Fatal_error(911); break; } } while(active); // flush out event q; the only thing that should remain is possibly 1 unlink event; while( (rc=PtlEQGet(request_eqh, &ev)) != PTL_EQ_EMPTY) { if(rc == PTL_OK) { if(ev.type != PTL_EVENT_UNLINK) { printf("%s: flushing request_eqh: event type=%d\n",Portals_ID(),ev.type); } else { portals_ds_requeue_md((long) ev.md.user_ptr); } } else if(rc == PTL_EQ_DROPPED) { printf("%s: eq dropped\n",Portals_ID()); } else { printf("%s: some error in PtlEQGet; err=%d\n",Portals_ID(),rc); Fatal_error(rc); } } return PTL_OK; } int portals_ds_finalize() { int i,rc; // unlink and request buffers for(i=0; itype, ev->offset, ev->mlength, ev->hdr_data, (long) ev->md.user_ptr); fflush(stdout); } int portals_ds_requeue_md(int i) { int rc; ptl_handle_me_t meh; ptl_handle_md_t mdh; ptl_process_id_t match_id; ptl_match_bits_t match_bits = MATCH_ALL_MBITS; ptl_match_bits_t ignore_bits = MATCH_ALL_IBITS; match_id.nid = PTL_NID_ANY; match_id.pid = PTL_PID_ANY; rc = portals_me_insert(matchall_meh,match_id,match_bits,ignore_bits,&meh); if(rc != PTL_OK) { printf("me insert failed in ds requeue md; err %d\n",rc); Fatal_error(rc); } rc = portals_md_attach(meh,request_buffer_md[i],PTL_UNLINK,&mdh); if(rc != PTL_OK) { printf("md attach failed in ds requeue md; err %d\n",rc); Fatal_error(rc); } request_buffer_meh[i] = meh; request_buffer_cur_block++; if(request_buffer_cur_block == PORTALS_NREQUEST_BUFFERS) request_buffer_cur_block=0; return PTL_OK; } int portals_create_matchall_me(ptl_handle_me_t* me_handle) { int rc; ptl_process_id_t match_id; ptl_match_bits_t match_bits = MATCH_ALL_MBITS; ptl_match_bits_t ignore_bits = MATCH_ALL_IBITS; match_id.nid = PTL_NID_ANY; match_id.pid = PTL_PID_ANY; rc = portals_me_attach(ds_nih,match_id,match_bits,ignore_bits,&matchall_meh); if (rc != PTL_OK) { printf("PtlMEAttachAny err %d in portals_create_melist\n",rc); return rc; } return rc; } void portals_ds_send_ack(ptl_process_id_t id, ptl_match_bits_t mbits) { portals_desc_t desc; # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE static int ack = 0; desc.buffer = &ack; desc.length = sizeof(int); # else desc.buffer = NULL; desc.length = 0; # endif desc.id = id; desc.mbits = mbits | DS_RESPONSE_ACK; desc.hdr = mbits; desc.state = 0; desc.eqh = ds_eqh; desc.nih = ds_nih; portals_put(&desc); portals_wait(&desc); } void portals_ds_send_put(void *buffer, ptl_size_t length, ptl_process_id_t id, ptl_match_bits_t mbits) { portals_desc_t desc; desc.buffer = buffer; desc.length = length; desc.id = id; desc.mbits = mbits | DS_RESPONSE_PUT; desc.hdr = mbits; desc.state = 0; desc.eqh = ds_eqh; desc.nih = ds_nih; portals_put(&desc); portals_wait(&desc); } void portals_ds_get_from_cp(void *buffer, ptl_size_t length, ptl_process_id_t id, ptl_match_bits_t mbits) { portals_desc_t desc; desc.buffer = buffer; desc.length = length; desc.id = id; desc.mbits = mbits | DS_RESPONSE_GET; desc.hdr = mbits; desc.state = 0; desc.eqh = ds_eqh; desc.nih = ds_nih; portals_get(&desc); portals_wait(&desc); } #ifdef DDI static void ds_handler(DDI_Patch *request, ptl_process_id_t from) { int i,j,nr,nc; long array[10],*a; size_t size; char *data_ptr; portals_desc_t desc; ptl_event_t *ev = (ptl_event_t *) request->user_ptr; switch(request->oper) { case DDI_GET: // printf("%s received DDI_GET request of size %d\n",Portals_ID(),request->size); nr = request->ihi - request->ilo + 1; nc = request->jhi - request->jlo + 1; if(nr < 0 || nc < 0 || nr > 10 || nc > 1) { printf("test get dimension problem\n"); abort(); } if(nr*sizeof(long) != request->size) { printf("test get request size does not match\n"); abort(); } for(i=0,j=317; iinitiator; desc.mbits = ev->hdr_data | DS_RESPONSE_PUT; desc.hdr = ev->hdr_data; desc.state = 0; desc.eqh = ds_eqh; desc.nih = ds_nih; portals_put(&desc); portals_wait(&desc); break; case DDI_PUT: nr = request->ihi - request->ilo + 1; nc = request->jhi - request->jlo + 1; data_ptr = NULL; if(ev->mlength > sizeof(DDI_Patch)) { printf("recv'ed eager put - size %d\n",ev->mlength-sizeof(DDI_Patch)); data_ptr = (char *) request; data_ptr += sizeof(DDI_Patch); } if(request->size != ev->mlength-sizeof(DDI_Patch)) { printf("eager msg buffer length does not match request size %d\n",request->size); abort(); } a = (long *) data_ptr; for(i=0; iinitiator,ev->hdr_data); break; case DDI_QUIT: // printf("%s received DDI_QUIT request\n",Portals_ID()); portals_ds_send_ack(ev->initiator,ev->hdr_data); /* desc.buffer = NULL; desc.length = 0; desc.id = ev->initiator; desc.mbits = ev->hdr_data | DS_RESPONSE_ACK; desc.hdr = ev->hdr_data; desc.state = 0; portals_put(&desc); portals_wait(&desc); */ break; case DDI_MEMORY: DDI_Memory_server(request->size); portals_ds_send_ack(ev->initiator,ev->hdr_data); break; default: printf("%s unknown operation in request=%d\n",Portals_ID(),request->oper); abort(); break; } return; } #endif ga-5-3/armci/src-gemini/pendbufs.c0000640005473000001440000006123311466102622015703 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if defined(PEND_BUFS) #include "pendbufs.h" #include "armcip.h" #include #include #include #include #define DEBUG_SERVER 0 /*-------------------Attributes-------------------------*/ /**Attributes to control buffer count and sizes. Implement this way to hide the global variables, and provide get/set methods.*/ #define NUM_ATTRIBUTES 4 #define ATTRIB_IMMBUF_LEN 0 #define ATTRIB_IMMBUF_NUM 1 #define ATTRIB_PNDBUF_LEN 2 #define ATTRIB_PNDBUF_NUM 3 /** List of hidden attributes and their operations. * @param attid IN Attribute id. Choose from the list above * @param gs IN Get(=0)/Set(=1) * @param v IN Value (used only when gs==1) * @return Value of the attribute on return */ static int att_ops(int attid, int gs, int v) { static not_first[NUM_ATTRIBUTES]; /*auto-init to zero*/ static val[NUM_ATTRIBUTES]; assert(attid>=0 && attidIMM_BUF_LEN*/ INIT=7, /**buf; proc_waitlist_t *info = &pbuf_proc_list_info[msginfo->from]; assert(msginfo->tag.imm_msg == 0); pbuf = _armci_serv_pendbuf_getbuf(); if(pbuf) { pbuf->status = INIT; pbuf->avail = 0; pbuf->vbuf = vbuf; memcpy(pbuf->buf, vbuf->buf, sizeof(request_header_t)+msginfo->dscrlen); /* pbuf_proc_list_info[msginfo->from].waiting_on=pbuf; */ pbuf->order_prev = info->order_tail; if(info->order_tail) info->order_tail->order_next = pbuf; info->order_tail = pbuf; if(!info->order_head) info->order_head = pbuf; } return pbuf; } /**Free a pending buffer * @param pbuf IN Pointer to Pending buffer to be freed * @return none */ static void _armci_serv_pendbuf_freebuf(pendbuf_t *pbuf){ const request_header_t *msginfo = (request_header_t *)pbuf->buf; proc_waitlist_t *info = &pbuf_proc_list_info[msginfo->from]; ARMCI_PR_DBG("enter",0); assert(pbuf != NULL); pbuf->avail=1; pbuf->status = -1; pbuf->vbuf = NULL; /* assert(info->waiting_on == pbuf); */ /* info->waiting_on = NULL; */ if(pbuf->order_prev) pbuf->order_prev->order_next = pbuf->order_next; if(pbuf->order_next) pbuf->order_next->order_prev = pbuf->order_prev; if(info->order_head == pbuf) { assert(pbuf->order_prev == NULL); info->order_head = pbuf->order_next; } if(info->order_tail == pbuf) { assert(pbuf->order_next == NULL); info->order_tail = pbuf->order_prev; } pbuf->order_prev = pbuf->order_next = NULL; /*not necessary here*/ _nPendBufsUsed -= 1; assert(_nPendBufsUsed>=0); ARMCI_PR_DBG("exit",0); } /** Implement ordering between messages. This function needs to be * implemented in conjunction with @_armci_serv_pendbuf_promote to * ensure ordered processing of messages. * @param vbuf IN Message in immediate buffer being checked * @return 1 if the message can be progressed (either in-place or * after copying to a pending buffer). 0 therwise. */ static int _armci_serv_pendbuf_can_progress(immbuf_t *vbuf) { const request_header_t *msginfo=(request_header_t*)vbuf->buf; const int proc = msginfo->from; const proc_waitlist_t *info = &pbuf_proc_list_info[proc]; if(_pbufOrder == ONE_PBUF_MESG) { /*Only one pending buffer used at any time*/ if(_nPendBufsUsed>0) return 0; return 1; } if(_pbufOrder == ONE_PBUF_MESG_PER_PROC) { /*Only one non-immediate mesg can be assigned to the pending buffers at any time*/ if(info->order_head || (info->immbuf_wlist_head && info->immbuf_wlist_head!=vbuf)) { return 0;/*other requests from this process remain*/ } if(!IS_IMM_MSG(*msginfo) && _nPendBufsUsed==PENDING_BUF_NUM) { return 0; /*This buffer needs a free pending buffer*/ } assert(info->n_pending == 0 || info->immbuf_wlist_head==vbuf); return 1; } if(_pbufOrder == ACC_NO_ORDER) { /*Messages are processed in-place in immediate buffers or issued into pending buffers for progress in order (like ONE_PBUF_PER_MESG). This rule relaxes ONE_PBUF_PER_MESG by allowing a sequence of ACCs to be processed in-place/issued without waiting for the prior ones to complete*/ int i, nwaiting_on, nacc; pendbuf_t *ptr; if(!IS_IMM_MSG(*msginfo) && _nPendBufsUsed==PENDING_BUF_NUM) { /* printf("%d(s): op=%d from=%d datalen=%d waiting for pending buffers\n",armci_me,msginfo->operation,msginfo->from,msginfo->tag.data_len); */ /* fflush(stdout); */ return 0; /*This buffer needs a free pending buffer*/ } #if 1 /*commented for now: it does work*/ if(IS_IMM_MSG(*msginfo) && ARMCI_ACC(msginfo->operation)) { return 1; } #endif if(info->immbuf_wlist_head && info->immbuf_wlist_head!=vbuf) { /* printf("%d(s): op=%d from=%d datalen=%d not queue head\n",armci_me,msginfo->operation,msginfo->from,msginfo->tag.data_len); */ /* fflush(stdout); */ return 0; /*in order issue*/ } if(!ARMCI_ACC(msginfo->operation)) { if(info->order_head) return 0; return 1; } assert(ARMCI_ACC(msginfo->operation)); for(ptr=info->order_head; ptr!=NULL; ptr=ptr->order_next) { request_header_t *m = (request_header_t *)ptr->buf; assert(m->from == msginfo->from); if(!ARMCI_ACC(m->operation)) break; } if(ptr != NULL) return 0; return 1; } if(_pbufOrder == PUTACC_SPLIT_ORDER) { if(!IS_IMM_MSG(*msginfo) && _nPendBufsUsed==PENDING_BUF_NUM) { return 0; /*This buffer needs a free pending buffer*/ } if(info->immbuf_wlist_head && info->immbuf_wlist_head!=vbuf) { return 0; } if(msginfo->operation!=PUT && !ARMCI_ACC(msginfo->operation)) { if(info->order_head) return 0; return 1; } #if 1 if(IS_IMM_MSG(*msginfo) && ARMCI_ACC(msginfo->operation)) { return 1; } #endif if(IS_IMM_MSG(*msginfo) && info->order_head) return 0; return 1; } armci_die("Unknown pbuf ordering rule",_pbufOrder); return 0; } /** Goes through the set of immediate buffers waiting to be processed * and completed, and identifies a buffer that can be processed * now. Removes it from the list and returns it. Promote also * considers availability of pending buffers if need be. * @return Pointer to buffer that can be processed now. NULL if none exists. */ static immbuf_t* _armci_serv_pendbuf_promote() { immbuf_t *immbuf = NULL; proc_waitlist_t *info; ARMCI_PR_DBG("enter",0); assert(_nPendBufsUsed>=0); if(!pbuf_ordering_plist_head) { return NULL; /*nothing to promote*/ } info = pbuf_ordering_plist_head; do { if(info->immbuf_wlist_head==NULL) { printf("%d(s): Why is info->immbuf_wlist_head NULL\n", armci_me); fflush(stdout); pause(); } assert(info->immbuf_wlist_head!=NULL); assert(info->n_pending>0); if(_armci_serv_pendbuf_can_progress(info->immbuf_wlist_head)) { immbuf = info->immbuf_wlist_head; info->immbuf_wlist_head = immbuf->immbuf_list_next; info->n_pending -= 1; immbuf->immbuf_list_next = NULL; if(!info->immbuf_wlist_head) { info->immbuf_wlist_tail = NULL; /*remove this proc from proc list*/ info->prev->next = info->next; info->next->prev = info->prev; if(pbuf_ordering_plist_head == info) { pbuf_ordering_plist_head = (info->next==info)?NULL:info->next; } info->prev = info->next = NULL; } break; } info = info->next; } while(info != pbuf_ordering_plist_head); if(DEBUG_SERVER) if(immbuf) { request_header_t *msginfo=(request_header_t*)immbuf->buf; printf("%d:: promoting a buffer immbuf=%p op=%d from=%d n_pending=%d\n", armci_me,immbuf,msginfo->operation,msginfo->from,info->n_pending); fflush(stdout); } ARMCI_PR_DBG("exit",0); return immbuf; } /** Enqueue a message. It could be an immediate message that cannot * make progress or a non-immediate message that cannot make progress * either due to ordering constraints or lack of pending buffers. * @param vbuf IN Immediate buffer to be enqueud * @return Pending buffer into which the message was enqueued. NULL * if no pending buffer was allocated (which is always the case for * immediate messages) */ static pendbuf_t* _armci_serv_pendbuf_enqueue(immbuf_t *vbuf) { request_header_t *msginfo=(request_header_t *)vbuf->buf; int from = msginfo->from; pendbuf_t *pbuf; proc_waitlist_t *info = &pbuf_proc_list_info[msginfo->from]; ARMCI_PR_DBG("enter",0); /* printf("%d: Entered serv_pbuf_enqueue\n", armci_me); */ pbuf=NULL; if(msginfo->tag.imm_msg) { assert(!_armci_serv_pendbuf_can_progress(vbuf)); } else if(_armci_serv_pendbuf_can_progress(vbuf)) { pbuf = _armci_serv_pendbuf_assignbuf(vbuf); assert(pbuf != NULL); /*can_progress() should ensure this*/ } if(pbuf == NULL) { /* printf("%d(s):: Enqueing op=%d imm=%d from %d. n_pending=%d\n", armci_me, msginfo->operation, msginfo->tag.imm_msg, msginfo->from,info->n_pending); */ /* fflush(stdout); */ vbuf->immbuf_list_next = NULL; assert(info->n_pending < IMM_BUF_NUM); /*How another message now?*/ info->n_pending += 1; if(!info->immbuf_wlist_head) { assert(!info->immbuf_wlist_tail); assert(!info->prev && !info->next); /*insert proc into proc list*/ if(!pbuf_ordering_plist_head) { pbuf_ordering_plist_head=info->next=info->prev=info; } else { info->next = pbuf_ordering_plist_head; info->prev = pbuf_ordering_plist_head->prev; pbuf_ordering_plist_head->prev->next = info; pbuf_ordering_plist_head->prev = info; } } /*insert vbuf into immbuf list for this proc*/ if(info->immbuf_wlist_tail) info->immbuf_wlist_tail->immbuf_list_next=vbuf; info->immbuf_wlist_tail = vbuf; if(!info->immbuf_wlist_head) info->immbuf_wlist_head = vbuf; } /* printf("%d: Leaving serv_pbuf_enqueue\n", armci_me); */ ARMCI_PR_DBG("exit",0); return pbuf; } /** Progress GET requests. * @param pbuf IN Pending buffer containing the GET request * @return none */ static void _armci_serv_pendbuf_progress_get(pendbuf_t *pbuf) { int index = (pbuf - serv_pendbuf_arr); request_header_t *msginfo = (request_header_t *)pbuf->buf; void *buffer =((char *)(msginfo+1)+msginfo->dscrlen); int *status = &pbuf->status; assert(sizeof(request_header_t)+msginfo->dscrlen+msginfo->datalendscrlen <= IMM_BUF_LEN) { /*Have the header and descriptor; go process*/ armci_complete_pendbuf(pbuf); *status = SEND_DATA_PENDING; } else { /*Need to get rest of descriptor*/ const int bytes = sizeof(request_header_t)+msginfo->dscrlen-IMM_BUF_LEN; #warning "PEND_BUFS: Abusing msginfo->tag.ack_ptr for GETS with large descriptors!" assert(msginfo->tag.ack_ptr != NULL); /*sanity check. Should point to tag.ack on the client side*/ void *lptr = ((char *)msginfo)+IMM_BUF_LEN; void *rptr = ((char *)msginfo->tag.ack_ptr) - (int)(&((request_header_t *)0)->tag.ack) + IMM_BUF_LEN; /* printf("%d(s):: GET getting rest of descriptor index=%d bytes=%d ptr=%p from=%d\n", */ /* armci_me,index,bytes,rptr,msginfo->from); */ /* fflush(stdout); */ assert(IMM_BUF_LEN+bytes < PENDING_BUF_LEN); armci_pbuf_start_get(rptr,lptr,bytes,msginfo->from,index); *status = RECV_DSCR_PENDING; } break; case RECV_DSCR_PENDING: armci_die("call_data_server should set status to RECV_DSCR_DONE before calling progress",*status); break; case SEND_DATA_PENDING: armci_die("call_data_server should set status to SEND_DATA_DONE before calling progress",*status); break; case RECV_DSCR_DONE: /* printf("%d(s):: GET. Done recving descriptor index=%d op=%d datalen=%d from=%d\n", */ /* armci_me,index,msginfo->operation,msginfo->datalen,msginfo->from); */ /* fflush(stdout); */ armci_complete_pendbuf(pbuf); *status = SEND_DATA_PENDING; break; case SEND_DATA_DONE: _armci_serv_pendbuf_freebuf(pbuf); break; case RECV_DATA_PENDING: case RECV_DATA_DONE: default: armci_die("pendbuf_progress_get: invalid status", *status); } } /** Progress PUT/ACC requests. * @param pbuf IN Pending buffer containing the PUT/ACC request * @return none */ static void _armci_serv_pendbuf_progress_putacc(pendbuf_t *pbuf) { int index = (pbuf - serv_pendbuf_arr); request_header_t *msginfo = (request_header_t *)pbuf->buf; void *buffer =((char *)(msginfo+1))+msginfo->dscrlen; int *status = &pbuf->status; assert(msginfo->operation==PUT || ARMCI_ACC(msginfo->operation)); assert(sizeof(request_header_t)+msginfo->dscrlen+msginfo->datalenoperation,msginfo->from); */ /* fflush(stdout); */ if(sizeof(request_header_t)+msginfo->dscrlen <= IMM_BUF_LEN) { /*Have the header and descriptor; go process*/ assert(sizeof(request_header_t)+msginfo->dscrlen+msginfo->tag.data_len < PENDING_BUF_LEN); armci_pbuf_start_get(msginfo->tag.data_ptr,buffer,msginfo->tag.data_len, msginfo->from, index); /* printf("%d(s): PUT/ACC getting data. pbuf_num=%d data_ptr=%p data_len=%d bytes=%d\n", armci_me,index,msginfo->tag.data_ptr, msginfo->tag.data_len,msginfo->bytes); */ *status = RECV_DATA_PENDING; } else { /*Need to get rest of descriptor*/ const int bytes = sizeof(request_header_t)+msginfo->dscrlen-IMM_BUF_LEN; #warning "PEND_BUFS: Abusing msginfo->tag.ack_ptr for GETS with large descriptors!" assert(msginfo->tag.ack_ptr != NULL); /*sanity check. Should point to tag.ack on the client side*/ void *lptr = ((char *)msginfo)+IMM_BUF_LEN; void *rptr = ((char *)msginfo->tag.ack_ptr) - (int)(&((request_header_t *)0)->tag.ack) + IMM_BUF_LEN; /* printf("%d(s):: PUT getting rest of descriptor index=%d bytes=%d ptr=%p from=%d\n", */ /* armci_me,index,bytes,rptr,msginfo->from); */ /* fflush(stdout); */ assert(IMM_BUF_LEN+bytes < PENDING_BUF_LEN); armci_pbuf_start_get(rptr,lptr,bytes,msginfo->from,index); *status = RECV_DSCR_PENDING; } break; case RECV_DSCR_PENDING: armci_die("call_data_server should set status to RECV_DSCR_DONE before calling progress",*status); break; case RECV_DATA_PENDING: armci_die("call_data_server should set status to RECV_DONE before calling progress",*status); break; case RECV_DSCR_DONE: assert(sizeof(request_header_t)+msginfo->dscrlen+msginfo->tag.data_len < PENDING_BUF_LEN); armci_pbuf_start_get(msginfo->tag.data_ptr,buffer,msginfo->tag.data_len, msginfo->from, index); /* printf("%d(s): PUT/ACC getting data. pbuf_num=%d data_ptr=%p data_len=%d bytes=%d\n", armci_me,index,msginfo->tag.data_ptr, msginfo->tag.data_len,msginfo->bytes); */ *status = RECV_DATA_PENDING; break; case RECV_DATA_DONE: /* printf("%d(s):: Done PUT/ACC with buf index=%d op=%d datalen=%d from=%d\n", */ /* armci_me,index,msginfo->operation,msginfo->datalen,msginfo->from); */ /* fflush(stdout); */ if(msginfo->operation == PUT && pbuf->order_prev!=NULL) { assert(pbuf->commit_me == 0); /*Why called so many times in thie state?*/ pbuf->commit_me = 1; break; } pbuf->commit_me = 0; armci_complete_pendbuf(pbuf); _armci_serv_pendbuf_freebuf(pbuf); break; case SEND_DATA_PENDING: case SEND_DATA_DONE: default: armci_die("pendbuf_progress_putacc: invalid status", *status); } } /** Make progress on processing a pending buffer. This function, also * ensures any other waiting messages get processed if they can * be. Thus, progress and eventual termination is guaranteed by this * function. * @param _pbuf IN Pending buffer to make progress on * @return none */ static void _armci_serv_pendbuf_progress(pendbuf_t *_pbuf){ request_header_t *msginfo = (request_header_t *)_pbuf->buf; immbuf_t *vbuf = _pbuf->vbuf; pendbuf_t *pbuf = _pbuf; assert(pbuf->vbuf!=NULL); do { if(vbuf && !IS_IMM_MSG(*msginfo)) { assert(pbuf->vbuf == vbuf); } /* printf("%d(s):: progressing op=%d imm=%d from=%d datalen=%d pbuf=%p vbuf=%p n_pending=%d\n", armci_me, */ /* msginfo->operation,msginfo->tag.imm_msg,msginfo->from,msginfo->datalen, pbuf,vbuf,pbuf_proc_list_info[msginfo->from].n_pending); */ /* fflush(stdout); */ if(IS_IMM_MSG(*msginfo)) { armci_complete_immbuf(vbuf); } else { /*non-immediate message*/ proc_waitlist_t* info = &pbuf_proc_list_info[msginfo->from]; do { assert(pbuf->vbuf == vbuf); if(msginfo->operation == PUT || ARMCI_ACC(msginfo->operation)) { _armci_serv_pendbuf_progress_putacc(pbuf); } else if (msginfo->operation == GET) { _armci_serv_pendbuf_progress_get(pbuf); } else { armci_die("pending buffer processing for this op not yet implemented", msginfo->operation); } pbuf = info->order_head; vbuf = pbuf ? pbuf->vbuf : NULL; } while(info->order_head && info->order_head->commit_me); } /* sleep(2); */ vbuf = _armci_serv_pendbuf_promote(); if(vbuf) { msginfo = (request_header_t *)vbuf->buf; if(!msginfo->tag.imm_msg) { pbuf = _armci_serv_pendbuf_assignbuf(vbuf); assert(pbuf != NULL); } } } while(vbuf != NULL); } /*----------------External functions--------------------*/ /** Initialize array of pending buffers * @return none */ void armci_pendbuf_init() { int i; ARMCI_PR_DBG("enter",0); /* bzero(serv_pendbuf_arr, sizeof(pendbuf_t)*PENDING_BUF_NUM); */ for(i=0; ibuf; bzero(pbuf, sizeof(pendbuf_t)); pbuf->buf = buf; pbuf->avail=1; } pbuf_ordering_plist_head=NULL; pbuf_proc_list_info = (proc_waitlist_t *)malloc(sizeof(proc_waitlist_t)*armci_nproc); assert(pbuf_proc_list_info != NULL); bzero(pbuf_proc_list_info, sizeof(proc_waitlist_t)*armci_nproc); ARMCI_PR_DBG("exit",0); } void armci_pendbuf_service_req(immbuf_t *immbuf) { pendbuf_t *pbuf; request_header_t *msginfo=(request_header_t*)immbuf->buf; if(IS_IMM_MSG(*msginfo) && _armci_serv_pendbuf_can_progress(immbuf)) { /* printf("%d: msg vbuf=%p op=%d from=%d imm=%d datalen=%d bytes=%d data_ptr=%p can progress. Completing it now!\n", */ /* armci_me, vbuf, msginfo->operation, msginfo->from, msginfo->tag.imm_msg,msginfo->datalen,msginfo->bytes,msginfo->tag.data_ptr); */ /* fflush(stdout); */ armci_complete_immbuf(immbuf); } else if(pbuf = _armci_serv_pendbuf_enqueue(immbuf)) { /* printf("%d: msg vbuf=%p op=%d from=%d imm=%d datalen=%d bytes=%d data_ptr=%p got pending buf. Progressing it!\n", */ /* armci_me, vbuf, msginfo->operation, msginfo->from, msginfo->tag.imm_msg,msginfo->datalen,msginfo->bytes,msginfo->tag.data_ptr); */ /* fflush(stdout); */ _armci_serv_pendbuf_progress(pbuf); } else { /* printf("%d: msg vbuf=%p op=%d from=%d imm=%d datalen=%d bytes=%d data_ptr=%p in waitlist!\n", armci_me, vbuf, msginfo->operation, msginfo->from, msginfo->tag.imm_msg,msginfo->datalen,msginfo->bytes,msginfo->tag.data_ptr); */ /* fflush(stdout); */ } } /**Network layer reporting to split buffers code that a put completed * on a pending buffer. * @param pbufid IN Pending buffer id (specified when starting a * put). * @return void */ void armci_pendbuf_done_put(int pbufid) { assert(pbufid>=0 && pbufid=0 && pbufidstatus) { case RECV_DSCR_PENDING: pbuf->status = RECV_DSCR_DONE; break; case RECV_DATA_PENDING: pbuf->status = RECV_DATA_DONE; break; default: armci_die("Reporting get done on buf with inappropriate status",pbufid); } _armci_serv_pendbuf_progress(pbuf); } #endif /*PEND_BUFS*/ ga-5-3/armci/src-gemini/shmalloc.c0000640005473000001440000000467011466102622015701 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: shmalloc.c,v 1.10 2002-06-20 23:34:17 vinod Exp $ */ #include #include #include "armcip.h" #include "message.h" #include "kr_malloc.h" static long *offset_arr; void armci_shmalloc_exchange_offsets(context_t *ctx_local) { void **ptr_arr; void *ptr; armci_size_t bytes = 128; int i; ptr_arr = (void**)malloc(armci_nproc*sizeof(void*)); offset_arr = (long*) malloc(armci_nproc*sizeof(long)); if(!ptr_arr || !offset_arr) armci_die("armci_shmalloc_get_offsets: malloc failed", 0); /* get memory with same size on all procs */ ptr = kr_malloc(bytes, ctx_local); if(!ptr) armci_die("armci_shmalloc_get_offsets: kr_malloc failed",bytes); bzero((char*)ptr_arr,armci_nproc*sizeof(void*)); ptr_arr[armci_me] = ptr; /* now combine individual addresses into a single array */ armci_exchange_address(ptr_arr, armci_nproc); /* identify offets */ for (i=0; i #include extern int cos_me; #define DATA_SERVER_ 1 // by default use the ds remote gets #define ORNL_USE_DS_FOR_REMOTE_GETS #ifdef ORNL_USE_DS_FOR_REMOTE_GETS #define DATA_SERVER_GET_ 1 #else #define DATA_SERVER_GET_ 0 #endif #define ARMCI_OP_2D(op, scale, proc, src, dst, bytes, count, src_stride, dst_stride,lockit)\ if(op == GET || op ==PUT)\ armci_copy_2D(op, proc, src, dst, bytes, count, src_stride,dst_stride);\ else if(count==1) armci_acc_1D(op, scale, proc, src, dst, bytes,lockit);\ else\ armci_acc_2D(op, scale, proc, src, dst, bytes, count, src_stride,dst_stride,lockit) /* macro supports run-time selection of request sending scheme */ #if defined(CLIENT_BUF_BYPASS) #define CAN_REQUEST_DIRECTLY _armci_bypass #else # if defined(HITACHI) # define CAN_REQUEST_DIRECTLY 0 # else # define CAN_REQUEST_DIRECTLY 1 # endif #endif #define PREPROCESS_STRIDED(tmp_count) {\ tmp_count=0;\ if(stride_levels) \ for(;stride_levels;stride_levels--)if(count[stride_levels]>1)break;\ if(stride_levels&&(count[0]==src_stride_arr[0]&&count[0]==dst_stride_arr[0])){\ tmp_count=seg_count[1];\ count = seg_count+1;\ seg_count[1] = seg_count[0] * seg_count[1];\ stride_levels --;\ src_stride_arr ++; dst_stride_arr++ ;\ }\ } #define POSTPROCESS_STRIDED(tmp_count) if(tmp_count)seg_count[1]=tmp_count #define SERVER_PUT 1 #define SERVER_NBPUT 2 #define DIRECT_PUT 3 #define DIRECT_NBPUT 4 #define SERVER_GET 5 #define SERVER_NBGET 6 #define DIRECT_GET 7 #define DIRECT_NBGET 8 #define ONESIDED_PUT 9 #define ONESIDED_GET 10 # define DO_FENCE(__proc,__prot) \ if(__prot==SERVER_GET); \ else if(__prot==SERVER_PUT); \ else if(__prot==DIRECT_GET || __prot==DIRECT_NBGET) { \ if(armci_prot_switch_fence[__proc]==SERVER_PUT) \ ARMCI_DoFence(__proc); \ } \ else if(__prot==DIRECT_PUT || __prot==DIRECT_NBPUT) { \ if(armci_prot_switch_fence[__proc]==SERVER_PUT) \ ARMCI_DoFence(__proc); \ } \ else if(__prot==ONESIDED_GET) { \ if(armci_prot_switch_fence[__proc]==SERVER_PUT) { \ ARMCI_DoFence(__proc); \ } \ } \ else if(__prot==ONESIDED_PUT); \ else; \ armci_prot_switch_fence[__proc]=__prot #ifndef REGIONS_REQUIRE_MEMHDL # define ARMCI_MEMHDL_T void #endif ARMCI_MEMHDL_T *mhloc=NULL,*mhrem=NULL; #ifdef REGIONS_REQUIRE_MEMHDL int armci_region_both_found_hndl(void *loc, void *rem, int size, int node, ARMCI_MEMHDL_T **loc_memhdl,ARMCI_MEMHDL_T **rem_memhdl); # define ARMCI_REGION_BOTH_FOUND(_s,_d,_b,_p) \ armci_region_both_found_hndl((_s),(_d),(_b),(_p),&mhloc,&mhrem) #else # define ARMCI_REGION_BOTH_FOUND(_s,_d,_b,_p) \ armci_region_both_found((_s),(_d),(_b),(_p)) #endif #ifdef HAS_RDMA_GET # ifdef REGIONS_REQUIRE_MEMHDL void armci_client_direct_get(int p, void *src_buf, void *dst_buf, int len, void** cptr,int nbtag,ARMCI_MEMHDL_T *lochdl,ARMCI_MEMHDL_T *remhdl); # else void armci_client_direct_get(int p, void *src_buf, void *dst_buf, int len, void** contextptr,int nbtag,void *mhdl,void *mhdl1); # endif # define ARMCI_NBREM_GET(_p,_s,_sst,_d,_dst,_cou,_lev,_hdl) \ armci_client_direct_get((_p),(_s),(_d),(_cou)[0],&((_hdl)->cmpl_info),(_hdl)->tag,(void *)mhloc,(void *)mhrem); \ # define ARMCI_REM_GET(_p,_s,_sst,_d,_dst,_cou,_lev,_hdl) \ armci_client_direct_get((_p),(_s),(_d),(_cou)[0],NULL,0,(void *)mhloc,(void *)mhrem); \ #else # define ARMCI_REM_GET(_p,_s,_sst,_d,_dst,_cou,_lev,_hdl) \ armci_rem_get((_p),(_s),(_sst),(_d),(_dst),(_cou),(_lev),(_hdl),(void *)mhloc,(void *)mhrem) # define ARMCI_NBREM_GET ARMCI_REM_GET #endif extern int* armci_prot_switch_fence; extern int armci_prot_switch_preproc; extern int armci_prot_switch_preop; int armci_iwork[MAX_STRIDE_LEVEL]; /*\ 2-dimensional array copy \*/ static void armci_copy_2D(int op, int proc, void *src_ptr, void *dst_ptr, int bytes, int count, int src_stride, int dst_stride) { int armci_th_idx = ARMCI_THREAD_IDX; #ifdef LAPI2__ # define COUNT 1 #else # define COUNT count #endif #ifdef __crayx1 int shmem = 1; #else int shmem = SAMECLUSNODE(proc); #endif if(shmem) { /* data is in local/shared memory -- can use memcpy */ // printf("%s: shmem==true; count==%d\n",Portals_ID(),count); if(count==1){ armci_copy(src_ptr, dst_ptr, bytes); // printf("%s: shmem==true; finished\n",Portals_ID(),count); }else { char *ps=(char*)src_ptr; char *pd=(char*)dst_ptr; int j; for (j = 0; j < count; j++){ bcopy(ps,pd,bytes); ps += src_stride; pd += dst_stride; } } } else { /* data not in local/shared memory-access through global address space*/ if(op==PUT){ // printf("%s: pre UPDATE_FENCE_STATE\n",Portals_ID()); UPDATE_FENCE_STATE(proc, PUT, COUNT); // printf("%s: post UPDATE_FENCE_STATE\n",Portals_ID()); #ifdef LAPI SET_COUNTER(ack_cntr[armci_th_idx],COUNT); #endif if(count==1){ armci_put(src_ptr, dst_ptr, bytes, proc); }else{ armci_put2D(proc, bytes, count, src_ptr, src_stride, dst_ptr, dst_stride); } }else{ #ifdef LAPI SET_COUNTER(get_cntr[armci_th_idx], COUNT); #endif if(count==1){ armci_get(src_ptr, dst_ptr, bytes, proc); }else{ armci_get2D(proc, bytes, count, src_ptr, src_stride, dst_ptr, dst_stride); } } } } #if (defined(CRAY) && !defined(__crayx1)) || defined(FUJITSU) #ifdef CRAY # define DAXPY SAXPY #else # define DAXPY daxpy_ #endif static int ONE=1; #define THRESH_ACC 32 static void daxpy_2d_(void* alpha, int *rows, int *cols, void *a, int *ald, void* b, int *bld) { int c,r; double *A = (double*)a; double *B = (double*)b; double Alpha = *(double*)alpha; if(*rows < THRESH_ACC) for(c=0;c<*cols;c++) for(r=0;r<*rows;r++) A[c* *ald+ r] += Alpha * B[c* *bld+r]; else for(c=0;c<*cols;c++) DAXPY(rows, alpha, B + c* *bld, &ONE, A + c* *ald, &ONE); } #endif void armci_acc_1D(int op, void *scale, int proc, void *src, void *dst, int bytes, int lockit) { int rows; void (*func)(void*, void*, void*, int*); ARMCI_PR_DBG("enter",0); switch (op){ case ARMCI_ACC_INT: rows = bytes/sizeof(int); func = I_ACCUMULATE_1D; break; case ARMCI_ACC_LNG: rows = bytes/sizeof(long); func = L_ACCUMULATE_1D; break; case ARMCI_ACC_DBL: rows = bytes/sizeof(double); func = D_ACCUMULATE_1D; break; case ARMCI_ACC_DCP: rows = bytes/(2*sizeof(double)); func = Z_ACCUMULATE_1D; break; case ARMCI_ACC_CPL: rows = bytes/(2*sizeof(float)); func = C_ACCUMULATE_1D; break; case ARMCI_ACC_FLT: rows = bytes/sizeof(float); func = F_ACCUMULATE_1D; break; default: armci_die("ARMCI accumulate: operation not supported",op); func = F_ACCUMULATE_1D; /*avoid compiler whining */ } if(lockit){ ARMCI_LOCKMEM(dst, bytes + (char*)dst, proc); } func(scale, dst, src, &rows); if(lockit)ARMCI_UNLOCKMEM(proc); ARMCI_PR_DBG("exit",0); } /*\ 2-dimensional accumulate \*/ void armci_acc_2D(int op, void* scale, int proc, void *src_ptr, void *dst_ptr, int bytes, int cols, int src_stride, int dst_stride, int lockit) { int rows, lds, ldd, span; void (*func)(void*, int*, int*, void*, int*, void*, int*); ARMCI_PR_DBG("enter",0); /* if((long)src_ptr%ALIGN)armci_die("src not aligned",(long)src_ptr); if((long)dst_ptr%ALIGN)armci_die("src not aligned",(long)dst_ptr); */ switch (op){ case ARMCI_ACC_INT: rows = bytes/sizeof(int); ldd = dst_stride/sizeof(int); lds = src_stride/sizeof(int); func = I_ACCUMULATE_2D; break; case ARMCI_ACC_LNG: rows = bytes/sizeof(long); ldd = dst_stride/sizeof(long); lds = src_stride/sizeof(long); func = L_ACCUMULATE_2D; break; case ARMCI_ACC_DBL: rows = bytes/sizeof(double); ldd = dst_stride/sizeof(double); lds = src_stride/sizeof(double); func = D_ACCUMULATE_2D; break; case ARMCI_ACC_DCP: rows = bytes/(2*sizeof(double)); ldd = dst_stride/(2*sizeof(double)); lds = src_stride/(2*sizeof(double)); func = Z_ACCUMULATE_2D; break; case ARMCI_ACC_CPL: rows = bytes/(2*sizeof(float)); ldd = dst_stride/(2*sizeof(float)); lds = src_stride/(2*sizeof(float)); func = C_ACCUMULATE_2D; break; case ARMCI_ACC_FLT: rows = bytes/sizeof(float); ldd = dst_stride/sizeof(float); lds = src_stride/sizeof(float); func = F_ACCUMULATE_2D; break; case ARMCI_ACC_RA: rows = bytes/sizeof(long); ldd = dst_stride/sizeof(long); lds = src_stride/sizeof(long); func = RA_ACCUMULATE_2D_; break; default: armci_die("ARMCI accumulate: operation not supported",op); func = F_ACCUMULATE_2D; /*avoid compiler whining */ } if(lockit){ span = cols*dst_stride; ARMCI_LOCKMEM(dst_ptr, span + (char*)dst_ptr, proc); } func(scale, &rows, &cols, dst_ptr, &ldd, src_ptr, &lds); if(lockit)ARMCI_UNLOCKMEM(proc); ARMCI_PR_DBG("exit",0); } /*\ compute range of strided data AND lock it \*/ static void armci_lockmem_patch(void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, int proc) { long span = count[stride_levels]; ARMCI_PR_DBG("enter",0); span *= dst_stride_arr[stride_levels-1]; /* lock region of remote memory */ ARMCI_LOCKMEM(dst_ptr, span + (char*)dst_ptr, proc); ARMCI_PR_DBG("exit",0); } /*\ strided accumulate on top of remote memory copy: * copies remote data to local buffer, accumulates, puts it back * Note: if we are here then remote patch must fit in the ARMCI buffer \*/ int armci_acc_copy_strided(int optype, void* scale, int proc, void* src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels) { void *buf_ptr = armci_internal_buffer; int rc, i, *buf_stride_arr = armci_iwork; ARMCI_PR_DBG("enter",0); armci_lockmem_patch(dst_ptr,dst_stride_arr, count, stride_levels, proc); /* setup stride array for internal buffer */ buf_stride_arr[0]=count[0]; for(i=0; i< stride_levels; i++) { buf_stride_arr[i+1]= buf_stride_arr[i]*count[i+1]; } /* get remote data to local buffer */ rc = armci_op_strided(GET, scale, proc, dst_ptr, dst_stride_arr, buf_ptr, buf_stride_arr, count, stride_levels, 0,NULL); if(rc) { ARMCI_UNLOCKMEM(proc); return(rc); } /* call local accumulate with lockit=0 (we locked it already) and proc=me */ rc = armci_op_strided(optype, scale, armci_me, src_ptr, src_stride_arr, buf_ptr,buf_stride_arr, count, stride_levels,0,NULL); if(rc) { ARMCI_UNLOCKMEM(proc); return(rc); } /* put data back from the buffer to remote location */ rc = armci_op_strided(PUT, scale, proc, buf_ptr, buf_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels,0,NULL); FENCE_NODE(proc); /* make sure put completes before unlocking */ ARMCI_UNLOCKMEM(proc); /* release memory lock */ ARMCI_PR_DBG("exit",0); return(rc); } /*\ Strided operation \*/ int armci_op_strided(int op, void* scale, int proc,void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, int lockit, armci_ihdl_t nb_handle) { char *src = (char*)src_ptr, *dst=(char*)dst_ptr; int s2, s3, i,j, unlockit=0; int total_of_2D; int index[MAX_STRIDE_LEVEL], unit[MAX_STRIDE_LEVEL]; ARMCI_PR_DBG("enter",op); # if defined(ACC_COPY) # ifdef ACC_SMP if(ARMCI_ACC(op) && !(SAMECLUSNODE(proc)) ) # else if ( ARMCI_ACC(op) && proc!=armci_me) # endif /* copy remote data, accumulate, copy back*/ return (armci_acc_copy_strided(op,scale, proc, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels)); else; /* do it directly through shared/local memory */ # endif if(ARMCI_ACC(op) && (stride_levels>2) && lockit){ /* we need one lock operation only - must be done outside 2d acc */ armci_lockmem_patch(dst_ptr,dst_stride_arr, count, stride_levels, proc); unlockit=1; lockit =0; } /* if(proc!=armci_me) INTR_OFF;*/ if(armci_me>=0 && !SAMECLUSNODE(proc)) { printf("%d network_strided not supported (in op_strided)\n",cos_me); abort(); # if 0 armci_network_strided(op,scale,proc,src_ptr,src_stride_arr,dst_ptr, dst_stride_arr,count,stride_levels,nb_handle); # endif } else { // printf("%s in large switch stmt in op_strided (stride_levels=%d)\n",Portals_ID(),stride_levels); switch (stride_levels) { case 0: /* 1D copy */ ARMCI_OP_2D(op, scale, proc, src_ptr, dst_ptr, count[0], 1, count[0], count[0], lockit); break; case 1: /* 2D op */ ARMCI_OP_2D(op, scale, proc, src_ptr, dst_ptr, count[0], count[1], src_stride_arr[0], dst_stride_arr[0], lockit); break; case 2: /* 3D op */ for (s2= 0; s2 < count[2]; s2++){ /* 2D copy */ ARMCI_OP_2D(op, scale, proc, src+s2*src_stride_arr[1], dst+s2*dst_stride_arr[1], count[0], count[1], src_stride_arr[0], dst_stride_arr[0], lockit ); } break; case 3: /* 4D op */ for(s3=0; s3< count[3]; s3++){ src = (char*)src_ptr + src_stride_arr[2]*s3; dst = (char*)dst_ptr + dst_stride_arr[2]*s3; for (s2= 0; s2 < count[2]; s2++){ /* 3D copy */ ARMCI_OP_2D(op, scale, proc, src+s2*src_stride_arr[1], dst+s2*dst_stride_arr[1], count[0], count[1],src_stride_arr[0], dst_stride_arr[0],lockit); } } break; default: /* N-dimensional */ { /* stride_levels is not the same as ndim. it is ndim-1 * For example a 10x10x10... array, suppose the datatype is byte * the stride_arr is 10, 10x10, 10x10x10 .... */ index[2] = 0; unit[2] = 1; total_of_2D = count[2]; for(j=3; j<=stride_levels; j++) { index[j] = 0; unit[j] = unit[j-1] * count[j-1]; total_of_2D *= count[j]; } for(i=0; i= count[j]) index[j] = 0; } ARMCI_OP_2D(op, scale, proc, src, dst, count[0], count[1], src_stride_arr[0], dst_stride_arr[0], lockit); } } } } // ends else block // printf("%s after switch stmt; prior to fence/lock\n",Portals_ID()); if(unlockit){ # if defined(ACC_COPY) FENCE_NODE(proc); # endif ARMCI_UNLOCKMEM(proc); /* release memory lock */ } // printf("%s after fence/lock; leaving op_strided\n",Portals_ID()); ARMCI_PR_DBG("exit",op); return 0; } int PARMCI_PutS( void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ) { int rc=0, direct=1; int *count=seg_count, tmp_count=0; ARMCI_PR_DBG("enter",proc); if(src_ptr == NULL || dst_ptr == NULL) return FAIL; if(seg_count[0]<0)return FAIL3; if(stride_levels <0 || stride_levels > MAX_STRIDE_LEVEL) return FAIL4; if(proc<0)return FAIL5; ORDER(PUT,proc); /* ensure ordering */ PREPROCESS_STRIDED(tmp_count); #if DATA_SERVER_ if(stride_levels) direct=SAMECLUSNODE(proc); direct=SAMECLUSNODE(proc); #endif // printf("%s direct=%d, proc=%d\n",Portals_ID(),direct,proc); if(!direct){ # ifdef CRAY_REGISTER_ARMCI_MALLOC if (stride_levels == 0 && armci_onesided_direct_put_enabled) { // maybe move this to just before the operation happen of even after it happens // it's possible we may want to skip the ONESIDED_PUT and do a SERVER_PUT if we can't find the remote mdh DO_FENCE(proc,SERVER_PUT); // local variable within stride_level == 0 scope cos_desc_t *comm_desc = &__global_1sided_direct_comm_desc; onesided_hnd_t cp_hnd; cos_mdesc_t local_mdh, remote_mdh; // find remote mdh armci_onesided_search_remote_mdh_list(dst_ptr, proc, &remote_mdh); // register local memory -- this should use abhinav's dreg routines cpMemRegister(src_ptr, count[0], &local_mdh); // onesided_mem_register(cp_hnd, src_ptr, count[0], NULL, &local_mdh); // get the onesided v2.0 api handle for the compute process cpGetOnesidedHandle(&cp_hnd); // initialize onesided communication descriptor onesided_desc_init(cp_hnd, &local_mdh, &remote_mdh, 0, comm_desc); // initiate put onesided_put_nb(comm_desc); // complete put [locally] onesided_wait(comm_desc); // deregister memory -- if we were using the dreg routines, we would let the // dreg memory do this for us "on demand" = lazy mem deregisteration cpMemDeregister(&local_mdh); // onesided_mem_deregister(cp_hnd, &local_mdh); // issue a flushing get - does nothing to fix the fence problem /* static long flushaddr = 911; cpMemRegister(&flushaddr, sizeof(long), &local_mdh); onesided_desc_init(cp_hnd, &local_mdh, &remote_mdh, NULL, comm_desc); onesided_get_nb(comm_desc); onesided_wait(comm_desc); cpMemDeregister(&local_mdh); */ // done! goto fn_exit; } else # endif { DO_FENCE(proc,SERVER_PUT); // printf("%s calling pack_strided in PARMCI_PutS\n",Portals_ID()); rc = armci_pack_strided(PUT, NULL, proc, src_ptr, src_stride_arr,dst_ptr, dst_stride_arr, count, stride_levels, NULL, -1, -1, -1,NULL); } } else { if(!SAMECLUSNODE(proc))DO_FENCE(proc,DIRECT_PUT); // printf("%s calling op_strided in PARMCI_PutS\n",Portals_ID()); rc = armci_op_strided( PUT, NULL, proc, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr,count,stride_levels, 0,NULL); } POSTPROCESS_STRIDED(tmp_count); #ifdef ARMCI_PROFILE armci_profile_stop_strided(ARMCI_PROF_PUTS); #endif fn_exit: ARMCI_PR_DBG("exit",proc); if(rc) return FAIL6; else return 0; } int PARMCI_PutS_flag( void* src_ptr, /* pointer to 1st segment at source */ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination */ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level, count[0] = #bytes */ int stride_levels, /* number of stride levels */ int *flag, /* pointer to remote flag */ int val, /* value to set flag upon completion of data transfer */ int proc /* remote process(or) ID */ ) { int bytes; /* Put local data on remote processor */ PARMCI_PutS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); /* Send signal to remote processor that data transfer has * been completed. */ bytes = sizeof(int); PARMCI_Put(&val, flag, bytes, proc); return 1; } int PARMCI_Put_flag(void *src, void* dst,int bytes,int *f,int v,int proc) { return PARMCI_PutS_flag(src, NULL, dst, NULL, &bytes, 0, f, v, proc); } int PARMCI_PutS_flag_dir(void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int seg_count[], int stride_levels, int *flag, int val, int proc) { return PARMCI_PutS_flag(src_ptr, src_stride_arr,dst_ptr,dst_stride_arr, seg_count, stride_levels, flag, val, proc); } int PARMCI_GetS( void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ) { int rc,direct=1; int *count=seg_count, tmp_count=0; ARMCI_PR_DBG("enter",proc); #ifdef ARMCI_ONESIDED_GETS_USES_NBGETS armci_hdl_t nb_handle; ARMCI_INIT_HANDLE(&nb_handle); PARMCI_NbGetS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, seg_count, stride_levels, proc, &nb_handle); rc = PARMCI_Wait(&nb_handle); #else if(src_ptr == NULL || dst_ptr == NULL) return FAIL; if(seg_count[0]<0)return FAIL3; if(stride_levels <0 || stride_levels > MAX_STRIDE_LEVEL) return FAIL4; if(proc<0||proc>=armci_nproc){printf("\n%d:%s:proc=%d",armci_me,__FUNCTION__,proc);fflush(stdout);return FAIL5;} ORDER(GET,proc); /* ensure ordering */ PREPROCESS_STRIDED(tmp_count); direct=SAMECLUSNODE(proc); # ifdef CRAY_REGISTER_ARMCI_MALLOC if(!direct && armci_onesided_direct_get_enabled) { onesided_hnd_t cp_hnd; cpGetOnesidedHandle(&cp_hnd); cos_mdesc_t local_mdh, remote_mdh, *mdh = NULL; int node = armci_clus_id(proc); if(stride_levels == 0) { // if a strided put/acc is outstanding to proc, then we need to ensure that is completed // we allow the maximum possible overlap for strided puts/acc. that means they are not fully blocking // calls. they are however, guaranteed to be complete prior to another request being sent. DO_FENCE(proc,ONESIDED_GET); // local varaibles cos_desc_t *comm_desc = &__global_1sided_direct_get_comm_desc; // printf("[cp %d]: direct remote get - src=%p; dst=%p; tgt_rank=%d; tgt_node=%d\n",armci_me,src_ptr,dst_ptr,proc,node); // find remote mdh armci_onesided_search_remote_mdh_list(src_ptr, proc, &remote_mdh); // register local memory -- will use UDREG if ONESIDED_USE_UDREG is active cpMemRegister(dst_ptr, count[0], &local_mdh); // onesided_mem_register(cp_hnd, src_ptr, count[0], NULL, &local_mdh); // initialize onesided communication descriptor onesided_desc_init(cp_hnd, &local_mdh, &remote_mdh, 0, comm_desc); // initiate get onesided_get_nb(comm_desc); // complete put [locally] onesided_wait(comm_desc); // deregister memory -- if we were using the dreg routines, we would let the // dreg memory do this for us "on demand" = lazy mem deregisteration cpMemDeregister(&local_mdh); // onesided_mem_deregister(cp_hnd, &local_mdh); // done! rc=0; goto fn_exit; } else { DO_FENCE(proc,ONESIDED_GET); int i,j,id; long src_idx; /* index offset of the current block position to src_ptr */ long dst_idx; /* index offset of the current block position to dst_ptr */ int n1dim; /* number of 1-dimensional blocks to xfer */ int bvalue[MAX_STRIDE_LEVEL]; int bunit[MAX_STRIDE_LEVEL]; cos_desc_t cds[MAX_OUTSTANDING_ONESIDED_GETS]; uint64_t src_addr, dst_addr; n1dim = 1; for(i=1; i<=stride_levels; i++) { n1dim *= count[i]; } bvalue[0] = 0; bvalue[1] = 0; bunit[0] = 1; bunit[1] = 1; for(i=2; i<=stride_levels; i++) { bvalue[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } for(i=0,id=0; i (count[j]-1)) bvalue[j] = 0; } src_addr = (uint64_t) ((char *) src_ptr + src_idx); dst_addr = (uint64_t) ((char *) dst_ptr + dst_idx); if(i >= MAX_OUTSTANDING_ONESIDED_GETS) { if(id == MAX_OUTSTANDING_ONESIDED_GETS) id=0; onesided_wait(&cds[id]); cpMemDeregister(&cds[id].local_mdesc); } armci_onesided_search_remote_mdh_list((void*)src_addr, proc, &remote_mdh); cpMemRegister((void*)dst_addr, count[0], &local_mdh); onesided_desc_init(cp_hnd, &local_mdh, &remote_mdh, 0, &cds[id]); onesided_get_nb(&cds[id]); id++; } // finish up any outstanding requests int count = n1dim; if(MAX_OUTSTANDING_ONESIDED_GETS < n1dim) count = MAX_OUTSTANDING_ONESIDED_GETS; for(i=0; i MAX_STRIDE_LEVEL) return FAIL4; if(proc<0)return FAIL5; ORDER(optype,proc); /* ensure ordering */ PREPROCESS_STRIDED(tmp_count); #if DATA_SERVER_ direct=SAMECLUSNODE(proc); #endif # if defined(ACC_COPY) && !defined(ACC_SMP) if(armci_me != proc) direct=0; # endif if(direct) rc = armci_op_strided(optype,scale, proc, src_ptr, src_stride_arr,dst_ptr, dst_stride_arr, count, stride_levels,1,NULL); else{ DO_FENCE(proc,SERVER_PUT); rc = armci_pack_strided(optype,scale,proc,src_ptr, src_stride_arr,dst_ptr, dst_stride_arr,count,stride_levels,NULL,-1,-1,-1,NULL); } POSTPROCESS_STRIDED(tmp_count); ARMCI_PR_DBG("exit",proc); if(rc) return FAIL6; else return 0; } int PARMCI_Acc(int optype, void *scale, void *src, void* dst, int bytes, int proc) { int rc=0; rc = PARMCI_AccS(optype, scale, src, NULL, dst, NULL, &bytes, 0, proc); return rc; } /* whatever original put and get functions were here have been replaced with the proper ones from the main armci branch. the old functions were entirely responsible for causing the test_vector_acc test to fail in test.x */ int PARMCI_Put(void *src, void* dst, int bytes, int proc) { int rc=0; //ARMCI_PROFILE_START_STRIDED(&bytes, 0, proc, ARMCI_PROF_PUT); rc = PARMCI_PutS(src, NULL, dst, NULL, &bytes, 0, proc); //ARMCI_PROFILE_STOP_STRIDED(ARMCI_PROF_PUT); assert(rc==0); return rc; } int PARMCI_Get(void *src, void* dst, int bytes, int proc) { int rc=0; //ARMCI_PROFILE_START_STRIDED(&bytes, 0, proc, ARMCI_PROF_GET); #ifdef __crayx1 memcpy(dst,src,bytes); #else rc = PARMCI_GetS(src, NULL, dst, NULL, &bytes, 0, proc); #endif //ARMCI_PROFILE_STOP_STRIDED(ARMCI_PROF_GET); //dassert(1,rc==0); assert(rc==0); return rc; } #define PACK1D 1 #if PACK1D # define armci_read_strided1 armci_read_strided # define armci_write_strided1 armci_write_strided #else # define armci_read_strided2 armci_read_strided # define armci_write_strided2 armci_write_strided #endif void armci_write_strided1(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf) { int i, j; long idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int bvalue[MAX_STRIDE_LEVEL], bunit[MAX_STRIDE_LEVEL]; int bytes = count[0]; ARMCI_PR_DBG("enter",stride_levels); /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ bvalue[0] = 0; bvalue[1] = 0; bunit[0] = 1; bunit[1] = 1; for(i=2; i<=stride_levels; i++) { bvalue[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } for(i=0; i (count[j]-1)) bvalue[j] = 0; } armci_copy( ((char*)ptr)+idx, buf, bytes); buf += count[0]; } ARMCI_PR_DBG("exit",stride_levels); } void armci_write_strided2(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf) { int i, j; int total; /* number of 2 dim block */ int index[MAX_STRIDE_LEVEL], unit[MAX_STRIDE_LEVEL]; ARMCI_PR_DBG("enter",stride_levels); if(stride_levels == 0){ armci_copy( ptr, buf, count[0]); }else if (count[0]%ALIGN_SIZE || (unsigned long)ptr%ALIGN_SIZE ) armci_write_strided1(ptr,stride_levels, stride_arr,count,buf); else { int rows, ld, idx, ldd; char *src; rows = count[0]/8; ld = stride_arr[0]/8; switch(stride_levels){ case 1: DCOPY21(&rows, count+1, ptr, &ld, buf, &idx); break; case 2: ldd = stride_arr[1]/stride_arr[0]; DCOPY31(&rows, count+1, count+2, ptr, &ld, &ldd, buf,&idx); break; default: index[2] = 0; unit[2] = 1; total = count[2]; for(j=3; j<=stride_levels; j++) { index[j] = 0; unit[j] = unit[j-1] * count[j-1]; total *= count[j]; } for(i=0; i= count[j]) index[j] = 0; } DCOPY21(&rows, count+1,src, &ld, buf, &idx); buf = (char*) ((double*)buf + idx); } } /*switch */ } /*else */ ARMCI_PR_DBG("exit",stride_levels); } void armci_read_strided1(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf) { int i, j; long idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int bvalue[MAX_STRIDE_LEVEL], bunit[MAX_STRIDE_LEVEL]; int bytes = count[0]; ARMCI_PR_DBG("enter",stride_levels); /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ bvalue[0] = 0; bvalue[1] = 0; bunit[0] = 1; bunit[1] = 1; for(i=2; i<=stride_levels; i++) { bvalue[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } for(i=0; i (count[j]-1)) bvalue[j] = 0; } armci_copy(buf, ((char*)ptr)+idx,bytes); buf += count[0]; } ARMCI_PR_DBG("exit",stride_levels); } void armci_read_strided2(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf) { int i, j; int total; /* number of 2 dim block */ int index[MAX_STRIDE_LEVEL], unit[MAX_STRIDE_LEVEL]; ARMCI_PR_DBG("enter",stride_levels); if(stride_levels == 0){ armci_copy( buf, ptr, count[0]); }else if (count[0]%ALIGN_SIZE || (unsigned long)ptr%ALIGN_SIZE) armci_read_strided1(ptr,stride_levels, stride_arr,count,buf); else { int rows, ld, idx, ldd; char *src; rows = count[0]/8; ld = stride_arr[0]/8; switch(stride_levels){ case 1: DCOPY12(&rows, count+1, ptr, &ld, buf, &idx); break; case 2: ldd = stride_arr[1]/stride_arr[0]; DCOPY13(&rows, count+1, count+2, ptr, &ld, &ldd, buf,&idx); break; default: index[2] = 0; unit[2] = 1; total = count[2]; for(j=3; j<=stride_levels; j++) { index[j] = 0; unit[j] = unit[j-1] * count[j-1]; total *= count[j]; } for(i=0; i= count[j]) index[j] = 0; } DCOPY12(&rows, count+1,src, &ld, buf, &idx); buf = (char*) ((double*)buf + idx); } } /*switch */ } /*else */ ARMCI_PR_DBG("exit",stride_levels); } /*\Non-Blocking API \*/ int PARMCI_NbPutS( void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /* armci non-blocking call handle*/ ) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int *count=seg_count, tmp_count=0; int rc=0, direct=1; ARMCI_PR_DBG("enter",proc); if(src_ptr == NULL || dst_ptr == NULL) return FAIL; if(count[0]<0)return FAIL3; if(stride_levels <0 || stride_levels > MAX_STRIDE_LEVEL) return FAIL4; if(proc<0)return FAIL5; PREPROCESS_STRIDED(tmp_count); #if DATA_SERVER_ if(stride_levels)direct=SAMECLUSNODE(proc); direct=SAMECLUSNODE(proc); #endif /* aggregate put */ if(nb_handle && nb_handle->agg_flag == SET) { if(!direct){ rc= armci_agg_save_strided_descriptor(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, PUT, nb_handle); POSTPROCESS_STRIDED(tmp_count); return(rc); } } else { UPDATE_FENCE_INFO(proc); /*set tag and op in the nb handle*/ if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = PUT; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = armci_set_implicit_handle(PUT, proc); } if(!direct){ DO_FENCE(proc,SERVER_NBPUT); rc = armci_pack_strided(PUT, NULL, proc, src_ptr, src_stride_arr,dst_ptr, dst_stride_arr, count, stride_levels,NULL,-1,-1,-1,nb_handle); } else{ if(!SAMECLUSNODE(proc))DO_FENCE(proc,DIRECT_NBPUT); rc = armci_op_strided( PUT, NULL, proc, src_ptr, src_stride_arr, dst_ptr,dst_stride_arr,count,stride_levels, 0,nb_handle); } POSTPROCESS_STRIDED(tmp_count); ARMCI_PR_DBG("exit",proc); if(rc) return FAIL6; else return 0; } int PARMCI_NbGetS( void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: byte_count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /* armci non-blocking call handle*/ ) { int rc=0,direct=1; int *count=seg_count, tmp_count=0; armci_ihdl_t nb_handle = (armci_ihdl_t) usr_hdl; ARMCI_PR_DBG("enter",proc); if(src_ptr == NULL || dst_ptr == NULL) return FAIL; if(seg_count[0]<0) return FAIL3; if(stride_levels<0 || stride_levels > MAX_STRIDE_LEVEL) return FAIL4; if(proc<0 || proc>=armci_nproc) { printf("\n%d:%s:proc=%d",armci_me,__FUNCTION__,proc); fflush(stdout); return FAIL5; } // ORDER(GET,proc); /* ensure ordering */ PREPROCESS_STRIDED(tmp_count); direct = SAMECLUSNODE(proc); // direct ==> local on node operation if(nb_handle && nb_handle->agg_flag == SET) { if(!direct){ rc= armci_agg_save_strided_descriptor(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, GET, nb_handle); POSTPROCESS_STRIDED(tmp_count); return(rc); } } else { // ORDER(GET,proc); ensure ordering // set tag and op in the nb handle if(nb_handle) { nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = GET; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = armci_set_implicit_handle(GET, proc); } if(nb_handle) { nb_handle->onesided_direct = 0; } # ifdef CRAY_REGISTER_ARMCI_MALLOC if(!direct && armci_onesided_direct_get_enabled) { // set up the non-blocking descriptor nb_handle->onesided_direct = 1; bzero(&nb_handle->comm_desc, MAX_OUTSTANDING_ONESIDED_GETS*sizeof(cos_desc_t)); onesided_hnd_t cp_hnd; cpGetOnesidedHandle(&cp_hnd); cos_mdesc_t local_mdh, remote_mdh, *mdh = NULL; int node = armci_clus_id(proc); if(stride_levels == 0) { // if a strided put/acc is outstanding to proc, then we need to ensure that is completed // we allow the maximum possible overlap for strided puts/acc. that means they are not fully blocking // calls. they are however, guaranteed to be complete prior to another request being sent. DO_FENCE(proc,ONESIDED_GET); // local varaibles cos_desc_t *comm_desc = &nb_handle->comm_desc[0]; // printf("[cp %d]: direct remote get - src=%p; dst=%p; tgt_rank=%d; tgt_node=%d\n",armci_me,src_ptr,dst_ptr,proc,node); // find remote mdh armci_onesided_search_remote_mdh_list(src_ptr, proc, &remote_mdh); // register local memory -- will use UDREG if ONESIDED_USE_UDREG is active cpMemRegister(dst_ptr, count[0], &local_mdh); // onesided_mem_register(cp_hnd, src_ptr, count[0], NULL, &local_mdh); // initialize onesided communication descriptor onesided_desc_init(cp_hnd, &local_mdh, &remote_mdh, 0, comm_desc); // initiate get onesided_get_nb(comm_desc); // done! rc=0; goto fn_exit; } else { DO_FENCE(proc,ONESIDED_GET); int i,j,id; long src_idx; /* index offset of the current block position to src_ptr */ long dst_idx; /* index offset of the current block position to dst_ptr */ int n1dim; /* number of 1-dimensional blocks to xfer */ int bunit[MAX_STRIDE_LEVEL]; int bvalue[MAX_STRIDE_LEVEL]; cos_desc_t *cds = nb_handle->comm_desc; uint64_t src_addr, dst_addr; n1dim = 1; for(i=1; i<=stride_levels; i++) { n1dim *= count[i]; } bvalue[0] = 0; bvalue[1] = 0; bunit[0] = 1; bunit[1] = 1; for(i=2; i<=stride_levels; i++) { bvalue[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } for(i=0,id=0; i (count[j]-1)) bvalue[j] = 0; } src_addr = (uint64_t) ((char *) src_ptr + src_idx); dst_addr = (uint64_t) ((char *) dst_ptr + dst_idx); /* if(armci_me == 0) { printf("1dpass=%d of %d; src_idx=%d; dst_idx=%d; count[0]=%d\n",i,n1dim,src_idx, dst_idx,count[0]); } */ if(i >= MAX_OUTSTANDING_ONESIDED_GETS) { if(id == MAX_OUTSTANDING_ONESIDED_GETS) id=0; onesided_wait(&cds[id]); cpMemDeregister(&cds[id].local_mdesc); } armci_onesided_search_remote_mdh_list((void*)src_addr, proc, &remote_mdh); cpMemRegister((void*)dst_addr, count[0], &local_mdh); onesided_desc_init(cp_hnd, &local_mdh, &remote_mdh, 0, &cds[id]); onesided_get_nb(&cds[id]); id++; } // done rc=0; goto fn_exit; } } // end if(!direct && armci_onesided_direct_get_enabled) # endif // CRAY_REGISTER_ARMCI_MALLOC if(!direct) { DO_FENCE(proc,SERVER_NBGET); rc = armci_pack_strided(GET, NULL, proc, src_ptr, src_stride_arr, dst_ptr,dst_stride_arr,count,stride_levels, NULL,-1,-1,-1,nb_handle); } else { // DO_FENCE(proc,DIRECT_GET); rc = armci_op_strided(GET, NULL, proc, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr,count, stride_levels,0,nb_handle); } POSTPROCESS_STRIDED(tmp_count); fn_exit: #ifdef ARMCI_PROFILE armci_profile_stop_strided(ARMCI_PROF_GETS); #endif ARMCI_PR_DBG("exit",proc); if(rc) return FAIL6; else return 0; } int PARMCI_NbAccS( int optype, /* operation */ void *scale, /* scale factor x += scale*y */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /* armci non-blocking call handle*/ ) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int *count=seg_count, tmp_count=0; int rc, direct=1; ARMCI_PR_DBG("enter",proc); if(src_ptr == NULL || dst_ptr == NULL) return FAIL; if(src_stride_arr == NULL || dst_stride_arr ==NULL) return FAIL2; if(count[0]<0)return FAIL3; if(stride_levels <0 || stride_levels > MAX_STRIDE_LEVEL) return FAIL4; if(proc<0)return FAIL5; UPDATE_FENCE_INFO(proc); PREPROCESS_STRIDED(tmp_count); #if DATA_SERVER_ direct=SAMECLUSNODE(proc); #endif # if defined(ACC_COPY) && !defined(ACC_SMP) if(armci_me != proc) direct=0; # endif /*set tag and op in the nb handle*/ if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = optype; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = armci_set_implicit_handle(optype, proc); if(direct){ rc = armci_op_strided(optype,scale, proc, src_ptr, src_stride_arr,dst_ptr, dst_stride_arr, count, stride_levels,1,NULL); } else{ DO_FENCE(proc,SERVER_NBPUT); rc = armci_pack_strided(optype,scale,proc,src_ptr, src_stride_arr,dst_ptr, dst_stride_arr,count,stride_levels,NULL,-1,-1,-1,nb_handle); } POSTPROCESS_STRIDED(tmp_count); ARMCI_PR_DBG("exit",proc); if(rc) return FAIL6; else return 0; } #if !defined(ACC_COPY)&&!defined(CRAY_YMP)&&!defined(CYGNUS)&&!defined(CYGWIN) &&!defined(BGML) # define REMOTE_OP #endif #define INIT_NB_HANDLE(nb,o,p) if(nb){\ (nb)->tag = 0;\ (nb)->op = (o); (nb)->proc= (p);\ (nb)->bufid=NB_NONE;}\ else { (nb)=armci_set_implicit_handle(o, p); (nb)->tag=0; } void set_nbhandle(armci_ihdl_t *nbh, armci_hdl_t *nb_handle, int op, int proc) { if(nb_handle) { *nbh=(armci_ihdl_t)nb_handle; } else { *nbh=armci_set_implicit_handle(op, proc); } } int PARMCI_NbPut(void *src, void* dst, int bytes, int proc,armci_hdl_t* uhandle) { int rc=0, direct=0; armci_ihdl_t nb_handle = (armci_ihdl_t)uhandle; ARMCI_PR_DBG("enter",proc); if(src == NULL || dst == NULL) return FAIL; direct =SAMECLUSNODE(proc); /* aggregate put */ if(nb_handle && nb_handle->agg_flag == SET) { if(direct) { armci_copy(src,dst,bytes); rc=0; } else rc=armci_agg_save_descriptor(src,dst,bytes,proc,PUT,0,nb_handle); return rc; } if(direct) { /*armci_wait needs proc to compute direct*/ INIT_NB_HANDLE(nb_handle,PUT,proc); armci_copy(src,dst,bytes); } else{ # ifdef PORTALS rc=PARMCI_NbPutS(src, NULL,dst,NULL, &bytes,0,proc,uhandle); # else # ifdef ARMCI_NB_PUT INIT_NB_HANDLE(nb_handle,PUT,proc); UPDATE_FENCE_STATE(proc, PUT, 1); ARMCI_NB_PUT(src, dst, bytes, proc, &nb_handle->cmpl_info); # else rc=PARMCI_NbPutS(src, NULL,dst,NULL, &bytes,0,proc,uhandle); # endif # endif } ARMCI_PR_DBG("exit",proc); return(rc); } int PARMCI_NbGet(void *src, void* dst, int bytes, int proc,armci_hdl_t* uhandle) { int rc=0, direct=0; armci_ihdl_t nb_handle = (armci_ihdl_t)uhandle; ARMCI_PR_DBG("enter",proc); if(src == NULL || dst == NULL) return FAIL; direct =SAMECLUSNODE(proc); if(nb_handle && nb_handle->agg_flag == SET) { if(direct) { armci_copy(src,dst,bytes); rc=0; } else rc=armci_agg_save_descriptor(src,dst,bytes,proc,GET,0,nb_handle); return rc; } if(direct) { /*armci_wait needs proc to compute direct*/ INIT_NB_HANDLE(nb_handle,PUT,proc); armci_copy(src,dst,bytes); }else{ # ifdef PORTALS rc=PARMCI_NbGetS(src, NULL,dst,NULL, &bytes,0,proc,uhandle); # else # ifdef ARMCI_NB_GET /*set tag and op in the nb handle*/ INIT_NB_HANDLE(nb_handle,GET,proc); ARMCI_NB_GET(src, dst, bytes, proc, &nb_handle->cmpl_info); # else rc=PARMCI_NbGetS(src, NULL,dst,NULL, &bytes,0,proc,uhandle); # endif # endif } ARMCI_PR_DBG("exit",proc); return(rc); } static void _armci_rem_value(int op, void *src, void *dst, int proc, int bytes) { int rc=0; int armci_th_idx = ARMCI_THREAD_IDX; ORDER(op,proc); /* ensure ordering */ #if defined(REMOTE_OP) && !defined(QUADRICS) rc = armci_rem_strided(op, NULL, proc, src, NULL, dst, NULL, &bytes, 0, NULL, 0, NULL); if(rc) armci_die("ARMCI_Value: armci_rem_strided incomplete", FAIL6); #else if(op==PUT) { UPDATE_FENCE_STATE(proc, PUT, 1); # ifdef LAPI SET_COUNTER(ack_cntr[armci_th_idx], 1); # endif #if defined(BGML) /* fprintf(stderr,"bytes: %d\n",bytes); */ /* this call is blocking, so local count is fine */ BG1S_t req; unsigned count=1; BGML_Callback_t cb_wait={wait_callback, &count}; BG1S_Memput(&req, proc, src, 0, dst, bytes, &cb_wait, 1); BGML_Wait(&count); #else armci_put(src, dst, bytes, proc); #endif } else { # ifdef LAPI SET_COUNTER(get_cntr[armci_th_idx], 1); # endif #if defined(BGML) /* fprintf(stderr,"before memget\n"); */ BG1S_t req; unsigned count=1; BGML_Callback_t cb_wait={wait_callback, &count}; BG1S_Memget(&req, proc, dst, 0, src, bytes, &cb_wait, 1); BGML_Wait(&count); #else armci_get(src, dst, bytes, proc); #endif } /* deal with non-blocking loads and stores */ # if defined(LAPI) || defined(_ELAN_PUTGET_H) if(proc != armci_me){ if(op == GET){ WAIT_FOR_GETS; /* wait for data arrival */ }else { WAIT_FOR_PUTS; /* data must be copied out*/ } } #endif #endif } /* non-blocking remote value put/get operation */ static void _armci_nb_rem_value(int op, void *src, void *dst, int proc, int bytes, armci_ihdl_t nb_handle) { int rc=0, pv=0; int armci_th_idx = ARMCI_THREAD_IDX; if(nb_handle && nb_handle->agg_flag == SET) { if(op==PUT) pv = 1; (void)armci_agg_save_descriptor(src,dst,bytes,proc,op,pv,nb_handle); return; } else { if(op==PUT) UPDATE_FENCE_INFO(proc); /*set tag and op in the nb handle*/ if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = op; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = armci_set_implicit_handle(op, proc); } #if defined(REMOTE_OP) && !defined(QUADRICS) rc = armci_rem_strided(op, NULL, proc, src, NULL, dst, NULL, &bytes, 0, NULL, 0, nb_handle); if(rc) armci_die("ARMCI_Value: armci_rem_strided incomplete", FAIL6); #else if(op==PUT) { UPDATE_FENCE_STATE(proc, PUT, 1); # ifdef LAPI SET_COUNTER(ack_cntr[armci_th_idx], 1); # endif armci_put(src, dst, bytes, proc); } else { # ifdef LAPI SET_COUNTER(get_cntr[armci_th_idx], 1); # endif armci_get(src, dst, bytes, proc); } /* deal with non-blocking loads and stores */ # if defined(LAPI) || defined(_ELAN_PUTGET_H) # ifdef LAPI if(!nb_handle) # endif { if(proc != armci_me){ if(op == GET){ WAIT_FOR_GETS; /* wait for data arrival */ }else { WAIT_FOR_PUTS; /* data must be copied out*/ } } } # endif #endif } #define CHK_ERR(dst, proc) \ if(dst==NULL) armci_die("PARMCI_PutValue: NULL pointer passed",FAIL); \ if(proc<0) armci_die("PARMCI_PutValue: Invalid process rank", proc); #define CHK_ERR_GET(src, dst, proc, bytes) \ if(src==NULL || dst==NULL) armci_die("PARMCI_GetValue: NULL pointer passed",FAIL); \ if(proc<0) armci_die("PARMCI_GetValue: Invalid process rank", proc); \ if(bytes<0) armci_die("PARMCI_GetValue: Invalid size", bytes); /** * Register-Originated Put. */ int PARMCI_PutValueInt(int src, void *dst, int proc) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(int *)dst = src; else _armci_rem_value(PUT, &src, dst, proc, sizeof(int)); return 0; } int PARMCI_PutValueLong(long src, void *dst, int proc) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(long *)dst = src; else _armci_rem_value(PUT, &src, dst, proc, sizeof(long)); return 0; } int PARMCI_PutValueFloat(float src, void *dst, int proc) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(float *)dst = src; else _armci_rem_value(PUT, &src, dst, proc, sizeof(float)); return 0; } int PARMCI_PutValueDouble(double src, void *dst, int proc) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(double *)dst = src; else _armci_rem_value(PUT, &src, dst, proc, sizeof(double)); return 0; } /** * Non-Blocking register-originated put. */ int PARMCI_NbPutValueInt(int src, void *dst, int proc, armci_hdl_t* usr_hdl) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(int *)dst = src; else _armci_nb_rem_value(PUT,&src,dst,proc,sizeof(int),(armci_ihdl_t)usr_hdl); return 0; } int PARMCI_NbPutValueLong(long src, void *dst, int proc, armci_hdl_t* usr_hdl) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(long *)dst = src; else _armci_nb_rem_value(PUT,&src,dst,proc,sizeof(long),(armci_ihdl_t)usr_hdl); return 0; } int PARMCI_NbPutValueFloat(float src, void *dst, int proc, armci_hdl_t* usr_hdl) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(float *)dst = src; else _armci_nb_rem_value(PUT,&src,dst,proc,sizeof(float),(armci_ihdl_t)usr_hdl); return 0; } int PARMCI_NbPutValueDouble(double src, void *dst, int proc, armci_hdl_t* usr_hdl) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(double *)dst = src; else _armci_nb_rem_value(PUT,&src,dst,proc,sizeof(double),(armci_ihdl_t)usr_hdl); return 0; } #if 1 /** * Register-Originated Get. */ int PARMCI_GetValueInt(void *src, int proc) { int dst; if( SAMECLUSNODE(proc) ) return *(int *)src; else _armci_rem_value(GET, src, &dst, proc, sizeof(int)); return dst; } long PARMCI_GetValueLong(void *src, int proc) { long dst; if( SAMECLUSNODE(proc) ) return *(long *)src; else _armci_rem_value(GET, src, &dst, proc, sizeof(long)); return dst; } float PARMCI_GetValueFloat(void *src, int proc) { float dst; if( SAMECLUSNODE(proc) ) return *(float *)src; else _armci_rem_value(GET, src, &dst, proc, sizeof(float)); return dst; } double PARMCI_GetValueDouble(void *src, int proc) { double dst; if( SAMECLUSNODE(proc) ) return *(double *)src; else _armci_rem_value(GET, src, &dst, proc, sizeof(double)); return dst; } #endif #if 0 /** * Register-Originated Get. */ int PARMCI_GetValue(void *src, void *dst, int proc, int bytes) { CHK_ERR_GET(src, dst, proc, bytes); if( SAMECLUSNODE(proc) ) { armci_copy(src, dst, bytes); } else _armci_rem_value(GET, src, dst, proc, bytes); return 0; } /** * Non-Blocking register-originated get. */ int PARMCI_NbGetValue(void *src, void *dst, int proc, int bytes, armci_hdl_t* usr_hdl) { CHK_ERR_GET(src, dst, proc, bytes); if( SAMECLUSNODE(proc) ) { armci_copy(src, dst, bytes); } else _armci_nb_rem_value(GET, src, dst, proc, bytes, (armci_ihdl_t)usr_hdl); return 0; } #endif ga-5-3/armci/src-gemini/kr_malloc.c0000640005473000001440000004230611622516074016044 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include "kr_malloc.h" #include "armcip.h" /* for DEBUG purpose only. remove later */ #include "locks.h" #define DEBUG 0 /* Storage allocator basically copied from ANSI K&R and corrupted */ extern char *armci_allocate(); /* Used to get memory from the system */ extern void armci_die(); static char *kr_malloc_shmem(size_t nbytes, context_t *ctx); static void kr_free_shmem(char *ap, context_t *ctx); /** * DEFAULT_NALLOC: No. of units of length ALIGNMENT to get in every * request to the system for memory (8MB/64 => 128*1024units) * DEFAULT_MAX_NALLOC: Maximum number of units that can get i.e.1GB * (if unit size=64bytes, then max units=1024MB/64 = 16*1024*1024) */ #define DEFAULT_NALLOC (128*1024) #define DEFAULT_NALLOC_ALIGN 1024 #define DEFAULT_MAX_NALLOC (1024*1024*16) /* mutual exclusion defs go here */ #define LOCKED 100 #define UNLOCKED 101 static int lock_mode=UNLOCKED; /* enable locking only after armci is initailized as locks (and lock data structures) are initialized in PARMCI_Init */ #define LOCKIT(p) \ if(_armci_initialized && lock_mode==UNLOCKED) { \ NAT_LOCK(0,p); lock_mode=LOCKED; \ } #define UNLOCKIT(p) \ if(_armci_initialized && lock_mode==LOCKED) { \ NAT_UNLOCK(0,p); lock_mode=UNLOCKED; \ } static int do_verify = 0; /* Flag for automatic heap verification */ #define VALID1 0xaaaaaaaa /* For validity check on headers */ #define VALID2 0x55555555 #define USEDP 0 /* CHECK. By default anable this. */ static void kr_error(char *s, unsigned long i, context_t *ctx) { char string[256]; sprintf(string,"kr_malloc: %s %ld(0x%lx)\n", s, i, i); #if 0 kr_malloc_print_stats(ctx); #endif armci_die(string, i); } static Header *morecore(size_t nu, context_t *ctx, size_t *last_size, char **last_ptr) { char *cp; Header *up; #if DEBUG (void) printf("%d: morecore 1: Getting %ld more units of length %d nalloc=%d\n", armci_me, (long)nu, sizeof(Header),ctx->nalloc); (void) fflush(stdout); #endif if (ctx->total >= ctx->max_nalloc) { # if DEBUG armci_die("kr_malloc: morecore: maximum allocation reached",armci_me); # endif return (Header *) NULL; /* Enforce upper limit on core usage */ } #if 1 /* 07/03 ctx->nalloc is now the minimum # units we ask from OS */ nu = DEFAULT_NALLOC_ALIGN*((nu-1)/DEFAULT_NALLOC_ALIGN+1); if(nu < ctx->nalloc) nu = ctx->nalloc; #else nu = ctx->nalloc*((nu-1)/ctx->nalloc+1); /* nu must by a multiplicity of nalloc */ #endif #if DEBUG (void) printf("%d: morecore: Getting %ld more units of length %d\n", armci_me, (long)nu, sizeof(Header)); (void) fflush(stdout); #endif if ((cp =(char *)(*ctx->alloc_fptr)((size_t)nu * sizeof(Header))) == (char *)NULL) return (Header *) NULL; if(last_size!=NULL && last_ptr!=NULL){ *last_size = ((size_t)nu * sizeof(Header)); *last_ptr = cp; /*printf("\n%d:%s:got %p %d",armci_me,__FUNCTION__,*last_ptr,*last_size);*/ } /* if(armci_nclus==armci_nproc && armci_nclus!=1) armci_register_shmem(cp,((size_t)nu * sizeof(Header)),NULL,0,cp); */ ctx->total += nu; /* Have just got nu more units */ ctx->nchunk++; /* One more chunk */ ctx->nfrags++; /* Currently one more frag */ ctx->inuse += nu; /* Inuse will be decremented by kr_free */ up = (Header *) cp; up->s.size = nu; up->s.valid1 = VALID1; up->s.valid2 = VALID2; /* Insert into linked list of blocks in use so that kr_free works ... for debug only */ up->s.ptr = ctx->usedp; ctx->usedp = up; kr_free((char *)(up+1), ctx); /* Try to join into the free list */ return ctx->freep; } void kr_malloc_init(size_t usize, /* unit size in bytes */ size_t nalloc, size_t max_nalloc, void * (*alloc_fptr)(), /* memory alloc routine */ int debug, context_t *ctx) { int scale; if(usize <= 0) usize = sizeof(Header); scale = usize>>LOG_ALIGN; if(scale<1)fprintf(stderr,"Error: kr_malloc_init !!!\n"); if(nalloc==0) nalloc = DEFAULT_NALLOC; if(max_nalloc==0) max_nalloc = DEFAULT_MAX_NALLOC; ctx->usize = sizeof(Header); ctx->nalloc = nalloc * scale; ctx->max_nalloc = max_nalloc * scale; ctx->alloc_fptr = alloc_fptr; ctx->freep = NULL; ctx->usedp = NULL; ctx->shmid = -1; ctx->shmoffset = 0; ctx->shmsize = 0; ctx->ctx_type = -1; do_verify = debug; } char *_kr_last_ptr; size_t _kr_last_size; char *kr_malloc(size_t nbytes, context_t *ctx, int record_allocation, void **new_base, size_t *new_size) { Header *p, *prevp; size_t nunits; char *return_ptr; #if !((defined(SUN) || defined(SOLARIS)) && !defined(SHMMAX_SEARCH_NO_FORK)) if(ctx->ctx_type == KR_CTX_SHMEM) return kr_malloc_shmem(nbytes,ctx); #endif /* If first time in need to initialize the free list */ if ((prevp = ctx->freep) == NULL) { if (sizeof(Header) != ALIGNMENT) kr_error("Alignment is not valid", (unsigned long) ALIGNMENT, ctx); ctx->total = 0; /* Initialize statistics */ ctx->nchunk = 0; ctx->inuse = 0; ctx->nfrags = 0; ctx->maxuse = 0; ctx->nmcalls= 0; ctx->nfcalls= 0; /* Initialize linked list */ ctx->base.s.ptr = ctx->freep = prevp = &(ctx->base); ctx->base.s.size = 0; ctx->base.s.valid1 = VALID1; ctx->base.s.valid2 = VALID2; } ctx->nmcalls++; if (do_verify) kr_malloc_verify(ctx); /* Rather than divide make the alignment a known power of 2 */ nunits = ((nbytes + sizeof(Header) - 1)>>LOG_ALIGN) + 1; for (p=prevp->s.ptr; ; prevp = p, p = p->s.ptr) { if (p->s.size >= nunits) { /* Big enuf */ if (p->s.size == nunits) /* exact fit */ prevp->s.ptr = p->s.ptr; else { /* allocate tail end */ p->s.size -= nunits; p += p->s.size; p->s.size = nunits; p->s.valid1 = VALID1; p->s.valid2 = VALID2; ctx->nfrags++; /* Have just increased the fragmentation */ } /* Insert into linked list of blocks in use ... for debug only */ p->s.ptr = ctx->usedp; ctx->usedp = p; ctx->inuse += nunits; /* Record usage */ if (ctx->inuse > ctx->maxuse) ctx->maxuse = ctx->inuse; ctx->freep = prevp; return_ptr = (char *) (p+1); break; } if (p == ctx->freep) { /* wrapped around the free list */ if ((p = morecore(nunits, ctx, &_kr_last_size,&_kr_last_ptr)) == (Header *) NULL) { return_ptr = (char *) NULL; break; } } } if(record_allocation){ *((char **)new_base)=_kr_last_ptr; *new_size=_kr_last_size; } return return_ptr; } void kr_free(char *ap, context_t *ctx) { Header *bp, *p, **up; #if !((defined(SUN) || defined(SOLARIS)) && !defined(SHMMAX_SEARCH_NO_FORK)) if(ctx->ctx_type == KR_CTX_SHMEM) { kr_free_shmem(ap,ctx); return; } #endif ctx->nfcalls++; if (do_verify) kr_malloc_verify(ctx); /* only do something if pointer is not NULL */ if ( ap ) { bp = (Header *) ap - 1; /* Point to block header */ if (bp->s.valid1 != VALID1 || bp->s.valid2 != VALID2) kr_error("kr_free: pointer not from kr_malloc", (unsigned long) ap, ctx); ctx->inuse -= bp->s.size; /* Decrement memory ctx->usage */ /* Extract the block from the used linked list ... for debug only */ for (up=&(ctx->usedp); ; up = &((*up)->s.ptr)) { if (!*up) kr_error("kr_free: block not found in used list\n", (unsigned long) ap, ctx); if (*up == bp) { *up = bp->s.ptr; break; } } /* Join the memory back into the free linked list */ for (p=ctx->freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; /* Freed block at start or end of arena */ if (bp + bp->s.size == p->s.ptr) {/* join to upper neighbour */ bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; ctx->nfrags--; /* Lost a fragment */ } else bp->s.ptr = p->s.ptr; if (p + p->s.size == bp) { /* Join to lower neighbour */ p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; ctx->nfrags--; /* Lost a fragment */ } else p->s.ptr = bp; ctx->freep = p; } /* end if on ap */ } /* Print to standard output the usage statistics. */ void kr_malloc_print_stats(context_t *ctx) { fflush(stderr); printf("\nkr_malloc statistics\n-------------------\n\n"); printf("Total memory from system ... %ld bytes\n", (long)(ctx->total*ctx->usize)); printf("Current memory usage ....... %ld bytes\n", (long)(ctx->inuse*ctx->usize)); printf("Maximum memory usage ....... %ld bytes\n", (long)(ctx->maxuse*ctx->usize)); printf("No. chunks from system ..... %ld\n", ctx->nchunk); printf("No. of fragments ........... %ld\n", ctx->nfrags); printf("No. of calls to kr_malloc ... %ld\n", ctx->nmcalls); printf("No. of calls to kr_free ..... %ld\n", ctx->nfcalls); printf("\n"); fflush(stdout); } /* Currently assumes that are working in a single region. */ void kr_malloc_verify(context_t *ctx) { Header *p; if(_armci_initialized && lock_mode==UNLOCKED) { LOCKIT(armci_master); lock_mode=LOCKED; } if ( ctx->freep ) { /* Check the used list */ for (p=ctx->usedp; p; p=p->s.ptr) { if (p->s.valid1 != VALID1 || p->s.valid2 != VALID2) kr_error("invalid header on usedlist", (unsigned long) p->s.valid1, ctx); if (p->s.size > ctx->total) kr_error("invalid size in header on usedlist", (unsigned long) p->s.size, ctx); } /* Check the free list */ p = ctx->base.s.ptr; while (p != &(ctx->base)) { if (p->s.valid1 != VALID1 || p->s.valid2 != VALID2) kr_error("invalid header on freelist", (unsigned long) p->s.valid1, ctx); if (p->s.size > ctx->total) kr_error("invalid size in header on freelist", (unsigned long) p->s.size, ctx); p = p->s.ptr; } } /* end if */ if(_armci_initialized && lock_mode==LOCKED) { UNLOCKIT(armci_master); lock_mode=UNLOCKED; } } /********************** BEGIN: kr_malloc for ctx_shmem *********************/ #if defined(SYSV) || defined(MMAP) #include "shmem.h" extern int armci_get_shmem_info(char *addrp, int* shmid, long *shmoffset, size_t *shmsize); extern Header *armci_get_shmem_ptr(int shmid, long shmoffset, size_t shmsize); /* returns, address of the shared memory region based on shmid, offset. * (i.e. return_addr = stating address of shmid + offset) */ #define SHM_PTR(hdr) armci_get_shmem_ptr((hdr)->s.shmid, (hdr)->s.shmoffset, (hdr)->s.shmsize) /* * kr_malloc_shmem: memory allocator for shmem context (i.e ctx_shmem) */ static char *kr_malloc_shmem(size_t nbytes, context_t *ctx) { Header *p, *prevp; size_t nunits, prev_shmsize=0; char *return_ptr; int prev_shmid=-1; long prev_shmoffset=0; LOCKIT(armci_master); /* Rather than divide make the alignment a known power of 2 */ nunits = ((nbytes + sizeof(Header) - 1)>>LOG_ALIGN) + 1; /* If first time in need to initialize the free list */ if ((prevp = ctx->freep) == NULL) { if (sizeof(Header) != ALIGNMENT) kr_error("kr_malloc_shmem: Alignment is not valid", (unsigned long) ALIGNMENT, ctx); ctx->total = 0; /* Initialize statistics */ ctx->nchunk = ctx->inuse = ctx->maxuse = 0; ctx->nfrags = ctx->nmcalls = ctx->nfcalls = 0; /* Initialize linked list */ ctx->base.s.size = 0; ctx->base.s.shmid = -1; ctx->base.s.shmoffset = 0; ctx->base.s.shmsize = 0; ctx->base.s.valid1 = VALID1; ctx->base.s.valid2 = VALID2; if ((p = morecore(nunits, ctx,NULL,NULL)) == (Header *) NULL) return NULL; ctx->base.s.ptr = prevp = ctx->freep; /* CHECK */ } prev_shmid = ctx->shmid; prev_shmoffset = ctx->shmoffset; prev_shmsize = ctx->shmsize; prevp = ctx->freep = armci_get_shmem_ptr(ctx->shmid, ctx->shmoffset, ctx->shmsize); ctx->nmcalls++; if (do_verify) kr_malloc_verify(ctx); for (p=SHM_PTR(prevp); ; prevp = p, p = SHM_PTR(p)) { if (p->s.size >= nunits) { /* Big enuf */ if (p->s.size == nunits) { /* exact fit */ prevp->s.ptr = p->s.ptr; prevp->s.shmid = p->s.shmid; prevp->s.shmoffset = p->s.shmoffset; prevp->s.shmsize = p->s.shmsize; } else { /* allocate tail end */ p->s.size -= nunits; p += p->s.size; p->s.size = nunits; p->s.valid1 = VALID1; p->s.valid2 = VALID2; ctx->nfrags++; /* Have just increased the fragmentation */ } #if USEDP /* Insert into linked list of blocks in use ... for debug only */ p->s.ptr = ctx->usedp; ctx->usedp = p; #endif ctx->inuse += nunits; /* Record usage */ if (ctx->inuse > ctx->maxuse) ctx->maxuse = ctx->inuse; ctx->freep = prevp; ctx->shmid = prev_shmid; ctx->shmoffset = prev_shmoffset; ctx->shmsize = prev_shmsize; return_ptr = (char *) (p+1); break; } prev_shmid = prevp->s.shmid; prev_shmoffset = prevp->s.shmoffset; prev_shmsize = prevp->s.shmsize; if (p == ctx->freep) { /* wrapped around the free list */ if ((p = morecore(nunits, ctx,NULL,NULL)) == (Header *) NULL) { return_ptr = (char *) NULL; break; } prev_shmid = ctx->shmid; prev_shmoffset = ctx->shmoffset; prev_shmsize = ctx->shmsize; } } UNLOCKIT(armci_master); return return_ptr; } static void kr_free_shmem(char *ap, context_t *ctx) { Header *bp, *p, **up, *nextp; int shmid=-1; long shmoffset=0; size_t shmsize=0; LOCKIT(armci_master); ctx->nfcalls++; if (do_verify) kr_malloc_verify(ctx); /* only do something if pointer is not NULL */ if ( ap ) { bp = (Header *) ap - 1; /* Point to block header */ if (bp->s.valid1 != VALID1 || bp->s.valid2 != VALID2) kr_error("kr_free_shmem: pointer not from kr_malloc", (unsigned long) ap, ctx); ctx->inuse -= bp->s.size; /* Decrement memory ctx->usage */ #if USEDP /* Extract the block from the used linked list ... for debug only */ for (up=&(ctx->usedp); ; up = &((*up)->s.ptr)) { if (!*up) kr_error("kr_free_shmem: block not found in used list\n", (unsigned long) ap, ctx); if (*up == bp) { *up = bp->s.ptr; break; } } #endif if(ctx->shmid==-1) { armci_get_shmem_info((char*)bp, &ctx->shmid, &ctx->shmoffset, &ctx->shmsize); ctx->base.s.shmid = ctx->shmid; ctx->base.s.shmsize = ctx->shmsize; ctx->base.s.shmoffset = ctx->shmoffset; p = ctx->freep = bp; p->s.ptr = bp; p->s.size-=SHMEM_CTX_BYTES; /*memory to store shmem info in context*/ p->s.shmid = ctx->shmid; p->s.shmsize = ctx->shmsize; p->s.shmoffset = ctx->shmoffset; UNLOCKIT(armci_master); return; } ctx->freep = armci_get_shmem_ptr(ctx->shmid, ctx->shmoffset, ctx->shmsize); shmid = ctx->shmid; shmoffset = ctx->shmoffset; shmsize = ctx->shmsize; /* Join the memory back into the free linked list */ p = ctx->freep; nextp = SHM_PTR(p); for ( ; !(bp > p && bp < nextp); p=nextp, nextp=SHM_PTR(p)) { if (p >= nextp && (bp > p || bp < nextp)) break; /* Freed block at start or end of arena */ nextp = SHM_PTR(p); shmid = p->s.shmid; shmoffset = p->s.shmoffset; shmsize = p->s.shmsize; } if (bp + bp->s.size == nextp) {/* join to upper neighbour */ bp->s.size += nextp->s.size; bp->s.ptr = nextp->s.ptr; ctx->nfrags--; /* Lost a fragment */ bp->s.shmid = nextp->s.shmid; bp->s.shmoffset = nextp->s.shmoffset; bp->s.shmsize = nextp->s.shmsize; } else { bp->s.ptr = nextp; bp->s.shmid = p->s.shmid; bp->s.shmoffset = p->s.shmoffset; bp->s.shmsize = p->s.shmsize; } if (p + p->s.size == bp) { /* Join to lower neighbour */ p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; ctx->nfrags--; /* Lost a fragment */ p->s.shmid = bp->s.shmid; p->s.shmoffset = bp->s.shmoffset; p->s.shmsize = bp->s.shmsize; } else { p->s.ptr = bp; armci_get_shmem_info((char*)bp, &p->s.shmid, &p->s.shmoffset, &p->s.shmsize); } ctx->freep = p; ctx->shmid = shmid; ctx->shmoffset = shmoffset; ctx->shmsize = shmsize; } /* end if on ap */ UNLOCKIT(armci_master); } #else /* #ifdef SYSV */ /* What are doing here */ static char *kr_malloc_shmem(size_t nbytes, context_t *ctx) { armci_die("kr_malloc_shmem(): Invalid Function Call", 0L); } static void kr_free_shmem(char *ap, context_t *ctx) { armci_die("kr_free_shmem(): Invalid Function Call", 0L); } #endif /* #ifdef SYSV */ /********************** END: kr_malloc for ctx_shmem *********************/ /** issues: 1. do usage statistics only if debug/DEBUG is enabled */ ga-5-3/armci/src-gemini/locks.h0000640005473000001440000001301412036056644015215 0ustar d3n000users#ifndef _ARMCI_LOCKS_H_ #define _ARMCI_LOCKS_H_ #if HAVE_SYS_TYPES_H # include #endif #define MAX_LOCKS 1024 #define NUM_LOCKS MAX_LOCKS #if !(defined(PMUTEX) || defined(PSPIN) || defined(CYGNUS) || defined(CRAY_XT)) # include "spinlock.h" #endif #if !(defined(PMUTEX) || defined(PSPIN) || defined(SPINLOCK)) # error cannot run #endif #if (defined(SPINLOCK) || defined(PMUTEX) || defined(PSPIN) || defined(HITACHI)) && !(defined(BGML) || defined(DCMF)) # include "shmem.h" typedef struct { long off; long idlist[SHMIDLEN]; } lockset_t; extern lockset_t lockid; #elif defined(BGML) || defined(DCMF) typedef int lockset_t; #endif #if defined(PMUTEX) # warning SPINLOCK: pthread_mutex_lock # include # include # define NAT_LOCK(x,p) pthread_mutex_lock(_armci_int_mutexes +x) # define NAT_UNLOCK(x,p) pthread_mutex_unlock(_armci_int_mutexes +x) # define LOCK_T pthread_mutex_t # define PAD_LOCK_T LOCK_T PAD_LOCK_T *_armci_int_mutexes; #elif defined(PSPIN) # warning SPINLOCK: pthread_spin_lock # include # include # define NAT_LOCK(x,p) pthread_spin_lock(_armci_int_mutexes +x) # define NAT_UNLOCK(x,p) pthread_spin_unlock(_armci_int_mutexes +x) # define LOCK_T pthread_spinlock_t # define PAD_LOCK_T LOCK_T PAD_LOCK_T *_armci_int_mutexes; #elif defined(SPINLOCK) && defined(SGIALTIX) # define NAT_LOCK(x,p) armci_acquire_spinlock((LOCK_T*)( ((PAD_LOCK_T*)(((void**)_armci_int_mutexes)[p]))+x )) # define NAT_UNLOCK(x,p) armci_release_spinlock((LOCK_T*)( ((PAD_LOCK_T*)(((void**)_armci_int_mutexes)[p]))+x )) PAD_LOCK_T *_armci_int_mutexes; #elif defined(SPINLOCK) # define NAT_LOCK(x,p) armci_acquire_spinlock((LOCK_T*)(_armci_int_mutexes+(x))) # define NAT_UNLOCK(x,p) armci_release_spinlock((LOCK_T*)(_armci_int_mutexes+(x))) PAD_LOCK_T *_armci_int_mutexes; #elif defined(HITACHI) extern void armcill_lock(int mutex, int proc); extern void armcill_unlock(int mutex, int proc); # define LOCK_T int # define PAD_LOCK_T LOCK_T # define NAT_LOCK(x,p) armcill_lock((x),(p)) # define NAT_UNLOCK(x,p) armcill_unlock((x),(p)) PAD_LOCK_T *_armci_int_mutexes; #elif defined(SGI) # define SGI_SPINS 100 # include typedef struct { int id; ulock_t * lock_array[NUM_LOCKS]; }lockset_t; extern lockset_t lockset; # define NAT_LOCK(x,p) (void) uswsetlock(lockset.lock_array[(x)],SGI_SPINS) # define NAT_UNLOCK(x,p) (void) usunsetlock(lockset.lock_array[(x)]) #elif defined(CONVEX) # include typedef struct{ unsigned state; unsigned pad[15]; } lock_t; typedef int lockset_t; extern lock_t *lock_array; extern void setlock(unsigned * volatile lp); extern void unsetlock(unsigned * volatile lp); # define NAT_LOCK(x,p) (void) setlock(&lock_array[x].state) # define NAT_UNLOCK(x,p) (void) unsetlock(&lock_array[(x)].state) #elif defined(WIN32) typedef int lockset_t; extern void setlock(int); extern void unsetlock(int); # define NAT_LOCK(x,p) setlock(x) # define NAT_UNLOCK(x,p) unsetlock(x) #elif defined(CRAY_YMP) && !defined(__crayx1) # include typedef int lockset_t; extern lock_t cri_l[NUM_LOCKS]; # pragma _CRI common cri_l # define NAT_LOCK(x,p) t_lock(cri_l+(x)) # define NAT_UNLOCK(x,p) t_unlock(cri_l+(x)) #elif defined(CRAY_T3E) || defined(__crayx1) || defined(CATAMOUNT) || defined(CRAY_SHMEM) || defined(PORTALS) # include # if defined(CRAY) || defined(CRAY_XT) # include # endif # if defined(DECOSF) || defined(LINUX64) || defined(__crayx1) || defined(CATAMOUNT) # define _INT_MIN_64 (LONG_MAX-1) # endif # undef NUM_LOCKS # define NUM_LOCKS 4 static long armci_lock_var[4]={0,0,0,0}; typedef int lockset_t; # define INVALID (long)(_INT_MIN_64 +1) # define NAT_LOCK(x,p) while( shmem_swap(armci_lock_var+(x),INVALID,(p)) ) # define NAT_UNLOCK(x,p) shmem_swap(armci_lock_var+(x), 0, (p)) #elif defined(SYSV) && defined(LAPI) && defined(AIX) int **_armci_int_mutexes; # define NAT_LOCK(x,p) armci_lapi_lock(_armci_int_mutexes[armci_master]+(x)) # define NAT_UNLOCK(x,p) armci_lapi_unlock(_armci_int_mutexes[armci_master]+(x)) typedef int lockset_t; #elif defined(CYGNUS) typedef int lockset_t; # define NAT_LOCK(x,p) armci_die("does not run in parallel",0) # define NAT_UNLOCK(x,p) armci_die("does not run in parallel",0) #elif defined(LAPI) && !defined (LINUX) # include typedef int lockset_t; extern pthread_mutex_t _armci_mutex_thread; # define NAT_LOCK(x,p) pthread_mutex_lock(&_armci_mutex_thread) # define NAT_UNLOCK(x,p) pthread_mutex_unlock(&_armci_mutex_thread) #elif defined(FUJITSU) typedef int lockset_t; # include "fujitsu-vpp.h" #elif defined(SYSV) || defined(MACX) # include "semaphores.h" # undef NUM_LOCKS # define NUM_LOCKS ((MAX_LOCKS< SEMMSL) ? MAX_LOCKS:SEMMSL) # define NAT_LOCK(x,p) P_semaphore(x) # define NAT_UNLOCK(x,p) V_semaphore(x) # ifndef _LOCKS_C_ # define CreateInitLocks Sem_CreateInitLocks # define InitLocks Sem_InitLocks # define DeleteLocks Sem_DeleteLocks # endif #else # error #endif extern void CreateInitLocks(int num, lockset_t *id); extern void InitLocks(int num , lockset_t id); extern void DeleteLocks(lockset_t id); #ifdef FUJITSU # define NATIVE_LOCK(x,p) if(armci_nproc>1) { NAT_LOCK(p); } # define NATIVE_UNLOCK(x,p) if(armci_nproc>1) { NAT_UNLOCK(p); } #else # define NATIVE_LOCK(x,p) if(armci_nproc>1) { NAT_LOCK(x,p); } # define NATIVE_UNLOCK(x,p) if(armci_nproc>1) { NAT_UNLOCK(x,p); } #endif #endif /* _ARMCI_LOCKS_H_ */ ga-5-3/armci/README0000640005473000001440000003457411510663460012566 0ustar d3n000usersAggregate Remote Memory Copy Interface (ARMCI) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DISCLAIMER ========== This material was prepared as an account of work sponsored by an agency of the United States Government. Neither the United States Government nor the United States Department of Energy, nor Battelle, nor any of their employees, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, SOFTWARE, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ACKNOWLEDGMENT ============== This software and its documentation were produced with United States Government support under Contract Number DE-AC06-76RLO-1830 awarded by the United States Department of Energy. The United States Government retains a paid-up non-exclusive, irrevocable worldwide license to reproduce, prepare derivative works, perform publicly and display publicly by or for the US Government, including the right to distribute to other US Government contractors. FOR THE IMPATIENT ================= The command:: ./configure && make && make install should compile the static ARMCI library (libarmci.a) to use sockets and install headers and libraries to /usr/local/include and /usr/local/lib, respectively. Please refer to the INSTALL file for generic build instructions. That is a good place to start if you are new to using "configure; make; make install" types of builds. Detailed instructions are covered later in this file. QUESTIONS/HELP/SUPPORT/BUG-REPORT ================================= email: hpctools@pnl.gov website: http://www.emsl.pnl.gov/docs/parsoft/armci ABOUT THIS SOFTWARE =================== This document lists the platforms supported by ARMCI and operating system configuration/settings for these platform. Additional limited documentation is available at ./doc/armci.pdf. Test programs test.c and perf.c are in ./testing directory. SPLASH LU benchmark it in ./examples directory. Index ----- 1. Supported Platforms 2. General Settings 3. Building ARMCI on SGI. 4. Building ARMCI on IBM. 5. Building ARMCI on CRAY. 6. Building ARMCI on other platforms 7. Platform specific issues/tuning Supported Platforms ------------------- - leadership class machines: Cray XE6, Cray XTs, IBM Blue Gene/L, IBM Blue Gene /P - shared-memory systems: SUN Solaris, SGI, SGI Altix, IBM, Linux, DEC, HP, Cray SV1, Cray X1, and Windows NT/95/2000 - distributed-memory systems: Cray T3E, IBM SP(TARGET=LAPI), FUJITSU VX/VPP. - clusters of workstations (InfiniBand, sockets) configure options ----------------- ARMCI should be run with MPI. PVM and TCGMSG message-passing libraries are no longer supported. ARMCI has been tested with MPI vendor implementations in addition to MPICH and WMPI(NT). ARMCI has been tested with TCGMSG by developers of the NWChem package on many platforms. GNU make is REQUIRED on Unix. For command line build on Windows, microsoft nmake instead of GNU make should be used. Historically, the TARGET environment variable needed to be set. This variable is now detected automatically by configure. It also detects whether the system is a 64-bit platform. Historically, the MSG_COMMS environment variable needed to be set. This variable is obsolete. Instead, options are passed to configure. Read on for details. There are many options available when configuring ARMCI. Although configure can be safely run within this distributions' root folder, we recommend performing an out-of-source (aka VPATH) build. This will cleanly separate the generated Makefiles and compiled object files and libraries from the source code. This will allow, for example, one build using sockets versus another build using OpenIB for the communication layer to use the same source tree e.g.:: mkdir bld_mpi_sockets && cd bld_mpi_sockets && ../configure mkdir bld_mpi_openib && cd bld_mpi_openib && ../configure --with-openib Regardless of your choice to perform a VPATH build, the following should hopefully elucidate the myriad options to configure. Only the options requiring additional details are documented here. ./configure --help will certainly list more options in addition to limited documentation. For most of the external software packages an optional argument is allowed (represented as ARG below.) **ARG can be omitted** or can be one or more whitespace-separated directories, linker or preprocessor directives. For example:: --with-mpi="/path/to/mpi -lmylib -I/mydir" --with-mpi=/path/to/mpi/base --with-mpi=-lmpich The messaging libraries supported include MPI. If you omit their respective --with-* option, MPI is the default. --with-mpi=ARG Select MPI as the messaging library (default). If you omit ARG, we attempt to locate the MPI compiler wrappers. If you supply anything for ARG, we will parse ARG as indicated above. The ARMCI_NETWORK environment variable is now also obsolete. Instead use one of the following configure options. Our ability to automatically locate required headers libraries is currently inadequate. Therefore, you will likely need to specify the optional ARG pointing to the necessary directories and/or libraries. sockets is the default ARMCI network if nothing else is specified. --with-bgml=ARG select armci network as IBM BG/L --with-cray-shmem=ARG select armci network as Cray XT shmem --with-dcmf=ARG select armci network as IBM BG/P Deep Computing Message Framework --with-lapi=ARG select armci network as IBM LAPI --with-mpi-spawn=ARG select armci network as MPI-2 dynamic process mgmt --with-openib=ARG select armci network as InfiniBand OpenIB --with-portals=ARG select armci network as Cray XT portals --with-sockets=ARG select armci network as Ethernet TCP/IP (default) --enable-autodetect attempt to locate ARMCI network besides sockets SOCKETS is the assumed default for clusters connected with Ethernet. This protocol might also work on other networks however, the performance might be sub-optimal and on Myrinet it could even hang (GM does not work with fork and the standard version of ARMCI uses fork). Cross-Compilation Issues ------------------------ Certain platforms cross-compile from a login node for a compute node, or one might choose to cross-compile for other reasons. Cross-compiling requires the use of the --host option to configure which indicates to configure that certain run-time tests should not be executed. See INSTALL for details on use of the --host option. Two of our target platforms are known to require cross-compilation, Cray XT and IBM Blue Gene. Cray XT +++++++ It has been noted that configure still succeeds without the use of the --host flag. If you experience problems without --host, we recommend:: configure --host=x86_64-unknown-linux-gnu And if that doesn't work (cross-compilation is not detected) you must then *force* cross-compilation using both --host and --build together:: configure --host=x86_64-unknown-linux-gnu --build=x86_64-unknown-linux-gnu BlueGene/P ++++++++++ Currently the only way to detect the BGP platform and compile correctly is to use:: configure --host=powerpc-bgp-linux The rest of the configure options apply as usual e.g. --with-dcmf in this case. Compiler Selection ------------------ Unless otherwise noted you can try to overwrite the default compiler names detected by configure by defining F77, CC, and CXX for Fortran (77), C, and C++ compilers, respectively. Or when using the MPI compilers MPIF77, MPICC, and MPICXX for MPI Fortran (77), C, and C++ compilers, respectively:: configure F77=f90 CC=gcc configure MPIF77=mpif90 MPICC=mpicc Although you can change the compiler at make-time it will likely fail. Many platform-specific compiler flags are detected at configure-time based on the compiler selection. If changing compilers, we recommend rerunning configure as above. After Configuration ------------------- By this point we assume you have successfully run configure either from the base distribution directory or from a separate build directory (aka VPATH build.) You are now ready to run 'make'. You can optionally run parallel make using the "-j" option which significantly speeds up the build. If using the MPI compiler wrappers, occasionally using "-j" will cause build failures because the MPI compiler wrapper creates a temporary symlink to the mpif.h header. In that case, you won't be able to use the "-j" option. Further, the influential environment variables used at configure-time can be overridden at make-time in case problems are encountered. For example:: ./configure CFLAGS=-Wimplicit ... make CFLAGS="-Wimplicit -g -O0" One particularly influential make variable is "V" which controls the verbosity of the make output. This variable corresponds to the --dis/enable-silent-riles configure-time option, but I often prefer the make-time variable:: make V=0 (configure --enable-silent-rules) make V=1 (configure --disable-silent-rules) Test Programs ------------- Running "make checkprogs" will build most test and example programs. Note that not all tests are built -- some tests depend on certain features being detected or enabled during configure. These programs are not intented to be examples of good ARMCI coding practices because they often include private headers. However, they help us debug or time our ARMCI library. Test Suite ++++++++++ Running "make check" will build most test and example programs (See "make checkprogs" notes above) in addition to running the test suite. The test suite runs both the serial and parallel tests. The test suite must know how to launch the parallel tests via the MPIEXEC variable. Please read your MPI flavor's documentation on how to launch. For example, the following is the command to launch the test suite when compiled with OpenMPI:: make check MPIEXEC="mpiexec -np 4" All tests have a per-test log file containing the output of the test. So if the test is testing/test.x, the log file would be testing/test.log. The output of failed tests is collected in the top-level log summary test-suite.log. ANCIENT WISDOM ============== Building on SGI --------------- For running on SGI machines running the irix os, three target settings are available: - TARGET=SGI generates a MIPS-4 64-bit code with 32-bit address space when compiling on any R8000 based machines and a 32 bit MPIS-2 code on any non-R8000 machines. - Use TARGET=SGI64 For generating a 64 bit code with 64-bit address space. - TARGET=SGI_N32 generates a 32bit code with a 32bit address space. By default, SGI_N32 generates a MIPS3 code and SGI64 generates a MIPS4 code. There is a possibility of conflict between the SGI's implementation of MPI (but not others, MPICH for example) and ARMCI in their use of the SGI specific inter-processor communication facility called arena. Building on IBM --------------- Running on IBM without LAPI +++++++++++++++++++++++++++ On IBM's running AIX, target can be set to IBM or IBM64 to run 32/64 bit versions of the code. Running on the IBM-SP +++++++++++++++++++++ TARGET on IBM-SP can be set to LAPI (LAPI64 for 64 bit object). POE environment variable settings for the parallel environment PSSP 3.1: - ARMCI applications like any other LAPI-based codes must define MP_MSG_API=lapi or MP_MSG_API=mpi,lapi (when using ARMCI and MPI) - The LAPI-based implementation of ARMCI cannot be used on the very old SP-2 systems because LAPI did not support the TB2 switch used in those models. If in doubt which switch you got use odmget command: odmget -q name=css0 CuDv - For AIX versions 4.3.1 and later, environment variable AIXTHREAD_SCOPE=S must be set to assure correct operation of LAPI (IBM should do it in PSSP by default). - Under AIX 4.3.3 and later an additional environment variable is required(RT_GRQ=ON) to restore the original thread scheduling that LAPI relies on. Building on CRAY ---------------- - TARGET environment variable is also used by cc on CRAY. It has to be set to CRAY-SV1 on SV1, CRAY-YMP on YMP, CRAY-T3E on T3E. ARMCI on CRAY'S hence uses the same values to this environment variable as cc requires. - On CRAY-T3E, ARMCI can be run with either of the CRAY Message Passing Libraries(PVM and MPI). For more information on running with PVM look at docs/README.PVM. If running with PVM, MSG_COMMS has to be set to PVM. Building on other platforms --------------------------- On other platforms, only setting required is the TARGET environment environment variable. Optionally, MSG_COMMS and related environment can be set as described in the General Settings section. Platform specific issues/tuning ------------------------------- The Linux kernel has traditionally fairly small limit for the shared memory segment size (SHMMAX). In kernels 2.2.x it is 32MB on Intel, 16MB on Sun Ultra, and 4MB on Alpha processors. There are two ways to increase this limit: - rebuild the kernel after changing SHMMAX in /usr/src/linux/include/asm-i386/shmparam.h, for example, setting SHMMAX as 0x8000000 (128MB) - A system admin can increase the limit without rebuilding the kernel, for example:: echo "134217728" >/proc/sys/kernel/shmmax SUN +++ Solaris by default provides only 1MB limit for the largest shared memory segment. You need to increase this value to do any useful work with ARMCI. For example to make SHMMAX= 2GB, add either of the lines to /etc/system:: set shmsys:shminfo_shmmax=0x80000000 /* hexidecimal */ set shmsys:shminfo_shmmax=2147483648 /* decimal */ After rebooting, you should be able to take advantage of the increased shared memory limits. Compaq/DEC ++++++++++ Tru64 is another example of an OS with a pitifully small size of the shared memory region limit. Here are instruction on how to modify shared memory max segment size to 256MB on the Tru64 UNIX Version 4.0F: 1. create a file called /etc/sysconfig.shmmax:: cat > /etc/sysconfig.shmmax << EOF ipc: shm-max = 268435456 EOF You can check if the file created is OK by typing:: /sbin/sysconfigdb -l -t /etc/sysconfig.shmmax 2. Modify kernel values:: sysconfigdb -a -f /etc/sysconfig.shmmax ipc 3. Reboot 4. To check new values:: /sbin/sysconfig -q ipc|egrep shm-max HP-UX +++++ In most HP-UX/11 installations, the default limit for the largest shared memory segment is 64MB. A system administrator should be able to. ga-5-3/armci/testing/0000750005473000001440000000000012275260545013353 5ustar d3n000usersga-5-3/armci/testing/timer.h0000640005473000001440000000401611672215522014641 0ustar d3n000users#ifndef ARMCI_TESTING_TIMER_H_ #define ARMCI_TESTING_TIMER_H_ #if (defined(__i386__) || defined(__x86_64__) || defined(__powerpc__)) && !defined(_CRAYC) # define HAVE_RDTSC 1 # if defined(__i386__) static __inline__ unsigned long long rdtsc(void) { unsigned long long int x; __asm__ volatile(".byte 0x0f, 0x31" : "=A"(x)); return x; } # elif defined(__x86_64__) static __inline__ unsigned long long rdtsc(void) { unsigned hi, lo; __asm__ __volatile__("rdtsc" : "=a"(lo), "=d"(hi)); return ((unsigned long long)lo) | (((unsigned long long)hi) << 32); } # elif defined(__powerpc__) static __inline__ unsigned long long rdtsc(void) { unsigned long long int result = 0; unsigned long int upper, lower, tmp; __asm__ volatile( "0: \n" "\tmftbu %0 \n" "\tmftb %1 \n" "\tmftbu %2 \n" "\tcmpw %2,%0 \n" "\tbne 0b \n" : "=r"(upper), "=r"(lower), "=r"(tmp) ); result = upper; result = result << 32; result = result | lower; return(result); } # endif #elif HAVE_SYS_TIME_H # include #elif HAVE_WINDOWS_H # include static LARGE_INTEGER frequency; #endif static unsigned long long timer_start() { #if HAVE_RDTSC return rdtsc(); #elif HAVE_SYS_TIME_H struct timeval timer; (void)gettimeofday(&timer, NULL); return timer.tv_sec * 1000000 + timer.tv_usec; #elif HAVE_WINDOWS_H LARGE_INTEGER timer; QueryPerformanceCounter(&timer); return timer.QuadPart * 1000 / frequency.QuadPart; #else return 0; #endif } static unsigned long long timer_end(unsigned long long begin) { return timer_start() - begin; } static void timer_init() { #if HAVE_RDTSC #elif HAVE_SYS_TIME_H #elif HAVE_WINDOWS_H QueryPerformanceFrequency(&frequency); #else #endif } static const char *timer_name() { #if HAVE_RDTSC return "rdtsc"; #elif HAVE_SYS_TIME_H return "gettimeofday"; #elif HAVE_WINDOWS_H return "windows QueryPerformanceCounter"; #else return "no timers"; #endif } #endif /* ARMCI_TESTING_TIMER_H_ */ ga-5-3/armci/testing/perf_aggr.c0000640005473000001440000002337512115436166015463 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: perf_aggr.c,v 1.7 2004-07-21 00:23:06 manoj Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include # define sleep(x) Sleep(1000*(x)) #endif #include "armci.h" #include "message.h" #define DIM1 5 #define DIM2 3 #ifdef __sun /* Solaris has shared memory shortages in the default system configuration */ # define DIM3 6 # define DIM4 5 # define DIM5 4 #elif defined(__alpha__) # define DIM3 8 # define DIM4 5 # define DIM5 6 #else # define DIM3 8 # define DIM4 9 # define DIM5 7 #endif #define DIM6 3 #define DIM7 2 #define OFF 1 #define EDIM1 (DIM1+OFF) #define EDIM2 (DIM2+OFF) #define EDIM3 (DIM3+OFF) #define EDIM4 (DIM4+OFF) #define EDIM5 (DIM5+OFF) #define EDIM6 (DIM6+OFF) #define EDIM7 (DIM7+OFF) #define DIMS 4 #define MAXDIMS 7 #define MAX_DIM_VAL 50 #define LOOP 200 #define BASE 100. #define MAXPROC 128 #define TIMES 100 #ifdef CRAY # define ELEMS 800 #else # define ELEMS 200 #endif /***************************** macros ************************/ #define COPY(src, dst, bytes) memcpy((dst),(src),(bytes)) #define ARMCI_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define ARMCI_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define ARMCI_ABS(a) (((a) <0) ? -(a) : (a)) /***************************** global data *******************/ int me, nproc; void *work[MAXPROC]; /* work array for propagating addresses */ #ifdef PVM void pvm_init(int argc, char *argv[]) { int mytid, mygid, ctid[MAXPROC]; int np, i; mytid = pvm_mytid(); if ((argc != 2) && (argc != 1)) { goto usage; } if (argc == 1) { np = 1; } if (argc == 2) if ((np = atoi(argv[1])) < 1) { goto usage; } if (np > MAXPROC) { goto usage; } mygid = pvm_joingroup(MPGROUP); if (np > 1) if (mygid == 0) { i = pvm_spawn(argv[0], argv + 1, 0, "", np - 1, ctid); } while (pvm_gsize(MPGROUP) < np) { sleep(1); } /* sync */ pvm_barrier(MPGROUP, np); printf("PVM initialization done!\n"); return; usage: fprintf(stderr, "usage: %s \n", argv[0]); pvm_exit(); exit(-1); } #endif /*void create_array(void *a[], int elem_size, int ndim, int dims[])*/ void create_array(double *a[], int ndim, int dims[]) { int bytes = sizeof(double), i, rc; assert(ndim <= MAXDIMS); for (i = 0; i < ndim; i++) { bytes *= dims[i]; } rc = ARMCI_Malloc((void **)a, bytes); assert(rc == 0); assert(a[me]); } /*void destroy_array(void *ptr[])*/ void destroy_array(double *ptr[]) { ARMCI_Barrier(); assert(!ARMCI_Free(ptr[me])); } #define MAXELEMS 1000 #define MAX_REQUESTS MAXELEMS void test_aggregate(int dryrun) { int i, j, rc, bytes, elems[2] = {MAXPROC, MAXELEMS}; double *ddst_put[MAXPROC]; double *ddst_get[MAXPROC]; double *dsrc[MAXPROC]; armci_hdl_t aggr_hdl_put[MAXPROC]; armci_hdl_t aggr_hdl_get[MAXPROC]; armci_hdl_t hdl_put[MAXELEMS]; armci_hdl_t hdl_get[MAXELEMS]; armci_giov_t darr; void *src_ptr[MAX_REQUESTS], *dst_ptr[MAX_REQUESTS]; int start = 0, end = 0; double start_time; create_array(ddst_put, 2, elems); create_array(ddst_get, 2, elems); create_array(dsrc, 1, &elems[1]); for (i = 0; i < elems[1]; i++) { dsrc[me][i] = i * 1.001 * (me + 1); } for (i = 0; i < elems[0]*elems[1]; i++) { ddst_put[me][i] = 0.0; ddst_get[me][i] = 0.0; } ARMCI_Barrier(); /* only proc 0 does the work */ if (me == 0) { if (!dryrun) { printf("Transferring %d doubles (Not an array of %d doubles)\n", MAXELEMS, MAXELEMS); } /* initializing non-blocking handles */ for (i = 0; i < elems[1]; i++) { ARMCI_INIT_HANDLE(&hdl_put[i]); } for (i = 0; i < elems[1]; i++) { ARMCI_INIT_HANDLE(&hdl_get[i]); } /* aggregate handles */ for (i = 0; i < nproc; i++) { ARMCI_INIT_HANDLE(&aggr_hdl_put[i]); } for (i = 0; i < nproc; i++) { ARMCI_INIT_HANDLE(&aggr_hdl_get[i]); } for (i = 0; i < nproc; i++) { ARMCI_SET_AGGREGATE_HANDLE(&aggr_hdl_put[i]); } for (i = 0; i < nproc; i++) { ARMCI_SET_AGGREGATE_HANDLE(&aggr_hdl_get[i]); } bytes = sizeof(double); /* **************** PUT **************** */ /* register put */ start_time = armci_timer(); start = 0; end = elems[1]; for (i = 1; i < nproc; i++) { for (j = start; j < end; j++) { ARMCI_NbPutValueDouble(dsrc[me][j], &ddst_put[i][me*elems[1] + j], i, &hdl_put[j]); } for (j = start; j < end; j++) { ARMCI_Wait(&hdl_put[j]); } } if (!dryrun) { printf("%d: Value Put time = %.2es\n", me, armci_timer() - start_time); } /* vector put */ start_time = armci_timer(); for (i = 1; i < nproc; i++) { for (j = start; j < end; j++) { src_ptr[j] = (void *)&dsrc[me][j]; dst_ptr[j] = (void *)&ddst_put[i][me*elems[1] + j]; } darr.src_ptr_array = src_ptr; darr.dst_ptr_array = dst_ptr; darr.bytes = sizeof(double); darr.ptr_array_len = elems[1]; if ((rc = ARMCI_NbPutV(&darr, 1, i, &hdl_put[i]))) { ARMCI_Error("armci_nbputv failed\n", rc); } } for (i = 1; i < nproc; i++) { ARMCI_Wait(&hdl_put[i]); } if (!dryrun) { printf("%d: Vector Put time = %.2es\n", me, armci_timer() - start_time); } /* regular put */ start_time = armci_timer(); for (i = 1; i < nproc; i++) { for (j = start; j < end; j++) { if ((rc = ARMCI_NbPut(&dsrc[me][j], &ddst_put[i][me*elems[1] + j], bytes, i, &hdl_put[j]))) { ARMCI_Error("armci_nbput failed\n", rc); } } for (j = start; j < end; j++) { ARMCI_Wait(&hdl_put[j]); } } if (!dryrun) { printf("%d: Regular Put time = %.2es\n", me, armci_timer() - start_time); } /* aggregate put */ start_time = armci_timer(); for (i = 1; i < nproc; i++) { for (j = start; j < end; j++) { if ((rc = ARMCI_NbPut(&dsrc[me][j], &ddst_put[i][me*elems[1] + j], bytes, i, &aggr_hdl_put[i]))) { ARMCI_Error("armci_nbput failed\n", rc); } } } for (i = 1; i < nproc; i++) { ARMCI_Wait(&aggr_hdl_put[i]); } if (!dryrun) { printf("%d: Aggregate Put time = %.2es\n\n", me, armci_timer() - start_time); } /* **************** GET **************** */ /* vector get */ start_time = armci_timer(); for (i = 1; i < nproc; i++) { for (j = start; j < end; j++) { src_ptr[j] = (void *)&dsrc[i][j]; dst_ptr[j] = (void *)&ddst_get[me][i*elems[1] + j]; } darr.src_ptr_array = src_ptr; darr.dst_ptr_array = dst_ptr; darr.bytes = sizeof(double); darr.ptr_array_len = elems[1]; if ((rc = ARMCI_NbGetV(&darr, 1, i, &hdl_get[i]))) { ARMCI_Error("armci_nbgetv failed\n", rc); } ARMCI_Wait(&hdl_get[i]); } if (!dryrun) { printf("%d: Vector Get time = %.2es\n", me, armci_timer() - start_time); } /* regular get */ start_time = armci_timer(); for (i = 1; i < nproc; i++) { for (j = start; j < end; j++) { if ((rc = ARMCI_NbGet(&dsrc[i][j], &ddst_get[me][i*elems[1] + j], bytes, i, &hdl_get[j]))) { ARMCI_Error("armci_nbget failed\n", rc); } } for (j = start; j < end; j++) { ARMCI_Wait(&hdl_get[j]); } } if (!dryrun) { printf("%d: Regular Get time = %.2es\n", me, armci_timer() - start_time); } /* aggregate get */ start_time = armci_timer(); for (i = 1; i < nproc; i++) { for (j = start; j < end; j++) { ARMCI_NbGet(&dsrc[i][j], &ddst_get[me][i*elems[1] + j], bytes, i, &aggr_hdl_get[i]); } } for (i = 1; i < nproc; i++) { ARMCI_Wait(&aggr_hdl_get[i]); } if (!dryrun) { printf("%d: Aggregate Get time = %.2es\n", me, armci_timer() - start_time); } } ARMCI_Barrier(); ARMCI_AllFence(); ARMCI_Barrier(); /* Verify */ if (!(me == 0)) for (j = 0; j < elems[1]; j++) { if (ARMCI_ABS(ddst_put[me][j] - j * 1.001) > 0.1) { ARMCI_Error("aggregate put failed...1", 0); } } ARMCI_Barrier(); if (!dryrun)if (me == 0) { printf("\n aggregate put ..O.K.\n"); } fflush(stdout); if (me == 0) { for (i = 1; i < nproc; i++) { for (j = 0; j < elems[1]; j++) { if (ARMCI_ABS(ddst_get[me][i*elems[1] + j] - j * 1.001 *(i + 1)) > 0.1) { ARMCI_Error("aggregate get failed...1", 0); } } } } ARMCI_Barrier(); if (!dryrun)if (me == 0) { printf(" aggregate get ..O.K.\n"); } fflush(stdout); ARMCI_AllFence(); ARMCI_Barrier(); if (!dryrun)if (me == 0) { printf("O.K.\n"); fflush(stdout); } destroy_array(ddst_put); destroy_array(ddst_get); destroy_array(dsrc); } int main(int argc, char *argv[]) { armci_msg_init(&argc, &argv); ARMCI_Init_args(&argc, &argv); nproc = armci_msg_nproc(); me = armci_msg_me(); /* printf("nproc = %d, me = %d\n", nproc, me);*/ if (nproc > MAXPROC && me == 0) { ARMCI_Error("Test works for up to %d processors\n", MAXPROC); } if (me == 0) { printf("ARMCI test program (%d processes)\n", nproc); fflush(stdout); sleep(1); } if (me == 0) { printf("\nAggregate put/get requests\n\n"); fflush(stdout); } test_aggregate(1); /* cold start */ test_aggregate(0); /* warm start */ ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("\nSuccess!!\n"); fflush(stdout); } sleep(2); ARMCI_Barrier(); ARMCI_Finalize(); armci_msg_finalize(); return(0); } ga-5-3/armci/testing/shmclean.c0000640005473000001440000000223611643376201015310 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* The program was written to address missing "ipcrm" command on Mac X * It probes a range of System V shared memory id from 0 to MAXID * and if exist, it attempts to delete them. */ #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_IPC_H # include #endif #if HAVE_SYS_SHM_H # include #endif #if HAVE_SYS_PARAM_H # include #endif #if HAVE_ERRNO_H # include #endif #if HAVE_STDIO_H # include #endif #ifdef SUN char *shmat(); #endif #define MAXID 1000000 int main(int argc, char **argv) { int i; for (i = 0; i < MAXID; i++) { #if SIZEOF_VOIDP == SIZEOF_INT int rc = (int) shmat(i, (char *) NULL, 0); #elif SIZEOF_VOIDP == SIZEOF_LONG long rc = (long) shmat(i, (char *) NULL, 0); #elif SIZEOF_VOIDP == SIZEOF_LONGLONG long long rc = (long long) shmat(i, (char *) NULL, 0); #endif if (rc < 0) { continue; } printf("found %d\n", i); shmdt((void *)rc); /* delete segment id */ if (shmctl(i, IPC_RMID, (struct shmid_ds *)NULL)) { printf("failed to remove shm id=%d\n", i); } } return 0; } ga-5-3/armci/testing/fttest.c0000640005473000001440000000533212115436166015031 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_ASSERT_H # include #endif #include "armci.h" #include "message.h" #define MAXPROCS 128 #define SIZE_ 1024 #define FAILURE_SIZE_ 512 int me, nproc; double *ptr_arr[MAXPROCS]; long size; void do_work(int sz) { int i; static int d = 1; for (i = 0; i < sz; i++) { *((double *)(ptr_arr[me]) + i) = i + 1.12 * d++; } } static double time_array[100], time_array1[100], t1; int main(int argc, char *argv[]) { int rc, i, j = 0, rid, ret; armci_ckpt_ds_t ckptds; ARMCI_Group grp; armci_msg_init(&argc, &argv); ARMCI_Init_args(&argc, &argv); nproc = armci_msg_nproc(); me = armci_msg_me(); if (me == 0) { if (nproc > MAXPROCS) { ARMCI_Error("nproc > MAXPROCS", nproc); } else { printf("ARMCI test program (%d processes)\n", nproc); fflush(stdout); sleep(1); } } armci_init_checkpoint2(); ARMCI_Group_get_world(&grp); size = SIZE_; rc = ARMCI_Malloc((void **)ptr_arr, size * 8); printf("ARMCI test program (%d processes)\n", nproc); fflush(stdout); for (size = 1; size <= SIZE_; size *= 2) { t1 = MPI_Wtime(); for (i = 0; i < 5; i++) { for (rc = 0; rc < 15; rc++) { do_work(size); } } time_array[j++] = MPI_Wtime() - t1; ARMCI_Barrier(); printf("%d:done for size %ld\n", me, size); fflush(stdout); } (void)ARMCI_Ckpt_create_ds(&ckptds, 1); ckptds.ptr_arr[0] = ptr_arr[me]; ckptds.sz[0] = SIZE_ * 8; rid = ARMCI_Ckpt_init(NULL, &grp, 1, 0, &ckptds); printf("%d: After ARMCI_Ckpt_init(): \n", me); j = 0; for (size = 128; size <= SIZE_; size *= 2) { int rc; int simulate_restart = 1; t1 = MPI_Wtime(); ret = ARMCI_Ckpt(rid); if (ret == ARMCI_CKPT) { printf("%d: Performed CHECKPOINT @ size=%ld\n", me, size); } else if (ret == ARMCI_RESTART) { simulate_restart = 0; printf("%d: Performed RESTART @ size=%ld\n", me, size); } for (i = 0; i < 5; i++) { for (rc = 0; rc < 15; rc++) if (i == 3 && rc == 10) { } do_work(size); } time_array1[j++] = MPI_Wtime() - t1; sleep(1); if (simulate_restart && size == FAILURE_SIZE_) { printf("%d: Simulating FAILURE @ size = %d\n", me, size); ARMCI_Restart_simulate(rid, 1); } printf("%d: DONE for size=%ld regular=%f withckpt=%f\n\n", me, size, time_array[j-1], time_array1[j-1]); fflush(stdout); } ARMCI_Ckpt_finalize(rid); printf("Before Finalize()\n"); ARMCI_Barrier(); ARMCI_Finalize(); armci_msg_finalize(); return(0); } ga-5-3/armci/testing/gpctest.c0000640005473000001440000000722412115436166015173 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: gpctest.c,v 1.2.4.1 2007-06-13 00:44:01 vinod Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_UNISTD_H # include #endif /*#define RMW*/ #include "armci.h" #include "gpc.h" #include "message.h" #define MAXPROC 128 # define ELEMS 200 #define LOOP 100 /***************************** global data *******************/ int me, nproc; void *work[MAXPROC]; /* work array for propagating addresses */ int hswap = 0; void gpc_swap(int *loc, int *rem, int p) { gpc_hdl_t nbh; char rheader[100]; int hlen, rhlen, rhsize; int rdsize; void *header = rem; extern int hswap; hlen = sizeof(header); bzero(rheader, 100); rhlen = hlen; ARMCI_Gpc_init_handle(&nbh); if (ARMCI_Gpc_exec(hswap, p, &header, hlen, loc, sizeof(int), rheader, rhlen, loc, sizeof(int), NULL/*&nbh*/)) { fprintf(stderr, "ARMCI_Gpc_exec failed\n"); } /*ARMCI_Gpc_wait(&nbh);*/ } int gpc_swap_handler(int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, int *rhsize, void *rdata, int rdlen, int *rdsize, int rtype) { int *rem; int tmp_swap; #ifdef DEBUG_ printf("executing swap handler from=%d to=%d\n"); fflush(stdout); #endif rem = (int *)ARMCI_Gpc_translate(*(void **)hdr, to, from); ARMCI_Gpc_lock(to); tmp_swap = *rem; *rem = *(int *)data; ARMCI_Gpc_unlock(to); *(int *)rdata = tmp_swap; *(int *)rhdr = tmp_swap; /* 2nd copy just for debug purposes */ *rhsize = sizeof(void *); *rdsize = sizeof(int); return GPC_DONE; } #define LOCKED -1 void test_swap() { int rc, bytes, i, val, whatever = -8999; int *arr[MAXPROC]; /* shared variable is located on processor 0 */ bytes = me == 0 ? sizeof(int) : 0; rc = ARMCI_Malloc((void **)arr, bytes); if (rc != 0) { ARMCI_Error("test_swap: ARMCI_Malloc failed", 0); } ARMCI_Barrier(); hswap = ARMCI_Gpc_register(gpc_swap_handler); if (me == 0) { *arr[0] = 0; /* initialization */ } ARMCI_Barrier(); for (i = 0; i < LOOP; i++) { val = LOCKED; do { #ifdef RMW rc = ARMCI_Rmw(ARMCI_SWAP, &val, arr[0], whatever, 0); if (rc != 0) { ARMCI_Error("test_swap: ARMCI_Rmw failed", 0); } #else gpc_swap(&val, arr[0], 0); #endif } while (val == LOCKED); val++; #ifdef RMW rc = ARMCI_Rmw(ARMCI_SWAP, &val, arr[0], whatever, 0); if (rc != 0) { ARMCI_Error("test_swap: ARMCI_Malloc failed", 0); } #else gpc_swap(&val, arr[0], 0); #endif } ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("The final value is %d, should be %d.\n\n", *arr[0], LOOP * nproc); fflush(stdout); if (*arr[0] != LOOP * nproc) { ARMCI_Error("failed ...", *arr[0]); } } ARMCI_Free(arr[me]); } int main(int argc, char *argv[]) { int ndim; armci_msg_init(&argc, &argv); ARMCI_Init_args(&argc, &argv); nproc = armci_msg_nproc(); me = armci_msg_me(); if (nproc > MAXPROC && me == 0) { ARMCI_Error("Test works for up to %d processors\n", MAXPROC); } if (me == 0) { printf("ARMCI Global Procedure Call test program (%d processes)\n", nproc); fflush(stdout); sleep(1); } if (me == 0) { #ifdef RMW printf("\nTesting atomic swap using ARMCI_Rmw\n"); #else printf("\nTesting atomic swap using GPC\n"); #endif fflush(stdout); } ARMCI_Barrier(); test_swap(); ARMCI_AllFence(); ARMCI_Barrier(); ARMCI_Finalize(); armci_msg_finalize(); return(0); } ga-5-3/armci/testing/test_groups.c0000640005473000001440000001715712115436166016106 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: test_groups.c,v 1.3 2004-11-22 20:29:53 manoj Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include # define sleep(x) Sleep(1000*(x)) #endif #include "armci.h" #include "message.h" /*#include "armcip.h"*/ #define MAXDIMS 7 #define MAXPROC 128 #define MINPROC 4 /***************************** macros ************************/ #define COPY(src, dst, bytes) memcpy((dst),(src),(bytes)) #define ABS(a) (((a) >= 0) ? (a) : (-(a))) #define MIN(a,b) (((a)<(b)) ? (a) : (b)) /***************************** global data *******************/ int me, nproc; void *work[MAXPROC]; /* work array for propagating addresses */ #ifdef PVM void pvm_init(int argc, char *argv[]) { int mytid, mygid, ctid[MAXPROC]; int np, i; mytid = pvm_mytid(); if ((argc != 2) && (argc != 1)) { goto usage; } if (argc == 1) { np = 1; } if (argc == 2) if ((np = atoi(argv[1])) < 1) { goto usage; } if (np > MAXPROC) { goto usage; } mygid = pvm_joingroup(MPGROUP); if (np > 1) if (mygid == 0) { i = pvm_spawn(argv[0], argv + 1, 0, "", np - 1, ctid); } while (pvm_gsize(MPGROUP) < np) { sleep(1); } /* sync */ pvm_barrier(MPGROUP, np); printf("PVM initialization done!\n"); return; usage: fprintf(stderr, "usage: %s \n", argv[0]); pvm_exit(); exit(-1); } #endif void create_array(void *a[], int elem_size, int ndim, int dims[]) { int bytes = elem_size, i, rc; assert(ndim <= MAXDIMS); for (i = 0; i < ndim; i++) { bytes *= dims[i]; } rc = ARMCI_Malloc(a, bytes); assert(rc == 0); assert(a[me]); } void destroy_array(void *ptr[]) { ARMCI_Barrier(); assert(!ARMCI_Free(ptr[me])); } #define GNUM_A 3 #define GNUM_B 2 #define ELEMS 10 /* to check if a process belongs to this group */ int chk_grp_membership(int rank, ARMCI_Group *grp, int *memberlist) { int i, grp_size; ARMCI_Group_size(grp, &grp_size); for (i = 0; i < grp_size; i++) if (rank == memberlist[i]) { return 1; } return 0; } void test_one_group(ARMCI_Group *group, int *pid_list) { int grp_me, grp_size; int i, j, src_proc, dst_proc; double *ddst_put[MAXPROC]; double dsrc[ELEMS]; int bytes, world_me; world_me = armci_msg_me(); ARMCI_Group_rank(group, &grp_me); ARMCI_Group_size(group, &grp_size); if (grp_me == 0) { printf("GROUP SIZE = %d\n", grp_size); } printf("%d:group rank = %d\n", me, grp_me); src_proc = 0; dst_proc = grp_size - 1; bytes = ELEMS * sizeof(double); ARMCI_Malloc_group((void **)ddst_put, bytes, group); for (i = 0; i < ELEMS; i++) { dsrc[i] = i * 1.001 * (grp_me + 1); } for (i = 0; i < ELEMS; i++) { ddst_put[grp_me][i] = -1.0; } armci_msg_group_barrier(group); if (grp_me == src_proc) { /* NOTE: make sure to specify absolute ids in ARMCI calls */ ARMCI_Put(dsrc, &ddst_put[dst_proc][0], bytes, ARMCI_Absolute_id(group, dst_proc)); } armci_msg_group_barrier(group); /* NOTE: make sure to specify absolute ids in ARMCI calls */ ARMCI_Fence(ARMCI_Absolute_id(group, dst_proc)); sleep(1); /* Verify*/ if (grp_me == dst_proc) { for (j = 0; j < ELEMS; j++) { if (ABS(ddst_put[grp_me][j] - j * 1.001 *(src_proc + 1)) > 0.1) { printf("\t%d: ddst_put[%d][%d] = %f and expected value is %f\n", me, grp_me, j, ddst_put[grp_me][j], j * 1.001 *(src_proc + 1)); ARMCI_Error("groups: armci put failed...1", 0); } } printf("\n%d(%d): Test O.K. Verified\n", dst_proc, world_me); } armci_msg_group_barrier(group); ARMCI_Free_group(ddst_put[grp_me], group); } void test_groups() { int pid_listA[MAXPROC] = {0, 1, 2}; int pid_listB[MAXPROC] = {1, 3}; ARMCI_Group groupA, groupB; ARMCI_Barrier(); ARMCI_Group_create(GNUM_A, pid_listA, &groupA); /* create group 1 */ ARMCI_Group_create(GNUM_B, pid_listB, &groupB); /* create group 2 */ /* ------------------------ GROUP A ------------------------- */ if (chk_grp_membership(me, &groupA, pid_listA)) { /* group A */ test_one_group(&groupA, pid_listA); } ARMCI_Barrier(); /* ------------------------ GROUP B ------------------------- */ if (chk_grp_membership(me, &groupB, pid_listB)) { /* group B */ test_one_group(&groupB, pid_listB); } ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("O.K.\n"); fflush(stdout); } } /** * Random permutation of 0..n-1 into an array. */ void random_permute(int *arr, int n) { int i, j; int *vtmp = (int *)malloc(n * sizeof(int)); assert(vtmp != NULL); for (i = 0; i < n; ++i) { vtmp[i] = -1; } for (i = 0; i < n; i++) { while (vtmp[j=(rand()%n)] != -1) /*no-op*/; assert(vtmp[j] == -1); vtmp[j] = 0; arr[i] = j; } free(vtmp); } int int_compare(const void *v1, const void *v2) { int i1 = *(int *)v1, i2 = *(int *)v2; if (i1 < i2) { return -1; } if (i1 > i2) { return +1; } return 0; } /** * Test routine for non-collective process group management. This test * should not be used with MPI process group implementation. */ #define GROUP_SIZE 2 #define MAX_GROUPS (MAXPROC/GROUP_SIZE) void test_groups_noncollective() { int *pid_lists[MAX_GROUPS]; int pids[MAXPROC]; int i, nprocs, world_me; ARMCI_Group group; int *my_pid_list = NULL, my_grp_size = 0; int ngrps; ARMCI_Barrier(); nprocs = armci_msg_nproc(); world_me = armci_msg_me(); random_permute(pids, nproc); ngrps = nprocs / GROUP_SIZE; for (i = 0; i < nprocs / GROUP_SIZE; i++) { pid_lists[i] = pids + (i * GROUP_SIZE); } for (i = 0; i < nprocs; i++) { if (pids[i] == world_me) { int grp_id = MIN(i / GROUP_SIZE, ngrps - 1); my_pid_list = pid_lists[grp_id]; if (grp_id == ngrps - 1) { my_grp_size = GROUP_SIZE + (nprocs % GROUP_SIZE); } else { my_grp_size = GROUP_SIZE; } } } qsort(my_pid_list, my_grp_size, sizeof(int), int_compare); ARMCI_Barrier(); /*now create all these disjoint groups and test them in parallel*/ ARMCI_Group_create(my_grp_size, my_pid_list, &group); test_one_group(&group, my_pid_list); ARMCI_Group_free(&group); ARMCI_AllFence(); ARMCI_Barrier(); if (world_me == 0) { printf("O.K.\n"); fflush(stdout); } } int main(int argc, char *argv[]) { armci_msg_init(&argc, &argv); ARMCI_Init_args(&argc, &argv); nproc = armci_msg_nproc(); me = armci_msg_me(); /* printf("nproc = %d, me = %d\n", nproc, me);*/ if (nproc < MINPROC) { if (0 == me) { printf("Test needs at least %d processors (%d used)\n", MINPROC, nproc); } ARMCI_Barrier(); armci_msg_finalize(); exit(0); } if (nproc > MAXPROC) { if (0 == me) { printf("Test works for up to %d processors (%d used)\n", MAXPROC, nproc); } ARMCI_Barrier(); armci_msg_finalize(); exit(0); } if (me == 0) { printf("ARMCI test program (%d processes)\n", nproc); fflush(stdout); sleep(1); } if (me == 0) { printf("\n Testing ARMCI Groups!\n\n"); fflush(stdout); } test_groups(); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("\n Collective groups: Success!!\n"); fflush(stdout); } sleep(2); #ifdef ARMCI_GROUP test_groups_noncollective(); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("\n Non-collective groups: Success!!\n"); fflush(stdout); } sleep(2); #endif ARMCI_Barrier(); ARMCI_Finalize(); armci_msg_finalize(); return(0); } ga-5-3/armci/testing/perf_nb.c0000640005473000001440000002661212115436166015137 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: perf_nb.c,v 1.3 2004-03-29 19:14:51 vinod Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include # define sleep(x) Sleep(1000*(x)) #endif #include "armci.h" #include "message.h" #define DIM1 5 #define DIM2 3 #ifdef __sun /* Solaris has shared memory shortages in the default system configuration */ # define DIM3 6 # define DIM4 5 # define DIM5 4 #elif defined(__alpha__) # define DIM3 8 # define DIM4 5 # define DIM5 6 #else # define DIM3 8 # define DIM4 9 # define DIM5 7 #endif #define DIM6 3 #define DIM7 2 #define OFF 1 #define EDIM1 (DIM1+OFF) #define EDIM2 (DIM2+OFF) #define EDIM3 (DIM3+OFF) #define EDIM4 (DIM4+OFF) #define EDIM5 (DIM5+OFF) #define EDIM6 (DIM6+OFF) #define EDIM7 (DIM7+OFF) #define DIMS 4 #define MAXDIMS 7 #define MAX_DIM_VAL 50 #define LOOP 200 #define BASE 100. #define MAXPROC 8 #define TIMES 100 #ifdef CRAY # define ELEMS 800 #else # define ELEMS 200 #endif #define MAXELEMS 131072 /* 262144 */ #define MAX_REQUESTS MAXELEMS #define PUT 11 #define GET 22 #define ACC 33 int VERIFY = 1; /* verifies results */ int DEBUG = 0; /* if debug=1, dump extra messages */ /***************************** macros ************************/ #define COPY(src, dst, bytes) memcpy((dst),(src),(bytes)) #define ARMCI_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define ARMCI_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define ARMCI_ABS(a) (((a) <0) ? -(a) : (a)) /***************************** global data *******************/ int me, nproc; void *work[MAXPROC]; /* work array for propagating addresses */ double *ddst[MAXPROC]; #ifdef PVM void pvm_init(int argc, char *argv[]) { int mytid, mygid, ctid[MAXPROC]; int np, i; mytid = pvm_mytid(); if ((argc != 2) && (argc != 1)) { goto usage; } if (argc == 1) { np = 1; } if (argc == 2) if ((np = atoi(argv[1])) < 1) { goto usage; } if (np > MAXPROC) { goto usage; } mygid = pvm_joingroup(MPGROUP); if (np > 1) if (mygid == 0) { i = pvm_spawn(argv[0], argv + 1, 0, "", np - 1, ctid); } while (pvm_gsize(MPGROUP) < np) { sleep(1); } /* sync */ pvm_barrier(MPGROUP, np); printf("PVM initialization done!\n"); return; usage: fprintf(stderr, "usage: %s \n", argv[0]); pvm_exit(); exit(-1); } #endif /*void create_array(void *a[], int elem_size, int ndim, int dims[])*/ void create_array(double *a[], int ndim, int dims[]) { int bytes = sizeof(double), i, rc; assert(ndim <= MAXDIMS); for (i = 0; i < ndim; i++) { bytes *= dims[i]; } rc = ARMCI_Malloc((void **)a, bytes); assert(rc == 0); assert(a[me]); } /*void destroy_array(void *ptr[])*/ void destroy_array(double *ptr[]) { ARMCI_Barrier(); assert(!ARMCI_Free(ptr[me])); } void verify_results(int op, int *elems) { int i, j; switch (op) { case PUT: if (!(me == 0)) for (j = 0; j < elems[1]; j++) { if (ARMCI_ABS(ddst[me][j] - j * 1.001) > 0.1) { ARMCI_Error("put failed...Invalid Value Obtained..1", 0); } } ARMCI_Barrier(); if (DEBUG) if (me == 0) { printf(" verifying put ..O.K.\n"); } break; case GET: if (me == 0) { for (i = 1; i < nproc; i++) { for (j = 0; j < elems[1]; j++) { if (ARMCI_ABS(ddst[me][i*elems[1] + j] - j * 1.001 *(i + 1)) > 0.1) { ARMCI_Error("get failed...Invalid Value Obtained..1", 0); } } } } ARMCI_Barrier(); if (DEBUG) if (me == 0) { printf(" verifying get ..O.K.\n\n"); } break; case ACC: if (me == 0) for (j = 0; j < elems[1]; j++) { /*printf("ddst[%d][%d] = %lf\n", me, j, ddst[me][j]); fflush(stdout); */ if (ARMCI_ABS(ddst[me][j] - (double)nproc) > 0.1) { ARMCI_Error("accumulate failed...Invalid Value Obtained..1", 0); } } ARMCI_Barrier(); if (DEBUG)if (me == 0) { printf(" verifying accumulate ..O.K.\n"); } break; default: ARMCI_Error("Invalid Operation", 0); } fflush(stdout); } void test_perf_nb(int dry_run) { int i, j, loop, rc, bytes, elems[2] = {MAXPROC, MAXELEMS}; int stride, k = 0, ntimes; double stime, t1, t2, t3, t4, t5, t6, t7, t8, t9; double *dsrc[MAXPROC], scale = 1.0; armci_hdl_t hdl_get, hdl_put, hdl_acc; create_array(ddst, 2, elems); create_array(dsrc, 1, &elems[1]); if (!dry_run)if (me == 0) { printf("\n\t\t\tRemote 1-D Array Section\n"); printf("section get nbget wait put nbput "); printf(" wait acc nbacc wait\n"); printf("------- -------- -------- -------- -------- --------"); printf(" -------- -------- -------- --------\n"); fflush(stdout); } for (loop = 1; loop <= MAXELEMS; loop *= 2, k++) { elems[1] = loop; ntimes = (int)sqrt((double)(MAXELEMS / elems[1])); if (ntimes < 1) { ntimes = 1; } /* -------------------------- SETUP --------------------------- */ /*initializing non-blocking handles,time,src & dst buffers*/ ARMCI_INIT_HANDLE(&hdl_put); ARMCI_INIT_HANDLE(&hdl_get); ARMCI_INIT_HANDLE(&hdl_acc); t1 = t2 = t3 = t4 = t5 = t6 = t7 = t8 = t9 = 0.0; for (i = 0; i < elems[1]; i++) { dsrc[me][i] = i * 1.001 * (me + 1); } for (i = 0; i < elems[0]*elems[1]; i++) { ddst[me][i] = 0.0; } ARMCI_Barrier(); /* bytes transfered */ bytes = sizeof(double) * elems[1]; ARMCI_Barrier(); /* -------------------------- PUT/GET -------------------------- */ if (me == 0) { for (i = 1; i < nproc; i++) { stime = armci_timer(); for (j = 0; j < ntimes; j++) if ((rc = ARMCI_Put(&dsrc[me][0], &ddst[i][me*elems[1]], bytes, i))) { ARMCI_Error("armci_nbput failed\n", rc); } t1 += armci_timer() - stime; } } ARMCI_Barrier(); ARMCI_AllFence(); ARMCI_Barrier(); if (VERIFY) { verify_results(PUT, elems); } for (i = 0; i < elems[0]*elems[1]; i++) { ddst[me][i] = 0.0; } ARMCI_Barrier(); if (me == 0) { for (i = 1; i < nproc; i++) { stime = armci_timer(); for (j = 0; j < ntimes; j++) if ((rc = ARMCI_Get(&dsrc[i][0], &ddst[me][i*elems[1]], bytes, i))) { printf("%d: armci_get. rc=%d\n", me, rc); fflush(stdout); ARMCI_Error("armci_nbget failed\n", rc); } t4 += armci_timer() - stime; } } ARMCI_Barrier(); ARMCI_AllFence(); ARMCI_Barrier(); if (VERIFY) { verify_results(GET, elems); } for (i = 0; i < elems[0]*elems[1]; i++) { ddst[me][i] = 0.0; } ARMCI_Barrier(); /* ------------------------ nb PUT/GET ------------------------- */ if (me == 0) { for (i = 1; i < nproc; i++) { for (j = 0; j < ntimes; j++) { stime = armci_timer(); if ((rc = ARMCI_NbPut(&dsrc[me][0], &ddst[i][me*elems[1]], bytes, i, &hdl_put))) { ARMCI_Error("armci_nbput failed\n", rc); } t2 += armci_timer() - stime; stime = armci_timer(); ARMCI_Wait(&hdl_put); t3 += armci_timer() - stime; } } } ARMCI_Barrier(); ARMCI_AllFence(); ARMCI_Barrier(); if (VERIFY) { verify_results(PUT, elems); } for (i = 0; i < elems[0]*elems[1]; i++) { ddst[me][i] = 0.0; } ARMCI_Barrier(); if (me == 0) { for (i = 1; i < nproc; i++) { for (j = 0; j < ntimes; j++) { stime = armci_timer(); if ((rc = ARMCI_NbGet(&dsrc[i][0], &ddst[me][i*elems[1]], bytes, i, &hdl_get))) { ARMCI_Error("armci_nbget failed\n", rc); } t5 += armci_timer() - stime; stime = armci_timer(); ARMCI_Wait(&hdl_get); t6 += armci_timer() - stime; } } } ARMCI_Barrier(); ARMCI_AllFence(); ARMCI_Barrier(); if (VERIFY) { verify_results(GET, elems); } for (i = 0; i < elems[0]*elems[1]; i++) { ddst[me][i] = 0.0; } ARMCI_Barrier(); /* ------------------------ Accumulate ------------------------- */ for (i = 0; i < elems[1]; i++) { dsrc[me][i] = 1.0; } ARMCI_Barrier(); stride = elems[1] * sizeof(double); scale = 1.0; for (j = 0; j < ntimes; j++) { stime = armci_timer(); if ((rc = ARMCI_AccS(ARMCI_ACC_DBL, &scale, &dsrc[me][0], &stride, &ddst[0][0], &stride, &bytes, 0, 0))) { ARMCI_Error("armci_acc failed\n", rc); } t7 += armci_timer() - stime; ARMCI_Barrier(); ARMCI_AllFence(); ARMCI_Barrier(); if (VERIFY) { verify_results(ACC, elems); } for (i = 0; i < elems[0]*elems[1]; i++) { ddst[me][i] = 0.0; } ARMCI_Barrier(); } #if PORTALS /* See the note below why this part is disabled */ /* ---------------------- nb-Accumulate ------------------------ */ for (i = 0; i < elems[1]; i++) { dsrc[me][i] = 1.0; } ARMCI_Barrier(); stride = elems[1] * sizeof(double); scale = 1.0; for (j = 0; j < ntimes; j++) { stime = armci_timer(); if ((rc = ARMCI_NbAccS(ARMCI_ACC_DBL, &scale, &dsrc[me][0], &stride, &ddst[0][0], &stride, &bytes, 0, 0, &hdl_acc))) { ARMCI_Error("armci_nbacc failed\n", rc); } t8 += armci_timer() - stime; stime = armci_timer(); ARMCI_Wait(&hdl_acc); t9 += armci_timer() - stime; ARMCI_Barrier(); ARMCI_AllFence(); ARMCI_Barrier(); if (VERIFY) { verify_results(ACC, elems); } for (i = 0; i < elems[0]*elems[1]; i++) { ddst[me][i] = 0.0; } ARMCI_Barrier(); } #endif /* print timings */ if (!dry_run) if (me == 0) printf("%d\t %.2e %.2e %.2e %.2e %.2e %.2e %.2e %.2e %.2e\n", bytes, t4 / ntimes, t5 / ntimes, t6 / ntimes, t1 / ntimes, t2 / ntimes, t3 / ntimes, t7 / ntimes, t8 / ntimes, t9 / ntimes); } ARMCI_AllFence(); ARMCI_Barrier(); if (!dry_run)if (me == 0) { printf("O.K.\n"); fflush(stdout); } destroy_array(ddst); destroy_array(dsrc); } int main(int argc, char *argv[]) { armci_msg_init(&argc, &argv); ARMCI_Init_args(&argc, &argv); nproc = armci_msg_nproc(); me = armci_msg_me(); if (nproc < 2 || nproc > MAXPROC) { if (me == 0) fprintf(stderr, "USAGE: 2 <= processes < %d - got %d\n", MAXPROC, nproc); ARMCI_Barrier(); armci_msg_finalize(); exit(0); } if (me == 0) { printf("ARMCI test program (%d processes)\n", nproc); fflush(stdout); sleep(1); } if (me == 0) { printf("\n put/get/acc requests (Time in secs)\n\n"); fflush(stdout); } test_perf_nb(1); test_perf_nb(0); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("\nSuccess!!\n"); fflush(stdout); } sleep(2); ARMCI_Barrier(); ARMCI_Finalize(); armci_msg_finalize(); return(0); } /* NOTE: ARMCI_NbAcc fails in opus for buffer sizes greater than 400Kb */ ga-5-3/armci/testing/shmtest.c0000640005473000001440000000501711643376201015205 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: shmtest.c,v 1.6 2003-10-22 22:12:21 d3h325 Exp $ */ #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_IPC_H # include #endif #if HAVE_SYS_SHM_H # include #endif #if HAVE_SYS_PARAM_H # include #endif #if HAVE_ERRNO_H # include #endif #if HAVE_STDIO_H # include #endif #ifdef SUN char *shmat(); #endif int armci_test_allocate(long size) { char *ptr; long id = (long)shmget(IPC_PRIVATE, (size_t) size, (int)(IPC_CREAT | 00600)); if (id < 0L) { return 0; } #if 0 /* attach to segment */ ptr = shmat((int) id, (char *) NULL, 0); #else ptr = (char *) NULL; #endif /* delete segment id */ if (shmctl((int) id, IPC_RMID, (struct shmid_ds *)NULL)) { fprintf(stderr, "failed to remove shm id=%ld\n", id); } /* test pointer */ if (((long)ptr) == -1L) { return 0; } else { return 1; } } /* parameters that define range and granularity of search for shm segment size * UBOUND is chosen to be < 2GB to avoid overflowing on 32-bit systems * smaller PAGE gives more accurate results but with more search steps * LBOUND is set to amount that is considered insufficient for our purposes */ #define PAGE 131072L #define UBOUND 2*4096*PAGE #define LBOUND 4*PAGE int verbose = 1; /*\ determine the max shmem segment size using bisection \*/ void armci_shmem_init() { long x, i, y = 0L; long upper_bound = UBOUND; long lower_bound = 0; x = upper_bound; for (i = 1;; i++) { long step; int rc = armci_test_allocate(x); if (rc) { if (verbose) { printf("test %ld size=%ld bytes: success\n", i, x); } y = lower_bound = x; step = (upper_bound - x) >> 1; if (step < 16 * PAGE) { break; } x += step; } else { if (verbose) { printf("test %ld size=%ld bytes: failed\n", i, x); } upper_bound = x; step = (x - lower_bound) >> 1; if (step < PAGE || x < LBOUND) { break; } x -= step; } } if (verbose) { if (x < LBOUND) { printf("no usable amount (%ld bytes) of shared memory available\n", LBOUND); } else { printf("%ld bytes segment size, %ld calls \n", y, i); } } else { printf("%ld\n", y); } } int main(int argc, char **argv) { if (argc > 1) { verbose = 0; } if (verbose) { printf("Searching for max shared memory segment size (SHMMAX) using bisection\n"); } armci_shmem_init(); return 0; } ga-5-3/armci/testing/origptl.c0000640005473000001440000000251311643376201015174 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #define FORK_BEFORE_NI_INIT #ifndef FORK_BEFORE_NI_INIT #define FORK_AFTER_NI_INIT #endif int main(int argc, char **argv, char **envp) { int ret; int num_interfaces; ptl_handle_ni_t nih; ptl_handle_eq_t eqh; ptl_ni_limits_t ptl_limits; pid_t child; if ((ret = PtlInit(&num_interfaces)) != PTL_OK) { printf("%s: PtlInit failed: %d\n", FUNCTION_NAME, ret); exit(1); } printf("%s: PtlInit succeeds (%d)\n", FUNCTION_NAME, ret); #ifdef FORK_BEFORE_NI_INIT child = fork(); #endif if ((ret = PtlNIInit( IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK, PTL_IFACE_SS), PTL_PID_ANY, NULL, &ptl_limits, &nih)) != PTL_OK) { printf("%s: PtlNIInit failed: %d\n", FUNCTION_NAME, ret); exit(1); } printf("%s: PtlNIInit succeeds (%d)\n", FUNCTION_NAME, ret); #ifdef FORK_AFTER_NI_INIT child = fork(); #endif if ((ret = PtlEQAlloc(nih, 4096, NULL, &eqh)) != PTL_OK) { printf("%s: PtlEQAlloc failed: %d(%d)\n", FUNCTION_NAME, ret, child); exit(1); } printf("%s: PtlEQAlloc succeeds (%d:%d)\n", FUNCTION_NAME, child, ret); if (child) { MPI_Init(&argc, &argv); MPI_Finalize(); } } ga-5-3/armci/testing/simple.c0000640005473000001440000000376112115436166015015 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /*$id$*/ #include #include #include #include "armci.h" #include "message.h" int me, nprocs; int LOOP = 10; int main(int argc, char **argv) { int k, i; double **myptrs[10]; double t0, t1, tget = 0, tnbget = 0, tput = 0, tnbput = 0, tnbwait = 0, t2 = 0; armci_msg_init(&argc, &argv); ARMCI_Init_args(&argc, &argv); ARMCI_Init_args(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &me); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); for (k = 0; k < 10; k++) { myptrs[k] = (double **)malloc(sizeof(double *) * nprocs); ARMCI_Malloc((void **)myptrs[k], 400000 * LOOP * sizeof(double)); for (i = 0; i < LOOP; i++) { myptrs[k][me][i] = me + 0.414; } MPI_Barrier(MPI_COMM_WORLD); for (i = 0; i < LOOP; i++) { ARMCI_Get(myptrs[k][(me+1)%nprocs] + i, myptrs[k][me] + i, sizeof(double), (me + 1) % nprocs); /*if(myptrs[k][me][i]!=0.414+(me+1)%nprocs)ARMCI_Error("errr",myptrs[k][me][i]);*/ } t0 = t1 = tget = tnbget = tput = tnbput = tnbwait = t2 = 0; t0 = MPI_Wtime(); for (i = 0; i < LOOP; i++) { ARMCI_Get(myptrs[k][(me+1)%nprocs] + i, myptrs[k][me] + i, sizeof(double), (me + 1) % nprocs); } t1 = MPI_Wtime(); printf("\nGet Latency=%f\n", 1e6 *(t1 - t0) / LOOP); fflush(stdout); t1 = t0 = 0; for (i = 0; i < LOOP; i++) { armci_hdl_t nbh; ARMCI_INIT_HANDLE(&nbh); t0 = MPI_Wtime(); ARMCI_NbGet(myptrs[k][(me+1)%nprocs] + i, myptrs[k][me] + i, sizeof(double), (me + 1) % nprocs, &nbh); t1 = MPI_Wtime(); ARMCI_Wait(&nbh); t2 = MPI_Wtime(); tnbget += (t1 - t0); tnbwait += (t2 - t1); } printf("\nNb Get Latency=%f Nb Wait=%f\n", 1e6 * tnbget / LOOP, 1e6 * tnbwait / LOOP); fflush(stdout); MPI_Barrier(MPI_COMM_WORLD); } for (k = 0; k < 10; k++) { ARMCI_Free(myptrs[k][me]); } MPI_Barrier(MPI_COMM_WORLD); ARMCI_Finalize(); ARMCI_Finalize(); armci_msg_finalize(); return 0; } ga-5-3/armci/testing/simplelock.c0000640005473000001440000000230512115436166015657 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_UNISTD_H # include #endif #include "armci.h" #include "message.h" int me, nproc; extern void armcill_lock(int, int); extern void armcill_unlock(int, int); void test_lock() { int i, mut; if (me == 0) { printf("\n"); } for (mut = 0; mut < 16; mut++) for (i = 0; i < nproc; i++) { #if FIXME_THESE_ARE_NOT_DEFINED_FOR_PORTALS armcill_lock(mut, i); armcill_unlock(mut, i); #endif ARMCI_Barrier(); if (me == 0) { printf("."); fflush(stdout); } ARMCI_Barrier(); } } int main(int argc, char *argv[]) { armci_msg_init(&argc, &argv); ARMCI_Init_args(&argc, &argv); nproc = armci_msg_nproc(); me = armci_msg_me(); if (me == 0) { printf("ARMCI test program for lock(%d processes)\n", nproc); fflush(stdout); sleep(1); } test_lock(); ARMCI_Barrier(); if (me == 0) { printf("test passed\n"); fflush(stdout); } sleep(2); ARMCI_Barrier(); ARMCI_Finalize(); armci_msg_finalize(); return(0); } ga-5-3/armci/testing/rpl_armci_msg_init.c0000640005473000001440000000050612115436166017357 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include void armci_msg_init(int *argc, char ***argv) { int flag=0; MPI_Initialized(&flag); if (!flag) { #if 0 int provided; MPI_Init_thread(argc, argv, MPI_THREAD_MULTIPLE, &provided); #else MPI_Init(argc, argv); # endif } } ga-5-3/armci/testing/perf.c0000640005473000001440000004151512115436166014457 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* * Author: Jialin Ju, PNNL */ /* $Id: perf.c,v 1.21 2006-09-12 23:21:21 andriy Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include # define sleep(x) Sleep(1000*(x)) #endif #if HAVE_MATH_H # include #endif #include "armci.h" #include "message.h" #ifndef ARMCI_MAX_STRIDE_LEVEL #define ARMCI_MAX_STRIDE_LEVEL 7 #endif #define SIZE 550 #define MAXPROC 8 #define CHUNK_NUM 28 #define FORCE_1D_ #ifndef ABS #define ARMCI_ABS(a) ((a)>0? (a): -(a)) #endif /* tells to use ARMCI_Malloc_local instead of plain malloc */ #define MALLOC_LOC int CHECK_RESULT = 0; int chunk[CHUNK_NUM] = {1, 3, 4, 6, 9, 12, 16, 20, 24, 30, 40, 48, 52, 64, 78, 91, 104, 128, 142, 171, 210, 256, 300, 353, 400, 440, 476, 512 }; char check_type[15]; int nproc, me; int warn_accuracy = 0; void fill_array(double *arr, int count, int which); void check_result(double *src_buf, double *dst_buf, int *stride, int *count, int stride_levels); void acc_array(double scale, double *array1, double *array2, int *stride, int *count, int stride_levels); static double _tt0 = 0.0; /*\ quick fix for inacurate timer \*/ double Timer() { #define DELTA 0.000001 double t = armci_timer(); if (t <= _tt0 + DELTA) { _tt0 += DELTA; } else { _tt0 = t; } return _tt0; } #define TIMER armci_timer double time_get(double *src_buf, double *dst_buf, int chunk, int loop, int proc, int levels) { int i, bal = 0; int stride[2]; int count[2]; int stride_levels = levels; double *tmp_buf = NULL, *tmp_buf_ptr = NULL; double start_time, stop_time, total_time = 0; stride[0] = SIZE * sizeof(double); count[0] = chunk * sizeof(double); count[1] = chunk; if (CHECK_RESULT) { tmp_buf = (double *)malloc(SIZE * SIZE * sizeof(double)); assert(tmp_buf != NULL); fill_array(tmp_buf, SIZE * SIZE, proc); tmp_buf_ptr = tmp_buf; } start_time = TIMER(); for (i = 0; i < loop; i++) { #ifdef FORCE_1D int j; if (levels > 0) { for (j = 0; j < count[1]; j++) { char *s = (char *) src_buf, *d = (char *)dst_buf; s += j * stride[0]; d += j * stride[0]; ARMCI_Get(src_buf, dst_buf, count[0], proc); } } else #endif if (levels) { ARMCI_GetS(src_buf, stride, dst_buf, stride, count, stride_levels, proc); } else { ARMCI_Get(src_buf, dst_buf, count[0], proc); } if (CHECK_RESULT) { sprintf(check_type, "ARMCI_GetS:"); check_result(tmp_buf_ptr, dst_buf, stride, count, stride_levels); } /* prepare next src and dst ptrs: avoid cache locality */ if (bal == 0) { src_buf += 128; dst_buf += 128; if (CHECK_RESULT) { tmp_buf_ptr += 128; } bal = 1; } else { src_buf -= 128; dst_buf -= 128; if (CHECK_RESULT) { tmp_buf_ptr -= 128; } bal = 0; } } stop_time = TIMER(); total_time = (stop_time - start_time); if (CHECK_RESULT) { free(tmp_buf); } if (total_time == 0.0) { total_time = 0.000001; /* workaround for inaccurate timers */ warn_accuracy++; } return(total_time / loop); } double time_put(double *src_buf, double *dst_buf, int chunk, int loop, int proc, int levels) { int i, bal = 0; int stride[2]; int count[2]; int stride_levels = levels; double *tmp_buf = NULL; double start_time, stop_time, total_time = 0; stride[0] = SIZE * sizeof(double); count[0] = chunk * sizeof(double); count[1] = chunk; if (CHECK_RESULT) { tmp_buf = (double *)malloc(SIZE * SIZE * sizeof(double)); assert(tmp_buf != NULL); } start_time = TIMER(); for (i = 0; i < loop; i++) { #ifdef FORCE_1D int j; if (levels > 0) { for (j = 0; j < count[1]; j++) { char *s = (char *) src_buf, *d = (char *)dst_buf; s += j * stride[0]; d += j * stride[0]; ARMCI_Put(src_buf, dst_buf, count[0], proc); } } else #endif if (levels) { ARMCI_PutS(src_buf, stride, dst_buf, stride, count, stride_levels, proc); } else { ARMCI_Put(src_buf, dst_buf, count[0], proc); } if (CHECK_RESULT) { ARMCI_GetS(dst_buf, stride, tmp_buf, stride, count, stride_levels, proc); sprintf(check_type, "ARMCI_PutS:"); check_result(tmp_buf, src_buf, stride, count, stride_levels); } /* prepare next src and dst ptrs: avoid cache locality */ if (bal == 0) { src_buf += 128; dst_buf += 128; bal = 1; } else { src_buf -= 128; dst_buf -= 128; bal = 0; } } stop_time = TIMER(); total_time = (stop_time - start_time); if (CHECK_RESULT) { free(tmp_buf); } if (total_time == 0.0) { total_time = 0.000001; /* workaround for inaccurate timers */ warn_accuracy++; } return(total_time / loop); } double time_acc(double *src_buf, double *dst_buf, int chunk, int loop, int proc, int levels) { int i, bal = 0; int stride[2]; int count[2]; int stride_levels = levels; double *before_buf = NULL, *after_buf = NULL; double start_time, stop_time, total_time = 0; stride[0] = SIZE * sizeof(double); count[0] = chunk * sizeof(double); count[1] = chunk; if (CHECK_RESULT) { before_buf = (double *)malloc(SIZE * SIZE * sizeof(double)); assert(before_buf != NULL); after_buf = (double *)malloc(SIZE * SIZE * sizeof(double)); assert(after_buf != NULL); } start_time = TIMER(); for (i = 0; i < loop; i++) { double scale = (double)i; if (CHECK_RESULT) { ARMCI_GetS(dst_buf, stride, before_buf, stride, count, stride_levels, proc); acc_array(scale, before_buf, src_buf, stride, count, stride_levels); } ARMCI_AccS(ARMCI_ACC_DBL, &scale, src_buf, stride, dst_buf, stride, count, stride_levels, proc); if (CHECK_RESULT) { ARMCI_GetS(dst_buf, stride, after_buf, stride, count, stride_levels, proc); sprintf(check_type, "ARMCI_AccS:"); check_result(after_buf, before_buf, stride, count, stride_levels); } /* prepare next src and dst ptrs: avoid cache locality */ if (bal == 0) { src_buf += 128; dst_buf += 128; bal = 1; } else { src_buf -= 128; dst_buf -= 128; bal = 0; } } stop_time = TIMER(); total_time = (stop_time - start_time); if (CHECK_RESULT) { free(before_buf); free(after_buf); } if (total_time == 0.0) { total_time = 0.000001; /* workaround for inaccurate timers */ warn_accuracy++; } return(total_time / loop); } void test_1D() { int i; int dst; int ierr; double *buf = NULL; void *ptr[MAXPROC], *get_ptr[MAXPROC]; /* memory allocation */ #ifdef MALLOC_LOC if (me == 0) { buf = (double *)ARMCI_Malloc_local(SIZE * SIZE * sizeof(double)); assert(buf != NULL); } #else if (me == 0) { buf = (double *)malloc(SIZE * SIZE * sizeof(double)); assert(buf != NULL); } #endif ierr = ARMCI_Malloc(ptr, (SIZE * SIZE * sizeof(double))); assert(ierr == 0); assert(ptr[me]); ierr = ARMCI_Malloc(get_ptr, (SIZE * SIZE * sizeof(double))); assert(ierr == 0); assert(get_ptr[me]); /* ARMCI - initialize the data window */ fill_array(ptr[me], SIZE * SIZE, me); fill_array(get_ptr[me], SIZE * SIZE, me); ARMCI_Barrier(); /* only the proc 0 does the work */ if (me == 0) { if (!CHECK_RESULT) { printf(" section get put"); printf(" acc\n"); printf("bytes loop usec MB/s usec MB/s"); printf(" usec MB/s\n"); printf("------- ------ -------- -------- -------- --------"); printf(" -------- --------\n"); fflush(stdout); } for (i = 0; i < CHUNK_NUM; i++) { int loop; int bytes = chunk[i] * chunk[i] * sizeof(double); double t_get = 0, t_put = 0, t_acc = 0; double latency_get, latency_put, latency_acc; double bandwidth_get, bandwidth_put, bandwidth_acc; loop = (SIZE * SIZE) / (chunk[i] * chunk[i]); loop = (int)sqrt((double)loop); if (loop < 2) { loop = 2; } for (dst = 1; dst < nproc; dst++) { /* strided get */ fill_array(buf, SIZE * SIZE, me * 10); t_get += time_get((double *)(get_ptr[dst]), (double *)buf, chunk[i] * chunk[i], loop, dst, 0); /* strided put */ fill_array(buf, SIZE * SIZE, me * 10); t_put += time_put((double *)buf, (double *)(ptr[dst]), chunk[i] * chunk[i], loop, dst, 0); /* strided acc */ fill_array(buf, SIZE * SIZE, me * 10); t_acc += time_acc((double *)buf, (double *)(ptr[dst]), chunk[i] * chunk[i], loop, dst, 0); } latency_get = t_get / (nproc - 1); latency_put = t_put / (nproc - 1); latency_acc = t_acc / (nproc - 1); bandwidth_get = (bytes * (nproc - 1) * 1e-6) / t_get; bandwidth_put = (bytes * (nproc - 1) * 1e-6) / t_put; bandwidth_acc = (bytes * (nproc - 1) * 1e-6) / t_acc; /* print */ if (!CHECK_RESULT) { printf("%d\t%d\t%.2e %.2e %.2e %.2e %.2e %.2e\n", bytes, loop, latency_get / 1e-6, bandwidth_get, latency_put / 1e-6, bandwidth_put, latency_acc / 1e-6, bandwidth_acc); } } } else { sleep(3); } ARMCI_AllFence(); ARMCI_Barrier(); /* cleanup */ ARMCI_Free(get_ptr[me]); ARMCI_Free(ptr[me]); #ifdef MALLOC_LOC if (me == 0) { ARMCI_Free_local(buf); } #else if (me == 0) { free(buf); } #endif } void test_2D() { int i; int dst; int ierr; double *buf = NULL; void *ptr[MAXPROC], *get_ptr[MAXPROC]; #ifdef MALLOC_LOC if (me == 0) { buf = (double *)ARMCI_Malloc_local(SIZE * SIZE * sizeof(double)); assert(buf != NULL); } #else if (me == 0) { buf = (double *)malloc(SIZE * SIZE * sizeof(double)); assert(buf != NULL); } #endif ierr = ARMCI_Malloc(ptr, (SIZE * SIZE * sizeof(double))); assert(ierr == 0); assert(ptr[me]); ierr = ARMCI_Malloc(get_ptr, (SIZE * SIZE * sizeof(double))); assert(ierr == 0); assert(get_ptr[me]); /* ARMCI - initialize the data window */ fill_array(ptr[me], SIZE * SIZE, me); fill_array(get_ptr[me], SIZE * SIZE, me); ARMCI_Barrier(); /* only the proc 0 doest the work */ /* print the title */ if (me == 0) { if (!CHECK_RESULT) { printf(" section get put"); printf(" acc\n"); printf("bytes loop usec MB/s usec MB/s"); printf(" usec MB/s\n"); printf("------- ------ -------- -------- -------- --------"); printf(" -------- --------\n"); fflush(stdout); } for (i = 0; i < CHUNK_NUM; i++) { int loop; int bytes = chunk[i] * chunk[i] * sizeof(double); double t_get = 0, t_put = 0, t_acc = 0; double latency_get, latency_put, latency_acc; double bandwidth_get, bandwidth_put, bandwidth_acc; loop = SIZE / chunk[i]; if (loop < 2) { loop = 2; } for (dst = 1; dst < nproc; dst++) { /* strided get */ fill_array(buf, SIZE * SIZE, me * 10); t_get += time_get((double *)(get_ptr[dst]), (double *)buf, chunk[i], loop, dst, 1); /* strided put */ fill_array(buf, SIZE * SIZE, me * 10); t_put += time_put((double *)buf, (double *)(ptr[dst]), chunk[i], loop, dst, 1); /* strided acc */ fill_array(buf, SIZE * SIZE, me * 10); t_acc += time_acc((double *)buf, (double *)(ptr[dst]), chunk[i], loop, dst, 1); } latency_get = t_get / (nproc - 1); latency_put = t_put / (nproc - 1); latency_acc = t_acc / (nproc - 1); bandwidth_get = (bytes * (nproc - 1) * 1e-6) / t_get; bandwidth_put = (bytes * (nproc - 1) * 1e-6) / t_put; bandwidth_acc = (bytes * (nproc - 1) * 1e-6) / t_acc; /* print */ if (!CHECK_RESULT) { printf("%d\t%d\t%.2e %.2e %.2e %.2e %.2e %.2e\n", bytes, loop, latency_get / 1e-6, bandwidth_get, latency_put / 1e-6, bandwidth_put, latency_acc / 1e-6, bandwidth_acc); } } } else { sleep(3); } ARMCI_AllFence(); ARMCI_Barrier(); /* cleanup */ ARMCI_Free(get_ptr[me]); ARMCI_Free(ptr[me]); #ifdef MALLOC_LOC if (me == 0) { ARMCI_Free_local(buf); } #else if (me == 0) { free(buf); } #endif } int main(int argc, char **argv) { armci_msg_init(&argc, &argv); /* initialize ARMCI */ ARMCI_Init_args(&argc, &argv); me = armci_msg_me(); nproc = armci_msg_nproc(); if (nproc < 2 || nproc > MAXPROC) { if (me == 0) fprintf(stderr, "USAGE: 2 <= processes < %d - got %d\n", MAXPROC, nproc); ARMCI_Barrier(); armci_msg_finalize(); //MPI_Finalize(); exit(0); } if (!me) { printf("\n Performance of Basic Blocking Communication Operations\n"); } ARMCI_Barrier(); CHECK_RESULT = 1; test_1D(); CHECK_RESULT = 0; /* warmup run */ /* test 1 dimension array */ if (!me) { printf("\n\t\t\tContiguous Data Transfer\n"); } test_1D(); /* test 2 dimension array */ if (!me) { printf("\n\t\t\tStrided Data Transfer\n"); } test_2D(); ARMCI_Barrier(); if (me == 0) { if (warn_accuracy) { printf("\nWARNING: Your timer does not have sufficient accuracy for this test (%d)\n", warn_accuracy); } printf("\n\n------------ Now we test the same data transfer for correctness ----------\n"); fflush(stdout); } ARMCI_Barrier(); CHECK_RESULT = 1; if (!me) { printf("\n\t\t\tContiguous Data Transfer\n"); } test_1D(); if (me == 0) { printf("OK\n"); } ARMCI_Barrier(); if (!me) { printf("\n\t\t\tStrided Data Transfer\n"); } test_2D(); if (me == 0) { printf("OK\n\n\nTests Completed.\n"); } ARMCI_Barrier(); /* done */ ARMCI_Finalize(); armci_msg_finalize(); //MPI_Finalize(); return(0); } void fill_array(double *arr, int count, int which) { int i; for (i = 0; i < count; i++) { arr[i] = i * 8.23 + which * 2.89; } } void check_result(double *src_buf, double *dst_buf, int *stride, int *count, int stride_levels) { int i, j, size; long idx; int n1dim; /* number of 1 dim block */ int bvalue[ARMCI_MAX_STRIDE_LEVEL], bunit[ARMCI_MAX_STRIDE_LEVEL]; /* number of n-element of the first dimension */ n1dim = 1; for (i = 1; i <= stride_levels; i++) { n1dim *= count[i]; } /* calculate the destination indices */ bvalue[0] = 0; bvalue[1] = 0; bunit[0] = 1; bunit[1] = 1; for (i = 2; i <= stride_levels; i++) { bvalue[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } for (i = 0; i < n1dim; i++) { idx = 0; for (j = 1; j <= stride_levels; j++) { idx += bvalue[j] * stride[j-1]; if ((i + 1) % bunit[j] == 0) { bvalue[j]++; } if (bvalue[j] > (count[j] - 1)) { bvalue[j] = 0; } } size = count[0] / sizeof(double); for (j = 0; j < size; j++) if (ARMCI_ABS(((double *)((char *)src_buf + idx))[j] - ((double *)((char *)dst_buf + idx))[j]) > 0.000001) { fprintf(stdout, "Error:%s comparison failed: (%d) (%f :%f) %d\n", check_type, j, ((double *)((char *)src_buf + idx))[j], ((double *)((char *)dst_buf + idx))[j], count[0]); ARMCI_Error("failed", 0); } } } /* array1 = array1 + array2 * scale */ void acc_array(double scale, double *array1, double *array2, int *stride, int *count, int stride_levels) { int i, j, size; long idx; int n1dim; /* number of 1 dim block */ int bvalue[ARMCI_MAX_STRIDE_LEVEL], bunit[ARMCI_MAX_STRIDE_LEVEL]; /* number of n-element of the first dimension */ n1dim = 1; for (i = 1; i <= stride_levels; i++) { n1dim *= count[i]; } /* calculate the destination indices */ bvalue[0] = 0; bvalue[1] = 0; bunit[0] = 1; bunit[1] = 1; for (i = 2; i <= stride_levels; i++) { bvalue[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } for (i = 0; i < n1dim; i++) { idx = 0; for (j = 1; j <= stride_levels; j++) { idx += bvalue[j] * stride[j-1]; if ((i + 1) % bunit[j] == 0) { bvalue[j]++; } if (bvalue[j] > (count[j] - 1)) { bvalue[j] = 0; } } size = count[0] / sizeof(double); for (j = 0; j < size; j++) ((double *)((char *)array1 + idx))[j] += ((double *)((char *)array2 + idx))[j] * scale; } } ga-5-3/armci/testing/test2.c0000640005473000001440000010272112115436166014561 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: test2.c,v 1.1.4.1 2007-05-29 19:36:23 manoj Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_SYS_TIME_H # include #endif #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include # define sleep(x) Sleep(1000*(x)) #endif //#define ARMCI_INT -99 //#define ARMCI_LONG -101 //#define ARMCI_FLOAT -306 //#define ARMCI_DOUBLE -307 #define FLOAT_EPS ((float) 1.0 / 4096) #define DOUBLE_EPS ((double) 1.0 / 16384) #include "armci.h" #include "message.h" #define DIM1 5 #define DIM2 3 #ifdef __sun /* Solaris has shared memory shortages in the default system configuration */ # define DIM3 6 # define DIM4 5 # define DIM5 4 #elif defined(__alpha__) # define DIM3 8 # define DIM4 5 # define DIM5 6 #else # define DIM3 8 # define DIM4 9 # define DIM5 7 #endif #define DIM6 3 #define DIM7 2 #define OFF 1 #define EDIM1 (DIM1+OFF) #define EDIM2 (DIM2+OFF) #define EDIM3 (DIM3+OFF) #define EDIM4 (DIM4+OFF) #define EDIM5 (DIM5+OFF) #define EDIM6 (DIM6+OFF) #define EDIM7 (DIM7+OFF) #define DIMS 4 #define MAXDIMS 7 #define MAX_DIM_VAL 50 #define LOOP 200 #define BASE 100. #define MAXPROC 1024 #define TIMES 100 #ifdef CRAY # define ELEMS 800 #else # define ELEMS 200 #endif typedef struct { float real; float imag; } cmpl_t; typedef struct { double real; double imag; } dcmpl_t; /***************************** macros ************************/ #define COPY(src, dst, bytes) memcpy((dst),(src),(bytes)) #define ARMCI_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define ARMCI_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define ARMCI_ABS(a) (((a) <0) ? -(a) : (a)) /***************************** global data *******************/ int me, nproc; void *work[MAXPROC]; /* work array for propagating addresses */ #ifdef PVM void pvm_init(int argc, char *argv[]) { int mytid, mygid, ctid[MAXPROC]; int np, i; mytid = pvm_mytid(); if ((argc != 2) && (argc != 1)) { goto usage; } if (argc == 1) { np = 1; } if (argc == 2) if ((np = atoi(argv[1])) < 1) { goto usage; } if (np > MAXPROC) { goto usage; } mygid = pvm_joingroup(MPGROUP); if (np > 1) if (mygid == 0) { i = pvm_spawn(argv[0], argv + 1, 0, "", np - 1, ctid); } while (pvm_gsize(MPGROUP) < np) { sleep(1); } /* sync */ pvm_barrier(MPGROUP, np); printf("PVM initialization done!\n"); return; usage: fprintf(stderr, "usage: %s \n", argv[0]); pvm_exit(); exit(-1); } #endif void create_array(void *a[], int elem_size, int ndim, int dims[]) { int bytes = elem_size, i, rc; assert(ndim <= MAXDIMS); for (i = 0; i < ndim; i++) { bytes *= dims[i]; } rc = ARMCI_Malloc(a, bytes); assert(rc == 0); assert(a[me]); } void destroy_array(void *ptr[]) { ARMCI_Barrier(); assert(!ARMCI_Free(ptr[me])); } int loA[MAXDIMS], hiA[MAXDIMS]; int dimsA[MAXDIMS] = {DIM1, DIM2, DIM3, DIM4, DIM5, DIM6, DIM7}; int loB[MAXDIMS], hiB[MAXDIMS]; int dimsB[MAXDIMS] = {EDIM1, EDIM2, EDIM3, EDIM4, EDIM5, EDIM6, EDIM7}; int count[MAXDIMS]; int strideA[MAXDIMS], strideB[MAXDIMS]; int loC[MAXDIMS], hiC[MAXDIMS]; int idx[MAXDIMS] = {0, 0, 0, 0, 0, 0, 0}; void test_brdcst(int datatype) { void *a[6]; int len[6] = {1, 10, 100, 1000, 10000, 100000}; int datatype_size = 0; int i, j; switch (datatype) { case ARMCI_INT: datatype_size = sizeof(int); for (i = 0; i < 6; i++) { a[i] = malloc(len[i] * datatype_size); } for (i = 0; i < 6; i++) if (me == 0) for (j = 0; j < len[i]; j++) { ((int *) a[i])[j] = (int) j; } else { memset(a[i], 0x0, len[i] * datatype_size); } break; case ARMCI_LONG: datatype_size = sizeof(long); for (i = 0; i < 6; i++) { a[i] = malloc(len[i] * datatype_size); } for (i = 0; i < 6; i++) if (me == 0) for (j = 0; j < len[i]; j++) { ((long *) a[i])[j] = (long) j; } else { memset(a[i], 0x0, len[i] * datatype_size); } break; case ARMCI_FLOAT: datatype_size = sizeof(float); for (i = 0; i < 6; i++) { a[i] = malloc(len[i] * datatype_size); } for (i = 0; i < 6; i++) if (me == 0) for (j = 0; j < len[i]; j++) { ((float *) a[i])[j] = (float) j; } else { memset(a[i], 0x0, len[i] * datatype_size); } break; case ARMCI_DOUBLE: datatype_size = sizeof(double); for (i = 0; i < 6; i++) { a[i] = malloc(len[i] * datatype_size); } for (i = 0; i < 6; i++) if (me == 0) for (j = 0; j < len[i]; j++) { ((double *) a[i])[j] = (double) j; } else { memset(a[i], 0x0, len[i] * datatype_size); } break; default: break; } for (i = 0; i < 6; i++) { armci_msg_brdcst(a[i], len[i] * datatype_size, 0); } switch (datatype) { case ARMCI_INT: for (i = 0; i < 6; i++) for (j = 0; j < len[i]; j++) if (((int *) a[i])[j] != (int) j) { printf("ERROR a[%d][%d] = %d != %d\n", i, j, ((int *) a[i])[j], (int) j); ARMCI_Error("armci_brdcst failed (int)\n", 0); } break; case ARMCI_LONG: for (i = 0; i < 6; i++) for (j = 0; j < len[i]; j++) if (((long *) a[i])[j] != (long) j) { printf("ERROR a[%d][%d] = %ld != %ld\n", i, j, ((long *) a[i])[j], (long) j); ARMCI_Error("armci_brdcst failed (long)\n", 0); } break; case ARMCI_FLOAT: for (i = 0; i < 6; i++) for (j = 0; j < len[i]; j++) if (((float *) a[i])[j] != (float) j) { printf("ERROR a[%d][%d] = %f != %f\n", i, j, ((float *) a[i])[j], (float) j); ARMCI_Error("armci_brdcst failed (float)\n", 0); } break; case ARMCI_DOUBLE: for (i = 0; i < 6; i++) for (j = 0; j < len[i]; j++) if (((double *) a[i])[j] != (double) j) { printf("ERROR a[%d][%d] = %f != %f\n", i, j, ((double *) a[i])[j], (double) j); ARMCI_Error("armci_brdcst failed (double)\n", 0); } break; default: break; } for (i = 0; i < 6; i++) { free(a[i]); } } void test_gop2_or_reduce(const int datatype, char *op, const int reduce_test) { void *a[6]; int len[6] = {1, 10, 100, 1000, 10000, 100000}; int len_length = 3; int datatype_size = 0; int i, j; char *test_type; int verbose = 0; if (reduce_test == 0) { test_type = "gop2"; } else { test_type = "reduce"; } switch (datatype) { case ARMCI_INT: datatype_size = sizeof(int); for (i = 0; i < len_length; i++) { a[i] = malloc(len[i] * datatype_size); } for (i = 0; i < len_length; i++) for (j = 0; j < len[i]; j++) { ((int *) a[i])[j] = (int)(me + j) * (((me + j) % 2 == 0) ? 1 : -1); } for (i = 0; i < len_length; i++) { if (me == 0 && verbose != 0) { printf("testing %s %s message size = %d op = %s\n", test_type, "ARMCI_INT", len[i], op); } if (reduce_test == 0) { armci_msg_igop(a[i], len[i], op); } else { armci_msg_reduce(a[i], len[i], op, datatype); } } if (me == 0 || reduce_test == 0) for (i = 0; i < len_length; i++) { if (me == 0 && verbose != 0) { printf("checking %s %s message size = %d op = %s\n", test_type, "ARMCI_INT", len[i], op); } for (j = 0; j < len[i]; j++) if (strncmp(op, "+", 1) == 0) { int compare = 0; if (nproc % 2 == 0) { if (j % 2 == 0) { compare = -nproc / 2; } else { compare = nproc / 2; } } else { if (j % 2 == 0) { compare = j + nproc / 2; } else { compare = -(j + nproc / 2); } } if (((int *) a[i])[j] != compare) { printf("ERROR %s %s %s a[%d][%d] = %d != %d\n", test_type, "ARMCI_INT", op, i, j, ((int *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "*", 1) == 0) { int compare = 1; int k = 0; for (k = 0; k < nproc; k++) { compare *= (k + j) * (((k + j) % 2 == 0) ? 1 : -1); } if (((int *) a[i])[j] != compare) { printf("ERROR %s %s %s a[%d][%d] = %d != %d\n", test_type, "ARMCI_INT", op, i, j, ((int *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "min", 3) == 0) { int compare = -(j + nproc - 1); if (compare % 2 == 0 && nproc > 1) { compare = -(j + nproc - 2); } if (((int *) a[i])[j] != compare) { printf("ERROR %s %s %s a[%d][%d] = %d != %d\n", test_type, "ARMCI_INT", op, i, j, ((int *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "max", 3) == 0) { int compare = j + nproc - 1; if (compare % 2 != 0 && nproc > 1) { compare = j + nproc - 2; } if (((int *) a[i])[j] != compare) { printf("ERROR %s %s %s a[%d][%d] = %d != %d\n", test_type, "ARMCI_INT", op, i, j, ((int *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "absmax", 6) == 0) { int compare = j + nproc - 1; if (((int *) a[i])[j] != compare) { printf("ERROR %s %s %s a[%d][%d] = %d != %d\n", test_type, "ARMCI_INT", op, i, j, ((int *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "absmin", 6) == 0) { int compare = j; if (((int *) a[i])[j] != compare) { printf("ERROR %s %s %s a[%d][%d] = %d != %d\n", test_type, "ARMCI_INT", op, i, j, ((int *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "or", 2) == 0) { } } break; case ARMCI_LONG: datatype_size = sizeof(long); for (i = 0; i < len_length; i++) { a[i] = malloc(len[i] * datatype_size); } for (i = 0; i < len_length; i++) for (j = 0; j < len[i]; j++) { ((long *) a[i])[j] = (long)(me + j) * (((me + j) % 2 == 0) ? 1 : -1); } for (i = 0; i < len_length; i++) { if (me == 0 && verbose != 0) { printf("testing %s %s message size = %d op = %s\n", test_type, "ARMCI_LONG", len[i], op); } if (reduce_test == 0) { armci_msg_lgop(a[i], len[i], op); } else { armci_msg_reduce(a[i], len[i], op, datatype); } } if (me == 0 || reduce_test == 0) for (i = 0; i < len_length; i++) { if (me == 0 && verbose != 0) { printf("checking %s %s message size = %d op = %s\n", test_type, "ARMCI_LONG", len[i], op); } for (j = 0; j < len[i]; j++) if (strncmp(op, "+", 1) == 0) { int compare = 0; if (nproc % 2 == 0) { if (j % 2 == 0) { compare = -nproc / 2; } else { compare = nproc / 2; } } else { if (j % 2 == 0) { compare = j + nproc / 2; } else { compare = -(j + nproc / 2); } } if (((long *) a[i])[j] != compare) { printf("ERROR %s %s %s a[%d][%d] = %ld != %d\n", test_type, "ARMCI_LONG", op, i, j, ((long *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "*", 1) == 0) { int compare = 1; int k = 0; for (k = 0; k < nproc; k++) { compare *= (k + j) * (((k + j) % 2 == 0) ? 1 : -1); } if (((long *) a[i])[j] != compare) { printf("ERROR %s %s %s a[%d][%d] = %ld != %d\n", test_type, "ARMCI_LONG", op, i, j, ((long *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "min", 3) == 0) { int compare = -(j + nproc - 1); if (compare % 2 == 0 && nproc > 1) { compare = -(j + nproc - 2); } if (((long *) a[i])[j] != compare) { printf("ERROR %s %s %s a[%d][%d] = %ld != %d\n", test_type, "ARMCI_LONG", op, i, j, ((long *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "max", 3) == 0) { int compare = j + nproc - 1; if (compare % 2 != 0 && nproc > 1) { compare = j + nproc - 2; } if (((long *) a[i])[j] != compare) { printf("ERROR %s %s %s a[%d][%d] = %ld != %d\n", test_type, "ARMCI_LONG", op, i, j, ((long *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "absmax", 6) == 0) { int compare = j + nproc - 1; if (((long *) a[i])[j] != compare) { printf("ERROR %s %s %s a[%d][%d] = %ld != %d\n", test_type, "ARMCI_LONG", op, i, j, ((long *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "absmin", 6) == 0) { int compare = j; if (((long *) a[i])[j] != compare) { printf("ERROR %s %s %s a[%d][%d] = %ld != %d\n", test_type, "ARMCI_LONG", op, i, j, ((long *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "or", 2) == 0) { } } break; case ARMCI_FLOAT: datatype_size = sizeof(float); for (i = 0; i < len_length; i++) { a[i] = malloc(len[i] * datatype_size); } for (i = 0; i < len_length; i++) for (j = 0; j < len[i]; j++) { ((float *) a[i])[j] = (float)(me + j) * (((me + j) % 2 == 0) ? 1.0 / nproc : -1.0 / nproc); } for (i = 0; i < len_length; i++) { if (me == 0 && verbose != 0) { printf("testing %s ARMCI_FLOAT message size = %d op = %s\n", test_type, len[i], op); } if (reduce_test == 0) { armci_msg_fgop(a[i], len[i], op); } else { armci_msg_reduce(a[i], len[i], op, datatype); } } if (me == 0 || reduce_test == 0) for (i = 0; i < len_length; i++) { if (me == 0 && verbose != 0) { printf("checking %s ARMCI_FLOAT message size = %d op = %s\n", test_type, len[i], op); } for (j = 0; j < len[i]; j++) if (strncmp(op, "+", 1) == 0) { float compare = 0.0; if (nproc % 2 == 0) { if (j % 2 == 0) { compare = -(((int)nproc / 2) / (float) nproc); } else { compare = ((int)nproc / 2) / (float) nproc; } } else { if (j % 2 == 0) { compare = ((int) j + nproc / 2) / (float) nproc; } else { compare = -(((int) j + nproc / 2) / (float) nproc); } } if (ARMCI_ABS(((float *) a[i])[j] - compare) > ARMCI_ABS(compare) * FLOAT_EPS) { printf("ERROR %s %s %s a[%d][%d] = %f != %f\n", test_type, "ARMCI_FLOAT", op, i, j, ((float *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "*", 1) == 0) { float compare = 1.0; int k = 0; for (k = 0; k < nproc; k++) { compare *= ((float) k + j) / (float) nproc; } if ((nproc / 2) % 2 != 0) if (nproc % 2 != 0) if (j % 2 == 0) { compare *= -1.0; } if (ARMCI_ABS(((float *) a[i])[j] - compare) > ARMCI_ABS(compare) * FLOAT_EPS) { printf("ERROR %s %s %s a[%d][%d] = %f != %f\n", test_type, "ARMCI_FLOAT", op, i, j, ((float *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "min", 3) == 0) { float compare = -((float) j + nproc - 1) / nproc; if ((j + nproc - 1) % 2 == 0 && nproc > 1) { compare = -((float) j + nproc - 2) / nproc; } if (((float *) a[i])[j] != compare) { printf("ERROR %s %s %s a[%d][%d] = %f != %f\n", test_type, "ARMCI_FLOAT", op, i, j, ((float *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "max", 3) == 0) { float compare = ((float) j + nproc - 1) / nproc; if ((j + nproc - 1) % 2 != 0 && nproc > 1) { compare = ((float) j + nproc - 2) / nproc; } if (((float *) a[i])[j] != compare) { printf("ERROR %s %s %s a[%d][%d] = %f != %f\n", test_type, "ARMCI_FLOAT", op, i, j, ((float *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "absmax", 6) == 0) { float compare = ((float) j + nproc - 1) / nproc; if (((float *) a[i])[j] != compare) { printf("ERROR %s %s %s a[%d][%d] = %f != %f\n", test_type, "ARMCI_FLOAT", op, i, j, ((float *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "absmin", 6) == 0) { float compare = (float) j / nproc; if (((float *) a[i])[j] != compare) { printf("ERROR %s %s %s a[%d][%d] = %f != %f\n", test_type, "ARMCI_FLOAT", op, i, j, ((float *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } } break; case ARMCI_DOUBLE: datatype_size = sizeof(double); for (i = 0; i < len_length; i++) { a[i] = malloc(len[i] * datatype_size); } for (i = 0; i < len_length; i++) for (j = 0; j < len[i]; j++) { ((double *) a[i])[j] = (double)(me + j) * (((me + j) % 2 == 0) ? 1.0 / nproc : -1.0 / nproc); } for (i = 0; i < len_length; i++) { if (me == 0 && verbose != 0) { printf("testing %s ARMCI_DOUBLE message size = %d op = %s\n", test_type, len[i], op); } if (reduce_test == 0) { armci_msg_dgop(a[i], len[i], op); } else { armci_msg_reduce(a[i], len[i], op, datatype); } } if (me == 0 || reduce_test == 0) for (i = 0; i < len_length; i++) { if (me == 0 && verbose != 0) { printf("checking %s ARMCI_DOUBLE message size = %d op = %s\n", test_type, len[i], op); } for (j = 0; j < len[i]; j++) if (strncmp(op, "+", 1) == 0) { double compare = 0.0; if (nproc % 2 == 0) { if (j % 2 == 0) { compare = -(((int)nproc / 2) / (double) nproc); } else { compare = ((int)nproc / 2) / (double) nproc; } } else { if (j % 2 == 0) { compare = ((int) j + nproc / 2) / (double) nproc; } else { compare = -(((int) j + nproc / 2) / (double) nproc); } } if (ARMCI_ABS(((double *) a[i])[j] - compare) > ARMCI_ABS(compare) * DOUBLE_EPS) { printf("ERROR %s %s %s a[%d][%d] = %f != %f\n", test_type, "ARMCI_DOUBLE", op, i, j, ((double *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "*", 1) == 0) { double compare = 1.0; int k = 0; for (k = 0; k < nproc; k++) { compare *= ((float) k + j) / (float) nproc; } if ((nproc / 2) % 2 != 0) if (nproc % 2 != 0) if (j % 2 == 0) { compare *= -1.0; } if (ARMCI_ABS(((double *) a[i])[j] - compare) > ARMCI_ABS(compare) * DOUBLE_EPS) { printf("ERROR %s %s %s a[%d][%d] = %f != %f\n", test_type, "ARMCI_DOUBLE", op, i, j, ((double *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "min", 3) == 0) { double compare = -((double) j + nproc - 1) / nproc; if ((j + nproc - 1) % 2 == 0 && nproc > 1) { compare = -((double) j + nproc - 2) / nproc; } if (ARMCI_ABS(((double *) a[i])[j] - compare) > ARMCI_ABS(compare) * DOUBLE_EPS) { printf("ERROR %s %s %s a[%d][%d] = %f != %f\n", test_type, "ARMCI_DOUBLE", op, i, j, ((double *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "max", 3) == 0) { double compare = ((double) j + nproc - 1) / nproc; if ((j + nproc - 1) % 2 != 0 && nproc > 1) { compare = ((double) j + nproc - 2) / nproc; } if (ARMCI_ABS(((double *) a[i])[j] - compare) > ARMCI_ABS(compare) * DOUBLE_EPS) { printf("ERROR %s %s %s a[%d][%d] = %f != %f\n", test_type, "ARMCI_DOUBLE", op, i, j, ((double *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "absmax", 6) == 0) { double compare = ((double) j + nproc - 1) / nproc; if (ARMCI_ABS(((double *) a[i])[j] - compare) > ARMCI_ABS(compare) * DOUBLE_EPS) { printf("ERROR %s %s %s a[%d][%d] = %f != %f\n", test_type, "ARMCI_DOUBLE", op, i, j, ((double *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } else if (strncmp(op, "absmin", 6) == 0) { double compare = (double) j / nproc; if (ARMCI_ABS(((double *) a[i])[j] - compare) > ARMCI_ABS(compare) * DOUBLE_EPS) { printf("ERROR %s %s %s a[%d][%d] = %f != %f\n", test_type, "ARMCI_DOUBLE", op, i, j, ((double *) a[i])[j], compare); ARMCI_Error("test_gop2_or_reduce failed\n", 0); } } } break; default: break; } for (i = 0; i < len_length; i++) { free(a[i]); } } void test_collective(const int datatype) { char *op[7] = {"+", "*", "min", "max", "absmax", "absmin", "or"}; int i = 0; int num_tests = 7; if (datatype == ARMCI_DOUBLE || datatype == ARMCI_FLOAT) { num_tests = 6; } /* test armci_msg_brdcst */ test_brdcst(datatype); /* test armci_msg_gop2 */ for (i = 0; i < num_tests; i++) { test_gop2_or_reduce(datatype, op[i], 0); } /* test armci_msg_reduce */ for (i = 0; i < num_tests; i++) { test_gop2_or_reduce(datatype, op[i], 1); } ARMCI_Barrier(); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("O.K.\n\n"); fflush(stdout); } } void test_acc_type(const int datatype) { int i = 0; int datatype_size = 0; void *scale; void *a; void *b[MAXPROC]; int elems = ELEMS; int dim = 1; int count = 0; int strideA = 0; int strideB = 0; switch (datatype) { case ARMCI_ACC_INT: datatype_size = sizeof(int); scale = malloc(datatype_size); *((int *) scale) = 1; a = malloc(elems * datatype_size); create_array((void **)b, datatype_size, dim, &elems); for (i = 0; i < elems; i++) { ((int *) a)[i] = i + me; ((int *) b[me])[i] = 0; } break; case ARMCI_ACC_LNG: datatype_size = sizeof(long); scale = malloc(datatype_size); *((long *) scale) = 1; a = malloc(elems * datatype_size); create_array((void **)b, datatype_size, dim, &elems); for (i = 0; i < elems; i++) { ((long *) a)[i] = i + me; ((long *) b[me])[i] = 0; } break; case ARMCI_ACC_FLT: datatype_size = sizeof(float); scale = malloc(datatype_size); *((float *) scale) = 1.0; a = malloc(elems * datatype_size); create_array((void **)b, datatype_size, dim, &elems); for (i = 0; i < elems; i++) { ((float *) a)[i] = (float) i + me; ((float *) b[me])[i] = 0.0; } break; case ARMCI_ACC_DBL: datatype_size = sizeof(double); scale = malloc(datatype_size); *((double *) scale) = 1.0; a = malloc(elems * datatype_size); create_array((void **)b, datatype_size, dim, &elems); for (i = 0; i < elems; i++) { ((double *) a)[i] = (double) i + me; ((double *) b[me])[i] = 0.0; } break; case ARMCI_ACC_CPL: datatype_size = sizeof(cmpl_t); scale = malloc(datatype_size); ((cmpl_t *) scale)->real = 2.0; ((cmpl_t *) scale)->imag = 1.0; a = malloc(elems * datatype_size); create_array((void **)b, datatype_size, dim, &elems); for (i = 0; i < elems; i++) { ((cmpl_t *) a)[i].real = ((float) i + me); ((cmpl_t *) a)[i].imag = ((float) i + me); ((cmpl_t *) b[me])[i].real = 0.0; ((cmpl_t *) b[me])[i].imag = 0.0; } break; case ARMCI_ACC_DCP: datatype_size = sizeof(dcmpl_t); scale = malloc(datatype_size); ((dcmpl_t *) scale)->real = 2.0; ((dcmpl_t *) scale)->imag = 1.0; a = malloc(elems * datatype_size); create_array((void **)b, datatype_size, dim, &elems); for (i = 0; i < elems; i++) { ((dcmpl_t *) a)[i].real = ((double) i + me); ((dcmpl_t *) a)[i].imag = ((double) i + me); ((dcmpl_t *) b[me])[i].real = 0.0; ((dcmpl_t *) b[me])[i].imag = 0.0; } break; default: return; break; } count = elems * datatype_size; strideA = elems * datatype_size; strideB = elems * datatype_size; ARMCI_AllFence(); ARMCI_Barrier(); for (i = 0; i < nproc; i++) { ARMCI_AccS(datatype, scale, a, &strideA, b[(me + i) % nproc], &strideB, &count, 0, (me + i) % nproc); } ARMCI_AllFence(); ARMCI_Barrier(); switch (datatype) { case ARMCI_ACC_INT: for (i = 0; i < elems; i++) { int compare = (i * nproc) + nproc / 2 * (nproc - 1); if (((int *)b[me])[i] != compare) { printf("ERROR accumulate ARMCI_ACC_INT [%d] = %d != %d\n", i, ((int *)b[me])[i], compare); ARMCI_Error("test_acc_type failed\n", 0); } } break; case ARMCI_ACC_LNG: for (i = 0; i < elems; i++) { long compare = (i * nproc) + nproc / 2 * (nproc - 1); if (((long *)b[me])[i] != compare) { printf("ERROR accumulate ARMCI_ACC_LNG [%d] = %d != %ld\n", i, ((int *)b[me])[i], compare); ARMCI_Error("test_acc_type failed\n", 0); } } break; case ARMCI_ACC_FLT: for (i = 0; i < elems; i++) { float compare = (float)((i * nproc) + nproc / 2 * (nproc - 1)); if (((float *)b[me])[i] != compare) { printf("ERROR accumulate ARMCI_ACC_FLT [%d] = %f != %f\n", i, ((float *)b[me])[i], compare); ARMCI_Error("test_acc_type failed\n", 0); } } break; case ARMCI_ACC_DBL: for (i = 0; i < elems; i++) { double compare = (double)((i * nproc) + nproc / 2 * (nproc - 1)); if (((double *)b[me])[i] != (double)((i * nproc) + nproc / 2 *(nproc - 1))) { printf("ERROR accumulate ARMCI_ACC_DBL [%d] = %f != %f \n", i, ((double *)b[me])[i], compare); ARMCI_Error("test_acc_type failed\n", 0); } } break; case ARMCI_ACC_CPL: for (i = 0; i < elems; i++) { float compare = (float)((i * nproc) + nproc / 2 * (nproc - 1)); if (((cmpl_t *)b[me])[i].real != compare && ((cmpl_t *)b[me])[i].imag != 3 * compare) { printf("ERROR accumulate ARMCI_ACC_CPL [%d] = %f + %fj != %f + %fj\n", i, ((cmpl_t *)b[me])[i].real, ((cmpl_t *)b[me])[i].imag, compare, 3 * compare); ARMCI_Error("test_acc_type failed\n", 0); } } break; case ARMCI_ACC_DCP: for (i = 0; i < elems; i++) { double compare = (double)((i * nproc) + nproc / 2 * (nproc - 1)); if (((dcmpl_t *)b[me])[i].real != compare && ((dcmpl_t *)b[me])[i].imag != 3 * compare) { printf("ERROR accumulate ARMCI_ACC_DCP [%d] = %f + %fj != %f + %fj\n", i, ((dcmpl_t *)b[me])[i].real, ((dcmpl_t *)b[me])[i].imag, compare, 3 * compare); ARMCI_Error("test_acc_type failed\n", 0); } } break; default: break; } ARMCI_Barrier(); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("O.K.\n\n"); fflush(stdout); } destroy_array((void **)b); free(a); free(scale); } int main(int argc, char *argv[]) { int i; struct timeval start_time[14]; struct timeval stop_time[14]; /* char * test_name[14] = { "dim", "nbdim", "vec_small", "acc", "vector", "vector_acc", "fetch_add", "swap", "rput", "aggregate", "implicit", "memlock", "acc_type", "collective" }; int test_flags[14] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1 }; */ char *test_name[2] = { "acc_type", "collective" }; int test_flags[2] = { 1, 1 }; #define TEST_ACC_TYPE 0 #define TEST_COLLECTIVE 1 armci_msg_init(&argc, &argv); ARMCI_Init_args(&argc, &argv); nproc = armci_msg_nproc(); me = armci_msg_me(); if (nproc > MAXPROC && me == 0) { ARMCI_Error("Test works for up to %d processors\n", MAXPROC); } if (me == 0) { printf("ARMCI test program (%d processes)\n", nproc); fflush(stdout); sleep(1); } gettimeofday(&start_time[TEST_ACC_TYPE], NULL); if (test_flags[TEST_ACC_TYPE] == 1) { if (me == 0) { printf("\nTesting Accumulate Types\n"); fflush(stdout); } ARMCI_Barrier(); if (me == 0) { printf("Test Accumulate ARMCI_ACC_INT\n"); fflush(stdout); } test_acc_type(ARMCI_ACC_INT); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("Test Accumulate ARMCI_ACC_LNG\n"); fflush(stdout); } test_acc_type(ARMCI_ACC_LNG); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("Test Accumulate ARMCI_ACC_FLT\n"); fflush(stdout); } test_acc_type(ARMCI_ACC_FLT); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("Test Accumulate ARMCI_ACC_DBL\n"); fflush(stdout); } test_acc_type(ARMCI_ACC_DBL); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("Test Accumulate ARMCI_ACC_CPL\n"); fflush(stdout); } test_acc_type(ARMCI_ACC_CPL); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("Test Accumulate ARMCI_ACC_DCP\n"); fflush(stdout); } test_acc_type(ARMCI_ACC_DCP); ARMCI_AllFence(); ARMCI_Barrier(); } gettimeofday(&stop_time[TEST_ACC_TYPE], NULL); gettimeofday(&start_time[TEST_COLLECTIVE], NULL); if (test_flags[TEST_COLLECTIVE] == 1) { if (me == 0) { printf("\nTesting Collective Types\n"); fflush(stdout); } if (me == 0) { printf("Test Collective ARMCI_INT\n"); fflush(stdout); } ARMCI_Barrier(); test_collective(ARMCI_INT); ARMCI_Barrier(); if (me == 0) { printf("Test Collective ARMCI_LONG\n"); fflush(stdout); } ARMCI_Barrier(); test_collective(ARMCI_LONG); ARMCI_Barrier(); if (me == 0) { printf("Test Collective ARMCI_FLOAT\n"); fflush(stdout); } ARMCI_Barrier(); test_collective(ARMCI_FLOAT); ARMCI_Barrier(); if (me == 0) { printf("Test Collective ARMCI_DOUBLE\n"); fflush(stdout); } ARMCI_Barrier(); test_collective(ARMCI_DOUBLE); ARMCI_Barrier(); } gettimeofday(&stop_time[TEST_COLLECTIVE], NULL); if (me == 0) { printf("Accumulate and Collective tests passed\n"); fflush(stdout); } if (me == 0) { printf("Testcase runtime\n"); printf("Name,Time(seconds)\n"); for (i = 0; i < 2; i++) if (test_flags[i] == 1) { double time_spent = (stop_time[i].tv_sec - start_time[i].tv_sec) + ((double) stop_time[i].tv_usec - start_time[i].tv_usec) / 1E6; printf("%s,%.6f\n", test_name[i], time_spent); } } ARMCI_Barrier(); ARMCI_Finalize(); armci_msg_finalize(); return(0); } ga-5-3/armci/testing/perf2.c0000640005473000001440000000712612122377263014541 0ustar d3n000users#include #include #include #include #include #include "armci.h" static int me; static int nproc; #define PUT 0 #define GET 1 #define ACC 2 #define MAX_MESSAGE_SIZE 1024*1024 #define MEDIUM_MESSAGE_SIZE 8192 #define ITER_SMALL 100 #define ITER_LARGE 100 #define WARMUP 10 static void fill_array(double *arr, int count, int which); static void contig_test(size_t buffer_size, int op); double dclock() { struct timeval tv; gettimeofday(&tv, NULL); return(tv.tv_sec * 1.0e6 + (double)tv.tv_usec); } int main(int argc, char **argv) { armci_msg_init(&argc,&argv); ARMCI_Init_args(&argc, &argv); me = armci_msg_me(); nproc = armci_msg_nproc(); /* This test only works for two processes */ assert(nproc == 2); if (0 == me) { printf("msg size (bytes) avg time (us) avg b/w (MB/sec)\n"); } if (0 == me) { printf("#PNNL comex Put Test\n"); } contig_test(MAX_MESSAGE_SIZE, PUT); if (0 == me) { printf("#PNNL comex Get Test\n"); } contig_test(MAX_MESSAGE_SIZE, GET); if (0 == me) { printf("#PNNL comex Accumulate Test\n"); } contig_test(MAX_MESSAGE_SIZE, ACC); ARMCI_Finalize(); armci_msg_finalize(); return 0; } static void fill_array(double *arr, int count, int which) { int i; for (i = 0; i < count; i++) { arr[i] = i * 8.23 + which * 2.89; } } static void contig_test(size_t buffer_size, int op) { void **dst_ptr; void **put_buf; void **get_buf; double *times; dst_ptr = (void*)malloc(nproc * sizeof(void*)); put_buf = (void*)malloc(nproc * sizeof(void*)); get_buf = (void*)malloc(nproc * sizeof(void*)); times = (double*)malloc(nproc * sizeof(double)); ARMCI_Malloc(dst_ptr, buffer_size); ARMCI_Malloc(put_buf, buffer_size); ARMCI_Malloc(get_buf, buffer_size); /* initialize what we're putting */ fill_array((double*)put_buf[me], buffer_size/sizeof(double), me); size_t msg_size; int dst = 1; double scale = 1.0; for (msg_size = 16; msg_size <= buffer_size; msg_size *= 2) { int j; int iter = msg_size > MEDIUM_MESSAGE_SIZE ? ITER_LARGE : ITER_SMALL; double t_start, t_end; if (0 == me) { for (j= 0; j < iter + WARMUP; ++j) { if (WARMUP == j) { t_start = dclock(); } switch (op) { case PUT: ARMCI_Put(put_buf[me], dst_ptr[dst], msg_size, dst); break; case GET: ARMCI_Get(dst_ptr[dst], get_buf[me], msg_size, dst); break; case ACC: ARMCI_Acc(ARMCI_ACC_DBL, &scale, put_buf[me], dst_ptr[dst], msg_size, dst); break; default: ARMCI_Error("oops", 1); } } } /* calculate total time and average time */ t_end = dclock(); ARMCI_Barrier(); if (0 == me) { printf("%8zu\t\t%6.2f\t\t%10.2f\n", msg_size, ((t_end - t_start))/iter, msg_size*iter/((t_end - t_start))); } } ARMCI_Free(dst_ptr[me]); ARMCI_Free(put_buf[me]); ARMCI_Free(get_buf[me]); free(dst_ptr); free(put_buf); free(get_buf); free(times); } ga-5-3/armci/testing/ipctest.c0000640005473000001440000000436112115436166015174 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: ipctest.c,v 1.2 1999-07-28 00:47:55 d3h325 Exp $ */ #if HAVE_STDIO_H # include #endif #include #if HAVE_ASSERT_H # include #endif #include "armcip.h" #include "shmem.h" #include "locks.h" #include "message.h" int me, nproc; void test() { double *a = NULL, start = 1., end = -1.; int len = 100; long size = len * sizeof(double); long idlist[SHMIDLEN]; int numlock = 10, i; lockset_t lockid; /* shared memory test */ if (me == 0) { printf("Test shared memory\n"); a = (double *)Create_Shared_Region(idlist + 1, size, idlist); assert(a); a[0] = start; a[len-1] = end; } MPI_Bcast(idlist, SHMIDLEN, MPI_LONG, 0, MPI_COMM_WORLD); if (me) { a = (double *)Attach_Shared_Region(idlist + 1, size, idlist[0]); assert(a); } if (me == nproc - 1) { printf("%d: start=%f end=%f\n", me, a[0], a[len-1]); if (a[0] == start && a[len-1] == end) { printf("Works!\n"); } } /*printf("%d: a=%x\n",me,a); */ MPI_Barrier(MPI_COMM_WORLD); /* allocate locks */ if (me == 0) { a[0] = 0.; CreateInitLocks(numlock, &lockid); printf("\nMutual exclusion test\n"); } MPI_Bcast(&lockid, sizeof(lockid), MPI_BYTE, 0, MPI_COMM_WORLD); if (me) { InitLocks(numlock, lockid); } /* mutual exclusion test: * everybody increments shared variable 1000 times */ # define TIMES 1000 MPI_Barrier(MPI_COMM_WORLD); for (i = 0; i < TIMES; i++) { NATIVE_LOCK(0, me); a[0]++; NATIVE_UNLOCK(0, me); } MPI_Barrier(MPI_COMM_WORLD); if (me == nproc - 1) { printf("value of shared variable =%f should be %f\n", a[0], 1.0 * nproc * TIMES); if (a[0] == 1.0 * nproc * TIMES) { printf("Works!\n\n"); } } /* cleanup of IPC resources */ if (me == 0) { DeleteLocks(lockid); Delete_All_Regions(); } MPI_Barrier(MPI_COMM_WORLD); } int main(int argc, char **argv) { armci_msg_init(&argc, &argv); ARMCI_Init_args(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &nproc); MPI_Comm_rank(MPI_COMM_WORLD, &me); if (me == 0) { printf("Testing IPCs (%d MPI processes)\n\n", nproc); } test(); ARMCI_Finalize(); armci_msg_finalize(); return 0; } ga-5-3/armci/testing/ptltest.c0000640005473000001440000000503611643376201015216 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #define FORK_BEFORE_NI_INIT #ifndef FORK_BEFORE_NI_INIT #define FORK_AFTER_NI_INIT #endif #ifndef PMI_SUCCESS #define PMI_SUCCESS 0 #endif extern int PMI_CNOS_Get_nidpid_map(void **); int main(int argc, char **argv, char **envp) { int i, ret, *npes; int num_interfaces; ptl_handle_ni_t nih; ptl_handle_eq_t eqh; ptl_ni_limits_t ptl_limits; pid_t child; ptl_process_id_t rnk, *procid_map; int spv, *spawned = &spv; if ((ret = PtlInit(&num_interfaces)) != PTL_OK) { printf("%s: PtlInit failed: %d\n", FUNCTION_NAME, ret); exit(1); } printf("%s: PtlInit succeeds (%d)\n", FUNCTION_NAME, ret); #ifdef FORK_BEFORE_NI_INIT child = fork(); #endif if ((ret = PtlNIInit(IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK, PTL_IFACE_SS), PTL_PID_ANY, NULL, &ptl_limits, &nih)) != PTL_OK) { printf("%s: PtlNIInit failed: %d\n", FUNCTION_NAME, ret); /*exit(1);*/ } else { printf("%s: PtlNIInit succeeds (%d)\n", FUNCTION_NAME, ret); } #ifdef FORK_AFTER_NI_INIT child = fork(); #endif if ((ret = PtlEQAlloc(nih, 4096, NULL, &eqh)) != PTL_OK) { printf("%s: PtlEQAlloc failed: %d(%d)\n", FUNCTION_NAME, ret, child); exit(1); } printf("%s: PtlEQAlloc succeeds (%d:%d)\n", FUNCTION_NAME, child, ret); #if 1 if (child) { MPI_Init(&argc, &argv); } if (child) { PMI_Init(spawned); printf("\n%d:spanwned=%d", child, *spawned); if ((ret = PMI_Get_size(npes)) != PMI_SUCCESS) { printf("%s: PMI_Get_size failed: %d\n", FUNCTION_NAME, ret); /*exit(1);*/ } else { printf("%s: PMI_Get_size succeeds (%d)\n", FUNCTION_NAME, *npes); } /*procid_map = (ptl_process_id_t *)malloc(sizeof(ptl_process_id_t)*(*npes)); if(procid_map==NULL)exit(1);*/ if ((ret = PMI_CNOS_Get_nidpid_map(&procid_map)) != PMI_SUCCESS) { printf("Getting proc map failed (npes=%d)\n", *npes); } for (i = 0; i < *npes; i++) { printf("\npid=%d nid=%d npes=%d(%d)", procid_map[i].pid, procid_map[i].nid, *npes, child); } } #endif if ((ret = PtlGetId(nih, &rnk)) != PTL_OK) { printf("%s: PtlGetId failed: %d(%d)\n", FUNCTION_NAME, ret, child); exit(1); } printf("%s: nid=%d pid=%d(%d)\n", FUNCTION_NAME, rnk.nid, rnk.pid, child); if (child) { MPI_Finalize(); printf("%s: mpi_init and finalize succeed(%d)\n", FUNCTION_NAME, child); } } ga-5-3/armci/testing/clone.c0000640005473000001440000000373611643376201014624 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #include #define FORK_BEFORE_NI_INIT #ifndef FORK_BEFORE_NI_INIT #define FORK_AFTER_NI_INIT #endif char child_stack[256*1024]; char *child_stack_top = &child_stack[256*1024-1]; int iv; int server(void *arg) { int ret; int num_interfaces; ptl_handle_ni_t nih; ptl_handle_eq_t eqh; ptl_ni_limits_t ptl_limits; ptl_event_t ev_t; ptl_event_t *ev = &ev_t; printf("IN SERVER\n"); if ((ret = PtlInit(&num_interfaces)) != PTL_OK) { printf("%s: PtlInit failed: %d\n", FUNCTION_NAME, ret); exit(1); } printf("%s: PtlInit succeeds (%d:%d)\n", FUNCTION_NAME, ret, num_interfaces); if (((ret = PtlNIInit( IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK, PTL_IFACE_SS), PTL_PID_ANY, NULL, &ptl_limits, &nih)) != PTL_OK) && (ret != PTL_IFACE_DUP)) { printf("%s: PtlNIInit failed: %d\n", FUNCTION_NAME, ret); exit(1); } printf("%s: PtlNIInit succeeds (%d)\n", FUNCTION_NAME, ret); if ((ret = PtlEQAlloc(nih, 4096, NULL, &eqh)) != PTL_OK) { printf("%s: PtlEQAlloc failed: %d\n", FUNCTION_NAME, ret); exit(1); } iv = 11; ret = PtlEQWait(nih, ev); printf("%s: PtlEQAlloc succeeds\n", FUNCTION_NAME); printf("%d\n", iv); iv = 13; while (1); } int main(int argc, char **argv, char **envp) { int ret; pid_t child; int status; iv = 12; child = clone(server, (void *)child_stack_top, CLONE_THREAD | CLONE_SIGHAND | CLONE_VM, NULL); if (child == -1) { perror("clone"); exit(1); } printf("clone returns...(ret=%d)\n", child); while (iv != 11); printf("\nbetween after %d\n", iv); MPI_Init(&argc, &argv); MPI_Barrier(MPI_COMM_WORLD); MPI_Finalize(); printf("waiting...\n"); waitpid(-1, &status, __WALL); printf("\nafter %d\n", iv); printf("done (%d)\n", status); } ga-5-3/armci/testing/testnotify.c0000640005473000001440000002616312123157574015737 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: testnotify.c,v 1.4 2003-08-21 22:51:12 d3h325 Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include # define sleep(x) Sleep(1000*(x)) #endif #define DEBUG__ #include "armci.h" #include "message.h" #define DIM1 5 #define DIM2 3 #ifdef __sun /* Solaris has shared memory shortages in the default system configuration */ # define DIM3 6 # define DIM4 5 # define DIM5 4 #elif defined(__alpha__) # define DIM3 8 # define DIM4 5 # define DIM5 6 #else # define DIM3 8 # define DIM4 9 # define DIM5 7 #endif #define DIM6 3 #define DIM7 2 #define OFF 1 #define EDIM1 (DIM1+OFF) #define EDIM2 (DIM2+OFF) #define EDIM3 (DIM3+OFF) #define EDIM4 (DIM4+OFF) #define EDIM5 (DIM5+OFF) #define EDIM6 (DIM6+OFF) #define EDIM7 (DIM7+OFF) #define DIMS 4 #define MAXDIMS 7 #define MAX_DIM_VAL 50 #define LOOP 200 #define BASE 100. #define MAXPROC 128 #define TIMES 100 #ifdef CRAY # define ELEMS 800 #else # define ELEMS 200 #endif /***************************** macros ************************/ #define COPY(src, dst, bytes) memcpy((dst),(src),(bytes)) #define ARMCI_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define ARMCI_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define ARMCI_ABS(a) (((a) <0) ? -(a) : (a)) /***************************** global data *******************/ int me, nproc; void *work[MAXPROC]; /* work array for propagating addresses */ #ifdef PVM void pvm_init(int argc, char *argv[]) { int mytid, mygid, ctid[MAXPROC]; int np, i; mytid = pvm_mytid(); if ((argc != 2) && (argc != 1)) { goto usage; } if (argc == 1) { np = 1; } if (argc == 2) if ((np = atoi(argv[1])) < 1) { goto usage; } if (np > MAXPROC) { goto usage; } mygid = pvm_joingroup(MPGROUP); if (np > 1) if (mygid == 0) { i = pvm_spawn(argv[0], argv + 1, 0, "", np - 1, ctid); } while (pvm_gsize(MPGROUP) < np) { sleep(1); } /* sync */ pvm_barrier(MPGROUP, np); printf("PVM initialization done!\n"); return; usage: fprintf(stderr, "usage: %s \n", argv[0]); pvm_exit(); exit(-1); } #endif /*\ generate random range for a section of multidimensional array \*/ void get_range(int ndim, int dims[], int lo[], int hi[]) { int dim; for (dim = 0; dim < ndim; dim++) { int toss1, toss2; toss1 = rand() % dims[dim]; toss2 = rand() % dims[dim]; if (toss1 < toss2) { lo[dim] = toss1; hi[dim] = toss2; } else { hi[dim] = toss1; lo[dim] = toss2; } } } /*\ generates a new random range similar to the input range for an array with specified dimensions \*/ void new_range(int ndim, int dims[], int lo[], int hi[], int new_lo[], int new_hi[]) { int dim; for (dim = 0; dim < ndim; dim++) { int toss, range; int diff = hi[dim] - lo[dim] + 1; assert(diff <= dims[dim]); range = dims[dim] - diff; toss = (range > 0) ? rand() % range : lo[dim]; new_lo[dim] = toss; new_hi[dim] = toss + diff - 1; assert(new_hi[dim] < dims[dim]); assert(diff == (new_hi[dim] - new_lo[dim] + 1)); } } /*\ print range of ndim dimensional array with two strings before and after \*/ void print_range(char *pre, int ndim, int lo[], int hi[], char *post) { int i; printf("%s[", pre); for (i = 0; i < ndim; i++) { printf("%d:%d", lo[i], hi[i]); if (i == ndim - 1) { printf("] %s", post); } else { printf(","); } } } /*\ print subscript of ndim dimensional array with two strings before and after \*/ void print_subscript(char *pre, int ndim, int subscript[], char *post) { int i; printf("%s [", pre); for (i = 0; i < ndim; i++) { printf("%d", subscript[i]); if (i == ndim - 1) { printf("] %s", post); } else { printf(","); } } } /*\ print a section of a 2-D array of doubles \*/ void print_2D_double(double *a, int ld, int *lo, int *hi) { int i, j; for (i = lo[0]; i <= hi[0]; i++) { for (j = lo[1]; j <= hi[1]; j++) { printf("%13f ", a[ld*j+i]); } printf("\n"); } } /*\ initialize array: a[i,j,k,..]=i+100*j+10000*k+ ... \*/ void init(double *a, int ndim, int elems, int dims[]) { int idx[MAXDIMS]; int i, dim; for (i = 0; i < elems; i++) { int Index = i; double field, val; for (dim = 0; dim < ndim; dim++) { idx[dim] = Index % dims[dim]; Index /= dims[dim]; } field = 1.; val = 0.; for (dim = 0; dim < ndim; dim++) { val += field * idx[dim]; field *= BASE; } a[i] = val; /* printf("(%d,%d,%d)=%6.0f",idx[0],idx[1],idx[2],val); */ } } /*\ compute Index from subscript * assume that first subscript component changes first \*/ int Index(int ndim, int subscript[], int dims[]) { int idx = 0, i, factor = 1; for (i = 0; i < ndim; i++) { idx += subscript[i] * factor; factor *= dims[i]; } return idx; } void update_subscript(int ndim, int subscript[], int lo[], int hi[], int dims[]) { int i; for (i = 0; i < ndim; i++) { if (subscript[i] < hi[i]) { subscript[i]++; return; } subscript[i] = lo[i]; } } void compare_patches(double eps, int ndim, double *patch1, int lo1[], int hi1[], int dims1[], double *patch2, int lo2[], int hi2[], int dims2[]) { int i, j, elems = 1; int subscr1[MAXDIMS], subscr2[MAXDIMS]; double diff, max; int idx1, idx2, offset1, offset2; for (i = 0; i < ndim; i++) { /* count # of elements & verify consistency of both patches */ int diff = hi1[i] - lo1[i]; assert(diff == (hi2[i] - lo2[i])); assert(diff < dims1[i]); assert(diff < dims2[i]); elems *= diff + 1; subscr1[i] = lo1[i]; subscr2[i] = lo2[i]; } /* compare element values in both patches */ for (j = 0; j < elems; j++) { idx1 = Index(ndim, subscr1, dims1); /* calculate element Index from a subscript */ idx2 = Index(ndim, subscr2, dims2); if (j == 0) { offset1 = idx1; offset2 = idx2; } idx1 -= offset1; idx2 -= offset2; diff = patch1[idx1] - patch2[idx2]; max = ARMCI_MAX(ARMCI_ABS(patch1[idx1]), ARMCI_ABS(patch2[idx2])); if (max == 0. || max < eps) { max = 1.; } if (eps < ARMCI_ABS(diff) / max) { char msg[48]; sprintf(msg, "(proc=%d):%f", me, patch1[idx1]); print_subscript("ERROR: a", ndim, subscr1, msg); sprintf(msg, "%f\n", patch2[idx2]); print_subscript(" b", ndim, subscr2, msg); fflush(stdout); sleep(1); ARMCI_Error("Bailing out", 0); } { /* update subscript for the patches */ update_subscript(ndim, subscr1, lo1, hi1, dims1); update_subscript(ndim, subscr2, lo2, hi2, dims2); } } /* make sure we reached upper limit */ /*for(i=0;i1 takes a partial plane */ /* create shared and local arrays */ create_array(b, sizeof(double), ndim, dimsB); create_array(a, sizeof(double), ndim, dimsB); elems = get_elems(ndim, stride, dimsB, sizeof(double)); init((double *)a[me], ndim, elems, dimsB); for (i = 0; i < ndim; i++) { lo[i] = 0; hi[i] = (less > dimsB[i]) ? dimsB[i] - 1 : dimsB[i] - less; count[i] = hi[i] - lo[i] + 1; } count[0] *= sizeof(double); for (i = 0; i < ndim - 1; i++) { Idx *= dimsB[i]; } ARMCI_Barrier(); if (me == 0) { printf("--------array[%d", dimsB[0]); for (dim = 1; dim < ndim; dim++) { printf(",%d", dimsB[dim]); } printf("]--------\n"); fflush(stdout); } ARMCI_Barrier(); loopcnt = (ndim > 1) ? dimsB[ndim-1] : 1; strl = (ndim > 1) ? ndim - 2 : 0; /* strides of the subpatch to transfer */ for (i = 0; i < loopcnt; i++) { int wc; if (me == 0) { ARMCI_PutS((double *)a[me] + idx, stride, (double *)b[left] + idx, stride, count, strl, left); #if DEBUG_ printf("%d-%d: ps=%p pd=%p i=%d idx=%d count=%d\n", me, left, (double *) a[me] + idx, (double *)b[left] + idx, i, idx, count[0]); fflush(stdout); #endif (void)armci_notify(left); (void)armci_notify_wait(right, &wc); } else { (void)armci_notify_wait(right, &wc); ARMCI_PutS((double *)b[me] + idx, stride, (double *)b[left] + idx, stride, count, strl, left); #if DEBUG_ printf("%d: ps=%p pd=%p i=%d idx=%d count=%d\n", me, (double *)b[me] + idx, (double *)b[left] + idx, i, idx, count[0]); fflush(stdout); #endif (void)armci_notify(left); } idx += Idx; /* advance to the next slab */ } ARMCI_Barrier(); if (me == 0) { compare_patches(0., ndim, (double *)a[0], lo, hi, dimsB, (double *)b[0], lo, hi, dimsB); printf("OK\n"); } ARMCI_Barrier(); destroy_array(b); destroy_array(a); } int main(int argc, char *argv[]) { int ndim; armci_msg_init(&argc, &argv); ARMCI_Init_args(&argc, &argv); nproc = armci_msg_nproc(); me = armci_msg_me(); ARMCI_Barrier(); if (me == 0) { printf("\nTesting armci_notify\n"); fflush(stdout); sleep(1); } ARMCI_Barrier(); for (ndim = 1; ndim <= MAXDIMS; ndim++) { test_notify(ndim); } ARMCI_Barrier(); ARMCI_Finalize(); armci_msg_finalize(); return(0); } ga-5-3/armci/testing/test_mt.c0000640005473000001440000003762112115436166015205 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: test_mt.c,v 1.1.2.1 2007-07-02 05:34:13 d3p687 Exp $ * test_mt.c * * Developed by Andriy Kot * Copyright (c) 2007 Pacific Northwest National Laboratory * * Changelog: * 2007-02-17 - created * */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STDARG_H # include #endif #if HAVE_ASSERT_H # include #endif #include "armci.h" #include "message.h" #include "utils.h" #define DEBUG /* note: a TBUFSIZE (per thread) buffer is used to print arrays */ #define TBUFSIZE 65535 /* prints debug information to files named test_mt.th<#th_rank>*/ /*#define LOG2FILE*/ #define NOTHREADS_ /* debug: does not spawn threads if set */ typedef double atype_t; /* type of the element of the array */ #define MAX_TPP 8 /* max treads per processor */ #define TPP 1//2 /* threads per processor */ #define ASIZE 4//5000 /* size of array */ #define ITERS 1//10 /* iterations per test */ enum {PUT = 101, GET, ACC}; int tpp = TPP; int asize = ASIZE; int iters = ITERS; int delay = 0; double scale = 2.0; #define THREAD_OFF 1000.0 #define ITER_OFF 10.0 #define ELEM_INC 0.0003 /* each ARMCI mem block that allocated consists of * th_size blocks, one per each thread (systemwide), which consist of * iters blocks, one per each iteration, which consist of * asize doubles (or atype_t) */ #define ASIZE_BYTES (asize*sizeof(atype_t)) #define ASIZExITERS (asize*iters) #define ASIZExITERS_BYTES (ASIZE_BYTES*iters) #define ASIZExITERSxTH (asize*iters*th_size) #define ASIZExITERSxTH_BYTES (ASIZE_BYTES*iters*th_size) /* p_ - pointer (points to area owned by particula thread) * th_ - thread section * it_ - iteration * i_ - element offset (0 for beginning of array) */ #define AELEM(p_,th_,it_,i_) ((atype_t *)p_)[th_*ASIZExITERS+it_*asize+i_] #define AELEM_VAL(th_,it_,i_) (THREAD_OFF*th_+ITER_OFF*it_+ELEM_INC*(i_+1)) int rank, size, th_size; int th_rank[MAX_TPP]; unsigned time_seed; int *pairs, *rnd_tgts, rnd_one; void **ptrs1, **ptrs2; FILE *dbg[MAX_TPP]; char fname[] = "test_mt.th000"; char cbuf[2048]; int cbufl; #define PRINTF0 if(!rank)printf #define PRINTF0T if(!TH_ME)printf #define RND(l_,h_) (l_+(int)(((double)h_)*rand()/(RAND_MAX+((double)l_)))) #define TH_ME (th_rank[th_idx]) void prndbg(int th_idx, char *fmt, ...) { #ifdef DEBUG va_list ap; va_start(ap, fmt); #ifdef LOG2FILE # define DSCR dbg[th_idx] #else # define DSCR stdout printf("%3d: ", TH_ME); #endif vfprintf(DSCR, fmt, ap); fflush(DSCR); va_end(ap); #endif } void usage() { if (!rank) { printf("Usage: test_mt, or \n"); printf(" test_mt -tTHREADS_PER_PROC -sARRAY_SIZE -iITERATIONS_COUNT\n"); } ARMCI_Barrier(); armci_msg_finalize(); exit(0); } void *thread_main(void *arg); void zero_array(int th_idx, void *ptr); void init_array(int th_idx, void *ptr); void print_array(int th_idx, char *msg, atype_t *array); void test_pairs(int th_idx); // deprecated? void test_PutGetAcc(int th_idx, int tgt, int *rmt, int rmt_cnt); void check_PutGetAcc(int th_idx, int rmt, int op, atype_t *array); int main(int argc, char *argv[]) { int ch; extern char *optarg; int i, j, r; thread_t threads[MAX_TPP]; /* init ARMCI */ armci_msg_init(&argc, &argv); ARMCI_Init_args(&argc, &argv); size = armci_msg_nproc(); rank = armci_msg_me(); while ((ch = getopt(argc, argv, "t:s:i:d:h")) != -1) { switch (ch) { case 't': /* # of threads */ tpp = atoi(optarg); if (tpp < 1 || tpp > MAX_TPP) { PRINTF0("\"%s\" is improper value for -t, should be a " "number between 1 and %d(MAX_TPP)\n", optarg, MAX_TPP); usage(); } break; case 'i': /* # of iterations */ iters = atoi(optarg); if (iters < 1) { PRINTF0("\"%s\" is improper value for -t, should be a " "number equal or larger than 1\n", optarg); usage(); } break; case 's': /* # of elements in the array */ asize = atoi(optarg); if (iters < 1) { PRINTF0("\"%s\" is improper value for -s, should be a " "number equal or larger than 1\n", optarg); usage(); } break; case 'd': delay = atoi(optarg); break; /* delay before start */ case 'h': usage(); break; /* print usage info */ } } #ifdef NOTHREADS tpp = 1; PRINTF0("Warning: NOTHREADS debug symbol is set -- running w/o threads\n"); #endif th_size = size * tpp; PRINTF0("\nTest of multi-threaded capabilities:\n" "%d threads per process (%d threads total),\n" "%d array elements of size %d,\n" "%d iteration(s)\n\n", tpp, th_size, asize, sizeof(atype_t), iters); if (delay) { printf("%d: %d\n", rank, getpid()); fflush(stdout); sleep(delay); ARMCI_Barrier(); } TH_INIT(size, tpp); for (i = 0; i < tpp; i++) { th_rank[i] = rank * tpp + i; } #if defined(DEBUG) && defined(LOG2FILE) for (i = 0; i < tpp; i++) { fname[10] = '0' + th_rank[i] / 100; fname[11] = '0' + th_rank[i] % 100 / 10; fname[12] = '0' + th_rank[i] % 10; dbg[i] = fopen(fname, "w"); } #endif for (i = 0; i < tpp; i++) { prndbg(i, "proc %d, thread %d(%d):\n", rank, i, th_rank[i]); } /* set global seed (to ensure same random sequence across procs) */ time_seed = (unsigned)time(NULL); armci_msg_brdcst(&time_seed, sizeof(time_seed), 0); srand(time_seed); rand(); prndbg(0, "seed = %u\n", time_seed); /* random pairs */ pairs = calloc(th_size, sizeof(int)); for (i = 0; i < th_size; i++) { pairs[i] = -1; } for (i = 0; i < th_size; i++) { if (pairs[i] != -1) { continue; } r = RND(0, th_size); while (i == r || pairs[r] != -1) { r = RND(0, th_size); } pairs[i] = r; pairs[r] = i; } for (i = 0, cbufl = 0; i < th_size; i++) cbufl += sprintf(cbuf + cbufl, " %d->%d|%d->%d", i, pairs[i], pairs[i], pairs[pairs[i]]); prndbg(0, "random pairs:%s\n", cbuf); /* random targets */ rnd_tgts = calloc(th_size, sizeof(int)); for (i = 0, cbufl = 0; i < th_size; i++) { rnd_tgts[i] = RND(0, th_size); if (rnd_tgts[i] == i) { i--; continue; } cbufl += sprintf(cbuf + cbufl, " %d", rnd_tgts[i]); } prndbg(0, "random targets:%s\n", cbuf); /* random one */ rnd_one = RND(0, th_size); prndbg(0, "random one = %d\n", rnd_one); assert(ptrs1 = calloc(th_size, sizeof(void *))); assert(ptrs2 = calloc(th_size, sizeof(void *))); #ifdef NOTHREADS thread_main((void *)(long)0); #else for (i = 0; i < tpp; i++) { THREAD_CREATE(threads + i, thread_main, (void *)(long)i); } for (i = 0; i < tpp; i++) { THREAD_JOIN(threads[i], NULL); } #endif ARMCI_Barrier(); PRINTF0("Tests Completed\n"); /* clean up */ #if defined(DEBUG) && defined(LOG2FILE) for (i = 0; i < tpp; i++) { fclose(dbg[i]); } #endif ARMCI_Finalize(); TH_FINALIZE(); armci_msg_finalize(); return 0; } void *thread_main(void *arg) { int th_idx, i; int tgt, *rmt, rmt_cnt; th_idx = (int)(long)arg; prndbg(th_idx, "thread %d(%d|%d) STARTED\n", TH_ME, rank, th_idx); assert(!ARMCI_MALLOC_MT(ptrs1, ASIZExITERSxTH_BYTES)); assert(!ARMCI_MALLOC_MT(ptrs2, ASIZExITERSxTH_BYTES)); #if 0 for (i = 0, cbufl = 0; i < th_size; i++) { cbufl += sprintf(cbuf + cbufl, " %p", ptrs1[i]); } prndbg(th_idx, "ptrs1: %s\n", cbuf); for (i = 0, cbufl = 0; i < th_size; i++) { cbufl += sprintf(cbuf + cbufl, " %p", ptrs2[i]); } prndbg(th_idx, "ptrs2: %s\n", cbuf); #endif #if 0 init_array(th_idx, ptrs1[TH_ME]); init_array(th_idx, ptrs2[TH_ME]); #endif assert(rmt = calloc(th_size, sizeof(int))); PRINTF0T(" TESTING GET/PUT/ACC\n\n"); /* test pairs */ PRINTF0T("> Testing pair-wise communication pattern ...\n"); tgt = rmt[0] = pairs[TH_ME]; rmt_cnt = 1; test_PutGetAcc(th_idx, tgt, rmt, rmt_cnt); PRINTF0T(" pair-wise is OK\n\n"); //return NULL; // REMOVE WHEN DONE /* test random target */ PRINTF0T("> Testing random target communication pattern ...\n"); tgt = rnd_tgts[TH_ME]; for (i = 0, rmt_cnt = 0; i < th_size; i++) if (rnd_tgts[i] == TH_ME) { rmt[rmt_cnt++] = i; } test_PutGetAcc(th_idx, tgt, rmt, rmt_cnt); PRINTF0T(" random target is OK\n\n"); /* test all to one */ PRINTF0T("> Testing hotspot(all to one) communication pattern ...\n"); if (TH_ME == rnd_one) { tgt = -1; for (i = 0, rmt_cnt = 0; i < th_size; i++) if (i != TH_ME) { rmt[rmt_cnt++] = i; } } else { tgt = rnd_one; rmt_cnt = 0; } test_PutGetAcc(th_idx, tgt, rmt, rmt_cnt); PRINTF0T(" hotspot is OK\n\n"); free(rmt); } void zero_array(int th_idx, void *ptr) { int i, j, k; for (i = 0; i < th_size; i++)for (j = 0; j < iters; j++)for (k = 0; k < asize; k++) { AELEM(ptr, i, j, k) = 0.0; } } void init_array(int th_idx, void *ptr) { int i, j, k; for (i = 0; i < th_size; i++)for (j = 0; j < iters; j++)for (k = 0; k < asize; k++) { AELEM(ptr, i, j, k) = AELEM_VAL(TH_ME, j, k); } /*AELEM(ptr, i, j) = THREAD_OFF*TH_ME + ITER_OFF*i + ELEM_INC*(j+1);*/ print_array(th_idx, "initialized", ptr); #if 0 # if 1 for (i = 0, cbufl = 0; i < th_size; i++) { for (j = 0; j < iters; j++) { cbufl += sprintf(cbuf + cbufl, "(%d,%d)%p:", i, j, &(((atype_t *)ptr)[i*ASIZExITERS+j*asize])); for (k = 0; k < asize; k++) { cbufl += sprintf(cbuf + cbufl, " %.4f", ((atype_t *)ptr)[i*ASIZExITERS+j*asize+k]); } cbufl += sprintf(cbuf + cbufl, "\n"); } cbufl += sprintf(cbuf + cbufl, "\n"); } # else for (i = 0, cbufl = 0; i < (th_size * iters * asize); i++) { cbufl += sprintf(cbuf + cbufl, " %.4f", ((atype_t *)ptr)[i]); } # endif prndbg(th_idx, "initialized:\n%s\n", cbuf); #endif } void print_array(int th_idx, char *msg, atype_t *array) { #ifdef DEBUG int i, j, k, tbufl; char tbuf[TBUFSIZE]; if (ASIZExITERSxTH_BYTES > TBUFSIZE / 2) { prndbg(th_idx, "%s:\n%s\n", msg, "array is too big to print"); } for (i = 0, tbufl = 0; i < th_size; i++) { for (j = 0; j < iters; j++) { tbufl += sprintf(tbuf + tbufl, "(%d,%d)%p:", i, j, &AELEM(array, i, j, 0)); for (k = 0; k < asize; k++) { tbufl += sprintf(tbuf + tbufl, " %.4f", AELEM(array, i, j, k)); } tbufl += sprintf(tbuf + tbufl, "\n"); } tbufl += sprintf(tbuf + tbufl, "\n"); } prndbg(th_idx, "%s:\n%s\n", msg, tbuf); #endif } /* void print_array(int th_idx, char *msg, atype_t *array, int count) { #ifdef DEBUG int i; for (i = 0, cbufl = 0; i < count; i++) cbufl+=sprintf(cbuf+cbufl, " %.4f", array[i]); prndbg(th_idx, "%s:%s\n", msg, cbuf); #endif } */ int check_result(atype_t *array, int th) { int i, j, k, mismatch; for (i = 0, k = 0, mismatch; i < iters; i++) for (j = 0; j < asize; j++, k++) { if (array[k] != AELEM_VAL(th, i, j)) { printf("mismatch detected: th=%d, i=%d, j=%d, k=%d, elem=%d, array=%d\n", th, i, j, k, AELEM_VAL(th, i, j), array[k]); fflush(stdout); abort(); } } } void test_pairs(int th_idx) { int rem_th, rem_proc; int i, j; void *src, *dst; rem_th = pairs[TH_ME]; rem_proc = TH2PROC(rem_th); prndbg(th_idx, "test_pair: %d<->%d(%d)\n", TH_ME, rem_th, rem_proc); MT_BARRIER(); #if 0 print_array(th_idx, "before", &AELEM(ptrs2[TH_ME], rem_th, 0, 0), ASIZExITERS); #endif for (i = 0; i < iters; i++) { /* src - addr of my thread block on remote proc/thread */ src = &AELEM(ptrs1[rem_th], TH_ME, i, 0); /* src - addr of remote thread block on my proc/thread */ dst = &AELEM(ptrs2[TH_ME], rem_th, i, 0); /* get from my pair */ assert(!ARMCI_Get(src, dst, ASIZE_BYTES, rem_proc)); } MT_BARRIER(); #if 0 print_array(th_idx, "rcvd", &AELEM(ptrs2[TH_ME], rem_th, 0, 0), ASIZExITERS); #endif /* check results */ check_result(&AELEM(ptrs2[TH_ME], rem_th, 0, 0), rem_th); } /* test Put/Get/Acc sequence regardless of communication pattern * tgt -- remote target for put/get/acc (none if -1) * rmt -- list of remote thread that put/acc to here (correctness is cheked here) * rmt_cnt -- # of threads in rmt */ void test_PutGetAcc(int th_idx, int tgt, int *rmt, int rmt_cnt) { /* a - local thread, b - remote thread */ int a, b, b_proc, stride[2], count[2]; int i, j; void *src, *dst; #ifdef DEBUG for (i = 0, cbufl = 0; i < rmt_cnt; i++) { cbufl += sprintf(cbuf + cbufl, " %d", rmt[i]); } prndbg(th_idx, "test_PutGetAcc: put/acc to %d, get from %d, check put/acc from %s\n", tgt, tgt, rmt_cnt ? cbuf : "none"); #endif a = TH_ME; stride[0] = ASIZE_BYTES; count[0] = ASIZE_BYTES; count[1] = 1; /* init arrays */ init_array(th_idx, ptrs1[TH_ME]); init_array(th_idx, ptrs2[TH_ME]); MT_BARRIER(); /* put - put a.ptrs1[b] into b.ptrs2[a] */ if (tgt != -1) { b = tgt; b_proc = TH2PROC(b); for (i = 0; i < iters; i++) { src = &AELEM(ptrs1[a], b, i, 0); /* a.ptrs1[b] */ dst = &AELEM(ptrs2[b], a, i, 0); /* b.ptrs2[a] */ // assert(!ARMCI_Put(src, dst, ASIZE_BYTES, b_proc)); assert(!ARMCI_PutS(src, stride, dst, stride, count, 1, b_proc)); } ARMCI_Fence(b_proc); } MT_BARRIER(); print_array(th_idx, "PUT:ptrs1[TH_ME]", ptrs1[TH_ME]); print_array(th_idx, "PUT:ptrs2[TH_ME]", ptrs2[TH_ME]); MT_BARRIER(); /* chk put(s) from b(s): a.ptrs2[b] */ for (j = 0; j < rmt_cnt; j++) { b = rmt[j]; b_proc = TH2PROC(b); check_PutGetAcc(th_idx, b, PUT, &AELEM(ptrs2[a], b, 0, 0)); } //return; // REMOVE WHEN DONE /* init arrays */ init_array(th_idx, ptrs1[TH_ME]); init_array(th_idx, ptrs2[TH_ME]); MT_BARRIER(); /* get - get b.ptrs1[a] into a.ptrs2[b] */ if (tgt != -1) { b = tgt; b_proc = TH2PROC(b); for (i = 0; i < iters; i++) { src = &AELEM(ptrs1[b], a, i, 0); /* b.ptrs1[a] */ dst = &AELEM(ptrs2[a], b, i, 0); /* a.ptrs2[b] */ assert(!ARMCI_GetS(src, stride, dst, stride, count, 1, b_proc)); } } print_array(th_idx, "GET:ptrs1[TH_ME]", ptrs1[TH_ME]); print_array(th_idx, "GET:ptrs2[TH_ME]", ptrs2[TH_ME]); MT_BARRIER(); /* chk get from b: a.ptrs2[b] */ if (tgt != -1) { check_PutGetAcc(th_idx, b, GET, &AELEM(ptrs2[a], b, 0, 0)); } #if 1 /* init arrays */ init_array(th_idx, ptrs1[TH_ME]); init_array(th_idx, ptrs2[TH_ME]); MT_BARRIER(); /* acc - acc a.ptrs1[b] * scale + b.ptrs2[a] into b.ptrs2[a] */ if (tgt != -1) { b = tgt; b_proc = TH2PROC(b); for (i = 0; i < iters; i++) { src = &AELEM(ptrs1[a], b, i, 0); /* a.ptrs1[b] */ dst = &AELEM(ptrs2[b], a, i, 0); /* b.ptrs2[a] */ assert(!ARMCI_AccS(ARMCI_ACC_DBL, &scale, src, stride, dst, stride, count, 1, b_proc)); } ARMCI_Fence(b_proc); } MT_BARRIER(); print_array(th_idx, "ACC:ptrs1[TH_ME]", ptrs1[TH_ME]); print_array(th_idx, "ACC:ptrs2[TH_ME]", ptrs2[TH_ME]); MT_BARRIER(); /* chk acc(s) from b(s): a.ptrs2[b] */ for (j = 0; j < rmt_cnt; j++) { b = rmt[j]; b_proc = TH2PROC(b); check_PutGetAcc(th_idx, b, ACC, &AELEM(ptrs2[a], b, 0, 0)); } #endif MT_BARRIER(); } void check_PutGetAcc(int th_idx, int rmt, int op, atype_t *array) { int i, j, k; double expected; for (i = 0, k = 0; i < iters; i++) for (j = 0; j < asize; j++, k++) { expected = op == ACC ? AELEM_VAL(TH_ME, i, j) + scale * AELEM_VAL(rmt, i, j) : AELEM_VAL(rmt, i, j); if (array[k] != expected) { printf("mismatch detected: TM_ME=%d, rmt=%d, op=%d, i=%d, j=%d, " "k=%d, expected=%f, array=%f\n", TH_ME, rmt, op, i, j, k, expected, array[k]); fflush(stdout); sleep(5); abort(); } #if 0 if (array[k] != AELEM_VAL(th, i, j)) { printf("mismatch detected: th=%d, i=%d, j=%d, k=%d, elem=%d, array=%d\n", th, i, j, k, AELEM_VAL(th, i, j), array[k]); fflush(stdout); sleep(10); abort(); } #endif } } ga-5-3/armci/testing/te.c0000640005473000001440000000145711643376201014132 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #include #include #include int variable, fd; int do_something() { variable = 42; close(fd); _exit(0); } int main(int argc, char *argv[]) { void **child_stack; char tempch; variable = 9; fd = open("test.file", O_RDONLY); child_stack = (void **) malloc(16384); printf("The variable was %d\n", variable); clone(do_something, child_stack, CLONE_VM | CLONE_FILES, NULL); sleep(1); printf("The variable is now %d\n", variable); if (read(fd, &tempch, 1) < 1) { perror("File Read Error"); exit(1); } printf("We could read from the file\n"); return 0; } ga-5-3/armci/testing/msgcheck.c0000640005473000001440000001101712115436166015301 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #include "armci.h" #include "message.h" #define armci_msg_brdcst__ armci_msg_bcast_lapi int me, nproc; #define LOOP 20 void time_gop(double *test, int len) { int i; double t; t = armci_timer(); for (i = 0; i < LOOP; i++) { armci_msg_dgop(test, len, "+"); } t = armci_timer() - t; t /= LOOP; if (me == 0) { printf("Time per gop %f len=%d doubles\n", t, len); fflush(stdout); } } void time_reduce(double *test, int len) { int i; double t; t = armci_timer(); for (i = 0; i < LOOP; i++) { armci_msg_reduce(test, len, "+", ARMCI_DOUBLE); } t = armci_timer() - t; t /= LOOP; if (me == 0) { printf("Time per reduce %f len=%d doubles\n", t, len); fflush(stdout); } } void TestGlobals() { #define MAXLENG 256*1024 double *dtest; int *itest; long *ltest; int len; int ifrom = nproc - 1, lfrom = 1, dfrom = 1; if (me == 0) { printf("Global test ... broadcast and reduction for int, long, double\n----------\n"); fflush(stdout); } if (!(dtest = (double *) malloc((unsigned)(MAXLENG * sizeof(double))))) { ARMCI_Error("TestGlobals: failed to allocated dtest", MAXLENG); } if (!(ltest = (long *) malloc((unsigned)(MAXLENG * sizeof(long))))) { ARMCI_Error("TestGlobals: failed to allocated ltest", MAXLENG); } if (!(itest = (int *) malloc((unsigned)(MAXLENG * sizeof(int))))) { ARMCI_Error("TestGlobals: failed to allocated itest", MAXLENG); } for (len = 1; len < MAXLENG; len *= 2) { int ilen = len * sizeof(int); int dlen = len * sizeof(double); int llen = len * sizeof(long); int i; ifrom = (ifrom + 1) % nproc; lfrom = (lfrom + 1) % nproc; dfrom = (lfrom + 1) % nproc; #if 0 printf("%d:ifrom=%d lfrom=%d dfrom=%d\n", me, ifrom, lfrom, dfrom); fflush(stdout); #endif if (me == 0) { printf("Test length = %d ... ", len); fflush(stdout); } if (me == ifrom)for (i = 0; i < len; i++) { itest[i] = i; } else for (i = 0; i < len; i++) { itest[i] = 0; } if (me == lfrom)for (i = 0; i < len; i++) { ltest[i] = (long)i; } else for (i = 0; i < len; i++) { ltest[i] = 0L; } if (me == dfrom)for (i = 0; i < len; i++) { dtest[i] = (double)i; } else for (i = 0; i < len; i++) { dtest[i] = 0.0; } /* Test broadcast */ armci_msg_brdcst(itest, ilen, ifrom); armci_msg_brdcst(ltest, llen, lfrom); armci_msg_brdcst(dtest, dlen, dfrom); for (i = 0; i < len; i++) { if (itest[i] != i) { printf("int broadcast failed %d", itest[i]); ARMCI_Error("int broadcast failed %d", itest[i]); } if (ltest[i] != (long)i) { printf("long broadcast failed %ld", ltest[i]); ARMCI_Error("long broadcast failed %ld", ltest[i]); } if (dtest[i] != (double)i) { printf("double broadcast failed %f", dtest[i]); ARMCI_Error("double broadcast failed %f", dtest[i]); } } if (me == 0) { printf("broadcast OK ..."); fflush(stdout); } /* Test global sum */ for (i = 0; i < len; i++) { itest[i] = i * me; ltest[i] = (long) itest[i]; dtest[i] = (double) itest[i]; } armci_msg_igop(itest, len, "+"); armci_msg_lgop(ltest, len, "+"); armci_msg_dgop(dtest, len, "+"); for (i = 0; i < len; i++) { int iresult = i * nproc * (nproc - 1) / 2; if (itest[i] != iresult || ltest[i] != (long)iresult || dtest[i] != (double) iresult) { ARMCI_Error("TestGlobals: global sum failed", (int) i); } } if (me == 0) { printf("global sums OK\n"); fflush(stdout); } } /* now we get timing data */ time_gop(dtest, MAXLENG); time_reduce(dtest, MAXLENG); free((char *) itest); free((char *) ltest); free((char *) dtest); } int main(int argc, char **argv) { armci_msg_init(&argc, &argv); /* initialize ARMCI */ ARMCI_Init_args(&argc, &argv); me = armci_msg_me(); nproc = armci_msg_nproc(); if (nproc < 2) { if (me == 0) fprintf(stderr, "USAGE: 2 <= processes < %d\n", nproc); ARMCI_Barrier(); armci_msg_finalize(); exit(0); } if (me == 0) { printf("Test of ARMCI Wrappers to Basic Message Passing Operations\n"); fflush(stdout); } ARMCI_Barrier(); TestGlobals(); /* done */ ARMCI_Finalize(); armci_msg_finalize(); return(0); } ga-5-3/armci/testing/test.c0000640005473000001440000014753312115436166014511 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: test.c,v 1.43.6.6 2007-08-30 22:59:27 manoj Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include # define sleep(x) Sleep(1000*(x)) #endif #include "armci.h" #include "message.h" #define MEMLOCK_TEST 0 #if MEMLOCK_TEST extern void armci_lockmem(void *, void *, int); extern void armci_unlockmem(void); #endif #define DIM1 5 #define DIM2 3 #ifdef __sun /* Solaris has shared memory shortages in the default system configuration */ # define DIM3 6 # define DIM4 5 # define DIM5 4 #elif defined(__alpha__) # define DIM3 8 # define DIM4 5 # define DIM5 6 #else # define DIM3 8 # define DIM4 9 # define DIM5 7 #endif #define DIM6 3 #define DIM7 2 #define OFF 1 #define EDIM1 (DIM1+OFF) #define EDIM2 (DIM2+OFF) #define EDIM3 (DIM3+OFF) #define EDIM4 (DIM4+OFF) #define EDIM5 (DIM5+OFF) #define EDIM6 (DIM6+OFF) #define EDIM7 (DIM7+OFF) #define DIMS 4 #define MAXDIMS 7 #define MAX_DIM_VAL 50 #define LOOP 200 #define BASE 100. #define MAXPROC 128 #define TIMES 100 #ifdef CRAY # define ELEMS 800 #else # define ELEMS 200 #endif /***************************** macros ************************/ #define COPY(src, dst, bytes) memcpy((dst),(src),(bytes)) #define ARMCI_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define ARMCI_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define ARMCI_ABS(a) (((a) <0) ? -(a) : (a)) /***************************** global data *******************/ int me, nproc; int work[MAXPROC]; /* work array for propagating addresses */ #ifdef PVM void pvm_init(int argc, char *argv[]) { int mytid, mygid, ctid[MAXPROC]; int np, i; mytid = pvm_mytid(); if ((argc != 2) && (argc != 1)) { goto usage; } if (argc == 1) { np = 1; } if (argc == 2) { if ((np = atoi(argv[1])) < 1) { goto usage; } } if (np > MAXPROC) { goto usage; } mygid = pvm_joingroup(MPGROUP); if (np > 1) { if (mygid == 0) { i = pvm_spawn(argv[0], argv + 1, 0, "", np - 1, ctid); } } while (pvm_gsize(MPGROUP) < np) { sleep(1); } /* sync */ pvm_barrier(MPGROUP, np); printf("PVM initialization done!\n"); return; usage: fprintf(stderr, "usage: %s \n", argv[0]); pvm_exit(); exit(-1); } #endif /*\ generate random range for a section of multidimensional array \*/ void get_range(int ndim, int dims[], int lo[], int hi[]) { int dim; for (dim = 0; dim < ndim; dim++) { int toss1, toss2; toss1 = rand() % dims[dim]; toss2 = rand() % dims[dim]; if (toss1 < toss2) { lo[dim] = toss1; hi[dim] = toss2; } else { hi[dim] = toss1; lo[dim] = toss2; } } } /*\ generates a new random range similar to the input range for an array with specified dimensions \*/ void new_range(int ndim, int dims[], int lo[], int hi[], int new_lo[], int new_hi[]) { int dim; for (dim = 0; dim < ndim; dim++) { int toss, range; int diff = hi[dim] - lo[dim] + 1; assert(diff <= dims[dim]); range = dims[dim] - diff; toss = (range > 0) ? rand() % range : lo[dim]; new_lo[dim] = toss; new_hi[dim] = toss + diff - 1; assert(new_hi[dim] < dims[dim]); assert(diff == (new_hi[dim] - new_lo[dim] + 1)); } } /*\ print range of ndim dimensional array with two strings before and after \*/ void print_range(char *pre, int ndim, int lo[], int hi[], char *post) { int i; printf("%s[", pre); for (i = 0; i < ndim; i++) { printf("%d:%d", lo[i], hi[i]); if (i == ndim - 1) { printf("] %s", post); } else { printf(","); } } } /*\ print subscript of ndim dimensional array with two strings before and after \*/ void print_subscript(char *pre, int ndim, int subscript[], char *post) { int i; printf("%s [", pre); for (i = 0; i < ndim; i++) { printf("%d", subscript[i]); if (i == ndim - 1) { printf("] %s", post); } else { printf(","); } } } /*\ print a section of a 2-D array of doubles \*/ void print_2D_double(double *a, int ld, int *lo, int *hi) { int i, j; for (i = lo[0]; i <= hi[0]; i++) { for (j = lo[1]; j <= hi[1]; j++) { printf("%13f ", a[ld*j+i]); } printf("\n"); } } /*\ initialize array: a[i,j,k,..]=i+100*j+10000*k+ ... \*/ void init(double *a, int ndim, int elems, int dims[]) { int idx[MAXDIMS]; int i, dim; for (i = 0; i < elems; i++) { int Index = i; double field, val; for (dim = 0; dim < ndim; dim++) { idx[dim] = Index % dims[dim]; Index /= dims[dim]; } field = 1.; val = 0.; for (dim = 0; dim < ndim; dim++) { val += field * idx[dim]; field *= BASE; } a[i] = val; /* printf("(%d,%d,%d)=%6.0f",idx[0],idx[1],idx[2],val); */ } } /*\ compute Index from subscript * assume that first subscript component changes first \*/ int Index(int ndim, int subscript[], int dims[]) { int idx = 0, i, factor = 1; for (i = 0; i < ndim; i++) { idx += subscript[i] * factor; factor *= dims[i]; } return idx; } void update_subscript(int ndim, int subscript[], int lo[], int hi[], int dims[]) { int i; for (i = 0; i < ndim; i++) { if (subscript[i] < hi[i]) { subscript[i]++; return; } subscript[i] = lo[i]; } } void compare_patches(double eps, int ndim, double *patch1, int lo1[], int hi1[], int dims1[], double *patch2, int lo2[], int hi2[], int dims2[]) { int i, j, elems = 1; int subscr1[MAXDIMS], subscr2[MAXDIMS]; double diff, max; int offset1, offset2; for (i = 0; i < ndim; i++) { /* count # of elements & verify consistency of both patches */ int diff = hi1[i] - lo1[i]; assert(diff == (hi2[i] - lo2[i])); assert(diff < dims1[i]); assert(diff < dims2[i]); elems *= diff + 1; subscr1[i] = lo1[i]; subscr2[i] = lo2[i]; } /* compare element values in both patches */ offset1 = Index(ndim, subscr1, dims1); offset2 = Index(ndim, subscr2, dims2); for (j = 0; j < elems; j++) { int idx1, idx2; idx1 = Index(ndim, subscr1, dims1); /* calculate element Index from a subscript */ idx2 = Index(ndim, subscr2, dims2); idx1 -= offset1; idx2 -= offset2; diff = patch1[idx1] - patch2[idx2]; max = ARMCI_MAX(ARMCI_ABS(patch1[idx1]), ARMCI_ABS(patch2[idx2])); if (max == 0. || max < eps) { max = 1.; } if (eps < ARMCI_ABS(diff) / max) { char msg[48]; sprintf(msg, "(proc=%d):%f", me, patch1[idx1]); print_subscript("ERROR: a", ndim, subscr1, msg); sprintf(msg, "%f\n", patch2[idx2]); print_subscript(" b", ndim, subscr2, msg); fflush(stdout); sleep(1); ARMCI_Error("Bailing out", 0); } { /* update subscript for the patches */ update_subscript(ndim, subscr1, lo1, hi1, dims1); update_subscript(ndim, subscr2, lo2, hi2, dims2); } } /* make sure we reached upper limit */ /*for(i=0;i= 100) { ARMCI_Error("increase MMAX", g_idx); } ARMCI_Memget(bytes, &meminfo[g_idx][me], 0); for (i = 0; i < nproc; i++) { armci_msg_brdcst(&meminfo[g_idx][i], sizeof(armci_meminfo_t), i); } for (i = 0; i < nproc; i++) { a[i] = ARMCI_Memat(&meminfo[g_idx][i], 0); } g_idx++; } #else rc = ARMCI_Malloc(a, bytes); assert(rc == 0); #endif assert(a[me]); } void destroy_array(void *ptr[]) { ARMCI_Barrier(); #if 0 assert(!ARMCI_Free(ptr[me])); #endif } int loA[MAXDIMS], hiA[MAXDIMS]; int dimsA[MAXDIMS] = {DIM1, DIM2, DIM3, DIM4, DIM5, DIM6, DIM7}; int loB[MAXDIMS], hiB[MAXDIMS]; int dimsB[MAXDIMS] = {EDIM1, EDIM2, EDIM3, EDIM4, EDIM5, EDIM6, EDIM7}; int count[MAXDIMS]; int strideA[MAXDIMS], strideB[MAXDIMS]; int loC[MAXDIMS], hiC[MAXDIMS]; int idx[MAXDIMS] = {0, 0, 0, 0, 0, 0, 0}; void test_dim(int ndim) { int dim, elems; int i, j, proc; /* double a[DIM4][DIM3][DIM2][DIM1], b[EDIM4][EDIM3][EDIM2][EDIM1];*/ void *b[MAXPROC]; void *a, *c; elems = 1; strideA[0] = sizeof(double); strideB[0] = sizeof(double); for (i = 0; i < ndim; i++) { strideA[i] *= dimsA[i]; strideB[i] *= dimsB[i]; if (i < ndim - 1) { strideA[i+1] = strideA[i]; strideB[i+1] = strideB[i]; } elems *= dimsA[i]; } /* create shared and local arrays */ create_array(b, sizeof(double), ndim, dimsB); a = malloc(sizeof(double) * elems); assert(a); c = malloc(sizeof(double) * elems); assert(c); init(a, ndim, elems, dimsA); if (me == 0) { printf("--------array[%d", dimsA[0]); for (dim = 1; dim < ndim; dim++) { printf(",%d", dimsA[dim]); } printf("]--------\n"); } sleep(1); ARMCI_AllFence(); ARMCI_Barrier(); for (i = 0; i < LOOP; i++) { int idx1, idx2, idx3; get_range(ndim, dimsA, loA, hiA); new_range(ndim, dimsB, loA, hiA, loB, hiB); new_range(ndim, dimsA, loA, hiA, loC, hiC); proc = nproc - 1 - me; if (me == 0) { print_range("local", ndim, loA, hiA, "-> "); print_range("remote", ndim, loB, hiB, "-> "); print_range("local", ndim, loC, hiC, "\n"); } idx1 = Index(ndim, loA, dimsA); idx2 = Index(ndim, loB, dimsB); idx3 = Index(ndim, loC, dimsA); for (j = 0; j < ndim; j++) { count[j] = hiA[j] - loA[j] + 1; } count[0] *= sizeof(double); /* convert range to bytes at stride level zero */ (void)ARMCI_PutS((double *)a + idx1, strideA, (double *)b[proc] + idx2, strideB, count, ndim - 1, proc); /* sleep(1);*/ /* printf("%d: a=(%x,%f) b=(%x,%f)\n",me,idx1 + (double*)a,*(idx1 + (double*)a),idx2 + (double*)b,*(idx2 + (double*)b));*/ /* fflush(stdout);*/ /* sleep(1);*/ /* note that we do not need ARMCI_Fence here since * consectutive operations targeting the same process are ordered */ (void)ARMCI_GetS((double *)b[proc] + idx2, strideB, (double *)c + idx3, strideA, count, ndim - 1, proc); compare_patches(0., ndim, (double *)a + idx1, loA, hiA, dimsA, (double *)c + idx3, loC, hiC, dimsA); } free(c); destroy_array(b); free(a); } int nloA[MAXDIMS+1][MAXDIMS], nhiA[MAXDIMS+1][MAXDIMS]; int nloB[MAXDIMS+1][MAXDIMS], nhiB[MAXDIMS+1][MAXDIMS]; int nloC[MAXDIMS+1][MAXDIMS], nhiC[MAXDIMS+1][MAXDIMS]; int get_next_RRproc(int initialize, int ndim) { static int distance; int proc; if (initialize) { distance = nproc / 2; if ((nproc % 2) != 0) { distance++; } if (nproc == 1) { distance = 0; } return(0); } /*send it to a different process everytime*/ proc = (me <= ((nproc % 2 == 0) ? ((nproc / 2) - 1) : (nproc / 2))) ? (me + distance) : (me - distance); if ((nproc % 2) != 0 && me == (nproc / 2)) { proc = me; } if (distance != 0) { if (me < (nproc / 2)) { distance++; if ((me + distance) >= nproc) { distance = nproc / 2; if ((nproc % 2) != 0) { distance++; } distance -= me; } } else { distance--; if ((me - distance) >= (nproc / 2)) { distance = nproc / 2; if ((nproc % 2) != 0) { distance++; } distance = distance + (me - distance); } } if (ndim != 1 && MAXDIMS > nproc && (ndim % (nproc / 2) == 0)) { distance = nproc / 2; if ((nproc % 2) != 0) { distance++; } } } return(proc); } void test_nbdim() { int elems = 1, elems1 = 1; int i, j, proc, ndim, rc; void *b[MAXDIMS+1][MAXPROC]; void *a[MAXDIMS+1], *c[MAXDIMS+1]; armci_hdl_t hdl_put[MAXDIMS+1], hdl_get[MAXDIMS+1]; int idx1 = 0, idx2 = 0, idx3 = 0; /* create shared and local arrays */ for (ndim = 1; ndim <= MAXDIMS; ndim++) { elems1 *= dimsB[ndim-1]; elems *= dimsA[ndim-1]; rc = ARMCI_Malloc(b[ndim], sizeof(double) * elems1); assert(rc == 0); assert(b[ndim][me]); a[ndim] = malloc(sizeof(double) * elems); assert(a[ndim]); c[ndim] = malloc(sizeof(double) * elems); assert(c[ndim]); init(a[ndim], ndim, elems, dimsA); ARMCI_INIT_HANDLE(hdl_put + ndim); ARMCI_INIT_HANDLE(hdl_get + ndim); } ARMCI_AllFence(); ARMCI_Barrier(); (void)get_next_RRproc(1, 0); for (ndim = 1; ndim <= MAXDIMS; ndim++) { strideA[0] = sizeof(double); strideB[0] = sizeof(double); for (i = 0; i < ndim; i++) { strideA[i] *= dimsA[i]; strideB[i] *= dimsB[i]; if (i < ndim - 1) { strideA[i+1] = strideA[i]; strideB[i+1] = strideB[i]; } } proc = get_next_RRproc(0, ndim); get_range(ndim, dimsA, nloA[ndim], nhiA[ndim]); new_range(ndim, dimsB, nloA[ndim], nhiA[ndim], nloB[ndim], nhiB[ndim]); new_range(ndim, dimsA, nloA[ndim], nhiA[ndim], nloC[ndim], nhiC[ndim]); if (me == 0) { print_range("local", ndim, nloA[ndim], nhiA[ndim], "-> "); print_range("remote", ndim, nloB[ndim], nhiB[ndim], "-> "); print_range("local", ndim, nloC[ndim], nhiC[ndim], "\n"); fflush(stdout); sleep(1); } idx1 = Index(ndim, nloA[ndim], dimsA); idx2 = Index(ndim, nloB[ndim], dimsB); idx3 = Index(ndim, nloC[ndim], dimsA); for (j = 0; j < ndim; j++) { count[j] = nhiA[ndim][j] - nloA[ndim][j] + 1; } count[0] *= sizeof(double); if (ndim == 1) { (void)ARMCI_NbPut((double *)a[ndim] + idx1, (double *)b[ndim][proc] + idx2, count[0], proc, (hdl_put + ndim)); } else { (void)ARMCI_NbPutS((double *)a[ndim] + idx1, strideA, (double *)b[ndim][proc] + idx2, strideB, count, ndim - 1, proc, (hdl_put + ndim)); } } sleep(5); ARMCI_Barrier(); /*before we do gets, we have to make sure puts are complete on the remote processor*/ for (ndim = 1; ndim <= MAXDIMS; ndim++) { ARMCI_Wait(hdl_put + ndim); } ARMCI_Barrier(); ARMCI_AllFence(); (void)get_next_RRproc(1, 0); for (ndim = 1; ndim <= MAXDIMS; ndim++) { strideA[0] = sizeof(double); strideB[0] = sizeof(double); for (i = 0; i < ndim; i++) { strideA[i] *= dimsA[i]; strideB[i] *= dimsB[i]; if (i < ndim - 1) { strideA[i+1] = strideA[i]; strideB[i+1] = strideB[i]; } } /*send it to a different process everytime*/ proc = get_next_RRproc(0, ndim); idx1 = Index(ndim, nloA[ndim], dimsA); idx2 = Index(ndim, nloB[ndim], dimsB); idx3 = Index(ndim, nloC[ndim], dimsA); for (j = 0; j < ndim; j++) { count[j] = nhiA[ndim][j] - nloA[ndim][j] + 1; } count[0] *= sizeof(double); if (ndim == 1) { (void)ARMCI_NbGet((double *)b[ndim][proc] + idx2, (double *)c[ndim] + idx3, count[0], proc, (hdl_get + ndim)); } else { (void)ARMCI_NbGetS((double *)b[ndim][proc] + idx2, strideB, (double *)c[ndim] + idx3, strideA, count, ndim - 1, proc, (hdl_get + ndim)); } } ARMCI_Barrier(); if (me == 0) { printf("Now waiting for all non-blocking calls and verifying data...\n"); fflush(stdout); } for (ndim = 1; ndim <= MAXDIMS; ndim++) { ARMCI_Wait(hdl_get + ndim); idx1 = Index(ndim, nloA[ndim], dimsA); idx2 = Index(ndim, nloB[ndim], dimsB); idx3 = Index(ndim, nloC[ndim], dimsA); compare_patches(0., ndim, (double *)a[ndim] + idx1, nloA[ndim], nhiA[ndim], dimsA, (double *)c[ndim] + idx3, nloC[ndim], nhiC[ndim], dimsA); } if (me == 0) { printf("OK\n"); fflush(stdout); } for (ndim = 1; ndim <= MAXDIMS; ndim++) { destroy_array(b[ndim]); free(c[ndim]); free(a[ndim]); } } #define PTR_ARR_LEN 10 #define VLOOP 50 #define VEC_ELE_LEN 20 /*number of doubles in each dimention*/ #define GIOV_ARR_LEN 9 void verify_vector_data(double *data, int procs, int isput, int datalen) { double facto = 2.89; int i, j = 0, k = 0, kc = 0, dst = 0; if (isput) { facto = 1.89; } for (i = 0; i < datalen; i++) { if (dst != me) if (ARMCI_ABS((data[i] - (me + facto + dst)*((kc + 1)*(j % PTR_ARR_LEN + 1)))) > 0.001) { printf("\n%d:while verifying data of a op from proc=%d ", me, dst); printf("giov index=%d ptr_arr_index=%d \n :element index=%d", kc, (j % PTR_ARR_LEN), k); printf(" elem was supposed to be %f but is %f", (me + facto + dst)*((kc + 1)*(j % PTR_ARR_LEN + 1)) , data[i]); fflush(stdout); sleep(1); ARMCI_Error("vector non-blocking failed", 0); } k++; if (k == VEC_ELE_LEN) { j++; k = 0; if (j % PTR_ARR_LEN == 0) { kc++; if ((kc % GIOV_ARR_LEN) == 0) { kc = 0; dst++; } } } } } void test_vec_small() { double *getdst; double **putsrc; armci_giov_t dsc[MAXPROC*GIOV_ARR_LEN]; void **psrc; /*arrays of pointers to be used by giov_t*/ void **pdst; void *getsrc[MAXPROC]; /*to allocate mem via armci_malloc*/ void *putdst[MAXPROC]; /*to allocate mem via armci_malloc*/ armci_hdl_t hdl_put[MAXPROC], hdl_get[MAXPROC]; int i = 0, j = 0, k = 0, kc = 0, kcold = 0, rc, dstproc, dst = 0; int lenpergiov; lenpergiov = PTR_ARR_LEN * VEC_ELE_LEN; rc = ARMCI_Malloc(getsrc, sizeof(double) * nproc * GIOV_ARR_LEN * lenpergiov); assert(rc == 0); assert(getsrc[me]); rc = ARMCI_Malloc(putdst, sizeof(double) * nproc * GIOV_ARR_LEN * lenpergiov); assert(rc == 0); assert(putdst[me]); /*first malloc for getdst and putsrc, both are 2d arrays*/ getdst = (double *)malloc(sizeof(double) * nproc * GIOV_ARR_LEN * lenpergiov); putsrc = (double **)malloc(sizeof(double *) * nproc * GIOV_ARR_LEN * PTR_ARR_LEN); assert(getdst); assert(putsrc); for (i = 0; i < nproc * GIOV_ARR_LEN * PTR_ARR_LEN; i++) { putsrc[i] = (double *)malloc(sizeof(double) * VEC_ELE_LEN); assert(putsrc[i]); } /*allocating memory for psrc and pdst*/ psrc = (void **)malloc(sizeof(void *) * PTR_ARR_LEN * nproc * GIOV_ARR_LEN); pdst = (void **)malloc(sizeof(void *) * PTR_ARR_LEN * nproc * GIOV_ARR_LEN); assert(pdst); assert(psrc); for (i = 0; i < nproc * lenpergiov * GIOV_ARR_LEN; i++) { putsrc[j][k] = (me + 1.89 + dst) * ((kc + 1) * ((j % PTR_ARR_LEN) + 1)); ((double *)getsrc[me])[i] = (me + 2.89 + dst) * ((kc + 1) * (j % PTR_ARR_LEN + 1)); k++; if (k == VEC_ELE_LEN) { j++; k = 0; if ((j % PTR_ARR_LEN) == 0) { kc++; if ((kc % GIOV_ARR_LEN) == 0) { kc = 0; dst++; } } } } /*********************Testing NbPutV*********************************/ i = 0; j = 0; k = 0; kc = 0; dstproc = me; for (i = 0; i < nproc - 1; i++) { dstproc++; if (dstproc == nproc) { dstproc = 0; } for (j = 0; j < GIOV_ARR_LEN; j++) { kcold = kc; for (k = 0; k < PTR_ARR_LEN; k++, kc++) { double *ptr; psrc[kc] = (void *)putsrc[PTR_ARR_LEN*(dstproc*GIOV_ARR_LEN+j)+k]; ptr = (double *)putdst[dstproc]; pdst[kc] = (void *)(ptr + lenpergiov * (GIOV_ARR_LEN * me + j) + k * VEC_ELE_LEN); } dsc[j].bytes = VEC_ELE_LEN * sizeof(double); dsc[j].src_ptr_array = &psrc[kcold]; dsc[j].dst_ptr_array = &pdst[kcold]; dsc[j].ptr_array_len = PTR_ARR_LEN; } ARMCI_INIT_HANDLE(hdl_put + dstproc); if ((rc = ARMCI_NbPutV(dsc, GIOV_ARR_LEN, dstproc, hdl_put + dstproc))) { ARMCI_Error("putv failed", rc); } } if (me == 0) { printf("\n\tNow veryfying the vector put data for correctness"); } for (i = 0; i < nproc; i++)if (i != me) { ARMCI_Wait(hdl_put + i); } sleep(1); ARMCI_Barrier(); ARMCI_AllFence();/*every one syncs after put */ verify_vector_data((double *)putdst[me], nproc, 1, nproc * GIOV_ARR_LEN * lenpergiov); if (me == 0) { printf("\n\tPuts OK\n"); } /****************Done Testing NbPutV*********************************/ /*********************Testing NbGetV*********************************/ i = 0; j = 0; k = 0; kc = 0; dstproc = me; for (i = 0; i < nproc - 1; i++) { dstproc++; if (dstproc == nproc) { dstproc = 0; } for (j = 0; j < GIOV_ARR_LEN; j++) { kcold = kc; for (k = 0; k < PTR_ARR_LEN; k++, kc++) { double *ptr; ptr = getdst; pdst[kc] = (void *)(ptr + lenpergiov * (dstproc * GIOV_ARR_LEN + j) + k * VEC_ELE_LEN); ptr = (double *)(getsrc[dstproc]); psrc[kc] = (void *)(ptr + lenpergiov * (me * GIOV_ARR_LEN + j) + k * VEC_ELE_LEN); } dsc[j].bytes = VEC_ELE_LEN * sizeof(double); dsc[j].src_ptr_array = &psrc[kcold]; dsc[j].dst_ptr_array = &pdst[kcold]; dsc[j].ptr_array_len = PTR_ARR_LEN; } ARMCI_INIT_HANDLE(hdl_get + dstproc); if ((rc = ARMCI_NbGetV(dsc, GIOV_ARR_LEN, dstproc, hdl_get + dstproc))) { ARMCI_Error("putv failed", rc); } } if (me == 0) { printf("\n\tNow veryfying the vector get data for correctness"); } for (i = 0; i < nproc; i++)if (i != me) { ARMCI_Wait(hdl_get + i); } sleep(1); ARMCI_Barrier(); verify_vector_data((double *)getdst, nproc, 0, nproc * GIOV_ARR_LEN * lenpergiov); if (me == 0) { printf("\n\tGets OK\n"); } /****************Done Testing NbGetV*********************************/ free(pdst); free(psrc); free(getdst); for (i = 0; i < nproc * GIOV_ARR_LEN * PTR_ARR_LEN; i++) { free(putsrc[i]); } free(putsrc); } void GetPermutedProcList(int *ProcList) { int i, iswap, temp; if (nproc > MAXPROC) { ARMCI_Error("permute_proc: nproc to big ", nproc); } /* initialize list */ for (i = 0; i < nproc; i++) { ProcList[i] = i; } if (nproc == 1) { return; } /* every process generates different random sequence */ (void)srand((unsigned)me); /* list permutation generated by random swapping */ for (i = 0; i < nproc; i++) { iswap = (int)(rand() % nproc); temp = ProcList[iswap]; ProcList[iswap] = ProcList[i]; ProcList[i] = temp; } } /*\ Atomic Accumulate test: remote += alpha*local * Every process/or has its patch of array b updated TIMES*NPROC times. * The sequence of updates is random: everybody uses a randomly permuted list * and accumulate is non-collective (of-course) \*/ void test_acc(int ndim) { int dim, elems; int i, proc; void *b[MAXPROC]; void *a, *c; double alpha = 0.1, scale; int idx1, idx2; int *proclist = work; elems = 1; strideA[0] = sizeof(double); strideB[0] = sizeof(double); for (i = 0; i < ndim; i++) { strideA[i] *= dimsA[i]; strideB[i] *= dimsB[i]; if (i < ndim - 1) { strideA[i+1] = strideA[i]; strideB[i+1] = strideB[i]; } elems *= dimsA[i]; /* set up patch coordinates: same on every processor */ loA[i] = 0; hiA[i] = loA[i] + 1; loB[i] = dimsB[i] - 2; hiB[i] = loB[i] + 1; count[i] = hiA[i] - loA[i] + 1; } /* create shared and local arrays */ create_array(b, sizeof(double), ndim, dimsB); a = malloc(sizeof(double) * elems); assert(a); c = malloc(sizeof(double) * elems); assert(c); init(a, ndim, elems, dimsA); if (me == 0) { printf("--------array[%d", dimsA[0]); for (dim = 1; dim < ndim; dim++) { printf(",%d", dimsA[dim]); } printf("]--------\n"); } GetPermutedProcList(proclist); idx1 = Index(ndim, loA, dimsA); idx2 = Index(ndim, loB, dimsB); count[0] *= sizeof(double); /* convert range to bytes at stride level zero */ /* initialize all elements of array b to zero */ elems = 1; for (i = 0; i < ndim; i++) { elems *= dimsB[i]; } for (i = 0; i < elems; i++) { ((double *)b[me])[i] = 0.; } sleep(1); if (me == 0) { print_range("patch", ndim, loA, hiA, " -> "); print_range("patch", ndim, loB, hiB, "\n"); fflush(stdout); } ARMCI_AllFence(); ARMCI_Barrier(); for (i = 0; i < TIMES * nproc; i++) { proc = proclist[i%nproc]; (void)ARMCI_AccS(ARMCI_ACC_DBL, &alpha, (double *)a + idx1, strideA, (double *)b[proc] + idx2, strideB, count, ndim - 1, proc); } /* sleep(9);*/ ARMCI_AllFence(); ARMCI_Barrier(); /* copy my patch into local array c */ (void)ARMCI_GetS((double *)b[me] + idx2, strideB, (double *)c + idx1, strideA, count, ndim - 1, me); scale = alpha * TIMES * nproc; scale_patch(scale, ndim, (double *)a + idx1, loA, hiA, dimsA); compare_patches(.0001, ndim, (double *)a + idx1, loA, hiA, dimsA, (double *)c + idx1, loA, hiA, dimsA); ARMCI_Barrier(); if (0 == me) { printf(" OK\n\n"); fflush(stdout); } free(c); destroy_array(b); free(a); } /*************************** vector interface *********************************\ * tests vector interface for transfers of triangular sections of a 2-D array * ******************************************************************************/ void test_vector() { int dim, elems, ndim, cols, rows, mrc; int i, proc, loop; int rc; int idx1, idx3; void *b[MAXPROC]; void *a, *c; armci_giov_t dsc[MAX_DIM_VAL]; void *psrc[MAX_DIM_VAL]; void *pdst[MAX_DIM_VAL]; elems = 1; ndim = 2; for (i = 0; i < ndim; i++) { dimsA[i] = MAX_DIM_VAL; dimsB[i] = MAX_DIM_VAL + 1; elems *= dimsA[i]; } /* create shared and local arrays */ create_array(b, sizeof(double), ndim, dimsB); a = malloc(sizeof(double) * elems); assert(a); c = malloc(sizeof(double) * elems); assert(c); init(a, ndim, elems, dimsA); if (me == 0) { printf("--------array[%d", dimsA[0]); for (dim = 1; dim < ndim; dim++) { printf(",%d", dimsA[dim]); } printf("]--------\n"); } sleep(1); for (loop = 0; loop < LOOP; loop++) { get_range(ndim, dimsA, loA, hiA); new_range(ndim, dimsB, loA, hiA, loB, hiB); new_range(ndim, dimsA, loA, hiA, loC, hiC); proc = nproc - 1 - me; if (me == 0) { print_range("local", ndim, loA, hiA, "-> "); print_range("remote", ndim, loB, hiB, "-> "); print_range("local", ndim, loC, hiC, "\n"); } /* printf("array at source\n");*/ /* print_2D_double((double *)a, dimsA[0], loA, hiA);*/ cols = hiA[1] - loA[1] + 1; rows = hiA[0] - loA[0] + 1; mrc = ARMCI_MIN(cols, rows); /* generate a data descriptor for a lower-triangular patch */ for (i = 0; i < mrc; i++) { int ij[2]; int idx; ij[0] = loA[0] + i; ij[1] = loA[1] + i; idx = Index(ndim, ij, dimsA); psrc[i] = (double *)a + idx; ij[0] = loB[0] + i; ij[1] = loB[1] + i; idx = Index(ndim, ij, dimsB); pdst[i] = (double *)b[proc] + idx; dsc[i].bytes = (rows - i) * sizeof(double); dsc[i].src_ptr_array = &psrc[i]; dsc[i].dst_ptr_array = &pdst[i]; /* assume each element different in size (not true in rectangular patches) */ dsc[i].ptr_array_len = 1; } if ((rc = ARMCI_PutV(dsc, mrc, proc))) { ARMCI_Error("putv failed ", rc); } /* printf("array at destination\n");*/ /* print_2D_double((double *)b[proc], dimsB[0], loB, hiB);*/ /* generate a data descriptor for the upper-triangular patch */ /* there is one less element since diagonal is excluded */ for (i = 1; i < cols; i++) { int ij[2]; ij[0] = loA[0]; ij[1] = loA[1] + i; psrc[i-1] = (double *)a + Index(ndim, ij, dimsA); ij[0] = loB[0]; ij[1] = loB[1] + i; pdst[i-1] = (double *)b[proc] + Index(ndim, ij, dimsB); mrc = ARMCI_MIN(i, rows); dsc[i-1].bytes = mrc * sizeof(double); dsc[i-1].src_ptr_array = &psrc[i-1]; dsc[i-1].dst_ptr_array = &pdst[i-1]; /* assume each element different in size (not true in rectangular patches) */ dsc[i-1].ptr_array_len = 1; } if ((cols - 1))if ((rc = ARMCI_PutV(dsc, cols - 1, proc))) { ARMCI_Error("putv(2) failed ", rc); } /* we get back entire rectangular patch */ for (i = 0; i < cols; i++) { int ij[2]; ij[0] = loB[0]; ij[1] = loB[1] + i; psrc[i] = (double *)b[proc] + Index(ndim, ij, dimsB); ij[0] = loC[0]; ij[1] = loC[1] + i; pdst[i] = (double *)c + Index(ndim, ij, dimsA); } dsc[0].bytes = rows * sizeof(double); dsc[0].src_ptr_array = psrc; dsc[0].dst_ptr_array = pdst; dsc[0].ptr_array_len = cols; /* note that we do not need ARMCI_Fence here since * consecutive operations targeting the same process are ordered */ if ((rc = ARMCI_GetV(dsc, 1, proc))) { ARMCI_Error("getv failed ", rc); } idx1 = Index(ndim, loA, dimsA); idx3 = Index(ndim, loC, dimsA); compare_patches(0., ndim, (double *)a + idx1, loA, hiA, dimsA, (double *)c + idx3, loC, hiC, dimsA); } free(c); destroy_array(b); free(a); } /*\ Atomic Accumulate test for vector API: remote += alpha*local * Every process/or has its patch of array b updated TIMES*NPROC times. * The sequence of updates is random: everybody uses a randomly permuted list * and accumulate is non-collective (of-course) \*/ void test_vector_acc() { int dim, elems, bytes; int i, j, proc, rc, one = 1; void *b[MAXPROC]; void *psrc[ELEMS/2], *pdst[ELEMS/2]; void *a, *c; double alpha = 0.1, scale; int *proclist = work; armci_giov_t dsc; elems = ELEMS; dim = 1; bytes = sizeof(double) * elems; /* create shared and local arrays */ create_array(b, sizeof(double), dim, &elems); a = malloc(bytes); assert(a); c = malloc(bytes); assert(c); init(a, dim, elems, &elems); if (me == 0) { printf("--------array[%d", elems); printf("]--------\n"); fflush(stdout); } GetPermutedProcList(proclist); /* initialize all elements of array b to zero */ for (i = 0; i < elems; i++) { ((double *)b[me])[i] = 0.; } sleep(1); dsc.bytes = sizeof(double); dsc.src_ptr_array = psrc; dsc.dst_ptr_array = pdst; dsc.ptr_array_len = elems / 2; ARMCI_Barrier(); for (i = 0; i < TIMES * nproc; i++) { /* proc=proclist[i%nproc];*/ proc = 0; /* accumulate even numbered elements */ for (j = 0; j < elems / 2; j++) { psrc[j] = 2 * j + (double *)a; pdst[j] = 2 * j + (double *)b[proc]; } if ((rc = ARMCI_AccV(ARMCI_ACC_DBL, &alpha, &dsc, 1, proc))) { ARMCI_Error("accumlate failed", rc); } /* for(j=0; j 0.1) { ARMCI_Error("Float register-originated put failed", 0); } if (ARMCI_ABS(fdst_get[i] - 100.01 *(i + 1)) > 0.1) { ARMCI_Error("Float register-originated get failed", 0); } } if (me == 0) { printf("OK\ndouble data type: "); } for (i = 0; i < elems; i++) { if (ARMCI_ABS(ddst[me][i] - 10.001 *(i + 1)) > 0.1) { ARMCI_Error("Double register-originated put failed", 0); } if (ARMCI_ABS(ddst_get[i] - 100.001 *(i + 1)) > 0.1) { ARMCI_Error("Double register-originated get failed", 0); } } if (me == 0) { printf("OK\n"); fflush(stdout); } ARMCI_AllFence(); ARMCI_Barrier(); destroy_array((void **)idst); destroy_array((void **)ldst); destroy_array((void **)fdst); destroy_array((void **)ddst); destroy_array((void **)isrc_get); destroy_array((void **)lsrc_get); destroy_array((void **)fsrc_get); destroy_array((void **)dsrc_get); } #define MAXELEMS 6400 #define NUMAGG 20 /* NUMAGG < MAXELEMS/10 */ #define MAX_REQUESTS 325 /* MAXELEMS/NUMAGG */ #define COUNT 50 void test_aggregate() { int i, j, k, rc, bytes, elems[2] = {MAXPROC, MAXELEMS}; double *ddst_put[MAXPROC]; double *ddst_get[MAXPROC]; double *dsrc[MAXPROC]; armci_hdl_t usr_hdl_put[MAXPROC]; armci_hdl_t usr_hdl_get[MAXPROC]; armci_giov_t darr; void *src_ptr[MAX_REQUESTS], *dst_ptr[MAX_REQUESTS]; int start = 0, end = 0; create_array((void **)ddst_put, sizeof(double), 2, elems); create_array((void **)ddst_get, sizeof(double), 2, elems); create_array((void **)dsrc, sizeof(double), 1, &elems[1]); for (i = 0; i < elems[1]; i++) { dsrc[me][i] = i * 1.001 * (me + 1); } for (i = 0; i < elems[0]*elems[1]; i++) { ddst_put[me][i] = 0.0; ddst_get[me][i] = 0.0; } ARMCI_Barrier(); for (i = 0; i < nproc; i++) { ARMCI_INIT_HANDLE(&usr_hdl_put[i]); } for (i = 0; i < nproc; i++) { ARMCI_INIT_HANDLE(&usr_hdl_get[i]); } for (i = 0; i < nproc; i++) { ARMCI_SET_AGGREGATE_HANDLE(&usr_hdl_put[i]); } for (i = 0; i < nproc; i++) { ARMCI_SET_AGGREGATE_HANDLE(&usr_hdl_get[i]); } /* Testing aggregate put */ for (i = 0; i < nproc; i++) { start = 0; end = COUNT * NUMAGG; for (j = start; j < end; j++) { bytes = sizeof(double); ARMCI_NbPutValueDouble(dsrc[me][j], &ddst_put[i][me*elems[1] + j], i, &usr_hdl_put[i]); } start = end; end = start + COUNT * NUMAGG; for (j = start, k = 0; j < end; j += NUMAGG, k++) { src_ptr[k] = (void *)&dsrc[me][j]; dst_ptr[k] = (void *)&ddst_put[i][me*elems[1] + j]; } darr.src_ptr_array = src_ptr; darr.dst_ptr_array = dst_ptr; darr.bytes = NUMAGG * sizeof(double); darr.ptr_array_len = k; if ((rc = ARMCI_NbPutV(&darr, 1, i, &usr_hdl_put[i]))) { ARMCI_Error("armci_nbputv failed\n", rc); } start = end; end = start + COUNT * NUMAGG; for (j = start; j < end; j += NUMAGG) { bytes = sizeof(double) * NUMAGG; if ((rc = ARMCI_NbPutS(&dsrc[me][j], NULL, &ddst_put[i][me*elems[1] + j], NULL, &bytes, 0, i, &usr_hdl_put[i]))) { ARMCI_Error("armci_nbputs failed\n", rc); } } start = end; end = elems[1]; for (j = start; j < end; j += NUMAGG) { bytes = sizeof(double) * NUMAGG; if ((rc = ARMCI_NbPut(&dsrc[me][j], &ddst_put[i][me*elems[1] + j], bytes, i, &usr_hdl_put[i]))) { ARMCI_Error("armci_nbput failed\n", rc); } } } for (i = 0; i < nproc; i++) { ARMCI_Wait(&usr_hdl_put[i]); } /* Testing aggregate get */ for (i = 0; i < nproc; i++) { start = 0; end = COUNT * NUMAGG; for (j = start, k = 0; j < end; j += NUMAGG, k++) { src_ptr[k] = (void *)&dsrc[i][j]; dst_ptr[k] = (void *)&ddst_get[me][i*elems[1] + j]; } darr.src_ptr_array = src_ptr; darr.dst_ptr_array = dst_ptr; darr.bytes = NUMAGG * sizeof(double); darr.ptr_array_len = k; if ((rc = ARMCI_NbGetV(&darr, 1, i, &usr_hdl_get[i]))) { ARMCI_Error("armci_nbgetv failed\n", rc); } start = end; end = start + COUNT * NUMAGG; for (j = start; j < end; j += NUMAGG) { bytes = sizeof(double) * NUMAGG; if ((rc = ARMCI_NbGetS(&dsrc[i][j], NULL, &ddst_get[me][i*elems[1] + j], NULL, &bytes, 0, i, &usr_hdl_get[i]))) { ARMCI_Error("armci_nbputs failed\n", rc); } } start = end; end = elems[1]; for (j = start; j < end; j += NUMAGG) { bytes = sizeof(double) * NUMAGG; if ((rc = ARMCI_NbGet(&dsrc[i][j], &ddst_get[me][i*elems[1] + j], bytes, i, &usr_hdl_get[i]))) { ARMCI_Error("armci_nbget failed\n", rc); } } } for (i = 0; i < nproc; i++) { ARMCI_Wait(&usr_hdl_get[i]); } ARMCI_Barrier(); ARMCI_AllFence(); ARMCI_Barrier(); for (i = 0; i < nproc; i++) { for (j = 0; j < elems[1]; j++) { if (ARMCI_ABS(ddst_put[me][i*elems[1] + j] - j * 1.001 *(i + 1)) > 0.1) { ARMCI_Error("aggregate put failed...1", 0); } } } ARMCI_Barrier(); if (me == 0) { printf(" aggregate put ..O.K.\n"); } fflush(stdout); for (i = 0; i < nproc; i++) { for (j = 0; j < elems[1]; j++) { if (ARMCI_ABS(ddst_get[me][i*elems[1] + j] - j * 1.001 *(i + 1)) > 0.1) { ARMCI_Error("aggregate get failed...1", 0); } } } ARMCI_Barrier(); if (me == 0) { printf(" aggregate get ..O.K.\n"); } fflush(stdout); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("O.K.\n"); fflush(stdout); } destroy_array((void **)ddst_put); destroy_array((void **)ddst_get); destroy_array((void **)dsrc); } void test_implicit() { int i, j, k, rc, bytes, elems[2] = {MAXPROC, MAXELEMS}; double *ddst_put[MAXPROC]; double *ddst_get[MAXPROC]; double *dsrc[MAXPROC]; armci_giov_t darr; void *src_ptr[MAX_REQUESTS], *dst_ptr[MAX_REQUESTS]; int start = 0, end = 0; armci_hdl_t usr_hdl[MAXPROC]; create_array((void **)ddst_put, sizeof(double), 2, elems); create_array((void **)ddst_get, sizeof(double), 2, elems); create_array((void **)dsrc, sizeof(double), 1, &elems[1]); for (i = 0; i < elems[1]; i++) { dsrc[me][i] = i * 1.001 * (me + 1); } for (i = 0; i < elems[0]*elems[1]; i++) { ddst_put[me][i] = 0.0; ddst_get[me][i] = 0.0; } ARMCI_Barrier(); for (i = 0; i < nproc; i++) { ARMCI_INIT_HANDLE(&usr_hdl[i]); } for (i = 0; i < nproc; i++) { start = 0; end = COUNT * NUMAGG; for (j = start; j < end; j++) { bytes = sizeof(double); ARMCI_NbPutValueDouble(dsrc[me][j], &ddst_put[i][me*elems[1] + j], i, NULL); } start = end; end = start + COUNT * NUMAGG; for (j = start, k = 0; j < end; j += NUMAGG, k++) { src_ptr[k] = (void *)&dsrc[me][j]; dst_ptr[k] = (void *)&ddst_put[i][me*elems[1] + j]; } darr.src_ptr_array = src_ptr; darr.dst_ptr_array = dst_ptr; darr.bytes = NUMAGG * sizeof(double); darr.ptr_array_len = k; if ((rc = ARMCI_NbPutV(&darr, 1, i, NULL))) { ARMCI_Error("armci_nbputv failed\n", rc); } start = end; end = start + COUNT * NUMAGG; for (j = start; j < end; j += NUMAGG) { bytes = sizeof(double) * NUMAGG; if ((rc = ARMCI_NbPutS(&dsrc[me][j], NULL, &ddst_put[i][me*elems[1] + j], NULL, &bytes, 0, i, NULL))) { ARMCI_Error("armci_nbputs failed\n", rc); } } start = end; end = elems[1]; for (j = start; j < end; j += NUMAGG) { bytes = sizeof(double) * NUMAGG; if ((rc = ARMCI_NbPut(&dsrc[me][j], &ddst_put[i][me*elems[1] + j], bytes, i, NULL))) { ARMCI_Error("armci_nbput failed\n", rc); } } } for (i = 0; i < nproc; i++) { start = 0; end = COUNT * NUMAGG; for (j = start, k = 0; j < end; j += NUMAGG, k++) { src_ptr[k] = (void *)&dsrc[i][j]; dst_ptr[k] = (void *)&ddst_get[me][i*elems[1] + j]; } darr.src_ptr_array = src_ptr; darr.dst_ptr_array = dst_ptr; darr.bytes = NUMAGG * sizeof(double); darr.ptr_array_len = k; if ((rc = ARMCI_NbGetV(&darr, 1, i, NULL))) { ARMCI_Error("armci_nbgetv failed\n", rc); } start = end; end = start + COUNT * NUMAGG; for (j = start; j < end; j += NUMAGG) { bytes = sizeof(double) * NUMAGG; if ((rc = ARMCI_NbGetS(&dsrc[i][j], NULL, &ddst_get[me][i*elems[1] + j], NULL, &bytes, 0, i, NULL))) { ARMCI_Error("armci_nbputs failed\n", rc); } } start = end; end = elems[1]; for (j = start; j < end; j += NUMAGG) { bytes = sizeof(double) * NUMAGG; if ((rc = ARMCI_NbGet(&dsrc[i][j], &ddst_get[me][i*elems[1] + j], bytes, i, NULL))) { ARMCI_Error("armci_nbget failed\n", rc); } } } ARMCI_WaitAll(); ARMCI_Barrier(); ARMCI_AllFence(); ARMCI_Barrier(); for (i = 0; i < nproc; i++) { for (j = 0; j < elems[1]; j++) { if (ARMCI_ABS(ddst_put[me][i*elems[1] + j] - j * 1.001 *(i + 1)) > 0.1) { ARMCI_Error("implicit handle(s) failed...(a)", 0); } } } ARMCI_Barrier(); for (i = 0; i < nproc; i++) { for (j = 0; j < elems[1]; j++) { if (ARMCI_ABS(ddst_get[me][i*elems[1] + j] - j * 1.001 *(i + 1)) > 0.1) { ARMCI_Error("implicit handles(s) failed...(b)", 0); } } } ARMCI_Barrier(); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("O.K.\n\n"); fflush(stdout); } destroy_array((void **)ddst_put); destroy_array((void **)ddst_get); destroy_array((void **)dsrc); } int main(int argc, char *argv[]) { int ndim; armci_msg_init(&argc, &argv); ARMCI_Init_args(&argc, &argv); nproc = armci_msg_nproc(); me = armci_msg_me(); /* printf("nproc = %d, me = %d\n", nproc, me);*/ if (nproc > MAXPROC && me == 0) { ARMCI_Error("Test works for up to %d processors\n", MAXPROC); } if (me == 0) { printf("ARMCI test program (%d processes)\n", nproc); fflush(stdout); sleep(1); } /* if(me==1)armci_die("process 1 committing suicide",1); */ if (me == 0) { printf("\nTesting strided gets and puts\n"); printf("(Only std output for process 0 is printed)\n\n"); fflush(stdout); sleep(1); } for (ndim = 1; ndim <= MAXDIMS; ndim++) { test_dim(ndim); } ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("\nTesting non-blocking gets and puts\n"); fflush(stdout); sleep(1); } test_nbdim(); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("\nTesting non-blocking vector gets and puts\n"); fflush(stdout); sleep(1); } test_vec_small(); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("\nTesting atomic accumulate\n"); fflush(stdout); sleep(1); } for (ndim = 1; ndim <= MAXDIMS; ndim++) { test_acc(ndim); } ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("\nTesting Vector Interface using triangular patches of a 2-D array\n\n"); fflush(stdout); sleep(1); } test_vector(); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("\nTesting Accumulate with Vector Interface\n\n"); fflush(stdout); sleep(1); } test_vector_acc(); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("\nTesting atomic fetch&add\n"); printf("(Std Output for all processes is printed)\n\n"); fflush(stdout); sleep(1); } ARMCI_Barrier(); test_fetch_add(); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("\nTesting atomic swap\n"); fflush(stdout); } test_swap(); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("\nTesting register-originated put and get\n"); fflush(stdout); sleep(1); } test_rput(); ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("\nTesting aggregate put/get requests\n"); fflush(stdout); } /** * Aggregate put/get requests cannot be tested for\ number of procs * greater than 32. (Current implementation of aggregate put/get * can use at the maximum of 32 handles (defined by macro * _MAX_AGG_BUFFERS in aggregate.c). This test case is written in * such a way that each process puts/gets data to all the other * processes, thus the number of aggregate handle used is equal to * the number of processes created. */ if (nproc > 32) { if (me == 0) { printf("\n WARNING: Aggregate put/get requests cannot be tested for number of procs greater than 32.\n\n"); fflush(stdout); } } else { test_aggregate(); } ARMCI_AllFence(); ARMCI_Barrier(); if (me == 0) { printf("\nTesting implicit handles\n"); fflush(stdout); } test_implicit(); ARMCI_AllFence(); ARMCI_Barrier(); ARMCI_Barrier(); #if MEMLOCK_TEST test_memlock(); #endif ARMCI_Barrier(); if (me == 0) { printf("All tests passed\n"); fflush(stdout); } sleep(2); #ifdef NEWMALLOC { int i, j; for (i = 0; i < g_idx; i++) for (j = 0; j < nproc; j++) { ARMCI_Memdt(&meminfo[i][j], 0); } for (i = 0; i < g_idx; i++) { ARMCI_Memctl(&meminfo[i][me]); } } #endif ARMCI_Barrier(); ARMCI_Finalize(); armci_msg_finalize(); //MPI_Finalize(); return(0); } ga-5-3/armci/testing/testitr.c0000640005473000001440000000373711721474416015227 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_ASSERT_H # include #endif #include "iterator.h" int main(int argc, char **argv) { stride_info_t sinfo, dinfo; int a[10][10], b[11][11]; int asr[1] = {10 * sizeof(int)}; int bsr[1] = {11 * sizeof(int)}; int count[2] = {5 * sizeof(int), 5}; int i, j; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { a[i][j] = i * 10 + j; } } for (i = 0; i < 11; i++) { for (j = 0; j < 11; j++) { b[i][j] = 0; } } armci_stride_info_init(&sinfo, &a[2][3], 1, asr, count); armci_stride_info_init(&dinfo, &b[3][4], 1, bsr, count); assert(armci_stride_info_size(&sinfo) == 5); assert(armci_stride_info_size(&dinfo) == 5); assert(armci_stride_info_pos(&sinfo) == 0); assert(armci_stride_info_pos(&dinfo) == 0); while (armci_stride_info_has_more(&sinfo)) { int bytes; char *ap, *bp; assert(armci_stride_info_has_more(&dinfo)); bytes = armci_stride_info_seg_size(&sinfo); assert(bytes == armci_stride_info_seg_size(&dinfo)); ap = armci_stride_info_seg_ptr(&sinfo); bp = armci_stride_info_seg_ptr(&dinfo); memcpy(bp, ap, bytes); armci_stride_info_next(&sinfo); armci_stride_info_next(&dinfo); } armci_stride_info_destroy(&sinfo); armci_stride_info_destroy(&dinfo); #if 0 for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { printf("%3d ", a[i][j]); } printf("\n"); } for (i = 0; i < 11; i++) { for (j = 0; j < 11; j++) { printf("%3d ", b[i][j]); } printf("\n"); } #endif for (i = 2; i < 2 + 5; i++) { for (j = 3; j < 3 + 5; j++) { if (a[i][j] != b[i+1][j+1]) { printf("a[%d][%d]=%d b[%d][%d]=%d\n", i, j, a[i][j], i, j, b[i][j]); printf("Test Failed\n"); return 0; } } } printf("Success\n"); return 0; } ga-5-3/armci/testing/rpl_armci_msg_finalize.c0000640005473000001440000000016512115436166020216 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include void armci_msg_finalize() { MPI_Finalize(); } ga-5-3/armci/testing/fork.c0000640005473000001440000000432311643376201014456 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include int main(int argc, char **argv, char **envp) { int i, ret, npes; int num_interfaces; ptl_handle_ni_t nih; ptl_handle_eq_t eqh; ptl_ni_limits_t ptl_limits; pid_t child; ptl_process_id_t rnk; child = fork(); if ((ret = PtlInit(&num_interfaces)) != PTL_OK) { printf("%s: PtlInit failed: %d\n", FUNCTION_NAME, ret); exit(1); } printf("%s: PtlInit succeeds (%d)\n", FUNCTION_NAME, ret); if ((ret = PtlNIInit( IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK, PTL_IFACE_SS), PTL_PID_ANY, NULL, &ptl_limits, &nih)) != PTL_OK) { printf("%s: PtlNIInit 1 failed: %d\n", FUNCTION_NAME, ret); } if ((ret = PtlNIFini(nih)) != PTL_OK) { printf("%s: PtlNIFini failed: %d\n", FUNCTION_NAME, ret); } PtlFini(); if ((ret = PtlInit(&num_interfaces)) != PTL_OK) { printf("%s: PtlInit failed: %d\n", FUNCTION_NAME, ret); exit(1); } if ((ret = PtlNIInit( IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK, PTL_IFACE_SS), PTL_PID_ANY, NULL, &ptl_limits, &nih)) != PTL_OK) { printf("%s: PtlNIInit 2 failed: %d\n", FUNCTION_NAME, ret); exit(1); } #if 0 if ((ret = PtlNIInit( IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK, PTL_IFACE_SS), PTL_PID_ANY, NULL, &ptl_limits, &nih)) != PTL_OK) { printf("%s: PtlNIInit failed: %d\n", FUNCTION_NAME, ret); exit(1); } #endif printf("%s: PtlNIInit succeeds (%d)\n", FUNCTION_NAME, ret); if ((ret = PtlEQAlloc(nih, 4096, NULL, &eqh)) != PTL_OK) { printf("%s: PtlEQAlloc failed: %d(%d)\n", FUNCTION_NAME, ret, child); exit(1); } printf("%s: PtlEQAlloc succeeds (%d:%d)\n", FUNCTION_NAME, child, ret); if ((ret = PtlGetId(nih, &rnk)) != PTL_OK) { printf("%s: PtlGetId failed: %d(%d)\n", FUNCTION_NAME, ret, child); exit(1); } printf("%s: nid=%d pid=%d(%d)\n", FUNCTION_NAME, rnk.nid, rnk.pid, child); if (child) { MPI_Init(&argc, &argv); MPI_Finalize(); printf("%s: mpi_init and finalize succeed(%d)\n", FUNCTION_NAME, child); } } ga-5-3/armci/config.h.in0000640005473000001440000004314212274750307013725 0ustar d3n000users/* config.h.in. Generated from configure.ac by autoheader. */ /* TODO */ #undef ACC_SMP /* TODO */ #undef ALLOC_MUNMAP /* TODO */ #undef ALLOW_PIN /* Defined when using DCMF */ #undef ARMCIX /* upper bound for ARMCI_DEFAULT_SHMMAX environment variable */ #undef ARMCI_DEFAULT_SHMMAX_UBOUND /* Define to 1 if GPC calls are enabled */ #undef ARMCI_ENABLE_GPC_CALLS /* TODO */ #undef ARMCI_GROUP /* Define if profiling is enabled */ #undef ARMCI_PROFILE /* Define to 1 on BlueGene/L systems */ #undef BGL /* TODO */ #undef BGML /* Define to 1 on BlueGene/P systems */ #undef BGP /* Define to 1 on Cray XT systems using Catamount */ #undef CATAMOUNT /* TODO */ #undef CLUSTER /* TODO */ #undef CRAY_SHMEM /* Define to 1 on Cray SV1 systems */ #undef CRAY_SV1 /* Define to 1 on Cray SV2 systems */ #undef CRAY_SV2 /* Define to 1 on Cray T3E systems */ #undef CRAY_T3E /* for Gemini */ #undef CRAY_UGNI /* TODO */ #undef CRAY_XT /* Define to 1 on Cray YMP systems */ #undef CRAY_YMP /* Define to 1 on Cygnus systems */ #undef CYGNUS /* Define to 1 on Cygwin systems */ #undef CYGWIN /* TODO */ #undef DATA_SERVER /* Defined when using DCMF */ #undef DCMF /* Define to 1 on DEC OSF */ #undef DECOSF /* TODO */ #undef DOELAN4 /* Define if checkpointing is enabled */ #undef ENABLE_CHECKPOINT /* Define if tracing is enabled */ #undef ENABLE_TRACE /* Define to 1 on fujitsu systems */ #undef FUJITSU_VPP /* Define to 1 on fujitsu systems */ #undef FUJITSU_VPP64 /* CPP symbol for function name, if available */ #undef FUNCTION_NAME /* for Gemini */ #undef GEMINI /* TODO */ #undef GM /* set to 1 if ARMCI has armci_group_comm function */ #undef HAVE_ARMCI_GROUP_COMM /* set to 1 if ARMCI has ARMCI_Group.comm member */ #undef HAVE_ARMCI_GROUP_COMM_MEMBER /* set to 1 if ARMCI has ARMCI_Initialized function */ #undef HAVE_ARMCI_INITIALIZED /* set to 1 if ARMCI has armci_msg_finalize function */ #undef HAVE_ARMCI_MSG_FINALIZE /* set to 1 if ARMCI has armci_msg_init function */ #undef HAVE_ARMCI_MSG_INIT /* set to 1 if ARMCI has armci_notify function */ #undef HAVE_ARMCI_NOTIFY /* set to 1 if ARMCI has armci_stride_info_init function */ #undef HAVE_ARMCI_STRIDE_INFO_INIT /* Define to 1 if you have the header file. */ #undef HAVE_ASSERT_H /* Define to 1 if you have the `bzero' function. */ #undef HAVE_BZERO /* Define to 1 if you have the header file. */ #undef HAVE_C_ASM_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ #undef HAVE_DOPRNT /* Define to 1 if you have the header file. */ #undef HAVE_ERRNO_H /* Define to 1 if you have the `fastbcopy' function. */ #undef HAVE_FASTBCOPY /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the header file. */ #undef HAVE_FLOAT_H /* Define to 1 if you have the 'floor' function. */ #undef HAVE_FLOOR /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if you have the `ftruncate' function. */ #undef HAVE_FTRUNCATE /* Define to 1 if you have the `gethostbyname' function. */ #undef HAVE_GETHOSTBYNAME /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #undef HAVE_IA64_SYS_INLINE_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define to 1 if you have the header file. */ #undef HAVE_MATH_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the header file. */ #undef HAVE_MPP_SHMEM_H /* Define to 1 if you have the `munmap' function. */ #undef HAVE_MUNMAP /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_TCP_H /* set to 1 if libonesided has onesided_fadd (added in v1.6) */ #undef HAVE_ONESIDED_FADD /* set to 1 if libonesided has onesided_mem_htflush (added in v1.5) */ #undef HAVE_ONESIDED_MEM_HTFLUSH /* Define to 1 if you have the 'pow' function. */ #undef HAVE_POW /* Define to 1 if you have the header file. */ #undef HAVE_PROCESS_H /* Define to 1 if you have the `pthread_getconcurrency' function. */ #undef HAVE_PTHREAD_GETCONCURRENCY /* Define to 1 if you have the `pthread_setconcurrency' function. */ #undef HAVE_PTHREAD_SETCONCURRENCY /* Define to 1 if the system has the type `ptrdiff_t'. */ #undef HAVE_PTRDIFF_T /* Define to 1 if you have the header file. */ #undef HAVE_RPC_RPC_H /* Define to 1 if you have the header file. */ #undef HAVE_RPC_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_RPC_XDR_H /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if you have the header file. */ #undef HAVE_SETJMP_H /* Define to 1 if you have the header file. */ #undef HAVE_SIGNAL_H /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* Define to 1 if you have the 'sqrt' function. */ #undef HAVE_SQRT /* Define to 1 if you have the header file. */ #undef HAVE_STDARG_H /* Define to 1 if stdbool.h conforms to C99. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_ATOMIC_OP_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_ERRNO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IPC_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MMAN_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SEM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SHM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSCALL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSTEMCFG_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_UIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_WAIT_H /* Define this if weak aliases may be created with #pragma weak */ #undef HAVE_SYS_WEAK_ALIAS_PRAGMA /* Define to 1 if you have the header file. */ #undef HAVE_TIME_H /* define if sys/sem.h has union semun */ #undef HAVE_UNION_SEMUN /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* Define to 1 if you have the `vprintf' function. */ #undef HAVE_VPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_WINDOWS_H /* Define to 1 if you have the header file. */ #undef HAVE_WINSOCK_H /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Define to 1 if you have the `xdr_char' function. */ #undef HAVE_XDR_CHAR /* Define to 1 if you have the `_acquire_lock' function. */ #undef HAVE__ACQUIRE_LOCK /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to 1 if you have the `_lock_try' function. */ #undef HAVE__LOCK_TRY /* Define to 1 on hitachi systems */ #undef HITACHI /* Define to 1 on HP-UX systems */ #undef HPUX /* Define to 1 on 64bit HP-UX systems */ #undef HPUX64 /* Define to 1 on IBM SP systems */ #undef IBM /* Define to 1 on 64bit IBM SP systems */ #undef IBM64 /* Define to 1 on ??? systems */ #undef INTERIX /* TODO */ #undef LAPI /* Define to 1 on 64bit IBM systems with LAPI */ #undef LAPI64 /* TODO */ #undef LAPI_RDMA /* for Gemini */ #undef LIBONESIDED /* Define to 1 on generic Linux systems */ #undef LINUX /* Define to 1 on generic 64bit Linux systems */ #undef LINUX64 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define to 1 on OSX systems */ #undef MACX /* Define to 1 on 64bit OSX systems */ #undef MACX64 /* TODO */ #undef MELLANOX /* TODO */ #undef MPI_MT /* TODO */ #undef MPI_SPAWN /* Use MPI for messaging */ #undef MSG_COMMS_MPI /* Use TCGMSG for messaging */ #undef MSG_COMMS_TCGMSG /* Use TCGMSG (ipcv4.0) for messaging */ #undef MSG_COMMS_TCGMSG4 /* Use TCGMSG (ipcv5.0) for messaing */ #undef MSG_COMMS_TCGMSG5 /* TODO */ #undef MULTI_CTX /* TODO */ #undef NB_NONCONT /* Define to 1 if assertions should be disabled. */ #undef NDEBUG /* Define to 1 on NEC systems */ #undef NEC /* Define to 1 on 64bit NEC systems */ #undef NEC64 /* whether to wait until the last moment to call ARMCI_Init() in TCGMSG-MPI */ #undef NEED_DELAY_TCGMSG_MPI_STARTUP /* Creates memfenc macro */ #undef NEED_MEM_SYNC /* for portals, enable new malloc */ #undef NEW_MALLOC /* this was defined unconditionally when using LAPI for tcgmsg 5 */ #undef NOTIFY_SENDER /* define when inline asm is not supported */ #undef NO_I386ASM /* Disables use of shared memory */ #undef NO_SHM /* TODO */ #undef OPENIB /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* TODO */ #undef PEND_BUFS /* TODO */ #undef PORTALS /* TODO */ #undef POSIX_THREADS /* TODO */ #undef PTHREADS /* TODO */ #undef QUADRICS /* TODO */ #undef REPORT_SHMMAX /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* Define to the type of arg 1 for `select'. */ #undef SELECT_TYPE_ARG1 /* Define to the type of args 2, 3 and 4 for `select'. */ #undef SELECT_TYPE_ARG234 /* Define to the type of arg 5 for `select'. */ #undef SELECT_TYPE_ARG5 /* TODO */ #undef SERVER_THREAD /* Define to 1 on ??? systems */ #undef SGI /* Define to 1 on ??? systems */ #undef SGITFP /* Define to 1 on ??? systems */ #undef SGI_N32 /* The size of `char', as computed by sizeof. */ #undef SIZEOF_CHAR /* The size of `double', as computed by sizeof. */ #undef SIZEOF_DOUBLE /* The size of `float', as computed by sizeof. */ #undef SIZEOF_FLOAT /* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of `long long', as computed by sizeof. */ #undef SIZEOF_LONG_LONG /* The size of `short', as computed by sizeof. */ #undef SIZEOF_SHORT /* The size of `void*', as computed by sizeof. */ #undef SIZEOF_VOIDP /* TODO */ #undef SOCKETS /* Define to 1 on Solaris systems */ #undef SOLARIS /* Define to 1 on 64bit Solaris systems */ #undef SOLARIS64 /* TODO */ #undef SPAWN_CRAY_XT /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Defined if we want this system to use SYSV shared memory */ #undef SYSV /* deprecated, use MSG_COMMS_TCGMSG */ #undef TCGMSG /* remote shell for TCGMSG */ #undef TCGMSG_RSH /* Gather timing information for TCGMSG */ #undef TCGMSG_TIMINGS /* turn on thread safety */ #undef THREAD_SAFE /* TODO */ #undef USE_MALLOC /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* TODO */ #undef VAPI /* Version number of package */ #undef VERSION /* TODO */ #undef VIA /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE /* TODO */ #undef _REENTRANT /* Define for Solaris 2.5.1 so the uint32_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT32_T /* Define for Solaris 2.5.1 so the uint64_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT64_T /* Define for Solaris 2.5.1 so the uint8_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT8_T /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to the type of a signed integer type of width exactly 16 bits if such a type exists and the standard includes do not define it. */ #undef int16_t /* Define to the type of a signed integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef int32_t /* Define to the type of a signed integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ #undef int64_t /* Define to `long int' if does not define. */ #undef off_t /* Define to `int' if does not define. */ #undef pid_t /* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported directly. */ #undef restrict /* Work around a bug in Sun C++: it does not support _Restrict or __restrict__, even though the corresponding Sun C compiler ends up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. Perhaps some future version of Sun C++ will work with restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ #if defined __SUNPRO_CC && !defined __RESTRICT # define _Restrict # define __restrict__ #endif /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to `int' if does not define. */ #undef ssize_t /* Define to the type of an unsigned integer type of width exactly 16 bits if such a type exists and the standard includes do not define it. */ #undef uint16_t /* Define to the type of an unsigned integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef uint32_t /* Define to the type of an unsigned integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ #undef uint64_t /* Define to the type of an unsigned integer type of width exactly 8 bits if such a type exists and the standard includes do not define it. */ #undef uint8_t /* Define as `fork' if `vfork' does not work. */ #undef vfork /* Define to empty if the keyword `volatile' does not work. Warning: valid code using `volatile' can become incorrect without. Disable with care. */ #undef volatile /* DO NOT MODIFY THE FOLLOWING PREPROCESSOR DIRECTIVES */ #ifdef MSG_COMMS_MPI # ifdef __cplusplus # define MPIPP # else # define MPI # endif /* __cplusplus */ #endif /* MSG_COMMS_MPI */ ga-5-3/armci/build-aux/0000750005473000001440000000000012275260540013563 5ustar d3n000usersga-5-3/armci/build-aux/depcomp0000750005473000001440000005064312247162412015146 0ustar d3n000users#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-03-27.16; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # A tabulation character. tab=' ' # A newline character. nl=' ' if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form 'foo.o: dependent.h', # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ga-5-3/armci/build-aux/ltmain.sh0000750005473000001440000105154412247166641015426 0ustar d3n000users # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mkl*|-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -mkl*|-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mkl*|-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 ga-5-3/armci/build-aux/install-sh0000750005473000001440000003325611650323546015602 0ustar d3n000users#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ga-5-3/armci/build-aux/compile0000750005473000001440000000717311410510454015141 0ustar d3n000users#! /bin/sh # Wrapper for compilers which do not understand `-c -o'. scriptversion=2009-04-28.21; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 Free Software # Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand `-c -o'. Remove `-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file `INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; esac ofile= cfile= eat= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as `compile cc -o foo foo.c'. # So we strip `-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no `-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # `.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use `[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ga-5-3/armci/build-aux/missing0000750005473000001440000002415212247162412015164 0ustar d3n000users#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ga-5-3/armci/build-aux/config.guess0000750005473000001440000012743212247162412016112 0ustar d3n000users#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ga-5-3/armci/build-aux/config.sub0000750005473000001440000010517612247162412015556 0ustar d3n000users#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ga-5-3/armci/tools/0000750005473000001440000000000012275260542013033 5ustar d3n000usersga-5-3/armci/tools/prof_gen.py0000750005473000001440000002027411622306457015215 0ustar d3n000users#!/usr/bin/env python '''Generate the armci_prof.c source from the parmci.h header.''' import sys name_to_event = { "ARMCI_Acc" : "ARMCI_PROF_ACC", "ARMCI_AccS" : "ARMCI_PROF_ACCS", "ARMCI_AccV" : "ARMCI_PROF_ACCV", "ARMCI_AllFence" : "ARMCI_PROF_ALLFENCE", "ARMCI_Barrier" : "ARMCI_PROF_BARRIER", "ARMCI_Fence" : "ARMCI_PROF_FENCE", "ARMCI_Get" : "ARMCI_PROF_GET", "ARMCI_GetS" : "ARMCI_PROF_GETS", "ARMCI_GetV" : "ARMCI_PROF_GETV", "ARMCI_NbAcc" : "ARMCI_PROF_NBACC", "ARMCI_NbAccS" : "ARMCI_PROF_NBACCS", "ARMCI_NbAccV" : "ARMCI_PROF_NBACCV", "ARMCI_NbGet" : "ARMCI_PROF_NBGET", "ARMCI_NbGetS" : "ARMCI_PROF_NBGETS", "ARMCI_NbGetV" : "ARMCI_PROF_NBGETV", "ARMCI_NbPut" : "ARMCI_PROF_NBPUT", "ARMCI_NbPutS" : "ARMCI_PROF_NBPUTS", "ARMCI_NbPutV" : "ARMCI_PROF_NBPUTV", "ARMCI_Put" : "ARMCI_PROF_PUT", "ARMCI_PutS" : "ARMCI_PROF_PUTS", "ARMCI_PutV" : "ARMCI_PROF_PUTV", "ARMCI_Rmw" : "ARMCI_PROF_RMW", "ARMCI_Wait" : "ARMCI_PROF_WAIT", "armci_msg_barrier" : "ARMCI_PROF_BARRIER", "armci_msg_group_barrier" : "ARMCI_PROF_BARRIER", "armci_notify_wait" : "ARMCI_PROF_NOTIFY", } def get_signatures(header): # first, gather all function signatures from parmci.h aka argv[1] accumulating = False signatures = [] current_signature = '' EXTERN = 'extern' SEMICOLON = ';' for line in open(header): line = line.strip() # remove whitespace before and after line if not line: continue # skip blank lines if EXTERN in line and SEMICOLON in line: signatures.append(line) elif EXTERN in line: current_signature = line accumulating = True elif SEMICOLON in line and accumulating: current_signature += line signatures.append(current_signature) accumulating = False elif accumulating: current_signature += line return signatures class FunctionArgument(object): def __init__(self, signature): self.pointer = signature.count('*') self.array = '[' in signature signature = signature.replace('*','').strip() signature = signature.replace('[','').strip() signature = signature.replace(']','').strip() self.type,self.name = signature.split() def __str__(self): ret = self.type[:] ret += ' ' for p in range(self.pointer): ret += '*' ret += self.name if self.array: ret += '[]' return ret class Function(object): def __init__(self, signature): signature = signature.replace('extern','').strip() self.return_type,signature = signature.split(None,1) self.return_type = self.return_type.strip() signature = signature.strip() if '*' not in self.return_type and signature[0] == '*': # return type is void* not void self.return_type += '*' signature = signature[1:].strip() self.name,signature = signature.split('(',1) self.name = self.name.strip() signature = signature.replace(')','').strip() signature = signature.replace(';','').strip() self.args = [] if signature: for arg in signature.split(','): self.args.append(FunctionArgument(arg.strip())) def get_call(self, name=None): sig = '' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += arg.name sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def get_signature(self, name=None): sig = self.return_type[:] sig += ' ' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += str(arg) sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def __str__(self): return self.get_signature() if __name__ == '__main__': if len(sys.argv) != 2: print 'incorrect number of arguments' print 'usage: prof_gen.py > ' sys.exit(len(sys.argv)) # print headers print ''' #if HAVE_CONFIG_H # include "config.h" #endif #include #include "armci.h" #include "parmci.h" #include "armci_profile.h" #include "armci_profile.c" ''' functions = {} # parse signatures into the Function class for sig in get_signatures(sys.argv[1]): function = Function(sig) functions[function.name] = function # now process the functions for name in sorted(functions): func = functions[name] maybe_declare = '' maybe_assign = '' maybe_return = '' if '*' in func.return_type or 'void' not in func.return_type: maybe_declare = '%s ret;' % func.return_type maybe_assign = 'ret = ' maybe_return = 'return ret;' func = functions[name] new_name = None if 'PARMCI_' in name: new_name = name.replace('PARMCI_','ARMCI_') elif 'parmci_' in name: new_name = name.replace('parmci_','armci_') if new_name in ['ARMCI_Init','ARMCI_Init_args']: print ''' %s { int ret; ret = %s; armci_profile_init(); return ret; } ''' % (func.get_signature(new_name), func.get_call()) elif new_name in ['ARMCI_Finalize']: print ''' %s { armci_profile_terminate(); %s; } ''' % (func.get_signature(new_name), func.get_call()) elif new_name in ['ARMCI_GetV', 'ARMCI_PutV', 'ARMCI_AccV', 'ARMCI_NbGetV', 'ARMCI_NbPutV', 'ARMCI_NbAccV']: print ''' %s { %s armci_profile_start_vector(darr, len, proc, %s); %s%s; armci_profile_stop_vector(%s); %s } ''' % (func.get_signature(new_name), maybe_declare, name_to_event[new_name], maybe_assign, func.get_call(), name_to_event[new_name], maybe_return) elif new_name in ['ARMCI_GetS', 'ARMCI_PutS', 'ARMCI_AccS', 'ARMCI_NbGetS', 'ARMCI_NbPutS', 'ARMCI_NbAccS']: print ''' %s { %s armci_profile_start_strided(count, stride_levels, proc, %s); %s%s; armci_profile_stop_strided(%s); %s } ''' % (func.get_signature(new_name), maybe_declare, name_to_event[new_name], maybe_assign, func.get_call(), name_to_event[new_name], maybe_return) elif new_name in ['ARMCI_Get', 'ARMCI_Put', 'ARMCI_Acc', 'ARMCI_NbGet', 'ARMCI_NbPut', 'ARMCI_NbAcc']: print ''' %s { %s armci_profile_start_strided(&bytes, 0, proc, %s); %s%s; armci_profile_stop_strided(%s); %s } ''' % (func.get_signature(new_name), maybe_declare, name_to_event[new_name], maybe_assign, func.get_call(), name_to_event[new_name], maybe_return) elif "ARMCI_Fence" in new_name: print ''' %s { if (!SAMECLUSNODE(proc)) armci_profile_start(ARMCI_PROF_FENCE); %s%s; if (!SAMECLUSNODE(proc)) armci_profile_stop(ARMCI_PROF_FENCE); } ''' % (func.get_signature(new_name), maybe_assign, func.get_call()) elif new_name in name_to_event: print ''' %s { %s armci_profile_start(%s); %s%s; armci_profile_stop(%s); %s } ''' % (func.get_signature(new_name), maybe_declare, name_to_event[new_name], maybe_assign, func.get_call(), name_to_event[new_name], maybe_return) else: print ''' %s { %s %s%s; %s } ''' % (func.get_signature(new_name), maybe_declare, maybe_assign, func.get_call(), maybe_return) ga-5-3/armci/tools/armci_prof.c0000640005473000001440000002631611622514132015321 0ustar d3n000users #if HAVE_CONFIG_H # include "config.h" #endif #include #include "armci.h" #include "parmci.h" #include "armci_profile.h" #include "armci_profile.c" int ARMCI_Acc(int optype, void *scale, void *src, void *dst, int bytes, int proc) { int ret; armci_profile_start_strided(&bytes, 0, proc, ARMCI_PROF_ACC); ret = PARMCI_Acc(optype, scale, src, dst, bytes, proc); armci_profile_stop_strided(ARMCI_PROF_ACC); return ret; } int ARMCI_AccS(int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { int ret; armci_profile_start_strided(count, stride_levels, proc, ARMCI_PROF_ACCS); ret = PARMCI_AccS(optype, scale, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); armci_profile_stop_strided(ARMCI_PROF_ACCS); return ret; } int ARMCI_AccV(int op, void *scale, armci_giov_t *darr, int len, int proc) { int ret; armci_profile_start_vector(darr, len, proc, ARMCI_PROF_ACCV); ret = PARMCI_AccV(op, scale, darr, len, proc); armci_profile_stop_vector(ARMCI_PROF_ACCV); return ret; } void ARMCI_AllFence() { armci_profile_start(ARMCI_PROF_ALLFENCE); PARMCI_AllFence(); armci_profile_stop(ARMCI_PROF_ALLFENCE); } void ARMCI_Barrier() { armci_profile_start(ARMCI_PROF_BARRIER); PARMCI_Barrier(); armci_profile_stop(ARMCI_PROF_BARRIER); } int ARMCI_Create_mutexes(int num) { int ret; ret = PARMCI_Create_mutexes(num); return ret; } int ARMCI_Destroy_mutexes() { int ret; ret = PARMCI_Destroy_mutexes(); return ret; } void ARMCI_Fence(int proc) { if (!SAMECLUSNODE(proc)) armci_profile_start(ARMCI_PROF_FENCE); PARMCI_Fence(proc); if (!SAMECLUSNODE(proc)) armci_profile_stop(ARMCI_PROF_FENCE); } void ARMCI_Finalize() { armci_profile_terminate(); PARMCI_Finalize(); } int ARMCI_Free(void *ptr) { int ret; ret = PARMCI_Free(ptr); return ret; } int ARMCI_Free_local(void *ptr) { int ret; ret = PARMCI_Free_local(ptr); return ret; } int ARMCI_Get(void *src, void *dst, int bytes, int proc) { int ret; armci_profile_start_strided(&bytes, 0, proc, ARMCI_PROF_GET); ret = PARMCI_Get(src, dst, bytes, proc); armci_profile_stop_strided(ARMCI_PROF_GET); return ret; } int ARMCI_GetS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { int ret; armci_profile_start_strided(count, stride_levels, proc, ARMCI_PROF_GETS); ret = PARMCI_GetS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); armci_profile_stop_strided(ARMCI_PROF_GETS); return ret; } int ARMCI_GetV(armci_giov_t *darr, int len, int proc) { int ret; armci_profile_start_vector(darr, len, proc, ARMCI_PROF_GETV); ret = PARMCI_GetV(darr, len, proc); armci_profile_stop_vector(ARMCI_PROF_GETV); return ret; } double ARMCI_GetValueDouble(void *src, int proc) { double ret; ret = PARMCI_GetValueDouble(src, proc); return ret; } float ARMCI_GetValueFloat(void *src, int proc) { float ret; ret = PARMCI_GetValueFloat(src, proc); return ret; } int ARMCI_GetValueInt(void *src, int proc) { int ret; ret = PARMCI_GetValueInt(src, proc); return ret; } long ARMCI_GetValueLong(void *src, int proc) { long ret; ret = PARMCI_GetValueLong(src, proc); return ret; } int ARMCI_Init() { int ret; ret = PARMCI_Init(); armci_profile_init(); return ret; } int ARMCI_Init_args(int *argc, char ***argv) { int ret; ret = PARMCI_Init_args(argc, argv); armci_profile_init(); return ret; } void ARMCI_Lock(int mutex, int proc) { PARMCI_Lock(mutex, proc); } int ARMCI_Malloc(void **ptr_arr, armci_size_t bytes) { int ret; ret = PARMCI_Malloc(ptr_arr, bytes); return ret; } void* ARMCI_Malloc_local(armci_size_t bytes) { void* ret; ret = PARMCI_Malloc_local(bytes); return ret; } void* ARMCI_Memat(armci_meminfo_t *meminfo, long offset) { void* ret; ret = PARMCI_Memat(meminfo, offset); return ret; } void ARMCI_Memget(size_t bytes, armci_meminfo_t *meminfo, int memflg) { PARMCI_Memget(bytes, meminfo, memflg); } int ARMCI_NbAccS(int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t *nb_handle) { int ret; armci_profile_start_strided(count, stride_levels, proc, ARMCI_PROF_NBACCS); ret = PARMCI_NbAccS(optype, scale, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); armci_profile_stop_strided(ARMCI_PROF_NBACCS); return ret; } int ARMCI_NbAccV(int op, void *scale, armci_giov_t *darr, int len, int proc, armci_hdl_t *nb_handle) { int ret; armci_profile_start_vector(darr, len, proc, ARMCI_PROF_NBACCV); ret = PARMCI_NbAccV(op, scale, darr, len, proc, nb_handle); armci_profile_stop_vector(ARMCI_PROF_NBACCV); return ret; } int ARMCI_NbGet(void *src, void *dst, int bytes, int proc, armci_hdl_t *nb_handle) { int ret; armci_profile_start_strided(&bytes, 0, proc, ARMCI_PROF_NBGET); ret = PARMCI_NbGet(src, dst, bytes, proc, nb_handle); armci_profile_stop_strided(ARMCI_PROF_NBGET); return ret; } int ARMCI_NbGetS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t *nb_handle) { int ret; armci_profile_start_strided(count, stride_levels, proc, ARMCI_PROF_NBGETS); ret = PARMCI_NbGetS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); armci_profile_stop_strided(ARMCI_PROF_NBGETS); return ret; } int ARMCI_NbGetV(armci_giov_t *darr, int len, int proc, armci_hdl_t *nb_handle) { int ret; armci_profile_start_vector(darr, len, proc, ARMCI_PROF_NBGETV); ret = PARMCI_NbGetV(darr, len, proc, nb_handle); armci_profile_stop_vector(ARMCI_PROF_NBGETV); return ret; } int ARMCI_NbPut(void *src, void *dst, int bytes, int proc, armci_hdl_t *nb_handle) { int ret; armci_profile_start_strided(&bytes, 0, proc, ARMCI_PROF_NBPUT); ret = PARMCI_NbPut(src, dst, bytes, proc, nb_handle); armci_profile_stop_strided(ARMCI_PROF_NBPUT); return ret; } int ARMCI_NbPutS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t *nb_handle) { int ret; armci_profile_start_strided(count, stride_levels, proc, ARMCI_PROF_NBPUTS); ret = PARMCI_NbPutS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); armci_profile_stop_strided(ARMCI_PROF_NBPUTS); return ret; } int ARMCI_NbPutV(armci_giov_t *darr, int len, int proc, armci_hdl_t *nb_handle) { int ret; armci_profile_start_vector(darr, len, proc, ARMCI_PROF_NBPUTV); ret = PARMCI_NbPutV(darr, len, proc, nb_handle); armci_profile_stop_vector(ARMCI_PROF_NBPUTV); return ret; } int ARMCI_NbPutValueDouble(double src, void *dst, int proc, armci_hdl_t *nb_handle) { int ret; ret = PARMCI_NbPutValueDouble(src, dst, proc, nb_handle); return ret; } int ARMCI_NbPutValueFloat(float src, void *dst, int proc, armci_hdl_t *nb_handle) { int ret; ret = PARMCI_NbPutValueFloat(src, dst, proc, nb_handle); return ret; } int ARMCI_NbPutValueInt(int src, void *dst, int proc, armci_hdl_t *nb_handle) { int ret; ret = PARMCI_NbPutValueInt(src, dst, proc, nb_handle); return ret; } int ARMCI_NbPutValueLong(long src, void *dst, int proc, armci_hdl_t *nb_handle) { int ret; ret = PARMCI_NbPutValueLong(src, dst, proc, nb_handle); return ret; } int ARMCI_Put(void *src, void *dst, int bytes, int proc) { int ret; armci_profile_start_strided(&bytes, 0, proc, ARMCI_PROF_PUT); ret = PARMCI_Put(src, dst, bytes, proc); armci_profile_stop_strided(ARMCI_PROF_PUT); return ret; } int ARMCI_PutS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { int ret; armci_profile_start_strided(count, stride_levels, proc, ARMCI_PROF_PUTS); ret = PARMCI_PutS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); armci_profile_stop_strided(ARMCI_PROF_PUTS); return ret; } int ARMCI_PutS_flag(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc) { int ret; ret = PARMCI_PutS_flag(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, flag, val, proc); return ret; } int ARMCI_PutS_flag_dir(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc) { int ret; ret = PARMCI_PutS_flag_dir(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, flag, val, proc); return ret; } int ARMCI_PutV(armci_giov_t *darr, int len, int proc) { int ret; armci_profile_start_vector(darr, len, proc, ARMCI_PROF_PUTV); ret = PARMCI_PutV(darr, len, proc); armci_profile_stop_vector(ARMCI_PROF_PUTV); return ret; } int ARMCI_PutValueDouble(double src, void *dst, int proc) { int ret; ret = PARMCI_PutValueDouble(src, dst, proc); return ret; } int ARMCI_PutValueFloat(float src, void *dst, int proc) { int ret; ret = PARMCI_PutValueFloat(src, dst, proc); return ret; } int ARMCI_PutValueInt(int src, void *dst, int proc) { int ret; ret = PARMCI_PutValueInt(src, dst, proc); return ret; } int ARMCI_PutValueLong(long src, void *dst, int proc) { int ret; ret = PARMCI_PutValueLong(src, dst, proc); return ret; } int ARMCI_Put_flag(void *src, void *dst, int bytes, int *f, int v, int proc) { int ret; ret = PARMCI_Put_flag(src, dst, bytes, f, v, proc); return ret; } int ARMCI_Rmw(int op, void *ploc, void *prem, int extra, int proc) { int ret; armci_profile_start(ARMCI_PROF_RMW); ret = PARMCI_Rmw(op, ploc, prem, extra, proc); armci_profile_stop(ARMCI_PROF_RMW); return ret; } int ARMCI_Test(armci_hdl_t *nb_handle) { int ret; ret = PARMCI_Test(nb_handle); return ret; } void ARMCI_Unlock(int mutex, int proc) { PARMCI_Unlock(mutex, proc); } int ARMCI_Wait(armci_hdl_t *nb_handle) { int ret; armci_profile_start(ARMCI_PROF_WAIT); ret = PARMCI_Wait(nb_handle); armci_profile_stop(ARMCI_PROF_WAIT); return ret; } int ARMCI_WaitAll() { int ret; ret = PARMCI_WaitAll(); return ret; } int ARMCI_WaitProc(int proc) { int ret; ret = PARMCI_WaitProc(proc); return ret; } void armci_msg_barrier() { armci_profile_start(ARMCI_PROF_BARRIER); parmci_msg_barrier(); armci_profile_stop(ARMCI_PROF_BARRIER); } void armci_msg_group_barrier(ARMCI_Group *group) { armci_profile_start(ARMCI_PROF_BARRIER); parmci_msg_group_barrier(group); armci_profile_stop(ARMCI_PROF_BARRIER); } int armci_notify_wait(int proc, int *pval) { int ret; armci_profile_start(ARMCI_PROF_NOTIFY); ret = parmci_notify_wait(proc, pval); armci_profile_stop(ARMCI_PROF_NOTIFY); return ret; } ga-5-3/armci/tools/armci_profile.c0000640005473000001440000005775511622306457016037 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: armci_profile.c,v 1.8 2005-11-30 10:20:53 vinod Exp $ */ /** * Profiler can profile the following ARMCI Calls: * ARMCI_Get,ARMCI_Put,ARMCI_Acc,ARMCI_NbGet,ARMCI_NbPut,ARMCI_NbAcc, * ARMCI_GetS,ARMCI_PutS,ARMCI_AccS,ARMCI_NbGetS,ARMCI_NbPutS,ARMCI_NbAccS, * ARMCI_GetV,ARMCI_PutV,ARMCI_AccV,ARMCI_NbGetV,ARMCI_NbPutV,ARMCI_NbAccV, * ARMCI_Wait, armci_wait_notify * (NOTE: As armci_notify is same as ARMCI_Put, it is not profiled.) * * * Note #1: Right now, only process 0's profile is printed. * Each and every process saves its profile in the correspoding data struture. * Each process prints its profile to an output file armci_profile. * when armci_profile_terminate() is called (called in ARMCI_Finalize()). * * Note #2: By default profiler prints msg ranges 0 to 21. Example: range 10 * corresponds to message ranges from 1024 bytes to 2047 bytes. * Message ranges are in the power of 2. for ex: * ------------------------------------ * MSG_RANGE (r) BYTES (2^r to 2^(r+1)-1) * ------------------------------------ * 0 0-1 * 1 2-3 * 2 4-7 * ... ... * 10 1024-2047 bytes * ... ... * 20 1MB - (2MB-1) * 21 >= 2MB * ------------------------------------- * To increase the message range, set ARMCI_MAX_MSG_RANGE accordingly. * * Note #3: If Stride information needs to be printed, set ARMCI_PRINT_STRIDE. * Stride information is printed in armci_profile_terminate() for a various * selective message ranges and event types.Modify it according to your needs. * * Note #4: There is no profiling support for non-blocking operations yet!! */ #define DEBUG_ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_MATH_H # include #endif #include "armci.h" #include "armcip.h" #include "armci_profile.h" #ifndef MPI # include "tcgmsg.h" # define MP_TIMER tcg_time #else # include "mpi.h" # define MP_TIMER MPI_Wtime #endif #define ARMCI_PRINT_STRIDE 1 #define ARMCI_MAX_MSG_RANGE 22 /* 0 to 21 */ #if ARMCI_PRINT_STRIDE # define STRIDE_COUNT 1000 # define ARMCI_MAX_DIM 7 typedef struct armci_stride { int stride_levels; int proc; int count[ARMCI_MAX_DIM]; double time; }armci_stride_t; typedef struct giov { int ptr_array_len; int bytes; }giov_t; typedef struct armci_vector { int vec_len; int proc; giov_t *giov; double time; }armci_vector_t; #endif #define ARMCI_EVENTS 24 char *gEventName[ARMCI_EVENTS]={ "GET", "PUT", "ACC", "STRIDED GET", "STRIDED PUT", "STRIDED ACC", "VECTOR GET", "VECTOR PUT", "VECTOR ACC", "NBGET", "NBPUT", "NBACC", "STRIDED NBGET", "STRIDED NBPUT", "STRIDED NBACC", "VECTOR NBGET", "VECTOR NBPUT", "VECTOR NBACC", "BARRIER","ARMCI_WAIT","NOTIFY_WAIT", "FENCE", "ALLFENCE", "RMW" }; typedef struct armci_profile { int count; /* number of times called */ double time; /* total execution time for "count" calls */ #if ARMCI_PRINT_STRIDE armci_stride_t *stride; armci_vector_t *vector; #endif }armci_profile_t; /* profile get/put/acc for various message ranges (i.e ARMCI_MAX_MSG_RANGE) */ static armci_profile_t ARMCI_PROF[ARMCI_EVENTS][ARMCI_MAX_MSG_RANGE]; /* Current event */ struct event_info { int is_set; int event_type; int range; double start_time; } gCURRENT_EVNT; static int strided_event(int e) { if (e==ARMCI_PROF_GETS || e==ARMCI_PROF_PUTS || e==ARMCI_PROF_ACCS || e==ARMCI_PROF_NBGETS || e==ARMCI_PROF_NBPUTS || e==ARMCI_PROF_NBACCS) return 1; return 0; } void armci_profile_init() { int i,j; if(armci_me==0) {printf("\nProfiling ARMCI - ON\n");fflush(stdout);} gCURRENT_EVNT.is_set = 0; for(i=0; i= ARMCI_MAX_DIM) armci_die("ARMCI_PROFILE: stride_levels >= ARMCI_MAX_DIM. Increase ARMCI_MAX_DIM.", armci_me); /* find the message range */ for(i=0; i<= stride_levels; i++) bytes *= count[i]; if(bytes<=0) range=0; else range = (int) (log((double)bytes)/log(2.0)); if(range>=ARMCI_MAX_MSG_RANGE-1) range = ARMCI_MAX_MSG_RANGE-1; /* set the curent event for timer */ status = armci_profile_set_event(event_type, range); if(status == ARMCI_EVENT_SET) { /* new event set */ /* profile update: i.e. update event count */ ARMCI_PROF[event_type][range].count++; # if ARMCI_PRINT_STRIDE if(strided_event(event_type)) { int idx = ARMCI_PROF[event_type][range].count-1; if(idx=ARMCI_MAX_MSG_RANGE-1) range = ARMCI_MAX_MSG_RANGE-1; /* set the curent event for timer */ status = armci_profile_set_event(event_type, range); if(status == ARMCI_EVENT_SET) { /* new event set */ /* profile update: i.e. update event count */ ARMCI_PROF[event_type][range].count++; # if ARMCI_PRINT_STRIDE { int idx = ARMCI_PROF[event_type][range].count-1; if(idx=%d)\n", 1<<(ARMCI_MAX_MSG_RANGE-1)); } } /* print profile of contiguous get/put/acc calls for every message range */ static void armci_print_contig(FILE *fp) { int i, nrange=ARMCI_MAX_MSG_RANGE; ARMCI_HDR1(fp); ARMCI_HDR3(fp); for(i=0; i< nrange; i++) { fprintf(fp, "%d\t %d\t %d\t %.2e %.2e %.2e ", ARMCI_PROF[ARMCI_PROF_GET][i].count, ARMCI_PROF[ARMCI_PROF_PUT][i].count, ARMCI_PROF[ARMCI_PROF_ACC][i].count, ARMCI_PROF[ARMCI_PROF_GET][i].time, ARMCI_PROF[ARMCI_PROF_PUT][i].time, ARMCI_PROF[ARMCI_PROF_ACC][i].time); if(i< nrange-1) fprintf(fp, "(%d-%d)\n", 1<=%d)\n", 1<<(ARMCI_MAX_MSG_RANGE-1)); } } /* This prints the number of non-contiguous get/put/acc/ calls for every message range */ static void armci_print_noncontig(FILE *fp) { int i, nget, nput, nacc, nrange=ARMCI_MAX_MSG_RANGE; double gtime, ptime, atime; ARMCI_HDR2(fp); ARMCI_HDR3(fp); for(i=0; i< nrange; i++) { nget = (ARMCI_PROF[ARMCI_PROF_GETS][i].count + ARMCI_PROF[ARMCI_PROF_GETV][i].count); nput = (ARMCI_PROF[ARMCI_PROF_PUTS][i].count + ARMCI_PROF[ARMCI_PROF_PUTV][i].count); nacc = (ARMCI_PROF[ARMCI_PROF_ACCS][i].count + ARMCI_PROF[ARMCI_PROF_ACCV][i].count); gtime = (ARMCI_PROF[ARMCI_PROF_GETS][i].time + ARMCI_PROF[ARMCI_PROF_GETV][i].time); ptime = (ARMCI_PROF[ARMCI_PROF_PUTS][i].time + ARMCI_PROF[ARMCI_PROF_PUTV][i].time); atime = (ARMCI_PROF[ARMCI_PROF_ACCS][i].time + ARMCI_PROF[ARMCI_PROF_ACCV][i].time); fprintf(fp, "%d\t %d\t %d\t %.2e %.2e %.2e ", nget, nput, nacc, gtime, ptime, atime); if (i< nrange-1) fprintf(fp, "(%d-%d)\n", 1<=%d)\n", 1<<(ARMCI_MAX_MSG_RANGE-1)); } } /* print profile of non-blocking contiguous get/put/acc calls for every message range */ static void armci_print_nbcontig(FILE *fp) { int i, nrange=ARMCI_MAX_MSG_RANGE; ARMCI_HDR6(fp); ARMCI_HDR8(fp); for(i=0; i< nrange; i++) { fprintf(fp, "%d\t %d\t %d\t %.2e %.2e %.2e ", ARMCI_PROF[ARMCI_PROF_NBGET][i].count, ARMCI_PROF[ARMCI_PROF_NBPUT][i].count, ARMCI_PROF[ARMCI_PROF_NBACC][i].count, ARMCI_PROF[ARMCI_PROF_NBGET][i].time, ARMCI_PROF[ARMCI_PROF_NBPUT][i].time, ARMCI_PROF[ARMCI_PROF_NBACC][i].time); if(i< nrange-1) fprintf(fp, "(%d-%d)\n", 1<=%d)\n", 1<<(ARMCI_MAX_MSG_RANGE-1)); } } /* This prints the number of non-blocking non-contiguous get/put/acc/ calls for every message range */ static void armci_print_nbnoncontig(FILE *fp) { int i, nget, nput, nacc, nrange=ARMCI_MAX_MSG_RANGE; double gtime, ptime, atime; ARMCI_HDR7(fp); ARMCI_HDR8(fp); for(i=0; i< nrange; i++) { nget = (ARMCI_PROF[ARMCI_PROF_NBGETS][i].count + ARMCI_PROF[ARMCI_PROF_NBGETV][i].count); nput = (ARMCI_PROF[ARMCI_PROF_NBPUTS][i].count + ARMCI_PROF[ARMCI_PROF_NBPUTV][i].count); nacc = (ARMCI_PROF[ARMCI_PROF_NBACCS][i].count + ARMCI_PROF[ARMCI_PROF_NBACCV][i].count); gtime = (ARMCI_PROF[ARMCI_PROF_NBGETS][i].time + ARMCI_PROF[ARMCI_PROF_NBGETV][i].time); ptime = (ARMCI_PROF[ARMCI_PROF_NBPUTS][i].time + ARMCI_PROF[ARMCI_PROF_NBPUTV][i].time); atime = (ARMCI_PROF[ARMCI_PROF_NBACCS][i].time + ARMCI_PROF[ARMCI_PROF_NBACCV][i].time); fprintf(fp, "%d\t %d\t %d\t %.2e %.2e %.2e ", nget, nput, nacc, gtime, ptime, atime); if (i< nrange-1) fprintf(fp, "(%d-%d)\n", 1<=%d)\n", 1<<(ARMCI_MAX_MSG_RANGE-1)); } } /* Profile of armci_notify_wait(), ARMCI_Wait() and ARMCI_Barrier() */ static void armci_print_misc(FILE *fp) { ARMCI_HDR9(fp); fprintf(fp, "#calls\t time\t EVENT\n\n"); fprintf(fp, "%d\t %.2e ARMCI_Wait()\n", ARMCI_PROF[ARMCI_PROF_WAIT][0].count, ARMCI_PROF[ARMCI_PROF_WAIT][0].time); fprintf(fp, "%d\t %.2e armci_notify_wait()\n", ARMCI_PROF[ARMCI_PROF_NOTIFY][0].count, ARMCI_PROF[ARMCI_PROF_NOTIFY][0].time); fprintf(fp, "%d\t %.2e ARMCI_Barrier()\n", ARMCI_PROF[ARMCI_PROF_BARRIER][0].count, ARMCI_PROF[ARMCI_PROF_BARRIER][0].time); fprintf(fp, "%d\t %.2e ARMCI_Fence()\n", ARMCI_PROF[ARMCI_PROF_FENCE][0].count, ARMCI_PROF[ARMCI_PROF_FENCE][0].time); fprintf(fp, "%d\t %.2e ARMCI_Allfence()\n", ARMCI_PROF[ARMCI_PROF_ALLFENCE][0].count, ARMCI_PROF[ARMCI_PROF_ALLFENCE][0].time); fprintf(fp, "%d\t %.2e ARMCI_Rmw()\n", ARMCI_PROF[ARMCI_PROF_RMW][0].count, ARMCI_PROF[ARMCI_PROF_RMW][0].time); } #if ARMCI_PRINT_STRIDE static void armci_print_warning_msg(FILE *fp, int range, int str_count) { fprintf(fp, "WARNING: In your program, total number of data transfers\n"); fprintf(fp, "for message range[%d - %d] is %d. This exceeds\n", 1< %d (in armci_profile.c)\n", str_count); } static void armci_print_stridedinfo(FILE *fp, int event, int range) { int i, j, stride_levels, str_count; double time=0.0; str_count = ARMCI_PROF[event][range].count; if(str_count <=0) return; if(str_count > STRIDE_COUNT) { armci_print_warning_msg(fp, range, str_count); str_count = STRIDE_COUNT; } fprintf(fp, "\n\nSTRIDE INFORMATION FOR MSG_RANGE %d-%d for EVENT: %s\n", 1< STRIDE_COUNT) { armci_print_warning_msg(fp, range, str_count); str_count = STRIDE_COUNT; } fprintf(fp, "\n\nVECTOR INFORMATION FOR MSG_RANGE %d-%d for EVENT: %s\n", 1< > ' sys.exit(len(sys.argv)) # print headers print ''' #if HAVE_CONFIG_H # include "config.h" #endif #include #include "armci.h" #include "parmci.h" ''' functions = {} # parse signatures into the Function class for sig in get_signatures(sys.argv[1]): function = Function(sig) functions[function.name] = function # now process the functions for name in sorted(functions): func = functions[name] maybe_return = '' if '*' in func.return_type or 'void' not in func.return_type: maybe_return = 'return ' func = functions[name] new_name = None if 'PARMCI_' in name: new_name = name.replace('PARMCI_','ARMCI_') elif 'parmci_' in name: new_name = name.replace('parmci_','armci_') print ''' #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak %s #endif %s { %s%s; } ''' % (new_name, func.get_signature(new_name), maybe_return, func.get_call()) ga-5-3/armci/tools/armci_profile.h0000640005473000001440000000230311622306457016017 0ustar d3n000users#ifndef _ARMCI_PROFILING_H_ #define _ARMCI_PROFILING_H_ /* $Id: armci_profile.h,v 1.5 2005-11-30 10:20:53 vinod Exp $ */ enum events {ARMCI_PROF_GET=0, ARMCI_PROF_PUT, ARMCI_PROF_ACC, /* get/put/acc */ ARMCI_PROF_GETS, ARMCI_PROF_PUTS, ARMCI_PROF_ACCS, /* strided */ ARMCI_PROF_GETV, ARMCI_PROF_PUTV, ARMCI_PROF_ACCV, /* vector */ ARMCI_PROF_NBGET, ARMCI_PROF_NBPUT, ARMCI_PROF_NBACC,/*Non-block*/ ARMCI_PROF_NBGETS, ARMCI_PROF_NBPUTS, ARMCI_PROF_NBACCS, ARMCI_PROF_NBGETV, ARMCI_PROF_NBPUTV, ARMCI_PROF_NBACCV, ARMCI_PROF_BARRIER, ARMCI_PROF_WAIT, ARMCI_PROF_NOTIFY, /*misc*/ ARMCI_PROF_FENCE, ARMCI_PROF_ALLFENCE, ARMCI_PROF_RMW }; extern void armci_profile_init(); extern void armci_profile_terminate(); extern void armci_profile_start_strided(int count[], int stride_levels, int proc, int event_type); extern void armci_profile_stop_strided(int event_type); extern void armci_profile_start_vector(armci_giov_t darr[], int len, int proc, int event_type); extern void armci_profile_stop_vector(int event_type); extern void armci_profile_start(int event_type); extern void armci_profile_stop(int event_type); #endif /* _ARMCI_PROFILING_H_ */ ga-5-3/armci/tools/armci_trace.c0000640005473000001440000006631111622513211015445 0ustar d3n000users#include #include #include "parmci.h" #define TIME MPI_Wtime static double ARMCI_AccV_t; static double ARMCI_Barrier_t; static double ARMCI_AccS_t; static double ARMCI_Finalize_t; static double ARMCI_NbPut_t; static double ARMCI_GetValueInt_t; static double ARMCI_Put_flag_t; static double ARMCI_WaitAll_t; static double ARMCI_Malloc_local_t; static double ARMCI_Free_local_t; static double ARMCI_Get_t; static double ARMCI_PutValueFloat_t; static double ARMCI_NbAccV_t; static double ARMCI_GetValueFloat_t; static double ARMCI_Malloc_t; static double ARMCI_NbAccS_t; static double ARMCI_PutS_t; static double ARMCI_PutV_t; static double ARMCI_Destroy_mutexes_t; static double ARMCI_Free_t; static double ARMCI_Init_args_t; static double ARMCI_PutValueInt_t; static double ARMCI_Memget_t; static double ARMCI_AllFence_t; static double ARMCI_NbPutV_t; static double ARMCI_PutValueDouble_t; static double ARMCI_GetV_t; static double ARMCI_Test_t; static double ARMCI_GetS_t; static double ARMCI_Unlock_t; static double ARMCI_Fence_t; static double ARMCI_Create_mutexes_t; static double ARMCI_PutS_flag_t; static double ARMCI_WaitProc_t; static double ARMCI_Lock_t; static double ARMCI_GetValueDouble_t; static double ARMCI_NbGetV_t; static double ARMCI_Rmw_t; static double ARMCI_Init_t; static double ARMCI_NbGetS_t; static double ARMCI_NbGet_t; static double ARMCI_Put_t; static double ARMCI_NbPutS_t; static double ARMCI_PutS_flag_dir_t; static double ARMCI_Wait_t; static double ARMCI_GetValueLong_t; static double ARMCI_PutValueLong_t; static int ARMCI_AccV_c; static int ARMCI_Barrier_c; static int ARMCI_AccS_c; static int ARMCI_Finalize_c; static int ARMCI_NbPut_c; static int ARMCI_GetValueInt_c; static int ARMCI_Put_flag_c; static int ARMCI_WaitAll_c; static int ARMCI_Malloc_local_c; static int ARMCI_Free_local_c; static int ARMCI_Get_c; static int ARMCI_PutValueFloat_c; static int ARMCI_NbAccV_c; static int ARMCI_GetValueFloat_c; static int ARMCI_Malloc_c; static int ARMCI_NbAccS_c; static int ARMCI_PutS_c; static int ARMCI_PutV_c; static int ARMCI_Destroy_mutexes_c; static int ARMCI_Free_c; static int ARMCI_Init_args_c; static int ARMCI_PutValueInt_c; static int ARMCI_Memget_c; static int ARMCI_AllFence_c; static int ARMCI_NbPutV_c; static int ARMCI_PutValueDouble_c; static int ARMCI_GetV_c; static int ARMCI_Test_c; static int ARMCI_GetS_c; static int ARMCI_Unlock_c; static int ARMCI_Fence_c; static int ARMCI_Create_mutexes_c; static int ARMCI_PutS_flag_c; static int ARMCI_WaitProc_c; static int ARMCI_Lock_c; static int ARMCI_GetValueDouble_c; static int ARMCI_NbGetV_c; static int ARMCI_Rmw_c; static int ARMCI_Init_c; static int ARMCI_NbGetS_c; static int ARMCI_NbGet_c; static int ARMCI_Put_c; static int ARMCI_NbPutS_c; static int ARMCI_PutS_flag_dir_c; static int ARMCI_Wait_c; static int ARMCI_GetValueLong_c; static int ARMCI_PutValueLong_c; static double t; static int c; static int me; void ARMCI_Finalize() { MPI_Comm_rank(MPI_COMM_WORLD, &me); MPI_Reduce(&ARMCI_AccV_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_AccV_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_AccV,%d,%lf\n", ARMCI_AccV_c, ARMCI_AccV_t); } MPI_Reduce(&ARMCI_Barrier_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Barrier_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Barrier,%d,%lf\n", ARMCI_Barrier_c, ARMCI_Barrier_t); } MPI_Reduce(&ARMCI_AccS_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_AccS_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_AccS,%d,%lf\n", ARMCI_AccS_c, ARMCI_AccS_t); } MPI_Reduce(&ARMCI_NbPut_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_NbPut_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_NbPut,%d,%lf\n", ARMCI_NbPut_c, ARMCI_NbPut_t); } MPI_Reduce(&ARMCI_GetValueInt_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_GetValueInt_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_GetValueInt,%d,%lf\n", ARMCI_GetValueInt_c, ARMCI_GetValueInt_t); } MPI_Reduce(&ARMCI_Put_flag_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Put_flag_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Put_flag,%d,%lf\n", ARMCI_Put_flag_c, ARMCI_Put_flag_t); } MPI_Reduce(&ARMCI_NbGetS_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_NbGetS_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_NbGetS,%d,%lf\n", ARMCI_NbGetS_c, ARMCI_NbGetS_t); } MPI_Reduce(&ARMCI_Malloc_local_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Malloc_local_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Malloc_local,%d,%lf\n", ARMCI_Malloc_local_c, ARMCI_Malloc_local_t); } MPI_Reduce(&ARMCI_Free_local_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Free_local_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Free_local,%d,%lf\n", ARMCI_Free_local_c, ARMCI_Free_local_t); } MPI_Reduce(&ARMCI_Get_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Get_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Get,%d,%lf\n", ARMCI_Get_c, ARMCI_Get_t); } MPI_Reduce(&ARMCI_Put_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Put_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Put,%d,%lf\n", ARMCI_Put_c, ARMCI_Put_t); } MPI_Reduce(&ARMCI_Destroy_mutexes_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Destroy_mutexes_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Destroy_mutexes,%d,%lf\n", ARMCI_Destroy_mutexes_c, ARMCI_Destroy_mutexes_t); } MPI_Reduce(&ARMCI_GetS_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_GetS_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_GetS,%d,%lf\n", ARMCI_GetS_c, ARMCI_GetS_t); } MPI_Reduce(&ARMCI_NbAccV_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_NbAccV_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_NbAccV,%d,%lf\n", ARMCI_NbAccV_c, ARMCI_NbAccV_t); } MPI_Reduce(&ARMCI_GetValueFloat_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_GetValueFloat_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_GetValueFloat,%d,%lf\n", ARMCI_GetValueFloat_c, ARMCI_GetValueFloat_t); } MPI_Reduce(&ARMCI_Malloc_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Malloc_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Malloc,%d,%lf\n", ARMCI_Malloc_c, ARMCI_Malloc_t); } MPI_Reduce(&ARMCI_NbAccS_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_NbAccS_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_NbAccS,%d,%lf\n", ARMCI_NbAccS_c, ARMCI_NbAccS_t); } MPI_Reduce(&ARMCI_PutS_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_PutS_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_PutS,%d,%lf\n", ARMCI_PutS_c, ARMCI_PutS_t); } MPI_Reduce(&ARMCI_PutV_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_PutV_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_PutV,%d,%lf\n", ARMCI_PutV_c, ARMCI_PutV_t); } MPI_Reduce(&ARMCI_Free_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Free_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Free,%d,%lf\n", ARMCI_Free_c, ARMCI_Free_t); } MPI_Reduce(&ARMCI_Init_args_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Init_args_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Init_args,%d,%lf\n", ARMCI_Init_args_c, ARMCI_Init_args_t); } MPI_Reduce(&ARMCI_PutValueInt_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_PutValueInt_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_PutValueInt,%d,%lf\n", ARMCI_PutValueInt_c, ARMCI_PutValueInt_t); } MPI_Reduce(&ARMCI_Memget_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Memget_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Memget,%d,%lf\n", ARMCI_Memget_c, ARMCI_Memget_t); } MPI_Reduce(&ARMCI_AllFence_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_AllFence_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_AllFence,%d,%lf\n", ARMCI_AllFence_c, ARMCI_AllFence_t); } MPI_Reduce(&ARMCI_NbPutV_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_NbPutV_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_NbPutV,%d,%lf\n", ARMCI_NbPutV_c, ARMCI_NbPutV_t); } MPI_Reduce(&ARMCI_PutValueDouble_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_PutValueDouble_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_PutValueDouble,%d,%lf\n", ARMCI_PutValueDouble_c, ARMCI_PutValueDouble_t); } MPI_Reduce(&ARMCI_GetV_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_GetV_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_GetV,%d,%lf\n", ARMCI_GetV_c, ARMCI_GetV_t); } MPI_Reduce(&ARMCI_Test_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Test_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Test,%d,%lf\n", ARMCI_Test_c, ARMCI_Test_t); } MPI_Reduce(&ARMCI_Unlock_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Unlock_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Unlock,%d,%lf\n", ARMCI_Unlock_c, ARMCI_Unlock_t); } MPI_Reduce(&ARMCI_Fence_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Fence_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Fence,%d,%lf\n", ARMCI_Fence_c, ARMCI_Fence_t); } MPI_Reduce(&ARMCI_Create_mutexes_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Create_mutexes_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Create_mutexes,%d,%lf\n", ARMCI_Create_mutexes_c, ARMCI_Create_mutexes_t); } MPI_Reduce(&ARMCI_PutS_flag_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_PutS_flag_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_PutS_flag,%d,%lf\n", ARMCI_PutS_flag_c, ARMCI_PutS_flag_t); } MPI_Reduce(&ARMCI_WaitProc_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_WaitProc_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_WaitProc,%d,%lf\n", ARMCI_WaitProc_c, ARMCI_WaitProc_t); } MPI_Reduce(&ARMCI_Lock_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Lock_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Lock,%d,%lf\n", ARMCI_Lock_c, ARMCI_Lock_t); } MPI_Reduce(&ARMCI_GetValueDouble_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_GetValueDouble_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_GetValueDouble,%d,%lf\n", ARMCI_GetValueDouble_c, ARMCI_GetValueDouble_t); } MPI_Reduce(&ARMCI_NbGetV_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_NbGetV_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_NbGetV,%d,%lf\n", ARMCI_NbGetV_c, ARMCI_NbGetV_t); } MPI_Reduce(&ARMCI_Rmw_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Rmw_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Rmw,%d,%lf\n", ARMCI_Rmw_c, ARMCI_Rmw_t); } MPI_Reduce(&ARMCI_Init_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Init_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Init,%d,%lf\n", ARMCI_Init_c, ARMCI_Init_t); } MPI_Reduce(&ARMCI_WaitAll_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_WaitAll_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_WaitAll,%d,%lf\n", ARMCI_WaitAll_c, ARMCI_WaitAll_t); } MPI_Reduce(&ARMCI_NbGet_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_NbGet_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_NbGet,%d,%lf\n", ARMCI_NbGet_c, ARMCI_NbGet_t); } MPI_Reduce(&ARMCI_PutValueFloat_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_PutValueFloat_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_PutValueFloat,%d,%lf\n", ARMCI_PutValueFloat_c, ARMCI_PutValueFloat_t); } MPI_Reduce(&ARMCI_NbPutS_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_NbPutS_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_NbPutS,%d,%lf\n", ARMCI_NbPutS_c, ARMCI_NbPutS_t); } MPI_Reduce(&ARMCI_PutS_flag_dir_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_PutS_flag_dir_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_PutS_flag_dir,%d,%lf\n", ARMCI_PutS_flag_dir_c, ARMCI_PutS_flag_dir_t); } MPI_Reduce(&ARMCI_PutValueLong_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_PutValueLong_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_PutValueLong,%d,%lf\n", ARMCI_PutValueLong_c, ARMCI_PutValueLong_t); } MPI_Reduce(&ARMCI_Wait_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_Wait_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_Wait,%d,%lf\n", ARMCI_Wait_c, ARMCI_Wait_t); } MPI_Reduce(&ARMCI_GetValueLong_c, &c, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); MPI_Reduce(&ARMCI_GetValueLong_t, &t, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("ARMCI_GetValueLong,%d,%lf\n", ARMCI_GetValueLong_c, ARMCI_GetValueLong_t); } PARMCI_Finalize(); } int ARMCI_AccV(int op, void *scale, armci_giov_t * darr, int len, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_AccV(op, scale, darr, len, proc); etime = TIME(); ARMCI_AccV_t += etime - stime; return rval; } void ARMCI_Barrier() { static double stime, etime; stime = TIME(); PARMCI_Barrier(); etime = TIME(); ARMCI_Barrier_t += etime - stime; } int ARMCI_AccS(int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_AccS(optype, scale, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); etime = TIME(); ARMCI_AccS_t += etime - stime; return rval; } int ARMCI_NbPut(void *src, void *dst, int bytes, int proc, armci_hdl_t * nb_handle) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_NbPut(src, dst, bytes, proc, nb_handle); etime = TIME(); ARMCI_NbPut_t += etime - stime; return rval; } int ARMCI_GetValueInt(void *src, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_GetValueInt(src, proc); etime = TIME(); ARMCI_GetValueInt_t += etime - stime; return rval; } int ARMCI_Put_flag(void *src, void *dst, int bytes, int *f, int v, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_Put_flag(src, dst, bytes, f, v, proc); etime = TIME(); ARMCI_Put_flag_t += etime - stime; return rval; } int ARMCI_NbGetS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t * nb_handle) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_NbGetS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); etime = TIME(); ARMCI_NbGetS_t += etime - stime; return rval; } void *ARMCI_Malloc_local(armci_size_t bytes) { void *rval; static double stime, etime; stime = TIME(); rval = PARMCI_Malloc_local(bytes); etime = TIME(); ARMCI_Malloc_local_t += etime - stime; return rval; } int ARMCI_Free_local(void *ptr) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_Free_local(ptr); etime = TIME(); ARMCI_Free_local_t += etime - stime; return rval; } int ARMCI_Get(void *src, void *dst, int bytes, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_Get(src, dst, bytes, proc); etime = TIME(); ARMCI_Get_t += etime - stime; return rval; } int ARMCI_Put(void *src, void *dst, int bytes, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_Put(src, dst, bytes, proc); etime = TIME(); ARMCI_Put_t += etime - stime; return rval; } int ARMCI_Destroy_mutexes() { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_Destroy_mutexes(); etime = TIME(); ARMCI_Destroy_mutexes_t += etime - stime; return rval; } int ARMCI_GetS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_GetS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); etime = TIME(); ARMCI_GetS_t += etime - stime; return rval; } int ARMCI_NbAccV(int op, void *scale, armci_giov_t * darr, int len, int proc, armci_hdl_t * nb_handle) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_NbAccV(op, scale, darr, len, proc, nb_handle); etime = TIME(); ARMCI_NbAccV_t += etime - stime; return rval; } float ARMCI_GetValueFloat(void *src, int proc) { float rval; static double stime, etime; stime = TIME(); rval = PARMCI_GetValueFloat(src, proc); etime = TIME(); ARMCI_GetValueFloat_t += etime - stime; return rval; } int ARMCI_Malloc(void **ptr_arr, armci_size_t bytes) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_Malloc(ptr_arr, bytes); etime = TIME(); ARMCI_Malloc_t += etime - stime; return rval; } int ARMCI_NbAccS(int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t * nb_handle) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_NbAccS(optype, scale, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); etime = TIME(); ARMCI_NbAccS_t += etime - stime; return rval; } int ARMCI_PutS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_PutS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); etime = TIME(); ARMCI_PutS_t += etime - stime; return rval; } int ARMCI_PutV(armci_giov_t * darr, int len, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_PutV(darr, len, proc); etime = TIME(); ARMCI_PutV_t += etime - stime; return rval; } int ARMCI_Free(void *ptr) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_Free(ptr); etime = TIME(); ARMCI_Free_t += etime - stime; return rval; } int ARMCI_Init_args(int *argc, char ***argv) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_Init_args(argc, argv); etime = TIME(); ARMCI_Init_args_t += etime - stime; return rval; } int ARMCI_PutValueInt(int src, void *dst, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_PutValueInt(src, dst, proc); etime = TIME(); ARMCI_PutValueInt_t += etime - stime; return rval; } void ARMCI_Memget(size_t bytes, armci_meminfo_t * meminfo, int memflg) { static double stime, etime; stime = TIME(); PARMCI_Memget(bytes, meminfo, memflg); etime = TIME(); ARMCI_Memget_t += etime - stime; } void ARMCI_AllFence() { static double stime, etime; stime = TIME(); PARMCI_AllFence(); etime = TIME(); ARMCI_AllFence_t += etime - stime; } int ARMCI_NbPutV(armci_giov_t * darr, int len, int proc, armci_hdl_t * nb_handle) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_NbPutV(darr, len, proc, nb_handle); etime = TIME(); ARMCI_NbPutV_t += etime - stime; return rval; } int ARMCI_PutValueDouble(double src, void *dst, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_PutValueDouble(src, dst, proc); etime = TIME(); ARMCI_PutValueDouble_t += etime - stime; return rval; } int ARMCI_GetV(armci_giov_t * darr, int len, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_GetV(darr, len, proc); etime = TIME(); ARMCI_GetV_t += etime - stime; return rval; } int ARMCI_Test(armci_hdl_t * nb_handle) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_Test(nb_handle); etime = TIME(); ARMCI_Test_t += etime - stime; return rval; } void ARMCI_Unlock(int mutex, int proc) { static double stime, etime; stime = TIME(); PARMCI_Unlock(mutex, proc); etime = TIME(); ARMCI_Unlock_t += etime - stime; } void ARMCI_Fence(int proc) { static double stime, etime; stime = TIME(); PARMCI_Fence(proc); etime = TIME(); ARMCI_Fence_t += etime - stime; } int ARMCI_Create_mutexes(int num) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_Create_mutexes(num); etime = TIME(); ARMCI_Create_mutexes_t += etime - stime; return rval; } int ARMCI_PutS_flag(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_PutS_flag(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, flag, val, proc); etime = TIME(); ARMCI_PutS_flag_t += etime - stime; return rval; } int ARMCI_WaitProc(int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_WaitProc(proc); etime = TIME(); ARMCI_WaitProc_t += etime - stime; return rval; } void ARMCI_Lock(int mutex, int proc) { static double stime, etime; stime = TIME(); PARMCI_Lock(mutex, proc); etime = TIME(); ARMCI_Lock_t += etime - stime; } double ARMCI_GetValueDouble(void *src, int proc) { double rval; static double stime, etime; stime = TIME(); rval = PARMCI_GetValueDouble(src, proc); etime = TIME(); ARMCI_GetValueDouble_t += etime - stime; return rval; } int ARMCI_NbGetV(armci_giov_t * darr, int len, int proc, armci_hdl_t * nb_handle) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_NbGetV(darr, len, proc, nb_handle); etime = TIME(); ARMCI_NbGetV_t += etime - stime; return rval; } int ARMCI_Rmw(int op, void *ploc, void *prem, int extra, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_Rmw(op, ploc, prem, extra, proc); etime = TIME(); ARMCI_Rmw_t += etime - stime; return rval; } int ARMCI_Init() { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_Init(); etime = TIME(); ARMCI_Init_t += etime - stime; return rval; } int ARMCI_WaitAll() { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_WaitAll(); etime = TIME(); ARMCI_WaitAll_t += etime - stime; return rval; } int ARMCI_NbGet(void *src, void *dst, int bytes, int proc, armci_hdl_t * nb_handle) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_NbGet(src, dst, bytes, proc, nb_handle); etime = TIME(); ARMCI_NbGet_t += etime - stime; return rval; } int ARMCI_PutValueFloat(float src, void *dst, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_PutValueFloat(src, dst, proc); etime = TIME(); ARMCI_PutValueFloat_t += etime - stime; return rval; } int ARMCI_NbPutS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t * nb_handle) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_NbPutS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); etime = TIME(); ARMCI_NbPutS_t += etime - stime; return rval; } int ARMCI_PutS_flag_dir(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_PutS_flag_dir(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, flag, val, proc); etime = TIME(); ARMCI_PutS_flag_dir_t += etime - stime; return rval; } int ARMCI_PutValueLong(long src, void *dst, int proc) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_PutValueLong(src, dst, proc); etime = TIME(); ARMCI_PutValueLong_t += etime - stime; return rval; } int ARMCI_Wait(armci_hdl_t * nb_handle) { int rval; static double stime, etime; stime = TIME(); rval = PARMCI_Wait(nb_handle); etime = TIME(); ARMCI_Wait_t += etime - stime; return rval; } long ARMCI_GetValueLong(void *src, int proc) { long rval; static double stime, etime; stime = TIME(); rval = PARMCI_GetValueLong(src, proc); etime = TIME(); ARMCI_GetValueLong_t += etime - stime; return rval; } ga-5-3/armci/src-portals/0000750005473000001440000000000012275260544014146 5ustar d3n000usersga-5-3/armci/src-portals/rtinfo.c0000640005473000001440000000102111272474200015576 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: rtinfo.c,v 1.1 2003-03-20 00:57:27 d3h325 Exp $ Run-time system configuration */ #include #include /*\ determine number of CPUs on the current SMP node- Linux version for now \*/ int armci_getnumcpus(void) { int numproc=0; FILE* fp; char line[80]; fp=fopen("/proc/cpuinfo","r"); if(fp==NULL) return -1; while(!feof(fp)){ fgets(line,80,fp); if(strncmp(line,"processor",9)==0) numproc++; } fclose(fp); return(numproc); } ga-5-3/armci/src-portals/locks.c0000640005473000001440000000432511410475746015434 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: locks.c,v 1.15.6.1 2006-12-14 13:24:36 manoj Exp $ */ #define _LOCKS_C_ #include "armcip.h" #include "locks.h" #ifndef WIN32 # include #endif #include extern void armci_die(char*,int); #if defined(SPINLOCK) || defined(PMUTEXES) void **ptr_arr; void CreateInitLocks(int num_locks, lockset_t *plockid) { int locks_per_proc, size; extern void armci_set_serv_mutex_arr(void *); ARMCI_PR_DBG("enter",0); ptr_arr = (void**)malloc(armci_nproc*sizeof(void*)); locks_per_proc = (num_locks*armci_nclus)/armci_nproc + 1; size=locks_per_proc*sizeof(PAD_LOCK_T); PARMCI_Malloc(ptr_arr, size); _armci_int_mutexes = (PAD_LOCK_T*) ptr_arr[armci_master]; # ifdef PORTALS_SPECIFIC_QUESTION if(armci_me==armci_master)armci_set_serv_mutex_arr(_armci_int_mutexes); # endif if(!_armci_int_mutexes) armci_die("Failed to create spinlocks",size); #ifdef PMUTEXES if(armci_me == armci_master) { int i; pthread_mutexattr_t pshared; if(pthread_mutexattr_init(&pshared)) armci_die("armci_allocate_locks: could not init mutex attr",0); # ifndef LINUX if(pthread_mutexattr_setpshared(&pshared,PTHREAD_PROCESS_SHARED)) armci_die("armci_allocate_locks: could not set PROCESS_SHARED",0); # endif for(i=0; i< locks_per_proc*armci_clus_info[armci_clus_me].nslave; i++){ if(pthread_mutex_init(_armci_int_mutexes+i,&pshared)) armci_die("armci_allocate_locks: could not init mutex",i); } } #else bzero((char*)ptr_arr[armci_me],size); ARMCI_PR_DBG("exit",0); #endif } void InitLocks(int num_locks, lockset_t lockid) { /* what are you doing here ? All processes should've called CreateInitLocks(). Check preprocessor directtives and see lock allocation in armci_init */ armci_die("InitLocks(): what are you doing here ?",armci_me); } void DeleteLocks(lockset_t lockid) { _armci_int_mutexes = (PAD_LOCK_T*)0; } #else /*********************** every thing else *************************/ void CreateInitLocks(int num_locks, lockset_t *lockid) {} void InitLocks(int num_locks, lockset_t lockid) { } void DeleteLocks(lockset_t lockid) { } #endif ga-5-3/armci/src-portals/message.h0000640005473000001440000000645011643666515015757 0ustar d3n000users#ifndef _MESSAGE_H_ #define _MESSAGE_H_ #include "armci.h" #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif #define ARMCI_INT -99 #define ARMCI_LONG -101 #define ARMCI_LONG_LONG -102 #define ARMCI_FLOAT -306 #define ARMCI_DOUBLE -307 #define SCOPE_ALL 333 #define SCOPE_NODE 337 #define SCOPE_MASTERS 339 #define armci_msg_sel(x,n,op,type,contribute)\ armci_msg_sel_scope(SCOPE_ALL,(x),(n),(op),(type),(contribute)) #if 0 #define armci_msg_bcast(buffer, len, root)\ armci_msg_bcast_scope(SCOPE_ALL, (buffer), (len), (root)) #else extern void armci_msg_bcast(void *buffer, int len, int root); #endif extern void armci_msg_sel_scope(int scope, void *x, int n, char* op, int type, int contribute); extern void armci_msg_bcast_scope(int scope, void* buffer, int len, int root); extern void armci_msg_brdcst(void* buffer, int len, int root); extern void armci_msg_snd(int tag, void* buffer, int len, int to); extern void armci_msg_rcv(int tag, void* buffer, int buflen, int *msglen, int from); extern int armci_msg_rcvany(int tag, void* buffer, int buflen, int *msglen); extern void armci_msg_reduce(void *x, int n, char *op, int type); extern void armci_msg_reduce_scope(int scope, void *x, int n, char *op, int type); extern void armci_msg_gop_scope(int scope, void *x, int n, char* op, int type); extern void armci_msg_igop(int *x, int n, char* op); extern void armci_msg_lgop(long *x, int n, char* op); extern void armci_msg_llgop(long long *x, int n, char* op); extern void armci_msg_fgop(float *x, int n, char* op); extern void armci_msg_dgop(double *x, int n, char* op); extern void armci_exchange_address(void *ptr_ar[], int n); extern void armci_msg_barrier(); extern void armci_msg_bintree(int scope, int* Root, int *Up, int *Left, int *Right); extern int armci_msg_me(); extern int armci_msg_nproc(); extern void armci_msg_abort(int code); extern void armci_msg_init(int *argc, char ***argv); extern void armci_msg_finalize(); extern double armci_timer(); extern void armci_msg_clus_brdcst(void *buf, int len); extern void armci_msg_clus_igop(int *x, int n, char* op); extern void armci_msg_clus_fgop(float *x, int n, char* op); extern void armci_msg_clus_lgop(long *x, int n, char* op); extern void armci_msg_clus_llgop(long long *x, int n, char* op); extern void armci_msg_clus_dgop(double *x, int n, char* op); extern void armci_msg_group_gop_scope(int scope, void *x, int n, char* op, int type, ARMCI_Group *group); extern void armci_msg_group_igop(int *x, int n, char* op,ARMCI_Group *group); extern void armci_msg_group_lgop(long *x, int n, char* op,ARMCI_Group *group); extern void armci_msg_group_llgop(long long *x, int n, char* op,ARMCI_Group *group); extern void armci_msg_group_fgop(float *x, int n, char* op,ARMCI_Group *group); extern void armci_msg_group_dgop(double *x, int n,char* op,ARMCI_Group *group); extern void armci_exchange_address_grp(void *ptr_arr[], int n, ARMCI_Group *group); extern void armci_msg_group_barrier(ARMCI_Group *group); extern void armci_msg_group_bcast_scope(int scope, void *buf, int len, int root, ARMCI_Group *group); extern void armci_grp_clus_brdcst(void *buf, int len, int grp_master, int grp_clus_nproc,ARMCI_Group *mastergroup); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif ga-5-3/armci/src-portals/mutex.c0000640005473000001440000002612611410475746015466 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif /* $Id: mutex.c,v 1.24.10.1 2006-12-21 23:50:48 manoj Exp $ */ #include "armcip.h" #include "copy.h" #include "parmci.h" #include "request.h" #define DEBUG 0 #define MAX_LOCKS 32768 #define SPINMAX 1000 #if defined(LAPI) || defined(GM) # define SERVER_LOCK #endif double _dummy_work_=0.; #ifdef LAPI /*fix to if cmpl handler for a pending unlock runs after destroy*/ int mymutexcount; double _dummy_server_work_=0.; #endif static int num_mutexes=0, *tickets; typedef struct { int mutex; int turn; msg_tag_t tag; } waiting_list_t; /* data structure to store info about blocked (waiting) process for mutex */ static waiting_list_t* blocked=(waiting_list_t*)0; typedef struct { int* token; int* turn; int* tickets; int count; } mutex_entry_t; void** mutex_mem_ar; mutex_entry_t *glob_mutex; int PARMCI_Create_mutexes(int num) { int rc,p, totcount; int *mutex_count = (int*)armci_internal_buffer; if((sizeof(int)*armci_nproc) > armci_getbufsize()){ mutex_count = (double *)malloc(sizeof(int)*armci_nproc); } if (num < 0 || num > MAX_LOCKS) return(FAIL); if(num_mutexes) armci_die("mutexes already created",num_mutexes); if(armci_nproc == 1){ num_mutexes=1; return(0); } /* local memory allocation for mutex arrays*/ mutex_mem_ar = (void*) malloc(armci_nproc*sizeof(void*)); if(!mutex_mem_ar) armci_die("ARMCI_Create_mutexes: malloc failed",0); glob_mutex = (void*)malloc(armci_nproc*sizeof(mutex_entry_t)); if(!glob_mutex){ free(mutex_mem_ar); armci_die("ARMCI_Create_mutexes: malloc 2 failed",0); } /* bzero(mutex_count,armci_nproc*sizeof(int));*/ bzero((char*)mutex_count,sizeof(int)*armci_nproc); /* find out how many mutexes everybody allocated */ mutex_count[armci_me]=num; armci_msg_igop(mutex_count, armci_nproc, "+"); for(p=totcount=0; p< armci_nproc; p++)totcount+=mutex_count[p]; tickets = calloc(totcount,sizeof(int)); if(!tickets) { free(glob_mutex); free(mutex_mem_ar); return(FAIL2); } /* we need memory for token and turn - 2 ints */ rc = PARMCI_Malloc(mutex_mem_ar,2*num*sizeof(int)); if(rc){ free(glob_mutex); free(mutex_mem_ar); free(tickets); return(FAIL3); } if(num)bzero((char*)mutex_mem_ar[armci_me],2*num*sizeof(int)); /* setup global mutex array */ for(p=totcount=0; p< armci_nproc; p++){ glob_mutex[p].token = mutex_mem_ar[p]; glob_mutex[p].turn = glob_mutex[p].token + mutex_count[p]; glob_mutex[p].count = mutex_count[p]; glob_mutex[p].tickets = tickets + totcount; totcount += mutex_count[p]; } num_mutexes= totcount; #ifdef LAPI mymutexcount = num; #endif PARMCI_Barrier(); if(DEBUG) fprintf(stderr,"%d created (%d,%d) mutexes\n",armci_me,num,totcount); return(0); } void armci_serv_mutex_create() { int mem = armci_nproc*sizeof(waiting_list_t); blocked = (waiting_list_t*)malloc(mem); if(!blocked) armci_die("armci server:error allocating mutex memory ",0); } void armci_serv_mutex_close() { if(blocked) free(blocked ); blocked = (waiting_list_t*)0; } int PARMCI_Destroy_mutexes() { #ifdef LAPI /*fix to if cmpl handler for a pending unlock runs after destroy*/ int proc, mutex, i,factor=0; #endif if(num_mutexes==0)armci_die("armci_destroy_mutexes: not created",0); if(armci_nproc == 1) return(0); armci_msg_barrier(); #ifdef LAPI /*fix to if cmpl handler for a pending unlock runs after destroy*/ for(proc=0;proc myturn) armci_die2("armci: problem with tickets",myturn,next_in_line); /* apply a linear backoff delay before retrying */ for(i=0; i< SPINMAX * factor; i++) _dummy_work_ += 1.; factor += 1; }while (myturn != next_in_line); glob_mutex[proc].tickets[mutex] = myturn; /* save ticket value */ } static void armci_generic_unlock(int mutex, int proc) { int *mutex_ticket= glob_mutex[proc].turn + mutex; int *newval = glob_mutex[proc].tickets +mutex; int len=sizeof(int); /* update ticket for next process requesting this mutex */ (*newval) ++; /* write new ticket value stored previously in tickets */ PARMCI_Put(newval, mutex_ticket, len, proc); MEM_FENCE; } /*\ Acquire mutex for "proc" * -must be executed in hrecv/AM handler thread * -application thread must use generic_lock routine \*/ int armci_server_lock_mutex(int mutex, int proc, msg_tag_t tag) { int myturn; int *mutex_ticket, next_in_line, len=sizeof(int); int owner = armci_me; if(DEBUG)fprintf(stderr,"SLOCK=%d owner=%d p=%d m=%d\n", armci_me,owner, proc,mutex); mutex_ticket= glob_mutex[owner].turn + mutex; myturn = register_in_mutex_queue(mutex, owner); armci_copy(mutex_ticket, &next_in_line, len); if(next_in_line > myturn) armci_die2("armci-s: problem with tickets",myturn,next_in_line); if(next_in_line != myturn){ if(!blocked)armci_serv_mutex_create(); blocked[proc].mutex = mutex; blocked[proc].turn = myturn; blocked[proc].tag = tag; if(DEBUG) fprintf(stderr,"SLOCK=%d proc=%d blocked (%d,%d)\n", armci_me, proc, next_in_line,myturn); return -1; } else { if(DEBUG) fprintf(stderr,"SLOCK=%d proc=%d sending ticket (%d)\n", armci_me, proc, myturn); /* send ticket to requesting node */ /* GA_SEND_REPLY(tag, &myturn, sizeof(int), proc); */ return (myturn); } } /*\ Release mutex "id" held by proc * called from hrecv/AM handler AND application thread \*/ int armci_server_unlock_mutex(int mutex, int proc, int Ticket, msg_tag_t* ptag) { #define NOBODY -1 int owner = armci_me; int i, p=NOBODY, *mutex_ticket= glob_mutex[owner].turn + mutex; int len=sizeof(int); if(DEBUG) fprintf(stderr,"SUNLOCK=%d node=%d mutex=%d ticket=%d\n", armci_me,proc,mutex,Ticket); Ticket++; armci_copy(&Ticket, mutex_ticket, len); /* if mutex is free then nobody is reqistered in queue */ if(armci_mutex_free(mutex, proc)) return -1; /* search for the next process in queue waiting for this mutex */ for(i=0; i< armci_nproc; i++){ if(!blocked)break; /* not allocated yet - nobody is waiting */ if(DEBUG)fprintf(stderr,"SUNLOCK=%d node=%d list=(%d,%d)\n", armci_me, i, blocked[i].mutex, blocked[i].turn); if((blocked[i].mutex == mutex) && (blocked[i].turn == Ticket)){ p = i; break; } } /* send Ticket to a process waiting for mutex */ if(p != NOBODY){ if(p == armci_me)armci_die("server_unlock: cannot unlock self",0); else { if(DEBUG)fprintf(stderr,"SUNLOCK=%d node=%d unlock ticket=%d go=%d\n", armci_me, proc, Ticket, p); /* GA_SEND_REPLY(blocked[p].tag, &Ticket, sizeof(int), p); */ *ptag = blocked[p].tag; return p; } } return -1; /* nobody is waiting */ } void PARMCI_Lock(int mutex, int proc) { #if defined(SERVER_LOCK) int direct; #endif if(DEBUG)fprintf(stderr,"%d enter lock\n",armci_me); if(!num_mutexes) armci_die("armci_lock: create mutexes first",0); if(mutex > glob_mutex[proc].count) armci_die2("armci_lock: mutex not allocated", mutex, glob_mutex[proc].count); if(armci_nproc == 1) return; # if defined(SERVER_LOCK) direct=SAMECLUSNODE(proc); if(!direct) armci_rem_lock(mutex,proc, glob_mutex[proc].tickets + mutex ); else # endif armci_generic_lock(mutex,proc); if(DEBUG)fprintf(stderr,"%d leave lock\n",armci_me); } void PARMCI_Unlock(int mutex, int proc) { if(DEBUG)fprintf(stderr,"%d enter unlock\n",armci_me); if(!num_mutexes) armci_die("armci_lock: create mutexes first",0); if(mutex > glob_mutex[proc].count) armci_die2("armci_lock: mutex not allocated", mutex, glob_mutex[proc].count); if(armci_nproc == 1) return; # if defined(SERVER_LOCK) if(armci_nclus >1) { if(proc != armci_me) armci_rem_unlock(mutex, proc, glob_mutex[proc].tickets[mutex]); else { int ticket = glob_mutex[proc].tickets[mutex]; msg_tag_t tag; int waiting; waiting = armci_server_unlock_mutex(mutex, proc, ticket, &tag); if(waiting >-1) armci_unlock_waiting_process(tag, waiting, ++ticket); } } else # endif armci_generic_unlock(mutex, proc); if(DEBUG)fprintf(stderr,"%d leave unlock\n",armci_me); } ga-5-3/armci/src-portals/shmem.h0000640005473000001440000000115011300316052015406 0ustar d3n000users#ifndef _SHMEM_H_ #define _SHMEM_H_ extern void Set_Shmem_Limit(unsigned long shmemlimit); extern void Delete_All_Regions(); extern char* Create_Shared_Region(long idlist[], long size, long *offset); extern char* Attach_Shared_Region(long idlist[], long size, long offset); extern void Free_Shmem_Ptr(long id, long size, char* addr); extern long armci_shmem_reg_size(int i, long id); extern char* armci_shmem_reg_ptr(int i); #define POST_ALLOC_CHECK(temp,size) ; #define MAX_REGIONS 64 #if defined(WIN32) #define SHMIDLEN 3 #else #define SHMIDLEN (MAX_REGIONS + 2) #endif #define IDLOC (SHMIDLEN - 3) #endif ga-5-3/armci/src-portals/ds-shared.c0000640005473000001440000004011611410475746016171 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "armcip.h" #include "request.h" #include "message.h" #include "memlock.h" #include "copy.h" #include "gpc.h" #include #include #ifdef WIN32 #include #else #include #endif #define DEBUG_ 0 #define DEBUG1 0 #ifndef SERV # define SERV 2 #endif #ifdef SOCKETS # define EQ_TAGS(a_, b_) ((a_) == (b_)) #else # define EQ_TAGS(a_, b_) !memcmp(&(a_), &(b_), sizeof(a_)) #endif int _armci_server_started=0; extern active_socks_t *_armci_active_socks; #ifdef ARMCI_CHECK_STATE typedef struct sarns{ int data; long data1; struct sarns *next; } sarnode; sarnode **sarn_np=NULL; sarnode * sarlist_add(int pr, int i,long j) { sarnode **p = &sarn_np[pr]; sarnode *n = (sarnode *)malloc(sizeof(sarnode)); assert(n != NULL); n->next = *p; *p = n; n->data = i; n->data1 = j; return *p; } void sarlist_remove(sarnode **p) { if(*p != NULL){ sarnode *n = *p; *p = (*p)->next; free(n); } } sarnode **sarlist_search(sarnode **n, long i) { while (*n != NULL){ if ((*n)->data == i){ return n; } n = &(*n)->next; } return NULL; } void sarlist_print(int proc) { sarnode *n =sarn_np[proc]; if (n == NULL){ /*printf("sarlist is empty\n");*/ } while (n != NULL){ printf("(%d):%d %d next=%d\n", armci_me,n->data,n->data1,(n->next==NULL)?0:1); n = n->next; } } #endif /*\ client sends request to server \*/ void armci_send_req(int proc, request_header_t* msginfo, int len,int tag) { int hdrlen = sizeof(request_header_t); int bytes; ARMCI_PR_DBG("enter",0); if(msginfo->operation == GET) { if(msginfo->format==VECTOR && msginfo->ehlen > 0) { printf("%s [cp] unhandled condition in send_req for VECTOR and ehlen\n",Portals_ID()); abort(); bytes = msginfo->dscrlen + hdrlen + msginfo->datalen; } else { bytes = msginfo->dscrlen + hdrlen; } } else bytes = msginfo->bytes + hdrlen; if(DEBUG_){printf("%d: sending req %d (len=%d dscr=%d data=%d) to %d \n", armci_me, msginfo->operation, bytes,msginfo->dscrlen, msginfo->datalen,proc); fflush(stdout); } if(bytes > len) armci_die2("armci_send_req:buffer overflow",bytes,len); msginfo->tag.data_ptr = (msginfo+1); // not really data, but dscr ptr armci_send_req_msg(proc,msginfo, bytes,tag); ARMCI_PR_DBG("exit",0); } /*\ client sends strided data + request to server \*/ void armci_send_strided(int proc, request_header_t *msginfo, char *bdata, void *ptr, int strides, int stride_arr[], int count[],int tag) { int hdrlen = sizeof(request_header_t); int dscrlen = msginfo->dscrlen; int datalen = msginfo->datalen; int cluster = armci_clus_id(proc); int bytes; int i,na; char *a; double *tmp; ARMCI_PR_DBG("enter",0); bytes = msginfo->bytes + hdrlen; if(0){ printf("%d:sending strided %d to(%d,%d,%d) bytes=%d dslen=%d dlen=%d,\n", armci_me, msginfo->operation, msginfo->to, cluster, proc, bytes, dscrlen, datalen); fflush(stdout); } armci_write_strided(ptr, strides, stride_arr, count, bdata); msginfo->tag.data_ptr = (msginfo+1); #ifdef RMO_DEBUG_ a = (char *) (msginfo + 1); a += msginfo->dscrlen; tmp = (double *) a; na = msginfo->datalen/sizeof(double); for(i=0; idatalen; char *buf; ARMCI_PR_DBG("enter",0); if(rcvlen)datalen=rcvlen; if(DEBUG_) { printf("%d:armci_rcv_data: bytes= %d \n", armci_me, datalen); fflush(stdout); } if(datalen == 0) armci_die("armci_rcv_data: no data to receive",datalen); buf = armci_ReadFromDirect(proc, msginfo, datalen); if(DEBUG_){ printf("%d:armci_rcv_data: got %d bytes \n",armci_me,datalen); fflush(stdout); } ARMCI_PR_DBG("exit",0); return(buf); } /*\ client receives vector data from server and unpacks to the right loc \*/ void armci_rcv_vector_data(int proc, request_header_t* msginfo, armci_giov_t darr[], int len) { ARMCI_PR_DBG("enter",0); char *buf = armci_rcv_data(proc, msginfo, 0); armci_vector_from_buf(darr, len, buf); ARMCI_PR_DBG("exit",0); } /*\ client receives strided data from server \*/ void armci_rcv_strided_data(int proc, request_header_t* msginfo, int datalen, void *ptr, int strides,int stride_arr[],int count[]) { char *databuf; ARMCI_PR_DBG("enter",0); if(DEBUG_){ printf("%d: armci_rcv_strided_data: expecting datalen %d from %d\n", armci_me, datalen, proc); fflush(stdout); } databuf = armci_ReadFromDirect(proc,msginfo,0); armci_read_strided(ptr, strides, stride_arr, count, databuf); ARMCI_PR_DBG("exit",0); } void armci_rem_state(int clus) { int bufsize = sizeof(request_header_t)+sizeof(int); int destproc = 0; request_header_t *msginfo; destproc = SERVER_NODE(clus); msginfo = (request_header_t *)GET_SEND_BUFFER(bufsize,STATE,destproc); int tag=0; ARMCI_PR_DBG("enter",0); msginfo->dscrlen = 0; msginfo->from = armci_me; msginfo->to = SERVER_NODE(clus); msginfo->operation = STATE; msginfo->bytes =0; msginfo->datalen =sizeof(int); msginfo->tag.data_ptr = (msginfo+1); if(DEBUG_){ printf("%d(c):sending ACKreq to %d clus=%d\n",armci_me,msginfo->to,clus); fflush(stdout); } armci_send_req(armci_clus_info[clus].master, msginfo, bufsize,tag); armci_rcv_data(armci_clus_info[clus].master, msginfo,0); /* receive */ FREE_SEND_BUFFER(msginfo); ARMCI_PR_DBG("exit",0); } /*\ get ACK from server \*/ void armci_rem_ack(int clus) { int bufsize = sizeof(request_header_t)+sizeof(int); int destproc = 0; request_header_t *msginfo; destproc = SERVER_NODE(clus); msginfo = (request_header_t *) GET_SEND_BUFFER(bufsize,ACK,destproc); int tag=0; ARMCI_PR_DBG("enter",0); msginfo->dscrlen = 0; msginfo->from = armci_me; msginfo->to = SERVER_NODE(clus); msginfo->operation = ACK; msginfo->bytes =0; msginfo->datalen =sizeof(int); msginfo->tag.data_ptr = (msginfo+1); if(DEBUG_){ printf("%d(c):sending ACKreq to %d clus=%d\n",armci_me,msginfo->to,clus); fflush(stdout); } armci_send_req(armci_clus_info[clus].master, msginfo, bufsize,tag); armci_rcv_data(armci_clus_info[clus].master, msginfo,0); /* receive ACK */ FREE_SEND_BUFFER(msginfo); ARMCI_PR_DBG("exit",0); } /*\ request to QUIT sent by client \*/ void armci_serv_quit() { int bufsize = sizeof(request_header_t)+sizeof(int); int destproc; request_header_t *msginfo; destproc = SERVER_NODE(armci_clus_me); msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,QUIT,destproc); int tag=0; ARMCI_PR_DBG("enter",0); if(DEBUG_){ printf("%d master: sending quit request to server\n",armci_me); fflush(stdout); } msginfo->dscrlen = 0; msginfo->from = armci_me; msginfo->to = SERVER_NODE(armci_clus_me); msginfo->operation = QUIT; if(ACK_QUIT) msginfo->bytes = msginfo->datalen = sizeof(int); /* ACK */ else msginfo->bytes = msginfo->datalen = 0; /* no ACK */ armci_send_req(armci_master, msginfo, bufsize,tag); if(ACK_QUIT){ int stat; stat = *(int*)armci_rcv_data(armci_master,msginfo,0); /* receive ACK */ if(stat != QUIT) armci_die("armci_serv_quit: wrong response from server", stat); FREE_SEND_BUFFER(msginfo); } ARMCI_PR_SDBG("exit",0); } /***************************** server side *********************************/ static void armci_check_req(request_header_t *msginfo, int buflen) { ARMCI_PR_SDBG("enter",msginfo->operation); if((msginfo->to != armci_me && msginfo->to < armci_master) || msginfo->to >= armci_master + armci_clus_info[armci_clus_me].nslave) /*armci_die("armci_check_req: invalid to", msginfo->to);*/ printf("\n%d:got following to %d",armci_me,msginfo->to); if(msginfo->dscrlen < 0) armci_die("armci_check_req: dscrlen < 0", msginfo->dscrlen); if(msginfo->datalen < 0) armci_die("armci_check_req: datalen < 0", msginfo->datalen); if(msginfo->dscrlen > (int)msginfo->bytes) armci_die2("armci_check_req: dsclen > bytes", msginfo->dscrlen, msginfo->bytes); ARMCI_PR_SDBG("exit",0); } /*\ server response - send data to client \*/ void armci_send_data(request_header_t* msginfo, void *data) { int to = msginfo->from; ARMCI_PR_SDBG("enter",0); armci_WriteToDirect(to, msginfo, data); ARMCI_PR_SDBG("exit",0); } /*\ server sends strided data back to client \*/ void armci_send_strided_data(int proc, request_header_t *msginfo, char *bdata, void *ptr, int strides, int stride_arr[], int count[]) { int i,na; double *a = NULL; int to = msginfo->from; ARMCI_PR_SDBG("enter",0); if(DEBUG_){ printf("%d(server): sending datalen = %d to %d %p\n", armci_me, msginfo->datalen, to,ptr); fflush(stdout); } /* for small contiguous blocks copy into a buffer before sending */ armci_write_strided(ptr, strides, stride_arr, count, bdata); #ifdef RMO_PORTALS_DEBUG_GET a = (double *) bdata; na = msginfo->datalen/sizeof(double); for(i=0; idatalen,to); fflush(stdout); } ARMCI_PR_SDBG("exit",0); } /*\ server sends ACK to client ptl_event_t *ev = (ptl_event_t *) msginfo->tag.user_ptr; ARMCI_PR_SDBG("enter",0); if(DEBUG_){ printf("%d server: terminating request by %d\n",armci_me,msginfo->from); fflush(stdout); } portals_ds_send_ack(ev->initiator,ev->hdr_data); \*/ void armci_server_ack(request_header_t* msginfo) { int *ack=(int*)(msginfo+1); ptl_event_t *ev = (ptl_event_t *) msginfo->tag.user_ptr; ARMCI_PR_SDBG("enter",0); if(DEBUG_){ printf("%d server: sending ACK to %d\n",armci_me,msginfo->from); fflush(stdout); } #ifndef OLD_PORTALS_CODE portals_ds_send_ack(ev->initiator,ev->hdr_data); #else *ack = ACK; if(msginfo->datalen != sizeof(int)) armci_die("armci_server_ack: bad datalen=",msginfo->datalen); armci_send_data(msginfo,ack); #endif ARMCI_PR_SDBG("exit",0); } /*\ server action triggered by request to quit \*/ void armci_server_goodbye(request_header_t* msginfo) { ptl_event_t *ev = (ptl_event_t *) msginfo->tag.user_ptr; ARMCI_PR_SDBG("enter",0); if(DEBUG_){ printf("%d server: terminating request by %d\n",armci_me,msginfo->from); fflush(stdout); } portals_ds_send_ack(ev->initiator,ev->hdr_data); #ifdef ARMCI_CHECK_STATE_ for(int i=0;itag.user_ptr; /* check what we got */ // armci_check_req(msginfo,buflen); from = msginfo->from; if(DEBUG_){ printf("%d(serv):got %d request from %d\n",armci_me,msginfo->operation, from); fflush(stdout); } /*if(msginfo->operation==GET)fprintf(stderr,"GET request received with tag: %d\n",msginfo->tag);*/ switch(msginfo->operation){ # ifdef ARMCI_CHECK_STATE case STATE: printf("[ds %d]: operation=%d not supported yet\n",armci_me,msginfo->operation); abort(); if(DEBUG_){printf("\n%d:state request\n",armci_me);fflush(stdout);} sarlist_print(msginfo->from); armci_WriteToDirect(msginfo->from, msginfo, (msginfo+1)); break; # endif case QUIT: if(DEBUG_){ printf("%d(serv):got QUIT request from %d\n",armci_me, from); fflush(stdout); } armci_server_goodbye(msginfo); break; /*pessimism?*/ case ACK: // printf("[ds %d]: operation=%d not supported yet\n",armci_me,msginfo->operation); // abort(); if(DEBUG_) { fprintf(stdout, "%d(server): got ACK request from %d\n", armci_me, msginfo->from); fflush(stdout); } armci_server_ack(msginfo); break; case ATTACH: printf("[ds %d]: operation=%d not supported yet\n",armci_me,msginfo->operation); abort(); if(DEBUG_){ printf("%d(serv):got ATTACH request from%d\n",armci_me, from); fflush(stdout); } armci_server_ipc(msginfo, descr, buffer, buflen); break; case ARMCI_SWAP: case ARMCI_SWAP_LONG: case ARMCI_FETCH_AND_ADD: case ARMCI_FETCH_AND_ADD_LONG: // printf("[ds %d]: operation=%d not supported yet\n",armci_me,msginfo->operation); // abort(); armci_server_rmw(msginfo,descr,buffer); # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE portals_ds_send_ack(ev->initiator,ev->hdr_data); # endif break; case LOCK: printf("[ds %d]: operation=%d not supported yet\n",armci_me,msginfo->operation); abort(); armci_server_lock(msginfo); break; case UNLOCK: printf("[ds %d]: operation=%d not supported yet\n",armci_me,msginfo->operation); abort(); armci_server_unlock(msginfo, descr); msginfo->tag.ack=ARMCI_STAMP; x_net_send_ack(msginfo,msginfo->from,msginfo->tag.ack_ptr,&msginfo->tag.ack); break; default: if(msginfo->format ==VECTOR){ // if(msginfo->operation != PUT && msginfo->operation !=GET && !ACC(msginfo->operation)) { // printf("[ds %d]: operation=%d (format==VECTOR) not supported yet\n",armci_me,msginfo->operation); // abort(); // } armci_server_vector(msginfo, descr, buffer, buflen); # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE portals_ds_send_ack(ev->initiator,ev->hdr_data); # else if(msginfo->operation==PUT || ARMCI_ACC(msginfo->operation)){ portals_ds_send_ack(ev->initiator,ev->hdr_data); } # endif } else if(msginfo->format ==STRIDED){ // if(msginfo->operation != PUT && msginfo->operation != GET && !ACC(msginfo->operation)) { // printf("[ds %d]: operation=%d (format==STRIDED) not supported yet\n",armci_me,msginfo->operation); // abort(); // } armci_server(msginfo, descr, buffer, buflen); # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE portals_ds_send_ack(ev->initiator,ev->hdr_data); # else if(msginfo->operation==PUT || ARMCI_ACC(msginfo->operation)){ portals_ds_send_ack(ev->initiator,ev->hdr_data); } # endif } else armci_die2("armci_data_serv: unknown format code", msginfo->format, msginfo->from); } ARMCI_PR_SDBG("exit",0); } ga-5-3/armci/src-portals/pendbufs.h0000640005473000001440000000431411413404306016115 0ustar d3n000users/** @file Split buffer implementation. * @author Sriram Krishnamoorthy * * Supports multiple short/immediate buffers posted per client and a * client-independent number of buffers to handle large messages. */ #ifndef _PENDBUFS_H_ #define _PENDBUFS_H_ #if defined(PEND_BUFS) #include "armcip.h" #include "request.h" /**The buf should be the first field in immbuf_t and pendbuf_t. For example, look at openib.c:armci_rcv_req and maybe other places*/ typedef struct immbuf_t { char *buf; /*immediate buffer[IMMBUF_LEN]*/ /* IMMBUF_NW_T fields; */ IMMBUF_NW_T struct immbuf_t *immbuf_list_next; } immbuf_t; typedef struct pendbuf_t { char *buf; /*pending buffer[PENDBUF_LEN]*/ /* PENDBUF_NW_T fields; */ PENDBUF_NW_T int status; /* # define SPINLOCK # define TESTANDSET(x) __lock_test_and_set((x), 1) # define RELEASE_SPINLOCK __lock_release /*#elif defined(AIX)*/ #elif HAVE_SYS_ATOMIC_OP_H # if DEBUG_SPINLOCK # warning SPINLOCK: sys/atomic_op.h (AIX) # endif # include # define SPINLOCK # define TESTANDSET(x) (_check_lock((x), 0, 1)==TRUE) # define RELEASE_SPINLOCK(x) _clear_lock((x),0) #elif defined(SOLARIS) # if DEBUG_SPINLOCK # warning SPINLOCK: SOLARIS # endif # include # include # define SPINLOCK # define TESTANDSET(x) (!_lock_try((x))) # define RELEASE_SPINLOCK _lock_clear #elif defined(MACX) #elif defined(HPUX__) # if DEBUG_SPINLOCK # warning SPINLOCK: HPUX__ # endif extern int _acquire_lock(); extern void _release_lock(); # define SPINLOCK # define TESTANDSET(x) (!_acquire_lock((x))) # define RELEASE_SPINLOCK _release_lock #elif defined(HPUX) && defined(__ia64) /* HPUX on IA64, non gcc */ # if DEBUG_SPINLOCK # warning SPINLOCK: HPUX ia64 # endif # define SPINLOCK typedef unsigned int slock_t; # include # define TESTANDSET(lock) _Asm_xchg(_SZ_W, lock, 1, _LDHINT_NONE) # define RELEASE_SPINLOCK(lock) (*((volatile LOCK_T *) (lock)) = 0) #elif defined(NEC) # if DEBUG_SPINLOCK # warning SPINLOCK: NEC # endif extern ullong ts1am_2me(); # define LOCK_T ullong # define _LKWD (1ULL << 63) # define SPINLOCK # define TESTANDSET(x) ((_LKWD & ts1am_2me(_LKWD, 0xffULL, (ullong)(x)))) # define MEMORY_BARRIER mpisx_clear_cache extern void mpisx_clear_cache(); # define RELEASE_SPINLOCK(x) ts1am_2me(0ULL, 0xffULL, (ullong)x); #endif #ifdef SPINLOCK #if DEBUG_ # if HAVE_STDIO_H # include # endif #endif #if HAVE_UNISTD_H # include #endif #ifndef DBL_PAD # define DBL_PAD 16 #endif /* make sure that locks are not sharing the same cache line */ typedef struct{ double lock[DBL_PAD]; }pad_lock_t; #ifndef LOCK_T # define LOCK_T int #endif #define PAD_LOCK_T pad_lock_t static inline void armci_init_spinlock(LOCK_T *mutex) { #if OPENPA OPA_store_int(mutex, 0); #else *mutex =0; #endif } #ifdef TESTANDSET static inline void armci_acquire_spinlock(LOCK_T *mutex) { #if defined(BGML) || defined(DCMF) return; #else int loop=0, maxloop =10; while (TESTANDSET(mutex)){ loop++; if(loop==maxloop){ # if DEBUG_ extern int armci_me; printf("%d:spinlock sleeping\n",armci_me); fflush(stdout); # endif usleep(1); loop=0; } } #endif } #ifdef RELEASE_SPINLOCK # ifdef MEMORY_BARRIER # define armci_release_spinlock(x) MEMORY_BARRIER(); RELEASE_SPINLOCK(x) # else # define armci_release_spinlock(x) RELEASE_SPINLOCK(x) # endif #else static inline void armci_release_spinlock(LOCK_T *mutex) { #if defined(BGML) || defined(DCMF) return; #else # ifdef MEMORY_BARRIER MEMORY_BARRIER (); # endif #if OPENPA OPA_store_int(mutex, 0); #else *mutex =0; #endif # ifdef MEMORY_BARRIER MEMORY_BARRIER (); # endif # if (defined(MACX)||defined(LINUX)) && defined(__GNUC__) && defined(__ppc__) __asm__ __volatile__ ("isync" : : : "memory"); # endif #endif } #endif /* RELEASE_SPINLOCK */ #endif /* TESTANDSET */ #endif /* SPINLOCK */ #endif /* SPINLOCK_H */ ga-5-3/armci/src-portals/shmlimit.h0000640005473000001440000000027511300316052016132 0ustar d3n000users#ifndef _SHMLIMIT_H_ #define _SHMLIMIT_H_ extern int armci_me, armci_master; extern void armci_die(char *, int); extern int armci_shmem_test(); extern int armci_child_shmem_init(); #endif ga-5-3/armci/src-portals/Makefile.inc0000640005473000001440000000515612115161655016362 0ustar d3n000userslibarmci_la_SOURCES += src-portals/acc.h libarmci_la_SOURCES += src-portals/aggregate.c libarmci_la_SOURCES += src-portals/armci.c libarmci_la_SOURCES += src-portals/armcip.h libarmci_la_SOURCES += src-portals/armci_portals.c libarmci_la_SOURCES += src-portals/armci_portals.h libarmci_la_SOURCES += src-portals/atomics-i386.h libarmci_la_SOURCES += src-portals/buffers.c libarmci_la_SOURCES += src-portals/caccumulate.c libarmci_la_SOURCES += src-portals/ccopy.c libarmci_la_SOURCES += src-portals/clusterinfo.c libarmci_la_SOURCES += src-portals/copy.h libarmci_la_SOURCES += src-portals/ds-shared.c libarmci_la_SOURCES += src-portals/fence.c libarmci_la_SOURCES += src-portals/kr_malloc.c libarmci_la_SOURCES += src-portals/kr_malloc.h libarmci_la_SOURCES += src-portals/locks.c libarmci_la_SOURCES += src-portals/locks.h libarmci_la_SOURCES += src-portals/memlock.c libarmci_la_SOURCES += src-portals/memlock.h libarmci_la_SOURCES += src-portals/memory.c libarmci_la_SOURCES += src-portals/message.c libarmci_la_SOURCES += src-portals/mutex.c libarmci_la_SOURCES += src-portals/pack.c libarmci_la_SOURCES += src-portals/pendbufs.h libarmci_la_SOURCES += src-portals/portals_cp.c libarmci_la_SOURCES += src-portals/portals_ds.c libarmci_la_SOURCES += src-portals/portals.c libarmci_la_SOURCES += src-portals/request.c libarmci_la_SOURCES += src-portals/request.h libarmci_la_SOURCES += src-portals/rmw.c libarmci_la_SOURCES += src-portals/rtinfo.c libarmci_la_SOURCES += src-portals/semaphores.c libarmci_la_SOURCES += src-portals/semaphores.h libarmci_la_SOURCES += src-portals/shmalloc.h libarmci_la_SOURCES += src-portals/shmem.c libarmci_la_SOURCES += src-portals/shmem.h libarmci_la_SOURCES += src-portals/shmlimit.c libarmci_la_SOURCES += src-portals/shmlimit.h libarmci_la_SOURCES += src-portals/signaltrap.c libarmci_la_SOURCES += src-portals/signaltrap.h libarmci_la_SOURCES += src-portals/sockets.h libarmci_la_SOURCES += src-portals/spawn.c libarmci_la_SOURCES += src-portals/spinlock.h libarmci_la_SOURCES += src-portals/strided.c libarmci_la_SOURCES += src-portals/utils.h libarmci_la_SOURCES += src-portals/vector.c if PORTALS_ENABLE_NEW_MALLOC libarmci_la_SOURCES += src-portals/new_memory.c endif if MSG_COMMS_MPI libarmci_la_SOURCES += src-portals/groups.c endif if ARMCI_ENABLE_GPC_CALLS libarmci_la_SOURCES += src-portals/gpc.c endif if THREAD_SAFE libarmci_la_SOURCES += src-portals/threads.c libarmci_la_SOURCES += src-portals/utils.c endif include_HEADERS += src-portals/armci.h include_HEADERS += src-portals/gpc.h include_HEADERS += src-portals/message.h AM_CPPFLAGS += -I$(top_srcdir)/src-portals AM_CPPFLAGS += -I$(top_srcdir)/src/include ga-5-3/armci/src-portals/utils.h0000640005473000001440000000724611643645222015467 0ustar d3n000users/* $Id: utils.h,v 1.1.2.3 2007-07-02 05:35:31 d3p687 Exp $ * * primitives for transparent handling of multi-threading */ #ifndef UTILS_H #define UTILS_H /* * This header file describes the "barrier" synchronization * construct. The type barrier_t describes the full state of the * barrier including the POSIX 1003.1c synchronization objects * necessary. * * A barrier causes threads to wait until a set of threads has * all "reached" the barrier. The number of threads required is * set when the barrier is initialized, and cannot be changed * except by reinitializing. */ #ifdef THREAD_SAFE # ifdef POSIX_THREADS # include #if 1 typedef pthread_mutex_t thread_lock_t; # define THREAD_LOCK_INIT(x) pthread_mutex_init(&x,NULL) # define THREAD_LOCK_DESTROY(x) pthread_mutex_destroy(&x) # define THREAD_LOCK(x) pthread_mutex_lock(&x) # define THREAD_UNLOCK(x) pthread_mutex_unlock(&x) #else #ifndef INLINE # define INLINE # include "spinlock.h" # undef INLINE #else # include "spinlock.h" #endif typedef LOCK_T thread_lock_t; # define THREAD_LOCK_INIT(x) armci_init_spinlock(&x) # define THREAD_LOCK_DESTROY(x) 0 # define THREAD_LOCK(x) armci_acquire_spinlock(&x) # define THREAD_UNLOCK(x) armci_release_spinlock(&x) #endif typedef pthread_t thread_t; # define THREAD_CREATE(th_,func_,arg_) pthread_create(th_,NULL,func_,arg_) # define THREAD_JOIN(th_,ret_) pthread_join(th_,ret_) /* structure describing a barrier */ typedef struct thread_barrier_tag { pthread_mutex_t mutex; /* Control access to barrier */ pthread_cond_t cv; /* wait for barrier */ int valid; /* set when valid */ int threshold; /* number of threads required */ int counter; /* current number of threads */ int cycle; /* alternate wait cycles (0 or 1) */ } thread_barrier_t; # define BARRIER_VALID 0xdbcafe /* support static initialization of barriers */ # define BARRIER_INITIALIZER(cnt) {\ PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER,\ BARRIER_VALID, cnt, cnt, 0} # else # error ONLY PTHREADS SUPPORT HAS BEEN IMPLEMENTED # endif # define TH2PROC(th_) (th_/mt_tpp) /* computes processor from thread id */ /* barrier functions */ int thread_barrier_init (thread_barrier_t *barrier, int count); int thread_barrier_destroy (thread_barrier_t *barrier); int thread_barrier_wait (thread_barrier_t *barrier); /* multi-threaded memory functions */ int armci_malloc_mt(void *ptr[], int bytes); int armci_free_mt(void *ptr, int th_idx); # define ARMCI_MALLOC_MT armci_malloc_mt # define ARMCI_FREE_MT armci_free_mt # define TH_INIT(p_,t_) mt_size=p_;mt_tpp=t_;\ thread_barrier_init(&mt_barrier,mt_tpp) # define TH_FINALIZE() thread_barrier_destroy(&mt_barrier) # define MT_BARRIER() if (thread_barrier_wait(&mt_barrier)==-1) armci_msg_barrier();\ thread_barrier_wait(&mt_barrier) extern int mt_size; extern int mt_tpp; extern thread_barrier_t mt_barrier; #else # define THREAD_LOCK_INIT(x) # define THREAD_LOCK_DESTROY(x) # define THREAD_LOCK(x) # define THREAD_UNLOCK(x) # define TH_INIT(p_,t_) # define TH_FINALIZE() # define MT_BARRIER armci_msg_barrier # define ARMCI_MALLOC_MT PARMCI_Malloc # define ARMCI_FREE_MT(p_,th_) PARMCI_Free(p_) #endif #endif/*UTILS_H*/ ga-5-3/armci/src-portals/ccopy.c0000640005473000001440000002213511645616370015435 0ustar d3n000users/*************************************************************************** COPYRIGHT The following is a notice of limited availability of the code, and disclaimer which must be included in the prologue of the code and in all source listings of the code. Copyright Notice + 2009 University of Chicago Permission is hereby granted to use, reproduce, prepare derivative works, and to redistribute to others. This software was authored by: Jeff R. Hammond Leadership Computing Facility Argonne National Laboratory Argonne IL 60439 USA phone: (630) 252-5381 e-mail: jhammond@anl.gov GOVERNMENT LICENSE Portions of this material resulted from work developed under a U.S. Government Contract and are subject to the following license: the Government is granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable worldwide license in this computer software to reproduce, prepare derivative works, and perform publicly and display publicly. DISCLAIMER This computer code material was prepared, in part, as an account of work sponsored by an agency of the United States Government. Neither the United States, nor the University of Chicago, nor any of their employees, makes any warranty express or implied, or assumes any legal liability or responsibility for the accuracy, completeness, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use would not infringe privately owned rights. ***************************************************************************/ #if HAVE_CONFIG_H # include "config.h" #endif #include "copy.h" /* ONE-DIMENSIONAL COPY OPERATIONS */ #if 0 subroutine dcopy1d_n(A, B, n) integer n,i double precision A(n), B(n) ccdir$ no_cache_alloc a,b do i = 1, n B(i) = A(i) end do end #endif void c_dcopy1d_n_(const double* const restrict A, double* const restrict B, const int* const restrict n) { int i; for ( i = 0 ; i < (*n) ; i++ ){ B[i] = A[i]; } return; } #if 0 subroutine dcopy1d_u(A, B, n) integer n,n1,i double precision A(n), B(n) double precision d1, d2, d3, d4 n1 = iand(max0(n,0),3) do i = 1, n1 B(i) = A(i) end do do i = n1+1, n, 4 d1 = a(i) d2 = a(i+1) d3 = a(i+2) d4 = a(i+3) b(i) = d1 b(i+1) = d2 b(i+2) = d3 b(i+3) = d4 end do end #endif void c_dcopy1d_u_(const double* const restrict A, double* const restrict B, const int* const restrict n) { int i; int m = (*n) - ((*n)%4); for ( i = 0 ; i < m ; i+=4 ){ B[i ] = A[i ]; B[i+1] = A[i+1]; B[i+2] = A[i+2]; B[i+3] = A[i+3]; } for ( i = m ; i < (*n) ; i++ ){ B[i] = A[i]; } return; } /* TWO-DIMENSIONAL COPY OPERATIONS */ #if 0 subroutine dcopy21(rows, cols, A, ald, buf, cur) integer rows, cols integer c, r, ald, cur double precision A(ald,*), buf(ald) cur = 0 do c = 1, cols do r = 1, rows cur = cur+1 buf(cur) = A(r,c) end do end do end #endif void c_dcopy21_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict buf, int* const restrict cur) { int r, c, i=0; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ buf[i++] = A[ c * (*ald) + r ]; } } (*cur) = i; return; } #if 0 subroutine dcopy12(rows, cols, A, ald, buf, cur) integer rows, cols integer c, r, ald, cur double precision A(ald,*), buf(ald) cur = 0 do c = 1, cols do r = 1, rows cur = cur+1 A(r,c) = buf(cur) end do end do end #endif void c_dcopy12_(const int* const restrict rows, const int* const restrict cols, double* const restrict A, const int* const restrict ald, const double* const restrict buf, int* const restrict cur) { int r, c, i=0; i = 0; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] = buf[i++]; } } (*cur) = i; return; } #if 0 subroutine dcopy2d_n(rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double precision A(ald,*), B(bld,*) do c = 1, cols do r = 1, rows B(r,c) = A(r,c) end do end do end #endif void c_dcopy2d_n_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict B, const int* const restrict bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ B[ c * (*bld) + r ] = A[ c * (*ald) + r ]; } } return; } #if 0 subroutine dcopy2d_u(rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double precision A(ald,*), B(bld,*) integer r1 double precision d1, d2, d3, d4 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 c$$$ b(r,c) = a(r,c) + b(r,c) * 0 b(r,c) = a(r,c) end do do r = r1 + 1, rows, 4 d1 = a(r,c) d2 = a(r+1,c) d3 = a(r+2,c) d4 = a(r+3,c) b(r,c) = d1 b(r+1,c) = d2 b(r+2,c) = d3 b(r+3,c) = d4 c$$$ b(r,c) = a(r,c) + b(r,c) * 0 c$$$ b(r+1,c) = a(r+1,c) + b(r+1,c) * 0 c$$$ b(r+2,c) = a(r+2,c) + b(r+2,c) * 0 c$$$ b(r+3,c) = a(r+3,c) + b(r+3,c) * 0 enddo enddo end #endif void c_dcopy2d_u_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict B, const int* const restrict bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ int m = (*rows) - ((*rows)%4); for ( r = 0 ; r < m ; r+=4 ){ B[ c * (*bld) + r ] = A[ c * (*ald) + r ]; B[ c * (*bld) + r+1 ] = A[ c * (*ald) + r+1 ]; B[ c * (*bld) + r+2 ] = A[ c * (*ald) + r+2 ]; B[ c * (*bld) + r+3 ] = A[ c * (*ald) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ B[ c * (*bld) + r ] = A[ c * (*ald) + r ]; } } return; } /* THREE-DIMENSIONAL COPY OPERATIONS */ #if 0 subroutine dcopy31(rows, cols, planes, A, aldr, aldc, buf, cur) integer rows, cols, planes integer c, r, p, aldr, aldc, cur double precision A(aldr, aldc, *), buf(aldr) cur = 0 do p = 1, planes do c = 1, cols do r = 1, rows cur = cur+1 buf(cur) = A(r,c,p) end do end do end do end #endif void c_dcopy31_(const int* const restrict rows, const int* const restrict cols, const int* const restrict plns, const double* const restrict A, const int* const restrict aldr, const int* const restrict aldc, double* const restrict buf, int* const restrict cur) { int r, c, p, i=0; for ( p = 0 ; p < (*plns) ; p++ ){ for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ buf[i++] = A[ p * (*aldc) * (*aldr) + c * (*aldr) + r ]; } } } (*cur) = i; return; } #if 0 subroutine dcopy13(rows, cols, planes, A, aldr, aldc, buf, cur) integer rows, cols, planes integer c, r, p, aldr, aldc, cur double precision A(aldr, aldc, *), buf(aldr) cur = 0 do p = 1, planes do c = 1, cols do r = 1, rows cur = cur+1 A(r,c,p) = buf(cur) end do end do end do end #endif void c_dcopy13_(const int* const restrict rows, const int* const restrict cols, const int* const restrict plns, double* const restrict A, const int* const restrict aldr, const int* const restrict aldc, const double* const restrict buf, int* const restrict cur) { int r, c, p, i=0; for ( p = 0 ; p < (*plns) ; p++ ){ for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ p * (*aldc) * (*aldr) + c * (*aldr) + r ] = buf[i++]; } } } (*cur) = i; return; } ga-5-3/armci/src-portals/armci_portals.h0000640005473000001440000001051511410475746017163 0ustar d3n000users#ifndef ARMCI_PORTALS_H #define ARMCI_PORTALS_H /* portals header file */ #include #include #include #define NUM_COMP_DSCR 4 #define ARMCI_PORTALS_PTL_NUMBER 37 #define HAS_RDMA_GET #define NUM_SERV_BUFS 1 /*corresponds to num of different armci mem regions*/ #define MAX_MEM_REGIONS 10 #define VBUF_DLEN_ORG 4*64*1024 #define VBUF_DLEN 16*1024 #define MSG_BUFLEN_DBL_VT ((VBUF_DLEN)>>3) /* VBUF_DLEN are only used in Vinod's code */ #ifdef PORTALS_USE_RENDEZ_VOUS # define MSG_BUFLEN_DBL 262144 /* for rendez-vous, this can go bigger i think */ #else # define MSG_BUFLEN_DBL 1280 /* this is smaller when rendez-vous is off */ #endif #define ARMCI_NET_ERRTOSTR(__ARMCI_ERC_) ptl_err_str[__ARMCI_ERC_] typedef enum op { ARMCI_PORTALS_PUT, ARMCI_PORTALS_NBPUT, ARMCI_PORTALS_GET, ARMCI_PORTALS_NBGET, ARMCI_PORTALS_ACC, ARMCI_PORTALS_NBACC, ARMCI_PORTALS_GETPUT, ARMCI_PORTALS_NBGETPUT } armci_portals_optype; typedef struct { void *data_ptr; /* pointer where the data should go */ long ack; /* header ack */ void *ack_ptr; /* pointer where the data should go */ void *user_ptr; #if defined(SERV_QUEUE) int imm_msg; size_t data_len; #endif } msg_tag_t; typedef struct armci_portals_desc{ int active; int tag; int dest_id; armci_portals_optype type; ptl_md_t mem_dsc; ptl_handle_md_t mem_dsc_hndl; char *bufptr; }comp_desc; /*for buffers*/ extern char *armci_portals_client_buf_allocate(int); #define BUF_ALLOCATE armci_portals_client_buf_allocate #define BUF_EXTRA_FIELD_T comp_desc* #define INIT_SEND_BUF(_field,_snd,_rcv) _snd=1;_rcv=1;_field=NULL #define GET_SEND_BUFFER _armci_buf_get #define FREE_SEND_BUFFER _armci_buf_release #define CLEAR_SEND_BUF_FIELD(_field,_snd,_rcv,_to,_op) if((_op==UNLOCK || _op==PUT || ARMCI_ACC(_op)) && _field!=NULL)x_buf_wait_ack((request_header_t *)((void **)&(_field)+1),((char *)&(_field)-sizeof(BUF_INFO_T)));_field=NULL; #define TEST_SEND_BUF_FIELD(_field,_snd,_rcv,_to,_op,_ret) #define COMPLETE_HANDLE _armci_buf_complete_nb_request #define NB_CMPL_T comp_desc* #define ARMCI_NB_WAIT(_cntr) if(_cntr){\ int rc;\ if(nb_handle->tag)\ if(nb_handle->tag==_cntr->tag)\ rc = armci_client_complete(0,nb_handle->proc,nb_handle->tag,_cntr);\ } else{\ printf("\n%d:wait null ctr\n",armci_me);} #ifndef MAX_DS #define MAX_DS 16 #endif /* structure of computing process */ typedef struct { ptl_pt_index_t ptl; ptl_process_id_t rank; ptl_handle_ni_t ni_h; ptl_handle_eq_t eq_h; ptl_process_id_t Srank; ptl_handle_ni_t Sni_h; ptl_handle_eq_t Seq_h; int outstanding_puts; int outstanding_gets; ptl_process_id_t *procid_map; ptl_process_id_t *servid_map; int free_comp_desc_index; caddr_t dsbase[MAX_DS]; size_t dssizes[MAX_DS]; ptl_match_bits_t heap_mb[MAX_DS]; ptl_md_t heap_md[MAX_DS]; ptl_handle_me_t heap_me_h[MAX_DS]; ptl_handle_md_t heap_md_h[MAX_DS]; void *brval[MAX_DS]; long serv_offs[MAX_DS]; int cur_ds; }armci_portals_proc_t; typedef struct { ptl_match_bits_t mb; ptl_md_t md; ptl_handle_me_t me_h; ptl_handle_md_t md_h; }armci_portals_serv_mem_t; typedef struct { int reg_count; int outstanding_puts; int outstanding_gets; armci_portals_serv_mem_t meminfo[MAX_MEM_REGIONS]; }armci_portals_serv_t; extern void print_mem_desc_table(void); extern int armci_init_portals(caddr_t); extern void armci_fini_portals(void); extern int armci_post_descriptor(ptl_md_t *md); extern int armci_prepost_descriptor(void* start, long bytes); extern ptl_size_t armci_get_offset(ptl_md_t md, void *ptr,int proc); extern int armci_get_md(void * start, int bytes , ptl_md_t * md, ptl_match_bits_t * mb); extern void armci_portals_put(int,void *,void *,int,void **,int ); extern void armci_portals_get(int,void *,void *,int,void **,int ); extern void comp_desc_init(); extern int armci_client_complete(ptl_event_kind_t evt,int proc_id, int nb_tag ,comp_desc * cdesc); extern void armci_portals_memsetup(long); extern MPI_Comm portals_smp_comm; #endif /* ARMCI_PORTALS_H */ ga-5-3/armci/src-portals/spawn.c0000640005473000001440000000601611361133741015437 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* OS specific server process/thread creation and destruction * JN/03.25.2000 */ #if HAVE_STDIO_H # include #endif #if HAVE_ERRNO_H # include #endif #include "armcip.h" #ifdef WIN32 /************************** Windows threads **************************/ #if HAVE_WINDOWS_H # include #endif #if HAVE_PROCESS_H # include #endif thread_id_t armci_serv_tid; unsigned long armci_serv_handle; #ifndef NO_STDLIBC #define NEWTHREAD CreateThread #else #define NEWTHREAD _beginthreadex #endif unsigned __stdcall armci_wrap_func(void *arg) { void (*func)(void*); func = arg; /* boost the server thread priority be better responsiveness */ (void)SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_HIGHEST); func(NULL); return (unsigned)0; } void armci_create_server_thread ( void* (* func)(void*) ) { /* as we need to use std C rt library we cannot use CreateThread */ armci_serv_handle = NEWTHREAD(NULL, 0, armci_wrap_func, (void*)func, 0, &armci_serv_tid); if(!armci_serv_handle) armci_die("armci_create_server_thread: create failed",0); } void armci_terminate_server_thread() { /*int rc;*/ /* TerminateThread(armci_serv_handle,&rc);*/ } /****************************** PTHREADS *****************************/ #elif defined(PTHREADS) #include thread_id_t armci_serv_tid; void armci_create_server_thread ( void* (* func)(void*) ) { pthread_attr_t attr; int rc; if(pthread_attr_init(&attr)) armci_die("armci_create_server_thread: attr init failed",0); #if defined(AIX) || defined(SOLARIS) pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); #endif rc = pthread_create(&armci_serv_tid, &attr, func, NULL); if(rc) armci_die("armci_create_server_thread: create failed",errno); pthread_attr_destroy(&attr); } void armci_terminate_server_thread() { if(pthread_join(armci_serv_tid,NULL)) armci_die("armci_terminate_server_thread: failed",0); } #else /**************************** Unix processes ******************************/ #if HAVE_UNISTD_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_WAIT_H # include #endif pid_t server_pid= (pid_t)0; char child_stack[256*1024]; char *child_stack_top = &child_stack[256*1024-1]; void armci_create_server_process ( void* (* func)(void*) ) { pid_t pid; /* if ( (pid = fork() ) < 0) armci_die("fork failed", (int)pid); */ pid = clone(func, (void*)child_stack_top, CLONE_THREAD|CLONE_SIGHAND|CLONE_VM, NULL); if (pid == -1) { armci_die("fork failed", (int)pid); } server_pid = pid; } void armci_wait_server_process() { int stat; pid_t rc; if(!server_pid) return; rc = wait (&stat); if (rc != server_pid){ perror("ARMCI master: wait for child process (server) failed:"); } server_pid = (pid_t)0; } #endif ga-5-3/armci/src-portals/utils.c0000640005473000001440000001456711344035226015461 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* * A barrier causes threads to wait until a set of threads has * all "reached" the barrier. The number of threads required is * set when the barrier is initialized, and cannot be changed * except by reinitializing. * * The barrier_init() and barrier_destroy() functions, * respectively, allow you to initialize and destroy the * barrier. * * The barrier_wait() function allows a thread to wait for a * barrier to be completed. One thread (the one that happens to * arrive last) will return from barrier_wait() with the status * -1 on success -- others will return with 0. The special * status makes it easy for the calling code to cause one thread * to do something in a serial region before entering another * parallel section of code. */ #include #include #include #include #include #include #include #include #include "utils.h" #define DEBUG_ int mt_size; /* number of processes: needed for collective mt ops */ int mt_tpp; /* number of threads used for collective ops */ thread_barrier_t mt_barrier; /* static barrier used for multi-threaded MT_BARRIER */ int armci_malloc_mt(void *ptr[], int bytes) { int rc, th_size, i, j; th_size = mt_size * mt_tpp; if (thread_barrier_wait(&mt_barrier)==-1) { rc = PARMCI_Malloc(ptr, bytes * mt_tpp); #ifdef DEBUG printf("bytes=%d\n", bytes); for (i = 0; i < mt_size; i++) printf("ptr[%d]=%p\n",i,ptr[i]); #endif /* at this point proc ptrs are at beggining of the list */ for (i = mt_size - 1; i >= 0; i--) for (j = mt_tpp - 1; j >= 0; j--) { #ifdef DEBUG printf("mt_size=%d,mt_tpp=%d,i=%d,j=%d,ptr[%d]=%p+%d\n", mt_size,mt_tpp,i,j,i*mt_tpp+j,ptr[i],j*bytes); fflush(stdout); #endif ptr[i * mt_tpp + j] = ((char*)ptr[i]) + j * bytes; } } thread_barrier_wait(&mt_barrier); return rc; } int armci_free_mt(void *ptr, int th_idx) { } #ifdef POSIX_THREADS /* * Initialize a barrier for use. */ int thread_barrier_init (thread_barrier_t *barrier, int count) { int status; barrier->threshold = barrier->counter = count; barrier->cycle = 0; status = pthread_mutex_init (&barrier->mutex, NULL); if (status != 0) return status; status = pthread_cond_init (&barrier->cv, NULL); if (status != 0) { pthread_mutex_destroy (&barrier->mutex); return status; } barrier->valid = BARRIER_VALID; return 0; } /* * Destroy a barrier when done using it. */ int thread_barrier_destroy (thread_barrier_t *barrier) { int status, status2; if (barrier->valid != BARRIER_VALID) return EINVAL; status = pthread_mutex_lock (&barrier->mutex); if (status != 0) return status; /* * Check whether any threads are known to be waiting; report * "BUSY" if so. */ if (barrier->counter != barrier->threshold) { pthread_mutex_unlock (&barrier->mutex); return EBUSY; } barrier->valid = 0; status = pthread_mutex_unlock (&barrier->mutex); if (status != 0) return status; /* * If unable to destroy either 1003.1c synchronization * object, return the error status. */ status = pthread_mutex_destroy (&barrier->mutex); status2 = pthread_cond_destroy (&barrier->cv); return (status == 0 ? status : status2); } /* * Wait for all members of a barrier to reach the barrier. When * the count (of remaining members) reaches 0, broadcast to wake * all threads waiting. */ int thread_barrier_wait (thread_barrier_t *barrier) { int status, cancel, tmp, cycle; if (barrier->valid != BARRIER_VALID) return EINVAL; status = pthread_mutex_lock (&barrier->mutex); if (status != 0) return status; cycle = barrier->cycle; /* Remember which cycle we're on */ if (--barrier->counter == 0) { barrier->cycle = !barrier->cycle; barrier->counter = barrier->threshold; status = pthread_cond_broadcast (&barrier->cv); /* * The last thread into the barrier will return status * -1 rather than 0, so that it can be used to perform * some special serial code following the barrier. */ if (status == 0) status = -1; } else { /* * Wait with cancellation disabled, because barrier_wait * should not be a cancellation point. */ pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &cancel); /* * Wait until the barrier's cycle changes, which means * that it has been broadcast, and we don't want to wait * anymore. */ while (cycle == barrier->cycle) { status = pthread_cond_wait ( &barrier->cv, &barrier->mutex); if (status != 0) break; } pthread_setcancelstate (cancel, &tmp); } /* * Ignore an error in unlocking. It shouldn't happen, and * reporting it here would be misleading -- the barrier wait * completed, after all, whereas returning, for example, * EINVAL would imply the wait had failed. The next attempt * to use the barrier *will* return an error, or hang, due * to whatever happened to the mutex. */ pthread_mutex_unlock (&barrier->mutex); return status; /* error, -1 for waker, or 0 */ } #endif #if 0 /*** NAME timing.c PURPOSE Timing routines for calculating the execution time: void start_timer(void); Set the timer. double elapsed_time(void); Return the timing elapsed since the timer has been set. NOTES Jialin Ju - Oct 16, 1995 Created. ***/ /* Timing routines that use standard Unix gettingofday() */ static struct timezone tz; static struct timeval start_time, finish_time; /* Start measuring a time delay */ void start_timer(void) { gettimeofday( &start_time, &tz); } /* Retunrn elapsed time in milliseconds */ double elapsed_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*(finish_time.tv_sec - start_time.tv_sec) + (finish_time.tv_usec - start_time.tv_usec)/1000.0 ); } /* Return the stopping time in milliseconds */ double stop_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*finish_time.tv_sec + finish_time.tv_usec/1000.0); } #endif ga-5-3/armci/src-portals/code_options.h0000640005473000001440000001234111410475746017010 0ustar d3n000users/* Questions: ORNL - tipparajuv@ornl.gov CRAY - ryan@cray.com */ /* --------------------------------------------------------------------------- *\ PORTALS_USE_RENDEZ_VOUS ======================= When the number of PEs gets very large, the data server is required to have buffer space available for all possible incoming messages which is defined by PORTALS_MAX_DESCRIPTORS = (MAX_BUFS+MAX_SMALL_BUFS). For each PE, the DS must have at least: min_memory_per_pe = PORTALS_MAX_BUFS*PORTALS_BUF_SIZE + PORTALS_MAX_SMALL_BUFS*PORTALS_SMALL_BUF_SIZE This becomes a memory constraint at large core count. Rendez-vous message is one mechanism to get around requiring the DS to have buffer space for all messages. When rendez-vous (RZV) messaging is enabled, the messages what use the large buffers no longer send the entire buffer "eagerly". Instead, only the data request (request_header_t) gets sent to the data server. When the data server is ready to handle the request, it "pulls" the entire buffer over via a portals_get operation. One can immediately see that this can lead to a slow down in performance, since the data server is idle when it has to pull the data over. This is the price paid when you remove the bufferign for those messsages. Ideally, when the DS is pulling the message, it could be processing another request. This double buffering technique needs to be programmed in. Care must be taken to ensure proper ARMCI behavior. The next request handled can not be from the same PE, nor can it be a FENCE operation ... all other (?) requests/operations can be double buffered. \* --------------------------------------------------------------------------- */ # define PORTALS_USE_RENDEZ_VOUS /* --------------------------------------------------------------------------- *\ PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE ===================================== Another means to reduce the required buffer needed by the data server is to limit the number of cores that can talk to the data server at any given moment. When this options is turned on, only 1 request per node is allowed to be in the buffer of any given data server. On a 10 core node, the size of the buffer required by the data server is reduced by more than an order of magnitude. You get more than an order of magnitude, because you don't need to reserve space for any of the small buffers, since you can only have one small or one large from any given node in the ds buffer at any one time. Another major benefit is you can increase MAX_BUFS and MAX_SMALL_BUFS to increase concurrency without affecting the DS's buffer size. Can be used with PORTALS_USE_RENDEZ_VOUS. notes: every request needs to respond with an ack, even gets. acks actually send data when we limit remote request ... the ack response is needed to trigger that the outstanding request has been finished by the data server ... the ack zeros out the index in the active_requests_by_node array. \* --------------------------------------------------------------------------- */ # define PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE_TURNED_OFF /* --------------------------------------------------------------------------- *\ PORTALS_AFFINITY ================ When initializing compute processes and data servers, the affinity passed in by aprun/alps is ignored. Compute processes are bound strictly to a particular core. Cores are evenly divided between sockets keeping the last core (mask = 1 << (ncpus-1)) free for the data server. If the node is not fully subscribed, then the data server is bound to the last core on the node (mask = 1 << (ncpus-1)); otherwise, the data server is "free floating" (mask = (1 << ncpus)-1) on a fully subscribed node. \* --------------------------------------------------------------------------- */ # define PORTALS_AFFINITY # define PORTALS_AFFINITY_NSOCKETS 2 /* --------------------------------------------------------------------------- *\ CRAY_USE_MDMD_COPY ================== Used MDMD copy instead of PtlGetRegion for on-node "local" transfers \* --------------------------------------------------------------------------- */ # define CRAY_USE_MDMD_COPY /* --------------------------------------------------------------------------- *\ ORNL_USE_DS_FOR_REMOTE_GETS =========================== Vinod informed us of a modification that can be made to enable the use of the data server for remote gets. Without this option, direct gets are used. This can cause severe network congestion, because many armci_gets are not stride 1. The data server packs those gets into contiguous blocks and sends them back as a single put. However, the direct gets, require many small messages. Unfortunately, there is a small bug in the DS for remote gets. This bug may cause the program to abort or print out the following message: %d: server wrote data at unexpected offset %d This is a bug actively being worked on @ CRAY and ORNL. \* --------------------------------------------------------------------------- */ # define ORNL_USE_DS_FOR_REMOTE_GETS # define CRAY_USE_ARMCI_CLIENT_BUFFERS ga-5-3/armci/src-portals/pack.c0000640005473000001440000002711411410475746015240 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: pack.c,v 1.36.10.1 2006-12-14 13:24:37 manoj Exp $ */ #include "armcip.h" #include #if !defined(ACC_COPY) &&!defined(CRAY_YMP) &&!defined(CYGNUS)&&!defined(CYGWIN) &&!defined(BGML) # define REMOTE_OP #endif #if defined(REMOTE_OP) # define OP_STRIDED armci_rem_strided #else # define OP_STRIDED(_a,_b,_c,_d,_e,_f,_g,_h,_i,_delete1,_j,_hdl)\ armci_op_strided(_a,_b,_c,_d,_e,_f,_g,_h,_i,_j,_hdl) #endif /*\ determine if patch fits in the ARMCI buffer, and if not * at which stride level (patch dim) need to decompose it * *fit_level is the value of stride level to perform packing at * *nb means number of elements of count[*fit_level] that fit in buf \*/ static void armci_fit_buffer(int count[], int stride_levels, int* fit_level, int *nb, int bufsize) { int bytes=1, sbytes=1; int level; /* find out at which stride level BUFFER becomes too small */ for(level=0; level<= stride_levels; level++){ sbytes = bytes; /* store #bytes at current level to save div cost later */ bytes *= count[level]; if(bufsize < bytes) break; } /* buffer big enough for entire patch */ if(bufsize >= bytes){ *fit_level = stride_levels; *nb = count[stride_levels]; return; } /* buffer too small */ switch (level){ case 0: /* smaller than a single column */ *fit_level = 0; *nb = bufsize; break; case -1: /* one column fits */ *fit_level = 0; *nb = sbytes; break; default: /* it could keep nb instances of (level-1)-dimensional patch */ *fit_level = level; *nb = bufsize/sbytes; } } /*\ The function decomposes a multi-dimensional patch so that it fits in the * internal ARMCI buffer. * It works by recursively reducing patch dimension until some portion of the * subpatch fits in the buffer. * The recursive process is controlled by "fit_level" and "nb" arguments, * which have to be set to -1 at the top-level of the recursion tree. * * Argument last and variable looplast are used to indicate to sending/packing * routine that we are dealing with the last portion of the request. * Due to the recursive nature of packing code, the algorithm is following: * if last=1 then internal for loop passes 1 for the last chunk * else it passes 0 * \*/ int armci_pack_strided(int op, void* scale, int proc, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, ext_header_t *h, int fit_level, int nb, int last,armci_ihdl_t nb_handle) { int rc=0, sn, bufsize=BUFSIZE,noswap=0; void *src, *dst; #ifdef REMOTE_OP int flag=0; #else int flag=1; #endif int b; static int call_count; #ifdef STRIDED_GET_BUFLEN if(op==GET) bufsize=STRIDED_GET_BUFLEN; # ifdef HITACHI else if(stride_levels || ARMCI_ACC(op)) bufsize=MSG_BUFLEN_SMALL-PAGE_SIZE; # endif #endif #if (defined(GM_) || defined(VIA_) || defined(VAPI_)) /*we cant assume that the entire available buffer will be used for data, fact that the header and descriptor also go in the same buffer should be considered while packing. */ bufsize-=(sizeof(request_header_t)+(MAX_STRIDE_LEVEL+4)*sizeof(int)+2*sizeof(void *)); # if defined(PIPE_BUFSIZE) && defined(MAX_PIPELINE_CHUNKS) bufsize-=8*MAX_PIPELINE_CHUNKS; # endif #endif #ifdef BALANCE_FACTOR /* Added the following for balancing buffers */ if(op==PUT){ int bytes=1, i; for(i=0; i<= stride_levels; i++) bytes *= count[i]; if(bytes > bufsize && bytes/bufsize < 3 && bytes%bufsize < BALANCE_BUFSIZE){ /* bytes div bufsize - 1 is to increase the balence factor for 3 buffer case */ bufsize = bytes/ (bytes/bufsize - 1 + BALANCE_FACTOR); noswap = 1; /*** yuck: if set to 1, error in buffers.c ***/ } bytes = bufsize%8; bufsize -= bytes; } #endif /* determine decomposition of the patch to fit in the buffer */ if(fit_level<0){ armci_fit_buffer(count, stride_levels, &fit_level, &nb, bufsize); last = 1; } // printf("%s [cp]: pack_strided: flag=%d, bufsize=%ld; fit_level=%d; stride_level=%d; nb=%d\n",Portals_ID(),flag,(long) bufsize,fit_level,stride_levels,nb); if(fit_level == stride_levels){ /* we can fit subpatch into the buffer */ int chunk = count[fit_level]; int dst_stride, src_stride; if(nb == chunk){ /* take shortcut when whole patch fits in the buffer */ if(h) h->last = last?1:0; if(nb_handle && call_count ){ nb_handle->bufid=NB_MULTI; call_count++; } return(OP_STRIDED(op, scale, proc, src_ptr, src_stride_arr, dst_ptr,dst_stride_arr,count,stride_levels,h,flag,nb_handle)); } if(fit_level){ dst_stride = dst_stride_arr[fit_level -1]; src_stride = src_stride_arr[fit_level -1]; }else{ dst_stride = src_stride = 1; } if(op == GET || noswap == 1) b =nb; else{ b = chunk%nb; if(b==0)b=nb; } /* put smallest piece first */ for(sn = 0; sn < chunk; ){ src = (char*)src_ptr + src_stride* sn; dst = (char*)dst_ptr + dst_stride* sn; count[fit_level] = ARMCI_MIN(b, chunk-sn); /*modify count for this level*/ if(h) h->last = (last && ((sn+b)>=chunk))? 1: 0 ; if(nb_handle)call_count++; rc = OP_STRIDED( op, scale, proc, src, src_stride_arr, dst,dst_stride_arr,count,fit_level,h,flag,nb_handle); if(rc) break; sn += b; b = nb; } count[fit_level] = chunk; /* restore original count */ } else { for(sn = 0; sn < count[stride_levels]; sn++){ int looplast =0; src = (char*)src_ptr + src_stride_arr[stride_levels -1]* sn; dst = (char*)dst_ptr + dst_stride_arr[stride_levels -1]* sn; if(last && (sn == count[stride_levels]-1)) looplast =1; rc = armci_pack_strided(op, scale, proc, src, src_stride_arr, dst, dst_stride_arr, count, stride_levels -1, h,fit_level, nb, looplast,nb_handle); if(rc) return rc; } } if(nb_handle && call_count ) nb_handle->bufid=NB_MULTI; return rc; } /*\ decompose strided data into chunks and call func on each chunk \*/ void armci_dispatch_strided(void *ptr, int stride_arr[], int count[], int strides, int fit_level, int nb, int bufsize, void (*fun)(void*,int*,int*,int,void*), void *arg) { int sn,first_call=0; void *ptr_upd; /* determine decomposition of the patch to fit in the buffer */ if(fit_level<0){ first_call=1; armci_fit_buffer(count, strides, &fit_level, &nb, bufsize); } if(fit_level == strides){ /* we can fit subpatch into the buffer */ int chunk = count[fit_level]; int stride_upd; # ifdef PIPE_MEDIUM_BUFSIZE_ /* for first call we adjust nb for performance in medium request */ if(first_call && strides==0) if(chunk<2*bufsize && chunk>PIPE_MEDIUM_BUFSIZE) nb = PIPE_MEDIUM_BUFSIZE; # endif if(nb == chunk){ /* take shortcut when whole patch fits in the buffer */ fun(ptr, stride_arr, count, strides, arg); } if(fit_level) stride_upd = stride_arr[fit_level -1]; else stride_upd = 1; for(sn = 0; sn < chunk; sn += nb){ ptr_upd = (char*)ptr + stride_upd* sn; count[fit_level] = ARMCI_MIN(nb, chunk-sn); /*modify count for this level*/ fun(ptr_upd, stride_arr, count, fit_level, arg); } count[fit_level] = chunk; /* restore original count */ }else for(sn = 0; sn < count[strides]; sn++){ ptr_upd = (char*)ptr + stride_arr[strides -1]* sn; armci_dispatch_strided(ptr_upd, stride_arr, count, strides -1, fit_level, nb, bufsize, fun, arg); } } /* how much space is needed to move data + reduced descriptor ? */ int armci_vector_bytes( armci_giov_t darr[], int len) { int i, bytes=0; for(i=0; isrc_ptr_array=NULL; /* go through the sets looking for set to be split */ for(s=0;sBUFSIZE1){ split =(BUFSIZE1 -bytes-2*sizeof(int))/(darr[s].bytes +sizeof(void*)); if(split == 0) s--; /* no room available - do not split */ break; }else bytes+=csize; if(BUFSIZE1 -bytes < 64) break; /* stop here if almost full */ } if(s==len)s--; /* adjust loop counter should be < number of sets */ *nlen = s+1; if(split){ /* save the value to be overwritten only if "save" is not filled */ if(!save->src_ptr_array)*save= darr[s]; /* split the set: reduce # of elems, "extra" keeps info for rest of set*/ *extra = darr[s]; darr[s].ptr_array_len = split; extra->ptr_array_len -= split; extra->src_ptr_array = &extra->src_ptr_array[split]; extra->dst_ptr_array = &extra->dst_ptr_array[split]; } } int armci_pack_vector(int op, void *scale, armci_giov_t darr[],int len, int proc,armci_ihdl_t nb_handle) { armci_giov_t extra; /* keeps data remainder of set to be processed in chunks */ armci_giov_t save; /* keeps original value of set to be processed in chunks */ armci_giov_t *ndarr; /* points to first array element to be processed now */ int rc=0, nlen, count=0; ndarr = darr; save.src_ptr_array=NULL; /* indicates that save slot is empty */ while(len){ armci_split_dscr_array(ndarr, len, &extra, &nlen, &save); # if defined(REMOTE_OP) rc = armci_rem_vector(op, scale, ndarr,nlen,proc,0,nb_handle); # else if(ARMCI_ACC(op))rc=armci_acc_vector(op,scale,ndarr,nlen,proc); else rc = armci_copy_vector(op,ndarr,nlen,proc); # endif if(rc) break; /* non-NULL pointer indicates that set was split */ if(extra.src_ptr_array){ if(nb_handle) { nb_handle->bufid = NB_MULTI; /*can be set multiple times here; but not reset here*/ } ndarr[nlen-1]=extra; /* set the pointer to remainder of last set */ nlen--; /* since last set not done in full need to process it again */ }else{ if(save.src_ptr_array){ ndarr[0]=save; save.src_ptr_array=NULL; /* indicates that save slot is empty */ } if(nlen==0) armci_die("vector packetization problem:buffer too small",BUFSIZE1); } len -=nlen; ndarr +=nlen; count ++; } return rc; } ga-5-3/armci/src-portals/memlock.c0000640005473000001440000001622011445674707015753 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: memlock.c,v 1.24.2.3 2007-08-29 17:32:32 manoj Exp $ */ #include "armcip.h" #include "locks.h" #include "copy.h" #include "memlock.h" #include #define DEBUG_ 0 #define INVALID_VAL -9999999 #ifdef DATA_SERVER # define CORRECT_PTR #endif size_t armci_mem_offset=0; /* We start by using table: assign address of local variable set to 1 * On shmem systems, this addres is overwritten by a shared memory location * when memlock array is allocated in armci_init * Therefore, any process within shmem node can reset armci_use_memlock_table * to "not used" when offset changes. Since the variable is in shmem, everybody * on that SMP node will see the change and use the same locking functions */ int init_use_memlock_table=1; int *armci_use_memlock_table=&init_use_memlock_table; static int locked_slot=INVALID_VAL; volatile double armci_dummy_work=0.; void **memlock_table_array; /* constants for cache line alignment */ # define CALGN 64 # define LOG_CALGN 6 #define ALIGN_ADDRESS(x) (char*)((((unsigned long)x) >> LOG_CALGN) << LOG_CALGN) static memlock_t table[MAX_SLOTS]; /*\ simple locking scheme that ignores addresses \*/ void armci_lockmem_(void *pstart, void *pend, int proc) { #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif if(DEBUG_){ printf("%d: armci_lockmem_ proc=%d lock=%d\n",armci_me,proc,lock); fflush(stdout); } NATIVE_LOCK(lock,proc); if(DEBUG_){ printf("%d: armci_lockmem_ done\n",armci_me); fflush(stdout); } } void armci_unlockmem_(int proc) { #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif if(DEBUG_){ printf("%d: armci_unlockmem_ proc=%d lock=%d\n",armci_me,proc,lock); fflush(stdout); } NATIVE_UNLOCK(lock,proc); } /*\ idle for a time proportional to factor \*/ void armci_waitsome(int factor) { int i=factor*100000; if(factor <= 1) armci_dummy_work =0.; if(factor < 1) return; while(--i){ armci_dummy_work = armci_dummy_work + 1./(double)i; } } /*\ acquire exclusive LOCK to MEMORY area owned by process "proc" * . only one area can be locked at a time by the calling process * . must unlock it with armci_unlockmem \*/ void armci_lockmem(void *start, void *end, int proc) { register void* pstart, *pend; register int slot, avail=0; int turn=0, conflict=0; memlock_t *memlock_table; #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif #ifdef CORRECT_PTR if(! *armci_use_memlock_table){ /* if offset invalid, use dumb locking scheme ignoring addresses */ armci_lockmem_(start, end, proc); return; } # ifndef SGIALTIX /* when processes are attached to a shmem region at different addresses, * addresses written to memlock table must be adjusted to the node master */ if(armci_mem_offset){ start = armci_mem_offset + (char*)start; end = armci_mem_offset + (char*)end; } # endif #endif if(DEBUG_){ printf("%d: calling armci_lockmem for %d range %p -%p\n", armci_me, proc, start,end); fflush(stdout); } memlock_table = (memlock_t*)memlock_table_array[proc]; #ifdef ALIGN_ADDRESS /* align address range on cache line boundary to avoid false sharing */ pstart = ALIGN_ADDRESS(start); pend = CALGN -1 + ALIGN_ADDRESS(end); #else pstart=start; pend =end; #endif #ifdef CRAY_SHMEM { /* adjust according the remote process raw address */ long bytes = (long) ((char*)pend-(char*)pstart); extern void* armci_shmalloc_remote_addr(void *ptr, int proc); pstart = armci_shmalloc_remote_addr(pstart, proc); pend = (char*)pstart + bytes; } #endif while(1){ NATIVE_LOCK(lock,proc); armci_get(memlock_table, table, sizeof(table), proc); /* armci_copy(memlock_table, table, sizeof(table));*/ /* inspect the table */ conflict = 0; avail =-1; for(slot = 0; slot < MAX_SLOTS; slot ++){ /* nonzero starting address means the slot is occupied */ if(table[slot].start == NULL){ /* remember a free slot to store address range */ avail = slot; }else{ /*check for conflict: overlap between stored and current range*/ if( (pstart >= table[slot].start && pstart <= table[slot].end) || (pend >= table[slot].start && pend <= table[slot].end) ){ conflict = 1; break; } /* printf("%d: locking %ld-%ld (%d) conflict\n", armci_me, */ } } if(avail != -1 && !conflict) break; NATIVE_UNLOCK(lock,proc); armci_waitsome( ++turn ); } /* we got the memory lock: enter address into the table */ table[avail].start = pstart; table[avail].end = pend; armci_put(table+avail,memlock_table+avail,sizeof(memlock_t),proc); FENCE_NODE(proc); NATIVE_UNLOCK(lock,proc); locked_slot = avail; } /*\ release lock to the memory area locked by previous call to armci_lockemem \*/ void armci_unlockmem(int proc) { void *null[2] = {NULL,NULL}; memlock_t *memlock_table; #ifdef CORRECT_PTR if(! *armci_use_memlock_table){ /* if offset invalid, use dumb locking scheme ignoring addresses */ armci_unlockmem_(proc); return; } #endif #ifdef DEBUG if(locked_slot == INVALID_VAL) armci_die("armci_unlock: empty",0); if(locked_slot >= MAX_SLOTS || locked_slot <0) armci_die("armci_unlock: corrupted slot?",locked_slot); #endif memlock_table = (memlock_t*)memlock_table_array[proc]; armci_put(null,&memlock_table[locked_slot].start,2*sizeof(void*),proc); } /*\ based on address for set by master, determine correction for * memory addresses set in memlock table * if the correction/offset ever changes stop using memlock table locking \*/ void armci_set_mem_offset(void *ptr) { extern size_t armci_mem_offset; size_t off; static int first_time=1; volatile void *ref_ptr; ARMCI_PR_DBG("enter",0); /* do not care if memlock not used */ if(! *armci_use_memlock_table) return; if(!ptr) armci_die("armci_set_mem_offset : null ptr",0); ref_ptr = *(void**)ptr; off = (size_t)((char*)ref_ptr - (char*)ptr); if(first_time){ armci_mem_offset =off; first_time =0; if(DEBUG_){ printf("%d memlock offset=%ld ref=%p ptr=%p\n",armci_me, (long)armci_mem_offset, ref_ptr, ptr); fflush(stdout); } }else{ if(armci_mem_offset != off){ *armci_use_memlock_table =0; fprintf(stderr, "%d: WARNING:armci_set_mem_offset: offset changed %ld to %ld\n", armci_me, (long)armci_mem_offset, (long)off); fflush(stdout); } } } ga-5-3/armci/src-portals/armci.h0000640005473000001440000004054411643666515015430 0ustar d3n000users/*$id$*/ /* ARMCI header file */ #ifndef _ARMCI_H #define _ARMCI_H /* for size_t */ #include #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif typedef unsigned long long u64Int; typedef long long s64Int; extern int armci_sameclusnode(int proc); typedef struct { void **src_ptr_array; void **dst_ptr_array; int ptr_array_len; int bytes; } armci_giov_t; typedef long armci_size_t; extern int armci_notify(int proc); extern int armci_notify_wait(int proc,int *pval); extern int ARMCI_Init(void); /* initialize ARMCI */ extern int ARMCI_Init_args(int *argc, char ***argv); extern void ARMCI_Barrier(void); /* ARMCI Barrier*/ extern int ARMCI_Put(void *src, void* dst, int bytes, int proc); extern int ARMCI_Put_flag(void *src, void* dst,int bytes,int *f,int v,int proc); #define ARMCI_Put1(_s,_d,_b,_p) memcpy(_d,_s,_b), 0 extern int ARMCI_PutS( /* strided put */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ); extern int ARMCI_PutS_flag_dir( /* put with flag that uses direct put */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int *flag, /* pointer to remote flag */ int val, /* value to set flag upon completion of data transfer */ int proc /* remote process(or) ID */ ); extern int ARMCI_PutS_flag( void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int *flag, /* pointer to remote flag */ int val, /* value to set flag upon completion of data transfer */ int proc /* remote process(or) ID */ ); extern int ARMCI_Acc(int optype, void *scale, void *src, void *dst, int bytes, int proc); extern int ARMCI_AccS( /* strided accumulate */ int optype, /* operation */ void *scale, /* scale factor x += scale*y */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ); extern int ARMCI_Get(void *src, void* dst, int bytes, int proc); extern int ARMCI_GetS( /* strided get */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ); extern int ARMCI_GetV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int ARMCI_PutV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int ARMCI_AccV( int op, /* operation code */ void *scale, /* scaling factor for accumulate */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int ARMCI_PutValueInt(int src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc /* remote process (or) ID */ ); extern int ARMCI_PutValueLong(long src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc /* remote process (or) ID */ ); extern int ARMCI_PutValueFloat(float src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc /* remote process (or) ID */ ); extern int ARMCI_PutValueDouble(double src,/* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc /* remote process (or) ID */ ); extern int ARMCI_GetValueInt(void *src, int proc); extern long ARMCI_GetValueLong(void *src, int proc); extern float ARMCI_GetValueFloat(void *src, int proc); extern double ARMCI_GetValueDouble(void *src, int proc); extern int ARMCI_Malloc(void* ptr_arr[], armci_size_t bytes); extern int ARMCI_Free(void *ptr); extern void* ARMCI_Malloc_local(armci_size_t bytes); extern int ARMCI_Free_local(void *ptr); extern int ARMCI_Same_node(int proc); extern void ARMCI_Finalize(); /* terminate ARMCI */ extern void ARMCI_Error(char *msg, int code); extern void ARMCI_Fence(int proc); extern void ARMCI_DoFence(int proc); extern void ARMCI_AllFence(void); extern int ARMCI_Rmw(int op, void *ploc, void *prem, int extra, int proc); extern void ARMCI_Cleanup(void); extern int ARMCI_Create_mutexes(int num); extern int ARMCI_Destroy_mutexes(void); extern void ARMCI_Lock(int mutex, int proc); extern void ARMCI_Unlock(int mutex, int proc); extern void ARMCI_Set_shm_limit(unsigned long shmemlimit); extern int ARMCI_Uses_shm(); extern void ARMCI_Copy(void *src, void *dst, int n); #define FAIL -1 #define FAIL2 -2 #define FAIL3 -3 #define FAIL4 -4 #define FAIL5 -5 #define FAIL6 -6 #define FAIL7 -7 #define FAIL8 -8 #define ARMCI_SWAP 10 #define ARMCI_SWAP_LONG 11 #define ARMCI_FETCH_AND_ADD 12 #define ARMCI_FETCH_AND_ADD_LONG 13 #define ARMCI_ACC_OFF 36 #define ARMCI_ACC_INT (ARMCI_ACC_OFF + 1) #define ARMCI_ACC_DBL (ARMCI_ACC_OFF + 2) #define ARMCI_ACC_FLT (ARMCI_ACC_OFF + 3) #define ARMCI_ACC_CPL (ARMCI_ACC_OFF + 4) #define ARMCI_ACC_DCP (ARMCI_ACC_OFF + 5) #define ARMCI_ACC_LNG (ARMCI_ACC_OFF + 6) #define ARMCI_ACC_RA (ARMCI_ACC_OFF + 7) #define ARMCI_MAX_STRIDE_LEVEL 8 #ifdef BGML #define ARMCI_CRITICAL_SECTION_ENTER() BGML_CriticalSection_enter(); #define ARMCI_CRITICAL_SECTION_EXIT() BGML_CriticalSection_exit(); #else #define ARMCI_CRITICAL_SECTION_ENTER() #define ARMCI_CRITICAL_SECTION_EXIT() #endif /************ locality information **********************************************/ typedef int armci_domain_t; #define ARMCI_DOMAIN_SMP 0 /* SMP node domain for armci_domain_XXX calls */ extern int armci_domain_nprocs(armci_domain_t domain, int id); extern int armci_domain_id(armci_domain_t domain, int glob_proc_id); extern int armci_domain_glob_proc_id(armci_domain_t domain, int id, int loc_proc_id); extern int armci_domain_my_id(armci_domain_t domain); extern int armci_domain_count(armci_domain_t domain); extern int armci_domain_same_id(armci_domain_t domain, int proc); extern int armci_smp_master(int); /* PVM group * On CrayT3E: the default group is the global group which is (char *)NULL * It is the only working group. * On Workstations: the default group is "mp_working_group". User can set * the group name by calling the ARMCI_PVM_init (defined * in message.c) and passing the group name to the library. */ extern char *mp_group_name; /*********************stuff for non-blocking API******************************/ /*\ the request structure for non-blocking api. \*/ typedef struct{ #ifdef BGML int data[4]; /* tag, bufid, agg_flag, op, proc */ double dummy[72]; /* bg1s_t, count, extra */ #else int data[4]; #if defined(_AIX) # if defined(__64BIT__) double dummy[27]; /*lapi_cntr_t is 200 bytes, using 216 just to be safe*/ # else double dummy[24]; /*lapi_cntr_t is 148 bytes, using 166 just to be safe*/ # endif #elif defined(ALLOW_PIN) void *dummy[2];/*2 cause itshould be aligned after we cast hdl_t to ihdl_t*/ #else double dummy; #endif #endif } armci_hdl_t; #define armci_req_t armci_hdl_t typedef int ARMCI_Group; extern void ARMCI_Group_create(int n, int *pid_list, ARMCI_Group *group_out); extern void ARMCI_Group_create_child(int n, int *pid_list, ARMCI_Group *group_out, ARMCI_Group *group_parent); extern void ARMCI_Group_free(ARMCI_Group *group); extern int ARMCI_Group_rank(ARMCI_Group *group, int *rank); extern void ARMCI_Group_size(ARMCI_Group *group, int *size); extern void ARMCI_Group_set_default(ARMCI_Group *group); extern void ARMCI_Group_get_default(ARMCI_Group *group_out); extern void ARMCI_Group_get_world(ARMCI_Group *group_out); extern int ARMCI_Malloc_group(void *ptr_arr[], armci_size_t bytes,ARMCI_Group *group); extern int ARMCI_Free_group(void *ptr, ARMCI_Group *group); extern int ARMCI_NbPut(void *src, void* dst, int bytes, int proc,armci_hdl_t* nb_handle); extern int ARMCI_NbPutS( /* strided put */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbAccS( /* strided accumulate */ int optype, /* operation */ void *scale, /* scale factor x += scale*y */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbGet(void *src, void* dst, int bytes, int proc,armci_hdl_t* nb_handle); extern int ARMCI_NbGetS( /* strided get */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handler/*armci_non-blocking request handle*/ ); extern int ARMCI_NbGetV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbPutV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbAccV( int op, /* operation code */ void *scale, /* scaling factor for accumulate */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbPutValueInt(int src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc, /* remote process (or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle */ ); extern int ARMCI_NbPutValueLong(long src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc, /* remote process (or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle */ ); extern int ARMCI_NbPutValueFloat(float src,/* value in a register to put */ void *dst,/* dest starting addr to put data */ int proc, /* remote process (or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle */ ); extern int ARMCI_NbPutValueDouble(double src,/* value in a register to put */ void *dst,/* dest starting addr to put data*/ int proc, /* remote process (or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle */ ); extern int ARMCI_Wait(armci_hdl_t* nb_handle); /*non-blocking request handle*/ extern int ARMCI_Test(armci_hdl_t* nb_handle); /*non-blocking request handle*/ extern int ARMCI_WaitAll (void); extern int ARMCI_WaitProc (int proc); extern void ARMCI_SET_AGGREGATE_HANDLE(armci_hdl_t* nb_handle); extern void ARMCI_UNSET_AGGREGATE_HANDLE(armci_hdl_t* nb_handle); #define ARMCI_INIT_HANDLE(hdl) do {((double *)((hdl)->data))[0]=0; \ ((double *)((hdl)->data))[1]=0; }while(0) /* -------------- ARMCI Non-collective memory allocator ------------- */ typedef struct armci_meminfo_ds { char * armci_addr; /* remote address of the creator which can be used in ARMCI communication */ char *addr; /* local address of creator which can be used in to set SMP memoffset, armci_set_mem_offset() */ size_t size; /* size of remote pid's segment (bytes) */ int cpid; /* armci pid of creator */ long idlist[64]; } armci_meminfo_t; extern void ARMCI_Memget(size_t bytes, armci_meminfo_t *meminfo, int memflg); extern void* ARMCI_Memat(armci_meminfo_t *meminfo, long offset); extern void ARMCI_Memdt(armci_meminfo_t *meminfo, long offset); extern void ARMCI_Memctl(armci_meminfo_t *meminfo); /* ------------------- ARMCI Checkpointing/Recovery ----------------- */ #ifdef DO_CKPT #define ARMCI_CKPT 0 #define ARMCI_RESTART 1 typedef struct { void **ptr_arr; size_t *sz; int *saveonce; int count; }armci_ckpt_ds_t; void ARMCI_Ckpt_create_ds(armci_ckpt_ds_t *ckptds, int count); int ARMCI_Ckpt_init(char *filename, ARMCI_Group *grp, int savestack, int saveheap, armci_ckpt_ds_t *ckptds); int ARMCI_Ckpt(int rid); void ARMCI_Ckpt_finalize(int rid); #define ARMCI_Restart_simulate armci_irecover # ifdef MPI ARMCI_Group * ARMCI_Get_ft_group(); # endif #endif /* ------------------------------------------------------------------ */ #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* _ARMCI_H */ ga-5-3/armci/src-portals/caccumulate.c0000640005473000001440000006037011645616370016611 0ustar d3n000users/*************************************************************************** COPYRIGHT The following is a notice of limited availability of the code, and disclaimer which must be included in the prologue of the code and in all source listings of the code. Copyright Notice + 2009 University of Chicago Permission is hereby granted to use, reproduce, prepare derivative works, and to redistribute to others. This software was authored by: Jeff R. Hammond Leadership Computing Facility Argonne National Laboratory Argonne IL 60439 USA phone: (630) 252-5381 e-mail: jhammond@anl.gov GOVERNMENT LICENSE Portions of this material resulted from work developed under a U.S. Government Contract and are subject to the following license: the Government is granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable worldwide license in this computer software to reproduce, prepare derivative works, and perform publicly and display publicly. DISCLAIMER This computer code material was prepared, in part, as an account of work sponsored by an agency of the United States Government. Neither the United States, nor the University of Chicago, nor any of their employees, makes any warranty express or implied, or assumes any legal liability or responsibility for the accuracy, completeness, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use would not infringe privately owned rights. ***************************************************************************/ /*********************************************************************** * accumulate operation for the following datatypes: * real, double precision, complex, double complex, integer * * WARNING: This file must be compiled WITH optimization under AIX. * IBM fortran compilers generate bad code with -g option. * * Two versions of each routine are provided: * original and unrolled loops. * ***********************************************************************/ #if HAVE_CONFIG_H # include "config.h" #endif #include "acc.h" #if 0 subroutine d_accumulate_1d(alpha, A, B, rows) integer rows, r double precision A(*), B(*), alpha ccdir$ no_cache_alloc a,b do r = 1, rows A(r) = A(r)+ alpha*B(r) enddo end #endif void c_d_accumulate_1d_(const double* const restrict alpha, double* restrict A, const double* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i] += (*alpha) * B[i]; } return; } #if 0 subroutine d_accumulate_2d(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double precision A(ald,*), B(bld,*), alpha ccdir$ no_cache_alloc a,b do c = 1, cols do r = 1, rows A(r,c) = A(r,c)+ alpha*B(r,c) enddo enddo end #endif void c_d_accumulate_2d_(const double* const alpha, const int* const rows, const int* const cols, double* restrict A, const int* const ald, const double* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 subroutine f_accumulate_1d(alpha, A, B, rows) integer rows, r real A(*), B(*), alpha do r = 1, rows A(r) = A(r)+ alpha*B(r) enddo end #endif void c_f_accumulate_1d_(const float* const restrict alpha, float* const restrict A, const float* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i] += (*alpha) * B[i]; } return; } #if 0 subroutine f_accumulate_2d(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld real A(ald,*), B(bld,*), alpha do c = 1, cols do r = 1, rows A(r,c) = A(r,c)+ alpha*B(r,c) enddo enddo end #endif void c_f_accumulate_2d_(const float* const alpha, const int* const rows, const int* const cols, float* restrict A, const int* const ald, const float* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 subroutine z_accumulate_1d(alpha, A, B, rows) integer rows, r double complex A(*), B(*), alpha do r = 1, rows A(r) = A(r)+ alpha*B(r) enddo end #endif void c_c_accumulate_1d_(const complex_t* const restrict alpha, complex_t* const restrict A, const complex_t* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i].real += (*alpha).real * B[i].real - (*alpha).imag * B[i].imag; A[i].imag += (*alpha).imag * B[i].real + (*alpha).real * B[i].imag; } return; } #if 0 subroutine z_accumulate_2d(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double complex A(ald,*), B(bld,*), alpha do c = 1, cols do r = 1, rows A(r,c) = A(r,c)+ alpha*B(r,c) enddo enddo end #endif void c_c_accumulate_2d_(const complex_t* const alpha, const int* const rows, const int* const cols, complex_t* restrict A, const int* const ald, const complex_t* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ) { for ( r = 0 ; r < (*rows) ; r++ ) { A[ c * (*ald) + r ].real += (*alpha).real * B[ c * (*bld) + r ].real - (*alpha).imag * B[ c * (*bld) + r ].imag; A[ c * (*ald) + r ].imag += (*alpha).imag * B[ c * (*bld) + r ].real + (*alpha).real * B[ c * (*bld) + r ].imag; } } return; } #if 0 subroutine c_accumulate_1d(alpha, A, B, rows) integer rows, r complex A(*), B(*), alpha do r = 1, rows A(r) = A(r)+ alpha*B(r) enddo end #endif void c_z_accumulate_1d_(const dcomplex_t* const restrict alpha, dcomplex_t* const restrict A, const dcomplex_t* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i].real += (*alpha).real * B[i].real - (*alpha).imag * B[i].imag; A[i].imag += (*alpha).imag * B[i].real + (*alpha).real * B[i].imag; } return; } #if 0 subroutine c_accumulate_2d(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld complex A(ald,*), B(bld,*), alpha do c = 1, cols do r = 1, rows A(r,c) = A(r,c)+ alpha*B(r,c) enddo enddo end #endif void c_z_accumulate_2d_(const dcomplex_t* const alpha, const int* const rows, const int* const cols, dcomplex_t* restrict A, const int* const ald, const dcomplex_t* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ) { for ( r = 0 ; r < (*rows) ; r++ ) { A[ c * (*ald) + r ].real += (*alpha).real * B[ c * (*bld) + r ].real - (*alpha).imag * B[ c * (*bld) + r ].imag; A[ c * (*ald) + r ].imag += (*alpha).imag * B[ c * (*bld) + r ].real + (*alpha).real * B[ c * (*bld) + r ].imag; } } return; } #if 0 subroutine i_accumulate_2d(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld integer A(ald,*), B(bld,*), alpha do c = 1, cols do r = 1, rows A(r,c) = A(r,c)+ alpha*B(r,c) enddo enddo end #endif void c_i_accumulate_1d_(const int* const restrict alpha, int* const restrict A, const int* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i] += (*alpha) * B[i]; } return; } void c_l_accumulate_1d_(const long* const restrict alpha, long* const restrict A, const long* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i] += (*alpha) * B[i]; } return; } void c_ll_accumulate_1d_(const long long* const restrict alpha, long long* const restrict A, const long long* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i] += (*alpha) * B[i]; } return; } #if 0 subroutine i_accumulate_1d(alpha, A, B, rows) integer rows, r integer A(*), B(*), alpha do r = 1, rows A(r) = A(r)+ alpha*B(r) enddo end #endif void c_i_accumulate_2d_(const int* const alpha, const int* const rows, const int* const cols, int* restrict A, const int* const ald, const int* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } void c_l_accumulate_2d_(const long* const alpha, const int* const rows, const int* const cols, long* restrict A, const int* const ald, const long* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } void c_ll_accumulate_2d_(const long long* const alpha, const int* const rows, const int* const cols, long long* restrict A, const int* const ald, const long long* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 subroutine d_accumulate_2d_u(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double precision A(ald,*), B(bld,*), alpha integer r1 doubleprecision d1, d2, d3, d4 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 a(r,c) = a(r,c) + alpha*b(r,c) end do do r = r1 + 1, rows, 4 d1 = a(r,c) + alpha*b(r,c) d2 = a(r+1,c) + alpha*b(r+1,c) d3 = a(r+2,c) + alpha*b(r+2,c) d4 = a(r+3,c) + alpha*b(r+3,c) a(r,c) = d1 a(r+1,c) = d2 a(r+2,c) = d3 a(r+3,c) = d4 enddo enddo end #endif void c_d_accumulate_2d_u_(const double* const alpha, const int* const rows, const int* const cols, double* restrict A, const int* const ald, const double* const B, const int* const bld) { int r, c; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; A[ c * (*ald) + r+1 ] += (*alpha) * B[ c * (*bld) + r+1 ]; A[ c * (*ald) + r+2 ] += (*alpha) * B[ c * (*bld) + r+2 ]; A[ c * (*ald) + r+3 ] += (*alpha) * B[ c * (*bld) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 subroutine f_accumulate_2d_u(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld real A(ald,*), B(bld,*), alpha integer r1 real d1, d2, d3, d4 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 a(r,c) = a(r,c) + alpha*b(r,c) end do do r = r1 + 1, rows, 4 d1 = a(r,c) + alpha*b(r,c) d2 = a(r+1,c) + alpha*b(r+1,c) d3 = a(r+2,c) + alpha*b(r+2,c) d4 = a(r+3,c) + alpha*b(r+3,c) a(r,c) = d1 a(r+1,c) = d2 a(r+2,c) = d3 a(r+3,c) = d4 enddo enddo end #endif void c_f_accumulate_2d_u_(const float* const alpha, const int* const rows, const int* const cols, float* restrict A, const int* const ald, const float* const B, const int* const bld) { int r, c; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; A[ c * (*ald) + r+1 ] += (*alpha) * B[ c * (*bld) + r+1 ]; A[ c * (*ald) + r+2 ] += (*alpha) * B[ c * (*bld) + r+2 ]; A[ c * (*ald) + r+3 ] += (*alpha) * B[ c * (*bld) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 subroutine z_accumulate_2d_u(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double complex A(ald,*), B(bld,*), alpha integer r1 double complex x1, x2, x3, x4 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 a(r,c) = a(r,c) + alpha*b(r,c) end do do r = r1 + 1, rows, 4 x1 = a(r,c) + alpha*b(r,c) x2 = a(r+1,c) + alpha*b(r+1,c) x3 = a(r+2,c) + alpha*b(r+2,c) x4 = a(r+3,c) + alpha*b(r+3,c) a(r,c) = x1 a(r+1,c) = x2 a(r+2,c) = x3 a(r+3,c) = x4 enddo enddo end #endif void c_c_accumulate_2d_u_(const complex_t* const alpha, const int* const rows, const int* const cols, complex_t* restrict A, const int* const ald, const complex_t* const B, const int* const bld) { int r, c; int jA, jB; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ jA = c * (*ald) + r; jB = c * (*bld) + r; A[ jA ].real += (*alpha).real * B[ jB ].real - (*alpha).imag * B[ jB ].imag; A[ jA ].imag += (*alpha).imag * B[ jB ].real + (*alpha).real * B[ jB ].imag; A[ jA+1 ].real += (*alpha).real * B[ jB+1 ].real - (*alpha).imag * B[ jB+1 ].imag; A[ jA+1 ].imag += (*alpha).imag * B[ jB+1 ].real + (*alpha).real * B[ jB+1 ].imag; A[ jA+2 ].real += (*alpha).real * B[ jB+2 ].real - (*alpha).imag * B[ jB+2 ].imag; A[ jA+2 ].imag += (*alpha).imag * B[ jB+2 ].real + (*alpha).real * B[ jB+2 ].imag; A[ jA+3 ].real += (*alpha).real * B[ jB+3 ].real - (*alpha).imag * B[ jB+3 ].imag; A[ jA+3 ].imag += (*alpha).imag * B[ jB+3 ].real + (*alpha).real * B[ jB+3 ].imag; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ].real += (*alpha).real * B[ c * (*bld) + r ].real - (*alpha).imag * B[ c * (*bld) + r ].imag; A[ c * (*ald) + r ].imag += (*alpha).imag * B[ c * (*bld) + r ].real + (*alpha).real * B[ c * (*bld) + r ].imag; } } return; } #if 0 subroutine c_accumulate_2d_u(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld complex A(ald,*), B(bld,*), alpha integer r1 complex x1, x2, x3, x4 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 a(r,c) = a(r,c) + alpha*b(r,c) end do do r = r1 + 1, rows, 4 x1 = a(r,c) + alpha*b(r,c) x2 = a(r+1,c) + alpha*b(r+1,c) x3 = a(r+2,c) + alpha*b(r+2,c) x4 = a(r+3,c) + alpha*b(r+3,c) a(r,c) = x1 a(r+1,c) = x2 a(r+2,c) = x3 a(r+3,c) = x4 enddo enddo end #endif void c_z_accumulate_2d_u_(const dcomplex_t* const alpha, const int* const rows, const int* const cols, dcomplex_t* restrict A, const int* const ald, const dcomplex_t* const B, const int* const bld) { int r, c; int jA, jB; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ jA = c * (*ald) + r; jB = c * (*bld) + r; A[ jA ].real += (*alpha).real * B[ jB ].real - (*alpha).imag * B[ jB ].imag; A[ jA ].imag += (*alpha).imag * B[ jB ].real + (*alpha).real * B[ jB ].imag; A[ jA+1 ].real += (*alpha).real * B[ jB+1 ].real - (*alpha).imag * B[ jB+1 ].imag; A[ jA+1 ].imag += (*alpha).imag * B[ jB+1 ].real + (*alpha).real * B[ jB+1 ].imag; A[ jA+2 ].real += (*alpha).real * B[ jB+2 ].real - (*alpha).imag * B[ jB+2 ].imag; A[ jA+2 ].imag += (*alpha).imag * B[ jB+2 ].real + (*alpha).real * B[ jB+2 ].imag; A[ jA+3 ].real += (*alpha).real * B[ jB+3 ].real - (*alpha).imag * B[ jB+3 ].imag; A[ jA+3 ].imag += (*alpha).imag * B[ jB+3 ].real + (*alpha).real * B[ jB+3 ].imag; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ].real += (*alpha).real * B[ c * (*bld) + r ].real - (*alpha).imag * B[ c * (*bld) + r ].imag; A[ c * (*ald) + r ].imag += (*alpha).imag * B[ c * (*bld) + r ].real + (*alpha).real * B[ c * (*bld) + r ].imag; } } return; } #if 0 subroutine i_accumulate_2d_u(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld integer A(ald,*), B(bld,*), alpha integer r1, j2, j3, j4, j5 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 a(r,c) = a(r,c) + alpha*b(r,c) end do do r = r1 + 1, rows, 4 j2 = a(r,c) + alpha*b(r,c) j3 = a(r+1,c) + alpha*b(r+1,c) j4 = a(r+2,c) + alpha*b(r+2,c) j5 = a(r+3,c) + alpha*b(r+3,c) a(r,c) = j2 a(r+1,c) = j3 a(r+2,c) = j4 a(r+3,c) = j5 enddo enddo end #endif void c_i_accumulate_2d_u_(const int* const alpha, const int* const rows, const int* const cols, int* restrict A, const int* const ald, const int* const B, const int* const bld) { int r, c; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; A[ c * (*ald) + r+1 ] += (*alpha) * B[ c * (*bld) + r+1 ]; A[ c * (*ald) + r+2 ] += (*alpha) * B[ c * (*bld) + r+2 ]; A[ c * (*ald) + r+3 ] += (*alpha) * B[ c * (*bld) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } void c_l_accumulate_2d_u_(const long* const alpha, const int* const rows, const int* const cols, long* restrict A, const int* const ald, const long* const B, const int* const bld) { int r, c; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; A[ c * (*ald) + r+1 ] += (*alpha) * B[ c * (*bld) + r+1 ]; A[ c * (*ald) + r+2 ] += (*alpha) * B[ c * (*bld) + r+2 ]; A[ c * (*ald) + r+3 ] += (*alpha) * B[ c * (*bld) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } void c_ll_accumulate_2d_u_(const long long* const alpha, const int* const rows, const int* const cols, long long* restrict A, const int* const ald, const long long* const B, const int* const bld) { int r, c; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; A[ c * (*ald) + r+1 ] += (*alpha) * B[ c * (*bld) + r+1 ]; A[ c * (*ald) + r+2 ] += (*alpha) * B[ c * (*bld) + r+2 ]; A[ c * (*ald) + r+3 ] += (*alpha) * B[ c * (*bld) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 c---------- operations used in armci gops -------------- c subroutine fort_dadd(n, x, work) integer n,i double precision x(n), work(n) do i= 1,n x(i) = x(i) + work(i) enddo end #endif void c_dadd_(const int* const restrict n, double* const restrict x, const double* const restrict work) { int i; for ( i = 0 ; i < (*n) ; i++ ){ x[i] += work[i]; } return; } #if 0 subroutine fort_dadd2(n, x, work, work2) integer n,i double precision x(n), work(n), work2(n) do i= 1,n x(i) = work(i) + work2(i) enddo end #endif void c_dadd2_(const int* const restrict n, double* const restrict x, const double* const restrict work, const double* const restrict work2) { int i; for ( i = 0 ; i < (*n) ; i++ ){ x[i] = work[i] + work2[i]; } return; } #if 0 subroutine fort_dmult(n, x, work) integer n,i double precision x(n), work(n) do i= 1,n x(i) = x(i) * work(i) enddo end #endif void c_dmult_(const int* const restrict n, double* const restrict x, const double* const restrict work) { int i; for ( i = 0 ; i < (*n) ; i++ ){ x[i] *= work[i]; } return; } #if 0 subroutine fort_dmult2(n, x, work,work2) integer n,i double precision x(n), work(n) do i= 1,n x(i) = work(i)*work2(i) enddo end #endif void c_dmult2_(const int* const restrict n, double* const restrict x, const double* const restrict work, const double* const restrict work2) { int i; for ( i = 0 ; i < (*n) ; i++ ){ x[i] = work[i] * work2[i]; } return; } // specific to src-portals && to src-gemini void RA_ACCUMULATE_2D_(long* alpha, int* rows, int* cols, long* a, int* lda, long* b, int* ldb) { int i,j; for(j=0;j< *cols; j++){ long *aa = a + j* *lda; long *bb = b + j* *ldb; for(i=0;i< *rows; i++) aa[i] ^= bb[i]; } } ga-5-3/armci/src-portals/sockets.h0000640005473000001440000000321211300316052015751 0ustar d3n000users#ifndef SOCKETS_H_ #define SOCKETS_H_ #include "armci.h" #ifndef WIN32 #define USE_SOCKET_VECTOR_API #endif #if defined(USE_SOCKET_VECTOR_API) # include #endif extern int tcp_sendrcv_bufsize; extern int armci_PollSocket(int sock); extern int armci_WaitSock(int *socklist, int num, int *ready); extern int armci_ReadFromSocket(int sock, void* buffer, int lenbuf); extern int armci_WriteToSocket (int sock, void* buffer, int lenbuf); #if defined(USE_SOCKET_VECTOR_API) extern int armci_RecvStridedFromSocket(int sock,void* buffer,int *str_arr,int *cnt,int str_level,struct iovec *iov); extern int armci_SendStridedToSocket(int sock,void* buffer,int *str_arr,int *cnt,int str_level,struct iovec *iov); extern int armci_RecvVectorFromSocket(int sock,armci_giov_t darr[], int len,struct iovec *iov); extern int armci_SendVectorToSocket(int sock,armci_giov_t darr[], int len,struct iovec *iov); extern int armci_ReadVFromSocket(int sock,struct iovec *iov, int iovlength, int totalsize); extern int armci_WriteVToSocket (int sock,struct iovec *iov, int iovlength, int totalsize); #endif extern void armci_ListenSockAll(int* socklist, int num); extern void armci_AcceptSockAll(int* socklist, int num); extern int armci_CreateSocketAndConnect(char *hostname, int port); extern void armci_ShutdownAll(int socklist[], int num); extern void armci_CreateSocketAndBind(int *sock, int *port); #define PACKET_SIZE tcp_sendrcv_bufsize #define TIMEOUT_ACCEPT 60 #define GET_SEND_BUFFER _armci_buf_get_clear_busy #define FREE_SEND_BUFFER _armci_buf_release #ifndef UIO_MAXIOV #define MAX_IOVEC 8 #else #define MAX_IOVEC (UIO_MAXIOV>100?100:UIO_MAXIOV) #endif #endif ga-5-3/armci/src-portals/acc.c0000640005473000001440000000742311373335651015047 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: acc.c,v 1.13 2006-09-13 23:43:36 andriy Exp $ */ #if defined(__crayx1) #define MAYBE_RESTRICT restrict #else #define MAYBE_RESTRICT #endif void L_ACCUMULATE_2D(long* MAYBE_RESTRICT alpha, int* MAYBE_RESTRICT rows, int* MAYBE_RESTRICT cols, long* MAYBE_RESTRICT a, int* MAYBE_RESTRICT lda, long* MAYBE_RESTRICT b, int* MAYBE_RESTRICT ldb) { int i,j; #ifdef __crayx1 #pragma _CRI concurrent #endif for(j=0;j< *cols; j++){ long * MAYBE_RESTRICT aa = a + j* *lda; long * MAYBE_RESTRICT bb = b + j* *ldb; for(i=0;i< *rows; i++) aa[i] += *alpha * bb[i]; } } void L_ACCUMULATE_1D(long * MAYBE_RESTRICT alpha, long * MAYBE_RESTRICT a, long * MAYBE_RESTRICT b, int * MAYBE_RESTRICT rows) { int i; for(i=0;i< *rows; i++) a[i] += *alpha * b[i]; } #if defined(CRAY_T3E) || defined(CATAMOUNT) void F_ACCUMULATE_2D_(float* alpha, int* rows, int* cols, float* a, int* lda, float* b, int* ldb) { int i,j; for(j=0;j< *cols; j++){ float *aa = a + j* *lda; float *bb = b + j* *ldb; for(i=0;i< *rows; i++) aa[i] += *alpha * bb[i]; } } #endif void RA_ACCUMULATE_2D_(long* alpha, int* rows, int* cols, long* a, int* lda, long* b, int* ldb) { int i,j; for(j=0;j< *cols; j++){ long *aa = a + j* *lda; long *bb = b + j* *ldb; for(i=0;i< *rows; i++) aa[i] ^= bb[i]; } } #if NOFORT typedef struct { float imag; float real; } cmpl_t; typedef struct { double imag; double real; } dcmpl_t; void I_ACCUMULATE_2D(int* alpha, int* rows, int* cols, int* a, int* lda, int* b, int* ldb) { int i,j; for(j=0;j< *cols; j++){ int *aa = a + j* *lda; int *bb = b + j* *ldb; for(i=0;i< *rows; i++) aa[i] += *alpha * bb[i]; } } #if !defined(CRAY_T3E) && !defined(CATAMOUNT) void F_ACCUMULATE_2D(float* alpha, int* rows, int* cols, float* a, int* lda, float* b, int* ldb) { int i,j; for(j=0;j< *cols; j++){ float *aa = a + j* *lda; float *bb = b + j* *ldb; for(i=0;i< *rows; i++) aa[i] += *alpha * bb[i]; } } #endif void D_ACCUMULATE_2D(double* alpha, int* rows, int* cols, double* a, int* lda, double* b, int* ldb) { int i,j; for(j=0;j< *cols; j++){ double *aa = a + j* *lda; double *bb = b + j* *ldb; for(i=0;i< *rows; i++) aa[i] += *alpha * bb[i]; } } void C_ACCUMULATE_2D(cmpl_t* alpha, int* rows, int* cols, cmpl_t* a, int* lda, cmpl_t* b, int* ldb) { int i,j; for(j=0;j< *cols; j++){ cmpl_t *aa = a + j* *lda; cmpl_t *bb = b + j* *ldb; for(i=0;i< *rows; i++){ aa[i].real += alpha->real * bb[i].real - alpha->imag * bb[i].imag; aa[i].imag += alpha->imag * bb[i].real + alpha->real * bb[i].imag; } } } void Z_ACCUMULATE_2D(dcmpl_t* alpha, int* rows, int* cols, dcmpl_t* a, int* lda, dcmpl_t* b, int* ldb) { int i,j; for(j=0;j< *cols; j++){ dcmpl_t *aa = a + j* *lda; dcmpl_t *bb = b + j* *ldb; for(i=0;i< *rows; i++){ aa[i].real += alpha->real * bb[i].real - alpha->imag * bb[i].imag; aa[i].imag += alpha->imag * bb[i].real + alpha->real * bb[i].imag; } } } void FORT_DADD(int *n, double *x, double *work){ int i; for(i=0;i<*n;i++) x[i] = x[i] + work[i]; } void FORT_DADD2(int *n, double *x, double *work, double *work2){ int i; for(i=0;i<*n;i++) x[i] = work[i] + work2[i]; } void FORT_DMULT(int *n, double *x, double *work){ int i; for(i=0;i<*n;i++) x[i] = x[i]*work[i]; } void FORT_DMULT2(int *n, double *x, double *work, double *work2){ int i; for(i=0;i<*n;i++) x[i] = work[i]*work2[i]; } #endif ga-5-3/armci/src-portals/semaphores.h0000640005473000001440000000231411701667223016464 0ustar d3n000users#ifndef _SEMAPHORES_H_ #define _SEMAPHORES_H_ #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_IPC_H # include #endif #if HAVE_SYS_SEM_H # include #endif #if !HAVE_UNION_SEMUN union semun { int val; /* value for SETVAL */ struct semid_ds *buf; /* buffer for IPC_STAT, IPC_SET */ unsigned short int *array; /* array for GETALL, SETALL */ struct seminfo *__buf; /* buffer for IPC_INFO */ }; #endif /* how many semaphores are available ? */ #ifndef SEMMSL # ifdef AIX # define SEMMSL 8094 # else # define SEMMSL 16 # endif #endif /* on HPUX 10.2 SEMMSL is much bigger than realistically we can allocate */ #ifdef HPUX #undef SEMMSL #define SEMMSL 64 #endif extern struct sembuf sops; extern int semaphoreID; int semop(); #define ALL_SEMS -1 #define _P_code -1 #define _V_code 1 #define P_semaphore(s) \ {\ sops.sem_num = (s);\ sops.sem_op = _P_code;\ sops.sem_flg = 0; \ semop(semaphoreID,&sops,1);\ } #define V_semaphore(s) \ {\ sops.sem_num = (s);\ sops.sem_op = _V_code;\ sops.sem_flg = 0; \ semop(semaphoreID,&sops,1);\ } typedef int lockset_t; #endif ga-5-3/armci/src-portals/bufalloc.c0000640005473000001440000002610411300316052016065 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: bufalloc.c,v 1.2 2001-06-07 23:23:23 d3h325 Exp $ * storage manager for a chunk of memory passed by user in armci_init_buf_alloc * derived from K&R that manages a chunk of memory */ #include #define USAGE_ extern char *buf_allocate(); /* Used to get memory from the system */ extern void armci_die(); #define VALID1 0xaaaaaaaa /* For validity check on headers */ #define VALID2 0x55555555 #define LOG_ALIGN 6 #define ALIGNMENT (1 << LOG_ALIGN) #define DEFAULT_NALLOC (1024 - ALIGNMENT) #ifdef USAGE static struct shmalloc_struct { size_t total; /* Amount request from system in units */ long nchunk; /* No. of chunks of system memory */ long inuse; /* Amount in use in units */ long maxuse; /* Maximum value of inuse */ long nfrags; /* No. of fragments divided into */ long nmcalls; /* No. of calls to shmalloc */ long nfcalls; /* No. of calls to buf_free */ } usage; #endif union header{ struct { unsigned valid1; /* Token to check if is not overwritten */ union header *ptr; /* next block if on free list */ size_t size; /* size of this block*/ unsigned valid2; /* Another token acting as a guard */ } s; char align[ALIGNMENT]; /* Align to ALIGNMENT byte boundary */ }; typedef union header Header; static Header base; /* empty list to get started */ static Header *freep = NULL; /* start of free list */ static Header *usedp = NULL; /* start of used list */ static size_t nalloc = DEFAULT_NALLOC; static size_t max_nalloc = DEFAULT_NALLOC; static int do_verify = 0; /* Flag for automatic heap verification */ static int initialized=0; static void buf_error(char* s, unsigned long i) { void buf_alloc_print_stats(); fflush(stdout); fprintf(stderr,"buf_alloc error: %s %ld(0x%lx)\n", s, i, i); fflush(stderr); #ifdef USAGE buf_alloc_print_stats(); #endif armci_die("buf_alloc: fatal error", i); } void armci_buf_alloc_request(size_t size, size_t maxsize) { nalloc = (size+ALIGNMENT-1) >> LOG_ALIGN; max_nalloc = (maxsize+ALIGNMENT-1) >> LOG_ALIGN; } void armci_buf_alloc_debug(int code) { do_verify = code; } void armci_buf_alloc_verify() { Header *p; if ( freep ) { /* Check the used list */ for (p=usedp; p; p=p->s.ptr) { if (p->s.valid1 != VALID1 || p->s.valid2 != VALID2) buf_error("invalid header on usedlist", (unsigned long) p->s.valid1); #ifdef USAGE if (p->s.size > usage.total) buf_error("invalid size in header usedlist",(unsigned long)p->s.size); #endif } /* Check the free list */ p = base.s.ptr; while (p != &base) { if (p->s.valid1 != VALID1 || p->s.valid2 != VALID2) buf_error("invalid header on freelist", (unsigned long) p->s.valid1); #ifdef USAGE if (p->s.size > usage.total) buf_error("invalid size in header freelist",(unsigned long)p->s.size); #endif p = p->s.ptr; } } /* end if */ } static void addtofree(char* ap) { Header *bp, *p, **up; #ifdef USAGE usage.nfcalls++; #endif if (do_verify) armci_buf_alloc_verify(); /* only do something if pointer is not NULL */ if ( ap ) { bp = (Header *) ap - 1; /* Point to block header */ if (bp->s.valid1 != VALID1 || bp->s.valid2 != VALID2) buf_error("buf_free: pointer not from buf_alloc", (unsigned long) ap); #ifdef USAGE usage.inuse -= bp->s.size; /* Decrement memory usage */ #endif /* Extract the block from the used linked list ... for debug only */ for (up=&usedp; ; up = &((*up)->s.ptr)) { if (!*up) buf_error("buf_free:block not found in used list\n",(unsigned long)ap); if (*up == bp) { *up = bp->s.ptr; break; } } /* Join the memory back into the free linked list */ for (p=freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; /* Freed block at start or end of arena */ if (bp + bp->s.size == p->s.ptr) {/* join to upper neighbour */ bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; #ifdef USAGE usage.nfrags--; /* Lost a fragment */ #endif } else bp->s.ptr = p->s.ptr; if (p + p->s.size == bp) { /* Join to lower neighbour */ p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; #ifdef USAGE usage.nfrags--; /* Lost a fragment */ #endif } else p->s.ptr = bp; freep = p; } /* end if on ap */ } void armci_init_buf_alloc(size_t len, void* buffer) { char *cp; Header *up, *prevp; size_t nu; /* need to initialize the free list */ if (sizeof(Header) != ALIGNMENT) buf_error("Alignment is not valid", (unsigned long) ALIGNMENT); if(initialized)armci_die("armci_init_buf_alloc: already initialized",0); #ifdef USAGE usage.total = 0; /* Initialize statistics */ usage.nchunk = 0; usage.inuse = 0; usage.nfrags = 0; usage.maxuse = 0; usage.nmcalls= 0; usage.nfcalls= 0; #endif base.s.ptr = freep = prevp = &base; /* Initialize linked list */ base.s.size = 0; base.s.valid1 = VALID1; base.s.valid2 = VALID2; nu = len/sizeof(Header); /* nu must by a multiplicity of nalloc */ max_nalloc = nu*nalloc; if(nu<1) armci_die("buffer less than nalloc",(int)len); cp = (char*)buffer; #ifdef USAGE usage.total += nu; /* Have just got nu more units */ usage.nchunk++; /* One more chunk */ usage.nfrags++; /* Currently one more frag */ usage.inuse += nu; /* Inuse will be decremented by buf_free */ #endif up = (Header *) cp; up->s.size = nu; up->s.valid1 = VALID1; up->s.valid2 = VALID2; /* Insert into linked list of blocks in use so that buf_free works ... for debug only */ up->s.ptr = usedp; usedp = up; addtofree((char *)(up+1)); /* Try to join into the free list */ } /*\ return a chunk memory of given size \*/ char *armci_buf_alloc(size_t nbytes) { Header *p, *prevp; size_t nunits; char *return_ptr; /* need to initialize the free list */ if ((prevp = freep) == NULL) armci_die("not initialized", 0); #ifdef USAGE usage.nmcalls++; #endif if (do_verify) armci_buf_alloc_verify(); /* Rather than divide make the alignment a known power of 2 */ nunits = ((nbytes + sizeof(Header) - 1)>>LOG_ALIGN) + 1; for (p=prevp->s.ptr; ; prevp = p, p = p->s.ptr) { if (p->s.size >= nunits) { /* Big enuf */ if (p->s.size == nunits) /* exact fit */ prevp->s.ptr = p->s.ptr; else { /* allocate tail end */ p->s.size -= nunits; p += p->s.size; p->s.size = nunits; p->s.valid1 = VALID1; p->s.valid2 = VALID2; #ifdef USAGE usage.nfrags++; /* Have just increased the fragmentation */ #endif } /* Insert into linked list of blocks in use ... for debug only */ p->s.ptr = usedp; usedp = p; #ifdef USAGE usage.inuse += nunits; /* Record usage */ if (usage.inuse > usage.maxuse) usage.maxuse = usage.inuse; #endif freep = prevp; return_ptr = (char *) (p+1); break; } if (p == freep){ /* wrapped around the free list */ return_ptr = (char *) NULL; break; } } return return_ptr; } void armci_buf_free(char *ap) { Header *bp, *p, **up; #ifdef USAGE usage.nfcalls++; #endif if (do_verify) armci_buf_alloc_verify(); /* only do something if pointer is not NULL */ if ( ap ) { bp = (Header *) ap - 1; /* Point to block header */ if (bp->s.valid1 != VALID1 || bp->s.valid2 != VALID2) buf_error("buf_free: pointer not from buf_alloc", (unsigned long) ap); #ifdef USAGE usage.inuse -= bp->s.size; /* Decrement memory usage */ #endif /* Extract the block from the used linked list for debug only */ for (up=&usedp; ; up = &((*up)->s.ptr)) { if (!*up) buf_error("buf_free:block not found in used list\n",(unsigned long)ap); if (*up == bp) { *up = bp->s.ptr; break; } } /* Join the memory back into the free linked list */ for (p=freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; /* Freed block at start or end of arena */ if (bp + bp->s.size == p->s.ptr) {/* join to upper neighbour */ bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; #ifdef USAGE usage.nfrags--; /* Lost a fragment */ #endif } else bp->s.ptr = p->s.ptr; if (p + p->s.size == bp) { /* Join to lower neighbour */ p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; #ifdef USAGE usage.nfrags--; /* Lost a fragment */ #endif } else p->s.ptr = bp; freep = p; } /* end if on ap */ } #ifdef USAGE /* Return stats on buf_alloc performance. Use arg list instead of returning structure so that FORTRAN can eventually use it */ void buf_alloc_stats(size_t *total, long* nchunk, size_t * inuse, size_t * maxuse, long* nfrags, long* nmcalls,long* nfcalls) { *total = usage.total * sizeof(Header); *nchunk = usage.nchunk; *inuse = (size_t)usage.inuse * sizeof(Header); *maxuse = (size_t)usage.maxuse* sizeof(Header); *nfrags = usage.nfrags; *nmcalls= usage.nmcalls; *nfcalls= usage.nfcalls; } /* Print to standard output the usage statistics. */ void buf_alloc_print_stats() { size_t total, inuse, maxuse; long nchunk, nfrags, nmcalls, nfcalls; buf_alloc_stats(&total, &nchunk, &inuse, &maxuse, &nfrags, &nmcalls, &nfcalls); fflush(stderr); printf("\nbuf_alloc statistics\n-------------------\n\n"); printf("Total memory from system ... %ld bytes\n", (long)total); printf("Current memory usage ....... %ld bytes\n", (long)inuse); printf("Maximum memory usage ....... %ld bytes\n", (long)maxuse); printf("No. chunks from system ..... %ld\n", nchunk); printf("No. of fragments ........... %ld\n", nfrags); printf("No. of calls to buf_alloc ... %ld\n", nmcalls); printf("No. of calls to buf_free ..... %ld\n", nfcalls); printf("\n"); fflush(stdout); } #endif #if 0 void armci_die(char *str, int c) { fprintf(stderr,"%s %d\n",str,c); _exit(1); } #define LEN (16*1024) char buf[LEN]; main (int argc, char **argv) { int i,k,total=0,size=1024; char *ar[100]; armci_init_buf_alloc(LEN, buf); for(i=0; i<100; i++)ar[i]=(char*)0; for(i=0; i<100; i++){ ar[i] =armci_buf_alloc(size); if(!ar[i]){ printf("i =%d total=%d\n", i, total); buf_alloc_print_stats(); k=i; break; } total+=size; } for(i=0; i #include "armcip.h" #include "locks.h" #include "gpc.h" #define GPC_SLOTS 32 #define GPC_OFFSET -100 static void *_table[GPC_SLOTS]={ (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0}; #if (defined(LAPI) || defined(GM) || defined(VAPI) || defined(QUADRICS)) && ARMCI_ENABLE_GPC_CALLS /*\ callback functions must be registered -- user gets int handle back \*/ int ARMCI_Gpc_register( int (*func) ()) { int handle =-1, candidate = 0; PARMCI_Barrier(); do{ if(!_table[candidate]){ handle = candidate; _table[candidate]=func; } candidate++; }while(candidate < GPC_SLOTS && handle == -1); return(GPC_OFFSET-handle); } /*\ release/deassociate handle with previously registered callback function \*/ void ARMCI_Gpc_release(int handle) { int h = -handle + GPC_OFFSET; PARMCI_Barrier(); if(h<0 || h >= GPC_SLOTS) armci_die("ARMCI_Gpc_release: bad handle",h); _table[h] = (void*)0; } /*\ Send Request to Execute callback function in a global address space * Arguments: * f - handle to the callback function * p - remote processor * hdr - header data - used to pack extra args for callback (local buffer) * hlen - size of header data < ARMCI_GPC_HLEN * data - bulk data passed to callback (local buffer) * dlen - length of bulk data * rhdr - ptr to reply header (return args from callback) * rhlen - length of buffer to store reply header < ARMCI_GPC_HLEN * rdata - ptr to where reply data from callback should be stored (local buf) * rdlen - size of the buffer to store reply data * nbh - nonblocking handle * \*/ int ARMCI_Gpc_exec(int h, int p, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, void *rdata, int rdlen, gpc_hdl_t* nbh) { int hnd = -h + GPC_OFFSET; int err = 0; armci_hdl_t *ahdl = (nbh ? &(nbh->ahdl): NULL); if(hnd <0 || hnd>= GPC_SLOTS) err += fprintf(stderr, "ARMCI_Gpc_exec: bad callback handle %d: %d\n",hnd,GPC_SLOTS); if(!_table[hnd]) err += fprintf(stderr, "ARMCI_Gpc_exec: NULL function %d",hnd); if(hlen<0 || hlen>=ARMCI_Gpc_get_hlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid send header size %d %d\n", hlen, ARMCI_Gpc_get_hlen()); if(rhlen<0 || rhlen>=ARMCI_Gpc_get_hlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid recv header size %d %d\n", rhlen, ARMCI_Gpc_get_hlen()); if(dlen<0 || dlen>=ARMCI_Gpc_get_dlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid send data size %d %d\n", dlen, ARMCI_Gpc_get_dlen()); if(rdlen<0 || rdlen>=ARMCI_Gpc_get_dlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid recv data size %d %d\n", rdlen, ARMCI_Gpc_get_dlen()); if(hlen>0 && hdr==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null send header for non-zero header size %d\n", hlen); if(rhlen>0 && rhdr==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null recv header for non-zero header size %d\n", rhlen); if(dlen>0 && data==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null send data for non-zero data size %d\n", dlen); if(rdlen>0 && rdata==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null recv data for non-zero header size %d\n", rdlen); if(p<0 || p >= armci_nproc) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid target processor id %d\n", p, armci_nproc); if(err) return FAIL; if(rhlen + rdlen == 0) armci_die("Zero reply header + data length not yet supported", 0); if(nbh) nbh->proc = p; #if 1 if(SAMECLUSNODE(p) && armci_nproc==1) { int rhsize, rdsize; int (*func)(); /* fprintf(stderr, "%d:: armci gpc exec. SAMECLUSNODE\n", armci_me); */ func = _table[hnd]; if(func(p, armci_me, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, rdata, rdlen, &rdsize, GPC_INIT) != GPC_DONE) { func(p, armci_me, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, rdata, rdlen, &rdsize, GPC_WAIT); } #ifndef VAPI PARMCI_Fence(p); #endif return 0; } #endif /* fprintf(stderr, "%d:: armci gpc exec. invoking armci gpc\n", armci_me); */ return armci_gpc(h, p, hdr, hlen, data, dlen, rhdr, rhlen, rdata, rdlen, ahdl); } /* func - handle to the function executed at each process in the chain callba- handle to the callback to be executed when hdr - header data used to pack extra args for callback (local buffer) hlen - size of header data < ARMCI_GPC_HLEN data - bulk data passed to callback (local buffer) dlen - length of bulk data rhdr - ptr to reply header (return args from callback) rhlen - length of buffer to store reply header < ARMCI_GPC_HLEN rdata - ptr to where reply data from callback should be stored (local buf) rdlen - size of the buffer to store reply data idlen - number of ID's idslst- list of id's in the chained GPC nbh - nonblocking handle which also acts as a context for each individual GPC Tree - the id of tree function used (default is 0=>binary, 1=>binomial, n=> user defined) */ int ARMCI_Gpc_chained_exec(int func, int callback, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, void *rdata, int rdlen, int idlen, int *idlst, gpc_hdl_t* nbh, int TREE) { #if 0 int hnd = -func + GPC_OFFSET; int err = 0; armci_hdl_t *ahdl = (nbh ? &(nbh->ahdl): NULL); if(hnd <0 || hnd>= GPC_SLOTS) err += fprintf(stderr, "ARMCI_Gpc_exec: bad callback handle %d: %d\n",hnd,GPC_SLOTS); if(!_table[hnd]) err += fprintf(stderr, "ARMCI_Gpc_exec: NULL function %d",hnd); if(hlen<0 || hlen>=ARMCI_Gpc_get_hlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid send header size %d %d\n", hlen, ARMCI_Gpc_get_hlen()); if(rhlen<0 || rhlen>=ARMCI_Gpc_get_hlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid recv header size %d %d\n", rhlen, ARMCI_Gpc_get_hlen()); if(dlen<0 || dlen>=ARMCI_Gpc_get_dlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid send data size %d %d\n", dlen, ARMCI_Gpc_get_dlen()); if(rdlen<0 || rdlen>=ARMCI_Gpc_get_dlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid recv data size %d %d\n", rdlen, ARMCI_Gpc_get_dlen()); if(hlen>0 && hdr==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null send header for non-zero header size %d\n", hlen); if(rhlen>0 && rhdr==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null recv header for non-zero header size %d\n", rhlen); if(dlen>0 && data==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null send data for non-zero data size %d\n", dlen); if(rdlen>0 && rdata==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null recv data for non-zero header size %d\n", rdlen); if(p<0 || p >= armci_nproc) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid target processor id %d\n", p, armci_nproc); if(err) return FAIL; if(rhlen + rdlen == 0) armci_die("Zero reply header + data length not yet supported", 0); tree_id = armci_msg_generate_tree(idlst,idlen,id_tree,TREE); if(nbh) nbh->proc = p; #if 1 if(SAMECLUSNODE(p) && armci_nproc==1) { int rhsize, rdsize; int (*func)(); /* fprintf(stderr, "%d:: armci gpc exec. SAMECLUSNODE\n", armci_me); */ func = _table[hnd]; if(func(p, armci_me, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, rdata, rdlen, &rdsize, GPC_INIT) != GPC_DONE) { func(p, armci_me, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, rdata, rdlen, &rdsize, GPC_WAIT); } #ifndef VAPI PARMCI_Fence(p); #endif return 0; } #endif /* fprintf(stderr, "%d:: armci gpc exec. invoking armci gpc\n", armci_me); */ return armci_gpc(h, p, hdr, hlen, data, dlen, rhdr, rhlen, rdata, rdlen, ahdl); #endif } int armci_gpc_local_exec(int h, int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, void *rdata, int rdlen, int rtype) { int rhsize, rdsize; int (*func)(); int hnd = -h + GPC_OFFSET; if(hnd <0 || hnd>= GPC_SLOTS) armci_die2("armci_gpc_local_exec: bad callback handle",hnd,GPC_SLOTS); if(!_table[hnd]) armci_die("armci_gpc_local_exec: NULL function",hnd); func = _table[hnd]; if(!SAMECLUSNODE(to)) armci_die("armci_gpc_local_exec: GPC call to a different node received!", armci_me); /* func(to, from, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, */ /* rdata, rdlen, &rdsize); */ /* return 0; */ return func(to, from, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, rdata, rdlen, &rdsize, rtype); } /*\ * This is a template for the callback function * The arguments are passed as specified in ARMCI_Gpc_exec * In addition, * rhsize specifies the actual size of reply header data returned * rdsize specifies the actual size of reply data returned \*/ int example_func(int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, int *rhsize, void *rdata, int rdlen, int *rdsize, int rtype); #ifdef LAPI void armci_gpc_set_serverpid(){ } #endif /*\ * Translate pointer to memory on processor "proc" * to be used in a callback function send by processor "from" \*/ void * ARMCI_Gpc_translate(void *ptr, int proc, int from) { return ptr; } /*\ acquire lock in a callback function executed in context of processor "proc" \*/ void ARMCI_Gpc_lock(int proc) { #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif NATIVE_LOCK(lock,proc); } /*\ try acquire lock in a callback function to be executed in context of * processor "proc" * return value: 1 - success * 0 - failure (already locked by another thread) \*/ int ARMCI_Gpc_trylock(int proc) { armci_die("ARMCI_Gpc_trylock: not yet implemented",0); return 0; } /*\ release lock in a callback function executed in context of processor "proc" \*/ void ARMCI_Gpc_unlock(int proc) { #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif NATIVE_UNLOCK(lock,proc); } void ARMCI_Gpc_init_handle(gpc_hdl_t *nbh) { nbh->proc = armci_me; ARMCI_INIT_HANDLE(&nbh->ahdl); } void ARMCI_Gpc_wait(gpc_hdl_t *nbh) { if(SAMECLUSNODE(nbh->proc)) return; PARMCI_Wait(&nbh->ahdl); } void ARMCI_Gpc_test(gpc_hdl_t *nbh) { if(SAMECLUSNODE(nbh->proc)) return; PARMCI_Test(&nbh->ahdl); } #define ARMCI_GPC_HLEN 65536 #define ARMCI_GPC_DLEN 65536 int ARMCI_Gpc_get_hlen() { return ARMCI_GPC_HLEN; } int ARMCI_Gpc_get_dlen() { return ARMCI_GPC_DLEN; } #endif ga-5-3/armci/src-portals/fence.c0000640005473000001440000000360711622314656015400 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: fence.c,v 1.25.4.6 2007-08-30 19:17:02 manoj Exp $ */ #include "armcip.h" #include "armci.h" #include "copy.h" #include #if defined(PVM) # include #elif defined(TCGMSG) # include #elif defined(BGML) # include "bgml.h" #else # include #endif char *_armci_fence_arr; void armci_init_fence() { #if defined (DATA_SERVER) _armci_fence_arr=calloc(armci_nproc,1); if(!_armci_fence_arr)armci_die("armci_init_fence: calloc failed",0); #endif } void ARMCI_DoFence(int proc) { int i; if(!SAMECLUSNODE(proc) && (armci_nclus >1)){ int cluster = armci_clus_id(proc); armci_rem_ack(cluster); } } void PARMCI_Fence(int proc) { int i; #if defined(DATA_SERVER) && !(defined(GM) && defined(ACK_FENCE)) // printf("%d [cp] fence_arr(%d)=%d\n",armci_me,proc,FENCE_ARR(proc)); if(FENCE_ARR(proc) && (armci_nclus >1)){ int cluster = armci_clus_id(proc); int master=armci_clus_info[cluster].master; armci_rem_ack(cluster); /* one ack per cluster node suffices */ /* note, in multi-threaded case it will only clear for current thread */ bzero(&FENCE_ARR(master),armci_clus_info[cluster].nslave); } #elif defined(BGML) BGML_WaitProc(proc); MEM_FENCE; #else FENCE_NODE(proc); MEM_FENCE; #endif } /* portals developers' note: armci fence is not guaranteed to be correct unless PUT_START events are captured PUT_ENDs do NOT guarantee order; only PUT_STARTs */ void PARMCI_AllFence() { #if defined(CLUSTER) { int p; for(p=0;p #include #include #include #include #include #include "shmlimit.h" #define DEBUG_ 0 #if defined(DECOSF) || defined(SOLARIS64) || defined(HPUX) #define PIPE_AFTER_FORK_BUG #endif void (*armci_sig_chld_orig)(); static int status=0; int armci_shmlimit_caught_sigchld=0; #if defined(SUN) && !defined(SOLARIS) static void SigChldHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else static void SigChldHandler(sig) #endif int sig; { #ifdef DISABLED int pid; pid = wait(&status); #endif armci_shmlimit_caught_sigchld=1; } static void TrapSigChld() { if ( (armci_sig_chld_orig = signal(SIGCHLD, SigChldHandler)) == SIG_ERR) armci_die("TrapSigChld: error from signal setting SIGCHLD",0); } static void RestoreSigChld() { if ( signal(SIGCHLD, armci_sig_chld_orig) == SIG_ERR) armci_die("Restore_SigChld: error from restoring signal SIGChld",0); } static int child_finished() { return armci_shmlimit_caught_sigchld; } int armci_child_shmem_init() { pid_t pid; int x; #ifdef PIPE_AFTER_FORK_BUG int i; #endif int y; int fd[2]; if(pipe(fd)==-1) armci_die("armci shmem_test pipe failed",0); TrapSigChld(); if ( (pid = fork() ) < 0) armci_die("armci shmem_test fork failed", (int)pid); else if(pid == 0){ x= armci_shmem_test(); #ifdef PIPE_AFTER_FORK_BUG /* due to a bug in OSF1 V4.0/1229/alpha first item written gets hosed*/ for(i=0;i<2;i++) #endif if(write(fd[1],&x,sizeof(int)) #include #include #include #include #include #include #include #include "shmem.h" #include "kr_malloc.h" #include "shmlimit.h" #include "message.h" #include "armcip.h" #ifdef ALLOC_MUNMAP #include #include static size_t pagesize=0; static int logpagesize=0; /* allow only that big shared memory segment (in MB)- incresed from 128 11/02 */ #define MAX_ALLOC_MUNMAP 128 #define MAX_ALLOC_MUNMAP_ 368 static long max_alloc_munmap=MAX_ALLOC_MUNMAP; #endif #if defined(SUN) extern char *shmat(); #endif #define SHM_UNIT (1024) /* Need to determine the max shmem segment size. There are 2 alternatives: * 1. use predefined SHMMAX if available or set some reasonable values, or * 2. trial-and-error search for a max value (default) * case a) fork a process to determine shmmax size (more accurate) * case b) search w/o forking until success (less accurate) */ /* under Myrinet GM, we cannot fork */ #if defined(GM) || defined(VAPI) # define SHMMAX_SEARCH_NO_FORK #endif #if defined(LAPI) || defined(AIX) || defined(SHMMAX_SEARCH_NO_FORK) || defined(CRAY_XT) # define NO_SHMMAX_SEARCH #endif /* Limits for the largest shmem segment are in Kilobytes to avoid passing * Gigavalues to kr_malloc * the limit for the KSR is lower than SHMMAX in sys/param.h because * shmat would fail -- SHMMAX cannot be trusted (a bug) */ #define _SHMMAX 4*1024 #if defined(SUN)||defined(SOLARIS) # undef _SHMMAX # define _SHMMAX (1024) /* memory in KB */ #elif defined(SGI64) || defined(AIX) || defined(CONVEX) # undef _SHMMAX # define _SHMMAX ((unsigned long)512*1024) #elif defined(SGI) && !defined(SGI64) # undef _SHMMAX # define _SHMMAX ((unsigned long)128*1024) #elif defined(KSR) # undef _SHMMAX # define _SHMMAX ((unsigned long)512*1024) #elif defined(HPUX) # undef _SHMMAX # define _SHMMAX ((unsigned long)64*1024) #elif defined(__FreeBSD__) # undef _SHMMAX # define _SHMMAX ((unsigned long)3*1024) #elif defined(LINUX) # if !defined(SHMMAX) /* Red Hat does not define SHMMAX */ # undef _SHMMAX # if defined(__sparc__) || defined(__powerpc__) # define _SHMMAX ((unsigned long)16*1024) # elif defined(__alpha__) # define _SHMMAX ((unsigned long)4072) # else /* Intel */ # define _SHMMAX ((unsigned long)32*1024) # endif # endif #elif defined(SHMMAX) # undef _SHMMAX # define _SHMMAX (((unsigned long)SHMMAX)>>10) #endif static unsigned long MinShmem_per_core = 0; static unsigned long MaxShmem_per_core = 0; static unsigned long MinShmem = _SHMMAX; static unsigned long MaxShmem = MAX_REGIONS*_SHMMAX; static context_t ctx_shmem; /* kr_malloc context */ static context_t *ctx_shmem_global; /* kr_malloc context stored in shmem */ static int create_call=0; #ifdef SHMMAX_SEARCH_NO_FORK static char *ptr_search_no_fork = (char*)0; static int id_search_no_fork=0; #endif #ifdef LINUX #define CLEANUP_CMD(command) sprintf(command,"/usr/bin/ipcrm shm %d",id); #elif defined(SOLARIS) #define CLEANUP_CMD(command) sprintf(command,"/bin/ipcrm -m %d",id); #elif defined(SGI) #define CLEANUP_CMD(command) sprintf(command,"/usr/sbin/ipcrm -m %d",id); #else #define CLEANUP_CMD(command) sprintf(command,"/usr/bin/ipcrm -m %d",id); #endif #ifdef ALLOC_MUNMAP #ifdef QUADRICS # include # include static char *armci_elan_starting_address = (char*)0; # ifdef __ia64__ # define ALLOC_MUNMAP_ALIGN 1024*1024 # else # define ALLOC_MUNMAP_ALIGN 64*1024 # endif # define ALGN_MALLOC(s,a) elan_allocMain(elan_base->state, (a), (s)) #else # define ALGN_MALLOC(s,a) malloc((s)) #endif static char* alloc_munmap(size_t size) { char *tmp; unsigned long iptr; size_t bytes = size+pagesize-1; if(armci_elan_starting_address){ tmp = armci_elan_starting_address; armci_elan_starting_address += size; # ifdef ALLOC_MUNMAP_ALIGN armci_elan_starting_address += ALLOC_MUNMAP_ALIGN; # endif if(DEBUG_) {printf("%d: address for shm attachment is %p size=%ld\n", armci_me,tmp,(long)size); fflush(stdout); } } else { tmp = ALGN_MALLOC(bytes, getpagesize()); if(tmp){ iptr = (unsigned long)tmp + pagesize-1; iptr >>= logpagesize; iptr <<= logpagesize; if(DEBUG_) printf("%d:unmap ptr=%p->%p size=%d pagesize=%d\n",armci_me, tmp,(char*)iptr,(int)size,pagesize); tmp = (char*)iptr; if(munmap(tmp, size) == -1) armci_die("munmap failed",0); if(DEBUG_){printf("%d: unmap OK\n",armci_me); fflush(stdout);} }else armci_die("alloc_munmap: malloc failed",(int)size); } return tmp; } #endif /*\ A wrapper to shmget. Just to be sure that ID is not 0. \*/ int armci_shmget(size_t size,char *from) { int id; id = shmget(IPC_PRIVATE, size, (IPC_CREAT | 00600)); /*attaching with id 0 somehow fails (Seen on pentium4+linux24+gm163) *so if id=0, shmget again. */ while(id==0){ /* free id=0 and get a new one */ if(shmctl((int)id,IPC_RMID,(struct shmid_ds *)NULL)) { fprintf(stderr,"id=%d \n",id); armci_die("allocate: failed to _delete_ shared region ",id); } id = shmget(IPC_PRIVATE, size, (IPC_CREAT | 00600)); } if(DEBUG_){ printf("\n%d:armci_shmget sz=%ld caller=%s id=%d\n",armci_me,(long)size, from,id); fflush(stdout); } return(id); } static int Semget(key_t key,int nsems,int semflg) { int ret; if((ret = semget(key,nsems,semflg)) == -1) { switch(errno) { case EACCES: fprintf(stdout," semget errno=EACCES.\n"); break; case EINVAL: fprintf(stdout," semget errno=EINVAL.\n"); break; case ENOENT: fprintf(stdout," semget errno=ENOENT.\n"); break; case ENOSPC: fprintf(stdout," semget errno=ENOSPC -- check system limit for sysv semaphores.\n"); break; case ENOMEM: fprintf(stdout," semget errno=ENOMEM.\n"); break; case EEXIST: fprintf(stdout," semget errno=EEXIST.\n"); break; default: fprintf(stdout," unusual semget errno=%d\n",errno); break; } armci_die("semget failed",errno); } return ret; } int armci_semget(int count) { int id; id = Semget(IPC_PRIVATE,2,0600); return id; } int armci_semrm(int id) { semctl(id,0,IPC_RMID); } int armci_shmrm(int id) { int ret; if((ret = shmctl(id,IPC_RMID,NULL)) != 0) { fprintf(stdout,"[cp]: shmctl return an error.\n"); switch(errno) { case EINVAL: fprintf(stdout," Error EINVAL: shmid is not a valid shared memory segment.\n"); break; case EFAULT: fprintf(stdout," Error EFAULT: argument 3 is not a valid struct shmid_ds.\n"); break; case EPERM: fprintf(stdout," Error EPREM: permission to access/change shared mem segment denied.\n"); break; default: fprintf(stdout," unusual shmctl errno=%d\n",errno); break; break; } armci_die("error deleting shmid",id); } return ret; } /*\ test is a shared memory region of a specified size can be allocated * return 0 (no) or 1 (yes) \*/ int armci_test_allocate(long size) { char *ptr; int id = armci_shmget((size_t)size,"armci_test_allocate"); if (id <0) return 0; /* attach to segment */ ptr = shmat(id, (char *) NULL, 0); /* delete segment id */ if(shmctl( id, IPC_RMID, (struct shmid_ds *)NULL)) fprintf(stderr,"failed to remove shm id=%d\n",id); /* test pointer */ if (((long)ptr) == -1L) return 0; else return 1; } /*\ try to allocate a shared memory region of a specified size; return pointer \*/ static int armci_shmalloc_try(long size) { #ifdef SHMMAX_SEARCH_NO_FORK char *ptr; int id = armci_shmget((size_t) size,"armci_shmalloc_try"); if (id <0) return 0; /* attach to segment */ ptr = shmat(id, (char *) NULL, 0); /* test pointer */ if (((long)ptr) == -1L) return 0; ptr_search_no_fork = ptr; id_search_no_fork = id; #endif return 1; } /* parameters that define range and granularity of search for shm segment size * UBOUND is chosen to be < 2GB to avoid overflowing on 32-bit systems * smaller PAGE gives more accurate results but with more search steps * LBOUND is set to minimum amount for our purposes * change UBOUND=512MB if you need larger arrays than 512 MB */ #define PAGE (16*65536L) #define LBOUND 1048576L #if defined(MULTI_CTX) && defined(QUADRICS) #define UBOUND 256*LBOUND #else #define UBOUND 512*LBOUND #endif static long get_user_shmmax() { char *uval; long x=0; uval = getenv("ARMCI_DEFAULT_SHMMAX"); if(uval != NULL){ sscanf(uval,"%ld",&x); if(x<1L || x> 2048L){ fprintf(stderr,"incorrect ARMCI_DEFAULT_SHMMAX should be <1,2048>mb and 2^N Found=%ld\n",x); x=0; } } return x*1048576; /* return value in bytes */ } /*\ determine the max shmem segment size using bisection \*/ int armci_shmem_test() { long x; int i,rc; long upper_bound=UBOUND; long lower_bound=0; x = get_user_shmmax(); if(!x) x = upper_bound; else upper_bound =x; if(DEBUG_){printf("%d: x = %ld upper_bound=%ld\n",armci_me, x, upper_bound); fflush(stdout);} for(i=1;;i++){ long step; rc = armci_test_allocate(x); if(DEBUG_) printf("%d:test %d size=%ld bytes status=%d\n",armci_me,i,x,rc); if(rc){ lower_bound = x; step = (upper_bound -x)>>1; if(step < PAGE) break; x += step; }else{ upper_bound = x; step = (x-lower_bound)>>1; if(step>=20; x <<=20; } if(!lower_bound){ /* try if can get LBOUND - necessary if search starts from UBOUND */ lower_bound=LBOUND; rc = armci_test_allocate(lower_bound); if(!rc) return(0); } if(DEBUG_) printf("%ld bytes segment size, %d calls \n",lower_bound,i); return (int)( lower_bound>>20); /* return shmmax in mb */ } #ifdef SHMMAX_SEARCH_NO_FORK /*\ determine the max shmem segment size by halving \*/ static int armci_shmem_test_no_fork() { long x; int i,rc; long lower_bound=_SHMMAX*SHM_UNIT; #define UBOUND_SEARCH_NO_FORK (256*SHM_UNIT*SHM_UNIT) x = get_user_shmmax(); if(!x) x = UBOUND_SEARCH_NO_FORK; for(i=1;;i++){ rc = armci_shmalloc_try(x); if(DEBUG_) printf("%d:test by halving size=%ld bytes rc=%d\n",armci_me,x,rc); if(rc){ lower_bound = x; break; }else{ x >>= 1 ; if(x>20); /* return shmmax in mb */ } #endif #ifdef MULTI_CTX void armci_nattach_preallocate_info(int* segments, int *segsize) { int x; char *uval; uval = getenv("LIBELAN_NATTACH"); if(uval != NULL){ sscanf(uval,"%d",&x); if(x<2 || x>8) armci_die("Error in LIBELAN_NATTACH <8, >1 ",(int)x); }else armci_die("Inconsistent configuration: ARMCI needs LIBELAN_NATTACH",0); *segments =x; *segsize = (int) (SHM_UNIT * MinShmem); } #endif /* Create shared region to store kr_malloc context in shared memory */ void armci_krmalloc_init_ctxshmem() { void *myptr=NULL; long idlist[SHMIDLEN]; long size; int offset = sizeof(void*)/sizeof(int); /* to store shared memory context and myptr */ size = SHMEM_CTX_MEM; if(armci_me == armci_master ){ myptr = Create_Shared_Region(idlist+1,size,idlist); if(!myptr && size>0 ) armci_die("armci_krmalloc_init_ctxshmem: could not create", (int)(size>>10)); if(size) *(volatile void**)myptr = myptr; if(DEBUG_){ printf("%d:armci_krmalloc_init_ctxshmem addr mptr=%p ref=%p size=%ld\n", armci_me, myptr, *(void**)myptr, size); fflush(stdout); } /* Bootstrapping: allocate storage for ctx_shmem_global. NOTE:there is offset,as master places its address at begining for others to see */ ctx_shmem_global = (context_t*) ( ((int*)myptr)+offset ); *ctx_shmem_global = ctx_shmem; /*master copies ctx into shared region */ } /* broadcast shmem id to other processes on the same cluster node */ armci_msg_clus_brdcst(idlist, SHMIDLEN*sizeof(long)); if(armci_me != armci_master){ myptr=(double*)Attach_Shared_Region(idlist+1,size,idlist[0]); if(!myptr)armci_die("armci_krmalloc_init_ctxshmem: could not attach", (int)(size>>10)); /* now every process in a SMP node needs to find out its offset * w.r.t. master - this offset is necessary to use memlock table */ if(size) armci_set_mem_offset(myptr); if(DEBUG_){ printf("%d:armci_krmalloc_init_ctxshmem attached addr mptr=%p ref=%p size=%ld\n", armci_me,myptr, *(void**)myptr,size); fflush(stdout); } /* store context info */ ctx_shmem_global = (context_t*) ( ((int*)myptr)+offset ); if(DEBUG_){ printf("%d:armci_krmalloc_init_ctxshmem: shmid=%d off=%ld size=%ld\n", armci_me, ctx_shmem_global->shmid, ctx_shmem_global->shmoffset, (long)ctx_shmem_global->shmsize); fflush(stdout); } } } void armci_shmem_init() { #ifdef ALLOC_MUNMAP #if defined(QUADRICS) # if (defined(__ia64__) || defined(__alpha)) && !defined(DECOSF) /* this is to determine size of Elan Main memory allocator for munmap */ long x; char *uval; uval = getenv("LIBELAN_ALLOC_SIZE"); if(uval != NULL){ sscanf(uval,"%ld",&x); if((x>80000000) && (x< 4*1024*1024*1024L)){ max_alloc_munmap = (x>>20) - 72; if(DEBUG_){ printf("%d: max_alloc_munmap is %ld\n",armci_me,max_alloc_munmap); fflush(stdout); } } } /* an alternative approach is to use MMAP area where we get the address from the Elan environment variable in qsnetlibs 1.4+ */ uval = getenv("LIBELAN3_MMAPBASE"); if(uval != NULL){ sscanf(uval,"%p",&armci_elan_starting_address); } # endif # if defined(__ia64__) /* need aligment on 1MB boundary rather than the actual pagesize */ pagesize = 1024*1024; logpagesize = 20; # else /* determine log2(pagesize) needed for address alignment */ int tp=512; logpagesize = 9; pagesize = getpagesize(); if(tp>pagesize)armci_die("armci_shmem_init:pagesize",pagesize); while(tpmax_alloc_munmap && !armci_elan_starting_address) x=max_alloc_munmap; # else x = 10; /* mb */ # endif # endif if(DEBUG_){ printf("%d:shmem_init: %d mbytes max segment size\n",armci_me,x);fflush(stdout);} MinShmem = (long)(x<<10); /* make sure it is in kb: mb <<10 */ MaxShmem = MAX_REGIONS*MinShmem; # ifdef REPORT_SHMMAX printf("%d using x=%d SHMMAX=%ldKB\n", armci_me,x, MinShmem); fflush(stdout); # endif #else /* nothing to do here - limits were given */ #endif } armci_krmalloc_init_ctxshmem(); if(DEBUG_)printf("%d: out of shmem_init\n",armci_me); } void armci_set_shmem_limit_per_node(int nslaves) { if (MaxShmem_per_core > 0) MaxShmem = nslaves*MaxShmem_per_core; if (MinShmem_per_core > 0) MinShmem = nslaves*MinShmem_per_core; } void armci_set_shmem_limit_per_core(unsigned long shmemlimit) { MaxShmem_per_core = (shmemlimit + SHM_UNIT - 1)/SHM_UNIT; MinShmem_per_core = (shmemlimit + SHM_UNIT - 1)/SHM_UNIT; } /*\ application can reset the upper limit (bytes) for memory allocation \*/ void armci_set_shmem_limit(unsigned long shmemlimit) { unsigned long kbytes; kbytes = (shmemlimit + SHM_UNIT -1)/SHM_UNIT; if(MaxShmem > kbytes) MaxShmem = kbytes; if(MinShmem > kbytes) MinShmem = kbytes; } static void shmem_errmsg(size_t size) { long sz=(long)size; printf("******************* ARMCI INFO ************************\n"); printf("The application attempted to allocate a shared memory segment "); printf("of %ld bytes in size. This might be in addition to segments ",sz); printf("that were allocated succesfully previously. "); printf("The current system configuration does not allow enough "); printf("shared memory to be allocated to the application.\n"); printf("This is most often caused by:\n1) system parameter SHMMAX "); printf("(largest shared memory segment) being too small or\n"); printf("2) insufficient swap space.\n"); printf("Please ask your system administrator to verify if SHMMAX "); printf("matches the amount of memory needed by your application and "); printf("the system has sufficient amount of swap space. "); printf("Most UNIX systems can be easily reconfigured "); printf("to allow larger shared memory segments,\n"); printf("see http://www.emsl.pnl.gov/docs/global/support.shtml\n"); printf("In some cases, the problem might be caused by insufficient swap space.\n"); printf("*******************************************************\n"); } static struct shm_region_list{ char *addr; long id; long sz; long attached; }region_list[MAX_REGIONS]; static int alloc_regions=0; static long occup_blocks=0; /* Terminology * region - actual piece of shared memory allocated from OS * block - a part of allocated shmem that is given to the requesting process */ static int last_allocated=-1; unsigned long armci_max_region() { return MinShmem; } int find_regions(char *addrp, long* id, int *region) { int nreg, reg; if(last_allocated!=-1){ reg=last_allocated; last_allocated = -1; } else{ for(reg=-1,nreg=0;nreg= region_list[nreg].addr && addrp < (region_list[nreg].addr + region_list[nreg].sz)) { reg = nreg; break; } } if(reg == -1) armci_die("find_regions: failed to locate shared region", 0L); } *region = reg; *id = region_list[reg].id; return 1; } /* returns the shmem info based on the addr */ int armci_get_shmem_info(char *addrp, int* shmid, long *shmoffset, size_t *shmsize) { int region; long id; find_regions(addrp, &id, ®ion); *shmid = id; *shmoffset = (long)(addrp - region_list[region].addr); *shmsize = region_list[region].sz; return 1; } long armci_shm_reg_size(int i, long id) { if(i<0 || i>= MAX_REGIONS)armci_die("armci_shmem_reg_size: bad i",i); return region_list[i].sz; } void* armci_shm_reg_ptr(int i) { if(i<0 || i>= MAX_REGIONS)armci_die("armci_shmem_reg_ptr: bad i",i); return (void *)region_list[i].addr; } Header *armci_get_shmem_ptr(int shmid, long shmoffset, size_t shmsize) { /* returns, address of the shared memory region based on shmid, offset. * (i.e. return_addr = stating address of shmid + offset)*/ long idlist[SHMIDLEN]; Header *p = NULL; idlist[1] = (long)shmid; idlist[0] = shmoffset; idlist[IDLOC+1] = shmsize; /* CHECK : idlist in CreateShmem????*/ if(!(p=(Header*)Attach_Shared_Region(idlist+1, shmsize, idlist[0]))) armci_die("kr_malloc:could not attach",(int)(p->s.shmsize>>10)); #if DEBUG_ printf("%d: armci_get_shmem_ptr: %d %ld %ld %p\n", armci_me, idlist[1], idlist[0], shmsize, p); fflush(stdout); #endif return p; } char *Attach_Shared_Region(id, size, offset) long *id, offset, size; { int reg, found, shmflag=0; static char *temp; if(alloc_regions>=MAX_REGIONS) armci_die("Attach_Shared_Region: to many regions ",0); if(DEBUG_){ printf("%d:AttachSharedRegion %d:size=%ld id=%ld\n", armci_me, create_call++, size,*id); fflush(stdout); } /* under Linux we can get valid id=0 */ #ifndef LINUX if(!*id) armci_die("Attach_Shared_Region: shmem ID=0 ",(int)*id); #endif /* first time needs to initialize region_list structure */ if(!alloc_regions){ for(reg=0;reg= MAX_REGIONS) armci_die("Create_Shared_Region:allocate:too many regions allocated ",0); last_allocated = alloc_regions; #ifdef SHMMAX_SEARCH_NO_FORK if (ptr_search_no_fork){ temp = ptr_search_no_fork; id = id_search_no_fork; ptr_search_no_fork = (char*)0; /* do not look at it again */ }else #endif { if ( (id = armci_shmget(sz,"armci_allocate")) < 0 ) { fprintf(stderr,"id=%d size=%ld\n",id, size); shmem_errmsg(sz); armci_die("allocate: failed to create shared region ",id); } if ( (long)( (temp = shmat(id, pref_addr, shmflag))) == -1L){ char command[64]; CLEANUP_CMD(command); if(system(command) == -1) printf("Please clean shared memory (id=%d): see man ipcrm\n",id); armci_die("allocate: failed to attach to shared region id=",id); } if(DEBUG_){ printf("%d:allocate:attach:id=%d paddr=%p size=%ld\n",armci_me,id,temp,size); fflush(stdout); } #if 1 /* delete segment id so that OS cleans it when all attached processes are gone */ if(shmctl( id, IPC_RMID, (struct shmid_ds *)NULL)) fprintf(stderr,"failed to remove shm id=%d\n",id); #endif } POST_ALLOC_CHECK(temp,sz); region_list[alloc_regions].addr = temp; region_list[alloc_regions].id = id; region_list[alloc_regions].attached=1; region_list[alloc_regions].sz=sz; alloc_regions++; if(DEBUG2_){ printf("%d:allocate:id=%d addr=%p size=%ld\n",armci_me,id,temp,size); fflush(stdout); } return (void*) (temp); } /******************** common code for the two versions *********************/ /*\ Allocate a block of shared memory - called by master process \*/ char *Create_Shared_Region(long *id, long size, long *offset) { char *temp; int reg, refreg=0,nreg; if(alloc_regions>=MAX_REGIONS) armci_die("Create_Shared_Region: to many regions ",0); if(DEBUG_){ printf("%d:CreateSharedRegion %d:size=%ld\n",armci_me,create_call++,size); fflush(stdout); } /*initialization: 1st allocation request */ if(!alloc_regions){ for(reg=0;reg #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_ASSERT_H # include #endif #ifndef MPI # define MPI #endif #include "armcip.h" #include "message.h" #define DEBUG_ 0 MPI_Comm ARMCI_COMM_WORLD; /*dup of MPI_COMM_WORLD. Initialized first thing in ARMCI_Init*/ ARMCI_Group ARMCI_Default_Proc_Group = 0; ARMCI_Group ARMCI_World_Proc_Group = 0; typedef struct group_list_struct { ARMCI_Group group; ARMCI_iGroup igroup; struct group_list_struct *next; } group_list_t; group_list_t *group_list = NULL; ARMCI_iGroup* armci_get_igroup_from_group(ARMCI_Group *group) { group_list_t *current_group_list_item = group_list; assert(group_list != NULL); while (current_group_list_item != NULL) { if (current_group_list_item->group == *group) { return ¤t_group_list_item->igroup; } current_group_list_item = current_group_list_item->next; } armci_die("ARMCI_Group lookup failed", -1); return NULL; } static void armci_create_group_and_igroup(ARMCI_Group *group, ARMCI_iGroup **igroup) { group_list_t *new_group_list_item = NULL; group_list_t *last_group_list_item = NULL; /* create the new group in the linked list */ last_group_list_item = group_list; while (last_group_list_item->next != NULL) { last_group_list_item = last_group_list_item->next; } new_group_list_item = malloc(sizeof(group_list_t)); new_group_list_item->group = last_group_list_item->group + 1; new_group_list_item->next = NULL; *igroup = &new_group_list_item->igroup; *group = new_group_list_item->group; last_group_list_item->next = new_group_list_item; } #ifdef ARMCI_GROUP void ARMCI_Bcast_(void *buffer, int len, int root, ARMCI_Group *group) { armci_msg_group_bcast_scope(SCOPE_ALL, buffer, len, ARMCI_Absolute_id(group, root), group); } #else void ARMCI_Bcast_(void *buffer, int len, int root, ARMCI_Comm comm) { int result; MPI_Comm_compare(comm, ARMCI_COMM_WORLD, &result); if(result == MPI_IDENT) armci_msg_brdcst(buffer, len, root); else MPI_Bcast(buffer, len, MPI_BYTE, root, (MPI_Comm)comm); } #endif int ARMCI_Group_rank(ARMCI_Group *group, int *rank) { ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); #ifdef ARMCI_GROUP if(!igroup) return MPI_ERR_GROUP; *rank = igroup->grp_attr.grp_me; return MPI_SUCCESS; #else return MPI_Group_rank((MPI_Group)(igroup->igroup), rank); #endif } void ARMCI_Group_size(ARMCI_Group *group, int *size) { ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); #ifdef ARMCI_GROUP *size = igroup->grp_attr.nproc; #else MPI_Group_size((MPI_Group)(igroup->igroup), size); #endif } int ARMCI_Absolute_id(ARMCI_Group *group,int group_rank) { int abs_rank,status; ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); #ifdef ARMCI_GROUP assert(group_rank < igroup->grp_attr.nproc); return igroup->grp_attr.proc_list[group_rank]; #else MPI_Group grp; status = MPI_Comm_group(ARMCI_COMM_WORLD,&grp); MPI_Group_translate_ranks(igroup->igroup,1,&group_rank,grp,&abs_rank); return(abs_rank); #endif } void ARMCI_Group_set_default(ARMCI_Group *group) { ARMCI_Default_Proc_Group = *group; } void ARMCI_Group_get_default(ARMCI_Group *group_out) { *group_out = ARMCI_Default_Proc_Group; } void ARMCI_Group_get_world(ARMCI_Group *group_out) { *group_out = ARMCI_World_Proc_Group; } static void get_group_clus_id(ARMCI_iGroup *igroup, int grp_nproc, int *grp_clus_id) { #ifdef ARMCI_GROUP int i; assert(grp_nproc<=igroup->grp_attr.nproc); for(i=0; igrp_attr.proc_list[i]); } #else int i, *ranks1, *ranks2; MPI_Group group2; /* Takes the list of processes from one group and attempts to determine * the corresponding ranks in a second group (here, ARMCI_COMM_WORLD) */ ranks1 = (int *)malloc(2*grp_nproc*sizeof(int)); ranks2 = ranks1 + grp_nproc; for(i=0; iigroup, grp_nproc, ranks1, group2, ranks2); /* get the clus_id of processes */ for(i=0; iicomm; #endif int grp_me, grp_nproc, grp_nclus, grp_clus_me; armci_clus_t *grp_clus_info=NULL; #ifdef CLUSTER int i, len, root=0; #endif #ifndef ARMCI_GROUP if(comm==MPI_COMM_NULL || igroup->igroup==MPI_GROUP_NULL) armci_die("group_process_list: NULL COMMUNICATOR",0); #endif ARMCI_Group_rank(group, &grp_me); ARMCI_Group_size(group, &grp_nproc); #ifdef CLUSTER # ifdef ARMCI_GROUP /*all processes construct the clus_info structure in parallel*/ grp_clus_info = group_construct_clusinfo(&grp_nclus, group); # else /* process 0 gets group cluster information: grp_nclus, grp_clus_info */ if(grp_me == 0) { grp_clus_info = group_construct_clusinfo(&grp_nclus, group); } /* process 0 broadcasts group cluster information */ len = sizeof(int); ARMCI_Bcast_(&grp_nclus, len, root, comm); if(grp_me){ /* allocate memory */ grp_clus_info = (armci_clus_t*)malloc(grp_nclus*sizeof(armci_clus_t)); if(!armci_clus_info)armci_die("malloc failed for clusinfo",armci_nclus); } len = sizeof(armci_clus_t)*grp_nclus; ARMCI_Bcast_(grp_clus_info, len, root, comm); # endif /* determine current group cluster node id by comparing me to master */ grp_clus_me = grp_nclus-1; for(i =0; i< grp_nclus-1; i++) { if(grp_me < grp_clus_info[i+1].master){ grp_clus_me=i; break; } } #else /* !CLUSTER */ grp_clus_me = 0; grp_nclus = 1; grp_clus_info = (armci_clus_t*)malloc(grp_nclus*sizeof(armci_clus_t)); if(!grp_clus_info)armci_die("malloc failed for clusinfo",grp_nclus); strcpy(grp_clus_info[0].hostname, armci_clus_info[0].hostname); grp_clus_info[0].master=0; grp_clus_info[0].nslave=grp_nproc; #endif /* CLUSTER */ #ifdef ARMCI_GROUP /*Set in ARMCI_Group_create. ARMCI_Group_rank is used before setting this field. So moving it there in the generic implementation.*/ #else grp_attr->grp_me = grp_me; #endif grp_attr->grp_clus_info = grp_clus_info; grp_attr->grp_nclus = grp_nclus; grp_attr->grp_clus_me = grp_clus_me; } /* attribute caching: group_cluster_information and memory_offset should be cached in group data structure */ static void armci_cache_attr(ARMCI_Group *group) { armci_grp_attr_t *grp_attr; ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); /* allocate storage for the attribute content. Note: Attribute contents should be stored in persistent memory */ grp_attr = &(igroup->grp_attr); /* get group cluster information and grp_attr */ group_process_list(group, grp_attr); } armci_grp_attr_t *ARMCI_Group_getattr(ARMCI_Group *group) { ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); return(&(igroup->grp_attr)); } static void armci_igroup_finalize(ARMCI_iGroup *igroup) { #ifdef ARMCI_GROUP int world_me, i; world_me = armci_msg_me(); for(i=0; igrp_attr.nproc; i++) { if(igroup->grp_attr.proc_list[i] == world_me) { break; } } if(i==igroup->grp_attr.nproc) { return; /*not in group to be freed*/ } assert(igroup); free(igroup->grp_attr.grp_clus_info); free(igroup->grp_attr.proc_list); igroup->grp_attr.nproc = 0; #else int rv; assert(igroup); /*the following was causing seg fault*/ /*free(igroup->grp_attr.grp_clus_info);*/ rv=MPI_Group_free(&(igroup->igroup)); if(rv != MPI_SUCCESS) armci_die("MPI_Group_free: Failed ",armci_me); if(igroup->icomm != MPI_COMM_NULL) { rv = MPI_Comm_free( (MPI_Comm*)&(igroup->icomm) ); if(rv != MPI_SUCCESS) armci_die("MPI_Comm_free: Failed ",armci_me); } #endif } void ARMCI_Group_free(ARMCI_Group *group) { group_list_t *current_group_list_item = group_list; group_list_t *previous_group_list_item = NULL; /* find the group to free */ while (current_group_list_item != NULL) { if (current_group_list_item->group == *group) { break; } previous_group_list_item = current_group_list_item; current_group_list_item = current_group_list_item->next; } /* make sure we found a group */ assert(current_group_list_item != NULL); /* remove the group from the linked list */ if (previous_group_list_item != NULL) { previous_group_list_item->next = current_group_list_item->next; } /* free the group */ armci_igroup_finalize(¤t_group_list_item->igroup); free(current_group_list_item); } /* Create a child group for to the given group. @param n IN #procs in this group (<= that in group_parent) @param pid_list IN The list of proc ids (w.r.t. group_parent) @param group_out OUT Handle to store the created group @param group_parent IN Parent group */ void ARMCI_Group_create_child(int n, int *pid_list, ARMCI_Group *group_out, ARMCI_Group *grp_parent) { int i,grp_me; ARMCI_iGroup *igroup = NULL; #ifdef ARMCI_GROUP int world_me, parent_grp_me; armci_grp_attr_t *grp_attr = NULL; #else int rv; ARMCI_iGroup *igroup_parent = NULL; MPI_Group *group_parent = NULL; MPI_Comm *comm_parent = NULL; #endif armci_create_group_and_igroup(group_out, &igroup); #ifdef ARMCI_GROUP grp_attr = &igroup->grp_attr; ARMCI_Group_rank(grp_parent, &parent_grp_me); for(i=0; inproc=0; grp_attr->proc_list = NULL; return; /*not in group to be created*/ } for(i=0; i pid_list[i+1]){ armci_die("ARMCI_Group_create: Process ids are not sorted ",armci_me); break; } } grp_attr->grp_clus_info = NULL; grp_attr->nproc = n; grp_attr->proc_list = (int *)malloc(n*sizeof(int)); assert(grp_attr->proc_list!=NULL); for(i=0; iproc_list[i] = ARMCI_Absolute_id(grp_parent,pid_list[i]); } world_me = armci_msg_me(); grp_attr->grp_me = grp_me = MPI_UNDEFINED; for(i=0; igrp_attr.proc_list[i] == world_me) { grp_attr->grp_me = grp_me = i; break; } } if(grp_me != MPI_UNDEFINED) armci_cache_attr(group_out); armci_msg_group_barrier(group_out); #else igroup_parent = armci_get_igroup_from_group(grp_parent); /* NOTE: default group is the parent group */ group_parent = &(igroup_parent->igroup); comm_parent = &(igroup_parent->icomm); rv=MPI_Group_incl(*group_parent, n, pid_list, &(igroup->igroup)); if(rv != MPI_SUCCESS) armci_die("MPI_Group_incl: Failed ",armci_me); { MPI_Comm comm, comm1, comm2; int lvl=1, local_ldr_pos; MPI_Group_rank((MPI_Group)(igroup->igroup), &grp_me); if(grp_me == MPI_UNDEFINED) { igroup->icomm = MPI_COMM_NULL; /*FIXME: keeping the group around for now*/ return; } assert(grp_me>=0); /*SK: sanity check for the following bitwise operations*/ MPI_Comm_dup(MPI_COMM_SELF, &comm); /*FIXME: can be optimized away*/ local_ldr_pos = grp_me; while(n> lvl) { int tag=0; int remote_ldr_pos = local_ldr_pos^lvl; if(remote_ldr_pos < n) { int remote_leader = pid_list[remote_ldr_pos]; MPI_Comm peer_comm = *comm_parent; int high = (local_ldr_posicomm = comm; MPI_Group_free(&igroup->igroup); /*cleanup temporary group*/ MPI_Comm_group(igroup->icomm, &igroup->igroup); /*the group associated with comm*/ igroup->grp_attr.grp_clus_info=NULL; /* processes belong to this group should cache attributes */ armci_cache_attr(group_out); } #endif } void ARMCI_Group_create(int n, int *pid_list, ARMCI_Group *group_out) { ARMCI_Group_create_child(n, pid_list, group_out, (ARMCI_Group *)&ARMCI_Default_Proc_Group); } void armci_group_init() { #ifdef ARMCI_GROUP int i; #else int grp_me; #endif ARMCI_iGroup *igroup; /* Initially, World group is the default group */ ARMCI_World_Proc_Group = 0; ARMCI_Default_Proc_Group = 0; /* create the head of the group linked list */ assert(group_list == NULL); group_list = malloc(sizeof(group_list_t)); group_list->group = ARMCI_World_Proc_Group; group_list->next = NULL; igroup = &group_list->igroup; #ifdef ARMCI_GROUP /*setup the world proc group*/ igroup->grp_attr.nproc = armci_msg_nproc(); igroup->grp_attr.grp_me = armci_msg_me(); igroup->grp_attr.proc_list = (int *)malloc(igroup->grp_attr.nproc*sizeof(int)); assert(igroup->grp_attr.proc_list != NULL); for(i=0; igrp_attr.nproc; i++) { igroup->grp_attr.proc_list[i] = i; } igroup->grp_attr.grp_clus_info = NULL; armci_cache_attr(&ARMCI_World_Proc_Group); #else /* save MPI world group and communicatior in ARMCI_World_Proc_Group */ igroup->icomm = ARMCI_COMM_WORLD; MPI_Comm_group(ARMCI_COMM_WORLD, &(igroup->igroup)); /* processes belong to this group should cache attributes */ MPI_Group_rank((MPI_Group)(igroup->igroup), &grp_me); if(grp_me != MPI_UNDEFINED) { armci_cache_attr(&ARMCI_World_Proc_Group); } #endif } void armci_group_finalize() { group_list_t *current_group_list_item = group_list; group_list_t *previous_group_list_item = NULL; /* don't free the world group (the list head) */ current_group_list_item = current_group_list_item->next; while (current_group_list_item != NULL) { previous_group_list_item = current_group_list_item; current_group_list_item = current_group_list_item->next; armci_igroup_finalize(&previous_group_list_item->igroup); free(previous_group_list_item); } } /* ISSUES: 1. Make sure ARMCI_Group_free frees the attribute data structures 2. replace malloc with, kr_malloc using local_context. */ ga-5-3/armci/src-portals/signaltrap.c0000640005473000001440000003163411300316052016446 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: signaltrap.c,v 1.28 2005-05-13 19:06:40 vinod Exp $ */ /******************************************************\ * Signal handler functions for the following signals: * * SIGINT, SIGCHLD, SIGBUS, SIGFPE, SIGILL, * * SIGSEGV, SIGSYS, SIGTRAP, SIGHUP, SIGTERM * * Used to call armci_error that frees up IPC resources * \******************************************************/ #include #include #ifndef WIN32 #include #include #include #include #include #endif #define PAUSE_ON_ERROR #define Error armci_die #if (defined(ENCORE) || defined(SEQUENT) || defined(ARDENT)) # define SigType int #else # define SigType void #endif #ifndef SIG_ERR # define SIG_ERR (SigType (*)())-1 #endif #if defined(SUN) || defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || \ defined(AIX) || defined(NEXT) #include #endif extern void Error(); extern int armci_me; int AR_caught_sigint=0; int AR_caught_sigterm=0; int AR_caught_sigchld=0; int AR_caught_sigsegv=0; int AR_caught_sig=0; SigType (*SigChldOrig)(), (*SigIntOrig)(), (*SigHupOrig)(), (*SigTermOrig)(); SigType (*SigSegvOrig)(); /*********************** SIGINT *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigIntHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigIntHandler(sig) #endif int sig; { AR_caught_sigint = 1; AR_caught_sig= sig; Error("SigIntHandler: interrupt signal was caught",(int) sig); } void TrapSigInt() /* Trap the signal SIGINT so that we can propagate error conditions and also tidy up shared system resources in a manner not possible just by killing everyone */ { if ( (SigIntOrig = signal(SIGINT, SigIntHandler)) == SIG_ERR) Error("TrapSigInt: error from signal setting SIGINT",0); } void RestoreSigInt() /* Restore the original signal handler */ { if(AR_caught_sigint) SigIntOrig(SIGINT); if ( signal(SIGINT, SigIntOrig) == SIG_ERR) Error("RestoreSigInt: error from restoring signal SIGINT",0); } /*********************** SIGABORT *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigAbortHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigAbortHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("SigIntHandler: abort signal was caught: cleaning up",(int) sig); } void TrapSigAbort() /* Trap the signal SIGINT so that we can propagate error conditions and also tidy up shared system resources in a manner not possible just by killing everyone */ { if ( signal(SIGINT, SigAbortHandler) == SIG_ERR) Error("TrapSigAbort: error from signal setting SIGABORT",0); } /*********************** SIGCHLD *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigChldHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigChldHandler(sig) #endif int sig; { int status; #if defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || defined(NEXT) union wait ustatus; #endif #if defined(LINUX) pid_t ret; /* Trap signal as soon as possible to avoid race */ if ( (SigChldOrig = signal(SIGCHLD, SigChldHandler)) == SIG_ERR) Error("SigChldHandler: error from signal setting SIGCHLD",0); #endif #if defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || defined(NEXT) # if defined(LINUX) ret = wait(&ustatus); if((ret == 0) || ((ret == -1) && (errno == ECHILD))) { return; } # else (void) wait(&ustatus); # endif status = ustatus.w_status; #else # if defined(LINUX) ret = waitpid(0, &status, WNOHANG); if((ret == 0) || ((ret == -1) && (errno == ECHILD))) { return; } # else (void)wait(&status); # endif #endif AR_caught_sigchld=1; AR_caught_sig= sig; Error("Child process terminated prematurely, status=",(int) status); } void TrapSigChld() /* Trap SIGCHLD so that can tell if children die unexpectedly. */ { if ( (SigChldOrig = signal(SIGCHLD, SigChldHandler)) == SIG_ERR) Error("TrapSigChld: error from signal setting SIGCHLD",0); } void RestoreSigChld() /* Restore the original signal handler */ { if(AR_caught_sigchld) SigChldOrig(SIGCHLD); if ( signal(SIGCHLD, SigChldOrig) == SIG_ERR) Error("RestoreSigChld: error from restoring signal SIGChld",0); } void RestoreSigChldDfl() { (void) signal(SIGCHLD, SIG_DFL); } /*********************** SIGBUS *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigBusHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigBusHandler(sig) #endif int sig; { AR_caught_sig= sig; #ifdef PAUSE_ON_ERROR fprintf(stderr,"%d(%d): Bus Error ... pausing\n", armci_me, getpid() );pause(); #endif Error("Bus error, status=",(int) sig); } void TrapSigBus() /* Trap SIGBUS */ { if ( signal(SIGBUS, SigBusHandler) == SIG_ERR) Error("TrapSigBus: error from signal setting SIGBUS", 0); } /*********************** SIGFPE *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigFpeHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigFpeHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Floating Point Exception error, status=",(int) sig); } void TrapSigFpe() /* Trap SIGFPE */ { if ( signal(SIGFPE, SigFpeHandler) == SIG_ERR) Error("TrapSigFpe: error from signal setting SIGFPE", 0); } /*********************** SIGILL *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigIllHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigIllHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Illegal Instruction error, status=",(int) sig); } void TrapSigIll() /* Trap SIGILL */ { if ( signal(SIGILL, SigIllHandler) == SIG_ERR) Error("TrapSigIll: error from signal setting SIGILL", 0); } /*********************** SIGSEGV *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigSegvHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigSegvHandler(sig) #endif int sig; { AR_caught_sig= sig; AR_caught_sigsegv=1; #ifdef PAUSE_ON_ERROR fprintf(stderr,"%d(%d): Segmentation Violation ... pausing\n", armci_me, getpid() );pause(); #endif Error("Segmentation Violation error, status=",(int) sig); } #ifdef DO_CKPT static void * signal_arr[100]; SigType SigSegvActionSa(int sig,siginfo_t *sinfo, void *ptr) { int (*func)(); AR_caught_sig= sig; AR_caught_sigsegv=1; func = signal_arr[sig]; /*printf("\n%d:in sigaction %p, %d\n",armci_me,sinfo->si_addr,sinfo->si_errno);fflush(stdout);*/ if(func(sinfo->si_addr,sinfo->si_errno,sinfo->si_fd)) Error("Segmentation Violation error, status=",(int) SIGSEGV); } void TrapSigSegvSigaction() { struct sigaction sa; sa.sa_sigaction = (void *)SigSegvActionSa; sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; sigaction(SIGSEGV, &sa, NULL); } #endif void TrapSigSegv() /* Trap SIGSEGV */ { if ( (SigSegvOrig=signal(SIGSEGV, SigSegvHandler)) == SIG_ERR) Error("TrapSigSegv: error from signal setting SIGSEGV", 0); } void RestoreSigSegv() /* Restore the original signal handler */ { /* if(AR_caught_sigsegv) SigSegvOrig(SIGSEGV); */ #ifdef DO_CKPT__ struct sigaction sa; sa.sa_handler = (void *)SigSegvOrig; sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; sigaction(SIGSEGV, &sa, NULL); sigaction(SIGSEGV,&sa,NULL); #else if ( signal(SIGSEGV,SigSegvOrig) == SIG_ERR) Error("RestoreSigSegv: error from restoring signal SIGSEGV",0); #endif } /*********************** SIGSYS *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigSysHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigSysHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Bad Argument To System Call error, status=",(int) sig); } void TrapSigSys() /* Trap SIGSYS */ { #ifndef LINUX if ( signal(SIGSYS, SigSysHandler) == SIG_ERR) Error("TrapSigSys: error from signal setting SIGSYS", 0); #endif } /*********************** SIGTRAP *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigTrapHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigTrapHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Trace Trap error, status=",(int) sig); } void TrapSigTrap() /* Trap SIGTRAP */ { if ( signal(SIGTRAP, SigTrapHandler) == SIG_ERR) Error("TrapSigTrap: error from signal setting SIGTRAP", 0); } /*********************** SIGHUP *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigHupHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigHupHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Hangup error, status=",(int) sig); } void TrapSigHup() /* Trap SIGHUP */ { if ( (SigHupOrig = signal(SIGHUP, SigHupHandler)) == SIG_ERR) Error("TrapSigHup: error from signal setting SIGHUP", 0); } void RestoreSigHup() /* Restore the original signal handler */ { if(AR_caught_sig== SIGHUP) SigHupOrig(SIGHUP); if ( signal(SIGHUP, SigHupOrig) == SIG_ERR) Error("RestoreSigHUP: error from restoring signal SIGHUP",0); } /*********************** SIGTERM *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigTermHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigTermHandler(sig) #endif int sig; { AR_caught_sigterm = 1; AR_caught_sig= sig; Error("Terminate signal was sent, status=",(int) sig); } void TrapSigTerm() /* Trap SIGTERM */ { if ( (SigTermOrig = signal(SIGTERM, SigTermHandler)) == SIG_ERR) Error("TrapSigTerm: error from signal setting SIGTERM", 0); } void RestoreSigTerm() /* Restore the original signal handler */ { if(AR_caught_sigterm && (SigTermOrig != SIG_DFL) ) SigTermOrig(SIGTERM); if ( signal(SIGTERM, SigTermOrig) == SIG_ERR) Error("RestoreSigTerm: error from restoring signal SIGTerm",0); } /*********************** SIGIOT *************************************/ #ifdef SIGIOT #if defined(SUN) && !defined(SOLARIS) SigType SigIotHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigIotHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("IOT signal was sent, status=",(int) sig); } void TrapSigIot() /* Trap SIGIOT */ { if ( signal(SIGIOT, SigIotHandler) == SIG_ERR) Error("TrapSigIot: error from signal setting SIGIOT", 0); } #endif /*********************** SIGCONT *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigContHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigContHandler(sig) #endif int sig; { /* Error("Trace Cont error, status=",(int) sig);*/ AR_caught_sig= sig; } void TrapSigCont() /* Trap SIGCONT */ { if ( signal(SIGCONT, SigContHandler) == SIG_ERR) Error("TrapSigCont: error from signal setting SIGCONT", 0); } /*********************** SIGXCPU *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigXcpuHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigXcpuHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Terminate signal was sent, status=",(int) sig); } void TrapSigXcpu() /* Trap SIGXCPU */ { if ( signal(SIGXCPU, SigXcpuHandler) == SIG_ERR) Error("TrapSigXcpu: error from signal setting SIGXCPU", 0); } /******************* external API *********************************/ void ARMCI_ChildrenTrapSignals() { #ifndef LAPI TrapSigBus(); #endif TrapSigFpe(); TrapSigIll(); #ifdef DO_CKPT TrapSigSegvSigaction(); #else TrapSigSegv(); #endif TrapSigSys(); TrapSigTrap(); TrapSigAbort(); TrapSigTerm(); TrapSigInt(); #if defined(LAPI) || defined(SGI) TrapSigIot(); #endif #ifdef SGI TrapSigXcpu(); #endif } void ARMCI_ParentTrapSignals() { #ifndef LAPI TrapSigChld(); #endif TrapSigHup(); } void ARMCI_RestoreSignals() { RestoreSigTerm(); RestoreSigInt(); RestoreSigSegv(); } void ARMCI_ParentRestoreSignals() { #ifndef LAPI RestoreSigChld(); #endif ARMCI_RestoreSignals(); RestoreSigHup(); } #ifdef DO_CKPT /*user can register a function with 3 parameters, 1st offending address * 2nd err number and third file descriptor*/ void ARMCI_Register_Signal_Handler(int sig, void (*func)()) { signal_arr[sig]=func; } #endif ga-5-3/armci/src-portals/portals.c0000640005473000001440000003436711471654236016016 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* ---------------------------------------------------------------------------------------------- *\ portals.c -- wrapper for commonly used portals calls author: ryan olson email: ryan@cray.com \* ---------------------------------------------------------------------------------------------- */ #include #include "armcip.h" /* ---------------------------------------------------------------------------------------------- *\ global variables \* ---------------------------------------------------------------------------------------------- */ ptl_process_id_t *portals_id_map = NULL; ptl_process_id_t *portals_cloned_id_map = NULL; size_t portalsMaxEagerMessageSize; MPI_Comm portals_smp_comm; /* ---------------------------------------------------------------------------------------------- *\ static variables for this object \* ---------------------------------------------------------------------------------------------- */ static int portals_verbose = 0; /* ---------------------------------------------------------------------------------------------- *\ portals wrappers \* ---------------------------------------------------------------------------------------------- */ int portals_init(ptl_handle_ni_t *nih) { int num_interfaces = 0; int rc; rc = PtlInit(&num_interfaces); if (rc != PTL_OK) { printf("PtlInit err %d\n", rc); return rc; } rc = PtlNIInit(CRAY_UK_SSNAL, PTL_PID_ANY, NULL, NULL, nih); if (rc != PTL_OK && rc != PTL_IFACE_DUP) { printf("PtlNIInit err %d\n", rc); return rc; } portalsMaxEagerMessageSize = PORTALS_MAX_EAGER_MESSAGE_SIZE; return PTL_OK; } int portals_finalize(ptl_handle_ni_t nih) { PtlNIFini(nih); PtlFini(); return PTL_OK; } int portals_getid(ptl_handle_ni_t nih, ptl_process_id_t *id) { int rc; rc = PtlGetId(nih, id); if(rc != PTL_OK) { printf("PtlGetId err %d\n",rc); return rc; } return PTL_OK; } int portals_create_eq(ptl_handle_ni_t nih, ptl_size_t count, ptl_handle_eq_t *eq_handle) { int rc; rc = PtlEQAlloc(nih, count, PTL_EQ_HANDLER_NONE, eq_handle); if (rc != PTL_OK) { printf("PtlEQAlloc err %d\n", rc); return rc; } return PTL_OK; } int portals_free_eq(ptl_handle_eq_t eq) { int rc; rc = PtlEQFree(eq); if (rc != PTL_OK) { printf("PtlEQFree err %d\n",rc); return rc; } return PTL_OK; } /* permanent buffers - such as unexpected receive buffers or data requests buffers should not be unlinked. client side buffers, such as large puts/accs would create a ME in front of the MATCH ALL unexpected buffer/data req ME. on the client side, the MATCH ALL ME should catch the ACKs */ int portals_me_attach(ptl_handle_ni_t nih, ptl_process_id_t match_id, ptl_match_bits_t match_bits, ptl_match_bits_t ignore_bits, ptl_handle_me_t *me_handle) { int rc = PtlMEAttach(nih,PORTALS_INDEX,match_id,match_bits,ignore_bits, PTL_UNLINK,PTL_INS_BEFORE,me_handle); if (rc != PTL_OK) { printf("PtlAttach err %d in me_attach\n",rc); return rc; } return PTL_OK; } int portals_me_insert(ptl_handle_me_t base, ptl_process_id_t pe_match_id, ptl_match_bits_t match_bits, ptl_match_bits_t ignore_bits, ptl_handle_me_t *me_handle) { int rc = PtlMEInsert(base,pe_match_id,match_bits,ignore_bits, PTL_UNLINK,PTL_INS_BEFORE,me_handle); if (rc != PTL_OK) { printf("PtlME err %d in portals_push_me\n",rc); return rc; } return rc; } int portals_me_unlink(ptl_handle_me_t meh) { int rc = PtlMEUnlink(meh); if(rc != PTL_OK) { printf("PtlMEUnlink err %d in me_unlink\n",rc); } return rc; } int portals_md_attach(ptl_handle_me_t me_handle, ptl_md_t md, ptl_unlink_t unlink_op, ptl_handle_md_t *md_handle) { int rc = PtlMDAttach(me_handle, md, unlink_op, md_handle); if (rc != PTL_OK) { printf("PtlMDAttach err %d\n",rc); return rc; } return PTL_OK; } int portals_md_bind(ptl_handle_ni_t nih, ptl_md_t md, ptl_unlink_t unlink_op, ptl_handle_md_t *md_handle) { int rc = PtlMDBind(nih, md, unlink_op, md_handle); if (rc != PTL_OK) { printf("PtlMDBind err %d\n",rc); return rc; } return rc; } int portals_eqwait(ptl_handle_eq_t eqh, ptl_event_t *ev) { int rc = PtlEQWait(eqh, ev); if (rc != PTL_OK) { printf("PtlEQWait err %d\n",rc); return rc; } return PTL_OK; } static int notify(portals_desc_t *desc, int state, char *name) { if(desc->state & state) { desc->state &= ~state; if(desc->state == 0) desc->done = 1; return 1; } else { printf("event: %s with desc state %x not %x\n",name,desc->state,state); abort(); return 0; } } int portals_wait(portals_desc_t *wait_on_desc) { int rc; ptl_event_t ev; portals_desc_t *desc = NULL; while(wait_on_desc->state) { rc = portals_eqwait(wait_on_desc->eqh, &ev); if (rc != PTL_OK) { printf("eq wait error in portals_wait\n"); abort(); } desc = (portals_desc_t *) ev.md.user_ptr; switch(ev.type) { case PTL_EVENT_SEND_START: if (portals_verbose) printf("%s event: send start\n",Portals_ID()); notify(desc, STATE_SEND_START, "send start"); break; case PTL_EVENT_SEND_END: if (portals_verbose) printf("%s event: send end\n",Portals_ID()); notify(desc, STATE_SEND_END, "send end"); break; case PTL_EVENT_REPLY_START: if (portals_verbose) printf("%s event: reply start\n",Portals_ID()); notify(desc, STATE_REPLY_START, "reply start"); break; case PTL_EVENT_REPLY_END: if (portals_verbose) printf("%s event: reply end\n",Portals_ID()); notify(desc, STATE_REPLY_END, "reply end"); break; case PTL_EVENT_ACK: if (portals_verbose) printf("%s event: ack\n",Portals_ID()); printf("%s event ack: md.threshold=%d\n",Portals_ID(),ev.md.threshold); notify(desc, STATE_ACK, "ack"); break; case PTL_EVENT_PUT_START: if (portals_verbose) printf("%s event: put start\n",Portals_ID()); notify(desc, STATE_PUT_START, "put start"); break; case PTL_EVENT_PUT_END: if (portals_verbose) printf("%s event: put end\n",Portals_ID()); if (notify(desc, STATE_PUT_END, "put end")) { // desc->len = ev.mlength; // desc->off = ev.offset; } break; case PTL_EVENT_GET_START: if (portals_verbose) printf("%s event: get start\n",Portals_ID()); notify(desc, STATE_GET_START, "get start"); break; case PTL_EVENT_GET_END: if (portals_verbose) printf("%s event: get end\n",Portals_ID()); notify(desc, STATE_GET_END, "get end"); break; case PTL_EVENT_UNLINK: if (portals_verbose) printf("%s event: unlink\n",Portals_ID()); notify(desc, STATE_UNLINK, "unlink"); break; default: printf("%s event: %d\n",Portals_ID(), ev.type); break; } } return PTL_OK; } int portals_put(portals_desc_t *desc) { int rc; int threshold = 1; ptl_md_t md = { 0 }; ptl_handle_md_t md_handle; ptl_ack_req_t ack_req = PTL_NOACK_REQ; # ifdef PORTALS_PUT_USE_ACK ack_req = PTL_ACK_REQ; threshold++; # endif md.start = desc->buffer; md.length = desc->length; md.threshold = threshold; md.options = 0; # ifndef PORTALS_PUT_USE_START md.options |= PTL_MD_EVENT_START_DISABLE; # endif md.user_ptr = desc; md.eq_handle = desc->eqh; rc = portals_md_bind(desc->nih, md, PTL_UNLINK, &md_handle); if (rc != PTL_OK) { printf("failed to bind local md in put; err %d",rc); Fatal_error(rc); } rc = PtlPut(md_handle, ack_req, desc->id, PORTALS_INDEX, 0, desc->mbits, 0, desc->hdr); if (rc != PTL_OK) { printf("PtlPut err %d\n",rc); return rc; } desc->done = 0; desc->state = STATE_SEND_END; # ifdef PORTALS_PUT_USE_START desc->state |= STATE_SEND_START; # endif # ifdef PORTALS_PUT_USE_ACK desc->state |= STATE_ACK; # endif return PTL_OK; } int portals_get(portals_desc_t* desc) { int rc; ptl_md_t md = { 0 }; ptl_handle_md_t md_handle; md.start = desc->buffer; md.length = desc->length; md.threshold = 2; md.options = 0; # ifndef PORTALS_GET_USE_START md.options |= PTL_MD_EVENT_START_DISABLE; # endif md.user_ptr = desc; md.eq_handle = desc->eqh; rc = portals_md_bind(desc->nih, md, PTL_UNLINK, &md_handle); if (rc != PTL_OK) { printf("failed to bind local md in get; err %d\n",rc); Fatal_error(rc); } rc = PtlGet(md_handle, desc->id, PORTALS_INDEX, 0, desc->mbits, 0); if (rc != PTL_OK) { printf("PtlGet err %d\n",rc); Fatal_error(rc); } desc->done = 0; desc->state = STATE_REPLY_END | STATE_SEND_END; # ifdef PORTALS_GET_USE_START desc->state |= STATE_REPLY_START; # endif return PTL_OK; } /* portals_desc_t* portals_get_free_desc(void) { int i,rc; portals_desc_t *desc = NULL; while(desc == NULL) { for(i=0; i= 0;bit--) { if ((mask << bit) & (unsigned char)*(data+ptr)) { printf("1"); } else { printf("0"); } } printf(" "); } printf("\n"); } void portals_print_summary() { printf("PORTALS_MAX_DESCRIPTORS = %d\n",PORTALS_MAX_DESCRIPTORS); printf("PORTALS_MAX_BUFS = %d\n",PORTALS_MAX_BUFS); printf("PORTALS_MAX_SMALL_BUFS = %d\n",PORTALS_MAX_SMALL_BUFS); printf("PORTALS_BUF_SIZE = %d\n",PORTALS_BUF_SIZE); printf("PORTALS_SMALL_BUF_SIZE = %d\n",PORTALS_SMALL_BUF_SIZE); printf("PORTALS_NREQUEST_BUFFERS = %d\n",PORTALS_NREQUEST_BUFFERS); printf("PORTALS_MAX_EAGER_MESSAGE_SIZE = %d\n",PORTALS_MAX_EAGER_MESSAGE_SIZE); return; } ga-5-3/armci/src-portals/acc.h0000640005473000001440000005223411647604104015050 0ustar d3n000users#ifndef _ACC_H_ #define _ACC_H_ typedef struct { float real; float imag; } complex_t; typedef struct { double real; double imag; } dcomplex_t; void c_d_accumulate_1d_(const double* const restrict alpha, double* const restrict A, const double* const restrict B, const int* const restrict rows); void c_f_accumulate_1d_(const float* const restrict alpha, float* const restrict A, const float* const restrict B, const int* const restrict rows); void c_c_accumulate_1d_(const complex_t* const restrict alpha, complex_t* const restrict A, const complex_t* const restrict B, const int* const restrict rows); void c_z_accumulate_1d_(const dcomplex_t* const restrict alpha, dcomplex_t* const restrict A, const dcomplex_t* const restrict B, const int* const restrict rows); void c_i_accumulate_1d_(const int* const restrict alpha, int* const restrict A, const int* const restrict B, const int* const restrict rows); void c_l_accumulate_1d_(const long* const restrict alpha, long* const restrict A, const long* const restrict B, const int* const restrict rows); void c_ll_accumulate_1d_(const long long* const restrict alpha, long long* const restrict A, const long long* const restrict B, const int* const restrict rows); void c_d_accumulate_2d_(const double* const restrict alpha, const int* const restrict rows, const int* const restrict cols, double* const restrict A, const int* const restrict ald, const double* const restrict B, const int* const restrict bld); void c_f_accumulate_2d_(const float* const restrict alpha, const int* const restrict rows, const int* const restrict cols, float* const restrict A, const int* const restrict ald, const float* const restrict B, const int* const restrict bld); void c_c_accumulate_2d_(const complex_t* const restrict alpha, const int* const restrict rows, const int* const restrict cols, complex_t* const restrict A, const int* const restrict ald, const complex_t* const restrict B, const int* const restrict bld); void c_z_accumulate_2d_(const dcomplex_t* const restrict alpha, const int* const restrict rows, const int* const restrict cols, dcomplex_t* const restrict A, const int* const restrict ald, const dcomplex_t* const restrict B, const int* const restrict bld); void c_i_accumulate_2d_(const int* const restrict alpha, const int* const restrict rows, const int* const restrict cols, int* const restrict A, const int* const restrict ald, const int* const restrict B, const int* const restrict bld); void c_l_accumulate_2d_(const long* const restrict alpha, const int* const restrict rows, const int* const restrict cols, long* const restrict A, const int* const restrict ald, const long* const restrict B, const int* const restrict bld); void c_ll_accumulate_2d_(const long long* const restrict alpha, const int* const restrict rows, const int* const restrict cols, long long* const restrict A, const int* const restrict ald, const long long* const restrict B, const int* const restrict bld); void c_d_accumulate_2d_u_(const double* const restrict alpha, const int* const restrict rows, const int* const restrict cols, double* const restrict A, const int* const restrict ald, const double* const restrict B, const int* const restrict bld); void c_f_accumulate_2d_u_(const float* const restrict alpha, const int* const restrict rows, const int* const restrict cols, float* const restrict A, const int* const restrict ald, const float* const restrict B, const int* const restrict bld); void c_c_accumulate_2d_u_(const complex_t* const restrict alpha, const int* const restrict rows, const int* const restrict cols, complex_t* const restrict A, const int* const restrict ald, const complex_t* const restrict B, const int* const restrict bld); void c_z_accumulate_2d_u_(const dcomplex_t* const restrict alpha, const int* const restrict rows, const int* const restrict cols, dcomplex_t* const restrict A, const int* const restrict ald, const dcomplex_t* const restrict B, const int* const restrict bld); void c_i_accumulate_2d_u_(const int* const restrict alpha, const int* const restrict rows, const int* const restrict cols, int* const restrict A, const int* const restrict ald, const int* const restrict B, const int* const restrict bld); void c_l_accumulate_2d_u_(const long* const restrict alpha, const int* const restrict rows, const int* const restrict cols, long* const restrict A, const int* const restrict ald, const long* const restrict B, const int* const restrict bld); void c_ll_accumulate_2d_u_(const long long* const restrict alpha, const int* const restrict rows, const int* const restrict cols, long long* const restrict A, const int* const restrict ald, const long long* const restrict B, const int* const restrict bld); void c_dadd_(const int* const restrict n, double* const restrict x, const double* const restrict work); void c_dadd2_(const int* const restrict n, double* const restrict x, const double* const restrict work, const double* const restrict work2); void c_dmult_(const int* const restrict n, double* const restrict x, const double* const restrict work); void c_dmult2_(const int* const restrict n, double* const restrict x, const double* const restrict work, const double* const restrict work2); #if ENABLE_F77 # ifdef WIN32 # define ATR __stdcall # else # define ATR # endif # define i_accumulate_1d_ F77_FUNC_(i_accumulate_1d,I_ACCUMULATE_2D) # define l_accumulate_1d_ c_l_accumulate_1d_ # define ll_accumulate_1d_ c_ll_accumulate_1d_ # define f_accumulate_1d_ F77_FUNC_(f_accumulate_1d,F_ACCUMULATE_2D) # define d_accumulate_1d_ F77_FUNC_(d_accumulate_1d,D_ACCUMULATE_2D) # define c_accumulate_1d_ F77_FUNC_(c_accumulate_1d,C_ACCUMULATE_2D) # define z_accumulate_1d_ F77_FUNC_(z_accumulate_1d,Z_ACCUMULATE_2D) # define i_accumulate_2d_ F77_FUNC_(i_accumulate_2d,I_ACCUMULATE_2D) # define l_accumulate_2d_ c_l_accumulate_2d_ # define ll_accumulate_2d_ c_ll_accumulate_2d_ # define f_accumulate_2d_ F77_FUNC_(f_accumulate_2d,F_ACCUMULATE_2D) # define d_accumulate_2d_ F77_FUNC_(d_accumulate_2d,D_ACCUMULATE_2D) # define c_accumulate_2d_ F77_FUNC_(c_accumulate_2d,C_ACCUMULATE_2D) # define z_accumulate_2d_ F77_FUNC_(z_accumulate_2d,Z_ACCUMULATE_2D) # define i_accumulate_2d_u_ F77_FUNC_(i_accumulate_2d_u,I_ACCUMULATE_2D_U) # define l_accumulate_2d_u_ c_l_accumulate_2d_u_ # define ll_accumulate_2d_u_ c_ll_accumulate_2d_u_ # define f_accumulate_2d_u_ F77_FUNC_(f_accumulate_2d_u,F_ACCUMULATE_2D_U) # define d_accumulate_2d_u_ F77_FUNC_(d_accumulate_2d_u,D_ACCUMULATE_2D_U) # define c_accumulate_2d_u_ F77_FUNC_(c_accumulate_2d_u,C_ACCUMULATE_2D_U) # define z_accumulate_2d_u_ F77_FUNC_(z_accumulate_2d_u,Z_ACCUMULATE_2D_U) # define fort_dadd_ F77_FUNC_(fort_dadd,FORT_DADD) # define fort_dadd2_ F77_FUNC_(fort_dadd2,FORT_DADD2) # define fort_dmult_ F77_FUNC_(fort_dmult,FORT_DMULT) # define fort_dmult2_ F77_FUNC_(fort_dmult2,FORT_DMULT2) void ATR d_accumulate_1d_(const double* const restrict alpha, double* const restrict A, const double* const restrict B, const int* const restrict rows); void ATR f_accumulate_1d_(const float* const restrict alpha, float* const restrict A, const float* const restrict B, const int* const restrict rows); void ATR c_accumulate_1d_(const complex_t* const restrict alpha, complex_t* const restrict A, const complex_t* const restrict B, const int* const restrict rows); void ATR z_accumulate_1d_(const dcomplex_t* const restrict alpha, dcomplex_t* const restrict A, const dcomplex_t* const restrict B, const int* const restrict rows); void ATR i_accumulate_1d_(const int* const restrict alpha, int* const restrict A, const int* const restrict B, const int* const restrict rows); void ATR l_accumulate_1d_(const long* const restrict alpha, long* const restrict A, const long* const restrict B, const int* const restrict rows); void ATR ll_accumulate_1d_(const long long* const restrict alpha, long long* const restrict A, const long long* const restrict B, const int* const restrict rows); void ATR d_accumulate_2d_(const double* const restrict alpha, const int* const restrict rows, const int* const restrict cols, double* const restrict A, const int* const restrict ald, const double* const restrict B, const int* const restrict bld); void ATR f_accumulate_2d_(const float* const restrict alpha, const int* const restrict rows, const int* const restrict cols, float* const restrict A, const int* const restrict ald, const float* const restrict B, const int* const restrict bld); void ATR c_accumulate_2d_(const complex_t* const restrict alpha, const int* const restrict rows, const int* const restrict cols, complex_t* const restrict A, const int* const restrict ald, const complex_t* const restrict B, const int* const restrict bld); void ATR z_accumulate_2d_(const dcomplex_t* const restrict alpha, const int* const restrict rows, const int* const restrict cols, dcomplex_t* const restrict A, const int* const restrict ald, const dcomplex_t* const restrict B, const int* const restrict bld); void ATR i_accumulate_2d_(const int* const restrict alpha, const int* const restrict rows, const int* const restrict cols, int* const restrict A, const int* const restrict ald, const int* const restrict B, const int* const restrict bld); void ATR l_accumulate_2d_(const long* const restrict alpha, const int* const restrict rows, const int* const restrict cols, long* const restrict A, const int* const restrict ald, const long* const restrict B, const int* const restrict bld); void ATR ll_accumulate_2d_(const long long* const restrict alpha, const int* const restrict rows, const int* const restrict cols, long long* const restrict A, const int* const restrict ald, const long long* const restrict B, const int* const restrict bld); void ATR d_accumulate_2d_u_(const double* const restrict alpha, const int* const restrict rows, const int* const restrict cols, double* const restrict A, const int* const restrict ald, const double* const restrict B, const int* const restrict bld); void ATR f_accumulate_2d_u_(const float* const restrict alpha, const int* const restrict rows, const int* const restrict cols, float* const restrict A, const int* const restrict ald, const float* const restrict B, const int* const restrict bld); void ATR c_accumulate_2d_u_(const complex_t* const restrict alpha, const int* const restrict rows, const int* const restrict cols, complex_t* const restrict A, const int* const restrict ald, const complex_t* const restrict B, const int* const restrict bld); void ATR z_accumulate_2d_u_(const dcomplex_t* const restrict alpha, const int* const restrict rows, const int* const restrict cols, dcomplex_t* const restrict A, const int* const restrict ald, const dcomplex_t* const restrict B, const int* const restrict bld); void ATR i_accumulate_2d_u_(const int* const restrict alpha, const int* const restrict rows, const int* const restrict cols, int* const restrict A, const int* const restrict ald, const int* const restrict B, const int* const restrict bld); void ATR l_accumulate_2d_u_(const long* const restrict alpha, const int* const restrict rows, const int* const restrict cols, long* const restrict A, const int* const restrict ald, const long* const restrict B, const int* const restrict bld); void ATR ll_accumulate_2d_u_(const long long* const restrict alpha, const int* const restrict rows, const int* const restrict cols, long long* const restrict A, const int* const restrict ald, const long long* const restrict B, const int* const restrict bld); void ATR fort_dadd_(const int* const restrict n, double* const restrict x, const double* const restrict work); void ATR fort_dadd2_(const int* const restrict n, double* const restrict x, const double* const restrict work, const double* const restrict work2); void ATR fort_dmult_(const int* const restrict n, double* const restrict x, const double* const restrict work); void ATR fort_dmult2_(const int* const restrict n, double* const restrict x, const double* const restrict work, const double* const restrict work2); #endif #if NOFORT # define I_ACCUMULATE_1D c_i_accumulate_1d_ # define L_ACCUMULATE_1D c_l_accumulate_1d_ # define LL_ACCUMULATE_1D c_ll_accumulate_1d_ # define D_ACCUMULATE_1D c_d_accumulate_1d_ # define C_ACCUMULATE_1D c_c_accumulate_1d_ # define Z_ACCUMULATE_1D c_z_accumulate_1d_ # define F_ACCUMULATE_1D c_f_accumulate_1d_ # define I_ACCUMULATE_2D c_i_accumulate_2d_ # define L_ACCUMULATE_2D c_l_accumulate_2d_ # define LL_ACCUMULATE_2D c_ll_accumulate_2d_ # define D_ACCUMULATE_2D c_d_accumulate_2d_ # define C_ACCUMULATE_2D c_c_accumulate_2d_ # define Z_ACCUMULATE_2D c_z_accumulate_2d_ # define F_ACCUMULATE_2D c_f_accumulate_2d_ # define FORT_DADD c_dadd_ # define FORT_DADD2 c_dadd2_ # define FORT_DMULT c_dmult_ # define FORT_DMULT2 c_dmult2_ #else # if defined(AIX) || defined(BGML) || defined(SGI_) # define I_ACCUMULATE_2D i_accumulate_2d_u_ # define L_ACCUMULATE_2D c_l_accumulate_2d_u_ # define LL_ACCUMULATE_2D c_ll_accumulate_2d_u_ # define D_ACCUMULATE_2D d_accumulate_2d_u_ # define C_ACCUMULATE_2D c_accumulate_2d_u_ # define Z_ACCUMULATE_2D z_accumulate_2d_u_ # define F_ACCUMULATE_2D f_accumulate_2d_u_ # else # define I_ACCUMULATE_2D i_accumulate_2d_ # define L_ACCUMULATE_2D c_l_accumulate_2d_ # define LL_ACCUMULATE_2D c_ll_accumulate_2d_ # define D_ACCUMULATE_2D d_accumulate_2d_ # define C_ACCUMULATE_2D c_accumulate_2d_ # define Z_ACCUMULATE_2D z_accumulate_2d_ # define F_ACCUMULATE_2D f_accumulate_2d_ # endif # if defined(CRAY) && !defined(__crayx1) # undef D_ACCUMULATE_2D # define D_ACCUMULATE_2D F77_FUNC_(daxpy_2d,DAXPY_2D) # endif # define I_ACCUMULATE_1D i_accumulate_1d_ # define L_ACCUMULATE_1D c_l_accumulate_1d_ # define LL_ACCUMULATE_1D c_ll_accumulate_1d_ # define D_ACCUMULATE_1D d_accumulate_1d_ # define C_ACCUMULATE_1D c_accumulate_1d_ # define Z_ACCUMULATE_1D z_accumulate_1d_ # define F_ACCUMULATE_1D f_accumulate_1d_ # define FORT_DADD fort_dadd_ # define FORT_DADD2 fort_dadd2_ # define FORT_DMULT fort_dmult_ # define FORT_DMULT2 fort_dmult2_ #endif /* !NOFORT */ // specific to src-gemini #if defined(AIX) || defined(NOUNDERSCORE) # define RA_ACCUMULATE_2D ra_accumulate_2d_u #elif defined(BGML) # define RA_ACCUMULATE_2D ra_accumulate_2d_u__ #elif defined(SGI_) # define RA_ACCUMULATE_2D RA_ACCUMULATE_2D_ #elif !defined(CRAY) && !defined(WIN32) && !defined(HITACHI) ||defined(__crayx1) # define RA_ACCUMULATE_2D RA_ACCUMULATE_2D_ #endif #ifndef CRAY_T3E void ATR RA_ACCUMULATE_2D(long*, int*, int*, long*, int*, long*, int*); #else #define RA_ACCUMULATE_2D RA_ACCUMULATE_2D_ void RA_ACCUMULATE_2D_(long*, int*, int*, long*, int*, long*, int*); #endif #endif /* _ACC_H_ */ ga-5-3/armci/src-portals/request.c0000640005473000001440000007772111643666515016027 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: request.c,v 1.74.2.11 2007-10-18 06:09:37 d3h325 Exp $ */ #include "armcip.h" #include "request.h" #include "memlock.h" #include "shmem.h" #include "copy.h" #include "gpc.h" #include #include #define DEBUG_ 0 #define DEBUG_MEM 0 #if 0 # define MARK_ENTER(func_) { fprintf(stdout, "ENTERING %s\n", func_); fflush(stdout); } # define MARK_EXIT(func_) { fprintf(stdout, "EXITING %s\n", func_); fflush(stdout); } #else # define MARK_ENTER(func_) # define MARK_EXIT(func_) #endif #if 0 # define PRNDBG3(m,a1,a2,a3) \ fprintf(stderr,"DBG %d: " m,armci_me,a1,a2,a3);fflush(stderr) # define PRNDBG(m) PRNDBG3(m,0,0,0) # define PRNDBG1(m,a1) PRNDBG3(m,a1,0,0) # define PRNDBG2(m,a1,a2) PRNDBG3(m,a1,a2,0) #else # define PRNDBG(m) # define PRNDBG1(m,a1) # define PRNDBG2(m,a1,a2) # define PRNDBG3(m,a1,a2,a3) #endif #if !defined(GM) && !defined(VIA) && !defined(LAPI) &&!defined(VAPI) double _armci_rcv_buf[MSG_BUFLEN_DBL]; double _armci_snd_buf[MSG_BUFLEN_DBL]; char* MessageSndBuffer = (char*)_armci_snd_buf; char* MessageRcvBuffer = (char*)_armci_rcv_buf; #endif #define MAX_EHLEN 248 #define ADDBUF(buf,type,val) *(type*)(buf) = (val); (buf) += sizeof(type) #define GETBUF(buf,type,var) (var) = *(type*)(buf); (buf) += sizeof(type) #define ALLIGN8(buf){size_t _adr=(size_t)(buf); \ _adr>>=3; _adr<<=3; _adr+=8; (buf) = (char*)_adr; } #ifndef CLN # define CLN 1 #endif #ifndef SERV # define SERV 2 #endif /*******************Routines to handle completion descriptor******************/ /*\ *Following the the routines to fill a completion descriptor, if necessary *copy the data to destination based on completion descriptor *NOTE, THE FOLLOWING ROUTINES ARE FOR CLIENTS ONLY \*/ /*\Routine to complete a vector request, data is in buf and descriptor in dscr \*/ extern int armci_direct_vector_get(request_header_t *msginfo , armci_giov_t darr[], int len, int proc); static void armci_complete_vector_get(armci_giov_t darr[],int len,void *buf) { int proc; request_header_t *msginfo = (request_header_t*) buf; proc = msginfo->to; #if defined(USE_SOCKET_VECTOR_API) armci_direct_vector_get(msginfo, darr, len, proc); #else armci_rcv_vector_data(proc, msginfo, darr, len); #endif FREE_SEND_BUFFER(buf); } /*\ Routine called from buffers.c to complete a request for which the buffer was * used for, so that the buffer can be reused. \*/ void armci_complete_req_buf(BUF_INFO_T *info, void *buffer) { request_header_t *msginfo = (request_header_t*) buffer; ARMCI_PR_DBG("enter",0); if(info->protocol==0)return; else if(info->protocol==SDSCR_IN_PLACE){ char *dscr = info->dscr; void *loc_ptr; int stride_levels; int *loc_stride_arr,*count; loc_ptr = *(void**)dscr; dscr += sizeof(void*); stride_levels = *(int*)dscr; dscr += sizeof(int); loc_stride_arr = (int*)dscr; dscr += stride_levels*sizeof(int); count = (int*)dscr; if(0 || DEBUG_){ if(armci_me==0){ printf("\n%d:extracted loc_ptr=%p, stridelevels=%d\n",armci_me, loc_ptr,stride_levels); fflush(stdout); } } armci_rcv_strided_data(msginfo->to, msginfo, msginfo->datalen, loc_ptr, stride_levels,loc_stride_arr,count); FREE_SEND_BUFFER(msginfo); } else if(info->protocol==VDSCR_IN_PLACE || info->protocol==VDSCR_IN_PTR){ char *dscr; int len,i; if(info->protocol==VDSCR_IN_PLACE){ dscr = info->dscr; //printf("\n%d:vdscr in place\n",armci_me); } else { dscr = info->ptr.dscrbuf; //printf("\n%d:vdscr in buf\n",armci_me); } GETBUF(dscr, long ,len); { armci_giov_t *darr; darr = (armci_giov_t *)malloc(sizeof(armci_giov_t)*len); if(!darr)armci_die("malloc in complete_req_buf failed",len); for(i = 0; i< len; i++){ int parlen, bytes; GETBUF(dscr, int, parlen); GETBUF(dscr, int, bytes); darr[i].ptr_array_len = parlen; darr[i].bytes = bytes; if(msginfo->operation==GET)darr[i].dst_ptr_array=(void **)dscr; else darr[i].src_ptr_array=(void **)dscr; dscr+=sizeof(void *)*parlen; } if (msginfo->operation==GET) armci_complete_vector_get(darr,len,buffer); } } else armci_die("armci_complete_req_buf,protocol val invalid",info->protocol); ARMCI_PR_DBG("exit",0); } extern long x_net_offset(void *,int); /*\ save a part of strided descriptor needed to complete request rmo: it seems as if save_ \*/ void armci_save_strided_dscr(char **bptr, void *rem_ptr,int rem_stride_arr[], int count[], int stride_levels,int is_nb,int proc) { int i; char *bufptr=*bptr; BUF_INFO_T *info=NULL; long network_offset,tmpoffset; ARMCI_PR_DBG("enter",0); # ifdef PORTALS_UNRESOLVED if(!is_nb){ network_offset=x_net_offset(rem_ptr,proc); if(DEBUG_){printf("\n%d:rem_ptr=%p offset=%d newrem=%p",armci_me,rem_ptr,network_offset,(char *)rem_ptr+network_offset);fflush(stdout);} rem_ptr = (char *)rem_ptr+network_offset; } # endif if(is_nb){ info=BUF_TO_BUFINFO(*bptr); bufptr = (info->dscr); } *(void**)bufptr = rem_ptr; bufptr += sizeof(void*); *(int*)bufptr = stride_levels; bufptr += sizeof(int); for(i=0;idscr); if(armci_me==0) printf("\n%d:rem_ptr %p=%p stride_levels %d=%d\n",armci_me, *(void**)bufptr,rem_ptr, *(int*)(bufptr + sizeof(void*)),stride_levels); } /*remote_strided expects the pointer to point to the end of descr hence..*/ if(is_nb) info->protocol=SDSCR_IN_PLACE; else *bptr=bufptr; ARMCI_PR_DBG("exit",0); } /*\ save a part of vector descriptor needed to complete request \*/ void armci_save_vector_dscr(char **bptr,armci_giov_t darr[],int len, int op,int is_nb, int proc) { int i,size=sizeof(int); BUF_INFO_T *info; char *buf,*bufptr=*bptr; void *rem_ptr; long offst; ARMCI_PR_DBG("enter",0); if(is_nb){ for(i=0;idscr; info->protocol=VDSCR_IN_PLACE; } else { info->ptr.dscrbuf = (void *)malloc(size); buf = (char *)info->ptr.dscrbuf; info->protocol=VDSCR_IN_PTR; } } else buf=bufptr; ADDBUF(buf,long,len); /* number of sets */ for(i=0;ibufid to val, else set it to the id of the buf \*/ void armci_set_nbhandle_bufid(armci_ihdl_t nb_handle,char *buf,int val) { BUF_INFO_T *info; if(buf){ info = BUF_TO_BUFINFO(buf); val = info->bufid; } nb_handle->bufid = val; } /**************End--Routines to handle completion descriptor******************/ /*\ send request to server to LOCK MUTEX \*/ void armci_rem_lock(int mutex, int proc, int *ticket) { request_header_t *msginfo; int *ibuf; int bufsize = sizeof(request_header_t)+sizeof(int); msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,LOCK,proc); bzero(msginfo,sizeof(request_header_t)); msginfo->datalen = sizeof(int); msginfo->dscrlen = 0; msginfo->from = armci_me; msginfo->to = proc; msginfo->operation = LOCK; msginfo->format = mutex; msginfo->bytes = msginfo->datalen + msginfo->dscrlen; ibuf = (int*)(msginfo+1); *ibuf = mutex; armci_send_req(proc, msginfo, bufsize, 0); /* receive ticket from server */ *ticket = *(int*)armci_rcv_data(proc,msginfo,0); FREE_SEND_BUFFER(msginfo); if(DEBUG_)fprintf(stderr,"%d receiving ticket %d\n",armci_me, *ticket); } void armci_server_lock(request_header_t *msginfo) { int *ibuf = (int*)(msginfo+1); int proc = msginfo->from; int mutex; int ticket; ARMCI_PR_DBG("enter",0); mutex = *(int*)ibuf; /* acquire lock on behalf of requesting process */ ticket = armci_server_lock_mutex(mutex, proc, msginfo->tag); if(ticket >-1){ /* got lock */ msginfo->datalen = sizeof(int); armci_send_data(msginfo, &ticket); } ARMCI_PR_DBG("exit",0); } /*\ send request to server to UNLOCK MUTEX \*/ void armci_rem_unlock(int mutex, int proc, int ticket) { request_header_t *msginfo; int *ibuf; int bufsize = sizeof(request_header_t)+sizeof(ticket); msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,UNLOCK,proc); bzero(msginfo,sizeof(request_header_t)); msginfo->dscrlen = msginfo->bytes = sizeof(ticket); msginfo->datalen = 0; msginfo->from = armci_me; msginfo->to = proc; msginfo->operation = UNLOCK; msginfo->format = mutex; ibuf = (int*)(msginfo+1); *ibuf = ticket; if(DEBUG_)fprintf(stderr,"%d sending unlock\n",armci_me); armci_send_req(proc, msginfo, bufsize,0); } /*\ server unlocks mutex and passes lock to the next waiting process \*/ void armci_server_unlock(request_header_t *msginfo, char* dscr) { int ticket = *(int*)dscr; int mutex = msginfo->format; int proc = msginfo->to; int waiting; waiting = armci_server_unlock_mutex(mutex,proc,ticket,&msginfo->tag); if(waiting >-1){ /* -1 means that nobody is waiting */ ticket++; /* pass ticket to the waiting process */ msginfo->from = waiting; msginfo->datalen = sizeof(ticket); armci_send_data(msginfo, &ticket); } } void armci_unlock_waiting_process(msg_tag_t tag, int proc, int ticket) { request_header_t header; request_header_t *msginfo = &header; msginfo->datalen = sizeof(int); msginfo->tag = tag; msginfo->from = proc; msginfo->to = armci_me; armci_send_data(msginfo, &ticket); } void * armci_server_ptr(int id){ char *buf; int bufsize = sizeof(int); request_header_t *msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,ATTACH,armci_me); bzero(msginfo,sizeof(request_header_t)); msginfo->from = armci_me; msginfo->to = SERVER_NODE(armci_clus_me); msginfo->dscrlen = 0; msginfo->datalen = sizeof(int); msginfo->operation = ATTACH; msginfo->bytes = msginfo->dscrlen+ msginfo->datalen; armci_copy(&id, msginfo +1, sizeof(int)); if(DEBUG_MEM){ printf("\n%d:attach req:sending id %d \n",armci_me,id);fflush(stdout); } armci_send_req(armci_master, msginfo, bufsize,0); buf= armci_rcv_data(armci_master,msginfo,sizeof(void *));/* receive response */ if(DEBUG_MEM){ printf("\n%d:attach req:got %p \n",armci_me,buf);fflush(stdout); } FREE_SEND_BUFFER(msginfo); ARMCI_PR_DBG("exit",0); return (void *)buf; } /*\ control message to the server, e.g.: ATTACH to shmem, return ptr etc. \*/ void armci_serv_attach_req(void *info, int ilen, long size, void* resp,int rlen) { char *buf; ARMCI_PR_DBG("enter",0); int bufsize = 2*sizeof(request_header_t)+ilen + sizeof(long)+sizeof(rlen); long *idlist=(long *)info; request_header_t *msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,ATTACH,armci_me); bzero(msginfo,sizeof(request_header_t)); msginfo->from = armci_me; msginfo->to = SERVER_NODE(armci_clus_me); msginfo->dscrlen = ilen; msginfo->datalen = sizeof(long)+sizeof(int); msginfo->operation = ATTACH; msginfo->bytes = msginfo->dscrlen+ msginfo->datalen; armci_copy(info, msginfo +1, ilen); if(DEBUG_MEM){printf("\n%d:sending idlist+1 %d, size %d, idlist[0] %d, idlist[1] %d\n",armci_me,idlist+1,size,idlist[0],idlist[1]);} buf = ((char*)msginfo) + ilen + sizeof(request_header_t); *((long*)buf) =size; *(int*)(buf+ sizeof(long)) = rlen; armci_send_req(armci_master, msginfo, bufsize,0); if(rlen){ buf= armci_rcv_data(armci_master, msginfo,rlen); /* receive response */ bcopy(buf, resp, rlen); FREE_SEND_BUFFER(msginfo); if(DEBUG_MEM){printf("%d:client attaching got ptr=%p %d bytes\n",armci_me,buf,rlen); fflush(stdout); } } ARMCI_PR_DBG("exit",0); } /*\ server initializes its copy of the memory lock data structures \*/ static void server_alloc_memlock(void *ptr_myclus) { int i; /* for protection, set pointers for processes outside local node NULL */ memlock_table_array = calloc(armci_nproc,sizeof(void*)); if(!memlock_table_array) armci_die("malloc failed for ARMCI lock array",0); /* set pointers for processes on local cluster node * ptr_myclus - corresponds to the master process */ for(i=0; i< armci_clus_info[armci_clus_me].nslave; i++){ memlock_table_array[armci_master +i] = ((char*)ptr_myclus) + MAX_SLOTS*sizeof(memlock_t)*i; } /* set pointer to the use flag */ #ifdef MEMLOCK_SHMEM_FLAG armci_use_memlock_table = (int*) (MAX_SLOTS*sizeof(memlock_t) + (char*) memlock_table_array[armci_clus_last]); if(DEBUG_) fprintf(stderr,"server initialized memlock %p\n",armci_use_memlock_table); #endif } static int allocate_memlock=1; /*\ server actions triggered by client request to ATTACH \*/ void armci_server_ipc(request_header_t* msginfo, void* descr, void* buffer, int buflen) { double *ptr; long *idlist = (long*)descr; long size = *(long*)buffer; int rlen = *(int*)(sizeof(long)+(char*)buffer); extern int **_armci_int_mutexes; ARMCI_PR_DBG("enter",0); if(size<0) armci_die("armci_server_ipc: size<0",(int)size); if(DEBUG_MEM)printf("\n%d:got idlist+1 %p, size %d, idlist[0] %d, idlist[1] %d",armci_me,idlist+1,size,idlist[0],idlist[1]); ptr=(double*)Attach_Shared_Region(idlist+1,size,idlist[0]); if(!ptr)armci_die("armci_server_ipc: failed to attach",0); /* provide data server with access to the memory lock data structures */ if(allocate_memlock){ allocate_memlock = 0; server_alloc_memlock(ptr); } if(_armci_int_mutexes==NULL){ printf("unresolved portals external\n"); abort(); # ifdef PORTALS_UNRESOLVED extern int _armci_server_mutex_ready; extern void *_armci_server_mutex_ptr; if(_armci_server_mutex_ready){ _armci_int_mutexes=(int **)_armci_server_mutex_ptr; } # endif } if(size>0)armci_set_mem_offset(ptr); if(msginfo->datalen != sizeof(long)+sizeof(int)) armci_die("armci_server_ipc: bad msginfo->datalen ",msginfo->datalen); if(rlen==sizeof(ptr)){ msginfo->datalen = rlen; armci_send_data(msginfo, &ptr); } else armci_die("armci_server_ipc: bad rlen",rlen); ARMCI_PR_DBG("exit",0); } /*\ send RMW request to server \*/ void armci_rem_rmw(int op, void *ploc, void *prem, int extra, int proc) { request_header_t *msginfo; char *buf; void *buffer; int bufsize = sizeof(request_header_t)+sizeof(long)+sizeof(void*); long offst; ARMCI_PR_DBG("enter",0); msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,op,proc); bzero(msginfo,sizeof(request_header_t)); msginfo->dscrlen = sizeof(void*); msginfo->from = armci_me; msginfo->to = proc; msginfo->operation = op; msginfo->datalen = sizeof(long); # ifdef PORTALS_UNRESOLVED offst=x_net_offset(prem,proc); prem = ((char *)prem+offst); # endif buf = (char*)(msginfo+1); ADDBUF(buf, void*, prem); /* pointer is shipped as descriptor */ /* data field: extra argument in fetch&add and local value in swap */ if(op==ARMCI_SWAP){ ADDBUF(buf, int, *((int*)ploc)); }else if(op==ARMCI_SWAP_LONG) { ADDBUF(buf, long, *((long*)ploc) ); msginfo->datalen = sizeof(long); }else { ADDBUF(buf, int, extra); } msginfo->bytes = msginfo->datalen+msginfo->dscrlen ; if(DEBUG_){ printf("%d sending RMW request %d to %d\n",armci_me,op,proc); fflush(stdout); } armci_send_req(proc, msginfo, bufsize,0); buffer = armci_rcv_data(proc,msginfo,0); /* receive response */ if(op==ARMCI_FETCH_AND_ADD || op== ARMCI_SWAP) *(int*)ploc = *(int*)buffer; else *(long*)ploc = *(long*)buffer; FREE_SEND_BUFFER(msginfo); ARMCI_PR_DBG("exit",0); } /*\ server response to RMW \*/ void armci_server_rmw(request_header_t* msginfo,void* ptr, void* pextra) { long lold; int iold; void *pold=0; int op = msginfo->operation; ARMCI_PR_DBG("enter",0); if(DEBUG_){ printf("%d server: executing RMW from %d. op=%d pextra=%p\n",armci_me,msginfo->from, op, pextra); fflush(stdout); } if(msginfo->datalen != sizeof(long)) armci_die2("armci_server_rmw: bad datalen=",msginfo->datalen,op); /* for swap operations *pextra has the value to swap * for fetc&add it carries the increment argument */ switch(op){ case ARMCI_SWAP: iold = *(int*) pextra; case ARMCI_FETCH_AND_ADD: pold = &iold; break; case ARMCI_SWAP_LONG: lold = *(long*) pextra; case ARMCI_FETCH_AND_ADD_LONG: pold = &lold; break; default: armci_die("armci_server_rmw: bad operation code=",op); } armci_generic_rmw(op, pold, *(int**)ptr, *(int*) pextra, msginfo->to); armci_send_data(msginfo, pold); ARMCI_PR_DBG("exit",0); } extern int armci_direct_vector_snd(request_header_t *msginfo , armci_giov_t darr[], int len, int proc); extern int armci_direct_vector(request_header_t *msginfo , armci_giov_t darr[], int len, int proc); int armci_rem_vector(int op, void *scale, armci_giov_t darr[],int len,int proc,int flag, armci_ihdl_t nb_handle) { char *buf,*buf0; request_header_t *msginfo; int bytes =0, s, slen=0; size_t adr; int bufsize = sizeof(request_header_t); int tag=0; if(nb_handle)tag=nb_handle->tag; /* compute size of the buffer needed */ for(s=0; stag,0); if(nb_handle->bufid == NB_NONE) armci_set_nbhandle_bufid(nb_handle,buf,0); } buf += sizeof(request_header_t); /* fill vector descriptor */ armci_save_vector_dscr(&buf,darr,len,op,0,proc); /* align buf for doubles (8-bytes) before copying data */ adr = (size_t)buf; adr >>=3; adr <<=3; adr +=8; buf = (char*)adr; msginfo->ehlen = 0; /* fill message header */ msginfo->dscrlen = buf - buf0 - sizeof(request_header_t); msginfo->from = armci_me; msginfo->to = proc; msginfo->operation = op; msginfo->format = VECTOR; msginfo->datalen = bytes; /* put scale for accumulate */ switch(op){ case ARMCI_ACC_INT: *(int*)buf = *(int*)scale; slen= sizeof(int); break; case ARMCI_ACC_DCP: ((double*)buf)[0] = ((double*)scale)[0]; ((double*)buf)[1] = ((double*)scale)[1]; slen=2*sizeof(double);break; case ARMCI_ACC_DBL: *(double*)buf = *(double*)scale; slen = sizeof(double); break; case ARMCI_ACC_CPL: ((float*)buf)[0] = ((float*)scale)[0]; ((float*)buf)[1] = ((float*)scale)[1]; slen=2*sizeof(float);break; case ARMCI_ACC_FLT: *(float*)buf = *(float*)scale; slen = sizeof(float); break; default: slen=0; } buf += slen; msginfo->datalen += slen; msginfo->bytes = msginfo->datalen+msginfo->dscrlen; /* for put and accumulate copy data into buffer */ if(op != GET){ /* fprintf(stderr,"sending %lf\n",*(double*)darr[0].src_ptr_array[0]);*/ armci_vector_to_buf(darr, len, buf); } armci_send_req(proc, msginfo, bufsize,tag); /*x_buf_send_complete(buf0);*/ if(nb_handle && op==GET) armci_save_vector_dscr(&buf0,darr,len,op,1,proc); if(op == GET&& !nb_handle){ armci_complete_vector_get(darr,len,msginfo); } return 0; } #define CHUN_ (8*8096) #define CHUN 200000 /*\ client version of remote strided operation \*/ int armci_rem_strided(int op, void* scale, int proc, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, ext_header_t *h, int flag,armci_ihdl_t nb_handle) { char *buf, *buf0; request_header_t *msginfo; int i, slen=0, bytes; void *rem_ptr; int *rem_stride_arr; int bufsize = sizeof(request_header_t); int ehlen =0; msg_tag_t msg_tag; int tag=0; /* we send ext header only for last chunk */ #if 0 if(h) ehlen = h->len; #else if(h) if(h->last) ehlen = h->len; #endif if(ehlen>MAX_EHLEN || ehlen <0) armci_die2("armci_rem_strided ehlen out of range",MAX_EHLEN,ehlen); /* calculate size of the buffer needed */ for(i=0, bytes=1;i<=stride_levels;i++)bytes*=count[i]; bufsize += bytes+sizeof(void*)+2*sizeof(int)*(stride_levels+1) +ehlen +2*sizeof(double) + 16; /* +scale+alignment */ if (flag){ if(op==GET)bufsize -=bytes; } buf = buf0= GET_SEND_BUFFER((bufsize),op,proc); msginfo = (request_header_t*)buf; bzero(msginfo,sizeof(request_header_t)); if(nb_handle) #ifdef ACC_SMP if(!ARMCI_ACC(op)) #endif { // printf("%s: non-blocking ops not yet supported\n",Portals_ID()); // abort(); /* INIT_SENDBUF_INFO(nb_handle,buf,op,proc); same as _armci_buf_set_tag, why here? */ _armci_buf_set_tag(buf,nb_handle->tag,0); if(nb_handle->bufid == NB_NONE) armci_set_nbhandle_bufid(nb_handle,buf,0); tag = nb_handle->tag; } if(op == GET){ rem_ptr = src_ptr; rem_stride_arr = src_stride_arr; }else{ rem_ptr = dst_ptr; rem_stride_arr = dst_stride_arr; } msginfo->datalen=bytes; /* fill strided descriptor */ buf += sizeof(request_header_t); /*this function fills the dscr into buf and also moves the buf ptr to the end of the dscr*/ armci_save_strided_dscr(&buf,rem_ptr,rem_stride_arr,count,stride_levels,0,proc); /* align buf for doubles (8-bytes) before copying data */ ALLIGN8(buf); /* fill message header */ msginfo->from = armci_me; msginfo->to = proc; msginfo->format = STRIDED; msginfo->operation = op; /* put scale for accumulate */ switch(op){ case ARMCI_ACC_INT: *(int*)buf = *(int*)scale; slen= sizeof(int); break; case ARMCI_ACC_DCP: ((double*)buf)[0] = ((double*)scale)[0]; ((double*)buf)[1] = ((double*)scale)[1]; slen=2*sizeof(double);break; case ARMCI_ACC_DBL: *(double*)buf = *(double*)scale; slen = sizeof(double); break; case ARMCI_ACC_CPL: ((float*)buf)[0] = ((float*)scale)[0]; ((float*)buf)[1] = ((float*)scale)[1]; slen=2*sizeof(float);break; case ARMCI_ACC_FLT: *(float*)buf = *(float*)scale; slen = sizeof(float); break; case ARMCI_ACC_LNG: *(long*)buf = *(long*)scale; slen = sizeof(long); break; default: slen=0; } /* if(ARMCI_ACC(op))printf("%d client len=%d alpha=%lf data=%lf,%lf\n", armci_me, buf-(char*)msginfo,((double*)buf)[0],*((double*)src_ptr), ((double*)buf)[1]); */ buf += slen; /**** add extended header *******/ if(ehlen){ bcopy(h->exthdr,buf,ehlen); i = ehlen%8; ehlen += (8-i); /* make sure buffer is still alligned */ buf += ehlen; } msginfo->ehlen = ehlen; msginfo->dscrlen = buf - buf0 - sizeof(request_header_t); msginfo->bytes = msginfo->datalen+msginfo->dscrlen; if(op == GET){ /* if(nb_handle) { printf("%s rem_strided: nb gets not yet available\n",Portals_ID()); abort(); } */ armci_send_req(proc, msginfo, bufsize,tag); armci_save_strided_dscr(&buf0,dst_ptr,dst_stride_arr,count, stride_levels,1,proc); # ifdef PORTALS_ALLOW_NBGETS if(!nb_handle){ # endif armci_rcv_strided_data(proc, msginfo, msginfo->datalen, dst_ptr, stride_levels, dst_stride_arr, count); FREE_SEND_BUFFER(msginfo); # ifdef PORTALS_ALLOW_NBGETS } # endif } else { /* for put and accumulate send data */ armci_send_strided(proc,msginfo, buf, src_ptr, stride_levels, src_stride_arr, count,tag); } return 0; } void armci_process_extheader(request_header_t *msginfo, char *dscr, char* buf, int buflen) { armci_flag_t *h; int *flag; h = (armci_flag_t*)(dscr + msginfo->dscrlen - msginfo->ehlen); #if 0 if(msginfo->ehlen)printf("%d:server from=%d len=%d: ptr=%p val=%d\n",armci_me,msginfo->from, msginfo->ehlen,h->ptr,h->val); fflush(stdout); #endif flag = (int*)(h->ptr); *flag = h->val; } void armci_server(request_header_t *msginfo, char *dscr, char* buf, int buflen) { int buf_stride_arr[MAX_STRIDE_LEVEL+1]; int *loc_stride_arr,slen; int *count, stride_levels; void *buf_ptr, *loc_ptr; void *scale; char *dscr_save = dscr; int rc, i,proc; int stat; ARMCI_PR_DBG("enter",msginfo->datalen);fflush(stdout); /*return if using readv/socket for put*/ if(msginfo->operation==PUT && msginfo->datalen==0){ if(msginfo->ehlen) /* process extra header if available */ armci_process_extheader(msginfo, dscr, buf, buflen); return; } /* unpack descriptor record */ loc_ptr = *(void**)dscr; dscr += sizeof(void*); stride_levels = *(int*)dscr; dscr += sizeof(int); loc_stride_arr = (int*)dscr; dscr += stride_levels*sizeof(int); count = (int*)dscr; /* compute stride array for buffer */ buf_stride_arr[0]=count[0]; for(i=0; i< stride_levels; i++) buf_stride_arr[i+1]= buf_stride_arr[i]*count[i+1]; /* get scale for accumulate, adjust buf to point to data */ switch(msginfo->operation){ case ARMCI_ACC_INT: slen = sizeof(int); break; case ARMCI_ACC_DCP: slen = 2*sizeof(double); break; case ARMCI_ACC_DBL: slen = sizeof(double); break; case ARMCI_ACC_CPL: slen = 2*sizeof(float); break; case ARMCI_ACC_FLT: slen = sizeof(float); break; case ARMCI_ACC_LNG: slen = sizeof(long); break; default: slen=0; } scale = dscr_save+ (msginfo->dscrlen - slen -msginfo->ehlen); /* if(ARMCI_ACC(msginfo->operation)) fprintf(stderr,"%d in server len=%d slen=%d alpha=%lf data=%lf\n", armci_me, msginfo->dscrlen, slen, *(double*)scale,*(double*)buf); */ buf_ptr = buf; /* data in buffer */ proc = msginfo->to; if(msginfo->operation == GET){ armci_send_strided_data(proc, msginfo, buf, loc_ptr, stride_levels, loc_stride_arr, count); /* fprintf(stderr, "GET response sent with tag: %d\n, msginfo->tag", msginfo->tag); */ } else{ if((rc = armci_op_strided(msginfo->operation, scale, proc, buf_ptr, buf_stride_arr, loc_ptr, loc_stride_arr, count, stride_levels, 1,NULL))) armci_die("server_strided: op from buf failed",rc); } if(msginfo->ehlen) /* process extra header if available */ armci_process_extheader(msginfo, dscr_save, buf, buflen); ARMCI_PR_DBG("exit",0); } void armci_server_vector( request_header_t *msginfo, char *dscr, char* buf, int buflen) { int proc; long len; void *scale; int i,s; char *sbuf = buf; if(msginfo->operation==PUT && msginfo->datalen==0)return;/*return if using readv/socket for put*/ /* unpack descriptor record */ GETBUF(dscr, long ,len); /* get scale for accumulate, adjust buf to point to data */ scale = buf; switch(msginfo->operation){ case ARMCI_ACC_INT: buf += sizeof(int); break; case ARMCI_ACC_DCP: buf += 2*sizeof(double); break; case ARMCI_ACC_DBL: buf += sizeof(double); break; case ARMCI_ACC_CPL: buf += 2*sizeof(float); break; case ARMCI_ACC_FLT: buf += sizeof(float); break; } proc = msginfo->to; /*fprintf(stderr,"scale=%lf\n",*(double*)scale);*/ /* execute the operation */ switch(msginfo->operation) { case GET: /* fprintf(stderr, "%d:: Got a vector message!!\n", armci_me); */ if(msginfo->ehlen) { armci_die("Unexpected vector message with non-zero ehlen. GPC call?", msginfo->ehlen); } else { for(i = 0; i< len; i++){ int parlen, bytes; void **ptr; GETBUF(dscr, int, parlen); GETBUF(dscr, int, bytes); /* fprintf(stderr,"len=%d bytes=%d parlen=%d\n",len,bytes,parlen);*/ ptr = (void**)dscr; dscr += parlen*sizeof(char*); for(s=0; s< parlen; s++){ armci_copy(ptr[s], buf, bytes); buf += bytes; } } /* fprintf(stderr,"%d:: VECTOR GET. server sending buffer %p datalen=%d\n",armci_me, sbuf, msginfo->datalen); */ armci_send_data(msginfo, sbuf); } break; case PUT: /* fprintf(stderr,"received in buffer %lf\n",*(double*)buf);*/ for(i = 0; i< len; i++){ int parlen, bytes; void **ptr; GETBUF(dscr, int, parlen); GETBUF(dscr, int, bytes); ptr = (void**)dscr; dscr += parlen*sizeof(char*); for(s=0; s< parlen; s++){ /* armci_copy(buf, ptr[s], bytes); */ bcopy(buf, ptr[s], (size_t)bytes); buf += bytes; } } break; default: /* this should be accumulate */ if(!ARMCI_ACC(msginfo->operation)) armci_die("v server: wrong op code",msginfo->operation); /* fprintf(stderr,"received first=%lf last =%lf in buffer\n",*/ /* *((double*)buf),((double*)buf)[99]);*/ for(i = 0; i< len; i++){ int parlen, bytes; void **ptr; GETBUF(dscr, int, parlen); GETBUF(dscr, int, bytes); ptr = (void**)dscr; dscr += parlen*sizeof(char*); armci_lockmem_scatter(ptr, parlen, bytes, proc); for(s=0; s< parlen; s++){ armci_acc_2D(msginfo->operation, scale, proc, buf, ptr[s], bytes, 1, bytes, bytes, 0); buf += bytes; } ARMCI_UNLOCKMEM(proc); } } } ga-5-3/armci/src-portals/armci.c0000640005473000001440000005676312036056644015426 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: armci.c,v 1.114.2.17 2007-08-30 22:58:18 manoj Exp $ */ /* DISCLAIMER * * This material was prepared as an account of work sponsored by an * agency of the United States Government. Neither the United States * Government nor the United States Department of Energy, nor Battelle, * nor any of their employees, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR * ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, * COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, * SOFTWARE, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT * INFRINGE PRIVATELY OWNED RIGHTS. * * * ACKNOWLEDGMENT * * This software and its documentation were produced with United States * Government support under Contract Number DE-AC06-76RLO-1830 awarded by * the United States Department of Energy. The United States Government * retains a paid-up non-exclusive, irrevocable worldwide license to * reproduce, prepare derivative works, perform publicly and display * publicly by or for the US Government, including the right to * distribute to other US Government contractors. */ #define EXTERN /*#define PRINT_BT*/ #include #include #include #if defined(CRAY) && !defined(__crayx1) # include # include # include #endif #ifdef LAPI # include "lapidefs.h" #endif #include #include "armcip.h" #include "copy.h" #include "memlock.h" #include "parmci.h" #include "shmem.h" #include "signaltrap.h" #ifdef ARMCIX #include "x/armcix.h" #endif #ifdef BGML #include "bgml.h" #include #include "bgmldefs.h" extern void armci_msg_barrier(void); #endif #ifdef CRAY_SHMEM # ifdef CRAY_XT # include # else # include # endif #endif #include /* global variables */ int armci_me, armci_Sme, armci_nproc; int armci_clus_me, armci_nclus, armci_master; int armci_clus_first, armci_clus_last; int *_armci_argc=NULL; char ***_armci_argv=NULL; int _armci_initialized_args=0; int _armci_initialized=0; int _armci_terminating =0; thread_id_t armci_usr_tid; armci_ireq_t armci_inb_handle[ARMCI_MAX_IMPLICIT];/*implicit non-blocking handle*/ #ifndef HITACHI double armci_internal_buffer[BUFSIZE_DBL]; #endif #if defined(SYSV) || defined(WIN32) || defined(MMAP) || defined(HITACHI) || defined(CATAMOUNT) || defined(BGML) # include "locks.h" lockset_t lockid; #endif int* armci_prot_switch_fence=NULL; int armci_prot_switch_preproc = -1; int armci_prot_switch_preop = -1; #ifdef BGML /* void armci_allocate_locks(); */ void armci_init_memlock(); #endif #ifdef LIBELAN_ATOMICS ELAN_ATOMIC *a; #warning "Enabling new atomics" #endif typedef struct{ int sent; int received; int waited; }armci_notify_t; armci_notify_t **_armci_notify_arr; void ARMCI_Cleanup() { #if defined(DATA_SERVER) if(armci_nclus >1){ armci_wait_for_server(); } #endif #if (defined(SYSV) || defined(WIN32) || defined(MMAP))&& !defined(HITACHI) Delete_All_Regions(); if(armci_nproc>1) #if !defined(LAPI) DeleteLocks(lockid); #endif #ifndef WIN32 ARMCI_RestoreSignals(); #endif #endif armci_transport_cleanup(); } int armci_getbufsize() { return(BUFSIZE); } void armci_notify_init() { int rc,bytes=sizeof(armci_notify_t)*armci_nproc; #ifdef DOELAN4 armci_elan_notify_init(); return; #endif _armci_notify_arr= (armci_notify_t**)malloc(armci_nproc*sizeof(armci_notify_t*)); if(!_armci_notify_arr)armci_die("armci_notify_ini:malloc failed",armci_nproc); if((rc=PARMCI_Malloc((void **)_armci_notify_arr, bytes))) armci_die(" armci_notify_init: armci_malloc failed",bytes); bzero(_armci_notify_arr[armci_me], bytes); } static void armci_perror_msg() { char perr_str[80]; if(!errno)return; sprintf(perr_str,"Last System Error Message from Task %d:",armci_me); perror(perr_str); } static void armci_abort(int code) { abort(); #if !defined(BGML) armci_perror_msg(); #endif ARMCI_Cleanup(); /* data server process cannot use message-passing library to abort * it simply exits, parent will get SIGCHLD and abort the program */ #if defined(DATA_SERVER) if(armci_me<0)_exit(1); else #endif armci_msg_abort(code); } void armci_die(char *msg, int code) { void *bt[100]; if(_armci_terminating)return; else _armci_terminating=1; if(SERVER_CONTEXT){ fprintf(stdout,"%d(s):%s: %d\n",armci_me, msg, code); fflush(stdout); fprintf(stderr,"%d(s):%s: %d\n",armci_me, msg, code); }else{ fprintf(stdout,"%d:%s: %d\n",armci_me, msg, code); fflush(stdout); fprintf(stderr,"%d:%s: %d\n",armci_me, msg, code); } #ifdef PRINT_BT backtrace_symbols_fd(bt, backtrace(bt, 100), 2); #endif armci_abort(code); } void armci_die2(char *msg, int code1, int code2) { void *bt[100]; if(_armci_terminating)return; else _armci_terminating=1; if(SERVER_CONTEXT){ fprintf(stdout,"%d(s):%s: (%d,%d)\n",armci_me,msg,code1,code2); fflush(stdout); fprintf(stderr,"%d(s):%s: (%d,%d)\n",armci_me,msg,code1,code2); }else{ fprintf(stdout,"%d:%s: (%d,%d)\n",armci_me,msg,code1,code2); fflush(stdout); fprintf(stderr,"%d:%s: (%d,%d)\n",armci_me,msg,code1,code2); } #ifdef PRINT_BT backtrace_symbols_fd(bt, backtrace(bt, 100), 2); #endif armci_abort(code1); } void ARMCI_Error(char *msg, int code) { armci_die(msg,code); } void armci_allocate_locks() { /* note that if ELAN_ACC is defined the scope of locks is limited to SMP */ #if !defined(CRAY_SHMEM) && (defined(HITACHI) || defined(CATAMOUNT) || \ (defined(QUADRICS) && defined(_ELAN_LOCK_H) && !defined(ELAN_ACC))) armcill_allocate_locks(NUM_LOCKS); #elif (defined(SYSV) || defined(WIN32) || defined(MMAP)) && !defined(HITACHI) if(armci_nproc == 1)return; # if defined(SPINLOCK) || defined(PMUTEX) || defined(PSPIN) CreateInitLocks(NUM_LOCKS, &lockid); # else if(armci_master==armci_me)CreateInitLocks(NUM_LOCKS, &lockid); armci_msg_clus_brdcst(&lockid, sizeof(lockid)); if(armci_master != armci_me)InitLocks(NUM_LOCKS, lockid); # endif #endif } void ARMCI_Set_shm_limit(unsigned long shmemlimit) { #if (defined(SYSV) || defined(WIN32) || defined(MMAP)) && !defined(HITACHI) #define EXTRASHM 1024 /* extra shmem used internally in ARMCI */ unsigned long limit; limit = shmemlimit + EXTRASHM; armci_set_shmem_limit_per_core(limit); #endif } /*\ allocate and initialize memory locking data structure \*/ void armci_init_memlock() { int bytes = MAX_SLOTS*sizeof(memlock_t); int rc, msize_per_proc=bytes; #ifdef MEMLOCK_SHMEM_FLAG /* last proc on node allocates memlock flag in shmem */ if(armci_clus_last == armci_me) bytes += sizeof(int); #endif memlock_table_array = malloc(armci_nproc*sizeof(void*)); if(!memlock_table_array) armci_die("malloc failed for ARMCI lock array",0); rc = PARMCI_Malloc(memlock_table_array, bytes); if(rc) armci_die("failed to allocate ARMCI memlock array",rc); armci_msg_barrier(); bzero(memlock_table_array[armci_me],bytes); #ifdef BGML bgml_init_locks ((void *) memlock_table_array[armci_me]); #elif ARMCIX ARMCIX_init_memlock ((memlock_t *) memlock_table_array[armci_me]); #endif #ifdef MEMLOCK_SHMEM_FLAG /* armci_use_memlock_table is a pointer to local memory variable=1 * we overwrite the pointer with address of shared memory variable * armci_use_memlock_table and initialize it >0 */ armci_use_memlock_table = (int*) (msize_per_proc + (char*) memlock_table_array[armci_clus_last]); /* printf("%d: last=%d bytes=%d ptr =(%d, %d)\n", armci_me,armci_clus_last,bytes,armci_use_memlock_table, memlock_table_array[armci_clus_last]); fflush(stdout); */ if(armci_clus_last == armci_me) *armci_use_memlock_table =1+armci_me; #endif *armci_use_memlock_table = 0; armci_msg_barrier(); } #if defined(SYSV) || defined(WIN32) static void armci_check_shmmax() { long mylimit, limit; mylimit = limit = (long) armci_max_region(); armci_msg_bcast_scope(SCOPE_MASTERS, &limit, sizeof(long), 0); if(mylimit != limit){ printf("%d:Shared mem limit in ARMCI is %ld bytes on node %s vs %ld on %s\n", armci_me,mylimit<<10,armci_clus_info[armci_clus_me].hostname, limit<<10, armci_clus_info[0].hostname); fflush(stdout); sleep(1); armci_die("All nodes must have the same SHMMAX limit if NO_SHM is not defined",0); } } #endif extern void armci_region_shm_malloc(void *ptr_arr[], size_t bytes); void ARMCI_NetInit() { /*armci_portals_net_init();*/ } int PARMCI_Init_args(int *argc, char ***argv) { armci_msg_init(argc,argv); _armci_argc = argc; _armci_argv = argv; _armci_initialized_args=1; return PARMCI_Init(); } extern void *sbrk(intptr_t); int PARMCI_Init() { caddr_t atbeginbrval = (caddr_t)sbrk(0); if(_armci_initialized>0) return 0; #ifdef NEW_MALLOC mallopt(M_MMAP_MAX, 0); mallopt(M_TRIM_THRESHOLD, -1); #endif armci_msg_init(NULL, NULL); armci_nproc = armci_msg_nproc(); armci_me = armci_msg_me(); armci_usr_tid = THREAD_ID_SELF(); /*remember the main user thread id */ armci_init_clusinfo(); armci_prot_switch_fence = malloc(sizeof(int*)*armci_nproc); assert(armci_prot_switch_fence !=NULL); armci_init_portals(atbeginbrval); #ifdef MPI armci_group_init(); #endif #ifndef NEW_MALLOC armci_krmalloc_init_localmem(); #endif #if defined(SYSV) || defined(WIN32) || defined(MMAP) if(ARMCI_Uses_shm() ) { armci_shmem_init(); } #endif armci_allocate_locks(); armci_init_fence(); #if ARMCI_ENABLE_GPC_CALLS gpc_init_signals(); #endif armci_msg_barrier(); armci_init_memlock(); /* allocate data struct for locking memory areas */ armci_msg_barrier(); //if(armci_me == 0) code_summary(); armci_msg_barrier(); armci_msg_gop_init(); _armci_initialized++; return 0; } void PARMCI_Finalize() { if(!_armci_initialized)return; _armci_initialized--; if(_armci_initialized)return; _armci_terminating =1; armci_msg_barrier(); if(armci_me==armci_master) ARMCI_ParentRestoreSignals(); #ifdef PORTALS request_header_t msg; portals_ds_req_t req; ptl_process_id_t dsid = portals_id_map[armci_me]; msg.operation = QUIT; if(armci_me == armci_master) { portalsBlockingRemoteOperationToNode(&msg,sizeof(request_header_t),armci_clus_me); } armci_msg_barrier(); portals_cp_finalize(); #else ARMCI_Cleanup(); armci_msg_barrier(); armci_group_finalize(); free(armci_prot_switch_fence); #endif #ifdef MPI MPI_Comm_free(&ARMCI_COMM_WORLD); #endif } /* Indicates whether ARMCI_Init or ARMCI_Init_args has been called. */ int PARMCI_Initialized() { return (_armci_initialized > 0) ? 1 : 0; } #if !(defined(SYSV) || defined(WIN32)) void ARMCI_Set_shmem_limit(unsigned long shmemlimit) { /* not applicable here * aborting would make user's life harder */ } #endif void ARMCI_Copy(void *src, void *dst, int n) { armci_copy(src,dst,n); } extern void cpu_yield(); void armci_util_wait_int(volatile int *p, int val, int maxspin) { int count=0; extern void cpu_yield(); while(*p != val) if((++count)proc); if(direct) { return(success); } if(nb_handle) { if(nb_handle->agg_flag) { armci_agg_complete(nb_handle, UNSET); return (success); } if(nb_handle->tag!=0 && nb_handle->bufid==NB_NONE){ ARMCI_NB_WAIT(nb_handle->cmpl_info); __asm__ __volatile__ ("mfence" ::: "memory"); __asm__ __volatile__ ("sfence" ::: "memory"); return(success); } # ifdef COMPLETE_HANDLE COMPLETE_HANDLE(nb_handle->bufid,nb_handle->tag,(&success)); # endif } __asm__ __volatile__ ("mfence" ::: "memory"); __asm__ __volatile__ ("sfence" ::: "memory"); return(success); } /** * implicit handle */ static char hdl_flag[ARMCI_MAX_IMPLICIT]; static int impcount=0; armci_ihdl_t armci_set_implicit_handle (int op, int proc) { int i=impcount%ARMCI_MAX_IMPLICIT; if(hdl_flag[i]=='1') PARMCI_Wait((armci_hdl_t*)&armci_inb_handle[i]); #ifdef BGML armci_inb_handle[i].count=0; #endif armci_inb_handle[i].tag = GET_NEXT_NBTAG(); armci_inb_handle[i].op = op; armci_inb_handle[i].proc = proc; armci_inb_handle[i].bufid = NB_NONE; armci_inb_handle[i].agg_flag = 0; hdl_flag[i]='1'; ++impcount; return &armci_inb_handle[i]; } /* wait for all non-blocking operations to finish */ int PARMCI_WaitAll () { #ifdef BGML BGML_WaitAll(); #elif ARMCIX ARMCIX_WaitAll (); #else int i; if(impcount) { for(i=0; iagg_flag = 1; ((armci_ihdl_t)(nb_handle))->proc = -1; } void ARMCI_UNSET_AGGREGATE_HANDLE(armci_hdl_t* nb_handle) { ((armci_ihdl_t)(nb_handle))->agg_flag = 0; ((armci_ihdl_t)(nb_handle))->proc = -1; } int parmci_notify(int proc) { #ifdef DOELAN4 if(proc==armci_me){ return 0; } #endif #if defined(GM) || (defined(DOELAN4) && defined(ELAN_ACC)) { extern int armci_inotify_proc(int); return(armci_inotify_proc(proc)); } #else armci_notify_t *pnotify = _armci_notify_arr[armci_me]+proc; pnotify->sent++; # ifdef MEM_FENCE if(SAMECLUSNODE(proc)) MEM_FENCE; # endif PARMCI_Put(&pnotify->sent,&(_armci_notify_arr[proc]+armci_me)->received, sizeof(pnotify->sent),proc); return(pnotify->sent); #endif } /*\ blocks until received count becomes >= waited count * return received count and store waited count in *pval \*/ int parmci_notify_wait(int proc,int *pval) { int retval; #ifdef DOELAN4 if(proc==armci_me){ #ifdef MEM_FENCE MEM_FENCE; #endif return 0; } #endif #if defined(GM) || (defined(DOELAN4) && defined(ELAN_ACC)) { extern int armci_inotify_wait(int,int*); retval=armci_inotify_wait(proc,pval); } #else { long loop=0; armci_notify_t *pnotify = _armci_notify_arr[armci_me]+proc; pnotify->waited++; while( pnotify->waited > pnotify->received) { if(++loop == 1000) { loop=0;cpu_yield(); } armci_util_spin(loop, pnotify); } *pval = pnotify->waited; retval=pnotify->received; } #endif return retval; } long armci_util_long_getval(long* p) { return *p; } int armci_util_int_getval(int* p) { return *p; } int PARMCI_Test(armci_hdl_t *usr_hdl) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int success=0; #ifdef BGML success=(int)nb_handle->count; #else int direct=SAMECLUSNODE(nb_handle->proc); if(direct)return(success); if(nb_handle) { if(nb_handle->agg_flag) { armci_die("test for aggregate handle not yet implemented\n",0); } } if(nb_handle){ # ifdef ARMCI_NB_TEST if(nb_handle->tag==0){ ARMCI_NB_TEST(nb_handle->cmpl_info,&success); return(success); } # ifdef LAPI if(nb_handle->tag!=0 && nb_handle->bufid==NB_NONE){ ARMCI_NB_TEST(nb_handle->cmpl_info,&success); return(success); } # endif # endif # ifdef TEST_HANDLE TEST_HANDLE(nb_handle->bufid,nb_handle->tag,(&success)); # endif } #endif return(success); } #ifdef DO_CKPT void ARMCI_Ckpt_create_ds(armci_ckpt_ds_t *ckptds, int count) { armci_create_ckptds(ckptds,count); } int ARMCI_Ckpt_init(char *filename, ARMCI_Group *grp, int savestack, int saveheap, armci_ckpt_ds_t *ckptds) { int rid; rid = armci_icheckpoint_init(filename,grp,savestack,saveheap,ckptds); return(rid); } int ARMCI_Ckpt(int rid) { return(armci_icheckpoint(rid)); } void ARMCI_Ckpt_Recover(int rid, int iamreplacement) { armci_irecover(rid, iamreplacement); } void ARMCI_Ckpt_finalize(int rid) { armci_icheckpoint_finalize(rid); } #endif #if ARMCI_ENABLE_GPC_CALLS int armci_gpc(int hndl, int proc, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, void *rdata, int rdlen, armci_hdl_t* nbh) { armci_ihdl_t nb_handle = (armci_ihdl_t)nbh; armci_giov_t darr[2]; /* = {{&rhdr, &rhdr, 1, rhlen}, {&rdata, &rdata, 1, rdlen}};*/ gpc_send_t send; char *ptr; /* initialize giov */ darr[0].src_ptr_array = &rhdr; darr[0].dst_ptr_array = &rhdr; darr[0].ptr_array_len = 1; darr[0].bytes = rhlen; darr[1].src_ptr_array = &rdata; darr[1].dst_ptr_array = &rdata; darr[1].ptr_array_len = 1; darr[1].bytes = rdlen; /* if(hlen<0 || hlen>=ARMCI_Gpc_get_hlen()) */ /* return FAIL2; */ /* if(rhlen<0 || rhlen>=ARMCI_Gpc_get_hlen()) */ /* return FAIL2; */ /* if(dlen<0 || dlen>=ARMCI_Gpc_get_dlen()) */ /* return FAIL2; */ /* if(rdlen<0 || rdlen>=ARMCI_Gpc_get_dlen()) */ /* return FAIL2; */ if(hlen>0 && hdr==NULL) return FAIL3; if(rhlen>0 && rhdr==NULL) return FAIL3; if(dlen>0 && data==NULL) return FAIL3; if(rdlen>0 && rdata==NULL) return FAIL3; if(proc<0 || proc >= armci_nproc) return FAIL4; send.hndl = hndl; send.hlen = hlen; send.dlen = dlen; send.hdr = hdr; send.data = data; if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = GET; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else { ORDER(GET,proc); /*ensure ordering */ nb_handle = NULL; } #if defined(LAPI) || defined(GM) || defined(VAPI) || defined(QUADRICS) if(armci_rem_gpc(GET, darr, 2, &send, proc, 1, nb_handle)) #endif return FAIL2; return 0; } int armci_sameclusnode(int proc) { return SAMECLUSNODE(proc); } #endif void _armci_init_handle(armci_hdl_t *hdl) { ((double *)((hdl)->data))[0]=0; ((double *)((hdl)->data))[1]=0; } static inline int val_to_char(int v) { if (v >= 0 && v < 10) return '0' + v; else if (v >= 10 && v < 16) return ('a' - 10) + v; else return -1; } static const char *nexttoken(const char *q, int sep) { if (q) q = strchr(q, sep); if (q) q++; return q; } int cstr_to_cpuset(cpu_set_t * mask, const char *str) { const char *p, *q; q = str; CPU_ZERO(mask); while (p = q, q = nexttoken(q, ','), p) { unsigned int a; /* beginning of range */ unsigned int b; /* end of range */ unsigned int s; /* stride */ const char *c1, *c2; if (sscanf(p, "%u", &a) < 1) return 1; b = a; s = 1; c1 = nexttoken(p, '-'); c2 = nexttoken(p, ','); if (c1 != NULL && (c2 == NULL || c1 < c2)) { if (sscanf(c1, "%u", &b) < 1) return 1; c1 = nexttoken(c1, ':'); if (c1 != NULL && (c2 == NULL || c1 < c2)) if (sscanf(c1, "%u", &s) < 1) { return 1; } } if (!(a <= b)) return 1; while (a <= b) { CPU_SET(a, mask); a += s; } } return 0; } char *cpuset_to_cstr(cpu_set_t * mask, char *str) { int i; char *ptr = str; int entry_made = 0; for (i = 0; i < CPU_SETSIZE; i++) { if (CPU_ISSET(i, mask)) { int j; int run = 0; entry_made = 1; for (j = i + 1; j < CPU_SETSIZE; j++) { if (CPU_ISSET(j, mask)) run++; else break; } if (!run) sprintf(ptr, "%d,", i); else if (run == 1) { sprintf(ptr, "%d,%d,", i, i + 1); i++; } else { sprintf(ptr, "%d-%d,", i, i + run); i += run; } while (*ptr != 0) ptr++; } } ptr -= entry_made; *ptr = 0; return str; } char *cpuset_to_str(cpu_set_t * mask, char *str) { int base; char *ptr = str; char *ret = 0; for (base = CPU_SETSIZE - 4; base >= 0; base -= 4) { char val = 0; if (CPU_ISSET(base, mask)) val |= 1; if (CPU_ISSET(base + 1, mask)) val |= 2; if (CPU_ISSET(base + 2, mask)) val |= 4; if (CPU_ISSET(base + 3, mask)) val |= 8; if (!ret && val) ret = ptr; *ptr++ = val_to_char(val); } *ptr = 0; return ret ? ret : ptr - 1; } long armci_cksm_copy(char *src, char *dst, size_t bytes) { long sum = 0; size_t count=bytes; while( count > 1 ) { sum += * (unsigned int *) src++; count -= 4; } if( count > 0 ){ printf("\nblistering barnicles"); sum += * (unsigned char *) src; } while (sum>>32) sum = (sum & 0xffffffff) + (sum >> 32); return(~sum); } void code_summary() { printf("\nActive #defines that could affect ARMCI"); printf("\n----------------------------------------"); # ifdef ORNL_USE_DS_FOR_REMOTE_GETS printf("\n#define ORNL_USE_DS_FOR_REMOTE_GETS"); # endif # ifdef PORTALS_USE_RENDEZ_VOUS printf("\n#define PORTALS_USE_RENDEZ_VOUS"); # endif # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE printf("\n#define PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE"); # endif # ifdef PORTALS_AFFINITY printf("\n#define PORTALS_AFFINITY"); # endif /* # ifdef CRAY_USE_MDMD_COPY printf("\n#define CRAY_USE_MDMD_COPY"); # endif */ printf("\n----------------------------------------"); printf("\nInfo @ armci/src/code_options.h"); printf("\n----------------------------------------\n"); # ifdef PORTALS portals_print_summary(); # endif } ga-5-3/armci/src-portals/portals.h0000640005473000001440000001740511471654236016015 0ustar d3n000users/* ---------------------------------------------------------------------------------------------- *\ portals.h header \* ---------------------------------------------------------------------------------------------- */ # ifndef _PORTALS_H_ # define _PORTALS_H_ # define PORTALS_INDEX 1 # define ONE_KB 1024 # define ONE_MB 1048576 # define MAX_DS_MSG_SIZE ONE_MB # define PORTALS_MAX_DESCRIPTORS (MAX_BUFS+MAX_SMALL_BUFS) # define PORTALS_MAX_BUFS MAX_BUFS # define PORTALS_MAX_SMALL_BUFS MAX_SMALL_BUFS # define PORTALS_BUF_SIZE MSG_BUFLEN /* defined in requesh.h */ /* define small buf length here - formerly request.h */ # ifdef PORTALS_USE_RENDEZ_VOUS # define PORTALS_SMALL_BUF_SIZE 1024 /* for use with nwchem only -- will not pass armci test.x */ # define PORTALS_MAX_EAGER_MESSAGE_SIZE PORTALS_SMALL_BUF_SIZE # else # define PORTALS_SMALL_BUF_SIZE 1024 # define PORTALS_MAX_EAGER_MESSAGE_SIZE PORTALS_BUF_SIZE # endif # define PORTALS_NREQUEST_BUFFERS 40 # define PORTALS_REQUEST_BUFFER_SIZE_WARNING (128*ONE_MB) # define PORTALS_READ_ACCESS 1 # define PORTALS_WRITE_ACCESS 1000 # define MATCH_ALL_MBITS 0x8000000000000000 /* should be set for all data requests */ # define MATCH_ALL_IBITS ~MATCH_ALL_MBITS /* used to mask out all other bits, but MATCH_ALL */ # define STATE_SEND_START 0x1 # define STATE_SEND_END 0x2 # define STATE_REPLY_START 0x4 # define STATE_REPLY_END 0x8 # define STATE_ACK 0x10 # define STATE_PUT_START 0x20 # define STATE_PUT_END 0x40 # define STATE_GET_START 0x80 # define STATE_GET_END 0x100 # define STATE_UNLINK 0x200 # define DS_RESPONSE_ACK 0x100000000000000 # define DS_RESPONSE_PUT 0x200000000000000 # define DS_RESPONSE_GET 0x400000000000000 # define PORTALS_ALLOW_NBGETS # define PORTALS_USE_ARMCI_CLIENT_BUFFERS # define PORTALS_PUT_USE_ACK_TURNED_OFF # define PORTALS_PUT_USE_START_TURNED_OFF # define PORTALS_GET_USE_START_TURNED_OFF /* ---------------------------------------------------------------------------------------------- *\ portals types \* ---------------------------------------------------------------------------------------------- */ typedef struct portals_desc_s { void* buffer; // used for the md ptl_size_t length; // used for the md ptl_process_id_t id; // on whom the operation is acting on ptl_match_bits_t mbits; // operations destination mbits ptl_hdr_data_t hdr; // used for puts/unique counter value ptl_handle_ni_t nih; // network interface handle ptl_handle_eq_t eqh; // event handler ptl_handle_me_t meh; // me handle (if necessary) ptl_handle_md_t mdh; // md handle (if necessary) int state; // track outstanding events remaining on the descriptor int done; // flag to test whether all work on the descriptor is finished int noperations; // the number of remote operations allowed on buffer // this is only used when preposting/pinning CP memory // for remote operations initiated by the data server } portals_desc_t; typedef struct portals_ds_req_s { portals_desc_t req_desc; portals_desc_t ack_desc; portals_desc_t data_desc; ptl_process_id_t dsid; size_t unique_msg_id; int active; int remote_node; } portals_ds_req_t; /* ---------------------------------------------------------------------------------------------- *\ portals global variables \* ---------------------------------------------------------------------------------------------- */ /*ptl_handle_ni_t cp_nih;*/ /*ptl_handle_ni_t ds_nih;*/ /*ptl_handle_eq_t cp_eqh;*/ /*ptl_handle_eq_t ds_eqh;*/ ptl_process_id_t *portals_id_map; ptl_process_id_t *portals_cloned_id_map; int portals_ds_ready; int portals_cp_finished; size_t portalsMaxEagerMessageSize; /* ---------------------------------------------------------------------------------------------- *\ portals prototypes \* ---------------------------------------------------------------------------------------------- */ int portals_init(ptl_handle_ni_t*); int portals_finalize(ptl_handle_ni_t); int portals_getid(ptl_handle_ni_t,ptl_process_id_t *); int portals_free_eq(ptl_handle_eq_t); int portals_create_eq(ptl_handle_ni_t, ptl_size_t, ptl_handle_eq_t*); int portals_create_matchall_me(ptl_handle_me_t*); int portals_me_attach(ptl_handle_ni_t,ptl_process_id_t,ptl_match_bits_t,ptl_match_bits_t,ptl_handle_me_t*); int portals_me_insert(ptl_handle_me_t,ptl_process_id_t,ptl_match_bits_t,ptl_match_bits_t,ptl_handle_me_t*); int portals_me_unlink(ptl_handle_me_t); int portals_md_attach(ptl_handle_me_t,ptl_md_t,ptl_unlink_t,ptl_handle_md_t*); int portals_md_bind(ptl_handle_ni_t,ptl_md_t,ptl_unlink_t,ptl_handle_md_t*); int portals_eqwait(ptl_handle_eq_t,ptl_event_t*); int portals_put(portals_desc_t*); int portals_get(portals_desc_t*); int portals_wait(portals_desc_t*); void* portalsCloneDataServer(void *(*func)(void*)); void portalsSpinLockOnInt(volatile int*, int, int); void portals_print_event_details(ptl_event_t *ev); void Fatal_error(int); const char *Portals_ID(); void bit_print(const char *,int); void hex_print(const char *,int); void portals_print_summary(); /* ---------------------------------------------------------------------------------------------- *\ portals data server prototypes \* ---------------------------------------------------------------------------------------------- */ void* portals_ds_thread(void* args); int portals_ds_init(void); int portals_ds(void); int portal_send_test_ack(int to,int val); int portals_ds_requeue_md(int); void portals_ds_get_from_cp(void*,ptl_size_t,ptl_process_id_t,ptl_match_bits_t); //void ds_handler(DDI_Patch*,ptl_process_id_t); /* ---------------------------------------------------------------------------------------------- *\ portals compute process prototypes \* ---------------------------------------------------------------------------------------------- */ int portals_cp_init(void); int portals_cp_getid(ptl_process_id_t *id); void portals_req_send(void *buffer, size_t size, portals_ds_req_t *req); void portals_req_nbsend(void *buffer, size_t size, portals_ds_req_t *req); void portals_req_wait(portals_ds_req_t *req); void portals_remote_get(void *buffer, request_header_t *msginfo, int remote_node); void portals_remote_put(void *buffer, request_header_t *msginfo, int remote_node); void portals_remote_acc(void *buffer, request_header_t *msginfo, int remote_node); void portals_remote_rmw(void *buffer, request_header_t *msginfo, int remote_node, portals_ds_req_t *req); void portals_remote_nbget(void *buffer, request_header_t *msginfo, int remote_node, portals_ds_req_t *req); void portals_remote_nbput(void *buffer, request_header_t *msginfo, int remote_node, portals_ds_req_t *req); void portals_remote_nbacc(void *buffer, request_header_t *msginfo, int remote_node, portals_ds_req_t *req); void portalsRemoteOperation(void*,size_t,ptl_process_id_t,portals_ds_req_t*); void portalsRemoteOperationToRank(void*,size_t,int,portals_ds_req_t*); void portalsRemoteOperationToNode(void*,size_t,int,portals_ds_req_t*); void portalsBlockingRemoteOperationToNode(void*,size_t,int); static inline unsigned int cpuid_ebx(unsigned int op) { unsigned int eax, ebx; __asm__("cpuid" : "=a" (eax), "=b" (ebx) : "0" (op) : "cx", "dx" ); return ebx; } # endif ga-5-3/armci/src-portals/threads.c0000640005473000001440000000672211373305234015746 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: threads.c,v 1.1.2.5 2007-08-28 21:29:46 manoj Exp $ */ #if 0 # define PRNDBG3(m,a1,a2,a3) \ fprintf(stderr,"DBG %d: " m,armci_me,a1,a2,a3);fflush(stderr) # define PRNDBG(m) PRNDBG3(m,0,0,0) # define PRNDBG1(m,a1) PRNDBG3(m,a1,0,0) # define PRNDBG2(m,a1,a2) PRNDBG3(m,a1,a2,0) #else # define PRNDBG(m) # define PRNDBG1(m,a1) # define PRNDBG2(m,a1,a2) # define PRNDBG3(m,a1,a2,a3) #endif #include #include "armcip.h" armci_user_threads_t armci_user_threads; void armci_init_threads() { int i, bytes; char *uval = getenv("ARMCI_MAX_THREADS"); armci_user_threads.max = 1; armci_user_threads.avail = 0; if (uval != NULL) sscanf(uval, "%d", &armci_user_threads.max); if (armci_user_threads.max < 1 || armci_user_threads.max > ARMCI_THREADS_LIMIT) { printf("Error: Only 1-%d threads are supported. ",ARMCI_THREADS_LIMIT); printf("Set ARMCI_MAX_THREADS appropriately\n"); fflush(stdout); armci_die("armci_init_threads: failed", 0); } bytes = sizeof(thread_id_t) * armci_user_threads.max; if ( !(armci_user_threads.ids = (thread_id_t*) malloc(bytes)) ) { armci_die("armci_init_threads: armci_user_threads.ids malloc failed", armci_user_threads.max); } memset(armci_user_threads.ids, 0, bytes); #if 0 /* spinlock has void return value */ if (THREAD_LOCK_INIT(armci_user_threads.lock) || THREAD_LOCK_INIT(armci_user_threads.buf_lock) || THREAD_LOCK_INIT(armci_user_threads.net_lock)) armci_die("armci_init_threads:locks initialization failed", 0); #else THREAD_LOCK_INIT(armci_user_threads.lock); THREAD_LOCK_INIT(armci_user_threads.buf_lock); THREAD_LOCK_INIT(armci_user_threads.net_lock); #endif #if 0 /* using one lock per socket for now, it might be feasible (and usefull) * to use two (one for sending and one for receiving) */ armci_user_threads.sock_locks = malloc(armci_nclus *sizeof(thread_lock_t)); for (i = 0; i < armci_nclus; i++) if (THREAD_LOCK_INIT(armci_user_threads.sock_locks[i])) armci_die("armci_init_threads:sock locks initialization failed", i); #endif } void armci_finalize_threads() { THREAD_LOCK_DESTROY(armci_user_threads.lock); THREAD_LOCK_DESTROY(armci_user_threads.net_lock); THREAD_LOCK_DESTROY(armci_user_threads.buf_lock); free(armci_user_threads.ids); } /* calling armci_thread_idx for every function that accesses thread-private data * might be expensive -- needs optiomization */ INLINE int armci_thread_idx() { int i, n = ARMCI_MIN(armci_user_threads.avail, armci_user_threads.max); thread_id_t id = THREAD_ID_SELF(); for (i = 0; i < n; i++) if (id == armci_user_threads.ids[i]) { /*PRNDBG2("thread id=%ld already registered, idx=%d\n", id, i);*/ return i; } /* see this thread for the first time */ return armci_register_thread(id); } INLINE int armci_register_thread(thread_id_t id) { int i; THREAD_LOCK(armci_user_threads.lock); i = armci_user_threads.avail; armci_user_threads.avail++; THREAD_UNLOCK(armci_user_threads.lock); if (i < armci_user_threads.max) armci_user_threads.ids[i] = id; else armci_die("armci_thread_idx: too many threads, adjust ARMCI_MAX_THREADS", armci_user_threads.avail); PRNDBG2("registered a new thread: idx=%d, id=%ld\n", i, id); return i; } ga-5-3/armci/src-portals/rmw.c0000640005473000001440000000676711643666515015146 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: rmw.c,v 1.24.2.5 2007-08-29 17:32:47 manoj Exp $ */ #include "armcip.h" #include "locks.h" #include "copy.h" #include #if defined(__i386__) || defined(__x86_64__) # include "atomics-i386.h" #endif #ifdef LIBELAN_ATOMICS ELAN_ATOMIC *a; int elan_int_fadd(int *target, int inc, int vp) { int result; elan_wait(elan_atomic32(a, ELAN_ATOMIC_ADD, target, inc, 0, vp, &result), elan_base->waitType); return(result); } int elan_long_fadd(long *target, long inc, int vp) { long result; #ifdef _LP64 elan_wait(elan_atomic64(a, ELAN_ATOMIC_ADD, target, inc, 0, vp, &result), elan_base->waitType); #else elan_wait(elan_atomic32(a, ELAN_ATOMIC_ADD, target, inc, 0, vp, &result), elan_base->waitType); #endif return(result); } int elan_int_swap(int *target, int value, int vp) { int result; elan_wait(elan_atomic32(a, ELAN_ATOMIC_SWAP, target, value, 0, vp, &result), elan_base->waitType); return(result); } int elan_long_swap(long *target, long value, int vp) { long result; #ifdef _LP64 elan_wait(elan_atomic64(a, ELAN_ATOMIC_SWAP, target, value, 0, vp, &result), elan_base->waitType); #else elan_wait(elan_atomic32(a, ELAN_ATOMIC_SWAP, target, value, 0, vp, &result), elan_base->waitType); #endif return(result); } #endif /* LIBELAN_ATOMICS */ /* enable use of newer interfaces in SHMEM */ #ifndef CRAY #ifndef LIBELAN_ATOMICS /* manpages for shmem_fadd exist on the T3E but library code does not */ #define SHMEM_FADD #endif #endif /* global scope to prevent compiler optimization of volatile code */ int _a_temp; long _a_ltemp; void armci_generic_rmw(int op, void *ploc, void *prem, int extra, int proc) { #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif ARMCI_PR_DBG("enter",0); NATIVE_LOCK(lock,proc); switch (op) { case ARMCI_FETCH_AND_ADD: armci_get(prem,ploc,sizeof(int),proc); _a_temp = *(int*)ploc + extra; armci_put(&_a_temp,prem,sizeof(int),proc); break; case ARMCI_FETCH_AND_ADD_LONG: armci_get(prem,ploc,sizeof(long),proc); _a_ltemp = *(long*)ploc + extra; armci_put(&_a_ltemp,prem,sizeof(long),proc); break; case ARMCI_SWAP: #if (defined(__i386__) || defined(__x86_64__)) if(SERVER_CONTEXT || armci_nclus==1){ atomic_exchange(ploc, prem, sizeof(int)); } else #endif { armci_get(prem,&_a_temp,sizeof(int),proc); armci_put(ploc,prem,sizeof(int),proc); *(int*)ploc = _a_temp; } break; case ARMCI_SWAP_LONG: armci_get(prem,&_a_ltemp,sizeof(long),proc); armci_put(ploc,prem,sizeof(long),proc); *(long*)ploc = _a_ltemp; break; default: armci_die("rmw: operation not supported",op); } /*TODO memfence here*/ NATIVE_UNLOCK(lock,proc); ARMCI_PR_DBG("exit",0); } int PARMCI_Rmw(int op, void *ploc, void *prem, int extra, int proc) { if(!SAMECLUSNODE(proc)){ armci_rem_rmw(op, ploc, prem, extra, proc); return 0; } switch (op) { case ARMCI_FETCH_AND_ADD: case ARMCI_FETCH_AND_ADD_LONG: case ARMCI_SWAP: case ARMCI_SWAP_LONG: armci_generic_rmw(op, ploc, prem, extra, proc); break; default: armci_die("rmw: operation not supported",op); } return 0; } ga-5-3/armci/src-portals/signaltrap.h0000640005473000001440000000054611300316052016451 0ustar d3n000users#ifndef _SIGNALTRAP_H_ #define _SIGNALTRAP_H_ #ifdef SYSV extern void ARMCI_ChildrenTrapSignals(); extern void ARMCI_ParentTrapSignals(); extern void ARMCI_ParentRestoreSignals(); extern void ARMCI_RestoreSignals(); #else # define ARMCI_ChildrenTrapSignals() # define ARMCI_ParentTrapSignals() # define ARMCI_ParentRestoreSignals() #endif #endif ga-5-3/armci/src-portals/gpc.h0000640005473000001440000000200511445744563015074 0ustar d3n000users#ifndef __GPCDEF #define __GPCDEF #include "armci.h" #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif #define GPC_INIT 1 #define GPC_PROBE 2 #define GPC_WAIT 3 #define GPC_DONE 4 #define GPC_PENDING 5 typedef struct { int proc; armci_hdl_t ahdl; }gpc_hdl_t; /* #define ARMCI_GPC_HLEN 1024 */ /* #define ARMCI_GPC_DLEN 1024*1024 */ extern int ARMCI_Gpc_register( int (*func) ()); extern void ARMCI_Gpc_release(int handle); extern void * ARMCI_Gpc_translate(void *ptr, int proc, int from); extern void ARMCI_Gpc_lock(int proc); extern void ARMCI_Gpc_unlock(int proc); extern int ARMCI_Gpc_trylock(int proc); extern int ARMCI_Gpc_exec(int h,int p, void *hdr, int hlen, void *data,int dlen, void *rhdr, int rhlen, void *rdata, int rdlen, gpc_hdl_t* nbh); extern int PARMCI_Get_gpc_hlen(); extern int PARMCI_Get_gpc_dlen(); extern void ARMCI_Gpc_init_handle(gpc_hdl_t *nbh); extern void ARMCI_Gpc_wait(gpc_hdl_t *nbh); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif ga-5-3/armci/src-portals/request.h0000640005473000001440000003375711643666515016035 0ustar d3n000users#ifndef _REQUEST_H_ #define _REQUEST_H_ /******** client buffer managment ops ****************************/ extern void _armci_buf_init(); extern char* _armci_buf_get(int size, int operation, int to); extern void _armci_buf_release(void *buf); extern int _armci_buf_to_index(void *buf); extern char* _armci_buf_ptr_from_id(int id); extern void _armci_buf_ensure_one_outstanding_op_per_node(void *buf, int node); #if defined(SERV_QUEUE) extern void _armci_buf_ensure_pend_outstanding_op_per_node(void *buf, int node); #endif extern void _armci_buf_complete_nb_request(int bufid,unsigned int tag, int *retcode); extern void _armci_buf_test_nb_request(int bufid,unsigned int tag, int *retcode); extern void _armci_buf_set_tag(void *bufptr,unsigned int tag,short int protocol); extern void _armci_buf_clear_all(); extern void x_buf_send_complete(void *); extern INLINE char *_armci_buf_get_clear_busy(int size, int operation, int to); extern INLINE void _armci_buf_set_busy(void *buf, int state); extern INLINE void _armci_buf_set_busy_idx(int tbl_idx, int state); extern INLINE int _armci_buf_cmpld(int bufid); extern INLINE void _armci_buf_set_cmpld(void *buf, int state); extern INLINE void _armci_buf_set_cmpld_idx(int idx, int state); #ifdef LAPI # include "lapidefs.h" #elif PORTALS # include "armci_portals.h" #elif defined(GM) # include "myrinet.h" #elif defined(DOELAN4) # include "elandefs.h" #elif defined(QUADRICS) # include typedef void* msg_tag_t; # ifdef _ELAN_PUTGET_H # define NB_CMPL_T ELAN_EVENT* # endif #elif defined(VIA) # include "via.h" typedef void* msg_tag_t; #elif defined(VAPI) # include "armci-vapi.h" #elif defined(SOCKETS) # include "sockets.h" typedef long msg_tag_t; typedef unsigned short msg_id_t; # define DTAG_ ((1<<(sizeof(msg_id_t)*8))-1) # define NB_SOCKETS_ /* define NB_SOCKETS to allow non-blocking path */ #elif defined(HITACHI) # include "sr8k.h" #elif defined(BGML) # include "bgml.h" # include "bgmldefs.h" # define NB_CMPL_T BG1S_t typedef long msg_tag_t; #elif defined(MPI_SPAWN) # include "mpi2.h" # define MSG_BUFLEN_DBL 500000 typedef long msg_tag_t; #else typedef long msg_tag_t; #endif #ifndef CLEAR_HNDL_FIELD # define CLEAR_HNDL_FIELD(_x) #endif #define ACK_QUIT 0 #define QUIT 33 #define ATTACH 34 #define REGISTER 35 /*\ the internal request structure for non-blocking api. \*/ typedef struct{ unsigned int tag; short int bufid; short int agg_flag; int op; int proc; #ifdef NB_CMPL_T NB_CMPL_T cmpl_info; #endif } armci_ireq_t; /*\ the internal request structure for non-blocking api. \*/ typedef armci_ireq_t* armci_ihdl_t; extern void armci_set_nbhandle_bufid(armci_ihdl_t nb_handle, char *buf, int val); extern void set_nbhandle(armci_ihdl_t *nbh, armci_hdl_t *nb_handle, int op, int proc); typedef struct { int to; /* message recipient */ int from; /* message sender */ int operation; /* operation code */ int format; /* data format used */ int bytes; /* number of bytes requested */ int datalen; /* >0 in lapi means that data is included */ int ehlen; /* size of extra header and the end of descr */ int dscrlen; /* >0 in lapi means that descriptor is included */ msg_tag_t tag; /* message tag for response to this request, MUST BE LAST */ }request_header_t; #include "portals.h" typedef struct _buf_ackresp{ long val,valc; portals_ds_req_t req; struct _buf_ackresp *next, *previous; } _buf_ackresp_t; /*******gpc call strctures*************/ #include #define MAX_GPC_REQ 1 #define MAX_GPC_REPLY_LEN (64*1024) #define MAX_GPC_SEND_LEN (64*1024) #define GPC_COMPLETION_SIGNAL SIGUSR1 typedef struct { int hndl; int hlen, dlen; void *hdr, *data; int rhlen, rdlen; void *rhdr, *rdata; } gpc_call_t; typedef struct { int active; /* int zombie; */ request_header_t msginfo; gpc_call_t call; char send[MAX_GPC_SEND_LEN]; char reply[MAX_GPC_REPLY_LEN]; } gpc_buf_t; /* gpc_buf_t *gpc_req; */ extern gpc_buf_t *gpc_req; extern void block_pthread_signal(int signo); extern void unblock_pthread_signal(int signo); /*******structures copied from async.c for storing cmpl dscr for nb req*******/ #define UBUF_LEN 112 typedef struct { unsigned int tag; /* request id*/ _buf_ackresp_t ar; short int bufid; /* communication buffer id */ short int protocol; /* what does this buf hold?*/ union { void *dscrbuf; /*in case dscr below is not enough, do a*/ double pad; /*malloc, save pointer in dscrbuf and use it*/ }ptr; char dscr[UBUF_LEN]; /*place to store the dscr*/ }_buf_info_t; #define BUF_INFO_T _buf_info_t extern BUF_INFO_T *_armci_buf_to_bufinfo(void *buf); #define BUF_TO_BUFINFO _armci_buf_to_bufinfo void armci_complete_req_buf(BUF_INFO_T *info, void *buffer); extern INLINE BUF_INFO_T *_armci_id_to_bufinfo(int bufid); #if 0 && defined(DATA_SERVER) && defined(SOCKETS) #define MAX_BUFS 1 #define MAX_SMALL_BUFS 1 #else #if defined(SERV_QUEUE) #define MAX_BUFS 8 #define MAX_SMALL_BUFS 16 #else # ifdef PORTALS_USE_RENDEZ_VOUS # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE # define MAX_BUFS 4 # define MAX_SMALL_BUFS 8 # else # define MAX_BUFS 4 # define MAX_SMALL_BUFS 8 # endif # else # define MAX_BUFS 4 # define MAX_SMALL_BUFS 8 # endif #endif #endif /* tracks sockets used for receiving responces from data server (GET) */ typedef struct { int socks[MAX_BUFS+MAX_SMALL_BUFS]; /* sock # or -1 if not used */ int ready[MAX_BUFS+MAX_SMALL_BUFS]; /* 1 - ready, 0 - not */ } active_socks_t; /*valid values for the element protocol in BUF_INFO_T*/ #define SDSCR_IN_PLACE 1 /*indicated that strided descriptor is in place*/ #define VDSCR_IN_PLACE 2 /*indicated that vector descriptor is in place*/ #define VDSCR_IN_PTR 3 /*indicates that the vector descriptor in allocated and pointer stored in dscrbuf */ /****************************************************************************/ /* this effects: buf_ext_t, portalsEagerMessageSendSize, portals ds buffer size */ /* note: MSG_BUFLEN_DBL is being defined earlier in armci-portals.h */ #ifndef MSG_BUFLEN_DBL # if defined(HITACHI) # define MSG_BUFLEN_DBL 0x50000 # else # ifdef PORTALS_USE_RENDEZ_VOUS # define MSG_BUFLEN_DBL 50000 /* for rendez-vous, this can go bigger i think */ # else # define MSG_BUFLEN_DBL 8192 /* this is smaller when rendez-vous is off */ # endif # endif #endif #define MSG_BUFLEN sizeof(double)*MSG_BUFLEN_DBL extern char* MessageRcvBuffer; extern char* MessageSndBuffer; #ifdef LAPI # define GET_SEND_BUFFER_(_size)(MessageSndBuffer+sizeof(lapi_cmpl_t));\ CLEAR_COUNTER(*((lapi_cmpl_t*)MessageSndBuffer));\ SET_COUNTER(*((lapi_cmpl_t*)MessageSndBuffer),1); # define GET_SEND_BUFFER _armci_buf_get # define GA_SEND_REPLY armci_lapi_send #else # ifdef SOCKETS # define GA_SEND_REPLY(tag, buf, len, p) armci_sock_send(p,buf,len) # else # define GA_SEND_REPLY(tag, buf, len, p) # endif #endif #ifdef QUADRICS_ # define GET_SEND_BUFFER(_size,_op,_to) MessageSndBuffer;\ while(((request_header_t*)MessageSndBuffer)->tag)\ armci_util_spin(100, MessageSndBuffer) # define FREE_SEND_BUFFER(_ptr) ((request_header_t*)MessageSndBuffer)->tag = (void*)0 #endif #ifndef GET_SEND_BUFFER # define GET_SEND_BUFFER(_size,_op,_to) MessageSndBuffer #endif #ifndef FREE_SEND_BUFFER #define FREE_SEND_BUFFER(_ptr) #endif #ifndef INIT_SENDBUF_INFO #define INIT_SENDBUF_INFO(_hdl,_buf,_op,_proc) #endif typedef struct { char *buf; char* buf_posted; int count; int proc; int op; int extra; } buf_arg_t; /*includes for SERVER_LOCK*/ #if defined(SERVER_THREAD) && !defined(VIA) extern void armci_rem_lock(int mutex, int proc, int *ticket); extern void armci_rem_unlock(int mutex, int proc, int ticket); extern void armci_unlock_waiting_process(msg_tag_t tag,int proc, int ticket); #endif #ifdef PIPE_BUFSIZE extern void armcill_pipe_post_bufs(void *ptr, int stride_arr[], int count[], int strides, void* argvoid); extern void armcill_pipe_extract_data(void *ptr,int stride_arr[],int count[], int strides, void* argvoid); extern void armcill_pipe_send_chunk(void *data, int stride_arr[],int count[], int strides, void* argvoid); #endif extern void armci_send_strided(int proc, request_header_t *msginfo, char *bdata, void *ptr, int strides, int stride_arr[], int count[],int tag); extern void armci_rcv_hdlr(request_header_t* msginfo); extern char *armci_rcv_data(int proc, request_header_t *msginfo, int rcvlen); extern void armci_rcv_strided_data_bypass(int proc, request_header_t *msginfo, void *ptr, int stride_levels); extern void armci_send_strided_data_bypass(int proc, request_header_t *msginfo, void *loc_buf, int msg_buflen, void *loc_ptr, int *loc_stride_arr, void *rem_ptr, int *rem_stride_arr, int *count, int stride_levels); extern void armci_rcv_strided_data(int proc, request_header_t* msginfo, int datalen, void *ptr, int strides,int stride_arr[],int count[]); extern void armci_send_strided_data(int proc, request_header_t *msginfo, char *bdata, void *ptr, int strides, int stride_arr[], int count[]); extern void armci_send_req(int proc, request_header_t* msginfo, int len,int tag); extern void armci_server_rmw(request_header_t* msginfo,void* ptr, void* pextra); extern int armci_rem_vector(int op, void *scale, armci_giov_t darr[],int len, int proc,int flag,armci_ihdl_t nb_handle); extern int armci_rem_strided(int op, void* scale, int proc, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, ext_header_t *h, int lockit,armci_ihdl_t nb_handle); extern void armci_rem_rmw(int op, void *ploc, void *prem, int extra, int proc); extern void armci_rem_ack(int clus); extern void armci_server(request_header_t *msginfo, char *dscr, char* buf, int buflen); extern void armci_server_vector(request_header_t *msginfo, char *dscr, char* buf, int buflen); extern void *armci_server_ptr(int); extern void armci_serv_attach_req(void *info, int ilen, long size, void* resp,int rlen); extern void armci_server_lock(request_header_t *msginfo); extern void armci_server_unlock(request_header_t *msginfo, char* dscr); extern void armci_create_server_thread ( void* (* func)(void*) ); extern int armci_server_lock_mutex(int mutex, int proc, msg_tag_t tag); extern void armci_send_data(request_header_t* msginfo, void *data); extern int armci_server_unlock_mutex(int mutex, int p, int tkt, msg_tag_t* tag); extern void armci_rcv_vector_data(int p, request_header_t* msginfo, armci_giov_t dr[], int len); #if !defined(LAPI) extern void armci_wait_for_server(); extern void armci_start_server(); extern void armci_transport_cleanup(); extern int armci_send_req_msg(int proc, void *buf, int bytes,int tag); extern void armci_WriteToDirect(int proc, request_header_t* msginfo, void *buf); extern char *armci_ReadFromDirect(int proc, request_header_t *msginfo, int len); extern void armci_init_connections(); extern void *armci_server_code(void *data); extern void armci_rcv_req(void *mesg, void *phdr, void *pdescr, void *pdata, int *buflen); extern void armci_client_connect_to_servers(); extern void armci_data_server(void *mesg); extern void armci_server_initial_connection(); extern void armci_call_data_server(); #endif #ifdef SOCKETS extern void armci_ReadStridedFromDirect(int proc, request_header_t* msginfo, void *ptr, int strides, int stride_arr[], int count[]); extern void armci_WriteStridedToDirect(int proc, request_header_t* msginfo, void *ptr, int strides, int stride_arr[], int count[]); extern void armci_serv_quit(); extern int armci_send_req_msg_strided(int proc, request_header_t *msginfo, char *ptr, int strides, int stride_arr[],int count[]); extern void armci_server_goodbye(request_header_t* msginfo); #endif #ifdef MPI_SPAWN extern void armci_serv_quit(); extern void armci_server_goodbye(request_header_t* msginfo); #endif #ifdef HITACHI extern void armci_server_goodbye(request_header_t* msginfo); extern void armci_serv_quit(); #endif extern void armci_server_ipc(request_header_t* msginfo, void* descr, void* buffer, int buflen); #ifdef PIPE_BUFSIZE extern void armci_pipe_prep_receive_strided(request_header_t *msginfo,char *buf, int strides, int stride_arr[], int count[], int bufsize); extern void armci_pipe_receive_strided(request_header_t* msginfo, void *ptr, int stride_arr[], int count[], int strides); extern void armci_pipe_send_req(int proc, void *buf, int bytes); #endif extern void armci_rcv_strided_data_bypass_both(int, request_header_t*,void*, int*, int); extern int armci_rem_get(int proc, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, armci_ihdl_t nb_handle,void *mhloc,void *mhrem); #if defined(ALLOW_PIN) && defined(VAPI) extern int armci_two_phase_send(int proc,void *src_ptr,int src_stride_arr[], void *dst_ptr,int dst_stride_arr[],int count[], int stride_levels,void ** context_ptr,armci_ihdl_t nbhandle, ARMCI_MEMHDL_T *mhloc); extern int armci_two_phase_get(int proc, void*src_ptr, int src_stride_arr[], void*dst_ptr,int dst_stride_arr[], int count[], int stride_levels, void**context_ptr, armci_ihdl_t nbhandle, ARMCI_MEMHDL_T *mhloc); #endif #endif ga-5-3/armci/src-portals/capi.c0000640005473000001440000001641311622314656015233 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #include "armci.h" #include "parmci.h" int ARMCI_AccV (int op, void *scale, armci_giov_t * darr, int len, int proc) { int rval; rval = PARMCI_AccV (op, scale, darr, len, proc); return rval; } void ARMCI_Barrier () { PARMCI_Barrier (); } int ARMCI_AccS (int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { int rval; rval = PARMCI_AccS (optype, scale, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); return rval; } void ARMCI_Finalize () { PARMCI_Finalize (); } int ARMCI_NbPut (void *src, void *dst, int bytes, int proc, armci_hdl_t * nb_handle) { int rval; rval = PARMCI_NbPut (src, dst, bytes, proc, nb_handle); return rval; } int ARMCI_GetValueInt (void *src, int proc) { int rval; rval = PARMCI_GetValueInt (src, proc); return rval; } int ARMCI_Put_flag (void *src, void *dst, int bytes, int *f, int v, int proc) { int rval; rval = PARMCI_Put_flag (src, dst, bytes, f, v, proc); return rval; } int ARMCI_NbGetS (void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t * nb_handle) { int rval; rval = PARMCI_NbGetS (src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); return rval; } void * ARMCI_Malloc_local (armci_size_t bytes) { void *rval; rval = PARMCI_Malloc_local (bytes); return rval; } int ARMCI_Free_local (void *ptr) { int rval; rval = PARMCI_Free_local (ptr); return rval; } int ARMCI_Get (void *src, void *dst, int bytes, int proc) { int rval; rval = PARMCI_Get (src, dst, bytes, proc); return rval; } int ARMCI_Put (void *src, void *dst, int bytes, int proc) { int rval; rval = PARMCI_Put (src, dst, bytes, proc); return rval; } int ARMCI_Destroy_mutexes () { int rval; rval = PARMCI_Destroy_mutexes (); return rval; } int ARMCI_GetS (void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { int rval; rval = PARMCI_GetS (src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); return rval; } int ARMCI_NbAccV (int op, void *scale, armci_giov_t * darr, int len, int proc, armci_hdl_t * nb_handle) { int rval; rval = PARMCI_NbAccV (op, scale, darr, len, proc, nb_handle); return rval; } float ARMCI_GetValueFloat (void *src, int proc) { float rval; rval = PARMCI_GetValueFloat (src, proc); return rval; } int ARMCI_Malloc (void **ptr_arr, armci_size_t bytes) { int rval; rval = PARMCI_Malloc (ptr_arr, bytes); return rval; } int ARMCI_NbAccS (int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t * nb_handle) { int rval; rval = PARMCI_NbAccS (optype, scale, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); return rval; } int ARMCI_PutS (void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { int rval; rval = PARMCI_PutS (src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); return rval; } void * ARMCI_Memat (armci_meminfo_t * meminfo, long offset) { void *rval; rval = PARMCI_Memat (meminfo, offset); return rval; } int ARMCI_PutV (armci_giov_t * darr, int len, int proc) { int rval; rval = PARMCI_PutV (darr, len, proc); return rval; } int ARMCI_Free (void *ptr) { int rval; rval = PARMCI_Free (ptr); return rval; } int ARMCI_Init_args (int *argc, char ***argv) { int rval; rval = PARMCI_Init_args (argc, argv); return rval; } int ARMCI_PutValueInt (int src, void *dst, int proc) { int rval; rval = PARMCI_PutValueInt (src, dst, proc); return rval; } void ARMCI_Memget (size_t bytes, armci_meminfo_t * meminfo, int memflg) { PARMCI_Memget (bytes, meminfo, memflg); } void ARMCI_AllFence () { PARMCI_AllFence (); } int ARMCI_NbPutV (armci_giov_t * darr, int len, int proc, armci_hdl_t * nb_handle) { int rval; rval = PARMCI_NbPutV (darr, len, proc, nb_handle); return rval; } int ARMCI_PutValueDouble (double src, void *dst, int proc) { int rval; rval = PARMCI_PutValueDouble (src, dst, proc); return rval; } int ARMCI_GetV (armci_giov_t * darr, int len, int proc) { int rval; rval = PARMCI_GetV (darr, len, proc); return rval; } int ARMCI_Test (armci_hdl_t * nb_handle) { int rval; rval = PARMCI_Test (nb_handle); return rval; } void ARMCI_Unlock (int mutex, int proc) { PARMCI_Unlock (mutex, proc); } void ARMCI_Fence (int proc) { PARMCI_Fence (proc); } int ARMCI_Create_mutexes (int num) { int rval; rval = PARMCI_Create_mutexes (num); return rval; } int ARMCI_PutS_flag (void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc) { int rval; rval = PARMCI_PutS_flag (src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, flag, val, proc); return rval; } int ARMCI_WaitProc (int proc) { int rval; rval = PARMCI_WaitProc (proc); return rval; } void ARMCI_Lock (int mutex, int proc) { PARMCI_Lock (mutex, proc); } double ARMCI_GetValueDouble (void *src, int proc) { double rval; rval = PARMCI_GetValueDouble (src, proc); return rval; } int ARMCI_NbGetV (armci_giov_t * darr, int len, int proc, armci_hdl_t * nb_handle) { int rval; rval = PARMCI_NbGetV (darr, len, proc, nb_handle); return rval; } int ARMCI_Rmw (int op, int *ploc, int *prem, int extra, int proc) { int rval; rval = PARMCI_Rmw (op, ploc, prem, extra, proc); return rval; } int ARMCI_Init () { int rval; rval = PARMCI_Init (); return rval; } int ARMCI_WaitAll () { int rval; rval = PARMCI_WaitAll (); return rval; } int ARMCI_NbGet (void *src, void *dst, int bytes, int proc, armci_hdl_t * nb_handle) { int rval; rval = PARMCI_NbGet (src, dst, bytes, proc, nb_handle); return rval; } int ARMCI_PutValueFloat (float src, void *dst, int proc) { int rval; rval = PARMCI_PutValueFloat (src, dst, proc); return rval; } int ARMCI_NbPutS (void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t * nb_handle) { int rval; rval = PARMCI_NbPutS (src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); return rval; } int ARMCI_PutS_flag_dir (void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc) { int rval; rval = PARMCI_PutS_flag_dir (src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, flag, val, proc); return rval; } int ARMCI_PutValueLong (long src, void *dst, int proc) { int rval; rval = PARMCI_PutValueLong (src, dst, proc); return rval; } int ARMCI_Wait (armci_hdl_t * nb_handle) { int rval; rval = PARMCI_Wait (nb_handle); return rval; } long ARMCI_GetValueLong (void *src, int proc) { long rval; rval = PARMCI_GetValueLong (src, proc); return rval; } ga-5-3/armci/src-portals/message.c0000640005473000001440000017750411643666515015763 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: message.c,v 1.58.6.4 2007-04-24 10:08:26 vinod Exp $ */ #if defined(BGML) # include "bgml.h" #elif defined(PVM) # include #elif defined(TCGMSG) # include #else # ifndef MPI # define MPI # endif # include #endif #include "message.h" #include "armcip.h" #include "copy.h" #if HAVE_STDIO_H # include #endif #if HAVE_ASSERT_H # include #endif #ifdef _POSIX_PRIORITY_SCHEDULING #ifndef HITACHI # include #endif #endif #include "armci.h" #include "acc.h" #define DEBUG_ 0 #if defined(SYSV) || defined(MMAP) ||defined (WIN32) # include "shmem.h" #endif /* global operations are use buffer size of BUF_SIZE doubles */ #define BUF_SIZE (4*2048) #define INFO_BUF_SIZE (BUF_SIZE*sizeof(BUF_SIZE) - sizeof(double)) #undef EMPTY #define EMPTY 0 #define FULL 1 static double *work=NULL; static long *lwork = NULL; static long long *llwork = NULL; static int *iwork = NULL; static float *fwork = NULL; static int _armci_gop_init=0; /* tells us if we have a buffers allocated */ static int _armci_gop_shmem =0; /* tells us to use shared memory for gops */ extern void armci_util_wait_int(volatile int *, int , int ); static int empty=EMPTY,full=FULL; #if !defined(SGIALTIX) && defined(SYSV) || defined(MMAP) || defined(WIN32) static void **ptr_arr=NULL; #endif typedef struct { union { volatile int flag; double dummy[16]; }a; union { volatile int flag; double dummy[16]; }b; double array[BUF_SIZE]; } bufstruct; static bufstruct *_gop_buffer; #define GOP_BUF(p) (_gop_buffer+((p)-armci_master)) /*\ macro to set a flag includes mem barrier to assure that flag is not set * before any outstanding writes complete \*/ #ifdef NEED_MEM_SYNC # ifdef AIX # define SET_SHM_FLAG(_flg,_val) _clear_lock((int *)(_flg),_val); # elif defined(NEC) # define SET_SHM_FLAG(_flg,_val) MEM_FENCE; *(_flg)=(_val) # elif defined(__ia64) # if defined(__GNUC__) && !defined (__INTEL_COMPILER) # define SET_SHM_FLAG(_flg,_val)\ __asm__ __volatile__ ("mf" ::: "memory"); *(_flg)=(_val) # else /* Intel Compiler */ extern void _armci_ia64_mb(); # define SET_SHM_FLAG(_flg,_val)\ _armci_ia64_mb(); *(_flg)=(_val); # endif # elif defined(MACX) # if defined(__GNUC__) # define SET_SHM_FLAG(_flg,_val)\ *(_flg)=(_val);__asm__ __volatile__ ("isync" ::: "memory") # endif # endif #endif #ifndef SET_SHM_FLAG # define SET_SHM_FLAG(_flg,_val) *(_flg)=_val; #endif /*\ * Variables/structures for use in Barrier and for Binomial tree \*/ #if HAVE_MATH_H # include #endif int barr_switch; static int LnB=0,powof2nodes,Lp2; typedef struct { volatile int flag1; double dum[16]; volatile int flag2; } barrier_struct; barrier_struct *_bar_buff; #define BAR_BUF(p) (_bar_buff+((p))) void **barr_snd_ptr,**barr_rcv_ptr; int _armci_barrier_init=0; int _armci_barrier_shmem=0; /*\ * Tree generation code \*/ static void _dfs_bintree_parse(int *idlist, int index, int max, int *result) { int left = (int)2*index+1; int right = (int) 2*index+2; static int pos=0; int r_end,l_end; l_end=pos++; result[pos++]=idlist[index]; if(leftarray; /* each process finds its place */ GOP_BUF(armci_me)->a.flag=EMPTY; /* initially buffer is empty */ GOP_BUF(armci_me)->b.flag=EMPTY; /* initially buffer is empty */ if(armci_me == armci_master ){ GOP_BUF(armci_clus_last+1)->a.flag=EMPTY;/*initially buffer is empty*/ GOP_BUF(armci_clus_last+2)->a.flag=EMPTY;/*initially buffer is empty*/ GOP_BUF(armci_clus_last+1)->b.flag=EMPTY;/*initially buffer is empty*/ GOP_BUF(armci_clus_last+2)->b.flag=EMPTY;/*initially buffer is empty*/ } _armci_gop_shmem = 1; } #endif /*stuff needed for barrier and binomial bcast/reduce*/ #ifdef LAPI if(!_armci_barrier_shmem){ int size = 2*sizeof(int); /*allocate memory to send/rcv data*/ barr_snd_ptr = (void **)malloc(sizeof(void *)*armci_nproc); barr_rcv_ptr = (void **)malloc(sizeof(void *)*armci_nproc); if(PARMCI_Malloc(barr_snd_ptr,size))armci_die("malloc barrinit failed",0); if(PARMCI_Malloc(barr_rcv_ptr,size))armci_die("malloc barrinit failed",0); if(barr_rcv_ptr[armci_me]==NULL || barr_snd_ptr[armci_me]==NULL) armci_die("problems in malloc barr_init",0); powof2nodes=1; LnB = floor(log(armci_nclus)/log(2))+1; if(pow(2,LnB-1)-1) _armci_dummy_work *=DUMMY_INIT; if(_armci_dummy_work>(double)armci_msg_nproc())_armci_dummy_work=DUMMY_INIT; } /***************************Barrier Code*************************************/ void armci_msg_barr_init(){ #if defined(SYSV) || defined(MMAP) || defined(WIN32) int size=sizeof(barrier_struct)*armci_clus_info[armci_clus_me].nslave; char *tmp; void **ptr_arr; barr_switch=0; /*First allocate space for flags*/ ptr_arr = (void**)malloc(armci_nproc*sizeof(void*)); if(armci_me==armci_master) size = size+128; else size=0; PARMCI_Malloc(ptr_arr, size); tmp = (char*)ptr_arr[armci_master]; size=2*sizeof(int); if(!tmp)armci_die("allocate barr shm failed",0); _bar_buff=(barrier_struct *)tmp; SET_SHM_FLAG(&(BAR_BUF(armci_me-armci_master)->flag1),empty); SET_SHM_FLAG(&(BAR_BUF(armci_me-armci_master)->flag2),empty); /*allocate memory to send/rcv data*/ barr_snd_ptr = (void **)malloc(sizeof(void *)*armci_nproc); barr_rcv_ptr = (void **)malloc(sizeof(void *)*armci_nproc); if(PARMCI_Malloc(barr_snd_ptr,size))armci_die("malloc barr_init failed",0); if(PARMCI_Malloc(barr_rcv_ptr,size))armci_die("malloc barr_init failed",0); if(barr_rcv_ptr[armci_me]==NULL || barr_snd_ptr[armci_me]==NULL) armci_die("problems in malloc barr_init",0); /*we have to figure if we have power of ,two nodes*/ powof2nodes=1; LnB = (int)floor(log(armci_nclus)/log(2))+1; if(pow(2,LnB-1)flag1,FULL,100000); SET_SHM_FLAG(&(BAR_BUF(i)->flag1),empty); } if(armci_nclus>1){ last = ((int)pow(2,(LnB-1)))^armci_clus_me; if(last>=0 && lastarmci_clus_me){ /*the pow2 set of procs*/ if(last=0 && next armci_me){ armci_msg_snd(ARMCI_TAG, srcp,4,next_node); armci_msg_rcv(ARMCI_TAG, dstn,4,NULL,next_node); } else{ /*would we gain anything by doing a snd,rcv instead of rcv,snd*/ armci_msg_rcv(ARMCI_TAG, dstn,4,NULL,next_node); armci_msg_snd(ARMCI_TAG, srcp,4,next_node); } armci_util_wait_int((volatile int *)dstn,barr_count,100000); } } if(last1*/ for(i=1;iflag2),full); } else { /*if not master, partake in the smp barrier,only*/ i=armci_me-armci_master; SET_SHM_FLAG(&(BAR_BUF(i)->flag1),full); armci_util_wait_int(&BAR_BUF(i)->flag2,FULL,100000); SET_SHM_FLAG(&(BAR_BUF(i)->flag2),empty); } } #endif /*barrier enabled only for lapi*/ void parmci_msg_barrier() { #ifdef BGML bgml_barrier (3); /* this is always faster than MPI_Barrier() */ #elif defined(MPI) MPI_Barrier(ARMCI_COMM_WORLD); # elif defined(PVM) pvm_barrier(mp_group_name, armci_nproc); # elif defined(LAPI) #if !defined(NEED_MEM_SYNC) if(_armci_barrier_init) _armci_msg_barrier(); else #endif { tcg_synch(ARMCI_TAG); } # else { tcg_synch(ARMCI_TAG); } # endif } /***********************End Barrier Code*************************************/ void armci_msg_init(int *argc, char ***argv) { #if defined(TCGMSG) if (!tcg_ready()) { tcg_pbegin(argc,argv); } #elif defined(BGML) /* empty */ #elif defined(MPI) int flag=0; MPI_Initialized(&flag); if (!flag) { # if defined(DCMF) || defined(MPI_MT) int provided; MPI_Init_thread(argc, argv, MPI_THREAD_MULTIPLE, &provided); # else MPI_Init(argc, argv); # endif } if (!PARMCI_Initialized()) { MPI_Comm_dup(MPI_COMM_WORLD, &ARMCI_COMM_WORLD); } #endif } int armci_msg_me() { #ifdef BGML return BGML_Messager_rank(); #elif defined(DCMF) return DCMF_Messager_rank(); #elif defined(MPI) static int counter = 0; if (counter == 0) { int me; MPI_Comm_rank(ARMCI_COMM_WORLD, &me); armci_me = me; counter = 1; } return armci_me; #elif defined(PVM) return(pvm_getinst(mp_group_name,pvm_mytid())); #else return (int)tcg_nodeid(); #endif } int armci_msg_nproc() { #ifdef BGML return BGML_Messager_size(); #elif defined(DCMF) return DCMF_Messager_size(); #elif defined(MPI) static int counter = 0; if (counter == 0) { int nproc; MPI_Comm_size(ARMCI_COMM_WORLD, &nproc); armci_nproc = nproc; counter = 1; } return armci_nproc; #elif defined(PVM) return(pvm_gsize(mp_group_name)); #else return (int)tcg_nnodes(); #endif } #ifdef CRAY_YMP #define BROKEN_MPI_ABORT #endif #ifndef PVM double armci_timer() { #ifdef BGML return BGML_Timer(); #elif defined(DCMF) return DCMF_Timer(); #elif defined(MPI) return MPI_Wtime(); #else return tcg_time(); #endif } #endif void armci_msg_abort(int code) { #ifdef BGML fprintf(stderr,"ARMCI aborting [%d]\n", code); #elif defined(DCMF) fprintf(stderr,"ARMCI aborting [%d]\n", code); #elif defined(MPI) # ifndef BROKEN_MPI_ABORT MPI_Abort(ARMCI_COMM_WORLD,code); # endif #elif defined(PVM) char error_msg[25]; sprintf(error_msg, "ARMCI aborting [%d]", code); pvm_halt(); #else tcg_error("ARMCI aborting",(long)code); #endif fprintf(stderr,"%d:aborting\n",armci_me); /* trap for broken abort in message passing libs */ _exit(1); } void armci_msg_finalize() { #if defined(TCGMSG) tcg_pend(); #elif defined(MPI) MPI_Finalize(); #endif } void armci_msg_bintree(int scope, int* Root, int *Up, int *Left, int *Right) { int root, up, left, right, index, nproc; if(scope == SCOPE_NODE){ root = armci_clus_info[armci_clus_me].master; nproc = armci_clus_info[armci_clus_me].nslave; index = armci_me - root; up = (index-1)/2 + root; if( up < root) up = -1; left = 2*index + 1 + root; if(left >= root+nproc) left = -1; right = 2*index + 2 + root; if(right >= root+nproc)right = -1; }else if(scope ==SCOPE_MASTERS){ root = armci_clus_info[0].master; nproc = armci_nclus; if(armci_me != armci_master){up = -1; left = -1; right = -1; } else{ index = armci_clus_me - root; up = (index-1)/2 + root; up = ( up < root)? -1: armci_clus_info[up].master; left = 2*index + 1 + root; left = ( left >= root+nproc)? -1: armci_clus_info[left].master; right = 2*index + 2 + root; right =( right >= root+nproc)? -1: armci_clus_info[right].master; } }else{ root = 0; nproc = armci_nproc; index = armci_me - root; up = (index-1)/2 + root; if( up < root) up = -1; left = 2*index + 1 + root; if(left >= root+nproc) left = -1; right = 2*index + 2 + root; if(right >= root+nproc)right = -1; } *Up = up; *Left = left; *Right = right; *Root = root; } /*\ root broadcasts to everyone else \*/ void armci_msg_bcast_scope(int scope, void *buf, int len, int root) { int up, left, right, Root; if(!buf)armci_die("armci_msg_bcast: NULL pointer", len); #ifdef BGML BGTr_Bcast(root, buf, len, 3); #else armci_msg_bintree(scope, &Root, &up, &left, &right); if(root !=Root){ if(armci_me == root) armci_msg_snd(ARMCI_TAG, buf,len, Root); if(armci_me ==Root) armci_msg_rcv(ARMCI_TAG, buf, len, NULL, root); } /* printf("%d: scope=%d left=%d right=%d up=%d\n",armci_me, scope, left, right, up);*/ if(armci_me != Root && up!=-1) armci_msg_rcv(ARMCI_TAG, buf, len, NULL, up); if (left > -1) armci_msg_snd(ARMCI_TAG, buf, len, left); if (right > -1) armci_msg_snd(ARMCI_TAG, buf, len, right); #endif } /*\ shared memory based broadcast for a single SMP node \*/ void armci_smp_bcast(void *x, int n , int root) { int ndo, len,i, bufsize = BUF_SIZE*sizeof(double); static int bufid=1; if(armci_clus_info[armci_clus_me].nslave<2) return; /* nothing to do */ if(!x)armci_die("armci_msg_bcast: NULL pointer", n); /* enable or balance pipeline for messages comparable to bufsize */ if((n>bufsize/2) && (n <(2*bufsize-64))){ bufsize = n/2; bufsize>>=3; bufsize<<=3; } while ((ndo = (n<=bufsize) ? n : bufsize)) { len = ndo; if(armci_me==root){ /* wait for the flag protecting the buffer to clear */ armci_util_wait_int(&(GOP_BUF(armci_clus_last+bufid)->a.flag),EMPTY,100); SET_SHM_FLAG(&(GOP_BUF(armci_clus_last+bufid)->a.flag),full); #if 0 for(i=armci_clus_first; i <= armci_clus_last; i++) if(i!=root)armci_util_wait_int(&GOP_BUF(i)->b.flag, EMPTY, 100); armci_copy(x,GOP_BUF(armci_clus_last+bufid+1)->array,len); for(i=armci_clus_first; i <= armci_clus_last; i++) if(i!=root) GOP_BUF(i)->b.flag=FULL; #else armci_copy(x,GOP_BUF(armci_clus_last+bufid)->array,len); for(i=armci_clus_first; i <= armci_clus_last; i++) if(i!=root){ armci_util_wait_int(&GOP_BUF(i)->b.flag, EMPTY, 100); SET_SHM_FLAG(&(GOP_BUF(i)->b.flag),full); } #endif }else{ armci_util_wait_int(&GOP_BUF(armci_me)->b.flag, FULL, 100); armci_copy(GOP_BUF(armci_clus_last+bufid)->array,x,len); SET_SHM_FLAG(&(GOP_BUF(armci_me)->b.flag),empty); } n -=ndo; x = len + (char*)x; bufid = (bufid)%2 +1; /* since root waited for everybody to check in the previous buffer is free*/ if(armci_me==root){ SET_SHM_FLAG(&(GOP_BUF(armci_clus_last+bufid)->a.flag),empty); } } } /*\ shared memory based broadcast for a single SMP node out of shmem buffer \*/ void armci_smp_buf_bcast(void *x, int n, int root, void *shmbuf ) { int i, nslave = armci_clus_info[armci_clus_me].nslave; if(nslave<2){ armci_copy(shmbuf,x,n); return; /* nothing to do */ } if(!x)armci_die("armci_msg_bcast: NULL pointer", n); if(!shmbuf)armci_die("armci_msg_bcast: NULL pointer", n); if(armci_me==root){ /* notify others that the data in buffer is ready */ for(i=armci_clus_first; i <= armci_clus_last; i++) if(i!=root){ armci_util_wait_int(&GOP_BUF(i)->b.flag, EMPTY, 100); GOP_BUF(i)->b.flag=FULL; } /* root also needs to copy */ armci_copy(shmbuf,x,n); /* wait until everybody is finished -- can reclaim buffer */ for(i=armci_clus_first; i <= armci_clus_last; i++) if(i!=root)armci_util_wait_int(&GOP_BUF(i)->b.flag, EMPTY,100000); }else{ /* spin until data in buffer is ready */ armci_util_wait_int(&GOP_BUF(armci_me)->b.flag , FULL, 100000); armci_copy(shmbuf,x,n); /* copy data */ GOP_BUF(armci_me)->b.flag = EMPTY; /* indicate we are done */ } } void _armci_msg_binomial_bcast(void *buf, int len, int root){ int Root = armci_master; int nslave = armci_clus_info[armci_clus_me].nslave; int i,next_node,next; /* int my_rank,root_rank,next_rank; */ /* inter-node operation between masters */ if(root !=armci_clus_info[0].master){ Root = armci_clus_info[0].master; if(armci_me == root) armci_msg_snd(ARMCI_TAG, buf,len, Root); if(armci_me ==Root) armci_msg_rcv(ARMCI_TAG, buf, len, NULL, root); root = Root; Root = armci_master; } if(armci_nclus>1 &&armci_me==armci_master){/*the internode bcast, first*/ /*first do the recv*/ int rcv_proc=armci_clus_me,flag=1,diff=1; if(armci_me!=root){ while(!(rcv_proc & flag)){ diff=diff<<1; flag=flag<<1; } rcv_proc = armci_clus_info[armci_clus_me-diff].master; armci_msg_rcv(ARMCI_TAG, buf,len,NULL,rcv_proc); /*printf("\n%d: recv from %d \n",armci_me,rcv_proc);fflush(stdout);*/ } else diff = Lp2; /*printf("\n%d: %d diff>>1 = %d\n",armci_me,Lp2,diff>>1);*/ for(i=diff>>1;i>=1;i=i>>1){ next=i^armci_clus_me; if(next>=0 && next1)armci_msg_bcast_scope(SCOPE_MASTERS, buf, len, root); else Root = root; /* intra-node operation */ #if 1 if(_armci_gop_shmem && nslave<33) armci_smp_bcast(buf, len, Root); else #endif armci_msg_bcast_scope(SCOPE_NODE, buf, len, Root); } #endif void armci_msg_brdcst(void* buffer, int len, int root) { if(!buffer)armci_die("armci_msg_brdcast: NULL pointer", len); #ifdef BGML BGTr_Bcast(root, buffer, len, PCLASS); # elif defined(MPI) MPI_Bcast(buffer, len, MPI_CHAR, root, ARMCI_COMM_WORLD); # elif defined(PVM) armci_msg_bcast(buffer, len, root); # else { long ttag=ARMCI_TAG, llen=len, rroot=root; tcg_brdcst(ttag, buffer, llen, rroot); } # endif } void armci_msg_snd(int tag, void* buffer, int len, int to) { # ifdef MPI MPI_Send(buffer, len, MPI_CHAR, to, tag, ARMCI_COMM_WORLD); # elif defined(PVM) pvm_psend(pvm_gettid(mp_group_name, to), tag, buffer, len, PVM_BYTE); # elif defined(BGML) /* We don't actually used armci_msg_snd in ARMCI. we use optimized * collectives where * armci_msg_snd is used. If you build Global Arrays, the MPI flag is * set, so that * will work fine */ armci_die("bgl shouldn't use armci_msg_snd", armci_me); # else long ttag=tag, llen=len, tto=to, block=1; tcg_snd(ttag, buffer, llen, tto, block); # endif } /*\ receive message of specified tag from proc and get its len if msglen!=NULL \*/ void armci_msg_rcv(int tag, void* buffer, int buflen, int *msglen, int from) { # ifdef MPI MPI_Status status; MPI_Recv(buffer, buflen, MPI_CHAR, from, tag, ARMCI_COMM_WORLD, &status); if(msglen) MPI_Get_count(&status, MPI_CHAR, msglen); # elif defined(PVM) int src, rtag,mlen; pvm_precv(pvm_gettid(mp_group_name, from), tag, buffer, buflen, PVM_BYTE, &src, &rtag, &mlen); if(msglen)*msglen=mlen; #elif defined(BGML) armci_die("bgl shouldn't use armci_msg_rcv", armci_me); # else long ttag=tag, llen=buflen, mlen, ffrom=from, sender, block=1; tcg_rcv(ttag, buffer, llen, &mlen, ffrom, &sender, block); if(msglen)*msglen = (int)mlen; # endif } int armci_msg_rcvany(int tag, void* buffer, int buflen, int *msglen) { #if defined(MPI) int ierr; MPI_Status status; ierr = MPI_Recv(buffer, buflen, MPI_CHAR, MPI_ANY_SOURCE, tag, ARMCI_COMM_WORLD, &status); if(ierr != MPI_SUCCESS) armci_die("armci_msg_rcvany: Recv failed ", tag); if(msglen)if(MPI_SUCCESS!=MPI_Get_count(&status, MPI_CHAR, msglen)) armci_die("armci_msg_rcvany: count failed ", tag); return (int)status.MPI_SOURCE; # elif defined(PVM) int src, rtag,mlen; pvm_precv(-1, tag, buffer, buflen, PVM_BYTE, &src, &rtag, &mlen); if(msglen)*msglen=mlen; return(pvm_getinst(mp_group_name,src)); # elif defined (BGML) armci_die("bgl shouldn't use armci_msg_rcvany", armci_me); # else long ttag=tag, llen=buflen, mlen, ffrom=-1, sender, block=1; tcg_rcv(ttag, buffer, llen, &mlen, ffrom, &sender, block); if(msglen)*msglen = (int)mlen; return (int)sender; # endif } /*\ cluster master broadcasts to everyone else in the same cluster \*/ void armci_msg_clus_brdcst(void *buf, int len) { int root, up, left, right; int tag=ARMCI_TAG, lenmes; armci_msg_bintree(SCOPE_NODE, &root, &up, &left, &right); if(armci_me != root) armci_msg_rcv(tag, buf, len, &lenmes, up); if (left > -1) armci_msg_snd(tag, buf, len, left); if (right > -1) armci_msg_snd(tag, buf, len, right); } /*\ reduce operation for long \*/ static void ldoop(int n, char *op, long *x, long* work) { if (strncmp(op,"+",1) == 0) while(n--) *x++ += *work++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ *= *work++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register long x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register long x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MIN(x1, x2); x++; work++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x |= *work; x++; work++; } else armci_die("ldoop: unknown operation requested", n); } /*\ reduce operation for long x= op(work,work2) \*/ static void ldoop2(int n, char *op, long *x, long* work, long* work2) { if (strncmp(op,"+",1) == 0) while(n--) *x++ = *work++ + *work2++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ = *work++ * *work2++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register long x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MAX(x1, x2); x++; work++; work2++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register long x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MIN(x1, x2); x++; work++; work2++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x = *work | *work2; x++; work++; work2++; } else armci_die("ldoop2: unknown operation requested", n); } /*\ reduce operation for long long \*/ static void lldoop(int n, char *op, long long *x, long long* work) { if (strncmp(op,"+",1) == 0) while(n--) *x++ += *work++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ *= *work++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register long long x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register long long x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MIN(x1, x2); x++; work++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x |= *work; x++; work++; } else armci_die("lldoop: unknown operation requested", n); } /*\ reduce operation for long long x= op(work,work2) \*/ static void lldoop2(int n, char *op, long long *x, long long* work, long long* work2) { if (strncmp(op,"+",1) == 0) while(n--) *x++ = *work++ + *work2++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ = *work++ * *work2++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register long long x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MAX(x1, x2); x++; work++; work2++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register long long x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MIN(x1, x2); x++; work++; work2++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x = *work | *work2; x++; work++; work2++; } else armci_die("ldoop2: unknown operation requested", n); } /*\ reduce operation for int \*/ static void idoop(int n, char *op, int *x, int* work) { if (strncmp(op,"+",1) == 0) while(n--) *x++ += *work++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ *= *work++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register int x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register int x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MIN(x1, x2); x++; work++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x |= *work; x++; work++; } else armci_die("idoop: unknown operation requested", n); } /*\ reduce operation for int x= op(work,work2) \*/ static void idoop2(int n, char *op, int *x, int* work, int* work2) { if (strncmp(op,"+",1) == 0) while(n--) *x++ = *work++ + *work2++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ = *work++ * *work2++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register int x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MAX(x1, x2); x++; work++; work2++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register int x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MIN(x1, x2); x++; work++; work2++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x = *work | *work2; x++; work++; work2++; } else armci_die("idoop2: unknown operation requested", n); } /*\ reduce operation for double \*/ static void ddoop(int n, char* op, double* x, double* work) { if (strncmp(op,"+",1) == 0){ if(n>63) FORT_DADD(&n,x,work); else while(n--) *x++ += *work++; }else if (strncmp(op,"*",1) == 0){ if(n>63) FORT_DMULT(&n,x,work); else while(n--) *x++ *= *work++; }else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register double x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register double x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MIN(x1, x2); x++; work++; } else armci_die("ddoop: unknown operation requested", n); } /*\ reduce operation for double x= op(work,work2) \*/ static void ddoop2(int n, char *op, double *x, double* work, double* work2) { if (strncmp(op,"+",1) == 0){ if(n>63) FORT_DADD2(&n,x,work,work2); else while(n--) *x++ = *work++ + *work2++; }else if (strncmp(op,"*",1) == 0){ if(n>63) FORT_DMULT2(&n,x,work,work2); while(n--) *x++ = *work++ * *work2++; }else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register double x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MAX(x1, x2); x++; work++; work2++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register double x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MIN(x1, x2); x++; work++; work2++; } else armci_die("ddoop2: unknown operation requested", n); } /*\ reduce operation for float \*/ static void fdoop(int n, char* op, float* x, float* work) { if (strncmp(op,"+",1) == 0) while(n--) *x++ += *work++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ *= *work++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register float x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register float x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MIN(x1, x2); x++; work++; } else armci_die("fdoop: unknown operation requested", n); } /*\ reduce operation for float x= op(work,work2) \*/ static void fdoop2(int n, char *op, float *x, float* work, float* work2) { if (strncmp(op,"+",1) == 0) while(n--) *x++ = *work++ + *work2++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ = *work++ * *work2++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register float x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MAX(x1, x2); x++; work++; work2++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register float x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MIN(x1, x2); x++; work++; work2++; } else armci_die("fdoop2: unknown operation requested", n); } /*\ combine array of longs/ints accross all processes \*/ void armci_msg_gop_scope(int scope, void *x, int n, char* op, int type) { int root, up, left, right, size; int tag=ARMCI_TAG; int ndo, len, lenmes, orign =n, ratio; void *origx =x; if(!x)armci_die("armci_msg_gop: NULL pointer", n); if(work==NULL)_allocate_mem_for_work(); #ifdef BGML BGML_Dt dt; BGML_Op theop; if(n > 0 && (strncmp(op, "+", 1) == 0) && (type==ARMCI_INT || type==ARMCI_DOUBLE)) { theop=BGML_SUM; if(type==ARMCI_INT) dt=BGML_SIGNED_INT; else if(type==ARMCI_DOUBLE) dt=BGML_DOUBLE; BGTr_Allreduce(origx, x, n, dt, theop, -1, PCLASS); } else if(n > 0 && (strncmp(op, "max", 3) == 0) && (type==ARMCI_INT || type==ARMCI_DOUBLE)) { theop=BGML_MAX; if(type==ARMCI_INT) dt=BGML_SIGNED_INT; else if(type==ARMCI_DOUBLE) dt=BGML_DOUBLE; BGTr_Allreduce(origx, x, n, dt, theop, -1, PCLASS); } else if(n > 0 && (strncmp(op, "min", 3) == 0) && (type==ARMCI_INT || type==ARMCI_DOUBLE)) { theop=BGML_MIN; if(type==ARMCI_INT) dt=BGML_SIGNED_INT; else if(type==ARMCI_DOUBLE) dt=BGML_DOUBLE; BGTr_Allreduce(origx, x, n, dt, theop, -1, PCLASS); } else #endif { armci_msg_bintree(scope, &root, &up, &left, &right); if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); ratio = sizeof(double)/size; while ((ndo = (n<=BUF_SIZE*ratio) ? n : BUF_SIZE*ratio)) { len = lenmes = ndo*size; if (left > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, left); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op,(long long*)x,llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (right > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, right); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op,(long long*)x,llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (armci_me != root && up!=-1) armci_msg_snd(tag, x, len, up); n -=ndo; x = len + (char*)x; } /* Now, root broadcasts the result down the binary tree */ len = orign*size; armci_msg_bcast_scope(scope, origx, len, root); } } void armci_msg_reduce_scope(int scope, void *x, int n, char* op, int type) { int root, up, left, right, size; int tag=ARMCI_TAG; int ndo, len, lenmes, ratio; if(!x)armci_die("armci_msg_gop: NULL pointer", n); if(work==NULL)_allocate_mem_for_work(); armci_msg_bintree(scope, &root, &up, &left, &right); if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); ratio = sizeof(double)/size; while ((ndo = (n<=BUF_SIZE*ratio) ? n : BUF_SIZE*ratio)) { len = lenmes = ndo*size; if (left > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, left); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op,(long long*)x,llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (right > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, right); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op,(long long*)x,llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (armci_me != root && up!=-1) armci_msg_snd(tag, x, len, up); n -=ndo; x = len + (char*)x; } } static void gop(int type, int ndo, char* op, void *x, void *work) { if(type==ARMCI_INT) idoop(ndo, op, (int*)x, (int*)work); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, (long*)work); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op, (long long*)x, (long long*)work); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, (float*)work); else ddoop(ndo, op, (double*)x, (double*)work); } static void gop2(int type, int ndo, char* op, void *x, void *work, void *work2) { #if 0 int size; if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); armci_copy(work2,x,ndo*size); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, (int*)work); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, (long*)work); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op, (long long*)x, (long long*)work); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, (float*)work); else ddoop(ndo, op, (double*)x, (double*)work); #else if(type==ARMCI_INT) idoop2(ndo, op, (int*)x, (int*)work, (int*)work2); else if(type==ARMCI_LONG)ldoop2(ndo,op,(long*)x,(long*)work,(long*)work2); else if(type==ARMCI_LONG_LONG) lldoop2(ndo,op,(long long*)x,(long long*)work,(long long*)work2); else if(type==ARMCI_FLOAT)fdoop2(ndo,op,(float*)x,(float*)work,(float*)work2); else ddoop2(ndo, op, (double*)x, (double*)work,(double*)work2); #endif } /*\ shared memory based reduction for a single SMP node \*/ static void armci_smp_reduce(void *x, int n, char* op, int type) { int root, up, left, right, size; int ndo, len, lenmes, ratio; int nslave = armci_clus_info[armci_clus_me].nslave; if(nslave<2) return; /* nothing to do */ if(!x)armci_die("armci_msg_gop: NULL pointer", n); armci_msg_bintree(SCOPE_NODE, &root, &up, &left, &right); if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); ratio = sizeof(double)/size; while ((ndo = (n<=BUF_SIZE*ratio) ? n : BUF_SIZE*ratio)) { len = lenmes = ndo*size; armci_util_wait_int(&GOP_BUF(armci_me)->a.flag, EMPTY, 100); #if 1 if(left<0 && right<0) armci_copy(x,GOP_BUF(armci_me)->array,len); /* version oblivious to the order of data arrival */ { int need_left = left >-1; int need_right = right >-1; int from, first =1, maxspin=100, count=0; bufstruct *b; while(need_left || need_right){ from =-1; if(need_left && GOP_BUF(left)->a.flag == FULL){ from =left; need_left =0; }else if(need_right && GOP_BUF(right)->a.flag == FULL) { from =right; need_right =0; } if(from != -1){ b = GOP_BUF(from); #if 1 if(armci_me == root) gop(type, ndo, op, x, b->array); else { if(first) gop2(type, ndo, op, GOP_BUF(armci_me)->array, b->array,x); else gop(type, ndo, op, GOP_BUF(armci_me)->array, b->array); } first =0; #else gop(type, ndo, op, GOP_BUF(armci_me)->array, b->array); #endif SET_SHM_FLAG(&( b->a.flag),empty); }else if((++count)array,len); /* this version requires a specific order of data arrival */ if (left >-1) { while(GOP_BUF(left)->a.flag != FULL) cpu_yield(); gop(type, ndo, op, GOP_BUF(armci_me)->array, GOP_BUF(left)->array); SET_SHM_FLAG(&( GOP_BUF(left)->a.flag),empty); } if (right >-1 ) { while(GOP_BUF(right)->a.flag != FULL) cpu_yield(); gop(type, ndo, op, GOP_BUF(armci_me)->array, GOP_BUF(right)->array); GOP_BUF(right)->a.flag = EMPTY; } #endif if (armci_me != root ) { SET_SHM_FLAG(&(GOP_BUF(armci_me)->a.flag),full); } #if 0 else /* NOTE: this copy can be eliminated in a cluster configuration */ armci_copy(GOP_BUF(armci_me)->array,x,len); #endif n -=ndo; x = len + (char*)x; } } void _armci_msg_binomial_reduce(void *x, int n, char* op, int type){ int root = armci_clus_info[0].master; int i,next_node,next; int size, ratio, ndo, lenmes,len; /* int my_rank,root_rank,next_rank; */ if(work==NULL)_allocate_mem_for_work(); if(armci_me!=armci_master)return; if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); ratio = sizeof(double)/size; while ((ndo = (n<=BUF_SIZE*ratio) ? n : BUF_SIZE*ratio)) { int snd_proc=armci_clus_me,flag=1,diff=1; len = lenmes = ndo*size; if(armci_me!=root){ while(!(snd_proc & flag)){ diff=diff<<1; flag=flag<<1; } snd_proc = armci_clus_info[armci_clus_me-diff].master; } else diff = Lp2; /*printf("\n%d: %d diff>>1 = %d\n",armci_me,Lp2,diff>>1);*/ for(i=diff>>1;i>=1;i=i>>1){ next=i^armci_clus_me; if(next>=0 && next1){ #ifdef LAPI if(_armci_gop_init) _armci_msg_binomial_reduce(x,n,op,type); else #endif armci_msg_reduce_scope(SCOPE_MASTERS, x, n, op, type); } } static void armci_msg_gop2(void *x, int n, char* op, int type) { int size, root=0; if(work==NULL)_allocate_mem_for_work(); if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); #ifdef BGML /*optimize what we can at the message layer */ void *origx=x; BGML_Dt dt; BGML_Op rop; if(n>0 && (strncmp(op, "+", 1) == 0)) { rop=BGML_SUM; if(type == ARMCI_INT) { dt=BGML_SIGNED_INT; BGTr_Allreduce(origx, x, n, dt, rop, -1, 3); } else if(type == ARMCI_LONG || type == ARMCI_LONG_LONG) { armci_msg_reduce(x, n, op, type); armci_msg_bcast(x, size*n, root); /* dt=BGML_UNSIGNED_LONG; */ /* BGTr_Allreduce(origx, x, n, dt, rop, -1, 3);*/ } else if(type == ARMCI_DOUBLE) { dt=BGML_DOUBLE; BGTr_Allreduce(origx, x, n, dt, rop, -1, 3); } else if(type == ARMCI_FLOAT) { armci_msg_reduce(x, n, op, type); armci_msg_bcast(x, size*n, root); } else { fprintf(stderr,"Unknown data type\n"); exit(1); } } else if(n>0 && ((strncmp(op, "max", 3) == 0) || (strncmp(op, "min", 3) ==0 ))) { if(strncmp(op, "max", 3) == 0) rop=BGML_MAX; else rop=BGML_MIN; if(type == ARMCI_INT) dt=BGML_SIGNED_INT; else if(type == ARMCI_DOUBLE) dt=BGML_DOUBLE; else if(type == ARMCI_FLOAT) dt=BGML_FLOAT; else if(type == ARMCI_LONG) dt=BGML_SIGNED_LONG; else if(type == ARMCI_LONG_LONG) { armci_msg_reduce(x, n, op, type); armci_msg_bcast(x, size*n, root); } else { fprintf(stderr,"Unknown data type\n"); exit(1); } if(type != ARMCI_LONG_LONG) BGTr_Allreduce(origx, x, n, dt, rop, -1, 3); } else #endif { /* brackets needed for final gelse clause of bgml */ armci_msg_reduce(x, n, op, type); armci_msg_bcast(x, size*n, root); } } static void armci_sel(int type, char *op, void *x, void* work, int n) { int selected=0; switch (type) { case ARMCI_INT: if(strncmp(op,"min",3) == 0){ if(*(int*)x > *(int*)work) selected=1; }else if(*(int*)x < *(int*)work) selected=1; break; case ARMCI_LONG: if(strncmp(op,"min",3) == 0){ if(*(long*)x > *(long*)work) selected=1; }else if(*(long*)x < *(long*)work) selected=1; break; case ARMCI_LONG_LONG: if(strncmp(op,"min",3) == 0){ if(*(long long*)x > *(long long*)work) selected=1; }else if(*(long long*)x < *(long long*)work) selected=1; break; case ARMCI_FLOAT: if(strncmp(op,"min",3) == 0){ if(*(float*)x > *(float*)work) selected=1; }else if(*(float*)x < *(float*)work) selected=1; break; default: if(strncmp(op,"min",3) == 0){ if(*(double*)x > *(double*)work) selected=1; }else if(*(double*)x < *(double*)work) selected=1; } if(selected)armci_copy(work,x, n); } /*\ global for op with extra info \*/ void armci_msg_sel_scope(int scope, void *x, int n, char* op, int type, int contribute) { int root, up, left, right; int tag=ARMCI_TAG; int len, lenmes, min; min = (strncmp(op,"min",3) == 0); if(!min && (strncmp(op,"max",3) != 0)) armci_die("armci_msg_gop_info: operation not supported ", 0); if(!x)armci_die("armci_msg_gop_info: NULL pointer", n); if(n>((int)INFO_BUF_SIZE))armci_die("armci_msg_gop_info: info too large",n); len = lenmes = n; armci_msg_bintree(scope, &root, &up, &left, &right); if (left > -1) { /* receive into work if contributing otherwise into x */ if(contribute)armci_msg_rcv(tag, work, len, &lenmes, left); else armci_msg_rcv(tag, x, len, &lenmes, left); if(lenmes){ if(contribute) armci_sel(type, op, x, work, n); else contribute =1; /* now we got data to pass */ } } if (right > -1) { /* receive into work if contributing otherwise into x */ if(contribute) armci_msg_rcv(tag, work, len, &lenmes, right); else armci_msg_rcv(tag, x, len, &lenmes, right); if(lenmes){ if(contribute) armci_sel(type, op, x, work, n); else contribute =1; /* now we got data to pass */ } } if (armci_me != root){ if(contribute) armci_msg_snd(tag, x, len, up); else armci_msg_snd(tag, x, 0, up); /* send 0 bytes */ } /* Now, root broadcasts the result down the binary tree */ armci_msg_bcast_scope(scope, x, n, root); } /*\ combine array of longs/ints/doubles accross all processes \*/ #if defined(NEC) void armci_msg_igop(int *x, int n, char* op) { armci_msg_gop_scope(SCOPE_ALL,x, n, op, ARMCI_INT); } void armci_msg_lgop(long *x, int n, char* op) { armci_msg_gop_scope(SCOPE_ALL,x, n, op, ARMCI_LONG); } void armci_msg_llgop(long long *x, int n, char* op) { armci_msg_gop_scope(SCOPE_ALL,x, n, op, ARMCI_LONG_LONG); } void armci_msg_dgop(double *x, int n, char* op) { armci_msg_gop_scope(SCOPE_ALL,x, n, op, ARMCI_DOUBLE); } void armci_msg_fgop (float *x, int n, char* op) { armci_msg_gop_scope(SCOPE_ALL,x, n, op, ARMCI_FLOAT);} #else void armci_msg_igop(int *x, int n, char* op) { armci_msg_gop2(x, n, op, ARMCI_INT); } void armci_msg_lgop(long *x, int n, char* op) { armci_msg_gop2(x, n, op, ARMCI_LONG); } void armci_msg_llgop(long long *x, int n, char* op) { armci_msg_gop2(x, n, op, ARMCI_LONG_LONG); } void armci_msg_fgop(float *x, int n, char* op) { armci_msg_gop2(x, n, op, ARMCI_FLOAT); } void armci_msg_dgop(double *x, int n, char* op) { armci_msg_gop2(x, n, op, ARMCI_DOUBLE); } #endif /*\ add array of longs/ints within the same cluster node \*/ void armci_msg_clus_igop(int *x, int n, char* op) { armci_msg_gop_scope(SCOPE_NODE,x, n, op, ARMCI_INT); } void armci_msg_clus_lgop(long *x, int n, char* op) { armci_msg_gop_scope(SCOPE_NODE,x, n, op, ARMCI_LONG); } void armci_msg_clus_llgop(long long *x, int n, char* op) { armci_msg_gop_scope(SCOPE_NODE,x, n, op, ARMCI_LONG_LONG); } void armci_msg_clus_fgop(float *x, int n, char* op) { armci_msg_gop_scope(SCOPE_NODE,x, n, op, ARMCI_FLOAT); } void armci_msg_clus_dgop_scope(double *x, int n, char* op) { armci_msg_gop_scope(SCOPE_NODE,x, n, op, ARMCI_DOUBLE); } void armci_exchange_address(void *ptr_ar[], int n) { int ratio = sizeof(void*)/sizeof(int); /* armci_msg_lgop((long*)ptr_ar, n, "+"); */ if(DEBUG_)printf("%d: exchanging %ld ratio=%d\n",armci_me,(long)ptr_ar[armci_me],ratio); armci_msg_gop2(ptr_ar, n*ratio, "+",ARMCI_INT); } /** * ********************* Begin ARMCI Groups Code **************************** * NOTE: This part is MPI dependent (i.e. ifdef MPI) */ #ifdef MPI MPI_Comm armci_group_comm(ARMCI_Group *group) { #ifdef ARMCI_GROUP return MPI_COMM_NULL; #else ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); return (MPI_Comm)(igroup->icomm); #endif } void parmci_msg_group_barrier(ARMCI_Group *group) { ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); #ifdef ARMCI_GROUP { int val=0; armci_msg_group_igop(&val, 1, "+", group); } #else MPI_Barrier((MPI_Comm)(igroup->icomm)); #endif } #ifdef ARMCI_GROUP extern void ARMCI_Bcast_(void *buffer, int len, int root, ARMCI_Group *group); #else extern void ARMCI_Bcast_(void *buffer, int len, int root, ARMCI_Comm comm); #endif void armci_grp_clus_brdcst(void *buf, int len, int grp_master, int grp_clus_nproc, ARMCI_Group *mastergroup) { ARMCI_iGroup *igroup = armci_get_igroup_from_group(mastergroup); int i, *pid_list, root=0; #ifdef ARMCI_GROUP ARMCI_Group group; #else MPI_Group group_world; MPI_Group group; MPI_Comm comm; #endif /* create a communicator for the processes with in a node */ pid_list = (int *)malloc(grp_clus_nproc*sizeof(int)); for(i=0; iicomm), &group_world); MPI_Group_incl(group_world, grp_clus_nproc, pid_list, &group); MPI_Comm_create((MPI_Comm)(igroup->icomm), (MPI_Group)group, (MPI_Comm*)&comm); /* Broadcast within the node (for this sub group of processes) */ ARMCI_Bcast_(buf, len, root, comm); free(pid_list); MPI_Comm_free(&comm); /* free the temporary communicator */ MPI_Group_free(&group); #endif } /* to avoid warning */ extern int ARMCI_Absolute_id(ARMCI_Group *group,int group_rank); void armci_msg_group_bintree(int scope, int* Root, int *Up, int *Left, int *Right, ARMCI_Group *group) { int root, up, left, right, index, nproc,grp_clus_me,grp_me,grp_master,grp_nproc; armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); grp_me = grp_attr->grp_me; grp_clus_me = grp_attr->grp_clus_me; grp_master = grp_attr->grp_clus_info[grp_clus_me].master; ARMCI_Group_size(group, &grp_nproc); if(scope == SCOPE_NODE){ root = grp_attr->grp_clus_info[grp_clus_me].master; nproc = grp_attr->grp_clus_info[grp_clus_me].nslave; index = grp_me - root; up = (index-1)/2 + root; if( up < root) up = -1; left = 2*index + 1 + root; if(left >= root+nproc) left = -1; right = 2*index + 2 + root; if(right >= root+nproc)right = -1; }else if(scope ==SCOPE_MASTERS){ root = grp_attr->grp_clus_info[0].master; nproc = grp_attr->grp_nclus; if(grp_me != grp_master){up = -1; left = -1; right = -1; } else{ index = grp_clus_me - root; up = (index-1)/2 + root; up = ( up < root)? -1: grp_attr->grp_clus_info[up].master; left = 2*index + 1 + root; left =( left >= root+nproc)?-1:grp_attr->grp_clus_info[left].master; right= 2*index + 2 + root; right=( right>=root+nproc)?-1:grp_attr->grp_clus_info[right].master; } }else{ root = 0; nproc = grp_nproc; index = grp_me - root; up = (index-1)/2 + root; if( up < root) up = -1; left = 2*index + 1 + root; if(left >= root+nproc) left = -1; right = 2*index + 2 + root; if(right >= root+nproc)right = -1; } *Up = (up==-1)?up:ARMCI_Absolute_id(group,up); *Left = (left==-1)?left:ARMCI_Absolute_id(group,left); *Right = (right==-1)?right:ARMCI_Absolute_id(group,right); *Root = (root==-1)?root:ARMCI_Absolute_id(group,root); } void armci_msg_group_bcast_scope(int scope, void *buf, int len, int root, ARMCI_Group *group) { int up, left, right, Root; int grp_me; ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); if(!buf)armci_die("armci_msg_bcast: NULL pointer", len); if(!group)armci_msg_bcast_scope(scope,buf,len,root); else grp_me = igroup->grp_attr.grp_me; armci_msg_group_bintree(scope, &Root, &up, &left, &right,group); if(root !=Root){ if(armci_me == root) armci_msg_snd(ARMCI_TAG, buf,len, Root); if(armci_me ==Root) armci_msg_rcv(ARMCI_TAG, buf, len, NULL, root); } /* printf("%d: scope=%d left=%d right=%d up=%d\n",armci_me, scope, left, right, up);*/ if(armci_me != Root && up!=-1) armci_msg_rcv(ARMCI_TAG, buf, len, NULL, up); if (left > -1) armci_msg_snd(ARMCI_TAG, buf, len, left); if (right > -1) armci_msg_snd(ARMCI_TAG, buf, len, right); } void armci_msg_group_gop_scope(int scope, void *x, int n, char* op, int type, ARMCI_Group *group) { int root, up, left, right, size; int tag=ARMCI_TAG,grp_me; int ndo, len, lenmes, orign =n, ratio; void *origx =x; ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); if(!group)armci_msg_gop_scope(scope,x,n,op,type); else grp_me = igroup->grp_attr.grp_me; if(!x)armci_die("armci_msg_gop: NULL pointer", n); if(work==NULL)_allocate_mem_for_work(); armci_msg_group_bintree(scope, &root, &up, &left, &right,group); if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); ratio = sizeof(double)/size; while ((ndo = (n<=BUF_SIZE*ratio) ? n : BUF_SIZE*ratio)) { len = lenmes = ndo*size; if (left > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, left); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op, (long long*)x,llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (right > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, right); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op,(long long*)x, llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (armci_me != root && up!=-1) armci_msg_snd(tag, x, len, up); n -=ndo; x = len + (char*)x; } /* Now, root broadcasts the result down the binary tree */ len = orign*size; armci_msg_group_bcast_scope(scope, origx, len, root,group); } void armci_exchange_address_grp(void *ptr_arr[], int n, ARMCI_Group *group) { int ratio = sizeof(void*)/sizeof(int); ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); int grp_me = igroup->grp_attr.grp_me; if(DEBUG_){ printf("%d: exchanging %ld ratio=%d\n",armci_me, (long)ptr_arr[grp_me], ratio); } armci_msg_group_gop_scope(SCOPE_ALL, ptr_arr, n*ratio, "+", ARMCI_INT, group); } /*\ combine array of longs/ints/doubles accross all processes \*/ void armci_msg_group_igop(int *x, int n, char* op, ARMCI_Group *group) { armci_msg_group_gop_scope(SCOPE_ALL,x, n, op, ARMCI_INT,group); } void armci_msg_group_lgop(long *x, int n, char* op,ARMCI_Group *group) { armci_msg_group_gop_scope(SCOPE_ALL,x, n, op, ARMCI_LONG,group); } void armci_msg_group_llgop(long long *x, int n, char* op,ARMCI_Group *group) { armci_msg_group_gop_scope(SCOPE_ALL,x, n, op, ARMCI_LONG_LONG,group); } void armci_msg_group_fgop(float *x, int n, char* op,ARMCI_Group *group) { armci_msg_group_gop_scope(SCOPE_ALL,x, n, op, ARMCI_FLOAT,group); } void armci_msg_group_dgop(double *x, int n, char* op,ARMCI_Group *group) { armci_msg_group_gop_scope(SCOPE_ALL,x, n, op, ARMCI_DOUBLE,group); } # endif /* ifdef MPI */ /*********************** End ARMCI Groups Code ****************************/ #ifdef PVM /* set the group name if using PVM */ void ARMCI_PVM_Init(char *mpgroup) { #ifdef CRAY mp_group_name = (char *)NULL; #else if(mpgroup != NULL) { /* free(mp_group_name); */ mp_group_name = (char *)malloc(25 * sizeof(char)); strcpy(mp_group_name, mpgroup); } #endif } #endif ga-5-3/armci/src-portals/portals_cp.c0000640005473000001440000007744411622314656016500 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* ---------------------------------------------------------------------------------------------- *\ portals_cp.c -- compute process portals calls author: ryan olson email: ryan@cray.com \* ---------------------------------------------------------------------------------------------- */ # include "armcip.h" # include # include # include # include /* ---------------------------------------------------------------------------------------------- *\ \* ---------------------------------------------------------------------------------------------- */ static ptl_handle_ni_t cp_nih; static ptl_handle_eq_t cp_eqh; static ptl_handle_eq_t cp_tx_eqh; static void *portals_eager_send_buffer = NULL; static size_t portals_unique_msg_counter = 373; static int portals_smp_sem = -1; static int *active_requests_by_node = NULL; /* ---------------------------------------------------------------------------------------------- *\ \* ---------------------------------------------------------------------------------------------- */ int portals_cp_finished = 0; /* ---------------------------------------------------------------------------------------------- *\ Implementation \* ---------------------------------------------------------------------------------------------- */ int portals_cp_init(void) { int rc; int me; ptl_process_id_t id; rc = portals_init(&cp_nih); if(rc != PTL_OK) { printf("error in portals_init: err %d\n",rc); Fatal_error(rc); } rc = portals_create_eq(cp_nih,10*PORTALS_MAX_DESCRIPTORS,&cp_eqh); if(rc != PTL_OK) { printf("failed to create cp event queue; err %d\n",rc); Fatal_error(911); } rc = portals_create_eq(cp_nih,30,&cp_tx_eqh); if(rc != PTL_OK) { printf("failed to create cp_tx event queue; err %d\n",rc); Fatal_error(911); } rc = portals_cp_getid(&id); if(rc != PTL_OK) { printf("failed to get the portals id; err %d\n",rc); Fatal_error(rc); } /* creating an smp/intra-node communicator */ MPI_Comm_rank(ARMCI_COMM_WORLD,&me); MPI_Comm_split(ARMCI_COMM_WORLD,id.nid,me,&portals_smp_comm); /* set affinity */ # ifdef PORTALS_AFFINITY int smp_np, smp_me; unsigned long mask; unsigned int len = sizeof(mask); unsigned long ncpus; unsigned int nsockets, siblings; int cores_per_socket, cps_per_socket; int verbose = 0; MPI_Comm_size(portals_smp_comm,&smp_np); MPI_Comm_rank(portals_smp_comm,&smp_me); if((ncpus = sysconf(_SC_NPROCESSORS_ONLN)) < 0) { printf("%d [cp] sysconf(_SC_NPROCESSORS_ONLN) failed; err=%d\n", ncpus); armci_die("sysconf in init_throttle",911); } if(sched_getaffinity(0, len, &mask) < 0) { perror("sched_getaffinity"); armci_die("getaffinity error in ds_init",911); } if(armci_clus_me == 0 && /* verbose */ 0 ) { printf("%d [cp]: old affinity = 0x%x, ncpus = %d\n", armci_me, mask, ncpus); } if(smp_me == 0) { mask = 1 << (ncpus-1); if(sched_setaffinity(0, len, (cpu_set_t *) &mask) < 0) { perror("sched_setaffinity to probe the socket count"); armci_die("setaffinity error in ds_init",911); } siblings = cpuid_ebx(1) >>16 & 0xff; nsockets = ncpus / siblings; } MPI_Bcast(&nsockets,1,MPI_INT,0,portals_smp_comm); cores_per_socket = ncpus/nsockets; cps_per_socket = (smp_np / nsockets); cps_per_socket += (smp_np % nsockets); if(nsockets > 2) { armci_die("nsockets > 2 not supported",911); } if(smp_me < cps_per_socket) { mask = 1 << smp_me; } else { mask = 1 << (smp_me + (cores_per_socket - cps_per_socket)); } if(sched_setaffinity(0, len, (cpu_set_t *) &mask) < 0) { perror("sched_setaffinity"); armci_die("setaffinity error in ds_init",911); } if(sched_getaffinity(0, len, &mask) < 0) { perror("sched_getaffinity"); armci_die("getaffinity error (#2) in ds_init",911); } if(armci_clus_me == 0 && verbose) { printf("%d [cp]: new affinity = 0x%x, ncpus = %d\n", armci_me, mask, ncpus); } # endif return PTL_OK; } int portals_cp_finalize() { int rc; # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE armci_semrm(portals_smp_sem); # endif rc = portals_free_eq(cp_eqh); if (rc != PTL_OK) { printf("error freeing cp_eqh; err %d\n",rc); } MPI_Barrier(ARMCI_COMM_WORLD); MPI_Finalize(); portals_cp_finished = 1; exit(0); return PTL_OK; // return portals_finalize(cp_nih); } int portals_cp_getid(ptl_process_id_t *id) { return portals_getid(cp_nih, id); } static size_t portals_get_unique_msg_id(void) { size_t val = armci_me*1000; portals_unique_msg_counter++; if(portals_unique_msg_counter == 1000) portals_unique_msg_counter=1; val += portals_unique_msg_counter; return val; } static void portals_req_clear(portals_ds_req_t *req) { req->active = 0; req->unique_msg_id = 0; req->req_desc.done = 1; req->req_desc.state = 0; req->req_desc.eqh = cp_tx_eqh; req->ack_desc.done = 1; req->ack_desc.state = 0; req->ack_desc.eqh = cp_eqh; req->data_desc.done = 1; req->data_desc.state = 0; req->data_desc.eqh = cp_eqh; req->remote_node = -1; } static ptl_process_id_t portals_get_dsid_from_node(int remote_node) { int rank = armci_clus_info[remote_node].master; if(portals_cloned_id_map) return portals_cloned_id_map[rank]; else return portals_id_map[rank]; } static ptl_process_id_t portals_get_dsid_from_rank(int remote_id) { if(portals_cloned_id_map) return portals_cloned_id_map[remote_id]; else return portals_id_map[remote_id]; } void portals_req_nbsend(void *buffer, size_t size, portals_ds_req_t *req) { int rc; portals_desc_t *desc = &req->req_desc; assert(req->unique_msg_id); assert(size < portalsMaxEagerMessageSize); assert(req->remote_node >= 0); /* ---------------------------------------------------------------------------- *\ if we get here, we can guarantee that where are no outstanding requests from this PE to the remote node; however, we can not guarantee that other PEs on this node aren't talking to the intended data server ... so now we wait on value in the "shared" array. \* ---------------------------------------------------------------------------- */ # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE int got_lock = 0; while(!got_lock) { portalsSpinLockOnInt(&active_requests_by_node[req->remote_node],0,1000); semaphoreAcquire(portals_smp_sem,1,PORTALS_WRITE_ACCESS); if(active_requests_by_node[req->remote_node] == 0) { active_requests_by_node[req->remote_node] = 1; got_lock = 1; } semaphoreRelease(portals_smp_sem,1,PORTALS_WRITE_ACCESS); } # endif desc->buffer = buffer; desc->length = size; desc->id = req->dsid; desc->mbits = MATCH_ALL_MBITS; desc->hdr = req->unique_msg_id; desc->state = 0; desc->eqh = cp_tx_eqh; desc->nih = cp_nih; rc = portals_put(desc); if(rc != PTL_OK) { printf("portals_put err %d\n",rc); Fatal_error(rc); } } void portals_req_send(void *buffer, size_t size, portals_ds_req_t *req) { int rc; portals_desc_t *desc = &req->req_desc; portals_req_nbsend(buffer,size,req); rc = portals_wait(desc); if(rc != PTL_OK) { printf("portals_wait err %d\n",rc); Fatal_error(rc); } } void portals_req_wait(portals_ds_req_t *req) { int rc; if(req->req_desc.state) { rc = portals_wait( &(req->req_desc) ); if(rc != PTL_OK) { printf("portals wait error on req_desc in req_wait; err=%d\n",rc); Fatal_error(rc); } } if(req->ack_desc.state) { rc = portals_wait( &(req->ack_desc) ); if(rc != PTL_OK) { printf("portals wait error on ack_desc in req_wait; err=%d\n",rc); Fatal_error(rc); } } if(req->data_desc.state) { rc = portals_wait( &(req->data_desc) ); if(rc != PTL_OK) { printf("portals wait error on data_desc in req_wait; err=%d\n",rc); Fatal_error(rc); } } req->active = 0; return; } void portalsWaitOnRequest(portals_ds_req_t *req) { portals_req_wait(req); } static int portals_prepost_ack_from_ds(portals_ds_req_t *req) { int rc; ptl_md_t md; portals_desc_t *desc = &req->ack_desc; unsigned long mbits = req->unique_msg_id; assert(req->unique_msg_id); assert(req->remote_node >= 0); # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE desc->buffer = &active_requests_by_node[req->remote_node]; desc->length = sizeof(int); # else desc->buffer = NULL; desc->length = 0; # endif desc->id = req->dsid; desc->mbits = mbits | DS_RESPONSE_ACK; desc->hdr = mbits; desc->eqh = cp_eqh; rc = portals_me_attach(cp_nih,desc->id,desc->mbits,0,&desc->meh); if(rc != PTL_OK) { printf("me failed in prepost ack\n"); Fatal_error(rc); } md.start = desc->buffer; md.length = desc->length; md.threshold = 1; md.options = PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; md.user_ptr = desc; md.eq_handle = cp_eqh; rc = portals_md_attach(desc->meh,md,PTL_UNLINK,&desc->mdh); if(rc != PTL_OK) { printf("md failed in prepost ack\n"); Fatal_error(rc); } // desc->state = STATE_PUT_END; // |= needed for rendez-vous gets; put and get using the same descriptor desc->state |= STATE_PUT_END; desc->done = 0; } static int portals_prepost_put_from_ds(void *buffer, size_t size, portals_ds_req_t *req) { int rc; int nputs; ptl_md_t md; portals_desc_t *desc = &req->data_desc; unsigned long mbits = req->unique_msg_id; assert(req->unique_msg_id); desc->buffer = buffer; desc->length = size; desc->id = req->dsid; desc->mbits = mbits | DS_RESPONSE_PUT; desc->hdr = mbits; desc->eqh = cp_eqh; rc = portals_me_attach(cp_nih,desc->id,desc->mbits,0,&desc->meh); if(rc != PTL_OK) { printf("me failed in prepost put\n"); Fatal_error(rc); } md.start = buffer; md.length = size; md.threshold = desc->noperations; md.options = PTL_MD_OP_PUT | PTL_MD_EVENT_AUTO_UNLINK_ENABLE | PTL_MD_EVENT_START_DISABLE | PTL_MD_EVENT_END_DISABLE; md.user_ptr = (void *) desc; md.eq_handle = cp_eqh; rc = portals_md_attach(desc->meh,md,PTL_UNLINK,&desc->mdh); if(rc != PTL_OK) { printf("md failed in prepost put\n"); Fatal_error(rc); } // desc->state = STATE_UNLINK; // |= needed for rendez-vous gets; put and get using the same descriptor desc->state |= STATE_UNLINK; desc->done = 0; } static int portals_prepost_get_from_ds(void *buffer, size_t size, portals_ds_req_t *req) { int rc; ptl_md_t md; portals_desc_t *desc = &req->data_desc; unsigned long mbits = req->unique_msg_id; assert(req->unique_msg_id); desc->buffer = buffer; desc->length = size; desc->id = req->dsid; desc->mbits = mbits | DS_RESPONSE_GET; desc->hdr = mbits; desc->eqh = cp_eqh; rc = portals_me_attach(cp_nih,desc->id,desc->mbits,0,&desc->meh); if(rc != PTL_OK) { printf("me failed in prepost get\n"); Fatal_error(rc); } md.start = buffer; md.length = size; md.threshold = desc->noperations; md.options = PTL_MD_OP_GET | PTL_MD_EVENT_START_DISABLE; // | PTL_MD_EVENT_AUTO_UNLINK_ENABLE // | PTL_MD_EVENT_START_DISABLE // | PTL_MD_EVENT_END_DISABLE; md.user_ptr = (void *) desc; md.eq_handle = cp_eqh; rc = portals_md_attach(desc->meh,md,PTL_UNLINK,&desc->mdh); if(rc != PTL_OK) { printf("md failed in prepost get\n"); Fatal_error(rc); } // printf("%d: preposted get of lenght=%ld\n",armci_me,size); // desc->state = STATE_UNLINK; // desc->state = STATE_GET_END; // |= needed for rendez-vous gets; put and get using the same descriptor desc->state |= STATE_GET_END; desc->done = 0; } void portalsBlockingRemoteOperationToNode(void *buffer, size_t length, int remote_node) { portals_ds_req_t req; portals_req_clear(&req); portalsRemoteOperationToNode(buffer,length,remote_node,&req); portalsWaitOnRequest(&req); } void portalsRemoteOperationToNode(void *buffer, size_t length, int remote_node, portals_ds_req_t *req) { ptl_process_id_t id = portals_get_dsid_from_node(remote_node); req->remote_node = remote_node; portalsRemoteOperation(buffer,length,id,req); } /* void portalsRemoteOperationToRank(void *buffer, size_t length, int remote_rank, portals_ds_req_t *req) { ptl_process_id_t id = portals_get_dsid_from_rank(remote_rank); portalsRemoteOperation(buffer,length,id,req); } */ void portalsRemoteOperation(void *buffer, size_t length, ptl_process_id_t dsid, portals_ds_req_t *req) { /* --------------------------------------------------------------------- *\ initialize the data server request \* --------------------------------------------------------------------- */ // portals_req_clear(req); req->active = 1; req->unique_msg_id = portals_get_unique_msg_id(); req->dsid = dsid; /* --------------------------------------------------------------------- *\ the only response from the ds will be a 0-byte ack coming in as a put \* --------------------------------------------------------------------- */ portals_prepost_ack_from_ds(req); /* --------------------------------------------------------------------- *\ send data request; this is a completely blocking req \* --------------------------------------------------------------------- */ portals_req_send(buffer,length,req); } void portals_send_oper(int remote_node,int val, portals_ds_req_t *req) { int rc; request_header_t msg; /* --------------------------------------------------------------------- *\ initialize the data server request \* --------------------------------------------------------------------- */ portals_req_clear(req); req->active = 1; req->unique_msg_id = portals_get_unique_msg_id(); req->dsid = portals_get_dsid_from_node(remote_node); req->remote_node = remote_node; /* --------------------------------------------------------------------- *\ the only response from the ds will be a 0-byte ack coming in as a put \* --------------------------------------------------------------------- */ portals_prepost_ack_from_ds(req); /* --------------------------------------------------------------------- *\ prepare data request and send it; this is a completely blocking req \* --------------------------------------------------------------------- */ msg.operation = val; portals_req_send(&msg,sizeof(request_header_t),req); return; } void portals_send_QUIT(int remote_node) { portals_ds_req_t req; portals_send_oper(remote_node,QUIT,&req); portals_req_wait(&req); } static int portals_determine_remote_op_count(request_header_t *msg) { #ifdef DDI int nr,nc,np; int datatype_extent = sizeof(double); /* --------------------------------------------------------------------- *\ previously we have worked with words, but to provide support for other data types, we must work with bytes. note to developers: datatype_extent = the size in bytes of the stored datatype \* --------------------------------------------------------------------- */ if(msg->size*datatype_extent <= MAX_DS_MSG_SIZE) return 1; /* --------------------------------------------------------------------- *\ the data must be moved in segments; determine patch dimensions \* --------------------------------------------------------------------- */ nr = msg->ihi - msg->ilo + 1; nc = msg->jhi - msg->jlo + 1; /* --------------------------------------------------------------------- *\ each column individually is too long to fit in the buffer \* --------------------------------------------------------------------- */ if(nr*datatype_extent < MAX_DS_MSG_SIZE) { /* ------------------------------------------------------------------ *\ np the number of "evenly" sized passed needed to send a column \* ------------------------------------------------------------------ */ np = 2; while(((nr/np)+((nr%np)?1:0)*datatype_extent)>MAX_DS_MSG_SIZE) np++; /* ------------------------------------------------------------------ *\ noperations is np times the number of columns to be sent \* ------------------------------------------------------------------ */ return np*nc; } /* --------------------------------------------------------------------- *\ determine the number of full columns that can be sent in one pass break down the subpatch on this metric \* --------------------------------------------------------------------- */ else { /* ------------------------------------------------------------------ *\ np is the number of passes needed to send the full patch which is broken down into "evenly" sized sets of columns that fit in the allocated buffer region \* ------------------------------------------------------------------ */ np = 2; while(nr*((nc/np)+((nc%np)?1:0))*datatype_extent>MAX_DS_MSG_SIZE) np++; /* ------------------------------------------------------------------ *\ noperations is np \* ------------------------------------------------------------------ */ return np; } assert(0); // should not happen return -1; #else return 1; #endif } void portals_remote_rmw(void *buffer, request_header_t *msginfo, int remote_node, portals_ds_req_t *req) { ptl_size_t length; /* --------------------------------------------------------------------- *\ initialize the data server request \* --------------------------------------------------------------------- */ portals_req_clear(req); req->active = 1; req->unique_msg_id = portals_get_unique_msg_id(); req->dsid = portals_get_dsid_from_node(remote_node); req->remote_node = remote_node; /* --------------------------------------------------------------------- *\ prepare the buffer into which the ds will put data \* --------------------------------------------------------------------- */ req->data_desc.noperations=portals_determine_remote_op_count(msginfo); portals_prepost_put_from_ds(buffer,msginfo->datalen,req); # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE portals_prepost_ack_from_ds(req); # endif /* --------------------------------------------------------------------- *\ send data request note: from armci_send_req - if get, the value of bytes (local: length) is msginfo->dscrlen + (hdrlen=sizeof(request_header_t) ... this is the size of the "data server request message" to be sent \* --------------------------------------------------------------------- */ length = sizeof(request_header_t) + msginfo->dscrlen + msginfo->datalen; portals_req_send(msginfo,length,req); } void portals_remote_get(void *buffer, request_header_t *msginfo, int remote_node) { portals_ds_req_t req; portals_remote_nbget(buffer,msginfo,remote_node,&req); portals_req_wait(&req); } void portals_remote_nbget(void *buffer, request_header_t *msginfo, int remote_node, portals_ds_req_t *req) { ptl_size_t length; /* --------------------------------------------------------------------- *\ initialize the data server request \* --------------------------------------------------------------------- */ portals_req_clear(req); req->active = 1; req->unique_msg_id = portals_get_unique_msg_id(); req->dsid = portals_get_dsid_from_node(remote_node); req->remote_node = remote_node; /* --------------------------------------------------------------------- *\ prepare the buffer into which the ds will put data \* --------------------------------------------------------------------- */ req->data_desc.noperations=portals_determine_remote_op_count(msginfo); portals_prepost_put_from_ds(buffer,msginfo->datalen,req); # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE portals_prepost_ack_from_ds(req); # endif /* --------------------------------------------------------------------- *\ send data request note: from armci_send_req - if get, the value of bytes (local: length) is msginfo->dscrlen + (hdrlen=sizeof(request_header_t) ... this is the size of the "data server request message" to be sent \* --------------------------------------------------------------------- */ length = sizeof(request_header_t) + msginfo->dscrlen; # if defined(PORTALS_USE_RENDEZ_VOUS) if(length < portalsMaxEagerMessageSize) portals_req_send(msginfo,length,req); else { req->data_desc.noperations = 1; portals_prepost_get_from_ds(msginfo,length,req); /* ------------------------------------------------------------------ *\ send data request: branch here for eager vs. rendez-vous \* ------------------------------------------------------------------ */ assert(length <= PORTALS_BUF_SIZE); portals_req_send(msginfo,sizeof(request_header_t),req); } # else portals_req_send(msginfo,length,req); # endif } void portals_remote_put(void *buffer, request_header_t *msginfo, int remote_node) { portals_ds_req_t req; portals_remote_nbput(buffer,msginfo,remote_node,&req); portals_req_wait(&req); } void portals_remote_nbput(void *buffer, request_header_t *msginfo, int remote_node, portals_ds_req_t *req) { char *eagerBuffer = NULL; size_t eagerSendSize = 0; /* --------------------------------------------------------------------- *\ initialize the data server request \* --------------------------------------------------------------------- */ portals_req_clear(req); req->active = 1; req->unique_msg_id = portals_get_unique_msg_id(); req->dsid = portals_get_dsid_from_node(remote_node); req->remote_node = remote_node; /* --------------------------------------------------------------------- *\ prepost ack response from the data server \* --------------------------------------------------------------------- */ portals_prepost_ack_from_ds(req); /* --------------------------------------------------------------------- *\ eager vs. rendez-vous messaging eager: pack and send the message immediate (only for small messages) developers note: since portals_eager_send_buffer only exists once, this has to be a blocking send (ie the data is on the wire when req_send has finished and the buffer can be reused. for greater overlap, create a set of eager send buffers ... however they have to be managed ... probably best to do it in a ring. note: armci put/acc buffer is prepacked. \* --------------------------------------------------------------------- */ eagerSendSize = sizeof(request_header_t) + msginfo->dscrlen + msginfo->datalen; if(eagerSendSize < portalsMaxEagerMessageSize) { // printf("sending eager message\n"); # if 0 /* armci prepacked */ eagerBuffer = (char *) portals_eager_send_buffer; memcpy(eagerBuffer,msginfo,sizeof(request_header_t)); eagerBuffer += sizeof(request_header_t); memcpy(eagerBuffer,buffer,msginfo->bytes); # endif eagerBuffer = (char *) msginfo; /* buffer == msginfo for armci */ portals_req_send(eagerBuffer,eagerSendSize,req); } /* --------------------------------------------------------------------- *\ rendez-vous: send the ds a request; ds will "get/pull" data \* --------------------------------------------------------------------- */ else { # ifdef PORTALS_USE_RENDEZ_VOUS /* ------------------------------------------------------------------ *\ prepare the buffer into which the ds will put data \* ------------------------------------------------------------------ */ // req->data_desc.noperations=portals_determine_remote_op_count(msginfo); req->data_desc.noperations = 1; portals_prepost_get_from_ds(msginfo,eagerSendSize,req); /* ------------------------------------------------------------------ *\ send data request: branch here for eager vs. rendez-vous \* ------------------------------------------------------------------ */ assert(eagerSendSize <= PORTALS_BUF_SIZE); portals_req_send(msginfo,sizeof(request_header_t),req); # else printf("%d [cp]: rendez-vous messaging not supported\n",armci_me); abort(); # endif } } #if 0 void portals_remote_acc(void *buffer, request_header_t *msginfo, int remote_node) { portals_ds_req_t req; portals_remote_nbacc(buffer,msginfo,remote_node,&req); portals_req_wait(&req); } void portals_remote_nbacc(void *buffer, request_header_t *msginfo, int remote_node, portals_ds_req_t *req) { char *eagerBuffer = NULL; size_t eagerSendSize = 0; assert(msginfo->bytes); /* --------------------------------------------------------------------- *\ initialize the data server request \* --------------------------------------------------------------------- */ portals_req_clear(req); req->active = 1; req->unique_msg_id = portals_get_unique_msg_id(); req->dsid = portals_get_dsid_from_node(remote_node); /* --------------------------------------------------------------------- *\ eager vs. rendez-vous messaging eager: pack and send the message immediate (only for small messages) \* --------------------------------------------------------------------- */ eagerSendSize = msginfo->bytes + sizeof(request_header_t); if(eagerSendSize < portalsMaxEagerMessageSize) { /* ------------------------------------------------------------------ *\ prepost ack response from the data server developers note: if you globally fence an array with a collective operation prior to a section of code and defence it after, then you don't need to micro manage the fence on a per request basis in that section; this eliminates the need for a DS ack \* ------------------------------------------------------------------ */ portals_prepost_ack_from_ds(req); /* ------------------------------------------------------------------ *\ pack and send eager data request blocking for now, since portals_eager_send_buffer only exists once create multiple eager buffers for greater overlap \* ------------------------------------------------------------------ */ eagerBuffer = (char *) portals_eager_send_buffer; memcpy(eagerBuffer,msginfo,sizeof(request_header_t)); eagerBuffer += sizeof(request_header_t); memcpy(eagerBuffer,buffer,msginfo->bytes); eagerBuffer = (char *) portals_eager_send_buffer; portals_req_send(eagerBuffer,eagerSendSize,req); } /* --------------------------------------------------------------------- *\ rendez-vous: send the ds a request; ds will "get/pull" data developers note: a ds ack is not required for a rendez-vous pull, this is because the ds will not start the pull until a local fence has been raised (if needed - see note above) \* --------------------------------------------------------------------- */ else { /* ------------------------------------------------------------------ *\ prepare the buffer from which the ds will pull data \* ------------------------------------------------------------------ */ req->data_desc.noperations=portals_determine_remote_op_count(msginfo); portals_prepost_get_from_ds(buffer,msginfo->bytes,req); /* ------------------------------------------------------------------ *\ send data request \* ------------------------------------------------------------------ */ portals_req_send(msginfo,sizeof(request_header_t),req); portalsWaitOnRequest(req); } } #endif extern int armci_shmget(size_t,char*); extern int armci_semget(int); extern void *shmat(int,int,int); void portals_cp_init_throttle(int nnodes) { int i, shmid, smp_np, smp_me; size_t size = nnodes*sizeof(int); char *buf = NULL; MPI_Comm_size(portals_smp_comm,&smp_np); MPI_Comm_rank(portals_smp_comm,&smp_me); # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE if(armci_me == armci_master) { if(smp_me != 0) armci_die("smp_me and armci_master are different",911); } if(smp_me == 0) { shmid = armci_shmget(size,"portals_cp_init_throttle"); active_requests_by_node = (int *) shmat(shmid,0,0); if(active_requests_by_node == (void *) -1) { printf("%d [cp] shmat failed for shmid %d\n",armci_me,shmid); armci_die("badness",911); } armci_shmrm(shmid); for(i=0; i #include #define SERVER_GET 1 #define SERVER_NBGET 2 #define DIRECT_GET 3 #define DIRECT_NBGET 4 #define SERVER_PUT 5 #define SERVER_NBPUT 6 #define DIRECT_PUT 7 #define DIRECT_NBPUT 8 # define DO_FENCE(__proc,__prot) if(__prot==SERVER_GET);\ else if(__prot==SERVER_PUT);\ else if(__prot==DIRECT_GET || __prot==DIRECT_NBGET){\ if(armci_prot_switch_fence[__proc]==SERVER_PUT)\ ARMCI_DoFence(__proc);\ }\ else if(__prot==DIRECT_PUT || __prot==DIRECT_NBPUT){\ if(armci_prot_switch_fence[__proc]==SERVER_PUT)\ ARMCI_DoFence(__proc);\ }\ else;\ armci_prot_switch_fence[__proc]=__prot /* typedef struct { float real; float imag; } complex_t; typedef struct { double real; double imag; } dcomplex_t; */ /* void I_ACCUMULATE(void* scale, int elems, void*src, void* dst) { int j; int *a=(int*)dst, *b=(int*)src; int alpha = *(int*)scale; for(j=0;j BUFSIZE/2){ /* for large segments use strided implementation */ for(j=0; j< dr.ptr_array_len; j++){ rc = armci_acc_copy_strided(op, scale,proc, dr.src_ptr_array[j], NULL, dr.dst_ptr_array[j],NULL, &dr.bytes, 0); if(rc)return(rc); } }else{ armci_giov_t dl; /*lock memory:should optimize it to lock only a chunk at a time*/ armci_lockmem_scatter(dr.dst_ptr_array, dr.ptr_array_len, dr.bytes, proc); /* copy as many blocks as possible into the local buffer */ dl.bytes = dr.bytes; nb = ARMCI_MIN(PWORKLEN,BUFSIZE/dr.bytes); for(j=0; j< dr.ptr_array_len; j+= nb){ int nblocks = ARMCI_MIN(nb, dr.ptr_array_len -j); int k; /* setup vector descriptor for remote memory copy to bring data into buffer*/ dl.ptr_array_len = nblocks; dl.src_ptr_array = dr.dst_ptr_array + j; /* GET destination becomes source for copy */ for(k=0; k< nblocks; k++) pwork[k] = k*dl.bytes + (char*)armci_internal_buffer; dl.dst_ptr_array = pwork; /* get data to the local buffer */ rc = armci_copy_vector(GET, &dl, 1, proc); if(rc){ ARMCI_UNLOCKMEM(proc); return(rc);} /* update source array for accumulate */ dl.src_ptr_array = dr.src_ptr_array +j; /* do scatter accumulate updating copy of data in buffer */ armci_scatter_acc(op, scale, dl, armci_me, 0); /* modify descriptor-now source becomes destination for PUT*/ dl.dst_ptr_array = dr.dst_ptr_array + j; dl.src_ptr_array = pwork; /* put data back */ rc = armci_copy_vector(PUT, &dl, 1, proc); FENCE_NODE(proc); if(rc){ ARMCI_UNLOCKMEM(proc); return(rc);} } ARMCI_UNLOCKMEM(proc); } }/*endfor*/ } #endif return 0; } int armci_copy_vector(int op, /* operation code */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ) { int i,s,shmem= SAMECLUSNODE(proc); int armci_th_idx = ARMCI_THREAD_IDX; if(shmem){ /* local/shared memory copy */ for(i = 0; i< len; i++){ for( s=0; s< darr[i].ptr_array_len; s++){ armci_copy(darr[i].src_ptr_array[s],darr[i].dst_ptr_array[s],darr[i].bytes); } } }else { switch(op){ case PUT: for(i = 0; i< len; i++){ UPDATE_FENCE_STATE(proc, PUT, darr[i].ptr_array_len); for( s=0; s< darr[i].ptr_array_len; s++){ armci_put(darr[i].src_ptr_array[s],darr[i].dst_ptr_array[s], darr[i].bytes, proc); } } break; case GET: for(i = 0; i< len; i++){ for( s=0; s< darr[i].ptr_array_len; s++){ armci_get(darr[i].src_ptr_array[s],darr[i].dst_ptr_array[s], darr[i].bytes,proc); } } break; default: armci_die("armci_copy_vector: wrong optype",op); } } return 0; } void armci_vector_to_buf(armci_giov_t darr[], int len, void* buf) { int i,s; char *ptr = (char*)buf; for(i = 0; i< len; i++){ for( s=0; s< darr[i].ptr_array_len; s++){ armci_copy(darr[i].src_ptr_array[s],ptr,darr[i].bytes); ptr += darr[i].bytes; } } } void armci_vector_from_buf(armci_giov_t darr[], int len, void* buf) { int i,s; char *ptr = (char*)buf; for(i = 0; i< len; i++){ for( s=0; s< darr[i].ptr_array_len; s++){ armci_copy(ptr, darr[i].dst_ptr_array[s],darr[i].bytes); ptr += darr[i].bytes; } } } int PARMCI_PutV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ) { int rc=0, i,direct=1; if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; ORDER(PUT,proc); /* ensure ordering */ direct=SAMECLUSNODE(proc); if(direct){ if(!SAMECLUSNODE(proc))DO_FENCE(proc,DIRECT_PUT); rc = armci_copy_vector(PUT, darr, len, proc); } else{ DO_FENCE(proc,SERVER_PUT); rc = armci_pack_vector(PUT, NULL, darr, len, proc,NULL); } if(rc) return FAIL6; else return 0; } int PARMCI_GetV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ) { int rc=0, i,direct=1; if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; ORDER(GET,proc); /* ensure ordering */ #ifndef QUADRICS direct=SAMECLUSNODE(proc); #endif if(direct){ if(!SAMECLUSNODE(proc))DO_FENCE(proc,DIRECT_GET); rc = armci_copy_vector(GET, darr, len, proc); } else{ DO_FENCE(proc,SERVER_GET); rc = armci_pack_vector(GET, NULL, darr, len, proc,NULL); } if(rc) return FAIL6; else return 0; } int PARMCI_AccV( int op, /* oeration code */ void *scale, /*scaling factor for accumulate */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ) { int rc=0, i,direct=0; if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; ORDER(op,proc); /* ensure ordering */ direct=SAMECLUSNODE(proc); # if defined(ACC_COPY) && !defined(ACC_SMP) if(armci_me != proc) direct=0; # error "grrr" # endif if(direct) { rc = armci_acc_vector( op, scale, darr, len, proc); } else { DO_FENCE(proc,SERVER_PUT); rc = armci_pack_vector(op, scale, darr, len, proc,NULL); } if(rc) return FAIL6; else return 0; } /*****************************************************************************/ /*\ Non-blocking vector API \*/ int PARMCI_NbPutV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /*non-blocking request handle*/ ) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int rc=0, i,direct=1; if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; direct=SAMECLUSNODE(proc); /* aggregate put */ if(nb_handle && nb_handle->agg_flag == SET) { if(!direct) { rc=armci_agg_save_giov_descriptor(darr, len, proc, PUT, nb_handle); return rc; } } else { /*ORDER(PUT,proc); ensure ordering */ UPDATE_FENCE_INFO(proc); /*set tag and op in the nb handle*/ if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = PUT; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = armci_set_implicit_handle(PUT, proc); } if(direct){ if(!SAMECLUSNODE(proc))DO_FENCE(proc,DIRECT_PUT); rc = armci_copy_vector(PUT, darr, len, proc); } else{ DO_FENCE(proc,SERVER_NBPUT); rc = armci_pack_vector(PUT, NULL, darr, len, proc,nb_handle); } if(rc) return FAIL6; else return 0; } int PARMCI_NbGetV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /*non-blocking request handle*/ ) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int rc=0, i,direct=1; if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; direct=SAMECLUSNODE(proc); /* aggregate get */ if(nb_handle && nb_handle->agg_flag == SET) { if(!direct) { rc=armci_agg_save_giov_descriptor(darr, len, proc, GET, nb_handle); return rc; } } else { /* ORDER(GET,proc); ensure ordering */ if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = GET; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = armci_set_implicit_handle(GET, proc); } if(direct){ if(!SAMECLUSNODE(proc))DO_FENCE(proc,DIRECT_GET); rc = armci_copy_vector(GET, darr, len, proc); } else{ DO_FENCE(proc,SERVER_NBGET); rc = armci_pack_vector(GET, NULL, darr, len, proc,nb_handle); } if(rc) return FAIL6; else return 0; } int PARMCI_NbAccV( int op, /* oeration code */ void *scale, /*scaling factor for accumulate */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /*non-blocking request handle*/ ) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int rc=0, i,direct=1; if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; UPDATE_FENCE_INFO(proc); direct=SAMECLUSNODE(proc); if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = op; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = armci_set_implicit_handle(op, proc); # if defined(ACC_COPY) && !defined(ACC_SMP) if(armci_me != proc) direct=0; # endif if(direct) rc = armci_acc_vector( op, scale, darr, len, proc); else{ DO_FENCE(proc,SERVER_NBPUT); rc = armci_pack_vector(op, scale, darr, len, proc,nb_handle); } if(rc) return FAIL6; else return 0; } /*****************************************************************************/ ga-5-3/armci/src-portals/aggregate.c0000640005473000001440000003011211344035226016227 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** $Id: aggregate.c,v 1.6 2003-10-22 22:12:14 d3h325 Exp $ * Aggregate Put/Get requests */ #include "armcip.h" #include /* memcpy */ #include #define _MAX_AGG_BUFFERS 32 /* Maximum # of aggregation buffers available*/ #define _MAX_AGG_BUFSIZE 2048 /* size of each buffer. should be < 2^15 */ #define _MAX_PTRS 256 /* < 2^15, as it is "short int" in agg_req_t */ #define _MAX_AGG_HANDLE _MAX_AGG_BUFFERS /* Max # of aggregation handles */ /* aggregate request handle */ typedef struct { unsigned int tag; /* non-blocking request tag */ short int proc; /* remote process id */ short int request_len ; /* number of requests */ short int ptr_array_len; /* pointer length for this request */ short int buf_pos_end; /* position of buffer (from right end) */ armci_giov_t *darr; /* giov vectors */ }agg_req_t; static agg_req_t *aggr[_MAX_AGG_HANDLE]; /* aggregate request handle */ /* data structure for dynamic buffer management */ typedef struct { int size; /* represents the size of the list (not linked list) */ int index[_MAX_AGG_HANDLE]; } agg_list_t; static agg_list_t ulist, alist;/*in-use & available aggr buffer index list*/ /* aggregation buffer */ static char agg_buf[_MAX_AGG_BUFFERS][_MAX_AGG_BUFSIZE]; /* aggregation buffer to store the pointers */ static void* agg_src_ptr[_MAX_AGG_BUFFERS][_MAX_PTRS]; static void* agg_dst_ptr[_MAX_AGG_BUFFERS][_MAX_PTRS]; /** * --------------------------------------------------------------------- * fill descriptor from this side (left to right) * ---> * _______________________________________________ * | | | |. . . . . . . . . . | | | | * |__|__|__|_____________________________|__|__|__| * * <--- * fill src and dst pointer (arrays) in this direction * (right to left) * * Once they are about to cross each other (implies buffer is full), * complete the data transfer. * --------------------------------------------------------------------- */ #define AGG_INIT_NB_HANDLE(op_type, p, nb_handle) \ if(nb_handle->proc < 0) { \ nb_handle->tag = GET_NEXT_NBTAG(); \ nb_handle->op = op_type; \ nb_handle->proc = p; \ nb_handle->bufid= NB_NONE; \ } \ else if(nb_handle->op != op_type) \ armci_die("ARMCI_NbXXX: AGG_INIT_NB_HANDLE(): Aggregate Failed, Invalid non-blocking handle", nb_handle->op); \ else if(nb_handle->proc != p) \ armci_die("ARMCI_NbXXX: AGG_INIT_NB_HANDLE(): Aggregate Failed, Invalid non-blocking handle", p) /* initialize/set the fields in the buffer*/ #define _armci_agg_set_buffer(index, tag, proc, len) { \ aggr[(index)]->tag = (tag); \ aggr[(index)]->proc = (proc); \ aggr[(index)]->request_len = (len); \ ulist.index[ulist.size++] = (index);/* add the new index to the in-use list and increment it's size*/ \ } /* get the index of the aggregation buffer to be used */ static int _armci_agg_get_bufferid(armci_ihdl_t nb_handle) { int i, index, tag = nb_handle->tag, proc = nb_handle->proc; /* check if there is an entry for this handle in the existing list*/ for(i=ulist.size-1; i>=0; i--) { index = ulist.index[i]; if(aggr[index]->tag == tag && aggr[index]->proc == proc) return index; } /* else it is a new handle, so get a aggr buffer from either of the lists. ???? don't throw exception here */ if(ulist.size >= _MAX_AGG_BUFFERS && alist.size == 0) armci_die("_armci_agg_get_index: Too many outstanding aggregation requests\n", ulist.size); /*If there is a buffer in readily available list,use it*/ if(alist.size > 0) index = alist.index[--alist.size]; else { /* else use/get a buffer from the main list */ index = ulist.size; /* allocate memory for aggregate request handle */ aggr[index] = (agg_req_t *)agg_buf[index]; aggr[index]->request_len = 0; aggr[index]->ptr_array_len = 0; aggr[index]->buf_pos_end = _MAX_AGG_BUFSIZE; /* allocate memory for giov vector field in aggregate request handler */ aggr[index]->darr = (armci_giov_t *)(agg_buf[index]+sizeof(agg_req_t)); } _armci_agg_set_buffer(index, tag, proc, 0); return index; } static void _armci_agg_update_lists(int index) { int i; /* remove that index from the in-use list and bring the last element in the in-use list to the position of the removed one. */ for(i=0; irequest_len; /* index of giov descriptor */ bytes_remaining = aggr[index]->buf_pos_end - (sizeof(agg_req_t) + aggr[index]->request_len*sizeof(armci_giov_t)); /* extra bytes required to store registered put data */ if(is_registered_put) bytes_needed = bytes; /* if (byte-)sizes are equal, use previously created descriptor else get a new descriptor */ if( rid && bytes==aggr[index]->darr[rid-1].bytes) --rid; else { get_new_descr=1; bytes_needed += sizeof(armci_giov_t); } /* If buffer is full, then complete data transfer. After completion, if still ptr array_len is greater than maximum limit(_MAX_PTRS), then do it by parts. Determine new ptr_array_len that fits buffer */ if( (bytes_needed > bytes_remaining) || (_MAX_PTRS - aggr[index]->ptr_array_len < *ptr_array_len)) { armci_agg_complete(nb_handle, SET); rid = 0; get_new_descr=1; if(*ptr_array_len > _MAX_PTRS) *ptr_array_len = _MAX_PTRS; } /* if new descriptor, allocate memory for src_ptr & dst_ptr arrays */ if(get_new_descr) { int i = aggr[index]->ptr_array_len; aggr[index]->darr[rid].src_ptr_array = (void **)&agg_src_ptr[index][i]; aggr[index]->darr[rid].dst_ptr_array = (void **)&agg_dst_ptr[index][i]; aggr[index]->darr[rid].ptr_array_len = 0; aggr[index]->request_len++; } /* store registered put data */ if(is_registered_put) { aggr[index]->buf_pos_end -= bytes; memcpy(&((char *)aggr[index])[aggr[index]->buf_pos_end], *((char **)registered_put_data), bytes); *(char **)registered_put_data = (char *)&((char *)aggr[index])[aggr[index]->buf_pos_end]; } aggr[index]->ptr_array_len += *ptr_array_len; return (&aggr[index]->darr[rid]); } int armci_agg_save_descriptor(void *src, void *dst, int bytes, int proc, int op, int is_registered_put, armci_ihdl_t nb_handle) { int one=1, idx; armci_giov_t * darr; /* set up the handle if it is a new aggregation request */ AGG_INIT_NB_HANDLE(op, proc, nb_handle); darr = _armci_agg_get_descriptor(&one, bytes, nb_handle, is_registered_put, &src); idx = darr->ptr_array_len; darr->src_ptr_array[idx] = src; darr->dst_ptr_array[idx] = dst; darr->bytes = bytes; darr->ptr_array_len += 1; fflush(stdout); return 0; } int armci_agg_save_giov_descriptor(armci_giov_t dscr[], int len, int proc, int op, armci_ihdl_t nb_handle) { int i, j, k, idx, bytes, ptr_array_len; armci_giov_t * darr; /* set up the handle if it is a new aggregation request */ AGG_INIT_NB_HANDLE(op, proc, nb_handle); for(i=0; iptr_array_len; for(j=idx; jsrc_ptr_array[j] = dscr[i].src_ptr_array[k]; darr->dst_ptr_array[j] = dscr[i].dst_ptr_array[k]; } darr->bytes = dscr[i].bytes; darr->ptr_array_len += ptr_array_len; ptr_array_len = dscr[i].ptr_array_len - ptr_array_len; if(ptr_array_len <0) armci_die("agg_save_giov_descr failed", 0L); } while(k < darr[i].ptr_array_len); } return 0; } int armci_agg_save_strided_descriptor(void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, int proc, int op, armci_ihdl_t nb_handle) { int i, j, k, idx, ptr_array_len=1, total1D=1, num1D=0; int offset1, offset2, factor[MAX_STRIDE_LEVEL]; armci_giov_t * darr; /* set up the handle if it is a new aggregation request */ AGG_INIT_NB_HANDLE(op, proc, nb_handle); for(i=1; i<=stride_levels; i++) { total1D *= count[i]; factor[i-1]=0; } ptr_array_len = total1D; do { darr=_armci_agg_get_descriptor(&ptr_array_len,count[0],nb_handle,0,0); idx = darr->ptr_array_len; /* converting stride into giov vector */ for(i=idx; isrc_ptr_array[i] = (char *)src_ptr + offset1; darr->dst_ptr_array[i] = (char *)dst_ptr + offset2; ++factor[0]; ++num1D; for(j=1; jbytes = count[0]; darr->ptr_array_len += ptr_array_len; ptr_array_len = total1D - ptr_array_len; if(ptr_array_len <0) armci_die("agg_save_strided_descr failed", 0L); } while(num1D < total1D); return 0; } void armci_agg_complete(armci_ihdl_t nb_handle, int condition) { int i, index=0, rc; /* get the buffer index for this handle */ for(i=ulist.size-1; i>=0; i--) { index = ulist.index[i]; if(aggr[index]->tag == nb_handle->tag && aggr[index]->proc == nb_handle->proc) break; } if(i<0) return; /* implies this handle has no requests at all */ #if 0 printf("%d: Aggregation Complete to remote process %d (%d:%d requests)\n", armci_me, nb_handle->proc, index, aggr[index]->request_len); #endif /* complete the data transfer. NOTE: in LAPI, Non-blocking calls (followed by wait) performs better than blocking put/get */ if(aggr[index]->request_len) { switch(nb_handle->op) { #ifdef LAPI armci_hdl_t usr_hdl; case PUT: ARMCI_INIT_HANDLE(&usr_hdl); if((rc=PARMCI_NbPutV(aggr[index]->darr, aggr[index]->request_len, nb_handle->proc, (armci_hdl_t*)&usr_hdl))) ARMCI_Error("armci_agg_complete: nbputv failed",rc); PARMCI_Wait((armci_hdl_t*)&usr_hdl); break; case GET: ARMCI_INIT_HANDLE(&usr_hdl); if((rc=PARMCI_NbGetV(aggr[index]->darr, aggr[index]->request_len, nb_handle->proc, (armci_hdl_t*)&usr_hdl))) ARMCI_Error("armci_agg_complete: nbgetv failed",rc); PARMCI_Wait((armci_hdl_t*)&usr_hdl); break; #else case PUT: if((rc=PARMCI_PutV(aggr[index]->darr, aggr[index]->request_len, nb_handle->proc))) ARMCI_Error("armci_agg_complete: putv failed",rc); break; case GET: if((rc=PARMCI_GetV(aggr[index]->darr, aggr[index]->request_len, nb_handle->proc))) ARMCI_Error("armci_agg_complete: getv failed",rc); break; #endif } } /* setting request length to zero, as the requests are completed */ aggr[index]->request_len = 0; aggr[index]->ptr_array_len = 0; aggr[index]->buf_pos_end = _MAX_AGG_BUFSIZE; /* If armci_agg_complete() is called PARMCI_Wait(), then unset nb_handle*/ if(condition==UNSET) { nb_handle->proc = -1; _armci_agg_update_lists(index); } } ga-5-3/armci/src-portals/clusterinfo.c0000640005473000001440000003423011744312006016641 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: clusterinfo.c,v 1.36.2.3 2007-06-13 00:46:13 vinod Exp $ */ /****************************************************************************** * file: cluster.c * purpose: Determine cluster info i.e., number of machines and processes * running on each of them. * *******************************************************************************/ #include #include #include #ifdef unix #include #endif #include "message.h" #include "armcip.h" #ifdef WIN32 /* this is where gethostbyname is declared */ # include #endif /* NO_SHMEM enables to simulate cluster environment on a single workstation. * Must define NO_SHMMAX_SEARCH in shmem.c to prevent depleting shared memory * due to a gready shmem request by the master process on cluster node 0. */ #if defined(DECOSF) && defined(QUADRICS) # if !defined(REGION_ALLOC) # define NO_SHMEM extern int armci_enable_alpha_hack(); # endif #else # define armci_enable_alpha_hack() 1 #endif #define DEBUG 0 #define MAX_HOSTNAME 80 #define CHECK_NODE_NAMES /* print info on how many cluster nodes detected */ #ifdef CLUSTER # define PRINT_CLUSTER_INFO 1 #else # define PRINT_CLUSTER_INFO 0 #endif #if defined(GM) static char *network_protocol="Myrinet GM"; #elif defined(VIA) static char *network_protocol="VIA"; #elif defined(MELLANOX) static char *network_protocol="Mellanox Verbs API"; #elif defined(OPENIB) static char *network_protocol="OpenIB Verbs API"; #elif defined(DOELAN4) static char *network_protocol="Quadrics ELAN-4"; #elif defined(QUADRICS) static char *network_protocol="Quadrics ELAN-3"; #elif defined(PM) static char *network_protocol="Score PM"; #elif defined(PORTALS) static char *network_protocol="PORTALS"; #elif defined(MPI_SPAWN) static char *network_protocol="MPI-SPAWN"; #else static char *network_protocol="TCP/IP Sockets"; #endif /*** stores cluster configuration ***/ armci_clus_t *armci_clus_info; #ifdef HITACHI #include # define GETHOSTNAME sr_gethostname ndes_t _armci_group; static int sr_gethostname(char *name, int len) { int no; pid_t ppid; if(hmpp_nself (&_armci_group,&no,&ppid,0,NULL) <0) return -1; if(len<6)armci_die("len too small",len); if(no>1024)armci_die("expected node id <1024",no); sprintf(name,"n%d",no); return 0; } #elif defined(SGIALTIX) # define GETHOSTNAME altix_gethostname static int altix_gethostname(char *name, int len) { sprintf(name,"altix"); return 0; } #elif defined(CRAY_XT) && !defined(PORTALS) #define GETHOSTNAME cnos_gethostname static int cnos_gethostname(char *name, int len) { sprintf(name,"%d",cnos_get_rank()); } #else # define GETHOSTNAME gethostname #endif static char* merge_names(char *name) { int jump = 1, rem, to, from; int lenmes, lenbuf, curlen, totbuflen= armci_nproc*HOSTNAME_LEN; int len = strlen(name); char *work = malloc(totbuflen); if(!work)armci_die("armci: merge_names: malloc failed: ",totbuflen); strcpy(work, name); curlen = len+1; /* prefix tree merges names in the order of process numbering in log(P)time * result = name_1//name_2//...//name_P-1 */ do { jump *= 2; rem = armci_me%jump; if(rem){ to = armci_me - rem; armci_msg_snd(ARMCI_TAG, work, curlen, to); break; }else{ from = armci_me + jump/2; if(from < armci_nproc){ lenbuf = totbuflen - curlen; armci_msg_rcv(ARMCI_TAG, work+curlen, lenbuf, &lenmes, from); curlen += lenmes; } } }while (jump < armci_nproc); return(work); } static void process_hostlist(char *names) { #ifdef CLUSTER int i, cluster=0; char *s,*master; int len, root=0; /******** inspect list of machine names to determine locality ********/ if (armci_me==0){ /* first find out how many cluster nodes we got */ armci_nclus =1; s=master=names; for(i=1; i < armci_nproc; i++){ s += strlen(s)+1; if(strcmp(s,master)){ /* we found a new machine name on the list */ master = s; armci_nclus++; /*fprintf(stderr,"new name %s len =%d\n",master, strlen(master));*/ } } /* allocate memory */ armci_clus_info = (armci_clus_t*)malloc(armci_nclus*sizeof(armci_clus_t)); if(!armci_clus_info)armci_die("malloc failed for clusinfo",armci_nclus); /* fill the data structure -- go through the list again */ s=names; master="*-"; /* impossible hostname */ cluster =0; for(i=0; i < armci_nproc; i++){ if(strcmp(s,master)){ /* we found a new machine name on the list */ master = s; armci_clus_info[cluster].nslave=1; armci_clus_info[cluster].master=i; strcpy(armci_clus_info[cluster].hostname, master); #ifdef CHECK_NODE_NAMES /* need consecutive task id allocated on the same node * the current test only compares hostnames against first cluster */ if(cluster) if(!strcmp(master,armci_clus_info[0].hostname)){ /* we have seen that hostname before */ fprintf(stderr, "\nIt appears that tasks allocated on the same"); fprintf(stderr, " host machine do not have\n"); fprintf(stderr, "consecutive message-passing IDs/numbers. "); fprintf(stderr,"This is not acceptable \nto the ARMCI library "); fprintf(stderr,"as it prevents SMP optimizations and would\n"); fprintf(stderr,"lead to poor resource utilization.\n\n"); fprintf(stderr,"Please contact your System Administrator "); fprintf(stderr,"or, if you can, modify the "); # if defined(MPI) fprintf(stderr,"MPI"); # elif defined(TCGMSG) fprintf(stderr,"TCGMSG"); # elif defined(PVM) fprintf(stderr,"PVM"); # endif fprintf(stderr,"\nmessage-passing job startup configuration.\n\n"); #ifdef HITACHI fprintf(stderr,"On Hitachi it can be done by setting environment variable MPIR_RANK_NO_ROUND, for example\n setenv MPIR_RANK_NO_ROUND yes\n\n"); #endif sleep(1); armci_die("Cannot run: improper task to host mapping!",0); } #endif cluster++; }else{ /* the process is still on the same host */ armci_clus_info[cluster-1].nslave++; } s += strlen(s)+1; } if(armci_nclus != cluster) armci_die("inconsistency processing clusterinfo",armci_nclus); } /******** process 0 got all data ********/ /* now broadcast locality info struct to all processes * two steps are needed because of the unknown length of hostname list */ len = sizeof(int); armci_msg_brdcst(&armci_nclus, len, root); if(armci_me){ /* allocate memory */ armci_clus_info = (armci_clus_t*)malloc(armci_nclus*sizeof(armci_clus_t)); if(!armci_clus_info)armci_die("malloc failed for clusinfo",armci_nclus); } len = sizeof(armci_clus_t)*armci_nclus; armci_msg_brdcst(armci_clus_info, len, root); /******** all processes 0 got all data ********/ /* now determine current cluster node id by comparing me to master */ armci_clus_me = armci_nclus-1; for(i =0; i< armci_nclus-1; i++) if(armci_me < armci_clus_info[i+1].master){ armci_clus_me=i; break; } #else armci_clus_me=0; armci_nclus=1; armci_clus_info = (armci_clus_t*)malloc(armci_nclus*sizeof(armci_clus_t)); if(!armci_clus_info)armci_die("malloc failed for clusinfo",armci_nclus); strcpy(armci_clus_info[0].hostname, names); armci_clus_info[0].master=0; armci_clus_info[0].nslave=armci_nproc; #endif armci_clus_first = armci_clus_info[armci_clus_me].master; armci_clus_last = armci_clus_first +armci_clus_info[armci_clus_me].nslave-1; } /*\ Substring Replacement: replace needle with nail in a haystack \*/ static char *substr_replace(char *haystack, char *needle, char *nail) { char *tmp, *pos, *first; size_t len=strlen(needle), nlen=strlen(nail),bytes; size_t left; pos = strstr(haystack,needle); if (pos ==NULL) return NULL; first= tmp = calloc(strlen(haystack)+nlen-len+1+1,1); if(first==NULL) return(NULL); bytes = pos - haystack; while(bytes){ *tmp = *haystack; tmp++; haystack++; bytes--;} while(nlen) { *tmp = *nail; tmp++; nail++; nlen--;} haystack += len; left = strlen(haystack); while(left>0){*tmp = *haystack; tmp++; haystack++; left --;} *tmp='\0'; return(first); } /*\ ARMCI_HOSTNAME_REPLACE contains "needle/nail" string to derive new hostname \*/ static char *new_hostname(char *host) { char *tmp, *needle, *nail; if((tmp =getenv("ARMCI_HOSTNAME_REPLACE"))){ needle = strdup(tmp); if(needle== NULL) return NULL; nail = strchr(needle,'/'); if(nail == NULL) return NULL; *nail = '\0'; nail++; if(nail == (needle+1)){ char* tmp1 = calloc(strlen(host)+strlen(nail)+1,1); if(tmp1 == NULL) return NULL; strcpy(tmp1,host); strcat(tmp1,nail); return tmp1; } return substr_replace(host,needle,nail); } else return NULL; } static void print_clus_info() { int i; if(PRINT_CLUSTER_INFO && armci_nclus >1 && armci_me ==0){ #if defined(DATA_SERVER) || defined(SERVER_THREAD) printf("ARMCI configured for %d cluster nodes. Network protocol is '%s'.\n", armci_nclus, network_protocol); #else printf("ARMCI configured for %d cluster nodes\n", armci_nclus); #endif fflush(stdout); } if(armci_me==0 && DEBUG) for(i=0;i= MAX_HOSTNAME) armci_die("armci: hostname too long",strlen(tmp)); strcpy(name,tmp); printf("%d using %s hostname\n",armci_me, name); fflush(stdout); } len = strlen(name); /*a simple way to run as many servers as compute processes*/ enval = getenv("ARMCI_NSERV_EQ_NPROC"); if(enval != NULL){ sprintf(name+len,"n%d",getpid()); len = strlen(name); printf("\n%s\n",name); } #ifdef HOSTNAME_TRUNCATE { /* in some cases (e.g.,SP) when name is used to determine * cluster structure but not to establish communication * we can truncate hostnames to save memory */ int i; limit = HOSTNAME_LEN-1; for(i=0; i",i+1); } if(len>limit)name[limit]='\0'; len =limit; } #else if(len >= HOSTNAME_LEN-1) armci_die("armci: gethostname overrun name string length",len); #endif #ifdef NO_SHMEM if(armci_enable_alpha_hack()) { name[len]='0'+armci_me; name[len+1]='\0'; len++; } #endif if(DEBUG) fprintf(stderr,"%d: %s len=%d\n",armci_me, name,(int)strlen(name)); #ifdef CLUSTER merged = merge_names(name); /* create hostname list */ process_hostlist(merged); /* compute cluster info */ free(merged); #else process_hostlist(name); /* compute cluster info */ #endif #ifndef NO_SHMEM armci_set_shmem_limit_per_node(armci_clus_info[0].nslave); #endif armci_master = armci_clus_info[armci_clus_me].master; #ifdef NO_SHMEM if(armci_enable_alpha_hack()) { int i; for(i=0;i= armci_nproc)armci_die("armci_clus_id: out of range",p); if(p < armci_clus_first){ from = 0; to = armci_clus_me;} else {from = armci_clus_me; to = armci_nclus;} found = to-1; for(c = from; c< to-1; c++) if(p < armci_clus_info[c+1].master){ found=c; break; } return (found); } int armci_smp_master(int i) { return(armci_clus_info[i].master); } /*\ return number of processes in the domain represented by id; id<0 means my node \*/ int armci_domain_nprocs(armci_domain_t domain, int id) { if(id>= armci_nclus) armci_die2("armci domain error",id,armci_nclus); if(id<0) id = armci_clus_me; return armci_clus_info[id].nslave; } /*\ return number of nodes in diven domain \*/ int armci_domain_count(armci_domain_t domain) { return armci_nclus; } /*\ return domain ID of the specified process \*/ int armci_domain_id(armci_domain_t domain, int glob_proc_id) { int id = glob_proc_id; if(id<0 || id>= armci_nproc) armci_die2("armci domain error",id,armci_nproc); return armci_clus_id(glob_proc_id); } /*\ return global ID of a process loc_proc_id in domain identified by id * armci_domain_nproc(id)< loc_proc_id >=0 \*/ int armci_domain_glob_proc_id(armci_domain_t domain, int id, int loc_proc_id) { if(id<0 || id>= armci_nclus) armci_die2("armci domain error",id,armci_nclus); if(loc_proc_id<0 || loc_proc_id>= armci_clus_info[id].nslave) armci_die2("armci domain proc error",loc_proc_id,armci_clus_info[id].nslave); return (armci_clus_info[id].master + loc_proc_id); } /*\ return ID of domain that the calling process belongs to \*/ int armci_domain_my_id(armci_domain_t domain) { return(armci_clus_me); } int armci_domain_same_id (armci_domain_t domain, int proc) { int rc = SAMECLUSNODE(proc); return(rc); } ga-5-3/armci/src-portals/memory.c0000640005473000001440000007254411643666515015645 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: memory.c,v 1.56.2.3 2007-04-25 23:49:55 d3p687 Exp $ */ #ifndef NEW_MALLOC #include #include #include "armcip.h" #include "message.h" #include "kr_malloc.h" #define DEBUG_ 0 #define USE_MALLOC #define USE_SHMEM_ #define SHM_UNIT 1024 static context_t ctx_localmem; /* static context_t ctx_mlocalmem; */ #if defined(SYSV) || defined(WIN32) || defined(MMAP) || defined(HITACHI) #include "shmem.h" #if !defined(USE_SHMEM) && (defined(HITACHI) || defined(MULTI_CTX)) # define USE_SHMEM #endif #if !(defined(LAPI)||defined(QUADRICS)||defined(SERVER_THREAD)) ||\ defined(USE_SHMEM) #define RMA_NEEDS_SHMEM #endif void kr_check_local() { #if 0 kr_malloc_print_stats(&ctx_localmem); #endif kr_malloc_verify(&ctx_localmem); } void armci_print_ptr(void **ptr_arr, int bytes, int size, void* myptr, int off) { int i; int nproc = armci_clus_info[armci_clus_me].nslave; ARMCI_PR_DBG("enter",0); for(i=0; i< armci_nproc; i++){ int j; if(armci_me ==i){ printf("%d master =%d nproc=%d off=%d\n",armci_me, armci_master,nproc, off); printf("%d:bytes=%d mptr=%p s=%d ",armci_me, bytes, myptr,size); for(j = 0; j< armci_nproc; j++)printf(" %p",ptr_arr[j]); printf("\n"); fflush(stdout); } armci_msg_barrier(); } ARMCI_PR_DBG("exit",0); } /*\ master exports its address of shmem region at the beggining of that region \*/ static void armci_master_exp_attached_ptr(void* ptr) { ARMCI_PR_DBG("enter",0); if(!ptr) armci_die("armci_master_exp_att_ptr: null ptr",0); *(volatile void**)ptr = ptr; ARMCI_PR_DBG("exit",0); } /*\ Collective Memory Allocation on shared memory systems \*/ void armci_shmem_malloc(void *ptr_arr[], armci_size_t bytes) { void *myptr=NULL, *ptr=NULL; long idlist[SHMIDLEN]; long size=0, offset=0; long *size_arr; void **ptr_ref_arr; int i,cn, len; int nproc = armci_clus_info[armci_clus_me].nslave; ARMCI_PR_DBG("enter",0); bzero((char*)ptr_arr,armci_nproc*sizeof(void*)); /* allocate work arrays */ size_arr = (long*)calloc(armci_nproc,sizeof(long)); if(!size_arr)armci_die("armci_malloc:calloc failed",armci_nproc); /* allocate arrays for cluster address translations */ ptr_ref_arr = calloc(armci_nclus,sizeof(void*)); /* must be zero */ if(!ptr_ref_arr)armci_die("armci_malloc:calloc 2 failed",armci_nclus); /* combine all memory requests into size_arr */ size_arr[armci_me] = bytes; armci_msg_lgop(size_arr, armci_nproc, "+"); /* determine aggregate request size on the cluster node */ for(i=0, size=0; i< nproc; i++) size += size_arr[i+armci_master]; /* master process creates shmem region and then others attach to it */ if(armci_me == armci_master ){ /* can malloc if there is no data server process and has 1 process/node*/ # ifndef RMA_NEEDS_SHMEM if(nproc == 1) myptr = kr_malloc(size, &ctx_localmem, 0, NULL, NULL); else # endif myptr = Create_Shared_Region(idlist+1,size,idlist); if(!myptr && size>0 )armci_die("armci_malloc: could not create", (int)(size>>10)); /* place its address at begining of attached region for others to see */ if(size)armci_master_exp_attached_ptr(myptr); if(DEBUG_){ printf("%d:armci_malloc addr mptr=%p size=%ld\n",armci_me,myptr,size); fflush(stdout); } } /* broadcast shmem id to other processes on the same cluster node */ armci_msg_clus_brdcst(idlist, SHMIDLEN*sizeof(long)); if(armci_me != armci_master){ myptr=(double*)Attach_Shared_Region(idlist+1,size,idlist[0]); if(!myptr)armci_die("armci_malloc: could not attach", (int)(size>>10)); /* now every process in a SMP node needs to find out its offset * w.r.t. master - this offset is necessary to use memlock table */ if(size) armci_set_mem_offset(myptr); if(DEBUG_){ printf("%d:armci_malloc attached addr mptr=%p ref=%p size=%ld\n", armci_me,myptr, *(void**)myptr,size); fflush(stdout); } } # if defined(DATA_SERVER) /* get server reference address for every cluster node to perform * remote address translation for global address space */ if(armci_nclus>1){ if(armci_me == armci_master){ # ifdef SERVER_THREAD ptr_ref_arr[armci_clus_me]=myptr; # else { extern int _armci_server_started; if(_armci_server_started) { armci_serv_attach_req(idlist, SHMIDLEN*sizeof(long), size, &ptr, sizeof(void*)); ptr_ref_arr[armci_clus_me]= myptr; /* from server*/ } else /* server not yet started */ ptr_ref_arr[armci_clus_me]=myptr; } if(DEBUG_){ printf("%d:addresses server=%p myptr=%p\n",armci_me,ptr,myptr); fflush(stdout); } # endif } /* exchange ref addr of shared memory region on every cluster node*/ armci_exchange_address(ptr_ref_arr, armci_nclus); # ifdef ARMCI_REGISTER_SHMEM armci_register_shmem(myptr,size,idlist+1,idlist[0],ptr_ref_arr[armci_clus_me]); # endif }else { ptr_ref_arr[armci_master] = myptr; } /* translate addresses for all cluster nodes */ for(cn = 0; cn < armci_nclus; cn++){ int master = armci_clus_info[cn].master; offset = 0; /* on local cluster node use myptr directly */ ptr = (armci_clus_me == cn) ? myptr: ptr_ref_arr[cn]; /* compute addresses pointing to the memory regions on cluster node*/ for(i=0; i< armci_clus_info[cn].nslave; i++){ /* NULL if request size is 0*/ ptr_arr[i+master] = (size_arr[i+master])? ((char*)ptr)+offset : NULL; offset += size_arr[i+master]; } } # else /* compute addresses for local cluster node */ offset =0; for(i=0; i< nproc; i++) { ptr_ref_arr[i] = (size_arr[i+armci_master])? ((char*)myptr)+offset : 0L; offset += size_arr[i+armci_master]; } /* exchange addreses with all other processes */ ptr_arr[armci_me] = (char*)ptr_ref_arr[armci_me-armci_master]; armci_exchange_address(ptr_arr, armci_nproc); /* overwrite entries for local cluster node with ptr_ref_arr */ bcopy((char*)ptr_ref_arr, (char*)(ptr_arr+armci_master), nproc*sizeof(void*)); /* armci_print_ptr(ptr_arr, bytes, size, myptr, offset);*/ # endif armci_msg_barrier(); /* free work arrays */ free(ptr_ref_arr); free(size_arr); ARMCI_PR_DBG("exit",0); } /******************************************************************** * Non-collective Memory Allocation on shared memory systems \*/ void armci_shmem_memget(armci_meminfo_t *meminfo, size_t size) { void *myptr=NULL; void *armci_ptr=NULL; /* legal ARCMIptr used in ARMCI data xfer ops */ long idlist[SHMIDLEN]; /* can malloc if there is no data server process & has 1 process/node*/ #ifndef RMA_NEEDS_SHMEM if( armci_clus_info[armci_clus_me].nslave == 1) myptr = kr_malloc(size, &ctx_localmem, 0, NULL, NULL); else #endif myptr = Create_Shared_Region(idlist+1,size,idlist); if(!myptr && size>0 ) armci_die("armci_shmem_memget: create failed", (int)(size>>10)); if(DEBUG_) { printf("%d: armci_shmem_memget: addr=%p size=%ld %ld %ld \n", armci_me, myptr, size, idlist[0], idlist[1]); fflush(stdout); } armci_ptr = myptr; #if defined(DATA_SERVER) /* get server reference address to perform * remote address translation for global address space */ if(armci_nclus>1) { # ifdef SERVER_THREAD /* data server thread runs on master process */ if(armci_me != armci_master) { armci_serv_attach_req(idlist, SHMIDLEN*sizeof(long), size, &armci_ptr, sizeof(void*)); } # else /* ask dataserver process to attach to region and get ptr*/ { extern int _armci_server_started; if(_armci_server_started) { armci_serv_attach_req(idlist, SHMIDLEN*sizeof(long), size, &armci_ptr, sizeof(void*)); } } # endif } #endif /* fill the meminfo structure */ meminfo->armci_addr = armci_ptr; meminfo->addr = myptr; meminfo->size = size; meminfo->cpid = armci_me; bcopy(idlist, meminfo->idlist, SHMIDLEN*sizeof(long)); } void* armci_shmem_memat(armci_meminfo_t *meminfo) { void *ptr=NULL; long size = (long) meminfo->size; long *idlist = (long*) meminfo->idlist; if(SAMECLUSNODE(meminfo->cpid)) { /* Attach to the shared memory segment */ ptr=(double*)Attach_Shared_Region(idlist+1,size,idlist[0]); if(!ptr)armci_die("ARMCi_Memat: could not attach", (int)(size>>10)); /* CHECK: now every process in a SMP node needs to find out its offset * w.r.t. master - this offset is necessary to use memlock table */ if(size) armci_set_mem_offset(ptr); } else { ptr = meminfo->armci_addr; /* remote address */ } return ptr; } void armci_shmem_memctl(armci_meminfo_t *meminfo) { /* only the creator can delete the segment */ if(meminfo->cpid == armci_me) { void *ptr = meminfo->addr; #ifdef RMA_NEEDS_SHMEM Free_Shmem_Ptr(0,0,ptr); #else if(armci_clus_info[armci_clus_me].nslave>1) Free_Shmem_Ptr(0,0,ptr); else kr_free(ptr, &ctx_localmem); #endif } } /****** End: Non-collective memory allocation on shared memory systems *****/ #ifdef MPI /******************************************************************** * Group Memory Allocation on shared memory systems for ARMCI Groups \*/ void armci_shmem_malloc_group(void *ptr_arr[], armci_size_t bytes, ARMCI_Group *group) { void *myptr=NULL, *ptr=NULL; long idlist[SHMIDLEN]; long size=0, offset=0; long *size_arr; void **ptr_ref_arr; int i,cn, len; /* int nproc = armci_clus_info[armci_clus_me].nslave; ? change ? */ int grp_me, grp_nproc, grp_nclus, grp_master, grp_clus_nproc, grp_clus_me; armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); ARMCI_PR_DBG("enter",0); /* Get the group info: group size & group rank */ ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); if(grp_me == MPI_UNDEFINED) { /* check if the process is in this group */ armci_die("armci_malloc_group: process is not a member in this group", armci_me); } grp_nclus = grp_attr->grp_nclus; grp_clus_me = grp_attr->grp_clus_me; grp_master = grp_attr->grp_clus_info[grp_clus_me].master; grp_clus_nproc = grp_attr->grp_clus_info[grp_clus_me].nslave; bzero((char*)ptr_arr,grp_nproc*sizeof(void*)); /* allocate work arrays */ size_arr = (long*)calloc(grp_nproc,sizeof(long)); if(!size_arr)armci_die("armci_malloc_group:calloc failed",grp_nproc); /* allocate arrays for cluster address translations */ # if defined(DATA_SERVER) len = grp_nclus; # else len = grp_clus_nproc; # endif ptr_ref_arr = calloc(len,sizeof(void*)); /* must be zero */ if(!ptr_ref_arr)armci_die("armci_malloc_group:calloc 2 failed",len); /* combine all memory requests into size_arr */ size_arr[grp_me] = bytes; armci_msg_group_gop_scope(SCOPE_ALL, size_arr, grp_nproc, "+", ARMCI_LONG, group); /* determine aggregate request size on the cluster node */ for(i=0, size=0; i< grp_clus_nproc; i++) size += size_arr[i+grp_master]; /* master process creates shmem region and then others attach to it */ if(grp_me == grp_master ){ /* can malloc if there is no data server process and has 1 process/node*/ # ifndef RMA_NEEDS_SHMEM if( armci_clus_info[armci_clus_me].nslave == 1) myptr = kr_malloc(size, &ctx_localmem, 0, NULL, NULL); else # endif myptr = Create_Shared_Region(idlist+1,size,idlist); if(!myptr && size>0 ) armci_die("armci_malloc_group: could not create", (int)(size>>10)); /* place its address at begining of attached region for others to see */ if(size)armci_master_exp_attached_ptr(myptr); if(DEBUG_){ printf("%d:armci_malloc_group addr mptr=%p ref=%p size=%ld %ld %ld \n",armci_me,myptr,*(void**)myptr, size,idlist[0],idlist[1]); fflush(stdout); } } /* broadcast shmem id to other processes (in the same group) on the same cluster node */ armci_grp_clus_brdcst(idlist, SHMIDLEN*sizeof(long), grp_master, grp_clus_nproc, group); if(grp_me != grp_master){ myptr=(double*)Attach_Shared_Region(idlist+1,size,idlist[0]); if(!myptr)armci_die("armci_malloc_group: could not attach", (int)(size>>10)); /* now every process in a SMP node needs to find out its offset * w.r.t. master - this offset is necessary to use memlock table */ if(size) armci_set_mem_offset(myptr); if(DEBUG_){ printf("%d:armci_malloc_group attached addr mptr=%p ref=%p size=%ld\n", armci_me,myptr, *(void**)myptr,size); fflush(stdout); } } # if defined(DATA_SERVER) /* get server reference address for every cluster node in the group * to perform remote address translation for global address space */ if(grp_nclus>1){ if(grp_me == grp_master){ # ifdef SERVER_THREAD /* data server thread runs on master process */ if(ARMCI_Absolute_id(group,grp_master)!=armci_master){ /*printf("\n%d: grp_master=%d %ld %ld \n",armci_me,ARMCI_Absolute_id(group,grp_master),idlist[0],idlist[1]);*/ armci_serv_attach_req(idlist, SHMIDLEN*sizeof(long), size, &ptr, sizeof(void*)); ptr_ref_arr[grp_clus_me]= ptr; /* from server*/ } else ptr_ref_arr[grp_clus_me]=myptr; # else /* ask data server process to attach to the region and get ptr */ { extern int _armci_server_started; if(_armci_server_started) { armci_serv_attach_req(idlist, SHMIDLEN*sizeof(long), size, &ptr, sizeof(void*)); ptr_ref_arr[grp_clus_me]= ptr; /* from server*/ } else /* server not yet started */ ptr_ref_arr[grp_clus_me]=myptr; } if(DEBUG_){ printf("%d:addresses server=%p myptr=%p\n",grp_me,ptr,myptr); fflush(stdout); } # endif } /* exchange ref addr of shared memory region on every cluster node*/ { int ratio = sizeof(void*)/sizeof(int); if(DEBUG_)printf("%d: exchanging %ld ratio=%d\n",armci_me, (long)ptr_arr[grp_me], ratio); armci_msg_group_gop_scope(SCOPE_ALL, ptr_ref_arr, grp_nclus*ratio, "+", ARMCI_INT, group); # ifdef ARMCI_REGISTER_SHMEM armci_register_shmem_grp(myptr,size,idlist+1,idlist[0],ptr_ref_arr[armci_clus_me],group); # endif } }else { ptr_ref_arr[grp_master] = myptr; } /* translate addresses for all cluster nodes */ for(cn = 0; cn < grp_nclus; cn++){ int master = grp_attr->grp_clus_info[cn].master; offset = 0; /* on local cluster node use myptr directly */ ptr = (grp_clus_me == cn) ? myptr: ptr_ref_arr[cn]; /* compute addresses pointing to the memory regions on cluster node*/ for(i=0; i< grp_attr->grp_clus_info[cn].nslave; i++){ /* NULL if request size is 0*/ ptr_arr[i+master] =(size_arr[i+master])? ((char*)ptr)+offset: NULL; offset += size_arr[i+master]; } } # else /* compute addresses for local cluster node */ offset =0; for(i=0; i< grp_clus_nproc; i++) { ptr_ref_arr[i] = (size_arr[i+grp_master])? ((char*)myptr)+offset : 0L; offset += size_arr[i+grp_master]; } /* exchange addreses with all other processes */ ptr_arr[grp_me] = (char*)ptr_ref_arr[grp_me-grp_master]; armci_exchange_address_grp(ptr_arr, grp_nproc, group); /* overwrite entries for local cluster node with ptr_ref_arr */ bcopy((char*)ptr_ref_arr, (char*)(ptr_arr+grp_master), grp_clus_nproc*sizeof(void*)); # endif /* armci_print_ptr(ptr_arr, bytes, size, myptr, offset);*/ armci_msg_group_barrier(group); /* free work arrays */ free(ptr_ref_arr); free(size_arr); ARMCI_PR_DBG("exit",0); } #endif /* ifdef MPI */ #else void armci_shmem_malloc(void* ptr_arr[], int bytes) { armci_die("armci_shmem_malloc should never be called on this system",0); } void armci_shmem_memget(armci_meminfo_t *meminfo, size_t size) { armci_die("armci_shmem_memget should never be called on this system",0); } void* armci_shmem_memat(armci_meminfo_t *meminfo) { armci_die("armci_shmem_memat should never be called on this system",0); } void armci_shmem_memctl(armci_meminfo_t *meminfo) { armci_die("armci_shmem_memctl should never be called on this system",0); } # ifdef MPI void armci_shmem_malloc_group(void *ptr_arr[], armci_size_t bytes, ARMCI_Group *group) { armci_die("armci_shmem_malloc_group should never be called on this system",0); } # endif #endif /* public constructor to initialize the kr_malloc context */ void armci_krmalloc_init_localmem() { #if defined(ALLOW_PIN) kr_malloc_init(0, 0, 0, reg_malloc, 0, &ctx_localmem); kr_malloc_init(0, 0, 0, malloc, 0, &ctx_mlocalmem); ctx_mlocalmem.ctx_type = KR_CTX_LOCALMEM; #elif defined(CRAY_SHMEM) && defined(CRAY_XT) # ifdef CATAMOUNT int units_avail = (cnos_shmem_size() - 1024 * 1024) / SHM_UNIT; # else extern size_t get_xt_heapsize(); int units_avail = (get_xt_heapsize() - 1024 * 1024) / SHM_UNIT; # endif if(DEBUG_) { fprintf(stderr,"%d:krmalloc_init_localmem: symheap=%llu,units(%d)=%d\n", armci_me, SHM_UNIT*units_avail, SHM_UNIT, units_avail); } kr_malloc_init(SHM_UNIT, units_avail, units_avail, shmalloc, 0, &ctx_localmem); armci_shmalloc_exchange_offsets(&ctx_localmem); #else kr_malloc_init(0, 0, 0, malloc, 0, &ctx_localmem); #endif ctx_localmem.ctx_type = KR_CTX_LOCALMEM; } /** * Local Memory Allocation and Free */ void *PARMCI_Malloc_local(armci_size_t bytes) { void *rptr; ARMCI_PR_DBG("enter",0); ARMCI_PR_DBG("exit",0); rptr = (void *)kr_malloc((size_t)bytes, &ctx_localmem, 0, NULL, NULL); //printf("\n%d:%s:%d:%p\n",armci_me,FUNCTION_NAME,bytes,rptr); return rptr; } int PARMCI_Free_local(void *ptr) { ARMCI_PR_DBG("enter",0); kr_free((char *)ptr, &ctx_localmem); ARMCI_PR_DBG("exit",0); return 0; } /*\ Collective Memory Allocation * returns array of pointers to blocks of memory allocated by everybody * Note: as the same shared memory region can be mapped at different locations * in each process address space, the array might hold different values * on every process. However, the addresses are legitimate * and can be used in the ARMCI data transfer operations. * ptr_arr[nproc] \*/ int PARMCI_Malloc(void *ptr_arr[], armci_size_t bytes) { void *ptr; char *new_base; size_t new_size=0; ARMCI_PR_DBG("enter",0); if(DEBUG_){ fprintf(stderr,"%d bytes in armci_malloc %d\n",armci_me, (int)bytes); fflush(stderr); armci_msg_barrier(); } # ifdef USE_MALLOC if(armci_nproc == 1) { ptr = kr_malloc((size_t) bytes, &ctx_localmem, 0, NULL, NULL); if(bytes) if(!ptr) armci_die("armci_malloc:malloc 1 failed",(int)bytes); ptr_arr[armci_me] = ptr; ARMCI_PR_DBG("exit",0); return (0); } # endif // static int one_time = 0; if( ARMCI_Uses_shm() ) { // if(one_time++ == 0 && armci_me==0) printf("%d: ARMCI_Uses_shm = true\n",armci_me); armci_shmem_malloc(ptr_arr,bytes); } else { /* on distributed-memory systems just malloc & collect all addresses */ ptr = kr_malloc(bytes, &ctx_localmem, 1, &new_base, &new_size); if(bytes) if(!ptr) armci_die("armci_malloc:malloc 2 failed",bytes); bzero((char*)ptr_arr,armci_nproc*sizeof(void*)); ptr_arr[armci_me] = ptr; /* now combine individual addresses into a single array */ armci_exchange_address(ptr_arr, armci_nproc); # ifdef ARMCI_REGISTER_SHMEM if(new_size) armci_register_shmem(new_base,new_size,NULL,0,new_base); else armci_register_shmem(ptr,bytes,NULL,0,ptr); # endif } ARMCI_PR_DBG("exit",0); //printf("\n%d:%s:%d:%p\n",armci_me,FUNCTION_NAME,bytes,ptr_arr[armci_me]); return(0); } /*\ shared memory is released to kr_malloc only on process 0 * with data server malloc cannot be used \*/ int PARMCI_Free(void *ptr) { ARMCI_PR_DBG("enter",0); if(!ptr)return 1; # if (defined(SYSV) || defined(WIN32) || defined(MMAP)) && !defined(NO_SHM) # ifdef USE_MALLOC if(armci_nproc > 1) # endif if(ARMCI_Uses_shm()){ if(armci_me==armci_master){ # ifdef RMA_NEEDS_SHMEM Free_Shmem_Ptr(0,0,ptr); # else if(armci_clus_info[armci_clus_me].nslave>1) Free_Shmem_Ptr(0,0,ptr); else kr_free(ptr, &ctx_localmem); # endif } ptr = NULL; return 0; } # endif kr_free(ptr, &ctx_localmem); //armci_unregister_shmem(ptr,0); ptr = NULL; ARMCI_PR_DBG("exit",0); return 0; } int ARMCI_Uses_shm() { int uses=0; #if (defined(SYSV) || defined(WIN32) || defined(MMAP) ||defined(HITACHI)) \ && !defined(NO_SHM) # ifdef RMA_NEEDS_SHMEM if(armci_nproc >1) uses= 1; /* always unless serial mode */ # else if(armci_nproc != armci_nclus)uses= 1; /* only when > 1 node used */ # endif #endif if(DEBUG_) fprintf(stderr,"%d:uses shmem %d\n",armci_me, uses); return uses; } #ifdef MPI int ARMCI_Uses_shm_grp(ARMCI_Group *group) { int uses=0, grp_me, grp_nproc, grp_nclus; ARMCI_PR_DBG("enter",0); armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); grp_nclus = grp_attr->grp_nclus; #if (defined(SYSV) || defined(WIN32) || defined(MMAP) ||defined(HITACHI)) \ && !defined(NO_SHM) # ifdef RMA_NEEDS_SHMEM if(grp_nproc >1) uses= 1; /* always unless serial mode */ # else if(grp_nproc != grp_nclus)uses= 1; /* only when > 1 node used */ # endif #endif if(DEBUG_) fprintf(stderr,"%d (grp_id=%d):uses shmem %d\n",armci_me, grp_me, uses); ARMCI_PR_DBG("exit",0); return uses; } /*\ ************** Begin Group Collective Memory Allocation ****************** * returns array of pointers to blocks of memory allocated by everybody * Note: as the same shared memory region can be mapped at different locations * in each process address space, the array might hold different values * on every process. However, the addresses are legitimate * and can be used in the ARMCI data transfer operations. * ptr_arr[nproc] \*/ int ARMCI_Malloc_group(void *ptr_arr[], armci_size_t bytes, ARMCI_Group *group) { void *ptr; int grp_me, grp_nproc; ARMCI_PR_DBG("enter",0); ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); if(DEBUG_)fprintf(stderr,"%d (grp_id=%d) bytes in armci_malloc_group %d\n", armci_me, grp_me, (int)bytes); #ifdef USE_MALLOC if(grp_nproc == 1) { ptr = kr_malloc((size_t) bytes, &ctx_localmem, 0, NULL, NULL); if(bytes) if(!ptr) armci_die("armci_malloc_group:malloc 1 failed",(int)bytes); ptr_arr[grp_me] = ptr; ARMCI_PR_DBG("exit",0); return (0); } #endif if( ARMCI_Uses_shm_grp(group) ) { # ifdef SGIALTIX armci_altix_shm_malloc_group(ptr_arr,bytes,group); # else armci_shmem_malloc_group(ptr_arr,bytes,group); # endif } else { void *new_base=NULL; size_t new_size=NULL; ptr = kr_malloc(bytes, &ctx_localmem, 1, &new_base, &new_size); if(bytes) if(!ptr) armci_die("armci_malloc:malloc 2 failed",bytes); bzero((char*)ptr_arr,grp_nproc*sizeof(void*)); ptr_arr[grp_me] = ptr; /* now combine individual addresses into a single array */ armci_exchange_address_grp(ptr_arr, grp_nproc, group); } ARMCI_PR_DBG("exit",0); return(0); } /*\ shared memory is released to kr_malloc only on process 0 * with data server malloc cannot be used \*/ int ARMCI_Free_group(void *ptr, ARMCI_Group *group) { int grp_me, grp_nproc, grp_master, grp_clus_me; armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); ARMCI_PR_DBG("enter",0); if(!ptr)return 1; ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); if(grp_me == MPI_UNDEFINED) { /* check if the process is in this group */ armci_die("armci_malloc_group: process is not a member in this group", armci_me); } /* get the group cluster info */ grp_clus_me = grp_attr->grp_clus_me; grp_master = grp_attr->grp_clus_info[grp_clus_me].master; # if (defined(SYSV) || defined(WIN32) || defined(MMAP)) && !defined(NO_SHM) # ifdef USE_MALLOC if(grp_nproc > 1) # endif if(ARMCI_Uses_shm_grp(group)){ if(grp_me == grp_master) { # ifdef RMA_NEEDS_SHMEM Free_Shmem_Ptr(0,0,ptr); # else if(armci_clus_info[armci_clus_me].nslave>1) Free_Shmem_Ptr(0,0,ptr); else kr_free(ptr, &ctx_localmem); # endif } ptr = NULL; ARMCI_PR_DBG("exit",0); return 0; } # endif kr_free(ptr, &ctx_localmem); ptr = NULL; ARMCI_PR_DBG("exit",0); return 0; } /* ***************** End Group Collective Memory Allocation ******************/ /* ************** Begin Non-Collective Memory Allocation ****************** * Prototype similar to SysV shared memory. */ /** * CHECK: On Altix we are forced to use SysV as shmalloc is collective. We * may use a preallocated shmalloc memory, however, it may NOT still solve * our problem... * NOTE: "int memflg" option for future optimiztions. */ void PARMCI_Memget(size_t bytes, armci_meminfo_t *meminfo, int memflg) { void *myptr=NULL; void *armci_ptr=NULL; /* legal ARCMI ptr used in ARMCI data xfer ops*/ size_t size = bytes; if(size<=0) armci_die("ARMCI_Memget: size must be > 0", (int)size); if(meminfo==NULL) armci_die("ARMCI_Memget: Invalid arg #2 (NULL ptr)",0); if(memflg!=0) armci_die("ARMCI_Memget: Invalid memflg", memflg); if( !ARMCI_Uses_shm() ) { armci_ptr = myptr = kr_malloc(size, &ctx_localmem, 0, NULL, NULL); if(size) if(!myptr) armci_die("ARMCI_Memget failed", (int)size); /* fill the meminfo structure */ meminfo->armci_addr = armci_ptr; meminfo->addr = myptr; meminfo->size = size; meminfo->cpid = armci_me; /* meminfo->attr = NULL; */ } else { armci_shmem_memget(meminfo, size); } if(DEBUG_){ printf("%d: ARMCI_Memget: addresses server=%p myptr=%p bytes=%ld\n", armci_me, meminfo->armci_addr, meminfo->addr, bytes); fflush(stdout); } } void* PARMCI_Memat(armci_meminfo_t *meminfo, long offset) { void *ptr=NULL; if(meminfo==NULL) armci_die("ARMCI_Memget: Invalid arg #2 (NULL ptr)",0); if(offset!=0) armci_die("ARMCI_Memget: Invalid offset", offset); if(meminfo->cpid==armci_me) { ptr = meminfo->addr; return ptr; } if( !ARMCI_Uses_shm()) { ptr = meminfo->addr; } else { ptr = armci_shmem_memat(meminfo); } if(DEBUG_) { printf("%d:ARMCI_Memat: attached addr mptr=%p size=%ld\n", armci_me, ptr, meminfo->size); fflush(stdout); } return ptr; } void ARMCI_Memdt(armci_meminfo_t *meminfo, long offset) { /** * Do nothing. May be we need to have reference counting in future. This * is to avoid the case of dangling pointers when the creator of shm * segment calls Memctl and other processes are still attached to this * segment */ } void ARMCI_Memctl(armci_meminfo_t *meminfo) { if(meminfo==NULL) armci_die("ARMCI_Memget: Invalid arg #2 (NULL ptr)",0); /* only the creator can delete the segment */ if(meminfo->cpid == armci_me) { if( !ARMCI_Uses_shm() ) { void *ptr = meminfo->addr; kr_free(ptr, &ctx_localmem); } else { armci_shmem_memctl(meminfo); } } meminfo->addr = NULL; meminfo->armci_addr = NULL; /* if(meminfo->attr!=NULL) free(meminfo->attr); */ } /* ***************** End Non-Collective Memory Allocation ******************/ #endif #endif ga-5-3/armci/src-portals/copy.h0000640005473000001440000004641111645616370015302 0ustar d3n000users/* $Id: copy.h,v 1.86.2.6 2007-08-29 17:32:32 manoj Exp $ */ #ifndef _COPY_H_ #define _COPY_H_ #include #include #ifdef WIN32 # include #endif #ifdef DECOSF #include #endif #ifndef EXTERN # define EXTERN extern #endif #if defined(SGI) || defined(FUJITSU) || defined(HPUX) || defined(SOLARIS) || defined (DECOSF) || defined(__ia64__) || defined(__crayx1) # define PTR_ALIGN #endif #if defined(NB_NONCONT) && !defined(CRAY_SHMEM) && !defined(QUADRICS) #error NB_NONCONT is only available on CRAY_SHMEM,QUADRICS and PORTALS #endif #if defined(SHMEM_HANDLE_SUPPORTED) && !defined(CRAY_SHMEM) #error SHMEM_HANDLE_SUPPORTED should not be defined on a non CRAY_SHMEM network #endif /* 08/30/06 moved up here from lines 252-397, MEM_FENCE before FENCE_NODE */ #if defined(NEED_MEM_SYNC) # ifdef AIX # define MEM_FENCE {int _dummy=1; _clear_lock((int *)&_dummy,0); } # elif defined(__ia64) # if defined(__GNUC__) && !defined (__INTEL_COMPILER) # define MEM_FENCE __asm__ __volatile__ ("mf" ::: "memory"); # else /* Intel Compiler */ extern void _armci_ia64_mb(); # define MEM_FENCE _armci_ia64_mb(); # endif # elif defined(LINUX) && defined(__GNUC__) && defined(__ppc__) # define MEM_FENCE \ __asm__ __volatile__ ("isync" : : : "memory"); # endif #endif #ifndef armci_copy # define armci_copy(src,dst,n) bcopy(src,dst,n) #endif /****************************** 2D Copy *******************/ # define DCopy2D(rows, cols, src_ptr, src_ld, dst_ptr, dst_ld){\ int j, nbytes = sizeof(double)* rows;\ char *ps=src_ptr, *pd=dst_ptr;\ for (j = 0; j < cols; j++){\ armci_copy(ps, pd, nbytes);\ ps += sizeof(double)* src_ld;\ pd += sizeof(double)* dst_ld;\ }\ } # define ByteCopy2D(bytes, count, src_ptr, src_stride, dst_ptr,dst_stride){\ int _j;\ char *ps=src_ptr, *pd=dst_ptr;\ for (_j = 0; _j < count; _j++){\ armci_copy(ps, pd, bytes);\ ps += src_stride;\ pd += dst_stride;\ }\ } #if defined(FUJITSU) # define armci_put2D(p, bytes,count,src_ptr,src_stride,dst_ptr,dst_stride)\ CopyPatchTo(src_ptr, src_stride, dst_ptr, dst_stride, count,bytes, p) # define armci_get2D(p, bytes, count, src_ptr,src_stride,dst_ptr,dst_stride)\ CopyPatchFrom(src_ptr, src_stride, dst_ptr, dst_stride,count,bytes,p) #elif defined(HITACHI) || defined(_ELAN_PUTGET_H) && !defined(NB_NONCONT) #if defined(QUADRICS) #if 0 # define WAIT_FOR_PUTS elan_putWaitAll(elan_base->state,200) # define WAIT_FOR_GETS elan_getWaitAll(elan_base->state,200) #else # define WAIT_FOR_PUTS armcill_wait_put() # define WAIT_FOR_GETS armcill_wait_get() extern void armcill_wait_put(); extern void armcill_wait_get(); #endif #endif extern void armcill_put2D(int proc, int bytes, int count, void* src_ptr,int src_stride, void* dst_ptr,int dst_stride); extern void armcill_get2D(int proc, int bytes, int count, void* src_ptr,int src_stride, void* dst_ptr,int dst_stride); # define armci_put2D armcill_put2D # define armci_get2D armcill_get2D #elif defined(NB_NONCONT) extern void armcill_wait_put(); extern void armcill_wait_get(); # define WAIT_FOR_PUTS armcill_wait_put() # define WAIT_FOR_GETS armcill_wait_get() extern void armcill_put2D(int proc, int bytes, int count, void* src_ptr,int src_stride, void* dst_ptr,int dst_stride); extern void armcill_get2D(int proc, int bytes, int count, void* src_ptr,int src_stride, void* dst_ptr,int dst_stride); # define armci_put2D armcill_put2D # define armci_get2D armcill_get2D # if defined(QUADRICS) # define armcill_nb_put(_dst, _src, _sz, _proc, _hdl)\ _hdl = elan_put(elan_base->state,_src,_dst,(size_t)_sz,_proc) # define armcill_nb_get(_dst, _src, _sz, _proc, _hdl)\ _hdl = elan_get(elan_base->state,_src,_dst,(size_t)_sz,_proc) # define armcill_nb_wait(_hdl)\ elan_wait(_hdl,100) # elif defined(CRAY_SHMEM) # define armcill_nb_wait(_hdl)\ shmem_wait_nb(_hdl) /*VT:this should be ifdef'ed based on if shmem_handle is defined or not*/ # if defined (CRAY_XT) # define armcill_nb_put(_dst, _src, _sz, _proc, _hdl)\ shmem_putmem(_dst, _src, (size_t)_sz, _proc) # define armcill_nb_get(_dst, _src, _sz, _proc, _hdl)\ shmem_getmem(_dst, _src, (size_t)_sz, _proc) # else # define armcill_nb_put(_dst, _src, _sz, _proc, _hdl)\ _hdl = shmem_putmem_nb(_dst, _src, (size_t)_sz, _proc, &(_hdl)) # define armcill_nb_get(_dst, _src, _sz, _proc, _hdl)\ _hdl = shmem_getmem_nb(_dst, _src, (size_t)_sz, _proc, &(_hdl)) # endif # endif #else # define armci_put2D(proc,bytes,count,src_ptr,src_stride,dst_ptr,dst_stride){\ int _j;\ char *ps=src_ptr, *pd=dst_ptr;\ for (_j = 0; _j < count; _j++){\ armci_put(ps, pd, bytes, proc);\ ps += src_stride;\ pd += dst_stride;\ }\ } # define armci_get2D(proc,bytes,count,src_ptr,src_stride,dst_ptr,dst_stride){\ int _j;\ char *ps=src_ptr, *pd=dst_ptr;\ for (_j = 0; _j < count; _j++){\ armci_get(ps, pd, bytes, proc);\ ps += src_stride;\ pd += dst_stride;\ }\ } #endif /* macros to ensure ordering of consecutive puts or gets following puts */ #if defined(LAPI) # include "lapidefs.h" #elif defined(_CRAYMPP) || defined(QUADRICS) || defined(__crayx1)\ || defined(CRAY_SHMEM) #if defined(CRAY) || defined(CRAY_XT) # include #else # include #ifndef ptrdiff_t # include #endif # include #endif # ifdef ELAN_ACC # define FENCE_NODE(p) {\ if(((p)armci_clus_last))armci_elan_fence(p);} # define UPDATE_FENCE_STATE(p, op, nissued) # else int cmpl_proc; # ifdef DECOSF # define FENCE_NODE(p) if(cmpl_proc == (p)){\ if(((p)armci_clus_last))shmem_quiet();\ else asm ("mb"); } # else # define FENCE_NODE(p) if(cmpl_proc == (p)){\ if(((p)armci_clus_last))shmem_quiet(); } # endif # define UPDATE_FENCE_STATE(p, op, nissued) if((op)==PUT) cmpl_proc=(p); # endif #else # if defined(GM) && defined(ACK_FENCE) extern void armci_gm_fence(int p); # define FENCE_NODE(p) armci_gm_fence(p) # elif defined(BGML) # include "bgmldefs.h" # define FENCE_NODE(p) BGML_WaitProc(p) # else # define FENCE_NODE(p) # endif # define UPDATE_FENCE_STATE(p, op, nissued) #endif #ifdef NEC # define THRESH 1 # define THRESH1D 1 #else # define THRESH 32 # define THRESH1D 512 #endif #define ALIGN_SIZE sizeof(double) /********* interface to C 1D and 2D memory copy functions ***********/ /* dcopy2d_u_ uses explicit unrolled loops to depth 4 */ void c_dcopy2d_n_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict B, const int* const restrict bld); void c_dcopy2d_u_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict B, const int* const restrict bld); void c_dcopy1d_n_(const double* const restrict A, double* const restrict B, const int* const restrict n); void c_dcopy1d_u_(const double* const restrict A, double* const restrict B, const int* const restrict n); void c_dcopy21_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict buf, int* const restrict cur); void c_dcopy12_(const int* const restrict rows, const int* const restrict cols, double* const restrict A, const int* const restrict ald, const double* const restrict buf, int* const restrict cur); void c_dcopy31_(const int* const restrict rows, const int* const restrict cols, const int* const restrict plns, const double* const restrict A, const int* const restrict aldr, const int* const restrict aldc, double* const restrict buf, int* const restrict cur); void c_dcopy13_(const int* const restrict rows, const int* const restrict cols, const int* const restrict plns, double* const restrict A, const int* const restrict aldr, const int* const restrict aldc, const double* const restrict buf, int* const restrict cur); /********* interface to fortran 1D and 2D memory copy functions ***********/ #if ENABLE_F77 # ifdef WIN32 # define ATR __stdcall # else # define ATR # endif # define dcopy2d_n_ F77_FUNC_(dcopy2d_n,DCOPY2D_N) # define dcopy2d_u_ F77_FUNC_(dcopy2d_u,DCOPY2D_U) # define dcopy1d_n_ F77_FUNC_(dcopy1d_n,DCOPY1D_N) # define dcopy1d_u_ F77_FUNC_(dcopy1d_u,DCOPY1D_U) # define dcopy21_ F77_FUNC(dcopy21,DCOPY21) # define dcopy12_ F77_FUNC(dcopy12,DCOPY12) # define dcopy31_ F77_FUNC(dcopy31,DCOPY31) # define dcopy13_ F77_FUNC(dcopy13,DCOPY13) void ATR dcopy2d_n_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict B, const int* const restrict bld); void ATR dcopy2d_u_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict B, const int* const restrict bld); void ATR dcopy1d_n_(const double* const restrict A, double* const restrict B, const int* const restrict n); void ATR dcopy1d_u_(const double* const restrict A, double* const restrict B, const int* const restrict n); void ATR dcopy21_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict buf, int* const restrict cur); void ATR dcopy12_(const int* const restrict rows, const int* const restrict cols, double* const restrict A, const int* const restrict ald, const double* const restrict buf, int* const restrict cur); void ATR dcopy31_(const int* const restrict rows, const int* const restrict cols, const int* const restrict plns, const double* const restrict A, const int* const restrict aldr, const int* const restrict aldc, double* const restrict buf, int* const restrict cur); void ATR dcopy13_(const int* const restrict rows, const int* const restrict cols, const int* const restrict plns, double* const restrict A, const int* const restrict aldr, const int* const restrict aldc, const double* const restrict buf, int* const restrict cur); #endif #if NOFORT # if defined(AIX) || defined(BGML) # define DCOPY2D c_dcopy2d_u_ # define DCOPY1D c_dcopy1d_u_ # elif defined(LINUX) || defined(__crayx1) || defined(HPUX64) || defined(DECOSF) || defined(CRAY) || defined(WIN32) || defined(HITACHI) # define DCOPY2D c_dcopy2d_n_ # define DCOPY1D c_dcopy1d_n_ # else # define DCOPY2D c_dcopy2d_u_ # define DCOPY1D c_dcopy1d_u_ # endif # define DCOPY21 c_dcopy21_ # define DCOPY12 c_dcopy12_ # define DCOPY31 c_dcopy31_ # define DCOPY13 c_dcopy13_ #else # if defined(AIX) || defined(BGML) # define DCOPY2D dcopy2d_u_ # define DCOPY1D dcopy1d_u_ # elif defined(LINUX) || defined(__crayx1) || defined(HPUX64) || defined(DECOSF) || defined(CRAY) || defined(WIN32) || defined(HITACHI) # define DCOPY2D dcopy2d_n_ # define DCOPY1D dcopy1d_n_ # else # define DCOPY2D dcopy2d_u_ # define DCOPY1D dcopy1d_u_ # endif # define DCOPY21 dcopy21_ # define DCOPY12 dcopy12_ # define DCOPY31 dcopy31_ # define DCOPY13 dcopy13_ #endif /***************************** 1-Dimensional copy ************************/ #if defined(QUADRICS) # include # if defined(_ELAN_PUTGET_H) # define qsw_put(src,dst,n,proc) \ elan_wait(elan_put(elan_base->state,src,dst,n,proc),elan_base->waitType) # define qsw_get(src,dst,n,proc) \ elan_wait(elan_get(elan_base->state,src,dst,n,proc),elan_base->waitType) /* # define ARMCI_NB_PUT(src,dst,n,proc,phandle)\ *(phandle)=elan_put(elan_base->state,src,dst,n,proc) */ #ifdef DOELAN4 extern void armci_elan_put_with_tracknotify(char *src,char *dst,int n,int proc, ELAN_EVENT **phandle); # define ARMCI_NB_PUT(src,dst,n,proc,phandle)\ armci_elan_put_with_tracknotify(src,dst,n,proc,phandle) #endif # define ARMCI_NB_GET(src,dst,n,proc,phandle)\ *(phandle)=elan_get(elan_base->state,src,dst,n,proc) # define ARMCI_NB_WAIT(handle) if(handle)elan_wait(handle,elan_base->waitType) # define ARMCI_NB_TEST(handle,_succ) (*(_succ))= (handle)? !elan_poll(handle,1L): 1 # else # define qsw_put(src,dst,n,proc) shmem_putmem((dst),(src),(int)(n),(proc)) # define qsw_get(src,dst,n,proc) shmem_getmem((dst),(src),(int)(n),(proc)) # endif # define armci_put(src,dst,n,proc)\ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { qsw_put(src,dst,n,proc);} # define armci_get(src,dst,n,proc) \ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { qsw_get((src),(dst),(int)(n),(proc));} #elif defined(CRAY_T3E) || defined(CRAY_SHMEM) # define armci_copy_disabled(src,dst,n)\ if((n)<256 || n%sizeof(long) ) memcpy((dst),(src),(n));\ else {\ shmem_put((long*)(dst),(long*)(src),(int)(n)/sizeof(long),armci_me);\ shmem_quiet(); } # define armci_put(src,dst,n,proc) \ shmem_put32((void *)(dst),(void *)(src),(int)(n)/4,(proc));\ shmem_quiet() # define armci_get(src,dst,n,proc) \ shmem_get32((void *)(dst),(void *)(src),(int)(n)/4,(proc));\ shmem_quiet() #elif defined(HITACHI) extern void armcill_put(void *src, void *dst, int bytes, int proc); extern void armcill_get(void *src, void *dst, int bytes, int proc); # define armci_put(src,dst,n,proc) \ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { armcill_put((src), (dst),(n),(proc));} # define armci_get(src,dst,n,proc)\ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { armcill_get((src), (dst),(n),(proc));} #elif defined(FUJITSU) # include "fujitsu-vpp.h" # ifndef __sparc # define armci_copy(src,dst,n) _MmCopy((char*)(dst), (char*)(src), (n)) # endif # define armci_put CopyTo # define armci_get CopyFrom #elif defined(LAPI) # include extern lapi_handle_t lapi_handle; # define armci_put(src,dst,n,proc)\ if(proc==armci_me){\ armci_copy(src,dst,n);\ } else {\ if(LAPI_Put(lapi_handle, (uint)proc, (uint)n, (dst), (src),\ NULL,&(ack_cntr[ARMCI_THREAD_IDX].cntr),&cmpl_arr[proc].cntr))\ ARMCI_Error("LAPI_put failed",0); else;} /**** this copy is nonblocking and requires fence to complete!!! ****/ # define armci_get(src,dst,n,proc) \ if(proc==armci_me){\ armci_copy(src,dst,n);\ } else {\ if(LAPI_Get(lapi_handle, (uint)proc, (uint)n, (src), (dst), \ NULL, &(get_cntr[ARMCI_THREAD_IDX].cntr)))\ ARMCI_Error("LAPI_Get failed",0);else;} # define ARMCI_NB_PUT(src,dst,n,proc,cmplt)\ {if(LAPI_Setcntr(lapi_handle, &((cmplt)->cntr), 0))\ ARMCI_Error("LAPI_Setcntr in NB_PUT failed",0);\ (cmplt)->val=1;\ if(LAPI_Put(lapi_handle, (uint)proc, (uint)n, (dst), (src),\ NULL, &((cmplt)->cntr), &cmpl_arr[proc].cntr))\ ARMCI_Error("LAPI_put failed",0); else;} # define ARMCI_NB_GET(src,dst,n,proc,cmplt)\ {if(LAPI_Setcntr(lapi_handle, &((cmplt)->cntr), 0))\ ARMCI_Error("LAPI_Setcntr in NB_GET failed",0);\ (cmplt)->val=1;\ if(LAPI_Get(lapi_handle, (uint)proc, (uint)n, (src), (dst), \ NULL, &((cmplt)->cntr)))\ ARMCI_Error("LAPI_Get NB_GET failed",0);else;} # define ARMCI_NB_WAIT(cmplt) CLEAR_COUNTER((cmplt)) # define ARMCI_NB_TEST(cmplt,_succ) TEST_COUNTER((cmplt),(_succ)) #elif defined(PORTALS) # define armci_put(src,dst,n,proc) \ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { armci_portals_put((proc),(src), (dst),(n),NULL,0);} # define armci_get(src,dst,n,proc)\ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { armci_portals_get((proc),(src), (dst),(n),NULL,0);} # define ARMCI_NB_PUT(src,dst,n,proc,cmplt)\ nb_handle->tag=GET_NEXT_NBTAG();armci_portals_put((proc),(src),\ (dst),(n),cmplt,nb_handle->tag) # define ARMCI_NB_GET(src,dst,n,proc,cmplt)\ nb_handle->tag=GET_NEXT_NBTAG();armci_portals_get((proc),(src),\ (dst),(n),cmplt,nb_handle->tag) #elif defined(BGML) #define armci_get(src, dst, n, p) PARMCI_Get(src, dst, n, p) #define armci_put(src, dst, n, p) PARMCI_Put(src, dst, n, p) #else # define armci_get(src,dst,n,p) armci_copy((src),(dst),(n)) # define armci_put(src,dst,n,p) armci_copy((src),(dst),(n)) #endif #ifndef MEM_FENCE # define MEM_FENCE #endif #ifndef armci_copy_fence # define armci_copy_fence armci_copy #endif #endif ga-5-3/armci/src-portals/new_memory.c0000640005473000001440000002554111621001436016466 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #include "armcip.h" #include "message.h" #define DEBUG_ 0 #define USE_SHMEM_ #define SHM_UNIT 1024 void armci_print_ptr(void **ptr_arr, int bytes, int size, void* myptr, int off) { int i; int nproc = armci_clus_info[armci_clus_me].nslave; ARMCI_PR_DBG("enter",0); for(i=0; i< armci_nproc; i++){ int j; if(armci_me ==i){ printf("%d master =%d nproc=%d off=%d\n",armci_me, armci_master,nproc, off); printf("%d:bytes=%d mptr=%p s=%d ",armci_me, bytes, myptr,size); for(j = 0; j< armci_nproc; j++)printf(" %p",ptr_arr[j]); printf("\n"); fflush(stdout); } armci_msg_barrier(); } ARMCI_PR_DBG("exit",0); } /******************************************************************** * Non-collective Memory Allocation on shared memory systems \*/ void armci_shmem_memget(armci_meminfo_t *meminfo, size_t size) { void *myptr=NULL; void *armci_ptr=NULL; /* legal ARCMIptr used in ARMCI data xfer ops */ /* can malloc if there is no data server process & has 1 process/node*/ } void* armci_shmem_memat(armci_meminfo_t *meminfo) { return NULL; } void armci_shmem_memctl(armci_meminfo_t *meminfo) { } /****** End: Non-collective memory allocation on shared memory systems *****/ /** * Local Memory Allocation and Free */ void *ARMCI_Malloc_local(armci_size_t bytes) { void *rptr; ARMCI_PR_DBG("enter",0); ARMCI_PR_DBG("exit",0); return malloc(bytes); } int ARMCI_Free_local(void *ptr) { ARMCI_PR_DBG("enter",0); free(ptr); ARMCI_PR_DBG("exit",0); return 0; } /*\ A wrapper to shmget. Just to be sure that ID is not 0. \*/ static int armci_shmget(size_t size,char *from) { int id; id = shmget(IPC_PRIVATE, size, (IPC_CREAT | 00600)); /*attaching with id 0 somehow fails (Seen on pentium4+linux24+gm163) *so if id=0, shmget again. */ while(id==0){ /* free id=0 and get a new one */ if(shmctl((int)id,IPC_RMID,(struct shmid_ds *)NULL)) { fprintf(stderr,"id=%d \n",id); armci_die("allocate: failed to _delete_ shared region ",id); } id = shmget(IPC_PRIVATE, size, (IPC_CREAT | 00600)); } if(DEBUG_){ printf("\n%d:armci_shmget sz=%ld caller=%s id=%d\n",armci_me,(long)size, from,id); fflush(stdout); } return(id); } /*\ Collective Memory Allocation * returns array of pointers to blocks of memory allocated by everybody * Note: as the same shared memory region can be mapped at different locations * in each process address space, the array might hold different values * on every process. However, the addresses are legitimate * and can be used in the ARMCI data transfer operations. * ptr_arr[nproc] \*/ #define CLEANUP_CMD(command) sprintf(command,"/usr/bin/ipcrm shm %d",id); int ARMCI_Malloc(void *ptr_arr[], armci_size_t bytes) { int mynslave = armci_clus_info[armci_clus_me].nslave; void *servptr,*mynodeptrs[mynslave]; int id,nodeids[mynslave],mynodeid=armci_me-armci_master; ARMCI_PR_DBG("enter",0); #ifdef DEBUG_MEM fprintf(stderr,"%d bytes in armci_malloc %d\n",armci_me, (int)bytes); fflush(stderr); armci_msg_barrier(); #endif if(bytes>0){ if(mynslave>1){ #ifdef DEBUG_MEM printf("\n%d:%s:mynslave is %d",armci_me,FUNCTION_NAME,mynslave);fflush(stdout); #endif bzero((void *)nodeids,sizeof(int)*mynslave); id =nodeids[mynodeid]= armci_shmget(bytes,"ARMCI_Malloc"); armci_msg_gop_scope(SCOPE_NODE,nodeids,mynslave,"+",ARMCI_INT); for(int i=0;i1){ servptr = armci_server_ptr(id); } else servptr = mynodeptrs[mynodeid]; } else{ #ifdef DEBUG_MEM printf("\n%d:%s:mynslave is %d, doing malloc",armci_me,FUNCTION_NAME,mynslave);fflush(stdout); #endif mynodeptrs[mynodeid] = servptr = malloc(bytes); } } else{ mynodeptrs[mynodeid] = servptr = NULL; } bzero((char*)ptr_arr,armci_nproc*sizeof(void*)); /*ptr_arr[armci_me] = servptr;*/ ptr_arr[armci_me] = mynodeptrs[mynodeid]; armci_exchange_address(ptr_arr,armci_nproc); if(mynslave>1)for(int i=0;i1){ armci_portals_memsetup((long)servptr-(long)ptr_arr[armci_me]); } ARMCI_PR_DBG("exit",0); return(0); } int ARMCI_Free(void *ptr) { ARMCI_PR_DBG("enter",0); if(!ptr)return 1; ARMCI_PR_DBG("exit",0); return 0; } int ARMCI_Uses_shm() { int uses=0; #if (defined(SYSV) || defined(WIN32) || defined(MMAP) ||defined(HITACHI)) \ && !defined(NO_SHM) # ifdef RMA_NEEDS_SHMEM if(armci_nproc >1) uses= 1; /* always unless serial mode */ # else if(armci_nproc != armci_nclus)uses= 1; /* only when > 1 node used */ # endif #endif if(DEBUG_) fprintf(stderr,"%d:uses shmem %d\n",armci_me, uses); return uses; } #ifdef MPI int ARMCI_Uses_shm_grp(ARMCI_Group *group) { int uses=0, grp_me, grp_nproc, grp_nclus; ARMCI_PR_DBG("enter",0); armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); grp_nclus = grp_attr->grp_nclus; #if (defined(SYSV) || defined(WIN32) || defined(MMAP) ||defined(HITACHI)) \ && !defined(NO_SHM) # ifdef RMA_NEEDS_SHMEM if(grp_nproc >1) uses= 1; /* always unless serial mode */ # else if(grp_nproc != grp_nclus)uses= 1; /* only when > 1 node used */ # endif #endif if(DEBUG_) fprintf(stderr,"%d (grp_id=%d):uses shmem %d\n",armci_me, grp_me, uses); ARMCI_PR_DBG("exit",0); return uses; } /*\ ************** Begin Group Collective Memory Allocation ****************** * returns array of pointers to blocks of memory allocated by everybody * Note: as the same shared memory region can be mapped at different locations * in each process address space, the array might hold different values * on every process. However, the addresses are legitimate * and can be used in the ARMCI data transfer operations. * ptr_arr[nproc] \*/ int ARMCI_Malloc_group(void *ptr_arr[], armci_size_t bytes, ARMCI_Group *group) { void *ptr; int grp_me, grp_nproc; ARMCI_PR_DBG("enter",0); ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); if(DEBUG_)fprintf(stderr,"%d (grp_id=%d) bytes in armci_malloc_group %d\n", armci_me, grp_me, (int)bytes); ARMCI_PR_DBG("exit",0); return(0); } int ARMCI_Free_group(void *ptr, ARMCI_Group *group) { int grp_me, grp_nproc, grp_master, grp_clus_me; armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); ARMCI_PR_DBG("enter",0); if(!ptr)return 1; ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); if(grp_me == MPI_UNDEFINED) { /* check if the process is in this group */ armci_die("armci_malloc_group: process is not a member in this group", armci_me); } /* get the group cluster info */ grp_clus_me = grp_attr->grp_clus_me; grp_master = grp_attr->grp_clus_info[grp_clus_me].master; ARMCI_PR_DBG("exit",0); return 0; } /* ***************** End Group Collective Memory Allocation ******************/ /* ************** Begin Non-Collective Memory Allocation ****************** * Prototype similar to SysV shared memory. */ /** * CHECK: On Altix we are forced to use SysV as shmalloc is collective. We * may use a preallocated shmalloc memory, however, it may NOT still solve * our problem... * NOTE: "int memflg" option for future optimiztions. */ void ARMCI_Memget(size_t bytes, armci_meminfo_t *meminfo, int memflg) { void *myptr=NULL; void *armci_ptr=NULL; /* legal ARCMI ptr used in ARMCI data xfer ops*/ size_t size = bytes; if(size<=0) armci_die("ARMCI_Memget: size must be > 0", (int)size); if(meminfo==NULL) armci_die("ARMCI_Memget: Invalid arg #2 (NULL ptr)",0); if(memflg!=0) armci_die("ARMCI_Memget: Invalid memflg", memflg); if( !ARMCI_Uses_shm() ) { /* fill the meminfo structure */ meminfo->armci_addr = armci_ptr; meminfo->addr = myptr; meminfo->size = size; meminfo->cpid = armci_me; /* meminfo->attr = NULL; */ } else { armci_shmem_memget(meminfo, size); } if(DEBUG_){ printf("%d: ARMCI_Memget: addresses server=%p myptr=%p bytes=%ld\n", armci_me, meminfo->armci_addr, meminfo->addr, bytes); fflush(stdout); } } void* ARMCI_Memat(armci_meminfo_t *meminfo, int memflg) { void *ptr=NULL; if(meminfo==NULL) armci_die("ARMCI_Memget: Invalid arg #2 (NULL ptr)",0); if(memflg!=0) armci_die("ARMCI_Memget: Invalid memflg", memflg); if(meminfo->cpid==armci_me) { ptr = meminfo->addr; return ptr; } if( !ARMCI_Uses_shm()) { ptr = meminfo->addr; } else { ptr = armci_shmem_memat(meminfo); } if(DEBUG_) { printf("%d:ARMCI_Memat: attached addr mptr=%p size=%ld\n", armci_me, ptr, meminfo->size); fflush(stdout); } return ptr; } void ARMCI_Memdt(armci_meminfo_t *meminfo, int memflg) { /** * Do nothing. May be we need to have reference counting in future. This * is to avoid the case of dangling pointers when the creator of shm * segment calls Memctl and other processes are still attached to this * segment */ } void ARMCI_Memctl(armci_meminfo_t *meminfo) { if(meminfo==NULL) armci_die("ARMCI_Memget: Invalid arg #2 (NULL ptr)",0); /* only the creator can delete the segment */ if(meminfo->cpid == armci_me) { if( !ARMCI_Uses_shm() ) { void *ptr = meminfo->addr; } else { armci_shmem_memctl(meminfo); } } meminfo->addr = NULL; meminfo->armci_addr = NULL; /* if(meminfo->attr!=NULL) free(meminfo->attr); */ } /* ***************** End Non-Collective Memory Allocation ******************/ #endif ga-5-3/armci/src-portals/kr_malloc.h0000640005473000001440000000651111471654236016270 0ustar d3n000users#ifndef KR_MALLOC_H /* K&R malloc */ #define KR_MALLOC_H #ifdef CRAY #define LOG_ALIGN 6 #elif defined(KSR) #define LOG_ALIGN 7 #else #define LOG_ALIGN 6 #endif #define ALIGNMENT (1 << LOG_ALIGN) #define KR_CTX_SHMEM 101 #define KR_CTX_LOCALMEM 102 union header{ struct { unsigned valid1; /* Token to check if is not overwritten */ union header *ptr; /* next block if on free list */ int shmid; /* next block's shared memory id */ long shmoffset; /* next block's shmem offset */ size_t shmsize; /* next block's shared memory segment size */ size_t size; /* size of this block*/ unsigned valid2; /* Another token acting as a guard */ } s; char align[ALIGNMENT]; /* Align to ALIGNMENT byte boundary */ }; typedef union header Header; typedef struct malloc_context { size_t usize; /* unit size in bytes */ size_t nalloc; /* No. of units of length ALIGNMENT */ size_t max_nalloc; /* Maximum no. of units that can get */ void * (*alloc_fptr)(); /* function pointer to memory alloc routine */ size_t total; /* Amount request from system in units */ long nchunk; /* No. of chunks of system memory */ long inuse; /* Amount in use in units */ long maxuse; /* Maximum value of inuse */ long nfrags; /* No. of fragments divided into */ long nmcalls; /* No. of calls to _armci_alloc() */ long nfcalls; /* No. of calls to memfree */ int ctx_type; /* context id. -1 represents ctx_local context. otherwise, it is ctx_shmem context. */ int shmid; /* first free block's (i.e.freep) shmem id */ long shmoffset; /* first free block's shmem offset */ size_t shmsize; /* first free block's shmem total size */ Header base; /* empty list to get started */ Header *freep; /* start of free list */ Header *usedp; /* start of used list */ } context_t; /* Memory required to store the shmem context in shared memory. This shmem context shuld be stored in shared memory and is stored in the first shared memory segment created (i.e.armci_krmalloc_init_ctxshmem) */ #define SHMEM_CTX_MEM (sizeof(context_t)+sizeof(void*)) #define SHMEM_CTX_BYTES ((SHMEM_CTX_MEM + sizeof(Header) - 1)>>LOG_ALIGN) + 1; extern void kr_malloc_init(size_t usize, /* unit size in bytes */ size_t nalloc, size_t max_nalloc, void * (*alloc_fptr)(), /* memory alloc routine */ int debug, context_t *ctx); /* Returns data aligned on a quad boundary. Even if the request size is zero it returns a non-zero pointer. */ extern char *kr_malloc(size_t size, context_t *ctx, int new_allocation, char **new_base, size_t *new_size); /* Frees memory allocated by kr_malloc(). Ignores NULL pointers but must not be called twice for the same pointer or called with non-memalloc'ed pointers */ extern void kr_free(char *ptr, context_t *ctx); /* Print to standard output the usage statistics ... a wrapper for kr_malloc_stats(); */ extern void kr_malloc_print_stats(context_t *ctx); extern void kr_malloc_verify(context_t *ctx); #endif ga-5-3/armci/src-portals/armcip.h0000640005473000001440000003674311744312006015577 0ustar d3n000users/* $Id: armcip.h,v 1.82.2.9 2007-08-29 17:32:31 manoj Exp $ */ /* armci private header file */ #ifndef _ARMCI_P_H #define _ARMCI_P_H #include #include "armci.h" #include "message.h" #include "code_options.h" #if 0 #define ARMCI_PR_DBG(__ARMCI_ST,__ARMCI_NU) \ printf("\n%d:%s:%d:%s:%s:%d",armci_me,__FILE__,__LINE__,FUNCTION_NAME,__ARMCI_ST,__ARMCI_NU);fflush(stdout) #define ARMCI_PR_SDBG(__ARMCI_ST,__ARMCI_NU) \ printf("\n(%d):%s:%d:%s:%s:%d",armci_me,__FILE__,__LINE__,FUNCTION_NAME,__ARMCI_ST,__ARMCI_NU);fflush(stdout) #else #define ARMCI_PR_DBG(__ARMCI_ST,__ARMCI_NU) #define ARMCI_PR_SDBG(__ARMCI_ST,__ARMCI_NU) #endif /*#define ARMCI_CHECK_STATE*/ #define ARMCI_STAMP 11214 #define ARMCI_TAIL 31121 #ifdef QUADRICS #include #ifdef QSNETLIBS_VERSION_CODE #ifndef DECOSF # define ELAN_ACC # define PENDING_OPER(x) ARMCI_ACC_INT #endif # if QSNETLIBS_VERSION_CODE > QSNETLIBS_VERSION(1,5,0) # define LIBELAN_ATOMICS # endif #endif extern void armci_elan_fence(int p); #endif /* we got problems on IA64/Linux64 with Elan if inlining is used */ #if defined(__GNUC__) && !defined(QUADRICS) # define INLINE inline #else # define INLINE #endif #ifdef WIN32 #include #define sleep(x) Sleep(100*(x)) #else #include #endif #if (defined(SYSV) || defined(WIN32)|| defined(MMAP)) && !defined(NO_SHM) && !defined(HITACHI) && !defined(CATAMOUNT) #define CLUSTER #ifdef SERVER_THREAD # define SERVER_NODE(c) (armci_clus_info[(c)].master); # define NODE_SERVER(c) (c); #else # define SOFFSET -1000000 # define SERVER_NODE(c) ((int)(SOFFSET -armci_clus_info[(c)].master)); # define NODE_SERVER(c) ((int)(SOFFSET - c)) #endif #endif /*\GPC call stuff \*/ typedef struct { int hndl, hlen, dlen; void *hdr, *data; }gpc_send_t; /*\ Stuff for non-blocking API \*/ #define NB_MULTI -1 /*more than one armci buffer(buffers.c) used for nbcall*/ #define NB_NONE -2 /*no armci buffer(buffers.c) used for nbcall*/ extern unsigned int _armci_get_next_tag(); #define GET_NEXT_NBTAG _armci_get_next_tag #define ARMCI_MAX_IMPLICIT 15 typedef struct{ int len; int last; void *exthdr; } ext_header_t; typedef struct{ int val; void *ptr; } armci_flag_t; #if defined(LAPI) || defined(PTHREADS) || defined(POSIX_THREADS) # include typedef pthread_t thread_id_t; # define THREAD_ID_SELF pthread_self #elif defined(WIN32) # include typedef DWORD thread_id_t; # define THREAD_ID_SELF GetCurrentThreadId #else typedef int thread_id_t; # define THREAD_ID_SELF() 1 #endif extern thread_id_t armci_usr_tid; #ifdef SERVER_THREAD # define SERVER_CONTEXT (armci_usr_tid != THREAD_ID_SELF()) #else # define SERVER_CONTEXT (armci_me<0) #endif #if defined(LAPI) || defined(CLUSTER) || defined(CRAY) \ || defined(CRAY_SHMEM) || defined(BGML) || defined(DCMF) # include "request.h" #endif /* ------------------------ ARMCI threads support ------------------------- */ #define ARMCI_THREADS_LIMIT 32 #include "utils.h" #if defined(THREAD_SAFE) typedef struct { int max; /* max # of threads per proc */ int avail; /* next available position */ thread_id_t *ids; /* list of threads' ids */ thread_lock_t lock; /* general case lock */ thread_lock_t buf_lock; /* lock for buffer access */ thread_lock_t net_lock; /* lock for network accees */ } armci_user_threads_t; extern armci_user_threads_t armci_user_threads; extern void armci_init_threads(); extern void armci_finalize_threads(); extern int armci_thread_idx(); extern INLINE int armci_register_thread(thread_id_t id); #define ARMCI_THREAD_IDX armci_thread_idx() /* needs to be optimized */ #else # define ARMCI_THREAD_IDX 0 #endif /* ------------------------------------------------------------------------ */ /* min amount of data in strided request to be sent in single TCP/IP message*/ #if defined(SOCKETS) || defined(MPI_SPAWN_ZEROCOPY) # define TCP_PAYLOAD 128 # define LONG_GET_THRESHOLD TCP_PAYLOAD # define LONG_GET_THRESHOLD_STRIDED LONG_GET_THRESHOLD # define LONG_PUT_THRESHOLD 128 #endif #ifdef WIN32 # define bzero(a,len){\ int _i;\ char *_c = (char*)(a);\ for(_i=0; _i< (int)(len); _i++)_c[_i]=(char)0;\ } # define bcopy(a,b,len) memcpy(b,a,len) #else # include #endif /*#define ACC_COPY*/ #if defined(CRAY_T3E) || defined(FUJITSU)\ || defined(HITACHI) || (defined(QUADRICS) && !defined(ELAN_ACC)) #define ACC_COPY #endif #ifndef FATR # ifdef WIN32 # define FATR __stdcall # else # define FATR # endif #endif #define MAX_PROC 8096 #define MAX_STRIDE_LEVEL ARMCI_MAX_STRIDE_LEVEL /* msg tag ARMCI uses in collective ops */ #define ARMCI_TAG 30000 #ifndef EXTRA_MSG_BUFLEN_DBL # define RESERVED_BUFLEN ((sizeof(request_header_t)>>3)+3*MAX_STRIDE_LEVEL) #else # define RESERVED_BUFLEN ((sizeof(request_header_t)>>3)+3*MAX_STRIDE_LEVEL +\ EXTRA_MSG_BUFLEN_DBL) #endif #if defined(HITACHI) # define BUFSIZE ((0x50000) * sizeof(double)) #else /* packing algorithm for double complex numbers requires even number */ # ifdef MSG_BUFLEN_DBL # define BUFSIZE_DBL (MSG_BUFLEN_DBL - RESERVED_BUFLEN) # else # define BUFSIZE_DBL 32768 # endif # define BUFSIZE (BUFSIZE_DBL * sizeof(double)) #endif /* note opcodes must be lower than ARMCI_ACC_OFF !!! */ #define PUT 1 #define GET 2 #define RMW 3 #define LOCK 4 #define UNLOCK 5 #define ACK 6 #define STATE 11214 /* must fit in two bits, see msginfo->format in request.h */ #define STRIDED 1 #define VECTOR 2 extern int armci_me, armci_nproc; extern int _armci_initialized; #ifdef HITACHI extern int sr8k_server_ready; extern double *armci_internal_buffer; #else extern double armci_internal_buffer[BUFSIZE_DBL]; #endif extern int armci_getbufsize(); extern void armci_shmem_init(); extern void armci_krmalloc_init_localmem(); extern void armci_die(char *msg, int code); extern void armci_die2(char *msg, int code1, int code2); extern void armci_write_strided(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf); extern void armci_read_strided(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf); extern int armci_op_strided(int op, void* scale, int proc,void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, int lockit,armci_ihdl_t nb_handle); extern int armci_copy_vector(int op, /* operation code */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int armci_acc_vector(int op, /* operation code */ void *scale, /* scale factor */ armci_giov_t darr[],/* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int armci_pack_strided(int op, void* scale, int proc, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, ext_header_t *hdr, int fit_level, int nb, int last,armci_ihdl_t nb_handle); extern int armci_pack_vector(int op, void *scale, armci_giov_t darr[],int len,int proc,armci_ihdl_t nb_handle); extern void armci_lockmem(void *pstart, void* pend, int proc); extern void armci_unlockmem(int proc); extern int armci_acc_copy_strided(int optype, void* scale, int proc, void* src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels); extern void armci_vector_to_buf(armci_giov_t darr[], int len, void* buf); extern void armci_vector_from_buf(armci_giov_t darr[], int len, void* buf); extern void armci_init_fence(); #ifdef SOCKETS #ifdef SERVER_THREAD extern void armci_create_server_thread ( void* (* func)(void*) ); extern void armci_terminate_server_thread(); #else extern void armci_create_server_process ( void* (* func)(void*) ); extern void armci_wait_server_process(); extern void RestoreSigChldDfl(); #endif #endif #ifdef MPI_SPAWN extern void armci_create_server_MPIprocess (); #endif #define ARMCI_MAX(a,b) (((a)>(b))?(a):(b)) #define ARMCI_MIN(a,b) (((a)<(b))?(a):(b)) #define ARMCI_ABS(a) (((a) >= 0) ? (a) : (-(a))) #define ARMCI_ACC(op) ((((int)(op))-ARMCI_ACC_INT)>=0) #ifdef CLUSTER extern char *_armci_fence_arr; # define FENCE_ARR(p_) (_armci_fence_arr[p_]) # define SAMECLUSNODE(p)\ ( ((p) <= armci_clus_last) && ((p) >= armci_clus_first) ) #elif defined(__crayx1) # define SAMECLUSNODE(p) 1 #elif defined(ARMCIX) # define SAMECLUSNODE(p) 0 #else # define SAMECLUSNODE(p) ((p)==armci_me) #endif #if defined(LAPI) || defined(ELAN_ACC) # define ORDER(op,proc)\ if( proc == armci_me || ( ARMCI_ACC(op) && ARMCI_ACC(PENDING_OPER(proc))) );\ else FENCE_NODE(proc) # define UPDATE_FENCE_INFO(proc_) #elif defined(CLUSTER) && !defined(QUADRICS) && !defined(HITACHI)\ && !defined(CRAY_SHMEM) # define ORDER(op_,proc_)\ if(!SAMECLUSNODE(proc_) && op_ != GET )FENCE_ARR(proc_)=1 # define UPDATE_FENCE_INFO(proc_) if(!SAMECLUSNODE(proc_))FENCE_ARR(proc_)=1 #else # if defined(GM) && defined(ACK_FENCE) # define ORDER(op,proc) # else # define ORDER(op,proc) if(proc != armci_me) FENCE_NODE(proc) # endif # define UPDATE_FENCE_INFO(proc_) #endif typedef struct { int ptr_array_len; int bytes; void **ptr_array; } armci_riov_t; /*\ consider up to HOSTNAME_LEN characters in host name * we can truncate names of the SP nodes since it is not used * to establish socket communication like on the networks of workstations * SP node names must be distinct within first HOSTNAME_LEN characters \*/ #if defined(LAPI) && defined(AIX) # define HOSTNAME_TRUNCATE # define HOSTNAME_LEN 12 #else # define HOSTNAME_LEN 64 #endif typedef struct { int master; int nslave; char hostname[HOSTNAME_LEN]; } armci_clus_t; extern armci_clus_t *armci_clus_info; extern int armci_nclus, armci_clus_me, armci_master; extern int armci_clus_first, armci_clus_last; extern int armci_clus_id(int p); extern void armci_init_clusinfo(); extern void armci_set_mem_offset(void *ptr); extern int _armci_terminating; extern void armci_acc_2D(int op, void* scale, int proc, void *src_ptr, void *dst_ptr, int bytes, int cols, int src_stride, int dst_stride, int lockit); extern void armci_lockmem_scatter(void *ptr_array[], int len, int bytes, int p); extern void armci_generic_rmw(int op, void *ploc, void *prem, int extra, int p); extern unsigned long armci_max_region(); extern void armci_dispatch_strided(void *ptr, int stride_arr[], int count[], int strides, int fit_level, int nb, int bufsize, void (*fun)(void*,int*,int*,int,void*), void *arg); extern void armci_msg_gop_init(); extern void armci_util_spin(int n, void *notused); #if defined(SYSV) || defined(WIN32) extern void armci_shmem_init(); extern void armci_set_shmem_limit_per_core(unsigned long shmemlimit); extern void armci_set_shmem_limit_per_node(int nslaves); extern void armci_set_shmem_limit(unsigned long shmemlimit); #endif #define ALIGN_PTR_LONG(type, x) if( ((long)(x)) % sizeof(long)) { long _y = (long)(x);\ if(sizeof(long)==8){_y>>=3; _y<<=3; }\ else { _y>>=2; _y<<=2; }\ _y += sizeof(long); (x) = (type*)_y; } #define SIXTYFOUR 64 #define ALIGN64ADD(buf) (SIXTYFOUR-(((ssize_t)(buf))%SIXTYFOUR)) #define ALIGNLONGADD(buf) ((((ssize_t)(buf))%sizeof(long))?(sizeof(long)-(((ssize_t)(buf))%sizeof(long))):0) #define SET 1 #define UNSET 0 extern int armci_agg_save_strided_descriptor(void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, int proc, int op, armci_ihdl_t nb_handle); extern int armci_agg_save_giov_descriptor(armci_giov_t darr[], int len, int proc, int op, armci_ihdl_t nb_handle); extern int armci_agg_save_descriptor(void *src, void *dst, int bytes, int proc, int op, int is_registered_put, armci_ihdl_t nb_handle); extern void armci_agg_complete(armci_ihdl_t nb_handle, int condition); extern armci_ihdl_t armci_set_implicit_handle (int op, int proc); extern int armci_getnumcpus(void); extern long armci_util_long_getval(long* p); extern int armci_util_int_getval(int* p); extern void armci_region_register_shm(void *start, long size); extern void armci_region_register_loc(void *start, long size); extern void armci_region_clus_record(int node, void *start, long size); extern void armci_region_init(); extern int armci_region_clus_found(int node, void *start, int size); extern int armci_region_loc_found(void *start, int size); extern int armci_region_both_found(void *loc, void *rem, int size, int node); #ifdef REGIONS_REQUIRE_MEMHDL extern int get_armci_region_local_hndl(void *loc, int node, ARMCI_MEMHDL_T **loc_memhdl); #endif extern void armci_region_exchange(void *start, long size); extern void cpu_yield(); #ifdef ALLOW_PIN extern void armci_global_region_exchange(void *, long); #endif /* -------------------- ARMCI Groups ---------------------- */ /* data structure that caches a group's attribute */ #ifdef BGML #define PCLASS 3 #endif #ifdef MPI typedef int ARMCI_Datatype; extern int ATTR_KEY; /* attribute key */ /* #define ARMCI_GROUP /\*Generic ARMCI implementation*\/ */ typedef struct { armci_clus_t *grp_clus_info; int grp_me; /* my group id */ int grp_nclus; /* number of cluster nodes */ int grp_clus_me; /* my cluster node id */ int mem_offset; /* memory offset */ #ifdef ARMCI_GROUP int nproc; /* #procs in this group*/ int *proc_list; /* Ids of procs in this group (w.r.t. MPI_COMM_WORLD)*/ #endif }armci_grp_attr_t; #include "mpi.h" /**dup of MPI_COMM_WORLD for internal MPI communication*/ extern MPI_Comm ARMCI_COMM_WORLD; #ifdef PORTALS #include "portals.h" #endif typedef MPI_Comm ARMCI_Comm; typedef struct { #ifndef ARMCI_GROUP MPI_Comm icomm; MPI_Group igroup; #endif armci_grp_attr_t grp_attr; }ARMCI_iGroup; armci_grp_attr_t *ARMCI_Group_getattr(ARMCI_Group *grp); extern void armci_group_init(); extern void armci_group_finalize(); extern ARMCI_iGroup* armci_get_igroup_from_group(ARMCI_Group *group); #endif /* ifdef MPI */ /* -------------------------------------------------------- */ /* ------------ ARMCI Chekcpointing/Recovery -------------- */ #ifdef DO_CKPT extern int armci_init_checkpoint(); extern void armci_create_ckptds(armci_ckpt_ds_t *ckptds, int count); extern int armci_icheckpoint_init(char *filename, ARMCI_Group *grp, int savestack, int saveheap, armci_ckpt_ds_t *ckptds); extern int armci_icheckpoint(int rid); extern int armci_irecover(int rid,int iamreplacement); extern void armci_icheckpoint_finalize(int rid); #endif /* ifdef DO_CKPT */ /* -------------------------------------------------------- */ /* portals only */ void armci_register_shmem(void *my_ptr, long size, long *idlist, long off, void *sptr); void armci_register_shmem_grp(void *my_ptr, long size, long *idlist, long off, void *sptr,ARMCI_Group *group); #endif ga-5-3/armci/src-portals/buffers.c0000640005473000001440000007241011410475746015755 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: buffers.c,v 1.29.6.9 2007-07-02 05:16:50 d3p687 Exp $ **/ #define SIXTYFOUR 64 #define DEBUG_ 0 #define DEBUG2_ 0 #define EXTRA_ERR_CHECK /**********************************************************************/ #include #include #include #include "armcip.h" #include "request.h" #ifdef WIN32 # include typedef unsigned long ssize_t; #else # include #endif # define EQ_TAGS(a_, b_) !memcmp(&(a_), &(b_), sizeof(a_)) #define ALIGN64ADD(buf) (SIXTYFOUR-(((ssize_t)(buf))%SIXTYFOUR)) /* the following symbols should be defined if needed in protocol specific header file: BUF_EXTRA_FIELD, BUF_ALLOCATE */ #ifndef BUF_ALLOCATE # define BUF_ALLOCATE malloc #endif #if defined PORTALS # define SMALL_BUF_LEN PORTALS_SMALL_BUF_SIZE #else # if defined(SERV_QUEUE) # define SMALL_BUF_LEN 4096 # else # define SMALL_BUF_LEN 2048 # endif #endif #ifndef MSG_BUFLEN_SMALL # define MSG_BUFLEN_SMALL (MSG_BUFLEN >>0) #endif #define LEFT_GUARD 11.11e11 #define RIGHT_GUARD 22.22e22 #define CLEAR_TABLE_SLOT(idx) *((int*)(_armci_buf_state->table+(idx))) =0 #ifndef BUF_NET_INIT #define BUF_NET_INIT(x,xX,Xx) #endif _buf_ackresp_t *_buf_ackresp_first,*_buf_ackresp_cur; /* we allow multiple buffers (up to 15) per single request * adjacent buffers can be coalesced into a large one */ typedef struct { int op; /* pending operation code */ int snd; /* if 1 then buffer is used for sending request */ int rcv; /* if 1 then buffer is used for receiving data */ int async; /* if 1 then request is nonblocking */ int first; /* id of the 1st buffer in the set in same request */ int count; /* count is not used and is always 1 (or 0???) */ /*unsigned int count:4; \* how many buffers used for this request 8 possible */ int busy; /* if 1 buffer is used and cannot be completed */ int cmpl; /* set to 1 if buffer was completed and can be released */ int to; /* serv/proc to which request was sent, 8172 possible */ }buf_state_t; #ifndef BUFID_PAD_T #define BUFID_PAD_T BUF_INFO_T #endif /* message send buffer data structure */ typedef struct { BUF_INFO_T id; # ifdef BUF_EXTRA_FIELD_T BUF_EXTRA_FIELD_T field; # endif char buffer[MSG_BUFLEN_SMALL]; } buf_ext_t; /* message send buffer data structure */ typedef struct { BUF_INFO_T id; # ifdef BUF_EXTRA_FIELD_T BUF_EXTRA_FIELD_T field; # endif char buffer[SMALL_BUF_LEN]; } buf_smext_t; /* we keep table and buffer pointer together for better locality */ typedef struct { double left_guard; /* stamp to verify if array was corrupted */ buf_state_t table[MAX_BUFS+MAX_SMALL_BUFS]; /*array with state of buffer */ buf_ext_t *buf; /* address of buffer pool */ buf_smext_t *smallbuf; /* address of the large buffer pool */ int avail; int smavail; int pad; double right_guard; /* stamp to verify if array was corrupted */ unsigned buf_bitmap; /* bitmaps to track available buffers: */ unsigned smbuf_bitmap;/* 1 - available, 0 - not available */ } reqbuf_pool_t; #ifndef BUF_EXTRA_FIELD_T # define SIZE_BUF_EXTRA_FIELD 0 # define BUF_TO_EBUF(buf) (buf_ext_t*)(((char*)buf) - sizeof(BUFID_PAD_T) -\ SIZE_BUF_EXTRA_FIELD) # define BUF_TO_SMEBUF(buf) (buf_smext_t*)(((char*)buf)- sizeof(BUFID_PAD_T) -\ SIZE_BUF_EXTRA_FIELD) #else # define BUF_TO_EBUF(buf) (buf_ext_t*)(((char*)buf) - sizeof(BUFID_PAD_T) -\ sizeof(BUF_EXTRA_FIELD_T)) # define BUF_TO_SMEBUF(buf) (buf_smext_t*)(((char*)buf)- sizeof(BUFID_PAD_T) -\ sizeof(BUF_EXTRA_FIELD_T)) #endif #define BUF_TO_BUFINDEX(buf) (BUF_TO_EBUF((buf)))->id.bufid #define BUF_TO_SMBUFINDEX(buf) (BUF_TO_SMEBUF((buf)))->id.bufid buf_ext_t *_armci_buffers; /* these are the actual buffers */ buf_smext_t *_armci_smbuffers; /* no, these are the actual buffers */ reqbuf_pool_t* _armci_buf_state; /* array that describes state of each buf */ extern active_socks_t *_armci_active_socks; /* returns bufinfo, given bufid */ INLINE BUF_INFO_T *_armci_id_to_bufinfo(int bufid) { if (bufid < 0 || bufid >= (MAX_BUFS+MAX_SMALL_BUFS)) armci_die2("_armci_id_to_bufinfo: bad id",bufid,MAX_BUFS); return bufid < MAX_BUFS ? &(_armci_buf_state->buf[bufid].id) : &(_armci_buf_state->smallbuf[bufid-MAX_BUFS].id); } /*\ we allocate alligned buffer space * this operation can be implemented in platform specific files \*/ void _armci_buf_init() { char *tmp; int extra=0; int smallbuf_size = sizeof(buf_smext_t)*(MAX_SMALL_BUFS); // tmp = (char *) BUF_ALLOCATE((MAX_BUFS*sizeof(buf_ext_t) + 64 + smallbuf_size + 64)); tmp = (char *) malloc((MAX_BUFS*sizeof(buf_ext_t) + 64 + smallbuf_size + 64)); bzero(tmp,MAX_BUFS*sizeof(buf_ext_t) + 64 + smallbuf_size + 64); extra= ALIGN64ADD(tmp); _armci_buffers = (buf_ext_t *) (tmp + extra); tmp = (char *)(_armci_buffers + MAX_BUFS); extra = ALIGN64ADD(tmp); _armci_smbuffers = (buf_smext_t *) (tmp + extra); if(DEBUG2_){ printf("%d:armci_init_bufs: pointer %p, before align ptr=%p bufptr=%p end of region is %p size=%d extra=%d\n", armci_me,_armci_buffers,tmp,_armci_buffers->buffer,(_armci_buffers+MAX_BUFS), MAX_BUFS*sizeof(buf_ext_t),extra); fflush(stdout); } /* now allocate state array */ tmp = malloc(sizeof(reqbuf_pool_t) + 64); bzero(tmp,sizeof(reqbuf_pool_t) + 64); if(!tmp)armci_die("_armci_buf_init calloc failed",0); extra= ALIGN64ADD(tmp); _armci_buf_state = (reqbuf_pool_t*)(tmp + extra); /* initialize it */ _armci_buf_state->left_guard = LEFT_GUARD; _armci_buf_state->right_guard = RIGHT_GUARD; _armci_buf_state->avail =0; _armci_buf_state->smavail =MAX_BUFS; _armci_buf_state->buf = _armci_buffers; _armci_buf_state->smallbuf = _armci_smbuffers; _buf_ackresp_first=_buf_ackresp_cur=NULL; if(BUF_TO_EBUF(_armci_buf_state->buf[0].buffer)!=_armci_buf_state->buf) armci_die("buffers.c, internal structure alignment problem",0); } /*\ convert buffer pointer to index (in state array) \*/ int _armci_buf_to_index(void *buf) { int index; char *ptr = (char*)buf; if(DEBUG2_){ printf("%d: in _armci_buf_to_index %p\n",armci_me, buf); fflush(stdout); } if(buf > (void *)_armci_buffers && buf < (void *)(_armci_buffers+MAX_BUFS)){ index = BUF_TO_BUFINDEX(ptr); if((index >= MAX_BUFS)|| (index<0)) armci_die2("armci_buf_to_index: bad index:",index,MAX_BUFS); return(index); } else if(buf > (void *)_armci_smbuffers && buf < (void *)(_armci_smbuffers+MAX_SMALL_BUFS)){ index = BUF_TO_SMBUFINDEX(ptr); if((index >= MAX_BUFS+MAX_SMALL_BUFS)|| (indextable + index; ARMCI_PR_DBG("enter",0); if(index>=MAX_BUFS){ int relidx; relidx = index-MAX_BUFS; CLEAR_SEND_BUF_FIELD(_armci_buf_state->smallbuf[relidx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op); } else CLEAR_SEND_BUF_FIELD(_armci_buf_state->buf[index].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op); ARMCI_PR_DBG("exit",0); } /*\ complete outstanding operation that uses the specified buffer \*/ void _armci_buf_complete_index(int idx, int called) { int count; buf_state_t *buf_state = _armci_buf_state->table +idx; portals_ds_req_t *req = NULL; count = buf_state->count; if(DEBUG_ || 0) { printf("%d:buf_complete_index:%d op=%d first=%d count=%d called=%d\n", armci_me,idx,buf_state->op,buf_state->first,buf_state->count, called); fflush(stdout); } if(buf_state->first != (unsigned int)idx){ armci_die2("complete_buf_index:inconsistent Index:",idx,buf_state->first); } /* need to call platform specific function */ if(idx>=MAX_BUFS){ int relidx,rr; relidx = idx-MAX_BUFS; //printf("\n%d:in clear idx=%d %d",armci_me,idx,_armci_buf_state->smallbuf[relidx].id.tag);fflush(stdout); /* ------------------------------------------------------------------------------------------- *\ active buffers need to be completed \* ------------------------------------------------------------------------------------------- */ # ifdef PORTALS req = &_armci_buf_state->smallbuf[relidx].id.ar.req; if(req->active) { // printf("%s [cp buf_complete_index] waiting on request %p\n",Portals_ID(),req); portalsWaitOnRequest(req); // printf("%s [cp buf_complete_index] request %p completed\n",Portals_ID(),req); } else { // printf("%s [cp buf_complete_index] request %p already completed\n",Portals_ID(),req); } # else if(_armci_buf_state->smallbuf[relidx].id.tag && (_armci_buf_state->smallbuf[relidx].field)->tag>0) { printf("%s [cp] calling armci_client_complete\n",Portals_ID()); rr=armci_client_complete(0,buf_state->to,_armci_buf_state->smallbuf[relidx].id.tag,_armci_buf_state->smallbuf[relidx].field); } CLEAR_SEND_BUF_FIELD(_armci_buf_state->smallbuf[relidx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op); # endif /*later, we might just need to do this for all operations, not just get*/ # ifdef PORTALS_ALLOW_NBGETS if(_armci_buf_state->smallbuf[relidx].id.tag!=0 &&(buf_state->op == GET)){ armci_complete_req_buf(&(_armci_buf_state->smallbuf[relidx].id), _armci_buf_state->smallbuf[relidx].buffer); } # endif _armci_buf_state->smallbuf[relidx].id.tag=0; } else { int rr; /* ------------------------------------------------------------------------------------------- *\ active buffers need to be completed \* ------------------------------------------------------------------------------------------- */ # ifdef PORTALS req = &_armci_buf_state->buf[idx].id.ar.req; if(req->active) portalsWaitOnRequest(req); # else if(_armci_buf_state->buf[idx].id.tag && (_armci_buf_state->buf[idx].field)->tag>0 ) rr=armci_client_complete(0,buf_state->to,_armci_buf_state->buf[idx].id.tag,_armci_buf_state->buf[idx].field); CLEAR_SEND_BUF_FIELD(_armci_buf_state->buf[idx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op); //printf("\n%d:in clear large idx=%d %d",armci_me,idx,_armci_buf_state->buf[idx].id.tag);fflush(stdout); # endif /*later, we might just need to do this for all operations, not just get*/ # ifdef PORTALS_ALLOW_NBGETS if(_armci_buf_state->buf[idx].id.tag!=0 &&(buf_state->op == GET)){ armci_complete_req_buf(&(_armci_buf_state->buf[idx].id), _armci_buf_state->buf[idx].buffer); } # endif _armci_buf_state->buf[idx].id.tag=0; } /* clear table slots for all the buffers in the set for this request */ for(; count; count--, buf_state++) *(int*)buf_state = 0; } /*\ test outstanding operation that uses the specified buffer for complete * It is important not to change the state of the buffer, the buffer has * to remain as it was, only completion has to be indicated \*/ int _armci_buf_test_index(int idx, int called) { int count,retval=0; buf_state_t *buf_state = _armci_buf_state->table +idx; count = buf_state->count; if(DEBUG_ ){ printf("%d:buf_test_index:%d op=%d first=%d count=%d called=%d\n", armci_me,idx,buf_state->op,buf_state->first,buf_state->count, called); fflush(stdout); } if(buf_state->first != (unsigned int)idx){ armci_die2("_buf_test_index:inconsistent index:",idx,buf_state->first); } # ifdef BUF_EXTRA_FIELD_T /* need to call platform specific function */ if(idx>=MAX_BUFS){ int relidx; relidx = idx-MAX_BUFS; /*printf("\n%d:relidx=%d \n",armci_me,relidx);fflush(stdout);*/ TEST_SEND_BUF_FIELD(_armci_buf_state->smallbuf[relidx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op,&retval); } else { TEST_SEND_BUF_FIELD(_armci_buf_state->buf[idx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op,&retval); } # endif if(DEBUG_ ){ printf("%d:buf_test_index:%d op=%d first=%d count=%d called=%d ret=%d\n", armci_me,idx,buf_state->op,buf_state->first,buf_state->count, called,retval); fflush(stdout); } return(retval); } /** an addition to the below operation to allow for multiple outstanding operations per server node */ void _armci_buf_ensure_pend_outstanding_op_per_node(void *buf, int node) { int i; int index =_armci_buf_to_index(buf); int this = _armci_buf_state->table[index].first; int nfirst, nlast; void _armci_buf_release_index(int i); int buf_pend_count=0; int changeid=0; nfirst=armci_clus_info[node].master; nlast = nfirst+armci_clus_info[node].nslave-1; if(_armci_buf_state->table[index].to<0){ _armci_buf_state->table[index].to = 0-1e6-_armci_buf_state->table[index].to; changeid=1; } if((_armci_buf_state->table[index].to<(unsigned int) nfirst) || (_armci_buf_state->table[index].to>(unsigned int) nlast)) armci_die2("_armci_buf_ensure_pend_outstanding_op_per_node: bad to",node, (int)_armci_buf_state->table[index].to); buf_pend_count=0; for(i=0;itable +i; if((buf_state->to >= nfirst) && (buf_state->to<= (unsigned int) nlast)) if( (buf_state->first != (unsigned int) this) && (buf_state->first==(unsigned int) i) && buf_state->op){ buf_pend_count++; if(buf_pend_count == NUM_SERV_BUFS){ _armci_buf_complete_index(i,0); _armci_buf_release_index(i); break; } } } if(changeid)_armci_buf_state->table[index].to = 0-1e6-_armci_buf_state->table[index].to; } /*\ make sure that there are no other pending operations to that smp node * this operation is called from platforms specific routine that sends * request * we could have accomplished the same in armci_buf_get but as Vinod * is pointing out, it is better to delay completing outstanding * calls to overlap memcpy for the current buffer with communication \*/ void _armci_buf_ensure_one_outstanding_op_per_node(void *buf, int node) { int i; int index =_armci_buf_to_index(buf); int this = _armci_buf_state->table[index].first; int nfirst, nlast; void _armci_buf_release_index(int i); nfirst=armci_clus_info[node].master; nlast = nfirst+armci_clus_info[node].nslave-1; if((_armci_buf_state->table[index].to<(unsigned int) nfirst) || (_armci_buf_state->table[index].to>(unsigned int) nlast)) armci_die2("_armci_buf_ensure_one_outstanding_op_per_node: bad to",node, (int)_armci_buf_state->table[index].to); for(i=0;itable +i; if((buf_state->to >= nfirst) && (buf_state->to<= (unsigned int) nlast)) { if((buf_state->first != (unsigned int) this)&&(buf_state->first==(unsigned int) i) && buf_state->op) { _armci_buf_complete_index(i,0); _armci_buf_release_index(i); } } } } /*\ same as above but for process \*/ void _armci_buf_ensure_one_outstanding_op_per_proc(void *buf, int proc) { int i; int index = _armci_buf_to_index(buf); int this = _armci_buf_state->table[index].first; void _armci_buf_release_index(int i); if(_armci_buf_state->table[index].to !=(unsigned int) proc ) armci_die2("_armci_buf_ensure_one_outstanding_op_per_proc: bad to", proc, (int)_armci_buf_state->table[index].to); for(i=0;itable +i; if(buf_state->to == (unsigned int) proc) { if((buf_state->first != (unsigned int) this)&&(buf_state->first==(unsigned int) i) && buf_state->op) { _armci_buf_complete_index(i,0); _armci_buf_release_index(i); } } } } #define HISTORY__ #ifdef HISTORY typedef struct{ int size; int op; int count; int id; } history_t; history_t history[100]; int h=0; void print_history() { int i; fflush(stdout); printf("%d records\n",h); for(i=0; ibuf[history[i].id].buffer, history[i].count, history[i].op); fflush(stdout); } #endif /*\ call corresponding to GET_SEND_BUF \*/ char *_armci_buf_get_small(int size, int operation, int to) { int avail=_armci_buf_state->smavail,i; _buf_ackresp_t *ar; if(_armci_buf_state->table[avail].op || _armci_buf_state->table[avail].first || _armci_buf_state->smallbuf[avail-MAX_BUFS].id.ar.req.active) { for(i=MAX_BUFS;itable[i].op && !_armci_buf_state->table[i].first && !_armci_buf_state->smallbuf[i-MAX_BUFS].id.ar.req.active) break; } if(i<(MAX_SMALL_BUFS+MAX_BUFS))avail = i; else { _armci_buf_complete_index(avail,1); } } _armci_buf_state->table[avail].op = operation; _armci_buf_state->table[avail].to = to; _armci_buf_state->table[avail].count= 1; _armci_buf_state->table[avail].first = avail; _armci_buf_state->smallbuf[avail-MAX_BUFS].id.tag=0; _armci_buf_state->smallbuf[avail-MAX_BUFS].id.bufid= avail; _armci_buf_state->smallbuf[avail-MAX_BUFS].id.protocol=0; ar=&_armci_buf_state->smallbuf[avail-MAX_BUFS].id.ar; assert(ar->val==0);assert(ar->next==NULL);assert(ar->previous==NULL); # ifdef PORTALS assert(ar->req.active == 0); # endif ar->req.active = 1; if(_buf_ackresp_cur!=NULL) _buf_ackresp_cur->next=ar; if(_buf_ackresp_first==NULL) _buf_ackresp_first=ar; ar->previous=_buf_ackresp_cur; ar->next=NULL; _buf_ackresp_cur=ar; if(DEBUG_ || 0) { printf("%d:buf_get_sm1:size=%d max=%d got %d ptr=%p op=%d to=%d count=%d first=%d\n", armci_me,size,SMALL_BUF_LEN,avail, _armci_buf_state->smallbuf[avail-MAX_BUFS].buffer,operation,to, (int)_armci_buf_state->table[avail].count,(int)_armci_buf_state->table[avail].first); fflush(stdout); } # ifdef BUF_EXTRA_FIELD_T INIT_SEND_BUF(_armci_buf_state->smallbuf[avail-MAX_BUFS].field,_armci_buf_state->table[avail].snd,_armci_buf_state->table[avail].rcv); #endif _armci_buf_state->smavail = (avail+1-MAX_BUFS)%MAX_SMALL_BUFS + MAX_BUFS; if(DEBUG_ || 0) { printf("%d:buf_get_sm:size=%d max=%d got %d ptr=%p op=%d to=%d count=%d first=%d\n", armci_me,size,SMALL_BUF_LEN,avail, _armci_buf_state->smallbuf[avail-MAX_BUFS].buffer,operation,to, _armci_buf_state->table[avail].count,_armci_buf_state->table[avail].first); fflush(stdout); } return(_armci_buf_state->smallbuf[avail-MAX_BUFS].buffer); } /*\ call corresponding to GET_SEND_BUF \*/ static char *rmo_buffer = NULL; char *_armci_buf_get(int size, int operation, int to) { #ifndef PORTALS_USE_ARMCI_CLIENT_BUFFERS if(rmo_buffer) return rmo_buffer; rmo_buffer = (char *) valloc(MSG_BUFLEN); return rmo_buffer; #else int avail=_armci_buf_state->avail; int count=1, i; _buf_ackresp_t *ar; /*if small buffer, we go to another routine that gets smallbuf*/ if(size MSG_BUFLEN_SMALL) ){ double val = (double)size; /* use double due to a bug in gcc */ val /= MSG_BUFLEN_SMALL; count=(int)val; if(size%MSG_BUFLEN_SMALL) count++; assert(0); } /* start from 0 if there is not enough bufs available from here */ if((avail+count) > MAX_BUFS)avail = 0; /* avail should never point to buffer in a middle of a set of used bufs */ if(_armci_buf_state->table[avail].op && (_armci_buf_state->table[avail].first != (unsigned int) avail)){ sleep(1); printf("%d: inconsistent first. avail=%d count=%d first=%d size=%d\n", armci_me, avail, count, _armci_buf_state->table[avail].first, size); armci_die2("armci_buf_get: inconsistent first", avail, _armci_buf_state->table[avail].first); } /* we need complete "count" number of buffers */ for(i=0;itable[cur].op && _armci_buf_state->table[cur].first==(unsigned int) cur) || _armci_buf_state->buf[cur].id.ar.req.active) { _armci_buf_complete_index(cur,1); } } for(i=0; itable[avail+i].op = operation; _armci_buf_state->table[avail+i].to = to; _armci_buf_state->table[avail+i].count= count; _armci_buf_state->table[avail+i].first = avail; } _armci_buf_state->buf[avail].id.tag=0; _armci_buf_state->buf[avail].id.bufid=avail; _armci_buf_state->buf[avail].id.protocol=0; ar=&_armci_buf_state->buf[avail].id.ar; assert(ar->val==0);assert(ar->next==NULL);assert(ar->previous==NULL); assert(ar->req.active == 0); ar->req.active = 1; if(_buf_ackresp_cur!=NULL) _buf_ackresp_cur->next=ar; if(_buf_ackresp_first==NULL) _buf_ackresp_first=ar; ar->previous=_buf_ackresp_cur; ar->next=NULL; _buf_ackresp_cur = ar; # ifdef BUF_EXTRA_FIELD_T INIT_SEND_BUF(_armci_buf_state->buf[avail].field,_armci_buf_state->table[avail].snd,_armci_buf_state->table[avail].rcv); #endif #ifdef HISTORY history[h].size=size; history[h].op=operation; history[h].count=count; history[h].id = avail; h++; #endif if(DEBUG_ || 0) { printf("%d:buf_get:size=%d max=%d got %d ptr=%p count=%d op=%d to=%d\n", armci_me,size,MSG_BUFLEN_SMALL,avail, _armci_buf_state->buf[avail].buffer, count,operation,to); fflush(stdout); } /* select candidate buffer for next allocation request */ _armci_buf_state->avail = avail+count; _armci_buf_state->avail %= MAX_BUFS; return(_armci_buf_state->buf[avail].buffer); #endif } void _armci_buf_release_index(int index) { int count; buf_state_t *buf_state = _armci_buf_state->table +index; char *_armci_buf_ptr_from_id(int id); if((index >= MAX_BUFS+MAX_SMALL_BUFS)|| (index<0)) armci_die2("armci_buf_release: bad index:",index,MAX_BUFS); count = _armci_buf_state->table[index].count; if(DEBUG_ || 0) { printf("%d:_armci_buf_release_index %d ptr=%p count=%d op=%d smavail=%d\n", armci_me,index,_armci_buf_ptr_from_id(index),count, _armci_buf_state->table[index].op,_armci_buf_state->smavail); fflush(stdout); } /* clear table slots for all the buffers in the set for this request */ for(; count; count--, buf_state++) *(int*)buf_state = 0; if(index >= MAX_BUFS){ _armci_buf_state->smallbuf[index-MAX_BUFS].id.tag=0; //_armci_buf_state->smavail = index; } else{ _armci_buf_state->buf[index].id.tag=0; // _armci_buf_state->avail = index; } /* the current buffer is prime candidate to satisfy next buffer request */ } /*\ release buffer when it becomes free \*/ void _armci_buf_release(void *buf) { #ifdef PORTALS_USE_ARMCI_CLIENT_BUFFERS _armci_buf_release_index(_armci_buf_to_index(buf)); #endif } /*\ return pointer to buffer number id \*/ char *_armci_buf_ptr_from_id(int id) { if(id <0 || id >=(MAX_BUFS+MAX_SMALL_BUFS)) armci_die2("armci_buf_ptr_from_id: bad id",id,MAX_BUFS); if(id >=MAX_BUFS)return(_armci_buf_state->smallbuf[id-MAX_BUFS].buffer); return(_armci_buf_state->buf[id].buffer); } /*\function called from PARMCI_Wait to wait for non-blocking ops \*/ void _armci_buf_complete_nb_request(int bufid,unsigned int tag, int *retcode) { int i=0; #if 0 printf("\n%d:wait called with bufid=%d tag=%d \n",armci_me,bufid,tag); fflush(stdout); #endif if(bufid == NB_NONE) *retcode=0; else if(bufid == NB_MULTI) { for(i=0;ibuf[i].id.tag) _armci_buf_complete_index(i,1); } for(i=0;ismallbuf[i].id.tag) _armci_buf_complete_index(i+MAX_BUFS,1); } *retcode=0; } else { if(bufidbuf[bufid].id.tag) _armci_buf_complete_index(bufid,1); } else{ if(tag && tag==_armci_buf_state->smallbuf[bufid-MAX_BUFS].id.tag) _armci_buf_complete_index(bufid,1); } *retcode=0; } } /*\function called from PARMCI_Test to test completion of non-blocking ops \*/ void _armci_buf_test_nb_request(int bufid,unsigned int tag, int *retcode) { int i; if(bufid == NB_NONE) *retcode=0; else if(bufid == NB_MULTI) { for(i=0;ibuf[i].id.tag){ if(_armci_buf_test_index(i,1)){ *retcode=1; break; } } } for(i=0;ismallbuf[i].id.tag) if(_armci_buf_test_index(i+MAX_BUFS,1)){ *retcode=1; break; } } } else { if(bufidbuf[bufid].id.tag) *retcode = _armci_buf_test_index(bufid,1); } else{ if(tag && tag==_armci_buf_state->smallbuf[bufid-MAX_BUFS].id.tag) *retcode = _armci_buf_test_index(bufid,1); } } } /*\function to set the buffer tag and the protocol \*/ void _armci_buf_set_tag(void *bufptr,unsigned int tag,short int protocol) { int index = _armci_buf_to_index(bufptr); /*_armci_buf_state->table[index].async=1;*/ if(indexbuf[index].id.tag=tag; _armci_buf_state->buf[index].id.protocol=protocol; } else{ _armci_buf_state->smallbuf[index-MAX_BUFS].id.tag=tag; _armci_buf_state->smallbuf[index-MAX_BUFS].id.protocol=protocol; } } int _armci_buf_get_tag(void *bufptr) { int index = _armci_buf_to_index(bufptr); if(indexbuf[index].id.tag); else return(_armci_buf_state->smallbuf[index-MAX_BUFS].id.tag); } /*\function to return bufinfo, given buf ptr \*/ BUF_INFO_T *_armci_buf_to_bufinfo(void *buf){ if(buf > (void *)_armci_buffers && buf < (void *)(_armci_buffers+MAX_BUFS)){ return(&((BUF_TO_EBUF(buf))->id)); } else if(buf > (void *)_armci_smbuffers && buf < (void *)(_armci_smbuffers+MAX_SMALL_BUFS)){ return(&((BUF_TO_SMEBUF(buf))->id)); } else { armci_die("armci_buf_to_index: bad pointer",0); return(0); } } /*\function to clear all buffers \*/ void _armci_buf_clear_all() { int i; for(i=0;itable[i].op || _armci_buf_state->table[i].first) CLEAR_SEND_BUF_FIELD(_armci_buf_state->buf[i].field,_armci_buf_state->table[i].snd,_armci_buf_state->table[i].rcv,_armci_buf_state->table[i].to,_armci_buf_state->table[i].op); #endif } for(i=MAX_BUFS;itable[i].op || _armci_buf_state->table[i].first) CLEAR_SEND_BUF_FIELD(_armci_buf_state->smallbuf[i-MAX_BUFS].field,_armci_buf_state->table[i].snd,_armci_buf_state->table[i].rcv,_armci_buf_state->table[i].to,_armci_buf_state->table[i].op); #endif } } /* function to return bufinfo, given buf tag */ BUF_INFO_T *_armci_tag_to_bufinfo(msg_tag_t tag) { int idx; for (idx=0; idx < MAX_BUFS; idx++) if (EQ_TAGS(_armci_buffers[idx].id.tag, tag)) break; if (idx == MAX_BUFS) {/* not found is regular buffers */ for (idx = 0; idx < MAX_SMALL_BUFS; idx++) if (EQ_TAGS(_armci_smbuffers[idx].id.tag, tag)) break; if (idx == MAX_SMALL_BUFS) /* not found at all */ armci_die("_armci_tag_to_bufinfo: bad tag",0); return &(_armci_smbuffers[idx].id); } else return &(_armci_buffers[idx].id); } /* inline primitives for buffer state management */ INLINE char *_armci_buf_get_clear_busy(int size, int operation, int to) { char *buf = _armci_buf_get(size, operation, to); _armci_buf_set_busy(buf, 0); return buf; } INLINE void _armci_buf_set_busy(void *buf, int state) { _armci_buf_state->table[_armci_buf_to_index(buf)].busy = state; } INLINE void _armci_buf_set_busy_idx(int idx, int state) { _armci_buf_state->table[idx].busy = state; } #if 0 INLINE int _armci_buf_cmpld(void *buf) { return _armci_buf_state->table[_armci_buf_to_index(buf)].cmpl; } #else INLINE int _armci_buf_cmpld(int bufid) { return _armci_buf_state->table[bufid].cmpl; } #endif INLINE void _armci_buf_set_cmpld(void *buf, int state) { _armci_buf_state->table[_armci_buf_to_index(buf)].cmpl = state; } INLINE void _armci_buf_set_cmpld_idx(int idx, int state) { _armci_buf_state->table[idx].cmpl = state; } ga-5-3/armci/src-portals/semaphores.c0000640005473000001440000000401711701667223016461 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: semaphores.c,v 1.12 2005-03-10 19:11:23 vinodtipparaju Exp $ */ #include "semaphores.h" #include #include int num_sem_alloc=0; void perror(); #ifdef SUN int fprintf(); void fflush(); int semget(),semctl(); #endif extern void armci_die(char*, int); struct sembuf sops; int semaphoreID; int SemGet(num_sem) int num_sem; { semaphoreID = semget(IPC_PRIVATE,num_sem, IPC_CREAT | 0600); if(semaphoreID<0){ fprintf(stderr," Semaphore Allocation Failed \nsuggestions to fix the problem: \n"); fprintf(stderr," 1. run ipcs and ipcrm -s commands to clean any semaphore ids\n"); fprintf(stderr," 2. verify if constant SEMMSL defined in file semaphore.h is set correctly for your system\n"); fprintf(stderr," 3. recompile semaphore.c\n"); sleep(1); perror("Error message from failed semget:"); armci_die(" exiting ...", num_sem); } num_sem_alloc = num_sem; return(semaphoreID); } void SemInit(id,value) int id,value; { int i, semid, num_sem; union semun semctl_arg; semctl_arg.val = value; if(id == ALL_SEMS){ semid = 0; num_sem = num_sem_alloc;} else { semid = id; num_sem = 1;} for(i=0; i< num_sem; i++){ if( semctl(semaphoreID, semid, SETVAL,semctl_arg )<0){ perror((char*)0); armci_die("SemInit error",id); } semid++; } } /* release semaphore(s) */ void SemDel() { union semun dummy; /* this is only to avoid compiler whinning about the unitialized variable*/ dummy.val=0; (void) semctl(semaphoreID,0,IPC_RMID,dummy); } void Sem_CreateInitLocks(int num, lockset_t *id) { *id = SemGet(num); SemInit(ALL_SEMS,1); } void Sem_InitLocks(int num, lockset_t id) { semaphoreID = id; num_sem_alloc = num; } void Sem_DeleteLocks(lockset_t id) { union semun dummy; /* this is only to avoid compiler whinning about the unitialized variable*/ dummy.val=0; (void) semctl(id,0,IPC_RMID,dummy); } ga-5-3/armci/src-portals/armci_portals.c0000640005473000001440000021223511622314656017156 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /*$id:$*/ /*#define _GNU_SOURCE*/ #include #include #include "armcip.h" #include "message.h" #include #include #include #include #include #define DEBUG_COMM 0 #define DEBUG_INIT 0 #define DEBUG_SERV 0 #define PUT_LOCAL_ONLY_COMPLETION__ typedef struct arminfo{ caddr_t ptr[MAX_DS]; size_t size[MAX_DS]; long serv_offs[MAX_DS]; int cur_ds; }rm_info_t; static rm_info_t *all_meminfo; static int client_md_count=0,serv_md_count=0; typedef struct arns{ long data; long data1; struct arns *next; } arnode; #ifdef ARMCI_CHECK_STATE arnode * arlist_add(arnode **p, long i,long j) { arnode *n = (arnode *)malloc(sizeof(arnode)); if(n == NULL) return NULL; n->next = *p; *p = n; n->data = i; n->data1 = j; return *p; } void arlist_remove(arnode **p) { if(*p != NULL){ arnode *n = *p; *p = (*p)->next; free(n); } } arnode **arlist_search(arnode **n, long i) { while (*n != NULL){ if ((*n)->data == i){ return n; } n = &(*n)->next; } return NULL; } void arlist_print(arnode *n) { if (n == NULL){ /*printf("arlist is empty\n");*/ } while (n != NULL){ printf("%d:%d %d next=%d\n", armci_me,n->data,n->data1,(n->next==NULL)?0:1); n = n->next; } } #endif extern void armci_util_wait_int(volatile int *, int , int ); extern void armci_util_wait_long(volatile long *, long, int ); int _armci_portals_server_ready=0; int _armci_portals_client_ready=0; int _armci_server_mutex_ready=0; void *_armci_server_mutex_ptr = NULL; #ifdef ARMCI_REGISTER_SHMEM typedef struct { void *base_ptr; void *serv_ptr; size_t size; int islocal; int valid; }aptl_reginfo_t; typedef struct { aptl_reginfo_t reginfo[MAX_MEM_REGIONS]; int reg_count; } rem_meminfo_t; #endif typedef struct serv_buf_t{ ptl_handle_md_t md_h; ptl_handle_me_t me_h; ptl_md_t md; char *buf; char *bufend; } serv_buf_t; char **client_buf_ptrs; static int armci_server_terminating=0; serv_buf_t *serv_bufs; long servackval=ARMCI_STAMP,*serv_ack_ptr=&servackval; ptl_handle_md_t serv_ack_md_h,serv_response_md_h; static armci_portals_proc_t _armci_portals_proc_struct; static armci_portals_serv_t _armci_portals_serv_struct; static armci_portals_proc_t *portals = &_armci_portals_proc_struct; static armci_portals_serv_t *serv_portals = &_armci_portals_serv_struct; /*static */comp_desc _compdesc_array[NUM_COMP_DSCR]; static arnode *arn = NULL; #ifdef ARMCI_REGISTER_SHMEM static rem_meminfo_t *_rem_meminfo; static aptl_reginfo_t *_tmp_rem_reginfo; #define IN_REGION(_ptr__,_reg__) ((_reg__.valid) && (_ptr__)>=(_reg__.serv_ptr) \ && (_ptr__) <= ( (char *)(_reg__.serv_ptr)+_reg__.size)) #endif static int ptl_initialized = 0; extern pid_t server_pid; ptl_ni_limits_t armci_ptl_nilimits; ptl_ni_limits_t armci_ptl_Snilimits; void armci_portals_init_ptl() { int rc; int npes,i; ARMCI_PR_DBG("enter",0); /*initialize data structures*/ portals->ptl = ARMCI_PORTALS_PTL_NUMBER; /* our own ptl number */ rc=PtlNIInit(IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK,PTL_IFACE_SS), PTL_PID_ANY, NULL, &armci_ptl_nilimits, &(portals->ni_h)); switch(rc) { case PTL_OK: /*printf("\n%d:ok for nii\n",armci_me);*/ break; case PTL_IFACE_DUP: /*printf("\n%d:dup for nii\n",armci_me);*/ break; default: printf( "PtlNIInit() failed %d error=%s\n",rc,ARMCI_NET_ERRTOSTR(rc) ); exit(1); } if((rc=PtlGetId(portals->ni_h,&portals->rank)) !=PTL_OK) { printf("%s: PtlGetId failed: %d(%d)\n",FUNCTION_NAME, rc, server_pid); exit(1); } ARMCI_PR_DBG("exit",0); } static inline void init_serv_buf(serv_buf_t *tmp) { int rc; ptl_match_bits_t ignbits = 0xFFFFFFFFF00000FF; ptl_match_bits_t mbits; ptl_process_id_t match_id; ptl_md_t *md_ptr,md; ARMCI_PR_DBG("enter",0); tmp->md.user_ptr=tmp; tmp->md.start=tmp->buf; tmp->md.length=armci_nproc*NUM_SERV_BUFS*VBUF_DLEN; tmp->md.eq_handle=portals->Seq_h; tmp->md.max_size=0; tmp->md.threshold=PTL_MD_THRESH_INF; tmp->md.options=PTL_MD_OP_GET | PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; { match_id.nid = PTL_NID_ANY; match_id.pid = PTL_PID_ANY; mbits = 16<<8; rc = PtlMEAttach(portals->Sni_h,portals->ptl,match_id,mbits,ignbits, PTL_RETAIN,PTL_INS_AFTER,&(tmp->me_h)); if (rc != PTL_OK) { printf("(%d):PtlMEAttach: %s\n", portals->Srank,ARMCI_NET_ERRTOSTR(rc)); armci_die("portals attach error isb",rc); } tmp->md.options=PTL_MD_OP_GET | PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE | PTL_MD_MANAGE_REMOTE; rc = PtlMDAttach((tmp->me_h),tmp->md,PTL_RETAIN,&(tmp->md_h)); if (rc != PTL_OK) { printf("%d:PtlMDAttach: %s %d\n", portals->Srank, ARMCI_NET_ERRTOSTR(rc),(serv_md_count+client_md_count) ); exit(1); } serv_md_count++; } /*set up for sending acks */ md_ptr = &(md); md_ptr->start = serv_ack_ptr; md_ptr->length = sizeof(long); md_ptr->threshold = PTL_MD_THRESH_INF; md_ptr->options = PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; md_ptr->user_ptr = NULL; md_ptr->max_size = sizeof(long); md_ptr->eq_handle = portals->Seq_h; rc = PtlMDBind(portals->Sni_h,md,PTL_RETAIN,&serv_ack_md_h); if (rc != PTL_OK){ fprintf(stderr, "%d:PtlMDBindxn: %s %d\n", portals->Srank.nid, ARMCI_NET_ERRTOSTR(rc),(serv_md_count+client_md_count)); armci_die("ptlmdbind failed",0); } serv_md_count++; /*set up for sending response */ md_ptr = &(md); md_ptr->start = tmp->buf; md_ptr->length = tmp->md.length; md_ptr->threshold = PTL_MD_THRESH_INF; md_ptr->options = PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; md_ptr->user_ptr = NULL; md_ptr->max_size = tmp->md.length; md_ptr->eq_handle = portals->Seq_h; rc = PtlMDBind(portals->Sni_h, md, PTL_RETAIN, &serv_response_md_h); if (rc != PTL_OK){ fprintf(stderr, "%d:PtlMDBindxn: %s %d\n", portals->Srank.nid, ARMCI_NET_ERRTOSTR(rc),(serv_md_count+client_md_count)); armci_die("ptlmdbind failed",0); } serv_md_count++; ARMCI_PR_DBG("exit",0); } void armci_portals_wait_for_client() { int rc; int *procidinfo; extern armci_clus_t *armci_clus_info; ptl_process_id_t *tmp; ARMCI_PR_SDBG("enter",0); //printf(" "); armci_util_wait_int(&_armci_portals_client_ready,1,1000); if((armci_me)!=armci_master){ exit(0); } else{ if(DEBUG_SERV){ printf("\n%d:chosen one nid,pid=%d,%d\n",armci_me,portals->Srank.nid,portals->Srank.pid); } } ARMCI_PR_SDBG("exit",0); } void armci_portals_prepare_server() { int rc,i,j; ARMCI_PR_SDBG("enter",0); serv_bufs=(serv_buf_t *)malloc(sizeof(serv_buf_t)); bzero(serv_bufs,sizeof(serv_buf_t)); assert(serv_bufs); serv_bufs->buf=(char *)malloc((NUM_SERV_BUFS*armci_nproc*VBUF_DLEN)); bzero(serv_bufs->buf,(NUM_SERV_BUFS*armci_nproc*VBUF_DLEN)); assert(serv_bufs->buf); serv_bufs->bufend=(char *)serv_bufs->buf+(NUM_SERV_BUFS*armci_nproc*VBUF_DLEN); rc = PtlEQAlloc(portals->Sni_h,4*(NUM_SERV_BUFS*armci_nproc),NULL, &(portals->Seq_h)); if (rc != PTL_OK) { printf("(%d):Ptleaalloc() failed: %s %d (%d)\n",portals->Srank, ARMCI_NET_ERRTOSTR(rc),(NUM_SERV_BUFS*armci_nproc),rc); armci_die("EQ Alloc failed",rc); } init_serv_buf(serv_bufs); _armci_portals_server_ready=1; ARMCI_PR_SDBG("exit",0); } void *armci_server_code(void *data) { int rc,num_interface; ARMCI_PR_SDBG("enter",0); if(DEBUG_INIT) printf("%d: in server after creating thread.\n",armci_me); rc = PtlInit(&num_interface); if (rc != PTL_OK) { printf("PtlInit() failed %d %s\n",rc, ARMCI_NET_ERRTOSTR(rc) ); exit(1); } rc=PtlNIInit(IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK,PTL_IFACE_SS), PTL_PID_ANY, NULL, &armci_ptl_Snilimits, &(portals->Sni_h)); switch(rc) { case PTL_OK: //printf("\n(%d):ok for serv nii\n",armci_me); break; case PTL_IFACE_DUP: //printf("\n(%d):dup for serv nii\n",armci_me); break; default: printf( "PtlNIInit() serv failed %d error=%s\n",rc,ARMCI_NET_ERRTOSTR(rc) ); exit(1); } if((rc=PtlGetId(portals->Sni_h,&portals->Srank)) !=PTL_OK) { printf("%s: PtlGetId failed: %d(%d)\n",FUNCTION_NAME, rc, server_pid); exit(1); } /*printf("\n(%d):server nid=%d pid=%d\n",armci_me,portals->Srank.nid,portals->Srank.pid);*/ armci_portals_wait_for_client(); armci_portals_prepare_server(); if(DEBUG_INIT) { printf("(%d): connected to all computing processes\n",armci_me); fflush(stdout); } armci_call_data_server(); armci_transport_cleanup(); ARMCI_PR_SDBG("exit",0); return(NULL); } void armci_client_connect_to_servers() { int rc; ptl_size_t offset_local = 0, offset_remote=0; ptl_md_t md_local; ptl_handle_md_t md_hdl_local; ptl_process_id_t *tmp; int *procidinfo; int c_info; int *flag,shmid; void *addr; char *buf; extern int _armci_server_started; ARMCI_PR_DBG("enter",0); _armci_portals_client_ready=1; if(armci_me==armci_master){ armci_util_wait_int(&_armci_portals_server_ready,1,1000); } armci_msg_barrier(); _armci_server_started=1; if(armci_me==armci_master){ portals->servid_map[armci_clus_me].pid=portals->Srank.pid; portals->servid_map[armci_clus_me].nid=portals->Srank.nid; } armci_msg_gop_scope(SCOPE_ALL,portals->servid_map,(sizeof(ptl_process_id_t)*armci_nclus)/sizeof(int),"+",ARMCI_INT); ARMCI_PR_DBG("exit",0); } static int check_meminfo(void *ptr, long size, int proc) { int i; for(i=0;i=0) && (right>=size)) return(i+1); } return 0; } static void add_meminfo(void *ptr, size_t size, int proc) { if(check_meminfo(ptr,(long)size,proc)!=0)armci_die("repeat add request for dss",proc); all_meminfo[proc].cur_ds++; all_meminfo[proc].ptr[all_meminfo[proc].cur_ds]=ptr; all_meminfo[proc].size[all_meminfo[proc].cur_ds]=size; #ifdef DEBUG_MEM printf("\n%d:%s:adding %p %ld %d at %d",armci_me,FUNCTION_NAME,ptr,size,proc,all_meminfo[proc].cur_ds); #endif } typedef struct{ void *ptr; size_t size; size_t serv_offs; } meminfo_t; void armci_exchange_meminfo(void *ptr, size_t size,size_t off) { int i; meminfo_t *exng; exng = (meminfo_t*)malloc(armci_nproc*sizeof(meminfo_t)); assert(exng != NULL); bzero(exng,sizeof(meminfo_t)*armci_nproc); exng[armci_me].ptr=ptr; exng[armci_me].size=size; exng[armci_me].serv_offs = off; armci_msg_gop_scope(SCOPE_ALL,exng,(sizeof(meminfo_t)*armci_nproc)/sizeof(int),"+",ARMCI_INT); for(i=0;ibrval[portals->cur_ds]){ ptl_md_t *md_ptr; ptl_match_bits_t ignbits = 0xFFFFFFFFFFFFFF00; ptl_process_id_t match_id; int rc,cds=++portals->cur_ds; if(cds>=MAX_DS)armci_die("increase MAX_CDS",cds); portals->dsbase[cds]=portals->brval[cds-1]; //portals->dsbase[cds]=sbrk(0); ptr = portals->brval[cds] = br_val; size = portals->dssizes[cds]=((caddr_t)portals->brval[cds] - portals->dsbase[cds]); portals->serv_offs[cds] = serv_offset; printf("\n%d:%s:base=%p brval=%p dslen=%ld %p end=%p",armci_me,FUNCTION_NAME,portals->dsbase[cds],br_val, portals->dssizes[cds],portals->brval[cds],get_heap_bottom_addr()); md_ptr = &(portals->heap_md[cds]); md_ptr->start = portals->dsbase[cds]; md_ptr->length = portals->dssizes[cds]; md_ptr->threshold = PTL_MD_THRESH_INF; md_ptr->options = PTL_MD_OP_PUT | PTL_MD_OP_GET | PTL_MD_MANAGE_REMOTE; md_ptr->user_ptr = NULL; md_ptr->max_size = 0; md_ptr->eq_handle = PTL_EQ_NONE; portals->heap_mb[cds]=cds+1; match_id.nid = PTL_NID_ANY; match_id.pid = PTL_PID_ANY; rc = PtlMEAttach(portals->ni_h,portals->ptl,match_id, portals->heap_mb[cds], ignbits, PTL_RETAIN,PTL_INS_AFTER, &(portals->heap_me_h[cds])); if (rc != PTL_OK) { printf("%d:PtlMEAttach: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("portals attach error reg",rc); } rc = PtlMDAttach((portals->heap_me_h[cds]), *md_ptr,PTL_RETAIN, &(portals->heap_md_h[cds])); if (rc != PTL_OK) { printf("%d:PtlMDAttach: %s %d\n", portals->rank, ARMCI_NET_ERRTOSTR(rc),(client_md_count+serv_md_count)); armci_die("portals attach error reg",rc); } } else{ #ifdef DEBUG_MEM_ extern caddr_t _end; printf("\n%d:%s:curds=%d brvalin=%p curbrval=%p _end=%p &_end=%p",armci_me,FUNCTION_NAME,portals->cur_ds,portals->brval[portals->cur_ds],br_val,_end,&_end); #endif } armci_exchange_meminfo(ptr,size,serv_offset); } #ifndef PMI_SUCCESS #define PMI_SUCCESS 0 #endif static int *_client_servbuf_count; int armci_init_portals(caddr_t atbeginbrval) { #ifndef OLD_PORTALS_CODE int i,rc,np,me; ptl_process_id_t id; ptl_process_id_t clone_id; MPI_Comm_size(ARMCI_COMM_WORLD,&np); MPI_Comm_rank(ARMCI_COMM_WORLD,&me); if(armci_me != me) { printf("[mpi %d]: armci_me=%d ... this is a problem\n",me,armci_me); armci_die("mpi rank mismatch",911); } portals_cp_init(); MPI_Barrier(ARMCI_COMM_WORLD); portals_ds_ready = 0; if(armci_me == armci_master) { portalsCloneDataServer( portals_ds_thread ); portalsSpinLockOnInt( &portals_ds_ready,1,10000 ); } MPI_Barrier(ARMCI_COMM_WORLD); i=0; if((rc=PMI_Initialized(&i))!=PMI_SUCCESS){ printf("PMI_Initialized failed\n"); } if(i==0){ if((rc==PMI_Init(&i))!=PMI_SUCCESS){ printf("MPI_Init failed (npes=%d)\n", armci_nproc); } } if((rc=PMI_CNOS_Get_nidpid_map(&portals_id_map))!=PMI_SUCCESS){ printf("Getting proc map failed (npes=%d)\n", armci_nproc); } /* create intra-node communicator */ MPI_Barrier(ARMCI_COMM_WORLD); portals_cp_init_throttle(armci_nclus); MPI_Barrier(ARMCI_COMM_WORLD); /* stuff from old code ... */ bzero(portals,sizeof(armci_portals_proc_t)); // note: i got rid of this rem_meminfo stuff with the gemini version // see that code to see how to remove it here # ifdef ARMCI_REGISTER_SHMEM _rem_meminfo = (rem_meminfo_t *)calloc(armci_nproc,sizeof(rem_meminfo_t)); _tmp_rem_reginfo = (aptl_reginfo_t *)malloc(sizeof(aptl_reginfo_t)*armci_nproc); if( _rem_meminfo==NULL || _tmp_rem_reginfo ==NULL) armci_die("malloc failed in init_portals",0); //if(armci_me == 0) { // printf("sizeof(rem_meminfo_t)=%ld\n",sizeof(rem_meminfo_t)); //} # endif # ifdef CRAY_USE_ARMCI_CLIENT_BUFFERS client_buf_ptrs = (char **) calloc(armci_nproc,sizeof(char *)); assert(client_buf_ptrs); armci_msg_barrier(); _armci_buf_init(); # endif /* end old stuff */ return 0; #else int num_interface; int rc; int npes,i; ARMCI_PR_DBG("enter",0); bzero(portals,sizeof(armci_portals_proc_t)); _rem_meminfo = (rem_meminfo_t *)calloc(armci_nproc,sizeof(rem_meminfo_t)); _tmp_rem_reginfo = (aptl_reginfo_t *)malloc(sizeof(aptl_reginfo_t)*armci_nproc); if( _rem_meminfo==NULL || _tmp_rem_reginfo ==NULL) armci_die("malloc failed in init_portals",0); portals->servid_map=(ptl_process_id_t *)calloc(armci_nclus,sizeof(ptl_process_id_t)); if(portals->servid_map==NULL)armci_die("calloc of servidmap failed",0); rc = PtlInit(&num_interface); if (rc != PTL_OK) { printf("PtlInit() failed %d %s\n",rc, ARMCI_NET_ERRTOSTR(rc) ); exit(1); } armci_portals_init_ptl(); #if 1 i=0; if((rc=PMI_Initialized(&i))!=PMI_SUCCESS){ printf("PMI_Initialized failed\n"); } if(i==0){ if((rc==PMI_Init(&i))!=PMI_SUCCESS){ printf("MPI_Init failed (npes=%d)\n", armci_nproc); } } if((rc=PMI_CNOS_Get_nidpid_map(&portals->procid_map))!=PMI_SUCCESS){ printf("Getting proc map failed (npes=%d)\n", armci_nproc); } //printf(" "); # else portals->procid_map = (ptl_process_id_t *) calloc(armci_nproc,sizeof(ptl_process_id_t)); portals->procid_map[armci_me]=portals->rank; armci_msg_gop_scope(SCOPE_ALL,portals->procid_map,(sizeof(ptl_process_id_t)*armci_nproc)/sizeof(int),"+",ARMCI_INT); //printf(" "); #endif client_buf_ptrs = (char **) calloc(armci_nproc,sizeof(char *)); assert(client_buf_ptrs); armci_msg_barrier(); if(armci_me==armci_master)armci_create_server_process( armci_server_code ); rc = PtlEQAlloc(portals->ni_h,16*NUM_COMP_DSCR,NULL, &(portals->eq_h)); if (rc != PTL_OK) { printf("%d:Ptleqalloc() failed: %s (%d)\n", armci_me, ARMCI_NET_ERRTOSTR(rc) , rc); armci_die("EQ Alloc failed",rc); } /*printf("\n%d:client nid=%d pid=%d\n",armci_me,portals->rank.nid,portals->rank.pid);*/ _armci_buf_init(); for(i=0;ieq_h; _compdesc_array[i].mem_dsc.max_size=0; /*_compdesc_array[i].mem_dsc.threshold=PTL_MD_THRESH_INF;*/ _compdesc_array[i].mem_dsc.threshold=2; _compdesc_array[i].mem_dsc.options=PTL_MD_OP_GET | PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; } ptl_initialized = 1; portals->free_comp_desc_index=0; /*for(i=0;iprocid_map[i].nid,portals->procid_map[i].pid);*/ _client_servbuf_count = calloc(armci_nclus,sizeof(int)); armci_msg_barrier(); armci_client_connect_to_servers(); armci_msg_barrier(); if(DEBUG_COMM){ cpu_set_t mycpuid,new_mask; char cid[8],*cidptr; int rrr; extern char * cpuset_to_cstr(cpu_set_t *mask, char *str); rrr=sched_getaffinity(0, sizeof(mycpuid), &mycpuid); if(rrr)perror("sched_getaffinity"); cidptr = cpuset_to_cstr(&mycpuid,cid); printf("%d:my affinity is to %s\n",armci_me,cid); } #ifdef NEW_MALLOC /*post entire heap wildcard for direct communication*/ { ptl_md_t *md_ptr; ptl_match_bits_t ignbits = 0xFFFFFFFFFFFFFF00; ptl_process_id_t match_id; portals->cur_ds = 0; portals->dsbase[0]=get_heap_bottom_addr(); //portals->brval[0] = sbrk(0); portals->brval[0] = atbeginbrval; portals->dssizes[0]=((caddr_t)portals->brval[0] - portals->dsbase[0]); printf("\n%d:base=%p dslen=%ld %p",armci_me,portals->dsbase[0], portals->dssizes[0],portals->brval[0]); md_ptr = &(portals->heap_md[0]); md_ptr->start = portals->dsbase[0]; md_ptr->length = portals->dssizes[0]; md_ptr->threshold = PTL_MD_THRESH_INF; md_ptr->options = PTL_MD_OP_PUT | PTL_MD_OP_GET | PTL_MD_MANAGE_REMOTE; md_ptr->user_ptr = NULL; md_ptr->max_size = 0; md_ptr->eq_handle = PTL_EQ_NONE; portals->heap_mb[0]=1; match_id.nid = PTL_NID_ANY; match_id.pid = PTL_PID_ANY; rc = PtlMEAttach(portals->ni_h,portals->ptl,match_id, portals->heap_mb[0], ignbits, PTL_RETAIN,PTL_INS_AFTER, &(portals->heap_me_h[0])); if (rc != PTL_OK) { printf("%d:PtlMEAttach: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("portals attach error reg",rc); } rc = PtlMDAttach((portals->heap_me_h[0]), *md_ptr,PTL_RETAIN, &(portals->heap_md_h[0])); if (rc != PTL_OK) { printf("%d:PtlMDAttach: %s %d\n", portals->rank, ARMCI_NET_ERRTOSTR(rc),(client_md_count+serv_md_count)); armci_die("portals attach error reg",rc); } all_meminfo = (rm_info_t *)malloc(sizeof(rm_info_t)*armci_nproc); all_meminfo[armci_me].cur_ds = -1; armci_exchange_meminfo(portals->dsbase[0],portals->dssizes[0],0); } #endif ARMCI_PR_DBG("exit",0); return 0; #endif } void armci_fini_portals() { ARMCI_PR_DBG("enter",0); if(DEBUG_INIT){ printf("ENTERING ARMCI_FINI_PORTALS\n");fflush(stdout); } #ifdef ARMCI_CHECK_STATE arlist_print(arn); #endif PtlNIFini(portals->ni_h); /*PtlFini();*/ if(DEBUG_INIT){ printf("LEAVING ARMCI_FINI_PORTALS\n");fflush(stdout); } ARMCI_PR_DBG("exit",0); } void armci_pin_contig1(void *start,size_t bytes) { } #ifdef ARMCI_REGISTER_SHMEM #ifndef NEW_MALLOC void armci_register_req(void *start,int bytes, int ID) { int rc; ptl_md_t *md_ptr; ptl_match_bits_t ignbits = 0xFFFFFFFFFFFFFF00; ptl_process_id_t match_id; ARMCI_PR_DBG("enter",serv_portals->reg_count); #ifdef DEBUG_MEM printf("\n(%d):armci_register_req start=%p bytes=%d\n", armci_me,start,bytes);fflush(stdout); #endif md_ptr = &(serv_portals->meminfo[serv_portals->reg_count].md); md_ptr->start = start; md_ptr->length = bytes; md_ptr->threshold = PTL_MD_THRESH_INF; md_ptr->options = PTL_MD_OP_PUT | PTL_MD_OP_GET | PTL_MD_MANAGE_REMOTE; md_ptr->user_ptr = NULL; md_ptr->max_size = 0; md_ptr->eq_handle = PTL_EQ_NONE; serv_portals->meminfo[serv_portals->reg_count].mb=serv_portals->reg_count+1; match_id.nid = PTL_NID_ANY; match_id.pid = PTL_PID_ANY; rc = PtlMEAttach(portals->ni_h,portals->ptl,match_id, serv_portals->meminfo[serv_portals->reg_count].mb, ignbits, PTL_RETAIN,PTL_INS_AFTER, &(serv_portals->meminfo[serv_portals->reg_count].me_h)); if (rc != PTL_OK) { printf("%d:PtlMEAttach: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("portals attach error reg",rc); } rc = PtlMDAttach((serv_portals->meminfo[serv_portals->reg_count].me_h), *md_ptr,PTL_RETAIN, &serv_portals->meminfo[serv_portals->reg_count].md_h); if (rc != PTL_OK) { printf("%d:PtlMDAttach: %s %d\n", portals->rank, ARMCI_NET_ERRTOSTR(rc),(client_md_count+serv_md_count)); armci_die("portals attach error reg",rc); } client_md_count++; serv_portals->reg_count++; ARMCI_PR_DBG("exit",serv_portals->reg_count); } #endif #endif int armci_must_remotecomplete=1; extern _buf_ackresp_t *_buf_ackresp_first,*_buf_ackresp_cur; int x_net_wait_ackresp(_buf_ackresp_t *ar) { int rc; ptl_event_t ev_t; ptl_event_t *ev=&ev_t; comp_desc *temp_comp = NULL; int loop=1; int temp_proc; ARMCI_PR_DBG("enter",0); while(ar->val){ ev->type=0; if((rc = PtlEQWait(portals->eq_h, ev)) != PTL_OK){ printf("%d:PtlEQWait(): %d %s\n", portals->rank,rc, ARMCI_NET_ERRTOSTR(rc) ); armci_die("EQWait problem",rc); } if (ev->ni_fail_type != PTL_NI_OK) { temp_comp = (comp_desc *)ev->md.user_ptr; printf("%d:NI sent %d in event %d,%d.\n", armci_me,portals->rank.nid, portals->rank.pid, ev->ni_fail_type); armci_die("event failure problem",temp_comp->dest_id); } if(DEBUG_COMM){ printf("\n%d:net_wait_ackresp:done waiting type=%d\n",armci_me, ev->type); fflush(stdout); } if (ev->type == PTL_EVENT_SEND_END){ if(DEBUG_COMM){ printf("\n%d:net_wait_ackresp:event send end\n",armci_me); fflush(stdout); } temp_comp = (comp_desc *)ev->md.user_ptr; if(temp_comp->type==ARMCI_PORTALS_GETPUT || temp_comp->type==ARMCI_PORTALS_NBGETPUT){ temp_comp->active=0; temp_comp->tag=-1; continue; } if(!armci_must_remotecomplete){ if(temp_comp->type==ARMCI_PORTALS_PUT || temp_comp->type==ARMCI_PORTALS_NBPUT){ temp_comp->active=0; temp_comp->tag=-1; } else continue; } else{ temp_comp->active++; continue; } } else if (ev->type == PTL_EVENT_REPLY_END){ temp_comp = (comp_desc *)ev->md.user_ptr; if(DEBUG_COMM){ printf("\n%d:net_wait_ackresp:reply end tag=%d\n",armci_me,temp_comp->tag); fflush(stdout); } temp_comp->active = 0; /*this was a get request, so we are done*/ temp_comp->tag=-1; continue; } else if (ev->type == PTL_EVENT_ACK){ temp_comp = (comp_desc *)ev->md.user_ptr; if(DEBUG_COMM){ printf("\n%d:net_wait_ackresp:event ack tag=%d\n",armci_me,temp_comp->tag); fflush(stdout); } temp_comp->active=0; temp_comp->tag=-1; portals->outstanding_puts--; } else if (ev->type==PTL_EVENT_PUT_END){ _buf_ackresp_t *sweep=_buf_ackresp_first; if(DEBUG_COMM){printf("\n%d:put end offset=%d",armci_me,ev->offset);fflush(stdout);} if(ar->val==ev->offset){ /*bingo!*/ ar->val=0; } else{ while(sweep!=NULL){ if(sweep->val==ev->offset){ sweep->val=0; break; } sweep=sweep->next; } /*if(sweep==NULL)armci_die("server wrote data at unexpected offset",ev->offset);*/ if(sweep==NULL){ int y; printf("%d:server wrote data at unexpected offset %d",armci_me,ev->offset);fflush(stdout); abort(); # ifdef ARMCI_CHECK_STATE for(y=0;yservid_map[y].pid==ev->initiator.pid && portals->servid_map[y].nid==ev->initiator.nid)break; assert(y!=armci_nclus); arlist_print(arn); armci_rem_state(y); # endif } } } else armci_die("in net_wait_ackresp unknown event",ev->type); } # ifdef ARMCI_CHECK_STATE arlist_remove(arlist_search(&arn, ar->valc)); # endif ar->valc=0; if(ar==_buf_ackresp_first)_buf_ackresp_first=ar->next; if(ar->next!=NULL){ ar->next->previous=ar->previous; } if(ar->previous!=NULL){ /*printf("\n%d:prev=%p %d %p %p\n",armci_me,ar->previous, ar->val,ar->next,ar);fflush(stdout);*/ ar->previous->next=ar->next; if(_buf_ackresp_cur==ar)_buf_ackresp_cur=ar->previous; } if(_buf_ackresp_cur==ar)_buf_ackresp_cur=NULL; ar->previous=ar->next=NULL; ARMCI_PR_DBG("exit",0); return rc; } int armci_client_complete(ptl_event_kind_t evt,int proc_id, int nb_tag, comp_desc *cdesc) { int rc; ptl_event_t ev_t; ptl_event_t *ev=&ev_t; comp_desc *temp_comp = NULL; int loop=1; int temp_proc; ARMCI_PR_DBG("enter",0); if(DEBUG_COMM){ printf("\n%d:enter:client_complete active=%d tag=%d %d\n",armci_me, cdesc->active,cdesc->tag,nb_tag);fflush(stdout); } if(nb_tag>0){ if(cdesc->tag!=nb_tag)return 0; } while(cdesc->active!=0){ ev->type=0; if((rc = PtlEQWait(portals->eq_h, ev)) != PTL_OK){ printf("%d:PtlEQWait(): %d %s\n", portals->rank,rc, ARMCI_NET_ERRTOSTR(rc) ); armci_die("EQWait problem",rc); } if (ev->ni_fail_type != PTL_NI_OK) { temp_comp = (comp_desc *)ev->md.user_ptr; printf("%d:NI sent %d in event %d,%d.\n", armci_me,portals->rank.nid, portals->rank.pid, ev->ni_fail_type); armci_die("event failure problem",temp_comp->dest_id); } if(DEBUG_COMM){ printf("\n%d:armci_client_complete:done waiting type=%d\n",armci_me, ev->type); fflush(stdout); } if(cdesc!=ev->md.user_ptr){ /*printf("\n%d:expecting desc %p completing %p\n",armci_me,cdesc,ev->md.user_ptr);*/ } if (ev->type == PTL_EVENT_SEND_END){ if(DEBUG_COMM){ printf("\n%d:armci_client_complete:event send end\n",armci_me); fflush(stdout); } temp_comp = (comp_desc *)ev->md.user_ptr; if(temp_comp->type==ARMCI_PORTALS_GETPUT || temp_comp->type==ARMCI_PORTALS_NBGETPUT){ temp_comp->active=0; temp_comp->tag=-1; continue; } if(!armci_must_remotecomplete){ if(temp_comp->type==ARMCI_PORTALS_PUT || temp_comp->type==ARMCI_PORTALS_NBPUT){ temp_comp->active=0; temp_comp->tag=-1; } else continue; } else{ temp_comp->active++; continue; } } else if (ev->type == PTL_EVENT_REPLY_END){ temp_comp = (comp_desc *)ev->md.user_ptr; if(DEBUG_COMM){ printf("\n%d:client_send_complete:reply end tag=%d\n",armci_me,temp_comp->tag); fflush(stdout); } temp_comp->active = 0; /*this was a get request, so we are done*/ temp_comp->tag=-1; continue; } else if (ev->type == PTL_EVENT_ACK){ temp_comp = (comp_desc *)ev->md.user_ptr; if(DEBUG_COMM){ printf("\n%d:client_send_complete:event ack tag=%d\n",armci_me,temp_comp->tag); fflush(stdout); } temp_comp->active=0; temp_comp->tag=-1; portals->outstanding_puts--; } else if (ev->type==PTL_EVENT_PUT_END){ _buf_ackresp_t *ar=_buf_ackresp_first; while(ar!=NULL){ if(ar->val==ev->offset){ ar->val=0; break; } ar=ar->next; } if(ar==NULL)armci_die("server wrote data at unexpected offset",ev->offset); if(DEBUG_COMM){printf("\n%d:put end offset=%d",armci_me,ev->offset);fflush(stdout);} } else armci_die("in client_complete unknown event",ev->type); } if(DEBUG_COMM){ printf("\n%d:exit:client_complete active=%d tag=%d %d\n",armci_me, cdesc->active,cdesc->tag,nb_tag);fflush(stdout); } ARMCI_PR_DBG("exit",0); return rc; } comp_desc * get_free_comp_desc(int * comp_id) { comp_desc * c; int rc = PTL_OK; ARMCI_PR_DBG("enter",0); c = &(_compdesc_array[portals->free_comp_desc_index]); if(c->active!=0 && c->tag>0) armci_client_complete(0,c->dest_id,c->tag,c); else{ /* if(c->active!=0) printf("\n%d:potential problem:active completion descriptor but tag=%d",armci_me,c->tag); else printf("\n%d:potential problem:active completion descriptor with tag=%d",armci_me,c->tag); */ } if(!armci_must_remotecomplete){ do{ rc = PtlMDUnlink(c->mem_dsc_hndl); }while(rc==PTL_MD_IN_USE); } *comp_id = portals->free_comp_desc_index; if(DEBUG_COMM){ printf("\nthe value of comp_desc_id is %d\n",*comp_id); fflush(stdout); } portals->free_comp_desc_index = (portals->free_comp_desc_index+1) % NUM_COMP_DSCR; ARMCI_PR_DBG("exit",0); return c; } void print_mem_desc(ptl_md_t * md) { printf("%d:%p:start=%p length=%d threshold=%d max_size=%d options=%d eq_handle=%d\n",armci_me,md,md->start, md->length,md->threshold,md->max_size,md->options,md->eq_handle); fflush(stdout); } #ifndef NEW_MALLOC #if 0 void armci_unregister_shmem(void *my_ptr, long size) { int i=0,dst,found=0; long id ; long reg_size=0; int reg_num = _rem_meminfo[armci_me].reg_count; void *tptr; ARMCI_PR_DBG("enter",reg_num); #ifdef DEBUG_MEM printf("%d:%s:got size=%ld myptr %p\n",armci_me,FUNCTION_NAME,size,my_ptr); fflush(stdout); #endif bzero(_tmp_rem_reginfo,sizeof(aptl_reginfo_t)*armci_nproc); if(reg_num>=MAX_MEM_REGIONS) armci_die("reg_num corrupted",reg_num); for(i=0;i=MAX_MEM_REGIONS) armci_die("reg_num corrupted",reg_num); for(i=0;i=MAX_MEM_REGIONS-1){ printf("\n%d:more than expected regions -- %d, increase MAX_MEM_REGIONS",armci_me,_rem_meminfo[i].reg_count++);fflush(stdout); armci_die2("more than expected regions",_rem_meminfo[i].reg_count,MAX_MEM_REGIONS); } } #ifdef DEBUG_MEM printf("%d: regist id=%ld found=%d size=%ld reg_num=%d\n", armci_me,id,found,reg_size,reg_num); fflush(stdout); #endif ARMCI_PR_DBG("exit",0); } void armci_register_shmem_grp(void *my_ptr, long size, long *idlist, long off, void *sptr,ARMCI_Group *group) { ARMCI_Group orig_group; ARMCI_PR_DBG("enter",0); ARMCI_Group_get_default(&orig_group); ARMCI_Group_set_default(group); armci_register_shmem(my_ptr,size,idlist,off,sptr); ARMCI_Group_set_default(&orig_group); ARMCI_PR_DBG("enter",0); } #endif #endif // end #ifdef ARMCI_REGISTER_SHMEM static int _get_rem_servinfo(int serv,size_t bytes, size_t* offset) { int i; ARMCI_PR_DBG("enter",0); i = 16<<8; *offset=(armci_me*NUM_SERV_BUFS+_client_servbuf_count[serv])*VBUF_DLEN; _client_servbuf_count[serv] = (_client_servbuf_count[serv]+1)%NUM_SERV_BUFS; ARMCI_PR_DBG("exit",i); return i; } static int _get_rem_info(int proc, void *ptr,size_t bytes, size_t* offset) { #ifdef ARMCI_REGISTER_SHMEM int i; ARMCI_PR_DBG("enter",0); #ifdef NEW_MALLOC i = check_meminfo(ptr,(long)bytes,proc); if(i==0){ printf("\n%d:ptr=%p bytes=%d proc=%d",armci_me,ptr,bytes,proc); armci_die("region not found",proc); } *offset = (size_t)((caddr_t)ptr-(caddr_t)portals->dsbase[i-1]); printf("\n%d:ptr=%p dsbase[0]=%p offs=%ld",armci_me,ptr,portals->dsbase[0],*offset);fflush(stdout); if(*offset>=0){ ARMCI_PR_DBG("exit A",(i+1)); return(i); } #else rem_meminfo_t *mem_info=&(_rem_meminfo[proc]); aptl_reginfo_t *memreg = mem_info->reginfo; for(i=0;ireg_count;i++){ /*for now size is not verified*/ if(DEBUG_COMM){ printf("\n%d:proc=%d regcount=%d reg=%d base=%p size=%d end=%p checkptr=%p\n",armci_me,proc,mem_info->reg_count,i,memreg[i].base_ptr,memreg[i].size, ((char *)memreg[i].base_ptr+memreg[i].size), ptr);fflush(stdout); } if((memreg[i].valid) && ptr>= memreg[i].base_ptr && ptr< ((char *)memreg[i].base_ptr+memreg[i].size)){ *offset = ((char *)ptr-(char *)memreg[i].base_ptr); ARMCI_PR_DBG("exit A",(i+1)); return (i+1); } } #endif ARMCI_PR_DBG("exit B",i); armci_die("_get_rem_info, rem memory region not found",bytes); #else printf("_get_rem_info called ... this shouldn't happen"); abort(); #endif } void armci_client_direct_get(ptl_process_id_t dest_proc, ptl_size_t offset_remote, ptl_match_bits_t mb, size_t bytes, ptl_md_t *md_local, ptl_handle_md_t *md_hdl_local) { int rc; ptl_size_t offset_local = 0; ARMCI_PR_DBG("enter",0); if(DEBUG_COMM){ printf("\n%d:armci_client_direct_get:BYTES = %d\n",armci_me,bytes); printf("\n%d:offr=%ld offl=%ld\n",armci_me,offset_remote,offset_local); fflush(stdout); } rc = PtlMDBind(portals->ni_h,*md_local, PTL_UNLINK, md_hdl_local); if (rc != PTL_OK){ printf("%d:PtlMDBind: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("ptlmdbind get failed",0); } #ifdef CRAY_USE_MDMD_COPY if (dest_proc.nid == portals->rank.nid) { rc = PtlMDMDCopy(*md_hdl_local, dest_proc, portals->ptl, 0, mb, offset_remote); } else { #endif rc = PtlGetRegion(*md_hdl_local,offset_local,bytes,dest_proc, portals->ptl, 0, mb, offset_remote); #ifdef CRAY_USE_MDMD_COPY } #endif if (rc != PTL_OK){ printf("%d:PtlGetRegion: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("PtlGetRegion failed",0); } if(DEBUG_COMM){ printf("\n%d:issued get\n",armci_me);fflush(stdout); } ARMCI_PR_DBG("exit",0); } void armci_portals_get(int proc, void *src_buf, void *dst_buf, int bytes, void** cptr,int tag) { int rc; ptl_size_t offset_local = 0, offset_remote=0; ptl_md_t *md_local; ptl_handle_md_t *md_hdl_local; int rem_info; comp_desc *cdesc; ptl_process_id_t dest_proc; int c_info; int cluster = armci_clus_id(proc); ARMCI_PR_DBG("enter",0); /*first remote process information*/ /*dest_proc.nid = portals->procid_map[proc].nid; dest_proc.pid = portals->procid_map[proc].pid;*/ dest_proc.nid = portals->servid_map[cluster].nid; dest_proc.pid = portals->servid_map[cluster].pid; /*create local xfer info*/ cdesc = get_free_comp_desc(&c_info); md_local = &cdesc->mem_dsc; md_hdl_local = &cdesc->mem_dsc_hndl; md_local->length=bytes; md_local->start=dst_buf; md_local->user_ptr = (void *)cdesc; md_local->options = PTL_MD_OP_GET | PTL_MD_EVENT_START_DISABLE; /*get remote info*/ rem_info = _get_rem_info(proc,src_buf,bytes,&offset_remote); cdesc->dest_id = proc; if (tag){ *((comp_desc **)cptr) = cdesc; cdesc->tag = tag; cdesc->type = ARMCI_PORTALS_NBGET; /*printf("\n%d:get tag=%d c_info=%d * %p",armci_me,tag,c_info,cdesc);fflush(stdout);*/ } else{ cdesc->tag = 0; cdesc->type = ARMCI_PORTALS_GET; } cdesc->active = 1; armci_client_direct_get(dest_proc,offset_remote,(ptl_match_bits_t)rem_info, bytes,md_local,md_hdl_local); if(!tag){ armci_client_complete(0,proc,0,cdesc); /* check this later */ } ARMCI_PR_DBG("exit",0); } void armci_client_nb_get(int proc, void *src_buf, int *src_stride_arr, void *dst_buf, int *dst_stride_arr, int bytes, void** cptr,int tag) { } void armci_client_direct_send(ptl_process_id_t dest_proc, ptl_size_t offset_remote, ptl_match_bits_t mb, size_t bytes, ptl_md_t *md_local, ptl_handle_md_t *md_hdl_local) { int rc; ptl_size_t offset_local = 0; ARMCI_PR_DBG("enter",0); if(DEBUG_COMM){ printf("%d:armci_client_direct_send:BYTES = %d\n",armci_me,bytes); printf("\n%d:offr=%ld offl=%ld\n",armci_me,offset_remote,offset_local); fflush(stdout); } /*print_mem_desc(md_local);*/ rc = PtlMDBind(portals->ni_h,*md_local, PTL_UNLINK, md_hdl_local); if (rc != PTL_OK){ fprintf(stderr, "%d:PtlMDBind: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc)); armci_die("ptlmdbind send failed",0); } if(armci_must_remotecomplete){ rc = PtlPutRegion(*md_hdl_local,offset_local,bytes, PTL_ACK_REQ, dest_proc,portals->ptl,0, mb,offset_remote, 0); } else{ rc = PtlPutRegion(*md_hdl_local,offset_local,bytes, PTL_NOACK_REQ, dest_proc,portals->ptl,0, mb,offset_remote, 0); } if (rc != PTL_OK){ fprintf(stderr, "%d:PtlPutRegion: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("PtlPutRegion failed",0); } ARMCI_PR_DBG("exit",0); } void armci_portals_put(int proc, void *src_buf, void *dst_buf, int bytes, void** cptr,int tag) { int rc; ptl_size_t offset_local = 0, offset_remote=0; ptl_md_t *md_local; ptl_handle_md_t *md_hdl_local; int rem_info; comp_desc *cdesc; ptl_process_id_t dest_proc; int c_info; int cluster = armci_clus_id(proc); ARMCI_PR_DBG("enter",0); /*first process information*/ dest_proc.nid = portals->servid_map[cluster].nid; dest_proc.pid = portals->servid_map[cluster].pid; /*dest_proc.nid = portals->procid_map[proc].nid; dest_proc.pid = portals->procid_map[proc].pid;*/ /*create local xfer info*/ cdesc = get_free_comp_desc(&c_info); md_local = &cdesc->mem_dsc; md_hdl_local = &cdesc->mem_dsc_hndl; md_local->length=bytes; md_local->start=src_buf; md_local->user_ptr = (void *)cdesc; md_local->options = PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; /*get remote info*/ rem_info = _get_rem_info(proc,dst_buf,bytes,&offset_remote); if(DEBUG_COMM){ printf("\n%d:offr=%ld offl=%ld\n",armci_me,offset_remote,offset_local); } cdesc->dest_id = proc; if (tag){ *((comp_desc **)cptr) = cdesc; cdesc->tag = tag; cdesc->type = ARMCI_PORTALS_NBPUT; /*printf("\n%d:put tag=%d c_info=%d * %p",armci_me,tag,c_info,cdesc);fflush(stdout);*/ } else{ cdesc->tag = 0; cdesc->type = ARMCI_PORTALS_PUT; } cdesc->active = 1; armci_client_direct_send(dest_proc,offset_remote,(ptl_match_bits_t)rem_info, bytes,md_local,md_hdl_local); if(!tag){ armci_client_complete(0,proc,0,cdesc); /* check this later */ } else portals->outstanding_puts++; ARMCI_PR_DBG("exit",0); } void armci_client_nb_send(int proc, void *src_buf, int *src_stride_arr, void *dst_buf, int *dst_stride_arr, int bytes, void** cptr,int tag) { } /*using non-blocking for multiple 1ds inside a 2d*/ void armci_network_strided(int op, void* scale, int proc,void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, armci_ihdl_t nb_handle) { int i, j,tag=0; long idxs,idxd; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int bvalue_s[MAX_STRIDE_LEVEL], bunit[MAX_STRIDE_LEVEL]; int bvalue_d[MAX_STRIDE_LEVEL]; int bytes = count[0]; void *sptr,*dptr; NB_CMPL_T cptr; ptl_process_id_t dest_proc; ptl_size_t offset_remote; comp_desc *cdesc; int c_info; ptl_md_t *md_local; int rem_info; int cluster = armci_clus_id(proc); ARMCI_PR_DBG("enter",0); printf("%s calling abort ... network_strided not implemented\n",Portals_ID()); abort(); if(nb_handle)tag=nb_handle->tag; /*first remote process information*/ dest_proc.nid = portals->servid_map[cluster].nid; dest_proc.pid = portals->servid_map[cluster].pid; /*dest_proc.nid = portals->procid_map[proc].nid; dest_proc.pid = portals->procid_map[proc].pid;*/ rem_info = _get_rem_info(proc,(op==GET)?src_ptr:dst_ptr,bytes,&offset_remote); /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ bvalue_s[0] = 0; bvalue_s[1] = 0; bunit[0] = 1; bvalue_d[0] = 0; bvalue_d[1] = 0; bunit[1] = 1; for(i=2; i<=stride_levels; i++) { bvalue_s[i] = bvalue_d[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } if(ARMCI_ACC(op)){ /*for now die for acc*/ /*lock here*/ # ifdef ARMCI_CHECK_STATE arlist_print(arn); armci_rem_state(armci_clus_info[proc].master%armci_clus_info[0].nslave); # endif printf("\nSHOULD NOT DO NETWORK_STRIDED FOR ACCS \n",armci_me); fflush(stdout); armci_die("network_strided called for acc",proc); } /*loop over #contig chunks*/ for(i=0; i (count[j]-1)) bvalue_s[j] = 0; if(bvalue_d[j] > (count[j]-1)) bvalue_d[j] = 0; } sptr = ((char *)src_ptr)+idxs; dptr = ((char *)dst_ptr)+idxd; cdesc = get_free_comp_desc(&c_info); md_local = &cdesc->mem_dsc; md_hdl_local = &cdesc->mem_dsc_hndl; md_local->length=bytes; md_local->start=(op==GET)?dptr:sptr; md_local->user_ptr = (void *)cdesc; cdesc->dest_id = proc; cdesc->tag = tag; if(op==GET){ md_local->options = PTL_MD_OP_GET | PTL_MD_EVENT_START_DISABLE; cdesc->active = 1; cdesc->type = ARMCI_PORTALS_NBGET; /* printf("\n%d:reminfo=%d off=%d idxs=%d idxd=%d",armci_me, rem_info, offset_remote, idxs, idxd); */ armci_client_direct_get( dest_proc,offset_remote+idxs,rem_info, bytes,md_local,md_hdl_local); } else if(op==PUT){ cdesc->active = 1; cdesc->type = ARMCI_PORTALS_NBPUT; md_local->options = PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; armci_client_direct_send(dest_proc,offset_remote+idxd,rem_info, bytes,md_local,md_hdl_local); if(op==PUT)portals->outstanding_puts++; } else if(ARMCI_ACC(op)){ assert(0); } else{ ARMCI_PR_DBG("exit",0); armci_die("in network_strided unknown opcode",op); } armci_client_complete(0,proc,tag,cdesc); } if(ARMCI_ACC(op)){ /*unlock here*/ } if(nb_handle){ /* completing the last call is sufficient, given ordering semantics*/ nb_handle->tag=tag; nb_handle->cmpl_info=cdesc; } else{ /*completing the last call ensures everything before it is complete this * is one of the main reasons why dataserver is necessary*/ /*armci_client_complete(0,proc,tag,cdesc);*/ } ARMCI_PR_DBG("exit",0); } void armci_client_direct_getput(ptl_process_id_t dest_proc, ptl_size_t offset_remote, ptl_match_bits_t mb, size_t bytes, ptl_md_t *md_local_get,ptl_md_t *md_local_put, ptl_handle_md_t *md_hdl_local_get, ptl_handle_md_t *md_hdl_local_put) { int rc; ptl_size_t offset_get = 0; ptl_size_t offset_put = 0; ARMCI_PR_DBG("enter",0); if(DEBUG_COMM){ printf("%d:armci_client_direct_getput:BYTES = %d\n",armci_me,bytes); printf("\n%d:offr=%ld\n",armci_me,offset_remote);fflush(stdout); } rc = PtlGetPutRegion(*md_hdl_local_get, offset_get, *md_hdl_local_put, offset_put,bytes,dest_proc, portals->ptl,0,mb, offset_remote,0); if (rc != PTL_OK){ printf("%d:PtlGetPutRegion: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("PtlGetPutRegion failed",0); } ARMCI_PR_DBG("exit",0); } long a_p_putfrom; long a_p_getinto; int armci_portals_rmw_(int op, int *ploc, int *prem, int extra, int proc) { printf("error rmw"); return(0); } void armci_portals_shmalloc_allocate_mem(int num_lks) { void **ptr_arr; void *ptr; armci_size_t bytes = 128; int i; ARMCI_PR_DBG("enter",0); ptr_arr = (void**)malloc(armci_nproc*sizeof(void*)); if(!ptr_arr) armci_die("armci_shmalloc_get_offsets: malloc failed", 0); bzero((char*)ptr_arr,armci_nproc*sizeof(void*)); ARMCI_Malloc(ptr_arr,bytes); ARMCI_PR_DBG("exit",0); return; } void armci_wait_for_server() { ARMCI_PR_DBG("enter",0); armci_server_terminating=1; armci_serv_quit(); ARMCI_PR_DBG("exit",0); } /*client buffers info*/ void armci_portals_client_buf_info(char *buf, ptl_match_bits_t *mb, ptl_size_t *offset,int proc) { ARMCI_PR_DBG("enter",0); *mb = (1<<30); *offset = buf-client_buf_ptrs[proc]; if(DEBUG_SERV){printf("\n(%d):serv writing to ofset %d on %d\n",armci_me,*offset,proc);fflush(stdout);} ARMCI_PR_DBG("exit",0); } /*memory for client buffers*/ char *armci_portals_client_buf_allocate(int bytes) { void *ptr; ptl_match_bits_t ignbits = 0xFFFFFFFF0FFFFFFF; ptl_match_bits_t mbits = 1; ptl_md_t *md_ptr,md; ptl_process_id_t match_id; ptl_handle_me_t me_h; ptl_handle_md_t md_h; int rc; ARMCI_PR_DBG("enter",sizeof(ptl_match_bits_t)); ptr = malloc(bytes); bzero(ptr,bytes); assert(ptr); mbits = (1<<30); md_ptr = &(md); md_ptr->start = ptr; md_ptr->length = bytes; md_ptr->threshold = PTL_MD_THRESH_INF; md_ptr->options = PTL_MD_OP_PUT | PTL_MD_OP_GET | PTL_MD_MANAGE_REMOTE | PTL_MD_EVENT_START_DISABLE; md_ptr->user_ptr = NULL; md_ptr->max_size = 0; /*logic that says, eq_h is now recieving data for the buffers, including acks! */ md_ptr->eq_handle = portals->eq_h; match_id.nid = PTL_NID_ANY; match_id.pid = PTL_PID_ANY; rc = PtlMEAttach(portals->ni_h,portals->ptl,match_id, mbits,ignbits,PTL_RETAIN,PTL_INS_AFTER,&(me_h)); if (rc != PTL_OK){ printf("%d:PtlMEAttach: %s\n", portals->rank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("portals attach error2",rc); } rc = PtlMDAttach(me_h,md,PTL_RETAIN,&md_h); if (rc != PTL_OK) { printf("%d:PtlMDAttach: %s %d\n", portals->rank, ARMCI_NET_ERRTOSTR(rc),(client_md_count+serv_md_count) ); armci_die("portals attach error CBA",rc); } client_md_count++; client_buf_ptrs[armci_me]=ptr; armci_msg_barrier(); armci_exchange_address(client_buf_ptrs,armci_nproc); ARMCI_PR_DBG("exit",0); return(ptr); } void armci_transport_cleanup() { /*for i=0tomaxpendingclean*/ ARMCI_PR_DBG("enter",0); free(client_buf_ptrs); ARMCI_PR_DBG("exit",0); } void free_serv_bufs() { if(serv_bufs) free(serv_bufs); } int armci_send_req_msg(int proc, void *buf, int bytes,int tag) { #ifndef OLD_PORTALS_CODE int cluster = armci_clus_id(proc); int serv = armci_clus_info[cluster].master; char *buffer = NULL; request_header_t *msginfo = (request_header_t *) buf; // # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE _armci_buf_ensure_one_outstanding_op_per_node(buf,cluster); // # endif # ifdef PORTALS_USE_ARMCI_CLIENT_BUFFERS BUF_INFO_T *bufinfo=_armci_buf_to_bufinfo(msginfo); _buf_ackresp_t *ar = &bufinfo->ar; portals_ds_req_t *req = &ar->req; # endif if(msginfo->operation == PUT || ARMCI_ACC(msginfo->operation)) { // printf("%s cp: sending packed put\n",Portals_ID()); # ifdef PORTALS_USE_ARMCI_CLIENT_BUFFERS portals_remote_nbput(buf, buf, cluster, req); // portalsWaitOnRequest(req); # else portals_remote_put(buf, buf, cluster); # endif // printf("%s cp: finished packed put\n",Portals_ID()); } else if(msginfo->operation == GET) { buffer = (char *) buf; buffer += sizeof(request_header_t); buffer += msginfo->dscrlen; // printf("%s cp: sending blocking get request\n",Portals_ID()); # ifdef PORTALS_USE_ARMCI_CLIENT_BUFFERS portals_remote_nbget(buffer, msginfo, cluster, req); // portalsWaitOnRequest(req); # else portals_remote_get(buffer, msginfo, cluster); # endif // printf("%s cp: get request finished\n",Portals_ID()); } else if(msginfo->operation == ACK) { # ifdef PORTALS_USE_ARMCI_CLIENT_BUFFERS portalsRemoteOperationToNode(buf, bytes, cluster, req); // portalsWaitOnRequest(req); # else portalsBlockingRemoteOperationToNode(buf, bytes, cluster); # endif } else if(msginfo->operation == ARMCI_SWAP || msginfo->operation == ARMCI_SWAP_LONG || msginfo->operation == ARMCI_FETCH_AND_ADD || msginfo->operation == ARMCI_FETCH_AND_ADD_LONG) { buffer = (char *) buf; buffer += sizeof(request_header_t); buffer += msginfo->dscrlen; portals_remote_rmw(buffer, msginfo, cluster, req); # ifndef PORTALS_USE_ARMCI_CLIENT_BUFFERS portalsWaitOnOperation(req); # endif } else if(msginfo->operation!=ATTACH) { printf("%s cp: msginfo->operation=%d not supported yet\n",Portals_ID(),msginfo->operation); abort(); } # ifdef PORTALS_USE_ARMCI_CLIENT_BUFFERS /* for now, clear the ackresp structure because the call had to have been blocking later, we will allow a modified x_net_wait_ackresp clear it */ ar->val = ar->valc = 0; if(ar==_buf_ackresp_first)_buf_ackresp_first=ar->next; if(ar->next!=NULL){ ar->next->previous=ar->previous; } if(ar->previous!=NULL){ ar->previous->next=ar->next; if(_buf_ackresp_cur==ar)_buf_ackresp_cur=ar->previous; } if(_buf_ackresp_cur==ar)_buf_ackresp_cur=NULL; ar->previous=ar->next=NULL; # endif return 0; #else int rc; ptl_size_t offset_local = 0, offset_remote=0; ptl_md_t *md_local; ptl_handle_md_t *md_hdl_local; int rem_info; comp_desc *cdesc; void *cptr; ptl_process_id_t dest_proc; int c_info; int cluster = armci_clus_id(proc); int serv = armci_clus_info[cluster].master; request_header_t *msginfo = (request_header_t *)buf; ARMCI_PR_DBG("enter",0); if(msginfo->operation==GET && msginfo->dscrlen<=msginfo->datalen){ *(long *)((char *)(msginfo+1)+msginfo->datalen)=0; } /*badbadbad*/ msginfo->tag.ack_ptr=&(msginfo->tag.ack); cptr = (void *)((double *)buf-1); /*first process information*/ dest_proc.nid = portals->servid_map[cluster].nid; dest_proc.pid = portals->servid_map[cluster].pid; /*create local xfer info*/ cdesc = get_free_comp_desc(&c_info); md_local = &cdesc->mem_dsc; md_hdl_local = &cdesc->mem_dsc_hndl; md_local->length=bytes; md_local->start=buf; md_local->user_ptr = (void *)cdesc; md_local->options = PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; /*get remote info*/ rem_info = _get_rem_servinfo(cluster,(size_t)bytes,&offset_remote); if(DEBUG_COMM){ printf("\n%d:offr=%ld offl=%ld\n",armci_me,offset_remote,offset_local); } cdesc->dest_id = serv; *((comp_desc **)cptr) = cdesc; if(tag==0)tag=GET_NEXT_NBTAG(); cdesc->tag = tag; cdesc->type = ARMCI_PORTALS_NBPUT; /*printf("\n%d:put tag=%d c_info=%d * %p",armci_me,tag,c_info,cdesc);fflush(stdout);*/ cdesc->active = 1; if(msginfo->operation==PUT || msginfo->operation == UNLOCK || ARMCI_ACC(msginfo->operation)){ _buf_ackresp_cur->valc = _buf_ackresp_cur->val = (char *)msginfo->tag.ack_ptr-client_buf_ptrs[armci_me]; # ifdef ARMCI_CHECK_STATE arlist_add(&arn,_buf_ackresp_cur->val,msginfo->operation); # endif } else { _buf_ackresp_cur->valc = _buf_ackresp_cur->val = (char *)msginfo->tag.data_ptr-client_buf_ptrs[armci_me]; # ifdef ARMCI_CHECK_STATE arlist_add(&arn,_buf_ackresp_cur->val,msginfo->operation); # endif } if(DEBUG_COMM){printf("\n%d:registered %d in val to %d at %d %d\n",armci_me,_buf_ackresp_cur->val,serv,offset_remote,msginfo->operation);fflush(stdout);} _armci_buf_ensure_pend_outstanding_op_per_node(buf,cluster); armci_client_direct_send(dest_proc,offset_remote,(ptl_match_bits_t)rem_info, bytes,md_local,md_hdl_local); /*if(msginfo->operation==GET){ BUF_INFO_T *info=((char *)msginfo-sizeof(BUF_EXTRA_FIELD_T)-sizeof(BUF_INFO_T)); armci_client_complete(0,proc,cdesc->tag,cdesc); }*/ /*armci_client_complete(0,proc,cdesc->tag,cdesc);*/ portals->outstanding_puts++; ARMCI_PR_DBG("exit",0); return 0; #endif } char *armci_ReadFromDirect(int proc, request_header_t *msginfo, int len) { #ifndef OLD_PORTALS_CODE # ifdef PORTALS_USE_ARMCI_CLIENT_BUFFERS BUF_INFO_T *bufinfo = _armci_buf_to_bufinfo(msginfo); portals_ds_req_t *req = &bufinfo->ar.req; portalsWaitOnRequest(req); # endif char *ret = (char *) msginfo; ret += sizeof(request_header_t); ret += msginfo->dscrlen; return ret; #else long *flag; int loop; BUF_INFO_T *bufinfo=_armci_buf_to_bufinfo(msginfo); ARMCI_PR_DBG("enter",0); if(len) flag = (long *)((char *)(msginfo+1)+len); else flag = (long *)((char *)(msginfo+1)+msginfo->datalen); x_net_wait_ackresp(&(bufinfo->ar)); while(armci_util_long_getval(flag) != ARMCI_TAIL){ loop++; loop %=100000; if(loop==0){ if(DEBUG_COMM){ printf("%d: client flag(%p)=%ld off=%d %d\n", armci_me,flag,*flag,msginfo->datalen,*((int*)(msginfo+1))); fflush(stdout); } } } *flag=0; ARMCI_PR_DBG("exit",0); return (msginfo+1); #endif } #ifdef ARMCI_CHECK_STATE extern void sarlist_add(int,int,long); #endif void armci_WriteToDirect(int proc, request_header_t* msginfo, void *buf) { #ifndef OLD_PORTALS_CODE ptl_size_t bytes = (ptl_size_t) msginfo->datalen; ptl_event_t *ev = (ptl_event_t *) msginfo->tag.user_ptr; portals_ds_send_put(buf, msginfo->datalen, ev->initiator, ev->hdr_data); // you could do an assertion that the portals_id_map of proc == ev->initiator #else long *tail; int bytes; void *dst_addr = msginfo->tag.data_ptr; ptl_match_bits_t ignbits = 0xFFFFFFFF0FFFFFFF; ptl_match_bits_t mbits = 1; ptl_md_t *md_ptr,md; ptl_process_id_t match_id; ptl_handle_me_t me_h; ptl_size_t offst,localoffset; int rc; /* set tail ack, make sure it is alligned */ ARMCI_PR_SDBG("enter",0); bytes = msginfo->datalen+sizeof(long); if(!(buf>=serv_bufs->buf && bufbufend)){ bcopy(buf,(msginfo+1),bytes); buf=(msginfo+1); } tail = (long*)(buf + msginfo->datalen); *tail = ARMCI_TAIL; armci_portals_client_buf_info((char *)dst_addr,&mbits,&offst,proc); # ifdef ARMCI_CHECK_STATE sarlist_add(proc,msginfo->operation,offst); # endif match_id.nid = portals->procid_map[proc].nid; match_id.pid = portals->procid_map[proc].pid; localoffset=(char *)buf-(char *)serv_bufs->buf; if(DEBUG_COMM){ printf("\n(%d):dst=%p,mbits=%d,localoffset=%d,offst=%d,proc=%d,nid=%d,pid=%d len=%d\n",armci_me, dst_addr,mbits,localoffset,offst,proc,portals->procid_map[proc].nid, portals->procid_map[proc].pid,bytes);fflush(stdout); } rc = PtlPutRegion(serv_response_md_h,localoffset,bytes,PTL_NOACK_REQ, match_id,portals->ptl,0,mbits,offst,0); if (rc != PTL_OK){ fprintf(stderr, "%d:PtlPutRegion: %s\n", portals->Srank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("PtlPutRegion failed",0); } ARMCI_PR_SDBG("exit",0); #endif } void armci_rcv_req(void *mesg,void *phdr,void *pdescr,void *pdata,int *buflen) { int i,na; char *a; double *tmp; request_header_t *msginfo = (request_header_t *)mesg; ARMCI_PR_SDBG("enter",msginfo->operation); *(void **)phdr = msginfo; if(0){ printf("%s [ds]: got %d req (hdrlen=%d dscrlen=%d datalen=%d %d) from %d\n", Portals_ID(), msginfo->operation, sizeof(request_header_t), msginfo->dscrlen, msginfo->datalen, msginfo->bytes,msginfo->from); fflush(stdout); } /* we leave room for msginfo on the client side */ *buflen = MSG_BUFLEN - sizeof(request_header_t); if(msginfo->bytes) { *(void **)pdescr = msginfo+1; *(void **)pdata = msginfo->dscrlen + (char*)(msginfo+1); if(msginfo->operation == GET) { // the descriptor will exists after the request header // but there will be no data buffer // use the MessageRcvBuffer *(void**) pdata = MessageSndBuffer; // printf("%s (server) overriding pdata in rcv_req\n",Portals_ID()); } } else { *(void**)pdescr = NULL; *(void**)pdata = MessageRcvBuffer; } ARMCI_PR_SDBG("exit",msginfo->operation); } void armci_call_data_server() { int rc; ptl_event_t ev_t; ptl_event_t *ev=&ev_t; serv_buf_t *compbuf = NULL; int loop=1; int temp_proc; int ccc=2,rrr; cpu_set_t mycpuid,new_mask; char str[CPU_SETSIZE]; char ncid[8],*cidptr,cid[8]; extern char * cpuset_to_cstr(cpu_set_t *mask, char *str); ARMCI_PR_SDBG("enter",0); //if(armci_me==0)unsetenv("CRAY_PORTALS_USE_BLOCKING_POLL"); sprintf (cid, "%d", ccc); rrr = cstr_to_cpuset(&new_mask,cid); /* ------------------------------------------------------------ *\ Change affinity for the data server \* ------------------------------------------------------------ */ if(sched_setaffinity(0, sizeof (new_mask), &new_mask)) { perror("sched_setaffinity"); printf("failed to set pid %d's affinity.\n", getpid()); } if(DEBUG_SERV){ rrr=sched_getaffinity(0, sizeof(mycpuid), &mycpuid); if(rrr)perror("sched_getaffinity"); cidptr = cpuset_to_cstr(&mycpuid,ncid); printf("(%d):my affinity is to %s\n",armci_me,ncid); fflush(stdout); } /* ------------------------------------- *\ Main data server loop \* ------------------------------------- */ while(armci_server_terminating==0){ /* ------------------------------------------------------------ *\ check event queue for incoming data requests from remote CPs \* ------------------------------------------------------------ */ ev->type=0; if((rc = PtlEQWait(portals->Seq_h, ev)) != PTL_OK){ printf("(%d):PtlEQWait(): %d %s\n", armci_me,rc,ARMCI_NET_ERRTOSTR(rc) ); armci_die("EQWait problem",rc); } if (ev->ni_fail_type != PTL_NI_OK) { printf("(%d)%d,%d:NI sent %d in event.\n", armci_me,portals->Srank.nid, portals->Srank.pid,ev->ni_fail_type); fflush(stdout); armci_die2("event failure problem",ev->initiator.nid,ev->initiator.pid); } if(DEBUG_SERV){ printf("\n(%d):armci_call_data_server: ptl event detected=%d\n",armci_me,ev->type); fflush(stdout); } /* ------------------------------------------------------------ *\ PTL_EVENT_SEND_END: is ignored. This event is triggered as the DS returns data to a remote CP via a PtlPut. This event signals that that PtlPut has complete. \* ------------------------------------------------------------ */ if(ev->type == PTL_EVENT_SEND_END) continue; /* ------------------------------------------------------------ *\ PTL_EVENT_PUT_END: this is the key portals event for the DS. PUT_END signifies that a remote data request has come in from a remote CP. This data request will be handled by the data server: armci_data_server \* ------------------------------------------------------------ */ else if(ev->type == PTL_EVENT_PUT_END) { if(DEBUG_SERV) { printf("\n(%d):ev->offset=%d from %d%d",armci_me,ev->offset, ev->initiator.pid,ev->initiator.nid); fflush(stdout); } armci_data_server(((char *)serv_bufs->buf+ev->offset)); } /* ------------------------------------------------------------ *\ Unexpected Portals Event -- Panic! \* ------------------------------------------------------------ */ else { armci_die("unexpected event in data server",ev->type); } } ARMCI_PR_SDBG("exit",0); } void x_buf_wait_ack(request_header_t *msginfo, BUF_INFO_T *bufinfo) { ARMCI_PR_DBG("enter",bufinfo->ar.val); if(DEBUG_COMM){printf("\n%d:waiting for ack at %p",armci_me,&(msginfo->tag.ack));fflush(stdout);} x_net_wait_ackresp(&(bufinfo->ar)); armci_util_wait_long(&(msginfo->tag.ack),ARMCI_STAMP,10000); if(DEBUG_COMM){printf("\n%d:done waiting for ack at %p",armci_me,&(msginfo->tag.ack));fflush(stdout);} msginfo->tag.ack=0; ARMCI_PR_DBG("exit",0); } void x_net_send_ack(request_header_t *msginfo, int proc,void *dst,void *src) { long *tail; int bytes=sizeof(long); ptl_size_t offst; ptl_match_bits_t ignbits = 0xFFFFFFFF0FFFFFFF; ptl_match_bits_t mbits = 1; ptl_process_id_t match_id; int rc; /* set tail ack, make sure it is alligned */ ARMCI_PR_SDBG("enter",0); armci_portals_client_buf_info((char *)dst,&mbits,&offst,proc); # ifdef ARMCI_CHECK_STATE sarlist_add(proc,msginfo->operation,offst); # endif match_id.nid = portals->procid_map[proc].nid; match_id.pid = portals->procid_map[proc].pid; if(DEBUG_SERV){ printf("\n(%d):dst=%p,mbits=%d,offst=%d,proc=%d,nid=%d,pid=%d len=%d\n",armci_me, dst,mbits,offst,proc,portals->procid_map[proc].nid, portals->procid_map[proc].pid,bytes);fflush(stdout); } rc = PtlPutRegion(serv_ack_md_h,0,bytes,PTL_NOACK_REQ, match_id,portals->ptl,0,mbits,offst,0); if (rc != PTL_OK){ fprintf(stderr, "%d:PtlPutRegion: %s\n", portals->Srank, ARMCI_NET_ERRTOSTR(rc) ); armci_die("PtlPutRegion failed",0); } ARMCI_PR_SDBG("exit",0); } long x_net_offset(char *buf,int proc) { #ifdef ARMCI_REGISTER_SHMEM int i; #if NEW_MALLOC if((i=check_meminfo(buf,1,proc))==0) armci_die("x_net_offset,reg not found",proc); return(all_meminfo[proc].serv_offs[i]); #else ARMCI_PR_DBG("enter",_rem_meminfo[proc].reg_count); if(DEBUG_COMM){printf("\n%d:%s:buf=%p",armci_me,FUNCTION_NAME,buf);fflush(stdout); } for(i=0;i<_rem_meminfo[proc].reg_count;i++){ if(IN_REGION(buf,_rem_meminfo[proc].reginfo[i])){ #ifdef DEBUG_MEM {printf("\n%d:found it in reg=%d (%p,%d) for proc=%d",armci_me,i,_rem_meminfo[proc].reginfo[i].base_ptr,_rem_meminfo[proc].reginfo[i].size,proc);} #endif return((long)((char *)_rem_meminfo[proc].reginfo[i].serv_ptr-(char *)_rem_meminfo[proc].reginfo[i].base_ptr)); } } #endif ARMCI_PR_DBG("exit",0); #else printf("x_net_offset called; this shouldn't happen ...\n"); abort(); #endif } void armci_set_serv_mutex_arr(void *ptr) { int i; long offset; ARMCI_PR_DBG("enter",0); offset=x_net_offset(ptr,armci_me); _armci_server_mutex_ready=1; _armci_server_mutex_ptr = (char *)ptr+offset; ARMCI_PR_DBG("exit",0); } ga-5-3/armci/src-portals/atomics-i386.h0000640005473000001440000000071611272075066016451 0ustar d3n000users/** Atomic instructions for i386. To be populated as need arises. * @author Sriram Krishnamoorthy */ #ifndef __ATOMICS_I386__ #define __ATOMICS_I386__ #include #define v4b (volatile unsigned int *) static inline void atomic_exchange(void *val, void *ptr, int size) { assert(size == 4); __asm__ __volatile__ ("xchgl %0, %1" : "=r"(*v4b(val)), "+m"(*v4b(ptr)) : "0"(*v4b(val)) : "memory"); } #undef v4b #endif /*__ATOMICS_I386__*/ ga-5-3/armci/src-portals/timer.c0000640005473000001440000000176711300316052015426 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: timer.c,v 1.3 2004-04-09 22:03:51 manoj Exp $ */ #ifdef WIN32 static double msec; /* reference for timer */ # include #else # include # include static unsigned firstsec=0; /* Reference for timer */ static unsigned firstusec=0; /* Reference for timer */ #endif static int first_call=1; double armci_timer() { #ifdef WIN32 double t0 = (double)GetCurrentTime(); if(first_call){ first_call=0; msec=t0; return 0.0; } t0 -=msec; if(t0<0.0)t0 += (double)0xffffffff; return 0.01*t0; #else double low, high; struct timeval tp; struct timezone tzp; (void) gettimeofday(&tp,&tzp); if (first_call) { firstsec = tp.tv_sec; firstusec = tp.tv_usec; first_call = 0; } low = (double)(tp.tv_usec>>1) - (double) (firstusec>>1); high = (double) (tp.tv_sec - firstsec); return high + 1.0e-6*(low+low); #endif } ga-5-3/armci/src-portals/portals_ds.c0000640005473000001440000004514111410500413016450 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif # include "armcip.h" # include # include # include # include static ptl_handle_ni_t ds_nih; static ptl_handle_eq_t ds_eqh; static ptl_handle_eq_t request_eqh; static ptl_handle_me_t matchall_meh; static int request_buffer_cur_block; static ptl_md_t request_buffer_md[PORTALS_NREQUEST_BUFFERS]; static ptl_handle_me_t request_buffer_meh[PORTALS_NREQUEST_BUFFERS]; int portals_ds_ready = 0; // void *portals_ds_working_buffer = NULL; void* portals_ds_thread(void* args) { portals_ds_init(); portals_ds(); portals_ds_finalize(); portalsSpinLockOnInt(&portals_cp_finished,1,1000); exit(0); return NULL; } int portals_ds_init() { int i,rc; size_t bufferSize; float warningSize; portals_ds_ready = 0; /* --------------------------------------------------------------------- *\ unhook set affinity ... data servers can roam \* --------------------------------------------------------------------- */ # ifdef PORTALS_AFFINITY int smp_np, smp_me; unsigned long mask; unsigned int len = sizeof(mask); unsigned long ncpus; int verbose = 0; MPI_Comm_size(portals_smp_comm,&smp_np); MPI_Comm_rank(portals_smp_comm,&smp_me); if((ncpus = sysconf(_SC_NPROCESSORS_ONLN)) < 0) { printf("%d [ds] sysconf(_SC_NPROCESSORS_ONLN) failed; err=%d\n", armci_me, ncpus); armci_die("sysconf in init_throttle",911); } if(sched_getaffinity(0, len, &mask) < 0) { perror("sched_getaffinity"); armci_die("getaffinity error in ds_init",911); } if(armci_clus_me == 0 && /* verbose */ 0 ) { printf("%d [ds]: old affinity = 0x%x, ncpus = %d\n", armci_me, mask, ncpus); } if(smp_np == ncpus) { mask = (1 << ncpus) - 1; /* let the data server roam over all cores */ } else { mask = 1 << (ncpus - 1); /* pin the ds to the last core on the node */ } if(sched_setaffinity(0, len, (cpu_set_t *) &mask) < 0) { perror("sched_setaffinity"); armci_die("setaffinity error in ds_init",911); } if(sched_getaffinity(0, len, &mask) < 0) { perror("sched_getaffinity"); armci_die("getaffinity error (#2) in ds_init",911); } if(armci_clus_me == 0 && verbose) { printf("%d [ds]: new affinity = 0x%x, ncpus = %d\n", armci_me, mask, ncpus); } # endif /* --------------------------------------------------------------------- *\ initialize the network interface \* --------------------------------------------------------------------- */ rc = portals_init(&ds_nih); if (rc != PTL_OK) { printf("failed to initialize portals on ds; err %d\n",rc); Fatal_error(rc); } /* --------------------------------------------------------------------- *\ used for responding to data requests; this keeps the response events in a separate queue from the multitude of incoming data requests \* --------------------------------------------------------------------- */ rc = portals_create_eq(ds_nih, 200, &ds_eqh); /* --------------------------------------------------------------------- *\ used to process incoming data requests. at very large scale we will have to do some sort of messaging by node group to reduce the worst case scenario off all to one type operations. use the data server to message forward from node groups. \* --------------------------------------------------------------------- */ i = ARMCI_MAX(6*PORTALS_MAX_DESCRIPTORS*armci_nproc,200); i = ARMCI_MAX(6*armci_nproc,200); rc = portals_create_eq(ds_nih, i, &request_eqh); if (rc != PTL_OK) { printf("failed to create request event queue"); Fatal_error(rc); } /* --------------------------------------------------------------------- *\ create ME list that matches all incoming data requests this will be a dead ME with no MD ... it will only be used as a place holder in which the "active" me/md will be placed in front of. \* --------------------------------------------------------------------- */ rc = portals_create_matchall_me(&matchall_meh); if (rc != PTL_OK) { printf("failed to create matchall ME\n"); Fatal_error(rc); } /* --------------------------------------------------------------------- *\ create buffer space for the ds buffer \* --------------------------------------------------------------------- */ assert(portalsMaxEagerMessageSize > sizeof(request_header_t)); bufferSize = portalsMaxEagerMessageSize; # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE bufferSize *= armci_nclus; # else bufferSize *= armci_nproc; # endif bufferSize = bufferSize/(PORTALS_NREQUEST_BUFFERS-2); bufferSize = ARMCI_MAX(bufferSize,portalsMaxEagerMessageSize); // if(armci_me == 0) printf("%s: bufferSize=%ld\n",Portals_ID(),bufferSize); /* if(bufferSize*PORTALS_NREQUEST_BUFFERS > PORTALS_REQUEST_BUFFER_SIZE_WARNING) { warningSize = (float) bufferSize * PORTALS_NREQUEST_BUFFERS; warningSize /= ONE_MB; printf("[data server]: internal request buffer is %.2f MB\n",warningSize); } */ for(i=0; itag.user_ptr = (void *) &ev; if(request->operation == PUT || ARMCI_ACC(request->operation)) { buffersize = sizeof(request_header_t) + request->dscrlen + request->datalen; if(buffersize >= portalsMaxEagerMessageSize) { buffer = (char *) MessageRcvBuffer; portals_ds_get_from_cp(buffer,buffersize,ev.initiator,ev.hdr_data); request = (request_header_t *) buffer; request->tag.user_ptr = (void *) &ev; armci_data_server(buffer); // printf("%d: FINISHED RENDEZ-VOUS!\n",armci_me); break; } } if(request->operation == GET) { buffersize = sizeof(request_header_t) + request->dscrlen; if(buffersize >= portalsMaxEagerMessageSize) { buffer = (char *) MessageRcvBuffer; portals_ds_get_from_cp(buffer,buffersize,ev.initiator,ev.hdr_data); request = (request_header_t *) buffer; request->tag.user_ptr = (void *) &ev; armci_data_server(buffer); // printf("%d: FINISHED RENDEZ-VOUS!\n",armci_me); break; } } /* ------------------------------------------------------------- *\ process request \* ------------------------------------------------------------- */ armci_data_server(buffer); if(request->operation == QUIT) active = 0; break; case PTL_EVENT_UNLINK: // printf("captured an unlink event!!\n"); // portals_print_event_details(&ev); /* if((long) ev.md.user_ptr != request_buffer_cur_block) { printf("sanity check failed: user_ptr=%ld; cur_block=%ld\n",(long) ev.md.user_ptr, request_buffer_cur_block); armci_die("hummm ... unlink issue?",911); } */ portals_ds_requeue_md((long) ev.md.user_ptr); break; default: printf("unexpected event type %d in recvany\n"); Fatal_error(911); break; } } while(active); // flush out event q; the only thing that should remain is possibly 1 unlink event; while( (rc=PtlEQGet(request_eqh, &ev)) != PTL_EQ_EMPTY) { if(rc == PTL_OK) { if(ev.type != PTL_EVENT_UNLINK) { printf("%s: flushing request_eqh: event type=%d\n",Portals_ID(),ev.type); } else { portals_ds_requeue_md((long) ev.md.user_ptr); } } else if(rc == PTL_EQ_DROPPED) { printf("%s: eq dropped\n",Portals_ID()); } else { printf("%s: some error in PtlEQGet; err=%d\n",Portals_ID(),rc); Fatal_error(rc); } } return PTL_OK; } int portals_ds_finalize() { int i,rc; // unlink and request buffers for(i=0; itype, ev->offset, ev->mlength, ev->hdr_data, (long) ev->md.user_ptr); fflush(stdout); } int portals_ds_requeue_md(int i) { int rc; ptl_handle_me_t meh; ptl_handle_md_t mdh; ptl_process_id_t match_id; ptl_match_bits_t match_bits = MATCH_ALL_MBITS; ptl_match_bits_t ignore_bits = MATCH_ALL_IBITS; match_id.nid = PTL_NID_ANY; match_id.pid = PTL_PID_ANY; rc = portals_me_insert(matchall_meh,match_id,match_bits,ignore_bits,&meh); if(rc != PTL_OK) { printf("me insert failed in ds requeue md; err %d\n",rc); Fatal_error(rc); } rc = portals_md_attach(meh,request_buffer_md[i],PTL_UNLINK,&mdh); if(rc != PTL_OK) { printf("md attach failed in ds requeue md; err %d\n",rc); Fatal_error(rc); } request_buffer_meh[i] = meh; request_buffer_cur_block++; if(request_buffer_cur_block == PORTALS_NREQUEST_BUFFERS) request_buffer_cur_block=0; return PTL_OK; } int portals_create_matchall_me(ptl_handle_me_t* me_handle) { int rc; ptl_process_id_t match_id; ptl_match_bits_t match_bits = MATCH_ALL_MBITS; ptl_match_bits_t ignore_bits = MATCH_ALL_IBITS; match_id.nid = PTL_NID_ANY; match_id.pid = PTL_PID_ANY; rc = portals_me_attach(ds_nih,match_id,match_bits,ignore_bits,&matchall_meh); if (rc != PTL_OK) { printf("PtlMEAttachAny err %d in portals_create_melist\n",rc); return rc; } return rc; } void portals_ds_send_ack(ptl_process_id_t id, ptl_match_bits_t mbits) { portals_desc_t desc; # ifdef PORTALS_LIMIT_REMOTE_REQUESTS_BY_NODE static int ack = 0; desc.buffer = &ack; desc.length = sizeof(int); # else desc.buffer = NULL; desc.length = 0; # endif desc.id = id; desc.mbits = mbits | DS_RESPONSE_ACK; desc.hdr = mbits; desc.state = 0; desc.eqh = ds_eqh; desc.nih = ds_nih; portals_put(&desc); portals_wait(&desc); } void portals_ds_send_put(void *buffer, ptl_size_t length, ptl_process_id_t id, ptl_match_bits_t mbits) { portals_desc_t desc; desc.buffer = buffer; desc.length = length; desc.id = id; desc.mbits = mbits | DS_RESPONSE_PUT; desc.hdr = mbits; desc.state = 0; desc.eqh = ds_eqh; desc.nih = ds_nih; portals_put(&desc); portals_wait(&desc); } void portals_ds_get_from_cp(void *buffer, ptl_size_t length, ptl_process_id_t id, ptl_match_bits_t mbits) { portals_desc_t desc; desc.buffer = buffer; desc.length = length; desc.id = id; desc.mbits = mbits | DS_RESPONSE_GET; desc.hdr = mbits; desc.state = 0; desc.eqh = ds_eqh; desc.nih = ds_nih; portals_get(&desc); portals_wait(&desc); } #ifdef DDI static void ds_handler(DDI_Patch *request, ptl_process_id_t from) { int i,j,nr,nc; long array[10],*a; size_t size; char *data_ptr; portals_desc_t desc; ptl_event_t *ev = (ptl_event_t *) request->user_ptr; switch(request->oper) { case DDI_GET: // printf("%s received DDI_GET request of size %d\n",Portals_ID(),request->size); nr = request->ihi - request->ilo + 1; nc = request->jhi - request->jlo + 1; if(nr < 0 || nc < 0 || nr > 10 || nc > 1) { printf("test get dimension problem\n"); abort(); } if(nr*sizeof(long) != request->size) { printf("test get request size does not match\n"); abort(); } for(i=0,j=317; iinitiator; desc.mbits = ev->hdr_data | DS_RESPONSE_PUT; desc.hdr = ev->hdr_data; desc.state = 0; desc.eqh = ds_eqh; desc.nih = ds_nih; portals_put(&desc); portals_wait(&desc); break; case DDI_PUT: nr = request->ihi - request->ilo + 1; nc = request->jhi - request->jlo + 1; data_ptr = NULL; if(ev->mlength > sizeof(DDI_Patch)) { printf("recv'ed eager put - size %d\n",ev->mlength-sizeof(DDI_Patch)); data_ptr = (char *) request; data_ptr += sizeof(DDI_Patch); } if(request->size != ev->mlength-sizeof(DDI_Patch)) { printf("eager msg buffer length does not match request size %d\n",request->size); abort(); } a = (long *) data_ptr; for(i=0; iinitiator,ev->hdr_data); break; case DDI_QUIT: // printf("%s received DDI_QUIT request\n",Portals_ID()); portals_ds_send_ack(ev->initiator,ev->hdr_data); /* desc.buffer = NULL; desc.length = 0; desc.id = ev->initiator; desc.mbits = ev->hdr_data | DS_RESPONSE_ACK; desc.hdr = ev->hdr_data; desc.state = 0; portals_put(&desc); portals_wait(&desc); */ break; case DDI_MEMORY: DDI_Memory_server(request->size); portals_ds_send_ack(ev->initiator,ev->hdr_data); break; default: printf("%s unknown operation in request=%d\n",Portals_ID(),request->oper); abort(); break; } return; } #endif ga-5-3/armci/src-portals/pendbufs.c0000640005473000001440000006123311373305234016120 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if defined(PEND_BUFS) #include "pendbufs.h" #include "armcip.h" #include #include #include #include #define DEBUG_SERVER 0 /*-------------------Attributes-------------------------*/ /**Attributes to control buffer count and sizes. Implement this way to hide the global variables, and provide get/set methods.*/ #define NUM_ATTRIBUTES 4 #define ATTRIB_IMMBUF_LEN 0 #define ATTRIB_IMMBUF_NUM 1 #define ATTRIB_PNDBUF_LEN 2 #define ATTRIB_PNDBUF_NUM 3 /** List of hidden attributes and their operations. * @param attid IN Attribute id. Choose from the list above * @param gs IN Get(=0)/Set(=1) * @param v IN Value (used only when gs==1) * @return Value of the attribute on return */ static int att_ops(int attid, int gs, int v) { static not_first[NUM_ATTRIBUTES]; /*auto-init to zero*/ static val[NUM_ATTRIBUTES]; assert(attid>=0 && attidIMM_BUF_LEN*/ INIT=7, /**buf; proc_waitlist_t *info = &pbuf_proc_list_info[msginfo->from]; assert(msginfo->tag.imm_msg == 0); pbuf = _armci_serv_pendbuf_getbuf(); if(pbuf) { pbuf->status = INIT; pbuf->avail = 0; pbuf->vbuf = vbuf; memcpy(pbuf->buf, vbuf->buf, sizeof(request_header_t)+msginfo->dscrlen); /* pbuf_proc_list_info[msginfo->from].waiting_on=pbuf; */ pbuf->order_prev = info->order_tail; if(info->order_tail) info->order_tail->order_next = pbuf; info->order_tail = pbuf; if(!info->order_head) info->order_head = pbuf; } return pbuf; } /**Free a pending buffer * @param pbuf IN Pointer to Pending buffer to be freed * @return none */ static void _armci_serv_pendbuf_freebuf(pendbuf_t *pbuf){ const request_header_t *msginfo = (request_header_t *)pbuf->buf; proc_waitlist_t *info = &pbuf_proc_list_info[msginfo->from]; ARMCI_PR_DBG("enter",0); assert(pbuf != NULL); pbuf->avail=1; pbuf->status = -1; pbuf->vbuf = NULL; /* assert(info->waiting_on == pbuf); */ /* info->waiting_on = NULL; */ if(pbuf->order_prev) pbuf->order_prev->order_next = pbuf->order_next; if(pbuf->order_next) pbuf->order_next->order_prev = pbuf->order_prev; if(info->order_head == pbuf) { assert(pbuf->order_prev == NULL); info->order_head = pbuf->order_next; } if(info->order_tail == pbuf) { assert(pbuf->order_next == NULL); info->order_tail = pbuf->order_prev; } pbuf->order_prev = pbuf->order_next = NULL; /*not necessary here*/ _nPendBufsUsed -= 1; assert(_nPendBufsUsed>=0); ARMCI_PR_DBG("exit",0); } /** Implement ordering between messages. This function needs to be * implemented in conjunction with @_armci_serv_pendbuf_promote to * ensure ordered processing of messages. * @param vbuf IN Message in immediate buffer being checked * @return 1 if the message can be progressed (either in-place or * after copying to a pending buffer). 0 therwise. */ static int _armci_serv_pendbuf_can_progress(immbuf_t *vbuf) { const request_header_t *msginfo=(request_header_t*)vbuf->buf; const int proc = msginfo->from; const proc_waitlist_t *info = &pbuf_proc_list_info[proc]; if(_pbufOrder == ONE_PBUF_MESG) { /*Only one pending buffer used at any time*/ if(_nPendBufsUsed>0) return 0; return 1; } if(_pbufOrder == ONE_PBUF_MESG_PER_PROC) { /*Only one non-immediate mesg can be assigned to the pending buffers at any time*/ if(info->order_head || (info->immbuf_wlist_head && info->immbuf_wlist_head!=vbuf)) { return 0;/*other requests from this process remain*/ } if(!IS_IMM_MSG(*msginfo) && _nPendBufsUsed==PENDING_BUF_NUM) { return 0; /*This buffer needs a free pending buffer*/ } assert(info->n_pending == 0 || info->immbuf_wlist_head==vbuf); return 1; } if(_pbufOrder == ACC_NO_ORDER) { /*Messages are processed in-place in immediate buffers or issued into pending buffers for progress in order (like ONE_PBUF_PER_MESG). This rule relaxes ONE_PBUF_PER_MESG by allowing a sequence of ACCs to be processed in-place/issued without waiting for the prior ones to complete*/ int i, nwaiting_on, nacc; pendbuf_t *ptr; if(!IS_IMM_MSG(*msginfo) && _nPendBufsUsed==PENDING_BUF_NUM) { /* printf("%d(s): op=%d from=%d datalen=%d waiting for pending buffers\n",armci_me,msginfo->operation,msginfo->from,msginfo->tag.data_len); */ /* fflush(stdout); */ return 0; /*This buffer needs a free pending buffer*/ } #if 1 /*commented for now: it does work*/ if(IS_IMM_MSG(*msginfo) && ARMCI_ACC(msginfo->operation)) { return 1; } #endif if(info->immbuf_wlist_head && info->immbuf_wlist_head!=vbuf) { /* printf("%d(s): op=%d from=%d datalen=%d not queue head\n",armci_me,msginfo->operation,msginfo->from,msginfo->tag.data_len); */ /* fflush(stdout); */ return 0; /*in order issue*/ } if(!ARMCI_ACC(msginfo->operation)) { if(info->order_head) return 0; return 1; } assert(ARMCI_ACC(msginfo->operation)); for(ptr=info->order_head; ptr!=NULL; ptr=ptr->order_next) { request_header_t *m = (request_header_t *)ptr->buf; assert(m->from == msginfo->from); if(!ARMCI_ACC(m->operation)) break; } if(ptr != NULL) return 0; return 1; } if(_pbufOrder == PUTACC_SPLIT_ORDER) { if(!IS_IMM_MSG(*msginfo) && _nPendBufsUsed==PENDING_BUF_NUM) { return 0; /*This buffer needs a free pending buffer*/ } if(info->immbuf_wlist_head && info->immbuf_wlist_head!=vbuf) { return 0; } if(msginfo->operation!=PUT && !ARMCI_ACC(msginfo->operation)) { if(info->order_head) return 0; return 1; } #if 1 if(IS_IMM_MSG(*msginfo) && ARMCI_ACC(msginfo->operation)) { return 1; } #endif if(IS_IMM_MSG(*msginfo) && info->order_head) return 0; return 1; } armci_die("Unknown pbuf ordering rule",_pbufOrder); return 0; } /** Goes through the set of immediate buffers waiting to be processed * and completed, and identifies a buffer that can be processed * now. Removes it from the list and returns it. Promote also * considers availability of pending buffers if need be. * @return Pointer to buffer that can be processed now. NULL if none exists. */ static immbuf_t* _armci_serv_pendbuf_promote() { immbuf_t *immbuf = NULL; proc_waitlist_t *info; ARMCI_PR_DBG("enter",0); assert(_nPendBufsUsed>=0); if(!pbuf_ordering_plist_head) { return NULL; /*nothing to promote*/ } info = pbuf_ordering_plist_head; do { if(info->immbuf_wlist_head==NULL) { printf("%d(s): Why is info->immbuf_wlist_head NULL\n", armci_me); fflush(stdout); pause(); } assert(info->immbuf_wlist_head!=NULL); assert(info->n_pending>0); if(_armci_serv_pendbuf_can_progress(info->immbuf_wlist_head)) { immbuf = info->immbuf_wlist_head; info->immbuf_wlist_head = immbuf->immbuf_list_next; info->n_pending -= 1; immbuf->immbuf_list_next = NULL; if(!info->immbuf_wlist_head) { info->immbuf_wlist_tail = NULL; /*remove this proc from proc list*/ info->prev->next = info->next; info->next->prev = info->prev; if(pbuf_ordering_plist_head == info) { pbuf_ordering_plist_head = (info->next==info)?NULL:info->next; } info->prev = info->next = NULL; } break; } info = info->next; } while(info != pbuf_ordering_plist_head); if(DEBUG_SERVER) if(immbuf) { request_header_t *msginfo=(request_header_t*)immbuf->buf; printf("%d:: promoting a buffer immbuf=%p op=%d from=%d n_pending=%d\n", armci_me,immbuf,msginfo->operation,msginfo->from,info->n_pending); fflush(stdout); } ARMCI_PR_DBG("exit",0); return immbuf; } /** Enqueue a message. It could be an immediate message that cannot * make progress or a non-immediate message that cannot make progress * either due to ordering constraints or lack of pending buffers. * @param vbuf IN Immediate buffer to be enqueud * @return Pending buffer into which the message was enqueued. NULL * if no pending buffer was allocated (which is always the case for * immediate messages) */ static pendbuf_t* _armci_serv_pendbuf_enqueue(immbuf_t *vbuf) { request_header_t *msginfo=(request_header_t *)vbuf->buf; int from = msginfo->from; pendbuf_t *pbuf; proc_waitlist_t *info = &pbuf_proc_list_info[msginfo->from]; ARMCI_PR_DBG("enter",0); /* printf("%d: Entered serv_pbuf_enqueue\n", armci_me); */ pbuf=NULL; if(msginfo->tag.imm_msg) { assert(!_armci_serv_pendbuf_can_progress(vbuf)); } else if(_armci_serv_pendbuf_can_progress(vbuf)) { pbuf = _armci_serv_pendbuf_assignbuf(vbuf); assert(pbuf != NULL); /*can_progress() should ensure this*/ } if(pbuf == NULL) { /* printf("%d(s):: Enqueing op=%d imm=%d from %d. n_pending=%d\n", armci_me, msginfo->operation, msginfo->tag.imm_msg, msginfo->from,info->n_pending); */ /* fflush(stdout); */ vbuf->immbuf_list_next = NULL; assert(info->n_pending < IMM_BUF_NUM); /*How another message now?*/ info->n_pending += 1; if(!info->immbuf_wlist_head) { assert(!info->immbuf_wlist_tail); assert(!info->prev && !info->next); /*insert proc into proc list*/ if(!pbuf_ordering_plist_head) { pbuf_ordering_plist_head=info->next=info->prev=info; } else { info->next = pbuf_ordering_plist_head; info->prev = pbuf_ordering_plist_head->prev; pbuf_ordering_plist_head->prev->next = info; pbuf_ordering_plist_head->prev = info; } } /*insert vbuf into immbuf list for this proc*/ if(info->immbuf_wlist_tail) info->immbuf_wlist_tail->immbuf_list_next=vbuf; info->immbuf_wlist_tail = vbuf; if(!info->immbuf_wlist_head) info->immbuf_wlist_head = vbuf; } /* printf("%d: Leaving serv_pbuf_enqueue\n", armci_me); */ ARMCI_PR_DBG("exit",0); return pbuf; } /** Progress GET requests. * @param pbuf IN Pending buffer containing the GET request * @return none */ static void _armci_serv_pendbuf_progress_get(pendbuf_t *pbuf) { int index = (pbuf - serv_pendbuf_arr); request_header_t *msginfo = (request_header_t *)pbuf->buf; void *buffer =((char *)(msginfo+1)+msginfo->dscrlen); int *status = &pbuf->status; assert(sizeof(request_header_t)+msginfo->dscrlen+msginfo->datalendscrlen <= IMM_BUF_LEN) { /*Have the header and descriptor; go process*/ armci_complete_pendbuf(pbuf); *status = SEND_DATA_PENDING; } else { /*Need to get rest of descriptor*/ const int bytes = sizeof(request_header_t)+msginfo->dscrlen-IMM_BUF_LEN; #warning "PEND_BUFS: Abusing msginfo->tag.ack_ptr for GETS with large descriptors!" assert(msginfo->tag.ack_ptr != NULL); /*sanity check. Should point to tag.ack on the client side*/ void *lptr = ((char *)msginfo)+IMM_BUF_LEN; void *rptr = ((char *)msginfo->tag.ack_ptr) - (int)(&((request_header_t *)0)->tag.ack) + IMM_BUF_LEN; /* printf("%d(s):: GET getting rest of descriptor index=%d bytes=%d ptr=%p from=%d\n", */ /* armci_me,index,bytes,rptr,msginfo->from); */ /* fflush(stdout); */ assert(IMM_BUF_LEN+bytes < PENDING_BUF_LEN); armci_pbuf_start_get(rptr,lptr,bytes,msginfo->from,index); *status = RECV_DSCR_PENDING; } break; case RECV_DSCR_PENDING: armci_die("call_data_server should set status to RECV_DSCR_DONE before calling progress",*status); break; case SEND_DATA_PENDING: armci_die("call_data_server should set status to SEND_DATA_DONE before calling progress",*status); break; case RECV_DSCR_DONE: /* printf("%d(s):: GET. Done recving descriptor index=%d op=%d datalen=%d from=%d\n", */ /* armci_me,index,msginfo->operation,msginfo->datalen,msginfo->from); */ /* fflush(stdout); */ armci_complete_pendbuf(pbuf); *status = SEND_DATA_PENDING; break; case SEND_DATA_DONE: _armci_serv_pendbuf_freebuf(pbuf); break; case RECV_DATA_PENDING: case RECV_DATA_DONE: default: armci_die("pendbuf_progress_get: invalid status", *status); } } /** Progress PUT/ACC requests. * @param pbuf IN Pending buffer containing the PUT/ACC request * @return none */ static void _armci_serv_pendbuf_progress_putacc(pendbuf_t *pbuf) { int index = (pbuf - serv_pendbuf_arr); request_header_t *msginfo = (request_header_t *)pbuf->buf; void *buffer =((char *)(msginfo+1))+msginfo->dscrlen; int *status = &pbuf->status; assert(msginfo->operation==PUT || ARMCI_ACC(msginfo->operation)); assert(sizeof(request_header_t)+msginfo->dscrlen+msginfo->datalenoperation,msginfo->from); */ /* fflush(stdout); */ if(sizeof(request_header_t)+msginfo->dscrlen <= IMM_BUF_LEN) { /*Have the header and descriptor; go process*/ assert(sizeof(request_header_t)+msginfo->dscrlen+msginfo->tag.data_len < PENDING_BUF_LEN); armci_pbuf_start_get(msginfo->tag.data_ptr,buffer,msginfo->tag.data_len, msginfo->from, index); /* printf("%d(s): PUT/ACC getting data. pbuf_num=%d data_ptr=%p data_len=%d bytes=%d\n", armci_me,index,msginfo->tag.data_ptr, msginfo->tag.data_len,msginfo->bytes); */ *status = RECV_DATA_PENDING; } else { /*Need to get rest of descriptor*/ const int bytes = sizeof(request_header_t)+msginfo->dscrlen-IMM_BUF_LEN; #warning "PEND_BUFS: Abusing msginfo->tag.ack_ptr for GETS with large descriptors!" assert(msginfo->tag.ack_ptr != NULL); /*sanity check. Should point to tag.ack on the client side*/ void *lptr = ((char *)msginfo)+IMM_BUF_LEN; void *rptr = ((char *)msginfo->tag.ack_ptr) - (int)(&((request_header_t *)0)->tag.ack) + IMM_BUF_LEN; /* printf("%d(s):: PUT getting rest of descriptor index=%d bytes=%d ptr=%p from=%d\n", */ /* armci_me,index,bytes,rptr,msginfo->from); */ /* fflush(stdout); */ assert(IMM_BUF_LEN+bytes < PENDING_BUF_LEN); armci_pbuf_start_get(rptr,lptr,bytes,msginfo->from,index); *status = RECV_DSCR_PENDING; } break; case RECV_DSCR_PENDING: armci_die("call_data_server should set status to RECV_DSCR_DONE before calling progress",*status); break; case RECV_DATA_PENDING: armci_die("call_data_server should set status to RECV_DONE before calling progress",*status); break; case RECV_DSCR_DONE: assert(sizeof(request_header_t)+msginfo->dscrlen+msginfo->tag.data_len < PENDING_BUF_LEN); armci_pbuf_start_get(msginfo->tag.data_ptr,buffer,msginfo->tag.data_len, msginfo->from, index); /* printf("%d(s): PUT/ACC getting data. pbuf_num=%d data_ptr=%p data_len=%d bytes=%d\n", armci_me,index,msginfo->tag.data_ptr, msginfo->tag.data_len,msginfo->bytes); */ *status = RECV_DATA_PENDING; break; case RECV_DATA_DONE: /* printf("%d(s):: Done PUT/ACC with buf index=%d op=%d datalen=%d from=%d\n", */ /* armci_me,index,msginfo->operation,msginfo->datalen,msginfo->from); */ /* fflush(stdout); */ if(msginfo->operation == PUT && pbuf->order_prev!=NULL) { assert(pbuf->commit_me == 0); /*Why called so many times in thie state?*/ pbuf->commit_me = 1; break; } pbuf->commit_me = 0; armci_complete_pendbuf(pbuf); _armci_serv_pendbuf_freebuf(pbuf); break; case SEND_DATA_PENDING: case SEND_DATA_DONE: default: armci_die("pendbuf_progress_putacc: invalid status", *status); } } /** Make progress on processing a pending buffer. This function, also * ensures any other waiting messages get processed if they can * be. Thus, progress and eventual termination is guaranteed by this * function. * @param _pbuf IN Pending buffer to make progress on * @return none */ static void _armci_serv_pendbuf_progress(pendbuf_t *_pbuf){ request_header_t *msginfo = (request_header_t *)_pbuf->buf; immbuf_t *vbuf = _pbuf->vbuf; pendbuf_t *pbuf = _pbuf; assert(pbuf->vbuf!=NULL); do { if(vbuf && !IS_IMM_MSG(*msginfo)) { assert(pbuf->vbuf == vbuf); } /* printf("%d(s):: progressing op=%d imm=%d from=%d datalen=%d pbuf=%p vbuf=%p n_pending=%d\n", armci_me, */ /* msginfo->operation,msginfo->tag.imm_msg,msginfo->from,msginfo->datalen, pbuf,vbuf,pbuf_proc_list_info[msginfo->from].n_pending); */ /* fflush(stdout); */ if(IS_IMM_MSG(*msginfo)) { armci_complete_immbuf(vbuf); } else { /*non-immediate message*/ proc_waitlist_t* info = &pbuf_proc_list_info[msginfo->from]; do { assert(pbuf->vbuf == vbuf); if(msginfo->operation == PUT || ARMCI_ACC(msginfo->operation)) { _armci_serv_pendbuf_progress_putacc(pbuf); } else if (msginfo->operation == GET) { _armci_serv_pendbuf_progress_get(pbuf); } else { armci_die("pending buffer processing for this op not yet implemented", msginfo->operation); } pbuf = info->order_head; vbuf = pbuf ? pbuf->vbuf : NULL; } while(info->order_head && info->order_head->commit_me); } /* sleep(2); */ vbuf = _armci_serv_pendbuf_promote(); if(vbuf) { msginfo = (request_header_t *)vbuf->buf; if(!msginfo->tag.imm_msg) { pbuf = _armci_serv_pendbuf_assignbuf(vbuf); assert(pbuf != NULL); } } } while(vbuf != NULL); } /*----------------External functions--------------------*/ /** Initialize array of pending buffers * @return none */ void armci_pendbuf_init() { int i; ARMCI_PR_DBG("enter",0); /* bzero(serv_pendbuf_arr, sizeof(pendbuf_t)*PENDING_BUF_NUM); */ for(i=0; ibuf; bzero(pbuf, sizeof(pendbuf_t)); pbuf->buf = buf; pbuf->avail=1; } pbuf_ordering_plist_head=NULL; pbuf_proc_list_info = (proc_waitlist_t *)malloc(sizeof(proc_waitlist_t)*armci_nproc); assert(pbuf_proc_list_info != NULL); bzero(pbuf_proc_list_info, sizeof(proc_waitlist_t)*armci_nproc); ARMCI_PR_DBG("exit",0); } void armci_pendbuf_service_req(immbuf_t *immbuf) { pendbuf_t *pbuf; request_header_t *msginfo=(request_header_t*)immbuf->buf; if(IS_IMM_MSG(*msginfo) && _armci_serv_pendbuf_can_progress(immbuf)) { /* printf("%d: msg vbuf=%p op=%d from=%d imm=%d datalen=%d bytes=%d data_ptr=%p can progress. Completing it now!\n", */ /* armci_me, vbuf, msginfo->operation, msginfo->from, msginfo->tag.imm_msg,msginfo->datalen,msginfo->bytes,msginfo->tag.data_ptr); */ /* fflush(stdout); */ armci_complete_immbuf(immbuf); } else if(pbuf = _armci_serv_pendbuf_enqueue(immbuf)) { /* printf("%d: msg vbuf=%p op=%d from=%d imm=%d datalen=%d bytes=%d data_ptr=%p got pending buf. Progressing it!\n", */ /* armci_me, vbuf, msginfo->operation, msginfo->from, msginfo->tag.imm_msg,msginfo->datalen,msginfo->bytes,msginfo->tag.data_ptr); */ /* fflush(stdout); */ _armci_serv_pendbuf_progress(pbuf); } else { /* printf("%d: msg vbuf=%p op=%d from=%d imm=%d datalen=%d bytes=%d data_ptr=%p in waitlist!\n", armci_me, vbuf, msginfo->operation, msginfo->from, msginfo->tag.imm_msg,msginfo->datalen,msginfo->bytes,msginfo->tag.data_ptr); */ /* fflush(stdout); */ } } /**Network layer reporting to split buffers code that a put completed * on a pending buffer. * @param pbufid IN Pending buffer id (specified when starting a * put). * @return void */ void armci_pendbuf_done_put(int pbufid) { assert(pbufid>=0 && pbufid=0 && pbufidstatus) { case RECV_DSCR_PENDING: pbuf->status = RECV_DSCR_DONE; break; case RECV_DATA_PENDING: pbuf->status = RECV_DATA_DONE; break; default: armci_die("Reporting get done on buf with inappropriate status",pbufid); } _armci_serv_pendbuf_progress(pbuf); } #endif /*PEND_BUFS*/ ga-5-3/armci/src-portals/parmci.h0000640005473000001440000000667411622314656015607 0ustar d3n000users#include "armci.h" int PARMCI_AccV (int op, void *scale, armci_giov_t * darr, int len, int proc); void PARMCI_Barrier (); int PARMCI_AccS (int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc); void PARMCI_Finalize (); int PARMCI_NbPut (void *src, void *dst, int bytes, int proc, armci_hdl_t * nb_handle); int PARMCI_GetValueInt (void *src, int proc); int PARMCI_Put_flag (void *src, void *dst, int bytes, int *f, int v, int proc); int PARMCI_NbGetS (void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t * nb_handle); void *PARMCI_Malloc_local (armci_size_t bytes); int PARMCI_Free_local (void *ptr); int PARMCI_Get (void *src, void *dst, int bytes, int proc); int PARMCI_Put (void *src, void *dst, int bytes, int proc); int PARMCI_Destroy_mutexes (); int PARMCI_GetS (void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc); int PARMCI_NbAccV (int op, void *scale, armci_giov_t * darr, int len, int proc, armci_hdl_t * nb_handle); float PARMCI_GetValueFloat (void *src, int proc); int PARMCI_Malloc (void **ptr_arr, armci_size_t bytes); int PARMCI_NbAccS (int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t * nb_handle); int PARMCI_PutS (void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc); void *PARMCI_Memat (armci_meminfo_t * meminfo, long offset); int PARMCI_PutV (armci_giov_t * darr, int len, int proc); int PARMCI_Free (void *ptr); int PARMCI_Init_args (int *argc, char ***argv); int PARMCI_PutValueInt (int src, void *dst, int proc); void PARMCI_Memget (size_t bytes, armci_meminfo_t * meminfo, int memflg); void PARMCI_AllFence (); int PARMCI_NbPutV (armci_giov_t * darr, int len, int proc, armci_hdl_t * nb_handle); int PARMCI_PutValueDouble (double src, void *dst, int proc); int PARMCI_GetV (armci_giov_t * darr, int len, int proc); int PARMCI_Test (armci_hdl_t * nb_handle); void PARMCI_Unlock (int mutex, int proc); void PARMCI_Fence (int proc); int PARMCI_Create_mutexes (int num); int PARMCI_PutS_flag (void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc); int PARMCI_WaitProc (int proc); void PARMCI_Lock (int mutex, int proc); double PARMCI_GetValueDouble (void *src, int proc); int PARMCI_NbGetV (armci_giov_t * darr, int len, int proc, armci_hdl_t * nb_handle); int PARMCI_Rmw (int op, int *ploc, int *prem, int extra, int proc); int PARMCI_Init (); int PARMCI_WaitAll (); int PARMCI_NbGet (void *src, void *dst, int bytes, int proc, armci_hdl_t * nb_handle); int PARMCI_PutValueFloat (float src, void *dst, int proc); int PARMCI_NbPutS (void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t * nb_handle); int PARMCI_PutS_flag_dir (void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc); int PARMCI_PutValueLong (long src, void *dst, int proc); int PARMCI_Wait (armci_hdl_t * nb_handle); long PARMCI_GetValueLong (void *src, int proc); ga-5-3/armci/src-portals/shmalloc.c0000640005473000001440000000467011300316052016104 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: shmalloc.c,v 1.10 2002-06-20 23:34:17 vinod Exp $ */ #include #include #include "armcip.h" #include "message.h" #include "kr_malloc.h" static long *offset_arr; void armci_shmalloc_exchange_offsets(context_t *ctx_local) { void **ptr_arr; void *ptr; armci_size_t bytes = 128; int i; ptr_arr = (void**)malloc(armci_nproc*sizeof(void*)); offset_arr = (long*) malloc(armci_nproc*sizeof(long)); if(!ptr_arr || !offset_arr) armci_die("armci_shmalloc_get_offsets: malloc failed", 0); /* get memory with same size on all procs */ ptr = kr_malloc(bytes, ctx_local); if(!ptr) armci_die("armci_shmalloc_get_offsets: kr_malloc failed",bytes); bzero((char*)ptr_arr,armci_nproc*sizeof(void*)); ptr_arr[armci_me] = ptr; /* now combine individual addresses into a single array */ armci_exchange_address(ptr_arr, armci_nproc); /* identify offets */ for (i=0; i #include #include "armcip.h" #include "copy.h" #include "acc.h" #include "memlock.h" #include #include #define DATA_SERVER_ 1 #ifdef ORNL_USE_DS_FOR_REMOTE_GETS #define DATA_SERVER_GET_ 1 #else #define DATA_SERVER_GET_ 0 #endif #define ARMCI_OP_2D(op, scale, proc, src, dst, bytes, count, src_stride, dst_stride,lockit)\ if(op == GET || op ==PUT)\ armci_copy_2D(op, proc, src, dst, bytes, count, src_stride,dst_stride);\ else if(count==1) armci_acc_1D(op, scale, proc, src, dst, bytes,lockit);\ else\ armci_acc_2D(op, scale, proc, src, dst, bytes, count, src_stride,dst_stride,lockit) /* macro supports run-time selection of request sending scheme */ #if defined(CLIENT_BUF_BYPASS) #define CAN_REQUEST_DIRECTLY _armci_bypass #else # if defined(HITACHI) # define CAN_REQUEST_DIRECTLY 0 # else # define CAN_REQUEST_DIRECTLY 1 # endif #endif #define PREPROCESS_STRIDED(tmp_count) {\ tmp_count=0;\ if(stride_levels) \ for(;stride_levels;stride_levels--)if(count[stride_levels]>1)break;\ if(stride_levels&&(count[0]==src_stride_arr[0]&&count[0]==dst_stride_arr[0])){\ tmp_count=seg_count[1];\ count = seg_count+1;\ seg_count[1] = seg_count[0] * seg_count[1];\ stride_levels --;\ src_stride_arr ++; dst_stride_arr++ ;\ }\ } #define POSTPROCESS_STRIDED(tmp_count) if(tmp_count)seg_count[1]=tmp_count #define SERVER_GET 1 #define SERVER_NBGET 2 #define DIRECT_GET 3 #define DIRECT_NBGET 4 #define SERVER_PUT 5 #define SERVER_NBPUT 6 #define DIRECT_PUT 7 #define DIRECT_NBPUT 8 # define DO_FENCE(__proc,__prot) if(__prot==SERVER_GET);\ else if(__prot==SERVER_PUT);\ else if(__prot==DIRECT_GET || __prot==DIRECT_NBGET){\ if(armci_prot_switch_fence[__proc]==SERVER_PUT)\ ARMCI_DoFence(__proc);\ }\ else if(__prot==DIRECT_PUT || __prot==DIRECT_NBPUT){\ if(armci_prot_switch_fence[__proc]==SERVER_PUT)\ ARMCI_DoFence(__proc);\ }\ else;\ armci_prot_switch_fence[__proc]=__prot #ifndef REGIONS_REQUIRE_MEMHDL # define ARMCI_MEMHDL_T void #endif ARMCI_MEMHDL_T *mhloc=NULL,*mhrem=NULL; #ifdef REGIONS_REQUIRE_MEMHDL int armci_region_both_found_hndl(void *loc, void *rem, int size, int node, ARMCI_MEMHDL_T **loc_memhdl,ARMCI_MEMHDL_T **rem_memhdl); # define ARMCI_REGION_BOTH_FOUND(_s,_d,_b,_p) \ armci_region_both_found_hndl((_s),(_d),(_b),(_p),&mhloc,&mhrem) #else # define ARMCI_REGION_BOTH_FOUND(_s,_d,_b,_p) \ armci_region_both_found((_s),(_d),(_b),(_p)) #endif #ifdef HAS_RDMA_GET # ifdef REGIONS_REQUIRE_MEMHDL void armci_client_direct_get(int p, void *src_buf, void *dst_buf, int len, void** cptr,int nbtag,ARMCI_MEMHDL_T *lochdl,ARMCI_MEMHDL_T *remhdl); # else void armci_client_direct_get(int p, void *src_buf, void *dst_buf, int len, void** contextptr,int nbtag,void *mhdl,void *mhdl1); # endif # define ARMCI_NBREM_GET(_p,_s,_sst,_d,_dst,_cou,_lev,_hdl) \ armci_client_direct_get((_p),(_s),(_d),(_cou)[0],&((_hdl)->cmpl_info),(_hdl)->tag,(void *)mhloc,(void *)mhrem); \ # define ARMCI_REM_GET(_p,_s,_sst,_d,_dst,_cou,_lev,_hdl) \ armci_client_direct_get((_p),(_s),(_d),(_cou)[0],NULL,0,(void *)mhloc,(void *)mhrem); \ #else # define ARMCI_REM_GET(_p,_s,_sst,_d,_dst,_cou,_lev,_hdl) \ armci_rem_get((_p),(_s),(_sst),(_d),(_dst),(_cou),(_lev),(_hdl),(void *)mhloc,(void *)mhrem) # define ARMCI_NBREM_GET ARMCI_REM_GET #endif extern int* armci_prot_switch_fence; extern int armci_prot_switch_preproc; extern int armci_prot_switch_preop; int armci_iwork[MAX_STRIDE_LEVEL]; /*\ 2-dimensional array copy \*/ static void armci_copy_2D(int op, int proc, void *src_ptr, void *dst_ptr, int bytes, int count, int src_stride, int dst_stride) { int armci_th_idx = ARMCI_THREAD_IDX; #ifdef LAPI2__ # define COUNT 1 #else # define COUNT count #endif #ifdef __crayx1 int shmem = 1; #else int shmem = SAMECLUSNODE(proc); #endif if(shmem) { /* data is in local/shared memory -- can use memcpy */ // printf("%s: shmem==true; count==%d\n",Portals_ID(),count); if(count==1){ armci_copy(src_ptr, dst_ptr, bytes); // printf("%s: shmem==true; finished\n",Portals_ID(),count); }else { char *ps=(char*)src_ptr; char *pd=(char*)dst_ptr; int j; for (j = 0; j < count; j++){ bcopy(ps,pd,bytes); ps += src_stride; pd += dst_stride; } } } else { /* data not in local/shared memory-access through global address space*/ if(op==PUT){ printf("%s: pre UPDATE_FENCE_STATE\n",Portals_ID()); UPDATE_FENCE_STATE(proc, PUT, COUNT); printf("%s: post UPDATE_FENCE_STATE\n",Portals_ID()); #ifdef LAPI SET_COUNTER(ack_cntr[armci_th_idx],COUNT); #endif if(count==1){ armci_put(src_ptr, dst_ptr, bytes, proc); }else{ armci_put2D(proc, bytes, count, src_ptr, src_stride, dst_ptr, dst_stride); } }else{ #ifdef LAPI SET_COUNTER(get_cntr[armci_th_idx], COUNT); #endif if(count==1){ armci_get(src_ptr, dst_ptr, bytes, proc); }else{ armci_get2D(proc, bytes, count, src_ptr, src_stride, dst_ptr, dst_stride); } } } } #if (defined(CRAY) && !defined(__crayx1)) || defined(FUJITSU) #ifdef CRAY # define DAXPY SAXPY #else # define DAXPY daxpy_ #endif static int ONE=1; #define THRESH_ACC 32 static void daxpy_2d_(void* alpha, int *rows, int *cols, void *a, int *ald, void* b, int *bld) { int c,r; double *A = (double*)a; double *B = (double*)b; double Alpha = *(double*)alpha; if(*rows < THRESH_ACC) for(c=0;c<*cols;c++) for(r=0;r<*rows;r++) A[c* *ald+ r] += Alpha * B[c* *bld+r]; else for(c=0;c<*cols;c++) DAXPY(rows, alpha, B + c* *bld, &ONE, A + c* *ald, &ONE); } #endif void armci_acc_1D(int op, void *scale, int proc, void *src, void *dst, int bytes, int lockit) { int rows; void (ATR *func)(void*, void*, void*, int*); ARMCI_PR_DBG("enter",0); switch (op){ case ARMCI_ACC_INT: rows = bytes/sizeof(int); func = I_ACCUMULATE_1D; break; case ARMCI_ACC_LNG: rows = bytes/sizeof(long); func = L_ACCUMULATE_1D; break; case ARMCI_ACC_DBL: rows = bytes/sizeof(double); func = D_ACCUMULATE_1D; break; case ARMCI_ACC_DCP: rows = bytes/(2*sizeof(double)); func = Z_ACCUMULATE_1D; break; case ARMCI_ACC_CPL: rows = bytes/(2*sizeof(float)); func = C_ACCUMULATE_1D; break; case ARMCI_ACC_FLT: rows = bytes/sizeof(float); func = F_ACCUMULATE_1D; break; default: armci_die("ARMCI accumulate: operation not supported",op); func = F_ACCUMULATE_1D; /*avoid compiler whining */ } if(lockit){ ARMCI_LOCKMEM(dst, bytes + (char*)dst, proc); } func(scale, dst, src, &rows); if(lockit)ARMCI_UNLOCKMEM(proc); ARMCI_PR_DBG("exit",0); } /*\ 2-dimensional accumulate \*/ void armci_acc_2D(int op, void* scale, int proc, void *src_ptr, void *dst_ptr, int bytes, int cols, int src_stride, int dst_stride, int lockit) { int rows, lds, ldd, span; void (ATR *func)(void*, int*, int*, void*, int*, void*, int*); ARMCI_PR_DBG("enter",0); /* if((long)src_ptr%ALIGN)armci_die("src not aligned",(long)src_ptr); if((long)dst_ptr%ALIGN)armci_die("src not aligned",(long)dst_ptr); */ switch (op){ case ARMCI_ACC_INT: rows = bytes/sizeof(int); ldd = dst_stride/sizeof(int); lds = src_stride/sizeof(int); func = I_ACCUMULATE_2D; break; case ARMCI_ACC_LNG: rows = bytes/sizeof(long); ldd = dst_stride/sizeof(long); lds = src_stride/sizeof(long); func = L_ACCUMULATE_2D; break; case ARMCI_ACC_DBL: rows = bytes/sizeof(double); ldd = dst_stride/sizeof(double); lds = src_stride/sizeof(double); func = D_ACCUMULATE_2D; break; case ARMCI_ACC_DCP: rows = bytes/(2*sizeof(double)); ldd = dst_stride/(2*sizeof(double)); lds = src_stride/(2*sizeof(double)); func = Z_ACCUMULATE_2D; break; case ARMCI_ACC_CPL: rows = bytes/(2*sizeof(float)); ldd = dst_stride/(2*sizeof(float)); lds = src_stride/(2*sizeof(float)); func = C_ACCUMULATE_2D; break; case ARMCI_ACC_FLT: rows = bytes/sizeof(float); ldd = dst_stride/sizeof(float); lds = src_stride/sizeof(float); func = F_ACCUMULATE_2D; break; case ARMCI_ACC_RA: rows = bytes/sizeof(long); ldd = dst_stride/sizeof(long); lds = src_stride/sizeof(long); func = RA_ACCUMULATE_2D; break; default: armci_die("ARMCI accumulate: operation not supported",op); func = F_ACCUMULATE_2D; /*avoid compiler whining */ } if(lockit){ span = cols*dst_stride; ARMCI_LOCKMEM(dst_ptr, span + (char*)dst_ptr, proc); } func(scale, &rows, &cols, dst_ptr, &ldd, src_ptr, &lds); if(lockit)ARMCI_UNLOCKMEM(proc); ARMCI_PR_DBG("exit",0); } /*\ compute range of strided data AND lock it \*/ static void armci_lockmem_patch(void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, int proc) { long span = count[stride_levels]; ARMCI_PR_DBG("enter",0); span *= dst_stride_arr[stride_levels-1]; /* lock region of remote memory */ ARMCI_LOCKMEM(dst_ptr, span + (char*)dst_ptr, proc); ARMCI_PR_DBG("exit",0); } /*\ strided accumulate on top of remote memory copy: * copies remote data to local buffer, accumulates, puts it back * Note: if we are here then remote patch must fit in the ARMCI buffer \*/ int armci_acc_copy_strided(int optype, void* scale, int proc, void* src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels) { void *buf_ptr = armci_internal_buffer; int rc, i, *buf_stride_arr = armci_iwork; ARMCI_PR_DBG("enter",0); armci_lockmem_patch(dst_ptr,dst_stride_arr, count, stride_levels, proc); /* setup stride array for internal buffer */ buf_stride_arr[0]=count[0]; for(i=0; i< stride_levels; i++) { buf_stride_arr[i+1]= buf_stride_arr[i]*count[i+1]; } /* get remote data to local buffer */ rc = armci_op_strided(GET, scale, proc, dst_ptr, dst_stride_arr, buf_ptr, buf_stride_arr, count, stride_levels, 0,NULL); if(rc) { ARMCI_UNLOCKMEM(proc); return(rc); } /* call local accumulate with lockit=0 (we locked it already) and proc=me */ rc = armci_op_strided(optype, scale, armci_me, src_ptr, src_stride_arr, buf_ptr,buf_stride_arr, count, stride_levels,0,NULL); if(rc) { ARMCI_UNLOCKMEM(proc); return(rc); } /* put data back from the buffer to remote location */ rc = armci_op_strided(PUT, scale, proc, buf_ptr, buf_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels,0,NULL); FENCE_NODE(proc); /* make sure put completes before unlocking */ ARMCI_UNLOCKMEM(proc); /* release memory lock */ ARMCI_PR_DBG("exit",0); return(rc); } /*\ Strided operation \*/ int armci_op_strided(int op, void* scale, int proc,void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, int lockit, armci_ihdl_t nb_handle) { char *src = (char*)src_ptr, *dst=(char*)dst_ptr; int s2, s3, i,j, unlockit=0; int total_of_2D; int index[MAX_STRIDE_LEVEL], unit[MAX_STRIDE_LEVEL]; ARMCI_PR_DBG("enter",op); # if defined(ACC_COPY) # ifdef ACC_SMP if(ARMCI_ACC(op) && !(SAMECLUSNODE(proc)) ) # else if ( ARMCI_ACC(op) && proc!=armci_me) # endif /* copy remote data, accumulate, copy back*/ return (armci_acc_copy_strided(op,scale, proc, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels)); else; /* do it directly through shared/local memory */ # endif if(ARMCI_ACC(op) && (stride_levels>2) && lockit){ /* we need one lock operation only - must be done outside 2d acc */ armci_lockmem_patch(dst_ptr,dst_stride_arr, count, stride_levels, proc); unlockit=1; lockit =0; } /* if(proc!=armci_me) INTR_OFF;*/ if(armci_me>=0 && !SAMECLUSNODE(proc)) { printf("%s network_strided not supported (in op_strided)\n",Portals_ID()); abort(); armci_network_strided(op,scale,proc,src_ptr,src_stride_arr,dst_ptr, dst_stride_arr,count,stride_levels,nb_handle); } else { // printf("%s in large switch stmt in op_strided (stride_levels=%d)\n",Portals_ID(),stride_levels); switch (stride_levels) { case 0: /* 1D copy */ ARMCI_OP_2D(op, scale, proc, src_ptr, dst_ptr, count[0], 1, count[0], count[0], lockit); break; case 1: /* 2D op */ ARMCI_OP_2D(op, scale, proc, src_ptr, dst_ptr, count[0], count[1], src_stride_arr[0], dst_stride_arr[0], lockit); break; case 2: /* 3D op */ for (s2= 0; s2 < count[2]; s2++){ /* 2D copy */ ARMCI_OP_2D(op, scale, proc, src+s2*src_stride_arr[1], dst+s2*dst_stride_arr[1], count[0], count[1], src_stride_arr[0], dst_stride_arr[0], lockit ); } break; case 3: /* 4D op */ for(s3=0; s3< count[3]; s3++){ src = (char*)src_ptr + src_stride_arr[2]*s3; dst = (char*)dst_ptr + dst_stride_arr[2]*s3; for (s2= 0; s2 < count[2]; s2++){ /* 3D copy */ ARMCI_OP_2D(op, scale, proc, src+s2*src_stride_arr[1], dst+s2*dst_stride_arr[1], count[0], count[1],src_stride_arr[0], dst_stride_arr[0],lockit); } } break; default: /* N-dimensional */ { /* stride_levels is not the same as ndim. it is ndim-1 * For example a 10x10x10... array, suppose the datatype is byte * the stride_arr is 10, 10x10, 10x10x10 .... */ index[2] = 0; unit[2] = 1; total_of_2D = count[2]; for(j=3; j<=stride_levels; j++) { index[j] = 0; unit[j] = unit[j-1] * count[j-1]; total_of_2D *= count[j]; } for(i=0; i= count[j]) index[j] = 0; } ARMCI_OP_2D(op, scale, proc, src, dst, count[0], count[1], src_stride_arr[0], dst_stride_arr[0], lockit); } } } } // ends else block // printf("%s after switch stmt; prior to fence/lock\n",Portals_ID()); if(unlockit){ # if defined(ACC_COPY) FENCE_NODE(proc); # endif ARMCI_UNLOCKMEM(proc); /* release memory lock */ } // printf("%s after fence/lock; leaving op_strided\n",Portals_ID()); ARMCI_PR_DBG("exit",op); return 0; } int PARMCI_PutS( void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ) { int rc=0, direct=1; int *count=seg_count, tmp_count=0; ARMCI_PR_DBG("enter",proc); if(src_ptr == NULL || dst_ptr == NULL) return FAIL; if(count[0]<0)return FAIL3; if(stride_levels <0 || stride_levels > MAX_STRIDE_LEVEL) return FAIL4; if(proc<0)return FAIL5; ORDER(PUT,proc); /* ensure ordering */ PREPROCESS_STRIDED(tmp_count); #if DATA_SERVER_ if(stride_levels) direct=SAMECLUSNODE(proc); direct=SAMECLUSNODE(proc); #endif // printf("%s direct=%d, proc=%d\n",Portals_ID(),direct,proc); if(!direct){ DO_FENCE(proc,SERVER_PUT); // printf("%s calling pack_strided in PARMCI_PutS\n",Portals_ID()); rc = armci_pack_strided(PUT, NULL, proc, src_ptr, src_stride_arr,dst_ptr, dst_stride_arr, count, stride_levels, NULL, -1, -1, -1,NULL); } else { if(!SAMECLUSNODE(proc))DO_FENCE(proc,DIRECT_PUT); // printf("%s calling op_strided in PARMCI_PutS\n",Portals_ID()); rc = armci_op_strided( PUT, NULL, proc, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr,count,stride_levels, 0,NULL); } POSTPROCESS_STRIDED(tmp_count); ARMCI_PR_DBG("exit",proc); if(rc) return FAIL6; else return 0; } int PARMCI_PutS_flag( void* src_ptr, /* pointer to 1st segment at source */ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination */ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level, count[0] = #bytes */ int stride_levels, /* number of stride levels */ int *flag, /* pointer to remote flag */ int val, /* value to set flag upon completion of data transfer */ int proc /* remote process(or) ID */ ) { int bytes; /* Put local data on remote processor */ PARMCI_PutS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); /* Send signal to remote processor that data transfer has * been completed. */ bytes = sizeof(int); ARMCI_Put(&val, flag, bytes, proc); return 1; } int PARMCI_Put_flag(void *src, void* dst,int bytes,int *f,int v,int proc) { return PARMCI_PutS_flag(src, NULL, dst, NULL, &bytes, 0, f, v, proc); } int PARMCI_PutS_flag_dir(void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int seg_count[], int stride_levels, int *flag, int val, int proc) { return PARMCI_PutS_flag(src_ptr, src_stride_arr,dst_ptr,dst_stride_arr, seg_count, stride_levels, flag, val, proc); } int PARMCI_GetS( void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ) { int rc,direct=1; int *count=seg_count, tmp_count=0; ARMCI_PR_DBG("enter",proc); if(src_ptr == NULL || dst_ptr == NULL) return FAIL; if(seg_count[0]<0)return FAIL3; if(stride_levels <0 || stride_levels > MAX_STRIDE_LEVEL) return FAIL4; if(proc<0||proc>=armci_nproc){printf("\n%d:%s:proc=%d",armci_me,FUNCTION_NAME,proc);fflush(stdout);return FAIL5;} ORDER(GET,proc); /* ensure ordering */ PREPROCESS_STRIDED(tmp_count); #if DATA_SERVER_GET_ if(stride_levels)direct=SAMECLUSNODE(proc); direct=SAMECLUSNODE(proc); #endif if(!direct){ DO_FENCE(proc,SERVER_GET); rc = armci_pack_strided(GET, NULL, proc, src_ptr, src_stride_arr, dst_ptr,dst_stride_arr,count,stride_levels, NULL,-1,-1,-1,NULL); }else{ if(!SAMECLUSNODE(proc))DO_FENCE(proc,DIRECT_GET); rc = armci_op_strided(GET, NULL, proc, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr,count, stride_levels,0,NULL); } POSTPROCESS_STRIDED(tmp_count); ARMCI_PR_DBG("exit",proc); if(rc) return FAIL6; else return 0; } int PARMCI_AccS( int optype, /* operation */ void *scale, /* scale factor x += scale*y */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ) { int rc, direct=1; int *count=seg_count, tmp_count=0; ARMCI_PR_DBG("enter",proc); if(src_ptr == NULL || dst_ptr == NULL) return FAIL; if(src_stride_arr == NULL || dst_stride_arr ==NULL) return FAIL2; if(count[0]<0)return FAIL3; if(stride_levels <0 || stride_levels > MAX_STRIDE_LEVEL) return FAIL4; if(proc<0)return FAIL5; ORDER(optype,proc); /* ensure ordering */ PREPROCESS_STRIDED(tmp_count); #if DATA_SERVER_ direct=SAMECLUSNODE(proc); #endif # if defined(ACC_COPY) && !defined(ACC_SMP) if(armci_me != proc) direct=0; # endif if(direct) rc = armci_op_strided(optype,scale, proc, src_ptr, src_stride_arr,dst_ptr, dst_stride_arr, count, stride_levels,1,NULL); else{ DO_FENCE(proc,SERVER_PUT); rc = armci_pack_strided(optype,scale,proc,src_ptr, src_stride_arr,dst_ptr, dst_stride_arr,count,stride_levels,NULL,-1,-1,-1,NULL); } POSTPROCESS_STRIDED(tmp_count); ARMCI_PR_DBG("exit",proc); if(rc) return FAIL6; else return 0; } /* whatever original put and get functions were here have been replaced with the proper ones from the main armci branch. the old functions were entirely responsible for causing the test_vector_acc test to fail in test.x */ int PARMCI_Put(void *src, void* dst, int bytes, int proc) { int rc=0; //ARMCI_PROFILE_START_STRIDED(&bytes, 0, proc, ARMCI_PROF_PUT); rc = PARMCI_PutS(src, NULL, dst, NULL, &bytes, 0, proc); //ARMCI_PROFILE_STOP_STRIDED(ARMCI_PROF_PUT); assert(rc==0); return rc; } int PARMCI_Get(void *src, void* dst, int bytes, int proc) { int rc=0; //ARMCI_PROFILE_START_STRIDED(&bytes, 0, proc, ARMCI_PROF_GET); #ifdef __crayx1 memcpy(dst,src,bytes); #else rc = PARMCI_GetS(src, NULL, dst, NULL, &bytes, 0, proc); #endif //ARMCI_PROFILE_STOP_STRIDED(ARMCI_PROF_GET); //dassert(1,rc==0); assert(rc==0); return rc; } int PARMCI_Acc(int optype, void *scale, void *src, void* dst, int bytes, int proc) { int rc=0; rc = PARMCI_AccS(optype, scale, src, NULL, dst, NULL, &bytes, 0, proc); return rc; } #define PACK1D 1 #if PACK1D # define armci_read_strided1 armci_read_strided # define armci_write_strided1 armci_write_strided #else # define armci_read_strided2 armci_read_strided # define armci_write_strided2 armci_write_strided #endif void armci_write_strided1(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf) { int i, j; long idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int bvalue[MAX_STRIDE_LEVEL], bunit[MAX_STRIDE_LEVEL]; int bytes = count[0]; ARMCI_PR_DBG("enter",stride_levels); /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ bvalue[0] = 0; bvalue[1] = 0; bunit[0] = 1; bunit[1] = 1; for(i=2; i<=stride_levels; i++) { bvalue[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } for(i=0; i (count[j]-1)) bvalue[j] = 0; } armci_copy( ((char*)ptr)+idx, buf, bytes); buf += count[0]; } ARMCI_PR_DBG("exit",stride_levels); } void armci_write_strided2(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf) { int i, j; int total; /* number of 2 dim block */ int index[MAX_STRIDE_LEVEL], unit[MAX_STRIDE_LEVEL]; ARMCI_PR_DBG("enter",stride_levels); if(stride_levels == 0){ armci_copy( ptr, buf, count[0]); }else if (count[0]%ALIGN_SIZE || (unsigned long)ptr%ALIGN_SIZE ) armci_write_strided1(ptr,stride_levels, stride_arr,count,buf); else { int rows, ld, idx, ldd; char *src; rows = count[0]/8; ld = stride_arr[0]/8; switch(stride_levels){ case 1: DCOPY21(&rows, count+1, ptr, &ld, buf, &idx); break; case 2: ldd = stride_arr[1]/stride_arr[0]; DCOPY31(&rows, count+1, count+2, ptr, &ld, &ldd, buf,&idx); break; default: index[2] = 0; unit[2] = 1; total = count[2]; for(j=3; j<=stride_levels; j++) { index[j] = 0; unit[j] = unit[j-1] * count[j-1]; total *= count[j]; } for(i=0; i= count[j]) index[j] = 0; } DCOPY21(&rows, count+1,src, &ld, buf, &idx); buf = (char*) ((double*)buf + idx); } } /*switch */ } /*else */ ARMCI_PR_DBG("exit",stride_levels); } void armci_read_strided1(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf) { int i, j; long idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int bvalue[MAX_STRIDE_LEVEL], bunit[MAX_STRIDE_LEVEL]; int bytes = count[0]; ARMCI_PR_DBG("enter",stride_levels); /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ bvalue[0] = 0; bvalue[1] = 0; bunit[0] = 1; bunit[1] = 1; for(i=2; i<=stride_levels; i++) { bvalue[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } for(i=0; i (count[j]-1)) bvalue[j] = 0; } armci_copy(buf, ((char*)ptr)+idx,bytes); buf += count[0]; } ARMCI_PR_DBG("exit",stride_levels); } void armci_read_strided2(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf) { int i, j; int total; /* number of 2 dim block */ int index[MAX_STRIDE_LEVEL], unit[MAX_STRIDE_LEVEL]; ARMCI_PR_DBG("enter",stride_levels); if(stride_levels == 0){ armci_copy( buf, ptr, count[0]); }else if (count[0]%ALIGN_SIZE || (unsigned long)ptr%ALIGN_SIZE) armci_read_strided1(ptr,stride_levels, stride_arr,count,buf); else { int rows, ld, idx, ldd; char *src; rows = count[0]/8; ld = stride_arr[0]/8; switch(stride_levels){ case 1: DCOPY12(&rows, count+1, ptr, &ld, buf, &idx); break; case 2: ldd = stride_arr[1]/stride_arr[0]; DCOPY13(&rows, count+1, count+2, ptr, &ld, &ldd, buf,&idx); break; default: index[2] = 0; unit[2] = 1; total = count[2]; for(j=3; j<=stride_levels; j++) { index[j] = 0; unit[j] = unit[j-1] * count[j-1]; total *= count[j]; } for(i=0; i= count[j]) index[j] = 0; } DCOPY12(&rows, count+1,src, &ld, buf, &idx); buf = (char*) ((double*)buf + idx); } } /*switch */ } /*else */ ARMCI_PR_DBG("exit",stride_levels); } /*\Non-Blocking API \*/ int PARMCI_NbPutS( void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /* armci non-blocking call handle*/ ) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int *count=seg_count, tmp_count=0; int rc=0, direct=1; ARMCI_PR_DBG("enter",proc); if(src_ptr == NULL || dst_ptr == NULL) return FAIL; if(count[0]<0)return FAIL3; if(stride_levels <0 || stride_levels > MAX_STRIDE_LEVEL) return FAIL4; if(proc<0)return FAIL5; PREPROCESS_STRIDED(tmp_count); #if DATA_SERVER_ if(stride_levels)direct=SAMECLUSNODE(proc); direct=SAMECLUSNODE(proc); #endif /* aggregate put */ if(nb_handle && nb_handle->agg_flag == SET) { if(!direct){ rc= armci_agg_save_strided_descriptor(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, PUT, nb_handle); POSTPROCESS_STRIDED(tmp_count); return(rc); } } else { UPDATE_FENCE_INFO(proc); /*set tag and op in the nb handle*/ if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = PUT; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = armci_set_implicit_handle(PUT, proc); } if(!direct){ DO_FENCE(proc,SERVER_NBPUT); rc = armci_pack_strided(PUT, NULL, proc, src_ptr, src_stride_arr,dst_ptr, dst_stride_arr, count, stride_levels,NULL,-1,-1,-1,nb_handle); } else{ if(!SAMECLUSNODE(proc))DO_FENCE(proc,DIRECT_NBPUT); rc = armci_op_strided( PUT, NULL, proc, src_ptr, src_stride_arr, dst_ptr,dst_stride_arr,count,stride_levels, 0,nb_handle); } POSTPROCESS_STRIDED(tmp_count); ARMCI_PR_DBG("exit",proc); if(rc) return FAIL6; else return 0; } int PARMCI_NbGetS( void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: byte_count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /* armci non-blocking call handle*/ ) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int rc=0,direct=1; int *count=seg_count, tmp_count=0; ARMCI_PR_DBG("enter",proc); if(src_ptr == NULL || dst_ptr == NULL) return FAIL; if(seg_count[0]<0)return FAIL3; if(stride_levels <0 || stride_levels > MAX_STRIDE_LEVEL) return FAIL4; if(proc<0)return FAIL5; #if DATA_SERVER_GET_ if(stride_levels)direct=SAMECLUSNODE(proc); direct=SAMECLUSNODE(proc); #endif PREPROCESS_STRIDED(tmp_count); if(nb_handle && nb_handle->agg_flag == SET) { if(!direct){ rc= armci_agg_save_strided_descriptor(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, GET, nb_handle); POSTPROCESS_STRIDED(tmp_count); return(rc); } } else { /* ORDER(GET,proc); ensure ordering */ /*set tag and op in the nb handle*/ if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = GET; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = armci_set_implicit_handle(GET, proc); } if(!direct){ DO_FENCE(proc,SERVER_NBGET); rc = armci_pack_strided(GET, NULL, proc, src_ptr, src_stride_arr, dst_ptr,dst_stride_arr,count,stride_levels, NULL,-1,-1,-1,nb_handle); } else{ if(!SAMECLUSNODE(proc))DO_FENCE(proc,DIRECT_GET); rc = armci_op_strided(GET, NULL, proc, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr,count, stride_levels,0,nb_handle); } POSTPROCESS_STRIDED(tmp_count); ARMCI_PR_DBG("exit",proc); if(rc) return FAIL6; else return 0; } int PARMCI_NbAccS( int optype, /* operation */ void *scale, /* scale factor x += scale*y */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /* armci non-blocking call handle*/ ) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int *count=seg_count, tmp_count=0; int rc, direct=1; ARMCI_PR_DBG("enter",proc); if(src_ptr == NULL || dst_ptr == NULL) return FAIL; if(src_stride_arr == NULL || dst_stride_arr ==NULL) return FAIL2; if(count[0]<0)return FAIL3; if(stride_levels <0 || stride_levels > MAX_STRIDE_LEVEL) return FAIL4; if(proc<0)return FAIL5; UPDATE_FENCE_INFO(proc); PREPROCESS_STRIDED(tmp_count); #if DATA_SERVER_ direct=SAMECLUSNODE(proc); #endif # if defined(ACC_COPY) && !defined(ACC_SMP) if(armci_me != proc) direct=0; # endif /*set tag and op in the nb handle*/ if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = optype; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = armci_set_implicit_handle(optype, proc); if(direct){ rc = armci_op_strided(optype,scale, proc, src_ptr, src_stride_arr,dst_ptr, dst_stride_arr, count, stride_levels,1,NULL); } else{ DO_FENCE(proc,SERVER_NBPUT); rc = armci_pack_strided(optype,scale,proc,src_ptr, src_stride_arr,dst_ptr, dst_stride_arr,count,stride_levels,NULL,-1,-1,-1,nb_handle); } POSTPROCESS_STRIDED(tmp_count); ARMCI_PR_DBG("exit",proc); if(rc) return FAIL6; else return 0; } #if !defined(ACC_COPY)&&!defined(CRAY_YMP)&&!defined(CYGNUS)&&!defined(CYGWIN) &&!defined(BGML) # define REMOTE_OP #endif #define INIT_NB_HANDLE(nb,o,p) if(nb){\ (nb)->tag = 0;\ (nb)->op = (o); (nb)->proc= (p);\ (nb)->bufid=NB_NONE;}\ else { (nb)=armci_set_implicit_handle(o, p); (nb)->tag=0; } void set_nbhandle(armci_ihdl_t *nbh, armci_hdl_t *nb_handle, int op, int proc) { if(nb_handle) { *nbh=(armci_ihdl_t)nb_handle; } else { *nbh=armci_set_implicit_handle(op, proc); } } int PARMCI_NbPut(void *src, void* dst, int bytes, int proc,armci_hdl_t* uhandle) { int rc=0, direct=0; armci_ihdl_t nb_handle = (armci_ihdl_t)uhandle; ARMCI_PR_DBG("enter",proc); if(src == NULL || dst == NULL) return FAIL; direct =SAMECLUSNODE(proc); /* aggregate put */ if(nb_handle && nb_handle->agg_flag == SET) { if(direct) { armci_copy(src,dst,bytes); rc=0; } else rc=armci_agg_save_descriptor(src,dst,bytes,proc,PUT,0,nb_handle); return rc; } if(direct) { /*armci_wait needs proc to compute direct*/ INIT_NB_HANDLE(nb_handle,PUT,proc); armci_copy(src,dst,bytes); } else{ # ifdef PORTALS rc=PARMCI_NbPutS(src, NULL,dst,NULL, &bytes,0,proc,uhandle); # else # ifdef ARMCI_NB_PUT INIT_NB_HANDLE(nb_handle,PUT,proc); UPDATE_FENCE_STATE(proc, PUT, 1); ARMCI_NB_PUT(src, dst, bytes, proc, &nb_handle->cmpl_info); # else rc=PARMCI_NbPutS(src, NULL,dst,NULL, &bytes,0,proc,uhandle); # endif # endif } ARMCI_PR_DBG("exit",proc); return(rc); } int PARMCI_NbGet(void *src, void* dst, int bytes, int proc,armci_hdl_t* uhandle) { int rc=0, direct=0; armci_ihdl_t nb_handle = (armci_ihdl_t)uhandle; ARMCI_PR_DBG("enter",proc); if(src == NULL || dst == NULL) return FAIL; direct =SAMECLUSNODE(proc); if(nb_handle && nb_handle->agg_flag == SET) { if(direct) { armci_copy(src,dst,bytes); rc=0; } else rc=armci_agg_save_descriptor(src,dst,bytes,proc,GET,0,nb_handle); return rc; } if(direct) { /*armci_wait needs proc to compute direct*/ INIT_NB_HANDLE(nb_handle,PUT,proc); armci_copy(src,dst,bytes); }else{ # ifdef PORTALS rc=PARMCI_NbGetS(src, NULL,dst,NULL, &bytes,0,proc,uhandle); # else # ifdef ARMCI_NB_GET /*set tag and op in the nb handle*/ INIT_NB_HANDLE(nb_handle,GET,proc); ARMCI_NB_GET(src, dst, bytes, proc, &nb_handle->cmpl_info); # else rc=PARMCI_NbGetS(src, NULL,dst,NULL, &bytes,0,proc,uhandle); # endif # endif } ARMCI_PR_DBG("exit",proc); return(rc); } static void _armci_rem_value(int op, void *src, void *dst, int proc, int bytes) { int rc=0; int armci_th_idx = ARMCI_THREAD_IDX; ORDER(op,proc); /* ensure ordering */ #if defined(REMOTE_OP) && !defined(QUADRICS) rc = armci_rem_strided(op, NULL, proc, src, NULL, dst, NULL, &bytes, 0, NULL, 0, NULL); if(rc) armci_die("ARMCI_Value: armci_rem_strided incomplete", FAIL6); #else if(op==PUT) { UPDATE_FENCE_STATE(proc, PUT, 1); # ifdef LAPI SET_COUNTER(ack_cntr[armci_th_idx], 1); # endif #if defined(BGML) /* fprintf(stderr,"bytes: %d\n",bytes); */ /* this call is blocking, so local count is fine */ BG1S_t req; unsigned count=1; BGML_Callback_t cb_wait={wait_callback, &count}; BG1S_Memput(&req, proc, src, 0, dst, bytes, &cb_wait, 1); BGML_Wait(&count); #else armci_put(src, dst, bytes, proc); #endif } else { # ifdef LAPI SET_COUNTER(get_cntr[armci_th_idx], 1); # endif #if defined(BGML) /* fprintf(stderr,"before memget\n"); */ BG1S_t req; unsigned count=1; BGML_Callback_t cb_wait={wait_callback, &count}; BG1S_Memget(&req, proc, dst, 0, src, bytes, &cb_wait, 1); BGML_Wait(&count); #else armci_get(src, dst, bytes, proc); #endif } /* deal with non-blocking loads and stores */ # if defined(LAPI) || defined(_ELAN_PUTGET_H) if(proc != armci_me){ if(op == GET){ WAIT_FOR_GETS; /* wait for data arrival */ }else { WAIT_FOR_PUTS; /* data must be copied out*/ } } #endif #endif } /* non-blocking remote value put/get operation */ static void _armci_nb_rem_value(int op, void *src, void *dst, int proc, int bytes, armci_ihdl_t nb_handle) { int rc=0, pv=0; int armci_th_idx = ARMCI_THREAD_IDX; if(nb_handle && nb_handle->agg_flag == SET) { if(op==PUT) pv = 1; (void)armci_agg_save_descriptor(src,dst,bytes,proc,op,pv,nb_handle); return; } else { if(op==PUT) UPDATE_FENCE_INFO(proc); /*set tag and op in the nb handle*/ if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = op; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = armci_set_implicit_handle(op, proc); } #if defined(REMOTE_OP) && !defined(QUADRICS) rc = armci_rem_strided(op, NULL, proc, src, NULL, dst, NULL, &bytes, 0, NULL, 0, nb_handle); if(rc) armci_die("ARMCI_Value: armci_rem_strided incomplete", FAIL6); #else if(op==PUT) { UPDATE_FENCE_STATE(proc, PUT, 1); # ifdef LAPI SET_COUNTER(ack_cntr[armci_th_idx], 1); # endif armci_put(src, dst, bytes, proc); } else { # ifdef LAPI SET_COUNTER(get_cntr[armci_th_idx], 1); # endif armci_get(src, dst, bytes, proc); } /* deal with non-blocking loads and stores */ # if defined(LAPI) || defined(_ELAN_PUTGET_H) # ifdef LAPI if(!nb_handle) # endif { if(proc != armci_me){ if(op == GET){ WAIT_FOR_GETS; /* wait for data arrival */ }else { WAIT_FOR_PUTS; /* data must be copied out*/ } } } # endif #endif } #define CHK_ERR(dst, proc) \ if(dst==NULL) armci_die("PARMCI_PutValue: NULL pointer passed",FAIL); \ if(proc<0) armci_die("PARMCI_PutValue: Invalid process rank", proc); #define CHK_ERR_GET(src, dst, proc, bytes) \ if(src==NULL || dst==NULL) armci_die("PARMCI_GetValue: NULL pointer passed",FAIL); \ if(proc<0) armci_die("PARMCI_GetValue: Invalid process rank", proc); \ if(bytes<0) armci_die("PARMCI_GetValue: Invalid size", bytes); /** * Register-Originated Put. */ int PARMCI_PutValueInt(int src, void *dst, int proc) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(int *)dst = src; else _armci_rem_value(PUT, &src, dst, proc, sizeof(int)); return 0; } int PARMCI_PutValueLong(long src, void *dst, int proc) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(long *)dst = src; else _armci_rem_value(PUT, &src, dst, proc, sizeof(long)); return 0; } int PARMCI_PutValueFloat(float src, void *dst, int proc) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(float *)dst = src; else _armci_rem_value(PUT, &src, dst, proc, sizeof(float)); return 0; } int PARMCI_PutValueDouble(double src, void *dst, int proc) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(double *)dst = src; else _armci_rem_value(PUT, &src, dst, proc, sizeof(double)); return 0; } /** * Non-Blocking register-originated put. */ int PARMCI_NbPutValueInt(int src, void *dst, int proc, armci_hdl_t* usr_hdl) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(int *)dst = src; else _armci_nb_rem_value(PUT,&src,dst,proc,sizeof(int),(armci_ihdl_t)usr_hdl); return 0; } int PARMCI_NbPutValueLong(long src, void *dst, int proc, armci_hdl_t* usr_hdl) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(long *)dst = src; else _armci_nb_rem_value(PUT,&src,dst,proc,sizeof(long),(armci_ihdl_t)usr_hdl); return 0; } int PARMCI_NbPutValueFloat(float src, void *dst, int proc, armci_hdl_t* usr_hdl) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(float *)dst = src; else _armci_nb_rem_value(PUT,&src,dst,proc,sizeof(float),(armci_ihdl_t)usr_hdl); return 0; } int PARMCI_NbPutValueDouble(double src, void *dst, int proc, armci_hdl_t* usr_hdl) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(double *)dst = src; else _armci_nb_rem_value(PUT,&src,dst,proc,sizeof(double),(armci_ihdl_t)usr_hdl); return 0; } #if 1 /** * Register-Originated Get. */ int PARMCI_GetValueInt(void *src, int proc) { int dst; if( SAMECLUSNODE(proc) ) return *(int *)src; else _armci_rem_value(GET, src, &dst, proc, sizeof(int)); return dst; } long PARMCI_GetValueLong(void *src, int proc) { long dst; if( SAMECLUSNODE(proc) ) return *(long *)src; else _armci_rem_value(GET, src, &dst, proc, sizeof(long)); return dst; } float PARMCI_GetValueFloat(void *src, int proc) { float dst; if( SAMECLUSNODE(proc) ) return *(float *)src; else _armci_rem_value(GET, src, &dst, proc, sizeof(float)); return dst; } double PARMCI_GetValueDouble(void *src, int proc) { double dst; if( SAMECLUSNODE(proc) ) return *(double *)src; else _armci_rem_value(GET, src, &dst, proc, sizeof(double)); return dst; } #endif #if 0 /** * Register-Originated Get. */ int PARMCI_GetValue(void *src, void *dst, int proc, int bytes) { CHK_ERR_GET(src, dst, proc, bytes); if( SAMECLUSNODE(proc) ) { armci_copy(src, dst, bytes); } else _armci_rem_value(GET, src, dst, proc, bytes); return 0; } /** * Non-Blocking register-originated get. */ int PARMCI_NbGetValue(void *src, void *dst, int proc, int bytes, armci_hdl_t* usr_hdl) { CHK_ERR_GET(src, dst, proc, bytes); if( SAMECLUSNODE(proc) ) { armci_copy(src, dst, bytes); } else _armci_nb_rem_value(GET, src, dst, proc, bytes, (armci_ihdl_t)usr_hdl); return 0; } #endif ga-5-3/armci/src-portals/kr_malloc.c0000640005473000001440000004240611454665236016271 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: kr_malloc.c,v 1.24 2006-09-12 23:21:21 andriy Exp $ */ #include #include "kr_malloc.h" #include "armcip.h" /* for DEBUG purpose only. remove later */ #include "locks.h" #define DEBUG 0 /* Storage allocator basically copied from ANSI K&R and corrupted */ extern char *armci_allocate(); /* Used to get memory from the system */ extern void armci_die(); static char *kr_malloc_shmem(size_t nbytes, context_t *ctx); static void kr_free_shmem(char *ap, context_t *ctx); /** * DEFAULT_NALLOC: No. of units of length ALIGNMENT to get in every * request to the system for memory (8MB/64 => 128*1024units) * DEFAULT_MAX_NALLOC: Maximum number of units that can get i.e.1GB * (if unit size=64bytes, then max units=1024MB/64 = 16*1024*1024) */ #define DEFAULT_NALLOC (128*1024) #define DEFAULT_NALLOC_ALIGN 1024 #define DEFAULT_MAX_NALLOC (1024*1024*16) /* mutual exclusion defs go here */ #define LOCKED 100 #define UNLOCKED 101 static int lock_mode=UNLOCKED; /* enable locking only after armci is initailized as locks (and lock data structures) are initialized in PARMCI_Init */ #define LOCKIT(p) \ if(_armci_initialized && lock_mode==UNLOCKED) { \ NAT_LOCK(0,p); lock_mode=LOCKED; \ } #define UNLOCKIT(p) \ if(_armci_initialized && lock_mode==LOCKED) { \ NAT_UNLOCK(0,p); lock_mode=UNLOCKED; \ } static int do_verify = 0; /* Flag for automatic heap verification */ #define VALID1 0xaaaaaaaa /* For validity check on headers */ #define VALID2 0x55555555 #define USEDP 0 /* CHECK. By default anable this. */ static void kr_error(char *s, unsigned long i, context_t *ctx) { char string[256]; sprintf(string,"kr_malloc: %s %ld(0x%lx)\n", s, i, i); #if 0 kr_malloc_print_stats(ctx); #endif armci_die(string, i); } static Header *morecore(size_t nu, context_t *ctx, size_t *last_size, char **last_ptr) { char *cp; Header *up; #if DEBUG (void) printf("%d: morecore 1: Getting %ld more units of length %d nalloc=%d\n", armci_me, (long)nu, sizeof(Header),ctx->nalloc); (void) fflush(stdout); #endif if (ctx->total >= ctx->max_nalloc) { # if DEBUG armci_die("kr_malloc: morecore: maximum allocation reached",armci_me); # endif return (Header *) NULL; /* Enforce upper limit on core usage */ } #if 1 /* 07/03 ctx->nalloc is now the minimum # units we ask from OS */ nu = DEFAULT_NALLOC_ALIGN*((nu-1)/DEFAULT_NALLOC_ALIGN+1); if(nu < ctx->nalloc) nu = ctx->nalloc; #else nu = ctx->nalloc*((nu-1)/ctx->nalloc+1); /* nu must by a multiplicity of nalloc */ #endif #if DEBUG (void) printf("%d: morecore: Getting %ld more units of length %d\n", armci_me, (long)nu, sizeof(Header)); (void) fflush(stdout); #endif if ((cp =(char *)(*ctx->alloc_fptr)((size_t)nu * sizeof(Header))) == (char *)NULL) return (Header *) NULL; if(last_size!=NULL && last_ptr!=NULL){ *last_size = ((size_t)nu * sizeof(Header)); *last_ptr = cp; /*printf("\n%d:%s:got %p %d",armci_me,FUNCTION_NAME,*last_ptr,*last_size);*/ } /* if(armci_nclus==armci_nproc && armci_nclus!=1) armci_register_shmem(cp,((size_t)nu * sizeof(Header)),NULL,0,cp); */ ctx->total += nu; /* Have just got nu more units */ ctx->nchunk++; /* One more chunk */ ctx->nfrags++; /* Currently one more frag */ ctx->inuse += nu; /* Inuse will be decremented by kr_free */ up = (Header *) cp; up->s.size = nu; up->s.valid1 = VALID1; up->s.valid2 = VALID2; /* Insert into linked list of blocks in use so that kr_free works ... for debug only */ up->s.ptr = ctx->usedp; ctx->usedp = up; kr_free((char *)(up+1), ctx); /* Try to join into the free list */ return ctx->freep; } void kr_malloc_init(size_t usize, /* unit size in bytes */ size_t nalloc, size_t max_nalloc, void * (*alloc_fptr)(), /* memory alloc routine */ int debug, context_t *ctx) { int scale; if(usize <= 0) usize = sizeof(Header); scale = usize>>LOG_ALIGN; if(scale<1)fprintf(stderr,"Error: kr_malloc_init !!!\n"); if(nalloc==0) nalloc = DEFAULT_NALLOC; if(max_nalloc==0) max_nalloc = DEFAULT_MAX_NALLOC; ctx->usize = sizeof(Header); ctx->nalloc = nalloc * scale; ctx->max_nalloc = max_nalloc * scale; ctx->alloc_fptr = alloc_fptr; ctx->freep = NULL; ctx->usedp = NULL; ctx->shmid = -1; ctx->shmoffset = 0; ctx->shmsize = 0; ctx->ctx_type = -1; do_verify = debug; } char *_kr_last_ptr; size_t _kr_last_size; char *kr_malloc(size_t nbytes, context_t *ctx, int record_allocation, char **new_base, size_t *new_size) { Header *p, *prevp; size_t nunits; char *return_ptr; #if !((defined(SUN) || defined(SOLARIS)) && !defined(SHMMAX_SEARCH_NO_FORK)) if(ctx->ctx_type == KR_CTX_SHMEM) return kr_malloc_shmem(nbytes,ctx); #endif /* If first time in need to initialize the free list */ if ((prevp = ctx->freep) == NULL) { if (sizeof(Header) != ALIGNMENT) kr_error("Alignment is not valid", (unsigned long) ALIGNMENT, ctx); ctx->total = 0; /* Initialize statistics */ ctx->nchunk = 0; ctx->inuse = 0; ctx->nfrags = 0; ctx->maxuse = 0; ctx->nmcalls= 0; ctx->nfcalls= 0; /* Initialize linked list */ ctx->base.s.ptr = ctx->freep = prevp = &(ctx->base); ctx->base.s.size = 0; ctx->base.s.valid1 = VALID1; ctx->base.s.valid2 = VALID2; } ctx->nmcalls++; if (do_verify) kr_malloc_verify(ctx); /* Rather than divide make the alignment a known power of 2 */ nunits = ((nbytes + sizeof(Header) - 1)>>LOG_ALIGN) + 1; for (p=prevp->s.ptr; ; prevp = p, p = p->s.ptr) { if (p->s.size >= nunits) { /* Big enuf */ if (p->s.size == nunits) /* exact fit */ prevp->s.ptr = p->s.ptr; else { /* allocate tail end */ p->s.size -= nunits; p += p->s.size; p->s.size = nunits; p->s.valid1 = VALID1; p->s.valid2 = VALID2; ctx->nfrags++; /* Have just increased the fragmentation */ } /* Insert into linked list of blocks in use ... for debug only */ p->s.ptr = ctx->usedp; ctx->usedp = p; ctx->inuse += nunits; /* Record usage */ if (ctx->inuse > ctx->maxuse) ctx->maxuse = ctx->inuse; ctx->freep = prevp; return_ptr = (char *) (p+1); break; } if (p == ctx->freep) { /* wrapped around the free list */ if ((p = morecore(nunits, ctx, &_kr_last_size,&_kr_last_ptr)) == (Header *) NULL) { return_ptr = (char *) NULL; break; } } } if(record_allocation){ *((char **)new_base)=_kr_last_ptr; *new_size=_kr_last_size; } return return_ptr; } void kr_free(char *ap, context_t *ctx) { Header *bp, *p, **up; #if !((defined(SUN) || defined(SOLARIS)) && !defined(SHMMAX_SEARCH_NO_FORK)) if(ctx->ctx_type == KR_CTX_SHMEM) { kr_free_shmem(ap,ctx); return; } #endif ctx->nfcalls++; if (do_verify) kr_malloc_verify(ctx); /* only do something if pointer is not NULL */ if ( ap ) { bp = (Header *) ap - 1; /* Point to block header */ if (bp->s.valid1 != VALID1 || bp->s.valid2 != VALID2) kr_error("kr_free: pointer not from kr_malloc", (unsigned long) ap, ctx); ctx->inuse -= bp->s.size; /* Decrement memory ctx->usage */ /* Extract the block from the used linked list ... for debug only */ for (up=&(ctx->usedp); ; up = &((*up)->s.ptr)) { if (!*up) kr_error("kr_free: block not found in used list\n", (unsigned long) ap, ctx); if (*up == bp) { *up = bp->s.ptr; break; } } /* Join the memory back into the free linked list */ for (p=ctx->freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; /* Freed block at start or end of arena */ if (bp + bp->s.size == p->s.ptr) {/* join to upper neighbour */ bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; ctx->nfrags--; /* Lost a fragment */ } else bp->s.ptr = p->s.ptr; if (p + p->s.size == bp) { /* Join to lower neighbour */ p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; ctx->nfrags--; /* Lost a fragment */ } else p->s.ptr = bp; ctx->freep = p; } /* end if on ap */ } /* Print to standard output the usage statistics. */ void kr_malloc_print_stats(context_t *ctx) { fflush(stderr); printf("\nkr_malloc statistics\n-------------------\n\n"); printf("Total memory from system ... %ld bytes\n", (long)(ctx->total*ctx->usize)); printf("Current memory usage ....... %ld bytes\n", (long)(ctx->inuse*ctx->usize)); printf("Maximum memory usage ....... %ld bytes\n", (long)(ctx->maxuse*ctx->usize)); printf("No. chunks from system ..... %ld\n", ctx->nchunk); printf("No. of fragments ........... %ld\n", ctx->nfrags); printf("No. of calls to kr_malloc ... %ld\n", ctx->nmcalls); printf("No. of calls to kr_free ..... %ld\n", ctx->nfcalls); printf("\n"); fflush(stdout); } /* Currently assumes that are working in a single region. */ void kr_malloc_verify(context_t *ctx) { Header *p; if(_armci_initialized && lock_mode==UNLOCKED) { LOCKIT(armci_master); lock_mode=LOCKED; } if ( ctx->freep ) { /* Check the used list */ for (p=ctx->usedp; p; p=p->s.ptr) { if (p->s.valid1 != VALID1 || p->s.valid2 != VALID2) kr_error("invalid header on usedlist", (unsigned long) p->s.valid1, ctx); if (p->s.size > ctx->total) kr_error("invalid size in header on usedlist", (unsigned long) p->s.size, ctx); } /* Check the free list */ p = ctx->base.s.ptr; while (p != &(ctx->base)) { if (p->s.valid1 != VALID1 || p->s.valid2 != VALID2) kr_error("invalid header on freelist", (unsigned long) p->s.valid1, ctx); if (p->s.size > ctx->total) kr_error("invalid size in header on freelist", (unsigned long) p->s.size, ctx); p = p->s.ptr; } } /* end if */ if(_armci_initialized && lock_mode==LOCKED) { UNLOCKIT(armci_master); lock_mode=UNLOCKED; } } /********************** BEGIN: kr_malloc for ctx_shmem *********************/ #if defined(SYSV) || defined(MMAP) #include "shmem.h" extern int armci_get_shmem_info(char *addrp, int* shmid, long *shmoffset, size_t *shmsize); extern Header *armci_get_shmem_ptr(int shmid, long shmoffset, size_t shmsize); /* returns, address of the shared memory region based on shmid, offset. * (i.e. return_addr = stating address of shmid + offset) */ #define SHM_PTR(hdr) armci_get_shmem_ptr((hdr)->s.shmid, (hdr)->s.shmoffset, (hdr)->s.shmsize) /* * kr_malloc_shmem: memory allocator for shmem context (i.e ctx_shmem) */ static char *kr_malloc_shmem(size_t nbytes, context_t *ctx) { Header *p, *prevp; size_t nunits, prev_shmsize=0; char *return_ptr; int prev_shmid=-1; long prev_shmoffset=0; LOCKIT(armci_master); /* Rather than divide make the alignment a known power of 2 */ nunits = ((nbytes + sizeof(Header) - 1)>>LOG_ALIGN) + 1; /* If first time in need to initialize the free list */ if ((prevp = ctx->freep) == NULL) { if (sizeof(Header) != ALIGNMENT) kr_error("kr_malloc_shmem: Alignment is not valid", (unsigned long) ALIGNMENT, ctx); ctx->total = 0; /* Initialize statistics */ ctx->nchunk = ctx->inuse = ctx->maxuse = 0; ctx->nfrags = ctx->nmcalls = ctx->nfcalls = 0; /* Initialize linked list */ ctx->base.s.size = 0; ctx->base.s.shmid = -1; ctx->base.s.shmoffset = 0; ctx->base.s.shmsize = 0; ctx->base.s.valid1 = VALID1; ctx->base.s.valid2 = VALID2; if ((p = morecore(nunits, ctx,NULL,NULL)) == (Header *) NULL) return NULL; ctx->base.s.ptr = prevp = ctx->freep; /* CHECK */ } prev_shmid = ctx->shmid; prev_shmoffset = ctx->shmoffset; prev_shmsize = ctx->shmsize; prevp = ctx->freep = armci_get_shmem_ptr(ctx->shmid, ctx->shmoffset, ctx->shmsize); ctx->nmcalls++; if (do_verify) kr_malloc_verify(ctx); for (p=SHM_PTR(prevp); ; prevp = p, p = SHM_PTR(p)) { if (p->s.size >= nunits) { /* Big enuf */ if (p->s.size == nunits) { /* exact fit */ prevp->s.ptr = p->s.ptr; prevp->s.shmid = p->s.shmid; prevp->s.shmoffset = p->s.shmoffset; prevp->s.shmsize = p->s.shmsize; } else { /* allocate tail end */ p->s.size -= nunits; p += p->s.size; p->s.size = nunits; p->s.valid1 = VALID1; p->s.valid2 = VALID2; ctx->nfrags++; /* Have just increased the fragmentation */ } #if USEDP /* Insert into linked list of blocks in use ... for debug only */ p->s.ptr = ctx->usedp; ctx->usedp = p; #endif ctx->inuse += nunits; /* Record usage */ if (ctx->inuse > ctx->maxuse) ctx->maxuse = ctx->inuse; ctx->freep = prevp; ctx->shmid = prev_shmid; ctx->shmoffset = prev_shmoffset; ctx->shmsize = prev_shmsize; return_ptr = (char *) (p+1); break; } prev_shmid = prevp->s.shmid; prev_shmoffset = prevp->s.shmoffset; prev_shmsize = prevp->s.shmsize; if (p == ctx->freep) { /* wrapped around the free list */ if ((p = morecore(nunits, ctx,NULL,NULL)) == (Header *) NULL) { return_ptr = (char *) NULL; break; } prev_shmid = ctx->shmid; prev_shmoffset = ctx->shmoffset; prev_shmsize = ctx->shmsize; } } UNLOCKIT(armci_master); return return_ptr; } static void kr_free_shmem(char *ap, context_t *ctx) { Header *bp, *p, **up, *nextp; int shmid=-1; long shmoffset=0; size_t shmsize=0; LOCKIT(armci_master); ctx->nfcalls++; if (do_verify) kr_malloc_verify(ctx); /* only do something if pointer is not NULL */ if ( ap ) { bp = (Header *) ap - 1; /* Point to block header */ if (bp->s.valid1 != VALID1 || bp->s.valid2 != VALID2) kr_error("kr_free_shmem: pointer not from kr_malloc", (unsigned long) ap, ctx); ctx->inuse -= bp->s.size; /* Decrement memory ctx->usage */ #if USEDP /* Extract the block from the used linked list ... for debug only */ for (up=&(ctx->usedp); ; up = &((*up)->s.ptr)) { if (!*up) kr_error("kr_free_shmem: block not found in used list\n", (unsigned long) ap, ctx); if (*up == bp) { *up = bp->s.ptr; break; } } #endif if(ctx->shmid==-1) { armci_get_shmem_info((char*)bp, &ctx->shmid, &ctx->shmoffset, &ctx->shmsize); ctx->base.s.shmid = ctx->shmid; ctx->base.s.shmsize = ctx->shmsize; ctx->base.s.shmoffset = ctx->shmoffset; p = ctx->freep = bp; p->s.ptr = bp; p->s.size-=SHMEM_CTX_BYTES; /*memory to store shmem info in context*/ p->s.shmid = ctx->shmid; p->s.shmsize = ctx->shmsize; p->s.shmoffset = ctx->shmoffset; UNLOCKIT(armci_master); return; } ctx->freep = armci_get_shmem_ptr(ctx->shmid, ctx->shmoffset, ctx->shmsize); shmid = ctx->shmid; shmoffset = ctx->shmoffset; shmsize = ctx->shmsize; /* Join the memory back into the free linked list */ p = ctx->freep; nextp = SHM_PTR(p); for ( ; !(bp > p && bp < nextp); p=nextp, nextp=SHM_PTR(p)) { if (p >= nextp && (bp > p || bp < nextp)) break; /* Freed block at start or end of arena */ nextp = SHM_PTR(p); shmid = p->s.shmid; shmoffset = p->s.shmoffset; shmsize = p->s.shmsize; } if (bp + bp->s.size == nextp) {/* join to upper neighbour */ bp->s.size += nextp->s.size; bp->s.ptr = nextp->s.ptr; ctx->nfrags--; /* Lost a fragment */ bp->s.shmid = nextp->s.shmid; bp->s.shmoffset = nextp->s.shmoffset; bp->s.shmsize = nextp->s.shmsize; } else { bp->s.ptr = nextp; bp->s.shmid = p->s.shmid; bp->s.shmoffset = p->s.shmoffset; bp->s.shmsize = p->s.shmsize; } if (p + p->s.size == bp) { /* Join to lower neighbour */ p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; ctx->nfrags--; /* Lost a fragment */ p->s.shmid = bp->s.shmid; p->s.shmoffset = bp->s.shmoffset; p->s.shmsize = bp->s.shmsize; } else { p->s.ptr = bp; armci_get_shmem_info((char*)bp, &p->s.shmid, &p->s.shmoffset, &p->s.shmsize); } ctx->freep = p; ctx->shmid = shmid; ctx->shmoffset = shmoffset; ctx->shmsize = shmsize; } /* end if on ap */ UNLOCKIT(armci_master); } #else /* #ifdef SYSV */ /* What are doing here */ static char *kr_malloc_shmem(size_t nbytes, context_t *ctx) { armci_die("kr_malloc_shmem(): Invalid Function Call", 0L); } static void kr_free_shmem(char *ap, context_t *ctx) { armci_die("kr_free_shmem(): Invalid Function Call", 0L); } #endif /* #ifdef SYSV */ /********************** END: kr_malloc for ctx_shmem *********************/ /** issues: 1. do usage statistics only if debug/DEBUG is enabled */ ga-5-3/armci/src-portals/locks.h0000640005473000001440000001301412036056644015431 0ustar d3n000users#ifndef _ARMCI_LOCKS_H_ #define _ARMCI_LOCKS_H_ #if HAVE_SYS_TYPES_H # include #endif #define MAX_LOCKS 1024 #define NUM_LOCKS MAX_LOCKS #if !(defined(PMUTEX) || defined(PSPIN) || defined(CYGNUS) || defined(CRAY_XT)) # include "spinlock.h" #endif #if !(defined(PMUTEX) || defined(PSPIN) || defined(SPINLOCK)) # error cannot run #endif #if (defined(SPINLOCK) || defined(PMUTEX) || defined(PSPIN) || defined(HITACHI)) && !(defined(BGML) || defined(DCMF)) # include "shmem.h" typedef struct { long off; long idlist[SHMIDLEN]; } lockset_t; extern lockset_t lockid; #elif defined(BGML) || defined(DCMF) typedef int lockset_t; #endif #if defined(PMUTEX) # warning SPINLOCK: pthread_mutex_lock # include # include # define NAT_LOCK(x,p) pthread_mutex_lock(_armci_int_mutexes +x) # define NAT_UNLOCK(x,p) pthread_mutex_unlock(_armci_int_mutexes +x) # define LOCK_T pthread_mutex_t # define PAD_LOCK_T LOCK_T PAD_LOCK_T *_armci_int_mutexes; #elif defined(PSPIN) # warning SPINLOCK: pthread_spin_lock # include # include # define NAT_LOCK(x,p) pthread_spin_lock(_armci_int_mutexes +x) # define NAT_UNLOCK(x,p) pthread_spin_unlock(_armci_int_mutexes +x) # define LOCK_T pthread_spinlock_t # define PAD_LOCK_T LOCK_T PAD_LOCK_T *_armci_int_mutexes; #elif defined(SPINLOCK) && defined(SGIALTIX) # define NAT_LOCK(x,p) armci_acquire_spinlock((LOCK_T*)( ((PAD_LOCK_T*)(((void**)_armci_int_mutexes)[p]))+x )) # define NAT_UNLOCK(x,p) armci_release_spinlock((LOCK_T*)( ((PAD_LOCK_T*)(((void**)_armci_int_mutexes)[p]))+x )) PAD_LOCK_T *_armci_int_mutexes; #elif defined(SPINLOCK) # define NAT_LOCK(x,p) armci_acquire_spinlock((LOCK_T*)(_armci_int_mutexes+(x))) # define NAT_UNLOCK(x,p) armci_release_spinlock((LOCK_T*)(_armci_int_mutexes+(x))) PAD_LOCK_T *_armci_int_mutexes; #elif defined(HITACHI) extern void armcill_lock(int mutex, int proc); extern void armcill_unlock(int mutex, int proc); # define LOCK_T int # define PAD_LOCK_T LOCK_T # define NAT_LOCK(x,p) armcill_lock((x),(p)) # define NAT_UNLOCK(x,p) armcill_unlock((x),(p)) PAD_LOCK_T *_armci_int_mutexes; #elif defined(SGI) # define SGI_SPINS 100 # include typedef struct { int id; ulock_t * lock_array[NUM_LOCKS]; }lockset_t; extern lockset_t lockset; # define NAT_LOCK(x,p) (void) uswsetlock(lockset.lock_array[(x)],SGI_SPINS) # define NAT_UNLOCK(x,p) (void) usunsetlock(lockset.lock_array[(x)]) #elif defined(CONVEX) # include typedef struct{ unsigned state; unsigned pad[15]; } lock_t; typedef int lockset_t; extern lock_t *lock_array; extern void setlock(unsigned * volatile lp); extern void unsetlock(unsigned * volatile lp); # define NAT_LOCK(x,p) (void) setlock(&lock_array[x].state) # define NAT_UNLOCK(x,p) (void) unsetlock(&lock_array[(x)].state) #elif defined(WIN32) typedef int lockset_t; extern void setlock(int); extern void unsetlock(int); # define NAT_LOCK(x,p) setlock(x) # define NAT_UNLOCK(x,p) unsetlock(x) #elif defined(CRAY_YMP) && !defined(__crayx1) # include typedef int lockset_t; extern lock_t cri_l[NUM_LOCKS]; # pragma _CRI common cri_l # define NAT_LOCK(x,p) t_lock(cri_l+(x)) # define NAT_UNLOCK(x,p) t_unlock(cri_l+(x)) #elif defined(CRAY_T3E) || defined(__crayx1) || defined(CATAMOUNT) || defined(CRAY_SHMEM) || defined(PORTALS) # include # if defined(CRAY) || defined(CRAY_XT) # include # endif # if defined(DECOSF) || defined(LINUX64) || defined(__crayx1) || defined(CATAMOUNT) # define _INT_MIN_64 (LONG_MAX-1) # endif # undef NUM_LOCKS # define NUM_LOCKS 4 static long armci_lock_var[4]={0,0,0,0}; typedef int lockset_t; # define INVALID (long)(_INT_MIN_64 +1) # define NAT_LOCK(x,p) while( shmem_swap(armci_lock_var+(x),INVALID,(p)) ) # define NAT_UNLOCK(x,p) shmem_swap(armci_lock_var+(x), 0, (p)) #elif defined(SYSV) && defined(LAPI) && defined(AIX) int **_armci_int_mutexes; # define NAT_LOCK(x,p) armci_lapi_lock(_armci_int_mutexes[armci_master]+(x)) # define NAT_UNLOCK(x,p) armci_lapi_unlock(_armci_int_mutexes[armci_master]+(x)) typedef int lockset_t; #elif defined(CYGNUS) typedef int lockset_t; # define NAT_LOCK(x,p) armci_die("does not run in parallel",0) # define NAT_UNLOCK(x,p) armci_die("does not run in parallel",0) #elif defined(LAPI) && !defined (LINUX) # include typedef int lockset_t; extern pthread_mutex_t _armci_mutex_thread; # define NAT_LOCK(x,p) pthread_mutex_lock(&_armci_mutex_thread) # define NAT_UNLOCK(x,p) pthread_mutex_unlock(&_armci_mutex_thread) #elif defined(FUJITSU) typedef int lockset_t; # include "fujitsu-vpp.h" #elif defined(SYSV) || defined(MACX) # include "semaphores.h" # undef NUM_LOCKS # define NUM_LOCKS ((MAX_LOCKS< SEMMSL) ? MAX_LOCKS:SEMMSL) # define NAT_LOCK(x,p) P_semaphore(x) # define NAT_UNLOCK(x,p) V_semaphore(x) # ifndef _LOCKS_C_ # define CreateInitLocks Sem_CreateInitLocks # define InitLocks Sem_InitLocks # define DeleteLocks Sem_DeleteLocks # endif #else # error #endif extern void CreateInitLocks(int num, lockset_t *id); extern void InitLocks(int num , lockset_t id); extern void DeleteLocks(lockset_t id); #ifdef FUJITSU # define NATIVE_LOCK(x,p) if(armci_nproc>1) { NAT_LOCK(p); } # define NATIVE_UNLOCK(x,p) if(armci_nproc>1) { NAT_UNLOCK(p); } #else # define NATIVE_LOCK(x,p) if(armci_nproc>1) { NAT_LOCK(x,p); } # define NATIVE_UNLOCK(x,p) if(armci_nproc>1) { NAT_UNLOCK(x,p); } #endif #endif /* _ARMCI_LOCKS_H_ */ ga-5-3/armci/configure.ac0000640005473000001440000003052212140267557014170 0ustar d3n000users# Process this file with autoconf to produce a configure script. ############################################################################### # Init autoconf ############################################################################### AC_PREREQ([2.67]) AC_INIT([Aggregate Remote Memory Copy Interface (ARMCI)], [1.5], [hpctools@pnl.gov], [armci], [http://www.emsl.pnl.gov/docs/parsoft/armci/]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_HEADER([config.h]) AC_CONFIG_LIBOBJ_DIR([compat]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR([src/common/armci.c]) ############################################################################### # Must occur before automake init ############################################################################### GA_TARGET GA_CROSS_COMPILING ############################################################################### # Init automake ############################################################################### AM_INIT_AUTOMAKE([color-tests foreign parallel-tests silent-rules subdir-objects]) # Don't emit "rebuild rules" for configure, Makefile.ins, etc. AM_MAINTAINER_MODE ############################################################################### # Misc. information and package setup. ############################################################################### GA_WITH_HELP ARMCI_TOP_BUILDDIR="`pwd`" cd "$srcdir" ARMCI_TOP_SRCDIR="`pwd`" cd "$ARMCI_TOP_BUILDDIR" AS_IF([test "$ARMCI_TOP_BUILDDIR" != "$ARMCI_TOP_SRCDIR"], [AC_MSG_NOTICE([Detected VPATH build])]) # Determine messaging library up front because if MPI is desired we use the # MPI compiler wrappers instead of the standard compilers. GA_MSG_COMMS # Hack to enable NEW_MALLOC feature AC_ARG_ENABLE([portals-new-malloc], [AS_HELP_STRING([--enable-portals-new-malloc], [add -DNEW_MALLOC to CPPFLAGS])]) AS_IF([test "x$enable_portals_new_malloc" = xyes], [AC_DEFINE([NEW_MALLOC], [1], [for portals, enable new malloc])]) AM_CONDITIONAL([PORTALS_ENABLE_NEW_MALLOC], [test "x$enable_portals_new_malloc" = xyes]) ARMCI_ENABLE_GPC ARMCI_ENABLE_GROUP ARMCI_ENABLE_NB_NONCONT ARMCI_ENABLE_PROFILING ARMCI_SHMMAX GA_DISABLE_MPI_TESTS GA_ENABLE_WARNINGS GA_ENABLE_CHECKPOINT GA_ENABLE_OPT GA_ENABLE_TRACE GA_THREAD_SAFE # Unless we rename all preprocessor symbols of MPI and MPIPP # in the source code, this hack is necessary. AH_BOTTOM([/* DO NOT MODIFY THE FOLLOWING PREPROCESSOR DIRECTIVES */ #ifdef MSG_COMMS_MPI # ifdef __cplusplus # define MPIPP # else # define MPI # endif /* __cplusplus */ #endif /* MSG_COMMS_MPI */]) ######################################### # C compiler ######################################### AC_MSG_NOTICE AC_MSG_NOTICE([C compiler]) AC_MSG_NOTICE ga_save_CFLAGS="$CFLAGS" GA_PROG_MPICC CFLAGS="$ga_save_CFLAGS" AC_USE_SYSTEM_EXTENSIONS GA_COMPILER_VENDOR GA_WARN_FLAGS ga_save_CFLAGS="$CFLAGS" CFLAGS="$ga_cv_c_warning_flags $CFLAGS" AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP], [GA_ARG_PARSE([with_mpi], [GA_MP_LIBS], [GA_MP_LDFLAGS], [GA_MP_CPPFLAGS])]) AS_IF([test "x$with_mpi" != xno], [ AS_CASE([$enable_mpi_tests], [yes],[GA_MPICC_TEST_LINK], [no], [GA_MPICC_TEST_COMPILE])]) # Hack to append .x to executables. AC_SUBST([EXEEXT], [.x$EXEEXT]) GA_TARGET64 # Establish the underlying network infrastructure (SOCKETS, OPENIB, etc) GA_ARMCI_NETWORK # Checks for C header files. AC_HEADER_ASSERT AC_HEADER_DIRENT AC_HEADER_STDBOOL AC_HEADER_STDC AC_HEADER_SYS_WAIT GA_CHECK_HEADERS([assert.h c_asm.h errno.h fcntl.h float.h ia64/sys/inline.h malloc.h math.h memory.h mpp/shmem.h netdb.h netinet/in.h netinet/tcp.h process.h setjmp.h signal.h stdarg.h stdint.h stdio.h stdlib.h string.h strings.h sys/types.h sys/atomic_op.h sys/errno.h sys/file.h sys/ipc.h sys/mman.h sys/param.h sys/sem.h sys/shm.h sys/socket.h sys/stat.h sys/syscall.h sys/systemcfg.h sys/time.h sys/uio.h sys/wait.h time.h unistd.h windows.h winsock.h rpc/rpc.h rpc/types.h rpc/xdr.h], [], [], [@%:@ifdef HAVE_RPC_TYPES_H @%:@include @%:@endif @%:@ifdef HAVE_SYS_TYPES_H @%:@include @%:@endif @%:@ifdef HAVE_SYS_IPC_H @%:@include @%:@endif]) # Checks for C typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE AC_C_RESTRICT AC_C_VOLATILE AC_TYPE_INT16_T AC_TYPE_INT32_T AC_TYPE_INT64_T AC_TYPE_OFF_T AC_TYPE_PID_T AC_TYPE_SIGNAL AC_TYPE_SIZE_T AC_TYPE_SSIZE_T AC_TYPE_UINT8_T AC_TYPE_UINT16_T AC_TYPE_UINT32_T AC_TYPE_UINT64_T AC_CHECK_TYPES([ptrdiff_t]) GA_FUNCTION GA_DISABLE_SYS_WEAK_ALIAS GA_SYS_WEAK_ALIAS GA_UNION_SEMUN # Checks for C type sizes. AC_CHECK_SIZEOF([void*]) AC_CHECK_SIZEOF([char]) AC_CHECK_SIZEOF([short]) AC_CHECK_SIZEOF([int]) AC_CHECK_SIZEOF([long]) AC_CHECK_SIZEOF([long long]) AC_CHECK_SIZEOF([float]) AC_CHECK_SIZEOF([double]) GA_C_POINTER_AS_INTEGER # Checks for C library functions. AC_FUNC_FORK AC_FUNC_MMAP AC_FUNC_SELECT_ARGTYPES AC_FUNC_VPRINTF AS_IF([test "x$ga_msg_comms" = xTCGMSG], [AC_SEARCH_LIBS([xdr_array], [rpclib], [], [], [])]) AC_SEARCH_LIBS([floor], [m], [have_floor=1], [have_floor=0]) AC_DEFINE_UNQUOTED([HAVE_FLOOR], [$have_floor], [Define to 1 if you have the 'floor' function.]) AC_SEARCH_LIBS([pow], [m], [have_pow=1], [have_pow=0]) AC_DEFINE_UNQUOTED([HAVE_POW], [$have_pow], [Define to 1 if you have the 'pow' function.]) AC_SEARCH_LIBS([sqrt], [m], [have_sqrt=1], [have_sqrt=0]) AC_DEFINE_UNQUOTED([HAVE_SQRT], [$have_sqrt], [Define to 1 if you have the 'sqrt' function.]) GA_CHECK_FUNCS([bzero fastbcopy ftruncate gethostbyname getpagesize gettimeofday memset munmap select socket strchr strdup strerror strstr strtol _lock_try _acquire_lock xdr_char]) GA_CHECK_FUNCS([pthread_getconcurrency pthread_setconcurrency]) # Checks for C libraries. ARMCI_C_OPT CFLAGS="$ga_save_CFLAGS" ######################################### # C++ compiler ######################################### AC_MSG_NOTICE AS_IF([test "x$enable_cxx" = xyes], [AC_MSG_NOTICE([C++ compiler])], [AC_MSG_NOTICE([C++ compiler (disabled, but some tests still required)])]) AC_MSG_NOTICE AC_LANG_PUSH([C++]) # GA_PROG_MPICXX is required to silence complaints that C++ source exists # even if C++ support has been disabled. ga_save_CXXFLAGS="$CXXFLAGS" GA_PROG_MPICXX CXXFLAGS="$ga_save_CXXFLAGS" AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP]) AS_IF([test "x$enable_cxx" = xyes], [ GA_COMPILER_VENDOR GA_WARN_FLAGS ga_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$ga_cv_cxx_warning_flags $CXXFLAGS" AS_IF([test "x$with_mpi" != xno], [GA_MPICXX_TEST]) # Checks for C++ header files. # Checks for C++ typedefs, structures, and compiler characteristics. # Checks for C++ type sizes. # Checks for C++ library functions. ARMCI_CXX_OPT CXXFLAGS="$ga_save_CXXFLAGS" ]) AC_LANG_POP([C++]) ######################################### # Assembler ######################################### AC_MSG_NOTICE AC_MSG_NOTICE([Assembler]) AC_MSG_NOTICE GA_AS AM_PROG_AS ARMCI_AS_NO_I386ASM ############################################################################### # BLAS/LAPACK are used in one test program. We don't locate these libraries due # to many of them requiring Fortran. An enthusiastic user of the lone test # program can still build it if they are highly motivated -- but the build will # not be automated. ############################################################################### AM_CONDITIONAL([HAVE_BLAS], [test 0 = 1]) AM_CONDITIONAL([HAVE_LAPACK], [test 0 = 1]) ############################################################################### # Checks for programs. ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([Checks for additional programs]) AC_MSG_NOTICE AC_PROG_GREP AC_PROG_SED ############################################################################### # Libtool setup -- no compiler/linker tests after this ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([Libtool setup]) AC_MSG_NOTICE # temporarily restore unwrapped compilers # this works around a bug where libtool sadly relies on matching compiler # names in order to determine features (Fortran only, I think) # libtool doesn't recognize MPI compiler names, nor should it AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP_PUSH]) GA_AR LT_INIT([disable-shared]) # and now that that's over, put the MPI compilers back # also, the above hack incorrectly sets the base compiler as the linker AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP_POP compiler="$CC" LTCC="$CC" lt_save_CC="$CC" compiler_DEFAULT="$CC" compiler_CXX="$CXX" compiler_F77="$F77"]) ############################################################################### # Remaining setup -- some tests, some individual components ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([Miscellaneous remaining setup]) AC_MSG_NOTICE # Establish some preprocessor symbols. ARMCI_SETUP # Set up TCGMSG. TCGMSG_REMOTE_SHELL TCGMSG_ENABLE_TIMINGS # TODO not sure, but thus far required for 'dist' target at least AM_CONDITIONAL([RANDOM_ACCESS], [test x != x]) # always false # Whether to use PIC for the inline GCC code. AM_CONDITIONAL([ENABLE_SHARED], [test x$enable_shared = xyes]) AS_IF([test "x$ga_cv_target" = xLINUX64], [AS_CASE([$host_cpu], [x86_64|ppc64|ia64], [AC_DEFINE([NEED_MEM_SYNC], [1], [Creates memfenc macro])])]) AS_IF([test "x$host_cpu" = xPWR4], [AC_DEFINE([NEED_MEM_SYNC], [1], [Creates memfenc macro])]) ############################################################################### # Test suite setup ############################################################################### AC_ARG_VAR([NPROCS], [number of procs to use for parallel tests (default 4)]) AS_IF([test "x$NPROCS" = x], [NPROCS=4]) AC_SUBST([NPROCS]) AC_ARG_VAR([MPIEXEC], [how to run parallel tests if built with MPI e.g. "mpiexec -np %NP%"]) AS_CASE([$ga_msg_comms], [TCGMSG], [TCGEXEC="`pwd`/parallel.x"], [TCGMSG5], [TCGEXEC=], [MPI], [AS_IF([test "x$MPIEXEC" = x], [AC_PATH_PROGS([MPIEXEC], [mpirun mpiexec]) MPIEXEC="$MPIEXEC -n %NP%"])]) AC_SUBST([MPIEXEC]) AC_SUBST([TCGEXEC]) ############################################################################### # The End ############################################################################### AC_CONFIG_FILES([Makefile]) AC_OUTPUT # Report on what we found. AC_MSG_NOTICE([]) AC_MSG_NOTICE([**************************************************************]) AC_MSG_NOTICE([ $PACKAGE_NAME configured as follows:]) AC_MSG_NOTICE([**************************************************************]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([ TARGET=$ga_cv_target]) AC_MSG_NOTICE([ MSG_COMMS=$ga_msg_comms]) AC_MSG_NOTICE([ GA_MP_LIBS=$GA_MP_LIBS]) AC_MSG_NOTICE([ GA_MP_LDFLAGS=$GA_MP_LDFLAGS]) AC_MSG_NOTICE([ GA_MP_CPPFLAGS=$GA_MP_CPPFLAGS]) AC_MSG_NOTICE([ ARMCI_NETWORK=$ga_armci_network]) AC_MSG_NOTICE([ ARMCI_NETWORK_LDFLAGS=$ARMCI_NETWORK_LDFLAGS]) AC_MSG_NOTICE([ ARMCI_NETWORK_LIBS=$ARMCI_NETWORK_LIBS]) AC_MSG_NOTICE([ARMCI_NETWORK_CPPFLAGS=$ARMCI_NETWORK_CPPFLAGS]) AC_MSG_NOTICE([ CC=$CC]) AS_IF([test "x$with_mpi_wrappers" = xyes], [ AC_MSG_NOTICE([ unwrapped CC=$ga_cv_mpic_naked]) ]) AC_MSG_NOTICE([ CFLAGS=$CFLAGS]) AC_MSG_NOTICE([ ARMCI_COPT=$ARMCI_COPT]) AS_IF([test "x$enable_cxx" = xyes], [ AC_MSG_NOTICE([ CXX=$CXX]) AS_IF([test "x$with_mpi_wrappers" = xyes], [ AC_MSG_NOTICE([ unwrapped CXX=$ga_cv_mpicxx_naked]) ]) AC_MSG_NOTICE([ CXXFLAGS=$CXXFLAGS]) AC_MSG_NOTICE([ ARMCI_CXXOPT=$ARMCI_CXXOPT]) ]) AC_MSG_NOTICE([ CPP=$CPP]) AC_MSG_NOTICE([ CPPFLAGS=$CPPFLAGS]) AC_MSG_NOTICE([ LDFLAGS=$LDFLAGS]) AC_MSG_NOTICE([ LIBS=$LIBS]) AC_MSG_NOTICE([ FLIBS=$FLIBS]) AC_MSG_NOTICE([ AR=$AR]) AC_MSG_NOTICE([ AR_FLAGS=$AR_FLAGS]) AC_MSG_NOTICE([ CCAS=$CCAS]) AC_MSG_NOTICE([ CCAS_FLAGS=$CCAS_FLAGS]) AC_MSG_NOTICE([ DEFS=$DEFS]) AC_MSG_NOTICE([ SHELL=$SHELL]) AS_CASE([$ga_msg_comms], [MPI], [ AC_MSG_NOTICE([ MPIEXEC=$MPIEXEC]) ]) AC_MSG_NOTICE([ NPROCS=$NPROCS]) AC_MSG_NOTICE([]) ga-5-3/armci/Makefile.in0000640005473000001440000104454012274750307013753 0ustar d3n000users# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## # Makefile.am for ARMCI. # # Rationale: # This Makefile.am follows many of the suggestions outlined in the paper # "Recursive Make Considered Harmful". We do not use Automake's # 'include' feature (instead preferring a single, large Makefile.am). # # Additional targets: # Besides the traditional make targets supplied by Automake, we have added the # "examples" and "checkprogs" targets to build example programs and test # programs, respectively. # # Notes: # In general, each subdirectory has a corresponding section of this # Makefile.am with the notable exception being the many examples getting # rolled up into the examples section. # VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = $(am__EXEEXT_1) check_PROGRAMS = testing/msgcheck$(EXEEXT) testing/perf$(EXEEXT) \ testing/perf2$(EXEEXT) testing/perf_aggr$(EXEEXT) \ testing/perf_nb$(EXEEXT) testing/shmclean$(EXEEXT) \ testing/shmtest$(EXEEXT) testing/simplelock$(EXEEXT) \ testing/test$(EXEEXT) testing/test2$(EXEEXT) $(am__EXEEXT_2) \ $(am__EXEEXT_3) $(am__EXEEXT_4) $(am__EXEEXT_5) \ $(am__EXEEXT_6) $(am__EXEEXT_7) $(am__EXEEXT_8) \ $(am__EXEEXT_9) \ examples/benchmarks/cg/armci_sharedmemory/cg$(EXEEXT) \ examples/benchmarks/lu/armci_blocking/lu-b-bc$(EXEEXT) \ examples/benchmarks/lu/armci_blocking/lu-block$(EXEEXT) \ examples/benchmarks/lu/armci_blocking/lu$(EXEEXT) \ examples/benchmarks/lu/armci_nonblocking/lu_nb_get$(EXEEXT) \ examples/benchmarks/lu/armci_nonblocking/lu_nb_put$(EXEEXT) \ examples/benchmarks/lu/pthreads/lu-thread$(EXEEXT) \ examples/features/aggregation/simple/simple$(EXEEXT) \ examples/features/aggregation/sparse_matvecmul/sparse_matvecmul$(EXEEXT) \ examples/features/non-blocking/simple/simple$(EXEEXT) \ examples/features/symmetric_memory/simple/simple$(EXEEXT) \ examples/simpleApps/transp1D-c$(EXEEXT) $(am__EXEEXT_10) \ $(am__EXEEXT_11) $(am__EXEEXT_12) $(am__EXEEXT_13) \ $(am__EXEEXT_14) $(am__EXEEXT_15) $(am__EXEEXT_16) @ARMCI_NETWORK_ARMCI_FALSE@am__append_1 = libarmci.la @MSG_COMMS_MPI_FALSE@am__append_2 = -I$(top_srcdir)/tcgmsg @ARMCI_NETWORK_ARMCI_TRUE@am__append_3 = $(ARMCI_NETWORK_LIBS) \ @ARMCI_NETWORK_ARMCI_TRUE@ $(GA_MP_LIBS) @ARMCI_NETWORK_ARMCI_FALSE@am__append_4 = libarmci.la $(LTLIBOBJS) \ @ARMCI_NETWORK_ARMCI_FALSE@ $(GA_MP_LIBS) $(ARMCI_NETWORK_LIBS) @ARMCI_NETWORK_ARMCI_FALSE@am__append_5 = $(GA_MP_LIBS) \ @ARMCI_NETWORK_ARMCI_FALSE@ $(ARMCI_NETWORK_LIBS) DIST_COMMON = README $(am__configure_deps) $(am__include_HEADERS_DIST) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/config.h.in $(top_srcdir)/configure \ $(top_srcdir)/src-gemini/Makefile.inc \ $(top_srcdir)/src-portals/Makefile.inc INSTALL NEWS \ build-aux/compile build-aux/config.guess build-aux/config.sub \ build-aux/depcomp build-aux/install-sh build-aux/ltmain.sh \ build-aux/missing @ARMCI_NETWORK_PORTALS_TRUE@am__append_6 = src-portals/acc.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/aggregate.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/armci.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/armcip.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/armci_portals.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/armci_portals.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/atomics-i386.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/buffers.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/caccumulate.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/ccopy.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/clusterinfo.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/copy.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/ds-shared.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/fence.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/kr_malloc.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/kr_malloc.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/locks.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/locks.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/memlock.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/memlock.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/memory.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/message.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/mutex.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/pack.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/pendbufs.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/portals_cp.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/portals_ds.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/portals.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/request.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/request.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/rmw.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/rtinfo.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/semaphores.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/semaphores.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/shmalloc.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/shmem.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/shmem.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/shmlimit.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/shmlimit.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/signaltrap.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/signaltrap.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/sockets.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/spawn.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/spinlock.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/strided.c \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/utils.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/vector.c @ARMCI_NETWORK_PORTALS_TRUE@@PORTALS_ENABLE_NEW_MALLOC_TRUE@am__append_7 = src-portals/new_memory.c @ARMCI_NETWORK_PORTALS_TRUE@@MSG_COMMS_MPI_TRUE@am__append_8 = src-portals/groups.c @ARMCI_ENABLE_GPC_CALLS_TRUE@@ARMCI_NETWORK_PORTALS_TRUE@am__append_9 = src-portals/gpc.c @ARMCI_NETWORK_PORTALS_TRUE@@THREAD_SAFE_TRUE@am__append_10 = src-portals/threads.c \ @ARMCI_NETWORK_PORTALS_TRUE@@THREAD_SAFE_TRUE@ src-portals/utils.c @ARMCI_NETWORK_PORTALS_TRUE@am__append_11 = src-portals/armci.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/gpc.h \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/message.h @ARMCI_NETWORK_PORTALS_TRUE@am__append_12 = \ @ARMCI_NETWORK_PORTALS_TRUE@ -I$(top_srcdir)/src-portals \ @ARMCI_NETWORK_PORTALS_TRUE@ -I$(top_srcdir)/src/include @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_13 = src-gemini/acc.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/aggregate.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/armci.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/armci-onesided.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/armci-onesided.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/armcip.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/atomics-i386.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/buffers.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/caccumulate.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/ccopy.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/clusterinfo.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/copy.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/ds-shared.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/fence.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/groups.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/kr_malloc.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/kr_malloc.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/locks.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/locks.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/memlock.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/memlock.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/memory.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/message.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/mutex.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/pack.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/pendbufs.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/request.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/request.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/rmw.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/rtinfo.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/semaphores.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/semaphores.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/shmalloc.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/shmem.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/shmem.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/shmlimit.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/shmlimit.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/signaltrap.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/signaltrap.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/sockets.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/spawn.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/spinlock.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/strided.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/utils.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/vector.c @ARMCI_ENABLE_GPC_CALLS_TRUE@@ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_14 = src-gemini/gpc.c @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@@THREAD_SAFE_TRUE@am__append_15 = src-gemini/threads.c \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@@THREAD_SAFE_TRUE@ src-gemini/utils.c @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_16 = src-gemini/armci.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/gpc.h \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/message.h @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_17 = -I$(top_srcdir)/src-gemini \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ -I$(top_srcdir)/src/include @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_18 = -lnumatoolkit \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ -lonesided ############################################################################## # src-portals # ############################################################################## # src-gemini # ############################################################################## # src # @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_19 = src/collectives/message.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/aggregate.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/armci.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/ccopy.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/clusterinfo.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/pack.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/iterator.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/iterator.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/ft/armci_chkpt.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/ft/armci_storage.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/acc.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/armcip.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/asm-ppc.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/atomic_ops_ia64.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/atomics-i386.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/copy.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/fujitsu-vpp.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/kr_malloc.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/locks.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/memlock.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/request.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/semaphores.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/shmalloc.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/shmem.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/shmlimit.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/signaltrap.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/spinlock.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/utils.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/locks/locks.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/locks/memlock.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/locks/mutex.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/locks/semaphores.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/memory/kr_malloc.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/memory/memory.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/progress/fence.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/progress/wait.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/xfer/caccumulate.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/xfer/rmw.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/xfer/strided.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/xfer/vector.c @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@MSG_COMMS_MPI_TRUE@am__append_20 = src/common/groups.c @ARMCI_NETWORK_BGML_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_21 = -I$(top_srcdir)/src/devices/bgml @ARMCI_NETWORK_BGML_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_22 = src/devices/bgml/bgmlacc.h \ @ARMCI_NETWORK_BGML_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/bgml/bgml.c \ @ARMCI_NETWORK_BGML_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/bgml/bgmldefs.h \ @ARMCI_NETWORK_BGML_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/bgml/bgml.h @ARMCI_NETWORK_CRAY_SHMEM_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_23 = -I$(top_srcdir)/src/devices/cray-shmem @ARMCI_NETWORK_CRAY_SHMEM_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_24 = src/memory/shmalloc.c @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_25 = -I$(top_srcdir)/src/devices/dcmf @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_26 = src/devices/dcmf/armcix.h @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_2_TRUE@am__append_27 = src/devices/dcmf/dcmf2/armcix_acc.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_2_TRUE@ src/devices/dcmf/dcmf2/armcix_fence.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_2_TRUE@ src/devices/dcmf/dcmf2/armcix_get.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_2_TRUE@ src/devices/dcmf/dcmf2/armcix_impl.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_2_TRUE@ src/devices/dcmf/dcmf2/armcix_lock.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_2_TRUE@ src/devices/dcmf/dcmf2/armcix_put.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_2_TRUE@ src/devices/dcmf/dcmf2/armcix_rmw.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_2_TRUE@ src/devices/dcmf/dcmf2/armcix_wait.c @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_2_TRUE@am__append_28 = src/devices/dcmf/dcmf-0.2.0/armcix_acc.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_2_TRUE@ src/devices/dcmf/dcmf-0.2.0/armcix_fence.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_2_TRUE@ src/devices/dcmf/dcmf-0.2.0/armcix_get.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_2_TRUE@ src/devices/dcmf/dcmf-0.2.0/armcix_impl.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_2_TRUE@ src/devices/dcmf/dcmf-0.2.0/armcix_lock.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_2_TRUE@ src/devices/dcmf/dcmf-0.2.0/armcix_put.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_2_TRUE@ src/devices/dcmf/dcmf-0.2.0/armcix_rmw.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_2_TRUE@ src/devices/dcmf/dcmf-0.2.0/armcix_wait.c @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_3_TRUE@am__append_29 = src/devices/dcmf/dcmf-0.3.0/armcix_acc.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_3_TRUE@ src/devices/dcmf/dcmf-0.3.0/armcix_fence.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_3_TRUE@ src/devices/dcmf/dcmf-0.3.0/armcix_get.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_3_TRUE@ src/devices/dcmf/dcmf-0.3.0/armcix_impl.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_3_TRUE@ src/devices/dcmf/dcmf-0.3.0/armcix_lock.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_3_TRUE@ src/devices/dcmf/dcmf-0.3.0/armcix_put.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_3_TRUE@ src/devices/dcmf/dcmf-0.3.0/armcix_rmw.c \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_3_TRUE@ src/devices/dcmf/dcmf-0.3.0/armcix_wait.c @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_LAPI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_30 = -I$(top_srcdir)/src/devices/lapi @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_LAPI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_31 = src/common/async.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_LAPI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/request.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_LAPI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/lapi/lapi.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_LAPI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/lapi/lapidefs.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_LAPI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/memory/buffers.c @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_MT_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_32 = -I$(top_srcdir)/src/devices/mpi-mt @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_MT_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_33 = src/common/ds-shared.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_MT_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/request.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_MT_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/spawn.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_MT_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/mpi-mt/mpi2_client.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_MT_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/mpi-mt/mpi2.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_MT_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/mpi-mt/mpi2_server.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_MT_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/memory/buffers.c @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_SPAWN_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_34 = -I$(top_srcdir)/src/devices/mpi-spawn @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_SPAWN_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_35 = src/common/ds-shared.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_SPAWN_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/request.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_SPAWN_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/mpi-spawn/mpi2_client.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_SPAWN_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/mpi-spawn/mpi2.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_SPAWN_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/mpi-spawn/mpi2_server.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_SPAWN_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/memory/buffers.c @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_36 = -I$(top_srcdir)/src/devices/openib @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_37 = src/common/async.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/ds-shared.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/regions.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/request.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/spawn.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/openib/armci-vapi.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/openib/cbuf.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/openib/cbuf.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/openib/openib.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/openib/pendbufs.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/openib/pendbufs.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/openib/rtinfo.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/memory/buffers.c @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ARMCI_NETWORK_SOCKETS_TRUE@am__append_38 = -I$(top_srcdir)/src/devices/sockets @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ARMCI_NETWORK_SOCKETS_TRUE@am__append_39 = src/common/async.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ARMCI_NETWORK_SOCKETS_TRUE@ src/common/ds-shared.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ARMCI_NETWORK_SOCKETS_TRUE@ src/common/request.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ARMCI_NETWORK_SOCKETS_TRUE@ src/common/spawn.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ARMCI_NETWORK_SOCKETS_TRUE@ src/devices/sockets/dataserv.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ARMCI_NETWORK_SOCKETS_TRUE@ src/devices/sockets/sockets.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ARMCI_NETWORK_SOCKETS_TRUE@ src/devices/sockets/sockets.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ARMCI_NETWORK_SOCKETS_TRUE@ src/memory/buffers.c @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ENABLE_CHECKPOINT_TRUE@am__append_40 = src/ft/armci_chkpt.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ENABLE_CHECKPOINT_TRUE@ src/ft/armci_storage.c @ARMCI_ENABLE_GPC_CALLS_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_41 = src/common/gpc.c @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@MACX_TRUE@am__append_42 = src/common/signaltrap.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@MACX_TRUE@ src/memory/shmalloc.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@MACX_TRUE@ src/memory/winshmem.c @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@MACX_TRUE@am__append_43 = -DSHMEM -DMMAP @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@CYGWIN_TRUE@@MACX_FALSE@am__append_44 = src/common/signaltrap.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@CYGWIN_TRUE@@MACX_FALSE@ src/memory/shmalloc.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@CYGWIN_TRUE@@MACX_FALSE@ src/memory/winshmem.c @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@CYGWIN_TRUE@@MACX_FALSE@am__append_45 = -DSHMEM -DMMAP @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@CYGWIN_FALSE@@MACX_FALSE@@SYSV_TRUE@am__append_46 = src/common/signaltrap.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@CYGWIN_FALSE@@MACX_FALSE@@SYSV_TRUE@ src/memory/shmem.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@CYGWIN_FALSE@@MACX_FALSE@@SYSV_TRUE@ src/memory/shmlimit.c @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@NB_NONCONT_TRUE@am__append_47 = src/common/noncont.c @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@THREAD_SAFE_TRUE@am__append_48 = src/common/utils.c \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@THREAD_SAFE_TRUE@ src/util/threads.c @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@NEC_TRUE@am__append_49 = src/locks/tas-sx.s @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_50 = src/include/armci.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/gpc.h \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/include/message.h @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_51 = -I$(top_srcdir)/src/include ############################################################################## # profiling # @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@am__append_52 = libarmci_prof.la @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@am__append_53 = src/common/capi.c @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE@am__append_54 = tools/armci_prof.c @ENABLE_PROFILING_FALSE@am__append_55 = src/common/capi.c ############################################################################## # tcgmsg/ipcv4.0 # @MSG_COMMS_TCGMSG4_TRUE@am__append_56 = -I$(top_srcdir)/tcgmsg/ipcv4.0 @MSG_COMMS_TCGMSG4_TRUE@am__append_57 = tcgmsg/ipcv4.0/brdcst.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/checkbyte.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/cluster.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/cluster.h \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/defglobals.h \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/drand48.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/error.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/evlog.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/evlog.h \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/evon.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/globalop.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/llog.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/mdtob.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/mdtoi.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/mitob.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/mitod.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/mtime.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/niceftn.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/nnodes.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/nodeid.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/nxtval.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/pbegin.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/pbeginf.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/pfilecopy.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/sema.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/sema.h \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/setdbg.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/shmem.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/signals.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/signals.h \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/snd.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/sndrcv.h \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/sndrcvP.h \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/sockets.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/srftoc.h \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/srmover.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/stats.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/synch.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/usleep.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/waitall.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/waitcom.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/xdrstuff.c \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/xdrstuff.h @MSG_COMMS_TCGMSG4_TRUE@am__append_58 = parallel ############################################################################## # tcgmsg/ipcv5.0 # @MSG_COMMS_TCGMSG5_TRUE@am__append_59 = -I$(top_srcdir)/tcgmsg/ipcv5.0 @MSG_COMMS_TCGMSG5_TRUE@am__append_60 = tcgmsg/ipcv5.0/drand48.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/evlog.h \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/globalop.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/llog.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/mdtob.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/mdtoi.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/misc.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/mitob.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/mitod.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/mtime.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/niceftn.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/nnodes.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/nodeid.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/pbegin.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/pfilecopy.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/queues.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/signals.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/sndrcv.h \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/snd_rcv_probe.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/srftoc.h \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/tcgmsgP.h \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/usleep.c \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/waitall.c @ARMCI_NETWORK_LAPI_TRUE@@MSG_COMMS_TCGMSG5_TRUE@am__append_61 = tcgmsg/ipcv5.0/async_send_lapi.c \ @ARMCI_NETWORK_LAPI_TRUE@@MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/lapi_putget.c @ARMCI_NETWORK_LAPI_FALSE@@MSG_COMMS_TCGMSG5_TRUE@am__append_62 = tcgmsg/ipcv5.0/async_send.c \ @ARMCI_NETWORK_LAPI_FALSE@@MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/busy.c \ @ARMCI_NETWORK_LAPI_FALSE@@MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/error.c \ @ARMCI_NETWORK_LAPI_FALSE@@MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/nxtval.shm.c \ @ARMCI_NETWORK_LAPI_FALSE@@MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/pbeginf.c \ @ARMCI_NETWORK_LAPI_FALSE@@MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/shmem.c \ @ARMCI_NETWORK_LAPI_FALSE@@MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/synch.c @HAVE_ARMCI_NOTIFY_TRUE@am__append_63 = testing/testnotify @ENABLE_CHECKPOINT_TRUE@am__append_64 = testing/fttest @ARMCI_ENABLE_GPC_CALLS_TRUE@am__append_65 = testing/gpctest @MSG_COMMS_MPI_TRUE@am__append_66 = testing/simple testing/test_groups @ARMCI_NETWORK_ARMCI_FALSE@@MSG_COMMS_MPI_TRUE@@SYSV_TRUE@am__append_67 = testing/ipctest @THREAD_SAFE_TRUE@am__append_68 = testing/test_mt @ARMCI_NETWORK_PORTALS_TRUE@am__append_69 = testing/clone testing/fork \ @ARMCI_NETWORK_PORTALS_TRUE@ testing/origptl testing/ptltest \ @ARMCI_NETWORK_PORTALS_TRUE@ testing/te @HAVE_ARMCI_STRIDE_INFO_INIT_TRUE@am__append_70 = testing/testitr @HAVE_ARMCI_MSG_INIT_FALSE@am__append_71 = testing/rpl_armci_msg_init.c @HAVE_ARMCI_MSG_FINALIZE_FALSE@am__append_72 = testing/rpl_armci_msg_finalize.c @HAVE_ARMCI_NOTIFY_TRUE@am__append_73 = testing/testnotify$(EXEEXT) @ENABLE_CHECKPOINT_TRUE@am__append_74 = testing/fttest$(EXEEXT) @ARMCI_ENABLE_GPC_CALLS_TRUE@am__append_75 = testing/gpctest$(EXEEXT) @MSG_COMMS_MPI_TRUE@am__append_76 = testing/simple$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ testing/test_groups$(EXEEXT) #ARMCI_PARALLEL_TESTS += testing/ipctest$(EXEEXT) # needs bug fixes @THREAD_SAFE_TRUE@am__append_77 = testing/test_mt$(EXEEXT) #ARMCI_PARALLEL_TESTS += testing/clone$(EXEEXT) #ARMCI_PARALLEL_TESTS += testing/fork$(EXEEXT) #ARMCI_PARALLEL_TESTS += testing/origptl$(EXEEXT) #ARMCI_PARALLEL_TESTS += testing/ptltest$(EXEEXT) #ARMCI_PARALLEL_TESTS += testing/te$(EXEEXT) @HAVE_ARMCI_STRIDE_INFO_INIT_TRUE@am__append_78 = testing/testitr$(EXEEXT) @HAVE_ARMCI_NOTIFY_TRUE@am__append_79 = examples/features/concurrency/simple/comdegree \ @HAVE_ARMCI_NOTIFY_TRUE@ examples/features/notification/simple/testnotify @ARMCI_ENABLE_GPC_CALLS_TRUE@am__append_80 = examples/features/gpc/hashtable/test_hashtable @ARMCI_ENABLE_GPC_CALLS_TRUE@@HAVE_BLAS_TRUE@@HAVE_LAPACK_TRUE@am__append_81 = examples/features/proc_affinity/computation_impact/computation_impact @ARMCI_ENABLE_GPC_CALLS_TRUE@am__append_82 = examples/features/proc_affinity/simple/simple @MSG_COMMS_MPI_TRUE@am__append_83 = examples/features/concurrency/multidma/multidma \ @MSG_COMMS_MPI_TRUE@ examples/features/non-blocking/overlap/overlap @RANDOM_ACCESS_TRUE@am__append_84 = examples/benchmarks/RandomAccess/simple/simple \ @RANDOM_ACCESS_TRUE@ examples/benchmarks/RandomAccess/smp_bucket/smp_bucket @THREAD_SAFE_TRUE@am__append_85 = examples/benchmarks/lu/armci_multithreaded/lu-block-th @HAVE_ARMCI_NOTIFY_TRUE@am__append_86 = examples/features/concurrency/simple/comdegree$(EXEEXT) \ @HAVE_ARMCI_NOTIFY_TRUE@ examples/features/notification/simple/testnotify$(EXEEXT) @ARMCI_ENABLE_GPC_CALLS_TRUE@am__append_87 = examples/features/gpc/hashtable/test_hashtable$(EXEEXT) @ARMCI_ENABLE_GPC_CALLS_TRUE@@HAVE_BLAS_TRUE@@HAVE_LAPACK_TRUE@am__append_88 = examples/features/proc_affinity/computation_impact/computation_impact$(EXEEXT) @ARMCI_ENABLE_GPC_CALLS_TRUE@am__append_89 = examples/features/proc_affinity/simple/simple$(EXEEXT) #ARMCI_PARALLEL_TESTS += examples/features/concurrency/multidma/multidma$(EXEEXT) # needs bug fixes #ARMCI_PARALLEL_TESTS += examples/features/non-blocking/overlap/overlap$(EXEEXT) # needs bug fixes @RANDOM_ACCESS_TRUE@am__append_90 = examples/benchmarks/RandomAccess/simple/simple$(EXEEXT) \ @RANDOM_ACCESS_TRUE@ examples/benchmarks/RandomAccess/smp_bucket/smp_bucket$(EXEEXT) @THREAD_SAFE_TRUE@am__append_91 = examples/benchmarks/lu/armci_multithreaded/lu-block-th$(EXEEXT) TESTS = $(am__EXEEXT_17) $(am__EXEEXT_18) XFAIL_TESTS = $(am__EXEEXT_20) $(am__EXEEXT_20) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../m4/armci_as_no_i386asm.m4 \ $(top_srcdir)/../m4/armci_c_opt.m4 \ $(top_srcdir)/../m4/armci_cxx_opt.m4 \ $(top_srcdir)/../m4/armci_enable_gpc.m4 \ $(top_srcdir)/../m4/armci_enable_profile.m4 \ $(top_srcdir)/../m4/armci_group.m4 \ $(top_srcdir)/../m4/armci_nb_noncont.m4 \ $(top_srcdir)/../m4/armci_setup.m4 \ $(top_srcdir)/../m4/armci_shmmax.m4 \ $(top_srcdir)/../m4/ax_sys_weak_alias.m4 \ $(top_srcdir)/../m4/ga_ar.m4 \ $(top_srcdir)/../m4/ga_arg_parse.m4 \ $(top_srcdir)/../m4/ga_armci_network.m4 \ $(top_srcdir)/../m4/ga_as.m4 \ $(top_srcdir)/../m4/ga_c_match_types.m4 \ $(top_srcdir)/../m4/ga_check_func.m4 \ $(top_srcdir)/../m4/ga_check_header.m4 \ $(top_srcdir)/../m4/ga_compiler_vendor.m4 \ $(top_srcdir)/../m4/ga_cross_compiling.m4 \ $(top_srcdir)/../m4/ga_enable_checkpoint.m4 \ $(top_srcdir)/../m4/ga_enable_opt.m4 \ $(top_srcdir)/../m4/ga_enable_trace.m4 \ $(top_srcdir)/../m4/ga_function.m4 \ $(top_srcdir)/../m4/ga_mpi_test_disable.m4 \ $(top_srcdir)/../m4/ga_mpi_unwrap.m4 \ $(top_srcdir)/../m4/ga_mpicc.m4 \ $(top_srcdir)/../m4/ga_mpicc_test.m4 \ $(top_srcdir)/../m4/ga_mpicxx.m4 \ $(top_srcdir)/../m4/ga_mpicxx_test.m4 \ $(top_srcdir)/../m4/ga_msg_comms.m4 \ $(top_srcdir)/../m4/ga_sys_weak_alias.m4 \ $(top_srcdir)/../m4/ga_target.m4 \ $(top_srcdir)/../m4/ga_thread_safe.m4 \ $(top_srcdir)/../m4/ga_union_semun.m4 \ $(top_srcdir)/../m4/ga_warn_flags.m4 \ $(top_srcdir)/../m4/ga_with_help.m4 \ $(top_srcdir)/../m4/tcgmsg_rsh.m4 \ $(top_srcdir)/../m4/tcgmsg_timings.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/lt_obsolete.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @ARMCI_NETWORK_ARMCI_FALSE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \ @ARMCI_NETWORK_ARMCI_FALSE@ $(am__DEPENDENCIES_1) libarmci_la_DEPENDENCIES = $(am__DEPENDENCIES_2) am__libarmci_la_SOURCES_DIST = src-portals/acc.h \ src-portals/aggregate.c src-portals/armci.c \ src-portals/armcip.h src-portals/armci_portals.c \ src-portals/armci_portals.h src-portals/atomics-i386.h \ src-portals/buffers.c src-portals/caccumulate.c \ src-portals/ccopy.c src-portals/clusterinfo.c \ src-portals/copy.h src-portals/ds-shared.c src-portals/fence.c \ src-portals/kr_malloc.c src-portals/kr_malloc.h \ src-portals/locks.c src-portals/locks.h src-portals/memlock.c \ src-portals/memlock.h src-portals/memory.c \ src-portals/message.c src-portals/mutex.c src-portals/pack.c \ src-portals/pendbufs.h src-portals/portals_cp.c \ src-portals/portals_ds.c src-portals/portals.c \ src-portals/request.c src-portals/request.h src-portals/rmw.c \ src-portals/rtinfo.c src-portals/semaphores.c \ src-portals/semaphores.h src-portals/shmalloc.h \ src-portals/shmem.c src-portals/shmem.h src-portals/shmlimit.c \ src-portals/shmlimit.h src-portals/signaltrap.c \ src-portals/signaltrap.h src-portals/sockets.h \ src-portals/spawn.c src-portals/spinlock.h \ src-portals/strided.c src-portals/utils.h src-portals/vector.c \ src-portals/new_memory.c src-portals/groups.c \ src-portals/gpc.c src-portals/threads.c src-portals/utils.c \ src-gemini/acc.h src-gemini/aggregate.c src-gemini/armci.c \ src-gemini/armci-onesided.c src-gemini/armci-onesided.h \ src-gemini/armcip.h src-gemini/atomics-i386.h \ src-gemini/buffers.c src-gemini/caccumulate.c \ src-gemini/ccopy.c src-gemini/clusterinfo.c src-gemini/copy.h \ src-gemini/ds-shared.c src-gemini/fence.c src-gemini/groups.c \ src-gemini/kr_malloc.c src-gemini/kr_malloc.h \ src-gemini/locks.c src-gemini/locks.h src-gemini/memlock.c \ src-gemini/memlock.h src-gemini/memory.c src-gemini/message.c \ src-gemini/mutex.c src-gemini/pack.c src-gemini/pendbufs.h \ src-gemini/request.c src-gemini/request.h src-gemini/rmw.c \ src-gemini/rtinfo.c src-gemini/semaphores.c \ src-gemini/semaphores.h src-gemini/shmalloc.h \ src-gemini/shmem.c src-gemini/shmem.h src-gemini/shmlimit.c \ src-gemini/shmlimit.h src-gemini/signaltrap.c \ src-gemini/signaltrap.h src-gemini/sockets.h \ src-gemini/spawn.c src-gemini/spinlock.h src-gemini/strided.c \ src-gemini/utils.h src-gemini/vector.c src-gemini/gpc.c \ src-gemini/threads.c src-gemini/utils.c \ src/collectives/message.c src/common/aggregate.c \ src/common/armci.c src/common/ccopy.c src/common/clusterinfo.c \ src/common/pack.c src/common/iterator.c src/include/iterator.h \ src/ft/armci_chkpt.h src/ft/armci_storage.h src/include/acc.h \ src/include/armcip.h src/include/asm-ppc.h \ src/include/atomic_ops_ia64.h src/include/atomics-i386.h \ src/include/copy.h src/include/fujitsu-vpp.h \ src/include/kr_malloc.h src/include/locks.h \ src/include/memlock.h src/include/request.h \ src/include/semaphores.h src/include/shmalloc.h \ src/include/shmem.h src/include/shmlimit.h \ src/include/signaltrap.h src/include/spinlock.h \ src/include/utils.h src/locks/locks.c src/locks/memlock.c \ src/locks/mutex.c src/locks/semaphores.c \ src/memory/kr_malloc.c src/memory/memory.c \ src/progress/fence.c src/progress/wait.c \ src/xfer/caccumulate.c src/xfer/rmw.c src/xfer/strided.c \ src/xfer/vector.c src/common/groups.c \ src/devices/bgml/bgmlacc.h src/devices/bgml/bgml.c \ src/devices/bgml/bgmldefs.h src/devices/bgml/bgml.h \ src/memory/shmalloc.c src/devices/dcmf/armcix.h \ src/devices/dcmf/dcmf2/armcix_acc.c \ src/devices/dcmf/dcmf2/armcix_fence.c \ src/devices/dcmf/dcmf2/armcix_get.c \ src/devices/dcmf/dcmf2/armcix_impl.c \ src/devices/dcmf/dcmf2/armcix_lock.c \ src/devices/dcmf/dcmf2/armcix_put.c \ src/devices/dcmf/dcmf2/armcix_rmw.c \ src/devices/dcmf/dcmf2/armcix_wait.c \ src/devices/dcmf/dcmf-0.2.0/armcix_acc.c \ src/devices/dcmf/dcmf-0.2.0/armcix_fence.c \ src/devices/dcmf/dcmf-0.2.0/armcix_get.c \ src/devices/dcmf/dcmf-0.2.0/armcix_impl.c \ src/devices/dcmf/dcmf-0.2.0/armcix_lock.c \ src/devices/dcmf/dcmf-0.2.0/armcix_put.c \ src/devices/dcmf/dcmf-0.2.0/armcix_rmw.c \ src/devices/dcmf/dcmf-0.2.0/armcix_wait.c \ src/devices/dcmf/dcmf-0.3.0/armcix_acc.c \ src/devices/dcmf/dcmf-0.3.0/armcix_fence.c \ src/devices/dcmf/dcmf-0.3.0/armcix_get.c \ src/devices/dcmf/dcmf-0.3.0/armcix_impl.c \ src/devices/dcmf/dcmf-0.3.0/armcix_lock.c \ src/devices/dcmf/dcmf-0.3.0/armcix_put.c \ src/devices/dcmf/dcmf-0.3.0/armcix_rmw.c \ src/devices/dcmf/dcmf-0.3.0/armcix_wait.c src/common/async.c \ src/common/request.c src/devices/lapi/lapi.c \ src/devices/lapi/lapidefs.h src/memory/buffers.c \ src/common/ds-shared.c src/common/spawn.c \ src/devices/mpi-mt/mpi2_client.c src/devices/mpi-mt/mpi2.h \ src/devices/mpi-mt/mpi2_server.c \ src/devices/mpi-spawn/mpi2_client.c \ src/devices/mpi-spawn/mpi2.h \ src/devices/mpi-spawn/mpi2_server.c src/common/regions.c \ src/devices/openib/armci-vapi.h src/devices/openib/cbuf.c \ src/devices/openib/cbuf.h src/devices/openib/openib.c \ src/devices/openib/pendbufs.c src/devices/openib/pendbufs.h \ src/devices/openib/rtinfo.c src/devices/sockets/dataserv.c \ src/devices/sockets/sockets.c src/devices/sockets/sockets.h \ src/ft/armci_chkpt.c src/ft/armci_storage.c src/common/gpc.c \ src/common/signaltrap.c src/memory/winshmem.c \ src/memory/shmem.c src/memory/shmlimit.c src/common/noncont.c \ src/common/utils.c src/util/threads.c src/locks/tas-sx.s \ src/common/capi.c tools/armci_prof.c tcgmsg/ipcv4.0/brdcst.c \ tcgmsg/ipcv4.0/checkbyte.c tcgmsg/ipcv4.0/cluster.c \ tcgmsg/ipcv4.0/cluster.h tcgmsg/ipcv4.0/defglobals.h \ tcgmsg/ipcv4.0/drand48.c tcgmsg/ipcv4.0/error.c \ tcgmsg/ipcv4.0/evlog.c tcgmsg/ipcv4.0/evlog.h \ tcgmsg/ipcv4.0/evon.c tcgmsg/ipcv4.0/globalop.c \ tcgmsg/ipcv4.0/llog.c tcgmsg/ipcv4.0/mdtob.c \ tcgmsg/ipcv4.0/mdtoi.c tcgmsg/ipcv4.0/mitob.c \ tcgmsg/ipcv4.0/mitod.c tcgmsg/ipcv4.0/mtime.c \ tcgmsg/ipcv4.0/niceftn.c tcgmsg/ipcv4.0/nnodes.c \ tcgmsg/ipcv4.0/nodeid.c tcgmsg/ipcv4.0/nxtval.c \ tcgmsg/ipcv4.0/pbegin.c tcgmsg/ipcv4.0/pbeginf.c \ tcgmsg/ipcv4.0/pfilecopy.c tcgmsg/ipcv4.0/sema.c \ tcgmsg/ipcv4.0/sema.h tcgmsg/ipcv4.0/setdbg.c \ tcgmsg/ipcv4.0/shmem.c tcgmsg/ipcv4.0/signals.c \ tcgmsg/ipcv4.0/signals.h tcgmsg/ipcv4.0/snd.c \ tcgmsg/ipcv4.0/sndrcv.h tcgmsg/ipcv4.0/sndrcvP.h \ tcgmsg/ipcv4.0/sockets.c tcgmsg/ipcv4.0/srftoc.h \ tcgmsg/ipcv4.0/srmover.c tcgmsg/ipcv4.0/stats.c \ tcgmsg/ipcv4.0/synch.c tcgmsg/ipcv4.0/usleep.c \ tcgmsg/ipcv4.0/waitall.c tcgmsg/ipcv4.0/waitcom.c \ tcgmsg/ipcv4.0/xdrstuff.c tcgmsg/ipcv4.0/xdrstuff.h \ tcgmsg/ipcv5.0/drand48.c tcgmsg/ipcv5.0/evlog.h \ tcgmsg/ipcv5.0/globalop.c tcgmsg/ipcv5.0/llog.c \ tcgmsg/ipcv5.0/mdtob.c tcgmsg/ipcv5.0/mdtoi.c \ tcgmsg/ipcv5.0/misc.c tcgmsg/ipcv5.0/mitob.c \ tcgmsg/ipcv5.0/mitod.c tcgmsg/ipcv5.0/mtime.c \ tcgmsg/ipcv5.0/niceftn.c tcgmsg/ipcv5.0/nnodes.c \ tcgmsg/ipcv5.0/nodeid.c tcgmsg/ipcv5.0/pbegin.c \ tcgmsg/ipcv5.0/pfilecopy.c tcgmsg/ipcv5.0/queues.c \ tcgmsg/ipcv5.0/signals.c tcgmsg/ipcv5.0/sndrcv.h \ tcgmsg/ipcv5.0/snd_rcv_probe.c tcgmsg/ipcv5.0/srftoc.h \ tcgmsg/ipcv5.0/tcgmsgP.h tcgmsg/ipcv5.0/usleep.c \ tcgmsg/ipcv5.0/waitall.c tcgmsg/ipcv5.0/async_send_lapi.c \ tcgmsg/ipcv5.0/lapi_putget.c tcgmsg/ipcv5.0/async_send.c \ tcgmsg/ipcv5.0/busy.c tcgmsg/ipcv5.0/error.c \ tcgmsg/ipcv5.0/nxtval.shm.c tcgmsg/ipcv5.0/pbeginf.c \ tcgmsg/ipcv5.0/shmem.c tcgmsg/ipcv5.0/synch.c am__dirstamp = $(am__leading_dot)dirstamp @ARMCI_NETWORK_PORTALS_TRUE@am__objects_1 = src-portals/aggregate.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/armci.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/armci_portals.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/buffers.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/caccumulate.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/ccopy.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/clusterinfo.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/ds-shared.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/fence.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/kr_malloc.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/locks.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/memlock.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/memory.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/message.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/mutex.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/pack.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/portals_cp.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/portals_ds.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/portals.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/request.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/rmw.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/rtinfo.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/semaphores.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/shmem.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/shmlimit.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/signaltrap.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/spawn.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/strided.lo \ @ARMCI_NETWORK_PORTALS_TRUE@ src-portals/vector.lo @ARMCI_NETWORK_PORTALS_TRUE@@PORTALS_ENABLE_NEW_MALLOC_TRUE@am__objects_2 = src-portals/new_memory.lo @ARMCI_NETWORK_PORTALS_TRUE@@MSG_COMMS_MPI_TRUE@am__objects_3 = src-portals/groups.lo @ARMCI_ENABLE_GPC_CALLS_TRUE@@ARMCI_NETWORK_PORTALS_TRUE@am__objects_4 = src-portals/gpc.lo @ARMCI_NETWORK_PORTALS_TRUE@@THREAD_SAFE_TRUE@am__objects_5 = src-portals/threads.lo \ @ARMCI_NETWORK_PORTALS_TRUE@@THREAD_SAFE_TRUE@ src-portals/utils.lo @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__objects_6 = src-gemini/aggregate.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/armci.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/armci-onesided.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/buffers.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/caccumulate.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/ccopy.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/clusterinfo.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/ds-shared.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/fence.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/groups.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/kr_malloc.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/locks.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/memlock.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/memory.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/message.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/mutex.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/pack.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/request.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/rmw.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/rtinfo.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/semaphores.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/shmem.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/shmlimit.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/signaltrap.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/spawn.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/strided.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src-gemini/vector.lo @ARMCI_ENABLE_GPC_CALLS_TRUE@@ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__objects_7 = src-gemini/gpc.lo @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@@THREAD_SAFE_TRUE@am__objects_8 = src-gemini/threads.lo \ @ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@@THREAD_SAFE_TRUE@ src-gemini/utils.lo @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@am__objects_9 = src/collectives/message.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/aggregate.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/armci.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/ccopy.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/clusterinfo.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/pack.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/iterator.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/locks/locks.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/locks/memlock.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/locks/mutex.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/locks/semaphores.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/memory/kr_malloc.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/memory/memory.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/progress/fence.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/progress/wait.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/xfer/caccumulate.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/xfer/rmw.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/xfer/strided.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ src/xfer/vector.lo @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@MSG_COMMS_MPI_TRUE@am__objects_10 = src/common/groups.lo @ARMCI_NETWORK_BGML_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@am__objects_11 = src/devices/bgml/bgml.lo @ARMCI_NETWORK_CRAY_SHMEM_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@am__objects_12 = src/memory/shmalloc.lo am__objects_13 = @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_2_TRUE@am__objects_14 = src/devices/dcmf/dcmf2/armcix_acc.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_2_TRUE@ src/devices/dcmf/dcmf2/armcix_fence.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_2_TRUE@ src/devices/dcmf/dcmf2/armcix_get.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_2_TRUE@ src/devices/dcmf/dcmf2/armcix_impl.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_2_TRUE@ src/devices/dcmf/dcmf2/armcix_lock.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_2_TRUE@ src/devices/dcmf/dcmf2/armcix_put.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_2_TRUE@ src/devices/dcmf/dcmf2/armcix_rmw.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_2_TRUE@ src/devices/dcmf/dcmf2/armcix_wait.lo @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_2_TRUE@am__objects_15 = src/devices/dcmf/dcmf-0.2.0/armcix_acc.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_2_TRUE@ src/devices/dcmf/dcmf-0.2.0/armcix_fence.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_2_TRUE@ src/devices/dcmf/dcmf-0.2.0/armcix_get.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_2_TRUE@ src/devices/dcmf/dcmf-0.2.0/armcix_impl.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_2_TRUE@ src/devices/dcmf/dcmf-0.2.0/armcix_lock.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_2_TRUE@ src/devices/dcmf/dcmf-0.2.0/armcix_put.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_2_TRUE@ src/devices/dcmf/dcmf-0.2.0/armcix_rmw.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_2_TRUE@ src/devices/dcmf/dcmf-0.2.0/armcix_wait.lo @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_3_TRUE@am__objects_16 = src/devices/dcmf/dcmf-0.3.0/armcix_acc.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_3_TRUE@ src/devices/dcmf/dcmf-0.3.0/armcix_fence.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_3_TRUE@ src/devices/dcmf/dcmf-0.3.0/armcix_get.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_3_TRUE@ src/devices/dcmf/dcmf-0.3.0/armcix_impl.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_3_TRUE@ src/devices/dcmf/dcmf-0.3.0/armcix_lock.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_3_TRUE@ src/devices/dcmf/dcmf-0.3.0/armcix_put.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_3_TRUE@ src/devices/dcmf/dcmf-0.3.0/armcix_rmw.lo \ @ARMCI_NETWORK_DCMF_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@DCMF_VER_0_3_TRUE@ src/devices/dcmf/dcmf-0.3.0/armcix_wait.lo @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_LAPI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__objects_17 = src/common/async.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_LAPI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/request.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_LAPI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/lapi/lapi.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_LAPI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/memory/buffers.lo @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_MT_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__objects_18 = src/common/ds-shared.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_MT_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/request.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_MT_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/spawn.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_MT_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/mpi-mt/mpi2_client.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_MT_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/mpi-mt/mpi2_server.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_MT_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/memory/buffers.lo @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_SPAWN_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__objects_19 = src/common/ds-shared.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_SPAWN_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/request.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_SPAWN_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/mpi-spawn/mpi2_client.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_SPAWN_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/mpi-spawn/mpi2_server.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_MPI_SPAWN_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/memory/buffers.lo @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__objects_20 = src/common/async.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/ds-shared.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/regions.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/request.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/common/spawn.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/openib/cbuf.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/openib/openib.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/openib/pendbufs.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/devices/openib/rtinfo.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_OPENIB_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ src/memory/buffers.lo @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ARMCI_NETWORK_SOCKETS_TRUE@am__objects_21 = src/common/async.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ARMCI_NETWORK_SOCKETS_TRUE@ src/common/ds-shared.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ARMCI_NETWORK_SOCKETS_TRUE@ src/common/request.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ARMCI_NETWORK_SOCKETS_TRUE@ src/common/spawn.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ARMCI_NETWORK_SOCKETS_TRUE@ src/devices/sockets/dataserv.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ARMCI_NETWORK_SOCKETS_TRUE@ src/devices/sockets/sockets.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ARMCI_NETWORK_SOCKETS_TRUE@ src/memory/buffers.lo @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ENABLE_CHECKPOINT_TRUE@am__objects_22 = src/ft/armci_chkpt.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@ENABLE_CHECKPOINT_TRUE@ src/ft/armci_storage.lo @ARMCI_ENABLE_GPC_CALLS_TRUE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@am__objects_23 = src/common/gpc.lo @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@MACX_TRUE@am__objects_24 = src/common/signaltrap.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@MACX_TRUE@ src/memory/shmalloc.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@MACX_TRUE@ src/memory/winshmem.lo @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@CYGWIN_TRUE@@MACX_FALSE@am__objects_25 = src/common/signaltrap.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@CYGWIN_TRUE@@MACX_FALSE@ src/memory/shmalloc.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@CYGWIN_TRUE@@MACX_FALSE@ src/memory/winshmem.lo @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@CYGWIN_FALSE@@MACX_FALSE@@SYSV_TRUE@am__objects_26 = src/common/signaltrap.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@CYGWIN_FALSE@@MACX_FALSE@@SYSV_TRUE@ src/memory/shmem.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@CYGWIN_FALSE@@MACX_FALSE@@SYSV_TRUE@ src/memory/shmlimit.lo @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@NB_NONCONT_TRUE@am__objects_27 = src/common/noncont.lo @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@THREAD_SAFE_TRUE@am__objects_28 = src/common/utils.lo \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@THREAD_SAFE_TRUE@ src/util/threads.lo @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@NEC_TRUE@am__objects_29 = src/locks/tas-sx.lo @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@am__objects_30 = src/common/capi.lo @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE@am__objects_31 = tools/armci_prof.lo @ENABLE_PROFILING_FALSE@am__objects_32 = src/common/capi.lo @MSG_COMMS_TCGMSG4_TRUE@am__objects_33 = tcgmsg/ipcv4.0/brdcst.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/checkbyte.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/cluster.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/drand48.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/error.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/evlog.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/evon.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/globalop.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/llog.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/mdtob.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/mdtoi.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/mitob.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/mitod.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/mtime.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/niceftn.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/nnodes.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/nodeid.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/nxtval.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/pbegin.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/pbeginf.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/pfilecopy.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/sema.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/setdbg.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/shmem.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/signals.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/snd.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/sockets.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/srmover.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/stats.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/synch.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/usleep.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/waitall.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/waitcom.lo \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/xdrstuff.lo @MSG_COMMS_TCGMSG5_TRUE@am__objects_34 = tcgmsg/ipcv5.0/drand48.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/globalop.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/llog.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/mdtob.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/mdtoi.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/misc.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/mitob.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/mitod.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/mtime.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/niceftn.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/nnodes.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/nodeid.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/pbegin.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/pfilecopy.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/queues.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/signals.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/snd_rcv_probe.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/usleep.lo \ @MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/waitall.lo @ARMCI_NETWORK_LAPI_TRUE@@MSG_COMMS_TCGMSG5_TRUE@am__objects_35 = tcgmsg/ipcv5.0/async_send_lapi.lo \ @ARMCI_NETWORK_LAPI_TRUE@@MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/lapi_putget.lo @ARMCI_NETWORK_LAPI_FALSE@@MSG_COMMS_TCGMSG5_TRUE@am__objects_36 = tcgmsg/ipcv5.0/async_send.lo \ @ARMCI_NETWORK_LAPI_FALSE@@MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/busy.lo \ @ARMCI_NETWORK_LAPI_FALSE@@MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/error.lo \ @ARMCI_NETWORK_LAPI_FALSE@@MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/nxtval.shm.lo \ @ARMCI_NETWORK_LAPI_FALSE@@MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/pbeginf.lo \ @ARMCI_NETWORK_LAPI_FALSE@@MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/shmem.lo \ @ARMCI_NETWORK_LAPI_FALSE@@MSG_COMMS_TCGMSG5_TRUE@ tcgmsg/ipcv5.0/synch.lo am_libarmci_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ $(am__objects_3) $(am__objects_4) $(am__objects_5) \ $(am__objects_6) $(am__objects_7) $(am__objects_8) \ $(am__objects_9) $(am__objects_10) $(am__objects_11) \ $(am__objects_12) $(am__objects_13) $(am__objects_14) \ $(am__objects_15) $(am__objects_16) $(am__objects_17) \ $(am__objects_18) $(am__objects_19) $(am__objects_20) \ $(am__objects_21) $(am__objects_22) $(am__objects_23) \ $(am__objects_24) $(am__objects_25) $(am__objects_26) \ $(am__objects_27) $(am__objects_28) $(am__objects_29) \ $(am__objects_30) $(am__objects_31) $(am__objects_32) \ $(am__objects_33) $(am__objects_34) $(am__objects_35) \ $(am__objects_36) nodist_libarmci_la_OBJECTS = libarmci_la_OBJECTS = $(am_libarmci_la_OBJECTS) \ $(nodist_libarmci_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent @ARMCI_NETWORK_ARMCI_FALSE@am_libarmci_la_rpath = -rpath $(libdir) libarmci_prof_la_LIBADD = am__libarmci_prof_la_SOURCES_DIST = tools/armci_prof.c @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@am_libarmci_prof_la_OBJECTS = tools/armci_prof.lo libarmci_prof_la_OBJECTS = $(am_libarmci_prof_la_OBJECTS) @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@am_libarmci_prof_la_rpath = -rpath \ @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@ $(libdir) @MSG_COMMS_TCGMSG4_TRUE@am__EXEEXT_1 = parallel$(EXEEXT) @HAVE_ARMCI_NOTIFY_TRUE@am__EXEEXT_2 = testing/testnotify$(EXEEXT) @ENABLE_CHECKPOINT_TRUE@am__EXEEXT_3 = testing/fttest$(EXEEXT) @ARMCI_ENABLE_GPC_CALLS_TRUE@am__EXEEXT_4 = testing/gpctest$(EXEEXT) @MSG_COMMS_MPI_TRUE@am__EXEEXT_5 = testing/simple$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ testing/test_groups$(EXEEXT) @ARMCI_NETWORK_ARMCI_FALSE@@MSG_COMMS_MPI_TRUE@@SYSV_TRUE@am__EXEEXT_6 = testing/ipctest$(EXEEXT) @THREAD_SAFE_TRUE@am__EXEEXT_7 = testing/test_mt$(EXEEXT) @ARMCI_NETWORK_PORTALS_TRUE@am__EXEEXT_8 = testing/clone$(EXEEXT) \ @ARMCI_NETWORK_PORTALS_TRUE@ testing/fork$(EXEEXT) \ @ARMCI_NETWORK_PORTALS_TRUE@ testing/origptl$(EXEEXT) \ @ARMCI_NETWORK_PORTALS_TRUE@ testing/ptltest$(EXEEXT) \ @ARMCI_NETWORK_PORTALS_TRUE@ testing/te$(EXEEXT) @HAVE_ARMCI_STRIDE_INFO_INIT_TRUE@am__EXEEXT_9 = \ @HAVE_ARMCI_STRIDE_INFO_INIT_TRUE@ testing/testitr$(EXEEXT) @HAVE_ARMCI_NOTIFY_TRUE@am__EXEEXT_10 = examples/features/concurrency/simple/comdegree$(EXEEXT) \ @HAVE_ARMCI_NOTIFY_TRUE@ examples/features/notification/simple/testnotify$(EXEEXT) @ARMCI_ENABLE_GPC_CALLS_TRUE@am__EXEEXT_11 = examples/features/gpc/hashtable/test_hashtable$(EXEEXT) @ARMCI_ENABLE_GPC_CALLS_TRUE@@HAVE_BLAS_TRUE@@HAVE_LAPACK_TRUE@am__EXEEXT_12 = examples/features/proc_affinity/computation_impact/computation_impact$(EXEEXT) @ARMCI_ENABLE_GPC_CALLS_TRUE@am__EXEEXT_13 = examples/features/proc_affinity/simple/simple$(EXEEXT) @MSG_COMMS_MPI_TRUE@am__EXEEXT_14 = examples/features/concurrency/multidma/multidma$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ examples/features/non-blocking/overlap/overlap$(EXEEXT) @RANDOM_ACCESS_TRUE@am__EXEEXT_15 = examples/benchmarks/RandomAccess/simple/simple$(EXEEXT) \ @RANDOM_ACCESS_TRUE@ examples/benchmarks/RandomAccess/smp_bucket/smp_bucket$(EXEEXT) @THREAD_SAFE_TRUE@am__EXEEXT_16 = examples/benchmarks/lu/armci_multithreaded/lu-block-th$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) LIBOBJDIR = compat/ am__examples_benchmarks_RandomAccess_simple_simple_SOURCES_DIST = \ examples/benchmarks/RandomAccess/simple/simple.c \ examples/benchmarks/RandomAccess/timing.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c @HAVE_ARMCI_MSG_INIT_FALSE@am__objects_37 = testing/rpl_armci_msg_init.$(OBJEXT) @HAVE_ARMCI_MSG_FINALIZE_FALSE@am__objects_38 = testing/rpl_armci_msg_finalize.$(OBJEXT) am__objects_39 = $(am__objects_37) $(am__objects_38) am_examples_benchmarks_RandomAccess_simple_simple_OBJECTS = \ examples/benchmarks/RandomAccess/simple/simple.$(OBJEXT) \ examples/benchmarks/RandomAccess/timing.$(OBJEXT) \ $(am__objects_39) examples_benchmarks_RandomAccess_simple_simple_OBJECTS = \ $(am_examples_benchmarks_RandomAccess_simple_simple_OBJECTS) examples_benchmarks_RandomAccess_simple_simple_LDADD = $(LDADD) @ARMCI_NETWORK_ARMCI_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) \ @ARMCI_NETWORK_ARMCI_TRUE@ $(am__DEPENDENCIES_1) @ARMCI_NETWORK_ARMCI_FALSE@am__DEPENDENCIES_4 = libarmci.la \ @ARMCI_NETWORK_ARMCI_FALSE@ $(LTLIBOBJS) $(am__DEPENDENCIES_1) \ @ARMCI_NETWORK_ARMCI_FALSE@ $(am__DEPENDENCIES_1) examples_benchmarks_RandomAccess_simple_simple_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_benchmarks_RandomAccess_smp_bucket_smp_bucket_SOURCES_DIST = \ examples/benchmarks/RandomAccess/smp_bucket/smp_bucket.c \ examples/benchmarks/RandomAccess/timing.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_benchmarks_RandomAccess_smp_bucket_smp_bucket_OBJECTS = examples/benchmarks/RandomAccess/smp_bucket/smp_bucket.$(OBJEXT) \ examples/benchmarks/RandomAccess/timing.$(OBJEXT) \ $(am__objects_39) examples_benchmarks_RandomAccess_smp_bucket_smp_bucket_OBJECTS = $(am_examples_benchmarks_RandomAccess_smp_bucket_smp_bucket_OBJECTS) examples_benchmarks_RandomAccess_smp_bucket_smp_bucket_LDADD = \ $(LDADD) examples_benchmarks_RandomAccess_smp_bucket_smp_bucket_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_benchmarks_cg_armci_sharedmemory_cg_SOURCES_DIST = \ examples/benchmarks/cg/armci_sharedmemory/cg.c \ examples/benchmarks/cg/armci_sharedmemory/compute.c \ examples/benchmarks/cg/armci_sharedmemory/read_input.c \ examples/benchmarks/cg/armci_sharedmemory/timing.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_benchmarks_cg_armci_sharedmemory_cg_OBJECTS = \ examples/benchmarks/cg/armci_sharedmemory/cg.$(OBJEXT) \ examples/benchmarks/cg/armci_sharedmemory/compute.$(OBJEXT) \ examples/benchmarks/cg/armci_sharedmemory/read_input.$(OBJEXT) \ examples/benchmarks/cg/armci_sharedmemory/timing.$(OBJEXT) \ $(am__objects_39) examples_benchmarks_cg_armci_sharedmemory_cg_OBJECTS = \ $(am_examples_benchmarks_cg_armci_sharedmemory_cg_OBJECTS) examples_benchmarks_cg_armci_sharedmemory_cg_LDADD = $(LDADD) examples_benchmarks_cg_armci_sharedmemory_cg_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_benchmarks_lu_armci_blocking_lu_SOURCES_DIST = \ examples/benchmarks/lu/armci_blocking/lu.c \ examples/benchmarks/lu/armci_blocking/timing.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_benchmarks_lu_armci_blocking_lu_OBJECTS = \ examples/benchmarks/lu/armci_blocking/lu.$(OBJEXT) \ examples/benchmarks/lu/armci_blocking/timing.$(OBJEXT) \ $(am__objects_39) examples_benchmarks_lu_armci_blocking_lu_OBJECTS = \ $(am_examples_benchmarks_lu_armci_blocking_lu_OBJECTS) examples_benchmarks_lu_armci_blocking_lu_LDADD = $(LDADD) examples_benchmarks_lu_armci_blocking_lu_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_benchmarks_lu_armci_blocking_lu_b_bc_SOURCES_DIST = \ examples/benchmarks/lu/armci_blocking/lu-b-bc.c \ examples/benchmarks/lu/armci_blocking/timing.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_benchmarks_lu_armci_blocking_lu_b_bc_OBJECTS = \ examples/benchmarks/lu/armci_blocking/lu-b-bc.$(OBJEXT) \ examples/benchmarks/lu/armci_blocking/timing.$(OBJEXT) \ $(am__objects_39) examples_benchmarks_lu_armci_blocking_lu_b_bc_OBJECTS = \ $(am_examples_benchmarks_lu_armci_blocking_lu_b_bc_OBJECTS) examples_benchmarks_lu_armci_blocking_lu_b_bc_LDADD = $(LDADD) examples_benchmarks_lu_armci_blocking_lu_b_bc_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_benchmarks_lu_armci_blocking_lu_block_SOURCES_DIST = \ examples/benchmarks/lu/armci_blocking/lu-block.c \ examples/benchmarks/lu/armci_blocking/timing.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_benchmarks_lu_armci_blocking_lu_block_OBJECTS = \ examples/benchmarks/lu/armci_blocking/lu-block.$(OBJEXT) \ examples/benchmarks/lu/armci_blocking/timing.$(OBJEXT) \ $(am__objects_39) examples_benchmarks_lu_armci_blocking_lu_block_OBJECTS = \ $(am_examples_benchmarks_lu_armci_blocking_lu_block_OBJECTS) examples_benchmarks_lu_armci_blocking_lu_block_LDADD = $(LDADD) examples_benchmarks_lu_armci_blocking_lu_block_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_benchmarks_lu_armci_multithreaded_lu_block_th_SOURCES_DIST = \ examples/benchmarks/lu/armci_multithreaded/lu-block-th.c \ examples/benchmarks/lu/armci_multithreaded/timing.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_benchmarks_lu_armci_multithreaded_lu_block_th_OBJECTS = examples/benchmarks/lu/armci_multithreaded/lu-block-th.$(OBJEXT) \ examples/benchmarks/lu/armci_multithreaded/timing.$(OBJEXT) \ $(am__objects_39) examples_benchmarks_lu_armci_multithreaded_lu_block_th_OBJECTS = $(am_examples_benchmarks_lu_armci_multithreaded_lu_block_th_OBJECTS) examples_benchmarks_lu_armci_multithreaded_lu_block_th_LDADD = \ $(LDADD) examples_benchmarks_lu_armci_multithreaded_lu_block_th_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_benchmarks_lu_armci_nonblocking_lu_nb_get_SOURCES_DIST = \ examples/benchmarks/lu/armci_nonblocking/lu_nb_get.c \ examples/benchmarks/lu/armci_nonblocking/timing.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_benchmarks_lu_armci_nonblocking_lu_nb_get_OBJECTS = \ examples/benchmarks/lu/armci_nonblocking/lu_nb_get.$(OBJEXT) \ examples/benchmarks/lu/armci_nonblocking/timing.$(OBJEXT) \ $(am__objects_39) examples_benchmarks_lu_armci_nonblocking_lu_nb_get_OBJECTS = $(am_examples_benchmarks_lu_armci_nonblocking_lu_nb_get_OBJECTS) examples_benchmarks_lu_armci_nonblocking_lu_nb_get_LDADD = $(LDADD) examples_benchmarks_lu_armci_nonblocking_lu_nb_get_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_benchmarks_lu_armci_nonblocking_lu_nb_put_SOURCES_DIST = \ examples/benchmarks/lu/armci_nonblocking/lu_nb_put.c \ examples/benchmarks/lu/armci_nonblocking/timing.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_benchmarks_lu_armci_nonblocking_lu_nb_put_OBJECTS = \ examples/benchmarks/lu/armci_nonblocking/lu_nb_put.$(OBJEXT) \ examples/benchmarks/lu/armci_nonblocking/timing.$(OBJEXT) \ $(am__objects_39) examples_benchmarks_lu_armci_nonblocking_lu_nb_put_OBJECTS = $(am_examples_benchmarks_lu_armci_nonblocking_lu_nb_put_OBJECTS) examples_benchmarks_lu_armci_nonblocking_lu_nb_put_LDADD = $(LDADD) examples_benchmarks_lu_armci_nonblocking_lu_nb_put_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_benchmarks_lu_pthreads_lu_thread_SOURCES_DIST = \ examples/benchmarks/lu/pthreads/barrier.c \ examples/benchmarks/lu/pthreads/barrier.h \ examples/benchmarks/lu/pthreads/errors.h \ examples/benchmarks/lu/pthreads/lu-thread.c \ examples/benchmarks/lu/pthreads/timing.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_benchmarks_lu_pthreads_lu_thread_OBJECTS = \ examples/benchmarks/lu/pthreads/barrier.$(OBJEXT) \ examples/benchmarks/lu/pthreads/lu-thread.$(OBJEXT) \ examples/benchmarks/lu/pthreads/timing.$(OBJEXT) \ $(am__objects_39) examples_benchmarks_lu_pthreads_lu_thread_OBJECTS = \ $(am_examples_benchmarks_lu_pthreads_lu_thread_OBJECTS) examples_benchmarks_lu_pthreads_lu_thread_DEPENDENCIES = am__examples_features_aggregation_simple_simple_SOURCES_DIST = \ examples/features/aggregation/simple/simple.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_features_aggregation_simple_simple_OBJECTS = \ examples/features/aggregation/simple/simple.$(OBJEXT) \ $(am__objects_39) examples_features_aggregation_simple_simple_OBJECTS = \ $(am_examples_features_aggregation_simple_simple_OBJECTS) examples_features_aggregation_simple_simple_LDADD = $(LDADD) examples_features_aggregation_simple_simple_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_features_aggregation_sparse_matvecmul_sparse_matvecmul_SOURCES_DIST = examples/features/aggregation/sparse_matvecmul/sparse_matvecmul.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_features_aggregation_sparse_matvecmul_sparse_matvecmul_OBJECTS = examples/features/aggregation/sparse_matvecmul/sparse_matvecmul.$(OBJEXT) \ $(am__objects_39) examples_features_aggregation_sparse_matvecmul_sparse_matvecmul_OBJECTS = $(am_examples_features_aggregation_sparse_matvecmul_sparse_matvecmul_OBJECTS) examples_features_aggregation_sparse_matvecmul_sparse_matvecmul_LDADD = \ $(LDADD) examples_features_aggregation_sparse_matvecmul_sparse_matvecmul_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_features_concurrency_multidma_multidma_SOURCES_DIST = \ examples/features/concurrency/multidma/multidma.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_features_concurrency_multidma_multidma_OBJECTS = \ examples/features/concurrency/multidma/multidma.$(OBJEXT) \ $(am__objects_39) examples_features_concurrency_multidma_multidma_OBJECTS = \ $(am_examples_features_concurrency_multidma_multidma_OBJECTS) examples_features_concurrency_multidma_multidma_LDADD = $(LDADD) examples_features_concurrency_multidma_multidma_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_features_concurrency_simple_comdegree_SOURCES_DIST = \ examples/features/concurrency/simple/comdegree.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_features_concurrency_simple_comdegree_OBJECTS = \ examples/features/concurrency/simple/comdegree.$(OBJEXT) \ $(am__objects_39) examples_features_concurrency_simple_comdegree_OBJECTS = \ $(am_examples_features_concurrency_simple_comdegree_OBJECTS) examples_features_concurrency_simple_comdegree_LDADD = $(LDADD) examples_features_concurrency_simple_comdegree_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_features_gpc_hashtable_test_hashtable_SOURCES_DIST = \ examples/features/gpc/hashtable/DistHashmap.cc \ examples/features/gpc/hashtable/DistHashmap.h \ examples/features/gpc/hashtable/GPCHashmap.cc \ examples/features/gpc/hashtable/GPCHashmap.h \ examples/features/gpc/hashtable/GPCHashmapHandler.cc \ examples/features/gpc/hashtable/Hash_common.h \ examples/features/gpc/hashtable/HashFunctions.cc \ examples/features/gpc/hashtable/hash_map.h \ examples/features/gpc/hashtable/HashUtil.cc \ examples/features/gpc/hashtable/test_hashtable.cc \ examples/features/gpc/hashtable/Util.h \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_features_gpc_hashtable_test_hashtable_OBJECTS = \ examples/features/gpc/hashtable/DistHashmap.$(OBJEXT) \ examples/features/gpc/hashtable/GPCHashmap.$(OBJEXT) \ examples/features/gpc/hashtable/GPCHashmapHandler.$(OBJEXT) \ examples/features/gpc/hashtable/HashFunctions.$(OBJEXT) \ examples/features/gpc/hashtable/HashUtil.$(OBJEXT) \ examples/features/gpc/hashtable/test_hashtable.$(OBJEXT) \ $(am__objects_39) examples_features_gpc_hashtable_test_hashtable_OBJECTS = \ $(am_examples_features_gpc_hashtable_test_hashtable_OBJECTS) am__DEPENDENCIES_5 = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) examples_features_gpc_hashtable_test_hashtable_DEPENDENCIES = \ $(am__DEPENDENCIES_5) examples_features_gpc_hashtable_test_hashtable_LINK = $(LIBTOOL) \ $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(examples_features_gpc_hashtable_test_hashtable_LDFLAGS) \ $(LDFLAGS) -o $@ am__examples_features_non_blocking_overlap_overlap_SOURCES_DIST = \ examples/features/non-blocking/overlap/overlap.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_features_non_blocking_overlap_overlap_OBJECTS = \ examples/features/non-blocking/overlap/overlap.$(OBJEXT) \ $(am__objects_39) examples_features_non_blocking_overlap_overlap_OBJECTS = \ $(am_examples_features_non_blocking_overlap_overlap_OBJECTS) examples_features_non_blocking_overlap_overlap_LDADD = $(LDADD) examples_features_non_blocking_overlap_overlap_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_features_non_blocking_simple_simple_SOURCES_DIST = \ examples/features/non-blocking/simple/simple.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_features_non_blocking_simple_simple_OBJECTS = \ examples/features/non-blocking/simple/simple.$(OBJEXT) \ $(am__objects_39) examples_features_non_blocking_simple_simple_OBJECTS = \ $(am_examples_features_non_blocking_simple_simple_OBJECTS) examples_features_non_blocking_simple_simple_LDADD = $(LDADD) examples_features_non_blocking_simple_simple_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_features_notification_simple_testnotify_SOURCES_DIST = \ examples/features/notification/simple/testnotify.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_features_notification_simple_testnotify_OBJECTS = \ examples/features/notification/simple/testnotify.$(OBJEXT) \ $(am__objects_39) examples_features_notification_simple_testnotify_OBJECTS = $(am_examples_features_notification_simple_testnotify_OBJECTS) examples_features_notification_simple_testnotify_LDADD = $(LDADD) examples_features_notification_simple_testnotify_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_features_proc_affinity_computation_impact_computation_impact_SOURCES_DIST = examples/features/proc_affinity/computation_impact/computation_impact.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_features_proc_affinity_computation_impact_computation_impact_OBJECTS = examples/features/proc_affinity/computation_impact/computation_impact.$(OBJEXT) \ $(am__objects_39) examples_features_proc_affinity_computation_impact_computation_impact_OBJECTS = $(am_examples_features_proc_affinity_computation_impact_computation_impact_OBJECTS) examples_features_proc_affinity_computation_impact_computation_impact_DEPENDENCIES = \ $(am__DEPENDENCIES_5) examples_features_proc_affinity_computation_impact_computation_impact_LINK = \ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(examples_features_proc_affinity_computation_impact_computation_impact_LDFLAGS) \ $(LDFLAGS) -o $@ am__examples_features_proc_affinity_simple_simple_SOURCES_DIST = \ examples/features/proc_affinity/simple/simple.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_features_proc_affinity_simple_simple_OBJECTS = \ examples/features/proc_affinity/simple/simple.$(OBJEXT) \ $(am__objects_39) examples_features_proc_affinity_simple_simple_OBJECTS = \ $(am_examples_features_proc_affinity_simple_simple_OBJECTS) examples_features_proc_affinity_simple_simple_LDADD = $(LDADD) examples_features_proc_affinity_simple_simple_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_features_symmetric_memory_simple_simple_SOURCES_DIST = \ examples/features/symmetric_memory/simple/simple.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_examples_features_symmetric_memory_simple_simple_OBJECTS = \ examples/features/symmetric_memory/simple/simple.$(OBJEXT) \ $(am__objects_39) examples_features_symmetric_memory_simple_simple_OBJECTS = $(am_examples_features_symmetric_memory_simple_simple_OBJECTS) examples_features_symmetric_memory_simple_simple_LDADD = $(LDADD) examples_features_symmetric_memory_simple_simple_DEPENDENCIES = \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__examples_simpleApps_transp1D_c_SOURCES_DIST = \ examples/simpleApps/transp1D-c.c testing/rpl_armci_msg_init.c \ testing/rpl_armci_msg_finalize.c am_examples_simpleApps_transp1D_c_OBJECTS = \ examples/simpleApps/transp1D-c.$(OBJEXT) $(am__objects_39) examples_simpleApps_transp1D_c_OBJECTS = \ $(am_examples_simpleApps_transp1D_c_OBJECTS) examples_simpleApps_transp1D_c_LDADD = $(LDADD) examples_simpleApps_transp1D_c_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__parallel_SOURCES_DIST = tcgmsg/ipcv4.0/parallel.c @MSG_COMMS_TCGMSG4_TRUE@am_parallel_OBJECTS = \ @MSG_COMMS_TCGMSG4_TRUE@ tcgmsg/ipcv4.0/parallel.$(OBJEXT) parallel_OBJECTS = $(am_parallel_OBJECTS) parallel_LDADD = $(LDADD) parallel_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__testing_clone_SOURCES_DIST = testing/clone.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_clone_OBJECTS = testing/clone.$(OBJEXT) $(am__objects_39) testing_clone_OBJECTS = $(am_testing_clone_OBJECTS) testing_clone_LDADD = $(LDADD) testing_clone_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_fork_SOURCES_DIST = testing/fork.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_fork_OBJECTS = testing/fork.$(OBJEXT) $(am__objects_39) testing_fork_OBJECTS = $(am_testing_fork_OBJECTS) testing_fork_LDADD = $(LDADD) testing_fork_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_fttest_SOURCES_DIST = testing/fttest.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_fttest_OBJECTS = testing/fttest.$(OBJEXT) $(am__objects_39) testing_fttest_OBJECTS = $(am_testing_fttest_OBJECTS) testing_fttest_LDADD = $(LDADD) testing_fttest_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_gpctest_SOURCES_DIST = testing/gpctest.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_gpctest_OBJECTS = testing/gpctest.$(OBJEXT) \ $(am__objects_39) testing_gpctest_OBJECTS = $(am_testing_gpctest_OBJECTS) testing_gpctest_LDADD = $(LDADD) testing_gpctest_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_ipctest_SOURCES_DIST = testing/ipctest.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_ipctest_OBJECTS = testing/ipctest.$(OBJEXT) \ $(am__objects_39) testing_ipctest_OBJECTS = $(am_testing_ipctest_OBJECTS) testing_ipctest_LDADD = $(LDADD) testing_ipctest_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_msgcheck_SOURCES_DIST = testing/msgcheck.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_msgcheck_OBJECTS = testing/msgcheck.$(OBJEXT) \ $(am__objects_39) testing_msgcheck_OBJECTS = $(am_testing_msgcheck_OBJECTS) testing_msgcheck_LDADD = $(LDADD) testing_msgcheck_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_origptl_SOURCES_DIST = testing/origptl.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_origptl_OBJECTS = testing/origptl.$(OBJEXT) \ $(am__objects_39) testing_origptl_OBJECTS = $(am_testing_origptl_OBJECTS) testing_origptl_LDADD = $(LDADD) testing_origptl_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_perf_SOURCES_DIST = testing/perf.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_perf_OBJECTS = testing/perf.$(OBJEXT) $(am__objects_39) testing_perf_OBJECTS = $(am_testing_perf_OBJECTS) testing_perf_LDADD = $(LDADD) testing_perf_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_perf2_SOURCES_DIST = testing/perf2.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_perf2_OBJECTS = testing/perf2.$(OBJEXT) $(am__objects_39) testing_perf2_OBJECTS = $(am_testing_perf2_OBJECTS) testing_perf2_LDADD = $(LDADD) testing_perf2_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_perf_aggr_SOURCES_DIST = testing/perf_aggr.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_perf_aggr_OBJECTS = testing/perf_aggr.$(OBJEXT) \ $(am__objects_39) testing_perf_aggr_OBJECTS = $(am_testing_perf_aggr_OBJECTS) testing_perf_aggr_LDADD = $(LDADD) testing_perf_aggr_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_perf_nb_SOURCES_DIST = testing/perf_nb.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_perf_nb_OBJECTS = testing/perf_nb.$(OBJEXT) \ $(am__objects_39) testing_perf_nb_OBJECTS = $(am_testing_perf_nb_OBJECTS) testing_perf_nb_LDADD = $(LDADD) testing_perf_nb_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_ptltest_SOURCES_DIST = testing/ptltest.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_ptltest_OBJECTS = testing/ptltest.$(OBJEXT) \ $(am__objects_39) testing_ptltest_OBJECTS = $(am_testing_ptltest_OBJECTS) testing_ptltest_LDADD = $(LDADD) testing_ptltest_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_shmclean_SOURCES_DIST = testing/shmclean.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_shmclean_OBJECTS = testing/shmclean.$(OBJEXT) \ $(am__objects_39) testing_shmclean_OBJECTS = $(am_testing_shmclean_OBJECTS) testing_shmclean_LDADD = $(LDADD) testing_shmclean_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_shmtest_SOURCES_DIST = testing/shmtest.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_shmtest_OBJECTS = testing/shmtest.$(OBJEXT) \ $(am__objects_39) testing_shmtest_OBJECTS = $(am_testing_shmtest_OBJECTS) testing_shmtest_LDADD = $(LDADD) testing_shmtest_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_simple_SOURCES_DIST = testing/simple.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_simple_OBJECTS = testing/simple.$(OBJEXT) $(am__objects_39) testing_simple_OBJECTS = $(am_testing_simple_OBJECTS) testing_simple_LDADD = $(LDADD) testing_simple_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_simplelock_SOURCES_DIST = testing/simplelock.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_simplelock_OBJECTS = testing/simplelock.$(OBJEXT) \ $(am__objects_39) testing_simplelock_OBJECTS = $(am_testing_simplelock_OBJECTS) testing_simplelock_LDADD = $(LDADD) testing_simplelock_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_te_SOURCES_DIST = testing/te.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_te_OBJECTS = testing/te.$(OBJEXT) $(am__objects_39) testing_te_OBJECTS = $(am_testing_te_OBJECTS) testing_te_LDADD = $(LDADD) testing_te_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \ $(am__DEPENDENCIES_1) am__testing_test_SOURCES_DIST = testing/test.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_test_OBJECTS = testing/test.$(OBJEXT) $(am__objects_39) testing_test_OBJECTS = $(am_testing_test_OBJECTS) testing_test_LDADD = $(LDADD) testing_test_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_test2_SOURCES_DIST = testing/test2.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_test2_OBJECTS = testing/test2.$(OBJEXT) $(am__objects_39) testing_test2_OBJECTS = $(am_testing_test2_OBJECTS) testing_test2_LDADD = $(LDADD) testing_test2_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_test_groups_SOURCES_DIST = testing/test_groups.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_test_groups_OBJECTS = testing/test_groups.$(OBJEXT) \ $(am__objects_39) testing_test_groups_OBJECTS = $(am_testing_test_groups_OBJECTS) testing_test_groups_LDADD = $(LDADD) testing_test_groups_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_test_mt_SOURCES_DIST = testing/test_mt.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_test_mt_OBJECTS = testing/test_mt.$(OBJEXT) \ $(am__objects_39) testing_test_mt_OBJECTS = $(am_testing_test_mt_OBJECTS) testing_test_mt_LDADD = $(LDADD) testing_test_mt_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_testitr_SOURCES_DIST = testing/testitr.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c @HAVE_ARMCI_MSG_INIT_FALSE@am__objects_40 = testing/testing_testitr-rpl_armci_msg_init.$(OBJEXT) @HAVE_ARMCI_MSG_FINALIZE_FALSE@am__objects_41 = testing/testing_testitr-rpl_armci_msg_finalize.$(OBJEXT) am__objects_42 = $(am__objects_40) $(am__objects_41) am_testing_testitr_OBJECTS = \ testing/testing_testitr-testitr.$(OBJEXT) $(am__objects_42) testing_testitr_OBJECTS = $(am_testing_testitr_OBJECTS) testing_testitr_LDADD = $(LDADD) testing_testitr_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) am__testing_testnotify_SOURCES_DIST = testing/testnotify.c \ testing/rpl_armci_msg_init.c testing/rpl_armci_msg_finalize.c am_testing_testnotify_OBJECTS = testing/testnotify.$(OBJEXT) \ $(am__objects_39) testing_testnotify_OBJECTS = $(am_testing_testnotify_OBJECTS) testing_testnotify_LDADD = $(LDADD) testing_testnotify_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) LTCCASCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(AM_CCASFLAGS) \ $(CCASFLAGS) AM_V_CCAS = $(am__v_CCAS_@AM_V@) am__v_CCAS_ = $(am__v_CCAS_@AM_DEFAULT_V@) am__v_CCAS_0 = @echo " CCAS " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libarmci_la_SOURCES) $(nodist_libarmci_la_SOURCES) \ $(libarmci_prof_la_SOURCES) \ $(examples_benchmarks_RandomAccess_simple_simple_SOURCES) \ $(examples_benchmarks_RandomAccess_smp_bucket_smp_bucket_SOURCES) \ $(examples_benchmarks_cg_armci_sharedmemory_cg_SOURCES) \ $(examples_benchmarks_lu_armci_blocking_lu_SOURCES) \ $(examples_benchmarks_lu_armci_blocking_lu_b_bc_SOURCES) \ $(examples_benchmarks_lu_armci_blocking_lu_block_SOURCES) \ $(examples_benchmarks_lu_armci_multithreaded_lu_block_th_SOURCES) \ $(examples_benchmarks_lu_armci_nonblocking_lu_nb_get_SOURCES) \ $(examples_benchmarks_lu_armci_nonblocking_lu_nb_put_SOURCES) \ $(examples_benchmarks_lu_pthreads_lu_thread_SOURCES) \ $(examples_features_aggregation_simple_simple_SOURCES) \ $(examples_features_aggregation_sparse_matvecmul_sparse_matvecmul_SOURCES) \ $(examples_features_concurrency_multidma_multidma_SOURCES) \ $(examples_features_concurrency_simple_comdegree_SOURCES) \ $(examples_features_gpc_hashtable_test_hashtable_SOURCES) \ $(examples_features_non_blocking_overlap_overlap_SOURCES) \ $(examples_features_non_blocking_simple_simple_SOURCES) \ $(examples_features_notification_simple_testnotify_SOURCES) \ $(examples_features_proc_affinity_computation_impact_computation_impact_SOURCES) \ $(examples_features_proc_affinity_simple_simple_SOURCES) \ $(examples_features_symmetric_memory_simple_simple_SOURCES) \ $(examples_simpleApps_transp1D_c_SOURCES) $(parallel_SOURCES) \ $(testing_clone_SOURCES) $(testing_fork_SOURCES) \ $(testing_fttest_SOURCES) $(testing_gpctest_SOURCES) \ $(testing_ipctest_SOURCES) $(testing_msgcheck_SOURCES) \ $(testing_origptl_SOURCES) $(testing_perf_SOURCES) \ $(testing_perf2_SOURCES) $(testing_perf_aggr_SOURCES) \ $(testing_perf_nb_SOURCES) $(testing_ptltest_SOURCES) \ $(testing_shmclean_SOURCES) $(testing_shmtest_SOURCES) \ $(testing_simple_SOURCES) $(testing_simplelock_SOURCES) \ $(testing_te_SOURCES) $(testing_test_SOURCES) \ $(testing_test2_SOURCES) $(testing_test_groups_SOURCES) \ $(testing_test_mt_SOURCES) $(testing_testitr_SOURCES) \ $(testing_testnotify_SOURCES) DIST_SOURCES = $(am__libarmci_la_SOURCES_DIST) \ $(am__libarmci_prof_la_SOURCES_DIST) \ $(am__examples_benchmarks_RandomAccess_simple_simple_SOURCES_DIST) \ $(am__examples_benchmarks_RandomAccess_smp_bucket_smp_bucket_SOURCES_DIST) \ $(am__examples_benchmarks_cg_armci_sharedmemory_cg_SOURCES_DIST) \ $(am__examples_benchmarks_lu_armci_blocking_lu_SOURCES_DIST) \ $(am__examples_benchmarks_lu_armci_blocking_lu_b_bc_SOURCES_DIST) \ $(am__examples_benchmarks_lu_armci_blocking_lu_block_SOURCES_DIST) \ $(am__examples_benchmarks_lu_armci_multithreaded_lu_block_th_SOURCES_DIST) \ $(am__examples_benchmarks_lu_armci_nonblocking_lu_nb_get_SOURCES_DIST) \ $(am__examples_benchmarks_lu_armci_nonblocking_lu_nb_put_SOURCES_DIST) \ $(am__examples_benchmarks_lu_pthreads_lu_thread_SOURCES_DIST) \ $(am__examples_features_aggregation_simple_simple_SOURCES_DIST) \ $(am__examples_features_aggregation_sparse_matvecmul_sparse_matvecmul_SOURCES_DIST) \ $(am__examples_features_concurrency_multidma_multidma_SOURCES_DIST) \ $(am__examples_features_concurrency_simple_comdegree_SOURCES_DIST) \ $(am__examples_features_gpc_hashtable_test_hashtable_SOURCES_DIST) \ $(am__examples_features_non_blocking_overlap_overlap_SOURCES_DIST) \ $(am__examples_features_non_blocking_simple_simple_SOURCES_DIST) \ $(am__examples_features_notification_simple_testnotify_SOURCES_DIST) \ $(am__examples_features_proc_affinity_computation_impact_computation_impact_SOURCES_DIST) \ $(am__examples_features_proc_affinity_simple_simple_SOURCES_DIST) \ $(am__examples_features_symmetric_memory_simple_simple_SOURCES_DIST) \ $(am__examples_simpleApps_transp1D_c_SOURCES_DIST) \ $(am__parallel_SOURCES_DIST) $(am__testing_clone_SOURCES_DIST) \ $(am__testing_fork_SOURCES_DIST) \ $(am__testing_fttest_SOURCES_DIST) \ $(am__testing_gpctest_SOURCES_DIST) \ $(am__testing_ipctest_SOURCES_DIST) \ $(am__testing_msgcheck_SOURCES_DIST) \ $(am__testing_origptl_SOURCES_DIST) \ $(am__testing_perf_SOURCES_DIST) \ $(am__testing_perf2_SOURCES_DIST) \ $(am__testing_perf_aggr_SOURCES_DIST) \ $(am__testing_perf_nb_SOURCES_DIST) \ $(am__testing_ptltest_SOURCES_DIST) \ $(am__testing_shmclean_SOURCES_DIST) \ $(am__testing_shmtest_SOURCES_DIST) \ $(am__testing_simple_SOURCES_DIST) \ $(am__testing_simplelock_SOURCES_DIST) \ $(am__testing_te_SOURCES_DIST) \ $(am__testing_test_SOURCES_DIST) \ $(am__testing_test2_SOURCES_DIST) \ $(am__testing_test_groups_SOURCES_DIST) \ $(am__testing_test_mt_SOURCES_DIST) \ $(am__testing_testitr_SOURCES_DIST) \ $(am__testing_testnotify_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__include_HEADERS_DIST = src-portals/armci.h src-portals/gpc.h \ src-portals/message.h src-gemini/armci.h src-gemini/gpc.h \ src-gemini/message.h src/include/armci.h src/include/gpc.h \ src/include/message.h src/include/parmci.h HEADERS = $(include_HEADERS) ETAGS = etags CTAGS = ctags # If stdout is a non-dumb tty, use colors. If test -t is not supported, # then this fails; a conservative approach. Of course do not redirect # stdout here, just stderr. am__tty_colors = \ red=; grn=; lgn=; blu=; std=; \ test "X$(AM_COLOR_TESTS)" != Xno \ && test "X$$TERM" != Xdumb \ && { test "X$(AM_COLOR_TESTS)" = Xalways || test -t 1 2>/dev/null; } \ && { \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ std=''; \ } # Restructured Text title and section. am__rst_title = sed 's/.*/ & /;h;s/./=/g;p;x;p;g;p;s/.*//' am__rst_section = sed 'p;s/./=/g;p;g' # Put stdin (possibly several lines separated by ". ") in a box. # Prefix each line by 'col' and terminate each with 'std', for coloring. # Multi line coloring is problematic with "less -R", so we really need # to color each line individually. am__text_box = $(AWK) '{ \ n = split($$0, lines, "\\. "); max = 0; \ for (i = 1; i <= n; ++i) \ if (max < length(lines[i])) \ max = length(lines[i]); \ for (i = 0; i < max; ++i) \ line = line "="; \ print col line std; \ for (i = 1; i <= n; ++i) \ if (lines[i]) \ print col lines[i] std; \ print col line std; \ }' # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log, and passes # TESTS_ENVIRONMENT. Save and restore TERM around use of # TESTS_ENVIRONMENT, in case that unsets it. am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ srcdir=$(srcdir); export srcdir; \ rm -f $@-t; \ am__trap='rm -f '\''$(abs_builddir)/$@-t'\''; (exit $$st); exit $$st'; \ trap "st=129; $$am__trap" 1; trap "st=130; $$am__trap" 2; \ trap "st=141; $$am__trap" 13; trap "st=143; $$am__trap" 15; \ am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`; \ test "x$$am__odir" = x. || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; __SAVED_TERM=$$TERM; \ $(TESTS_ENVIRONMENT) # To be appended to the command running the test. Handle the stdout # and stderr redirection, and catch the exit status. am__check_post = \ >$@-t 2>&1; \ estatus=$$?; \ if test -n '$(DISABLE_HARD_ERRORS)' \ && test $$estatus -eq 99; then \ estatus=1; \ fi; \ TERM=$$__SAVED_TERM; export TERM; \ $(am__tty_colors); \ xfailed=PASS; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ xfailed=XFAIL;; \ esac; \ case $$estatus.$$xfailed in \ 0.XFAIL) col=$$red; res=XPASS;; \ 0.*) col=$$grn; res=PASS ;; \ 77.*) col=$$blu; res=SKIP ;; \ 99.*) col=$$red; res=FAIL ;; \ *.XFAIL) col=$$lgn; res=XFAIL;; \ *.*) col=$$red; res=FAIL ;; \ esac; \ echo "$${col}$$res$${std}: $$f"; \ echo "$$res: $$f (exit: $$estatus)" | \ $(am__rst_section) >$@; \ cat $@-t >>$@; \ rm -f $@-t RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck check-html recheck-html TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html) am__EXEEXT_17 = $(ARMCI_SERIAL_TESTS) am__EXEEXT_18 = $(ARMCI_PARALLEL_TESTS) am__EXEEXT_19 = am__EXEEXT_20 = $(am__EXEEXT_19) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) TEST_LOGS_TMP = $(TEST_LOGS:.log=.log-t) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARMCI_COPT = @ARMCI_COPT@ ARMCI_CXXOPT = @ARMCI_CXXOPT@ ARMCI_NETWORK_CPPFLAGS = @ARMCI_NETWORK_CPPFLAGS@ ARMCI_NETWORK_LDFLAGS = @ARMCI_NETWORK_LDFLAGS@ ARMCI_NETWORK_LIBS = @ARMCI_NETWORK_LIBS@ ARMCI_SRC_DIR = @ARMCI_SRC_DIR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ C_POINTER_AS_INTEGER = @C_POINTER_AS_INTEGER@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GA_CXX_WARN = @GA_CXX_WARN@ GA_C_WARN = @GA_C_WARN@ GA_MP_CPPFLAGS = @GA_MP_CPPFLAGS@ GA_MP_LDFLAGS = @GA_MP_LDFLAGS@ GA_MP_LIBS = @GA_MP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MPICC = @MPICC@ MPICXX = @MPICXX@ MPIEXEC = @MPIEXEC@ NM = @NM@ NMEDIT = @NMEDIT@ NPROCS = @NPROCS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TCGEXEC = @TCGEXEC@ THREAD_LIBRARY = @THREAD_LIBRARY@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ ga_cv_path_rsh = @ga_cv_path_rsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # The usual aclocal nonsense to get include paths right. ACLOCAL_AMFLAGS = -I m4 -I ../m4 # All public headers, installed programs, test programs, and example programs # are listed in these variables. Appended to throughout. These are the # automake variables used. include_HEADERS = $(am__append_11) $(am__append_16) $(am__append_50) \ src/include/parmci.h check_LTLIBRARIES = lib_LTLIBRARIES = $(am__append_1) $(am__append_52) ############################################################################## # tcgmsg # EXTRA_DIST = README tcgmsg/README examples/benchmarks/lu/README \ examples/features/aggregation/README \ examples/features/concurrency/README \ examples/features/gpc/hashtable/README \ examples/features/non-blocking/README \ examples/features/notification/README \ examples/features/proc_affinity/README examples/README BUILT_SOURCES = MOSTLYCLEANFILES = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = AM_FFLAGS = $(ARMCI_FOPT) $(GA_F_WARN) $(FFLAG_INT) AM_CFLAGS = $(ARMCI_COPT) $(GA_C_WARN) AM_CXXFLAGS = $(ARMCI_CXXOPT) $(GA_CXX_WARN) AM_CPPFLAGS = $(GA_MP_CPPFLAGS) $(ARMCI_NETWORK_CPPFLAGS) \ $(am__append_2) $(am__append_12) $(am__append_17) \ $(am__append_21) $(am__append_23) $(am__append_25) \ $(am__append_30) $(am__append_32) $(am__append_34) \ $(am__append_36) $(am__append_38) $(am__append_43) \ $(am__append_45) $(am__append_51) $(am__append_56) \ $(am__append_59) AM_LDFLAGS = $(LDFLAGS_BASE) LDADD = $(am__append_3) $(am__append_4) $(am__append_18) libarmci_la_SOURCES = $(am__append_6) $(am__append_7) $(am__append_8) \ $(am__append_9) $(am__append_10) $(am__append_13) \ $(am__append_14) $(am__append_15) $(am__append_19) \ $(am__append_20) $(am__append_22) $(am__append_24) \ $(am__append_26) $(am__append_27) $(am__append_28) \ $(am__append_29) $(am__append_31) $(am__append_33) \ $(am__append_35) $(am__append_37) $(am__append_39) \ $(am__append_40) $(am__append_41) $(am__append_42) \ $(am__append_44) $(am__append_46) $(am__append_47) \ $(am__append_48) $(am__append_49) $(am__append_53) \ $(am__append_54) $(am__append_55) $(am__append_57) \ $(am__append_60) $(am__append_61) $(am__append_62) nodist_libarmci_la_SOURCES = libarmci_la_LIBADD = $(am__append_5) LDFLAGS_BASE = $(GA_MP_LDFLAGS) $(ARMCI_NETWORK_LDFLAGS) ############################################################################## # compiler and linker flags # # Important for external tools wanting to know how to link to ARMCI. SED_NORMALIZE_WHITESPACE = $(SED) 's/ [ ]*/ /g;s/" /"/g;s/ "/"/g' @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@libarmci_prof_la_SOURCES = tools/armci_prof.c @MSG_COMMS_TCGMSG4_TRUE@parallel_SOURCES = tcgmsg/ipcv4.0/parallel.c atsrc = $(am__append_71) $(am__append_72) ARMCI_SERIAL_TESTS = $(am__append_78) ARMCI_SERIAL_TESTS_XFAIL = #ARMCI_PARALLEL_TESTS += testing/perf2(EXEEXT) # only a benchmark #ARMCI_PARALLEL_TESTS += testing/perf_nb$(EXEEXT) # needs bug fixes #ARMCI_SERIAL_TESTS += testing/shmclean$(EXEEXT) # not sure we need this #ARMCI_SERIAL_TESTS += testing/shmtest$(EXEEXT) # not sure we need this #ARMCI_PARALLEL_TESTS += examples/benchmarks/cg/armci_sharedmemory/cg$(EXEEXT) # needs input file #ARMCI_PARALLEL_TESTS += examples/features/aggregation/sparse_matvecmul/sparse_matvecmul$(EXEEXT) # needs input file ARMCI_PARALLEL_TESTS = testing/msgcheck$(EXEEXT) testing/perf$(EXEEXT) \ testing/perf_aggr$(EXEEXT) testing/simplelock$(EXEEXT) \ testing/test$(EXEEXT) testing/test2$(EXEEXT) $(am__append_73) \ $(am__append_74) $(am__append_75) $(am__append_76) \ $(am__append_77) \ examples/benchmarks/lu/armci_blocking/lu-b-bc$(EXEEXT) \ examples/benchmarks/lu/armci_blocking/lu-block$(EXEEXT) \ examples/benchmarks/lu/armci_blocking/lu$(EXEEXT) \ examples/benchmarks/lu/armci_nonblocking/lu_nb_get$(EXEEXT) \ examples/benchmarks/lu/armci_nonblocking/lu_nb_put$(EXEEXT) \ examples/benchmarks/lu/pthreads/lu-thread$(EXEEXT) \ examples/features/aggregation/simple/simple$(EXEEXT) \ examples/features/non-blocking/simple/simple$(EXEEXT) \ $(am__append_86) \ examples/features/symmetric_memory/simple/simple$(EXEEXT) \ examples/simpleApps/transp1D-c$(EXEEXT) $(am__append_87) \ $(am__append_88) $(am__append_89) $(am__append_90) \ $(am__append_91) ARMCI_PARALLEL_TESTS_XFAIL = ARMCI_TESTS = $(ARMCI_SERIAL_TESTS) $(ARMCI_PARALLEL_TESTS) ARMCI_TESTS_XFAIL = $(ARMCI_SERIAL_TESTS_XFAIL) $(ARMCI_PARALLEL_TESTS_XFAIL) testing_clone_SOURCES = testing/clone.c $(atsrc) testing_fork_SOURCES = testing/fork.c $(atsrc) testing_fttest_SOURCES = testing/fttest.c $(atsrc) testing_gpctest_SOURCES = testing/gpctest.c $(atsrc) testing_ipctest_SOURCES = testing/ipctest.c $(atsrc) testing_msgcheck_SOURCES = testing/msgcheck.c $(atsrc) testing_origptl_SOURCES = testing/origptl.c $(atsrc) testing_perf_aggr_SOURCES = testing/perf_aggr.c $(atsrc) testing_perf_nb_SOURCES = testing/perf_nb.c $(atsrc) testing_perf_SOURCES = testing/perf.c $(atsrc) testing_perf2_SOURCES = testing/perf2.c $(atsrc) testing_ptltest_SOURCES = testing/ptltest.c $(atsrc) testing_shmclean_SOURCES = testing/shmclean.c $(atsrc) testing_shmtest_SOURCES = testing/shmtest.c $(atsrc) testing_simple_SOURCES = testing/simple.c $(atsrc) testing_simplelock_SOURCES = testing/simplelock.c $(atsrc) testing_te_SOURCES = testing/te.c $(atsrc) testing_test2_SOURCES = testing/test2.c $(atsrc) testing_test_groups_SOURCES = testing/test_groups.c $(atsrc) testing_testitr_SOURCES = testing/testitr.c $(atsrc) testing_test_mt_SOURCES = testing/test_mt.c $(atsrc) testing_testnotify_SOURCES = testing/testnotify.c $(atsrc) testing_test_SOURCES = testing/test.c $(atsrc) testing_testitr_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/src/include examples_benchmarks_cg_armci_sharedmemory_cg_SOURCES = \ examples/benchmarks/cg/armci_sharedmemory/cg.c \ examples/benchmarks/cg/armci_sharedmemory/compute.c \ examples/benchmarks/cg/armci_sharedmemory/read_input.c \ examples/benchmarks/cg/armci_sharedmemory/timing.c $(atsrc) examples_benchmarks_lu_armci_blocking_lu_SOURCES = \ examples/benchmarks/lu/armci_blocking/lu.c \ examples/benchmarks/lu/armci_blocking/timing.c $(atsrc) examples_benchmarks_lu_armci_blocking_lu_block_SOURCES = \ examples/benchmarks/lu/armci_blocking/lu-block.c \ examples/benchmarks/lu/armci_blocking/timing.c $(atsrc) examples_benchmarks_lu_armci_blocking_lu_b_bc_SOURCES = \ examples/benchmarks/lu/armci_blocking/lu-b-bc.c \ examples/benchmarks/lu/armci_blocking/timing.c $(atsrc) examples_benchmarks_lu_armci_multithreaded_lu_block_th_SOURCES = \ examples/benchmarks/lu/armci_multithreaded/lu-block-th.c \ examples/benchmarks/lu/armci_multithreaded/timing.c $(atsrc) examples_benchmarks_lu_armci_nonblocking_lu_nb_put_SOURCES = \ examples/benchmarks/lu/armci_nonblocking/lu_nb_put.c \ examples/benchmarks/lu/armci_nonblocking/timing.c $(atsrc) examples_benchmarks_lu_armci_nonblocking_lu_nb_get_SOURCES = \ examples/benchmarks/lu/armci_nonblocking/lu_nb_get.c \ examples/benchmarks/lu/armci_nonblocking/timing.c $(atsrc) examples_benchmarks_lu_pthreads_lu_thread_SOURCES = \ examples/benchmarks/lu/pthreads/barrier.c \ examples/benchmarks/lu/pthreads/barrier.h \ examples/benchmarks/lu/pthreads/errors.h \ examples/benchmarks/lu/pthreads/lu-thread.c \ examples/benchmarks/lu/pthreads/timing.c $(atsrc) examples_benchmarks_lu_pthreads_lu_thread_LDADD = -lpthread examples_benchmarks_RandomAccess_simple_simple_SOURCES = \ examples/benchmarks/RandomAccess/simple/simple.c \ examples/benchmarks/RandomAccess/timing.c $(atsrc) examples_benchmarks_RandomAccess_smp_bucket_smp_bucket_SOURCES = \ examples/benchmarks/RandomAccess/smp_bucket/smp_bucket.c \ examples/benchmarks/RandomAccess/timing.c $(atsrc) examples_features_aggregation_simple_simple_SOURCES = \ examples/features/aggregation/simple/simple.c $(atsrc) examples_features_aggregation_sparse_matvecmul_sparse_matvecmul_SOURCES = \ examples/features/aggregation/sparse_matvecmul/sparse_matvecmul.c $(atsrc) examples_features_concurrency_multidma_multidma_SOURCES = \ examples/features/concurrency/multidma/multidma.c $(atsrc) examples_features_concurrency_simple_comdegree_SOURCES = \ examples/features/concurrency/simple/comdegree.c $(atsrc) examples_features_gpc_hashtable_test_hashtable_SOURCES = \ examples/features/gpc/hashtable/DistHashmap.cc \ examples/features/gpc/hashtable/DistHashmap.h \ examples/features/gpc/hashtable/GPCHashmap.cc \ examples/features/gpc/hashtable/GPCHashmap.h \ examples/features/gpc/hashtable/GPCHashmapHandler.cc \ examples/features/gpc/hashtable/Hash_common.h \ examples/features/gpc/hashtable/HashFunctions.cc \ examples/features/gpc/hashtable/hash_map.h \ examples/features/gpc/hashtable/HashUtil.cc \ examples/features/gpc/hashtable/test_hashtable.cc \ examples/features/gpc/hashtable/Util.h $(atsrc) examples_features_gpc_hashtable_test_hashtable_LDFLAGS = $(LDFLAGS_BASE) examples_features_gpc_hashtable_test_hashtable_LDADD = $(LDADD) $(MAYBE_FLIBS) examples_features_non_blocking_overlap_overlap_SOURCES = \ examples/features/non-blocking/overlap/overlap.c $(atsrc) examples_features_non_blocking_simple_simple_SOURCES = \ examples/features/non-blocking/simple/simple.c $(atsrc) examples_features_notification_simple_testnotify_SOURCES = \ examples/features/notification/simple/testnotify.c $(atsrc) examples_features_proc_affinity_computation_impact_computation_impact_SOURCES = \ examples/features/proc_affinity/computation_impact/computation_impact.c $(atsrc) examples_features_proc_affinity_computation_impact_computation_impact_LDFLAGS = \ $(AM_LDFLAGS) \ $(LAPACK_LDFLAGS) \ $(BLAS_LDFLAGS) examples_features_proc_affinity_computation_impact_computation_impact_LDADD = \ $(LDADD) \ $(LAPACK_LIBS) \ $(BLAS_LIBS) examples_features_proc_affinity_simple_simple_SOURCES = \ examples/features/proc_affinity/simple/simple.c $(atsrc) examples_features_symmetric_memory_simple_simple_SOURCES = \ examples/features/symmetric_memory/simple/simple.c $(atsrc) examples_simpleApps_transp1D_c_SOURCES = \ examples/simpleApps/transp1D-c.c $(atsrc) # support verbose/silent make rules for additional programs # sed SED_V = $(SED__v_$(V)) SED__v_ = $(SED__v_$(AM_DEFAULT_VERBOSITY)) SED__v_0 = @echo " SED " $@; # ARMCI_TAS_AS ARMCI_TAS_AS_V = $(ARMCI_TAS_AS__v_$(V)) ARMCI_TAS_AS__v_ = $(ARMCI_TAS_AS__v_$(AM_DEFAULT_VERBOSITY)) ARMCI_TAS_AS__v_0 = @echo " GCC " $@; # ARMCI_X86COPY_AS ARMCI_X86COPY_AS_V = $(ARMCI_X86COPY_AS__v_$(V)) ARMCI_X86COPY_AS__v_ = $(ARMCI_X86COPY_AS__v_$(AM_DEFAULT_VERBOSITY)) ARMCI_X86COPY_AS__v_0 = @echo " GCC " $@; ############################################################################## # test suite # # Some tests were commented out either because they required an input file or # they were failing for unknown reasons and we didn't want to further debug. # SERIAL_TESTS = $(GAF2C_SERIAL_TESTS) $(TCGMSG_SERIAL_TESTS) \ $(ARMCI_SERIAL_TESTS) SERIAL_TESTS_XFAIL = $(GAF2C_SERIAL_TESTS_XFAIL) \ $(TCGMSG_SERIAL_TESTS_XFAIL) $(ARMCI_SERIAL_TESTS_XFAIL) PARALLEL_TESTS = $(GAF2C_PARALLEL_TESTS) $(TCGMSG_PARALLEL_TESTS) \ $(ARMCI_PARALLEL_TESTS) PARALLEL_TESTS_XFAIL = $(GAF2C_PARALLEL_TESTS_XFAIL) \ $(TCGMSG_PARALLEL_TESTS_XFAIL) $(ARMCI_PARALLEL_TESTS_XFAIL) @CROSS_COMPILING_FALSE@@MSG_COMMS_TCGMSG4_FALSE@@MSG_COMMS_TCGMSG5_FALSE@LOG_COMPILER = \ @CROSS_COMPILING_FALSE@@MSG_COMMS_TCGMSG4_FALSE@@MSG_COMMS_TCGMSG5_FALSE@maybe_mpiexec=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo ""; else if echo "$(MPIEXEC)" | $(GREP) "%NP%" > /dev/null; then echo "$(MPIEXEC)" | $(SED) 's/%NP%/$(NPROCS)/'; else echo "$(MPIEXEC)"; fi; fi`; eval $$maybe_mpiexec @MSG_COMMS_TCGMSG4_FALSE@@MSG_COMMS_TCGMSG5_TRUE@LOG_COMPILER = tst="$$dir$$f -np $(NPROCS)"; eval @MSG_COMMS_TCGMSG4_TRUE@LOG_COMPILER = \ @MSG_COMMS_TCGMSG4_TRUE@maybe_parexec=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo ""; else echo "$(TCGEXEC)"; fi`; eval $$maybe_parexec @CROSS_COMPILING_TRUE@@MSG_COMMS_TCGMSG4_FALSE@@MSG_COMMS_TCGMSG5_FALSE@maybe_mpiexec = `if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo "$(MPIEXEC)" | $(SED) 's/%NP%/1/'; else echo "$(MPIEXEC)" | $(SED) 's/%NP%/$(NPROCS)/'; fi`; eval $$maybe_mpiexec all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .cc .html .lo .log .o .obj .s .test .test$(EXEEXT) am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/src-portals/Makefile.inc $(top_srcdir)/src-gemini/Makefile.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/src-portals/Makefile.inc $(top_srcdir)/src-gemini/Makefile.inc: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 clean-checkLTLIBRARIES: -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) @list='$(check_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done src-portals/$(am__dirstamp): @$(MKDIR_P) src-portals @: > src-portals/$(am__dirstamp) src-portals/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src-portals/$(DEPDIR) @: > src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/aggregate.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/armci.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/armci_portals.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/buffers.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/caccumulate.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/ccopy.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/clusterinfo.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/ds-shared.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/fence.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/kr_malloc.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/locks.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/memlock.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/memory.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/message.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/mutex.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/pack.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/portals_cp.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/portals_ds.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/portals.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/request.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/rmw.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/rtinfo.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/semaphores.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/shmem.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/shmlimit.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/signaltrap.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/spawn.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/strided.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/vector.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/new_memory.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/groups.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/gpc.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/threads.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-portals/utils.lo: src-portals/$(am__dirstamp) \ src-portals/$(DEPDIR)/$(am__dirstamp) src-gemini/$(am__dirstamp): @$(MKDIR_P) src-gemini @: > src-gemini/$(am__dirstamp) src-gemini/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src-gemini/$(DEPDIR) @: > src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/aggregate.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/armci.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/armci-onesided.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/buffers.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/caccumulate.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/ccopy.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/clusterinfo.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/ds-shared.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/fence.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/groups.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/kr_malloc.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/locks.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/memlock.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/memory.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/message.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/mutex.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/pack.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/request.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/rmw.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/rtinfo.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/semaphores.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/shmem.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/shmlimit.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/signaltrap.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/spawn.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/strided.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/vector.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/gpc.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/threads.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src-gemini/utils.lo: src-gemini/$(am__dirstamp) \ src-gemini/$(DEPDIR)/$(am__dirstamp) src/collectives/$(am__dirstamp): @$(MKDIR_P) src/collectives @: > src/collectives/$(am__dirstamp) src/collectives/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/collectives/$(DEPDIR) @: > src/collectives/$(DEPDIR)/$(am__dirstamp) src/collectives/message.lo: src/collectives/$(am__dirstamp) \ src/collectives/$(DEPDIR)/$(am__dirstamp) src/common/$(am__dirstamp): @$(MKDIR_P) src/common @: > src/common/$(am__dirstamp) src/common/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/common/$(DEPDIR) @: > src/common/$(DEPDIR)/$(am__dirstamp) src/common/aggregate.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) src/common/armci.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) src/common/ccopy.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) src/common/clusterinfo.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) src/common/pack.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) src/common/iterator.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) src/locks/$(am__dirstamp): @$(MKDIR_P) src/locks @: > src/locks/$(am__dirstamp) src/locks/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/locks/$(DEPDIR) @: > src/locks/$(DEPDIR)/$(am__dirstamp) src/locks/locks.lo: src/locks/$(am__dirstamp) \ src/locks/$(DEPDIR)/$(am__dirstamp) src/locks/memlock.lo: src/locks/$(am__dirstamp) \ src/locks/$(DEPDIR)/$(am__dirstamp) src/locks/mutex.lo: src/locks/$(am__dirstamp) \ src/locks/$(DEPDIR)/$(am__dirstamp) src/locks/semaphores.lo: src/locks/$(am__dirstamp) \ src/locks/$(DEPDIR)/$(am__dirstamp) src/memory/$(am__dirstamp): @$(MKDIR_P) src/memory @: > src/memory/$(am__dirstamp) src/memory/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/memory/$(DEPDIR) @: > src/memory/$(DEPDIR)/$(am__dirstamp) src/memory/kr_malloc.lo: src/memory/$(am__dirstamp) \ src/memory/$(DEPDIR)/$(am__dirstamp) src/memory/memory.lo: src/memory/$(am__dirstamp) \ src/memory/$(DEPDIR)/$(am__dirstamp) src/progress/$(am__dirstamp): @$(MKDIR_P) src/progress @: > src/progress/$(am__dirstamp) src/progress/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/progress/$(DEPDIR) @: > src/progress/$(DEPDIR)/$(am__dirstamp) src/progress/fence.lo: src/progress/$(am__dirstamp) \ src/progress/$(DEPDIR)/$(am__dirstamp) src/progress/wait.lo: src/progress/$(am__dirstamp) \ src/progress/$(DEPDIR)/$(am__dirstamp) src/xfer/$(am__dirstamp): @$(MKDIR_P) src/xfer @: > src/xfer/$(am__dirstamp) src/xfer/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/xfer/$(DEPDIR) @: > src/xfer/$(DEPDIR)/$(am__dirstamp) src/xfer/caccumulate.lo: src/xfer/$(am__dirstamp) \ src/xfer/$(DEPDIR)/$(am__dirstamp) src/xfer/rmw.lo: src/xfer/$(am__dirstamp) \ src/xfer/$(DEPDIR)/$(am__dirstamp) src/xfer/strided.lo: src/xfer/$(am__dirstamp) \ src/xfer/$(DEPDIR)/$(am__dirstamp) src/xfer/vector.lo: src/xfer/$(am__dirstamp) \ src/xfer/$(DEPDIR)/$(am__dirstamp) src/common/groups.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) src/devices/bgml/$(am__dirstamp): @$(MKDIR_P) src/devices/bgml @: > src/devices/bgml/$(am__dirstamp) src/devices/bgml/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/devices/bgml/$(DEPDIR) @: > src/devices/bgml/$(DEPDIR)/$(am__dirstamp) src/devices/bgml/bgml.lo: src/devices/bgml/$(am__dirstamp) \ src/devices/bgml/$(DEPDIR)/$(am__dirstamp) src/memory/shmalloc.lo: src/memory/$(am__dirstamp) \ src/memory/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf2/$(am__dirstamp): @$(MKDIR_P) src/devices/dcmf/dcmf2 @: > src/devices/dcmf/dcmf2/$(am__dirstamp) src/devices/dcmf/dcmf2/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/devices/dcmf/dcmf2/$(DEPDIR) @: > src/devices/dcmf/dcmf2/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf2/armcix_acc.lo: \ src/devices/dcmf/dcmf2/$(am__dirstamp) \ src/devices/dcmf/dcmf2/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf2/armcix_fence.lo: \ src/devices/dcmf/dcmf2/$(am__dirstamp) \ src/devices/dcmf/dcmf2/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf2/armcix_get.lo: \ src/devices/dcmf/dcmf2/$(am__dirstamp) \ src/devices/dcmf/dcmf2/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf2/armcix_impl.lo: \ src/devices/dcmf/dcmf2/$(am__dirstamp) \ src/devices/dcmf/dcmf2/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf2/armcix_lock.lo: \ src/devices/dcmf/dcmf2/$(am__dirstamp) \ src/devices/dcmf/dcmf2/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf2/armcix_put.lo: \ src/devices/dcmf/dcmf2/$(am__dirstamp) \ src/devices/dcmf/dcmf2/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf2/armcix_rmw.lo: \ src/devices/dcmf/dcmf2/$(am__dirstamp) \ src/devices/dcmf/dcmf2/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf2/armcix_wait.lo: \ src/devices/dcmf/dcmf2/$(am__dirstamp) \ src/devices/dcmf/dcmf2/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.2.0/$(am__dirstamp): @$(MKDIR_P) src/devices/dcmf/dcmf-0.2.0 @: > src/devices/dcmf/dcmf-0.2.0/$(am__dirstamp) src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/devices/dcmf/dcmf-0.2.0/$(DEPDIR) @: > src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.2.0/armcix_acc.lo: \ src/devices/dcmf/dcmf-0.2.0/$(am__dirstamp) \ src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.2.0/armcix_fence.lo: \ src/devices/dcmf/dcmf-0.2.0/$(am__dirstamp) \ src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.2.0/armcix_get.lo: \ src/devices/dcmf/dcmf-0.2.0/$(am__dirstamp) \ src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.2.0/armcix_impl.lo: \ src/devices/dcmf/dcmf-0.2.0/$(am__dirstamp) \ src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.2.0/armcix_lock.lo: \ src/devices/dcmf/dcmf-0.2.0/$(am__dirstamp) \ src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.2.0/armcix_put.lo: \ src/devices/dcmf/dcmf-0.2.0/$(am__dirstamp) \ src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.2.0/armcix_rmw.lo: \ src/devices/dcmf/dcmf-0.2.0/$(am__dirstamp) \ src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.2.0/armcix_wait.lo: \ src/devices/dcmf/dcmf-0.2.0/$(am__dirstamp) \ src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.3.0/$(am__dirstamp): @$(MKDIR_P) src/devices/dcmf/dcmf-0.3.0 @: > src/devices/dcmf/dcmf-0.3.0/$(am__dirstamp) src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/devices/dcmf/dcmf-0.3.0/$(DEPDIR) @: > src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.3.0/armcix_acc.lo: \ src/devices/dcmf/dcmf-0.3.0/$(am__dirstamp) \ src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.3.0/armcix_fence.lo: \ src/devices/dcmf/dcmf-0.3.0/$(am__dirstamp) \ src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.3.0/armcix_get.lo: \ src/devices/dcmf/dcmf-0.3.0/$(am__dirstamp) \ src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.3.0/armcix_impl.lo: \ src/devices/dcmf/dcmf-0.3.0/$(am__dirstamp) \ src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.3.0/armcix_lock.lo: \ src/devices/dcmf/dcmf-0.3.0/$(am__dirstamp) \ src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.3.0/armcix_put.lo: \ src/devices/dcmf/dcmf-0.3.0/$(am__dirstamp) \ src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.3.0/armcix_rmw.lo: \ src/devices/dcmf/dcmf-0.3.0/$(am__dirstamp) \ src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/$(am__dirstamp) src/devices/dcmf/dcmf-0.3.0/armcix_wait.lo: \ src/devices/dcmf/dcmf-0.3.0/$(am__dirstamp) \ src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/$(am__dirstamp) src/common/async.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) src/common/request.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) src/devices/lapi/$(am__dirstamp): @$(MKDIR_P) src/devices/lapi @: > src/devices/lapi/$(am__dirstamp) src/devices/lapi/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/devices/lapi/$(DEPDIR) @: > src/devices/lapi/$(DEPDIR)/$(am__dirstamp) src/devices/lapi/lapi.lo: src/devices/lapi/$(am__dirstamp) \ src/devices/lapi/$(DEPDIR)/$(am__dirstamp) src/memory/buffers.lo: src/memory/$(am__dirstamp) \ src/memory/$(DEPDIR)/$(am__dirstamp) src/common/ds-shared.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) src/common/spawn.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) src/devices/mpi-mt/$(am__dirstamp): @$(MKDIR_P) src/devices/mpi-mt @: > src/devices/mpi-mt/$(am__dirstamp) src/devices/mpi-mt/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/devices/mpi-mt/$(DEPDIR) @: > src/devices/mpi-mt/$(DEPDIR)/$(am__dirstamp) src/devices/mpi-mt/mpi2_client.lo: src/devices/mpi-mt/$(am__dirstamp) \ src/devices/mpi-mt/$(DEPDIR)/$(am__dirstamp) src/devices/mpi-mt/mpi2_server.lo: src/devices/mpi-mt/$(am__dirstamp) \ src/devices/mpi-mt/$(DEPDIR)/$(am__dirstamp) src/devices/mpi-spawn/$(am__dirstamp): @$(MKDIR_P) src/devices/mpi-spawn @: > src/devices/mpi-spawn/$(am__dirstamp) src/devices/mpi-spawn/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/devices/mpi-spawn/$(DEPDIR) @: > src/devices/mpi-spawn/$(DEPDIR)/$(am__dirstamp) src/devices/mpi-spawn/mpi2_client.lo: \ src/devices/mpi-spawn/$(am__dirstamp) \ src/devices/mpi-spawn/$(DEPDIR)/$(am__dirstamp) src/devices/mpi-spawn/mpi2_server.lo: \ src/devices/mpi-spawn/$(am__dirstamp) \ src/devices/mpi-spawn/$(DEPDIR)/$(am__dirstamp) src/common/regions.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) src/devices/openib/$(am__dirstamp): @$(MKDIR_P) src/devices/openib @: > src/devices/openib/$(am__dirstamp) src/devices/openib/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/devices/openib/$(DEPDIR) @: > src/devices/openib/$(DEPDIR)/$(am__dirstamp) src/devices/openib/cbuf.lo: src/devices/openib/$(am__dirstamp) \ src/devices/openib/$(DEPDIR)/$(am__dirstamp) src/devices/openib/openib.lo: src/devices/openib/$(am__dirstamp) \ src/devices/openib/$(DEPDIR)/$(am__dirstamp) src/devices/openib/pendbufs.lo: src/devices/openib/$(am__dirstamp) \ src/devices/openib/$(DEPDIR)/$(am__dirstamp) src/devices/openib/rtinfo.lo: src/devices/openib/$(am__dirstamp) \ src/devices/openib/$(DEPDIR)/$(am__dirstamp) src/devices/sockets/$(am__dirstamp): @$(MKDIR_P) src/devices/sockets @: > src/devices/sockets/$(am__dirstamp) src/devices/sockets/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/devices/sockets/$(DEPDIR) @: > src/devices/sockets/$(DEPDIR)/$(am__dirstamp) src/devices/sockets/dataserv.lo: src/devices/sockets/$(am__dirstamp) \ src/devices/sockets/$(DEPDIR)/$(am__dirstamp) src/devices/sockets/sockets.lo: src/devices/sockets/$(am__dirstamp) \ src/devices/sockets/$(DEPDIR)/$(am__dirstamp) src/ft/$(am__dirstamp): @$(MKDIR_P) src/ft @: > src/ft/$(am__dirstamp) src/ft/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/ft/$(DEPDIR) @: > src/ft/$(DEPDIR)/$(am__dirstamp) src/ft/armci_chkpt.lo: src/ft/$(am__dirstamp) \ src/ft/$(DEPDIR)/$(am__dirstamp) src/ft/armci_storage.lo: src/ft/$(am__dirstamp) \ src/ft/$(DEPDIR)/$(am__dirstamp) src/common/gpc.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) src/common/signaltrap.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) src/memory/winshmem.lo: src/memory/$(am__dirstamp) \ src/memory/$(DEPDIR)/$(am__dirstamp) src/memory/shmem.lo: src/memory/$(am__dirstamp) \ src/memory/$(DEPDIR)/$(am__dirstamp) src/memory/shmlimit.lo: src/memory/$(am__dirstamp) \ src/memory/$(DEPDIR)/$(am__dirstamp) src/common/noncont.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) src/common/utils.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) src/util/$(am__dirstamp): @$(MKDIR_P) src/util @: > src/util/$(am__dirstamp) src/util/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/util/$(DEPDIR) @: > src/util/$(DEPDIR)/$(am__dirstamp) src/util/threads.lo: src/util/$(am__dirstamp) \ src/util/$(DEPDIR)/$(am__dirstamp) src/locks/tas-sx.lo: src/locks/$(am__dirstamp) \ src/locks/$(DEPDIR)/$(am__dirstamp) src/common/capi.lo: src/common/$(am__dirstamp) \ src/common/$(DEPDIR)/$(am__dirstamp) tools/$(am__dirstamp): @$(MKDIR_P) tools @: > tools/$(am__dirstamp) tools/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) tools/$(DEPDIR) @: > tools/$(DEPDIR)/$(am__dirstamp) tools/armci_prof.lo: tools/$(am__dirstamp) \ tools/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/$(am__dirstamp): @$(MKDIR_P) tcgmsg/ipcv4.0 @: > tcgmsg/ipcv4.0/$(am__dirstamp) tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) tcgmsg/ipcv4.0/$(DEPDIR) @: > tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/brdcst.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/checkbyte.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/cluster.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/drand48.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/error.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/evlog.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/evon.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/globalop.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/llog.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/mdtob.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/mdtoi.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/mitob.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/mitod.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/mtime.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/niceftn.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/nnodes.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/nodeid.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/nxtval.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/pbegin.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/pbeginf.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/pfilecopy.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/sema.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/setdbg.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/shmem.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/signals.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/snd.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/sockets.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/srmover.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/stats.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/synch.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/usleep.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/waitall.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/waitcom.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv4.0/xdrstuff.lo: tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/$(am__dirstamp): @$(MKDIR_P) tcgmsg/ipcv5.0 @: > tcgmsg/ipcv5.0/$(am__dirstamp) tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) tcgmsg/ipcv5.0/$(DEPDIR) @: > tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/drand48.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/globalop.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/llog.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/mdtob.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/mdtoi.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/misc.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/mitob.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/mitod.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/mtime.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/niceftn.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/nnodes.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/nodeid.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/pbegin.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/pfilecopy.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/queues.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/signals.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/snd_rcv_probe.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/usleep.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/waitall.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/async_send_lapi.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/lapi_putget.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/async_send.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/busy.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/error.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/nxtval.shm.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/pbeginf.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/shmem.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) tcgmsg/ipcv5.0/synch.lo: tcgmsg/ipcv5.0/$(am__dirstamp) \ tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) libarmci.la: $(libarmci_la_OBJECTS) $(libarmci_la_DEPENDENCIES) $(EXTRA_libarmci_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_libarmci_la_rpath) $(libarmci_la_OBJECTS) $(libarmci_la_LIBADD) $(LIBS) libarmci_prof.la: $(libarmci_prof_la_OBJECTS) $(libarmci_prof_la_DEPENDENCIES) $(EXTRA_libarmci_prof_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_libarmci_prof_la_rpath) $(libarmci_prof_la_OBJECTS) $(libarmci_prof_la_LIBADD) $(LIBS) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list examples/benchmarks/RandomAccess/simple/$(am__dirstamp): @$(MKDIR_P) examples/benchmarks/RandomAccess/simple @: > examples/benchmarks/RandomAccess/simple/$(am__dirstamp) examples/benchmarks/RandomAccess/simple/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/benchmarks/RandomAccess/simple/$(DEPDIR) @: > examples/benchmarks/RandomAccess/simple/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/RandomAccess/simple/simple.$(OBJEXT): \ examples/benchmarks/RandomAccess/simple/$(am__dirstamp) \ examples/benchmarks/RandomAccess/simple/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/RandomAccess/$(am__dirstamp): @$(MKDIR_P) examples/benchmarks/RandomAccess @: > examples/benchmarks/RandomAccess/$(am__dirstamp) examples/benchmarks/RandomAccess/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/benchmarks/RandomAccess/$(DEPDIR) @: > examples/benchmarks/RandomAccess/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/RandomAccess/timing.$(OBJEXT): \ examples/benchmarks/RandomAccess/$(am__dirstamp) \ examples/benchmarks/RandomAccess/$(DEPDIR)/$(am__dirstamp) testing/$(am__dirstamp): @$(MKDIR_P) testing @: > testing/$(am__dirstamp) testing/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) testing/$(DEPDIR) @: > testing/$(DEPDIR)/$(am__dirstamp) testing/rpl_armci_msg_init.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/rpl_armci_msg_finalize.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/RandomAccess/simple/simple$(EXEEXT): $(examples_benchmarks_RandomAccess_simple_simple_OBJECTS) $(examples_benchmarks_RandomAccess_simple_simple_DEPENDENCIES) $(EXTRA_examples_benchmarks_RandomAccess_simple_simple_DEPENDENCIES) examples/benchmarks/RandomAccess/simple/$(am__dirstamp) @rm -f examples/benchmarks/RandomAccess/simple/simple$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_benchmarks_RandomAccess_simple_simple_OBJECTS) $(examples_benchmarks_RandomAccess_simple_simple_LDADD) $(LIBS) examples/benchmarks/RandomAccess/smp_bucket/$(am__dirstamp): @$(MKDIR_P) examples/benchmarks/RandomAccess/smp_bucket @: > examples/benchmarks/RandomAccess/smp_bucket/$(am__dirstamp) examples/benchmarks/RandomAccess/smp_bucket/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/benchmarks/RandomAccess/smp_bucket/$(DEPDIR) @: > examples/benchmarks/RandomAccess/smp_bucket/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/RandomAccess/smp_bucket/smp_bucket.$(OBJEXT): \ examples/benchmarks/RandomAccess/smp_bucket/$(am__dirstamp) \ examples/benchmarks/RandomAccess/smp_bucket/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/RandomAccess/smp_bucket/smp_bucket$(EXEEXT): $(examples_benchmarks_RandomAccess_smp_bucket_smp_bucket_OBJECTS) $(examples_benchmarks_RandomAccess_smp_bucket_smp_bucket_DEPENDENCIES) $(EXTRA_examples_benchmarks_RandomAccess_smp_bucket_smp_bucket_DEPENDENCIES) examples/benchmarks/RandomAccess/smp_bucket/$(am__dirstamp) @rm -f examples/benchmarks/RandomAccess/smp_bucket/smp_bucket$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_benchmarks_RandomAccess_smp_bucket_smp_bucket_OBJECTS) $(examples_benchmarks_RandomAccess_smp_bucket_smp_bucket_LDADD) $(LIBS) examples/benchmarks/cg/armci_sharedmemory/$(am__dirstamp): @$(MKDIR_P) examples/benchmarks/cg/armci_sharedmemory @: > examples/benchmarks/cg/armci_sharedmemory/$(am__dirstamp) examples/benchmarks/cg/armci_sharedmemory/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/benchmarks/cg/armci_sharedmemory/$(DEPDIR) @: > examples/benchmarks/cg/armci_sharedmemory/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/cg/armci_sharedmemory/cg.$(OBJEXT): \ examples/benchmarks/cg/armci_sharedmemory/$(am__dirstamp) \ examples/benchmarks/cg/armci_sharedmemory/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/cg/armci_sharedmemory/compute.$(OBJEXT): \ examples/benchmarks/cg/armci_sharedmemory/$(am__dirstamp) \ examples/benchmarks/cg/armci_sharedmemory/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/cg/armci_sharedmemory/read_input.$(OBJEXT): \ examples/benchmarks/cg/armci_sharedmemory/$(am__dirstamp) \ examples/benchmarks/cg/armci_sharedmemory/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/cg/armci_sharedmemory/timing.$(OBJEXT): \ examples/benchmarks/cg/armci_sharedmemory/$(am__dirstamp) \ examples/benchmarks/cg/armci_sharedmemory/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/cg/armci_sharedmemory/cg$(EXEEXT): $(examples_benchmarks_cg_armci_sharedmemory_cg_OBJECTS) $(examples_benchmarks_cg_armci_sharedmemory_cg_DEPENDENCIES) $(EXTRA_examples_benchmarks_cg_armci_sharedmemory_cg_DEPENDENCIES) examples/benchmarks/cg/armci_sharedmemory/$(am__dirstamp) @rm -f examples/benchmarks/cg/armci_sharedmemory/cg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_benchmarks_cg_armci_sharedmemory_cg_OBJECTS) $(examples_benchmarks_cg_armci_sharedmemory_cg_LDADD) $(LIBS) examples/benchmarks/lu/armci_blocking/$(am__dirstamp): @$(MKDIR_P) examples/benchmarks/lu/armci_blocking @: > examples/benchmarks/lu/armci_blocking/$(am__dirstamp) examples/benchmarks/lu/armci_blocking/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/benchmarks/lu/armci_blocking/$(DEPDIR) @: > examples/benchmarks/lu/armci_blocking/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/lu/armci_blocking/lu.$(OBJEXT): \ examples/benchmarks/lu/armci_blocking/$(am__dirstamp) \ examples/benchmarks/lu/armci_blocking/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/lu/armci_blocking/timing.$(OBJEXT): \ examples/benchmarks/lu/armci_blocking/$(am__dirstamp) \ examples/benchmarks/lu/armci_blocking/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/lu/armci_blocking/lu$(EXEEXT): $(examples_benchmarks_lu_armci_blocking_lu_OBJECTS) $(examples_benchmarks_lu_armci_blocking_lu_DEPENDENCIES) $(EXTRA_examples_benchmarks_lu_armci_blocking_lu_DEPENDENCIES) examples/benchmarks/lu/armci_blocking/$(am__dirstamp) @rm -f examples/benchmarks/lu/armci_blocking/lu$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_benchmarks_lu_armci_blocking_lu_OBJECTS) $(examples_benchmarks_lu_armci_blocking_lu_LDADD) $(LIBS) examples/benchmarks/lu/armci_blocking/lu-b-bc.$(OBJEXT): \ examples/benchmarks/lu/armci_blocking/$(am__dirstamp) \ examples/benchmarks/lu/armci_blocking/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/lu/armci_blocking/lu-b-bc$(EXEEXT): $(examples_benchmarks_lu_armci_blocking_lu_b_bc_OBJECTS) $(examples_benchmarks_lu_armci_blocking_lu_b_bc_DEPENDENCIES) $(EXTRA_examples_benchmarks_lu_armci_blocking_lu_b_bc_DEPENDENCIES) examples/benchmarks/lu/armci_blocking/$(am__dirstamp) @rm -f examples/benchmarks/lu/armci_blocking/lu-b-bc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_benchmarks_lu_armci_blocking_lu_b_bc_OBJECTS) $(examples_benchmarks_lu_armci_blocking_lu_b_bc_LDADD) $(LIBS) examples/benchmarks/lu/armci_blocking/lu-block.$(OBJEXT): \ examples/benchmarks/lu/armci_blocking/$(am__dirstamp) \ examples/benchmarks/lu/armci_blocking/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/lu/armci_blocking/lu-block$(EXEEXT): $(examples_benchmarks_lu_armci_blocking_lu_block_OBJECTS) $(examples_benchmarks_lu_armci_blocking_lu_block_DEPENDENCIES) $(EXTRA_examples_benchmarks_lu_armci_blocking_lu_block_DEPENDENCIES) examples/benchmarks/lu/armci_blocking/$(am__dirstamp) @rm -f examples/benchmarks/lu/armci_blocking/lu-block$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_benchmarks_lu_armci_blocking_lu_block_OBJECTS) $(examples_benchmarks_lu_armci_blocking_lu_block_LDADD) $(LIBS) examples/benchmarks/lu/armci_multithreaded/$(am__dirstamp): @$(MKDIR_P) examples/benchmarks/lu/armci_multithreaded @: > examples/benchmarks/lu/armci_multithreaded/$(am__dirstamp) examples/benchmarks/lu/armci_multithreaded/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/benchmarks/lu/armci_multithreaded/$(DEPDIR) @: > examples/benchmarks/lu/armci_multithreaded/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/lu/armci_multithreaded/lu-block-th.$(OBJEXT): \ examples/benchmarks/lu/armci_multithreaded/$(am__dirstamp) \ examples/benchmarks/lu/armci_multithreaded/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/lu/armci_multithreaded/timing.$(OBJEXT): \ examples/benchmarks/lu/armci_multithreaded/$(am__dirstamp) \ examples/benchmarks/lu/armci_multithreaded/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/lu/armci_multithreaded/lu-block-th$(EXEEXT): $(examples_benchmarks_lu_armci_multithreaded_lu_block_th_OBJECTS) $(examples_benchmarks_lu_armci_multithreaded_lu_block_th_DEPENDENCIES) $(EXTRA_examples_benchmarks_lu_armci_multithreaded_lu_block_th_DEPENDENCIES) examples/benchmarks/lu/armci_multithreaded/$(am__dirstamp) @rm -f examples/benchmarks/lu/armci_multithreaded/lu-block-th$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_benchmarks_lu_armci_multithreaded_lu_block_th_OBJECTS) $(examples_benchmarks_lu_armci_multithreaded_lu_block_th_LDADD) $(LIBS) examples/benchmarks/lu/armci_nonblocking/$(am__dirstamp): @$(MKDIR_P) examples/benchmarks/lu/armci_nonblocking @: > examples/benchmarks/lu/armci_nonblocking/$(am__dirstamp) examples/benchmarks/lu/armci_nonblocking/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/benchmarks/lu/armci_nonblocking/$(DEPDIR) @: > examples/benchmarks/lu/armci_nonblocking/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/lu/armci_nonblocking/lu_nb_get.$(OBJEXT): \ examples/benchmarks/lu/armci_nonblocking/$(am__dirstamp) \ examples/benchmarks/lu/armci_nonblocking/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/lu/armci_nonblocking/timing.$(OBJEXT): \ examples/benchmarks/lu/armci_nonblocking/$(am__dirstamp) \ examples/benchmarks/lu/armci_nonblocking/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/lu/armci_nonblocking/lu_nb_get$(EXEEXT): $(examples_benchmarks_lu_armci_nonblocking_lu_nb_get_OBJECTS) $(examples_benchmarks_lu_armci_nonblocking_lu_nb_get_DEPENDENCIES) $(EXTRA_examples_benchmarks_lu_armci_nonblocking_lu_nb_get_DEPENDENCIES) examples/benchmarks/lu/armci_nonblocking/$(am__dirstamp) @rm -f examples/benchmarks/lu/armci_nonblocking/lu_nb_get$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_benchmarks_lu_armci_nonblocking_lu_nb_get_OBJECTS) $(examples_benchmarks_lu_armci_nonblocking_lu_nb_get_LDADD) $(LIBS) examples/benchmarks/lu/armci_nonblocking/lu_nb_put.$(OBJEXT): \ examples/benchmarks/lu/armci_nonblocking/$(am__dirstamp) \ examples/benchmarks/lu/armci_nonblocking/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/lu/armci_nonblocking/lu_nb_put$(EXEEXT): $(examples_benchmarks_lu_armci_nonblocking_lu_nb_put_OBJECTS) $(examples_benchmarks_lu_armci_nonblocking_lu_nb_put_DEPENDENCIES) $(EXTRA_examples_benchmarks_lu_armci_nonblocking_lu_nb_put_DEPENDENCIES) examples/benchmarks/lu/armci_nonblocking/$(am__dirstamp) @rm -f examples/benchmarks/lu/armci_nonblocking/lu_nb_put$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_benchmarks_lu_armci_nonblocking_lu_nb_put_OBJECTS) $(examples_benchmarks_lu_armci_nonblocking_lu_nb_put_LDADD) $(LIBS) examples/benchmarks/lu/pthreads/$(am__dirstamp): @$(MKDIR_P) examples/benchmarks/lu/pthreads @: > examples/benchmarks/lu/pthreads/$(am__dirstamp) examples/benchmarks/lu/pthreads/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/benchmarks/lu/pthreads/$(DEPDIR) @: > examples/benchmarks/lu/pthreads/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/lu/pthreads/barrier.$(OBJEXT): \ examples/benchmarks/lu/pthreads/$(am__dirstamp) \ examples/benchmarks/lu/pthreads/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/lu/pthreads/lu-thread.$(OBJEXT): \ examples/benchmarks/lu/pthreads/$(am__dirstamp) \ examples/benchmarks/lu/pthreads/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/lu/pthreads/timing.$(OBJEXT): \ examples/benchmarks/lu/pthreads/$(am__dirstamp) \ examples/benchmarks/lu/pthreads/$(DEPDIR)/$(am__dirstamp) examples/benchmarks/lu/pthreads/lu-thread$(EXEEXT): $(examples_benchmarks_lu_pthreads_lu_thread_OBJECTS) $(examples_benchmarks_lu_pthreads_lu_thread_DEPENDENCIES) $(EXTRA_examples_benchmarks_lu_pthreads_lu_thread_DEPENDENCIES) examples/benchmarks/lu/pthreads/$(am__dirstamp) @rm -f examples/benchmarks/lu/pthreads/lu-thread$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_benchmarks_lu_pthreads_lu_thread_OBJECTS) $(examples_benchmarks_lu_pthreads_lu_thread_LDADD) $(LIBS) examples/features/aggregation/simple/$(am__dirstamp): @$(MKDIR_P) examples/features/aggregation/simple @: > examples/features/aggregation/simple/$(am__dirstamp) examples/features/aggregation/simple/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/features/aggregation/simple/$(DEPDIR) @: > examples/features/aggregation/simple/$(DEPDIR)/$(am__dirstamp) examples/features/aggregation/simple/simple.$(OBJEXT): \ examples/features/aggregation/simple/$(am__dirstamp) \ examples/features/aggregation/simple/$(DEPDIR)/$(am__dirstamp) examples/features/aggregation/simple/simple$(EXEEXT): $(examples_features_aggregation_simple_simple_OBJECTS) $(examples_features_aggregation_simple_simple_DEPENDENCIES) $(EXTRA_examples_features_aggregation_simple_simple_DEPENDENCIES) examples/features/aggregation/simple/$(am__dirstamp) @rm -f examples/features/aggregation/simple/simple$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_features_aggregation_simple_simple_OBJECTS) $(examples_features_aggregation_simple_simple_LDADD) $(LIBS) examples/features/aggregation/sparse_matvecmul/$(am__dirstamp): @$(MKDIR_P) examples/features/aggregation/sparse_matvecmul @: > examples/features/aggregation/sparse_matvecmul/$(am__dirstamp) examples/features/aggregation/sparse_matvecmul/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/features/aggregation/sparse_matvecmul/$(DEPDIR) @: > examples/features/aggregation/sparse_matvecmul/$(DEPDIR)/$(am__dirstamp) examples/features/aggregation/sparse_matvecmul/sparse_matvecmul.$(OBJEXT): examples/features/aggregation/sparse_matvecmul/$(am__dirstamp) \ examples/features/aggregation/sparse_matvecmul/$(DEPDIR)/$(am__dirstamp) examples/features/aggregation/sparse_matvecmul/sparse_matvecmul$(EXEEXT): $(examples_features_aggregation_sparse_matvecmul_sparse_matvecmul_OBJECTS) $(examples_features_aggregation_sparse_matvecmul_sparse_matvecmul_DEPENDENCIES) $(EXTRA_examples_features_aggregation_sparse_matvecmul_sparse_matvecmul_DEPENDENCIES) examples/features/aggregation/sparse_matvecmul/$(am__dirstamp) @rm -f examples/features/aggregation/sparse_matvecmul/sparse_matvecmul$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_features_aggregation_sparse_matvecmul_sparse_matvecmul_OBJECTS) $(examples_features_aggregation_sparse_matvecmul_sparse_matvecmul_LDADD) $(LIBS) examples/features/concurrency/multidma/$(am__dirstamp): @$(MKDIR_P) examples/features/concurrency/multidma @: > examples/features/concurrency/multidma/$(am__dirstamp) examples/features/concurrency/multidma/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/features/concurrency/multidma/$(DEPDIR) @: > examples/features/concurrency/multidma/$(DEPDIR)/$(am__dirstamp) examples/features/concurrency/multidma/multidma.$(OBJEXT): \ examples/features/concurrency/multidma/$(am__dirstamp) \ examples/features/concurrency/multidma/$(DEPDIR)/$(am__dirstamp) examples/features/concurrency/multidma/multidma$(EXEEXT): $(examples_features_concurrency_multidma_multidma_OBJECTS) $(examples_features_concurrency_multidma_multidma_DEPENDENCIES) $(EXTRA_examples_features_concurrency_multidma_multidma_DEPENDENCIES) examples/features/concurrency/multidma/$(am__dirstamp) @rm -f examples/features/concurrency/multidma/multidma$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_features_concurrency_multidma_multidma_OBJECTS) $(examples_features_concurrency_multidma_multidma_LDADD) $(LIBS) examples/features/concurrency/simple/$(am__dirstamp): @$(MKDIR_P) examples/features/concurrency/simple @: > examples/features/concurrency/simple/$(am__dirstamp) examples/features/concurrency/simple/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/features/concurrency/simple/$(DEPDIR) @: > examples/features/concurrency/simple/$(DEPDIR)/$(am__dirstamp) examples/features/concurrency/simple/comdegree.$(OBJEXT): \ examples/features/concurrency/simple/$(am__dirstamp) \ examples/features/concurrency/simple/$(DEPDIR)/$(am__dirstamp) examples/features/concurrency/simple/comdegree$(EXEEXT): $(examples_features_concurrency_simple_comdegree_OBJECTS) $(examples_features_concurrency_simple_comdegree_DEPENDENCIES) $(EXTRA_examples_features_concurrency_simple_comdegree_DEPENDENCIES) examples/features/concurrency/simple/$(am__dirstamp) @rm -f examples/features/concurrency/simple/comdegree$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_features_concurrency_simple_comdegree_OBJECTS) $(examples_features_concurrency_simple_comdegree_LDADD) $(LIBS) examples/features/gpc/hashtable/$(am__dirstamp): @$(MKDIR_P) examples/features/gpc/hashtable @: > examples/features/gpc/hashtable/$(am__dirstamp) examples/features/gpc/hashtable/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/features/gpc/hashtable/$(DEPDIR) @: > examples/features/gpc/hashtable/$(DEPDIR)/$(am__dirstamp) examples/features/gpc/hashtable/DistHashmap.$(OBJEXT): \ examples/features/gpc/hashtable/$(am__dirstamp) \ examples/features/gpc/hashtable/$(DEPDIR)/$(am__dirstamp) examples/features/gpc/hashtable/GPCHashmap.$(OBJEXT): \ examples/features/gpc/hashtable/$(am__dirstamp) \ examples/features/gpc/hashtable/$(DEPDIR)/$(am__dirstamp) examples/features/gpc/hashtable/GPCHashmapHandler.$(OBJEXT): \ examples/features/gpc/hashtable/$(am__dirstamp) \ examples/features/gpc/hashtable/$(DEPDIR)/$(am__dirstamp) examples/features/gpc/hashtable/HashFunctions.$(OBJEXT): \ examples/features/gpc/hashtable/$(am__dirstamp) \ examples/features/gpc/hashtable/$(DEPDIR)/$(am__dirstamp) examples/features/gpc/hashtable/HashUtil.$(OBJEXT): \ examples/features/gpc/hashtable/$(am__dirstamp) \ examples/features/gpc/hashtable/$(DEPDIR)/$(am__dirstamp) examples/features/gpc/hashtable/test_hashtable.$(OBJEXT): \ examples/features/gpc/hashtable/$(am__dirstamp) \ examples/features/gpc/hashtable/$(DEPDIR)/$(am__dirstamp) examples/features/gpc/hashtable/test_hashtable$(EXEEXT): $(examples_features_gpc_hashtable_test_hashtable_OBJECTS) $(examples_features_gpc_hashtable_test_hashtable_DEPENDENCIES) $(EXTRA_examples_features_gpc_hashtable_test_hashtable_DEPENDENCIES) examples/features/gpc/hashtable/$(am__dirstamp) @rm -f examples/features/gpc/hashtable/test_hashtable$(EXEEXT) $(AM_V_CXXLD)$(examples_features_gpc_hashtable_test_hashtable_LINK) $(examples_features_gpc_hashtable_test_hashtable_OBJECTS) $(examples_features_gpc_hashtable_test_hashtable_LDADD) $(LIBS) examples/features/non-blocking/overlap/$(am__dirstamp): @$(MKDIR_P) examples/features/non-blocking/overlap @: > examples/features/non-blocking/overlap/$(am__dirstamp) examples/features/non-blocking/overlap/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/features/non-blocking/overlap/$(DEPDIR) @: > examples/features/non-blocking/overlap/$(DEPDIR)/$(am__dirstamp) examples/features/non-blocking/overlap/overlap.$(OBJEXT): \ examples/features/non-blocking/overlap/$(am__dirstamp) \ examples/features/non-blocking/overlap/$(DEPDIR)/$(am__dirstamp) examples/features/non-blocking/overlap/overlap$(EXEEXT): $(examples_features_non_blocking_overlap_overlap_OBJECTS) $(examples_features_non_blocking_overlap_overlap_DEPENDENCIES) $(EXTRA_examples_features_non_blocking_overlap_overlap_DEPENDENCIES) examples/features/non-blocking/overlap/$(am__dirstamp) @rm -f examples/features/non-blocking/overlap/overlap$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_features_non_blocking_overlap_overlap_OBJECTS) $(examples_features_non_blocking_overlap_overlap_LDADD) $(LIBS) examples/features/non-blocking/simple/$(am__dirstamp): @$(MKDIR_P) examples/features/non-blocking/simple @: > examples/features/non-blocking/simple/$(am__dirstamp) examples/features/non-blocking/simple/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/features/non-blocking/simple/$(DEPDIR) @: > examples/features/non-blocking/simple/$(DEPDIR)/$(am__dirstamp) examples/features/non-blocking/simple/simple.$(OBJEXT): \ examples/features/non-blocking/simple/$(am__dirstamp) \ examples/features/non-blocking/simple/$(DEPDIR)/$(am__dirstamp) examples/features/non-blocking/simple/simple$(EXEEXT): $(examples_features_non_blocking_simple_simple_OBJECTS) $(examples_features_non_blocking_simple_simple_DEPENDENCIES) $(EXTRA_examples_features_non_blocking_simple_simple_DEPENDENCIES) examples/features/non-blocking/simple/$(am__dirstamp) @rm -f examples/features/non-blocking/simple/simple$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_features_non_blocking_simple_simple_OBJECTS) $(examples_features_non_blocking_simple_simple_LDADD) $(LIBS) examples/features/notification/simple/$(am__dirstamp): @$(MKDIR_P) examples/features/notification/simple @: > examples/features/notification/simple/$(am__dirstamp) examples/features/notification/simple/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/features/notification/simple/$(DEPDIR) @: > examples/features/notification/simple/$(DEPDIR)/$(am__dirstamp) examples/features/notification/simple/testnotify.$(OBJEXT): \ examples/features/notification/simple/$(am__dirstamp) \ examples/features/notification/simple/$(DEPDIR)/$(am__dirstamp) examples/features/notification/simple/testnotify$(EXEEXT): $(examples_features_notification_simple_testnotify_OBJECTS) $(examples_features_notification_simple_testnotify_DEPENDENCIES) $(EXTRA_examples_features_notification_simple_testnotify_DEPENDENCIES) examples/features/notification/simple/$(am__dirstamp) @rm -f examples/features/notification/simple/testnotify$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_features_notification_simple_testnotify_OBJECTS) $(examples_features_notification_simple_testnotify_LDADD) $(LIBS) examples/features/proc_affinity/computation_impact/$(am__dirstamp): @$(MKDIR_P) examples/features/proc_affinity/computation_impact @: > examples/features/proc_affinity/computation_impact/$(am__dirstamp) examples/features/proc_affinity/computation_impact/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/features/proc_affinity/computation_impact/$(DEPDIR) @: > examples/features/proc_affinity/computation_impact/$(DEPDIR)/$(am__dirstamp) examples/features/proc_affinity/computation_impact/computation_impact.$(OBJEXT): examples/features/proc_affinity/computation_impact/$(am__dirstamp) \ examples/features/proc_affinity/computation_impact/$(DEPDIR)/$(am__dirstamp) examples/features/proc_affinity/computation_impact/computation_impact$(EXEEXT): $(examples_features_proc_affinity_computation_impact_computation_impact_OBJECTS) $(examples_features_proc_affinity_computation_impact_computation_impact_DEPENDENCIES) $(EXTRA_examples_features_proc_affinity_computation_impact_computation_impact_DEPENDENCIES) examples/features/proc_affinity/computation_impact/$(am__dirstamp) @rm -f examples/features/proc_affinity/computation_impact/computation_impact$(EXEEXT) $(AM_V_CCLD)$(examples_features_proc_affinity_computation_impact_computation_impact_LINK) $(examples_features_proc_affinity_computation_impact_computation_impact_OBJECTS) $(examples_features_proc_affinity_computation_impact_computation_impact_LDADD) $(LIBS) examples/features/proc_affinity/simple/$(am__dirstamp): @$(MKDIR_P) examples/features/proc_affinity/simple @: > examples/features/proc_affinity/simple/$(am__dirstamp) examples/features/proc_affinity/simple/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/features/proc_affinity/simple/$(DEPDIR) @: > examples/features/proc_affinity/simple/$(DEPDIR)/$(am__dirstamp) examples/features/proc_affinity/simple/simple.$(OBJEXT): \ examples/features/proc_affinity/simple/$(am__dirstamp) \ examples/features/proc_affinity/simple/$(DEPDIR)/$(am__dirstamp) examples/features/proc_affinity/simple/simple$(EXEEXT): $(examples_features_proc_affinity_simple_simple_OBJECTS) $(examples_features_proc_affinity_simple_simple_DEPENDENCIES) $(EXTRA_examples_features_proc_affinity_simple_simple_DEPENDENCIES) examples/features/proc_affinity/simple/$(am__dirstamp) @rm -f examples/features/proc_affinity/simple/simple$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_features_proc_affinity_simple_simple_OBJECTS) $(examples_features_proc_affinity_simple_simple_LDADD) $(LIBS) examples/features/symmetric_memory/simple/$(am__dirstamp): @$(MKDIR_P) examples/features/symmetric_memory/simple @: > examples/features/symmetric_memory/simple/$(am__dirstamp) examples/features/symmetric_memory/simple/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/features/symmetric_memory/simple/$(DEPDIR) @: > examples/features/symmetric_memory/simple/$(DEPDIR)/$(am__dirstamp) examples/features/symmetric_memory/simple/simple.$(OBJEXT): \ examples/features/symmetric_memory/simple/$(am__dirstamp) \ examples/features/symmetric_memory/simple/$(DEPDIR)/$(am__dirstamp) examples/features/symmetric_memory/simple/simple$(EXEEXT): $(examples_features_symmetric_memory_simple_simple_OBJECTS) $(examples_features_symmetric_memory_simple_simple_DEPENDENCIES) $(EXTRA_examples_features_symmetric_memory_simple_simple_DEPENDENCIES) examples/features/symmetric_memory/simple/$(am__dirstamp) @rm -f examples/features/symmetric_memory/simple/simple$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_features_symmetric_memory_simple_simple_OBJECTS) $(examples_features_symmetric_memory_simple_simple_LDADD) $(LIBS) examples/simpleApps/$(am__dirstamp): @$(MKDIR_P) examples/simpleApps @: > examples/simpleApps/$(am__dirstamp) examples/simpleApps/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/simpleApps/$(DEPDIR) @: > examples/simpleApps/$(DEPDIR)/$(am__dirstamp) examples/simpleApps/transp1D-c.$(OBJEXT): \ examples/simpleApps/$(am__dirstamp) \ examples/simpleApps/$(DEPDIR)/$(am__dirstamp) examples/simpleApps/transp1D-c$(EXEEXT): $(examples_simpleApps_transp1D_c_OBJECTS) $(examples_simpleApps_transp1D_c_DEPENDENCIES) $(EXTRA_examples_simpleApps_transp1D_c_DEPENDENCIES) examples/simpleApps/$(am__dirstamp) @rm -f examples/simpleApps/transp1D-c$(EXEEXT) $(AM_V_CCLD)$(LINK) $(examples_simpleApps_transp1D_c_OBJECTS) $(examples_simpleApps_transp1D_c_LDADD) $(LIBS) tcgmsg/ipcv4.0/parallel.$(OBJEXT): tcgmsg/ipcv4.0/$(am__dirstamp) \ tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) parallel$(EXEEXT): $(parallel_OBJECTS) $(parallel_DEPENDENCIES) $(EXTRA_parallel_DEPENDENCIES) @rm -f parallel$(EXEEXT) $(AM_V_CCLD)$(LINK) $(parallel_OBJECTS) $(parallel_LDADD) $(LIBS) testing/clone.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/clone$(EXEEXT): $(testing_clone_OBJECTS) $(testing_clone_DEPENDENCIES) $(EXTRA_testing_clone_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/clone$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_clone_OBJECTS) $(testing_clone_LDADD) $(LIBS) testing/fork.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/fork$(EXEEXT): $(testing_fork_OBJECTS) $(testing_fork_DEPENDENCIES) $(EXTRA_testing_fork_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/fork$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_fork_OBJECTS) $(testing_fork_LDADD) $(LIBS) testing/fttest.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/fttest$(EXEEXT): $(testing_fttest_OBJECTS) $(testing_fttest_DEPENDENCIES) $(EXTRA_testing_fttest_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/fttest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_fttest_OBJECTS) $(testing_fttest_LDADD) $(LIBS) testing/gpctest.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/gpctest$(EXEEXT): $(testing_gpctest_OBJECTS) $(testing_gpctest_DEPENDENCIES) $(EXTRA_testing_gpctest_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/gpctest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_gpctest_OBJECTS) $(testing_gpctest_LDADD) $(LIBS) testing/ipctest.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/ipctest$(EXEEXT): $(testing_ipctest_OBJECTS) $(testing_ipctest_DEPENDENCIES) $(EXTRA_testing_ipctest_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/ipctest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_ipctest_OBJECTS) $(testing_ipctest_LDADD) $(LIBS) testing/msgcheck.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/msgcheck$(EXEEXT): $(testing_msgcheck_OBJECTS) $(testing_msgcheck_DEPENDENCIES) $(EXTRA_testing_msgcheck_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/msgcheck$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_msgcheck_OBJECTS) $(testing_msgcheck_LDADD) $(LIBS) testing/origptl.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/origptl$(EXEEXT): $(testing_origptl_OBJECTS) $(testing_origptl_DEPENDENCIES) $(EXTRA_testing_origptl_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/origptl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_origptl_OBJECTS) $(testing_origptl_LDADD) $(LIBS) testing/perf.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/perf$(EXEEXT): $(testing_perf_OBJECTS) $(testing_perf_DEPENDENCIES) $(EXTRA_testing_perf_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/perf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_perf_OBJECTS) $(testing_perf_LDADD) $(LIBS) testing/perf2.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/perf2$(EXEEXT): $(testing_perf2_OBJECTS) $(testing_perf2_DEPENDENCIES) $(EXTRA_testing_perf2_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/perf2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_perf2_OBJECTS) $(testing_perf2_LDADD) $(LIBS) testing/perf_aggr.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/perf_aggr$(EXEEXT): $(testing_perf_aggr_OBJECTS) $(testing_perf_aggr_DEPENDENCIES) $(EXTRA_testing_perf_aggr_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/perf_aggr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_perf_aggr_OBJECTS) $(testing_perf_aggr_LDADD) $(LIBS) testing/perf_nb.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/perf_nb$(EXEEXT): $(testing_perf_nb_OBJECTS) $(testing_perf_nb_DEPENDENCIES) $(EXTRA_testing_perf_nb_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/perf_nb$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_perf_nb_OBJECTS) $(testing_perf_nb_LDADD) $(LIBS) testing/ptltest.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/ptltest$(EXEEXT): $(testing_ptltest_OBJECTS) $(testing_ptltest_DEPENDENCIES) $(EXTRA_testing_ptltest_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/ptltest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_ptltest_OBJECTS) $(testing_ptltest_LDADD) $(LIBS) testing/shmclean.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/shmclean$(EXEEXT): $(testing_shmclean_OBJECTS) $(testing_shmclean_DEPENDENCIES) $(EXTRA_testing_shmclean_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/shmclean$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_shmclean_OBJECTS) $(testing_shmclean_LDADD) $(LIBS) testing/shmtest.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/shmtest$(EXEEXT): $(testing_shmtest_OBJECTS) $(testing_shmtest_DEPENDENCIES) $(EXTRA_testing_shmtest_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/shmtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_shmtest_OBJECTS) $(testing_shmtest_LDADD) $(LIBS) testing/simple.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/simple$(EXEEXT): $(testing_simple_OBJECTS) $(testing_simple_DEPENDENCIES) $(EXTRA_testing_simple_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/simple$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_simple_OBJECTS) $(testing_simple_LDADD) $(LIBS) testing/simplelock.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/simplelock$(EXEEXT): $(testing_simplelock_OBJECTS) $(testing_simplelock_DEPENDENCIES) $(EXTRA_testing_simplelock_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/simplelock$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_simplelock_OBJECTS) $(testing_simplelock_LDADD) $(LIBS) testing/te.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/te$(EXEEXT): $(testing_te_OBJECTS) $(testing_te_DEPENDENCIES) $(EXTRA_testing_te_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/te$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_te_OBJECTS) $(testing_te_LDADD) $(LIBS) testing/test.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/test$(EXEEXT): $(testing_test_OBJECTS) $(testing_test_DEPENDENCIES) $(EXTRA_testing_test_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_test_OBJECTS) $(testing_test_LDADD) $(LIBS) testing/test2.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/test2$(EXEEXT): $(testing_test2_OBJECTS) $(testing_test2_DEPENDENCIES) $(EXTRA_testing_test2_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/test2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_test2_OBJECTS) $(testing_test2_LDADD) $(LIBS) testing/test_groups.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/test_groups$(EXEEXT): $(testing_test_groups_OBJECTS) $(testing_test_groups_DEPENDENCIES) $(EXTRA_testing_test_groups_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/test_groups$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_test_groups_OBJECTS) $(testing_test_groups_LDADD) $(LIBS) testing/test_mt.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/test_mt$(EXEEXT): $(testing_test_mt_OBJECTS) $(testing_test_mt_DEPENDENCIES) $(EXTRA_testing_test_mt_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/test_mt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_test_mt_OBJECTS) $(testing_test_mt_LDADD) $(LIBS) testing/testing_testitr-testitr.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/testing_testitr-rpl_armci_msg_init.$(OBJEXT): \ testing/$(am__dirstamp) testing/$(DEPDIR)/$(am__dirstamp) testing/testing_testitr-rpl_armci_msg_finalize.$(OBJEXT): \ testing/$(am__dirstamp) testing/$(DEPDIR)/$(am__dirstamp) testing/testitr$(EXEEXT): $(testing_testitr_OBJECTS) $(testing_testitr_DEPENDENCIES) $(EXTRA_testing_testitr_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/testitr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_testitr_OBJECTS) $(testing_testitr_LDADD) $(LIBS) testing/testnotify.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/testnotify$(EXEEXT): $(testing_testnotify_OBJECTS) $(testing_testnotify_DEPENDENCIES) $(EXTRA_testing_testnotify_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/testnotify$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_testnotify_OBJECTS) $(testing_testnotify_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f examples/benchmarks/RandomAccess/simple/simple.$(OBJEXT) -rm -f examples/benchmarks/RandomAccess/smp_bucket/smp_bucket.$(OBJEXT) -rm -f examples/benchmarks/RandomAccess/timing.$(OBJEXT) -rm -f examples/benchmarks/cg/armci_sharedmemory/cg.$(OBJEXT) -rm -f examples/benchmarks/cg/armci_sharedmemory/compute.$(OBJEXT) -rm -f examples/benchmarks/cg/armci_sharedmemory/read_input.$(OBJEXT) -rm -f examples/benchmarks/cg/armci_sharedmemory/timing.$(OBJEXT) -rm -f examples/benchmarks/lu/armci_blocking/lu-b-bc.$(OBJEXT) -rm -f examples/benchmarks/lu/armci_blocking/lu-block.$(OBJEXT) -rm -f examples/benchmarks/lu/armci_blocking/lu.$(OBJEXT) -rm -f examples/benchmarks/lu/armci_blocking/timing.$(OBJEXT) -rm -f examples/benchmarks/lu/armci_multithreaded/lu-block-th.$(OBJEXT) -rm -f examples/benchmarks/lu/armci_multithreaded/timing.$(OBJEXT) -rm -f examples/benchmarks/lu/armci_nonblocking/lu_nb_get.$(OBJEXT) -rm -f examples/benchmarks/lu/armci_nonblocking/lu_nb_put.$(OBJEXT) -rm -f examples/benchmarks/lu/armci_nonblocking/timing.$(OBJEXT) -rm -f examples/benchmarks/lu/pthreads/barrier.$(OBJEXT) -rm -f examples/benchmarks/lu/pthreads/lu-thread.$(OBJEXT) -rm -f examples/benchmarks/lu/pthreads/timing.$(OBJEXT) -rm -f examples/features/aggregation/simple/simple.$(OBJEXT) -rm -f examples/features/aggregation/sparse_matvecmul/sparse_matvecmul.$(OBJEXT) -rm -f examples/features/concurrency/multidma/multidma.$(OBJEXT) -rm -f examples/features/concurrency/simple/comdegree.$(OBJEXT) -rm -f examples/features/gpc/hashtable/DistHashmap.$(OBJEXT) -rm -f examples/features/gpc/hashtable/GPCHashmap.$(OBJEXT) -rm -f examples/features/gpc/hashtable/GPCHashmapHandler.$(OBJEXT) -rm -f examples/features/gpc/hashtable/HashFunctions.$(OBJEXT) -rm -f examples/features/gpc/hashtable/HashUtil.$(OBJEXT) -rm -f examples/features/gpc/hashtable/test_hashtable.$(OBJEXT) -rm -f examples/features/non-blocking/overlap/overlap.$(OBJEXT) -rm -f examples/features/non-blocking/simple/simple.$(OBJEXT) -rm -f examples/features/notification/simple/testnotify.$(OBJEXT) -rm -f examples/features/proc_affinity/computation_impact/computation_impact.$(OBJEXT) -rm -f examples/features/proc_affinity/simple/simple.$(OBJEXT) -rm -f examples/features/symmetric_memory/simple/simple.$(OBJEXT) -rm -f examples/simpleApps/transp1D-c.$(OBJEXT) -rm -f src-gemini/aggregate.$(OBJEXT) -rm -f src-gemini/aggregate.lo -rm -f src-gemini/armci-onesided.$(OBJEXT) -rm -f src-gemini/armci-onesided.lo -rm -f src-gemini/armci.$(OBJEXT) -rm -f src-gemini/armci.lo -rm -f src-gemini/buffers.$(OBJEXT) -rm -f src-gemini/buffers.lo -rm -f src-gemini/caccumulate.$(OBJEXT) -rm -f src-gemini/caccumulate.lo -rm -f src-gemini/ccopy.$(OBJEXT) -rm -f src-gemini/ccopy.lo -rm -f src-gemini/clusterinfo.$(OBJEXT) -rm -f src-gemini/clusterinfo.lo -rm -f src-gemini/ds-shared.$(OBJEXT) -rm -f src-gemini/ds-shared.lo -rm -f src-gemini/fence.$(OBJEXT) -rm -f src-gemini/fence.lo -rm -f src-gemini/gpc.$(OBJEXT) -rm -f src-gemini/gpc.lo -rm -f src-gemini/groups.$(OBJEXT) -rm -f src-gemini/groups.lo -rm -f src-gemini/kr_malloc.$(OBJEXT) -rm -f src-gemini/kr_malloc.lo -rm -f src-gemini/locks.$(OBJEXT) -rm -f src-gemini/locks.lo -rm -f src-gemini/memlock.$(OBJEXT) -rm -f src-gemini/memlock.lo -rm -f src-gemini/memory.$(OBJEXT) -rm -f src-gemini/memory.lo -rm -f src-gemini/message.$(OBJEXT) -rm -f src-gemini/message.lo -rm -f src-gemini/mutex.$(OBJEXT) -rm -f src-gemini/mutex.lo -rm -f src-gemini/pack.$(OBJEXT) -rm -f src-gemini/pack.lo -rm -f src-gemini/request.$(OBJEXT) -rm -f src-gemini/request.lo -rm -f src-gemini/rmw.$(OBJEXT) -rm -f src-gemini/rmw.lo -rm -f src-gemini/rtinfo.$(OBJEXT) -rm -f src-gemini/rtinfo.lo -rm -f src-gemini/semaphores.$(OBJEXT) -rm -f src-gemini/semaphores.lo -rm -f src-gemini/shmem.$(OBJEXT) -rm -f src-gemini/shmem.lo -rm -f src-gemini/shmlimit.$(OBJEXT) -rm -f src-gemini/shmlimit.lo -rm -f src-gemini/signaltrap.$(OBJEXT) -rm -f src-gemini/signaltrap.lo -rm -f src-gemini/spawn.$(OBJEXT) -rm -f src-gemini/spawn.lo -rm -f src-gemini/strided.$(OBJEXT) -rm -f src-gemini/strided.lo -rm -f src-gemini/threads.$(OBJEXT) -rm -f src-gemini/threads.lo -rm -f src-gemini/utils.$(OBJEXT) -rm -f src-gemini/utils.lo -rm -f src-gemini/vector.$(OBJEXT) -rm -f src-gemini/vector.lo -rm -f src-portals/aggregate.$(OBJEXT) -rm -f src-portals/aggregate.lo -rm -f src-portals/armci.$(OBJEXT) -rm -f src-portals/armci.lo -rm -f src-portals/armci_portals.$(OBJEXT) -rm -f src-portals/armci_portals.lo -rm -f src-portals/buffers.$(OBJEXT) -rm -f src-portals/buffers.lo -rm -f src-portals/caccumulate.$(OBJEXT) -rm -f src-portals/caccumulate.lo -rm -f src-portals/ccopy.$(OBJEXT) -rm -f src-portals/ccopy.lo -rm -f src-portals/clusterinfo.$(OBJEXT) -rm -f src-portals/clusterinfo.lo -rm -f src-portals/ds-shared.$(OBJEXT) -rm -f src-portals/ds-shared.lo -rm -f src-portals/fence.$(OBJEXT) -rm -f src-portals/fence.lo -rm -f src-portals/gpc.$(OBJEXT) -rm -f src-portals/gpc.lo -rm -f src-portals/groups.$(OBJEXT) -rm -f src-portals/groups.lo -rm -f src-portals/kr_malloc.$(OBJEXT) -rm -f src-portals/kr_malloc.lo -rm -f src-portals/locks.$(OBJEXT) -rm -f src-portals/locks.lo -rm -f src-portals/memlock.$(OBJEXT) -rm -f src-portals/memlock.lo -rm -f src-portals/memory.$(OBJEXT) -rm -f src-portals/memory.lo -rm -f src-portals/message.$(OBJEXT) -rm -f src-portals/message.lo -rm -f src-portals/mutex.$(OBJEXT) -rm -f src-portals/mutex.lo -rm -f src-portals/new_memory.$(OBJEXT) -rm -f src-portals/new_memory.lo -rm -f src-portals/pack.$(OBJEXT) -rm -f src-portals/pack.lo -rm -f src-portals/portals.$(OBJEXT) -rm -f src-portals/portals.lo -rm -f src-portals/portals_cp.$(OBJEXT) -rm -f src-portals/portals_cp.lo -rm -f src-portals/portals_ds.$(OBJEXT) -rm -f src-portals/portals_ds.lo -rm -f src-portals/request.$(OBJEXT) -rm -f src-portals/request.lo -rm -f src-portals/rmw.$(OBJEXT) -rm -f src-portals/rmw.lo -rm -f src-portals/rtinfo.$(OBJEXT) -rm -f src-portals/rtinfo.lo -rm -f src-portals/semaphores.$(OBJEXT) -rm -f src-portals/semaphores.lo -rm -f src-portals/shmem.$(OBJEXT) -rm -f src-portals/shmem.lo -rm -f src-portals/shmlimit.$(OBJEXT) -rm -f src-portals/shmlimit.lo -rm -f src-portals/signaltrap.$(OBJEXT) -rm -f src-portals/signaltrap.lo -rm -f src-portals/spawn.$(OBJEXT) -rm -f src-portals/spawn.lo -rm -f src-portals/strided.$(OBJEXT) -rm -f src-portals/strided.lo -rm -f src-portals/threads.$(OBJEXT) -rm -f src-portals/threads.lo -rm -f src-portals/utils.$(OBJEXT) -rm -f src-portals/utils.lo -rm -f src-portals/vector.$(OBJEXT) -rm -f src-portals/vector.lo -rm -f src/collectives/message.$(OBJEXT) -rm -f src/collectives/message.lo -rm -f src/common/aggregate.$(OBJEXT) -rm -f src/common/aggregate.lo -rm -f src/common/armci.$(OBJEXT) -rm -f src/common/armci.lo -rm -f src/common/async.$(OBJEXT) -rm -f src/common/async.lo -rm -f src/common/capi.$(OBJEXT) -rm -f src/common/capi.lo -rm -f src/common/ccopy.$(OBJEXT) -rm -f src/common/ccopy.lo -rm -f src/common/clusterinfo.$(OBJEXT) -rm -f src/common/clusterinfo.lo -rm -f src/common/ds-shared.$(OBJEXT) -rm -f src/common/ds-shared.lo -rm -f src/common/gpc.$(OBJEXT) -rm -f src/common/gpc.lo -rm -f src/common/groups.$(OBJEXT) -rm -f src/common/groups.lo -rm -f src/common/iterator.$(OBJEXT) -rm -f src/common/iterator.lo -rm -f src/common/noncont.$(OBJEXT) -rm -f src/common/noncont.lo -rm -f src/common/pack.$(OBJEXT) -rm -f src/common/pack.lo -rm -f src/common/regions.$(OBJEXT) -rm -f src/common/regions.lo -rm -f src/common/request.$(OBJEXT) -rm -f src/common/request.lo -rm -f src/common/signaltrap.$(OBJEXT) -rm -f src/common/signaltrap.lo -rm -f src/common/spawn.$(OBJEXT) -rm -f src/common/spawn.lo -rm -f src/common/utils.$(OBJEXT) -rm -f src/common/utils.lo -rm -f src/devices/bgml/bgml.$(OBJEXT) -rm -f src/devices/bgml/bgml.lo -rm -f src/devices/dcmf/dcmf-0.2.0/armcix_acc.$(OBJEXT) -rm -f src/devices/dcmf/dcmf-0.2.0/armcix_acc.lo -rm -f src/devices/dcmf/dcmf-0.2.0/armcix_fence.$(OBJEXT) -rm -f src/devices/dcmf/dcmf-0.2.0/armcix_fence.lo -rm -f src/devices/dcmf/dcmf-0.2.0/armcix_get.$(OBJEXT) -rm -f src/devices/dcmf/dcmf-0.2.0/armcix_get.lo -rm -f src/devices/dcmf/dcmf-0.2.0/armcix_impl.$(OBJEXT) -rm -f src/devices/dcmf/dcmf-0.2.0/armcix_impl.lo -rm -f src/devices/dcmf/dcmf-0.2.0/armcix_lock.$(OBJEXT) -rm -f src/devices/dcmf/dcmf-0.2.0/armcix_lock.lo -rm -f src/devices/dcmf/dcmf-0.2.0/armcix_put.$(OBJEXT) -rm -f src/devices/dcmf/dcmf-0.2.0/armcix_put.lo -rm -f src/devices/dcmf/dcmf-0.2.0/armcix_rmw.$(OBJEXT) -rm -f src/devices/dcmf/dcmf-0.2.0/armcix_rmw.lo -rm -f src/devices/dcmf/dcmf-0.2.0/armcix_wait.$(OBJEXT) -rm -f src/devices/dcmf/dcmf-0.2.0/armcix_wait.lo -rm -f src/devices/dcmf/dcmf-0.3.0/armcix_acc.$(OBJEXT) -rm -f src/devices/dcmf/dcmf-0.3.0/armcix_acc.lo -rm -f src/devices/dcmf/dcmf-0.3.0/armcix_fence.$(OBJEXT) -rm -f src/devices/dcmf/dcmf-0.3.0/armcix_fence.lo -rm -f src/devices/dcmf/dcmf-0.3.0/armcix_get.$(OBJEXT) -rm -f src/devices/dcmf/dcmf-0.3.0/armcix_get.lo -rm -f src/devices/dcmf/dcmf-0.3.0/armcix_impl.$(OBJEXT) -rm -f src/devices/dcmf/dcmf-0.3.0/armcix_impl.lo -rm -f src/devices/dcmf/dcmf-0.3.0/armcix_lock.$(OBJEXT) -rm -f src/devices/dcmf/dcmf-0.3.0/armcix_lock.lo -rm -f src/devices/dcmf/dcmf-0.3.0/armcix_put.$(OBJEXT) -rm -f src/devices/dcmf/dcmf-0.3.0/armcix_put.lo -rm -f src/devices/dcmf/dcmf-0.3.0/armcix_rmw.$(OBJEXT) -rm -f src/devices/dcmf/dcmf-0.3.0/armcix_rmw.lo -rm -f src/devices/dcmf/dcmf-0.3.0/armcix_wait.$(OBJEXT) -rm -f src/devices/dcmf/dcmf-0.3.0/armcix_wait.lo -rm -f src/devices/dcmf/dcmf2/armcix_acc.$(OBJEXT) -rm -f src/devices/dcmf/dcmf2/armcix_acc.lo -rm -f src/devices/dcmf/dcmf2/armcix_fence.$(OBJEXT) -rm -f src/devices/dcmf/dcmf2/armcix_fence.lo -rm -f src/devices/dcmf/dcmf2/armcix_get.$(OBJEXT) -rm -f src/devices/dcmf/dcmf2/armcix_get.lo -rm -f src/devices/dcmf/dcmf2/armcix_impl.$(OBJEXT) -rm -f src/devices/dcmf/dcmf2/armcix_impl.lo -rm -f src/devices/dcmf/dcmf2/armcix_lock.$(OBJEXT) -rm -f src/devices/dcmf/dcmf2/armcix_lock.lo -rm -f src/devices/dcmf/dcmf2/armcix_put.$(OBJEXT) -rm -f src/devices/dcmf/dcmf2/armcix_put.lo -rm -f src/devices/dcmf/dcmf2/armcix_rmw.$(OBJEXT) -rm -f src/devices/dcmf/dcmf2/armcix_rmw.lo -rm -f src/devices/dcmf/dcmf2/armcix_wait.$(OBJEXT) -rm -f src/devices/dcmf/dcmf2/armcix_wait.lo -rm -f src/devices/lapi/lapi.$(OBJEXT) -rm -f src/devices/lapi/lapi.lo -rm -f src/devices/mpi-mt/mpi2_client.$(OBJEXT) -rm -f src/devices/mpi-mt/mpi2_client.lo -rm -f src/devices/mpi-mt/mpi2_server.$(OBJEXT) -rm -f src/devices/mpi-mt/mpi2_server.lo -rm -f src/devices/mpi-spawn/mpi2_client.$(OBJEXT) -rm -f src/devices/mpi-spawn/mpi2_client.lo -rm -f src/devices/mpi-spawn/mpi2_server.$(OBJEXT) -rm -f src/devices/mpi-spawn/mpi2_server.lo -rm -f src/devices/openib/cbuf.$(OBJEXT) -rm -f src/devices/openib/cbuf.lo -rm -f src/devices/openib/openib.$(OBJEXT) -rm -f src/devices/openib/openib.lo -rm -f src/devices/openib/pendbufs.$(OBJEXT) -rm -f src/devices/openib/pendbufs.lo -rm -f src/devices/openib/rtinfo.$(OBJEXT) -rm -f src/devices/openib/rtinfo.lo -rm -f src/devices/sockets/dataserv.$(OBJEXT) -rm -f src/devices/sockets/dataserv.lo -rm -f src/devices/sockets/sockets.$(OBJEXT) -rm -f src/devices/sockets/sockets.lo -rm -f src/ft/armci_chkpt.$(OBJEXT) -rm -f src/ft/armci_chkpt.lo -rm -f src/ft/armci_storage.$(OBJEXT) -rm -f src/ft/armci_storage.lo -rm -f src/locks/locks.$(OBJEXT) -rm -f src/locks/locks.lo -rm -f src/locks/memlock.$(OBJEXT) -rm -f src/locks/memlock.lo -rm -f src/locks/mutex.$(OBJEXT) -rm -f src/locks/mutex.lo -rm -f src/locks/semaphores.$(OBJEXT) -rm -f src/locks/semaphores.lo -rm -f src/locks/tas-sx.$(OBJEXT) -rm -f src/locks/tas-sx.lo -rm -f src/memory/buffers.$(OBJEXT) -rm -f src/memory/buffers.lo -rm -f src/memory/kr_malloc.$(OBJEXT) -rm -f src/memory/kr_malloc.lo -rm -f src/memory/memory.$(OBJEXT) -rm -f src/memory/memory.lo -rm -f src/memory/shmalloc.$(OBJEXT) -rm -f src/memory/shmalloc.lo -rm -f src/memory/shmem.$(OBJEXT) -rm -f src/memory/shmem.lo -rm -f src/memory/shmlimit.$(OBJEXT) -rm -f src/memory/shmlimit.lo -rm -f src/memory/winshmem.$(OBJEXT) -rm -f src/memory/winshmem.lo -rm -f src/progress/fence.$(OBJEXT) -rm -f src/progress/fence.lo -rm -f src/progress/wait.$(OBJEXT) -rm -f src/progress/wait.lo -rm -f src/util/threads.$(OBJEXT) -rm -f src/util/threads.lo -rm -f src/xfer/caccumulate.$(OBJEXT) -rm -f src/xfer/caccumulate.lo -rm -f src/xfer/rmw.$(OBJEXT) -rm -f src/xfer/rmw.lo -rm -f src/xfer/strided.$(OBJEXT) -rm -f src/xfer/strided.lo -rm -f src/xfer/vector.$(OBJEXT) -rm -f src/xfer/vector.lo -rm -f tcgmsg/ipcv4.0/brdcst.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/brdcst.lo -rm -f tcgmsg/ipcv4.0/checkbyte.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/checkbyte.lo -rm -f tcgmsg/ipcv4.0/cluster.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/cluster.lo -rm -f tcgmsg/ipcv4.0/drand48.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/drand48.lo -rm -f tcgmsg/ipcv4.0/error.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/error.lo -rm -f tcgmsg/ipcv4.0/evlog.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/evlog.lo -rm -f tcgmsg/ipcv4.0/evon.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/evon.lo -rm -f tcgmsg/ipcv4.0/globalop.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/globalop.lo -rm -f tcgmsg/ipcv4.0/llog.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/llog.lo -rm -f tcgmsg/ipcv4.0/mdtob.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/mdtob.lo -rm -f tcgmsg/ipcv4.0/mdtoi.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/mdtoi.lo -rm -f tcgmsg/ipcv4.0/mitob.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/mitob.lo -rm -f tcgmsg/ipcv4.0/mitod.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/mitod.lo -rm -f tcgmsg/ipcv4.0/mtime.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/mtime.lo -rm -f tcgmsg/ipcv4.0/niceftn.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/niceftn.lo -rm -f tcgmsg/ipcv4.0/nnodes.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/nnodes.lo -rm -f tcgmsg/ipcv4.0/nodeid.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/nodeid.lo -rm -f tcgmsg/ipcv4.0/nxtval.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/nxtval.lo -rm -f tcgmsg/ipcv4.0/parallel.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/pbegin.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/pbegin.lo -rm -f tcgmsg/ipcv4.0/pbeginf.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/pbeginf.lo -rm -f tcgmsg/ipcv4.0/pfilecopy.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/pfilecopy.lo -rm -f tcgmsg/ipcv4.0/sema.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/sema.lo -rm -f tcgmsg/ipcv4.0/setdbg.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/setdbg.lo -rm -f tcgmsg/ipcv4.0/shmem.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/shmem.lo -rm -f tcgmsg/ipcv4.0/signals.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/signals.lo -rm -f tcgmsg/ipcv4.0/snd.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/snd.lo -rm -f tcgmsg/ipcv4.0/sockets.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/sockets.lo -rm -f tcgmsg/ipcv4.0/srmover.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/srmover.lo -rm -f tcgmsg/ipcv4.0/stats.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/stats.lo -rm -f tcgmsg/ipcv4.0/synch.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/synch.lo -rm -f tcgmsg/ipcv4.0/usleep.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/usleep.lo -rm -f tcgmsg/ipcv4.0/waitall.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/waitall.lo -rm -f tcgmsg/ipcv4.0/waitcom.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/waitcom.lo -rm -f tcgmsg/ipcv4.0/xdrstuff.$(OBJEXT) -rm -f tcgmsg/ipcv4.0/xdrstuff.lo -rm -f tcgmsg/ipcv5.0/async_send.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/async_send.lo -rm -f tcgmsg/ipcv5.0/async_send_lapi.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/async_send_lapi.lo -rm -f tcgmsg/ipcv5.0/busy.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/busy.lo -rm -f tcgmsg/ipcv5.0/drand48.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/drand48.lo -rm -f tcgmsg/ipcv5.0/error.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/error.lo -rm -f tcgmsg/ipcv5.0/globalop.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/globalop.lo -rm -f tcgmsg/ipcv5.0/lapi_putget.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/lapi_putget.lo -rm -f tcgmsg/ipcv5.0/llog.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/llog.lo -rm -f tcgmsg/ipcv5.0/mdtob.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/mdtob.lo -rm -f tcgmsg/ipcv5.0/mdtoi.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/mdtoi.lo -rm -f tcgmsg/ipcv5.0/misc.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/misc.lo -rm -f tcgmsg/ipcv5.0/mitob.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/mitob.lo -rm -f tcgmsg/ipcv5.0/mitod.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/mitod.lo -rm -f tcgmsg/ipcv5.0/mtime.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/mtime.lo -rm -f tcgmsg/ipcv5.0/niceftn.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/niceftn.lo -rm -f tcgmsg/ipcv5.0/nnodes.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/nnodes.lo -rm -f tcgmsg/ipcv5.0/nodeid.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/nodeid.lo -rm -f tcgmsg/ipcv5.0/nxtval.shm.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/nxtval.shm.lo -rm -f tcgmsg/ipcv5.0/pbegin.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/pbegin.lo -rm -f tcgmsg/ipcv5.0/pbeginf.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/pbeginf.lo -rm -f tcgmsg/ipcv5.0/pfilecopy.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/pfilecopy.lo -rm -f tcgmsg/ipcv5.0/queues.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/queues.lo -rm -f tcgmsg/ipcv5.0/shmem.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/shmem.lo -rm -f tcgmsg/ipcv5.0/signals.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/signals.lo -rm -f tcgmsg/ipcv5.0/snd_rcv_probe.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/snd_rcv_probe.lo -rm -f tcgmsg/ipcv5.0/synch.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/synch.lo -rm -f tcgmsg/ipcv5.0/usleep.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/usleep.lo -rm -f tcgmsg/ipcv5.0/waitall.$(OBJEXT) -rm -f tcgmsg/ipcv5.0/waitall.lo -rm -f testing/clone.$(OBJEXT) -rm -f testing/fork.$(OBJEXT) -rm -f testing/fttest.$(OBJEXT) -rm -f testing/gpctest.$(OBJEXT) -rm -f testing/ipctest.$(OBJEXT) -rm -f testing/msgcheck.$(OBJEXT) -rm -f testing/origptl.$(OBJEXT) -rm -f testing/perf.$(OBJEXT) -rm -f testing/perf2.$(OBJEXT) -rm -f testing/perf_aggr.$(OBJEXT) -rm -f testing/perf_nb.$(OBJEXT) -rm -f testing/ptltest.$(OBJEXT) -rm -f testing/rpl_armci_msg_finalize.$(OBJEXT) -rm -f testing/rpl_armci_msg_init.$(OBJEXT) -rm -f testing/shmclean.$(OBJEXT) -rm -f testing/shmtest.$(OBJEXT) -rm -f testing/simple.$(OBJEXT) -rm -f testing/simplelock.$(OBJEXT) -rm -f testing/te.$(OBJEXT) -rm -f testing/test.$(OBJEXT) -rm -f testing/test2.$(OBJEXT) -rm -f testing/test_groups.$(OBJEXT) -rm -f testing/test_mt.$(OBJEXT) -rm -f testing/testing_testitr-rpl_armci_msg_finalize.$(OBJEXT) -rm -f testing/testing_testitr-rpl_armci_msg_init.$(OBJEXT) -rm -f testing/testing_testitr-testitr.$(OBJEXT) -rm -f testing/testnotify.$(OBJEXT) -rm -f tools/armci_prof.$(OBJEXT) -rm -f tools/armci_prof.lo distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/RandomAccess/$(DEPDIR)/timing.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/RandomAccess/simple/$(DEPDIR)/simple.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/RandomAccess/smp_bucket/$(DEPDIR)/smp_bucket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/cg/armci_sharedmemory/$(DEPDIR)/cg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/cg/armci_sharedmemory/$(DEPDIR)/compute.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/cg/armci_sharedmemory/$(DEPDIR)/read_input.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/cg/armci_sharedmemory/$(DEPDIR)/timing.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/lu/armci_blocking/$(DEPDIR)/lu-b-bc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/lu/armci_blocking/$(DEPDIR)/lu-block.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/lu/armci_blocking/$(DEPDIR)/lu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/lu/armci_blocking/$(DEPDIR)/timing.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/lu/armci_multithreaded/$(DEPDIR)/lu-block-th.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/lu/armci_multithreaded/$(DEPDIR)/timing.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/lu/armci_nonblocking/$(DEPDIR)/lu_nb_get.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/lu/armci_nonblocking/$(DEPDIR)/lu_nb_put.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/lu/armci_nonblocking/$(DEPDIR)/timing.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/lu/pthreads/$(DEPDIR)/barrier.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/lu/pthreads/$(DEPDIR)/lu-thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/benchmarks/lu/pthreads/$(DEPDIR)/timing.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/features/aggregation/simple/$(DEPDIR)/simple.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/features/aggregation/sparse_matvecmul/$(DEPDIR)/sparse_matvecmul.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/features/concurrency/multidma/$(DEPDIR)/multidma.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/features/concurrency/simple/$(DEPDIR)/comdegree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/features/gpc/hashtable/$(DEPDIR)/DistHashmap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/features/gpc/hashtable/$(DEPDIR)/GPCHashmap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/features/gpc/hashtable/$(DEPDIR)/GPCHashmapHandler.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/features/gpc/hashtable/$(DEPDIR)/HashFunctions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/features/gpc/hashtable/$(DEPDIR)/HashUtil.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/features/gpc/hashtable/$(DEPDIR)/test_hashtable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/features/non-blocking/overlap/$(DEPDIR)/overlap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/features/non-blocking/simple/$(DEPDIR)/simple.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/features/notification/simple/$(DEPDIR)/testnotify.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/features/proc_affinity/computation_impact/$(DEPDIR)/computation_impact.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/features/proc_affinity/simple/$(DEPDIR)/simple.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/features/symmetric_memory/simple/$(DEPDIR)/simple.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/simpleApps/$(DEPDIR)/transp1D-c.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/aggregate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/armci-onesided.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/armci.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/buffers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/caccumulate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/ccopy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/clusterinfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/ds-shared.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/fence.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/gpc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/groups.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/kr_malloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/locks.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/memlock.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/memory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/message.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/mutex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/pack.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/request.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/rmw.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/rtinfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/semaphores.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/shmem.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/shmlimit.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/signaltrap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/spawn.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/strided.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/threads.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-gemini/$(DEPDIR)/vector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/aggregate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/armci.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/armci_portals.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/buffers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/caccumulate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/ccopy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/clusterinfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/ds-shared.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/fence.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/gpc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/groups.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/kr_malloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/locks.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/memlock.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/memory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/message.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/mutex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/new_memory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/pack.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/portals.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/portals_cp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/portals_ds.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/request.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/rmw.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/rtinfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/semaphores.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/shmem.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/shmlimit.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/signaltrap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/spawn.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/strided.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/threads.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals/$(DEPDIR)/vector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/collectives/$(DEPDIR)/message.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/aggregate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/armci.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/async.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/capi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/ccopy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/clusterinfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/ds-shared.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/gpc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/groups.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/iterator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/noncont.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/pack.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/regions.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/request.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/signaltrap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/spawn.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/bgml/$(DEPDIR)/bgml.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/armcix_acc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/armcix_fence.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/armcix_get.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/armcix_impl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/armcix_lock.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/armcix_put.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/armcix_rmw.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/armcix_wait.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/armcix_acc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/armcix_fence.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/armcix_get.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/armcix_impl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/armcix_lock.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/armcix_put.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/armcix_rmw.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/armcix_wait.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf2/$(DEPDIR)/armcix_acc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf2/$(DEPDIR)/armcix_fence.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf2/$(DEPDIR)/armcix_get.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf2/$(DEPDIR)/armcix_impl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf2/$(DEPDIR)/armcix_lock.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf2/$(DEPDIR)/armcix_put.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf2/$(DEPDIR)/armcix_rmw.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/dcmf/dcmf2/$(DEPDIR)/armcix_wait.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/lapi/$(DEPDIR)/lapi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/mpi-mt/$(DEPDIR)/mpi2_client.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/mpi-mt/$(DEPDIR)/mpi2_server.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/mpi-spawn/$(DEPDIR)/mpi2_client.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/mpi-spawn/$(DEPDIR)/mpi2_server.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/openib/$(DEPDIR)/cbuf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/openib/$(DEPDIR)/openib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/openib/$(DEPDIR)/pendbufs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/openib/$(DEPDIR)/rtinfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/sockets/$(DEPDIR)/dataserv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/devices/sockets/$(DEPDIR)/sockets.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/ft/$(DEPDIR)/armci_chkpt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/ft/$(DEPDIR)/armci_storage.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/locks/$(DEPDIR)/locks.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/locks/$(DEPDIR)/memlock.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/locks/$(DEPDIR)/mutex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/locks/$(DEPDIR)/semaphores.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/memory/$(DEPDIR)/buffers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/memory/$(DEPDIR)/kr_malloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/memory/$(DEPDIR)/memory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/memory/$(DEPDIR)/shmalloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/memory/$(DEPDIR)/shmem.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/memory/$(DEPDIR)/shmlimit.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/memory/$(DEPDIR)/winshmem.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/progress/$(DEPDIR)/fence.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/progress/$(DEPDIR)/wait.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/util/$(DEPDIR)/threads.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/xfer/$(DEPDIR)/caccumulate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/xfer/$(DEPDIR)/rmw.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/xfer/$(DEPDIR)/strided.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/xfer/$(DEPDIR)/vector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/brdcst.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/checkbyte.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/cluster.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/drand48.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/evlog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/evon.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/globalop.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/llog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/mdtob.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/mdtoi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/mitob.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/mitod.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/mtime.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/niceftn.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/nnodes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/nodeid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/nxtval.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/parallel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/pbegin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/pbeginf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/pfilecopy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/sema.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/setdbg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/shmem.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/signals.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/snd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/sockets.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/srmover.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/stats.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/synch.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/usleep.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/waitall.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/waitcom.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv4.0/$(DEPDIR)/xdrstuff.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/async_send.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/async_send_lapi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/busy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/drand48.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/globalop.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/lapi_putget.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/llog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/mdtob.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/mdtoi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/misc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/mitob.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/mitod.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/mtime.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/niceftn.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/nnodes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/nodeid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/nxtval.shm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/pbegin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/pbeginf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/pfilecopy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/queues.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/shmem.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/signals.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/snd_rcv_probe.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/synch.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/usleep.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/ipcv5.0/$(DEPDIR)/waitall.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/clone.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/fork.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/fttest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/gpctest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/ipctest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/msgcheck.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/origptl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/perf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/perf2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/perf_aggr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/perf_nb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/ptltest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/rpl_armci_msg_finalize.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/rpl_armci_msg_init.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/shmclean.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/shmtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/simple.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/simplelock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/te.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/test2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/test_groups.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/test_mt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/testing_testitr-rpl_armci_msg_finalize.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/testing_testitr-rpl_armci_msg_init.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/testing_testitr-testitr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/testnotify.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tools/$(DEPDIR)/armci_prof.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< testing/testing_testitr-testitr.o: testing/testitr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testing_testitr_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testing/testing_testitr-testitr.o -MD -MP -MF testing/$(DEPDIR)/testing_testitr-testitr.Tpo -c -o testing/testing_testitr-testitr.o `test -f 'testing/testitr.c' || echo '$(srcdir)/'`testing/testitr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testing/$(DEPDIR)/testing_testitr-testitr.Tpo testing/$(DEPDIR)/testing_testitr-testitr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testing/testitr.c' object='testing/testing_testitr-testitr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testing_testitr_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testing/testing_testitr-testitr.o `test -f 'testing/testitr.c' || echo '$(srcdir)/'`testing/testitr.c testing/testing_testitr-testitr.obj: testing/testitr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testing_testitr_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testing/testing_testitr-testitr.obj -MD -MP -MF testing/$(DEPDIR)/testing_testitr-testitr.Tpo -c -o testing/testing_testitr-testitr.obj `if test -f 'testing/testitr.c'; then $(CYGPATH_W) 'testing/testitr.c'; else $(CYGPATH_W) '$(srcdir)/testing/testitr.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testing/$(DEPDIR)/testing_testitr-testitr.Tpo testing/$(DEPDIR)/testing_testitr-testitr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testing/testitr.c' object='testing/testing_testitr-testitr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testing_testitr_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testing/testing_testitr-testitr.obj `if test -f 'testing/testitr.c'; then $(CYGPATH_W) 'testing/testitr.c'; else $(CYGPATH_W) '$(srcdir)/testing/testitr.c'; fi` testing/testing_testitr-rpl_armci_msg_init.o: testing/rpl_armci_msg_init.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testing_testitr_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testing/testing_testitr-rpl_armci_msg_init.o -MD -MP -MF testing/$(DEPDIR)/testing_testitr-rpl_armci_msg_init.Tpo -c -o testing/testing_testitr-rpl_armci_msg_init.o `test -f 'testing/rpl_armci_msg_init.c' || echo '$(srcdir)/'`testing/rpl_armci_msg_init.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testing/$(DEPDIR)/testing_testitr-rpl_armci_msg_init.Tpo testing/$(DEPDIR)/testing_testitr-rpl_armci_msg_init.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testing/rpl_armci_msg_init.c' object='testing/testing_testitr-rpl_armci_msg_init.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testing_testitr_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testing/testing_testitr-rpl_armci_msg_init.o `test -f 'testing/rpl_armci_msg_init.c' || echo '$(srcdir)/'`testing/rpl_armci_msg_init.c testing/testing_testitr-rpl_armci_msg_init.obj: testing/rpl_armci_msg_init.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testing_testitr_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testing/testing_testitr-rpl_armci_msg_init.obj -MD -MP -MF testing/$(DEPDIR)/testing_testitr-rpl_armci_msg_init.Tpo -c -o testing/testing_testitr-rpl_armci_msg_init.obj `if test -f 'testing/rpl_armci_msg_init.c'; then $(CYGPATH_W) 'testing/rpl_armci_msg_init.c'; else $(CYGPATH_W) '$(srcdir)/testing/rpl_armci_msg_init.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testing/$(DEPDIR)/testing_testitr-rpl_armci_msg_init.Tpo testing/$(DEPDIR)/testing_testitr-rpl_armci_msg_init.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testing/rpl_armci_msg_init.c' object='testing/testing_testitr-rpl_armci_msg_init.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testing_testitr_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testing/testing_testitr-rpl_armci_msg_init.obj `if test -f 'testing/rpl_armci_msg_init.c'; then $(CYGPATH_W) 'testing/rpl_armci_msg_init.c'; else $(CYGPATH_W) '$(srcdir)/testing/rpl_armci_msg_init.c'; fi` testing/testing_testitr-rpl_armci_msg_finalize.o: testing/rpl_armci_msg_finalize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testing_testitr_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testing/testing_testitr-rpl_armci_msg_finalize.o -MD -MP -MF testing/$(DEPDIR)/testing_testitr-rpl_armci_msg_finalize.Tpo -c -o testing/testing_testitr-rpl_armci_msg_finalize.o `test -f 'testing/rpl_armci_msg_finalize.c' || echo '$(srcdir)/'`testing/rpl_armci_msg_finalize.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testing/$(DEPDIR)/testing_testitr-rpl_armci_msg_finalize.Tpo testing/$(DEPDIR)/testing_testitr-rpl_armci_msg_finalize.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testing/rpl_armci_msg_finalize.c' object='testing/testing_testitr-rpl_armci_msg_finalize.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testing_testitr_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testing/testing_testitr-rpl_armci_msg_finalize.o `test -f 'testing/rpl_armci_msg_finalize.c' || echo '$(srcdir)/'`testing/rpl_armci_msg_finalize.c testing/testing_testitr-rpl_armci_msg_finalize.obj: testing/rpl_armci_msg_finalize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testing_testitr_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testing/testing_testitr-rpl_armci_msg_finalize.obj -MD -MP -MF testing/$(DEPDIR)/testing_testitr-rpl_armci_msg_finalize.Tpo -c -o testing/testing_testitr-rpl_armci_msg_finalize.obj `if test -f 'testing/rpl_armci_msg_finalize.c'; then $(CYGPATH_W) 'testing/rpl_armci_msg_finalize.c'; else $(CYGPATH_W) '$(srcdir)/testing/rpl_armci_msg_finalize.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) testing/$(DEPDIR)/testing_testitr-rpl_armci_msg_finalize.Tpo testing/$(DEPDIR)/testing_testitr-rpl_armci_msg_finalize.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testing/rpl_armci_msg_finalize.c' object='testing/testing_testitr-rpl_armci_msg_finalize.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testing_testitr_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testing/testing_testitr-rpl_armci_msg_finalize.obj `if test -f 'testing/rpl_armci_msg_finalize.c'; then $(CYGPATH_W) 'testing/rpl_armci_msg_finalize.c'; else $(CYGPATH_W) '$(srcdir)/testing/rpl_armci_msg_finalize.c'; fi` .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< .s.o: $(AM_V_CCAS)$(CCASCOMPILE) -c -o $@ $< .s.obj: $(AM_V_CCAS)$(CCASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .s.lo: $(AM_V_CCAS)$(LTCCASCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf examples/benchmarks/RandomAccess/simple/.libs examples/benchmarks/RandomAccess/simple/_libs -rm -rf examples/benchmarks/RandomAccess/smp_bucket/.libs examples/benchmarks/RandomAccess/smp_bucket/_libs -rm -rf examples/benchmarks/cg/armci_sharedmemory/.libs examples/benchmarks/cg/armci_sharedmemory/_libs -rm -rf examples/benchmarks/lu/armci_blocking/.libs examples/benchmarks/lu/armci_blocking/_libs -rm -rf examples/benchmarks/lu/armci_multithreaded/.libs examples/benchmarks/lu/armci_multithreaded/_libs -rm -rf examples/benchmarks/lu/armci_nonblocking/.libs examples/benchmarks/lu/armci_nonblocking/_libs -rm -rf examples/benchmarks/lu/pthreads/.libs examples/benchmarks/lu/pthreads/_libs -rm -rf examples/features/aggregation/simple/.libs examples/features/aggregation/simple/_libs -rm -rf examples/features/aggregation/sparse_matvecmul/.libs examples/features/aggregation/sparse_matvecmul/_libs -rm -rf examples/features/concurrency/multidma/.libs examples/features/concurrency/multidma/_libs -rm -rf examples/features/concurrency/simple/.libs examples/features/concurrency/simple/_libs -rm -rf examples/features/gpc/hashtable/.libs examples/features/gpc/hashtable/_libs -rm -rf examples/features/non-blocking/overlap/.libs examples/features/non-blocking/overlap/_libs -rm -rf examples/features/non-blocking/simple/.libs examples/features/non-blocking/simple/_libs -rm -rf examples/features/notification/simple/.libs examples/features/notification/simple/_libs -rm -rf examples/features/proc_affinity/computation_impact/.libs examples/features/proc_affinity/computation_impact/_libs -rm -rf examples/features/proc_affinity/simple/.libs examples/features/proc_affinity/simple/_libs -rm -rf examples/features/symmetric_memory/simple/.libs examples/features/symmetric_memory/simple/_libs -rm -rf examples/simpleApps/.libs examples/simpleApps/_libs -rm -rf src-gemini/.libs src-gemini/_libs -rm -rf src-portals/.libs src-portals/_libs -rm -rf src/collectives/.libs src/collectives/_libs -rm -rf src/common/.libs src/common/_libs -rm -rf src/devices/bgml/.libs src/devices/bgml/_libs -rm -rf src/devices/dcmf/dcmf-0.2.0/.libs src/devices/dcmf/dcmf-0.2.0/_libs -rm -rf src/devices/dcmf/dcmf-0.3.0/.libs src/devices/dcmf/dcmf-0.3.0/_libs -rm -rf src/devices/dcmf/dcmf2/.libs src/devices/dcmf/dcmf2/_libs -rm -rf src/devices/lapi/.libs src/devices/lapi/_libs -rm -rf src/devices/mpi-mt/.libs src/devices/mpi-mt/_libs -rm -rf src/devices/mpi-spawn/.libs src/devices/mpi-spawn/_libs -rm -rf src/devices/openib/.libs src/devices/openib/_libs -rm -rf src/devices/sockets/.libs src/devices/sockets/_libs -rm -rf src/ft/.libs src/ft/_libs -rm -rf src/locks/.libs src/locks/_libs -rm -rf src/memory/.libs src/memory/_libs -rm -rf src/progress/.libs src/progress/_libs -rm -rf src/util/.libs src/util/_libs -rm -rf src/xfer/.libs src/xfer/_libs -rm -rf tcgmsg/ipcv4.0/.libs tcgmsg/ipcv4.0/_libs -rm -rf tcgmsg/ipcv5.0/.libs tcgmsg/ipcv5.0/_libs -rm -rf testing/.libs testing/_libs -rm -rf tools/.libs tools/_libs distclean-libtool: -rm -f libtool config.lt install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__sh_e_setup); \ list='$(TEST_LOGS)'; \ results=`for f in $$list; do \ test -r $$f && read line < $$f && echo "$$line" \ || echo FAIL; \ done`; \ all=`echo "$$results" | sed '/^$$/d' | wc -l | sed -e 's/^[ ]*//'`; \ fail=`echo "$$results" | grep -c '^FAIL'`; \ pass=`echo "$$results" | grep -c '^PASS'`; \ skip=`echo "$$results" | grep -c '^SKIP'`; \ xfail=`echo "$$results" | grep -c '^XFAIL'`; \ xpass=`echo "$$results" | grep -c '^XPASS'`; \ failures=`expr $$fail + $$xpass`; \ all=`expr $$all - $$skip`; \ if test "$$all" -eq 1; then tests=test; All=; \ else tests=tests; All="All "; fi; \ case fail=$$fail:xpass=$$xpass:xfail=$$xfail in \ fail=0:xpass=0:xfail=0) \ msg="$$All$$all $$tests passed. "; \ exit=true;; \ fail=0:xpass=0:xfail=*) \ msg="$$All$$all $$tests behaved as expected"; \ if test "$$xfail" -eq 1; then xfailures=failure; \ else xfailures=failures; fi; \ msg="$$msg ($$xfail expected $$xfailures). "; \ exit=true;; \ fail=*:xpass=0:xfail=*) \ msg="$$fail of $$all $$tests failed. "; \ exit=false;; \ fail=*:xpass=*:xfail=*) \ msg="$$failures of $$all $$tests did not behave as expected"; \ if test "$$xpass" -eq 1; then xpasses=pass; \ else xpasses=passes; fi; \ msg="$$msg ($$xpass unexpected $$xpasses). "; \ exit=false;; \ *) \ echo >&2 "incorrect case"; exit 4;; \ esac; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ msg="$$msg($$skip test was not run). "; \ else \ msg="$$msg($$skip tests were not run). "; \ fi; \ fi; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ echo "$$msg"; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for f in $$list; do \ test -r $$f && read line < $$f || line=; \ case $$line in \ PASS:*|XFAIL:*);; \ *) echo; cat $$f;; \ esac; \ done; \ } >$(TEST_SUITE_LOG).tmp; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if test "$$failures" -ne 0; then \ msg="$${msg}See $(subdir)/$(TEST_SUITE_LOG). "; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ msg="$${msg}Please report to $(PACKAGE_BUGREPORT). "; \ fi; \ fi; \ test x"$$VERBOSE" = x || $$exit || cat $(TEST_SUITE_LOG); \ $(am__tty_colors); \ if $$exit; then \ col="$$grn"; \ else \ col="$$red"; \ fi; \ echo "$$msg" | $(am__text_box) "col=$$col" "std=$$std"; \ $$exit || exit 1 check-TESTS recheck: @if test $@ != recheck; then \ list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list; \ fi @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @list='' list2='$(TEST_LOGS)'; for f in $$list2; do \ test .log = $$f && continue; \ if test $@ = recheck; then \ test -f $$f || continue; \ if test -r $$f && read line < $$f; then \ case $$line in FAIL*|XPASS*) : ;; *) continue;; esac; \ fi; \ fi; \ if test -z "$$list"; then list=$$f; else list="$$list $$f"; fi; \ done; \ if test $@ = recheck && test -n "$$list"; then \ $(am__make_dryrun) || rm -f $$list || exit 1; \ fi; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$list" recheck: $(check_LTLIBRARIES) $(check_PROGRAMS) am--mostlyclean-test-html: list='$(TEST_LOGS:.log=.html)'; test -z "$$list" || rm -f $$list rm -f $(TEST_SUITE_HTML) .log.html: @list='$(RST2HTML) $$RST2HTML rst2html rst2html.py'; \ for r2h in $$list; do \ if ($$r2h --version) >/dev/null 2>&1; then \ R2H=$$r2h; \ fi; \ done; \ if test -z "$$R2H"; then \ echo >&2 "cannot find rst2html, cannot create $@"; \ exit 2; \ fi; \ $$R2H $< >$@.tmp @mv $@.tmp $@ # Be sure to run check first, and then to convert the result. # Beware of concurrent executions. Run "check" not "check-TESTS", as # check-SCRIPTS and other dependencies are rebuilt by the former only. # And expect check to fail. check-html recheck-html: @target=`echo $@ | sed 's/-html$$//'`; \ rv=0; $(MAKE) $(AM_MAKEFLAGS) $$target || rv=$$?; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML) TEST_LOGS= || exit 4; \ exit $$rv testing/testitr.log: testing/testitr$(EXEEXT) @p='testing/testitr$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/msgcheck.log: testing/msgcheck$(EXEEXT) @p='testing/msgcheck$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/perf.log: testing/perf$(EXEEXT) @p='testing/perf$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/perf_aggr.log: testing/perf_aggr$(EXEEXT) @p='testing/perf_aggr$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/simplelock.log: testing/simplelock$(EXEEXT) @p='testing/simplelock$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/test.log: testing/test$(EXEEXT) @p='testing/test$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/test2.log: testing/test2$(EXEEXT) @p='testing/test2$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/testnotify.log: testing/testnotify$(EXEEXT) @p='testing/testnotify$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/fttest.log: testing/fttest$(EXEEXT) @p='testing/fttest$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/gpctest.log: testing/gpctest$(EXEEXT) @p='testing/gpctest$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/simple.log: testing/simple$(EXEEXT) @p='testing/simple$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/test_groups.log: testing/test_groups$(EXEEXT) @p='testing/test_groups$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/test_mt.log: testing/test_mt$(EXEEXT) @p='testing/test_mt$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/benchmarks/lu/armci_blocking/lu-b-bc.log: examples/benchmarks/lu/armci_blocking/lu-b-bc$(EXEEXT) @p='examples/benchmarks/lu/armci_blocking/lu-b-bc$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/benchmarks/lu/armci_blocking/lu-block.log: examples/benchmarks/lu/armci_blocking/lu-block$(EXEEXT) @p='examples/benchmarks/lu/armci_blocking/lu-block$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/benchmarks/lu/armci_blocking/lu.log: examples/benchmarks/lu/armci_blocking/lu$(EXEEXT) @p='examples/benchmarks/lu/armci_blocking/lu$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/benchmarks/lu/armci_nonblocking/lu_nb_get.log: examples/benchmarks/lu/armci_nonblocking/lu_nb_get$(EXEEXT) @p='examples/benchmarks/lu/armci_nonblocking/lu_nb_get$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/benchmarks/lu/armci_nonblocking/lu_nb_put.log: examples/benchmarks/lu/armci_nonblocking/lu_nb_put$(EXEEXT) @p='examples/benchmarks/lu/armci_nonblocking/lu_nb_put$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/benchmarks/lu/pthreads/lu-thread.log: examples/benchmarks/lu/pthreads/lu-thread$(EXEEXT) @p='examples/benchmarks/lu/pthreads/lu-thread$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/features/aggregation/simple/simple.log: examples/features/aggregation/simple/simple$(EXEEXT) @p='examples/features/aggregation/simple/simple$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/features/non-blocking/simple/simple.log: examples/features/non-blocking/simple/simple$(EXEEXT) @p='examples/features/non-blocking/simple/simple$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/features/concurrency/simple/comdegree.log: examples/features/concurrency/simple/comdegree$(EXEEXT) @p='examples/features/concurrency/simple/comdegree$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/features/notification/simple/testnotify.log: examples/features/notification/simple/testnotify$(EXEEXT) @p='examples/features/notification/simple/testnotify$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/features/symmetric_memory/simple/simple.log: examples/features/symmetric_memory/simple/simple$(EXEEXT) @p='examples/features/symmetric_memory/simple/simple$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/simpleApps/transp1D-c.log: examples/simpleApps/transp1D-c$(EXEEXT) @p='examples/simpleApps/transp1D-c$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/features/gpc/hashtable/test_hashtable.log: examples/features/gpc/hashtable/test_hashtable$(EXEEXT) @p='examples/features/gpc/hashtable/test_hashtable$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/features/proc_affinity/computation_impact/computation_impact.log: examples/features/proc_affinity/computation_impact/computation_impact$(EXEEXT) @p='examples/features/proc_affinity/computation_impact/computation_impact$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/features/proc_affinity/simple/simple.log: examples/features/proc_affinity/simple/simple$(EXEEXT) @p='examples/features/proc_affinity/simple/simple$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/benchmarks/RandomAccess/simple/simple.log: examples/benchmarks/RandomAccess/simple/simple$(EXEEXT) @p='examples/benchmarks/RandomAccess/simple/simple$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/benchmarks/RandomAccess/smp_bucket/smp_bucket.log: examples/benchmarks/RandomAccess/smp_bucket/smp_bucket$(EXEEXT) @p='examples/benchmarks/RandomAccess/smp_bucket/smp_bucket$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/benchmarks/lu/armci_multithreaded/lu-block-th.log: examples/benchmarks/lu/armci_multithreaded/lu-block-th$(EXEEXT) @p='examples/benchmarks/lu/armci_multithreaded/lu-block-th$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) .test.log: @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) config.h install-binPROGRAMS: install-libLTLIBRARIES installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(LIBOBJS)" || rm -f $(LIBOBJS) -test -z "$(LTLIBOBJS)" || rm -f $(LTLIBOBJS) -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS_TMP)" || rm -f $(TEST_LOGS_TMP) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f examples/benchmarks/RandomAccess/$(DEPDIR)/$(am__dirstamp) -rm -f examples/benchmarks/RandomAccess/$(am__dirstamp) -rm -f examples/benchmarks/RandomAccess/simple/$(DEPDIR)/$(am__dirstamp) -rm -f examples/benchmarks/RandomAccess/simple/$(am__dirstamp) -rm -f examples/benchmarks/RandomAccess/smp_bucket/$(DEPDIR)/$(am__dirstamp) -rm -f examples/benchmarks/RandomAccess/smp_bucket/$(am__dirstamp) -rm -f examples/benchmarks/cg/armci_sharedmemory/$(DEPDIR)/$(am__dirstamp) -rm -f examples/benchmarks/cg/armci_sharedmemory/$(am__dirstamp) -rm -f examples/benchmarks/lu/armci_blocking/$(DEPDIR)/$(am__dirstamp) -rm -f examples/benchmarks/lu/armci_blocking/$(am__dirstamp) -rm -f examples/benchmarks/lu/armci_multithreaded/$(DEPDIR)/$(am__dirstamp) -rm -f examples/benchmarks/lu/armci_multithreaded/$(am__dirstamp) -rm -f examples/benchmarks/lu/armci_nonblocking/$(DEPDIR)/$(am__dirstamp) -rm -f examples/benchmarks/lu/armci_nonblocking/$(am__dirstamp) -rm -f examples/benchmarks/lu/pthreads/$(DEPDIR)/$(am__dirstamp) -rm -f examples/benchmarks/lu/pthreads/$(am__dirstamp) -rm -f examples/features/aggregation/simple/$(DEPDIR)/$(am__dirstamp) -rm -f examples/features/aggregation/simple/$(am__dirstamp) -rm -f examples/features/aggregation/sparse_matvecmul/$(DEPDIR)/$(am__dirstamp) -rm -f examples/features/aggregation/sparse_matvecmul/$(am__dirstamp) -rm -f examples/features/concurrency/multidma/$(DEPDIR)/$(am__dirstamp) -rm -f examples/features/concurrency/multidma/$(am__dirstamp) -rm -f examples/features/concurrency/simple/$(DEPDIR)/$(am__dirstamp) -rm -f examples/features/concurrency/simple/$(am__dirstamp) -rm -f examples/features/gpc/hashtable/$(DEPDIR)/$(am__dirstamp) -rm -f examples/features/gpc/hashtable/$(am__dirstamp) -rm -f examples/features/non-blocking/overlap/$(DEPDIR)/$(am__dirstamp) -rm -f examples/features/non-blocking/overlap/$(am__dirstamp) -rm -f examples/features/non-blocking/simple/$(DEPDIR)/$(am__dirstamp) -rm -f examples/features/non-blocking/simple/$(am__dirstamp) -rm -f examples/features/notification/simple/$(DEPDIR)/$(am__dirstamp) -rm -f examples/features/notification/simple/$(am__dirstamp) -rm -f examples/features/proc_affinity/computation_impact/$(DEPDIR)/$(am__dirstamp) -rm -f examples/features/proc_affinity/computation_impact/$(am__dirstamp) -rm -f examples/features/proc_affinity/simple/$(DEPDIR)/$(am__dirstamp) -rm -f examples/features/proc_affinity/simple/$(am__dirstamp) -rm -f examples/features/symmetric_memory/simple/$(DEPDIR)/$(am__dirstamp) -rm -f examples/features/symmetric_memory/simple/$(am__dirstamp) -rm -f examples/simpleApps/$(DEPDIR)/$(am__dirstamp) -rm -f examples/simpleApps/$(am__dirstamp) -rm -f src-gemini/$(DEPDIR)/$(am__dirstamp) -rm -f src-gemini/$(am__dirstamp) -rm -f src-portals/$(DEPDIR)/$(am__dirstamp) -rm -f src-portals/$(am__dirstamp) -rm -f src/collectives/$(DEPDIR)/$(am__dirstamp) -rm -f src/collectives/$(am__dirstamp) -rm -f src/common/$(DEPDIR)/$(am__dirstamp) -rm -f src/common/$(am__dirstamp) -rm -f src/devices/bgml/$(DEPDIR)/$(am__dirstamp) -rm -f src/devices/bgml/$(am__dirstamp) -rm -f src/devices/dcmf/dcmf-0.2.0/$(DEPDIR)/$(am__dirstamp) -rm -f src/devices/dcmf/dcmf-0.2.0/$(am__dirstamp) -rm -f src/devices/dcmf/dcmf-0.3.0/$(DEPDIR)/$(am__dirstamp) -rm -f src/devices/dcmf/dcmf-0.3.0/$(am__dirstamp) -rm -f src/devices/dcmf/dcmf2/$(DEPDIR)/$(am__dirstamp) -rm -f src/devices/dcmf/dcmf2/$(am__dirstamp) -rm -f src/devices/lapi/$(DEPDIR)/$(am__dirstamp) -rm -f src/devices/lapi/$(am__dirstamp) -rm -f src/devices/mpi-mt/$(DEPDIR)/$(am__dirstamp) -rm -f src/devices/mpi-mt/$(am__dirstamp) -rm -f src/devices/mpi-spawn/$(DEPDIR)/$(am__dirstamp) -rm -f src/devices/mpi-spawn/$(am__dirstamp) -rm -f src/devices/openib/$(DEPDIR)/$(am__dirstamp) -rm -f src/devices/openib/$(am__dirstamp) -rm -f src/devices/sockets/$(DEPDIR)/$(am__dirstamp) -rm -f src/devices/sockets/$(am__dirstamp) -rm -f src/ft/$(DEPDIR)/$(am__dirstamp) -rm -f src/ft/$(am__dirstamp) -rm -f src/locks/$(DEPDIR)/$(am__dirstamp) -rm -f src/locks/$(am__dirstamp) -rm -f src/memory/$(DEPDIR)/$(am__dirstamp) -rm -f src/memory/$(am__dirstamp) -rm -f src/progress/$(DEPDIR)/$(am__dirstamp) -rm -f src/progress/$(am__dirstamp) -rm -f src/util/$(DEPDIR)/$(am__dirstamp) -rm -f src/util/$(am__dirstamp) -rm -f src/xfer/$(DEPDIR)/$(am__dirstamp) -rm -f src/xfer/$(am__dirstamp) -rm -f tcgmsg/ipcv4.0/$(DEPDIR)/$(am__dirstamp) -rm -f tcgmsg/ipcv4.0/$(am__dirstamp) -rm -f tcgmsg/ipcv5.0/$(DEPDIR)/$(am__dirstamp) -rm -f tcgmsg/ipcv5.0/$(am__dirstamp) -rm -f testing/$(DEPDIR)/$(am__dirstamp) -rm -f testing/$(am__dirstamp) -rm -f tools/$(DEPDIR)/$(am__dirstamp) -rm -f tools/$(am__dirstamp) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) @MSG_COMMS_TCGMSG4_FALSE@clean-local: clean: clean-am clean-am: clean-binPROGRAMS clean-checkLTLIBRARIES clean-checkPROGRAMS \ clean-generic clean-libLTLIBRARIES clean-libtool clean-local \ mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf examples/benchmarks/RandomAccess/$(DEPDIR) examples/benchmarks/RandomAccess/simple/$(DEPDIR) examples/benchmarks/RandomAccess/smp_bucket/$(DEPDIR) examples/benchmarks/cg/armci_sharedmemory/$(DEPDIR) examples/benchmarks/lu/armci_blocking/$(DEPDIR) examples/benchmarks/lu/armci_multithreaded/$(DEPDIR) examples/benchmarks/lu/armci_nonblocking/$(DEPDIR) examples/benchmarks/lu/pthreads/$(DEPDIR) examples/features/aggregation/simple/$(DEPDIR) examples/features/aggregation/sparse_matvecmul/$(DEPDIR) examples/features/concurrency/multidma/$(DEPDIR) examples/features/concurrency/simple/$(DEPDIR) examples/features/gpc/hashtable/$(DEPDIR) examples/features/non-blocking/overlap/$(DEPDIR) examples/features/non-blocking/simple/$(DEPDIR) examples/features/notification/simple/$(DEPDIR) examples/features/proc_affinity/computation_impact/$(DEPDIR) examples/features/proc_affinity/simple/$(DEPDIR) examples/features/symmetric_memory/simple/$(DEPDIR) examples/simpleApps/$(DEPDIR) src-gemini/$(DEPDIR) src-portals/$(DEPDIR) src/collectives/$(DEPDIR) src/common/$(DEPDIR) src/devices/bgml/$(DEPDIR) src/devices/dcmf/dcmf-0.2.0/$(DEPDIR) src/devices/dcmf/dcmf-0.3.0/$(DEPDIR) src/devices/dcmf/dcmf2/$(DEPDIR) src/devices/lapi/$(DEPDIR) src/devices/mpi-mt/$(DEPDIR) src/devices/mpi-spawn/$(DEPDIR) src/devices/openib/$(DEPDIR) src/devices/sockets/$(DEPDIR) src/ft/$(DEPDIR) src/locks/$(DEPDIR) src/memory/$(DEPDIR) src/progress/$(DEPDIR) src/util/$(DEPDIR) src/xfer/$(DEPDIR) tcgmsg/ipcv4.0/$(DEPDIR) tcgmsg/ipcv5.0/$(DEPDIR) testing/$(DEPDIR) tools/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf examples/benchmarks/RandomAccess/$(DEPDIR) examples/benchmarks/RandomAccess/simple/$(DEPDIR) examples/benchmarks/RandomAccess/smp_bucket/$(DEPDIR) examples/benchmarks/cg/armci_sharedmemory/$(DEPDIR) examples/benchmarks/lu/armci_blocking/$(DEPDIR) examples/benchmarks/lu/armci_multithreaded/$(DEPDIR) examples/benchmarks/lu/armci_nonblocking/$(DEPDIR) examples/benchmarks/lu/pthreads/$(DEPDIR) examples/features/aggregation/simple/$(DEPDIR) examples/features/aggregation/sparse_matvecmul/$(DEPDIR) examples/features/concurrency/multidma/$(DEPDIR) examples/features/concurrency/simple/$(DEPDIR) examples/features/gpc/hashtable/$(DEPDIR) examples/features/non-blocking/overlap/$(DEPDIR) examples/features/non-blocking/simple/$(DEPDIR) examples/features/notification/simple/$(DEPDIR) examples/features/proc_affinity/computation_impact/$(DEPDIR) examples/features/proc_affinity/simple/$(DEPDIR) examples/features/symmetric_memory/simple/$(DEPDIR) examples/simpleApps/$(DEPDIR) src-gemini/$(DEPDIR) src-portals/$(DEPDIR) src/collectives/$(DEPDIR) src/common/$(DEPDIR) src/devices/bgml/$(DEPDIR) src/devices/dcmf/dcmf-0.2.0/$(DEPDIR) src/devices/dcmf/dcmf-0.3.0/$(DEPDIR) src/devices/dcmf/dcmf2/$(DEPDIR) src/devices/lapi/$(DEPDIR) src/devices/mpi-mt/$(DEPDIR) src/devices/mpi-spawn/$(DEPDIR) src/devices/openib/$(DEPDIR) src/devices/sockets/$(DEPDIR) src/ft/$(DEPDIR) src/locks/$(DEPDIR) src/memory/$(DEPDIR) src/progress/$(DEPDIR) src/util/$(DEPDIR) src/xfer/$(DEPDIR) tcgmsg/ipcv4.0/$(DEPDIR) tcgmsg/ipcv5.0/$(DEPDIR) testing/$(DEPDIR) tools/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: am--mostlyclean-test-html mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-includeHEADERS \ uninstall-libLTLIBRARIES .MAKE: all check check-am check-html install install-am install-strip \ recheck-html .PHONY: CTAGS GTAGS all all-am am--mostlyclean-test-html am--refresh \ check check-TESTS check-am check-html clean clean-binPROGRAMS \ clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \ clean-libLTLIBRARIES clean-libtool clean-local ctags dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-lzma dist-shar \ dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-includeHEADERS install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck recheck-html tags uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-includeHEADERS \ uninstall-libLTLIBRARIES .PHONY: flags flags: @echo ' =========================================================================== ' @echo ' Suggested compiler/linker options are as follows.' @echo ' ARMCI libraries are installed in $(libdir)' @echo ' ARMCI headers are installed in $(includedir)' @echo ' ' @echo ' CPPFLAGS="$(GA_MP_CPPFLAGS) $(ARMCI_NETWORK_CPPFLAGS) -I$(includedir)"' | $(SED_NORMALIZE_WHITESPACE) @echo ' ' @echo ' LDFLAGS="$(GA_MP_LDFLAGS) $(ARMCI_NETWORK_LDFLAGS) -L$(libdir)"' | $(SED_NORMALIZE_WHITESPACE) @echo ' ' @echo ' For C/C++ Programs: ' @echo ' LIBS="-larmci $(GA_MP_LIBS) $(ARMCI_NETWORK_LIBS) $(MAYBE_FLIBS)"' | $(SED_NORMALIZE_WHITESPACE) @echo ' =========================================================================== ' @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@NEC_TRUE@src/locks/tas-sx.o: src/locks/tas-sx.s @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@NEC_TRUE@ $(AM_V_CCAS) \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@NEC_TRUE@ $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@NEC_TRUE@ -c -o src/locks/tas-sx.o $(top_srcdir)/src/locks/tas-sx.s @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@NEC_TRUE@src/locks/tas-sx.lo: src/locks/tas-sx.s @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@NEC_TRUE@ $(AM_V_CCAS) \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@NEC_TRUE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@NEC_TRUE@ $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(AM_CCASFLAGS) \ @ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@@NEC_TRUE@ $(CCASFLAGS) -c -o src/locks/tas-sx.lo $(top_srcdir)/src/locks/tas-sx.s ############################################################################## # the end # .PHONY: checkprogs checkprogs: $(check_PROGRAMS) .PHONY: pfiles clean-pfiles @MSG_COMMS_TCGMSG4_TRUE@pfiles: $(check_PROGRAMS) @MSG_COMMS_TCGMSG4_TRUE@ for p in $(check_PROGRAMS); do \ @MSG_COMMS_TCGMSG4_TRUE@ echo "`whoami` `hostname` $(NPROCS) `pwd`/$$p /tmp" > $$p.p; \ @MSG_COMMS_TCGMSG4_TRUE@ done @MSG_COMMS_TCGMSG4_TRUE@check: pfiles @MSG_COMMS_TCGMSG4_TRUE@clean-pfiles: @MSG_COMMS_TCGMSG4_TRUE@ find . -name '*.p' -exec rm {} \; ; @MSG_COMMS_TCGMSG4_TRUE@clean-local: clean-pfiles .PHONY: check-gaf2c check-gaf2c: $(all-am) $(check_LTLIBRARIES) $(GAF2C_TESTS) $(MAYBE_PFILES) $(MAKE) $(AM_MAKEFLAGS) TESTS="$(GAF2C_TESTS)" XFAIL_TESTS="$(GAF2C_TESTS_XFAIL)" check-TESTS .PHONY: check-tcgmsg check-tcgmsg: $(all-am) $(check_LTLIBRARIES) $(TCGMSG_TESTS) $(MAYBE_PFILES) $(MAKE) $(AM_MAKEFLAGS) TESTS="$(TCGMSG_TESTS)" XFAIL_TESTS="$(TCGMSG_TESTS_XFAIL)" check-TESTS .PHONY: check-armci check-armci: $(all-am) $(check_LTLIBRARIES) $(ARMCI_TESTS) $(MAYBE_PFILES) $(MAKE) $(AM_MAKEFLAGS) TESTS="$(ARMCI_TESTS)" XFAIL_TESTS="$(ARMCI_TESTS_XFAIL)" check-TESTS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ga-5-3/armci/INSTALL0000640005473000001440000002713611256762556012750 0ustar d3n000usersInstallation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 6. Often, you can also type `make uninstall' to remove the installed files again. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *Note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. ga-5-3/armci/NEWS0000640005473000001440000000000011256762556012373 0ustar d3n000usersga-5-3/armci/compat/0000750005473000001440000000000012275260531013154 5ustar d3n000usersga-5-3/armci/compat/malloc.c0000640005473000001440000000041411274476770014603 0ustar d3n000users#include #undef malloc #include void *malloc(); /* Allocate an N-byte block of memory from the heap. If N is zero, allocate a 1-byte block. */ void *rpl_malloc(size_t n) { if (n == 0) { n = 1; } return malloc(n); } ga-5-3/armci/compat/dummy.c0000640005473000001440000000026311324122542014446 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif int dummy_func_for_nonempty_libcompat_armci(int dummy) { int dont_optimize_away = 4; return dont_optimize_away + dummy; } ga-5-3/armci/src/0000750005473000001440000000000012275260540012460 5ustar d3n000usersga-5-3/armci/src/collectives/0000750005473000001440000000000012275260540014774 5ustar d3n000usersga-5-3/armci/src/collectives/message.c0000640005473000001440000020120112115161655016561 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: message.c,v 1.58.6.4 2007-04-24 10:08:26 vinod Exp $ */ #if defined(BGML) # include "bgml.h" #elif defined(PVM) # include #elif defined(TCGMSG) # include static void tcg_brdcst(long type, void *buf, long lenbuf, long originator) { long atype = type; long alenbuf = lenbuf; long aoriginator = originator; BRDCST_(&atype, buf, &alenbuf, &aoriginator); } static void tcg_synch(long type) { long atype = type; SYNCH_(&atype); } static void tcg_snd(long type, void *buf, long lenbuf, long node, long sync) { long atype = type; long alenbuf = lenbuf; long anode = node; long async = sync; SND_(&atype, buf, &alenbuf, &anode, &async); } static void tcg_rcv(long type, void *buf, long lenbuf, long *lenmes, long nodeselect, long *nodefrom, long sync) { long atype = type; long alenbuf = lenbuf; long anodeselect = nodeselect; long async = sync; RCV_(&atype, buf, &alenbuf, lenmes, &anodeselect, nodefrom, &async); } #else # ifndef MPI # define MPI # endif # include #endif #include "message.h" #include "armcip.h" #include "copy.h" #if HAVE_STDIO_H # include #endif #if HAVE_ASSERT_H # include #endif #ifdef _POSIX_PRIORITY_SCHEDULING #ifndef HITACHI # include #endif #endif #include "armci.h" #include "acc.h" #define DEBUG_ 0 #if defined(SYSV) || defined(MMAP) ||defined (WIN32) # include "shmem.h" #endif /* global operations are use buffer size of BUF_SIZE doubles */ #define BUF_SIZE (4*2048) #define INFO_BUF_SIZE (BUF_SIZE*sizeof(BUF_SIZE) - sizeof(double)) #undef EMPTY #define EMPTY 0 #define FULL 1 static double *work=NULL; static long *lwork = NULL; static long long *llwork = NULL; static int *iwork = NULL; static float *fwork = NULL; static int _armci_gop_init=0; /* tells us if we have a buffers allocated */ static int _armci_gop_shmem =0; /* tells us to use shared memory for gops */ extern void armci_util_wait_int(volatile int *, int , int ); static int empty=EMPTY,full=FULL; #if !defined(SGIALTIX) && defined(SYSV) || defined(MMAP) || defined(WIN32) static void **ptr_arr=NULL; #endif typedef struct { union { volatile int flag; double dummy[16]; }a; union { volatile int flag; double dummy[16]; }b; double array[BUF_SIZE]; } bufstruct; static bufstruct *_gop_buffer; #define GOP_BUF(p) (_gop_buffer+((p)-armci_master)) /*\ macro to set a flag includes mem barrier to assure that flag is not set * before any outstanding writes complete \*/ #ifdef NEED_MEM_SYNC # ifdef AIX # define SET_SHM_FLAG(_flg,_val) _clear_lock((int *)(_flg),_val); # elif defined(NEC) # define SET_SHM_FLAG(_flg,_val) MEM_FENCE; *(_flg)=(_val) # elif defined(__ia64) # if defined(__GNUC__) && !defined (__INTEL_COMPILER) # define SET_SHM_FLAG(_flg,_val)\ __asm__ __volatile__ ("mf" ::: "memory"); *(_flg)=(_val) # else /* Intel Compiler */ extern void _armci_ia64_mb(); # define SET_SHM_FLAG(_flg,_val)\ _armci_ia64_mb(); *(_flg)=(_val); # endif # elif defined(MACX) # if defined(__GNUC__) # define SET_SHM_FLAG(_flg,_val)\ *(_flg)=(_val);__asm__ __volatile__ ("isync" ::: "memory") # endif # endif #endif #ifndef SET_SHM_FLAG # define SET_SHM_FLAG(_flg,_val) *(_flg)=_val; #endif /*\ * Variables/structures for use in Barrier and for Binomial tree \*/ #if HAVE_MATH_H # include #endif int barr_switch; static int LnB=0,powof2nodes,Lp2; typedef struct { volatile int flag1; double dum[16]; volatile int flag2; } barrier_struct; barrier_struct *_bar_buff; #define BAR_BUF(p) (_bar_buff+((p))) void **barr_snd_ptr,**barr_rcv_ptr; int _armci_barrier_init=0; int _armci_barrier_shmem=0; /*\ * Tree generation code \*/ static void _dfs_bintree_parse(int *idlist, int index, int max, int *result) { int left = (int)2*index+1; int right = (int) 2*index+2; static int pos=0; int r_end,l_end; l_end=pos++; result[pos++]=idlist[index]; if(leftarray; /* each process finds its place */ GOP_BUF(armci_me)->a.flag=EMPTY; /* initially buffer is empty */ GOP_BUF(armci_me)->b.flag=EMPTY; /* initially buffer is empty */ if(armci_me == armci_master ){ GOP_BUF(armci_clus_last+1)->a.flag=EMPTY;/*initially buffer is empty*/ GOP_BUF(armci_clus_last+2)->a.flag=EMPTY;/*initially buffer is empty*/ GOP_BUF(armci_clus_last+1)->b.flag=EMPTY;/*initially buffer is empty*/ GOP_BUF(armci_clus_last+2)->b.flag=EMPTY;/*initially buffer is empty*/ } _armci_gop_shmem = 1; } #endif /*stuff needed for barrier and binomial bcast/reduce*/ #ifdef LAPI if(!_armci_barrier_shmem){ int size = 2*sizeof(int); /*allocate memory to send/rcv data*/ barr_snd_ptr = (void **)malloc(sizeof(void *)*armci_nproc); barr_rcv_ptr = (void **)malloc(sizeof(void *)*armci_nproc); if(PARMCI_Malloc(barr_snd_ptr,size))armci_die("malloc barrinit failed",0); if(PARMCI_Malloc(barr_rcv_ptr,size))armci_die("malloc barrinit failed",0); if(barr_rcv_ptr[armci_me]==NULL || barr_snd_ptr[armci_me]==NULL) armci_die("problems in malloc barr_init",0); powof2nodes=1; LnB = floor(log(armci_nclus)/log(2))+1; if(pow(2,LnB-1)-1) _armci_dummy_work *=DUMMY_INIT; if(_armci_dummy_work>(double)armci_msg_nproc())_armci_dummy_work=DUMMY_INIT; } /***************************Barrier Code*************************************/ void armci_msg_barr_init(){ #if defined(SYSV) || defined(MMAP) || defined(WIN32) int size=sizeof(barrier_struct)*armci_clus_info[armci_clus_me].nslave; char *tmp; void **ptr_arr; barr_switch=0; /*First allocate space for flags*/ ptr_arr = (void**)malloc(armci_nproc*sizeof(void*)); if(armci_me==armci_master) size = size+128; else size=0; PARMCI_Malloc(ptr_arr, size); tmp = (char*)ptr_arr[armci_master]; size=2*sizeof(int); if(!tmp)armci_die("allocate barr shm failed",0); _bar_buff=(barrier_struct *)tmp; SET_SHM_FLAG(&(BAR_BUF(armci_me-armci_master)->flag1),empty); SET_SHM_FLAG(&(BAR_BUF(armci_me-armci_master)->flag2),empty); /*allocate memory to send/rcv data*/ barr_snd_ptr = (void **)malloc(sizeof(void *)*armci_nproc); barr_rcv_ptr = (void **)malloc(sizeof(void *)*armci_nproc); if(PARMCI_Malloc(barr_snd_ptr,size))armci_die("malloc barr_init failed",0); if(PARMCI_Malloc(barr_rcv_ptr,size))armci_die("malloc barr_init failed",0); if(barr_rcv_ptr[armci_me]==NULL || barr_snd_ptr[armci_me]==NULL) armci_die("problems in malloc barr_init",0); /*we have to figure if we have power of ,two nodes*/ powof2nodes=1; LnB = (int)floor(log(armci_nclus)/log(2))+1; if(pow(2,LnB-1)flag1,FULL,100000); SET_SHM_FLAG(&(BAR_BUF(i)->flag1),empty); } if(armci_nclus>1){ last = ((int)pow(2,(LnB-1)))^armci_clus_me; if(last>=0 && lastarmci_clus_me){ /*the pow2 set of procs*/ if(last=0 && next armci_me){ armci_msg_snd(ARMCI_TAG, srcp,4,next_node); armci_msg_rcv(ARMCI_TAG, dstn,4,NULL,next_node); } else{ /*would we gain anything by doing a snd,rcv instead of rcv,snd*/ armci_msg_rcv(ARMCI_TAG, dstn,4,NULL,next_node); armci_msg_snd(ARMCI_TAG, srcp,4,next_node); } armci_util_wait_int((volatile int *)dstn,barr_count,100000); } } if(last1*/ for(i=1;iflag2),full); } else { /*if not master, partake in the smp barrier,only*/ i=armci_me-armci_master; SET_SHM_FLAG(&(BAR_BUF(i)->flag1),full); armci_util_wait_int(&BAR_BUF(i)->flag2,FULL,100000); SET_SHM_FLAG(&(BAR_BUF(i)->flag2),empty); } } #endif /*barrier enabled only for lapi*/ void parmci_msg_barrier() { #ifdef BGML bgml_barrier (3); /* this is always faster than MPI_Barrier() */ #elif defined(MPI) MPI_Barrier(ARMCI_COMM_WORLD); # elif defined(PVM) pvm_barrier(mp_group_name, armci_nproc); # elif defined(LAPI) #if !defined(NEED_MEM_SYNC) if(_armci_barrier_init) _armci_msg_barrier(); else #endif { tcg_synch(ARMCI_TAG); } # else { tcg_synch(ARMCI_TAG); } # endif } /***********************End Barrier Code*************************************/ void armci_msg_init(int *argc, char ***argv) { #if defined(TCGMSG) if (!TCGREADY_()) { tcgi_pbegin(*argc,*argv); } #elif defined(BGML) /* empty */ #elif defined(MPI) int flag=0; MPI_Initialized(&flag); if (!flag) { # if defined(DCMF) || defined(MPI_MT) int provided; MPI_Init_thread(argc, argv, MPI_THREAD_MULTIPLE, &provided); # else MPI_Init(argc, argv); # endif } if (!PARMCI_Initialized()) { MPI_Comm_dup(MPI_COMM_WORLD, &ARMCI_COMM_WORLD); } #endif } int armci_msg_me() { #ifdef BGML return BGML_Messager_rank(); #elif defined(DCMF) return DCMF_Messager_rank(); #elif defined(MPI) static int counter = 0; if (counter == 0) { int me; MPI_Comm_rank(ARMCI_COMM_WORLD, &me); armci_me = me; counter = 1; } return armci_me; #elif defined(PVM) return(pvm_getinst(mp_group_name,pvm_mytid())); #else return (int)NODEID_(); #endif } int armci_msg_nproc() { #ifdef BGML return BGML_Messager_size(); #elif defined(DCMF) return DCMF_Messager_size(); #elif defined(MPI) static int counter = 0; if (counter == 0) { int nproc; MPI_Comm_size(ARMCI_COMM_WORLD, &nproc); armci_nproc = nproc; counter = 1; } return armci_nproc; #elif defined(PVM) return(pvm_gsize(mp_group_name)); #else return (int)NNODES_(); #endif } #ifdef CRAY_YMP #define BROKEN_MPI_ABORT #endif #ifndef PVM double armci_timer() { #ifdef BGML return BGML_Timer(); #elif defined(DCMF) return DCMF_Timer(); #elif defined(MPI) return MPI_Wtime(); #else return TCGTIME_(); #endif } #endif void armci_msg_abort(int code) { #ifdef BGML fprintf(stderr,"ARMCI aborting [%d]\n", code); #elif defined(DCMF) fprintf(stderr,"ARMCI aborting [%d]\n", code); #elif defined(MPI) # ifndef BROKEN_MPI_ABORT MPI_Abort(ARMCI_COMM_WORLD,code); # endif #elif defined(PVM) char error_msg[25]; sprintf(error_msg, "ARMCI aborting [%d]", code); pvm_halt(); #else Error("ARMCI aborting",(long)code); #endif fprintf(stderr,"%d:aborting\n",armci_me); /* trap for broken abort in message passing libs */ _exit(1); } void armci_msg_finalize() { #if defined(TCGMSG) PEND_(); #elif defined(MPI) MPI_Finalize(); #endif } void armci_msg_bintree(int scope, int* Root, int *Up, int *Left, int *Right) { int root, up, left, right, index, nproc; if(scope == SCOPE_NODE){ root = armci_clus_info[armci_clus_me].master; nproc = armci_clus_info[armci_clus_me].nslave; index = armci_me - root; up = (index-1)/2 + root; if( up < root) up = -1; left = 2*index + 1 + root; if(left >= root+nproc) left = -1; right = 2*index + 2 + root; if(right >= root+nproc)right = -1; }else if(scope ==SCOPE_MASTERS){ root = armci_clus_info[0].master; nproc = armci_nclus; if(armci_me != armci_master){up = -1; left = -1; right = -1; } else{ index = armci_clus_me - root; up = (index-1)/2 + root; up = ( up < root)? -1: armci_clus_info[up].master; left = 2*index + 1 + root; left = ( left >= root+nproc)? -1: armci_clus_info[left].master; right = 2*index + 2 + root; right =( right >= root+nproc)? -1: armci_clus_info[right].master; } }else{ root = 0; nproc = armci_nproc; index = armci_me - root; up = (index-1)/2 + root; if( up < root) up = -1; left = 2*index + 1 + root; if(left >= root+nproc) left = -1; right = 2*index + 2 + root; if(right >= root+nproc)right = -1; } *Up = up; *Left = left; *Right = right; *Root = root; } /*\ root broadcasts to everyone else \*/ void armci_msg_bcast_scope(int scope, void *buf, int len, int root) { int up, left, right, Root; if(!buf)armci_die("armci_msg_bcast: NULL pointer", len); #ifdef BGML BGTr_Bcast(root, buf, len, 3); #else armci_msg_bintree(scope, &Root, &up, &left, &right); if(root !=Root){ if(armci_me == root) armci_msg_snd(ARMCI_TAG, buf,len, Root); if(armci_me ==Root) armci_msg_rcv(ARMCI_TAG, buf, len, NULL, root); } /* printf("%d: scope=%d left=%d right=%d up=%d\n",armci_me, scope, left, right, up);*/ if(armci_me != Root && up!=-1) armci_msg_rcv(ARMCI_TAG, buf, len, NULL, up); if (left > -1) armci_msg_snd(ARMCI_TAG, buf, len, left); if (right > -1) armci_msg_snd(ARMCI_TAG, buf, len, right); #endif } /*\ shared memory based broadcast for a single SMP node \*/ void armci_smp_bcast(void *x, int n , int root) { int ndo, len,i, bufsize = BUF_SIZE*sizeof(double); static int bufid=1; if(armci_clus_info[armci_clus_me].nslave<2) return; /* nothing to do */ if(!x)armci_die("armci_msg_bcast: NULL pointer", n); /* enable or balance pipeline for messages comparable to bufsize */ if((n>bufsize/2) && (n <(2*bufsize-64))){ bufsize = n/2; bufsize>>=3; bufsize<<=3; } while ((ndo = (n<=bufsize) ? n : bufsize)) { len = ndo; if(armci_me==root){ /* wait for the flag protecting the buffer to clear */ armci_util_wait_int(&(GOP_BUF(armci_clus_last+bufid)->a.flag),EMPTY,100); SET_SHM_FLAG(&(GOP_BUF(armci_clus_last+bufid)->a.flag),full); #if 0 for(i=armci_clus_first; i <= armci_clus_last; i++) if(i!=root)armci_util_wait_int(&GOP_BUF(i)->b.flag, EMPTY, 100); armci_copy(x,GOP_BUF(armci_clus_last+bufid+1)->array,len); for(i=armci_clus_first; i <= armci_clus_last; i++) if(i!=root) GOP_BUF(i)->b.flag=FULL; #else armci_copy(x,GOP_BUF(armci_clus_last+bufid)->array,len); for(i=armci_clus_first; i <= armci_clus_last; i++) if(i!=root){ armci_util_wait_int(&GOP_BUF(i)->b.flag, EMPTY, 100); SET_SHM_FLAG(&(GOP_BUF(i)->b.flag),full); } #endif }else{ armci_util_wait_int(&GOP_BUF(armci_me)->b.flag, FULL, 100); armci_copy(GOP_BUF(armci_clus_last+bufid)->array,x,len); SET_SHM_FLAG(&(GOP_BUF(armci_me)->b.flag),empty); } n -=ndo; x = len + (char*)x; bufid = (bufid)%2 +1; /* since root waited for everybody to check in the previous buffer is free*/ if(armci_me==root){ SET_SHM_FLAG(&(GOP_BUF(armci_clus_last+bufid)->a.flag),empty); } } } /*\ shared memory based broadcast for a single SMP node out of shmem buffer \*/ void armci_smp_buf_bcast(void *x, int n, int root, void *shmbuf ) { int i, nslave = armci_clus_info[armci_clus_me].nslave; if(nslave<2){ armci_copy(shmbuf,x,n); return; /* nothing to do */ } if(!x)armci_die("armci_msg_bcast: NULL pointer", n); if(!shmbuf)armci_die("armci_msg_bcast: NULL pointer", n); if(armci_me==root){ /* notify others that the data in buffer is ready */ for(i=armci_clus_first; i <= armci_clus_last; i++) if(i!=root){ armci_util_wait_int(&GOP_BUF(i)->b.flag, EMPTY, 100); GOP_BUF(i)->b.flag=FULL; } /* root also needs to copy */ armci_copy(shmbuf,x,n); /* wait until everybody is finished -- can reclaim buffer */ for(i=armci_clus_first; i <= armci_clus_last; i++) if(i!=root)armci_util_wait_int(&GOP_BUF(i)->b.flag, EMPTY,100000); }else{ /* spin until data in buffer is ready */ armci_util_wait_int(&GOP_BUF(armci_me)->b.flag , FULL, 100000); armci_copy(shmbuf,x,n); /* copy data */ GOP_BUF(armci_me)->b.flag = EMPTY; /* indicate we are done */ } } void _armci_msg_binomial_bcast(void *buf, int len, int root){ int Root = armci_master; int nslave = armci_clus_info[armci_clus_me].nslave; int i,next_node,next; /* int my_rank,root_rank,next_rank; */ /* inter-node operation between masters */ if(root !=armci_clus_info[0].master){ Root = armci_clus_info[0].master; if(armci_me == root) armci_msg_snd(ARMCI_TAG, buf,len, Root); if(armci_me ==Root) armci_msg_rcv(ARMCI_TAG, buf, len, NULL, root); root = Root; Root = armci_master; } if(armci_nclus>1 &&armci_me==armci_master){/*the internode bcast, first*/ /*first do the recv*/ int rcv_proc=armci_clus_me,flag=1,diff=1; if(armci_me!=root){ while(!(rcv_proc & flag)){ diff=diff<<1; flag=flag<<1; } rcv_proc = armci_clus_info[armci_clus_me-diff].master; armci_msg_rcv(ARMCI_TAG, buf,len,NULL,rcv_proc); /*printf("\n%d: recv from %d \n",armci_me,rcv_proc);fflush(stdout);*/ } else diff = Lp2; /*printf("\n%d: %d diff>>1 = %d\n",armci_me,Lp2,diff>>1);*/ for(i=diff>>1;i>=1;i=i>>1){ next=i^armci_clus_me; if(next>=0 && next1)armci_msg_bcast_scope(SCOPE_MASTERS, buf, len, root); else Root = root; /* intra-node operation */ #if 1 if(_armci_gop_shmem && nslave<33) armci_smp_bcast(buf, len, Root); else #endif armci_msg_bcast_scope(SCOPE_NODE, buf, len, Root); } #endif void armci_msg_brdcst(void* buffer, int len, int root) { if(!buffer)armci_die("armci_msg_brdcast: NULL pointer", len); #ifdef BGML BGTr_Bcast(root, buffer, len, PCLASS); # elif defined(MPI) MPI_Bcast(buffer, len, MPI_CHAR, root, ARMCI_COMM_WORLD); # elif defined(PVM) armci_msg_bcast(buffer, len, root); # else { long ttag=ARMCI_TAG, llen=len, rroot=root; tcg_brdcst(ttag, buffer, llen, rroot); } # endif } void armci_msg_snd(int tag, void* buffer, int len, int to) { # ifdef MPI MPI_Send(buffer, len, MPI_CHAR, to, tag, ARMCI_COMM_WORLD); # elif defined(PVM) pvm_psend(pvm_gettid(mp_group_name, to), tag, buffer, len, PVM_BYTE); # elif defined(BGML) /* We don't actually used armci_msg_snd in ARMCI. we use optimized * collectives where * armci_msg_snd is used. If you build Global Arrays, the MPI flag is * set, so that * will work fine */ armci_die("bgl shouldn't use armci_msg_snd", armci_me); # else long ttag=tag, llen=len, tto=to, block=1; tcg_snd(ttag, buffer, llen, tto, block); # endif } /*\ receive message of specified tag from proc and get its len if msglen!=NULL \*/ void armci_msg_rcv(int tag, void* buffer, int buflen, int *msglen, int from) { # ifdef MPI MPI_Status status; MPI_Recv(buffer, buflen, MPI_CHAR, from, tag, ARMCI_COMM_WORLD, &status); if(msglen) MPI_Get_count(&status, MPI_CHAR, msglen); # elif defined(PVM) int src, rtag,mlen; pvm_precv(pvm_gettid(mp_group_name, from), tag, buffer, buflen, PVM_BYTE, &src, &rtag, &mlen); if(msglen)*msglen=mlen; #elif defined(BGML) armci_die("bgl shouldn't use armci_msg_rcv", armci_me); # else long ttag=tag, llen=buflen, mlen, ffrom=from, sender, block=1; tcg_rcv(ttag, buffer, llen, &mlen, ffrom, &sender, block); if(msglen)*msglen = (int)mlen; # endif } int armci_msg_rcvany(int tag, void* buffer, int buflen, int *msglen) { #if defined(MPI) int ierr; MPI_Status status; ierr = MPI_Recv(buffer, buflen, MPI_CHAR, MPI_ANY_SOURCE, tag, ARMCI_COMM_WORLD, &status); if(ierr != MPI_SUCCESS) armci_die("armci_msg_rcvany: Recv failed ", tag); if(msglen)if(MPI_SUCCESS!=MPI_Get_count(&status, MPI_CHAR, msglen)) armci_die("armci_msg_rcvany: count failed ", tag); return (int)status.MPI_SOURCE; # elif defined(PVM) int src, rtag,mlen; pvm_precv(-1, tag, buffer, buflen, PVM_BYTE, &src, &rtag, &mlen); if(msglen)*msglen=mlen; return(pvm_getinst(mp_group_name,src)); # elif defined (BGML) armci_die("bgl shouldn't use armci_msg_rcvany", armci_me); # else long ttag=tag, llen=buflen, mlen, ffrom=-1, sender, block=1; tcg_rcv(ttag, buffer, llen, &mlen, ffrom, &sender, block); if(msglen)*msglen = (int)mlen; return (int)sender; # endif } /*\ cluster master broadcasts to everyone else in the same cluster \*/ void armci_msg_clus_brdcst(void *buf, int len) { int root, up, left, right; int tag=ARMCI_TAG, lenmes; armci_msg_bintree(SCOPE_NODE, &root, &up, &left, &right); if(armci_me != root) armci_msg_rcv(tag, buf, len, &lenmes, up); if (left > -1) armci_msg_snd(tag, buf, len, left); if (right > -1) armci_msg_snd(tag, buf, len, right); } /*\ reduce operation for long \*/ static void ldoop(int n, char *op, long *x, long* work) { if (strncmp(op,"+",1) == 0) while(n--) *x++ += *work++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ *= *work++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register long x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register long x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MIN(x1, x2); x++; work++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x |= *work; x++; work++; } else armci_die("ldoop: unknown operation requested", n); } /*\ reduce operation for long x= op(work,work2) \*/ static void ldoop2(int n, char *op, long *x, long* work, long* work2) { if (strncmp(op,"+",1) == 0) while(n--) *x++ = *work++ + *work2++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ = *work++ * *work2++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register long x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MAX(x1, x2); x++; work++; work2++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register long x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MIN(x1, x2); x++; work++; work2++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x = *work | *work2; x++; work++; work2++; } else armci_die("ldoop2: unknown operation requested", n); } /*\ reduce operation for long long \*/ static void lldoop(int n, char *op, long long *x, long long* work) { if (strncmp(op,"+",1) == 0) while(n--) *x++ += *work++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ *= *work++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register long long x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register long long x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MIN(x1, x2); x++; work++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x |= *work; x++; work++; } else armci_die("lldoop: unknown operation requested", n); } /*\ reduce operation for long long x= op(work,work2) \*/ static void lldoop2(int n, char *op, long long *x, long long* work, long long* work2) { if (strncmp(op,"+",1) == 0) while(n--) *x++ = *work++ + *work2++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ = *work++ * *work2++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register long long x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MAX(x1, x2); x++; work++; work2++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register long long x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MIN(x1, x2); x++; work++; work2++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x = *work | *work2; x++; work++; work2++; } else armci_die("ldoop2: unknown operation requested", n); } /*\ reduce operation for int \*/ static void idoop(int n, char *op, int *x, int* work) { if (strncmp(op,"+",1) == 0) while(n--) *x++ += *work++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ *= *work++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register int x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register int x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MIN(x1, x2); x++; work++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x |= *work; x++; work++; } else armci_die("idoop: unknown operation requested", n); } /*\ reduce operation for int x= op(work,work2) \*/ static void idoop2(int n, char *op, int *x, int* work, int* work2) { if (strncmp(op,"+",1) == 0) while(n--) *x++ = *work++ + *work2++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ = *work++ * *work2++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register int x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MAX(x1, x2); x++; work++; work2++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register int x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MIN(x1, x2); x++; work++; work2++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x = *work | *work2; x++; work++; work2++; } else armci_die("idoop2: unknown operation requested", n); } /*\ reduce operation for double \*/ static void ddoop(int n, char* op, double* x, double* work) { if (strncmp(op,"+",1) == 0){ if(n>63) FORT_DADD(&n,x,work); else while(n--) *x++ += *work++; }else if (strncmp(op,"*",1) == 0){ if(n>63) FORT_DMULT(&n,x,work); else while(n--) *x++ *= *work++; }else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register double x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register double x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MIN(x1, x2); x++; work++; } else armci_die("ddoop: unknown operation requested", n); } /*\ reduce operation for double x= op(work,work2) \*/ static void ddoop2(int n, char *op, double *x, double* work, double* work2) { if (strncmp(op,"+",1) == 0){ if(n>63) FORT_DADD2(&n,x,work,work2); else while(n--) *x++ = *work++ + *work2++; }else if (strncmp(op,"*",1) == 0){ if(n>63) FORT_DMULT2(&n,x,work,work2); while(n--) *x++ = *work++ * *work2++; }else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register double x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MAX(x1, x2); x++; work++; work2++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register double x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MIN(x1, x2); x++; work++; work2++; } else armci_die("ddoop2: unknown operation requested", n); } /*\ reduce operation for float \*/ static void fdoop(int n, char* op, float* x, float* work) { if (strncmp(op,"+",1) == 0) while(n--) *x++ += *work++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ *= *work++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register float x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register float x1 = ARMCI_ABS(*x), x2 = ARMCI_ABS(*work); *x = ARMCI_MIN(x1, x2); x++; work++; } else armci_die("fdoop: unknown operation requested", n); } /*\ reduce operation for float x= op(work,work2) \*/ static void fdoop2(int n, char *op, float *x, float* work, float* work2) { if (strncmp(op,"+",1) == 0) while(n--) *x++ = *work++ + *work2++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ = *work++ * *work2++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = ARMCI_MAX(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = ARMCI_MIN(*work2, *work); x++; work++; work2++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register float x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MAX(x1, x2); x++; work++; work2++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register float x1 = ARMCI_ABS(*work), x2 = ARMCI_ABS(*work2); *x = ARMCI_MIN(x1, x2); x++; work++; work2++; } else armci_die("fdoop2: unknown operation requested", n); } /*\ combine array of longs/ints accross all processes \*/ void armci_msg_gop_scope(int scope, void *x, int n, char* op, int type) { int root, up, left, right, size; int tag=ARMCI_TAG; int ndo, len, lenmes, orign =n, ratio; void *origx =x; if(!x)armci_die("armci_msg_gop: NULL pointer", n); if(work==NULL)_allocate_mem_for_work(); #ifdef BGML BGML_Dt dt; BGML_Op theop; if(n > 0 && (strncmp(op, "+", 1) == 0) && (type==ARMCI_INT || type==ARMCI_DOUBLE)) { theop=BGML_SUM; if(type==ARMCI_INT) dt=BGML_SIGNED_INT; else if(type==ARMCI_DOUBLE) dt=BGML_DOUBLE; BGTr_Allreduce(origx, x, n, dt, theop, -1, PCLASS); } else if(n > 0 && (strncmp(op, "max", 3) == 0) && (type==ARMCI_INT || type==ARMCI_DOUBLE)) { theop=BGML_MAX; if(type==ARMCI_INT) dt=BGML_SIGNED_INT; else if(type==ARMCI_DOUBLE) dt=BGML_DOUBLE; BGTr_Allreduce(origx, x, n, dt, theop, -1, PCLASS); } else if(n > 0 && (strncmp(op, "min", 3) == 0) && (type==ARMCI_INT || type==ARMCI_DOUBLE)) { theop=BGML_MIN; if(type==ARMCI_INT) dt=BGML_SIGNED_INT; else if(type==ARMCI_DOUBLE) dt=BGML_DOUBLE; BGTr_Allreduce(origx, x, n, dt, theop, -1, PCLASS); } else #endif { armci_msg_bintree(scope, &root, &up, &left, &right); if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); ratio = sizeof(double)/size; while ((ndo = (n<=BUF_SIZE*ratio) ? n : BUF_SIZE*ratio)) { len = lenmes = ndo*size; if (left > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, left); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op,(long long*)x,llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (right > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, right); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op,(long long*)x,llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (armci_me != root && up!=-1) armci_msg_snd(tag, x, len, up); n -=ndo; x = len + (char*)x; } /* Now, root broadcasts the result down the binary tree */ len = orign*size; armci_msg_bcast_scope(scope, origx, len, root); } } void armci_msg_reduce_scope(int scope, void *x, int n, char* op, int type) { int root, up, left, right, size; int tag=ARMCI_TAG; int ndo, len, lenmes, ratio; if(!x)armci_die("armci_msg_gop: NULL pointer", n); if(work==NULL)_allocate_mem_for_work(); armci_msg_bintree(scope, &root, &up, &left, &right); if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); ratio = sizeof(double)/size; while ((ndo = (n<=BUF_SIZE*ratio) ? n : BUF_SIZE*ratio)) { len = lenmes = ndo*size; if (left > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, left); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op,(long long*)x,llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (right > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, right); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op,(long long*)x,llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (armci_me != root && up!=-1) armci_msg_snd(tag, x, len, up); n -=ndo; x = len + (char*)x; } } static void gop(int type, int ndo, char* op, void *x, void *work) { if(type==ARMCI_INT) idoop(ndo, op, (int*)x, (int*)work); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, (long*)work); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op, (long long*)x, (long long*)work); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, (float*)work); else ddoop(ndo, op, (double*)x, (double*)work); } static void gop2(int type, int ndo, char* op, void *x, void *work, void *work2) { #if 0 int size; if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); armci_copy(work2,x,ndo*size); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, (int*)work); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, (long*)work); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op, (long long*)x, (long long*)work); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, (float*)work); else ddoop(ndo, op, (double*)x, (double*)work); #else if(type==ARMCI_INT) idoop2(ndo, op, (int*)x, (int*)work, (int*)work2); else if(type==ARMCI_LONG)ldoop2(ndo,op,(long*)x,(long*)work,(long*)work2); else if(type==ARMCI_LONG_LONG) lldoop2(ndo,op,(long long*)x,(long long*)work,(long long*)work2); else if(type==ARMCI_FLOAT)fdoop2(ndo,op,(float*)x,(float*)work,(float*)work2); else ddoop2(ndo, op, (double*)x, (double*)work,(double*)work2); #endif } /*\ shared memory based reduction for a single SMP node \*/ static void armci_smp_reduce(void *x, int n, char* op, int type) { int root, up, left, right, size; int ndo, len, lenmes, ratio; int nslave = armci_clus_info[armci_clus_me].nslave; if(nslave<2) return; /* nothing to do */ if(!x)armci_die("armci_msg_gop: NULL pointer", n); armci_msg_bintree(SCOPE_NODE, &root, &up, &left, &right); if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); ratio = sizeof(double)/size; while ((ndo = (n<=BUF_SIZE*ratio) ? n : BUF_SIZE*ratio)) { len = lenmes = ndo*size; armci_util_wait_int(&GOP_BUF(armci_me)->a.flag, EMPTY, 100); #if 1 if(left<0 && right<0) armci_copy(x,GOP_BUF(armci_me)->array,len); /* version oblivious to the order of data arrival */ { int need_left = left >-1; int need_right = right >-1; int from, first =1, maxspin=100, count=0; bufstruct *b; while(need_left || need_right){ from =-1; if(need_left && GOP_BUF(left)->a.flag == FULL){ from =left; need_left =0; }else if(need_right && GOP_BUF(right)->a.flag == FULL) { from =right; need_right =0; } if(from != -1){ b = GOP_BUF(from); #if 1 if(armci_me == root) gop(type, ndo, op, x, b->array); else { if(first) gop2(type, ndo, op, GOP_BUF(armci_me)->array, b->array,x); else gop(type, ndo, op, GOP_BUF(armci_me)->array, b->array); } first =0; #else gop(type, ndo, op, GOP_BUF(armci_me)->array, b->array); #endif SET_SHM_FLAG(&( b->a.flag),empty); }else if((++count)array,len); /* this version requires a specific order of data arrival */ if (left >-1) { while(GOP_BUF(left)->a.flag != FULL) cpu_yield(); gop(type, ndo, op, GOP_BUF(armci_me)->array, GOP_BUF(left)->array); SET_SHM_FLAG(&( GOP_BUF(left)->a.flag),empty); } if (right >-1 ) { while(GOP_BUF(right)->a.flag != FULL) cpu_yield(); gop(type, ndo, op, GOP_BUF(armci_me)->array, GOP_BUF(right)->array); GOP_BUF(right)->a.flag = EMPTY; } #endif if (armci_me != root ) { SET_SHM_FLAG(&(GOP_BUF(armci_me)->a.flag),full); } #if 0 else /* NOTE: this copy can be eliminated in a cluster configuration */ armci_copy(GOP_BUF(armci_me)->array,x,len); #endif n -=ndo; x = len + (char*)x; } } void _armci_msg_binomial_reduce(void *x, int n, char* op, int type){ int root = armci_clus_info[0].master; int i,next_node,next; int size, ratio, ndo, lenmes,len; /* int my_rank,root_rank,next_rank; */ if(work==NULL)_allocate_mem_for_work(); if(armci_me!=armci_master)return; if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); ratio = sizeof(double)/size; while ((ndo = (n<=BUF_SIZE*ratio) ? n : BUF_SIZE*ratio)) { int snd_proc=armci_clus_me,flag=1,diff=1; len = lenmes = ndo*size; if(armci_me!=root){ while(!(snd_proc & flag)){ diff=diff<<1; flag=flag<<1; } snd_proc = armci_clus_info[armci_clus_me-diff].master; } else diff = Lp2; /*printf("\n%d: %d diff>>1 = %d\n",armci_me,Lp2,diff>>1);*/ for(i=diff>>1;i>=1;i=i>>1){ next=i^armci_clus_me; if(next>=0 && next1){ #ifdef LAPI if(_armci_gop_init) _armci_msg_binomial_reduce(x,n,op,type); else #endif armci_msg_reduce_scope(SCOPE_MASTERS, x, n, op, type); } } static void armci_msg_gop2(void *x, int n, char* op, int type) { int size, root=0; if(work==NULL)_allocate_mem_for_work(); if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); #ifdef BGML /*optimize what we can at the message layer */ void *origx=x; BGML_Dt dt; BGML_Op rop; if(n>0 && (strncmp(op, "+", 1) == 0)) { rop=BGML_SUM; if(type == ARMCI_INT) { dt=BGML_SIGNED_INT; BGTr_Allreduce(origx, x, n, dt, rop, -1, 3); } else if(type == ARMCI_LONG || type == ARMCI_LONG_LONG) { armci_msg_reduce(x, n, op, type); armci_msg_bcast(x, size*n, root); /* dt=BGML_UNSIGNED_LONG; */ /* BGTr_Allreduce(origx, x, n, dt, rop, -1, 3);*/ } else if(type == ARMCI_DOUBLE) { dt=BGML_DOUBLE; BGTr_Allreduce(origx, x, n, dt, rop, -1, 3); } else if(type == ARMCI_FLOAT) { armci_msg_reduce(x, n, op, type); armci_msg_bcast(x, size*n, root); } else { fprintf(stderr,"Unknown data type\n"); exit(1); } } else if(n>0 && ((strncmp(op, "max", 3) == 0) || (strncmp(op, "min", 3) ==0 ))) { if(strncmp(op, "max", 3) == 0) rop=BGML_MAX; else rop=BGML_MIN; if(type == ARMCI_INT) dt=BGML_SIGNED_INT; else if(type == ARMCI_DOUBLE) dt=BGML_DOUBLE; else if(type == ARMCI_FLOAT) dt=BGML_FLOAT; else if(type == ARMCI_LONG) dt=BGML_SIGNED_LONG; else if(type == ARMCI_LONG_LONG) { armci_msg_reduce(x, n, op, type); armci_msg_bcast(x, size*n, root); } else { fprintf(stderr,"Unknown data type\n"); exit(1); } if(type != ARMCI_LONG_LONG) BGTr_Allreduce(origx, x, n, dt, rop, -1, 3); } else #endif { /* brackets needed for final gelse clause of bgml */ armci_msg_reduce(x, n, op, type); armci_msg_bcast(x, size*n, root); } } static void armci_sel(int type, char *op, void *x, void* work, int n) { int selected=0; switch (type) { case ARMCI_INT: if(strncmp(op,"min",3) == 0){ if(*(int*)x > *(int*)work) selected=1; }else if(*(int*)x < *(int*)work) selected=1; break; case ARMCI_LONG: if(strncmp(op,"min",3) == 0){ if(*(long*)x > *(long*)work) selected=1; }else if(*(long*)x < *(long*)work) selected=1; break; case ARMCI_LONG_LONG: if(strncmp(op,"min",3) == 0){ if(*(long long*)x > *(long long*)work) selected=1; }else if(*(long long*)x < *(long long*)work) selected=1; break; case ARMCI_FLOAT: if(strncmp(op,"min",3) == 0){ if(*(float*)x > *(float*)work) selected=1; }else if(*(float*)x < *(float*)work) selected=1; break; default: if(strncmp(op,"min",3) == 0){ if(*(double*)x > *(double*)work) selected=1; }else if(*(double*)x < *(double*)work) selected=1; } if(selected)armci_copy(work,x, n); } /*\ global for op with extra info \*/ void armci_msg_sel_scope(int scope, void *x, int n, char* op, int type, int contribute) { int root, up, left, right; int tag=ARMCI_TAG; int len, lenmes, min; min = (strncmp(op,"min",3) == 0); if(!min && (strncmp(op,"max",3) != 0)) armci_die("armci_msg_gop_info: operation not supported ", 0); if(!x)armci_die("armci_msg_gop_info: NULL pointer", n); if(n>((int)INFO_BUF_SIZE))armci_die("armci_msg_gop_info: info too large",n); len = lenmes = n; armci_msg_bintree(scope, &root, &up, &left, &right); if (left > -1) { /* receive into work if contributing otherwise into x */ if(contribute)armci_msg_rcv(tag, work, len, &lenmes, left); else armci_msg_rcv(tag, x, len, &lenmes, left); if(lenmes){ if(contribute) armci_sel(type, op, x, work, n); else contribute =1; /* now we got data to pass */ } } if (right > -1) { /* receive into work if contributing otherwise into x */ if(contribute) armci_msg_rcv(tag, work, len, &lenmes, right); else armci_msg_rcv(tag, x, len, &lenmes, right); if(lenmes){ if(contribute) armci_sel(type, op, x, work, n); else contribute =1; /* now we got data to pass */ } } if (armci_me != root){ if(contribute) armci_msg_snd(tag, x, len, up); else armci_msg_snd(tag, x, 0, up); /* send 0 bytes */ } /* Now, root broadcasts the result down the binary tree */ armci_msg_bcast_scope(scope, x, n, root); } /*\ combine array of longs/ints/doubles accross all processes \*/ #if defined(NEC) void armci_msg_igop(int *x, int n, char* op) { armci_msg_gop_scope(SCOPE_ALL,x, n, op, ARMCI_INT); } void armci_msg_lgop(long *x, int n, char* op) { armci_msg_gop_scope(SCOPE_ALL,x, n, op, ARMCI_LONG); } void armci_msg_llgop(long long *x, int n, char* op) { armci_msg_gop_scope(SCOPE_ALL,x, n, op, ARMCI_LONG_LONG); } void armci_msg_dgop(double *x, int n, char* op) { armci_msg_gop_scope(SCOPE_ALL,x, n, op, ARMCI_DOUBLE); } void armci_msg_fgop (float *x, int n, char* op) { armci_msg_gop_scope(SCOPE_ALL,x, n, op, ARMCI_FLOAT);} #else void armci_msg_igop(int *x, int n, char* op) { armci_msg_gop2(x, n, op, ARMCI_INT); } void armci_msg_lgop(long *x, int n, char* op) { armci_msg_gop2(x, n, op, ARMCI_LONG); } void armci_msg_llgop(long long *x, int n, char* op) { armci_msg_gop2(x, n, op, ARMCI_LONG_LONG); } void armci_msg_fgop(float *x, int n, char* op) { armci_msg_gop2(x, n, op, ARMCI_FLOAT); } void armci_msg_dgop(double *x, int n, char* op) { armci_msg_gop2(x, n, op, ARMCI_DOUBLE); } #endif /*\ add array of longs/ints within the same cluster node \*/ void armci_msg_clus_igop(int *x, int n, char* op) { armci_msg_gop_scope(SCOPE_NODE,x, n, op, ARMCI_INT); } void armci_msg_clus_lgop(long *x, int n, char* op) { armci_msg_gop_scope(SCOPE_NODE,x, n, op, ARMCI_LONG); } void armci_msg_clus_llgop(long long *x, int n, char* op) { armci_msg_gop_scope(SCOPE_NODE,x, n, op, ARMCI_LONG_LONG); } void armci_msg_clus_fgop(float *x, int n, char* op) { armci_msg_gop_scope(SCOPE_NODE,x, n, op, ARMCI_FLOAT); } void armci_msg_clus_dgop_scope(double *x, int n, char* op) { armci_msg_gop_scope(SCOPE_NODE,x, n, op, ARMCI_DOUBLE); } void armci_exchange_address(void *ptr_ar[], int n) { int ratio = sizeof(void*)/sizeof(int); /* armci_msg_lgop((long*)ptr_ar, n, "+"); */ if(DEBUG_)printf("%d: exchanging %ld ratio=%d\n",armci_me,(long)ptr_ar[armci_me],ratio); armci_msg_gop2(ptr_ar, n*ratio, "+",ARMCI_INT); } /** * ********************* Begin ARMCI Groups Code **************************** * NOTE: This part is MPI dependent (i.e. ifdef MPI) */ #ifdef MPI MPI_Comm armci_group_comm(ARMCI_Group *group) { #ifdef ARMCI_GROUP return MPI_COMM_NULL; #else ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); return (MPI_Comm)igroup->icomm; #endif } void parmci_msg_group_barrier(ARMCI_Group *group) { ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); #ifdef ARMCI_GROUP { int val=0; armci_msg_group_igop(&val, 1, "+", group); } #else MPI_Barrier((MPI_Comm)(igroup->icomm)); #endif } #ifdef ARMCI_GROUP extern void ARMCI_Bcast_(void *buffer, int len, int root, ARMCI_Group *group); #else extern void ARMCI_Bcast_(void *buffer, int len, int root, ARMCI_Comm comm); #endif void armci_grp_clus_brdcst(void *buf, int len, int grp_master, int grp_clus_nproc, ARMCI_Group *mastergroup) { ARMCI_iGroup *igroup = armci_get_igroup_from_group(mastergroup); int i, *pid_list, root=0; #ifdef ARMCI_GROUP ARMCI_Group group; #else MPI_Group group_world; MPI_Group group; MPI_Comm comm; #endif /* create a communicator for the processes with in a node */ pid_list = (int *)malloc(grp_clus_nproc*sizeof(int)); for(i=0; iicomm), &group_world); MPI_Group_incl(group_world, grp_clus_nproc, pid_list, &group); MPI_Comm_create((MPI_Comm)(igroup->icomm), (MPI_Group)group, (MPI_Comm*)&comm); /* Broadcast within the node (for this sub group of processes) */ ARMCI_Bcast_(buf, len, root, comm); free(pid_list); MPI_Comm_free(&comm); /* free the temporary communicator */ MPI_Group_free(&group); #endif } /* to avoid warning */ extern int ARMCI_Absolute_id(ARMCI_Group *group,int group_rank); void armci_msg_group_bintree(int scope, int* Root, int *Up, int *Left, int *Right, ARMCI_Group *group) { int root, up, left, right, index, nproc,grp_clus_me,grp_me,grp_master,grp_nproc; armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); grp_me = grp_attr->grp_me; grp_clus_me = grp_attr->grp_clus_me; grp_master = grp_attr->grp_clus_info[grp_clus_me].master; ARMCI_Group_size(group, &grp_nproc); if(scope == SCOPE_NODE){ root = grp_attr->grp_clus_info[grp_clus_me].master; nproc = grp_attr->grp_clus_info[grp_clus_me].nslave; index = grp_me - root; up = (index-1)/2 + root; if( up < root) up = -1; left = 2*index + 1 + root; if(left >= root+nproc) left = -1; right = 2*index + 2 + root; if(right >= root+nproc)right = -1; }else if(scope ==SCOPE_MASTERS){ root = grp_attr->grp_clus_info[0].master; nproc = grp_attr->grp_nclus; if(grp_me != grp_master){up = -1; left = -1; right = -1; } else{ index = grp_clus_me - root; up = (index-1)/2 + root; up = ( up < root)? -1: grp_attr->grp_clus_info[up].master; left = 2*index + 1 + root; left =( left >= root+nproc)?-1:grp_attr->grp_clus_info[left].master; right= 2*index + 2 + root; right=( right>=root+nproc)?-1:grp_attr->grp_clus_info[right].master; } }else{ root = 0; nproc = grp_nproc; index = grp_me - root; up = (index-1)/2 + root; if( up < root) up = -1; left = 2*index + 1 + root; if(left >= root+nproc) left = -1; right = 2*index + 2 + root; if(right >= root+nproc)right = -1; } *Up = (up==-1)?up:ARMCI_Absolute_id(group,up); *Left = (left==-1)?left:ARMCI_Absolute_id(group,left); *Right = (right==-1)?right:ARMCI_Absolute_id(group,right); *Root = (root==-1)?root:ARMCI_Absolute_id(group,root); } void armci_msg_group_bcast_scope(int scope, void *buf, int len, int root, ARMCI_Group *group) { int up, left, right, Root; int grp_me; ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); if(!buf)armci_die("armci_msg_bcast: NULL pointer", len); if(!group)armci_msg_bcast_scope(scope,buf,len,root); else grp_me = igroup->grp_attr.grp_me; armci_msg_group_bintree(scope, &Root, &up, &left, &right,group); if(root !=Root){ if(armci_me == root) armci_msg_snd(ARMCI_TAG, buf,len, Root); if(armci_me ==Root) armci_msg_rcv(ARMCI_TAG, buf, len, NULL, root); } /* printf("%d: scope=%d left=%d right=%d up=%d\n",armci_me, scope, left, right, up);*/ if(armci_me != Root && up!=-1) armci_msg_rcv(ARMCI_TAG, buf, len, NULL, up); if (left > -1) armci_msg_snd(ARMCI_TAG, buf, len, left); if (right > -1) armci_msg_snd(ARMCI_TAG, buf, len, right); } void armci_msg_group_gop_scope(int scope, void *x, int n, char* op, int type, ARMCI_Group *group) { int root, up, left, right, size; int tag=ARMCI_TAG,grp_me; int ndo, len, lenmes, orign =n, ratio; void *origx =x; ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); if(!group)armci_msg_gop_scope(scope,x,n,op,type); else grp_me = igroup->grp_attr.grp_me; if(!x)armci_die("armci_msg_gop: NULL pointer", n); if(work==NULL)_allocate_mem_for_work(); armci_msg_group_bintree(scope, &root, &up, &left, &right,group); if(type==ARMCI_INT) size = sizeof(int); else if(type==ARMCI_LONG) size = sizeof(long); else if(type==ARMCI_LONG_LONG) size = sizeof(long long); else if(type==ARMCI_FLOAT) size = sizeof(float); else size = sizeof(double); ratio = sizeof(double)/size; while ((ndo = (n<=BUF_SIZE*ratio) ? n : BUF_SIZE*ratio)) { len = lenmes = ndo*size; if (left > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, left); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op, (long long*)x,llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (right > -1) { armci_msg_rcv(tag, lwork, len, &lenmes, right); if(type==ARMCI_INT) idoop(ndo, op, (int*)x, iwork); else if(type==ARMCI_LONG) ldoop(ndo, op, (long*)x, lwork); else if(type==ARMCI_LONG_LONG) lldoop(ndo, op,(long long*)x, llwork); else if(type==ARMCI_FLOAT) fdoop(ndo, op, (float*)x, fwork); else ddoop(ndo, op, (double*)x, work); } if (armci_me != root && up!=-1) armci_msg_snd(tag, x, len, up); n -=ndo; x = len + (char*)x; } /* Now, root broadcasts the result down the binary tree */ len = orign*size; armci_msg_group_bcast_scope(scope, origx, len, root,group); } void armci_exchange_address_grp(void *ptr_arr[], int n, ARMCI_Group *group) { int ratio = sizeof(void*)/sizeof(int); ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); int grp_me = igroup->grp_attr.grp_me; if(DEBUG_){ printf("%d: exchanging %ld ratio=%d\n",armci_me, (long)ptr_arr[grp_me], ratio); } armci_msg_group_gop_scope(SCOPE_ALL, ptr_arr, n*ratio, "+", ARMCI_INT, group); } /*\ combine array of longs/ints/doubles accross all processes \*/ void armci_msg_group_igop(int *x, int n, char* op, ARMCI_Group *group) { armci_msg_group_gop_scope(SCOPE_ALL,x, n, op, ARMCI_INT,group); } void armci_msg_group_lgop(long *x, int n, char* op,ARMCI_Group *group) { armci_msg_group_gop_scope(SCOPE_ALL,x, n, op, ARMCI_LONG,group); } void armci_msg_group_llgop(long long *x, int n, char* op,ARMCI_Group *group) { armci_msg_group_gop_scope(SCOPE_ALL,x, n, op, ARMCI_LONG_LONG,group); } void armci_msg_group_fgop(float *x, int n, char* op,ARMCI_Group *group) { armci_msg_group_gop_scope(SCOPE_ALL,x, n, op, ARMCI_FLOAT,group); } void armci_msg_group_dgop(double *x, int n, char* op,ARMCI_Group *group) { armci_msg_group_gop_scope(SCOPE_ALL,x, n, op, ARMCI_DOUBLE,group); } # endif /* ifdef MPI */ /*********************** End ARMCI Groups Code ****************************/ #ifdef PVM /* set the group name if using PVM */ void ARMCI_PVM_Init(char *mpgroup) { #ifdef CRAY mp_group_name = (char *)NULL; #else if(mpgroup != NULL) { /* free(mp_group_name); */ mp_group_name = (char *)malloc(25 * sizeof(char)); strcpy(mp_group_name, mpgroup); } #endif } #endif ga-5-3/armci/src/memory/0000750005473000001440000000000012275260537013776 5ustar d3n000usersga-5-3/armci/src/memory/shmlimit.c0000640005473000001440000000627212176313213015766 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: shmlimit.c,v 1.13 2000-10-11 21:37:01 d3h325 Exp $ */ /* * This code is used to test shared memory limits within * a separately forked child process. * This has to be done in a child process to make sure that * swap space allocated in test is not counted against ARMCI processes. * Some systems do not release swap after shmem ids are deleted * until the process exits. * JN/07.07.99 */ #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_WAIT_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_STDIO_H # include #endif #if HAVE_ERRNO_H # include #endif #if HAVE_SIGNAL_H # include #endif #include "shmlimit.h" #include "armci.h" #include "message.h" #define DEBUG_ 0 #if defined(DECOSF) || defined(SOLARIS64) || defined(HPUX) #define PIPE_AFTER_FORK_BUG #endif void (*armci_sig_chld_orig)(); static int status=0; int armci_shmlimit_caught_sigchld=0; #if defined(SUN) && !defined(SOLARIS) static void SigChldHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else static void SigChldHandler(sig) #endif int sig; { #ifdef DISABLED int pid; pid = wait(&status); #endif armci_shmlimit_caught_sigchld=1; } static void TrapSigChld() { if ( (armci_sig_chld_orig = signal(SIGCHLD, SigChldHandler)) == SIG_ERR) armci_die("TrapSigChld: error from signal setting SIGCHLD",0); } static void RestoreSigChld() { if ( signal(SIGCHLD, armci_sig_chld_orig) == SIG_ERR) armci_die("Restore_SigChld: error from restoring signal SIGChld",0); } #ifdef SOLARIS static int child_finished() { return armci_shmlimit_caught_sigchld; } #endif int armci_child_shmem_init() { pid_t pid; int x; #ifdef PIPE_AFTER_FORK_BUG int i; #endif int y; int fd[2]; int val; if(pipe(fd)==-1) armci_die("armci shmem_test pipe failed",0); TrapSigChld(); if ( (pid = fork() ) < 0) armci_die("armci shmem_test fork failed", (int)pid); else if(pid == 0){ x= armci_shmem_test(); #ifdef PIPE_AFTER_FORK_BUG /* due to a bug in OSF1 V4.0/1229/alpha first item written gets hosed*/ for(i=0;i<2;i++) #endif val=write(fd[1],&x,sizeof(int)); if(val < 0 || (size_t)val < sizeof(int)) armci_die("armci shmem_test: write failed",0); _exit(0); }else{ pid_t rc; #ifdef PIPE_AFTER_FORK_BUG /* due to a bug in OSF1 V4.0/1229/alpha first item read is garbage */ for(i=0;i<2;i++) #endif val=read(fd[0],&y,sizeof(int)); if(val < 0 || (size_t)val < sizeof(int)) armci_die("armci shmem_test: read failed",val); #ifdef SOLARIS while(!child_finished()); #endif again: rc = wait (&status); if(rc == -1 && errno == EINTR) goto again; if (!WIFEXITED(status)) armci_die("ARMCI: child did not return rc",0); x = WEXITSTATUS(status); } /* restore previous signal handler */ RestoreSigChld(); close(fd[0]); close(fd[1]); if(DEBUG_) printf("%d:in parent: x=%d y=%d\n",armci_me,x,y);fflush(stdout);sleep(1); return y; } ga-5-3/armci/src/memory/shmem.c0000640005473000001440000011161312140267557015257 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: shmem.c,v 1.87.2.2 2007-09-10 23:31:32 manoj Exp $ */ /* System V shared memory allocation and managment * * Interface: * ~~~~~~~~~ * char *Create_Shared_Region(long *idlist, long size, long *offset) * . to be called by just one process. * . calls kr_malloc, malloc-like memory allocator from the K&R book. * kr_malloc inturn calls armci_allocate() that does shmget() and shmat(). * . idlist might be just a pointer to integer or a true array in the * MULTIPLE_REGIONS versions (calling routine has to take care of it) * char *Attach_Shared_Region(long *idlist, long size, long offset) * . called by any other process to attach to existing shmem region or * if attached just calculate the address based on the offset * . has to be called after shmem region was created * void Free_Shmem_Ptr(long id, long size, char* addr) * . called ONLY by the process that created shmem region (id) to return * pointer to kr_malloc (shmem is not destroyed) * void Delete_All_Regions() * . destroys all shared memory regions * . can be called by any process assuming that all processes attached * to alllocated shmem regions * . needs to by called by cleanup procedure(s) * * Jarek Nieplocha, 06.13.94 * */ #ifdef SYSV #define DEBUG_ 0 #define DEBUG1 0 #define DEBUG2_ 0 /* For debugging purposes at the beginning of the shared memory region * creator process can write a stamp which then is read by attaching processes * NOTE: on clusters we cannot use it anymore since ARMCI node master * uses it since Nov 99 to write the value of address it attached at * This feature is used in the ARMCI memlock table. */ #define STAMP 0 #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_IPC_H # include #endif #if HAVE_SYS_SHM_H # include #endif #if HAVE_SYS_PARAM_H # include #endif #if HAVE_ERRNO_H # include #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #include "shmem.h" #include "kr_malloc.h" #include "shmlimit.h" #include "message.h" #include "armcip.h" #ifdef ALLOC_MUNMAP #if HAVE_SYS_MMAN_H # include #endif #if HAVE_UNISTD_H # include #endif static size_t pagesize=0; static int logpagesize=0; /* allow only that big shared memory segment (in MB)- incresed from 128 11/02 */ #define MAX_ALLOC_MUNMAP 128 #define MAX_ALLOC_MUNMAP_ 368 static long max_alloc_munmap=MAX_ALLOC_MUNMAP; #endif #if defined(SUN) extern char *shmat(); #endif #define SHM_UNIT (1024) /* Need to determine the max shmem segment size. There are 2 alternatives: * 1. use predefined SHMMAX if available or set some reasonable values, or * 2. trial-and-error search for a max value (default) * case a) fork a process to determine shmmax size (more accurate) * case b) search w/o forking until success (less accurate) */ /* under Myrinet GM, we cannot fork */ #if defined(GM) || defined(VAPI) # define SHMMAX_SEARCH_NO_FORK #endif #if defined(LAPI) || defined(AIX) || defined(SHMMAX_SEARCH_NO_FORK) # define NO_SHMMAX_SEARCH #endif /* on some platforms with tiny shmmax can try to glue multiple regions */ #if (defined(SUN) || defined(SOLARIS)) && !defined(SHMMAX_SEARCH_NO_FORK) # define MULTIPLE_REGIONS #endif /* Limits for the largest shmem segment are in Kilobytes to avoid passing * Gigavalues to kr_malloc * the limit for the KSR is lower than SHMMAX in sys/param.h because * shmat would fail -- SHMMAX cannot be trusted (a bug) */ #define _SHMMAX 4*1024 #if defined(SUN)||defined(SOLARIS) # undef _SHMMAX # define _SHMMAX (1024) /* memory in KB */ #elif defined(SGI64) || defined(AIX) || defined(CONVEX) # undef _SHMMAX # define _SHMMAX ((unsigned long)512*1024) #elif defined(SGI) && !defined(SGI64) # undef _SHMMAX # define _SHMMAX ((unsigned long)128*1024) #elif defined(KSR) # undef _SHMMAX # define _SHMMAX ((unsigned long)512*1024) #elif defined(HPUX) # undef _SHMMAX # define _SHMMAX ((unsigned long)64*1024) #elif defined(__FreeBSD__) # undef _SHMMAX # define _SHMMAX ((unsigned long)3*1024) #elif defined(LINUX) # if !defined(SHMMAX) /* Red Hat does not define SHMMAX */ # undef _SHMMAX # if defined(__sparc__) || defined(__powerpc__) # define _SHMMAX ((unsigned long)16*1024) # elif defined(__alpha__) # define _SHMMAX ((unsigned long)4072) # else /* Intel */ # define _SHMMAX ((unsigned long)32*1024) # endif # endif #elif defined(SHMMAX) # undef _SHMMAX # define _SHMMAX (((unsigned long)SHMMAX)>>10) #endif static unsigned long MinShmem_per_core = 0; static unsigned long MaxShmem_per_core = 0; static unsigned long MinShmem = _SHMMAX; static unsigned long MaxShmem = MAX_REGIONS*_SHMMAX; static context_t ctx_shmem; /* kr_malloc context */ static context_t *ctx_shmem_global; /* kr_malloc context stored in shmem */ static int create_call=0; #ifdef SHMMAX_SEARCH_NO_FORK static char *ptr_search_no_fork = (char*)0; static int id_search_no_fork=0; #endif #ifdef LINUX #define CLEANUP_CMD(command) sprintf(command,"/usr/bin/ipcrm shm %d",id); #elif defined(SOLARIS) #define CLEANUP_CMD(command) sprintf(command,"/bin/ipcrm -m %d",id); #elif defined(SGI) #define CLEANUP_CMD(command) sprintf(command,"/usr/sbin/ipcrm -m %d",id); #else #define CLEANUP_CMD(command) sprintf(command,"/usr/bin/ipcrm -m %d",id); #endif #ifdef ALLOC_MUNMAP #ifdef QUADRICS # include # include static char *armci_elan_starting_address = (char*)0; # ifdef __ia64__ # define ALLOC_MUNMAP_ALIGN 1024*1024 # else # define ALLOC_MUNMAP_ALIGN 64*1024 # endif # define ALGN_MALLOC(s,a) elan_allocMain(elan_base->state, (a), (s)) #else # define ALGN_MALLOC(s,a) malloc((s)) #endif static char* alloc_munmap(size_t size) { char *tmp; unsigned long iptr; size_t bytes = size+pagesize-1; if(armci_elan_starting_address){ tmp = armci_elan_starting_address; armci_elan_starting_address += size; # ifdef ALLOC_MUNMAP_ALIGN armci_elan_starting_address += ALLOC_MUNMAP_ALIGN; # endif if(DEBUG_) {printf("%d: address for shm attachment is %p size=%ld\n", armci_me,tmp,(long)size); fflush(stdout); } } else { tmp = ALGN_MALLOC(bytes, getpagesize()); if(tmp){ iptr = (unsigned long)tmp + pagesize-1; iptr >>= logpagesize; iptr <<= logpagesize; if(DEBUG_) printf("%d:unmap ptr=%p->%p size=%d pagesize=%d\n",armci_me, tmp,(char*)iptr,(int)size,pagesize); tmp = (char*)iptr; if(munmap(tmp, size) == -1) armci_die("munmap failed",0); if(DEBUG_){printf("%d: unmap OK\n",armci_me); fflush(stdout);} }else armci_die("alloc_munmap: malloc failed",(int)size); } return tmp; } #endif /*\ A wrapper to shmget. Just to be sure that ID is not 0. \*/ static int armci_shmget(size_t size,char *from) { int id; id = shmget(IPC_PRIVATE, size, (IPC_CREAT | 00600)); /*attaching with id 0 somehow fails (Seen on pentium4+linux24+gm163) *so if id=0, shmget again. */ while(id==0){ /* free id=0 and get a new one */ if(shmctl((int)id,IPC_RMID,(struct shmid_ds *)NULL)) { fprintf(stderr,"id=%d \n",id); armci_die("allocate: failed to _delete_ shared region ",id); } id = shmget(IPC_PRIVATE, size, (IPC_CREAT | 00600)); } if(DEBUG_){ printf("\n%d:armci_shmget sz=%ld caller=%s id=%d\n",armci_me,(long)size, from,id); fflush(stdout); } return(id); } /*\ test is a shared memory region of a specified size can be allocated * return 0 (no) or 1 (yes) \*/ int armci_test_allocate(long size) { char *ptr; int id = armci_shmget((size_t)size,"armci_test_allocate"); if (id <0) return 0; /* attach to segment */ ptr = shmat(id, (char *) NULL, 0); /* delete segment id */ if(shmctl( id, IPC_RMID, (struct shmid_ds *)NULL)) fprintf(stderr,"failed to remove shm id=%d\n",id); /* test pointer */ if (((long)ptr) == -1L) return 0; else return 1; } #ifdef SHMMAX_SEARCH_NO_FORK /*\ try to allocate a shared memory region of a specified size; return pointer \*/ static int armci_shmalloc_try(long size) { char *ptr; int id = armci_shmget((size_t) size,"armci_shmalloc_try"); if (id <0) return 0; /* attach to segment */ ptr = shmat(id, (char *) NULL, 0); /* test pointer */ if (((long)ptr) == -1L) return 0; ptr_search_no_fork = ptr; id_search_no_fork = id; return 1; } #endif /* parameters that define range and granularity of search for shm segment size * UBOUND is chosen to be < 2GB to avoid overflowing on 32-bit systems * smaller PAGE gives more accurate results but with more search steps * LBOUND is set to minimum amount for our purposes * change UBOUND=512MB if you need larger arrays than 512 MB */ #define PAGE (16*65536L) #define LBOUND 1048576L #if defined(MULTI_CTX) && defined(QUADRICS) #define UBOUND 256*LBOUND #else #define UBOUND 512*LBOUND #endif #define ARMCI_STRINGIFY(str) #str #define ARMCI_CONCAT(str) strL #ifndef ARMCI_DEFAULT_SHMMAX_UBOUND #define ARMCI_DEFAULT_SHMMAX_UBOUND 8192 #endif static long get_user_shmmax() { char *uval; int x=0; uval = getenv("ARMCI_DEFAULT_SHMMAX"); if(uval != NULL){ sscanf(uval,"%d",&x); if(x<1 || x> ARMCI_DEFAULT_SHMMAX_UBOUND){ fprintf(stderr, "incorrect ARMCI_DEFAULT_SHMMAX should be <1," ARMCI_STRINGIFY(ARMCI_DEFAULT_SHMMAX) ">mb and 2^N Found=%ld\n",x); x=0; } } return ((long)x)*1048576L; /* return value in bytes */ } /*\ determine the max shmem segment size using bisection \*/ int armci_shmem_test() { long x; int i,rc; long upper_bound=UBOUND; long lower_bound=0; x = get_user_shmmax(); if(!x) x = upper_bound; else upper_bound =x; if(DEBUG_){printf("%d: x = %ld upper_bound=%ld\n",armci_me, x, upper_bound); fflush(stdout);} for(i=1;;i++){ long step; rc = armci_test_allocate(x); if(DEBUG_) printf("%d:test %d size=%ld bytes status=%d\n",armci_me,i,x,rc); if(rc){ lower_bound = x; step = (upper_bound -x)>>1; if(step < PAGE) break; x += step; }else{ upper_bound = x; step = (x-lower_bound)>>1; if(step>=20; x <<=20; } if(!lower_bound){ /* try if can get LBOUND - necessary if search starts from UBOUND */ lower_bound=LBOUND; rc = armci_test_allocate(lower_bound); if(!rc) return(0); } if(DEBUG_) printf("%ld bytes segment size, %d calls \n",lower_bound,i); return (int)( lower_bound>>20); /* return shmmax in mb */ } #ifdef SHMMAX_SEARCH_NO_FORK /*\ determine the max shmem segment size by halving \*/ static int armci_shmem_test_no_fork() { long x; int i,rc; long lower_bound=_SHMMAX*SHM_UNIT; #define UBOUND_SEARCH_NO_FORK (256*SHM_UNIT*SHM_UNIT) x = get_user_shmmax(); if(!x) x = UBOUND_SEARCH_NO_FORK; for(i=1;;i++){ rc = armci_shmalloc_try(x); if(DEBUG_) printf("%d:test by halving size=%ld bytes rc=%d\n",armci_me,x,rc); if(rc){ lower_bound = x; break; }else{ x >>= 1 ; if(x>20); /* return shmmax in mb */ } #endif #ifdef MULTI_CTX void armci_nattach_preallocate_info(int* segments, int *segsize) { int x; char *uval; uval = getenv("LIBELAN_NATTACH"); if(uval != NULL){ sscanf(uval,"%d",&x); if(x<2 || x>8) armci_die("Error in LIBELAN_NATTACH <8, >1 ",(int)x); }else armci_die("Inconsistent configuration: ARMCI needs LIBELAN_NATTACH",0); *segments =x; *segsize = (int) (SHM_UNIT * MinShmem); } #endif /* Create shared region to store kr_malloc context in shared memory */ void armci_krmalloc_init_ctxshmem() { void *myptr=NULL; long idlist[SHMIDLEN]; long size; int offset = sizeof(void*)/sizeof(int); /* to store shared memory context and myptr */ size = SHMEM_CTX_MEM; if(armci_me == armci_master ){ myptr = Create_Shared_Region(idlist+1,size,idlist); if(!myptr && size>0 ) armci_die("armci_krmalloc_init_ctxshmem: could not create", (int)(size>>10)); if(size) *(volatile void**)myptr = myptr; if(DEBUG_){ printf("%d:armci_krmalloc_init_ctxshmem addr mptr=%p ref=%p size=%ld\n", armci_me, myptr, *(void**)myptr, size); fflush(stdout); } /* Bootstrapping: allocate storage for ctx_shmem_global. NOTE:there is offset,as master places its address at begining for others to see */ ctx_shmem_global = (context_t*) ( ((int*)myptr)+offset ); *ctx_shmem_global = ctx_shmem; /*master copies ctx into shared region */ } /* broadcast shmem id to other processes on the same cluster node */ armci_msg_clus_brdcst(idlist, SHMIDLEN*sizeof(long)); if(armci_me != armci_master){ myptr=(double*)Attach_Shared_Region(idlist+1,size,idlist[0]); if(!myptr)armci_die("armci_krmalloc_init_ctxshmem: could not attach", (int)(size>>10)); /* now every process in a SMP node needs to find out its offset * w.r.t. master - this offset is necessary to use memlock table */ if(size) armci_set_mem_offset(myptr); if(DEBUG_){ printf("%d:armci_krmalloc_init_ctxshmem attached addr mptr=%p ref=%p size=%ld\n", armci_me,myptr, *(void**)myptr,size); fflush(stdout); } /* store context info */ ctx_shmem_global = (context_t*) ( ((int*)myptr)+offset ); if(DEBUG_){ printf("%d:armci_krmalloc_init_ctxshmem: shmid=%d off=%ld size=%ld\n", armci_me, ctx_shmem_global->shmid, ctx_shmem_global->shmoffset, (long)ctx_shmem_global->shmsize); fflush(stdout); } } } void armci_shmem_init() { #ifdef ALLOC_MUNMAP #if defined(QUADRICS) # if (defined(__ia64__) || defined(__alpha)) && !defined(DECOSF) /* this is to determine size of Elan Main memory allocator for munmap */ long x; char *uval; uval = getenv("LIBELAN_ALLOC_SIZE"); if(uval != NULL){ sscanf(uval,"%ld",&x); if((x>80000000) && (x< 4*1024*1024*1024L)){ max_alloc_munmap = (x>>20) - 72; if(DEBUG_){ printf("%d: max_alloc_munmap is %ld\n",armci_me,max_alloc_munmap); fflush(stdout); } } } /* an alternative approach is to use MMAP area where we get the address from the Elan environment variable in qsnetlibs 1.4+ */ uval = getenv("LIBELAN3_MMAPBASE"); if(uval != NULL){ sscanf(uval,"%p",&armci_elan_starting_address); } # endif # if defined(__ia64__) /* need aligment on 1MB boundary rather than the actual pagesize */ pagesize = 1024*1024; logpagesize = 20; # else /* determine log2(pagesize) needed for address alignment */ int tp=512; logpagesize = 9; pagesize = getpagesize(); if(tp>pagesize)armci_die("armci_shmem_init:pagesize",pagesize); while(tpmax_alloc_munmap && !armci_elan_starting_address) x=max_alloc_munmap; # else x = 10; /* mb */ # endif # endif if(DEBUG_){ printf("%d:shmem_init: %d mbytes max segment size\n",armci_me,x);fflush(stdout);} MinShmem = (long)(x<<10); /* make sure it is in kb: mb <<10 */ MaxShmem = MAX_REGIONS*MinShmem; # ifdef REPORT_SHMMAX printf("%d using x=%d SHMMAX=%ldKB\n", armci_me,x, MinShmem); fflush(stdout); # endif #else /* nothing to do here - limits were given */ #endif } armci_krmalloc_init_ctxshmem(); if(DEBUG_)printf("%d: out of shmem_init\n",armci_me); } void armci_set_shmem_limit_per_node(int nslaves) { if (MaxShmem_per_core > 0) MaxShmem = nslaves*MaxShmem_per_core; if (MinShmem_per_core > 0) MinShmem = nslaves*MinShmem_per_core; } void armci_set_shmem_limit_per_core(unsigned long shmemlimit) { MaxShmem_per_core = (shmemlimit + SHM_UNIT - 1)/SHM_UNIT; MinShmem_per_core = (shmemlimit + SHM_UNIT - 1)/SHM_UNIT; } /*\ application can reset the upper limit (bytes) for memory allocation \*/ void armci_set_shmem_limit(unsigned long shmemlimit) { unsigned long kbytes; kbytes = (shmemlimit + SHM_UNIT -1)/SHM_UNIT; if(MaxShmem > kbytes) MaxShmem = kbytes; if(MinShmem > kbytes) MinShmem = kbytes; } static void shmem_errmsg(size_t size) { long sz=(long)size; printf("******************* ARMCI INFO ************************\n"); printf("The application attempted to allocate a shared memory segment "); printf("of %ld bytes in size. This might be in addition to segments ",sz); printf("that were allocated succesfully previously. "); printf("The current system configuration does not allow enough "); printf("shared memory to be allocated to the application.\n"); printf("This is most often caused by:\n1) system parameter SHMMAX "); printf("(largest shared memory segment) being too small or\n"); printf("2) insufficient swap space.\n"); printf("Please ask your system administrator to verify if SHMMAX "); printf("matches the amount of memory needed by your application and "); printf("the system has sufficient amount of swap space. "); printf("Most UNIX systems can be easily reconfigured "); printf("to allow larger shared memory segments,\n"); printf("see http://www.emsl.pnl.gov/docs/global/support.shtml\n"); printf("In some cases, the problem might be caused by insufficient swap space.\n"); printf("*******************************************************\n"); } static struct shm_region_list{ char *addr; long id; long sz; long attached; }region_list[MAX_REGIONS]; static int alloc_regions=0; static long occup_blocks=0; /* Terminology * region - actual piece of shared memory allocated from OS * block - a part of allocated shmem that is given to the requesting process */ #if defined(MULTIPLE_REGIONS) /********************************* MULTIPLE_REGIONS *******************/ /* allocate contiguous shmem -- glue pieces together -- works on SUN * SUN max shmem segment is only 1MB so we might need several to satisfy request */ /* SHM_OP is an operator to calculate shmem address to attach * might be + or - depending on the system */ #if defined(DECOSF) || defined(LINUX) #define SHM_OP + #else #define SHM_OP - #endif static int prev_alloc_regions=0; unsigned long armci_max_region() { /* we assume that at least two regions can be glued */ return MinShmem*2; } /*\ * assembles the list of shmem id for the block \*/ int find_regions(char *addrp, long* idlist, int *first) { int reg, nreg, freg=-1, min_reg, max_reg; /* find the region where addrp belongs */ for(reg = 0; reg < alloc_regions-1; reg++){ if(region_list[reg].addr < region_list[reg+1].addr){ min_reg = reg; max_reg = reg+1; }else{ min_reg = reg+1; max_reg = reg; } if(region_list[min_reg].addr <= addrp && region_list[max_reg].addr > addrp){ freg = min_reg; break; } } /* if not found yet, it must be the last region */ if(freg < 0) freg=alloc_regions-1; if( alloc_regions == prev_alloc_regions){ /* no new regions were allocated this time - just get the id */ idlist[0] = 1; idlist[1] = region_list[freg].id; }else{ /* get ids of the allocated regions */ idlist[0] = alloc_regions - prev_alloc_regions; if(idlist[0] < 0)armci_die("armci find_regions error ",0); for(reg =prev_alloc_regions,nreg=1; reg =MAX_REGIONS) armci_die("Attach_Shared_Region: too many regions ",0L); /* first time needs to initialize region_list structure */ if(!alloc_regions){ for(reg=0;reg(b)? (b): (a)) char *temp = (char*)0, *pref_addr=(char*)0, *ftemp; int id, newreg, i; size_t sz; if(DEBUG1){ printf("%d:Shmem allocate: size %ld bytes\n",armci_me,size); fflush(stdout); } newreg = (size+(SHM_UNIT*MinShmem)-1)/(SHM_UNIT*MinShmem); if( (alloc_regions + newreg)> MAX_REGIONS) armci_die("allocate: to many regions already allocated ",(long)newreg); prev_alloc_regions = alloc_regions; if(DEBUG_)fprintf(stderr, "in allocate size=%ld\n",size); #ifdef ALLOC_MUNMAP pref_addr = alloc_munmap((size_t) size); #else pref_addr = (char*)0; /* first time let the OS choose address */ #endif /* allocate shmem in as many segments as neccesary */ for(i =0; i< newreg; i++){ long szl; szl =(i==newreg-1)?size-i*MinShmem*SHM_UNIT: min(size,SHM_UNIT*MinShmem); sz = (size_t) szl; if ( (int)(id = armci_shmget(sz,"MULTIPLE_REGIONarmci_allocate")) < 0){ fprintf(stderr,"%d:id=%d size=%d MAX=%ld\n",armci_me,id,szl,MinShmem); alloc_regions++; shmem_errmsg(size); armci_die("allocate: failed to create shared region ",id); } /* make sure the next shmem region will be adjacent to previous one */ if(temp) pref_addr= temp SHM_OP (MinShmem*SHM_UNIT); if(DEBUG_)printf("calling shmat:id=%d adr=%p sz=%ld\n",id,pref_addr,szl); if ( (long)(temp = (char*)shmat(id, pref_addr, 0)) == -1L){ char command[64]; CLEANUP_CMD(command); if(system(command) == -1) printf("Please clean shared memory (id=%d): see man ipcrm\n",id); if(pref_addr){ printf("ARMCI shared memory allocator was unable to obtain from "); printf("the operating system multiple segments adjacent to "); printf("each other in order to combine them into a one large "); printf("segment together\n"); shmem_errmsg(size); armci_die("allocate: failed to attach to shared region", 0L); } } POST_ALLOC_CHECK(temp,MinShmem*SHM_UNIT); region_list[alloc_regions].addr = temp; region_list[alloc_regions].id = id; region_list[alloc_regions].attached=1; if(DEBUG_) fprintf(stderr," allocate:attach: id=%d addr=%p \n",id, temp); alloc_regions++; if(i==0)ftemp = temp; } return (void*)(min(ftemp,temp)); } /************************** END of MULTIPLE_REGIONS *******************/ #else /* Now, the machines where shm segments are not glued together */ static int last_allocated=-1; unsigned long armci_max_region() { return MinShmem; } int find_regions(char *addrp, long* id, int *region) { int nreg, reg; if(last_allocated!=-1){ reg=last_allocated; last_allocated = -1; } else{ for(reg=-1,nreg=0;nreg= region_list[nreg].addr && addrp < (region_list[nreg].addr + region_list[nreg].sz)) { reg = nreg; break; } } if(reg == -1) armci_die("find_regions: failed to locate shared region", 0L); } *region = reg; *id = region_list[reg].id; return 1; } /* returns the shmem info based on the addr */ int armci_get_shmem_info(char *addrp, int* shmid, long *shmoffset, size_t *shmsize) { int region; long id; find_regions(addrp, &id, ®ion); *shmid = id; *shmoffset = (long)(addrp - region_list[region].addr); *shmsize = region_list[region].sz; return 1; } long armci_shm_reg_size(int i, long id) { if(i<0 || i>= MAX_REGIONS)armci_die("armci_shmem_reg_size: bad i",i); return region_list[i].sz; } void* armci_shm_reg_ptr(int i) { if(i<0 || i>= MAX_REGIONS)armci_die("armci_shmem_reg_ptr: bad i",i); return (void *)region_list[i].addr; } Header *armci_get_shmem_ptr(int shmid, long shmoffset, size_t shmsize) { /* returns, address of the shared memory region based on shmid, offset. * (i.e. return_addr = stating address of shmid + offset)*/ long idlist[SHMIDLEN]; Header *p = NULL; idlist[1] = (long)shmid; idlist[0] = shmoffset; idlist[IDLOC+1] = shmsize; /* CHECK : idlist in CreateShmem????*/ if(!(p=(Header*)Attach_Shared_Region(idlist+1, shmsize, idlist[0]))) armci_die("kr_malloc:could not attach",(int)(p->s.shmsize>>10)); #if DEBUG_ printf("%d: armci_get_shmem_ptr: %d %ld %ld %p\n", armci_me, idlist[1], idlist[0], shmsize, p); fflush(stdout); #endif return p; } char *Attach_Shared_Region(id, size, offset) long *id, offset, size; { int reg, found, shmflag=0; static char *temp; #if defined(SGI_N32) && defined(SHM_SGI_ANYADDR) shmflag= SHM_SGI_ANYADDR; #endif if(alloc_regions>=MAX_REGIONS) armci_die("Attach_Shared_Region: to many regions ",0); if(DEBUG_){ printf("%d:AttachSharedRegion %d:size=%ld id=%ld\n", armci_me, create_call++, size,*id); fflush(stdout); } /* under Linux we can get valid id=0 */ #ifndef LINUX if(!*id) armci_die("Attach_Shared_Region: shmem ID=0 ",(int)*id); #endif /* first time needs to initialize region_list structure */ if(!alloc_regions){ for(reg=0;reg= MAX_REGIONS) armci_die("Create_Shared_Region:allocate:too many regions allocated ",0); last_allocated = alloc_regions; #ifdef SHMMAX_SEARCH_NO_FORK if (ptr_search_no_fork){ temp = ptr_search_no_fork; id = id_search_no_fork; ptr_search_no_fork = (char*)0; /* do not look at it again */ }else #endif { if ( (id = armci_shmget(sz,"armci_allocate")) < 0 ) { fprintf(stderr,"id=%d size=%ld\n",id, size); shmem_errmsg(sz); armci_die("allocate: failed to create shared region ",id); } if ( (long)( (temp = shmat(id, pref_addr, shmflag))) == -1L){ char command[64]; CLEANUP_CMD(command); if(system(command) == -1) printf("Please clean shared memory (id=%d): see man ipcrm\n",id); armci_die("allocate: failed to attach to shared region id=",id); } if(DEBUG_){ printf("%d:allocate:attach:id=%d paddr=%p size=%ld\n",armci_me,id,temp,size); fflush(stdout); } #if !defined(AIX) && !defined(HPUX64) /* delete segment id so that OS cleans it when all attached processes are gone */ if(shmctl( id, IPC_RMID, (struct shmid_ds *)NULL)) fprintf(stderr,"failed to remove shm id=%d\n",id); #endif } POST_ALLOC_CHECK(temp,sz); region_list[alloc_regions].addr = temp; region_list[alloc_regions].id = id; region_list[alloc_regions].attached=1; region_list[alloc_regions].sz=sz; alloc_regions++; if(DEBUG2_){ printf("%d:allocate:id=%d addr=%p size=%ld\n",armci_me,id,temp,size); fflush(stdout); } #ifdef ALLOW_PIN armci_region_register_shm(temp, size); #endif return (void*) (temp); } #endif /******************** common code for the two versions *********************/ /*\ Allocate a block of shared memory - called by master process \*/ char *Create_Shared_Region(long *id, long size, long *offset) { char *temp; int reg, refreg=0,nreg; if(alloc_regions>=MAX_REGIONS) armci_die("Create_Shared_Region: to many regions ",0); if(DEBUG_){ printf("%d:CreateSharedRegion %d:size=%ld\n",armci_me,create_call++,size); fflush(stdout); } /*initialization: 1st allocation request */ if(!alloc_regions){ for(reg=0;reg #endif #ifdef WIN32 # include # include # define GETPID _getpid #elif defined(NEC) # if HAVE_UNISTD_H # include # endif # include typedef void* HANDLE; typedef void* LPVOID; # define GETPID getpid #elif defined(HITACHI) # if HAVE_UNISTD_H # include # endif # define PAGE_SIZE 0x1000 # define ROUND_UP_PAGE(size) ((size + (PAGE_SIZE-1)) & ~(PAGE_SIZE-1)) # if HAVE_STRINGS_H # include # endif # if HAVE_STDLIB_H # include # endif # include # include typedef long HANDLE; typedef char* LPVOID; # define GETPID getpid static long cb_key=1961; static long _hitachi_reg_size; #elif defined(MMAP) # if HAVE_FCNTL_H # include # endif # if HAVE_UNISTD_H # include # endif # if HAVE_SYS_STAT_H # include # endif # if HAVE_SYS_MMAN_H # include # endif typedef int HANDLE; typedef void* LPVOID; # define GETPID getpid #else # ifndef _POSIX_C_SOURCE # define _POSIX_C_SOURCE 199309L # endif # if HAVE_FCNTL_H # include # endif # if HAVE_UNISTD_H # include # endif # if HAVE_SYS_STAT_H # include # endif # if HAVE_SYS_MMAN_H # include # endif typedef int HANDLE; typedef void* LPVOID; # define GETPID getpid #endif #if HAVE_ASSERT_H # include #endif #include "kr_malloc.h" #include "shmem.h" #include "armcip.h" #include "armci.h" #define SHM_UNIT (1024) /* default unit for shared memory allocation in KB! */ #if defined(WIN32) # define _SHMMAX 32678 #elif defined(MACX) # define _SHMMAX 64*1024 #else # define _SHMMAX 2*32678 #endif #define SET_MAPNAME(id) sprintf(map_fname,"/tmp/ARMCIshmem.%d.%d",parent_pid,(id)) /*********************** global data structures ****************************/ /* Terminology * region - actual piece of shared memory allocated from OS * block - a part of allocated shmem that is given to the requesting process */ /* array holds handles and addreses for each shmem region*/ static struct shm_region_list{ char *addr; HANDLE id; long size; }region_list[MAX_REGIONS]; static char map_fname[64]; static int alloc_regions=0; /* counter to identify mapping handle */ static int last_allocated=0; /* counter trailing alloc_regions by 0/1 */ /* Min and Max amount of aggregate memory that can be allocated */ static unsigned long MinShmem_per_core = 0; static unsigned long MaxShmem_per_core = 0; static unsigned long MinShmem = _SHMMAX; static unsigned long MaxShmem = MAX_REGIONS*_SHMMAX; static context_t ctx_winshmem; /* kr_malloc context */ static context_t *ctx_winshmem_global;/*for processor groups,kr_malloc context is stored in shared memory */ static int parent_pid=-1; /* process id of process 0 "parent" */ extern int armci_me; /* Create shared region to store kr_malloc context in shared memory */ void armci_krmalloc_init_ctxwinshmem() { void *myptr=NULL; long idlist[SHMIDLEN]; long size; int offset = sizeof(void*)/sizeof(int); /* to store shared memory context and myptr */ size = SHMEM_CTX_MEM; if(armci_me == armci_master ){ myptr = Create_Shared_Region(idlist+1,size,idlist); if(!myptr && size>0 ) armci_die("armci_krmalloc_init_ctxwinshmem: could not create", (int)(size>>10)); if(size) *(volatile void**)myptr = myptr; if(DEBUG){ printf("%d:armci_krmalloc_init_ctxwinshmem addr mptr=%p ref=%p size=%ld\n", armci_me, myptr, *(void**)myptr, size); fflush(stdout); } /* Bootstrapping: allocate storage for ctx_winshmem_global. NOTE:there is offset,as master places its addr at begining for others to see */ ctx_winshmem_global = (context_t*) ( ((int*)myptr)+offset ); *ctx_winshmem_global=ctx_winshmem;/*master copies ctx into shared rgn*/ } /* broadcast shmem id to other processes on the same cluster node */ armci_msg_clus_brdcst(idlist, SHMIDLEN*sizeof(long)); if(armci_me != armci_master){ myptr=(double*)Attach_Shared_Region(idlist+1,size,idlist[0]); if(!myptr)armci_die("armci_krmalloc_init_ctxwinshmem: could not attach", (int)(size>>10)); /* now every process in a SMP node needs to find out its offset * w.r.t. master - this offset is necessary to use memlock table */ if(size) armci_set_mem_offset(myptr); if(DEBUG){ printf("%d:armci_krmalloc_init_ctxwinshmem attached addr mptr=%p ref=%p size=%ld\n", armci_me,myptr, *(void**)myptr,size); fflush(stdout); } /* store context info */ ctx_winshmem_global = (context_t*) ( ((int*)myptr)+offset ); if(DEBUG){ printf("%d:armci_krmalloc_init_ctxwinshmem:shmid=%d off=%ld size=%ld\n", armci_me, ctx_winshmem_global->shmid,ctx_winshmem_global->shmoffset, (long)ctx_winshmem_global->shmsize); fflush(stdout); } } } /* not done here yet */ void armci_shmem_init() { armci_krmalloc_init_ctxwinshmem(); } unsigned long armci_max_region() { return MinShmem; } void armci_set_shmem_limit_per_node(int nslaves) { if (MaxShmem_per_core > 0) MaxShmem = nslaves*MaxShmem_per_core; if (MinShmem_per_core > 0) MinShmem = nslaves*MinShmem_per_core; } void armci_set_shmem_limit_per_core(unsigned long shmemlimit) { MaxShmem_per_core = (shmemlimit + SHM_UNIT - 1)/SHM_UNIT; MinShmem_per_core = (shmemlimit + SHM_UNIT - 1)/SHM_UNIT; } /*\ application can reset the upper limit for memory allocation \*/ void armci_set_shmem_limit(unsigned long shmemlimit) /* comes in bytes */ { unsigned long kbytes; kbytes = (shmemlimit + SHM_UNIT -1)/SHM_UNIT; if(MaxShmem > kbytes) MaxShmem = kbytes; if(MinShmem > kbytes) MinShmem = kbytes; } void Delete_All_Regions() { int reg; for(reg = 0; reg < alloc_regions; reg++){ if(region_list[reg].addr != (char*)0){ # if defined(WIN32) UnmapViewOfFile(region_list[reg].addr); CloseHandle(region_list[reg].id); # elif defined(NEC) (int)dp_xmfree(region_list[reg].addr); # else munmap(region_list[reg].addr, region_list[reg].size); SET_MAPNAME(reg); (void)unlink(map_fname); # endif region_list[reg].addr = (char*)0; } } } /*\ only process that created shared region returns the pointer to kr_malloc \*/ void Free_Shmem_Ptr(long id, long size, char* addr) { kr_free(addr, ctx_winshmem_global); } char *armci_get_core_from_map_file(int exists, long size) { LPVOID ptr; #if defined(HITACHI) Cb_object_t oid; int desc; region_list[alloc_regions].addr = (char*)0; if(exists){ int rc,nsize=_hitachi_reg_size; if(size < MinShmem*SHM_UNIT) size = MinShmem*SHM_UNIT; nsize = ROUND_UP_PAGE(nsize); if((rc=combuf_object_get(region_list[alloc_regions].id,(Cb_size_t)nsize,0, &oid)) != COMBUF_SUCCESS) armci_die("attaching combufget fail",0); if((rc=combuf_map(oid, 0, (Cb_size_t)nsize, COMBUF_COMMON_USE, &ptr)) != COMBUF_SUCCESS) armci_die("combuf map failed",0); }else{ int rc; size = ROUND_UP_PAGE(size); if((rc=combuf_object_get(cb_key,(Cb_size_t)size,COMBUF_OBJECT_CREATE,&oid)) != COMBUF_SUCCESS) armci_die("creat combufget fail",0); if((rc=combuf_map(oid, 0, (Cb_size_t)size, COMBUF_COMMON_USE, &ptr)) != COMBUF_SUCCESS) armci_die("combuf map failed",0); /* make the region suitable for communication */ if(combuf_create_field(oid, ptr, (Cb_size_t)size, FIELD_NUM, 0, 0, &desc) != COMBUF_SUCCESS) armci_die("create field failed",0); region_list[alloc_regions].id = cb_key; _hitachi_reg_size=size; cb_key++; /* increment for next combuf create call */ } #elif defined(NEC) region_list[alloc_regions].addr = (char*)0; if(exists) ptr = dp_xmatt(parent_pid, region_list[alloc_regions].id, (void*)0); else { ptr = dp_xmalloc((void*)0, (long long) size); region_list[alloc_regions].id = ptr; } if(ptr == (void*)-1) return ((char*)0); #else HANDLE h_shm_map; SET_MAPNAME(alloc_regions); region_list[alloc_regions].addr = (char*)0; #if defined(WIN32) h_shm_map = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, (int)size, map_fname); if(h_shm_map == NULL) return NULL; if(exists){ /* get an error code when mapping should exist */ if (GetLastError() != ERROR_ALREADY_EXISTS){ CloseHandle(h_shm_map); fprintf(stderr,"map handle does not exist (attach)\n"); return NULL; }else { /* OK */ } } else { /* problem if mapping it should not be there */ if (GetLastError() == ERROR_ALREADY_EXISTS){ CloseHandle(h_shm_map); fprintf(stderr,"map handle already exists (create)\n"); return NULL; } } /* now map file into process address space */ ptr = MapViewOfFile(h_shm_map, FILE_MAP_WRITE | FILE_MAP_READ, 0, 0, 0); if((char*)ptr == NULL){ CloseHandle(h_shm_map); h_shm_map = INVALID_HANDLE_VALUE; } #elif defined(MMAP)&&!defined(HITACHI) && !defined(MACX) if(exists){ if(size < MinShmem*SHM_UNIT) size = MinShmem*SHM_UNIT; h_shm_map = open(map_fname, O_RDWR, S_IRWXU); if(h_shm_map <0) return NULL; }else{ (void)unlink(map_fname); /* sanity cleanup */ h_shm_map = open(map_fname, O_CREAT|O_RDWR, S_IRWXU); if(h_shm_map <0) return NULL; if(ftruncate(h_shm_map,size) < 0) return NULL; } ptr = mmap((caddr_t)0, (size_t)size, PROT_READ|PROT_WRITE, MAP_SHARED, h_shm_map, 0); close(h_shm_map); h_shm_map = -1; #elif defined(MACX) if(exists){ if(size < MinShmem*SHM_UNIT) size = MinShmem*SHM_UNIT; h_shm_map = shm_open(map_fname, O_RDWR, S_IRWXU); if(h_shm_map == -1) return NULL; }else{ (void)shm_unlink(map_fname); /* sanity cleanup */ h_shm_map = shm_open(map_fname, O_CREAT|O_RDWR, S_IRWXU); if(h_shm_map<0) perror("open"); if(h_shm_map == -1) return NULL; if(ftruncate(h_shm_map,size) < 0){ perror("ftruncate"); return NULL; } } ptr = mmap(0, size, PROT_READ|PROT_WRITE, MAP_SHARED, h_shm_map, 0L); if((long)ptr <0){ perror("mmap"); return NULL; } close(h_shm_map); h_shm_map = -1; #else if(exists){ h_shm_map = shm_open(map_fname, O_RDWR, S_IRWXU); if(h_shm_map == -1) return NULL; }else{ (void)shm_unlink(map_fname); /* sanity cleanup */ h_shm_map = shm_open(map_fname, O_CREAT|O_RDWR, S_IRWXU); if(h_shm_map) perror("shm_open"); if(h_shm_map == -1) return NULL; if(ftruncate(h_shm_map,size) < 0) return NULL; } ptr = mmap(0, size, PROT_READ|PROT_WRITE, MAP_SHARED, h_shm_map, 0L); close(h_shm_map); h_shm_map = -1; #endif /* save file handle in the array to close it in the future */ region_list[alloc_regions].id = h_shm_map; #endif if(DEBUG0){printf("%d: got ptr=%p bytes=%ld mmap\n",armci_me,ptr,size); fflush(stdout); } region_list[alloc_regions].addr = (char*)ptr; region_list[alloc_regions].size = size; return((char*)ptr); } int find_regions(char *addrp, long* id, int *region) { int nreg, reg; if(last_allocated!=-1){ reg=last_allocated; last_allocated = -1; } else{ for(reg=0,nreg=0;nreg addrp )break; reg = nreg; } } *region = reg; *id = reg; return 1; } /*\ function called by shared memory allocator (kr_malloc) \*/ char *armci_allocate(size_t size) { char *ptr; if(alloc_regions>= MAX_REGIONS) armci_die("max alloc regions exceeded", alloc_regions); ptr = armci_get_core_from_map_file( 0, (long)size); if(ptr !=NULL) alloc_regions++; if(DEBUG)printf("%d:got more core %lx %ld this was %d segment allocated\n",armci_me,(unsigned long)ptr, (long)size, alloc_regions); return ptr; } char* Create_Shared_Region(long idlist[], long size, long *offset) { char *temp; int reg; /*initialization */ if(!alloc_regions){ for(reg=0;reg= MAX_REGIONS)armci_die("armci_shmem_reg_size: bad i",i); if(region_list[i].id !=(HANDLE)id)armci_die("armci_shmem_reg_size id",(int)id); return region_list[i].size; } char* armci_shmem_reg_ptr(int i) { if(i<0 || i>= MAX_REGIONS)armci_die("armci_shmem_reg_ptr: bad i",i); return region_list[i].addr; } int armci_get_shmem_info(char *addrp, int* shmid, long *shmoffset, size_t *shmsize) { int region; long idlist[SHMIDLEN]; if(!find_regions(addrp,idlist,®ion)) armci_die("CreateSharedRegion: allocation inconsitent",0); *shmid = (int) (*idlist); *shmoffset = (long)(addrp - region_list[region].addr); *shmsize = region_list[region].size; #if DEBUG printf("%d: armci_get_shmem_info: shmid=%d offset=%ld size=%ld %p\n", armci_me, *shmid, *shmoffset, *shmsize, addrp); fflush(stdout); #endif return 1; } Header *armci_get_shmem_ptr(int shmid, long shmoffset, size_t shmsize) { /* returns, address of the shared memory region based on shmid, offset. * (i.e. return_addr = stating address of shmid + offset)*/ long idlist[SHMIDLEN]; Header *p = NULL; idlist[1] = (long)shmid; idlist[0] = shmoffset; idlist[IDLOC+1] = shmsize; if(!(p=(Header*)Attach_Shared_Region(idlist+1, shmsize, shmoffset))) armci_die("armci_get_shmem_ptr: could not attach", (int)(shmsize>>10)); #if DEBUG printf("%d: armci_get_shmem_ptr: shmid=%d offset=%ld size=%ld %p\n", armci_me, shmid, shmoffset, shmsize, p); fflush(stdout); #endif return p; } ga-5-3/armci/src/memory/memory.c0000640005473000001440000011272211633465620015455 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: memory.c,v 1.56.2.3 2007-04-25 23:49:55 d3p687 Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_ASSERT_H # include #endif #include "armcip.h" #include "message.h" #include "kr_malloc.h" #define DEBUG_ 0 #define USE_MALLOC #define USE_SHMEM_ #define SHM_UNIT 1024 #if defined(CRAY_SHMEM) extern void armci_shmalloc_exchange_address(void **ptr_arr); extern void armci_shmalloc_exchange_offsets(context_t *); # if defined(CRAY_XT) # include # ifdef CATAMOUNT # include # endif # endif #endif static context_t ctx_localmem; #if defined(PORTALS_WITHREG) || defined(PORTALS) || defined(ALLOW_PIN) static context_t ctx_mlocalmem; #endif #if defined(SYSV) || defined(WIN32) || defined(MMAP) || defined(HITACHI) #include "shmem.h" #if !defined(USE_SHMEM) && (defined(HITACHI) || defined(MULTI_CTX)) # define USE_SHMEM #endif #if !(defined(LAPI)||defined(QUADRICS)||defined(SERVER_THREAD)) ||\ defined(USE_SHMEM) #define RMA_NEEDS_SHMEM #endif #if defined(DATA_SERVER) && !defined(SERVER_THREAD) extern int _armci_server_started; #endif /**************************************************************************** * Memory Allocator called by kr_malloc on SGI Altix to get more core from OS */ #ifdef SGIALTIX #include #if HAVE_UNISTD_H # include #endif #define DEF_UNITS (64) #define MAX_SEGS 512 #define _SHMMAX_ALTIX 32*1024 /* 32 MB */ #define _SHMMAX_ALTIX_GRP 512*1024 /* 512 MB */ static context_t altix_ctx_shmem; static context_t altix_ctx_shmem_grp; static size_t altix_pagesize; extern void armci_memoffset_table_newentry(void *ptr, size_t seg_size); void *armci_altix_allocate(size_t bytes) { void *ptr, *sptr; ARMCI_PR_DBG("enter",0); sptr=ptr= shmalloc(bytes); if(sptr == NULL) armci_die("armci_altix_allocate: shmalloc failed\n", armci_me); armci_memoffset_table_newentry(ptr, bytes); #if 0 if(ptr){ /* touch each page to establish ownership */ int i; for(i=0; i< bytes/altix_pagesize; i++){ *(double*)ptr=0.; ((char*)ptr) += altix_pagesize; } } #endif ARMCI_PR_DBG("exit",0); return sptr; } void armci_altix_shm_init() { ARMCI_PR_DBG("enter",0); altix_pagesize = getpagesize(); kr_malloc_init(SHM_UNIT, _SHMMAX_ALTIX, 0, armci_altix_allocate, 0, &altix_ctx_shmem); kr_malloc_init(SHM_UNIT, _SHMMAX_ALTIX_GRP, _SHMMAX_ALTIX_GRP, armci_altix_allocate, 0, &altix_ctx_shmem_grp); /* allocate a huge segment for groups. When kr_malloc() is called for the first time for this altix_ctx_shmem_grp context with some minimal size of 8 bytes, a huge segment of size (SHM_UNIT*_SHMMAX_ALTIX_GRP) will be created */ { void *ptr; ptr=kr_malloc((size_t)8, &altix_ctx_shmem_grp); if(ptr==NULL) armci_die("armci_altix_shm_init(): malloc failed", armci_me); } ARMCI_PR_DBG("exit",0); } void armci_altix_shm_malloc(void *ptr_arr[], armci_size_t bytes) { long size=bytes; void *ptr; int i; ARMCI_PR_DBG("enter",0); armci_msg_lgop(&size,1,"max"); ptr=kr_malloc((size_t)size, &altix_ctx_shmem); bzero(ptr_arr,(armci_nproc)*sizeof(void*)); ptr_arr[armci_me] = ptr; if(size!=0 && ptr==NULL) armci_die("armci_altix_shm_malloc(): malloc failed", armci_me); for(i=0; i< armci_nproc; i++) if(i!=armci_me) ptr_arr[i]=shmem_ptr(ptr,i); ARMCI_PR_DBG("exit",0); } #ifdef MPI void armci_altix_shm_malloc_group(void *ptr_arr[], armci_size_t bytes, ARMCI_Group *group) { long size=bytes; void *ptr; int i,grp_me, grp_nproc; armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); ARMCI_PR_DBG("enter",0); ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); armci_msg_group_lgop(&size,1,"max",group); ptr=kr_malloc((size_t)size, &altix_ctx_shmem_grp); if(size!=0 && ptr==NULL) armci_die("armci_altix_shm_malloc_group(): malloc failed for groups. Increase _SHMMAX_ALTIX_GRP", armci_me); bzero(ptr_arr,(grp_nproc)*sizeof(void*)); ptr_arr[grp_me] = ptr; for(i=0; i< grp_nproc; i++) if(i!=grp_me) ptr_arr[i]=shmem_ptr(ptr,ARMCI_Absolute_id(group, i)); ARMCI_PR_DBG("exit",0); } #endif #endif /* end ifdef SGIALTIX */ /* ------------------ End Altix memory allocator ----------------- */ void kr_check_local() { #if 0 kr_malloc_print_stats(&ctx_localmem); #endif kr_malloc_verify(&ctx_localmem); #if defined(PORTALS_WITHREG) kr_malloc_verify(&ctx_mlocalmem); #endif } void armci_print_ptr(void **ptr_arr, int bytes, int size, void* myptr, int off) { int i; int nproc = armci_clus_info[armci_clus_me].nslave; ARMCI_PR_DBG("enter",0); for(i=0; i< armci_nproc; i++){ int j; if(armci_me ==i){ printf("%d master =%d nproc=%d off=%d\n",armci_me, armci_master,nproc, off); printf("%d:bytes=%d mptr=%p s=%d ",armci_me, bytes, myptr,size); for(j = 0; j< armci_nproc; j++)printf(" %p",ptr_arr[j]); printf("\n"); fflush(stdout); } armci_msg_barrier(); } ARMCI_PR_DBG("exit",0); } /*\ master exports its address of shmem region at the beggining of that region \*/ static void armci_master_exp_attached_ptr(void* ptr) { ARMCI_PR_DBG("enter",0); if(!ptr) armci_die("armci_master_exp_att_ptr: null ptr",0); *(volatile void**)ptr = ptr; ARMCI_PR_DBG("exit",0); } /*\ Collective Memory Allocation on shared memory systems \*/ void armci_shmem_malloc(void *ptr_arr[], armci_size_t bytes) { void *myptr=NULL, *ptr=NULL; long idlist[SHMIDLEN]; long size=0, offset=0; long *size_arr; void **ptr_ref_arr; int i,cn, len; int nproc = armci_clus_info[armci_clus_me].nslave; ARMCI_PR_DBG("enter",0); bzero((char*)ptr_arr,armci_nproc*sizeof(void*)); /* allocate work arrays */ size_arr = (long*)calloc(armci_nproc,sizeof(long)); if(!size_arr)armci_die("armci_malloc:calloc failed",armci_nproc); /* allocate arrays for cluster address translations */ # if defined(DATA_SERVER) len = armci_nclus; # else len = nproc; # endif ptr_ref_arr = calloc(len,sizeof(void*)); /* must be zero */ if(!ptr_ref_arr)armci_die("armci_malloc:calloc 2 failed",len); /* combine all memory requests into size_arr */ size_arr[armci_me] = bytes; armci_msg_lgop(size_arr, armci_nproc, "+"); /* determine aggregate request size on the cluster node */ for(i=0, size=0; i< nproc; i++) size += size_arr[i+armci_master]; /* master process creates shmem region and then others attach to it */ if(armci_me == armci_master ){ /* can malloc if there is no data server process and has 1 process/node*/ # ifndef RMA_NEEDS_SHMEM if(nproc == 1) myptr = kr_malloc(size, &ctx_localmem); else # endif myptr = Create_Shared_Region(idlist+1,size,idlist); if(!myptr && size>0 )armci_die("armci_malloc: could not create", (int)(size>>10)); /* place its address at begining of attached region for others to see */ if(size)armci_master_exp_attached_ptr(myptr); if(DEBUG_){ printf("%d:armci_malloc addr mptr=%p size=%ld\n",armci_me,myptr,size); fflush(stdout); } } /* broadcast shmem id to other processes on the same cluster node */ armci_msg_clus_brdcst(idlist, SHMIDLEN*sizeof(long)); if(armci_me != armci_master){ myptr=(double*)Attach_Shared_Region(idlist+1,size,idlist[0]); if(!myptr)armci_die("armci_malloc: could not attach", (int)(size>>10)); /* now every process in a SMP node needs to find out its offset * w.r.t. master - this offset is necessary to use memlock table */ if(size) armci_set_mem_offset(myptr); if(DEBUG_){ printf("%d:armci_malloc attached addr mptr=%p ref=%p size=%ld\n", armci_me,myptr, *(void**)myptr,size); fflush(stdout); } } # ifdef HITACHI armci_register_shmem(myptr,size,idlist+1,idlist[0],ptr_ref_arr[armci_clus_me]); # endif # if defined(DATA_SERVER) /* get server reference address for every cluster node to perform * remote address translation for global address space */ if(armci_nclus>1){ if(armci_me == armci_master){ # ifdef SERVER_THREAD /* data server thread runs on master process */ ptr_ref_arr[armci_clus_me]=myptr; # else /* ask dataserver process to attach to the region and get * ptr*/ { if(_armci_server_started) { armci_serv_attach_req(idlist, SHMIDLEN*sizeof(long), size, &ptr, sizeof(void*)); ptr_ref_arr[armci_clus_me]= ptr; /* from server*/ } else /* server not yet started */ ptr_ref_arr[armci_clus_me]=myptr; } if(DEBUG_){ printf("%d:addresses server=%p myptr=%p\n",armci_me,ptr,myptr); fflush(stdout); } # endif } /* exchange ref addr of shared memory region on every cluster node*/ armci_exchange_address(ptr_ref_arr, armci_nclus); }else { ptr_ref_arr[armci_master] = myptr; } /* translate addresses for all cluster nodes */ for(cn = 0; cn < armci_nclus; cn++){ int master = armci_clus_info[cn].master; offset = 0; /* on local cluster node use myptr directly */ ptr = (armci_clus_me == cn) ? myptr: ptr_ref_arr[cn]; /* compute addresses pointing to the memory regions on cluster node*/ for(i=0; i< armci_clus_info[cn].nslave; i++){ /* NULL if request size is 0*/ ptr_arr[i+master] = (size_arr[i+master])? ((char*)ptr)+offset : NULL; offset += size_arr[i+master]; } } # else /* compute addresses for local cluster node */ offset =0; for(i=0; i< nproc; i++) { ptr_ref_arr[i] = (size_arr[i+armci_master])? ((char*)myptr)+offset : 0L; offset += size_arr[i+armci_master]; } /* exchange addreses with all other processes */ ptr_arr[armci_me] = (char*)ptr_ref_arr[armci_me-armci_master]; armci_exchange_address(ptr_arr, armci_nproc); /* overwrite entries for local cluster node with ptr_ref_arr */ bcopy((char*)ptr_ref_arr, (char*)(ptr_arr+armci_master), nproc*sizeof(void*)); /* armci_print_ptr(ptr_arr, bytes, size, myptr, offset);*/ # endif #ifdef ALLOW_PIN if(armci_nclus>1)armci_global_region_exchange(myptr, (long) size_arr[armci_me]); else #endif armci_msg_barrier(); /* free work arrays */ free(ptr_ref_arr); free(size_arr); ARMCI_PR_DBG("exit",0); } /******************************************************************** * Non-collective Memory Allocation on shared memory systems \*/ void armci_shmem_memget(armci_meminfo_t *meminfo, size_t size) { void *myptr=NULL; void *armci_ptr=NULL; /* legal ARCMIptr used in ARMCI data xfer ops */ long idlist[SHMIDLEN]; /* can malloc if there is no data server process & has 1 process/node*/ #ifndef RMA_NEEDS_SHMEM if( armci_clus_info[armci_clus_me].nslave == 1) myptr = kr_malloc(size, &ctx_localmem); else #endif myptr = Create_Shared_Region(idlist+1,size,idlist); if(!myptr && size>0 ) armci_die("armci_shmem_memget: create failed", (int)(size>>10)); if(DEBUG_) { printf("%d: armci_shmem_memget: addr=%p size=%ld %ld %ld \n", armci_me, myptr, (long)size, idlist[0], idlist[1]); fflush(stdout); } armci_ptr = myptr; #if defined(DATA_SERVER) /* get server reference address to perform * remote address translation for global address space */ if(armci_nclus>1) { # ifdef SERVER_THREAD /* data server thread runs on master process */ if(armci_me != armci_master) { armci_serv_attach_req(idlist, SHMIDLEN*sizeof(long), size, &armci_ptr, sizeof(void*)); } # else /* ask dataserver process to attach to region and get ptr*/ { if(_armci_server_started) { armci_serv_attach_req(idlist, SHMIDLEN*sizeof(long), size, &armci_ptr, sizeof(void*)); } } # endif } #endif /* fill the meminfo structure */ meminfo->armci_addr = armci_ptr; meminfo->addr = myptr; meminfo->size = size; meminfo->cpid = armci_me; bcopy(idlist, meminfo->idlist, SHMIDLEN*sizeof(long)); } void* armci_shmem_memat(armci_meminfo_t *meminfo) { void *ptr=NULL; long size = (long) meminfo->size; long *idlist = (long*) meminfo->idlist; if(SAMECLUSNODE(meminfo->cpid)) { /* Attach to the shared memory segment */ ptr=(double*)Attach_Shared_Region(idlist+1,size,idlist[0]); if(!ptr)armci_die("ARMCi_Memat: could not attach", (int)(size>>10)); /* CHECK: now every process in a SMP node needs to find out its offset * w.r.t. master - this offset is necessary to use memlock table */ if(size) armci_set_mem_offset(ptr); } else { ptr = meminfo->armci_addr; /* remote address */ } return ptr; } void armci_shmem_memctl(armci_meminfo_t *meminfo) { /* only the creator can delete the segment */ if(meminfo->cpid == armci_me) { void *ptr = meminfo->addr; #ifdef RMA_NEEDS_SHMEM Free_Shmem_Ptr(0,0,ptr); #else if(armci_clus_info[armci_clus_me].nslave>1) Free_Shmem_Ptr(0,0,ptr); else kr_free(ptr, &ctx_localmem); #endif } } /****** End: Non-collective memory allocation on shared memory systems *****/ #ifdef MPI /******************************************************************** * Group Memory Allocation on shared memory systems for ARMCI Groups \*/ void armci_shmem_malloc_group(void *ptr_arr[], armci_size_t bytes, ARMCI_Group *group) { void *myptr=NULL, *ptr=NULL; long idlist[SHMIDLEN]; long size=0, offset=0; long *size_arr; void **ptr_ref_arr; int i,cn, len; /* int nproc = armci_clus_info[armci_clus_me].nslave; ? change ? */ int grp_me, grp_nproc, grp_nclus, grp_master, grp_clus_nproc, grp_clus_me; armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); ARMCI_PR_DBG("enter",0); /* Get the group info: group size & group rank */ ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); if(grp_me == MPI_UNDEFINED) { /* check if the process is in this group */ armci_die("armci_malloc_group: process is not a member in this group", armci_me); } grp_nclus = grp_attr->grp_nclus; grp_clus_me = grp_attr->grp_clus_me; grp_master = grp_attr->grp_clus_info[grp_clus_me].master; grp_clus_nproc = grp_attr->grp_clus_info[grp_clus_me].nslave; bzero((char*)ptr_arr,grp_nproc*sizeof(void*)); /* allocate work arrays */ size_arr = (long*)calloc(grp_nproc,sizeof(long)); if(!size_arr)armci_die("armci_malloc_group:calloc failed",grp_nproc); /* allocate arrays for cluster address translations */ # if defined(DATA_SERVER) len = grp_nclus; # else len = grp_clus_nproc; # endif ptr_ref_arr = calloc(len,sizeof(void*)); /* must be zero */ if(!ptr_ref_arr)armci_die("armci_malloc_group:calloc 2 failed",len); /* combine all memory requests into size_arr */ size_arr[grp_me] = bytes; armci_msg_group_gop_scope(SCOPE_ALL, size_arr, grp_nproc, "+", ARMCI_LONG, group); /* determine aggregate request size on the cluster node */ for(i=0, size=0; i< grp_clus_nproc; i++) size += size_arr[i+grp_master]; /* master process creates shmem region and then others attach to it */ if(grp_me == grp_master ){ /* can malloc if there is no data server process and has 1 process/node*/ # ifndef RMA_NEEDS_SHMEM if( armci_clus_info[armci_clus_me].nslave == 1) myptr = kr_malloc(size, &ctx_localmem); else # endif myptr = Create_Shared_Region(idlist+1,size,idlist); if(!myptr && size>0 )armci_die("armci_malloc_group: could not create", (int)(size>>10)); /* place its address at begining of attached region for others to see */ if(size)armci_master_exp_attached_ptr(myptr); if(DEBUG_){ printf("%d:armci_malloc_group addr mptr=%p ref=%p size=%ld %ld %ld \n",armci_me,myptr,*(void**)myptr, size,idlist[0],idlist[1]); fflush(stdout); } } /* broadcast shmem id to other processes (in the same group) on the same cluster node */ armci_grp_clus_brdcst(idlist, SHMIDLEN*sizeof(long), grp_master, grp_clus_nproc, group); if(grp_me != grp_master){ myptr=(double*)Attach_Shared_Region(idlist+1,size,idlist[0]); if(!myptr)armci_die("armci_malloc_group: could not attach", (int)(size>>10)); /* now every process in a SMP node needs to find out its offset * w.r.t. master - this offset is necessary to use memlock table */ if(size) armci_set_mem_offset(myptr); if(DEBUG_){ printf("%d:armci_malloc_group attached addr mptr=%p ref=%p size=%ld\n", armci_me,myptr, *(void**)myptr,size); fflush(stdout); } } # ifdef HITACHI armci_register_shmem_grp(myptr,size,idlist+1,idlist[0],ptr_ref_arr[armci_clus_me],group); # endif # if defined(DATA_SERVER) /* get server reference address for every cluster node in the group * to perform remote address translation for global address space */ if(grp_nclus>1){ if(grp_me == grp_master){ # ifdef SERVER_THREAD /* data server thread runs on master process */ if(ARMCI_Absolute_id(group,grp_master)!=armci_master){ /*printf("\n%d: grp_master=%d %ld %ld \n",armci_me,ARMCI_Absolute_id(group,grp_master),idlist[0],idlist[1]);*/ armci_serv_attach_req(idlist, SHMIDLEN*sizeof(long), size, &ptr, sizeof(void*)); ptr_ref_arr[grp_clus_me]= ptr; /* from server*/ } else ptr_ref_arr[grp_clus_me]=myptr; # else /* ask data server process to attach to the region and get ptr */ { if(_armci_server_started) { armci_serv_attach_req(idlist, SHMIDLEN*sizeof(long), size, &ptr, sizeof(void*)); ptr_ref_arr[grp_clus_me]= ptr; /* from server*/ } else /* server not yet started */ ptr_ref_arr[grp_clus_me]=myptr; } if(DEBUG_){ printf("%d:addresses server=%p myptr=%p\n",grp_me,ptr,myptr); fflush(stdout); } # endif } /* exchange ref addr of shared memory region on every cluster node*/ { int ratio = sizeof(void*)/sizeof(int); if(DEBUG_)printf("%d: exchanging %ld ratio=%d\n",armci_me, (long)ptr_arr[grp_me], ratio); armci_msg_group_gop_scope(SCOPE_ALL, ptr_ref_arr, grp_nclus*ratio, "+", ARMCI_INT, group); } }else { ptr_ref_arr[grp_master] = myptr; } /* translate addresses for all cluster nodes */ for(cn = 0; cn < grp_nclus; cn++){ int master = grp_attr->grp_clus_info[cn].master; offset = 0; /* on local cluster node use myptr directly */ ptr = (grp_clus_me == cn) ? myptr: ptr_ref_arr[cn]; /* compute addresses pointing to the memory regions on cluster node*/ for(i=0; i< grp_attr->grp_clus_info[cn].nslave; i++){ /* NULL if request size is 0*/ ptr_arr[i+master] =(size_arr[i+master])? ((char*)ptr)+offset: NULL; offset += size_arr[i+master]; } } # else /* compute addresses for local cluster node */ offset =0; for(i=0; i< grp_clus_nproc; i++) { ptr_ref_arr[i] = (size_arr[i+grp_master])? ((char*)myptr)+offset : 0L; offset += size_arr[i+grp_master]; } /* exchange addreses with all other processes */ ptr_arr[grp_me] = (char*)ptr_ref_arr[grp_me-grp_master]; armci_exchange_address_grp(ptr_arr, grp_nproc, group); /* overwrite entries for local cluster node with ptr_ref_arr */ bcopy((char*)ptr_ref_arr, (char*)(ptr_arr+grp_master), grp_clus_nproc*sizeof(void*)); # endif /* armci_print_ptr(ptr_arr, bytes, size, myptr, offset);*/ #ifdef ALLOW_PIN #if 0 /* ????? check ?????? */ armci_die("armci_malloc_group: Not yet implemented", 0); if(grp_nclus>1)armci_global_region_exchange(myptr, (long) size_arr[grp_me]); else #endif #endif armci_msg_group_barrier(group); /* free work arrays */ free(ptr_ref_arr); free(size_arr); ARMCI_PR_DBG("exit",0); } #endif /* ifdef MPI */ #else void armci_shmem_malloc(void* ptr_arr[], int bytes) { armci_die("armci_shmem_malloc should never be called on this system",0); } void armci_shmem_memget(armci_meminfo_t *meminfo, size_t size) { armci_die("armci_shmem_memget should never be called on this system",0); } void* armci_shmem_memat(armci_meminfo_t *meminfo) { armci_die("armci_shmem_memat should never be called on this system",0); } void armci_shmem_memctl(armci_meminfo_t *meminfo) { armci_die("armci_shmem_memctl should never be called on this system",0); } # ifdef MPI void armci_shmem_malloc_group(void *ptr_arr[], armci_size_t bytes, ARMCI_Group *group) { armci_die("armci_shmem_malloc_group should never be called on this system",0); } # endif #endif #ifdef ALLOW_PIN void *reg_malloc(size_t size) { #ifdef PORTALS char *ptr; extern void *shmalloc(size_t); ARMCI_PR_DBG("enter",0); ptr = malloc(size); #else char *ptr; ARMCI_PR_DBG("enter",0); ptr = malloc(size); #endif armci_region_register_loc(ptr,size); ARMCI_PR_DBG("exit",0); return(ptr); } #endif /* public constructor to initialize the kr_malloc context */ void armci_krmalloc_init_localmem() { #if defined(ALLOW_PIN) kr_malloc_init(0, 0, 0, reg_malloc, 0, &ctx_localmem); kr_malloc_init(0, 0, 0, malloc, 0, &ctx_mlocalmem); ctx_mlocalmem.ctx_type = KR_CTX_LOCALMEM; #elif defined(CRAY_SHMEM) && defined(CRAY_XT) # ifdef CATAMOUNT int units_avail = (cnos_shmem_size() - 1024 * 1024) / SHM_UNIT; # else extern size_t get_xt_heapsize(); int units_avail = (get_xt_heapsize() - 1024 * 1024) / SHM_UNIT; # endif if(DEBUG_) { fprintf(stderr,"%d:krmalloc_init_localmem: symheap=%llu,units(%d)=%d\n", armci_me, SHM_UNIT*units_avail, SHM_UNIT, units_avail); } kr_malloc_init(SHM_UNIT, units_avail, units_avail, shmalloc, 0, &ctx_localmem); armci_shmalloc_exchange_offsets(&ctx_localmem); #else kr_malloc_init(0, 0, 0, malloc, 0, &ctx_localmem); #endif ctx_localmem.ctx_type = KR_CTX_LOCALMEM; } /** * Local Memory Allocation and Free */ void *PARMCI_Malloc_local(armci_size_t bytes) { #if defined(PORTALS) void *rptr; #endif ARMCI_PR_DBG("enter",0); #if defined(PORTALS) rptr=kr_malloc((size_t)bytes, &ctx_mlocalmem); ARMCI_PR_DBG("exit",0); return rptr; #else ARMCI_PR_DBG("exit",0); return (void *)kr_malloc((size_t)bytes, &ctx_localmem); #endif } int PARMCI_Free_local(void *ptr) { ARMCI_PR_DBG("enter",0); #if defined(PORTALS) kr_free((char *)ptr, &ctx_mlocalmem); #else kr_free((char *)ptr, &ctx_localmem); #endif ARMCI_PR_DBG("exit",0); return 0; } #ifdef REGION_ALLOC static context_t ctx_region_shmem; static long *reg_pids=NULL; void armci_region_shm_malloc(void *ptr_arr[], size_t bytes) { long size=bytes; void *ptr; int i, peers=armci_clus_last-armci_clus_first+1; extern void* armci_region_getcore(size_t); extern int armci_region_register(int p, void **pinout, long pid, size_t bytes); if(!reg_pids){ kr_malloc_init(0,0,500*1024*1024, armci_region_getcore, 0, &ctx_region_shmem); reg_pids = (long*)calloc(peers,sizeof(long)); reg_pids[armci_me -armci_clus_first] = getpid(); armci_msg_gop_scope(SCOPE_NODE,reg_pids, peers,"+",ARMCI_LONG); } ptr=kr_malloc((size_t)size, &ctx_region_shmem); if(bytes) if(!ptr) armci_die("armci_region_shm_malloc: failed",bytes); bzero((char*)ptr_arr,armci_nproc*sizeof(void*)); ptr_arr[armci_me] = ptr; /* now combine individual addresses into a single array */ armci_exchange_address(ptr_arr, armci_nproc); for(i=0; igrp_clus_me; int i, peers=grp_attr->grp_clus_info[grp_clus_me].nslave; int grp_clus_first=grp_attr->grp_clus_info[grp_clus_me].master; extern void* armci_region_getcore(size_t); extern int armci_region_register(int p, void **pinout, long pid, size_t bytes); ARMCI_Group_rank(group, &grp_me); ARMCI_Group_size(group, &grp_nproc); ptr=kr_malloc((size_t)size, &ctx_region_shmem); if(bytes) if(!ptr) armci_die("armci_region_shm_malloc_grp: failed",bytes); bzero((char*)ptr_arr,grp_nproc*sizeof(void*)); ptr_arr[grp_me] = ptr; /* now combine individual addresses into a single array */ armci_exchange_address_grp(ptr_arr, grp_nproc, group); for(i=0; i 1) # endif if(ARMCI_Uses_shm()){ if(armci_me==armci_master){ # ifdef RMA_NEEDS_SHMEM Free_Shmem_Ptr(0,0,ptr); # else if(armci_clus_info[armci_clus_me].nslave>1) Free_Shmem_Ptr(0,0,ptr); else kr_free(ptr, &ctx_localmem); # endif } ptr = NULL; return 0; } # endif kr_free(ptr, &ctx_localmem); # endif /* REGION_ALLOC */ #else /* Altix */ if( ARMCI_Uses_shm() ) kr_free(ptr, &altix_ctx_shmem); else kr_free(ptr, &ctx_localmem); #endif ptr = NULL; ARMCI_PR_DBG("exit",0); return 0; } int ARMCI_Uses_shm() { int uses=0; #if (defined(SYSV) || defined(WIN32) || defined(MMAP) ||defined(HITACHI)) && !defined(NO_SHM) # ifdef RMA_NEEDS_SHMEM if(armci_nproc >1) uses= 1; /* always unless serial mode */ # else if(armci_nproc != armci_nclus)uses= 1; /* only when > 1 node used */ # endif #endif if(DEBUG_) fprintf(stderr,"%d:uses shmem %d\n",armci_me, uses); return uses; } #ifdef MPI int ARMCI_Uses_shm_grp(ARMCI_Group *group) { int uses=0, grp_me, grp_nproc, grp_nclus; armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); ARMCI_PR_DBG("enter",0); ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); grp_nclus = grp_attr->grp_nclus; #if (defined(SYSV) || defined(WIN32) || defined(MMAP) ||defined(HITACHI)) && !defined(NO_SHM) # ifdef RMA_NEEDS_SHMEM if(grp_nproc >1) uses= 1; /* always unless serial mode */ # else #if 0 if(grp_nproc != grp_nclus)uses= 1; /* only when > 1 node used */ #else if(armci_nproc != armci_nclus)uses= 1; /* only when > 1 node used */ #endif # endif #endif if(DEBUG_) fprintf(stderr,"%d (grp_id=%d):uses shmem %d\n",armci_me, grp_me, uses); ARMCI_PR_DBG("exit",0); return uses; } /*\ ************** Begin Group Collective Memory Allocation ****************** * returns array of pointers to blocks of memory allocated by everybody * Note: as the same shared memory region can be mapped at different locations * in each process address space, the array might hold different values * on every process. However, the addresses are legitimate * and can be used in the ARMCI data transfer operations. * ptr_arr[nproc] \*/ int ARMCI_Malloc_group(void *ptr_arr[], armci_size_t bytes, ARMCI_Group *group) { void *ptr; int grp_me, grp_nproc; ARMCI_PR_DBG("enter",0); ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); if(DEBUG_)fprintf(stderr,"%d (grp_id=%d) bytes in armci_malloc_group %d\n", armci_me, grp_me, (int)bytes); #ifdef REGION_ALLOC armci_region_shm_malloc_grp(ptr_arr, bytes, group); #else #ifdef USE_MALLOC if(grp_nproc == 1) { ptr = kr_malloc((size_t) bytes, &ctx_localmem); if(bytes) if(!ptr) armci_die("armci_malloc_group:malloc 1 failed",(int)bytes); ptr_arr[grp_me] = ptr; ARMCI_PR_DBG("exit",0); return (0); } #endif if( ARMCI_Uses_shm_grp(group) ) { # ifdef SGIALTIX armci_altix_shm_malloc_group(ptr_arr,bytes,group); # else armci_shmem_malloc_group(ptr_arr,bytes,group); # endif } else { /* on distributed-memory systems just malloc & collect all addresses */ ptr = kr_malloc(bytes, &ctx_localmem); if(bytes) if(!ptr) armci_die("armci_malloc:malloc 2 failed",bytes); bzero((char*)ptr_arr,grp_nproc*sizeof(void*)); ptr_arr[grp_me] = ptr; /* now combine individual addresses into a single array */ #if defined(CRAY_SHMEM) armci_shmalloc_exchange_address_grp(ptr_arr, group); #else armci_exchange_address_grp(ptr_arr, grp_nproc, group); #endif # ifdef ALLOW_PIN # if 0 /* ????? check ?????? */ armci_die("armci_malloc_group: Not yet implemented", 0); armci_global_region_exchange(ptr, (long) bytes); # endif # endif } #endif ARMCI_PR_DBG("exit",0); return(0); } /*\ shared memory is released to kr_malloc only on process 0 * with data server malloc cannot be used \*/ int ARMCI_Free_group(void *ptr, ARMCI_Group *group) { int grp_me, grp_nproc, grp_master, grp_clus_me; armci_grp_attr_t *grp_attr=ARMCI_Group_getattr(group); ARMCI_PR_DBG("enter",0); if(!ptr)return 1; ARMCI_Group_size(group, &grp_nproc); ARMCI_Group_rank(group, &grp_me); if(grp_me == MPI_UNDEFINED) { /* check if the process is in this group */ armci_die("armci_malloc_group: process is not a member in this group", armci_me); } /* get the group cluster info */ grp_clus_me = grp_attr->grp_clus_me; grp_master = grp_attr->grp_clus_info[grp_clus_me].master; #ifndef SGIALTIX #ifdef REGION_ALLOC kr_free(ptr, &ctx_region_shmem); #else # if (defined(SYSV) || defined(WIN32) || defined(MMAP)) && !defined(NO_SHM) # ifdef USE_MALLOC if(grp_nproc > 1) # endif if(ARMCI_Uses_shm_grp(group)){ if(grp_me == grp_master) { # ifdef RMA_NEEDS_SHMEM Free_Shmem_Ptr(0,0,ptr); # else if(armci_clus_info[armci_clus_me].nslave>1) Free_Shmem_Ptr(0,0,ptr); else kr_free(ptr, &ctx_localmem); # endif } ptr = NULL; ARMCI_PR_DBG("exit",0); return 0; } # endif kr_free(ptr, &ctx_localmem); #endif /* ifdef REGION_ALLOC */ #else /* SGI Altix */ if(ARMCI_Uses_shm_grp(group)) kr_free(ptr, &altix_ctx_shmem_grp); else kr_free(ptr, &ctx_localmem); #endif /* SGIALTIX */ ptr = NULL; ARMCI_PR_DBG("exit",0); return 0; } /* ***************** End Group Collective Memory Allocation ******************/ #endif /* ************** Begin Non-Collective Memory Allocation ****************** * Prototype similar to SysV shared memory. */ /** * CHECK: On Altix we are forced to use SysV as shmalloc is collective. We * may use a preallocated shmalloc memory, however, it may NOT still solve * our problem... * NOTE: "int memflg" option for future optimiztions. */ void PARMCI_Memget(size_t bytes, armci_meminfo_t *meminfo, int memflg) { void *myptr=NULL; void *armci_ptr=NULL; /* legal ARCMI ptr used in ARMCI data xfer ops*/ size_t size = bytes; if(size<=0) armci_die("PARMCI_Memget: size must be > 0", (int)size); if(meminfo==NULL) armci_die("PARMCI_Memget: Invalid arg #2 (NULL ptr)",0); if(memflg!=0) armci_die("PARMCI_Memget: Invalid memflg", memflg); if( !ARMCI_Uses_shm() ) { armci_ptr = myptr = kr_malloc(size, &ctx_localmem); if(size) if(!myptr) armci_die("PARMCI_Memget failed", (int)size); /* fill the meminfo structure */ meminfo->armci_addr = armci_ptr; meminfo->addr = myptr; meminfo->size = size; meminfo->cpid = armci_me; /* meminfo->attr = NULL; */ } else { armci_shmem_memget(meminfo, size); } #ifdef ALLOW_PIN # if 0 /* disabled for now. May not go thru' the fast zero-copy path */ if(armci_nclus>1) armci_global_region_exchange(meminfo->addr, (long)size_arr[armci_me]); # endif #endif if(DEBUG_){ printf("%d: PARMCI_Memget: addresses server=%p myptr=%p bytes=%ld\n", armci_me, meminfo->armci_addr, meminfo->addr, (long)bytes); fflush(stdout); } } void* PARMCI_Memat(armci_meminfo_t *meminfo, long offset) { void *ptr=NULL; if(meminfo==NULL) armci_die("PARMCI_Memat: Invalid arg #1 (NULL ptr)",0); if(meminfo->cpid==armci_me) { ptr = meminfo->addr; return ptr; } if( !ARMCI_Uses_shm()) { ptr = meminfo->addr; } else { ptr = armci_shmem_memat(meminfo); ptr = ((char*)ptr) + offset; } if(DEBUG_) { printf("%d:PARMCI_Memat: attached addr mptr=%p size=%ld\n", armci_me, ptr, (long)meminfo->size); fflush(stdout); } return ptr; } void ARMCI_Memdt(armci_meminfo_t *meminfo, long offset) { /** * Do nothing. May be we need to have reference counting in future. This * is to avoid the case of dangling pointers when the creator of shm * segment calls Memctl and other processes are still attached to this * segment */ } void ARMCI_Memctl(armci_meminfo_t *meminfo) { if(meminfo==NULL) armci_die("PARMCI_Memget: Invalid arg #2 (NULL ptr)",0); /* only the creator can delete the segment */ if(meminfo->cpid == armci_me) { if( !ARMCI_Uses_shm() ) { void *ptr = meminfo->addr; kr_free(ptr, &ctx_localmem); } else { armci_shmem_memctl(meminfo); } } meminfo->addr = NULL; meminfo->armci_addr = NULL; /* if(meminfo->attr!=NULL) free(meminfo->attr); */ } /* ***************** End Non-Collective Memory Allocation ******************/ ga-5-3/armci/src/memory/buffers.c0000640005473000001440000016200711633461607015603 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: buffers.c,v 1.29.6.9 2007-07-02 05:16:50 d3p687 Exp $ **/ #define SIXTYFOUR 64 #define DEBUG_ 0 #define DEBUG2_ 0 #define EXTRA_ERR_CHECK /**********************************************************************/ #if HAVE_STDLIB_H # include #endif #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_ASSERT_H # include #endif #include "armcip.h" #include "request.h" #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include typedef unsigned long ssize_t; #endif #ifdef SOCKETS # define EQ_TAGS(a_, b_) ((a_) == (b_)) #else # define EQ_TAGS(a_, b_) !memcmp(&(a_), &(b_), sizeof(a_)) #endif #define ALIGN64ADD(buf) (SIXTYFOUR-(((ssize_t)(buf))%SIXTYFOUR)) /* the following symbols should be defined if needed in protocol specific header file: BUF_EXTRA_FIELD, BUF_ALLOCATE */ #ifndef BUF_ALLOCATE # define BUF_ALLOCATE malloc #endif #if defined(PEND_BUFS) #define SMALL_BUF_LEN 8192 #else #define SMALL_BUF_LEN 8192 #endif #ifndef MSG_BUFLEN_SMALL #define MSG_BUFLEN_SMALL (MSG_BUFLEN >>0) #endif #define LEFT_GUARD 11.11e11 #define RIGHT_GUARD 22.22e22 /* #define CLEAR_TABLE_SLOT(idx) *((int*)(_armci_buf_state->table+(idx))) =0 */ #define CLEAR_TABLE_SLOT(idx) (memset(_armci_buf_state->table+(idx),'\0',sizeof(buf_state_t)) /* we allow multiple buffers (up to 15) per single request * adjacent buffers can be coalesced into a large one */ #if 0 typedef struct { unsigned int op:8; /* pending operation code */ unsigned int snd:1; /* if 1 then buffer is used for sending request */ unsigned int rcv:1; /* if 1 then buffer is used for receiving data */ unsigned int async:1; /* if 1 then request is nonblocking */ unsigned int first:5; /* id of the 1st buffer in the set in same request */ unsigned int count:1; /* count is not used and is always 1 (or 0???) */ /*unsigned int count:4; \* how many buffers used for this request 8 possible */ unsigned int busy:1; /* if 1 buffer is used and cannot be completed */ unsigned int cmpl:1; /* set to 1 if buffer was completed and can be released */ unsigned int to:13; /* serv/proc to which request was sent, 8172 possible */ }buf_state_t; #else typedef struct { unsigned int op:8; /* pending operation code */ unsigned int snd:1; /* if 1 then buffer is used for sending request */ unsigned int rcv:1; /* if 1 then buffer is used for receiving data */ unsigned int async:1; /* if 1 then request is nonblocking */ unsigned int first:20; /* id of the 1st buffer in the set in same request */ unsigned int count:1; /* count is not used and is always 1 (or 0???) */ /*unsigned int count:4; \* how many buffers used for this request 8 possible */ unsigned int busy:1; /* if 1 buffer is used and cannot be completed */ unsigned int cmpl:1; /* set to 1 if buffer was completed and can be released */ unsigned int to:30; /* serv/proc to which request was sent, can handle pretty large counts (can be used for fields in the future) */ }buf_state_t; #endif #ifndef BUFID_PAD_T #define BUFID_PAD_T BUF_INFO_T #endif /* message send buffer data structure */ typedef struct { BUF_INFO_T id; # ifdef BUF_EXTRA_FIELD_T BUF_EXTRA_FIELD_T field; # endif char buffer[MSG_BUFLEN_SMALL]; } buf_ext_t; /* message send buffer data structure */ typedef struct { BUF_INFO_T id; # ifdef BUF_EXTRA_FIELD_T BUF_EXTRA_FIELD_T field; # endif char buffer[SMALL_BUF_LEN]; } buf_smext_t; /* we keep table and buffer pointer together for better locality */ typedef struct { double left_guard; /* stamp to verify if array was corrupted */ buf_state_t table[MAX_BUFS+MAX_SMALL_BUFS]; /*array with state of buffer */ buf_ext_t *buf; /* address of buffer pool */ buf_smext_t *smallbuf; /* address of the large buffer pool */ int avail; int smavail; int pad; double right_guard; /* stamp to verify if array was corrupted */ unsigned buf_bitmap; /* bitmaps to track available buffers: */ unsigned smbuf_bitmap;/* 1 - available, 0 - not available */ } reqbuf_pool_t; #ifndef BUF_EXTRA_FIELD_T # define SIZE_BUF_EXTRA_FIELD 0 # define BUF_TO_EBUF(buf) (buf_ext_t*)(((char*)buf) - sizeof(BUFID_PAD_T) -\ SIZE_BUF_EXTRA_FIELD) # define BUF_TO_SMEBUF(buf) (buf_smext_t*)(((char*)buf)- sizeof(BUFID_PAD_T) -\ SIZE_BUF_EXTRA_FIELD) #else # define BUF_TO_EBUF(buf) (buf_ext_t*)(((char*)buf) - sizeof(BUFID_PAD_T) -\ sizeof(BUF_EXTRA_FIELD_T)) # define BUF_TO_SMEBUF(buf) (buf_smext_t*)(((char*)buf)- sizeof(BUFID_PAD_T) -\ sizeof(BUF_EXTRA_FIELD_T)) #endif #define BUF_TO_BUFINDEX(buf) (BUF_TO_EBUF((buf)))->id.bufid #define BUF_TO_SMBUFINDEX(buf) (BUF_TO_SMEBUF((buf)))->id.bufid buf_ext_t *_armci_buffers; /* these are the actual buffers */ buf_smext_t *_armci_smbuffers; /* no, these are the actual buffers */ reqbuf_pool_t* _armci_buf_state; /* array that describes state of each buf */ extern active_socks_t *_armci_active_socks; /* returns bufinfo, given bufid */ INLINE BUF_INFO_T *_armci_id_to_bufinfo(int bufid) { if (bufid < 0 || bufid >= (MAX_BUFS+MAX_SMALL_BUFS)) armci_die2("_armci_id_to_bufinfo: bad id",bufid,MAX_BUFS); return bufid < MAX_BUFS ? &(_armci_buf_state->buf[bufid].id) : &(_armci_buf_state->smallbuf[bufid-MAX_BUFS].id); } #if (defined(THREAD_SAFE) || defined(SOCKETS)) /* check if buffer was completed and can be released */ int armci_test_network_complete() { int idx; for (idx=0;idxtable[idx].cmpl) break; return (idx == MAX_BUFS+MAX_SMALL_BUFS ? -1 : idx); } /*\ we allocate alligned buffer space * this operation can be implemented in platform specific files \*/ void _armci_buf_init() { char *tmp; int extra=0; int smallbuf_size = sizeof(buf_smext_t)*(MAX_SMALL_BUFS); tmp = (char *)BUF_ALLOCATE((MAX_BUFS*sizeof(buf_ext_t) + 64 + smallbuf_size)); extra= ALIGN64ADD(tmp); /* if(sizeof(buf_state_t) != sizeof(int)) */ /* armci_die("armci_buf_init size buf_state_t!=int",sizeof(buf_state_t)); */ dassert(1,MAX_BUFSbuffer, (void*)(_armci_buffers+MAX_BUFS), (long unsigned)MAX_BUFS*sizeof(buf_ext_t), extra); fflush(stdout); } /* now allocate state array */ tmp = calloc(1, sizeof(reqbuf_pool_t) + 64); if(!tmp)armci_die("_armci_buf_init calloc failed",0); extra= ALIGN64ADD(tmp); _armci_buf_state = (reqbuf_pool_t*)(tmp + extra); /* initialize it */ _armci_buf_state->left_guard = LEFT_GUARD; _armci_buf_state->right_guard = RIGHT_GUARD; _armci_buf_state->avail =0; _armci_buf_state->smavail =MAX_BUFS; _armci_buf_state->buf = _armci_buffers; _armci_buf_state->smallbuf = _armci_smbuffers; /* initialize bitmaps */ /* should not be more than sizeof(unsigned int) buffers */ if (MAX_BUFS > sizeof(unsigned)*8 && MAX_SMALL_BUFS > sizeof(unsigned)*8) armci_die("_armci_buf_init: cannot allocate this many buffers",0); _armci_buf_state->buf_bitmap = (1 << MAX_BUFS) - 1; _armci_buf_state->smbuf_bitmap = (1 << MAX_SMALL_BUFS) - 1; if(BUF_TO_EBUF(_armci_buf_state->buf[0].buffer)!=_armci_buf_state->buf) armci_die("buffers.c, internal structure alignment problem",0); } /*\ convert buffer pointer to index (in state array) \*/ int _armci_buf_to_index(void *buf) { int index; char *ptr = (char*)buf; if(DEBUG2_){ printf("%d: in _armci_buf_to_index %p\n",armci_me, buf); fflush(stdout); } if(buf > (void *)_armci_buffers && buf < (void *)(_armci_buffers+MAX_BUFS)){ index = BUF_TO_BUFINDEX(ptr); if((index >= MAX_BUFS)|| (index<0)) armci_die2("armci_buf_to_index: bad index:",index,MAX_BUFS); return(index); } else if(buf > (void *)_armci_smbuffers && buf < (void *)(_armci_smbuffers+MAX_SMALL_BUFS)){ index = BUF_TO_SMBUFINDEX(ptr); if((index >= MAX_BUFS+MAX_SMALL_BUFS)|| (indextable +idx; /* fprintf(stderr, "%d:: entered %s. called=%d\n", armci_me, FUNCTION_NAME); */ count = buf_state->count; if(DEBUG_ ) { printf("%d:buf_complete_index:%d op=%d first=%d count=%d called=%d\n", armci_me,idx,buf_state->op,buf_state->first,buf_state->count, called); fflush(stdout); } if(buf_state->first != (unsigned int)idx){ armci_die2("complete_buf_index:Inconsistent index:",idx,buf_state->first); } if(buf_state->async){ /* completion of strided get should release that buffer */ if(buf_state->op == GET); else armci_die2("buf_complete_index: async mode not avail for this op", buf_state->op,idx); } # ifdef BUF_EXTRA_FIELD_T else{ /* need to call platform specific function */ if(idx>=MAX_BUFS){ int relidx; relidx = idx-MAX_BUFS; CLEAR_SEND_BUF_FIELD(_armci_buf_state->smallbuf[relidx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op); /*later, we might just need to do this for all operations, not just get*/ if(_armci_buf_state->smallbuf[relidx].id.tag!=0 &&(buf_state->op == GET)){ armci_complete_req_buf(&(_armci_buf_state->smallbuf[relidx].id), _armci_buf_state->smallbuf[relidx].buffer); } _armci_buf_state->smallbuf[relidx].id.tag=0; } else { CLEAR_SEND_BUF_FIELD(_armci_buf_state->buf[idx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op); /*later, we might just need to do this for all operations, not just get*/ if(_armci_buf_state->buf[idx].id.tag!=0 &&(buf_state->op == GET)){ armci_complete_req_buf(&(_armci_buf_state->buf[idx].id), _armci_buf_state->buf[idx].buffer); } _armci_buf_state->buf[idx].id.tag=0; } } # endif /* clear table slots for all the buffers in the set for this request */ for(; count; count--, buf_state++) { /* *(int*)buf_state = 0; */ memset(buf_state,'\0',sizeof(buf_state_t)); } } /*\ test outstanding operation that uses the specified buffer for complete * It is important not to change the state of the buffer, the buffer has * to remain as it was, only completion has to be indicated \*/ int _armci_buf_test_index(int idx, int called) { int count,retval=0; buf_state_t *buf_state = _armci_buf_state->table +idx; count = buf_state->count; if(DEBUG_ ){ printf("%d:buf_test_index:%d op=%d first=%d count=%d called=%d\n", armci_me,idx,buf_state->op,buf_state->first,buf_state->count, called); fflush(stdout); } if(buf_state->first != (unsigned int)idx){ armci_die2("_buf_test_index:inconsistent index:",idx,buf_state->first); } # ifdef BUF_EXTRA_FIELD_T /* need to call platform specific function */ if(idx>=MAX_BUFS){ int relidx; relidx = idx-MAX_BUFS; /*printf("\n%d:relidx=%d \n",armci_me,relidx);fflush(stdout);*/ TEST_SEND_BUF_FIELD(_armci_buf_state->smallbuf[relidx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op,&retval); } else { TEST_SEND_BUF_FIELD(_armci_buf_state->buf[idx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op,&retval); } # endif if(DEBUG_ ){ printf("%d:buf_test_index:%d op=%d first=%d count=%d called=%d ret=%d\n", armci_me,idx,buf_state->op,buf_state->first,buf_state->count, called,retval); fflush(stdout); } return(retval); } /*\ make sure that there are no other pending operations to that smp node * this operation is called from platforms specific routine that sends * request * we could have accomplished the same in armci_buf_get but as Vinod * is pointing out, it is better to delay completing outstanding * calls to overlap memcpy for the current buffer with communication \*/ void _armci_buf_ensure_one_outstanding_op_per_node(void *buf, int node) { int i; int index =_armci_buf_to_index(buf); int this = _armci_buf_state->table[index].first; int nfirst, nlast; void _armci_buf_release_index(int i); nfirst=armci_clus_info[node].master; nlast = nfirst+armci_clus_info[node].nslave-1; if((_armci_buf_state->table[index].to<(unsigned int) nfirst) || (_armci_buf_state->table[index].to>(unsigned int) nlast)) armci_die2("_armci_buf_ensure_one_outstanding_op_per_node: bad to",node, (int)_armci_buf_state->table[index].to); for(i=0;itable +i; if((buf_state->to >= nfirst) && (buf_state->to<= (unsigned int) nlast)) if((buf_state->first != (unsigned int) this)&&(buf_state->first==(unsigned int) i) && buf_state->op){ _armci_buf_complete_index(i,0); _armci_buf_release_index(i); } } } /*\ same as above but for process \*/ void _armci_buf_ensure_one_outstanding_op_per_proc(void *buf, int proc) { int i; int index = _armci_buf_to_index(buf); int this = _armci_buf_state->table[index].first; if(_armci_buf_state->table[index].to !=(unsigned int) proc ) armci_die2("_armci_buf_ensure_one_outstanding_op_per_proc: bad to", proc, (int)_armci_buf_state->table[index].to); for(i=0;itable +i; if(buf_state->to == (unsigned int) proc) if((buf_state->first != (unsigned int) this)&&(buf_state->first==(unsigned int) i) && buf_state->op) _armci_buf_complete_index(i,0); } } #define HISTORY__ #ifdef HISTORY typedef struct{ int size; int op; int count; int id; } history_t; history_t history[100]; int h=0; void print_history() { int i; fflush(stdout); printf("%d records\n",h); for(i=0; ibuf[history[i].id].buffer, history[i].count, history[i].op); fflush(stdout); } #endif enum {CALL_GET, CALL_RELEASE} last_call_ = CALL_RELEASE; #if DEBUG3_ static int get_count_ = 0; static int release_count_ = 0; #endif /* release buffer, update free buffers bitmaps */ void _armci_buf_release_index(int tbl_idx) { int idx; #if DEBUG3_ release_count_++; if (last_call_ != CALL_GET) { printf("same call: trying to release %s buffer\n" " %d release calls to date\n", tbl_idx >= MAX_BUFS ? "small" : "regular", release_count_); } else last_call_ = CALL_RELEASE; int mark = !(tbl_idx < MAX_BUFS ? _armci_buf_state->buf_bitmap : _armci_buf_state->smbuf_bitmap); #endif if ((tbl_idx >= MAX_BUFS+MAX_SMALL_BUFS) || (tbl_idx < 0)) armci_die2("armci_buf_release: bad index:", tbl_idx, MAX_BUFS); THREAD_LOCK(armci_user_threads.buf_lock); if (tbl_idx < MAX_BUFS) { idx = tbl_idx; _armci_buf_state->buf_bitmap |= 1 << idx; _armci_buf_state->buf[idx].id.tag = 0; } else { idx = tbl_idx - MAX_BUFS; _armci_buf_state->smbuf_bitmap |= 1 << idx; _armci_buf_state->smallbuf[idx].id.tag = 0; } _armci_buf_state->table[tbl_idx].busy = 0; THREAD_UNLOCK(armci_user_threads.buf_lock); #if DEBUG3_ if (mark) printf("release of empty buffer pool, after: %d\n", tbl_idx < MAX_BUFS ? _armci_buf_state->buf_bitmap : _armci_buf_state->smbuf_bitmap); #endif } /*\ release buffer when it becomes free \*/ INLINE void _armci_buf_release(void *buf) { _armci_buf_release_index(_armci_buf_to_index(buf)); } /* call corresponding to GET_SEND_BUF */ char *_armci_buf_get(int size, int operation, int to) { int avail; /* needed by INIT_SEND_BUF for MELLANOX */ unsigned bitmap; int small = size < SMALL_BUF_LEN; int max_bufs = small ? MAX_SMALL_BUFS : MAX_BUFS; int idx = 0; /* same type buffers index: 0..{MAX_BUFS|MAX_SMALL_BUFS}-1 */ int tbl_idx; /* global index in table: 0..MAX_BUFS+MAX_SMALL_BUFS-1 */ int not_ready = 1; #if DEBUG3_ get_count_++; if (last_call_ != CALL_RELEASE) { printf("same call: trying to get %s buffer\n" " %d get calls to date, %d release calls to date, bitmap: %d\n", small ? "small" : "regular", get_count_, release_count_, small ? _armci_buf_state->smbuf_bitmap : _armci_buf_state->buf_bitmap); } else last_call_ = CALL_GET; /* debug hook: no buffers left */ if (!(small ? _armci_buf_state->smbuf_bitmap : _armci_buf_state->buf_bitmap)) bitmap = small ? _armci_buf_state->smbuf_bitmap : _armci_buf_state->buf_bitmap; #endif while (not_ready) { THREAD_LOCK(armci_user_threads.buf_lock); bitmap = small ? _armci_buf_state->smbuf_bitmap : _armci_buf_state->buf_bitmap; /* check if there are available buffers */ if (bitmap) { /* find available buffer in the bitmap */ for (idx = 0; idx < max_bufs; idx++) { if (bitmap & (1 << idx)) break; } if (idx >= max_bufs) armci_die("_armci_buf_get: buffer idx is out of the range",idx); /* mark buffer as taken in the bitmap and busy */ bitmap &= ~((unsigned)(1 << idx)); if (small) { tbl_idx = idx + MAX_BUFS; _armci_buf_state->smbuf_bitmap = bitmap; } else { tbl_idx = idx; _armci_buf_state->buf_bitmap = bitmap; } #if 0 _armci_buf_state->table[tbl_idx].busy = 1; #endif THREAD_UNLOCK(armci_user_threads.buf_lock); not_ready = 0; } else { THREAD_UNLOCK(armci_user_threads.buf_lock); /* try network complete */ #if defined(SOCKETS) || defined(MELLANOX) tbl_idx = armci_test_network_complete(); #else /* all network should eventually use armci_test_network_complete */ tbl_idx = small ? _armci_buf_state->smavail : _armci_buf_state->avail; #endif avail = tbl_idx; if ((tbl_idx >= MAX_BUFS+MAX_SMALL_BUFS) || (tbl_idx < 0 && tbl_idx != -1)) armci_die2("_armci_buf_get: bad idx:", tbl_idx, MAX_BUFS); if (tbl_idx < 0) { /*printf("armci_test_network_complete returned -1\n");fflush(stdout);*/ cpu_yield(); } else { /* could complete a buffer */ /* ignore a busy buffer */ #if DEBUG3_ printf("armci_test_network_complete, gets:%d, releases:%d\n", get_count_, release_count_); #endif if (_armci_buf_state->table[tbl_idx].busy) { printf("BUFFER BUSY 1\n"); continue; } /* complete buffer */ _armci_buf_complete_index(tbl_idx, 0); /* tbl_idx < MAX_BUFS ^ small - 1 if completed compatible buffer */ if ((tbl_idx < MAX_BUFS) ^ small) { THREAD_LOCK(armci_user_threads.buf_lock); /* is this check really necessary ??? */ if (!_armci_buf_state->table[tbl_idx].busy) { #if 0 _armci_buf_state->table[tbl_idx].busy = 1; #endif not_ready = 0; #if DEBUG3_ release_count_++; printf("released in get, gets:%d, releases:%d\n", get_count_, release_count_); #endif } else { printf("BUFFER BUSY 2\n"); } THREAD_UNLOCK(armci_user_threads.buf_lock); idx = small ? tbl_idx - MAX_BUFS : tbl_idx; } else _armci_buf_release_index(tbl_idx); } } } /* initialize buffer */ _armci_buf_state->table[tbl_idx].op = operation; _armci_buf_state->table[tbl_idx].to = to; _armci_buf_state->table[tbl_idx].count = 1; _armci_buf_state->table[tbl_idx].first = tbl_idx; _armci_buf_state->table[tbl_idx].cmpl = 0; /* Note: tbl_idx is used in vapi vesrion of INIT_SEND_BUF */ if (small) { _armci_buf_state->smallbuf[idx].id.tag = 0; _armci_buf_state->smallbuf[idx].id.bufid = tbl_idx; _armci_buf_state->smallbuf[idx].id.protocol = 0; # ifdef BUF_EXTRA_FIELD_T INIT_SEND_BUF(_armci_buf_state->smallbuf[idx].field, _armci_buf_state->table[tbl_idx].snd, _armci_buf_state->table[tbl_idx].rcv); #endif } else { _armci_buf_state->buf[idx].id.tag = 0; _armci_buf_state->buf[idx].id.bufid = tbl_idx; _armci_buf_state->buf[idx].id.protocol = 0; # ifdef BUF_EXTRA_FIELD_T INIT_SEND_BUF(_armci_buf_state->buf[idx].field, _armci_buf_state->table[idx].snd, _armci_buf_state->table[idx].rcv); #endif } return small ? _armci_buf_state->smallbuf[idx].buffer : _armci_buf_state->buf[idx].buffer; } /*\ return pointer to buffer number id \*/ char *_armci_buf_ptr_from_id(int id) { if(id <0 || id >=(MAX_BUFS+MAX_SMALL_BUFS)) armci_die2("armci_buf_ptr_from_id: bad id",id,MAX_BUFS); if(id >=MAX_BUFS)return(_armci_buf_state->smallbuf[id-MAX_BUFS].buffer); return(_armci_buf_state->buf[id].buffer); } /*\function called from PARMCI_Wait to wait for non-blocking ops \*/ void _armci_buf_complete_nb_request(int bufid,unsigned int tag, int *retcode) { int i=0; #if 0 printf("\n%d:wait called with bufid=%d tag=%d \n",armci_me,bufid,tag); fflush(stdout); #endif if(bufid == NB_NONE) *retcode=0; else if(bufid == NB_MULTI) { for(i=0;ibuf[i].id.tag) _armci_buf_complete_index(i,1); } for(i=0;ismallbuf[i].id.tag) _armci_buf_complete_index(i+MAX_BUFS,1); } *retcode=0; } else { if(bufidbuf[bufid].id.tag) _armci_buf_complete_index(bufid,1); } else{ if(tag && tag==_armci_buf_state->smallbuf[bufid-MAX_BUFS].id.tag) _armci_buf_complete_index(bufid,1); } *retcode=0; } } /*\function called from PARMCI_Test to test completion of non-blocking ops \*/ void _armci_buf_test_nb_request(int bufid,unsigned int tag, int *retcode) { int i; if(bufid == NB_NONE) *retcode=0; else if(bufid == NB_MULTI) { for(i=0;ibuf[i].id.tag){ if(_armci_buf_test_index(i,1)){ *retcode=1; break; } } } for(i=0;ismallbuf[i].id.tag) if(_armci_buf_test_index(i+MAX_BUFS,1)){ *retcode=1; break; } } } else { if(bufidbuf[bufid].id.tag) *retcode = _armci_buf_test_index(bufid,1); } else{ if(tag && tag==_armci_buf_state->smallbuf[bufid-MAX_BUFS].id.tag) *retcode = _armci_buf_test_index(bufid,1); } } } /*\function to set the buffer tag and the protocol \*/ void _armci_buf_set_tag(void *bufptr,unsigned int tag,short int protocol) { int index = _armci_buf_to_index(bufptr); /*_armci_buf_state->table[index].async=1;*/ if(indexbuf[index].id.tag=tag; _armci_buf_state->buf[index].id.protocol=protocol; } else{ _armci_buf_state->smallbuf[index-MAX_BUFS].id.tag=tag; _armci_buf_state->smallbuf[index-MAX_BUFS].id.protocol=protocol; } } /*\function to return bufinfo, given buf ptr \*/ BUF_INFO_T *_armci_buf_to_bufinfo(void *buf){ if(buf > (void *)_armci_buffers && buf < (void *)(_armci_buffers+MAX_BUFS)){ return(&((BUF_TO_EBUF(buf))->id)); } else if(buf > (void *)_armci_smbuffers && buf < (void *)(_armci_smbuffers+MAX_SMALL_BUFS)){ return(&((BUF_TO_SMEBUF(buf))->id)); } else { armci_die("armci_buf_to_index: bad pointer",0); return(0); } } /*\function to clear all buffers \*/ void _armci_buf_clear_all() { int i; for(i=0;itable[i].op || _armci_buf_state->table[i].first) CLEAR_SEND_BUF_FIELD(_armci_buf_state->buf[i].field,_armci_buf_state->table[i].snd,_armci_buf_state->table[i].rcv,_armci_buf_state->table[i].to,_armci_buf_state->table[i].op); #endif } for(i=MAX_BUFS;itable[i].op || _armci_buf_state->table[i].first) CLEAR_SEND_BUF_FIELD(_armci_buf_state->smallbuf[i-MAX_BUFS].field,_armci_buf_state->table[i].snd,_armci_buf_state->table[i].rcv,_armci_buf_state->table[i].to,_armci_buf_state->table[i].op); #endif } } #ifdef VAPI /* this will work for vapi as there is no get pipeline enabled in vapi * with get pipeline, this will break very badly */ void _armci_buf_update_scatter_count(int id) { int i,num,last,first; for(i=0;itable[i].op==GET){ request_header_t *msginfo; msginfo = (request_header_t*)_armci_buf_state->buf[i].buffer; if(msginfo->pinned && msginfo->bypass && msginfo->format == STRIDED){ num = *(int *)((char *)msginfo+msginfo->bytes); last = *(int *)((char *)msginfo+msginfo->bytes+sizeof(int)); first = last - num+1; if(first < 0 )first+=DSCRID_SCATTERCLIENT_END-DSCRID_SCATTERCLIENT-1; if(id == first && num!=0){ *(int *)((char *)msginfo+msginfo->bytes) = (--num); return; } } } # endif } for(i=MAX_BUFS;itable[i].op==GET){ request_header_t *msginfo = (request_header_t*)_armci_buf_state->smallbuf[i-MAX_BUFS].buffer; if(msginfo->pinned && msginfo->bypass && msginfo->format == STRIDED){ num = *(int *)((char *)msginfo+msginfo->bytes); last = *(int *)((char *)msginfo+msginfo->bytes+sizeof(int)); first = last - num+1; if(first < 0 )first+=DSCRID_SCATTERCLIENT_END-DSCRID_SCATTERCLIENT-1; if(id == first && num!=0){ *(int *)((char *)msginfo+msginfo->bytes) = (--num); return; } } } # endif } } #endif #else /* (defined(THREAD_SAFE) || defined(SOCKETS)) */ /*\ we allocate alligned buffer space * this operation can be implemented in platform specific files \*/ void _armci_buf_init() { char *tmp; int extra=0; int smallbuf_size = sizeof(buf_smext_t)*(MAX_SMALL_BUFS); tmp = (char *)BUF_ALLOCATE((MAX_BUFS*sizeof(buf_ext_t) + 64 + smallbuf_size)); extra= ALIGN64ADD(tmp); #if 0 if(sizeof(buf_state_t) != sizeof(int)) armci_die("armci_buf_init size buf_state_t!=int",sizeof(buf_state_t)); #endif _armci_buffers = (buf_ext_t *) (tmp + extra); tmp = (char *)(_armci_buffers + MAX_BUFS); extra = ALIGN64ADD(tmp); _armci_smbuffers = (buf_smext_t *) (tmp + extra); if(DEBUG2_){ printf("%d:armci_init_bufs: pointer %p, before align ptr=%p bufptr=%p end of region is %p size=%d extra=%d\n", armci_me,_armci_buffers,tmp,_armci_buffers->buffer,(_armci_buffers+MAX_BUFS), MAX_BUFS*sizeof(buf_ext_t),extra); fflush(stdout); } /* now allocate state array */ tmp = calloc(1, sizeof(reqbuf_pool_t) + 64); if(!tmp)armci_die("_armci_buf_init calloc failed",0); extra= ALIGN64ADD(tmp); _armci_buf_state = (reqbuf_pool_t*)(tmp + extra); /* initialize it */ _armci_buf_state->left_guard = LEFT_GUARD; _armci_buf_state->right_guard = RIGHT_GUARD; _armci_buf_state->avail =0; _armci_buf_state->smavail =MAX_BUFS; _armci_buf_state->buf = _armci_buffers; _armci_buf_state->smallbuf = _armci_smbuffers; if(BUF_TO_EBUF(_armci_buf_state->buf[0].buffer)!=_armci_buf_state->buf) armci_die("buffers.c, internal structure alignment problem",0); } /*\ convert buffer pointer to index (in state array) \*/ int _armci_buf_to_index(void *buf) { int index; char *ptr = (char*)buf; if(DEBUG2_){ printf("%d: in _armci_buf_to_index %p\n",armci_me, buf); fflush(stdout); } if(buf > (void *)_armci_buffers && buf < (void *)(_armci_buffers+MAX_BUFS)){ index = BUF_TO_BUFINDEX(ptr); if((index >= MAX_BUFS)|| (index<0)) armci_die2("armci_buf_to_index: bad index:",index,MAX_BUFS); return(index); } else if(buf > (void *)_armci_smbuffers && buf < (void *)(_armci_smbuffers+MAX_SMALL_BUFS)){ index = BUF_TO_SMBUFINDEX(ptr); if((index >= MAX_BUFS+MAX_SMALL_BUFS)|| (indextable +idx; /* printf("%d: buf_complete_index. idx=%d\n", armci_me, idx);*/ /* fflush(stdout);*/ /* if(buf_state->op==GET) { */ /* printf("%d: %s(): op is get\n",armci_me,FUNCTION_NAME); */ /* } */ count = buf_state->count; if(DEBUG_ ) { printf("%d:buf_complete_index:%d op=%d first=%d count=%d called=%d\n", armci_me,idx,buf_state->op,buf_state->first,buf_state->count, called); fflush(stdout); } if(buf_state->first != (unsigned int)idx){ armci_die2("complete_buf_index:inconsistent Index:",idx,buf_state->first); } if(buf_state->async){ /* completion of strided get should release that buffer */ if(buf_state->op == GET); else armci_die2("buf_complete_index: async mode not avail for this op", buf_state->op,idx); } # ifdef BUF_EXTRA_FIELD_T else{ /* need to call platform specific function */ if(idx>=MAX_BUFS){ int relidx; relidx = idx-MAX_BUFS; /* printf("%d:%s(): Calling clear_send_buf_field\n",armci_me,FUNCTION_NAME); */ CLEAR_SEND_BUF_FIELD(_armci_buf_state->smallbuf[relidx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op); /*later, we might just need to do this for all operations, not just get*/ if(_armci_buf_state->smallbuf[relidx].id.tag!=0 &&(buf_state->op == GET)){ armci_complete_req_buf(&(_armci_buf_state->smallbuf[relidx].id), _armci_buf_state->smallbuf[relidx].buffer); } _armci_buf_state->smallbuf[relidx].id.tag=0; } else { CLEAR_SEND_BUF_FIELD(_armci_buf_state->buf[idx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op); /*later, we might just need to do this for all operations, not just get*/ if(_armci_buf_state->buf[idx].id.tag!=0 &&(buf_state->op == GET)){ armci_complete_req_buf(&(_armci_buf_state->buf[idx].id), _armci_buf_state->buf[idx].buffer); } _armci_buf_state->buf[idx].id.tag=0; } } # endif /* clear table slots for all the buffers in the set for this request */ assert(count==1); for(; count; count--, buf_state++) { /* *(int*)buf_state = 0; */ memset(buf_state, '\0', sizeof(buf_state_t)); } } /*\ test outstanding operation that uses the specified buffer for complete * It is important not to change the state of the buffer, the buffer has * to remain as it was, only completion has to be indicated \*/ int _armci_buf_test_index(int idx, int called) { int count,retval=0; buf_state_t *buf_state = _armci_buf_state->table +idx; count = buf_state->count; if(DEBUG_ ){ printf("%d:buf_test_index:%d op=%d first=%d count=%d called=%d\n", armci_me,idx,buf_state->op,buf_state->first,buf_state->count, called); fflush(stdout); } if(buf_state->first != (unsigned int)idx){ armci_die2("_buf_test_index:inconsistent index:",idx,buf_state->first); } # ifdef BUF_EXTRA_FIELD_T /* need to call platform specific function */ if(idx>=MAX_BUFS){ int relidx; relidx = idx-MAX_BUFS; /*printf("\n%d:relidx=%d \n",armci_me,relidx);fflush(stdout);*/ TEST_SEND_BUF_FIELD(_armci_buf_state->smallbuf[relidx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op,&retval); } else { TEST_SEND_BUF_FIELD(_armci_buf_state->buf[idx].field,buf_state->snd,buf_state->rcv,buf_state->to,buf_state->op,&retval); } # endif if(DEBUG_ ){ printf("%d:buf_test_index:%d op=%d first=%d count=%d called=%d ret=%d\n", armci_me,idx,buf_state->op,buf_state->first,buf_state->count, called,retval); fflush(stdout); } return(retval); } /** an addition to the below operation to allow for multiple outstanding operations per server node */ #if defined(PEND_BUFS) /** Need to implement effective mechanisms to ensure a given number of outstanding operations. The key is to not wait for a recently sent message. Another issue might be priority between the large and small messages. This function will be improved as needed. X_BUFS+ */ void _armci_buf_ensure_pend_outstanding_op_per_node(void *buf, int node) { unsigned int i; int index =_armci_buf_to_index(buf); int this = _armci_buf_state->table[index].first; unsigned int nfirst, nlast; void _armci_buf_release_index(int i); int buf_pend_count=0; int max_pend_count=IMM_BUF_NUM; /* printf("%d: ensure_pend_os_per_node. idx=%d\n", armci_me, index);*/ /* fflush(stdout);*/ nfirst=armci_clus_info[node].master; nlast = nfirst+armci_clus_info[node].nslave-1; if((_armci_buf_state->table[index].to<(unsigned int) nfirst) || (_armci_buf_state->table[index].to>(unsigned int) nlast)) armci_die2("_armci_buf_ensure_pend_outstanding_op_per_node: bad to",node, (int)_armci_buf_state->table[index].to); #if 0 for(i=0;itable +i; if((buf_state->to >= nfirst) && (buf_state->to<= (unsigned int) nlast)) if((buf_state->first != (unsigned int) this)&&(buf_state->first==(unsigned int) i) && buf_state->op){ buf_pend_count++; if(buf_pend_count > IMM_BUF_NUM-1){ /* printf("%d: client. pend_os_per_node. completing buf index=%d\n", armci_me, i); */ /* fflush(stdout); */ _armci_buf_complete_index(i,0); _armci_buf_release_index(i); /* printf("%d: client. pend_os_per_node. done completing buf index=%d\n", armci_me, i); */ fflush(stdout); buf_pend_count--; } } } #else const int smavail=_armci_buf_state->smavail; const int avail = _armci_buf_state->avail; const int startsmall = (smavail-MAX_BUFS-1+MAX_SMALL_BUFS)%MAX_SMALL_BUFS+MAX_BUFS; const int start =(avail-1+MAX_BUFS)%MAX_BUFS; buf_pend_count=0; buf_state_t *bs; i = start; bs = &_armci_buf_state->table[i]; do { if((bs->to>=nfirst) && (bs->to<=nlast)) { if((bs->first!=this) && (bs->first==i) && bs->op) { #if defined(OPENIB) /*SK: not tested on other platforms*/ if(!_armci_buf_test_index(i,1)) { buf_pend_count++; } #else buf_pend_count++; #endif if(buf_pend_count > max_pend_count-1) { /* printf("%d:%s():complete largebuf %d\n",armci_me,FUNCTION_NAME,i); */ _armci_buf_complete_index(i,0); _armci_buf_release_index(i); buf_pend_count--; } } } i = (i-1+MAX_BUFS)%MAX_BUFS; bs = &_armci_buf_state->table[i]; } while(i != start); /* printf("%d: largebuf pend=%d\n",armci_me,buf_pend_count); */ i = startsmall; bs = &_armci_buf_state->table[i]; do { if((bs->to>=nfirst) && (bs->to<=nlast)) { if((bs->first!=this) && (bs->first==i) && bs->op) { #if defined(OPENIB) /*SK:not tested on other platforms*/ if(!_armci_buf_test_index(i,1)) { buf_pend_count++; } #else buf_pend_count++; #endif if(buf_pend_count > max_pend_count-1) { /* printf("%d:%s():complete smallbuf %d\n",armci_me,FUNCTION_NAME,i); */ _armci_buf_complete_index(i,0); _armci_buf_release_index(i); buf_pend_count--; } } } i = (i-MAX_BUFS-1+MAX_SMALL_BUFS)%MAX_SMALL_BUFS+MAX_BUFS; bs = &_armci_buf_state->table[i]; } while(i != startsmall); buf_pend_count=0; for(i=0; ito>=nfirst) && (bs->to<=nlast)) { if((bs->first!=this) && (bs->first==i) && bs->op) { buf_pend_count += 1; } } } assert(buf_pend_count <= max_pend_count); #endif } void _armci_buf_ensure_pend_outstanding_op_per_proc(void *buf, int proc) { int i; int index = _armci_buf_to_index(buf); int this = _armci_buf_state->table[index].first; void _armci_buf_release_index(int i); int buf_pend_count=0; if(_armci_buf_state->table[index].to !=(unsigned int) proc ) armci_die2("_armci_buf_ensure_one_outstanding_op_per_proc: bad to", proc, (int)_armci_buf_state->table[index].to); for(i=0;itable +i; if(buf_state->to == (unsigned int) proc) { if((buf_state->first != (unsigned int) this)&&(buf_state->first==(unsigned int) i) && buf_state->op){ buf_pend_count++; if(buf_pend_count > IMM_BUF_NUM-1){ _armci_buf_complete_index(i,0); _armci_buf_release_index(i); buf_pend_count--; } } } } } #endif /*\ make sure that there are no other pending operations to that smp node * this operation is called from platforms specific routine that sends * request * we could have accomplished the same in armci_buf_get but as Vinod * is pointing out, it is better to delay completing outstanding * calls to overlap memcpy for the current buffer with communication \*/ void _armci_buf_ensure_one_outstanding_op_per_node(void *buf, int node) { int i; int index =_armci_buf_to_index(buf); int this = _armci_buf_state->table[index].first; int nfirst, nlast; void _armci_buf_release_index(int i); nfirst=armci_clus_info[node].master; nlast = nfirst+armci_clus_info[node].nslave-1; if((_armci_buf_state->table[index].to<(unsigned int) nfirst) || (_armci_buf_state->table[index].to>(unsigned int) nlast)) armci_die2("_armci_buf_ensure_one_outstanding_op_per_node: bad to",node, (int)_armci_buf_state->table[index].to); for(i=0;itable +i; if((buf_state->to >= nfirst) && (buf_state->to<= (unsigned int) nlast)) { if((buf_state->first != (unsigned int) this)&&(buf_state->first==(unsigned int) i) && buf_state->op) { _armci_buf_complete_index(i,0); _armci_buf_release_index(i); } } } } /*\ same as above but for process \*/ void _armci_buf_ensure_one_outstanding_op_per_proc(void *buf, int proc) { int i; int index = _armci_buf_to_index(buf); int this = _armci_buf_state->table[index].first; void _armci_buf_release_index(int i); if(_armci_buf_state->table[index].to !=(unsigned int) proc ) armci_die2("_armci_buf_ensure_one_outstanding_op_per_proc: bad to", proc, (int)_armci_buf_state->table[index].to); for(i=0;itable +i; if(buf_state->to == (unsigned int) proc) { if((buf_state->first != (unsigned int) this)&&(buf_state->first==(unsigned int) i) && buf_state->op) { _armci_buf_complete_index(i,0); _armci_buf_release_index(i); } } } } #define HISTORY__ #ifdef HISTORY typedef struct{ int size; int op; int count; int id; } history_t; history_t history[100]; int h=0; void print_history() { int i; fflush(stdout); printf("%d records\n",h); for(i=0; ibuf[history[i].id].buffer, history[i].count, history[i].op); fflush(stdout); } #endif /*\ call corresponding to GET_SEND_BUF \*/ char *_armci_buf_get_small(int size, int operation, int to) { int avail=_armci_buf_state->smavail,i; /* int ous_in=0,ous_out; */ /* for(i=MAX_BUFS; itable[i].first) { */ /* assert(_armci_buf_state->table[i].op); */ /* } */ /* if(_armci_buf_state->table[i].op) { */ /* assert(_armci_buf_state->table[i].first==i); */ /* ous_in++; */ /* } */ /* } */ if((_armci_buf_state->table[avail].op || _armci_buf_state->table[avail].first)) { for(i=MAX_BUFS;itable[i].op && !_armci_buf_state->table[i].first) break; #if defined(OPENIB) /*not tested on other platforms*/ if(_armci_buf_test_index(i,1)) { /* ous_in-=1; */ break; } #endif } if(i<(MAX_SMALL_BUFS+MAX_BUFS))avail = i; else { /* printf("%d: no free smallbuf. complete index %d\n",armci_me,avail); */ _armci_buf_complete_index(avail,1); /* ous_in-=1; */ } } _armci_buf_state->table[avail].op = operation; _armci_buf_state->table[avail].to = to; _armci_buf_state->table[avail].count= 1; _armci_buf_state->table[avail].first = avail; _armci_buf_state->smallbuf[avail-MAX_BUFS].id.tag=0; _armci_buf_state->smallbuf[avail-MAX_BUFS].id.bufid= avail; _armci_buf_state->smallbuf[avail-MAX_BUFS].id.protocol=0; if(DEBUG_ || 0) { printf("%d:buf_get_sm1:size=%d max=%d got %d ptr=%p op=%d to=%d count=%d first=%d\n", armci_me,size,SMALL_BUF_LEN,avail, _armci_buf_state->smallbuf[avail-MAX_BUFS].buffer,operation,to, (int)_armci_buf_state->table[avail].count,(int)_armci_buf_state->table[avail].first); fflush(stdout); } # ifdef BUF_EXTRA_FIELD_T INIT_SEND_BUF(_armci_buf_state->smallbuf[avail-MAX_BUFS].field,_armci_buf_state->table[avail].snd,_armci_buf_state->table[avail].rcv); #endif _armci_buf_state->smavail = (avail+1-MAX_BUFS)%MAX_SMALL_BUFS + MAX_BUFS; if(DEBUG_ || 0) { printf("%d:buf_get_sm:size=%d max=%d got %d ptr=%p op=%d to=%d count=%d first=%d\n", armci_me,size,SMALL_BUF_LEN,avail, _armci_buf_state->smallbuf[avail-MAX_BUFS].buffer,operation,to, _armci_buf_state->table[avail].count,_armci_buf_state->table[avail].first); fflush(stdout); } /* ous_out=0; */ /* for(i=MAX_BUFS; itable[i].first) { */ /* assert(_armci_buf_state->table[i].op); */ /* } */ /* if(_armci_buf_state->table[i].op) { */ /* assert(_armci_buf_state->table[i].first==i); */ /* ous_out++; */ /* } */ /* } */ /* assert(ous_in+1 == ous_out); */ return(_armci_buf_state->smallbuf[avail-MAX_BUFS].buffer); } /*\ call corresponding to GET_SEND_BUF \*/ char *_armci_buf_get(int size, int operation, int to) { int avail=_armci_buf_state->avail; int count=1, i; /* int ous_in, ous_out; */ /*if small buffer, we go to another routine that gets smallbuf*/ if(size MSG_BUFLEN_SMALL) ){ double val = (double)size; /* use double due to a bug in gcc */ val /= MSG_BUFLEN_SMALL; count=(int)val; if(size%MSG_BUFLEN_SMALL) count++; assert(0); /*FOR NOW:Should never require multiple buffers; what else is pack.c for?*/ } /* start from 0 if there is not enough bufs available from here */ if((avail+count) > MAX_BUFS)avail = 0; /* ous_in=0; */ /* for(i=0; itable[i].first) { */ /* assert(_armci_buf_state->table[i].op); */ /* } */ /* if(_armci_buf_state->table[i].op) { */ /* assert(_armci_buf_state->table[i].first==i); */ /* ous_in++; */ /* } */ /* } */ /* avail should never point to buffer in a middle of a set of used bufs */ if(_armci_buf_state->table[avail].op && (_armci_buf_state->table[avail].first != (unsigned int) avail)){ sleep(1); printf("%d: inconsistent first. avail=%d count=%d first=%d size=%d\n", armci_me, avail, count, _armci_buf_state->table[avail].first, size); armci_die2("armci_buf_get: inconsistent first", avail, _armci_buf_state->table[avail].first); } #if 0 /* we need complete "count" number of buffers */ for(i=0;itable[cur].op && _armci_buf_state->table[cur].first==(unsigned int) cur) _armci_buf_complete_index(cur,1); } #else assert(count == 1); if(_armci_buf_state->table[avail].op || _armci_buf_state->table[avail].first) { for(i=0; itable[i].op && !_armci_buf_state->table[i].first) break; #if defined(OPENIB) if(_armci_buf_test_index(i,1)) { /* ous_in -= 1; */ break; } #endif } if(itable[avail+i].op = operation; _armci_buf_state->table[avail+i].to = to; _armci_buf_state->table[avail+i].count= count; _armci_buf_state->table[avail+i].first = avail; } _armci_buf_state->buf[avail].id.tag=0; _armci_buf_state->buf[avail].id.bufid=avail; _armci_buf_state->buf[avail].id.protocol=0; # ifdef BUF_EXTRA_FIELD_T INIT_SEND_BUF(_armci_buf_state->buf[avail].field,_armci_buf_state->table[avail].snd,_armci_buf_state->table[avail].rcv); #endif #ifdef HISTORY history[h].size=size; history[h].op=operation; history[h].count=count; history[h].id = avail; h++; #endif if(DEBUG_ || 0) { printf("%d:buf_get:size=%d max=%d got %d ptr=%p count=%d op=%d to=%d\n", armci_me,size,MSG_BUFLEN_SMALL,avail, _armci_buf_state->buf[avail].buffer, count,operation,to); fflush(stdout); } /* select candidate buffer for next allocation request */ _armci_buf_state->avail = avail+count; _armci_buf_state->avail %= MAX_BUFS; /* ous_out=0; */ /* for(i=0; itable[i].first) { */ /* assert(_armci_buf_state->table[i].op); */ /* } */ /* if(_armci_buf_state->table[i].op) { */ /* assert(_armci_buf_state->table[i].first==i); */ /* ous_out++; */ /* } */ /* } */ /* assert(ous_in+1 == ous_out); */ return(_armci_buf_state->buf[avail].buffer); } void _armci_buf_release_index(int index) { int count; buf_state_t *buf_state = _armci_buf_state->table +index; char *_armci_buf_ptr_from_id(int id); if((index >= MAX_BUFS+MAX_SMALL_BUFS)|| (index<0)) armci_die2("armci_buf_release: bad index:",index,MAX_BUFS); count = _armci_buf_state->table[index].count; if(DEBUG_) { printf("%d:_armci_buf_release_index %d ptr=%p count=%d op=%d smavail=%d\n", armci_me,index,_armci_buf_ptr_from_id(index),count, _armci_buf_state->table[index].op,_armci_buf_state->smavail); fflush(stdout); } /* clear table slots for all the buffers in the set for this request */ for(; count; count--, buf_state++) { memset(buf_state, '\0', sizeof(buf_state_t)); /* *(int*)buf_state = 0; */ } if(index >= MAX_BUFS){ _armci_buf_state->smallbuf[index-MAX_BUFS].id.tag=0; #ifndef VAPI _armci_buf_state->smavail = index; #endif } else{ _armci_buf_state->buf[index].id.tag=0; #ifndef VAPI _armci_buf_state->avail = index; #endif } /* the current buffer is prime candidate to satisfy next buffer request */ } /*\ release buffer when it becomes free \*/ void _armci_buf_release(void *buf) { _armci_buf_release_index(_armci_buf_to_index(buf)); } /*\ return pointer to buffer number id \*/ char *_armci_buf_ptr_from_id(int id) { if(id <0 || id >=(MAX_BUFS+MAX_SMALL_BUFS)) armci_die2("armci_buf_ptr_from_id: bad id",id,MAX_BUFS); if(id >=MAX_BUFS)return(_armci_buf_state->smallbuf[id-MAX_BUFS].buffer); return(_armci_buf_state->buf[id].buffer); } /*\function called from PARMCI_Wait to wait for non-blocking ops \*/ void _armci_buf_complete_nb_request(int bufid,unsigned int tag, int *retcode) { int i=0; #if 0 printf("\n%d:wait called with bufid=%d tag=%d \n",armci_me,bufid,tag); fflush(stdout); #endif if(bufid == NB_NONE) *retcode=0; else if(bufid == NB_MULTI) { #if 0 for(i=0;ibuf[i].id.tag) _armci_buf_complete_index(i,1); } for(i=0;ismallbuf[i].id.tag) _armci_buf_complete_index(i+MAX_BUFS,1); } #else { const int smavail=_armci_buf_state->smavail; const int avail = _armci_buf_state->avail; const int startsmall = (smavail-MAX_BUFS+1+MAX_SMALL_BUFS)%MAX_SMALL_BUFS+MAX_BUFS; const int start =(avail+1+MAX_BUFS)%MAX_BUFS; i = start; do { if(tag && tag==_armci_buf_state->buf[i].id.tag) _armci_buf_complete_index(i,1); i = (i+1+MAX_BUFS)%MAX_BUFS; } while(i != start); i = startsmall; do { if(tag && tag==_armci_buf_state->smallbuf[i-MAX_BUFS].id.tag) _armci_buf_complete_index(i,1); i = (i-MAX_BUFS+1+MAX_SMALL_BUFS)%MAX_SMALL_BUFS+MAX_BUFS; } while(i != startsmall); } #endif *retcode=0; } else { if(bufidbuf[bufid].id.tag) _armci_buf_complete_index(bufid,1); } else{ if(tag && tag==_armci_buf_state->smallbuf[bufid-MAX_BUFS].id.tag) _armci_buf_complete_index(bufid,1); } *retcode=0; } } /*\function called from PARMCI_Test to test completion of non-blocking ops \*/ void _armci_buf_test_nb_request(int bufid,unsigned int tag, int *retcode) { int i; if(bufid == NB_NONE) *retcode=0; else if(bufid == NB_MULTI) { for(i=0;ibuf[i].id.tag){ if(_armci_buf_test_index(i,1)){ *retcode=1; break; } } } for(i=0;ismallbuf[i].id.tag) if(_armci_buf_test_index(i+MAX_BUFS,1)){ *retcode=1; break; } } } else { if(bufidbuf[bufid].id.tag) *retcode = _armci_buf_test_index(bufid,1); } else{ if(tag && tag==_armci_buf_state->smallbuf[bufid-MAX_BUFS].id.tag) *retcode = _armci_buf_test_index(bufid,1); } } } /*\function to set the buffer tag and the protocol \*/ void _armci_buf_set_tag(void *bufptr,unsigned int tag,short int protocol) { int index = _armci_buf_to_index(bufptr); /*_armci_buf_state->table[index].async=1;*/ if(indexbuf[index].id.tag=tag; _armci_buf_state->buf[index].id.protocol=protocol; } else{ _armci_buf_state->smallbuf[index-MAX_BUFS].id.tag=tag; _armci_buf_state->smallbuf[index-MAX_BUFS].id.protocol=protocol; } } /*\function to return bufinfo, given buf ptr \*/ BUF_INFO_T *_armci_buf_to_bufinfo(void *buf){ if(buf > (void *)_armci_buffers && buf < (void *)(_armci_buffers+MAX_BUFS)){ return(&((BUF_TO_EBUF(buf))->id)); } else if(buf > (void *)_armci_smbuffers && buf < (void *)(_armci_smbuffers+MAX_SMALL_BUFS)){ return(&((BUF_TO_SMEBUF(buf))->id)); } else { armci_die("armci_buf_to_index: bad pointer",0); return(0); } } /*\function to clear all buffers \*/ void _armci_buf_clear_all() { int i; for(i=0;itable[i].op || _armci_buf_state->table[i].first) CLEAR_SEND_BUF_FIELD(_armci_buf_state->buf[i].field,_armci_buf_state->table[i].snd,_armci_buf_state->table[i].rcv,_armci_buf_state->table[i].to,_armci_buf_state->table[i].op); #endif } for(i=MAX_BUFS;itable[i].op || _armci_buf_state->table[i].first) CLEAR_SEND_BUF_FIELD(_armci_buf_state->smallbuf[i-MAX_BUFS].field,_armci_buf_state->table[i].snd,_armci_buf_state->table[i].rcv,_armci_buf_state->table[i].to,_armci_buf_state->table[i].op); #endif } } #ifdef VAPI /* this will work for vapi as there is no get pipeline enabled in vapi * with get pipeline, this will break very badly */ void _armci_buf_update_scatter_count(int id) { int i,num,last,first; for(i=0;itable[i].op==GET){ request_header_t *msginfo; msginfo = (request_header_t*)_armci_buf_state->buf[i].buffer; if(msginfo->pinned && msginfo->bypass && msginfo->format == STRIDED){ num = *(int *)((char *)msginfo+msginfo->bytes); last = *(int *)((char *)msginfo+msginfo->bytes+sizeof(int)); first = last - num+1; if(first < 0 )first+=DSCRID_SCATTERCLIENT_END-DSCRID_SCATTERCLIENT-1; if(id == first && num!=0){ *(int *)((char *)msginfo+msginfo->bytes) = (--num); return; } } } # endif } for(i=MAX_BUFS;itable[i].op==GET){ request_header_t *msginfo = (request_header_t*)_armci_buf_state->smallbuf[i-MAX_BUFS].buffer; if(msginfo->pinned && msginfo->bypass && msginfo->format == STRIDED){ num = *(int *)((char *)msginfo+msginfo->bytes); last = *(int *)((char *)msginfo+msginfo->bytes+sizeof(int)); first = last - num+1; if(first < 0 )first+=DSCRID_SCATTERCLIENT_END-DSCRID_SCATTERCLIENT-1; if(id == first && num!=0){ *(int *)((char *)msginfo+msginfo->bytes) = (--num); return; } } } # endif } } #endif #endif /* function to return bufinfo, given buf tag */ BUF_INFO_T *_armci_tag_to_bufinfo(msg_tag_t tag) { int idx; for (idx=0; idx < MAX_BUFS; idx++) if (EQ_TAGS(_armci_buffers[idx].id.tag, tag)) break; if (idx == MAX_BUFS) {/* not found is regular buffers */ for (idx = 0; idx < MAX_SMALL_BUFS; idx++) if (EQ_TAGS(_armci_smbuffers[idx].id.tag, tag)) break; if (idx == MAX_SMALL_BUFS) /* not found at all */ #ifdef SOCKETS armci_die("_armci_tag_to_bufinfo: bad tag",tag); #else armci_die("_armci_tag_to_bufinfo: bad tag",0); #endif return &(_armci_smbuffers[idx].id); } else return &(_armci_buffers[idx].id); } /* inline primitives for buffer state management */ INLINE char *_armci_buf_get_clear_busy(int size, int operation, int to) { char *buf = _armci_buf_get(size, operation, to); _armci_buf_set_busy(buf, 0); return buf; } INLINE void _armci_buf_set_busy(void *buf, int state) { _armci_buf_state->table[_armci_buf_to_index(buf)].busy = state; } INLINE void _armci_buf_set_busy_idx(int idx, int state) { _armci_buf_state->table[idx].busy = state; } #if 0 INLINE int _armci_buf_cmpld(void *buf) { return _armci_buf_state->table[_armci_buf_to_index(buf)].cmpl; } #else INLINE int _armci_buf_cmpld(int bufid) { return _armci_buf_state->table[bufid].cmpl; } #endif INLINE void _armci_buf_set_cmpld(void *buf, int state) { _armci_buf_state->table[_armci_buf_to_index(buf)].cmpl = state; } INLINE void _armci_buf_set_cmpld_idx(int idx, int state) { _armci_buf_state->table[idx].cmpl = state; } ga-5-3/armci/src/memory/shmalloc.c0000640005473000001440000000710511444464075015750 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: shmalloc.c,v 1.10 2002-06-20 23:34:17 vinod Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #include "armcip.h" #include "message.h" #include "kr_malloc.h" static long *offset_arr; void armci_shmalloc_exchange_offsets(context_t *ctx_local) { void **ptr_arr; void *ptr; armci_size_t bytes = 128; int i; ptr_arr = (void**)malloc(armci_nproc*sizeof(void*)); offset_arr = (long*) malloc(armci_nproc*sizeof(long)); if(!ptr_arr || !offset_arr) armci_die("armci_shmalloc_get_offsets: malloc failed", 0); /* get memory with same size on all procs */ ptr = kr_malloc(bytes, ctx_local); if(!ptr) armci_die("armci_shmalloc_get_offsets: kr_malloc failed",bytes); bzero((char*)ptr_arr,armci_nproc*sizeof(void*)); ptr_arr[armci_me] = ptr; /* now combine individual addresses into a single array */ armci_exchange_address(ptr_arr, armci_nproc); /* identify offets */ for (i=0; i 1MB",0); } else { size = XT_SYMMETRIC_HEAP_SIZE; } return size; } #endif /* defined CRAY_XT */ ga-5-3/armci/src/memory/kr_malloc.c0000640005473000001440000004125611631727330016110 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: kr_malloc.c,v 1.24 2006-09-12 23:21:21 andriy Exp $ */ #if HAVE_STDIO_H # include #endif #include "kr_malloc.h" #include "armcip.h" /* for DEBUG purpose only. remove later */ #include "locks.h" #define DEBUG 0 /* Storage allocator basically copied from ANSI K&R and corrupted */ extern char *armci_allocate(); /* Used to get memory from the system */ #if !defined(armci_die) extern void armci_die(); #endif static char *kr_malloc_shmem(size_t nbytes, context_t *ctx); static void kr_free_shmem(char *ap, context_t *ctx); /** * DEFAULT_NALLOC: No. of units of length ALIGNMENT to get in every * request to the system for memory (8MB/64 => 128*1024units) * DEFAULT_MAX_NALLOC: Maximum number of units that can get i.e.1GB * (if unit size=64bytes, then max units=1024MB/64 = 16*1024*1024) */ #define DEFAULT_NALLOC (4*128*1024) #define DEFAULT_NALLOC_ALIGN 1024 #define DEFAULT_MAX_NALLOC (4*1024*1024*16) /* mutual exclusion defs go here */ #define LOCKED 100 #define UNLOCKED 101 static int lock_mode=UNLOCKED; /* enable locking only after armci is initailized as locks (and lock data structures) are initialized in PARMCI_Init */ #define LOCKIT(p) \ if(_armci_initialized && lock_mode==UNLOCKED) { \ NAT_LOCK(0,p); lock_mode=LOCKED; \ } #define UNLOCKIT(p) \ if(_armci_initialized && lock_mode==LOCKED) { \ NAT_UNLOCK(0,p); lock_mode=UNLOCKED; \ } static int do_verify = 0; /* Flag for automatic heap verification */ #define VALID1 0xaaaaaaaa /* For validity check on headers */ #define VALID2 0x55555555 #define USEDP 0 /* CHECK. By default anable this. */ static void kr_error(char *s, unsigned long i, context_t *ctx) { char string[256]; sprintf(string,"kr_malloc: %s %ld(0x%lx)\n", s, i, i); #if 0 kr_malloc_print_stats(ctx); #endif armci_die(string, i); } static Header *morecore(size_t nu, context_t *ctx) { char *cp; Header *up; #if DEBUG (void) printf("%d: morecore 1: Getting %ld more units of length %d nalloc=%d\n", armci_me, (long)nu, sizeof(Header),ctx->nalloc); (void) fflush(stdout); #endif if (ctx->total >= ctx->max_nalloc) { # if DEBUG armci_die("kr_malloc: morecore: maximum allocation reached",armci_me); # endif return (Header *) NULL; /* Enforce upper limit on core usage */ } #if 1 /* 07/03 ctx->nalloc is now the minimum # units we ask from OS */ nu = DEFAULT_NALLOC_ALIGN*((nu-1)/DEFAULT_NALLOC_ALIGN+1); if(nu < ctx->nalloc) nu = ctx->nalloc; #else nu = ctx->nalloc*((nu-1)/ctx->nalloc+1); /* nu must by a multiplicity of nalloc */ #endif #if DEBUG (void) printf("%d: morecore: Getting %ld more units of length %d\n", armci_me, (long)nu, sizeof(Header)); (void) fflush(stdout); #endif if ((cp =(char *)(*ctx->alloc_fptr)((size_t)nu * sizeof(Header))) == (char *)NULL) return (Header *) NULL; ctx->total += nu; /* Have just got nu more units */ ctx->nchunk++; /* One more chunk */ ctx->nfrags++; /* Currently one more frag */ ctx->inuse += nu; /* Inuse will be decremented by kr_free */ up = (Header *) cp; up->s.size = nu; up->s.valid1 = VALID1; up->s.valid2 = VALID2; /* Insert into linked list of blocks in use so that kr_free works ... for debug only */ up->s.ptr = ctx->usedp; ctx->usedp = up; kr_free((char *)(up+1), ctx); /* Try to join into the free list */ return ctx->freep; } void kr_malloc_init(size_t usize, /* unit size in bytes */ size_t nalloc, size_t max_nalloc, void * (*alloc_fptr)(), /* memory alloc routine */ int debug, context_t *ctx) { int scale; if(usize <= 0) usize = sizeof(Header); scale = usize>>LOG_ALIGN; if(scale<1)fprintf(stderr,"Error: kr_malloc_init !!!\n"); if(nalloc==0) nalloc = DEFAULT_NALLOC; if(max_nalloc==0) max_nalloc = DEFAULT_MAX_NALLOC; ctx->usize = sizeof(Header); ctx->nalloc = nalloc * scale; ctx->max_nalloc = max_nalloc * scale; ctx->alloc_fptr = alloc_fptr; ctx->freep = NULL; ctx->usedp = NULL; ctx->shmid = -1; ctx->shmoffset = 0; ctx->shmsize = 0; ctx->ctx_type = -1; do_verify = debug; } char *kr_malloc(size_t nbytes, context_t *ctx) { Header *p, *prevp; size_t nunits; char *return_ptr; #if !((defined(SUN) || defined(SOLARIS)) && !defined(SHMMAX_SEARCH_NO_FORK)) if(ctx->ctx_type == KR_CTX_SHMEM) return kr_malloc_shmem(nbytes,ctx); #endif /* If first time in need to initialize the free list */ if ((prevp = ctx->freep) == NULL) { if (sizeof(Header) != ALIGNMENT) kr_error("Alignment is not valid", (unsigned long) ALIGNMENT, ctx); ctx->total = 0; /* Initialize statistics */ ctx->nchunk = 0; ctx->inuse = 0; ctx->nfrags = 0; ctx->maxuse = 0; ctx->nmcalls= 0; ctx->nfcalls= 0; /* Initialize linked list */ ctx->base.s.ptr = ctx->freep = prevp = &(ctx->base); ctx->base.s.size = 0; ctx->base.s.valid1 = VALID1; ctx->base.s.valid2 = VALID2; } ctx->nmcalls++; if (do_verify) kr_malloc_verify(ctx); /* Rather than divide make the alignment a known power of 2 */ nunits = ((nbytes + sizeof(Header) - 1)>>LOG_ALIGN) + 1; for (p=prevp->s.ptr; ; prevp = p, p = p->s.ptr) { if (p->s.size >= nunits) { /* Big enuf */ if (p->s.size == nunits) /* exact fit */ prevp->s.ptr = p->s.ptr; else { /* allocate tail end */ p->s.size -= nunits; p += p->s.size; p->s.size = nunits; p->s.valid1 = VALID1; p->s.valid2 = VALID2; ctx->nfrags++; /* Have just increased the fragmentation */ } /* Insert into linked list of blocks in use ... for debug only */ p->s.ptr = ctx->usedp; ctx->usedp = p; ctx->inuse += nunits; /* Record usage */ if (ctx->inuse > ctx->maxuse) ctx->maxuse = ctx->inuse; ctx->freep = prevp; return_ptr = (char *) (p+1); break; } if (p == ctx->freep) { /* wrapped around the free list */ if ((p = morecore(nunits, ctx)) == (Header *) NULL) { return_ptr = (char *) NULL; break; } } } return return_ptr; } void kr_free(char *ap, context_t *ctx) { Header *bp, *p, **up; #if !((defined(SUN) || defined(SOLARIS)) && !defined(SHMMAX_SEARCH_NO_FORK)) if(ctx->ctx_type == KR_CTX_SHMEM) { kr_free_shmem(ap,ctx); return; } #endif ctx->nfcalls++; if (do_verify) kr_malloc_verify(ctx); /* only do something if pointer is not NULL */ if ( ap ) { bp = (Header *) ap - 1; /* Point to block header */ if (bp->s.valid1 != VALID1 || bp->s.valid2 != VALID2) kr_error("kr_free: pointer not from kr_malloc", (unsigned long) ap, ctx); ctx->inuse -= bp->s.size; /* Decrement memory ctx->usage */ /* Extract the block from the used linked list ... for debug only */ for (up=&(ctx->usedp); ; up = &((*up)->s.ptr)) { if (!*up) kr_error("kr_free: block not found in used list\n", (unsigned long) ap, ctx); if (*up == bp) { *up = bp->s.ptr; break; } } /* Join the memory back into the free linked list */ for (p=ctx->freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; /* Freed block at start or end of arena */ if (bp + bp->s.size == p->s.ptr) {/* join to upper neighbour */ bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; ctx->nfrags--; /* Lost a fragment */ } else bp->s.ptr = p->s.ptr; if (p + p->s.size == bp) { /* Join to lower neighbour */ p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; ctx->nfrags--; /* Lost a fragment */ } else p->s.ptr = bp; ctx->freep = p; } /* end if on ap */ } /* Print to standard output the usage statistics. */ void kr_malloc_print_stats(context_t *ctx) { fflush(stderr); printf("\nkr_malloc statistics\n-------------------\n\n"); printf("Total memory from system ... %ld bytes\n", (long)(ctx->total*ctx->usize)); printf("Current memory usage ....... %ld bytes\n", (long)(ctx->inuse*ctx->usize)); printf("Maximum memory usage ....... %ld bytes\n", (long)(ctx->maxuse*ctx->usize)); printf("No. chunks from system ..... %ld\n", ctx->nchunk); printf("No. of fragments ........... %ld\n", ctx->nfrags); printf("No. of calls to kr_malloc ... %ld\n", ctx->nmcalls); printf("No. of calls to kr_free ..... %ld\n", ctx->nfcalls); printf("\n"); fflush(stdout); } /* Currently assumes that are working in a single region. */ void kr_malloc_verify(context_t *ctx) { Header *p; if(_armci_initialized && lock_mode==UNLOCKED) { LOCKIT(armci_master); lock_mode=LOCKED; } if ( ctx->freep ) { /* Check the used list */ for (p=ctx->usedp; p; p=p->s.ptr) { if (p->s.valid1 != VALID1 || p->s.valid2 != VALID2) kr_error("invalid header on usedlist", (unsigned long) p->s.valid1, ctx); if (p->s.size > ctx->total) kr_error("invalid size in header on usedlist", (unsigned long) p->s.size, ctx); } /* Check the free list */ p = ctx->base.s.ptr; while (p != &(ctx->base)) { if (p->s.valid1 != VALID1 || p->s.valid2 != VALID2) kr_error("invalid header on freelist", (unsigned long) p->s.valid1, ctx); if (p->s.size > ctx->total) kr_error("invalid size in header on freelist", (unsigned long) p->s.size, ctx); p = p->s.ptr; } } /* end if */ if(_armci_initialized && lock_mode==LOCKED) { UNLOCKIT(armci_master); lock_mode=UNLOCKED; } } /********************** BEGIN: kr_malloc for ctx_shmem *********************/ #if defined(SYSV) || defined(MMAP) #include "shmem.h" extern int armci_get_shmem_info(char *addrp, int* shmid, long *shmoffset, size_t *shmsize); extern Header *armci_get_shmem_ptr(int shmid, long shmoffset, size_t shmsize); /* returns, address of the shared memory region based on shmid, offset. * (i.e. return_addr = stating address of shmid + offset) */ #define SHM_PTR(hdr) armci_get_shmem_ptr((hdr)->s.shmid, (hdr)->s.shmoffset, (hdr)->s.shmsize) /* * kr_malloc_shmem: memory allocator for shmem context (i.e ctx_shmem) */ static char *kr_malloc_shmem(size_t nbytes, context_t *ctx) { Header *p, *prevp; size_t nunits, prev_shmsize=0; char *return_ptr; int prev_shmid=-1; long prev_shmoffset=0; LOCKIT(armci_master); /* Rather than divide make the alignment a known power of 2 */ nunits = ((nbytes + sizeof(Header) - 1)>>LOG_ALIGN) + 1; /* If first time in need to initialize the free list */ if ((prevp = ctx->freep) == NULL) { if (sizeof(Header) != ALIGNMENT) kr_error("kr_malloc_shmem: Alignment is not valid", (unsigned long) ALIGNMENT, ctx); ctx->total = 0; /* Initialize statistics */ ctx->nchunk = ctx->inuse = ctx->maxuse = 0; ctx->nfrags = ctx->nmcalls = ctx->nfcalls = 0; /* Initialize linked list */ ctx->base.s.size = 0; ctx->base.s.shmid = -1; ctx->base.s.shmoffset = 0; ctx->base.s.shmsize = 0; ctx->base.s.valid1 = VALID1; ctx->base.s.valid2 = VALID2; if ((p = morecore(nunits, ctx)) == (Header *) NULL) return NULL; ctx->base.s.ptr = prevp = ctx->freep; /* CHECK */ } prev_shmid = ctx->shmid; prev_shmoffset = ctx->shmoffset; prev_shmsize = ctx->shmsize; prevp = ctx->freep = armci_get_shmem_ptr(ctx->shmid, ctx->shmoffset, ctx->shmsize); ctx->nmcalls++; if (do_verify) kr_malloc_verify(ctx); for (p=SHM_PTR(prevp); ; prevp = p, p = SHM_PTR(p)) { if (p->s.size >= nunits) { /* Big enuf */ if (p->s.size == nunits) { /* exact fit */ prevp->s.ptr = p->s.ptr; prevp->s.shmid = p->s.shmid; prevp->s.shmoffset = p->s.shmoffset; prevp->s.shmsize = p->s.shmsize; } else { /* allocate tail end */ p->s.size -= nunits; p += p->s.size; p->s.size = nunits; p->s.valid1 = VALID1; p->s.valid2 = VALID2; ctx->nfrags++; /* Have just increased the fragmentation */ } #if USEDP /* Insert into linked list of blocks in use ... for debug only */ p->s.ptr = ctx->usedp; ctx->usedp = p; #endif ctx->inuse += nunits; /* Record usage */ if (ctx->inuse > ctx->maxuse) ctx->maxuse = ctx->inuse; ctx->freep = prevp; ctx->shmid = prev_shmid; ctx->shmoffset = prev_shmoffset; ctx->shmsize = prev_shmsize; return_ptr = (char *) (p+1); break; } prev_shmid = prevp->s.shmid; prev_shmoffset = prevp->s.shmoffset; prev_shmsize = prevp->s.shmsize; if (p == ctx->freep) { /* wrapped around the free list */ if ((p = morecore(nunits, ctx)) == (Header *) NULL) { return_ptr = (char *) NULL; break; } prev_shmid = ctx->shmid; prev_shmoffset = ctx->shmoffset; prev_shmsize = ctx->shmsize; } } UNLOCKIT(armci_master); return return_ptr; } static void kr_free_shmem(char *ap, context_t *ctx) { Header *bp, *p, *nextp; #if USEDP Header **up; #endif int shmid=-1; long shmoffset=0; size_t shmsize=0; LOCKIT(armci_master); ctx->nfcalls++; if (do_verify) kr_malloc_verify(ctx); /* only do something if pointer is not NULL */ if ( ap ) { bp = (Header *) ap - 1; /* Point to block header */ if (bp->s.valid1 != VALID1 || bp->s.valid2 != VALID2) kr_error("kr_free_shmem: pointer not from kr_malloc", (unsigned long) ap, ctx); ctx->inuse -= bp->s.size; /* Decrement memory ctx->usage */ #if USEDP /* Extract the block from the used linked list ... for debug only */ for (up=&(ctx->usedp); ; up = &((*up)->s.ptr)) { if (!*up) kr_error("kr_free_shmem: block not found in used list\n", (unsigned long) ap, ctx); if (*up == bp) { *up = bp->s.ptr; break; } } #endif if(ctx->shmid==-1) { armci_get_shmem_info((char*)bp, &ctx->shmid, &ctx->shmoffset, &ctx->shmsize); ctx->base.s.shmid = ctx->shmid; ctx->base.s.shmsize = ctx->shmsize; ctx->base.s.shmoffset = ctx->shmoffset; p = ctx->freep = bp; p->s.ptr = bp; p->s.size-=SHMEM_CTX_UNITS; /*memory to store shmem info in context*/ p->s.shmid = ctx->shmid; p->s.shmsize = ctx->shmsize; p->s.shmoffset = ctx->shmoffset; UNLOCKIT(armci_master); return; } ctx->freep = armci_get_shmem_ptr(ctx->shmid, ctx->shmoffset, ctx->shmsize); shmid = ctx->shmid; shmoffset = ctx->shmoffset; shmsize = ctx->shmsize; /* Join the memory back into the free linked list */ p = ctx->freep; nextp = SHM_PTR(p); for ( ; !(bp > p && bp < nextp); p=nextp, nextp=SHM_PTR(p)) { if (p >= nextp && (bp > p || bp < nextp)) break; /* Freed block at start or end of arena */ nextp = SHM_PTR(p); shmid = p->s.shmid; shmoffset = p->s.shmoffset; shmsize = p->s.shmsize; } if (bp + bp->s.size == nextp) {/* join to upper neighbour */ bp->s.size += nextp->s.size; bp->s.ptr = nextp->s.ptr; ctx->nfrags--; /* Lost a fragment */ bp->s.shmid = nextp->s.shmid; bp->s.shmoffset = nextp->s.shmoffset; bp->s.shmsize = nextp->s.shmsize; } else { bp->s.ptr = nextp; bp->s.shmid = p->s.shmid; bp->s.shmoffset = p->s.shmoffset; bp->s.shmsize = p->s.shmsize; } if (p + p->s.size == bp) { /* Join to lower neighbour */ p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; ctx->nfrags--; /* Lost a fragment */ p->s.shmid = bp->s.shmid; p->s.shmoffset = bp->s.shmoffset; p->s.shmsize = bp->s.shmsize; } else { p->s.ptr = bp; armci_get_shmem_info((char*)bp, &p->s.shmid, &p->s.shmoffset, &p->s.shmsize); } ctx->freep = p; ctx->shmid = shmid; ctx->shmoffset = shmoffset; ctx->shmsize = shmsize; } /* end if on ap */ UNLOCKIT(armci_master); } #else /* #ifdef SYSV */ /* What are doing here */ static char *kr_malloc_shmem(size_t nbytes, context_t *ctx) { armci_die("kr_malloc_shmem(): Invalid Function Call", 0L); } static void kr_free_shmem(char *ap, context_t *ctx) { armci_die("kr_free_shmem(): Invalid Function Call", 0L); } #endif /* #ifdef SYSV */ /********************** END: kr_malloc for ctx_shmem *********************/ /** issues: 1. do usage statistics only if debug/DEBUG is enabled */ ga-5-3/armci/src/xfer/0000750005473000001440000000000012275260537013432 5ustar d3n000usersga-5-3/armci/src/xfer/caccumulate.c0000640005473000001440000005767111645101504016071 0ustar d3n000users/*************************************************************************** COPYRIGHT The following is a notice of limited availability of the code, and disclaimer which must be included in the prologue of the code and in all source listings of the code. Copyright Notice + 2009 University of Chicago Permission is hereby granted to use, reproduce, prepare derivative works, and to redistribute to others. This software was authored by: Jeff R. Hammond Leadership Computing Facility Argonne National Laboratory Argonne IL 60439 USA phone: (630) 252-5381 e-mail: jhammond@anl.gov GOVERNMENT LICENSE Portions of this material resulted from work developed under a U.S. Government Contract and are subject to the following license: the Government is granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable worldwide license in this computer software to reproduce, prepare derivative works, and perform publicly and display publicly. DISCLAIMER This computer code material was prepared, in part, as an account of work sponsored by an agency of the United States Government. Neither the United States, nor the University of Chicago, nor any of their employees, makes any warranty express or implied, or assumes any legal liability or responsibility for the accuracy, completeness, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use would not infringe privately owned rights. ***************************************************************************/ /*********************************************************************** * accumulate operation for the following datatypes: * real, double precision, complex, double complex, integer * * WARNING: This file must be compiled WITH optimization under AIX. * IBM fortran compilers generate bad code with -g option. * * Two versions of each routine are provided: * original and unrolled loops. * ***********************************************************************/ #if HAVE_CONFIG_H # include "config.h" #endif #include "acc.h" #if 0 subroutine d_accumulate_1d(alpha, A, B, rows) integer rows, r double precision A(*), B(*), alpha ccdir$ no_cache_alloc a,b do r = 1, rows A(r) = A(r)+ alpha*B(r) enddo end #endif void c_d_accumulate_1d_(const double* const restrict alpha, double* restrict A, const double* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i] += (*alpha) * B[i]; } return; } #if 0 subroutine d_accumulate_2d(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double precision A(ald,*), B(bld,*), alpha ccdir$ no_cache_alloc a,b do c = 1, cols do r = 1, rows A(r,c) = A(r,c)+ alpha*B(r,c) enddo enddo end #endif void c_d_accumulate_2d_(const double* const alpha, const int* const rows, const int* const cols, double* restrict A, const int* const ald, const double* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 subroutine f_accumulate_1d(alpha, A, B, rows) integer rows, r real A(*), B(*), alpha do r = 1, rows A(r) = A(r)+ alpha*B(r) enddo end #endif void c_f_accumulate_1d_(const float* const restrict alpha, float* const restrict A, const float* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i] += (*alpha) * B[i]; } return; } #if 0 subroutine f_accumulate_2d(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld real A(ald,*), B(bld,*), alpha do c = 1, cols do r = 1, rows A(r,c) = A(r,c)+ alpha*B(r,c) enddo enddo end #endif void c_f_accumulate_2d_(const float* const alpha, const int* const rows, const int* const cols, float* restrict A, const int* const ald, const float* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 subroutine z_accumulate_1d(alpha, A, B, rows) integer rows, r double complex A(*), B(*), alpha do r = 1, rows A(r) = A(r)+ alpha*B(r) enddo end #endif void c_c_accumulate_1d_(const complex_t* const restrict alpha, complex_t* const restrict A, const complex_t* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i].real += (*alpha).real * B[i].real - (*alpha).imag * B[i].imag; A[i].imag += (*alpha).imag * B[i].real + (*alpha).real * B[i].imag; } return; } #if 0 subroutine z_accumulate_2d(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double complex A(ald,*), B(bld,*), alpha do c = 1, cols do r = 1, rows A(r,c) = A(r,c)+ alpha*B(r,c) enddo enddo end #endif void c_c_accumulate_2d_(const complex_t* const alpha, const int* const rows, const int* const cols, complex_t* restrict A, const int* const ald, const complex_t* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ) { for ( r = 0 ; r < (*rows) ; r++ ) { A[ c * (*ald) + r ].real += (*alpha).real * B[ c * (*bld) + r ].real - (*alpha).imag * B[ c * (*bld) + r ].imag; A[ c * (*ald) + r ].imag += (*alpha).imag * B[ c * (*bld) + r ].real + (*alpha).real * B[ c * (*bld) + r ].imag; } } return; } #if 0 subroutine c_accumulate_1d(alpha, A, B, rows) integer rows, r complex A(*), B(*), alpha do r = 1, rows A(r) = A(r)+ alpha*B(r) enddo end #endif void c_z_accumulate_1d_(const dcomplex_t* const restrict alpha, dcomplex_t* const restrict A, const dcomplex_t* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i].real += (*alpha).real * B[i].real - (*alpha).imag * B[i].imag; A[i].imag += (*alpha).imag * B[i].real + (*alpha).real * B[i].imag; } return; } #if 0 subroutine c_accumulate_2d(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld complex A(ald,*), B(bld,*), alpha do c = 1, cols do r = 1, rows A(r,c) = A(r,c)+ alpha*B(r,c) enddo enddo end #endif void c_z_accumulate_2d_(const dcomplex_t* const alpha, const int* const rows, const int* const cols, dcomplex_t* restrict A, const int* const ald, const dcomplex_t* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ) { for ( r = 0 ; r < (*rows) ; r++ ) { A[ c * (*ald) + r ].real += (*alpha).real * B[ c * (*bld) + r ].real - (*alpha).imag * B[ c * (*bld) + r ].imag; A[ c * (*ald) + r ].imag += (*alpha).imag * B[ c * (*bld) + r ].real + (*alpha).real * B[ c * (*bld) + r ].imag; } } return; } #if 0 subroutine i_accumulate_2d(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld integer A(ald,*), B(bld,*), alpha do c = 1, cols do r = 1, rows A(r,c) = A(r,c)+ alpha*B(r,c) enddo enddo end #endif void c_i_accumulate_1d_(const int* const restrict alpha, int* const restrict A, const int* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i] += (*alpha) * B[i]; } return; } void c_l_accumulate_1d_(const long* const restrict alpha, long* const restrict A, const long* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i] += (*alpha) * B[i]; } return; } void c_ll_accumulate_1d_(const long long* const restrict alpha, long long* const restrict A, const long long* const restrict B, const int* const restrict rows) { int i; for ( i = 0 ; i < (*rows) ; i++ ){ A[i] += (*alpha) * B[i]; } return; } #if 0 subroutine i_accumulate_1d(alpha, A, B, rows) integer rows, r integer A(*), B(*), alpha do r = 1, rows A(r) = A(r)+ alpha*B(r) enddo end #endif void c_i_accumulate_2d_(const int* const alpha, const int* const rows, const int* const cols, int* restrict A, const int* const ald, const int* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } void c_l_accumulate_2d_(const long* const alpha, const int* const rows, const int* const cols, long* restrict A, const int* const ald, const long* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } void c_ll_accumulate_2d_(const long long* const alpha, const int* const rows, const int* const cols, long long* restrict A, const int* const ald, const long long* const B, const int* const bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 subroutine d_accumulate_2d_u(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double precision A(ald,*), B(bld,*), alpha integer r1 doubleprecision d1, d2, d3, d4 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 a(r,c) = a(r,c) + alpha*b(r,c) end do do r = r1 + 1, rows, 4 d1 = a(r,c) + alpha*b(r,c) d2 = a(r+1,c) + alpha*b(r+1,c) d3 = a(r+2,c) + alpha*b(r+2,c) d4 = a(r+3,c) + alpha*b(r+3,c) a(r,c) = d1 a(r+1,c) = d2 a(r+2,c) = d3 a(r+3,c) = d4 enddo enddo end #endif void c_d_accumulate_2d_u_(const double* const alpha, const int* const rows, const int* const cols, double* restrict A, const int* const ald, const double* const B, const int* const bld) { int r, c; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; A[ c * (*ald) + r+1 ] += (*alpha) * B[ c * (*bld) + r+1 ]; A[ c * (*ald) + r+2 ] += (*alpha) * B[ c * (*bld) + r+2 ]; A[ c * (*ald) + r+3 ] += (*alpha) * B[ c * (*bld) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 subroutine f_accumulate_2d_u(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld real A(ald,*), B(bld,*), alpha integer r1 real d1, d2, d3, d4 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 a(r,c) = a(r,c) + alpha*b(r,c) end do do r = r1 + 1, rows, 4 d1 = a(r,c) + alpha*b(r,c) d2 = a(r+1,c) + alpha*b(r+1,c) d3 = a(r+2,c) + alpha*b(r+2,c) d4 = a(r+3,c) + alpha*b(r+3,c) a(r,c) = d1 a(r+1,c) = d2 a(r+2,c) = d3 a(r+3,c) = d4 enddo enddo end #endif void c_f_accumulate_2d_u_(const float* const alpha, const int* const rows, const int* const cols, float* restrict A, const int* const ald, const float* const B, const int* const bld) { int r, c; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; A[ c * (*ald) + r+1 ] += (*alpha) * B[ c * (*bld) + r+1 ]; A[ c * (*ald) + r+2 ] += (*alpha) * B[ c * (*bld) + r+2 ]; A[ c * (*ald) + r+3 ] += (*alpha) * B[ c * (*bld) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 subroutine z_accumulate_2d_u(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double complex A(ald,*), B(bld,*), alpha integer r1 double complex x1, x2, x3, x4 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 a(r,c) = a(r,c) + alpha*b(r,c) end do do r = r1 + 1, rows, 4 x1 = a(r,c) + alpha*b(r,c) x2 = a(r+1,c) + alpha*b(r+1,c) x3 = a(r+2,c) + alpha*b(r+2,c) x4 = a(r+3,c) + alpha*b(r+3,c) a(r,c) = x1 a(r+1,c) = x2 a(r+2,c) = x3 a(r+3,c) = x4 enddo enddo end #endif void c_c_accumulate_2d_u_(const complex_t* const alpha, const int* const rows, const int* const cols, complex_t* restrict A, const int* const ald, const complex_t* const B, const int* const bld) { int r, c; int jA, jB; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ jA = c * (*ald) + r; jB = c * (*bld) + r; A[ jA ].real += (*alpha).real * B[ jB ].real - (*alpha).imag * B[ jB ].imag; A[ jA ].imag += (*alpha).imag * B[ jB ].real + (*alpha).real * B[ jB ].imag; A[ jA+1 ].real += (*alpha).real * B[ jB+1 ].real - (*alpha).imag * B[ jB+1 ].imag; A[ jA+1 ].imag += (*alpha).imag * B[ jB+1 ].real + (*alpha).real * B[ jB+1 ].imag; A[ jA+2 ].real += (*alpha).real * B[ jB+2 ].real - (*alpha).imag * B[ jB+2 ].imag; A[ jA+2 ].imag += (*alpha).imag * B[ jB+2 ].real + (*alpha).real * B[ jB+2 ].imag; A[ jA+3 ].real += (*alpha).real * B[ jB+3 ].real - (*alpha).imag * B[ jB+3 ].imag; A[ jA+3 ].imag += (*alpha).imag * B[ jB+3 ].real + (*alpha).real * B[ jB+3 ].imag; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ].real += (*alpha).real * B[ c * (*bld) + r ].real - (*alpha).imag * B[ c * (*bld) + r ].imag; A[ c * (*ald) + r ].imag += (*alpha).imag * B[ c * (*bld) + r ].real + (*alpha).real * B[ c * (*bld) + r ].imag; } } return; } #if 0 subroutine c_accumulate_2d_u(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld complex A(ald,*), B(bld,*), alpha integer r1 complex x1, x2, x3, x4 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 a(r,c) = a(r,c) + alpha*b(r,c) end do do r = r1 + 1, rows, 4 x1 = a(r,c) + alpha*b(r,c) x2 = a(r+1,c) + alpha*b(r+1,c) x3 = a(r+2,c) + alpha*b(r+2,c) x4 = a(r+3,c) + alpha*b(r+3,c) a(r,c) = x1 a(r+1,c) = x2 a(r+2,c) = x3 a(r+3,c) = x4 enddo enddo end #endif void c_z_accumulate_2d_u_(const dcomplex_t* const alpha, const int* const rows, const int* const cols, dcomplex_t* restrict A, const int* const ald, const dcomplex_t* const B, const int* const bld) { int r, c; int jA, jB; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ jA = c * (*ald) + r; jB = c * (*bld) + r; A[ jA ].real += (*alpha).real * B[ jB ].real - (*alpha).imag * B[ jB ].imag; A[ jA ].imag += (*alpha).imag * B[ jB ].real + (*alpha).real * B[ jB ].imag; A[ jA+1 ].real += (*alpha).real * B[ jB+1 ].real - (*alpha).imag * B[ jB+1 ].imag; A[ jA+1 ].imag += (*alpha).imag * B[ jB+1 ].real + (*alpha).real * B[ jB+1 ].imag; A[ jA+2 ].real += (*alpha).real * B[ jB+2 ].real - (*alpha).imag * B[ jB+2 ].imag; A[ jA+2 ].imag += (*alpha).imag * B[ jB+2 ].real + (*alpha).real * B[ jB+2 ].imag; A[ jA+3 ].real += (*alpha).real * B[ jB+3 ].real - (*alpha).imag * B[ jB+3 ].imag; A[ jA+3 ].imag += (*alpha).imag * B[ jB+3 ].real + (*alpha).real * B[ jB+3 ].imag; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ].real += (*alpha).real * B[ c * (*bld) + r ].real - (*alpha).imag * B[ c * (*bld) + r ].imag; A[ c * (*ald) + r ].imag += (*alpha).imag * B[ c * (*bld) + r ].real + (*alpha).real * B[ c * (*bld) + r ].imag; } } return; } #if 0 subroutine i_accumulate_2d_u(alpha, rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld integer A(ald,*), B(bld,*), alpha integer r1, j2, j3, j4, j5 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 a(r,c) = a(r,c) + alpha*b(r,c) end do do r = r1 + 1, rows, 4 j2 = a(r,c) + alpha*b(r,c) j3 = a(r+1,c) + alpha*b(r+1,c) j4 = a(r+2,c) + alpha*b(r+2,c) j5 = a(r+3,c) + alpha*b(r+3,c) a(r,c) = j2 a(r+1,c) = j3 a(r+2,c) = j4 a(r+3,c) = j5 enddo enddo end #endif void c_i_accumulate_2d_u_(const int* const alpha, const int* const rows, const int* const cols, int* restrict A, const int* const ald, const int* const B, const int* const bld) { int r, c; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; A[ c * (*ald) + r+1 ] += (*alpha) * B[ c * (*bld) + r+1 ]; A[ c * (*ald) + r+2 ] += (*alpha) * B[ c * (*bld) + r+2 ]; A[ c * (*ald) + r+3 ] += (*alpha) * B[ c * (*bld) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } void c_l_accumulate_2d_u_(const long* const alpha, const int* const rows, const int* const cols, long* restrict A, const int* const ald, const long* const B, const int* const bld) { int r, c; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; A[ c * (*ald) + r+1 ] += (*alpha) * B[ c * (*bld) + r+1 ]; A[ c * (*ald) + r+2 ] += (*alpha) * B[ c * (*bld) + r+2 ]; A[ c * (*ald) + r+3 ] += (*alpha) * B[ c * (*bld) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } void c_ll_accumulate_2d_u_(const long long* const alpha, const int* const rows, const int* const cols, long long* restrict A, const int* const ald, const long long* const B, const int* const bld) { int r, c; int m = (*rows) - ((*rows)%4); for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < m ; r+=4 ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; A[ c * (*ald) + r+1 ] += (*alpha) * B[ c * (*bld) + r+1 ]; A[ c * (*ald) + r+2 ] += (*alpha) * B[ c * (*bld) + r+2 ]; A[ c * (*ald) + r+3 ] += (*alpha) * B[ c * (*bld) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] += (*alpha) * B[ c * (*bld) + r ]; } } return; } #if 0 c---------- operations used in armci gops -------------- c subroutine fort_dadd(n, x, work) integer n,i double precision x(n), work(n) do i= 1,n x(i) = x(i) + work(i) enddo end #endif void c_dadd_(const int* const restrict n, double* const restrict x, const double* const restrict work) { int i; for ( i = 0 ; i < (*n) ; i++ ){ x[i] += work[i]; } return; } #if 0 subroutine fort_dadd2(n, x, work, work2) integer n,i double precision x(n), work(n), work2(n) do i= 1,n x(i) = work(i) + work2(i) enddo end #endif void c_dadd2_(const int* const restrict n, double* const restrict x, const double* const restrict work, const double* const restrict work2) { int i; for ( i = 0 ; i < (*n) ; i++ ){ x[i] = work[i] + work2[i]; } return; } #if 0 subroutine fort_dmult(n, x, work) integer n,i double precision x(n), work(n) do i= 1,n x(i) = x(i) * work(i) enddo end #endif void c_dmult_(const int* const restrict n, double* const restrict x, const double* const restrict work) { int i; for ( i = 0 ; i < (*n) ; i++ ){ x[i] *= work[i]; } return; } #if 0 subroutine fort_dmult2(n, x, work,work2) integer n,i double precision x(n), work(n) do i= 1,n x(i) = work(i)*work2(i) enddo end #endif void c_dmult2_(const int* const restrict n, double* const restrict x, const double* const restrict work, const double* const restrict work2) { int i; for ( i = 0 ; i < (*n) ; i++ ){ x[i] = work[i] * work2[i]; } return; } ga-5-3/armci/src/xfer/rmw.c0000640005473000001440000002153712036056644014411 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "armcip.h" #include "locks.h" #include "copy.h" #if HAVE_STDIO_H # include #endif #if (defined(__i386__) || defined(__x86_64__)) && !defined(NO_I386ASM) # include "atomics-i386.h" #endif /* enable use of newer interfaces in SHMEM */ #ifndef CRAY #ifndef LIBELAN_ATOMICS /* manpages for shmem_fadd exist on the T3E but library code does not */ #define SHMEM_FADD #endif #endif /* global scope to prevent compiler optimization of volatile code */ int _a_temp; long _a_ltemp; /* JAD -- DCMF implements its own rmw there were linking errors with missing atomic_fetch_and_add for DCMF */ #if !ARMCIX void armci_generic_rmw(int op, void *ploc, void *prem, int extra, int proc) { #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif NATIVE_LOCK(lock,proc); switch (op) { case ARMCI_FETCH_AND_ADD: #if (defined(__i386__) || defined(__x86_64__)) && !defined(NO_I386ASM) #if (defined(__GNUC__) || defined(__INTEL_COMPILER__) ||defined(__PGIC__)) && !defined(PORTALS) && !defined(NO_I386ASM) if(SERVER_CONTEXT || armci_nclus == 1){ /* *(int*)ploc = __sync_fetch_and_add((int*)prem, extra); */ atomic_fetch_and_add(prem, ploc, extra, sizeof(int)); } else #endif #endif { armci_get(prem,ploc,sizeof(int),proc); _a_temp = *(int*)ploc + extra; armci_put(&_a_temp,prem,sizeof(int),proc); } break; case ARMCI_FETCH_AND_ADD_LONG: armci_get(prem,ploc,sizeof(long),proc); _a_ltemp = *(long*)ploc + extra; armci_put(&_a_ltemp,prem,sizeof(long),proc); break; case ARMCI_SWAP: #if (defined(__i386__) || defined(__x86_64__)) && !defined(PORTALS) && !defined(NO_I386ASM) if(SERVER_CONTEXT || armci_nclus==1){ atomic_exchange(ploc, prem, sizeof(int)); } else #endif { armci_get(prem,&_a_temp,sizeof(int),proc); armci_put(ploc,prem,sizeof(int),proc); *(int*)ploc = _a_temp; } break; case ARMCI_SWAP_LONG: armci_get(prem,&_a_ltemp,sizeof(long),proc); armci_put(ploc,prem,sizeof(long),proc); *(long*)ploc = _a_ltemp; break; default: armci_die("rmw: operation not supported",op); } #ifdef VAPI if(!SERVER_CONTEXT) #endif PARMCI_Fence(proc); NATIVE_UNLOCK(lock,proc); } #endif /* ARMCIX */ int PARMCI_Rmw(int op, void *ploc, void *prem, int extra, int proc) { #ifdef LAPI64 extern int LAPI_Rmw64(lapi_handle_t hndl, RMW_ops_t op, uint tgt, long long *tgt_var, long long *in_val, long long *prev_tgt_val, lapi_cntr_t *org_cntr); long long llval, *pllarg = (long long*)ploc, lltmp; /* enable RMWBROKEN if RMW fails for long datatype */ #define RMWBROKEN_ #endif #ifdef LAPI int ival, rc, opcode=SWAP, *parg=ploc; lapi_cntr_t req_id; #elif defined(_CRAYMPP) || defined(QUADRICS) || defined(CRAY_SHMEM) int ival; long lval; #endif #if defined(LAPI64) && defined(RMWBROKEN) /* hack for rmw64 BROKEN: we operate on least significant part of long */ if(op==ARMCI_FETCH_AND_ADD_LONG || op==ARMCI_SWAP_LONG){ ploc[0]=0; ploc[1]=0; ploc++; parg ++; prem++; } #endif #if defined(CLUSTER) && !defined(LAPI) && !defined(QUADRICS) &&!defined(CYGWIN)\ && !defined(HITACHI) && !defined(CRAY_SHMEM) && !defined(PORTALS) if(!SAMECLUSNODE(proc)){ armci_rem_rmw(op, ploc, prem, extra, proc); return 0; } #endif #ifdef REGION_ALLOC if(SAMECLUSNODE(proc)) (void)armci_region_fixup(proc,&prem); #endif #ifdef BGML BGML_Op oper; BGML_Dt dt; void *temp; long ltemp; switch(op) { case ARMCI_FETCH_AND_ADD: case ARMCI_FETCH_AND_ADD_LONG: dt=BGML_SIGNED_INT; temp=(int *)&extra; oper=BGML_SUM; break; #if 0 case ARMCI_FETCH_AND_ADD_LONG: fprintf(stderr,"adding int to longs....\n"); dt=BGML_SIGNED_LONG; ltemp=(long)extra; temp=<emp; oper=BGML_SUM; break; #endif case ARMCI_SWAP: case ARMCI_SWAP_LONG: dt=BGML_SIGNED_INT; oper=BGML_NOOP; temp=(int *)ploc; break; #if 0 case ARMCI_SWAP_LONG: fprintf(stderr,"long armci_swap\n"); dt=BGML_SIGNED_LONG; oper=BGML_NOOP; temp=(long *)ploc; break; #endif default: ARMCI_Error("Invalid operation for RMW", op); } /* int PARMCI_Rmw(int op, int *ploc, int *prem, int extra, int proc) */ /* assumes ploc will change dstbuf=prem, input=temp(extra), output=ploc val=ploc, arr[0]=prem, 1=extra */ int me=armci_msg_me(); BG1S_t request; unsigned done=1; BGML_Callback_t cb_wait={wait_callback, &done}; BG1S_rmw(&request, proc, 0, prem, temp, ploc, oper, dt, &cb_wait, 1); BGML_Wait(&done); #elif ARMCIX ARMCIX_Rmw(op, ploc, prem, extra, proc); #else switch (op) { # if defined(QUADRICS) || defined(_CRAYMPP) || defined(CRAY_SHMEM) case ARMCI_FETCH_AND_ADD: #ifdef SHMEM_FADD /* printf(" calling intfdd arg %x %ld \n", prem, *prem); */ *(int*) ploc = shmem_int_fadd(prem, extra, proc); #elif defined(LIBELAN_ATOMICS) *(int*) ploc = elan_int_fadd(prem, extra, proc); #else while ( (ival = shmem_int_swap(prem, INT_MAX, proc) ) == INT_MAX); (void) shmem_int_swap(prem, ival +extra, proc); *(int*) ploc = ival; #endif break; case ARMCI_FETCH_AND_ADD_LONG: #ifdef SHMEM_FADD *(long*) ploc = shmem_long_fadd( (long*)prem, (long) extra, proc); #elif defined(LIBELAN_ATOMICS) *(long*) ploc = elan_long_fadd( (long*)prem, (long) extra, proc); #else while ((lval=shmem_long_swap((long*)prem,LONG_MAX,proc)) == LONG_MAX); (void) shmem_long_swap((long*)prem, (lval + extra), proc); *(long*)ploc = lval; #endif break; case ARMCI_SWAP: #ifdef LIBELAN_ATOMICS *(int*)ploc = elan_int_swap((int*)prem, *(int*)ploc, proc); #else *(int*)ploc = shmem_int_swap((int*)prem, *(int*)ploc, proc); #endif break; case ARMCI_SWAP_LONG: #ifdef LIBELAN_ATOMICS *(long*)ploc = elan_long_swap((long*)prem, *(long*)ploc, proc); #else *(long*)ploc = shmem_long_swap((long*)prem, *(long*)ploc, proc); #endif break; # elif defined(LAPI) # if defined(LAPI64) && !defined(RMWBROKEN) case ARMCI_FETCH_AND_ADD_LONG: opcode = FETCH_AND_ADD; lltmp = (long long)extra; pllarg = &lltmp; case ARMCI_SWAP_LONG: #if 0 printf("before opcode=%d rem=%ld, loc=(%ld,%ld) extra=%ld\n", opcode,*prem,*(long*)ploc,llval, lltmp); rc= sizeof(long); PARMCI_Get(prem, &llval, rc, proc); printf("%d:rem val before %ld\n",armci_me, llval); fflush(stdout); #endif if( rc = LAPI_Setcntr(lapi_handle,&req_id,0)) armci_die("rmw setcntr failed",rc); if( rc = LAPI_Rmw64(lapi_handle, opcode, proc, (long long*)prem, pllarg, &llval, &req_id)) armci_die("rmw failed",rc); if( rc = LAPI_Waitcntr(lapi_handle, &req_id, 1, NULL)) armci_die("rmw wait failed",rc); *(long*)ploc = (long)llval; #if 0 rc= sizeof(long); PARMCI_Get(prem, &lltmp, rc, proc); printf("%d:after rmw remote val from rmw=%ld and get=%ld extra=%d\n", armci_me,llval, lltmp,extra); #endif break; # endif /************** here sizeof(long)= sizeof(int) **************/ case ARMCI_FETCH_AND_ADD: # if !defined(LAPI64) || defined(RMWBROKEN) case ARMCI_FETCH_AND_ADD_LONG: # endif opcode = FETCH_AND_ADD; parg = &extra; case ARMCI_SWAP: # if !defined(LAPI64) || defined(RMWBROKEN) case ARMCI_SWAP_LONG: # endif /* Within SMPs LAPI_Rmw needs target's address. */ if(SAMECLUSNODE(proc)) proc=armci_me; if( rc = LAPI_Setcntr(lapi_handle,&req_id,0)) armci_die("rmw setcntr failed",rc); if( rc = LAPI_Rmw(lapi_handle, opcode, proc, prem, parg, &ival, &req_id)) armci_die("rmw failed",rc); if( rc = LAPI_Waitcntr(lapi_handle, &req_id, 1, NULL)) armci_die("rmw wait failed",rc); * (int *)ploc = ival; break; # else case ARMCI_FETCH_AND_ADD: case ARMCI_FETCH_AND_ADD_LONG: case ARMCI_SWAP: case ARMCI_SWAP_LONG: armci_generic_rmw(op, ploc, prem, extra, proc); break; # endif default: armci_die("rmw: operation not supported",op); } #endif /*bgml*/ return 0; } ga-5-3/armci/src/xfer/vector.c0000640005473000001440000005422611622256775015116 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: vector.c,v 1.32.6.4 2007-08-29 17:32:32 manoj Exp $ */ #include "armcip.h" #include "copy.h" #include "acc.h" #include "memlock.h" #if HAVE_STDIO_H # include #endif #if HAVE_ASSERT_H # include #endif /* void I_ACCUMULATE(void* scale, int elems, void*src, void* dst) { int j; int *a=(int*)dst, *b=(int*)src; int alpha = *(int*)scale; for(j=0;j BUFSIZE/2){ /* for large segments use strided implementation */ for(j=0; j< dr.ptr_array_len; j++){ rc = armci_acc_copy_strided(op, scale,proc, dr.src_ptr_array[j], NULL, dr.dst_ptr_array[j],NULL, &dr.bytes, 0); if(rc)return(rc); } }else{ armci_giov_t dl; /*lock memory:should optimize it to lock only a chunk at a time*/ armci_lockmem_scatter(dr.dst_ptr_array, dr.ptr_array_len, dr.bytes, proc); /* copy as many blocks as possible into the local buffer */ dl.bytes = dr.bytes; nb = ARMCI_MIN(PWORKLEN,BUFSIZE/dr.bytes); for(j=0; j< dr.ptr_array_len; j+= nb){ int nblocks = ARMCI_MIN(nb, dr.ptr_array_len -j); int k; /* setup vector descriptor for remote memory copy to bring data into buffer*/ dl.ptr_array_len = nblocks; dl.src_ptr_array = dr.dst_ptr_array + j; /* GET destination becomes source for copy */ for(k=0; k< nblocks; k++) pwork[k] = k*dl.bytes + (char*)armci_internal_buffer; dl.dst_ptr_array = pwork; /* get data to the local buffer */ rc = armci_copy_vector(GET, &dl, 1, proc); if(rc){ ARMCI_UNLOCKMEM(proc); return(rc);} /* update source array for accumulate */ dl.src_ptr_array = dr.src_ptr_array +j; /* do scatter accumulate updating copy of data in buffer */ armci_scatter_acc(op, scale, dl, armci_me, 0); /* modify descriptor-now source becomes destination for PUT*/ dl.dst_ptr_array = dr.dst_ptr_array + j; dl.src_ptr_array = pwork; /* put data back */ rc = armci_copy_vector(PUT, &dl, 1, proc); FENCE_NODE(proc); if(rc){ ARMCI_UNLOCKMEM(proc); return(rc);} } ARMCI_UNLOCKMEM(proc); } }/*endfor*/ } #endif return 0; } int armci_copy_vector(int op, /* operation code */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ) { int i,s,shmem= SAMECLUSNODE(proc); #ifdef LAPI int armci_th_idx = ARMCI_THREAD_IDX; #endif if(shmem ){ /* local/shared memory copy */ for(i = 0; i< len; i++){ for( s=0; s< darr[i].ptr_array_len; s++){ armci_copy(darr[i].src_ptr_array[s],darr[i].dst_ptr_array[s],darr[i].bytes); } } }else { /* access through global address space */ /* March 19 - removed FENCE from here - it is in ORDER inside armci.c */ switch(op){ case PUT: for(i = 0; i< len; i++){ #ifdef QUADRICS armcill_putv(proc, darr[i].bytes, darr[i].ptr_array_len, darr[i].src_ptr_array, darr[i].dst_ptr_array); #else # ifdef LAPI SET_COUNTER(ack_cntr[armci_th_idx],darr[i].ptr_array_len); # endif UPDATE_FENCE_STATE(proc, PUT, darr[i].ptr_array_len); for( s=0; s< darr[i].ptr_array_len; s++){ armci_put(darr[i].src_ptr_array[s],darr[i].dst_ptr_array[s], darr[i].bytes, proc); } #endif } break; case GET: for(i = 0; i< len; i++){ #ifdef QUADRICS armcill_getv(proc, darr[i].bytes, darr[i].ptr_array_len, darr[i].src_ptr_array, darr[i].dst_ptr_array); #else # ifdef LAPI SET_COUNTER(get_cntr[armci_th_idx],darr[i].ptr_array_len); # endif for( s=0; s< darr[i].ptr_array_len; s++){ armci_get(darr[i].src_ptr_array[s],darr[i].dst_ptr_array[s], darr[i].bytes,proc); } #endif } break; default: armci_die("armci_copy_vector: wrong optype",op); } } #ifdef LAPI if(!shmem){ if(op == GET) CLEAR_COUNTER(get_cntr[armci_th_idx]); /* wait for data arrival */ if(op == PUT) CLEAR_COUNTER(ack_cntr[armci_th_idx]); /* data must be copied out*/ } #endif return 0; } void armci_vector_to_buf(armci_giov_t darr[], int len, void* buf) { int i,s; char *ptr = (char*)buf; for(i = 0; i< len; i++){ for( s=0; s< darr[i].ptr_array_len; s++){ armci_copy(darr[i].src_ptr_array[s],ptr,darr[i].bytes); ptr += darr[i].bytes; } } } void armci_vector_from_buf(armci_giov_t darr[], int len, void* buf) { int i,s; char *ptr = (char*)buf; for(i = 0; i< len; i++){ for( s=0; s< darr[i].ptr_array_len; s++){ armci_copy(ptr, darr[i].dst_ptr_array[s],darr[i].bytes); ptr += darr[i].bytes; } } } int PARMCI_PutV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ) { int rc=0, i,direct=1; #if defined(USE_SOCKET_VECTOR_API) int totvec=0; #endif if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; ORDER(PUT,proc); /* ensure ordering */ #ifndef QUADRICS direct=SAMECLUSNODE(proc); #endif /* use direct protocol for remote access when performance is better */ # if defined(LAPI) || defined(PORTALS) # if defined(PORTALS) direct=1; # else if(!direct) if(len <5 || darr[0].ptr_array_len <5) direct=1; # endif # endif #ifdef BGML armci_hdl_t nb_handle; ARMCI_INIT_HANDLE(&nb_handle); PARMCI_NbPutV(darr, len, proc, &nb_handle); PARMCI_Wait(&nb_handle); #elif ARMCIX ARMCIX_PutV (darr, len, proc); #else if(direct) rc = armci_copy_vector(PUT, darr, len, proc); else{ #if defined(DATA_SERVER) && defined(SOCKETS) && defined(USE_SOCKET_VECTOR_API) /*500 is very conservative, the number here should be modified to be based on the size of send/recv buffer*/ if(totvec<500) rc = armci_rem_vector(PUT, NULL, darr, len, proc, 1,NULL); else #endif rc = armci_pack_vector(PUT, NULL, darr, len, proc,NULL); } #endif if(rc) return FAIL6; else return 0; } int PARMCI_GetV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ) { int rc=0, i,direct=1; #if defined(USE_SOCKET_VECTOR_API) int totvec=0; #endif if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; ORDER(GET,proc); /* ensure ordering */ #ifndef QUADRICS direct=SAMECLUSNODE(proc); #endif /* use direct protocol for remote access when performance is better */ # if defined(LAPI) || defined(PORTALS) # if defined(PORTALS) direct=1; # else if(!direct) if(len <5 || darr[0].ptr_array_len <8) direct=1; # endif # endif #ifdef BGML armci_hdl_t nb_handle; ARMCI_INIT_HANDLE(&nb_handle); PARMCI_NbGetV(darr, len, proc, &nb_handle); PARMCI_Wait(&nb_handle); #elif ARMCIX ARMCIX_GetV (darr, len, proc); #else if(direct) rc = armci_copy_vector(GET, darr, len, proc); else{ #if defined(DATA_SERVER) && defined(SOCKETS) && defined(USE_SOCKET_VECTOR_API) /*500 is very conservative, the number here should be modified to be based on the size of send/recv buffer*/ if(totvec<500) rc = armci_rem_vector(GET, NULL, darr, len, proc,1,NULL); else #endif rc = armci_pack_vector(GET, NULL, darr, len, proc,NULL); } #endif if(rc) return FAIL6; else return 0; } int PARMCI_AccV( int op, /* oeration code */ void *scale, /*scaling factor for accumulate */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ) { int rc=0, i,direct=1; if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; ORDER(op,proc); /* ensure ordering */ direct=SAMECLUSNODE(proc); #ifdef BGML armci_hdl_t nb_handle; ARMCI_INIT_HANDLE(&nb_handle); PARMCI_NbAccV(op, scale, darr, len, proc, &nb_handle); PARMCI_Wait(&nb_handle); #elif ARMCIX ARMCIX_AccV (op, scale, darr, len, proc); #else # if defined(ACC_COPY) && !defined(ACC_SMP) if(armci_me != proc) direct=0; # endif if(direct) rc = armci_acc_vector( op, scale, darr, len, proc); else rc = armci_pack_vector(op, scale, darr, len, proc,NULL); #endif if(rc) return FAIL6; else return 0; } /*****************************************************************************/ /*\ Non-blocking vector API \*/ int PARMCI_NbPutV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /*non-blocking request handle*/ ) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int rc=0, i,direct=1; #if defined(USE_SOCKET_VECTOR_API) int totvec=0; #endif if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; #ifndef QUADRICS direct=SAMECLUSNODE(proc); #endif /* aggregate put */ if(nb_handle && nb_handle->agg_flag == SET) { if(!direct) { rc=armci_agg_save_giov_descriptor(darr, len, proc, PUT, nb_handle); return rc; } } else { /*ORDER(PUT,proc); ensure ordering */ UPDATE_FENCE_INFO(proc); /*set tag and op in the nb handle*/ if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = PUT; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = (armci_ihdl_t)armci_set_implicit_handle(PUT, proc); } # if defined(PORTALS) direct=1; # endif if(direct){ #ifdef BGML nb_handle->count = 0; #endif rc = armci_copy_vector(PUT, darr, len, proc); } else{ #ifdef BGML nb_handle->count = 1; BGML_Callback_t cb_wait={wait_callback, &nb_handle->count}; BGML_giov_t *array=(BGML_giov_t *)darr; BG1S_MemputV(&nb_handle->cmpl_info, proc, len, (BGML_giov_t *)darr, 0, &cb_wait, 1); #elif ARMCIX ARMCIX_NbPutV (darr, len, proc, nb_handle); #else #if defined(DATA_SERVER) && defined(SOCKETS) && defined(USE_SOCKET_VECTOR_API) /*500 is very conservative, the number here should be modified to be based on the size of send/recv buffer*/ if(totvec<500) rc = armci_rem_vector(PUT, NULL, darr, len, proc, 1,nb_handle); else #endif rc = armci_pack_vector(PUT, NULL, darr, len, proc,nb_handle); #endif /* BGML */ } if(rc) return FAIL6; else return 0; } int PARMCI_NbGetV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /*non-blocking request handle*/ ) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int rc=0, i,direct=1; #if defined(USE_SOCKET_VECTOR_API) int totvec=0; #endif if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; #ifndef QUADRICS direct=SAMECLUSNODE(proc); #endif #if defined(PORTALS) direct=1; #endif /* aggregate get */ if(nb_handle && nb_handle->agg_flag == SET) { if(!direct) { rc=armci_agg_save_giov_descriptor(darr, len, proc, GET, nb_handle); return rc; } } else { /* ORDER(GET,proc); ensure ordering */ if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = GET; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = (armci_ihdl_t)armci_set_implicit_handle(GET, proc); } if(direct){ #ifdef BGML nb_handle->count = 0; #endif rc = armci_copy_vector(GET, darr, len, proc); } else{ #ifdef BGML nb_handle->count = 1; BGML_Callback_t cb_wait={wait_callback, &nb_handle->count}; BG1S_MemgetV(&nb_handle->cmpl_info, proc, len, (BGML_giov_t *)darr, 0, &cb_wait, 1); #elif ARMCIX ARMCIX_NbGetV (darr, len, proc, nb_handle); #else #if defined(DATA_SERVER) && defined(SOCKETS) && defined(USE_SOCKET_VECTOR_API) /*500 is very conservative, the number here should be modified to be based on the size of send/recv buffer*/ if(totvec<500) rc = armci_rem_vector(GET, NULL, darr, len, proc,1,nb_handle); else #endif rc = armci_pack_vector(GET, NULL, darr, len, proc,nb_handle); #endif /* BGML */ } if(rc) return FAIL6; else return 0; } int PARMCI_NbAccV( int op, /* oeration code */ void *scale, /*scaling factor for accumulate */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /*non-blocking request handle*/ ) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int rc=0, i,direct=1; if(len<1) return FAIL; for(i=0;i= armci_nproc)return FAIL5; #ifdef BGML if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = op; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = (armci_ihdl_t)armci_set_implicit_handle(op, proc); BGML_Dt dt; switch(op) { case ARMCI_ACC_INT: dt=BGML_SIGNED_INT; break; case ARMCI_ACC_LNG: #if 1 dt=BGML_SIGNED_LONG; #else dt=BGML_SIGNED_INT; #endif break; case ARMCI_ACC_DBL: dt=BGML_DOUBLE; break; case ARMCI_ACC_CPL: dt=BGML_SINGLE_COMPLEX; break; case ARMCI_ACC_FLT: dt=BGML_FLOAT; break; case ARMCI_ACC_DCP: dt=BGML_DOUBLE_COMPLEX; break; default: armci_die("Unsupported data operation\n",0); } nb_handle->count = 1; BGML_Callback_t cb_wait={wait_callback, &nb_handle->count}; BG1S_AccumulateV(&nb_handle->cmpl_info, proc, len, (BGML_giov_t *)darr, scale, 0, dt, BGML_PROD, BGML_SUM, &cb_wait, 1); #else /* ORDER(op,proc); ensure ordering */ UPDATE_FENCE_INFO(proc); direct=SAMECLUSNODE(proc); if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = op; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = (armci_ihdl_t)armci_set_implicit_handle(op, proc); # if defined(ACC_COPY) && !defined(ACC_SMP) if(armci_me != proc) direct=0; # endif if(direct){ rc = armci_acc_vector( op, scale, darr, len, proc); } else{ rc = armci_pack_vector(op, scale, darr, len, proc,nb_handle); } #endif /* BGML */ if(rc) return FAIL6; else return 0; } /*****************************************************************************/ ga-5-3/armci/src/xfer/strided.c0000640005473000001440000014225112040076062015226 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: strided.c,v 1.117.2.6 2007-08-29 17:46:40 manoj Exp $ */ #include "armcip.h" #include "copy.h" #include "acc.h" #include "memlock.h" #include "armci.h" #include "iterator.h" #if HAVE_STDIO_H # include #endif #if HAVE_ASSERT_H # include #endif #define ARMCI_OP_2D(op, scale, proc, src, dst, bytes, count, src_stride, dst_stride,lockit) \ if(op == GET || op ==PUT) \ armci_copy_2D(op, proc, src, dst, bytes, count, src_stride,dst_stride); \ else if(count==1) armci_acc_1D(op, scale, proc, src, dst, bytes,lockit); \ else \ armci_acc_2D(op, scale, proc, src, dst, bytes, count, src_stride,dst_stride,lockit) /* macro supports run-time selection of request sending scheme */ #if defined(CLIENT_BUF_BYPASS) #define CAN_REQUEST_DIRECTLY _armci_bypass #else # if defined(HITACHI) # define CAN_REQUEST_DIRECTLY 0 # else # define CAN_REQUEST_DIRECTLY 1 # endif #endif #if defined(BGML) || defined(ARMCIX) #define PREPROCESS_STRIDED(tmp_count) #define POSTPROCESS_STRIDED(tmp_count) #else #define PREPROCESS_STRIDED(tmp_count) { \ tmp_count=0; \ if(stride_levels) \ for(;stride_levels;stride_levels--)if(count[stride_levels]>1)break; \ if(stride_levels&&(count[0]==src_stride_arr[0]&&count[0]==dst_stride_arr[0])){ \ tmp_count=seg_count[1]; \ count = seg_count+1; \ seg_count[1] = seg_count[0] * seg_count[1]; \ stride_levels --; \ src_stride_arr ++; dst_stride_arr++ ; \ } \ } #define POSTPROCESS_STRIDED(tmp_count) if(tmp_count)seg_count[1]=tmp_count #endif #define SERVER_GET 1 #define SERVER_NBGET 2 #define DIRECT_GET 3 #define DIRECT_NBGET 4 #define SERVER_PUT 5 #define SERVER_NBPUT 6 #define DIRECT_PUT 7 #define DIRECT_NBPUT 8 #ifdef ALLOW_PIN # define DO_FENCE(__proc,__prot) if(__prot==SERVER_GET); \ else if(__prot==SERVER_PUT); \ else if(__prot==DIRECT_GET || __prot==DIRECT_NBGET){ \ if(armci_prot_switch_fence[__proc]==SERVER_PUT) \ PARMCI_Fence(__proc); \ } \ else if(__prot==DIRECT_PUT || __prot==DIRECT_NBPUT){ \ if(armci_prot_switch_fence[__proc]==SERVER_PUT) \ PARMCI_Fence(__proc); \ } \ else; \ armci_prot_switch_fence[__proc]=__prot #else # define DO_FENCE(__proc,__prot) #endif #ifndef REGIONS_REQUIRE_MEMHDL # define ARMCI_MEMHDL_T void #endif ARMCI_MEMHDL_T *mhloc=NULL,*mhrem=NULL; #ifdef REGIONS_REQUIRE_MEMHDL int armci_region_both_found_hndl(void *loc, void *rem, int size, int node, ARMCI_MEMHDL_T **loc_memhdl,ARMCI_MEMHDL_T **rem_memhdl); # define ARMCI_REGION_BOTH_FOUND(_s,_d,_b,_p) \ armci_region_both_found_hndl((_s),(_d),(_b),(_p),&mhloc,&mhrem) #else # define ARMCI_REGION_BOTH_FOUND(_s,_d,_b,_p) \ armci_region_both_found((_s),(_d),(_b),(_p)) #endif #ifdef HAS_RDMA_GET # ifdef REGIONS_REQUIRE_MEMHDL void armci_client_direct_get(int p, void *src_buf, void *dst_buf, int len, void** cptr,int nbtag,ARMCI_MEMHDL_T *lochdl,ARMCI_MEMHDL_T *remhdl); # else void armci_client_direct_get(int p, void *src_buf, void *dst_buf, int len, void** contextptr,int nbtag,void *mhdl,void *mhdl1); # endif # define ARMCI_NBREM_GET(_p,_s,_sst,_d,_dst,_cou,_lev,_hdl) \ armci_client_direct_get((_p),(_s),(_d),(_cou)[0],&((_hdl)->cmpl_info),(_hdl)->tag,(void *)mhloc,(void *)mhrem); \ # define ARMCI_REM_GET(_p,_s,_sst,_d,_dst,_cou,_lev,_hdl) \ armci_client_direct_get((_p),(_s),(_d),(_cou)[0],NULL,0,(void *)mhloc,(void *)mhrem) \ #else # define ARMCI_REM_GET(_p,_s,_sst,_d,_dst,_cou,_lev,_hdl) \ armci_rem_get((_p),(_s),(_sst),(_d),(_dst),(_cou),(_lev),(_hdl),(void *)mhloc,(void *)mhrem) # define ARMCI_NBREM_GET ARMCI_REM_GET #endif #ifdef ALLOW_PIN extern int* armci_prot_switch_fence; extern int armci_prot_switch_preproc; extern int armci_prot_switch_preop; #endif int armci_iwork[MAX_STRIDE_LEVEL]; /*\ 2-dimensional array copy \*/ static void armci_copy_2D(int op, int proc, void *src_ptr, void *dst_ptr, int bytes, int count, int src_stride, int dst_stride) { #ifdef LAPI int armci_th_idx = ARMCI_THREAD_IDX; #endif #ifdef LAPI2__ # define COUNT 1 #else # define COUNT count #endif #ifdef __crayx1 int shmem = 1; #else int shmem = SAMECLUSNODE(proc); #endif if(shmem) { /* data is in local/shared memory -- can use memcpy */ if(count==1 && bytes 2) && lockit){ /* we need one lock operation only - must be done outside 2d acc */ armci_lockmem_patch(dst_ptr,dst_stride_arr, count, stride_levels, proc); unlockit=1; lockit =0; } /* if(proc!=armci_me) INTR_OFF;*/ # if defined(LAPI2) || defined(PORTALS) /*|| defined(DOELAN4) && !defined(NB_NONCONT)*/ /*even 1D armci_nbput has to use different origin counters for 1D */ # if defined(LAPI2) if(!ARMCI_ACC(op) && !SAMECLUSNODE(proc) && (nb_handle || (!nb_handle && stride_levels>=1 && count[0]<=LONG_PUT_THRESHOLD))) # elif defined(DOELAN4) && !defined(NB_NONCONT) /*if(!ARMCI_ACC(op) && !SAMECLUSNODE(proc) && nb_handle && stride_levels<2)*/ if(!ARMCI_ACC(op) && !SAMECLUSNODE(proc) && stride_levels<2) # else if(!SAMECLUSNODE(proc)) # endif armci_network_strided(op,scale,proc,src_ptr,src_stride_arr,dst_ptr, dst_stride_arr,count,stride_levels,nb_handle); else # endif switch (stride_levels) { case 0: /* 1D copy */ ARMCI_OP_2D(op, scale, proc, src_ptr, dst_ptr, count[0], 1, count[0], count[0], lockit); break; case 1: /* 2D op */ ARMCI_OP_2D(op, scale, proc, src_ptr, dst_ptr, count[0], count[1], src_stride_arr[0], dst_stride_arr[0], lockit); break; case 2: /* 3D op */ for (s2= 0; s2 < count[2]; s2++){ /* 2D copy */ ARMCI_OP_2D(op, scale, proc, src+s2*src_stride_arr[1], dst+s2*dst_stride_arr[1], count[0], count[1], src_stride_arr[0], dst_stride_arr[0], lockit ); } break; case 3: /* 4D op */ for(s3=0; s3< count[3]; s3++){ src = (char*)src_ptr + src_stride_arr[2]*s3; dst = (char*)dst_ptr + dst_stride_arr[2]*s3; for (s2= 0; s2 < count[2]; s2++){ /* 3D copy */ ARMCI_OP_2D(op, scale, proc, src+s2*src_stride_arr[1], dst+s2*dst_stride_arr[1], count[0], count[1],src_stride_arr[0], dst_stride_arr[0],lockit); } } break; default: /* N-dimensional */ { /* stride_levels is not the same as ndim. it is ndim-1 * For example a 10x10x10... array, suppose the datatype is byte * the stride_arr is 10, 10x10, 10x10x10 .... */ index[2] = 0; unit[2] = 1; total_of_2D = count[2]; for(j=3; j<=stride_levels; j++) { index[j] = 0; unit[j] = unit[j-1] * count[j-1]; total_of_2D *= count[j]; } for(i=0; i= count[j]) index[j] = 0; } ARMCI_OP_2D(op, scale, proc, src, dst, count[0], count[1], src_stride_arr[0], dst_stride_arr[0], lockit); } } } /* deal with non-blocking loads and stores */ #if defined(LAPI) || defined(_ELAN_PUTGET_H) || defined(NB_NONCONT) # if defined(LAPI) if(!nb_handle) # endif { if(!(SAMECLUSNODE(proc))){ if(op == GET){ WAIT_FOR_GETS; /* wait for data arrival */ }else { WAIT_FOR_PUTS; /* data must be copied out*/ } } } #endif /* if(proc!=armci_me) INTR_ON;*/ /* __asm__ __volatile__ ("sfence":::"memory"); */ if(unlockit){ # if defined(ACC_COPY) FENCE_NODE(proc); # endif ARMCI_UNLOCKMEM(proc); /* release memory lock */ } return 0; } /**Internal puts function. Combines both blocking and non-blocking * variants. Any use of implicit handles should be outside of this * function. * @param src_ptr pointer to 1st segment at source * @param src_stride_arr array of strides at source * @param dst_ptr pointer to 1st segment at destination * @param dst_stride_arr array of strides at destination * @param seg_count number of segments at each stride levels: count[0]=bytes * @param stride_levels number of stride levels * @param proc remote process(or) ID * @param nbh non-blocking handle (NULL implies blocking call) * @param put_flag Flag to set after the PUT is remote complete (if any) * @return */ static int _armci_puts(void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int seg_count[], int stride_levels, int proc, armci_ihdl_t nbh, armci_flag_t *put_flag) { int *count=seg_count, tmp_count=0; int rc=0, direct=1; if(src_ptr == NULL || dst_ptr == NULL) return FAIL; if(count[0]<0)return FAIL3; if(stride_levels <0 || stride_levels > MAX_STRIDE_LEVEL) return FAIL4; if(proc<0)return FAIL5; #ifdef __crayx1 if(!stride_levels) { memcpy(dst_ptr, src_ptr,count[0]); return 0; } #endif PREPROCESS_STRIDED(tmp_count); # if (!defined(QUADRICS) || defined(PACKPUT)) direct=SAMECLUSNODE(proc); # endif /*(!QUADRICS||!PACKPUT)&&!PORTALS*/ if(put_flag) dassert(1,nbh==NULL); if(!nbh) { ORDER(PUT,proc);/* ensure ordering */ } else {/* aggregate put */ if(nbh->agg_flag == SET) { if(!direct){ rc= armci_agg_save_strided_descriptor(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, PUT, nbh); POSTPROCESS_STRIDED(tmp_count); return(rc); } } else { /*ORDER(PUT,proc); ensure ordering */ UPDATE_FENCE_INFO(proc); /*set tag and op in the nb handle*/ nbh->tag = GET_NEXT_NBTAG(); nbh->op = PUT; nbh->proc= proc; nbh->bufid=NB_NONE; } } #ifdef BGML if(nbh) { nbh->count = 1; BGML_Callback_t cb_wait={wait_callback, &nbh->count}; BG1S_MemputS (&nbh->cmpl_info, proc, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, seg_count, stride_levels, 0, &cb_wait, 1); } else if(!stride_levels) { unsigned temp_count=1; BGML_Callback_t cb_wait={wait_callback, &temp_count}; BG1S_t request; BGML_CriticalSection_enter(); BG1S_Memput(&request, proc, src_ptr, 0, dst_ptr, count[0], &cb_wait, 1); /*BGML_Wait(&count);*/ while (temp_count) BGML_Messager_advance(); BGML_CriticalSection_exit(); } else { armci_hdl_t nb_handle; ARMCI_INIT_HANDLE(&nb_handle); PARMCI_NbPutS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, &nb_handle); PARMCI_Wait(&nb_handle); } if(put_flag) { /*=>!nbh*/ PARMCI_Fence(proc); PARMCI_Put(&put_flag->val,put_flag->ptr,sizeof(int),proc); } #elif ARMCIX if(nbh) ARMCIX_NbPutS (src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nbh); else if(!stride_levels) { ARMCIX_Put(src_ptr, dst_ptr, count[0], proc); } else { ARMCIX_PutS (src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); } if(put_flag) { /*=>!nbh*/ PARMCI_Fence(proc); PARMCI_Put(&put_flag->val,put_flag->ptr,sizeof(int),proc); } #else /*BGML*/ /* use direct protocol for remote access when performance is better */ # if defined(LAPI) || defined(DOELAN4) if(!direct) { switch(stride_levels) { case 0: # ifndef LAPI_RDMA direct =1; # endif break; case 1: if((count[1]LONG_PUT_THRESHOLD) direct =1; break; default: if(count[0]> LONG_PUT_THRESHOLD )direct=1; break; } } # endif /*LAPI||DOELAN4*/ # ifdef PORTALS if(stride_levels) direct=1; # endif # if !defined(LAPI2) || defined(LAPI_RDMA) if(!direct){ # ifdef ALLOW_PIN /*if we can pin, we do*/ if(!stride_levels && ARMCI_REGION_BOTH_FOUND(src_ptr,dst_ptr,count[0],armci_clus_id(proc))){ if(nbh) { DO_FENCE(proc,DIRECT_NBPUT); armci_client_direct_send(proc, src_ptr, dst_ptr, count[0], (void **)(&nbh->cmpl_info), nbh->tag,mhloc,mhrem); } else { DO_FENCE(proc,DIRECT_PUT); armci_client_direct_send(proc,src_ptr,dst_ptr,count[0],NULL,0,mhloc,mhrem); } POSTPROCESS_STRIDED(tmp_count); if(put_flag) { PARMCI_Fence(proc); PARMCI_Put(&put_flag->val,put_flag->ptr,sizeof(int),proc); } return 0; } # if 0 && defined(VAPI) # if !defined(PEND_BUFS) if(stride_levels==1 && count[0]>VAPI_SGPUT_MIN_COLUMN && ARMCI_REGION_BOTH_FOUND(src_ptr,dst_ptr,count[0],armci_clus_id(proc))){ if(nbh) { DO_FENCE(proc,DIRECT_NBPUT); } else { DO_FENCE(proc,DIRECT_PUT); } /* printf("%d:Calling two phase send\n", armci_me); */ armci_two_phase_send(proc, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr,count,stride_levels,NULL,nbh,mhloc); if(put_flag) { PARMCI_Fence(proc); PARMCI_Put(&put_flag->val,put_flag->ptr,sizeof(int),proc); } return 0; } # else /*!PEND_BUFS*/ { int i, off; for(i=0; i0); if(i!=0) assert(src_stride_arr[i]>=src_stride_arr[i-1]*count[i]); } off = (stride_levels>0)? src_stride_arr[stride_levels-1]*count[stride_levels] : count[0]; mhloc=mhrem=NULL; if(ARMCI_REGION_BOTH_FOUND(src_ptr,dst_ptr,off,armci_clus_id(proc))) { assert(mhloc != NULL); assert(mhrem != NULL); if(nbh) { DO_FENCE(proc, DIRECT_NBPUT); armci_client_direct_rdma_strided(PUT,proc,src_ptr,src_stride_arr, dst_ptr,dst_stride_arr, count, stride_levels, (void**)&nbh->cmpl_info,nbh->tag, mhloc,mhrem); } else { DO_FENCE(proc, DIRECT_PUT); armci_client_direct_rdma_strided(PUT,proc,src_ptr,src_stride_arr, dst_ptr,dst_stride_arr, count, stride_levels,NULL,0, mhloc,mhrem); } if(put_flag) { PARMCI_Fence(proc); PARMCI_Put(&put_flag->val,put_flag->ptr,sizeof(int),proc); } return 0; } } # endif /*!PEND_BUFS*/ # endif /*VAPI*/ # endif /*ALLOW_PIN*/ } #endif /* !LAPI2||LAPI_RDMA */ # ifndef LAPI2 if(!direct){ if(nbh) { DO_FENCE(proc,SERVER_PUT); } else { DO_FENCE(proc,SERVER_NBPUT); } # if defined(DATA_SERVER) && defined(SOCKETS) && defined(USE_SOCKET_VECTOR_API) if(count[0]> LONG_PUT_THRESHOLD && stride_levels>0){ ext_header_t h, *hdr; h.exthdr = put_flag; h.len = sizeof(armci_flag_t); hdr = put_flag?&h:NULL; rc = armci_rem_strided(PUT, NULL, proc, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, hdr,1, nbh); } else # endif /*DATA_SERVER && SOCKETS && USE_SOCKET_VECTOR_API*/ { ext_header_t h,*hdr; h.exthdr = put_flag; h.len = sizeof(armci_flag_t); hdr = put_flag?&h:NULL; if(nbh) { nbh->tag =0; /* packed request is completed locally */ CLEAR_HNDL_FIELD(nbh->cmpl_info); } rc = armci_pack_strided(PUT,NULL,proc,src_ptr,src_stride_arr, dst_ptr,dst_stride_arr, count, stride_levels,hdr,-1,-1,-1,NULL); } } else # endif /*!LAPI*/ { if(!nbh && stride_levels == 0) { armci_copy_2D(PUT, proc, src_ptr, dst_ptr, count[0], 1, count[0], count[0]); # if defined(LAPI) || defined(_ELAN_PUTGET_H) if(proc != armci_me) { WAIT_FOR_PUTS; } # endif /*LAPI||_ELAN_PUTGET_H*/ } else { rc = armci_op_strided( PUT, NULL, proc, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr,count,stride_levels, 0,nbh); } if(put_flag) { /*=>!nbh*/ PARMCI_Fence(proc); PARMCI_Put(&put_flag->val,put_flag->ptr,sizeof(int),proc); } } #endif /*BGML*/ POSTPROCESS_STRIDED(tmp_count); if(rc) return FAIL6; else return 0; } int PARMCI_PutS( void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ) { #if 1 return _armci_puts(src_ptr,src_stride_arr,dst_ptr,dst_stride_arr, seg_count,stride_levels,proc,NULL,NULL); #else armci_hdl_t nbh; ARMCI_INIT_HANDLE(&nbh); PARMCI_NbPutS(src_ptr,src_stride_arr,dst_ptr,dst_stride_arr,seg_count,stride_levels,proc,&nbh); PARMCI_Wait(&nbh); return 0; #endif } int PARMCI_PutS_flag_dir(void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int seg_count[], int stride_levels, int *flag, int val, int proc) { return PARMCI_PutS_flag(src_ptr, src_stride_arr,dst_ptr,dst_stride_arr, seg_count, stride_levels, flag, val, proc); } int PARMCI_PutS_flag(void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int seg_count[], int stride_levels, int *flag, int val, int proc) { armci_flag_t put_flag; put_flag.val=val; put_flag.ptr=flag; return _armci_puts(src_ptr,src_stride_arr,dst_ptr,dst_stride_arr,seg_count,stride_levels,proc,NULL,&put_flag); } int PARMCI_GetS( void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ) { armci_hdl_t nbh; ORDER(GET,proc); ARMCI_INIT_HANDLE(&nbh); PARMCI_NbGetS(src_ptr,src_stride_arr,dst_ptr,dst_stride_arr,seg_count,stride_levels,proc,&nbh); PARMCI_Wait(&nbh); return 0; } /**Internal strided accumulate. Implicit handles should be used * outsise this function. * @param optype operation * @param scale scale factor x += scale*y * @param src_ptr pointer to 1st segment at source * @param src_stride_arr[] array of strides at source * @param dst_ptr 1st segment at destination * @param dst_stride_arr[] array of strides at destination * @param seg_count[] number of segments at each stride * levels: count[0]=bytes * @param stride_levels number of stride levels * @param proc remote process(or) ID * @param nbh armci non-blocking call handle * @return */ static int _armci_accs( int optype, void *scale, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int seg_count[],int stride_levels, int proc, armci_ihdl_t nbh) { int rc, direct=1; int *count=seg_count, tmp_count=0; if(src_ptr == NULL || dst_ptr == NULL) return FAIL; if(src_stride_arr == NULL || dst_stride_arr ==NULL) return FAIL2; if(count[0]<0)return FAIL3; if(stride_levels <0 || stride_levels > MAX_STRIDE_LEVEL) return FAIL4; if(proc<0)return FAIL5; if(!nbh) { ORDER(optype,proc); } else { UPDATE_FENCE_INFO(proc); nbh->tag = GET_NEXT_NBTAG(); nbh->op = optype; nbh->proc= proc; nbh->bufid=NB_NONE; } PREPROCESS_STRIDED(tmp_count); #ifdef BGML armci_ihdl_t inbh; armci_hdl_t tmp_hdl; if(nbh) inbh = nbh; else { ARMCI_INIT_HANDLE(&tmp_hdl); inbh = (armci_ihdl_t)&tmp_hdl; } inbh->count=1; BGML_Callback_t cb_wait={wait_callback, &inbh->count}; BGML_Op oper1=BGML_PROD; BGML_Op oper2=BGML_SUM; BGML_Dt dt; switch(optype) { case ARMCI_ACC_INT: case ARMCI_ACC_LNG: dt=BGML_SIGNED_INT; break; #if 0 case ARMCI_ACC_LNG: dt=BGML_SIGNED_LONG; break; #endif case ARMCI_ACC_DBL: dt=BGML_DOUBLE; break; case ARMCI_ACC_CPL: dt=BGML_SINGLE_COMPLEX; break; case ARMCI_ACC_DCP: dt=BGML_DOUBLE_COMPLEX; break; case ARMCI_ACC_FLT: dt=BGML_FLOAT; break; default: assert(0); } BG1S_AccumulateS (&inbh->cmpl_info, proc, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, seg_count, stride_levels, scale, 0, dt, oper1, oper2, &cb_wait, 1); if(!nbh) PARMCI_Wait(&tmp_hdl); #elif ARMCIX if(!nbh) ARMCIX_AccS (optype, scale, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); else ARMCIX_NbAccS (optype, scale, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nbh); #else direct=SAMECLUSNODE(proc); # if defined(ACC_COPY) && !defined(ACC_SMP) if(armci_me != proc) direct=0; # endif /*ACC_COPY && !ACC_SMP*/ if(direct) rc = armci_op_strided(optype,scale, proc, src_ptr, src_stride_arr,dst_ptr, dst_stride_arr, count, stride_levels,1,NULL); else{ if(nbh) { DO_FENCE(proc,SERVER_NBPUT); } else { DO_FENCE(proc,SERVER_PUT); } rc = armci_pack_strided(optype,scale,proc,src_ptr, src_stride_arr,dst_ptr, dst_stride_arr,count,stride_levels,NULL,-1,-1,-1,nbh); } #endif /*BGML*/ POSTPROCESS_STRIDED(tmp_count); if(rc) return FAIL6; else return 0; } int PARMCI_AccS( int optype, /* operation */ void *scale, /* scale factor x += scale*y */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ) { return _armci_accs(optype,scale,src_ptr,src_stride_arr,dst_ptr, dst_stride_arr,seg_count,stride_levels,proc,NULL); } int PARMCI_Put(void *src, void* dst, int bytes, int proc) { int rc=0; rc = PARMCI_PutS(src, NULL, dst, NULL, &bytes, 0, proc); return rc; } int PARMCI_Acc(int optype, void *scale, void *src, void* dst, int bytes, int proc) { int rc=0; rc = PARMCI_AccS(optype, scale, src, NULL, dst, NULL, &bytes, 0, proc); return rc; } int PARMCI_Put_flag(void *src, void* dst,int bytes,int *f,int v,int proc) { return PARMCI_PutS_flag(src, NULL, dst, NULL, &bytes, 0, f, v, proc); } int PARMCI_Get(void *src, void* dst, int bytes, int proc) { int rc=0; #ifdef __crayx1 memcpy(dst,src,bytes); #else rc = PARMCI_GetS(src, NULL, dst, NULL, &bytes, 0, proc); #endif dassert(1,rc==0); return rc; } #define PACK1D 1 #if PACK1D # define armci_read_strided1 armci_read_strided # define armci_write_strided1 armci_write_strided #else # define armci_read_strided2 armci_read_strided # define armci_write_strided2 armci_write_strided #endif void armci_write_strided1(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf) { const int seg_size = count[0]; int off=0; stride_info_t sinfo; armci_stride_info_init(&sinfo, ptr,stride_levels,stride_arr,count); while(armci_stride_info_has_more(&sinfo)) { char *sptr = armci_stride_info_seg_ptr(&sinfo); armci_copy(sptr,&buf[off],seg_size); off += seg_size; armci_stride_info_next(&sinfo); } armci_stride_info_destroy(&sinfo); } void armci_write_strided2(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf) { int i, j; int total; /* number of 2 dim block */ int index[MAX_STRIDE_LEVEL], unit[MAX_STRIDE_LEVEL]; if(stride_levels == 0){ armci_copy( ptr, buf, count[0]); }else if (count[0]%ALIGN_SIZE || (unsigned long)ptr%ALIGN_SIZE ) armci_write_strided1(ptr,stride_levels, stride_arr,count,buf); else { int rows, ld, idx, ldd; char *src; rows = count[0]/8; ld = stride_arr[0]/8; switch(stride_levels){ case 1: DCOPY21(&rows, count+1, ptr, &ld, (void*)buf, &idx); break; case 2: #if 0 for(i=0; i< count[2]; i++){ DCOPY21(&rows, count+1, ptr, &ld, buf, &idx); ptr = ((char*)ptr)+stride_arr[1]; buf = (char*) ((double*)buf + idx); } #endif ldd = stride_arr[1]/stride_arr[0]; DCOPY31(&rows, count+1, count+2, ptr, &ld, &ldd, (void*)buf, &idx); break; default: index[2] = 0; unit[2] = 1; total = count[2]; for(j=3; j<=stride_levels; j++) { index[j] = 0; unit[j] = unit[j-1] * count[j-1]; total *= count[j]; } for(i=0; i= count[j]) index[j] = 0; } DCOPY21(&rows, count+1, (void*)src, &ld, (void*)buf, &idx); buf = (char*) ((double*)buf + idx); } } /*switch */ } /*else */ } void armci_read_strided1(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf) { const int seg_size = count[0]; int off=0; stride_info_t sinfo; armci_stride_info_init(&sinfo,ptr,stride_levels,stride_arr,count); while(armci_stride_info_has_more(&sinfo)) { char *dptr = armci_stride_info_seg_ptr(&sinfo); armci_copy(&buf[off],dptr,seg_size); off += seg_size; armci_stride_info_next(&sinfo); } armci_stride_info_destroy(&sinfo); } void armci_read_strided2(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf) { int i, j; int total; /* number of 2 dim block */ int index[MAX_STRIDE_LEVEL], unit[MAX_STRIDE_LEVEL]; if(stride_levels == 0){ armci_copy( buf, ptr, count[0]); }else if (count[0]%ALIGN_SIZE || (unsigned long)ptr%ALIGN_SIZE) armci_read_strided1(ptr,stride_levels, stride_arr,count,buf); else { int rows, ld, idx, ldd; char *src; rows = count[0]/8; ld = stride_arr[0]/8; switch(stride_levels){ case 1: DCOPY12(&rows, count+1, ptr, &ld, (void*)buf, &idx); break; case 2: #if 0 for(i=0; i< count[2]; i++){ DCOPY12(&rows, count+1, ptr, &ld, buf, &idx); ptr = ((char*)ptr)+stride_arr[1]; buf = (char*) ((double*)buf + idx); } #endif ldd = stride_arr[1]/stride_arr[0]; DCOPY13(&rows, count+1, count+2, ptr, &ld, &ldd, (void*)buf, &idx); break; default: index[2] = 0; unit[2] = 1; total = count[2]; for(j=3; j<=stride_levels; j++) { index[j] = 0; unit[j] = unit[j-1] * count[j-1]; total *= count[j]; } for(i=0; i= count[j]) index[j] = 0; } DCOPY12(&rows, count+1, (void*)src, &ld, (void*)buf, &idx); buf = (char*) ((double*)buf + idx); } } /*switch */ } /*else */ } /**Read data from buffer into the locations pointed to by the stride * iterator. The reading happens incrementally. The stride iterator is * traversed to copy as much data as possible in the buffer. When all * the data in buf is consumed the function returns with the number of * bytes consumed from the buffer. * @param sinfo Stride iterator * @param buf IN Pointer to data to be read into user memory * @param bytes IN #bytes available in buf for reading * @param seg_off INOUT Bytes of the current segment written in the * last call (on partial segment write). On return, this parameter * contains the bytes of the last segment written if it was partial. * @return #bytes read from buf into user memory. */ int armci_read_strided_inc(stride_info_t *sinfo, const char *buf,int bytes, int *seg_off) { int off=0; const int seg_size = armci_stride_info_seg_size(sinfo); dassert1(1,bytes>0,bytes); off=0; if(*seg_off) { char *sptr = (char*) &buf[off]; char *dptr = ((char*)armci_stride_info_seg_ptr(sinfo))+*seg_off; int size = ARMCI_MIN(seg_size-*seg_off,bytes); /* printf("%d:%s(): seg_size=%d,seg_off=%d,bytes=%d\n",armci_me,FUNCTION_NAME,seg_size,*seg_off,bytes); */ dassert(1,armci_stride_info_has_more(sinfo)); armci_copy(sptr,dptr,size); off += size; if(*seg_off+size == seg_size) { armci_stride_info_next(sinfo); } } while(bytes>off) { int size = ARMCI_MIN(seg_size, bytes-off); dassert(1,armci_stride_info_has_more(sinfo)); armci_copy(&buf[off],armci_stride_info_seg_ptr(sinfo),size); if(size==seg_size) armci_stride_info_next(sinfo); off += size; } dassertp(1,off==bytes,("%d:off=%d bytes=%d",armci_me,off,bytes)); *seg_off = (bytes + *seg_off) % seg_size; return bytes; } #define INIT_NB_HANDLE(nb,o,p) if(nb){ \ (nb)->tag = 0; \ (nb)->op = (o); (nb)->proc= (p); \ (nb)->bufid=NB_NONE;} \ else { (nb)=(armci_ihdl_t)armci_set_implicit_handle(o, p); (nb)->tag=0; } /*\Non-Blocking API \*/ int PARMCI_NbPutS( void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /* armci non-blocking call handle*/ ) { if(!usr_hdl) usr_hdl = armci_set_implicit_handle(PUT, proc); return _armci_puts(src_ptr, src_stride_arr,dst_ptr,dst_stride_arr, seg_count,stride_levels,proc,(armci_ihdl_t)usr_hdl,NULL); } int PARMCI_NbGetS( void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: byte_count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /* armci non-blocking call handle*/ ) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int rc=0,direct=1; int *count=seg_count, tmp_count=0; if(src_ptr == NULL || dst_ptr == NULL) return FAIL; if(seg_count[0]<0)return FAIL3; if(stride_levels <0 || stride_levels > MAX_STRIDE_LEVEL) return FAIL4; if(proc<0)return FAIL5; #ifdef BGML armci_ihdl_t nbh; set_nbhandle(&nbh, usr_hdl, PUT, proc); nbh->count=1; BGML_Callback_t cb_wait={wait_callback, &nbh->count}; BG1S_MemgetS (&nbh->cmpl_info, proc, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, seg_count, stride_levels, 0, &cb_wait, 1); #else #if !defined(QUADRICS) direct=SAMECLUSNODE(proc); #endif PREPROCESS_STRIDED(tmp_count); /* aggregate get */ if(nb_handle && nb_handle->agg_flag == SET) { if(!direct){ rc= armci_agg_save_strided_descriptor(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, GET, nb_handle); POSTPROCESS_STRIDED(tmp_count); return(rc); } } else { /* ORDER(GET,proc); ensure ordering */ UPDATE_FENCE_INFO(proc); /*set tag and op in the nb handle*/ if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = GET; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else nb_handle = (armci_ihdl_t)armci_set_implicit_handle(GET, proc); } #ifdef LAPI_RDMA if(stride_levels == 0 || count[0] > LONG_GET_THRESHOLD) direct=0; #endif #ifdef PORTALS if(stride_levels) direct=1; #endif #if !defined(LAPI2) || defined(LAPI_RDMA) if(!direct){ # ifdef ALLOW_PIN #if defined(VAPI) extern int armci_max_num_sg_ent; #endif if(!stride_levels && ARMCI_REGION_BOTH_FOUND(dst_ptr,src_ptr,count[0],armci_clus_id(proc))){ DO_FENCE(proc,DIRECT_NBGET); ARMCI_NBREM_GET(proc, src_ptr,NULL,dst_ptr,NULL,count, 0, nb_handle); POSTPROCESS_STRIDED(tmp_count); return 0; } # endif } #endif /*!LAPI||LAPI_RDMA */ #ifndef LAPI2 if(!direct){ DO_FENCE(proc,SERVER_NBGET); #if defined(DATA_SERVER) && (defined(SOCKETS) || defined(CLIENT_BUF_BYPASS) ) /* for larger strided or 1D reqests buffering can be avoided to send data * we can try to bypass the packetization step and send request directly */ if(CAN_REQUEST_DIRECTLY && ((count[0]> LONG_GET_THRESHOLD) || (stride_levels && count[0]>LONG_GET_THRESHOLD_STRIDED) ) ) { int nobuf =1; /* tells the sending routine not to buffer */ rc = armci_rem_strided(GET, NULL, proc,src_ptr,src_stride_arr,dst_ptr, dst_stride_arr, count, stride_levels, (ext_header_t*)0,nobuf,nb_handle); if(rc) goto DefaultPath; /* attempt to avoid buffering failed */ }else DefaultPath: /* standard buffered path */ #endif #ifdef ARMCIX rc = ARMCIX_NbGetS (src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); #else rc = armci_pack_strided(GET, NULL, proc, src_ptr, src_stride_arr, dst_ptr,dst_stride_arr,count,stride_levels, NULL,-1,-1,-1,nb_handle); #endif }else #else /* avoid LAPI_GetV */ if(stride_levels==1 && count[0]>320 && !direct) ARMCI_REM_GET(proc,src_ptr,src_stride_arr,dst_ptr, dst_stride_arr, count, stride_levels, nb_handle); else #endif rc = armci_op_strided(GET, NULL, proc, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr,count, stride_levels,0,nb_handle); POSTPROCESS_STRIDED(tmp_count); #endif /*bgml*/ if(rc) return FAIL6; else return 0; } int PARMCI_NbAccS( int optype, /* operation */ void *scale, /* scale factor x += scale*y */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int seg_count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* usr_hdl /* armci non-blocking call handle*/ ) { if(!usr_hdl) usr_hdl = armci_set_implicit_handle(optype, proc); return _armci_accs(optype,scale,src_ptr,src_stride_arr,dst_ptr, dst_stride_arr,seg_count,stride_levels,proc,(armci_ihdl_t)usr_hdl); } #if !defined(ACC_COPY)&&!defined(CRAY_YMP)&&!defined(CYGNUS)&&!defined(CYGWIN) &&!defined(BGML)&&!defined(DCMF) # define REMOTE_OP #endif void set_nbhandle(armci_ihdl_t *nbh, armci_hdl_t *nb_handle, int op, int proc) { if(nb_handle) { *nbh=(armci_ihdl_t)nb_handle; } else { *nbh=(armci_ihdl_t)armci_set_implicit_handle(op, proc); } } int PARMCI_NbPut(void *src, void* dst, int bytes, int proc,armci_hdl_t* uhandle) { int rc; rc = PARMCI_NbPutS(src,NULL,dst,NULL,&bytes,0,proc,uhandle); return(rc); } int PARMCI_NbGet(void *src, void* dst, int bytes, int proc,armci_hdl_t* uhandle) { int rc; rc=PARMCI_NbGetS(src,NULL,dst,NULL,&bytes,0,proc,uhandle); return(rc); } static void _armci_op_value(int op, void *src, void *dst, int proc, int bytes, armci_hdl_t *usr_hdl) { int rc=0,pv=0; #ifdef LAPI int armci_th_idx = ARMCI_THREAD_IDX; #endif armci_ihdl_t nbh = (armci_ihdl_t)usr_hdl; if(!nbh) { ORDER(op,proc); /* ensure ordering */ }else { if(nbh->agg_flag == SET) { if(op==PUT) pv = 1; (void)armci_agg_save_descriptor(src,dst,bytes,proc,op,pv,nbh); return; } else { if(op==PUT) UPDATE_FENCE_INFO(proc); /*set tag and op in the nb handle*/ nbh->tag = GET_NEXT_NBTAG(); nbh->op = op; nbh->proc= proc; nbh->bufid=NB_NONE; } } #if defined(REMOTE_OP) && !defined(QUADRICS) rc = armci_rem_strided(op, NULL, proc, src, NULL, dst, NULL, &bytes, 0, NULL, 0, nbh); if(rc) armci_die("ARMCI_Value: armci_rem_strided incomplete", FAIL6); #else if(op==PUT) { UPDATE_FENCE_STATE(proc, PUT, 1); # ifdef LAPI SET_COUNTER(ack_cntr[armci_th_idx], 1); # endif # if defined(BGML) || defined(ARMCIX) if(usr_hdl) PARMCI_NbPut(src,dst,bytes,proc,usr_hdl); else PARMCI_Put(src,dst,bytes,proc); # else armci_put(src, dst, bytes, proc); # endif } else { # ifdef LAPI SET_COUNTER(get_cntr[armci_th_idx], 1); # endif # if defined(BGML) || defined(ARMCIX) if(usr_hdl) PARMCI_NbGet(src,dst,bytes,proc,usr_hdl); else PARMCI_Get(src,dst,bytes,proc); # else armci_get(src, dst, bytes, proc); # endif } /* deal with non-blocking loads and stores */ # if defined(LAPI) || defined(_ELAN_PUTGET_H) # ifdef LAPI if(!nbh) # endif { if(proc != armci_me){ if(op == GET){ WAIT_FOR_GETS; /* wait for data arrival */ }else { WAIT_FOR_PUTS; /* data must be copied out*/ } } } # endif #endif } static void _armci_rem_value(int op, void *src, void *dst, int proc, int bytes) { _armci_op_value(op,src,dst,proc,bytes,NULL); } /* non-blocking remote value put/get operation */ static void _armci_nb_rem_value(int op, void *src, void *dst, int proc, int bytes, armci_hdl_t *usr_hdl) { if(!usr_hdl) usr_hdl = (armci_hdl_t*)armci_set_implicit_handle(op,proc); _armci_op_value(op,src,dst,proc,bytes,usr_hdl); } #define CHK_ERR(dst, proc) \ if(dst==NULL) armci_die("ARMCI_PutValue: NULL pointer passed",FAIL); \ if(proc<0) armci_die("ARMCI_PutValue: Invalid process rank", proc); #define CHK_ERR_GET(src, dst, proc, bytes) \ if(src==NULL || dst==NULL) armci_die("ARMCI_GetValue: NULL pointer passed",FAIL); \ if(proc<0) armci_die("ARMCI_GetValue: Invalid process rank", proc); \ if(bytes<0) armci_die("ARMCI_GetValue: Invalid size", bytes); /** * Register-Originated Put. */ int PARMCI_PutValueInt(int src, void *dst, int proc) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(int *)dst = src; else _armci_rem_value(PUT, &src, dst, proc, sizeof(int)); return 0; } int PARMCI_PutValueLong(long src, void *dst, int proc) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(long *)dst = src; else _armci_rem_value(PUT, &src, dst, proc, sizeof(long)); return 0; } int PARMCI_PutValueFloat(float src, void *dst, int proc) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(float *)dst = src; else _armci_rem_value(PUT, &src, dst, proc, sizeof(float)); return 0; } int PARMCI_PutValueDouble(double src, void *dst, int proc) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(double *)dst = src; else _armci_rem_value(PUT, &src, dst, proc, sizeof(double)); return 0; } /** * Non-Blocking register-originated put. */ int PARMCI_NbPutValueInt(int src, void *dst, int proc, armci_hdl_t* usr_hdl) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(int *)dst = src; else _armci_nb_rem_value(PUT,&src,dst,proc,sizeof(int),usr_hdl); return 0; } int PARMCI_NbPutValueLong(long src, void *dst, int proc, armci_hdl_t* usr_hdl) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(long *)dst = src; else _armci_nb_rem_value(PUT,&src,dst,proc,sizeof(long),usr_hdl); return 0; } int PARMCI_NbPutValueFloat(float src, void *dst, int proc, armci_hdl_t* usr_hdl) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(float *)dst = src; else _armci_nb_rem_value(PUT,&src,dst,proc,sizeof(float),usr_hdl); return 0; } int PARMCI_NbPutValueDouble(double src, void *dst, int proc, armci_hdl_t* usr_hdl) { CHK_ERR(dst, proc); if( SAMECLUSNODE(proc) ) *(double *)dst = src; else _armci_nb_rem_value(PUT,&src,dst,proc,sizeof(double),usr_hdl); return 0; } /** * Register-Originated Get. */ int PARMCI_GetValueInt(void *src, int proc) { int dst; if (SAMECLUSNODE(proc)) return *(int *)src; else _armci_rem_value(GET, src, &dst, proc, sizeof(int)); return dst; } long PARMCI_GetValueLong(void *src, int proc) { long dst; if (SAMECLUSNODE(proc)) return *(long *)src; else _armci_rem_value(GET, src, &dst, proc, sizeof(long)); return dst; } float PARMCI_GetValueFloat(void *src, int proc) { float dst; if (SAMECLUSNODE(proc)) return *(float *)src; else _armci_rem_value(GET, src, &dst, proc, sizeof(float)); return dst; } double PARMCI_GetValueDouble(void *src, int proc) { double dst; if(SAMECLUSNODE(proc)) return *(double *)src; else _armci_rem_value(GET, src, &dst, proc, sizeof(double)); return dst; } ga-5-3/armci/src/ft/0000750005473000001440000000000012275260540013071 5ustar d3n000usersga-5-3/armci/src/ft/armci_chkpt.h0000640005473000001440000000245211444464075015540 0ustar d3n000users #ifndef _ARMCI_CHKPT_H #define _ARMCI_CHKPT_H #include "armci_storage.h" typedef struct{ void *ptr; size_t bytes; int saveonce; unsigned long *touched_page_arr; unsigned long num_touched_pages; unsigned long firstpage; unsigned long totalpages; unsigned long fileoffset; } armci_monitor_address_t; typedef struct{ FILE_DS fd; long startindex; int status; char *filename; } armci_file_info_t; typedef struct{ unsigned long num_touched_pages; unsigned long *touched_page_arr; unsigned long firstpage; unsigned long lastpage; }armci_page_info_t; typedef struct{ int rid; /*unique record id*/ int pid; /*id of the process*/ int rel_pid; /*group pid for the process*/ int tmp; /*for jmp_buf alignment*/ jmp_buf jmp; /*the jmp buffer for setjmp and longjmp*/ int ckpt_heap,ckpt_stack; #ifdef __ia64 armci_monitor_address_t bsp_mon; /*registerStack(backingStorePtr) monitor*/ #endif armci_monitor_address_t stack_mon,heap_mon; armci_monitor_address_t *user_addr; int user_addr_count; armci_file_info_t fileinfo; ARMCI_Group group; } armci_storage_record_t; #endif /* _ARMCI_CHKPT_H */ ga-5-3/armci/src/ft/armci_storage.h0000640005473000001440000000275111444464075016075 0ustar d3n000users#if HAVE_STDIO_H # include #endif #if HAVE_SETJMP_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_SYSCALL_H # include #endif #if HAVE_SYS_MMAN_H # include #endif #if HAVE_SYS_PARAM_H # include #endif #if HAVE_SYS_WAIT_H # include #endif #if HAVE_SIGNAL_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_FCNTL_H # include #endif #if HAVE_ERRNO_H # include #endif #if HAVE_DIRENT_H # include #endif #if HAVE_STDARG_H # include #endif #define FILE_DS FILE * FILE_DS armci_storage_fopen(char *filename); FILE_DS armci_storage_fopen_RONLY(char *filename); void armci_storage_fclose(FILE_DS filed); int armci_storage_read_ptr(FILE_DS file_d,void *ptr,size_t size,off_t ofs); int armci_storage_read_pages(FILE_DS file_d, unsigned long first_page, unsigned long *page_arr, unsigned long page_arr_sz,int pagesize, off_t ofs); int armci_storage_write_ptr(FILE_DS file_d,void *ptr,size_t size,off_t ofs); int armci_storage_write_pages(FILE_DS file_d, unsigned long first_page, unsigned long *page_arr, unsigned long page_arr_sz,int pagesize, off_t ofs); ga-5-3/armci/src/ft/armci_chkpt.c0000640005473000001440000011025511475575443015542 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /*interfaces for checkpointing */ /* TODO * work on the case if pagenum==firstpage or lastpage when writing pages */ #if HAVE_STDIO_H # include #endif #if HAVE_SETJMP_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_SYSCALL_H # include #endif #if HAVE_SYS_MMAN_H # include #endif #if HAVE_SYS_PARAM_H # include #endif #if HAVE_SYS_WAIT_H # include #endif #if HAVE_SIGNAL_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_FCNTL_H # include #endif #if HAVE_ERRNO_H # include #endif #if HAVE_DIRENT_H # include #endif #if HAVE_STDARG_H # include #endif #include #include "armcip.h" #include "message.h" #include "armci_chkpt.h" #define DEBUG 0 #define DEBUG_ 1 /*\ * ----------CORE FUNCTIONS ----------- * armci_init_checkpoint() - the checkpointing code is initialized * armci_icheckpoint_init() - called when with first checkpoint * armci_icheckpoint_finalize() - called when done with chkpt * armci_icheckpoint() - called every time we checkpoint * armci_recover() - called to recoved * ----------SUPPORT FUNCTIONS ----------- * armci_ckpt_pgfh() - pagefault handler, to set the list of dirty pages * armci_monitor_addr() - monitors address to look for and pages to set readonly * armci_create_record() - create the record for local part of data being stored * armci_protect_pages() - to protect pages in the dirty page list * armci_storage_read() - reads record from storage * armci_storage_write() - writes into storage * armci_storage_fopen() - opens a file in storage * \*/ /*\ global variables \*/ static armci_storage_record_t armci_storage_record[1001]; static int isheap; static int number_of_records=1; static int next_available_rid=0; static int mypagesize; int **armci_rec_ind; static armci_page_info_t armci_dpage_info; static int checkpointing_initialized=0; static int armci_recovering=0; static char *armci_ckpt_bspBottom=NULL; /* return the current position (index) of the ckpt file */ #define CURR_FILE_POS(rid) armci_storage_record[rid].fileinfo.startindex #define UPDATE_FILE_POS(rid,size) \ armci_storage_record[rid].fileinfo.startindex += (size) void ARMCI_Ckpt_create_ds(armci_ckpt_ds_t *ckptds, int count) { armci_create_ckptds(ckptds,count); } int ARMCI_Ckpt_init(char *filename, ARMCI_Group *grp, int savestack, int saveheap, armci_ckpt_ds_t *ckptds) { int rid; rid = armci_icheckpoint_init(filename,grp,savestack,saveheap,ckptds); return(rid); } int ARMCI_Ckpt(int rid) { return(armci_icheckpoint(rid)); } void ARMCI_Ckpt_Recover(int rid, int iamreplacement) { armci_irecover(rid, iamreplacement); } void ARMCI_Ckpt_finalize(int rid) { armci_icheckpoint_finalize(rid); } /* ----------SUPPORT FUNCTIONS ----------- */ /* This function is called from ARMCI sigv and sigbus handler */ int armci_ckpt_pgfh(void *addr, int errno, int fd) { char *paddr; unsigned long pagenum; /*find the page number and the corresponding page aligned address*/ pagenum = (unsigned long)((long)addr/mypagesize); paddr = (char*)(pagenum*mypagesize); if(DEBUG)printf("%d:paddr=%p addr=%p %lu\n",armci_me,paddr,addr,pagenum); /*page is being touched change page permission to READ/WRITE*/ mprotect(paddr, mypagesize, PROT_READ | PROT_WRITE); /*mark pagenumber dirty in dirty page array*/ armci_dpage_info.touched_page_arr[armci_dpage_info.num_touched_pages++] = pagenum; if(pagenumarmci_dpage_info.lastpage) armci_dpage_info.lastpage = pagenum; #if 1 printf("%d: armci_ckpt_pgfh(): num_touched_pages = %ld\n",armci_me,armci_dpage_info.num_touched_pages);fflush(stdout); #endif return(0); } #if 0 printf("%d:pagenum=%d first=%d last=%d\n",armci_me,pagenum,armci_storage_record[i].firstpage,(armci_storage_record[i].firstpage+armci_storage_record[i].totalpages));fflush(stdout); #endif static int armci_create_record(ARMCI_Group *group, int count) { int recind; int relprocid; int rc; rc = ARMCI_Group_rank(group,&relprocid); /*create and broadcast new index in the records data structure*/ next_available_rid = 0; if(next_available_rid==0){ if(relprocid==0) ARMCI_Rmw(ARMCI_FETCH_AND_ADD,&recind,armci_rec_ind[0],1,0); } else recind=next_available_rid; armci_msg_group_bcast_scope(SCOPE_ALL,&recind,sizeof(int),0,group); if(recind>1001) armci_die("create_record, failure",recind); armci_storage_record[recind].pid = armci_me; armci_storage_record[recind].rid = recind; armci_storage_record[recind].rel_pid = relprocid; memcpy(&armci_storage_record[recind].group,group,sizeof(ARMCI_Group)); if(count!=0) armci_storage_record[recind].user_addr = (armci_monitor_address_t *)malloc(sizeof(armci_monitor_address_t)*count); armci_storage_record[recind].user_addr_count=count; if(next_available_rid!=0) next_available_rid = 0; else number_of_records++; return(recind); } static void armci_protect_pages(unsigned long startpagenum,unsigned long numpages) { char *addr; addr =(char *)((unsigned long)(startpagenum*mypagesize)); mprotect(addr, mypagesize*numpages,PROT_READ); if(DEBUG)printf("%d:protecting address %p %ld\n",armci_me,addr,mypagesize*numpages); } /* CHECK: This is a temporary function - remove later. Then make sure remove * the ifdef CHECKPOINT2 in armci_init_checkpoint(). Note this should be * called inside main(int argc, char **argv), I guess ... */ void armci_init_checkpoint2() { printf("%d:in armci init checkpoint2\n",armci_me);fflush(stdout); #ifdef __ia64 /* get backing store bottom */ asm("mov %0=ar.bsp": "=r"(armci_ckpt_bspBottom)); printf("%d: armci_ckpt_bspBottom=%p\n", armci_me, armci_ckpt_bspBottom); #endif } /*\ ----------CORE FUNCTIONS ----------- \*/ /*called in armci init*/ int armci_init_checkpoint(int spare) { int rc; extern void ARMCI_Register_Signal_Handler(int sig, void (*func)()); extern void armci_create_ft_group(); #ifdef CHECKPOINT2 printf("%d:in armci init checkpoint\n",armci_me);fflush(stdout); #ifdef __ia64 /* get backing store bottom */ asm("mov %0=ar.bsp": "=r"(armci_ckpt_bspBottom)); printf("%d: armci_ckpt_bspBottom=%p\n", armci_me, armci_ckpt_bspBottom); #endif #endif mypagesize = getpagesize(); if(checkpointing_initialized)return(0); /* malloc for record index */ armci_rec_ind = (int **)malloc(sizeof(int *)*armci_nproc); if(armci_me==0){ rc = ARMCI_Malloc((void **)armci_rec_ind, 2*sizeof(int)); armci_rec_ind[armci_me][0]=armci_rec_ind[armci_me][1]=1; } else rc = ARMCI_Malloc((void **)armci_rec_ind, 0); assert(rc==0); ARMCI_Register_Signal_Handler(SIGSEGV,(void *)armci_ckpt_pgfh); armci_dpage_info.touched_page_arr = (unsigned long *)malloc(sizeof(unsigned long)*100000); armci_dpage_info.num_touched_pages=armci_dpage_info.lastpage=0; armci_dpage_info.firstpage = 99999999; armci_create_ft_group(spare); checkpointing_initialized = 1; return(0); } void armci_create_ckptds(armci_ckpt_ds_t *ckptds, int count) { printf("%d:in armci_create_ckptds with count=%d\n",armci_me,count);fflush(stdout); ckptds->count=count; ckptds->ptr_arr=(void **)malloc(sizeof(void *)*(count+1)); ckptds->sz=(size_t *)malloc(sizeof(size_t)*(count+1)); ckptds->saveonce=(int *)calloc((count+1),sizeof(int)); if( ckptds->saveonce==NULL || ckptds->ptr_arr==NULL || ckptds->sz == NULL ) armci_die("malloc failed in armci_create_ckptds",count); } void armci_free_ckptds(armci_ckpt_ds_t *ckptds) { free(ckptds->ptr_arr); free(ckptds->sz); } static void armci_create_protect_pages(armci_monitor_address_t *addrds, void *ptr, unsigned long bytes,int callprotect) { unsigned long laddr; unsigned long totalpages; unsigned long j; addrds->ptr=(void *)(ptr); addrds->bytes = bytes; laddr = (unsigned long)(addrds->ptr); addrds->firstpage = (unsigned long)((unsigned long)laddr/mypagesize); if(laddr%mypagesize ==0){ totalpages = (int)(bytes/mypagesize); if(bytes%mypagesize)totalpages++; } else { int shift; shift = mypagesize - laddr%mypagesize; if(DEBUG);{ printf("%d:shift=%d bytes=%ld\n",armci_me,shift,bytes); fflush(stdout); } if(bytestotalpages = totalpages; addrds->num_touched_pages = totalpages; addrds->touched_page_arr = malloc(totalpages*sizeof(unsigned long)); if(addrds->touched_page_arr==NULL) armci_die("malloc failed in armci_icheckpoint_init",totalpages); addrds->touched_page_arr[0]=addrds->firstpage; for(j=1;jtouched_page_arr[j]=addrds->touched_page_arr[j-1]+1; } if(DEBUG);{ printf("%d: addrds=%p first=%lu total=%lu laddr=%lu (%p)\n",armci_me, addrds, addrds->firstpage, addrds->totalpages, laddr, (void*)laddr); fflush(stdout); } if(callprotect){ if(isheap) armci_protect_pages(addrds->firstpage+16,addrds->totalpages); else armci_protect_pages(addrds->firstpage,addrds->totalpages); } } /*called everytime a new checkpoint record is created*/ int armci_icheckpoint_init(char *filename,ARMCI_Group *grp, int savestack, int saveheap, armci_ckpt_ds_t *ckptds) { int rid; int i=0; char line[256],tmpfilename[100]; unsigned long databottom; FILE *fp; printf("%d:in armci ckpt init\n",armci_me);fflush(stdout); if(DEBUG && ckptds!=NULL) printf("%d:ckptdscount=%d\n",armci_me,ckptds->count); /*create the record*/ if(ckptds!=NULL) rid = armci_create_record(grp,ckptds->count); else rid = armci_create_record(grp,0); if(DEBUG) printf("%d:got rid = %d\n",armci_me,rid);fflush(stdout); armci_storage_record[rid].ckpt_heap = saveheap; armci_storage_record[rid].ckpt_stack = savestack; /*open the file for reading and writing*/ if(filename == NULL){ filename = (char *)malloc(sizeof(char)*(11+1+6+1+4)); if(filename==NULL)armci_die("alloc for filename failed",11+1+6+1+4); sprintf(filename,"%s","armci_chkpt_"); sprintf((filename+strlen(filename)),"%d",armci_me); sprintf((filename+strlen(filename)),"%s","_"); sprintf(filename+strlen(filename),"%d",rid); } armci_storage_record[rid].fileinfo.filename = malloc(sizeof(char)*strlen(filename)); if(NULL==armci_storage_record[rid].fileinfo.filename) armci_die("malloc failed for filename in ga_icheckpoint_init",0); strcpy(armci_storage_record[rid].fileinfo.filename,filename); armci_storage_record[rid].fileinfo.fd = armci_storage_fopen(filename); armci_storage_record[rid].fileinfo.startindex = 0; /* initialize */ if(DEBUG){printf("filename=%s\n",filename);fflush(stdout);} sprintf(tmpfilename, "/proc/%d/maps",getpid()); fp=fopen(tmpfilename, "r"); if (fp == NULL){ armci_die("couldnt find dseg base",getpid()); } if(armci_storage_record[rid].ckpt_stack){ unsigned long stackbottom; char *start,*end,*tmp; armci_monitor_address_t *addrds =&armci_storage_record[rid].stack_mon; do { fgets(line, 255, fp); } while ( line[0] != '6' ); sscanf(line, "%p", (void**)&databottom); printf("%p databot\n",(char *)databottom); # ifdef KERNEL_2_4 do { start = fgets(line, 255, fp); } while(start != NULL); # else /* KERNEL_2_6 */ { char tmpline[256]; do { strncpy(line, tmpline, 256); start = fgets(tmpline, 255, fp); } while(tmpline[0] == '6'); } # endif start = strstr(line, "-") + 1; if(DEBUG);{printf("stack top=%s\n",start);fflush(stdout);} end = strstr(line, " "); *end = 0; sscanf(start, "%p", (void**)&stackbottom); addrds->ptr = (void *)(stackbottom); } if(armci_storage_record[rid].ckpt_heap){ char *datatop; armci_monitor_address_t *addrds =&armci_storage_record[rid].heap_mon; datatop=(char *)sbrk(0); if(!armci_storage_record[rid].ckpt_stack){ do { fgets(line, 255, fp); } while ( line[0] != '6' ); sscanf(line, "%p", (void**)&databottom); } printf("%d:databot=%p datatop=%p %ld %p %p\n",armci_me,(void*)databottom,datatop,(unsigned long)((char *)datatop-(char *)databottom),&armci_storage_record[rid].jmp, &addrds); isheap = 1; printf("I'm here 1\n"); fflush(stdout); armci_create_protect_pages(addrds,(void *)databottom,(unsigned long)((char *)datatop-(char *)databottom),1); printf("I'm here 1a\n"); fflush(stdout); isheap = 0; mprotect(armci_storage_record,sizeof(armci_storage_record_t)*1000, PROT_READ | PROT_WRITE); mprotect(&armci_recovering,sizeof(int), PROT_READ | PROT_WRITE); mprotect(&armci_dpage_info,sizeof(armci_page_info_t), PROT_READ | PROT_WRITE); mprotect(armci_dpage_info.touched_page_arr,sizeof(unsigned long)*99999999, PROT_READ | PROT_WRITE); printf("I'm here 2\n"); fflush(stdout); } else { if(ckptds!=NULL) for(i=0;icount;i++){ armci_monitor_address_t *addrds =&armci_storage_record[rid].user_addr[i]; addrds->saveonce = ckptds->saveonce[i]; if(addrds->saveonce) armci_create_protect_pages(addrds,ckptds->ptr_arr[i],ckptds->sz[i],0); else armci_create_protect_pages(addrds,ckptds->ptr_arr[i],ckptds->sz[i],1); } } if(DEBUG){printf("%d:completed init\n",armci_me);fflush(stdout);} return(rid); } int armci_create_touchedpagearray(unsigned long *tpa,unsigned long firstpage, unsigned long totalpages){ unsigned long i,j=0; printf("In armci_create_touchedpagearray(): armci_dpage_info.num_touched_page=%ld\n", armci_dpage_info.num_touched_pages); tpa = (unsigned long *)malloc(sizeof(unsigned long)*armci_dpage_info.num_touched_pages); for(i=0;i=firstpage || armci_dpage_info.touched_page_arr[i] < (firstpage+totalpages)){ tpa[j]=armci_dpage_info.touched_page_arr[i]; j++; } } armci_dpage_info.num_touched_pages=0; return(j); } /* CHECK: put all the defines here in the armci_chpt.h header or in some * meaningful header*/ /* returns the stack head address. SP register contains this address. We save some EXTRA_SPACE as there may be some space used below the current SP */ #define EXTRA_STACK_SPACE (1 << 11) #define TMP_STACK_SIZE (1 << 12) /* CHECK: 4K is enough, I guess */ #ifndef JB_SP #define JB_SP 0 #endif #define EST_OFFSET 100 #define ARMCI_STACK_VERIFY 1234 #define STACK_TOP ((unsigned long)((unsigned long)(&dummy_first) - EST_OFFSET)) #if 0 static char* stack_head_addr() { jmp_buf tmp_j; setjmp(tmp_j); return ((char*) ((tmp_j->__jmpbuf[JB_SP] - EXTRA_STACK_SPACE) & (~PAGE_SIZE)) ); } /* to get the stack pointer */ unsigned long get_esp() { __asm__(" movl %esp,%eax "); } #endif void what_is_going_on() { int a; printf("what_is_going_on(): a=%p\n", &a); } /* In IA64, there is a seperate stack called register stack engine (RSE, contains 96 registers) to manage across functions calls (e.g. these registers stores the function return address, etc.. In order to save this info, flush the stack registers to backing store and save backing store. NOTE: backing store is a cache to register stack. */ #if defined(__ia64) static void armci_ckpt_write_backstore(int rid) { char *bspTop; /* in IA64 only, back store pointer (bsp) */ off_t ofs; /* flush the register stack */ asm("flushrs"); /* getting back store pointer (bsp). BSP is similar to stack pointer, * which points to the top of backing store */ asm("mov %0=ar.bsp": "=r"(bspTop)); printf("BSP Pointer (ar.bsp) = %p\n", bspTop); armci_storage_record[rid].bsp_mon.ptr = armci_ckpt_bspBottom; armci_storage_record[rid].bsp_mon.bytes=((unsigned long)(bspTop) - (unsigned long)(armci_ckpt_bspBottom)); ofs=CURR_FILE_POS(rid); UPDATE_FILE_POS(rid, armci_storage_record[rid].bsp_mon.bytes); armci_storage_record[rid].bsp_mon.fileoffset = ofs; printf("%d: Save Backing store: %p to %p (bytes=%ld: off=%ld)\n\n",armci_me, armci_ckpt_bspBottom, armci_ckpt_bspBottom+armci_storage_record[rid].bsp_mon.bytes, armci_storage_record[rid].bsp_mon.bytes, ofs);fflush(stdout); armci_storage_write_ptr(armci_storage_record[rid].fileinfo.fd, armci_storage_record[rid].bsp_mon.ptr, armci_storage_record[rid].bsp_mon.bytes, armci_storage_record[rid].bsp_mon.fileoffset); } #endif static void armci_ckpt_write_stack(int rid) { int dummy_first=ARMCI_STACK_VERIFY; char *top=NULL; off_t ofs = 0; int dummy_last=ARMCI_STACK_VERIFY; /* top = stack_head_addr(); */ top = (char*)STACK_TOP; armci_storage_record[rid].stack_mon.bytes=(unsigned long)(armci_storage_record[rid].stack_mon.ptr)-((unsigned long)(top)); ofs=CURR_FILE_POS(rid); UPDATE_FILE_POS(rid, armci_storage_record[rid].stack_mon.bytes); armci_storage_record[rid].stack_mon.fileoffset = ofs; printf("%d: ptr = %p\n",armci_me,armci_storage_record[rid].stack_mon.ptr); printf("%d: Save stack: %p to %p (bytes=%ld : off=%ld)\n\n",armci_me, top, top+armci_storage_record[rid].stack_mon.bytes, armci_storage_record[rid].stack_mon.bytes, ofs);fflush(stdout); armci_storage_write_ptr(armci_storage_record[rid].fileinfo.fd,top, armci_storage_record[rid].stack_mon.bytes, armci_storage_record[rid].stack_mon.fileoffset); #if defined(__ia64) /* In IA64, write Backing Store, as it is the cache for Stack Registers */ armci_ckpt_write_backstore(rid); #endif } static void armci_ckpt_write_heap(int rid) { int j; off_t ofs = 0; char *addr=NULL; armci_monitor_address_t *addrds =&armci_storage_record[rid].heap_mon; addr = sbrk(0); ofs=CURR_FILE_POS(rid); /* UPDATE_FILE_POS(rid, armci_storage_record[rid].heap_mon.bytes); */ armci_storage_record[rid].heap_mon.fileoffset = ofs; if(addr > (char *)armci_storage_record[rid].heap_mon.ptr){ /*this means change in data segment - save what ever is new and reset size*/ void *tmpaddr = addrds->ptr; void *tmpaddr1 = (void *)((char *)addrds->ptr+addrds->bytes); unsigned long firstpage = addrds->firstpage; unsigned long totalpages = addrds->totalpages; /*first save new pages*/ ofs=(off_t)(armci_storage_record[rid].heap_mon.fileoffset+totalpages*mypagesize); /*problem here - remove mallocs*/ isheap = 1; armci_create_protect_pages(addrds,tmpaddr1,(addr-(char *)tmpaddr1),1); isheap = 0; printf("%d: Hello 1\n", armci_me); armci_storage_write_pages(armci_storage_record[rid].fileinfo.fd,addrds->firstpage,addrds->touched_page_arr,addrds->num_touched_pages,mypagesize,ofs); /*now write the touched pages*/ addrds->ptr = tmpaddr; addrds->bytes = addr-(char *)tmpaddr; addrds->firstpage = firstpage; /*problem here if last data seg addr is not a page boundary*/ addrds->totalpages+=totalpages; } /*write touched pages since*/ ofs=(off_t)(armci_storage_record[rid].heap_mon.fileoffset); addrds->num_touched_pages = armci_create_touchedpagearray(addrds->touched_page_arr,addrds->firstpage,addrds->totalpages); printf("%d: Hello 2\n", armci_me); /*problem here - remove mallocs*/ if(addrds->num_touched_pages!=0) addrds->num_touched_pages = armci_create_touchedpagearray(addrds->touched_page_arr,addrds->firstpage,addrds->totalpages); printf("%d: Hello 3: %ld %p %ld %d %ld\n", armci_me,addrds->firstpage,addrds->touched_page_arr,addrds->num_touched_pages,mypagesize,ofs); armci_storage_write_pages(armci_storage_record[rid].fileinfo.fd,addrds->firstpage,addrds->touched_page_arr,addrds->num_touched_pages,mypagesize,ofs); printf("%d: Hello 3a\n", armci_me); for(j=0;jnum_touched_pages;j++){ addr =(char *)(addrds->touched_page_arr[j]*mypagesize); mprotect(addr, mypagesize,PROT_READ); } printf("%d: Hello 4\n", armci_me); } static void armci_ckpt_write_data(int rid) { int i,j; off_t ofs=0; char *addr=NULL; printf("%d: armci_ckpt_write_data(): Saving data ...\n", armci_me); for(i=0;ifileoffset = ofs; /*if(addrds->num_touched_pages!=0) CHECK this... */ addrds->num_touched_pages = armci_create_touchedpagearray(addrds->touched_page_arr,addrds->firstpage,addrds->totalpages); printf("%d: DATA:[i=%d] addrds=%p off=%ld size=%ld (#ofPages=%ld total=%ld pagesize=%d)\n", armci_me, i, addrds, addrds->fileoffset, addrds->num_touched_pages*mypagesize, addrds->num_touched_pages, addrds->totalpages, mypagesize); armci_storage_write_pages(armci_storage_record[rid].fileinfo.fd,addrds->firstpage,addrds->touched_page_arr,addrds->num_touched_pages,mypagesize,ofs); for(j=0;jnum_touched_pages;j++){ addr =(char *)(addrds->touched_page_arr[j]*mypagesize); mprotect(addr, mypagesize,PROT_READ); } /* CHECK: should I uncomment this ? check it out! bzero(addrds->touched_page_arr, sizeof(unsigned long)*addrds->num_touched_pages); addrds->num_touched_pages = 0; */ /* update the file offset */ UPDATE_FILE_POS(rid, addrds->bytes); } } static void armci_ckpt_write_rid(int rid) { } /*get the list of changed pages from touched_page_array and rewrite the * changed pages*/ int armci_icheckpoint(int rid) { int rc=ARMCI_CKPT; off_t ofs; if(DEBUG);{ printf("%d: in checkpoint rid=%d %p\n",armci_me,rid,&armci_recovering);fflush(stdout); } if(armci_storage_record[rid].ckpt_stack || armci_storage_record[rid].ckpt_heap) { #if defined(__ia64) { char *tmp_bsp; /* flush the register stack */ asm("flushrs"); /* get the top of backing store */ asm("mov %0=ar.bsp": "=r"(tmp_bsp)); printf("tmp: ar.bsp = %p\n", tmp_bsp); } #endif if((armci_recovering=setjmp(armci_storage_record[rid].jmp))==0){ /* 1. file offsets */ armci_storage_record[rid].fileinfo.startindex = 0; ofs=CURR_FILE_POS(rid); UPDATE_FILE_POS(rid,sizeof(jmp_buf)); /* 1a. save jmp buffer env */ printf("%d: Save jmp_buf: %p to %p (bytes=%ld : off=%ld)\n\n",armci_me, &armci_storage_record[rid].jmp, &armci_storage_record[rid].jmp+armci_storage_record[rid].stack_mon.bytes, sizeof(jmp_buf), ofs);fflush(stdout); armci_storage_write_ptr(armci_storage_record[rid].fileinfo.fd, &armci_storage_record[rid].jmp, sizeof(jmp_buf), ofs); /* 2. save stack */ printf("%d: Saving stack\n", armci_me); if(armci_storage_record[rid].ckpt_stack){ armci_ckpt_write_stack(rid); } /* 3. save data segment (entire heap (or) user specified data ) */ if(armci_storage_record[rid].ckpt_heap) armci_ckpt_write_heap(rid); else armci_ckpt_write_data(rid); /* 4. CHECK: sync file system, thus data is flushed to disk */ /* armci_storage_fsync(armci_storage_record[rid].fileinfo.fd); */ /* 5. TODO: save the record index in the file. Caution: there are mallocs in the structure. beware. */ armci_ckpt_write_rid(rid); } else { /*long jump brings us here */ /* CHECK: open the ckpt files*/ printf("long jump brought us here. Performed Recovery..\n"); printf("address(rid)=%p address(rc)=%p\n", &rid, &rc); what_is_going_on(); printf("rid=%d address(rid)=%p\n", rid, &rid); rc = ARMCI_RESTART; } } else{ armci_ckpt_write_data(rid); } armci_msg_group_barrier(&armci_storage_record[rid].group); printf("%d: After Barrier\n", armci_me); return(rc); } /** * Recover Backing Store. */ #if defined(__ia64) static void armci_recover_backstore(int rid) { off_t offset = armci_storage_record[rid].bsp_mon.fileoffset; size_t size = armci_storage_record[rid].bsp_mon.bytes; char *bspTop = (char*)((unsigned long)(armci_storage_record[rid].bsp_mon.ptr) + size); char *bsp; asm("flushrs"); asm("mov %0=ar.bsp": "=r"(bsp)); /* CHECK: expand the backing store so that the current backing store is replaced with saved backing store (CHECK: register stack can be as large as 96 registers, so 96*8 bytes) */ if( (unsigned long)bsp < (unsigned long)(bspTop + 96*8 + EST_OFFSET) ) { armci_recover_backstore(rid); } else{ printf("%d: armci_recover_backstore(): size=%ld offset=%ld backing store: %p to %p\n", armci_me, size, offset, bspTop, armci_storage_record[rid].bsp_mon.ptr); armci_storage_read_ptr(armci_storage_record[rid].fileinfo.fd, bspTop, size, offset); printf("%d: armci_recover_backstore(): rid=%d\n", armci_me, rid); /* CHECK: Is there a way to verify backing store recovery (similar to stack) */ } /** * CHECK: Do nothing here. Recursive function in action. */ } #endif /** * Recover stack: restore a saved stack by overwriting the current stack * of this process . The idea of restoring the stack is, we are going to * replace the contents of current stack, so that longjmp is legitimate. */ #if 0 static void armci_recover_stack(int rid) { off_t offset = sizeof(jmp_buf)+4*sizeof(int); size_t size = armci_storage_record[rid].stack_mon.bytes; char *stacktop = (char*)((unsigned long)(armci_storage_record[rid].stack_mon.ptr) - size); int dummy; printf("check=%p %p; rid=%d\n", &dummy, &offset, rid); /* CHECK: check whether current stack frame is above the old (saved) stack. If so, the recover the stack, else call thus recursively until the current stack is above the old stack */ if( (unsigned long)&dummy >= (unsigned long)(stacktop-EST_OFFSET) ) { armci_recover_stack(rid); } else { printf("%d: armci_recover_stack(): size=%ld offset=%ld stack: %p to %p\n", armci_me, size, offset, stacktop, armci_storage_record[rid].stack_mon.ptr); armci_storage_read_ptr(armci_storage_record[rid].fileinfo.fd, stacktop, size, offset); { /* verify stack recovery */ int dummy = *((int*)(stacktop+EST_OFFSET)); if(dummy != ARMCI_STACK_VERIFY) { printf("WARNING: armci_recover_stack FAILED: %d", dummy); armci_die("armci_recover_stack FAILED", dummy); } else if(DEBUG_) printf("%d: armci_recover_stack SUCCESS (%d)\n", armci_me, dummy); } #ifdef __ia64 /* recover the backing store (BSP) */ armci_recover_backstore(rid); #endif } /** * CHECK: Do nothing here...recursive function in action here.. */ } #endif static void armci_recover_memory(int rid) { int dummy; off_t ofs; size_t stacksize = armci_storage_record[rid].stack_mon.bytes; char *stacktop = (char*)((unsigned long)(armci_storage_record[rid].stack_mon.ptr) - stacksize); #ifdef __ia64 size_t bspsize = armci_storage_record[rid].bsp_mon.bytes; char *bspTop = (char*)((unsigned long)(armci_storage_record[rid].bsp_mon.ptr) + bspsize); char *bsp; #endif printf("armci_recover_stack(): check=%p ; rid=%d\n", &dummy, rid); /* call recursively until current stack is above saved stack */ if( (unsigned long)&dummy >= (unsigned long)(stacktop-EST_OFFSET) ) armci_recover_memory(rid); #ifdef __ia64 asm("flushrs"); asm("mov %0=ar.bsp": "=r"(bsp)); printf("armci_recover_bsp(): check=%p ; rid=%d\n", &dummy, rid); /* similarly, call recursively until current backing store expands (register stack can be as large as 96 registers) */ if( (unsigned long)bsp < (unsigned long)(bspTop + 97*8) ) armci_recover_memory(rid); #endif /* ------------------ recover stack segment ------------------- */ printf("%d: armci_recover_stack(): fp=%p size=%ld off=%ld stack: %p to %p\n", armci_me, armci_storage_record[rid].fileinfo.fd, stacksize, armci_storage_record[rid].stack_mon.fileoffset, stacktop, armci_storage_record[rid].stack_mon.ptr); armci_storage_read_ptr(armci_storage_record[rid].fileinfo.fd, stacktop, stacksize, armci_storage_record[rid].stack_mon.fileoffset); { /* verify stack recovery */ int dummy = *((int*)(stacktop+EST_OFFSET)); if(dummy != ARMCI_STACK_VERIFY) { printf("WARNING: armci_recover_stack FAILED: %d", dummy); armci_die("armci_recover_stack FAILED", dummy); } else if(DEBUG_) printf("%d: armci_recover_stack SUCCESS (%d)\n", armci_me, dummy); } /* -------- recover register stack (RSE) segment (IA64 only) -------- */ #ifdef __ia64 { size_t bspsize = armci_storage_record[rid].bsp_mon.bytes; char *bspTop = (char*)((unsigned long)(armci_storage_record[rid].bsp_mon.ptr) + bspsize); bsp = (char*)armci_storage_record[rid].bsp_mon.ptr; /* CHECK: */ printf("%d: armci_recover_backstore(): size=%ld off=%ld backing store: %p to %p\n", armci_me, bspsize, armci_storage_record[rid].bsp_mon.fileoffset, armci_storage_record[rid].bsp_mon.ptr, bspTop); armci_storage_read_ptr(armci_storage_record[rid].fileinfo.fd, bsp, bspsize, armci_storage_record[rid].bsp_mon.fileoffset); printf("%d: armci_recover_backstore(): rid=%d\n", armci_me, rid); /* CHECK: Is there a way to verify backing store recovery (similar to stack) */ } #endif ofs=0; /* jmp_buf is the first one to be stored in ckpt file, so ofs=0 */ printf("%d: armci_recover jmp_buf(): size=%ld off=%ld (%p to %p)\n", armci_me, sizeof(jmp_buf), ofs, &armci_storage_record[rid].jmp, (char*)(&armci_storage_record[rid].jmp)+sizeof(jmp_buf)); armci_storage_read_ptr(armci_storage_record[rid].fileinfo.fd, &armci_storage_record[rid].jmp, sizeof(jmp_buf), ofs); armci_msg_group_barrier(&armci_storage_record[rid].group); printf("%d: restoring original stack starts @ %p\n", armci_me, (void*)armci_storage_record[rid].jmp->__jmpbuf[JB_SP]); longjmp(armci_storage_record[rid].jmp,1);/*goto the restored stack*/ } static void armci_recover_stack(int rid, char *filename) { armci_recover_memory(rid); } static void armci_recover_heap(int rid, char *filename) { /* TODO: restore heap */ } static void armci_recover_data(int rid, char *filename) { int i,j; printf("%d: armci_recover_data(): rid=%d\n", armci_me, rid); for(i=0;iptr, addrds->bytes, addrds->fileoffset); armci_storage_read_pages(armci_storage_record[rid].fileinfo.fd, addrds->firstpage, addrds->touched_page_arr, addrds->num_touched_pages, mypagesize, addrds->fileoffset); } } int armci_irecover_NEW(int rid,int iamreplacement) { /* CHECK: do you need to fille rest of fileinfo like name, startindex? */ char *filename = armci_storage_record[rid].fileinfo.filename; sprintf(filename,"%s","armci_chkpt_"); sprintf((filename+strlen(filename)),"%d",armci_me); sprintf((filename+strlen(filename)),"%s","_"); sprintf(filename+strlen(filename),"%d",rid); printf("\n%d: Starting recovery...\n", armci_me); printf("%d: filename = %s\n", armci_me, filename); if(armci_storage_record[rid].ckpt_heap) { armci_recover_heap(rid,filename); } else { armci_recover_data(rid, filename); } /* stack should be the last thing recovered, as it calls longjmp() */ if(armci_storage_record[rid].ckpt_stack) armci_recover_stack(rid,filename); /*we should never come here things are hosed */ armci_die("recovery hosed",0); return(1); } int armci_irecover(int rid,int iamreplacement) { armci_irecover_NEW(rid, iamreplacement); return 1; } #if 0 static int tmpStack[TMP_STACK_SIZE]; int armci_irecover_OLD(int rid,int iamreplacement) { int rc; jmp_buf jmp; /* Save "rid" and "iamreplacement" in a global variable as we are going to replace the contents of the current stack. */ RID = rid; /* CHECK: save rid in a file or somewhere instead of * global variable*/ tmp_iamreplacement = iamreplacement; #if 0 /* create a temporary stack */ rc = _setjmp(jmp); if (rc == 0) { /* Goto a temporary stack as we still running on the original stack. To do this, update Stack Pointer (SP) to be in a temp stack area. */ jmp->__jmpbuf[JB_SP] = ((long)((char *)(tmpStack + TMP_STACK_SIZE) - EXTRA_STACK_SPACE) & ~0xf); printf("%d: temporary stack starts @ %p\n", armci_me, jmp->__jmpbuf[JB_SP]); /* CHECK: make this TMP_STACK_SIZE dynamic, by measuring the size of the stack from file */ /* * Jump back ... * But with new 'jmp' */ _longjmp(jmp, 1); } else #endif { /** * Now we are on temporary stack. So it is safe to recover stack. */ armci_recover_stack(RID); /** * go to the restored stack by calling longjmp(). Read jmpbuf from file */ if(tmp_iamreplacement){ /* CHECK: what is iamreplacement */ rc=armci_storage_read_ptr(armci_storage_record[RID].fileinfo.fd,&armci_storage_record[RID].jmp,sizeof(jmp_buf),4*sizeof(int)); } armci_msg_group_barrier(&armci_storage_record[RID].group); printf("%d: restoring original stack starts @ %p\n", armci_me, armci_storage_record[RID].jmp->__jmpbuf[JB_SP]); longjmp(armci_storage_record[RID].jmp,1);/*goto the restored stack*/ } /*we should never come here things are hosed */ armci_die2("recovery hosed",RID,iamreplacement); return(1); } #endif void armci_icheckpoint_finalize(int rid) { int i; armci_msg_group_barrier(&armci_storage_record[rid].group); for(i=0;itouched_page_arr); } free(armci_storage_record[rid].user_addr); free(armci_storage_record[rid].fileinfo.filename); armci_storage_fclose(armci_storage_record[rid].fileinfo.fd); next_available_rid = rid; } /* TODO: 1. organize all the $ifdef __ia64's properly..They are scattered all over and it is difficult to track down and potentially buggy 2. checkpoint shared memory and mmap regions 3. I/O file open/close, signals and other system specific stuff ??? 4. memory leaks due to malloc()....free'em */ ga-5-3/armci/src/ft/armci_storage.c0000640005473000001440000000741711444464075016074 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_SYSCALL_H # include #endif #if HAVE_SIGNAL_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_FCNTL_H # include #endif #if HAVE_ERRNO_H # include #endif #if HAVE_STDARG_H # include #endif #include "armci_storage.h" extern int armci_me; extern void armci_die(char *msg, int code); #define DEBUG 0 FILE_DS armci_storage_fopen(char *filename) { FILE_DS file_d; remove ( filename ); file_d = fopen(filename,"w+"); if(file_d==NULL) armci_die("armci_storage_fopen(): cannot open file",0); if(DEBUG); printf("\n%d:filed=%p %s\n",armci_me,file_d,filename); return(file_d); } FILE_DS armci_storage_fopen_RONLY(char *filename) { FILE_DS file_d; file_d = fopen(filename,"r"); if(file_d==NULL) armci_die("armci_storage_fopen_RONLY():cannot open file",0); if(DEBUG); printf("\n%d:filed=%p %s\n",armci_me,file_d,filename); return(file_d); } void armci_storage_fclose(FILE_DS filed) { int rc = fclose(filed); if(rc!=0)armci_die("armci_storage_fclose(): cannot close file",0); } int armci_storage_read_ptr(FILE_DS file_d,void *ptr,size_t size,off_t ofs) { int rc=0,orc=0,isize=size; if(isize<0) armci_die("armci_storage_read_ptr(): Invalid size(<0)", isize); rc = fseek(file_d,ofs,SEEK_SET); if(rc)armci_die("fseek failed in armci_storage_read_ptr",rc); while(orc!=isize){ printf("ptr=%p ofs=%ld size=%ld filed=%p\n", ptr,ofs,size,file_d); rc = fread(ptr,1,size,file_d); if(!rc) armci_die("armci_storage_read_ptr(): fread failed",0); orc+=rc; if(DEBUG); printf("\n%d:read %d so far of %d\n",armci_me,orc,isize); if(orc!=isize){ ptr+=rc; size-=rc; } } rc = fseek(file_d,0,SEEK_SET); if(rc)armci_die("fseek failed in armci_storage_read_ptr",rc); return 0; } int armci_storage_read_pages(FILE_DS file_d, unsigned long first_page, unsigned long *page_arr, unsigned long page_arr_sz,int pagesize, off_t ofs) { int i,rc=0; /*this can be heavily optimized*/ for(i=0;i #define LOCKED 1 /* spinlock is locked */ #define UNLOCKED 0 /* spinlock is free */ #define LOCK_ERROR 2 /* spinlock is in a bad state */ /* Memory fence to be used, when consistency needs to be * guaranteed. */ #define MEMORY_FENCE _Asm_mf() /* Compile fence that can be used to make sure that the * compiler does not reorder memory operations around the * fence */ #define COMP_FENCE _Asm_fence(_UP_MEM_FENCE | _DOWN_MEM_FENCE) /* get_lock attempts to quickly get a spoinlock by doing a * atomic 'xchg' on the word containing the lock * If the lock attempt is successfull, the value * 'LOCKED' will be returened, indicating that thie lock * is now loked to me, the calling process * * Note, that the 'xchg' instruction will blindly set the * memory location to the 'LOCKED' state, even if the * lock word contains an illegal value! * * The xchg instruction always has the 'acquire' semantics, * so the necessary memory ordering is enforced by this * instruction. * * this function returns '1', if the lock was free, * '0' if the lock was not free. */ #define get_lock_1(lock) \ ( \ _Asm_xchg((_Asm_sz)_SZ_W, (int *)lock, \ (int)LOCKED, (_Asm_ldhint)_LDHINT_NONE) > 0 ? \ (int)UNLOCKED : (int)LOCKED \ ) /* free_lock_1 frees a spinlock by executing a ordered store * with the release semantics on the word containing the * lock. * * The only possible value of the memory location (int *)lock * is really 'LOCKED' when this macro is called, as the calling * process/thread should have obtained teh lock by a call to * 'get_lock', setting the lock to 'LOCKED'. * * Just to make sure, we check for the correct value, to make * sure that no other process or thread has messed up the * shared memory location containing the lock. */ #define free_lock(lock) \ ( \ ( *lock == LOCKED ) ? \ (_Asm_st_volatile((_Asm_sz)_SZ_W, \ (_Asm_sthint)_STHINT_NONE, \ (int *)lock, \ UNLOCKED ),UNLOCKED) : LOCK_ERROR \ ) /* A lock free macro using the 'fetchadd' instruction * to release the lock instead of a volatile store * This assumes, that a free lock is indicated by the * integer value '0' */ #define free_lock_fetchadd(lock) \ ( \ ( *lock == LOCKED ) ? \ (_Asm_fetchadd((_Asm_fasz)_SZ_W, (_Asm_sem)_SEM_REL, \ (int *)lock, -1, (_Asm_ldhint)_LDHINT_NONE ), UNLOCKED) \ : LOCK_ERROR \ ) /* Compile fence to use with the store to application * register, in order to make it possible for the * compiler to more efficiently schedule instructions */ #define FENCE \ (_Asm_fence)(_UP_CALL_FENCE | _UP_SYS_FENCE | \ _DOWN_CALL_FENCE | _DOWN_SYS_FENCE ) /* The cas_acq macro performs an atomic compare and * exchange instruction on a 64-bit memory location * If the compare succeedes, the value '1' is returned * otherwise a '0' is returned */ #define cas_acq(location, currvalue, newvalue) \ ( \ _Asm_mov_to_ar((_Asm_app_reg)_AREG_CCV, \ (long)currvalue, FENCE), \ _Asm_cmpxchg((_Asm_sz)_SZ_D, (_Asm_sem)_SEM_ACQ, \ (long *)location, (long)newvalue, \ (_Asm_ldhint)_LDHINT_NONE) \ ) /* The cas_rel macro performs an atomic comapare and * exchange instruction on a 64-bit memory location. * If the compare succeedes, '1' is returned, otherwise * a '0' is returned. * The 'release' semantincs is used for the cmpxchg * instruction. */ #define cas_rel(location, currvalue, newvalue) \ ( \ _Asm_mov_to_ar((_Asm_app_reg)_AREG_CCV, \ (long)currvalue, FENCE), \ _Asm_cmpxchg((_Asm_sz)_SZ_D, (_Asm_sem)_SEM_REL, \ (long *)location, (long)newvalue, \ (_Asm_ldhint)_LDHINT_NONE) \ ) /* The cas_mf macro performs an atomic compare and exchange * on a memory location. The insttruction is fenced by * a 'mf' instruction, making it exepsive to execute, * but safe to execute in situations, where it is * impossible to make a choice between the acquire and * releas semantics. */ #define cas_mf(location, currvalue, newvalue) \ ( \ _Asm_mov_to_ar((_Asm_app_reg)_AREG_CCV, \ (long)currvalue, FENCE), \ _Asm_mf(), \ _Asm_cmpxchg((_Asm_sz)SZ_D, (_Asm_sem)_SEM_ACQ, \ (long *)location, (long)newvalue, \ (_Asm_ldhint)_LDHINT_NONE) \ ) /* The count_acq macro adds a value to the specified * memory location with acquire semantics. Only the * values 0,1,2,4,8 and 16 are supported (positive and * negative */ #define count_acq(location, value) \ ( _Asm_fetchadd( (_Asm_fasz)_FASZ_D, (_Asm_sem)_SEM_ACQ, \ (long *)location, -1, \ (_Asm_ldhint)_LDHINT_NONE ) \ ) /* The count_rel macro adds a value to the specified * memory location with release semantics. Only the * values 0,1,2,4,8 and 16 are supported (positive and * negative */ #define count_rel(location, value) \ ( _Asm_fetchadd( (_Asm_fasz)_FASZ_D, (_Asm_sem)_SEM_REL, \ (long *)location, (int)value, \ (_Asm_ldhint)_LDHINT_NONE ) \ ) /* The count_mf macro adds a value to the specified * memory location with a memory fence. Only the * values 0,1,2,4,8 and 16 are supported (positive and * negative */ #define count_mf(location, value) \ ( _Asm_mf(), \ _Asm_fetchadd( (_Asm_fasz)_FASZ_D, (_Asm_sem)_SEM_REL, \ (long *)location, (int)value, \ (_Asm_ldhint)_LDHINT_NONE \ ) /* spin_get tries to get the spinlock in the location defined * by the argument 'lock'. The number of spins to spin on the * lock before giving up is passed as the second argument * THe value of the spin count is dependent on your environment, * on a single CPY system, it is proabaly not worth spinning * at all */ __inline int spin_get(int *lock, int spin) { int i; for ( i = spin; i > 0; i-- ) { /* Test the lock before actually try to exchange it's value, * to reduce memory traffic for highly contended locks */ if (*lock == UNLOCKED && get_lock_1(lock) == LOCKED ) return LOCKED; } return UNLOCKED; } ga-5-3/armci/src/include/message.h0000640005473000001440000000645011643645222015710 0ustar d3n000users#ifndef _MESSAGE_H_ #define _MESSAGE_H_ #include "armci.h" #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif #define ARMCI_INT -99 #define ARMCI_LONG -101 #define ARMCI_LONG_LONG -102 #define ARMCI_FLOAT -306 #define ARMCI_DOUBLE -307 #define SCOPE_ALL 333 #define SCOPE_NODE 337 #define SCOPE_MASTERS 339 #define armci_msg_sel(x,n,op,type,contribute)\ armci_msg_sel_scope(SCOPE_ALL,(x),(n),(op),(type),(contribute)) #if 0 #define armci_msg_bcast(buffer, len, root)\ armci_msg_bcast_scope(SCOPE_ALL, (buffer), (len), (root)) #else extern void armci_msg_bcast(void *buffer, int len, int root); #endif extern void armci_msg_sel_scope(int scope, void *x, int n, char* op, int type, int contribute); extern void armci_msg_bcast_scope(int scope, void* buffer, int len, int root); extern void armci_msg_brdcst(void* buffer, int len, int root); extern void armci_msg_snd(int tag, void* buffer, int len, int to); extern void armci_msg_rcv(int tag, void* buffer, int buflen, int *msglen, int from); extern int armci_msg_rcvany(int tag, void* buffer, int buflen, int *msglen); extern void armci_msg_reduce(void *x, int n, char *op, int type); extern void armci_msg_reduce_scope(int scope, void *x, int n, char *op, int type); extern void armci_msg_gop_scope(int scope, void *x, int n, char* op, int type); extern void armci_msg_igop(int *x, int n, char* op); extern void armci_msg_lgop(long *x, int n, char* op); extern void armci_msg_llgop(long long *x, int n, char* op); extern void armci_msg_fgop(float *x, int n, char* op); extern void armci_msg_dgop(double *x, int n, char* op); extern void armci_exchange_address(void *ptr_ar[], int n); extern void armci_msg_barrier(); extern void armci_msg_bintree(int scope, int* Root, int *Up, int *Left, int *Right); extern int armci_msg_me(); extern int armci_msg_nproc(); extern void armci_msg_abort(int code); extern void armci_msg_init(int *argc, char ***argv); extern void armci_msg_finalize(); extern double armci_timer(); extern void armci_msg_clus_brdcst(void *buf, int len); extern void armci_msg_clus_igop(int *x, int n, char* op); extern void armci_msg_clus_fgop(float *x, int n, char* op); extern void armci_msg_clus_lgop(long *x, int n, char* op); extern void armci_msg_clus_llgop(long long *x, int n, char* op); extern void armci_msg_clus_dgop(double *x, int n, char* op); extern void armci_msg_group_gop_scope(int scope, void *x, int n, char* op, int type, ARMCI_Group *group); extern void armci_msg_group_igop(int *x, int n, char* op,ARMCI_Group *group); extern void armci_msg_group_lgop(long *x, int n, char* op,ARMCI_Group *group); extern void armci_msg_group_llgop(long long *x, int n, char* op,ARMCI_Group *group); extern void armci_msg_group_fgop(float *x, int n, char* op,ARMCI_Group *group); extern void armci_msg_group_dgop(double *x, int n,char* op,ARMCI_Group *group); extern void armci_exchange_address_grp(void *ptr_arr[], int n, ARMCI_Group *group); extern void armci_msg_group_barrier(ARMCI_Group *group); extern void armci_msg_group_bcast_scope(int scope, void *buf, int len, int root, ARMCI_Group *group); extern void armci_grp_clus_brdcst(void *buf, int len, int grp_master, int grp_clus_nproc,ARMCI_Group *mastergroup); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif ga-5-3/armci/src/include/shmem.h0000640005473000001440000000156111444464075015377 0ustar d3n000users#ifndef _SHMEM_H_ #define _SHMEM_H_ extern void Set_Shmem_Limit(unsigned long shmemlimit); extern void Delete_All_Regions(); extern char* Create_Shared_Region(long idlist[], long size, long *offset); extern char* Attach_Shared_Region(long idlist[], long size, long offset); extern void Free_Shmem_Ptr(long id, long size, char* addr); extern long armci_shmem_reg_size(int i, long id); extern char* armci_shmem_reg_ptr(int i); #ifdef MULTI_CTX extern void armci_nattach_preallocate_info(int* segments, int *segsize); #endif #ifdef HITACHI #define FIELD_NUM 0x1 #endif #if defined(QUADRICS) && defined(MULTI_CTX) #define POST_ALLOC_CHECK(temp,size) armci_checkMapped(temp,size); #else #define POST_ALLOC_CHECK(temp,size) ; #endif #define MAX_REGIONS 64 #if defined(WIN32) #define SHMIDLEN 3 #else #define SHMIDLEN (MAX_REGIONS + 2) #endif #define IDLOC (SHMIDLEN - 3) #endif ga-5-3/armci/src/include/spinlock.h0000640005473000001440000001226112140045175016075 0ustar d3n000users/** * @file spinlock.h * * This file attempts to implement spin locks for various platforms and/or CPU * instruction sets. */ #ifndef SPINLOCK_H #define SPINLOCK_H #define DEBUG_SPINLOCK 0 #define OPENPA 0 #if OPENPA # if DEBUG_SPINLOCK # warning SPINLOCK: openpa # endif # define SPINLOCK # include "opa_primitives.h" # define LOCK_T OPA_int_t # define TESTANDSET(x) OPA_swap_int((x), 1) # define MEMORY_BARRIER OPA_read_write_barrier #elif (defined(PPC) || defined(__PPC__) || defined(__PPC)) # if DEBUG_SPINLOCK # warning SPINLOCK: PPC # endif # define SPINLOCK # include "asm-ppc.h" //# define TESTANDSET testandset //# define TESTANDSET acquireLock # define armci_acquire_spinlock acquire_spinlock # define armci_release_spinlock release_spinlock # define MEMORY_BARRIER memory_barrier static int testandset(void *spinlock) { int v=1; atomic_exchange(&v,spinlock,sizeof(int)); return v; } static void memory_barrier() { __asm__ __volatile__ ("sync" : : : "memory"); } #elif defined(__i386__) || defined(__x86_64__) # if DEBUG_SPINLOCK # warning SPINLOCK: x86_64 # endif # define SPINLOCK # include "atomics-i386.h" static int testandset(void *spinlock) { int v=1; atomic_exchange(&v,spinlock,sizeof(int)); return v; } # define TESTANDSET testandset #elif defined(HPUX) && defined(__ia64) /* HPUX on IA64, non gcc */ # if DEBUG_SPINLOCK # warning SPINLOCK: HPUX ia64 # endif # define SPINLOCK typedef unsigned int slock_t; # include # define TESTANDSET(lock) _Asm_xchg(_SZ_W, lock, 1, _LDHINT_NONE) # define RELEASE_SPINLOCK(lock) (*((volatile LOCK_T *) (lock)) = 0) #elif defined(__ia64) # if DEBUG_SPINLOCK # warning SPINLOCK: ia64 # endif # define SPINLOCK # include "atomic_ops_ia64.h" static int testandset(void *spinlock) { int val=1; int res; atomic_swap_int(spinlock, val, &res); return res; } # define TESTANDSET testandset #elif defined(DECOSF) # if DEBUG_SPINLOCK # warning SPINLOCK: DECOSF # endif # error "no implementation" #elif defined(SGI) # if DEBUG_SPINLOCK # warning SPINLOCK: SGI # endif # include # define SPINLOCK # define TESTANDSET(x) __lock_test_and_set((x), 1) # define RELEASE_SPINLOCK __lock_release /*#elif defined(AIX)*/ #elif HAVE_SYS_ATOMIC_OP_H # if DEBUG_SPINLOCK # warning SPINLOCK: sys/atomic_op.h (AIX) # endif # include # define SPINLOCK # define TESTANDSET(x) (_check_lock((x), 0, 1)==TRUE) # define RELEASE_SPINLOCK(x) _clear_lock((x),0) #elif defined(SOLARIS) # if DEBUG_SPINLOCK # warning SPINLOCK: SOLARIS # endif # include # include # define SPINLOCK # define TESTANDSET(x) (!_lock_try((x))) # define RELEASE_SPINLOCK _lock_clear #elif defined(MACX) #elif defined(HPUX__) # if DEBUG_SPINLOCK # warning SPINLOCK: HPUX__ # endif extern int _acquire_lock(); extern void _release_lock(); # define SPINLOCK # define TESTANDSET(x) (!_acquire_lock((x))) # define RELEASE_SPINLOCK _release_lock #elif defined(NEC) # if DEBUG_SPINLOCK # warning SPINLOCK: NEC # endif extern ullong ts1am_2me(); # define LOCK_T ullong # define _LKWD (1ULL << 63) # define SPINLOCK # define TESTANDSET(x) ((_LKWD & ts1am_2me(_LKWD, 0xffULL, (ullong)(x)))) # define MEMORY_BARRIER mpisx_clear_cache extern void mpisx_clear_cache(); # define RELEASE_SPINLOCK(x) ts1am_2me(0ULL, 0xffULL, (ullong)x); #endif #ifdef SPINLOCK #if DEBUG_ # if HAVE_STDIO_H # include # endif #endif #if HAVE_UNISTD_H # include #endif #ifndef DBL_PAD # define DBL_PAD 16 #endif /* make sure that locks are not sharing the same cache line */ typedef struct{ double lock[DBL_PAD]; }pad_lock_t; #ifndef LOCK_T # define LOCK_T int #endif #define PAD_LOCK_T pad_lock_t static inline void armci_init_spinlock(LOCK_T *mutex) { #if OPENPA OPA_store_int(mutex, 0); #else *mutex =0; #endif } #ifdef TESTANDSET static inline void armci_acquire_spinlock(LOCK_T *mutex) { #if defined(BGML) || defined(DCMF) return; #else int loop=0, maxloop =10; while (TESTANDSET(mutex)){ loop++; if(loop==maxloop){ # if DEBUG_ extern int armci_me; printf("%d:spinlock sleeping\n",armci_me); fflush(stdout); # endif usleep(1); loop=0; } } #endif } #ifdef RELEASE_SPINLOCK # ifdef MEMORY_BARRIER # define armci_release_spinlock(x) MEMORY_BARRIER(); RELEASE_SPINLOCK(x) # else # define armci_release_spinlock(x) RELEASE_SPINLOCK(x) # endif #else static inline void armci_release_spinlock(LOCK_T *mutex) { #if defined(BGML) || defined(DCMF) return; #else # ifdef MEMORY_BARRIER MEMORY_BARRIER (); # endif #if OPENPA OPA_store_int(mutex, 0); #else *mutex =0; #endif # ifdef MEMORY_BARRIER MEMORY_BARRIER (); # endif # if (defined(MACX)||defined(LINUX)) && defined(__GNUC__) && defined(__ppc__) __asm__ __volatile__ ("isync" : : : "memory"); # endif #endif } #endif /* RELEASE_SPINLOCK */ #endif /* TESTANDSET */ #endif /* SPINLOCK */ #endif /* SPINLOCK_H */ ga-5-3/armci/src/include/shmlimit.h0000640005473000001440000000027511444464075016115 0ustar d3n000users#ifndef _SHMLIMIT_H_ #define _SHMLIMIT_H_ extern int armci_me, armci_master; extern void armci_die(char *, int); extern int armci_shmem_test(); extern int armci_child_shmem_init(); #endif ga-5-3/armci/src/include/utils.h0000640005473000001440000000724411643645222015426 0ustar d3n000users/* $Id: utils.h,v 1.1.2.3 2007-07-02 05:35:31 d3p687 Exp $ * * primitives for transparent handling of multi-threading */ #ifndef UTILS_H #define UTILS_H /* * This header file describes the "barrier" synchronization * construct. The type barrier_t describes the full state of the * barrier including the POSIX 1003.1c synchronization objects * necessary. * * A barrier causes threads to wait until a set of threads has * all "reached" the barrier. The number of threads required is * set when the barrier is initialized, and cannot be changed * except by reinitializing. */ #ifdef THREAD_SAFE # ifdef POSIX_THREADS # include #if 1 typedef pthread_mutex_t thread_lock_t; # define THREAD_LOCK_INIT(x) pthread_mutex_init(&x,NULL) # define THREAD_LOCK_DESTROY(x) pthread_mutex_destroy(&x) # define THREAD_LOCK(x) pthread_mutex_lock(&x) # define THREAD_UNLOCK(x) pthread_mutex_unlock(&x) #else #ifndef INLINE # define INLINE # include "spinlock.h" # undef INLINE #else # include "spinlock.h" #endif typedef LOCK_T thread_lock_t; # define THREAD_LOCK_INIT(x) armci_init_spinlock(&x) # define THREAD_LOCK_DESTROY(x) 0 # define THREAD_LOCK(x) armci_acquire_spinlock(&x) # define THREAD_UNLOCK(x) armci_release_spinlock(&x) #endif typedef pthread_t thread_t; # define THREAD_CREATE(th_,func_,arg_) pthread_create(th_,NULL,func_,arg_) # define THREAD_JOIN(th_,ret_) pthread_join(th_,ret_) /* structure describing a barrier */ typedef struct thread_barrier_tag { pthread_mutex_t mutex; /* Control access to barrier */ pthread_cond_t cv; /* wait for barrier */ int valid; /* set when valid */ int threshold; /* number of threads required */ int counter; /* current number of threads */ int cycle; /* alternate wait cycles (0 or 1) */ } thread_barrier_t; # define BARRIER_VALID 0xdbcafe /* support static initialization of barriers */ # define BARRIER_INITIALIZER(cnt) {\ PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER,\ BARRIER_VALID, cnt, cnt, 0} # else # error ONLY PTHREADS SUPPORT HAS BEEN IMPLEMENTED # endif # define TH2PROC(th_) (th_/mt_tpp) /* computes processor from thread id */ /* barrier functions */ int thread_barrier_init (thread_barrier_t *barrier, int count); int thread_barrier_destroy (thread_barrier_t *barrier); int thread_barrier_wait (thread_barrier_t *barrier); /* multi-threaded memory functions */ int armci_malloc_mt(void *ptr[], int bytes); int armci_free_mt(void *ptr, int th_idx); # define ARMCI_MALLOC_MT armci_malloc_mt # define ARMCI_FREE_MT armci_free_mt # define TH_INIT(p_,t_) mt_size=p_;mt_tpp=t_;\ thread_barrier_init(&mt_barrier,mt_tpp) # define TH_FINALIZE() thread_barrier_destroy(&mt_barrier) # define MT_BARRIER() if (thread_barrier_wait(&mt_barrier)==-1) armci_msg_barrier();\ thread_barrier_wait(&mt_barrier) extern int mt_size; extern int mt_tpp; extern thread_barrier_t mt_barrier; #else # define THREAD_LOCK_INIT(x) # define THREAD_LOCK_DESTROY(x) # define THREAD_LOCK(x) # define THREAD_UNLOCK(x) # define TH_INIT(p_,t_) # define TH_FINALIZE() # define MT_BARRIER armci_msg_barrier # define ARMCI_MALLOC_MT ARMCI_Malloc # define ARMCI_FREE_MT(p_,th_) ARMCI_Free(p_) #endif #endif/*UTILS_H*/ ga-5-3/armci/src/include/iterator.h0000640005473000001440000000260411721474416016114 0ustar d3n000users/** @file iterator.h * @author Sriram Krishnamoorthy * @brief Stride iterator. * An iterator for the stride descriptor to reuse common traversal * functionality. More functionality related to the strided * descriptor reusable across files will be extracted here as well. */ #ifndef _STRIDE_INFO_H_ #define _STRIDE_INFO_H_ #include "armci.h" /*for ARMCI_MAX_STRIDE_LEVEL and dassert*/ #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif typedef struct { char *base_ptr; int stride_levels; int stride_arr[ARMCI_MAX_STRIDE_LEVEL]; int seg_count[ARMCI_MAX_STRIDE_LEVEL+1]; int size, pos, itr[ARMCI_MAX_STRIDE_LEVEL]; } stride_info_t; void armci_stride_info_init(stride_info_t *sinfo, void *base_ptr, int stride_levels, const int *stride_arr, const int *seg_count); void armci_stride_info_destroy(stride_info_t *sinfo); int armci_stride_info_count(stride_info_t *sinfo); int armci_stride_info_pos(stride_info_t *sinfo); void armci_stride_info_next(stride_info_t *sinfo); void *armci_stride_info_seg_ptr(stride_info_t *sinfo); int armci_stride_info_seg_size(stride_info_t *sinfo); int armci_stride_info_seg_off(stride_info_t *sinfo); int armci_stride_info_size(stride_info_t *sinfo); int armci_stride_info_has_more(stride_info_t *sinfo); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /*_STRIDE_INFO_H_*/ ga-5-3/armci/src/include/armci.h0000640005473000001440000004154112036055134015351 0ustar d3n000users/* ARMCI header file */ #ifndef _ARMCI_H #define _ARMCI_H /* for size_t */ #include #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern int armci_sameclusnode(int proc); typedef struct { void **src_ptr_array; void **dst_ptr_array; int ptr_array_len; int bytes; } armci_giov_t; typedef long armci_size_t; extern int armci_notify(int proc); extern int armci_notify_wait(int proc,int *pval); extern int ARMCI_Init(void); /* initialize ARMCI */ extern int ARMCI_Init_args(int *argc, char ***argv); /* initialize ARMCI */ extern int ARMCI_Initialized(); extern void ARMCI_Barrier(void); /* ARMCI Barrier*/ extern int ARMCI_Put(void *src, void* dst, int bytes, int proc); extern int ARMCI_Put_flag(void *src, void* dst,int bytes,int *f,int v,int proc); /* On path for deprecation */ #define ARMCI_Put1(_s,_d,_b,_p) memcpy(_d,_s,_b), 0 extern int ARMCI_PutS( /* strided put */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ); extern int ARMCI_PutS_flag_dir( /* put with flag that uses direct put */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int *flag, /* pointer to remote flag */ int val, /* value to set flag upon completion of data transfer */ int proc /* remote process(or) ID */ ); extern int ARMCI_PutS_flag( void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int *flag, /* pointer to remote flag */ int val, /* value to set flag upon completion of data transfer */ int proc /* remote process(or) ID */ ); extern int ARMCI_Acc(int optype, void *scale, void *src, void* dst, int bytes, int proc); extern int ARMCI_AccS( /* strided accumulate */ int optype, /* operation */ void *scale, /* scale factor x += scale*y */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ); extern int ARMCI_Get(void *src, void* dst, int bytes, int proc); extern int ARMCI_GetS( /* strided get */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ); extern int ARMCI_GetV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int ARMCI_PutV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int ARMCI_AccV( int op, /* operation code */ void *scale, /* scaling factor for accumulate */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int ARMCI_PutValueInt(int src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc /* remote process (or) ID */ ); extern int ARMCI_PutValueLong(long src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc /* remote process (or) ID */ ); extern int ARMCI_PutValueFloat(float src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc /* remote process (or) ID */ ); extern int ARMCI_PutValueDouble(double src,/* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc /* remote process (or) ID */ ); extern int ARMCI_GetValueInt(void *src, int proc); extern long ARMCI_GetValueLong(void *src, int proc); extern float ARMCI_GetValueFloat(void *src, int proc); extern double ARMCI_GetValueDouble(void *src, int proc); extern int ARMCI_Malloc(void* ptr_arr[], armci_size_t bytes); extern int ARMCI_Free(void *ptr); extern void* ARMCI_Malloc_local(armci_size_t bytes); extern int ARMCI_Free_local(void *ptr); extern int ARMCI_Same_node(int proc); extern void ARMCI_Finalize(); /* terminate ARMCI */ extern void ARMCI_Error(char *msg, int code); extern void ARMCI_Fence(int proc); extern void ARMCI_AllFence(void); extern int ARMCI_Rmw(int op, void *ploc, void *prem, int extra, int proc); extern void ARMCI_Cleanup(void); extern int ARMCI_Create_mutexes(int num); extern int ARMCI_Destroy_mutexes(void); extern void ARMCI_Lock(int mutex, int proc); extern void ARMCI_Unlock(int mutex, int proc); extern void ARMCI_Set_shm_limit(unsigned long shmemlimit); extern int ARMCI_Uses_shm(); extern void ARMCI_Copy(void *src, void *dst, int n); #define FAIL -1 #define FAIL2 -2 #define FAIL3 -3 #define FAIL4 -4 #define FAIL5 -5 #define FAIL6 -6 #define FAIL7 -7 #define FAIL8 -8 #define ARMCI_SWAP 10 #define ARMCI_SWAP_LONG 11 #define ARMCI_FETCH_AND_ADD 12 #define ARMCI_FETCH_AND_ADD_LONG 13 #define ARMCI_ACC_OFF 36 #define ARMCI_ACC_INT (ARMCI_ACC_OFF + 1) #define ARMCI_ACC_DBL (ARMCI_ACC_OFF + 2) #define ARMCI_ACC_FLT (ARMCI_ACC_OFF + 3) #define ARMCI_ACC_CPL (ARMCI_ACC_OFF + 4) #define ARMCI_ACC_DCP (ARMCI_ACC_OFF + 5) #define ARMCI_ACC_LNG (ARMCI_ACC_OFF + 6) #define ARMCI_MAX_STRIDE_LEVEL 8 /****************Error/termination macros************************/ /**Debug assert macro. To be used instead of assert for more user * informative and cleaner death. Also allows individualized * enabling/disabling of assert statements. * @param _enable Ignore this assertion if _enable==0 * @param _cond Condition to be evaluated (assert that it is true) * @param _plist Information to be printed using printf, should be * within parenthesis (eg., dassert(1,0,("%d:test n=%d\n",me,0)); * ). This is fed directly to printf. */ int dassertp_fail(const char *cond_string, const char *file, const char *func, unsigned int line, int code); void derr_printf(const char *format, ...); #undef dassertp #define dassertp(_enable,_cond,_plist) do { \ if((_enable) && !(_cond)) { \ derr_printf _plist; \ dassertp_fail(#_cond,__FILE__,FUNCTION_NAME,__LINE__,1); \ }} while(0) #undef dassertc #define dassertc(_enable,_cond,_plist,_code) do { \ if((_enable) && !(_cond)) { \ derr_printf _plist; \ dassertp_fail(#_cond,__FILE__,FUNCTION_NAME,__LINE__,_code); \ }} while(0) #undef dassert #define dassert(_enable,_cond) dassertp((_enable),(_cond),("")) #undef dassert1 #define dassert1(_enable,_cond,_ival) \ dassertp((_enable),(_cond),("%d: error ival=%d\n", \ armci_msg_me(),(int)(_ival))) #define armci_die(_msg,_code) dassertc(1,0, \ ("%d:%s: %d\n", armci_msg_me(),(_msg),(_code)),_code) #define armci_die2(_msg,_code1,_code2) dassertc(1,0, \ ("%d:%s: (%d,%d)\n",armci_msg_me(),(_msg),(_code1),(_code2)),_code1) /************ locality information **********************************************/ typedef int armci_domain_t; #define ARMCI_DOMAIN_SMP 0 /* SMP node domain for armci_domain_XXX calls */ extern int armci_domain_nprocs(armci_domain_t domain, int id); extern int armci_domain_id(armci_domain_t domain, int glob_proc_id); extern int armci_domain_glob_proc_id(armci_domain_t domain, int id, int loc_proc_id); extern int armci_domain_my_id(armci_domain_t domain); extern int armci_domain_count(armci_domain_t domain); extern int armci_domain_same_id(armci_domain_t domain, int proc); /* PVM group * On CrayT3E: the default group is the global group which is (char *)NULL * It is the only working group. * On Workstations: the default group is "mp_working_group". User can set * the group name by calling the ARMCI_PVM_init (defined * in message.c) and passing the group name to the library. */ extern char *mp_group_name; /*********************stuff for non-blocking API******************************/ /*\ the request structure for non-blocking api. \*/ /*max of sizes for all platforms. Increase if any platform needs more*/ typedef struct{ int data[4]; /* tag, bufid, agg_flag, op, proc */ double dummy[72]; } armci_hdl_t; #define armci_req_t armci_hdl_t typedef int ARMCI_Group; extern void ARMCI_Group_create(int n, int *pid_list, ARMCI_Group *group_out); extern void ARMCI_Group_create_child(int n, int *pid_list, ARMCI_Group *group_out, ARMCI_Group *group_parent); extern void ARMCI_Group_free(ARMCI_Group *group); extern int ARMCI_Group_rank(ARMCI_Group *group, int *rank); extern void ARMCI_Group_size(ARMCI_Group *group, int *size); extern void ARMCI_Group_set_default(ARMCI_Group *group); extern void ARMCI_Group_get_default(ARMCI_Group *group_out); extern void ARMCI_Group_get_world(ARMCI_Group *group_out); extern int ARMCI_Absolute_id(ARMCI_Group *group, int group_rank); extern int ARMCI_Uses_shm_grp(ARMCI_Group *group); extern int ARMCI_Malloc_group(void *ptr_arr[], armci_size_t bytes,ARMCI_Group *group); extern int ARMCI_Free_group(void *ptr, ARMCI_Group *group); extern int ARMCI_NbPut(void *src, void* dst, int bytes, int proc,armci_hdl_t* nb_handle); extern int ARMCI_NbPutS( /* strided put */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbAccS( /* strided accumulate */ int optype, /* operation */ void *scale, /* scale factor x += scale*y */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbGet(void *src, void* dst, int bytes, int proc,armci_hdl_t* nb_handle); extern int ARMCI_NbGetS( /* strided get */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handler/*armci_non-blocking request handle*/ ); extern int ARMCI_NbGetV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbPutV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbAccV( int op, /* operation code */ void *scale, /* scaling factor for accumulate */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbPutValueInt(int src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc, /* remote process (or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle */ ); extern int ARMCI_NbPutValueLong(long src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc, /* remote process (or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle */ ); extern int ARMCI_NbPutValueFloat(float src,/* value in a register to put */ void *dst,/* dest starting addr to put data */ int proc, /* remote process (or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle */ ); extern int ARMCI_NbPutValueDouble(double src,/* value in a register to put */ void *dst,/* dest starting addr to put data*/ int proc, /* remote process (or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle */ ); extern int ARMCI_Wait(armci_hdl_t* nb_handle); /*non-blocking request handle*/ extern int ARMCI_Test(armci_hdl_t* nb_handle); /*non-blocking request handle*/ extern int ARMCI_WaitAll (void); extern int ARMCI_WaitProc (int proc); extern void ARMCI_SET_AGGREGATE_HANDLE(armci_hdl_t* nb_handle); extern void ARMCI_UNSET_AGGREGATE_HANDLE(armci_hdl_t* nb_handle); #define ARMCI_INIT_HANDLE(hdl) do {((double *)((hdl)->data))[0]=0; \ ((double *)((hdl)->data))[1]=0; }while(0) /* -------------- ARMCI Non-collective memory allocator ------------- */ typedef struct armci_meminfo_ds { char * armci_addr; /* remote address of the creator which can be used in ARMCI communication */ char *addr; /* local address of creator which can be used in to set SMP memoffset, armci_set_mem_offset() */ size_t size; /* size of remote pid's segment (bytes) */ int cpid; /* armci pid of creator */ long idlist[128]; } armci_meminfo_t; extern void ARMCI_Memget(size_t bytes, armci_meminfo_t *meminfo, int memflg); extern void* ARMCI_Memat(armci_meminfo_t *meminfo, long offset); extern void ARMCI_Memdt(armci_meminfo_t *meminfo, long offset); extern void ARMCI_Memctl(armci_meminfo_t *meminfo); /* ------------------------------------------------------------------ */ #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* _ARMCI_H */ ga-5-3/armci/src/include/semaphores.h0000640005473000001440000000231411701667223016425 0ustar d3n000users#ifndef _SEMAPHORES_H_ #define _SEMAPHORES_H_ #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_IPC_H # include #endif #if HAVE_SYS_SEM_H # include #endif #if !HAVE_UNION_SEMUN union semun { int val; /* value for SETVAL */ struct semid_ds *buf; /* buffer for IPC_STAT, IPC_SET */ unsigned short int *array; /* array for GETALL, SETALL */ struct seminfo *__buf; /* buffer for IPC_INFO */ }; #endif /* how many semaphores are available ? */ #ifndef SEMMSL # ifdef AIX # define SEMMSL 8094 # else # define SEMMSL 16 # endif #endif /* on HPUX 10.2 SEMMSL is much bigger than realistically we can allocate */ #ifdef HPUX #undef SEMMSL #define SEMMSL 64 #endif extern struct sembuf sops; extern int semaphoreID; int semop(); #define ALL_SEMS -1 #define _P_code -1 #define _V_code 1 #define P_semaphore(s) \ {\ sops.sem_num = (s);\ sops.sem_op = _P_code;\ sops.sem_flg = 0; \ semop(semaphoreID,&sops,1);\ } #define V_semaphore(s) \ {\ sops.sem_num = (s);\ sops.sem_op = _V_code;\ sops.sem_flg = 0; \ semop(semaphoreID,&sops,1);\ } typedef int lockset_t; #endif ga-5-3/armci/src/include/shmalloc.h0000640005473000001440000000325711444464075016074 0ustar d3n000users#ifndef SHMALLOC_H #define SHMALLOC_H /* Returns data aligned on a quad boundary. Even if the request size is zero it returns a non-zero pointer. */ extern char *armci_shmalloc(size_t size); /* void shfree(char *pointer) Frees memory allocated by armci_shmalloc(). Ignores NULL pointers but must not be called twice for the same pointer or called with non-shmalloc'ed pointers */ extern void shfree(); /* void shmalloc_print_stats(); Print to standard output the usage statistics ... a wrapper for shmalloc_stats(); */ extern void shmalloc_print_stats(); /* void shmalloc_stats(size_t *total, long *nchunk, size_t *inuse, size_t *maxuse, long *nfrags, long *nmcalls, long *nfcalls) Returns the statistics about memory usage. total = total amount of memory got from system in bytes nchunk = total no. of chunks of memory got from the system inuse = amount of memory application is using in bytes maxuse = maximum value of inuse to dat nfrags = no. of fragments that memory is split into nmcalls= no. of calls to shmalloc nfcalls= no. of calls to shfree */ extern void shmalloc_stats(); /* void shmalloc_debug(int code) Enable debuging code = 0 ... no debugging code != 0 ... entire heap is verified on every call */ extern void shmalloc_debug(); /* Verify the heap. */ extern void shmalloc_verify(); /* size ... minimum size in bytes that chunks of data should be obtained from the system in. The default is 131072. maxsize ... maximum amount of memory that should be obtained from the system. The default is 12,582,912. */ extern void shmalloc_request(size_t size, size_t maxsize); #endif ga-5-3/armci/src/include/memlock.h0000640005473000001440000000202711444464075015713 0ustar d3n000users/* $Id: memlock.h,v 1.18 2004-09-21 17:26:23 manoj Exp $ */ #ifndef _MEMLOCK_H_ #define _MEMLOCK_H_ /* data structure for locking memory areas */ #define MAX_SLOTS 8 typedef struct{ void *start; void *end; } memlock_t; /* SGI Altix Stuff */ typedef struct { void *seg_addr; /* master's starting address of the segment */ size_t seg_size; size_t tile_size; size_t mem_offset; }armci_memoffset_t; extern void** memlock_table_array; extern int *armci_use_memlock_table; #if defined(LAPI ) || defined(FUJITSU) || defined(PTHREADS) || \ defined(QUADRICS) || defined(HITACHI) || \ defined(CYGWIN) || defined(__crayx1) || defined(NEC) || \ (defined(LINUX64) && defined(__GNUC__) && defined(__alpha__)) # define ARMCI_LOCKMEM armci_lockmem_ # define ARMCI_UNLOCKMEM armci_unlockmem_ #else # define ARMCI_LOCKMEM armci_lockmem # define ARMCI_UNLOCKMEM armci_unlockmem #endif extern void ARMCI_LOCKMEM(void *pstart, void *pend, int proc); extern void ARMCI_UNLOCKMEM(int proc); #define MEMLOCK_SHMEM_FLAG #endif ga-5-3/armci/src/include/acc.h0000640005473000001440000002164712115161655015015 0ustar d3n000users#ifndef _ACC_H_ #define _ACC_H_ typedef struct { float real; float imag; } complex_t; typedef struct { double real; double imag; } dcomplex_t; void c_d_accumulate_1d_(const double* const restrict alpha, double* const restrict A, const double* const restrict B, const int* const restrict rows); void c_f_accumulate_1d_(const float* const restrict alpha, float* const restrict A, const float* const restrict B, const int* const restrict rows); void c_c_accumulate_1d_(const complex_t* const restrict alpha, complex_t* const restrict A, const complex_t* const restrict B, const int* const restrict rows); void c_z_accumulate_1d_(const dcomplex_t* const restrict alpha, dcomplex_t* const restrict A, const dcomplex_t* const restrict B, const int* const restrict rows); void c_i_accumulate_1d_(const int* const restrict alpha, int* const restrict A, const int* const restrict B, const int* const restrict rows); void c_l_accumulate_1d_(const long* const restrict alpha, long* const restrict A, const long* const restrict B, const int* const restrict rows); void c_ll_accumulate_1d_(const long long* const restrict alpha, long long* const restrict A, const long long* const restrict B, const int* const restrict rows); void c_d_accumulate_2d_(const double* const restrict alpha, const int* const restrict rows, const int* const restrict cols, double* const restrict A, const int* const restrict ald, const double* const restrict B, const int* const restrict bld); void c_f_accumulate_2d_(const float* const restrict alpha, const int* const restrict rows, const int* const restrict cols, float* const restrict A, const int* const restrict ald, const float* const restrict B, const int* const restrict bld); void c_c_accumulate_2d_(const complex_t* const restrict alpha, const int* const restrict rows, const int* const restrict cols, complex_t* const restrict A, const int* const restrict ald, const complex_t* const restrict B, const int* const restrict bld); void c_z_accumulate_2d_(const dcomplex_t* const restrict alpha, const int* const restrict rows, const int* const restrict cols, dcomplex_t* const restrict A, const int* const restrict ald, const dcomplex_t* const restrict B, const int* const restrict bld); void c_i_accumulate_2d_(const int* const restrict alpha, const int* const restrict rows, const int* const restrict cols, int* const restrict A, const int* const restrict ald, const int* const restrict B, const int* const restrict bld); void c_l_accumulate_2d_(const long* const restrict alpha, const int* const restrict rows, const int* const restrict cols, long* const restrict A, const int* const restrict ald, const long* const restrict B, const int* const restrict bld); void c_ll_accumulate_2d_(const long long* const restrict alpha, const int* const restrict rows, const int* const restrict cols, long long* const restrict A, const int* const restrict ald, const long long* const restrict B, const int* const restrict bld); void c_d_accumulate_2d_u_(const double* const restrict alpha, const int* const restrict rows, const int* const restrict cols, double* const restrict A, const int* const restrict ald, const double* const restrict B, const int* const restrict bld); void c_f_accumulate_2d_u_(const float* const restrict alpha, const int* const restrict rows, const int* const restrict cols, float* const restrict A, const int* const restrict ald, const float* const restrict B, const int* const restrict bld); void c_c_accumulate_2d_u_(const complex_t* const restrict alpha, const int* const restrict rows, const int* const restrict cols, complex_t* const restrict A, const int* const restrict ald, const complex_t* const restrict B, const int* const restrict bld); void c_z_accumulate_2d_u_(const dcomplex_t* const restrict alpha, const int* const restrict rows, const int* const restrict cols, dcomplex_t* const restrict A, const int* const restrict ald, const dcomplex_t* const restrict B, const int* const restrict bld); void c_i_accumulate_2d_u_(const int* const restrict alpha, const int* const restrict rows, const int* const restrict cols, int* const restrict A, const int* const restrict ald, const int* const restrict B, const int* const restrict bld); void c_l_accumulate_2d_u_(const long* const restrict alpha, const int* const restrict rows, const int* const restrict cols, long* const restrict A, const int* const restrict ald, const long* const restrict B, const int* const restrict bld); void c_ll_accumulate_2d_u_(const long long* const restrict alpha, const int* const restrict rows, const int* const restrict cols, long long* const restrict A, const int* const restrict ald, const long long* const restrict B, const int* const restrict bld); void c_dadd_(const int* const restrict n, double* const restrict x, const double* const restrict work); void c_dadd2_(const int* const restrict n, double* const restrict x, const double* const restrict work, const double* const restrict work2); void c_dmult_(const int* const restrict n, double* const restrict x, const double* const restrict work); void c_dmult2_(const int* const restrict n, double* const restrict x, const double* const restrict work, const double* const restrict work2); #define I_ACCUMULATE_1D c_i_accumulate_1d_ #define L_ACCUMULATE_1D c_l_accumulate_1d_ #define LL_ACCUMULATE_1D c_ll_accumulate_1d_ #define D_ACCUMULATE_1D c_d_accumulate_1d_ #define C_ACCUMULATE_1D c_c_accumulate_1d_ #define Z_ACCUMULATE_1D c_z_accumulate_1d_ #define F_ACCUMULATE_1D c_f_accumulate_1d_ #define I_ACCUMULATE_2D c_i_accumulate_2d_ #define L_ACCUMULATE_2D c_l_accumulate_2d_ #define LL_ACCUMULATE_2D c_ll_accumulate_2d_ #define D_ACCUMULATE_2D c_d_accumulate_2d_ #define C_ACCUMULATE_2D c_c_accumulate_2d_ #define Z_ACCUMULATE_2D c_z_accumulate_2d_ #define F_ACCUMULATE_2D c_f_accumulate_2d_ #define FORT_DADD c_dadd_ #define FORT_DADD2 c_dadd2_ #define FORT_DMULT c_dmult_ #define FORT_DMULT2 c_dmult2_ #endif /* _ACC_H_ */ ga-5-3/armci/src/include/fujitsu-vpp.h0000640005473000001440000001422311444464075016561 0ustar d3n000users/* This file "fujitsu-vpp.h" #defines common set of macros used in * the Global Array and TCGMSG-MPI ports to Fujitsu VX and VPP systems. * * Author: Jarek Nieplocha * Organization: Pacific Northwest National Laboratory, Richland, WA 99552 * Date: 08.21.1997 * History: 11.27.1997 added optimized 2-D array copy macros * 03.10.2000 Both strided operations made optional * * Notes: * 1. This file contains calls to an undisclosed Fujitsu MPlib library and * is NOT intended for public distribution. */ #ifndef _FUJITSU_VPP_H #define _FUJITSU_VPP_H #ifdef __sparc /* the AP3000 version is limited */ # include "/opt/FSUNaprun/include/vpp_mplib.h" # define VPP_NbWrite VPP_Write #else /* specify full path to MPlib include file (here is my account on Fecit VX)*/ # include "/home/jniep/include/mplib.h" #endif #define TOTAL_NUM_SEM 128 /* number of MPlib semaphores per node */ #define NUM_SEM 16 /* we will use only that+1 many semaphores */ #define SEM_BASE (TOTAL_NUM_SEM-NUM_SEM-2) #define NXTV_SEM SEM_BASE+NUM_SEM+1 /*nxtval server semaphore in tcgmsg-mpi */ #define MPLIB_TERMINATE {\ fflush(stdout);sleep(1);\ fprintf(stderr,"%d: MPlib call failed: %s in line %d compiled on %s\n",\ VPP_MyPe(),__FILE__,__LINE__,__DATE__);\ fprintf(stdout,"%d: MPlib call failed: %s in line %d compiled on %s\n",\ VPP_MyPe(),__FILE__,__LINE__,__DATE__);\ fflush(stdout); sleep(1);\ VPP_Abort();\ } #define NATIVE_LOCK0(proc,mtx) if(VPP_SemWait((PROC)(proc),(mtx)))MPLIB_TERMINATE #define NATIVE_UNLOCK0(proc,mtx) if(VPP_SemPost((PROC)(proc),(mtx)))MPLIB_TERMINATE #define NAT_LOCK(proc) if(VPP_SemWait((PROC)(proc),SEM_BASE))MPLIB_TERMINATE #define NAT_UNLOCK(proc) if(VPP_SemPost((PROC)(proc),SEM_BASE))MPLIB_TERMINATE #define NATIVE_BARRIER VPP_Barrier #define NATIVE_BARRIER__() MPI_Barrier(MPI_COMM_WORLD) /**************************** MEMORY COPY macros ************************/ /*copy n words from remote memory (proc) at (src) to local memory (dst) */ #define CopyElemFrom(src,dst,n,proc) \ if(VPP_Read((PROC)(proc),(ADDRP) (src), (ADDRP)(dst), n*sizeof(long)))\ MPLIB_TERMINATE /*copy n words to remote memory (proc) at (dst) from local memory (src) */ #define CopyElemTo(src,dst,n,proc) \ if(VPP_Write((PROC)(proc),(ADDRP)(dst),(ADDRP) (src),n*sizeof(long)))\ MPLIB_TERMINATE /*copy n bytes from remote memory (proc) at (src) to local memory (dst) */ #define CopyFrom(src,dst,n,proc) \ if(VPP_Read((PROC)(proc),(ADDRP) (src), (ADDRP)(dst), n))\ MPLIB_TERMINATE /*copy n bytes o remote memory (proc) at (dst) from local memory (src) */ #define CopyTo(src,dst,n,proc) \ if(VPP_Write((PROC)(proc),(ADDRP)(dst),(ADDRP) (src),n ))\ MPLIB_TERMINATE /* Memory copy for 2-dimensional array patches between local and remote memory: * we use nonblocking read/write operations followed by a blocking read/write * of 1 byte to force completion of outstanding nonblocking operations. * This works because of the "in-order" rule for remote memory operations. * This code is using byte- rather than word- interface. */ #ifdef VPP_STRIDED_WRITE # define CopyPatchTo(src, ld_src, dst, ld_dst, blocks, bytes, proc){\ if(VPP_WriteBothStrided((PROC)(proc), (ADDRP)dst, (ADDRP)src,\ bytes, ld_dst, ld_src, bytes*blocks))MPLIB_TERMINATE; } #else # define CopyPatchTo(src, ld_src, dst, ld_dst, blocks, bytes, proc){\ int _iii, _stat=0, _bytes2copy=1;\ char *ps=(char*)src, *pd=(char*)dst;\ if((blocks)>1)for (_iii=0;_iii<(blocks);_iii++){\ _stat += VPP_NbWrite((PROC)(proc),(ADDRP)pd,(ADDRP)ps,(bytes));\ ps += (ld_src);\ pd += (ld_dst);\ }else _bytes2copy=(bytes);\ _stat += VPP_Write((PROC)(proc),(ADDRP)(dst),(ADDRP)(src),_bytes2copy);\ if(_stat)MPLIB_TERMINATE; } #endif #ifdef VPP_STRIDED_READ # define CopyPatchFrom(src, ld_src, dst, ld_dst, blocks, _bytes, proc){\ if(VPP_ReadBothStrided((PROC)(proc), (ADDRP)src, (ADDRP)dst,\ _bytes, ld_src, ld_dst, _bytes*blocks))MPLIB_TERMINATE;} #else # define CopyPatchFrom(src, ld_src, dst, ld_dst, blocks, _bytes, proc){\ int _iii, _stat=0, _bytes2copy=1;\ char *ps=(char*)src, *pd=(char*)dst;\ if((blocks)>1)for (_iii=0;_iii<(blocks);_iii++){\ _stat += VPP_Read((PROC)(proc),(ADDRP)ps,(ADDRP)pd,(_bytes));\ ps += (ld_src);\ pd += (ld_dst);\ }else _bytes2copy=(_bytes);\ _stat += VPP_Read((PROC)(proc),(ADDRP)(src),(ADDRP)(dst),_bytes2copy);\ if(_stat)MPLIB_TERMINATE; } #endif #if 0 #define MAX_IDS 10 static DRWD *_id[MAX_IDS]; #define CopyPatchFromXX(src, ld_src, dst, ld_dst, blocks, _bytes, proc){\ int _iii, _stat=0, _idx;\ char *ps=(char*)src, *pd=(char*)dst;\ printf("lds=%d ldd=%d bl=%d bytes=%d proc=%d\n",ld_src,ld_dst,blocks, _bytes, proc); fflush(stdout);\ if((blocks)>1){\ for (_iii=0; _iii<(blocks); _iii++){\ _idx = _iii%MAX_IDS;\ if(_iii >= MAX_IDS)_stat += VPP_ReadDone(_id[_idx]);\ _id[_idx]=VPP_StartRead((PROC)(proc),(ADDRP)ps,(ADDRP)pd,(_bytes));\ ps += (ld_src);\ pd += (ld_dst);\ }\ for (_idx=0; _idx < (blocks) && _idx < MAX_IDS; _idx++){\ _stat += VPP_ReadDone(_id[_idx]);\ }\ }else _stat = VPP_Read((PROC)(proc),(ADDRP)(src),(ADDRP)(dst),(_bytes));\ if(_stat)MPLIB_TERMINATE;\ } #define CopyPatchFromYY(src, ld_src, dst, ld_dst, blocks, _bytes, proc){\ int _iii, _stat=0, _bytes2copy=1;\ char *ps=(char*)src, *pd=(char*)dst;\ if((blocks)>1) { for (_iii=0;_iii<(blocks);_iii++){\ _id[0]= VPP_StartRead((PROC)(proc),(ADDRP)ps,(ADDRP)pd,(_bytes));\ ps += (ld_src);\ pd += (ld_dst);\ }\ _stat += VPP_ReadDone(_id[0]);\ }else _bytes2copy=(_bytes);\ _stat += VPP_Read((PROC)(proc),(ADDRP)(src),(ADDRP)(dst),_bytes2copy);\ if(_stat)MPLIB_TERMINATE;\ } #endif #endif ga-5-3/armci/src/include/signaltrap.h0000640005473000001440000000054611444464075016434 0ustar d3n000users#ifndef _SIGNALTRAP_H_ #define _SIGNALTRAP_H_ #ifdef SYSV extern void ARMCI_ChildrenTrapSignals(); extern void ARMCI_ParentTrapSignals(); extern void ARMCI_ParentRestoreSignals(); extern void ARMCI_RestoreSignals(); #else # define ARMCI_ChildrenTrapSignals() # define ARMCI_ParentTrapSignals() # define ARMCI_ParentRestoreSignals() #endif #endif ga-5-3/armci/src/include/gpc.h0000640005473000001440000000200311445744563015033 0ustar d3n000users#ifndef __GPCDEF #define __GPCDEF #include "armci.h" #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif #define GPC_INIT 1 #define GPC_PROBE 2 #define GPC_WAIT 3 #define GPC_DONE 4 #define GPC_PENDING 5 typedef struct { int proc; armci_hdl_t ahdl; }gpc_hdl_t; /* #define ARMCI_GPC_HLEN 1024 */ /* #define ARMCI_GPC_DLEN 1024*1024 */ extern int ARMCI_Gpc_register( int (*func) ()); extern void ARMCI_Gpc_release(int handle); extern void * ARMCI_Gpc_translate(void *ptr, int proc, int from); extern void ARMCI_Gpc_lock(int proc); extern void ARMCI_Gpc_unlock(int proc); extern int ARMCI_Gpc_trylock(int proc); extern int ARMCI_Gpc_exec(int h,int p, void *hdr, int hlen, void *data,int dlen, void *rhdr, int rhlen, void *rdata, int rdlen, gpc_hdl_t* nbh); extern int ARMCI_Get_gpc_hlen(); extern int ARMCI_Get_gpc_dlen(); extern void ARMCI_Gpc_init_handle(gpc_hdl_t *nbh); extern void ARMCI_Gpc_wait(gpc_hdl_t *nbh); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif ga-5-3/armci/src/include/request.h0000640005473000001440000003416611633511017015752 0ustar d3n000users#ifndef _REQUEST_H_ #define _REQUEST_H_ /******** client buffer managment ops ****************************/ extern void _armci_buf_init(); extern char* _armci_buf_get(int size, int operation, int to); extern void _armci_buf_release(void *buf); extern int _armci_buf_to_index(void *buf); extern char* _armci_buf_ptr_from_id(int id); extern void _armci_buf_ensure_one_outstanding_op_per_node(void *buf, int node); #if defined(PEND_BUFS) extern void _armci_buf_ensure_pend_outstanding_op_per_node(void *buf, int node); #endif extern void _armci_buf_complete_nb_request(int bufid,unsigned int tag, int *retcode); extern void _armci_buf_test_nb_request(int bufid,unsigned int tag, int *retcode); extern void _armci_buf_set_tag(void *bufptr,unsigned int tag,short int protocol); extern void _armci_buf_clear_all(); extern INLINE char *_armci_buf_get_clear_busy(int size, int operation, int to); extern INLINE void _armci_buf_set_busy(void *buf, int state); extern INLINE void _armci_buf_set_busy_idx(int tbl_idx, int state); extern INLINE int _armci_buf_cmpld(int bufid); extern INLINE void _armci_buf_set_cmpld(void *buf, int state); extern INLINE void _armci_buf_set_cmpld_idx(int idx, int state); #ifdef LAPI # include "lapidefs.h" #elif PORTALS # include "armci_portals.h" typedef long msg_tag_t; #elif defined(GM) # include "myrinet.h" #elif defined(DOELAN4) # include "elandefs.h" #elif defined(QUADRICS) # include typedef void* msg_tag_t; # ifdef _ELAN_PUTGET_H # define NB_CMPL_T ELAN_EVENT* # endif #elif defined(VIA) # include "via.h" typedef void* msg_tag_t; #elif defined(VAPI) # include "armci-vapi.h" #elif defined(SOCKETS) # include "sockets.h" typedef long msg_tag_t; typedef unsigned short msg_id_t; # define DTAG_ ((1<<(sizeof(msg_id_t)*8))-1) # define NB_SOCKETS_ /* define NB_SOCKETS to allow non-blocking path */ #elif defined(HITACHI) # include "sr8k.h" #elif defined(BGML) # include "bgml.h" # include "bgmldefs.h" # define NB_CMPL_T BG1S_t typedef long msg_tag_t; #elif defined(ARMCIX) # ifndef ARMCIX_OPAQUE_SIZE # define ARMCIX_OPAQUE_SIZE 8 # endif typedef char armcix_opaque_t [ARMCIX_OPAQUE_SIZE]; # define NB_CMPL_T armcix_opaque_t typedef long msg_tag_t; #elif defined(MPI_SPAWN) || defined(MPI_MT) # include "mpi2.h" typedef long msg_tag_t; #else typedef long msg_tag_t; #endif #ifdef OPENIB # include "pendbufs.h" #endif #ifndef CLEAR_HNDL_FIELD # define CLEAR_HNDL_FIELD(_x) #endif #define ACK_QUIT 0 #define QUIT 33 #define ATTACH 34 #define REGISTER 35 /*\ the internal request structure for non-blocking api. \*/ typedef struct{ unsigned int tag; short int bufid; short int agg_flag; int op; int proc; #ifdef PORTALS int flag; #endif #ifdef NB_CMPL_T NB_CMPL_T cmpl_info; #endif #ifdef BGML unsigned count; #endif } armci_ireq_t; /*\ the internal request structure for non-blocking api. \*/ typedef armci_ireq_t* armci_ihdl_t; extern void armci_set_nbhandle_bufid(armci_ihdl_t nb_handle, char *buf, int val); extern void set_nbhandle(armci_ihdl_t *nbh, armci_hdl_t *nb_handle, int op, int proc); typedef struct { #if 0 int to:16; /* message recipient */ int from:16; /* message sender */ #else short int to; /* message recipient */ short int from; /* message sender */ #endif unsigned int operation:8; /* operation code */ #if defined(DOELAN4) unsigned int format:2; /* data format used */ unsigned int dowait:1; /* indicates if should wait for data */ unsigned int inbuf:1; /* data is in one of the buffers */ #elif defined(CLIENT_BUF_BYPASS) || defined(LAPI2) unsigned int format:2; /* data format used */ unsigned int pinned:1; /* indicates if sender memory was pinned */ unsigned int bypass:1; /* indicate if bypass protocol used */ #else unsigned int format:4; /* data format used */ #endif unsigned int bytes:20; /* number of bytes requested */ int datalen; /* >0 in lapi means that data is included */ unsigned int ehlen:8; /* size of extra header and the end of descr */ signed int dscrlen:24; /* >0 in lapi means that descriptor is included */ msg_tag_t tag; /* message tag for response to this request, MUST BE LAST */ }request_header_t; /*******gpc call strctures*************/ #if HAVE_SIGNAL_H # include #endif #define MAX_GPC_REQ 1 #define MAX_GPC_REPLY_LEN (64*1024) #define MAX_GPC_SEND_LEN (64*1024) #define GPC_COMPLETION_SIGNAL SIGUSR1 typedef struct { int hndl; int hlen, dlen; void *hdr, *data; int rhlen, rdlen; void *rhdr, *rdata; } gpc_call_t; typedef struct { int active; /* int zombie; */ request_header_t msginfo; gpc_call_t call; char send[MAX_GPC_SEND_LEN]; char reply[MAX_GPC_REPLY_LEN]; } gpc_buf_t; /* gpc_buf_t *gpc_req; */ extern gpc_buf_t *gpc_req; extern void block_pthread_signal(int signo); extern void unblock_pthread_signal(int signo); /*******structures copied from async.c for storing cmpl dscr for nb req*******/ #define UBUF_LEN 112 typedef struct { unsigned int tag; /* request id*/ short int bufid; /* communication buffer id */ short int protocol; /* what does this buf hold?*/ union { void *dscrbuf; /*in case dscr below is not enough, do a*/ double pad; /*malloc, save pointer in dscrbuf and use it*/ }ptr; char dscr[UBUF_LEN]; /*place to store the dscr*/ }_buf_info_t; #define BUF_INFO_T _buf_info_t extern BUF_INFO_T *_armci_buf_to_bufinfo(void *buf); #define BUF_TO_BUFINFO _armci_buf_to_bufinfo void armci_complete_req_buf(BUF_INFO_T *info, void *buffer); extern INLINE BUF_INFO_T *_armci_id_to_bufinfo(int bufid); #if 0 && defined(DATA_SERVER) && defined(SOCKETS) #define MAX_BUFS 1 #define MAX_SMALL_BUFS 1 #else #define MAX_BUFS 15 #define MAX_SMALL_BUFS 16 #endif /* tracks sockets used for receiving responces from data server (GET) */ typedef struct { int socks[MAX_BUFS+MAX_SMALL_BUFS]; /* sock # or -1 if not used */ int ready[MAX_BUFS+MAX_SMALL_BUFS]; /* 1 - ready, 0 - not */ } active_socks_t; /*valid values for the element protocol in BUF_INFO_T*/ #define SDSCR_IN_PLACE 1 /*indicated that strided descriptor is in place*/ #define VDSCR_IN_PLACE 2 /*indicated that vector descriptor is in place*/ #define VDSCR_IN_PTR 3 /*indicates that the vector descriptor in allocated and pointer stored in dscrbuf */ /****************************************************************************/ #ifndef MSG_BUFLEN_DBL # if defined(HITACHI) # define MSG_BUFLEN_DBL 0x50000 # else # define MSG_BUFLEN_DBL 50000 # endif #endif #define MSG_BUFLEN sizeof(double)*MSG_BUFLEN_DBL extern char* MessageRcvBuffer; extern char* MessageSndBuffer; #ifdef LAPI # define GET_SEND_BUFFER_(_size)(MessageSndBuffer+sizeof(lapi_cmpl_t));\ CLEAR_COUNTER(*((lapi_cmpl_t*)MessageSndBuffer));\ SET_COUNTER(*((lapi_cmpl_t*)MessageSndBuffer),1); # define GET_SEND_BUFFER _armci_buf_get # define GA_SEND_REPLY armci_lapi_send #else # ifdef SOCKETS # define GA_SEND_REPLY(tag, buf, len, p) armci_sock_send(p,buf,len) # else # define GA_SEND_REPLY(tag, buf, len, p) # endif #endif #ifdef QUADRICS_ # define GET_SEND_BUFFER(_size,_op,_to) MessageSndBuffer;\ while(((request_header_t*)MessageSndBuffer)->tag)\ armci_util_spin(100, MessageSndBuffer) # define FREE_SEND_BUFFER(_ptr) ((request_header_t*)MessageSndBuffer)->tag = (void*)0 #endif #ifndef GET_SEND_BUFFER # define GET_SEND_BUFFER(_size,_op,_to) MessageSndBuffer #endif #ifndef FREE_SEND_BUFFER #define FREE_SEND_BUFFER(_ptr) #endif #ifndef INIT_SENDBUF_INFO #define INIT_SENDBUF_INFO(_hdl,_buf,_op,_proc) #endif typedef struct { char *buf; char* buf_posted; int count; int proc; int op; int extra; } buf_arg_t; /*includes for SERVER_LOCK*/ #if defined(SERVER_THREAD) && !defined(VIA) extern void armci_rem_lock(int mutex, int proc, int *ticket); extern void armci_rem_unlock(int mutex, int proc, int ticket); extern void armci_unlock_waiting_process(msg_tag_t tag,int proc, int ticket); #endif #ifdef PIPE_BUFSIZE extern void armcill_pipe_post_bufs(void *ptr, int stride_arr[], int count[], int strides, void* argvoid); extern void armcill_pipe_extract_data(void *ptr,int stride_arr[],int count[], int strides, void* argvoid); extern void armcill_pipe_send_chunk(void *data, int stride_arr[],int count[], int strides, void* argvoid); #endif extern void armci_send_strided(int proc, request_header_t *msginfo, char *bdata, void *ptr, int strides, int stride_arr[], int count[]); extern void armci_rcv_hdlr(request_header_t* msginfo); extern char *armci_rcv_data(int proc, request_header_t *msginfo); extern void armci_rcv_strided_data_bypass(int proc, request_header_t *msginfo, void *ptr, int stride_levels); extern void armci_send_strided_data_bypass(int proc, request_header_t *msginfo, void *loc_buf, int msg_buflen, void *loc_ptr, int *loc_stride_arr, void *rem_ptr, int *rem_stride_arr, int *count, int stride_levels); extern void armci_rcv_strided_data(int proc, request_header_t* msginfo, int datalen, void *ptr, int strides,int stride_arr[],int count[]); extern void armci_send_strided_data(int proc, request_header_t *msginfo, char *bdata, void *ptr, int strides, int stride_arr[], int count[]); extern void armci_send_req(int proc, request_header_t* msginfo, int len); extern void armci_server_rmw(request_header_t* msginfo,void* ptr, void* pextra); extern int armci_rem_vector(int op, void *scale, armci_giov_t darr[],int len, int proc,int flag,armci_ihdl_t nb_handle); extern int armci_rem_strided(int op, void* scale, int proc, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, ext_header_t *h, int lockit,armci_ihdl_t nb_handle); extern void armci_rem_rmw(int op, int *ploc, int *prem, int extra, int proc); extern void armci_rem_ack(int clus); extern void armci_server(request_header_t *msginfo, char *dscr, char* buf, int buflen); extern void armci_server_vector(request_header_t *msginfo, char *dscr, char* buf, int buflen); extern void armci_serv_attach_req(void *info, int ilen, long size, void* resp,int rlen); extern void armci_server_lock(request_header_t *msginfo); extern void armci_server_unlock(request_header_t *msginfo, char* dscr); extern void armci_create_server_thread ( void* (* func)(void*) ); extern int armci_server_lock_mutex(int mutex, int proc, msg_tag_t tag); extern void armci_send_data(request_header_t* msginfo, void *data); extern int armci_server_unlock_mutex(int mutex, int p, int tkt, msg_tag_t* tag); extern void armci_rcv_vector_data(int p, request_header_t* msginfo, armci_giov_t dr[], int len); #if !defined(LAPI) extern void armci_wait_for_server(); extern void armci_start_server(); extern void armci_transport_cleanup(); extern int armci_send_req_msg(int proc, void *buf, int bytes); extern void armci_WriteToDirect(int proc, request_header_t* msginfo, void *buf); extern char *armci_ReadFromDirect(int proc, request_header_t *msginfo, int len); extern void armci_init_connections(); extern void *armci_server_code(void *data); extern void armci_rcv_req(void *mesg, void *phdr, void *pdescr, void *pdata, int *buflen); extern void armci_client_connect_to_servers(); extern void armci_data_server(void *mesg); extern void armci_server_initial_connection(); extern void armci_call_data_server(); #endif #ifdef SOCKETS extern void armci_ReadStridedFromDirect(int proc, request_header_t* msginfo, void *ptr, int strides, int stride_arr[], int count[]); extern void armci_WriteStridedToDirect(int proc, request_header_t* msginfo, void *ptr, int strides, int stride_arr[], int count[]); extern void armci_serv_quit(); extern int armci_send_req_msg_strided(int proc, request_header_t *msginfo, char *ptr, int strides, int stride_arr[],int count[]); extern void armci_server_goodbye(request_header_t* msginfo); #endif #if defined(MPI_SPAWN) || defined(MPI_MT) extern void armci_serv_quit(); extern void armci_server_goodbye(request_header_t* msginfo); #endif #ifdef HITACHI extern void armci_server_goodbye(request_header_t* msginfo); extern void armci_serv_quit(); #endif extern void armci_server_ipc(request_header_t* msginfo, void* descr, void* buffer, int buflen); #ifdef PIPE_BUFSIZE extern void armci_pipe_prep_receive_strided(request_header_t *msginfo,char *buf, int strides, int stride_arr[], int count[], int bufsize); extern void armci_pipe_receive_strided(request_header_t* msginfo, void *ptr, int stride_arr[], int count[], int strides); extern void armci_pipe_send_req(int proc, void *buf, int bytes); #endif extern void armci_rcv_strided_data_bypass_both(int, request_header_t*,void*, int*, int); extern int armci_rem_get(int proc, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, armci_ihdl_t nb_handle,void *mhloc,void *mhrem); #if defined(ALLOW_PIN) && defined(VAPI) extern int armci_two_phase_send(int proc,void *src_ptr,int src_stride_arr[], void *dst_ptr,int dst_stride_arr[],int count[], int stride_levels,void ** context_ptr,armci_ihdl_t nbhandle, ARMCI_MEMHDL_T *mhloc); extern int armci_two_phase_get(int proc, void*src_ptr, int src_stride_arr[], void*dst_ptr,int dst_stride_arr[], int count[], int stride_levels, void**context_ptr, armci_ihdl_t nbhandle, ARMCI_MEMHDL_T *mhloc); #endif #endif ga-5-3/armci/src/include/copy.h0000640005473000001440000004346612115161655015244 0ustar d3n000users/* $Id: copy.h,v 1.86.2.6 2007-08-29 17:32:32 manoj Exp $ */ #ifndef _COPY_H_ #define _COPY_H_ #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #ifdef DECOSF #include #endif #if 1 || defined(HITACHI) || defined(CRAY_T3E) || defined(CRAY_XT) || defined(BGML) # define MEMCPY #endif #if defined(LINUX64) && defined(SGIALTIX) && defined(MPI) /* fastbcopy from Wayne Vieira and Gerardo Cisneros */ #define MEMCPY #define armci_copy(src, dst, len) _fastbcopy(src, dst, len) #define memcpy(dst, src, len) _fastbcopy(src, dst, len) #define bcopy(src, dst, len) _fastbcopy(src, dst, len) #endif #ifndef EXTERN # define EXTERN extern #endif #ifdef NEC # define memcpy1 _VEC_memcpy # define armci_copy1(src,dst,n) _VEC_memcpy((dst),(src),(n)) EXTERN long long _armci_vec_sync_flag; #endif #if defined(SGI) || defined(FUJITSU) || defined(HPUX) || defined(SOLARIS) || defined (DECOSF) || defined(__ia64__) || defined(__crayx1) # define PTR_ALIGN #endif #if defined(NB_NONCONT) && !defined(CRAY_SHMEM) && !defined(QUADRICS) && !defined(PORTALS) #error NB_NONCONT is only available on CRAY_SHMEM,QUADRICS and PORTALS #endif #if defined(SHMEM_HANDLE_SUPPORTED) && !defined(CRAY_SHMEM) #error SHMEM_HANDLE_SUPPORTED should not be defined on a non CRAY_SHMEM network #endif #if defined(MEMCPY) && !defined(armci_copy) #if defined(BGML) #define armci_copy(src, dst, n) BGLML_memcpy((dst), (src), (n)) #else # define armci_copy(src,dst,n) memcpy((dst), (src), (n)) #endif #endif #ifdef NEC # define MEM_FENCE {mpisx_clear_cache(); _armci_vec_sync_flag=1;mpisx_syncset0_long(&_armci_vec_sync_flag);} #endif #ifdef DECOSF # define MEM_FENCE asm ("mb") #endif #if defined(NEED_MEM_SYNC) # ifdef AIX # define MEM_FENCE {int _dummy=1; _clear_lock((int *)&_dummy,0); } # elif defined(__ia64) # if defined(__GNUC__) && !defined (__INTEL_COMPILER) # define MEM_FENCE __asm__ __volatile__ ("mf" ::: "memory"); # else /* Intel Compiler */ extern void _armci_ia64_mb(); # define MEM_FENCE _armci_ia64_mb(); # endif # elif defined(LINUX) && defined(__GNUC__) && defined(__ppc__) # define MEM_FENCE \ __asm__ __volatile__ ("isync" : : : "memory"); # endif #endif #ifndef armci_copy # ifdef PTR_ALIGN # define armci_copy(src,dst,n) \ do if( ((n) < THRESH1D) || ((n)%ALIGN_SIZE) || \ ((unsigned long)(src)%ALIGN_SIZE) ||\ ((unsigned long)(dst)%ALIGN_SIZE)) memcpy((dst),(src),(n));\ else{ int _bytes=(n)/sizeof(double); DCOPY1D((double*)(src),(double*)(dst),&_bytes);}\ while (0) # else # define armci_copy(src,dst,n) \ do if( ((n) < THRESH1D) || ((n)%ALIGN_SIZE) ) memcpy((dst), (src), (n));\ else{ int _bytes=(n)/sizeof(double); DCOPY1D((double*)(src),(double*)(dst),&_bytes);}\ while (0) # endif #endif /****************************** 2D Copy *******************/ #ifndef MEMCPY # define DCopy2D(rows, cols, src_ptr, src_ld, dst_ptr, dst_ld){\ int rrows, ldd, lds, ccols;\ rrows = (rows);\ lds = (src_ld);\ ldd = (dst_ld);\ ccols = (cols);\ DCOPY2D(&rrows, &ccols, src_ptr, &lds,dst_ptr,&ldd);\ } #else # define DCopy2D(rows, cols, src_ptr, src_ld, dst_ptr, dst_ld){\ int j, nbytes = sizeof(double)* rows;\ char *ps=src_ptr, *pd=dst_ptr;\ for (j = 0; j < cols; j++){\ armci_copy(ps, pd, nbytes);\ ps += sizeof(double)* src_ld;\ pd += sizeof(double)* dst_ld;\ }\ } #endif # define ByteCopy2D(bytes, count, src_ptr, src_stride, dst_ptr,dst_stride){\ int _j;\ char *ps=src_ptr, *pd=dst_ptr;\ for (_j = 0; _j < count; _j++){\ armci_copy(ps, pd, bytes);\ ps += src_stride;\ pd += dst_stride;\ }\ } #if defined(FUJITSU) # define armci_put2D(p, bytes,count,src_ptr,src_stride,dst_ptr,dst_stride)\ CopyPatchTo(src_ptr, src_stride, dst_ptr, dst_stride, count,bytes, p) # define armci_get2D(p, bytes, count, src_ptr,src_stride,dst_ptr,dst_stride)\ CopyPatchFrom(src_ptr, src_stride, dst_ptr, dst_stride,count,bytes,p) #elif defined(HITACHI) || defined(_ELAN_PUTGET_H) && !defined(NB_NONCONT) #if defined(QUADRICS) #if 0 # define WAIT_FOR_PUTS elan_putWaitAll(elan_base->state,200) # define WAIT_FOR_GETS elan_getWaitAll(elan_base->state,200) #else # define WAIT_FOR_PUTS armcill_wait_put() # define WAIT_FOR_GETS armcill_wait_get() extern void armcill_wait_put(); extern void armcill_wait_get(); #endif #endif extern void armcill_put2D(int proc, int bytes, int count, void* src_ptr,int src_stride, void* dst_ptr,int dst_stride); extern void armcill_get2D(int proc, int bytes, int count, void* src_ptr,int src_stride, void* dst_ptr,int dst_stride); # define armci_put2D armcill_put2D # define armci_get2D armcill_get2D #elif defined(NB_NONCONT) extern void armcill_wait_put(); extern void armcill_wait_get(); # define WAIT_FOR_PUTS armcill_wait_put() # define WAIT_FOR_GETS armcill_wait_get() extern void armcill_put2D(int proc, int bytes, int count, void* src_ptr,int src_stride, void* dst_ptr,int dst_stride); extern void armcill_get2D(int proc, int bytes, int count, void* src_ptr,int src_stride, void* dst_ptr,int dst_stride); # define armci_put2D armcill_put2D # define armci_get2D armcill_get2D # if defined(QUADRICS) # define armcill_nb_put(_dst, _src, _sz, _proc, _hdl)\ _hdl = elan_put(elan_base->state,_src,_dst,(size_t)_sz,_proc) # define armcill_nb_get(_dst, _src, _sz, _proc, _hdl)\ _hdl = elan_get(elan_base->state,_src,_dst,(size_t)_sz,_proc) # define armcill_nb_wait(_hdl)\ elan_wait(_hdl,100) # elif defined(CRAY_SHMEM) # define armcill_nb_wait(_hdl)\ shmem_wait_nb(_hdl) /*VT:this should be ifdef'ed based on if shmem_handle is defined or not*/ # if defined (CRAY_XT) # define armcill_nb_put(_dst, _src, _sz, _proc, _hdl)\ shmem_putmem(_dst, _src, (size_t)_sz, _proc) # define armcill_nb_get(_dst, _src, _sz, _proc, _hdl)\ shmem_getmem(_dst, _src, (size_t)_sz, _proc) # else # define armcill_nb_put(_dst, _src, _sz, _proc, _hdl)\ _hdl = shmem_putmem_nb(_dst, _src, (size_t)_sz, _proc, &(_hdl)) # define armcill_nb_get(_dst, _src, _sz, _proc, _hdl)\ _hdl = shmem_getmem_nb(_dst, _src, (size_t)_sz, _proc, &(_hdl)) # endif # endif #else # define armci_put2D(proc,bytes,count,src_ptr,src_stride,dst_ptr,dst_stride){\ int _j;\ char *ps=src_ptr, *pd=dst_ptr;\ for (_j = 0; _j < count; _j++){\ armci_put(ps, pd, bytes, proc);\ ps += src_stride;\ pd += dst_stride;\ }\ } # define armci_get2D(proc,bytes,count,src_ptr,src_stride,dst_ptr,dst_stride){\ int _j;\ char *ps=src_ptr, *pd=dst_ptr;\ for (_j = 0; _j < count; _j++){\ armci_get(ps, pd, bytes, proc);\ ps += src_stride;\ pd += dst_stride;\ }\ } #endif /* macros to ensure ordering of consecutive puts or gets following puts */ #if defined(LAPI) # include "lapidefs.h" #elif defined(_CRAYMPP) || defined(QUADRICS) || defined(__crayx1)\ || defined(CRAY_SHMEM) || defined(PORTALS) #if defined(CRAY) || defined(CRAY_XT) # include #else # include #ifndef ptrdiff_t # include #endif # include #endif # ifdef ELAN_ACC # define FENCE_NODE(p) {\ if(((p)armci_clus_last))armci_elan_fence(p);} # define UPDATE_FENCE_STATE(p, op, nissued) # else int cmpl_proc; # ifdef DECOSF # define FENCE_NODE(p) if(cmpl_proc == (p)){\ if(((p)armci_clus_last))shmem_quiet();\ else asm ("mb"); } # else # define FENCE_NODE(p) if(cmpl_proc == (p)){\ if(((p)armci_clus_last))shmem_quiet(); } # endif # define UPDATE_FENCE_STATE(p, op, nissued) if((op)==PUT) cmpl_proc=(p); # endif #else # if defined(GM) && defined(ACK_FENCE) extern void armci_gm_fence(int p); # define FENCE_NODE(p) armci_gm_fence(p) # elif defined(BGML) # include "bgmldefs.h" # define FENCE_NODE(p) BGML_WaitProc(p) # elif defined(ARMCIX) # define FENCE_NODE(p) ARMCIX_Fence(p) # else # define FENCE_NODE(p) # endif # define UPDATE_FENCE_STATE(p, op, nissued) #endif #ifdef NEC # define THRESH 1 # define THRESH1D 1 #else # define THRESH 32 # define THRESH1D 512 #endif #define ALIGN_SIZE sizeof(double) /********* interface to C 1D and 2D memory copy functions ***********/ /* dcopy2d_u_ uses explicit unrolled loops to depth 4 */ void c_dcopy2d_n_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict B, const int* const restrict bld); void c_dcopy2d_u_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict B, const int* const restrict bld); void c_dcopy1d_n_(const double* const restrict A, double* const restrict B, const int* const restrict n); void c_dcopy1d_u_(const double* const restrict A, double* const restrict B, const int* const restrict n); void c_dcopy21_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict buf, int* const restrict cur); void c_dcopy12_(const int* const restrict rows, const int* const restrict cols, double* const restrict A, const int* const restrict ald, const double* const restrict buf, int* const restrict cur); void c_dcopy31_(const int* const restrict rows, const int* const restrict cols, const int* const restrict plns, const double* const restrict A, const int* const restrict aldr, const int* const restrict aldc, double* const restrict buf, int* const restrict cur); void c_dcopy13_(const int* const restrict rows, const int* const restrict cols, const int* const restrict plns, double* const restrict A, const int* const restrict aldr, const int* const restrict aldc, const double* const restrict buf, int* const restrict cur); #if defined(AIX) || defined(BGML) # define DCOPY2D c_dcopy2d_u_ # define DCOPY1D c_dcopy1d_u_ #elif defined(LINUX) || defined(__crayx1) || defined(HPUX64) || defined(DECOSF) || defined(CRAY) || defined(WIN32) || defined(HITACHI) # define DCOPY2D c_dcopy2d_n_ # define DCOPY1D c_dcopy1d_n_ #else # define DCOPY2D c_dcopy2d_u_ # define DCOPY1D c_dcopy1d_u_ #endif #define DCOPY21 c_dcopy21_ #define DCOPY12 c_dcopy12_ #define DCOPY31 c_dcopy31_ #define DCOPY13 c_dcopy13_ /***************************** 1-Dimensional copy ************************/ #if defined(QUADRICS) # include # if defined(_ELAN_PUTGET_H) # define qsw_put(src,dst,n,proc) \ elan_wait(elan_put(elan_base->state,src,dst,n,proc),elan_base->waitType) # define qsw_get(src,dst,n,proc) \ elan_wait(elan_get(elan_base->state,src,dst,n,proc),elan_base->waitType) /* # define ARMCI_NB_PUT(src,dst,n,proc,phandle)\ *(phandle)=elan_put(elan_base->state,src,dst,n,proc) */ #ifdef DOELAN4 extern void armci_elan_put_with_tracknotify(char *src,char *dst,int n,int proc, ELAN_EVENT **phandle); # define ARMCI_NB_PUT(src,dst,n,proc,phandle)\ armci_elan_put_with_tracknotify(src,dst,n,proc,phandle) #endif # define ARMCI_NB_GET(src,dst,n,proc,phandle)\ *(phandle)=elan_get(elan_base->state,src,dst,n,proc) # define ARMCI_NB_WAIT(handle) if(handle)elan_wait(handle,elan_base->waitType) # define ARMCI_NB_TEST(handle,_succ) (*(_succ))= (handle)? !elan_poll(handle,1L): 1 # else # define qsw_put(src,dst,n,proc) shmem_putmem((dst),(src),(int)(n),(proc)) # define qsw_get(src,dst,n,proc) shmem_getmem((dst),(src),(int)(n),(proc)) # endif # define armci_put(src,dst,n,proc)\ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { qsw_put(src,dst,n,proc);} # define armci_get(src,dst,n,proc) \ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { qsw_get((src),(dst),(int)(n),(proc));} #elif defined(CRAY_T3E) || defined(CRAY_SHMEM) # define armci_copy_disabled(src,dst,n)\ if((n)<256 || n%sizeof(long) ) memcpy((dst),(src),(n));\ else {\ shmem_put((long*)(dst),(long*)(src),(int)(n)/sizeof(long),armci_me);\ shmem_quiet(); } # define armci_put(src,dst,n,proc) \ shmem_put32((void *)(dst),(void *)(src),(int)(n)/4,(proc));\ shmem_quiet() # define armci_get(src,dst,n,proc) \ shmem_get32((void *)(dst),(void *)(src),(int)(n)/4,(proc));\ shmem_quiet() #elif defined(HITACHI) extern void armcill_put(void *src, void *dst, int bytes, int proc); extern void armcill_get(void *src, void *dst, int bytes, int proc); # define armci_put(src,dst,n,proc) \ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { armcill_put((src), (dst),(n),(proc));} # define armci_get(src,dst,n,proc)\ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { armcill_get((src), (dst),(n),(proc));} #elif defined(FUJITSU) # include "fujitsu-vpp.h" # ifndef __sparc # define armci_copy(src,dst,n) _MmCopy((char*)(dst), (char*)(src), (n)) # endif # define armci_put CopyTo # define armci_get CopyFrom #elif defined(LAPI) # include extern lapi_handle_t lapi_handle; # define armci_put(src,dst,n,proc)\ if(proc==armci_me){\ armci_copy(src,dst,n);\ } else {\ if(LAPI_Put(lapi_handle, (uint)proc, (uint)n, (dst), (src),\ NULL,&(ack_cntr[ARMCI_THREAD_IDX].cntr),&cmpl_arr[proc].cntr))\ ARMCI_Error("LAPI_put failed",0); else;} /**** this copy is nonblocking and requires fence to complete!!! ****/ # define armci_get(src,dst,n,proc) \ if(proc==armci_me){\ armci_copy(src,dst,n);\ } else {\ if(LAPI_Get(lapi_handle, (uint)proc, (uint)n, (src), (dst), \ NULL, &(get_cntr[ARMCI_THREAD_IDX].cntr)))\ ARMCI_Error("LAPI_Get failed",0);else;} # define ARMCI_NB_PUT(src,dst,n,proc,cmplt)\ {if(LAPI_Setcntr(lapi_handle, &((cmplt)->cntr), 0))\ ARMCI_Error("LAPI_Setcntr in NB_PUT failed",0);\ (cmplt)->val=1;\ if(LAPI_Put(lapi_handle, (uint)proc, (uint)n, (dst), (src),\ NULL, &((cmplt)->cntr), &cmpl_arr[proc].cntr))\ ARMCI_Error("LAPI_put failed",0); else;} # define ARMCI_NB_GET(src,dst,n,proc,cmplt)\ {if(LAPI_Setcntr(lapi_handle, &((cmplt)->cntr), 0))\ ARMCI_Error("LAPI_Setcntr in NB_GET failed",0);\ (cmplt)->val=1;\ if(LAPI_Get(lapi_handle, (uint)proc, (uint)n, (src), (dst), \ NULL, &((cmplt)->cntr)))\ ARMCI_Error("LAPI_Get NB_GET failed",0);else;} # define ARMCI_NB_WAIT(cmplt) CLEAR_COUNTER((cmplt)) # define ARMCI_NB_TEST(cmplt,_succ) TEST_COUNTER((cmplt),(_succ)) #elif defined(PORTALS) # define armci_put(src,dst,n,proc) \ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { PARMCI_Put((src), (dst),(n),(proc));} # define armci_get(src,dst,n,proc)\ if(((proc)<=armci_clus_last) && ((proc>= armci_clus_first))){\ armci_copy(src,dst,n);\ } else { PARMCI_Get((src), (dst),(n),(proc));} #if 0 # define ARMCI_NB_PUT(src,dst,n,proc,cmplt)\ nb_handle->tag=GET_NEXT_NBTAG();armci_portals_put((proc),(src),\ (dst),(n),cmplt,nb_handle->tag) # define ARMCI_NB_GET(src,dst,n,proc,cmplt)\ nb_handle->tag=GET_NEXT_NBTAG();armci_portals_get((proc),(src),\ (dst),(n),cmplt,nb_handle->tag) #endif #elif defined(BGML) #define armci_get(src, dst, n, p) PARMCI_Get(src, dst, n, p) #define armci_put(src, dst, n, p) PARMCI_Put(src, dst, n, p) #elif defined(ARMCIX) #define armci_get(src, dst, n, p) PARMCI_Get(src, dst, n, p) #define armci_put(src, dst, n, p) PARMCI_Put(src, dst, n, p) #define ARMCI_NB_WAIT(cmplt) ARMCIX_Wait(&(cmplt)) #else # define armci_get(src,dst,n,p) armci_copy((src),(dst),(n)) # define armci_put(src,dst,n,p) armci_copy((src),(dst),(n)) #endif #ifndef MEM_FENCE # define MEM_FENCE {} #endif #ifndef armci_copy_fence # define armci_copy_fence armci_copy #endif #endif ga-5-3/armci/src/include/kr_malloc.h0000640005473000001440000000642211631727330016224 0ustar d3n000users#ifndef KR_MALLOC_H /* K&R malloc */ #define KR_MALLOC_H #ifdef CRAY #define LOG_ALIGN 6 #elif defined(KSR) #define LOG_ALIGN 7 #else #define LOG_ALIGN 6 #endif #define ALIGNMENT (1 << LOG_ALIGN) #define KR_CTX_SHMEM 101 #define KR_CTX_LOCALMEM 102 union header{ struct { unsigned valid1; /* Token to check if is not overwritten */ union header *ptr; /* next block if on free list */ int shmid; /* next block's shared memory id */ long shmoffset; /* next block's shmem offset */ size_t shmsize; /* next block's shared memory segment size */ size_t size; /* size of this block*/ unsigned valid2; /* Another token acting as a guard */ } s; char align[ALIGNMENT]; /* Align to ALIGNMENT byte boundary */ }; typedef union header Header; typedef struct malloc_context { size_t usize; /* unit size in bytes */ size_t nalloc; /* No. of units of length ALIGNMENT */ size_t max_nalloc; /* Maximum no. of units that can get */ void * (*alloc_fptr)(); /* function pointer to memory alloc routine */ size_t total; /* Amount request from system in units */ long nchunk; /* No. of chunks of system memory */ long inuse; /* Amount in use in units */ long maxuse; /* Maximum value of inuse */ long nfrags; /* No. of fragments divided into */ long nmcalls; /* No. of calls to _armci_alloc() */ long nfcalls; /* No. of calls to memfree */ int ctx_type; /* context id. -1 represents ctx_local context. otherwise, it is ctx_shmem context. */ int shmid; /* first free block's (i.e.freep) shmem id */ long shmoffset; /* first free block's shmem offset */ size_t shmsize; /* first free block's shmem total size */ Header base; /* empty list to get started */ Header *freep; /* start of free list */ Header *usedp; /* start of used list */ } context_t; /* Memory required to store the shmem context in shared memory. This shmem context shuld be stored in shared memory and is stored in the first shared memory segment created (i.e.armci_krmalloc_init_ctxshmem) */ #define SHMEM_CTX_MEM (sizeof(context_t)+sizeof(void*)) #define SHMEM_CTX_UNITS ((SHMEM_CTX_MEM + sizeof(Header) - 1)>>LOG_ALIGN) + 1; extern void kr_malloc_init(size_t usize, /* unit size in bytes */ size_t nalloc, size_t max_nalloc, void * (*alloc_fptr)(), /* memory alloc routine */ int debug, context_t *ctx); /* Returns data aligned on a quad boundary. Even if the request size is zero it returns a non-zero pointer. */ extern char *kr_malloc(size_t size, context_t *ctx); /* Frees memory allocated by kr_malloc(). Ignores NULL pointers but must not be called twice for the same pointer or called with non-memalloc'ed pointers */ extern void kr_free(char *ptr, context_t *ctx); /* Print to standard output the usage statistics ... a wrapper for kr_malloc_stats(); */ extern void kr_malloc_print_stats(context_t *ctx); extern void kr_malloc_verify(context_t *ctx); #endif ga-5-3/armci/src/include/armcip.h0000640005473000001440000003723311744312006015533 0ustar d3n000users/* $Id: armcip.h,v 1.82.2.9 2007-08-29 17:32:31 manoj Exp $ */ /* armci private header file */ #ifndef _ARMCI_P_H #define _ARMCI_P_H #if HAVE_STDLIB_H # include #endif #include "armci.h" #include "parmci.h" #include "message.h" /*#define ARMCI_PR_DBG(__ARMCI_ST,__ARMCI_NU) \ printf("\n%d:%s:%d:%s:%s:%d",armci_me,__FILE__,__LINE__,FUNCTION_NAME,__ARMCI_ST,__ARMCI_NU)*/ #define ARMCI_PR_DBG(__ARMCI_ST,__ARMCI_NU) #ifdef QUADRICS #include #ifdef QSNETLIBS_VERSION_CODE #ifndef DECOSF # define ELAN_ACC # define PENDING_OPER(x) ARMCI_ACC_INT #endif # if QSNETLIBS_VERSION_CODE > QSNETLIBS_VERSION(1,5,0) # define LIBELAN_ATOMICS # endif #endif extern void armci_elan_fence(int p); #endif /* we got problems on IA64/Linux64 with Elan if inlining is used */ #if defined(__GNUC__) && !defined(QUADRICS) # define INLINE inline #else # define INLINE #endif #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include # define sleep(x) Sleep(100*(x)) #endif #if (defined(SYSV) || defined(WIN32)|| defined(MMAP)) && !defined(NO_SHM) && !defined(HITACHI) && !defined(CATAMOUNT) #define CLUSTER #ifdef SERVER_THREAD # define SERVER_NODE(c) (armci_clus_info[(c)].master); # define NODE_SERVER(c) (c); #else # define SOFFSET -10000 # define SERVER_NODE(c) ((int)(SOFFSET -armci_clus_info[(c)].master)); # define NODE_SERVER(c) ((int)(SOFFSET - c)) #endif #endif /**Symbol to stamp end of buffers in certain networks*/ #define ARMCI_STAMP 20080528 /*\GPC call stuff \*/ typedef struct { int hndl, hlen, dlen; void *hdr, *data; }gpc_send_t; /*\ Stuff for non-blocking API \*/ #define NB_MULTI -1 /*more than one armci buffer(buffers.c) used for nbcall*/ #define NB_NONE -2 /*no armci buffer(buffers.c) used for nbcall*/ extern unsigned int _armci_get_next_tag(); #define GET_NEXT_NBTAG _armci_get_next_tag #define ARMCI_MAX_IMPLICIT 15 typedef struct{ int len; int last; void *exthdr; } ext_header_t; typedef struct{ int val; void *ptr; } armci_flag_t; #if defined(LAPI) || defined(PTHREADS) || defined(POSIX_THREADS) # include typedef pthread_t thread_id_t; # define THREAD_ID_SELF pthread_self #elif defined(WIN32) # include typedef DWORD thread_id_t; # define THREAD_ID_SELF GetCurrentThreadId #else typedef int thread_id_t; # define THREAD_ID_SELF() 1 #endif extern thread_id_t armci_usr_tid; extern thread_id_t armci_serv_tid; #ifdef SERVER_THREAD # define SERVER_CONTEXT (armci_serv_tid == THREAD_ID_SELF()) #else # define SERVER_CONTEXT (armci_me<0) #endif #if defined(LAPI) || defined(CLUSTER) || defined(CRAY) || defined(CRAY_XT)\ || defined(CRAY_SHMEM) || defined(BGML) || defined(DCMF) # include "request.h" #endif #ifdef ARMCIX #include "armcix.h" #endif /* ------------------------ ARMCI threads support ------------------------- */ #define ARMCI_THREADS_LIMIT 32 #include "utils.h" #if defined(THREAD_SAFE) typedef struct { int max; /* max # of threads per proc */ int avail; /* next available position */ thread_id_t *ids; /* list of threads' ids */ thread_lock_t lock; /* general case lock */ thread_lock_t buf_lock; /* lock for buffer access */ thread_lock_t net_lock; /* lock for network accees */ } armci_user_threads_t; extern armci_user_threads_t armci_user_threads; extern void armci_init_threads(); extern void armci_finalize_threads(); extern int armci_thread_idx(); extern INLINE int armci_register_thread(thread_id_t id); #define ARMCI_THREAD_IDX armci_thread_idx() /* needs to be optimized */ #else # define ARMCI_THREAD_IDX 0 #endif /* ------------------------------------------------------------------------ */ /* min amount of data in strided request to be sent in single TCP/IP message*/ #if defined(SOCKETS) || defined(MPI_SPAWN_ZEROCOPY) # define TCP_PAYLOAD 128 # define LONG_GET_THRESHOLD TCP_PAYLOAD # define LONG_GET_THRESHOLD_STRIDED LONG_GET_THRESHOLD # define LONG_PUT_THRESHOLD 128 #endif #ifdef WIN32 # define bzero(a,len){\ int _i;\ char *_c = (char*)(a);\ for(_i=0; _i< (int)(len); _i++)_c[_i]=(char)0;\ } # define bcopy(a,b,len) memcpy(b,a,len) #else # if HAVE_STRINGS_H # include # endif #endif #if defined(CRAY_XT) || defined(CRAY_T3E) || defined(FUJITSU)\ || defined(HITACHI) || (defined(QUADRICS) && !defined(ELAN_ACC)) #define ACC_COPY #endif #ifndef FATR # ifdef WIN32 # define FATR __stdcall # else # define FATR # endif #endif #define MAX_PROC 8096 #define MAX_STRIDE_LEVEL ARMCI_MAX_STRIDE_LEVEL /* msg tag ARMCI uses in collective ops */ #define ARMCI_TAG 30000 #ifndef EXTRA_MSG_BUFLEN_DBL # define RESERVED_BUFLEN ((sizeof(request_header_t)>>3)+3*MAX_STRIDE_LEVEL) #else # define RESERVED_BUFLEN ((sizeof(request_header_t)>>3)+3*MAX_STRIDE_LEVEL +\ EXTRA_MSG_BUFLEN_DBL) #endif #if defined(HITACHI) # define BUFSIZE ((0x50000) * sizeof(double)) #else /* packing algorithm for double complex numbers requires even number */ # ifdef MSG_BUFLEN_DBL # define BUFSIZE_DBL (MSG_BUFLEN_DBL - RESERVED_BUFLEN) # else # define BUFSIZE_DBL 32768 # endif # define BUFSIZE (BUFSIZE_DBL * sizeof(double)) #endif /* note opcodes must be lower than ARMCI_ACC_OFF !!! */ #define PUT 1 #define GET 2 #define RMW 3 #define LOCK 4 #define UNLOCK 5 #define ACK 6 /* must fit in two bits, see msginfo->format in request.h */ #define STRIDED 1 #define VECTOR 2 extern int armci_me, armci_nproc; extern int _armci_initialized; #ifdef HITACHI extern int sr8k_server_ready; extern double *armci_internal_buffer; #else #if !defined(THREAD_SAFE) extern double armci_internal_buffer[BUFSIZE_DBL]; #endif #endif extern void armci_shmem_init(); extern void armci_krmalloc_init_localmem(); #if 0 extern void armci_die(char *msg, int code); extern void armci_die2(char *msg, int code1, int code2); #endif extern void armci_write_strided(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf); extern void armci_read_strided(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf); extern int armci_op_strided(int op, void* scale, int proc,void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, int lockit,armci_ihdl_t nb_handle); extern int armci_copy_vector(int op, /* operation code */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int armci_acc_vector(int op, /* operation code */ void *scale, /* scale factor */ armci_giov_t darr[],/* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int armci_pack_strided(int op, void* scale, int proc, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, ext_header_t *hdr, int fit_level, int nb, int last,armci_ihdl_t nb_handle); extern int armci_pack_vector(int op, void *scale, armci_giov_t darr[],int len,int proc,armci_ihdl_t nb_handle); extern void armci_lockmem(void *pstart, void* pend, int proc); extern void armci_unlockmem(int proc); extern int armci_acc_copy_strided(int optype, void* scale, int proc, void* src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels); extern void armci_vector_to_buf(armci_giov_t darr[], int len, void* buf); extern void armci_vector_from_buf(armci_giov_t darr[], int len, void* buf); extern void armci_init_fence(); extern void armci_finalize_fence(); #ifdef SOCKETS #ifdef SERVER_THREAD extern void armci_create_server_thread ( void* (* func)(void*) ); extern void armci_terminate_server_thread(); #else extern void armci_create_server_process ( void* (* func)(void*) ); extern void armci_wait_server_process(); extern void RestoreSigChldDfl(); #endif #endif #if defined(MPI_SPAWN) || defined(MPI_MT) extern void armci_create_server_MPIprocess (); #endif #define ARMCI_MAX(a,b) (((a)>(b))?(a):(b)) #define ARMCI_MIN(a,b) (((a)<(b))?(a):(b)) #define ARMCI_ABS(a) (((a) >= 0) ? (a) : (-(a))) #define ARMCI_ACC(op) ((((int)(op))-ARMCI_ACC_INT)>=0) #ifdef CLUSTER extern char *_armci_fence_arr; #ifdef THREAD_SAFE # define FENCE_ARR(p_) (_armci_fence_arr[ARMCI_THREAD_IDX*armci_nproc+p_]) #else # define FENCE_ARR(p_) (_armci_fence_arr[p_]) #endif # define SAMECLUSNODE(p)\ ( ((p) <= armci_clus_last) && ((p) >= armci_clus_first) ) #elif defined(__crayx1) # define SAMECLUSNODE(p) 1 #elif defined(ARMCIX) # define SAMECLUSNODE(p) 0 #else # define SAMECLUSNODE(p) ((p)==armci_me) #endif #if defined(LAPI) || defined(ELAN_ACC) # define ORDER(op,proc)\ if( proc == armci_me || ( ARMCI_ACC(op) && ARMCI_ACC(PENDING_OPER(proc))) );\ else FENCE_NODE(proc) # define UPDATE_FENCE_INFO(proc_) #elif defined(CLUSTER) && !defined(QUADRICS) && !defined(HITACHI)\ && !defined(CRAY_SHMEM) && !defined(PORTALS) # define ORDER(op_,proc_)\ if(!SAMECLUSNODE(proc_) && op_ != GET )FENCE_ARR(proc_)=1 # define UPDATE_FENCE_INFO(proc_) if(!SAMECLUSNODE(proc_))FENCE_ARR(proc_)=1 #else # if defined(GM) && defined(ACK_FENCE) # define ORDER(op,proc) # else # define ORDER(op,proc) if(proc != armci_me) FENCE_NODE(proc) # endif # define UPDATE_FENCE_INFO(proc_) #endif typedef struct { int ptr_array_len; int bytes; void **ptr_array; } armci_riov_t; /*\ consider up to HOSTNAME_LEN characters in host name * we can truncate names of the SP nodes since it is not used * to establish socket communication like on the networks of workstations * SP node names must be distinct within first HOSTNAME_LEN characters \*/ #if defined(LAPI) && defined(AIX) # define HOSTNAME_TRUNCATE # define HOSTNAME_LEN 12 #else # define HOSTNAME_LEN 64 #endif typedef struct { int master; int nslave; char hostname[HOSTNAME_LEN]; } armci_clus_t; extern armci_clus_t *armci_clus_info; extern int armci_nclus, armci_clus_me, armci_master; extern int armci_clus_first, armci_clus_last; extern int armci_clus_id(int p); extern void armci_init_clusinfo(); extern void armci_set_mem_offset(void *ptr); extern int _armci_terminating; extern void armci_acc_2D(int op, void* scale, int proc, void *src_ptr, void *dst_ptr, int bytes, int cols, int src_stride, int dst_stride, int lockit); extern void armci_lockmem_scatter(void *ptr_array[], int len, int bytes, int p); extern void armci_generic_rmw(int op, void *ploc, void *prem, int extra, int p); extern unsigned long armci_max_region(); extern void armci_dispatch_strided(void *ptr, int stride_arr[], int count[], int strides, int fit_level, int nb, int bufsize, void (*fun)(void*,int*,int*,int,void*), void *arg); extern void armci_msg_gop_init(); extern void armci_msg_gop_finalize(); extern void armci_util_spin(int n, void *notused); #if defined(SYSV) || defined(WIN32) extern void armci_shmem_init(); extern void armci_set_shmem_limit_per_core(unsigned long shmemlimit); extern void armci_set_shmem_limit_per_node(int nslaves); extern void armci_set_shmem_limit(unsigned long shmemlimit); #endif #define ALIGN_PTR_LONG(type, x) if( ((long)(x)) % sizeof(long)) { long _y = (long)(x);\ if(sizeof(long)==8){_y>>=3; _y<<=3; }\ else { _y>>=2; _y<<=2; }\ _y += sizeof(long); (x) = (type*)_y; } #define SIXTYFOUR 64 #define ALIGN64ADD(buf) (SIXTYFOUR-(((ssize_t)(buf))%SIXTYFOUR)) #define ALIGNLONGADD(buf) ((((ssize_t)(buf))%sizeof(long))?(sizeof(long)-(((ssize_t)(buf))%sizeof(long))):0) #define SET 1 #define UNSET 0 extern int armci_agg_save_strided_descriptor(void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, int proc, int op, armci_ihdl_t nb_handle); extern int armci_agg_save_giov_descriptor(armci_giov_t darr[], int len, int proc, int op, armci_ihdl_t nb_handle); extern int armci_agg_save_descriptor(void *src, void *dst, int bytes, int proc, int op, int is_registered_put, armci_ihdl_t nb_handle); extern void armci_agg_complete(armci_ihdl_t nb_handle, int condition); extern armci_hdl_t *armci_set_implicit_handle (int op, int proc); extern int armci_getnumcpus(void); extern long armci_util_long_getval(long* p); extern int armci_util_int_getval(int* p); extern void armci_region_register_shm(void *start, long size); extern void armci_region_register_loc(void *start, long size); extern void armci_region_clus_record(int node, void *start, long size); extern void armci_region_init(); extern int armci_region_clus_found(int node, void *start, int size); extern int armci_region_loc_found(void *start, int size); extern int armci_region_both_found(void *loc, void *rem, int size, int node); #ifdef REGIONS_REQUIRE_MEMHDL extern int get_armci_region_local_hndl(void *loc, int node, ARMCI_MEMHDL_T **loc_memhdl); #endif extern void armci_region_exchange(void *start, long size); extern void cpu_yield(); #ifdef ALLOW_PIN extern void armci_global_region_exchange(void *, long); #endif /* -------------------- ARMCI Groups ---------------------- */ /* data structure that caches a group's attribute */ #ifdef BGML #define PCLASS 3 #endif #ifdef MPI typedef int ARMCI_Datatype; extern int ATTR_KEY; /* attribute key */ /* #define ARMCI_GROUP /\*Generic ARMCI implementation*\/ */ typedef struct { armci_clus_t *grp_clus_info; int grp_me; /* my group id */ int grp_nclus; /* number of cluster nodes */ int grp_clus_me; /* my cluster node id */ int mem_offset; /* memory offset */ #ifdef ARMCI_GROUP int nproc; /* #procs in this group*/ int *proc_list; /* Ids of procs in this group (w.r.t. MPI_COMM_WORLD)*/ #endif }armci_grp_attr_t; #include "mpi.h" /**dup of MPI_COMM_WORLD for internal MPI communication*/ extern MPI_Comm ARMCI_COMM_WORLD; typedef MPI_Comm ARMCI_Comm; typedef struct { #ifndef ARMCI_GROUP MPI_Comm icomm; MPI_Group igroup; #endif armci_grp_attr_t grp_attr; }ARMCI_iGroup; armci_grp_attr_t *ARMCI_Group_getattr(ARMCI_Group *grp); extern void armci_group_init(); extern void armci_group_finalize(); extern ARMCI_iGroup* armci_get_igroup_from_group(ARMCI_Group *group); #endif /* ifdef MPI */ /* -------------------------------------------------------- */ /* ------------ ARMCI Chekcpointing/Recovery -------------- */ #ifdef ENABLE_CHECKPOINT extern int armci_init_checkpoint(); extern void armci_create_ckptds(armci_ckpt_ds_t *ckptds, int count); extern int armci_icheckpoint_init(char *filename, ARMCI_Group *grp, int savestack, int saveheap, armci_ckpt_ds_t *ckptds); extern int armci_icheckpoint(int rid); extern int armci_irecover(int rid,int iamreplacement); extern void armci_icheckpoint_finalize(int rid); #endif /* ifdef ENABLE_CHECKPOINT */ /* -------------------------------------------------------- */ #ifdef BGML #define ARMCI_CRITICAL_SECTION_ENTER() BGML_CriticalSection_enter(); #define ARMCI_CRITICAL_SECTION_EXIT() BGML_CriticalSection_exit(); #else #define ARMCI_CRITICAL_SECTION_ENTER() #define ARMCI_CRITICAL_SECTION_EXIT() #endif #endif ga-5-3/armci/src/include/asm-ppc.h0000640005473000001440000000671312140046025015613 0ustar d3n000users/** Atomic instructions for ppc. To be populated as need arises. * @author Sriram Krishnamoorthy */ #ifndef __ATOMICS_PPC__ #define __ATOMICS_PPC__ #if HAVE_ASSERT_H # include #endif #define v4b (volatile unsigned int *) /* sriram's original asm (didn't work) */ static inline void atomic_exchange(void *val, void *ptr, int size) { int ret; assert(size==4); assert(sizeof(unsigned int)==4); assert((((unsigned)ptr)&3)==0); /*make sure it is 4-byte aligned*/ asm volatile( "loop: lwarx %[ret],0,%[ptr] \n\t" /*Load & reserve*/ " stwcx. %[val],0,%[ptr] \n\t" /*Store if still reserved*/ " bne- loop \n\t" /*Loop otherwise*/ : [ret]"=&r"(ret) : [val]"r"(*v4b(val)), [ptr]"r"(v4b(ptr)) : "memory", "cc" ); *v4b(val) = ret; } /* adapted from "Synchronising C/C++ and POWER" by Sarkar et al, appearing in * PLDI'12 */ static inline void acquire_spinlock(void *lock) { int temp; int free = 0; int held = 1; asm volatile( "0: lwarx %0,0,%3 \n" /*load-reserve lock into temp*/ " cmpw %1,%0 \n" /*lock is free?*/ " bne- 0b \n" /*loop if lock not free*/ " stwcx. %2,0,%3 \n" /*store if still reserved*/ " bne- 0b \n" /*loop if lost reservation*/ " isync \n" /*import barrier*/ : "+r"(temp) : "r"(free), "r"(held), "r"(lock) : "cr0", "memory" ); } /* adapted from "Synchronising C/C++ and POWER" by Sarkar et al, appearing in * PLDI'12 */ static inline void release_spinlock(void *lock) { int free = 0; assert(sizeof(unsigned int)==4); assert((((unsigned)lock)&3)==0); /*make sure it is 4-byte aligned*/ /* TODO: lwsync might not be strong enough, consider 'sync' */ asm volatile( "lwsync \n" /*export barrier*/ "stw %0,0(%1) \n" /*normal store to release lock*/ : : "r"(free), "r"(lock) : "memory" ); } /* adapted from "Synchronising C/C++ and POWER" by Sarkar et al, appearing in * PLDI'12 */ static inline int fetch_and_add(void *addr, int inc) { int ret; int tmp; asm volatile( "0: lwarx %0,0,%2 \n" /*load-reserve addr into tmp*/ " mr %1,%0 \n" /*copy tmp into ret*/ " add %0,%3,%0 \n" /*add inc to addr, store in addr*/ " stwcx. %0,0,%2 \n" /*store if still reserved*/ " bne- 0b \n" /*loop if lost reservation*/ : "+r"(tmp), "+r"(ret) : "r"(addr), "r"(inc) ); } /* from http://www.ibm.com/developerworks/rational/library/inline-assembly-C-Cpp-guide/index.html */ /* this did NOT work */ static inline int acquireLock(int *lock){ int returnvalue = 0; int lockval; asm volatile ( "0: lwarx %0,0,%2 \n" //load lock and reserve " cmpwi 0,%0,0 \n" //compare the lock value to 0 " bne 1f \n" //not 0 then exit function " ori %0,%0,1 \n" //set the lock to 1 " stwcx. %0,0,%2 \n" //try to acquire the lock " bne 0b \n" //reservation lost, try again " sync \n" //import barrier " ori %1,%1,1 \n" //set the return value to true "1: \n" //didn't get lock, return false : "+r" (lockval), "+r" (returnvalue) : "r"(lock) //parameter lock is an address : "cr0" ); //cmpwi, stwcx both clobber cr0 return returnvalue; } #undef v4b #endif /* __ATOMICS_PPC__ */ ga-5-3/armci/src/include/atomics-i386.h0000640005473000001440000000231611556662223016412 0ustar d3n000users/** Atomic instructions for i386. To be populated as need arises. * @author Sriram Krishnamoorthy */ #ifndef __ATOMICS_I386__ #define __ATOMICS_I386__ #if HAVE_ASSERT_H # include #endif #define v4b (volatile unsigned int *) static inline void atomic_exchange(void *val, void *ptr, int size) { assert(size == 4); __asm__ __volatile__ ("xchgl %0, %1" : "=r"(*v4b(val)), "+m"(*v4b(ptr)) : "0"(*v4b(val)) : "memory"); } /*SK: fixme. only available in 486+. This breaks i386 compatibility. atomic: *(type*)ploc = *(type*)prem; *(type*)prem += extra*/ static inline void atomic_fetch_and_add(void *prem, void *ploc, int extra, int size) { int _a_temp; assert(size == 4); #if 0 *(int*)ploc = __sync_fetch_and_add((int*)prem, extra); #elif 0 __asm__ __volatile__ ("movq %2, %%rax; \ lock xaddl %0, (%%rax);" : "=r"(_a_temp) : "0"(extra), "m"((int*)prem) : "memory", "rax"); *(int *)ploc = _a_temp; #else __asm__ __volatile__ ("lock xaddl %0, (%2)" : "=r"(_a_temp) : "0"(extra), "r"((int*)prem) : "memory"); *(int *)ploc = _a_temp; #endif } #undef v4b #endif /*__ATOMICS_I386__*/ ga-5-3/armci/src/include/parmci.h0000640005473000001440000001066511734676163015553 0ustar d3n000users#ifndef _PARMCI_H_ #define _PARMCI_H_ #include "armci.h" extern int PARMCI_Acc(int optype, void *scale, void *src, void* dst, int bytes, int proc); extern int PARMCI_AccS(int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc); extern int PARMCI_AccV(int op, void *scale, armci_giov_t * darr, int len, int proc); extern void PARMCI_AllFence(); extern void PARMCI_Barrier(); extern int PARMCI_Create_mutexes(int num); extern int PARMCI_Destroy_mutexes(); extern void PARMCI_Fence(int proc); extern void PARMCI_Finalize(); extern int PARMCI_Free_local(void *ptr); extern int PARMCI_Free(void *ptr); extern int PARMCI_GetS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc); extern double PARMCI_GetValueDouble(void *src, int proc); extern float PARMCI_GetValueFloat(void *src, int proc); extern int PARMCI_GetValueInt(void *src, int proc); extern long PARMCI_GetValueLong(void *src, int proc); extern int PARMCI_GetV(armci_giov_t * darr, int len, int proc); extern int PARMCI_Get(void *src, void *dst, int bytes, int proc); extern int PARMCI_Init(); extern int PARMCI_Init_args(int *argc, char ***argv); extern int PARMCI_Initialized(); extern void PARMCI_Lock(int mutex, int proc); extern void* PARMCI_Malloc_local(armci_size_t bytes); extern int PARMCI_Malloc(void **ptr_arr, armci_size_t bytes); extern void* PARMCI_Memat(armci_meminfo_t * meminfo, long offset); extern void PARMCI_Memget(size_t bytes, armci_meminfo_t * meminfo, int memflg); extern int PARMCI_NbAccS(int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t * nb_handle); extern int PARMCI_NbAccV(int op, void *scale, armci_giov_t * darr, int len, int proc, armci_hdl_t * nb_handle); extern int PARMCI_NbGetS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t * nb_handle); extern int PARMCI_NbGetV(armci_giov_t * darr, int len, int proc, armci_hdl_t * nb_handle); extern int PARMCI_NbGet(void *src, void *dst, int bytes, int proc, armci_hdl_t * nb_handle); extern int PARMCI_NbPutS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t * nb_handle); extern int PARMCI_NbPutValueDouble(double src, void *dst, int proc, armci_hdl_t* nb_handle); extern int PARMCI_NbPutValueFloat(float src, void *dst, int proc, armci_hdl_t* nb_handle); extern int PARMCI_NbPutValueInt(int src, void *dst, int proc, armci_hdl_t* nb_handle); extern int PARMCI_NbPutValueLong(long src, void *dst, int proc, armci_hdl_t* nb_handle); extern int PARMCI_NbPutV(armci_giov_t * darr, int len, int proc, armci_hdl_t * nb_handle); extern int PARMCI_NbPut(void *src, void *dst, int bytes, int proc, armci_hdl_t * nb_handle); extern int PARMCI_Put_flag(void *src, void *dst, int bytes, int *f, int v, int proc); extern int PARMCI_PutS_flag_dir(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc); extern int PARMCI_PutS_flag(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc); extern int PARMCI_PutS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc); extern int PARMCI_PutValueDouble(double src, void *dst, int proc); extern int PARMCI_PutValueFloat(float src, void *dst, int proc); extern int PARMCI_PutValueInt(int src, void *dst, int proc); extern int PARMCI_PutValueLong(long src, void *dst, int proc); extern int PARMCI_PutV(armci_giov_t * darr, int len, int proc); extern int PARMCI_Put(void *src, void *dst, int bytes, int proc); extern int PARMCI_Rmw(int op, void *ploc, void *prem, int extra, int proc); extern int PARMCI_Test(armci_hdl_t * nb_handle); extern void PARMCI_Unlock(int mutex, int proc); extern int PARMCI_WaitAll(); extern int PARMCI_Wait(armci_hdl_t * nb_handle); extern int PARMCI_WaitProc(int proc); extern void parmci_msg_barrier(); extern void parmci_msg_group_barrier(ARMCI_Group *group); extern int parmci_notify(int proc); extern int parmci_notify_wait(int proc, int *pval); #endif /* _PARMCI_H_ */ ga-5-3/armci/src/include/locks.h0000640005473000001440000001305712124235234015371 0ustar d3n000users#ifndef _ARMCI_LOCKS_H_ #define _ARMCI_LOCKS_H_ #if HAVE_SYS_TYPES_H # include #endif #define MAX_LOCKS 1024 #define NUM_LOCKS MAX_LOCKS #if !(defined(PMUTEX) || defined(PSPIN) || defined(CYGNUS) || defined(CRAY_XT)) # include "spinlock.h" #endif #if !(defined(PMUTEX) || defined(PSPIN) || defined(SPINLOCK)) # error cannot run #endif #if (defined(SPINLOCK) || defined(PMUTEX) || defined(PSPIN) || defined(HITACHI)) && !(defined(BGML) || defined(DCMF)) # include "shmem.h" typedef struct { long off; long idlist[SHMIDLEN]; } lockset_t; extern lockset_t lockid; #elif defined(BGML) || defined(DCMF) typedef int lockset_t; #endif #if defined(PMUTEX) # warning SPINLOCK: pthread_mutex_lock # include # include # define NAT_LOCK(x,p) pthread_mutex_lock(_armci_int_mutexes +x) # define NAT_UNLOCK(x,p) pthread_mutex_unlock(_armci_int_mutexes +x) # define LOCK_T pthread_mutex_t # define PAD_LOCK_T LOCK_T extern PAD_LOCK_T *_armci_int_mutexes; #elif defined(PSPIN) # warning SPINLOCK: pthread_spin_lock # include # include # define NAT_LOCK(x,p) pthread_spin_lock(_armci_int_mutexes +x) # define NAT_UNLOCK(x,p) pthread_spin_unlock(_armci_int_mutexes +x) # define LOCK_T pthread_spinlock_t # define PAD_LOCK_T LOCK_T extern PAD_LOCK_T *_armci_int_mutexes; #elif defined(SPINLOCK) && defined(SGIALTIX) # define NAT_LOCK(x,p) armci_acquire_spinlock((LOCK_T*)( ((PAD_LOCK_T*)(((void**)_armci_int_mutexes)[p]))+x )) # define NAT_UNLOCK(x,p) armci_release_spinlock((LOCK_T*)( ((PAD_LOCK_T*)(((void**)_armci_int_mutexes)[p]))+x )) extern PAD_LOCK_T *_armci_int_mutexes; #elif defined(SPINLOCK) # define NAT_LOCK(x,p) armci_acquire_spinlock((LOCK_T*)(_armci_int_mutexes+(x))) # define NAT_UNLOCK(x,p) armci_release_spinlock((LOCK_T*)(_armci_int_mutexes+(x))) extern PAD_LOCK_T *_armci_int_mutexes; #elif defined(HITACHI) extern void armcill_lock(int mutex, int proc); extern void armcill_unlock(int mutex, int proc); # define LOCK_T int # define PAD_LOCK_T LOCK_T # define NAT_LOCK(x,p) armcill_lock((x),(p)) # define NAT_UNLOCK(x,p) armcill_unlock((x),(p)) extern PAD_LOCK_T *_armci_int_mutexes; #elif defined(SGI) # define SGI_SPINS 100 # include typedef struct { int id; ulock_t * lock_array[NUM_LOCKS]; }lockset_t; extern lockset_t lockset; # define NAT_LOCK(x,p) (void) uswsetlock(lockset.lock_array[(x)],SGI_SPINS) # define NAT_UNLOCK(x,p) (void) usunsetlock(lockset.lock_array[(x)]) #elif defined(CONVEX) # include typedef struct{ unsigned state; unsigned pad[15]; } lock_t; typedef int lockset_t; extern lock_t *lock_array; extern void setlock(unsigned * volatile lp); extern void unsetlock(unsigned * volatile lp); # define NAT_LOCK(x,p) (void) setlock(&lock_array[x].state) # define NAT_UNLOCK(x,p) (void) unsetlock(&lock_array[(x)].state) #elif defined(WIN32) typedef int lockset_t; extern void setlock(int); extern void unsetlock(int); # define NAT_LOCK(x,p) setlock(x) # define NAT_UNLOCK(x,p) unsetlock(x) #elif defined(CRAY_YMP) && !defined(__crayx1) # include typedef int lockset_t; extern lock_t cri_l[NUM_LOCKS]; # pragma _CRI common cri_l # define NAT_LOCK(x,p) t_lock(cri_l+(x)) # define NAT_UNLOCK(x,p) t_unlock(cri_l+(x)) #elif defined(CRAY_T3E) || defined(__crayx1) || defined(CATAMOUNT) || defined(CRAY_SHMEM) || defined(PORTALS) # include # if defined(CRAY) || defined(CRAY_XT) # include # endif # if defined(DECOSF) || defined(LINUX64) || defined(__crayx1) || defined(CATAMOUNT) # define _INT_MIN_64 (LONG_MAX-1) # endif # undef NUM_LOCKS # define NUM_LOCKS 4 static long armci_lock_var[4]={0,0,0,0}; typedef int lockset_t; # define INVALID (long)(_INT_MIN_64 +1) # define NAT_LOCK(x,p) while( shmem_swap(armci_lock_var+(x),INVALID,(p)) ) # define NAT_UNLOCK(x,p) shmem_swap(armci_lock_var+(x), 0, (p)) #elif defined(SYSV) && defined(LAPI) && defined(AIX) int **_armci_int_mutexes; # define NAT_LOCK(x,p) armci_lapi_lock(_armci_int_mutexes[armci_master]+(x)) # define NAT_UNLOCK(x,p) armci_lapi_unlock(_armci_int_mutexes[armci_master]+(x)) typedef int lockset_t; #elif defined(CYGNUS) typedef int lockset_t; # define NAT_LOCK(x,p) armci_die("does not run in parallel",0) # define NAT_UNLOCK(x,p) armci_die("does not run in parallel",0) #elif defined(LAPI) && !defined (LINUX) # include typedef int lockset_t; extern pthread_mutex_t _armci_mutex_thread; # define NAT_LOCK(x,p) pthread_mutex_lock(&_armci_mutex_thread) # define NAT_UNLOCK(x,p) pthread_mutex_unlock(&_armci_mutex_thread) #elif defined(FUJITSU) typedef int lockset_t; # include "fujitsu-vpp.h" #elif defined(SYSV) || defined(MACX) # include "semaphores.h" # undef NUM_LOCKS # define NUM_LOCKS ((MAX_LOCKS< SEMMSL) ? MAX_LOCKS:SEMMSL) # define NAT_LOCK(x,p) P_semaphore(x) # define NAT_UNLOCK(x,p) V_semaphore(x) # ifndef _LOCKS_C_ # define CreateInitLocks Sem_CreateInitLocks # define InitLocks Sem_InitLocks # define DeleteLocks Sem_DeleteLocks # endif #else # error #endif extern void CreateInitLocks(int num, lockset_t *id); extern void InitLocks(int num , lockset_t id); extern void DeleteLocks(lockset_t id); #ifdef FUJITSU # define NATIVE_LOCK(x,p) if(armci_nproc>1) { NAT_LOCK(p); } # define NATIVE_UNLOCK(x,p) if(armci_nproc>1) { NAT_UNLOCK(p); } #else # define NATIVE_LOCK(x,p) if(armci_nproc>1) { NAT_LOCK(x,p); } # define NATIVE_UNLOCK(x,p) if(armci_nproc>1) { NAT_UNLOCK(x,p); } #endif #endif /* _ARMCI_LOCKS_H_ */ ga-5-3/armci/src/common/0000750005473000001440000000000012275260537013756 5ustar d3n000usersga-5-3/armci/src/common/ds-shared.c0000640005473000001440000011126411721474416016000 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "armcip.h" #include "request.h" #include "message.h" #include "memlock.h" #include "copy.h" #include "gpc.h" #include "iterator.h" #if HAVE_STDIO_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_PROCESS_H # include #endif #if HAVE_UNISTD_H # include #endif #define DEBUG_ 0 #define DEBUG1 0 #ifndef SERV # define SERV 2 #endif #ifdef SOCKETS # define EQ_TAGS(a_, b_) ((a_) == (b_)) #else # define EQ_TAGS(a_, b_) !memcmp(&(a_), &(b_), sizeof(a_)) #endif int _armci_server_started=0; #if defined(SOCKETS) extern active_socks_t *_armci_active_socks; extern void armci_sock_send(int to, void *data, int len); #endif /**************************** pipelining for medium size msg ***********/ #ifdef PIPE_BUFSIZE static int pack_size(int len) { int oldlen = len; #define PIPE_ROUNDUP 512 #define PIPE_SHORT_ROUNDUP (1024) int n; if(len <4*PIPE_BUFSIZE){ len /=2; n = len%PIPE_SHORT_ROUNDUP; if(n)len += (PIPE_SHORT_ROUNDUP-n); } #if defined(VIA) || defined(VAPI) else if(len <25*PIPE_BUFSIZE){ len /=4; n = len%PIPE_SHORT_ROUNDUP; if(n)len += (PIPE_SHORT_ROUNDUP-n); } else if(len <41*PIPE_BUFSIZE){ len /=8; n = len%PIPE_SHORT_ROUNDUP; if(n)len += (PIPE_SHORT_ROUNDUP-n); } #else else if(len <32*PIPE_BUFSIZE){ len /=8; n = len%PIPE_SHORT_ROUNDUP; if(n)len += (PIPE_SHORT_ROUNDUP-n); } #endif else #if defined(VIA) || defined(VAPI) len = 8*4096; #elif defined(HITACHI) len = 128*1024-128; #else len = 64*1024-128; #endif #ifdef MAX_PIPELINE_CHUNKS if(oldlen/len > MAX_PIPELINE_CHUNKS-1){ len = oldlen/MAX_PIPELINE_CHUNKS; n = len%PIPE_SHORT_ROUNDUP; if(n)len += (PIPE_SHORT_ROUNDUP-n); } #endif return len; } #define PACK_SIZE1(_len) ((_len)datalen); arg.buf_posted = arg.buf = buf; #ifdef HITACHI arg.count = 0; #else arg.count = bufsize; #endif arg.proc = (msginfo->operation==GET)?msginfo->to:msginfo->from; arg.op = msginfo->operation; armci_dispatch_strided(buf, stride_arr, count, strides, -1, -1, packsize, armcill_pipe_post_bufs,&arg); } void armci_pipe_receive_strided(request_header_t* msginfo, void *ptr, int stride_arr[], int count[], int strides) { buf_arg_t arg; int packsize = PACK_SIZE(msginfo->datalen); #if defined(GM) arg.buf_posted = msginfo->tag.data_ptr; #endif #if (defined(VIA) && defined(VIA_USES_RDMA)) || defined(VAPI) arg.buf_posted = msginfo->tag; #endif arg.buf = ptr; arg.count = 0; arg.proc = (msginfo->operation==GET)?msginfo->to:msginfo->from; arg.op = msginfo->operation; armci_dispatch_strided(ptr, stride_arr, count, strides, -1, -1, packsize, armcill_pipe_extract_data, &arg); } void armci_pipe_send_strided(request_header_t *msginfo, void *buf, int buflen, void *ptr, int *stride_arr,int count[],int strides) { buf_arg_t arg; int packsize = PACK_SIZE(msginfo->datalen); #if defined(GM) || defined(HITACHI) arg.buf_posted = msginfo->tag.data_ptr; #endif #if (defined(VIA) && defined(VIA_USES_RDMA)) || defined(VAPI) arg.buf_posted = msginfo->tag; #endif arg.buf = buf; arg.count = 0; arg.proc = (msginfo->operation==GET)?msginfo->from:msginfo->to; arg.op = msginfo->operation; armci_dispatch_strided(ptr, stride_arr, count, strides, -1, -1, packsize, armcill_pipe_send_chunk, &arg); #ifdef GM armci_serv_send_nonblocking_complete(0); #endif } #endif /**************************** end of pipelining for medium size msg ***********/ #if defined(CLIENT_BUF_BYPASS) && !defined(GM) /**************** NOTE: for now this code can only handle contiguous data *****/ void armci_send_strided_data_bypass(int proc, request_header_t *msginfo, void *loc_buf, int msg_buflen, void *loc_ptr, int *loc_stride_arr, void *rem_ptr, int *rem_stride_arr, int *count, int stride_levels) { int armcill_server_wait_ack(int,int); if(DEBUG_){ printf("%d(s): strided(%d) get bypass from %d\n",armci_me,stride_levels, msginfo->from); fflush(stdout); } #ifdef VAPI if(stride_levels==0 && msginfo->pinned){ armci_send_contig_bypass(proc,msginfo,loc_ptr,rem_ptr,count[0]); return; } else { armci_die("***Contact Developers with machine/network info at hpctools@emsl.pnl.gov: bypass path wrongly invoked***",0); } #endif armci_pin_memory(loc_ptr, loc_stride_arr,count, stride_levels); /*wait until client ready*/ if(!armcill_server_wait_ack(msginfo->from,1)){ /*client was not able to pin memory, it will revert to default protocol hence, unpin the memory and leave. */ armci_unpin_memory(loc_ptr, loc_stride_arr,count, stride_levels); return; } armcill_server_put(msginfo->from,loc_ptr,rem_ptr,count[0]); armci_unpin_memory(loc_ptr, loc_stride_arr,count, stride_levels); if(DEBUG_){ printf("%d(s): strided(%d) get bypass done \n",armci_me,stride_levels); fflush(stdout); } } #endif /*\ client initialization \*/ void armci_client_code() { if(DEBUG_){ printf("in client after fork %d(%d)\n",armci_me,getpid()); fflush(stdout); } armci_client_connect_to_servers(); armci_msg_barrier(); if(DEBUG_){ printf("%d client connected to all %d servers\n",armci_me, armci_nclus-1); fflush(stdout); } } /*\ client sends request to server \*/ void armci_send_req(int proc, request_header_t* msginfo, int len) { int hdrlen = sizeof(request_header_t); int bytes; if(msginfo->operation == GET) { if(msginfo->format==VECTOR && msginfo->ehlen > 0) bytes = msginfo->dscrlen + hdrlen + msginfo->datalen; else bytes = msginfo->dscrlen + hdrlen; } else bytes = msginfo->bytes + hdrlen; if(DEBUG_){printf("%d: sending req %d (len=%d dscr=%d data=%d) to %d \n", armci_me, msginfo->operation, bytes,msginfo->dscrlen, msginfo->datalen,proc); fflush(stdout); } if(bytes > len)armci_die2("armci_send_req:buffer overflow",bytes,len); #ifdef PIPE_BUFSIZE if( # ifdef CLIENT_BUF_BYPASS (!msginfo->bypass) && # endif (msginfo->datalen>2*PIPE_MIN_BUFSIZE) && (msginfo->operation == GET) && (msginfo->format == STRIDED)){ char *buf = sizeof(void*) + (char*)(msginfo+1); int *ibuf = (int*)buf; int *strides =ibuf; int *stride_arr= ibuf +1; int *count = stride_arr + *strides; armci_pipe_prep_receive_strided(msginfo, buf, *strides, stride_arr, count, len-2**strides*sizeof(int)-sizeof(void*)); armci_pipe_send_req(proc,msginfo, bytes); }else #endif armci_send_req_msg(proc,msginfo, bytes); } /*\ client sends strided data + request to server \*/ void armci_send_strided(int proc, request_header_t *msginfo, char *bdata, void *ptr, int strides, int stride_arr[], int count[]) { int hdrlen = sizeof(request_header_t); int dscrlen = msginfo->dscrlen; int datalen = msginfo->datalen; int cluster = armci_clus_id(proc); int bytes; bytes = msginfo->bytes + hdrlen; if(DEBUG_){ printf("%d:sending strided %d to(%d,%d,%d) bytes=%d dslen=%d dlen=%d,\n", armci_me, msginfo->operation, msginfo->to, cluster, proc, bytes, dscrlen, datalen); fflush(stdout); } #if defined(SOCKETS) /* zero-copy optimization for large requests */ if(count[0] > TCP_PAYLOAD){ if(armci_send_req_msg_strided(proc, msginfo,ptr,strides, stride_arr, count))armci_die("armci_send_strided_req long: failed",0); return; /************** done **************/ } #elif defined(MPI_SPAWN_ZEROCOPY) /* zero-copy optimization for large requests */ if(msginfo->operation==PUT && msginfo->datalen==0 && count[0]>TCP_PAYLOAD){ if(armci_send_req_msg_strided(proc, msginfo,ptr,strides, stride_arr, count))armci_die("armci_send_strided_req long: failed",0); return; /************** done **************/ } #elif defined(PIPE_BUFSIZE___) #warning Network resource is only locked inside armci_send_req_msg, no common lock if((msginfo->datalen>2*PIPE_MIN_BUFSIZE) && (msginfo->operation == PUT)){ msginfo->bytes =0; /*** this tells server that we use pipelined put ****/ armci_send_req_msg(proc,msginfo, hdrlen+dscrlen); armci_pipe_send_strided(msginfo, bdata, datalen, ptr, stride_arr, count, strides); return; /************** done **************/ } #endif /* copy into a buffer before sending */ # ifdef SERV_BUF_IDX_T msginfo->inbuf = armcill_getbidx((msginfo->datalen+msginfo->dscrlen), proc, &msginfo->tag.ack); msginfo->tag.ack_ptr = &msginfo->tag.ack; # endif armci_write_strided(ptr, strides, stride_arr, count, bdata); if(armci_send_req_msg(proc,msginfo, bytes)) armci_die("armci_send_strided_req: failed",0); } #ifdef SOCKETS /* main handler to process responses from dataserver */ void armci_rcv_hdlr(request_header_t* msginfo) { int not_rcvd, my_id, nready, i, n, rc; msg_tag_t rcvd_id; BUF_INFO_T *info; n = MAX_BUFS + MAX_SMALL_BUFS; my_id = _armci_buf_to_bufinfo(msginfo)->bufid; not_rcvd = 1; while (not_rcvd) { THREAD_LOCK(armci_user_threads.net_lock); if (!_armci_buf_cmpld(my_id)) { /* my buffer has not been completed yet */ nready=armci_WaitSock(_armci_active_socks->socks,n,_armci_active_socks->ready); if (nready) { for (i = 0; i < n && nready; i++) { if (!_armci_active_socks->ready[i]) continue; /* not a ready sock */ nready--; /* receive data from socket _armci_active_socks->ready[i] * Note: socks[i] is the socket with incoming data HOWEVER * i is NOT necessarily the index of the associated buffer. * This is because armci_WaitSock will mark ALL entries for * the same socket as ready */ rc = armci_ReadFromSocket(_armci_active_socks->socks[i], &rcvd_id, sizeof(rcvd_id)); if(rc<0)armci_die("armci_rcv_strided_data: read tag failed",rc); /* receive response and process it */ msginfo = (request_header_t *)_armci_buf_ptr_from_id(rcvd_id); switch (msginfo->operation) { case PUT: case UNLOCK: armci_die("armci_rcv_hdlr: unexpected op",msginfo->operation); break; case GET: info = _armci_id_to_bufinfo(rcvd_id); armci_complete_req_buf(info, msginfo); break; case LOCK: case RMW: case ARMCI_SWAP: case ARMCI_SWAP_LONG: case ARMCI_FETCH_AND_ADD: case ARMCI_FETCH_AND_ADD_LONG: armci_rcv_data(msginfo->to, msginfo); break; case ACK: armci_rcv_data(NODE_SERVER(msginfo->to), msginfo); break; default: armci_die("armci_rcv_hdlr: unrecognized op",msginfo->operation); } /* clear this socket in active sockets */ _armci_active_socks->socks[i] = -1; THREAD_UNLOCK(armci_user_threads.net_lock); /* check if the data we received were sent to us */ if (rcvd_id == my_id) not_rcvd = 0; /* mark received buffer as completed */ _armci_buf_set_cmpld_idx(rcvd_id, 1); } if(nready)armci_die("armci_rcv_hdlr:nready in not consistent",nready); } else { /* timed out in select */ THREAD_UNLOCK(armci_user_threads.net_lock); cpu_yield(); } } else { /* buffer was completed by another thread */ THREAD_UNLOCK(armci_user_threads.net_lock); not_rcvd = 0; } } } #if 0 /* receives plain(contiguous) data from dataserver */ void armci_rcv_data_hdlr(int bufid) { request_header_t* msginfo; int proc, datalen; char *buf; /* obtain buffer and buffer info associated with this receive */ msginfo = (request_header_t *)_armci_buf_ptr_from_id(bufid); proc = msginfo->to; datalen = msginfo->datalen; if(datalen == 0) armci_die("armci_rcv_data_hdlr: no data to receive",datalen); if(datalen > (MSG_BUFLEN-sizeof(request_header_t)-sizeof(long))) armci_die("armci_rcv_data_hdlr: data overflowing rcv buffer",datalen); /* fills msginfo buffer */ buf = armci_ReadFromDirect(proc, msginfo, datalen); if ((char *)(msginfo+1) != buf) armci_die("armci_rcv_data_hdlr: buf != msginfo+1",datalen); } /* received strided data from dataserver */ void armci_rcv_strided_data_hdlr(int bufid) { BUF_INFO_T *info; char *dscr; request_header_t *msginfo; void *ptr; int proc, strides, *stride_arr, *count; char *databuf; /* obtain buffer and buffer info associated with this receive */ info = _armci_id_to_bufinfo(bufid); dscr = info->dscr; msginfo = (request_header_t *)_armci_buf_ptr_from_id(bufid); proc = msginfo->to; /* ptr, strides, stride_arr and count should be extracted from buf_info */ ptr = *(void**)dscr; dscr += sizeof(void*); strides = *(int*)dscr; dscr += sizeof(int); stride_arr = (int*)dscr; dscr += strides*sizeof(int); count = (int*)dscr; /* actual rcv: copied from old armci_rcv_strided_data */ /* zero-copy optimization for large requests */ if(count[0] > TCP_PAYLOAD){ armci_ReadStridedFromDirect(proc,msginfo,ptr,strides,stride_arr, count); return; /*********************** done ************************/ } databuf = armci_ReadFromDirect(proc,msginfo,msginfo->datalen); armci_read_strided(ptr, strides, stride_arr, count, databuf); } /* receives vector data from dataserver */ void armci_rcv_vector_data_hdlr(int bufid) { request_header_t* msginfo; int proc, datalen; char *buf; armci_giov_t *darr; /* obtain buffer and buffer info associated with this receive */ msginfo = (request_header_t *)_armci_buf_ptr_from_id(bufid); proc = msginfo->to; /*datalen = msginfo->datalen;*/ buf = (char *)(msginfo + 1); /* receive vector as cont block, data is in buf */ armci_rcv_data_hdlr(bufid); /* unpack vector */ /* armci_giov_t darr[], int len) */ armci_vector_from_buf(darr, len, buf); } #endif #endif /*\ client receives data from server \*/ char *armci_rcv_data(int proc, request_header_t* msginfo) { int datalen = msginfo->datalen; char *buf; if(DEBUG_) { printf("%d:armci_rcv_data: bytes= %d \n", armci_me, datalen); fflush(stdout); } if(datalen == 0) armci_die("armci_rcv_data: no data to receive",datalen); if(datalen > (((int)MSG_BUFLEN)-((int)sizeof(request_header_t))-((int)sizeof(long)))) armci_die("armci_rcv_data:data overflowing rcv buffer",datalen); buf = armci_ReadFromDirect(proc, msginfo, datalen); if(DEBUG_){ printf("%d:armci_rcv_data: got %d bytes \n",armci_me,datalen); fflush(stdout); } return(buf); } /*\ client receives vector data from server and unpacks to the right loc \*/ void armci_rcv_vector_data(int proc, request_header_t* msginfo, armci_giov_t darr[], int len) { char *buf = armci_rcv_data(proc, msginfo); armci_vector_from_buf(darr, len, buf); } /*\ client receives strided data from server \*/ #if 0 void armci_rcv_strided_data(int proc, request_header_t* msginfo, int datalen, void *ptr, int strides,int stride_arr[],int count[]) { extern BUF_INFO_T *_armci_tag_to_bufinfo(msg_tag_t tag); extern BUF_INFO_T *_armci_buf_to_bufinfo(void *buf); int not_received = 1; int sel, idx, rc, n=MAX_BUFS+MAX_SMALL_BUFS; char *databuf; msg_tag_t tag; BUF_INFO_T *info; char *dscr; void *loc_ptr; int stride_levels, *loc_stride_arr; request_header_t* buf; while (not_received) { THREAD_LOCK(armci_user_threads.net_lock); if (!_armci_buf_cmpld(msginfo)) { /* buffer not completed */ #ifdef SOCKETS sel=armci_WaitSock(_armci_active_socks->socks,n,_armci_active_socks->ready); #endif if (sel > 0) { /* pick a socket (should I check if sel > 1?) */ for(idx=0;idxready[idx])break; /* socks[idx] is the socket with incoming data HOWEVER idx is * NOT necessarily the index of the associated buffer. It is * because armci_WaitSock will mark ALL entries for the same * socket as ready */ /* read tag */ #ifdef SOCKETS rc=armci_ReadFromSocket(_armci_active_socks->socks[idx],&tag,sizeof(tag)); if(rc<0)armci_die("armci_rcv_strided_data: read tag failed",rc); #if 0 || defined(DTAG) idx = tag & DTAG; printf("DAG RCV: dtag=%ld,idx=%d,",tag,idx); tag >>= (sizeof(msg_id_t) * 8); printf("tag=%d,",tag); /* find proper buffer idx */ info = _armci_tag_to_bufinfo(tag); printf("idx(tag)=%d\n",info->bufid); fflush(stdout); if(info->bufid!=idx)armci_die("armci_rcv_strided_data: bad tag",tag); #else idx = tag; #endif #endif info = _armci_id_to_bufinfo(idx); dscr = info->dscr; /* network complete -- old armci_rcv_strided_data * ptr, strides, stride_arr and count should be extracted from buf_info */ ptr = *(void**)dscr; dscr += sizeof(void*); strides = *(int*)dscr; dscr += sizeof(int); stride_arr = (int*)dscr; dscr += strides*sizeof(int); count = (int*)dscr; /* find appropriate msginfo for received response */ buf = (request_header_t *)_armci_buf_ptr_from_id(idx); proc = buf->to; #ifdef CLIENT_BUF_BYPASS #error THIS PATH IS NOT UPDATED if(msginfo->bypass){ /* zero-copy protocol: get ACK and then unpin user buffer */ armci_rcv_strided_data_bypass(proc, msginfo, ptr, strides); armci_unpin_memory(ptr, stride_arr, count, strides); return; /* we are done */ } #endif #ifdef SOCKETS /* zero-copy optimization for large requests */ if (count[0] > TCP_PAYLOAD) armci_ReadStridedFromDirect(proc,buf,ptr,strides,stride_arr,count); else #elif defined(PIPE_BUFSIZE) if (buf->datalen > 2*PIPE_MIN_BUFSIZE) armci_pipe_receive_strided(buf, ptr, stride_arr, count, strides); else #endif { databuf = armci_ReadFromDirect(proc,buf,datalen); armci_read_strided(ptr, strides, stride_arr, count, databuf); } /* update active sockets */ _armci_active_socks->socks[idx] = -1; THREAD_UNLOCK(armci_user_threads.net_lock); /* check if the response we received was for our request */ if (EQ_TAGS(tag, _armci_buf_to_bufinfo(msginfo)->tag)) { /* if (tag == _armci_buf_to_bufinfo(buf)->tag) { _armci_buf_release(msginfo); released in armci_rem_strided */ not_received = 0; } else { _armci_buf_set_cmpld_idx(idx, 1); /* completed */ } } else { THREAD_UNLOCK(armci_user_threads.net_lock); #if 0 if(sel)armci_die("armci_rcv_strided_data: error in select",errno); else #endif cpu_yield(); /* timed out in select */ } } else { /* buffer was completed by another thread */ THREAD_UNLOCK(armci_user_threads.net_lock); /* _armci_buf_release(msginfo); released in armci_rem_strided */ not_received = 0; } } } #else void armci_rcv_strided_data(int proc, request_header_t* msginfo, int datalen, void *ptr, int strides,int stride_arr[],int count[]) { char *databuf; if(DEBUG_){ printf("%d: armci_rcv_strided_data: expecting datalen %d from %d\n", armci_me, datalen, proc); fflush(stdout); } #ifdef CLIENT_BUF_BYPASS if(msginfo->bypass){ /* zero-copy protocol: get ACK and then unpin user buffer */ armci_rcv_strided_data_bypass(proc, msginfo, ptr, strides); armci_unpin_memory(ptr, stride_arr, count, strides); return; /* we are done */ } #endif #if defined(SOCKETS) || defined(MPI_SPAWN_ZEROCOPY) /* zero-copy optimization for large requests */ if(count[0] > TCP_PAYLOAD){ armci_ReadStridedFromDirect(proc,msginfo,ptr,strides,stride_arr, count); return; /*********************** done ************************/ } #elif defined(PIPE_BUFSIZE) if(msginfo->datalen>2*PIPE_MIN_BUFSIZE){ armci_pipe_receive_strided(msginfo, ptr, stride_arr, count, strides); return; /*********************** done ************************/ } #endif #if !defined(GET_STRIDED_COPY_PIPELINED) databuf = armci_ReadFromDirect(proc,msginfo,datalen); armci_read_strided(ptr, strides, stride_arr, count, databuf); #else { int bytes_buf = 0, bytes_usr = 0, seg_off=0; int ctr=0; stride_info_t sinfo; char *armci_ReadFromDirectSegment(int proc,request_header_t *msginfo, int datalen, int *bytes_buf); armci_stride_info_init(&sinfo,ptr,strides,stride_arr,count); do { databuf = armci_ReadFromDirectSegment(proc,msginfo,datalen,&bytes_buf); bytes_usr += armci_read_strided_inc(&sinfo,&databuf[bytes_usr],bytes_buf-bytes_usr, &seg_off); } while(bytes_bufdscrlen = 0; msginfo->from = armci_me; msginfo->to = SERVER_NODE(clus); msginfo->operation = ACK; msginfo->bytes =0; msginfo->datalen =sizeof(int); #ifdef SOCKETS msginfo->tag = BUF_TO_BUFINFO(msginfo)->bufid; #endif if(DEBUG_){ printf("%d(c):sending ACKreq to %d clus=%d\n",armci_me,msginfo->to,clus); fflush(stdout); } armci_send_req(armci_clus_info[clus].master, msginfo, bufsize); #ifdef SOCKETS armci_rcv_hdlr(msginfo); #else armci_rcv_data(armci_clus_info[clus].master, msginfo); /* receive ACK */ #endif assert(*(int*)(msginfo+1) == ACK); #ifdef VAPI assert(*(((int *)(msginfo+1))+1) == ARMCI_STAMP); #endif FREE_SEND_BUFFER(msginfo); } /***************************** server side *********************************/ static void armci_check_req(request_header_t *msginfo, int buflen) { if((msginfo->to != armci_me && msginfo->to < armci_master) || msginfo->to >= armci_master + armci_clus_info[armci_clus_me].nslave) armci_die("armci_rcv_req: invalid to", msginfo->to); #if 0 /* should be done in recv_req */ if(msginfo->operation != GET && msginfo->bytes > buflen) armci_die2("armci_rcv_req: message overflowing rcv buffer", msginfo->bytes,MSG_BUFLEN); #endif if(msginfo->dscrlen < 0) armci_die("armci_rcv_req: dscrlen < 0", msginfo->dscrlen); if(msginfo->datalen < 0) armci_die("armci_rcv_req: datalen < 0", msginfo->datalen); #ifndef PIPE_BUFSIZE if(msginfo->dscrlen > (int)msginfo->bytes) armci_die2("armci_rcv_req: dsclen > bytes", msginfo->dscrlen, msginfo->bytes); #endif } /*\ server response - send data to client \*/ void armci_send_data(request_header_t* msginfo, void *data) { int to = msginfo->from; #if defined(VIA) || defined(GM) || defined(VAPI) /* if the data is in the pinned buffer: MessageRcvBuffer */ #if defined(PEND_BUFS) extern int armci_data_in_serv_buf(void *); if(armci_data_in_serv_buf(data)) #else if((data > (void *)MessageRcvBuffer) && (data < (void *)(MessageRcvBuffer + MSG_BUFLEN))) #endif /* write the message to the client */ armci_WriteToDirect(to, msginfo, data); else { /* copy the data to the MessageRcvBuffer */ #ifdef GM /* leave space for header ack */ char *buf = MessageRcvBuffer + sizeof(long); #else char *buf = MessageRcvBuffer; # if defined(PEND_BUFS) fprintf(stderr, "%d:: op=%d len=%d ptr=%p working on unpinned memory. aborting!\n", armci_me, msginfo->operation,msginfo->datalen, data); assert(0); buf = NULL; /* extern char *armci_openib_get_msg_rcv_buf(int); */ /* buf = armci_openib_get_msg_rcv_buf(msginfo->from); */ # endif #endif assert(buf != NULL); armci_copy(data, buf, msginfo->datalen); armci_WriteToDirect(to, msginfo, buf); } #else #ifdef DOELAN4 /*this is because WriteToDirect is a no-op in elan4.c so we have * to do a put. This will not cause problems anywhere else in the * code and this part on elan4 will only be invoked in a GPC */ PARMCI_Put(data,msginfo->tag.data_ptr,msginfo->datalen,to); #else armci_WriteToDirect(to, msginfo, data); #endif #endif } /*\ server sends strided data back to client \*/ void armci_send_strided_data(int proc, request_header_t *msginfo, char *bdata, void *ptr, int strides, int stride_arr[], int count[]) { int to = msginfo->from; if(DEBUG_){ printf("%d(server): sending datalen = %d to %d %p\n", armci_me, msginfo->datalen, to,ptr); fflush(stdout); } #if defined(SOCKETS) || defined(MPI_SPAWN_ZEROCOPY) /* zero-copy optimization for large requests */ if(count[0] > TCP_PAYLOAD){ armci_WriteStridedToDirect(to,msginfo,ptr, strides, stride_arr, count); return; /*********************** done ************************/ } #elif defined(PIPE_BUFSIZE) if(msginfo->datalen>2*PIPE_MIN_BUFSIZE) { armci_pipe_send_strided(msginfo, bdata, msginfo->datalen, ptr, stride_arr, count, strides); return; } #endif #if defined(GET_NO_SRV_COPY) { ARMCI_MEMHDL_T *mhloc=NULL, *mhrem=NULL; int nsegs, i; /* printf("%d(s): TRYING to use rdma contig to strided\n",armci_me); */ /* fflush(stdout); */ nsegs = 1; for(i=0;ioperation==GET && !msginfo->pinned && strides>=0 && get_armci_region_local_hndl(ptr,armci_clus_id(armci_me),&mhloc)) { /* printf("%d(s): using rdma contig to strided\n",armci_me); */ /* fflush(stdout); */ armci_server_rdma_strided_to_contig(ptr, stride_arr, count, strides, msginfo->tag.data_ptr, to, msginfo); return; } else { /* printf("%d(s): not taking rdma to contig path. mhloc=%p mhrem=%p\n",armci_me,mhloc,mhrem); */ } } #endif /* for small contiguous blocks copy into a buffer before sending */ armci_write_strided(ptr, strides, stride_arr, count, bdata); /* write the message to the client */ armci_WriteToDirect(to, msginfo, bdata); if(DEBUG_){ printf("%d(serv):sent len=%d to %d\n",armci_me,msginfo->datalen,to); fflush(stdout); } } /*\ server sends ACK to client \*/ void armci_server_ack(request_header_t* msginfo) { int ack=ACK; if(DEBUG_){ printf("%d server: sending ACK to %d\n",armci_me,msginfo->from); fflush(stdout); } if(msginfo->datalen != sizeof(int)) armci_die("armci_server_ack: bad datalen=",msginfo->datalen); #if defined(PEND_BUFS) { /*Send from server known memory -- avoid extra buffers and copying on server*/ int *ack1 = (int *)(msginfo+1); /*msginfo is in some server buffer. I can overwrite the descriptor*/ *ack1 = ACK; assert(sizeof(request_header_t)+2*sizeof(int)from; if(DEBUG_){ printf("%d(serv):got %d request from %d\n",armci_me,msginfo->operation, from); fflush(stdout); } /*if(msginfo->operation==GET)fprintf(stderr,"GET request received with tag: %d\n",msginfo->tag);*/ switch(msginfo->operation){ case ACK: if(DEBUG_) { fprintf(stdout, "%d(server): got ACK request from %d\n", armci_me, msginfo->from); fflush(stdout); } #ifdef SOCKETS armci_sock_send(msginfo->from, &(msginfo->tag), sizeof(msg_tag_t)); #endif armci_server_ack(msginfo); break; case ATTACH: if(DEBUG_){ printf("%d(serv):got ATTACH request from%d\n",armci_me, from); fflush(stdout); } armci_server_ipc(msginfo, descr, buffer, buflen); break; #if defined(SOCKETS) || defined(HITACHI) || defined(MPI_SPAWN) || defined(MPI_MT) case QUIT: if(DEBUG_){ printf("%d(serv):got QUIT request from %d\n",armci_me, from); fflush(stdout); } armci_server_goodbye(msginfo); break; #endif case ARMCI_SWAP: case ARMCI_SWAP_LONG: case ARMCI_FETCH_AND_ADD: case ARMCI_FETCH_AND_ADD_LONG: armci_server_rmw(msginfo,descr,buffer); break; case LOCK: armci_server_lock(msginfo); break; case UNLOCK: armci_server_unlock(msginfo, descr); break; default: if(msginfo->format ==VECTOR) armci_server_vector(msginfo, descr, buffer, buflen); else if(msginfo->format ==STRIDED){ #if defined(VAPI) /* buffer bypass protocol */ if(msginfo->pinned == 1){ int armci_post_gather(void *, int *, int *,int, armci_vapi_memhndl_t *,int,int,int,void *); void * src_ptr; int stride_levels; int count[MAX_STRIDE_LEVEL]; int src_stride_arr[MAX_STRIDE_LEVEL]; int found; ARMCI_MEMHDL_T *mhandle; int i,num,id; if(DEBUG1){ printf("%d(s) : unpacking dscr\n",armci_me); fflush(stdout); } src_ptr = *(void**)descr; descr = (char*)descr + sizeof(void*); stride_levels = *(int*)descr; descr = (char*)descr + sizeof(int); for(i =0; ifrom,mytag,SERV,NULL ); mytag = (mytag+1)%MAX_PENDING; if(mytag==0)mytag=1; if(DEBUG1){ printf("%d(s) : finished posting %d gather\n", armci_me,num); fflush(stdout); } } else #endif armci_server(msginfo, descr, buffer, buflen); } else armci_die2("armci_data_serv: unknown format code", msginfo->format, msginfo->from); } } /*\ initialize connection and start server thread/processes \*/ void armci_start_server() { armci_init_connections(); #if defined(MPI_SPAWN) /* For MPI_SPAWN, this should be called by all processes */ armci_create_server_MPIprocess( ); #else if(armci_me == armci_master) { # ifdef SERVER_THREAD armci_create_server_thread( armci_server_code ); # else armci_create_server_process( armci_server_code ); # endif } #endif armci_client_code(); _armci_server_started=1; } void *armci_server_code(void *data) { #ifdef SERVER_THREAD #if (defined(GM) || defined(VAPI) || defined(QUADRICS)) && ARMCI_ENABLE_GPC_CALLS # ifdef PTHREADS extern pthread_t data_server; data_server = pthread_self(); # else armci_die("armci_server_code: threaded data servers not using pthreads not supported by gpc", 0); # endif #endif #endif if(DEBUG_) printf("%d: in server after creating thread.\n",armci_me); /* make initial contact with all the computing process */ armci_server_initial_connection(); if(DEBUG_) { printf("%d(server): connected to all computing processes\n",armci_me); fflush(stdout); } #if ARMCI_ENABLE_GPC_CALLS gpc_init(); #endif armci_call_data_server(); armci_transport_cleanup(); return(NULL); } /*\ request to QUIT sent by client \*/ void armci_serv_quit() { int bufsize = sizeof(request_header_t)+sizeof(int); int destproc; request_header_t *msginfo; destproc = SERVER_NODE(armci_clus_me); msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,QUIT,destproc); if(DEBUG_){ printf("%d master: sending quit request to server\n",armci_me); fflush(stdout); } msginfo->dscrlen = 0; msginfo->from = armci_me; msginfo->to = SERVER_NODE(armci_clus_me); msginfo->operation = QUIT; if(ACK_QUIT) msginfo->bytes = msginfo->datalen = sizeof(int); /* ACK */ else msginfo->bytes = msginfo->datalen = 0; /* no ACK */ armci_send_req(armci_master, msginfo, bufsize); if(ACK_QUIT){ int stat; stat = *(int*)armci_rcv_data(armci_master,msginfo); /* receive ACK */ if(stat != QUIT) armci_die("armci_serv_quit: wrong response from server", stat); FREE_SEND_BUFFER(msginfo); } } /*\ server action triggered by request to quit \*/ void armci_server_goodbye(request_header_t* msginfo) { int ack=QUIT; if(DEBUG_){ printf("%d server: terminating request by %d\n",armci_me,msginfo->from); fflush(stdout); } if(msginfo->datalen){ msginfo->datalen = -msginfo->datalen; if(msginfo->datalen != sizeof(int)) armci_die("armci_server_goodbye: bad datalen=",msginfo->datalen); armci_send_data(msginfo, &ack); } armci_transport_cleanup(); /* Finalizing data server process w.r.t. MPI is not portable */ _exit(0); } ga-5-3/armci/src/common/ccopy.c0000640005473000001440000002213511644650615015242 0ustar d3n000users/*************************************************************************** COPYRIGHT The following is a notice of limited availability of the code, and disclaimer which must be included in the prologue of the code and in all source listings of the code. Copyright Notice + 2009 University of Chicago Permission is hereby granted to use, reproduce, prepare derivative works, and to redistribute to others. This software was authored by: Jeff R. Hammond Leadership Computing Facility Argonne National Laboratory Argonne IL 60439 USA phone: (630) 252-5381 e-mail: jhammond@anl.gov GOVERNMENT LICENSE Portions of this material resulted from work developed under a U.S. Government Contract and are subject to the following license: the Government is granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable worldwide license in this computer software to reproduce, prepare derivative works, and perform publicly and display publicly. DISCLAIMER This computer code material was prepared, in part, as an account of work sponsored by an agency of the United States Government. Neither the United States, nor the University of Chicago, nor any of their employees, makes any warranty express or implied, or assumes any legal liability or responsibility for the accuracy, completeness, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use would not infringe privately owned rights. ***************************************************************************/ #if HAVE_CONFIG_H # include "config.h" #endif #include "copy.h" /* ONE-DIMENSIONAL COPY OPERATIONS */ #if 0 subroutine dcopy1d_n(A, B, n) integer n,i double precision A(n), B(n) ccdir$ no_cache_alloc a,b do i = 1, n B(i) = A(i) end do end #endif void c_dcopy1d_n_(const double* const restrict A, double* const restrict B, const int* const restrict n) { int i; for ( i = 0 ; i < (*n) ; i++ ){ B[i] = A[i]; } return; } #if 0 subroutine dcopy1d_u(A, B, n) integer n,n1,i double precision A(n), B(n) double precision d1, d2, d3, d4 n1 = iand(max0(n,0),3) do i = 1, n1 B(i) = A(i) end do do i = n1+1, n, 4 d1 = a(i) d2 = a(i+1) d3 = a(i+2) d4 = a(i+3) b(i) = d1 b(i+1) = d2 b(i+2) = d3 b(i+3) = d4 end do end #endif void c_dcopy1d_u_(const double* const restrict A, double* const restrict B, const int* const restrict n) { int i; int m = (*n) - ((*n)%4); for ( i = 0 ; i < m ; i+=4 ){ B[i ] = A[i ]; B[i+1] = A[i+1]; B[i+2] = A[i+2]; B[i+3] = A[i+3]; } for ( i = m ; i < (*n) ; i++ ){ B[i] = A[i]; } return; } /* TWO-DIMENSIONAL COPY OPERATIONS */ #if 0 subroutine dcopy21(rows, cols, A, ald, buf, cur) integer rows, cols integer c, r, ald, cur double precision A(ald,*), buf(ald) cur = 0 do c = 1, cols do r = 1, rows cur = cur+1 buf(cur) = A(r,c) end do end do end #endif void c_dcopy21_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict buf, int* const restrict cur) { int r, c, i=0; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ buf[i++] = A[ c * (*ald) + r ]; } } (*cur) = i; return; } #if 0 subroutine dcopy12(rows, cols, A, ald, buf, cur) integer rows, cols integer c, r, ald, cur double precision A(ald,*), buf(ald) cur = 0 do c = 1, cols do r = 1, rows cur = cur+1 A(r,c) = buf(cur) end do end do end #endif void c_dcopy12_(const int* const restrict rows, const int* const restrict cols, double* const restrict A, const int* const restrict ald, const double* const restrict buf, int* const restrict cur) { int r, c, i=0; i = 0; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ c * (*ald) + r ] = buf[i++]; } } (*cur) = i; return; } #if 0 subroutine dcopy2d_n(rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double precision A(ald,*), B(bld,*) do c = 1, cols do r = 1, rows B(r,c) = A(r,c) end do end do end #endif void c_dcopy2d_n_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict B, const int* const restrict bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ B[ c * (*bld) + r ] = A[ c * (*ald) + r ]; } } return; } #if 0 subroutine dcopy2d_u(rows, cols, A, ald, B, bld) integer rows, cols integer c, r, ald, bld double precision A(ald,*), B(bld,*) integer r1 double precision d1, d2, d3, d4 do c = 1, cols r1 = iand(max0(rows,0),3) do r = 1, r1 c$$$ b(r,c) = a(r,c) + b(r,c) * 0 b(r,c) = a(r,c) end do do r = r1 + 1, rows, 4 d1 = a(r,c) d2 = a(r+1,c) d3 = a(r+2,c) d4 = a(r+3,c) b(r,c) = d1 b(r+1,c) = d2 b(r+2,c) = d3 b(r+3,c) = d4 c$$$ b(r,c) = a(r,c) + b(r,c) * 0 c$$$ b(r+1,c) = a(r+1,c) + b(r+1,c) * 0 c$$$ b(r+2,c) = a(r+2,c) + b(r+2,c) * 0 c$$$ b(r+3,c) = a(r+3,c) + b(r+3,c) * 0 enddo enddo end #endif void c_dcopy2d_u_(const int* const restrict rows, const int* const restrict cols, const double* const restrict A, const int* const restrict ald, double* const restrict B, const int* const restrict bld) { int r, c; for ( c = 0 ; c < (*cols) ; c++ ){ int m = (*rows) - ((*rows)%4); for ( r = 0 ; r < m ; r+=4 ){ B[ c * (*bld) + r ] = A[ c * (*ald) + r ]; B[ c * (*bld) + r+1 ] = A[ c * (*ald) + r+1 ]; B[ c * (*bld) + r+2 ] = A[ c * (*ald) + r+2 ]; B[ c * (*bld) + r+3 ] = A[ c * (*ald) + r+3 ]; } for ( r = m ; r < (*rows) ; r++ ){ B[ c * (*bld) + r ] = A[ c * (*ald) + r ]; } } return; } /* THREE-DIMENSIONAL COPY OPERATIONS */ #if 0 subroutine dcopy31(rows, cols, planes, A, aldr, aldc, buf, cur) integer rows, cols, planes integer c, r, p, aldr, aldc, cur double precision A(aldr, aldc, *), buf(aldr) cur = 0 do p = 1, planes do c = 1, cols do r = 1, rows cur = cur+1 buf(cur) = A(r,c,p) end do end do end do end #endif void c_dcopy31_(const int* const restrict rows, const int* const restrict cols, const int* const restrict plns, const double* const restrict A, const int* const restrict aldr, const int* const restrict aldc, double* const restrict buf, int* const restrict cur) { int r, c, p, i=0; for ( p = 0 ; p < (*plns) ; p++ ){ for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ buf[i++] = A[ p * (*aldc) * (*aldr) + c * (*aldr) + r ]; } } } (*cur) = i; return; } #if 0 subroutine dcopy13(rows, cols, planes, A, aldr, aldc, buf, cur) integer rows, cols, planes integer c, r, p, aldr, aldc, cur double precision A(aldr, aldc, *), buf(aldr) cur = 0 do p = 1, planes do c = 1, cols do r = 1, rows cur = cur+1 A(r,c,p) = buf(cur) end do end do end do end #endif void c_dcopy13_(const int* const restrict rows, const int* const restrict cols, const int* const restrict plns, double* const restrict A, const int* const restrict aldr, const int* const restrict aldc, const double* const restrict buf, int* const restrict cur) { int r, c, p, i=0; for ( p = 0 ; p < (*plns) ; p++ ){ for ( c = 0 ; c < (*cols) ; c++ ){ for ( r = 0 ; r < (*rows) ; r++ ){ A[ p * (*aldc) * (*aldr) + c * (*aldr) + r ] = buf[i++]; } } } (*cur) = i; return; } ga-5-3/armci/src/common/spawn.c0000640005473000001440000000560211444464075015256 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* OS specific server process/thread creation and destruction * JN/03.25.2000 */ #if HAVE_STDIO_H # include #endif #if HAVE_ERRNO_H # include #endif #include "armcip.h" #ifdef WIN32 /************************** Windows threads **************************/ #if HAVE_WINDOWS_H # include #endif #if HAVE_PROCESS_H # include #endif thread_id_t armci_serv_tid; unsigned long armci_serv_handle; #ifndef NO_STDLIBC #define NEWTHREAD CreateThread #else #define NEWTHREAD _beginthreadex #endif unsigned __stdcall armci_wrap_func(void *arg) { void (*func)(void*); func = arg; /* boost the server thread priority be better responsiveness */ (void)SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_HIGHEST); func(NULL); return (unsigned)0; } void armci_create_server_thread ( void* (* func)(void*) ) { /* as we need to use std C rt library we cannot use CreateThread */ armci_serv_handle = NEWTHREAD(NULL, 0, armci_wrap_func, (void*)func, 0, &armci_serv_tid); if(!armci_serv_handle) armci_die("armci_create_server_thread: create failed",0); } void armci_terminate_server_thread() { /*int rc;*/ /* TerminateThread(armci_serv_handle,&rc);*/ } /****************************** PTHREADS *****************************/ #elif defined(PTHREADS) #include thread_id_t armci_serv_tid; void armci_create_server_thread ( void* (* func)(void*) ) { pthread_attr_t attr; int rc; if(pthread_attr_init(&attr)) armci_die("armci_create_server_thread: attr init failed",0); #if defined(AIX) || defined(SOLARIS) pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); #endif rc = pthread_create(&armci_serv_tid, &attr, func, NULL); if(rc) armci_die("armci_create_server_thread: create failed",errno); pthread_attr_destroy(&attr); } void armci_terminate_server_thread() { if(pthread_join(armci_serv_tid,NULL)) armci_die("armci_terminate_server_thread: failed",0); } #else /**************************** Unix processes ******************************/ #if HAVE_UNISTD_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_WAIT_H # include #endif pid_t server_pid= (pid_t)0; void armci_create_server_process ( void* (* func)(void*) ) { pid_t pid; if ( (pid = fork() ) < 0) armci_die("fork failed", (int)pid); else if(pid == 0){ armci_me = SOFFSET - armci_me; /* server id derived from parent id */ func(NULL); } else server_pid = pid; } void armci_wait_server_process() { int stat; pid_t rc; if(!server_pid) return; rc = wait (&stat); if (rc != server_pid){ perror("ARMCI master: wait for child process (server) failed:"); } server_pid = (pid_t)0; } #endif ga-5-3/armci/src/common/utils.c0000640005473000001440000001513511444464075015270 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* * A barrier causes threads to wait until a set of threads has * all "reached" the barrier. The number of threads required is * set when the barrier is initialized, and cannot be changed * except by reinitializing. * * The barrier_init() and barrier_destroy() functions, * respectively, allow you to initialize and destroy the * barrier. * * The barrier_wait() function allows a thread to wait for a * barrier to be completed. One thread (the one that happens to * arrive last) will return from barrier_wait() with the status * -1 on success -- others will return with 0. The special * status makes it easy for the calling code to cause one thread * to do something in a serial region before entering another * parallel section of code. */ #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_ERRNO_H # include #endif #if HAVE_SYS_TIME_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_ERRNO_H # include #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #include "utils.h" #define DEBUG_ int mt_size; /* number of processes: needed for collective mt ops */ int mt_tpp; /* number of threads used for collective ops */ thread_barrier_t mt_barrier; /* static barrier used for multi-threaded MT_BARRIER */ int armci_malloc_mt(void *ptr[], int bytes) { int rc, th_size, i, j; th_size = mt_size * mt_tpp; if (thread_barrier_wait(&mt_barrier)==-1) { rc = PARMCI_Malloc(ptr, bytes * mt_tpp); #ifdef DEBUG printf("bytes=%d\n", bytes); for (i = 0; i < mt_size; i++) printf("ptr[%d]=%p\n",i,ptr[i]); #endif /* at this point proc ptrs are at beggining of the list */ for (i = mt_size - 1; i >= 0; i--) for (j = mt_tpp - 1; j >= 0; j--) { #ifdef DEBUG printf("mt_size=%d,mt_tpp=%d,i=%d,j=%d,ptr[%d]=%p+%d\n", mt_size,mt_tpp,i,j,i*mt_tpp+j,ptr[i],j*bytes); fflush(stdout); #endif ptr[i * mt_tpp + j] = ((char*)ptr[i]) + j * bytes; } } thread_barrier_wait(&mt_barrier); return rc; } int armci_free_mt(void *ptr, int th_idx) { } #ifdef POSIX_THREADS /* * Initialize a barrier for use. */ int thread_barrier_init (thread_barrier_t *barrier, int count) { int status; barrier->threshold = barrier->counter = count; barrier->cycle = 0; status = pthread_mutex_init (&barrier->mutex, NULL); if (status != 0) return status; status = pthread_cond_init (&barrier->cv, NULL); if (status != 0) { pthread_mutex_destroy (&barrier->mutex); return status; } barrier->valid = BARRIER_VALID; return 0; } /* * Destroy a barrier when done using it. */ int thread_barrier_destroy (thread_barrier_t *barrier) { int status, status2; if (barrier->valid != BARRIER_VALID) return EINVAL; status = pthread_mutex_lock (&barrier->mutex); if (status != 0) return status; /* * Check whether any threads are known to be waiting; report * "BUSY" if so. */ if (barrier->counter != barrier->threshold) { pthread_mutex_unlock (&barrier->mutex); return EBUSY; } barrier->valid = 0; status = pthread_mutex_unlock (&barrier->mutex); if (status != 0) return status; /* * If unable to destroy either 1003.1c synchronization * object, return the error status. */ status = pthread_mutex_destroy (&barrier->mutex); status2 = pthread_cond_destroy (&barrier->cv); return (status == 0 ? status : status2); } /* * Wait for all members of a barrier to reach the barrier. When * the count (of remaining members) reaches 0, broadcast to wake * all threads waiting. */ int thread_barrier_wait (thread_barrier_t *barrier) { int status, cancel, tmp, cycle; if (barrier->valid != BARRIER_VALID) return EINVAL; status = pthread_mutex_lock (&barrier->mutex); if (status != 0) return status; cycle = barrier->cycle; /* Remember which cycle we're on */ if (--barrier->counter == 0) { barrier->cycle = !barrier->cycle; barrier->counter = barrier->threshold; status = pthread_cond_broadcast (&barrier->cv); /* * The last thread into the barrier will return status * -1 rather than 0, so that it can be used to perform * some special serial code following the barrier. */ if (status == 0) status = -1; } else { /* * Wait with cancellation disabled, because barrier_wait * should not be a cancellation point. */ pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &cancel); /* * Wait until the barrier's cycle changes, which means * that it has been broadcast, and we don't want to wait * anymore. */ while (cycle == barrier->cycle) { status = pthread_cond_wait ( &barrier->cv, &barrier->mutex); if (status != 0) break; } pthread_setcancelstate (cancel, &tmp); } /* * Ignore an error in unlocking. It shouldn't happen, and * reporting it here would be misleading -- the barrier wait * completed, after all, whereas returning, for example, * EINVAL would imply the wait had failed. The next attempt * to use the barrier *will* return an error, or hang, due * to whatever happened to the mutex. */ pthread_mutex_unlock (&barrier->mutex); return status; /* error, -1 for waker, or 0 */ } #endif #if 0 /*** NAME timing.c PURPOSE Timing routines for calculating the execution time: void start_timer(void); Set the timer. double elapsed_time(void); Return the timing elapsed since the timer has been set. NOTES Jialin Ju - Oct 16, 1995 Created. ***/ /* Timing routines that use standard Unix gettingofday() */ static struct timezone tz; static struct timeval start_time, finish_time; /* Start measuring a time delay */ void start_timer(void) { gettimeofday( &start_time, &tz); } /* Retunrn elapsed time in milliseconds */ double elapsed_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*(finish_time.tv_sec - start_time.tv_sec) + (finish_time.tv_usec - start_time.tv_usec)/1000.0 ); } /* Return the stopping time in milliseconds */ double stop_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*finish_time.tv_sec + finish_time.tv_usec/1000.0); } #endif ga-5-3/armci/src/common/pack.c0000640005473000001440000003134712174316063015043 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: pack.c,v 1.36.10.1 2006-12-14 13:24:37 manoj Exp $ */ #include "armcip.h" #if HAVE_STDIO_H # include #endif #if !defined(ACC_COPY) &&!defined(CRAY_YMP) &&!defined(CYGNUS)&&!defined(CYGWIN) &&!defined(BGML) &&!defined(DCMF) # define REMOTE_OP #endif #if defined(REMOTE_OP) # define OP_STRIDED armci_rem_strided #else # define OP_STRIDED(_a,_b,_c,_d,_e,_f,_g,_h,_i,_delete1,_j,_hdl)\ armci_op_strided(_a,_b,_c,_d,_e,_f,_g,_h,_i,_j,_hdl) #endif /*\ determine if patch fits in the ARMCI buffer, and if not * at which stride level (patch dim) need to decompose it * *fit_level is the value of stride level to perform packing at * *nb means number of elements of count[*fit_level] that fit in buf \*/ static void armci_fit_buffer(int count[], int stride_levels, int* fit_level, int *nb, int bufsize) { int bytes=1, sbytes=1; int level; /* find out at which stride level BUFFER becomes too small */ for(level=0; level<= stride_levels; level++){ sbytes = bytes; /* store #bytes at current level to save div cost later */ bytes *= count[level]; if(bufsize < bytes) break; } /* buffer big enough for entire patch */ if(bufsize >= bytes){ *fit_level = stride_levels; *nb = count[stride_levels]; return; } /* buffer too small */ switch (level){ case 0: /* smaller than a single column */ *fit_level = 0; *nb = bufsize; break; case -1: /* one column fits */ *fit_level = 0; *nb = sbytes; break; default: /* it could keep nb instances of (level-1)-dimensional patch */ *fit_level = level; *nb = bufsize/sbytes; } } /*\ The function decomposes a multi-dimensional patch so that it fits in the * internal ARMCI buffer. * It works by recursively reducing patch dimension until some portion of the * subpatch fits in the buffer. * The recursive process is controlled by "fit_level" and "nb" arguments, * which have to be set to -1 at the top-level of the recursion tree. * * Argument last and variable looplast are used to indicate to sending/packing * routine that we are dealing with the last portion of the request. * Due to the recursive nature of packing code, the algorithm is following: * if last=1 then internal for loop passes 1 for the last chunk * else it passes 0 * \*/ int armci_pack_strided(int op, void* scale, int proc, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, ext_header_t *h, int fit_level, int nb, int last,armci_ihdl_t nb_handle) { int rc=0, bufsize=BUFSIZE,noswap=0; long sn; void *src, *dst; #ifdef REMOTE_OP int flag=0; #else int flag=1; #endif int b; static int call_count; #ifdef STRIDED_GET_BUFLEN if(op==GET)bufsize=STRIDED_GET_BUFLEN; # ifdef HITACHI else if(stride_levels || ARMCI_ACC(op))bufsize=MSG_BUFLEN_SMALL-PAGE_SIZE; # endif #endif #if (defined(GM_) || defined(VIA_) || defined(VAPI_)) /*we cant assume that the entire available buffer will be used for data, fact that the header and descriptor also go in the same buffer should be considered while packing. */ bufsize-=(sizeof(request_header_t)+(MAX_STRIDE_LEVEL+4)*sizeof(int)+2*sizeof(void *)); # if defined(PIPE_BUFSIZE) && defined(MAX_PIPELINE_CHUNKS) bufsize-=8*MAX_PIPELINE_CHUNKS; # endif #endif #ifdef BALANCE_FACTOR /* Added the following for balancing buffers */ if(op==PUT){ int bytes=1, i; for(i=0; i<= stride_levels; i++) bytes *= count[i]; if(bytes > bufsize && bytes/bufsize < 3 && bytes%bufsize < BALANCE_BUFSIZE){ /* bytes div bufsize - 1 is to increase the balence factor for 3 buffer case */ bufsize = bytes/ (bytes/bufsize - 1 + BALANCE_FACTOR); noswap = 1; /*** yuck: if set to 1, error in buffers.c ***/ } bytes = bufsize%8; bufsize -= bytes; } #endif /* determine decomposition of the patch to fit in the buffer */ if(fit_level<0){ armci_fit_buffer(count, stride_levels, &fit_level, &nb, bufsize); last = 1; } if(fit_level == stride_levels){ /* we can fit subpatch into the buffer */ int chunk = count[fit_level]; int dst_stride, src_stride; if(nb == chunk){ /* take shortcut when whole patch fits in the buffer */ if(h) h->last = last?1:0; if(nb_handle && call_count ){ nb_handle->bufid=NB_MULTI; call_count++; } return(OP_STRIDED(op, scale, proc, src_ptr, src_stride_arr, dst_ptr,dst_stride_arr,count,stride_levels,h,flag,nb_handle)); } if(fit_level){ dst_stride = dst_stride_arr[fit_level -1]; src_stride = src_stride_arr[fit_level -1]; }else{ dst_stride = src_stride = 1; } if(op == GET || noswap == 1) b =nb; else{ b = chunk%nb; if(b==0)b=nb; } /* put smallest piece first */ for(sn = 0; sn < chunk; ){ src = (char*)src_ptr + src_stride* sn; dst = (char*)dst_ptr + dst_stride* sn; count[fit_level] = ARMCI_MIN(b, chunk-sn); /*modify count for this level*/ if(h) h->last = (last && ((sn+b)>=chunk))? 1: 0 ; if(nb_handle)call_count++; rc = OP_STRIDED( op, scale, proc, src, src_stride_arr, dst,dst_stride_arr,count,fit_level,h,flag,nb_handle); if(rc) break; sn += b; b = nb; } count[fit_level] = chunk; /* restore original count */ } else { for(sn = 0; sn < count[stride_levels]; sn++){ int looplast =0; src = (char*)src_ptr + src_stride_arr[stride_levels -1]* sn; dst = (char*)dst_ptr + dst_stride_arr[stride_levels -1]* sn; if(last && (sn == count[stride_levels]-1)) looplast =1; rc = armci_pack_strided(op, scale, proc, src, src_stride_arr, dst, dst_stride_arr, count, stride_levels -1, h,fit_level, nb, looplast,nb_handle); if(rc) return rc; } } if(nb_handle && call_count ) nb_handle->bufid=NB_MULTI; return rc; } /*\ decompose strided data into chunks and call func on each chunk \*/ void armci_dispatch_strided(void *ptr, int stride_arr[], int count[], int strides, int fit_level, int nb, int bufsize, void (*fun)(void*,int*,int*,int,void*), void *arg) { int sn,first_call=0; void *ptr_upd; /* determine decomposition of the patch to fit in the buffer */ if(fit_level<0){ first_call=1; armci_fit_buffer(count, strides, &fit_level, &nb, bufsize); } if(fit_level == strides){ /* we can fit subpatch into the buffer */ int chunk = count[fit_level]; int stride_upd; # ifdef PIPE_MEDIUM_BUFSIZE_ /* for first call we adjust nb for performance in medium request */ if(first_call && strides==0) if(chunk<2*bufsize && chunk>PIPE_MEDIUM_BUFSIZE) nb = PIPE_MEDIUM_BUFSIZE; # endif if(nb == chunk){ /* take shortcut when whole patch fits in the buffer */ fun(ptr, stride_arr, count, strides, arg); } if(fit_level) stride_upd = stride_arr[fit_level -1]; else stride_upd = 1; for(sn = 0; sn < chunk; sn += nb){ ptr_upd = (char*)ptr + stride_upd* sn; count[fit_level] = ARMCI_MIN(nb, chunk-sn); /*modify count for this level*/ fun(ptr_upd, stride_arr, count, fit_level, arg); } count[fit_level] = chunk; /* restore original count */ }else for(sn = 0; sn < count[strides]; sn++){ ptr_upd = (char*)ptr + stride_arr[strides -1]* sn; armci_dispatch_strided(ptr_upd, stride_arr, count, strides -1, fit_level, nb, bufsize, fun, arg); } } /* how much space is needed to move data + reduced descriptor ? */ int armci_vector_bytes( armci_giov_t darr[], int len) { int i, bytes=0; for(i=0; isrc_ptr_array=NULL; /* go through the sets looking for set to be split */ for(s=0;s((int)BUFSIZE1)){ split =(BUFSIZE1 -bytes-2*sizeof(int))/(darr[s].bytes +sizeof(void*)); if(split == 0) s--; /* no room available - do not split */ break; }else bytes+=csize; if(BUFSIZE1 -bytes < 64) break; /* stop here if almost full */ } if(s==len)s--; /* adjust loop counter should be < number of sets */ *nlen = s+1; if(split){ /* save the value to be overwritten only if "save" is not filled */ if(!save->src_ptr_array)*save= darr[s]; /* split the set: reduce # of elems, "extra" keeps info for rest of set*/ *extra = darr[s]; darr[s].ptr_array_len = split; extra->ptr_array_len -= split; extra->src_ptr_array = &extra->src_ptr_array[split]; extra->dst_ptr_array = &extra->dst_ptr_array[split]; } } static inline void armcip_init_giov_t(armci_giov_t *thing) { thing->src_ptr_array=NULL; thing->dst_ptr_array=NULL; thing->ptr_array_len=0; thing->bytes=0; } int armci_pack_vector(int op, void *scale, armci_giov_t darr[],int len, int proc,armci_ihdl_t nb_handle) { armci_giov_t extra; /* keeps data remainder of set to be processed in chunks */ armci_giov_t save; /* keeps original value of set to be processed in chunks */ armci_giov_t *ndarr; /* points to first array element to be processed now */ int rc=0, nlen, count=0; armcip_init_giov_t(&extra); armcip_init_giov_t(&save); ndarr = darr; save.src_ptr_array=NULL; /* indicates that save slot is empty */ while(len){ armci_split_dscr_array(ndarr, len, &extra, &nlen, &save); # if defined(REMOTE_OP) /* A problem will occur if len is 1 and nlen is 0. This corresponds to a * situation where the size of an individual element is found to exceed * BUFSIZE1. Treat this as a single transfer of contiguous data using * the standard PARMCI_Get/Put/Acc call */ if (len == 1 && nlen == 0) { if(ARMCI_ACC(op))rc=PARMCI_Acc(op, scale, ndarr[0].src_ptr_array[0], ndarr[0].dst_ptr_array[0],ndarr[0].bytes, proc); else if(op == GET)rc=PARMCI_Get(ndarr[0].src_ptr_array[0], ndarr[0].dst_ptr_array[0],ndarr[0].bytes, proc); else if(op == PUT)rc=PARMCI_Put(ndarr[0].src_ptr_array[0], ndarr[0].dst_ptr_array[0],ndarr[0].bytes, proc); else armci_die("Unknown op in armci_pack_vector",op); nlen = 1; } else { rc = armci_rem_vector(op, scale, ndarr,nlen,proc,0,nb_handle); } # else if(ARMCI_ACC(op))rc=armci_acc_vector(op,scale,ndarr,nlen,proc); else rc = armci_copy_vector(op,ndarr,nlen,proc); # endif if(rc) break; /* non-NULL pointer indicates that set was split */ if(extra.src_ptr_array){ if(nb_handle) { nb_handle->bufid = NB_MULTI; /*can be set multiple times here; but not reset here*/ } ndarr[nlen-1]=extra; /* set the pointer to remainder of last set */ nlen--; /* since last set not done in full need to process it again */ }else{ if(save.src_ptr_array){ ndarr[0]=save; save.src_ptr_array=NULL; /* indicates that save slot is empty */ } if(nlen == 0) armci_die("vector packetization problem:buffer too small",BUFSIZE1); } len -=nlen; ndarr +=nlen; count ++; } return rc; } ga-5-3/armci/src/common/iterator.c0000640005473000001440000001041311721474416015751 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file iterator.h * @author Sriram Krishnamoorthy * @brief Stride iterator. * An iterator for the stride descriptor to reuse common traversal * functionality. More functionality related to the strided * descriptor reusable across files will be extracted here as well. */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #include "iterator.h" /**Create a stride iterator. * @param base_ptr IN Starting pointer for stride descriptor * @param stride_levels IN #stride levels * @param stride_arr IN the strides (arr of size[stride_levels]) * @param seg_count IN #segments in each stride * level([stride_levels+1]) * @return Handle to stride iterator created */ void armci_stride_info_init(stride_info_t *sinfo, void *base_ptr, int stride_levels, const int *stride_arr, const int *seg_count) { int i; dassert(1,sinfo!=NULL); dassert(1,stride_levels>=0); dassert(1,stride_levels<=ARMCI_MAX_STRIDE_LEVEL); for(i=0; i= seg_count[0]); else dassert(1,stride_arr[i] >= stride_arr[i-1]*seg_count[i]); } sinfo->base_ptr= base_ptr; sinfo->stride_levels = stride_levels; for(i=0; istride_arr[i] = stride_arr[i]; } for(i=0; iseg_count[i] = seg_count[i]; } sinfo->size=1; for(i=1; isize *= sinfo->seg_count[i]; } dassert(1,sinfo->size>0); sinfo->pos=0; for(i=0; iitr[i] = 0; } } /**Destroy a stride iterator. * @param psitr IN/OUT Pointer to stride iterator * @return void */ void armci_stride_info_destroy(stride_info_t *sinfo) { } /**Size of the stride iterator. Defined as total #contiguous * segments in the stride iterator. * @param sitr IN Handle to stride iterator * @return Size of the stride iterator */ int armci_stride_info_size(stride_info_t *sinfo) { dassert(1,sinfo!=NULL); return sinfo->size; } /**Position of the stride iterator. Between 0 and (size-1), * inclusive. Position is the index of the contiguous segment * currently traversed by the iterator. * @param sitr IN Handle to stride descriptor * @return Position of the iterator */ int armci_stride_info_pos(stride_info_t *sinfo) { dassert(1,sinfo!=NULL); return sinfo->pos; } /**Move the iterator to the next position. Assumes position<=size. * @param sitr IN Handle to stride descriptor * @return void */ void armci_stride_info_next(stride_info_t *sinfo) { int i; dassert(1,sinfo!=NULL); dassert(1,sinfo->pos size); sinfo->pos += 1; if(sinfo->stride_levels>0) { sinfo->itr[0] += 1; for(i=0; istride_levels-1 && sinfo->itr[i]==sinfo->seg_count[i+1]; i++) { sinfo->itr[i] = 0; sinfo->itr[i+1] += 1; } dassert(1,sinfo->itr[i] <= sinfo->seg_count[i+1]); } } /**Get pointer to the contiguous segment currently being * traversed. This is the pointer to the user buffer. * @param sitr IN Handle to stride descriptor * @return pointer to current contiguous segment */ void *armci_stride_info_seg_ptr(stride_info_t *sinfo) { dassert(1,sinfo!=NULL); return sinfo->base_ptr + armci_stride_info_seg_off(sinfo); } /**Get the size of the current segment. * @param sitr IN Handle to stride descriptor * @return Size of the current segment */ int armci_stride_info_seg_size(stride_info_t *sinfo) { dassert(1,sinfo!=NULL); return sinfo->seg_count[0]; } /**Get the offset of the current segment with respect to the start of * the first segment (a.k.a src_ptr) * @param sitr IN Handle to stride descriptor * @return Offset of the current segment */ int armci_stride_info_seg_off(stride_info_t *sinfo) { int i; int off; dassert(1,sinfo!=NULL); off=0; for(i=0; istride_levels; i++) { off += sinfo->itr[i] * sinfo->stride_arr[i]; } return off; } /**Check if there are more segments to iterate over. (a.k.a * positionpossize; } ga-5-3/armci/src/common/gpc.c0000640005473000001440000002575711447161660014711 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: gpc.c,v 1.7.4.4 2007-06-13 00:44:01 vinod Exp $ ***************************************************** Prototype of Global Procedure Calls. July/03 JN - shared memory version *************************************************************/ #if HAVE_STDIO_H # include #endif #include "armcip.h" #include "locks.h" #include "gpc.h" #define GPC_SLOTS 32 #define GPC_OFFSET -100 static void *_table[GPC_SLOTS]={ (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0, (void*)0}; /*\ callback functions must be registered -- user gets int handle back \*/ int ARMCI_Gpc_register( int (*func) ()) { int handle =-1, candidate = 0; PARMCI_Barrier(); do{ if(!_table[candidate]){ handle = candidate; _table[candidate]=func; } candidate++; }while(candidate < GPC_SLOTS && handle == -1); return(GPC_OFFSET-handle); } /*\ release/deassociate handle with previously registered callback function \*/ void ARMCI_Gpc_release(int handle) { int h = -handle + GPC_OFFSET; PARMCI_Barrier(); if(h<0 || h >= GPC_SLOTS) armci_die("ARMCI_Gpc_release: bad handle",h); _table[h] = (void*)0; } /*\ Send Request to Execute callback function in a global address space * Arguments: * f - handle to the callback function * p - remote processor * hdr - header data - used to pack extra args for callback (local buffer) * hlen - size of header data < ARMCI_GPC_HLEN * data - bulk data passed to callback (local buffer) * dlen - length of bulk data * rhdr - ptr to reply header (return args from callback) * rhlen - length of buffer to store reply header < ARMCI_GPC_HLEN * rdata - ptr to where reply data from callback should be stored (local buf) * rdlen - size of the buffer to store reply data * nbh - nonblocking handle * \*/ int ARMCI_Gpc_exec(int h, int p, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, void *rdata, int rdlen, gpc_hdl_t* nbh) { int hnd = -h + GPC_OFFSET; int err = 0; armci_hdl_t *ahdl = (nbh ? &(nbh->ahdl): NULL); if(hnd <0 || hnd>= GPC_SLOTS) err += fprintf(stderr, "ARMCI_Gpc_exec: bad callback handle %d: %d\n",hnd,GPC_SLOTS); if(!_table[hnd]) err += fprintf(stderr, "ARMCI_Gpc_exec: NULL function %d",hnd); if(hlen<0 || hlen>=ARMCI_Gpc_get_hlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid send header size %d %d\n", hlen, ARMCI_Gpc_get_hlen()); if(rhlen<0 || rhlen>=ARMCI_Gpc_get_hlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid recv header size %d %d\n", rhlen, ARMCI_Gpc_get_hlen()); if(dlen<0 || dlen>=ARMCI_Gpc_get_dlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid send data size %d %d\n", dlen, ARMCI_Gpc_get_dlen()); if(rdlen<0 || rdlen>=ARMCI_Gpc_get_dlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid recv data size %d %d\n", rdlen, ARMCI_Gpc_get_dlen()); if(hlen>0 && hdr==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null send header for non-zero header size %d\n", hlen); if(rhlen>0 && rhdr==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null recv header for non-zero header size %d\n", rhlen); if(dlen>0 && data==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null send data for non-zero data size %d\n", dlen); if(rdlen>0 && rdata==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null recv data for non-zero header size %d\n", rdlen); if(p<0 || p >= armci_nproc) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid target processor id %d\n", p, armci_nproc); if(err) return FAIL; if(rhlen + rdlen == 0) armci_die("Zero reply header + data length not yet supported", 0); if(nbh) nbh->proc = p; #if 1 if(SAMECLUSNODE(p) && armci_nproc==1) { int rhsize, rdsize; int (*func)(); /* fprintf(stderr, "%d:: armci gpc exec. SAMECLUSNODE\n", armci_me); */ func = _table[hnd]; if(func(p, armci_me, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, rdata, rdlen, &rdsize, GPC_INIT) != GPC_DONE) { func(p, armci_me, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, rdata, rdlen, &rdsize, GPC_WAIT); } #ifndef VAPI PARMCI_Fence(p); #endif return 0; } #endif /* fprintf(stderr, "%d:: armci gpc exec. invoking armci gpc\n", armci_me); */ return armci_gpc(h, p, hdr, hlen, data, dlen, rhdr, rhlen, rdata, rdlen, ahdl); } /* func - handle to the function executed at each process in the chain callba- handle to the callback to be executed when hdr - header data used to pack extra args for callback (local buffer) hlen - size of header data < ARMCI_GPC_HLEN data - bulk data passed to callback (local buffer) dlen - length of bulk data rhdr - ptr to reply header (return args from callback) rhlen - length of buffer to store reply header < ARMCI_GPC_HLEN rdata - ptr to where reply data from callback should be stored (local buf) rdlen - size of the buffer to store reply data idlen - number of ID's idslst- list of id's in the chained GPC nbh - nonblocking handle which also acts as a context for each individual GPC Tree - the id of tree function used (default is 0=>binary, 1=>binomial, n=> user defined) */ int ARMCI_Gpc_chained_exec(int func, int callback, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, void *rdata, int rdlen, int idlen, int *idlst, gpc_hdl_t* nbh, int TREE) { #if 0 int hnd = -func + GPC_OFFSET; int err = 0; armci_hdl_t *ahdl = (nbh ? &(nbh->ahdl): NULL); if(hnd <0 || hnd>= GPC_SLOTS) err += fprintf(stderr, "ARMCI_Gpc_exec: bad callback handle %d: %d\n",hnd,GPC_SLOTS); if(!_table[hnd]) err += fprintf(stderr, "ARMCI_Gpc_exec: NULL function %d",hnd); if(hlen<0 || hlen>=ARMCI_Gpc_get_hlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid send header size %d %d\n", hlen, ARMCI_Gpc_get_hlen()); if(rhlen<0 || rhlen>=ARMCI_Gpc_get_hlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid recv header size %d %d\n", rhlen, ARMCI_Gpc_get_hlen()); if(dlen<0 || dlen>=ARMCI_Gpc_get_dlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid send data size %d %d\n", dlen, ARMCI_Gpc_get_dlen()); if(rdlen<0 || rdlen>=ARMCI_Gpc_get_dlen()) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid recv data size %d %d\n", rdlen, ARMCI_Gpc_get_dlen()); if(hlen>0 && hdr==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null send header for non-zero header size %d\n", hlen); if(rhlen>0 && rhdr==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null recv header for non-zero header size %d\n", rhlen); if(dlen>0 && data==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null send data for non-zero data size %d\n", dlen); if(rdlen>0 && rdata==NULL) err += fprintf(stderr, "ARMCI_Gpc_exec: Null recv data for non-zero header size %d\n", rdlen); if(p<0 || p >= armci_nproc) err += fprintf(stderr, "ARMCI_Gpc_exec: Invalid target processor id %d\n", p, armci_nproc); if(err) return FAIL; if(rhlen + rdlen == 0) armci_die("Zero reply header + data length not yet supported", 0); tree_id = armci_msg_generate_tree(idlst,idlen,id_tree,TREE); if(nbh) nbh->proc = p; #if 1 if(SAMECLUSNODE(p) && armci_nproc==1) { int rhsize, rdsize; int (*func)(); /* fprintf(stderr, "%d:: armci gpc exec. SAMECLUSNODE\n", armci_me); */ func = _table[hnd]; if(func(p, armci_me, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, rdata, rdlen, &rdsize, GPC_INIT) != GPC_DONE) { func(p, armci_me, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, rdata, rdlen, &rdsize, GPC_WAIT); } #ifndef VAPI PARMCI_Fence(p); #endif return 0; } #endif /* fprintf(stderr, "%d:: armci gpc exec. invoking armci gpc\n", armci_me); */ return armci_gpc(h, p, hdr, hlen, data, dlen, rhdr, rhlen, rdata, rdlen, ahdl); #endif } int armci_gpc_local_exec(int h, int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, void *rdata, int rdlen, int rtype) { int rhsize, rdsize; int (*func)(); int hnd = -h + GPC_OFFSET; if(hnd <0 || hnd>= GPC_SLOTS) armci_die2("armci_gpc_local_exec: bad callback handle",hnd,GPC_SLOTS); if(!_table[hnd]) armci_die("armci_gpc_local_exec: NULL function",hnd); func = _table[hnd]; if(!SAMECLUSNODE(to)) armci_die("armci_gpc_local_exec: GPC call to a different node received!", armci_me); /* func(to, from, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, */ /* rdata, rdlen, &rdsize); */ /* return 0; */ return func(to, from, hdr, hlen, data, dlen, rhdr, rhlen, &rhsize, rdata, rdlen, &rdsize, rtype); } /*\ * This is a template for the callback function * The arguments are passed as specified in ARMCI_Gpc_exec * In addition, * rhsize specifies the actual size of reply header data returned * rdsize specifies the actual size of reply data returned \*/ int example_func(int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, int *rhsize, void *rdata, int rdlen, int *rdsize, int rtype); #ifdef LAPI void armci_gpc_set_serverpid(){ } #endif /*\ * Translate pointer to memory on processor "proc" * to be used in a callback function send by processor "from" \*/ void * ARMCI_Gpc_translate(void *ptr, int proc, int from) { return ptr; } /*\ acquire lock in a callback function executed in context of processor "proc" \*/ void ARMCI_Gpc_lock(int proc) { #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif NATIVE_LOCK(lock,proc); } /*\ try acquire lock in a callback function to be executed in context of * processor "proc" * return value: 1 - success * 0 - failure (already locked by another thread) \*/ int ARMCI_Gpc_trylock(int proc) { armci_die("ARMCI_Gpc_trylock: not yet implemented",0); return 0; } /*\ release lock in a callback function executed in context of processor "proc" \*/ void ARMCI_Gpc_unlock(int proc) { #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif NATIVE_UNLOCK(lock,proc); } void ARMCI_Gpc_init_handle(gpc_hdl_t *nbh) { nbh->proc = armci_me; ARMCI_INIT_HANDLE(&nbh->ahdl); } void ARMCI_Gpc_wait(gpc_hdl_t *nbh) { if(SAMECLUSNODE(nbh->proc)) return; PARMCI_Wait(&nbh->ahdl); } void ARMCI_Gpc_test(gpc_hdl_t *nbh) { if(SAMECLUSNODE(nbh->proc)) return; PARMCI_Test(&nbh->ahdl); } #define ARMCI_GPC_HLEN 65536 #define ARMCI_GPC_DLEN 65536 int ARMCI_Gpc_get_hlen() { return ARMCI_GPC_HLEN; } int ARMCI_Gpc_get_dlen() { return ARMCI_GPC_DLEN; } ga-5-3/armci/src/common/noncont.c0000640005473000001440000002052411444464075015604 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: noncont.c,v 1.3.2.2 2007-05-04 16:43:35 d3p687 Exp $ * noncont.c * * Developed by Andriy Kot * Copyright (c) 2006 Pacific Northwest National Laboratory * * Alternative version of non-contiguous calls using non-blocking ones * * Changelog: * 2006-09-08 - created * */ #include "armcip.h" #include "copy.h" #include "acc.h" #include "memlock.h" #if HAVE_STDIO_H # include #endif #ifdef PORTALS #include "armci_portals.h" #endif #if 0 # define PRN_DBG_MSG3(m,a1,a2,a3) \ fprintf(stderr,"DBG %d: " m,armci_me,a1,a2,a3);fflush(stderr) # define PRN_DBG_MSG(m) PRN_DBG_MSG3(m,0,0,0) # define PRN_DBG_MSG1(m,a1) PRN_DBG_MSG3(m,a1,0,0) # define PRN_DBG_MSG2(m,a1,a2) PRN_DBG_MSG3(m,a1,a2,0) #else # define PRN_DBG_MSG(m) # define PRN_DBG_MSG1(m,a1) # define PRN_DBG_MSG2(m,a1,a2) # define PRN_DBG_MSG3(m,a1,a2,a3) #endif #if 0 # define CALL_IN(_func) { if (armci_me == 0) printf("ENTERED %s\n", _func); fflush(stdout); } # define CALL_OUT(_func) { if (armci_me == 0) printf("EXITING %s\n", _func); fflush(stdout); } #else # define CALL_IN(_func) # define CALL_OUT(_func) #endif #ifdef NB_NONCONT #if defined(QUADRICS) typedef ELAN_EVENT *HTYPE; #define SHMEM_HANDLE_SUPPORTED #elif defined(CRAY_SHMEM) typedef void *HTYPE; #else typedef armci_ireq_t HTYPE; #endif #define MAX_SLOTS_LL 64 #define MIN_OUTSTANDING 6 static int max_pending = 16; /* throttle number of outstanding nb calls */ /* might have to use MAX_SLOTS_LL < MAX_PENDING due to throttling problem */ #define MAX_PENDING 6 #define ZR (HTYPE)0 static HTYPE put_dscr[MAX_SLOTS_LL]; static HTYPE get_dscr[MAX_SLOTS_LL]; /* static variables alreay initialize to 0 (?) static HTYPE put_dscr[MAX_SLOTS_LL]= { ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR, ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR}; static HTYPE get_dscr[MAX_SLOTS_LL] = { ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR, ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR,ZR}; */ #if defined(PORTALS) extern ARMCI_MEMHDL_T *mhloc; extern ARMCI_MEMHDL_T *mhrem; # define INI_HDL(_hdl, _op, _proc) { \ (_hdl).tag = GET_NEXT_NBTAG(); \ (_hdl).op = _op; \ (_hdl).proc = _proc; \ (_hdl).bufid = NB_NONE; \ } # define CLR_HDL(_hdl) ((_hdl).tag = 0) # define CHK_HDL(_hdl) (_hdl.tag) #else # define CLR_HDL(_hdl) ((_hdl) = ZR) # define CHK_HDL(_hdl) (_hdl) # define INI_HDL(_hdl, _op, _proc) #endif static int cur_get=0; static int cur_put=0; static int pending_get=0; static int pending_put=0; /* strided put, nonblocking */ void armcill_put2D(int proc, int bytes, int count, void* src_ptr,int src_stride, void* dst_ptr,int dst_stride) { CALL_IN("armcill_put2D"); int _j, i, batch, issued=0; char *ps=src_ptr, *pd=dst_ptr; for (_j = 0; _j < count; ){ /* how big a batch of requests can we issue */ batch = (count - _j )=max_pending)cur_put=0; } } if(issued != count) armci_die2("armcill_put2D: mismatch %d %d \n", count,issued); CALL_OUT("armcill_put2D"); } /* blocking vector put */ void armcill_putv(int proc, int bytes, int count, void* src[], void* dst[]) { int _j, i, batch, issued=0; void *ps, *pd; for (_j = 0; _j < count; ){ /* how big a batch of requests can we issue */ batch = (count - _j )=max_pending)cur_put=0; } } if(issued != count) armci_die2("armcill_putv: mismatch\n", count,issued); #ifdef SHMEM_HANDLE_SUPPORTED for(i=0; i=max_pending)cur_get=0; } } if(issued != count) armci_die2("armcill_get2D: mismatch %d %d \n", count,issued); CALL_OUT("armcill_get2D"); } /* blocking vector get */ void armcill_getv(int proc, int bytes, int count, void* src[], void* dst[]) { int _j, i, batch, issued=0; void *ps, *pd; for (_j = 0; _j < count; ){ /* how big a batch of requests can we issue */ batch = (count - _j )=max_pending)cur_get=0; } } if(issued != count) armci_die2("armcill_getv: mismatch %d %d \n", count,issued); #ifdef SHMEM_HANDLE_SUPPORTED for(i=0; i #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_ASSERT_H # include #endif #ifndef MPI # define MPI #endif #include "armcip.h" #include "message.h" #define DEBUG_ 0 MPI_Comm ARMCI_COMM_WORLD; /*dup of MPI_COMM_WORLD. Initialized first thing in ARMCI_Init*/ ARMCI_Group ARMCI_Default_Proc_Group = 0; ARMCI_Group ARMCI_World_Proc_Group = 0; typedef struct group_list_struct { ARMCI_Group group; ARMCI_iGroup igroup; struct group_list_struct *next; } group_list_t; group_list_t *group_list = NULL; ARMCI_iGroup* armci_get_igroup_from_group(ARMCI_Group *group) { group_list_t *current_group_list_item = group_list; assert(group_list != NULL); while (current_group_list_item != NULL) { if (current_group_list_item->group == *group) { return ¤t_group_list_item->igroup; } current_group_list_item = current_group_list_item->next; } armci_die("ARMCI_Group lookup failed", -1); return NULL; } static void armci_create_group_and_igroup(ARMCI_Group *group, ARMCI_iGroup **igroup) { group_list_t *new_group_list_item = NULL; group_list_t *last_group_list_item = NULL; /* create the new group in the linked list */ last_group_list_item = group_list; while (last_group_list_item->next != NULL) { last_group_list_item = last_group_list_item->next; } new_group_list_item = malloc(sizeof(group_list_t)); new_group_list_item->group = last_group_list_item->group + 1; new_group_list_item->next = NULL; *igroup = &new_group_list_item->igroup; *group = new_group_list_item->group; last_group_list_item->next = new_group_list_item; } #ifdef ARMCI_GROUP void ARMCI_Bcast_(void *buffer, int len, int root, ARMCI_Group *group) { armci_msg_group_bcast_scope(SCOPE_ALL, buffer, len, ARMCI_Absolute_id(group, root), group); } #else void ARMCI_Bcast_(void *buffer, int len, int root, ARMCI_Comm comm) { int result; MPI_Comm_compare(comm, ARMCI_COMM_WORLD, &result); if(result == MPI_IDENT) armci_msg_brdcst(buffer, len, root); else MPI_Bcast(buffer, len, MPI_BYTE, root, (MPI_Comm)comm); } #endif int ARMCI_Group_rank(ARMCI_Group *group, int *rank) { ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); #ifdef ARMCI_GROUP if(!igroup) return MPI_ERR_GROUP; *rank = igroup->grp_attr.grp_me; return MPI_SUCCESS; #else return MPI_Group_rank((MPI_Group)(igroup->igroup), rank); #endif } void ARMCI_Group_size(ARMCI_Group *group, int *size) { ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); #ifdef ARMCI_GROUP *size = igroup->grp_attr.nproc; #else MPI_Group_size((MPI_Group)(igroup->igroup), size); #endif } int ARMCI_Absolute_id(ARMCI_Group *group,int group_rank) { int abs_rank,status; ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); #ifdef ARMCI_GROUP assert(group_rank < igroup->grp_attr.nproc); return igroup->grp_attr.proc_list[group_rank]; #else MPI_Group grp; status = MPI_Comm_group(ARMCI_COMM_WORLD,&grp); MPI_Group_translate_ranks(igroup->igroup,1,&group_rank,grp,&abs_rank); return(abs_rank); #endif } void ARMCI_Group_set_default(ARMCI_Group *group) { ARMCI_Default_Proc_Group = *group; } void ARMCI_Group_get_default(ARMCI_Group *group_out) { *group_out = ARMCI_Default_Proc_Group; } void ARMCI_Group_get_world(ARMCI_Group *group_out) { *group_out = ARMCI_World_Proc_Group; } static void get_group_clus_id(ARMCI_iGroup *igroup, int grp_nproc, int *grp_clus_id) { #ifdef ARMCI_GROUP int i; assert(grp_nproc<=igroup->grp_attr.nproc); for(i=0; igrp_attr.proc_list[i]); } #else int i, *ranks1, *ranks2; MPI_Group group2; /* Takes the list of processes from one group and attempts to determine * the corresponding ranks in a second group (here, ARMCI_COMM_WORLD) */ ranks1 = (int *)malloc(2*grp_nproc*sizeof(int)); ranks2 = ranks1 + grp_nproc; for(i=0; iigroup, grp_nproc, ranks1, group2, ranks2); /* get the clus_id of processes */ for(i=0; iicomm; #endif int grp_me, grp_nproc, grp_nclus, grp_clus_me; armci_clus_t *grp_clus_info=NULL; #ifdef CLUSTER int i, len, root=0; #endif #ifndef ARMCI_GROUP if(comm==MPI_COMM_NULL || igroup->igroup==MPI_GROUP_NULL) armci_die("group_process_list: NULL COMMUNICATOR",0); #endif ARMCI_Group_rank(group, &grp_me); ARMCI_Group_size(group, &grp_nproc); #ifdef CLUSTER # ifdef ARMCI_GROUP /*all processes construct the clus_info structure in parallel*/ grp_clus_info = group_construct_clusinfo(&grp_nclus, group); # else /* process 0 gets group cluster information: grp_nclus, grp_clus_info */ if(grp_me == 0) { grp_clus_info = group_construct_clusinfo(&grp_nclus, group); } /* process 0 broadcasts group cluster information */ len = sizeof(int); ARMCI_Bcast_(&grp_nclus, len, root, comm); if(grp_me){ /* allocate memory */ grp_clus_info = (armci_clus_t*)malloc(grp_nclus*sizeof(armci_clus_t)); if(!armci_clus_info)armci_die("malloc failed for clusinfo",armci_nclus); } len = sizeof(armci_clus_t)*grp_nclus; ARMCI_Bcast_(grp_clus_info, len, root, comm); # endif /* determine current group cluster node id by comparing me to master */ grp_clus_me = grp_nclus-1; for(i =0; i< grp_nclus-1; i++) { if(grp_me < grp_clus_info[i+1].master){ grp_clus_me=i; break; } } #else /* !CLUSTER */ grp_clus_me = 0; grp_nclus = 1; grp_clus_info = (armci_clus_t*)malloc(grp_nclus*sizeof(armci_clus_t)); if(!grp_clus_info)armci_die("malloc failed for clusinfo",grp_nclus); strcpy(grp_clus_info[0].hostname, armci_clus_info[0].hostname); grp_clus_info[0].master=0; grp_clus_info[0].nslave=grp_nproc; #endif /* CLUSTER */ #ifdef ARMCI_GROUP /*Set in ARMCI_Group_create. ARMCI_Group_rank is used before setting this field. So moving it there in the generic implementation.*/ #else grp_attr->grp_me = grp_me; #endif grp_attr->grp_clus_info = grp_clus_info; grp_attr->grp_nclus = grp_nclus; grp_attr->grp_clus_me = grp_clus_me; } /* attribute caching: group_cluster_information and memory_offset should be cached in group data structure */ static void armci_cache_attr(ARMCI_Group *group) { armci_grp_attr_t *grp_attr; ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); /* allocate storage for the attribute content. Note: Attribute contents should be stored in persistent memory */ grp_attr = &(igroup->grp_attr); /* get group cluster information and grp_attr */ group_process_list(group, grp_attr); } armci_grp_attr_t *ARMCI_Group_getattr(ARMCI_Group *group) { ARMCI_iGroup *igroup = armci_get_igroup_from_group(group); return(&(igroup->grp_attr)); } static void armci_igroup_finalize(ARMCI_iGroup *igroup) { #ifdef ARMCI_GROUP int world_me, i; world_me = armci_msg_me(); for(i=0; igrp_attr.nproc; i++) { if(igroup->grp_attr.proc_list[i] == world_me) { break; } } if(i==igroup->grp_attr.nproc) { return; /*not in group to be freed*/ } assert(igroup); free(igroup->grp_attr.grp_clus_info); free(igroup->grp_attr.proc_list); igroup->grp_attr.nproc = 0; #else int rv; assert(igroup); /*the following was causing seg fault*/ /*free(igroup->grp_attr.grp_clus_info);*/ rv=MPI_Group_free(&(igroup->igroup)); if(rv != MPI_SUCCESS) armci_die("MPI_Group_free: Failed ",armci_me); if(igroup->icomm != MPI_COMM_NULL) { rv = MPI_Comm_free( (MPI_Comm*)&(igroup->icomm) ); if(rv != MPI_SUCCESS) armci_die("MPI_Comm_free: Failed ",armci_me); } #endif } void ARMCI_Group_free(ARMCI_Group *group) { group_list_t *current_group_list_item = group_list; group_list_t *previous_group_list_item = NULL; /* find the group to free */ while (current_group_list_item != NULL) { if (current_group_list_item->group == *group) { break; } previous_group_list_item = current_group_list_item; current_group_list_item = current_group_list_item->next; } /* make sure we found a group */ assert(current_group_list_item != NULL); /* remove the group from the linked list */ if (previous_group_list_item != NULL) { previous_group_list_item->next = current_group_list_item->next; } /* free the group */ armci_igroup_finalize(¤t_group_list_item->igroup); free(current_group_list_item); } /* Create a child group for to the given group. @param n IN #procs in this group (<= that in group_parent) @param pid_list IN The list of proc ids (w.r.t. group_parent) @param group_out OUT Handle to store the created group @param group_parent IN Parent group */ void ARMCI_Group_create_child(int n, int *pid_list, ARMCI_Group *group_out, ARMCI_Group *grp_parent) { int grp_me; ARMCI_iGroup *igroup = NULL; #ifdef ARMCI_GROUP int i, world_me, parent_grp_me; armci_grp_attr_t *grp_attr = NULL; #else int rv; ARMCI_iGroup *igroup_parent = NULL; MPI_Group *group_parent = NULL; MPI_Comm *comm_parent = NULL; #endif armci_create_group_and_igroup(group_out, &igroup); #ifdef ARMCI_GROUP grp_attr = &igroup->grp_attr; ARMCI_Group_rank(grp_parent, &parent_grp_me); for(i=0; inproc=0; grp_attr->proc_list = NULL; return; /*not in group to be created*/ } for(i=0; i pid_list[i+1]){ armci_die("ARMCI_Group_create: Process ids are not sorted ",armci_me); break; } } grp_attr->grp_clus_info = NULL; grp_attr->nproc = n; grp_attr->proc_list = (int *)malloc(n*sizeof(int)); assert(grp_attr->proc_list!=NULL); for(i=0; iproc_list[i] = ARMCI_Absolute_id(grp_parent,pid_list[i]); } world_me = armci_msg_me(); grp_attr->grp_me = grp_me = MPI_UNDEFINED; for(i=0; igrp_attr.proc_list[i] == world_me) { grp_attr->grp_me = grp_me = i; break; } } if(grp_me != MPI_UNDEFINED) armci_cache_attr(group_out); armci_msg_group_barrier(group_out); #else igroup_parent = armci_get_igroup_from_group(grp_parent); /* NOTE: default group is the parent group */ group_parent = &(igroup_parent->igroup); comm_parent = &(igroup_parent->icomm); rv=MPI_Group_incl(*group_parent, n, pid_list, &(igroup->igroup)); if(rv != MPI_SUCCESS) armci_die("MPI_Group_incl: Failed ",armci_me); { MPI_Comm comm, comm1, comm2; int lvl=1, local_ldr_pos; MPI_Group_rank((MPI_Group)(igroup->igroup), &grp_me); if(grp_me == MPI_UNDEFINED) { igroup->icomm = MPI_COMM_NULL; /*FIXME: keeping the group around for now*/ return; } assert(grp_me>=0); /*SK: sanity check for the following bitwise operations*/ MPI_Comm_dup(MPI_COMM_SELF, &comm); /*FIXME: can be optimized away*/ local_ldr_pos = grp_me; while(n> lvl) { int tag=0; int remote_ldr_pos = local_ldr_pos^lvl; if(remote_ldr_pos < n) { int remote_leader = pid_list[remote_ldr_pos]; MPI_Comm peer_comm = *comm_parent; int high = (local_ldr_posicomm = comm; MPI_Group_free(&igroup->igroup); /*cleanup temporary group*/ MPI_Comm_group(igroup->icomm, &igroup->igroup); /*the group associated with comm*/ igroup->grp_attr.grp_clus_info=NULL; /* processes belong to this group should cache attributes */ armci_cache_attr(group_out); } #endif } void ARMCI_Group_create(int n, int *pid_list, ARMCI_Group *group_out) { ARMCI_Group_create_child(n, pid_list, group_out, (ARMCI_Group *)&ARMCI_Default_Proc_Group); } void armci_group_init() { #ifdef ARMCI_GROUP int i; #else int grp_me; #endif ARMCI_iGroup *igroup; /* Initially, World group is the default group */ ARMCI_World_Proc_Group = 0; ARMCI_Default_Proc_Group = 0; /* create the head of the group linked list */ assert(group_list == NULL); group_list = malloc(sizeof(group_list_t)); group_list->group = ARMCI_World_Proc_Group; group_list->next = NULL; igroup = &group_list->igroup; #ifdef ARMCI_GROUP /*setup the world proc group*/ igroup->grp_attr.nproc = armci_msg_nproc(); igroup->grp_attr.grp_me = armci_msg_me(); igroup->grp_attr.proc_list = (int *)malloc(igroup->grp_attr.nproc*sizeof(int)); assert(igroup->grp_attr.proc_list != NULL); for(i=0; igrp_attr.nproc; i++) { igroup->grp_attr.proc_list[i] = i; } igroup->grp_attr.grp_clus_info = NULL; armci_cache_attr(&ARMCI_World_Proc_Group); #else /* save MPI world group and communicatior in ARMCI_World_Proc_Group */ igroup->icomm = ARMCI_COMM_WORLD; MPI_Comm_group(ARMCI_COMM_WORLD, &(igroup->igroup)); /* processes belong to this group should cache attributes */ MPI_Group_rank((MPI_Group)(igroup->igroup), &grp_me); if(grp_me != MPI_UNDEFINED) { armci_cache_attr(&ARMCI_World_Proc_Group); } #endif } void armci_group_finalize() { group_list_t *current_group_list_item = group_list; group_list_t *previous_group_list_item = NULL; /* don't free the world group (the list head) */ current_group_list_item = current_group_list_item->next; while (current_group_list_item != NULL) { previous_group_list_item = current_group_list_item; current_group_list_item = current_group_list_item->next; armci_igroup_finalize(&previous_group_list_item->igroup); free(previous_group_list_item); } } /* ISSUES: 1. Make sure ARMCI_Group_free frees the attribute data structures 2. replace malloc with, kr_malloc using local_context. */ ga-5-3/armci/src/common/async.c0000640005473000001440000000735011444464075015245 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: async.c,v 1.5 2002-12-18 18:25:33 vinod Exp $ */ /* data structures and interfaces for handling asynchronous requests */ #if HAVE_STDIO_H # include #endif #include "armcip.h" #define DEBUG_ 0 /* #define UBUF_LEN 496 */ #define MAX_PENDING_REQ 4 #define MAX_STRIDE_LEVELS 8 typedef struct { void *ptr; int stride_levels; int stride_arr[MAX_STRIDE_LEVELS]; int count[MAX_STRIDE_LEVELS]; }strided_dscr_t; typedef struct { int segments; int len; void *ptrs[60]; }vector_dscr_t; typedef struct { int reqid; /* request id */ int bufid; /* communication buffer id */ union { /* 8 bytes for alignment reason */ void *dscrbuf; double pad; }ptr; union { char buf[UBUF_LEN]; strided_dscr_t strided; vector_dscr_t vector; }dscr; }saved_dscr_t; static int cur_id=191; #define GET_REQ_ID cur_id++ #define REQ_TO_DSC_ID(reqid) ((reqid)>>8) static saved_dscr_t armci_pending_dscr[MAX_PENDING_REQ]; /*\ save a part of strided descriptor needed to complete request \*/ void _armci_asyn_save_dscr_strided(int id, void *ptr, int stride[], int count[], int levels) { strided_dscr_t *dscr; int i, dsc_id = REQ_TO_DSC_ID(id); dscr = &armci_pending_dscr[dsc_id].dscr.strided; dscr->stride_levels = levels; dscr->ptr =ptr; for(i=0;istride_arr[i]=stride[i]; for(i=0;icount[i]=count[i]; } /*\ for request stored in buf, save local strided descriptor and return req id \*/ int _armci_asyn_init_strided_get(void *buf, void *ptr,int levels, int stride[], int count[]) { int id, i; int dsc_id=_armci_buf_to_index(buf); strided_dscr_t *dscr; dscr = &armci_pending_dscr[dsc_id].dscr.strided; dscr->stride_levels = levels; dscr->ptr =ptr; for(i=0;istride_arr[i]=stride[i]; for(i=0;icount[i]=count[i]; /* convert bufid into req id returned to user */ id = dsc_id; id <<= 8; /* buffer id is in second byte */ cur_id = (cur_id+1)%255 +1; /* counter in LSB */ id += cur_id; armci_pending_dscr[dsc_id].reqid = id; if(DEBUG_){ printf("%d: init strided get: ptr=%p reqid=%d bufid=%d cid=%d levels=%d count[0]=%d\n", armci_me,ptr,id,dsc_id, cur_id, levels,count[0]); fflush(stdout); } return id; } void _armci_asyn_complete_strided_get(int dsc_id, void *buf) { request_header_t *msginfo = (request_header_t*) buf; strided_dscr_t *dscr; dscr = &armci_pending_dscr[dsc_id].dscr.strided; armci_pending_dscr[dsc_id].reqid = 0; if(DEBUG_){ printf("%d:complete_strided_get: ptr=%p bufid=%d levels=%d count[0]=%d\n", armci_me,dscr->ptr,dsc_id,dscr->stride_levels,dscr->count[0]); fflush(stdout); } armci_rcv_strided_data(msginfo->to, msginfo, msginfo->datalen, dscr->ptr, dscr->stride_levels, dscr->stride_arr,dscr->count); } #if 0 /*this function has been added in armci.c*/ int PARMCI_Wait(int req_id) { int dsc_id = REQ_TO_DSC_ID(req_id); void *buf; if(DEBUG_){ printf("%d: WAIT for req id=%d bufid=%d\n",armci_me,req_id,dsc_id); fflush(stdout); } buf = _armci_buf_ptr_from_id(dsc_id); if(dsc_id >MAX_PENDING_REQ) armci_die2("PARMCI_Wait: bad id",dsc_id,MAX_PENDING_REQ); /* when 0 it means the request was completed to get the buffer */ if(armci_pending_dscr[dsc_id].reqid == 0) return 0; /* return 1 if request id looks bad */ if(armci_pending_dscr[dsc_id].reqid < req_id) return 1; _armci_asyn_complete_strided_get(dsc_id,buf); FREE_SEND_BUFFER(buf); return 0; } #endif ga-5-3/armci/src/common/signaltrap.c0000640005473000001440000003210012176313271016255 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: signaltrap.c,v 1.28 2005-05-13 19:06:40 vinod Exp $ */ /******************************************************\ * Signal handler functions for the following signals: * * SIGINT, SIGCHLD, SIGBUS, SIGFPE, SIGILL, * * SIGSEGV, SIGSYS, SIGTRAP, SIGHUP, SIGTERM * * Used to call armci_error that frees up IPC resources * \******************************************************/ #if HAVE_SIGNAL_H # include #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDIO_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_WAIT_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_ERRNO_H # include #endif #include "armci.h" #include "armcip.h" #define PAUSE_ON_ERROR__ #define Error armci_die #if !defined(armci_die) extern void Error(); #endif #if (defined(ENCORE) || defined(SEQUENT) || defined(ARDENT)) # define SigType int #else # define SigType void #endif #ifndef SIG_ERR # define SIG_ERR (SigType (*)())-1 #endif extern int armci_me; int AR_caught_sigint=0; int AR_caught_sigterm=0; int AR_caught_sigchld=0; int AR_caught_sigsegv=0; int AR_caught_sig=0; SigType (*SigChldOrig)(), (*SigIntOrig)(), (*SigHupOrig)(), (*SigTermOrig)(); SigType (*SigSegvOrig)(); /*********************** SIGINT *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigIntHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigIntHandler(sig) #endif int sig; { AR_caught_sigint = 1; AR_caught_sig= sig; Error("SigIntHandler: interrupt signal was caught",(int) sig); } void TrapSigInt() /* Trap the signal SIGINT so that we can propagate error conditions and also tidy up shared system resources in a manner not possible just by killing everyone */ { if ( (SigIntOrig = signal(SIGINT, SigIntHandler)) == SIG_ERR) Error("TrapSigInt: error from signal setting SIGINT",0); } void RestoreSigInt() /* Restore the original signal handler */ { if(AR_caught_sigint) SigIntOrig(SIGINT); if ( signal(SIGINT, SigIntOrig) == SIG_ERR) Error("RestoreSigInt: error from restoring signal SIGINT",0); } /*********************** SIGABORT *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigAbortHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigAbortHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("SigIntHandler: abort signal was caught: cleaning up",(int) sig); } void TrapSigAbort() /* Trap the signal SIGINT so that we can propagate error conditions and also tidy up shared system resources in a manner not possible just by killing everyone */ { if ( signal(SIGINT, SigAbortHandler) == SIG_ERR) Error("TrapSigAbort: error from signal setting SIGABORT",0); } /*********************** SIGCHLD *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigChldHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigChldHandler(sig) #endif int sig; { int status; #if defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || defined(NEXT) union wait ustatus; #endif #if defined(LINUX) pid_t ret; /* Trap signal as soon as possible to avoid race */ if ( (SigChldOrig = signal(SIGCHLD, SigChldHandler)) == SIG_ERR) Error("SigChldHandler: error from signal setting SIGCHLD",0); #endif #if defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || defined(NEXT) # if defined(LINUX) ret = wait(&ustatus); if((ret == 0) || ((ret == -1) && (errno == ECHILD))) { return; } # else (void) wait(&ustatus); # endif status = ustatus.w_status; #else # if defined(LINUX) ret = waitpid(0, &status, WNOHANG); if((ret == 0) || ((ret == -1) && (errno == ECHILD))) { return; } # else (void)wait(&status); # endif #endif AR_caught_sigchld=1; AR_caught_sig= sig; Error("Child process terminated prematurely, status=",(int) status); } void TrapSigChld() /* Trap SIGCHLD so that can tell if children die unexpectedly. */ { if ( (SigChldOrig = signal(SIGCHLD, SigChldHandler)) == SIG_ERR) Error("TrapSigChld: error from signal setting SIGCHLD",0); } void RestoreSigChld() { if(AR_caught_sigchld) SigChldOrig(SIGCHLD); if (signal(SIGCHLD, SigChldOrig) == SIG_ERR) Error("RestoreSigChld: error from restoring signal SIGChld",0); } void RestoreSigChldDfl() { (void) signal(SIGCHLD, SIG_DFL); } /*********************** SIGBUS *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigBusHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigBusHandler(sig) #endif int sig; { AR_caught_sig= sig; #ifdef PAUSE_ON_ERROR fprintf(stderr,"%d(%d): Bus Error ... pausing\n", armci_me, getpid() );pause(); #endif Error("Bus error, status=",(int) sig); } void TrapSigBus() /* Trap SIGBUS */ { if ( signal(SIGBUS, SigBusHandler) == SIG_ERR) Error("TrapSigBus: error from signal setting SIGBUS", 0); } /*********************** SIGFPE *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigFpeHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigFpeHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Floating Point Exception error, status=",(int) sig); } void TrapSigFpe() /* Trap SIGFPE */ { if ( signal(SIGFPE, SigFpeHandler) == SIG_ERR) Error("TrapSigFpe: error from signal setting SIGFPE", 0); } /*********************** SIGILL *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigIllHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigIllHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Illegal Instruction error, status=",(int) sig); } void TrapSigIll() /* Trap SIGILL */ { if ( signal(SIGILL, SigIllHandler) == SIG_ERR) Error("TrapSigIll: error from signal setting SIGILL", 0); } /*********************** SIGSEGV *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigSegvHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigSegvHandler(sig) #endif int sig; { AR_caught_sig= sig; AR_caught_sigsegv=1; #ifdef PAUSE_ON_ERROR fprintf(stderr,"%d(%s:%d): Segmentation Violation ... pausing\n", armci_me, armci_clus_info[armci_clus_me].hostname, getpid() );pause(); #endif Error("Segmentation Violation error, status=",(int) sig); } #ifdef ENABLE_CHECKPOINT static void * signal_arr[100]; SigType SigSegvActionSa(int sig,siginfo_t *sinfo, void *ptr) { int (*func)(); AR_caught_sig= sig; AR_caught_sigsegv=1; func = signal_arr[sig]; /*printf("\n%d:in sigaction %p, %d\n",armci_me,sinfo->si_addr,sinfo->si_errno);fflush(stdout);*/ if(func(sinfo->si_addr,sinfo->si_errno,sinfo->si_fd)) Error("Segmentation Violation error, status=",(int) SIGSEGV); } void TrapSigSegvSigaction() { struct sigaction sa; sa.sa_sigaction = (void *)SigSegvActionSa; sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; sigaction(SIGSEGV, &sa, NULL); } #endif void TrapSigSegv() /* Trap SIGSEGV */ { if ( (SigSegvOrig=signal(SIGSEGV, SigSegvHandler)) == SIG_ERR) Error("TrapSigSegv: error from signal setting SIGSEGV", 0); } void RestoreSigSegv() /* Restore the original signal handler */ { /* if(AR_caught_sigsegv) SigSegvOrig(SIGSEGV); */ #ifdef ENABLE_CHECKPOINT__ struct sigaction sa; sa.sa_handler = (void *)SigSegvOrig; sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; sigaction(SIGSEGV, &sa, NULL); sigaction(SIGSEGV,&sa,NULL); #else if ( signal(SIGSEGV,SigSegvOrig) == SIG_ERR) Error("RestoreSigSegv: error from restoring signal SIGSEGV",0); #endif } /*********************** SIGSYS *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigSysHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigSysHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Bad Argument To System Call error, status=",(int) sig); } void TrapSigSys() /* Trap SIGSYS */ { #ifndef LINUX if ( signal(SIGSYS, SigSysHandler) == SIG_ERR) Error("TrapSigSys: error from signal setting SIGSYS", 0); #endif } /*********************** SIGTRAP *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigTrapHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigTrapHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Trace Trap error, status=",(int) sig); } void TrapSigTrap() /* Trap SIGTRAP */ { if ( signal(SIGTRAP, SigTrapHandler) == SIG_ERR) Error("TrapSigTrap: error from signal setting SIGTRAP", 0); } /*********************** SIGHUP *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigHupHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigHupHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Hangup error, status=",(int) sig); } void TrapSigHup() /* Trap SIGHUP */ { if ( (SigHupOrig = signal(SIGHUP, SigHupHandler)) == SIG_ERR) Error("TrapSigHup: error from signal setting SIGHUP", 0); } void RestoreSigHup() /* Restore the original signal handler */ { if(AR_caught_sig== SIGHUP) SigHupOrig(SIGHUP); if ( signal(SIGHUP, SigHupOrig) == SIG_ERR) Error("RestoreSigHUP: error from restoring signal SIGHUP",0); } /*********************** SIGTERM *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigTermHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigTermHandler(sig) #endif int sig; { AR_caught_sigterm = 1; AR_caught_sig= sig; Error("Terminate signal was sent, status=",(int) sig); } void TrapSigTerm() /* Trap SIGTERM */ { if ( (SigTermOrig = signal(SIGTERM, SigTermHandler)) == SIG_ERR) Error("TrapSigTerm: error from signal setting SIGTERM", 0); } void RestoreSigTerm() /* Restore the original signal handler */ { if(AR_caught_sigterm && (SigTermOrig != SIG_DFL) ) SigTermOrig(SIGTERM); if ( signal(SIGTERM, SigTermOrig) == SIG_ERR) Error("RestoreSigTerm: error from restoring signal SIGTerm",0); } /*********************** SIGIOT *************************************/ #ifdef SIGIOT #if defined(SUN) && !defined(SOLARIS) SigType SigIotHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigIotHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("IOT signal was sent, status=",(int) sig); } void TrapSigIot() /* Trap SIGIOT */ { if ( signal(SIGIOT, SigIotHandler) == SIG_ERR) Error("TrapSigIot: error from signal setting SIGIOT", 0); } #endif /*********************** SIGCONT *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigContHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigContHandler(sig) #endif int sig; { /* Error("Trace Cont error, status=",(int) sig);*/ AR_caught_sig= sig; } void TrapSigCont() /* Trap SIGCONT */ { if ( signal(SIGCONT, SigContHandler) == SIG_ERR) Error("TrapSigCont: error from signal setting SIGCONT", 0); } /*********************** SIGXCPU *************************************/ #if defined(SUN) && !defined(SOLARIS) SigType SigXcpuHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigXcpuHandler(sig) #endif int sig; { AR_caught_sig= sig; Error("Terminate signal was sent, status=",(int) sig); } void TrapSigXcpu() /* Trap SIGXCPU */ { if ( signal(SIGXCPU, SigXcpuHandler) == SIG_ERR) Error("TrapSigXcpu: error from signal setting SIGXCPU", 0); } /******************* external API *********************************/ void ARMCI_ChildrenTrapSignals() { #ifndef LAPI TrapSigBus(); #endif TrapSigFpe(); TrapSigIll(); #ifdef ENABLE_CHECKPOINT TrapSigSegvSigaction(); #else TrapSigSegv(); #endif TrapSigSys(); TrapSigTrap(); TrapSigAbort(); TrapSigTerm(); TrapSigInt(); #if defined(LAPI) || defined(SGI) TrapSigIot(); #endif #ifdef SGI TrapSigXcpu(); #endif } void ARMCI_ParentTrapSignals() { #ifndef LAPI TrapSigChld(); #endif TrapSigHup(); } void ARMCI_RestoreSignals() { RestoreSigTerm(); RestoreSigInt(); RestoreSigSegv(); } void ARMCI_ParentRestoreSignals() { #ifndef LAPI RestoreSigChld(); #endif ARMCI_RestoreSignals(); RestoreSigHup(); } #ifdef ENABLE_CHECKPOINT /*user can register a function with 3 parameters, 1st offending address * 2nd err number and third file descriptor*/ void ARMCI_Register_Signal_Handler(int sig, void (*func)()) { signal_arr[sig]=func; } #endif ga-5-3/armci/src/common/request.c0000640005473000001440000015611411633511017015610 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: request.c,v 1.74.2.11 2007-10-18 06:09:37 d3h325 Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_SIGNAL_H # include #endif #include "armcip.h" #include "request.h" #include "memlock.h" #include "shmem.h" #include "copy.h" #include "gpc.h" #ifdef SOCKETS extern void armci_sock_send(int to, void *data, int len); #endif #define DEBUG_ 0 #if 0 # define MARK_ENTER(func_) { fprintf(stdout, "ENTERING %s\n", func_); fflush(stdout); } # define MARK_EXIT(func_) { fprintf(stdout, "EXITING %s\n", func_); fflush(stdout); } #else # define MARK_ENTER(func_) # define MARK_EXIT(func_) #endif #if 0 # define PRNDBG3(m,a1,a2,a3) \ fprintf(stderr,"DBG %d: " m,armci_me,a1,a2,a3);fflush(stderr) # define PRNDBG(m) PRNDBG3(m,0,0,0) # define PRNDBG1(m,a1) PRNDBG3(m,a1,0,0) # define PRNDBG2(m,a1,a2) PRNDBG3(m,a1,a2,0) #else # define PRNDBG(m) # define PRNDBG1(m,a1) # define PRNDBG2(m,a1,a2) # define PRNDBG3(m,a1,a2,a3) #endif #if !defined(GM) && !defined(VIA) && !defined(LAPI) &&!defined(VAPI) double _armci_rcv_buf[MSG_BUFLEN_DBL]; double _armci_snd_buf[MSG_BUFLEN_DBL]; char* MessageSndBuffer = (char*)_armci_snd_buf; char* MessageRcvBuffer = (char*)_armci_rcv_buf; #endif #define MAX_EHLEN 248 #define ADDBUF(buf,type,val) *(type*)(buf) = (val); (buf) += sizeof(type) #define GETBUF(buf,type,var) (var) = *(type*)(buf); (buf) += sizeof(type) #define ALLIGN8(buf){size_t _adr=(size_t)(buf); \ _adr>>=3; _adr<<=3; _adr+=8; (buf) = (char*)_adr; } #ifndef CLN # define CLN 1 #endif #ifndef SERV # define SERV 2 #endif /*******************Routines to handle completion descriptor******************/ /*\ *Following the the routines to fill a completion descriptor, if necessary *copy the data to destination based on completion descriptor *NOTE, THE FOLLOWING ROUTINES ARE FOR CLIENTS ONLY \*/ /*\Routine to complete a vector request, data is in buf and descriptor in dscr \*/ extern int armci_direct_vector_get(request_header_t *msginfo , armci_giov_t darr[], int len, int proc); static void armci_complete_vector_get(armci_giov_t darr[],int len,void *buf) { int proc; request_header_t *msginfo = (request_header_t*) buf; proc = msginfo->to; #if defined(USE_SOCKET_VECTOR_API) armci_direct_vector_get(msginfo, darr, len, proc); #else armci_rcv_vector_data(proc, msginfo, darr, len); #endif FREE_SEND_BUFFER(buf); } /*\ Routine called from buffers.c to complete a request for which the buffer was * used for, so that the buffer can be reused. \*/ void armci_complete_req_buf(BUF_INFO_T *info, void *buffer) { request_header_t *msginfo = (request_header_t*) buffer; if(info->protocol==0)return; else if(info->protocol==SDSCR_IN_PLACE){ char *dscr = info->dscr; void *loc_ptr; int stride_levels; int *loc_stride_arr,*count; loc_ptr = *(void**)dscr; dscr += sizeof(void*); stride_levels = *(int*)dscr; dscr += sizeof(int); loc_stride_arr = (int*)dscr; dscr += stride_levels*sizeof(int); count = (int*)dscr; if(0 || DEBUG_){ if(armci_me==0){ printf("\n%d:extracted loc_ptr=%p, stridelevels=%d\n",armci_me, loc_ptr,stride_levels); fflush(stdout); } } #if defined(ALLOW_PIN) || defined(LAPI2) if(msginfo->pinned && msginfo->bypass){ armci_rcv_strided_data_bypass_both(msginfo->to,msginfo,loc_ptr,count, stride_levels); } else #endif armci_rcv_strided_data(msginfo->to, msginfo, msginfo->datalen, loc_ptr, stride_levels,loc_stride_arr,count); FREE_SEND_BUFFER(msginfo); } else if(info->protocol==VDSCR_IN_PLACE || info->protocol==VDSCR_IN_PTR){ char *dscr; int len,i; if(info->protocol==VDSCR_IN_PLACE)dscr = info->dscr; else dscr = info->ptr.dscrbuf; GETBUF(dscr, long ,len); { armci_giov_t *darr; darr = (armci_giov_t *)malloc(sizeof(armci_giov_t)*len); if(!darr)armci_die("malloc in complete_req_buf failed",len); for(i = 0; i< len; i++){ int parlen, bytes; GETBUF(dscr, int, parlen); GETBUF(dscr, int, bytes); darr[i].ptr_array_len = parlen; darr[i].bytes = bytes; if(msginfo->operation==GET)darr[i].dst_ptr_array=(void **)dscr; else darr[i].src_ptr_array=(void **)dscr; dscr+=sizeof(void *)*parlen; } if (msginfo->operation==GET) armci_complete_vector_get(darr,len,buffer); } } else armci_die("armci_complete_req_buf,protocol val invalid",info->protocol); } /*\ save a part of strided descriptor needed to complete request \*/ void armci_save_strided_dscr(char **bptr, void *rem_ptr,int rem_stride_arr[], int count[], int stride_levels,int is_nb) { int i; char *bufptr=*bptr; BUF_INFO_T *info=NULL; MARK_ENTER("armci_save_strided_dscr"); if(is_nb){ info=BUF_TO_BUFINFO(*bptr); bufptr = (info->dscr); } *(void**)bufptr = rem_ptr; bufptr += sizeof(void*); *(int*)bufptr = stride_levels; bufptr += sizeof(int); for(i=0;idscr); if(armci_me==0) printf("\n%d:rem_ptr %p=%p stride_levels %d=%d\n",armci_me, *(void**)bufptr,rem_ptr, *(int*)(bufptr + sizeof(void*)),stride_levels); } /*remote_strided expects the pointer to point to the end of descr hence..*/ if(is_nb) info->protocol=SDSCR_IN_PLACE; else *bptr=bufptr; MARK_EXIT("armci_save_strided_dscr"); } /*\ save a part of vector descriptor needed to complete request \*/ void armci_save_vector_dscr(char **bptr,armci_giov_t darr[],int len, int op,int is_nb) { int i,size=sizeof(int); BUF_INFO_T *info; char *buf,*bufptr=*bptr; void *rem_ptr; if(is_nb){ for(i=0;idscr; info->protocol=VDSCR_IN_PLACE; } else { info->ptr.dscrbuf = (void *)malloc(size); buf = (char *)info->ptr.dscrbuf; info->protocol=VDSCR_IN_PTR; } } else buf=bufptr; ADDBUF(buf,long,len); /* number of sets */ for(i=0;ibufid to val, else set it to the id of the buf \*/ void armci_set_nbhandle_bufid(armci_ihdl_t nb_handle,char *buf,int val) { BUF_INFO_T *info; if(buf){ info = BUF_TO_BUFINFO(buf); val = info->bufid; } nb_handle->bufid = val; } /**************End--Routines to handle completion descriptor******************/ /*\ send request to server to LOCK MUTEX \*/ void armci_rem_lock(int mutex, int proc, int *ticket) { request_header_t *msginfo; int *ibuf; int bufsize = sizeof(request_header_t)+sizeof(int); msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,LOCK,proc); bzero(msginfo,sizeof(request_header_t)); msginfo->datalen = sizeof(int); msginfo->dscrlen = 0; msginfo->from = armci_me; msginfo->to = proc; msginfo->operation = LOCK; msginfo->format = mutex; msginfo->bytes = msginfo->datalen + msginfo->dscrlen; #ifdef SOCKETS msginfo->tag = BUF_TO_BUFINFO(msginfo)->bufid; #endif ibuf = (int*)(msginfo+1); *ibuf = mutex; armci_send_req(proc, msginfo, bufsize); /* receive ticket from server */ #ifdef SOCKETS armci_rcv_hdlr(msginfo); *ticket = *(int*)(msginfo + 1); #else *ticket = *(int*)armci_rcv_data(proc,msginfo); #endif FREE_SEND_BUFFER(msginfo); if(DEBUG_)fprintf(stderr,"%d receiving ticket %d\n",armci_me, *ticket); } void armci_server_lock(request_header_t *msginfo) { int *ibuf = (int*)(msginfo+1); int proc = msginfo->from; int mutex; int ticket; mutex = *(int*)ibuf; /* acquire lock on behalf of requesting process */ ticket = armci_server_lock_mutex(mutex, proc, msginfo->tag); if(ticket >-1){ /* got lock */ msginfo->datalen = sizeof(int); #ifdef SOCKETS armci_sock_send(msginfo->from, &(msginfo->tag), sizeof(msg_tag_t)); #endif armci_send_data(msginfo, &ticket); } } /*\ send request to server to UNLOCK MUTEX \*/ void armci_rem_unlock(int mutex, int proc, int ticket) { request_header_t *msginfo; int *ibuf; int bufsize = sizeof(request_header_t)+sizeof(ticket); msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,UNLOCK,proc); bzero(msginfo,sizeof(request_header_t)); msginfo->dscrlen = msginfo->bytes = sizeof(ticket); msginfo->datalen = 0; msginfo->from = armci_me; msginfo->to = proc; msginfo->operation = UNLOCK; msginfo->format = mutex; #ifdef SOCKETS msginfo->tag = BUF_TO_BUFINFO(msginfo)->bufid; #endif ibuf = (int*)(msginfo+1); *ibuf = ticket; if(DEBUG_)fprintf(stderr,"%d sending unlock\n",armci_me); armci_send_req(proc, msginfo, bufsize); } /*\ server unlocks mutex and passes lock to the next waiting process \*/ void armci_server_unlock(request_header_t *msginfo, char* dscr) { int ticket = *(int*)dscr; int mutex = msginfo->format; int proc = msginfo->to; int waiting; waiting = armci_server_unlock_mutex(mutex,proc,ticket,&msginfo->tag); if(waiting >-1){ /* -1 means that nobody is waiting */ ticket++; /* pass ticket to the waiting process */ msginfo->from = waiting; msginfo->datalen = sizeof(ticket); #ifdef SOCKETS armci_sock_send(msginfo->from, &(msginfo->tag), sizeof(msg_tag_t)); #endif armci_send_data(msginfo, &ticket); } } void armci_unlock_waiting_process(msg_tag_t tag, int proc, int ticket) { request_header_t header; request_header_t *msginfo = &header; msginfo->datalen = sizeof(int); msginfo->tag = tag; msginfo->from = proc; msginfo->to = armci_me; armci_send_data(msginfo, &ticket); } #ifdef REGIONS_REQUIRE_MEMHDL void armci_serv_register_req(void *ptr,long sz,ARMCI_MEMHDL_T *memhdl) { char *buf; int bufsize = sizeof(request_header_t)+sizeof(long)+sizeof(void *)+sizeof(ARMCI_MEMHDL_T); request_header_t *msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,REGISTER,armci_me); bzero(msginfo,sizeof(request_header_t)); msginfo->from = armci_me; msginfo->to = SERVER_NODE(armci_clus_me); msginfo->dscrlen = sizeof(long)+sizeof(void *); msginfo->datalen = sizeof(ARMCI_MEMHDL_T); msginfo->operation = REGISTER; msginfo->bytes = msginfo->dscrlen+ msginfo->datalen; #ifndef LAPI msginfo->tag.ack = 0; #endif buf = (char *)(msginfo+1); ADDBUF(buf,void*,ptr); ADDBUF(buf,long,sz); armci_send_req(armci_master, msginfo, bufsize); buf= armci_rcv_data(armci_master, msginfo); /* receive response */ armci_copy(buf,memhdl,sizeof(ARMCI_MEMHDL_T)); FREE_SEND_BUFFER(msginfo); if(DEBUG_){ printf("%d:client register req sent ptr=%p %d bytes\n",armci_me, buf,bufsize);fflush(stdout); } } #endif /*\ control message to the server, e.g.: ATTACH to shmem, return ptr etc. \*/ void armci_serv_attach_req(void *info, int ilen, long size, void* resp,int rlen) { char *buf; int bufsize = sizeof(request_header_t)+ilen + sizeof(long)+sizeof(rlen); request_header_t *msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,ATTACH,armci_me); bzero(msginfo,sizeof(request_header_t)); msginfo->from = armci_me; msginfo->to = SERVER_NODE(armci_clus_me); msginfo->dscrlen = ilen; msginfo->datalen = sizeof(long)+sizeof(rlen); msginfo->operation = ATTACH; msginfo->bytes = msginfo->dscrlen+ msginfo->datalen; armci_copy(info, msginfo +1, ilen); buf = ((char*)msginfo) + ilen + sizeof(request_header_t); *((long*)buf) =size; *(int*)(buf+ sizeof(long)) =rlen; armci_send_req(armci_master, msginfo, bufsize); if(rlen){ buf= armci_rcv_data(armci_master, msginfo); /* receive response */ armci_copy(buf, resp, rlen); FREE_SEND_BUFFER(msginfo); if(DEBUG_){printf("%d:client attaching got ptr=%p %d bytes\n",armci_me,buf,rlen); fflush(stdout); } } } /*\ server initializes its copy of the memory lock data structures \*/ static void server_alloc_memlock(void *ptr_myclus) { int i; /* for protection, set pointers for processes outside local node NULL */ memlock_table_array = calloc(armci_nproc,sizeof(void*)); if(!memlock_table_array) armci_die("malloc failed for ARMCI lock array",0); /* set pointers for processes on local cluster node * ptr_myclus - corresponds to the master process */ for(i=0; i< armci_clus_info[armci_clus_me].nslave; i++){ memlock_table_array[armci_master +i] = ((char*)ptr_myclus) + MAX_SLOTS*sizeof(memlock_t)*i; } /* set pointer to the use flag */ #ifdef MEMLOCK_SHMEM_FLAG armci_use_memlock_table = (int*) (MAX_SLOTS*sizeof(memlock_t) + (char*) memlock_table_array[armci_clus_last]); if(DEBUG_) fprintf(stderr,"server initialized memlock %p\n", (void*)armci_use_memlock_table); #endif } static int allocate_memlock=1; /*\ server actions triggered by client request to ATTACH \*/ void armci_server_ipc(request_header_t* msginfo, void* descr, void* buffer, int buflen) { double *ptr; long *idlist = (long*)descr; long size = *(long*)buffer; int rlen = *(int*)(sizeof(long)+(char*)buffer); if(size<0) armci_die("armci_server_ipc: size<0",(int)size); ptr=(double*)Attach_Shared_Region(idlist+1,size,idlist[0]); if(!ptr)armci_die("armci_server_ipc: failed to attach",0); /* provide data server with access to the memory lock data structures */ if(allocate_memlock){ allocate_memlock = 0; server_alloc_memlock(ptr); } if(size>0)armci_set_mem_offset(ptr); if(msginfo->datalen != sizeof(long)+sizeof(int)) armci_die("armci_server_ipc: bad msginfo->datalen ",msginfo->datalen); if(rlen==sizeof(ptr)){ #if defined(PEND_BUFS) memcpy(buffer, &ptr, sizeof(&ptr)); armci_send_data(msginfo, buffer); #else armci_send_data(msginfo, &ptr); #endif }else armci_die("armci_server_ipc: bad rlen",rlen); } /*\ send RMW request to server \*/ void armci_rem_rmw(int op, int *ploc, int *prem, int extra, int proc) { request_header_t *msginfo; char *buf; void *buffer; int bufsize = sizeof(request_header_t)+sizeof(long)+sizeof(void*); msginfo = (request_header_t*)GET_SEND_BUFFER(bufsize,op,proc); bzero(msginfo,sizeof(request_header_t)); msginfo->dscrlen = sizeof(void*); msginfo->from = armci_me; msginfo->to = proc; msginfo->operation = op; msginfo->datalen = sizeof(long); #ifdef SOCKETS msginfo->tag = BUF_TO_BUFINFO(msginfo)->bufid; #endif buf = (char*)(msginfo+1); ADDBUF(buf, void*, prem); /* pointer is shipped as descriptor */ /* data field: extra argument in fetch&add and local value in swap */ if(op==ARMCI_SWAP){ ADDBUF(buf, int, *ploc); }else if(op==ARMCI_SWAP_LONG) { ADDBUF(buf, long, *((long*)ploc) ); msginfo->datalen = sizeof(long); }else { ADDBUF(buf, int, extra); } msginfo->bytes = msginfo->datalen+msginfo->dscrlen ; if(DEBUG_){ printf("%d sending RMW request %d to %d\n",armci_me,op,proc); fflush(stdout); } armci_send_req(proc, msginfo, bufsize); #ifdef SOCKETS armci_rcv_hdlr(msginfo); buffer = msginfo + 1; #else buffer = armci_rcv_data(proc,msginfo); /* receive response */ #endif if(op==ARMCI_FETCH_AND_ADD || op== ARMCI_SWAP) *ploc = *(int*)buffer; else *(long*)ploc = *(long*)buffer; FREE_SEND_BUFFER(msginfo); } /*\ server response to RMW \*/ void armci_server_rmw(request_header_t* msginfo,void* ptr, void* pextra) { long lold; int iold; void *pold=0; int op = msginfo->operation; if(DEBUG_){ printf("%d server: executing RMW from %d. op=%d pextra=%p\n",armci_me,msginfo->from, op, pextra); fflush(stdout); } if(msginfo->datalen != sizeof(long)) armci_die2("armci_server_rmw: bad datalen=",msginfo->datalen,op); /* for swap operations *pextra has the value to swap * for fetc&add it carries the increment argument */ switch(op){ case ARMCI_SWAP: iold = *(int*) pextra; case ARMCI_FETCH_AND_ADD: pold = &iold; break; case ARMCI_SWAP_LONG: lold = *(long*) pextra; case ARMCI_FETCH_AND_ADD_LONG: pold = &lold; break; default: armci_die("armci_server_rmw: bad operation code=",op); } armci_generic_rmw(op, pold, *(int**)ptr, *(int*) pextra, msginfo->to); #ifdef SOCKETS armci_sock_send(msginfo->from, &(msginfo->tag), sizeof(msg_tag_t)); #endif #if defined(PEND_BUFS) memcpy(pextra,pold,msginfo->datalen); armci_send_data(msginfo, pextra); /*Send from server-anointed buffers*/ #else armci_send_data(msginfo, pold); #endif } extern int armci_direct_vector_snd(request_header_t *msginfo , armci_giov_t darr[], int len, int proc); extern int armci_direct_vector(request_header_t *msginfo , armci_giov_t darr[], int len, int proc); int armci_rem_vector(int op, void *scale, armci_giov_t darr[],int len,int proc,int flag, armci_ihdl_t nb_handle) { char *buf,*buf0; request_header_t *msginfo; int bytes =0, s, slen=0; size_t adr; int bufsize = sizeof(request_header_t),isnonblocking=0; if(nb_handle)isnonblocking=1; /* compute size of the buffer needed */ for(s=0; stag = BUF_TO_BUFINFO(buf)->bufid; #endif /* printf("%d:: rem_vector. len=%d. ptr_len[len-1]=%d bytes[len-1]=%d bufsize=%d\n", */ /* armci_me, len, darr[len-1].ptr_array_len, darr[len-1].bytes,bufsize); */ /* fflush(stdout); */ if(nb_handle){ INIT_SENDBUF_INFO(nb_handle,buf,op,proc); _armci_buf_set_tag(buf,nb_handle->tag,0); if(nb_handle->bufid == NB_NONE) armci_set_nbhandle_bufid(nb_handle,buf,0); } buf += sizeof(request_header_t); /* fill vector descriptor */ armci_save_vector_dscr(&buf,darr,len,op,0); /* align buf for doubles (8-bytes) before copying data */ adr = (size_t)buf; adr >>=3; adr <<=3; adr +=8; buf = (char*)adr; msginfo->ehlen = 0; /* fill message header */ msginfo->dscrlen = buf - buf0 - sizeof(request_header_t); msginfo->from = armci_me; msginfo->to = proc; msginfo->operation = op; msginfo->format = VECTOR; msginfo->datalen = bytes; /* put scale for accumulate */ switch(op){ case ARMCI_ACC_INT: *(int*)buf = *(int*)scale; slen= sizeof(int); break; case ARMCI_ACC_DCP: ((double*)buf)[0] = ((double*)scale)[0]; ((double*)buf)[1] = ((double*)scale)[1]; slen=2*sizeof(double);break; case ARMCI_ACC_DBL: *(double*)buf = *(double*)scale; slen = sizeof(double); break; case ARMCI_ACC_CPL: ((float*)buf)[0] = ((float*)scale)[0]; ((float*)buf)[1] = ((float*)scale)[1]; slen=2*sizeof(float);break; case ARMCI_ACC_FLT: *(float*)buf = *(float*)scale; slen = sizeof(float); break; default: slen=0; } buf += slen; msginfo->datalen += slen; msginfo->bytes = msginfo->datalen+msginfo->dscrlen; #ifdef USE_SOCKET_VECTOR_API if (flag && (op == GET || op == PUT)) { /*armci_direct_vector(msginfo,darr,len,proc);*/ armci_direct_vector_snd(msginfo,darr,len,proc); if (op == GET) { armci_save_vector_dscr(&buf0,darr,len,op,1); /*armci_complete_vector_get(darr,len,msginfo);*/ armci_rcv_hdlr(msginfo); } _armci_buf_set_cmpld(msginfo, 1); /* this may not be the best place */ return 0; } #endif /* for put and accumulate copy data into buffer */ if(op != GET){ /* fprintf(stderr,"sending %f\n",*(double*)darr[0].src_ptr_array[0]);*/ armci_vector_to_buf(darr, len, buf); } /* #ifdef VAPI */ /* else{ */ /* if(msginfo->dscrlen < (bytes - sizeof(int))) */ /* *(int*)(((char*)(msginfo+1))+(bytes-sizeof(int))) = ARMCI_STAMP; */ /* else */ /* *(int*)(((char*)(msginfo+1))+(msginfo->dscrlen+bytes-sizeof(int))) = ARMCI_STAMP; */ /* } */ /* #endif */ armci_send_req(proc, msginfo, bufsize); #ifdef KOT if (op == GET #ifndef SOCKETS && nb_handle #endif ) { armci_save_vector_dscr(&buf0,darr,len,op,1); #ifdef SOCKETS armci_rcv_hdlr(msginfo); #else armci_complete_vector_get(darr,len,msginfo); #endif } #ifdef SOCKETS _armci_buf_set_cmpld(msginfo, 1); /* this may not be the best place */ #endif #else if(nb_handle && op==GET)armci_save_vector_dscr(&buf0,darr,len,op,1); if(op == GET # if !defined(SOCKETS) && !defined(MPI_SPAWN) && !defined(MPI_MT) && !nb_handle # endif ){ #ifdef SOCKETS armci_rcv_hdlr(msginfo); #else armci_complete_vector_get(darr,len,msginfo); #endif } #if defined(SOCKETS) && !defined(NB_SOCKETS) _armci_buf_set_cmpld(msginfo, 1); /* this may not be the best place */ #endif #endif return 0; } #define CHUN_ (8*8096) #define CHUN 200000 /*\ client version of remote strided operation \*/ int armci_rem_strided(int op, void* scale, int proc, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, ext_header_t *h, int flag,armci_ihdl_t nb_handle) { char *buf, *buf0; request_header_t *msginfo; int i, slen=0, bytes; void *rem_ptr; int *rem_stride_arr; int bufsize = sizeof(request_header_t); int ehlen =0; /* we send ext header only for last chunk */ #if 0 if(h) ehlen = h->len; #else if(h) if(h->last) ehlen = h->len; #endif if(ehlen>MAX_EHLEN || ehlen <0) armci_die2("armci_rem_strided ehlen out of range",MAX_EHLEN,ehlen); /* calculate size of the buffer needed */ for(i=0, bytes=1;i<=stride_levels;i++)bytes*=count[i]; bufsize += bytes+sizeof(void*)+2*sizeof(int)*(stride_levels+1) +ehlen +2*sizeof(double) + 16; /* +scale+alignment */ if (flag){ # ifdef CLIENT_BUF_BYPASS if(_armci_bypass) bufsize -=bytes; /* we are not sending data*/ # elif defined(USE_SOCKET_VECTOR_API) bufsize -=bytes; /* we are not sending data*/ bufsize += sizeof(struct iovec)*MAX_IOVEC; # else if(op==GET)bufsize -=bytes; # endif } buf = buf0= GET_SEND_BUFFER((bufsize),op,proc); msginfo = (request_header_t*)buf; bzero(msginfo,sizeof(request_header_t)); #ifdef SOCKETS #if 0 || defined(DTAG) msginfo->tag = nb_handle ? nb_handle->tag : GET_NEXT_NBTAG(); _armci_buf_set_tag(buf,msginfo->tag,0); printf("DTAG: tag=%ld,DTAG=%d,",msginfo->tag,DTAG); msginfo->tag &= DTAG; msginfo->tag <<= sizeof(msg_id_t) * 8; msginfo->tag |= BUF_TO_BUFINFO(buf)->bufid; printf("bufid=%hd,dtag=%ld\n",BUF_TO_BUFINFO(buf)->bufid,msginfo->tag); fflush(stdout); #else msginfo->tag = BUF_TO_BUFINFO(buf)->bufid; #endif #endif if(nb_handle) #ifdef ACC_SMP if(!ARMCI_ACC(op)) #endif { /* INIT_SENDBUF_INFO(nb_handle,buf,op,proc); same as _armci_buf_set_tag, why here? */ _armci_buf_set_tag(buf,nb_handle->tag,0); if(nb_handle->bufid == NB_NONE) armci_set_nbhandle_bufid(nb_handle,buf,0); } if(op == GET){ rem_ptr = src_ptr; rem_stride_arr = src_stride_arr; }else{ rem_ptr = dst_ptr; rem_stride_arr = dst_stride_arr; } msginfo->datalen=bytes; #if defined(USE_SOCKET_VECTOR_API) || defined(MPI_SPAWN_ZEROCOPY) /*****for making put use readv/writev on sockets*****/ if(op==PUT && flag) msginfo->datalen=0; #endif /* fill strided descriptor */ buf += sizeof(request_header_t); /*this function fills the dscr into buf and also moves the buf ptr to the end of the dscr*/ armci_save_strided_dscr(&buf,rem_ptr,rem_stride_arr,count,stride_levels,0); # ifdef CLIENT_BUF_BYPASS if(flag && _armci_bypass){ /* to bypass the client MessageSnd buffer in get we need to add source pointer and stride info - server will put data directly there */ ADDBUF(buf,void*,dst_ptr); for(i=0;ibypass=1; msginfo->pinned=0; /* if set then pin is done before sending req*/ }else{ msginfo->bypass=0; msginfo->pinned=0; } # endif #ifdef LAPI2 msginfo->bypass=0; msginfo->pinned=0; #endif /* align buf for doubles (8-bytes) before copying data */ ALLIGN8(buf); /* fill message header */ msginfo->from = armci_me; msginfo->to = proc; msginfo->format = STRIDED; msginfo->operation = op; /* put scale for accumulate */ switch(op){ case ARMCI_ACC_INT: *(int*)buf = *(int*)scale; slen= sizeof(int); break; case ARMCI_ACC_DCP: ((double*)buf)[0] = ((double*)scale)[0]; ((double*)buf)[1] = ((double*)scale)[1]; slen=2*sizeof(double);break; case ARMCI_ACC_DBL: *(double*)buf = *(double*)scale; slen = sizeof(double); break; case ARMCI_ACC_CPL: ((float*)buf)[0] = ((float*)scale)[0]; ((float*)buf)[1] = ((float*)scale)[1]; slen=2*sizeof(float);break; case ARMCI_ACC_FLT: *(float*)buf = *(float*)scale; slen = sizeof(float); break; case ARMCI_ACC_LNG: *(long*)buf = *(long*)scale; slen = sizeof(long); break; default: slen=0; } /* if(ARMCI_ACC(op))printf("%d client len=%d alpha=%f data=%f,%f\n", armci_me, buf-(char*)msginfo,((double*)buf)[0],*((double*)src_ptr), ((double*)buf)[1]); */ buf += slen; /**** add extended header *******/ if(ehlen){ bcopy(h->exthdr,buf,ehlen); i = ehlen%8; ehlen += (8-i); /* make sure buffer is still alligned */ buf += ehlen; } msginfo->ehlen = ehlen; msginfo->dscrlen = buf - buf0 - sizeof(request_header_t); msginfo->bytes = msginfo->datalen+msginfo->dscrlen; if(op == GET){ /* #ifdef VAPI */ /* if(msginfo->dscrlen < (bytes - sizeof(int))) */ /* *(int*)(((char*)(msginfo+1))+(bytes-sizeof(int)))=ARMCI_STAMP; */ /* else */ /* *(int*)(((char*)(msginfo+1))+(msginfo->dscrlen+bytes-sizeof(int))) = */ /* ARMCI_STAMP; */ /* #endif */ # if defined(CLIENT_BUF_BYPASS) if(msginfo->bypass){ #ifdef MULTISTEP_PIN if(stride_levels==0 && !msginfo->pinned && count[0]>=400000){ int seq=1; armci_send_req(proc,msginfo,bufsize); for(i=0; i< bytes; i+=CHUN){ int len= ARMCI_MIN(CHUN,(bytes-i)); char *p = i +(char*)dst_ptr; armci_pin_contig(p, len); armci_client_send_ack(proc, seq); seq++; } }else #endif { int armci_pin_memory(void *,int *,int *,int); void armci_client_send_ack(int, int); if(!msginfo->pinned) armci_send_req(proc,msginfo,bufsize); if(!armci_pin_memory(dst_ptr,dst_stride_arr,count, stride_levels)){ armci_client_send_ack(proc, -1); armci_rcv_strided_data_bypass(proc,msginfo,dst_ptr,stride_levels); FREE_SEND_BUFFER(msginfo); return 1; /* failed:cannot do bypass */ } if(msginfo->pinned) armci_send_req(proc,msginfo,bufsize); else armci_client_send_ack(proc, 1); /*if(nb_handle) armci_save_strided_dscr(&buf,dst_ptr,dst_stride_arr,count, stride_levels,1);*/ } }else # endif { armci_send_req(proc, msginfo, bufsize); } #if !defined(MPI_SPAWN) && !defined(MPI_MT) #ifdef ACC_SMP if(!ARMCI_ACC(op)) #endif armci_save_strided_dscr(&buf0,dst_ptr,dst_stride_arr,count, stride_levels,1); #endif #if defined(SOCKETS) # ifdef NB_SOCKETS if(!nb_handle) # endif { armci_rcv_hdlr(msginfo); FREE_SEND_BUFFER(msginfo); } #else # if !defined(MPI_SPAWN) && !defined(MPI_MT) if(!nb_handle) # endif { armci_rcv_strided_data(proc, msginfo, msginfo->datalen, dst_ptr, stride_levels, dst_stride_arr,count); FREE_SEND_BUFFER(msginfo); } #endif } else { /* for put and accumulate send data */ armci_send_strided(proc,msginfo, buf, src_ptr, stride_levels, src_stride_arr, count); #ifdef SOCKETS _armci_buf_set_cmpld(msginfo, 1); /* this may not be the best place */ #endif } return 0; } #if defined(ALLOW_PIN) && defined(VAPI) /*\ * two phase send \*/ int armci_two_phase_send(int proc,void *src_ptr,int src_stride_arr[], void *dst_ptr,int dst_stride_arr[],int count[], int stride_levels,void ** context_ptr,armci_ihdl_t nbhandle, ARMCI_MEMHDL_T *mhloc) { char *buf, *buf0; request_header_t *msginfo; int bytes, i; int ehlen = 0,nbtag=0; int *rem_ptr; int * rem_stride_arr; int bufsize = sizeof(request_header_t); void armci_post_gather(void *, int *, int *,int, armci_vapi_memhndl_t *,int,int,int,NB_CMPL_T *); bytes = 0; if(nbhandle)nbtag = nbhandle->tag; /*calculate the size of buffer needed */ bufsize += bytes+sizeof(void *) + 2*sizeof(int)*(stride_levels+1) + ehlen +2*sizeof(double) + 16; buf = buf0 = GET_SEND_BUFFER(bufsize,PUT,proc); msginfo = (request_header_t*)buf; buf += sizeof(request_header_t); bzero(msginfo, sizeof(request_header_t)); rem_ptr = dst_ptr; rem_stride_arr = dst_stride_arr; armci_save_strided_dscr(&buf,rem_ptr,rem_stride_arr,count,stride_levels,0); if(DEBUG_) { printf(" CLIENT :the dest_ptr is %p src is %p\n", rem_ptr,src_ptr); for(i =0; idatalen = 0; msginfo->bypass = 1; msginfo->pinned = 1; msginfo->from = armci_me; msginfo->to = proc; msginfo->format = STRIDED; msginfo->operation = PUT; msginfo->ehlen = 0; msginfo->dscrlen = buf - buf0 - sizeof(request_header_t); msginfo->bytes = msginfo->datalen + msginfo->dscrlen; /* I have not set msginfo->tag */ /* send the first phase request */ armci_send_req(proc, msginfo, bufsize); if(DEBUG_) { printf("%d:CLIENT : finished sending first put request \n",armci_me); fflush(stdout); } armci_wait_ack(buf0); if(DEBUG_) { printf("\n%d: client got ack about to post gather\n",armci_me); fflush(stdout); } /* the client is now in the second phase, in a loop creates the gather descr one at a time and posts them */ armci_post_gather(src_ptr,src_stride_arr,count,stride_levels, mhloc,proc,nbtag,CLN,&nbhandle->cmpl_info); if(DEBUG_) { printf("%d(c) : returned from armci_post_gather\n",armci_me); fflush(stdout); } if(nbhandle){ BUF_INFO_T *info=NULL; info=BUF_TO_BUFINFO(buf0); info->protocol=0; } FREE_SEND_BUFFER(msginfo); return 0; } int armci_two_phase_get(int proc, void*src_ptr, int src_stride_arr[], void*dst_ptr,int dst_stride_arr[], int count[], int stride_levels, void**context_ptr, armci_ihdl_t nb_handle, ARMCI_MEMHDL_T *mhloc) { char *buf, *buf0; request_header_t *msginfo; int bytes; int ehlen = 0,nbtag=0; int *rem_ptr; int num; int *rem_stride_arr; int bufsize = sizeof(request_header_t); extern void armci_post_scatter(void *,int *,int *,int, armci_vapi_memhndl_t *,int,int,int,NB_CMPL_T *); extern void armci_wait_for_blocking_scatter(); if(DEBUG_){ printf("%d(c):about to call armci_post_scatter, CLN value is %d\n", armci_me,CLN); fflush(stdout); } if(nb_handle)nbtag = nb_handle->tag; armci_post_scatter(dst_ptr, dst_stride_arr, count, stride_levels,mhloc, proc,nbtag,CLN,&nb_handle->cmpl_info); if(DEBUG_){ printf("\n%d: returned from armci_post_scatter %d\n",armci_me,num); fflush(stdout); } bytes = 0; bufsize += bytes+sizeof(void *) + 2*sizeof(int)*(stride_levels+1) + ehlen +2*sizeof(int) +2*sizeof(double) + 16; buf = buf0 = GET_SEND_BUFFER(bufsize,GET,proc); msginfo = (request_header_t *)buf; buf += sizeof(request_header_t); rem_ptr = src_ptr; rem_stride_arr = src_stride_arr; /*this call is to put the remote descriptor into the buffer to send*/ armci_save_strided_dscr(&buf,rem_ptr,rem_stride_arr,count,stride_levels,0); msginfo->datalen = 0; msginfo->bypass = 1; msginfo->pinned = 1; msginfo->from = armci_me; msginfo->to = proc; msginfo->format = STRIDED; msginfo->operation = GET; msginfo->ehlen = 0; msginfo->dscrlen = buf - buf0 - sizeof(request_header_t); msginfo->bytes = msginfo->datalen + msginfo->dscrlen; /* send the request asking the server to post gather */ armci_send_req(proc, msginfo, bufsize); if(DEBUG_){ printf("%d(c) : finished sending get request to server\n",armci_me); fflush(stdout); } if(nb_handle){ BUF_INFO_T *info=NULL; info=BUF_TO_BUFINFO(buf0); info->protocol=0; } else{ armci_wait_for_blocking_scatter(); FREE_SEND_BUFFER(msginfo); } if(DEBUG_){ printf("%d(c) : finished polling for scatter_recv\n",armci_me); fflush(stdout); } return 0; } #endif #if (defined(ALLOW_PIN) || defined(LAPI2)) && !defined(HAS_RDMA_GET) /*\ client version of remote strided get \*/ int armci_rem_get(int proc, void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, armci_ihdl_t nb_handle,void *mhloc,void *mhrem) { char *buf, *buf0; request_header_t *msginfo; int i, bytes; void *rem_ptr; int *rem_stride_arr; int bufsize = sizeof(request_header_t); /* calculate size of the buffer needed */ for(i=0, bytes=1;i<=stride_levels;i++)bytes*=count[i]; bufsize += sizeof(void*)+2*sizeof(int)*(stride_levels+1) +2*sizeof(double) + 16; /* +scale+alignment */ #ifdef VAPI /*need to send the rkey and lkey*/ /* lkey and rkey are unsigned its, but we cant trust it to stay like that*/ # ifdef OPENIB bufsize +=(sizeof(uint32_t)+sizeof(uint32_t)); # else bufsize +=(sizeof(VAPI_lkey_t)+sizeof(VAPI_rkey_t)); # endif #endif buf = buf0= GET_SEND_BUFFER(bufsize,GET,proc); if(nb_handle){ INIT_SENDBUF_INFO(nb_handle,buf,op,proc); _armci_buf_set_tag(buf,nb_handle->tag,0); if(nb_handle->bufid == NB_NONE) armci_set_nbhandle_bufid(nb_handle,buf,0); } msginfo = (request_header_t*)buf; buf += sizeof(request_header_t); rem_ptr = src_ptr; rem_stride_arr = src_stride_arr; /*this function fills the dscr into buf and also moves the buf ptr to the end of the dscr*/ armci_save_strided_dscr(&buf,rem_ptr,rem_stride_arr,count,stride_levels,0); /* to bypass the client MessageSnd buffer in get we need to add source pointer and stride info - server will put data directly there */ ADDBUF(buf,void*,dst_ptr); #ifdef VAPI #ifdef OPENIB ADDBUF(buf,uint32_t,((ARMCI_MEMHDL_T *)mhloc)->rkey); ADDBUF(buf,uint32_t,((ARMCI_MEMHDL_T *)mhrem)->lkey); #else ADDBUF(buf,VAPI_rkey_t,((ARMCI_MEMHDL_T *)mhloc)->rkey); ADDBUF(buf,VAPI_lkey_t,((ARMCI_MEMHDL_T *)mhrem)->lkey); #endif #endif for(i=0;ibypass=1; msginfo->pinned=1; msginfo->from = armci_me; msginfo->to = proc; msginfo->format = STRIDED; msginfo->operation = GET; msginfo->ehlen = 0; msginfo->datalen=0; msginfo->dscrlen = buf - buf0 - sizeof(request_header_t); msginfo->bytes = msginfo->dscrlen; #if defined(GM) || defined(VAPI) || defined(QUADRICS) /* prepare for set the stamp at the end of the user buffer */ if(count[0]dscrlen - msginfo->ehlen); #if 0 if(msginfo->ehlen)printf("%d:server from=%d len=%d: ptr=%p val=%d\n",armci_me,msginfo->from, msginfo->ehlen,h->ptr,h->val); fflush(stdout); #endif flag = (int*)(h->ptr); *flag = h->val; } void armci_server(request_header_t *msginfo, char *dscr, char* buf, int buflen) { int buf_stride_arr[MAX_STRIDE_LEVEL+1]; int *loc_stride_arr,slen; int *count, stride_levels; void *buf_ptr, *loc_ptr; void *scale; char *dscr_save = dscr; int rc, i,proc; # if defined(CLIENT_BUF_BYPASS) || defined(LAPI2) int *client_stride_arr=0; void *client_ptr=0; # endif /*return if using readv/socket for put*/ if(msginfo->operation==PUT && msginfo->datalen==0){ if(msginfo->ehlen) /* process extra header if available */ armci_process_extheader(msginfo, dscr, buf, buflen); return; } /* unpack descriptor record */ loc_ptr = *(void**)dscr; dscr += sizeof(void*); stride_levels = *(int*)dscr; dscr += sizeof(int); loc_stride_arr = (int*)dscr; dscr += stride_levels*sizeof(int); count = (int*)dscr; /* compute stride array for buffer */ buf_stride_arr[0]=count[0]; for(i=0; i< stride_levels; i++) buf_stride_arr[i+1]= buf_stride_arr[i]*count[i+1]; # if defined(CLIENT_BUF_BYPASS) || defined(LAPI2) if(msginfo->bypass){ dscr += (1+stride_levels)*sizeof(int); /* move past count */ GETBUF(dscr,void*,client_ptr); client_stride_arr = (int*)dscr; dscr += stride_levels*sizeof(int); } # endif /* get scale for accumulate, adjust buf to point to data */ switch(msginfo->operation){ case ARMCI_ACC_INT: slen = sizeof(int); break; case ARMCI_ACC_DCP: slen = 2*sizeof(double); break; case ARMCI_ACC_DBL: slen = sizeof(double); break; case ARMCI_ACC_CPL: slen = 2*sizeof(float); break; case ARMCI_ACC_FLT: slen = sizeof(float); break; case ARMCI_ACC_LNG: slen = sizeof(long); break; default: slen=0; } scale = dscr_save+ (msginfo->dscrlen - slen -msginfo->ehlen); /* if(ARMCI_ACC(msginfo->operation)) fprintf(stderr,"%d in server len=%d slen=%d alpha=%f data=%f\n", armci_me, msginfo->dscrlen, slen, *(double*)scale,*(double*)buf); */ buf_ptr = buf; /* data in buffer */ proc = msginfo->to; if(msginfo->operation == GET){ # if defined(CLIENT_BUF_BYPASS) || defined(LAPI2) || defined(VAPI) /* This path was not updated */ if(msginfo->bypass){ armci_send_strided_data_bypass(proc, msginfo, buf, buflen, loc_ptr, loc_stride_arr, client_ptr, client_stride_arr, count, stride_levels); }else # endif /* send tag followed by the actual message */ #ifdef SOCKETS armci_sock_send(msginfo->from, &(msginfo->tag), sizeof(msg_tag_t)); #endif armci_send_strided_data(proc, msginfo, buf, loc_ptr, stride_levels, loc_stride_arr, count); /* fprintf(stderr, "GET response sent with tag: %d\n, msginfo->tag", msginfo->tag); */ /* TBD:alternatively could include tag into strided message or pack */ } else{ #ifdef PIPE_BUFSIZE if((msginfo->bytes==0) && (msginfo->operation==PUT)){ armci_pipe_prep_receive_strided(msginfo,buf_ptr,stride_levels, loc_stride_arr, count, buflen); armci_pipe_receive_strided(msginfo,loc_ptr,loc_stride_arr, count, stride_levels); } else #endif { #if defined(PUT_NO_SRV_COPY) ARMCI_MEMHDL_T *mhloc; int nsegs; nsegs = 1; for(i=0; ioperation==PUT && msginfo->format==STRIDED && !msginfo->pinned && get_armci_region_local_hndl(loc_ptr,armci_clus_id(armci_me),&mhloc) && !msginfo->tag.imm_msg) { /*do nothing; data movement done done in pbuf_start_get().*/ } else #endif if((rc = armci_op_strided(msginfo->operation, scale, proc, buf_ptr, buf_stride_arr, loc_ptr, loc_stride_arr, count, stride_levels, 1,NULL))) armci_die("server_strided: op from buf failed",rc); } } if(msginfo->ehlen) /* process extra header if available */ armci_process_extheader(msginfo, dscr_save, buf, buflen); } #if ARMCI_ENABLE_GPC_CALLS && (defined(LAPI) || defined(GM) || defined(VAPI) || defined(DOELAN4) || defined(SOCKETS)) static int gpc_call_process( request_header_t *msginfo, int len, char *dscr, char* buf, int buflen, char *sbuf); #endif void armci_server_vector( request_header_t *msginfo, char *dscr, char* buf, int buflen) { int proc; long len; void *scale; int i,s; char *sbuf = buf; if(msginfo->operation==PUT && msginfo->datalen==0)return;/*return if using readv/socket for put*/ /* unpack descriptor record */ GETBUF(dscr, long ,len); /* get scale for accumulate, adjust buf to point to data */ scale = buf; switch(msginfo->operation){ case ARMCI_ACC_INT: buf += sizeof(int); break; case ARMCI_ACC_DCP: buf += 2*sizeof(double); break; case ARMCI_ACC_DBL: buf += sizeof(double); break; case ARMCI_ACC_CPL: buf += 2*sizeof(float); break; case ARMCI_ACC_FLT: buf += sizeof(float); break; } proc = msginfo->to; /*fprintf(stderr,"scale=%f\n",*(double*)scale);*/ /* execute the operation */ switch(msginfo->operation) { case GET: /* fprintf(stderr, "%d:: Got a vector message!!\n", armci_me); */ if(msginfo->ehlen) { #if ARMCI_ENABLE_GPC_CALLS && (defined(LAPI) || defined(GM) || defined(VAPI) || defined(DOELAN4)) gpc_call_process(msginfo, len, dscr, buf, buflen, sbuf); #else armci_die("Unexpected vector message with non-zero ehlen. GPC call?", msginfo->ehlen); #endif } else { for(i = 0; i< len; i++){ int parlen, bytes; void **ptr; GETBUF(dscr, int, parlen); GETBUF(dscr, int, bytes); /* fprintf(stderr,"len=%d bytes=%d parlen=%d\n",len,bytes,parlen);*/ ptr = (void**)dscr; dscr += parlen*sizeof(char*); for(s=0; s< parlen; s++){ armci_copy(ptr[s], buf, bytes); buf += bytes; } } /* send tag followed by the actual message */ #ifdef SOCKETS armci_sock_send(msginfo->from, &(msginfo->tag), sizeof(msg_tag_t)); #endif /* fprintf(stderr,"%d:: VECTOR GET. server sending buffer %p datalen=%d\n",armci_me, sbuf, msginfo->datalen); */ armci_send_data(msginfo, sbuf); } break; case PUT: /* fprintf(stderr,"received in buffer %f\n",*(double*)buf);*/ for(i = 0; i< len; i++){ int parlen, bytes; void **ptr; GETBUF(dscr, int, parlen); GETBUF(dscr, int, bytes); ptr = (void**)dscr; dscr += parlen*sizeof(char*); for(s=0; s< parlen; s++){ /* armci_copy(buf, ptr[s], bytes); */ bcopy(buf, ptr[s], (size_t)bytes); buf += bytes; } } break; default: /* this should be accumulate */ if(!ARMCI_ACC(msginfo->operation)) armci_die("v server: wrong op code",msginfo->operation); /* fprintf(stderr,"received first=%f last =%f in buffer\n",*/ /* *((double*)buf),((double*)buf)[99]);*/ for(i = 0; i< len; i++){ int parlen, bytes; void **ptr; GETBUF(dscr, int, parlen); GETBUF(dscr, int, bytes); ptr = (void**)dscr; dscr += parlen*sizeof(char*); armci_lockmem_scatter(ptr, parlen, bytes, proc); for(s=0; s< parlen; s++){ armci_acc_2D(msginfo->operation, scale, proc, buf, ptr[s], bytes, 1, bytes, bytes, 0); buf += bytes; } ARMCI_UNLOCKMEM(proc); } } } /**Routines for GPC calls**/ /**Server side routine to handle a GPC call request**/ /*===============Register this memory=====================*/ #if ARMCI_ENABLE_GPC_CALLS #if defined(LAPI) || defined(GM) || defined(VAPI) || defined(QUADRICS) gpc_buf_t *gpc_req; /*VT: I made the change below because DATA_SERVER is not defined for elan4 *VT: This will only be invoked in case of GPC call and should not intefere *VT: with any other call */ #if (defined(DOELAN4) || defined(DATA_SERVER)) && defined(SERVER_THREAD) # ifdef PTHREADS pthread_t data_server; # else # error Threading other than pthreads not yet implemented # endif #endif #if defined(LAPI) pthread_t data_server; #endif void block_thread_signal(int signo) { sigset_t mask; sigemptyset(&mask); sigaddset(&mask, SIGUSR1); pthread_sigmask(SIG_BLOCK, &mask, NULL); } void unblock_thread_signal(int signo) { sigset_t mask; sigemptyset(&mask); sigaddset(&mask, SIGUSR1); pthread_sigmask(SIG_UNBLOCK, &mask, NULL); } void gpc_init() { int i; for(i=0; ihndl, gpc_req[i].msginfo.to, gpc_req[i].msginfo.from, gcall->hdr, gcall->hlen, gcall->data, gcall->dlen, gcall->rhdr, gcall->rhlen, gcall->rdata, gcall->rdlen, GPC_PROBE) == GPC_DONE) { armci_send_data(&gpc_req[i].msginfo, gpc_req[i].reply); gpc_free_buf_handle(i); } } } void gpc_completion_handler(int sig) { if(sig != SIGUSR1) armci_die("gpc_completion_handler. Invoked with unexpected signal", sig); if(!pthread_equal(pthread_self(), data_server)) armci_die("Signal in a thread other than the data server!!!", sig); /* fprintf(stderr, "%d::SIGNAL\n", armci_me); */ gpc_completion_scan(); } void gpc_init_signals() { struct sigaction action; /*register signal handler**/ action.sa_handler = gpc_completion_handler; sigemptyset(&action.sa_mask); action.sa_flags = SA_RESTART; sigaction(SIGUSR1, &action, NULL); /*Block the GPC completion signal. data server unblocks it later for itself*/ /* block_thread_signal(SIGUSR1); */ #if 0 /*Mask this signal on main thread. Should only execute in the context of the data server.*/ if(pthread_self() == armci_usr_tid) { sigset_t mask; sigemptyset(&mask); sigaddset(&mask, SIGUSR1); pthread_sigmask(SIG_BLOCK, &mask, NULL); } #endif } int gpc_get_buf_handle() { int i; gpc_call_t *gcall; for(i=0; ihndl, gpc_req[i].msginfo.to, gpc_req[i].msginfo.from, gcall->hdr, gcall->hlen, gcall->data, gcall->dlen, gcall->rhdr, gcall->rhlen, gcall->rdata, gcall->rdlen, GPC_WAIT) != GPC_DONE) armci_die("Wait on GPC call completion failed", 0); armci_send_data(&gpc_req[i].msginfo, gpc_req[i].reply); gpc_free_buf_handle(i); } gpc_req[i].active = 1; return i; } static int gpc_call_process( request_header_t *msginfo, int len, char *dscr, char* buf, int buflen, char *sbuf) { int h, hlen, dlen, rhlen, rdlen; int parlen; int rbuf; void *hdr, *data, *rhdr, *rdata; gpc_buf_t *gbuf; gpc_call_t *gcall; /*printf("%d:%s dscr=%p buf=%p \n",armci_me,FUNCTION_NAME,dscr,buf);fflush(stdout);*/ GETBUF(dscr, int, parlen); if(parlen != 1) armci_die("gpc_call_process: Invalid parlen in dscr", parlen); GETBUF(dscr, int, rhlen); dscr += parlen*sizeof(char*); GETBUF(dscr, int, parlen); if(parlen != 1) armci_die("gpc_call_process: Invalid parlen in dscr", parlen); GETBUF(dscr, int, rdlen); dscr += parlen*sizeof(char *); GETBUF(dscr, int, h); GETBUF(dscr, int, hlen); hdr = dscr; dscr += hlen; GETBUF(dscr, int, dlen); data = dscr; dscr += dlen; rhdr = buf; rdata = (char *)rhdr + rhlen; rbuf = gpc_get_buf_handle(); gbuf = &gpc_req[rbuf]; gbuf->msginfo = *msginfo; gbuf->call.hndl = h; gbuf->call.hlen = hlen; gbuf->call.dlen = dlen; gbuf->call.rhlen = rhlen; gbuf->call.rdlen = rdlen; gbuf->call.hdr = gbuf->send; gbuf->call.data = gbuf->send + hlen; bcopy(hdr, gbuf->call.hdr, gbuf->call.hlen); bcopy(data, gbuf->call.data, gbuf->call.dlen); gbuf->call.rhdr = gbuf->reply; gbuf->call.rdata = gbuf->reply + rhlen; gcall = &gbuf->call; if(armci_gpc_local_exec(gcall->hndl, gbuf->msginfo.to, gbuf->msginfo.from, gcall->hdr, gcall->hlen, gcall->data, gcall->dlen, gcall->rhdr, gcall->rhlen, gcall->rdata, gcall->rdlen, GPC_INIT) == GPC_DONE) { armci_send_data(msginfo, gbuf->reply); gpc_free_buf_handle(rbuf); } return 0; } /*Based on armci_rem_vector. On the server side, a vector GET request with a non-zero ehlen is a GPC call*/ int armci_rem_gpc(int op, armci_giov_t darr[],int len, gpc_send_t *send, int proc, int flag, armci_ihdl_t nb_handle) { char *buf, *buf0; request_header_t *msginfo; int bytes =0, s/*, slen=0*/; size_t adr; int bufsize = sizeof(request_header_t),isnonblocking=0; int send_len=0, i; void *ptr; if(nb_handle)isnonblocking=1; if(len != 2) armci_die("armci_rem_gpc: invalid len parameter", len); /* compute size of the buffer needed */ for(s=0; shlen + send->dlen; bufsize += bytes + sizeof(long) + send_len + 2*sizeof(double) + sizeof(double) + 8; /*+scale+allignment*/ #if defined(USE_SOCKET_VECTOR_API) if(flag){ int totaliovecs=MAX_IOVEC; /*if(op==PUT)*/bufsize-=bytes; buf = buf0= GET_SEND_BUFFER((bufsize+sizeof(struct iovec)*totaliovecs),op,proc); } else #endif { buf = buf0= GET_SEND_BUFFER(bufsize,op,proc); } msginfo = (request_header_t*)buf; bzero(msginfo,sizeof(request_header_t)); if(nb_handle){ INIT_SENDBUF_INFO(nb_handle,buf,op,proc); _armci_buf_set_tag(buf,nb_handle->tag,0); if(nb_handle->bufid == NB_NONE) armci_set_nbhandle_bufid(nb_handle,buf,0); } buf += sizeof(request_header_t); /* fill vector descriptor */ armci_save_vector_dscr(&buf,darr,len,op,0); /* add data to send*/ ptr = buf; ADDBUF(ptr, int, send->hndl); ADDBUF(ptr, int, send->hlen); bcopy(send->hdr, ptr, send->hlen); /* armci_copy? */ ptr += send->hlen; ADDBUF(ptr, int, send->dlen); bcopy(send->data, ptr, send->dlen); /* armci_copy? */ i = send_len%8; send_len += 8-i; buf += send_len; /*Dummy non-zero extended header to identify a GPC call*/ buf += sizeof(double); msginfo->ehlen = sizeof(double); /* fill message header */ msginfo->dscrlen = buf - buf0 - sizeof(request_header_t); msginfo->from = armci_me; msginfo->to = proc; msginfo->operation = op; msginfo->format = VECTOR; msginfo->datalen = bytes; msginfo->bytes = msginfo->datalen+msginfo->dscrlen; #if defined(USE_SOCKET_VECTOR_API) if(flag&&(op==GET||op==PUT)){ armci_direct_vector(msginfo,darr,len,proc); return 0; } #endif /* #ifdef VAPI */ /* if(op == GET) { */ /* if(msginfo->dscrlen < (bytes - sizeof(int))) */ /* *(int*)(((char*)(msginfo+1))+(bytes-sizeof(int))) = ARMCI_STAMP; */ /* else */ /* *(int*)(((char*)(msginfo+1))+(msginfo->dscrlen+bytes-sizeof(int))) = ARMCI_STAMP; */ /* } */ /* #endif */ armci_send_req(proc, msginfo, bufsize); if (nb_handle && op==GET) armci_save_vector_dscr(&buf0,darr,len,op,1); if (op == GET # if !defined(SOCKETS) && !nb_handle # endif ){ armci_complete_vector_get(darr,len,msginfo); } return 0; } #else /*Empty functions to let unsupported hardware smoothly pass through initialization*/ void gpc_init(void) {} void gpc_init_signals(void) {} #endif #endif ga-5-3/armci/src/common/armci.c0000640005473000001440000006332112123157524015214 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* DISCLAIMER * * This material was prepared as an account of work sponsored by an * agency of the United States Government. Neither the United States * Government nor the United States Department of Energy, nor Battelle, * nor any of their employees, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR * ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, * COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, * SOFTWARE, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT * INFRINGE PRIVATELY OWNED RIGHTS. * * * ACKNOWLEDGMENT * * This software and its documentation were produced with United States * Government support under Contract Number DE-AC06-76RLO-1830 awarded by * the United States Department of Energy. The United States Government * retains a paid-up non-exclusive, irrevocable worldwide license to * reproduce, prepare derivative works, perform publicly and display * publicly by or for the US Government, including the right to * distribute to other US Government contractors. */ #define EXTERN /*#define PRINT_BT*/ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STDARG_H # include #endif #if defined(CRAY) && !defined(__crayx1) # include # include # if HAVE_UNISTD_H # include # endif #endif #ifdef LAPI # include "lapidefs.h" #endif #if HAVE_ERRNO_H # include #endif #include "armcip.h" #include "copy.h" #include "memlock.h" #include "shmem.h" #include "signaltrap.h" #ifdef ARMCIX #include "armcix.h" #endif #ifdef BGML #include "bgml.h" #if HAVE_ASSERT_H # include #endif #include "bgmldefs.h" extern void armci_msg_barrier(void); #endif #ifdef CRAY_SHMEM # ifdef CRAY_XT # include # else # include # endif #endif /* global variables -- Initialized in PARMCI_Init() and never modified*/ int armci_me, armci_nproc; int armci_clus_me, armci_nclus, armci_master; int armci_clus_first, armci_clus_last; int _armci_initialized=0; int _armci_initialized_args=0; int _armci_terminating =0; int *_armci_argc=NULL; char ***_armci_argv=NULL; thread_id_t armci_usr_tid; #if !defined(HITACHI) && !defined(THREAD_SAFE) double armci_internal_buffer[BUFSIZE_DBL]; #endif #if defined(SYSV) || defined(WIN32) || defined(MMAP) || defined(HITACHI) || defined(CATAMOUNT) || defined(BGML) # include "locks.h" lockset_t lockid; #endif #ifdef ALLOW_PIN int* armci_prot_switch_fence=NULL; int armci_prot_switch_preproc = -1; int armci_prot_switch_preop = -1; #endif #ifdef BGML /* void armci_allocate_locks(); */ void armci_init_memlock(); #endif typedef struct{ int sent; int received; int waited; }armci_notify_t; armci_notify_t **_armci_notify_arr; #ifdef CRAY_XT int _armci_malloc_local_region; #endif void ARMCI_Cleanup() { #if (defined(SYSV) || defined(WIN32) || defined(MMAP))&& !defined(HITACHI) Delete_All_Regions(); if(armci_nproc>1) #if !defined(LAPI) DeleteLocks(lockid); #endif /* in case of an error notify server that it is time to quit */ #if defined(DATA_SERVER) if(armci_nclus >1){ /* send quit request to server unless it is already dead */ armci_wait_for_server(); armci_transport_cleanup(); } #endif armci_finalize_fence(); #ifndef WIN32 ARMCI_RestoreSignals(); #endif #endif } void armci_notify_init() { int rc, bytes= sizeof(armci_notify_t)*armci_nproc; _armci_notify_arr= (armci_notify_t**)malloc(armci_nproc*sizeof(armci_notify_t*)); if(!_armci_notify_arr)armci_die("armci_notify_ini:malloc failed",armci_nproc); if((rc=PARMCI_Malloc((void **)_armci_notify_arr, bytes))) armci_die(" armci_notify_init: armci_malloc failed",bytes); bzero(_armci_notify_arr[armci_me], bytes); } static void armci_perror_msg() { char perr_str[80]; if(!errno) return; sprintf(perr_str,"Last System Error Message from Task %d:",armci_me); perror(perr_str); } #if defined(IBM) || defined(IBM64) int AR_caught_sigint; int AR_caught_sigterm; #else extern int AR_caught_sigint; extern int AR_caught_sigterm; #endif void armci_abort(int code) { #if !defined(BGML) armci_perror_msg(); #endif ARMCI_Cleanup(); /* data server process cannot use message-passing library to abort * it simply exits, parent will get SIGCHLD and abort the program */ #if defined(IBM) || defined(IBM64) /* hack for a problem in POE signal handlers in non-LAPI MPI */ if(AR_caught_sigint || AR_caught_sigterm) _exit(1); #endif #if defined(DATA_SERVER) if(armci_me<0) _exit(1); else #endif armci_msg_abort(code); } /*For now, until no code requires a function pointer to ARMCI_Error (used by GA now).*/ void ARMCI_Error(char *msg, int code) { armci_die(msg,code); } void armci_allocate_locks() { /* note that if ELAN_ACC is defined the scope of locks is limited to SMP */ #if !defined(CRAY_SHMEM) && \ ( defined(HITACHI) || defined(CATAMOUNT) || \ (defined(QUADRICS) && defined(_ELAN_LOCK_H) && !defined(ELAN_ACC)) ) armcill_allocate_locks(NUM_LOCKS); #elif (defined(SYSV) || defined(WIN32) || defined(MMAP)) && !defined(HITACHI) if(armci_nproc == 1)return; # if defined(SPINLOCK) || defined(PMUTEX) || defined(PSPIN) CreateInitLocks(NUM_LOCKS, &lockid); # else if(armci_master==armci_me)CreateInitLocks(NUM_LOCKS, &lockid); armci_msg_clus_brdcst(&lockid, sizeof(lockid)); if(armci_master != armci_me)InitLocks(NUM_LOCKS, lockid); # endif #endif } void ARMCI_Set_shm_limit(unsigned long shmemlimit) { #if (defined(SYSV) || defined(WIN32) || defined(MMAP)) && !defined(HITACHI) #define EXTRASHM 1024 /* extra shmem used internally in ARMCI */ unsigned long limit; limit = shmemlimit+EXTRASHM; armci_set_shmem_limit_per_core(limit); #endif } /*\ allocate and initialize memory locking data structure \*/ void armci_init_memlock() { int bytes = MAX_SLOTS*sizeof(memlock_t); int rc, msize_per_proc=bytes; #ifdef MEMLOCK_SHMEM_FLAG /* last proc on node allocates memlock flag in shmem */ if(armci_clus_last == armci_me) bytes += sizeof(int); #endif memlock_table_array = malloc(armci_nproc*sizeof(void*)); if(!memlock_table_array) armci_die("malloc failed for ARMCI lock array",0); rc = PARMCI_Malloc(memlock_table_array, bytes); if(rc) armci_die("failed to allocate ARMCI memlock array",rc); armci_msg_barrier(); bzero(memlock_table_array[armci_me],bytes); #ifdef BGML bgml_init_locks ((void *) memlock_table_array[armci_me]); #elif ARMCIX ARMCIX_init_memlock ((memlock_t *) memlock_table_array[armci_me]); #endif #ifdef MEMLOCK_SHMEM_FLAG /* armci_use_memlock_table is a pointer to local memory variable=1 * we overwrite the pointer with address of shared memory variable * armci_use_memlock_table and initialize it >0 */ armci_use_memlock_table = (int*) (msize_per_proc + (char*) memlock_table_array[armci_clus_last]); /* printf("%d: last=%d bytes=%d ptr =(%d, %d)\n", armci_me,armci_clus_last,bytes,armci_use_memlock_table, memlock_table_array[armci_clus_last]); fflush(stdout); */ if(armci_clus_last == armci_me) *armci_use_memlock_table =1+armci_me; #endif armci_msg_barrier(); } #if defined(SYSV) || defined(WIN32) || defined(MMAP) # if defined(QUADRICS) && !defined(NO_SHM) static void armci_check_shmmax() { long mylimit, limit; mylimit = limit = (long) armci_max_region(); armci_msg_bcast_scope(SCOPE_MASTERS, &limit, sizeof(long), 0); if(mylimit != limit){ printf("%d:Shared mem limit in ARMCI is %ld bytes on node %s vs %ld on %s\n", armci_me,mylimit<<10,armci_clus_info[armci_clus_me].hostname, limit<<10, armci_clus_info[0].hostname); fflush(stdout); sleep(1); armci_die("All nodes must have the same SHMMAX limit if NO_SHM is not defined",0); } } # endif #endif extern void armci_region_shm_malloc(void *ptr_arr[], size_t bytes); #ifdef ENABLE_CHECKPOINT int armci_ft_spare_procs; void armci_set_spare_procs(int spare) { armci_ft_spare_procs = spare; } ARMCI_Group armci_ft_group; ARMCI_Group *ARMCI_Get_ft_group() { return(&armci_ft_group); } void armci_create_ft_group() { int i, list[MAX_PROC]; for(i=0;i0) return 0; dassertp(1,sizeof(armci_ireq_t) <= sizeof(armci_hdl_t), ("nb handle sizes: internal(%d) should be <= external(%d)\n", sizeof(armci_ireq_t), sizeof(armci_hdl_t))); /* let's hope that the message passing environment was initialized outside * of ARMCI such that passing NULL for argc/argv here is okay */ armci_msg_init(NULL, NULL); #ifdef MPI_SPAWN if(!_armci_initialized_args) armci_die("ARMCI is built w/ ARMCI_NETWORK=MPI-SPAWN. For this network " "setting, ARMCI must be initialized with PARMCI_Init_args() " "instead of PARMCI_Init(). Please replace PARMCI_Init() " " with PARMCI_Init_args(&argc, &argv) as in the API docs", 0L); #endif #if defined(MPI_MT) || defined(DCMF) { int provided; MPI_Query_thread(&provided); if (provided == MPI_THREAD_SINGLE) { armci_die("ARMCI is built w/ ARMCI_NETWORK=MPI_MT but the " "provided MPI threading level is MPI_THREAD_SINGLE " " not MPI_THREAD_MULTIPLE", 1); } else if (provided == MPI_THREAD_FUNNELED) { armci_die("ARMCI is built w/ ARMCI_NETWORK=MPI_MT but the " "provided MPI threading level is MPI_THREAD_FUNNELED " " not MPI_THREAD_MULTIPLE", 1); } else if (provided == MPI_THREAD_SERIALIZED) { armci_die("ARMCI is built w/ ARMCI_NETWORK=MPI_MT but the " "provided MPI threading level is MPI_THREAD_SERIALIZED " " not MPI_THREAD_MULTIPLE", 1); } else if (provided == MPI_THREAD_MULTIPLE) { } } #endif #ifdef BGML BGML_Messager_Init(); BG1S_Configuration_t config; config=BG1S_Configure(NULL); config.consistency= BG1S_ConsistencyModel_Weak; BG1S_Configure(&config); unsigned long long available = BGML_Messager_available(); if (available & BGML_MESSAGER_GI) bgml_barrier = (BGML_Barrier) BGGI_Barrier; else bgml_barrier = (BGML_Barrier) BGTr_Barrier; #endif #ifdef ARMCIX ARMCIX_Init (); #endif armci_nproc = armci_msg_nproc(); armci_me = armci_msg_me(); armci_usr_tid = THREAD_ID_SELF(); /*remember the main user thread id */ #if defined(THREAD_SAFE) armci_init_threads(); th_idx = ARMCI_THREAD_IDX; if (th_idx) printf("WARNING: PARMCI_Init is called from thread %d, should be 0\n",th_idx); #endif #ifdef _CRAYMPP cmpl_proc=-1; #endif #ifdef LAPI # ifdef AIX { char *tmp1 = getenv("RT_GRQ"), *tmp2 = getenv("AIXTHREAD_SCOPE"); if(tmp1 == NULL || strcmp((const char *)tmp1,"ON")) armci_die("Armci_Init: environment variable RT_GRQ not set. It should be set as RT_GRQ=ON, to restore original thread scheduling LAPI relies upon",0); if(tmp2 == NULL || strcmp((const char *)tmp2,"S")) armci_die("Armci_Init: environment variable AIXTHREAD_SCOPE=S should be set to assure correct operation of LAPI", 0); } # endif armci_init_lapi(); #endif #ifdef PORTALS armci_init_portals(); shmem_init(); #endif #ifdef CRAY_SHMEM shmem_init(); #endif armci_init_clusinfo(); #ifdef MPI armci_group_init(); #endif armci_krmalloc_init_localmem(); #ifndef BLRTS /* trap signals to cleanup ARMCI system resources in case of crash */ if(armci_me == armci_master) { ARMCI_ParentTrapSignals(); } ARMCI_ChildrenTrapSignals(); #endif #if defined(SYSV) || defined(WIN32) || defined(MMAP) /* init shared/K&R memory */ if(ARMCI_Uses_shm() ) { # ifdef SGIALTIX armci_altix_shm_init(); # else armci_shmem_init(); # endif } # if defined(QUADRICS) && !defined(NO_SHM) if(armci_me == armci_master)armci_check_shmmax(); # endif #endif #ifdef REGION_ALLOC { void* test_ptr_arr = malloc(sizeof(void *)*MAX_PROC); dassert(1,test_ptr_arr); PARMCI_Malloc(test_ptr_arr,256*1024*1024); PARMCI_Free(test_ptr_arr[armci_me]); free(test_ptr_arr); } #endif #ifdef MULTI_CTX /* this is a hack for the Elan-3 multi-tiled memory (qsnetlibs v 1.4.10) * we need to allocate and then free memory to satisfy libelan requirements * for symmetric memory addresses */ if(armci_nclus >1){ int segments, segsize, seg; void **addr; armci_nattach_preallocate_info(&segments, &segsize); segsize -= 1024*1024; /* leave some for the K&RM headers */ if(armci_me!=armci_master)segsize=0; /* only one allocates mem on node*/ addr = (void*) malloc(segments*armci_nproc*sizeof(void*)); if(!addr)armci_die("armci_init:addr malloc failed",segments*armci_nproc); for(seg=0; seg< segments; seg++) /* allocate segments */ if(PARMCI_Malloc(addr+armci_nproc*seg,segsize)) armci_die("problem in Elan-3 mem preallocation",seg); for(seg=0; seg< segments; seg++) /* return to free pool */ if(armci_me==armci_master) if(PARMCI_Free(*(addr+armci_nproc*seg+armci_me))) armci_die("problem in Elan-3 mem preallocation - free stage",seg); free(addr); #if 0 if(armci_me==armci_master){ printf("%d:preallocated %d segments %d bytes each\n",armci_me, segments, segsize); fflush(stdout); } #endif } #endif /* allocate locks: we need to do it before server is started */ armci_allocate_locks(); armci_init_fence(); #if ARMCI_ENABLE_GPC_CALLS gpc_init_signals(); #endif #ifdef ALLOW_PIN armci_prot_switch_fence = malloc(sizeof(int*)*armci_nproc); armci_prot_switch_preproc = -1; armci_prot_switch_preop = -1; #endif /* NOTE: FOR PROCESS-BASED DATA SERVER WE CANNOT call PARMCI_Malloc yet */ # if defined(DATA_SERVER) if(armci_nclus >1) armci_start_server(); # endif #if defined(GM) || defined(VAPI) || defined(PORTALS) || (defined(LAPI) && defined(LAPI_RDMA)) /* initialize registration of memory */ armci_region_init(); #endif armci_msg_barrier(); armci_init_memlock(); /* allocate data struct for locking memory areas */ #if !defined(GM) armci_notify_init(); #endif armci_msg_barrier(); armci_msg_gop_init(); _armci_initialized=1; #ifdef ENABLE_CHECKPOINT armci_init_checkpoint(armci_ft_spare_procs); #endif #ifdef MPI_MT _armci_test_connections(); #else uval = getenv("ARMCI_TEST_CONNECTIONS"); if(uval!=NULL) { _armci_test_connections(); } #endif #if MSG_COMMS_TCGMSGMPI install_nxtval(NULL, NULL); #endif return 0; } /* ARMCI Finalize is called multiple times, if both GA and TCGMSG are used * */ void PARMCI_Finalize() { if(_armci_initialized <= 0 ) { return; } _armci_initialized = 0; _armci_terminating =1; _armci_initialized_args=0; _armci_argc = NULL; _armci_argv = NULL; armci_msg_barrier(); if(armci_me==armci_master) ARMCI_ParentRestoreSignals(); #if defined(DATA_SERVER) if(armci_nclus >1){ armci_wait_for_server(); armci_msg_barrier(); } #endif #ifdef PORTALS armci_fini_portals(); #endif #ifdef LAPI armci_term_lapi(); #endif #ifdef ALLOW_PIN free(armci_prot_switch_fence); #endif armci_msg_gop_finalize(); ARMCI_Cleanup(); armci_msg_barrier(); #ifdef MPI armci_group_finalize(); #endif #ifdef ARMCIX ARMCIX_Finalize (); #endif #ifdef MPI MPI_Comm_free(&ARMCI_COMM_WORLD); /*SK: free at last*/ #endif } /* Indicates whether ARMCI_Init or ARMCI_Init_args has been called. */ int PARMCI_Initialized() { return (_armci_initialized > 0) ? 1 : 0; } #if !(defined(SYSV) || defined(WIN32)) void ARMCI_Set_shmem_limit(unsigned long shmemlimit) { /* not applicable here * aborting would make user's life harder */ } #endif void ARMCI_Copy(void *src, void *dst, int n) { armci_copy(src,dst,n); } extern void cpu_yield(); void armci_util_wait_int(volatile int *p, int val, int maxspin) { int count=0; while(*p != val) if((++count)agg_flag = 1; ((armci_ihdl_t)(nb_handle))->proc = -1; } void ARMCI_UNSET_AGGREGATE_HANDLE(armci_hdl_t* nb_handle) { ((armci_ihdl_t)(nb_handle))->agg_flag = 0; ((armci_ihdl_t)(nb_handle))->proc = -1; } int parmci_notify(int proc) { armci_notify_t *pnotify = _armci_notify_arr[armci_me]+proc; pnotify->sent++; # ifdef MEM_FENCE if(SAMECLUSNODE(proc)) MEM_FENCE; # endif #ifdef OPENIB /* IB will optimze a simple Put by using RDMA. This can bypass non-RDMA * Puts and lead to incorrect behavour. Avoid that by using PutV, which * presently does not optimize to RDMA. * This workaround is sub-optimal for two reasons: * 1. This adds more overhead when there is may be no need. * 2. There is no guarantee that PutV will always be un-optimized. */ void *sp = &pnotify->sent; void *dp = &(_armci_notify_arr[proc]+armci_me)->received; armci_giov_t gv; gv.src_ptr_array = &sp; gv.dst_ptr_array = &dp; gv.ptr_array_len = 1; gv.bytes = sizeof(pnotify->sent); PARMCI_PutV(&gv, 1, proc); #else PARMCI_Put(&pnotify->sent,&(_armci_notify_arr[proc]+armci_me)->received, sizeof(pnotify->sent),proc); #endif /* OPENIB */ return(pnotify->sent); } /* blocks until received count becomes >= waited count * return received count and store waited count in *pval */ int parmci_notify_wait(int proc,int *pval) { int retval; long loop=0; armci_notify_t *pnotify = _armci_notify_arr[armci_me]+proc; pnotify->waited++; while( pnotify->waited > pnotify->received) { if(++loop == 1000) { loop=0;cpu_yield(); } armci_util_spin(loop, pnotify); } *pval = pnotify->waited; retval=pnotify->received; return retval; } long armci_util_long_getval(long* p) { return *p; } int armci_util_int_getval(int* p) { return *p; } #if ARMCI_ENABLE_GPC_CALLS int armci_gpc(int hndl, int proc, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, void *rdata, int rdlen, armci_hdl_t* nbh) { armci_ihdl_t nb_handle = (armci_ihdl_t)nbh; armci_giov_t darr[2]; /* = {{&rhdr, &rhdr, 1, rhlen}, {&rdata, &rdata, 1, rdlen}};*/ gpc_send_t send; char *ptr; /* initialize giov */ darr[0].src_ptr_array = &rhdr; darr[0].dst_ptr_array = &rhdr; darr[0].ptr_array_len = 1; darr[0].bytes = rhlen; darr[1].src_ptr_array = &rdata; darr[1].dst_ptr_array = &rdata; darr[1].ptr_array_len = 1; darr[1].bytes = rdlen; /* if(hlen<0 || hlen>=ARMCI_Gpc_get_hlen()) */ /* return FAIL2; */ /* if(rhlen<0 || rhlen>=ARMCI_Gpc_get_hlen()) */ /* return FAIL2; */ /* if(dlen<0 || dlen>=ARMCI_Gpc_get_dlen()) */ /* return FAIL2; */ /* if(rdlen<0 || rdlen>=ARMCI_Gpc_get_dlen()) */ /* return FAIL2; */ if(hlen>0 && hdr==NULL) return FAIL3; if(rhlen>0 && rhdr==NULL) return FAIL3; if(dlen>0 && data==NULL) return FAIL3; if(rdlen>0 && rdata==NULL) return FAIL3; if(proc<0 || proc >= armci_nproc) return FAIL4; send.hndl = hndl; send.hlen = hlen; send.dlen = dlen; send.hdr = hdr; send.data = data; if(nb_handle){ nb_handle->tag = GET_NEXT_NBTAG(); nb_handle->op = GET; nb_handle->proc= proc; nb_handle->bufid=NB_NONE; } else { ORDER(GET,proc); /*ensure ordering */ nb_handle = NULL; } #if defined(LAPI) || defined(GM) || defined(VAPI) || defined(QUADRICS) if(armci_rem_gpc(GET, darr, 2, &send, proc, 1, nb_handle)) #endif return FAIL2; return 0; } int armci_sameclusnode(int proc) { return SAMECLUSNODE(proc); } #endif void _armci_init_handle(armci_hdl_t *hdl) { ((double *)((hdl)->data))[0]=0; ((double *)((hdl)->data))[1]=0; } #ifdef CHANGE_SERVER_AFFINITY static inline int val_to_char(int v) { if (v >= 0 && v < 10) return '0' + v; else if (v >= 10 && v < 16) return ('a' - 10) + v; else return -1; } static const char *nexttoken(const char *q, int sep) { if (q) q = strchr(q, sep); if (q) q++; return q; } int cstr_to_cpuset(cpu_set_t * mask, const char *str) { const char *p, *q; q = str; CPU_ZERO(mask); while (p = q, q = nexttoken(q, ','), p) { unsigned int a; /* beginning of range */ unsigned int b; /* end of range */ unsigned int s; /* stride */ const char *c1, *c2; if (sscanf(p, "%u", &a) < 1) return 1; b = a; s = 1; c1 = nexttoken(p, '-'); c2 = nexttoken(p, ','); if (c1 != NULL && (c2 == NULL || c1 < c2)) { if (sscanf(c1, "%u", &b) < 1) return 1; c1 = nexttoken(c1, ':'); if (c1 != NULL && (c2 == NULL || c1 < c2)) if (sscanf(c1, "%u", &s) < 1) { return 1; } } if (!(a <= b)) return 1; while (a <= b) { CPU_SET(a, mask); a += s; } } return 0; } char *cpuset_to_cstr(cpu_set_t * mask, char *str) { int i; char *ptr = str; int entry_made = 0; for (i = 0; i < CPU_SETSIZE; i++) { if (CPU_ISSET(i, mask)) { int j; int run = 0; entry_made = 1; for (j = i + 1; j < CPU_SETSIZE; j++) { if (CPU_ISSET(j, mask)) run++; else break; } if (!run) sprintf(ptr, "%d,", i); else if (run == 1) { sprintf(ptr, "%d,%d,", i, i + 1); i++; } else { sprintf(ptr, "%d-%d,", i, i + run); i += run; } while (*ptr != 0) ptr++; } } ptr -= entry_made; *ptr = 0; return str; } char *cpuset_to_str(cpu_set_t * mask, char *str) { int base; char *ptr = str; char *ret = 0; for (base = CPU_SETSIZE - 4; base >= 0; base -= 4) { char val = 0; if (CPU_ISSET(base, mask)) val |= 1; if (CPU_ISSET(base + 1, mask)) val |= 2; if (CPU_ISSET(base + 2, mask)) val |= 4; if (CPU_ISSET(base + 3, mask)) val |= 8; if (!ret && val) ret = ptr; *ptr++ = val_to_char(val); } *ptr = 0; return ret ? ret : ptr - 1; } #endif static int in_error_cleanup=0; void derr_printf(const char *format, ...) { if(!in_error_cleanup) { #ifdef SYSV if((!AR_caught_sigterm && !AR_caught_sigint) || armci_me==0) #endif { va_list ap; va_start(ap, format); vprintf(format, ap); va_end(ap); } } } int dassertp_fail(const char *cond_string, const char *file, const char *func, unsigned int line, int code) { if(!in_error_cleanup) { /* JAD 02/23/2012 for applications, an exit/error code of 0 indicates * success, it is therefore wrong to call dassertp_fail with a zero value */ if (0 == code) { code = -1; } in_error_cleanup=1; #ifdef SYSV if((!AR_caught_sigterm && !AR_caught_sigint) || armci_me==0) #endif { printf("(rank:%d hostname:%s pid:%d):ARMCI DASSERT fail. %s:%s():%d cond:%s\n", armci_me,armci_clus_info[armci_clus_me].hostname, getpid(), file,func,line,cond_string); #if defined(PRINT_BT) backtrace_symbols_fd(bt, backtrace(bt, 100), 2); #endif } armci_abort(code); } return code; } ga-5-3/armci/src/common/capi.c0000640005473000001440000002604412115161655015037 0ustar d3n000users #if HAVE_CONFIG_H # include "config.h" #endif #include #include "armci.h" #include "parmci.h" #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Acc #endif int ARMCI_Acc(int optype, void *scale, void *src, void *dst, int bytes, int proc) { return PARMCI_Acc(optype, scale, src, dst, bytes, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_AccS #endif int ARMCI_AccS(int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { return PARMCI_AccS(optype, scale, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_AccV #endif int ARMCI_AccV(int op, void *scale, armci_giov_t *darr, int len, int proc) { return PARMCI_AccV(op, scale, darr, len, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_AllFence #endif void ARMCI_AllFence() { PARMCI_AllFence(); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Barrier #endif void ARMCI_Barrier() { PARMCI_Barrier(); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Create_mutexes #endif int ARMCI_Create_mutexes(int num) { return PARMCI_Create_mutexes(num); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Destroy_mutexes #endif int ARMCI_Destroy_mutexes() { return PARMCI_Destroy_mutexes(); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Fence #endif void ARMCI_Fence(int proc) { PARMCI_Fence(proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Finalize #endif void ARMCI_Finalize() { PARMCI_Finalize(); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Free #endif int ARMCI_Free(void *ptr) { return PARMCI_Free(ptr); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Free_local #endif int ARMCI_Free_local(void *ptr) { return PARMCI_Free_local(ptr); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Get #endif int ARMCI_Get(void *src, void *dst, int bytes, int proc) { return PARMCI_Get(src, dst, bytes, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_GetS #endif int ARMCI_GetS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { return PARMCI_GetS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_GetV #endif int ARMCI_GetV(armci_giov_t *darr, int len, int proc) { return PARMCI_GetV(darr, len, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_GetValueDouble #endif double ARMCI_GetValueDouble(void *src, int proc) { return PARMCI_GetValueDouble(src, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_GetValueFloat #endif float ARMCI_GetValueFloat(void *src, int proc) { return PARMCI_GetValueFloat(src, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_GetValueInt #endif int ARMCI_GetValueInt(void *src, int proc) { return PARMCI_GetValueInt(src, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_GetValueLong #endif long ARMCI_GetValueLong(void *src, int proc) { return PARMCI_GetValueLong(src, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Init #endif int ARMCI_Init() { return PARMCI_Init(); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Init_args #endif int ARMCI_Init_args(int *argc, char ***argv) { return PARMCI_Init_args(argc, argv); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Initialized #endif int ARMCI_Initialized() { return PARMCI_Initialized(); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Lock #endif void ARMCI_Lock(int mutex, int proc) { PARMCI_Lock(mutex, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Malloc #endif int ARMCI_Malloc(void **ptr_arr, armci_size_t bytes) { return PARMCI_Malloc(ptr_arr, bytes); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Malloc_local #endif void* ARMCI_Malloc_local(armci_size_t bytes) { return PARMCI_Malloc_local(bytes); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Memat #endif void* ARMCI_Memat(armci_meminfo_t *meminfo, long offset) { return PARMCI_Memat(meminfo, offset); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Memget #endif void ARMCI_Memget(size_t bytes, armci_meminfo_t *meminfo, int memflg) { PARMCI_Memget(bytes, meminfo, memflg); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbAccS #endif int ARMCI_NbAccS(int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbAccS(optype, scale, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbAccV #endif int ARMCI_NbAccV(int op, void *scale, armci_giov_t *darr, int len, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbAccV(op, scale, darr, len, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbGet #endif int ARMCI_NbGet(void *src, void *dst, int bytes, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbGet(src, dst, bytes, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbGetS #endif int ARMCI_NbGetS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbGetS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbGetV #endif int ARMCI_NbGetV(armci_giov_t *darr, int len, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbGetV(darr, len, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbPut #endif int ARMCI_NbPut(void *src, void *dst, int bytes, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbPut(src, dst, bytes, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbPutS #endif int ARMCI_NbPutS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbPutS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbPutV #endif int ARMCI_NbPutV(armci_giov_t *darr, int len, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbPutV(darr, len, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbPutValueDouble #endif int ARMCI_NbPutValueDouble(double src, void *dst, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbPutValueDouble(src, dst, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbPutValueFloat #endif int ARMCI_NbPutValueFloat(float src, void *dst, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbPutValueFloat(src, dst, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbPutValueInt #endif int ARMCI_NbPutValueInt(int src, void *dst, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbPutValueInt(src, dst, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbPutValueLong #endif int ARMCI_NbPutValueLong(long src, void *dst, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbPutValueLong(src, dst, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Put #endif int ARMCI_Put(void *src, void *dst, int bytes, int proc) { return PARMCI_Put(src, dst, bytes, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_PutS #endif int ARMCI_PutS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { return PARMCI_PutS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_PutS_flag #endif int ARMCI_PutS_flag(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc) { return PARMCI_PutS_flag(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, flag, val, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_PutS_flag_dir #endif int ARMCI_PutS_flag_dir(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc) { return PARMCI_PutS_flag_dir(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, flag, val, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_PutV #endif int ARMCI_PutV(armci_giov_t *darr, int len, int proc) { return PARMCI_PutV(darr, len, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_PutValueDouble #endif int ARMCI_PutValueDouble(double src, void *dst, int proc) { return PARMCI_PutValueDouble(src, dst, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_PutValueFloat #endif int ARMCI_PutValueFloat(float src, void *dst, int proc) { return PARMCI_PutValueFloat(src, dst, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_PutValueInt #endif int ARMCI_PutValueInt(int src, void *dst, int proc) { return PARMCI_PutValueInt(src, dst, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_PutValueLong #endif int ARMCI_PutValueLong(long src, void *dst, int proc) { return PARMCI_PutValueLong(src, dst, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Put_flag #endif int ARMCI_Put_flag(void *src, void *dst, int bytes, int *f, int v, int proc) { return PARMCI_Put_flag(src, dst, bytes, f, v, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Rmw #endif int ARMCI_Rmw(int op, void *ploc, void *prem, int extra, int proc) { return PARMCI_Rmw(op, ploc, prem, extra, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Test #endif int ARMCI_Test(armci_hdl_t *nb_handle) { return PARMCI_Test(nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Unlock #endif void ARMCI_Unlock(int mutex, int proc) { PARMCI_Unlock(mutex, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Wait #endif int ARMCI_Wait(armci_hdl_t *nb_handle) { return PARMCI_Wait(nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_WaitAll #endif int ARMCI_WaitAll() { return PARMCI_WaitAll(); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_WaitProc #endif int ARMCI_WaitProc(int proc) { return PARMCI_WaitProc(proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak armci_msg_barrier #endif void armci_msg_barrier() { parmci_msg_barrier(); } #if MSG_COMMS_MPI #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak armci_msg_group_barrier #endif void armci_msg_group_barrier(ARMCI_Group *group) { parmci_msg_group_barrier(group); } #endif #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak armci_notify #endif int armci_notify(int proc) { return parmci_notify(proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak armci_notify_wait #endif int armci_notify_wait(int proc, int *pval) { return parmci_notify_wait(proc, pval); } ga-5-3/armci/src/common/aggregate.c0000640005473000001440000003022211633454354016047 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** $Id: aggregate.c,v 1.6 2003-10-22 22:12:14 d3h325 Exp $ * Aggregate Put/Get requests */ #include "armcip.h" #if HAVE_STRING_H # include /* memcpy */ #endif #if HAVE_STDIO_H # include #endif #define _MAX_AGG_BUFFERS 32 /* Maximum # of aggregation buffers available*/ #define _MAX_AGG_BUFSIZE 2048 /* size of each buffer. should be < 2^15 */ #define _MAX_PTRS 256 /* < 2^15, as it is "short int" in agg_req_t */ #define _MAX_AGG_HANDLE _MAX_AGG_BUFFERS /* Max # of aggregation handles */ /* aggregate request handle */ typedef struct { unsigned int tag; /* non-blocking request tag */ short int proc; /* remote process id */ short int request_len ; /* number of requests */ short int ptr_array_len; /* pointer length for this request */ short int buf_pos_end; /* position of buffer (from right end) */ armci_giov_t *darr; /* giov vectors */ }agg_req_t; static agg_req_t *aggr[_MAX_AGG_HANDLE]; /* aggregate request handle */ /* data structure for dynamic buffer management */ typedef struct { int size; /* represents the size of the list (not linked list) */ int index[_MAX_AGG_HANDLE]; } agg_list_t; static agg_list_t ulist, alist;/*in-use & available aggr buffer index list*/ /* aggregation buffer */ static char agg_buf[_MAX_AGG_BUFFERS][_MAX_AGG_BUFSIZE]; /* aggregation buffer to store the pointers */ static void* agg_src_ptr[_MAX_AGG_BUFFERS][_MAX_PTRS]; static void* agg_dst_ptr[_MAX_AGG_BUFFERS][_MAX_PTRS]; /** * --------------------------------------------------------------------- * fill descriptor from this side (left to right) * ---> * _______________________________________________ * | | | |. . . . . . . . . . | | | | * |__|__|__|_____________________________|__|__|__| * * <--- * fill src and dst pointer (arrays) in this direction * (right to left) * * Once they are about to cross each other (implies buffer is full), * complete the data transfer. * --------------------------------------------------------------------- */ #define AGG_INIT_NB_HANDLE(op_type, p, nb_handle) \ if(nb_handle->proc < 0) { \ nb_handle->tag = GET_NEXT_NBTAG(); \ nb_handle->op = op_type; \ nb_handle->proc = p; \ nb_handle->bufid= NB_NONE; \ } \ else if(nb_handle->op != op_type) \ armci_die("ARMCI_NbXXX: AGG_INIT_NB_HANDLE(): Aggregate Failed, Invalid non-blocking handle", nb_handle->op); \ else if(nb_handle->proc != p) \ armci_die("ARMCI_NbXXX: AGG_INIT_NB_HANDLE(): Aggregate Failed, Invalid non-blocking handle", p) /* initialize/set the fields in the buffer*/ #define _armci_agg_set_buffer(index, tag, proc, len) { \ aggr[(index)]->tag = (tag); \ aggr[(index)]->proc = (proc); \ aggr[(index)]->request_len = (len); \ ulist.index[ulist.size++] = (index);/* add the new index to the in-use list and increment it's size*/ \ } /* get the index of the aggregation buffer to be used */ static int _armci_agg_get_bufferid(armci_ihdl_t nb_handle) { int i, index, proc = nb_handle->proc; unsigned int tag = nb_handle->tag; /* check if there is an entry for this handle in the existing list*/ for(i=ulist.size-1; i>=0; i--) { index = ulist.index[i]; if(aggr[index]->tag == tag && aggr[index]->proc == proc) return index; } /* else it is a new handle, so get a aggr buffer from either of the lists. ???? don't throw exception here */ if(ulist.size >= _MAX_AGG_BUFFERS && alist.size == 0) armci_die("_armci_agg_get_index: Too many outstanding aggregation requests\n", ulist.size); /*If there is a buffer in readily available list,use it*/ if(alist.size > 0) index = alist.index[--alist.size]; else { /* else use/get a buffer from the main list */ index = ulist.size; /* allocate memory for aggregate request handle */ aggr[index] = (agg_req_t *)agg_buf[index]; aggr[index]->request_len = 0; aggr[index]->ptr_array_len = 0; aggr[index]->buf_pos_end = _MAX_AGG_BUFSIZE; /* allocate memory for giov vector field in aggregate request handler */ aggr[index]->darr = (armci_giov_t *)(agg_buf[index]+sizeof(agg_req_t)); } _armci_agg_set_buffer(index, tag, proc, 0); return index; } static void _armci_agg_update_lists(int index) { int i; /* remove that index from the in-use list and bring the last element in the in-use list to the position of the removed one. */ for(i=0; irequest_len; /* index of giov descriptor */ bytes_remaining = aggr[index]->buf_pos_end - (sizeof(agg_req_t) + aggr[index]->request_len*sizeof(armci_giov_t)); /* extra bytes required to store registered put data */ if(is_registered_put) bytes_needed = bytes; /* if (byte-)sizes are equal, use previously created descriptor else get a new descriptor */ if( rid && bytes==aggr[index]->darr[rid-1].bytes) --rid; else { get_new_descr=1; bytes_needed += sizeof(armci_giov_t); } /* If buffer is full, then complete data transfer. After completion, if still ptr array_len is greater than maximum limit(_MAX_PTRS), then do it by parts. Determine new ptr_array_len that fits buffer */ if( (bytes_needed > bytes_remaining) || (_MAX_PTRS - aggr[index]->ptr_array_len < *ptr_array_len)) { armci_agg_complete(nb_handle, SET); rid = 0; get_new_descr=1; if(*ptr_array_len > _MAX_PTRS) *ptr_array_len = _MAX_PTRS; } /* if new descriptor, allocate memory for src_ptr & dst_ptr arrays */ if(get_new_descr) { int i = aggr[index]->ptr_array_len; aggr[index]->darr[rid].src_ptr_array = (void **)&agg_src_ptr[index][i]; aggr[index]->darr[rid].dst_ptr_array = (void **)&agg_dst_ptr[index][i]; aggr[index]->darr[rid].ptr_array_len = 0; aggr[index]->request_len++; } /* store registered put data */ if(is_registered_put) { aggr[index]->buf_pos_end -= bytes; memcpy(&((char *)aggr[index])[aggr[index]->buf_pos_end], *((char **)registered_put_data), bytes); *(char **)registered_put_data = (char *)&((char *)aggr[index])[aggr[index]->buf_pos_end]; } aggr[index]->ptr_array_len += *ptr_array_len; return (&aggr[index]->darr[rid]); } int armci_agg_save_descriptor(void *src, void *dst, int bytes, int proc, int op, int is_registered_put, armci_ihdl_t nb_handle) { int one=1, idx; armci_giov_t * darr; /* set up the handle if it is a new aggregation request */ AGG_INIT_NB_HANDLE(op, proc, nb_handle); darr = _armci_agg_get_descriptor(&one, bytes, nb_handle, is_registered_put, &src); idx = darr->ptr_array_len; darr->src_ptr_array[idx] = src; darr->dst_ptr_array[idx] = dst; darr->bytes = bytes; darr->ptr_array_len += 1; fflush(stdout); return 0; } int armci_agg_save_giov_descriptor(armci_giov_t dscr[], int len, int proc, int op, armci_ihdl_t nb_handle) { int i, j, k, idx, bytes, ptr_array_len; armci_giov_t * darr; /* set up the handle if it is a new aggregation request */ AGG_INIT_NB_HANDLE(op, proc, nb_handle); for(i=0; iptr_array_len; for(j=idx; jsrc_ptr_array[j] = dscr[i].src_ptr_array[k]; darr->dst_ptr_array[j] = dscr[i].dst_ptr_array[k]; } darr->bytes = dscr[i].bytes; darr->ptr_array_len += ptr_array_len; ptr_array_len = dscr[i].ptr_array_len - ptr_array_len; if(ptr_array_len <0) armci_die("agg_save_giov_descr failed", 0L); } while(k < darr[i].ptr_array_len); } return 0; } int armci_agg_save_strided_descriptor(void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, int proc, int op, armci_ihdl_t nb_handle) { int i, j, k, idx, ptr_array_len=1, total1D=1, num1D=0; int offset1, offset2, factor[MAX_STRIDE_LEVEL]; armci_giov_t * darr; /* set up the handle if it is a new aggregation request */ AGG_INIT_NB_HANDLE(op, proc, nb_handle); for(i=1; i<=stride_levels; i++) { total1D *= count[i]; factor[i-1]=0; } ptr_array_len = total1D; do { darr=_armci_agg_get_descriptor(&ptr_array_len,count[0],nb_handle,0,0); idx = darr->ptr_array_len; /* converting stride into giov vector */ for(i=idx; isrc_ptr_array[i] = (char *)src_ptr + offset1; darr->dst_ptr_array[i] = (char *)dst_ptr + offset2; ++factor[0]; ++num1D; for(j=1; jbytes = count[0]; darr->ptr_array_len += ptr_array_len; ptr_array_len = total1D - ptr_array_len; if(ptr_array_len <0) armci_die("agg_save_strided_descr failed", 0L); } while(num1D < total1D); return 0; } void armci_agg_complete(armci_ihdl_t nb_handle, int condition) { int i, index=0, rc; /* get the buffer index for this handle */ for(i=ulist.size-1; i>=0; i--) { index = ulist.index[i]; if(aggr[index]->tag == nb_handle->tag && aggr[index]->proc == nb_handle->proc) break; } if(i<0) return; /* implies this handle has no requests at all */ #if 0 printf("%d: Aggregation Complete to remote process %d (%d:%d requests)\n", armci_me, nb_handle->proc, index, aggr[index]->request_len); #endif /* complete the data transfer. NOTE: in LAPI, Non-blocking calls (followed by wait) performs better than blocking put/get */ if(aggr[index]->request_len) { switch(nb_handle->op) { #ifdef LAPI armci_hdl_t usr_hdl; case PUT: ARMCI_INIT_HANDLE(&usr_hdl); if((rc=PARMCI_NbPutV(aggr[index]->darr, aggr[index]->request_len, nb_handle->proc, (armci_hdl_t*)&usr_hdl))) ARMCI_Error("armci_agg_complete: nbputv failed",rc); PARMCI_Wait((armci_hdl_t*)&usr_hdl); break; case GET: ARMCI_INIT_HANDLE(&usr_hdl); if((rc=PARMCI_NbGetV(aggr[index]->darr, aggr[index]->request_len, nb_handle->proc, (armci_hdl_t*)&usr_hdl))) ARMCI_Error("armci_agg_complete: nbgetv failed",rc); PARMCI_Wait((armci_hdl_t*)&usr_hdl); break; #else case PUT: if((rc=PARMCI_PutV(aggr[index]->darr, aggr[index]->request_len, nb_handle->proc))) ARMCI_Error("armci_agg_complete: putv failed",rc); break; case GET: if((rc=PARMCI_GetV(aggr[index]->darr, aggr[index]->request_len, nb_handle->proc))) ARMCI_Error("armci_agg_complete: getv failed",rc); break; #endif } } /* setting request length to zero, as the requests are completed */ aggr[index]->request_len = 0; aggr[index]->ptr_array_len = 0; aggr[index]->buf_pos_end = _MAX_AGG_BUFSIZE; /* If armci_agg_complete() is called PARMCI_Wait(), then unset nb_handle*/ if(condition==UNSET) { nb_handle->proc = -1; _armci_agg_update_lists(index); } } ga-5-3/armci/src/common/clusterinfo.c0000640005473000001440000003310211744312006016444 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /****************************************************************************** * file: clusterinfo.c * purpose: Determine cluster info i.e., number of machines and processes * running on each of them. * *******************************************************************************/ #if HAVE_STRING_H # include #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_UNISTD_H # include #elif HAVE_WINSOCK_H # include /* this is where gethostbyname is declared */ #endif #include "message.h" #include "armcip.h" /* NO_SHMEM enables to simulate cluster environment on a single workstation. * Must define NO_SHMMAX_SEARCH in shmem.c to prevent depleting shared memory * due to a gready shmem request by the master process on cluster node 0. */ #if defined(DECOSF) && defined(QUADRICS) # if !defined(REGION_ALLOC) # define NO_SHMEM extern int armci_enable_alpha_hack(); # endif #else # define armci_enable_alpha_hack() 1 #endif #define DEBUG 0 #define MAX_HOSTNAME 80 #define CHECK_NODE_NAMES /* print info on how many cluster nodes detected */ #ifdef CLUSTER # define PRINT_CLUSTER_INFO 0 #else # define PRINT_CLUSTER_INFO 0 #endif #if defined(OPENIB) static const char *network_protocol="OpenIB Verbs API"; #elif defined(PM) static const char *network_protocol="Score PM"; #elif defined(MPI_MT) static const char *network_protocol="MPI-MT"; #elif defined(MPI_SPAWN) static const char *network_protocol="MPI-SPAWN"; #else static const char *network_protocol="TCP/IP Sockets"; #endif /*** stores cluster configuration. Initialized before user threads are created and then read-only ***/ armci_clus_t *armci_clus_info; #ifdef HITACHI #include # define GETHOSTNAME sr_gethostname ndes_t _armci_group; static int sr_gethostname(char *name, int len) { int no; pid_t ppid; if(hmpp_nself (&_armci_group,&no,&ppid,0,NULL) <0) return -1; if(len<6)armci_die("len too small",len); if(no>1024)armci_die("expected node id <1024",no); sprintf(name,"n%d",no); return 0; } #elif defined(SGIALTIX) # define GETHOSTNAME altix_gethostname static int altix_gethostname(char *name, int len) { sprintf(name,"altix"); return 0; } #elif defined(CRAY_XT) /* && !defined(PORTALS) */ #define GETHOSTNAME cnos_gethostname static int cnos_gethostname(char *name, int len) { int size,rank; size=PMI_Get_rank(&rank); sprintf(name,"%d",rank); } #else # define GETHOSTNAME gethostname #endif static char* merge_names(char *name) { int jump = 1, rem, to, from; int lenmes, lenbuf, curlen, totbuflen= armci_nproc*HOSTNAME_LEN; int len = strlen(name); char *work = malloc(totbuflen); if(!work)armci_die("armci: merge_names: malloc failed: ",totbuflen); strcpy(work, name); curlen = len+1; /* prefix tree merges names in the order of process numbering in log(P)time * result = name_1//name_2//...//name_P-1 */ do { jump *= 2; rem = armci_me%jump; if(rem){ to = armci_me - rem; armci_msg_snd(ARMCI_TAG, work, curlen, to); break; }else{ from = armci_me + jump/2; if(from < armci_nproc){ lenbuf = totbuflen - curlen; armci_msg_rcv(ARMCI_TAG, work+curlen, lenbuf, &lenmes, from); curlen += lenmes; } } }while (jump < armci_nproc); return(work); } static void process_hostlist(char *names) { #ifdef CLUSTER int i, cluster=0; char *s,*master; int len, root=0; /******** inspect list of machine names to determine locality ********/ if (armci_me==0){ /* first find out how many cluster nodes we got */ armci_nclus =1; s=master=names; for(i=1; i < armci_nproc; i++){ s += strlen(s)+1; if(strcmp(s,master)){ /* we found a new machine name on the list */ master = s; armci_nclus++; /*fprintf(stderr,"new name %s len =%d\n",master, strlen(master));*/ } } /* allocate memory */ armci_clus_info = (armci_clus_t*)malloc(armci_nclus*sizeof(armci_clus_t)); if(!armci_clus_info) armci_die("malloc failed for clusinfo",armci_nclus); /* fill the data structure -- go through the list again */ s=names; master="*-"; /* impossible hostname */ cluster =0; for(i=0; i < armci_nproc; i++){ if(strcmp(s,master)){ /* we found a new machine name on the list */ master = s; armci_clus_info[cluster].nslave=1; armci_clus_info[cluster].master=i; strcpy(armci_clus_info[cluster].hostname, master); #ifdef CHECK_NODE_NAMES /* need consecutive task id allocated on the same node * the current test only compares hostnames against first cluster */ if(cluster) if(!strcmp(master,armci_clus_info[0].hostname)){ /* we have seen that hostname before */ fprintf(stderr, "ARMCI supports block process mapping only\n"); armci_die("Cannot run: improper task to host mapping!",0); } #endif cluster++; } else{ /* the process is still on the same host */ armci_clus_info[cluster-1].nslave++; } s += strlen(s)+1; } if(armci_nclus != cluster) armci_die("inconsistency processing clusterinfo",armci_nclus); } /******** process 0 got all data ********/ /* now broadcast locality info struct to all processes * two steps are needed because of the unknown length of hostname list */ len = sizeof(int); armci_msg_brdcst(&armci_nclus, len, root); if(armci_me){ /* allocate memory */ armci_clus_info = (armci_clus_t*)malloc(armci_nclus*sizeof(armci_clus_t)); if(!armci_clus_info) armci_die("malloc failed for clusinfo",armci_nclus); } len = sizeof(armci_clus_t)*armci_nclus; armci_msg_brdcst(armci_clus_info, len, root); /******** all processes 0 got all data ********/ /* now determine current cluster node id by comparing me to master */ armci_clus_me = armci_nclus-1; for(i =0; i< armci_nclus-1; i++) if(armci_me < armci_clus_info[i+1].master){ armci_clus_me=i; break; } #else armci_clus_me=0; armci_nclus=1; armci_clus_info = (armci_clus_t*)malloc(armci_nclus*sizeof(armci_clus_t)); if(!armci_clus_info) armci_die("malloc failed for clusinfo",armci_nclus); strcpy(armci_clus_info[0].hostname, names); armci_clus_info[0].master=0; armci_clus_info[0].nslave=armci_nproc; #endif /* Starting process ID on my node */ armci_clus_first = armci_clus_info[armci_clus_me].master; /* Last process ID on my node */ armci_clus_last = armci_clus_first + armci_clus_info[armci_clus_me].nslave-1; } /*\ Substring Replacement: replace needle with nail in a haystack \*/ static char *substr_replace(char *haystack, char *needle, char *nail) { char *tmp, *pos, *first; size_t len=strlen(needle), nlen=strlen(nail),bytes; size_t left; pos = strstr(haystack,needle); if (pos ==NULL) return NULL; first= tmp = calloc(strlen(haystack)+nlen-len+1+1,1); if(first==NULL) return(NULL); bytes = pos - haystack; while(bytes){ *tmp = *haystack; tmp++; haystack++; bytes--;} while(nlen) { *tmp = *nail; tmp++; nail++; nlen--;} haystack += len; left = strlen(haystack); while(left>0){*tmp = *haystack; tmp++; haystack++; left --;} *tmp='\0'; return(first); } /*\ ARMCI_HOSTNAME_REPLACE contains "needle/nail" string to derive new hostname \*/ static char *new_hostname(char *host) { char *tmp, *needle, *nail; if((tmp =getenv("ARMCI_HOSTNAME_REPLACE"))){ needle = strdup(tmp); if(needle== NULL) return NULL; nail = strchr(needle,'/'); if(nail == NULL) return NULL; *nail = '\0'; nail++; if(nail == (needle+1)){ char* tmp1 = calloc(strlen(host)+strlen(nail)+1,1); if(tmp1 == NULL) return NULL; strcpy(tmp1,host); strcat(tmp1,nail); return tmp1; } return substr_replace(host,needle,nail); } else return NULL; } static void print_clus_info() { int i; if(PRINT_CLUSTER_INFO && armci_nclus > 1 && armci_me ==0){ #if defined(DATA_SERVER) || defined(SERVER_THREAD) || defined(PORTALS) printf("ARMCI configured for %d cluster nodes. Network protocol is '%s'.\n", armci_nclus, network_protocol); #else printf("ARMCI configured for %d cluster nodes\n", armci_nclus); #endif fflush(stdout); } if(armci_me==0 && DEBUG) for(i=0;i= MAX_HOSTNAME) armci_die("armci: hostname too long",strlen(tmp)); strcpy(name,tmp); printf("%d using %s hostname\n",armci_me, name); fflush(stdout); } len = strlen(name); #if ARMCI_ENABLE_GPC_CALLS /*a simple way to run as many servers as compute processes*/ enval = getenv("ARMCI_NSERV_EQ_NPROC"); if(enval != NULL){ sprintf(name+len,"n%d",getpid()); len = strlen(name); printf("\n%s\n",name); } #endif #ifdef HOSTNAME_TRUNCATE { /* in some cases (e.g.,SP) when name is used to determine * cluster structure but not to establish communication * we can truncate hostnames to save memory */ int i; limit = HOSTNAME_LEN-1; for(i=0; i",i+1); } if(len>limit)name[limit]='\0'; len =limit; } #else if(len >= HOSTNAME_LEN-1) armci_die("armci: gethostname overrun name string length",len); #endif #ifdef NO_SHMEM if(armci_enable_alpha_hack()) { name[len]='0'+armci_me; name[len+1]='\0'; len++; } #endif if(DEBUG) fprintf(stderr,"%d: %s len=%d\n",armci_me, name,(int)strlen(name)); #ifdef CLUSTER merged = merge_names(name); /* create hostname list */ process_hostlist(merged); /* compute cluster info */ free(merged); #else process_hostlist(name); /* compute cluster info */ #endif #if (defined(SYSV) || defined(WIN32) || defined(MMAP)) && !defined(HITACHI) armci_set_shmem_limit_per_node(armci_clus_info[0].nslave); #endif armci_master = armci_clus_info[armci_clus_me].master; #ifdef NO_SHMEM if(armci_enable_alpha_hack()) { int i; for(i=0;i= armci_nproc) armci_die("armci_clus_id: out of range",p); if (p < armci_clus_first){ from = 0; to = armci_clus_me; } else { from = armci_clus_me; to = armci_nclus; } found = to - 1; /* Binary search algorithm to be implemented, * sequential search for now */ for(c = from; c < to - 1; c++) if (p < armci_clus_info[c+1].master) { found = c; break; } return found; } /*\ return number of processes in the domain represented by id; id<0 means my node \*/ int armci_domain_nprocs(armci_domain_t domain, int id) { if(id >= armci_nclus) armci_die2("armci domain error",id,armci_nclus); /* This is an error condition */ if(id < 0) { fprintf(stderr,"[%d] Returned domain is invalid\n", armci_me); id = armci_clus_me; } return armci_clus_info[id].nslave; } /* return number of nodes in diven domain */ int armci_domain_count(armci_domain_t domain) { return armci_nclus; } /* return domain ID of the specified process */ int armci_domain_id(armci_domain_t domain, int glob_proc_id) { int id = glob_proc_id; if(id <0 || id >= armci_nproc) { armci_die2("armci domain error",id,armci_nproc); } return armci_clus_id(glob_proc_id); } /* return global ID of a process loc_proc_id in domain identified by id * armci_domain_nproc(id)< loc_proc_id >=0 */ int armci_domain_glob_proc_id(armci_domain_t domain, int id, int loc_proc_id) { if(id <0 || id >= armci_nclus) armci_die2("armci domain error",id,armci_nclus); if(loc_proc_id<0 || loc_proc_id>= armci_clus_info[id].nslave) armci_die2("armci domain proc error", loc_proc_id,armci_clus_info[id].nslave); return (armci_clus_info[id].master + loc_proc_id); } /* return ID of domain that the calling process belongs to */ int armci_domain_my_id(armci_domain_t domain) { return armci_clus_me; } /* Check whether the oricess is in the same domain */ int armci_domain_same_id (armci_domain_t domain, int proc) { int rc = SAMECLUSNODE(proc); return rc; } ga-5-3/armci/src/common/timer.c0000640005473000001440000000176511475335453015255 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #ifdef WIN32 static double msec; /* reference for timer */ # include #else #if HAVE_SYS_TYPES_H # include #endif #if HAVE SYS_TIME_H # include #endif static unsigned firstsec=0; /* Reference for timer */ static unsigned firstusec=0; /* Reference for timer */ #endif static int first_call=1; double armci_timer() { #ifdef WIN32 double t0 = (double)GetCurrentTime(); if(first_call){ first_call=0; msec=t0; return 0.0; } t0 -=msec; if(t0<0.0)t0 += (double)0xffffffff; return 0.01*t0; #else double low, high; struct timeval tp; struct timezone tzp; (void) gettimeofday(&tp,&tzp); if (first_call) { firstsec = tp.tv_sec; firstusec = tp.tv_usec; first_call = 0; } low = (double)(tp.tv_usec>>1) - (double) (firstusec>>1); high = (double) (tp.tv_sec - firstsec); return high + 1.0e-6*(low+low); #endif } ga-5-3/armci/src/common/regions.c0000640005473000001440000004220211444464075015571 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: regions.c,v 1.14.2.3 2007-10-05 16:51:51 manoj Exp $ interface to keep track of memory regions accross the cluster */ /* * armci_region_init - allocates list of regions, initialization * armci_region_register_shm - registers shared memory on the current node * armci_region_register_loc - registers local memory * armci_region_clus_record - stores info on pinned region on a given cluster node * armci_region_clus_found - returns 1/0 if specified memory is registered * armci_region_loc_found - same for local memory * armci_region_loc_both_found - returns 1 if local and remote are found, otherwise 0 * */ /*7/7/06 * REGIONS REQUIRE MEMHDL was for all networks like via, infiniband, etc.. * which had a handle associated with remote/local memory required for * rdma. Coincidentally all these networks also used a server thread. * so server_regions were allocated and enabled when REGIONS_REQUIRE_MEMHDL * was defined. * With Catamount, we require portals memory descriptors to be stored * there is no server but we still need the server_regions to post match all * md to accept all incomming requests */ #include "armcip.h" #if HAVE_STDLIB_H # include #endif #if HAVE_STDIO_H # include #endif #include "copy.h" /*this should match similar def in portals.c vapi.c and openib.c */ #ifdef PORTALS # define MAX_REGIONS 24 #else # define MAX_REGIONS 8 #endif typedef struct { void *start; void *end; #ifdef REGIONS_REQUIRE_MEMHDL ARMCI_MEMHDL_T memhdl; #endif } armci_region_t; typedef struct { long n; armci_region_t list[MAX_REGIONS]; } armci_reglist_t; static int allow_pin=0; static armci_reglist_t *clus_regions; /* cluster shared/remote memory */ #ifdef REGIONS_REQUIRE_MEMHDL static armci_reglist_t *serv_regions; /* server regions */ #endif static armci_reglist_t loc_regions_arr; /* local memory */ static void *needs_pin_shmptr=NULL, *needs_pin_ptr=NULL; static size_t needs_pin_shmsize=0, needs_pin_size=0; #ifdef REGIONS_REQUIRE_MEMHDL extern int armci_pin_contig_hndl(void *ptr, size_t bytes, ARMCI_MEMHDL_T *memhdl); extern int armci_server_pin_contig(void *ptr, size_t bytes, ARMCI_MEMHDL_T *memhdl); #else extern int armci_pin_contig1(void *ptr, size_t bytes); #endif static void **exch_list=(void**)0; static char exch_loc[MAX_REGIONS]; static char exch_rem[MAX_REGIONS]; void armci_serv_register_req(void *start,long bytes, ARMCI_MEMHDL_T *reg_mem); static int armci_region_record(void *start, void *end, armci_reglist_t *reg) { int cur=reg->n; #ifdef DEBUG_ int i; for(i=0; in; i++) if(reg->start >= start && reg->end < start) armci_die("armci_region_record: already recorded",i); #endif if(reg->n >= MAX_REGIONS) return 0; (reg->list+cur)->start = start; (reg->list+cur)->end = end; reg->n++; return 1; } static void armci_region_register(void *start, long size, armci_reglist_t *reg) { int regid; ARMCI_PR_DBG("enter",0); if(reg->n >= MAX_REGIONS) return; if(armci_nclus<=1)return; regid = reg->n; #ifdef REGIONS_REQUIRE_MEMHDL # if defined(PORTALS) /*we really shouldn't have network specific ifdef's here but this is an * exception to avoid significant code change in the portals layer * ARMCI portals layer maintains a list of memory descriptors for each * region allocated. It uses them in a round robin fashion. We store it * in the memhdl to identify which memory region the memory used by a * communication call corresponds to. */ (reg->list+(regid))->memhdl.regid=regid; # endif if(!armci_pin_contig_hndl(start, size, &((reg->list+reg->n)->memhdl))){ printf("%d pin failed %p bytes=%ld\n",armci_me,start,size); fflush(stdout); return; } #else if(!armci_pin_contig1(start, size)){ printf("%d pin failed %p bytes=%ld\n",armci_me,start,size); fflush(stdout); return; } #endif (void) armci_region_record(start,((char*)start)+size,reg); } void armci_region_register_shm(void *start, long size) { armci_reglist_t *reg = clus_regions+armci_clus_me; if(allow_pin) armci_region_register(start, size, clus_regions+armci_clus_me); else{ needs_pin_shmptr = start; needs_pin_shmsize= size; } #ifdef PORTALS /* we mark the region as local region so that portals layer uses * the md from memhdl instead of any region list*/ (reg->list+(reg->n-1))->memhdl.islocal=0; #endif #if 0 if(allow_pin){ printf("\n%d:%d registering shm %p bytes=%ld\n",armci_me,allow_pin,start,size); fflush(stdout); } #endif } void armci_region_register_loc(void *start, long size) { armci_reglist_t *reg = &loc_regions_arr; if(allow_pin)armci_region_register(start, size, &loc_regions_arr); else{ needs_pin_ptr = start; needs_pin_size= size; } #ifdef PORTALS { extern int _armci_malloc_local_region; if(_armci_malloc_local_region){ (reg->list+(reg->n-1))->memhdl.islocal=1; _armci_malloc_local_region=0; } else (reg->list+(reg->n-1))->memhdl.islocal=0; } #endif #ifdef DEBUG_ if(allow_pin){ printf("\n%d:%d registered local %p bytes=%ld\n",armci_me,allow_pin,start,size); fflush(stdout); } #endif } void armci_region_clus_record(int node, void *start, long size) { if(node > armci_nclus || node <0 ) armci_die("armci_region_remote: bad node ",node); (void)armci_region_record(start,((char*)start)+size,clus_regions+node); } void armci_region_init() { ARMCI_PR_DBG("enter",0); allow_pin =1; clus_regions=(armci_reglist_t*)calloc(armci_nclus,sizeof(armci_reglist_t)); if(!clus_regions)armci_die("armci_region_init: calloc failed",armci_nclus); #ifdef REGIONS_REQUIRE_MEMHDL serv_regions=(armci_reglist_t*)calloc(armci_nclus,sizeof(armci_reglist_t)); if(!serv_regions)armci_die("armci_region_init: calloc failed",armci_nclus); #endif exch_list = (void**)calloc(2*armci_nclus, sizeof(void*)); if(!exch_list) armci_die("armci_region_init: calloc 2 failed",armci_nclus); bzero(exch_loc,sizeof(exch_loc)); bzero(exch_rem,sizeof(exch_rem)); if(needs_pin_ptr) armci_region_register_loc(needs_pin_ptr,needs_pin_size); if(needs_pin_shmptr) armci_region_register_shm(needs_pin_shmptr,needs_pin_shmsize); ARMCI_PR_DBG("exit",0); } void armci_region_destroy() { armci_reglist_t *reg = &loc_regions_arr; int i; #ifdef REGIONS_REQUIRE_MEMHDL ARMCI_MEMHDL_T *loc_memhdl; #endif if(!allow_pin) return; for(i=0; in; i++){ #ifdef REGIONS_REQUIRE_MEMHDL loc_memhdl=&((reg->list+i)->memhdl); armci_network_client_deregister_memory(loc_memhdl); #endif } reg=clus_regions+armci_clus_me; for(i=0; in; i++){ #ifdef REGIONS_REQUIRE_MEMHDL loc_memhdl=&((reg->list+i)->memhdl); armci_network_client_deregister_memory(loc_memhdl); #endif } } void armci_server_region_destroy() { armci_reglist_t *reg; int i; #ifdef REGIONS_REQUIRE_MEMHDL ARMCI_MEMHDL_T *loc_memhdl; ARMCI_PR_DBG("enter",0); reg=serv_regions+armci_clus_me; for(i=0; in; i++){ loc_memhdl=&((reg->list+i)->memhdl); armci_network_server_deregister_memory(loc_memhdl); } ARMCI_PR_DBG("exit",0); #endif } int armci_region_clus_found(int node, void *start, int size) { armci_reglist_t *reg=clus_regions+node; int i,found=-1; if(!allow_pin) return 0; if(node > armci_nclus || node <0 ) armci_die("armci_region_clus_found: bad node ",node); for(i=0; in; i++) if((reg->list+i)->start <= start && (reg->list+i)->end > start){ found=i; break; } return(found); } int armci_region_loc_found(void *start, int size) { armci_reglist_t *reg = &loc_regions_arr; int i,found=-1; ARMCI_PR_DBG("enter",0); if(!allow_pin) return 0; for(i=0; in; i++) if((reg->list+i)->start <= start && (reg->list+i)->end > start){ found=i; break; } #ifdef DEBUG if(found){ printf("%d: found loc %d n=%ld (%p,%p) %p\n",armci_me,found,reg->n, (reg->list)->start,(reg->list)->end, start); fflush(stdout); } #endif ARMCI_PR_DBG("exit",0); return(found); } #ifdef REGIONS_REQUIRE_MEMHDL int armci_region_both_found_hndl(void *loc, void *rem, int size, int node, ARMCI_MEMHDL_T **loc_memhdl,ARMCI_MEMHDL_T **rem_memhdl) { armci_reglist_t *reg = &loc_regions_arr; int i,found=0; if(!allow_pin) return 0; /* first scan for local */ for(i=0; in; i++){ if((reg->list+i)->start <= loc && (reg->list+i)->end > loc){ #if 0 printf("\n%d:loc found %d %p\n",armci_me,i,loc); #endif found=1; break; } #if 0 else { printf("\n%d: loc ptr=%p st=%p end=%p size=%d\n",armci_me,loc, (reg->list+i)->start,(reg->list+i)->end,size); fflush(stdout); } #endif } if(!found){ /* might be local shared */ reg=clus_regions+armci_clus_me; for(i=0; in; i++){ if((reg->list+i)->start <= loc && (reg->list+i)->end > loc){ found=1; break; } #if 0 else { printf("\n%d:clus ptr=%p st=%p end=%p size=%d\n",armci_me,loc, (reg->list+i)->start,(reg->list+i)->end,size); fflush(stdout); } #endif } } #ifdef PORTALS if(found!=1){ *loc_memhdl=NULL; found=1; } #else if(!found) return 0; #endif else {*loc_memhdl=&((reg->list+i)->memhdl);} /* now check remote shared */ reg=serv_regions+node; for(i=0; in; i++){ if((reg->list+i)->start <= rem && (reg->list+i)->end > rem){ #if 0 printf("\n%d: serv found %d %p %p\n",armci_me,i,rem,(reg->list+i)->start); #endif found=2;break; } #if 0 else { printf("\n%d: serv ptr=%p st=%p end=%p size=%d nd=%d\n",armci_me,rem, (reg->list+i)->start,(reg->list+i)->end,size,node); fflush(stdout); } #endif } if(0){ if(found==2){printf("%d: found both %d %p\n", armci_me,node,*loc_memhdl); fflush(stdout); } } if(found==2){*rem_memhdl=&((reg->list+i)->memhdl); return 1;} else return 0; } int armci_region_remote_found_hndl(void *rem,int size, int node, ARMCI_MEMHDL_T **remhdl) { armci_reglist_t *reg = serv_regions+node; int i,found=0; for(i=0; in; i++) if((reg->list+i)->start <= rem && (reg->list+i)->end > rem){ found=1;break; } if(found==1){*remhdl=&((reg->list+i)->memhdl); return 1;} else return 0; } int get_armci_region_local_hndl(void *loc, int node,ARMCI_MEMHDL_T **loc_memhdl) { armci_reglist_t *reg = &loc_regions_arr; int i, found = 0; if(!allow_pin) {printf("inside get_armci_region_local_hndl : case allow_pin = 0\n"); return 0; } if(!found){ reg = serv_regions+armci_clus_me; for(i=0; in; i++){ if((reg->list+i)->start <= loc && (reg->list+i)->end >loc){ found =1; break; } #if 0 else { printf("\n%d: serv ptr=%p st=%p end=%p nd=%d nreg=%d\n",armci_me,loc, (reg->list+i)->start,(reg->list+i)->end,node,reg->n); fflush(stdout); } #endif } } if(found == 1){ *loc_memhdl = &((reg->list+i)->memhdl); if(0){ printf("%d(s) : found local %p\n",armci_me,*loc_memhdl); fflush(stdout); } return 1; } else return 0; } int armci_region_serv_found(int node,void *start,int size) { armci_reglist_t *reg=serv_regions+node; int i,found=-1; if(!allow_pin) return 0; if(node > armci_nclus || node <0 ) armci_die("armci_region_serv_found: bad node ",node); for(i=0; in; i++) if((reg->list+i)->start <= start && (reg->list+i)->end > start){found=i; break;} return(found); } #endif int armci_region_both_found(void *loc, void *rem, int size, int node) { armci_reglist_t *reg = &loc_regions_arr; int i,found=0; if(!allow_pin) return 0; /* first scan for local */ for(i=0; in; i++) if((reg->list+i)->start <= loc && (reg->list+i)->end > loc){found=1; break;} if(!found){ /* might be local shared */ reg=clus_regions+armci_clus_me; for(i=0; in; i++) if((reg->list+i)->start <= loc && (reg->list+i)->end > loc){found=1; break;} } if(!found) return 0; /* now check remote shared */ reg=clus_regions+node; for(i=0; in; i++) if((reg->list+i)->start <= rem && (reg->list+i)->end > rem){found=2;break;} #if 0 if(found==2){printf("%d: found both %d\n",armci_me,node); fflush(stdout); } #endif if(found==2) return 1; else return 0; } void armci_region_exchange(void *start, long size) { int found=0, i; armci_region_t *reg=0; #ifdef REGIONS_REQUIRE_MEMHDL ARMCI_MEMHDL_T *hdlarr; hdlarr = calloc(armci_nclus,sizeof(ARMCI_MEMHDL_T)); #endif if(!allow_pin)return; if(armci_nclus<=1)return; found=armci_region_clus_found(armci_clus_me, start,size); if(found>-1){ if(!exch_rem[found]){ reg = (clus_regions+armci_clus_me)->list+found; exch_rem[found]=1; } }else{ found= armci_region_loc_found(start,size); if(found>-1){ if(!exch_loc[found]){ reg = (&loc_regions_arr)->list+found; exch_loc[found]=1; } } } bzero(exch_list,2*armci_nclus*sizeof(void *)); if( reg && (armci_me == armci_master)){ exch_list[2*armci_clus_me] = reg->start; exch_list[2*armci_clus_me+1] = reg->end; #ifdef REGIONS_REQUIRE_MEMHDL armci_copy(®->memhdl,&hdlarr[armci_clus_me],sizeof(ARMCI_MEMHDL_T)); #endif } /* exchange info on new regions with other nodes */ armci_exchange_address(exch_list,2*armci_nclus); #ifdef REGIONS_REQUIRE_MEMHDL i = armci_nclus*sizeof(ARMCI_MEMHDL_T)/sizeof(int); armci_msg_gop_scope(SCOPE_ALL,hdlarr,i,"+",ARMCI_INT); #endif for(i=0; in); fflush(stdout); #endif #ifdef REGIONS_REQUIRE_MEMHDL armci_copy(&hdlarr[i],&(r->list+r->n)->memhdl,sizeof(ARMCI_MEMHDL_T)); #endif armci_region_record(exch_list[2*i],exch_list[2*i+1], r); } } } /*\ * for server thread to know which region is what in cases where there is one * process per node \*/ void armci_global_region_exchange(void *start, long size) { #ifdef REGIONS_REQUIRE_MEMHDL ARMCI_MEMHDL_T *hdlarr; hdlarr = calloc(armci_nclus,sizeof(ARMCI_MEMHDL_T)); #endif if(!allow_pin)return; if(armci_nclus<=1)return; armci_region_exchange(start,size); #ifdef REGIONS_REQUIRE_MEMHDL { int foundclus=0, foundserv=0, i,loc=0; armci_reglist_t *reglist=NULL,*clreglist=NULL; armci_region_t *reg=NULL; foundclus=armci_region_clus_found(armci_clus_me, start,size); foundserv=armci_region_serv_found(armci_clus_me, start,size); if(foundclus==-1){ foundclus = armci_region_loc_found(start,size); loc=1; } if(foundclus!=-1 && foundserv==-1){ reglist = (serv_regions+armci_clus_me); if(loc) clreglist = &(loc_regions_arr); else clreglist = (clus_regions+armci_clus_me); #if defined(DATA_SERVER) || defined(PORTALS) # if defined(PORTALS) ((reglist->list+reglist->n)->memhdl).regid=(reglist->n); # endif armci_serv_register_req((clreglist->list+foundclus)->start,((char *)(clreglist->list+foundclus)->end-(char *)((clreglist->list+foundclus)->start)),&((reglist->list+reglist->n)->memhdl)); #endif (void)armci_region_record((clreglist->list+foundclus)->start,(clreglist->list+foundclus)->end,reglist); #ifdef LAPI_RDMA armci_copy(&(clreglist->list+foundclus)->memhdl, &(reglist->list+foundclus)->memhdl, sizeof(ARMCI_MEMHDL_T)); #endif #if DEBUG printf("\n%d:serv recording st=%p end=%p sz=%d from %d n=%d sz=%d\n",armci_me,(clreglist->list+foundclus)->start,(clreglist->list+foundclus)->end,(clreglist->list+foundclus)->end-(clreglist->list+foundclus)->start,armci_clus_me,reglist->n,sizeof(ARMCI_MEMHDL_T));fflush(stdout); #endif foundserv=armci_region_serv_found(armci_clus_me, start,size); reg = (serv_regions+armci_clus_me)->list+foundserv; } if(reg) armci_copy(®->memhdl,&hdlarr[armci_clus_me],sizeof(ARMCI_MEMHDL_T)); i = armci_nclus*sizeof(ARMCI_MEMHDL_T)/sizeof(int); armci_msg_gop_scope(SCOPE_ALL,hdlarr,i,"+",ARMCI_INT); for(i=0; ilist+r->n)->start){ #if 0 printf("\n%d:serv recording %p from %d n=%d \n",armci_me,(rc->list+r->n)->start,i,r->n);fflush(stdout); #endif armci_copy(&hdlarr[i],&(r->list+r->n)->memhdl,sizeof(ARMCI_MEMHDL_T)); armci_region_record((rc->list+r->n)->start,(rc->list+r->n)->end,r); } } } #endif } ga-5-3/armci/src/locks/0000750005473000001440000000000012275260540013573 5ustar d3n000usersga-5-3/armci/src/locks/locks.c0000640005473000001440000002212112124235234015044 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: locks.c,v 1.15.6.1 2006-12-14 13:24:36 manoj Exp $ */ #define _LOCKS_C_ #include "armcip.h" #include "locks.h" #if HAVE_UNISTD_H # include #endif #if HAVE_STDIO_H # include #endif PAD_LOCK_T *_armci_int_mutexes; #if !defined(armci_die) extern void armci_die(char*,int); #endif #if defined(SPINLOCK) || defined(PMUTEX) || defined(PSPIN) void **ptr_arr; #ifdef SGIALTIX void CreateInitLocks(int num_locks, lockset_t *plockid) { int locks_per_proc, size; /* locks per process in the SMP node */ locks_per_proc = num_locks/armci_clus_info[armci_clus_me].nslave + 1; locks_per_proc = num_locks; /* this is am altix hack and no clue why this is works */ size=locks_per_proc*sizeof(PAD_LOCK_T); ptr_arr = (void**)malloc(armci_nproc*sizeof(void*)); PARMCI_Malloc(ptr_arr, size); _armci_int_mutexes = (PAD_LOCK_T*) ptr_arr; bzero((char*)ptr_arr[armci_me],size); } void DeleteLocks(lockset_t lockid) { ptr_arr = (void**)_armci_int_mutexes; PARMCI_Free(ptr_arr[armci_me]); _armci_int_mutexes = (PAD_LOCK_T*)0; } #else void CreateInitLocks(int num_locks, lockset_t *plockid) { int locks_per_proc, size; #ifdef BGML fprintf(stderr,"createinitlocks\n"); #endif ptr_arr = (void**)malloc(armci_nproc*sizeof(void*)); locks_per_proc = (num_locks*armci_nclus)/armci_nproc + 1; size=locks_per_proc*sizeof(PAD_LOCK_T); PARMCI_Malloc(ptr_arr, size); _armci_int_mutexes = (PAD_LOCK_T*) ptr_arr[armci_master]; if(!_armci_int_mutexes) armci_die("Failed to create spinlocks",size); #ifdef PMUTEX if(armci_me == armci_master) { int i; pthread_mutexattr_t pshared; if(pthread_mutexattr_init(&pshared)) armci_die("armci_allocate_locks: could not init mutex attr",0); # ifndef LINUX if(pthread_mutexattr_setpshared(&pshared,PTHREAD_PROCESS_SHARED)) armci_die("armci_allocate_locks: could not set PROCESS_SHARED",0); # endif for(i=0; i< locks_per_proc*armci_clus_info[armci_clus_me].nslave; i++){ if(pthread_mutex_init(_armci_int_mutexes+i,&pshared)) armci_die("armci_allocate_locks: could not init mutex",i); } } #elif defined(PSPIN) if(armci_me == armci_master) { for(i=0; i< locks_per_proc*armci_clus_info[armci_clus_me].nslave; i++){ if(pthread_spin_init(_armci_int_mutexes+i,PTHREAD_PROCESS_SHARED)) armci_die("armci_allocate_locks: could not init mutex",i); } } #else bzero((char*)ptr_arr[armci_me],size); #endif } void InitLocks(int num_locks, lockset_t lockid) { /* what are you doing here ? All processes should've called CreateInitLocks(). Check preprocessor directtives and see lock allocation in armci_init */ armci_die("InitLocks(): what are you doing here ?",armci_me); } void DeleteLocks(lockset_t lockid) { _armci_int_mutexes = (PAD_LOCK_T*)0; } #endif /********************* all SGI systems ****************/ #elif defined(SGI) #define FILE_LEN 200 lockset_t lockset; static char arena_name[FILE_LEN]; usptr_t *arena_ptr; static int avail =0; extern char *getenv(const char *); void CreateInitLocks(int num_locks, lockset_t *lockid) { int i; char *tmp; if(num_locks > NUM_LOCKS) armci_die("To many locks requested", num_locks); lockset.id = (int)getpid(); if (!(tmp = getenv("ARENA_DIR"))) tmp = "/tmp"; sprintf(arena_name,"%s/armci_arena%d.%ld", tmp,armci_clus_me,lockset.id); (void) usconfig(CONF_ARENATYPE, US_GENERAL); (void) usconfig(CONF_INITUSERS, (unsigned int) armci_clus_info[armci_clus_me].nslave+1); /* +1 for server */ arena_ptr = usinit(arena_name); if(!arena_ptr) armci_die("Failed to Create Arena", 0); for(i=0; i #include #include #include #include #include #define FILE_LEN 200 lock_t *lock_array; static char file_name[FILE_LEN]; static int fd=-1; static unsigned shmem_size=-1; void CreateInitLocks(int num_locks, lockset_t *lockid) { int i; if(num_locks > NUM_LOCKS) armci_die("To many locks requested", num_locks); *lockid = (int)getpid(); sprintf(file_name,"/tmp/ga.locks.%ld", *lockid); if ( (fd = open(file_name, O_RDWR|O_CREAT, 0666)) < 0 ) armci_die("CreateInitLocks: failed to open temporary file",0); shmem_size = (NUM_LOCKS)*sizeof(lock_t); lock_array = (lock_t*) mmap((caddr_t) 0, shmem_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|CNX_MAP_SEMAPHORE|MAP_SHARED, fd, 0); if(((unsigned)lock_array)%16)armci_die("CreateInitLocks: not aligned",0); for (i=0; i NUM_LOCKS) armci_die("To many locks requested", num_locks); sprintf(file_name,"/tmp/ga.locks.%ld", lockid); if ( (fd = open(file_name, O_RDWR|O_CREAT, 0666)) < 0 ) armci_die("InitLocks: failed to open temporary file",0); shmem_size = (NUM_LOCKS)*sizeof(lock_t); lock_array = (lock_t*) mmap((caddr_t) 0, shmem_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|CNX_MAP_SEMAPHORE|MAP_SHARED, fd, 0); if(((unsigned)lock_array)%16)armci_die("InitLocks: not aligned",0); } void DeleteLocks(lockset_t lockid) { lock_array = 0; (void)unlink(file_name); /*ignore armci_die code: file might be already gone*/ (void)munmap((char *) shmem_size, 0); } void setlock(unsigned * volatile lp) { volatile unsigned flag; flag = fetch_and_inc32(lp); while(flag){ flag = fetch32(lp); } } void unsetlock(unsigned * volatile lp) { (void)fetch_and_clear32(lp); } #elif defined(WIN32) /****************************** Windows NT ********************************/ #include #include HANDLE mutex_arr[NUM_LOCKS]; static int parent_pid; static int num_alloc_locks=0; void CreateInitLocks(int num_locks, lockset_t *lockid) { if(num_locks > NUM_LOCKS) armci_die("To many locks requested", num_locks); *lockid = parent_pid = _getpid(); InitLocks(num_locks, *lockid); } void InitLocks(int num_locks, lockset_t lockid) { int i; char lock_name[64]; for(i=0;inum_alloc_locks || mutex <0)armci_die("setlock: invalid",mutex); rc =WaitForSingleObject(mutex_arr[mutex],INFINITE); switch(rc) { case WAIT_OBJECT_0: /* OK */ break; case WAIT_ABANDONED: /*abandoned: some process crashed holding mutex? */ armci_die("setlock: mutex abandoned",mutex); default: /* some other problem */ fprintf(stderr,"WaitForSingleObject code=%d\n",rc); armci_die("setlock: failed",mutex); } } void unsetlock(int mutex) { if(mutex >num_alloc_locks || mutex <0)armci_die("unsetlock: invalid",mutex); if(ReleaseMutex(mutex_arr[mutex])==FALSE)armci_die("unsetlock: failed",mutex); } #elif defined(CRAY_YMP) lock_t cri_l[NUM_LOCKS]; #pragma _CRI common cri_l void CreateInitLocks(int num_locks, lockset_t *lockid) { int i; if(num_locks > NUM_LOCKS) armci_die("To many locks requested", num_locks); for(i=0;i #endif #define DEBUG 0 #define MAX_LOCKS 32768 #define SPINMAX 1000 #if defined(LAPI) || defined(GM) # define SERVER_LOCK #endif double _dummy_work_=0.; #ifdef LAPI /*fix to if cmpl handler for a pending unlock runs after destroy*/ int mymutexcount; double _dummy_server_work_=0.; #endif static int num_mutexes=0, *tickets; typedef struct { int mutex; int turn; msg_tag_t tag; } waiting_list_t; /* data structure to store info about blocked (waiting) process for mutex */ static waiting_list_t* blocked=(waiting_list_t*)0; typedef struct { int* token; int* turn; int* tickets; int count; } mutex_entry_t; void** mutex_mem_ar; mutex_entry_t *glob_mutex; int PARMCI_Create_mutexes(int num) { int rc,p, totcount; int *mutex_count; if (num < 0 || num > MAX_LOCKS) return(FAIL); if(num_mutexes) armci_die("mutexes already created",num_mutexes); if(armci_nproc == 1){ num_mutexes=1; return(0); } mutex_count = malloc(sizeof(int)*armci_nproc); dassert(1, mutex_count); /* local memory allocation for mutex arrays*/ mutex_mem_ar = (void*) malloc(armci_nproc*sizeof(void*)); if(!mutex_mem_ar) armci_die("PARMCI_Create_mutexes: malloc failed",0); glob_mutex = (void*)malloc(armci_nproc*sizeof(mutex_entry_t)); if(!glob_mutex){ free(mutex_count); free(mutex_mem_ar); armci_die("PARMCI_Create_mutexes: malloc 2 failed",0); } /* bzero(mutex_count,armci_nproc*sizeof(int));*/ bzero((char*)mutex_count,sizeof(int)*armci_nproc); /* find out how many mutexes everybody allocated */ mutex_count[armci_me]=num; armci_msg_igop(mutex_count, armci_nproc, "+"); for(p=totcount=0; p< armci_nproc; p++)totcount+=mutex_count[p]; tickets = calloc(totcount,sizeof(int)); if(!tickets) { free(glob_mutex); free(mutex_mem_ar); free(mutex_count); return(FAIL2); } /* we need memory for token and turn - 2 ints */ rc = PARMCI_Malloc(mutex_mem_ar,2*num*sizeof(int)); if(rc){ free(glob_mutex); free(mutex_mem_ar); free(tickets); free(mutex_count); return(FAIL3); } if(num)bzero((char*)mutex_mem_ar[armci_me],2*num*sizeof(int)); /* setup global mutex array */ for(p=totcount=0; p< armci_nproc; p++){ glob_mutex[p].token = mutex_mem_ar[p]; glob_mutex[p].turn = glob_mutex[p].token + mutex_count[p]; glob_mutex[p].count = mutex_count[p]; glob_mutex[p].tickets = tickets + totcount; totcount += mutex_count[p]; } num_mutexes= totcount; #ifdef LAPI mymutexcount = num; #endif PARMCI_Barrier(); if(DEBUG) fprintf(stderr,"%d created (%d,%d) mutexes\n",armci_me,num,totcount); free(mutex_count); return(0); } void armci_serv_mutex_create() { int mem = armci_nproc*sizeof(waiting_list_t); blocked = (waiting_list_t*)malloc(mem); if(!blocked) armci_die("armci server:error allocating mutex memory ",0); } void armci_serv_mutex_close() { if(blocked) free(blocked ); blocked = (waiting_list_t*)0; } int PARMCI_Destroy_mutexes() { #ifdef LAPI /*fix to if cmpl handler for a pending unlock runs after destroy*/ int proc, mutex, i,factor=0; #endif if(num_mutexes==0)armci_die("armci_destroy_mutexes: not created",0); if(armci_nproc == 1) return(0); armci_msg_barrier(); #ifdef LAPI /*fix to if cmpl handler for a pending unlock runs after destroy*/ for(proc=0;proc myturn) armci_die2("armci: problem with tickets",myturn,next_in_line); /* apply a linear backoff delay before retrying */ for(i=0; i< SPINMAX * factor; i++) _dummy_work_ += 1.; factor += 1; }while (myturn != next_in_line); glob_mutex[proc].tickets[mutex] = myturn; /* save ticket value */ } static void armci_generic_unlock(int mutex, int proc) { int *mutex_ticket= glob_mutex[proc].turn + mutex; int *newval = glob_mutex[proc].tickets +mutex; int len=sizeof(int); /* update ticket for next process requesting this mutex */ (*newval) ++; /* write new ticket value stored previously in tickets */ PARMCI_Put(newval, mutex_ticket, len, proc); MEM_FENCE; } /*\ Acquire mutex for "proc" * -must be executed in hrecv/AM handler thread * -application thread must use generic_lock routine \*/ int armci_server_lock_mutex(int mutex, int proc, msg_tag_t tag) { int myturn; int *mutex_ticket, next_in_line, len=sizeof(int); int owner = armci_me; if(DEBUG)fprintf(stderr,"SLOCK=%d owner=%d p=%d m=%d\n", armci_me,owner, proc,mutex); mutex_ticket= glob_mutex[owner].turn + mutex; myturn = register_in_mutex_queue(mutex, owner); armci_copy(mutex_ticket, &next_in_line, len); if(next_in_line > myturn) armci_die2("armci-s: problem with tickets",myturn,next_in_line); if(next_in_line != myturn){ if(!blocked)armci_serv_mutex_create(); blocked[proc].mutex = mutex; blocked[proc].turn = myturn; blocked[proc].tag = tag; if(DEBUG) fprintf(stderr,"SLOCK=%d proc=%d blocked (%d,%d)\n", armci_me, proc, next_in_line,myturn); return -1; } else { if(DEBUG) fprintf(stderr,"SLOCK=%d proc=%d sending ticket (%d)\n", armci_me, proc, myturn); /* send ticket to requesting node */ /* GA_SEND_REPLY(tag, &myturn, sizeof(int), proc); */ return (myturn); } } /*\ Release mutex "id" held by proc * called from hrecv/AM handler AND application thread \*/ int armci_server_unlock_mutex(int mutex, int proc, int Ticket, msg_tag_t* ptag) { #define NOBODY -1 int owner = armci_me; int i, p=NOBODY, *mutex_ticket= glob_mutex[owner].turn + mutex; int len=sizeof(int); if(DEBUG) fprintf(stderr,"SUNLOCK=%d node=%d mutex=%d ticket=%d\n", armci_me,proc,mutex,Ticket); Ticket++; armci_copy(&Ticket, mutex_ticket, len); /* if mutex is free then nobody is reqistered in queue */ if(armci_mutex_free(mutex, proc)) return -1; /* search for the next process in queue waiting for this mutex */ for(i=0; i< armci_nproc; i++){ if(!blocked)break; /* not allocated yet - nobody is waiting */ if(DEBUG)fprintf(stderr,"SUNLOCK=%d node=%d list=(%d,%d)\n", armci_me, i, blocked[i].mutex, blocked[i].turn); if((blocked[i].mutex == mutex) && (blocked[i].turn == Ticket)){ p = i; break; } } /* send Ticket to a process waiting for mutex */ if(p != NOBODY){ if(p == armci_me)armci_die("server_unlock: cannot unlock self",0); else { if(DEBUG)fprintf(stderr,"SUNLOCK=%d node=%d unlock ticket=%d go=%d\n", armci_me, proc, Ticket, p); /* GA_SEND_REPLY(blocked[p].tag, &Ticket, sizeof(int), p); */ *ptag = blocked[p].tag; return p; } } return -1; /* nobody is waiting */ } void PARMCI_Lock(int mutex, int proc) { #if defined(SERVER_LOCK) int direct; #endif if(DEBUG)fprintf(stderr,"%d enter lock\n",armci_me); if(armci_nproc == 1) return; if(!num_mutexes) armci_die("armci_lock: create mutexes first",0); if(mutex > glob_mutex[proc].count) armci_die2("armci_lock: mutex not allocated", mutex, glob_mutex[proc].count); # if defined(SERVER_LOCK) direct=SAMECLUSNODE(proc); if(!direct) armci_rem_lock(mutex,proc, glob_mutex[proc].tickets + mutex ); else # endif armci_generic_lock(mutex,proc); if(DEBUG)fprintf(stderr,"%d leave lock\n",armci_me); } void PARMCI_Unlock(int mutex, int proc) { if(DEBUG)fprintf(stderr,"%d enter unlock\n",armci_me); if(armci_nproc == 1) return; if(!num_mutexes) armci_die("armci_lock: create mutexes first",0); if(mutex > glob_mutex[proc].count) armci_die2("armci_lock: mutex not allocated", mutex, glob_mutex[proc].count); # if defined(SERVER_LOCK) if(armci_nclus >1) { if(proc != armci_me) armci_rem_unlock(mutex, proc, glob_mutex[proc].tickets[mutex]); else { int ticket = glob_mutex[proc].tickets[mutex]; msg_tag_t tag; int waiting; waiting = armci_server_unlock_mutex(mutex, proc, ticket, &tag); if(waiting >-1) armci_unlock_waiting_process(tag, waiting, ++ticket); } } else # endif armci_generic_unlock(mutex, proc); if(DEBUG)fprintf(stderr,"%d leave unlock\n",armci_me); } ga-5-3/armci/src/locks/memlock.c0000640005473000001440000003040211633465620015371 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: memlock.c,v 1.24.2.3 2007-08-29 17:32:32 manoj Exp $ */ #include "armcip.h" #include "locks.h" #include "copy.h" #include "memlock.h" #if HAVE_STDIO_H # include #endif #define DEBUG_ 0 #define INVALID_VAL -9999999 #ifdef DATA_SERVER # define CORRECT_PTR #endif static size_t armci_mem_offset=0; /* We start by using table: assign address of local variable set to 1 * On shmem systems, this addres is overwritten by a shared memory location * when memlock array is allocated in armci_init * Therefore, any process within shmem node can reset armci_use_memlock_table * to "not used" when offset changes. Since the variable is in shmem, everybody * on that SMP node will see the change and use the same locking functions */ int init_use_memlock_table=1; int *armci_use_memlock_table=&init_use_memlock_table; static int locked_slot=INVALID_VAL; volatile double armci_dummy_work=0.; void **memlock_table_array; /* constants for cache line alignment */ #ifdef SOLARIS # define CALGN 32 # define LOG_CALGN 5 #else # define CALGN 64 # define LOG_CALGN 6 #endif #define ALIGN_ADDRESS(x) (char*)((((unsigned long)x) >> LOG_CALGN) << LOG_CALGN) #ifdef CRAY_T3E #pragma _CRI cache_align table #endif static memlock_t table[MAX_SLOTS]; #if defined(SGIALTIX) || (defined(CRAY_SHMEM) && defined(CRAY_XT)) #define MAX_SEGS 512 armci_memoffset_t armci_memoffset_table[MAX_SEGS]; static short int seg_count=0; static short int new_seg=0; #endif /*\ simple locking scheme that ignores addresses \*/ void armci_lockmem_(void *pstart, void *pend, int proc) { #ifdef BGML bgml_lockmem(pstart, pend, proc); #else #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif if(DEBUG_){ printf("%d: armci_lockmem_ proc=%d lock=%d\n",armci_me,proc,lock); fflush(stdout); } NATIVE_LOCK(lock,proc); # ifdef LAPI { extern int kevin_ok; kevin_ok=0; } # endif if(DEBUG_){ printf("%d: armci_lockmem_ done\n",armci_me); fflush(stdout); } #endif } void armci_unlockmem_(int proc) { #ifdef BGML bgml_unlockmem(proc); #else #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif NATIVE_UNLOCK(lock,proc); # ifdef LAPI { extern int kevin_ok; kevin_ok=1; } # endif #endif } /*\ idle for a time proportional to factor \*/ void armci_waitsome(int factor) { int i=factor*100000; if(factor <= 1) armci_dummy_work =0.; if(factor < 1) return; while(--i){ armci_dummy_work = armci_dummy_work + 1./(double)i; } } #ifdef SGIALTIX #include #endif /*\ acquire exclusive LOCK to MEMORY area owned by process "proc" * . only one area can be locked at a time by the calling process * . must unlock it with armci_unlockmem \*/ void armci_lockmem(void *start, void *end, int proc) { #ifdef ARMCIX ARMCIX_Lockmem (start, end, proc); #else register void* pstart, *pend; register int slot, avail=0; int turn=0, conflict=0; memlock_t *memlock_table; #if defined(CLUSTER) && !defined(SGIALTIX) int lock = (proc-armci_clus_info[armci_clus_id(proc)].master)%NUM_LOCKS; #else int lock = 0; #endif #ifdef CORRECT_PTR if(! *armci_use_memlock_table){ /* if offset invalid, use dumb locking scheme ignoring addresses */ armci_lockmem_(start, end, proc); return; } # ifndef SGIALTIX /* when processes are attached to a shmem region at different addresses, * addresses written to memlock table must be adjusted to the node master */ if(armci_mem_offset){ start = armci_mem_offset + (char*)start; end = armci_mem_offset + (char*)end; } # endif #endif if(DEBUG_){ printf("%d: calling armci_lockmem for %d range %p -%p\n", armci_me, proc, start,end); fflush(stdout); } memlock_table = (memlock_t*)memlock_table_array[proc]; #ifdef ALIGN_ADDRESS /* align address range on cache line boundary to avoid false sharing */ pstart = ALIGN_ADDRESS(start); pend = CALGN -1 + ALIGN_ADDRESS(end); #else pstart=start; pend =end; #endif #ifdef CRAY_SHMEM { /* adjust according the remote process raw address */ long bytes = (long) ((char*)pend-(char*)pstart); extern void* armci_shmalloc_remote_addr(void *ptr, int proc); pstart = armci_shmalloc_remote_addr(pstart, proc); pend = (char*)pstart + bytes; } #endif #ifdef SGIALTIX if (proc == armci_me) { pstart = shmem_ptr(pstart,armci_me); pend = shmem_ptr(pend,armci_me); } /* In SGI Altix processes are attached to a shmem region at different addresses. Addresses written to memlock table must be adjusted to the node master */ if(ARMCI_Uses_shm()){ int i, seg_id=-1; size_t tile_size,offset; void *start_addr, *end_addr; for(i=0; i=start_addr && pend<=end_addr) {seg_id=i; break;}*/ if(pstart >= start_addr && pstart <= end_addr) {seg_id=i; break;} } if(seg_id==-1) armci_die("armci_lockmem: Invalid segment", seg_id); offset = armci_memoffset_table[seg_id].mem_offset; pstart = ((char*)pstart + offset); pend = ((char*)pend + offset); } #endif while(1){ NATIVE_LOCK(lock,proc); armci_get(memlock_table, table, sizeof(table), proc); /* armci_copy(memlock_table, table, sizeof(table));*/ /* inspect the table */ conflict = 0; avail =-1; for(slot = 0; slot < MAX_SLOTS; slot ++){ /* nonzero starting address means the slot is occupied */ if(table[slot].start == NULL){ /* remember a free slot to store address range */ avail = slot; }else{ /*check for conflict: overlap between stored and current range*/ if( (pstart >= table[slot].start && pstart <= table[slot].end) || (pend >= table[slot].start && pend <= table[slot].end) ){ conflict = 1; break; } /* printf("%d: locking %ld-%ld (%d) conflict\n", armci_me, */ } } if(avail != -1 && !conflict) break; NATIVE_UNLOCK(lock,proc); armci_waitsome( ++turn ); } /* we got the memory lock: enter address into the table */ table[avail].start = pstart; table[avail].end = pend; armci_put(table+avail,memlock_table+avail,sizeof(memlock_t),proc); FENCE_NODE(proc); NATIVE_UNLOCK(lock,proc); locked_slot = avail; #endif /* ! ARMCIX */ } /*\ release lock to the memory area locked by previous call to armci_lockemem \*/ void armci_unlockmem(int proc) { #ifdef ARMCIX ARMCIX_Unlockmem (proc); #else void *null[2] = {NULL,NULL}; memlock_t *memlock_table; #ifdef CORRECT_PTR if(! *armci_use_memlock_table){ /* if offset invalid, use dumb locking scheme ignoring addresses */ armci_unlockmem_(proc); return; } #endif #ifdef DEBUG if(locked_slot == INVALID_VAL) armci_die("armci_unlock: empty",0); if(locked_slot >= MAX_SLOTS || locked_slot <0) armci_die("armci_unlock: corrupted slot?",locked_slot); #endif memlock_table = (memlock_t*)memlock_table_array[proc]; armci_put(null,&memlock_table[locked_slot].start,2*sizeof(void*),proc); #endif /* ! ARMCIX */ } /*\ based on address for set by master, determine correction for * memory addresses set in memlock table * if the correction/offset ever changes stop using memlock table locking \*/ void armci_set_mem_offset(void *ptr) { size_t off; static int first_time=1; volatile void *ref_ptr; /* do not care if memlock not used */ if(! *armci_use_memlock_table) return; if(!ptr) armci_die("armci_set_mem_offset : null ptr",0); ref_ptr = *(void**)ptr; off = (size_t)((char*)ref_ptr - (char*)ptr); if(first_time){ armci_mem_offset =off; first_time =0; if(DEBUG_){ printf("%d memlock offset=%ld ref=%p ptr=%p\n",armci_me, (long)armci_mem_offset, ref_ptr, ptr); fflush(stdout); } }else{ if(armci_mem_offset != off){ *armci_use_memlock_table =0; fprintf(stderr, "%d: WARNING:armci_set_mem_offset: offset changed %ld to %ld\n", armci_me, (long)armci_mem_offset, (long)off); fflush(stdout); } } } #ifdef SGIALTIX /* SGI Altix Stuff */ static void armci_altix_gettilesize(void *ptr, void **ptr_arr, size_t *tile_size) { int i; size_t diff=0; for(i=0; i0) diff = (size_t)((char*)ptr_arr[i]-(char*)ptr_arr[i-1]); if(i>1 && diff!=*tile_size) armci_die("armci_memoffset_table_newentry:Inconsistent tile size", armci_me); *tile_size = diff; } } void armci_memoffset_table_newentry(void *ptr, size_t seg_size) { void **ptr_arr; void *master_addr = NULL; size_t tile_size=0, offset=0; if(!ptr) armci_die("armci_memoffset_table_newentry : null ptr",0); if(seg_count >= MAX_SEGS) /* CHECK: make it dynamic */ armci_die("armci_altix_allocate: Increase MAX_SEGS > 512", armci_me); if(armci_me == armci_master) master_addr = shmem_ptr(ptr, armci_me); armci_msg_brdcst(&master_addr, sizeof(void*), armci_master); ptr_arr = (void**)malloc(armci_nproc*sizeof(void*)); armci_altix_gettilesize(ptr, ptr_arr, &tile_size); offset = (size_t)((char*)master_addr - (char*)ptr_arr[armci_master]); /* enter in memoffset table */ armci_memoffset_table[seg_count].seg_addr = ptr_arr[armci_master]; armci_memoffset_table[seg_count].seg_size = seg_size; armci_memoffset_table[seg_count].tile_size = tile_size; armci_memoffset_table[seg_count].mem_offset = offset; #if DEBUG_ printf("%d: addr=%p seg_size=%ld tile_size=%ld offset=%ld\n", armci_me, ptr_arr[armci_master], seg_size, tile_size, offset); #endif ++seg_count; free(ptr_arr); } #endif #if defined(CRAY_SHMEM) && defined(CRAY_XT) /* CRAY-CRAY_XT stuff */ static void armci_cray_gettilesize(void *ptr, void **ptr_arr, size_t *tile_size) { int i; size_t diff=0; for(i=0; i0) diff = (size_t)((char*)ptr_arr[i]-(char*)ptr_arr[i-1]); if(i>1 && diff!=*tile_size) armci_die("armci_memoffset_table_newentry:Inconsistent tile size", armci_me); *tile_size = diff; } } void armci_memoffset_table_newentry(void *ptr, size_t seg_size) { void **ptr_arr; void *master_addr = NULL; size_t tile_size=0, offset=0; if(!ptr) armci_die("armci_memoffset_table_newentry : null ptr",0); if(seg_count >= MAX_SEGS) /* CHECK: make it dynamic */ armci_die("armci_cary_allocate: Increase MAX_SEGS > 512", armci_me); if(armci_me == armci_master) master_addr = ptr; armci_msg_brdcst(&master_addr, sizeof(void*), armci_master); ptr_arr = (void**)malloc(armci_nproc*sizeof(void*)); armci_cray_gettilesize(ptr, ptr_arr, &tile_size); offset = (size_t)((char*)master_addr - (char*)ptr_arr[armci_master]); /* enter in memoffset table */ armci_memoffset_table[seg_count].seg_addr = ptr_arr[armci_master]; armci_memoffset_table[seg_count].seg_size = seg_size; armci_memoffset_table[seg_count].tile_size = tile_size; armci_memoffset_table[seg_count].mem_offset = offset; #if DEBUG_ printf("%d: addr=%p seg_size=%ld tile_size=%ld offset=%ld\n", armci_me, ptr_arr[armci_master], seg_size, tile_size, offset); #endif ++seg_count; free(ptr_arr); } #endif ga-5-3/armci/src/locks/tas-sx.s0000640005473000001440000000103211444464075015201 0ustar d3n000users set arg1,1*8 set arg2,2*8 set arg3,3*8 set arg4,4*8 text # ts1am_2me(sx, sy, sz) # global ts1am_2me align 4 ts1am_2me: using ts1am_2me,$s33 lds $s35,arg1(,$s34) # Sx : atomic data lds $s36,arg2(,$s34) # Sy : control flag lds $s37,arg3(,$s34) # Sz : pointer ts1am $s35,$s36,$s37 # or $s123,0,$s35 # RVAL = original data; be 0,0(,$s32) ga-5-3/armci/src/locks/semaphores.c0000640005473000001440000000406711701667223016117 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: semaphores.c,v 1.12 2005-03-10 19:11:23 vinodtipparaju Exp $ */ #include "semaphores.h" #if HAVE_STDIO_H # include #endif #if HAVE_UNISTD_H # include #endif int num_sem_alloc=0; void perror(); #ifdef SUN int fprintf(); void fflush(); int semget(),semctl(); #endif #include "armcip.h" struct sembuf sops; int semaphoreID; int SemGet(num_sem) int num_sem; { semaphoreID = semget(IPC_PRIVATE,num_sem, IPC_CREAT | 0600); if(semaphoreID<0){ fprintf(stderr," Semaphore Allocation Failed \nsuggestions to fix the problem: \n"); fprintf(stderr," 1. run ipcs and ipcrm -s commands to clean any semaphore ids\n"); fprintf(stderr," 2. verify if constant SEMMSL defined in file semaphore.h is set correctly for your system\n"); fprintf(stderr," 3. recompile semaphore.c\n"); sleep(1); perror("Error message from failed semget:"); armci_die(" exiting ...", num_sem); } num_sem_alloc = num_sem; return(semaphoreID); } void SemInit(id,value) int id,value; { int i, semid, num_sem; union semun semctl_arg; semctl_arg.val = value; if(id == ALL_SEMS){ semid = 0; num_sem = num_sem_alloc;} else { semid = id; num_sem = 1;} for(i=0; i< num_sem; i++){ if( semctl(semaphoreID, semid, SETVAL,semctl_arg )<0){ perror((char*)0); armci_die("SemInit error",id); } semid++; } } /* release semaphore(s) */ void SemDel() { union semun dummy; /* this is only to avoid compiler whinning about the unitialized variable*/ dummy.val=0; (void) semctl(semaphoreID,0,IPC_RMID,dummy); } void Sem_CreateInitLocks(int num, lockset_t *id) { *id = SemGet(num); SemInit(ALL_SEMS,1); } void Sem_InitLocks(int num, lockset_t id) { semaphoreID = id; num_sem_alloc = num; } void Sem_DeleteLocks(lockset_t id) { union semun dummy; /* this is only to avoid compiler whinning about the unitialized variable*/ dummy.val=0; (void) semctl(id,0,IPC_RMID,dummy); } ga-5-3/armci/src/util/0000750005473000001440000000000012275260540013435 5ustar d3n000usersga-5-3/armci/src/util/threads.c0000640005473000001440000000675511444464075015257 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: threads.c,v 1.1.2.5 2007-08-28 21:29:46 manoj Exp $ */ #if 0 # define PRNDBG3(m,a1,a2,a3) \ fprintf(stderr,"DBG %d: " m,armci_me,a1,a2,a3);fflush(stderr) # define PRNDBG(m) PRNDBG3(m,0,0,0) # define PRNDBG1(m,a1) PRNDBG3(m,a1,0,0) # define PRNDBG2(m,a1,a2) PRNDBG3(m,a1,a2,0) #else # define PRNDBG(m) # define PRNDBG1(m,a1) # define PRNDBG2(m,a1,a2) # define PRNDBG3(m,a1,a2,a3) #endif #if HAVE_STDIO_H # include #endif #include "armcip.h" armci_user_threads_t armci_user_threads; void armci_init_threads() { int i, bytes; char *uval = getenv("ARMCI_MAX_THREADS"); armci_user_threads.max = 1; armci_user_threads.avail = 0; if (uval != NULL) sscanf(uval, "%d", &armci_user_threads.max); if (armci_user_threads.max < 1 || armci_user_threads.max > ARMCI_THREADS_LIMIT) { printf("Error: Only 1-%d threads are supported. ",ARMCI_THREADS_LIMIT); printf("Set ARMCI_MAX_THREADS appropriately\n"); fflush(stdout); armci_die("armci_init_threads: failed", 0); } bytes = sizeof(thread_id_t) * armci_user_threads.max; if ( !(armci_user_threads.ids = (thread_id_t*) malloc(bytes)) ) { armci_die("armci_init_threads: armci_user_threads.ids malloc failed", armci_user_threads.max); } memset(armci_user_threads.ids, 0, bytes); #if 0 /* spinlock has void return value */ if (THREAD_LOCK_INIT(armci_user_threads.lock) || THREAD_LOCK_INIT(armci_user_threads.buf_lock) || THREAD_LOCK_INIT(armci_user_threads.net_lock)) armci_die("armci_init_threads:locks initialization failed", 0); #else THREAD_LOCK_INIT(armci_user_threads.lock); THREAD_LOCK_INIT(armci_user_threads.buf_lock); THREAD_LOCK_INIT(armci_user_threads.net_lock); #endif #if 0 /* using one lock per socket for now, it might be feasible (and usefull) * to use two (one for sending and one for receiving) */ armci_user_threads.sock_locks = malloc(armci_nclus *sizeof(thread_lock_t)); for (i = 0; i < armci_nclus; i++) if (THREAD_LOCK_INIT(armci_user_threads.sock_locks[i])) armci_die("armci_init_threads:sock locks initialization failed", i); #endif } void armci_finalize_threads() { THREAD_LOCK_DESTROY(armci_user_threads.lock); THREAD_LOCK_DESTROY(armci_user_threads.net_lock); THREAD_LOCK_DESTROY(armci_user_threads.buf_lock); free(armci_user_threads.ids); } /* calling armci_thread_idx for every function that accesses thread-private data * might be expensive -- needs optiomization */ INLINE int armci_thread_idx() { int i, n = ARMCI_MIN(armci_user_threads.avail, armci_user_threads.max); thread_id_t id = THREAD_ID_SELF(); for (i = 0; i < n; i++) if (id == armci_user_threads.ids[i]) { /*PRNDBG2("thread id=%ld already registered, idx=%d\n", id, i);*/ return i; } /* see this thread for the first time */ return armci_register_thread(id); } INLINE int armci_register_thread(thread_id_t id) { int i; THREAD_LOCK(armci_user_threads.lock); i = armci_user_threads.avail; armci_user_threads.avail++; THREAD_UNLOCK(armci_user_threads.lock); if (i < armci_user_threads.max) armci_user_threads.ids[i] = id; else armci_die("armci_thread_idx: too many threads, adjust ARMCI_MAX_THREADS", armci_user_threads.avail); PRNDBG2("registered a new thread: idx=%d, id=%ld\n", i, id); return i; } ga-5-3/armci/src/util/armci_cpp0000750005473000001440000002734211444464075015336 0ustar d3n000users#!/usr/bin/env perl # This script is designed to preprocess selected #if defined(), #ifdef # and #ifndef # statements in source code. The syntax for using this # script is # # ./armci_cpp SYMBOL1 SYMBOL2 SYMBOL3 .... SYMBOLN # # where SYMBOL refers to arguments that appear in the #if, #ifdef, # #ifndef statements. This script will process ALL files in the # directory in which it is run. This is done so that symbols defined # in include files can be added to the list of symbols used by the # script to parse the files. The files produced by the parser will have # a .new extension. The parser also produces a fairly large amount of # debugging output to standard IO. This can be ignored. # # An example invocation of armci_cpp is as follows: # # armci_cpp __ia64 LINUX64 LINUX SYSV PTHREADS DATA_SERVER \ # SERVER_THREAD _REENTRANT VAPI ALLOW_PIN PEND_BUFS REF_THREAD_SAFE \ # MPI OPENIB # # Symbols that end in _H and _H_ are handled differently if they # appear in .h files. The code bracketed by these symbols is parsed if # the symbol exists, even though it is using the #ifndef syntax. # # Note that this parser will probably not produce compilable code. There # are a few instances where symbols are defined if a comparative # relation is satisfied (e.g. SYMBOL_A < SYMBOL_B) and this causes some # symbols to be left out of the symbol table and some parts of the code # to be incorrectly parsed. The parser will, however, give an rough idea # of what post process code will look like. # $numargs = @ARGV; if ($numargs == 0) { print "No environment settings specified\n"; print "Usage: ./armci_cpp SYMBOL1 SYMBOL2 SYMBOL3 .... SYMBOLN\n"; exit(0); } # Get environment settings and use these to file the symbol list %arg_symbols = {}; for ($i=0; $i<$numargs; $i++) { print "ARGV[$i]: $ARGV[$i]\n"; $arg_symbols{$ARGV[$i]} = 1; } # Get a list of all files in the directory opendir(MYDIR,"./"); @tfiles = readdir(MYDIR); closedir(MYDIR); $num_files = @tfiles; # Scan the include files for symbols for ($ifile=0; $ifile<$num_files; $ifile++) { if ($tfiles[$ifile] =~ /\.h$/ || $tfiles[$ifile] =~ /\.c$/) { $level = 0; %symbols = {}; %symbols = %arg_symbols; %header_symbols = {}; # Initialize file variable @state = (); $state[0] = 1; @save_cpp = (); $save_cpp[0] = 0; @once_true = (); $once_true[0] = 1; @parse_else = (); $parse_else[0] = 0; @ignore = (); $ignore[0] = 0; $newfile = ""; $continuation_cnt = 0; # $file_level = 0; @parsing_header = (); $parsing_header[0] = 0; # &parse_file($tfiles[$ifile]); # print "PRINTING NEWFILE:\n$newfile\n"; $filename = $tfiles[$ifile]; $filename .= "\.new"; open (NEW_HEADER,">$filename"); print NEW_HEADER ("$newfile"); close(NEW_HEADER); # foreach $symbol (keys %header_symbols) { print "(header symbols) \($symbol\):$header_symbols{$symbol}\n"; } foreach $symbol (keys %symbols) { print "(symbols) \($symbol\):$symbols{$symbol}\n"; } } } # Subroutine to reduce string to evaluatable expression sub reduce_expr { if ($state[$level] == 1) { print "Expression1: \($expr\)\n"; } $expr =~ s/\/\*.*\*\///g; $expr =~ s/undefined/\!/g; $expr =~ s/defined//g; if ($state[$level] == 1) { print "Expression2: \($expr\)\n"; } foreach $symbol (keys %header_symbols) { if ($symbol =~ /^\s*[a-zA-Z0-9\_]*\s*$/) { if ($expr =~ /[\s\!\(\|\&]+$symbol[\s\)\|\&]+/ || $expr =~ /\s+$symbol$/ || $expr =~ /$symbol $/ || $expr =~ /^$symbol$/) { print "Matching header_symbol: $symbol\n"; $expr =~ s/$symbol/1/; } } } foreach $symbol (keys %symbols) { if ($symbol =~ /ARMCI_STAMP/ ) { print "Found ARMCI_STAMP: \($symbol\)\n"; } if ($symbol =~ /^\s*[a-zA-Z0-9\_]*\s*$/) { if ($expr =~ /[\s\!\(\|\&]+$symbol[\s\)\|\&]+/ || $expr =~ /\s+$symbol$/ || $expr =~ /$symbol $/ || $expr =~ /^$symbol$/) { print "Matching symbol: $symbol\n"; $expr =~ s/$symbol/1/; } } } if ($state[$level] == 1) { print "Expression3: \($expr\)\n"; } # Set anything that hasn't been recognized to 0 $copy = $expr; # Replace delimiters etc. by blanks $copy =~ s/[&|\(\)]+/ /g; chomp($copy); @strings = (); @strings = split(/\s+/,$copy); # Loop through list of strings and replace anything that isn't a 1 $test_string = ""; for ($j=0; $j<@strings; $j++) { $test_string .= $strings[$j]; $test_string .= " "; if (!($strings[$j] =~ /\s*1\s+/ || $strings[$j] =~ /\s+1\s*/ || $strings[$j] =~ /^1$/)) { $tmp_string = $strings[$j]; if (!($tmp_string =~ /[\s+|\!]/ || $tmp_string =~ /\\/ || $tmp_string eq "")) { $expr =~ s/$tmp_string/0/; } } } # Get rid of continuation characters $expr =~ s/\\//g; if ($state[$level] == 1) { print "Expression4: \($expr\)\n"; } } # Subroutine to get the rest of the expression if a line continuation appears sub get_expr { my($local_expr,$filesize,$iline,@myfile) = @_; $expr = $local_expr; # See if line continues print "Local expr: $local_expr filesize: $filesize iline: $iline\n"; while ($line =~/\\\s*$/ && $iline<$filesize-1) { $iline++; $line = $myfile[$iline]; $expr .= $line; print "Current line: $line\n"; print "Continuation line: $expr\n"; } $continuation_cnt = $iline; # Remove continuation characters $expr =~ s/\\//; } # Subroutine to set parsing parameters sub set_pars_params { $level++; print "Level: $level\n"; if ($expr =~ /0 0/) { print "Bogus expression: $expr\n"; print "Filename: $tfiles[$ifile]\n"; } $chk = eval $expr; if ($chk) { print "Expression $expr : true\n"; } else { print "Expression $expr : false\n"; } if ($chk) { if ($state[$level-1] == 1) { $state[$level] = 1; $save_cpp[$level] = 0; } else { $state[$level] = 0; $save_cpp[$level] = 0; } } else { $state[$level] = 0; $save_cpp[$level] = 0; } $parse_else[$level] = 1; $ignore[$level] = 0; } # Subroutine to parse files sub parse_file($filename) { my ($filename) = @_; my (@file, $filesize, $iline); my ($comment); # my (@state, @save_cpp, @once_true); # my (@parse_else); # Get strings from file; print "Parsing file: $tfiles[$ifile]\n"; open(HEADER, $filename); @file =

; close(HEADER); $filesize = @file; $iline = 0; # Initialize parser contol variables $comment = 0; while ($iline<$filesize) { $line = $file[$iline]; # Check for comments if ($line =~ /\/\*/ && !($line =~/\*\//)) { $comment = 1; } if ($line =~ /\*\// && !($line =~ /\/\*/)) { $comment = 0; } # Check for #if constructs if ($line =~ /^\s*\#\s*if([\s\(])*def(ined)?(.*)/) { $tmp_string = $1; &get_expr($3,$filesize,$iline,@file); $iline = $continuation_cnt; print "ifdef expression: $3\n"; if ($tmp_string =~ /\(*/) { $tmp_string .= $expr; $expr = $tmp_string; } &reduce_expr; &set_pars_params; $chk = eval $expr; if ($chk) { $once_true[$level] = 1; } else { $once_true[$level] = 0; } print "ifdef: state[$level]: $state[$level]\n"; } elsif ($line =~ /^\s*\#\s*if\s+0/) { print "if 0: $line"; $level++; print "Level: $level\n"; $state[$level] = 0; $save_cpp[$level] = 0; $once_true[$level] = 0; $pars_else[$level] = 1; $ignore[$level] = 0; } elsif ($line =~ /^\s*\#\s*if\s+1/) { print "if 1: $line"; $level++; print "Level: $level\n"; if ($state[$level-1] == 1) { $state[$level] = 1; $save_cpp[$level] = 0; } else { $state[$level] = 0; $save_cpp[$level] = 0; } $once_true[$level] = 1; $pars_else[$level] = 1; $ignore[$level] = 0; } elsif ($line =~ /^\s*\#\s*if\s*\!\s*defined(.*)/) { &get_expr($1,$filesize,$iline,@file); $iline = $continuation_cnt; &reduce_expr; $expr = "!\($expr\)"; &set_pars_params; $chk = eval $expr; if ($chk) { $once_true[$level] = 1; } else { $once_true[$level] = 0; } } elsif ($line =~ /^\s*\#\s*if\s+/) { # Some other kind of conditional that will be ignored $level++; if ($state[$level-1] == 1) { $state[$level] = 1; $save_cpp[$level] = 1; $parse_else[$level] = 0; $newfile .= $line; $ignore[$level] = 1; } else { $state[$level] = 0; $save_cpp[$level] = 0; $ignore[$level] = 0; } } elsif ($line =~ /^\s*\#\s*ifndef\s+(.*)/) { # Check for header symbol if ($line =~ /\s+(\S+_H)\s*$/ || $line =~ /\s+(\S+_H_)\s*$/) { if (!defined($header_symbols{$1})) { $level++; print "Level: $level\n"; if ($state[$level-1] == 1) { $state[$level] = 1; $save_cpp[$level] = 1; $once_true[$level] = 1; $newfile .= $line; $header_symbols{$1} = 1; } else { $state[$level] = 0; $save_cpp[$level] = 0; $once_true[$level] = 0; } } else { $level++; $state[$level] = 0; $save_cpp[$level] = 1; $once_true[$level] = 1; } $pars_else[$level] = 1; $ignore[$level] = 0; } else { &get_expr($1,$filesize,$iline,@file); $iline = $continuation_cnt; &reduce_expr; $expr = "!\($expr\)"; &set_pars_params; $chk = eval $expr; if ($chk) { $once_true[$level] = 1; } else { $once_true[$level] = 0; } } } elsif ($line =~ /^\s*\#\s*elif\s+(.*)/ && $ignore[$level]==0) { &get_expr($1,$filesize,$iline,@file); $iline = $continuation_cnt; &reduce_expr; $chk = eval $expr; if ($chk) { if ($once_true[$level] == 0 && $state[$level-1] == 1) { $state[$level] = 1; $once_true[$level] = 1; } else { $state[$level] = 0; } } else { $state[$level] = 0; } } elsif ($line =~ /^\s*\#\s*else/ && $ignore[$level]==0) { if ($once_true[$level] == 0 && $state[$level-1] == 1) { $state[$level] = 1; $once_true[$level] = 1; } else { $state[$level] = 0; } } elsif ($line =~ /^\s*\#\s*endif/) { if ($state[$level] == 1 && $save_cpp[$level] == 1) { $newfile .= $line; } print "endif: $line"; $level--; print "Level: $level\n"; if ($level < 0) { exit(0); } } elsif ($line =~ /^\s*\#\s*define\s+(\S+)\s*(\S*)/) { if ($comment == 0) { $key = $1; $value = $2; $key =~ s/\(.*//; if (($ignore[$level] == 0 && $parsing_header[$file_level] == 1) || $state[$level] == 1) { if ($2 ne "") { $symbols{$key} = $value; print "new symbol key: $key value: $value\n"; } else { $symbols{$key} = 1; print "new symbol key: $key (no value)\n"; } } } if ($state[$level] == 1) { print "new definition: $line\n"; $newfile .= $line; } } elsif ($line =~ /^\s*\#\s*include\s+(\S+)/) { $include_file = $1; # Ignore include if it is a system level header file if (!($include_file =~ /\<.*\>/) && $include_file =~ /\.h\"\s*$/ && $state[$level] == 1) { $newfile .= $line; $include_file =~ s/\"//g; print "Adding contents of $include_file\n"; $level++; $ignore[$level] = 0; $state[$level] = 0; $file_level++; $parsing_header[$file_level] = 1; &parse_file($include_file); $file_level--; $level--; } elsif ( $state[$level] == 1) { $newfile .= $line; } } else { if ($state[$level] == 1) { $newfile .= $line; } } $iline++; } } ga-5-3/armci/src/progress/0000750005473000001440000000000012275260536014331 5ustar d3n000usersga-5-3/armci/src/progress/wait.c0000640005473000001440000000672511622256775015461 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #define EXTERN #include "armcip.h" int PARMCI_Wait(armci_hdl_t* usr_hdl) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int success=0; int direct = SAMECLUSNODE(nb_handle->proc); #ifdef BGML assert(nb_handle->cmpl_info); BGML_Wait(&(nb_handle->count)); return(success); #else if(direct) { return(success); } if(nb_handle) { if(nb_handle->agg_flag) { armci_agg_complete(nb_handle, UNSET); return (success); } } if(nb_handle){ #ifdef ARMCI_NB_WAIT if(nb_handle->tag==0){ ARMCI_NB_WAIT(nb_handle->cmpl_info); return(success); } #if defined(LAPI) || defined(ALLOW_PIN) || defined(ARMCIX) if(nb_handle->tag!=0 && nb_handle->bufid==NB_NONE){ ARMCI_NB_WAIT(nb_handle->cmpl_info); return(success); } #endif #endif #ifdef COMPLETE_HANDLE COMPLETE_HANDLE(nb_handle->bufid,nb_handle->tag,(&success)); #endif } #endif return(success); } /** * * implicit handle * */ static armci_hdl_t armci_nb_handle[ARMCI_MAX_IMPLICIT];/*implicit non-blocking handle*/ static char hdl_flag[ARMCI_MAX_IMPLICIT]; static int impcount=0; armci_hdl_t *armci_set_implicit_handle (int op, int proc) { armci_ihdl_t nbh; int i=impcount%ARMCI_MAX_IMPLICIT; if(hdl_flag[i]=='1') PARMCI_Wait(&armci_nb_handle[i]); nbh = (armci_ihdl_t)&armci_nb_handle[i]; #ifdef BGML nbh->count=0; #endif nbh->tag = GET_NEXT_NBTAG(); nbh->op = op; nbh->proc = proc; nbh->bufid = NB_NONE; nbh->agg_flag = 0; hdl_flag[i]='1'; ++impcount; return &armci_nb_handle[i]; } /* wait for all non-blocking operations to finish */ int PARMCI_WaitAll (void) { #ifdef BGML BGML_WaitAll(); #elif ARMCIX ARMCIX_WaitAll (); #else int i; if(impcount) { for(i=0; iproc==proc) { PARMCI_Wait(&armci_nb_handle[i]); hdl_flag[i]='0'; } } } #endif return 0; } int PARMCI_Test(armci_hdl_t *usr_hdl) { armci_ihdl_t nb_handle = (armci_ihdl_t)usr_hdl; int success=0; #ifdef BGML success=(int)nb_handle->count; #else int direct=SAMECLUSNODE(nb_handle->proc); if(direct)return(success); if(nb_handle) { if(nb_handle->agg_flag) { armci_die("test for aggregate handle not yet implemented\n",0); } } if(nb_handle){ #ifdef ARMCI_NB_TEST if(nb_handle->tag==0){ ARMCI_NB_TEST(nb_handle->cmpl_info,&success); return(success); } #ifdef LAPI if(nb_handle->tag!=0 && nb_handle->bufid==NB_NONE){ ARMCI_NB_TEST(nb_handle->cmpl_info,&success); return(success); } #endif #endif #ifdef TEST_HANDLE TEST_HANDLE(nb_handle->bufid,nb_handle->tag,(&success)); #endif } #endif return(success); } ga-5-3/armci/src/progress/fence.c0000640005473000001440000000413312115161655015552 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "armcip.h" #include "armci.h" #include "copy.h" #if HAVE_STDIO_H # include #endif #if defined(PVM) # include #elif defined(TCGMSG) # include static void tcg_synch(long type) { long atype = type; SYNCH_(&atype); } #elif defined(BGML) # include "bgml.h" #else # include #endif char *_armci_fence_arr; void armci_init_fence() { #if defined (DATA_SERVER) || defined(PORTALS) #if defined(THREAD_SAFE) _armci_fence_arr = calloc(armci_nproc*armci_user_threads.max,1); #else _armci_fence_arr=calloc(armci_nproc,1); #endif if(!_armci_fence_arr) armci_die("armci_init_fence: calloc failed",0); #endif } void armci_finalize_fence() { #if defined (DATA_SERVER) || defined(PORTALS) free(_armci_fence_arr); _armci_fence_arr = NULL; #endif } #ifdef PORTALS void armci_update_fence_array(int proc, int inc) { if (inc) FENCE_ARR(proc)++; else FENCE_ARR(proc)--; } #endif void PARMCI_Fence(int proc) { #if defined(DATA_SERVER) && !(defined(GM) && defined(ACK_FENCE)) if(FENCE_ARR(proc) && (armci_nclus >1)){ int cluster = armci_clus_id(proc); int master = armci_clus_info[cluster].master; armci_rem_ack(cluster); bzero(&FENCE_ARR(master), armci_clus_info[cluster].nslave); } #elif defined(ARMCIX) ARMCIX_Fence (proc); #elif defined(BGML) BGML_WaitProc(proc); MEM_FENCE; #else FENCE_NODE(proc); MEM_FENCE; #endif } void PARMCI_AllFence() { #if defined(ARMCIX) ARMCIX_AllFence (); #elif defined(BGML) BGML_WaitAll(); #elif defined(LAPI) || defined(CLUSTER) int p; for(p = 0;p < armci_nproc; p++) { PARMCI_Fence(p); } #endif MEM_FENCE; } void PARMCI_Barrier() { if (armci_nproc==1) return; #if defined(BGML) BGML_WaitAll(); bgml_barrier(3); #else PARMCI_AllFence(); # ifdef MPI MPI_Barrier(ARMCI_COMM_WORLD); # else { long type=ARMCI_TAG; tcg_synch(type); } # endif #endif MEM_FENCE; } ga-5-3/armci/src/devices/0000750005473000001440000000000012275260536014107 5ustar d3n000usersga-5-3/armci/src/devices/openib/0000750005473000001440000000000012275260536015363 5ustar d3n000usersga-5-3/armci/src/devices/openib/rtinfo.c0000640005473000001440000000104511444464075017032 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif /* determine number of CPUs on the current SMP node- Linux version for now */ int armci_getnumcpus(void) { int numproc = 0; FILE* fp; char line[80]; fp = fopen("/proc/cpuinfo","r"); if(fp == NULL) return -1; while(!feof(fp)){ fgets(line,80,fp); if(strncmp(line,"processor",9)==0) numproc++; } fclose(fp); return numproc; } ga-5-3/armci/src/devices/openib/pendbufs.h0000640005473000001440000000476411444464075017357 0ustar d3n000users/** @file Split buffer implementation. * @author Sriram Krishnamoorthy * * Supports multiple short/immediate buffers posted per client and a * client-independent number of buffers to handle large messages. */ #ifndef _PENDBUFS_H_ #define _PENDBUFS_H_ #if defined(PEND_BUFS) #include "armcip.h" #include "request.h" #define PBUF_RGUARD_SIZE 256 /**The buf should be the first field in immbuf_t and pendbuf_t. For example, look at openib.c:armci_rcv_req and maybe other places*/ typedef struct immbuf_t { char *buf; /*immediate buffer[IMMBUF_LEN]*/ /* IMMBUF_NW_T fields; */ char rguard[PBUF_RGUARD_SIZE]; IMMBUF_NW_T struct immbuf_t *immbuf_list_next; } immbuf_t; typedef struct pendbuf_t { char *buf; /*pending buffer[PENDBUF_LEN]*/ /* PENDBUF_NW_T fields; */ char rguard[PBUF_RGUARD_SIZE]; PENDBUF_NW_T int status; /* #include #include #include #include #endif #ifdef OPENIB #include #endif #define DSCRID_NBDSCR 10000 #define MAX_RDMA_SIZE (8388608) #define DEFAULT_ADDR_LEN (8) /* format length of hcalid/qp_num.*/ #define DEFAULT_PORT (1) /*for vapi*/ #define DEFAULT_MTU (MTU1024) #define DEFAULT_PSN (0) #define DEFAULT_PKEY_IX (0) #define DEFAULT_P_KEY (0x0) #define DEFAULT_MIN_RNR_TIMER (5) #define DEFAULT_SERVICE_LEVEL (0) #define DEFAULT_TIME_OUT (5) #define DEFAULT_STATIC_RATE (2) #define DEFAULT_SRC_PATH_BITS (0) #define DEFAULT_RETRY_COUNT (1) #define DEFAULT_RNR_RETRY (1) #define DEFAULT_R_KEY (0x0) #define DEFAULT_L_KEY (0x0) #define DEFAULT_MAX_WQE 2048/*(1023)*/ typedef struct { void *data_ptr; /* pointer where the data should go */ long ack; /* header ack */ void *ack_ptr; /* pointer where the data should go */ #if defined(PEND_BUFS) unsigned int imm_msg:1; unsigned int data_len:31; #endif } msg_tag_t; typedef struct { #ifdef MELLANOX VAPI_sr_desc_t sdscr; VAPI_sg_lst_entry_t ssg_entry; VAPI_rr_desc_t rdscr; VAPI_sg_lst_entry_t rsg_entry; #endif #ifdef OPENIB struct ibv_send_wr sdscr; struct ibv_sge ssg_entry; struct ibv_recv_wr rdscr; struct ibv_sge rsg_entry; #endif } armci_vapi_field_t; typedef struct { #ifdef MELLANOX VAPI_lkey_t lkey; VAPI_rkey_t rkey; VAPI_mr_hndl_t memhndl; #endif #ifdef OPENIB uint32_t rkey; uint32_t lkey; struct ibv_mr *memhndl; #endif }armci_vapi_memhndl_t; extern char * armci_vapi_client_mem_alloc(int); typedef struct { int tag; int issg; #ifdef MELLANOX VAPI_sr_desc_t sdescr; VAPI_rr_desc_t rdescr; VAPI_sg_lst_entry_t sg_entry[56]; /*ff:this has to be malloced*/ #endif #ifdef OPENIB struct ibv_send_wr sdescr; struct ibv_recv_wr rdescr; struct ibv_sge sg_entry[56]; /*ff:this has to be malloced*/ #endif int numofsends; int numofrecvs; int myindex; } sr_descr_t; typedef struct { int tag; int issg; #ifdef MELLANOX VAPI_rr_desc_t descr; VAPI_sg_lst_entry_t sg_entry[56]; /*ff:this has to be malloced*/ #endif #ifdef OPENIB struct ibv_recv_wr descr; struct ibv_send_wr sg_entry[56]; /*ff:this has to be malloced*/ #endif int numofrecvs; int myindex; } rdescr_t; #if defined(PEND_BUFS) #ifdef OPENIB /* typedef struct { */ /* struct ibv_recv_wr dscr; */ /* struct ibv_sge sg_entry; */ /* } IMMBUF_NW_T; */ /* typedef struct { */ /* struct ibv_sge sg_entry; */ /* struct ibv_recv_wr rdscr; */ /* struct ibv_send_wr sdscr; */ /* } PENDBUF_NW_T; */ #define IMMBUF_NW_T \ struct ibv_recv_wr dscr; \ struct ibv_sge sg_entry; \ int send_pending; #define PENDBUF_NW_T \ struct ibv_sge sg_entry; \ struct ibv_recv_wr rdscr; \ struct ibv_send_wr sdscr; #define IS_IMM_MSG(msginfo) ((msginfo).tag.imm_msg) void armci_complete_immbuf(void *vbuf); void armci_complete_pendbuf(void *buf); /*Note that start_put and start_get cannot report completion from within. They have to just return and report completion later. */ void armci_pbuf_start_put(void *src, void *dst, int bytes, int proc, int bufid); void armci_pbuf_start_get(void *msg_info, void *src, void *dst, int bytes, int proc, int bufid); #else #error "PEND_BUFS only implemented for OPENIB" #endif #endif void armci_client_nbcall_complete(sr_descr_t *,int,int); void armci_vapi_set_mark_buf_send_complete(int); #define ARMCI_MEMHDL_T armci_vapi_memhndl_t #define REGIONS_REQUIRE_MEMHDL #define PIPE_BUFSIZE__ (4096) #define PIPE_MIN_BUFSIZE 1024 #define PIPE_MEDIUM_BUFSIZE (2*1024) #define VBUF_DLEN 4*64*1023 #define MSG_BUFLEN_DBL ((VBUF_DLEN)>>3) #if defined(PEND_BUFS) #define IMM_BUF_NUM_DEFAULT 4 #define IMM_BUF_LEN_DEFAULT 2048 #define PENDING_BUF_NUM_DEFAULT 20 #define PENDING_BUF_LEN_DEFAULT (VBUF_DLEN) #endif #ifdef PIPE_BUFSIZE # define STRIDED_GET_BUFLEN_DBL 31*1024 # define STRIDED_GET_BUFLEN (STRIDED_GET_BUFLEN_DBL<<3) # define MAX_BUFLEN (STRIDED_GET_BUFLEN+EXTRA_MSG_BUFLEN) #else # define MAX_BUFLEN (MSG_BUFLEN+EXTRA_MSG_BUFLEN) #endif #define BALANCE_BUFFERS #ifdef BALANCE_BUFFERS # define BALANCE_FACTOR 1.6 /* # define BALANCE_FACTOR 2.0 */ # define BALANCE_BUFSIZE 25000 #endif #define BUF_EXTRA_FIELD_T armci_vapi_field_t #define GET_SEND_BUFFER _armci_buf_get #define FREE_SEND_BUFFER _armci_buf_release #ifdef MELLANOX #define INIT_SEND_BUF(_field,_snd,_rcv) _snd=1;_rcv=1;memset(&((_field).sdscr),0,sizeof(VAPI_sr_desc_t));(_field).sdscr.id=avail+1;armci_vapi_set_mark_buf_send_complete(avail+1) #endif #ifdef OPENIB #define INIT_SEND_BUF(_field,_snd,_rcv) _snd=1;_rcv=1;memset(&((_field).sdscr),0,sizeof(struct ibv_send_wr));(_field).sdscr.wr_id=avail+1;armci_vapi_set_mark_buf_send_complete(avail+1) #endif #define BUF_ALLOCATE armci_vapi_client_mem_alloc #define CLEAR_SEND_BUF_FIELD(_field,_snd,_rcv,_to,_op) armci_vapi_complete_buf((armci_vapi_field_t *)(&(_field)),(_snd),(_rcv),(_to),(_op));_snd=0;_rcv=0;_to=0 #define TEST_SEND_BUF_FIELD(_field,_snd,_rcv,_to,_op,_pret) armci_vapi_test_buf((armci_vapi_field_t *)(&(_field)),(_snd),(_rcv),(_to),(_op),(_pret)) #define CLIENT_BUF_BYPASS 1 #define _armci_bypass 1 #define COMPLETE_HANDLE _armci_buf_complete_nb_request #if defined(ALLOW_PIN) # define NB_CMPL_T sr_descr_t* # define ARMCI_NB_WAIT(_cntr) if(_cntr)if(nb_handle->tag==(_cntr)->tag)\ armci_client_nbcall_complete(_cntr,nb_handle->tag,nb_handle->op); # define CLEAR_HNDL_FIELD(_x) _x=NULL #endif /* #define DIRECT_PUT_MIN_SIZE 8192 */ #define DIRECT_PUT_MIN_SIZE 0 #define LONG_GET_THRESHOLD 2147483648 #define LONG_GET_THRESHOLD_STRIDED 2147483648 #ifndef ARMCI_STAMP #error "ARMCI_STAMP used to define ARMCI_VAPI_COMPLETE not found!" #define ARMCI_VAPI_COMPLETE 1088451863 #else #define ARMCI_VAPI_COMPLETE ARMCI_STAMP #endif #define ARMCI_POST_SCATTER 1000000001 #define ARMCI_VAPI_CLEAR 0 #ifdef MELLANOX #define VAPI_SGGET_MIN_COLUMN 720 #define VAPI_SGPUT_MIN_COLUMN 720 #endif #ifdef OPENIB /* #define VAPI_SGGET_MIN_COLUMN 2147483648 */ #define VAPI_SGPUT_MIN_COLUMN 2147483648 #define VAPI_SGGET_MIN_COLUMN 10 /* #define VAPI_SGPUT_MIN_COLUMN 720 */ #endif #define DSCRID_SCATTERCLIENT 70000 #define DSCRID_SCATTERCLIENT_END 70000+9999 #define MAX_PENDING 32 #define HAS_RDMA_GET #if defined(OPENIB) #if 1 #define PUT_NO_SRV_COPY /*server rdma-s from to client buffers (in buffers.c) to remote memory (bypassing servers intermediate buffers) when possible*/ #define GET_NO_SRV_COPY /*server rdma-s from remote memory to client buffers (in buffers.c) (bypassing server intermediate buffers) when possible*/ int no_srv_copy_nsegs_ulimit();/*max #contig segs for which we avoid server copy. Too many segments might overflow a queue*/ #endif #define GET_STRIDED_COPY_PIPELINED /*client copies data from buffers to user memory in segments rather than waiting for all the data*/ #define GET_STRIDED_COPY_PIPELINED_SIZE (1*1024) /*size of each segment*/ #endif #endif /* _VAPI_CONST_H */ extern void armci_wait_ack(char *buffer); extern void armci_complete_multi_sglist_sends(int proc); extern void armci_client_direct_send(int p,void *src_buf, void *dst_buf, int len,void** contextptr,int nbtag,ARMCI_MEMHDL_T *lochdl,ARMCI_MEMHDL_T *remhdl); ga-5-3/armci/src/devices/openib/openib.c0000640005473000001440000046716712274750307017030 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: openib.c,v 1.4.2.9 2007-10-18 06:08:03 d3h325 Exp $ * * File organized as follows */ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #if HAVE_STDIO_H # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_STRING_H # include #endif #include #include "cbuf.h" #include "armcip.h" #include "copy.h" #include "request.h" #include "armci-vapi.h" #include "iterator.h" #define DEBUG_INIT 0 #define DEBUG_FINALIZE 0 #define DEBUG_SERVER 0 #define DEBUG_CLN 0 #define TIME_INIT 0 # define VAPIDEV_NAME "InfiniHost0" # define INVAL_HNDL 0xFFFFFFFF #define RNR_TIMER 12 /*Debug macros used to tune what is being tested -- mostly openib calls*/ #define DBG_INIT 1 #define DBG_POLL 1 #define DBG_ALL 1 #define QP_INACTIVE 5 #define QP_REQ_SENT 2 #define QP_ACK_RCVD 3 #define QP_ACTIVE 4 u_int32_t armci_max_num_sg_ent; u_int32_t armci_max_qp_ous_swr; u_int32_t armci_max_qp_ous_rwr; typedef struct { struct ibv_qp *qp; uint32_t sqpnum; /*we need to exchng qp nums,arr for that*/ uint16_t lid; uint16_t state; void *next; } armci_connect_t; armci_connect_t *CLN_con, *SRV_con; static uint32_t *SRV_rqpnums, *CLN_rqpnums; /*relevant rqp num arrs, to connect to svr and client*/ static uint32_t *CLN_rqpnumtmpbuf=NULL; /*temporary buf used during connection setup*/ /*\ * datastrucure for infinihost NIC \*/ typedef struct { uint16_t *lid_arr; /*we need to exchange lids, arr for that*/ struct ibv_context *handle; /*device context/handle*/ int maxtransfersize; struct ibv_device_attr attr; /*device properties*/ struct ibv_port_attr hca_port; /*mostly for getting lid*/ uint8_t active_port; struct ibv_pd *ptag; /*protection tag*/ const char *vendor; struct ibv_cq *scq; /*send completion queue*/ struct ibv_cq *rcq; /*recv completion queue*/ struct ibv_comp_channel *sch; /*send completion channel*/ struct ibv_comp_channel *rch; /*recv completion channel*/ void *scq_cntx; /*send context for completion queue*/ void *rcq_cntx; /*recv context for completion queue*/ int scv; /*send completion vector*/ int rcv; /*recv completion vector*/ } vapi_nic_t; typedef struct { armci_vapi_memhndl_t *prem_handle; /*address server to store memory handle*/ armci_vapi_memhndl_t handle; }ack_t; armci_vapi_memhndl_t *CLN_handle; armci_vapi_memhndl_t serv_memhandle, client_memhandle; armci_vapi_memhndl_t *handle_array; armci_vapi_memhndl_t *pinned_handle; static vapi_nic_t nic_arr[3]; static vapi_nic_t *SRV_nic= nic_arr; static vapi_nic_t *CLN_nic= nic_arr+1; static int armci_server_terminating; #define NONE -1 static int armci_ack_proc=NONE; static int armci_vapi_server_ready; static int armci_vapi_server_stage1=0; static int armci_vapi_client_stage1=0; static int armci_vapi_server_stage2=0; static int armci_vapi_client_ready; int _s=-1,_c=-1; static int armci_vapi_max_inline_size=-1; #define CLIENT_STAMP 101 #define SERV_STAMP 99 #define MAX_PROC_INLINE_SIZE 2048 static char * client_tail; static char * serv_tail; static ack_t *SRV_ack; #if defined(PEND_BUFS) typedef immbuf_t vapibuf_t; typedef pendbuf_t vapibuf_pend_t; #else typedef struct { struct ibv_recv_wr dscr; struct ibv_sge sg_entry; char buf[CBUF_DLEN]; } vapibuf_t; #endif typedef struct { struct ibv_send_wr snd_dscr; struct ibv_sge ssg_entry; struct ibv_recv_wr rcv_dscr; struct ibv_sge rsg_entry; char buf[VBUF_DLEN]; } vapibuf_ext_t; typedef struct { struct ibv_send_wr rmw_dscr; struct ibv_sge rmw_entry; } vapirmw_t; unsigned int armci_use_odcm = 0; unsigned int armci_use_lazy_break = 0; unsigned int armci_use_apm = 0; unsigned int armci_use_apm_test = 0; unsigned int armci_use_srq = 0; unsigned int armci_use_snft = 0; unsigned int armci_use_affinity = 0; unsigned int armci_srq_size = 4096; pthread_t armci_async_thread[4]; void async_thread_hca_events(void *ctx); void async_thread_ud_events(void *ctx); void init_apm_lock(void); static struct ibv_srq *create_srq(vapi_nic_t *nic); void setup_ud_channel(void); void process_recv_completion_from_server(armci_ud_rank *h, cbuf *v); void process_recv_completion_from_client(armci_ud_rank *h, cbuf *v); struct ibv_srq *CLN_srq_hndl; struct ibv_srq *SRV_srq_hndl; void post_recv(void); struct Remote_Buf { char **buf; uint32_t *qp_num; uint16_t *lid; uint32_t *rkey; }; struct HCA { struct ibv_device *ib_dev; struct ibv_context *context; struct ibv_pd *pd; struct ibv_cq *cq; struct ibv_srq *srq_hndl; struct ibv_comp_channel *comp_channel; }; struct RC_Conn { struct ibv_qp **qp; uint16_t *lid; int *status; uint32_t *qp_num; struct ibv_ah **ud_ah; }; struct Remote_Buf rbuf; struct RC_Conn conn; struct HCA hca; void handle_network_fault(struct ibv_wc *pdscr); int process_recv_completion_from_client_flag; int total_active_conn_to_server, total_active_conn_to_client, total_breaks; void check_state_of_ib_connection(int a, int b); static vapibuf_t **serv_buf_arr; #if !defined(PEND_BUFS) /*These are typically used as spare buffers for communication. Since we do not wait on completion anymore, we need to ensure things work fine when these have in-flight messages. Disabled for now.*/ static vapibuf_t *spare_serv_buf, *spare_serv_bufptr; static vapibuf_ext_t *serv_buf; #endif static vapirmw_t rmw[64]; static int *flag_arr; /* flag indicates its receiving scatter data */ #define SERV 2 #define CLN 1 #define MAX_DESCR 2 typedef struct { int avail; struct ibv_qp *qp; struct ibv_recv_wr *descr; } descr_pool_t; static int* _gtmparr; static void* test_ptr; static int test_stride_arr[1]; static int test_count[2]; static int test_stride_levels; char *MessageRcvBuffer; extern void armci_util_wait_int(volatile int *,int,int); void armci_send_data_to_client(int proc, void *buf,int bytes,void *dbuf); void armci_server_register_region(void *,long,ARMCI_MEMHDL_T *); static descr_pool_t serv_descr_pool = {MAX_DESCR,NULL,NULL}; static descr_pool_t client_descr_pool = {MAX_DESCR,NULL,NULL}; /**Buffer (long[1] used to set msginfo->tag.ack_ptr in client-side. See usage in SERVER_SEND_ACK macro*/ static long *ack_buf; #define GET_DATA_PTR(buf) (sizeof(request_header_t) + (char*)buf) #define BUF_TO_SDESCR(buf) ((struct ibv_send_wr *)(&((armci_vapi_field_t *)((char *)(buf) - sizeof(armci_vapi_field_t)))->sdscr)) #define BUF_TO_RDESCR(buf) ((struct ibv_recv_wr *)(&((armci_vapi_field_t *)((char *)(buf) - sizeof(armci_vapi_field_t)))->rdscr)) #define BUF_TO_SSGLST(buf) ((struct ibv_sge *)(&((armci_vapi_field_t *)((char *)(buf) - sizeof(armci_vapi_field_t)))->ssg_entry)) #define BUF_TO_RSGLST(buf) ((struct ibv_sge *)(&((armci_vapi_field_t *)((char *)(buf) - sizeof(armci_vapi_field_t)))->rsg_entry)) #define BUF_TO_ECBUF(buf) (vapibuf_ext_t*)(((char*)buf) - (sizeof(struct ibv_send_wr)+sizeof(struct ibv_recv_wr)+2*sizeof(struct ibv_sge))) #define SERVER_SEND_ACK(p) do { \ assert(*ack_buf == ARMCI_STAMP); \ assert((p)>=0); \ armci_send_data_to_client((p),ack_buf, \ sizeof(long),msginfo->tag.ack_ptr); \ } while(0) /* #define SERVER_SEND_ACK(p) {assert(serv_buf!=NULL);assert(msginfo->from==(p));*((long *)serv_buf->buf)=ARMCI_STAMP;armci_send_data_to_client((p),serv_buf->buf,sizeof(long),msginfo->tag.ack_ptr);} */ #define SERVER_SEND_DATA(_SS_proc,_SS_src,_SS_dst,_SS_size) {armci_send_data_to_client(_SS_proc,_SS_src,_SS_size,_SS_dst);} #define SERVER_GET_DATA(_SG_proc,_SG_src,_SG_dst,_SG_size) {armci_get_data_from_client(_SG_proc,_SG_src,_SG_size,_SG_dst);} /*\ descriptors will have unique ID's for the wait on descriptor routine to * complete a descriptor and know where it came from \*/ #define NUMOFBUFFERS (MAX_BUFS+MAX_SMALL_BUFS) #define DSCRID_FROMBUFS 1 #define DSCRID_FROMBUFS_END (DSCRID_FROMBUFS+NUMOFBUFFERS) #define DSCRID_NBDSCR 10000 #define DSCRID_NBDSCR_END (10000+MAX_PENDING) #define DSCRID_SCATGAT 20000 #define DSCRID_SCATGAT_END 20000+MAX_PENDING #define DSCRID_RMW 30000 #define DSCRID_RMW_END 30000+9999 #if defined(PEND_BUFS) #define DSCRID_PENDBUF (40000) #define DSCRID_PENDBUF_END (DSCRID_PENDBUF + 2*PENDING_BUF_NUM+1) #define DSCRID_IMMBUF_RECV (200000) #define DSCRID_IMMBUF_RECV_END (600000) #define DSCRID_IMMBUF_RESP (600000) #define DSCRID_IMMBUF_RESP_END (1000000) #endif extern double MPI_Wtime(); static double inittime0=0,inittime1=0,inittime2=0,inittime3=0,inittime4=0; static int mark_buf_send_complete[NUMOFBUFFERS+1]; static sr_descr_t armci_vapi_client_nbsdscr_array[MAX_PENDING]; static sr_descr_t armci_vapi_client_nbrdscr_array[MAX_PENDING]; static sr_descr_t armci_vapi_serv_nbsdscr_array[MAX_PENDING]; static sr_descr_t armci_vapi_serv_nbrdscr_array[MAX_PENDING]; void armci_server_transport_cleanup(); /********************FUNCTIONS TO CHECK OPENIB RETURN STATUS*******************/ void armci_check_status(int debug, int rc,char *msg) { dassertp(debug,rc==0,("%d: %s, rc=%d\n",armci_me,msg,rc)); /* if(debug)printf("%d:%s, rc = %d\n", armci_me,msg, rc); */ /* if(rc!=0)armci_die(msg,rc); */ } void armci_vapi_check_return(int debug, int ret, const char *ss) { } void armci_vapi_print_dscr_info(struct ibv_send_wr *sr, struct ibv_recv_wr *rr) { int i; if(rr){ printf("\n%d:print_dscr rr id=%ld sg_lst_len=%d", armci_me, rr->wr_id, rr->num_sge); for (i = 0; i < rr->num_sge; i++) { printf("\n\t:sg_entry=%d addr=%p len=%d", i, rr->sg_list[i].addr, rr->sg_list[i].length); } fflush(stdout); } if(sr){ printf("\n%d:print_dscr sr id=%d opcode=%d sg_lst_len=%d", armci_me, sr->wr_id, sr->opcode, sr->num_sge); for (i = 0; i < sr->num_sge; i++) { printf("\n\t:sg_entry=%d addr=%p len=%d", i, sr->sg_list[i].addr, sr->sg_list[i].length); } fflush(stdout); } } /*****************END FUNCTIONS TO CHECK VAPI RETURN STATUS********************/ void armci_recv_complete(struct ibv_recv_wr *rcv_dscr, char *from, int numofrecvs) { int rc=0; struct ibv_wc pdscr1; struct ibv_wc *pdscr = &pdscr1; sr_descr_t *rdscr_arr; vapi_nic_t *nic; int debug,i,done=0; if(SERVER_CONTEXT){ rdscr_arr = armci_vapi_serv_nbrdscr_array; nic=CLN_nic; debug = DEBUG_SERVER; } else{ rdscr_arr = armci_vapi_client_nbrdscr_array; nic=SRV_nic; debug = DEBUG_CLN; } if(debug){ printf("\n%d%s:recv_complete called from %s id=%ld\n",armci_me, ((SERVER_CONTEXT)?"(s)":" "),from,rcv_dscr->wr_id);fflush(stdout); } for(i=0;ircq, 1, pdscr); } dassertp(DBG_POLL|DBG_ALL,rc>=0, ("%d: rc=%d id=%d status=%d (%d/%d)\n", armci_me,rc,pdscr->wr_id,pdscr->status,i,numofrecvs)); dassert1(1,pdscr->status==IBV_WC_SUCCESS,pdscr->status); if(debug){ if(pdscr->wr_id >= DSCRID_SCATGAT && pdscr->wr_id < DSCRID_SCATGAT_END) printf("\n%d:recv from %s complete id=%d num=%d",armci_me, from,pdscr->wr_id,rdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].numofrecvs); } if(pdscr->wr_id >= DSCRID_SCATGAT && pdscr->wr_id < DSCRID_SCATGAT_END){ rdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].numofrecvs--; if(rdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].numofrecvs==0) rdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].tag=0; } else if(pdscr->wr_id == (DSCRID_SCATGAT + MAX_PENDING)){ /*this was from a blocking call, do nothing*/ continue; } else { armci_die("\nclient should be posting only one kind of recv",armci_me); } rc = 0; }while(pdscr->wr_id!=rcv_dscr->wr_id); rc = 0; } } void armci_vapi_set_mark_buf_send_complete(int id) { mark_buf_send_complete[id]=0; } void armci_send_complete(struct ibv_send_wr *snd_dscr, char *from,int numoftimes) { int rc=0; struct ibv_wc pdscr1; struct ibv_wc *pdscr = &pdscr1; sr_descr_t *sdscr_arr; vapi_nic_t *nic; int debug,i; pdscr1.status = IBV_WC_SUCCESS; /* bzero(&pdscr1, sizeof(pdscr1)); */ /* printf("%d: Waiting for send with wr_id=%d to complete\n", armci_me, snd_dscr->wr_id); */ /* fflush(stdout); */ if(SERVER_CONTEXT){ sdscr_arr = armci_vapi_serv_nbsdscr_array; nic=CLN_nic; debug = DEBUG_SERVER; } else{ sdscr_arr = armci_vapi_client_nbsdscr_array; nic=SRV_nic; debug = DEBUG_CLN; } if(debug) { printf("\n%d%s:send_complete called from %s id=%ld nt=%d\n",armci_me, ((SERVER_CONTEXT)?"(s)":" "),from,snd_dscr->wr_id,numoftimes); fflush(stdout); } for(i=0;ircq,1,pdscr); else #endif rc = ibv_poll_cq(nic->scq,1, pdscr); } dassertp(DBG_POLL|DBG_ALL,rc>=0, ("%d:rc=%d status=%d id=%d (%d/%d)",armci_me, rc,pdscr->status,(int)pdscr->wr_id,i,numoftimes)); dassert1(1,pdscr->status==IBV_WC_SUCCESS,pdscr->status); /* printf("%d: Obtained completion of wr_id=%d\n", armci_me, pdscr->wr_id); */ /* fflush(stdout); */ if(SERVER_CONTEXT){ if(debug)printf("%d:completed id %d i=%d\n",armci_me,pdscr->wr_id,i); if(pdscr->wr_id >=DSCRID_SCATGAT && pdscr->wr_id < DSCRID_SCATGAT_END){ sdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].numofsends--; if(sdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].numofsends==0) sdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].tag=0; } else if(pdscr->wr_id >=armci_nproc && pdscr->wr_id < 2*armci_nproc){ /*its coming from send_data_to_client just return*/ } #if defined(PEND_BUFS) else if(pdscr->wr_id >= DSCRID_IMMBUF_RESP && pdscr->wr_id>DSCRID_IMMBUF_RESP_END) { /*send from server to client completed*/ } #endif else armci_die("server send complete got weird id",pdscr->wr_id); } else{ if(debug)printf("%d:completed id %d i=%d\n",armci_me,pdscr->wr_id,i); if(pdscr->wr_id >=DSCRID_FROMBUFS && pdscr->wr_id < DSCRID_FROMBUFS_END) { /* printf("%d: marking send buffer %d as complete\n", armci_me, pdscr->wr_id);*/ mark_buf_send_complete[pdscr->wr_id]=1; } else if(pdscr->wr_id >=DSCRID_NBDSCR && pdscr->wr_id < DSCRID_NBDSCR_END){ sdscr_arr[pdscr->wr_id-DSCRID_NBDSCR].numofsends--; if(sdscr_arr[pdscr->wr_id-DSCRID_NBDSCR].numofsends==0) sdscr_arr[pdscr->wr_id-DSCRID_NBDSCR].tag=0; } else if(pdscr->wr_id >=DSCRID_SCATGAT && pdscr->wr_id < DSCRID_SCATGAT_END){ sdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].numofsends--; if(sdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].numofsends==0) sdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].tag=0; } else if(pdscr->wr_id == (DSCRID_SCATGAT + MAX_PENDING)){ /* printf("%d: completed a blocking scatgat descriptor\n", armci_me); */ /*this was from a blocking call, do nothing*/ continue; } else armci_die("client send complete got weird id",pdscr->wr_id); } rc = 0; }while(pdscr->wr_id!=snd_dscr->wr_id); rc = 0; } } void armci_dscrlist_recv_complete(int tag, char* from,sr_descr_t *dscr) { int i,nr,j; sr_descr_t *retdscr,*rdscr_arr; if(dscr == NULL){ if(SERVER_CONTEXT) rdscr_arr = armci_vapi_serv_nbrdscr_array; else rdscr_arr = armci_vapi_client_nbrdscr_array; for(i=0;inumofrecvs; armci_recv_complete(&(retdscr->rdescr),"(s)list_send_complete",nr); } void armci_dscrlist_send_complete(int tag,char *from, sr_descr_t *dscr) { int i,ns,j; sr_descr_t *retdscr,*sdscr_arr; if(dscr==NULL){ if(SERVER_CONTEXT) sdscr_arr = armci_vapi_serv_nbsdscr_array; else sdscr_arr = armci_vapi_client_nbsdscr_array; for(i=0;inumofsends; armci_send_complete(&(retdscr->sdescr),"dscrlist_send_complete",ns); } void armci_client_nbcall_complete(sr_descr_t *dscr, int tag, int op) { if(tag != dscr->tag) return; THREAD_LOCK(armci_user_threads.net_lock); if(op == GET){ if(dscr->issg){ if(dscr->numofrecvs>0) armci_dscrlist_recv_complete(tag,"armci_client_nbcall_complete recv", dscr); } else{ if(dscr->numofsends>0) armci_dscrlist_send_complete(tag,"armci_client_nbcall_complete send", dscr); } } if(op == PUT){ if(dscr->numofsends>0) armci_dscrlist_send_complete(tag,"armci_client_nbcall_complete send", dscr); } THREAD_UNLOCK(armci_user_threads.net_lock); } static int cur_serv_pend_descr; static int cur_client_pend_descr; sr_descr_t *armci_vapi_get_next_rdescr(int nbtag,int sg) { static int serverthreadavail=-1; /*client thread can't touch this*/ static int clientthreadavail=-1; /*server thread can't touch this*/ int avail,newavail; sr_descr_t *retdscr,*rdscr_arr; if(SERVER_CONTEXT){ rdscr_arr = armci_vapi_serv_nbrdscr_array; avail = serverthreadavail; /*printf("\n%d:serv thread avail=%d",armci_me,serverthreadavail);*/ } else{ rdscr_arr = armci_vapi_client_nbrdscr_array; avail = clientthreadavail; } if(avail==-1){ int i; for(i=0;irdescr,0,sizeof(struct ibv_recv_wr)); if(sg) retdscr->rdescr.wr_id = DSCRID_SCATGAT + avail; else{ retdscr->rdescr.wr_id = DSCRID_NBDSCR + avail; retdscr->numofrecvs=1; } newavail = (avail+1)%MAX_PENDING; if(SERVER_CONTEXT){ cur_serv_pend_descr = avail; serverthreadavail=newavail; } else{ cur_client_pend_descr = avail; clientthreadavail=newavail; } return(retdscr); } sr_descr_t *armci_vapi_get_next_sdescr(int nbtag,int sg) { static int serverthreadavail=-1; /*client thread can't touch this*/ static int clientthreadavail=-1; /*server thread can't touch this*/ int avail,newavail; sr_descr_t *retdscr,*sdscr_arr; if(SERVER_CONTEXT){ sdscr_arr = armci_vapi_serv_nbsdscr_array; avail = serverthreadavail; } else{ sdscr_arr = armci_vapi_client_nbsdscr_array; avail = clientthreadavail; } if(avail==-1){ /*first call*/ int i; for(i=0;isdescr,0,sizeof(struct ibv_recv_wr)); if(sg) retdscr->sdescr.wr_id = DSCRID_SCATGAT + avail; else{ retdscr->sdescr.wr_id = DSCRID_NBDSCR + avail; retdscr->numofsends=1; } newavail = (avail+1)%MAX_PENDING; if(SERVER_CONTEXT){ cur_serv_pend_descr = avail; serverthreadavail=newavail; } else{ cur_client_pend_descr = avail; clientthreadavail=newavail; } return(retdscr); } void armci_wait_for_server() { armci_server_terminating = 1; } /* ibv_create_qp does not use separate structure to return properties, seems it is all inside ibv_qp */ static void armci_create_qp(vapi_nic_t *nic, struct ibv_qp **qp) { struct ibv_qp_init_attr initattr; bzero(&initattr, sizeof(struct ibv_qp_init_attr)); *qp = NULL; initattr.cap.max_send_wr = armci_max_qp_ous_swr; initattr.cap.max_recv_wr = armci_max_qp_ous_rwr; initattr.cap.max_recv_sge = armci_max_num_sg_ent; initattr.cap.max_send_sge = armci_max_num_sg_ent; #if defined(PEND_BUFS) if(nic==CLN_nic) { initattr.send_cq = nic->rcq; initattr.recv_cq = nic->rcq; } else #endif { initattr.send_cq = nic->scq; initattr.recv_cq = nic->rcq; } initattr.qp_type = IBV_QPT_RC; *qp = ibv_create_qp(nic->ptag, &initattr); dassert(1,*qp!=NULL); /* The value of inline size should be dependent on number of processes * */ if (armci_nproc >= MAX_PROC_INLINE_SIZE) { armci_vapi_max_inline_size = -1; } else { armci_vapi_max_inline_size = initattr.cap.max_inline_data; } } int armci_openib_sl; int armci_openib_server_poll; void armci_openib_env_init() { char *value; if ((value = getenv("ARMCI_OPENIB_USE_SL")) != NULL){ armci_openib_sl = atoi(value); } else { armci_openib_sl = 0; } /* Don't enable server polling by default */ if ((value = getenv("ARMCI_OPENIB_SERVER_POLL")) != NULL){ armci_openib_server_poll = atoi(value); } else { armci_openib_server_poll = 0; } } static void armci_init_nic(vapi_nic_t *nic, int scq_entries, int rcq_entries) { int rc, ndevs, i; struct ibv_device **devs=NULL; struct ibv_context *cxt; if (nic == SRV_nic) { /* Initialize OpenIB runtime variables only once*/ armci_openib_env_init(); } bzero(nic,sizeof(vapi_nic_t)); nic->lid_arr = (uint16_t *)calloc(armci_nproc,sizeof(uint16_t)); dassert(1,nic->lid_arr!=NULL); devs = ibv_get_device_list(&ndevs); char *runtime_devname; int device_found = 0, device_id = 0; runtime_devname = getenv("ARMCI_OPENIB_DEVICE"); if (runtime_devname) { for (i = 0; i < ndevs; i++) { if (!strncmp(ibv_get_device_name(devs[i]), runtime_devname, 32)) { device_found = 1; device_id = i; break; } } } else { device_id = 0; device_found = 1; } assert(device_found); nic->handle = ibv_open_device(devs[device_id]); nic->maxtransfersize = MAX_RDMA_SIZE; nic->vendor = ibv_get_device_name(devs[device_id]); rc = ibv_query_device(nic->handle, &nic->attr); int down_port_count_check = 0; for (i = 1; i <= 2; i++) { rc = ibv_query_port(nic->handle, (uint8_t)i, &nic->hca_port); if (IBV_PORT_ACTIVE == nic->hca_port.state) { nic->active_port = i; break; } else { down_port_count_check++; } } /* Assert that the number of inactive ports is not equal to the number * of down ports on any adapter */ assert(down_port_count_check != 2); /*save the lid for doing a global exchange later */ nic->lid_arr[armci_me] = nic->hca_port.lid; /*allocate tag (protection domain) */ nic->ptag = ibv_alloc_pd(nic->handle); /* properties of scq and rcq required for the cq number, this also needs * to be globally exchanged */ nic->scv = 1; nic->rcv = 2; nic->scq = nic->rcq = NULL; if(scq_entries) { nic->sch = ibv_create_comp_channel(nic->handle); nic->scq = ibv_create_cq(nic->handle, 16000, nic->scq_cntx,nic->sch, 0); } if(rcq_entries) { nic->rch = ibv_create_comp_channel(nic->handle); nic->rcq = ibv_create_cq(nic->handle, 32768, nic->rcq_cntx,nic->rch, 0); } ibv_free_device_list(devs); armci_max_num_sg_ent = 29; armci_max_qp_ous_swr = 100; armci_max_qp_ous_rwr = 50; char *value; if ((value = getenv("ARMCI_USE_ODCM")) != NULL){ armci_use_odcm = atoi(value); } else { armci_use_odcm = 0; } armci_use_lazy_break = 0; if(armci_max_qp_ous_rwr + armci_max_qp_ous_swr>nic->attr.max_qp_wr){ armci_max_qp_ous_swr = nic->attr.max_qp_wr/16; armci_max_qp_ous_rwr = nic->attr.max_qp_wr - armci_max_qp_ous_swr; } if(armci_max_num_sg_ent >= nic->attr.max_sge){ armci_max_num_sg_ent = nic->attr.max_sge - 1; } } void armci_setaffinity(char *cpu_mapping) { long N_CPUs_online; cpu_set_t affinity_mask; unsigned long affinity_mask_len = sizeof(affinity_mask); char *tp; char *cp; char tp_str[8]; int cpu, i, j; if (!armci_use_affinity) return; /*Get number of CPU on machine */ if ((N_CPUs_online = sysconf(_SC_NPROCESSORS_ONLN)) < 1) { perror("sysconf"); } if (cpu_mapping) { tp = cpu_mapping; j = 0; while (*tp != '\0') { i = 0; cp = tp; while (*cp != '\0' && *cp != ',' && *cp != ':') { cp++; i++; } strncpy(tp_str, tp, i); tp_str[i] = '\0'; cpu = atoi(tp_str); if (j == armci_me - armci_master) { CPU_ZERO(&affinity_mask); CPU_SET(cpu, &affinity_mask); if (sched_setaffinity(0, affinity_mask_len, &affinity_mask)<0 ) { perror("sched_setaffinity"); } break; } tp = cp + 1; j++; } free(cpu_mapping); } else { CPU_ZERO(&affinity_mask); CPU_SET(((armci_me) - armci_master) %N_CPUs_online, &affinity_mask); if (sched_setaffinity(0,affinity_mask_len,&affinity_mask)<0 ) { perror("sched_setaffinity"); } } } /****************MEMORY ALLOCATION REGISTRATION DEREGISTRATION****************/ static char * serv_malloc_buf_base; #if ARMCI_ENABLE_GPC_CALLS extern gpc_buf_t *gpc_req; #endif void armci_server_alloc_bufs() { int rc; int mod, bytes, total, extra =sizeof(struct ibv_recv_wr)*MAX_DESCR+SIXTYFOUR; int mhsize = armci_nproc*sizeof(armci_vapi_memhndl_t); /* ack */ char *tmp, *tmp0; int i, j=0; #if defined(PEND_BUFS) int clients = (IMM_BUF_NUM+1)*armci_nproc; #else int clients = armci_nproc; #endif /* allocate memory for the recv buffers-must be alligned on 64byte bnd */ /* note we add extra one to repost it for the client we are received req */ bytes = (clients+1)*sizeof(vapibuf_t)+sizeof(vapibuf_ext_t) + extra+ mhsize #if ARMCI_ENABLE_GPC_CALLS + MAX_GPC_REQ * sizeof(gpc_buf_t) #endif #if defined(PEND_BUFS) + (clients+1)*IMM_BUF_LEN + PENDING_BUF_NUM*(sizeof(vapibuf_pend_t)+PENDING_BUF_LEN) #endif + sizeof(long) + 7*SIXTYFOUR; total = bytes + SIXTYFOUR; if(total%4096!=0) total = total - (total%4096) + 4096; tmp0=tmp = malloc(total); serv_malloc_buf_base = tmp0; dassert1(1,tmp!=NULL,(int)total); /* stamp the last byte */ serv_tail= tmp + bytes+SIXTYFOUR-1; *serv_tail=SERV_STAMP; /* allocate memory for client memory handle to support put response * in dynamic memory registration protocols */ CLN_handle = (armci_vapi_memhndl_t*)tmp; memset(CLN_handle,0,mhsize); /* set it to zero */ tmp += mhsize; #if ARMCI_ENABLE_GPC_CALLS /* gpc_req memory*/ tmp += SIXTYFOUR - ((ssize_t)tmp % SIXTYFOUR); gpc_req = (gpc_buf_t *)tmp; tmp += MAX_GPC_REQ * sizeof(gpc_buf_t); #endif /* setup descriptor memory */ tmp += SIXTYFOUR - ((ssize_t)tmp % SIXTYFOUR); serv_descr_pool.descr= (struct ibv_recv_wr *)(tmp); tmp += extra; /* setup ack buffer*/ tmp += SIXTYFOUR - ((ssize_t)tmp % SIXTYFOUR); ack_buf = (long *)(tmp); *ack_buf=ARMCI_STAMP; tmp += sizeof(long); /* setup buffer pointers */ tmp += SIXTYFOUR - ((ssize_t)tmp % SIXTYFOUR); serv_buf_arr = (vapibuf_t **)malloc(sizeof(vapibuf_t*)*clients); for(i=0;ibuf = tmp + i*IMM_BUF_LEN; } tmp += clients*IMM_BUF_LEN; /*setup pending buffers*/ tmp += SIXTYFOUR - ((ssize_t)tmp % SIXTYFOUR); serv_pendbuf_arr = (vapibuf_pend_t *)(tmp); tmp=(char *)(serv_pendbuf_arr+PENDING_BUF_NUM); tmp += SIXTYFOUR - ((ssize_t)tmp % SIXTYFOUR); for(i=0; ibuf; #endif flag_arr = (int *)malloc(sizeof(int)*armci_nproc); for (i =0; iptag,CLN_nic->handle);fflush(stdout); } serv_memhandle.memhndl = ibv_reg_mr(CLN_nic->ptag, tmp0, total, IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ); dassert1(1,serv_memhandle.memhndl!=NULL,total); serv_memhandle.lkey=serv_memhandle.memhndl->lkey; serv_memhandle.rkey=serv_memhandle.memhndl->rkey; /* exchange address of ack/memhandle flag on servers */ if(DEBUG_SERVER){ printf("%d(s):registered mem %p %dbytes mhandle=%d mharr starts%p\n", armci_me, tmp0, total, serv_memhandle.memhndl,CLN_handle); fflush(stdout); } } static char * client_malloc_buf_base; char * armci_vapi_client_mem_alloc(int size) { int rc; int mod, total; int extra = MAX_DESCR*sizeof(struct ibv_recv_wr)+SIXTYFOUR; char *tmp,*tmp0; /*we use the size passed by the armci_init_bufs routine instead of bytes*/ total = size + extra + 2*SIXTYFOUR; if(total%4096!=0) total = total - (total%4096) + 4096; tmp0 = tmp = malloc(total); dassert1(1,tmp!=NULL,total); client_malloc_buf_base = tmp; #if 0 /*SK: could this lead to a problem at ibv_reg_mr() because of unfixed 'total'?*/ if(ALIGN64ADD(tmp0))tmp0+=ALIGN64ADD(tmp0); #endif /* stamp the last byte */ client_tail= tmp + extra+ size +2*SIXTYFOUR-1; *client_tail=CLIENT_STAMP; /* we also have a place to store memhandle for zero-copy get */ pinned_handle =(armci_vapi_memhndl_t *) (tmp + extra+ size +SIXTYFOUR-16); mod = ((ssize_t)tmp)%SIXTYFOUR; client_descr_pool.descr= (struct ibv_recv_wr*)(tmp+SIXTYFOUR-mod); tmp += extra; client_memhandle.memhndl = ibv_reg_mr(SRV_nic->ptag, tmp0, total, IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ); dassert(1,client_memhandle.memhndl!=NULL); client_memhandle.lkey = client_memhandle.memhndl->lkey; client_memhandle.rkey = client_memhandle.memhndl->rkey; handle_array[armci_me].lkey = client_memhandle.lkey; handle_array[armci_me].rkey = client_memhandle.rkey; handle_array[armci_me].memhndl = client_memhandle.memhndl; if(DEBUG_INIT){ printf("%d: registered client memory %p %dsize tmp=%p \n", armci_me,tmp0, total, tmp); fflush(stdout); } /*now that we have the handle array, we get every body elses RDMA handle*/ total = (sizeof(armci_vapi_memhndl_t)*armci_nproc)/sizeof(int); armci_msg_gop_scope(SCOPE_ALL,handle_array,total,"+",ARMCI_INT); return(tmp); } void armci_server_register_region(void *ptr,long bytes, ARMCI_MEMHDL_T *memhdl) { bzero(memhdl,sizeof(ARMCI_MEMHDL_T)); memhdl->memhndl = ibv_reg_mr(CLN_nic->ptag, ptr, bytes, IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ); dassert(1,memhdl->memhndl!=NULL); memhdl->lkey=memhdl->memhndl->lkey; memhdl->rkey=memhdl->memhndl->rkey; if(DEBUG_SERVER){ printf("\n%d(s):registered lkey=%d rkey=%d ptr=%p end=%p %p\n",armci_me, memhdl->lkey,memhdl->rkey,ptr,(char *)ptr+bytes,memhdl); fflush(stdout); } } int armci_pin_contig_hndl(void *ptr, size_t bytes, ARMCI_MEMHDL_T *memhdl) { memhdl->memhndl = ibv_reg_mr(SRV_nic->ptag, ptr, bytes, IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ); dassert(1,memhdl->memhndl!=NULL); memhdl->lkey=memhdl->memhndl->lkey; memhdl->rkey=memhdl->memhndl->rkey; if(0){ printf("\n%d:registered lkey=%d rkey=%d ptr=%p end=%p\n",armci_me, memhdl->lkey,memhdl->rkey,ptr,(char *)ptr+bytes);fflush(stdout); } return 1; } #if 1 void armci_network_client_deregister_memory(ARMCI_MEMHDL_T *mh) { int rc; rc = ibv_dereg_mr(mh->memhndl); dassert1(1,rc==0,rc); armci_vapi_check_return(DEBUG_FINALIZE,rc, "armci_network_client_deregister_memory:deregister_mr"); } void armci_network_server_deregister_memory(ARMCI_MEMHDL_T *mh) { int rc; return; /* ??? why ??? */ printf("\n%d:deregister ptr=%p",armci_me,mh);fflush(stdout); rc = ibv_dereg_mr(mh->memhndl); dassert1(1,rc==0,rc); armci_vapi_check_return(DEBUG_FINALIZE,rc, "armci_network_server_deregister_memory:deregister_mr"); } #else # define armci_network_client_deregister_memory(mh) \ armci_vapi_check_return(DEBUG_FINALIZE, \ ibv_dereg_mr(mh->memhndl), \ "armci_network_client_deregister_memory:deregister_mr") # define armci_network_server_deregister_memory(mh) \ armci_vapi_check_return(DEBUG_FINALIZE, \ ibv_dereg_mr(mh->memhndl), \ "armci_network_server_deregister_memory:deregister_mr") #endif void armci_set_serv_mh() { int s, ratio = sizeof(ack_t)/sizeof(int); /* first collect addrresses on all masters */ if(armci_me == armci_master){ SRV_ack[armci_clus_me].prem_handle=CLN_handle; SRV_ack[armci_clus_me].handle =serv_memhandle; armci_msg_gop_scope(SCOPE_MASTERS,SRV_ack,ratio*armci_nclus,"+", ARMCI_INT); } /* next master broadcasts the addresses within its node */ armci_msg_bcast_scope(SCOPE_NODE,SRV_ack,armci_nclus*sizeof(ack_t), armci_master); /* Finally save address corresponding to my id on each server */ for(s=0; s< armci_nclus; s++){ SRV_ack[s].prem_handle += armci_me; } } /**********END MEMORY ALLOCATION REGISTRATION AND DEREGISTRATION**************/ /*\ * init_connections, client_connect_to_servers -- client code * server_initial_connection, all_data_server -- server code \*/ void armci_init_connections() { int c,s; int sz; uint32_t *tmpbuf; int *tmparr; if(TIME_INIT)inittime0 = MPI_Wtime(); #if defined(PEND_BUFS) armci_pbuf_init_buffer_env(); #endif armci_setaffinity(NULL); /* initialize nic connection for qp numbers and lid's */ armci_init_nic(SRV_nic,1,1); for(c=0; c < NUMOFBUFFERS+1; c++) { mark_buf_send_complete[c]=1; } _gtmparr = (int *)calloc(armci_nproc,sizeof(int)); /*qp_numbers and lids need to be exchanged globally*/ tmparr = (int *)calloc(armci_nproc,sizeof(int)); tmparr[armci_me] = SRV_nic->lid_arr[armci_me]; sz = armci_nproc; armci_msg_gop_scope(SCOPE_ALL,tmparr,sz,"+",ARMCI_INT); for(c=0;clid_arr[c]=tmparr[c]; tmparr[c]=0; } /*SRV_con is for client to connect to servers */ SRV_con=(armci_connect_t *)malloc(sizeof(armci_connect_t)*armci_nclus); dassert1(1,SRV_con!=NULL,sizeof(armci_connect_t)*armci_nclus); bzero(SRV_con,sizeof(armci_connect_t)*armci_nclus); CLN_con=(armci_connect_t*)malloc(sizeof(armci_connect_t)*armci_nproc); dassert1(1,CLN_con!=NULL,sizeof(armci_connect_t)*armci_nproc); bzero(CLN_con,sizeof(armci_connect_t)*armci_nproc); /*every client creates a qp with every server other than the one on itself*/ SRV_rqpnums = (uint32_t*)malloc(sizeof(uint32_t)*armci_nproc); dassert(1,SRV_rqpnums); tmpbuf = (uint32_t*)calloc(armci_nproc,sizeof(uint32_t)); dassert(1,tmpbuf); sz = armci_nproc*(sizeof(uint32_t)/sizeof(int)); armci_vapi_max_inline_size = 0; if (!armci_use_odcm) { for(s = 0; s < armci_nclus; s++){ armci_connect_t *con = SRV_con + s; { armci_create_qp(SRV_nic,&con->qp); con->sqpnum = con->qp->qp_num; tmpbuf[armci_clus_info[s].master] = con->qp->qp_num; con->lid = SRV_nic->lid_arr[s]; } } MPI_Alltoall(tmpbuf,sizeof(uint32_t),MPI_CHAR,SRV_rqpnums, sizeof(uint32_t),MPI_CHAR,ARMCI_COMM_WORLD); free(tmpbuf); if(armci_me != armci_master) { free(SRV_rqpnums); SRV_rqpnums = NULL; } } else { for(s = 0; s < armci_nclus; s++){ armci_connect_t *con = SRV_con + s; con->state = QP_INACTIVE; } } SRV_ack = (ack_t*)calloc(armci_nclus, sizeof(ack_t)); dassert1(1,SRV_ack!=NULL,armci_nclus*sizeof(ack_t)); handle_array = (armci_vapi_memhndl_t *)calloc(sizeof(armci_vapi_memhndl_t), armci_nproc); dassert1(1,handle_array!=NULL,sizeof(armci_vapi_memhndl_t)*armci_nproc); if (armci_use_odcm) { setup_ud_channel(); } } static void vapi_connect_client() { int i, start, sz=0, c, rc; struct ibv_qp_attr qp_attr; struct ibv_qp_cap qp_cap; enum ibv_qp_attr_mask qp_attr_mask; if (TIME_INIT) inittime0 = MPI_Wtime(); if (armci_me == armci_master) armci_util_wait_int(&armci_vapi_server_stage1, 1, 10); if (TIME_INIT) printf("\n%d:wait for server to get to stage 1 time for " "vapi_connect_client is %f", armci_me, (inittime1 = MPI_Wtime()) - inittime0); sz = armci_nproc; if (armci_me == armci_master) { armci_msg_gop_scope(SCOPE_MASTERS, _gtmparr, sz, "+", ARMCI_INT); for (c=0; clid_arr[c] = _gtmparr[c]; _gtmparr[c] = 0; } if (DEBUG_CLN) { printf("\n%d(svc): mylid = %d",armci_me,CLN_nic->lid_arr[armci_me]); fflush(stdout); } } armci_vapi_client_stage1 = 1; /* allocate and initialize connection structs */ sz = armci_nproc*sizeof(uint32_t)/sizeof(int); if (armci_me == armci_master) armci_util_wait_int(&armci_vapi_server_stage2, 1, 10); #if 0 for (c = 0; c < armci_nproc; c++){ armci_connect_t *con = CLN_con + c; if (armci_me != armci_master) { char *ptrr; int extra; ptrr = malloc(8 + sizeof(uint32_t) * armci_nproc); extra = ALIGNLONGADD(ptrr); ptrr = ptrr + extra; con->rqpnum = (uint32_t *)ptrr; bzero(con->rqpnum, sizeof(uint32_t) * armci_nproc); } armci_msg_gop_scope(SCOPE_ALL, con->rqpnum, sz, "+", ARMCI_INT); } #else CLN_rqpnums = (uint32_t*)malloc(sizeof(uint32_t)*armci_nproc); if (!armci_use_odcm) { if(armci_me != armci_master) { /*just has junk*/ CLN_rqpnumtmpbuf = (uint32_t*)malloc(sizeof(uint32_t)*armci_nproc); } dassert(1, CLN_rqpnumtmpbuf); MPI_Alltoall(CLN_rqpnumtmpbuf, sizeof(uint32_t), MPI_CHAR, CLN_rqpnums, sizeof(uint32_t), MPI_CHAR, ARMCI_COMM_WORLD); free(CLN_rqpnumtmpbuf); CLN_rqpnumtmpbuf=NULL; #endif if (TIME_INIT) printf("\n%d:wait for server tog et to stage 2 time for " "vapi_connect_client is %f", armci_me, (inittime2 = MPI_Wtime()) - inittime1); /*armci_set_serv_mh();*/ if (DEBUG_CLN) { printf("%d:all connections ready\n", armci_me); fflush(stdout); } /* For sanity */ memset(&qp_attr, 0, sizeof qp_attr); /* Modifying QP to INIT */ qp_attr_mask = IBV_QP_STATE | IBV_QP_PKEY_INDEX | IBV_QP_PORT | IBV_QP_ACCESS_FLAGS; qp_attr.qp_state = IBV_QPS_INIT; qp_attr.pkey_index = DEFAULT_PKEY_IX; qp_attr.port_num = SRV_nic->active_port; qp_attr.qp_access_flags = IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ; /* start from from server on my_node -1 */ start = (armci_clus_me == 0) ? armci_nclus - 1 : armci_clus_me - 1; for (i = 0; i < armci_nclus; i++) { armci_connect_t *con; con = SRV_con + i; rc = ibv_modify_qp(con->qp, &qp_attr, qp_attr_mask); dassertp(1,!rc,("%d: client RST->INIT i=%d rc=%d\n",armci_me,i,rc)); } if (TIME_INIT) printf("\n%d:to init time for vapi_connect_client is %f", armci_me, (inittime1 = MPI_Wtime()) - inittime2); qp_attr_mask = IBV_QP_STATE | IBV_QP_MAX_DEST_RD_ATOMIC | IBV_QP_PATH_MTU | IBV_QP_RQ_PSN | IBV_QP_MIN_RNR_TIMER; memset(&qp_attr, 0, sizeof qp_attr); qp_attr.qp_state = IBV_QPS_RTR; qp_attr.max_dest_rd_atomic = 4; qp_attr.path_mtu = IBV_MTU_1024; qp_attr.rq_psn = 0; qp_attr.min_rnr_timer = RNR_TIMER; /* AV: Adding the service level parameter */ qp_attr.ah_attr.sl = armci_openib_sl; start = (armci_clus_me == 0) ? armci_nclus - 1 : armci_clus_me - 1; for (i = 0; i < armci_nclus; i++) { armci_connect_t *con; armci_connect_t *conS; con = SRV_con + i; #if 0 conS = CLN_con + armci_me; #endif qp_attr_mask |= IBV_QP_AV | IBV_QP_DEST_QPN; #if 0 qp_attr.dest_qp_num = conS->rqpnum[armci_clus_info[i].master]; #else qp_attr.dest_qp_num = CLN_rqpnums[armci_clus_info[i].master]; #endif qp_attr.ah_attr.dlid = SRV_nic->lid_arr[armci_clus_info[i].master]; qp_attr.ah_attr.port_num = SRV_nic->active_port; qp_attr.ah_attr.sl = armci_openib_sl; rc = ibv_modify_qp(con->qp, &qp_attr, qp_attr_mask); dassertp(1,!rc,("%d: INIT->RTR client i=%d rc=%d\n",armci_me,i,rc)); } } /*to to to RTS, other side must be in RTR*/ armci_msg_barrier(); if (TIME_INIT) printf("\n%d:init to rtr time for vapi_connect_client is %f", armci_me, (inittime2 = MPI_Wtime()) - inittime1); armci_vapi_client_ready=1; if (!armci_use_odcm) { qp_attr_mask = IBV_QP_STATE | IBV_QP_SQ_PSN | IBV_QP_TIMEOUT | IBV_QP_RETRY_CNT | IBV_QP_RNR_RETRY | IBV_QP_MAX_QP_RD_ATOMIC; memset(&qp_attr, 0, sizeof qp_attr); qp_attr.qp_state = IBV_QPS_RTS; qp_attr.sq_psn = 0; qp_attr.timeout = 18; qp_attr.retry_cnt = 7; qp_attr.rnr_retry = 7; qp_attr.max_rd_atomic = 4; start = (armci_clus_me == 0) ? armci_nclus - 1 : armci_clus_me - 1; for (i = 0; i < armci_nclus; i++){ armci_connect_t *con; con = SRV_con + i; rc = ibv_modify_qp(con->qp, &qp_attr, qp_attr_mask); dassertp(1,!rc,("%d: client RTR->RTS i=%d rc=%d\n",armci_me,i,rc)); } if (TIME_INIT) printf("\n%d:rtr to rts time for vapi_connect_client is %f", armci_me, (inittime1 = MPI_Wtime()) - inittime2); free(CLN_rqpnums); CLN_rqpnums=NULL; } } void armci_client_connect_to_servers() { extern void armci_util_wait_int(volatile int *,int,int); if (TIME_INIT) inittime0 = MPI_Wtime(); _armci_buf_init(); vapi_connect_client(); if (armci_me == armci_master) armci_util_wait_int(&armci_vapi_server_ready,1,10); armci_msg_barrier(); if (DEBUG_CLN && armci_me == armci_master) { printf("\n%d:server_ready=%d\n",armci_me,armci_vapi_server_ready); fflush(stdout); } if (TIME_INIT) printf("\n%d:time for client_connect_to_s is %f", armci_me,MPI_Wtime()-inittime0); } void armci_init_vapibuf_recv(struct ibv_recv_wr *rd, struct ibv_sge *sg_entry, char *buf, int len, armci_vapi_memhndl_t *mhandle) { memset(rd,0,sizeof(struct ibv_recv_wr)); rd->next = NULL; rd->num_sge = 1; rd->sg_list = sg_entry; rd->wr_id = 0; sg_entry->lkey = mhandle->lkey; sg_entry->addr = (uint64_t)buf; sg_entry->length = len; } void armci_init_vapibuf_send(struct ibv_send_wr *sd, struct ibv_sge *sg_entry, char *buf, int len, armci_vapi_memhndl_t *mhandle) { sd->opcode = IBV_WR_SEND; sd->next = NULL; sd->send_flags = IBV_SEND_SIGNALED; sd->num_sge = 1; sd->sg_list = sg_entry; sg_entry->lkey = mhandle->lkey; sg_entry->addr = (uint64_t)buf; sg_entry->length = len; } static void armci_init_cbuf_srdma(struct ibv_send_wr *sd, struct ibv_sge *sg_entry, char *lbuf, char *rbuf, int len, armci_vapi_memhndl_t *lhandle, armci_vapi_memhndl_t *rhandle) { /* NOTE: sd->wr is a union, sr->wr.ud might conflict with sr->wr.rdma */ sd->opcode = IBV_WR_RDMA_WRITE; sd->send_flags = IBV_SEND_SIGNALED; sd->next = NULL; sd->num_sge = 1; sd->sg_list = sg_entry; if (rhandle) sd->wr.rdma.rkey = rhandle->rkey; sd->wr.rdma.remote_addr = (uint64_t)rbuf; if (lhandle) sg_entry->lkey = lhandle->lkey; sg_entry->addr = (uint64_t)lbuf; sg_entry->length = len; } static void armci_init_cbuf_rrdma(struct ibv_send_wr *sd, struct ibv_sge *sg_entry, char *lbuf, char *rbuf, int len, armci_vapi_memhndl_t *lhandle, armci_vapi_memhndl_t *rhandle) { sd->opcode = IBV_WR_RDMA_READ; sd->next = NULL; sd->send_flags = IBV_SEND_SIGNALED; sd->num_sge = 1; sd->sg_list = sg_entry; sd->wr.ud.remote_qkey = 0; if (rhandle) sd->wr.rdma.rkey = rhandle->rkey; sd->wr.rdma.remote_addr = (uint64_t)rbuf; if (lhandle) sg_entry->lkey = lhandle->lkey; sg_entry->addr = (uint64_t)lbuf; sg_entry->length = len; /* sd->wr is a union, sr->wr.ud might conflict with sr->wr.rdma */ } void armci_server_initial_connection() { int c, rc, i, j; struct ibv_qp_attr qp_attr; struct ibv_qp_init_attr qp_init_attr; struct ibv_qp_cap qp_cap; enum ibv_qp_attr_mask qp_attr_mask; char *enval; struct ibv_recv_wr *bad_wr; if (TIME_INIT) inittime0 = MPI_Wtime(); if (DEBUG_SERVER) { printf("in server after fork %d (%d)\n",armci_me,getpid()); fflush(stdout); } #if defined(PEND_BUFS) && !defined(SERVER_THREAD) armci_pbuf_init_buffer_env(); #endif armci_init_nic(CLN_nic,1,1); if (!armci_openib_server_poll) { /* * Start a notify event request immediately after creation so * nothing is missed. */ rc = ibv_req_notify_cq(CLN_nic->rcq, 0); dassert1(1,rc==0,rc); } _gtmparr[armci_me] = CLN_nic->lid_arr[armci_me]; armci_vapi_server_stage1 = 1; armci_util_wait_int(&armci_vapi_client_stage1, 1, 10); CLN_rqpnumtmpbuf = (uint32_t*)malloc(sizeof(uint32_t)*armci_nproc); dassert(1, CLN_rqpnumtmpbuf); if (!armci_use_odcm) { for (c = 0; c < armci_nproc; c++) { char *ptrr; int extra; armci_connect_t *con = CLN_con + c; armci_create_qp(CLN_nic, &con->qp); con->sqpnum = con->qp->qp_num; con->lid = CLN_nic->lid_arr[c]; CLN_rqpnumtmpbuf[c] = con->qp->qp_num; } } else { for (c = 0; c < armci_nproc; c++) { armci_connect_t *con = CLN_con + c; con->state = QP_INACTIVE; } } armci_vapi_server_stage2 = 1; if (!armci_use_odcm) { qp_attr_mask = IBV_QP_STATE | IBV_QP_PKEY_INDEX | IBV_QP_PORT | IBV_QP_ACCESS_FLAGS; memset(&qp_attr, 0, sizeof qp_attr); qp_attr.qp_state = IBV_QPS_INIT; qp_attr.pkey_index = DEFAULT_PKEY_IX; qp_attr.port_num = CLN_nic->active_port; qp_attr.qp_access_flags = IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ; for (c = 0; c < armci_nproc; c++) { armci_connect_t *con = CLN_con + c; rc = ibv_modify_qp(con->qp, &qp_attr, qp_attr_mask); dassertp(1,!rc,("%d: RTS->INIT server c=%d rc=%d\n",armci_me,c,rc)); } memset(&qp_attr, 0, sizeof qp_attr); qp_attr_mask = IBV_QP_STATE | IBV_QP_MAX_DEST_RD_ATOMIC | IBV_QP_PATH_MTU | IBV_QP_RQ_PSN | IBV_QP_MIN_RNR_TIMER; qp_attr.qp_state = IBV_QPS_RTR; qp_attr.path_mtu = IBV_MTU_1024; qp_attr.max_dest_rd_atomic = 4; qp_attr.min_rnr_timer = RNR_TIMER; qp_attr.rq_psn = 0; for(c = 0; c < armci_nproc; c++) { armci_connect_t *con = CLN_con + c; qp_attr_mask |= IBV_QP_DEST_QPN | IBV_QP_AV; qp_attr.dest_qp_num = SRV_rqpnums[c]; qp_attr.ah_attr.dlid = SRV_nic->lid_arr[c]; qp_attr.ah_attr.port_num = CLN_nic->active_port; rc = ibv_modify_qp(con->qp, &qp_attr, qp_attr_mask); dassertp(1,!rc,("%d: INIT->RTR server cln=%d rc=%d\n",armci_me,c,rc)); } } armci_util_wait_int(&armci_vapi_client_ready,1,10); memset(&qp_attr, 0, sizeof qp_attr); if (!armci_use_odcm) { qp_attr_mask = IBV_QP_STATE | IBV_QP_SQ_PSN | IBV_QP_TIMEOUT | IBV_QP_RETRY_CNT | IBV_QP_RNR_RETRY | IBV_QP_MAX_QP_RD_ATOMIC; qp_attr.qp_state = IBV_QPS_RTS; qp_attr.sq_psn = 0; qp_attr.timeout = 18; qp_attr.retry_cnt = 7; qp_attr.rnr_retry = 7; qp_attr.max_rd_atomic = 4; for (c = 0; c < armci_nproc; c++) { armci_connect_t *con = CLN_con + c; rc = ibv_modify_qp(con->qp, &qp_attr,qp_attr_mask); dassertp(1,!rc,("%d: server RTR->RTS cln=%d rc=%d\n",armci_me,c,rc)); } free(SRV_rqpnums); SRV_rqpnums = NULL; } armci_server_alloc_bufs(); if (!armci_use_odcm) { /* setup descriptors and post nonblocking receives */ #if defined(PEND_BUFS) assert(armci_nproc*(IMM_BUF_NUM+1)dscr, &cbuf->sg_entry, cbuf->buf, IMM_BUF_LEN, &serv_memhandle); /* we use index of the buffer to identify the buffer, this index is * returned with a call to ibv_poll_cq inside the ibv_wr */ cbuf->dscr.wr_id = i*(IMM_BUF_NUM+1)+j + DSCRID_IMMBUF_RECV; if (DEBUG_SERVER) { printf("\n%d(s):posted rr with lkey=%d",armci_me,cbuf->sg_entry.lkey); fflush(stdout); } rc = ibv_post_recv((CLN_con+i)->qp, &cbuf->dscr, &bad_wr); dassert1(1,rc==0,rc); } } #else for(i = 0; i < armci_nproc; i++) { vapibuf_t *cbuf; cbuf = serv_buf_arr[i]; armci_init_vapibuf_recv(&cbuf->dscr, &cbuf->sg_entry, cbuf->buf, CBUF_DLEN, &serv_memhandle); /* we use index of the buffer to identify the buffer, this index is * returned with a call to ibv_poll_cq inside the ibv_wr */ cbuf->dscr.wr_id = i+armci_nproc; if (DEBUG_SERVER) { printf("\n%d(s):posted rr with lkey=%d",armci_me,cbuf->sg_entry.lkey); fflush(stdout); } rc = ibv_post_recv((CLN_con+i)->qp, &cbuf->dscr, &bad_wr); dassert1(1,rc==0,rc); } #endif } if (TIME_INIT) printf("\n%d:post time for server_initial_conn is %f", armci_me, MPI_Wtime() - inittime4); armci_vapi_server_ready=1; if (DEBUG_SERVER) { printf("%d: server connected to all clients\n",armci_me); fflush(stdout); } if (TIME_INIT) printf("\n%d:time for server_initial_conn is %f", armci_me, MPI_Wtime() - inittime0); } static void armci_finalize_nic(vapi_nic_t *nic) { int ret; ret = ibv_destroy_cq(nic->scq); dassert1(1,ret==0,ret); armci_vapi_check_return(DEBUG_FINALIZE,ret,"armci_finalize_nic:destroy_scq"); ret = ibv_destroy_comp_channel(nic->sch); dassert1(1,ret==0,ret); armci_vapi_check_return(DEBUG_FINALIZE,ret,"armci_finalize_nic:destroy_sch"); ret = ibv_destroy_cq(nic->rcq); dassert1(1,ret==0,ret); armci_vapi_check_return(DEBUG_FINALIZE,ret,"armci_finalize_nic:destroy_rcq"); ret = ibv_destroy_comp_channel(nic->rch); dassert1(1,ret==0,ret); armci_vapi_check_return(DEBUG_FINALIZE,ret,"armci_finalize_nic:destroy_rch"); ret = ibv_close_device(nic->handle); dassert1(1,ret==0,ret); armci_vapi_check_return(DEBUG_FINALIZE,ret,"armci_finalize_nic:release_hca"); } void armci_server_transport_cleanup() { int s; int rc; /*first we have empty send/recv queues TBD*/ if(serv_malloc_buf_base){ rc = ibv_dereg_mr(serv_memhandle.memhndl); dassert1(1,rc==0,rc); armci_vapi_check_return(DEBUG_FINALIZE,rc, "armci_server_transport_cleanup:deregister_mr"); /*now free it*/ free(serv_malloc_buf_base); } /*now deregister all my regions from regionskk.c*/ armci_server_region_destroy(); if (CLN_con) { for (s = 0; s < armci_nproc; s++) { armci_connect_t *con = CLN_con + s; if (con->qp) { rc = ibv_destroy_qp(con->qp); armci_vapi_check_return(DEBUG_FINALIZE,rc, "armci_server_transport_cleanup:destroy_qp"); } #if 0 free(con->rqpnum); #endif } free(CLN_con); } armci_finalize_nic(CLN_nic); } void armci_transport_cleanup() { int s; int rc; /*first deregister buffers memory */ if (client_malloc_buf_base) { rc = ibv_dereg_mr(client_memhandle.memhndl); dassert1(1,rc==0,rc); armci_vapi_check_return(DEBUG_FINALIZE,rc,"armci_client_transport_cleanup:deregister_mr"); /*now free it*/ free(client_malloc_buf_base); } /*now deregister all my regions from regions.c*/ armci_region_destroy(); if (SRV_con) { for (s = 0; s < armci_nclus; s++) { armci_connect_t *con = SRV_con + s; if (con->qp) { rc = ibv_destroy_qp(con->qp); dassert1(1,rc==0,rc); armci_vapi_check_return(DEBUG_FINALIZE,rc,"armci_client_transport_cleanup:destroy_qp"); } #if 0 free(con->rqpnum); #endif } free(SRV_con); } armci_finalize_nic(SRV_nic); } /** Post an immediate buffer back for the client to send. */ static void _armci_pendbuf_post_immbuf(vapibuf_t *cbuf, int to) { int rc; struct ibv_recv_wr *bad_wr; #if defined(PEND_BUFS) assert(cbuf->dscr.wr_id == cbuf-serv_buf_arr[0]+DSCRID_IMMBUF_RECV); #endif rc = ibv_post_recv((CLN_con+to)->qp, &(cbuf->dscr), &bad_wr); dassert1(1,rc==0,rc); } #if defined(PEND_BUFS) #define DSCRID_TO_IMMBUFID(x) (x-DSCRID_IMMBUF_RECV) #else #define DSCRID_TO_IMMBUFID(x) ((x)-armci_nproc) #endif #if defined(PEND_BUFS) /**Obtain a message receive buffer to receive a message. Used in place * of MessageRcvBuffer. Should not be used. */ char *armci_openib_get_msg_rcv_buf(int proc) { armci_die("PEND_BUFS in OPENIB: MessageRcvBuffer not available. Should use the in-place buffers to receive data", proc); return NULL; } /** Check that the data is in a server allocated buffer. This is * guaranteed to be pinned. Ideally, this should always be true. Any * operation that request alternative support will have to fix this * function and possibly @armci_openib_get_msg_rcv_buf(). * @param br IN Buffer pointer being checked * @return 1 if it is a server-allocated buffer. 0 otherwise. */ int armci_data_in_serv_buf(void *br) { if(br>=(void *)serv_malloc_buf_base && br<(void *)serv_tail) return 1; if(DEBUG_SERVER) { printf("%d:: serv_bufs=%p<->%p. br=%p out of range\n", armci_me, serv_malloc_buf_base, serv_tail, br); fflush(stdout); } return 0; } #define PBUF_BUFID_TO_PUT_WRID(_pbufid) (DSCRID_PENDBUF+(_pbufid)*2) #define PBUF_BUFID_TO_GET_WRID(_pbufid) (DSCRID_PENDBUF+(_pbufid)*2+1) #define PBUF_WRID_TO_PBUFID(_id) (((_id)-DSCRID_PENDBUF)/2) #define PBUF_IS_GET_WRID(_id) (((_id)-DSCRID_PENDBUF)&1) #define PBUF_IS_PUT_WRID(_id) (!(((_id)-DSCRID_PENDBUF)&1)) /**Complete processing this immediate buffer. Parameters is void *, * since vapibuf_t*|immbuf_t* is not available in armci-vapi.h */ void armci_complete_immbuf(void *buf) { vapibuf_t *cbuf = (vapibuf_t*)buf; request_header_t *msginfo=(request_header_t*)cbuf->buf; #if SRI_CORRECT #error cbuf->send_pending = 0; #else _armci_pendbuf_post_immbuf(cbuf,msginfo->from); #endif armci_data_server(cbuf); if(msginfo->operation==PUT || ARMCI_ACC(msginfo->operation)) { SERVER_SEND_ACK(msginfo->from); } #if SRI_CORRECT if(!cbuf->send_pending) { _armci_pendbuf_post_immbuf(cbuf,msginfo->from); } #endif } /**Complete processing this pending buffer. Parameters is void *, * since vapibuf_t*|immbuf_t* is not available in armci-vapi.h. Note * that the pending buffer may not yet be available for reuse. This * will depend on the state of the pending buffer (which might have to * wait for a communication innitiated by armci_data_server() to * complete. */ void armci_complete_pendbuf(void *buf) { vapibuf_pend_t *pbuf = (vapibuf_pend_t *)buf; request_header_t *msginfo=(request_header_t*)pbuf->buf; assert(pbuf->vbuf); #if SRI_CORRECT pbuf->cbuf->send_pending=0; #else _armci_pendbuf_post_immbuf(pbuf->vbuf,msginfo->from); #endif armci_data_server(pbuf); if(msginfo->operation==PUT || ARMCI_ACC(msginfo->operation)) { SERVER_SEND_ACK(msginfo->from); } #if SRI_CORRECT #error assert(!pbuf->cbuf->send_pending); _armci_pendbuf_post_immbuf(pbuf->cbuf,msginfo->from); #endif } void _armci_get_data_from_client(int proc, struct ibv_send_wr *sdscr, int dscrid, struct ibv_sge *ssg_entry, void *rbuf, void *lbuf, int bytes) ; void _armci_send_data_to_client_pbuf(int proc, struct ibv_send_wr *sdscr, int dscrid, struct ibv_sge *ssg_entry, void *rbuf, void *lbuf, int bytes); int no_srv_copy_nsegs_ulimit() { return armci_max_qp_ous_swr*armci_max_num_sg_ent/10; } /** Initiate a get operation to progress a pending buffer. * @param msginfo Request header for any additional processing * @param src Pointer to src of data (remote for GET) * @param dst Pointer to dst * @param bytes #bytes to transfer * @param proc proc to transfer from(for get)/to(for put) * @param pbufid Index of pending buffer */ void armci_pbuf_start_get(void *msg_info, void *src, void *dst, int bytes, int proc, int pbufid) { struct ibv_send_wr sdscr; struct ibv_sge sg_entry; int wrid = PBUF_BUFID_TO_GET_WRID(pbufid); request_header_t *msginfo=(request_header_t *)msg_info; void armci_server_rdma_contig_to_strided(char *src_ptr, int proc, char *dst_ptr, int dst_stride_arr[], int seg_count[], int stride_levels, request_header_t *msginfo); #if defined(PUT_NO_SRV_COPY) if(msginfo->operation==PUT && msginfo->format==STRIDED && !msginfo->pinned && src==msginfo->tag.data_ptr) { char *loc_ptr, *rem_ptr; int stride_levels, *count; int *loc_stride_arr; char *dscr = (char *)(msginfo+1); ARMCI_MEMHDL_T *mhloc=NULL; int nsegs, i; /* unpack descriptor record */ loc_ptr = *(void**)dscr; dscr += sizeof(void*); stride_levels = *(int*)dscr; dscr += sizeof(int); loc_stride_arr = (int*)dscr; dscr += stride_levels*sizeof(int); count = (int*)dscr; rem_ptr = msginfo->tag.data_ptr; nsegs = 1; for(i=0; ifrom); if(nsegswr_id = dscrid; struct ibv_send_wr *bad_wr; rc = ibv_post_send((CLN_con+proc)->qp, sdscr, &bad_wr); dassert1(1,rc==0,rc); } void _armci_send_data_to_client_pbuf(int proc, struct ibv_send_wr *sdscr, int dscrid, struct ibv_sge *ssg_entry, void *rbuf, void *lbuf, int bytes) { int rc = 0; if(DEBUG_SERVER) { printf("\n%d(s):sending data to client %d at %p flag = %p bytes=%d\n", armci_me, proc,rbuf,(char *)rbuf+bytes-sizeof(int),bytes);fflush(stdout); } memset(sdscr,0,sizeof(struct ibv_send_wr)); armci_init_cbuf_srdma(sdscr,ssg_entry,lbuf,rbuf,bytes, &serv_memhandle,(handle_array+proc)); if(DEBUG_SERVER){ printf("\n%d(s):handle_array[%d]=%p dbuf=%p flag=%p bytes=%d\n",armci_me, proc,&handle_array[proc],(char *)rbuf, (char *)rbuf+bytes-sizeof(int),bytes); fflush(stdout); } sdscr->wr_id = dscrid; struct ibv_send_wr *bad_wr; rc = ibv_post_send((CLN_con+proc)->qp, sdscr, &bad_wr); dassert1(1,rc==0,rc); } #endif #define DATA_SERVER_YIELD_CPU void armci_call_data_server() { int rc = 0; int rc1 = 0; vapibuf_t *cbuf,*cbufs; request_header_t *msginfo,*msg; int c,i,need_ack,pollcount; static int mytag=1; int rrr,serverwcount=0; #ifdef CHANGE_SERVER_AFFINITY cpu_set_t mycpuid,new_mask; char str[CPU_SETSIZE]; char cid[8]; extern char * cpuset_to_cstr(cpu_set_t *mask, char *str); int nslave=armci_clus_info[armci_clus_me].nslave; rrr=sched_getaffinity(0, sizeof(mycpuid), &mycpuid); #endif #if ARMCI_ENABLE_GPC_CALLS unblock_thread_signal(GPC_COMPLETION_SIGNAL); #endif #if defined(PEND_BUFS) armci_pendbuf_init(); #endif for (;;) { struct ibv_wc *pdscr=NULL; struct ibv_wc pdscr1; pdscr = &pdscr1; pdscr->status = IBV_WC_SUCCESS; rc = 0; #ifdef CHANGE_SERVER_AFFINITY static int ccc; serverwcount++; if(serverwcount==100){ serverwcount=0; ccc=(ccc+1)%nslave; sprintf (cid, "%d", ccc); rrr = cstr_to_cpuset(&new_mask,cid); if (sched_setaffinity(0, sizeof (new_mask), &new_mask)) { perror("sched_setaffinity"); printf("failed to set pid %d's affinity.\n", getpid()); } rrr=sched_getaffinity(0, sizeof(mycpuid), &mycpuid); if(rrr)perror("sched_getaffinity"); } #else #ifdef DATA_SERVER_YIELD_CPU_ serverwcount++; if(serverwcount==50){ serverwcount=0;usleep(1); } #endif #endif #if ARMCI_ENABLE_GPC_CALLS block_thread_signal(GPC_COMPLETION_SIGNAL); #endif bzero(pdscr, sizeof(*pdscr)); do { rc = ibv_poll_cq(CLN_nic->rcq, 1, pdscr); if (armci_server_terminating) { /* server is interrupted when clients terminate connections */ armci_server_transport_cleanup(); sleep(1); _exit(0); } if (rc == 0 && !armci_openib_server_poll) { /* wait for a notify event */ rc1 = ibv_get_cq_event(CLN_nic->rch,&CLN_nic->rcq,&CLN_nic->rcq_cntx); dassert1(1,rc1==0,rc1); ibv_ack_cq_events(CLN_nic->rcq, 1); /* re-arm notify event */ rc1 = ibv_req_notify_cq(CLN_nic->rcq, 0); dassert1(1,rc1==0,rc1); /* note: an event receive does not guarantee an actual completion */ continue; } } while (rc == 0); if(DEBUG_SERVER) { printf("\n%d:pdscr=%p %p %d %d %d %d\n",armci_me,pdscr,&pdscr1, pdscr->status,pdscr->opcode,pdscr->vendor_err, pdscr->src_qp); fflush(stdout); } dassertp(1,rc>=0,("%d: rc=%d id=%d status=%d", armci_me,rc,(int)pdscr->wr_id,pdscr->status)); dassert1(1,pdscr->status==IBV_WC_SUCCESS,pdscr->status); if (DEBUG_SERVER) { printf("%d(s) : NEW MESSAGE bytelen %d \n",armci_me,pdscr->byte_len); printf("%d(s) : NEW MESSAGE id is %ld \n",armci_me,pdscr->wr_id); fflush(stdout); } #if defined(PEND_BUFS) if(pdscr->wr_id>=DSCRID_IMMBUF_RESP && pdscr->wr_idwr_id - DSCRID_IMMBUF_RESP; if(id>=0 && idsend_pending==1); serv_buf_arr[id]->send_pending = 0; _armci_pendbuf_post_immbuf(serv_buf_arr[id],dest); } #endif continue; } if (pdscr->wr_id>=DSCRID_PENDBUF && pdscr->wr_idwr_id); /* printf("%d(s) : Progressing pending msg (something completed) pbufid=%d id=%ld byte_len=%d status=%d\n", armci_me, pbufid,pdscr->wr_id,pdscr->byte_len,done_status); */ /* fflush(stdout); */ if(PBUF_IS_GET_WRID(pdscr->wr_id)) armci_pendbuf_done_get(pbufid); else if(PBUF_IS_PUT_WRID(pdscr->wr_id)) armci_pendbuf_done_put(pbufid); else armci_die("Pending buffer op completed. But not PUT or GET!",pdscr->wr_id); continue; } #endif if (pdscr->wr_id >= DSCRID_SCATGAT && pdscr->wr_id < DSCRID_SCATGAT_END) { sr_descr_t *sdscr_arr, *rdscr_arr; if (DEBUG_SERVER) { printf("%d(s) : received SCATGAT DATA id = %ld, length = %d\n", armci_me,pdscr->wr_id, pdscr->byte_len); fflush(stdout); } #if defined(PEND_BUFS) sdscr_arr = armci_vapi_serv_nbsdscr_array; assert(sdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].numofsends>0); sdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].numofsends--; if(sdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].numofsends==0) sdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].tag=0; #else rdscr_arr; rdscr_arr = armci_vapi_serv_nbrdscr_array; rdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].numofrecvs--; if(rdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].numofrecvs==0) rdscr_arr[pdscr->wr_id-DSCRID_SCATGAT].tag=0; #endif continue; } #if defined(PEND_BUFS) assert(pdscr->wr_id>=DSCRID_IMMBUF_RECV && pdscr->wr_idwr_id)]; assert(cbuf->dscr.wr_id == pdscr->wr_id); msginfo = (request_header_t*)cbuf->buf; armci_ack_proc = c = msginfo->from; if (DEBUG_SERVER) { printf("%d(s) : request id is %ld operation is %d, length is %d from=%d cbuf->dscr.wr_id=%d\n", armci_me,pdscr->wr_id,msginfo->operation,pdscr->byte_len,msginfo->from, (int)cbuf->dscr.wr_id); fflush(stdout); } #if defined(PEND_BUFS) cbufs = cbuf; armci_init_vapibuf_recv(&cbufs->dscr, &cbufs->sg_entry,cbufs->buf, IMM_BUF_LEN, &serv_memhandle); cbufs->dscr.wr_id = pdscr->wr_id; #else cbufs = serv_buf_arr[pdscr->wr_id - armci_nproc] = spare_serv_buf; armci_init_vapibuf_recv(&cbufs->dscr, &cbufs->sg_entry,cbufs->buf, CBUF_DLEN, &serv_memhandle); cbufs->dscr.wr_id = c + armci_nproc; spare_serv_buf = cbuf; #endif if(DEBUG_SERVER) { printf("%d(s):Came out of poll id=%ld\n",armci_me,pdscr->wr_id); fflush(stdout); } if(msginfo->operation == PUT &&msginfo->pinned == 1){ int found, num; int stride_arr[MAX_STRIDE_LEVEL]; /*should be MAX_STRIDE_LEVELS*/ int count[MAX_STRIDE_LEVEL]; void *dest_ptr; int stride_levels; ARMCI_MEMHDL_T *loc_memhandle; void armci_post_scatter(void *,int *,int *,int, armci_vapi_memhndl_t *,int,int,int,sr_descr_t **); /*unpack decsriptor_record : should call a function instead */ msg = msginfo + 1; test_ptr = dest_ptr = *(void**)msg; msg = (request_header_t *) ((char*)msg + sizeof(void*)); test_stride_levels=stride_levels = *(int*)msg; msg = (request_header_t *) ((char*)msg + sizeof(int)); for(i =0; iwr_id)); if(DEBUG_SERVER) { printf("%d(s) : about to call armci_post_scatter\n",armci_me); fflush(stdout); } armci_post_scatter(dest_ptr, stride_arr, count, stride_levels, loc_memhandle,msginfo->from, mytag, SERV,NULL ); mytag = (mytag+1)%(MAX_PENDING); if(mytag==0)mytag=1; if(DEBUG_SERVER) { printf("%d(s) : finished posting %d scatter\n",armci_me,num); fflush(stdout); } _armci_pendbuf_post_immbuf(cbufs, msginfo->from); SERVER_SEND_ACK(msginfo->from); need_ack = 0; } else if(msginfo->operation == REGISTER){ if (DEBUG_SERVER) { printf("%d(s) : Register_op id is %d, comp_dscr_id is %ld\n", armci_me,msginfo->operation,pdscr->wr_id); fflush(stdout); } armci_server_register_region(*((void **)(msginfo+1)), *((long *)((char *)(msginfo+1)+sizeof(void *))), (ARMCI_MEMHDL_T *)(msginfo->tag.data_ptr)); _armci_pendbuf_post_immbuf(cbufs, msginfo->from); *(long *)(msginfo->tag.ack_ptr) = ARMCI_STAMP; continue; } else { if(DEBUG_SERVER) { printf("%d(s) : request is %ld about to call armci_data_server\n", armci_me, pdscr->wr_id); fflush(stdout); } #if defined(PEND_BUFS) armci_pendbuf_service_req(cbuf); #else _armci_pendbuf_post_immbuf(cbufs, msginfo->from); armci_data_server(cbuf); if((msginfo->operation == PUT) || ARMCI_ACC(msginfo->operation)) { /* for operations that do not send data back we can send ACK now */ SERVER_SEND_ACK(msginfo->from); need_ack=0; if(DEBUG_SERVER){ printf("%d(s) : posted ack\n\n",armci_me); fflush(stdout); } } else need_ack=1; #endif } if (0) { printf("%d(s):Done processed request\n\n",armci_me); fflush(stdout); } #if ARMCI_ENABLE_GPC_CALLS unblock_thread_signal(GPC_COMPLETION_SIGNAL); #endif }/* end of for */ } void armci_vapi_complete_buf(armci_vapi_field_t *field,int snd,int rcv,int to,int op) { struct ibv_send_wr *snd_dscr; BUF_INFO_T *info; info = (BUF_INFO_T *)((char *)field-sizeof(BUF_INFO_T)); if(info->tag && op==GET)return; if(snd){ request_header_t *msginfo = (request_header_t *)(field+1); snd_dscr=&(field->sdscr); if(mark_buf_send_complete[snd_dscr->wr_id]==0) armci_send_complete(snd_dscr,"armci_vapi_complete_buf",1); } if(rcv){ int *last; long *flag; int loop = 0; request_header_t *msginfo = (request_header_t *)(field+1); flag = (long *)&msginfo->tag.ack; if(op==PUT || ARMCI_ACC(op)){ if(msginfo->bypass && msginfo->pinned && msginfo->format == STRIDED && op == PUT); else{ while(armci_util_long_getval(flag) != ARMCI_STAMP) { loop++; loop %=100000; if(loop==0){ } } } /* printf("%d: client complete_buf. op=%d loop=%d till *flag=ARMCI_STAMP\n", armci_me,op,loop); */ /* fflush(stdout); */ *flag = 0L; } else{ /*SK: I think we get here only for GET with result directly going to client's pinned memory. (info.tag==0 && op==GET)*/ last = (int *)((char *)msginfo+msginfo->datalen-sizeof(int)); while(armci_util_int_getval(last) == ARMCI_STAMP && armci_util_long_getval(flag) != ARMCI_STAMP){ loop++; loop %=100000; if(loop==0){ if(DEBUG_CLN){ printf("%d: client last(%p)=%d flag(%p)=%ld off=%d\n", armci_me,last,*last,flag,*flag,msginfo->datalen); fflush(stdout); } } } } } } void armci_vapi_test_buf(armci_vapi_field_t *field,int snd,int rcv,int to,int op, int *retval) { struct ibv_send_wr *snd_dscr; BUF_INFO_T *info; info = (BUF_INFO_T *)((char *)field-sizeof(BUF_INFO_T)); *retval = 0; if(info->tag && op==GET)return; if(snd){ request_header_t *msginfo = (request_header_t *)(field+1); snd_dscr=&(field->sdscr); if(mark_buf_send_complete[snd_dscr->wr_id]==0) { /* printf("%d: test buf. send not complete\n",armci_me); */ /* fflush(stdout); */ return; } } if(rcv){ int *last; long *flag; int loop = 0; request_header_t *msginfo = (request_header_t *)(field+1); flag = (long *)&msginfo->tag.ack; if(op==PUT || ARMCI_ACC(op)){ if(msginfo->bypass && msginfo->pinned && msginfo->format == STRIDED && op == PUT) *retval=1; else{ if(armci_util_long_getval(flag) == ARMCI_STAMP) { *retval = 1; } } return; } else{ /*SK: I think we get here only for GET with result directly going to client's pinned memory. (info.tag==0 && op==GET)*/ last = (int *)((char *)msginfo+msginfo->datalen-sizeof(int)); if(armci_util_int_getval(last) != ARMCI_STAMP || armci_util_long_getval(flag) == ARMCI_STAMP){ *retval=1; } return; } } } static inline void armci_vapi_post_send(int isclient,int con_offset, struct ibv_send_wr *snd_dscr,char *from) { int rc = 0; vapi_nic_t *nic; armci_connect_t *con; int total = 0; if(!isclient){ nic = CLN_nic; con = CLN_con+con_offset; } else{ nic = SRV_nic; con = SRV_con+con_offset; } if(DEBUG_CLN){ printf("vapi_post_send: snd_dscr->num_sge=%d, snd_dscr->sg_list->length=%d\n", snd_dscr->num_sge, snd_dscr->sg_list->length); fflush(stdout); } /* find the total length of all the segments */ total = snd_dscr->sg_list->length * snd_dscr->num_sge; if(DEBUG_CLN){ printf("%d(c) : total is %d\t, max_size is %d\n",armci_me,total, armci_vapi_max_inline_size); } struct ibv_send_wr *bad_wr; if (total > armci_vapi_max_inline_size) { rc = ibv_post_send(con->qp, snd_dscr, &bad_wr); } else { rc = ibv_post_send(con->qp, snd_dscr, &bad_wr); /* no corresponding call, using ibv_post_send rc = EVAPI_post_inline_sr(nic->handle,con->qp,snd_dscr);*/ } dassert1(1,rc==0,rc); } /** Send request to server. */ int armci_send_req_msg(int proc, void *buf, int bytes) { int cluster = armci_clus_id(proc), i; request_header_t *msginfo = (request_header_t *)buf; struct ibv_send_wr *snd_dscr; struct ibv_sge *ssg_lst; THREAD_LOCK(armci_user_threads.net_lock); check_state_of_ib_connection(proc, 0); snd_dscr = BUF_TO_SDESCR((char *)buf); ssg_lst = BUF_TO_SSGLST((char *)buf); /*Stamp end of buffers as needed*/ if(msginfo->operation == GET && !msginfo->pinned) { const int dscrlen = msginfo->dscrlen; const int datalen = msginfo->datalen; int *last; if(dscrlen < (datalen - sizeof(int))) last = (int*)(((char*)(msginfo+1))+(datalen-sizeof(int))); else last = (int*)(((char*)(msginfo+1))+(dscrlen+datalen-sizeof(int))); *last = ARMCI_STAMP; #ifdef GET_STRIDED_COPY_PIPELINED if(msginfo->format == STRIDED) { const int ssize = GET_STRIDED_COPY_PIPELINED_SIZE/sizeof(int); int *sfirst = (int*)(dscrlen+(char*)(msginfo+1))+ssize; /*stamping can start here*/ int *slast = last, *ptr; for(ptr=sfirst; ptroperation == ACK) { *(int *)(msginfo +1) = ARMCI_STAMP+1; *(((int *)(msginfo +1))+1) = ARMCI_STAMP+1; } #if defined(PEND_BUFS) if((msginfo->operation==PUT || ARMCI_ACC(msginfo->operation)) && bytes > IMM_BUF_LEN) { msginfo->tag.imm_msg=0; assert(sizeof(request_header_t)datalen, IMM_BUF_LEN); assert(bytes==IMM_BUF_LEN||(bytes==sizeof(*msginfo)+msginfo->dscrlen)); } else if(msginfo->operation==GET && !(msginfo->datalen+sizeof(request_header_t)+msginfo->dscrlentag.imm_msg=0; bytes = ARMCI_MIN(sizeof(request_header_t)+msginfo->dscrlen, IMM_BUF_LEN); } #if defined(PUT_NO_SRV_COPY) && 0 /*SK:disabled. Imm msgs are sent inline for latency reasons*/ else if(msginfo->operation==PUT && !msginfo->pinned && msginfo->format==STRIDED && msginfo->tag.data_len>=2048) { msginfo->tag.imm_msg = 0; assert(sizeof(request_header_t)datalen, IMM_BUF_LEN); assert(bytes==IMM_BUF_LEN||(bytes==sizeof(*msginfo)+msginfo->dscrlen)); } #endif else{ msginfo->tag.imm_msg=1; } /* printf("%d: send_req: op=%d bytes=%d data_len=%d imm=%d\n",*/ /* armci_me, msginfo->operation, bytes, msginfo->datalen,msginfo->tag.imm_msg);*/ /* fflush(stdout);*/ if(bytes<0 || bytes>IMM_BUF_LEN) { printf("%d(pid=%d): Trying to send too large a mesg. op=%d bytes=%d(max=%d) to=%d\n", armci_me, getpid(),msginfo->operation,bytes,IMM_BUF_LEN, proc); fflush(stdout); pause(); assert(bytes>=0); assert(bytes <= IMM_BUF_LEN); } _armci_buf_ensure_pend_outstanding_op_per_node(buf,cluster); /* printf("%d: send_req. ensured pend os per node. to=%d op=%d\n", armci_me, msginfo->to,msginfo->operation); */ /* fflush(stdout); */ #else _armci_buf_ensure_one_outstanding_op_per_node(buf,cluster); #endif if(msginfo->operation == PUT || ARMCI_ACC(msginfo->operation)){ #if defined(PEND_BUFS) if(!msginfo->tag.imm_msg){ msginfo->tag.data_ptr = (char *)(msginfo+1)+msginfo->dscrlen; msginfo->tag.data_len = msginfo->datalen; } else msginfo->tag.data_ptr = NULL; #else { msginfo->tag.data_ptr = (void *)&msginfo->tag.ack; } #endif } else { if(msginfo->operation == GET && !msginfo->bypass && msginfo->dscrlen >= (msginfo->datalen-sizeof(int))) msginfo->tag.data_ptr = (char *)(msginfo+1)+msginfo->dscrlen; else msginfo->tag.data_ptr = GET_DATA_PTR(buf); } /*this has to be reset so that we can wait on it see ReadFromDirect*/ msginfo->tag.ack = 0; msginfo->tag.ack_ptr = &(msginfo->tag.ack); if(DEBUG_CLN){ printf("%d:the ack_ptr is initialised to %p, ack->value is %ld\n", armci_me,msginfo->tag.ack_ptr,msginfo->tag.ack);fflush(stdout); } armci_init_vapibuf_send(snd_dscr, ssg_lst,buf, bytes, &client_memhandle); /* printf("%d: Sending req wr_id=%d to=%d\n",armci_me,snd_dscr->wr_id,proc);*/ /* fflush(stdout);*/ armci_vapi_post_send(1,cluster,snd_dscr,"send_req_msg:post_send"); THREAD_UNLOCK(armci_user_threads.net_lock); if(DEBUG_CLN){ printf("%d:client sent REQ=%d %d bytes serv=%d qp=%ld id =%ld lkey=%d\n", armci_me,msginfo->operation,bytes,cluster, (SRV_con+cluster)->qp,snd_dscr->wr_id,ssg_lst->lkey); fflush(stdout); } return(0); } /*\ * client waits for first phase ack before posting gather desr \*/ void armci_wait_ack(char *buffer) { long *flag; request_header_t *msginfo = (request_header_t *)(buffer); flag = (long*)&msginfo->tag.ack; while(armci_util_long_getval(flag) != ARMCI_STAMP); flag = 0; } void armci_client_direct_send(int p,void *src_buf, void *dst_buf, int len,void** contextptr,int nbtag,ARMCI_MEMHDL_T *lochdl,ARMCI_MEMHDL_T *remhdl) { sr_descr_t *dirdscr; int clus = armci_clus_id(p); check_state_of_ib_connection(p, 0); THREAD_LOCK(armci_user_threads.net_lock); /*ID for the desr that comes from get_next_descr is already set*/ dirdscr = armci_vapi_get_next_sdescr(nbtag,0); if(nbtag)*contextptr = dirdscr; armci_init_cbuf_srdma(&dirdscr->sdescr,dirdscr->sg_entry,src_buf,dst_buf, len,lochdl,remhdl); armci_vapi_post_send(1,clus,&(dirdscr->sdescr), "client_direct_send:post_send"); /* the following unlock/lock ensures fairness (in case other threads are waiting on the lock) not required to work */ #if 1 THREAD_UNLOCK(armci_user_threads.net_lock); THREAD_LOCK(armci_user_threads.net_lock); #endif if(nbtag==0) armci_send_complete(&(dirdscr->sdescr),"armci_client_direct_send",1); THREAD_UNLOCK(armci_user_threads.net_lock); } /*\ RDMA get \*/ void armci_client_direct_get(int p, void *src_buf, void *dst_buf, int len, void** cptr,int nbtag,ARMCI_MEMHDL_T *lochdl, ARMCI_MEMHDL_T *remhdl) { int rc = 0; sr_descr_t *dirdscr; int clus = armci_clus_id(p); check_state_of_ib_connection(p, 0); struct ibv_send_wr *bad_wr; THREAD_LOCK(armci_user_threads.net_lock); /*ID for the desr that comes from get_next_descr is already set*/ dirdscr = armci_vapi_get_next_sdescr(nbtag,0); if(nbtag)*cptr = dirdscr; if(DEBUG_CLN){ printf("\n%d: in direct get lkey=%d rkey=%d\n",armci_me,lochdl->lkey, remhdl->rkey);fflush(stdout); } armci_init_cbuf_rrdma(&dirdscr->sdescr,dirdscr->sg_entry,dst_buf,src_buf, len,lochdl,remhdl); rc = ibv_post_send((SRV_con+clus)->qp, &(dirdscr->sdescr), &bad_wr); dassert1(1,rc==0,rc); /* unlock/lock to ensure fairness: allows others thread post before waiting for completion */ /*VT?check to see if this should be UNLOCK followed by lock*/ #if 1 THREAD_UNLOCK(armci_user_threads.net_lock); THREAD_LOCK(armci_user_threads.net_lock); #endif if(!nbtag){ armci_send_complete(&(dirdscr->sdescr),"armci_client_direct_get",1); } THREAD_UNLOCK(armci_user_threads.net_lock); } #define WQE_LIST_LENGTH 32 #define WQE_LIST_COUNT 1 /** Direct put into remote processor memory. Assumes that (and invoked * only when) the source buffers in user memory are pinned as well. * @param operation PUT/GET * @param src_ptr Source pointer for data * @param src_stride_arr Strides on the source array * @param dst_ptr Destination pointer to start writing to * @param seq_count[stride_levels+1] #els in each stride * level. seg_count[0] is contiguous bytes * @param proc Destimation process * @param cptr OUT Pointer to store the descriptor to wait on for completion * @param nbtag IN Non-blocking tag (non-blocking op if nbtag!=0) * @param lochdl IN Local memory handle/key (registered memory stuff) * @param remhdl IN Remote memory handle/key * */ #if 0 void armci_client_direct_rdma_strided(int operation, int proc, char *src_ptr, int src_stride_arr[], char *dst_ptr, int dst_stride_arr[], int seg_count[], int stride_levels, void **cptr, int nbtag, ARMCI_MEMHDL_T *lochdl, ARMCI_MEMHDL_T *remhdl) { int rc; sr_descr_t *dirdscr; const int clus = armci_clus_id(proc); struct ibv_send_wr *bad_wr; struct ibv_send_wr sdscr[WQE_LIST_COUNT][WQE_LIST_LENGTH]; struct ibv_sge sg_entry[WQE_LIST_COUNT][WQE_LIST_LENGTH]; int busy[WQE_LIST_COUNT], wait_count[WQE_LIST_COUNT],clst; int i, j, c, numposts; int idx[MAX_STRIDE_LEVEL]; THREAD_LOCK(armci_user_threads.net_lock); assert(stride_levels >= 0); assert(stride_levels<=MAX_STRIDE_LEVEL); /*ID for the desr that comes from get_next_descr is already set*/ dirdscr = armci_vapi_get_next_sdescr(nbtag,0); if(nbtag)*cptr = dirdscr; assert(dirdscr->tag == nbtag); if(DEBUG_CLN) { printf("\n%d: in direct rdma strided id=%d lkey=%ld rkey=%ld\n", armci_me,dirdscr->sdescr.wr_id,lochdl->lkey,remhdl->rkey);fflush(stdout); } for(c=0; csdescr.wr_id; sdscr[j][i].send_flags = 0; /*non-signalled*/ if(inumofsends=0; bzero(idx, stride_levels*sizeof(int)); int count = (numposts%WQE_LIST_LENGTH) ? (numposts%WQE_LIST_LENGTH):WQE_LIST_LENGTH; assert(count == ARMCI_MIN(count, numposts)); clst=0; for(i=0; i0); armci_send_complete(&dirdscr->sdescr,"client_direct_rdma_strided",wait_count[clst]); dirdscr->numofsends -= wait_count[clst]; busy[clst]=0; wait_count[clst]=0; } if(operation == PUT) { sg_entry[clst][j-i].addr = (uint64_t)(src_ptr + src_offset); sdscr[clst][j-i].wr.rdma.remote_addr = (uint64_t)(dst_ptr + dst_offset); } else if (operation == GET) { sg_entry[clst][j-i].addr = (uint64_t)(dst_ptr + dst_offset); sdscr[clst][j-i].wr.rdma.remote_addr = (uint64_t)(src_ptr + src_offset); } assert(sg_entry[clst][j-i].length == seg_count[0]); idx[0] += 1; for(c=0;cnumofsends += 1; wait_count[clst] = 1; /* armci_send_complete(&dirdscr->sdescr,"armci_client_direct_rdma_strided",count); */ if(count < WQE_LIST_LENGTH) { sdscr[clst][count-1].next=&sdscr[clst][count]; /*reset it*/ } sdscr[clst][count-1].send_flags=0; /*reset it*/ i += count; count = ARMCI_MIN(WQE_LIST_LENGTH,numposts-i); assert(count==0 || count==WQE_LIST_LENGTH); clst = (clst+1)%WQE_LIST_COUNT; } if(!nbtag) { armci_send_complete(&dirdscr->sdescr,"armci_client_direct_get",dirdscr->numofsends); dirdscr->numofsends = 0; dirdscr->tag = 0; } THREAD_UNLOCK(armci_user_threads.net_lock); } #else void armci_client_direct_rdma_strided(int operation, int proc, char *src_ptr, int src_stride_arr[], char *dst_ptr, int dst_stride_arr[], int seg_count[], int stride_levels, void **cptr, int nbtag, ARMCI_MEMHDL_T *lochdl, ARMCI_MEMHDL_T *remhdl) { int rc, i, j, c, busy[WQE_LIST_COUNT], clst, ctr; sr_descr_t *dirdscr; const int clus = armci_clus_id(proc); struct ibv_send_wr *bad_wr; struct ibv_send_wr sdscr[WQE_LIST_COUNT][WQE_LIST_LENGTH]; struct ibv_sge sg_entry[WQE_LIST_COUNT][WQE_LIST_LENGTH]; stride_info_t sinfo, dinfo; THREAD_LOCK(armci_user_threads.net_lock); assert(stride_levels >= 0); assert(stride_levels<=MAX_STRIDE_LEVEL); /*ID for the desr that comes from get_next_descr is already set*/ dirdscr = armci_vapi_get_next_sdescr(nbtag,0); if(nbtag)*cptr = dirdscr; assert(dirdscr->tag == nbtag); if(DEBUG_CLN) { printf("\n%d: in direct rdma strided id=%d lkey=%ld rkey=%ld\n", armci_me,dirdscr->sdescr.wr_id,lochdl->lkey,remhdl->rkey);fflush(stdout); } /*initialize fixed values for descriptors*/ bzero(sdscr, WQE_LIST_COUNT*WQE_LIST_LENGTH*sizeof(struct ibv_send_wr)); bzero(sg_entry, WQE_LIST_COUNT*WQE_LIST_LENGTH*sizeof(struct ibv_sge)); for(j=0; jsdescr.wr_id; sdscr[j][i].send_flags = 0; /*non-signalled*/ if(inumofsends=0; clst=ctr=0; bzero(busy, sizeof(int)*WQE_LIST_COUNT); while(armci_stride_info_has_more(&sinfo)) { assert(armci_stride_info_has_more(&dinfo)); uint64_t saddr = (uint64_t)armci_stride_info_seg_ptr(&sinfo); uint64_t daddr = (uint64_t)armci_stride_info_seg_ptr(&dinfo); if(operation == PUT) { sg_entry[clst][ctr].addr = saddr; sdscr[clst][ctr].wr.rdma.remote_addr = daddr; } else if (operation == GET) { sg_entry[clst][ctr].addr = daddr; sdscr[clst][ctr].wr.rdma.remote_addr = saddr; } assert(sg_entry[clst][ctr].length == seg_count[0]); ctr+=1; armci_stride_info_next(&sinfo); armci_stride_info_next(&dinfo); if(ctr == WQE_LIST_LENGTH || !armci_stride_info_has_more(&sinfo)) { sdscr[clst][ctr-1].next=NULL; sdscr[clst][ctr-1].send_flags=IBV_SEND_SIGNALED; /*only the last one*/ for(c=0; cnumofsends += 1; if(ctrsdescr,"client_direct_rdma_strided",1); dirdscr->numofsends -= 1; busy[clst]=0; } } } armci_stride_info_destroy(&sinfo); armci_stride_info_destroy(&dinfo); if(!nbtag) { armci_send_complete(&dirdscr->sdescr,"armci_client_direct_get",dirdscr->numofsends); dirdscr->numofsends = 0; dirdscr->tag = 0; } THREAD_UNLOCK(armci_user_threads.net_lock); } #endif #if defined(PEND_BUFS) int armci_server_msginfo_to_pbuf_index(request_header_t *msginfo) { int index=-1, i; vapibuf_pend_t *pbuf=NULL; assert(!msginfo->tag.imm_msg); for(i = 0; ioperation == GET); assert(stride_levels >= 0); assert(stride_levels<=MAX_STRIDE_LEVEL); if(!get_armci_region_local_hndl(src_ptr,armci_clus_id(armci_me), &loc_memhdl)) { armci_die("rdma_strided_to_contig: failed to get local handle\n",0); } if(!msginfo->tag.imm_msg) { int index = armci_server_msginfo_to_pbuf_index(msginfo); assert(index>=0); wr_id = PBUF_BUFID_TO_PUT_WRID(index); } else { wr_id = DSCRID_IMMBUF_RESP_END-1-proc; } bzero(&sdscr1, sizeof(sdscr1)); sdscr1.wr_id = wr_id; if(DEBUG_CLN) { printf("\n%d: in rdma strided to contig id=%d lkey=%ld rkey=%ld\n", armci_me,wr_id,loc_memhdl->lkey,rem_memhdl->rkey); fflush(stdout); } /*initialize fixed values for descriptors*/ bzero(sdscr, WQE_LIST_COUNT*WQE_LIST_LENGTH*sizeof(struct ibv_send_wr)); bzero(sg_entry, WQE_LIST_COUNT*WQE_LIST_LENGTH*sizeof(struct ibv_sge)); for(j=0; jfrom); THREAD_UNLOCK(armci_user_threads.net_lock); } #else #define MAX_NUM_SGE 64 /*same as above, but uses gather rdma writes*/ void armci_server_rdma_strided_to_contig(char *src_ptr, int src_stride_arr[], int seg_count[], int stride_levels, char *dst_ptr, int proc, request_header_t *msginfo) { int rc, ctr, wr_id, bytes; struct ibv_send_wr *bad_wr, sdscr1, sdscr; struct ibv_sge sg_entry[MAX_NUM_SGE]; stride_info_t sinfo; uint64_t daddr; ARMCI_MEMHDL_T *loc_memhdl; ARMCI_MEMHDL_T *rem_memhdl = &handle_array[proc]; const int max_num_sge = ARMCI_MIN(MAX_NUM_SGE, armci_max_num_sg_ent); int numposts=0, numsegs=0; THREAD_LOCK(armci_user_threads.net_lock); assert(msginfo->operation == GET); assert(stride_levels >= 0); assert(stride_levels<=MAX_STRIDE_LEVEL); if(!get_armci_region_local_hndl(src_ptr,armci_clus_id(armci_me), &loc_memhdl)) { armci_die("rdma_strided_to_contig: failed to get local handle\n",0); } if(!msginfo->tag.imm_msg) { int index = armci_server_msginfo_to_pbuf_index(msginfo); assert(index>=0); wr_id = PBUF_BUFID_TO_PUT_WRID(index); } else { wr_id = DSCRID_IMMBUF_RESP_END-1-proc; } bzero(&sdscr1, sizeof(sdscr1)); sdscr1.wr_id = wr_id; if(DEBUG_CLN) { printf("\n%d: in rdma strided to contig id=%d lkey=%ld rkey=%ld\n", armci_me,wr_id,loc_memhdl->lkey,rem_memhdl->rkey); fflush(stdout); } /*initialize fixed values for descriptors*/ bzero(&sdscr, sizeof(sdscr)); bzero(sg_entry, max_num_sge*sizeof(struct ibv_sge)); armci_init_cbuf_srdma(&sdscr,&sg_entry[0],NULL,NULL,seg_count[0],loc_memhdl,rem_memhdl); sdscr.send_flags = 0; /*non-signalled*/ sdscr.num_sge = 0; /*set below in the loop*/ sdscr.wr_id = wr_id; for(ctr=0; ctrlkey; } /*post requests in a loop*/ armci_stride_info_init(&sinfo,src_ptr,stride_levels,src_stride_arr,seg_count); numposts = numsegs = 0; ctr=0; daddr = (uint64_t)dst_ptr; bytes=0; while(armci_stride_info_has_more(&sinfo)) { sg_entry[ctr].addr = (uint64_t)armci_stride_info_seg_ptr(&sinfo); assert(sg_entry[ctr].length == seg_count[0]); sdscr.num_sge += 1; bytes += seg_count[0]; ctr+=1; numsegs += 1; armci_stride_info_next(&sinfo); if(ctr == max_num_sge || !armci_stride_info_has_more(&sinfo)) { sdscr.wr.rdma.remote_addr = daddr; if(!armci_stride_info_has_more(&sinfo)) { sdscr.send_flags=IBV_SEND_SIGNALED; /*only the last one*/ } else { assert(sdscr.send_flags == 0); } assert(ctr == sdscr.num_sge); rc = ibv_post_send(CLN_con[proc].qp, &sdscr, &bad_wr); dassert1(1,rc==0,rc); numposts += 1; ctr=0; sdscr.num_sge = 0; daddr += bytes; bytes = 0; } } /* printf("%d(s): scatgat write numposts=%d numsegs=%d\n",armci_me,numposts,numsegs); */ armci_stride_info_destroy(&sinfo); assert(proc == msginfo->from); THREAD_UNLOCK(armci_user_threads.net_lock); } /*Directly read data from client buffers into remote memory. Data is contiguous in client-side. */ void armci_server_rdma_contig_to_strided(char *src_ptr, int proc, char *dst_ptr, int dst_stride_arr[], int seg_count[], int stride_levels, request_header_t *msginfo) { int rc, ctr, wr_id, bytes; struct ibv_send_wr *bad_wr, sdscr1, sdscr; struct ibv_sge sg_entry[MAX_NUM_SGE]; stride_info_t dinfo; uint64_t saddr; ARMCI_MEMHDL_T *loc_memhdl; ARMCI_MEMHDL_T *rem_memhdl = &handle_array[proc]; const int max_num_sge = ARMCI_MIN(MAX_NUM_SGE, armci_max_num_sg_ent); int numposts=0, numsegs=0; THREAD_LOCK(armci_user_threads.net_lock); assert(msginfo->operation == PUT); assert(stride_levels >= 0); assert(stride_levels<=MAX_STRIDE_LEVEL); if(!get_armci_region_local_hndl(dst_ptr,armci_clus_id(armci_me), &loc_memhdl)) { armci_die("rdma_strided_to_contig: failed to get local handle\n",0); } if(!msginfo->tag.imm_msg) { int index = armci_server_msginfo_to_pbuf_index(msginfo); assert(index>=0); wr_id = PBUF_BUFID_TO_GET_WRID(index); } else { wr_id = DSCRID_IMMBUF_RESP_END-1-proc; } bzero(&sdscr1, sizeof(sdscr1)); sdscr1.wr_id = wr_id; if(DEBUG_CLN) { printf("\n%d: in rdma strided to contig id=%d lkey=%ld rkey=%ld\n", armci_me,wr_id,loc_memhdl->lkey,rem_memhdl->rkey); fflush(stdout); } /*initialize fixed values for descriptors*/ bzero(&sdscr, sizeof(sdscr)); bzero(sg_entry, max_num_sge*sizeof(struct ibv_sge)); armci_init_cbuf_rrdma(&sdscr,&sg_entry[0],NULL,NULL,seg_count[0],loc_memhdl,rem_memhdl); sdscr.send_flags = 0; /*non-signalled*/ sdscr.num_sge = 0; /*set below in the loop*/ sdscr.wr_id = wr_id; for(ctr=0; ctrlkey; } /*post requests in a loop*/ armci_stride_info_init(&dinfo,dst_ptr,stride_levels,dst_stride_arr,seg_count); numposts = numsegs = 0; ctr=0; saddr = (uint64_t)src_ptr; bytes=0; while(armci_stride_info_has_more(&dinfo)) { sg_entry[ctr].addr = (uint64_t)armci_stride_info_seg_ptr(&dinfo); assert(sg_entry[ctr].length == seg_count[0]); sdscr.num_sge += 1; bytes += seg_count[0]; ctr+=1; numsegs += 1; armci_stride_info_next(&dinfo); if(ctr == max_num_sge || !armci_stride_info_has_more(&dinfo)) { sdscr.wr.rdma.remote_addr = saddr; if(!armci_stride_info_has_more(&dinfo)) { sdscr.send_flags=IBV_SEND_SIGNALED; /*only the last one*/ } else { assert(sdscr.send_flags == 0); } assert(ctr == sdscr.num_sge); rc = ibv_post_send(CLN_con[proc].qp, &sdscr, &bad_wr); dassert1(1,rc==0,rc); numposts += 1; ctr=0; sdscr.num_sge = 0; saddr += bytes; bytes = 0; } } /* printf("%d(s): scatgat write numposts=%d numsegs=%d\n",armci_me,numposts,numsegs); */ armci_stride_info_destroy(&dinfo); assert(proc == msginfo->from); THREAD_UNLOCK(armci_user_threads.net_lock); } #endif #endif char *armci_ReadFromDirect(int proc, request_header_t *msginfo, int len) { int cluster = armci_clus_id(proc); vapibuf_ext_t* ecbuf=BUF_TO_ECBUF(msginfo); char *dataptr = GET_DATA_PTR(ecbuf->buf); extern void armci_util_wait_int(volatile int *,int,int); if(DEBUG_CLN){ printf("%d(c):read direct %d qp=%p\n",armci_me, len,&(SRV_con+cluster)->qp); fflush(stdout); } if(mark_buf_send_complete[ecbuf->snd_dscr.wr_id]==0) armci_send_complete(&(ecbuf->snd_dscr),"armci_ReadFromDirect",1); if(!msginfo->bypass){ long *flag; int *last; int loop = 0; flag = &(msginfo->tag.ack); if(msginfo->operation==GET){ last = (int *)(dataptr+len-sizeof(int)); if(msginfo->dscrlen >= (len-sizeof(int))){ last = (int *)(dataptr+len+msginfo->dscrlen-sizeof(int)); dataptr+=msginfo->dscrlen; } if(DEBUG_CLN){ printf("\n%d:flagval=%d at ptr=%p ack=%ld dist=%d\n",armci_me,*last, last,*flag,len);fflush(stdout); } while(armci_util_int_getval(last) == ARMCI_STAMP && armci_util_long_getval(flag) != ARMCI_STAMP){ loop++; loop %=100000; if(loop==0){ if(DEBUG_CLN){ printf("%d: client last(%p)=%d flag(%p)=%ld off=%d\n", armci_me,last,*last,flag,*flag,msginfo->datalen); fflush(stdout); } } } *flag = 0L; } else if(msginfo->operation == REGISTER){ while(armci_util_long_getval(flag) != ARMCI_STAMP){ loop++; loop %=100000; if(loop==0){ if(DEBUG_CLN){ printf("%d: client flag(%p)=%ld off=%d\n", armci_me,flag,*flag,msginfo->datalen); fflush(stdout); } } } } else{ int *flg = (int *)(dataptr+len); while(armci_util_int_getval(flg) != ARMCI_STAMP){ loop++; loop %=100000; if(loop==0){ if(DEBUG_CLN){ printf("%d: client waiting (%p)=%d off=%d\n", armci_me,flg,*flg,len); fflush(stdout); } } } } } return dataptr; } #ifdef GET_STRIDED_COPY_PIPELINED /**Same as armci_ReadFromDirect, except reads partial segments * (identify by stamping done in armci_send_req_msg() and * returns. Note that the return value is the starting pointer of the * buffer containig the data. It is the same for all the segments * read for a message. * @param proc IN Read data corresponding to an earlier req to this proc * @param msginfo IN The request for which we are reading now * @param len IN #bytes in the total response * @param bytes_done OUT @bytes of the total response read so far (monotonic) * @return Starting pointer to the buffer containing the data */ char *armci_ReadFromDirectSegment(int proc, request_header_t *msginfo, int len, int *bytes_done) { int cluster = armci_clus_id(proc); vapibuf_ext_t* ecbuf=BUF_TO_ECBUF(msginfo); char *dataptr = GET_DATA_PTR(ecbuf->buf); extern void armci_util_wait_int(volatile int *,int,int); if(DEBUG_CLN){ printf("%d(c):read direct %d qp=%p\n",armci_me, len,&(SRV_con+cluster)->qp); fflush(stdout); } if(mark_buf_send_complete[ecbuf->snd_dscr.wr_id]==0) armci_send_complete(&(ecbuf->snd_dscr),"armci_ReadFromDirect",1); if(!msginfo->bypass){ long *flag; int *last, *mid1, *mid2, third; int loop = 0; flag = &(msginfo->tag.ack); if(msginfo->operation==GET){ last = (int *)(dataptr+len-sizeof(int)); if(msginfo->dscrlen >= (len-sizeof(int))){ last = (int *)(dataptr+len+msginfo->dscrlen-sizeof(int)); dataptr+=msginfo->dscrlen; } third = (last-(int*)(msginfo->dscrlen+(char*)(msginfo+1)))/3; mid2 = (last - third); mid1 = mid2 - third; if(DEBUG_CLN){ printf("\n%d:flagval=%d at ptr=%p ack=%ld dist=%d\n",armci_me,*last, last,*flag,len);fflush(stdout); } while(armci_util_int_getval(last) == ARMCI_STAMP && armci_util_long_getval(flag) != ARMCI_STAMP){ loop++; loop %=100000; if(loop==0){ if(DEBUG_CLN){ printf("%d: client last(%p)=%d flag(%p)=%ld off=%d\n", armci_me,last,*last,flag,*flag,msginfo->datalen); fflush(stdout); } } { int ssize = GET_STRIDED_COPY_PIPELINED_SIZE/sizeof(int); int *sfirst = (int*)(msginfo->dscrlen+(char*)(msginfo+1))+ssize; /*stamping can start here*/ int *slast = last; int off = (((int *)(dataptr+*bytes_done)-sfirst+ssize)/ssize)*ssize; int *ptr = sfirst+off; dassert(1,off>=0); dassert(1,(void *)sfirst>dataptr); dassert(1,(void *)ptr>dataptr); if(ptr<=slast && armci_util_int_getval(ptr)!=ARMCI_STAMP) { *bytes_done = ((char*)ptr)-dataptr; return dataptr; } } } *flag = 0L; *bytes_done = len; return dataptr; } else if(msginfo->operation == REGISTER){ while(armci_util_long_getval(flag) != ARMCI_STAMP){ loop++; loop %=100000; if(loop==0){ if(DEBUG_CLN){ printf("%d: client flag(%p)=%ld off=%d\n", armci_me,flag,*flag,msginfo->datalen); fflush(stdout); } } } } else{ int *flg = (int *)(dataptr+len); while(armci_util_int_getval(flg) != ARMCI_STAMP){ loop++; loop %=100000; if(loop==0){ if(DEBUG_CLN){ printf("%d: client waiting (%p)=%d off=%d\n", armci_me,flg,*flg,len); fflush(stdout); } } } } } *bytes_done = len; return dataptr; } #endif /** * @param proc IN id of remote client to put to * @param buf IN local buf (has to be registered) */ void armci_send_data_to_client(int proc, void *buf, int bytes,void *dbuf) { int i, rc = 0; struct ibv_send_wr *bad_wr; struct ibv_send_wr sdscr; struct ibv_sge ssg_entry; if(DEBUG_SERVER){ printf("\n%d(s):sending data to client %d at %p flag = %p bytes=%d\n", armci_me, proc,dbuf,(char *)dbuf+bytes-sizeof(int),bytes);fflush(stdout); } memset(&sdscr,0,sizeof(struct ibv_send_wr)); memset(&ssg_entry,0,sizeof(ssg_entry)); armci_init_cbuf_srdma(&sdscr,&ssg_entry,buf,dbuf,bytes, &serv_memhandle,(handle_array+proc)); if(DEBUG_SERVER){ printf("\n%d(s):handle_array[%d]=%p dbuf=%p flag=%p bytes=%d\n",armci_me, proc,&handle_array[proc],(char *)dbuf, (char *)dbuf+bytes-sizeof(int),bytes); fflush(stdout); } #if defined(PEND_BUFS) for(i=proc*(IMM_BUF_NUM+1); i<(proc+1)*(IMM_BUF_NUM+1); i++) { if((char*)buf>= serv_buf_arr[i]->buf && (char*)bufbuf) break; } #if SRI_CORRECT if(i<(proc+1)*(IMM_BUF_NUM+1)) { /*Message from an immediate buffer*/ assert(serv_buf_arr[i]->send_pending==0); serv_buf_arr[i]->send_pending=1; sdscr.wr_id = DSCRID_IMMBUF_RESP+i; } else #endif { sdscr.wr_id = DSCRID_IMMBUF_RESP+armci_nproc*(IMM_BUF_NUM+1)+1; } /* #endif */ /* #if defined(PEND_BUFS) */ /* { */ /* static uint64_t ctr=DSCRID_IMMBUF_RESP; */ /* sdscr.wr_id = ctr; */ /* ctr = (ctr+1-DSCRID_IMMBUF_RESP)%(DSCRID_IMMBUF_RESP_END-DSCRID_IMMBUF_RESP)+DSCRID_IMMBUF_RESP; */ /* } */ #else sdscr.wr_id = proc+armci_nproc; #endif rc = ibv_post_send((CLN_con+proc)->qp, &sdscr, &bad_wr); dassert1(1,rc==0,rc); #if !defined(PEND_BUFS) armci_send_complete(&sdscr,"armci_send_data_to_client",1); #endif } void armci_WriteToDirect(int proc, request_header_t* msginfo, void *buf) { int bytes; int *last; ARMCI_PR_DBG("enter",0); bytes = (int)msginfo->datalen; if(DEBUG_SERVER){ printf("%d(s):write to direct sent %d to %d at %p\n",armci_me, bytes,proc,(char *)msginfo->tag.data_ptr); fflush(stdout); } if(msginfo->operation!=GET){ *(int *)((char *)buf+bytes)=ARMCI_STAMP; bytes+=sizeof(int); } #if defined(PEND_BUFS) if(!msginfo->tag.imm_msg) { int i; /* fprintf(stderr, "%d:: Not immediate mesg operated on\n", armci_me); */ assert(msginfo->operation == GET); /*nothing else uses this for now*/ /**This is a pending buf*/ vapibuf_pend_t *pbuf=NULL; int index; for(i = 0; idscrlen+bytessdscr, PBUF_BUFID_TO_PUT_WRID(index), &pbuf->sg_entry, msginfo->tag.data_ptr, buf, bytes); } else #endif { armci_send_data_to_client(proc,buf,bytes,msginfo->tag.data_ptr); } /*if(msginfo->dscrlen >= (bytes-sizeof(int))) last = (int*)(((char*)(buf)) + (msginfo->dscrlen+bytes - sizeof(int))); else*/ last = (int*)(((char*)(buf)) + (bytes - sizeof(int))); if(msginfo->operation==GET && *last == ARMCI_STAMP){ SERVER_SEND_ACK(msginfo->from); } armci_ack_proc=NONE; ARMCI_PR_DBG("exit",0); } #if defined(PEND_BUFS) void armci_rcv_req(void *mesg,void *phdr,void *pdescr,void *pdata,int *buflen) { request_header_t *msginfo = *(request_header_t**)mesg; *(void **)phdr = msginfo; if(msginfo->tag.imm_msg) *buflen = IMM_BUF_LEN - sizeof(request_header_t) - msginfo->dscrlen; else *buflen = PENDING_BUF_LEN - sizeof(request_header_t) - msginfo->dscrlen; *(void **)pdata = msginfo->dscrlen + (char *)(msginfo+1); if(msginfo->bytes) *(void **)pdescr = msginfo+1; else *(void **)pdescr = NULL; } #else void armci_rcv_req(void *mesg,void *phdr,void *pdescr,void *pdata,int *buflen) { vapibuf_t *cbuf = (vapibuf_t*)mesg; request_header_t *msginfo = (request_header_t *)cbuf->buf; *(void **)phdr = msginfo; ARMCI_PR_DBG("enter",msginfo->operation); if(DEBUG_SERVER){ printf("%d(server): got %d req (dscrlen=%d datalen=%d) from %d\n", armci_me, msginfo->operation, msginfo->dscrlen, msginfo->datalen, msginfo->from); fflush(stdout); } /* we leave room for msginfo on the client side */ *buflen = MSG_BUFLEN - sizeof(request_header_t); if(msginfo->bytes) { *(void **)pdescr = msginfo+1; if(msginfo->operation == GET) *(void **)pdata = MessageRcvBuffer; else *(void **)pdata = msginfo->dscrlen + (char*)(msginfo+1); }else { *(void**)pdescr = NULL; *(void**)pdata = MessageRcvBuffer; } ARMCI_PR_DBG("exit",msginfo->operation); } #endif static void posts_scatter_desc(sr_descr_t *pend_dscr,int proc,int type) { int rc; int cluster = armci_clus_id(proc); struct ibv_recv_wr *scat_dscr; struct ibv_recv_wr *bad_wr; scat_dscr = &pend_dscr->rdescr; /*armci_vapi_print_dscr_info(NULL,scat_dscr);*/ if((type==SERV && DEBUG_SERVER) || (type==CLN && DEBUG_CLN)){ printf("%d(%d) : inside posts scatter dscr, id is %d\n", armci_me,type,scat_dscr->wr_id); fflush(stdout); } if(type == SERV) rc = ibv_post_recv((CLN_con + proc)->qp, scat_dscr, &bad_wr); else rc = ibv_post_recv((SRV_con+cluster)->qp, scat_dscr, &bad_wr); dassert1(1,rc==0,rc); if((type==SERV && DEBUG_SERVER) || (type==CLN && DEBUG_CLN) ) { printf("\n%d: list_length is %d, id is %ld\n", armci_me,scat_dscr->num_sge,scat_dscr->wr_id); fflush(stdout); } } /*\ * client calls from request.c * server calls from ds-shared.c \*/ static sr_descr_t serv_blocking_scatter_dscr; static sr_descr_t client_blocking_scatter_dscr; void armci_post_scatter(void *dest_ptr, int dest_stride_arr[], int count[], int stride_levels, armci_vapi_memhndl_t *mhandle, int proc, int nbtag, int type, sr_descr_t **srd) { int i; int total_size = 0; int total_of_2D = 1; int index[MAX_STRIDE_LEVEL], unit[MAX_STRIDE_LEVEL]; int j,k,y,z; int num_dscr = 0; int num_xmit = 0, num_seg, max_seg, rem_seg,vecind; char* src, *src1; sr_descr_t *pend_dscr; struct ibv_sge *scat_sglist; struct ibv_recv_wr *scat_dscr; if((type==SERV && DEBUG_SERVER) || (type==CLN && DEBUG_CLN) ){ printf("%d(%d) : inside post_scatter %d\n",armci_me,type,nbtag); fflush(stdout); } max_seg = armci_max_num_sg_ent; THREAD_LOCK(armci_user_threads.net_lock); if(nbtag){ pend_dscr = armci_vapi_get_next_rdescr(nbtag,1); if(srd!=NULL)*srd=pend_dscr; } else{ pend_dscr = &client_blocking_scatter_dscr; pend_dscr->rdescr.wr_id=DSCRID_SCATGAT + MAX_PENDING; } /*pend_dscr->proc = proc;*/ pend_dscr->numofrecvs=0; scat_dscr = &pend_dscr->rdescr; scat_sglist = pend_dscr->sg_entry; /* scat_dscr->opcode = VAPI_RECEIVE; no ->opcode in ibv_recv_wr */ /* scat_dscr->comp_type = VAPI_SIGNALED; no ->comp_type in ibv_recv_wr */ scat_dscr->sg_list = scat_sglist; scat_dscr->num_sge = 0; index[2] = 0; unit[2] = 1; if(stride_levels > 1){ total_of_2D = count[2]; for(j=3; j<=stride_levels; j++){ index[j] = 0; unit[j] = unit[j-1]*count[j-1]; total_of_2D*=count[j]; } } num_xmit = total_of_2D*count[1]/max_seg; rem_seg = (total_of_2D*count[1])%max_seg; if(num_xmit == 0) num_xmit = 1; else if(rem_seg!= 0)num_xmit++; if ((type==SERV && DEBUG_SERVER) || (type==CLN && DEBUG_CLN) ) { printf("%d(%d):armci_post_scatter num_xmit = %d\t, rem_seg = %d\n", armci_me,type,num_xmit,rem_seg); fflush(stdout); } k=0; vecind = 0; if(rem_seg!=0 && k==(num_xmit-1))num_seg = rem_seg; else num_seg = max_seg; y=0,z=0; for(i=0;i= count[j]) index[j] =0; } src1 = src; for(j=0; jnumofrecvs++; /* the previous one has been posted, start off new*/ scat_dscr->num_sge = 0; y = 0; /* reuse the same scatter descriptor */ vecind=0;total_size=0;k++; if(rem_seg!=0 && k==(num_xmit-1))num_seg = rem_seg; } /* fill the scatter descriptor */ scat_sglist[y].addr = (uint64_t)src1; scat_sglist[y].lkey = mhandle->lkey; scat_sglist[y].length = count[0]; scat_dscr->num_sge++; src1 += dest_stride_arr[0]; y++; } if(vecind == num_seg){ posts_scatter_desc(pend_dscr,proc,type); pend_dscr->numofrecvs++; /* the previous one has been posted, start off new*/ scat_dscr->num_sge = 0; y =0 ; vecind = 0; total_size=0; k++; if(rem_seg!=0 && k==(num_xmit-1))num_seg=rem_seg; else num_seg = max_seg; } } THREAD_UNLOCK(armci_user_threads.net_lock); /* printf("%d(s): num scatters posted=%d\n", armci_me,pend_dscr->numofrecvs); */ if(!nbtag){ /*if blocking call wait_for_blocking_scatter to complete*/ } return; } void armci_wait_for_blocking_scatter() { sr_descr_t *pend_dscr=&client_blocking_scatter_dscr; int i; armci_recv_complete(&pend_dscr->rdescr,"armci_post_scatter",pend_dscr->numofrecvs); } /*\ * function used by armci_post_gather to actually post the sctter list \*/ static void posts_gather_desc(sr_descr_t *pend_dscr,int proc,int type) { int rc; int cluster = armci_clus_id(proc); struct ibv_send_wr *gat_dscr; struct ibv_send_wr *bad_wr; THREAD_LOCK(armci_user_threads.net_lock); gat_dscr = &pend_dscr->sdescr; /*armci_vapi_print_dscr_info(gat_dscr,NULL);*/ if((type==SERV && DEBUG_SERVER) || (type==CLN && DEBUG_CLN)){ printf("%d: type(client=1)=%d inside posts gather dscr, id is %d\n", armci_me,type,gat_dscr->wr_id); fflush(stdout); } rc = 0; if(type == CLN){ rc = ibv_post_send((SRV_con+cluster)->qp, gat_dscr, &bad_wr); } else{ rc = ibv_post_send((CLN_con + proc)->qp, gat_dscr, &bad_wr); } dassert1(1,rc==0,rc); THREAD_UNLOCK(armci_user_threads.net_lock); } /*\ * posts a bunch of gather descriptors \*/ static sr_descr_t serv_blocking_gather_dscr; static sr_descr_t client_blocking_gather_dscr; void armci_post_gather(void *src_ptr, int src_stride_arr[], int count[], int stride_levels, armci_vapi_memhndl_t *mhandle, int proc,int nbtag, int type, sr_descr_t **srd) { int i; int total_of_2D = 1; int total_size = 0; int index[MAX_STRIDE_LEVEL], unit[MAX_STRIDE_LEVEL]; int j,k,y,z; int num_posted = 0; char *src, *src1; int num_xmit = 0, num_seg, max_seg, rem_seg,vecind; sr_descr_t *pend_dscr; struct ibv_sge *gat_sglist; struct ibv_send_wr *gat_dscr; if((type==SERV && DEBUG_SERVER) || (type==CLN && DEBUG_CLN)){ printf("%d(%d) : inside post_gather\n",armci_me,type); fflush(stdout); } max_seg = armci_max_num_sg_ent; if(nbtag){ pend_dscr = armci_vapi_get_next_sdescr(nbtag,1); if(srd!=NULL)*srd=pend_dscr; } else{ pend_dscr = &client_blocking_gather_dscr; pend_dscr->sdescr.wr_id=DSCRID_SCATGAT + MAX_PENDING; } pend_dscr->numofsends=0; gat_dscr = &pend_dscr->sdescr; gat_sglist = pend_dscr->sg_entry; gat_dscr->opcode = IBV_WR_SEND; gat_dscr->send_flags = IBV_SEND_SIGNALED; gat_dscr->sg_list = gat_sglist; gat_dscr->num_sge = 0; /* gat_dscr->send_flags = 0; */ index[2] = 0; unit[2] = 1; if(stride_levels > 1){ total_of_2D = count[2]; for(j=3; j<=stride_levels; j++){ index[j] = 0; unit[j] = unit[j-1]*count[j-1]; total_of_2D*=count[j]; } } num_xmit = total_of_2D*count[1]/max_seg; rem_seg = (total_of_2D*count[1])%max_seg; if(num_xmit == 0) num_xmit = 1; else if(rem_seg!= 0)num_xmit++; if((type==SERV && DEBUG_SERVER) || (type==CLN && DEBUG_CLN) ){ printf("%d(%d):armci_post_gather total_2D=%d, num_xmit=%d, rem_seg =%d, count[1] = %d\n",armci_me,type,total_of_2D, num_xmit,rem_seg,count[1]); fflush(stdout); } k=0; vecind = 0; if(rem_seg!=0 && k==(num_xmit-1))num_seg = rem_seg; else num_seg = max_seg; y=0,z=0; for(i=0;i= count[j]) index[j] =0; } src1 = src; for(j=0; jnumofsends++; /* the previous one has been posted, start off new*/ gat_dscr->num_sge = 0; y = 0; vecind=0;total_size=0;k++; if(rem_seg!=0 && k==(num_xmit-1))num_seg = rem_seg; } /* fill the gather descriptor */ gat_sglist[y].addr = (uint64_t)src1; gat_sglist[y].lkey = mhandle->lkey; gat_sglist[y].length = count[0]; gat_dscr->num_sge++; src1 += src_stride_arr[0]; y++; } if(vecind == num_seg){ posts_gather_desc(pend_dscr,proc,type); pend_dscr->numofsends++; if((type==SERV && DEBUG_SERVER) || (type==CLN && DEBUG_CLN) ){ printf("%d(%d)posts_gather_desc done\n",armci_me,type); fflush(stdout); } /* the previous one has been posted, start off new*/ gat_dscr->num_sge = 0; y = 0; vecind = 0; total_size=0; k++; if(rem_seg!=0 && k==(num_xmit-1))num_seg=rem_seg; else num_seg = max_seg; } } /* printf("%d: num gathers posted =%d\n",armci_me,pend_dscr->numofsends); */ if(!nbtag){ /*complete here*/ armci_send_complete(&pend_dscr->sdescr,"armci_post_gather",pend_dscr->numofsends); } return; } /***********************END SCATTER GATHER STUFF******************************/ /***********************SPECIAL SEND/RECV*************************************/ void armci_server_direct_send(int dst, char *src_buf, char *dst_buf, int len, uint32_t *lkey, uint32_t *rkey) { int rc = 0; struct ibv_wc *pdscr=NULL; struct ibv_wc pdscr1; struct ibv_send_wr sdscr; struct ibv_sge ssg_entry; pdscr = &pdscr1; if(DEBUG_SERVER){ printf("\n%d(s):sending dir data to client %d at %p bytes=%d last=%p\n", armci_me,dst,dst_buf,len,(dst_buf+len-4));fflush(stdout); } memset(&sdscr,0,sizeof(struct ibv_send_wr)); armci_init_cbuf_srdma(&sdscr,&ssg_entry,src_buf,dst_buf,len,NULL,NULL); sdscr.wr.rdma.rkey = *rkey; ssg_entry.lkey = *lkey; sdscr.wr_id = dst+armci_nproc; struct ibv_send_wr *bad_wr; rc = ibv_post_send((CLN_con+dst)->qp, &sdscr, &bad_wr); dassert1(1,rc==0,rc); while (rc == 0) { rc = ibv_poll_cq(CLN_nic->scq, 1, pdscr); } dassertp(1,rc>=0,("%d: rc=%d id=%d status=%d\n", armci_me,rc,(int)pdscr->wr_id,pdscr->status)); dassert1(1,pdscr->status==IBV_WC_SUCCESS,pdscr->status);; } void armci_send_contig_bypass(int proc, request_header_t *msginfo, void *src_ptr, void *rem_ptr, int bytes) { int *last; uint32_t *lkey=NULL; uint32_t *rkey; int dscrlen = msginfo->dscrlen; last = (int*)(((char*)(src_ptr)) + (bytes - sizeof(int))); dassertp(1,msginfo->pinned,("%d: not pinned proc=%d",armci_me,proc)); rkey = (uint32_t *)((char *)(msginfo+1)+dscrlen-(sizeof(uint32_t)+sizeof(uint32_t))); if(DEBUG_SERVER){ printf("%d(server): sending data bypass to %d (%p,%p) %d %d\n", armci_me, msginfo->from,src_ptr, rem_ptr,*lkey,*rkey); fflush(stdout); } armci_server_direct_send(msginfo->from,src_ptr,rem_ptr,bytes,lkey,rkey); if(*last == ARMCI_STAMP){ SERVER_SEND_ACK(msginfo->from); } } void armci_rcv_strided_data_bypass_both(int proc, request_header_t *msginfo, void *ptr, int *count, int stride_levels) { int datalen = msginfo->datalen; int *last; long *ack; int loop=0; if(DEBUG_CLN){ printf("%d:rcv_strided_data_both bypass from %d\n", armci_me, proc); fflush(stdout); } if(!stride_levels){ last = (int*)(((char*)(ptr)) + (count[0] -sizeof(int))); ack = (long *)&msginfo->tag; while(armci_util_int_getval(last) == ARMCI_STAMP && armci_util_long_getval(ack) != ARMCI_STAMP){ loop++; loop %=1000000; if(loop==0){ if(DEBUG_CLN){ printf("%d: client last(%p)=%d ack(%p)=%ld off=%d\n", armci_me,last,*last,ack,*ack,(int)((char*)last - (char*)ptr)); fflush(stdout); } } } } else { printf("\n%d:rcv_strided_data called, it should never be called\n",armci_me); armci_dscrlist_recv_complete(0,"armci_rcv_strided_data_bypass_both",NULL); } if(DEBUG_CLN){printf("%d:rcv_strided_data bypass both: %d bytes from %d\n", armci_me, datalen, proc); fflush(stdout); } } int armci_pin_memory(void *ptr, int stride_arr[], int count[], int strides) { fprintf(stderr, "[%d]:armci_pin_memory not implemented\n",armci_me); fflush(stderr); return 0; } void armci_client_send_ack(int proc, int n) { printf("\n%d:client_send_ack not implemented",armci_me);fflush(stdout); } void armci_rcv_strided_data_bypass(int proc, request_header_t* msginfo, void *ptr, int stride_levels) { printf("\n%d:armci_rcv_strided_data_bypass not implemented",armci_me); fflush(stdout); } void armci_unpin_memory(void *ptr, int stride_arr[], int count[], int strides) { printf("\n%d:armci_unpin_memory not implemented",armci_me);fflush(stdout); } int armcill_server_wait_ack(int proc, int n) { printf("\n%d:armcill_server_wait_ack not implemented",armci_me); fflush(stdout); return(0); } void armcill_server_put(int proc, void* s, void *d, int len) { printf("\n%d:armcill_server_put not implemented",armci_me);fflush(stdout); } /*\ * initialising the atomic send descriptor \*/ void armci_init_vapibuf_atomic(struct ibv_send_wr *sd, struct ibv_sge *sg, int op, int*ploc,int *prem, int extra, int id,ARMCI_MEMHDL_T *lhandle, ARMCI_MEMHDL_T *rhandle) { if (1) { printf("%d(c) : entered armci_init_vapibuf_atomic\n",armci_me); fflush(stdout); } memset(sd,0,sizeof(struct ibv_send_wr)); if (op == ARMCI_FETCH_AND_ADD_LONG ) { printf("%d(c) :setting opcode for snd dscr to FETCH_AND_ADD\n",armci_me); sd->opcode = IBV_WR_ATOMIC_FETCH_AND_ADD; sd->wr.atomic.compare_add = (uint64_t)extra; } else if(op == ARMCI_SWAP_LONG){ sd->opcode = IBV_WR_ATOMIC_CMP_AND_SWP; sd->wr.atomic.swap = (uint64_t)extra; } sd->send_flags = IBV_SEND_SIGNALED; sg->length = 8; /* 64 bit atomic*/ printf("--------\n"); sg->addr= (uint64_t)(void *)ploc; if(lhandle) sg->lkey = lhandle->lkey; sd->sg_list = sg; sd->num_sge = 1; sd->wr.atomic.remote_addr = (uint64_t)(void *)prem; if(rhandle) sd->wr.atomic.rkey = rhandle->rkey; /* how do we get the remote key */ sd->wr_id = DSCRID_RMW + armci_me; if(1){ printf("%d(c) : finished initialising atomic send desc id is %ld,armci_ime = %d\n",armci_me,sd->wr_id,armci_me); fflush(stdout); } } /*\ * using vapi remote atomic operations \*/ void client_rmw_complete(struct ibv_send_wr *snd_dscr, char *from) { int rc = 0; struct ibv_wc pdscr1; struct ibv_wc *pdscr=&pdscr1; printf("%d(c) : inside client_rmw_complete\n",armci_me); do { while (rc == 0) { rc = ibv_poll_cq(CLN_nic->scq, 1, pdscr); } dassertp(DBG_POLL|DBG_ALL,rc>=0, ("%d: rc=%d id=%d status=%d\n", armci_me,rc,pdscr->wr_id,pdscr->status)); dassert1(1,pdscr->status==IBV_WC_SUCCESS,pdscr->status); rc = 0; } while(pdscr->wr_id != snd_dscr->wr_id); } void armci_direct_rmw(int op, int*ploc, int *prem, int extra, int proc, ARMCI_MEMHDL_T *lhandle, ARMCI_MEMHDL_T *rhandle) { int rc = 0; struct ibv_send_wr *sd; struct ibv_sge *sg; vapi_nic_t *nic; armci_connect_t *con; nic = SRV_nic; con = CLN_con+proc; sd = &(rmw[armci_me].rmw_dscr); sg = &(rmw[armci_me].rmw_entry); if (1) { printf("%d(c) : about to call armci_init_vapibuf_atomic\n",armci_me); fflush(stdout); } armci_init_vapibuf_atomic(sd, sg, op,ploc,prem,extra,proc,lhandle,rhandle); if (1) { printf("%d(c) : finished armci_init_vapibuf_atomic\n",armci_me); fflush(stdout); } struct ibv_send_wr * bad_wr; rc = ibv_post_send(con->qp, sd, &bad_wr); dassert1(1,rc==0,rc); if (1) { printf("%d(c) : finished posting desc\n",armci_me); fflush(stdout); } /*armci_send_complete(sd,"send_remote_atomic");*/ client_rmw_complete(sd,"send_remote_atomic"); return; } struct node *dto_q = NULL; void process_con_break_from_client(armci_ud_rank *h, cbuf *v) { struct ibv_qp_attr qp_attr; struct ibv_qp_init_attr qp_init_attr; struct ibv_qp_cap qp_cap; enum ibv_qp_attr_mask qp_attr_mask; char *enval; struct ibv_recv_wr *bad_wr; int rc, j; armci_connect_t *con = CLN_con + h->src_rank; cbuf *v1 = get_cbuf(); assert( v1 != NULL); v1->desc.u.sr.wr.ud.remote_qpn = rbuf.qp_num[h->src_rank]; v1->desc.u.sr.wr.ud.remote_qkey = 0; v1->desc.u.sr.wr.ud.ah = conn.ud_ah[h->src_rank]; armci_ud_rank *h1 = (armci_ud_rank *)CBUF_BUFFER_START(v1); h1->src_rank = armci_me; h1->qpnum = con->sqpnum; h1->msg_type = QP_CON_BREAK_FROM_SERVER; cbuf_init_send(v1, sizeof(armci_ud_rank)); /* Release the receiving cbuf */ release_cbuf(v); struct ibv_send_wr *send_wr; if(ibv_post_send(conn.qp[0], &(v1->desc.u.sr), &send_wr)) { fprintf(stderr, "Error posting send\n"); } } void process_con_break_from_server(armci_ud_rank *h, cbuf *v) { int rc, j; armci_connect_t *con = SRV_con + armci_clus_id(h->src_rank); con->state = QP_INACTIVE; release_cbuf(v); } void process_recv_completion_from_client(armci_ud_rank *h, cbuf *v) { struct ibv_qp_attr qp_attr; struct ibv_qp_init_attr qp_init_attr; struct ibv_qp_cap qp_cap; enum ibv_qp_attr_mask qp_attr_mask; char *enval; struct ibv_recv_wr *bad_wr; int rc, j; static int qp_flag = 1; if (qp_flag == 1) { total_active_conn_to_client = 0; qp_flag = 0; } total_active_conn_to_client++; double t_init_start, t_init_end, t_rtr_start, t_rts_end; static int flag = 0; t_init_start = MPI_Wtime(); armci_connect_t *con = CLN_con + h->src_rank; if (con->state == QP_ACTIVE) { qp_attr_mask = IBV_QP_STATE; memset(&qp_attr, 0, sizeof qp_attr); qp_attr.qp_state = IBV_QPS_SQD; if (ibv_modify_qp(con->qp, &qp_attr, qp_attr_mask)) { fprintf(stdout," Error modifying QP\n"); fflush(stdout); } if (ibv_destroy_qp(con->qp)) { printf("Error destroying QP\n"); } total_active_conn_to_client--; } armci_create_qp(CLN_nic, &con->qp); con->sqpnum = con->qp->qp_num; con->lid = CLN_nic->lid_arr[h->src_rank]; CLN_rqpnumtmpbuf[h->src_rank] = con->qp->qp_num; qp_attr_mask = IBV_QP_STATE | IBV_QP_PKEY_INDEX | IBV_QP_PORT | IBV_QP_ACCESS_FLAGS; memset(&qp_attr, 0, sizeof qp_attr); qp_attr.qp_state = IBV_QPS_INIT; qp_attr.pkey_index = DEFAULT_PKEY_IX; qp_attr.port_num = CLN_nic->active_port; qp_attr.qp_access_flags = IBV_ACCESS_LOCAL_WRITE| IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ; rc = ibv_modify_qp(con->qp, &qp_attr, qp_attr_mask); t_init_end = MPI_Wtime(); memset(&qp_attr, 0, sizeof qp_attr); qp_attr_mask = IBV_QP_STATE | IBV_QP_MAX_DEST_RD_ATOMIC | IBV_QP_PATH_MTU | IBV_QP_RQ_PSN | IBV_QP_MIN_RNR_TIMER; qp_attr.qp_state = IBV_QPS_RTR; qp_attr.path_mtu = IBV_MTU_1024; /*MTU*/ qp_attr.max_dest_rd_atomic = 4; qp_attr.min_rnr_timer = RNR_TIMER; qp_attr.rq_psn = 0; /* Fill in the information from the header */ SRV_rqpnums[h->src_rank] = h->qpnum; qp_attr_mask |= IBV_QP_DEST_QPN | IBV_QP_AV; qp_attr.dest_qp_num = SRV_rqpnums[h->src_rank]; qp_attr.ah_attr.dlid = SRV_nic->lid_arr[h->src_rank]; qp_attr.ah_attr.port_num = CLN_nic->active_port; rc = ibv_modify_qp(con->qp, &qp_attr, qp_attr_mask); memset(&qp_attr, 0, sizeof qp_attr); qp_attr_mask = IBV_QP_STATE | IBV_QP_SQ_PSN | IBV_QP_TIMEOUT | IBV_QP_RETRY_CNT | IBV_QP_RNR_RETRY | IBV_QP_MAX_QP_RD_ATOMIC; qp_attr.qp_state = IBV_QPS_RTS; qp_attr.sq_psn = 0; qp_attr.timeout = 18; qp_attr.retry_cnt = 7; qp_attr.rnr_retry = 7; qp_attr.max_rd_atomic = 4; rc = ibv_modify_qp(con->qp, &qp_attr,qp_attr_mask); t_rts_end = MPI_Wtime(); #if defined(PEND_BUFS) assert(armci_nproc*(IMM_BUF_NUM+1)src_rank*(IMM_BUF_NUM+1)+j]; armci_init_vapibuf_recv(&cbuf->dscr, &cbuf->sg_entry, cbuf->buf, IMM_BUF_LEN, &serv_memhandle); cbuf->dscr.wr_id = h->src_rank*(IMM_BUF_NUM+1)+j + DSCRID_IMMBUF_RECV; if (DEBUG_SERVER) { printf("\n%d(s):posted rr with lkey=%d",armci_me,cbuf->sg_entry.lkey); fflush(stdout); } if (armci_use_srq) { rc = ibv_post_srq_recv(CLN_srq_hndl, &cbuf->dscr, &bad_wr); } else { rc = ibv_post_recv((CLN_con + h->src_rank)->qp, &cbuf->dscr, &bad_wr); } dassert1(1,rc==0,rc); } #else int i; for(i = 0; i < armci_nproc; i++) { vapibuf_t *cbuf; cbuf = serv_buf_arr[h->src_rank]; armci_init_vapibuf_recv(&cbuf->dscr, &cbuf->sg_entry, cbuf->buf, CBUF_DLEN, &serv_memhandle); cbuf->dscr.wr_id = h->src_rank+armci_nproc; if (DEBUG_SERVER) { printf("\n%d(s):posted rr with lkey=%d",armci_me,cbuf->sg_entry.lkey); fflush(stdout); } if (armci_use_srq) { rc = ibv_post_srq_recv(CLN_srq_hndl, &cbuf->dscr, &bad_wr); } else { rc = ibv_post_recv((CLN_con+h->src_rank)->qp, &cbuf->dscr, &bad_wr); } dassert1(1,rc==0,rc); } #endif /* Now send back the information */ struct cbuf *v1 = get_cbuf(); assert( v1 != NULL); v1->desc.u.sr.wr.ud.remote_qpn = rbuf.qp_num[h->src_rank]; v1->desc.u.sr.wr.ud.remote_qkey = 0; v1->desc.u.sr.wr.ud.ah = conn.ud_ah[h->src_rank]; armci_ud_rank *h1 = (armci_ud_rank *)CBUF_BUFFER_START(v1); h1->src_rank = armci_me; h1->qpnum = con->sqpnum; h1->msg_type = 2; cbuf_init_send(v1, sizeof(armci_ud_rank)); /* Release the receiving cbuf */ release_cbuf(v); struct ibv_send_wr *send_wr; if(ibv_post_send(conn.qp[0], &(v1->desc.u.sr), &send_wr)) { fprintf(stderr, "Error posting send\n"); } con->state = QP_ACTIVE; } void progress_engine() { struct ibv_cq *ev_cq; void *ev_ctx; struct ibv_wc *sc; int ne; struct ibv_wc wc; int send_comp = 0; int recv_comp = 0; int count; void *cbuf_addr; cbuf *v; int ret; do { ne = ibv_poll_cq(hca.cq, 1, &wc); } while (ne < 1); /* Okay, got an entry, check for errors */ if(ne < 0) { fprintf(stderr,"Error Polling CQ\n"); } if(wc.status != IBV_WC_SUCCESS) { fprintf(stderr, "[%d] Failed status %d\n", armci_me, wc.status); } cbuf_addr = (void *) ((aint_t) wc.wr_id); assert(cbuf_addr != NULL); v = (cbuf *)cbuf_addr; armci_ud_rank *h = (armci_ud_rank *)(CBUF_BUFFER_START(v) + 40); if(IBV_WC_SEND == wc.opcode || IBV_WC_RDMA_WRITE == wc.opcode) { release_cbuf(v); /* Do nothing, just release the cbuf */ /* Send Completion */ } else if (IBV_WC_RECV == wc.opcode) { /* Recv completion */ post_recv(); /* Check if the message received is from a data server */ assert((h->msg_type == QP_CON_REQ) || (h->msg_type == QP_CON_ACK) || (h->msg_type == QP_CON_BREAK_FROM_CLIENT) || (h->msg_type == QP_CON_BREAK_FROM_SERVER)); if (h->msg_type == QP_CON_REQ) { process_recv_completion_from_client(h, v); } else if (h->msg_type == QP_CON_BREAK_FROM_CLIENT) { process_con_break_from_client(h, v); } else if (h->msg_type == QP_CON_BREAK_FROM_SERVER) { process_con_break_from_server(h, v); } else { process_recv_completion_from_server(h, v); } } else { fprintf(stderr, "Unknown opcode recv'd\n"); } } void async_thread_ud_events(void *context) { struct ibv_cq *ev_cq; void *ev_ctx; struct ibv_wc *sc; int ne; struct ibv_wc wc; int send_comp = 0; int recv_comp = 0; int count; void *cbuf_addr; cbuf *v; int ret; while (1) { progress_engine(); } } static struct ibv_srq *create_srq(vapi_nic_t *nic) { struct ibv_srq_init_attr srq_init_attr; struct ibv_srq *srq_ptr = NULL; memset(&srq_init_attr, 0, sizeof(srq_init_attr)); srq_init_attr.srq_context = nic->handle; #ifdef PEND_BUFS srq_init_attr.attr.max_wr = armci_nproc * (IMM_BUF_NUM + 1) + 200; #else srq_init_attr.attr.max_wr = armci_nproc + 200; #endif srq_init_attr.attr.max_sge = 1; /* The limit value should be ignored during SRQ create */ srq_init_attr.attr.srq_limit = 30; srq_ptr = ibv_create_srq(nic->ptag, &srq_init_attr); return srq_ptr; } int init_params(void) { conn.qp = (struct ibv_qp **) malloc(armci_nproc * sizeof(struct ibv_qp *)); conn.lid = (uint16_t *) malloc(armci_nproc * sizeof(int)); conn.qp_num = (uint32_t *) malloc(armci_nproc * sizeof(int)); conn.ud_ah = (struct ibv_ah **) malloc (armci_nproc * sizeof (struct ibv_ah *)); conn.status = (int *) malloc(armci_nproc * sizeof(int)); memset((void *)conn.status, 0, sizeof(int) * armci_nproc); rbuf.qp_num = (uint32_t *) malloc(armci_nproc * sizeof(int)); rbuf.lid = (uint16_t *) malloc(armci_nproc * sizeof(int)); rbuf.rkey = (uint32_t *) malloc(armci_nproc * sizeof(int)); rbuf.buf = (char **) malloc(armci_nproc * sizeof(char *)); assert(conn.qp && conn.lid && rbuf.qp_num && rbuf.lid && rbuf.rkey && rbuf.buf); return 0; } int open_hca(void) { struct ibv_device **dev_list; struct ibv_device *ib_dev; int num_hcas; dev_list = ibv_get_device_list(&num_hcas); hca.ib_dev = dev_list[0]; hca.context = ibv_open_device(hca.ib_dev); if(!hca.context) { fprintf(stderr,"Couldn't get context %s\n", ibv_get_device_name(hca.ib_dev)); return 1; } hca.pd = ibv_alloc_pd(hca.context); if(!hca.pd) { fprintf(stderr,"Couldn't get pd %s\n", ibv_get_device_name(hca.ib_dev)); return 1; } return 0; } int create_cq(void) { hca.cq = ibv_create_cq(hca.context, 16000, NULL, NULL, 0); if(!hca.cq) { fprintf(stderr, "Couldn't create CQ\n"); return 1; } if (armci_me == armci_master) { pthread_create(&armci_async_thread[1], NULL, (void *) async_thread_ud_events, (void *) hca.context); } return 0; } int get_lid(void) { struct ibv_port_attr port_attr[2]; int i, j, count; int active_port_search_count; for (j = 1; j <= 1; j++) { if (!ibv_query_port(hca.context, j, &port_attr[j - 1]) && (port_attr[j - 1].state == IBV_PORT_ACTIVE)) { for (i = 0; i < armci_nproc; i++) conn.lid[i] = port_attr[j - 1].lid; return 0; } } return 1; } int exch_addr(void) { MPI_Status status; int i; MPI_Allgather((void *)conn.qp_num, sizeof(uint32_t), MPI_BYTE, (void *)rbuf.qp_num, sizeof(uint32_t), MPI_BYTE, ARMCI_COMM_WORLD); MPI_Alltoall((void *)conn.lid, sizeof(uint16_t), MPI_BYTE, (void *)rbuf.lid, sizeof(uint16_t), MPI_BYTE, ARMCI_COMM_WORLD); #ifdef DEBUG for (i = 0; i < nprocs; i++) { if (me == i) continue; fprintf(stdout,"[%d] Remote QP %d, Remote LID %u, Rkey %u, Lkey %u\n" " LBuf %p, RBuf %p\n", me, rbuf.qp_num[i], rbuf.lid[i], rbuf.rkey[i], lbuf.mr->lkey, lbuf.buf, rbuf.buf[i]); fflush(stdout); } #endif return 0; } int create_qp(void) { struct ibv_qp_attr qp_attr; int i; memset(&qp_attr, 0, sizeof qp_attr); struct ibv_qp_init_attr attr = { .send_cq = hca.cq, .recv_cq = hca.cq, .cap = { .max_send_wr = 8192, .max_recv_wr = 8192, .max_send_sge = 1, .max_recv_sge = 1, .max_inline_data = 0 }, .qp_type = IBV_QPT_UD }; conn.qp[0] = ibv_create_qp(hca.pd, &attr); if(!conn.qp[0]) { fprintf(stderr,"Couldn't create QP\n"); return 1; } conn.qp_num[0] = conn.qp[0]->qp_num; qp_attr.qp_state = IBV_QPS_INIT; qp_attr.pkey_index = 0; qp_attr.port_num = 1; qp_attr.qkey = 0; if(ibv_modify_qp(conn.qp[0], &qp_attr, IBV_QP_STATE | IBV_QP_PKEY_INDEX | IBV_QP_PORT | IBV_QP_QKEY)) { fprintf(stderr,"Could not modify QP to INIT\n"); return 1; } #ifdef DEBUG fprintf(stdout,"[%d] Created QP %d, LID %d\n", me, conn.qp_num[0], conn.lid[0]); fflush(stdout); #endif return 0; } struct ibv_mr* armci_register_memory(void* buf, int len) { return (ibv_reg_mr(hca.pd, buf, len, IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ)); } int connect_qp(void) { struct ibv_qp_attr attr; int i; memset(&attr, 0 , sizeof attr); attr.qp_state = IBV_QPS_RTR; if (ibv_modify_qp(conn.qp[0], &attr, IBV_QP_STATE)) { fprintf(stderr, "Failed to modify QP to RTR\n"); return 1; } attr.qp_state = IBV_QPS_RTS; attr.sq_psn = 0; if (ibv_modify_qp(conn.qp[0], &attr, IBV_QP_STATE | IBV_QP_SQ_PSN)) { fprintf(stderr, "Failed to modify QP to RTS\n"); return 1; } for (i = 0; i < armci_nproc; i++) { struct ibv_ah_attr ah_attr; memset(&ah_attr, 0, sizeof(ah_attr)); ah_attr.is_global = 0; ah_attr.dlid = rbuf.lid[i]; ah_attr.sl = 0; ah_attr.src_path_bits = 0; ah_attr.port_num = 1; conn.ud_ah[i] = ibv_create_ah(hca.pd, &ah_attr); if (!conn.ud_ah[i]) { fprintf(stderr, "Error creating address handles\n"); } } return 0; } int total_ud_recv_buffers = 4096; void post_recv() { cbuf *v = get_cbuf(); cbuf_init_recv(v, CBUF_BUFFER_SIZE); struct ibv_recv_wr *bad_wr; /* set id to be the global_rank */ v->grank = -1; if(ibv_post_recv(conn.qp[0], &(v->desc.u.rr), &bad_wr)) { fprintf(stderr," Error posting UD recv\n"); fflush(stderr); } } int post_buffers() { init_cbuf_lock(); allocate_cbufs(8192); int i; for (i = 0; i < total_ud_recv_buffers; i++) { post_recv(); } return 0; } void test_connectivity(void) { int i; struct ibv_send_wr *bad_wr; cbuf *v = NULL; for (i = 0; i < armci_nproc;i++) { if (armci_me == i) continue; int j; for (j = 0 ; j < 2; j++) { v = get_cbuf(); assert(v != NULL); v->desc.u.sr.wr.ud.remote_qpn = rbuf.qp_num[i]; v->desc.u.sr.wr.ud.remote_qkey = 0; v->desc.u.sr.wr.ud.ah = conn.ud_ah[i]; armci_ud_rank *h = (armci_ud_rank *)CBUF_BUFFER_START(v); h->src_rank = armci_me; cbuf_init_send(v, sizeof(armci_ud_rank)); if(ibv_post_send(conn.qp[0], &(v->desc.u.sr), &bad_wr)) { fprintf(stderr, "Error posting send\n"); } } } } int recycle_dead_qp() { } void handle_network_fault(struct ibv_wc *pdscr) { recycle_dead_qp(); } void setup_ud_channel() { if(init_params()) { } if(open_hca()) { } if(create_cq()) { } if(get_lid()) { } if(create_qp()) { } if (exch_addr()) { } if(connect_qp()) { } MPI_Barrier(ARMCI_COMM_WORLD); if(post_buffers()) { } MPI_Barrier(ARMCI_COMM_WORLD); } void process_recv_completion_from_server(armci_ud_rank *h, cbuf *v) { struct ibv_qp_attr qp_attr; struct ibv_qp_init_attr qp_init_attr; struct ibv_qp_cap qp_cap; enum ibv_qp_attr_mask qp_attr_mask; char *enval; struct ibv_recv_wr *bad_wr; int rc, j; armci_connect_t *con = SRV_con + armci_clus_id(h->src_rank); qp_attr_mask = IBV_QP_STATE | IBV_QP_PKEY_INDEX | IBV_QP_PORT | IBV_QP_ACCESS_FLAGS; memset(&qp_attr, 0, sizeof qp_attr); qp_attr.qp_state = IBV_QPS_INIT; qp_attr.pkey_index = DEFAULT_PKEY_IX; qp_attr.port_num = SRV_nic->active_port; qp_attr.qp_access_flags = IBV_ACCESS_LOCAL_WRITE| IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ; rc = ibv_modify_qp(con->qp, &qp_attr, qp_attr_mask); memset(&qp_attr, 0, sizeof qp_attr); qp_attr_mask = IBV_QP_STATE | IBV_QP_MAX_DEST_RD_ATOMIC | IBV_QP_PATH_MTU | IBV_QP_RQ_PSN | IBV_QP_MIN_RNR_TIMER; qp_attr.qp_state = IBV_QPS_RTR; qp_attr.path_mtu = IBV_MTU_1024; /*MTU*/ qp_attr.max_dest_rd_atomic = 4; qp_attr.min_rnr_timer = RNR_TIMER; qp_attr.rq_psn = 0; /* Fill in the information from the header */ CLN_rqpnums[h->src_rank] = h->qpnum; qp_attr_mask |= IBV_QP_DEST_QPN | IBV_QP_AV; qp_attr.dest_qp_num = CLN_rqpnums[h->src_rank]; qp_attr.ah_attr.dlid = SRV_nic->lid_arr[h->src_rank]; qp_attr.ah_attr.port_num = SRV_nic->active_port; rc = ibv_modify_qp(con->qp, &qp_attr, qp_attr_mask); memset(&qp_attr, 0, sizeof qp_attr); qp_attr_mask = IBV_QP_STATE | IBV_QP_SQ_PSN | IBV_QP_TIMEOUT | IBV_QP_RETRY_CNT | IBV_QP_RNR_RETRY | IBV_QP_MAX_QP_RD_ATOMIC; qp_attr.qp_state = IBV_QPS_RTS; qp_attr.sq_psn = 0; qp_attr.timeout = 18; qp_attr.retry_cnt = 7; qp_attr.rnr_retry = 7; qp_attr.max_rd_atomic = 4; rc = ibv_modify_qp(con->qp, &qp_attr,qp_attr_mask); release_cbuf(v); con->state = QP_ACTIVE; } struct con_q_t { struct armci_connect_t *head; void *next; }; struct con_q_t *con_q; #define MAX_CLIENT_TO_SERVER_CONN 2 armci_connect_t * dequeue_conn() { return NULL; } int get_max_client_to_server_conn() { static int env_read_flag = 0; static int max_client_to_server_conn = 0; if (!env_read_flag) { char *value; if ((value = getenv("ARMCI_MAX_CLIENT_TO_SERVER_FACTOR")) != NULL){ max_client_to_server_conn = armci_nclus/atoi(value); /* We need a minimum of 4 connections */ if (max_client_to_server_conn <= 1) max_client_to_server_conn = 2; if (armci_me == 0) { fprintf(stdout, "max_client_to_server_conn[%d]\n", max_client_to_server_conn); } } else { max_client_to_server_conn = armci_nclus / 2; if (max_client_to_server_conn <= 1) max_client_to_server_conn = 2; } } return max_client_to_server_conn; } int get_the_victim_connection() { return 0; } void break_a_connection_if_needed() { assert(!SERVER_CONTEXT); if (!armci_use_lazy_break) return; int victim, proc; armci_connect_t *con; int max_client_to_server_conn = get_max_client_to_server_conn(); if ((total_active_conn_to_server >= max_client_to_server_conn) && (armci_me != armci_master)) { int proc, clus_id; do { proc = get_the_victim_connection(); /* Not enough on the queue */ if (proc == -1) return; clus_id = armci_clus_id(proc); } while ((armci_clus_me == clus_id) || ((SRV_con + clus_id)->state != QP_ACTIVE)); double t_fence_start, t_fence_end; t_fence_start = MPI_Wtime(); ARMCI_WaitAll(); ARMCI_Fence(proc); struct ibv_qp_attr qp_attr; struct ibv_qp_init_attr qp_init_attr; struct ibv_qp_cap qp_cap; enum ibv_qp_attr_mask qp_attr_mask; char *enval; double t_destroy_start, t_destroy_end; t_destroy_start = MPI_Wtime(); armci_connect_t *con = SRV_con + clus_id; int rc, j; dassert(1, con->state == QP_ACTIVE); qp_attr_mask = IBV_QP_STATE; memset(&qp_attr, 0, sizeof qp_attr); qp_attr.qp_state = IBV_QPS_SQD; if (ibv_modify_qp(con->qp, &qp_attr, qp_attr_mask)) { fprintf(stdout," Error modifying QP\n"); fflush(stdout); } cbuf *v = get_cbuf(); assert(v != NULL); v->desc.u.sr.wr.ud.remote_qpn = rbuf.qp_num[armci_clus_info[clus_id].master]; v->desc.u.sr.wr.ud.remote_qkey = 0; v->desc.u.sr.wr.ud.ah = conn.ud_ah[armci_clus_info[clus_id].master]; armci_ud_rank *h = (armci_ud_rank *)CBUF_BUFFER_START(v); h->src_rank = armci_me; h->qpnum = con->sqpnum; h->msg_type = QP_CON_BREAK_FROM_CLIENT; struct ibv_send_wr *bad_wr; cbuf_init_send(v, sizeof(armci_ud_rank)); if(ibv_post_send(conn.qp[0], &(v->desc.u.sr), &bad_wr)) { printf("Error posting send\n"); } while (con->state != QP_INACTIVE) { if (armci_me != armci_master) progress_engine(); } if (ibv_destroy_qp(con->qp)) { printf("Error destroying QP\n"); } } } void check_state_of_ib_connection(int proc, int force) { int clus_id; armci_connect_t *con; /* return if ARMCI does not use on demand connection management */ if (!armci_use_odcm) return; static int flag = 1; static int last = 0; if (flag == 1) { total_active_conn_to_server = 0; total_breaks = 0; flag = 0; } /* Check clus id */ clus_id = armci_clus_id(proc); con = SRV_con + clus_id; assert(!SERVER_CONTEXT); if (con->state != QP_ACTIVE) { if (!force) break_a_connection_if_needed(); total_active_conn_to_server++; double t_create_start, t_create_end; t_create_start = MPI_Wtime(); armci_create_qp(SRV_nic, &con->qp); con->sqpnum = con->qp->qp_num; con->lid = SRV_nic->lid_arr[clus_id]; cbuf *v = get_cbuf(); assert(v != NULL); v->desc.u.sr.wr.ud.remote_qpn = rbuf.qp_num[armci_clus_info[clus_id].master]; v->desc.u.sr.wr.ud.remote_qkey = 0; v->desc.u.sr.wr.ud.ah = conn.ud_ah[armci_clus_info[clus_id].master]; armci_ud_rank *h = (armci_ud_rank *)CBUF_BUFFER_START(v); h->src_rank = armci_me; h->qpnum = con->sqpnum; h->msg_type = QP_CON_REQ; struct ibv_send_wr *bad_wr; cbuf_init_send(v, sizeof(armci_ud_rank)); if(ibv_post_send(conn.qp[0], &(v->desc.u.sr), &bad_wr)) { printf("Error posting send\n"); } if (armci_me != armci_master) { while (con->state != QP_ACTIVE) { progress_engine(); } } else { while (con->state != QP_ACTIVE) { usleep(1); } } t_create_end = MPI_Wtime(); } } ga-5-3/armci/src/devices/openib/cbuf.c0000640005473000001440000002305011444464075016450 0ustar d3n000users/* * Copyright (C) 1999-2001 The Regents of the University of California * (through E.O. Lawrence Berkeley National Laboratory), subject to * approval by the U.S. Department of Energy. * * Use of this software is under license. The license agreement is included * in the file MVICH_LICENSE.TXT. * * Developed at Berkeley Lab as part of MVICH. * * Authors: Bill Saphir * Michael Welcome */ /* Copyright (c) 2002-2008, The Ohio State University. All rights * reserved. * * This file is part of the MVAPICH software package developed by the * team members of The Ohio State University's Network-Based Computing * Laboratory (NBCL), headed by Professor Dhabaleswar K. (DK) Panda. * * For detailed copyright and licensing information, please refer to the * copyright file COPYRIGHT_MVAPICH in the top level MPICH directory. * */ #define _XOPEN_SOURCE 600 #include "cbuf.h" #include /* * cbufs * * cbufs provide system buffers for VMPICH. They are analogous to mbufs * in BSD networking. * The primary motivation for cbufs is that implementing MPI on VIA * seems to requiring pre-posting a number of fixed-sized buffers. * These buffers must be registered (pinned). Life is easier if * they are all registered at once so there is only one memory * handle. We manage a fixed-size pool of cbufs that are * allocated and pinned when a progam starts up. We manage * the free cbuf list as a singly linked list. * * Two different ways to manage the free list as a singly-linked list. * 1. head and tail pointers. Add to tail, remove from head. * 2. only head pointer, treat as a stack. * * #1 Eliminates contention between adding to list and removing from list * Lock-free possible? * * #2 Has slightly less overhead when there is no contention, and is more * likely to produce a cbuf that is already in cache. * * Currently anticipate that most access near-term will be single-threaded, * so go with head only. (#2) */ /* head of list of allocated cbuf regions */ static cbuf_region *cbuf_region_head = NULL; /* * free_cbuf_head is the head of the free list */ static cbuf *free_cbuf_head = NULL; static int cbuf_n_allocated = 0; static long num_free_cbuf = 0; static long num_cbuf_get = 0; static long num_cbuf_free = 0; static pthread_spinlock_t cbuf_lock; int viadev_cbuf_max = -1; int viadev_cbuf_total_size = (2 * 1024); int viadev_cbuf_secondary_pool_size = 128; void init_cbuf_lock() { pthread_spin_init(&cbuf_lock, 0); } static void lock_cbuf() { pthread_spin_lock(&cbuf_lock); return; } static void unlock_cbuf() { pthread_spin_unlock(&cbuf_lock); return; } void dump_cbuf_region(cbuf_region * r) { } void dump_cbuf_regions() { cbuf_region *r = cbuf_region_head; while (r) { dump_cbuf_region(r); r = r->next; } } void deallocate_cbufs() { cbuf_region *r = cbuf_region_head; lock_cbuf(); while (r) { if (r->mem_handle != NULL) { /* free cbufs add it later */ } r = r->next; } unlock_cbuf(); } static void allocate_cbuf_region(int ncbufs) { struct cbuf_region *reg; void *mem; void *cbuf_dma_buffer; int i; cbuf *cur; int alignment_cbuf = 64; int alignment_dma; alignment_dma = getpagesize(); if (free_cbuf_head != NULL) { } if (ncbufs <= 0) { } /* are we limiting cbuf allocation? If so, make sure * we dont alloc more than allowed */ reg = (struct cbuf_region *) malloc(sizeof(struct cbuf_region)); if (NULL == reg) { } if(posix_memalign((void **) &mem, alignment_cbuf, ncbufs * sizeof(cbuf))) { } /* ALLOCATE THE DMA BUFFER */ if(posix_memalign((void **) &cbuf_dma_buffer, alignment_dma, ncbufs * viadev_cbuf_total_size)) { } memset(mem, 0, ncbufs * sizeof(cbuf)); memset(cbuf_dma_buffer, 0, ncbufs * viadev_cbuf_total_size); cbuf_n_allocated += ncbufs; num_free_cbuf += ncbufs; reg->malloc_start = mem; reg->malloc_buf_start = cbuf_dma_buffer; reg->malloc_end = (void *) ((char *) mem + ncbufs * sizeof(cbuf)); reg->malloc_buf_end = (void *) ((char *) cbuf_dma_buffer + ncbufs * viadev_cbuf_total_size); reg->count = ncbufs; free_cbuf_head = (cbuf *) ((aint_t) mem); reg->cbuf_head = free_cbuf_head; reg->mem_handle = armci_register_memory(cbuf_dma_buffer, ncbufs * viadev_cbuf_total_size); if (reg->mem_handle == NULL) { } /* init the free list */ for (i = 0; i < ncbufs - 1; i++) { cur = free_cbuf_head + i; cur->desc.next = free_cbuf_head + i + 1; cur->region = reg; #ifdef ADAPTIVE_RDMA_FAST_PATH #else cur->buffer = (unsigned char *) ((char *)(cbuf_dma_buffer) + (i * viadev_cbuf_total_size)); #endif } /* last one needs to be set to NULL */ cur = free_cbuf_head + ncbufs - 1; cur->desc.next = NULL; cur->region = reg; #ifdef ADAPTIVE_RDMA_FAST_PATH #else cur->buffer = (unsigned char *) ((char *)cbuf_dma_buffer + ((ncbufs - 1) * viadev_cbuf_total_size)); #endif /* thread region list */ reg->next = cbuf_region_head; cbuf_region_head = reg; } void allocate_cbufs(int ncbufs) { /* this function is only called by the init routines. * cache the nic handle and ptag for later cbuf_region allocations */ /* now allocate the first cbuf region */ allocate_cbuf_region(ncbufs); } /* * Get a cbuf off the free list */ cbuf *get_cbuf(void) { cbuf *v; lock_cbuf(); /* * It will often be possible for higher layers to recover * when no cbuf is available, but waiting for more descriptors * to complete. For now, just abort. */ if (NULL == free_cbuf_head) { allocate_cbuf_region(viadev_cbuf_secondary_pool_size); if (NULL == free_cbuf_head) { } } v = free_cbuf_head; num_free_cbuf--; num_cbuf_get++; /* this correctly handles removing from single entry free list */ free_cbuf_head = free_cbuf_head->desc.next; #ifdef ADAPTIVE_RDMA_FAST_PATH /* need to change this to RPUT_CBUF_FLAG or RGET_CBUF_FLAG later * if we are doing rput */ v->padding = NORMAL_CBUF_FLAG; #endif /* this is probably not the right place to initialize shandle to NULL. * Do it here for now because it will make sure it is always initialized. * Otherwise we would need to very carefully add the initialization in * a dozen other places, and probably miss one. */ v->shandle = NULL; v->ref_count = 0; v->len = 0; v->grank = -1; /* Make sure it is not inadvertantly used anywhere */ unlock_cbuf(); return (v); } /* * Put a cbuf back on the free list */ void release_cbuf(cbuf * v) { lock_cbuf(); /* note this correctly handles appending to empty free list */ assert(v != free_cbuf_head); v->desc.next = free_cbuf_head; #ifdef ADAPTIVE_RDMA_FAST_PATH #endif free_cbuf_head = v; num_free_cbuf++; num_cbuf_free++; unlock_cbuf(); } /* * fill in cbuf descriptor with all necessary info */ void cbuf_init_send(cbuf * v, unsigned long len) { v->desc.u.sr.next = NULL; v->desc.u.sr.send_flags = IBV_SEND_SIGNALED; v->desc.u.sr.opcode = IBV_WR_SEND; v->desc.u.sr.wr_id = (aint_t) v; v->desc.u.sr.num_sge = 1; v->desc.u.sr.sg_list = &(v->desc.sg_entry); v->desc.sg_entry.addr = (uintptr_t) v->buffer; v->desc.sg_entry.length = len; v->desc.sg_entry.lkey = v->region->mem_handle->lkey; } void cbuf_init_recv(cbuf * v, unsigned long len) { v->desc.u.rr.next = NULL; v->desc.u.rr.wr_id = (aint_t) v; v->desc.u.rr.num_sge = 1; v->desc.u.rr.sg_list = &(v->desc.sg_entry); v->desc.sg_entry.addr = (uintptr_t) v->buffer; v->desc.sg_entry.length = len; v->desc.sg_entry.lkey = v->region->mem_handle->lkey; #ifdef ADAPTIVE_RDMA_FAST_PATH v->padding = NORMAL_CBUF_FLAG; #endif } void cbuf_init_sendrecv(cbuf * v, unsigned long len) { } void cbuf_init_rput(cbuf * v, void *local_address, uint32_t lkey, void *remote_address, uint32_t rkey, int len) { v->desc.u.sr.next = NULL; v->desc.u.sr.send_flags = IBV_SEND_SIGNALED; v->desc.u.sr.opcode = IBV_WR_RDMA_WRITE; v->desc.u.sr.wr_id = (aint_t) v; v->desc.u.sr.num_sge = 1; v->desc.u.sr.sg_list = &(v->desc.sg_entry); v->desc.sg_entry.length = len; v->desc.sg_entry.lkey = lkey; v->desc.sg_entry.addr = (uintptr_t) local_address; v->desc.u.sr.wr.rdma.remote_addr = (uintptr_t) remote_address; v->desc.u.sr.wr.rdma.rkey = rkey; #ifdef ADAPTIVE_RDMA_FAST_PATH v->padding = RPUT_CBUF_FLAG; #endif } void cbuf_init_rget(cbuf * v, void *local_address, uint32_t lkey, void *remote_address, uint32_t rkey, int len) { v->desc.u.sr.next = NULL; v->desc.u.sr.send_flags = IBV_SEND_SIGNALED; v->desc.u.sr.opcode = IBV_WR_RDMA_READ; v->desc.u.sr.wr_id = (aint_t) v; v->desc.u.sr.num_sge = 1; v->desc.u.sr.sg_list = &(v->desc.sg_entry); v->desc.sg_entry.length = len; v->desc.sg_entry.lkey = lkey; v->desc.sg_entry.addr = (uintptr_t) local_address; v->desc.u.sr.wr.rdma.remote_addr = (uintptr_t) remote_address; v->desc.u.sr.wr.rdma.rkey = rkey; #ifdef ADAPTIVE_RDMA_FAST_PATH v->padding = RGET_CBUF_FLAG; #endif } /* * print out cbuf contents for debugging */ void dump_cbuf(char *msg, cbuf * v) { } #ifdef ADAPTIVE_RDMA_FAST_PATH #endif ga-5-3/armci/src/devices/openib/cbuf.h0000640005473000001440000001236511444464075016464 0ustar d3n000users/* * Copyright (C) 1999-2001 The Regents of the University of California * (through E.O. Lawrence Berkeley National Laboratory), subject to * approval by the U.S. Department of Energy. * * Use of this software is under license. The license agreement is included * in the file MVICH_LICENSE.TXT. * * Developed at Berkeley Lab as part of MVICH. * * Authors: Bill Saphir * Michael Welcome */ /* Copyright (c) 2002-2008, The Ohio State University. All rights * reserved. * * This file is part of the MVAPICH software package developed by the * team members of The Ohio State University's Network-Based Computing * Laboratory (NBCL), headed by Professor Dhabaleswar K. (DK) Panda. * * For detailed copyright and licensing information, please refer to the * copyright file COPYRIGHT_MVAPICH in the top level MPICH directory. * */ #ifndef _CBUF_H #define _CBUF_H #include #include #include #include #include #ifdef _IA64_ #define CBUF_FLAG_TYPE uint64_t #else #define CBUF_FLAG_TYPE uint32_t #endif #if (defined(RDMA_FAST_PATH) || defined(ADAPTIVE_RDMA_FAST_PATH)) #define CBUF_BUFFER_SIZE (viadev_cbuf_total_size - \ 2*sizeof(CBUF_FLAG_TYPE)) #else #define CBUF_BUFFER_SIZE (viadev_cbuf_total_size) #endif /* * brief justification for cbuf format: * descriptor must be aligned (64 bytes). * cbuf size must be multiple of this alignment to allow contiguous allocation * descriptor and buffer should be contiguous to allow via implementations that * optimize contiguous descriptor/data (? how likely ?) * need to be able to store send handle in cbuf so that we can mark sends * complete when communication completes. don't want to store * it in packet header because we don't always need to send over the network. * don't want to store at beginning or between desc and buffer (see above) so * store at end. */ #define QP_CON_REQ 1 #define QP_CON_ACK 2 #define QP_CON_BREAK_FROM_CLIENT 3 #define QP_CON_BREAK_FROM_SERVER 4 typedef struct { uint32_t src_rank; uint16_t lid; uint32_t qpnum; int msg_type; } armci_ud_rank; struct ibv_descriptor { union { struct ibv_recv_wr rr; struct ibv_send_wr sr; } u; struct ibv_sge sg_entry; void *next; }; typedef struct ibv_descriptor IBV_DESCRIPTOR; typedef struct cbuf { #if (defined(RDMA_FAST_PATH) || defined(ADAPTIVE_RDMA_FAST_PATH)) CBUF_FLAG_TYPE *head_flag; #endif unsigned char *buffer; #if (defined(RDMA_FAST_PATH) || defined(ADAPTIVE_RDMA_FAST_PATH)) int padding; #endif IBV_DESCRIPTOR desc; /* NULL shandle means not send or not complete. Non-null * means pointer to send handle that is now complete. Used * by viadev_process_send */ void *shandle; struct cbuf_region *region; int grank; uint16_t bytes_remaining; uint16_t len; unsigned char *data_start; uint16_t ref_count; } cbuf; /* one for head and one for tail */ #define CBUF_FAST_RDMA_EXTRA_BYTES (2*sizeof(CBUF_FLAG_TYPE)) #define FAST_RDMA_ALT_TAG 0x8000 #define FAST_RDMA_SIZE_MASK 0x7fff /* * Vbufs are allocated in blocks and threaded on a single free list. * * These data structures record information on all the cbuf * regions that have been allocated. They can be used for * error checking and to un-register and deallocate the regions * at program termination. * */ typedef struct cbuf_region { struct ibv_mr *mem_handle; /* memory handle for entire region */ void *malloc_start; /* used to free region later */ void *malloc_end; /* to bracket mem region */ void *malloc_buf_start; /* used to free DMA region later */ void *malloc_buf_end; /* bracket DMA region */ int count; /* number of cbufs in region */ struct cbuf *cbuf_head; /* first cbuf in region */ struct cbuf_region *next; /* thread cbuf regions */ } cbuf_region; /* ack. needed here after cbuf is defined. need to clean up header files * and dependencies. */ typedef unsigned long aint_t; extern int viadev_cbuf_max; extern int viadev_cbuf_total_size; extern int viadev_cbuf_secondary_pool_size; void dump_cbuf_regions(void); void dump_cbuf_region(cbuf_region * r); void allocate_cbufs(int ncbufs); void deallocate_cbufs(void); cbuf *get_cbuf(void); void release_cbuf(cbuf * v); void cbuf_init_send(cbuf * v, unsigned long len); void cbuf_init_recv(cbuf * v, unsigned long len); void cbuf_init_sendrecv(cbuf * v, unsigned long len); void cbuf_init_rput(cbuf * v, void *local_address, uint32_t local_memhandle, void *remote_address, uint32_t remote_memhandle_rkey, int nbytes); void cbuf_init_rget(cbuf * v, void *local_address, uint32_t local_memhandle, void *remote_address, uint32_t remote_memhandle_rkey, int nbytes); void init_cbuf_lock(); void dump_cbuf(char *msg, cbuf * v); struct ibv_mr * armci_register_memory(void *, int); /* * Macros for working with cbufs */ #define CBUF_BUFFER_START(v) (v->buffer) #define CBUF_DATA_SIZE(type) (CBUF_BUFFER_SIZE - sizeof(type)) #endif /* _CBUF_H */ ga-5-3/armci/src/devices/openib/pendbufs.c0000640005473000001440000007027311444464075017350 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if defined(PEND_BUFS) #include "pendbufs.h" #include "armcip.h" #if HAVE_STDIO_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #define DEBUG_SERVER 0 /*-------------------Attributes-------------------------*/ /**Attributes to control buffer count and sizes. Implement this way to hide the global variables, and provide get/set methods.*/ #define NUM_ATTRIBUTES 4 #define ATTRIB_IMMBUF_LEN 0 #define ATTRIB_IMMBUF_NUM 1 #define ATTRIB_PNDBUF_LEN 2 #define ATTRIB_PNDBUF_NUM 3 /** List of hidden attributes and their operations. * @param attid IN Attribute id. Choose from the list above * @param gs IN Get(=0)/Set(=1) * @param v IN Value (used only when gs==1) * @return Value of the attribute on return */ static int att_ops(int attid, int gs, int v) { static not_first[NUM_ATTRIBUTES]; /*auto-init to zero*/ static val[NUM_ATTRIBUTES]; assert(attid>=0 && attidIMM_BUF_LEN*/ INIT=7, /**buf; proc_waitlist_t *info = &pbuf_proc_list_info[msginfo->from]; assert(msginfo->tag.imm_msg == 0); pbuf = _armci_serv_pendbuf_getbuf(); if(pbuf) { pbuf->status = INIT; pbuf->avail = 0; pbuf->vbuf = vbuf; memcpy(pbuf->buf, vbuf->buf, sizeof(request_header_t)+msginfo->dscrlen); /* pbuf_proc_list_info[msginfo->from].waiting_on=pbuf; */ pbuf->order_prev = info->order_tail; if(info->order_tail) info->order_tail->order_next = pbuf; info->order_tail = pbuf; if(!info->order_head) info->order_head = pbuf; } return pbuf; } /**Free a pending buffer * @param pbuf IN Pointer to Pending buffer to be freed * @return none */ static void _armci_serv_pendbuf_freebuf(pendbuf_t *pbuf){ const request_header_t *msginfo = (request_header_t *)pbuf->buf; proc_waitlist_t *info = &pbuf_proc_list_info[msginfo->from]; ARMCI_PR_DBG("enter",0); assert(pbuf != NULL); pbuf->avail=1; pbuf->status = -1; pbuf->vbuf = NULL; /* assert(info->waiting_on == pbuf); */ /* info->waiting_on = NULL; */ if(pbuf->order_prev) pbuf->order_prev->order_next = pbuf->order_next; if(pbuf->order_next) pbuf->order_next->order_prev = pbuf->order_prev; if(info->order_head == pbuf) { assert(pbuf->order_prev == NULL); info->order_head = pbuf->order_next; } if(info->order_tail == pbuf) { assert(pbuf->order_next == NULL); info->order_tail = pbuf->order_prev; } pbuf->order_prev = pbuf->order_next = NULL; /*not necessary here*/ _nPendBufsUsed -= 1; assert(_nPendBufsUsed>=0); ARMCI_PR_DBG("exit",0); } #if 0 /*Messages are processed in-place in immediate buffers or issued into pending buffers for progress in order (like ONE_PBUF_PER_MESG). This rule relaxes ONE_PBUF_PER_MESG by allowing ACCs to be processed in-place/issued without waiting for the prior reqs to complete*/ static int _can_progress_accnoorder(immbuf_t *vbuf) { const request_header_t *msginfo=(request_header_t*)vbuf->buf; const int proc = msginfo->from; const proc_waitlist_t *info = &pbuf_proc_list_info[proc]; int i, nwaiting_on, nacc; pendbuf_t *ptr; assert(_pbufOrder == ACC_NO_ORDER); if(!IS_IMM_MSG(*msginfo) && _nPendBufsUsed==PENDING_BUF_NUM) { /* printf("%d(s): op=%d from=%d datalen=%d waiting for pending buffers\n",armci_me,msginfo->operation,msginfo->from,msginfo->tag.data_len); */ /* fflush(stdout); */ return 0; /*This buffer needs a free pending buffer*/ } if(IS_IMM_MSG(*msginfo) && ARMCI_ACC(msginfo->operation)) { return 1; } if(info->immbuf_wlist_head && info->immbuf_wlist_head!=vbuf) { /* printf("%d(s): op=%d from=%d datalen=%d not queue head\n",armci_me,msginfo->operation,msginfo->from,msginfo->tag.data_len); */ /* fflush(stdout); */ return 0; /*in order issue*/ } if(!ARMCI_ACC(msginfo->operation)) { if(info->order_head) return 0; return 1; } assert(ARMCI_ACC(msginfo->operation)); for(ptr=info->order_head; ptr!=NULL; ptr=ptr->order_next) { request_header_t *m = (request_header_t *)ptr->buf; assert(m->from == msginfo->from); if(!ARMCI_ACC(m->operation)) break; } if(ptr != NULL) return 0; return 1; } static int _can_progress_putaccsplitorder(immbuf_t*vbuf) { if(!IS_IMM_MSG(*msginfo) && _nPendBufsUsed==PENDING_BUF_NUM) { return 0; /*This buffer needs a free pending buffer*/ } if(IS_IMM_MSG(*msginfo) && ARMCI_ACC(msginfo->operation)) { return 1; } if(info->immbuf_wlist_head && info->immbuf_wlist_head!=vbuf) { return 0; } if(msginfo->operation!=PUT && !ARMCI_ACC(msginfo->operation)) { if(info->order_head) return 0; return 1; } if(IS_IMM_MSG(*msginfo) && info->order_head) return 0; return 1; } #endif /** Implement ordering between messages. This function needs to be * implemented in conjunction with @_armci_serv_pendbuf_promote to * ensure ordered processing of messages. * @param vbuf IN Message in immediate buffer being checked * @return 1 if the message can be progressed (either in-place or * after copying to a pending buffer). 0 therwise. */ static int _armci_serv_pendbuf_can_progress(immbuf_t *vbuf) { const request_header_t *msginfo=(request_header_t*)vbuf->buf; const int proc = msginfo->from; const proc_waitlist_t *info = &pbuf_proc_list_info[proc]; if(_pbufOrder == ONE_PBUF_MESG) { /*Only one pending buffer used at any time*/ if(_nPendBufsUsed>0) return 0; return 1; } if(_pbufOrder == ONE_PBUF_MESG_PER_PROC) { /*Only one non-immediate mesg can be assigned to the pending buffers at any time*/ if(info->order_head || (info->immbuf_wlist_head && info->immbuf_wlist_head!=vbuf)) { return 0;/*other requests from this process remain*/ } if(!IS_IMM_MSG(*msginfo) && _nPendBufsUsed==PENDING_BUF_NUM) { return 0; /*This buffer needs a free pending buffer*/ } assert(info->n_pending == 0 || info->immbuf_wlist_head==vbuf); return 1; } if(_pbufOrder == ACC_NO_ORDER) { /*Messages are processed in-place in immediate buffers or issued into pending buffers for progress in order (like ONE_PBUF_PER_MESG). This rule relaxes ONE_PBUF_PER_MESG by allowing a sequence of ACCs to be processed in-place/issued without waiting for the prior ones to complete*/ int i, nwaiting_on, nacc; pendbuf_t *ptr; if(!IS_IMM_MSG(*msginfo) && _nPendBufsUsed==PENDING_BUF_NUM) { /* printf("%d(s): op=%d from=%d datalen=%d waiting for pending buffers\n",armci_me,msginfo->operation,msginfo->from,msginfo->tag.data_len); */ /* fflush(stdout); */ return 0; /*This buffer needs a free pending buffer*/ } #if 1 /*commented for now: it does work*/ if(IS_IMM_MSG(*msginfo) && ARMCI_ACC(msginfo->operation)) { return 1; } #endif if(info->immbuf_wlist_head && info->immbuf_wlist_head!=vbuf) { /* printf("%d(s): op=%d from=%d datalen=%d not queue head\n",armci_me,msginfo->operation,msginfo->from,msginfo->tag.data_len); */ /* fflush(stdout); */ return 0; /*in order issue*/ } if(!ARMCI_ACC(msginfo->operation)) { if(info->order_head) return 0; return 1; } assert(ARMCI_ACC(msginfo->operation)); for(ptr=info->order_head; ptr!=NULL; ptr=ptr->order_next) { request_header_t *m = (request_header_t *)ptr->buf; assert(m->from == msginfo->from); if(!ARMCI_ACC(m->operation)) break; } if(ptr != NULL) return 0; return 1; } if(_pbufOrder == PUTACC_SPLIT_ORDER) { if(!IS_IMM_MSG(*msginfo) && _nPendBufsUsed==PENDING_BUF_NUM) { return 0; /*This buffer needs a free pending buffer*/ } if(info->immbuf_wlist_head && info->immbuf_wlist_head!=vbuf) { return 0; } if(msginfo->operation!=PUT && !ARMCI_ACC(msginfo->operation)) { if(info->order_head) return 0; return 1; } if(IS_IMM_MSG(*msginfo) && ARMCI_ACC(msginfo->operation)) { return 1; } if(IS_IMM_MSG(*msginfo) && info->order_head) return 0; return 1; } if(_pbufOrder == GET_GET_REORDER) { if(!IS_IMM_MSG(*msginfo) && _nPendBufsUsed==PENDING_BUF_NUM) { return 0; /*This buffer needs a free pending buffer*/ } if(IS_IMM_MSG(*msginfo) && ARMCI_ACC(msginfo->operation)) { return 1; } if(info->immbuf_wlist_head && info->immbuf_wlist_head!=vbuf) { return 0; } if(msginfo->operation!=PUT && !ARMCI_ACC(msginfo->operation)) { if(info->order_tail) { request_header_t *m=(request_header_t*)info->order_tail->buf; if(msginfo->operation==GET && m->operation == GET) { /* printf("%d: Get Get progressing\n", armci_me); */ return 1; } return 0; } return 1; } if(IS_IMM_MSG(*msginfo) && info->order_head) return 0; return 1; } armci_die("Unknown pbuf ordering rule",_pbufOrder); return 0; } /** Goes through the set of immediate buffers waiting to be processed * and completed, and identifies a buffer that can be processed * now. Removes it from the list and returns it. Promote also * considers availability of pending buffers if need be. * @return Pointer to buffer that can be processed now. NULL if none exists. */ static immbuf_t* _armci_serv_pendbuf_promote() { immbuf_t *immbuf = NULL; proc_waitlist_t *info; ARMCI_PR_DBG("enter",0); assert(_nPendBufsUsed>=0); if(!pbuf_ordering_plist_head) { return NULL; /*nothing to promote*/ } info = pbuf_ordering_plist_head; do { if(info->immbuf_wlist_head==NULL) { printf("%d(s): Why is info->immbuf_wlist_head NULL\n", armci_me); fflush(stdout); pause(); } assert(info->immbuf_wlist_head!=NULL); assert(info->n_pending>0); if(_armci_serv_pendbuf_can_progress(info->immbuf_wlist_head)) { immbuf = info->immbuf_wlist_head; info->immbuf_wlist_head = immbuf->immbuf_list_next; info->n_pending -= 1; immbuf->immbuf_list_next = NULL; if(!info->immbuf_wlist_head) { assert(info->immbuf_wlist_tail == immbuf); info->immbuf_wlist_tail = NULL; /*remove this proc from proc list*/ info->prev->next = info->next; info->next->prev = info->prev; if(pbuf_ordering_plist_head == info) { pbuf_ordering_plist_head = (info->next==info)?NULL:info->next; } info->prev = info->next = NULL; } break; } info = info->next; } while(info != pbuf_ordering_plist_head); if(DEBUG_SERVER) if(immbuf) { request_header_t *msginfo=(request_header_t*)immbuf->buf; printf("%d:: promoting a buffer immbuf=%p op=%d from=%d n_pending=%d\n", armci_me,immbuf,msginfo->operation,msginfo->from,info->n_pending); fflush(stdout); } ARMCI_PR_DBG("exit",0); return immbuf; } /** Enqueue a message. It could be an immediate message that cannot * make progress or a non-immediate message that cannot make progress * either due to ordering constraints or lack of pending buffers. * @param vbuf IN Immediate buffer to be enqueud * @return Pending buffer into which the message was enqueued. NULL * if no pending buffer was allocated (which is always the case for * immediate messages) */ static pendbuf_t* _armci_serv_pendbuf_enqueue(immbuf_t *vbuf) { request_header_t *msginfo=(request_header_t *)vbuf->buf; int from = msginfo->from; pendbuf_t *pbuf; immbuf_t *ibuf; proc_waitlist_t *info = &pbuf_proc_list_info[msginfo->from]; ARMCI_PR_DBG("enter",0); /* printf("%d: Entered serv_pbuf_enqueue\n", armci_me); */ pbuf=NULL; if(msginfo->tag.imm_msg) { assert(!_armci_serv_pendbuf_can_progress(vbuf)); } else if(_armci_serv_pendbuf_can_progress(vbuf)) { pbuf = _armci_serv_pendbuf_assignbuf(vbuf); assert(pbuf != NULL); /*can_progress() should ensure this*/ } if(pbuf == NULL) { /* printf("%d(s):: Enqueing op=%d imm=%d from %d. n_pending=%d\n", armci_me, msginfo->operation, msginfo->tag.imm_msg, msginfo->from,info->n_pending); */ /* fflush(stdout); */ vbuf->immbuf_list_next = NULL; assert(info->n_pending < IMM_BUF_NUM); /*How another message now?*/ for(ibuf=info->immbuf_wlist_head;ibuf!=NULL;ibuf=ibuf->immbuf_list_next) { assert(vbuf != ibuf); /*enqueueing the same buffer twice*/ } info->n_pending += 1; if(!info->immbuf_wlist_head) { assert(!info->immbuf_wlist_tail); assert(!info->prev && !info->next); /*insert proc into proc list*/ if(!pbuf_ordering_plist_head) { pbuf_ordering_plist_head=info->next=info->prev=info; } else { info->next = pbuf_ordering_plist_head; info->prev = pbuf_ordering_plist_head->prev; pbuf_ordering_plist_head->prev->next = info; pbuf_ordering_plist_head->prev = info; } } /*insert vbuf into immbuf list for this proc*/ if(info->immbuf_wlist_tail) info->immbuf_wlist_tail->immbuf_list_next=vbuf; info->immbuf_wlist_tail = vbuf; if(!info->immbuf_wlist_head) info->immbuf_wlist_head = vbuf; } /* printf("%d: Leaving serv_pbuf_enqueue\n", armci_me); */ ARMCI_PR_DBG("exit",0); return pbuf; } /** Progress GET requests. * @param pbuf IN Pending buffer containing the GET request * @return none */ static void _armci_serv_pendbuf_progress_get(pendbuf_t *pbuf) { int index = (pbuf - serv_pendbuf_arr); request_header_t *msginfo = (request_header_t *)pbuf->buf; void *buffer =((char *)(msginfo+1)+msginfo->dscrlen); int *status = &pbuf->status; assert(sizeof(request_header_t)+msginfo->dscrlen+msginfo->datalendscrlen <= IMM_BUF_LEN) { /*Have the header and descriptor; go process*/ armci_complete_pendbuf(pbuf); if(msginfo->pinned) { *status = SEND_DATA_DONE; _armci_serv_pendbuf_freebuf(pbuf); } else { *status = SEND_DATA_PENDING; } } else { /*Need to get rest of descriptor*/ const int bytes = sizeof(request_header_t)+msginfo->dscrlen-IMM_BUF_LEN; #warning "PEND_BUFS: Abusing msginfo->tag.ack_ptr for GETS with large descriptors!" assert(msginfo->tag.ack_ptr != NULL); /*sanity check. Should point to tag.ack on the client side*/ void *lptr = ((char *)msginfo)+IMM_BUF_LEN; void *rptr = ((char *)msginfo->tag.ack_ptr) - (int)(&((request_header_t *)0)->tag.ack) + IMM_BUF_LEN; /* printf("%d(s):: GET getting rest of descriptor index=%d bytes=%d ptr=%p from=%d\n", */ /* armci_me,index,bytes,rptr,msginfo->from); */ /* fflush(stdout); */ assert(IMM_BUF_LEN+bytes < PENDING_BUF_LEN); armci_pbuf_start_get(msginfo,rptr,lptr,bytes,msginfo->from,index); *status = RECV_DSCR_PENDING; } break; case RECV_DSCR_PENDING: armci_die("call_data_server should set status to RECV_DSCR_DONE before calling progress",*status); break; case SEND_DATA_PENDING: armci_die("call_data_server should set status to SEND_DATA_DONE before calling progress",*status); break; case RECV_DSCR_DONE: /* printf("%d(s):: GET. Done recving descriptor index=%d op=%d datalen=%d from=%d\n", */ /* armci_me,index,msginfo->operation,msginfo->datalen,msginfo->from); */ /* fflush(stdout); */ armci_complete_pendbuf(pbuf); if(msginfo->pinned) { *status = SEND_DATA_DONE; _armci_serv_pendbuf_freebuf(pbuf); } else { *status = SEND_DATA_PENDING; } break; case SEND_DATA_DONE: _armci_serv_pendbuf_freebuf(pbuf); break; case RECV_DATA_PENDING: case RECV_DATA_DONE: default: armci_die("pendbuf_progress_get: invalid status", *status); } } /** Progress PUT/ACC requests. * @param pbuf IN Pending buffer containing the PUT/ACC request * @return none */ static void _armci_serv_pendbuf_progress_putacc(pendbuf_t *pbuf) { int index = (pbuf - serv_pendbuf_arr); request_header_t *msginfo = (request_header_t *)pbuf->buf; void *buffer =((char *)(msginfo+1))+msginfo->dscrlen; int *status = &pbuf->status; assert(msginfo->operation==PUT || ARMCI_ACC(msginfo->operation)); assert(sizeof(request_header_t)+msginfo->dscrlen+msginfo->datalenoperation,msginfo->from); */ /* fflush(stdout); */ if(sizeof(request_header_t)+msginfo->dscrlen <= IMM_BUF_LEN) { /*Have the header and descriptor; go process*/ assert(sizeof(request_header_t)+msginfo->dscrlen+msginfo->tag.data_len < PENDING_BUF_LEN); armci_pbuf_start_get(msginfo,msginfo->tag.data_ptr,buffer,msginfo->tag.data_len, msginfo->from, index); /* printf("%d(s): PUT/ACC getting data. pbuf_num=%d data_ptr=%p data_len=%d bytes=%d\n", armci_me,index,msginfo->tag.data_ptr, msginfo->tag.data_len,msginfo->bytes); */ *status = RECV_DATA_PENDING; } else { /*Need to get rest of descriptor*/ const int bytes = sizeof(request_header_t)+msginfo->dscrlen-IMM_BUF_LEN; #warning "PEND_BUFS: Abusing msginfo->tag.ack_ptr for GETS with large descriptors!" assert(msginfo->tag.ack_ptr != NULL); /*sanity check. Should point to tag.ack on the client side*/ void *lptr = ((char *)msginfo)+IMM_BUF_LEN; void *rptr = ((char *)msginfo->tag.ack_ptr) - (int)(&((request_header_t *)0)->tag.ack) + IMM_BUF_LEN; /* printf("%d(s):: PUT getting rest of descriptor index=%d bytes=%d ptr=%p from=%d\n", */ /* armci_me,index,bytes,rptr,msginfo->from); */ /* fflush(stdout); */ assert(IMM_BUF_LEN+bytes < PENDING_BUF_LEN); armci_pbuf_start_get(msginfo,rptr,lptr,bytes,msginfo->from,index); *status = RECV_DSCR_PENDING; } break; case RECV_DSCR_PENDING: armci_die("call_data_server should set status to RECV_DSCR_DONE before calling progress",*status); break; case RECV_DATA_PENDING: armci_die("call_data_server should set status to RECV_DONE before calling progress",*status); break; case RECV_DSCR_DONE: assert(sizeof(request_header_t)+msginfo->dscrlen+msginfo->tag.data_len < PENDING_BUF_LEN); armci_pbuf_start_get(msginfo,msginfo->tag.data_ptr,buffer,msginfo->tag.data_len, msginfo->from, index); /* printf("%d(s): PUT/ACC getting data. pbuf_num=%d data_ptr=%p data_len=%d bytes=%d\n", armci_me,index,msginfo->tag.data_ptr, msginfo->tag.data_len,msginfo->bytes); */ *status = RECV_DATA_PENDING; break; case RECV_DATA_DONE: /* printf("%d(s):: Done PUT/ACC with buf index=%d op=%d datalen=%d from=%d\n", */ /* armci_me,index,msginfo->operation,msginfo->datalen,msginfo->from); */ /* fflush(stdout); */ if(msginfo->operation == PUT && pbuf->order_prev!=NULL) { assert(pbuf->commit_me == 0); /*Why called so many times in thie state?*/ pbuf->commit_me = 1; break; } pbuf->commit_me = 0; armci_complete_pendbuf(pbuf); _armci_serv_pendbuf_freebuf(pbuf); break; case SEND_DATA_PENDING: case SEND_DATA_DONE: default: armci_die("pendbuf_progress_putacc: invalid status", *status); } } /** Make progress on processing a pending buffer. This function, also * ensures any other waiting messages get processed if they can * be. Thus, progress and eventual termination is guaranteed by this * function. * @param _pbuf IN Pending buffer to make progress on * @return none */ static void _armci_serv_pendbuf_progress(pendbuf_t *_pbuf){ request_header_t *msginfo = (request_header_t *)_pbuf->buf; immbuf_t *vbuf = _pbuf->vbuf; pendbuf_t *pbuf = _pbuf; assert(pbuf->vbuf!=NULL); do { if(vbuf && !IS_IMM_MSG(*msginfo)) { assert(pbuf->vbuf == vbuf); } /* printf("%d(s):: progressing op=%d imm=%d from=%d datalen=%d pbuf=%p vbuf=%p n_pending=%d\n", armci_me, */ /* msginfo->operation,msginfo->tag.imm_msg,msginfo->from,msginfo->datalen, pbuf,vbuf,pbuf_proc_list_info[msginfo->from].n_pending); */ /* fflush(stdout); */ if(IS_IMM_MSG(*msginfo)) { armci_complete_immbuf(vbuf); } else { /*non-immediate message*/ proc_waitlist_t* info = &pbuf_proc_list_info[msginfo->from]; do { assert(pbuf->vbuf == vbuf); if(msginfo->operation == PUT || ARMCI_ACC(msginfo->operation)) { _armci_serv_pendbuf_progress_putacc(pbuf); } else if (msginfo->operation == GET) { _armci_serv_pendbuf_progress_get(pbuf); } else { armci_die("pending buffer processing for this op not yet implemented", msginfo->operation); } pbuf = info->order_head; vbuf = pbuf ? pbuf->vbuf : NULL; } while(info->order_head && info->order_head->commit_me); } /* sleep(2); */ vbuf = _armci_serv_pendbuf_promote(); if(vbuf) { msginfo = (request_header_t *)vbuf->buf; if(!msginfo->tag.imm_msg) { pbuf = _armci_serv_pendbuf_assignbuf(vbuf); assert(pbuf != NULL); } } } while(vbuf != NULL); } /*----------------External functions--------------------*/ /** Initialize array of pending buffers * @return none */ void armci_pendbuf_init() { int i; ARMCI_PR_DBG("enter",0); /* bzero(serv_pendbuf_arr, sizeof(pendbuf_t)*PENDING_BUF_NUM); */ for(i=0; ibuf; bzero(pbuf, sizeof(pendbuf_t)); pbuf->buf = buf; pbuf->avail=1; } pbuf_ordering_plist_head=NULL; pbuf_proc_list_info = (proc_waitlist_t *)malloc(sizeof(proc_waitlist_t)*armci_nproc); assert(pbuf_proc_list_info != NULL); bzero(pbuf_proc_list_info, sizeof(proc_waitlist_t)*armci_nproc); ARMCI_PR_DBG("exit",0); } void armci_pendbuf_service_req(immbuf_t *immbuf) { pendbuf_t *pbuf; request_header_t *msginfo=(request_header_t*)immbuf->buf; if(IS_IMM_MSG(*msginfo) && _armci_serv_pendbuf_can_progress(immbuf)) { /* printf("%d: msg vbuf=%p op=%d from=%d imm=%d datalen=%d bytes=%d data_ptr=%p can progress. Completing it now!\n", */ /* armci_me, vbuf, msginfo->operation, msginfo->from, msginfo->tag.imm_msg,msginfo->datalen,msginfo->bytes,msginfo->tag.data_ptr); */ /* fflush(stdout); */ armci_complete_immbuf(immbuf); } else if(pbuf = _armci_serv_pendbuf_enqueue(immbuf)) { /* printf("%d: msg vbuf=%p op=%d from=%d imm=%d datalen=%d bytes=%d data_ptr=%p got pending buf. Progressing it!\n", */ /* armci_me, vbuf, msginfo->operation, msginfo->from, msginfo->tag.imm_msg,msginfo->datalen,msginfo->bytes,msginfo->tag.data_ptr); */ /* fflush(stdout); */ _armci_serv_pendbuf_progress(pbuf); } else { /* printf("%d: msg vbuf=%p op=%d from=%d imm=%d datalen=%d bytes=%d data_ptr=%p in waitlist!\n", armci_me, vbuf, msginfo->operation, msginfo->from, msginfo->tag.imm_msg,msginfo->datalen,msginfo->bytes,msginfo->tag.data_ptr); */ /* fflush(stdout); */ } } /**Network layer reporting to split buffers code that a put completed * on a pending buffer. * @param pbufid IN Pending buffer id (specified when starting a * put). * @return void */ void armci_pendbuf_done_put(int pbufid) { assert(pbufid>=0 && pbufid=0 && pbufidstatus) { case RECV_DSCR_PENDING: pbuf->status = RECV_DSCR_DONE; break; case RECV_DATA_PENDING: pbuf->status = RECV_DATA_DONE; break; default: armci_die("Reporting get done on buf with inappropriate status",pbufid); } _armci_serv_pendbuf_progress(pbuf); } #endif /*PEND_BUFS*/ ga-5-3/armci/src/devices/mpi-mt/0000750005473000001440000000000012275260534015310 5ustar d3n000usersga-5-3/armci/src/devices/mpi-mt/mpi2_server.c0000640005473000001440000002326111640167602017713 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include /** * mpi2_server.c: MPI_SPAWN Server Code * Manojkumar Krishnan */ #if HAVE_STDARG_H # include #endif #if HAVE_STDIO_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_STDLIB_H # include #endif #include "mpi.h" #include "armcip.h" #include "mpi2.h" #include "kr_malloc.h" #include "locks.h" /* Inter-communicators for communicating with clients */ /* Abhinav Vishnu */ void armci_mpi2_server_init_twosided(); MPI_Comm MPI_COMM_SERVER2CLIENT = MPI_COMM_NULL; static int armci_server_me=-1, armci_nserver=-1; static int armci_client_first=-1, armci_nclients=-1; extern Header *armci_get_shmem_ptr(int shmid, long shmoffset, size_t shmsize); #if MPI_SPAWN_DEBUG void armci_mpi2_server_debug(int rank, const char *format, ...) { va_list arg; if(rank == armci_server_me) { va_start(arg, format); printf("**** Server %d: ", armci_server_me); vprintf(format, arg); va_end(arg); fflush(stdout); } } #else # define armci_mpi2_server_debug(x, ...) #endif #if 1 static inline int MPI_Check (int status) { if(status != MPI_SUCCESS) { armci_mpi2_server_debug(armci_me, "MPI Check failed.\n"); armci_die("MPI_Check failed.", 0); } } #else # define MPI_Check(x) x #endif void armci_mpi_strided_s2c(int op, void *ptr, int stride_levels, int stride_arr[], int count[], int proc, MPI_Comm comm) { int i, j; long idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int bvalue[MAX_STRIDE_LEVEL], bunit[MAX_STRIDE_LEVEL]; MPI_Status status; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ bvalue[0] = 0; bvalue[1] = 0; bunit[0] = 1; bunit[1] = 1; for(i=2; i<=stride_levels; i++) { bvalue[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } for(i=0; i (count[j]-1)) bvalue[j] = 0; } if(op == SEND) { MPI_Check( MPI_Send(((char*)ptr)+idx, count[0], MPI_BYTE, proc, ARMCI_MPI_SERVER2CLIENT_TAG, comm) ); } else /* ( op == RECV) */ { MPI_Check( MPI_Recv(((char*)ptr)+idx, count[0], MPI_BYTE, proc, ARMCI_MPI_CLIENT2SERVER_TAG, comm, &status) ); } } } void check_comm() { int result; assert(SERVER_CONTEXT); assert(ARMCI_COMM_WORLD != MPI_COMM_NULL); } /************************************************************************** * Platform specific server code as required by the ARMCI s/w layer. (BEGIN) */ /* establish connections with client (i.e compute) processes */ void armci_server_initial_connection() { armci_mpi2_server_init_twosided(); armci_mpi2_server_debug(0, "armci_server_initial_connection\n"); } /* close all open connections, called before terminating/aborting */ void armci_transport_cleanup() { #if 0 /* armci_transport_cleanup is called by all procs (clients and servers). Therefore, only in server case we need to finalize MPI before exit. */ if(ARMCI_COMM_WORLD != MPI_COMM_NULL) { armci_mpi2_server_debug(0, "Calling MPI_Finalize\n"); MPI_Finalize(); exit(EXIT_SUCCESS); /* server termination */ } #endif } static void armci_mpi_rcv_strided_data(request_header_t *msginfo, void *vdscr, int from) { int bytes; void *ptr; char *dscr; int stride_levels, *stride_arr, *count; bytes = msginfo->dscrlen; dscr = (char*)(msginfo + 1); *(void**)vdscr = (void *)dscr; ptr = *(void**)dscr; dscr += sizeof(void*); stride_levels = *(int*)dscr; dscr += sizeof(int); stride_arr = (int*)dscr; dscr += stride_levels*sizeof(int); count = (int*)dscr; dscr += (stride_levels+1)*sizeof(int); check_comm(); { armci_mpi_strided_s2c(RECV, ptr, stride_levels, stride_arr, count, from, ARMCI_COMM_WORLD); } } static void armci_mpi_rcv_vector_data(request_header_t *msginfo, void *vdscr, int proc) { armci_die("armci_mpi_rcv_vector_data(): Not yet implemented!", 0); } /* server receives request */ void armci_rcv_req (void *mesg, void *phdr, void *pdescr, void *pdata, int *buflen) { request_header_t *msginfo = NULL; int hdrlen = sizeof(request_header_t); int p=-1; int bytes; check_comm(); MPI_Status status; msginfo = (request_header_t*) MessageRcvBuffer; p = * (int *) mesg; MPI_Check( MPI_Recv(MessageRcvBuffer, MSG_BUFLEN, MPI_BYTE, p, ARMCI_MPI_CLIENT2SERVER_TAG, ARMCI_COMM_WORLD, &status) ); * (void **) phdr = msginfo; if( !(p >= 0 && p < armci_nproc) ) armci_die("armci_rcv_req: request from invalid client", p); armci_mpi2_server_debug(armci_server_me, "armci_rcv_req: op=%d mesg=%p, phdr=%p " "pdata=%p, buflen=%p, p=%d\n", msginfo->operation, mesg, phdr, pdata, buflen, p, MSG_BUFLEN); #ifdef MPI_SPAWN_ZEROCOPY assert(0); #endif *buflen = MSG_BUFLEN - hdrlen; if (msginfo->operation == GET) { bytes = msginfo->dscrlen; } else { bytes = msginfo->bytes; if (bytes > *buflen) armci_die2("armci_rcv_req: message overflowing rcv buf", msginfo->bytes, *buflen); } if (msginfo->bytes) { * (void **) pdescr = msginfo + 1; * (void **) pdata = msginfo->dscrlen + (char *) (msginfo+1); *buflen -= msginfo->dscrlen; if (msginfo->operation != GET && msginfo->datalen) { *buflen -= msginfo->datalen; } } else { * (void**) pdata = msginfo + 1; * (void**) pdescr = NULL; } if (msginfo->datalen > 0 && msginfo->operation != GET) { if (msginfo->datalen > (MSG_BUFLEN - hdrlen - msginfo->dscrlen)) { armci_die2("armci_rcv_req:data overflowing buffer", msginfo->dscrlen, msginfo->datalen); } *buflen -= msginfo->datalen; } } /* server sends data back to client */ void armci_WriteToDirect (int to, request_header_t *msginfo, void *data) { armci_mpi2_server_debug(armci_server_me, "armci_WriteToDirect: " "to=%d, msginfo=%p, data=%p, bytes=%d\n", to, msginfo, data, msginfo->datalen); if( !(to >= 0 && to < armci_nproc) ) armci_die("armci_WriteToDirect: send request to invalid client", to); check_comm(); MPI_Check( MPI_Send(data, msginfo->datalen, MPI_BYTE, to, ARMCI_MPI_SERVER2CLIENT_TAG, ARMCI_COMM_WORLD) ); } /*\ server sends strided data back to client \*/ void armci_WriteStridedToDirect(int to, request_header_t* msginfo, void *ptr, int strides, int stride_arr[], int count[]) { armci_mpi2_server_debug(armci_server_me, "armci_WriteStridedToDirect: " "to=%d, stride_levels=%d, bytes=%d\n", to, strides, msginfo->datalen); check_comm(); { armci_mpi_strided_s2c(SEND, ptr, strides, stride_arr, count, to, ARMCI_COMM_WORLD); } } void armci_call_data_server() { int p=-1; MPI_Status status; armci_mpi2_server_debug(0, "armci_call_data_server(): Server main loop\n"); int result; check_comm(); /* server main loop; wait for and service requests until QUIT requested */ int flag = 0; for(;;) { #if 1 while (!flag) { MPI_Check( MPI_Iprobe(MPI_ANY_SOURCE, ARMCI_MPI_CLIENT2SERVER_TAG, ARMCI_COMM_WORLD, &flag, &status) ); } #else MPI_Check( MPI_Probe(MPI_ANY_SOURCE, ARMCI_MPI_CLIENT2SERVER_TAG, ARMCI_COMM_WORLD, &status) ); #endif flag = 0; p = status.MPI_SOURCE; assert((p>= 0) && (p < armci_nproc)); armci_mpi2_server_debug(armci_server_me, "Processing message from client %d\n", p); armci_data_server(&p); } } /** * Platform specific server code ENDs here. **************************************************************************/ static void emulate_armci_init_clusinfo() { assert(0); } static void emulate_armci_allocate_locks(long *shm_info) { assert(0); } /* Abhinav Vishnu */ void armci_mpi2_server_init_twosided() { int namelen, version, subversion; char processor_name[MPI_MAX_PROCESSOR_NAME]; long shm_info[3]; MPI_Status status; assert(ARMCI_COMM_WORLD != MPI_COMM_NULL); MPI_Check(MPI_Comm_rank(ARMCI_COMM_WORLD, &armci_server_me)); armci_nserver = armci_nclus; MPI_Check(MPI_Get_processor_name(processor_name, &namelen)); MPI_Check(MPI_Get_version(&version, &subversion)); } void armci_mpi2_server_init() { assert(0); } void armci_mpi2_server() { assert(0); } void armci_comm_dup_server(MPI_Comm * comm) { /* Do nothing */ } ga-5-3/armci/src/devices/mpi-mt/mpi2_client.c0000640005473000001440000002051411634232331017654 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** * MPI_SPAWN: ARMCI on top of MPI Multithreaded * Abhinav Vishnu */ #if HAVE_STDARG_H # include #endif #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_STDLIB_H # include #endif #include "mpi.h" #include "mpi2.h" #include "armcip.h" #include "request.h" #include "shmem.h" #include "locks.h" #include #define ARMCI_ROOT 0 /* root process */ /* Inter-communicators for communicating between clients and data servers */ MPI_Comm MPI_COMM_CLIENT2SERVER=MPI_COMM_NULL; static int armci_nserver=-1; static int *_armci_mpi_tag=NULL; extern char ***_armci_argv; extern int armci_get_shmem_info(char *addrp, int* shmid, long *shmoffset, size_t *shmsize); #if MPI_SPAWN_DEBUG void armci_mpi2_debug(int rank, const char *format, ...) { va_list arg; if(rank == armci_me) { va_start(arg, format); printf("%d: ", rank); vprintf(format, arg); va_end(arg); fflush(stdout); } } #else #define armci_mpi2_debug(x, ...) #endif #if MPI_SPAWN_DEBUG static inline int MPI_Check (int status) { if(status != MPI_SUCCESS) { armci_mpi2_debug(armci_me, "MPI Check failed.\n"); armci_die("MPI_Check failed.", 0); } } #else # define MPI_Check(x) x #endif /************************************************************************** * Platform specific server code as required by the ARMCI s/w layer. (BEGIN) */ /* Create connections between clients and servers */ void armci_init_connections() { armci_mpi2_debug(0, "armci_init_connections\n"); _armci_buf_init(); /* CHECK: Is this correct ? */ MPI_Check(MPI_Barrier(ARMCI_COMM_WORLD)); /* Abhinav Vishnu */ armci_create_server_MPIprocess(); armci_mpi2_debug(0, "armci_init_connections completed\n"); } void armci_wait_for_server() { armci_mpi2_debug(0, "armci_wait_for_server: wait for server to quit\n"); if (armci_me == armci_master) { armci_serv_quit(); } } void armci_client_connect_to_servers() { /* Abhinav Vishnu */ } /* NOTE: armci_mpi_strided and armci_mpi_strided2 are the only 2 functions * that are common to client and server part */ void armci_mpi_strided_c2s(int op, void *ptr, int stride_levels, int stride_arr[], int count[], int proc, MPI_Comm comm) { int i, j; long idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int bvalue[MAX_STRIDE_LEVEL], bunit[MAX_STRIDE_LEVEL]; MPI_Status status; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ bvalue[0] = 0; bvalue[1] = 0; bunit[0] = 1; bunit[1] = 1; for(i=2; i<=stride_levels; i++) { bvalue[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } for(i=0; i (count[j]-1)) bvalue[j] = 0; } if(op == SEND) { MPI_Check( MPI_Send(((char*)ptr)+idx, count[0], MPI_BYTE, proc, ARMCI_MPI_CLIENT2SERVER_TAG, comm) ); } else /* ( op == RECV) */ { MPI_Check( MPI_Recv(((char*)ptr)+idx, count[0], MPI_BYTE, proc, ARMCI_MPI_SERVER2CLIENT_TAG, comm, &status) ); } } } /* This is the only function that is common to client and server part */ void armci_mpi_strided2(int op, void *ptr, int stride_levels, int stride_arr[], int count[], int proc, MPI_Comm comm) { /* Not supported */ assert(0); } /*\ client sends request message to server \*/ int armci_send_req_msg (int proc, void *buf, int bytes) { int clus_id = armci_clus_id(proc); int server ; /* Abhinav Vishnu */ server = armci_clus_info[clus_id].master; armci_mpi2_debug(armci_me, "armci_send_req_msg(): proc=%d, server=%d, " "buf=%p, bytes=%d\n", proc, server, buf, bytes); MPI_Check( MPI_Send(buf, bytes, MPI_BYTE, server, ARMCI_MPI_CLIENT2SERVER_TAG, ARMCI_COMM_WORLD) ); armci_mpi2_debug(armci_me, "armci_send_req_msg(): send msg to server(%d), to" "fwd to client %d\n", server, proc); return 0; } /*\ client sends strided data + request to server \*/ int armci_send_req_msg_strided(int proc, request_header_t *msginfo,char *ptr, int strides, int stride_arr[], int count[]) { int server; int clus_id = armci_clus_id(proc); int bytes; /* Abhinav Vishnu */ server = armci_clus_info[clus_id].master; armci_mpi2_debug(armci_me, "armci_send_req_msg_strided: proc=%d server=%d " "bytes=%d (op=%d)\n", proc, server, msginfo->datalen, msginfo->operation); /* we write header + descriptor of strided data */ bytes = sizeof(request_header_t) + msginfo->dscrlen; armci_send_req_msg(proc, msginfo, bytes); { /* for larger blocks write directly thus avoiding memcopy */ armci_mpi_strided_c2s(SEND, ptr, strides, stride_arr, count, server, ARMCI_COMM_WORLD); } armci_mpi2_debug(armci_me, "armci_send_req_msg_strided(): send msg to " "server(%d), to fwd to client %d\n", server, proc); return 0; } /*\ client receives data from server \*/ char *armci_ReadFromDirect (int proc, request_header_t *msginfo, int len) { int server; int clus_id = armci_clus_id(proc); MPI_Status status; server = armci_clus_info[clus_id].master; armci_mpi2_debug(armci_me, "armci_ReadFromDirect: proc=%d, server=%d, " "msginfo=%p, bytes=%d (op=%d)\n", proc, server, msginfo, len, msginfo->operation); MPI_Check( MPI_Recv(msginfo + 1, len, MPI_BYTE, server, ARMCI_MPI_SERVER2CLIENT_TAG, ARMCI_COMM_WORLD, &status) ); armci_mpi2_debug(armci_me, "recv msg from server(%d), fwd by client %d\n", server, proc); { int count; MPI_Get_count(&status, MPI_BYTE, &count); if (count != len) { armci_mpi2_debug(armci_me, "armci_ReadFromDirect: got %d bytes, " "expected %d bytes\n", count, len); armci_die("armci_ReadFromDirect: MPI_Recv failed.", count); } } return (char *) (msginfo+1); } /*\ client receives strided data from server \*/ void armci_ReadStridedFromDirect(int proc, request_header_t* msginfo, void *ptr, int strides, int stride_arr[], int count[]) { int server; int clus_id = armci_clus_id(proc); /* Abhinav Vishnu */ server = armci_clus_info[clus_id].master; armci_mpi2_debug(armci_me, "armci_ReadStridedFromDirect: proc=%d " "stride_levels=%d, server=%d bytes=%d (op=%d)\n", proc, strides, server, msginfo->datalen, msginfo->operation); { armci_mpi_strided_c2s(RECV, ptr, strides, stride_arr, count, server, ARMCI_COMM_WORLD); } } /** * Platform specific server code ENDs here. (END) **************************************************************************/ static void armci_gather_hostnames(char **hostname_arr) { /* Code must not flow through here */ assert(0); } /** * Create server processes. This is called in armci_start_server. * Must be called after armci_init_clusinfo(). */ void armci_create_server_MPIprocess () { int rank, size, flag, i; MPI_Check(MPI_Initialized(&flag)); if (flag == 0) armci_die("ARMCI error: MPI_Init must be called before PARMCI_Init()",0); MPI_Check(MPI_Comm_rank(ARMCI_COMM_WORLD, &rank)); MPI_Check(MPI_Comm_size(ARMCI_COMM_WORLD, &size)); armci_nserver = armci_nclus; /* makesure all processes sync here. CHECK: does it ensure global sync ? */ MPI_Check(MPI_Barrier(ARMCI_COMM_WORLD)); armci_mpi2_debug(0, "armci_create_server_MPIprocess: Servers spawned!\n"); } ga-5-3/armci/src/devices/mpi-mt/mpi2.h0000640005473000001440000000274611631502334016332 0ustar d3n000users#ifndef MPI2_H #define MPI2_H #include #define MPI_SPAWN_DEBUG 0 #undef MPI_SPAWN_ZEROCOPY /* enables zero-copy for large requests */ #ifdef MPI_SPAWN_ZEROCOPY # define MPI_USER_DEF_DATATYPE /* Enables MPI userdefined type for non-contig * data, if MPI_SPAWN_ZEROCOPY is enabled */ #endif /* uncomment MULTIPLE_BUFS macro definition to disable multiple buffers */ #undef MULTIPLE_BUFS #define ARMCI_MPI_SPAWN_INIT_TAG 1000 #define ARMCI_MPI_SPAWN_TAG 2000 #define ARMCI_MPI_SPAWN_DATA_TAG 3000 #define ARMCI_MPI_SPAWN_VDATA_TAG 4000 #define ARMCI_MPI_CLIENT2SERVER_TAG 4500 #define ARMCI_MPI_SERVER2CLIENT_TAG 5000 /* In case of multiple buffers, we use tags from 2001 to 2999 (999 tags * total) to ensure flow control at the server side */ #define ARMCI_MPI_SPAWN_TAG_BEGIN 2001 #define ARMCI_MPI_SPAWN_TAG_END 2999 #define GET_SEND_BUFFER _armci_buf_get #define FREE_SEND_BUFFER _armci_buf_release #define COMPLETE_HANDLE _armci_buf_complete_nb_request #define TEST_HANDLE _armci_buf_test_nb_request #define SEND 0 #define RECV 1 extern void armci_mpi_strided(int op, void *ptr, int stride_levels, int stride_arr[], int count[], int proc, MPI_Comm comm); extern void armci_mpi_strided2(int op, void *ptr, int stride_levels, int stride_arr[], int count[], int proc, MPI_Comm comm); #endif /* MPI2_H */ ga-5-3/armci/src/devices/gemini/0000750005473000001440000000000012275260534015355 5ustar d3n000usersga-5-3/armci/src/devices/mpi-spawn/0000750005473000001440000000000012275260535016021 5ustar d3n000usersga-5-3/armci/src/devices/mpi-spawn/mpi2_server.c0000640005473000001440000004210211560713624020420 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** * mpi2_server.c: MPI_SPAWN Server Code * Manojkumar Krishnan */ #if HAVE_STDARG_H # include #endif #if HAVE_STDIO_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_STDLIB_H # include #endif #include "mpi.h" #include "armcip.h" #include "mpi2.h" #include "kr_malloc.h" #include "locks.h" /* Inter-communicators for communicating with clients */ MPI_Comm MPI_COMM_SERVER2CLIENT=MPI_COMM_NULL; static int armci_server_me=-1, armci_nserver=-1; static int armci_client_first=-1, armci_nclients=-1; extern Header *armci_get_shmem_ptr(int shmid, long shmoffset, size_t shmsize); /* ====================== MUltiple Buffers Code ======================== */ #ifdef MULTIPLE_BUFS #define MPI2_MAX_BUFS 10 typedef struct req_waitlist { int reqid; int p; int tag; struct req_waitlist *next; } req_waitlist_t; static double _mpi2_rcv_buf[MPI2_MAX_BUFS][MSG_BUFLEN_DBL]; static MPI_Request _mpi_request[MPI2_MAX_BUFS]; static int *_next_tag=NULL; static int _reqid_ready=0; static req_waitlist_t *_req_waitlist_head = NULL; static req_waitlist_t *_req_waitlist_tail = NULL; /* increment the tag value to maintain flowcontrol */ #define INCR_TAG(p) \ { \ if(++_next_tag[p] > ARMCI_MPI_SPAWN_TAG_END) \ _next_tag[p] = ARMCI_MPI_SPAWN_TAG_BEGIN; \ } static int wlist_get_req(int *p, int *tag, int *reqid) { req_waitlist_t *itr, *prev=NULL; for(itr=_req_waitlist_head; itr != NULL; itr=itr->next) { if(itr->tag == _next_tag[itr->p]) { /* mark the request id as ready to be processed, and update the * tag order and waitlist */ *p = itr->p; *tag = itr->tag; *reqid = itr->reqid; INCR_TAG(*p); /* remove this request from the waiting list */ if(itr==_req_waitlist_head) _req_waitlist_head = itr->next; if(itr==_req_waitlist_tail) _req_waitlist_tail = prev; if(prev != NULL) prev->next = itr->next; free(itr); return 1; } prev = itr; } return 0; } static void wlist_add_req(int reqid, int p, int tag) { req_waitlist_t *node = (req_waitlist_t *) malloc(sizeof(req_waitlist_t)); node->reqid = reqid; node->p = p; node->tag = tag; node->next = NULL; if(_req_waitlist_head == NULL) { _req_waitlist_head = node; _req_waitlist_tail = node; return; } /* append the new request at the end of the list */ _req_waitlist_tail->next = node; _req_waitlist_tail = node; } #endif /* ==================== END: Multiple Buffers Code ====================== */ #if MPI_SPAWN_DEBUG void armci_mpi2_server_debug(int rank, const char *format, ...) { va_list arg; if(rank == armci_server_me) { va_start(arg, format); printf("**** Server %d: ", armci_server_me); vprintf(format, arg); va_end(arg); fflush(stdout); } } #else # define armci_mpi2_server_debug(x, ...) #endif #if MPI_SPAWN_DEBUG static inline int MPI_Check (int status) { if(status != MPI_SUCCESS) { armci_mpi2_server_debug(armci_me, "MPI Check failed.\n"); armci_die("MPI_Check failed.", 0); } } #else # define MPI_Check(x) x #endif /************************************************************************** * Platform specific server code as required by the ARMCI s/w layer. (BEGIN) */ /* establish connections with client (i.e compute) processes */ void armci_server_initial_connection() { armci_mpi2_server_debug(0, "armci_server_initial_connection\n"); } /* close all open connections, called before terminating/aborting */ void armci_transport_cleanup() { /* armci_transport_cleanup is called by all procs (clients and servers). Therefore, only in server case we need to finalize MPI before exit. */ if(MPI_COMM_SERVER2CLIENT != MPI_COMM_NULL) { armci_mpi2_server_debug(0, "Calling MPI_Finalize\n"); MPI_Finalize(); exit(EXIT_SUCCESS); /* server termination */ } } static void armci_mpi_rcv_strided_data(request_header_t *msginfo, void *vdscr, int from) { int bytes; void *ptr; char *dscr; int stride_levels, *stride_arr, *count; bytes = msginfo->dscrlen; dscr = (char*)(msginfo + 1); *(void**)vdscr = (void *)dscr; ptr = *(void**)dscr; dscr += sizeof(void*); stride_levels = *(int*)dscr; dscr += sizeof(int); stride_arr = (int*)dscr; dscr += stride_levels*sizeof(int); count = (int*)dscr; dscr += (stride_levels+1)*sizeof(int); #ifdef MPI_USER_DEF_DATATYPE if(stride_levels>0) { armci_mpi_strided2(RECV, ptr, stride_levels, stride_arr, count, from, MPI_COMM_SERVER2CLIENT); } else #endif { armci_mpi_strided(RECV, ptr, stride_levels, stride_arr, count, from, MPI_COMM_SERVER2CLIENT); } } static void armci_mpi_rcv_vector_data(request_header_t *msginfo, void *vdscr, int proc) { armci_die("armci_mpi_rcv_vector_data(): Not yet implemented!", 0); } /* server receives request */ void armci_rcv_req (void *mesg, void *phdr, void *pdescr, void *pdata, int *buflen) { request_header_t *msginfo = NULL; int hdrlen = sizeof(request_header_t); int p=-1; int bytes; #if !defined(MULTIPLE_BUFS) MPI_Status status; msginfo = (request_header_t*) MessageRcvBuffer; p = * (int *) mesg; MPI_Check( MPI_Recv(MessageRcvBuffer, MSG_BUFLEN, MPI_BYTE, p, ARMCI_MPI_SPAWN_TAG, MPI_COMM_SERVER2CLIENT, &status) ); #else int reqid = _reqid_ready;;/*get request id that is ready to be processed */ msginfo = (request_header_t*) _mpi2_rcv_buf[reqid]; p = * (int *) mesg; if(p != msginfo->from) armci_die("armci_rcv_req: invalid client", p); #endif * (void **) phdr = msginfo; if( !(p >= 0 && p < armci_nproc) ) armci_die("armci_rcv_req: request from invalid client", p); armci_mpi2_server_debug(armci_server_me, "armci_rcv_req: op=%d mesg=%p, phdr=%p " "pdata=%p, buflen=%p, p=%d\n", msginfo->operation, mesg, phdr, pdata, buflen, p, MSG_BUFLEN); #ifdef MPI_SPAWN_ZEROCOPY if(msginfo->operation==PUT && msginfo->datalen==0) { if(msginfo->format==STRIDED) { armci_mpi_rcv_strided_data(msginfo, pdescr, p); } if(msginfo->format==VECTOR) { armci_mpi_rcv_vector_data(msginfo, pdescr, p); } return; } #endif *buflen = MSG_BUFLEN - hdrlen; if (msginfo->operation == GET) { bytes = msginfo->dscrlen; } else { bytes = msginfo->bytes; if (bytes > *buflen) armci_die2("armci_rcv_req: message overflowing rcv buf", msginfo->bytes, *buflen); } #if MPI_SPAWN_DEBUG && !defined(MPI_SPAWN_ZEROCOPY) && 0 { int count; MPI_Get_count(&status, MPI_BYTE, &count); if (count != (bytes + hdrlen)) { armci_mpi2_server_debug(armci_server_me, "armci_rcv_req: " "got %d bytes, expected %d bytes\n", count, bytes + hdrlen); printf("%d: armci_rcv_req: got %d bytes, expected %d bytes (%d)\n", armci_me, count, bytes + hdrlen, msginfo->datalen); armci_die("armci_rcv_req: count check failed.\n", 0); } } #endif if (msginfo->bytes) { * (void **) pdescr = msginfo + 1; * (void **) pdata = msginfo->dscrlen + (char *) (msginfo+1); *buflen -= msginfo->dscrlen; if (msginfo->operation != GET && msginfo->datalen) { *buflen -= msginfo->datalen; } } else { * (void**) pdata = msginfo + 1; * (void**) pdescr = NULL; } if (msginfo->datalen > 0 && msginfo->operation != GET) { if (msginfo->datalen > (MSG_BUFLEN - hdrlen - msginfo->dscrlen)) { armci_die2("armci_rcv_req:data overflowing buffer", msginfo->dscrlen, msginfo->datalen); } *buflen -= msginfo->datalen; } } /* server sends data back to client */ void armci_WriteToDirect (int to, request_header_t *msginfo, void *data) { armci_mpi2_server_debug(armci_server_me, "armci_WriteToDirect: " "to=%d, msginfo=%p, data=%p, bytes=%d\n", to, msginfo, data, msginfo->datalen); if( !(to >= 0 && to < armci_nproc) ) armci_die("armci_WriteToDirect: send request to invalid client", to); MPI_Check( MPI_Send(data, msginfo->datalen, MPI_BYTE, to, ARMCI_MPI_SPAWN_TAG, MPI_COMM_SERVER2CLIENT) ); } /*\ server sends strided data back to client \*/ void armci_WriteStridedToDirect(int to, request_header_t* msginfo, void *ptr, int strides, int stride_arr[], int count[]) { armci_mpi2_server_debug(armci_server_me, "armci_WriteStridedToDirect: " "to=%d, stride_levels=%d, bytes=%d\n", to, strides, msginfo->datalen); #ifdef MPI_USER_DEF_DATATYPE if(strides>0) { armci_mpi_strided2(SEND, ptr, strides, stride_arr, count, to, MPI_COMM_SERVER2CLIENT); } else #endif { armci_mpi_strided(SEND, ptr, strides, stride_arr, count, to, MPI_COMM_SERVER2CLIENT); } } void armci_call_data_server() { int p=-1; MPI_Status status; armci_mpi2_server_debug(0, "armci_call_data_server(): Server main loop\n"); #if !defined(MULTIPLE_BUFS) /* server main loop; wait for and service requests until QUIT requested */ for(;;) { MPI_Check( MPI_Probe(MPI_ANY_SOURCE, ARMCI_MPI_SPAWN_TAG,MPI_COMM_SERVER2CLIENT, &status) ); p = status.MPI_SOURCE; armci_mpi2_server_debug(armci_server_me, "Processing message from client %d\n", p); armci_data_server(&p); } #else int i, tag, reqid, do_waitlist=0; /* server multiple bufs setup */ _req_waitlist_head = NULL; _req_waitlist_tail = NULL; /* Initialize "next tag" array, which manages flow control */ if( (_next_tag = (int*) malloc(armci_nproc*sizeof(int)) ) == NULL) armci_die("mpi2_server: _next_tag malloc failed", 0); for(i=0; itag; /* check if it is in or out of order request */ if(tag == _next_tag[p]) { INCR_TAG(p); } else { /* out of order req - enforce ordering by waitlisting this req */ wlist_add_req(reqid, p, tag); continue; } } /* mark the request id that is ready to processed */ _reqid_ready = reqid; /* server process the incoming (or waitlisted) request */ armci_data_server(&p); /* After completing the request (which also frees a buffer), server * posts a receive using this buffer */ MPI_Check( MPI_Irecv(_mpi2_rcv_buf[reqid], MSG_BUFLEN, MPI_BYTE, MPI_ANY_SOURCE, ARMCI_MPI_SPAWN_TAG, MPI_COMM_SERVER2CLIENT, &_mpi_request[reqid]) ); } #endif } /** * Platform specific server code ENDs here. **************************************************************************/ static void emulate_armci_init_clusinfo() { int psize; MPI_Comm_remote_size(MPI_COMM_SERVER2CLIENT, &psize); /* server id (i.e. server's armci_me) is derived from node master's id. Similar to armci_create_server_process() to set SERVER_CONTEXT */ armci_me = SOFFSET - armci_client_first; armci_nproc = psize; armci_usr_tid = THREAD_ID_SELF(); /*remember the main user thread id */ armci_master = armci_client_first; /* ***** emulate armci_init_clusinfo() ***** */ armci_clus_me = armci_server_me; armci_nclus = armci_nserver; armci_clus_first = armci_clus_info[armci_clus_me].master; armci_clus_last = (armci_clus_first + armci_clus_info[armci_clus_me].nslave - 1); if(armci_clus_first != armci_client_first || armci_nclients != armci_clus_info[armci_clus_me].nslave) { armci_mpi2_server_debug(armci_server_me, "armci_clus_first=%d, armci_clus_last=%d\n", armci_clus_first, armci_clus_last); armci_die("mpi2_server: armci_clus_info is incorrect.", 0); } } static void emulate_armci_allocate_locks(long *shm_info) { int shmid = (int) shm_info[0]; long shmoffset = shm_info[1]; size_t shmsize = (size_t) shm_info[2]; _armci_int_mutexes = (PAD_LOCK_T*) armci_get_shmem_ptr(shmid, shmoffset, shmsize); } void armci_mpi2_server_init() { int namelen, version, subversion; char processor_name[MPI_MAX_PROCESSOR_NAME]; long shm_info[3]; MPI_Status status; MPI_Comm_rank(ARMCI_COMM_WORLD, &armci_server_me); MPI_Comm_size(ARMCI_COMM_WORLD, &armci_nserver); MPI_Get_processor_name(processor_name, &namelen); MPI_Get_version(&version, &subversion); armci_mpi2_server_debug(armci_server_me, "I'm %d of %d SERVERS running on %s (MPI %d.%d)\n", armci_server_me, armci_nserver, processor_name, version, subversion); /* get parent's groupinfo */ MPI_Comm_get_parent(&MPI_COMM_SERVER2CLIENT); if (MPI_COMM_SERVER2CLIENT == MPI_COMM_NULL) { armci_die("mpi2_server: Invalid spawn. No parent process found.\n",0); } /* receive my clients info */ { int msg[3]; MPI_Recv(msg, 3, MPI_INT, MPI_ANY_SOURCE, ARMCI_MPI_SPAWN_INIT_TAG, MPI_COMM_SERVER2CLIENT, &status); if(msg[0]-ARMCI_MPI_SPAWN_INIT_TAG != armci_server_me) { armci_die("mpi2_server: Recv failed", msg[0]); } armci_client_first = msg[1]; armci_nclients = msg[2]; armci_mpi2_server_debug(armci_server_me, "My clients are [%d-%d]\n", armci_client_first, armci_client_first+armci_nclients-1); } /********************************************************************** * Emulate PARMCI_Init(). * Spawned Data server processes emulate PARMCI_Init() to complete the * ARMCI Initalization process similar to clients */ armci_clus_info =(armci_clus_t*)malloc(armci_nserver*sizeof(armci_clus_t)); if(armci_clus_info == NULL) { armci_die("mpi2_server: armci_clus_info malloc failed", 0); } /* receive and emulate clus info, lock info */ MPI_Recv(armci_clus_info, armci_nserver*sizeof(armci_clus_t), MPI_BYTE, armci_client_first, ARMCI_MPI_SPAWN_INIT_TAG, MPI_COMM_SERVER2CLIENT, &status); MPI_Recv(shm_info, 3, MPI_LONG, armci_client_first, ARMCI_MPI_SPAWN_INIT_TAG, MPI_COMM_SERVER2CLIENT, &status); /* server setup clusinfo&locks, exactly as this node's armci master */ emulate_armci_init_clusinfo(); /* armci_init_clusinfo() in PARMCI_Init */ emulate_armci_allocate_locks(shm_info); /* armci_allocate_locks() */ /* Fence data structures should be initialized by server too. see * armci_generic_rmw (called by armci_server_rmw) */ armci_init_fence(); /** * End of PARMCI_Init() emulation. * *******************************************************************/ MPI_Barrier(ARMCI_COMM_WORLD); } void armci_mpi2_server() { armci_mpi2_server_init(); armci_server_code(NULL); /* Should never come here */ armci_die("mpi2_server: server died in an unexpected manner", 0); } ga-5-3/armci/src/devices/mpi-spawn/mpi2_client.c0000640005473000001440000004141611560713624020377 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** * MPI_SPAWN: ARMCI on top of MPI. * Manojkumar Krishnan */ #if HAVE_STDARG_H # include #endif #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_STDLIB_H # include #endif #include "mpi.h" #include "mpi2.h" #include "armcip.h" #include "request.h" #include "shmem.h" #include "locks.h" #define ARMCI_ROOT 0 /* root process */ /* Inter-communicators for communicating between clients and data servers */ MPI_Comm MPI_COMM_CLIENT2SERVER=MPI_COMM_NULL; static int armci_nserver=-1; static int *_armci_mpi_tag=NULL; extern char ***_armci_argv; extern int armci_get_shmem_info(char *addrp, int* shmid, long *shmoffset, size_t *shmsize); #if MPI_SPAWN_DEBUG void armci_mpi2_debug(int rank, const char *format, ...) { va_list arg; if(rank == armci_me) { va_start(arg, format); printf("%d: ", rank); vprintf(format, arg); va_end(arg); fflush(stdout); } } #else #define armci_mpi2_debug(x, ...) #endif #if MPI_SPAWN_DEBUG static inline int MPI_Check (int status) { if(status != MPI_SUCCESS) { armci_mpi2_debug(armci_me, "MPI Check failed.\n"); armci_die("MPI_Check failed.", 0); } } #else # define MPI_Check(x) x #endif /************************************************************************** * Platform specific server code as required by the ARMCI s/w layer. (BEGIN) */ /* Create connections between clients and servers */ void armci_init_connections() { armci_mpi2_debug(0, "armci_init_connections\n"); _armci_buf_init(); /* CHECK: Is this correct ? */ } void armci_wait_for_server() { armci_mpi2_debug(0, "armci_wait_for_server: wait for server to quit\n"); if (armci_me == armci_master) { armci_serv_quit(); } } void armci_client_connect_to_servers() { armci_mpi2_debug(0, "armci_client_connect_to_servers\n"); } /* NOTE: armci_mpi_strided and armci_mpi_strided2 are the only 2 functions * that are common to client and server part */ void armci_mpi_strided(int op, void *ptr, int stride_levels, int stride_arr[], int count[], int proc, MPI_Comm comm) { int i, j; long idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int bvalue[MAX_STRIDE_LEVEL], bunit[MAX_STRIDE_LEVEL]; MPI_Status status; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ bvalue[0] = 0; bvalue[1] = 0; bunit[0] = 1; bunit[1] = 1; for(i=2; i<=stride_levels; i++) { bvalue[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } for(i=0; i (count[j]-1)) bvalue[j] = 0; } if(op == SEND) { MPI_Check( MPI_Send(((char*)ptr)+idx, count[0], MPI_BYTE, proc, ARMCI_MPI_SPAWN_DATA_TAG, comm) ); } else /* ( op == RECV) */ { MPI_Check( MPI_Recv(((char*)ptr)+idx, count[0], MPI_BYTE, proc, ARMCI_MPI_SPAWN_DATA_TAG, comm, &status) ); } } } /* This is the only function that is common to client and server part */ void armci_mpi_strided2(int op, void *ptr, int stride_levels, int stride_arr[], int count[], int proc, MPI_Comm comm) { int i, stride=1; MPI_Status status; MPI_Datatype type[MAX_STRIDE_LEVEL]; if(stride_levels == 0) { armci_mpi_strided(op, ptr, stride_levels, stride_arr, count, proc, comm); return; } /* convert stided data desciption to MPI type */ type[0] = MPI_BYTE; for(i=1; i<=stride_levels; i++) { stride *= stride_arr[i-1]; MPI_Check( MPI_Type_hvector(count[i], count[i-1], stride, type[i-1], &type[i]) ); } MPI_Check( MPI_Type_commit(&type[stride_levels]) ); if(op == SEND) { MPI_Check( MPI_Send(ptr, 1, type[stride_levels], proc, ARMCI_MPI_SPAWN_VDATA_TAG, comm) ); } else /* ( op == RECV) */ { MPI_Check( MPI_Recv(ptr, 1, type[stride_levels], proc, ARMCI_MPI_SPAWN_VDATA_TAG, comm, &status) ); } } /*\ client sends request message to server \*/ int armci_send_req_msg (int proc, void *buf, int bytes) { int server = armci_clus_id(proc); armci_mpi2_debug(armci_me, "armci_send_req_msg(): proc=%d, server=%d, " "buf=%p, bytes=%d\n", proc, server, buf, bytes); if( !(server >= 0 && server < armci_nserver) ) armci_die("armci_send_req_msg: Invalid server.", 0); #ifdef MULTIPLE_BUFS /** * Sequentially ordered tags to ensure flow control at the server side. * For example, a put followed by get from a client should be processed in * ORDER at the server side. If we don't have the flow control, the server * might process the get request first instead of put (and thus violating * ARMCI's ordering semantics. */ ((request_header_t*)buf)->tag = _armci_mpi_tag[server]; MPI_Check( MPI_Send(buf, bytes, MPI_BYTE, server, ARMCI_MPI_SPAWN_TAG, MPI_COMM_CLIENT2SERVER) ); _armci_mpi_tag[server]++; if(_armci_mpi_tag[server] > ARMCI_MPI_SPAWN_TAG_END) _armci_mpi_tag[server] = ARMCI_MPI_SPAWN_TAG_BEGIN; #else MPI_Check( MPI_Send(buf, bytes, MPI_BYTE, server, ARMCI_MPI_SPAWN_TAG, MPI_COMM_CLIENT2SERVER) ); #endif armci_mpi2_debug(armci_me, "armci_send_req_msg(): send msg to server(%d), to" "fwd to client %d\n", server, proc); return 0; } /*\ client sends strided data + request to server \*/ int armci_send_req_msg_strided(int proc, request_header_t *msginfo,char *ptr, int strides, int stride_arr[], int count[]) { int server = armci_clus_id(proc); int bytes; armci_mpi2_debug(armci_me, "armci_send_req_msg_strided: proc=%d server=%d " "bytes=%d (op=%d)\n", proc, server, msginfo->datalen, msginfo->operation); THREAD_LOCK(armci_user_threads.net_lock); /* we write header + descriptor of strided data */ bytes = sizeof(request_header_t) + msginfo->dscrlen; armci_send_req_msg(proc, msginfo, bytes); #ifdef MPI_USER_DEF_DATATYPE if(strides>0) { armci_mpi_strided2(SEND, ptr, strides, stride_arr, count, server, MPI_COMM_CLIENT2SERVER); } else #endif { /* for larger blocks write directly thus avoiding memcopy */ armci_mpi_strided(SEND, ptr, strides, stride_arr, count, server, MPI_COMM_CLIENT2SERVER); } THREAD_UNLOCK(armci_user_threads.net_lock); armci_mpi2_debug(armci_me, "armci_send_req_msg_strided(): send msg to " "server(%d), to fwd to client %d\n", server, proc); return 0; } /*\ client receives data from server \*/ char *armci_ReadFromDirect (int proc, request_header_t *msginfo, int len) { int server = armci_clus_id(proc); MPI_Status status; armci_mpi2_debug(armci_me, "armci_ReadFromDirect: proc=%d, server=%d, " "msginfo=%p, bytes=%d (op=%d)\n", proc, server, msginfo, len, msginfo->operation); if( !(server >= 0 && server < armci_nserver) ) armci_die("armci_ReadFromDirect: Invalid server.", 0); MPI_Check( MPI_Recv(msginfo + 1, len, MPI_BYTE, server, ARMCI_MPI_SPAWN_TAG, MPI_COMM_CLIENT2SERVER, &status) ); armci_mpi2_debug(armci_me, "recv msg from server(%d), fwd by client %d\n", server, proc); #if MPI_SPAWN_DEBUG { int count; MPI_Get_count(&status, MPI_BYTE, &count); if (count != len) { armci_mpi2_debug(armci_me, "armci_ReadFromDirect: got %d bytes, " "expected %d bytes\n", count, len); armci_die("armci_ReadFromDirect: MPI_Recv failed.", count); } } #endif return (char *) (msginfo+1); } /*\ client receives strided data from server \*/ void armci_ReadStridedFromDirect(int proc, request_header_t* msginfo, void *ptr, int strides, int stride_arr[], int count[]) { int server=armci_clus_id(proc); armci_mpi2_debug(armci_me, "armci_ReadStridedFromDirect: proc=%d " "stride_levels=%d, server=%d bytes=%d (op=%d)\n", proc, strides, server, msginfo->datalen, msginfo->operation); if( !(server >= 0 && server < armci_nserver) ) armci_die("armci_ReadStridedFromDirect: Invalid server.", 0); #ifdef MPI_USER_DEF_DATATYPE if(strides > 0) { armci_mpi_strided2(RECV, ptr, strides, stride_arr, count, server, MPI_COMM_CLIENT2SERVER); } else #endif { armci_mpi_strided(RECV, ptr, strides, stride_arr, count, server, MPI_COMM_CLIENT2SERVER); } } /** * Platform specific server code ENDs here. (END) **************************************************************************/ static void armci_gather_hostnames(char **hostname_arr) { int i, j, k, namelen, is_master; char hostname[MPI_MAX_PROCESSOR_NAME], *hostnames=NULL; int *master_arr=NULL; master_arr = (int*) malloc(armci_nproc * sizeof(int)); hostnames = (char*) malloc(armci_nproc * MPI_MAX_PROCESSOR_NAME * sizeof(char)); if(hostnames==NULL || master_arr==NULL) { armci_die("armci_gather_hostnames: malloc failed.", 0); } MPI_Get_processor_name(hostname, &namelen); MPI_Check( MPI_Allgather(hostname, MPI_MAX_PROCESSOR_NAME, MPI_CHAR, hostnames, MPI_MAX_PROCESSOR_NAME, MPI_CHAR, ARMCI_COMM_WORLD) ); if(armci_me == armci_master) { is_master = 1; } else { is_master = 0; } MPI_Check(MPI_Allgather(&is_master, 1, MPI_INT, master_arr, 1, MPI_INT, ARMCI_COMM_WORLD)); { /* get only the hostname of armci master processes */ for(i=0,j=0,k=0; i=armci_nserver) armci_die("armci_gather_hostnames: Invalid masters.",0); strncpy(hostname_arr[j++], &hostnames[k], MPI_MAX_PROCESSOR_NAME); } k += MPI_MAX_PROCESSOR_NAME; } } free(hostnames); free(master_arr); } void select_server_program(char *server_program, int num_procs) { strcpy(server_program, (*_armci_argv)[0]); return; } static void armci_mpi2_spawn() { int i; char server_program[100]; char **command_arr=NULL, **hostname_arr=NULL, **nid_arr=NULL; int *size_arr=NULL; MPI_Info *info_arr; /* we need to start 1 data server process on each node. So a total of "armci_nclus" data servers */ armci_nserver = armci_nclus; select_server_program(server_program, armci_nserver); armci_mpi2_debug(0, "armci_mpi2_init(): Spawning %d data server processes " "running %s\n", armci_nserver, server_program); /* allocate necessary data structures */ { command_arr = (char**) malloc(armci_nserver * sizeof(char*)); size_arr = (int*) malloc(armci_nserver * sizeof(int)); info_arr = (MPI_Info*) malloc(armci_nserver * sizeof(MPI_Info)); hostname_arr = (char**) malloc(armci_nserver * sizeof(char*)); #ifdef SPAWN_CRAY_XT nid_arr = (char**) malloc(armci_nserver * sizeof(char*));; #endif for(i=0; i #define MPI_SPAWN_DEBUG 0 #define MPI_SPAWN_ZEROCOPY /* enables zero-copy for large requests */ #ifdef MPI_SPAWN_ZEROCOPY # define MPI_USER_DEF_DATATYPE /* Enables MPI userdefined type for non-contig * data, if MPI_SPAWN_ZEROCOPY is enabled */ #endif /* uncomment MULTIPLE_BUFS macro definition to disable multiple buffers */ #define MULTIPLE_BUFS #define ARMCI_MPI_SPAWN_INIT_TAG 1000 #define ARMCI_MPI_SPAWN_TAG 2000 #define ARMCI_MPI_SPAWN_DATA_TAG 3000 #define ARMCI_MPI_SPAWN_VDATA_TAG 4000 /* In case of multiple buffers, we use tags from 2001 to 2999 (999 tags * total) to ensure flow control at the server side */ #define ARMCI_MPI_SPAWN_TAG_BEGIN 2001 #define ARMCI_MPI_SPAWN_TAG_END 2999 #define GET_SEND_BUFFER _armci_buf_get #define FREE_SEND_BUFFER _armci_buf_release #define COMPLETE_HANDLE _armci_buf_complete_nb_request #define TEST_HANDLE _armci_buf_test_nb_request #define SEND 0 #define RECV 1 extern void armci_mpi_strided(int op, void *ptr, int stride_levels, int stride_arr[], int count[], int proc, MPI_Comm comm); extern void armci_mpi_strided2(int op, void *ptr, int stride_levels, int stride_arr[], int count[], int proc, MPI_Comm comm); #endif /* MPI2_H */ ga-5-3/armci/src/devices/portals/0000750005473000001440000000000012275260534015571 5ustar d3n000usersga-5-3/armci/src/devices/portals/armci_portals.h0000640005473000001440000000617311444464075020614 0ustar d3n000users #ifndef PORTALS_H #define PORTALS_H /* portals header file */ #ifdef CRAY_XT #include #include #else #include #include P3_NAL #include #include #endif /*this should match regions.c*/ #define PORTALS_MEM_REGIONS 24 #define MAX_OUT_ORG 16 #define MAX_OUT 1 #define HAS_RDMA_GET typedef enum op { ARMCI_PORTALS_PUT, ARMCI_PORTALS_NBPUT, ARMCI_PORTALS_GET, ARMCI_PORTALS_NBGET, ARMCI_PORTALS_ACC } armci_portals_optype; /* array of memory segments and corresponding memory descriptors */ typedef struct md_table{ ptl_md_t md; /* make this a ptr instead of struct */ void * start; void * end; int id; int bytes; ptl_match_bits_t mb; } md_table_entry_t; typedef struct desc{ int active; int tag; int dest_id; armci_portals_optype type; ptl_md_t mem_dsc; ptl_md_t mem_dsc_save; ptl_handle_md_t mem_dsc_hndl; }comp_desc; typedef struct region_memhdl{ ptl_match_bits_t match_bits; int regid; int islocal; ptl_size_t offset; comp_desc cdesc; } region_memhdl_t; #define NB_CMPL_T comp_desc* #define REGIONS_REQUIRE_MEMHDL #define ARMCI_MEMHDL_T region_memhdl_t #define ARMCI_NB_WAIT(_cntr) if(_cntr){\ int rc;\ if(nb_handle->tag==_cntr->tag)\ rc = armci_client_complete(NULL,nb_handle->proc,nb_handle->tag,_cntr);\ } /* structure of computing process */ typedef struct { int armci_rank; /* if different from portals_rank */ int rank; /* my rank*/ int size; /* size of the group */ ptl_handle_me_t me_h[64]; ptl_handle_eq_t eq_h; ptl_handle_ni_t ni_h; ptl_pt_index_t ptl; int outstanding_puts; int outstanding_gets; int outstanding_accs; void * buffers; /* ptr to head of buffer */ int num_match_entries; cnos_nidpid_map_t *ptl_pe_procid_map; ptl_process_id_t ptl_my_procid; } armci_portals_proc_t; extern void print_mem_desc_table(void); extern int armci_init_portals(void); extern void armci_fini_portals(void); extern int armci_post_descriptor(ptl_md_t *md); extern int armci_prepost_descriptor(void* start, long bytes); extern ptl_size_t armci_get_offset(ptl_md_t md, void *ptr,int proc); extern int armci_get_md(void * start, int bytes , ptl_md_t * md, ptl_match_bits_t * mb); extern int armci_portals_put(ptl_handle_md_t md_h,ptl_process_id_t dest_id,int bytes,int mb,int local_offset, int remote_offset,int ack ); extern int armci_portals_get(ptl_handle_md_t md_h,ptl_process_id_t dest_id,int bytes,int mb,int local_offset, int remote_offset); extern comp_desc * get_free_comp_desc(int,int *); extern int armci_client_direct_send(int proc,void *src, void* dst, int bytes, void **cmpl_info, int tag, ARMCI_MEMHDL_T *lochdl, ARMCI_MEMHDL_T *remhdl); extern int armci_portals_direct_get(void *src, void *dst, int bytes, int proc, int nbtag, NB_CMPL_T *cmpl_info); extern void comp_desc_init(); extern int armci_client_complete(ptl_event_kind_t *evt,int proc_id, int nb_tag ,comp_desc * cdesc); #endif /* PORTALS_H */ ga-5-3/armci/src/devices/portals/portals.c0000640005473000001440000010223311444464075017426 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* preliminary implementation on top of portals */ /*there are 3 kinds of ARMCI memory: PARMCI_Malloc, PARMCI_Malloc_local, user * allocated memory. For PARMCI_Malloc, we use region specific md that * comes from completion descriptor. * For PARMCI_Malloc_local, we use the MD from the lochdl * For user allocated memory, we use another list of MD's * which binds the user memory. We never keep track of non-armci allocated * memory. */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_FLOAT_H # include #endif #include "armcip.h" #include "message.h" #if HAVE_STDINT_H # include #endif #define DEBUG_COMM 0 #define DEBUG_INIT 0 #ifndef PMI_SUCCESS #define PMI_SUCCESS 0 #endif #ifdef CRAY_XT #include "locks.h" typedef struct { int off; int desc; } cnos_mutex_t; static cnos_mutex_t *_mutex_array; #endif /*global variables and data structures */ armci_portals_proc_t _armci_portals_proc_struct; armci_portals_proc_t *portals = &_armci_portals_proc_struct; comp_desc *_region_compdesc_array[PORTALS_MEM_REGIONS+1]; int ptl_initialized = 0; int free_desc_index[PORTALS_MEM_REGIONS+1]; FILE *utcp_lib_out; FILE* utcp_api_out; ptl_ni_limits_t armci_ptl_nilimits; int armci_init_portals(void) { int num_interface; int rc; int npes,i; comp_desc *armci_comp_desc; ptl_process_id_t match_id; ARMCI_PR_DBG("enter",0); if (PtlInit(&num_interface) != PTL_OK) { fprintf(stderr, "PtlInit() failed\n"); exit(1); } portals->ptl = 37; /* our own ptl number */ for(i=0;i<=PORTALS_MEM_REGIONS;i++){ free_desc_index[i]=0; } rc=PtlNIInit(IFACE_FROM_BRIDGE_AND_NALID(PTL_BRIDGE_UK,PTL_IFACE_SS), PTL_PID_ANY, NULL, &armci_ptl_nilimits, &(portals->ni_h)); switch(rc) { case PTL_OK: case PTL_IFACE_DUP: break; default: printf( "PtlNIInit() failed %d error=%s\n",rc,ptl_err_str[rc]); armci_die("NIInit Failed",0); } if(DEBUG_INIT || DEBUG_COMM) PtlNIDebug(portals->ni_h,PTL_DEBUG_ALL); PtlGetId(portals->ni_h,&portals->ptl_my_procid); if(DEBUG_INIT){ printf("%d:the rank is %d, size is %d\n",armci_me, portals->ptl_my_procid,portals->size); } if((rc=PMI_CNOS_Get_nidpid_map(&portals->ptl_pe_procid_map))!=PMI_SUCCESS){ printf("Getting proc map failed (npes=%d)\n", armci_nproc); } /* Allocate one shared event queue for all operations * TODO tune size. */ rc = PtlEQAlloc(portals->ni_h,1024,NULL, &(portals->eq_h)); if (rc != PTL_OK) { printf("%d:PtlEQAlloc() failed: %s (%d)\n", portals->ptl_my_procid, ptl_err_str[rc], rc); armci_die("EQ Alloc failed",rc); } ptl_initialized = 1; portals->num_match_entries = 0; #ifndef CRAY_XT utcp_lib_out = stdout; utcp_api_out = stdout; #endif /*now prepare for use of local memory*/ armci_comp_desc = (comp_desc *)malloc(sizeof(comp_desc)*MAX_OUT); for(i=0; i< MAX_OUT;i++){ ptl_md_t *md_ptr; ptl_handle_md_t *md_h; armci_comp_desc[i].active=0; md_ptr = &armci_comp_desc[i].mem_dsc; md_h = &armci_comp_desc[i].mem_dsc_hndl; md_ptr->eq_handle = portals->eq_h; md_ptr->max_size =0; md_ptr->threshold = 2;/*PTL_MD_THRESH_INF;*/ md_ptr->options = PTL_MD_OP_GET | PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; } _region_compdesc_array[PORTALS_MEM_REGIONS]=armci_comp_desc; ARMCI_PR_DBG("exit",0); return 0; } void armci_fini_portals() { ARMCI_PR_DBG("enter",0); if(DEBUG_INIT){ printf("ENTERING ARMCI_FINI_PORTALS\n");fflush(stdout); } PtlNIFini(portals->ni_h); /*PtlFini();*/ if(DEBUG_INIT){ printf("LEAVING ARMCI_FINI_PORTALS\n");fflush(stdout); } ARMCI_PR_DBG("exit",0); } void armci_serv_register_req(void *start,long bytes, ARMCI_MEMHDL_T *reg_mem) { int rc; void * context; ptl_md_t *md_ptr; ptl_match_bits_t *mb; ptl_process_id_t match_id; ptl_handle_md_t *md_h; ptl_match_bits_t ignbits = 0xFFFFFFFFFFFFFFF0; ARMCI_PR_DBG("enter",reg_mem->regid); if(DEBUG_COMM){ printf("%d:armci_serv_register_req:size of mem_hndl is %d\n", armci_me,sizeof(region_memhdl_t)); printf("\n%d:armci_serv_register_req start=%p bytes=%d\n", armci_me,start,bytes);fflush(stdout); } md_ptr = ®_mem->cdesc.mem_dsc; mb = ®_mem->match_bits; md_h = ®_mem->cdesc.mem_dsc_hndl; context = NULL; md_ptr->start = start; md_ptr->length = bytes; md_ptr->threshold = PTL_MD_THRESH_INF; md_ptr->options = PTL_MD_OP_PUT | PTL_MD_OP_GET | PTL_MD_MANAGE_REMOTE; md_ptr->user_ptr = context; /*eq_hdl is null for the attaches done for a remote proc*/ /*md_ptr->eq_handle = portals->eq_h;*/ md_ptr->eq_handle = PTL_EQ_NONE; md_ptr->max_size =0; *mb = 0x0000000000000000; *mb = (*mb+reg_mem->regid); match_id.nid = PTL_NID_ANY; match_id.pid = PTL_PID_ANY; rc = PtlMEAttach(portals->ni_h,portals->ptl,match_id,*mb,ignbits, PTL_RETAIN,PTL_INS_AFTER, &(portals->me_h[portals->num_match_entries])); if (rc != PTL_OK) { printf("%d:PtlMEAttach: %s\n", portals->ptl_my_procid, ptl_err_str[rc]); armci_die("portals attach error2",rc); } rc = PtlMDAttach(portals->me_h[portals->num_match_entries],*md_ptr,PTL_RETAIN,md_h); if (rc != PTL_OK) { printf("%d:PtlMDAttach: %s\n", portals->ptl_my_procid, ptl_err_str[rc]); armci_die("portals attach error1",rc); } portals->num_match_entries++; ARMCI_PR_DBG("exit",reg_mem->regid); } int armci_pin_contig_hndl(void *start,int bytes, ARMCI_MEMHDL_T *reg_mem) { int rc,i; void * context; ptl_md_t *md_ptr; ptl_process_id_t match_id; ptl_handle_md_t *md_h; comp_desc *armci_comp_desc; ARMCI_PR_DBG("enter",reg_mem->regid); /*first create comp_desc arr for this region if it is not local*/ if(!reg_mem->islocal){ armci_comp_desc = (comp_desc *)malloc(sizeof(comp_desc)*MAX_OUT); for(i=0; i< MAX_OUT;i++){ armci_comp_desc[i].active=0; md_ptr = &armci_comp_desc[i].mem_dsc; md_h = &armci_comp_desc[i].mem_dsc_hndl; context = NULL; md_ptr->start = start; md_ptr->length = bytes; md_ptr->threshold = 2;/*PTL_MD_THRESH_INF;*/ md_ptr->options = PTL_MD_OP_GET | PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; /*md_ptr->options = PTL_MD_EVENT_START_DISABLE;*/ md_ptr->user_ptr = context; md_ptr->eq_handle = portals->eq_h; md_ptr->max_size =0; #ifdef DO_MD_UPDATE rc = PtlMDBind(portals->ni_h,*md_ptr, PTL_RETAIN, md_h); if (rc != PTL_OK){ printf("%d:PtlMDBind: %s\n", portals->ptl_my_procid, ptl_err_str[rc]); armci_die("ptlmdbind failed",0); } #endif } _region_compdesc_array[reg_mem->regid]=armci_comp_desc; ARMCI_PR_DBG("exit",0); return 1; } else { md_ptr = ®_mem->cdesc.mem_dsc; md_h = ®_mem->cdesc.mem_dsc_hndl; context = NULL; md_ptr->start = start; md_ptr->length = bytes; md_ptr->threshold = 2;/*PTL_MD_THRESH_INF;*/ md_ptr->options = PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; md_ptr->user_ptr = context; md_ptr->eq_handle = portals->eq_h; md_ptr->max_size =0; #if DO_MD_UPDATE rc = PtlMDBind(portals->ni_h,*md_ptr, PTL_RETAIN, md_h); if (rc != PTL_OK){ printf("%d:PtlMDBind: %s\n", portals->ptl_my_procid, ptl_err_str[rc]); armci_die("ptlmdbind failed",0); } #endif ARMCI_PR_DBG("exit",1); return 1; } } int armci_client_complete(ptl_event_kind_t *evt,int proc_id, int nb_tag, comp_desc *cdesc) { int rc; ptl_event_t ev_t; ptl_event_t *ev=&ev_t; comp_desc *temp_comp = NULL; int loop=1; int temp_proc; ARMCI_PR_DBG("enter",0); if(DEBUG_COMM){ printf("\n%d:enter:client_complete active=%d tag=%d %d\n",armci_me, cdesc->active,cdesc->tag,nb_tag);fflush(stdout); } while(cdesc->active!=0){ ev->type=0; if((rc = PtlEQWait(portals->eq_h, ev)) != PTL_OK){ printf("%d:PtlEQWait(): %d %s\n", portals->ptl_my_procid,rc, ptl_err_str[rc]); armci_die("EQWait problem",rc); } if (ev->ni_fail_type != PTL_NI_OK) { printf("%d:NI sent %d in event.\n", portals->ptl_my_procid, ev->ni_fail_type); armci_die("event failure problem",0); } if(DEBUG_COMM){ printf("\n%d:armci_client_complete:done waiting type=%d\n",armci_me, ev->type); fflush(stdout); } if (ev->type == PTL_EVENT_SEND_END){ if(DEBUG_COMM){ printf("\n%d:armci_client_complete:event send end\n",armci_me); fflush(stdout); } temp_comp = (comp_desc *)ev->md.user_ptr; #ifdef PUT_LOCAL_ONLY_COMPLETION if(temp_comp->type==ARMCI_PORTALS_PUT || temp_comp->type=ARMCI_PORTALS_NBPUT){ temp_comp->active=0; temp_comp->tag=-1; } else #else temp_comp->active++; #endif continue; } if (ev->type == PTL_EVENT_REPLY_END){ if(DEBUG_COMM){ printf("\n%d:client_send_complete:reply end\n",armci_me); fflush(stdout); } temp_comp = (comp_desc *)ev->md.user_ptr; temp_comp->active = 0; /*this was a get request, so we are done*/ temp_comp->tag=-1; continue; } if (ev->type == PTL_EVENT_ACK){ if(DEBUG_COMM){ printf("\n%d:client_send_complete:event ack\n",armci_me); fflush(stdout); } temp_comp = (comp_desc *)ev->md.user_ptr; temp_comp->active=0; temp_comp->tag=-1; armci_update_fence_array(temp_comp->dest_id,0); portals->outstanding_puts--; } } if(DEBUG_COMM){ printf("\n%d:exit:client_complete active=%d tag=%d %d\n",armci_me, cdesc->active,cdesc->tag,nb_tag);fflush(stdout); } ARMCI_PR_DBG("exit",0); return rc; } comp_desc * get_free_comp_desc(int region_id, int * comp_id) { comp_desc * c; int rc = PTL_OK; ARMCI_PR_DBG("enter",region_id); c = &(_region_compdesc_array[region_id][free_desc_index[region_id]]); if(c->active!=0 && c->tag>0)armci_client_complete(NULL,c->dest_id,c->tag,c); #ifdef PUT_LOCAL_ONLY_COMPLETION if(region_idstart, md->length); fflush(stdout); } void armci_client_direct_get(int proc, void *src_buf, void *dst_buf, int bytes, void** cptr,int tag,ARMCI_MEMHDL_T *lochdl, ARMCI_MEMHDL_T *remhdl) { int clus = armci_clus_id(proc); int rc, i; ptl_size_t offset_local = 0, offset_remote=0; ptl_match_bits_t mb = remhdl->regid; ptl_md_t *md_remote,md, *md_local; ptl_md_t * md_ptr; ptl_handle_md_t *md_hdl_local; comp_desc *cdesc; ptl_process_id_t dest_proc; int c_info; int lproc,rproc,user_memory=0; ARMCI_PR_DBG("enter",remhdl->regid); if(DEBUG_COMM){ printf("%d:armci_client_direct_get:src_buf %p dstbuf %p loc_hd is %p\n" "rem_hndl is %p, BYTES = %d\n",armci_me,src_buf,dst_buf, lochdl,remhdl,bytes); fflush(stdout); } /*first process information*/ dest_proc.nid = portals->ptl_pe_procid_map[proc].nid; dest_proc.pid = portals->ptl_pe_procid_map[proc].pid; md_remote =&remhdl->cdesc.mem_dsc; /*updating md to send*/ if(lochdl == NULL){ /*this is user memory (stack/heap/whatever) */ user_memory=1; cdesc = get_free_comp_desc(PORTALS_MEM_REGIONS,&c_info); md_local = &cdesc->mem_dsc; md_hdl_local = &cdesc->mem_dsc_hndl; md_local->length=bytes; md_local->start=dst_buf; } else { if(lochdl->islocal){ /*PARMCI_Malloc_local memory*/ user_memory=1; #if 1 cdesc = get_free_comp_desc(PORTALS_MEM_REGIONS,&c_info); md_local = &cdesc->mem_dsc; md_hdl_local = &cdesc->mem_dsc_hndl; md_local->length=bytes; md_local->start=dst_buf; #else cdesc=&lochdl->cdesc; md_local = &lochdl->cdesc.mem_dsc; md_hdl_local = &lochdl->cdesc.mem_dsc_hndl; #endif } else{ /*we need to pass region id to get corresponding md*/ cdesc = get_free_comp_desc(lochdl->regid,&c_info); md_local = &cdesc->mem_dsc; md_hdl_local = &cdesc->mem_dsc_hndl; } } /*compute the local and remote offsets*/ offset_local = (char*)dst_buf - (char *)md_local->start; offset_remote = (char*)src_buf - (char *)md_remote->start; if(DEBUG_COMM){ printf("\n%d:offr=%d offl=%d %p %p\n",armci_me,offset_remote,offset_local,md_local->start,md_remote->start); } /*printf("\n%d:get offr=%d ptrr=%p offl=%d ptrl=%p\n",armci_me,offset_remote,md_remote->start,offset_local,md_local->start);fflush(stdout);*/ if(tag) *((comp_desc **)cptr) = cdesc; /*if(tag){printf("\n%d:get tag=%d c_info=%d %p",armci_me,tag,c_info,cdesc);fflush(stdout);}*/ if (tag){ cdesc->tag = tag; cdesc->dest_id = proc; cdesc->type = ARMCI_PORTALS_NBGET; } else{ cdesc->tag = 0; cdesc->dest_id = proc; cdesc->type = ARMCI_PORTALS_GET; } cdesc->active = 1; md_local->user_ptr = (void *)cdesc; md_local->options = PTL_MD_OP_GET | PTL_MD_EVENT_START_DISABLE; #if DO_MD_UPDATE if(user_memory==0){ do{ rc = PtlMDUpdate(*md_hdl_local,NULL,md_local,portals->eq_h); printf("\n%d:trying to update\n",armci_me);fflush(stdout); } while (rc == PTL_MD_NO_UPDATE); if (rc != PTL_OK){ printf("%d:PtlMDUpdate: %s\n", portals->rank, ptl_err_str[rc]); armci_die("ptlmdbind failed",0); } } else{ #endif rc = PtlMDBind(portals->ni_h,*md_local, PTL_UNLINK, md_hdl_local); if (rc != PTL_OK){ fprintf(stderr, "%d:PtlMDBind: %s\n", portals->rank, ptl_err_str[rc]); armci_die("ptlmdbind failed",0); } #if DO_MD_UPDATE } #endif rc = PtlGetRegion(*md_hdl_local,offset_local,bytes,dest_proc, portals->ptl, 0, mb, offset_remote); if (rc != PTL_OK){ printf("%d:PtlGetRegion: %s\n", portals->rank,ptl_err_str[rc]); armci_die("PtlGetRegion failed",0); } if(DEBUG_COMM){ printf("\n%d:issued get to %d %d\n",armci_me,proc,c_info);fflush(stdout); } if(!tag){ armci_client_complete(NULL,proc,0,cdesc); /* check this later */ } /*printf("\n%d:issued get to %d %d\n",armci_me,proc,c_info);fflush(stdout);*/ ARMCI_PR_DBG("exit",remhdl->regid); } void armci_client_nb_get(int proc, void *src_buf, int *src_stride_arr, void *dst_buf, int *dst_stride_arr, int bytes, void** cptr,int tag,ARMCI_MEMHDL_T *lochdl, ARMCI_MEMHDL_T *remhdl) { } int armci_client_direct_send(int proc,void *src, void* dst, int bytes, void **cptr, int tag, ARMCI_MEMHDL_T *lochdl, ARMCI_MEMHDL_T *remhdl ) { int clus = armci_clus_id(proc); int rc, i; ptl_size_t offset_local = 0, offset_remote = 0; ptl_match_bits_t mb = remhdl->regid; ptl_md_t *md_remote,md, *md_local; ptl_md_t * md_ptr; ptl_match_bits_t * mb_ptr; ptl_handle_md_t *md_hdl_local; comp_desc *cdesc; ptl_process_id_t dest_proc; int c_info; int lproc,rproc,user_memory=0; ARMCI_PR_DBG("enter",remhdl->regid); dest_proc.nid = portals->ptl_pe_procid_map[proc].nid; dest_proc.pid = portals->ptl_pe_procid_map[proc].pid; md_remote =&remhdl->cdesc.mem_dsc; if(lochdl == NULL){ /*this is user memory*/ user_memory=1; cdesc = get_free_comp_desc(PORTALS_MEM_REGIONS,&c_info); md_local = &cdesc->mem_dsc; md_hdl_local = &cdesc->mem_dsc_hndl; md_local->length=bytes; md_local->start=src; } else { if(lochdl->islocal){ /*PARMCI_Malloc_local memory*/ user_memory=1; #if 1 cdesc = get_free_comp_desc(PORTALS_MEM_REGIONS,&c_info); md_local = &cdesc->mem_dsc; md_hdl_local = &cdesc->mem_dsc_hndl; md_local->length=bytes; md_local->start=src; #else cdesc=&lochdl->cdesc; md_local = &lochdl->cdesc.mem_dsc; md_hdl_local = &lochdl->cdesc.mem_dsc_hndl; #endif } else{ /*we need to pass region id to get corresponding md*/ cdesc = get_free_comp_desc(lochdl->regid,&c_info); md_local = &cdesc->mem_dsc; md_hdl_local = &cdesc->mem_dsc_hndl; } } offset_local = (char *)src - (char *)md_local->start; offset_remote =(char *)dst - (char *)md_remote->start; if(DEBUG_COMM){ printf("\n%d:offr=%d offl=%d\n",armci_me,offset_remote,offset_local); } /*printf("\n%d:offr=%d ptrr=%p offl=%d ptrl=%p\n",armci_me,offset_remote,md_remote->start,offset_local,md_local->start);fflush(stdout);*/ if(tag) *((comp_desc **)cptr) = cdesc; /*TOED*/ /* if(tag){printf("\n%d:put tag=%d c_info=%d %p",armci_me,tag,c_info,cdesc);fflush(stdout);} */ if (tag){ cdesc->tag = tag; cdesc->dest_id = proc; cdesc->type = ARMCI_PORTALS_NBPUT; } else{ cdesc->tag = 0; cdesc->dest_id = proc; cdesc->type = ARMCI_PORTALS_PUT; } #ifdef PUT_LOCAL_COMPLETION_ONLY cdesc->active = 2; #else cdesc->active = 1; #endif md_local->user_ptr = (void *)cdesc; md_local->options = PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; #if DO_MD_UPDATE if(user_memory==0){ do{ rc = PtlMDUpdate(*md_hdl_local,NULL,md_local,portals->eq_h); } while (rc == PTL_MD_NO_UPDATE); if (rc != PTL_OK){ printf("%d:PtlMDUpdate: %s\n", portals->rank, ptl_err_str[rc]); armci_die("ptlmdupdate failed",0); } } else{ #endif rc = PtlMDBind(portals->ni_h,*md_local, PTL_UNLINK, md_hdl_local); if (rc != PTL_OK){ fprintf(stderr, "%d:PtlMDBind: %s\n", portals->rank, ptl_err_str[rc]); armci_die("ptlmdbind failed",0); } #if DO_MD_UPDATE } #endif rc = PtlPutRegion(*md_hdl_local,offset_local,bytes, #ifdef PUT_LOCAL_COMPLETION_ONLY PTL_NOACK_REQ, #else PTL_ACK_REQ, #endif dest_proc, portals->ptl, 0, mb,offset_remote, 0); if (rc != PTL_OK){ fprintf(stderr, "%d:PtlPutRegion: %s\n", portals->rank,ptl_err_str[rc]); armci_die("PtlPutRegion failed",0); } if(DEBUG_COMM){ printf("\n%d:issued put to %d\n",armci_me,proc);fflush(stdout); } armci_update_fence_array(proc, 1); if(!tag){ armci_client_complete(NULL,proc,0,cdesc); /* check this later */ } else portals->outstanding_puts++; ARMCI_PR_DBG("exit",remhdl->regid); return rc; } void armci_client_nb_send(int proc, void *src_buf, int *src_stride_arr, void *dst_buf, int *dst_stride_arr, int bytes, void** cptr,int tag,ARMCI_MEMHDL_T *lochdl, ARMCI_MEMHDL_T *remhdl) { } #if 1 /*using non-blocking for multiple 1ds inside a 2d*/ void armci_network_strided(int op, void* scale, int proc,void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, armci_ihdl_t nb_handle) { int i, j,tag=0; long idxs,idxd; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int bvalues[MAX_STRIDE_LEVEL], bunit[MAX_STRIDE_LEVEL]; int bvalued[MAX_STRIDE_LEVEL]; int bytes = count[0]; void *loc, *rem; void *sptr,*dptr; ARMCI_MEMHDL_T *loc_memhdl=NULL,*rem_memhdl=NULL; NB_CMPL_T cptr; int armci_region_both_found_hndl(void *loc, void *rem, int size, int node, ARMCI_MEMHDL_T **loc_memhdl,ARMCI_MEMHDL_T **rem_memhdl); if(nb_handle)tag=nb_handle->tag; if(op==GET){ loc = dst_ptr; rem = src_ptr; } else { loc = src_ptr; rem = dst_ptr; } armci_region_both_found_hndl(loc,rem,bytes,armci_clus_id(proc), &loc_memhdl,&rem_memhdl); /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ bvalues[0] = 0; bvalues[1] = 0; bunit[0] = 1; bvalued[0] = 0; bvalued[1] = 0; bunit[1] = 1; for(i=2; i<=stride_levels; i++) { bvalues[i] = bvalued[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } if(ARMCI_ACC(op)){ /*lock here*/ printf("\nSHOULD NOT DO NETWORK_STRIDED FOR ACCS \n",armci_me); fflush(stdout); armci_die("network_strided called for acc",proc); } for(i=0; i (count[j]-1)) bvalues[j] = 0; if(bvalued[j] > (count[j]-1)) bvalued[j] = 0; } sptr = ((char *)src_ptr)+idxs; dptr = ((char *)dst_ptr)+idxd; if(op==GET){ armci_client_direct_get(proc,sptr,dptr,bytes,&cptr,tag,loc_memhdl, rem_memhdl); } else if(op==PUT){ armci_client_direct_send(proc,sptr,dptr,bytes,&cptr,tag,loc_memhdl, rem_memhdl); } else if(ARMCI_ACC(op)){ armci_client_direct_get(proc,sptr,dptr,bytes,&cptr,tag,loc_memhdl, rem_memhdl); /*DO ACC*/ armci_client_direct_send(proc,sptr,dptr,bytes,&cptr,tag,loc_memhdl, rem_memhdl); } else armci_die("in network_strided unknown opcode",op); } if(ARMCI_ACC(op)){ /*unlock here*/ } if(nb_handle){ nb_handle->tag=tag; nb_handle->cmpl_info=cptr; } else{ armci_client_complete(NULL,proc,tag,cptr); /* check this later */ } } #else /*using blocking for multiple 1ds inside a 2d*/ void armci_network_strided(int op, void* scale, int proc,void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, armci_ihdl_t nb_handle) { int i, j; long idxs,idxd; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int bvalues[MAX_STRIDE_LEVEL], bunit[MAX_STRIDE_LEVEL]; int bvalued[MAX_STRIDE_LEVEL]; int bytes = count[0]; void *loc, *rem; void *sptr,*dptr; #if 0 ARMCI_MEMHDL_T *loc_memhdl=NULL,*rem_memhdl=NULL; int armci_region_both_found_hndl(void *loc, void *rem, int size, int node, ARMCI_MEMHDL_T **loc_memhdl,ARMCI_MEMHDL_T **rem_memhdl); #endif if(op==GET){ loc = dst_ptr; rem = src_ptr; } else { loc = src_ptr; rem = dst_ptr; } #if 0 armci_region_both_found_hndl(loc,rem,count[0],armci_clus_id(proc), &loc_memhdl,&rem_memhdl); #endif /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ bvalues[0] = 0; bvalues[1] = 0; bunit[0] = 1; bvalued[0] = 0; bvalued[1] = 0; bunit[1] = 1; for(i=2; i<=stride_levels; i++) { bvalues[i] = bvalued[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } for(i=0; i (count[j]-1)) bvalues[j] = 0; if(bvalued[j] > (count[j]-1)) bvalued[j] = 0; } sptr = ((char *)src_ptr)+idxs; dptr = ((char *)dst_ptr)+idxd; if((i<(n1dim-1)) || nb_handle==NULL){ if(op==GET) PARMCI_Get(sptr,dptr,bytes,proc); else if(op==PUT) PARMCI_Put(sptr,dptr,bytes,proc); else if(ARMCI_ACC(op)) PARMCI_AccS(op,scale,sptr,NULL,dptr,NULL,count,1,proc); else armci_die("in network_strided unknown opcode",op); } } if(nb_handle!=NULL){ if(op==GET) PARMCI_NbGet(sptr,dptr,bytes,proc,(armci_hdl_t *)nb_handle); else if(op==PUT) PARMCI_NbPut(sptr,dptr,bytes,proc,(armci_hdl_t *)nb_handle); else if(ARMCI_ACC(op)) PARMCI_NbAccS(op,scale,sptr,NULL,dptr,NULL,count,1,proc,(armci_hdl_t *)nb_handle); else armci_die("in network_strided unknown opcode",op); } } #endif int armci_client_direct_getput(int proc,void *getinto, void *putfrom, void* dst, int bytes, void **cptr, int tag, ARMCI_MEMHDL_T *lochdl, ARMCI_MEMHDL_T *remhdl ) { int clus = armci_clus_id(proc); int rc, i; ptl_size_t offset_get = 0, offset_put=0, offset_remote = 0; ptl_match_bits_t mb = 100; ptl_md_t *md_remote,md, *md_local_put, *md_local_get; ptl_md_t * md_ptr; ptl_match_bits_t * mb_ptr; ptl_handle_md_t *md_hdl_local_put,*md_hdl_local_get; comp_desc *cdesc; ptl_process_id_t dest_proc; int c_info; int lproc,rproc; printf("\n%d:****************getput*********\n",armci_me); dest_proc.nid = portals->ptl_pe_procid_map[proc].nid; dest_proc.pid = portals->ptl_pe_procid_map[proc].pid; md_remote =&remhdl->cdesc.mem_dsc; cdesc = get_free_comp_desc(PORTALS_MEM_REGIONS,&c_info); md_local_get = &cdesc->mem_dsc; md_hdl_local_get = &cdesc->mem_dsc_hndl; md_local_get->length=bytes; md_local_get->start=getinto; offset_get = (char *)getinto - (char *)md_local_get->start; offset_remote =(char *)dst - (char *)md_remote->start; cdesc->tag = 999999; cdesc->dest_id = proc; cdesc->type = ARMCI_PORTALS_PUT; cdesc->active = 0; md_local_get->user_ptr = (void *)cdesc; md_local_get->options = PTL_MD_OP_GET | PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE | PTL_MD_EVENT_END_DISABLE; rc = PtlMDBind(portals->ni_h,*md_local_get, PTL_UNLINK, md_hdl_local_get); if (rc != PTL_OK){ fprintf(stderr, "%d:PtlMDBind: %s\n", portals->rank, ptl_err_str[rc]); armci_die("ptlmdbind failed",0); } cdesc = get_free_comp_desc(PORTALS_MEM_REGIONS,&c_info); md_local_put = &cdesc->mem_dsc; md_hdl_local_put = &cdesc->mem_dsc_hndl; md_local_put->length=bytes; md_local_put->start=putfrom; offset_put = (char *)putfrom - (char *)md_local_put->start; cdesc->tag = 999999; cdesc->dest_id = proc; cdesc->type = ARMCI_PORTALS_GET; cdesc->active = 0; md_local_put->user_ptr = (void *)cdesc; md_local_put->options = PTL_MD_OP_PUT | PTL_MD_EVENT_START_DISABLE; rc = PtlMDBind(portals->ni_h,*md_local_put, PTL_UNLINK, md_hdl_local_put); if (rc != PTL_OK){ fprintf(stderr, "%d:PtlMDBind: %s\n", portals->rank, ptl_err_str[rc]); armci_die("ptlmdbind failed",0); } rc = PtlGetPutRegion(*md_hdl_local_get,offset_get,*md_hdl_local_put, offset_put,bytes,dest_proc, portals->ptl,0,mb,offset_remote, 0); if (rc != PTL_OK){ printf("%d:PtlPutRegion: %s\n", portals->rank,ptl_err_str[rc]); armci_die("PtlPutRegion failed",0); } if(DEBUG_COMM){ printf("\n%d:issued getput to %d\n",armci_me,proc);fflush(stdout); } armci_client_complete(NULL,proc,0,cdesc); /* check this later */ return rc; } void armci_network_client_deregister_memory(ARMCI_MEMHDL_T *mh) { } void armci_network_server_deregister_memory(ARMCI_MEMHDL_T *mh) { } #ifdef CRAY_XT_ static int num_locks=0; static long **all_locks; #define ARMCI_PORTALS_MAX_LOCKS 16 typedef struct { ptl_handle_md_t mem_dsc_h; ptl_handle_me_t me_lock_h; region_memhdl_t armci_portal_lock_memhdl; } armci_lock_struct; armci_lock_struct armci_portals_lock_st; void armcill_allocate_locks(int num) { ptl_md_t *md_ptr; ptl_match_bits_t *mb; ptl_process_id_t match_id; ptl_handle_md_t *md_h; int ace_any=1; int rc; long *my_locks; int elems; armci_lock_struct *armci_portals_lock=&armci_portals_lock_st; num_locks = num; if(DEBUG_COMM){ printf("%d:armci_allocate_locks num=%d\n", armci_me,num_locks); } if(MAX_LOCKSni_h, ace_any, (ptl_process_id_t){PTL_NID_ANY, PTL_PID_ANY}, PTL_PID_ANY, 128); if (rc != PTL_OK) { printf("%d: PtlACEntry() failed: %s\n", armci_me, ptl_err_str[rc]); armci_die("PtlACEntry failed",0); } #endif armci_portals_lock->armci_portal_lock_memhdl.cdesc.mem_dsc.start =&my_locks; armci_portals_lock->armci_portal_lock_memhdl.cdesc.mem_dsc.length = sizeof(my_locks); armci_portals_lock->armci_portal_lock_memhdl.cdesc.mem_dsc.threshold = PTL_MD_THRESH_INF; armci_portals_lock->armci_portal_lock_memhdl.cdesc.mem_dsc.options = PTL_MD_OP_PUT | PTL_MD_OP_GET | PTL_MD_MANAGE_REMOTE | PTL_MD_TRUNCATE | PTL_MD_EVENT_START_DISABLE; armci_portals_lock->armci_portal_lock_memhdl.cdesc.mem_dsc.max_size = 0; armci_portals_lock->armci_portal_lock_memhdl.cdesc.mem_dsc.user_ptr = NULL; armci_portals_lock->armci_portal_lock_memhdl.cdesc.mem_dsc.eq_handle = PTL_EQ_NONE; match_id.nid = PTL_NID_ANY; match_id.pid = PTL_PID_ANY; /* Lockmaster needs a match entry for clients to access lock value. */ rc = PtlMEAttach(portals->ni_h, portals->ptl, match_id, /* source address */ 100, /* expected match bits */ 0, /* ignore bits to mask */ PTL_RETAIN, /* unlink when md is unlinked */ PTL_INS_AFTER, &armci_portals_lock->me_lock_h); if (rc != PTL_OK){ printf("%d: PtlMEAttach(): %s\n", armci_me, ptl_err_str[rc]); armci_die("PtlMEAttach in init_locks failed",0); } rc = PtlMDAttach(armci_portals_lock->me_lock_h, armci_portals_lock->armci_portal_lock_memhdl.cdesc.mem_dsc, PTL_RETAIN, &armci_portals_lock->mem_dsc_h); if (rc != PTL_OK) { printf("%d: PtlMDAttach(): %s\n", armci_me, ptl_err_str[rc]); armci_die("PtlMDAttach in init_locks failed",0); } } void armcill_lock(int mutex, int proc) { long getinto=0,putfrom=1; armci_lock_struct *armci_portal_lock=&armci_portals_lock_st; region_memhdl_t *rem_lock_hdl=&armci_portal_lock->armci_portal_lock_memhdl; printf("\n%d:in lock before\n",armci_me);fflush(stdout); do{ armci_client_direct_getput(proc,&getinto,&putfrom,(all_locks[proc]+mutex), sizeof(long), NULL, 0, NULL,rem_lock_hdl); }while(getinto!=0); printf("\n%d:in lock after\n",armci_me);fflush(stdout); } /*\ unlock specified mutex on node where process proc is running \*/ void armcill_unlock(int mutex, int proc) { long getinto=0,putfrom=0; armci_lock_struct *armci_portal_lock=&armci_portals_lock_st; region_memhdl_t *rem_lock_hdl=&armci_portal_lock->armci_portal_lock_memhdl; armci_client_direct_getput(proc,&getinto,&putfrom,(all_locks[proc]+mutex), sizeof(long), NULL, 0, NULL,rem_lock_hdl); } int armci_portals_rmw_(int op, int *ploc, int *prem, int extra, int proc) { return(0); } #endif void armci_portals_shmalloc_allocate_mem(int num_lks) { void **ptr_arr; void *ptr; armci_size_t bytes = 128; int i; ptr_arr = (void**)malloc(armci_nproc*sizeof(void*)); if(!ptr_arr) armci_die("armci_shmalloc_get_offsets: malloc failed", 0); bzero((char*)ptr_arr,armci_nproc*sizeof(void*)); PARMCI_Malloc(ptr_arr,bytes); return; } ga-5-3/armci/src/devices/portals/portals.h0000640005473000001440000000557711444464075017450 0ustar d3n000users #ifndef PORTALS_H #define PORTALS_H /* portals header file */ #ifdef CRAY_XT #include #include #else #include #include P3_NAL #include #include #endif #define MAX_OUT 1000 #define MAX_ENT 64 #define MAX_PREPOST 1 #define HAS_RDMA_GET typedef enum op { ARMCI_PORTALS_PUT, ARMCI_PORTALS_NBPUT, ARMCI_PORTALS_GET, ARMCI_PORTALS_NBGET, ARMCI_PORTALS_ACC } armci_portals_optype; /* array of memory segments and corresponding memory descriptors */ typedef struct md_table{ ptl_md_t md; /* make this a ptr instead of struct */ void * start; void * end; int id; int bytes; ptl_match_bits_t mb; } md_table_entry_t; typedef struct desc{ int active; unsigned int tag; int dest_id; armci_portals_optype type; }comp_desc; typedef struct region_memhdl{ ptl_match_bits_t match_bits; ptl_size_t offset; ptl_md_t mem_dsc; ptl_handle_md_t mem_dsc_hndl; } region_memhdl_t; #define NB_CMPL_T int #define REGIONS_REQUIRE_MEMHDL #define ARMCI_MEMHDL_T region_memhdl_t /* structure of computing process */ typedef struct { int armci_rank; /* if different from portals_rank */ int rank; /* my rank*/ int size; /* size of the group */ ptl_handle_me_t me_h[64]; ptl_handle_md_t md_h[64]; ptl_handle_me_t mh; ptl_handle_md_t mdh; ptl_handle_eq_t eq_h; ptl_handle_ni_t ni_h; ptl_pt_index_t ptl; int outstanding_puts; int outstanding_gets; int outstanding_accs; void * buffers; /* ptr to head of buffer */ int num_match_entries; } armci_portals_proc_t; extern void print_mem_desc_table(void); extern int armci_init_portals(void); extern void armci_fini_portals(void); extern int armci_post_descriptor(ptl_md_t *md); extern int armci_prepost_descriptor(void* start, long bytes); extern ptl_size_t armci_get_offset(ptl_md_t md, void *ptr,int proc); extern int armci_get_md(void * start, int bytes , ptl_md_t * md, ptl_match_bits_t * mb); extern int armci_portals_put(ptl_handle_md_t md_h,ptl_process_id_t dest_id,int bytes,int mb,int local_offset, int remote_offset,int ack ); extern int armci_portals_get(ptl_handle_md_t md_h,ptl_process_id_t dest_id,int bytes,int mb,int local_offset, int remote_offset); extern comp_desc * get_free_comp_desc(int * c_info); extern int armci_client_direct_send(int proc,void *src, void* dst, int bytes, NB_CMPL_T *cmpl_info, int tag, ARMCI_MEMHDL_T *lochdl, ARMCI_MEMHDL_T *remhdl); extern int armci_portals_direct_get(void *src, void *dst, int bytes, int proc, int nbtag, NB_CMPL_T *cmpl_info); extern int armci_portals_complete(int nbtag, NB_CMPL_T *cmpl_info); extern void comp_desc_init(); extern int armci_client_complete(ptl_event_kind_t *evt,int proc_id, int nb_tag ,comp_desc * cdesc,int b_tag); #endif /* PORTALS_H */ ga-5-3/armci/src/devices/lapi/0000750005473000001440000000000012275260534015032 5ustar d3n000usersga-5-3/armci/src/devices/lapi/lapi2.c0000640005473000001440000003545211444464075016222 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: lapi2.c,v 1.18.2.3 2007-07-02 05:24:34 d3p687 Exp $ */ #define DEBUG 0 #define DSCR_SIZE 4096*8 /*given that bufsize=30000*8,conservative,indeed*/ #define LAPI_CLEAR_CNTR(ocmpl_) if((ocmpl_)->val) {\ int _val_;\ if(LAPI_Waitcntr(lapi_handle,&((ocmpl_)->cntr), ((ocmpl_)->val), &_val_))\ armci_die("LAPI_Waitcntr failed",-1);\ if(_val_ != 0) armci_die("CLEAR_COUNTER: nonzero in file ", _val_);\ (ocmpl_)->val = 0; \ } /*\ create lapi vector descriptors from the buffer \*/ static void lapi2_create_vec_info(lapi_vec_t **srcv, lapi_vec_t **dstv, int iovnum,int iovlen,char *bufptr) { int dsize = iovnum*sizeof(void *); int dlen = iovlen*sizeof(int); int offset=0; *srcv = (lapi_vec_t *)(bufptr+offset); offset+=sizeof(lapi_vec_t); *dstv = (lapi_vec_t *)(bufptr+offset); offset+=sizeof(lapi_vec_t); (*srcv)->info= (void **)(bufptr+offset); offset+=dsize; (*dstv)->info= (void **)(bufptr+offset); offset+=dsize; if(dlen!=0){ (*srcv)->len = (unsigned long *)(bufptr+offset); offset+=dlen; (*dstv)->len = (unsigned long *)(bufptr+offset); offset+=dlen; } else { (*srcv)->len = (*dstv)->len = NULL; } } /*\ 2D strided get/put using lapi vector/strided transfer \*/ void armcill_op2D(int op,void *src_ptr,int src_stride,void *dst_ptr, int dst_stride,int count, int bytes, int p, lapi_cntr_t *ocntr,char *bufptr) { lapi_vec_t *src, *dst; int reqid,rc; int offset=0; if(DEBUG){ printf("\n%d:in put2d p=%d bytes=%d\n",armci_me,p,bytes);fflush(stdout); } /*lapi2_create_vec_info(&src,&dst,3,0,bufptr);*/ src = (lapi_vec_t *)(bufptr+offset); offset+=sizeof(lapi_vec_t); dst = (lapi_vec_t *)(bufptr+offset); offset+=sizeof(lapi_vec_t); src->info = (void **)(bufptr+offset); offset+=3*sizeof(void *); dst->info = (void **)(bufptr+offset); offset+=3*sizeof(void *); src->vec_type = dst->vec_type = LAPI_GEN_STRIDED_XFER; src->num_vecs = (uint)count; dst->num_vecs= (uint)count; src->len = NULL; dst->len = NULL; src->info[0] = src_ptr; dst->info[0] = dst_ptr; src->info[1] = (void*)bytes; dst->info[1] = (void*)bytes; src->info[2] = (void*)src_stride; dst->info[2] = (void*)dst_stride; if(op==GET) rc = LAPI_Getv(lapi_handle, (uint)p, src, dst,NULL,ocntr); else rc = LAPI_Putv(lapi_handle,(uint)p,dst,src,NULL,ocntr,&cmpl_arr[p].cntr); if(rc) armci_die2("LAPI_op2D failed",rc,op); if(DEBUG)printf("\n%d: put completed \n",armci_me); } /*\ ND strided get/put packed and sent as vectors \*/ void armcill_opND(int op,void *src_ptr, int src_stride_arr[],void* dst_ptr, int dst_stride_arr[],int count[], int stride_levels, int proc, lapi_cmpl_t *ocmpl,char *bufptr) { char *dst=(char*)dst_ptr; char *src=(char*)src_ptr; char *dst1; char *src1; int i,j,k,num_xmit=0,lastiovlength,iovlength,n=0,max_iovec,totalsize=0; int total_of_2D=1; int index[MAX_STRIDE_LEVEL], unit[MAX_STRIDE_LEVEL]; int rc,vecind; lapi_vec_t *srcv, *dstv; lapi_cntr_t *ocntr=&(ocmpl->cntr); int offset=0; if(DEBUG){ printf("\n%d:in getND count[0] is %d and strarr[0] is%d maxiov=%d\n", armci_me,count[0],dst_stride_arr[0],max_iovec); fflush(stdout); } index[2] = 0; unit[2] = 1; if(stride_levels>1){ total_of_2D = count[2]; for(j=3; j<=stride_levels; j++) { index[j] = 0; unit[j] = unit[j-1] * count[j-1]; total_of_2D *= count[j]; } } max_iovec=(DSCR_SIZE-2*sizeof(lapi_vec_t))/(2*(sizeof(int)+sizeof(void*))); /*compute number of loops and the size of last iovector based of buf size*/ num_xmit = total_of_2D*count[1]/max_iovec; lastiovlength = (total_of_2D*count[1])%max_iovec; if(num_xmit == 0) num_xmit = 1; else if(lastiovlength!=0)num_xmit++; /*set the current iov length*/ k=0;vecind=0; if(lastiovlength!=0 && k==(num_xmit-1))iovlength=lastiovlength; else iovlength=max_iovec; /*create the lapi_vec_t from the buffer*/ /*lapi2_create_vec_info(&srcv,&dstv,iovlength,iovlength,bufptr);*/ srcv = (lapi_vec_t *)(bufptr+offset); offset+=sizeof(lapi_vec_t); dstv = (lapi_vec_t *)(bufptr+offset); offset+=sizeof(lapi_vec_t); srcv->info= (void **)(bufptr+offset); offset+=iovlength*sizeof(void*); dstv->info= (void **)(bufptr+offset); offset+=iovlength*sizeof(void*); srcv->len = (unsigned long *)(bufptr+offset);offset+=iovlength*sizeof(unsigned long); dstv->len = (unsigned long *)(bufptr+offset);offset+=iovlength*sizeof(unsigned long); srcv->vec_type = dstv->vec_type = LAPI_GEN_IOVECTOR; srcv->num_vecs = (uint)iovlength; dstv->num_vecs= (uint)iovlength; for(i=0; i= count[j]) index[j] = 0; } dst1=dst; src1=src; for(j=0;jval+=1; if(op==GET){ rc = LAPI_Getv(lapi_handle,(uint)proc,srcv,dstv,NULL,ocntr); } else { UPDATE_FENCE_STATE(proc,PUT,1); rc = LAPI_Putv(lapi_handle,(uint)proc,dstv,srcv,NULL,ocntr, &cmpl_arr[proc].cntr); } if(rc) armci_die2("LAPI_opND failed",rc,op); vecind = 0; totalsize=0; k++; if(lastiovlength!=0 && k==(num_xmit-1))iovlength=lastiovlength; else iovlength=max_iovec; srcv->num_vecs = (uint)iovlength; dstv->num_vecs= (uint)iovlength; } dstv->info[vecind] = dst1; dstv->len[vecind] = count[0]; srcv->info[vecind] = src1; srcv->len[vecind] = count[0]; totalsize+=count[0]; dst1+=dst_stride_arr[0]; src1+=src_stride_arr[0]; } if(vecind==iovlength){ LAPI_CLEAR_CNTR((ocmpl)); ocmpl->val+=1; if(op==GET){ rc = LAPI_Getv(lapi_handle,(uint)proc,srcv,dstv,NULL,ocntr); } else { UPDATE_FENCE_STATE(proc,PUT,1); rc = LAPI_Putv(lapi_handle,(uint)proc,dstv,srcv,NULL,ocntr, &cmpl_arr[proc].cntr); } if(rc) armci_die2("LAPI_opND failed",rc,op); vecind = 0; totalsize=0; k++; if(lastiovlength!=0 && k==(num_xmit-1))iovlength=lastiovlength; else iovlength=max_iovec; srcv->num_vecs = (uint)iovlength; dstv->num_vecs= (uint)iovlength; } } if(DEBUG)printf("\n%d: get completed \n",armci_me); } void lapi_op_2d(int op, uint proc, void *src_ptr, void *dst_ptr,uint bytes, int count, int src_stride, int dst_stride,lapi_cmpl_t* o_cmpl) { int i,rc; if(op==PUT)UPDATE_FENCE_STATE(proc, PUT, count); o_cmpl->val+=count; for(i=0;icntr),&cmpl_arr[proc].cntr); else rc=LAPI_Get(lapi_handle,proc,bytes,(src_ptr),(dst_ptr),NULL, &(o_cmpl->cntr)); if(rc)ARMCI_Error("LAPI_put failed",0); src_ptr = (void*) ((unsigned long)src_ptr+src_stride); dst_ptr = (void*) ((unsigned long)dst_ptr+dst_stride); } } /*\This function is designed as follows. * CONTIG code breaks ND into 1D chunks a does Lapi_Put on each chunk. * STRIDED code uses strided option in the LAPI_PutV call * VECTOR code packs multi-strided/vector data as vectors as transmits. * ____________________________________ * | type small/medium large | * |------------------------------------ * | 1D CONTIG CONTIG| * | 2D STRIDED CONTIG| * | >2D VECTOR CONTIG| * |-----------------------------------| * this code uses orig counter from nb_handle for non-blk call * completion counter should always be same for non-blk and blk code to be * able to do ordering/fence. \*/ void armci_network_strided(int op, void* scale, int proc,void *src_ptr, int src_stride_arr[], void* dst_ptr, int dst_stride_arr[], int count[], int stride_levels, armci_ihdl_t nb_handle) { int rc=0; lapi_cmpl_t *o_cmpl; int total_of_2D,i,j; char *src = (char*)src_ptr, *dst=(char*)dst_ptr; char *bufptr; int index[MAX_STRIDE_LEVEL], unit[MAX_STRIDE_LEVEL]; int dsize=3*sizeof(void*); /*pick a counter, default for blocking, from descriptor for non-blocking*/ if(nb_handle){ INIT_COUNTER((nb_handle->cmpl_info),0); o_cmpl = &(nb_handle->cmpl_info); } else{ if(op==GET) #if 0 o_cmpl = &get_cntr; else o_cmpl = &ack_cntr; #else /* multithreaded lapi uses array of counters (one per thread) */ o_cmpl = get_cntr; /* same as &(get_cntr[0]) */ else o_cmpl = ack_cntr; /* same as &(ack_cntr[0]) */ #endif } /*CONTIG protocol: used for 1D(contiguous) or if stride is very large in a multi strided case*/ if(stride_levels==0 || count[0]>LONG_PUT_THRESHOLD){ /*set bufid in nb_handle, in this case, no buffer used, hence NB_NONE*/ if(nb_handle) armci_set_nbhandle_bufid(nb_handle,NULL,NB_NONE); switch (stride_levels) { case 0: /* 1D op */ lapi_op_2d(op, (uint)proc, src_ptr, dst_ptr, count[0], 1, 0,0,o_cmpl); break; case 1: /* 2D op */ lapi_op_2d(op, (uint)proc, src_ptr,dst_ptr, (uint)count[0], count[1], src_stride_arr[0], dst_stride_arr[0], o_cmpl); break; default: /* N-dimensional */ { index[2] = 0; unit[2] = 1; total_of_2D = count[2]; for(j=3; j<=stride_levels; j++) { index[j] = 0; unit[j] = unit[j-1] * count[j-1]; total_of_2D *= count[j]; } for(i=0; i= count[j]) index[j] = 0; } lapi_op_2d(op, (uint)proc, src, dst,(uint)count[0], count[1], src_stride_arr[0], dst_stride_arr[0],o_cmpl); } } } } else{ /* greated than 1D small/med stride */ if(stride_levels==1){ /*small/med 2D, use lapi STRIDED */ bufptr = GET_SEND_BUFFER(2*(sizeof(lapi_vec_t)+dsize),op,proc); if(nb_handle){ /*update info in the buf_info_t data-structure*/ SET_BUF_TAG(bufptr,nb_handle->tag,0); /*set the buffer id in nb_handle*/ armci_set_nbhandle_bufid(nb_handle,bufptr,0); } if(op==PUT)UPDATE_FENCE_STATE(proc, PUT, 1); /*we use the counter in the buffer*/ o_cmpl = (BUF_TO_EVBUF(bufptr)); armcill_op2D(op,src_ptr,src_stride_arr[0],dst_ptr,dst_stride_arr[0], count[1],count[0],proc,&(o_cmpl->cntr),bufptr); } else { /*small/med >2D, use lapi VECTOR*/ bufptr = GET_SEND_BUFFER(DSCR_SIZE,op,proc); if(nb_handle){ /*update info in the buf_info_t data-structure*/ SET_BUF_TAG(bufptr,nb_handle->tag,0); /*set the buffer id in nb_handle*/ armci_set_nbhandle_bufid(nb_handle,bufptr,0); } /*we use the counter in the buffer*/ o_cmpl = (BUF_TO_EVBUF(bufptr)); /*val set to 0 because of the way opND is writted, to be modified*/ o_cmpl->val=0; armcill_opND(op,src_ptr,src_stride_arr,dst_ptr, dst_stride_arr,count, stride_levels,proc,o_cmpl,bufptr); } /* for blocking cases, we can free cmpldescr buffer and wait for op to complete. */ if(!nb_handle){ /*for now, we manually clear the counter here for blocking calls. for later, this has to be done in FREE_SEND_BUFFER.*/ LAPI_CLEAR_CNTR(o_cmpl); FREE_SEND_BUFFER(bufptr); } } } void armci_send_strided_data_bypass(int proc, request_header_t *msginfo, void *bufptr, int msg_buflen, void *src_ptr, int *loc_stride_arr, void *dst_ptr, int *rem_stride_arr, int *pcount, int stride_levels) { lapi_cntr_t c; int count= pcount[1],bytes=pcount[0],rc; int src_stride= loc_stride_arr[0]; int dst_stride= rem_stride_arr[0]; lapi_vec_t *src, *dst; int offset=0; int p=msginfo->from; if(stride_levels!=1)armci_die("armci_send_strided_data_bypass wrong stride",stride_levels); LAPI_Setcntr(lapi_handle,&c,0); src = (lapi_vec_t *)((unsigned long)bufptr+offset); offset+=sizeof(lapi_vec_t); dst = (lapi_vec_t *)((unsigned long)bufptr+offset); offset+=sizeof(lapi_vec_t); src->info = (void **)((unsigned long)bufptr+offset); offset+=3*sizeof(void *); dst->info = (void **)((unsigned long)bufptr+offset); offset+=3*sizeof(void *); src->vec_type = dst->vec_type = LAPI_GEN_STRIDED_XFER; src->num_vecs = (uint)count; dst->num_vecs= (uint)count; src->len = NULL; dst->len = NULL; src->info[0] = src_ptr; dst->info[0] = dst_ptr; src->info[1] = (void*)bytes; dst->info[1] = (void*)bytes; src->info[2] = (void*)src_stride; dst->info[2] = (void*)dst_stride; rc = LAPI_Putv(lapi_handle,(uint)p,dst,src,msginfo->tag.cntr,&c,NULL); if(rc)armci_die("armci_send_strided_data_bypass failed",rc); if(DEBUG_){ printf("%dserv: did putv to %d cntr =%p\n",armci_me,p,msginfo->tag.cntr); fflush(stdout); } LAPI_Waitcntr(lapi_handle, &c,1,NULL); } /*\ client receives strided data from server \*/ void armci_rcv_strided_data_bypass_both(int proc, request_header_t* msginfo, void *ptr, int count[], int strides) { lapi_cmpl_t *pcntr=BUF_TO_EVBUF(msginfo); if(DEBUG_){ printf("%d: expecting data from %d cntr =%p v=%d\n",armci_me,proc,&pcntr->cntr,pcntr->val); fflush(stdout); } CLEAR_COUNTER((*pcntr)); if(DEBUG_){ printf("%d: got data from %d\n",armci_me,proc); fflush(stdout); } } ga-5-3/armci/src/devices/lapi/lapi.c0000640005473000001440000005767612036056644016151 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* initialization of data structures and setup of lapi internal parameters */ #include #if HAVE_STDIO_H # include #endif #if HAVE_STRINGS_H # include #endif #include "lapidefs.h" #include "armcip.h" #include "copy.h" #ifdef AIX #include #endif #if (defined(PPC) || defined(__PPC__) || defined(__PPC)) # include "asm-ppc.h" #endif #define DEBUG_ 0 #define ERROR(str,val) armci_die((str),(val)) #define BUF_TO_EVBUF(buf) ((lapi_cmpl_t*)(((char*)buf) - sizeof(lapi_cmpl_t))) char err_msg_buf[LAPI_MAX_ERR_STRING]; /* for error msg returned by LAPI */ /* ** macro to check return code of function calls. keeps return ** code checking logic from needing to be in main logic */ #define CHECK(func_and_args) \ { \ int rc; \ if ((rc = (func_and_args)) != LAPI_SUCCESS) { \ LAPI_Msg_string(rc, err_msg_buf); \ fprintf(stderr, \ "LAPI ERROR: %s, rc = %d\n", err_msg_buf, rc); \ armci_die("LAPI Error", 0); \ } \ } #if ARMCI_ENABLE_GPC_CALLS extern gpc_buf_t *gpc_req; #endif int lapi_max_uhdr_data_sz; /* max data payload */ lapi_cmpl_t *cmpl_arr; /* completion state array, dim=NPROC */ lapi_cmpl_t hdr_cntr; /* AM header buffer counter */ lapi_cmpl_t buf_cntr; /* AM data buffer counter */ lapi_cmpl_t* ack_cntr; /* ACK counter used in handshaking protocols between origin and target */ lapi_cmpl_t* get_cntr; /* counter used with lapi_get */ lapi_user_cxt_t *lapi_remote_cxt; /* Remote context for RDMA call */ int intr_status; lapi_info_t lapi_info; #ifndef TCGMSG lapi_handle_t lapi_handle; #endif pthread_mutex_t _armci_mutex_thread=PTHREAD_MUTEX_INITIALIZER; double _armci_rcv_buf[MSG_BUFLEN_DBL]; char* MessageRcvBuffer = (char*)_armci_rcv_buf; char* MessageSndBuffer = (char*)0; extern void armci_waitsome(int factor); /************* LAPI Active Message handlers *******************************/ volatile static int hndlcnt=0, header_cnt=0; static int hhnum=0; static long num_malloc=0; /* trace and limit the number malloc calls in HH */ #define MAX_NUM_MALLOC 100 /* trace state of accumulate lock */ int kevin_ok=1; /* "1" indicates that no other thread is holding the lock */ void armci_completion_handler(lapi_handle_t *t_hndl, void *save) { lapi_handle_t hndl = *t_hndl; int need_data; void *message; int whofrom, msglen; request_header_t *msginfo = (request_header_t *)save; char *descr= (char*)(msginfo+1), *buf=MessageRcvBuffer; int buflen=MSG_BUFLEN; #if ARMCI_ENABLE_GPC_CALLS extern pthread_t data_server; data_server = pthread_self(); #endif if(DEBUG_) fprintf(stderr,"%d:CH:op=%d from=%d datalen=%d dscrlen=%d\n", armci_me, msginfo->operation, msginfo->from,msginfo->datalen,msginfo->dscrlen); /*** assure that descriptor and data are in the right format and place ***/ if( msginfo->dscrlen < 0 || msginfo->datalen <0 ){ /* for large put/acc/scatter need to get the data */ int rc; lapi_cntr_t req_cntr; int bytes=0; char *origin_ptr = msginfo->tag.buf; if (msginfo->dscrlen<0) { descr =MessageRcvBuffer; msginfo->dscrlen = -msginfo->dscrlen; buf = descr + msginfo->dscrlen; buflen += msginfo->dscrlen; bytes += msginfo->dscrlen; } if (msginfo->datalen <0){ msginfo->datalen = -msginfo->datalen; bytes += msginfo->datalen; } if(rc=LAPI_Setcntr(hndl, &req_cntr, 0)) ERROR("CH:setcntr failed",rc); if(rc=LAPI_Get(hndl, (uint)msginfo->from, bytes, origin_ptr, MessageRcvBuffer, msginfo->tag.cntr,&req_cntr))ERROR("CH:LAPI_Get failed",rc); if(rc=LAPI_Waitcntr(hndl, &req_cntr,1,NULL))ERROR("CH:Waitcntr failed",rc); } else{ /* desc is in save, data could be but not for GET */ if(msginfo->operation !=GET)buf = descr + msginfo->dscrlen; buflen = MSG_BUFLEN; } /* fprintf(stderr,"CH: val=%lf\n",*(double*)(buf+msginfo->datalen -8));*/ /*** dispatch request to the appropriate handler function ***/ switch(msginfo->operation){ case LOCK: armci_server_lock(msginfo); break; case UNLOCK: armci_server_unlock(msginfo, descr); break; default: if(msginfo->format == STRIDED) armci_server(msginfo, descr, buf, buflen); else armci_server_vector(msginfo, descr, buf, buflen); } free(msginfo); #ifdef LINUX (void)fetch_and_add(&num_malloc, (long)-1); #else (void)fetch_and_addlp(&num_malloc, (long)-1); #endif } void* armci_header_handler(lapi_handle_t *t_hndl, void *uhdr, uint *t_uhdrlen, uint *msglen, compl_hndlr_t **handler, void** psave) { lapi_handle_t hndl = *t_hndl; uint uhdrlen = *t_uhdrlen; request_header_t *msginfo = (request_header_t *)uhdr; if(DEBUG_) fprintf(stderr,"%d:HH: op=%d from %d\n",armci_me,msginfo->operation, msginfo->from); if(msginfo->to != armci_me) armci_die("wrong message delivered",msginfo->to); /* process small requests that do not require comms in header handler */ if(msginfo->datalen >0 && msginfo->dscrlen>0 && msginfo->operation != GET && msginfo->operation != LOCK && msginfo->operation != UNLOCK){ /* If another thread is in accumulate use compl. handler path: * Try to avoid blocking inside HH which degrades Lapi performance. * The completion handler path requires malloc to save request info. * Only up to approx. MAX_NUM_MALLOC requests can be rescheduled to * run in CH instead of HH. * MAX_NUM_MALLOC is a soft limit to avoid cost of locking when reading */ if( msginfo->operation==PUT || num_malloc>MAX_NUM_MALLOC || kevin_ok){ char *descr = (char*)(msginfo+1); char *buf = descr + msginfo->dscrlen; int buflen = uhdrlen - sizeof(request_header_t) - msginfo->dscrlen; if(DEBUG_) fprintf(stderr,"%d:HH: buf =%lf\n",armci_me,*(double*)buf); if(msginfo->format == STRIDED) armci_server(msginfo, descr, buf, buflen); else armci_server_vector(msginfo, descr, buf, buflen); /* fprintf(stderr,"%d:HH: getting out of server\n",armci_me);*/ *psave = NULL; *handler = NULL; return(NULL); } } #ifdef LINUX (void)fetch_and_add(&num_malloc, (long)1); #else (void)fetch_and_addlp(&num_malloc, (long)1); /* AIX atomic increment */ #endif msginfo = (request_header_t*) malloc(uhdrlen); /* recycle pointer */ if(!msginfo) ERROR("HH: malloc failed in header handler",num_malloc); /* save the request info for processing in compl. handler */ memcpy((char*)msginfo, uhdr, uhdrlen); *psave = msginfo; *handler = armci_completion_handler; return(NULL); } void armci_send_req(int proc, request_header_t* msginfo, int len) { int msglen = sizeof(request_header_t); lapi_cntr_t *pcmpl_cntr, *pcntr = &(BUF_TO_EVBUF(msginfo)->cntr); int rc; msginfo->tag.cntr= pcntr; #if ARMCI_ENABLE_GPC_CALLS if(msginfo->operation==GET && msginfo->format==VECTOR && msginfo->ehlen){ msginfo->tag.buf = (char *)(msginfo+1)+msginfo->dscrlen; } else #endif msginfo->tag.buf = msginfo+1; if(msginfo->operation==GET || msginfo->operation==LOCK){ SET_COUNTER(*(lapi_cmpl_t*)pcntr,1);/*dataarrive in same buf*/ /*The GPC case. Note that we don't use the parameter len*/ if(msginfo->format==VECTOR && msginfo->ehlen > 0) msglen += msginfo->datalen; if(lapi_max_uhdr_data_sz < msginfo->dscrlen){ msginfo->dscrlen = -msginfo->dscrlen; /* no room for descriptor */ pcntr = NULL; /* GET(descr) from CH will increment buf cntr */ }else msglen += msginfo->dscrlen; /* we should send the mutex, too. When op==LOCK, Value of len parameter is already sizeof(reqest_header_t)+sizeof(int), since we dont use len but construct our own msglen, we need to add sizeof(int). */ if(msginfo->operation==LOCK) msglen += sizeof(int); pcmpl_cntr=NULL; /* don't trace completion status for load ops */ }else if (msginfo->operation==UNLOCK){ msglen += msginfo->dscrlen; pcmpl_cntr=NULL; /* don't trace completion status for unlock */ }else{ if(lapi_max_uhdr_data_sz < (msginfo->datalen + msginfo->dscrlen)){ msginfo->datalen = -msginfo->datalen; msginfo->dscrlen = -msginfo->dscrlen; pcntr = NULL; /* GET/LOCK from CH will increment buf cntr */ }else msglen += msginfo->dscrlen+msginfo->datalen; /* trace completion of store ops */ pcmpl_cntr = &cmpl_arr[msginfo->to].cntr; } if(msginfo->operation==PUT || ARMCI_ACC(msginfo->operation)) UPDATE_FENCE_STATE(msginfo->to, msginfo->operation, 1); if((rc=LAPI_Amsend(lapi_handle,(uint)msginfo->to, (void*)armci_header_handler, msginfo, msglen, NULL, 0, NULL, pcntr, pcmpl_cntr))) armci_die("AM failed",rc); if(DEBUG_) fprintf(stderr,"%d sending req=%d to %d\n", armci_me, msginfo->operation, proc); } /*\ client sends strided data + request to server \*/ void armci_send_strided(int proc, request_header_t *msginfo, char *bdata, void *ptr, int strides, int stride_arr[], int count[]) { armci_write_strided(ptr, strides, stride_arr, count, bdata); armci_send_req(proc,msginfo,msginfo->bytes + sizeof(request_header_t)); } /*\ server sends data back to client \*/ void armci_send_data(request_header_t* msginfo, void *data) { armci_lapi_send(msginfo->tag, data, msginfo->datalen, msginfo->from); } /*\ server sends strided data back to client \*/ void armci_send_strided_data(int proc, request_header_t *msginfo, char *bdata, void *ptr, int strides, int stride_arr[], int count[]) { armci_write_strided(ptr, strides, stride_arr, count, bdata); armci_lapi_send(msginfo->tag, bdata, msginfo->datalen, msginfo->from); } char* armci_rcv_data(int proc, request_header_t *msginfo) { lapi_cmpl_t *pcntr=BUF_TO_EVBUF(msginfo); CLEAR_COUNTER((*pcntr)); #if ARMCI_ENABLE_GPC_CALLS if(msginfo->operation==GET && msginfo->format==VECTOR && msginfo->ehlen){ return((char *)(msginfo+1)+msginfo->dscrlen); } else #endif return (char*)(msginfo+1); } /*\ client receives strided data from server \*/ void armci_rcv_strided_data(int proc, request_header_t* msginfo, int datalen, void *ptr, int strides, int stride_arr[], int count[]) { lapi_cmpl_t *pcntr=BUF_TO_EVBUF(msginfo); CLEAR_COUNTER((*pcntr)); armci_read_strided(ptr, strides, stride_arr, count, (char*)(msginfo+1)); } /*\ client receives vector data from server to buffer and unpacks it \*/ void armci_rcv_vector_data(int proc, request_header_t* msginfo, armci_giov_t darr[], int len) { char *buf; buf = armci_rcv_data(proc,msginfo); armci_vector_from_buf(darr, len, buf); } /*\ initialization of LAPI related data structures \*/ void armci_init_lapi() { int rc, p; int lapi_max_uhdr_sz; lapi_cmpl_t *pcntr; lapi_remote_cxt_t util_cxt; /* For call to obtain rCxt */ #ifndef TCGMSG rc = LAPI_Init(&lapi_handle, &lapi_info); if(rc) ERROR("lapi_init failed",rc); #endif /* set the max limit for AM header data length */ rc = LAPI_Qenv(lapi_handle,MAX_UHDR_SZ, &lapi_max_uhdr_sz); if(rc) ERROR("armci_init_lapi: LAPI_Qenv failed", rc); /* fprintf(stderr,"max header size = %d\n",lapi_max_uhdr_sz);*/ /* how much data can fit into AM header ? */ lapi_max_uhdr_data_sz = lapi_max_uhdr_sz - sizeof(request_header_t); /* allocate memory for completion state array */ cmpl_arr = (lapi_cmpl_t*)malloc(armci_nproc*sizeof(lapi_cmpl_t)); if(cmpl_arr==NULL) ERROR("armci_init_lapi:malloc for cmpl_arr failed",0); /* allocate memory for ack and get counters, 1 if not thread safe */ #ifdef THREAD_SAFE ack_cntr = calloc(armci_user_threads.max, sizeof(lapi_cmpl_t)); get_cntr = calloc(armci_user_threads.max, sizeof(lapi_cmpl_t)); #else ack_cntr = calloc(1, sizeof(lapi_cmpl_t)); get_cntr = calloc(1, sizeof(lapi_cmpl_t)); #endif if (!(ack_cntr && get_cntr)) ERROR("armci_init_lapi:calloc for ack or get counters failed",0); /* initialize completion state array */ for(p = 0; p< armci_nproc; p++){ rc = LAPI_Setcntr(lapi_handle, &cmpl_arr[p].cntr, 0); if(rc) ERROR("armci_init_lapi: LAPI_Setcntr failed (arr)",rc); cmpl_arr[p].oper = -1; cmpl_arr[p].val = 0; } /* initialize ack/buf/hdr counters */ #ifdef THREAD_SAFE # define N armci_user_threads.max #else # define N 1 #endif for (p = 0; p < N; p++) { rc = LAPI_Setcntr(lapi_handle, &(ack_cntr[p].cntr), 0); if(rc) ERROR("armci_init_lapi: LAPI_Setcntr failed (ack)",rc); ack_cntr[p].val = 0; rc = LAPI_Setcntr(lapi_handle, &(get_cntr[p].cntr), 0); if(rc) ERROR("armci_init_lapi: LAPI_Setcntr failed (get)",rc); get_cntr[p].val = 0; } rc = LAPI_Setcntr(lapi_handle, &hdr_cntr.cntr, 0); if(rc) ERROR("armci_init_lapi: LAPI_Setcntr failed (hdr)",rc); hdr_cntr.val = 0; rc = LAPI_Setcntr(lapi_handle, &buf_cntr.cntr, 0); if(rc) ERROR("armci_init_lapi: LAPI_Setcntr failed (buf)",rc); buf_cntr.val = 0; #if 0 pcntr = (lapi_cmpl_t*)MessageSndBuffer; rc = LAPI_Setcntr(lapi_handle, &pcntr->cntr, 0); if(rc) ERROR("armci_init_lapi: LAPI_Setcntr failed (bufcntr)",rc); pcntr->val = 0; #endif #ifdef LAPI_RDMA /* allocate rCxt */ lapi_remote_cxt = (lapi_user_cxt_t*)malloc(armci_nproc * sizeof(lapi_user_cxt_t)); if(lapi_remote_cxt==NULL) ERROR("armci_init_lapi: rCxt malloc failed",0); /* obtain remote context "rCxt" for RDMA Operation of all procs */ for(p = 0; p< armci_nproc; p++){ if(p==armci_me) continue; util_cxt.Util_type = LAPI_REMOTE_RCXT; util_cxt.operation = LAPI_RDMA_ACQUIRE; util_cxt.dest = p; CHECK(LAPI_Util(lapi_handle, (lapi_util_t *) &util_cxt)); lapi_remote_cxt[p] = util_cxt.usr_rcxt; } #endif #if !defined(LAPI2) /* for high performance, disable LAPI internal error checking */ LAPI_Senv(lapi_handle, ERROR_CHK, 0); #endif /* make sure that interrupt mode is on */ LAPI_Senv(lapi_handle, INTERRUPT_SET, 1); /* initialize buffer managment module */ _armci_buf_init(); #ifdef LAPI_RDMA CHECK((LAPI_Gfence(lapi_handle))); #endif #if ARMCI_ENABLE_GPC_CALLS gpc_req = (gpc_buf_t *)malloc(sizeof(gpc_buf_t)*MAX_GPC_REQ); if(gpc_req==NULL)armci_die("malloc for gpc failed",sizeof(gpc_buf_t)); gpc_init(); #endif } void armci_term_lapi() { int p; lapi_remote_cxt_t util_cxt; /* For call to obtain rCxt */ #ifdef LAPI_RDMA CHECK((LAPI_Gfence(lapi_handle))); /* release remote context "rCxt" for RDMA Operation of all procs */ for(p = 0; p< armci_nproc; p++){ if(p==armci_me) continue; util_cxt.Util_type = LAPI_REMOTE_RCXT; util_cxt.operation = LAPI_RDMA_RELEASE; util_cxt.dest = p; util_cxt.usr_rcxt = lapi_remote_cxt[p]; CHECK(LAPI_Util(lapi_handle, (lapi_util_t *) &util_cxt)); } free(lapi_remote_cxt); #endif #ifndef TCGMSG CHECK((LAPI_Term(lapi_handle))); /* terminate the LAPI handle */ #endif free(cmpl_arr); free(ack_cntr); free(get_cntr); } /* primitive pseudo message-passing on top of lapi */ /* send data to remote process using p specified message tag */ /* tag contains address of receive buffer guarded by cntr at process p */ void armci_lapi_send(msg_tag_t tag, void* data, int len, int p) { int rc; lapi_cntr_t org_cntr; void *buf = tag.buf; lapi_cntr_t *cntr = tag.cntr; if(!buf)ERROR("armci_lapi_send: NULL tag(buf) error",0); if(!cntr)ERROR("armci_lapi_send: NULL tag(cntr) error",0); rc=LAPI_Setcntr(lapi_handle, &org_cntr, 0); if(rc) ERROR("armci_lapi_send:setcntr failed",rc); rc=LAPI_Put(lapi_handle, (uint)p, (uint)len, buf, data, cntr, &org_cntr, NULL); if(rc) ERROR("armci_lapi_send:put failed",rc); rc+=LAPI_Waitcntr(lapi_handle, &org_cntr, 1, NULL); if(rc) ERROR("armci_lapi_send:waitcntr failed",rc); } /* subroutine versions of macros disabling and enabling interrupts */ void intr_off_() { INTR_OFF; } void intr_on_() { INTR_ON; } void print_counters_() { int i; printf("bufcntr: val =%d cntr=%d\n", buf_cntr.val, buf_cntr.cntr); for(i=0; i< armci_nproc;i++){ printf("cmpl_arr: val=%d cntr=%d oper=%d\n",cmpl_arr[i].val, cmpl_arr[i].cntr, cmpl_arr[i].oper); } fflush(stdout); } #ifdef LAPI_RDMA /* LAPI Put RDMA */ void armci_client_direct_send(int p, void *src_buf, void *dst_buf, int len, void** contextptr, int nbtag, ARMCI_MEMHDL_T *lochdl,ARMCI_MEMHDL_T *remhdl) { lapi_xfer_t xfer_struct; /* Data structure for the xfer call */ lapi_rdma_tag_t lapi_rdma_tag; /* RDMA notification tag */ uint src_offset, tgt_offset; int val, rc; /* can be any number that fits in ushort */ lapi_rdma_tag = 22; /* CHECK: offset problem. what if client and server attached (shmat) at diff address */ src_offset = (char *)src_buf- (char *)lochdl->start; tgt_offset = (char *)dst_buf - (char *)remhdl->start; #if DEBUG_ printf("%d: Doing LAPI_Xfer (RDMA Put): dst=%d srchdl_start=%p remhdl_start=%p (bytes=%ld src_off=%d tgt_off=%d)\n", armci_me, p, lochdl->start, remhdl->start, len, src_offset, tgt_offset); fflush(stdout); #endif bzero(&xfer_struct, sizeof(xfer_struct)); xfer_struct.HwXfer.Xfer_type = LAPI_RDMA_XFER; xfer_struct.HwXfer.tgt = p; /*xfer_struct.HwXfer.op = LAPI_RDMA_PUT|LAPI_RCNTR_UPDATE;*/ xfer_struct.HwXfer.op = LAPI_RDMA_PUT; xfer_struct.HwXfer.rdma_tag = lapi_rdma_tag; xfer_struct.HwXfer.remote_cxt = lapi_remote_cxt[p]; xfer_struct.HwXfer.src_pvo = lochdl->pvo; xfer_struct.HwXfer.tgt_pvo = remhdl->pvo; xfer_struct.HwXfer.src_offset = src_offset; xfer_struct.HwXfer.tgt_offset = tgt_offset; xfer_struct.HwXfer.len = (ulong) (len); xfer_struct.HwXfer.shdlr = (scompl_hndlr_t *) NULL; xfer_struct.HwXfer.sinfo = (void *) NULL; xfer_struct.HwXfer.org_cntr = &(ack_cntr->cntr); /* Initiate RDMA Xfer */ if((rc = LAPI_Xfer(lapi_handle, &xfer_struct)) != LAPI_SUCCESS) { LAPI_Msg_string(rc, err_msg_buf); fprintf(stderr, "LAPI ERROR: %s, rc = %d\n", err_msg_buf, rc); armci_die("LAPI_Xfer (RDMA Put) failed", 0); } /* wait for RDMA completion */ rc = LAPI_Waitcntr(lapi_handle, &(ack_cntr->cntr),1,&val); if(rc != LAPI_SUCCESS) { LAPI_Msg_string(rc, err_msg_buf); fprintf(stderr, "LAPI ERROR: %s, rc = %d\n", err_msg_buf, rc); armci_die("LAPI_Waitcntr (RDMA Put) failed", 0); } /* CHECK((LAPI_Fence(lapi_handle))); */ #if DEBUG_ printf("%d: Completed LAPI_Xfer RDMA (Put): dst=%d\n", armci_me, p); #endif } /* LAPI Get RDMA */ void armci_client_direct_get(int p, void *src_buf, void *dst_buf, int len, void** cptr, int nbtag, ARMCI_MEMHDL_T *lochdl, ARMCI_MEMHDL_T *remhdl) { lapi_xfer_t xfer_struct; /* Data structure for the xfer call */ lapi_rdma_tag_t lapi_rdma_tag; /* RDMA notification tag */ uint src_offset, tgt_offset; int val, rc; /* can be any number that fits in ushort */ lapi_rdma_tag = 21; /* CHECK: offset problem. what if client and server attached (shmat) at diff address */ src_offset = (char *)dst_buf- (char *)lochdl->start; tgt_offset = (char *)src_buf - (char *)remhdl->start; #if DEBUG_ printf("%d: Doing LAPI_Xfer (RDMA Get): dst=%d srchdl_start=%p remhdl_start=%p (bytes=%ld src_off=%d tgt_off=%d)\n", armci_me, p, lochdl->start, remhdl->start, len, src_offset, tgt_offset); fflush(stdout); #endif bzero(&xfer_struct, sizeof(xfer_struct)); xfer_struct.HwXfer.Xfer_type = LAPI_RDMA_XFER; xfer_struct.HwXfer.tgt = p; /*xfer_struct.HwXfer.op = LAPI_RDMA_GET|LAPI_RCNTR_UPDATE;*/ xfer_struct.HwXfer.op = LAPI_RDMA_GET; xfer_struct.HwXfer.rdma_tag = lapi_rdma_tag; xfer_struct.HwXfer.remote_cxt = lapi_remote_cxt[p]; xfer_struct.HwXfer.src_pvo = lochdl->pvo; xfer_struct.HwXfer.tgt_pvo = remhdl->pvo; xfer_struct.HwXfer.src_offset = src_offset; xfer_struct.HwXfer.tgt_offset = tgt_offset; xfer_struct.HwXfer.len = (ulong) (len); xfer_struct.HwXfer.shdlr = (scompl_hndlr_t *) NULL; xfer_struct.HwXfer.sinfo = (void *) NULL; xfer_struct.HwXfer.org_cntr = &(get_cntr->cntr); /* Initiate RDMA Xfer */ if((rc = LAPI_Xfer(lapi_handle, &xfer_struct)) != LAPI_SUCCESS) { LAPI_Msg_string(rc, err_msg_buf); fprintf(stderr, "LAPI ERROR: %s, rc = %d\n", err_msg_buf, rc); armci_die("LAPI_Xfer (RDMA Get) failed", 0); } /* wait for RDMA completion */ rc = LAPI_Waitcntr(lapi_handle, &(get_cntr->cntr),1,&val); if(rc != LAPI_SUCCESS) { LAPI_Msg_string(rc, err_msg_buf); fprintf(stderr, "LAPI ERROR: %s, rc = %d\n", err_msg_buf, rc); armci_die("LAPI_Waitcntr (RDMA Get) failed", 0); } #if DEBUG_ printf("%d: Completed LAPI_Xfer (RDMA Get): dst=%d\n", armci_me, p); #endif } int armci_pin_contig_hndl(void *ptr, int bytes, ARMCI_MEMHDL_T *memhdl) { lapi_get_pvo_t util_pvo; /* For call to obtain PVO */ int rc; /* translate and pin the buffer to the adapter */ util_pvo.Util_type = LAPI_XLATE_ADDRESS; util_pvo.length = bytes; util_pvo.usr_pvo = 0; util_pvo.address = ptr; util_pvo.operation = LAPI_RDMA_ACQUIRE; /*bzero(ptr, bytes);*/ /* CHECK: Is touching the entire shmem sgement feasible */ if((rc=LAPI_Util(lapi_handle, (lapi_util_t *) &util_pvo)) != LAPI_SUCCESS) { return 0; } memhdl->pvo = util_pvo.usr_pvo; memhdl->start = ptr; #if DEBUG_ printf("\n%d:armci_pin_contig_hndl(): memhdl(pvo)=%ld ptr=%p bytes=%ld\n", armci_me, (long)memhdl->pvo, ptr, bytes);fflush(stdout); #endif return 1; } void armci_network_client_deregister_memory(ARMCI_MEMHDL_T *mh) { fprintf(stderr," armci_network_client_deregister_memory not available\n"); fflush(stderr); } void armci_network_server_deregister_memory(ARMCI_MEMHDL_T *mh) { fprintf(stderr," armci_network_client_deregister_memory not available\n"); fflush(stderr); } #endif /* LAPI_RDMA */ #ifdef AIX #define LOCKED 1 void armci_lapi_lock(int *lock) { atomic_p word_addr = (atomic_p)lock; int spin = 1; while(1){ if(_check_lock(word_addr, 0, LOCKED) == FALSE ) break; /* we got the lock */ if(spin){ armci_waitsome(1); spin = 0; }else{ /* yield processor to another thread */ /* cannot yield w/o affecting thread priority - better sleep */ /* yield(); */ /* call usleep to notify scheduler */ (void)usleep(5); } } } void armci_lapi_unlock(int *lock) { atomic_p word_addr = (atomic_p)lock; if(_check_lock(word_addr, LOCKED, 0) == TRUE ) armci_die("somebody else unlocked",0); } #endif #ifdef LAPI2 #include "lapi2.c" #endif ga-5-3/armci/src/devices/lapi/lapidefs.h0000640005473000001440000001061611444464075017002 0ustar d3n000users#ifndef LAPI_DEFS_H #define LAPI_DEFS_H #include #ifdef LAPI_ERR_BAD_NINTH_PARM #define LAPI2 #endif #define COMPLETE_HANDLE _armci_buf_complete_nb_request #define TEST_HANDLE _armci_buf_test_nb_request #define NB_CMPL_T lapi_cmpl_t extern lapi_handle_t lapi_handle; extern int lapi_max_uhdr_data_sz; /* max data payload in AM header */ typedef struct{ lapi_cntr_t cntr; /* counter to trace completion of stores */ int val; /* number of pending LAPI store ops */ int oper; /* code for last ARMCI store operation */ }lapi_cmpl_t; typedef struct{ /* generalized pointer to buffer */ void *cntr; void *buf; }gp_buf_t; typedef struct{ void *buf; lapi_cntr_t *cntr; }msg_tag_t; #ifdef LAPI_RDMA typedef struct region_memhdl{ void *start; lapi_user_pvo_t pvo; } region_memhdl_t; #define HAS_RDMA_GET #define REGIONS_REQUIRE_MEMHDL #define ARMCI_MEMHDL_T region_memhdl_t extern void armci_client_direct_send(int p, void *src_buf, void *dst_buf, int len, void** contextptr, int nbtag, ARMCI_MEMHDL_T *lochdl, ARMCI_MEMHDL_T *remhdl); /* LAPI RDMA */ #endif /* LAPI_RDMA */ extern lapi_cmpl_t *cmpl_arr; /* completion state array, dim=NPROC */ extern lapi_cmpl_t *ack_cntr; /* ACK counter used in handshaking protocols between origin and target */ extern lapi_cmpl_t buf_cntr; /* AM data buffer counter */ extern lapi_cmpl_t *get_cntr; /* lapi_get counter */ extern lapi_cmpl_t hdr_cntr; /* AM header buffer counter */ extern int intr_status; extern void armci_init_lapi(void); /* initialize LAPI data structures*/ extern void armci_term_lapi(void); /* destroy LAPI data structures */ extern void armci_lapi_send(msg_tag_t, void*, int, int); /* LAPI send */ #define BUF_EXTRA_FIELD_T lapi_cmpl_t #define EXTRA_MSG_BUFLEN_DBL (sizeof(lapi_cmpl_t)>>3) #define MAX_CHUNKS_SHORT_GET 9 #define SHORT_ACC_THRESHOLD (6 * lapi_max_uhdr_data_sz) #define SHORT_PUT_THRESHOLD (6 * lapi_max_uhdr_data_sz) #define LONG_PUT_THRESHOLD 128 #define LONG_GET_THRESHOLD 4000 #define LONG_GET_THRESHOLD_STRIDED LONG_GET_THRESHOLD #define PACKPUT 8 #define MSG_BUFLEN_DBL 30000 #define INTR_ON if(intr_status==1)LAPI_Senv(lapi_handle, INTERRUPT_SET, 1) #define INTR_OFF {\ LAPI_Qenv(lapi_handle, INTERRUPT_SET, &intr_status);\ LAPI_Senv(lapi_handle, INTERRUPT_SET, 0);\ } /**** macros to control LAPI modes and ordering of operations ****/ #define TEST_COUNTER(counter,_ret_) if((counter).val){\ int _val__;\ if(LAPI_Getcntr(lapi_handle,&(counter).cntr,&_val__))\ armci_die("LAPI_Getcntr failed",-1);\ if(_val__ != (counter).val) *(_ret_)=1;\ }else *(_ret_)=1; #define WAIT_COUNTER(counter) if((counter).val)\ for(;;){\ int _val__;\ if(LAPI_Getcntr(lapi_handle,&(counter).cntr,&_val__))\ armci_die("LAPI_Getcntr failed",-1);\ if(_val__ == (counter).val) break;\ LAPI_Probe(lapi_handle);\ } #define CLEAR_COUNTER(counter) if((counter).val) {\ int _val_;\ if(LAPI_Waitcntr(lapi_handle,&(counter).cntr, (counter).val, &_val_))\ armci_die("LAPI_Waitcntr failed",-1);\ if(_val_ != 0) armci_die("CLEAR_COUNTER: nonzero in file ", _val_);\ (counter).val = 0; \ } #define INIT_COUNTER(counter,_val) {\ int _rc = LAPI_Setcntr(lapi_handle, &(counter).cntr, 0);\ if(_rc)armci_die("INIT_COUNTER:setcntr failed ", _rc);\ (counter).val = (_val);\ } #define SET_COUNTER(counter, value) (counter).val += (value) #define INIT_SEND_BUF(_cntr,_snd,_rcv) INIT_COUNTER(_cntr,1) #define CLEAR_SEND_BUF_FIELD(_cntr, _s, _r,_t,_o) CLEAR_COUNTER(_cntr) #define TEST_SEND_BUF_FIELD(_cntr, _s, _r,_t,_o,_ret) TEST_COUNTER(_cntr,(_ret)) #define FIRST_INIT_SEND_BUF INIT_COUNTER #define SET_BUF_TAG _armci_buf_set_tag #define INIT_SENDBUF_INFO(_hdl,_buf,_op,_proc) \ _armci_buf_set_tag(_buf,(_hdl)->tag,0) #define FENCE_NODE(p) CLEAR_COUNTER(cmpl_arr[(p)]) #define UPDATE_FENCE_STATE(p, opcode, nissued)\ {/* if((opcode)==0)armci_die("op code 0 - buffer overwritten?",(p));*/\ cmpl_arr[(p)].val += (nissued);\ cmpl_arr[(p)].oper = (opcode);\ } #define PENDING_OPER(p) cmpl_arr[(p)].oper #define WAIT_FOR_GETS CLEAR_COUNTER(get_cntr[ARMCI_THREAD_IDX]) #define WAIT_FOR_PUTS CLEAR_COUNTER(ack_cntr[ARMCI_THREAD_IDX]) #endif ga-5-3/armci/src/devices/sockets/0000750005473000001440000000000012275260536015562 5ustar d3n000usersga-5-3/armci/src/devices/sockets/sockets.c0000640005473000001440000005763011633465620017413 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: sockets.c,v 1.23.8.1 2007-02-09 17:10:18 andriy Exp $ */ /************************************************************************** Some parts of this code were derived from the TCGMSG file sockets.c Jarek Nieplocha, last update 10/28/99 02/28/00: modified armci_WaitSock to allow some elements of socklist to be <0 (and ignored). Needed for the threaded version of server. *************************************************************************/ #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_ERRNO_H # include #endif #if HAVE_SYS_WAIT_H # include #endif #if HAVE_SYS_TIME_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_SOCKET_H # include #endif /*# include */ /*moved to sockets.h*/ #if HAVE_NETINET_IN_H # include #endif #if HAVE_NETINET_TCP_H # include #endif #if HAVE_NETDB_H # include #endif #if HAVE_UNISTD_H # include # define CLOSE close #elif HAVE_WINSOCK_H # include # define bcopy(s1,s2,n) memcpy(s2,s1,n) # define sleep(x) Sleep(1000*(x)) # define CLOSE closesocket #endif #include "armcip.h" #include "sockets.h" /* JAD 2010-05-06 Code these days is safe to use socklen_t so long as it uses * it throughout. */ #if 0 # ifdef AIX # include # if HAVE_SYS_SELECT_H # include # endif # ifdef _AIXVERSION_430 typedef socklen_t soclen_t; # else typedef size_t soclen_t; # endif # elif defined(XLCLINUX) typedef socklen_t soclen_t; # else typedef int soclen_t; # endif #else # ifdef NEC typedef int soclen_t; # else typedef socklen_t soclen_t; # endif #endif #ifdef CRAY # if HAVE_MEMORY_H # include # endif #endif /* portability of socklen_t definition is iffy - we need to avoid it !! #if defined(LINUX) && ( defined(_SOCKETBITS_H) || defined(__BITS_SOCKET_H)) #elif defined(AIX) typedef size_t socklen_t; #else typedef int socklen_t; #endif */ #ifndef MAX_STRIDE_LEVEL #define MAX_STRIDE_LEVEL 8 #endif extern int armci_me, armci_nproc,armci_nclus; int tcp_sendrcv_bufsize=131072; #define DEBUG_ 0 #define DEBUG1 0 #define CONNECT_TRIALS 4 #define MAX_INTR_NO_DATA 8 int armci_PollSocket(int sock) /* Poll the socket for available input. Return 1 if data is available, 0 otherwise. */ { fd_set ready; struct timeval timelimit; int nready; if (sock < 0) return 0; again: FD_ZERO(&ready); FD_SET(sock, &ready); timelimit.tv_sec = 0; timelimit.tv_usec = 0; nready = select(sock+1, &ready, (fd_set *) NULL, (fd_set *) NULL, &timelimit); if (nready < 0) { if (errno == EINTR) goto again; else armci_die("armci_PollSocket: error from select", sock); } return nready; } /*\ sleep in select until data appears on one of sockets * return number of sockets ready and indicate which ones are in ready array * allows <0 values in socklist array (ignores them) \*/ int armci_WaitSock(int *socklist, int num, int *ready) { int sock,maxsock=0; fd_set dset; int nready; if(num<0) armci_die("armci_WaitSock: num <0",num); again: FD_ZERO(&dset); maxsock=0; for(sock=0; sock maxsock)maxsock = socklist[sock]; if(socklist[sock] >0){ /* ignore fd=-1 on the list */ FD_SET(socklist[sock], &dset); } } nready = select(maxsock+1, &dset, (fd_set*)NULL, (fd_set*)NULL, NULL); if (nready < 0) { if (errno == EINTR){ fprintf(stderr,"%d:interrupted in select\n",armci_me); goto again; } else armci_die("armci_WaitSocket: error from select", sock); } for(sock=0; sock maxsock)maxsock = socklist[sock]; if(socklist[sock] >0){ /* ignore fd=-1 on the list */ FD_SET(socklist[sock], &dset); } } timelimit.tv_sec = 0; timelimit.tv_usec = lim; nready = select(maxsock+1, &dset, (fd_set*)NULL, (fd_set*)NULL, &timelimit); if (nready < 0) { if (errno == EINTR){ fprintf(stderr,"%d:interrupted in select\n",armci_me); goto again; } else armci_die("armci_WaitSocket: error from select", sock); } for(sock=0; sockp_proto; status = setsockopt(sock, level, TCP_NODELAY, optval, sizeof(int)); if (status != 0) armci_die("armci_TcpNoDelay: setsockopt failed", status); } void armci_ShutdownAll(int socklist[], int num) /* close all sockets discarding any pending data in either direction. */ { int i; for (i=0; i= 0) { (void) shutdown(socklist[i], 2); (void) CLOSE(socklist[i]); socklist[i]=-1; } } #if defined(USE_SOCKET_VECTOR_API) int _armci_tcp_writev(int sock, struct iovec *iovptr,int writeiovlength,int currentwritesize,struct iovec *iov){ int n=0; while(n!=currentwritesize){ int rc; rc=writev(sock,iovptr,writeiovlength); if(rc<0)perror("writev failed"); if(DEBUG1&&0)if(rciov_len)+templength>rc){ iovptr->iov_base=(char *)((*iovptr).iov_base)+(rc-templength); iovptr->iov_len-=(rc-templength); templength+=(rc-templength); } else { templength+=iovptr->iov_len; iovptr+=1; completediovs++; } } writeiovlength-=completediovs; if(writeiovlength<=0)writeiovlength=1; } } return(n); } int _armci_tcp_readv(int sock, struct iovec *iovptr,int readiovlength,int currentreadsize,struct iovec *iov){ int n=0; while(n!=currentreadsize){ int rc; rc=readv(sock,iovptr,readiovlength); if(rc<0)perror("readv failed"); if(DEBUG1&&0)if(rciov_len)+templength>rc){ iovptr->iov_base=(char *)((*iovptr).iov_base)+(rc-templength); iovptr->iov_len-=(rc-templength); templength+=(rc-templength); } else { templength+=iovptr->iov_len; iovptr+=1; completediovs++; } } readiovlength-=completediovs; if(readiovlength<=0)readiovlength=1; } } return(n); } int armci_ReadVFromSocket(int sock,struct iovec *iov, int iovlength, int totalsize) { struct iovec *iovptr; int i=0,num_xmit=1,lastiovoriglen=0,lastiovnewlen=0,lastiovindex=-1,n=0; int readiovlength,currentreadsize=totalsize,totalreadsofar=0,byteslefttoread=0; char *lastiovorigbase=NULL; iovptr=iov; if(totalsize>PACKET_SIZE){ while(totalreadsofar!=totalsize){ currentreadsize=0; if(lastiovindex>=0) iovptr=iov+lastiovindex; if(lastiovoriglen!=0){ iov[lastiovindex].iov_base = (lastiovorigbase+lastiovnewlen); iov[lastiovindex].iov_len=lastiovoriglen-lastiovnewlen; lastiovoriglen=0; } iovlength=0; if(totalsize-totalreadsofarbyteslefttoread){ lastiovoriglen=iov[i].iov_len;lastiovorigbase=(char *)iov[i].iov_base; lastiovindex=i; iov[i].iov_len=byteslefttoread-currentreadsize; currentreadsize+=iov[i].iov_len; lastiovnewlen=iov[i].iov_len; } else { currentreadsize+=iov[i].iov_len; i++; lastiovindex=i; iovlength++; } } if(lastiovoriglen>0)iovlength+=1; totalreadsofar+=currentreadsize; num_xmit++; readiovlength=iovlength; n=_armci_tcp_readv(sock,iovptr,readiovlength,currentreadsize,iov); if(DEBUG1){printf("\nFinished reading n=%d bytes iov of length %d \n",n,iovlength);fflush(stdout);} } } else { iovptr=iov; readiovlength=iovlength; n=0; n+=_armci_tcp_readv(sock,iovptr,readiovlength,currentreadsize,iov); if(DEBUG1){printf("\nFits in one packet Finished reading n=%d bytes iov of length %d \n",n,iovlength);fflush(stdout);} } return(n); } int armci_WriteVToSocket(int sock,struct iovec *iov, int iovlength, int totalsize){ int lastiovoriglen=0,lastiovnewlen=0,lastiovindex=-1,totalwritesofar=0,byteslefttowrite=0; struct iovec *iovptr; int i=0,num_xmit=0,n=0; int currentwritesize=totalsize,writeiovlength; char *lastiovorigbase=NULL; iovptr=iov; if(totalsize>PACKET_SIZE){ while(totalwritesofar!=totalsize){ currentwritesize=0; if(lastiovindex>=0) iovptr=iov+lastiovindex; if(lastiovoriglen!=0){ iov[lastiovindex].iov_base = (lastiovorigbase+lastiovnewlen); iov[lastiovindex].iov_len= lastiovoriglen-lastiovnewlen; lastiovoriglen=0; } iovlength=0; if(totalsize-totalwritesofarbyteslefttowrite){ lastiovoriglen=iov[i].iov_len;lastiovorigbase=(char *)iov[i].iov_base; lastiovindex=i; iov[i].iov_len=byteslefttowrite-currentwritesize; currentwritesize+=iov[i].iov_len;lastiovnewlen=iov[i].iov_len; } else { currentwritesize+=iov[i].iov_len; i++; lastiovindex=i; iovlength++; } } totalwritesofar+=currentwritesize; num_xmit++; if(lastiovoriglen>0)iovlength+=1; writeiovlength=iovlength; n=_armci_tcp_writev(sock,iovptr,writeiovlength,currentwritesize,iov); if(DEBUG1){printf("\nFinished writing n=%d iov of length %d \n",n,iovlength);fflush(stdout);} if(n!=currentwritesize)armci_die2("\n problems with writing using writev\n",n,currentwritesize); } } else { iovptr=iov; writeiovlength=iovlength; n=0; n= _armci_tcp_writev(sock,iovptr,writeiovlength,currentwritesize,iov); if(n<0)perror("write failed"); if(DEBUG1){printf("\nFits in one packet Finished writing n=%d iov of length %d \n",n,iovlength);fflush(stdout);} if(n!=currentwritesize)armci_die2("\n problems with writing using writev\n",n,currentwritesize); } return(n); } #endif /*for use_socket_vec_api*/ int armci_ReadFromSocket(int sock, void* buffer, int lenbuf) /* Read from the socket until we get all we want. */ { int nread, status, nintr=0; char *buf = (char*)buffer; status = lenbuf; while (lenbuf > 0) { again: nread = recv(sock, buf, lenbuf, 0); /* on linux 0 can be returned if socket is closed by sender */ if(nread < 0 || ((nread == 0) && errno ) ){ if (errno == EINTR){ if(DEBUG_){ fprintf(stderr,"%d:interrupted in recv\n",armci_me); } /* retry a few times if nread==0 */ if(nread==0) nintr++; else nintr=0; if(nintr>MAX_INTR_NO_DATA) return -1; /* the socket must be closed */ goto again; }else { if(DEBUG_){ (void) fprintf(stderr,"sock=%d, pid=%d, nread=%d, len=%d\n", sock, armci_me, nread, lenbuf); if(errno)perror("armci_ReadFromSocket: recv failed"); } status = -1; break; } } buf += nread; lenbuf -= nread; } return status; } int armci_WriteToSocket (int sock, void* buffer, int lenbuf) /* Write to the socket in packets of PACKET_SIZE bytes */ { int status = lenbuf; int nsent, len; char *buf = (char*)buffer; if(DEBUG_){ printf("%d armci_WriteToSocket sock=%d lenbuf=%d\n",armci_me,sock,lenbuf); fflush(stdout); } while (lenbuf > 0) { again: len = (lenbuf > PACKET_SIZE) ? PACKET_SIZE : lenbuf; nsent = send(sock, buf, len, 0); if (nsent < 0) { /* This is bad news */ if(errno ==EINTR){ if(DEBUG_){ fprintf(stderr,"%d:interrupted in socket send\n",armci_me); } goto again; }else{ if(DEBUG_){ (void) fprintf(stderr,"sock=%d, pid=%d, nsent=%d, len=%d\n", sock, armci_me, nsent, lenbuf); (void) fflush(stderr); } status = -1; break; } } buf += nsent; lenbuf -= nsent; } return status; } void armci_CreateSocketAndBind(int *sock, int *port) /* Create a socket, bind it to a wildcard internet name and return the info so that its port number may be advertised */ { soclen_t length; struct sockaddr_in server; int size = PACKET_SIZE; int on = 1; length = sizeof (struct sockaddr_in); /* Create socket */ if ( (*sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) armci_die("armci_CreateSocketAndBind: socket creation failed", *sock); if(setsockopt(*sock, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof on) == -1) armci_die("armci_CreateSocketAndBind: error from setsockopt", -1); /* Increase size of socket buffers to improve long message performance and increase size of message that goes asynchronously */ if(setsockopt(*sock, SOL_SOCKET, SO_RCVBUF, (char *) &size, sizeof(size))) armci_die("armci_CreateSocketAndBind: error setting SO_RCVBUF", size); if(setsockopt(*sock, SOL_SOCKET, SO_SNDBUF, (char *) &size, sizeof(size))) armci_die("armci_CreateSocketAndBind: error setting SO_SNDBUF", size); armci_TcpNoDelay(*sock); /* Name socket with wildcards */ server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = 0; if (bind(*sock, (struct sockaddr *) &server, length) < 0) armci_die("armci_CreateSocketAndBind: bind failed", 0); /* Find out port number etc. */ if (getsockname(*sock, (struct sockaddr *) &server, &length) < 0) armci_die("armci_CreateSocketAndBind: getsockname failed", 0); *port = ntohs(server.sin_port); } /*\ listen for socket connections \*/ void armci_ListenSockAll(int* socklist, int num) { int i; if(num<0)armci_die("armci_ListenSockAll invalid number of sockets",num); for(i=0; i< num; i++){ againlist: if (listen(socklist[i], num) < 0) { if (errno == EINTR) goto againlist; else armci_die("armci_ListenSockAll: listen failed", 0); } } if (DEBUG_) { (void) printf("process %d out of listen on %d sockets\n",armci_me,num); (void) fflush(stdout); } } void armci_tcp_get_sock_buf_size(int msgsock){ int buffer_orig=32768,r; r = -1; while ( r < 0 && (tcp_sendrcv_bufsize > buffer_orig) ) { r= setsockopt(msgsock, SOL_SOCKET, SO_SNDBUF, (char *) &tcp_sendrcv_bufsize, sizeof(tcp_sendrcv_bufsize)); r= setsockopt(msgsock, SOL_SOCKET, SO_RCVBUF, (char *) &tcp_sendrcv_bufsize, sizeof(tcp_sendrcv_bufsize)); if( r < 0 ) tcp_sendrcv_bufsize =(tcp_sendrcv_bufsize/2); } } /*\ accept connections on the specified sockets \*/ void armci_AcceptSockAll(int* socklist, int num) { fd_set ready, fdzero; struct timeval timelimit; int maxsock, msgsock, nready, num_accept=0; int i; if(num<0)armci_die("armci_AcceptSockAll invalid number of sockets",num); /* Use select to wait for someone to try and establish a connection so that we can add a short timeout to avoid hangs */ FD_ZERO(&fdzero); againsel: FD_ZERO(&ready); /* we negate socket number on the list to mark already connected */ maxsock=0; for(i=0; i maxsock)maxsock = socklist[i]; /* find largest value*/ if(socklist[i]>0) FD_SET(socklist[i], &ready); /* printf("%d: accepting socket%d=%d of %d\n",armci_me,i,socklist[i],num);*/ } timelimit.tv_sec = TIMEOUT_ACCEPT; timelimit.tv_usec = 0; nready = select(maxsock+1, &ready, (fd_set *) NULL, (fd_set *) NULL, &timelimit); /* error screening */ if ( (nready <= 0) && (errno == EINTR) ) goto againsel; else if (nready < 0) armci_die("armci_AcceptSockAll: error from select",nready); else if (nready == 0) armci_die("armci_AcceptSockAll:timeout waiting for connection",nready); /* if (bcmp(&ready,&fdzero,sizeof(fdzero)))*/ /* armci_die("armci_AcceptSockAll: out of select but not ready!",nready);*/ /* accept connection from newly contacted clients */ for(i=0; i< num; i++){ int sock = socklist[i]; if(sock<0) continue; /* accepted already */ if(!FD_ISSET(sock, &ready)) continue; /* not contacted yet */ againacc: msgsock = accept(sock, (struct sockaddr *) NULL, (soclen_t *) NULL); if(msgsock==0){ int msgsock2; msgsock2 = dup(msgsock); /*(void) CLOSE(msgsock);*/ msgsock = msgsock2; } if (msgsock == -1) { if (errno == EINTR) goto againacc; else armci_die("armci_AcceptSockAll: accept failed", msgsock); } if(DEBUG_){ (void) printf("process %d out of accept socket=%d\n",armci_me,msgsock); (void) fflush(stdout); } /* Increase size of socket buffers to improve long message performance and increase size of message that goes asynchronously */ armci_tcp_get_sock_buf_size(msgsock); armci_TcpNoDelay(msgsock); (void) CLOSE(sock); /* will not be needing this again */ socklist[i] = -msgsock; /* negate connected socket on the list */ num_accept++; } if(num_accept < num) goto againsel; for(i=0; i< num; i++) if(socklist[i]>=0) armci_die("armci_AcceptSockAll: not connected",socklist[i]); else socklist[i] = - socklist[i]; } int armci_ListenAndAccept(int sock) /* Listen and accept a connection on the specified socket which was created with CreateSocketAndBind */ { fd_set ready; struct timeval timelimit; int msgsock, nready; int size = PACKET_SIZE; againlist: if (listen(sock, 1) < 0) { if (errno == EINTR) goto againlist; else armci_die("armci_ListenAndAccept: listen failed", 0); } if (DEBUG_) { (void) printf("process %d out of listen on socket %d\n",armci_me,sock); (void) fflush(stdout); } /* Use select to wait for someone to try and establish a connection so that we can add a short timeout to avoid hangs */ againsel: FD_ZERO(&ready); FD_SET(sock, &ready); timelimit.tv_sec = TIMEOUT_ACCEPT; timelimit.tv_usec = 0; nready = select(sock+1, &ready, (fd_set *) NULL, (fd_set *) NULL, &timelimit); if ( (nready <= 0) && (errno == EINTR) ) goto againsel; else if (nready < 0) armci_die("armci_ListenAndAccept: error from select", nready); else if (nready == 0) armci_die("armci_ListenAndAccept: timeout waiting for connection", nready); if (!FD_ISSET(sock, &ready)) armci_die("armci_ListenAndAccept: out of select but not ready!", nready); againacc: msgsock = accept(sock, (struct sockaddr *) NULL, (soclen_t *) NULL); if (msgsock == -1) { if (errno == EINTR) goto againacc; else armci_die("armci_ListenAndAccept: accept failed", msgsock); } if (DEBUG_) { (void) printf("process %d out of accept on socket %d\n", armci_me,msgsock); (void) fflush(stdout); } /* Increase size of socket buffers to improve long message performance and increase size of message that goes asynchronously */ if(setsockopt(msgsock, SOL_SOCKET, SO_RCVBUF, (char *) &size, sizeof size)) armci_die("armci_ListenAndAccept: error setting SO_RCVBUF", size); if(setsockopt(msgsock, SOL_SOCKET, SO_SNDBUF, (char *) &size, sizeof size)) armci_die("armci_ListenAndAccept: error setting SO_SNDBUF", size); armci_TcpNoDelay(sock); (void) CLOSE(sock); /* will not be needing this again */ return msgsock; } #if !defined(SGI) && !defined(WIN32) struct hostent *gethostbyname(); #endif int armci_CreateSocketAndConnect(char *hostname, int port) /* Return the file descriptor of the socket which connects me to the remote process on hostname at port hostname = hostname of the remote process port = port number of remote socket */ { int sock, status; struct sockaddr_in server; struct hostent *hp; int on = 1; int trial; /* Create socket */ if ( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) { (void) fprintf(stderr,"trying to connect to host=%s, port=%d\n", hostname, port); armci_die("armci_CreateSocketAndConnect: socket failed", sock); } /* the following can be disabled */ if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof on) == -1) armci_die("armci_CreateSocketAndConnect: error setting REUSEADDR", -1); /* Connect socket */ server.sin_family = AF_INET; hp = gethostbyname(hostname); if (hp == 0) { (void) fprintf(stderr,"trying to connect to host=%s, port=%d\n", hostname, port); armci_die("armci_CreateSocketAndConnect: gethostbyname failed", 0); } bcopy((char *) hp->h_addr, (char *) &server.sin_addr, hp->h_length); server.sin_port = htons((unsigned short) port); trial = 0; againcon: if ((status = connect(sock, (struct sockaddr *) &server, sizeof server)) < 0) { if (errno == EINTR) goto againcon; else if(trial>CONNECT_TRIALS){ (void) fprintf(stderr,"%d:trying connect to host=%s, port=%d t=%d %d\n", armci_me,hostname, port,trial,errno); perror("trying to connect:"); armci_die("armci_CreateSocketAndConnect: connect failed", status); }else { trial++; sleep(1); goto againcon; } } /* Increase size of socket buffers to improve long message performance and increase size of message that goes asynchronously */ armci_tcp_get_sock_buf_size(sock); armci_TcpNoDelay(sock); return sock; } ga-5-3/armci/src/devices/sockets/sockets.h0000640005473000001440000000321211444464075017406 0ustar d3n000users#ifndef SOCKETS_H_ #define SOCKETS_H_ #include "armci.h" #ifndef WIN32 #define USE_SOCKET_VECTOR_API #endif #if defined(USE_SOCKET_VECTOR_API) # include #endif extern int tcp_sendrcv_bufsize; extern int armci_PollSocket(int sock); extern int armci_WaitSock(int *socklist, int num, int *ready); extern int armci_ReadFromSocket(int sock, void* buffer, int lenbuf); extern int armci_WriteToSocket (int sock, void* buffer, int lenbuf); #if defined(USE_SOCKET_VECTOR_API) extern int armci_RecvStridedFromSocket(int sock,void* buffer,int *str_arr,int *cnt,int str_level,struct iovec *iov); extern int armci_SendStridedToSocket(int sock,void* buffer,int *str_arr,int *cnt,int str_level,struct iovec *iov); extern int armci_RecvVectorFromSocket(int sock,armci_giov_t darr[], int len,struct iovec *iov); extern int armci_SendVectorToSocket(int sock,armci_giov_t darr[], int len,struct iovec *iov); extern int armci_ReadVFromSocket(int sock,struct iovec *iov, int iovlength, int totalsize); extern int armci_WriteVToSocket (int sock,struct iovec *iov, int iovlength, int totalsize); #endif extern void armci_ListenSockAll(int* socklist, int num); extern void armci_AcceptSockAll(int* socklist, int num); extern int armci_CreateSocketAndConnect(char *hostname, int port); extern void armci_ShutdownAll(int socklist[], int num); extern void armci_CreateSocketAndBind(int *sock, int *port); #define PACKET_SIZE tcp_sendrcv_bufsize #define TIMEOUT_ACCEPT 60 #define GET_SEND_BUFFER _armci_buf_get_clear_busy #define FREE_SEND_BUFFER _armci_buf_release #ifndef UIO_MAXIOV #define MAX_IOVEC 8 #else #define MAX_IOVEC (UIO_MAXIOV>100?100:UIO_MAXIOV) #endif #endif ga-5-3/armci/src/devices/sockets/dataserv.c0000640005473000001440000006327411633461607017553 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: dataserv.c,v 1.30.8.5 2007-07-02 05:18:13 d3p687 Exp $ */ #include "armcip.h" #include "request.h" #include "copy.h" #if HAVE_STDIO_H # include #endif #if HAVE_ERRNO_H # include #endif #if HAVE_MATH_H # include #endif #define DEBUG_ 0 #define DEBUG1 0 #define USE_VECTOR_FORMAT_ 1 active_socks_t *_armci_active_socks; extern int AR_ready_sigchld; int *SRV_sock; int *AR_port; int *CLN_sock; char *msg="hello from server"; static int *readylist=(int*)0; #define GETBUF(buf,type,var) (var) = *(type*)(buf); (buf) += sizeof(type) #if defined(USE_SOCKET_VECTOR_API) int armci_RecvVectorFromSocket(int sock,armci_giov_t darr[], int len, struct iovec *iov){ int i,j=0,k,num_xmit=0,lastiovlength,iovlength,n=0,max_iovec,totalsize=0; int totaliovs=0,dim1=0,dim2=0; struct iovec *saveiov=iov; max_iovec = MAX_IOVEC; for(i=0;i1){ total_of_2D = count[2]; for(j=3; j<=stride_levels; j++) { index[j] = 0; unit[j] = unit[j-1] * count[j-1]; total_of_2D *= count[j]; } } num_xmit = (total_of_2D*count[1])/max_iovec; lastiovlength = (total_of_2D*count[1])%max_iovec; if(num_xmit == 0) num_xmit = 1; else if(lastiovlength!=0)num_xmit++; k=0;vecind=0; if(lastiovlength!=0 && k==(num_xmit-1))iovlength=lastiovlength; else iovlength=max_iovec; for(i=0; i= count[j]) index[j] = 0; } dst1=dst; for(j=0;j1){ total_of_2D = count[2]; for(j=3; j<=stride_levels; j++) { index[j] = 0; unit[j] = unit[j-1] * count[j-1]; total_of_2D *= count[j]; } } num_xmit = total_of_2D*count[1]/max_iovec; lastiovlength = (total_of_2D*count[1])%max_iovec; if(num_xmit == 0) num_xmit = 1; else if(lastiovlength!=0)num_xmit++; k=0;vecind=0; if(lastiovlength!=0 && k==(num_xmit-1))iovlength=lastiovlength; else iovlength=max_iovec; for(i=0; i= count[j]) index[j] = 0; } src1=src; for(j=0;joperation==GET) bufsize = msginfo->dscrlen+sizeof(request_header_t); if(msginfo->operation==PUT){ msginfo->datalen=0; msginfo->bytes=msginfo->dscrlen; bufsize=msginfo->dscrlen+sizeof(request_header_t); } armci_send_req(proc, msginfo, bufsize); if(msginfo->operation==PUT){ bytes=armci_SendVectorToSocket(SRV_sock[armci_clus_id(proc)],darr,len, (struct iovec *)((char*)(msginfo+1)+msginfo->dscrlen) ); } return(bytes); } int armci_direct_vector_get(request_header_t *msginfo , armci_giov_t darr[], int len, int proc) { return armci_RecvVectorFromSocket(SRV_sock[armci_clus_id(proc)],darr,len, (struct iovec *)((char*)(msginfo+1)+msginfo->dscrlen) ); } int armci_direct_vector(request_header_t *msginfo , armci_giov_t darr[], int len, int proc){ int bufsize=0,bytes=0,s; for(s=0; soperation==GET) bufsize = msginfo->dscrlen+sizeof(request_header_t); if(msginfo->operation==PUT){ msginfo->datalen=0; msginfo->bytes=msginfo->dscrlen; bufsize=msginfo->dscrlen+sizeof(request_header_t); } armci_send_req(proc, msginfo, bufsize); if(msginfo->operation==GET){ bytes=armci_RecvVectorFromSocket(SRV_sock[armci_clus_id(proc)],darr,len, (struct iovec *)((char*)(msginfo+1)+msginfo->dscrlen) ); } if(msginfo->operation==PUT){ bytes=armci_SendVectorToSocket(SRV_sock[armci_clus_id(proc)],darr,len, (struct iovec *)((char*)(msginfo+1)+msginfo->dscrlen) ); } return(bytes); } #endif /*\ client sends request message to server \*/ int armci_send_req_msg(int proc, void *buf, int bytes) { int cluster = armci_clus_id(proc); request_header_t* msginfo = (request_header_t*)buf; int idx, rc; THREAD_LOCK(armci_user_threads.net_lock); /* mark sockets as active (only if reply is expected?) */ idx = _armci_buf_to_index(msginfo); _armci_active_socks->socks[idx] = SRV_sock[cluster]; rc = (armci_WriteToSocket(SRV_sock[cluster], buf, bytes) < 0); THREAD_UNLOCK(armci_user_threads.net_lock); return rc; } void armci_write_strided_sock(void *ptr, int stride_levels, int stride_arr[], int count[], int fd) { int i, j, stat; long idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int bvalue[MAX_STRIDE_LEVEL], bunit[MAX_STRIDE_LEVEL]; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ bvalue[0] = 0; bvalue[1] = 0; bunit[0] = 1; bunit[1] = 1; for(i=2; i<=stride_levels; i++) { bvalue[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } for(i=0; i (count[j]-1)) bvalue[j] = 0; } /* memcpy(buf, ((char*)ptr)+idx, count[0]); */ /* buf += count[0]; */ stat = armci_WriteToSocket(fd, ((char*)ptr)+idx, count[0]); if(stat<0)armci_die("armci_write_strided_sock:write failed",stat); } } void armci_read_strided_sock(void *ptr, int stride_levels, int stride_arr[], int count[], int fd) { int i, j, stat; long idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int bvalue[MAX_STRIDE_LEVEL], bunit[MAX_STRIDE_LEVEL]; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ bvalue[0] = 0; bvalue[1] = 0; bunit[0] = 1; bunit[1] = 1; for(i=2; i<=stride_levels; i++) { bvalue[i] = 0; bunit[i] = bunit[i-1] * count[i-1]; } for(i=0; i (count[j]-1)) bvalue[j] = 0; } /* memcpy(buf, ((char*)ptr)+idx, count[0]); */ /* buf += count[0]; */ stat = armci_ReadFromSocket(fd, ((char*)ptr)+idx, count[0]); if(stat<0)armci_die("armci_read_strided_sock:read failed",stat); } } /*\ client sends strided data + request to server \*/ int armci_send_req_msg_strided(int proc, request_header_t *msginfo,char *ptr, int strides, int stride_arr[], int count[]) { int cluster = armci_clus_id(proc); int stat, bytes; if(DEBUG_){ printf("%d:armci_send_req_msg_strided: op=%d to=%d bytes= %d \n",armci_me, msginfo->operation,proc,msginfo->datalen); fflush(stdout); } /* we write header + data descriptor */ bytes = sizeof(request_header_t) + msginfo->dscrlen; THREAD_LOCK(armci_user_threads.net_lock); stat = armci_WriteToSocket(SRV_sock[cluster], msginfo, bytes); if(stat<0)armci_die("armci_send_strided:write failed",stat); #if defined(USE_SOCKET_VECTOR_API) if(msginfo->operation==PUT && msginfo->datalen==0) armci_SendStridedToSocket( SRV_sock[cluster],ptr,stride_arr,count, strides,(struct iovec *)(msginfo+1) ); else #endif /* for larger blocks write directly to socket thus avoiding memcopy */ armci_write_strided_sock(ptr, strides,stride_arr,count,SRV_sock[cluster]); THREAD_UNLOCK(armci_user_threads.net_lock); return 0; } char *armci_ReadFromDirect(int proc, request_header_t * msginfo, int len) { int cluster=armci_clus_id(proc); int stat; if(DEBUG_){ printf("%d:armci_ReadFromDirect: from %d \n",armci_me,proc); fflush(stdout); } stat =armci_ReadFromSocket(SRV_sock[cluster],msginfo+1,len); if(stat<0)armci_die("armci_rcv_data: read failed",stat); return(char*)(msginfo+1); } /*\ client receives strided data from server \*/ void armci_ReadStridedFromDirect(int proc, request_header_t* msginfo, void *ptr, int strides, int stride_arr[], int count[]) { int cluster=armci_clus_id(proc); if(DEBUG_){ printf("%d:armci_ReadStridedFromDirect: from %d \n",armci_me,proc); fflush(stdout); } #if defined(USE_SOCKET_VECTOR_API) if(msginfo->operation==GET && strides > 0) armci_RecvStridedFromSocket( SRV_sock[cluster],ptr,stride_arr,count, strides,(struct iovec *)((char*)(msginfo+1)+msginfo->dscrlen)); else #endif armci_read_strided_sock(ptr, strides, stride_arr, count, SRV_sock[cluster]); } /*********************************** server side ***************************/ #if defined(USE_SOCKET_VECTOR_API) void armci_tcp_read_vector_data(request_header_t *msginfo,void *vdscr,int p){ int bytes,i,j,stat; void **ptr; char *dscr; long len; armci_giov_t *mydarr; bytes = msginfo->dscrlen; if(DEBUG1){ printf("\n in armci_tcp_read_vector_data reading bytes=%d infonext=%p\n", bytes,(void*)(msginfo+1));fflush(stdout); } stat = armci_ReadFromSocket(CLN_sock[p], (MessageRcvBuffer+sizeof(request_header_t)),bytes); if(stat<0)armci_die("armci_tcp_read_vector_data: read of data failed",stat); dscr=(MessageRcvBuffer+sizeof(request_header_t)); ptr=(void**)dscr; *(void**)vdscr=(void *)dscr; mydarr = (armci_giov_t *)(dscr+bytes); GETBUF(dscr, long ,len); if(len!=0){ for(i=0;idscrlen; if(DEBUG1){ printf("\n in armci tcp read strided data reading bytes=%d infonext=%p\n" ,bytes,(void*)(msginfo+1));fflush(stdout); } stat = armci_ReadFromSocket(CLN_sock[p], (MessageRcvBuffer+sizeof(request_header_t)),bytes); if(stat<0)armci_die("armci_tcp_read_strided_data:read of data failed",stat); dscr=(MessageRcvBuffer+sizeof(request_header_t)); *(void**)vdscr=(void *)dscr; ptr = *(void**)dscr; dscr += sizeof(void*); stride_levels = *(int*)dscr; dscr += sizeof(int); stride_arr = (int*)dscr; dscr += stride_levels*sizeof(int); count = (int*)dscr; dscr += (stride_levels+1)*sizeof(int); armci_RecvStridedFromSocket( CLN_sock[p],ptr,stride_arr,count,stride_levels, (struct iovec *)dscr); /*armci_RecvStridedFromSocket( CLN_sock[p],ptr,stride_arr,count, stride_levels,(struct iovec *)((char*)(msginfo+1)+msginfo->dscrlen) );*/ } #endif /*\ server receives request \*/ void armci_rcv_req(void *mesg, void *phdr, void *pdescr,void *pdata,int *buflen) { request_header_t *msginfo = (request_header_t*)MessageRcvBuffer; int hdrlen = sizeof(request_header_t); int stat, p = *(int*)mesg; int bytes; stat =armci_ReadFromSocket(CLN_sock[p],MessageRcvBuffer,hdrlen); if(stat<0) armci_die("armci_rcv_req: failed to receive header ",p); *(void**)phdr = msginfo; #if defined(USE_SOCKET_VECTOR_API) if(msginfo->operation == PUT && msginfo->datalen==0){ if(msginfo->format==STRIDED) armci_tcp_read_strided_data(msginfo,pdescr,p); if(msginfo->format==VECTOR){ armci_tcp_read_vector_data(msginfo,pdescr,p); } return; } #endif *buflen = MSG_BUFLEN - hdrlen; if (msginfo->operation == GET) bytes = msginfo->dscrlen; else{ bytes = msginfo->bytes; if(bytes >*buflen)armci_die2("armci_rcv_req: message overflowing rcv buf", msginfo->bytes,*buflen); } if(msginfo->bytes){ stat = armci_ReadFromSocket(CLN_sock[p],msginfo+1,bytes); if(stat<0)armci_die("armci_rcv_req: read of data failed",stat); *(void**)pdescr = msginfo+1; *(void**)pdata = msginfo->dscrlen + (char*)(msginfo+1); *buflen -= msginfo->dscrlen; if (msginfo->operation != GET) if(msginfo->datalen)*buflen -= msginfo->datalen; }else { *(void**)pdata = msginfo+1; *(void**)pdescr = NULL; } if(msginfo->datalen>0 && msginfo->operation != GET){ if(msginfo->datalen > ((int)MSG_BUFLEN) -((int)hdrlen) -msginfo->dscrlen) armci_die2("armci_rcv_req:data overflowing buffer", msginfo->dscrlen,msginfo->datalen); *buflen -= msginfo->datalen; } } /*\ send data back to client \*/ void armci_WriteToDirect(int to, request_header_t* msginfo, void *data) { int stat = armci_WriteToSocket(CLN_sock[to], data, msginfo->datalen); if(stat<0)armci_die("armci_WriteToDirect:write failed",stat); } /*\ server sends strided data back to client \*/ void armci_WriteStridedToDirect(int proc, request_header_t* msginfo, void *ptr, int strides, int stride_arr[], int count[]) { if(DEBUG_){ printf("%d:armci_WriteStridedToDirect:from %d\n",armci_me,proc); fflush(stdout); } #if defined(USE_SOCKET_VECTOR_API) if(msginfo->operation==GET && strides>0) armci_SendStridedToSocket(CLN_sock[proc],ptr,stride_arr,count,strides, (struct iovec *)((char*)(msginfo+1)+msginfo->dscrlen) ) ; else #endif armci_write_strided_sock(ptr, strides, stride_arr, count, CLN_sock[proc]); } /*\ server writes data to socket associated with process "to" \*/ void armci_sock_send(int to, void* data, int len) { int stat = armci_WriteToSocket(CLN_sock[to], data, len); if(stat<0)armci_die("armci_sock_send:write failed",stat); } /*\ close all open sockets, called before terminating/aborting \*/ void armci_transport_cleanup() { if(SERVER_CONTEXT){ if(readylist)free(readylist); armci_ShutdownAll(CLN_sock,armci_nproc); /*server */ }else armci_ShutdownAll(SRV_sock,armci_nclus); /*client */ } /*\ main routine for data server process in a cluster environment * the process is blocked (in select) until message arrives from * the clients and services the requests \*/ void armci_call_data_server() { int nready; int up=1; readylist = (int*)calloc(sizeof(int),armci_nproc); if(!readylist)armci_die("armci_data_server:could not allocate readylist",0); if(DEBUG_){ printf("%d server waiting for request\n",armci_me); fflush(stdout); sleep(1); } /* server main loop; wait for and service requests until QUIT requested */ for(;;){ int i, p; nready = armci_WaitSock(CLN_sock, armci_nproc, readylist); for(i = 0; i < armci_nproc; i++){ p = (up) ? i : armci_nproc -1 -i; if(!readylist[p])continue; armci_data_server(&p); nready--; if(nready==0) break; /* all sockets read */ } /* fairness attempt: each time process the list in a different direction*/ up = 1- up; /* switch directions for the next round */ if(nready) armci_die("armci_dataserv:readylist not consistent with nready",nready); } } extern int tcp_sendrcv_bufsize; void armci_determine_sock_buf_size(){ if(armci_nclus<=8)return; if(armci_nclus>=128){tcp_sendrcv_bufsize = 32768;return;} tcp_sendrcv_bufsize =(int)pow(2,(22-(int)(log(armci_nclus)/log(2)))); return; } /*\ Create Sockets for clients and servers \*/ void armci_init_connections() { int i,n,p,master = armci_clus_info[armci_clus_me].master; _armci_buf_init(); /* sockets for communication with data server */ SRV_sock = (int*) malloc(sizeof(int)*armci_nclus); if(!SRV_sock)armci_die("ARMCI cannot allocate SRV_sock",armci_nclus); /* array that will be used to exchange port info */ AR_port = (int*) calloc(armci_nproc * armci_nclus, sizeof(int)); if(!AR_port)armci_die("ARMCI cannot allocate AR_port",armci_nproc*armci_nclus); /* create active sockets list select */ if (!(_armci_active_socks = malloc(sizeof(active_socks_t)))) armci_die("dataserv.c, malloc _armci_active_socks failed",0); for(i=0,n=MAX_BUFS+MAX_SMALL_BUFS;isocks[i]=-1; /* create sockets for communication with each user process */ if(master==armci_me){ CLN_sock = (int*) malloc(sizeof(int)*armci_nproc); if(!CLN_sock)armci_die("ARMCI cannot allocate CLN_sock",armci_nproc); armci_determine_sock_buf_size(); for(p=0; p< armci_nproc; p++){ int off_port = armci_clus_me*armci_nproc; # ifdef SERVER_THREAD if(p >=armci_clus_first && p <= armci_clus_last) CLN_sock[p]=-1; else # endif armci_CreateSocketAndBind(CLN_sock + p, AR_port + p +off_port); } #ifdef SERVER_THREAD /* skip sockets associated with processes on the current node */ if(armci_clus_first>0) armci_ListenSockAll(CLN_sock, armci_clus_first); if(armci_clus_last< armci_nproc-1) armci_ListenSockAll(CLN_sock + armci_clus_last+1, armci_nproc-armci_clus_last-1); #else armci_ListenSockAll(CLN_sock, armci_nproc); #endif } } void armci_wait_for_server() { if(armci_me == armci_master){ #ifndef SERVER_THREAD RestoreSigChldDfl(); armci_serv_quit(); armci_wait_server_process(); #endif } } void armci_client_connect_to_servers() { int stat,c, nall; char str[100]; #ifndef SERVER_THREAD int p; /* master has to close all sockets -- they are used by server PROCESS */ if(armci_master==armci_me)for(p=0; p< armci_nproc; p++){ close(CLN_sock[p]); } #endif /* exchange port numbers with processes in all cluster nodes * save number of messages by using global sum -only masters contribute */ nall = armci_nclus*armci_nproc; armci_msg_igop(AR_port,nall,"+"); /*using port number create socket & connect to data server in each clus node*/ for(c=0; c< armci_nclus; c++){ int off_port = c*armci_nproc; #ifdef SERVER_THREAD /*no intra node socket connection with server thread*/ if(c == armci_clus_me) SRV_sock[c]=-1; else #endif SRV_sock[c] = armci_CreateSocketAndConnect(armci_clus_info[c].hostname, AR_port[off_port + armci_me]); if(DEBUG_ && SRV_sock[c]!=-1){ printf("%d: client connected to %s:%d\n",armci_me, armci_clus_info[c].hostname, AR_port[off_port + armci_me]); fflush(stdout); } } if(DEBUG_){ bzero(str,99); for(c=0; c< armci_nclus; c++)if(SRV_sock[c]!=-1){ stat =armci_ReadFromSocket(SRV_sock[c],str, sizeof(msg)+1); if(stat<0)armci_die("read failed",stat); printf("in client %d message was=%s from%d\n",armci_me,str,c); fflush(stdout); } } free(AR_port); /* we do not need the port numbers anymore */ } /*\ establish connections with compute processes \*/ void armci_server_initial_connection() { #ifdef SERVER_THREAD if(armci_clus_first>0) armci_AcceptSockAll(CLN_sock, armci_clus_first); if(armci_clus_last< armci_nproc-1) armci_AcceptSockAll(CLN_sock + armci_clus_last+1, armci_nproc-armci_clus_last-1); #else armci_AcceptSockAll(CLN_sock, armci_nproc); #endif if(DEBUG_){ int stat, p; printf("%d: server connected to all clients\n",armci_me); fflush(stdout); sleep(1); for(p=0; p #endif extern void exit(int status); #include "tcgmsgP.h" static const long false = 0; static const long true = 1; extern void Busy(int); extern void flush_send_q(void); /* All data movement to/from shared memory is done using the COPY_TO/FROM_SHMEM macros */ #define COPY_TO_LOCAL(src, dest, n, destnode) (void) memcpy(dest, src, n) #define COPY_FROM_LOCAL(src, dest, n) (void)memcpy(dest, src, n) #define COPY_FROM_REMOTE(src,dest,n,p) (void)memcpy(dest, src, n) #define COPY_TO_REMOTE(src,dest,n,p) (void)memcpy(dest, src, n) #ifndef FLUSH_CACHE # define FLUSH_CACHE #endif #ifndef FLUSH_CACHE_LINE # define FLUSH_CACHE_LINE(x) #endif /* #define TCG_ABS(a) (((a) >= 0) ? (a) : (-(a))) */ /** * Return the value of a volatile variable in shared memory * that is REMOTE to this processor */ static long remote_flag(long *p, long node) { long tmp; /* FLUSH_CACHE;*/ /* no need to flush for one word only*/ COPY_FROM_REMOTE(p, &tmp, sizeof(tmp), node); return tmp; } /** * Return the value of a volatile variable in shared memory * that is LOCAL to this processor */ static long local_flag(long *p) { FLUSH_CACHE_LINE(p); return(*p); } /** * Wait for (*p == value) */ static void local_await(long *p, long value) { long pval; long nspin = 0; long spinlim = 100000000; while ((pval = local_flag(p)) != value) { if (pval && (pval != value)) { fprintf(stdout,"%2ld: invalid value=%ld, local_flag=%p %ld\n", TCGMSG_nodeid, (long)value, p, (long)pval); fflush(stdout); exit(1); } nspin++; if((nspin&7)==0)flush_send_q(); if (nspin < spinlim) Busy(100); else usleep(1); } } /** * Entry points to info about a message ... determine which * transport mechanism is appropriate and send as much as * possible without blocking. * * Right now just shared memory ... when sockets are working this * routine will become async_shmem_send. * * Shared-memory protocol aims for low latency. Each process has * one buffer for every other process. Thus, to send a message U * merely have to determine if the receivers buffer for you is empty * and copy directly into the receivers buffer. * * Return 0 if more data is to be sent, 1 if the send is complete. */ long async_send(SendQEntry *entry) { long node = entry->node; ShmemBuf *sendbuf= TCGMSG_proc_info[node].sendbuf; long nleft, ncopy; long pval; long info[4]; #ifdef DEBUG (void) fprintf(stdout,"%2ld: sending to %ld buf=%lx len=%ld\n", TCGMSG_nodeid, node, entry->buf, entry->lenbuf); (void) fprintf(stdout,"%2ld: sendbuf=%lx\n", TCGMSG_nodeid, sendbuf); (void) fflush(stdout); #endif if ((pval = remote_flag(&sendbuf->info[3], node))) { #ifdef DEBUG { long info[4]; FLUSH_CACHE; COPY_FROM_REMOTE(sendbuf->info, info, sizeof(info), node); fprintf(stdout,"%2ld: snd info after full = %ld %ld %ld\n", TCGMSG_nodeid, info[0], info[1], info[2]); fflush(stdout); } sleep(1); #endif return 0; } info[0] = entry->type; info[1] = entry->lenbuf; info[2] = entry->tag; /* Copy over the first buffer load of the message */ nleft = entry->lenbuf - entry->written; ncopy = (long) ((nleft <= SHMEM_BUF_SIZE) ? nleft : SHMEM_BUF_SIZE); if (ncopy&7) { #ifdef DEBUG printf("%2ld: rounding buffer up %ld->%ld\n", TCGMSG_nodeid, ncopy, ncopy + 8 - (ncopy&7)); fflush(stdout); #endif ncopy = ncopy + 8 - (ncopy&7); } if (ncopy) { COPY_TO_REMOTE(entry->buf+entry->written, sendbuf->buf, ncopy, node); } /* NOTE that SHMEM_BUF_SIZE is a multiple of 8 by construction so that this ncopy is only rounded up on the last write */ ncopy = (long) ((nleft <= SHMEM_BUF_SIZE) ? nleft : SHMEM_BUF_SIZE); entry->written += ncopy; entry->buffer_number++; /* Copy over the header information include buffer full flag */ info[3] = entry->buffer_number; COPY_TO_REMOTE(info, sendbuf->info, sizeof(info), node); return (long) (entry->written == entry->lenbuf); } /** * Receive a message of given type from the specified node, returning * the message and length of the message. * * Right now just shared memory ... when sockets are working this * routine will become msg_shmem_rcv * * Shared-memory protocol aims for low latency. Each process has * one buffer for every other process. Thus, to send a message U * merely have to determine if the receivers buffer for you is empty * and copy directly into the receivers buffer. * * Return 0 if more data is to be sent, 1 if the send is complete. */ void msg_rcv(long type, char *buf, long lenbuf, long *lenmes, long node) { long me = TCGMSG_nodeid; ShmemBuf *recvbuf; /* Points to receving buffer */ long nleft; long msg_type, msg_tag, msg_len; long buffer_number = 1; long expected_tag = TCGMSG_proc_info[node].tag_rcv++; if (node<0 || node>=TCGMSG_nnodes) Error("msg_rcv: node is out of range", node); recvbuf = TCGMSG_proc_info[node].recvbuf; /* Wait for first part message to be written */ #ifdef DEBUG (void) fprintf(stdout,"%2ld: receiving from %ld buf=%lx len=%ld\n", me, node, buf, lenbuf); (void) fprintf(stdout,"%2ld: recvbuf=%lx\n", me, recvbuf); (void) fflush(stdout); #endif local_await(&recvbuf->info[3], buffer_number); /* Copy over the header information */ /* FLUSH_CACHE;*/ msg_type = recvbuf->info[0]; msg_len = recvbuf->info[1]; msg_tag = recvbuf->info[2]; /* Check type and size information */ if (msg_tag != expected_tag) { (void) fprintf(stdout, "rcv: me=%ld from=%ld type=%ld, tag=%ld, expectedtag=%ld\n", (long)me, (long)node, (long)type, (long)msg_tag, (long)expected_tag); fflush(stdout); Error("msg_rcv: tag mismatch ... transport layer failed????", 0L); } if (msg_type != type) { (void) fprintf(stdout, "rcv: me=%ld from=%ld type=(%ld != %ld) tag=%ld len=%ld\n", (long)me, (long)node, (long)type, (long)msg_type, (long)msg_tag, (long)msg_len); fflush(stdout); Error("msg_rcv: type mismatch ... strong typing enforced\n", 0L); } if (msg_len > lenbuf) { (void) fprintf(stderr, "rcv: me=%ld from=%ld type=%ld tag=%ld len=(%ld > %ld)\n", (long)me, (long)node, (long)type, (long)msg_tag, (long)msg_len, (long)lenbuf); Error("msg_rcv: message too long for buffer\n", 0L); } nleft = *lenmes = msg_len; if (nleft == 0) { recvbuf->info[3] = false; } while (nleft) { long ncopy = (long) ((nleft <= SHMEM_BUF_SIZE) ? nleft : SHMEM_BUF_SIZE); { long line; if(ncopy < 321) for(line = 0; line < ncopy; line+=32) FLUSH_CACHE_LINE(recvbuf->buf+line); else FLUSH_CACHE; } /* if (buffer_number > 1) FLUSH_CACHE;*/ COPY_FROM_LOCAL(recvbuf->buf, buf, ncopy); recvbuf->info[3] = false; nleft -= ncopy; buf += ncopy; if (nleft) { buffer_number++; local_await(&recvbuf->info[3], buffer_number); } } } long MatchShmMessage(long node, long type) { ShmemBuf *recvbuf; long msg_type; recvbuf = TCGMSG_proc_info[node].recvbuf; if(recvbuf->info[3] == false) return (0); /* no message to receive */ /* we have a message but let's see if want it */ FLUSH_CACHE_LINE(recvbuf->info); COPY_FROM_LOCAL(recvbuf->info, &msg_type, sizeof(long)); if(type == msg_type) return (1); return (0); } ga-5-3/armci/tcgmsg/ipcv5.0/synch.c0000640005473000001440000000027012115161655015631 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "tcgmsgP.h" #include "sndrcv.h" void SYNCH_(long *ptype) { long junk = 0, n = 1; IGOP_(ptype, &junk, &n, "+", 1); } ga-5-3/armci/tcgmsg/ipcv5.0/getmem.c0000640005473000001440000000156511370635737016004 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_MALLOC_H # include #endif #if HAVE_STDLIB_H # include #endif #define getmem_ F77_FUNC(getmem,GETMEM) /** * getmem gets n real*8 storage locations and returns its * address (iaddr) and offset (ioff) within the real*8 array work * so that the usable memory is (work(i+ioff),i=1,n). * e.g. * call getmem(n,work,iaddr,ioff) * if (iaddr.eq.0) call error * * Mods are needed to release this later. */ void getmem_( unsigned long *pn, double *pwork, unsigned long *paddr, unsigned long *pioff) { double *ptemp; unsigned int size = 8; #if HAVE_MEMALIGN ptemp = (double *) memalign(size, (unsigned) size* *pn); #else ptemp = (double *) malloc((unsigned) size* *pn); #endif *paddr = (unsigned long) ptemp; *pioff = ptemp - pwork; } ga-5-3/armci/tcgmsg/ipcv5.0/busy.c0000640005473000001440000000020411272474200015460 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif int fred; void Busy(int n) { fred = 0; while (n-- >= 0) fred++; } ga-5-3/armci/tcgmsg/ipcv5.0/lapi_putget.c0000640005473000001440000002011112115161655017016 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_SIGNAL_H # include #endif #if HAVE_UNISTD_H # include #endif #include #include #include "tcgmsgP.h" lapi_handle_t lapi_handle; lapi_info_t lapi_info; extern ShmemBuf TCGMSG_receive_buffer[]; #define LEN 2 int nxtval_counter=0; int *nxtval_cnt_adr = &nxtval_counter; static lapi_cntr_t req_cnt; #define INCR 1 /* increment for NXTVAL */ #define BUSY -1L /* indicates somebody else updating counter*/ /*#define TRACEINFO 1*/ /** * initialize lapi */ void lapi_initialize() { int myid, numtasks,rc; bzero(&lapi_info,sizeof(lapi_info)); /* needed under Mohonk */ rc = LAPI_Init(&lapi_handle, &lapi_info); if(rc) Error("lapi_init failed",rc); rc=LAPI_Qenv(lapi_handle, TASK_ID, &myid); if(rc) Error("lapi_qenv failed",rc); rc=LAPI_Qenv(lapi_handle, NUM_TASKS, &numtasks); if(rc) Error("lapi_qenv failed 2",rc); TCGMSG_nodeid = (long)myid; TCGMSG_nnodes = (long)numtasks; /* disable LAPI internal error checking */ LAPI_Senv(lapi_handle, ERROR_CHK, 0); rc = LAPI_Setcntr(lapi_handle, &req_cnt, 0); if(rc)Error("lapi_initialize: setcntr failed",rc); #ifdef DEBUG printf("me=%d initialized %d processes\n", myid, numtasks); #endif fflush(stdout); } void lapi_adr_exchg() { long node, tgt; int rc; void **table; int i; table = (void **)malloc(TCGMSG_nnodes * sizeof(void *)); if (!table) Error(" lapi_adr_exchg: malloc failed", 0); /* allocate and initialize send buffers */ sendbuf_arr = (sendbuf_t*)malloc(SENDBUF_NUM*sizeof(sendbuf_t)); if(!sendbuf_arr) Error(" lapi_adr_exchg:malloc 2 failed", 0); /* bzero(sendbuf_arr,SENDBUF_NUM*sizeof(sendbuf_t)); */ for(i=0; i< SENDBUF_NUM; i++){ LAPI_Setcntr(lapi_handle,&sendbuf_arr[i].cntr, 1); sendbuf_arr[i].next = sendbuf_arr+i+1; } sendbuf_arr[SENDBUF_NUM-1].next = sendbuf_arr; localbuf = sendbuf_arr; if(sizeof(ShmemBuf) < sizeof(sendbuf_t)) Error("lapi_adr_exchg: buffer size problem",0); /* exchange addresses */ for(node = 0; node < TCGMSG_nnodes; node++){ /* Lapi does not like NULL address for buffer that we have for sending msg to itself - use some invalid address */ if (node == TCGMSG_nodeid) TCGMSG_proc_info[node].recvbuf = (ShmemBuf *)1; else if(LAPI_Setcntr(lapi_handle, &(TCGMSG_proc_info[node].recvbuf->cntr),0)) Error("lapi_adr_exchg: setcntr failed",-1); rc = LAPI_Address_init(lapi_handle, TCGMSG_proc_info[node].recvbuf, table); if(rc) Error(" lapi_adr_exchg: address_init failed", node); if(rc) Error(" lapi_adr_exchg: cntr init failed", node); if(TCGMSG_nodeid == node) { for(tgt=0; tgt 0 ... returns requested value * mproc < 0 ... server blocks until abs(mproc) processes are queued * and returns junk * mproc = 0 ... indicates to server that I am about to terminate */ long NXTVAL_(long *mproc) { #define INC 1 int local; long stype = INTERNAL_SYNC_TYPE; lapi_cntr_t req_id; int rc, inc = INC; int server = (int)NNODES_() -1; /* id of server process */ if (server>0) { /* parallel execution */ if (DEBUG_) { (void) printf("%2ld: nxtval: mproc=%ld\n",NODEID_(), *mproc); (void) fflush(stdout); } if (*mproc < 0) { SYNCH_(&stype); /* reset the counter value to zero */ if( NODEID_() == server) nxtval_counter = 0; SYNCH_(&stype); } if (*mproc > 0) { /* use atomic swap operation to increment nxtval counter */ rc = LAPI_Setcntr(lapi_handle, &req_id, 0); if(rc)Error("nxtval: setcntr failed",rc); rc = LAPI_Rmw(lapi_handle, FETCH_AND_ADD, server, nxtval_cnt_adr, &inc, &local, &req_id); if(rc)Error("nxtval: rmw failed",rc); rc = LAPI_Waitcntr(lapi_handle, &req_id, 1, NULL); if(rc)Error("nxtval: waitcntr failed",rc); } } else { /* Not running in parallel ... just do a simulation */ static int count = 0; if (*mproc == 1){ int val = count; count+=INCR; local = val; }else if (*mproc == -1) { count = 0; local = 0; } else Error("nxtval: sequential version with silly mproc ", (long) *mproc); } return (long)local; } /** blocking get */ void lapi_get(void* dest, void* src, long bytes, long node) { int rc; #ifdef DEBUG printf("%ld getting %ld bytes from addr=%lx node %ld to adr=%lx\n", TCGMSG_nodeid, bytes, src, node, dest ); fflush(stdout); #endif rc = LAPI_Get(lapi_handle, (uint)node, (uint)bytes, src, dest, NULL,&req_cnt); if(rc)Error("lapi_get: get failed",rc); rc = LAPI_Waitcntr(lapi_handle, &req_cnt, 1, NULL); if(rc)Error("lapi_get: waitcntr failed",rc); } /** put with nonblocking semantics */ void lapi_put(void* dest, void* src, long bytes, long node) { int rc; /* LAPI_Fence(lapi_handle);*/ #ifdef DEBUG printf("%ld puting %ld bytes to addr=%lx node %ld\n", TCGMSG_nodeid, bytes, dest, node); fflush(stdout); #endif #ifdef ERR_CHECKING if(dest < (void*)TCGMSG_receive_buffer){ printf("%ld: Warning: Out of range? %lx(%ld) < %lx\n", TCGMSG_nodeid, dest, node, TCGMSG_receive_buffer); fflush(stdout); } if(dest + bytes > (void*)(TCGMSG_receive_buffer+MAX_PROC) ){ printf("%ld: Warning: Out of range? %lx(%ld) < %lx\n", TCGMSG_nodeid, dest+bytes, node, TCGMSG_receive_buffer+MAX_PROC); fflush(stdout); } #endif rc=LAPI_Put(lapi_handle, (uint)node, (uint)bytes, dest, src,NULL, &req_cnt,NULL); if(rc)Error("lapi_put: sdput failed",rc); rc = LAPI_Waitcntr(lapi_handle, &req_cnt, 1, NULL); if(rc)Error("lapi_put: waitcntr failed",rc); } /** put with nonblocking semantics and counter */ void lapi_put_c(void* dest, void* src, long bytes, long node, lapi_cntr_t* cntr) { int rc; rc = LAPI_Put(lapi_handle, (uint)node, (uint)bytes, dest, src,cntr,NULL,NULL); if(rc)Error("lapi_put_c: put failed",rc); } void PBEGINF_() { PBEGIN_(NULL,NULL); } double fred =0.; void Busy(int n) { while (n-- >= 0) fred++; /* LAPI_Probe(lapi_handle); */ } void SYNCH_(long* type) { int rc; rc=LAPI_Gfence(lapi_handle); if(rc) Error("lapi_gfence failed",rc); } /** Interface from fortran to c error routine */ void PARERR_(long *code) { Error("User detected error in FORTRAN", *code); } ga-5-3/armci/tcgmsg/ipcv5.0/mtime.c0000640005473000001440000000452311300316052015611 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv5.0/mtime.c,v 1.5 2002-03-12 18:59:31 d3h325 Exp $ */ #if HAVE_STDIO_H # include #endif #include "srftoc.h" /** * return wall clock time in centiseconds */ long MTIME_() { double TCGTIME_(); return (long) (TCGTIME_()*100.0); } #if defined(LAPI) && defined(AIX) # define LAPI_AIX #endif #ifndef LAPI_AIX #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_TIME_H # include #endif static unsigned firstsec=0; /* Reference for timer */ static unsigned firstusec=0; /* Reference for timer */ void MtimeReset() /* Sets timer reference */ { struct timeval tp; struct timezone tzp; (void) gettimeofday(&tp,&tzp); firstsec = tp.tv_sec; firstusec = tp.tv_usec; } /** * Return wall clock time in seconds as accurately as possible */ double TCGTIME_() { static int firstcall=1; double low, high; struct timeval tp; struct timezone tzp; if (firstcall) { MtimeReset(); firstcall = 0; } (void) gettimeofday(&tp,&tzp); low = (double) (tp.tv_usec>>1) - (double) (firstusec>>1); high = (double) (tp.tv_sec - firstsec); return high + 1.0e-6*(low+low); } #endif #ifdef LAPI_AIX #if HAVE_SYS_TIME_H # include #endif #if HAVE_SYS_SYSTEMCFG_H # include #endif static int firstsec=0; /* Reference for timer */ static int firstnsec=0; void MtimeReset() /* Sets timer reference */ { timebasestruct_t t; read_real_time(&t, TIMEBASE_SZ); time_base_to_time(&t, TIMEBASE_SZ); firstsec = t.tb_high; firstnsec = t.tb_low; } /** * Return wall clock time in seconds as accurately as possible */ double TCGTIME_() { static int firstcall=1; timebasestruct_t t; int low, high; int secs, nsecs; if (firstcall) { MtimeReset(); firstcall = 0; } read_real_time(&t, TIMEBASE_SZ); time_base_to_time(&t, TIMEBASE_SZ); secs = t.tb_high - firstsec; nsecs = t.tb_low - firstnsec; /* If there was a carry from low-order to high-order during the measurement, we have to undo it */ if(nsecs < 0){ secs--; nsecs+= 1000000000; } return (double)(secs + 1.0e-9*nsecs); } #endif /* LAPI_AIX */ ga-5-3/armci/tcgmsg/ipcv5.0/evlog.h0000640005473000001440000000301211256221513015616 0ustar d3n000users/** @file * Define EVENT and KEY values used when calling evlog. */ #ifndef EVLOG_H_ #define EVLOG_H_ extern void evlog(int farg_key, ...); /* Values of keys in key value pairs */ #define EVKEY_LAST_ARG 0 /**> Terminates list ... takes no value */ #define EVKEY_BEGIN 1 /**> Push (char *) value onto state stack */ #define EVKEY_END 2 /**> Pop (char *) value off state stack */ #define EVKEY_EVENT 3 /**> Record (char *) value, no stack change */ #define EVKEY_MSG_LEN 4 /**> Value is (int) mesage length SND/RCV only */ #define EVKEY_MSG_TO 5 /**> Value is (int) to process id SND/RCV only */ #define EVKEY_MSG_FROM 6 /**> Value is (int) from process SND/RCV only */ #define EVKEY_MSG_TYPE 7 /**> Value is (int) message type SND/RCV only */ #define EVKEY_MSG_SYNC 8 /**> Value is (int) message sync SND/RCV only */ #define EVKEY_STR_INT 9 /**> User data value pair (char *), (int) */ #define EVKEY_STR_DBL 10 /**> User data value pair (char *), (double) */ #define EVKEY_STR 11 /**> User data value (char *) */ #define EVKEY_ENABLE 12 /**> Enable logging ... takes no value */ #define EVKEY_DISABLE 13 /**> Disable logging ... takes no value */ #define EVKEY_DUMP 14 /**> Dump out the current buffer to disk */ #define EVKEY_FILENAME 15 /**> Set the name of the events file */ #define EVENT_SND "Snd" /**> Predefined strings for internal events */ #define EVENT_RCV "Rcv" #define EVENT_PROCESS "Process" #endif /* EVLOG_H_ */ ga-5-3/armci/tcgmsg/ipcv5.0/signals.c0000640005473000001440000000266011272474200016146 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: signals.c,v 1.3 2000-11-14 20:43:56 d3h325 Exp $ */ #if HAVE_SIGNAL_H # include #endif #if HAVE_SYS_WAIT_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #include "tcgmsgP.h" #ifndef SIG_ERR # define SIG_ERR (RETSIGTYPE (*)(int))-1 #endif RETSIGTYPE SigintHandler(int sig) { TCGMSG_caught_sigint = 1L; Error("SigintHandler: signal was caught",0L); } /** * Trap the signal SIGINT so that we can propagate error * conditions and also tidy up shared system resources in a * manner not possible just by killing everyone */ void TrapSigint() { if ( signal(SIGINT, SigintHandler) == SIG_ERR) Error("TrapSigint: error from signal setting SIGINT",(long) SIGINT); } /** * kill -SIGINT all of my beloved children */ void ZapChildren() { long node; for (node=0; node #endif #if HAVE_STDIO_H # include #endif #if HAVE_SIGNAL_H # include #endif #include "sndrcv.h" #include "tcgmsgP.h" extern void perror(const char *); extern void exit(int); extern void ZapChildren(void); #define DEV stderr void Error(char *string, long integer) { (void) signal(SIGINT, SIG_IGN); (void) signal(SIGCHLD, SIG_DFL); /* Death of children to be expected */ (void) fflush(stdout); if (TCGMSG_caught_sigint) { (void) fprintf(DEV,"%2ld: interrupt\n",(long)NODEID_()); } else { (void) fprintf(DEV,"%3ld: %s %ld (%#lx).\n", (long)NODEID_(), string, (long)integer,(long)integer); if (errno != 0) perror("system error message"); } (void) fflush(DEV); /* Shut down the sockets and remove shared memory and semaphores to propagate an error condition to anyone that is trying to communicate with me */ #ifndef LAPI ZapChildren(); /* send interrupt to children which should trap it and call Error in the handler */ DeleteSharedRegion(TCGMSG_shmem_id); #endif exit(1); } /** * Interface from fortran to c error routine */ void PARERR_(long *code) { long lcode = (long)(*code); Error("User detected error in FORTRAN", lcode); } ga-5-3/armci/tcgmsg/ipcv5.0/llog.c0000640005473000001440000000164412115161655015450 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_TIME_H # include #endif #if HAVE_SYS_TIME_H # include #endif #include "sndrcv.h" extern void Error(); /** * close and open stdin and stdout to append to a local logfile * with the name log. in the current directory */ void LLOG_() { char name[12]; time_t t; (void) sprintf(name, "log.%03ld",(long)NODEID_()); (void) fflush(stdout); (void) fflush(stderr); if (freopen(name, "a", stdout) == (FILE *) NULL) { Error("LLOG_: error re-opening stdout", (long) -1); } if (freopen(name, "a", stderr) == (FILE *) NULL) { Error("LLOG_: error re-opening stderr", (long) -1); } (void) time(&t); (void) printf("\n\nLog file opened : %s\n\n",ctime(&t)); (void) fflush(stdout); } ga-5-3/armci/tcgmsg/ipcv5.0/pfilecopy.c0000640005473000001440000001036312115161655016503 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv5.0/pfilecopy.c,v 1.5 2004-04-01 02:23:05 manoj Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_STDLIB_H # include #endif /* extern void free(void *ptr); */ #include "msgtypesc.h" #include "sndrcv.h" #include "tcgmsgP.h" /** * Process node0 has a file (assumed unopened) named fname. * This file will be copied to all other processes which must * simultaneously invoke pfilecopy. Since the processes may be * using the same directory one probably ought to make sure * that each process uses a different name in the call. * * e.g. * * on node 0 pfilecopy(99, 0, 'argosin') * on node 1 pfilecopy(99, 0, 'argosin_001') * on node 2 pfilecopy(99, 0, 'argosin_002') */ void tcgi_pfilecopy(long *type, long *node0, char *filename) { char *buffer; FILE *file; long length, nread=32768, len_nread=sizeof(long); long typenr = (*type & 32767) | MSGINT; /* Force user type integer */ long typebuf =(*type & 32767) | MSGCHR; if (!(buffer = malloc((unsigned) nread))) Error("pfilecopy: failed to allocate the I/O buffer",nread); if (*node0 == NODEID_()) { /* I have the original file ... open and check its size */ if ((file = fopen(filename,"r")) == (FILE *) NULL) { (void) fprintf(stderr,"me=%ld, filename = %s.\n", (long)NODEID_(),filename); Error("pfilecopy: node0 failed to open original file", *node0); } /* Quick sanity check on the length */ (void) fseek(file, 0L, (int) 2); /* Seek to end of file */ length = ftell(file); /* Find the length of file */ (void) fseek(file, 0L, (int) 0); /* Seek to beginning of file */ if ( (length<0) || (length>1e12) ) Error("pfilecopy: the file length is -ve or very big", length); /* Send the file in chunks of nread bytes */ while (nread) { nread = fread(buffer, 1, (int) nread, file); BRDCST_(&typenr, (char *) &nread, &len_nread, node0); typenr++; if (nread) { BRDCST_(&typebuf, buffer, &nread, node0); typebuf++; } } } else { /* Open the file for the duplicate */ if ((file = fopen(filename,"w+")) == (FILE *) NULL) { (void) fprintf(stderr,"me=%ld, filename = %s.\n", (long)NODEID_(),filename); Error("pfilecopy: failed to open duplicate file", *node0); } /* Receive data and write to file */ while (nread) { BRDCST_(&typenr, (char *) &nread, &len_nread, node0); typenr++; if (nread) { BRDCST_(&typebuf, buffer, &nread, node0); typebuf++; if (nread != fwrite(buffer, 1, (int) nread, file)) Error("pfilecopy: error data to duplicate file", nread); } } } /* Tidy up the stuff we have been using */ (void) fflush(file); (void) fclose(file); (void) free(buffer); } /** The original C interface to PFCOPY_. */ void PFILECOPY_(long *type, long *node0, char *filename) { tcgi_pfilecopy(type, node0, filename); } void PFCOPY_(long *type, long *node0, char *fname, int len) { /* Fortran wrapper around pfilecopy */ char *filename; #ifdef DEBUG (void) printf("me=%d, type=%d, node0=%d, fname=%x, fname=%.8s, len=%d\n", NODEID_(), *type, *node0, fname, fname, len); #endif /* Strip trailing blanks off the file name */ while ((len > 0) && (fname[len-1] == ' ')) len--; if (len <= 0) Error("pfcopy_: file name length is toast", (long) len); /* Generate a NULL terminated string */ filename = malloc( (unsigned) (len+1) ); if (filename) { (void) bcopy(fname, filename, len); filename[len] = '\0'; } else Error("PFCOPY_: failed to malloc space for filename", (long) len); /* Now call the C routine to do the work */ tcgi_pfilecopy(type, node0, filename); (void) free(filename); } ga-5-3/armci/tcgmsg/ipcv5.0/shmem.c0000640005473000001440000001342511734647110015625 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * * $Header: /tmp/hpctools/ga/tcgmsg/ipcv5.0/shmem.c,v 1.4 2002-01-24 22:07:27 d3h325 Exp $ * * This stuff attempts to provide a simple interface to temporary shared * memory regions, loosely modelled after that of Alliant Concentrix 5.0 * * * Note that the input arguments switch between integers and pointers * to integers depending on if they are modified on return. * * * Create a shared region of at least size bytes, returning the actual size, * the id associated with the region. The return value is a pointer to the * the region. Any error is a hard fail. * * (char *) CreateSharedRegion((long *) id, (long *) size) * * * Detach a process from a shared memory region. 0 is returned on success, * -1 for failure. id, size, and addr must match exactly those items returned * from CreateSharedRegion * * long DetachSharedRegion((long) id, (long) size, (char *) addr) * * * Delete a shared region from the system. This has to be done on the SUN * to remove it from the system. On the Alliant the shared region disappears * when the last process dies or detaches. Returns 0 on success, -1 on error. * * long DeleteSharedRegion((long) id) * * * Delete all the shared regions associated with this process. * * long DeleteSharedAll() * * * Attach to a shared memory region of known id and size. Returns the * address of the mapped memory. Size must exactly match the size returned * from CreateSharedRegion (which in turn is the requested size rounded * up to a multiple of 4096). Any error is a hard fail. * * (char *) AttachSharedRegion((long) id, (long) size)) */ extern void Error(const char *, long); #if !defined(MMAP) || defined(MACX) #if HAVE_STDIO_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_IPC_H # include #endif #if HAVE_SYS_SHM_H # include #endif #ifdef SUN extern int shmget(key_t, int, int); extern int shmdt(void *); extern int shmctl(int, int, struct shmid_ds *); extern void *shmat(int, const void *, int); #endif char *CreateSharedRegion(long *id, long *size) { char *temp; /* Create the region */ if ( (*id = shmget(IPC_PRIVATE, (int) *size, (int) (IPC_CREAT | 00600))) < 0 ) Error("CreateSharedRegion: failed to create shared region", (long) *id); /* Attach to the region */ if ( (long) (temp = shmat((int) *id, (char *) NULL, 0)) == -1L) Error("CreateSharedRegion: failed to attach to shared region", 0L); return temp; } long DetachSharedRegion(long id, long size, char *addr) { return shmdt(addr); } long DeleteSharedRegion(long id) { return shmctl((int) id, IPC_RMID, (struct shmid_ds *) NULL); } char *AttachSharedRegion(long id, long size) { char *temp; if ( (long) (temp = shmat((int) id, (char *) NULL, 0)) == -1L) Error("AttachSharedRegion: failed to attach to shared region", 0L); return temp; } #else /* MMAP */ #if HAVE_STDIO_H # include #endif #if HAVE_SYS_TIME_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_FILE_H # include #endif #if HAVE_SYS_MMAN_H # include #endif extern char *strdup(); extern char *mktemp(); #define MAX_ID 20 static struct id_list_struct { char *addr; /* pointer to shmem region */ unsigned size; /* size of region */ char *filename; /* associated file name */ int fd; /* file descriptor */ int status; /* = 1 if in use */ } id_list[MAX_ID]; static int next_id = 0; static char template[] = "/tmp/SHMEM.XXXXXX"; char *CreateSharedRegion(id, size) long *size, *id; { char *temp; if (next_id == MAX_ID) Error("CreateSharedRegion: MAX_ID exceeded ", MAX_ID); *id = next_id; if ( (temp = strdup(template)) == (char *) NULL) Error("CreateSharedRegion: failed to get space for filename", 0); /* Generate scratch file to identify region ... need to know this name to attach to the region so need to establish some policy before AttachtoSharedRegion can work */ id_list[*id].filename = mktemp(temp); if ( (id_list[*id].fd = open(id_list[*id].filename, O_RDWR|O_CREAT, 0666)) < 0) Error("CreateSharedRegion: failed to open temporary file",0); id_list[*id].addr = mmap((caddr_t) 0, (size_t)*size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, id_list[*id].fd, 0); if (id_list[*id].addr == (char *) -1) Error("CreateSharedRegion: mmap failed",-1); id_list[*id].size = *size; id_list[*id].status = 1; next_id++; return id_list[*id].addr; } long DetachSharedRegion(long id, long size, char *addr) { if ( (id < 0) || (id > next_id)) return (long) -1; if (id_list[id].status != 1) return (long) -1; id_list[id].status = 0; return (long) munmap(id_list[id].addr, 0); } long DeleteSharedRegion(long id) { if ( (id < 0) || (id > next_id) ) return (long) -1; if (id_list[id].status != 1) return (long) -1; (void) DetachSharedRegion(id, 0, (char *) 0); if (id_list[id].fd >= 0) { (void) close(id_list[id].fd); (void) unlink(id_list[id].filename); } return (long) 0; } char *AttachSharedRegion(long id, long size) { Error("AttachSharedRegion: need mods for this to work on CONVEX", (long) -1); } long DeleteSharedAll() { long id; long status = 0; for (id=0; id #endif #include "tcgmsgP.h" /** * Wrapper around nice for FORTRAN users courtesy of Rick Kendall * ... C has the system interface. */ long NICEFTN_(long *ival) { int val = (int)(*ival); return nice(val); } ga-5-3/armci/tcgmsg/ipcv5.0/globalop.c0000640005473000001440000001270612115161655016313 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "srftoc.h" #include "tcgmsgP.h" #define BUF_SIZE 10000 #define IBUF_SIZE (BUF_SIZE * sizeof(double)/sizeof(long)) double _gops_work[BUF_SIZE]; long one=1; #define TCG_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define TCG_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define TCG_ABS(a) (((a) >= 0) ? (a) : (-(a))) void BRDCST_(long *type, void *buf, long *len, long *originator) { long me=NODEID_(), nproc=NNODES_(), lenmes, from, root=0; long up, left, right; /* determine location in the binary tree */ up = (me-1)/2; if(up >= nproc) up = -1; left = 2* me + 1; if(left >= nproc) left = -1; right = 2* me + 2; if(right >= nproc) right = -1; /* originator sends data to root */ if (*originator != root ){ if(me == *originator) SND_(type, buf, len, &root, &one); if(me == root) RCV_(type, buf, len, &lenmes, originator, &from, &one); } if (me != root) RCV_(type, buf, len, &lenmes, &up, &from, &one); if (left > -1) SND_(type, buf, len, &left, &one); if (right > -1) SND_(type, buf, len, &right, &one); } /** * implements x = op(x,work) for integer datatype * x[n], work[n] - arrays of n integers */ static void idoop(long n, char *op, long *x, long *work) { if (strncmp(op,"+",1) == 0) while(n--) *x++ += *work++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ *= *work++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = TCG_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = TCG_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register long x1 = TCG_ABS(*x), x2 = TCG_ABS(*work); *x = TCG_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register long x1 = TCG_ABS(*x), x2 = TCG_ABS(*work); *x = TCG_MIN(x1, x2); x++; work++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x |= *work; x++; work++; } else Error("idoop: unknown operation requested", (long) n); } /** * implements x = op(x,work) for double datatype * x[n], work[n] - arrays of n doubles */ static void ddoop(long n, char *op, double *x, double *work) { if (strncmp(op,"+",1) == 0) while(n--) *x++ += *work++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ *= *work++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = TCG_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = TCG_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register double x1 = TCG_ABS(*x), x2 = TCG_ABS(*work); *x = TCG_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register double x1 = TCG_ABS(*x), x2 = TCG_ABS(*work); *x = TCG_MIN(x1, x2); x++; work++; } else Error("ddoop: unknown operation requested", (long) n); } void DGOP_( long *type, double *x, long *n, char *op, int oplen) { long me=NODEID_(), nproc=NNODES_(), len, lenmes, from, root=0; double *work = _gops_work, *origx = x; long ndo, up, left, right, np=*n, orign = *n; /* determine location in the binary tree */ up = (me-1)/2; if(up >= nproc) up = -1; left = 2* me + 1; if(left >= nproc) left = -1; right = 2* me + 2; if(right >= nproc) right = -1; while ((ndo = (np <= BUF_SIZE) ? np : BUF_SIZE)) { len = lenmes = ndo*sizeof(double); if (left > -1) { RCV_(type, (char *) work, &len, &lenmes, &left, &from, &one); ddoop(ndo, op, x, work); } if (right > -1) { RCV_(type, (char *) work, &len, &lenmes, &right, &from, &one); ddoop(ndo, op, x, work); } if (me != root) SND_(type, x, &len, &up, &one); np -=ndo; x +=ndo; } /* Now, root broadcasts the result down the binary tree */ len = orign*sizeof(double); BRDCST_(type, (char *) origx, &len, &root); } void IGOP_(long *type, long *x, long *n, char *op, int oplen) { long me=NODEID_(), nproc=NNODES_(), len, lenmes, from, root=0; long *work = (long*)_gops_work; long *origx = x; long ndo, up, left, right, np=*n, orign =*n; /* determine location in the binary tree */ up = (me-1)/2; if(up >= nproc) up = -1; left = 2* me + 1; if(left >= nproc) left = -1; right = 2* me + 2; if(right >= nproc) right = -1; while ((ndo = (np<=IBUF_SIZE) ? np : IBUF_SIZE)) { len = lenmes = ndo*sizeof(long); if (left > -1) { RCV_(type, (char *) work, &len, &lenmes, &left, &from, &one); idoop(ndo, op, x, work); } if (right > -1) { RCV_(type, (char *) work, &len, &lenmes, &right, &from, &one); idoop(ndo, op, x, work); } if (me != root) SND_(type, x, &len, &up, &one); np -=ndo; x +=ndo; } /* Now, root broadcasts the result down the binary tree */ len = orign*sizeof(long); BRDCST_(type, (char *) origx, &len, &root); } ga-5-3/armci/tcgmsg/ipcv5.0/copyall.c0000640005473000001440000001200111272474200016137 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_MEMORY_H # include #endif /** * A copy optimized for DESTINATIONS in shared memory that * are aligned and data is to be read by other processes. * * Both prefetch and poststore the destination. */ void copyto(const unsigned char *src, unsigned char *dest, long n) { if (n < 32 || (dest - src) & 7) { /* small n, or not possible to get src and dest even word aligned */ while (n--) *dest++ = *src++; /* memcpy(dest, src, (size_t) n); */ return; } /* Read ahead so that dest is aligned on a page boundary */ { register long nbytes = (127 & (unsigned long) dest); if (nbytes > 0) nbytes = 128 - nbytes; if (nbytes > n) nbytes = n; n -= nbytes; while (nbytes--) *dest++ = *src++; if (n == 0) return; } { /* src is at least word aligned and dest is subpage aligned */ register long npage = n>>7; register const unsigned long *from = (unsigned long *) src; register unsigned long *to = (unsigned long *) dest; register unsigned long a, b, c, d, e, f, g, h; src += npage<<7; dest += npage<<7; n -= npage<<7; /* _pcsp(to+16, "ex", "nbl"); _pcsp(to+32, "ex", "nbl"); _pcsp(to+48, "ex", "nbl"); */ while (npage--) { /* _pcsp(to+64, "ex", "nbl"); */ a = from[0]; b = from[1]; c = from[2]; d = from[3]; e = from[4]; f = from[5]; g = from[6]; h = from[7]; to[0] = a; to[1] = b; to[2] = c; to[3] = d; to[4] = e; to[5] = f; to[6] = g; to[7] = h; a = from[8]; b = from[9]; c = from[10]; d = from[11]; e = from[12]; f = from[13]; g = from[14]; h = from[15]; to[8] = a; to[9] = b; to[10] = c; to[11] = d; to[12] = e; to[13] = f; to[14] = g; to[15] = h; /* _pstsp((char *) to); */ to += 16; from+= 16; } } { register long nbytes = n; register const unsigned char *from = (unsigned char *) src; register unsigned char *to = (unsigned char *) dest; while (nbytes--) *to++ = *from++; } } /** * A copy optimized for SOURCES in shared memory that * are aligned. * * Prefetch sources only. */ void copyfrom(const unsigned char *src, unsigned char *dest, long n) { if (n < 32 || (dest - src) & 7) { /* small n, or not possible to get src and dest even word aligned */ while (n--) *dest++ = *src++; /* memcpy(dest, src, (size_t) n);*/ return; } /* Read ahead so that src is aligned on a page boundary */ { register long nbytes = (127 & (unsigned long) src); if (nbytes > 0) nbytes = 128 - nbytes; if (nbytes > n) nbytes = n; n -= nbytes; while (nbytes--) *dest++ = *src++; if (n == 0) return; } { /* dest is at least word aligned and src is subpage aligned */ register long npage = n>>7; register const unsigned long *from = (unsigned long *) src; register unsigned long *to = (unsigned long *) dest; register unsigned long a, b, c, d, e, f, g, h; src += npage<<7; dest += npage<<7; n -= npage<<7; /* _pcsp(from+16, "ro", "nbl"); _pcsp(from+32, "ro", "nbl"); _pcsp(from+48, "ro", "nbl"); */ while (npage--) { /* _pcsp(from+64, "ro", "nbl"); */ a = from[0]; b = from[1]; c = from[2]; d = from[3]; e = from[4]; f = from[5]; g = from[6]; h = from[7]; to[0] = a; to[1] = b; to[2] = c; to[3] = d; to[4] = e; to[5] = f; to[6] = g; to[7] = h; a = from[8]; b = from[9]; c = from[10]; d = from[11]; e = from[12]; f = from[13]; g = from[14]; h = from[15]; to[8] = a; to[9] = b; to[10] = c; to[11] = d; to[12] = e; to[13] = f; to[14] = g; to[15] = h; /* _pstsp((char *) to); */ to += 16; from+= 16; } } { register long nbytes = n; register const unsigned char *from = (unsigned char *) src; register unsigned char *to = (unsigned char *) dest; while (nbytes--) *to++ = *from++; } } ga-5-3/armci/tcgmsg/ipcv5.0/mitod.c0000640005473000001440000000122212115161655015617 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * * $Header: /tmp/hpctools/ga/tcgmsg/ipcv5.0/mitod.c,v 1.1 1997-03-05 18:42:31 d3e129 Exp $ * * These routines use C's knowledge of the sizes of data types * to generate a portable mechanism for FORTRAN to translate * between bytes, integers and doubles. Note that we assume that * FORTRAN integers are the same size as C longs. */ #include "sndrcv.h" /** * Return the minimum no. of doubles in which we can store n longs */ long MITOD_(long *n) { if (*n < 0) Error("MITOD_: negative argument",*n); return (long) ( (MITOB_(n) + sizeof(double) - 1) / sizeof(double) ); } ga-5-3/armci/tcgmsg/ipcv5.0/mdtob.c0000640005473000001440000000113412115161655015612 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * $Header: /tmp/hpctools/ga/tcgmsg/ipcv5.0/mdtob.c,v 1.2 1994-12-30 20:55:49 d3h325 Exp $ * * These routines use C's knowledge of the sizes of data types * to generate a portable mechanism for FORTRAN to translate * between bytes, integers and doubles. Note that we assume that * FORTRAN integers are the same size as C longs. */ #include "sndrcv.h" /** * Return the no. of bytes that n doubles occupy */ long MDTOB_(long *n) { if (*n < 0) Error("MDTOB_: negative argument",*n); return (long) (*n * sizeof(double)); } ga-5-3/armci/tcgmsg/ipcv5.0/waitall.c0000640005473000001440000000277711272474200016154 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $$ */ #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_WAIT_H # include #endif #if HAVE_STDIO_H # include #endif #include "sndrcv.h" /** * Wait for all children to finish and return appropriate status * 0 = OK * 1 = bad news */ int WaitAll(long nchild) { int status, pid, child, stat=0, lo, hi; for (child=0; child> 8) & 0xff; if ( lo == 0177 ) (void) fprintf(stderr, "(stopped by signal %d).\n", hi); else if ( (lo != 0) && (lo & 0200) ) (void) fprintf(stderr, "(killed by signal %d, dumped core).\n", lo & 0100); else if ( lo != 0 ) (void) fprintf(stderr, "(killed by signal %d).\n",lo); else (void) fprintf(stderr, "(exited with code %d).\n",hi); (void) fflush(stderr); stat = 1; } } return stat; } ga-5-3/armci/tcgmsg/ipcv5.0/pbegin.c0000640005473000001440000001301212115161655015747 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_STDLIB_H # include #endif /* extern long atol(const char *nptr); */ /* extern void exit(int status); */ /* Define PBEGIN_C so that global variables in tcgmsgP.h are defined here and declared extern everywhere else ... SGI linker is a whiner */ #define PBEGIN_C #include "tcgmsgP.h" #ifdef LAPI ShmemBuf TCGMSG_receive_buffer[MAX_PROC]; void lapi_initialize(); #endif extern void TrapSigint(void); extern void TrapSigchld(void); extern int WaitAll(long); static int SR_initialized=0; long TCGREADY_() { return (long)SR_initialized; } /* Define what was externally declared in tcgmsgP.h */ long TCGMSG_nodeid; long TCGMSG_nnodes; long DEBUG_=0; /* debug flag ... see setdbg */ long TCGMSG_nodeid; long TCGMSG_nnodes; char* TCGMSG_shmem; long TCGMSG_shmem_id; long TCGMSG_shmem_size; long TCGMSG_caught_sigint; ProcInfo* TCGMSG_proc_info; SendQEntry* TCGMSG_sendq_ring; /** * shared-memory version of TCGMSG */ void tcgi_pbegin(int argc, char **argv) { long arg, node, i, max_n_msg; TCGMSG_nodeid = 0; TCGMSG_nnodes = 1; /* By default just sequential */ if(SR_initialized)Error("TCGMSG initialized already???",-1); else SR_initialized=1; #ifdef LAPI lapi_initialize(); #else /* LAPI */ for (arg=1; arg<(argc-1); arg++) if (strcmp(argv[arg],"-np") == 0) { TCGMSG_nnodes = atol(argv[arg+1]); break; } #endif /* LAPI */ if (TCGMSG_nnodes > MAX_PROC){ if(NODEID_()){ sleep(1); return; } fprintf(stderr,"\nTCGMSG has been configured for up to %d processes\n", MAX_PROC); fprintf(stderr,"Please change MAX_PROC in `tcgmsgP.h` and recompile\n\n"); sleep(1); Error("aborting ... ",0); } if (TCGMSG_nnodes == 1) { return; }; /* Set up handler for SIGINT and SIGCHLD */ #ifndef LAPI TrapSigint(); TrapSigchld(); #endif /* Allocate the process info structures */ if (!(TCGMSG_proc_info = (ProcInfo *) malloc((size_t) (TCGMSG_nnodes*sizeof(ProcInfo))))) Error("pbegin: failed to malloc procinfo", (long) (TCGMSG_nnodes*sizeof(ProcInfo))); bzero((char *) TCGMSG_proc_info, (int) (TCGMSG_nnodes*sizeof(ProcInfo))); /* Allocate a ring of message q entries to avoid having a malloc/free pair for every message sent */ max_n_msg = 2*TCGMSG_nnodes; if (max_n_msg < MAX_N_OUTSTANDING_MSG) max_n_msg = MAX_N_OUTSTANDING_MSG; if (!(TCGMSG_sendq_ring = (SendQEntry *) malloc((size_t) (max_n_msg*sizeof(SendQEntry))))) Error("pegin: failed to malloc entries for send q", 0L); for (i=0; i 1) { int status; int rc; status = WaitAll(TCGMSG_nnodes-1); /* Wait for demise of children */ rc=DeleteSharedRegion(TCGMSG_shmem_id); if(rc)printf("DeleteSharedMem returned %d\n",rc); if (status) exit(1); } #endif } ga-5-3/armci/tcgmsg/ipcv5.0/misc.c0000640005473000001440000000062712115161655015446 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #include "srftoc.h" #include "tcgmsgP.h" /** * Define value of debug flag */ void SETDBG_(long *onoff) { DEBUG_ = *onoff; } /** * Print out statistics for communications ... not yet implemented */ void STATS_() { (void) fprintf(stderr,"STATS_ not yet supported\n"); (void) fflush(stderr); } ga-5-3/armci/tcgmsg/ipcv5.0/pbeginf.c0000640005473000001440000000074412115161655016125 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #include "srftoc.h" #include "sndrcv.h" /** * Hewlett Packard Risc box and new SparcWorks F77 2.* compilers. * Have to construct the argument list by calling FORTRAN. */ void PBEGINF_() { } /** * Alternative entry for those senstive to FORTRAN making reference * to 7 character external names */ void PBGINF_() { PBEGINF_(); } ga-5-3/armci/tcgmsg/ipcv5.0/usleep.c0000640005473000001440000000214612115161655016006 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv5.0/usleep.c,v 1.4 1997-11-07 23:44:20 d3h325 Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_SYS_SELECT_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_TIME_H # include #endif #include "tcgmsgP.h" #ifdef STUPIDUSLEEP void USleep(long us) { int s = us/1000000; if (s == 0) s = 1; (void) sleep(s); } #else /* STUPIDUSLEEP */ /** * Sleep for the specified no. of micro-seconds ... uses the timeout * on select ... it seems to be accurate to about a few centiseconds * on a sun. I don't know how much system resources it eats. */ void USleep(long us) { int width=0; struct timeval timelimit; /* printf("%2ld: sleeping for %ldus\n", TCGMSG_nodeid, us); fflush(stdout);*/ timelimit.tv_sec = (int) (us/1000000); timelimit.tv_usec = (int) (us - timelimit.tv_sec*1000000); (void) select(width, (fd_set *) 0, (fd_set *) 0, (fd_set *) 0, &timelimit); } #endif /* STUPIDUSLEEP */ ga-5-3/armci/tcgmsg/ipcv5.0/copyall.save.c0000640005473000001440000001161411272474200017105 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_MEMORY_H # include #endif /** * A copy optimized for DESTINATIONS in shared memory that * are aligned and data is to be read by other processes. * * Both prefetch and poststore the destination. */ void copyto(const unsigned char *src, unsigned char *dest, long n) { if (n < 128 || (dest - src) & 7) { /* small n, or not possible to get src and dest even word aligned */ memcpy(dest, src, (size_t) n); return; } /* Read ahead so that dest is aligned on a page boundary */ { register long nbytes = (127 & (unsigned long) dest); if (nbytes > 0) nbytes = 128 - nbytes; if (nbytes > n) nbytes = n; n -= nbytes; while (nbytes--) *dest++ = *src++; if (n == 0) return; } { /* src is at least word aligned and dest is subpage aligned */ register long npage = n>>7; register const unsigned long *from = (unsigned long *) src; register unsigned long *to = (unsigned long *) dest; register unsigned long a, b, c, d, e, f, g, h; src += npage<<7; dest += npage<<7; n -= npage<<7; /* _pcsp(to+16, "ex", "nbl"); _pcsp(to+32, "ex", "nbl"); _pcsp(to+48, "ex", "nbl"); */ while (npage--) { /* _pcsp(to+64, "ex", "nbl"); */ a = from[0]; b = from[1]; c = from[2]; d = from[3]; e = from[4]; f = from[5]; g = from[6]; h = from[7]; to[0] = a; to[1] = b; to[2] = c; to[3] = d; to[4] = e; to[5] = f; to[6] = g; to[7] = h; a = from[8]; b = from[9]; c = from[10]; d = from[11]; e = from[12]; f = from[13]; g = from[14]; h = from[15]; to[8] = a; to[9] = b; to[10] = c; to[11] = d; to[12] = e; to[13] = f; to[14] = g; to[15] = h; /* _pstsp((char *) to); */ to += 16; from+= 16; } } { register long nbytes = n; register const unsigned char *from = (unsigned char *) src; register unsigned char *to = (unsigned char *) dest; while (nbytes--) *to++ = *from++; } } /** * A copy optimized for SOURCES in shared memory that are aligned. * * Prefetch sources only. */ void copyfrom(const unsigned char *src, unsigned char *dest, long n) { if (n < 128 || (dest - src) & 7) { /* small n, or not possible to get src and dest even word aligned */ memcpy(dest, src, (size_t) n); return; } /* Read ahead so that src is aligned on a page boundary */ { register long nbytes = (127 & (unsigned long) src); if (nbytes > 0) nbytes = 128 - nbytes; if (nbytes > n) nbytes = n; n -= nbytes; while (nbytes--) *dest++ = *src++; if (n == 0) return; } { /* dest is at least word aligned and src is subpage aligned */ register long npage = n>>7; register const unsigned long *from = (unsigned long *) src; register unsigned long *to = (unsigned long *) dest; register unsigned long a, b, c, d, e, f, g, h; src += npage<<7; dest += npage<<7; n -= npage<<7; /* _pcsp(from+16, "ro", "nbl"); _pcsp(from+32, "ro", "nbl"); _pcsp(from+48, "ro", "nbl"); */ while (npage--) { /* _pcsp(from+64, "ro", "nbl"); */ a = from[0]; b = from[1]; c = from[2]; d = from[3]; e = from[4]; f = from[5]; g = from[6]; h = from[7]; to[0] = a; to[1] = b; to[2] = c; to[3] = d; to[4] = e; to[5] = f; to[6] = g; to[7] = h; a = from[8]; b = from[9]; c = from[10]; d = from[11]; e = from[12]; f = from[13]; g = from[14]; h = from[15]; to[8] = a; to[9] = b; to[10] = c; to[11] = d; to[12] = e; to[13] = f; to[14] = g; to[15] = h; /* _pstsp((char *) to); */ to += 16; from+= 16; } } { register long nbytes = n; register const unsigned char *from = (unsigned char *) src; register unsigned char *to = (unsigned char *) dest; while (nbytes--) *to++ = *from++; } } ga-5-3/armci/tcgmsg/ipcv5.0/copyall.ksr.s0000640005473000001440000002313105700456743016776 0ustar d3n000users .file "/home/d3g681/tcgmsg/ipcv4.0/" .file "copyall.c" .vstamp 7 # KSR1 ccom -OLM -X28 -X92 -X115 -X151 -X153 -X155 -X156 -X157 -X158 -X159 # -X172 -X187 # ccom: version 1.1.1. built Sun Dec 26 22:03:57 1993. .text .data .def copyto$TXT; .val copyto$TXT; .scl 2; .endef .text .def copyto; .val copyto; .scl 2; .type 513; .endef copyto$TXT: finop ; cxnop finop ; cxnop .def .bf; .val .; .scl 101; .line 11; .endef mov8_8 %i3, %i9 ; ssub8.ntr 0, %sp, 128, %sp itstle8 128, %i4 ; movb8_8 %i2, %c8 add8.ntr 10, %i31, %i31 ; st8 %i13, 80(%sp) mov8_8 %i4, %i13 ; st8 %cp, 112(%sp) finop ; st8 %fp, 120(%sp) finop ; mov8_8 %c10, %cp finop ; sadd8.ntr 0, %sp, 128, %fp finop ; bcc.qn @citst, .L2 finop ; st8 %c14, 104(%sp) finop ; st8 %i12, 88(%sp) clrh8 7, %i9, %i5 ; movb8_8 %c8, %i1 sub8.ntr 128, %i5, %i2 ; cxnop add8.ntr 7, %i31, %i31 ; cxnop sub8.ntr %i9, %i1, %i1 ; cxnop clrh8 3, %i1, %i1 ; cxnop itsteq8 0, %i1 ; cxnop itstge8 0, %i5 ; bcs.qt @citst, .L10 .L2: mov8_8 %i13, %i4 ; ld8 16(%cp), %c6 mov8_8 %i9, %i2 ; movb8_8 %c8, %i3 add8.ntr 4, %i31, %i31 ; ld8 8(%cp), %c10 finop ; jsr %c14, 16(%c6) finop ; cxnop finop ; cxnop movi8 3, %i0 ; movi8 0, %c8 .ln 7, .-32 # 17 add8.ntr 8, %i31, %i31 ; ld8 104(%sp), %c14 finop ; ld8 112(%sp), %cp finop ; ld8 120(%sp), %fp finop ; ld8 88(%sp), %i12 finop ; ld8 80(%sp), %i13 finop ; jmp 32(%c14) finop ; sadd8.ntr 0, %sp, 128, %sp finop ; cxnop .L10: selsc8 %i5, %i2, %i5 ; cxnop itstle8 %i5, %i13 ; cxnop selsc8 %i5, %i13, %i5 ; cxnop sub8.ntr %i13, %i5, %i13 ; cxnop itsteq8 0, %i5 ; cxnop sub8.ntr %i5, 1, %i5 ; bcs.qt @citst, .L8 .L9: add8.ntr 1, %i9, %i9 ; movb8_8 %i9, %c4 itsteq8 0, %i5 ; ld1 0(%c8), %i10 sub8.ntr %i5, 1, %i5 ; bcc.qn @citst, .L9 add8.ntr 3, %i31, %i31 ; sadd8.ntr 0, %c8, 1, %c8 finop ; st1 %i10, -1(%c4) .L8: itstne8 0, %i13 ; movb8_8 %i9, %c7 ash8.ntr -7, %i13, %i10 ; bcc.qt @citst, .L1 ash8.ntr 7, %i10, %i0 ; movb8_8 %i0, %c5 add8.ntr %i9, %i0, %i9 ; mov8_8 %c8, %c6 finop ; pcsp.ex.bl 128(%c7) finop ; pcsp.ex.bl 256(%c7) finop ; pcsp.ex.bl 384(%c7) itsteq8 0, %i10 ; movb8_8 %i9, %c9 sub8.ntr %i13, %i0, %i13 ; sadd8.ntr 0, %c5, %c8, %c8 sub8.ntr %i10, 1, %i10 ; bcs.qt @citst, .L5 .L6: finop ; pcsp.ex.bl 512(%c7) itsteq8 0, %i10 ; ld8.ro 0(%c6), %i11 sub8.ntr %i10, 1, %i10 ; ld8.ro 8(%c6), %i0 add8.ntr 33, %i31, %i31 ; ld8.ro 16(%c6), %i1 finop ; ld8.ro 24(%c6), %i2 finop ; ld8.ro 32(%c6), %i3 finop ; ld8.ro 40(%c6), %i4 finop ; ld8.ro 48(%c6), %i5 finop ; ld8.ro 56(%c6), %i12 finop ; sadd8.ntr 0, %c7, 128, %c7 finop ; st8 %i11, -128(%c7) finop ; st8 %i0, -120(%c7) finop ; st8 %i1, -112(%c7) finop ; st8 %i2, -104(%c7) finop ; st8 %i3, -96(%c7) finop ; st8 %i4, -88(%c7) finop ; st8 %i5, -80(%c7) finop ; st8 %i12, -72(%c7) finop ; ld8.ro 120(%c6), %i12 finop ; ld8.ro 112(%c6), %i5 finop ; ld8.ro 104(%c6), %i4 finop ; ld8.ro 96(%c6), %i3 finop ; ld8.ro 88(%c6), %i2 finop ; ld8.ro 80(%c6), %i1 finop ; ld8.ro 72(%c6), %i0 finop ; ld8.ro 64(%c6), %i11 finop ; st8 %i1, -48(%c7) finop ; st8 %i2, -40(%c7) finop ; st8 %i0, -56(%c7) finop ; st8 %i11, -64(%c7) finop ; st8 %i3, -32(%c7) finop ; st8 %i4, -24(%c7) finop ; st8 %i5, -16(%c7) finop ; bcc.qn @citst, .L6 finop ; st8 %i12, -8(%c7) finop ; sadd8.ntr 0, %c6, 128, %c6 # finop ; pstsp 0(%c7) .L5: itsteq8 0, %i13 ; cxnop sub8.ntr %i13, 1, %i4 ; bcs.qt @citst, .L1 .L4: itsteq8 0, %i4 ; ld1 0(%c8), %i11 sub8.ntr %i4, 1, %i4 ; sadd8.ntr 0, %c9, 1, %c9 add8.ntr 3, %i31, %i31 ; bcc.qn @citst, .L4 finop ; sadd8.ntr 0, %c8, 1, %c8 finop ; st1 %i11, -1(%c9) .L1: add8.ntr 8, %i31, %i31 ; ld8 104(%sp), %c14 finop ; ld8 112(%sp), %cp finop ; ld8 120(%sp), %fp finop ; ld8 88(%sp), %i12 finop ; ld8 80(%sp), %i13 finop ; jmp 32(%c14) finop ; sadd8.ntr 0, %sp, 128, %sp finop ; cxnop .def .ef; .val .; .scl 101; .line 93; .endef .def copyto; .scl -1; .endef .data # nbytes %i5 local # npage %i10 local # from %c6 local # to %c7 local # a %i11 local # b %i0 local # c %i1 local # d %i2 local # e %i3 local # f %i4 local # g %i5 local # h %i12 local # nbytes %i4 local # from %c8 local # to %c9 local .half 0x0, 0x0, 0x60003000, 0x5800 .L21: copyto: .word copyto$TXT .word memcpy .word memcpy$TXT # src %c8 local # dest %i9 local # n %i13 local .text .data .def copyfrom$TXT; .val copyfrom$TXT; .scl 2; .endef .text .def copyfrom; .val copyfrom; .scl 2; .type 513; .endef copyfrom$TXT: finop ; cxnop finop ; cxnop .def .bf; .val .; .scl 101; .line 112; .endef itstle8 128, %i4 ; ssub8.ntr 0, %sp, 128, %sp add8.ntr 10, %i31, %i31 ; movb8_8 %i3, %c8 finop ; st8 %i13, 80(%sp) mov8_8 %i4, %i13 ; st8 %cp, 112(%sp) finop ; st8 %fp, 120(%sp) finop ; mov8_8 %c10, %cp finop ; sadd8.ntr 0, %sp, 128, %fp finop ; bcc.qn @citst, .L25 finop ; st8 %c14, 104(%sp) finop ; st8 %i12, 88(%sp) clrh8 7, %i2, %i5 ; movb8_8 %c8, %i0 sub8.ntr 128, %i5, %i1 ; cxnop add8.ntr 7, %i31, %i31 ; cxnop sub8.ntr %i0, %i2, %i0 ; cxnop clrh8 3, %i0, %i0 ; cxnop itsteq8 0, %i0 ; cxnop itstge8 0, %i5 ; bcs.qt @citst, .L33 .L25: mov8_8 %i2, %i3 ; ld8 16(%cp), %c6 mov8_8 %i13, %i4 ; movb8_8 %c8, %i2 add8.ntr 4, %i31, %i31 ; ld8 8(%cp), %c10 finop ; jsr %c14, 16(%c6) finop ; cxnop finop ; cxnop movi8 3, %i0 ; movi8 0, %c8 .ln 7, .-32 # 118 add8.ntr 8, %i31, %i31 ; ld8 104(%sp), %c14 finop ; ld8 112(%sp), %cp finop ; ld8 120(%sp), %fp finop ; ld8 88(%sp), %i12 finop ; ld8 80(%sp), %i13 finop ; jmp 32(%c14) finop ; sadd8.ntr 0, %sp, 128, %sp finop ; cxnop .L33: selsc8 %i5, %i1, %i5 ; cxnop itstle8 %i5, %i13 ; cxnop selsc8 %i5, %i13, %i5 ; cxnop sub8.ntr %i13, %i5, %i13 ; cxnop itsteq8 0, %i5 ; cxnop sub8.ntr %i5, 1, %i5 ; bcs.qt @citst, .L31 .L32: add8.ntr 1, %i2, %i2 ; movb8_8 %i2, %c4 itsteq8 0, %i5 ; sadd8.ntr 0, %c8, 1, %c8 sub8.ntr %i5, 1, %i5 ; cxnop add8.ntr 5, %i31, %i31 ; ld1 -1(%c4), %i9 finop ; bcc.qn @citst, .L32 finop ; cxnop finop ; st1 %i9, -1(%c8) .L31: itstne8 0, %i13 ; movb8_8 %i2, %c6 finop ; pcsp.ro.bl 128(%c6) finop ; pcsp.ro.bl 256(%c6) finop ; pcsp.ro.bl 384(%c6) ash8.ntr -7, %i13, %i9 ; bcc.qt @citst, .L24 ash8.ntr 7, %i9, %i11 ; movb8_8 %i11, %c5 add8.ntr %i2, %i11, %i2 ; mov8_8 %c8, %c7 itsteq8 0, %i9 ; movb8_8 %i2, %c9 sub8.ntr %i13, %i11, %i13 ; sadd8.ntr 0, %c5, %c8, %c8 sub8.ntr %i9, 1, %i9 ; bcs.qt @citst, .L28 .L29: finop ; pcsp.ro.bl 512(%c6) itsteq8 0, %i9 ; ld8.ro 0(%c6), %i10 sub8.ntr %i9, 1, %i9 ; ld8.ro 8(%c6), %i11 add8.ntr 33, %i31, %i31 ; ld8.ro 16(%c6), %i0 finop ; ld8.ro 24(%c6), %i1 finop ; ld8.ro 32(%c6), %i3 finop ; ld8.ro 40(%c6), %i4 finop ; ld8.ro 48(%c6), %i5 finop ; ld8.ro 56(%c6), %i12 finop ; sadd8.ntr 0, %c7, 128, %c7 finop ; st8 %i10, -128(%c7) finop ; st8 %i11, -120(%c7) finop ; st8 %i0, -112(%c7) finop ; st8 %i1, -104(%c7) finop ; st8 %i3, -96(%c7) finop ; st8 %i4, -88(%c7) finop ; st8 %i5, -80(%c7) finop ; st8 %i12, -72(%c7) finop ; ld8.ro 120(%c6), %i12 finop ; ld8.ro 112(%c6), %i5 finop ; ld8.ro 104(%c6), %i4 finop ; ld8.ro 96(%c6), %i3 finop ; ld8.ro 88(%c6), %i1 finop ; ld8.ro 80(%c6), %i0 finop ; ld8.ro 72(%c6), %i11 finop ; ld8.ro 64(%c6), %i10 finop ; st8 %i0, -48(%c7) finop ; st8 %i1, -40(%c7) finop ; st8 %i11, -56(%c7) finop ; st8 %i10, -64(%c7) finop ; st8 %i3, -32(%c7) finop ; st8 %i4, -24(%c7) finop ; st8 %i5, -16(%c7) finop ; bcc.qn @citst, .L29 finop ; sadd8.ntr 0, %c6, 128, %c6 finop ; st8 %i12, -8(%c7) .L28: itsteq8 0, %i13 ; cxnop sub8.ntr %i13, 1, %i4 ; bcs.qt @citst, .L24 .L27: itsteq8 0, %i4 ; ld1 0(%c9), %i10 sub8.ntr %i4, 1, %i4 ; sadd8.ntr 0, %c8, 1, %c8 add8.ntr 3, %i31, %i31 ; bcc.qn @citst, .L27 finop ; sadd8.ntr 0, %c9, 1, %c9 finop ; st1 %i10, -1(%c8) .L24: add8.ntr 8, %i31, %i31 ; ld8 104(%sp), %c14 finop ; ld8 112(%sp), %cp finop ; ld8 120(%sp), %fp finop ; ld8 88(%sp), %i12 finop ; ld8 80(%sp), %i13 finop ; jmp 32(%c14) finop ; sadd8.ntr 0, %sp, 128, %sp finop ; cxnop .def .ef; .val .; .scl 101; .line 93; .endef .def copyfrom; .scl -1; .endef .data # nbytes %i5 local # npage %i9 local # from %c6 local # to %c7 local # a %i10 local # b %i11 local # c %i0 local # d %i1 local # e %i3 local # f %i4 local # g %i5 local # h %i12 local # nbytes %i4 local # from %c9 local # to %c8 local .half 0x0, 0x0, 0x60003000, 0x5800 .L44: copyfrom: .word copyfrom$TXT .word memcpy .word memcpy$TXT # src %i2 local # dest %c8 local # n %i13 local .text .data .align 128 .L47: .globl copyfrom .globl copyfrom$TXT .globl copyto .globl copyto$TXT .text ga-5-3/armci/tcgmsg/ipcv5.0/drand48.c0000640005473000001440000000055211272474200015750 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv5.0/drand48.c,v 1.2 1994-12-30 20:55:40 d3h325 Exp $ */ #include "srftoc.h" extern long random(); extern int srandom(); double DRAND48_() { return ( (double) random() ) * 4.6566128752458e-10; } void SRAND48_(seed) unsigned *seed; { (void) srandom(*seed); } ga-5-3/armci/tcgmsg/ipcv5.0/async_send_lapi.c0000640005473000001440000002541311373305234017644 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #include "tcgmsgP.h" /*#define DEBUG 1*/ /*#define DEBUG2 1*/ static const long false = 0; static const long true = 1; typedef struct { int from:16; int to:16; } nodepair_t; typedef union{ long fromto; nodepair_t n; } pair_t; extern void Busy(int); /* All data movement to/from shared memory is done using the COPY_TO/FROM_SHMEM macros */ extern lapi_handle_t lapi_handle; /* ShmemBuf *localbuf = &tmp_snd_buf; */ extern void lapi_put_c(void* dest, void* src, long bytes, long node, lapi_cntr_t *cntr); extern void lapi_put(void* dest, void* src, long bytes, long node); extern void lapi_get(void* dest, void* src, long bytes, long node); #define COPY_TO_LOCAL(src, dest, n) (void) memcpy(dest, src, (long) n) #define COPY_FROM_LOCAL(src, dest, n) (void)memcpy(dest, src, (long) n) #define COPY_TO_REMOTE(src,dest,n,node) lapi_put(dest, src, (long) n, node) #define COPY_FROM_REMOTE(src,dest,n,node)lapi_get(dest, src, (long) n,node) /* #define COPY_TO_REMOTE_CNTR(src, dest, n, node, pcntr) lapi_put_c(dest, src, (long) n, node, pcntr) */ #define COPY_TO_REMOTE_CNTR(localbuf, dest, n, node, pcntr) do { \ if (LAPI_Put(lapi_handle,(uint)node, (uint)n, dest,localbuf->info, pcntr, &localbuf->cntr, NULL)) { \ Error("TCG:lapi_put_c failed",0); \ } \ } while (0) #define NEXT_LOC_BUF(localbuf) localbuf = (sendbuf_t*)localbuf->next; #define GET_LOC_BUF(localbuf) do { \ if(LAPI_Waitcntr(lapi_handle, &localbuf->cntr, 1, NULL)) { \ Error("TCG:LAPI_Waitcntr failed",0); \ } \ } while (0) #ifndef FLUSH_CACHE # define FLUSH_CACHE #endif #ifndef FLUSH_CACHE_LINE # define FLUSH_CACHE_LINE(x) #endif #define TCG_ABS(a) (((a) >= 0) ? (a) : (-(a))) /** * Return the value of a volatile variable in shared memory * that is REMOTE to this processor */ static long remote_flag(long *p, long node) { long tmp; /* FLUSH_CACHE;*/ /* no need to flush for one word only*/ COPY_FROM_REMOTE(p, &tmp, sizeof(tmp), node); return tmp; } /** * Return the value of a volatile variable in shared memory * that is LOCAL to this processor */ static long local_flag(void *p) { long val; FLUSH_CACHE_LINE(p); val = *(long*)p; return(val); } void set_local_flag(void *p, long val) { *(long*)p = val; } void set_remote_flag(void *p, long val, long node) { COPY_TO_REMOTE(&val, p, sizeof(long), node); } /** * Wait on Lapi counter for data to appear * check if *p == value */ static void lapi_await(long *p, long value, lapi_cntr_t* cntr) { int val; long pval; if(LAPI_Waitcntr(lapi_handle, cntr, 1, &val)) Error("lapi_await: error",-1); #if 0 if ( (pval = local_flag(p)) != value) { fprintf(stdout,"%2ld: invalid value=%ld, local_flag=%lx %ld\n", TCGMSG_nodeid, value, (unsigned long)p, pval); fflush(stdout); Error("lapi_await: exiting..",-1);; } #endif } /** * Wait for (*p == value) */ static void local_await(long *p, long value) { long pval; long nspin = 0; long spinlim = 100000000; long waittim = 100000; extern void flush_send_q(void); while ((pval = local_flag(p)) != value) { if (pval && (pval != value)) { fprintf(stdout,"%2ld: invalid value=%ld, local_flag=%lx %ld\n", TCGMSG_nodeid, value, (unsigned long)p, pval); fflush(stdout); exit(1); } nspin++; if((nspin&7)==0)flush_send_q(); if (nspin < spinlim) Busy(100); else USleep(waittim); } } /** * Entry points to info about a message ... determine which * transport mechanism is appropriate and send as much as * possible without blocking. * * Right now just shared memory ... when sockets are working this * routine will become async_shmem_send. * * Shared-memory protocol aims for low latency. Each process has * one buffer for every other process. Thus, to send a message U * merely have to determine if the receivers buffer for you is empty * and copy directly into the receivers buffer. * * Return 0 data has not been sent, 1 if the send is complete. */ long async_send(SendQEntry *entry) { long node = entry->node; ShmemBuf *sendbuf= TCGMSG_proc_info[node].sendbuf; #ifdef NOTIFY_SENDER void *busy_flag = &TCGMSG_proc_info[node].recvbuf->flag; #endif long ncopy, complete; long pval; long info[4]; pair_t pair; #ifdef DEBUG2 (void) fprintf(stdout,"%2ld: sending to %ld buf=%lx len=%ld\n", TCGMSG_nodeid, node, entry->buf, entry->lenbuf); (void) fprintf(stdout,"%2ld: sendbuf=%lx\n", TCGMSG_nodeid, sendbuf); (void) fflush(stdout); #endif /* return if the receiver buffer is not available */ #ifdef NOTIFY_SENDER pval = local_flag(busy_flag); #else pval = remote_flag(&sendbuf->info[3], node); #endif if (pval) { #ifdef DEBUG { long info[4]; FLUSH_CACHE; COPY_FROM_REMOTE(sendbuf->info, info, sizeof(info), node); fprintf(stdout,"%2ld: snd info after full = %ld %ld %ld\n", TCGMSG_nodeid, info[0], info[1], info[2]); fflush(stdout); sleep(1); } #endif return 0; } /* if data has been written already and we are here, operation is complete */ if(entry->written) return 1L; #ifdef NOTIFY_SENDER set_local_flag(busy_flag,true); #endif info[0] = entry->type; info[1] = entry->lenbuf; info[2] = entry->tag; #if 0 entry->buffer_number++; info[3] = entry->buffer_number; #else pair.n.from = TCGMSG_nodeid; pair.n.to = node; info[3] = pair.fromto; #endif /* Copy over the message if it fits in the receiver buffer */ ncopy = (long) (( entry->lenbuf <= SHMEM_BUF_SIZE) ? entry->lenbuf : 0 ); GET_LOC_BUF(localbuf); if (ncopy) { #ifdef DEBUG printf("%ld:snd:copying data node=%ld adr=%lx %ld bytes\n", TCGMSG_nodeid, node, sendbuf->buf, ncopy); fflush(stdout); #endif COPY_TO_LOCAL(entry->buf+entry->written, localbuf->buf, ncopy); complete = 1; } else { #ifdef DEBUG printf("%ld:snd:copying addr node=%ld adr=%lx %ld bytes\n", TCGMSG_nodeid, node, sendbuf->buf, ncopy); fflush(stdout); #endif /* copy address of the user buffer to the send buffer */ COPY_TO_LOCAL(&(entry->buf), localbuf->buf, sizeof(char*)); ncopy = sizeof(char*); complete = 0; /* sent is complete only when receiver gets the data */ entry->written = 1; } #ifdef DEBUG printf("%ld:snd:copying info to node=%ld adr=%lx %ld bytes\n", TCGMSG_nodeid, node, sendbuf->info, sizeof(info)); fflush(stdout); #endif COPY_TO_LOCAL(info, localbuf->info, sizeof(info)); COPY_TO_REMOTE_CNTR(localbuf,sendbuf,sizeof(info)+ncopy,node,&sendbuf->cntr); /* advance to next buf */ NEXT_LOC_BUF(localbuf); return complete; } /** * Receive a message of given type from the specified node, returning * the message and length of the message. * * Right now just shared memory ... when sockets are working this * routine will become msg_shmem_rcv * * Shared-memory protocol aims for low latency. Each process has * one buffer for every other process. Thus, to send a message U * merely have to determine if the receivers buffer for you is empty * and copy directly into the receivers buffer. */ void msg_rcv(long type, char *buf, long lenbuf, long *lenmes, long node) { long me = TCGMSG_nodeid; ShmemBuf *recvbuf; /* Points to receving buffer */ long nleft; long msg_type, msg_tag, msg_len; long buffer_number = 1; long expected_tag = TCGMSG_proc_info[node].tag_rcv++; #ifdef NOTIFY_SENDER void *busy_flag= &TCGMSG_proc_info[node].sendbuf->flag; #endif if (node<0 || node>=TCGMSG_nnodes) Error("msg_rcv: node is out of range", node); recvbuf = TCGMSG_proc_info[node].recvbuf; /* Wait for first part message to be written */ #ifdef DEBUG (void) fprintf(stdout,"%2ld: receiving from %ld buf=%lx len=%ld\n", me, node, recvbuf,lenbuf); (void) fprintf(stdout,"%2ld: user buf=%lx len=%ld\n", me, buf, lenbuf); (void) fflush(stdout); #endif #ifdef LAPI lapi_await(&recvbuf->info[3], buffer_number, &recvbuf->cntr); #else local_await(&recvbuf->info[3], buffer_number); #endif /* Copy over the header information */ msg_type = recvbuf->info[0]; msg_len = recvbuf->info[1]; msg_tag = recvbuf->info[2]; #ifdef DEBUG (void) fprintf(stdout,"%2ld: received msg from %ld len=%ld\n", me, node, msg_len); (void) fflush(stdout); #endif /* Check type and size information */ if(msg_tag != expected_tag) { pair_t pair; pair.fromto = recvbuf->info[3]; fprintf(stdout, "rcv: me=%ld from=%ld type=%ld expectedtag=%ld lenbuf=%ld\ngot: to=%d from=%d type=%ld msg_tag=%ld msg_len=%ld info[3]=%ld\n", me, node, type, expected_tag, lenbuf, (int)pair.n.to, (int)pair.n.from, msg_type, msg_tag, msg_len, recvbuf->info[3]); fflush(stdout); Error("msg_rcv: tag mismatch ... transport layer failed????", 0L); } if (msg_type != type) { (void) fprintf(stderr, "rcv: me=%ld from=%ld type=(%ld != %ld) tag=%ld len=%ld\n", me, node, type, msg_type, msg_tag, msg_len); Error("msg_rcv: type mismatch ... strong typing enforced\n", 0L); } if (msg_len > lenbuf) { (void) fprintf(stderr, "rcv: me=%ld from=%ld type=%ld tag=%ld len=(%ld > %ld)\n", me, node, type, msg_tag, msg_len, lenbuf); Error("msg_rcv: message too long for buffer\n", 0L); } nleft = *lenmes = msg_len; if (nleft) { long ncopy = nleft; /* for short messages data is in local buffer, for long in remote buffer */ if(nleft <= SHMEM_BUF_SIZE) { FLUSH_CACHE; COPY_FROM_LOCAL(recvbuf->buf, buf, ncopy); }else { char *addr = *((char**)recvbuf->buf); COPY_FROM_REMOTE(addr, buf, nleft, node); } } recvbuf->info[3] = false; #ifdef NOTIFY_SENDER /* confirm that data has been transfered */ set_remote_flag(busy_flag,false,node); #endif } long MatchShmMessage(long node, long type) { ShmemBuf *recvbuf; long msg_type; recvbuf = TCGMSG_proc_info[node].recvbuf; if(recvbuf->info[3] == false) return (0); /* no message to receive */ /* we have a message but let's see if want it */ FLUSH_CACHE_LINE(recvbuf->info); COPY_FROM_LOCAL(recvbuf->info, &msg_type, sizeof(long)); if(type == msg_type) return (1); return (0); } ga-5-3/armci/tcgmsg/ipcv5.0/nodeid.c0000640005473000001440000000017712115161655015755 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "tcgmsgP.h" long NODEID_(void) { return (long) TCGMSG_nodeid; } ga-5-3/armci/tcgmsg/ipcv5.0/checkbyte.c0000640005473000001440000000075511272474200016452 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv5.0/checkbyte.c,v 1.2 1994-12-30 20:55:37 d3h325 Exp $ */ unsigned char CheckByte(unsigned char *c, long n) { /* unsigned char sum = (char) 0; while (n-- > 0) sum = sum ^ *c++; return sum; */ unsigned int sum = 0; unsigned int mask = 0xff; while (n-- > 0) sum += (int) *c++; sum = (sum + (sum>>8) + (sum>>16) + (sum>>24)) & mask; return (unsigned char) sum; } ga-5-3/armci/tcgmsg/ipcv5.0/tcgmsgP.h0000640005473000001440000001011112115161655016111 0ustar d3n000users#ifndef TCGMSGP_H_ #define TCGMSGP_H_ #if HAVE_STRING_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_SIGNAL_H # include #endif #ifdef LAPI # include #endif #include "tcgshmem.h" #include "sndrcv.h" #include "srftoc.h" /* TODO autoconf way to detect this?? */ #define MAX_PROC 512 /* #define MAX_PROC 16 */ /* under Cygnus we got only serial execution */ /* #define MAX_PROC 1 */ #define INTERNAL_SYNC_TYPE 33333 #define MAX_N_OUTSTANDING_MSG 64 extern void USleep(long); #ifndef LAPI extern long *nxtval_shmem; #endif extern long DEBUG_; extern long TCGMSG_nodeid; /**> The id of this process */ extern long TCGMSG_nnodes; /**> Total no. of processes */ extern char * TCGMSG_shmem; /**> Pointer to shared-memory segment */ extern long TCGMSG_shmem_id; /**> ID of shared-memory segment */ extern long TCGMSG_shmem_size; /**> Size of shared-memory segment */ extern long TCGMSG_caught_sigint; /**> True if SIGINT was trapped */ /* Structure defines shared memory buffer ... each process has one for every process that can send to it via shared memory. Adjust SHMEM_BUF_SIZE so that sizeof(ShmemBuf) is an integer multiple of page sizes. Structure of this buffer is exploited in T3D code. */ #ifdef NOTIFY_SENDER # ifdef LAPI # define RESERVED (6*sizeof(long) + sizeof(lapi_cntr_t)) # else # define RESERVED 6*sizeof(long) # endif #else # define RESERVED 4*sizeof(long) #endif #if defined(MACX) # define WHOLE_BUF_SIZE 2*65536 #elif defined(LAPI) # define WHOLE_BUF_SIZE (3*4096) #else # define WHOLE_BUF_SIZE (16*8192) #endif #define SHMEM_BUF_SIZE (WHOLE_BUF_SIZE - RESERVED) #ifdef LAPI # define SND_RESERVED (4*sizeof(long) + sizeof(lapi_cntr_t) + sizeof(void*)) # define SEND_BUF_SIZE (WHOLE_BUF_SIZE - SND_RESERVED) # define SENDBUF_NUM 2 typedef struct { lapi_cntr_t cntr; void *next; long info[4]; char buf[SEND_BUF_SIZE]; } sendbuf_t; sendbuf_t *sendbuf_arr, *localbuf; #endif typedef struct { long info[4]; /**< 0=type, 1=length, 2=tag, 3=full */ char buf[SHMEM_BUF_SIZE]; /**< Message buffer */ #ifdef NOTIFY_SENDER long stamp; # ifdef LAPI lapi_cntr_t cntr; # endif long flag; /**< JN: used by receiver to signal sender */ #endif } ShmemBuf; /* Structure defines an entry in the send q */ typedef struct { long msgid; /**< Message id for msg_status */ long type; /**< Message type */ long node; /**< Destination node */ long tag; /**< Message tag */ char *buf; /**< User or internally malloc'd buffer */ long lenbuf; /**< Length of user buffer in bytes */ long written; /**< Amount already sent */ long buffer_number; /**< No. of buffers alread sent */ long free_buf_on_completion; /* Boolean true if free buffer using free */ void *next; /**< Pointer to next entry in linked list */ void *next_in_ring; /**< Pointer to next entry in ring of free entries */ long active; /**< 0/1 if free/allocated */ } SendQEntry; /* This structure holds basically all process specific information */ #define COMM_MODE_NONE 0 #define COMM_MODE_SHMEM 1 #define COMM_MODE_SOCK 2 typedef struct { ShmemBuf *sendbuf; /**< Shared-memory buffer for sending to node*/ ShmemBuf *recvbuf; /**< Shared-memory buffer for receiving from */ int sock; /**< Socket for send/receive */ int comm_mode; /**< Defines communication info */ pid_t pid; /**< Unix process id (or 0 if unknown) */ long tag_rcv; /**< Expected tag from next rcv() */ long n_snd; /**< No. of messages sent from this process */ long n_rcv; /**< No. of messages recv from this process */ SendQEntry *sendq; /**< Queue of messages to be sent */ } ProcInfo; extern ProcInfo *TCGMSG_proc_info; /**< Will point to array of structures */ extern SendQEntry *TCGMSG_sendq_ring; /**< Circular ring of SendQEntry structures for fast allocation/free */ #endif /* TCGMSGP_H_ */ ga-5-3/armci/tcgmsg/ipcv5.0/mitob.c0000640005473000001440000000114112115161655015615 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * * $Header: /tmp/hpctools/ga/tcgmsg/ipcv5.0/mitob.c,v 1.2 1994-12-30 20:55:54 d3h325 Exp $ * * These routines use C's knowledge of the sizes of data types * to generate a portable mechanism for FORTRAN to translate * between bytes, integers and doubles. Note that we assume that * FORTRAN integers are the same size as C longs. */ #include "sndrcv.h" /** * Return the no. of bytes that n ints=longs occupy */ long MITOB_(long *n) { if (*n < 0) Error("MITOB_: negative argument",*n); return (long) (*n * sizeof(long)); } ga-5-3/armci/tcgmsg/ipcv5.0/nxtval.shm.c0000640005473000001440000000510312115161655016607 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * $Id: nxtval.shm.c,v 1.9 2005-02-21 21:51:40 manoj Exp $ */ #if HAVE_STDIO_H # include #endif #include "tcgmsgP.h" long nxtval_counter=0; long *nxtval_shmem = &nxtval_counter; #define LEN 2 #define INCR 1 /* increment for NXTVAL */ #define BUSY -1L /* indicates somebody else updating counter*/ #if (defined(__i386__) || defined(__x86_64__)) && defined(__GNUC__) # define TESTANDSET testandset static inline int testandset(int *spinlock) { int ret; __asm__ __volatile__("xchgl %0, %1" : "=r"(ret), "=m"(*spinlock) : "0"(1), "m"(*spinlock)); return ret; } #elif defined(__APPLE__) && defined(__GNUC__) # define TESTANDSET(x) ( krspin_lock((long int *)(x))) static int krspin_lock(long int *p) { unsigned long tmp; int ret; __asm__ __volatile__( "b 1f # spin_lock\n\ 2: lwzx %0,0,%1\n\ cmpwi 0,%0,0\n\ bne+ 2b\n\ 1: lwarx %0,0,%1\n\ cmpwi 0,%0,0\n\ bne- 2b\n" " stwcx. %2,0,%1\n\ bne- 2b\n\ isync" : "=&r"(tmp) : "r"(p), "r"(1) : "cr0", "memory"); return ret == 0; } #endif #ifdef TESTANDSET # define LOCK if(nproc>1)acquire_spinlock((int*)(nxtval_shmem+1)) # define UNLOCK if(nproc>1)release_spinlock((int*)(nxtval_shmem+1)) static void acquire_spinlock(int *mutex) { int loop=0, maxloop =10; while (TESTANDSET(mutex)){ loop++; if(loop==maxloop){ usleep(1); loop=0; } } } static void release_spinlock(int *mutex) { *mutex =0; } #endif /* TESTANDSET */ #ifndef LOCK # define LOCK if(nproc>1)Error("nxtval: sequential version with silly mproc ", (long) *mproc); # define UNLOCK #endif /** * Get next value of shared counter. * * mproc > 0 ... returns requested value * mproc < 0 ... server blocks until abs(mproc) processes are queued * and returns junk * mproc = 0 ... indicates to server that I am about to terminate */ long NXTVAL_(long *mproc) { long shmem_swap(); long local=0; long sync_type= INTERNAL_SYNC_TYPE; long nproc= NNODES_(); long server=nproc-1; if (DEBUG_) { (void) printf("%2ld: nxtval: mproc=%ld\n",(long)NODEID_(),(long)*mproc); (void) fflush(stdout); } if (*mproc < 0) { SYNCH_(&sync_type); /* reset the counter value to zero */ if( NODEID_() == server) *nxtval_shmem = 0; SYNCH_(&sync_type); } if (*mproc > 0) { LOCK; local = *nxtval_shmem; *nxtval_shmem += INCR; UNLOCK; } return local; } ga-5-3/armci/tcgmsg/ipcv5.0/snd_rcv_probe.c0000640005473000001440000001505612115161655017342 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif extern void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *)); #include "srftoc.h" #include "sndrcv.h" #include "tcgmsgP.h" extern long MatchShmMessage(); extern void msg_wait(); extern long DEBUG_; #define INVALID_NODE -3333 /* used to stamp completed msg in the queue */ #define MAX_Q_LEN MAX_PROC /* Maximum no. of outstanding messages */ static volatile long n_in_msg_q = 0; /* actual no. in the message q */ static struct msg_q_struct{ long msg_id; long node; long type; } msg_q[MAX_Q_LEN]; /** * Return 1/0 (TRUE/FALSE) if a message of the given type is available * from the given node. If the node is specified as -1, then all nodes * will be examined. Some attempt is made at ensuring fairness. * * If node is specified as -1 then this value is overwritten with the * node that we got the message from. */ long ProbeNode(long *type, long *node) { static long next_node = 0; long nproc = NNODES_(); long me = NODEID_(); long found = 0; long cur_node; int i, proclo, prochi; if (*node == me) Error("PROBE_ : cannot recv message from self, msgtype=", *type); if (*node == -1) { /* match anyone */ proclo = 0; prochi = nproc-1; cur_node = next_node; } else proclo = prochi = cur_node = *node; for(i = proclo; i<= prochi; i++) { if (cur_node != me){ /* can't receive from self */ found = MatchShmMessage(cur_node, *type); if (found) break; } cur_node = (cur_node +1)%nproc; } if(found) *node = cur_node; /* if wildcard node, determine which node we'll start with next time */ if(*type == -1) next_node = (cur_node +1)%nproc; return(found); } /** * Return 1/0 (TRUE/FALSE) if a message of the given type is available * from the given node. If the node is specified as -1, then all nodes * will be examined. Some attempt is made at ensuring fairness. */ long PROBE_(long *type, long *node) { long nnode = *node; long result; result = ProbeNode(type, &nnode); return(result); } /** * long *type = user defined type of received message (input) * char *buf = data buffer (output) * long *lenbuf = length of buffer in bytes (input) * long *lenmes = length of received message in bytes (output) * (exceeding receive buffer is hard error) * long *nodeselect = node to receive from (input) * -1 implies that any pending message of the specified * type may be received * long *nodefrom = node message is received from (output) * long *sync = flag for sync(1) or async(0) receipt (input) */ void RCV_(long *type, void *buf, long *lenbuf, long *lenmes, long *nodeselect, long *nodefrom, long *sync) { static long ttype; static long node; long me = NODEID_(); void msg_rcv(); node = *nodeselect; ttype = *type; if (DEBUG_) { printf("RCV_: node %ld receiving from %ld, len=%ld, type=%ld, sync=%ld\n", (long)me, (long)*nodeselect, (long)*lenbuf, (long)*type, (long)*sync); fflush(stdout); } /* wait for a matching message */ if(node==-1) while(ProbeNode(type, &node) == 0); msg_rcv(ttype, buf, *lenbuf, lenmes, node); *nodefrom = node; if (DEBUG_) { (void) printf("RCV: me=%ld, from=%ld, len=%ld\n", (long)me, (long)*nodeselect, (long)*lenbuf); (void) fflush(stdout); } } /** * long *type = user defined integer message type (input) * char *buf = data buffer (input) * long *lenbuf = length of buffer in bytes (input) * long *node = node to send to (input) * long *sync = flag for sync(1) or async(0) communication (input) */ void SND_(long *type, void *buf, long *lenbuf, long *node, long *sync) { long me = NODEID_(); long msg_async_snd(); /*asynchronous communication not supported under LAPI */ #ifdef LAPI long block = 1; #else long block = *sync; #endif if (DEBUG_) { (void)printf("SND_: node %ld sending to %ld, len=%ld, type=%ld, sync=%ld\n", (long)me, (long)*node, (long)*lenbuf, (long)*type, (long)*sync); (void) fflush(stdout); } if (block) msg_wait(msg_async_snd(*type, buf, *lenbuf, *node)); else { if (n_in_msg_q >= MAX_Q_LEN) Error("SND: overflowing async Q limit", n_in_msg_q); msg_q[n_in_msg_q].msg_id = msg_async_snd(*type, buf, *lenbuf, *node); msg_q[n_in_msg_q].node = *node; msg_q[n_in_msg_q].type = *type; n_in_msg_q++; } if (DEBUG_) { (void) printf("SND: me=%ld, to=%ld, len=%ld \n", (long)me, (long)*node, (long)*lenbuf); (void) fflush(stdout); } } int compare_msg_q_entries(const void* entry1, const void* entry2) { /* nodes are nondistiguishable unless one of them is INVALID_NODE */ if( ((struct msg_q_struct*)entry1)->node == ((struct msg_q_struct*)entry2)->node) return 0; if( ((struct msg_q_struct*)entry1)->node == INVALID_NODE) return 1; if( ((struct msg_q_struct*)entry2)->node == INVALID_NODE) return -1; return 0; } /** * Wait for all messages (send/receive) to complete between * this node and node *nodesel or everyone if *nodesel == -1. */ void WAITCOM_(long *nodesel) { long i, found = 0; for (i=0; i> 20; if (node < 0 || node > NNODES_()) Error("NodeFromMsgID: invalid msgid", msgid); return node; } /** * Flush as many messages as possible without blocking from * the send q to the specified node. */ static void flush_send_q_node(long node) { while (TCGMSG_proc_info[node].sendq) { if (!async_send(TCGMSG_proc_info[node].sendq)) { /* Send is incomplete ... stop processing this q*/ break; } else { SendQEntry *tmp = TCGMSG_proc_info[node].sendq; TCGMSG_proc_info[node].sendq = (SendQEntry *) TCGMSG_proc_info[node].sendq->next; if (tmp->free_buf_on_completion) (void) free(tmp->buf); tmp->active = false; /* Matches NewSendQEntry() */ } } } /** * Flush as many messages as possible without blocking * from all of the send q's. */ void flush_send_q() { long node; long nproc = NNODES_(); for (node=0; nodenext) { if (entry->msgid == msgid) { status = 0; break; } } return status; } /** * Wait for the operation referred to by msgid to complete. */ void msg_wait(long msgid) { long nspin = 0; long spinlim = 1000000; while (!msg_status(msgid)) { nspin++; if (nspin < spinlim) Busy(100); else usleep(1); } } static SendQEntry *NewSendQEntry(void) { SendQEntry *new = TCGMSG_sendq_ring; if (new->active) Error("NewSendQEntry: too many outstanding sends\n", 0L); TCGMSG_sendq_ring = (SendQEntry *) TCGMSG_sendq_ring->next_in_ring; new->active = true; return new; } long msg_async_snd(long type, char *buf, long lenbuf, long node) { long msgid; SendQEntry *entry; if (node<0 || node>=TCGMSG_nnodes) Error("msg_async_send: node is out of range", node); if (node == TCGMSG_nodeid) Error("msg_async_send: cannot send to self", node); msgid = NextMsgID(node); entry = NewSendQEntry(); /* Insert a new entry into the q */ entry->tag = TCGMSG_proc_info[node].n_snd++; /* Increment tag */ entry->msgid = msgid; entry->type = type; entry->buf = buf; entry->free_buf_on_completion = 0; entry->lenbuf= lenbuf; entry->node = node; entry->next = (SendQEntry *) 0; entry->written = 0; entry->buffer_number = 0; /* Attach to the send q */ if (!TCGMSG_proc_info[node].sendq) TCGMSG_proc_info[node].sendq = entry; else { SendQEntry *cur = TCGMSG_proc_info[node].sendq; while (cur->next) cur = cur->next; cur->next = entry; } /* Attempt to flush the send q */ flush_send_q(); return msgid; } /** * synchronous send of message to a process * * long *type = user defined integer message type (input) * char *buf = data buffer (input) * long *lenbuf = length of buffer in bytes (input) * long *node = node to send to (input) * * for zero length messages only the header is sent */ void msg_snd(long type, char *buf, long lenbuf, long node) { msg_wait(msg_async_snd(type, buf, lenbuf, node)); } ga-5-3/armci/tcgmsg/ipcv5.0/mdtoi.c0000640005473000001440000000121312115161655015617 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * * $Header: /tmp/hpctools/ga/tcgmsg/ipcv5.0/mdtoi.c,v 1.1 1997-03-05 18:42:31 d3e129 Exp $ * * These routines use C's knowledge of the sizes of data types * to generate a portable mechanism for FORTRAN to translate * between bytes, integers and doubles. Note that we assume that * FORTRAN integers are the same size as C longs. */ #include "sndrcv.h" /** * Return the minimum no. of integers which will hold n doubles. */ long MDTOI_(long *n) { if (*n < 0) Error("MDTOI_: negative argument",*n); return (long) ( (MDTOB_(n) + sizeof(long) - 1) / sizeof(long) ); } ga-5-3/armci/tcgmsg/ipcv5.0/evlog.c0000640005473000001440000002627411341051620015623 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** $Header: /tmp/hpctools/ga/tcgmsg/ipcv5.0/evlog.c,v 1.3 2003-06-27 13:53:12 manoj Exp $ */ /** Event logging routine with key driven varargs interface */ #if HAVE_STDIO_H # include #endif #if HAVE_STDARG_H # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_STRING_H # include #endif extern long nodeid_(); #include "evlog.h" #include "sndrcv.h" #define ERROR_RETURN() do { \ error = 1; \ return; \ } while (0) #define DUMPBUF() do { \ (void) fputs(buffer, file); \ (void) fflush(file); \ if (ferror(file)) { \ ERROR_RETURN; \ } \ bufpt = buffer; \ left = BUFLEN; \ } while (0) #define RECORD(A) do { \ A; \ nchars = strlen(bufpt); \ bufpt += nchars; \ left -= nchars; \ } while (0) static double walltime(); /** * The format of the argument list is as follows: * * evlog([(int) key, [values, ...]], ..., EVKEY_LAST_ARG) * * Arguments are read as keys with corresponding values. Recognised keys * are defined in evlog.h and are described in detail below. * * Logging is enabled/disabled by calling evlog with one of EVKEY_ENABLE * or EVKEY_DISABLE specified. Note that EVKEY_ENABLE must be the * first key specified for it to be recognized and that all keys * in the argument list after EVKEY_DISABLE are ignored. By default * events are logged in the file events. This can be overridden with * the key EVKEY_FILENAME, which takes the filename as its value. * * The model for logging events assumed by the post-analysis routines * assumes that upon logging an event: * * a) no state chage occurs (EVKEY_EVENT). The event is just recorded. * * b) the process changes state by pushing the event onto the state stack * (EVKEY_BEGIN). * * c) the process changes state by popping an event off the state stack * (EVKEY_END). If the event or state popped off the stack does not * match the specified event then the post-analysis may get confused * but this does not interfere with the actual logging. * * EVKEY_EVENT, EVKEY_BEGIN or EVKEY_END must be the first key specified other * than a possible EVKEY_ENABLE. * * Internally an event is stored as a large character string to simplify * post-analysis. Users specify data for storage in addition to * that which is automatically stored (only the time and process) with * key, value combinations (EVKEY_STR_INT, EVKEY_STR_DBL, EVKEY_STR). * Many such key-value combinations as required may be specified. * Since the internal data format uses colons ':', double quotation * marks '"' and carriage returns users should avoid these in their * string data. * * ---------------------------- * Sample calling sequence: * * evlog(EVKEY_ENABLE, EVKEY_FILENAME, "events.log", EVKEY_LAST_ARG); * * evlog(EVKEY_EVENT, "Finished startup code", * EVKEY_STR, "Now do some real work", * EVKEY_LAST_ARG); * * evlog(EVKEY_BEGIN, "Get Matrix", EVKEY_LAST_ARG); * * evlog(EVKEY_END, "Get matrix", * EVKEY_STR_INT, "Size of matrix", (int) N, * EVKEY_STR_DBL, "Norm of matrix", (double) matrix_norm, * EVKEY_LAST_ARG); * * evlog(EVKEY_BEGIN, "Transform matrix", * EVKEY_STR_DBL, "Recomputed norm", (double) matrix_norm, * EVKEY_LAST_ARG); * * evlog(EVKEY_END, "Transform matrix", * EVKEY_STR_INT, "No. of iterations", (int) niters, * EVKEY_LAST_ARG); * * evlog(EVKEY_DUMP, EVKEY_DISABLE, EVKEY_LAST_ARG); * * evlog(EVKEY_EVENT, "Logging is disabled ... this should not print", * EVKEY_DUMP, EVKEY_LAST_ARG); * * ---------------------------- * * EVKEY_LAST_ARG * Terminates list ... takes no value and must be present * * EVKEY_EVENT, (char *) event * Simply log occurence of the event * * EVKEY_BEGIN, (char *) event * Push event onto process state stack * * EVKEY_END, (char *) event * Pop event off process state stack * * EVKEY_MSG_LEN, (int) length * Value is (int) mesage length SND/RCV only * * EVKEY_MSG_TO, (int) to * Value is (int) to process id SND/RCV only * * EVKEY_MSG_FROM, (int) from * Value is (int) from process SND/RCV only * * EVKEY_MSG_TYPE, (int) type * Value is (int) message type SND/RCV only * * EVKEY_STR_INT, (char *) string, (int) data * User data value pair * * EVKEY_STR_DBL, (char *) string, (double) data * User data value pair (char *), (double) * * EVKEY_STR, (char *) string * User data value (char *) * * EVKEY_ENABLE * Enable logging * * EVKEY_DISABLE * Disable logging * * EVKEY_DUMP * Dump out the current buffer to disk * * EVKEY_FILE, (char *) filename * Use specified file to capture events. Default is "events". */ void evlog(int farg_key, ...) { static int logging=0; /* Boolean flag for login enabled/disabled */ static int error=0; /* Boolean flag for error detected */ static int ncall=0; /* Need to do stuff on first entry */ static char *buffer; /* Logging buffer ... null terminated */ static char *bufpt; /* Pointer to next free char in buffer */ static int left; /* Amount of free space in buffer */ #define BUFLEN 262144 /* Size allocated for buffer ... biggish */ #define MAX_EV_LEN 1000 /* Assumed maximum size of single event record */ static FILE *file; /* File where events will be dumped */ static char *filename = "events"; /* Default name of events file */ va_list ap; /* For variable argument list */ int key; /* Hold key being processed */ int nchars; /* No. of chars printed by sprintf call */ char *temp; /* Temporary copy of bufpt */ char *string; /* Temporary */ int integer; /* Temporary */ double dbl; /* Temporary */ int valid; /* Temporary */ /* If an error was detected on a previous call don't even try to do anything */ if (error) { ERROR_RETURN(); } /* First time in need to allocate the buffer, open the file etc */ if (ncall == 0) { ncall = 1; if (!(bufpt = buffer = malloc((unsigned) BUFLEN))) { ERROR_RETURN(); } left = BUFLEN; if (!(file = fopen(filename, "w"))) { ERROR_RETURN(); } } /* Parse the arguments */ temp = bufpt; /* Save to check if anything has been logged */ valid = 0; /* One of BEGIN, END or EVENT must preceed most keys */ va_start(ap, farg_key); key = farg_key; while (key != EVKEY_LAST_ARG) { if ( (!logging) && (key != EVKEY_ENABLE) ) return; switch (key) { case EVKEY_ENABLE: logging = 1; break; case EVKEY_DISABLE: logging = 0; goto done; /* break; */ case EVKEY_FILENAME: if (!(filename = strdup(va_arg(ap, char *)))) {ERROR_RETURN();} if (!(file = freopen(filename, "w", file))) {ERROR_RETURN();} break; case EVKEY_BEGIN: valid = 1; RECORD(sprintf(bufpt, ":BEGIN:%s", va_arg(ap, char *))); RECORD(sprintf(bufpt, ":TIME:%.2f", walltime())); break; case EVKEY_END: valid = 1; RECORD(sprintf(bufpt, ":END:%s", va_arg(ap, char *))); RECORD(sprintf(bufpt, ":TIME:%.2f", walltime())); break; case EVKEY_EVENT: valid = 1; RECORD(sprintf(bufpt, ":EVENT:%s", va_arg(ap, char *))); RECORD(sprintf(bufpt, ":TIME:%.2f", walltime())); break; case EVKEY_MSG_LEN: if (!valid) {ERROR_RETURN();} RECORD(sprintf(bufpt, ":MSG_LEN:%d", va_arg(ap, int))); break; case EVKEY_MSG_TO: if (!valid) {ERROR_RETURN();} RECORD(sprintf(bufpt, ":MSG_TO:%d", va_arg(ap, int))); break; case EVKEY_MSG_FROM: if (!valid) {ERROR_RETURN();} RECORD(sprintf(bufpt, ":MSG_FROM:%d", va_arg(ap, int))); break; case EVKEY_MSG_TYPE: if (!valid) {ERROR_RETURN();} RECORD(sprintf(bufpt, ":MSG_TYPE:%d", va_arg(ap, int))); break; case EVKEY_MSG_SYNC: if (!valid) {ERROR_RETURN();} RECORD(sprintf(bufpt, ":MSG_SYNC:%d", va_arg(ap, int))); break; case EVKEY_STR_INT: if (!valid) {ERROR_RETURN();} string = va_arg(ap, char *); integer = va_arg(ap, int); RECORD(sprintf(bufpt, ":STR_INT:%s:%d", string, integer)); break; case EVKEY_STR_DBL: if (!valid) {ERROR_RETURN();} string = va_arg(ap, char *); dbl = va_arg(ap, double); RECORD(sprintf(bufpt, ":STR_DBL:%s:%g", string, dbl)); break; case EVKEY_STR: if (!valid) {ERROR_RETURN();} RECORD(sprintf(bufpt, ":STR:%s", va_arg(ap, char *))); break; case EVKEY_DUMP: {DUMPBUF();} if (temp != bufpt) { RECORD(sprintf(bufpt, "\n")); temp = bufpt; } break; default: {DUMPBUF();} {ERROR_RETURN();} } key = va_arg(ap, int); } done: va_end(ap); /* Put a linefeed on the end of the record if something is written */ if (temp != bufpt) { RECORD(sprintf(bufpt, "\n")); temp = bufpt; } /* Should really check on every access to the buffer that there is enough space ... however just assume a very large maximum size for a single event log entry and check here */ if (left <= 0) { ERROR_RETURN(); } if (left < MAX_EV_LEN) { DUMPBUF(); } } /** * return the wall time in seconds as a double */ static double walltime() { return ((double) MTIME_()) * 0.01; } /* int main(int argc, char **argv) { int N = 19; double matrix_norm = 99.1; int niters = 5; evlog(EVKEY_ENABLE, EVKEY_FILENAME, "events.log", EVKEY_LAST_ARG); evlog(EVKEY_EVENT, "Finished startup code", EVKEY_STR, "Now do some real work", EVKEY_LAST_ARG); evlog(EVKEY_BEGIN, "Get Matrix", EVKEY_LAST_ARG); evlog(EVKEY_END, "Get matrix", EVKEY_STR_INT, "Size of matrix", (int) N, EVKEY_STR_DBL, "Norm of matrix", (double) matrix_norm, EVKEY_LAST_ARG); evlog(EVKEY_BEGIN, "Transform matrix", EVKEY_STR_DBL, "Recomputed norm", (double) matrix_norm, EVKEY_LAST_ARG); evlog(EVKEY_END, "Transform matrix", EVKEY_STR_INT, "No. of iterations", (int) niters, EVKEY_LAST_ARG); evlog(EVKEY_DUMP, EVKEY_LAST_ARG); evlog(EVKEY_EVENT, "Logging is disabled ... this should not print", EVKEY_DUMP, EVKEY_LAST_ARG); return 0; } */ ga-5-3/armci/tcgmsg/README0000640005473000001440000002122712115161655014042 0ustar d3n000usersTCGMSG migration path (January 2013) ------------------------------------ TCGMSG (ipcv4.0 and ipcv5.0) have become the MPI-free runtime for ARMCI. It is now C-only i.e. no fortran code. The TCGMSG fortran interface is preserved for backwards compatibility within the Global Arrays distribution. This was a minimal effort migration. MPI is the preferred runtime. TCGMSG Send/receive subroutines ... version 4.04 (January 1994) --------------------------------------------------------------- :author: Robert J. Harrison :address: P.O. Box 999 Richland WA 99352 K1-90 :tel: 509-375-2037 :fax: 509-375-6631 :email: rj_harrison@pnl.gov Summary ------- TCGMSG is a toolkit for writing portable parallel programs using a message passing model. Supported are a variety of common UNIX workstations, mini-super and super computers and hetrogenous networks of the same, along with true parallel computers such as the Touchstone Delta, the Intel iPSC, the Kendall Square Research KSR-1, and the Alliant FX/2800 MPP system. Applications port between all of these environments without modification to the parallel constructs. This toolkit is available without charge, along with a set of example 'chemistry' applications. We are using this toolkit in our production codes, but cannot guarantee support or accept any liability for its use. Release Notes (4.04) -------------------- 1) Several bug fixes for SUN and Intel 2) Fixed, but slow, KSR port ... bug KSR to write quality software instead of hacking 3) Paragon port 4) DEC Alpha port (thanks to Nico Sanna, Rome) 5) Implemented bitwise OR operation for IGOP 6) Fixed UNIX version so that an executable invoked on its own (i.e., without using the parallel command) functions correctly as a single process ... this is very useful for debugging (thanks to J. Nieplocha). 7) Probe now formally supported on all platforms including entry in ipcv4.0/README and the interactive test program Release Notes (4.03) -------------------- 1) Tuning of shared memory communication mechanism. 2) Fixed bugs causing non-conservation of energy in MD example. Release Notes (4.02) -------------------- 0) Note my new address. 1) New port to the KSR, done by KSR and integrated by me back into the main release. This looks good, though the C compiler will not compile the socket based code with any optimisation and I have not done any extensive testing other than verify the test code and examples. 2) Script (makep) to build a .p file for a UNIX workstation network. It queries a list of machines to see if they are up and then sorts them by their load. Finally, a .p file is built to use the desired no. of machines using the least loaded ones first. Have a look at the top of tcgmsg/makep for more info. 3) A few minor bug fixes. Worst one was specific to SUN Fortran. 4) New function returns wall clock time in seconds as accurately as possible (or rather as accurately as currently implemented). DOUBLE PRECISION FUNCTION TCGTIME() double TCGTIME_() 5) Wrapper around nice for FORTRAN users only INTEGER FUNCTION NICE(INCR) INTEGER INCR 6) MD and SCF examples extensively revised to more accurately reflect actual applications. 7) Thanks to multiple users for input (Rick Kendall, Theresa Windus, Mike Coolidge, Joe Golab, Rik Littlefield, ...) 8) Experiments with a function to probe the message queue for available messages. INTEGER FUNCTION PROBE(TYPE, NODE) INTEGER TYPE, NODE long PROBE_(long * type, long * node) 9) Are you aware of the message passing interface standardization effort? Send mail to netlib@ornl.gov with the body 'send index from mpi' to get more information. Release Notes (4.0) ------------------- 1) Hopefully all (?) inconsistencies have now been removed. In particular receive from anyone now checks the type on ALL messages by peeking at data in the socket/buffer if necessary. 2) Numerous bug fixes, mostly to do with specific process distributions and removing stupidities in socket I/O. 3) Much improved (2-10+) short message performance. Part of this comes from SHORT messages being sent asynchronously as far as buffering in the transport mechanism permits. This also makes the UNIX world consistent with the iPSC world. However, the maximum length/number of messages that can be sent asyncrhonously is system and transport mechanism dependent and should not be relied upon. 4) Updating of all existing ports to reflect latest O/S releases (e.g. CRAY UNICOS 6.* and 7.*) 5) New ports including the Alliant Massively parallel system. 6) Simplified install procedure ... just type 'make all MACHINE=CRAY' 7) Broadcast and global operations have been tuned to both the UNIX networked environment (to minimize network traffic) and to the iPSC and DELTA. All exploit full pipe-lining and overlap of operations on large vectors. The requirement to provide workspace for the global operations has been eliminated. 8) Improved support for the IPSC and DELTA, including working demo command for the examples. Obtaining TCGMSG ---------------- a) anonymous ftp from ftp.tcg.anl.gov If you obtain the source by ftp please send e-mail to me so that I can maintain a list of users for bugfixes etc. Using binary mode transfer the file pub/tcgmsg/tcgmsg.4.04.tar.Z (or tcgmsg.4.04.tar if you don't have compress). b) e-mail (only if you can't ftp it please) Send a request to me at the above address. I will send you a split uuencoded version of tcgmsg.4.04.tar.Z. Installing TCGSMG ----------------- a) Existing ports Meaning of status field . - tested and fully functional s - tested but O/S does not support shared memory -> sockets only x - tested but O/S does not support XDR -> no data conversion ? - not tested recently but is supposed to work ! - known problems Status Machine Description ------ ------- ----------- . SUN Sun workstation running Sun O/S 4.0 or above . KSR Kendall Square Research KSR-1 . DEC DecStation running ULTRIX . DECOSF DEC Alpha running OSF (must use 8 byte FORTRAN integers) . SGI Silicon Graphics workstation IRIX 4.0 . ALLIANT Alliant FX/8/80/800/2800 Concentrix 2800 2.2 ? ALLIANTMPP Alliant MPP system ALPHA VERSION . ARDENT Stardent (formerly Ardent) Titan O/S 2.2 . CONVEX Convex C220 running ConvexOS V8.1 . IBM IBM R6000 with AIX 3.1 (xlf -qEXTNAME) . IBMNOEXT IBM R6000 with AIX 3.1 . HPUX Hewlett-Packard risc (HP-UX A.B8.05) (f77 +ppu) . HPUXNOEXT Hewlett-Packard risc (HP-UX A.B8.05) . IPSC Intel iPSC i860 hypercube . DELTA Intel/DARPA Touchstone Delta . PARAGON Intel Paragon running OSF x APOLLO Apollo DN10000, DomainOS Release 10.3 (bsd4.3) s CRAY Cray running UNICOS 6.1 or above s NEXT NeXT Workstation (OS 2.1) (Absoft f77 -f -N9) s NEXTNOEXT NeXT Workstation (OS 2.1) (Absoft f77 -f) ? ENCORE Encore running UMAX-4.3 ! SEQUENT Sequent (DYNIX V3.0.14) In the top-level TCGMSG directory type make all MACHINE= e.g. make all MACHINE=ALLIANT That's it, unless you're building the IPSC source. For the IPSC you also need to log onto the cube manager and in the tcgmsg/ipcv4.0 directory type 'make parallel'. See the section on testing below and the Makefile and README in the ipcv4.0 directory for more detailed information. b) Ports to new UNIX machines See ipcv4.0/README for suggested procedure. c) Ports to new true message passing machines See the source for the iPSC. Testing ------- 1) System test codes in ipcv4.0 Make installs default proc-group files using the local machine only. See the ipcv4.0/README info on how to include additional hosts/processes. a) Hello world ... try the following command. parallel hello b) Interactive system test program parallel test c) Non-interactive FORTRAN test program parallel testf 2) The codes in examples e.g. cd examples demo scf ... respond 15 for the number of basis functions See the README for more info on the examples and how to run them. ga-5-3/armci/tcgmsg/srftoc.h0000640005473000001440000000320212115161655014624 0ustar d3n000users/** @file This header file provides definitions for c for the names of the c message passing routines accessible from FORTRAN. It need not be included directly in user c code, assuming that sndrcv.h has already. It is needed as the FORTRAN naming convention varies between machines and it is the FORTRAN interface that is portable, not the c interface. However by coding with the macro defnition names c portability is ensured. */ #ifndef SRFTOC_H_ #define SRFTOC_H_ #define BRDCST_ armci_tcgmsg_brdcst #define DGOP_ armci_tcgmsg_dgop #define DRAND48_ armci_tcgmsg_drand48 #define IGOP_ armci_tcgmsg_igop #define LLOG_ armci_tcgmsg_llog #define MDTOB_ armci_tcgmsg_mdtob #define MDTOI_ armci_tcgmsg_mdtoi #define MITOB_ armci_tcgmsg_mitob #define MITOD_ armci_tcgmsg_mitod #define MTIME_ armci_tcgmsg_mtime #define NICEFTN_ armci_tcgmsg_niceftn #define NNODES_ armci_tcgmsg_nnodes #define NODEID_ armci_tcgmsg_nodeid #define NXTVAL_ armci_tcgmsg_nxtval #define PARERR_ armci_tcgmsg_parerr #define PBEGINF_ armci_tcgmsg_pbeginf #define PBGINF_ armci_tcgmsg_pbginf #define PEND_ armci_tcgmsg_pend #define PFCOPY_ armci_tcgmsg_pfcopy #define PFILECOPY_ armci_tcgmsg_pfilecopy #define PROBE_ armci_tcgmsg_probe #define RCV_ armci_tcgmsg_rcv #define SETDBG_ armci_tcgmsg_setdbg #define SND_ armci_tcgmsg_snd #define SRAND48_ armci_tcgmsg_srand48 #define STATS_ armci_tcgmsg_stats #define SYNCH_ armci_tcgmsg_synch #define TCGREADY_ armci_tcgmsg_tcgready #define TCGTIME_ armci_tcgmsg_tcgtime #define WAITCOM_ armci_tcgmsg_waitcom #endif /* SRFTOC_H_ */ ga-5-3/armci/tcgmsg/ipcv4.0/0000750005473000001440000000000012275260533014342 5ustar d3n000usersga-5-3/armci/tcgmsg/ipcv4.0/evon.c0000640005473000001440000000675511500231746015465 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/evon.c,v 1.4 1995-02-24 02:17:17 d3h325 Exp $ */ /* Crude FORTRAN interface to C event logging routines. See evlog.c for more details. FORTRAN character variables are so unportable that guaranteeing that U can parse a variable length argument list is next to impossible. This provides very basic event logging functionality. CALL EVON() enable logging. CALL EVOFF() disable logging. CALL EVBGIN("event description") push event onto state stack CALL EVEND("event description") pop event off state stack CALL EVENT("event description") log occurence of event that doesn't change state stack */ #include #ifdef IPSC #define bcopy(a, b, n) memcpy((b), (a), (n)) #endif #if 0 #if defined(ULTRIX) || defined(SGI) || defined(NEXT) || defined(HPUX) || \ defined(KSR) || defined(DECOSF) extern void *malloc(); #else extern char *malloc(); #endif #endif #include "evlog.h" /* These to get portable FORTRAN interface ... these routines will not be called from C which has the superior evlog interface */ #if (defined(AIX) || defined(NEXT) || defined(HPUX)) && !defined(EXTNAME) #define evon_ evon #define evoff_ evoff #define evbgin_ evbgin #define evend_ evend #define event_ event #endif #if (defined(CRAY) || defined(ARDENT)) #define evon_ EVON #define evoff_ EVOFF #define evbgin_ EVBGIN #define evend_ EVEND #define event_ EVENT #endif /* Define crap for handling FORTRAN character arguments */ #ifdef CRAY #include #endif #ifdef ARDENT struct char_desc { char *string; int len; }; #endif void evon_() { #ifdef EVENTLOG evlog(EVKEY_ENABLE, EVKEY_LAST_ARG); #endif } void evoff_() { #ifdef EVENTLOG evlog(EVKEY_DISABLE, EVKEY_LAST_ARG); #endif } #ifdef ARDENT void evbgin_(arg) struct char_desc *arg; { char *string = arg->string; int len = arg->len; #endif #ifdef CRAY void evbgin_(arg) _fcd arg; { char *string = _fcdtocp(arg); int len = _fcdlen(arg); #endif #if !defined(ARDENT) && !defined(CRAY) void evbgin_(string, len) char *string; int len; { #endif #ifdef EVENTLOG char *value = malloc( (unsigned) (len+1) ); if (value) { (void) bcopy(string, value, len); value[len] = '\0'; evlog(EVKEY_BEGIN, value, EVKEY_LAST_ARG); (void) free(value); } #endif } #ifdef ARDENT void evend_(arg) struct char_desc *arg; { char *string = arg->string; int len = arg->len; #endif #ifdef CRAY void evend_(arg) _fcd arg; { char *string = _fcdtocp(arg); int len = _fcdlen(arg); #endif #if !defined(CRAY) && !defined(ARDENT) void evend_(string, len) char *string; int len; { #endif #ifdef EVENTLOG char *value = malloc( (unsigned) (len+1) ); if (value) { (void) bcopy(string, value, len); value[len] = '\0'; evlog(EVKEY_END, value, EVKEY_LAST_ARG); (void) free(value); } #endif } #ifdef ARDENT void event_(arg) struct char_desc *arg; { char *string = arg->string; int len = arg->len; #endif #ifdef CRAY void event_(arg) _fcd arg; { char *string = _fcdtocp(arg); int len = _fcdlen(arg); #endif #if !defined(ARDENT) && !defined(CRAY) void event_(string, len) char *string; int len; { #endif #ifdef EVENTLOG char *value = malloc( (unsigned) (len+1) ); if (value) { (void) bcopy(string, value, len); value[len] = '\0'; evlog(EVKEY_EVENT, value, EVKEY_LAST_ARG); (void) free(value); } #endif } ga-5-3/armci/tcgmsg/ipcv4.0/cluster.h0000640005473000001440000000034411500231746016170 0ustar d3n000users/* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/cluster.h,v 1.4 1995-02-24 02:17:13 d3h325 Exp $ */ /* Define stubs for routines in cluster.c */ extern void PrintClusInfo(); extern void InitClusInfo(); extern void InitGlobal(); ga-5-3/armci/tcgmsg/ipcv4.0/synch.c0000640005473000001440000000175011621001436015623 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/synch.c,v 1.5 2002-07-17 17:20:11 vinod Exp $ */ #include "sndrcv.h" #ifdef OLDSYNC void SYNCH_(type) long *type; /* Synchronize by forcing all process to exchange a zero length message of given type with process 0. */ { long me = NODEID_(); long nproc = NNODES_(); char *buf = ""; long zero = 0; long sync = 1; long from, lenmes, i; /* First everyone sends null message to zero */ if (me == 0) for (i=1; i #include #ifdef CRAY extern bool_t xdr_char(); extern char *malloc(); #define NULL 0 #endif #ifdef SEQUENT static bool_t xdr_char(); /* below from sun distribution tape */ #define NULL 0 #endif #ifdef HPUX #define NULL 0 #endif #if defined(ULTRIX) || defined(SGI) || defined(NEXT) || defined(HPUX)|| \ defined(AIX) || defined(KSR) || defined(DECOSF) extern void *malloc(); #else extern char *malloc(); #endif #define XDR_BUF_LEN 4096 /* Size of XDR buffer in bytes */ #define XDR_DOUBLE_LEN 8 /* Size of XDR double in bytes */ #define XDR_LONG_LEN 4 /* Size of XDR long in bytes */ #define XDR_CHAR_LEN 4 /* Size of XDR char in bytes */ static char *xdrbuf_decode; static char *xdrbuf_encode; static XDR xdr_decode; static XDR xdr_encode; static int xdr_buf_allocated = 0; /* =1 if buffers allocated, 0 otherwise */ extern void Error(); void CreateXdrBuf() /* Call at start to allocate the XDR buffers */ { if (!xdr_buf_allocated) { /* Malloc the buffer space */ if ( (xdrbuf_decode = malloc((unsigned) XDR_BUF_LEN)) == (char *) NULL) Error("CreateXdrBuf: malloc of xdrbuf_decode failed", (long) XDR_BUF_LEN); if ( (xdrbuf_encode = malloc((unsigned) XDR_BUF_LEN)) == (char *) NULL) Error("CreateXdrBuf: malloc of xdrbuf_encode failed", (long) XDR_BUF_LEN); /* Associate the xdr memory streams with the buffers */ xdrmem_create(&xdr_decode, xdrbuf_decode, XDR_BUF_LEN, XDR_DECODE); xdrmem_create(&xdr_encode, xdrbuf_encode, XDR_BUF_LEN, XDR_ENCODE); xdr_buf_allocated = 1; } } void DestroyXdrBuf() /* Call to free the xdr buffers */ { if (xdr_buf_allocated) { /* Destroy the buffers and free the space */ xdr_destroy(&xdr_encode); xdr_destroy(&xdr_decode); (void) free(xdrbuf_encode); (void) free(xdrbuf_decode); xdr_buf_allocated = 0; } } int WriteXdrDouble(sock, x, n_double) int sock; double *x; long n_double; /* Write double x[n_double] to the socket translating to XDR representation. Returned is the number of bytes written to the socket. All errors are treated as fatal. */ { int nd_per_buf = (XDR_BUF_LEN-4)/XDR_DOUBLE_LEN; /* No. of XDR doubles per buf */ int status, nb=0; u_int len; long lenb; if (!xdr_buf_allocated) CreateXdrBuf(); /* Loop thru buffer loads */ while (n_double > 0) { len = (n_double > nd_per_buf) ? nd_per_buf : n_double; /* Position the xdr buffer to the beginning */ if (!xdr_setpos(&xdr_encode, (u_int) 0)) Error("WriteXdrDouble: xdr_setpos failed", (long) -1); /* Translate the buffer and then write it to the socket */ if (!xdr_array(&xdr_encode, (char **) &x, &len, (u_int) XDR_BUF_LEN, (u_int) sizeof(double), xdr_double)) Error("WriteXdrDouble: xdr_array failed", (long) -1); lenb = xdr_getpos(&xdr_encode); if ((status = WriteToSocket(sock, xdrbuf_encode, lenb)) != lenb) Error("WriteXdrDouble: WriteToSocket failed", (long) status); nb += lenb; n_double -= len; x += len; } return nb; } int ReadXdrDouble(sock, x, n_double) int sock; double *x; long n_double; /* Read double x[n_double] from the socket translating from XDR representation. Returned is the number of bytes read from the socket. All errors are treated as fatal. */ { int nd_per_buf = (XDR_BUF_LEN-4)/XDR_DOUBLE_LEN; /* No. of XDR doubles per buf */ int status, nb=0; u_int len; long lenb; if (!xdr_buf_allocated) CreateXdrBuf(); /* Loop thru buffer loads */ while (n_double > 0) { len = (n_double > nd_per_buf) ? nd_per_buf : n_double; lenb = 4 + len * XDR_DOUBLE_LEN; /* Position the xdr buffer to the beginning */ if (!xdr_setpos(&xdr_decode, (u_int) 0)) Error("ReadXdrDouble: xdr_setpos failed", (long) -1); /* Read from the socket and then translate the buffer */ if ((status = ReadFromSocket(sock, xdrbuf_decode, lenb)) != lenb) Error("ReadXdrDouble: ReadFromSocket failed", (long) status); if (!xdr_array(&xdr_decode, (char **) &x, &len, (u_int) XDR_BUF_LEN, (u_int) sizeof(double), xdr_double)) Error("ReadXdrDouble: xdr_array failed", (long) -1); nb += lenb; n_double -= len; x += len; } return nb; } int WriteXdrLong(sock, x, n_long) int sock; long *x; long n_long; /* Write long x[n_long] to the socket translating to XDR representation. Returned is the number of bytes written to the socket. All errors are treated as fatal. */ { int nd_per_buf = (XDR_BUF_LEN-4)/XDR_LONG_LEN; /* No. of XDR longs per buf */ int status, nb=0; u_int len; long lenb; if (!xdr_buf_allocated) CreateXdrBuf(); /* Loop thru buffer loads */ while (n_long > 0) { len = (n_long > nd_per_buf) ? nd_per_buf : n_long; /* Position the xdr buffer to the beginning */ if (!xdr_setpos(&xdr_encode, (u_int) 0)) Error("WriteXdrLong: xdr_setpos failed", (long) -1); /* Translate the buffer and then write it to the socket */ if (!xdr_array(&xdr_encode, (char **) &x, &len, (u_int) XDR_BUF_LEN, (u_int) sizeof(long), xdr_long)) Error("WriteXdrLong: xdr_array failed", (long) -1); lenb = xdr_getpos(&xdr_encode); if ((status = WriteToSocket(sock, xdrbuf_encode, lenb)) != lenb) Error("WriteXdrLong: WriteToSocket failed", (long) status); nb += lenb; n_long -= len; x += len; } return nb; } int ReadXdrLong(sock, x, n_long) int sock; long *x; long n_long; /* Read long x[n_long] from the socket translating from XDR representation. Returned is the number of bytes read from the socket. All errors are treated as fatal. */ { int nd_per_buf = (XDR_BUF_LEN-4)/XDR_LONG_LEN; /* No. of XDR longs per buf */ int status, nb=0; u_int len; long lenb; if (!xdr_buf_allocated) CreateXdrBuf(); /* Loop thru buffer loads */ while (n_long > 0) { len = (n_long > nd_per_buf) ? nd_per_buf : n_long; lenb = 4 + len * XDR_LONG_LEN; /* Position the xdr buffer to the beginning */ if (!xdr_setpos(&xdr_decode, (u_int) 0)) Error("ReadXdrLong: xdr_setpos failed", (long) -1); /* Read from the socket and then translate the buffer */ if ((status = ReadFromSocket(sock, xdrbuf_decode, lenb)) != lenb) Error("ReadXdrLong: ReadFromSocket failed", (long) status); if (!xdr_array(&xdr_decode, (char **) &x, &len, (u_int) XDR_BUF_LEN, (u_int) sizeof(long), xdr_long)) Error("ReadXdrLong: xdr_array failed", (long) -1); nb += lenb; n_long -= len; x += len; } return nb; } int WriteXdrChar(sock, x, n_char) int sock; char *x; long n_char; /* Write char x[n_char] to the socket translating to XDR representation. Returned is the number of bytes written to the socket. All errors are treated as fatal. */ { int nc_per_buf = (XDR_BUF_LEN-4)/XDR_CHAR_LEN; /* No. of XDR chars per buf */ int status, nb=0; u_int len; long lenb; if (!xdr_buf_allocated) CreateXdrBuf(); /* Loop thru buffer loads */ while (n_char > 0) { len = (n_char > nc_per_buf) ? nc_per_buf : n_char; /* Position the xdr buffer to the beginning */ if (!xdr_setpos(&xdr_encode, (u_int) 0)) Error("WriteXdrChar: xdr_setpos failed", (long) -1); /* Translate the buffer and then write it to the socket */ if (!xdr_array(&xdr_encode, (char **) &x, &len, (u_int) XDR_BUF_LEN, (u_int) sizeof(char), xdr_char)) Error("WriteXdrChar: xdr_array failed", (long) -1); lenb = xdr_getpos(&xdr_encode); if ((status = WriteToSocket(sock, xdrbuf_encode, lenb)) != lenb) Error("WriteXdrChar: WriteToSocket failed", (long) status); nb += lenb; n_char -= len; x += len; } return nb; } int ReadXdrChar(sock, x, n_char) int sock; char *x; long n_char; /* Read char x[n_char] from the socket translating from XDR representation. Returned is the number of bytes read from the socket. All errors are treated as fatal. */ { int nc_per_buf = (XDR_BUF_LEN-4)/XDR_CHAR_LEN; /* No. of XDR chars per buf */ int status, nb=0; u_int len; long lenb; if (!xdr_buf_allocated) CreateXdrBuf(); /* Loop thru buffer loads */ while (n_char > 0) { len = (n_char > nc_per_buf) ? nc_per_buf : n_char; lenb = 4 + len * XDR_CHAR_LEN; /* Position the xdr buffer to the beginning */ if (!xdr_setpos(&xdr_decode, (u_int) 0)) Error("ReadXdrChar: xdr_setpos failed", (long) -1); /* Read from the socket and then translate the buffer */ if ((status = ReadFromSocket(sock, xdrbuf_decode, lenb)) != lenb) Error("ReadXdrChar: ReadFromSocket failed", (long) status); if (!xdr_array(&xdr_decode, (char **) &x, &len, (u_int) XDR_BUF_LEN, (u_int) sizeof(char), xdr_char)) Error("ReadXdrChar: xdr_array failed", (long) -1); nb += lenb; n_char -= len; x += len; } return nb; } #ifdef SEQUENT /* * XDR a char */ static bool_t xdr_char(xdrs, cp) XDR *xdrs; char *cp; { int i; i = (*cp); if (!xdr_int(xdrs, &i)) { return (FALSE); } *cp = i; return (TRUE); } #endif #else /* dummy function to make this source file legitimate */ #include #include void _dummy_ZefP_() {printf("XDR:Illegal function call\n"); exit(1);} #endif ga-5-3/armci/tcgmsg/ipcv4.0/sockets.c0000640005473000001440000003151011510734026016154 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/sockets.c,v 1.12 2005-04-08 16:55:04 vinodtipparaju Exp $ */ #include #include #include #ifdef SEQUENT #include #else #include #endif #if defined(SUN) || defined(ALLIANT) || defined(ENCORE) || \ defined(SEQUENT) || defined(AIX) || \ defined(NEXT) || defined(LINUX) #include #endif #ifdef AIX #include #endif #ifdef CONVEX #include #else #include #endif #include #include #include #include #include #include #ifdef CRAY #include #include #else extern int errno; #endif #include "sndrcv.h" #include "sndrcvP.h" long WaitForSockets(int nsock, int *socks, int *list) /* Wait until one or more sockets are ready or have an exception. Returns the number of ready sockets and sets corresponding numbers in list. I.e., list[i]=k meaning sock[k] is ready. */ { fd_set ready; int i; long nready; int sockmax = 0; again: FD_ZERO(&ready); for (i=0; i sockmax) sockmax = socks[i]; } nready = (long) select(sockmax+1, &ready, (fd_set *) NULL, (fd_set *) NULL, (struct timeval *) NULL); if (nready < 0) { if (errno == EINTR) { /*fprintf(stderr,"wait in sockets got interrupted\n");*/ goto again; } else { Error("WaitForSockets: error from select", 0L); } } else { int n = 0; for (i=0; ip_proto; status = setsockopt(sock, level, TCP_NODELAY, &value, sizeof(int)); if (status != 0) Error("TcpNoDelay: setsockopt failed", (long) status); } void ShutdownAll() /* close all sockets discarding any pending data in either direction. */ { int i; for (i=0; i= 0) { (void) shutdown(SR_proc_info[i].sock, 2); (void) close(SR_proc_info[i].sock); } } int ReadFromSocket(sock, buf, lenbuf) int sock; char *buf; long lenbuf; /* Read from the socket until we get all we want. */ { int nread, status; status = lenbuf; while (lenbuf > 0) { again: if ( (nread = recv(sock, buf, (int) lenbuf, 0)) < 0) { if (errno == EINTR) goto again; else { (void) fprintf(stderr,"sock=%d, pid=%ld, nread=%d, len=%ld\n", sock, NODEID_(), nread, lenbuf); (void) fflush(stderr); status = -1; break; } } buf += nread; lenbuf -= nread; } return status; } int WriteToSocket(sock, buf, lenbuf) int sock; char *buf; long lenbuf; /* Write to the socket in packets of PACKET_SIZE bytes */ { int status = lenbuf; int nsent, len; while (lenbuf > 0) { len = (lenbuf > PACKET_SIZE) ? PACKET_SIZE : lenbuf; nsent = send(sock, buf, (int) len, 0); if (nsent < 0) { /* This is bad news */ (void) fprintf(stderr,"sock=%d, pid=%ld, nsent=%d, len=%ld\n", sock, NODEID_(), nsent, lenbuf); (void) fflush(stderr); status = -1; break; } buf += nsent; lenbuf -= nsent; } return status; } void CreateSocketAndBind(sock, port) int *sock; int *port; /* Create a socket, bind it to a wildcard internet name and return the info so that its port number may be advertised */ { unsigned int length; struct sockaddr_in server; int size = SR_SOCK_BUF_SIZE; int on = 1; #if defined(LINUX) && defined(__powerpc__) int dupsock; #endif length = sizeof (struct sockaddr_in); /* Create socket */ if ( (*sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) Error("CreateSocketAndBind: socket creation failed", (long) *sock); #if defined(LINUX) && defined(__powerpc__) if(*sock==0) dupsock = dup(*sock); *sock = dupsock; #endif if(setsockopt(*sock, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof on) == -1) Error("CreateSocketAndBind: error from setsockopt", (long) -1); /* Increase size of socket buffers to improve long message performance and increase size of message that goes asynchronously */ if(setsockopt(*sock, SOL_SOCKET, SO_RCVBUF, (char *) &size, sizeof size)) Error("CreateSocketAndBind: error setting SO_RCVBUF", (long) size); if(setsockopt(*sock, SOL_SOCKET, SO_SNDBUF, (char *) &size, sizeof size)) Error("CreateSocketAndBind: error setting SO_SNDBUF", (long) size); #ifndef ARDENT TcpNoDelay(*sock); #endif /* Name socket with wildcards */ server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = 0; if (bind(*sock, (struct sockaddr *) &server, length) < 0) Error("CreateSocketAndBind: bind failed", (long) 0); /* Find out port number etc. */ if (getsockname(*sock, (struct sockaddr *) &server, &length) < 0) Error("CreateSocketAndBind: getsockname failed", (long) 0); *port = ntohs(server.sin_port); } void ListenOnSock(sock) int sock; /* Listen for a connection on the specified socket which was created with CreateSocketAndBind */ { againlist: if (listen(sock, 1) < 0) { if (errno == EINTR) goto againlist; else Error("ListenAndAccept: listen failed", (long) 0); } if (DEBUG_) { (void) printf("process %ld out of listen on socket %d\n",NODEID_(),sock); (void) fflush(stdout); } } int AcceptConnection(sock) int sock; /* Accept a connection on the specified socket which was created with CreateSocketAndBind and listen has been called. */ { fd_set ready; struct timeval timelimit; int msgsock, nready; int size = SR_SOCK_BUF_SIZE; /* Use select to wait for someone to try and establish a connection so that we can add a short timeout to avoid hangs */ againsel: FD_ZERO(&ready); FD_SET(sock, &ready); timelimit.tv_sec = TIMEOUT_ACCEPT; timelimit.tv_usec = 0; nready = select(sock+1, &ready, (fd_set *) NULL, (fd_set *) NULL, &timelimit); if ( (nready <= 0) && (errno == EINTR) ) goto againsel; else if (nready < 0) Error("ListenAndAccept: error from select", (long) nready); else if (nready == 0) Error("ListenAndAccept: timeout waiting for connection", (long) nready); if (!FD_ISSET(sock, &ready)) Error("ListenAndAccept: out of select but not ready!", (long) nready); againacc: msgsock = accept(sock, (struct sockaddr *) NULL, (unsigned int *) NULL); if (msgsock == -1) { if (errno == EINTR) goto againacc; else Error("ListenAndAccept: accept failed", (long) msgsock); } if (DEBUG_) { (void) printf("process %ld out of accept on socket %d\n", NODEID_(),msgsock); (void) fflush(stdout); } /* Increase size of socket buffers to improve long message performance and increase size of message that goes asynchronously */ if(setsockopt(msgsock, SOL_SOCKET, SO_RCVBUF, (char *) &size, sizeof size)) Error("ListenAndAccept: error setting SO_RCVBUF", (long) size); if(setsockopt(msgsock, SOL_SOCKET, SO_SNDBUF, (char *) &size, sizeof size)) Error("ListenAndAccept: error setting SO_SNDBUF", (long) size); #ifndef ARDENT TcpNoDelay(msgsock); #endif (void) close(sock); /* will not be needing this again */ return msgsock; } int ListenAndAccept(sock) int sock; /* Listen and accept a connection on the specified socket which was created with CreateSocketAndBind */ { fd_set ready; struct timeval timelimit; int msgsock, nready; int size = SR_SOCK_BUF_SIZE; againlist: if (listen(sock, 1) < 0) { if (errno == EINTR) goto againlist; else Error("ListenAndAccept: listen failed", (long) 0); } if (DEBUG_) { (void) printf("process %ld out of listen on socket %d\n",NODEID_(),sock); (void) fflush(stdout); } /* Use select to wait for someone to try and establish a connection so that we can add a short timeout to avoid hangs */ againsel: FD_ZERO(&ready); FD_SET(sock, &ready); timelimit.tv_sec = TIMEOUT_ACCEPT; timelimit.tv_usec = 0; nready = select(sock+1, &ready, (fd_set *) NULL, (fd_set *) NULL, &timelimit); if ( (nready <= 0) && (errno == EINTR) ) goto againsel; else if (nready < 0) Error("ListenAndAccept: error from select", (long) nready); else if (nready == 0) Error("ListenAndAccept: timeout waiting for connection", (long) nready); if (!FD_ISSET(sock, &ready)) Error("ListenAndAccept: out of select but not ready!", (long) nready); againacc: msgsock = accept(sock, (struct sockaddr *) NULL, (unsigned int *) NULL); if (msgsock == -1) { if (errno == EINTR) goto againacc; else Error("ListenAndAccept: accept failed", (long) msgsock); } if (DEBUG_) { (void) printf("process %ld out of accept on socket %d\n", NODEID_(),msgsock); (void) fflush(stdout); } /* Increase size of socket buffers to improve long message performance and increase size of message that goes asynchronously */ if(setsockopt(msgsock, SOL_SOCKET, SO_RCVBUF, (char *) &size, sizeof size)) Error("ListenAndAccept: error setting SO_RCVBUF", (long) size); if(setsockopt(msgsock, SOL_SOCKET, SO_SNDBUF, (char *) &size, sizeof size)) Error("ListenAndAccept: error setting SO_SNDBUF", (long) size); #ifndef ARDENT TcpNoDelay(msgsock); #endif (void) close(sock); /* will not be needing this again */ return msgsock; } int CreateSocketAndConnect(hostname, cport) char *hostname; char *cport; /* Return the file descriptor of the socket which connects me to the remote process on hostname at port in string cport hostname = hostname of the remote process cport = asci string containing port number of remote socket */ { int sock, status; struct sockaddr_in server; struct hostent *hp; int on = 1; int size = SR_SOCK_BUF_SIZE; #ifndef SGI struct hostent *gethostbyname(); #endif #if defined(LINUX) && defined(__powerpc__) int dupsock; #endif /* Create socket */ if ( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) { (void) fprintf(stderr,"trying to connect to host=%s, port=%s\n", hostname, cport); Error("CreateSocketAndConnect: socket failed", (long) sock); } #if defined(LINUX) && defined(__powerpc__) if(sock==0) dupsock = dup(sock); sock = dupsock; #endif if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof on) == -1) Error("CreateSocketAndConnect: error setting REUSEADDR", (long) -1); /* Increase size of socket buffers to improve long message performance and increase size of message that goes asynchronously */ if(setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *) &size, sizeof size)) Error("CreateSocketAndConnect: error setting SO_RCVBUF", (long) size); if(setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char *) &size, sizeof size)) Error("CreateSocketAndConnect: error setting SO_SNDBUF", (long) size); #ifndef ARDENT TcpNoDelay(sock); #endif /* Connect socket */ server.sin_family = AF_INET; hp = gethostbyname(hostname); if (hp == 0) { (void) fprintf(stderr,"trying to connect to host=%s, port=%s\n", hostname, cport); Error("CreateSocketAndConnect: gethostbyname failed", (long) 0); } bcopy((char *) hp->h_addr, (char *) &server.sin_addr, hp->h_length); server.sin_port = htons((ushort) atoi(cport)); againcon: if ((status = connect(sock, (struct sockaddr *) &server, sizeof server)) < 0) { if (errno == EINTR) goto againcon; else { (void) fprintf(stderr,"trying to connect to host=%s, port=%s\n", hostname, cport); Error("CreateSocketAndConnect: connect failed", (long) status); } } return sock; } ga-5-3/armci/tcgmsg/ipcv4.0/shmem_cray.c0000640005473000001440000000236112115161655016636 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_SHMALLOC # define SHMALLOC shmalloc # define SHFREE shfree #endif #if HAVE_SHARE_MALLOC # define SHMALLOC share_malloc # define SHFREE share_free #endif extern char *SHMALLOC(); extern int SHFREE(); #define MAX_ADDR 20 static int next_id = 0; /* Keep track of id */ static char *shaddr[MAX_ADDR]; /* Keep track of addresses */ char *CreateSharedRegion(long *id, long *size) { char *temp; if (next_id >= MAX_ADDR) { Error("CreateSharedRegion: too many shared regions", (long) next_id); } if ( (temp = SHMALLOC((unsigned) *size)) == (char *) NULL) { Error("CreateSharedRegion: failed in SHMALLOC", (long) *size); } *id = next_id++; shaddr[*id] = temp; return temp; } long DetachSharedRegion(long id, long size, char *addr) { /* This needs improving to make more robust */ return SHFREE(addr); } long DeleteSharedRegion(long id) { /* This needs improving to make more robust */ return SHFREE(shaddr[id]); } char *AttachSharedRegion(long id, long size) { Error("AttachSharedRegion: cannot do this on SEQUENT or BALANCE", (long) -1); } ga-5-3/armci/tcgmsg/ipcv4.0/sndrcvP.h0000640005473000001440000001466511500231746016141 0ustar d3n000users/* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/sndrcvP.h,v 1.17 2002-05-14 22:12:14 d3h325 Exp $ */ /* This include file contains definitions PRIVATE to the message passing routines and not for public use. These items should not be directly manipulated even in the message passing routines, except by the appropriate lowlevel routines. Actual instances of the extern data items are declared in defglobals.h which is included by cluster.c. */ #define SNDRCVP #ifndef MSGTYPES #include "msgtypesc.h" #endif /****************************** Defines and macro definitions *****************************/ #define MAX_CLUSTER 128 /* Maximum no. of clusters */ #define MAX_SLAVE 512 /* Maximum no. of slaves per cluster */ #define MAX_PROCESS 8192 /* Maximum no. of processes */ #define TYPE_SETUP 32768 /* used for setup communication */ #define TYPE_CHECK 32769 /* used for checking communication */ #define TYPE_END 32770 /* used for propagating end message */ #define TYPE_NXTVAL (MSGINT | 32771) /* Used in nxtval */ #define TYPE_CONNECT (MSGINT | 32772) /* Used in RemoteConnect */ #define TYPE_BEGIN 32773 /* Used in pbegin and parallel */ #define TYPE_CLOCK_SYNCH 32774; /* Used to synch clocks */ #ifdef BIG_MESSAGE_PROTECTION #define BIG_MESSAGE 41943040ul /* 40Mb max message only for safety check. Change as needed.*/ #else #define BIG_MESSAGE 2147483647ul /* 2GB */ #endif /* Shared memory allocated per process .. make even multiple of page size ... usually 4096 */ #if defined(SGI) || defined(SGITFP) #define SHMEM_BUF_SIZE 262144 #endif #ifdef KSR #define SHMEM_BUF_SIZE 524288 #endif #ifdef ALLIANT #define SHMEM_BUF_SIZE 524288 #endif #ifdef ENCORE #define SHMEM_BUF_SIZE 4096 #endif #ifdef SEQUENT #define SHMEM_BUF_SIZE 16384 #endif #ifdef HPUX #define SHMEM_BUF_SIZE 262144 #endif #ifdef MACX #define SHMEM_BUF_SIZE 65536 #endif #if defined(SOLARIS) #define SHMEM_BUF_SIZE 253952 #endif #ifdef KSR_NATIVE #include "ksr.h" #undef SHMEM_BUF_SIZE #define SHMEM_BUF_SIZE KSR_SHMEM_BUF_SIZE #endif #if !defined(SHMEM_BUF_SIZE) #define SHMEM_BUF_SIZE 131072 #endif #if defined(PARTIALSPIN) && !defined(NOSPIN) #define NOSPIN #endif #define SR_SOCK_BUF_SIZE 32768 /* Size that system buffers set to */ #define PACKET_SIZE SR_SOCK_BUF_SIZE /* Internal packet size over sockets */ #define TIMEOUT_ACCEPT 180 /* timeout for connection in secs */ #define TRUE 1 #define FALSE 0 #define DEBUG_ SR_debug /* substitute name of debug flag */ /********************************************************* Global information and structures ... all begin with SR_ ********************************************************/ extern long SR_n_clus; /* No. of clusters */ extern long SR_n_proc; /* No. of processes excluding dummy master process */ extern long SR_clus_id; /* Logical id of current cluster */ extern long SR_proc_id; /* Logical id of current process */ extern long SR_debug; /* flag for debug output */ extern long SR_parallel; /* True if job started with parallel */ extern long SR_exit_on_error; /* flag to exit on error */ extern long SR_error; /* flag indicating error has been called with SR_exit_on_error == FALSE */ extern long SR_numchild; /* no. of forked processes */ extern long SR_pids[MAX_SLAVE]; /* pids of forked processes */ extern int SR_socks[MAX_PROCESS]; /* Sockets used for each process */ extern int SR_socks_proc[MAX_PROCESS]; /* Process associated with a given socket */ extern int SR_nsock; /* No. of sockets in the list */ extern long SR_using_shmem; /* 1=if shmem is used for an process, 0 if all processes are connected to this one by sockets */ /* This is used to store info from the PROCGRP file about each cluster of processes */ struct cluster_info_struct { char *user; /* user name */ char *hostname; /* hostname */ long nslave; /* no. slave on this host */ char *image; /* path executable image */ char *workdir; /* work directory */ long masterid; /* process no. of cluster master */ int swtchport; /* Switch port for alliant hippi */ }; extern struct cluster_info_struct SR_clus_info[MAX_CLUSTER]; typedef struct message_header_struct { long nodefrom; /* originating node of message */ long nodeto; /* target node of message */ long type; /* user defined type */ long length; /* length of message in bytes */ long tag; /* No. of this message for id */ } MessageHeader; /* This is used to store all info about processes */ struct process_info_struct { long clusid; /* cluster no. for this process */ long slaveid; /* slave no. in cluster 0,1,...,nslave */ long local; /* boolean flag for local/remote */ int sock; /* socket to remote process */ char *shmem; /* shared memory region */ long shmem_size; /* shared memory region size */ long shmem_id; /* shared memory region id */ char *buffer; /* shared memory message buffer */ long buflen; /* shared memory message buffer size */ MessageHeader *header; /* shared memory message header */ long semid; /* semaphore group id */ long sem_pend; /* semaphore no. posted when data pending */ long sem_read; /* semaphore no. posted when data read */ long sem_written; /* semaphore no. posted when data written */ long n_rcv; /* No. of messages received */ double nb_rcv; /* No. of bytes received */ double t_rcv; /* Time spent receiving in sec */ long n_snd; /* No. of messages sent */ double nb_snd; /* No. of bytes sent */ double t_snd; /* Time spent sending in sec */ long peeked; /* True if have peeked at socket */ MessageHeader head_peek; /* Header that we peeked at */ long *buffer_full; /* Flag indicating full buffer */ }; extern struct process_info_struct SR_proc_info[MAX_PROCESS]; ga-5-3/armci/tcgmsg/ipcv4.0/mtime.c0000640005473000001440000000424711500231746015623 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/mtime.c,v 1.4 1995-02-24 02:17:28 d3h325 Exp $ */ #include #include "sndrcv.h" long MTIME_() /* return wall clock time in centiseconds */ { return (long) (TCGTIME_()*100.0); } #if !(defined(KSR) || defined(ALLIANT)) #include #include static unsigned firstsec=0; /* Reference for timer */ static unsigned firstusec=0; /* Reference for timer */ void MtimeReset() /* Sets timer reference */ { struct timeval tp; struct timezone tzp; (void) gettimeofday(&tp,&tzp); firstsec = tp.tv_sec; firstusec = tp.tv_usec; } double TCGTIME_() /* Return wall clock time in seconds as accurately as possible */ { static int firstcall=1; double low, high; struct timeval tp; struct timezone tzp; if (firstcall) { MtimeReset(); firstcall = 0; } (void) gettimeofday(&tp,&tzp); low = (double) (tp.tv_usec>>1) - (double) (firstusec>>1); high = (double) (tp.tv_sec - firstsec); return high + 1.0e-6*(low+low); } #endif #ifdef KSR static double firsttime = 0; static double KSRTime() { long time; #pragma setregval (time, i12) /* Read timer */ asm("finop; movb8_8 %x_all_timer,%i12"); asm("finop; cxnop"); asm("finop; cxnop"); return(time * 4.0e-7); } double TCGTIME_() /* Return wall clock time in seconds as accurately as possible */ { static int firstcall = 1; if (firstcall) { firstcall = 0; MtimeReset(); } return KSRTime() - firsttime; } void MtimeReset() /* Sets timer reference */ { firsttime = KSRTime(); } #endif #ifdef ALLIANT #include struct hrcval firsttime; void MtimeReset() { hrcstamp(&firsttime); } double TCGTIME_() { double low, high; struct hrcval current; static int firstcall = 1; if (firstcall) { firstcall = 0; MtimeReset(); } hrcstamp(¤t); /* Lose a bit but does this avoid the roll problem ? */ low = (double) (current.hv_low>>1) - (double) (firsttime.hv_low>>1); high = (double) (current.hv_high - firsttime.hv_high); return (high*4294967296e-6+ 2.0*low) * 0.997e-5; } #endif ga-5-3/armci/tcgmsg/ipcv4.0/setdbg.c0000640005473000001440000000046211500231746015753 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/setdbg.c,v 1.4 1995-02-24 02:17:42 d3h325 Exp $ */ #include "sndrcv.h" #include "sndrcvP.h" void SETDBG_(value) long *value; /* set global debug flag for this process to value */ { SR_debug = *value; } ga-5-3/armci/tcgmsg/ipcv4.0/evlog.h0000640005473000001440000000306711500231746015630 0ustar d3n000users/* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/evlog.h,v 1.5 2003-06-27 13:52:54 manoj Exp $ */ /* Define EVENT and KEY values used when calling evlog. */ extern void evlog(int farg_key, ...); /* Values of keys in key value pairs */ #define EVKEY_LAST_ARG 0 /* Terminates list ... takes no value */ #define EVKEY_BEGIN 1 /* Push (char *) value onto state stack */ #define EVKEY_END 2 /* Pop (char *) value off state stack */ #define EVKEY_EVENT 3 /* Record (char *) value, no stack change */ #define EVKEY_MSG_LEN 4 /* Value is (int) mesage length SND/RCV only */ #define EVKEY_MSG_TO 5 /* Value is (int) to process id SND/RCV only */ #define EVKEY_MSG_FROM 6 /* Value is (int) from process SND/RCV only */ #define EVKEY_MSG_TYPE 7 /* Value is (int) message type SND/RCV only */ #define EVKEY_MSG_SYNC 8 /* Value is (int) message sync SND/RCV only */ #define EVKEY_STR_INT 9 /* User data value pair (char *), (int) */ #define EVKEY_STR_DBL 10 /* User data value pair (char *), (double) */ #define EVKEY_STR 11 /* User data value (char *) */ #define EVKEY_ENABLE 12 /* Enable logging ... takes no value */ #define EVKEY_DISABLE 13 /* Disable logging ... takes no value */ #define EVKEY_DUMP 14 /* Dump out the current buffer to disk */ #define EVKEY_FILENAME 15 /* Set the name of the events file */ #define EVENT_SND "Snd" /* Predefined strings for internal events */ #define EVENT_RCV "Rcv" #define EVENT_PROCESS "Process" ga-5-3/armci/tcgmsg/ipcv4.0/signals.c0000640005473000001440000000663511500231746016153 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/signals.c,v 1.11 2004-04-01 02:04:57 manoj Exp $ */ #include #include "sndrcvP.h" #if defined(SUN) || defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || \ defined(AIX) || defined(NEXT) #include #else #include #include #endif extern void Error(); int SR_caught_sigint = 0; #if (defined(ENCORE) || defined(SEQUENT) || defined(ARDENT)) # define SigType int #else # define SigType void #endif #ifndef SIG_ERR # define SIG_ERR (SigType (*)())-1 #endif #if (defined(ENCORE) || defined(SEQUENT) || defined(ARDENT)) || (defined(SUN) && !defined(SOLARIS)) SigType SigintHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigintHandler(sig) #endif int sig; { SR_caught_sigint = 1; Error("SigintHandler: signal was caught",(long) sig); } void TrapSigint() /* Trap the signal SIGINT so that we can propagate error conditions and also tidy up shared system resources in a manner not possible just by killing everyone */ { if ( signal(SIGINT, SigintHandler) == SIG_ERR) Error("TrapSigint: error from signal setting SIGINT",(long) SIGINT); } void ZapChildren() /* kill -SIGINT all of my beloved children */ { while (SR_numchild--) (void) kill((int) SR_pids[SR_numchild], SIGINT); } #if (defined(ENCORE) || defined(SEQUENT) || defined(ARDENT)) || (defined(SUN) && !defined(SOLARIS)) SigType SigchldHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else void SigchldHandler(sig) #endif int sig; { int status; #if defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || defined(NEXT) union wait ustatus; #endif #if defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || defined(NEXT) (void) wait(&ustatus); status = ustatus.w_status; #else (void) wait(&status); #endif SR_caught_sigint = 1; Error("Child process terminated prematurely, status=",(long) status); } void TrapSigchld() /* Trap SIGCHLD so that can tell if children die unexpectedly. */ { if ( signal(SIGCHLD, SigchldHandler) == SIG_ERR) Error("TrapSigchld: error from signal setting SIGCHLD", (long) SIGCHLD); } #if (defined(ENCORE) || defined(SEQUENT) || defined(ARDENT)) || (defined(SUN) && !defined(SOLARIS)) SigType SigsegvHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigsegvHandler(sig) #endif int sig; { SR_caught_sigint = 1; Error("SigsegvHandler: signal was caught",(long) sig); } void TrapSigsegv() /* parallel needs to trap the signal SIGSEGV under Solaris that is generated when interrupted in NxtVal */ { if ( signal(SIGSEGV, SigsegvHandler) == SIG_ERR) Error("TrapSigsegv: error from signal setting SIGSEGV", (long) SIGSEGV); } #if (defined(ENCORE) || defined(SEQUENT) || defined(ARDENT)) || (defined(SUN) && !defined(SOLARIS)) SigType SigtermHandler(sig, code, scp, addr) int code; struct sigcontext *scp; char *addr; #else SigType SigtermHandler(sig) #endif int sig; { SR_caught_sigint = 1; Error("SigtermHandler: signal was caught",(long) sig); } void TrapSigterm() /* parallel needs to trap the SIGTERM for batch jobs */ { if ( signal(SIGTERM, SigtermHandler) == SIG_ERR) Error("TrapSigterm: error from signal setting SIGTERM", (long) SIGTERM); } ga-5-3/armci/tcgmsg/ipcv4.0/brdcst.c0000640005473000001440000000405212115161655015767 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/brdcst.c,v 1.6 2002-07-17 17:20:11 vinod Exp $ */ #include "sndrcv.h" #include #include "sndrcvP.h" void BRDCST_(type, buf, lenbuf, originator) long *type; void *buf; long *lenbuf; long *originator; /* broadcast buffer to all other processes from process originator ... all processes call this routine specifying the same orginating process. Optimized for communicating clusters of processes ... broadcast amoung cluster masters, and then amoung slaves in a cluster. */ { long me = NODEID_(); long master = SR_clus_info[SR_clus_id].masterid; long nslave = SR_clus_info[SR_clus_id].nslave; long slaveid = me - master; long synch = 1; long lenmes, from, up, left, right; /* Process zero is at the top of the broadcast tree */ if ((me == *originator) && (me != 0)) { long zero = 0; SND_(type, buf, lenbuf, &zero, &synch); } else if ((*originator != 0) && (me == 0)) { RCV_(type, buf, lenbuf, &lenmes, originator, &from, &synch); } if ((*originator != 0) && (SR_n_proc == 2)) return; /* Special case */ /* Broadcast amoung cluster masters */ if (me == master) { up = (SR_clus_id-1)/2; left = 2*SR_clus_id + 1; right = 2*SR_clus_id + 2; up = SR_clus_info[up].masterid; left = (left < SR_n_clus) ? SR_clus_info[left].masterid : -1; right = (right < SR_n_clus) ? SR_clus_info[right].masterid : -1; if (me != 0) RCV_(type, buf, lenbuf, &lenmes, &up, &from, &synch); if (left > 0) SND_(type, buf, lenbuf, &left, &synch); if (right > 0) SND_(type, buf, lenbuf, &right, &synch); } /* Broadcast amoung local slaves */ up = master + (slaveid-1)/2; left = master + 2*slaveid + 1; right = master + 2*slaveid + 2; if (me != master) RCV_(type, buf, lenbuf, &lenmes, &up, &from, &synch); if (left < (master+nslave)) SND_(type, buf, lenbuf, &left, &synch); if (right < (master+nslave)) SND_(type, buf, lenbuf, &right, &synch); } ga-5-3/armci/tcgmsg/ipcv4.0/sema_convex.c0000640005473000001440000001610511272474200017013 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* These routines simplify the interface to semaphores for use in mutual exclusion and queuing. Hopefully I can also make this portable. An external routine Error is assumed which is called upon an error and tidies up by calling SemSetDestroyAll. In most cases errors cause an internal hard failure (by calling Error). 1) make an array of n_sem semaphores, returning the id associated with the entire set. All the semaphore values are initialized to value which should be a positve integer (queuing) or 0 (synchronization). The semaphores in the set are indexed from 0 to n_sem-1. long SemSetCreate(long n_sem, long value) 2) Decrement and test the value associated with the semaphore specified by (sem_set_id, sem_num). In effect this: if (value >= 0) { continue execution } else { wait in queue for the semaphore } decrement value void SemWait(long sem_set_id, long sem_num) 3) Increment the value associated with the semaphore specified by (sem_set_id, sem_num). If value <= 0 (i.e. there are processes in the queue) this releases the next process. void SemPost(long sem_set_id, long sem_num) 4) Return the current value associated with the semaphore sepcified by (sem_set_id, sem_num). long SemValue(long sem_set_id, long sem_num) 5) Destroy the set of semaphores. Any other processes that are accessing or try to access the semaphore set should get an error. On the SUN (all system V machines?) the semaphore sets should be destroyed explicitly before the final process exits. 0 is returned if OK. -1 implies an error. long SemSetDestroy(long sem_set_id) 6) Destroy all the semaphore sets that are known about. This is really meant for an error routine to call to try and tidy up. Though all applications could call it before the last process exits. 0 is returned if OK. -1 implies an error. long SemSetDestroyAll() */ extern void Error(); #include #include #include #include #include #define MAX_SEM_SETS 20 #define MAX_N_SEM 100 /* On the convex a semaphore is a structure but on the apollo it is an array which does not need dereferencing. Use ADDR to generate the address of a semaphore */ #ifdef APOLLO #define ADDR(x) x #else #define ADDR(x) &x #endif extern char *mktemp(); struct sem_set_struct { int n_sem; /* no. of semaphores in set */ semaphore lock[MAX_N_SEM]; /* locks for changing value */ semaphore wait[MAX_N_SEM]; /* locks for queing */ int value[MAX_N_SEM]; /* values */ }; static int num_sem_set = 0; static struct sem_set_struct *sem_sets; static int fd = -1; static char template[] = "/tmp/SEMA.XXXXXX"; static char *filename = (char *) NULL; void InitSemSets() /* Initialise sem_sets and allocate associated shmem region */ { int i, j; unsigned size = sizeof(struct sem_set_struct) * MAX_SEM_SETS; #ifndef APOLLO /* Generate scratch file to identify region ... mustn't do this on the APOLLO */ filename = mktemp(template); if ( (fd = open(filename, O_RDWR|O_CREAT, 0666)) < 0 ) Error("InitSemSets: failed to open temporary file",0); #endif sem_sets = (struct sem_set_struct *) mmap((caddr_t) 0, &size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_HASSEMAPHORE|MAP_SHARED, fd, 0); #ifdef APOLLO if (sem_sets == (struct sem_set_struct *) 0) Error("InitSemSets: mmap failed", (long) -1); #else if (sem_sets == (struct sem_set_struct *) -1) Error("InitSemSets: mmap failed", (long) -1); #endif for (i=0; i= MAX_N_SEM) ) Error("SemSetCreate: n_sem has invalid value",n_sem); if (num_sem_set == 0) InitSemSets(); else if (num_sem_set >= MAX_SEM_SETS) Error("SemSetCreate: Exceeded man no. of semaphore sets", num_sem_set); /* Initialize the values */ for (i=0; i= num_sem_set) ) Error("SemWait: invalid sem_set_id",sem_set_id); if ( (sem_num < 0) || (sem_num >= sem_sets[sem_set_id].n_sem) ) Error("SemWait: invalid semaphore number in set",sem_num); while (1) { /* Get the lock around the whole semaphore */ (void) mset(ADDR(sem_sets[sem_set_id].lock[sem_num]), 1); /* If the value is positive fall thru, else wait */ if (sem_sets[sem_set_id].value[sem_num] > 0) break; else { (void) mclear(ADDR(sem_sets[sem_set_id].lock[sem_num])); (void) mset(ADDR(sem_sets[sem_set_id].wait[sem_num]), 1); } } /* Are ready to go ... decrement the value and release lock */ sem_sets[sem_set_id].value[sem_num]--; (void) mclear(ADDR(sem_sets[sem_set_id].lock[sem_num])); } void SemPost(sem_set_id, sem_num) long sem_set_id; long sem_num; { int i; if ( (sem_set_id < 0) || (sem_set_id >= num_sem_set) ) Error("SemPost: invalid sem_set_id",sem_set_id); if ( (sem_num < 0) || (sem_num >= sem_sets[sem_set_id].n_sem) ) Error("SemPost: invalid semaphore number in set",sem_num); /* Get the lock around the whole semaphore */ (void) mset(ADDR(sem_sets[sem_set_id].lock[sem_num]), 1); /* Read and increment the value. If is now zero wake up up the queue */ sem_sets[sem_set_id].value[sem_num]++; i = sem_sets[sem_set_id].value[sem_num]; (void) mclear(ADDR(sem_sets[sem_set_id].lock[sem_num])); if (i >= 0) (void) mclear(ADDR(sem_sets[sem_set_id].wait[sem_num])); } long SemValue(sem_set_id, sem_num) long sem_set_id; long sem_num; { int i; if ( (sem_set_id < 0) || (sem_set_id >= num_sem_set) ) Error("SemValue: invalid sem_set_id",sem_set_id); if ( (sem_num < 0) || (sem_num >= sem_sets[sem_set_id].n_sem) ) Error("SemValue: invalid semaphore number in set",sem_num); /* There seems no point in getting the lock just to read the value and it seems more useful not to (e.g. debugging) */ i = sem_sets[sem_set_id].value[sem_num]; return (long) (i-1); } long SemSetDestroy(sem_set_id) long sem_set_id; { if ( (sem_set_id < 0) || (sem_set_id >= num_sem_set) ) return -1; sem_sets[sem_set_id].n_sem = 0; return (long) 0; } long SemSetDestroyAll() { long i, status=0; for (i=0; i= 0) { (void) close(fd); fd = -1; (void) unlink(filename); } status += munmap((char *) sem_sets, 0); if (status) status = -1; return status; } ga-5-3/armci/tcgmsg/ipcv4.0/tcgshmem.h0000640005473000001440000000301612115161655016321 0ustar d3n000users/* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/shmem.h,v 1.4 1995-02-24 02:17:44 d3h325 Exp $ */ /* Header file which declares stubs for the shared memory interface. Note that the input arguments switch between integers and pointers to integers depending on if they are modified on return. */ /* Create a shared region of at least size bytes, returning the actual size, the id associated with the region. The return vaue is a pointer to the the region. Any error is a hard fail. (char *) CreateSharedRegion((long *) id, (long *) size) */ extern char *CreateSharedRegion(); /* Detach a process from a shared memory region. 0 is returned on success, -1 for failure. id, size, and addr much match exactly those items returned from CreateSharedRegion long DetachSharedRegion((long) id, (long) size, (char *) addr) */ extern long DetachSharedRegion(); /* Delete a shared region from the system. This has to be done on the SUN to remove it from the system. On the Alliant the shared region disappears when the last process dies or detaches. Returns 0 on success, -1 on error. long DeleteSharedRegion( (long) id) */ extern long DeleteSharedRegion(); /* Attach to a shared memory region of known id and size. Returns the address of the mapped memory. Size must exactly match the size returned from CreateSharedRegion (which in turn is the requested size rounded up to a multiple of 4096). Any error is a hard fail. (char *) AttachSharedRegion( (long) id, (long) size)) */ extern char *AttachSharedRegion(); ga-5-3/armci/tcgmsg/ipcv4.0/error.c0000640005473000001440000000422411642635311015637 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/error.c,v 1.9 2003-05-27 22:06:51 edo Exp $ */ #include #include #include #include "sndrcvP.h" #include "sndrcv.h" #include "signals.h" #include "tcgsockets.h" #if defined(SHMEM) || defined(SYSV) #include "sema.h" #include "tcgshmem.h" #endif extern jmp_buf SR_jmp_buf; /* Jumped to on soft error */ #include extern void exit(); extern int SR_caught_sigint; void Error(string, integer) char *string; long integer; { (void) signal(SIGCHLD, SIG_DFL); /* Death of children to be expected */ (void) signal(SIGINT, SIG_IGN); (void) fflush(stdout); if (SR_caught_sigint) { (void) fprintf(stderr,"%3ld: interrupt(%d)\n",NODEID_(), SR_caught_sigint); (void) fflush(stderr); } else { (void) fprintf(stdout,"%3ld: %s %ld (%#lx).\n", NODEID_(), string, integer,integer); (void) fflush(stdout); (void) fprintf(stderr,"%3ld: %s %ld (%#lx).\n", NODEID_(), string, integer,integer); if (errno != 0) perror("system error message"); if (DEBUG_) PrintProcInfo(); } (void) fflush(stdout); (void) fflush(stderr); /* Shut down the sockets and remove shared memory and semaphores to propagate an error condition to anyone that is trying to communicate with me */ ZapChildren(); /* send interrupt to children which should trap it and call Error in the handler */ #if defined(SHMEM) || defined(SYSV) # if (defined(SGI_N32) || defined(SGITFP)) # define PARTIALSPIN # else # define NOSPIN # endif #endif #if defined(SHMEM) || defined(SYSV) #if defined(NOSPIN) || defined(PARTIALSPIN) (void) SemSetDestroyAll(); #endif (void) DeleteSharedRegion(SR_proc_info[NODEID_()].shmem_id); #endif ShutdownAll(); /* Close sockets for machines with static kernel */ /* abort(); */ if (SR_exit_on_error) exit(1); else { SR_error = 1; (void) longjmp(SR_jmp_buf, 1); /* For NXTVAL server */ } } void PARERR_(code) long *code; /* Interface from fortran to c error routine */ { Error("User detected error in FORTRAN", *code); } ga-5-3/armci/tcgmsg/ipcv4.0/stats.c0000640005473000001440000000240511500231746015640 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/stats.c,v 1.4 1995-02-24 02:17:54 d3h325 Exp $ */ #include #include "sndrcvP.h" #include "sndrcv.h" void STATS_() /* Print out communication statistics for this node */ { long me = NODEID_(); long nproc = NNODES_(); long i, msg_s, kb_s, s_s, r_s, msg_r, kb_r, s_r, r_r; (void) printf("Communication statistics for node %ld\n",me); (void) printf("-------------------------------------\n\n"); (void) printf("\ sending receiving\n\ ------------------------- -------------------------\n\ node #msgs. #kb secs kb/s #msgs. #kb secs kb/s\n\ ---- ------ ----- ---- ---- ------ ----- ---- ----\n"); for (i=0; i 0) ? kb_s / s_s : 0; msg_r = SR_proc_info[i].n_rcv; kb_r = SR_proc_info[i].nb_rcv/1024.0; s_r = SR_proc_info[i].t_rcv; r_r = (s_r > 0) ? kb_r / s_r : 0; (void) printf("%5ld%9ld%7ld%6ld%6ld%9ld%7ld%6ld%6ld\n", i, msg_s, kb_s, s_s, r_s, msg_r, kb_r, s_r, r_r); } } ga-5-3/armci/tcgmsg/ipcv4.0/sema.h0000640005473000001440000000454011500231746015436 0ustar d3n000users/* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/sema.h,v 1.4 1995-02-24 02:17:41 d3h325 Exp $ */ /* Header file declaring stubs for semaphore routines. */ /* These routines simplify the interface to semaphores for use in mutual exclusion and queuing. Hopefully I can also make this portable. Interruption by signals is not tested for. An external routine Error is assumed which is called upon an error and tidies up by calling SemSetDestroyAll. In most cases errors cause an internal hard failure (by calling Error). */ /* 1) make an array of n_sem semaphores, returning the id associated with the entire set. All the semaphore values are initialized to value which should be a positve integer (queuing) or 0 (synchronization). The semaphores in the set are indexed from 0 to n_sem-1. long SemSetCreate(long n_sem, long value) */ extern long SemSetCreate(); /* 2) Decrement and test the value associated with the semaphore specified by (sem_set_id, sem_num). In effect this: decrement value if (value >= 0) { continue execution } else { wait in queue for the semaphore } void SemWait(long sem_set_id, long sem_num) */ extern void SemWait(); /* 3) Increment the value associated with the semaphore specified by (sem_set_id, sem_num). If value <= 0 (i.e. there are processes in the queue) this releases the next process. void SemPost(long sem_set_id, long sem_num) */ extern void SemPost(); /* 4) Return the current value associated with the semaphore sepcified by (sem_set_id, sem_num). long SemValue(long sem_set_id, long sem_num) */ extern long SemValue(); /* 5) Destroy the set of semaphores. Any other processes that are accessing or try to access the semaphore set should get an error. On the SUN (all system V machines?) the semaphore sets should be destroyed explicitly before the final process exits. 0 is returned if OK. -1 implies an error. long SemSetDestroy(long sem_set_id) */ extern long SemSetDestroy(); /* 6) Destroy all the semaphore sets that are known about. This is really meant for an error routine to call to try and tidy up. Though all applications could call it before the last process exits. 0 is returned if OK. -1 implies an error. long SemSetDestroyAll() */ extern long SemSetDestroyAll(); ga-5-3/armci/tcgmsg/ipcv4.0/llog.c0000640005473000001440000000172411500231746015442 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/llog.c,v 1.6 2004-04-01 02:04:57 manoj Exp $ */ #include #include #include #include #include "sndrcv.h" #if (defined(SUN) && !defined(SOLARIS)) extern char *sprintf(); #endif #ifndef SGI extern time_t time(); #endif extern void Error(); void LLOG_() /* close and open stdin and stdout to append to a local logfile with the name log. in the current directory */ { char name[12]; time_t t; (void) sprintf(name, "log.%03ld",NODEID_()); (void) fflush(stdout); (void) fflush(stderr); if (freopen(name, "a", stdout) == (FILE *) NULL) Error("LLOG_: error re-opening stdout", (long) -1); if (freopen(name, "a", stderr) == (FILE *) NULL) Error("LLOG_: error re-opening stderr", (long) -1); (void) time(&t); (void) printf("\n\nLog file opened : %s\n\n",ctime(&t)); (void) fflush(stdout); } ga-5-3/armci/tcgmsg/ipcv4.0/pfilecopy.c0000640005473000001440000001104712115161655016502 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/pfilecopy.c,v 1.9 2004-05-07 20:45:10 pollack Exp $ */ #include #ifdef SEQUENT #include #else #include #endif #include "sndrcv.h" #include "msgtypesc.h" #if defined(ULTRIX) || defined(SGI) || defined(NEXT) || defined(HPUX) || \ defined(KSR) || defined(DECOSF) extern void *malloc(); #else extern void *malloc(); #endif extern void free(); void tcgi_pfilecopy(type, node0, filename) long *type, *node0; char *filename; /* Process node0 has a file (assumed unopened) named fname. This file will be copied to all other processes which must simultaneously invoke pfilecopy. Since the processes may be using the same directory one probably ought to make sure that each process uses a different name in the call. e.g. on node 0 pfilecopy(99, 0, 'argosin') on node 1 pfilecopy(99, 0, 'argosin_001') on node 2 pfilecopy(99, 0, 'argosin_002') */ { char *buffer; FILE *file; long length, nread=32768, len_nread=sizeof(long); long typenr = (*type & 32767) | MSGINT; /* Force user type integer */ long typebuf =(*type & 32767) | MSGCHR; if (!(buffer = malloc((unsigned) nread))) Error("pfilecopy: failed to allocate the I/O buffer",nread); if (*node0 == NODEID_()) { /* I have the original file ... open and check its size */ if ((file = fopen(filename,"r")) == (FILE *) NULL) { (void) fprintf(stderr,"me=%ld, filename = %s.\n",NODEID_(),filename); Error("pfilecopy: node0 failed to open original file", *node0); } /* Quick sanity check on the length */ (void) fseek(file, 0L, (int) 2); /* Seek to end of file */ length = ftell(file); /* Find the length of file */ (void) fseek(file, 0L, (int) 0); /* Seek to beginning of file */ if ( (length<0) || (length>1e12) ) Error("pfilecopy: the file length is -ve or very big", length); /* Send the file in chunks of nread bytes */ while (nread) { nread = fread(buffer, 1, (int) nread, file); BRDCST_(&typenr, (char *) &nread, &len_nread, node0); typenr++; if (nread) { BRDCST_(&typebuf, buffer, &nread, node0); typebuf++; } } } else { /* Open the file for the duplicate */ if ((file = fopen(filename,"w+")) == (FILE *) NULL) { (void) fprintf(stderr,"me=%ld, filename = %s.\n",NODEID_(),filename); Error("pfilecopy: failed to open duplicate file", *node0); } /* Receive data and write to file */ while (nread) { BRDCST_(&typenr, (char *) &nread, &len_nread, node0); typenr++; if (nread) { BRDCST_(&typebuf, buffer, &nread, node0); typebuf++; if (nread != (long)fwrite(buffer, 1, (int) nread, file)) Error("pfilecopy: error data to duplicate file", nread); } } } /* Tidy up the stuff we have been using */ (void) fflush(file); (void) fclose(file); (void) free(buffer); } void PFILECOPY_(type, node0, filename) long *type, *node0; char *filename; { tcgi_pfilecopy(type, node0, filename); } #ifdef IPSC #define bcopy(a, b, n) memcpy((b), (a), (n)) #endif #ifdef CRAY #include #endif #ifdef ARDENT struct char_desc { char *string; int len; }; #endif /* This crap because FORTRAN has no standard for passing strings */ #ifdef ARDENT void PFCOPY_(type, node0, arg) long *type; long *node0; struct char_desc *arg; { char *fname = arg->string; int len = arg->len; #endif #ifdef CRAY void PFCOPY_(type, node0, arg) long *type; long *node0; _fcd arg; { char *fname = _fcdtocp(arg); int len = _fcdlen(arg); #endif #if !defined(ARDENT) && !defined(CRAY) void PFCOPY_(type, node0, fname, len) long *type; long *node0; char *fname; int len; { #endif /* Fortran wrapper around pfilecopy */ char *filename; #ifdef DEBUG (void) printf("me=%d, type=%d, node0=%d, fname=%x, fname=%.8s, len=%d\n", NODEID_(), *type, *node0, fname, fname, len); #endif /* Strip trailing blanks off the file name */ while ((len > 0) && (fname[len-1] == ' ')) len--; if (len <= 0) Error("pfcopy_: file name length is toast", (long) len); /* Generate a NULL terminated string */ filename = malloc( (unsigned) (len+1) ); if (filename) { (void) bcopy(fname, filename, len); filename[len] = '\0'; } else Error("PFCOPY_: failed to malloc space for filename", (long) len); /* Now call the C routine to do the work */ tcgi_pfilecopy(type, node0, filename); (void) free(filename); } ga-5-3/armci/tcgmsg/ipcv4.0/nxtval.c0000640005473000001440000001072311621001436016013 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/nxtval.c,v 1.6 2004-04-01 02:04:57 manoj Exp $ */ #include #include #include #include #include "sndrcvP.h" #include "sndrcv.h" jmp_buf SR_jmp_buf; /* Jumped to on soft error */ void NextValueServer() /* This runs as process SR_n_proc and provides load balancing service. */ { long cnt = 0; /* actual counter */ long lencnt = sizeof cnt; /* length of cnt */ long ndone = 0; /* no. finished for this loop */ long ntermin = 0; /* no. terminated so far (pend) */ long node = -1; /* select any node */ long type = TYPE_NXTVAL; /* message type */ long buf[2]; /* buffer to get values */ long lenbuf = sizeof buf; /* length of buffer */ long mproc; /* no. of processes running loop */ long nval; /* no. of values requested */ long done_list[MAX_PROCESS]; /* list of processes finished with this loop */ long sync = 1; /* all info goes synchronously */ long on=0; long lenmes, nodefrom; SR_exit_on_error = FALSE; /* Want to return no matter what */ if (setjmp(SR_jmp_buf)) { /* Error should long jump to here */ /* (void) printf("Error long jumped to NXTVAL ... returning.\n"); */ SR_exit_on_error = TRUE; return; } SETDBG_(&on); while (1) { /* Wait for input from any node */ RCV_(&type, (char *) buf, &lenbuf, &lenmes, &node, &nodefrom, &sync); if (lenmes != lenbuf) { Error("NextValueServer: lenmes != lenbuf", lenmes); return; /* Never actually gets here as does long jump */ } mproc = buf[0]; nval = buf[1]; if (DEBUG_) (void) printf("NVS: from=%ld, mproc=%ld, ndone=%ld, ntermin=%ld\n", nodefrom, mproc, ndone, ntermin); if (mproc == 0) { /* Sending process is about to terminate. Send reply and disable sending to him. If all processes have finished return. Modified so that all processes block on waiting for message from nxtval server before terminating. nxtval only lets everyone go when all have registered termination. This is so that processes do not close their sockets while another process is doing a RCV from any node (which results in an unavoidable error condition). */ if (++ntermin == NNODES_()) { (void) signal(SIGCHLD, SIG_DFL); /* Will be dying naturally */ for (node=0; node 0) { /* This is what we are here for */ SND_(&type, (char *) &cnt, &lencnt, &nodefrom, &sync); cnt += nval; } else if (mproc < 0) { /* This process has finished the loop. Wait until all mproc processes have finished before releasing it */ done_list[ndone++] = nodefrom; if (ndone == -mproc) { while (ndone--) { nodefrom = done_list[ndone]; SND_(&type, (char *) &cnt, &lencnt, &nodefrom, &sync); } cnt = 0; ndone = 0; } } } } long NXTVAL_(mproc) long *mproc; /* Get next value of shared counter. mproc > 0 ... returns requested value mproc < 0 ... server blocks until abs(mproc) processes are queued and returns junk mproc = 0 ... indicates to server that I am about to terminate this needs to be extended so that clusters of processes with shared memory collectively get a bunch of values from the server thus reducing the overhead of calling nextvalue. */ { long server = NNODES_(); /* id of server process */ long buf[2]; long lenbuf = sizeof buf; long type = TYPE_NXTVAL; long lenmes, nodefrom; long sync = 1; long result=0; if (SR_parallel) { buf[0] = *mproc; buf[1] = 1; if (DEBUG_) { (void) printf("%2ld: nxtval: mproc=%ld\n",NODEID_(), *mproc); (void) fflush(stdout); } SND_(&type, (char *) buf, &lenbuf, &server, &sync); RCV_(&type, (char *) buf, &lenbuf, &lenmes, &server, &nodefrom, &sync); result = buf[0]; } else { /* Not running in parallel ... just do a simulation */ static int count = 0; if (*mproc == 1) result = count++; else if (*mproc == -1) { count = 0; result = 0; } else Error("nxtval: sequential version with silly mproc ", (long) *mproc); } return result; } ga-5-3/armci/tcgmsg/ipcv4.0/shmem.c0000640005473000001440000002101511500231746015611 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/shmem.c,v 1.13 2000-10-13 20:55:40 d3h325 Exp $ */ /* This stuff attempts to provide a simple interface to temporary shared memory regions, loosely modelled after that of Alliant Concentrix 5.0 Note that the input arguments switch between integers and pointers to integers depending on if they are modified on return. Create a shared region of at least size bytes, returning the actual size, the id associated with the region. The return value is a pointer to the the region. Any error is a hard fail. (char *) CreateSharedRegion((long *) id, (long *) size) Detach a process from a shared memory region. 0 is returned on success, -1 for failure. id, size, and addr must match exactly those items returned from CreateSharedRegion long DetachSharedRegion((long) id, (long) size, (char *) addr) Delete a shared region from the system. This has to be done on the SUN to remove it from the system. On the Alliant the shared region disappears when the last process dies or detaches. Returns 0 on success, -1 on error. long DeleteSharedRegion((long) id) Delete all the shared regions associated with this process. long DeleteSharedAll() Attach to a shared memory region of known id and size. Returns the address of the mapped memory. Size must exactly match the size returned from CreateSharedRegion (which in turn is the requested size rounded up to a multiple of 4096). Any error is a hard fail. (char *) AttachSharedRegion((long) id, (long) size)) */ extern void Error(); #ifdef ALLIANT #include #include extern char *valloc(); char *CreateSharedRegion(id, size) long *size, *id; { struct timeval tp; struct timezone tzp; char *temp; int status; /* Have to round up to a multiple of page size before allocating on a page boundary */ *size = ( (*size + 4095) / 4096 ) * 4096; if ( (temp = valloc((unsigned) *size)) == (char *) NULL) Error("CreateSharedRegion: failed in valloc", (long) 0); /* Now have to get a unique id ... try using time of day in centi-sec */ if ( (status = gettimeofday(&tp, &tzp)) != 0) Error("CreateSharedRegion: error from gettimeofday", (long) status); *id = (tp.tv_sec + 10000*tp.tv_usec) & 0xffffff; /* Now make the region */ if ( (status = create_shared_region(*id, temp, *size, 0)) != 0) Error("CreateSharedRegion: error from create_shared_region", (long) status); return temp; } long DetachSharedRegion( id, size, addr) long id, size; char *addr; { return detach_shared_region( id, addr, size); } long DeleteSharedRegion(id) long id; { return delete_shared_region(id); } char *AttachSharedRegion(id, size) long id, size; { char *temp; int status; if (size != (((size + 4095) / 4096) * 4096)) Error("AttachSharedRegion: input size is not multiple of 4096", (long) size); if ( (temp = valloc((unsigned) size)) == (char *) NULL) Error("AttachSharedRegion: failed in valloc", (long) 0); /* Now try to attach */ if ( (status = attach_shared_region(id, temp, size)) != 0) Error("AttachSharedRegion: error from attach_shared_region", (long) status); return temp; } #endif #if defined(SEQUENT) || defined(ENCORE) /* @**!ing SEQUENT and CRAY no elif */ #include #ifdef SEQUENT #define SHMALLOC shmalloc #define SHFREE shfree #endif #ifdef ENCORE #define SHMALLOC share_malloc #define SHFREE share_free #endif extern char *SHMALLOC(); extern int SHFREE(); #define MAX_ADDR 20 static int next_id = 0; /* Keep track of id */ static char *shaddr[MAX_ADDR]; /* Keep track of addresses */ char *CreateSharedRegion(id, size) long *size, *id; { char *temp; if (next_id >= MAX_ADDR) Error("CreateSharedRegion: too many shared regions", (long) next_id); if ( (temp = SHMALLOC((unsigned) *size)) == (char *) NULL) Error("CreateSharedRegion: failed in SHMALLOC", (long) *size); *id = next_id++; shaddr[*id] = temp; return temp; } /*ARGSUSED*/ long DetachSharedRegion( id, size, addr) long id, size; char *addr; { /* This needs improving to make more robust */ return SHFREE(addr); } long DeleteSharedRegion(id) long id; { /* This needs improving to make more robust */ return SHFREE(shaddr[id]); } /*ARGSUSED*/ char *AttachSharedRegion(id, size) long id, size; { Error("AttachSharedRegion: cannot do this on SEQUENT or BALANCE", (long) -1); } #endif /* Bizarre sequent has sysv semaphores but proprietary shmem */ /* Encore has sysv shmem but is limited to total of 16384bytes! */ #if defined(SYSV) && !defined(SEQUENT) && !defined(ENCORE) #include #include #include #include char *CreateSharedRegion(id, size) long *size, *id; { char *temp; /* Create the region */ if ( (*id = shmget(IPC_PRIVATE, (int) *size, (int) (IPC_CREAT | 00600))) < 0 ) Error("CreateSharedRegion: failed to create shared region", (long) *id); /* Attach to the region */ if ( (long) (temp = shmat((int) *id, (char *) NULL, 0)) == -1L) Error("CreateSharedRegion: failed to attach to shared region", (long) 0); return temp; } /*ARGSUSED*/ long DetachSharedRegion( id, size, addr) long id, size; char *addr; { return shmdt(addr); } long DeleteSharedRegion(id) long id; { return shmctl((int) id, IPC_RMID, (struct shmid_ds *) NULL); } /*ARGSUSED*/ char *AttachSharedRegion(id, size) long id, size; { char *temp; if ( (long) (temp = shmat((int) id, (char *) NULL, 0)) == -1L) Error("AttachSharedRegion: failed to attach to shared region", (long) 0); return temp; } #endif #if (defined(CONVEX) || defined(APOLLO)) && !defined(HPUX) #include #include #include #include #include extern char *strdup(); extern char *mktemp(); #define MAX_ID 20 static struct id_list_struct { char *addr; /* pointer to shmem region */ unsigned size; /* size of region */ char *filename; /* associated file name */ int fd; /* file descriptor */ int status; /* = 1 if in use */ } id_list[MAX_ID]; static int next_id = 0; static char template[] = "/tmp/SHMEM.XXXXXX"; char *CreateSharedRegion(id, size) long *size, *id; { char *temp; if (next_id == MAX_ID) Error("CreateSharedRegion: MAX_ID exceeded ", MAX_ID); *id = next_id; #ifdef APOLLO id_list[*id].fd = -1; #else if ( (temp = strdup(template)) == (char *) NULL) Error("CreateSharedRegion: failed to get space for filename", 0); /* Generate scratch file to identify region ... need to know this name to attach to the region so need to establish some policy before AttachtoSharedRegion can work */ id_list[*id].filename = mktemp(temp); if ( (id_list[*id].fd = open(id_list[*id].filename, O_RDWR|O_CREAT, 0666)) < 0) Error("CreateSharedRegion: failed to open temporary file",0); #endif id_list[*id].addr = mmap((caddr_t) 0, (unsigned *) size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, id_list[*id].fd, 0); #ifdef APOLLO if (id_list[*id].addr == (char *) 0) Error("CreateSharedRegion: mmap failed",-1); #else if (id_list[*id].addr == (char *) -1) Error("CreateSharedRegion: mmap failed",-1); #endif id_list[*id].size = *size; id_list[*id].status = 1; next_id++; return id_list[*id].addr; } /*ARGSUSED*/ long DetachSharedRegion( id, size, addr) long id, size; char *addr; { if ( (id < 0) || (id > next_id)) return (long) -1; if (id_list[id].status != 1) return (long) -1; id_list[id].status = 0; return (long) munmap(id_list[id].addr, 0); } long DeleteSharedRegion(id) long id; { if ( (id < 0) || (id > next_id) ) return (long) -1; if (id_list[id].status != 1) return (long) -1; (void) DetachSharedRegion(id, 0, (char *) 0); if (id_list[id].fd >= 0) { (void) close(id_list[id].fd); (void) unlink(id_list[id].filename); } return (long) 0; } /*ARGSUSED*/ char *AttachSharedRegion(id, size) long id, size; { Error("AttachSharedRegion: need mods for this to work on CONVEX", (long) -1); } long DeleteSharedAll() { long id; long status = 0; for (id=0; id #include #ifdef SEQUENT #include #else #include #endif #include "sndrcvP.h" #include "defglobals.h" #if defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT)|| defined(AIX) \ || defined(CONVEX) || defined(ARDENT) || defined(ULTRIX) \ || defined(NEXT) extern char *strdup(); extern char *strtok(); #endif extern void Error(); void InitClusInfoNotParallel() { int SR_n_clus = 0; SR_clus_info[SR_n_clus].user = "?"; SR_clus_info[SR_n_clus].hostname = "?"; SR_clus_info[SR_n_clus].nslave = 1; SR_clus_info[SR_n_clus].image = "?"; SR_clus_info[SR_n_clus].workdir = "?"; SR_clus_info[SR_n_clus].masterid = 0; } void InitClusInfo(procgrp, masterhostname) char *procgrp, *masterhostname; /* Initialize the SR_clus_info structure, SR_n_clus and SR_n_proc by parsing the PROCGRP info. The procgrp file consists of white space separated records. user host nslave image workdir Masterhostname is the name of the host running the parallel command. This routine could do with some more error checking. */ { char *user, *host, *nslave, *image, *workdir; char *white = " \t\n"; char *tmp = strdup(procgrp); int i; SR_n_clus = 0; SR_n_proc = 0; if (!tmp) Error("InitClusInfo: no memory", 0L); while (1) { user = strtok(tmp, white); tmp = (char *) NULL; if (user == (char *) NULL) break; host = strtok(tmp, white); nslave = strtok(tmp, white); image = strtok(tmp, white); workdir = strtok(tmp, white); if (workdir == (char *) NULL) Error("InitClusInfo: error parsing PROCGRP, line=",SR_n_clus+1); if (SR_n_clus == MAX_CLUSTER) Error("InitClusInfo: maximum no. of clusters exceeded", (long) MAX_CLUSTER); if (atoi(nslave) > MAX_SLAVE) Error("InitClusInfo: maximum no. of slaves per cluster exceeded", (long) MAX_SLAVE); SR_clus_info[SR_n_clus].user = strdup(user); SR_clus_info[SR_n_clus].hostname = strdup(host); SR_clus_info[SR_n_clus].nslave = atoi(nslave); SR_clus_info[SR_n_clus].image = strdup(image); SR_clus_info[SR_n_clus].workdir = strdup(workdir); SR_clus_info[SR_n_clus].masterid = SR_n_proc; if (!SR_clus_info[SR_n_clus].user || !SR_clus_info[SR_n_clus].hostname || !SR_clus_info[SR_n_clus].image || !SR_clus_info[SR_n_clus].workdir) Error("InitClusInfo: no memory 2 ", 0L); for (i=0; i #endif int NICEFTN_(ival) int *ival; /* Wrapper around nice for FORTRAN users courtesy of Rick Kendall ... C has the system interface */ { #ifndef IPSC return nice(*ival); #else return 0; #endif } ga-5-3/armci/tcgmsg/ipcv4.0/globalop.c0000640005473000001440000002054112115161655016306 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/globalop.c,v 1.8 2004-04-01 02:04:56 manoj Exp $ */ #include #ifdef SEQUENT #include #else #include #endif #include "sndrcv.h" #include "msgtypesc.h" #define TCG_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define TCG_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define TCG_ABS(a) (((a) >= 0) ? (a) : (-(a))) extern void free(); #ifndef IPSC #include "sndrcvP.h" #define GOP_BUF_SIZE 81920 static void idoop(n, op, x, work) long n; char *op; long *x, *work; { if (strncmp(op,"+",1) == 0) while(n--) *x++ += *work++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ *= *work++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = TCG_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = TCG_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register long x1 = TCG_ABS(*x), x2 = TCG_ABS(*work); *x = TCG_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register long x1 = TCG_ABS(*x), x2 = TCG_ABS(*work); *x = TCG_MIN(x1, x2); x++; work++; } else if (strncmp(op,"or",2) == 0) while(n--) { *x |= *work; x++; work++; } else Error("idoop: unknown operation requested", (long) n); } static void ddoop(n, op, x, work) long n; char *op; double *x, *work; { if (strncmp(op,"+",1) == 0) while(n--) *x++ += *work++; else if (strncmp(op,"*",1) == 0) while(n--) *x++ *= *work++; else if (strncmp(op,"max",3) == 0) while(n--) { *x = TCG_MAX(*x, *work); x++; work++; } else if (strncmp(op,"min",3) == 0) while(n--) { *x = TCG_MIN(*x, *work); x++; work++; } else if (strncmp(op,"absmax",6) == 0) while(n--) { register double x1 = TCG_ABS(*x), x2 = TCG_ABS(*work); *x = TCG_MAX(x1, x2); x++; work++; } else if (strncmp(op,"absmin",6) == 0) while(n--) { register double x1 = TCG_ABS(*x), x2 = TCG_ABS(*work); *x = TCG_MIN(x1, x2); x++; work++; } else Error("ddoop: unknown operation requested", (long) n); } /*ARGSUSED*/ void DGOP_(ptype, x, pn, op, len) double *x; long *ptype, *pn; char *op; int len; /* Global summation optimized for networks of clusters of processes. This routine is directly callable from C only. There is a wrapper that makes fortran work (see bottom of this file). */ { long me = NODEID_(); long master = SR_clus_info[SR_clus_id].masterid; long nslave = SR_clus_info[SR_clus_id].nslave; long slaveid = me - master; long synch = 1; long type = (*ptype & MSGDBL) ? *ptype : *ptype + MSGDBL; long nleft = *pn; long buflen = TCG_MIN(nleft,GOP_BUF_SIZE); /* Try to get even sized buffers */ long nbuf = (nleft-1) / buflen + 1; long zero = 0; double *tmp = x; double *work; long nb, ndo, lenmes, from, up, left, right; buflen = (nleft-1) / nbuf + 1; if (!(work = (double *) malloc((unsigned) (buflen*sizeof(double))))) Error("DGOP: failed to malloc workspace", nleft); /* This loop for pipelining and to avoid caller having to provide workspace */ while (nleft) { ndo = TCG_MIN(nleft, buflen); nb = ndo * sizeof(double); /* Do summation amoung slaves in a cluster */ up = master + (slaveid-1)/2; left = master + 2*slaveid + 1; right = master + 2*slaveid + 2; if (left < (master+nslave)) { RCV_(&type, (char *) work, &nb, &lenmes, &left, &from, &synch); ddoop(ndo, op, x, work); } if (right < (master+nslave)) { RCV_(&type, (char *) work, &nb, &lenmes, &right, &from, &synch); ddoop(ndo, op, x, work); } if (me != master) SND_(&type, (char *) x, &nb, &up, &synch); /* Do summation amoung masters */ if (me == master) { up = (SR_clus_id-1)/2; left = 2*SR_clus_id + 1; right = 2*SR_clus_id + 2; up = SR_clus_info[up].masterid; left = (left < SR_n_clus) ? SR_clus_info[left].masterid : -1; right = (right < SR_n_clus) ? SR_clus_info[right].masterid : -1; if (left > 0) { RCV_(&type, (char *) work, &nb, &lenmes, &left, &from, &synch); ddoop(ndo, op, x, work); } if (right > 0) { RCV_(&type, (char *) work, &nb, &lenmes, &right, &from, &synch); ddoop(ndo, op, x, work); } if (me != 0) SND_(&type, (char *) x, &nb, &up, &synch); } nleft -= ndo; x += ndo; type += 13; /* Temporary hack for hippi switch */ } free((char *) work); /* Zero has the results ... broadcast them back */ nb = *pn * sizeof(double); BRDCST_(&type, (char *) tmp, &nb, &zero); } void IGOP_(ptype, x, pn, op, len) long *x; long *ptype, *pn; char *op; int len; /* Global summation optimized for networks of clusters of processes. This routine is directly callable from C only. There is a wrapper that makes fortran work (see the bottom of this file). */ { long me = NODEID_(); long master = SR_clus_info[SR_clus_id].masterid; long nslave = SR_clus_info[SR_clus_id].nslave; long slaveid = me - master; long synch = 1; long type = (*ptype & MSGINT) ? *ptype : *ptype + MSGINT; long nleft = *pn; long zero = 0; long *tmp = x; long *work; long nb, ndo, lenmes, from, up, left, right; if (!(work = (long *) malloc((unsigned) (TCG_MIN(nleft,GOP_BUF_SIZE)*sizeof(long))))) Error("IGOP: failed to malloc workspace", nleft); /* This loop for pipelining and to avoid caller having to provide workspace */ while (nleft) { ndo = TCG_MIN(nleft, GOP_BUF_SIZE); nb = ndo * sizeof(long); /* Do summation amoung slaves in a cluster */ up = master + (slaveid-1)/2; left = master + 2*slaveid + 1; right = master + 2*slaveid + 2; if (left < (master+nslave)) { RCV_(&type, (char *) work, &nb, &lenmes, &left, &from, &synch); idoop(ndo, op, x, work); } if (right < (master+nslave)) { RCV_(&type, (char *) work, &nb, &lenmes, &right, &from, &synch); idoop(ndo, op, x, work); } if (me != master) SND_(&type, (char *) x, &nb, &up, &synch); /* Do summation amoung masters */ if (me == master) { up = (SR_clus_id-1)/2; left = 2*SR_clus_id + 1; right = 2*SR_clus_id + 2; up = SR_clus_info[up].masterid; left = (left < SR_n_clus) ? SR_clus_info[left].masterid : -1; right = (right < SR_n_clus) ? SR_clus_info[right].masterid : -1; if (left > 0) { RCV_(&type, (char *) work, &nb, &lenmes, &left, &from, &synch); idoop(ndo, op, x, work); } if (right > 0) { RCV_(&type, (char *) work, &nb, &lenmes, &right, &from, &synch); idoop(ndo, op, x, work); } if (me != 0) SND_(&type, (char *) x, &nb, &up, &synch); } nleft -= ndo; x += ndo; type += 13; /* Temporary hack for hippi switch */ } (void) free((char *) work); /* Zero has the results ... broadcast them back */ nb = *pn * sizeof(long); BRDCST_(&type, (char *) tmp, &nb, &zero); } #endif /* Wrapper for fortran interface ... UGH ... note that string comparisons above do NOT rely on NULL termination of the operation character string */ #ifdef CRAY #include #endif #ifdef ARDENT struct char_desc { char *string; int len; }; #endif /*ARGSUSED*/ #if defined(CRAY) || defined(CRAY) #ifdef ARDENT void dgop_(ptype, x, pn, arg) long *ptype, *pn; double *x; struct char_desc *arg; { char *op = arg->string; int len_op = arg->len; #endif #if defined(CRAY) void dgop_(ptype, x, pn, arg) long *ptype, *pn; double *x; _fcd arg; { char *op = _fcdtocp(arg); int len_op = _fcdlen(arg); #endif DGOP_(ptype, x, pn, op); } #endif /* This crap to handle FORTRAN character strings */ /*ARGSUSED*/ #if defined(CRAY) || defined(CRAY) #ifdef ARDENT void igop_(ptype, x, pn, arg) long *ptype, *pn; long *x; struct char_desc *arg; { char *op = arg->string; int len_op = arg->len; #endif #if defined(CRAY) void igop_(wrap_ptype, x, wrap_pn, arg) long *wrap_ptype, *wrap_pn; long *x; _fcd arg; { long ptype, pn; ptype = (long) *ptype; char *op = _fcdtocp(arg); int len_op = _fcdlen(arg); #endif IGOP_(ptype, x, pn, op); } #endif ga-5-3/armci/tcgmsg/ipcv4.0/shmem_alliant.c0000640005473000001440000000354112115161655017325 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_SYS_TIME_H # include #endif #if HAVE_MALLOC_H # include #endif char *CreateSharedRegion(long *id, long *size) { struct timeval tp; struct timezone tzp; char *temp; int status; /* Have to round up to a multiple of page size before allocating on a page boundary */ *size = ( (*size + 4095) / 4096 ) * 4096; if ( (temp = valloc((unsigned) *size)) == (char *) NULL) { Error("CreateSharedRegion: failed in valloc", (long) 0); } /* Now have to get a unique id ... try using time of day in centi-sec */ if ( (status = gettimeofday(&tp, &tzp)) != 0) { Error("CreateSharedRegion: error from gettimeofday", (long) status); } *id = (tp.tv_sec + 10000*tp.tv_usec) & 0xffffff; /* Now make the region */ if ( (status = create_shared_region(*id, temp, *size, 0)) != 0) { Error("CreateSharedRegion: error from create_shared_region", (long) status); } return temp; } long DetachSharedRegion(long id, long size, char *addr) { return detach_shared_region( id, addr, size); } long DeleteSharedRegion(long id) { return delete_shared_region(id); } char *AttachSharedRegion(long id, long size) { char *temp; int status; if (size != (((size + 4095) / 4096) * 4096)) { Error("AttachSharedRegion: input size is not multiple of 4096", (long) size); } if ( (temp = valloc((unsigned) size)) == (char *) NULL) { Error("AttachSharedRegion: failed in valloc", (long) 0); } /* Now try to attach */ if ( (status = attach_shared_region(id, temp, size)) != 0) { Error("AttachSharedRegion: error from attach_shared_region", (long) status); } return temp; } ga-5-3/armci/tcgmsg/ipcv4.0/srmover.c0000640005473000001440000000233111500231746016175 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/srmover.c,v 1.4 1995-02-24 02:17:53 d3h325 Exp $ */ #if defined(SEQUENT) || defined(CONVEX) #define memcpy(a ,b ,c) bcopy((b), (a), (c)) #else #include #endif void SRmover(a, b, n) char *a, *b; long n; /* Move n bytes from b to a */ { #if defined(ALLIANT) || defined(IBM) || defined(IBMNOEXT) || \ defined(CRAY) || defined(CONVEX) || defined(APOLLO) /* memcpy is fast, Cray is not actually used but alignment crap below won't work in anycase */ (void) memcpy(a, b, (int) n); #else #define UNALIGNED(a) (((unsigned long) (a)) % sizeof(int)) if (UNALIGNED(a) || UNALIGNED(b)) (void) memcpy(a, b, (int) n); /* abdicate responsibility */ else { /* Data is integer aligned ... move first n/sizeof(int) bytes as integers and the remainder as bytes */ int ni = n/sizeof(int); int *ai = (int *) a; int *bi = (int *) b; int i; #ifdef ARDENT #pragma ivdep #endif for (i=0; i #ifdef SEQUENT #include #else #include #endif #include #include #include #include #include #if defined(SUN) || defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || \ defined(AIX) || defined(NEXT) || defined(LINUX) #include #endif #include "sndrcvP.h" #include "cluster.h" #include "sndrcv.h" #include "signals.h" #include "tcgsockets.h" extern char *getenv(); #if defined(ULTRIX) || defined(SGI) || defined(NEXT) || defined(HPUX) || \ defined(KSR) || defined(DECOSF) extern void *malloc(); #else #include #endif #if 0 #if !(defined(SGI) || defined(LINUX)) extern char *strdup(); #endif #endif extern void NextValueServer(); extern void Error(); extern int WaitAll(long nchild); #if (defined(SUN) && !defined(SOLARIS)) extern char *sprintf(); #endif static char *ProcgrpFile(argc, argv) int argc; char **argv; /* Find the name of the procgrp file from 1) the first argument on the command line with .p appended 2) as 1) but also prepending $HOME/pdir/ 2) the translation of the environmental variable PROCGRP 3) the file PROCGRP in the current directory */ { char *tmp, *home; int len; struct stat buf; if (argc > 1) { len = strlen(argv[1]); tmp = malloc((unsigned) (len+3) ); (void) strcpy(tmp, argv[1]); (void) strcpy(tmp+len, ".p"); if (stat(tmp, &buf) == 0) /* try ./arg1.p */ return tmp; else (void) free(tmp); if ( (home = getenv("HOME")) != (char *) NULL ) { tmp = malloc((unsigned) (strlen(home) + len + 9)); (void) strcpy(tmp, home); (void) strcpy(tmp+strlen(home),"/pdir/"); (void) strcpy(tmp+strlen(home)+6,argv[1]); (void) strcpy(tmp+strlen(home)+6+len,".p"); (void) printf("tmp = %s\n",tmp); if (stat(tmp, &buf) == 0) /* try $HOME/pdir/arg1.p */ return tmp; else (void) free(tmp); } } if ( (tmp = getenv("PROCGRP")) != (char *) NULL ) if (stat(tmp, &buf) == 0) return tmp; return strdup("PROCGRP"); } static void SkipPastEOL(fp) FILE *fp; /* Read past first newline character */ { int test; while ( (char) (test = getc(fp)) != '\n') if (test == EOF) break; } static char *GetProcgrp(filename, len_procgrp) char *filename; long *len_procgrp; /* Read the entire contents of the PROCGRP into a NULL terminated character string. Be lazy and read the file twice, first to count the number of characters (ftell cannot be beleived?). */ { FILE *file; char *tmp, *procgrp; int status; if ( (file = fopen(filename,"r")) == (FILE *) NULL ) { (void) fprintf(stderr,"Master: PROCGRP = %s\n",filename); Error("Master: failed to open PROCGRP", (long) 0); } *len_procgrp = 0; while ( (status = getc(file)) != EOF) { if (status == '#') SkipPastEOL(file); else (*len_procgrp)++; } (*len_procgrp)++; if ( (tmp = procgrp = malloc((unsigned) *len_procgrp)) == (char *) NULL ) Error("GetProcgrp: failed in malloc", (long) *len_procgrp); (void) fseek(file, 0L, (int) 0); /* Seek to beginning of file */ while ( (status = getc(file)) != EOF) { if (status == '#') SkipPastEOL(file); else *tmp++ = (char) status; } *tmp = '\0'; if ( (int) (tmp - procgrp + 1) != *len_procgrp ) Error("GetProcgrp: screwup dimensioning procgrp", (long) *len_procgrp); (void) fclose(file); return procgrp; } char *Canonical(name) char *name; /* Use gethostbyname and return the canonicalized name. */ { struct hostent *host; if ( (host = gethostbyname(name)) != (struct hostent *) NULL ) return strdup(host->h_name); else return (char *) NULL; } static long RemoteCreate(remote_hostname, remote_username, remote_executable, argc, argv, n_clus, n_proc, clus_id, proc_id) char *remote_hostname; char *remote_username; char *remote_executable; int argc; char **argv; long n_clus; long n_proc; long clus_id; long proc_id; /* Using rsh create a process on remote_hostname running the executable in the remote file remote_executable. Through arguments pass it my hostname and the port number of a socket to conenct on. Also propagate the arguments which this program was invoked with. Listen for a connection to be established. The return value of RemoteCreate is the filedescriptor of the socket connecting the processes together. Rsh should ensure that the standard output of the remote process is connected to the local standard output and that local interrupts are propagated to the remote process. */ { char local_hostname[256], c_port[8]; char c_n_clus[8], c_n_proc[8], c_clus_id[8], c_proc_id[8]; char *argv2[256]; int sock, port, i, pid; char *tmp; /* Create and bind socket to wild card internet name */ CreateSocketAndBind(&sock, &port); /* create remote process using rsh passing master hostname and port as arguments */ if (gethostname(local_hostname, 256) || strlen(local_hostname) == 0) Error("RemoteCreate: gethostname failed", (long) 0); (void) sprintf(c_port, "%d", port); (void) sprintf(c_n_clus, "%ld", n_clus); (void) sprintf(c_n_proc, "%ld", n_proc); (void) sprintf(c_clus_id, "%ld", clus_id); (void) sprintf(c_proc_id, "%ld", proc_id); (void) printf(" Creating: host=%s, user=%s,\n\ file=%s, port=%s\n", remote_hostname, remote_username, remote_executable, c_port); pid = fork(); if (pid == 0) { /* In child process */ sleep(1); /* So that parallel can make the sockets */ #ifndef SUN if (proc_id != 0) /* Close all uneeded files */ (void) fclose(stdin); #ifdef SPARC64_GP for (i=3; i<62; i++) #else for (i=3; i<64; i++) #endif (void) close(i); #endif /* Overlay the desired executable */ if (strcmp(remote_hostname, local_hostname) != 0) { argv2[0 ] = "rsh"; argv2[1 ] = remote_hostname; argv2[2 ] = "-l"; argv2[3 ] = remote_username; argv2[4 ] = "-n"; argv2[5 ] = remote_executable; argv2[6 ] = " "; for (i=2; i 0) SR_pids[SR_numchild++] = pid; else Error("RemoteCreate: failed forking process", (long) pid); /* accept one connection */ return ListenAndAccept(sock); } int main(argc, argv) int argc; char **argv; /* This is the master process of the cluster network. a) read the procgrp file. This is found by trying in turn: 1) the first argument on the command line with .p appended 2) the translation of the environmental variable PROCGRP 3) the file PROCGRP in the current directory b) create the remote processes specified in this file, connecting to them via sockets and pass them the entire contents of the PROCGRP file in ascii c) Navigate messages to establish connections between the remote processes d) wait for all the children to finish and exit with the appropriate status */ { char hostname[256]; /* Me */ char *filename; /* The name of PROCGRP file */ char *procgrp; /* The contents of PROCGRP */ long len_procgrp; /* The length of PROCGRP */ long i, j, node, type, lenbuf, status=0, sync=1; /* Initialize all the globals */ InitGlobal(); /* Set up handler for SIGINT and SIGCHLD */ TrapSigint(); TrapSigchld(); TrapSigterm(); /* on Solaris parallel gets SIGSEGV interrupted while polling in NxtVal */ #ifdef SOLARIS TrapSigsegv(); #endif /* Generate a name for the PROCGRP file */ filename = ProcgrpFile(argc, argv); if (DEBUG_) (void) printf("PROCGRP = %s\n",filename); /* Read in the entire contents of the PROCGRP file */ procgrp = GetProcgrp(filename, &len_procgrp); /* Parse the procgrp info filling in the ClusterInfo structure and computing the number of clusters */ if (gethostname(hostname, sizeof hostname) || strlen(hostname) == 0) Error("parallel: gethostname failed?", (long) sizeof hostname); InitClusInfo(procgrp, hostname); if (DEBUG_) PrintClusInfo(); /* I am the master process so I have the highest ids */ SR_proc_id = SR_n_proc; /* Now create the remote cluster master processes */ for (i=0; i= 0) { SR_socks[SR_nsock] = SR_proc_info[i].sock; SR_socks_proc[SR_nsock] = i; SR_nsock++; } } /* Provide the next value service ... exit gracefully when get termination message from everyone or detect error */ NextValueServer(); /* Now wait patiently for everything to finish, then close all sockets and return */ status = WaitAll(SR_n_clus); if (SR_error) status = 1; ShutdownAll(); return status; } ga-5-3/armci/tcgmsg/ipcv4.0/signals.h0000640005473000001440000000031311500231746016143 0ustar d3n000users/* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/signals.h,v 1.5 2004-04-01 02:04:57 manoj Exp $ */ extern void ZapChildren(); extern void TrapSigint(); extern void TrapSigchld(); extern void TrapSigterm(); ga-5-3/armci/tcgmsg/ipcv4.0/waitall.c0000640005473000001440000000316511500231746016143 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/waitall.c,v 1.3 1995-02-24 02:18:05 d3h325 Exp $ */ #include #if defined(SUN) || defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || \ defined(AIX) || defined(NEXT) || defined(DECOSF) || defined(LINUX) #include #endif int WaitAll(nchild) long nchild; /* Wait for all children to finish and return appropriate status 0 = OK 1 = bad news */ { int status, pid, child, stat=0, lo, hi; #if defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || defined(NEXT) union wait ustatus; #endif for (child=0; child> 8) & 0xff; if ( lo == 0177 ) (void) fprintf(stderr, "(stopped by signal %d).\n", hi); else if ( (lo != 0) && (lo & 0200) ) (void) fprintf(stderr, "(killed by signal %d, dumped core).\n", lo & 0100); else if ( lo != 0 ) (void) fprintf(stderr, "(killed by signal %d).\n",lo); else (void) fprintf(stderr, "(exited with code %d).\n",hi); (void) fflush(stderr); stat = 1; } } return stat; } ga-5-3/armci/tcgmsg/ipcv4.0/pbegin.c0000640005473000001440000003704211642635311015756 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/pbegin.c,v 1.20 2005-02-22 18:47:02 manoj Exp $ */ #include #include #include #ifdef SEQUENT #include #else #include #endif #include #include #if defined(CONVEX) && defined(HPUX) #include #endif #if defined(SUN) || defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) \ || defined(CONVEX) || defined(AIX) || defined(NEXT) \ || defined(LINUX) #include #endif #if defined(SHMEM) || defined(SYSV) # if (defined(SGI_N32) || defined(SGITFP)) # define PARTIALSPIN # else # define NOSPIN # endif #endif #if defined(SOLARIS) /* See notes below on processor binding */ /*#include */ /*#include */ #endif #include "cluster.h" #include "sndrcv.h" #include "sndrcvP.h" #include "signals.h" #include "tcgsockets.h" #if defined(SHMEM) || defined(SYSV) #include "tcgshmem.h" #include "sema.h" #endif #ifdef EVENTLOG #include "evlog.h" #endif extern void exit(); extern void InitClusInfoNotParallel(); extern int WaitAll(long nchild); #if defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || \ defined(CONVEX) || defined(ARDENT) || defined(ULTRIX) || defined(AIX) || \ defined(NEXT) || defined(DECOSF) extern char *strdup(); #endif #define max(A, B) ( (A) > (B) ? (A) : (B) ) #define min(A, B) ( (A) < (B) ? (A) : (B) ) #if defined(ULTRIX) || defined(SGI) || defined(NEXT) || defined(HPUX) || \ defined(KSR) || defined(DECOSF) extern void *malloc(); #else #include #endif #ifdef IPSC #define bzero(A,N) memset((A), 0, (N)) #endif static int SR_initialized=0; long TCGREADY_() { return (long)SR_initialized; } static void ConnectAll() { long j, k, clus1, clus2, node1, node2, nslave1, nslave2; for (clus1=1; clus1 < SR_n_clus; clus1++) { node1 = SR_clus_info[clus1].masterid; nslave1 = SR_clus_info[clus1].nslave; for (clus2=0; clus2 < clus1; clus2++) { node2 = SR_clus_info[clus2].masterid; RemoteConnect(node1, node2, SR_n_proc); /* connect masters */ #if defined(SHMEM) || defined(SYSV) nslave2 = SR_clus_info[clus2].nslave; for (j=1; j= argc ) Error("pbegin: -master present but not other arguments", (long) argc); break; } if ( (i+6) >= argc ) { SR_parallel = FALSE; InitClusInfoNotParallel(); SR_n_clus=1; return; } else SR_parallel = TRUE; if (DEBUG_) { (void) printf("pbegin: assign argument values\n"); (void) fflush(stdout); } masterhostname = strdup(argv[i+1]); cport = strdup(argv[i+2]); SR_n_clus = atoi(argv[i+3]); SR_n_proc = atoi(argv[i+4]); SR_clus_id = atoi(argv[i+5]); SR_proc_id = atoi(argv[i+6]); /* Check out some of this info */ if ((SR_n_clus >= MAX_CLUSTER) || (SR_n_clus < 1)) Error("pbegin: invalid no. of clusters", SR_n_clus); if ((SR_n_proc >= MAX_PROCESS) || (SR_n_proc < 1)) Error("pbegin: invalid no. of processes", SR_n_proc); if ((SR_clus_id >= SR_n_clus) || (SR_clus_id < 0)) Error("pbegin: invalid cluster id", SR_clus_id); if ((SR_proc_id >= SR_n_proc) || (SR_proc_id < 0)) Error("pbegin: invalid process id", SR_proc_id); /* Close all files we don't need. Process 0 keeps stdin/out/err. All others only stdout/err. */ if (SR_clus_id != 0) (void) fclose(stdin); #ifdef SPARC64_GP for (i=3; i<62; i++) #else for (i=3; i<64; i++) #endif (void) close((int) i); /* Connect to the master process which will have process id equal to the number of processes */ if (DEBUG_) { (void) printf("pbegin: %ld CreateSocketAndConnect\n",NODEID_()); (void) fflush(stdout); } masterid = SR_n_proc; SR_proc_info[SR_n_proc].sock = CreateSocketAndConnect(masterhostname, cport); /* Now we have initialized this info we should be able to use the standard interface routines rather than accessing the SR variables directly */ /* Get the procgrp from the master process Note that byteordering and word length start to be an issue. */ if (DEBUG_) { (void) printf("pbegin: %ld get len_pgrp\n",NODEID_()); (void) fflush(stdout); } type = TYPE_BEGIN | MSGINT; lenbuf = sizeof(long); nodesel = masterid; RCV_(&type, (char *) &len_pgrp, &lenbuf, &lenmes, &nodesel, &nodefrom, &sync); if (DEBUG_) { (void) printf("len_pgrp = %ld\n",len_pgrp); (void) fflush(stdout); } if ( (procgrp = malloc((unsigned) len_pgrp)) == (char *) NULL ) Error("pbegin: failed to allocate procgrp",len_pgrp); if (DEBUG_) { (void) printf("pbegin: %ld get progcrp len=%ld\n",NODEID_(),len_pgrp); (void) fflush(stdout); } type = TYPE_BEGIN | MSGCHR; RCV_(&type, procgrp, &len_pgrp, &lenmes, &nodesel, &nodefrom, &sync); if (DEBUG_) { (void) printf("procgrp:\n%55s...\n",procgrp); (void) fflush(stdout); (void) fflush(stdout); } /* Parse the procgrp to fill out SR_clus_info ... it also again works out SR_n_clus and SR_n_proc ... ugh */ InitClusInfo(procgrp, masterhostname); if (DEBUG_) { PrintClusInfo(); (void) fflush(stdout); } /* Change to desired working directory ... forked processes will inherit it */ if(chdir(SR_clus_info[SR_clus_id].workdir) != 0) Error("pbegin: failed to switch to work directory", (long) -1); if (DEBUG_) { printf("%2ld: pbegin: changed to working directory %s\n", NODEID_(), SR_clus_info[SR_clus_id].workdir); (void) fflush(stdout); } /* If we have more than 1 process in this cluster we have to create the shared memory and semaphores and fork the processes partitioning out the resources */ SR_using_shmem = 0; #if defined(SHMEM) || defined(SYSV) me = NODEID_(); nslave = SR_clus_info[SR_clus_id].nslave; if (nslave > 1) { SR_proc_info[me].shmem_size = nslave*SHMEM_BUF_SIZE + (nslave+1)*sizeof(long); SR_proc_info[me].shmem_size = ((SR_proc_info[me].shmem_size - 1)/4096)*4096 + 4096; if (DEBUG_) { (void) printf("pbegin: %ld allocate shmem, nslave=%ld\n", NODEID_(), nslave); (void) fflush(stdout); } SR_using_shmem = 1; SR_proc_info[me].shmem = CreateSharedRegion(&SR_proc_info[me].shmem_id, &SR_proc_info[me].shmem_size); if (DEBUG_) { (void) printf("pbegin: %ld allocate sema, nslave=%ld\n", NODEID_(), nslave); (void) fflush(stdout); } flags = (long *) (SR_proc_info[me].shmem + nslave*SHMEM_BUF_SIZE); (void) bzero(SR_proc_info[me].shmem, SR_proc_info[me].shmem_size); for (i=0; inodeto = -1; flags[i] = FALSE; } #if defined(NOSPIN) SR_proc_info[me].semid = SemSetCreate((long) 3*nslave, (long) 0); #else #ifdef KSR_NATIVE /* Bind myself to a processor */ KSR_BindProcess(0); if (DEBUG_) { (void) printf("pbegin: bound master process\n"); (void) fflush(stdout); } #endif #endif #if defined(SOLARIS) /* If there fewer processes than processors it appears beneficial to bind processes to processors. It also appears useful to leave the lowest numbered processors free (???). BUT ... this code is not general enough since the configured processors are not necessarily numbered consecutively and we also need to add logic to determine the list of processors that have not already been bound to a process. Need to also modify the code below for binding slaves and enable the include of processor.h and procset.h */ /* printf("binding master process %d to processor %d\n", getpid(), 31-0); if (processor_bind(P_PID, P_MYID, 31-0, (void *) NULL)) printf("binding to %d failed\n", 31-0); */ #endif for (i=1; i 0) SR_pids[SR_numchild++] = status; } masterid = SR_clus_info[SR_clus_id].masterid; for (i=masterid; i<(masterid+nslave); i++) { long slaveid = i - masterid; SR_proc_info[i].slaveid = slaveid; SR_proc_info[i].local = 1; SR_proc_info[i].sock = -1; SR_proc_info[i].shmem = SR_proc_info[masterid].shmem; SR_proc_info[i].shmem_size = SR_proc_info[masterid].shmem_size; SR_proc_info[i].shmem_id = SR_proc_info[masterid].shmem_id; #ifndef KSR_NATIVE SR_proc_info[i].header = (MessageHeader *) (SR_proc_info[i].shmem + slaveid * SHMEM_BUF_SIZE); /* SR_proc_info[i].header->nodeto = -1; */ SR_proc_info[i].buffer = ((char *) SR_proc_info[i].header) + sizeof(MessageHeader) + (sizeof(MessageHeader) % 8); SR_proc_info[i].buflen = SHMEM_BUF_SIZE - sizeof(MessageHeader) - (sizeof(MessageHeader) % 8); #ifdef NOSPIN SR_proc_info[i].semid = SR_proc_info[masterid].semid; SR_proc_info[i].sem_pend = 3*slaveid; SR_proc_info[i].sem_read = 3*slaveid + 1; SR_proc_info[i].sem_written = 3*slaveid + 2; #else SR_proc_info[i].semid = -1; #endif SR_proc_info[i].buffer_full = flags + slaveid; /* *SR_proc_info[i].buffer_full = FALSE;*/ #endif } #ifdef KSR_NATIVE /* Map the data structures onto the shared memory */ KSR_MapBufferSpace(masterid, nslave); if (DEBUG_) { (void) printf("pbegin: %2ld: Mapped buffer space\n", NODEID_()); (void) fflush(stdout); } #else /* Post read semaphore to make sends partially asynchronous */ #ifdef NOSPIN SemPost(SR_proc_info[me].semid, SR_proc_info[me].sem_read); #endif #endif #ifdef KSR_NATIVE /* Initialize the buffer space data structures */ KSR_InitBufferSpace(); if (DEBUG_) { (void) printf("pbegin: %2ld: Initialized buffer space\n", NODEID_()); (void) fflush(stdout); } #endif } #else if (SR_clus_info[SR_clus_id].nslave != 1) Error("pbegin: no shared memory on this host ... nslave=1 only", SR_clus_info[SR_clus_id].nslave); #endif /* Now have to connect everyone together */ ConnectAll(); /* If we are only using sockets we can block in select when waiting for a message */ SR_nsock = 0; for (i=0; i<(SR_n_proc+1); i++) { if (SR_proc_info[i].sock >= 0) { SR_socks[SR_nsock] = SR_proc_info[i].sock; SR_socks_proc[SR_nsock] = i; SR_nsock++; } } /* Synchronize timers before returning to application or logging any events */ (void) TCGTIME_(); type = TYPE_CLOCK_SYNCH; SYNCH_(&type); MtimeReset(); /* If logging events make the file events. */ #ifdef EVENTLOG if (eventfile=malloc((unsigned) 32)) { (void) sprintf(eventfile, "events.%03ld", NODEID_()); evlog(EVKEY_ENABLE, EVKEY_FILENAME, eventfile, EVKEY_BEGIN, EVENT_PROCESS, EVKEY_STR_INT, "Startup used (cs)", (int) (MTIME_()-start), EVKEY_STR_INT, "No. of processes", (int) NNODES_(), EVKEY_DISABLE, EVKEY_LAST_ARG); (void) free(eventfile); SYNCH_(&type); } #endif if (DEBUG_) { printf("pbegin: %2ld: Returning to application\n",NODEID_()); fflush(stdout); } } void PEND_() /* Call this to tidy up after parallel section. The cluster master is responsible for tidying up any shared memory/semaphore resources. Everyone else can just quit. Woops ... everyone should return so that FORTRAN can tidy up after itself. */ { long me = NODEID_(); long masterid = SR_clus_info[SR_clus_id].masterid; long nslave = SR_clus_info[SR_clus_id].nslave; long zero = 0; long status; #ifdef EVENTLOG long start=MTIME_(); #endif SR_initialized = 0; if (!SR_parallel) return; (void) signal(SIGCHLD, SIG_DFL); /* Death of children now OK */ (void) NXTVAL_(&zero); /* Send termination flag to nxtval server */ if (me != masterid) status = 0; else { status = WaitAll(nslave-1); /* Wait for demise of children */ #if defined(SHMEM) || defined(SYSV) if (nslave > 1) { #if defined(NOSPIN) (void) SemSetDestroyAll(); /* Ex the semaphores and shmem */ #endif (void) DeleteSharedRegion(SR_proc_info[me].shmem_id); } #endif } ShutdownAll(); /* Close sockets for machines with static kernel */ /* If logging events log end of process and dump trace */ #ifdef EVENTLOG evlog(EVKEY_ENABLE, EVKEY_END, EVENT_PROCESS, EVKEY_STR_INT, "Time (cs) waiting to finish", (int) (MTIME_()-start), EVKEY_DUMP, EVKEY_LAST_ARG); #endif /* Return to calling program unless we had an error */ if (status) exit((int) status); } void tcgi_alt_pbegin(int *argc, char **argv[]) { tcgi_pbegin(*argc, *argv); } ga-5-3/armci/tcgmsg/ipcv4.0/pbeginf.c0000640005473000001440000000074512115161655016125 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #include "srftoc.h" #include "sndrcv.h" /** * Hewlett Packard Risc box and new SparcWorks F77 2.* compilers. * Have to construct the argument list by calling FORTRAN. */ void PBEGINF_() { } /** * Alternative entry for those senstive to FORTRAN making reference * to 7 character external names */ void PBGINF_() { PBEGINF_(); } ga-5-3/armci/tcgmsg/ipcv4.0/usleep.c0000640005473000001440000000151711500231746016002 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/usleep.c,v 1.3 1995-02-24 02:18:03 d3h325 Exp $ */ #ifdef AIX #include #include #endif #include #include #ifdef STUPIDUSLEEP void USleep(us) long us; { int s = us/1000000; if (s == 0) s = 1; (void) sleep(s); } #else void USleep(us) long us; /* Sleep for the specified no. of micro-seconds ... uses the timeout on select ... it seems to be accurate to about a few centiseconds on a sun. I don't know how much system resources it eats. */ { int width=0; struct timeval timelimit; timelimit.tv_sec = (int) (us/1000000); timelimit.tv_usec = (int) (us - timelimit.tv_sec*1000000); (void) select(width, (fd_set *) 0, (fd_set *) 0, (fd_set *) 0, &timelimit); } #endif ga-5-3/armci/tcgmsg/ipcv4.0/drand48.c0000640005473000001440000000054411500231746015750 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/drand48.c,v 1.4 1995-02-24 02:17:14 d3h325 Exp $ */ #include "srftoc.h" extern long random(); extern int srandom(); double DRAND48_() { return ( (double) random() ) * 4.6566128752458e-10; } void SRAND48_(seed) unsigned *seed; { (void) srandom(*seed); } ga-5-3/armci/tcgmsg/ipcv4.0/tcgsockets.h0000640005473000001440000000056312115161655016667 0ustar d3n000users/* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/sockets.h,v 1.5 2000-09-30 19:04:22 d3g681 Exp $ */ extern void ShutdownAll(); extern int ReadFromSocket(); extern int WriteToSocket(); extern void CreateSocketAndBind(); extern int ListenAndAccept(); extern int CreateSocketAndConnect(); extern long PollSocket(); extern long WaitForSockets(int nsock, int *socks, int *list); ga-5-3/armci/tcgmsg/ipcv4.0/sema_sgius.c0000640005473000001440000001435411272474200016647 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* These routines simplify the interface to semaphores for use in mutual exclusion and queuing. Hopefully I can also make this portable. An external routine Error is assumed which is called upon an error and tidies up by calling SemSetDestroyAll. In most cases errors cause an internal hard failure (by calling Error). 1) make an array of n_sem semaphores, returning the id associated with the entire set. All the semaphore values are initialized to value which should be a positve integer (queuing) or 0 (synchronization). The semaphores in the set are indexed from 0 to n_sem-1. long SemSetCreate(long n_sem, long value) 2) Decrement and test the value associated with the semaphore specified by (sem_set_id, sem_num). In effect this: if (value >= 0) { continue execution } else { wait in queue for the semaphore } decrement value void SemWait(long sem_set_id, long sem_num) 3) Increment the value associated with the semaphore specified by (sem_set_id, sem_num). If value <= 0 (i.e. there are processes in the queue) this releases the next process. void SemPost(long sem_set_id, long sem_num) 4) Return the current value associated with the semaphore sepcified by (sem_set_id, sem_num). long SemValue(long sem_set_id, long sem_num) 5) Destroy the set of semaphores. Any other processes that are accessing or try to access the semaphore set should get an error. On the SUN (all system V machines?) the semaphore sets should be destroyed explicitly before the final process exits. 0 is returned if OK. -1 implies an error. long SemSetDestroy(long sem_set_id) 6) Destroy all the semaphore sets that are known about. This is really meant for an error routine to call to try and tidy up. Though all applications could call it before the last process exits. 0 is returned if OK. -1 implies an error. long SemSetDestroyAll() */ extern void Error(); /* SGI fast US library semaphores ... aren't any faster than system V semaphores ... implement using spin locks */ #include #include #define MAX_SEMA 512 static volatile int *val; #define NAME_LEN 200 #ifdef SGI # include static usptr_t *arena_ptr; static ulock_t *locks[MAX_SEMA]; static char arena_name[NAME_LEN]; # define EIGHT 8 # define LOCK ussetlock # define UNLOCK usunsetlock #define JUMP EIGHT #include "sndrcvP.h" extern char *getenv(const char *); long SemSetCreate(long n_sem, long value) { int i; char *tmp; if (!(tmp = getenv("ARENA_DIR"))) tmp = "/tmp"; sprintf(arena_name,"%s/tcgmsg.arena.%ld",tmp, (long)getpid()); #ifdef PRIVATE_ARENA (void) usconfig(CONF_ARENATYPE, US_SHAREDONLY); #endif (void) usconfig(CONF_INITUSERS, (unsigned int)SR_clus_info[SR_clus_id].nslave ); #ifdef SGI (void) usconfig(CONF_INITSIZE, 1024*1024); #endif if (!(arena_ptr = usinit(arena_name))) Error("SemSetCreate: failed to create arena", 0L); /* Magic factors of EIGHT here to ensure that values are in different cache lines to avoid aliasing -- good on SGI and Convex */ if (!(val = (int *) usmalloc(EIGHT*MAX_SEMA*sizeof(int), arena_ptr))) Error("SemSetCreate: failed to get shmem", (long) (MAX_SEMA*sizeof(int))); for (i=0; i #include #include #include #include #define SIXTEEN 16 #define JUMP SIXTEEN typedef struct{ int state; int pad[15]; } lock_t; static lock_t *locks; # define LOCK(x) set_lock(&x.state) # define UNLOCK(x) unset_lock(&x.state) # define INILOCK(x) init_lock(&x.state) void init_lock(int * volatile ip) { *ip = 1; } void set_lock(int * volatile ip) { while (1) { while (!(*ip)); if (__ldcws32(ip)) break; } } void unset_lock(int *ip) { *ip = 1; asm("sync"); } static int fd = -1; static char template[] = "/tmp/SEMA.XXXXXX"; static char *filename = (char *) NULL; static unsigned shmem_size; long SemSetCreate(long n_sem, long value) { int i; shmem_size = SIXTEEN*MAX_SEMA*sizeof(int)+MAX_SEMA*sizeof(lock_t); if ( (n_sem <= 0) || (n_sem >= MAX_SEMA) ) Error("SemSetCreate: n_sem has invalid value",n_sem); /* allocate shared memory for locks and semaphore val */ filename = mktemp(template); if ( (fd = open(filename, O_RDWR|O_CREAT, 0666)) < 0 ) Error("SemSetCreate: failed to open temporary file",0); val = (int *) mmap((caddr_t) 0, shmem_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|CNX_MAP_SEMAPHORE|MAP_SHARED, fd, 0); locks = (lock_t*)( val + SIXTEEN*MAX_SEMA); /* initialize locks and semaphore values */ for (i=0; i= MAX_SEMA) ) Error("SemWait: invalid sem_num",sem_num); while (value<=0) { LOCK(locks[sem_num]); value = val[off]; if (value>0) val[off]--; UNLOCK(locks[sem_num]); if (value<=0) Dummy(); } } void SemPost(long sem_set_id, long sem_num) { int off = sem_num*JUMP; if ( (sem_num < 0) || (sem_num >= MAX_SEMA) ) Error("SemPost: invalid sem_num",sem_num); LOCK(locks[sem_num]); val[off]++; UNLOCK(locks[sem_num]); } long SemValue(long sem_set_id, long sem_num) { Error("SemValue: not implemented", sem_num); return 1; } long SemSetDestroy(long sem_set_id) { return(SemSetDestroyAll()); } ga-5-3/armci/tcgmsg/ipcv4.0/nodeid.c0000640005473000001440000000042611500231746015745 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/nodeid.c,v 1.4 1995-02-24 02:17:32 d3h325 Exp $ */ #include "sndrcv.h" #include "sndrcvP.h" long NODEID_() /* return logical node no. of current process */ { return SR_proc_id; } ga-5-3/armci/tcgmsg/ipcv4.0/sema_macx.c0000640005473000001440000001411211272474200016435 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* These routines simplify the interface to semaphores for use in mutual exclusion and queuing. Hopefully I can also make this portable. An external routine Error is assumed which is called upon an error and tidies up by calling SemSetDestroyAll. In most cases errors cause an internal hard failure (by calling Error). 1) make an array of n_sem semaphores, returning the id associated with the entire set. All the semaphore values are initialized to value which should be a positve integer (queuing) or 0 (synchronization). The semaphores in the set are indexed from 0 to n_sem-1. long SemSetCreate(long n_sem, long value) 2) Decrement and test the value associated with the semaphore specified by (sem_set_id, sem_num). In effect this: if (value >= 0) { continue execution } else { wait in queue for the semaphore } decrement value void SemWait(long sem_set_id, long sem_num) 3) Increment the value associated with the semaphore specified by (sem_set_id, sem_num). If value <= 0 (i.e. there are processes in the queue) this releases the next process. void SemPost(long sem_set_id, long sem_num) 4) Return the current value associated with the semaphore sepcified by (sem_set_id, sem_num). long SemValue(long sem_set_id, long sem_num) 5) Destroy the set of semaphores. Any other processes that are accessing or try to access the semaphore set should get an error. On the SUN (all system V machines?) the semaphore sets should be destroyed explicitly before the final process exits. 0 is returned if OK. -1 implies an error. long SemSetDestroy(long sem_set_id) 6) Destroy all the semaphore sets that are known about. This is really meant for an error routine to call to try and tidy up. Though all applications could call it before the last process exits. 0 is returned if OK. -1 implies an error. long SemSetDestroyAll() */ extern void Error(); #include #include #include #include #include #define MAX_SEMA 32 static int fd = -1; static char template[] = "/tmp/SEMA.XXXXXX"; static char *filename = (char *) NULL; static unsigned shmem_size; #if defined(NAMED_SEMAPHORES_SUPPORTED) static sem_t *sem_arr; long SemSetCreate(long n_sem, long value) { int i; shmem_size = MAX_SEMA*sizeof(sem_t); if ( (n_sem <= 0) || (n_sem >= MAX_SEMA) ) Error("SemSetCreate: n_sem has invalid value",n_sem); /* allocate shared memory for locks and semaphore val */ filename = mktemp(template); if ( (fd = shm_open(filename, O_CREAT|O_RDWR, 0666)) < 0 ) Error("SemSetCreate: failed to open temporary shm file",0); sem_arr = (sem_t*) mmap((caddr_t)0, shmem_size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_HASSEMAPHORE|MAP_SHARED, fd, (off_t)0); if(!sem_arr)Error("SemSetCreate: failed to mmap",0); /* initialize locks and semaphore values */ for (i=0; i= MAX_SEMA) ) Error("SemWait: invalid sem_num",sem_num); if(sem_wait(sem_arr+sem_num)<0) Error("SemWait: failed",sem_num); } void SemPost(long sem_set_id, long sem_num) { if ( (sem_num < 0) || (sem_num >= MAX_SEMA) ) Error("SemPost: invalid sem_num",sem_num); if(sem_post(sem_arr+sem_num)<0) Error("SemPost: failed",sem_num); } long SemValue(long sem_set_id, long sem_num) { Error("SemValue: not implemented", sem_num); return 1L; } #else typedef struct{ int state; int pad[15]; } lock_t; static lock_t *locks; static char template1[] = "/tmp/SEMA1.XXXXXX"; static char *filename1 = (char *) NULL; static sem_t *sem; static lock_t *locks; #include long SemSetCreate(long n_sem, long value) { int i; shmem_size = MAX_SEMA*sizeof(lock_t); if ( (n_sem <= 0) || (n_sem >= MAX_SEMA) ) Error("SemSetCreate: n_sem has invalid value",n_sem); /* allocate shared memory for locks and semaphore val */ locks = (lock_t*) mmap((caddr_t)0, shmem_size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, -1, (off_t)0); if(locks == (lock_t*)-1)Error("SemSetCreate: failed to mmap",shmem_size); filename1 = mktemp(template1); sem = sem_open(filename1, O_CREAT|O_EXCL, 0666, 1); if(!sem)Error("SemSetCreate: failed to sem_open",0); /* initialize locks and semaphore values */ bzero(locks,shmem_size); return 1L; } long SemSetDestroyAll() { long status=0; status = munmap((char *) locks, shmem_size); if(status)status = -1; sem_unlink(filename1); return status; } double __tcgmsg_fred__=0.0; void Dummy() { int n = 200; /* This seems optimal */ while(n--) __tcgmsg_fred__++; } void SemWait(long sem_set_id, long sem_num) { int value = 0, count=0; if ( (sem_num < 0) || (sem_num >= MAX_SEMA) ) Error("SemWait: invalid sem_num",sem_num); while (value<=0) { if(sem_wait(sem)<0)Error("SemWait: sem_op error",sem_num);; value = locks[sem_num].state; if (value>0) locks[sem_num].state--; if(sem_post(sem)<0)Error("SemWait: sem_op error",sem_num);; if (value<=0) Dummy(); count++; if(count%1000 == 999)usleep(1); } } void SemPost(long sem_set_id, long sem_num) { if ( (sem_num < 0) || (sem_num >= MAX_SEMA) ) Error("SemPost: invalid sem_num",sem_num); if(sem_wait(sem)<0)Error("SemPost: sem_op error",sem_num);; locks[sem_num].state++; if(sem_post(sem)<0)Error("SemWait: sem_op error",sem_num);; } long SemValue(long sem_set_id, long sem_num) { if ( (sem_num < 0) || (sem_num >= MAX_SEMA) ) Error("SemVal: invalid sem_num",sem_num); return (long)locks[sem_num].state; } #endif ga-5-3/armci/tcgmsg/ipcv4.0/checkbyte.c0000640005473000001440000000075511500231746016451 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/checkbyte.c,v 1.4 1995-02-24 02:17:11 d3h325 Exp $ */ unsigned char CheckByte(c, n) unsigned char *c; long n; { /* unsigned char sum = (char) 0; while (n-- > 0) sum = sum ^ *c++; return sum; */ unsigned int sum = 0; unsigned int mask = 0xff; while (n-- > 0) sum += (int) *c++; sum = (sum + (sum>>8) + (sum>>16) + (sum>>24)) & mask; return (unsigned char) sum; } ga-5-3/armci/tcgmsg/ipcv4.0/mitob.c0000640005473000001440000000112011500231746015605 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/mitob.c,v 1.4 1995-02-24 02:17:26 d3h325 Exp $ */ #include "sndrcv.h" /* These routines use C's knowledge of the sizes of data types to generate a portable mechanism for FORTRAN to translate between bytes, integers and doubles. Note that we assume that FORTRAN integers are the same size as C longs. */ long MITOB_(n) long *n; /* Return the no. of bytes that n ints=longs occupy */ { if (*n < 0) Error("MITOB_: negative argument",*n); return (long) (*n * sizeof(long)); } ga-5-3/armci/tcgmsg/ipcv4.0/snd.c0000640005473000001440000006577212115161655015312 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/snd.c,v 1.21 2004-04-01 02:04:57 manoj Exp $ */ #include #include #ifdef SEQUENT #include #else #include #endif #ifdef AIX #include #endif #include #include #if defined(SHMEM) || defined(SYSV) # if (defined(SGI_N32) || defined(SGITFP)) # define PARTIALSPIN # else # define NOSPIN # endif #endif #if (defined(SUN) && !defined(SOLARIS)) extern char *sprintf(); #endif extern void Error(); #include "sndrcv.h" #include "sndrcvP.h" #include "tcgsockets.h" #ifdef GOTXDR #include "xdrstuff.h" #endif #if defined(SHMEM) || defined(SYSV) #if !defined(SEQUENT) && !defined(CONVEX) #include #endif #include "sema.h" #include "tcgshmem.h" #if defined(USE_SRMOVER) extern void SRmover(); #else #define SRmover(a,b,n) memcpy(a,b,n) #endif #endif #ifdef EVENTLOG #include "evlog.h" #endif extern void ListenOnSock(int sock); extern int AcceptConnection(int sock); void PrintProcInfo() /* Print out the SR_proc_info structure array for this process */ { long i; (void) fprintf(stderr,"Process info for node %ld: \n",NODEID_()); for (i=0; itype, header->nodefrom, header->nodeto, header->length, header->tag); (void) fflush(stdout); } #if defined(SHMEM) || defined(SYSV) static int DummyRoutine() {int i, sum=0; for(i=0; i<10; i++) sum += i; return sum;} static long flag(p) long *p; { #if defined(CONVEX) && defined(HPUX) asm("sync"); #endif return *p; } static void Await(p, value) long *p; long value; /* Wait until the value pointed to by p equals value. Since *ptr is volatile but cannot usually declare this include another level of procedure call to protect against compiler optimization. */ { int nspin = 0; if (DEBUG_) { printf("%2ld: Await p=%p, value=%ld\n", NODEID_(), p, value); fflush(stdout); } for (; flag(p) != value; nspin++) { #if defined(NOSPIN) && !defined(PARTIALSPIN) if (nspin < 100) (void) DummyRoutine(); else USleep((long) 10000); #else if (nspin < 10000000) (void) DummyRoutine(); else { /* printf("%2ld: Await sleeping\n", NODEID_()); fflush(stdout); */ USleep((long) 100000); } #endif } } static void rcv_local(type, buf, lenbuf, lenmes, nodeselect, nodefrom) long *type; char *buf; long *lenbuf; long *lenmes; long *nodeselect; long *nodefrom; { long me = NODEID_(); long node = *nodeselect; MessageHeader *head = SR_proc_info[node].header; long buflen = SR_proc_info[node].buflen; char *buffer = SR_proc_info[node].buffer; long nodeto, len; #ifdef NOSPIN long semid = SR_proc_info[node].semid; long sem_read = SR_proc_info[node].sem_read; long sem_written = SR_proc_info[node].sem_written; long semid_to = SR_proc_info[me].semid; long sem_pend = SR_proc_info[me].sem_pend; #endif #if !defined(NOSPIN) || defined(PARTIALSPIN) long *buffer_full = SR_proc_info[node].buffer_full; #endif /* Error checking */ if ( (buffer == (char *) NULL) || (head == (MessageHeader *) NULL) ) Error("rcv_local: invalid shared memory", (long) node); #ifdef NOSPIN if ( (semid < 0) || (sem_read < 0) || (sem_written < 0) || (semid_to < 0) || (sem_pend < 0) ) Error("rcv_local: invalid semaphore set", (long) node); #endif #ifdef NOSPIN SemWait(semid_to, sem_pend); #endif Await(&head->nodeto, me); /* Still have this possible spin */ #if defined(NOSPIN) && !defined(PARTIALSPIN) SemWait(semid, sem_written); #else Await(buffer_full, (long) TRUE); #endif /* Now have a message for me ... check the header info and copy the first block of the message. */ if (DEBUG_) PrintMessageHeader("rcv_local ",head); nodeto = head->nodeto; /* Always me ... history here */ head->nodeto = -1; *nodefrom = head->nodefrom; if (head->type != *type) { PrintMessageHeader("rcv_local ",head); /* printf("rcv_local: type mismatch ... strong typing enforced\n"); */ /* abort(); */ Error("rcv_local: type mismatch ... strong typing enforced", (long) *type); } *lenmes = len = head->length; if ( *lenmes > *lenbuf ) Error("rcv_local: message too long for buffer", (long) *lenmes); if (nodeto != me) Error("rcv_local: message meant for someone else?", (long) nodeto); if (len) (void) SRmover(buf, buffer, (len > buflen) ? buflen : len); #if defined(NOSPIN) && !defined(PARTIALSPIN) SemPost(semid, sem_read); #else *buffer_full = FALSE; # if defined(CONVEX) && defined(HPUX) asm("sync"); # endif #endif len -= buflen; buf += buflen; /* Copy the remainder of the message */ while (len > 0) { #if defined(NOSPIN) && !defined(PARTIALSPIN) SemWait(semid, sem_written); #else Await(buffer_full, (long) TRUE); #endif (void) SRmover(buf, buffer, (len > buflen) ? buflen : len); #if defined(NOSPIN) && !defined(PARTIALSPIN) SemPost(semid, sem_read); #else *buffer_full = FALSE; #endif len -= buflen; buf += buflen; } } static void snd_local(type, buf, lenbuf, node) long *type; char *buf; long *lenbuf; long *node; { long me = NODEID_(); MessageHeader *head = SR_proc_info[me].header; long buflen = SR_proc_info[me].buflen; long len = *lenbuf; char *buffer = SR_proc_info[me].buffer; long tag = SR_proc_info[*node].n_snd; #ifdef NOSPIN long semid = SR_proc_info[me].semid; long sem_read = SR_proc_info[me].sem_read; long sem_written = SR_proc_info[me].sem_written; long semid_to = SR_proc_info[*node].semid; long sem_pend = SR_proc_info[*node].sem_pend; #endif #if !defined(NOSPIN) || defined(PARTIALSPIN) long *buffer_full = SR_proc_info[me].buffer_full; #endif /* Error checking */ if ( (buffer == (char *) NULL) || (head == (MessageHeader *) NULL) ) Error("snd_local: invalid shared memory", (long) *node); #ifdef NOSPIN if ( (semid < 0) || (semid_to < 0) || (sem_read < 0) || (sem_written < 0) ) Error("snd_local: invalid semaphore set", (long) *node); #endif /* Check that final segment of last message has been consumed */ #if defined(NOSPIN) && !defined(PARTIALSPIN) SemWait(semid, sem_read); #else Await(buffer_full, (long) FALSE); #endif /* Fill in message header */ head->nodefrom = (char) me; head->type = *type; head->length = *lenbuf; head->tag = tag; head->nodeto = (char) *node; #if defined(CONVEX) && defined(HPUX) asm("sync"); #endif if (DEBUG_) { PrintMessageHeader("snd_local ",head); (void) fflush(stdout); } /* Copy the first piece of the message so that send along with header to minimize use of semaphores. Also need to send header even for messages of zero length */ if (len) (void) SRmover(buffer, buf, (len > buflen) ? buflen : len); #if defined(NOSPIN) && !defined(PARTIALSPIN) SemPost(semid, sem_written); #else *buffer_full = TRUE; # if defined(CONVEX) && defined(HPUX) asm("sync"); # endif #endif #ifdef NOSPIN SemPost(semid_to, sem_pend); #endif len -= buflen; buf += buflen; while (len > 0) { #if defined(NOSPIN) && !defined(PARTIALSPIN) SemWait(semid, sem_read); #else Await(buffer_full, (long) FALSE); #endif (void) SRmover(buffer, buf, (len > buflen) ? buflen : len); #if defined(NOSPIN) && !defined(PARTIALSPIN) SemPost(semid, sem_written); #else *buffer_full = TRUE; # if defined(CONVEX) && defined(HPUX) asm("sync"); # endif #endif len -= buflen; buf += buflen; } } #endif static void snd_remote(type, buf, lenbuf, node) long *type; char *buf; long *lenbuf; long *node; /* synchronous send to remote process long *type = user defined integer message type (input) char *buf = data buffer (input) long *lenbuf = length of buffer in bytes (input) long *node = node to send to (input) for zero length messages only the header is sent */ { #define SHORT_MSG_BUF_SIZE (2048 + 40) static char fudge[SHORT_MSG_BUF_SIZE]; MessageHeader header; long me=NODEID_(); int sock=SR_proc_info[*node].sock; long len; #ifdef SOCK_FULL_SYNC char sync=0; #endif if ( sock < 0 ) Error("snd_remote: sending to process without socket", (long) *node); header.nodefrom = me; header.nodeto = *node; header.type = *type; header.length = *lenbuf; header.tag = SR_proc_info[*node].n_snd; /* header.length is the no. of items if XDR is used or just the number of bytes */ #ifdef GOTXDR if ( *type & MSGDBL ) header.length = *lenbuf / sizeof(double); else if ( *type & MSGINT ) header.length = *lenbuf / sizeof(long); else if ( *type & MSGCHR ) header.length = *lenbuf / sizeof(char); else header.length = *lenbuf; #else header.length = *lenbuf; #endif if (DEBUG_) PrintMessageHeader("snd_remote",&header); #ifndef GOTXDR /* Combine header and messages less than a certain size to avoid * performance problem on (older?) linuxes */ if ((*lenbuf + sizeof(header)) <= sizeof(fudge)) { memcpy(fudge,(char *) &header, sizeof(header)); memcpy(fudge+sizeof(header), buf, *lenbuf); if ( (len = WriteToSocket(sock, fudge, sizeof(header)+*lenbuf)) != ((long)sizeof(header)+*lenbuf)) Error("snd_remote: writing message to socket", (long) (len+100000*(sock + 1000* *node))); return; } #endif #ifdef GOTXDR (void) WriteXdrLong(sock, (long *) &header, (long) (sizeof(header)/sizeof(long))); #else if ( (len = WriteToSocket(sock, (char *) &header, (long) sizeof(header))) != sizeof(header) ) Error("snd_remote: writing header to socket", len); #endif if (*lenbuf) { #ifdef GOTXDR if ( *type & MSGDBL ) (void) WriteXdrDouble(sock, (double *) buf, header.length); else if ( *type & MSGINT ) (void) WriteXdrLong(sock, (long *) buf, header.length); else if ( *type & MSGCHR ) (void) WriteXdrChar(sock, (char *) buf, header.length); else if ( (len = WriteToSocket(sock, buf, header.length)) != header.length) Error("snd_remote: writing message to socket", (long) (len+100000*(sock + 1000* *node))); #else if ( (len = WriteToSocket(sock, buf, header.length)) != header.length) Error("snd_remote: writing message to socket", (long) (len+100000*(sock + 1000* *node))); #endif } #ifdef SOCK_FULL_SYNC /* this read (and write in rcv_remote) of an acknowledgment forces synchronous */ if ( ReadFromSocket(sock, &sync, (long) 1) != 1) Error("snd_remote: reading acknowledgement", (long) (len+100000*(sock + 1000* *node))); #endif } /*ARGSUSED*/ void SND_(type, buf, lenbuf, node, sync) long *type; void *buf; long *lenbuf; long *node; long *sync; /* mostly syncrhonous send long *type = user defined integer message type (input) void *buf = data buffer (input) long *lenbuf = length of buffer in bytes (input) long *node = node to send to (input) long *sync = flag for sync/async ... IGNORED for zero length messages only the header is sent */ { long me=NODEID_(); long nproc=NNODES_(); #ifdef TIMINGS double start; #endif /* Error checking */ if (*node == me) Error("SND_: cannot send message to self", (long) me); if ( (*node < 0) || (*node > nproc) ) Error("SND_: out of range node requested", (long) *node); if ( (*lenbuf < 0) || (*lenbuf > (long)BIG_MESSAGE) ) Error("SND_: message length out of range", (long) *lenbuf); #ifdef EVENTLOG evlog(EVKEY_BEGIN, EVENT_SND, EVKEY_MSG_LEN, (int) *lenbuf, EVKEY_MSG_FROM, (int) me, EVKEY_MSG_TO, (int) *node, EVKEY_MSG_TYPE, (int) *type, EVKEY_MSG_SYNC, (int) *sync, EVKEY_LAST_ARG); #endif /* Send via shared memory or sockets */ #ifdef TIMINGS start = TCGTIME_(); #endif #if defined(SHMEM) || defined(SYSV) if (SR_proc_info[*node].local){ #ifdef KSR_NATIVE KSR_snd_local(type, buf, lenbuf, node); #else snd_local(type, buf, lenbuf, node); #endif } else { #endif snd_remote(type, buf, lenbuf, node); #if defined(SHMEM) || defined(SYSV) } #endif /* Collect statistics */ SR_proc_info[*node].n_snd += 1; SR_proc_info[*node].nb_snd += *lenbuf; #ifdef TIMINGS SR_proc_info[*node].t_snd += TCGTIME_() - start; #endif #ifdef EVENTLOG evlog(EVKEY_END, EVENT_SND, EVKEY_LAST_ARG); #endif } static long MatchMessage(header, me, type) MessageHeader *header; long me, type; /* Wrapper round check on if header is to me and of required type so that compiler does not optimize out fetching header info from shared memory. */ { return (long) ((header->nodeto == me) && (header->type == type)); } static long NextReadyNode(type) long type; /* Select a node from which input is pending ... also match the desired type. next_node is maintained as the last node that NextReadyNode chose plus one modulo NNODES_(). This aids in ensuring fairness. First use select to get info about the sockets and then loop through processes looking either at the bit in the fd_set for the socket (remote process) or the message header in the shared memory buffer (local process). This may be an expensive operation but fairness seems important. If only sockets are in use, just block in select until data is available. */ { static long next_node = 0; long nproc = NNODES_(); long me = NODEID_(); int i, nspin = 0; if (!SR_using_shmem) { int list[MAX_PROCESS]; int nready; nready = WaitForSockets(SR_nsock,SR_socks,list); if (nready == 0) Error("NextReadyNode: nready = 0\n", 0); /* Insert here type checking logic ... not yet done */ return SR_socks_proc[list[0]]; } /* With both local and remote processes end up with a busy wait as no way to wait for both a semaphore and a socket. Moderate this slightly by having short timeout in select */ while (1) { for(i=0; i= 0) { /* Look for message over socket */ int sock = SR_proc_info[next_node].sock; /* Have we already peeked at this socket? */ if (SR_proc_info[next_node].peeked) { if (SR_proc_info[next_node].head_peek.type == type) break; } else if (PollSocket(sock)) { /* Data is available ... let's peek at it */ #ifdef GOTXDR (void) ReadXdrLong(sock, (long *) &SR_proc_info[next_node].head_peek, (long) (sizeof(MessageHeader)/sizeof(long))); #else if (ReadFromSocket(sock, (char *) &SR_proc_info[next_node].head_peek, (long) sizeof(MessageHeader)) != sizeof(MessageHeader) ) Error("NextReadyNode: reading header from socket", next_node); #endif SR_proc_info[next_node].peeked = TRUE; if (DEBUG_) PrintMessageHeader("peeked_at ", &SR_proc_info[next_node].head_peek); if (SR_proc_info[next_node].head_peek.type == type) break; } } } if (i < nproc) /* If found a node skip out of the while loop */ break; nspin++; /* Compromise between low latency and low cpu use */ if (nspin < 10) continue; else if (nspin < 100) USleep((long) 1000); else if (nspin < 600) USleep((long) 10000); else USleep((long) 100000); } i = next_node; next_node = (next_node + 1) % nproc; return (long) i; } long PROBE_(type, node) long *type, *node; /* Return 1/0 (TRUE/FALSE) if a message of the given type is available from the given node. If the node is specified as -1, then all nodes will be examined. Some attempt is made at ensuring fairness. First use select to get info about the sockets and then loop through processes looking either at the bit in the fd_set for the socket (remote process) or the message header in the shared memory buffer (local process). This may be an expensive operation but fairness seems important. */ { long nproc = NNODES_(); long me = NODEID_(); int i, proclo, prochi; if (*node == me) Error("PROBE_ : cannot recv message from self, msgtype=", *type); if (*node == -1) { /* match anyone */ proclo = 0; prochi = nproc-1; } else proclo = prochi = *node; for(i=proclo; i<=prochi; i++) { if (i == me) { ; /* can't receive from self */ } else if (SR_proc_info[i].local) { /* Look for local message */ #ifdef KSR_NATIVE if (KSR_MatchMessage(i, me, type)) #else if (MatchMessage(SR_proc_info[i].header, me, *type)) #endif break; } else if (SR_proc_info[i].sock >= 0) { /* Look for message over socket */ int sock = SR_proc_info[i].sock; /* Have we already peeked at this socket? */ if (SR_proc_info[i].peeked) { if (SR_proc_info[i].head_peek.type == *type) break; } else if (PollSocket(sock)) { /* Data is available ... let's peek at it */ #ifdef GOTXDR (void) ReadXdrLong(sock, (long *) &SR_proc_info[i].head_peek, (long) (sizeof(MessageHeader)/sizeof(long))); #else if (ReadFromSocket(sock, (char *) &SR_proc_info[i].head_peek, (long) sizeof(MessageHeader)) != sizeof(MessageHeader) ) Error("NextReadyNode: reading header from socket", (long) i); #endif SR_proc_info[i].peeked = TRUE; if (DEBUG_) PrintMessageHeader("peeked_at ", &SR_proc_info[i].head_peek); if (SR_proc_info[i].head_peek.type == *type) break; } } } if (i <= prochi) return 1; else return 0; } static void rcv_remote(type, buf, lenbuf, lenmes, nodeselect, nodefrom) long *type; char *buf; long *lenbuf; long *lenmes; long *nodeselect; long *nodefrom; /* synchronous receive of data long *type = user defined type of received message (input) char *buf = data buffer (output) long *lenbuf = length of buffer in bytes (input) long *lenmes = length of received message in bytes (output) (exceeding receive buffer is hard error) long *nodeselect = node to receive from (input) -1 implies that any pending message may be received long *nodefrom = node message is received from (output) */ { long me = NODEID_(); long node = *nodeselect; int sock = SR_proc_info[node].sock; long len; MessageHeader header; #ifdef SOCK_FULL_SYNC char sync = 0; #endif if ( sock < 0 ) Error("rcv_remote: receiving from process without socket", (long) node); /* read the message header and check contents */ if (SR_proc_info[node].peeked) { /* Have peeked at this socket ... get message header from buffer */ if (DEBUG_) printf("%2ld: rcv_remote message has been peeked at\n", me); (void) memcpy((char *) &header, (char *) &SR_proc_info[node].head_peek, sizeof(MessageHeader)); SR_proc_info[node].peeked = FALSE; } else { #ifdef GOTXDR (void) ReadXdrLong(sock, (long *) &header, (long) (sizeof(header)/sizeof(long))); #else if ( (len = ReadFromSocket(sock, (char *) &header, (long) sizeof(header))) != sizeof(header) ) Error("rcv_remote: reading header from socket", len); #endif } if (DEBUG_) PrintMessageHeader("rcv_remote",&header); if (header.nodeto != me) { PrintMessageHeader("rcv_remote",&header); Error("rcv_remote: got message meant for someone else", (long) header.nodeto); } *nodefrom = header.nodefrom; if (*nodefrom != node) Error("rcv_remote: got message from someone on incorrect socket", (long) *nodefrom); if (header.type != *type) { PrintMessageHeader("rcv_remote",&header); printf("rcv_remote: type mismatch ... strong typing enforced\n"); abort(); Error("rcv_remote: type mismatch ... strong typing enforced", (long) *type); } #ifdef GOTXDR if ( *type & MSGDBL ) *lenmes = header.length * sizeof(double); else if ( *type & MSGINT ) *lenmes = header.length * sizeof(long); else if ( *type & MSGCHR ) *lenmes = header.length * sizeof(char); else *lenmes = header.length; #else *lenmes = header.length; #endif if ( (*lenmes < 0) || (*lenmes > (long)BIG_MESSAGE) || (*lenmes > *lenbuf) ) { PrintMessageHeader("rcv_remote",&header); (void) fprintf(stderr, "rcv_remote err: lenbuf=%ld\n",*lenbuf); Error("rcv_remote: message length out of range",(long) *lenmes); } if (*lenmes > 0) { #ifdef GOTXDR if ( *type & MSGDBL ) (void) ReadXdrDouble(sock, (double *) buf, header.length); else if ( *type & MSGINT ) (void) ReadXdrLong(sock, (long *) buf, header.length); else if ( *type & MSGCHR ) (void) ReadXdrChar(sock, (char *) buf, header.length); else if ( (len = ReadFromSocket(sock, buf, *lenmes)) != *lenmes) Error("rcv_remote: reading message from socket", (long) (len+100000*(sock+ 1000* *nodefrom))); #else if ( (len = ReadFromSocket(sock, buf, *lenmes)) != *lenmes) Error("rcv_remote: reading message from socket", (long) (len+100000*(sock+ 1000* *nodefrom))); #endif } /* this write (and read in snd_remote) makes the link synchronous */ #ifdef SOCK_FULL_SYNC if ( WriteToSocket(sock, &sync, (long) 1) != 1) Error("rcv_remote: writing sync to socket", (long) node); #endif } /*ARGSUSED*/ void RCV_(type, buf, lenbuf, lenmes, nodeselect, nodefrom, sync) long *type; void *buf; long *lenbuf; long *lenmes; long *nodeselect; long *nodefrom; long *sync; /* long *type = user defined type of received message (input) void *buf = data buffer (output) long *lenbuf = length of buffer in bytes (input) long *lenmes = length of received message in bytes (output) (exceeding receive buffer is hard error) long *nodeselect = node to receive from (input) -1 implies that any pending message may be received long *nodefrom = node message is received from (output) long *sync = 0 for asynchronous, 1 for synchronous (NOT USED) */ { long me = NODEID_(); long nproc = NNODES_(); long node; #ifdef TIMINGS double start; #endif #ifdef EVENTLOG evlog(EVKEY_BEGIN, EVENT_RCV, EVKEY_MSG_FROM, (int) *nodeselect, EVKEY_MSG_TO, (int) me, EVKEY_MSG_TYPE, (int) *type, EVKEY_MSG_SYNC, (int) *sync, EVKEY_LAST_ARG); #endif /* Assign the desired node or the next ready node */ #ifdef TIMINGS start = TCGTIME_(); #endif if (*nodeselect == -1) node = NextReadyNode(*type); else node = *nodeselect; /* Check for some errors ... need more checking here ... note that the overall master process has id nproc */ if (node == me) Error("RCV_: cannot receive message from self", (long) me); if ( (node < 0) || (node > nproc) ) Error("RCV_: out of range node requested", (long) node); /* Receive the message ... use shared memory, switch or socket */ #if defined(SHMEM) || defined(SYSV) if (SR_proc_info[node].local){ #ifdef KSR_NATIVE KSR_rcv_local(type, buf, lenbuf, lenmes, &node, nodefrom); #else rcv_local(type, buf, lenbuf, lenmes, &node, nodefrom); #endif } else { #endif rcv_remote(type, buf, lenbuf, lenmes, &node, nodefrom); #if defined(SHMEM) || defined(SYSV) } #endif /* Collect statistics */ SR_proc_info[node].n_rcv += 1; SR_proc_info[node].nb_rcv += *lenmes; #ifdef TIMINGS SR_proc_info[node].t_rcv += TCGTIME_() - start; #endif #ifdef EVENTLOG evlog(EVKEY_END, EVENT_RCV, EVKEY_MSG_FROM, (int) node, EVKEY_MSG_LEN, (int) *lenmes, EVKEY_LAST_ARG); #endif } void RemoteConnect(a, b, c) long a, b, c; /* Make a socket connection between processes a and b via the process c to which both are already connected. */ { long me = NODEID_(); long nproc = NNODES_(); long type = TYPE_CONNECT; /* Overriden below */ char cport[8]; long tmp, lenmes, nodefrom, clusid, lenbuf, sync=1; int sock, port; long lport; if ((a == b) || (a == c) || (b == c) ) return; /* Gracefully ignore redundant connections */ if ( (me != a) && (me != b) && (me != c) ) return; /* I'm not involved in this connection */ if (a < b) { tmp = a; a = b; b = tmp; } type = (a + nproc*b) | MSGINT; /* Create a unique type */ if (DEBUG_) { (void) printf("RC a=%ld, b=%ld, c=%ld, me=%ld\n",a,b,c,me); (void) fflush(stdout); } if (a == me) { CreateSocketAndBind(&sock, &port); /* Create port */ if (DEBUG_) { (void) printf("RC node=%ld, sock=%d, port=%d\n",me, sock, port); (void) fflush(stdout); } lport = port; lenbuf = sizeof lport; ListenOnSock(sock); SND_(&type, (char *) &lport, &lenbuf, &c, &sync); /* Port to intermediate */ SR_proc_info[b].sock = AcceptConnection(sock); /* Accept connection and save socket info */ } else if (b == me) { clusid = SR_proc_info[a].clusid; lenbuf = sizeof lport; RCV_(&type, (char *) &lport, &lenbuf, &lenmes, &c, &nodefrom, &sync); port = lport; (void) sprintf(cport,"%d",port); lenbuf = strlen(cport) + 1; if (lenbuf > (long)sizeof(cport)) Error("RemoteConnect: cport too small", (long) lenbuf); SR_proc_info[a].sock = CreateSocketAndConnect(SR_clus_info[clusid].hostname, cport); } else if (c == me) { lenbuf = sizeof lport; RCV_(&type, (char *) &lport, &lenbuf, &lenmes, &a, &nodefrom, &sync); SND_(&type, (char *) &lport, &lenbuf, &b, &sync); } } ga-5-3/armci/tcgmsg/ipcv4.0/shmem_convex.c0000640005473000001440000000571412115161655017207 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include extern char *strdup(); extern char *mktemp(); #define MAX_ID 20 static struct id_list_struct { char *addr; /* pointer to shmem region */ unsigned size; /* size of region */ char *filename; /* associated file name */ int fd; /* file descriptor */ int status; /* = 1 if in use */ } id_list[MAX_ID]; static int next_id = 0; static char template[] = "/tmp/SHMEM.XXXXXX"; char *CreateSharedRegion(long *id, long *size) { char *temp; if (next_id == MAX_ID) { Error("CreateSharedRegion: MAX_ID exceeded ", MAX_ID); } *id = next_id; #ifdef APOLLO id_list[*id].fd = -1; #else if ( (temp = strdup(template)) == (char *) NULL) { Error("CreateSharedRegion: failed to get space for filename", 0); } /* Generate scratch file to identify region ... need to know this name to attach to the region so need to establish some policy before AttachtoSharedRegion can work */ id_list[*id].filename = mktemp(temp); if ( (id_list[*id].fd = open(id_list[*id].filename, O_RDWR|O_CREAT, 0666)) < 0) { Error("CreateSharedRegion: failed to open temporary file",0); } #endif id_list[*id].addr = mmap((caddr_t) 0, (unsigned *) size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, id_list[*id].fd, 0); #ifdef APOLLO if (id_list[*id].addr == (char *) 0) { Error("CreateSharedRegion: mmap failed",-1); } #else if (id_list[*id].addr == (char *) -1) { Error("CreateSharedRegion: mmap failed",-1); } #endif id_list[*id].size = *size; id_list[*id].status = 1; next_id++; return id_list[*id].addr; } long DetachSharedRegion(long id, long size, char *addr) { if ( (id < 0) || (id > next_id)) { return (long) -1; } if (id_list[id].status != 1) { return (long) -1; } id_list[id].status = 0; return (long) munmap(id_list[id].addr, 0); } long DeleteSharedRegion(long id) { if ( (id < 0) || (id > next_id) ) { return (long) -1; } if (id_list[id].status != 1) { return (long) -1; } (void) DetachSharedRegion(id, 0, (char *) 0); if (id_list[id].fd >= 0) { (void) close(id_list[id].fd); (void) unlink(id_list[id].filename); } return (long) 0; } char *AttachSharedRegion(long id, long size) { Error("AttachSharedRegion: need mods for this to work on CONVEX", (long) -1); } long DeleteSharedAll() { long id; long status = 0; for (id=0; id= 0) { continue execution } else { wait in queue for the semaphore } decrement value void SemWait(long sem_set_id, long sem_num) 3) Increment the value associated with the semaphore specified by (sem_set_id, sem_num). If value <= 0 (i.e. there are processes in the queue) this releases the next process. void SemPost(long sem_set_id, long sem_num) 4) Return the current value associated with the semaphore sepcified by (sem_set_id, sem_num). long SemValue(long sem_set_id, long sem_num) 5) Destroy the set of semaphores. Any other processes that are accessing or try to access the semaphore set should get an error. On the SUN (all system V machines?) the semaphore sets should be destroyed explicitly before the final process exits. 0 is returned if OK. -1 implies an error. long SemSetDestroy(long sem_set_id) 6) Destroy all the semaphore sets that are known about. This is really meant for an error routine to call to try and tidy up. Though all applications could call it before the last process exits. 0 is returned if OK. -1 implies an error. long SemSetDestroyAll() */ extern void Error(); /************************************************************* Alliant Concentrix 5.0 and Concentrix FX/2800 *************************************************************/ /* This is very specific to the Alliant. */ #include #include extern int errno; /* On the alliant semaphores are handed out one at a time rather than in sets, so have to maintain sets manually */ #define MAX_SEM_SETS 20 #define MAX_N_SEM 128 static struct sem_set_list_struct { int id[MAX_N_SEM]; /* alliant semaphore id */ int n_sem; /* no. of semaphores in set */ } sem_set_list[MAX_SEM_SETS]; static int num_sem_set = 0; void InitSemSetList() /* Initialise sem_set_list */ { int i, j; for (i=0; i= MAX_N_SEM) ) Error("SemSetCreate: n_sem has invalid value", (long) n_sem); if (num_sem_set == 0) InitSemSetList(); else if (num_sem_set >= MAX_SEM_SETS) Error("SemSetCreate: Exceeded man no. of semaphore sets", (long) num_sem_set); /* Find first empty slot in sem_set_list */ for (i=0; i < MAX_SEM_SETS; i++) if (sem_set_list[i].n_sem == 0) break; if (i == MAX_SEM_SETS) Error("SemSetCreate: internal error puting semid in list", (long) i); /* Actually make the semaphore set */ for (j=0; j #ifdef MACX /* jn: hack around bug in /usr/include/varargs.h */ #ifndef __PPC__ # define __PPC__ #endif #ifndef _CALL_SYSV # define _CALL_SYSV #endif #endif #include extern long nodeid_(); #ifdef SEQUENT #include #else #include #endif #if defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || \ defined(CONVEX) || defined(ARDENT) || defined(ULTRIX) || \ defined(AIX) || defined(IPSC) || defined(NEXT) || defined(DECOSF) extern char *strdup(); #endif #if defined(ULTRIX) || defined(SGI) || defined(NEXT) || defined(KSR) || \ defined(DECOSF) extern void *malloc(); #else #include #endif #include "evlog.h" static double walltime(); /* If sprintf returns an integer instead of a character pointer then define the flag INTSPRINTF */ #if defined(SGI) || defined(AIX) || defined(IPSC) || defined(CRAY) || \ defined(HPUX) || defined(ALLIANT) || defined(CONVEX) || defined(NEXT) || \ defined(KSR) || defined(DECOSF) #define INTSPRINTF #endif void evlog(int farg_key, ...) /* The format of the argument list is as follows: evlog([(int) key, [values, ...]], ..., EVKEY_LAST_ARG) Arguments are read as keys with corresponding values. Recognised keys are defined in evlog.h and are described in detail below. Logging is enabled/disabled by calling evlog with one of EVKEY_ENABLE or EVKEY_DISABLE specified. Note that EVKEY_ENABLE must be the first key specified for it to be recognized and that all keys in the argument list after EVKEY_DISABLE are ignored. By default events are logged in the file events. This can be overridden with the key EVKEY_FILENAME, which takes the filename as its value. The model for logging events assumed by the post-analysis routines assumes that upon logging an event: a) no state chage occurs (EVKEY_EVENT). The event is just recorded. b) the process changes state by pushing the event onto the state stack (EVKEY_BEGIN). c) the process changes state by popping an event off the state stack (EVKEY_END). If the event or state popped off the stack does not match the specified event then the post-analysis may get confused but this does not interfere with the actual logging. EVKEY_EVENT, EVKEY_BEGIN or EVKEY_END must be the first key specified other than a possible EVKEY_ENABLE. Internally an event is stored as a large character string to simplify post-analysis. Users specify data for storage in addition to that which is automatically stored (only the time and process) with key, value combinations (EVKEY_STR_INT, EVKEY_STR_DBL, EVKEY_STR). Many such key-value combinations as required may be specified. Since the internal data format uses colons ':', double quotation marks '"' and carriage returns users should avoid these in their string data. ---------------------------- Sample calling sequence: evlog(EVKEY_ENABLE, EVKEY_FILENAME, "events.log", EVKEY_LAST_ARG); evlog(EVKEY_EVENT, "Finished startup code", EVKEY_STR, "Now do some real work", EVKEY_LAST_ARG); evlog(EVKEY_BEGIN, "Get Matrix", EVKEY_LAST_ARG); evlog(EVKEY_END, "Get matrix", EVKEY_STR_INT, "Size of matrix", (int) N, EVKEY_STR_DBL, "Norm of matrix", (double) matrix_norm, EVKEY_LAST_ARG); evlog(EVKEY_BEGIN, "Transform matrix", EVKEY_STR_DBL, "Recomputed norm", (double) matrix_norm, EVKEY_LAST_ARG); evlog(EVKEY_END, "Transform matrix", EVKEY_STR_INT, "No. of iterations", (int) niters, EVKEY_LAST_ARG); evlog(EVKEY_DUMP, EVKEY_DISABLE, EVKEY_LAST_ARG); evlog(EVKEY_EVENT, "Logging is disabled ... this should not print", EVKEY_DUMP, EVKEY_LAST_ARG); ---------------------------- EVKEY_LAST_ARG Terminates list ... takes no value and must be present EVKEY_EVENT, (char *) event Simply log occurence of the event EVKEY_BEGIN, (char *) event Push event onto process state stack EVKEY_END, (char *) event Pop event off process state stack EVKEY_MSG_LEN, (int) length Value is (int) mesage length SND/RCV only EVKEY_MSG_TO, (int) to Value is (int) to process id SND/RCV only EVKEY_MSG_FROM, (int) from Value is (int) from process SND/RCV only EVKEY_MSG_TYPE, (int) type Value is (int) message type SND/RCV only EVKEY_STR_INT, (char *) string, (int) data User data value pair EVKEY_STR_DBL, (char *) string, (double) data User data value pair (char *), (double) EVKEY_STR, (char *) string User data value (char *) EVKEY_ENABLE Enable logging EVKEY_DISABLE Disable logging EVKEY_DUMP Dump out the current buffer to disk EVKEY_FILE, (char *) filename Use specified file to capture events. Default is "events". */ { static int logging=0; /* Boolean flag for login enabled/disabled */ static int error=0; /* Boolean flag for error detected */ static int ncall=0; /* Need to do stuff on first entry */ static char *buffer; /* Logging buffer ... null terminated */ static char *bufpt; /* Pointer to next free char in buffer */ static int left; /* Amount of free space in buffer */ #define BUFLEN 262144 /* Size allocated for buffer ... biggish */ #define MAX_EV_LEN 1000 /* Assumed maximum size of single event record */ static FILE *file; /* File where events will be dumped */ static char *filename = "events"; /* Default name of events file */ va_list ap; /* For variable argument list */ int key; /* Hold key being processed */ int nchars; /* No. of chars printed by sprintf call */ char *temp; /* Temporary copy of bufpt */ char *string; /* Temporary */ int integer; /* Temporary */ double dbl; /* Temporary */ int valid; /* Temporary */ #define ERROR_RETURN error = 1; return; #define DUMPBUF (void) fputs(buffer, file); \ (void) fflush(file);\ if(ferror(file)) {ERROR_RETURN} \ bufpt = buffer; left = BUFLEN; /* sprintf is a disaster area!!!! #ifdef INTSPRINTF #define RECORD(A) nchars = (A); bufpt += nchars; left -= nchars #else #define RECORD(A) nchars = strlen(A); bufpt += nchars; left -= nchars #endif */ #define RECORD(A) {A; nchars = strlen(bufpt); bufpt += nchars; left -= nchars;} /* If an error was detected on a previous call don't even try to do anything */ if (error) {ERROR_RETURN} /* First time in need to allocate the buffer, open the file etc */ if (ncall == 0) { ncall = 1; if (!(bufpt = buffer = malloc((unsigned) BUFLEN))) {ERROR_RETURN} left = BUFLEN; if (!(file = fopen(filename, "w"))) {ERROR_RETURN} } /* Parse the arguments */ temp = bufpt; /* Save to check if anything has been logged */ valid = 0; /* One of BEGIN, END or EVENT must preceed most keys */ va_start(ap, farg_key); key = farg_key; while (key != EVKEY_LAST_ARG) { if ( (!logging) && (key != EVKEY_ENABLE) ) return; switch (key) { case EVKEY_ENABLE: logging = 1; break; case EVKEY_DISABLE: logging = 0; goto done; /* break; */ case EVKEY_FILENAME: if (!(filename = strdup(va_arg(ap, char *)))) {ERROR_RETURN} if (!(file = freopen(filename, "w", file))) {ERROR_RETURN} break; case EVKEY_BEGIN: valid = 1; RECORD(sprintf(bufpt, ":BEGIN:%s", va_arg(ap, char *))); RECORD(sprintf(bufpt, ":TIME:%.2f", walltime())); break; case EVKEY_END: valid = 1; RECORD(sprintf(bufpt, ":END:%s", va_arg(ap, char *))); RECORD(sprintf(bufpt, ":TIME:%.2f", walltime())); break; case EVKEY_EVENT: valid = 1; RECORD(sprintf(bufpt, ":EVENT:%s", va_arg(ap, char *))); RECORD(sprintf(bufpt, ":TIME:%.2f", walltime())); break; case EVKEY_MSG_LEN: if (!valid) {ERROR_RETURN} RECORD(sprintf(bufpt, ":MSG_LEN:%d", va_arg(ap, int))); break; case EVKEY_MSG_TO: if (!valid) {ERROR_RETURN} RECORD(sprintf(bufpt, ":MSG_TO:%d", va_arg(ap, int))); break; case EVKEY_MSG_FROM: if (!valid) {ERROR_RETURN} RECORD(sprintf(bufpt, ":MSG_FROM:%d", va_arg(ap, int))); break; case EVKEY_MSG_TYPE: if (!valid) {ERROR_RETURN} RECORD(sprintf(bufpt, ":MSG_TYPE:%d", va_arg(ap, int))); break; case EVKEY_MSG_SYNC: if (!valid) {ERROR_RETURN} RECORD(sprintf(bufpt, ":MSG_SYNC:%d", va_arg(ap, int))); break; case EVKEY_STR_INT: if (!valid) {ERROR_RETURN} string = va_arg(ap, char *); integer = va_arg(ap, int); RECORD(sprintf(bufpt, ":STR_INT:%s:%d", string, integer)); break; case EVKEY_STR_DBL: if (!valid) {ERROR_RETURN} string = va_arg(ap, char *); dbl = va_arg(ap, double); RECORD(sprintf(bufpt, ":STR_DBL:%s:%g", string, dbl)); break; case EVKEY_STR: if (!valid) {ERROR_RETURN} RECORD(sprintf(bufpt, ":STR:%s", va_arg(ap, char *))); break; case EVKEY_DUMP: {DUMPBUF} if (temp != bufpt) { RECORD(sprintf(bufpt, "\n")); temp = bufpt; } break; default: {DUMPBUF} {ERROR_RETURN} } key = va_arg(ap, int); } done: va_end(ap); /* Put a linefeed on the end of the record if something is written */ if (temp != bufpt) { RECORD(sprintf(bufpt, "\n")); temp = bufpt; } /* Should really check on every access to the buffer that there is enough space ... however just assume a very large maximum size for a single event log entry and check here */ if (left <= 0) {ERROR_RETURN} if (left < MAX_EV_LEN) {DUMPBUF} } #include "sndrcv.h" static double walltime() /* return the wall time in seconds as a double */ { return ((double) MTIME_()) * 0.01; } /* int main() { int N = 19; double matrix_norm = 99.1; int niters = 5; evlog(EVKEY_ENABLE, EVKEY_FILENAME, "events.log", EVKEY_LAST_ARG); evlog(EVKEY_EVENT, "Finished startup code", EVKEY_STR, "Now do some real work", EVKEY_LAST_ARG); evlog(EVKEY_BEGIN, "Get Matrix", EVKEY_LAST_ARG); evlog(EVKEY_END, "Get matrix", EVKEY_STR_INT, "Size of matrix", (int) N, EVKEY_STR_DBL, "Norm of matrix", (double) matrix_norm, EVKEY_LAST_ARG); evlog(EVKEY_BEGIN, "Transform matrix", EVKEY_STR_DBL, "Recomputed norm", (double) matrix_norm, EVKEY_LAST_ARG); evlog(EVKEY_END, "Transform matrix", EVKEY_STR_INT, "No. of iterations", (int) niters, EVKEY_LAST_ARG); evlog(EVKEY_DUMP, EVKEY_LAST_ARG); evlog(EVKEY_EVENT, "Logging is disabled ... this should not print", EVKEY_DUMP, EVKEY_LAST_ARG); return 0; } */ ga-5-3/armci/tcgmsg/ipcv4.0/sema.c0000640005473000001440000005606711701667223015452 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/sema.c,v 1.17 2003-05-08 15:44:43 edo Exp $ */ /* These routines simplify the interface to semaphores for use in mutual exclusion and queuing. Hopefully I can also make this portable. An external routine Error is assumed which is called upon an error and tidies up by calling SemSetDestroyAll. In most cases errors cause an internal hard failure (by calling Error). 1) make an array of n_sem semaphores, returning the id associated with the entire set. All the semaphore values are initialized to value which should be a positve integer (queuing) or 0 (synchronization). The semaphores in the set are indexed from 0 to n_sem-1. long SemSetCreate(long n_sem, long value) 2) Decrement and test the value associated with the semaphore specified by (sem_set_id, sem_num). In effect this: if (value >= 0) { continue execution } else { wait in queue for the semaphore } decrement value void SemWait(long sem_set_id, long sem_num) 3) Increment the value associated with the semaphore specified by (sem_set_id, sem_num). If value <= 0 (i.e. there are processes in the queue) this releases the next process. void SemPost(long sem_set_id, long sem_num) 4) Return the current value associated with the semaphore sepcified by (sem_set_id, sem_num). long SemValue(long sem_set_id, long sem_num) 5) Destroy the set of semaphores. Any other processes that are accessing or try to access the semaphore set should get an error. On the SUN (all system V machines?) the semaphore sets should be destroyed explicitly before the final process exits. 0 is returned if OK. -1 implies an error. long SemSetDestroy(long sem_set_id) 6) Destroy all the semaphore sets that are known about. This is really meant for an error routine to call to try and tidy up. Though all applications could call it before the last process exits. 0 is returned if OK. -1 implies an error. long SemSetDestroyAll() */ extern void Error(); #if defined(SYSV) && !defined SGIUS && !defined(SPPLOCKS) && !defined(MACX) /******************************************************************** Most system V compatible machines ********************************************************************/ /* The value used for our semaphore is equal to the value of the System V semaphore (which is always positive) minus the no. of processes in the queue. That is because our interface was modelled after that of Alliant whose semaphore can take on negative values. */ #include #include #include #if !HAVE_UNION_SEMUN union semun { int val; /* value for SETVAL */ struct semid_ds *buf; /* buffer for IPC_STAT, IPC_SET */ unsigned short int *array; /* array for GETALL, SETALL */ struct seminfo *__buf; /* buffer for IPC_INFO */ }; #endif /* this global structure maintains a list of allocated semaphore sets which is used for SemSetDestroyAll */ #define MAX_SEM_SETS 20 static int sem_set_id_list[MAX_SEM_SETS]; static int num_sem_set = 0; #if defined(SGITFP) || defined(SGI64) || defined(KSR) || defined(SOLARIS) || defined (AIX) || defined(LINUX64) # define MAX_N_SEM 512 #else # define MAX_N_SEM 40 #endif void InitSemSetList() /* Initialise sem_set_id_list */ { int i; for (i=0; i= MAX_N_SEM) ) Error("SemSetCreate: n_sem has invalid value", (long) n_sem); if (num_sem_set == 0) InitSemSetList(); else if (num_sem_set >= MAX_SEM_SETS) Error("SemSetCreate: Exceeded man no. of semaphore sets", (long) num_sem_set); /* Actually make the semaphore set */ if ( (semid = semget(IPC_PRIVATE, (int) n_sem, IPC_CREAT | 00600)) < 0) Error("SemSetCreate: failed to create semaphore set", (long) semid); /* Put the semid in the first empty slot in sem_set_id_list */ for (i=0; i < MAX_SEM_SETS; i++) { if (sem_set_id_list[i] == -1) { sem_set_id_list[i] = semid; break; } } if (i == MAX_SEM_SETS) Error("SemSetCreate: internal error puting semid in list", (long) i); num_sem_set++; /* Now set the value of all the semaphores */ arg.val = (int) value; for (i=0; i #include extern int errno; /* On the alliant semaphores are handed out one at a time rather than in sets, so have to maintain sets manually */ #define MAX_SEM_SETS 20 #define MAX_N_SEM 128 static struct sem_set_list_struct { int id[MAX_N_SEM]; /* alliant semaphore id */ int n_sem; /* no. of semaphores in set */ } sem_set_list[MAX_SEM_SETS]; static int num_sem_set = 0; void InitSemSetList() /* Initialise sem_set_list */ { int i, j; for (i=0; i= MAX_N_SEM) ) Error("SemSetCreate: n_sem has invalid value", (long) n_sem); if (num_sem_set == 0) InitSemSetList(); else if (num_sem_set >= MAX_SEM_SETS) Error("SemSetCreate: Exceeded man no. of semaphore sets", (long) num_sem_set); /* Find first empty slot in sem_set_list */ for (i=0; i < MAX_SEM_SETS; i++) if (sem_set_list[i].n_sem == 0) break; if (i == MAX_SEM_SETS) Error("SemSetCreate: internal error puting semid in list", (long) i); /* Actually make the semaphore set */ for (j=0; j #include #include #include #include #define MAX_SEM_SETS 20 #define MAX_N_SEM 100 /* On the convex a semaphore is a structure but on the apollo it is an array which does not need dereferencing. Use ADDR to generate the address of a semaphore */ #ifdef APOLLO #define ADDR(x) x #else #define ADDR(x) &x #endif extern char *mktemp(); struct sem_set_struct { int n_sem; /* no. of semaphores in set */ semaphore lock[MAX_N_SEM]; /* locks for changing value */ semaphore wait[MAX_N_SEM]; /* locks for queing */ int value[MAX_N_SEM]; /* values */ }; static int num_sem_set = 0; static struct sem_set_struct *sem_sets; static int fd = -1; static char template[] = "/tmp/SEMA.XXXXXX"; static char *filename = (char *) NULL; void InitSemSets() /* Initialise sem_sets and allocate associated shmem region */ { int i, j; unsigned size = sizeof(struct sem_set_struct) * MAX_SEM_SETS; #ifndef APOLLO /* Generate scratch file to identify region ... mustn't do this on the APOLLO */ filename = mktemp(template); if ( (fd = open(filename, O_RDWR|O_CREAT, 0666)) < 0 ) Error("InitSemSets: failed to open temporary file",0); #endif sem_sets = (struct sem_set_struct *) mmap((caddr_t) 0, &size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_HASSEMAPHORE|MAP_SHARED, fd, 0); #ifdef APOLLO if (sem_sets == (struct sem_set_struct *) 0) Error("InitSemSets: mmap failed", (long) -1); #else if (sem_sets == (struct sem_set_struct *) -1) Error("InitSemSets: mmap failed", (long) -1); #endif for (i=0; i= MAX_N_SEM) ) Error("SemSetCreate: n_sem has invalid value",n_sem); if (num_sem_set == 0) InitSemSets(); else if (num_sem_set >= MAX_SEM_SETS) Error("SemSetCreate: Exceeded man no. of semaphore sets", num_sem_set); /* Initialize the values */ for (i=0; i= num_sem_set) ) Error("SemWait: invalid sem_set_id",sem_set_id); if ( (sem_num < 0) || (sem_num >= sem_sets[sem_set_id].n_sem) ) Error("SemWait: invalid semaphore number in set",sem_num); while (1) { /* Get the lock around the whole semaphore */ (void) mset(ADDR(sem_sets[sem_set_id].lock[sem_num]), 1); /* If the value is positive fall thru, else wait */ if (sem_sets[sem_set_id].value[sem_num] > 0) break; else { (void) mclear(ADDR(sem_sets[sem_set_id].lock[sem_num])); (void) mset(ADDR(sem_sets[sem_set_id].wait[sem_num]), 1); } } /* Are ready to go ... decrement the value and release lock */ sem_sets[sem_set_id].value[sem_num]--; (void) mclear(ADDR(sem_sets[sem_set_id].lock[sem_num])); } void SemPost(sem_set_id, sem_num) long sem_set_id; long sem_num; { int i; if ( (sem_set_id < 0) || (sem_set_id >= num_sem_set) ) Error("SemPost: invalid sem_set_id",sem_set_id); if ( (sem_num < 0) || (sem_num >= sem_sets[sem_set_id].n_sem) ) Error("SemPost: invalid semaphore number in set",sem_num); /* Get the lock around the whole semaphore */ (void) mset(ADDR(sem_sets[sem_set_id].lock[sem_num]), 1); /* Read and increment the value. If is now zero wake up up the queue */ sem_sets[sem_set_id].value[sem_num]++; i = sem_sets[sem_set_id].value[sem_num]; (void) mclear(ADDR(sem_sets[sem_set_id].lock[sem_num])); if (i >= 0) (void) mclear(ADDR(sem_sets[sem_set_id].wait[sem_num])); } long SemValue(sem_set_id, sem_num) long sem_set_id; long sem_num; { int i; if ( (sem_set_id < 0) || (sem_set_id >= num_sem_set) ) Error("SemValue: invalid sem_set_id",sem_set_id); if ( (sem_num < 0) || (sem_num >= sem_sets[sem_set_id].n_sem) ) Error("SemValue: invalid semaphore number in set",sem_num); /* There seems no point in getting the lock just to read the value and it seems more useful not to (e.g. debugging) */ i = sem_sets[sem_set_id].value[sem_num]; return (long) (i-1); } long SemSetDestroy(sem_set_id) long sem_set_id; { if ( (sem_set_id < 0) || (sem_set_id >= num_sem_set) ) return -1; sem_sets[sem_set_id].n_sem = 0; return (long) 0; } long SemSetDestroyAll() { long i, status=0; for (i=0; i= 0) { (void) close(fd); fd = -1; (void) unlink(filename); } status += munmap((char *) sem_sets, 0); if (status) status = -1; return status; } #endif #if defined(SGIUS) || defined(SPPLOCKS) /* SGI fast US library semaphores ... aren't any faster than system V semaphores ... implement using spin locks */ #include #include #define MAX_SEMA 512 static volatile int *val; #define NAME_LEN 200 #ifdef SGI # include static usptr_t *arena_ptr; static ulock_t *locks[MAX_SEMA]; static char arena_name[NAME_LEN]; # define EIGHT 8 # define LOCK ussetlock # define UNLOCK usunsetlock #define JUMP EIGHT #include "sndrcvP.h" extern char *getenv(const char *); long SemSetCreate(long n_sem, long value) { int i; char *tmp; if (!(tmp = getenv("ARENA_DIR"))) tmp = "/tmp"; sprintf(arena_name,"%s/tcgmsg.arena.%ld",tmp, (long)getpid()); #ifdef PRIVATE_ARENA (void) usconfig(CONF_ARENATYPE, US_SHAREDONLY); #endif (void) usconfig(CONF_INITUSERS, (unsigned int)SR_clus_info[SR_clus_id].nslave ); #ifdef SGI (void) usconfig(CONF_INITSIZE, 1024*1024); #endif if (!(arena_ptr = usinit(arena_name))) Error("SemSetCreate: failed to create arena", 0L); /* Magic factors of EIGHT here to ensure that values are in different cache lines to avoid aliasing -- good on SGI and Convex */ if (!(val = (int *) usmalloc(EIGHT*MAX_SEMA*sizeof(int), arena_ptr))) Error("SemSetCreate: failed to get shmem", (long) (MAX_SEMA*sizeof(int))); for (i=0; i #include #include #include #include #define SIXTEEN 16 #define JUMP SIXTEEN typedef struct{ int state; int pad[15]; } lock_t; static lock_t *locks; # define LOCK(x) set_lock(&x.state) # define UNLOCK(x) unset_lock(&x.state) # define INILOCK(x) init_lock(&x.state) void init_lock(int * volatile ip) { *ip = 1; } void set_lock(int * volatile ip) { while (1) { while (!(*ip)); if (__ldcws32(ip)) break; } } void unset_lock(int *ip) { *ip = 1; asm("sync"); } static int fd = -1; static char template[] = "/tmp/SEMA.XXXXXX"; static char *filename = (char *) NULL; static unsigned shmem_size; long SemSetCreate(long n_sem, long value) { int i; shmem_size = SIXTEEN*MAX_SEMA*sizeof(int)+MAX_SEMA*sizeof(lock_t); if ( (n_sem <= 0) || (n_sem >= MAX_SEMA) ) Error("SemSetCreate: n_sem has invalid value",n_sem); /* allocate shared memory for locks and semaphore val */ filename = mktemp(template); if ( (fd = open(filename, O_RDWR|O_CREAT, 0666)) < 0 ) Error("SemSetCreate: failed to open temporary file",0); val = (int *) mmap((caddr_t) 0, shmem_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|CNX_MAP_SEMAPHORE|MAP_SHARED, fd, 0); locks = (lock_t*)( val + SIXTEEN*MAX_SEMA); /* initialize locks and semaphore values */ for (i=0; i= MAX_SEMA) ) Error("SemWait: invalid sem_num",sem_num); while (value<=0) { LOCK(locks[sem_num]); value = val[off]; if (value>0) val[off]--; UNLOCK(locks[sem_num]); if (value<=0) Dummy(); } } void SemPost(long sem_set_id, long sem_num) { int off = sem_num*JUMP; if ( (sem_num < 0) || (sem_num >= MAX_SEMA) ) Error("SemPost: invalid sem_num",sem_num); LOCK(locks[sem_num]); val[off]++; UNLOCK(locks[sem_num]); } long SemValue(long sem_set_id, long sem_num) { Error("SemValue: not implemented", sem_num); return 1; } long SemSetDestroy(long sem_set_id) { return(SemSetDestroyAll()); } #endif #if defined(MACX) #include #include #include #include #include #define MAX_SEMA 32 static int fd = -1; static char template[] = "/tmp/SEMA.XXXXXX"; static char *filename = (char *) NULL; static unsigned shmem_size; #if defined(NAMED_SEMAPHORES_SUPPORTED) static sem_t *sem_arr; long SemSetCreate(long n_sem, long value) { int i; shmem_size = MAX_SEMA*sizeof(sem_t); if ( (n_sem <= 0) || (n_sem >= MAX_SEMA) ) Error("SemSetCreate: n_sem has invalid value",n_sem); /* allocate shared memory for locks and semaphore val */ filename = mktemp(template); if ( (fd = shm_open(filename, O_CREAT|O_RDWR, 0666)) < 0 ) Error("SemSetCreate: failed to open temporary shm file",0); sem_arr = (sem_t*) mmap((caddr_t)0, shmem_size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_HASSEMAPHORE|MAP_SHARED, fd, (off_t)0); if(!sem_arr)Error("SemSetCreate: failed to mmap",0); /* initialize locks and semaphore values */ for (i=0; i= MAX_SEMA) ) Error("SemWait: invalid sem_num",sem_num); if(sem_wait(sem_arr+sem_num)<0) Error("SemWait: failed",sem_num); } void SemPost(long sem_set_id, long sem_num) { if ( (sem_num < 0) || (sem_num >= MAX_SEMA) ) Error("SemPost: invalid sem_num",sem_num); if(sem_post(sem_arr+sem_num)<0) Error("SemPost: failed",sem_num); } long SemValue(long sem_set_id, long sem_num) { Error("SemValue: not implemented", sem_num); return 1L; } #else typedef struct{ int state; int pad[15]; } lock_t; static lock_t *locks; static char template1[] = "/tmp/SEMA1.XXXXXX"; static char *filename1 = (char *) NULL; static sem_t *sem; static lock_t *locks; #include long SemSetCreate(long n_sem, long value) { int i; shmem_size = MAX_SEMA*sizeof(lock_t); if ( (n_sem <= 0) || (n_sem >= MAX_SEMA) ) Error("SemSetCreate: n_sem has invalid value",n_sem); /* allocate shared memory for locks and semaphore val */ locks = (lock_t*) mmap((caddr_t)0, shmem_size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, -1, (off_t)0); if(locks == (lock_t*)-1)Error("SemSetCreate: failed to mmap",shmem_size); filename1 = mktemp(template1); sem = sem_open(filename1, O_CREAT|O_EXCL, 0666, 1); if(!sem)Error("SemSetCreate: failed to sem_open",0); /* initialize locks and semaphore values */ bzero(locks,shmem_size); return 1L; } long SemSetDestroyAll() { long status=0; status = munmap((char *) locks, shmem_size); if(status)status = -1; sem_unlink(filename1); return status; } double __tcgmsg_fred__=0.0; void Dummy() { int n = 200; /* This seems optimal */ while(n--) __tcgmsg_fred__++; } void SemWait(long sem_set_id, long sem_num) { int value = 0, count=0; if ( (sem_num < 0) || (sem_num >= MAX_SEMA) ) Error("SemWait: invalid sem_num",sem_num); while (value<=0) { if(sem_wait(sem)<0)Error("SemWait: sem_op error",sem_num);; value = locks[sem_num].state; if (value>0) locks[sem_num].state--; if(sem_post(sem)<0)Error("SemWait: sem_op error",sem_num);; if (value<=0) Dummy(); count++; if(count%1000 == 999)usleep(1); } } void SemPost(long sem_set_id, long sem_num) { if ( (sem_num < 0) || (sem_num >= MAX_SEMA) ) Error("SemPost: invalid sem_num",sem_num); if(sem_wait(sem)<0)Error("SemPost: sem_op error",sem_num);; locks[sem_num].state++; if(sem_post(sem)<0)Error("SemWait: sem_op error",sem_num);; } long SemValue(long sem_set_id, long sem_num) { if ( (sem_num < 0) || (sem_num >= MAX_SEMA) ) Error("SemVal: invalid sem_num",sem_num); return (long)locks[sem_num].state; } #endif #endif ga-5-3/armci/tcgmsg/sndrcv.h0000640005473000001440000000360612115161655014633 0ustar d3n000users/** @file * This header file declares stubs and show prototypes of the * public sndrcv calls * * srftoc.h contains macros which define the names of c routines * accessible from FORTRAN and vice versa */ #ifndef SNDRCV_H_ #define SNDRCV_H_ #include "msgtypesc.h" #include "srftoc.h" #ifdef __cplusplus extern "C" { #endif extern void BRDCST_(long *type, void *buf, long *lenbuf, long *originator); extern void DGOP_(long *type, double *x, long *n, char *op, int oplen); extern double DRAND48_(); extern void IGOP_(long *type, long *x, long *n, char *op, int oplen); extern void LLOG_(); extern long MDTOB_(long *n); extern long MDTOI_(long *n); extern long MITOB_(long *n); extern long MITOD_(long *n); extern long MTIME_(); extern long NICEFTN_(long *ival); extern long NNODES_(); extern long NODEID_(); extern long NXTVAL_(long *mproc); extern void PARERR_(long *code); extern void PBEGINF_(); extern void PBGINF_(); extern void PEND_(); extern void PFCOPY_(long *type, long *node0, char *filename, int flen); extern void PFILECOPY_(long *type, long *node0, char *filename); extern long PROBE_(long *type, long *node); extern void RCV_(long *type, void *buf, long *lenbuf, long *lenmes, long *nodeselect, long *nodefrom, long *sync); extern void SETDBG_(long *value); extern void SND_(long *type, void *buf, long *lenbuf, long *node, long *sync); extern void SRAND48_(long *seed); extern void STATS_(); extern void SYNCH_(long *type); extern long TCGREADY_(); extern double TCGTIME_(); extern void WAITCOM_(long *node); /* Miscellaneous routines for internal use only? */ extern void Error(char *string, long integer); extern void MtimeReset(); extern void PrintProcInfo(); extern void RemoteConnect(long a, long b, long c); extern void tcgi_pbegin(int argc, char **argv); extern void USleep(long us); #ifdef __cplusplus } #endif #endif /* SNDRCV_H_ */ ga-5-3/armci/tcgmsg/msgtypesc.h0000640005473000001440000000043611267227257015360 0ustar d3n000users/** @file * This defines bit masks that can be OR'ed with user types (1-32767) * to indicate the nature of the data to the message passing system */ #ifndef MSGTYPES_H_ #define MSGTYPES_H_ #define MSGDBL 65536 #define MSGINT 131072 #define MSGCHR 262144 #endif /* MSGTYPES_H_ */ ga-5-3/armci/tcgmsg/msgtypesf.h0000640005473000001440000000035711267227257015365 0ustar d3n000usersC C This defines bit masks that can be ORed with user types (1-32767) C to indicate the nature of the data to the message passing system C integer msgdbl, msgint, msgchr parameter (msgdbl=65536, msgint=131072, msgchr=262144) ga-5-3/armci/aclocal.m40000640005473000001440000011763312274750307013551 0ustar d3n000users# generated automatically by aclocal 1.11.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Figure out how to run the assembler. -*- Autoconf -*- # Copyright (C) 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_PROG_AS # ---------- AC_DEFUN([AM_PROG_AS], [# By default we simply use the C compiler to build assembly code. AC_REQUIRE([AC_PROG_CC]) test "${CCAS+set}" = set || CCAS=$CC test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl ]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, # 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless `enable' is passed literally. # For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2009, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few `make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using `$V' instead of `$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../m4/armci_as_no_i386asm.m4]) m4_include([../m4/armci_c_opt.m4]) m4_include([../m4/armci_cxx_opt.m4]) m4_include([../m4/armci_enable_gpc.m4]) m4_include([../m4/armci_enable_profile.m4]) m4_include([../m4/armci_group.m4]) m4_include([../m4/armci_nb_noncont.m4]) m4_include([../m4/armci_setup.m4]) m4_include([../m4/armci_shmmax.m4]) m4_include([../m4/ax_sys_weak_alias.m4]) m4_include([../m4/ga_ar.m4]) m4_include([../m4/ga_arg_parse.m4]) m4_include([../m4/ga_armci_network.m4]) m4_include([../m4/ga_as.m4]) m4_include([../m4/ga_c_match_types.m4]) m4_include([../m4/ga_check_func.m4]) m4_include([../m4/ga_check_header.m4]) m4_include([../m4/ga_compiler_vendor.m4]) m4_include([../m4/ga_cross_compiling.m4]) m4_include([../m4/ga_enable_checkpoint.m4]) m4_include([../m4/ga_enable_opt.m4]) m4_include([../m4/ga_enable_trace.m4]) m4_include([../m4/ga_function.m4]) m4_include([../m4/ga_mpi_test_disable.m4]) m4_include([../m4/ga_mpi_unwrap.m4]) m4_include([../m4/ga_mpicc.m4]) m4_include([../m4/ga_mpicc_test.m4]) m4_include([../m4/ga_mpicxx.m4]) m4_include([../m4/ga_mpicxx_test.m4]) m4_include([../m4/ga_msg_comms.m4]) m4_include([../m4/ga_sys_weak_alias.m4]) m4_include([../m4/ga_target.m4]) m4_include([../m4/ga_thread_safe.m4]) m4_include([../m4/ga_union_semun.m4]) m4_include([../m4/ga_warn_flags.m4]) m4_include([../m4/ga_with_help.m4]) m4_include([../m4/tcgmsg_rsh.m4]) m4_include([../m4/tcgmsg_timings.m4]) m4_include([m4/libtool.m4]) m4_include([m4/lt_obsolete.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) ga-5-3/armci/m4/0000750005473000001440000000000012275260531012211 5ustar d3n000usersga-5-3/armci/m4/ltoptions.m40000640005473000001440000003007311650323546014514 0ustar d3n000users# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) ga-5-3/armci/m4/ltversion.m40000640005473000001440000000126211650323546014504 0ustar d3n000users# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) ga-5-3/armci/m4/lt_obsolete.m40000640005473000001440000001375611410511426014773 0ustar d3n000users# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) ga-5-3/armci/m4/libtool.m40000640005473000001440000105721611650323546014136 0ustar d3n000users# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS ga-5-3/armci/m4/ltsugar.m40000640005473000001440000001042411410510454014126 0ustar d3n000users# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) ga-5-3/armci/f90/0000750005473000001440000000000012275260542012271 5ustar d3n000usersga-5-3/armci/f90/testa_init.f900000640005473000001440000002152110211727231014745 0ustar d3n000usersmodule testa_init use definekind interface init_7d module procedure init_7d_i4 module procedure init_7d_i8 module procedure init_7d_r4 module procedure init_7d_r8 module procedure init_7d_c4 module procedure init_7d_c8 end interface contains subroutine init_7d_i4(a,b,alb,aub,blb,bub,aoff,boff) integer(kind=i4), pointer :: a(:,:,:,:,:,:,:) integer(kind=i4), pointer :: b(:,:,:,:,:,:,:) integer alb(7),aub(7),blb(7),bub(7) integer aoff, boff integer i1,i2,i3,k4,i5,i6,i7 integer j j = aoff do i7 = alb(7),aub(7) do i6 = alb(6),aub(6) do i5 = alb(5),aub(5) do k4 = alb(4),aub(4) do i3 = alb(3),aub(3) do i2 = alb(2),aub(2) do i1 = alb(1),aub(1) a(i1,i2,i3,k4,i5,i6,i7) = j j = j + 1 enddo enddo enddo enddo enddo enddo enddo j = boff do i7 = blb(7),bub(7) do i6 = blb(6),bub(6) do i5 = blb(5),bub(5) do k4 = blb(4),bub(4) do i3 = blb(3),bub(3) do i2 = blb(2),bub(2) do i1 = blb(1),bub(1) b(i1,i2,i3,k4,i5,i6,i7) = j j = j + 1 enddo enddo enddo enddo enddo enddo enddo return end subroutine init_7d_i4 subroutine init_7d_i8(a,b,alb,aub,blb,bub,aoff,boff) integer(kind=i8), pointer :: a(:,:,:,:,:,:,:) integer(kind=i8), pointer :: b(:,:,:,:,:,:,:) integer alb(7),aub(7),blb(7),bub(7) integer aoff, boff integer i1,i2,i3,k4,i5,i6,i7 integer(kind=i8) :: j j = aoff do i7 = alb(7),aub(7) do i6 = alb(6),aub(6) do i5 = alb(5),aub(5) do k4 = alb(4),aub(4) do i3 = alb(3),aub(3) do i2 = alb(2),aub(2) do i1 = alb(1),aub(1) a(i1,i2,i3,k4,i5,i6,i7) = j j = j + 1 enddo enddo enddo enddo enddo enddo enddo j = boff do i7 = blb(7),bub(7) do i6 = blb(6),bub(6) do i5 = blb(5),bub(5) do k4 = blb(4),bub(4) do i3 = blb(3),bub(3) do i2 = blb(2),bub(2) do i1 = blb(1),bub(1) b(i1,i2,i3,k4,i5,i6,i7) = j j = j + 1 enddo enddo enddo enddo enddo enddo enddo return end subroutine init_7d_i8 subroutine init_7d_r4(a,b,alb,aub,blb,bub,aoff,boff) real(kind=r4), pointer :: a(:,:,:,:,:,:,:) real(kind=r4), pointer :: b(:,:,:,:,:,:,:) integer alb(7),aub(7),blb(7),bub(7) integer aoff, boff integer i1,i2,i3,k4,i5,i6,i7 integer(kind=i4) :: j j = aoff do i7 = alb(7),aub(7) do i6 = alb(6),aub(6) do i5 = alb(5),aub(5) do k4 = alb(4),aub(4) do i3 = alb(3),aub(3) do i2 = alb(2),aub(2) do i1 = alb(1),aub(1) a(i1,i2,i3,k4,i5,i6,i7) = float(j) j = j + 1 enddo enddo enddo enddo enddo enddo enddo j = boff do i7 = blb(7),bub(7) do i6 = blb(6),bub(6) do i5 = blb(5),bub(5) do k4 = blb(4),bub(4) do i3 = blb(3),bub(3) do i2 = blb(2),bub(2) do i1 = blb(1),bub(1) b(i1,i2,i3,k4,i5,i6,i7) = float(j) j = j + 1 enddo enddo enddo enddo enddo enddo enddo return end subroutine init_7d_r4 subroutine init_7d_r8(a,b,alb,aub,blb,bub,aoff,boff) real(kind=r8), pointer :: a(:,:,:,:,:,:,:) real(kind=r8), pointer :: b(:,:,:,:,:,:,:) integer alb(7),aub(7),blb(7),bub(7) integer aoff, boff integer i1,i2,i3,k4,i5,i6,i7 integer(kind=i4) :: j j = aoff do i7 = alb(7),aub(7) do i6 = alb(6),aub(6) do i5 = alb(5),aub(5) do k4 = alb(4),aub(4) do i3 = alb(3),aub(3) do i2 = alb(2),aub(2) do i1 = alb(1),aub(1) a(i1,i2,i3,k4,i5,i6,i7) = dble(j) j = j + 1 enddo enddo enddo enddo enddo enddo enddo j = boff do i7 = blb(7),bub(7) do i6 = blb(6),bub(6) do i5 = blb(5),bub(5) do k4 = blb(4),bub(4) do i3 = blb(3),bub(3) do i2 = blb(2),bub(2) do i1 = blb(1),bub(1) b(i1,i2,i3,k4,i5,i6,i7) = dble(j) j = j + 1 enddo enddo enddo enddo enddo enddo enddo return end subroutine init_7d_r8 subroutine init_7d_c4(a,b,alb,aub,blb,bub,aoff,boff) complex(kind=c4), pointer :: a(:,:,:,:,:,:,:) complex(kind=c4), pointer :: b(:,:,:,:,:,:,:) integer alb(7),aub(7),blb(7),bub(7) integer aoff, boff integer i1,i2,i3,k4,i5,i6,i7 integer(kind=i4) :: j j = aoff do i7 = alb(7),aub(7) do i6 = alb(6),aub(6) do i5 = alb(5),aub(5) do k4 = alb(4),aub(4) do i3 = alb(3),aub(3) do i2 = alb(2),aub(2) do i1 = alb(1),aub(1) a(i1,i2,i3,k4,i5,i6,i7) = cmplx(j,j,c4) j = j + 1 enddo enddo enddo enddo enddo enddo enddo j = boff do i7 = blb(7),bub(7) do i6 = blb(6),bub(6) do i5 = blb(5),bub(5) do k4 = blb(4),bub(4) do i3 = blb(3),bub(3) do i2 = blb(2),bub(2) do i1 = blb(1),bub(1) b(i1,i2,i3,k4,i5,i6,i7) = cmplx(j,j,c4) j = j + 1 enddo enddo enddo enddo enddo enddo enddo return end subroutine init_7d_c4 subroutine init_7d_c8(a,b,alb,aub,blb,bub,aoff,boff) complex(kind=c8), pointer :: a(:,:,:,:,:,:,:) complex(kind=c8), pointer :: b(:,:,:,:,:,:,:) integer alb(7),aub(7),blb(7),bub(7) integer aoff,boff integer i1,i2,i3,k4,i5,i6,i7 integer(kind=i4) :: j j = aoff do i7 = alb(7),aub(7) do i6 = alb(6),aub(6) do i5 = alb(5),aub(5) do k4 = alb(4),aub(4) do i3 = alb(3),aub(3) do i2 = alb(2),aub(2) do i1 = alb(1),aub(1) a(i1,i2,i3,k4,i5,i6,i7) = cmplx(j,j,c8) j = j + 1 enddo enddo enddo enddo enddo enddo enddo j = boff do i7 = blb(7),bub(7) do i6 = blb(6),bub(6) do i5 = blb(5),bub(5) do k4 = blb(4),bub(4) do i3 = blb(3),bub(3) do i2 = blb(2),bub(2) do i1 = blb(1),bub(1) b(i1,i2,i3,k4,i5,i6,i7) = cmplx(j,j,c8) j = j + 1 enddo enddo enddo enddo enddo enddo enddo return end subroutine init_7d_c8 end module testa_init ga-5-3/armci/f90/armci_mem_f90.f900000640005473000001440000015741510211727231015225 0ustar d3n000usersmodule armci_mem_f90 use armci_types interface armci_malloc_fa module procedure armci_malloc_1di4 module procedure armci_malloc_2di4 module procedure armci_malloc_3di4 module procedure armci_malloc_4di4 module procedure armci_malloc_5di4 module procedure armci_malloc_6di4 module procedure armci_malloc_7di4 module procedure armci_malloc_1di8 module procedure armci_malloc_2di8 module procedure armci_malloc_3di8 module procedure armci_malloc_4di8 module procedure armci_malloc_5di8 module procedure armci_malloc_6di8 module procedure armci_malloc_7di8 module procedure armci_malloc_1dr4 module procedure armci_malloc_2dr4 module procedure armci_malloc_3dr4 module procedure armci_malloc_4dr4 module procedure armci_malloc_5dr4 module procedure armci_malloc_6dr4 module procedure armci_malloc_7dr4 module procedure armci_malloc_1dr8 module procedure armci_malloc_2dr8 module procedure armci_malloc_3dr8 module procedure armci_malloc_4dr8 module procedure armci_malloc_5dr8 module procedure armci_malloc_6dr8 module procedure armci_malloc_7dr8 module procedure armci_malloc_1dc4 module procedure armci_malloc_2dc4 module procedure armci_malloc_3dc4 module procedure armci_malloc_4dc4 module procedure armci_malloc_5dc4 module procedure armci_malloc_6dc4 module procedure armci_malloc_7dc4 module procedure armci_malloc_1dc8 module procedure armci_malloc_2dc8 module procedure armci_malloc_3dc8 module procedure armci_malloc_4dc8 module procedure armci_malloc_5dc8 module procedure armci_malloc_6dc8 module procedure armci_malloc_7dc8 end interface interface armci_free_fa module procedure armci_free_1di4 module procedure armci_free_2di4 module procedure armci_free_3di4 module procedure armci_free_4di4 module procedure armci_free_5di4 module procedure armci_free_6di4 module procedure armci_free_7di4 module procedure armci_free_1di8 module procedure armci_free_2di8 module procedure armci_free_3di8 module procedure armci_free_4di8 module procedure armci_free_5di8 module procedure armci_free_6di8 module procedure armci_free_7di8 module procedure armci_free_1dr4 module procedure armci_free_2dr4 module procedure armci_free_3dr4 module procedure armci_free_4dr4 module procedure armci_free_5dr4 module procedure armci_free_6dr4 module procedure armci_free_7dr4 module procedure armci_free_1dr8 module procedure armci_free_2dr8 module procedure armci_free_3dr8 module procedure armci_free_4dr8 module procedure armci_free_5dr8 module procedure armci_free_6dr8 module procedure armci_free_7dr8 module procedure armci_free_1dc4 module procedure armci_free_2dc4 module procedure armci_free_3dc4 module procedure armci_free_4dc4 module procedure armci_free_5dc4 module procedure armci_free_6dc4 module procedure armci_free_7dc4 module procedure armci_free_1dc8 module procedure armci_free_2dc8 module procedure armci_free_3dc8 module procedure armci_free_4dc8 module procedure armci_free_5dc8 module procedure armci_free_6dc8 module procedure armci_free_7dc8 end interface contains subroutine armci_malloc_1di4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind integer(kind=i4), dimension(:), pointer :: a integer, intent(in) :: rank, elemsize, lb(1), ub(1) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface integer(kind=i4), dimension(:), pointer :: a integer, dimension(1) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 4 integer :: rank = 1 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) if (rc .ne. 0) print *, "error armci_malloc_1di4: error = ", rc end subroutine armci_malloc_1di4 subroutine armci_malloc_2di4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind integer(kind=i4), dimension(:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(2), ub(2) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface integer(kind=i4), dimension(:,:), pointer :: a integer, dimension(2) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 4 integer :: rank = 2 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) if (rc .ne. 0) print *, "error armci_malloc_2di4: error = ", rc end subroutine armci_malloc_2di4 subroutine armci_malloc_3di4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind integer(kind=i4), dimension(:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(3), ub(3) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface integer(kind=i4), dimension(:,:,:), pointer :: a integer, dimension(3) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 4 integer :: rank = 3 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) if (rc .ne. 0) print *, "error armci_malloc_3di4: error = ", rc end subroutine armci_malloc_3di4 subroutine armci_malloc_4di4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind integer(kind=i4), dimension(:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(4), ub(4) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface integer(kind=i4), dimension(:,:,:,:), pointer :: a integer, dimension(4) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 4 integer :: rank = 4 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) if (rc .ne. 0) print *, "error armci_malloc_4di4: error = ", rc end subroutine armci_malloc_4di4 subroutine armci_malloc_5di4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind integer(kind=i4), dimension(:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(5), ub(5) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface integer(kind=i4), dimension(:,:,:,:,:), pointer :: a integer, dimension(5) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 4 integer :: rank = 5 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) if (rc .ne. 0) print *, "error armci_malloc_5di4: error = ", rc end subroutine armci_malloc_5di4 subroutine armci_malloc_6di4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind integer(kind=i4), dimension(:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(6), ub(6) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface integer(kind=i4), dimension(:,:,:,:,:,:), pointer :: a integer, dimension(6) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 4 integer :: rank = 6 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) if (rc .ne. 0) print *, "error armci_malloc_6di4: error = ", rc end subroutine armci_malloc_6di4 subroutine armci_malloc_7di4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind integer(kind=i4), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(7), ub(7) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface integer(kind=i4), dimension(:,:,:,:,:,:,:), pointer :: a integer, dimension(7) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 4 integer :: rank = 7 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) if (rc .ne. 0) print *, "error armci_malloc_7di4: error = ", rc end subroutine armci_malloc_7di4 subroutine armci_free_1di4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind integer(kind=i4), dimension(:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface integer(kind=i4), dimension(:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 1 call armci_free_farray(a, rank, rc) if (rc .ne. 0) print *, "error armci_free_1di4: error = ", rc end subroutine armci_free_1di4 subroutine armci_free_2di4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind integer(kind=i4), dimension(:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface integer(kind=i4), dimension(:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 2 call armci_free_farray(a, rank, rc) if (rc .ne. 0) print *, "error armci_free_2di4: error = ", rc end subroutine armci_free_2di4 subroutine armci_free_3di4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind integer(kind=i4), dimension(:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface integer(kind=i4), dimension(:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 3 call armci_free_farray(a, rank, rc) if (rc .ne. 0) print *, "error armci_free_3di4: error = ", rc end subroutine armci_free_3di4 subroutine armci_free_4di4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind integer(kind=i4), dimension(:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface integer(kind=i4), dimension(:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 4 call armci_free_farray(a, rank, rc) if (rc .ne. 0) print *, "error armci_free_4di4: error = ", rc end subroutine armci_free_4di4 subroutine armci_free_5di4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind integer(kind=i4), dimension(:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface integer(kind=i4), dimension(:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 5 call armci_free_farray(a, rank, rc) if (rc .ne. 0) print *, "error armci_free_5di4: error = ", rc end subroutine armci_free_5di4 subroutine armci_free_6di4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind integer(kind=i4), dimension(:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface integer(kind=i4), dimension(:,:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 6 call armci_free_farray(a, rank, rc) if (rc .ne. 0) print *, "error armci_free_6di4: error = ", rc end subroutine armci_free_6di4 subroutine armci_free_7di4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind integer(kind=i4), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface integer(kind=i4), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 7 call armci_free_farray(a, rank, rc) if (rc .ne. 0) print *, "error armci_free_7di4: error = ", rc end subroutine armci_free_7di4 subroutine armci_malloc_1di8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind integer(kind=i8), dimension(:), pointer :: a integer, intent(in) :: rank, elemsize, lb(1), ub(1) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface integer(kind=i8), dimension(:), pointer :: a integer, dimension(1) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 1 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) if (rc .ne. 0) print *, "error armci_malloc_1di8: error = ", rc end subroutine armci_malloc_1di8 subroutine armci_malloc_2di8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind integer(kind=i8), dimension(:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(2), ub(2) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface integer(kind=i8), dimension(:,:), pointer :: a integer, dimension(2) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 2 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) if (rc .ne. 0) print *, "error armci_malloc_2di8: error = ", rc end subroutine armci_malloc_2di8 subroutine armci_malloc_3di8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind integer(kind=i8), dimension(:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(3), ub(3) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface integer(kind=i8), dimension(:,:,:), pointer :: a integer, dimension(3) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 3 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) if (rc .ne. 0) print *, "error armci_malloc_3di8: error = ", rc end subroutine armci_malloc_3di8 subroutine armci_malloc_4di8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind integer(kind=i8), dimension(:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(4), ub(4) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface integer(kind=i8), dimension(:,:,:,:), pointer :: a integer, dimension(4) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 4 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) if (rc .ne. 0) print *, "error armci_malloc_4di8: error = ", rc end subroutine armci_malloc_4di8 subroutine armci_malloc_5di8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind integer(kind=i8), dimension(:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(5), ub(5) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface integer(kind=i8), dimension(:,:,:,:,:), pointer :: a integer, dimension(5) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 5 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) if (rc .ne. 0) print *, "error armci_malloc_5di8: error = ", rc end subroutine armci_malloc_5di8 subroutine armci_malloc_6di8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind integer(kind=i8), dimension(:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(6), ub(6) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface integer(kind=i8), dimension(:,:,:,:,:,:), pointer :: a integer, dimension(6) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 6 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_6di8: error = ", rc end subroutine armci_malloc_6di8 subroutine armci_malloc_7di8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind integer(kind=i8), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(7), ub(7) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface integer(kind=i8), dimension(:,:,:,:,:,:,:), pointer :: a integer, dimension(7) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 7 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_7di8: error = ", rc end subroutine armci_malloc_7di8 subroutine armci_free_1di8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind integer(kind=i8), dimension(:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface integer(kind=i8), dimension(:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 1 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_1di8: error = ", rc end subroutine armci_free_1di8 subroutine armci_free_2di8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind integer(kind=i8), dimension(:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface integer(kind=i8), dimension(:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 2 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_2di8: error = ", rc end subroutine armci_free_2di8 subroutine armci_free_3di8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind integer(kind=i8), dimension(:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface integer(kind=i8), dimension(:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 3 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_3di8: error = ", rc end subroutine armci_free_3di8 subroutine armci_free_4di8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind integer(kind=i8), dimension(:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface integer(kind=i8), dimension(:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 4 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_4di8: error = ", rc end subroutine armci_free_4di8 subroutine armci_free_5di8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind integer(kind=i8), dimension(:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface integer(kind=i8), dimension(:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 5 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_5di8: error = ", rc end subroutine armci_free_5di8 subroutine armci_free_6di8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind integer(kind=i8), dimension(:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface integer(kind=i8), dimension(:,:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 6 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_6di8: error = ", rc end subroutine armci_free_6di8 subroutine armci_free_7di8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind integer(kind=i8), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface integer(kind=i8), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 7 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_7di8: error = ", rc end subroutine armci_free_7di8 subroutine armci_malloc_1dr4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind real(kind=r4), dimension(:), pointer :: a integer, intent(in) :: rank, elemsize, lb(1), ub(1) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface real(kind=r4), dimension(:), pointer :: a integer, dimension(1) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 4 integer :: rank = 1 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_1dr4: error = ", rc end subroutine armci_malloc_1dr4 subroutine armci_malloc_2dr4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind real(kind=r4), dimension(:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(2), ub(2) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface real(kind=r4), dimension(:,:), pointer :: a integer, dimension(2) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 4 integer :: rank = 2 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_2dr4: error = ", rc end subroutine armci_malloc_2dr4 subroutine armci_malloc_3dr4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind real(kind=r4), dimension(:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(3), ub(3) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface real(kind=r4), dimension(:,:,:), pointer :: a integer, dimension(3) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 4 integer :: rank = 3 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_3dr4: error = ", rc end subroutine armci_malloc_3dr4 subroutine armci_malloc_4dr4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind real(kind=r4), dimension(:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(4), ub(4) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface real(kind=r4), dimension(:,:,:,:), pointer :: a integer, dimension(4) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 4 integer :: rank = 4 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_4dr4: error = ", rc end subroutine armci_malloc_4dr4 subroutine armci_malloc_5dr4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind real(kind=r4), dimension(:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(5), ub(5) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface real(kind=r4), dimension(:,:,:,:,:), pointer :: a integer, dimension(5) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 4 integer :: rank = 5 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_5dr4: error = ", rc end subroutine armci_malloc_5dr4 subroutine armci_malloc_6dr4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind real(kind=r4), dimension(:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(6), ub(6) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface real(kind=r4), dimension(:,:,:,:,:,:), pointer :: a integer, dimension(6) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 4 integer :: rank = 6 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_6dr4: error = ", rc end subroutine armci_malloc_6dr4 subroutine armci_malloc_7dr4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind real(kind=r4), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(7), ub(7) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface real(kind=r4), dimension(:,:,:,:,:,:,:), pointer :: a integer, dimension(7) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 4 integer :: rank = 7 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_7dr4: error = ", rc end subroutine armci_malloc_7dr4 subroutine armci_free_1dr4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind real(kind=r4), dimension(:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface real(kind=r4), dimension(:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 1 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_1dr4: error = ", rc end subroutine armci_free_1dr4 subroutine armci_free_2dr4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind real(kind=r4), dimension(:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface real(kind=r4), dimension(:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 2 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_2dr4: error = ", rc end subroutine armci_free_2dr4 subroutine armci_free_3dr4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind real(kind=r4), dimension(:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface real(kind=r4), dimension(:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 3 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_3dr4: error = ", rc end subroutine armci_free_3dr4 subroutine armci_free_4dr4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind real(kind=r4), dimension(:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface real(kind=r4), dimension(:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 4 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_4dr4: error = ", rc end subroutine armci_free_4dr4 subroutine armci_free_5dr4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind real(kind=r4), dimension(:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface real(kind=r4), dimension(:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 5 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_5dr4: error = ", rc end subroutine armci_free_5dr4 subroutine armci_free_6dr4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind real(kind=r4), dimension(:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface real(kind=r4), dimension(:,:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 6 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_6dr4: error = ", rc end subroutine armci_free_6dr4 subroutine armci_free_7dr4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind real(kind=r4), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface real(kind=r4), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 7 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_7dr4: error = ", rc end subroutine armci_free_7dr4 subroutine armci_malloc_1dr8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind real(kind=r8), dimension(:), pointer :: a integer, intent(in) :: rank, elemsize, lb(1), ub(1) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface real(kind=r8), dimension(:), pointer :: a integer, dimension(1) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 1 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_1dr8: error = ", rc end subroutine armci_malloc_1dr8 subroutine armci_malloc_2dr8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind real(kind=r8), dimension(:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(2), ub(2) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface real(kind=r8), dimension(:,:), pointer :: a integer, dimension(2) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 2 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_2dr8: error = ", rc end subroutine armci_malloc_2dr8 subroutine armci_malloc_3dr8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind real(kind=r8), dimension(:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(3), ub(3) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface real(kind=r8), dimension(:,:,:), pointer :: a integer, dimension(3) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 3 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_3dr8: error = ", rc end subroutine armci_malloc_3dr8 subroutine armci_malloc_4dr8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind real(kind=r8), dimension(:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(4), ub(4) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface real(kind=r8), dimension(:,:,:,:), pointer :: a integer, dimension(4) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 4 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_4dr8: error = ", rc end subroutine armci_malloc_4dr8 subroutine armci_malloc_5dr8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind real(kind=r8), dimension(:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(5), ub(5) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface real(kind=r8), dimension(:,:,:,:,:), pointer :: a integer, dimension(5) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 5 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_5dr8: error = ", rc end subroutine armci_malloc_5dr8 subroutine armci_malloc_6dr8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind real(kind=r8), dimension(:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(6), ub(6) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface real(kind=r8), dimension(:,:,:,:,:,:), pointer :: a integer, dimension(6) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 6 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_6dr8: error = ", rc end subroutine armci_malloc_6dr8 subroutine armci_malloc_7dr8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind real(kind=r8), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(7), ub(7) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface real(kind=r8), dimension(:,:,:,:,:,:,:), pointer :: a integer, dimension(7) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 7 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_7dr8: error = ", rc end subroutine armci_malloc_7dr8 subroutine armci_free_1dr8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind real(kind=r8), dimension(:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface real(kind=r8), dimension(:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 1 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_1dr8: error = ", rc end subroutine armci_free_1dr8 subroutine armci_free_2dr8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind real(kind=r8), dimension(:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface real(kind=r8), dimension(:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 2 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_2dr8: error = ", rc end subroutine armci_free_2dr8 subroutine armci_free_3dr8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind real(kind=r8), dimension(:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface real(kind=r8), dimension(:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 3 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_3dr8: error = ", rc end subroutine armci_free_3dr8 subroutine armci_free_4dr8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind real(kind=r8), dimension(:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface real(kind=r8), dimension(:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 4 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_4dr8: error = ", rc end subroutine armci_free_4dr8 subroutine armci_free_5dr8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind real(kind=r8), dimension(:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface real(kind=r8), dimension(:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 5 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_5dr8: error = ", rc end subroutine armci_free_5dr8 subroutine armci_free_6dr8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind real(kind=r8), dimension(:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface real(kind=r8), dimension(:,:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 6 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_6dr8: error = ", rc end subroutine armci_free_6dr8 subroutine armci_free_7dr8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind real(kind=r8), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface real(kind=r8), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 7 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_7dr8: error = ", rc end subroutine armci_free_7dr8 subroutine armci_malloc_1dc4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind complex(kind=c4), dimension(:), pointer :: a integer, intent(in) :: rank, elemsize, lb(1), ub(1) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface complex(kind=c4), dimension(:), pointer :: a integer, dimension(1) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 1 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_1dc4: error = ", rc end subroutine armci_malloc_1dc4 subroutine armci_malloc_2dc4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind complex(kind=c4), dimension(:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(2), ub(2) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface complex(kind=c4), dimension(:,:), pointer :: a integer, dimension(2) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 2 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_2dc4: error = ", rc end subroutine armci_malloc_2dc4 subroutine armci_malloc_3dc4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind complex(kind=c4), dimension(:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(3), ub(3) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface complex(kind=c4), dimension(:,:,:), pointer :: a integer, dimension(3) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 3 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_3dc4: error = ", rc end subroutine armci_malloc_3dc4 subroutine armci_malloc_4dc4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind complex(kind=c4), dimension(:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(4), ub(4) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface complex(kind=c4), dimension(:,:,:,:), pointer :: a integer, dimension(4) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 4 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_4dc4: error = ", rc end subroutine armci_malloc_4dc4 subroutine armci_malloc_5dc4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind complex(kind=c4), dimension(:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(5), ub(5) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface complex(kind=c4), dimension(:,:,:,:,:), pointer :: a integer, dimension(5) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 5 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_5dc4: error = ", rc end subroutine armci_malloc_5dc4 subroutine armci_malloc_6dc4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind complex(kind=c4), dimension(:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(6), ub(6) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface complex(kind=c4), dimension(:,:,:,:,:,:), pointer :: a integer, dimension(6) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 6 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_6dc4: error = ", rc end subroutine armci_malloc_6dc4 subroutine armci_malloc_7dc4(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind complex(kind=c4), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(7), ub(7) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface complex(kind=c4), dimension(:,:,:,:,:,:,:), pointer :: a integer, dimension(7) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 8 integer :: rank = 7 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_7dc4: error = ", rc end subroutine armci_malloc_7dc4 subroutine armci_free_1dc4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind complex(kind=c4), dimension(:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface complex(kind=c4), dimension(:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 1 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_1dc4: error = ", rc end subroutine armci_free_1dc4 subroutine armci_free_2dc4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind complex(kind=c4), dimension(:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface complex(kind=c4), dimension(:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 2 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_2dc4: error = ", rc end subroutine armci_free_2dc4 subroutine armci_free_3dc4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind complex(kind=c4), dimension(:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface complex(kind=c4), dimension(:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 3 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_3dc4: error = ", rc end subroutine armci_free_3dc4 subroutine armci_free_4dc4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind complex(kind=c4), dimension(:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface complex(kind=c4), dimension(:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 4 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_4dc4: error = ", rc end subroutine armci_free_4dc4 subroutine armci_free_5dc4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind complex(kind=c4), dimension(:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface complex(kind=c4), dimension(:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 5 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_5dc4: error = ", rc end subroutine armci_free_5dc4 subroutine armci_free_6dc4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind complex(kind=c4), dimension(:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface complex(kind=c4), dimension(:,:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 6 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_6dc4: error = ", rc end subroutine armci_free_6dc4 subroutine armci_free_7dc4(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind complex(kind=c4), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface complex(kind=c4), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 7 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_7dc4: error = ", rc end subroutine armci_free_7dc4 subroutine armci_malloc_1dc8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind complex(kind=c8), dimension(:), pointer :: a integer, intent(in) :: rank, elemsize, lb(1), ub(1) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface complex(kind=c8), dimension(:), pointer :: a integer, dimension(1) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 16 integer :: rank = 1 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_1dc8: error = ", rc end subroutine armci_malloc_1dc8 subroutine armci_malloc_2dc8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind complex(kind=c8), dimension(:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(2), ub(2) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface complex(kind=c8), dimension(:,:), pointer :: a integer, dimension(2) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 16 integer :: rank = 2 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_2dc8: error = ", rc end subroutine armci_malloc_2dc8 subroutine armci_malloc_3dc8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind complex(kind=c8), dimension(:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(3), ub(3) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface complex(kind=c8), dimension(:,:,:), pointer :: a integer, dimension(3) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 16 integer :: rank = 3 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_3dc8: error = ", rc end subroutine armci_malloc_3dc8 subroutine armci_malloc_4dc8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind complex(kind=c8), dimension(:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(4), ub(4) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface complex(kind=c8), dimension(:,:,:,:), pointer :: a integer, dimension(4) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 16 integer :: rank = 4 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_4dc8: error = ", rc end subroutine armci_malloc_4dc8 subroutine armci_malloc_5dc8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind complex(kind=c8), dimension(:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(5), ub(5) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface complex(kind=c8), dimension(:,:,:,:,:), pointer :: a integer, dimension(5) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 16 integer :: rank = 5 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_5dc8: error = ", rc end subroutine armci_malloc_5dc8 subroutine armci_malloc_6dc8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind complex(kind=c8), dimension(:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(6), ub(6) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface complex(kind=c8), dimension(:,:,:,:,:,:), pointer :: a integer, dimension(6) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 16 integer :: rank = 6 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_6dc8: error = ", rc end subroutine armci_malloc_6dc8 subroutine armci_malloc_7dc8(a, lb, ub, rc) use definekind implicit none interface subroutine armci_malloc_farray(a, rank, elemsize, lb, ub, rc) use definekind complex(kind=c8), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank, elemsize, lb(7), ub(7) integer, intent(out) :: rc end subroutine armci_malloc_farray end interface complex(kind=c8), dimension(:,:,:,:,:,:,:), pointer :: a integer, dimension(7) :: lb, ub integer, intent(out), optional :: rc integer :: elemsize = 16 integer :: rank = 7 call armci_malloc_farray(a, rank, elemsize, lb, ub, rc) ! if (rc .ne. 0) print *, "error armci_malloc_7dc8: error = ", rc end subroutine armci_malloc_7dc8 subroutine armci_free_1dc8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind complex(kind=c8), dimension(:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface complex(kind=c8), dimension(:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 1 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_1dc8: error = ", rc end subroutine armci_free_1dc8 subroutine armci_free_2dc8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind complex(kind=c8), dimension(:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface complex(kind=c8), dimension(:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 2 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_2dc8: error = ", rc end subroutine armci_free_2dc8 subroutine armci_free_3dc8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind complex(kind=c8), dimension(:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface complex(kind=c8), dimension(:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 3 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_3dc8: error = ", rc end subroutine armci_free_3dc8 subroutine armci_free_4dc8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind complex(kind=c8), dimension(:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface complex(kind=c8), dimension(:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 4 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_4dc8: error = ", rc end subroutine armci_free_4dc8 subroutine armci_free_5dc8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind complex(kind=c8), dimension(:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface complex(kind=c8), dimension(:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 5 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_5dc8: error = ", rc end subroutine armci_free_5dc8 subroutine armci_free_6dc8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind complex(kind=c8), dimension(:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface complex(kind=c8), dimension(:,:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 6 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_6dc8: error = ", rc end subroutine armci_free_6dc8 subroutine armci_free_7dc8(a, rc) use definekind implicit none interface subroutine armci_free_farray(a, rank, rc) use definekind complex(kind=c8), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(in) :: rank integer, intent(out) :: rc end subroutine armci_free_farray end interface complex(kind=c8), dimension(:,:,:,:,:,:,:), pointer :: a integer, intent(out), optional :: rc integer :: rank = 7 call armci_free_farray(a, rank, rc) ! if (rc .ne. 0) print *, "error armci_free_7dc8: error = ", rc end subroutine armci_free_7dc8 end module armci_mem_f90 ga-5-3/armci/f90/testanb.f900000640005473000001440000000177310211727231014251 0ustar d3n000usersprogram main use definekind use armci_types use armci_mem_f90 use armci_nbmov use testa_init use checkput type(ARMCI_slice) :: src_slice, dst_slice ! integer(kind=I4), pointer :: a1(:) integer :: remote_proc integer :: lb(7), ub(7), rc, i, j,me, nproc integer :: myunit integer :: m integer :: extent(7) integer :: asize(7) call mpi_init(ierr) call mpi_comm_rank(mpi_comm_world, me, ierr) call mpi_comm_size(mpi_comm_world, nproc, ierr) remote_proc = nproc -1 -me myunit = 10+me call ARMCI_Arr_init() lb(:) = 1 ub(:) = 7 extent(:) = 1 extent(:) = extent(:) + ub(:) - lb(:) asize(1) = extent(1) do m= 2,7 asize(m) = asize(m-1)*extent(m) enddo call testanb_i4(nproc,me,remote_proc) call testanb_i8(nproc,me,remote_proc) call testanb_r4(nproc,me,remote_proc) call testanb_r8(nproc,me,remote_proc) call testanb_c4(nproc,me,remote_proc) call testanb_c8(nproc,me,remote_proc) call ARMCI_Arr_finalize() call mpi_finalize(ierr) end program main ga-5-3/armci/f90/armci_nbmov.f900000640005473000001440000021776410211727231015116 0ustar d3n000usersmodule ARMCI_NbMov use armci_types interface ARMCI_NbPut_fa module procedure ARMCI_NbPut_1di4 module procedure ARMCI_NbPut_2di4 module procedure ARMCI_NbPut_3di4 module procedure ARMCI_NbPut_4di4 module procedure ARMCI_NbPut_5di4 module procedure ARMCI_NbPut_6di4 module procedure ARMCI_NbPut_7di4 module procedure ARMCI_NbPut_1di8 module procedure ARMCI_NbPut_2di8 module procedure ARMCI_NbPut_3di8 module procedure ARMCI_NbPut_4di8 module procedure ARMCI_NbPut_5di8 module procedure ARMCI_NbPut_6di8 module procedure ARMCI_NbPut_7di8 module procedure ARMCI_NbPut_1dr4 module procedure ARMCI_NbPut_2dr4 module procedure ARMCI_NbPut_3dr4 module procedure ARMCI_NbPut_4dr4 module procedure ARMCI_NbPut_5dr4 module procedure ARMCI_NbPut_6dr4 module procedure ARMCI_NbPut_7dr4 module procedure ARMCI_NbPut_1dr8 module procedure ARMCI_NbPut_2dr8 module procedure ARMCI_NbPut_3dr8 module procedure ARMCI_NbPut_4dr8 module procedure ARMCI_NbPut_5dr8 module procedure ARMCI_NbPut_6dr8 module procedure ARMCI_NbPut_7dr8 module procedure ARMCI_NbPut_1dc4 module procedure ARMCI_NbPut_2dc4 module procedure ARMCI_NbPut_3dc4 module procedure ARMCI_NbPut_4dc4 module procedure ARMCI_NbPut_5dc4 module procedure ARMCI_NbPut_6dc4 module procedure ARMCI_NbPut_7dc4 module procedure ARMCI_NbPut_1dc8 module procedure ARMCI_NbPut_2dc8 module procedure ARMCI_NbPut_3dc8 module procedure ARMCI_NbPut_4dc8 module procedure ARMCI_NbPut_5dc8 module procedure ARMCI_NbPut_6dc8 module procedure ARMCI_NbPut_7dc8 end interface interface ARMCI_NbGet_fa module procedure ARMCI_NbGet_1di4 module procedure ARMCI_NbGet_2di4 module procedure ARMCI_NbGet_3di4 module procedure ARMCI_NbGet_4di4 module procedure ARMCI_NbGet_5di4 module procedure ARMCI_NbGet_6di4 module procedure ARMCI_NbGet_7di4 module procedure ARMCI_NbGet_1di8 module procedure ARMCI_NbGet_2di8 module procedure ARMCI_NbGet_3di8 module procedure ARMCI_NbGet_4di8 module procedure ARMCI_NbGet_5di8 module procedure ARMCI_NbGet_6di8 module procedure ARMCI_NbGet_7di8 module procedure ARMCI_NbGet_1dr4 module procedure ARMCI_NbGet_2dr4 module procedure ARMCI_NbGet_3dr4 module procedure ARMCI_NbGet_4dr4 module procedure ARMCI_NbGet_5dr4 module procedure ARMCI_NbGet_6dr4 module procedure ARMCI_NbGet_7dr4 module procedure ARMCI_NbGet_1dr8 module procedure ARMCI_NbGet_2dr8 module procedure ARMCI_NbGet_3dr8 module procedure ARMCI_NbGet_4dr8 module procedure ARMCI_NbGet_5dr8 module procedure ARMCI_NbGet_6dr8 module procedure ARMCI_NbGet_7dr8 module procedure ARMCI_NbGet_1dc4 module procedure ARMCI_NbGet_2dc4 module procedure ARMCI_NbGet_3dc4 module procedure ARMCI_NbGet_4dc4 module procedure ARMCI_NbGet_5dc4 module procedure ARMCI_NbGet_6dc4 module procedure ARMCI_NbGet_7dc4 module procedure ARMCI_NbGet_1dc8 module procedure ARMCI_NbGet_2dc8 module procedure ARMCI_NbGet_3dc8 module procedure ARMCI_NbGet_4dc8 module procedure ARMCI_NbGet_5dc8 module procedure ARMCI_NbGet_6dc8 module procedure ARMCI_NbGet_7dc8 end interface contains subroutine ARMCI_NbPut_1di4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use ARMCI_types integer(kind=I4), dimension(:), pointer :: src, dst type(ARMCI_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface integer(kind=I4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_1di4 subroutine ARMCI_NbPut_2di4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface integer(kind=I4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_2di4 subroutine ARMCI_NbPut_3di4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface integer(kind=I4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_3di4 subroutine ARMCI_NbPut_4di4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface integer(kind=I4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_4di4 subroutine ARMCI_NbPut_5di4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface integer(kind=I4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_5di4 subroutine ARMCI_NbPut_6di4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface integer(kind=I4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_6di4 subroutine ARMCI_NbPut_7di4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface integer(kind=I4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_7di4 subroutine ARMCI_NbPut_1di8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface integer(kind=I8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_1di8 subroutine ARMCI_NbPut_2di8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface integer(kind=I8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_2di8 subroutine ARMCI_NbPut_3di8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface integer(kind=I8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_3di8 subroutine ARMCI_NbPut_4di8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface integer(kind=I8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_4di8 subroutine ARMCI_NbPut_5di8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface integer(kind=I8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_5di8 subroutine ARMCI_NbPut_6di8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface integer(kind=I8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_6di8 subroutine ARMCI_NbPut_7di8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface integer(kind=I8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_7di8 subroutine ARMCI_NbPut_1dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface real(kind=R4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_1dr4 subroutine ARMCI_NbPut_2dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface real(kind=R4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_2dr4 subroutine ARMCI_NbPut_3dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface real(kind=R4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_3dr4 subroutine ARMCI_NbPut_4dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface real(kind=R4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_4dr4 subroutine ARMCI_NbPut_5dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface real(kind=R4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_5dr4 subroutine ARMCI_NbPut_6dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface real(kind=R4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_6dr4 subroutine ARMCI_NbPut_7dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface real(kind=R4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_7dr4 subroutine ARMCI_NbPut_1dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface real(kind=R8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_1dr8 subroutine ARMCI_NbPut_2dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface real(kind=R8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_2dr8 subroutine ARMCI_NbPut_3dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface real(kind=R8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_3dr8 subroutine ARMCI_NbPut_4dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface real(kind=R8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_4dr8 subroutine ARMCI_NbPut_5dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface real(kind=R8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_5dr8 subroutine ARMCI_NbPut_6dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface real(kind=R8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_6dr8 subroutine ARMCI_NbPut_7dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface real(kind=R8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_7dr8 subroutine ARMCI_NbPut_1dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface complex(kind=C4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_1dc4 subroutine ARMCI_NbPut_2dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface complex(kind=C4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_2dc4 subroutine ARMCI_NbPut_3dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface complex(kind=C4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_3dc4 subroutine ARMCI_NbPut_4dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface complex(kind=C4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_4dc4 subroutine ARMCI_NbPut_5dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface complex(kind=C4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_5dc4 subroutine ARMCI_NbPut_6dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface complex(kind=C4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_6dc4 subroutine ARMCI_NbPut_7dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface complex(kind=C4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_7dc4 subroutine ARMCI_NbPut_1dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface complex(kind=C8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_1dc8 subroutine ARMCI_NbPut_2dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface complex(kind=C8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_2dc8 subroutine ARMCI_NbPut_3dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface complex(kind=C8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_3dc8 subroutine ARMCI_NbPut_4dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface complex(kind=C8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_4dc8 subroutine ARMCI_NbPut_5dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface complex(kind=C8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_5dc8 subroutine ARMCI_NbPut_6dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface complex(kind=C8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_6dc8 subroutine ARMCI_NbPut_7dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbPut_farrays end interface complex(kind=C8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call ARMCI_NbPut_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbPut_7dc8 !Get subroutine ARMCI_NbGet_1di4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface integer(kind=I4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_1di4 subroutine ARMCI_NbGet_2di4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface integer(kind=I4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_2di4 subroutine ARMCI_NbGet_3di4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface integer(kind=I4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_3di4 subroutine ARMCI_NbGet_4di4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface integer(kind=I4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_4di4 subroutine ARMCI_NbGet_5di4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface integer(kind=I4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_5di4 subroutine ARMCI_NbGet_6di4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface integer(kind=I4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_6di4 subroutine ARMCI_NbGet_7di4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface integer(kind=I4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_7di4 subroutine ARMCI_NbGet_1di8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface integer(kind=I8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_1di8 subroutine ARMCI_NbGet_2di8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface integer(kind=I8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_2di8 subroutine ARMCI_NbGet_3di8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface integer(kind=I8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_3di8 subroutine ARMCI_NbGet_4di8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface integer(kind=I8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_4di8 subroutine ARMCI_NbGet_5di8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface integer(kind=I8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_5di8 subroutine ARMCI_NbGet_6di8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface integer(kind=I8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_6di8 subroutine ARMCI_NbGet_7di8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=I8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface integer(kind=I8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_7di8 subroutine ARMCI_NbGet_1dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface real(kind=R4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_1dr4 subroutine ARMCI_NbGet_2dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface real(kind=R4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_2dr4 subroutine ARMCI_NbGet_3dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface real(kind=R4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_3dr4 subroutine ARMCI_NbGet_4dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface real(kind=R4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_4dr4 subroutine ARMCI_NbGet_5dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface real(kind=R4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_5dr4 subroutine ARMCI_NbGet_6dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface real(kind=R4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_6dr4 subroutine ARMCI_NbGet_7dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface real(kind=R4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_7dr4 subroutine ARMCI_NbGet_1dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface real(kind=R8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_1dr8 subroutine ARMCI_NbGet_2dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface real(kind=R8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_2dr8 subroutine ARMCI_NbGet_3dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface real(kind=R8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_3dr8 subroutine ARMCI_NbGet_4dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface real(kind=R8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_4dr8 subroutine ARMCI_NbGet_5dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface real(kind=R8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_5dr8 subroutine ARMCI_NbGet_6dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface real(kind=R8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_6dr8 subroutine ARMCI_NbGet_7dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=R8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface real(kind=R8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_7dr8 subroutine ARMCI_NbGet_1dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface complex(kind=C4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_1dc4 subroutine ARMCI_NbGet_2dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface complex(kind=C4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_2dc4 subroutine ARMCI_NbGet_3dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface complex(kind=C4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_3dc4 subroutine ARMCI_NbGet_4dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface complex(kind=C4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_4dc4 subroutine ARMCI_NbGet_5dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface complex(kind=C4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_5dc4 subroutine ARMCI_NbGet_6dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface complex(kind=C4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_6dc4 subroutine ARMCI_NbGet_7dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface complex(kind=C4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_7dc4 subroutine ARMCI_NbGet_1dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface complex(kind=C8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_1dc8 subroutine ARMCI_NbGet_2dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface complex(kind=C8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_2dc8 subroutine ARMCI_NbGet_3dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface complex(kind=C8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_3dc8 subroutine ARMCI_NbGet_4dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface complex(kind=C8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_4dc8 subroutine ARMCI_NbGet_5dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface complex(kind=C8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_5dc8 subroutine ARMCI_NbGet_6dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface complex(kind=C8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_6dc8 subroutine ARMCI_NbGet_7dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind ! implicit none interface subroutine ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=C8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine ARMCI_NbGet_farrays end interface complex(kind=C8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call ARMCI_NbGet_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine ARMCI_NbGet_7dc8 end module ARMCI_NbMov ga-5-3/armci/f90/definekind.f900000640005473000001440000000055110211727231014702 0ustar d3n000usersmodule definekind integer, parameter :: I4 = SELECTED_INT_KIND(9) integer, parameter :: I8 = SELECTED_INT_KIND(16) integer, parameter :: R4 = SELECTED_REAL_KIND(5) integer, parameter :: R8 = SELECTED_REAL_KIND(12) integer, parameter :: C4 = SELECTED_REAL_KIND(5) integer, parameter :: C8 = SELECTED_REAL_KIND(12) end module definekind ga-5-3/armci/f90/kinds.f900000640005473000001440000000102710211727231013711 0ustar d3n000users program kinds INTEGER*4 I4 INTEGER*8 I8 I4 = 1 I8 = 1234567890123_8 write (*,'("The KIND for single precision is ",I2)') KIND(0.0) write (*,'("The KIND for double precision is ",I2)') KIND(0.0D0) write (*,'("The KIND for integer *4 is ",I2)') KIND(I4) write (*,'("The KIND for integer *8 is ",I2)') KIND(I8) write (*,'("The KIND for single complex is ",I2)') KIND((0.0,0.0)) write (*,'("The KIND for double precision is ",I2)') KIND((0.0D0,0.0D0)) stop end ga-5-3/armci/f90/testa.F900000640005473000001440000000425511300316052013662 0ustar d3n000usersprogram main use definekind use armci_types use armci_mem_f90 use armci_mov_f90 use armci_nbmov use testa_init type(armci_slice) :: src_slice, dst_slice ! integer(kind=i4), pointer :: a1(:) integer :: remote_proc integer :: lb(7), ub(7), rc, i, j,me, nproc integer :: myunit integer :: m integer :: extent(7) integer :: asize(7) type(armci_slice) :: src_slice, dst_slice real(kind=8), dimension(:,:), pointer :: buff real(kind=8) :: time1,time2,time_array(28) integer chunk(28) data chunk /1,9,16,36,81,144,256,400,576,900,1600,2304,2704,4096,& 6084,8281,10816,16384,20164,29241,44100,65536,90000,124609,& 160000,193600,226576, 262144/ integer tbuffid,oldtbuffid #ifdef MPI integer :: ierr include 'mpif.h' call mpi_init(ierr) call mpi_comm_rank(mpi_comm_world,me,ierr) call mpi_comm_size(mpi_comm_world,nproc,ierr) #else call pbeginf() nproc = nnodes() me = nodeid() #endif remote_proc = nproc -1 -me call armci_arr_init() lb(:) = 1 ub(:) = 550*550 ub(2) = 2 call armci_malloc_fa(buff,lb,ub,ierr) tbuffid = 2 write (6,*) 'start' ! 1d if( me .eq. 0) then do m=1,28 src_slice%lo(1) = 1 src_slice%lo(2) = tbuffid src_slice%hi(1) = chunk(m) src_slice%hi(2) = tbuffid src_slice%stride(:)=2 dst_slice%lo(1) = 1 dst_slice%lo(2) = tbuffid dst_slice%hi(1) = chunk(m) dst_slice%hi(2) = tbuffid dst_slice%stride(:)=2 call armci_put_fa(buff,src_slice,buff,dst_slice,1,ierr) time1 = mpi_wtime() i = 50 ! if (m .gt. 13) i = 4 do k=1,i if(tbuffid .eq. 1) then tbuffid=2 else tbuffid=1 endif src_slice%lo(2) = tbuffid src_slice%hi(2) = tbuffid dst_slice%lo(2) = tbuffid dst_slice%hi(2) = tbuffid call armci_put_fa(buff,src_slice,buff,dst_slice,1,ierr) enddo time2 = mpi_wtime() time_array(m) = (time2 - time1)/i write (6,*) chunk(m),' ',time_array(m) enddo endif call mpi_barrier(mpi_comm_world,ierr) call armci_arr_finalize() #ifdef MPI call mpi_finalize(ierr) #else call pend() #endif end program main ga-5-3/armci/f90/definekind_cray.f900000640005473000001440000000036010211727231015716 0ustar d3n000usersmodule definekind integer, parameter :: I4 = 4 integer, parameter :: I8 = 8 integer, parameter :: R4 = 4 integer, parameter :: R8 = 8 integer, parameter :: C4 = 4 integer, parameter :: C8 = 8 end module definekind ga-5-3/armci/f90/armci_types.f900000640005473000001440000000023110211727231015114 0ustar d3n000usersmodule armci_types type armci_slice integer :: lo(7) integer :: hi(7) integer :: stride(7) end type armci_slice end module armci_types ga-5-3/armci/f90/arraydesc.h0000640005473000001440000000113610211727231014410 0ustar d3n000users#ifndef __ARMCIARR__ #define __ARMCIARR__ #define MAXDIM 7 typedef struct { int rank; int elemsize; int extent[MAXDIM]; int lo[MAXDIM]; int hi[MAXDIM]; int stride[MAXDIM]; void **aptr; void *amem; }armci_arr_dsc_t; #define HEADER_SIZE 256 #define GET_PTR_ARR_FROM_ARRAY(ptr) (((char*)ptr)-HEADER_SIZE -armci_nproc*sizeof(void*)) #define GET_ARR_DSC_FROM_ARRAY(ptr) (armci_arr_dsc_t*)(((char*)ptr)-HEADER_SIZE) typedef int index_size_t; extern void _array_create(void **pptr, int elemsize, int rank, index_size_t *lb, index_size_t *ub); extern void _array_free(void *ptr); #endif ga-5-3/armci/f90/checkput.f900000640005473000001440000005740710211727231014424 0ustar d3n000usersmodule checkput use definekind use armci_types interface check_b module procedure check_b_i4 module procedure check_b_i8 module procedure check_b_r4 module procedure check_b_r8 module procedure check_b_c4 module procedure check_b_c8 end interface contains subroutine check_b_i4(rank,b,dst_slice,src_slice,remote_proc,dlb,dub, & & slb,sub,joff,pass) implicit none integer rank integer(kind=i4), pointer :: b(:) type(armci_slice) :: dst_slice, src_slice integer remote_proc integer dlb(7),dub(7),slb(7),sub(7) integer joff integer pass integer me integer index integer dextent(7) integer sextent(7) integer dst_stride(7) integer src_stride(7) integer src_off(7),dst_off(7) integer src_lo(7),src_hi(7) integer dst_lo(7),dst_hi(7) integer i,m,i1,i2,i3,k4,i5,i6,i7 integer j1s,j2s,j3s,j4s,j5s,j6s,j7s integer j1d,j2d,j3d,j4d,j5d,j6d,j7d integer factor integer myunit integer jbase ! me = nodeid() ! myunit = 10+me ! write(myunit,*)me,'check_b_i4 rank = ',rank ! write(myunit,*)me,'check_b_i4 dst_slice = ',dst_slice ! write(myunit,*)me,'check_b_i4 src_slice = ',src_slice ! write(myunit,*)me,'check_b_i4 remote_proc = ',remote_proc ! write(myunit,*)me,'check_b_i4 dlb = ',dlb ! write(myunit,*)me,'check_b_i4 dub = ',dub ! write(myunit,*)me,'check_b_i4 slb = ',slb ! write(myunit,*)me,'check_b_i4 sub = ',sub ! write(myunit,*)me,'check_b_i4 joff = ',joff dst_lo(:) = 1 dst_hi(:) = 1 dst_stride(:) = 1 do m = 1,rank dst_lo(m) = dst_slice%lo(m) enddo do m = 1,rank dst_hi(m) = dst_slice%hi(m) enddo do m = 1,rank dst_stride(m) = dst_slice%stride(m) enddo src_lo(:) = 1 src_hi(:) = 1 src_stride(:) = 1 do m = 1,rank src_lo(m) = src_slice%lo(m) enddo do m = 1,rank src_hi(m) = src_slice%hi(m) enddo do m = 1,rank src_stride(m) = src_slice%stride(m) enddo do m = 1,rank sextent(m) = sub(m) - slb(m) + 1 enddo do m = 1,rank dextent(m) = dub(m) - dlb(m) + 1 enddo do m = rank+1,7 dextent(m) = 1 enddo do m = rank+1,7 sextent(m) = 1 enddo src_off(1) = 1 do m = 2,rank src_off(m) = src_off(m-1)*sextent(m-1) enddo dst_off(1) = 1 do m = 2,rank dst_off(m) = dst_off(m-1)*dextent(m-1) enddo do m = 1,rank src_off(m) = src_off(m) * src_slice%stride(m) enddo do m = 1,rank dst_off(m) = dst_off(m) * dst_slice%stride(m) enddo do m= rank+1,7 dst_off(m) = 0 enddo do m= rank+1,7 src_off(m) = 0 enddo j7d = 1 factor = 1 do m = 1,rank j7d = j7d + (dst_lo(m) - dlb(m))*factor factor = factor * dextent(1) enddo j7s = 1 factor = 1 do m = 1,rank j7s = j7s + (src_lo(m) - slb(m))*factor factor = factor * sextent(1) enddo ! write(myunit,*)me,'check_b_i4 j7d,j7s = ',j7d,j7s pass = 1 index = 0 jbase = joff -1 do i7 = dst_lo(7),dst_hi(7),dst_stride(7) j6d = j7d j6s = j7s do i6 = dst_lo(6),dst_hi(6),dst_stride(6) j5d = j6d j5s = j6s do i5 = dst_lo(5),dst_hi(5),dst_stride(5) j4d = j5d j4s = j5s do k4 = dst_lo(4),dst_hi(4),dst_stride(4) j3d = j4d j3s = j4s do i3 = dst_lo(3),dst_hi(3),dst_stride(3) j2d = j3d j2s = j3s do i2 = dst_lo(2),dst_hi(2),dst_stride(2) j1d = j2d j1s = j2s do i1 = dst_lo(1),dst_hi(1),dst_stride(1) if (b(j1d) .ne. jbase + j1s) then ! write(myunit,*)'b(',j1d,') = ',b(j1d),' jbase + j1s = ',jbase+j1s pass = 0 index = j1d endif j1d = j1d + dst_off(1) j1s = j1s + src_off(1) enddo j2d = j2d + dst_off(2) j2s = j2s + src_off(2) enddo j3d = j3d + dst_off(3) j3s = j3s + src_off(3) enddo j4d = j4d + dst_off(4) j4s = j4s + src_off(4) enddo j5d = j5d + dst_off(5) j5s = j5s + src_off(5) enddo j6d = j6d + dst_off(6) j6s = j6s + src_off(6) enddo j7d = j7d + dst_off(7) j7s = j7s + src_off(7) enddo return end subroutine check_b_i4 subroutine check_b_i8(rank,b,dst_slice,src_slice,remote_proc,dlb,dub, & & slb,sub,joff,pass) implicit none integer rank integer(kind=i8), pointer :: b(:) type(armci_slice) :: dst_slice, src_slice integer remote_proc integer dlb(7),dub(7),slb(7),sub(7) integer joff integer pass integer me integer index integer dextent(7) integer sextent(7) integer dst_stride(7) integer src_stride(7) integer src_off(7),dst_off(7) integer src_lo(7),src_hi(7) integer dst_lo(7),dst_hi(7) integer i,m,i1,i2,i3,k4,i5,i6,i7 integer(kind=i8) :: j1s,j2s,j3s,j4s,j5s,j6s,j7s integer(kind=i8) :: j1d,j2d,j3d,j4d,j5d,j6d,j7d integer factor integer myunit integer(kind=i8) :: jbase dst_lo(:) = 1 dst_hi(:) = 1 dst_stride(:) = 1 do m = 1,rank dst_lo(m) = dst_slice%lo(m) enddo do m = 1,rank dst_hi(m) = dst_slice%hi(m) enddo do m = 1,rank dst_stride(m) = dst_slice%stride(m) enddo src_lo(:) = 1 src_hi(:) = 1 src_stride(:) = 1 do m = 1,rank src_lo(m) = src_slice%lo(m) enddo do m = 1,rank src_hi(m) = src_slice%hi(m) enddo do m = 1,rank src_stride(m) = src_slice%stride(m) enddo do m = 1,rank sextent(m) = sub(m) - slb(m) + 1 enddo do m = 1,rank dextent(m) = dub(m) - dlb(m) + 1 enddo do m = rank+1,7 dextent(m) = 1 enddo do m = rank+1,7 sextent(m) = 1 enddo src_off(1) = 1 do m = 2,rank src_off(m) = src_off(m-1)*sextent(m-1) enddo dst_off(1) = 1 do m = 2,rank dst_off(m) = dst_off(m-1)*dextent(m-1) enddo do m = 1,rank src_off(m) = src_off(m) * src_slice%stride(m) enddo do m = 1,rank dst_off(m) = dst_off(m) * dst_slice%stride(m) enddo do m= rank+1,7 dst_off(m) = 0 enddo do m= rank+1,7 src_off(m) = 0 enddo j7d = 1 factor = 1 do m = 1,rank j7d = j7d + (dst_lo(m) - dlb(m))*factor factor = factor * dextent(1) enddo j7s = 1 factor = 1 do m = 1,rank j7s = j7s + (src_lo(m) - slb(m))*factor factor = factor * sextent(1) enddo pass = 1 index = 0 jbase = joff -1 do i7 = dst_lo(7),dst_hi(7),dst_stride(7) j6d = j7d j6s = j7s do i6 = dst_lo(6),dst_hi(6),dst_stride(6) j5d = j6d j5s = j6s do i5 = dst_lo(5),dst_hi(5),dst_stride(5) j4d = j5d j4s = j5s do k4 = dst_lo(4),dst_hi(4),dst_stride(4) j3d = j4d j3s = j4s do i3 = dst_lo(3),dst_hi(3),dst_stride(3) j2d = j3d j2s = j3s do i2 = dst_lo(2),dst_hi(2),dst_stride(2) j1d = j2d j1s = j2s do i1 = dst_lo(1),dst_hi(1),dst_stride(1) if (b(j1d) .ne. jbase + j1s) then print *,'checkb_i8 fail: j1d,b(j1d),jbase,j1s,jbase+j1s = ',& & j1d,b(j1d),jbase,j1s,jbase+j1s stop pass = 0 index = j1d endif j1d = j1d + dst_off(1) j1s = j1s + src_off(1) enddo j2d = j2d + dst_off(2) j2s = j2s + src_off(2) enddo j3d = j3d + dst_off(3) j3s = j3s + src_off(3) enddo j4d = j4d + dst_off(4) j4s = j4s + src_off(4) enddo j5d = j5d + dst_off(5) j5s = j5s + src_off(5) enddo j6d = j6d + dst_off(6) j6s = j6s + src_off(6) enddo j7d = j7d + dst_off(7) j7s = j7s + src_off(7) enddo return end subroutine check_b_i8 subroutine check_b_r4(rank,b,dst_slice,src_slice,remote_proc,dlb,dub, & & slb,sub,joff,pass) implicit none integer rank real(kind=r4), pointer :: b(:) type(armci_slice) :: dst_slice, src_slice integer remote_proc integer dlb(7),dub(7),slb(7),sub(7) integer joff integer pass integer me integer index integer dextent(7) integer sextent(7) integer dst_stride(7) integer src_stride(7) integer src_off(7),dst_off(7) integer src_lo(7),src_hi(7) integer dst_lo(7),dst_hi(7) integer i,m,i1,i2,i3,k4,i5,i6,i7 integer j1s,j2s,j3s,j4s,j5s,j6s,j7s integer j1d,j2d,j3d,j4d,j5d,j6d,j7d integer factor integer myunit integer jbase dst_lo(:) = 1 dst_hi(:) = 1 dst_stride(:) = 1 do m = 1,rank dst_lo(m) = dst_slice%lo(m) enddo do m = 1,rank dst_hi(m) = dst_slice%hi(m) enddo do m = 1,rank dst_stride(m) = dst_slice%stride(m) enddo src_lo(:) = 1 src_hi(:) = 1 src_stride(:) = 1 do m = 1,rank src_lo(m) = src_slice%lo(m) enddo do m = 1,rank src_hi(m) = src_slice%hi(m) enddo do m = 1,rank src_stride(m) = src_slice%stride(m) enddo do m = 1,rank sextent(m) = sub(m) - slb(m) + 1 enddo do m = 1,rank dextent(m) = dub(m) - dlb(m) + 1 enddo do m = rank+1,7 dextent(m) = 1 enddo do m = rank+1,7 sextent(m) = 1 enddo src_off(1) = 1 do m = 2,rank src_off(m) = src_off(m-1)*sextent(m-1) enddo dst_off(1) = 1 do m = 2,rank dst_off(m) = dst_off(m-1)*dextent(m-1) enddo do m = 1,rank src_off(m) = src_off(m) * src_slice%stride(m) enddo do m = 1,rank dst_off(m) = dst_off(m) * dst_slice%stride(m) enddo do m= rank+1,7 dst_off(m) = 0 enddo do m= rank+1,7 src_off(m) = 0 enddo j7d = 1 factor = 1 do m = 1,rank j7d = j7d + (dst_lo(m) - dlb(m))*factor factor = factor * dextent(1) enddo j7s = 1 factor = 1 do m = 1,rank j7s = j7s + (src_lo(m) - slb(m))*factor factor = factor * sextent(1) enddo pass = 1 index = 0 jbase = joff -1 do i7 = dst_lo(7),dst_hi(7),dst_stride(7) j6d = j7d j6s = j7s do i6 = dst_lo(6),dst_hi(6),dst_stride(6) j5d = j6d j5s = j6s do i5 = dst_lo(5),dst_hi(5),dst_stride(5) j4d = j5d j4s = j5s do k4 = dst_lo(4),dst_hi(4),dst_stride(4) j3d = j4d j3s = j4s do i3 = dst_lo(3),dst_hi(3),dst_stride(3) j2d = j3d j2s = j3s do i2 = dst_lo(2),dst_hi(2),dst_stride(2) j1d = j2d j1s = j2s do i1 = dst_lo(1),dst_hi(1),dst_stride(1) if (b(j1d) .ne. float(jbase + j1s)) then pass = 0 index = j1d endif j1d = j1d + dst_off(1) j1s = j1s + src_off(1) enddo j2d = j2d + dst_off(2) j2s = j2s + src_off(2) enddo j3d = j3d + dst_off(3) j3s = j3s + src_off(3) enddo j4d = j4d + dst_off(4) j4s = j4s + src_off(4) enddo j5d = j5d + dst_off(5) j5s = j5s + src_off(5) enddo j6d = j6d + dst_off(6) j6s = j6s + src_off(6) enddo j7d = j7d + dst_off(7) j7s = j7s + src_off(7) enddo return end subroutine check_b_r4 subroutine check_b_r8(rank,b,dst_slice,src_slice,remote_proc,dlb,dub, & & slb,sub,joff,pass) implicit none integer rank real(kind=r8), pointer :: b(:) type(armci_slice) :: dst_slice, src_slice integer remote_proc integer dlb(7),dub(7),slb(7),sub(7) integer joff integer pass integer me integer index integer dextent(7) integer sextent(7) integer dst_stride(7) integer src_stride(7) integer src_off(7),dst_off(7) integer src_lo(7),src_hi(7) integer dst_lo(7),dst_hi(7) integer i,m,i1,i2,i3,k4,i5,i6,i7 integer j1s,j2s,j3s,j4s,j5s,j6s,j7s integer j1d,j2d,j3d,j4d,j5d,j6d,j7d integer factor integer myunit integer jbase dst_lo(:) = 1 dst_hi(:) = 1 dst_stride(:) = 1 do m = 1,rank dst_lo(m) = dst_slice%lo(m) enddo do m = 1,rank dst_hi(m) = dst_slice%hi(m) enddo do m = 1,rank dst_stride(m) = dst_slice%stride(m) enddo src_lo(:) = 1 src_hi(:) = 1 src_stride(:) = 1 do m = 1,rank src_lo(m) = src_slice%lo(m) enddo do m = 1,rank src_hi(m) = src_slice%hi(m) enddo do m = 1,rank src_stride(m) = src_slice%stride(m) enddo do m = 1,rank sextent(m) = sub(m) - slb(m) + 1 enddo do m = 1,rank dextent(m) = dub(m) - dlb(m) + 1 enddo do m = rank+1,7 dextent(m) = 1 enddo do m = rank+1,7 sextent(m) = 1 enddo src_off(1) = 1 do m = 2,rank src_off(m) = src_off(m-1)*sextent(m-1) enddo dst_off(1) = 1 do m = 2,rank dst_off(m) = dst_off(m-1)*dextent(m-1) enddo do m = 1,rank src_off(m) = src_off(m) * src_slice%stride(m) enddo do m = 1,rank dst_off(m) = dst_off(m) * dst_slice%stride(m) enddo do m= rank+1,7 dst_off(m) = 0 enddo do m= rank+1,7 src_off(m) = 0 enddo j7d = 1 factor = 1 do m = 1,rank j7d = j7d + (dst_lo(m) - dlb(m))*factor factor = factor * dextent(1) enddo j7s = 1 factor = 1 do m = 1,rank j7s = j7s + (src_lo(m) - slb(m))*factor factor = factor * sextent(1) enddo pass = 1 index = 0 jbase = joff -1 do i7 = dst_lo(7),dst_hi(7),dst_stride(7) j6d = j7d j6s = j7s do i6 = dst_lo(6),dst_hi(6),dst_stride(6) j5d = j6d j5s = j6s do i5 = dst_lo(5),dst_hi(5),dst_stride(5) j4d = j5d j4s = j5s do k4 = dst_lo(4),dst_hi(4),dst_stride(4) j3d = j4d j3s = j4s do i3 = dst_lo(3),dst_hi(3),dst_stride(3) j2d = j3d j2s = j3s do i2 = dst_lo(2),dst_hi(2),dst_stride(2) j1d = j2d j1s = j2s do i1 = dst_lo(1),dst_hi(1),dst_stride(1) if (b(j1d) .ne. dble(jbase + j1s)) then pass = 0 index = j1d endif j1d = j1d + dst_off(1) j1s = j1s + src_off(1) enddo j2d = j2d + dst_off(2) j2s = j2s + src_off(2) enddo j3d = j3d + dst_off(3) j3s = j3s + src_off(3) enddo j4d = j4d + dst_off(4) j4s = j4s + src_off(4) enddo j5d = j5d + dst_off(5) j5s = j5s + src_off(5) enddo j6d = j6d + dst_off(6) j6s = j6s + src_off(6) enddo j7d = j7d + dst_off(7) j7s = j7s + src_off(7) enddo return end subroutine check_b_r8 subroutine check_b_c4(rank,b,dst_slice,src_slice,remote_proc,dlb,dub, & & slb,sub,joff,pass) implicit none integer rank complex(kind=c4), pointer :: b(:) type(armci_slice) :: dst_slice, src_slice integer remote_proc integer dlb(7),dub(7),slb(7),sub(7) integer joff integer pass integer me integer index integer dextent(7) integer sextent(7) integer dst_stride(7) integer src_stride(7) integer src_off(7),dst_off(7) integer src_lo(7),src_hi(7) integer dst_lo(7),dst_hi(7) integer i,m,i1,i2,i3,k4,i5,i6,i7 integer j1s,j2s,j3s,j4s,j5s,j6s,j7s integer j1d,j2d,j3d,j4d,j5d,j6d,j7d integer factor integer myunit integer jbase dst_lo(:) = 1 dst_hi(:) = 1 dst_stride(:) = 1 do m = 1,rank dst_lo(m) = dst_slice%lo(m) enddo do m = 1,rank dst_hi(m) = dst_slice%hi(m) enddo do m = 1,rank dst_stride(m) = dst_slice%stride(m) enddo src_lo(:) = 1 src_hi(:) = 1 src_stride(:) = 1 do m = 1,rank src_lo(m) = src_slice%lo(m) enddo do m = 1,rank src_hi(m) = src_slice%hi(m) enddo do m = 1,rank src_stride(m) = src_slice%stride(m) enddo do m = 1,rank sextent(m) = sub(m) - slb(m) + 1 enddo do m = 1,rank dextent(m) = dub(m) - dlb(m) + 1 enddo do m = rank+1,7 dextent(m) = 1 enddo do m = rank+1,7 sextent(m) = 1 enddo src_off(1) = 1 do m = 2,rank src_off(m) = src_off(m-1)*sextent(m-1) enddo dst_off(1) = 1 do m = 2,rank dst_off(m) = dst_off(m-1)*dextent(m-1) enddo do m = 1,rank src_off(m) = src_off(m) * src_slice%stride(m) enddo do m = 1,rank dst_off(m) = dst_off(m) * dst_slice%stride(m) enddo do m= rank+1,7 dst_off(m) = 0 enddo do m= rank+1,7 src_off(m) = 0 enddo j7d = 1 factor = 1 do m = 1,rank j7d = j7d + (dst_lo(m) - dlb(m))*factor factor = factor * dextent(1) enddo j7s = 1 factor = 1 do m = 1,rank j7s = j7s + (src_lo(m) - slb(m))*factor factor = factor * sextent(1) enddo pass = 1 index = 0 jbase = joff -1 do i7 = dst_lo(7),dst_hi(7),dst_stride(7) j6d = j7d j6s = j7s do i6 = dst_lo(6),dst_hi(6),dst_stride(6) j5d = j6d j5s = j6s do i5 = dst_lo(5),dst_hi(5),dst_stride(5) j4d = j5d j4s = j5s do k4 = dst_lo(4),dst_hi(4),dst_stride(4) j3d = j4d j3s = j4s do i3 = dst_lo(3),dst_hi(3),dst_stride(3) j2d = j3d j2s = j3s do i2 = dst_lo(2),dst_hi(2),dst_stride(2) j1d = j2d j1s = j2s do i1 = dst_lo(1),dst_hi(1),dst_stride(1) if (b(j1d) .ne. cmplx(jbase+j1s,jbase+j1s,c4)) then pass = 0 index = j1d endif j1d = j1d + dst_off(1) j1s = j1s + src_off(1) enddo j2d = j2d + dst_off(2) j2s = j2s + src_off(2) enddo j3d = j3d + dst_off(3) j3s = j3s + src_off(3) enddo j4d = j4d + dst_off(4) j4s = j4s + src_off(4) enddo j5d = j5d + dst_off(5) j5s = j5s + src_off(5) enddo j6d = j6d + dst_off(6) j6s = j6s + src_off(6) enddo j7d = j7d + dst_off(7) j7s = j7s + src_off(7) enddo return end subroutine check_b_c4 subroutine check_b_c8(rank,b,dst_slice,src_slice,remote_proc,dlb,dub, & & slb,sub,joff,pass) implicit none integer rank complex(kind=c8), pointer :: b(:) type(armci_slice) :: dst_slice, src_slice integer remote_proc integer dlb(7),dub(7),slb(7),sub(7) integer joff integer pass integer me integer index integer dextent(7) integer sextent(7) integer dst_stride(7) integer src_stride(7) integer src_off(7),dst_off(7) integer src_lo(7),src_hi(7) integer dst_lo(7),dst_hi(7) integer i,m,i1,i2,i3,k4,i5,i6,i7 integer j1s,j2s,j3s,j4s,j5s,j6s,j7s integer j1d,j2d,j3d,j4d,j5d,j6d,j7d integer factor integer myunit integer jbase dst_lo(:) = 1 dst_hi(:) = 1 dst_stride(:) = 1 do m = 1,rank dst_lo(m) = dst_slice%lo(m) enddo do m = 1,rank dst_hi(m) = dst_slice%hi(m) enddo do m = 1,rank dst_stride(m) = dst_slice%stride(m) enddo src_lo(:) = 1 src_hi(:) = 1 src_stride(:) = 1 do m = 1,rank src_lo(m) = src_slice%lo(m) enddo do m = 1,rank src_hi(m) = src_slice%hi(m) enddo do m = 1,rank src_stride(m) = src_slice%stride(m) enddo do m = 1,rank sextent(m) = sub(m) - slb(m) + 1 enddo do m = 1,rank dextent(m) = dub(m) - dlb(m) + 1 enddo do m = rank+1,7 dextent(m) = 1 enddo do m = rank+1,7 sextent(m) = 1 enddo src_off(1) = 1 do m = 2,rank src_off(m) = src_off(m-1)*sextent(m-1) enddo dst_off(1) = 1 do m = 2,rank dst_off(m) = dst_off(m-1)*dextent(m-1) enddo do m = 1,rank src_off(m) = src_off(m) * src_slice%stride(m) enddo do m = 1,rank dst_off(m) = dst_off(m) * dst_slice%stride(m) enddo do m= rank+1,7 dst_off(m) = 0 enddo do m= rank+1,7 src_off(m) = 0 enddo j7d = 1 factor = 1 do m = 1,rank j7d = j7d + (dst_lo(m) - dlb(m))*factor factor = factor * dextent(1) enddo j7s = 1 factor = 1 do m = 1,rank j7s = j7s + (src_lo(m) - slb(m))*factor factor = factor * sextent(1) enddo pass = 1 index = 0 jbase = joff -1 do i7 = dst_lo(7),dst_hi(7),dst_stride(7) j6d = j7d j6s = j7s do i6 = dst_lo(6),dst_hi(6),dst_stride(6) j5d = j6d j5s = j6s do i5 = dst_lo(5),dst_hi(5),dst_stride(5) j4d = j5d j4s = j5s do k4 = dst_lo(4),dst_hi(4),dst_stride(4) j3d = j4d j3s = j4s do i3 = dst_lo(3),dst_hi(3),dst_stride(3) j2d = j3d j2s = j3s do i2 = dst_lo(2),dst_hi(2),dst_stride(2) j1d = j2d j1s = j2s do i1 = dst_lo(1),dst_hi(1),dst_stride(1) if (b(j1d) .ne. cmplx(jbase+j1s,jbase+j1s,c8)) then pass = 0 index = j1d endif j1d = j1d + dst_off(1) j1s = j1s + src_off(1) enddo j2d = j2d + dst_off(2) j2s = j2s + src_off(2) enddo j3d = j3d + dst_off(3) j3s = j3s + src_off(3) enddo j4d = j4d + dst_off(4) j4s = j4s + src_off(4) enddo j5d = j5d + dst_off(5) j5s = j5s + src_off(5) enddo j6d = j6d + dst_off(6) j6s = j6s + src_off(6) enddo j7d = j7d + dst_off(7) j7s = j7s + src_off(7) enddo return end subroutine check_b_c8 end module checkput ga-5-3/armci/f90/testnbfa_type.f900000640005473000001440000027357210211727231015470 0ustar d3n000userssubroutine testanb_i4(nproc,me,remote_proc) use definekind use armci_types use armci_mem_f90 use armci_nbmov use testa_init use checkput implicit none type(ARMCI_slice) :: src_slice, dst_slice integer :: nproc,me,remote_proc integer(kind=I4), pointer :: a7_i4(:,:,:,:,:,:,:), b7_i4(:,:,:,:,:,:,:) integer(kind=I4), pointer :: a6_i4(:,:,:,:,:,:), b6_i4(:,:,:,:,:,:) integer(kind=I4), pointer :: a5_i4(:,:,:,:,:), b5_i4(:,:,:,:,:) integer(kind=I4), pointer :: a4_i4(:,:,:,:), b4_i4(:,:,:,:) integer(kind=I4), pointer :: a3_i4(:,:,:), b3_i4(:,:,:) integer(kind=I4), pointer :: a2_i4(:,:), b2_i4(:,:) integer(kind=I4), pointer :: a1_i4(:), b1_i4(:) integer(kind=I4), pointer :: v_i4(:) integer :: lb(7), ub(7), rc, i, j integer :: pass integer :: myunit integer :: m integer :: rank integer :: joff integer :: vshape(1) integer :: extent(7) integer :: asize(7) integer :: score(7) integer :: vlb(1),vub(1) integer :: afirst,bfirst afirst = 1+me bfirst = afirst * afirst lb(:) = 1 ub(:) = 7 extent(:) = 1 extent(:) = extent(:) + ub(:) - lb(:) asize(1) = extent(1) do m= 2,7 asize(m) = asize(m-1)*extent(m) enddo ! Test I4 flavor. vlb(1) = 1 vub(1) = asize(7) call ARMCI_Malloc_fa(v_i4,vlb,vub,rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for v_i4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a7_i4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a7_i4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b7_i4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b7_i4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a6_i4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a6_i4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b6_i4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b6_i4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a5_i4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a5_i4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b5_i4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b5_i4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a4_i4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a4_i4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b4_i4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b4_i4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a3_i4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a3_i4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b3_i4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b3_i4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a2_i4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a2_i4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b2_i4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b2_i4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a1_i4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a1_i4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b1_i4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b1_i4 failed rc = ',rc stop endif ! Let all processors get allocated. call ARMCI_Sync() ! I4 allocations done, now loop over slices. ! We will test three flavors of slices, ! all unit stride, unit stride in the first dimension only, ! all non-unit stride (2). score(:) = 0 joff = remote_proc + 1 ! ! Test Put. ! do m = 1,3 ! Initialize arrays. ! call init_7d(a7_i4,b7_i4,lb,ub,lb,ub,afirst,bfirst) a6_i4(:,:,:,:,:,:) = a7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5_i4(:,:,:,:,:) = a7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4_i4(:,:,:,:) = a7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3_i4(:,:,:) = a7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2_i4(:,:) = a7_i4(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1_i4(:) = a7_i4(lb(1):ub(1),1,1,1,1,1,1) b6_i4(:,:,:,:,:,:) = b7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5_i4(:,:,:,:,:) = b7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4_i4(:,:,:,:) = b7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3_i4(:,:,:) = b7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2_i4(:,:) = b7_i4(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1_i4(:) = b7_i4(lb(1):ub(1),1,1,1,1,1,1) ! Let all processors get initialized. call ARMCI_Sync() ! Set up slice info for the put. ! ! For m = 1, the slice has all unit strides. ! For m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! For m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! Rank 1. rank = 1 call ARMCI_NbPut_fa(a1_i4, src_slice, b1_i4, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 1D I4, m = ',m,' failed, rc = ',rc endif ! Check that received b1 is the piece of the sent a1. ! call check_b(rank,b1_i4,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 1D I4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 2. rank = 2 vshape(1) = asize(2) call ARMCI_NbPut_fa(a2_i4, src_slice, b2_i4, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 2D I4, m = ',m,' failed, rc = ',rc endif ! Check that received b2 is the piece of the sent a2. ! ! call check_b(rank,reshape(b2_i4,vshape),dst_slice,src_slice,remote_proc, & ! call check_b(rank,b2_i4,dst_slice,src_slice,remote_proc, & v_i4(1:asize(2)) = reshape(b2_i4,vshape) call check_b(rank,v_i4,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 2D I4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 3. rank = 3 vshape(1) = asize(3) call ARMCI_NbPut_fa(a3_i4, src_slice, b3_i4, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 3D I4, m = ',m,' failed, rc = ',rc endif ! Check that received b3 is the piece of the sent a3. ! v_i4(1:asize(3)) = reshape(b3_i4,vshape) call check_b(rank,v_i4,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 3D I4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 4. rank = 4 vshape(1) = asize(4) call ARMCI_NbPut_fa(a4_i4, src_slice, b4_i4, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 4D I4, m = ',m,' failed, rc = ',rc endif ! Check that received b4 is the piece of the sent a4. ! v_i4(1:asize(4)) = reshape(b4_i4,vshape) call check_b(rank,v_i4,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 4D I4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 5. rank = 5 vshape(1) = asize(5) call ARMCI_NbPut_fa(a5_i4, src_slice, b5_i4, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 5D I4, m = ',m,' failed, rc = ',rc endif ! Check that received b5 is the piece of the sent a5. ! v_i4(1:asize(5)) = reshape(b5_i4,vshape) call check_b(rank,v_i4,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 4D I4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 6. rank = 6 vshape(1) = asize(6) call ARMCI_NbPut_fa(a6_i4, src_slice, b6_i4, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 6D I4, m = ',m,' failed, rc = ',rc endif ! Check that received b6 is the piece of the sent a6 ! v_i4(1:asize(6)) = reshape(b6_i4,vshape) call check_b(rank,v_i4,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 6D I4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 7. rank = 7 vshape(1) = asize(7) call ARMCI_NbPut_fa(a7_i4, src_slice, b7_i4, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 7D I4, m = ',m,' failed, rc = ',rc endif ! Check that received b7 is the piece of the sent a7 ! v_i4(1:asize(7)) = reshape(b7_i4,vshape) call check_b(rank,v_i4,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 7D I4, m = ',m,' failed' endif call ARMCI_Sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' ARMCI_NbPut_fa for I4, ',m,'D passed' endif enddo endif ! ! Test Get. ! score(:) = 0 joff = (remote_proc + 1)*(remote_proc+1) do m = 1,3 ! ! Initialize arrays. ! call init_7d(a7_i4,b7_i4,lb,ub,lb,ub,afirst,bfirst) a6_i4 = a7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5_i4 = a7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4_i4 = a7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3_i4 = a7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2_i4 = a7_i4(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1_i4 = a7_i4(lb(1):ub(1),1,1,1,1,1,1) b6_i4 = b7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5_i4 = b7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4_i4 = b7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3_i4 = b7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2_i4 = b7_i4(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1_i4 = b7_i4(lb(1):ub(1),1,1,1,1,1,1) ! Let all processors get initialized. call ARMCI_Sync() ! Set up slice info for the get. ! ! For m = 1, the slice has all unit strides. ! For m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! For m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! ! Rank 1 ! rank = 1 call ARMCI_NbGet_fa(b1_i4, dst_slice, a1_i4, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. call check_b(rank,a1_i4,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 1D I4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 2 ! rank = 2 vshape(1) = asize(2) call ARMCI_NbGet_fa(b2_i4, dst_slice, a2_i4, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v_i4(1:asize(2)) = reshape(a2_i4,vshape) call check_b(rank,v_i4,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 2D I4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 3 ! rank = 3 vshape(1) = asize(3) call ARMCI_NbGet_fa(b3_i4, dst_slice, a3_i4, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v_i4(1:asize(3)) = reshape(a3_i4,vshape) call check_b(rank,v_i4,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 3D I4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 4 ! rank = 4 vshape(1) = asize(4) call ARMCI_NbGet_fa(b4_i4, dst_slice, a4_i4, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v_i4(1:asize(4)) = reshape(a4_i4,vshape) call check_b(rank,v_i4,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 4D I4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 5 ! rank = 5 vshape(1) = asize(5) call ARMCI_NbGet_fa(b5_i4, dst_slice, a5_i4, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v_i4(1:asize(5)) = reshape(a5_i4,vshape) call check_b(rank,v_i4,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 5D I4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 6 ! rank = 6 vshape(1) = asize(6) call ARMCI_NbGet_fa(b6_i4, dst_slice, a6_i4, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v_i4(1:asize(6)) = reshape(a6_i4,vshape) call check_b(rank,v_i4,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 6D I4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 7 ! rank = 7 vshape(1) = asize(7) call ARMCI_NbGet_fa(b7_i4, dst_slice, a7_i4, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v_i4(1:asize(7)) = reshape(a7_i4,vshape) call check_b(rank,v_i4,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 7D I4, m = ',m,' failed' endif call ARMCI_Sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' ARMCI_NbGet_fa for I4, ',m,'D passed' endif enddo endif ! ! Free v, a and b arrays. ! call ARMCI_Sync() call ARMCI_Free_fa(v_i4, rc) call ARMCI_Free_fa(a1_i4, rc) call ARMCI_Free_fa(b1_i4, rc) call ARMCI_Free_fa(a2_i4, rc) call ARMCI_Free_fa(b2_i4, rc) call ARMCI_Free_fa(a3_i4, rc) call ARMCI_Free_fa(b3_i4, rc) call ARMCI_Free_fa(a4_i4, rc) call ARMCI_Free_fa(b4_i4, rc) call ARMCI_Free_fa(a5_i4, rc) call ARMCI_Free_fa(b5_i4, rc) call ARMCI_Free_fa(a6_i4, rc) call ARMCI_Free_fa(b6_i4, rc) call ARMCI_Free_fa(a7_i4, rc) call ARMCI_Free_fa(b7_i4, rc) call ARMCI_Sync() return endsubroutine subroutine testanb_i8(nproc,me,remote_proc) use definekind use armci_types use armci_mem_f90 use armci_nbmov use testa_init use checkput implicit none type(ARMCI_slice) :: src_slice, dst_slice integer :: nproc,me,remote_proc integer(kind=I8), pointer :: a7_i8(:,:,:,:,:,:,:), b7_i8(:,:,:,:,:,:,:) integer(kind=I8), pointer :: a6_i8(:,:,:,:,:,:), b6_i8(:,:,:,:,:,:) integer(kind=I8), pointer :: a5_i8(:,:,:,:,:), b5_i8(:,:,:,:,:) integer(kind=I8), pointer :: a4_i8(:,:,:,:), b4_i8(:,:,:,:) integer(kind=I8), pointer :: a3_i8(:,:,:), b3_i8(:,:,:) integer(kind=I8), pointer :: a2_i8(:,:), b2_i8(:,:) integer(kind=I8), pointer :: a1_i8(:), b1_i8(:) integer(kind=I8), pointer :: v_i8(:) integer :: lb(7), ub(7), rc, i, j integer :: pass integer :: myunit integer :: m integer :: rank integer :: joff integer :: vshape(1) integer :: extent(7) integer :: asize(7) integer :: score(7) integer :: vlb(1),vub(1) integer :: afirst,bfirst lb(:) = 1 ub(:) = 7 extent(:) = 1 extent(:) = extent(:) + ub(:) - lb(:) asize(1) = extent(1) do m= 2,7 asize(m) = asize(m-1)*extent(m) enddo afirst = (1+me) bfirst = afirst * afirst ! Test I8 flavor. vlb(1) = 1 vub(1) = asize(7) call ARMCI_Malloc_fa(v_i8,vlb,vub,rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for v_i8 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a7_i8, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a7_i8 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b7_i8, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b7_i8 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a6_i8, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a6_i8 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b6_i8, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b6_i8 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a5_i8, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a5_i8 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b5_i8, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b5_i8 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a4_i8, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a4_i8 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b4_i8, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b4_i8 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a3_i8, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a3_i8 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b3_i8, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b3_i8 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a2_i8, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a2_i8 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b2_i8, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b2_i8 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a1_i8, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a1_i8 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b1_i8, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b1_i8 failed rc = ',rc stop endif ! Let all processors get alloccated. call ARMCI_Sync() ! I8 allocations done, now loop over slices. ! We will test three flavors of slices, ! all unit stride, unit stride in the first dimension only, ! all non-unit stride (2). score(:) = 0 joff = remote_proc + 1 ! ! Test Put. ! do m = 1,3 ! Initialize arrays. ! call init_7d(a7_i8,b7_i8,lb,ub,lb,ub,afirst,bfirst) a6_i8(:,:,:,:,:,:) = a7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5_i8(:,:,:,:,:) = a7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4_i8(:,:,:,:) = a7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3_i8(:,:,:) = a7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2_i8(:,:) = a7_i8(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1_i8(:) = a7_i8(lb(1):ub(1),1,1,1,1,1,1) b6_i8(:,:,:,:,:,:) = b7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5_i8(:,:,:,:,:) = b7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4_i8(:,:,:,:) = b7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3_i8(:,:,:) = b7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2_i8(:,:) = b7_i8(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1_i8(:) = b7_i8(lb(1):ub(1),1,1,1,1,1,1) ! Let all processors get initialized. call ARMCI_Sync() ! Set up slice info for the put. ! ! For m = 1, the slice has all unit strides. ! For m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! For m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! Rank 1. rank = 1 call ARMCI_NbPut_fa(a1_i8, src_slice, b1_i8, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 1D I8, m = ',m,' failed, rc = ',rc endif ! Check that received b1 is the piece of the sent a1. ! call check_b(rank,b1_i8,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 1D I8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 2. rank = 2 vshape(1) = asize(2) call ARMCI_NbPut_fa(a2_i8, src_slice, b2_i8, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 2D I8, m = ',m,' failed, rc = ',rc endif ! Check that received b2 is the piece of the sent a2. ! ! call check_b(rank,reshape(b2_i8,vshape),dst_slice,src_slice,remote_proc, & ! call check_b(rank,b2_i8,dst_slice,src_slice,remote_proc, & v_i8(1:asize(2)) = reshape(b2_i8,vshape) call check_b(rank,v_i8,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 2D I8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 3. rank = 3 vshape(1) = asize(3) call ARMCI_NbPut_fa(a3_i8, src_slice, b3_i8, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 3D I8, m = ',m,' failed, rc = ',rc endif ! Check that received b3 is the piece of the sent a3. ! v_i8(1:asize(3)) = reshape(b3_i8,vshape) call check_b(rank,v_i8,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 3D I8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 4. rank = 4 vshape(1) = asize(4) call ARMCI_NbPut_fa(a4_i8, src_slice, b4_i8, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 4D I8, m = ',m,' failed, rc = ',rc endif ! Check that received b4 is the piece of the sent a4. ! v_i8(1:asize(4)) = reshape(b4_i8,vshape) call check_b(rank,v_i8,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 4D I8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 5. rank = 5 vshape(1) = asize(5) call ARMCI_NbPut_fa(a5_i8, src_slice, b5_i8, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 5D I8, m = ',m,' failed, rc = ',rc endif ! Check that received b5 is the piece of the sent a5. ! v_i8(1:asize(5)) = reshape(b5_i8,vshape) call check_b(rank,v_i8,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 4D I8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 6. rank = 6 vshape(1) = asize(6) call ARMCI_NbPut_fa(a6_i8, src_slice, b6_i8, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 6D I8, m = ',m,' failed, rc = ',rc endif ! Check that received b6 is the piece of the sent a6 ! v_i8(1:asize(6)) = reshape(b6_i8,vshape) call check_b(rank,v_i8,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 6D I8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 7. rank = 7 vshape(1) = asize(7) call ARMCI_NbPut_fa(a7_i8, src_slice, b7_i8, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 7D I8, m = ',m,' failed, rc = ',rc endif ! Check that received b7 is the piece of the sent a7 ! v_i8(1:asize(7)) = reshape(b7_i8,vshape) call check_b(rank,v_i8,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 7D I8, m = ',m,' failed' endif call ARMCI_Sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' ARMCI_NbPut_fa for I8, ',m,'D passed' endif enddo endif ! ! Test Get. ! score(:) = 0 joff = (remote_proc + 1)*(remote_proc+1) do m = 1,3 ! ! Initialize arrays. ! call init_7d(a7_i8,b7_i8,lb,ub,lb,ub,afirst,bfirst) a6_i8 = a7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5_i8 = a7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4_i8 = a7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3_i8 = a7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2_i8 = a7_i8(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1_i8 = a7_i8(lb(1):ub(1),1,1,1,1,1,1) b6_i8 = b7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5_i8 = b7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4_i8 = b7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3_i8 = b7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2_i8 = b7_i8(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1_i8 = b7_i8(lb(1):ub(1),1,1,1,1,1,1) ! Let all processors get initialized. call ARMCI_Sync() ! Set up slice info for the get. ! ! For m = 1, the slice has all unit strides. ! For m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! For m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! ! Rank 1 ! rank = 1 call ARMCI_NbGet_fa(b1_i8, dst_slice, a1_i8, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. call check_b(rank,a1_i8,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 1D I8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 2 ! rank = 2 vshape(1) = asize(2) call ARMCI_NbGet_fa(b2_i8, dst_slice, a2_i8, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v_i8(1:asize(2)) = reshape(a2_i8,vshape) call check_b(rank,v_i8,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 2D I8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 3 ! rank = 3 vshape(1) = asize(3) call ARMCI_NbGet_fa(b3_i8, dst_slice, a3_i8, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v_i8(1:asize(3)) = reshape(a3_i8,vshape) call check_b(rank,v_i8,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 3D I8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 4 ! rank = 4 vshape(1) = asize(4) call ARMCI_NbGet_fa(b4_i8, dst_slice, a4_i8, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v_i8(1:asize(4)) = reshape(a4_i8,vshape) call check_b(rank,v_i8,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 4D I8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 5 ! rank = 5 vshape(1) = asize(5) call ARMCI_NbGet_fa(b5_i8, dst_slice, a5_i8, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v_i8(1:asize(5)) = reshape(a5_i8,vshape) call check_b(rank,v_i8,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 5D I8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 6 ! rank = 6 vshape(1) = asize(6) call ARMCI_NbGet_fa(b6_i8, dst_slice, a6_i8, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v_i8(1:asize(6)) = reshape(a6_i8,vshape) call check_b(rank,v_i8,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 6D I8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 7 ! rank = 7 vshape(1) = asize(7) call ARMCI_NbGet_fa(b7_i8, dst_slice, a7_i8, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v_i8(1:asize(7)) = reshape(a7_i8,vshape) call check_b(rank,v_i8,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 7D I8, m = ',m,' failed' endif call ARMCI_Sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' ARMCI_NbGet_fa for I8, ',m,'D passed' endif enddo endif ! ! Free v, a and b arrays. ! call ARMCI_Sync() call ARMCI_Free_fa(v_i8, rc) call ARMCI_Free_fa(a1_i8, rc) call ARMCI_Free_fa(b1_i8, rc) call ARMCI_Free_fa(a2_i8, rc) call ARMCI_Free_fa(b2_i8, rc) call ARMCI_Free_fa(a3_i8, rc) call ARMCI_Free_fa(b3_i8, rc) call ARMCI_Free_fa(a4_i8, rc) call ARMCI_Free_fa(b4_i8, rc) call ARMCI_Free_fa(a5_i8, rc) call ARMCI_Free_fa(b5_i8, rc) call ARMCI_Free_fa(a6_i8, rc) call ARMCI_Free_fa(b6_i8, rc) call ARMCI_Free_fa(a7_i8, rc) call ARMCI_Free_fa(b7_i8, rc) call ARMCI_Sync() return endsubroutine subroutine testanb_r4(nproc,me,remote_proc) use definekind use armci_types use armci_mem_f90 use armci_nbmov use testa_init use checkput implicit none type(ARMCI_slice) :: src_slice, dst_slice integer :: nproc,me,remote_proc real(kind=R4), pointer :: a7(:,:,:,:,:,:,:), b7(:,:,:,:,:,:,:) real(kind=R4), pointer :: a6(:,:,:,:,:,:), b6(:,:,:,:,:,:) real(kind=R4), pointer :: a5(:,:,:,:,:), b5(:,:,:,:,:) real(kind=R4), pointer :: a4(:,:,:,:), b4(:,:,:,:) real(kind=R4), pointer :: a3(:,:,:), b3(:,:,:) real(kind=R4), pointer :: a2(:,:), b2(:,:) real(kind=R4), pointer :: a1(:), b1(:) real(kind=R4), pointer :: v(:) integer :: lb(7), ub(7), rc, i, j integer :: pass integer :: myunit integer :: m integer :: rank integer :: joff integer :: vshape(1) integer :: extent(7) integer :: asize(7) integer :: score(7) integer :: vlb(1),vub(1) integer :: afirst,bfirst afirst = 1+me bfirst = afirst*afirst lb(:) = 1 ub(:) = 7 extent(:) = 1 extent(:) = extent(:) + ub(:) - lb(:) asize(1) = extent(1) do m= 2,7 asize(m) = asize(m-1)*extent(m) enddo ! Test R4 flavor. vlb(1) = 1 vub(1) = asize(7) call ARMCI_Malloc_fa(v,vlb,vub,rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for v failed rc = ',rc stop endif call ARMCI_Malloc_fa(a7, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a7 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b7, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b7 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a6, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a6 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b6, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b6 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a5, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a5 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b5, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b5 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a3, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a3 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b3, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b3 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a2, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a2 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b2, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b2 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a1, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a1 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b1, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b1 failed rc = ',rc stop endif ! Let all processors get alloccated. call ARMCI_Sync() ! R4 allocations done, now loop over slices. ! We will test three flavors of slices, ! all unit stride, unit stride in the first dimension only, ! all non-unit stride (2). score(:) = 0 joff = remote_proc + 1 ! ! Test Put. ! do m = 1,3 ! Initialize arrays. ! call init_7d(a7,b7,lb,ub,lb,ub,afirst,bfirst) a6(:,:,:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5(:,:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4(:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3(:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2(:,:) = a7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1(:) = a7(lb(1):ub(1),1,1,1,1,1,1) b6(:,:,:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5(:,:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4(:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3(:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2(:,:) = b7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1(:) = b7(lb(1):ub(1),1,1,1,1,1,1) ! Let all processors get initialized. call ARMCI_Sync() ! Set up slice info for the put. ! ! For m = 1, the slice has all unit strides. ! For m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! For m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! Rank 1. rank = 1 call ARMCI_NbPut_fa(a1, src_slice, b1, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 1D R4, m = ',m,' failed, rc = ',rc endif ! Check that received b1 is the piece of the sent a1. ! call check_b(rank,b1,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 1D R4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 2. rank = 2 vshape(1) = asize(2) call ARMCI_NbPut_fa(a2, src_slice, b2, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 2D R4, m = ',m,' failed, rc = ',rc endif ! Check that received b2 is the piece of the sent a2. ! ! call check_b(rank,reshape(b2,vshape),dst_slice,src_slice,remote_proc, & ! call check_b(rank,b2,dst_slice,src_slice,remote_proc, & v(1:asize(2)) = reshape(b2,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 2D R4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 3. rank = 3 vshape(1) = asize(3) call ARMCI_NbPut_fa(a3, src_slice, b3, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 3D R4, m = ',m,' failed, rc = ',rc endif ! Check that received b3 is the piece of the sent a3. ! v(1:asize(3)) = reshape(b3,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 3D R4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 4. rank = 4 vshape(1) = asize(4) call ARMCI_NbPut_fa(a4, src_slice, b4, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 4D R4, m = ',m,' failed, rc = ',rc endif ! Check that received b4 is the piece of the sent a4. ! v(1:asize(4)) = reshape(b4,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 4D R4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 5. rank = 5 vshape(1) = asize(5) call ARMCI_NbPut_fa(a5, src_slice, b5, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 5D R4, m = ',m,' failed, rc = ',rc endif ! Check that received b5 is the piece of the sent a5. ! v(1:asize(5)) = reshape(b5,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 4D R4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 6. rank = 6 vshape(1) = asize(6) call ARMCI_NbPut_fa(a6, src_slice, b6, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 6D R4, m = ',m,' failed, rc = ',rc endif ! Check that received b6 is the piece of the sent a6 ! v(1:asize(6)) = reshape(b6,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 6D R4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 7. rank = 7 vshape(1) = asize(7) call ARMCI_NbPut_fa(a7, src_slice, b7, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 7D R4, m = ',m,' failed, rc = ',rc endif ! Check that received b7 is the piece of the sent a7 ! v(1:asize(7)) = reshape(b7,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 7D R4, m = ',m,' failed' endif call ARMCI_Sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' ARMCI_NbPut_fa for R4, ',m,'D passed' endif enddo endif ! ! Test Get. ! score(:) = 0 joff = (remote_proc + 1)*(remote_proc+1) do m = 1,3 ! ! Initialize arrays. ! call init_7d(a7,b7,lb,ub,lb,ub,afirst,bfirst) a6 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2 = a7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1 = a7(lb(1):ub(1),1,1,1,1,1,1) b6 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2 = b7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1 = b7(lb(1):ub(1),1,1,1,1,1,1) ! Let all processors get initialized. call ARMCI_Sync() ! Set up slice info for the get. ! ! For m = 1, the slice has all unit strides. ! For m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! For m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! ! Rank 1 ! rank = 1 call ARMCI_NbGet_fa(b1, dst_slice, a1, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. call check_b(rank,a1,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 1D R4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 2 ! rank = 2 vshape(1) = asize(2) call ARMCI_NbGet_fa(b2, dst_slice, a2, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(2)) = reshape(a2,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 2D R4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 3 ! rank = 3 vshape(1) = asize(3) call ARMCI_NbGet_fa(b3, dst_slice, a3, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(3)) = reshape(a3,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 3D R4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 4 ! rank = 4 vshape(1) = asize(4) call ARMCI_NbGet_fa(b4, dst_slice, a4, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(4)) = reshape(a4,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 4D R4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 5 ! rank = 5 vshape(1) = asize(5) call ARMCI_NbGet_fa(b5, dst_slice, a5, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(5)) = reshape(a5,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 5D R4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 6 ! rank = 6 vshape(1) = asize(6) call ARMCI_NbGet_fa(b6, dst_slice, a6, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(6)) = reshape(a6,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 6D R4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 7 ! rank = 7 vshape(1) = asize(7) call ARMCI_NbGet_fa(b7, dst_slice, a7, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(7)) = reshape(a7,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 7D R4, m = ',m,' failed' endif call ARMCI_Sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' ARMCI_NbGet_fa for R4, ',m,'D passed' endif enddo endif ! ! Free v, a and b arrays. ! call ARMCI_Sync() call ARMCI_Free_fa(v, rc) call ARMCI_Free_fa(a1, rc) call ARMCI_Free_fa(b1, rc) call ARMCI_Free_fa(a2, rc) call ARMCI_Free_fa(b2, rc) call ARMCI_Free_fa(a3, rc) call ARMCI_Free_fa(b3, rc) call ARMCI_Free_fa(a4, rc) call ARMCI_Free_fa(b4, rc) call ARMCI_Free_fa(a5, rc) call ARMCI_Free_fa(b5, rc) call ARMCI_Free_fa(a6, rc) call ARMCI_Free_fa(b6, rc) call ARMCI_Free_fa(a7, rc) call ARMCI_Free_fa(b7, rc) call ARMCI_Sync() return endsubroutine subroutine testanb_r8(nproc,me,remote_proc) use definekind use armci_types use armci_mem_f90 use armci_nbmov use testa_init use checkput implicit none type(ARMCI_slice) :: src_slice, dst_slice integer :: nproc,me,remote_proc real(kind=R8), pointer :: a7(:,:,:,:,:,:,:), b7(:,:,:,:,:,:,:) real(kind=R8), pointer :: a6(:,:,:,:,:,:), b6(:,:,:,:,:,:) real(kind=R8), pointer :: a5(:,:,:,:,:), b5(:,:,:,:,:) real(kind=R8), pointer :: a4(:,:,:,:), b4(:,:,:,:) real(kind=R8), pointer :: a3(:,:,:), b3(:,:,:) real(kind=R8), pointer :: a2(:,:), b2(:,:) real(kind=R8), pointer :: a1(:), b1(:) real(kind=R8), pointer :: v(:) integer :: lb(7), ub(7), rc, i, j integer :: pass integer :: myunit integer :: m integer :: rank integer :: joff integer :: vshape(1) integer :: extent(7) integer :: asize(7) integer :: score(7) integer :: vlb(1),vub(1) integer :: afirst,bfirst afirst = 1+me bfirst = afirst*afirst lb(:) = 1 ub(:) = 7 extent(:) = 1 extent(:) = extent(:) + ub(:) - lb(:) asize(1) = extent(1) do m= 2,7 asize(m) = asize(m-1)*extent(m) enddo ! Test R8 flavor. vlb(1) = 1 vub(1) = asize(7) call ARMCI_Malloc_fa(v,vlb,vub,rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for v failed rc = ',rc stop endif call ARMCI_Malloc_fa(a7, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a7 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b7, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b7 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a6, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a6 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b6, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b6 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a5, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a5 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b5, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b5 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a3, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a3 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b3, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b3 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a2, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a2 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b2, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b2 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a1, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a1 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b1, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b1 failed rc = ',rc stop endif ! Let all processors get alloccated. call ARMCI_Sync() ! R8 allocations done, now loop over slices. ! We will test three flavors of slices, ! all unit stride, unit stride in the first dimension only, ! all non-unit stride (2). score(:) = 0 joff = remote_proc + 1 ! ! Test Put. ! do m = 1,3 ! Initialize arrays. ! call init_7d(a7,b7,lb,ub,lb,ub,afirst,bfirst) a6(:,:,:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5(:,:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4(:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3(:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2(:,:) = a7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1(:) = a7(lb(1):ub(1),1,1,1,1,1,1) b6(:,:,:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5(:,:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4(:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3(:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2(:,:) = b7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1(:) = b7(lb(1):ub(1),1,1,1,1,1,1) ! Let all processors get initialized. call ARMCI_Sync() ! Set up slice info for the put. ! ! For m = 1, the slice has all unit strides. ! For m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! For m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! Rank 1. rank = 1 call ARMCI_NbPut_fa(a1, src_slice, b1, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 1D R8, m = ',m,' failed, rc = ',rc endif ! Check that received b1 is the piece of the sent a1. ! call check_b(rank,b1,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 1D R8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 2. rank = 2 vshape(1) = asize(2) call ARMCI_NbPut_fa(a2, src_slice, b2, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 2D R8, m = ',m,' failed, rc = ',rc endif ! Check that received b2 is the piece of the sent a2. ! ! call check_b(rank,reshape(b2,vshape),dst_slice,src_slice,remote_proc, & ! call check_b(rank,b2,dst_slice,src_slice,remote_proc, & v(1:asize(2)) = reshape(b2,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 2D R8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 3. rank = 3 vshape(1) = asize(3) call ARMCI_NbPut_fa(a3, src_slice, b3, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 3D R8, m = ',m,' failed, rc = ',rc endif ! Check that received b3 is the piece of the sent a3. ! v(1:asize(3)) = reshape(b3,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 3D R8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 4. rank = 4 vshape(1) = asize(4) call ARMCI_NbPut_fa(a4, src_slice, b4, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 4D R8, m = ',m,' failed, rc = ',rc endif ! Check that received b4 is the piece of the sent a4. ! v(1:asize(4)) = reshape(b4,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 4D R8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 5. rank = 5 vshape(1) = asize(5) call ARMCI_NbPut_fa(a5, src_slice, b5, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 5D R8, m = ',m,' failed, rc = ',rc endif ! Check that received b5 is the piece of the sent a5. ! v(1:asize(5)) = reshape(b5,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 4D R8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 6. rank = 6 vshape(1) = asize(6) call ARMCI_NbPut_fa(a6, src_slice, b6, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 6D R8, m = ',m,' failed, rc = ',rc endif ! Check that received b6 is the piece of the sent a6 ! v(1:asize(6)) = reshape(b6,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 6D R8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 7. rank = 7 vshape(1) = asize(7) call ARMCI_NbPut_fa(a7, src_slice, b7, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 7D R8, m = ',m,' failed, rc = ',rc endif ! Check that received b7 is the piece of the sent a7 ! v(1:asize(7)) = reshape(b7,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 7D R8, m = ',m,' failed' endif call ARMCI_Sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' ARMCI_NbPut_fa for R8, ',m,'D passed' endif enddo endif ! ! Test Get. ! score(:) = 0 joff = (remote_proc + 1)*(remote_proc+1) do m = 1,3 ! ! Initialize arrays. ! call init_7d(a7,b7,lb,ub,lb,ub,afirst,bfirst) a6 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2 = a7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1 = a7(lb(1):ub(1),1,1,1,1,1,1) b6 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2 = b7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1 = b7(lb(1):ub(1),1,1,1,1,1,1) ! Let all processors get initialized. call ARMCI_Sync() ! Set up slice info for the get. ! ! For m = 1, the slice has all unit strides. ! For m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! For m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! ! Rank 1 ! rank = 1 call ARMCI_NbGet_fa(b1, dst_slice, a1, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. call check_b(rank,a1,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 1D R8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 2 ! rank = 2 vshape(1) = asize(2) call ARMCI_NbGet_fa(b2, dst_slice, a2, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(2)) = reshape(a2,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 2D R8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 3 ! rank = 3 vshape(1) = asize(3) call ARMCI_NbGet_fa(b3, dst_slice, a3, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(3)) = reshape(a3,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 3D R8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 4 ! rank = 4 vshape(1) = asize(4) call ARMCI_NbGet_fa(b4, dst_slice, a4, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(4)) = reshape(a4,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 4D R8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 5 ! rank = 5 vshape(1) = asize(5) call ARMCI_NbGet_fa(b5, dst_slice, a5, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(5)) = reshape(a5,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 5D R8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 6 ! rank = 6 vshape(1) = asize(6) call ARMCI_NbGet_fa(b6, dst_slice, a6, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(6)) = reshape(a6,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 6D R8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 7 ! rank = 7 vshape(1) = asize(7) call ARMCI_NbGet_fa(b7, dst_slice, a7, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(7)) = reshape(a7,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 7D R8, m = ',m,' failed' endif call ARMCI_Sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' ARMCI_NbGet_fa for R8, ',m,'D passed' endif enddo endif ! ! Free v, a and b arrays. ! call ARMCI_Sync() call ARMCI_Free_fa(v, rc) call ARMCI_Free_fa(a1, rc) call ARMCI_Free_fa(b1, rc) call ARMCI_Free_fa(a2, rc) call ARMCI_Free_fa(b2, rc) call ARMCI_Free_fa(a3, rc) call ARMCI_Free_fa(b3, rc) call ARMCI_Free_fa(a4, rc) call ARMCI_Free_fa(b4, rc) call ARMCI_Free_fa(a5, rc) call ARMCI_Free_fa(b5, rc) call ARMCI_Free_fa(a6, rc) call ARMCI_Free_fa(b6, rc) call ARMCI_Free_fa(a7, rc) call ARMCI_Free_fa(b7, rc) call ARMCI_Sync() return endsubroutine subroutine testanb_c4(nproc,me,remote_proc) use definekind use armci_types use armci_mem_f90 use armci_nbmov use testa_init use checkput implicit none type(ARMCI_slice) :: src_slice, dst_slice integer :: nproc,me,remote_proc complex(kind=C4), pointer :: a7(:,:,:,:,:,:,:), b7(:,:,:,:,:,:,:) complex(kind=C4), pointer :: a6(:,:,:,:,:,:), b6(:,:,:,:,:,:) complex(kind=C4), pointer :: a5(:,:,:,:,:), b5(:,:,:,:,:) complex(kind=C4), pointer :: a4(:,:,:,:), b4(:,:,:,:) complex(kind=C4), pointer :: a3(:,:,:), b3(:,:,:) complex(kind=C4), pointer :: a2(:,:), b2(:,:) complex(kind=C4), pointer :: a1(:), b1(:) complex(kind=C4), pointer :: v(:) integer :: lb(7), ub(7), rc, i, j integer :: pass integer :: myunit integer :: m integer :: rank integer :: joff integer :: vshape(1) integer :: extent(7) integer :: asize(7) integer :: score(7) integer :: vlb(1),vub(1) integer :: afirst,bfirst afirst = 1+me bfirst = afirst*afirst lb(:) = 1 ub(:) = 7 extent(:) = 1 extent(:) = extent(:) + ub(:) - lb(:) asize(1) = extent(1) do m= 2,7 asize(m) = asize(m-1)*extent(m) enddo ! Test C4 flavor. vlb(1) = 1 vub(1) = asize(7) call ARMCI_Malloc_fa(v,vlb,vub,rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for v failed rc = ',rc stop endif call ARMCI_Malloc_fa(a7, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a7 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b7, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b7 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a6, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a6 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b6, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b6 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a5, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a5 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b5, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b5 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a3, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a3 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b3, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b3 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a2, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a2 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b2, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b2 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a1, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a1 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b1, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b1 failed rc = ',rc stop endif ! Let all processors get alloccated. call ARMCI_Sync() ! C4 allocations done, now loop over slices. ! We will test three flavors of slices, ! all unit stride, unit stride in the first dimension only, ! all non-unit stride (2). score(:) = 0 joff = remote_proc + 1 ! ! Test Put. ! do m = 1,3 ! Initialize arrays. ! call init_7d(a7,b7,lb,ub,lb,ub,afirst,bfirst) a6(:,:,:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5(:,:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4(:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3(:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2(:,:) = a7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1(:) = a7(lb(1):ub(1),1,1,1,1,1,1) b6(:,:,:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5(:,:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4(:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3(:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2(:,:) = b7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1(:) = b7(lb(1):ub(1),1,1,1,1,1,1) ! Let all processors get initialized. call ARMCI_Sync() ! Set up slice info for the put. ! ! For m = 1, the slice has all unit strides. ! For m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! For m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! Rank 1. rank = 1 call ARMCI_NbPut_fa(a1, src_slice, b1, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 1D C4, m = ',m,' failed, rc = ',rc endif ! Check that received b1 is the piece of the sent a1. ! call check_b(rank,b1,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 1D C4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 2. rank = 2 vshape(1) = asize(2) call ARMCI_NbPut_fa(a2, src_slice, b2, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 2D C4, m = ',m,' failed, rc = ',rc endif ! Check that received b2 is the piece of the sent a2. ! ! call check_b(rank,reshape(b2,vshape),dst_slice,src_slice,remote_proc, & ! call check_b(rank,b2,dst_slice,src_slice,remote_proc, & v(1:asize(2)) = reshape(b2,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 2D C4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 3. rank = 3 vshape(1) = asize(3) call ARMCI_NbPut_fa(a3, src_slice, b3, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 3D C4, m = ',m,' failed, rc = ',rc endif ! Check that received b3 is the piece of the sent a3. ! v(1:asize(3)) = reshape(b3,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 3D C4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 4. rank = 4 vshape(1) = asize(4) call ARMCI_NbPut_fa(a4, src_slice, b4, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 4D C4, m = ',m,' failed, rc = ',rc endif ! Check that received b4 is the piece of the sent a4. ! v(1:asize(4)) = reshape(b4,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 4D C4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 5. rank = 5 vshape(1) = asize(5) call ARMCI_NbPut_fa(a5, src_slice, b5, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 5D C4, m = ',m,' failed, rc = ',rc endif ! Check that received b5 is the piece of the sent a5. ! v(1:asize(5)) = reshape(b5,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 4D C4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 6. rank = 6 vshape(1) = asize(6) call ARMCI_NbPut_fa(a6, src_slice, b6, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 6D C4, m = ',m,' failed, rc = ',rc endif ! Check that received b6 is the piece of the sent a6 ! v(1:asize(6)) = reshape(b6,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 6D C4, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 7. rank = 7 vshape(1) = asize(7) call ARMCI_NbPut_fa(a7, src_slice, b7, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 7D C4, m = ',m,' failed, rc = ',rc endif ! Check that received b7 is the piece of the sent a7 ! v(1:asize(7)) = reshape(b7,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 7D C4, m = ',m,' failed' endif call ARMCI_Sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' ARMCI_NbPut_fa for C4, ',m,'D passed' endif enddo endif ! ! Test Get. ! score(:) = 0 joff = (remote_proc + 1)*(remote_proc+1) do m = 1,3 ! ! Initialize arrays. ! call init_7d(a7,b7,lb,ub,lb,ub,afirst,bfirst) a6 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2 = a7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1 = a7(lb(1):ub(1),1,1,1,1,1,1) b6 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2 = b7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1 = b7(lb(1):ub(1),1,1,1,1,1,1) ! Let all processors get initialized. call ARMCI_Sync() ! Set up slice info for the get. ! ! For m = 1, the slice has all unit strides. ! For m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! For m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! ! Rank 1 ! rank = 1 call ARMCI_NbGet_fa(b1, dst_slice, a1, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. call check_b(rank,a1,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 1D C4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 2 ! rank = 2 vshape(1) = asize(2) call ARMCI_NbGet_fa(b2, dst_slice, a2, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(2)) = reshape(a2,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 2D C4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 3 ! rank = 3 vshape(1) = asize(3) call ARMCI_NbGet_fa(b3, dst_slice, a3, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(3)) = reshape(a3,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 3D C4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 4 ! rank = 4 vshape(1) = asize(4) call ARMCI_NbGet_fa(b4, dst_slice, a4, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(4)) = reshape(a4,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 4D C4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 5 ! rank = 5 vshape(1) = asize(5) call ARMCI_NbGet_fa(b5, dst_slice, a5, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(5)) = reshape(a5,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 5D C4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 6 ! rank = 6 vshape(1) = asize(6) call ARMCI_NbGet_fa(b6, dst_slice, a6, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(6)) = reshape(a6,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 6D C4, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 7 ! rank = 7 vshape(1) = asize(7) call ARMCI_NbGet_fa(b7, dst_slice, a7, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(7)) = reshape(a7,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 7D C4, m = ',m,' failed' endif call ARMCI_Sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' ARMCI_NbGet_fa for C4, ',m,'D passed' endif enddo endif ! ! Free v, a and b arrays. ! call ARMCI_Sync() call ARMCI_Free_fa(v, rc) call ARMCI_Free_fa(a1, rc) call ARMCI_Free_fa(b1, rc) call ARMCI_Free_fa(a2, rc) call ARMCI_Free_fa(b2, rc) call ARMCI_Free_fa(a3, rc) call ARMCI_Free_fa(b3, rc) call ARMCI_Free_fa(a4, rc) call ARMCI_Free_fa(b4, rc) call ARMCI_Free_fa(a5, rc) call ARMCI_Free_fa(b5, rc) call ARMCI_Free_fa(a6, rc) call ARMCI_Free_fa(b6, rc) call ARMCI_Free_fa(a7, rc) call ARMCI_Free_fa(b7, rc) call ARMCI_Sync() return endsubroutine subroutine testanb_c8(nproc,me,remote_proc) use definekind use armci_types use armci_mem_f90 use armci_nbmov use testa_init use checkput implicit none type(ARMCI_slice) :: src_slice, dst_slice integer :: nproc,me,remote_proc complex(kind=C8), pointer :: a7(:,:,:,:,:,:,:), b7(:,:,:,:,:,:,:) complex(kind=C8), pointer :: a6(:,:,:,:,:,:), b6(:,:,:,:,:,:) complex(kind=C8), pointer :: a5(:,:,:,:,:), b5(:,:,:,:,:) complex(kind=C8), pointer :: a4(:,:,:,:), b4(:,:,:,:) complex(kind=C8), pointer :: a3(:,:,:), b3(:,:,:) complex(kind=C8), pointer :: a2(:,:), b2(:,:) complex(kind=C8), pointer :: a1(:), b1(:) complex(kind=C8), pointer :: v(:) integer :: lb(7), ub(7), rc, i, j integer :: pass integer :: myunit integer :: m integer :: rank integer :: joff integer :: vshape(1) integer :: extent(7) integer :: asize(7) integer :: score(7) integer :: vlb(1),vub(1) integer :: afirst,bfirst afirst = 1+me bfirst = afirst*afirst lb(:) = 1 ub(:) = 7 ub(7) = 3 extent(:) = 1 extent(:) = extent(:) + ub(:) - lb(:) asize(1) = extent(1) do m= 2,7 asize(m) = asize(m-1)*extent(m) enddo ! Test C8 flavor. vlb(1) = 1 vub(1) = asize(7) call ARMCI_Malloc_fa(v,vlb,vub,rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for v failed rc = ',rc stop endif call ARMCI_Malloc_fa(a7, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a7 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b7, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b7 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a6, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a6 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b6, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b6 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a5, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a5 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b5, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b5 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b4, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b4 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a3, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a3 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b3, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b3 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a2, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a2 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b2, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b2 failed rc = ',rc stop endif call ARMCI_Malloc_fa(a1, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for a1 failed rc = ',rc stop endif call ARMCI_Malloc_fa(b1, lb, ub, rc) if (rc .ne. 0) then print *,' ARMCI_Malloc_fa for b1 failed rc = ',rc stop endif ! Let all processors get alloccated. call ARMCI_Sync() ! C8 allocations done, now loop over slices. ! We will test three flavors of slices, ! all unit stride, unit stride in the first dimension only, ! all non-unit stride (2). score(:) = 0 joff = remote_proc + 1 ! ! Test Put. ! do m = 1,3 ! Initialize arrays. ! call init_7d(a7,b7,lb,ub,lb,ub,afirst,bfirst) a6(:,:,:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5(:,:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4(:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3(:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2(:,:) = a7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1(:) = a7(lb(1):ub(1),1,1,1,1,1,1) b6(:,:,:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5(:,:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4(:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3(:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2(:,:) = b7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1(:) = b7(lb(1):ub(1),1,1,1,1,1,1) ! Let all processors get initialized. call ARMCI_Sync() ! Set up slice info for the put. ! ! For m = 1, the slice has all unit strides. ! For m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! For m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%lo(7) = 1 src_slice%hi(7) = 2 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%lo(7) = 2 dst_slice%hi(7) = 3 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! Rank 1. rank = 1 call ARMCI_NbPut_fa(a1, src_slice, b1, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 1D C8, m = ',m,' failed, rc = ',rc endif ! Check that received b1 is the piece of the sent a1. ! call check_b(rank,b1,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 1D C8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 2. rank = 2 vshape(1) = asize(2) call ARMCI_NbPut_fa(a2, src_slice, b2, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 2D C8, m = ',m,' failed, rc = ',rc endif ! Check that received b2 is the piece of the sent a2. ! ! call check_b(rank,reshape(b2,vshape),dst_slice,src_slice,remote_proc, & ! call check_b(rank,b2,dst_slice,src_slice,remote_proc, & v(1:asize(2)) = reshape(b2,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 2D C8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 3. rank = 3 vshape(1) = asize(3) call ARMCI_NbPut_fa(a3, src_slice, b3, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 3D C8, m = ',m,' failed, rc = ',rc endif ! Check that received b3 is the piece of the sent a3. ! v(1:asize(3)) = reshape(b3,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 3D C8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 4. rank = 4 vshape(1) = asize(4) call ARMCI_NbPut_fa(a4, src_slice, b4, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 4D C8, m = ',m,' failed, rc = ',rc endif ! Check that received b4 is the piece of the sent a4. ! v(1:asize(4)) = reshape(b4,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 4D C8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 5. rank = 5 vshape(1) = asize(5) call ARMCI_NbPut_fa(a5, src_slice, b5, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 5D C8, m = ',m,' failed, rc = ',rc endif ! Check that received b5 is the piece of the sent a5. ! v(1:asize(5)) = reshape(b5,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 4D C8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 6. rank = 6 vshape(1) = asize(6) call ARMCI_NbPut_fa(a6, src_slice, b6, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 6D C8, m = ',m,' failed, rc = ',rc endif ! Check that received b6 is the piece of the sent a6 ! v(1:asize(6)) = reshape(b6,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 6D C8, m = ',m,' failed' endif call ARMCI_Sync() ! Rank 7. rank = 7 vshape(1) = asize(7) call ARMCI_NbPut_fa(a7, src_slice, b7, dst_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() if (rc .ne. 0) then print *,me,': ARMCI_NbPut_fa for 7D C8, m = ',m,' failed, rc = ',rc endif ! Check that received b7 is the piece of the sent a7 ! v(1:asize(7)) = reshape(b7,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbPut_fa verify for 7D C8, m = ',m,' failed' endif call ARMCI_Sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' ARMCI_NbPut_fa for C8, ',m,'D passed' endif enddo endif ! ! Test Get. ! score(:) = 0 joff = (remote_proc + 1)*(remote_proc+1) do m = 1,3 ! ! Initialize arrays. ! call init_7d(a7,b7,lb,ub,lb,ub,afirst,bfirst) a6 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2 = a7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1 = a7(lb(1):ub(1),1,1,1,1,1,1) b6 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2 = b7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1 = b7(lb(1):ub(1),1,1,1,1,1,1) ! Let all processors get initialized. call ARMCI_Sync() ! Set up slice info for the get. ! ! For m = 1, the slice has all unit strides. ! For m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! For m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%lo(7) = 1 src_slice%hi(7) = 2 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%lo(7) = 2 dst_slice%hi(7) = 3 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! ! Rank 1 ! rank = 1 call ARMCI_NbGet_fa(b1, dst_slice, a1, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. call check_b(rank,a1,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 1D C8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 2 ! rank = 2 vshape(1) = asize(2) call ARMCI_NbGet_fa(b2, dst_slice, a2, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(2)) = reshape(a2,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 2D C8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 3 ! rank = 3 vshape(1) = asize(3) call ARMCI_NbGet_fa(b3, dst_slice, a3, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(3)) = reshape(a3,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 3D C8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 4 ! rank = 4 vshape(1) = asize(4) call ARMCI_NbGet_fa(b4, dst_slice, a4, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(4)) = reshape(a4,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 4D C8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 5 ! rank = 5 vshape(1) = asize(5) call ARMCI_NbGet_fa(b5, dst_slice, a5, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(5)) = reshape(a5,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 5D C8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 6 ! rank = 6 vshape(1) = asize(6) call ARMCI_NbGet_fa(b6, dst_slice, a6, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(6)) = reshape(a6,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 6D C8, m = ',m,' failed' endif call ARMCI_Sync() ! ! Rank 7 ! rank = 7 vshape(1) = asize(7) call ARMCI_NbGet_fa(b7, dst_slice, a7, src_slice, remote_proc, rc) call ARMCI_Waitall_fa() call ARMCI_Sync() ! ! Check that recieved a is the piece of b that was sent. v(1:asize(7)) = reshape(a7,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': ARMCI_NbGet_fa verify for 7D C8, m = ',m,' failed' endif call ARMCI_Sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' ARMCI_NbGet_fa for C8, ',m,'D passed' endif enddo endif ! ! Free v, a and b arrays. ! call ARMCI_Sync() call ARMCI_Free_fa(v, rc) call ARMCI_Free_fa(a1, rc) call ARMCI_Free_fa(b1, rc) call ARMCI_Free_fa(a2, rc) call ARMCI_Free_fa(b2, rc) call ARMCI_Free_fa(a3, rc) call ARMCI_Free_fa(b3, rc) call ARMCI_Free_fa(a4, rc) call ARMCI_Free_fa(b4, rc) call ARMCI_Free_fa(a5, rc) call ARMCI_Free_fa(b5, rc) call ARMCI_Free_fa(a6, rc) call ARMCI_Free_fa(b6, rc) call ARMCI_Free_fa(a7, rc) call ARMCI_Free_fa(b7, rc) call ARMCI_Sync() return endsubroutine ga-5-3/armci/f90/armci_mov_f90.f900000640005473000001440000021566010246233530015247 0ustar d3n000usersmodule armci_mov_f90 use armci_types interface armci_put_fa module procedure armci_put_1di4 module procedure armci_put_2di4 module procedure armci_put_3di4 module procedure armci_put_4di4 module procedure armci_put_5di4 module procedure armci_put_6di4 module procedure armci_put_7di4 module procedure armci_put_1di8 module procedure armci_put_2di8 module procedure armci_put_3di8 module procedure armci_put_4di8 module procedure armci_put_5di8 module procedure armci_put_6di8 module procedure armci_put_7di8 module procedure armci_put_1dr4 module procedure armci_put_2dr4 module procedure armci_put_3dr4 module procedure armci_put_4dr4 module procedure armci_put_5dr4 module procedure armci_put_6dr4 module procedure armci_put_7dr4 module procedure armci_put_1dr8 module procedure armci_put_2dr8 module procedure armci_put_3dr8 module procedure armci_put_4dr8 module procedure armci_put_5dr8 module procedure armci_put_6dr8 module procedure armci_put_7dr8 module procedure armci_put_1dc4 module procedure armci_put_2dc4 module procedure armci_put_3dc4 module procedure armci_put_4dc4 module procedure armci_put_5dc4 module procedure armci_put_6dc4 module procedure armci_put_7dc4 module procedure armci_put_1dc8 module procedure armci_put_2dc8 module procedure armci_put_3dc8 module procedure armci_put_4dc8 module procedure armci_put_5dc8 module procedure armci_put_6dc8 module procedure armci_put_7dc8 end interface interface armci_get_fa module procedure armci_get_1di4 module procedure armci_get_2di4 module procedure armci_get_3di4 module procedure armci_get_4di4 module procedure armci_get_5di4 module procedure armci_get_6di4 module procedure armci_get_7di4 module procedure armci_get_1di8 module procedure armci_get_2di8 module procedure armci_get_3di8 module procedure armci_get_4di8 module procedure armci_get_5di8 module procedure armci_get_6di8 module procedure armci_get_7di8 module procedure armci_get_1dr4 module procedure armci_get_2dr4 module procedure armci_get_3dr4 module procedure armci_get_4dr4 module procedure armci_get_5dr4 module procedure armci_get_6dr4 module procedure armci_get_7dr4 module procedure armci_get_1dr8 module procedure armci_get_2dr8 module procedure armci_get_3dr8 module procedure armci_get_4dr8 module procedure armci_get_5dr8 module procedure armci_get_6dr8 module procedure armci_get_7dr8 module procedure armci_get_1dc4 module procedure armci_get_2dc4 module procedure armci_get_3dc4 module procedure armci_get_4dc4 module procedure armci_get_5dc4 module procedure armci_get_6dc4 module procedure armci_get_7dc4 module procedure armci_get_1dc8 module procedure armci_get_2dc8 module procedure armci_get_3dc8 module procedure armci_get_4dc8 module procedure armci_get_5dc8 module procedure armci_get_6dc8 module procedure armci_get_7dc8 end interface contains subroutine armci_put_1di4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface integer(kind=i4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_1di4 subroutine armci_put_2di4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface integer(kind=i4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_2di4 subroutine armci_put_3di4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface integer(kind=i4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_3di4 subroutine armci_put_4di4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface integer(kind=i4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_4di4 subroutine armci_put_5di4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface integer(kind=i4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_5di4 subroutine armci_put_6di4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface integer(kind=i4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_6di4 subroutine armci_put_7di4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface integer(kind=i4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_7di4 subroutine armci_put_1di8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface integer(kind=i8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_1di8 subroutine armci_put_2di8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface integer(kind=i8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_2di8 subroutine armci_put_3di8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface integer(kind=i8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_3di8 subroutine armci_put_4di8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface integer(kind=i8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_4di8 subroutine armci_put_5di8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface integer(kind=i8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_5di8 subroutine armci_put_6di8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface integer(kind=i8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_6di8 subroutine armci_put_7di8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface integer(kind=i8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_7di8 subroutine armci_put_1dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface real(kind=r4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_1dr4 subroutine armci_put_2dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface real(kind=r4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_2dr4 subroutine armci_put_3dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface real(kind=r4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_3dr4 subroutine armci_put_4dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface real(kind=r4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_4dr4 subroutine armci_put_5dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface real(kind=r4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_5dr4 subroutine armci_put_6dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface real(kind=r4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_6dr4 subroutine armci_put_7dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface real(kind=r4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_7dr4 subroutine armci_put_1dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface real(kind=r8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_1dr8 subroutine armci_put_2dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface real(kind=r8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_2dr8 subroutine armci_put_3dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface real(kind=r8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_3dr8 subroutine armci_put_4dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface real(kind=r8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_4dr8 subroutine armci_put_5dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface real(kind=r8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_5dr8 subroutine armci_put_6dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface real(kind=r8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_6dr8 subroutine armci_put_7dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface real(kind=r8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_7dr8 subroutine armci_put_1dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface complex(kind=c4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_1dc4 subroutine armci_put_2dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface complex(kind=c4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_2dc4 subroutine armci_put_3dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface complex(kind=c4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_3dc4 subroutine armci_put_4dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface complex(kind=c4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_4dc4 subroutine armci_put_5dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface complex(kind=c4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_5dc4 subroutine armci_put_6dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface complex(kind=c4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_6dc4 subroutine armci_put_7dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface complex(kind=c4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_7dc4 subroutine armci_put_1dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface complex(kind=c8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_1dc8 subroutine armci_put_2dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface complex(kind=c8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_2dc8 subroutine armci_put_3dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface complex(kind=c8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_3dc8 subroutine armci_put_4dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface complex(kind=c8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_4dc8 subroutine armci_put_5dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface complex(kind=c8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_5dc8 subroutine armci_put_6dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface complex(kind=c8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_6dc8 subroutine armci_put_7dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_put_farrays end interface complex(kind=c8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call armci_put_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_put_7dc8 !get subroutine armci_get_1di4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface integer(kind=i4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_1di4 subroutine armci_get_2di4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface integer(kind=i4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_2di4 subroutine armci_get_3di4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface integer(kind=i4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_3di4 subroutine armci_get_4di4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface integer(kind=i4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_4di4 subroutine armci_get_5di4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface integer(kind=i4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_5di4 subroutine armci_get_6di4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface integer(kind=i4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_6di4 subroutine armci_get_7di4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface integer(kind=i4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_7di4 subroutine armci_get_1di8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface integer(kind=i8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_1di8 subroutine armci_get_2di8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface integer(kind=i8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_2di8 subroutine armci_get_3di8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface integer(kind=i8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_3di8 subroutine armci_get_4di8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface integer(kind=i8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_4di8 subroutine armci_get_5di8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface integer(kind=i8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_5di8 subroutine armci_get_6di8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface integer(kind=i8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_6di8 subroutine armci_get_7di8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types integer(kind=i8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface integer(kind=i8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_7di8 subroutine armci_get_1dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface real(kind=r4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_1dr4 subroutine armci_get_2dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface real(kind=r4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_2dr4 subroutine armci_get_3dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface real(kind=r4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_3dr4 subroutine armci_get_4dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface real(kind=r4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_4dr4 subroutine armci_get_5dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface real(kind=r4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_5dr4 subroutine armci_get_6dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface real(kind=r4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_6dr4 subroutine armci_get_7dr4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface real(kind=r4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_7dr4 subroutine armci_get_1dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface real(kind=r8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_1dr8 subroutine armci_get_2dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface real(kind=r8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_2dr8 subroutine armci_get_3dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface real(kind=r8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_3dr8 subroutine armci_get_4dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface real(kind=r8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_4dr8 subroutine armci_get_5dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface real(kind=r8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_5dr8 subroutine armci_get_6dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface real(kind=r8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_6dr8 subroutine armci_get_7dr8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types real(kind=r8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface real(kind=r8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_7dr8 subroutine armci_get_1dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface complex(kind=c4), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_1dc4 subroutine armci_get_2dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface complex(kind=c4), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_2dc4 subroutine armci_get_3dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface complex(kind=c4), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_3dc4 subroutine armci_get_4dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface complex(kind=c4), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_4dc4 subroutine armci_get_5dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface complex(kind=c4), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_5dc4 subroutine armci_get_6dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface complex(kind=c4), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_6dc4 subroutine armci_get_7dc4(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface complex(kind=c4), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_7dc4 subroutine armci_get_1dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface complex(kind=c8), dimension(:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 1 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_1dc8 subroutine armci_get_2dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface complex(kind=c8), dimension(:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 2 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_2dc8 subroutine armci_get_3dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface complex(kind=c8), dimension(:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 3 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_3dc8 subroutine armci_get_4dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface complex(kind=c8), dimension(:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 4 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_4dc8 subroutine armci_get_5dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface complex(kind=c8), dimension(:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 5 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_5dc8 subroutine armci_get_6dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface complex(kind=c8), dimension(:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 6 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_6dc8 subroutine armci_get_7dc8(src, src_slc, dst, dst_slc, proc, rc) use definekind implicit none interface subroutine armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) use definekind use armci_types complex(kind=c8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc, rank integer, intent(out) :: rc end subroutine armci_get_farrays end interface complex(kind=c8), dimension(:,:,:,:,:,:,:), pointer :: src, dst type(armci_slice), intent(in) :: src_slc, dst_slc integer, intent(in) :: proc integer, intent(out) :: rc integer :: rank rank = 7 call armci_get_farrays(src, src_slc, dst, dst_slc, proc, rank, rc) end subroutine armci_get_7dc8 end module armci_mov_f90 ga-5-3/armci/f90/testfa_type.f900000640005473000001440000027050210211727231015136 0ustar d3n000userssubroutine testa_i4(nproc,me,remote_proc) use definekind use armci_types use armci_mem_f90 use armci_mov_f90 use testa_init use checkput implicit none type(armci_slice) :: src_slice, dst_slice integer :: nproc,me,remote_proc integer(kind=i4), pointer :: a7_i4(:,:,:,:,:,:,:), b7_i4(:,:,:,:,:,:,:) integer(kind=i4), pointer :: a6_i4(:,:,:,:,:,:), b6_i4(:,:,:,:,:,:) integer(kind=i4), pointer :: a5_i4(:,:,:,:,:), b5_i4(:,:,:,:,:) integer(kind=i4), pointer :: a4_i4(:,:,:,:), b4_i4(:,:,:,:) integer(kind=i4), pointer :: a3_i4(:,:,:), b3_i4(:,:,:) integer(kind=i4), pointer :: a2_i4(:,:), b2_i4(:,:) integer(kind=i4), pointer :: a1_i4(:), b1_i4(:) integer(kind=i4), pointer :: v_i4(:) integer :: lb(7), ub(7), rc, i, j integer :: pass integer :: myunit integer :: m integer :: rank integer :: joff integer :: vshape(1) integer :: extent(7) integer :: asize(7) integer :: score(7) integer :: vlb(1),vub(1) integer :: afirst,bfirst afirst = 1+me bfirst = afirst * afirst lb(:) = 1 ub(:) = 7 extent(:) = 1 extent(:) = extent(:) + ub(:) - lb(:) asize(1) = extent(1) do m= 2,7 asize(m) = asize(m-1)*extent(m) enddo ! test i4 flavor. vlb(1) = 1 vub(1) = asize(7) call armci_malloc_fa(v_i4,vlb,vub,rc) if (rc .ne. 0) then print *,' armci_malloc_fa for v_i4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a7_i4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a7_i4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b7_i4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b7_i4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a6_i4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a6_i4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b6_i4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b6_i4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a5_i4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a5_i4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b5_i4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b5_i4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a4_i4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a4_i4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b4_i4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b4_i4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a3_i4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a3_i4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b3_i4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b3_i4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a2_i4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a2_i4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b2_i4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b2_i4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a1_i4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a1_i4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b1_i4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b1_i4 failed rc = ',rc call armci_abort() endif ! let all processors get alloccated. call armci_sync() ! i4 allocations done, now loop over slices. ! we will test three flavors of slices, ! all unit stride, unit stride in the first dimension only, ! all non-unit stride (2). score(:) = 0 joff = remote_proc + 1 ! ! test put. ! do m = 1,3 ! initialize arrays. ! call init_7d_i4(a7_i4,b7_i4,lb,ub,lb,ub,afirst,bfirst) a6_i4(:,:,:,:,:,:) = a7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5_i4(:,:,:,:,:) = a7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4_i4(:,:,:,:) = a7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3_i4(:,:,:) = a7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2_i4(:,:) = a7_i4(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1_i4(:) = a7_i4(lb(1):ub(1),1,1,1,1,1,1) b6_i4(:,:,:,:,:,:) = b7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5_i4(:,:,:,:,:) = b7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4_i4(:,:,:,:) = b7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3_i4(:,:,:) = b7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2_i4(:,:) = b7_i4(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1_i4(:) = b7_i4(lb(1):ub(1),1,1,1,1,1,1) ! let all processors get initialized. call armci_sync() ! set up slice info for the put. ! ! for m = 1, the slice has all unit strides. ! for m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! for m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! rank 1. rank = 1 call armci_put_fa(a1_i4, src_slice, b1_i4, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 1d i4, m = ',m,' failed, rc = ',rc endif ! check that received b1 is the piece of the sent a1. ! call check_b(rank,b1_i4,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 1d i4, m = ',m,' failed' endif call armci_sync() ! rank 2. rank = 2 vshape(1) = asize(2) call armci_put_fa(a2_i4, src_slice, b2_i4, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 2d i4, m = ',m,' failed, rc = ',rc endif ! check that received b2 is the piece of the sent a2. ! ! call check_b(rank,reshape(b2_i4,vshape),dst_slice,src_slice,remote_proc, & ! call check_b(rank,b2_i4,dst_slice,src_slice,remote_proc, & v_i4(1:asize(2)) = reshape(b2_i4,vshape) call check_b(rank,v_i4,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 2d i4, m = ',m,' failed' endif call armci_sync() ! rank 3. rank = 3 vshape(1) = asize(3) call armci_put_fa(a3_i4, src_slice, b3_i4, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 3d i4, m = ',m,' failed, rc = ',rc endif ! check that received b3 is the piece of the sent a3. ! v_i4(1:asize(3)) = reshape(b3_i4,vshape) call check_b(rank,v_i4,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 3d i4, m = ',m,' failed' endif call armci_sync() ! rank 4. rank = 4 vshape(1) = asize(4) call armci_put_fa(a4_i4, src_slice, b4_i4, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 4d i4, m = ',m,' failed, rc = ',rc endif ! check that received b4 is the piece of the sent a4. ! v_i4(1:asize(4)) = reshape(b4_i4,vshape) call check_b(rank,v_i4,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 4d i4, m = ',m,' failed' endif call armci_sync() ! rank 5. rank = 5 vshape(1) = asize(5) call armci_put_fa(a5_i4, src_slice, b5_i4, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 5d i4, m = ',m,' failed, rc = ',rc endif ! check that received b5 is the piece of the sent a5. ! v_i4(1:asize(5)) = reshape(b5_i4,vshape) call check_b(rank,v_i4,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 4d i4, m = ',m,' failed' endif call armci_sync() ! rank 6. rank = 6 vshape(1) = asize(6) call armci_put_fa(a6_i4, src_slice, b6_i4, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 6d i4, m = ',m,' failed, rc = ',rc endif ! check that received b6 is the piece of the sent a6 ! v_i4(1:asize(6)) = reshape(b6_i4,vshape) call check_b(rank,v_i4,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 6d i4, m = ',m,' failed' endif call armci_sync() ! rank 7. rank = 7 vshape(1) = asize(7) call armci_put_fa(a7_i4, src_slice, b7_i4, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 7d i4, m = ',m,' failed, rc = ',rc endif ! check that received b7 is the piece of the sent a7 ! v_i4(1:asize(7)) = reshape(b7_i4,vshape) call check_b(rank,v_i4,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 7d i4, m = ',m,' failed' endif call armci_sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' armci_put_fa for i4, ',m,'d passed' endif enddo endif ! ! test get. ! score(:) = 0 joff = (remote_proc + 1)*(remote_proc+1) do m = 1,3 ! ! initialize arrays. ! call init_7d(a7_i4,b7_i4,lb,ub,lb,ub,afirst,bfirst) a6_i4 = a7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5_i4 = a7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4_i4 = a7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3_i4 = a7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2_i4 = a7_i4(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1_i4 = a7_i4(lb(1):ub(1),1,1,1,1,1,1) b6_i4 = b7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5_i4 = b7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4_i4 = b7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3_i4 = b7_i4(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2_i4 = b7_i4(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1_i4 = b7_i4(lb(1):ub(1),1,1,1,1,1,1) ! let all processors get initialized. call armci_sync() ! set up slice info for the get. ! ! for m = 1, the slice has all unit strides. ! for m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! for m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! ! rank 1 ! rank = 1 call armci_get_fa(b1_i4, dst_slice, a1_i4, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. call check_b(rank,a1_i4,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 1d i4, m = ',m,' failed' endif call armci_sync() ! ! rank 2 ! rank = 2 vshape(1) = asize(2) call armci_get_fa(b2_i4, dst_slice, a2_i4, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v_i4(1:asize(2)) = reshape(a2_i4,vshape) call check_b(rank,v_i4,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 2d i4, m = ',m,' failed' endif call armci_sync() ! ! rank 3 ! rank = 3 vshape(1) = asize(3) call armci_get_fa(b3_i4, dst_slice, a3_i4, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v_i4(1:asize(3)) = reshape(a3_i4,vshape) call check_b(rank,v_i4,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 3d i4, m = ',m,' failed' endif call armci_sync() ! ! rank 4 ! rank = 4 vshape(1) = asize(4) call armci_get_fa(b4_i4, dst_slice, a4_i4, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v_i4(1:asize(4)) = reshape(a4_i4,vshape) call check_b(rank,v_i4,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 4d i4, m = ',m,' failed' endif call armci_sync() ! ! rank 5 ! rank = 5 vshape(1) = asize(5) call armci_get_fa(b5_i4, dst_slice, a5_i4, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v_i4(1:asize(5)) = reshape(a5_i4,vshape) call check_b(rank,v_i4,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 5d i4, m = ',m,' failed' endif call armci_sync() ! ! rank 6 ! rank = 6 vshape(1) = asize(6) call armci_get_fa(b6_i4, dst_slice, a6_i4, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v_i4(1:asize(6)) = reshape(a6_i4,vshape) call check_b(rank,v_i4,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 6d i4, m = ',m,' failed' endif call armci_sync() ! ! rank 7 ! rank = 7 vshape(1) = asize(7) call armci_get_fa(b7_i4, dst_slice, a7_i4, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v_i4(1:asize(7)) = reshape(a7_i4,vshape) call check_b(rank,v_i4,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 7d i4, m = ',m,' failed' endif call armci_sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' armci_get_fa for i4, ',m,'d passed' endif enddo endif ! ! free v, a and b arrays. ! call armci_sync() call armci_free_fa(v_i4, rc) call armci_free_fa(a1_i4, rc) call armci_free_fa(b1_i4, rc) call armci_free_fa(a2_i4, rc) call armci_free_fa(b2_i4, rc) call armci_free_fa(a3_i4, rc) call armci_free_fa(b3_i4, rc) call armci_free_fa(a4_i4, rc) call armci_free_fa(b4_i4, rc) call armci_free_fa(a5_i4, rc) call armci_free_fa(b5_i4, rc) call armci_free_fa(a6_i4, rc) call armci_free_fa(b6_i4, rc) call armci_free_fa(a7_i4, rc) call armci_free_fa(b7_i4, rc) call armci_sync() return endsubroutine subroutine testa_i8(nproc,me,remote_proc) use definekind use armci_types use armci_mem_f90 use armci_mov_f90 use testa_init use checkput implicit none type(armci_slice) :: src_slice, dst_slice integer :: nproc,me,remote_proc integer(kind=i8), pointer :: a7_i8(:,:,:,:,:,:,:), b7_i8(:,:,:,:,:,:,:) integer(kind=i8), pointer :: a6_i8(:,:,:,:,:,:), b6_i8(:,:,:,:,:,:) integer(kind=i8), pointer :: a5_i8(:,:,:,:,:), b5_i8(:,:,:,:,:) integer(kind=i8), pointer :: a4_i8(:,:,:,:), b4_i8(:,:,:,:) integer(kind=i8), pointer :: a3_i8(:,:,:), b3_i8(:,:,:) integer(kind=i8), pointer :: a2_i8(:,:), b2_i8(:,:) integer(kind=i8), pointer :: a1_i8(:), b1_i8(:) integer(kind=i8), pointer :: v_i8(:) integer :: lb(7), ub(7), rc, i, j integer :: pass integer :: myunit integer :: m integer :: rank integer :: joff integer :: vshape(1) integer :: extent(7) integer :: asize(7) integer :: score(7) integer :: vlb(1),vub(1) integer :: afirst,bfirst lb(:) = 1 ub(:) = 7 extent(:) = 1 extent(:) = extent(:) + ub(:) - lb(:) asize(1) = extent(1) do m= 2,7 asize(m) = asize(m-1)*extent(m) enddo afirst = (1+me) bfirst = afirst * afirst ! test i8 flavor. vlb(1) = 1 vub(1) = asize(7) call armci_malloc_fa(v_i8,vlb,vub,rc) if (rc .ne. 0) then print *,' armci_malloc_fa for v_i8 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a7_i8, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a7_i8 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b7_i8, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b7_i8 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a6_i8, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a6_i8 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b6_i8, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b6_i8 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a5_i8, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a5_i8 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b5_i8, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b5_i8 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a4_i8, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a4_i8 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b4_i8, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b4_i8 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a3_i8, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a3_i8 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b3_i8, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b3_i8 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a2_i8, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a2_i8 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b2_i8, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b2_i8 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a1_i8, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a1_i8 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b1_i8, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b1_i8 failed rc = ',rc call armci_abort() endif ! let all processors get alloccated. call armci_sync() ! i8 allocations done, now loop over slices. ! we will test three flavors of slices, ! all unit stride, unit stride in the first dimension only, ! all non-unit stride (2). score(:) = 0 joff = remote_proc + 1 ! ! test put. ! do m = 1,3 ! initialize arrays. ! call init_7d(a7_i8,b7_i8,lb,ub,lb,ub,afirst,bfirst) a6_i8(:,:,:,:,:,:) = a7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5_i8(:,:,:,:,:) = a7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4_i8(:,:,:,:) = a7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3_i8(:,:,:) = a7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2_i8(:,:) = a7_i8(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1_i8(:) = a7_i8(lb(1):ub(1),1,1,1,1,1,1) b6_i8(:,:,:,:,:,:) = b7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5_i8(:,:,:,:,:) = b7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4_i8(:,:,:,:) = b7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3_i8(:,:,:) = b7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2_i8(:,:) = b7_i8(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1_i8(:) = b7_i8(lb(1):ub(1),1,1,1,1,1,1) ! let all processors get initialized. call armci_sync() ! set up slice info for the put. ! ! for m = 1, the slice has all unit strides. ! for m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! for m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! rank 1. rank = 1 call armci_put_fa(a1_i8, src_slice, b1_i8, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 1d i8, m = ',m,' failed, rc = ',rc endif ! check that received b1 is the piece of the sent a1. ! call check_b(rank,b1_i8,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 1d i8, m = ',m,' failed' endif call armci_sync() ! rank 2. rank = 2 vshape(1) = asize(2) call armci_put_fa(a2_i8, src_slice, b2_i8, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 2d i8, m = ',m,' failed, rc = ',rc endif ! check that received b2 is the piece of the sent a2. ! ! call check_b(rank,reshape(b2_i8,vshape),dst_slice,src_slice,remote_proc, & ! call check_b(rank,b2_i8,dst_slice,src_slice,remote_proc, & v_i8(1:asize(2)) = reshape(b2_i8,vshape) call check_b(rank,v_i8,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 2d i8, m = ',m,' failed' endif call armci_sync() ! rank 3. rank = 3 vshape(1) = asize(3) call armci_put_fa(a3_i8, src_slice, b3_i8, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 3d i8, m = ',m,' failed, rc = ',rc endif ! check that received b3 is the piece of the sent a3. ! v_i8(1:asize(3)) = reshape(b3_i8,vshape) call check_b(rank,v_i8,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 3d i8, m = ',m,' failed' endif call armci_sync() ! rank 4. rank = 4 vshape(1) = asize(4) call armci_put_fa(a4_i8, src_slice, b4_i8, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 4d i8, m = ',m,' failed, rc = ',rc endif ! check that received b4 is the piece of the sent a4. ! v_i8(1:asize(4)) = reshape(b4_i8,vshape) call check_b(rank,v_i8,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 4d i8, m = ',m,' failed' endif call armci_sync() ! rank 5. rank = 5 vshape(1) = asize(5) call armci_put_fa(a5_i8, src_slice, b5_i8, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 5d i8, m = ',m,' failed, rc = ',rc endif ! check that received b5 is the piece of the sent a5. ! v_i8(1:asize(5)) = reshape(b5_i8,vshape) call check_b(rank,v_i8,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 4d i8, m = ',m,' failed' endif call armci_sync() ! rank 6. rank = 6 vshape(1) = asize(6) call armci_put_fa(a6_i8, src_slice, b6_i8, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 6d i8, m = ',m,' failed, rc = ',rc endif ! check that received b6 is the piece of the sent a6 ! v_i8(1:asize(6)) = reshape(b6_i8,vshape) call check_b(rank,v_i8,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 6d i8, m = ',m,' failed' endif call armci_sync() ! rank 7. rank = 7 vshape(1) = asize(7) call armci_put_fa(a7_i8, src_slice, b7_i8, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 7d i8, m = ',m,' failed, rc = ',rc endif ! check that received b7 is the piece of the sent a7 ! v_i8(1:asize(7)) = reshape(b7_i8,vshape) call check_b(rank,v_i8,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 7d i8, m = ',m,' failed' endif call armci_sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' armci_put_fa for i8, ',m,'d passed' endif enddo endif ! ! test get. ! score(:) = 0 joff = (remote_proc + 1)*(remote_proc+1) do m = 1,3 ! ! initialize arrays. ! call init_7d(a7_i8,b7_i8,lb,ub,lb,ub,afirst,bfirst) a6_i8 = a7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5_i8 = a7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4_i8 = a7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3_i8 = a7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2_i8 = a7_i8(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1_i8 = a7_i8(lb(1):ub(1),1,1,1,1,1,1) b6_i8 = b7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5_i8 = b7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4_i8 = b7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3_i8 = b7_i8(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2_i8 = b7_i8(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1_i8 = b7_i8(lb(1):ub(1),1,1,1,1,1,1) ! let all processors get initialized. call armci_sync() ! set up slice info for the get. ! ! for m = 1, the slice has all unit strides. ! for m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! for m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! ! rank 1 ! rank = 1 call armci_get_fa(b1_i8, dst_slice, a1_i8, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. call check_b(rank,a1_i8,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 1d i8, m = ',m,' failed' endif call armci_sync() ! ! rank 2 ! rank = 2 vshape(1) = asize(2) call armci_get_fa(b2_i8, dst_slice, a2_i8, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v_i8(1:asize(2)) = reshape(a2_i8,vshape) call check_b(rank,v_i8,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 2d i8, m = ',m,' failed' endif call armci_sync() ! ! rank 3 ! rank = 3 vshape(1) = asize(3) call armci_get_fa(b3_i8, dst_slice, a3_i8, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v_i8(1:asize(3)) = reshape(a3_i8,vshape) call check_b(rank,v_i8,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 3d i8, m = ',m,' failed' endif call armci_sync() ! ! rank 4 ! rank = 4 vshape(1) = asize(4) call armci_get_fa(b4_i8, dst_slice, a4_i8, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v_i8(1:asize(4)) = reshape(a4_i8,vshape) call check_b(rank,v_i8,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 4d i8, m = ',m,' failed' endif call armci_sync() ! ! rank 5 ! rank = 5 vshape(1) = asize(5) call armci_get_fa(b5_i8, dst_slice, a5_i8, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v_i8(1:asize(5)) = reshape(a5_i8,vshape) call check_b(rank,v_i8,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 5d i8, m = ',m,' failed' endif call armci_sync() ! ! rank 6 ! rank = 6 vshape(1) = asize(6) call armci_get_fa(b6_i8, dst_slice, a6_i8, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v_i8(1:asize(6)) = reshape(a6_i8,vshape) call check_b(rank,v_i8,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 6d i8, m = ',m,' failed' endif call armci_sync() ! ! rank 7 ! rank = 7 vshape(1) = asize(7) call armci_get_fa(b7_i8, dst_slice, a7_i8, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v_i8(1:asize(7)) = reshape(a7_i8,vshape) call check_b(rank,v_i8,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 7d i8, m = ',m,' failed' endif call armci_sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' armci_get_fa for i8, ',m,'d passed' endif enddo endif ! ! free v, a and b arrays. ! call armci_sync() call armci_free_fa(v_i8, rc) call armci_free_fa(a1_i8, rc) call armci_free_fa(b1_i8, rc) call armci_free_fa(a2_i8, rc) call armci_free_fa(b2_i8, rc) call armci_free_fa(a3_i8, rc) call armci_free_fa(b3_i8, rc) call armci_free_fa(a4_i8, rc) call armci_free_fa(b4_i8, rc) call armci_free_fa(a5_i8, rc) call armci_free_fa(b5_i8, rc) call armci_free_fa(a6_i8, rc) call armci_free_fa(b6_i8, rc) call armci_free_fa(a7_i8, rc) call armci_free_fa(b7_i8, rc) call armci_sync() return endsubroutine subroutine testa_r4(nproc,me,remote_proc) use definekind use armci_types use armci_mem_f90 use armci_mov_f90 use testa_init use checkput implicit none type(armci_slice) :: src_slice, dst_slice integer :: nproc,me,remote_proc real(kind=r4), pointer :: a7(:,:,:,:,:,:,:), b7(:,:,:,:,:,:,:) real(kind=r4), pointer :: a6(:,:,:,:,:,:), b6(:,:,:,:,:,:) real(kind=r4), pointer :: a5(:,:,:,:,:), b5(:,:,:,:,:) real(kind=r4), pointer :: a4(:,:,:,:), b4(:,:,:,:) real(kind=r4), pointer :: a3(:,:,:), b3(:,:,:) real(kind=r4), pointer :: a2(:,:), b2(:,:) real(kind=r4), pointer :: a1(:), b1(:) real(kind=r4), pointer :: v(:) integer :: lb(7), ub(7), rc, i, j integer :: pass integer :: myunit integer :: m integer :: rank integer :: joff integer :: vshape(1) integer :: extent(7) integer :: asize(7) integer :: score(7) integer :: vlb(1),vub(1) integer :: afirst,bfirst afirst = 1+me bfirst = afirst*afirst lb(:) = 1 ub(:) = 7 extent(:) = 1 extent(:) = extent(:) + ub(:) - lb(:) asize(1) = extent(1) do m= 2,7 asize(m) = asize(m-1)*extent(m) enddo ! test r4 flavor. vlb(1) = 1 vub(1) = asize(7) call armci_malloc_fa(v,vlb,vub,rc) if (rc .ne. 0) then print *,' armci_malloc_fa for v failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a7, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a7 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b7, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b7 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a6, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a6 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b6, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b6 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a5, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a5 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b5, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b5 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a3, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a3 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b3, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b3 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a2, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a2 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b2, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b2 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a1, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a1 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b1, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b1 failed rc = ',rc call armci_abort() endif ! let all processors get alloccated. call armci_sync() ! r4 allocations done, now loop over slices. ! we will test three flavors of slices, ! all unit stride, unit stride in the first dimension only, ! all non-unit stride (2). score(:) = 0 joff = remote_proc + 1 ! ! test put. ! do m = 1,3 ! initialize arrays. ! call init_7d(a7,b7,lb,ub,lb,ub,afirst,bfirst) a6(:,:,:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5(:,:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4(:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3(:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2(:,:) = a7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1(:) = a7(lb(1):ub(1),1,1,1,1,1,1) b6(:,:,:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5(:,:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4(:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3(:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2(:,:) = b7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1(:) = b7(lb(1):ub(1),1,1,1,1,1,1) ! let all processors get initialized. call armci_sync() ! set up slice info for the put. ! ! for m = 1, the slice has all unit strides. ! for m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! for m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! rank 1. rank = 1 call armci_put_fa(a1, src_slice, b1, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 1d r4, m = ',m,' failed, rc = ',rc endif ! check that received b1 is the piece of the sent a1. ! call check_b(rank,b1,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 1d r4, m = ',m,' failed' endif call armci_sync() ! rank 2. rank = 2 vshape(1) = asize(2) call armci_put_fa(a2, src_slice, b2, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 2d r4, m = ',m,' failed, rc = ',rc endif ! check that received b2 is the piece of the sent a2. ! ! call check_b(rank,reshape(b2,vshape),dst_slice,src_slice,remote_proc, & ! call check_b(rank,b2,dst_slice,src_slice,remote_proc, & v(1:asize(2)) = reshape(b2,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 2d r4, m = ',m,' failed' endif call armci_sync() ! rank 3. rank = 3 vshape(1) = asize(3) call armci_put_fa(a3, src_slice, b3, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 3d r4, m = ',m,' failed, rc = ',rc endif ! check that received b3 is the piece of the sent a3. ! v(1:asize(3)) = reshape(b3,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 3d r4, m = ',m,' failed' endif call armci_sync() ! rank 4. rank = 4 vshape(1) = asize(4) call armci_put_fa(a4, src_slice, b4, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 4d r4, m = ',m,' failed, rc = ',rc endif ! check that received b4 is the piece of the sent a4. ! v(1:asize(4)) = reshape(b4,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 4d r4, m = ',m,' failed' endif call armci_sync() ! rank 5. rank = 5 vshape(1) = asize(5) call armci_put_fa(a5, src_slice, b5, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 5d r4, m = ',m,' failed, rc = ',rc endif ! check that received b5 is the piece of the sent a5. ! v(1:asize(5)) = reshape(b5,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 4d r4, m = ',m,' failed' endif call armci_sync() ! rank 6. rank = 6 vshape(1) = asize(6) call armci_put_fa(a6, src_slice, b6, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 6d r4, m = ',m,' failed, rc = ',rc endif ! check that received b6 is the piece of the sent a6 ! v(1:asize(6)) = reshape(b6,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 6d r4, m = ',m,' failed' endif call armci_sync() ! rank 7. rank = 7 vshape(1) = asize(7) call armci_put_fa(a7, src_slice, b7, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 7d r4, m = ',m,' failed, rc = ',rc endif ! check that received b7 is the piece of the sent a7 ! v(1:asize(7)) = reshape(b7,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 7d r4, m = ',m,' failed' endif call armci_sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' armci_put_fa for r4, ',m,'d passed' endif enddo endif ! ! test get. ! score(:) = 0 joff = (remote_proc + 1)*(remote_proc+1) do m = 1,3 ! ! initialize arrays. ! call init_7d(a7,b7,lb,ub,lb,ub,afirst,bfirst) a6 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2 = a7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1 = a7(lb(1):ub(1),1,1,1,1,1,1) b6 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2 = b7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1 = b7(lb(1):ub(1),1,1,1,1,1,1) ! let all processors get initialized. call armci_sync() ! set up slice info for the get. ! ! for m = 1, the slice has all unit strides. ! for m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! for m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! ! rank 1 ! rank = 1 call armci_get_fa(b1, dst_slice, a1, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. call check_b(rank,a1,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 1d r4, m = ',m,' failed' endif call armci_sync() ! ! rank 2 ! rank = 2 vshape(1) = asize(2) call armci_get_fa(b2, dst_slice, a2, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(2)) = reshape(a2,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 2d r4, m = ',m,' failed' endif call armci_sync() ! ! rank 3 ! rank = 3 vshape(1) = asize(3) call armci_get_fa(b3, dst_slice, a3, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(3)) = reshape(a3,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 3d r4, m = ',m,' failed' endif call armci_sync() ! ! rank 4 ! rank = 4 vshape(1) = asize(4) call armci_get_fa(b4, dst_slice, a4, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(4)) = reshape(a4,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 4d r4, m = ',m,' failed' endif call armci_sync() ! ! rank 5 ! rank = 5 vshape(1) = asize(5) call armci_get_fa(b5, dst_slice, a5, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(5)) = reshape(a5,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 5d r4, m = ',m,' failed' endif call armci_sync() ! ! rank 6 ! rank = 6 vshape(1) = asize(6) call armci_get_fa(b6, dst_slice, a6, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(6)) = reshape(a6,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 6d r4, m = ',m,' failed' endif call armci_sync() ! ! rank 7 ! rank = 7 vshape(1) = asize(7) call armci_get_fa(b7, dst_slice, a7, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(7)) = reshape(a7,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 7d r4, m = ',m,' failed' endif call armci_sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' armci_get_fa for r4, ',m,'d passed' endif enddo endif ! ! free v, a and b arrays. ! call armci_sync() call armci_free_fa(v, rc) call armci_free_fa(a1, rc) call armci_free_fa(b1, rc) call armci_free_fa(a2, rc) call armci_free_fa(b2, rc) call armci_free_fa(a3, rc) call armci_free_fa(b3, rc) call armci_free_fa(a4, rc) call armci_free_fa(b4, rc) call armci_free_fa(a5, rc) call armci_free_fa(b5, rc) call armci_free_fa(a6, rc) call armci_free_fa(b6, rc) call armci_free_fa(a7, rc) call armci_free_fa(b7, rc) call armci_sync() return endsubroutine subroutine testa_r8(nproc,me,remote_proc) use definekind use armci_types use armci_mem_f90 use armci_mov_f90 use armci_nbmov use testa_init use checkput implicit none type(armci_slice) :: src_slice, dst_slice integer :: nproc,me,remote_proc real(kind=r8), pointer :: a7(:,:,:,:,:,:,:), b7(:,:,:,:,:,:,:) real(kind=r8), pointer :: a6(:,:,:,:,:,:), b6(:,:,:,:,:,:) real(kind=r8), pointer :: a5(:,:,:,:,:), b5(:,:,:,:,:) real(kind=r8), pointer :: a4(:,:,:,:), b4(:,:,:,:) real(kind=r8), pointer :: a3(:,:,:), b3(:,:,:) real(kind=r8), pointer :: a2(:,:), b2(:,:) real(kind=r8), pointer :: a1(:), b1(:) real(kind=r8), pointer :: v(:) integer :: lb(7), ub(7), rc, i, j integer :: pass integer :: myunit integer :: m integer :: rank integer :: joff integer :: vshape(1) integer :: extent(7) integer :: asize(7) integer :: score(7) integer :: vlb(1),vub(1) integer :: afirst,bfirst afirst = 1+me bfirst = afirst*afirst lb(:) = 1 ub(:) = 7 extent(:) = 1 extent(:) = extent(:) + ub(:) - lb(:) asize(1) = extent(1) do m= 2,7 asize(m) = asize(m-1)*extent(m) enddo ! test r8 flavor. vlb(1) = 1 vub(1) = asize(7) call armci_malloc_fa(v,vlb,vub,rc) if (rc .ne. 0) then print *,' armci_malloc_fa for v failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a7, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a7 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b7, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b7 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a6, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a6 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b6, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b6 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a5, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a5 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b5, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b5 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a3, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a3 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b3, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b3 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a2, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a2 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b2, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b2 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a1, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a1 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b1, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b1 failed rc = ',rc call armci_abort() endif ! let all processors get alloccated. call armci_sync() ! r8 allocations done, now loop over slices. ! we will test three flavors of slices, ! all unit stride, unit stride in the first dimension only, ! all non-unit stride (2). score(:) = 0 joff = remote_proc + 1 ! ! test put. ! do m = 1,3 ! initialize arrays. ! call init_7d(a7,b7,lb,ub,lb,ub,afirst,bfirst) a6(:,:,:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5(:,:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4(:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3(:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2(:,:) = a7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1(:) = a7(lb(1):ub(1),1,1,1,1,1,1) b6(:,:,:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5(:,:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4(:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3(:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2(:,:) = b7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1(:) = b7(lb(1):ub(1),1,1,1,1,1,1) ! let all processors get initialized. call armci_sync() ! set up slice info for the put. ! ! for m = 1, the slice has all unit strides. ! for m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! for m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! rank 1. rank = 1 call armci_nbput_fa(a1, src_slice, b1, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 1d r8, m = ',m,' failed, rc = ',rc endif ! check that received b1 is the piece of the sent a1. ! call check_b(rank,b1,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 1d r8, m = ',m,' failed' endif call armci_sync() ! rank 2. rank = 2 vshape(1) = asize(2) call armci_put_fa(a2, src_slice, b2, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 2d r8, m = ',m,' failed, rc = ',rc endif ! check that received b2 is the piece of the sent a2. ! ! call check_b(rank,reshape(b2,vshape),dst_slice,src_slice,remote_proc, & ! call check_b(rank,b2,dst_slice,src_slice,remote_proc, & v(1:asize(2)) = reshape(b2,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 2d r8, m = ',m,' failed' endif call armci_sync() ! rank 3. rank = 3 vshape(1) = asize(3) call armci_put_fa(a3, src_slice, b3, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 3d r8, m = ',m,' failed, rc = ',rc endif ! check that received b3 is the piece of the sent a3. ! v(1:asize(3)) = reshape(b3,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 3d r8, m = ',m,' failed' endif call armci_sync() ! rank 4. rank = 4 vshape(1) = asize(4) call armci_put_fa(a4, src_slice, b4, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 4d r8, m = ',m,' failed, rc = ',rc endif ! check that received b4 is the piece of the sent a4. ! v(1:asize(4)) = reshape(b4,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 4d r8, m = ',m,' failed' endif call armci_sync() ! rank 5. rank = 5 vshape(1) = asize(5) call armci_put_fa(a5, src_slice, b5, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 5d r8, m = ',m,' failed, rc = ',rc endif ! check that received b5 is the piece of the sent a5. ! v(1:asize(5)) = reshape(b5,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 4d r8, m = ',m,' failed' endif call armci_sync() ! rank 6. rank = 6 vshape(1) = asize(6) call armci_put_fa(a6, src_slice, b6, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 6d r8, m = ',m,' failed, rc = ',rc endif ! check that received b6 is the piece of the sent a6 ! v(1:asize(6)) = reshape(b6,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 6d r8, m = ',m,' failed' endif call armci_sync() ! rank 7. rank = 7 vshape(1) = asize(7) call armci_put_fa(a7, src_slice, b7, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 7d r8, m = ',m,' failed, rc = ',rc endif ! check that received b7 is the piece of the sent a7 ! v(1:asize(7)) = reshape(b7,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 7d r8, m = ',m,' failed' endif call armci_sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' armci_put_fa for r8, ',m,'d passed' endif enddo endif ! ! test get. ! score(:) = 0 joff = (remote_proc + 1)*(remote_proc+1) do m = 1,3 ! ! initialize arrays. ! call init_7d(a7,b7,lb,ub,lb,ub,afirst,bfirst) a6 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2 = a7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1 = a7(lb(1):ub(1),1,1,1,1,1,1) b6 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2 = b7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1 = b7(lb(1):ub(1),1,1,1,1,1,1) ! let all processors get initialized. call armci_sync() ! set up slice info for the get. ! ! for m = 1, the slice has all unit strides. ! for m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! for m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! ! rank 1 ! rank = 1 call armci_get_fa(b1, dst_slice, a1, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. call check_b(rank,a1,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 1d r8, m = ',m,' failed' endif call armci_sync() ! ! rank 2 ! rank = 2 vshape(1) = asize(2) call armci_get_fa(b2, dst_slice, a2, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(2)) = reshape(a2,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 2d r8, m = ',m,' failed' endif call armci_sync() ! ! rank 3 ! rank = 3 vshape(1) = asize(3) call armci_get_fa(b3, dst_slice, a3, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(3)) = reshape(a3,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 3d r8, m = ',m,' failed' endif call armci_sync() ! ! rank 4 ! rank = 4 vshape(1) = asize(4) call armci_get_fa(b4, dst_slice, a4, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(4)) = reshape(a4,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 4d r8, m = ',m,' failed' endif call armci_sync() ! ! rank 5 ! rank = 5 vshape(1) = asize(5) call armci_get_fa(b5, dst_slice, a5, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(5)) = reshape(a5,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 5d r8, m = ',m,' failed' endif call armci_sync() ! ! rank 6 ! rank = 6 vshape(1) = asize(6) call armci_get_fa(b6, dst_slice, a6, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(6)) = reshape(a6,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 6d r8, m = ',m,' failed' endif call armci_sync() ! ! rank 7 ! rank = 7 vshape(1) = asize(7) call armci_get_fa(b7, dst_slice, a7, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(7)) = reshape(a7,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 7d r8, m = ',m,' failed' endif call armci_sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' armci_get_fa for r8, ',m,'d passed' endif enddo endif ! ! free v, a and b arrays. ! call armci_sync() call armci_free_fa(v, rc) call armci_free_fa(a1, rc) call armci_free_fa(b1, rc) call armci_free_fa(a2, rc) call armci_free_fa(b2, rc) call armci_free_fa(a3, rc) call armci_free_fa(b3, rc) call armci_free_fa(a4, rc) call armci_free_fa(b4, rc) call armci_free_fa(a5, rc) call armci_free_fa(b5, rc) call armci_free_fa(a6, rc) call armci_free_fa(b6, rc) call armci_free_fa(a7, rc) call armci_free_fa(b7, rc) call armci_sync() return endsubroutine subroutine testa_c4(nproc,me,remote_proc) use definekind use armci_types use armci_mem_f90 use armci_mov_f90 use testa_init use checkput implicit none type(armci_slice) :: src_slice, dst_slice integer :: nproc,me,remote_proc complex(kind=c4), pointer :: a7(:,:,:,:,:,:,:), b7(:,:,:,:,:,:,:) complex(kind=c4), pointer :: a6(:,:,:,:,:,:), b6(:,:,:,:,:,:) complex(kind=c4), pointer :: a5(:,:,:,:,:), b5(:,:,:,:,:) complex(kind=c4), pointer :: a4(:,:,:,:), b4(:,:,:,:) complex(kind=c4), pointer :: a3(:,:,:), b3(:,:,:) complex(kind=c4), pointer :: a2(:,:), b2(:,:) complex(kind=c4), pointer :: a1(:), b1(:) complex(kind=c4), pointer :: v(:) integer :: lb(7), ub(7), rc, i, j integer :: pass integer :: myunit integer :: m integer :: rank integer :: joff integer :: vshape(1) integer :: extent(7) integer :: asize(7) integer :: score(7) integer :: vlb(1),vub(1) integer :: afirst,bfirst afirst = 1+me bfirst = afirst*afirst lb(:) = 1 ub(:) = 7 extent(:) = 1 extent(:) = extent(:) + ub(:) - lb(:) asize(1) = extent(1) do m= 2,7 asize(m) = asize(m-1)*extent(m) enddo ! test c4 flavor. vlb(1) = 1 vub(1) = asize(7) call armci_malloc_fa(v,vlb,vub,rc) if (rc .ne. 0) then print *,' armci_malloc_fa for v failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a7, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a7 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b7, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b7 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a6, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a6 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b6, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b6 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a5, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a5 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b5, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b5 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a3, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a3 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b3, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b3 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a2, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a2 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b2, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b2 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a1, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a1 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b1, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b1 failed rc = ',rc call armci_abort() endif ! let all processors get alloccated. call armci_sync() ! c4 allocations done, now loop over slices. ! we will test three flavors of slices, ! all unit stride, unit stride in the first dimension only, ! all non-unit stride (2). score(:) = 0 joff = remote_proc + 1 ! ! test put. ! do m = 1,3 ! initialize arrays. ! call init_7d(a7,b7,lb,ub,lb,ub,afirst,bfirst) a6(:,:,:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5(:,:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4(:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3(:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2(:,:) = a7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1(:) = a7(lb(1):ub(1),1,1,1,1,1,1) b6(:,:,:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5(:,:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4(:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3(:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2(:,:) = b7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1(:) = b7(lb(1):ub(1),1,1,1,1,1,1) ! let all processors get initialized. call armci_sync() ! set up slice info for the put. ! ! for m = 1, the slice has all unit strides. ! for m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! for m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! rank 1. rank = 1 call armci_put_fa(a1, src_slice, b1, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 1d c4, m = ',m,' failed, rc = ',rc endif ! check that received b1 is the piece of the sent a1. ! call check_b(rank,b1,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 1d c4, m = ',m,' failed' endif call armci_sync() ! rank 2. rank = 2 vshape(1) = asize(2) call armci_put_fa(a2, src_slice, b2, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 2d c4, m = ',m,' failed, rc = ',rc endif ! check that received b2 is the piece of the sent a2. ! ! call check_b(rank,reshape(b2,vshape),dst_slice,src_slice,remote_proc, & ! call check_b(rank,b2,dst_slice,src_slice,remote_proc, & v(1:asize(2)) = reshape(b2,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 2d c4, m = ',m,' failed' endif call armci_sync() ! rank 3. rank = 3 vshape(1) = asize(3) call armci_put_fa(a3, src_slice, b3, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 3d c4, m = ',m,' failed, rc = ',rc endif ! check that received b3 is the piece of the sent a3. ! v(1:asize(3)) = reshape(b3,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 3d c4, m = ',m,' failed' endif call armci_sync() ! rank 4. rank = 4 vshape(1) = asize(4) call armci_put_fa(a4, src_slice, b4, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 4d c4, m = ',m,' failed, rc = ',rc endif ! check that received b4 is the piece of the sent a4. ! v(1:asize(4)) = reshape(b4,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 4d c4, m = ',m,' failed' endif call armci_sync() ! rank 5. rank = 5 vshape(1) = asize(5) call armci_put_fa(a5, src_slice, b5, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 5d c4, m = ',m,' failed, rc = ',rc endif ! check that received b5 is the piece of the sent a5. ! v(1:asize(5)) = reshape(b5,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 4d c4, m = ',m,' failed' endif call armci_sync() ! rank 6. rank = 6 vshape(1) = asize(6) call armci_put_fa(a6, src_slice, b6, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 6d c4, m = ',m,' failed, rc = ',rc endif ! check that received b6 is the piece of the sent a6 ! v(1:asize(6)) = reshape(b6,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 6d c4, m = ',m,' failed' endif call armci_sync() ! rank 7. rank = 7 vshape(1) = asize(7) call armci_put_fa(a7, src_slice, b7, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 7d c4, m = ',m,' failed, rc = ',rc endif ! check that received b7 is the piece of the sent a7 ! v(1:asize(7)) = reshape(b7,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 7d c4, m = ',m,' failed' endif call armci_sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' armci_put_fa for c4, ',m,'d passed' endif enddo endif ! ! test get. ! score(:) = 0 joff = (remote_proc + 1)*(remote_proc+1) do m = 1,3 ! ! initialize arrays. ! call init_7d(a7,b7,lb,ub,lb,ub,afirst,bfirst) a6 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2 = a7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1 = a7(lb(1):ub(1),1,1,1,1,1,1) b6 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2 = b7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1 = b7(lb(1):ub(1),1,1,1,1,1,1) ! let all processors get initialized. call armci_sync() ! set up slice info for the get. ! ! for m = 1, the slice has all unit strides. ! for m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! for m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! ! rank 1 ! rank = 1 call armci_get_fa(b1, dst_slice, a1, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. call check_b(rank,a1,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 1d c4, m = ',m,' failed' endif call armci_sync() ! ! rank 2 ! rank = 2 vshape(1) = asize(2) call armci_get_fa(b2, dst_slice, a2, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(2)) = reshape(a2,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 2d c4, m = ',m,' failed' endif call armci_sync() ! ! rank 3 ! rank = 3 vshape(1) = asize(3) call armci_get_fa(b3, dst_slice, a3, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(3)) = reshape(a3,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 3d c4, m = ',m,' failed' endif call armci_sync() ! ! rank 4 ! rank = 4 vshape(1) = asize(4) call armci_get_fa(b4, dst_slice, a4, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(4)) = reshape(a4,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 4d c4, m = ',m,' failed' endif call armci_sync() ! ! rank 5 ! rank = 5 vshape(1) = asize(5) call armci_get_fa(b5, dst_slice, a5, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(5)) = reshape(a5,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 5d c4, m = ',m,' failed' endif call armci_sync() ! ! rank 6 ! rank = 6 vshape(1) = asize(6) call armci_get_fa(b6, dst_slice, a6, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(6)) = reshape(a6,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 6d c4, m = ',m,' failed' endif call armci_sync() ! ! rank 7 ! rank = 7 vshape(1) = asize(7) call armci_get_fa(b7, dst_slice, a7, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(7)) = reshape(a7,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 7d c4, m = ',m,' failed' endif call armci_sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' armci_get_fa for c4, ',m,'d passed' endif enddo endif ! ! free v, a and b arrays. ! call armci_sync() call armci_free_fa(v, rc) call armci_free_fa(a1, rc) call armci_free_fa(b1, rc) call armci_free_fa(a2, rc) call armci_free_fa(b2, rc) call armci_free_fa(a3, rc) call armci_free_fa(b3, rc) call armci_free_fa(a4, rc) call armci_free_fa(b4, rc) call armci_free_fa(a5, rc) call armci_free_fa(b5, rc) call armci_free_fa(a6, rc) call armci_free_fa(b6, rc) call armci_free_fa(a7, rc) call armci_free_fa(b7, rc) call armci_sync() return endsubroutine subroutine testa_c8(nproc,me,remote_proc) use definekind use armci_types use armci_mem_f90 use armci_mov_f90 use testa_init use checkput implicit none type(armci_slice) :: src_slice, dst_slice integer :: nproc,me,remote_proc complex(kind=c8), pointer :: a7(:,:,:,:,:,:,:), b7(:,:,:,:,:,:,:) complex(kind=c8), pointer :: a6(:,:,:,:,:,:), b6(:,:,:,:,:,:) complex(kind=c8), pointer :: a5(:,:,:,:,:), b5(:,:,:,:,:) complex(kind=c8), pointer :: a4(:,:,:,:), b4(:,:,:,:) complex(kind=c8), pointer :: a3(:,:,:), b3(:,:,:) complex(kind=c8), pointer :: a2(:,:), b2(:,:) complex(kind=c8), pointer :: a1(:), b1(:) complex(kind=c8), pointer :: v(:) integer :: lb(7), ub(7), rc, i, j integer :: pass integer :: myunit integer :: m integer :: rank integer :: joff integer :: vshape(1) integer :: extent(7) integer :: asize(7) integer :: score(7) integer :: vlb(1),vub(1) integer :: afirst,bfirst afirst = 1+me bfirst = afirst*afirst lb(:) = 1 ub(:) = 7 ub(7) = 3 extent(:) = 1 extent(:) = extent(:) + ub(:) - lb(:) asize(1) = extent(1) do m= 2,7 asize(m) = asize(m-1)*extent(m) enddo ! test c8 flavor. vlb(1) = 1 vub(1) = asize(7) call armci_malloc_fa(v,vlb,vub,rc) if (rc .ne. 0) then print *,' armci_malloc_fa for v failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a7, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a7 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b7, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b7 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a6, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a6 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b6, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b6 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a5, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a5 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b5, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b5 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b4, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b4 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a3, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a3 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b3, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b3 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a2, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a2 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b2, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b2 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(a1, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for a1 failed rc = ',rc call armci_abort() endif call armci_malloc_fa(b1, lb, ub, rc) if (rc .ne. 0) then print *,' armci_malloc_fa for b1 failed rc = ',rc call armci_abort() endif ! let all processors get alloccated. call armci_sync() ! c8 allocations done, now loop over slices. ! we will test three flavors of slices, ! all unit stride, unit stride in the first dimension only, ! all non-unit stride (2). score(:) = 0 joff = remote_proc + 1 ! ! test put. ! do m = 1,3 ! initialize arrays. ! call init_7d(a7,b7,lb,ub,lb,ub,afirst,bfirst) a6(:,:,:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5(:,:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4(:,:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3(:,:,:) = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2(:,:) = a7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1(:) = a7(lb(1):ub(1),1,1,1,1,1,1) b6(:,:,:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5(:,:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4(:,:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3(:,:,:) = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2(:,:) = b7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1(:) = b7(lb(1):ub(1),1,1,1,1,1,1) ! let all processors get initialized. call armci_sync() ! set up slice info for the put. ! ! for m = 1, the slice has all unit strides. ! for m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! for m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%lo(7) = 1 src_slice%hi(7) = 2 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%lo(7) = 2 dst_slice%hi(7) = 3 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! rank 1. rank = 1 call armci_put_fa(a1, src_slice, b1, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 1d c8, m = ',m,' failed, rc = ',rc endif ! check that received b1 is the piece of the sent a1. ! call check_b(rank,b1,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 1d c8, m = ',m,' failed' endif call armci_sync() ! rank 2. rank = 2 vshape(1) = asize(2) call armci_put_fa(a2, src_slice, b2, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 2d c8, m = ',m,' failed, rc = ',rc endif ! check that received b2 is the piece of the sent a2. ! ! call check_b(rank,reshape(b2,vshape),dst_slice,src_slice,remote_proc, & ! call check_b(rank,b2,dst_slice,src_slice,remote_proc, & v(1:asize(2)) = reshape(b2,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 2d c8, m = ',m,' failed' endif call armci_sync() ! rank 3. rank = 3 vshape(1) = asize(3) call armci_put_fa(a3, src_slice, b3, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 3d c8, m = ',m,' failed, rc = ',rc endif ! check that received b3 is the piece of the sent a3. ! v(1:asize(3)) = reshape(b3,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 3d c8, m = ',m,' failed' endif call armci_sync() ! rank 4. rank = 4 vshape(1) = asize(4) call armci_put_fa(a4, src_slice, b4, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 4d c8, m = ',m,' failed, rc = ',rc endif ! check that received b4 is the piece of the sent a4. ! v(1:asize(4)) = reshape(b4,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 4d c8, m = ',m,' failed' endif call armci_sync() ! rank 5. rank = 5 vshape(1) = asize(5) call armci_put_fa(a5, src_slice, b5, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 5d c8, m = ',m,' failed, rc = ',rc endif ! check that received b5 is the piece of the sent a5. ! v(1:asize(5)) = reshape(b5,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 4d c8, m = ',m,' failed' endif call armci_sync() ! rank 6. rank = 6 vshape(1) = asize(6) call armci_put_fa(a6, src_slice, b6, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 6d c8, m = ',m,' failed, rc = ',rc endif ! check that received b6 is the piece of the sent a6 ! v(1:asize(6)) = reshape(b6,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 6d c8, m = ',m,' failed' endif call armci_sync() ! rank 7. rank = 7 vshape(1) = asize(7) call armci_put_fa(a7, src_slice, b7, dst_slice, remote_proc, rc) call armci_sync() if (rc .ne. 0) then print *,me,': armci_put_fa for 7d c8, m = ',m,' failed, rc = ',rc endif ! check that received b7 is the piece of the sent a7 ! v(1:asize(7)) = reshape(b7,vshape) call check_b(rank,v,dst_slice,src_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': armci_put_fa verify for 7d c8, m = ',m,' failed' endif call armci_sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' armci_put_fa for c8, ',m,'d passed' endif enddo endif ! ! test get. ! score(:) = 0 joff = (remote_proc + 1)*(remote_proc+1) do m = 1,3 ! ! initialize arrays. ! call init_7d(a7,b7,lb,ub,lb,ub,afirst,bfirst) a6 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) a5 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) a4 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) a3 = a7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) a2 = a7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) a1 = a7(lb(1):ub(1),1,1,1,1,1,1) b6 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),lb(6):ub(6),1) b5 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),lb(5):ub(5),1,1) b4 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),lb(4):ub(4),1,1,1) b3 = b7(lb(1):ub(1),lb(2):ub(2),lb(3):ub(3),1,1,1,1) b2 = b7(lb(1):ub(1),lb(2):ub(2),1,1,1,1,1) b1 = b7(lb(1):ub(1),1,1,1,1,1,1) ! let all processors get initialized. call armci_sync() ! set up slice info for the get. ! ! for m = 1, the slice has all unit strides. ! for m = 2, the first dimension has a unit stride and all other ! dimensions have a stride of 2. ! for m = 3, all dimensions have a stride of 2. ! src_slice%lo(:) = 2 src_slice%hi(:) = 6 src_slice%lo(7) = 1 src_slice%hi(7) = 2 src_slice%stride(:) = (m+2)/2 src_slice%stride(1) = (m+1)/2 dst_slice%lo(:) = 3 dst_slice%hi(:) = 7 dst_slice%lo(7) = 2 dst_slice%hi(7) = 3 dst_slice%stride(:) = (m+2)/2 dst_slice%stride(1) = (m+1)/2 ! ! rank 1 ! rank = 1 call armci_get_fa(b1, dst_slice, a1, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. call check_b(rank,a1,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(1) = score(1) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 1d c8, m = ',m,' failed' endif call armci_sync() ! ! rank 2 ! rank = 2 vshape(1) = asize(2) call armci_get_fa(b2, dst_slice, a2, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(2)) = reshape(a2,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(2) = score(2) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 2d c8, m = ',m,' failed' endif call armci_sync() ! ! rank 3 ! rank = 3 vshape(1) = asize(3) call armci_get_fa(b3, dst_slice, a3, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(3)) = reshape(a3,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(3) = score(3) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 3d c8, m = ',m,' failed' endif call armci_sync() ! ! rank 4 ! rank = 4 vshape(1) = asize(4) call armci_get_fa(b4, dst_slice, a4, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(4)) = reshape(a4,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(4) = score(4) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 4d c8, m = ',m,' failed' endif call armci_sync() ! ! rank 5 ! rank = 5 vshape(1) = asize(5) call armci_get_fa(b5, dst_slice, a5, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(5)) = reshape(a5,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(5) = score(5) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 5d c8, m = ',m,' failed' endif call armci_sync() ! ! rank 6 ! rank = 6 vshape(1) = asize(6) call armci_get_fa(b6, dst_slice, a6, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(6)) = reshape(a6,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(6) = score(6) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 6d c8, m = ',m,' failed' endif call armci_sync() ! ! rank 7 ! rank = 7 vshape(1) = asize(7) call armci_get_fa(b7, dst_slice, a7, src_slice, remote_proc, rc) call armci_sync() ! ! check that recieved a is the piece of b that was sent. v(1:asize(7)) = reshape(a7,vshape) call check_b(rank,v,src_slice,dst_slice,remote_proc, & & lb,ub,lb,ub,joff,pass) score(7) = score(7) + pass if (pass .ne. 1) then print *,me,': armci_get_fa verify for 7d c8, m = ',m,' failed' endif call armci_sync() enddo if (me .eq. 0) then do m = 1,7 if (score(m) .eq. 3) then print *,' armci_get_fa for c8, ',m,'d passed' endif enddo endif ! ! free v, a and b arrays. ! call armci_sync() call armci_free_fa(v, rc) call armci_free_fa(a1, rc) call armci_free_fa(b1, rc) call armci_free_fa(a2, rc) call armci_free_fa(b2, rc) call armci_free_fa(a3, rc) call armci_free_fa(b3, rc) call armci_free_fa(a4, rc) call armci_free_fa(b4, rc) call armci_free_fa(a5, rc) call armci_free_fa(b5, rc) call armci_free_fa(a6, rc) call armci_free_fa(b6, rc) call armci_free_fa(a7, rc) call armci_free_fa(b7, rc) call armci_sync() return endsubroutine ga-5-3/armci/f90/arraywrap.c0000640005473000001440000000606411272474200014446 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /******************************************************************************************************* * This is a language (python,f90) independent layer of array management operations * Oerations defined here are called from language-specific layer to allocate & free memory * *******************************************************************************************************/ #include #include #include #include #include #include extern int armci_nproc, armci_me; /*\ allocates memory for array according to rank an lower/upper bounds * pptr contains address to user visible array data * lb can be specified as NULL - in that case ub contains shape \*/ void _array_create(void **pptr, int elemsize, int rank, index_size_t *lb, index_size_t *ub) { void **tmp; char *hptr; armci_arr_dsc_t *ad; void *gtemp; int* ia, i; int bytes=0, elems=1, apsize; *pptr = (void*)0; if(rank <1 || rank > MAXDIM) {fprintf(stderr,"%d: bad rank %d\n",armci_me,rank); return;} if(lb) for(i=0; i< rank; i++) elems *= 1 + ub[i] - lb[i]; else for(i=0; i< rank; i++) elems *= ub[i]; /* allocate pointer vector */ apsize = armci_nproc *sizeof(void*); tmp = (void*) malloc(apsize); if(!tmp) {fprintf(stderr,"%: malloc failed\n",armci_me); return;} bytes += apsize; /* allocate header */ bytes += HEADER_SIZE; /* allocate array memory */ bytes += elemsize * elems; if( ARMCI_Malloc(tmp,bytes)) { fprintf(stderr,"%: armci_malloc failed\n",armci_me); return;} /* set up the header */ hptr = ((char*)tmp[armci_me])+apsize; gtemp = ((char*)hptr)+HEADER_SIZE; #if DEBUG_ printf("%d: array memory %p tmp=%p\n", armci_me, gtemp,tmp[armci_me]); fflush(stdout); #endif /* store array descriptor */ ad = (armci_arr_dsc_t*) hptr; /* */ ad->aptr = tmp[armci_me]; /* store ptr to array of ptrs */ ad->elemsize = elemsize; ad->amem = gtemp; ad->rank = rank; if(lb){ for(i=0; i< rank; i++) ad->lo[i] = lb[i]; for(i=0; i< rank; i++) ad->hi[i] = ub[i]; for(i=0; i< rank; i++) ad->extent[i] = 1 + ub[i] - lb[i]; }else { for(i=0; i< rank; i++) ad->lo[i] = 0; /* C default for array lower bound */ for(i=0; i< rank; i++) ad->hi[i] = ub[i]-1; /* C default for array upper bound */ for(i=0; i< rank; i++) ad->extent[i] = ub[i]; } ad->stride[0]=elemsize; for(i=1; i< rank; i++) ad->stride[i] = ad->stride[i-1]*ad->extent[i-1]; /* adjust ptr array to point to the user f90 array rather than allocated memory */ for(i = 0; iaptr,apsize); *pptr = gtemp; free(tmp); } /*\ deallocates array corresponding to ptr \*/ void _array_free(void *ptr) { armci_arr_dsc_t *ad; ad = GET_ARR_DSC_FROM_ARRAY(ptr); if(ptr != ad->amem)ARMCI_Error("free - bad memory\n",0); ARMCI_Free(ad->aptr); #if DEBUG_ printf("%d: freed %p\n",armci_me, addr); fflush(stdout); #endif } ga-5-3/armci/f90/armcif90.c0000640005473000001440000007234011272474200014050 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "CompilerCharacteristics.h" #include #include #include #include #include #include #define HIDDEN_DESC #if defined(F90_SYM_CASE_LOWER) # define ARMCI_Arr_init F90_SYMBOL( armci_arr_init ) # define ARMCI_Arr_finalize F90_SYMBOL( armci_arr_finalize ) # define ARMCI_Malloc_farray F90_SYMBOL( armci_malloc_farray ) # define ARMCI_Free_farray F90_SYMBOL( armci_free_farray ) # define ARMCI_Put_farrays F90_SYMBOL( armci_put_farrays ) # define ARMCI_NbPut_farrays F90_SYMBOL( armci_nbput_farrays ) # define ARMCI_Get_farrays F90_SYMBOL( armci_get_farrays ) # define ARMCI_NbGet_farrays F90_SYMBOL( armci_nbget_farrays ) # define ARMCI_Sync F90_SYMBOL( armci_sync ) # define ARMCI_Waitall_fa F90_SYMBOL( armci_waitall_fa ) # define ARMCI_Notify_fa F90_SYMBOL( armci_notify_fa ) # define ARMCI_NotifyWait_fa F90_SYMBOL( armci_notifywait_fa ) # define ARMCI_Malloc_fa F90_SYMBOL( armci_malloc_fa ) #endif /* F90_SYM_CASE_LOWER */ #if defined(F90_SYM_CASE_MIXED) # define ARMCI_Arr_init F90_SYMBOL( ARMCI_Arr_init ) # define ARMCI_Arr_finalize F90_SYMBOL( ARMCI_Arr_finalize ) # define ARMCI_Malloc_farray F90_SYMBOL( ARMCI_Malloc_farray ) # define ARMCI_Free_farray F90_SYMBOL( ARMCI_Free_farray ) # define ARMCI_Put_farrays F90_SYMBOL( ARMCI_Put_farrays ) # define ARMCI_NbPut_farrays F90_SYMBOL( ARMCI_NbPut_farrays ) # define ARMCI_Get_farrays F90_SYMBOL( ARMCI_Get_farrays ) # define ARMCI_NbGet_farrays F90_SYMBOL( ARMCI_NbGet_farrays ) # define ARMCI_Sync F90_SYMBOL( ARMCI_Sync ) # define ARMCI_Waitall_fa F90_SYMBOL( ARMCI_Waitall_fa ) # define ARMCI_Notify_fa F90_SYMBOL( ARMCI_Notify_fa ) # define ARMCI_NotifyWait_fa F90_SYMBOL( ARMCI_NotifyWait_fa ) #endif /* F90_SYM_CASE_MIXED */ #ifdef F90_SYM_CASE_UPPER # define ARMCI_Arr_init F90_SYMBOL( ARMCI_ARR_INIT ) # define ARMCI_Arr_finalize F90_SYMBOL( ARMCI_ARR_FINALIZE ) # define ARMCI_Malloc_farray F90_SYMBOL( ARMCI_MALLOC_FARRAY ) # define ARMCI_Free_farray F90_SYMBOL( ARMCI_FREE_FARRAY ) # define ARMCI_Put_farrays F90_SYMBOL( ARMCI_PUT_FARRAYS ) # define ARMCI_NbPut_farrays F90_SYMBOL( ARMCI_NBPUT_FARRAYS ) # define ARMCI_Get_farrays F90_SYMBOL( ARMCI_GET_FARRAYS ) # define ARMCI_NbGet_farrays F90_SYMBOL( ARMCI_NBGET_FARRAYS ) # define ARMCI_Sync F90_SYMBOL( ARMCI_SYNC ) # define ARMCI_Waitall_fa F90_SYMBOL( ARMCI_WAITALL_FA ) # define ARMCI_Notify_fa F90_SYMBOL( ARMCI_NOTIFY_FA ) # define ARMCI_NotifyWait_fa F90_SYMBOL( ARMCI_NOTIFYWAIT_FA ) #endif /* F90_SYM_CASE_UPPER */ #ifdef F90_INTEL # define GET_ADDRESS_FROM_FDSC(dsc) (((void**)(dsc))[2]) #else # define GET_ADDRESS_FROM_FDSC(dsc) (((void**)(dsc))[0]) #endif typedef struct { int lo[MAXDIM]; int hi[MAXDIM]; int stride[MAXDIM]; } array_slice_t; /* allows simple test to assure that allocated and freed addresses the same */ void* g_save_addr; /* structure containing function pointers to chasm lib, must be initialized */ F90_CompilerCharacteristics cc; extern int armci_nproc, armci_me; void ARMCI_Arr_init() { F90_SetCompilerCharacteristics(&cc, FORTRAN_COMPILER); ARMCI_Init(); } void ARMCI_Arr_finalize() { ARMCI_Finalize(); } void ARMCI_Waitall_fa() { ARMCI_WaitAll(); } void ARMCI_Notify_fa(int* proc) { int tempvar; tempvar = armci_notify(*proc); } void ARMCI_NotifyWait_fa(int* proc) { int rc,wc; rc = armci_notify_wait(*proc,&wc); } void armci_abort() { } void armci_abort_() { } void ARMCI_Sync() { ARMCI_Barrier(); } void ARMCI_Terminate() { } void ARMCI_Malloc_farray(void* dv, int* rank, int* elemsize, int lb_in[], int ub_in[], int* rc, void* dv_hidden) { long stride[MAXDIM]; long lo[MAXDIM]; unsigned long extent[MAXDIM]; void* dv_local; armci_arr_dsc_t *ad; int i; _array_create(&g_save_addr,*elemsize, *rank, lb_in, ub_in); if(!g_save_addr)ARMCI_Error("_array_create failed",*rank); /************************ chasm interface ***************************/ /* memory for dope vector */ dv_local = malloc( cc.getArrayDescSize(*rank) ); if(!dv_local) {*rc = -2; return;} ad = GET_ARR_DSC_FROM_ARRAY(g_save_addr); /* *rc = cc.setArrayDesc(dv_local, g_save_addr, *rank, F90_ArrayPointer, F90_Integer, elemsize, ad->lo, ad->extent, ad->stride); */ for(i=0; i< *rank; i++) lo[i] = (long)ad->lo[i]; for(i=0; i< *rank; i++) stride[i] = (long)ad->stride[i]; for(i=0; i< *rank; i++) extent[i] = (unsigned long) ad->extent[i]; *rc = cc.setArrayDesc(dv_local, g_save_addr, *rank, F90_ArrayPointer, F90_Integer, *elemsize, lo, extent, stride); if (*rc) { fprintf(stderr, "ERROR in setting array descriptor\n"); return; } /* copy dope vector to the stack memory */ *rc = cc.copyToArrayDescAndHidden(dv_local, *rank, F90_ArrayPointer, dv, dv_hidden); if (*rc) { fprintf(stderr, "ERROR in copying array descriptor\n"); return; } free(dv_local); } void ARMCI_Free_farray(void* dv, int* rank, int* rc, void* dv_hidden) { F90_CompilerCharacteristics cc; void* dv_local; void* addr; armci_arr_dsc_t *ad; *rc = 0; F90_SetCompilerCharacteristics(&cc, FORTRAN_COMPILER); dv_local = cc.createArrayDesc(dv, dv_hidden, *rank, F90_ArrayPointer); if (dv_local == 0) { fprintf(stderr, "ERROR in createArrayDesc\n"); *rc = -1; return; } addr = cc.getArrayBaseAddress(dv_local, *rank); if (addr == 0) { fprintf(stderr, "ERROR in getArrayBaseAddress rank=%d\n",*rank); *rc = -1; return; } _array_free(addr); } static long Index(int rank, int subscript[], int lo[], int extent[]) { long idx = 0, i, factor=1; for(i=0;ielemsize; ad_src_rank = ad_dst->rank; for (i=0;ilo, ad_src_lo, ad_src_extent)*ad_src_elemsize + (char*) addr_src; ptr_dst= Index(ad_dst->rank, dst_slc->lo, ad_dst->lo, ad_dst->extent)*ad_dst->elemsize + (char*) ad_dst->aptr[*proc]; /* The following attempts to deal with non-unit stride. */ /* Seems like we assume that src_slc->hi[i] >= src_slc->lo[i] and stride[i] > 0 for all i. One might wish to modify that assumption at some point. Should we check that the patches are the same size, does ARMCI_Puts handle that? */ if (ad_dst->rank != ad_src_rank) { fprintf(stderr, "ARMCI_Put_farrays: ERROR ranks of src and dst do not match\n"); *rc = -1; return; } src_first_stride_eq_1 = 1; src_unit_stride = 1; for(i=0; i< ad_src_rank; i++) { if (src_slc->stride[i] > 1) { if (i == 0) { src_first_stride_eq_1 = 0; } src_unit_stride = 0; src_count[i] = (int)((src_slc->hi[i] -src_slc->lo[i]+src_slc->stride[i])/src_slc->stride[i]); } else { src_count[i] = src_slc->hi[i] -src_slc->lo[i]+1; } } dst_first_stride_eq_1 = 1; dst_unit_stride = 1; for(i=0; i< ad_dst->rank; i++) { if (dst_slc->stride[i] > 1) { if (i == 0) { dst_first_stride_eq_1 = 0; } dst_unit_stride = 0; dst_count[i] = (int)((dst_slc->hi[i] -dst_slc->lo[i]+dst_slc->stride[i])/dst_slc->stride[i]); } else { dst_count[i] = dst_slc->hi[i] -dst_slc->lo[i]+1; } } /* Might want to check that src_count and dst_count match here?, perhaps that happens in ARMC_PutS but I think not. */ for (i=0;istride[i+1]; } src_count[0] *= ad_src_elemsize; } else { /* If first dimension strides are both 1, then we can till use ad_src->rank-1 levels. Just the strides need changing. */ if ((src_first_stride_eq_1 != 0) && (dst_first_stride_eq_1 != 0)) { mv_rank = ad_src_rank-1; src_count[0] *= ad_src_elemsize; for (i=0; i< mv_rank; i++) { src_stride[i] = ad_src_stride[i+1]*src_slc->stride[i+1]; } for (i=0; i< mv_rank; i++) { dst_stride[i] = ad_dst->stride[i+1]*dst_slc->stride[i+1]; } } else { mv_rank = ad_src_rank; /* Shift counts, right, set count[0] to elemsize. */ for (i=mv_rank;i>0;i--) { src_count[i] = src_count[i-1]; } src_count[0] = ad_src_elemsize; /* Adjust strides. */ for (i=0;istride[i]; } for (i=0;istride[i]*dst_slc->stride[i]; } } } #if 0 printf(" ARMCI_Put_farrays(src): lo = %d hi = %d stride = %d\n", src_slc->lo[0], src_slc->hi[0], src_slc->stride[0]); printf(" ARMCI_Put_farrays(dst): lo = %d hi = %d stride = %d on proc = %d\n", dst_slc->lo[0], dst_slc->hi[0], dst_slc->stride[0], *proc); #endif /* ARMCI_PutS(ptr_src, ad_src->stride+1, ptr_dst, ad_dst->stride+1, count, ad_src->rank-1, *proc); */ ARMCI_PutS(ptr_src, src_stride, ptr_dst, dst_stride, src_count, mv_rank, *proc); } ARMCI_NbPut_farrays(void* dv_src, array_slice_t* src_slc, void* dv_dst, array_slice_t* dst_slc, int* proc, int* rank, int* rc, void* dv_h_src, void* dv_h_dst) { void *addr_src, *addr_dst, *dv_l_src, *dv_l_dst; armci_arr_dsc_t *ad_dst,*ad_src; void *ptr_src, *ptr_dst; int i; int src_count[MAXDIM+1]; int dst_count[MAXDIM+1]; int src_stride[MAXDIM]; int dst_stride[MAXDIM]; int src_unit_stride, src_first_stride_eq_1; int dst_unit_stride, dst_first_stride_eq_1; int mv_rank; int ad_src_rank; int ad_src_elemsize; int ad_src_lo[MAXDIM]; int ad_src_extent[MAXDIM]; int ad_src_stride[MAXDIM]; *rc = 0; dv_l_src = cc.createArrayDesc(dv_src, dv_h_src, *rank, F90_ArrayPointer); if (dv_l_src == 0) { fprintf(stderr, "nb_ARMCI_Put_farrays: ERROR in createArrayDesc\n"); *rc = -1; return; } addr_src = cc.getArrayBaseAddress(dv_l_src, *rank); if (addr_src == 0) { fprintf(stderr, "%d:nb_ARMCI_Put_farrays: ERROR in getArrayBaseAddress src %d\n",armci_me,*rank); *rc = -1; return; } dv_l_dst = cc.createArrayDesc(dv_dst, dv_h_dst, *rank, F90_ArrayPointer); if (dv_l_dst == 0) { fprintf(stderr, "nb_ARMCI_Put_farrays: ERROR in createArrayDesc\n"); *rc = -1; return; } addr_dst = cc.getArrayBaseAddress(dv_l_dst, *rank); if (addr_dst == 0) { fprintf(stderr, "%d:nb_ARMCI_Put_farrays: ERROR in getArrayBaseAddress dst %d\n",armci_me,*rank); *rc = -1; return; } #if 0 assert(addr_src = g_save_addr); assert(addr_dst = g_save_addr); #endif /* ad_src = GET_ARR_DSC_FROM_ARRAY(addr_src); Need to replace ad_src_rank, ad_src_lo, ad_src_extent, ad_src_stride, and ad_src_elemsize with local stuff from the chasm interface. No way to get elemsize from chasm stuff, so for now take src_elemsize to be the same as dst_elemsize. */ ad_dst = GET_ARR_DSC_FROM_ARRAY(addr_dst); ad_src_elemsize = ad_dst->elemsize; ad_src_rank = ad_dst->rank; for (i=0;ilo, ad_src_lo, ad_src_extent)*ad_src_elemsize + (char*) addr_src; ptr_dst= Index(ad_dst->rank, dst_slc->lo, ad_dst->lo, ad_dst->extent)*ad_dst->elemsize + (char*) ad_dst->aptr[*proc]; /* The following attempts to deal with non-unit stride. */ /* Seems like we assume that src_slc->hi[i] >= src_slc->lo[i] and stride[i] > 0 for all i. One might wish to modify that assumption at some point. Should we check that the patches are the same size, does ARMCI_Puts handle that? */ if (ad_dst->rank != ad_src_rank) { fprintf(stderr, "nb_ARMCI_Put_farrays: ERROR ranks of src and dst do not match\n"); *rc = -1; return; } src_first_stride_eq_1 = 1; src_unit_stride = 1; for(i=0; i< ad_src_rank; i++) { if (src_slc->stride[i] > 1) { if (i == 0) { src_first_stride_eq_1 = 0; } src_unit_stride = 0; src_count[i] = (int)((src_slc->hi[i] -src_slc->lo[i]+src_slc->stride[i])/src_slc->stride[i]); } else { src_count[i] = src_slc->hi[i] -src_slc->lo[i]+1; } } dst_first_stride_eq_1 = 1; dst_unit_stride = 1; for(i=0; i< ad_dst->rank; i++) { if (dst_slc->stride[i] > 1) { if (i == 0) { dst_first_stride_eq_1 = 0; } dst_unit_stride = 0; dst_count[i] = (int)((dst_slc->hi[i] -dst_slc->lo[i]+dst_slc->stride[i])/dst_slc->stride[i]); } else { dst_count[i] = dst_slc->hi[i] -dst_slc->lo[i]+1; } } /* Might want to check that src_count and dst_count match here?, * perhaps that happens in ARMC_PutS but I think not. * */ for (i=0;istride[i+1]; } src_count[0] *= ad_src_elemsize; } else { /* If first dimension strides are both 1, then we * can till use ad_src->rank-1 levels. Just * the strides need changing. * */ if ((src_first_stride_eq_1 != 0) && (dst_first_stride_eq_1 != 0)) { mv_rank = ad_src_rank-1; src_count[0] *= ad_src_elemsize; for (i=0; i< mv_rank; i++) { src_stride[i] = ad_src_stride[i+1]*src_slc->stride[i+1]; } for (i=0; i< mv_rank; i++) { dst_stride[i] = ad_dst->stride[i+1]*dst_slc->stride[i+1]; } } else { mv_rank = ad_src_rank; /* Shift counts, right, set count[0] to elemsize. */ for (i=mv_rank;i>0;i--) { src_count[i] = src_count[i-1]; } src_count[0] = ad_src_elemsize; /* Adjust strides. */ for (i=0;istride[i]; } for (i=0;istride[i]*dst_slc->stride[i]; } } } #if 0 printf(" nb_ARMCI_Put_farrays(src): lo = %d hi = %d stride = %d\n", src_slc->lo[0], src_slc->hi[0], src_slc->stride[0]); printf(" nb_ARMCI_Put_farrays(dst): lo = %d hi = %d stride = %d on proc = %d\n", dst_slc->lo[0], dst_slc->hi[0], dst_slc->stride[0], *proc); #endif /* * ARMCI_PutS(ptr_src, ad_src->stride+1, ptr_dst, ad_dst->stride+1, count, ad_src->rank-1, *proc); * */ ARMCI_NbPutS(ptr_src, src_stride, ptr_dst, dst_stride, src_count, mv_rank, *proc,NULL); } void ARMCI_Get_farrays(void* dv_src, array_slice_t* src_slc, void* dv_dst, array_slice_t* dst_slc, int* proc, int* rank, int* rc, void* dv_h_src, void* dv_h_dst) { void *addr_src, *addr_dst, *dv_l_src, *dv_l_dst; armci_arr_dsc_t *ad_src, *ad_dst; void *ptr_src, *ptr_dst; int i; int src_count[MAXDIM+1]; int dst_count[MAXDIM+1]; int src_stride[MAXDIM]; int dst_stride[MAXDIM]; int src_unit_stride, src_first_stride_eq_1; int dst_unit_stride, dst_first_stride_eq_1; int mv_rank; int ad_dst_rank; int ad_dst_elemsize; int ad_dst_lo[MAXDIM]; int ad_dst_extent[MAXDIM]; int ad_dst_stride[MAXDIM]; *rc = 0; #ifdef HIDDEN_DESC dv_l_src = cc.createArrayDesc(dv_src, dv_h_src, *rank, F90_ArrayPointer); #else dv_l_src = dv_src; #endif if (dv_l_src == 0) { fprintf(stderr, "ARMCI_Get_farrays: ERROR in createArrayDesc\n"); *rc = -1; return; } addr_src = cc.getArrayBaseAddress(dv_l_src, *rank); if (addr_src == 0) { fprintf(stderr, "ARMCI_Get_farrays: ERROR in getArrayBaseAddress\n"); *rc = -1; return; } #ifdef HIDDEN_DESC dv_l_dst = cc.createArrayDesc(dv_dst, dv_h_dst, *rank, F90_ArrayPointer); #else dv_l_dst = dv_dst; #endif if (dv_l_dst == 0) { fprintf(stderr, "ARMCI_Get_farrays: ERROR in createArrayDesc\n"); *rc = -1; return; } addr_dst = cc.getArrayBaseAddress(dv_l_dst, *rank); if (addr_dst == 0) { fprintf(stderr, "ARMCI_Get_farrays: ERROR in getArrayBaseAddress\n"); *rc = -1; return; } #if 0 assert(addr_src = g_save_addr); assert(addr_dst = g_save_addr); #endif ad_src = GET_ARR_DSC_FROM_ARRAY(addr_src); /* ad_dst = GET_ARR_DSC_FROM_ARRAY(addr_dst); */ ad_dst_elemsize = ad_src->elemsize; ad_dst_rank = ad_src->rank; for (i=0;irank, src_slc->lo, ad_src->lo, ad_src->extent)*ad_src->elemsize + (char*) ad_src->aptr[*proc]; ptr_dst= Index(ad_dst_rank, dst_slc->lo, ad_dst_lo, ad_dst_extent)*ad_dst_elemsize + (char*) addr_dst; /* The following attempts to deal with non-unit stride. */ /* Seems like we assume that src_slc->hi[i] >= src_slc->lo[i] and stride[i] > 0 for all i. One might wish to modify that assumption at some point. Should we check that the patches are the same size, does ARMCI_Gets handle that? */ if (ad_dst_rank != ad_src->rank) { fprintf(stderr, "ARMCI_Get_farrays: ERROR ranks of src and dst do not match\n"); *rc = -1; return; } src_first_stride_eq_1 = 1; src_unit_stride = 1; for(i=0; i< ad_src->rank; i++) { if (src_slc->stride[i] > 1) { if (i == 0) { src_first_stride_eq_1 = 0; } src_unit_stride = 0; src_count[i] = (int)((src_slc->hi[i] -src_slc->lo[i]+src_slc->stride[i])/src_slc->stride[i]); } else { src_count[i] = src_slc->hi[i] -src_slc->lo[i]+1; } } dst_first_stride_eq_1 = 1; dst_unit_stride = 1; for(i=0; i< ad_dst_rank; i++) { if (dst_slc->stride[i] > 1) { if (i == 0) { dst_first_stride_eq_1 = 0; } dst_unit_stride = 0; dst_count[i] = (int)((dst_slc->hi[i] -dst_slc->lo[i]+dst_slc->stride[i])/dst_slc->stride[i]); } else { dst_count[i] = dst_slc->hi[i] -dst_slc->lo[i]+1; } } /* Might want to check that src_count and dst_count match here?, perhaps that happens in ARMC_PutS but I think not. */ for (i=0;irank;i++) { if (dst_count[i] != src_count[i]) { fprintf(stderr, "ARMCI_Get_farrays: ERROR counts of src and dst slices do not match\n"); *rc = -1; return; } } if ((src_unit_stride != 0) && (dst_unit_stride != 0)) { mv_rank = ad_src->rank-1; for (i=0; istride[i+1]; } for (i=0; ielemsize; } else { /* If first dimension strides are both 1, then we can till use ad_src->rank-1 levels. Just the strides need changing. */ if ((src_first_stride_eq_1 != 0) && (dst_first_stride_eq_1 != 0)) { mv_rank = ad_src->rank-1; src_count[0] *= ad_src->elemsize; for (i=0; i< mv_rank; i++) { src_stride[i] = ad_src->stride[i+1]*src_slc->stride[i+1]; } for (i=0; i< mv_rank; i++) { dst_stride[i] = ad_dst_stride[i+1]*dst_slc->stride[i+1]; } } else { mv_rank = ad_src->rank; /* Shift counts, right, set count[0] to elemsize. */ for (i=mv_rank;i>0;i--) { src_count[i] = src_count[i-1]; } src_count[0] = ad_src->elemsize; /* Adjust strides. */ for (i=0;istride[i]*src_slc->stride[i]; } for (i=0;istride[i]; } } } #if 0 printf(" ARMCI_Get_farrays(src): lo = %d hi = %d stride = %d\n", src_slc->lo[0], src_slc->hi[0], src_slc->stride[0]); printf(" ARMCI_Get_farrays(dst): lo = %d hi = %d stride = %d on proc = %d\n", dst_slc->lo[0], dst_slc->hi[0], dst_slc->stride[0], *proc); #endif /* ARMCI_GetS(ptr_src, ad_src->stride+1, ptr_dst, ad_dst->stride+1, count, ad_src->rank-1, *proc); */ ARMCI_GetS(ptr_src, src_stride, ptr_dst, dst_stride, src_count, mv_rank, *proc); } void ARMCI_NbGet_farrays(void* dv_src, array_slice_t* src_slc, void* dv_dst, array_slice_t* dst_slc, int* proc, int* rank, int* rc, void* dv_h_src, void* dv_h_dst) { void *addr_src, *addr_dst, *dv_l_src, *dv_l_dst; armci_arr_dsc_t *ad_src, *ad_dst; void *ptr_src, *ptr_dst; int i; int src_count[MAXDIM+1]; int dst_count[MAXDIM+1]; int src_stride[MAXDIM]; int dst_stride[MAXDIM]; int src_unit_stride, src_first_stride_eq_1; int dst_unit_stride, dst_first_stride_eq_1; int mv_rank; int ad_dst_rank; int ad_dst_elemsize; int ad_dst_lo[MAXDIM]; int ad_dst_extent[MAXDIM]; int ad_dst_stride[MAXDIM]; *rc = 0; dv_l_src = cc.createArrayDesc(dv_src, dv_h_src, *rank, F90_ArrayPointer); if (dv_l_src == 0) { fprintf(stderr, "ARMCI_Get_farrays: ERROR in createArrayDesc\n"); *rc = -1; return; } addr_src = cc.getArrayBaseAddress(dv_l_src, *rank); if (addr_src == 0) { fprintf(stderr, "ARMCI_Get_farrays: ERROR in getArrayBaseAddress\n"); *rc = -1; return; } #if 0 assert(addr_src = g_save_addr); assert(addr_dst = g_save_addr); #endif ad_src = GET_ARR_DSC_FROM_ARRAY(addr_src); /* * ad_dst = GET_ARR_DSC_FROM_ARRAY(addr_dst); * */ ad_dst_elemsize = ad_src->elemsize; ad_dst_rank = ad_src->rank; for (i=0;irank, src_slc->lo, ad_src->lo, ad_src->extent)*ad_src->elemsize + (char*) ad_src->aptr[*proc]; ptr_dst= Index(ad_dst_rank, dst_slc->lo, ad_dst_lo, ad_dst_extent)*ad_dst_elemsize + (char*) addr_dst; /* The following attempts to deal with non-unit stride. */ /* Seems like we assume that src_slc->hi[i] >= src_slc->lo[i] and * stride[i] > 0 for all i. One might wish to modify that * assumption at some point. Should we check that the patches * are the same size, does ARMCI_Gets handle that? * */ if (ad_dst_rank != ad_src->rank) { fprintf(stderr, "ARMCI_Get_farrays: ERROR ranks of src and dst do not match\n"); *rc = -1; return; } src_first_stride_eq_1 = 1; src_unit_stride = 1; for(i=0; i< ad_src->rank; i++) { if (src_slc->stride[i] > 1) { if (i == 0) { src_first_stride_eq_1 = 0; } src_unit_stride = 0; src_count[i] = (int)((src_slc->hi[i] -src_slc->lo[i]+src_slc->stride[i])/src_slc->stride[i]); } else { src_count[i] = src_slc->hi[i] -src_slc->lo[i]+1; } } dst_first_stride_eq_1 = 1; dst_unit_stride = 1; for(i=0; i< ad_dst_rank; i++) { if (dst_slc->stride[i] > 1) { if (i == 0) { dst_first_stride_eq_1 = 0; } dst_unit_stride = 0; dst_count[i] = (int)((dst_slc->hi[i] -dst_slc->lo[i]+dst_slc->stride[i])/dst_slc->stride[i]); } else { dst_count[i] = dst_slc->hi[i] -dst_slc->lo[i]+1; } } /* Might want to check that src_count and dst_count match here?, * perhaps that happens in ARMC_PutS but I think not. * */ for (i=0;irank;i++) { if (dst_count[i] != src_count[i]) { fprintf(stderr, "ARMCI_Get_farrays: ERROR counts of src and dst slices do not match\n"); *rc = -1; return; } } if ((src_unit_stride != 0) && (dst_unit_stride != 0)) { mv_rank = ad_src->rank-1; for (i=0; istride[i+1]; } for (i=0; ielemsize; } else { /* If first dimension strides are both 1, then we can till use ad_src->rank-1 levels. Just the strides need changing. */ if ((src_first_stride_eq_1 != 0) && (dst_first_stride_eq_1 != 0)) { mv_rank = ad_src->rank-1; src_count[0] *= ad_src->elemsize; for (i=0; i< mv_rank; i++) { src_stride[i] = ad_src->stride[i+1]*src_slc->stride[i+1]; } for (i=0; i< mv_rank; i++) { dst_stride[i] = ad_dst_stride[i+1]*dst_slc->stride[i+1]; } } else { mv_rank = ad_src->rank; /* Shift counts, right, set count[0] to elemsize. */ for (i=mv_rank;i>0;i--) { src_count[i] = src_count[i-1]; } src_count[0] = ad_src->elemsize; /* Adjust strides. */ for (i=0;istride[i]*src_slc->stride[i]; } for (i=0;istride[i]; } } } #if 0 printf(" ARMCI_Get_farrays(src): lo = %d hi = %d stride = %d\n", src_slc->lo[0], src_slc->hi[0], src_slc->stride[0]); printf(" ARMCI_Get_farrays(dst): lo = %d hi = %d stride = %d on proc = %d\n", dst_slc->lo[0], dst_slc->hi[0], dst_slc->stride[0], *proc); #endif /* * ARMCI_GetS(ptr_src, ad_src->stride+1, ptr_dst, ad_dst->stride+1, count, ad_src->rank-1, *proc); */ ARMCI_NbGetS(ptr_src, src_stride, ptr_dst, dst_stride, src_count, mv_rank, *proc,NULL); } ga-5-3/armci/examples/0000750005473000001440000000000012275260546013515 5ustar d3n000usersga-5-3/armci/examples/simpleApps/0000750005473000001440000000000012275260546015632 5ustar d3n000usersga-5-3/armci/examples/simpleApps/transp1D-c.c0000640005473000001440000001455011643645222017714 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * transpose of 1-d array. * E,g: (1 2 3 4 5 6 7 8 9 10) => (10 9 8 7 6 5 4 3 2 1) */ #define TOTALELEMS 1007031 #if HAVE_STDIO_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_WINDOWS_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_ASSERT_H # include #endif #include #include "armci.h" #include "message.h" void VERIFY(void **b_ptr, int *dims, int *map) { int i, j, length, icnt, ichk, lmin, lmax; int *buf, *b; void *src_ptr, *dst_ptr; int me, nprocs; /* Find local processor ID and number of processors */ me = armci_msg_me(); nprocs = armci_msg_nproc(); /* Process 0 verifies that inversion is correct. Start by allocating buffer and guarantee that it is big enough */ length = (int)(((double)dims[0])/((double)nprocs)) + 1; buf = (int*)malloc(length*sizeof(int)); if (me == 0) { icnt = 0; ichk = 0; for (i=0; i= map[i]) { pmin = i; } else { break; } } pmax = nprocs-1; for (i=nprocs-2; i>=0; i--) { if (max < map[i+1]) { pmax = i; } else { break; } } /* Loop over processors that will receive data and copy inverted data to processors */ for (i=pmin; i<=pmax; i++) { /* Find min and max indices owned by processor i */ lmin = map[i]; if (i min) { cmin = lmin; } else { cmin = min; } if (lmax < max) { cmax = lmax; } else { cmax = max; } /* Find offsets on source and destination processors */ src_offset = cmin - min; src_ptr = (void*)(buf + src_offset); dst_offset = cmin - lmin; dst_ptr = ((char*)b_ptr[i]) + sizeof(int)*dst_offset; /* Find length of data (in bytes) to be sent to processor i */ length = sizeof(int)*(cmax-cmin+1); /* Send data to processor */ ARMCI_Put(src_ptr, dst_ptr, length, i); } ARMCI_AllFence(); armci_msg_barrier(); free(buf); VERIFY(b_ptr, dims, map); free(map); armci_msg_barrier(); ARMCI_Free(a_ptr[me]); ARMCI_Free(b_ptr[me]); free(a_ptr); free(b_ptr); } int main(int argc, char **argv) { /* int heap=300000, stack=300000; */ int me, nprocs; /* Step1: Initialize Message Passing library */ armci_msg_init(&argc, &argv); /* Step2: Initialize ARMCI */ ARMCI_Init(); /* Step3: Initialize Memory Allocator (MA) */ /*bjp if(! MA_init(C_DBL, stack, heap) ) ARMCI_Error("MA_init failed",stack+heap); */ me = armci_msg_me(); nprocs = armci_msg_nproc(); if(me==0) { printf("\nUsing %d processes\n\n", nprocs); fflush(stdout); } TRANSPOSE1D(); if(me==0)printf("\nTerminating ..\n"); ARMCI_Finalize(); armci_msg_finalize(); return(0); } ga-5-3/armci/examples/README0000640005473000001440000000140311423627743014374 0ustar d3n000usersARMCI EXAMPLES ~~~~~~~~~~~~~~ Introduction ============ The benchmarks directory has many ARMCI benchmarks. The features directory has examples and notes on each of the features listed below: 1. aggregation 2. gpc 3. non-blocking 4. proc_affinity 5. concurrency 6. notification 7. symmetric_memory Compiling ========= The examples directory is built by the top-level Makefile after a successful "configure" run. You can run "make checkprogs" to build the test programs and the example programs together, or "make examples" to build only the example programs. Remember, run "make" from the top level, not from the testing or examples directories! Execution ========= Any example that expects an input also has a README in its directory explaining how to use it. ga-5-3/armci/examples/benchmarks/0000750005473000001440000000000012275260546015632 5ustar d3n000usersga-5-3/armci/examples/benchmarks/lu/0000750005473000001440000000000012275260545016251 5ustar d3n000usersga-5-3/armci/examples/benchmarks/lu/pthreads/0000750005473000001440000000000012275260545020063 5ustar d3n000usersga-5-3/armci/examples/benchmarks/lu/pthreads/lu-thread.c0000640005473000001440000004673711633465620022134 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * Copyright (c) 1999 Pacific Northwest National Laboratory * All rights reserved. * * Author: Jialin Ju Account, PNNL * NAME * lu-thread.c * PURPOSE * Thread version of lu factorization * NOTES * * HISTORY * jju - Apr 19, 1999: Created. */ #if HAVE_STDIO_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #include #include "barrier.h" #include "errors.h" #define MAXRAND 32767.0 #define DEFAULT_N 512 #define DEFAULT_P 1 #define DEFAULT_B 16 #define min(a,b) ((a) < (b) ? (a) : (b)) #define MAXTHR 16 barrier_t barrier; pthread_t thread[MAXTHR]; int global_id; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_attr_t attr; int num; /* timing functions */ extern void start_timer(void); extern double elapsed_time(void); extern double stop_time(void); int n = DEFAULT_N; /* The size of the matrix */ int P = DEFAULT_P; /* Number of processors */ int block_size = DEFAULT_B; /* Block dimension */ int nblocks; /* Number of blocks in each dimension */ int num_rows; /* Number of processors per row of processor grid */ int num_cols; /* Number of processors per col of processor grid */ double **a; /* a = lu; l and u both placed back in a */ double *rhs; int *proc_bytes; /* Bytes to malloc per processor to hold blocks of A*/ double **last_malloc; /* Starting point of last block of A */ int test_result = 0; /* Test result of factorization? */ int doprint = 0; /* Print out matrix values? */ int dostats = 0; /* Print out individual processor statistics? */ void *SlaveStart(); void OneSolve(int, int, double **, int, int); void lu0(double *,int, int); void bdiv(double *, double *, int, int, int, int); void bmodd(double *, double*, int, int, int, int); void bmod(double *, double *, double *, int, int, int, int, int, int); void daxpy(double *, double *, int, double); int BlockOwner(int, int); void lu(int, int, int, int); void InitA(double *); double TouchA(int, int); void PrintA(); void CheckResult(int, double **, double *); void printerr(char *); int main(int argc, char **argv) { int i, j; int ch; int MyNum=0; int proc_num; int edge; int size; int status; while ((ch = getopt(argc, argv, "n:p:b:toh")) != -1) { switch(ch) { case 'n': n = atoi(optarg); break; case 'p': P = atoi(optarg); break; case 'b': block_size = atoi(optarg); break; case 't': test_result = !test_result; break; case 'o': doprint = !doprint; break; case 'h': printf("Usage: LU \n\n"); printf("options:\n"); printf(" -nN : Decompose NxN matrix.\n"); printf(" -pP : P = number of processors.\n"); printf(" -bB : Use a block size of B.\n"); printf(" -t : Test output.\n"); printf(" -o : Print out matrix values.\n"); printf(" -h : Print out command line options.\n\n"); printf("Default: LU -n%1d -p%1d -b%1d\n", DEFAULT_N,DEFAULT_P,DEFAULT_B); exit(0); break; } } printf("\n"); printf("Blocked Dense LU Factorization\n"); printf(" %d by %d Matrix\n",n,n); printf(" %d Processors\n",P); printf(" %d by %d Element Blocks\n",block_size,block_size); printf("\n"); printf("\n"); num_rows = (int) sqrt((double) P); for (;;) { num_cols = P/num_rows; if (num_rows*num_cols == P) break; num_rows--; } nblocks = n/block_size; if (block_size * nblocks != n) { nblocks++; } num = (nblocks * nblocks)/P; if((num * P) != (nblocks * nblocks)) num++; edge = n%block_size; if (edge == 0) { edge = block_size; } proc_bytes = (int *) malloc(P*sizeof(int)); last_malloc = (double **) malloc(P*sizeof(double *)); for (i=0;iidlock); */ global_id = 0; pthread_attr_init(&attr); pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); for (i=1; iidlock) */ status = pthread_mutex_lock(&mutex); if(status != 0) err_abort(status, "Lock mutex"); MyNum = global_id; global_id ++; /* UNLOCK(Global->idlock) */ status = pthread_mutex_unlock(&mutex); if(status != 0) err_abort(status, "Unlock mutex"); /* printf("binging..\n"); bindprocessor(BINDTHREAD, pthread_self(), MyNum); printf("binging in %d \n", sysconf(_SC_NPROCESSORS_CONF)); */ /* POSSIBLE ENHANCEMENT: Here is where one might pin processes to processors to avoid migration */ OneSolve(n, block_size, a, MyNum, dostats); return NULL; } void OneSolve(n, block_size, a, MyNum, dostats) double **a; int n; int block_size; int MyNum; int dostats; { int status; /* barrier to ensure all initialization is done */ /* BARRIER(Global->start, P); */ status = barrier_wait (&barrier); if (status > 0) err_abort (status, "Wait on barrier"); /* to remove cold-start misses, all processors touch their own data */ TouchA(block_size, MyNum); /* BARRIER(Global->start, P);*/ status = barrier_wait (&barrier); if (status > 0) err_abort (status, "Wait on barrier"); /* Starting the timer */ if(MyNum == 0) start_timer(); lu(n, block_size, MyNum, dostats); /* BARRIER(Global->start, P); */ status = barrier_wait (&barrier); if (status > 0) err_abort (status, "Wait on barrier"); /* Timer Stops here */ if(MyNum == 0) printf("\nRunning time = %f milliseconds.\n\n", elapsed_time()); } void lu0(a, n, stride) double *a; int n; int stride; { int j; int k; /*int length;*/ double alpha; for (k=0; k n) { kl = n; strK = kl - k; } else { strK = bs; } #ifdef DEBUG printf("k = %d, before factorization\n", k); PrintA(); #endif /* factor diagonal block */ diagowner = BlockOwner(K, K); if (diagowner == MyNum) { A = a[K+K*nblocks]; lu0(A, strK, strK); } #ifdef DEBUG printf("k = %d, after factorization\n", k); PrintA(); #endif /* BARRIER(Global->start, P); */ status = barrier_wait (&barrier); if (status > 0) err_abort (status, "Wait on barrier"); /* divide column k by diagonal block */ D = a[K+K*nblocks]; for (i=kl, I=K+1; i n) { il = n; strI = il - i; } else { strI = bs; } A = a[I+K*nblocks]; bdiv(A, D, strI, strK, strI, strK); } } #ifdef DEBUG printf("k = %d, after divide column k by diagonal block\n", k); PrintA(); #endif /* modify row k by diagonal block */ for (j=kl, J=K+1; j n) { jl = n; strJ = jl - j; } else { strJ = bs; } A = a[K+J*nblocks]; bmodd(D, A, strK, strJ, strK, strK); } } #ifdef DEBUG printf("k = %d, after modify row k by diagonal block\n", k); PrintA(); #endif /* BARRIER(Global->start, P); */ status = barrier_wait (&barrier); if (status > 0) err_abort (status, "Wait on barrier"); /* modify subsequent block columns */ for (i=kl, I=K+1; i n) { il = n; strI = il - i; } else { strI = bs; } /*colowner = BlockOwner(I,K);*/ A = a[I+K*nblocks]; for (j=kl, J=K+1; j n) { jl = n; strJ= jl - j; } else { strJ = bs; } if (BlockOwner(I, J) == MyNum) { /* parcel out blocks */ B = a[K+J*nblocks]; C = a[I+J*nblocks]; bmod(A, B, C, strI, strJ, strK, strI, strK, strI); } } } #ifdef DEBUG printf("k = %d, after modify subsequent block columns\n", k); PrintA(); #endif } } void InitA(rhs) double *rhs; { int i, j; int ii, jj; int edge; int ibs; int jbs, skip; srand48((long) 1); edge = n%block_size; for (j=0; j=0; j--) { for (i=0; i 0.00001) { bogus = 1; max_diff = diff; } } if (bogus) { printf("TEST FAILED: (%.5f diff)\n", max_diff); } else { printf("TEST PASSED\n"); } free(y); } void printerr(s) char *s; { fprintf(stderr,"ERROR: %s\n",s); } ga-5-3/armci/examples/benchmarks/lu/pthreads/barrier.h0000640005473000001440000000252111300316052021642 0ustar d3n000users/** @file barrier.h * * This header file describes the "barrier" synchronization * construct. The type barrier_t describes the full state of the * barrier including the POSIX 1003.1c synchronization objects * necessary. * * A barrier causes threads to wait until a set of threads has * all "reached" the barrier. The number of threads required is * set when the barrier is initialized, and cannot be changed * except by reinitializing. */ #include /** * Structure describing a barrier. */ typedef struct barrier_tag { pthread_mutex_t mutex; /**< Control access to barrier */ pthread_cond_t cv; /**< wait for barrier */ int valid; /**< set when valid */ int threshold; /**< number of threads required */ int counter; /**< current number of threads */ int cycle; /**< alternate wait cycles (0 or 1) */ } barrier_t; #define BARRIER_VALID 0xdbcafe /** * Support static initialization of barriers */ #define BARRIER_INITIALIZER(cnt) \ {PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, \ BARRIER_VALID, cnt, cnt, 0} /** * Define barrier functions */ extern int barrier_init (barrier_t *barrier, int count); extern int barrier_destroy (barrier_t *barrier); extern int barrier_wait (barrier_t *barrier); ga-5-3/armci/examples/benchmarks/lu/pthreads/errors.h0000640005473000001440000000303511300316052021531 0ustar d3n000users#ifndef __errors_h #define __errors_h #if HAVE_UNISTD_H # include #endif #if HAVE_ERRNO_H # include #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif /** * Define a macro that can be used for diagnostic output from * examples. When compiled -DDEBUG, it results in calling printf * with the specified argument list. When DEBUG is not defined, it * expands to nothing. */ #ifdef DEBUG # define DPRINTF(arg) printf arg #else # define DPRINTF(arg) #endif /** * NOTE: the "do {" ... "} while (0);" bracketing around the macros * allows the err_abort and errno_abort macros to be used as if they * were function calls, even in contexts where a trailing ";" would * generate a null statement. For example, * * if (status != 0) * err_abort (status, "message"); * else * return status; * * will not compile if err_abort is a macro ending with "}", because * C does not expect a ";" to follow the "}". Because C does expect * a ";" following the ")" in the do...while construct, err_abort and * errno_abort can be used as if they were function calls. */ #define err_abort(code,text) do { \ fprintf (stderr, "%s at \"%s\":%d: %s\n", \ text, __FILE__, __LINE__, strerror (code)); \ abort (); \ } while (0) #define errno_abort(text) do { \ fprintf (stderr, "%s at \"%s\":%d: %s\n", \ text, __FILE__, __LINE__, strerror (errno)); \ abort (); \ } while (0) #endif ga-5-3/armci/examples/benchmarks/lu/pthreads/barrier.c0000640005473000001440000001037711300316052021645 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file barrier.c * * This file implements the "barrier" synchronization construct. * * A barrier causes threads to wait until a set of threads has * all "reached" the barrier. The number of threads required is * set when the barrier is initialized, and cannot be changed * except by reinitializing. * * The barrier_init() and barrier_destroy() functions, * respectively, allow you to initialize and destroy the * barrier. * * The barrier_wait() function allows a thread to wait for a * barrier to be completed. One thread (the one that happens to * arrive last) will return from barrier_wait() with the status * -1 on success -- others will return with 0. The special * status makes it easy for the calling code to cause one thread * to do something in a serial region before entering another * parallel section of code. */ #include #include "errors.h" #include "barrier.h" /** * Initialize a barrier for use. */ int barrier_init (barrier_t *barrier, int count) { int status; barrier->threshold = barrier->counter = count; barrier->cycle = 0; status = pthread_mutex_init (&barrier->mutex, NULL); if (status != 0) return status; status = pthread_cond_init (&barrier->cv, NULL); if (status != 0) { pthread_mutex_destroy (&barrier->mutex); return status; } barrier->valid = BARRIER_VALID; return 0; } /** * Destroy a barrier when done using it. */ int barrier_destroy (barrier_t *barrier) { int status, status2; if (barrier->valid != BARRIER_VALID) return EINVAL; status = pthread_mutex_lock (&barrier->mutex); if (status != 0) return status; /* * Check whether any threads are known to be waiting; report * "BUSY" if so. */ if (barrier->counter != barrier->threshold) { pthread_mutex_unlock (&barrier->mutex); return EBUSY; } barrier->valid = 0; status = pthread_mutex_unlock (&barrier->mutex); if (status != 0) return status; /* * If unable to destroy either 1003.1c synchronization * object, return the error status. */ status = pthread_mutex_destroy (&barrier->mutex); status2 = pthread_cond_destroy (&barrier->cv); return (status == 0 ? status : status2); } /** * Wait for all members of a barrier to reach the barrier. When * the count (of remaining members) reaches 0, broadcast to wake * all threads waiting. */ int barrier_wait (barrier_t *barrier) { int status, cancel, tmp, cycle; if (barrier->valid != BARRIER_VALID) return EINVAL; status = pthread_mutex_lock (&barrier->mutex); if (status != 0) return status; cycle = barrier->cycle; /* Remember which cycle we're on */ if (--barrier->counter == 0) { barrier->cycle = !barrier->cycle; barrier->counter = barrier->threshold; status = pthread_cond_broadcast (&barrier->cv); /* * The last thread into the barrier will return status * -1 rather than 0, so that it can be used to perform * some special serial code following the barrier. */ if (status == 0) status = -1; } else { /* * Wait with cancellation disabled, because barrier_wait * should not be a cancellation point. */ pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &cancel); /* * Wait until the barrier's cycle changes, which means * that it has been broadcast, and we don't want to wait * anymore. */ while (cycle == barrier->cycle) { status = pthread_cond_wait ( &barrier->cv, &barrier->mutex); if (status != 0) break; } pthread_setcancelstate (cancel, &tmp); } /* * Ignore an error in unlocking. It shouldn't happen, and * reporting it here would be misleading -- the barrier wait * completed, after all, whereas returning, for example, * EINVAL would imply the wait had failed. The next attempt * to use the barrier *will* return an error, or hang, due * to whatever happened to the mutex. */ pthread_mutex_unlock (&barrier->mutex); return status; /* error, -1 for waker, or 0 */ } ga-5-3/armci/examples/benchmarks/lu/pthreads/timing.c0000640005473000001440000000235411316500271021507 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * Copyright (c) 1995 by PDCL Corporation. All Rights Reserved. * * NAME * timing.c * PURPOSE * Timing routines for calculating the execution time: * void start_timer(void); Set the timer. * double elapsed_time(void); Return the timing elapsed since * the timer has been set. * NOTES * Jialin Ju - Oct 16, 1995 Created. */ #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_ERRNO_H # include #endif #if HAVE_SYS_TIME_H # include #endif /** Timing routines that use standard Unix gettingofday() */ static struct timezone tz; static struct timeval start_time, finish_time; /** Start measuring a time delay */ void start_timer(void) { gettimeofday( &start_time, &tz); } /** Retunrn elapsed time in milliseconds */ double elapsed_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*(finish_time.tv_sec - start_time.tv_sec) + (finish_time.tv_usec - start_time.tv_usec)/1000.0 ); } /** Return the stopping time in milliseconds */ double stop_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*finish_time.tv_sec + finish_time.tv_usec/1000.0); } ga-5-3/armci/examples/benchmarks/lu/armci_multithreaded/0000750005473000001440000000000012275260545022257 5ustar d3n000usersga-5-3/armci/examples/benchmarks/lu/armci_multithreaded/lu-block-th-nbget.c0000640005473000001440000005077011643645222025650 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /************************************************** * LU factorization * * Armci Version * * Block distribution * * Multi-threaded * **************************************************/ #define DEBUG #define DEBUG1_ #define DEBUG2_ #define DEBUG3_ #define USE_MUTEX_ #if HAVE_STDIO_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STDARG_H # include #endif #include "armci.h" #include "utils.h" #include "message.h" #define MAXRAND 32767.0 #define DEFAULT_N 8 #define DEFAULT_B 2 #define MAX_THREADS 8 /* global variables */ int n = DEFAULT_N; /* The size of the matrix */ int block_size = DEFAULT_B;/* Block dimension */ int nblocks; /* Number of blocks in each dimension */ int num_rows; /* Number of processors per row of processor grid */ int num_cols; /* Number of processors per col of processor grid */ double **a; /* a = lu; l and u both placed back in a */ int nproc, th_per_p = 1, nthreads, me = 0, me_th[MAX_THREADS]; thread_t threads[MAX_THREADS]; int proc_bytes, thread_doubles[MAX_THREADS]; int num; int doprint = 1; int d = 0; /* delay */ thread_lock_t mutex; FILE *rep[MAX_THREADS]; char fname[] = "threadXX.log"; void report(int th_idx, char *fmt, ...) { #ifdef DEBUG3 va_list ap; va_start(ap, fmt); vfprintf(rep[th_idx], fmt, ap); va_end(ap); #endif } /* function declaration */ void *lu(void *); void lu0(double *,int, int); void bdiv(double *, double *, int, int, int, int); void bmodd(double *, double*, int, int, int, int); void bmod(double *, double *, double *, int, int, int, int, int, int); void daxpy(double *, double *, int, double); int block_owner(int, int); void init_array(); double touch_array(int, int); void print_array(int); void print_block_dbg(double *, const char *, int, int, int); void prefetch(double **A, double *buf, int I, int J, int th_idx, armci_hdl_t **hdlp); void get_remote(double *buf, int I, int J, armci_hdl_t **hdlp); int next_block(int th_idx, int bs, int kl, int ci, int cj, int cI, int cJ, int K, int *pI, int *pJ); /* timing functions */ extern void start_timer(void); extern double elapsed_time(void); extern double stop_time(void); main(int argc, char *argv[]) { int i, j, l; int ch; extern char *optarg; int edge; int size; int lu_arg[MAX_THREADS][3]; /* ARMCI */ void **ptr; double **ptr_loc; THREAD_LOCK_INIT(mutex); armci_msg_init(&argc,&argv); nproc = armci_msg_nproc(); me = armci_msg_me(); while ((ch = getopt(argc, argv, "n:b:p:t:d:h")) != -1) { switch(ch) { case 'n': n = atoi(optarg); break; case 'b': block_size = atoi(optarg); break; case 'p': nproc = atoi(optarg); break; case 't': th_per_p = atoi(optarg); break; case 'd': d = atoi(optarg); break; case 'h': { printf("Usage: LU, or \n"); printf(" LU -nMATRIXSIZE -bBLOCKSIZE -pNPROC -tTH_PER_P\n"); armci_msg_barrier(); armci_msg_finalize(); exit(0); } } } if(th_per_p>MAX_THREADS) { th_per_p=MAX_THREADS; if(me==0)printf("Warning: cannot run more than %d threads, adjust MAX_THREADS",MAX_THREADS); } if (d) { fprintf(stderr, "%d: %d\n", me, getpid()); sleep(d); } nthreads = th_per_p * nproc; if(me == 0) { printf("\n Blocked Dense LU Factorization\n"); printf(" %d by %d Matrix\n", n, n); printf(" %d Processors\n", nproc); printf(" %d thread(s) per processor, %d threads total\n", th_per_p, nthreads); printf(" %d by %d Element Blocks\n", block_size, block_size); printf("\n"); } num_rows = (int) sqrt((double) nthreads); for (;;) { num_cols = nthreads/num_rows; if (num_rows*num_cols == nthreads) break; num_rows--; } nblocks = n/block_size; if (block_size * nblocks != n) { nblocks++; } num = (nblocks * nblocks)/nthreads; if((num * nthreads) != (nblocks * nblocks)) num++; edge = n%block_size; if (edge == 0) { edge = block_size; } #ifdef DEBUG if(me == 0) for (i=0;i n) { kl = n; strK = kl - k; } else { strK = bs; } /* factor diagonal block */ diagowner = block_owner(K, K); if (diagowner == me_th[th_idx]) { A = a[K+K*nblocks]; lu0(A, strK, strK); } MT_BARRIER(); /* divide column k by diagonal block */ if(block_owner(K, K) == me_th[th_idx]) D = a[K+K*nblocks]; else { D = buf1; hdl1p = NULL; get_remote(D, K, K, &hdl1p); } for (i=kl, I=K+1; i n) { il = n; strI = il - i; } else { strI = bs; } A = a[I+K*nblocks]; bdiv(A, D, strI, strK, strI, strK); } } /* modify row k by diagonal block */ for (j=kl, J=K+1; j n) { jl = n; strJ = jl - j; } else { strJ = bs; } A = a[K+J*nblocks]; bmodd(D, A, strK, strJ, strK, strK); } } MT_BARRIER(); /* prefetch (A1 and B1) */ AB = 0; /* 0 if using A1 and B1 (buf1 and buf2), 1 if A2 and B2 (buf3 and buf4) */ if (next_block(th_idx, bs, kl, kl, kl, K+1, K+1, K, &I, &J)) { report(th_idx, "ij: next %d,%d\n", I, J); /* next block to be computed (I,J) needs blocks A=(I,K) and J=(K,J) */ hdl1p = &hdl1; hdl2p = &hdl2; prefetch(&A1, buf1, I, K, th_idx, &hdl1p); prefetch(&B1, buf2, K, J, th_idx, &hdl2p); } else continue; /* modify subsequent block columns */ for (i=kl, I=K+1; i n) { il = n; strI = il - i; } else { strI = bs; } for (j=kl, J=K+1; j n) { jl = n; strJ= jl - j; } else { strJ = bs; } if (block_owner(I, J) == me_th[th_idx]) { /* parcel out blocks */ report(th_idx, "ij: real %d,%d\n", I, J); /* wait for previously prefetched */ A = AB ? A2 : A1; B = AB ? B2 : B1; /* actual wait */ if (hdl1p) ARMCI_Wait(hdl1p); if (hdl2p) ARMCI_Wait(hdl2p); /* prefetch next A and B */ if (next_block(th_idx, bs, kl, i, j+bs, I, J+1, K, &pI, &pJ)) { report(th_idx, "ij: next %d,%d\n", pI, pJ); hdl1p = &hdl1; hdl2p = &hdl2; if (AB) { /* prefetch into A2 and B2 */ prefetch(&A1, buf1, pI, K, th_idx, &hdl1p); prefetch(&B1, buf2, K, pJ, th_idx, &hdl2p); } else { /* prefetch into A1 and B1 */ prefetch(&A2, buf3, pI, K, th_idx, &hdl1p); prefetch(&B2, buf4, K, pJ, th_idx, &hdl2p); } AB = AB ? 0 : 1; } C = a[I+J*nblocks]; bmod(A, B, C, strI, strJ, strK, strI, strK, strI); } } } } free(buf1); free(buf2); free(buf3); free(buf4); } void prefetch(double **A, double *buf, int I, int J, int th_idx, armci_hdl_t **hdlp) { if (block_owner(I,J) == me_th[th_idx]) { *A = a[I+J*nblocks]; *hdlp = NULL; /* local should not ARMCI_Wait */ } else { *A = buf; get_remote(*A, I, J, hdlp); } } void get_remote(double *buf, int I, int J, armci_hdl_t **hdlp) { int proc_owner; int edge, size; #ifdef USE_MUTEX THREAD_LOCK(mutex); #endif proc_owner = block_owner(I, J) / th_per_p; edge = n%block_size; if (edge == 0) { edge = block_size; } if ((I == nblocks-1) && (J == nblocks-1)) { size = edge*edge; } else if ((I == nblocks-1) || (J == nblocks-1)) { size = edge*block_size; } else { size = block_size*block_size; } size = size * sizeof(double); if (proc_owner == me) { memcpy(buf, a[I+J*nblocks], size); *hdlp = NULL; /* local should not ARMCI_Wait */ } else if (*hdlp) ARMCI_NbGet(a[I+J*nblocks], buf, size, proc_owner, *hdlp); else ARMCI_Get(a[I+J*nblocks], buf, size, proc_owner); #ifdef USE_MUTEX THREAD_UNLOCK(mutex); #endif } /* returns 1 if there is another block on current processor to be computed for some K * returns 0 otherwise; location of the block is stored in pI, pJ */ int next_block(int th_idx, int bs, int kl, int ci, int cj, int cI, int cJ, int K, int *pI, int *pJ) { int i, j, I, J; j = cj; J = cJ; for (i=ci, I=cI; i #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #include "armci.h" #include "utils.h" #include "message.h" #define MAXRAND 32767.0 #define DEFAULT_N 8 #define DEFAULT_B 2 #define MAX_THREADS 8 /* global variables */ int n = DEFAULT_N; /* The size of the matrix */ int block_size = DEFAULT_B;/* Block dimension */ int nblocks; /* Number of blocks in each dimension */ int num_rows; /* Number of processors per row of processor grid */ int num_cols; /* Number of processors per col of processor grid */ double **a; /* a = lu; l and u both placed back in a */ int nproc, th_per_p = 1, nthreads, me = 0, me_th[MAX_THREADS]; thread_t threads[MAX_THREADS]; int proc_bytes, thread_doubles[MAX_THREADS]; int num; int doprint = 1; int d = 0; /* delay */ thread_lock_t mutex; /* function declaration */ void *lu(void *); void lu0(double *,int, int); void bdiv(double *, double *, int, int, int, int); void bmodd(double *, double*, int, int, int, int); void bmod(double *, double *, double *, int, int, int, int, int, int); void daxpy(double *, double *, int, double); int block_owner(int, int); void init_array(); double touch_array(int, int); void print_array(int); void print_block_dbg(double *, const char *, int, int, int); void get_remote(double *, int, int); /* timing functions */ extern void start_timer(void); extern double elapsed_time(void); extern double stop_time(void); main(int argc, char *argv[]) { int i, j, l; int ch; extern char *optarg; int edge; int size; int lu_arg[MAX_THREADS][3]; /* ARMCI */ void **ptr; double **ptr_loc; THREAD_LOCK_INIT(mutex); armci_msg_init(&argc,&argv); nproc = armci_msg_nproc(); me = armci_msg_me(); while ((ch = getopt(argc, argv, "n:b:p:t:d:h")) != -1) { switch(ch) { case 'n': n = atoi(optarg); break; case 'b': block_size = atoi(optarg); break; case 'p': nproc = atoi(optarg); break; case 't': th_per_p = atoi(optarg); break; case 'd': d = atoi(optarg); break; case 'h': { printf("Usage: LU, or \n"); printf(" LU -nMATRIXSIZE -bBLOCKSIZE -pNPROC -tTH_PER_P\n"); armci_msg_barrier(); armci_msg_finalize(); exit(0); } } } if(th_per_p>MAX_THREADS) { th_per_p=MAX_THREADS; if(me==0)printf("Warning: cannot run more than %d threads, adjust MAX_THREADS",MAX_THREADS); } if (d) { fprintf(stderr, "%d: %d\n", me, getpid()); sleep(d); } nthreads = th_per_p * nproc; if(me == 0) { printf("\n Blocked Dense LU Factorization\n"); printf(" %d by %d Matrix\n", n, n); printf(" %d Processors\n", nproc); printf(" %d thread(s) per processor, %d threads total\n", th_per_p, nthreads); printf(" %d by %d Element Blocks\n", block_size, block_size); printf("\n"); } num_rows = (int) sqrt((double) nthreads); for (;;) { num_cols = nthreads/num_rows; if (num_rows*num_cols == nthreads) break; num_rows--; } nblocks = n/block_size; if (block_size * nblocks != n) { nblocks++; } num = (nblocks * nblocks)/nthreads; if((num * nthreads) != (nblocks * nblocks)) num++; edge = n%block_size; if (edge == 0) { edge = block_size; } #ifdef DEBUG if(me == 0) for (i=0;i n) { kl = n; strK = kl - k; } else { strK = bs; } /* factor diagonal block */ diagowner = block_owner(K, K); if (diagowner == me_th[th_idx]) { A = a[K+K*nblocks]; print_block_dbg(A, "th=%d, idx=%d: before lu0 a[%d]:\n", me_th[th_idx], th_idx, K+K*nblocks); lu0(A, strK, strK); } MT_BARRIER(); /* divide column k by diagonal block */ if(block_owner(K, K) == me_th[th_idx]) D = a[K+K*nblocks]; else { D = buf1; get_remote(D, K, K); } for (i=kl, I=K+1; i n) { il = n; strI = il - i; } else { strI = bs; } A = a[I+K*nblocks]; bdiv(A, D, strI, strK, strI, strK); } } /* modify row k by diagonal block */ for (j=kl, J=K+1; j n) { jl = n; strJ = jl - j; } else { strJ = bs; } A = a[K+J*nblocks]; bmodd(D, A, strK, strJ, strK, strK); } } MT_BARRIER(); /* modify subsequent block columns */ for (i=kl, I=K+1; i n) { il = n; strI = il - i; } else { strI = bs; } if(block_owner(I,K) == me_th[th_idx]) A = a[I+K*nblocks]; else { A = buf1; get_remote(A, I, K); } for (j=kl, J=K+1; j n) { jl = n; strJ= jl - j; } else { strJ = bs; } if (block_owner(I, J) == me_th[th_idx]) { /* parcel out blocks */ if(block_owner(K,J) == me_th[th_idx]) B = a[K+J*nblocks]; else { B = buf2; get_remote(B, K, J); } C = a[I+J*nblocks]; bmod(A, B, C, strI, strJ, strK, strI, strK, strI); } } } } free(buf1); free(buf2); return lu_arg; } void get_remote(double *buf, int I, int J) { int proc_owner; int edge, size; #ifdef USE_MUTEX THREAD_LOCK(mutex); #endif proc_owner = block_owner(I, J) / th_per_p; edge = n%block_size; if (edge == 0) { edge = block_size; } if ((I == nblocks-1) && (J == nblocks-1)) { size = edge*edge; } else if ((I == nblocks-1) || (J == nblocks-1)) { size = edge*block_size; } else { size = block_size*block_size; } size = size * sizeof(double); if (proc_owner == me) memcpy(buf, a[I+J*nblocks], size); else ARMCI_Get(a[I+J*nblocks], buf, size, proc_owner); #ifdef USE_MUTEX THREAD_UNLOCK(mutex); #endif } void lu0(double *a, int n, int stride) { int j; int k; int length; double alpha; for (k=0; k #endif #if HAVE_SYS_ERRNO_H # include #endif #if HAVE_SYS_TIME_H # include #endif /** Timing routines that use standard Unix gettingofday() */ static struct timezone tz; static struct timeval start_time, finish_time; /** Start measuring a time delay */ void start_timer(void) { gettimeofday( &start_time, &tz); } /** Retunrn elapsed time in milliseconds */ double elapsed_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*(finish_time.tv_sec - start_time.tv_sec) + (finish_time.tv_usec - start_time.tv_usec)/1000.0 ); } /** Return the stopping time in milliseconds */ double stop_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*finish_time.tv_sec + finish_time.tv_usec/1000.0); } ga-5-3/armci/examples/benchmarks/lu/README0000640005473000001440000000020411423627743017127 0ustar d3n000usersThis directory contains example programs using ARMCI At present time, SPLASH-2 LU factorization on top of ARMCI is included (lu.c). ga-5-3/armci/examples/benchmarks/lu/armci_nonblocking/0000750005473000001440000000000012275260546021730 5ustar d3n000usersga-5-3/armci/examples/benchmarks/lu/armci_nonblocking/lu_nb_get.c0000640005473000001440000003575611643645222024047 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /************************************************** * LU factorization * * Armci Version * **************************************************/ /***************** Non-blocking Version Pre-GETing ******************/ #if HAVE_STDIO_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_STRING_H # include #endif #include "armci.h" #include "message.h" /* #define DEBUG */ #define MAXRAND 32767.0 #define DEFAULT_N 8 #define DEFAULT_B 2 #define MAXPROC 256 /* Maximum number of processors */ #define MAXBLOCK 2048 /* Maximum number of blocks in a row/column */ #define ANULL (armci_hdl_t *)NULL /* global variables */ int n = DEFAULT_N; /* The size of the matrix */ int block_size = DEFAULT_B;/* Block dimension */ int nblocks; /* Number of blocks in each dimension */ int num_rows; /* Number of processors per row of processor grid */ int num_cols; /* Number of processors per col of processor grid */ double **a; /* a = lu; l and u both placed back in a */ int nproc, me = 0; int proc_bytes; int doprint = 1; /* make it 1 to see the LU decomposition output */ /*funnction declaration */ void lu(int, int, int); void lu0(double *,int, int); void bdiv(double *, double *, int, int, int, int); void bmodd(double *, double*, int, int, int, int); void bmod(double *, double *, double *, int, int, int, int, int, int); void daxpy(double *, double *, int, double); int block_owner(int, int); void init_array(); double touch_array(int, int); void print_block(); void print_array(int); void get_remote(double *, int, int, armci_hdl_t *); /* timing functions */ extern void start_timer(void); extern double elapsed_time(void); extern double stop_time(void); int main(int argc, char *argv[]) { int i, j; int ch; int edge; int size; /* ARMCI */ void **ptr; double **ptr_loc; armci_msg_init(&argc,&argv); nproc = armci_msg_nproc(); me = armci_msg_me(); while ((ch = getopt(argc, argv, "n:b:p:h")) != -1) { switch(ch) { case 'n': n = atoi(optarg); break; case 'b': block_size = atoi(optarg); break; case 'p': nproc = atoi(optarg); break; case 'h': { printf("Usage: LU, or \n"); printf(" LU -nMATRIXSIZE -bBLOCKSIZE -pNPROC\n"); armci_msg_barrier(); armci_msg_finalize(); exit(0); } } } if(me == 0) { printf("\n Using pre_FETCHing \n"); printf("\n Blocked Dense LU Factorization\n"); printf(" %d by %d Matrix\n", n, n); printf(" %d Processors\n", nproc); printf(" %d by %d Element Blocks\n", block_size, block_size); printf("\n"); } num_rows = (int) sqrt((double) nproc); for (;;) { num_cols = nproc/num_rows; if (num_rows*num_cols == nproc) break; num_rows--; } nblocks = n/block_size; if (block_size * nblocks != n) { nblocks++; } edge = n%block_size; if (edge == 0) { edge = block_size; } #ifdef DEBUG if(me == 2) { for (i=0;i n) { kl = n; strK = kl - k; } else { strK = bs; } /* factor diagonal block */ diagowner = block_owner(K, K); if (diagowner == me) { A = a[K+K*nblocks]; lu0(A, strK, strK); } armci_msg_barrier(); /* divide column k by diagonal block */ if(block_owner(K, K) == me) D = a[K+K*nblocks]; else { D = dbuf; get_remote(D, K, K, NULL); } for (i=kl, I=K+1; i n) { il = n; strI = il - i; } else { strI = bs; } A = a[I+K*nblocks]; bdiv(A, D, strI, strK, strI, strK); } } /* modify row k by diagonal block */ for (j=kl, J=K+1; j n) { jl = n; strJ = jl - j; } else { strJ = bs; } A = a[K+J*nblocks]; bmodd(D, A, strK, strJ, strK, strK); } } armci_msg_barrier(); /* modify subsequent block columns */ t1 = t2 = 0; memset(br, 0, sizeof(br)); memset(bc, 0, sizeof(bc)); for (i=kl, I=K+1; i n) { il = n; strI = il - i; } else { strI = bs; } for (j=kl, J=K+1; j n) { jl = n; strJ= jl - j; } else { strJ = bs; } if (block_owner(I, J) == me) { /* parcel out blocks */ /* Pre-fetch next two blocks that will be required by me */ /* First, identify the next IJ-th block owned by me */ /* This caculation is for block-cyclic distribution */ r = I; c = J + num_cols; if (c >= nblocks) { r = I + num_rows; w = J - (K+1); if (w >= num_cols) c = w%num_cols + (K+1); else c = J; } /* This processor will need the blocks [r,K] and [K, c] next */ /* Now, pre-fetch blocks [r,K] and [K,c] using non-blocking gets*/ if (r < nblocks && c < nblocks) { if (!br[c] && block_owner(K, c) != me) { /* if this block has not been pre-fetched yet and if I already don't own it*/ if (hdl1 == NULL) {/* this is the first time, no previous non-blocking call */ get_remote(bufr[c], K, c, hdl1); } else { if (!ARMCI_Wait(hdl1)) {/* only if previous call with hdl1 returned, then fetch next block */ get_remote(bufr[c], K, c, hdl1); t1 = 1; } } } if (!bc[r] && block_owner(r, K) != me) { if (hdl2 == NULL) get_remote(bufc[r], r, K, hdl2); else { if (!ARMCI_Wait(hdl2)) { get_remote(bufc[r], r, K, hdl2); t2 = 1; } } } } /* end of if (r < nblocks && c < nblocks) */ if(block_owner(I,K) == me) A = a[I+K*nblocks]; else { if (!t1) get_remote(bufc[I], I, K, NULL); /* This is the first time, so make a blocking call */ A = bufc[I]; bc[I] = 1; } if(block_owner(K,J) == me) B = a[K+J*nblocks]; else { if (!t2) get_remote(bufr[J], K, J, NULL); /* This is the first time, so make a blocking call */ B = bufr[J]; br[J] = 1; } C = a[I+J*nblocks]; bmod(A, B, C, strI, strJ, strK, strI, strK, strI); } } } } ARMCI_Free_local(dbuf); ARMCI_Free_local(bufr); ARMCI_Free_local(bufc); } void get_remote(double *buf, int I, int J, armci_hdl_t *handle) { int proc_owner; int edge, size; int rc; proc_owner = block_owner(I, J); edge = n%block_size; if (edge == 0) { edge = block_size; } if ((I == nblocks-1) && (J == nblocks-1)) { size = edge*edge; } else if ((I == nblocks-1) || (J == nblocks-1)) { size = edge*block_size; } else { size = block_size*block_size; } size = size * sizeof(double); if (handle == NULL) {/* do a blocking get */ ARMCI_Get(a[I+J*nblocks], buf, size, proc_owner); } else { if ((rc = ARMCI_NbGet(a[I+J*nblocks], buf, size, proc_owner, handle))) /* do a non-blocking get */ ARMCI_Error("Error in ARMCI_NbGet", rc); } } void lu0(double *a, int n, int stride) { int j; int k; /*int length;*/ double alpha; for (k=0; k #endif #if HAVE_SYS_ERRNO_H # include #endif #if HAVE_SYS_TIME_H # include #endif /** Timing routines that use standard Unix gettingofday() */ static struct timezone tz; static struct timeval start_time, finish_time; /** Start measuring a time delay */ void start_timer(void) { gettimeofday( &start_time, &tz); } /** Retunrn elapsed time in milliseconds */ double elapsed_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*(finish_time.tv_sec - start_time.tv_sec) + (finish_time.tv_usec - start_time.tv_usec)/1000.0 ); } /** Return the stopping time in milliseconds */ double stop_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*finish_time.tv_sec + finish_time.tv_usec/1000.0); } ga-5-3/armci/examples/benchmarks/lu/armci_nonblocking/lu_nb_put.c0000640005473000001440000003467111643645222024073 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /************************************************** * LU factorization * * Armci Version * **************************************************/ /***************** Non-blocking Version Pre-PUTing ******************/ #if HAVE_STDIO_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_STRING_H # include #endif #include "armci.h" #include "message.h" /*#define DEBUG*/ #define MAXRAND 32767.0 #define DEFAULT_N 8 #define DEFAULT_B 2 #define MAXPROC 256 /* Maximum number of processors */ /* global variables */ int n = DEFAULT_N; /* The size of the matrix */ int block_size = DEFAULT_B;/* Block dimension */ int nblocks; /* Number of blocks in each dimension */ int num_rows; /* Number of processors per row of processor grid */ int num_cols; /* Number of processors per col of processor grid */ double **a; /* a = lu; l and u both placed back in a */ int nproc, me = 0; int proc_bytes; int doprint = 0; /* make it 1 to see LU decomposition output */ /* Buffers for pre-fetched data */ double **bufr, **bufc; /* function declaration */ void lu(int, int, int); void lu0(double *,int, int); void bdiv(double *, double *, int, int, int, int); void bmodd(double *, double*, int, int, int, int); void bmod(double *, double *, double *, int, int, int, int, int, int); void daxpy(double *, double *, int, double); int block_owner(int, int); void init_array(); double touch_array(int, int); void print_block(); void print_array(int); void get_remote(double *, int, int); /* timing functions */ extern void start_timer(void); extern double elapsed_time(void); extern double stop_time(void); int main(int argc, char *argv[]) { int i, j; int ch; int edge; int size; /* ARMCI */ void **ptr; double **ptr_loc; void **bufr_g, **bufc_g; armci_msg_init(&argc,&argv); nproc = armci_msg_nproc(); me = armci_msg_me(); while ((ch = getopt(argc, argv, "n:b:p:h")) != -1) { switch(ch) { case 'n': n = atoi(optarg); break; case 'b': block_size = atoi(optarg); break; case 'p': nproc = atoi(optarg); break; case 'h': { printf("Usage: LU, or \n"); printf(" LU -nMATRIXSIZE -bBLOCKSIZE -pNPROC\n"); armci_msg_barrier(); armci_msg_finalize(); exit(0); } } } if(me == 0) { printf("\nUsing pre-PUTing\n"); printf("\n Blocked Dense LU Factorization\n"); printf(" %d by %d Matrix\n", n, n); printf(" %d Processors\n", nproc); printf(" %d by %d Element Blocks\n", block_size, block_size); printf("\n"); } num_rows = (int) sqrt((double) nproc); for (;;) { num_cols = nproc/num_rows; if (num_rows*num_cols == nproc) break; num_rows--; } nblocks = n/block_size; if (block_size * nblocks != n) { nblocks++; } edge = n%block_size; if (edge == 0) { edge = block_size; } #ifdef DEBUG if(me == 0) for (i=0;i n) { kl = n; strK = kl - k; } else { strK = bs; } /* factor diagonal block */ diagowner = block_owner(K, K); if (diagowner == me) { A = a[K+K*nblocks]; lu0(A, strK, strK); /* impl algo on this diag block */ } armci_msg_barrier(); /* divide column k by diagonal block */ if(block_owner(K, K) == me) D = a[K+K*nblocks]; else { D = dbuf; get_remote(D, K, K); } for (i=kl, I=K+1; i n) { il = n; strI = il - i; } else { strI = bs; } A = a[I+K*nblocks]; bdiv(A, D, strI, strK, strI, strK); /* Pre-put this block to the block-owners of all blocks on the I-th row with a non-blocking put*/ memset (saved, 0, sizeof(saved)); for (m = K+1; m < nblocks; m++) { destp = block_owner (I, m); if (destp != me && !saved[destp]) { ARMCI_NbPut(A, bufc[destp*nblocks + I], strI*strK*sizeof(double), destp, NULL); saved[destp] = 1; } } } } /* end of for (i=k1, I=K+1...) */ /* modify row k by diagonal block */ for (j=kl, J=K+1; j n) { jl = n; strJ = jl - j; } else { strJ = bs; } A = a[K+J*nblocks]; bmodd(D, A, strK, strJ, strK, strK); /* Pre-put this block to the block-owners of all blocks on the J-th column with a non-blocking put*/ memset (saved, 0, sizeof(saved)); for (m = K+1; m < nblocks; m++) { destp = block_owner (m, J); if (destp != me && !saved[destp]) { ARMCI_NbPut(A, bufr[destp*nblocks + J], strK*strJ*sizeof(double), destp, NULL); saved[destp] = 1; } } } } ARMCI_WaitAll(); ARMCI_AllFence(); armci_msg_barrier(); /* modify subsequent block columns */ for (i=kl, I=K+1; i n) { il = n; strI = il - i; } else { strI = bs; } for (j=kl, J=K+1; j n) { jl = n; strJ= jl - j; } else { strJ = bs; } if (block_owner(I, J) == me) { /* parcel out blocks */ if(block_owner(I,K) == me) A = a[I+K*nblocks]; else { A = bufc[me*nblocks+I]; } if(block_owner(K,J) == me) B = a[K+J*nblocks]; else B = bufr[me*nblocks + J]; C = a[I+J*nblocks]; bmod(A, B, C, strI, strJ, strK, strI, strK, strI); } } } } ARMCI_Free_local(dbuf); } void get_remote(double *buf, int I, int J) { int proc_owner; int edge, size; proc_owner = block_owner(I, J); edge = n%block_size; if (edge == 0) { edge = block_size; } if ((I == nblocks-1) && (J == nblocks-1)) { size = edge*edge; } else if ((I == nblocks-1) || (J == nblocks-1)) { size = edge*block_size; } else { size = block_size*block_size; } size = size * sizeof(double); ARMCI_Get(a[I+J*nblocks], buf, size, proc_owner); } /* Function lu0: implements the serial algo on one diag block (*a) */ void lu0(double *a, int n, int stride) { int j; int k; /*int length;*/ double alpha; for (k=0; k #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_UNISTD_H # include #endif #include "armci.h" #include "message.h" #define DEBUG_ #define MAXRAND 32767.0 #define DEFAULT_N 1500 #define DEFAULT_B 16 /* global variables */ int n = DEFAULT_N; /* The size of the matrix */ int block_size = DEFAULT_B;/* Block dimension */ int nblocks; /* Number of blocks in each dimension */ int num_rows; /* Number of processors per row of processor grid */ int num_cols; /* Number of processors per col of processor grid */ double **a; /* a = lu; l and u both placed back in a */ int nproc, me = 0; int proc_bytes; int num; int doprint = 0; /* function declaration */ void lu(int, int, int); void lu0(double *,int, int); void bdiv(double *, double *, int, int, int, int); void bmodd(double *, double*, int, int, int, int); void bmod(double *, double *, double *, int, int, int, int, int, int); void daxpy(double *, double *, int, double); int block_owner(int, int); void init_array(); double touch_array(int, int); void print_block(); void print_array(int); void get_remote(double *, int, int); /* timing functions */ extern void start_timer(void); extern double elapsed_time(void); extern double stop_time(void); int main(int argc, char *argv[]) { int i, j; int ch; int edge; int size; /* ARMCI */ void **ptr; double **ptr_loc; armci_msg_init(&argc,&argv); nproc = armci_msg_nproc(); me = armci_msg_me(); while ((ch = getopt(argc, argv, "n:b:p:h")) != -1) { switch(ch) { case 'n': n = atoi(optarg); break; case 'b': block_size = atoi(optarg); break; case 'p': nproc = atoi(optarg); break; case 'h': { printf("Usage: LU, or \n"); printf(" LU -nMATRIXSIZE -bBLOCKSIZE -pNPROC\n"); armci_msg_barrier(); armci_msg_finalize(); exit(0); } } } if(me == 0) { printf("\n Blocked Dense LU Factorization\n"); printf(" %d by %d Matrix\n", n, n); printf(" %d Processors\n", nproc); printf(" %d by %d Element Blocks\n", block_size, block_size); printf("\n"); } num_rows = (int) sqrt((double) nproc); for (;;) { num_cols = nproc/num_rows; if (num_rows*num_cols == nproc) break; num_rows--; } nblocks = n/block_size; if (block_size * nblocks != n) { nblocks++; } num = (nblocks * nblocks)/nproc; if((num * nproc) != (nblocks * nblocks)) num++; edge = n%block_size; if (edge == 0) { edge = block_size; } #ifdef DEBUG if(me == 0) for (i=0;i n) { kl = n; strK = kl - k; } else { strK = bs; } /* factor diagonal block */ diagowner = block_owner(K, K); if (diagowner == me) { A = a[K+K*nblocks]; lu0(A, strK, strK); } armci_msg_barrier(); /* divide column k by diagonal block */ if(block_owner(K, K) == me) D = a[K+K*nblocks]; else { D = buf1; get_remote(D, K, K); } for (i=kl, I=K+1; i n) { il = n; strI = il - i; } else { strI = bs; } A = a[I+K*nblocks]; bdiv(A, D, strI, strK, strI, strK); } } /* modify row k by diagonal block */ for (j=kl, J=K+1; j n) { jl = n; strJ = jl - j; } else { strJ = bs; } A = a[K+J*nblocks]; bmodd(D, A, strK, strJ, strK, strK); } } armci_msg_barrier(); /* modify subsequent block columns */ for (i=kl, I=K+1; i n) { il = n; strI = il - i; } else { strI = bs; } if(block_owner(I,K) == me) A = a[I+K*nblocks]; else { A = buf1; get_remote(A, I, K); } for (j=kl, J=K+1; j n) { jl = n; strJ= jl - j; } else { strJ = bs; } if (block_owner(I, J) == me) { /* parcel out blocks */ if(block_owner(K,J) == me) B = a[K+J*nblocks]; else { B = buf2; get_remote(B, K, J); } C = a[I+J*nblocks]; bmod(A, B, C, strI, strJ, strK, strI, strK, strI); } } } } free(buf1); free(buf2); } void get_remote(double *buf, int I, int J) { int proc_owner; int edge, size; proc_owner = block_owner(I, J); edge = n%block_size; if (edge == 0) { edge = block_size; } if ((I == nblocks-1) && (J == nblocks-1)) { size = edge*edge; } else if ((I == nblocks-1) || (J == nblocks-1)) { size = edge*block_size; } else { size = block_size*block_size; } size = size * sizeof(double); ARMCI_Get(a[I+J*nblocks], buf, size, proc_owner); } void lu0(double *a, int n, int stride) { int j; int k; /*int length;*/ double alpha; for (k=0; k #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_UNISTD_H # include #endif #include "armci.h" #include "message.h" /*#define DEBUG*/ #define MAXRAND 32767.0 #define DEFAULT_N 1500 #define DEFAULT_B 16 /*#define MPI2_ONESIDED*/ /* global variables */ int n = DEFAULT_N; /* The size of the matrix */ int block_size = DEFAULT_B;/* Block dimension */ int nblocks; /* Number of blocks in each dimension */ int num_rows; /* Number of processors per row of processor grid */ int num_cols; /* Number of processors per col of processor grid */ double **a; /* a = lu; l and u both placed back in a */ int nproc, me = 0; int proc_bytes; int doprint = 0; double comm_time=0.0; int get_cntr=0; /* ARMCI */ void **ptr; #ifdef MPI2_ONESIDED MPI_Win win; #endif /* function declaration */ void lu(int, int, int); void lu0(double *,int, int); void bdiv(double *, double *, int, int, int, int); void bmodd(double *, double*, int, int, int, int); void bmod(double *, double *, double *, int, int, int, int, int, int); void daxpy(double *, double *, int, double); int block_owner(int, int); void init_array(); double touch_array(int, int); void print_block(); void print_array(int); void get_remote(double *, int, int); /* timing functions */ extern void start_timer(void); extern double elapsed_time(void); extern double stop_time(void); int main(int argc, char *argv[]) { int i, j; int ch; int edge; int size; int nloop=5; double **ptr_loc; armci_msg_init(&argc,&argv); nproc = armci_msg_nproc(); me = armci_msg_me(); while ((ch = getopt(argc, argv, "n:b:p:h")) != -1) { switch(ch) { case 'n': n = atoi(optarg); break; case 'b': block_size = atoi(optarg); break; case 'p': nproc = atoi(optarg); break; case 'h': { printf("Usage: LU, or \n"); printf(" LU -nMATRIXSIZE -bBLOCKSIZE -pNPROC\n"); armci_msg_barrier(); armci_msg_finalize(); exit(0); } } } if(me == 0) { printf("\n Blocked Dense LU Factorization\n"); printf(" %d by %d Matrix\n", n, n); printf(" %d Processors\n", nproc); printf(" %d by %d Element Blocks\n", block_size, block_size); printf("\n"); } num_rows = (int) sqrt((double) nproc); for (;;) { num_cols = nproc/num_rows; if (num_rows*num_cols == nproc) break; num_rows--; } nblocks = n/block_size; if (block_size * nblocks != n) { nblocks++; } edge = n%block_size; if (edge == 0) { edge = block_size; } #ifdef DEBUG if(me == 0) for (i=0;i n) { kl = n; strK = kl - k; } else { strK = bs; } /* factor diagonal block */ diagowner = block_owner(K, K); if (diagowner == me) { A = a[K+K*nblocks]; lu0(A, strK, strK); } armci_msg_barrier(); /* divide column k by diagonal block */ if(block_owner(K, K) == me) D = a[K+K*nblocks]; else { D = buf1; get_remote(D, K, K); } for (i=kl, I=K+1; i n) { il = n; strI = il - i; } else { strI = bs; } A = a[I+K*nblocks]; bdiv(A, D, strI, strK, strI, strK); } } /* modify row k by diagonal block */ for (j=kl, J=K+1; j n) { jl = n; strJ = jl - j; } else { strJ = bs; } A = a[K+J*nblocks]; bmodd(D, A, strK, strJ, strK, strK); } } armci_msg_barrier(); /* modify subsequent block columns */ for (i=kl, I=K+1; i n) { il = n; strI = il - i; } else { strI = bs; } if(block_owner(I,K) == me) A = a[I+K*nblocks]; else { A = buf1; get_remote(A, I, K); } for (j=kl, J=K+1; j n) { jl = n; strJ= jl - j; } else { strJ = bs; } if (block_owner(I, J) == me) { /* parcel out blocks */ if(block_owner(K,J) == me) B = a[K+J*nblocks]; else { B = buf2; get_remote(B, K, J); } C = a[I+J*nblocks]; bmod(A, B, C, strI, strJ, strK, strI, strK, strI); } } } } free(buf1); free(buf2); } void get_remote(double *buf, int I, int J) { int proc_owner; int edge, size; double t1; proc_owner = block_owner(I, J); edge = n%block_size; if (edge == 0) { edge = block_size; } if ((I == nblocks-1) && (J == nblocks-1)) { size = edge*edge; } else if ((I == nblocks-1) || (J == nblocks-1)) { size = edge*block_size; } else { size = block_size*block_size; } size = size * sizeof(double); t1 = armci_timer(); #ifdef MPI2_ONESIDED { int target_disp = ( ((char*)(a[I+J*nblocks])) - ((char*)(ptr[proc_owner])) ); if(target_disp<0) { printf("ERROR!: target disp is < 0, target_disp= %d\n", target_disp); MPI_Abort(MPI_COMM_WORLD, 1); } MPI_Win_lock(MPI_LOCK_EXCLUSIVE, proc_owner, 0, win); MPI_Get(buf, size, MPI_CHAR, proc_owner, target_disp, size, MPI_CHAR, win); MPI_Win_unlock(proc_owner, win); } #else ARMCI_Get(a[I+J*nblocks], buf, size, proc_owner); #endif comm_time += armci_timer() - t1; get_cntr++; } void lu0(double *a, int n, int stride) { int j; int k; /*int length;*/ double alpha; for (k=0; k #endif #if HAVE_SYS_ERRNO_H # include #endif #if HAVE_SYS_TIME_H # include #endif /** Timing routines that use standard Unix gettingofday() */ static struct timezone tz; static struct timeval start_time, finish_time; /** Start measuring a time delay */ void start_timer(void) { gettimeofday( &start_time, &tz); } /** Retunrn elapsed time in milliseconds */ double elapsed_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*(finish_time.tv_sec - start_time.tv_sec) + (finish_time.tv_usec - start_time.tv_usec)/1000.0 ); } /** Return the stopping time in milliseconds */ double stop_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*finish_time.tv_sec + finish_time.tv_usec/1000.0); } ga-5-3/armci/examples/benchmarks/lu/armci_blocking/lu-b-bc.c0000640005473000001440000003626512115436166022613 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /************************************************** * LU factorization * * Armci Version * * Block and Cyclic distribution * **************************************************/ #if HAVE_STDIO_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_UNISTD_H # include #endif #include "armci.h" #include "message.h" #define DEBUG_ #define MAXRAND 32767.0 #define DEFAULT_N 512 #define DEFAULT_B 16 /* global variables */ int n = DEFAULT_N; /* The size of the matrix */ int block_size = DEFAULT_B;/* Block dimension */ int nblocks; /* Number of blocks in each dimension */ int num_rows; /* Number of processors per row of processor grid */ int num_cols; /* Number of processors per col of processor grid */ double **a; /* a = lu; l and u both placed back in a */ int nproc, me = 0; int proc_bytes; int num; int nnodes; int doprint = 0; /* function declaration */ void lu(int, int, int); void lu0(double *,int, int); void bdiv(double *, double *, int, int, int, int); void bmodd(double *, double*, int, int, int, int); void bmod(double *, double *, double *, int, int, int, int, int, int); void daxpy(double *, double *, int, double); int block_owner(int, int); void init_array(); double touch_array(int, int); void print_block(); void print_array(int); void get_remote(double *, int, int); /* timing functions */ extern void start_timer(void); extern double elapsed_time(void); extern double stop_time(void); int main(int argc, char *argv[]) { int i, j; int ch; int edge; int size; /* ARMCI */ void **ptr; double **ptr_loc; armci_msg_init(&argc,&argv); nproc = armci_msg_nproc(); me = armci_msg_me(); while ((ch = getopt(argc, argv, "n:b:p:h")) != -1) { switch(ch) { case 'n': n = atoi(optarg); break; case 'b': block_size = atoi(optarg); break; case 'p': nproc = atoi(optarg); break; case 'h': { printf("Usage: LU, or \n"); printf(" LU -nMATRIXSIZE -bBLOCKSIZE -pNPROC\n"); armci_msg_barrier(); armci_msg_finalize(); exit(0); } } } if(me == 0) { printf("\n Blocked Dense LU Factorization\n"); printf(" %d by %d Matrix\n", n, n); printf(" %d Processors\n", nproc); printf(" %d by %d Element Blocks\n", block_size, block_size); printf("\n"); } /* num_rows = (int) sqrt((double) nproc); */ /* for (;;) { */ /* num_cols = nproc/num_rows; */ /* if (num_rows*num_cols == nproc) */ /* break; */ /* num_rows--; */ /* } */ nblocks = n/block_size; if (block_size * nblocks != n) { nblocks++; } nnodes = nproc / 4; if((nnodes * 4) != nproc) { num_cols = nproc - nnodes * 4; nnodes++; num_rows = 1; } else { num_cols = 2; num_rows = 2; } num = (nblocks * nblocks)/nnodes; if((num * nnodes) != (nblocks * nblocks)) num++; #ifdef DEBUG if(me == 0) for (i=0;i n) { kl = n; strK = kl - k; } else { strK = bs; } /* factor diagonal block */ diagowner = block_owner(K, K); if (diagowner == me) { A = a[K+K*nblocks]; lu0(A, strK, strK); } armci_msg_barrier(); /* divide column k by diagonal block */ if(block_owner(K, K) == me) D = a[K+K*nblocks]; else { D = buf1; get_remote(D, K, K); } for (i=kl, I=K+1; i n) { il = n; strI = il - i; } else { strI = bs; } A = a[I+K*nblocks]; bdiv(A, D, strI, strK, strI, strK); } } /* modify row k by diagonal block */ for (j=kl, J=K+1; j n) { jl = n; strJ = jl - j; } else { strJ = bs; } A = a[K+J*nblocks]; bmodd(D, A, strK, strJ, strK, strK); } } armci_msg_barrier(); /* modify subsequent block columns */ for (i=kl, I=K+1; i n) { il = n; strI = il - i; } else { strI = bs; } if(block_owner(I,K) == me) A = a[I+K*nblocks]; else { A = buf1; get_remote(A, I, K); } for (j=kl, J=K+1; j n) { jl = n; strJ= jl - j; } else { strJ = bs; } if (block_owner(I, J) == me) { /* parcel out blocks */ if(block_owner(K,J) == me) B = a[K+J*nblocks]; else { B = buf2; get_remote(B, K, J); } C = a[I+J*nblocks]; bmod(A, B, C, strI, strJ, strK, strI, strK, strI); } } } } free(buf1); free(buf2); } void get_remote(double *buf, int I, int J) { int proc_owner; int edge, size; proc_owner = block_owner(I, J); edge = n%block_size; if (edge == 0) { edge = block_size; } if ((I == nblocks-1) && (J == nblocks-1)) { size = edge*edge; } else if ((I == nblocks-1) || (J == nblocks-1)) { size = edge*block_size; } else { size = block_size*block_size; } size = size * sizeof(double); ARMCI_Get(a[I+J*nblocks], buf, size, proc_owner); } void lu0(double *a, int n, int stride) { int j; int k; /*int length;*/ double alpha; for (k=0; k #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if HAVE_FCNTL_H # include #endif #if HAVE_STDIO_H # include #endif void printsparse_(int *irow, int *icol, double *a, double *b, int n,int nz) { int fd; int i,max,j; fd = open("matrix.bin",O_CREAT|O_WRONLY,0777); if(fd<=0) { printf("open failed"); return;} write (fd, &n, sizeof(int)); write (fd, &nz, sizeof(int)); write (fd, a, sizeof(double)*(nz)); write (fd, irow, sizeof(int)*(n)); write (fd, icol, sizeof(int)*(nz)); write (fd, b, sizeof(double)*(n)); close(fd); printf("dumped sparse matrix: dim = %d %d nonzeros\n", n, nz); } int main(int argc, char **argv) { int NZROW=8,NZSQ=64; int i,k,irow[NZROW+1],icol[NZSQ+4],n=NZROW,nz=NZSQ; double a[NZSQ], b[NZROW], xvec[NZROW]; for(i=0;i #endif #if HAVE_STDIO_H # include #endif #if HAVE_MATH_H # include #endif #include "armci.h" #include "message.h" extern int na,nz; extern int me, nproc; extern int myfirstrow,mylastrow; void computeminverse(double *minvptr,double *aptr,int *rowptr,int *colptr) { int i,j; for(i=myfirstrow;i<=mylastrow;i++){ for(j=rowptr[i];j=i){ if(colptr[j]==i){ /*printf("\n%d:i=%d j=%d aptr=%f",me,i,j,aptr[j]);*/ minvptr[i]=10.0/aptr[j]; } if(colptr[j]>i){ minvptr[i]=0.0; /*printf("\n%d:l=%d i=%d mycolptr[j]=%d",me,j,i,colptr[j]);*/ } break; } } } /*armci_msg_barrier();*/ } void computeminverser(double *minvptr,double *rvecptr,double *minvrptr) { int i; for(i=myfirstrow;i<=mylastrow;i++) minvrptr[i]=minvptr[i]*rvecptr[i]; /*armci_msg_barrier();*/ } void acg_printvec2(char *v, double *vec, char *v1, double *vec1) { int i; for(i=myfirstrow;i<=mylastrow;i++) printf("\n%d:%s[%d]=%f %s[%d]=%f",me,v,i,vec[i],v1,i,vec1[i]); fflush(stdout); armci_msg_barrier(); } void acg_printvec(char *v, double *vec) { int i; for(i=myfirstrow;i<=mylastrow;i++) printf("\n%d:%s[%d]=%f",me,v,i,vec[i]); fflush(stdout); armci_msg_barrier(); } double acg_ddot(double *vec1,double *vec2) { int i; double dt=0.0; for(i=myfirstrow;i<=mylastrow;i++) dt+=(vec1[i]*vec2[i]); armci_msg_dgop(&dt,1,"+"); /*armci_msg_barrier();*/ return(dt); } void acg_zero(double *vec1) { int i; for(i=myfirstrow;i<=mylastrow;i++) vec1[i]=0.0; armci_msg_barrier(); } void acg_addvec(double *pscale1,double *vec1,double *pscale2,double *vec2, double *result) { int i; double scale1=*pscale1,scale2=*pscale2; for(i=myfirstrow;i<=mylastrow;i++) result[i]=(scale1*vec1[i]+scale2*vec2[i]); /*armci_msg_barrier();*/ } void acg_2addvec(double *pscale1a,double *vec1a, double *pscale2a,double *vec2a, double *resulta, double *pscale1b, double *vec1b,double *pscale2b, double *vec2b, double *resultb, int *rowptr, int *colptr) { int i; double scale1a=*pscale1a,scale2a=*pscale2a, scale1b=*pscale1b,scale2b=*pscale2b; for(i=myfirstrow;i<=mylastrow;i++){ resulta[i]=vec1a[i]*scale1a+vec2a[i]*scale2a; resultb[i]=vec1b[i]*scale1b+vec2b[i]*scale2b; } /*armci_msg_barrier();*/ } void acg_matvecmul(double *aptr,double *vec, double *result,int *rowptr, int *colptr) { int i,j; double tmprowsum=0.0; ARMCI_Barrier(); for(i=myfirstrow;i<=mylastrow;i++){ for(j=rowptr[i];jא9@)g?hbmٹ@^#X@=$@"iZ@ge@3K6@WD>@Ȑp@3@ODInP&q@Q@@܂x˒CN wp@I(!@Mڥzp|Lq`@~U)eb_M@"S+CLy@N0`<@b#i1+@q*,މ@ f֢4*H@BE$o<+@{?lCƪ6( O-WF AZX;-#AbAWhO\c=rTi@.2P@@ݍ9M;x@Be"犚@ *@ 9@mS\eb{1h@{n\@l!m?@XrY7AD=\@(HQ]@6h+wt<%nk@rԷ@g@ɀFPk#dP^@74p\J~,fQ7`@3G)U@*cS~+he@w(L5ɔ@@uAZFn"@h'AAuơ@${8)I8m2@$@}@[d@ӳ$AX@Vx@kIAIeRHC,@-L@u+@0 9@!@B4D@!@B4D@eT_@Gbڡ@X8@Xm W@ŌsC@ e r@)EDZ@q 7u@垴g#AXB AAuơ@E`A2uR&팕K~WEvp@@fI@c~#RڰV@iV?@\VM٢@-Lr@|-G@C> @#'{?@'1|@B3^@+n@2;LC@XYd@USקA@p7R"@@"U'%^wuz| hōe@H'p5@-]:=n@"@@I^@!@Ro1@SPA0@fͥry@\9@|'RUX@0lRo1!@PTO@b@M@HЈ|'RUX\9@GX #y@āydhY:sLQ@=헬@H!>@s[>PJׂ@ZleTY@44QyNjn_@ Coml[^@X_l@&NMe.z@yo_@]A{8@S%TU]3]gs[>q@K+xY@be311@3 g@L__Xl",ܗl@<9 Q@e7@o5Bp]@yo_@S%T@A{8@LIog"?`;#A.2AI@-@z'сCPW0锢)^R +@i"EJ?y b'Kw2$;TҴ_1Қ@?T- 0@ϔ UEL\ 4\P@YVnMk.2A8HApAj:K@t@mԞ@RD!Fk@K-4WAf]H?@\z ~>T/kf3w,Ea@-\Cu@NcvaTϺ햄oEY"Ɍ"oL;`SL^/.z@&.Z T<@;vg@95=Z rg@(Q)r6Aߞ!hW@f͙P}@㶰X?3FةޘAQrNDXAF@t/h]@&+ffB@=P~v@pAk@pr ;@ê)?y?@÷2;!!YC@諽# A_4e)@ߞ!iǑA(a}@5Wb@VR@͸lS7@; qpzB@NJ^ '@vP@^Z 3 Sn@ou2s\@iǛ@<' Dh[a@|M?_c}FAm|/@6DwBb@ǼAr\709Zz@?E. !J@ļp4@שutTO&nƒ&eB@ ;^@٬-G@ړr@Pl. @S,@נ1@h Y/8@"Jss#Br\tA A?*J@Zk@䰅%а=w@iV2lANK@ #0}GI=@ǁj?O @;@ny%&Рu@EFۉ}?Mkce'BݣFشfX1N@fv%@^аW @2=>8@eoQ1D@ū5̣YJZGC4@W8ύev%@@X1N@TE@y^B(~@"c+@ѕk*'@kRBF=@TZ@QHsΪ@ŖC%/foJJ.@U}VR,(@Pa +5hI)I@A3'{[\ο##A^Ό ^UFyp)@(vPx2G]R@0K@U\gݧz,@V&GpAy^B(~@s ~@ѕ@"c+@>aFMgq@MZBF=@ĖC%/fo@PHsΪ@Lu9 hMqu@!k0LGMl +@alE9S\g@0K@ =KQg@oT’@bF3@Tt^%@X>d3kt(@٩?񊝝uiR]`@oT’@2V~؆@t^%bF3@`2`<Щӡ? *U@ oys_`@>Ww4t7@J(qjjF @g▜$_Za104Pgc@`f =@< h^@ĿtپB@J(qjjDp'@^c$$ئ@@V~8c@_R4]FR=@S r3_dC@lR'@i*!ϥAxn @$xH XJ ݬm@lt#}@x @x7Y~@V(q @+!]@Bk@Tįv@;@o97!&gzbެCr/U}@F$@h==M4r:vaf@-vL?xn @Q\}JAtN|~l@ ݬm@h t#}@V(q x7Y~@Bk*!]@;Tįv@Ք1~2KܹAeGIs*a8pu A CyɔE"A)55$AFFOu%YOAM[ <2z@nκ4@lg5 1Q AFM4!AējG!AsG+?_mo93H@ԝ\y?c 9pEqP R8-vL΅af@Y-@R\@Clt@|? e'@@}zï@Hv?DVg@C|K5Ze@ !+L_٦ɿfÓgR@Tr"xiLI{=U@z0 kqkyv=cw_S53ijnR\@R@(&4A@:JD @Gv}zï@HxL\d@?i=1@h@;^Tr"xi@fÓgR@W;R@ Ѧqkyv=cj떔70JmF)W{7R"@B O/hR@GAn8 ~@)7V@XV )7V!ݑc?e@R!f?1kv5ggBs#m?%j@$B:@'2]$B:Bx%Q@@"U'%^w@SAe`v@B F>Y󅂩qU5{@Jv##@k|}@+4L~FQ4n@4n@+~é\=@s!6cod 1G2۸"U'%^w@e`v@9bA$xaif SfJv@qU5{@k|}##@Tgn3p$@3/4n4n@tR׋3(@s!6c@\=@[{o}%B F$xgؗA2+E@חq@ Δ@MS:Ɇ@6@pY󅂩aif Sf2+E@orקAcv@C|ZǗ@m۶m[AՋOSr @ @E_@) @@,zVص@!@td@KF@]tE@ Dp8@ͱF" n@?.@td@΋@ļ!@X'=@}A&J@'ޑ{[u@*Uv@,,4@Fѐz@͓1H@~pQ^@|ɝ+@~}!"@W&3F@foF1.z@QA:@%sv6V0LSS@%L@*}%8@B (8P@7<@Xb_R"\9&3 'hLNH僐$h@!e8@^1iyIN΅?R]2^@k۔CC@Inw|PKaI" :,i uO'@?[Ε@;m@vao0@5zN$xH tN|Clt@(&4A@oF^[A @ƇKP@$oc6(@C26a@38 ٪eAaY֥@<;_tmOM@}K=jVj?C5I] 6qn`5=V@ɨ{n$1%!'@tJ\|BvNYLBJ݉@bV@-ŽK@_yd@0@^Wb@x .@8\ M&XJ~|? e'@@:JD @ @UmAj3`"@hL_@;R+@Nm@&<;_tm@aY֥@_ @՘o*#@\Av@m@ _`-̈́h$d@j8IPDö@Iiux)Vv@? @Ixo2ab%/@ͨ{n$@n`5=V@_R [c@s@J0WP br'T@&!@AJc@५[/@K?A/,@ A5h?URP|@P:@" i_a󶬵7@?קAɏ]ק5GQ+@gf@|t3gJ"@=2@L^q?ɏ]!_mAUoj|t@gf@]&(r@- F&!L^q=2@ }-޷A)iQ@6K@$#۷ X;i@;tBW @Q@O@)~@)Gkk@J`Dm!ĭ=NY@춦G@Č!.N<)iQ@A X;iZ)ާtP`@$8BN@lA7@8WB"N<@ *ɑ~)@M|@ ?AЫyd/@lJ@7C}[H@`E@,@#=n z%'nz팝v@o3ÿ9~s@1&TC@ 6;=.P,g @Z?mn@"%'XM_oE, W5Y@˶v0 +qR@.V_ W@{0Ƅ@򼡻]@_wgzk@X9)7LHm[ ee@fىW@-\}(@cY_@?MYGEWalJ@e?b@IF@]N]t@1r. b@0j ߘn3?oz팝v@!}jR@ᴗ@]Y3;~Ӡ1Zg @"%'X@mn@Y M/2ɿrG I$bR@X5~#@*鯅Q@&{iys8TrX9)7@gzk@QHd_NMгa7YV@쪏j#@ݿX@诂*@f/ZIg7 wӷpȓחAt.ޓ}@חb @0Q  srqE^"@xGJ W@t.ޓ}@KSO@ĥ=[T@$)NGdLVRVo'W@;!)@>א9@VȀZ#@VחATd>&s@$! @`қڗ@L &@kz@9R\@j\Jj2@ UAEolw&v@&?@)g?ZTdUקA$! >&s@קj\Jj29R\@Eo@ UA&?kw&v@;קAށ:h r+-(L5@ק;Yy)c"^@H ?~)dDN5"$B#@0xԥ: ~ ^ᡪ#i_@t5{6PG@R6T` &SKwB.ށ:.\חA,q"@@ɻח7$@H ߿y)c"^@_p5y`n eWbS9L~Q@VwO_@-佅2qohS#Nzf=gUb@΁?]]HFw${82uR&! XAB)AҶ@Gs :@!ߒɛ !`6K@L4iҸ @Zx@j|i1@6^uNc\Qy@O 7S0@&qҌO@BvjBЮp-7`@h %?PX8?`c@'gaU2@;.lNg'kڙ{zt)e@˩J lզ& |+9 M1FX)I8팕KB)A7 rVhwv3A*x5C BxNz aAH|ɝ+@") D@WbͅS:P`@2Pu@<" @VN,@<ϧ\@WV #@2AkS#²?IyO@Eu=@Gma]ҽߖJ\xu˜ѾS@=StNOo1c&@ oG[Q@Qaڰaj~}!"@Wba@6ɒcIj@@"?u@NN, @VV @<ϧ\@2AkS@#@YY:C@7-7Gma]@Eu=@?@I"eU~w(R@c>3@zԣL͞v Qy@ke;qXi2G@0Z&G&@%-q!_̚@G{X<@=ї[;U&Ip[@-K$>v!>_@G{X<@8=Ж@[;U&nuc+ y&@+}@1l$ @`oZ?RJǛ@ 1@Sp@΀Pr@-<,fqrmާd@N! @l7m@`oZ?w aH @>FE@Gmy@+ @{"KX@X7Z u, @[!x@~ KyUb@PJׂ@K+xY@8C%@Lݮ AiiɓA|@#ԑ@U@"4*@: DZleTY@be311@Lݮ A@8|ۀ@zD")'?0ۿ(&s )E 90`@1qÇחAp)8T:ח"X:@ %)!@lR-oLYEu@!@lR-@p)8T:Ax ܧczF-@ 0;$$^Z@-C6~(@E9"(A8^(cxz@Ʀ9+bI 5 rX"i@tZt@?8^"3"Ao_B\g$@yq`Ki@#J="wѿtZt@(sxLA :PBȢ@B!@E_@ Z?@ہv`N@<f@Lw@>#[vm@Ppͻ@jVpB@@i@qo@yPē@e @c! Y:@@tj,@aV~TaN@7YA{I@(]7 :PBKqnקAקHq'N@ 0pRs7saS@@{dqE9-kڐ:;@w$oEB@^K}n<'@%}?sM w@Q$QyU0zmyc@^qH7w,@%% ?z@m-Q@A(N}{Ǫ>X1.@d џ@osw@{dqE9Y5T@yhi@9c[vl7ZJ7Ԇu@& כ@&^֓ރ @U 3aeP#`@Mڳ#In@`rfW,A髨Xkue:@@Lw@i?NX3@NF@@k *Kn@H@yy@NɍX@,c@"(ݿ髨Xȕ@ 8ڃX@;I(?,c@۟x5@?hT?@**T@%bB@jfiߥ]5G@m@,zVص@>#[vm@X3@UmM2h@aqcQ@Oz~L@l۶m@qq @F:@@!_[O@Fr@q9KLpB@]9APopnBZ'P@ɮ`v@O aL@Nh|@q9K@Fr@]9AP@LpB@\ fp5踫9?ɮ`v@ƇKP@j30a~@wm t@YJJ@Y@DmM@EU׾@%o@hB{[]@Y!TL@ut$NJ@L,a@7u "l-@RMZ/%^u0D?HBd?]T$uvu@.,Lc@$oc`"@wZ2==-@YAA@p @CF.Tj!~@a.h@k?PK@h6@Z:?qAXwx^@ W@ˮ;'.@DD܃h9-/zl_Vtәz;^{@<MLSЂ3oۈ@늴B@`0@}zï@Gv{{קAh0pgק86DsZ@θ$cUҚNf@Q9ؿ3-@Hv?}zï@h0pgBNחAחθ$@86DsZ@pc@k~ 3-@i}l8חAs zחw]I8\5~@[&1 @ՆfRs z%GקADQEQ`Atd@ƃٹ_@ļ!@jVpB@yZ?@aqcQ@SV.O@gI "W1`@mέ@;tBW @?H՗@[lp@*~@e aR'g@"U :@oQL@rBIlv=*7@PW3@ @+46WAB5A0*@d:O@46WA@rBI|@znӑO@Yc@!D7&ۇA33@E>@V7@;@{54@YccQ n@Z@ ;/{/ib:8@efuB@Y^>CZ'@y'R259n`"'T@ ;/{@$+Ą@(IkkVԒ@r3QZ+|@( @P@?9H#^9hW@(a}@U.A[c@W@ws5B!`Ɂ@Ց0pIoʊU-1$hF@g|Ƹhbť)@YtDF@F 9(+@ٕNo74:iMV` <ꂈ44Av,p~h=!4J<@.AD3YZJ@H@;WZbqӒ)@W0z'g>k.+@?%y@v;죗C֫[y2Dn `ĭV@srw$*_qבWcXFW&3F@ z2A}D*T1VYx@GA@Rƻ Rd0lDX Id. D~ѧo@ {?@ &d@sZ@-,XO&Ti+:lj@'zq@=pԓf@= dtfoF1.z@}DptybAA8@Z;pOA{DK'ί@0@VW\%7y:@V0 {?ѧo@sZ &d@&Ti@MguQ9r@~ťX@vmE¯@puO@ִ]>썟CNb@DU4֝db@#^yDh@QF9@J}$ɃִHA,B=ٜ@˃ @KF@E6xnR@~ CV@@swqc@u\H@tj,@\~o@ c@CuI@fOG@?t8e9?+r$(&M@]`(@K}$Ƀ@QF9@٧A]a׺קeIvA_4t9qoj.F~@m.|.K;@]a׺Dm7QAIy].^D%ʛpDAxC|N TT$@#e$d6@g(vkjԝ{vo t ݏ1j >V@oO@+T!@D2 a.0q!YZZZA@Myzi!] A*o@VCۦ$HfEDA5A@xC|k1AN TTd#@{ޱu0Ԯ:@R5@I\@j}r oO >V@+TaD2 ա@q!@a)q YZZZAMy@ ূ@Ճ+X"*o Aw@UlJ$5AfEDAԃRקAmǶ<ק*ȰCAKf]A<@PGw*Gr@يb P@Et0Z@8R@@mǶ<q AgDnAx!S@b*+#Et0Zيb P@8R@/R߷@0m9_IM@W=1R3ZapKR hŧUk@=˼7@,3 yk~1i\v#пIaɼ=@`3#q0)@G޸@+vV d@c`qM."M>r;E@߀ @/2}@3NzوfZW@p+=Mh*q;lfE@qU5{@Jv@5 %t@Y`)XǭmKBq.%@֎@$8,]G [ )@ѽj?t8 VD@@Z;>@84oa@g7lFK%@JvqU5{@YU=Jټ AUbK@[r/cF@%8,]G@֎@%h^if>@ Fĸ؃zZ@@84o@;>@)]T3@~8 "c+@ѕ@8@BL3z@od@sYI@_}V- 2+0~c@ff*$;2jy@QoF<:_4"9@{Հ8\@B9ݜyu@ WצBdp0@*O'W@D+O55w:d@qGb$6g@E'5m b@"c(K @`YΊ{uݲR@GMҠ2@3ŧ:~y@o9Rs@V@ݿp@|ciݿN 3iQk@!kDưg@Xit(tW(@ęu"|@:uy@/y_@Jbr> Bl&s@r7#(v@:(6j;.,{f@ATAѕ"c+@BL@8@od@[[*٧A_}V- @sYI@ff*$@2+0~c@QoF<:@;2jy@{Հ?_4"9@B@8\@ WצB@9ݜyu@*O'?dp0@D+O@W@qGb$@55w:d@E'@6g@"@5m b@`Y?c(K @GM@{uݲR@3ŧ:?Ҡ2@o9@~y@V@?Rs@|ci?p@elNXit(@קęu"|tW(@/y_:uy@O @uB:r7#(vBl&s@iLX%ATA@{f@N TT$@N TTdP9חAVLחN`@u$o@"\@_&#g/@FO6d(@)O\K=#fuxI3K Tn@#e#@VLMA*`9au@=M@V BT(@Lz;y]ǫɞ@ q@9@0FDVg@HxL\d@6(@hL_@4D@V@G F!>n$@Wj-?;S*CX{?z@ߩ,@r[1cQZ9S7Jab +#} kjC|K5Ze@?i=1@C26a@;R+@V@1n@[g,G. tVK@+j@%*@zlqJab҆56u-2?շޜO\{A8}e@H @@~@]tE@wqc A%]H@Jp3@i@Oz~L@rޖg@W1`@wqc@ nD}6Ч@G7@) @A_@?Ÿ@@խK@ @E.b%z@s<*P@%O@JQUy+@sx#zV#Mt8}e@9A}6Чj)s<*PE.b%z@JQ@%O@sx@Uy+@ wڙt@r@#FE]2 AVb`@S;eVb`Vb`@OoקA|h@k *Kn@l۶m@T* W@Vb`_&٧Җ@ &;@IAȦ@='1X@hihp.?1Xfhp.˿hihp.?(Z;~@hihp.˿+9|QEȳڧA4:קfyAnXzX@]I;@NtfӺh@C8@3wh@ɛ"g3[N@4:hVL@A  @.c@@ ,4:Aɭ!I$d6@{ޱuuċe@Ytqx Z?;]ʈ owu@C27nB?[VrEl@S J@a]bFR@bFyL@nqA8!}glq@+c(@Eig(v0Ԯ:@Ytqxs EΈ@;q@ h;u[tT {ƹ@s~@/jo9}׌a=@웓@nq@yL@L Bq(}Fi@+c(@.Lj@ @l -<@wH@ġYg@)UQBDC@&rKA@.Lz@ @l -<@wH@"OFġYg@8@r8QBDC@&rKA@hbmgH>&s@$! U]:A_B@Pl(ѯc%Ѧ)@XXR`qƂ@|pl@7~r@?ܙ\@ųk_,@q5WCW (3!xo))U;8y Dحc}@B2!߶@@ plՌBa@pn}!mJ@Am~wLQ@fmkՉѿ]|8WC$! @>&s@_B@חA R+%חE#^PQw0e1')Xjx@PkCTkr@Xf@pR;gR*[@#T@ۛNhoT-A]Ea>A70@&7.A+wbA&7.N>6@JU 3 (@ö @=bW@=]@~ |mwu`ze-Qo"h70@K֭8>A&7.A&7.A+wbAݴ38=RmI@ö (@=]*@HGRl?7=s@2_Nf@4 @@:4@@ u;$̈́eVYx@Z;pOACen(NN@A"@7\zw-'@]GRlƅE>*@ =If@?-%Y@A:44 @ u@@ĭ 6@]_*I&7Z@<`l>1\rf8S"@9}R@TK1>@Z+@SK11~½=asyT@{)a@֎7V@,Y'YSn"j@5Cg\P^yB@i K@D'b,Y'YLs@Nj@wd@-ǕB@webR2[b7w@wi4Hπv@H @@zH@+wbA&7.A+wbA&7.A1jA[@I{i\.ܴ?7j?{~9@rlan?6?Sd@۷r*qMn*@S0;/ߔ E@ϥ?Ќ+2?W?jU h@l*1@'=&%@!Sx^AAπv@AmBcv@,B=ٜ@X媾@&7.+wbA&7.+wbAקAV}?˧w@w@O?DB*\?:޹?aMG@~{I_? ⶲ?.2?S>T?\݂@y<A#~?ܤP?B/DVY(?@E`?EN?ËV?78\@'=&%l*1@!Sx^AȢ@i&@kue:@ >G@sYI@_}V- @M!¿@`!MU#@@ClF@u e@D? 9@dЩhό?f`+ћJ.ա"1-@Ho$@Yoߪa?$K>?’҄ɭҿM1FE?Pb]2?!U_}V- : z? UN @C|ZǗ@i&@ח_}V- sYI@|h@V}?![חA~S@`7ݗka?~)?*Ib@d`?38?|z@^ύ&p@~ @8)ih+?O?4#u"⧪f@C]d?C(BQmD|ܫ#@Acei%@ff*$@g3L?Di8cv˛?_r\s?M. ɋܥ @Vgbn AsHAcv@חE_@8!V@@,zVص@;2jy@QoF<:@]tE@ Dp8@ͱF" n@I{iu e@QuF@חAjC0ra@b ?'9@H<ʥ<af@Χmq٢ŵ;RF@Rj_#92@_ak O@Y7%mb -@ݓ/5 QoF<:fۇ@g"@P}g?r6IJ ?blC@m۶m[AՋOWVW@) @td@KF@?.@QoF<:;2jy@w`7ݗ0ckh5 Au>zڏ? % H(~*~d&<IK{9!۩rOo6-pe\?T5IVkئm v&-QoF<:@wsp( @.߂2G\?[S?sp( De$@yy@ק Z?@k)@_4"9@{Հ?wqc A0No@!!@D?+=@jC0ra@sקAf*@s[.P!@q'+?0Z?4/@_$@徒|1@ّ4Ag? ՄHk@᳍3@2ͼ?z;?g+a@)6S@ 0sjfn(X1? ?y @S1$3@/5l p]{Հ?- '{?gu(?!\2?}N8?-8@5GQ+].%Aח%]H@&yyٔ@\.ܴ?nY?b ?f*@j>)חA4׶? ?~Ii?CƏ?PLf?[[Xa?+"Y } G?[3ڔ죡?k8?~ CV@_"*I5@elЁ3@DB*\?YHQ?zڏ?g?E.xmQ@2?V|S[M4@92?"cQ6OD~?*:7>\g@%3>\gQfd@nPV&@`қڗ>ڤݗAhg?Cl GWd?X{?rE_SځX{?_v-+?*)>@_Sځ@קQקAb\קקAחחA-Nחہv`N@6ys8@8\@B@Jp3@<@7j? 9@L@'9@s[.P!@4׶?YSքחAwVf 1o?Ħ @X )@8[z#@`%܇!@&?( 諭91?DIyդ7?J?+ fB $:@W:?2"ޫ?d7d&@}[@ @"X:@x ܧ$!5:@@V\@ļ!@B8\@:޹?~)?(i[ % ՄHk@5O년קAy>@kyL4I @P:@Ƭ+ @֚ϕ@'@25@w/*j8?1@ Yx?k?&͕?B@]'f&HSmm?@ z9EiI@"X:W㡓A&HSmm뿢K|]@<Tg^@Lw@>#[vm@9ݜyu@ WצB@i@qo@yPē@{~9@dЩMR"H<ʥq'+ ?wVfSJAQ}mkr?/blW@_dܨ/)@\hYqţ c>ˌ WצB2"<Hh)R?v4h?WT |;B!@E_@ק'N~a@f@jVpB@@e @ WצB9ݜyu@aMG@*Ib@F`$ ᳍3@2?y>@ʅקA,w~; -@3t&:@.Hx?@U=*6Ֆe$ I@jo+@P@  @H}v WצB@:f7BQ!@6GT@?S O}M?:i \@BQ!"/=@f@ @חdp0@*O'?hό?`O5?<af@? 1o?Q}חAGW?$٭~?5~?(=?[$??3?pm@K?ܚ铵?U? ;*O'BnWJ?zAܝ?i9t<@) @ @T: yZ?@*O'dp0@~{I_?d`?ONH2ͼ?kyL,w~ȠK}A???_-? W:R?vd9@3?zNϼ@Yx#?\?*O'?#m";?>Lw@-]4@i?NX3@W@D+O@H@f`jv+N@Χmq٢0Z?Ħ @mkrGW?UrAU$N3Kok0v@TZϥ?FG@N 2m`{MV?o)?,hk|hD+O.l?@z9G@@-]4@D+OW@k *Kn@ ⶲ?38?Ɋ@(z;?4I @; -@?? B6^@䱴 @ }@Ĵ]Ҷ@T?d:}@C oP!@cK V?]??D+O@ ܬes?c[@KP 75AyE8X157(E@]˖KyEL5A]By5yE@?x5>#[vm@35XA@X3@UmM55w:d@qGb$@Oz~L@qq @rlan?+ћJRmŵ4/@~Ii?X )@?/bl$٭~?U$N3=A_83-70B?yyS=]2>nd?{C?9qGb$]ɬ•l?_3?^OJ.m@,zVص@$&B@aqcQ@qGb$55w:d@l۶m@.2?|z@5mc~*g+a@P:@3t&:@?䱴 @`啜{G@2zE@zJ8?+d9t@9 H?qGb$@r}׎Y?BƩAeu,@}׎Y2b @Ppͻ@ٹH6D@NF@@2h@ק6g@E'@rޖg@sssss@6?.ա"1-@Ȩ'0@;RF@_$@CƏ?8[z#@W5~?Kok0_8b>קA2`g*@0O};?Y.oj@UK d?bO?pE'a@$o%Qc?i2?+0@ʙ N@!@PYiE@חSV.O@E'6g@T* W@S>T?^ύ&p@u4AH7~d&<)6S@Ƭ+ @.Hx?@_-? }@2zE@%P]IחA7|l+Fp?<ј@] Xej)!?/aU?%?E'@}9^MiuMu?6qvy]1@Mu@jVpB@?6?@aqcQ@ח5m b@"@W1`@mέ@Sd@Ho$@i~Rj_徒|1@PLf?`%܇!@@(=?v@3-2`g*@8חAˉ@\xzdGJ?~`@⡪@Ho"%AK@@f?L4?'(/DQEQ`Atd@kZ+@@yZ?@gI ""5m b@\݂@~ @}KsIK{9 0sjf֚ϕU= W:Ĵ]Ҷ@z7|l+~T'BAs0#@kt+ 7?FGᗭT|a*@e5T@"@K;I4 pߣ?# [t4 pߣ,R# @,B=ٜ@@Px`D?c(K @`Y?wqc@u\H@۷Yoߪa?-No1@#92@ّU@ ѥLYag;bl%`YKJ?[r?HѾ?,* O@˃ @KF@Px`D?stj,@`Y῔c(K @Qҳ?y<8)ih+?>C!۩n(XV|S[@'@*6ՖR?T?J8?Fp?s0#@cqFA]%jG+LQLj?(`*?ŘuVO/!E$<`Y?*U}38?ox @8fHIX@x vQG:@H @@i@ H0@Oz~L@{uݲR@GM@ nD}6ЧG7@) @r*qM$K>?7_ak6W +"Y ( 諭_dܨ?FG@yySY.oj\xzAwhuAZ7( ?p.1M@ v!:GMI?b|=n0`$x!!Cu @fξM@j߁$@T(/?fyA  @(dܷAKN-@?`uT @spj~P7]@Ly@fξM@e,Afy$aHAٹ@Ń@棵V G@@L &@oQL@l -<@ R+%Cl Fpr*&@˚/חAiVh-@Vf=|@0Pi8jQ.--9sח ȣ U6WX0:Jjp Qz@O ip@=yJ? ȣ?xv'T]@8jQ.@n_hA"WO@ A3|;<@񏇪'@:Jj@}ջ@znӑO@l -<@ח-NKN-@&חA9@xE8h+A|ۣ?N1j?i>`h?:Jj@O՚Z/9zO[R@:Jj񏇪'@qo@xgU@H@qq @~y@o9@G7@{¹n*@ɭҿxTY7{k} G?DIyդ\hYpm@`{M=]2U~-?>U@p.v htLA&fc@-@ o9!oʕ.!?nj$j/ؾ?|zk^# [@ Dp8@E37H'W@mέ@o9~y@Җ@ק~?"⧪f@C(BT5Iy @1@P@zNϼ@P!@nd?K d?`@ ѥL1M@ Rk@?&fc@HA$]AˑV@ݿE^???[$˯?Rj6W@+R A%B@ͱF" n@% A?u\H@iZ@V@ݿRs@%B@Ɗd1ާܤP?V A$#۷ X;i;tBW @SYNN)طAc;3n#.@,y!&KJA@H7{u@7@ X;i@Z)ާ2{ͦקA@]ia}!`|Z JA7H7{u@;tBW @:N3xM4iҸ@/45@bc;A9GߧApNͩ-x>SA:Ҋc@Ya,K|2RA\ !@̙AK$o@C4XO@]ia}VKyL@tGhcӿj_FM4iҸ@9zǓk`[ ^$@3n#.@pNŅ{A _@3Ee# &;@68&@ZM r@]?0?/aU?5EB'?tG qƗחA5s?S}aft96A7fQۦ/AX媾@e @)xCM0?קp@|ci?A_@iZ@/ߔPb]2?& 3 @ -@7cFJ@죡?J? cU?o)?{C?bO?⡪@Yagv$̭?-@$]㮣קA_r"|ciݿ*.?4$rB?}fe?2@?.@)xCM0?tj,@eIvAR3 |ciݿp@ȽN ?B/D)uf?Acei%@ v&-/5l p]"cQ6k?&͕?H}v\??C>H?%?e5T@/!E$<Os}ø$̭?+ja?G9a[(ЗA|ci?Z\b? =EF@4ꯜ1V!q@=EF_옄5@RkC)a9A&7+wBAQ@קs<@UV@?,yͩ- _@-,קAEJf?*ȰCAgD}!`hcӿ^(A*F*VAHxcDAc! Y:@q BL@yy@F:@N el?Ÿ@@)@ E@!U_}V- @|3[pff*$@ݓ/5 QoF<:@,{Հ?ˌ WצB@ ;*O'?,hk|hD+O@9qGb$@pE'@Ho"@;bl%`Y?!:GM@투Y@3ŧ:? o9@AˑV@?_r"|ci?H @u`VD@ھ5,@icJ??~vUQttXit(@@td@BLœu!EN5@;tBW @\~o@/'y@3iQk@NIAȦ@VY(?_}V- 'KWff*$g3LQoF<:w{Հ- '{?OD~?B]'f WצB:f7*O'񿉉#mD+O ܬeqGb$rE'}9^Miu"K;I`Y*U}GM:k #x @~6z@рZ`GNA&@MI>/,@У@&UvVC8v E@}T6SgR@ǩF#@#-CLkabau@̟`b#H;@|6$@>?e@!D7&ۇwH@?`uT @xE8h+ &N.{@]2-ob`S1pYA^QjJK?|6$@[EEV &@|ߵJ=Ί|6$̟`b#H;@ Ty7@v=*7@X{?nQVf=|@> #x @6c<#@jI@@DX7[7ׅoN#@PG?Fv=3l]2vEAxhF?G?F?1ucAYM@7[7ׅ@|7%@2vE@R!f?A33@@"OFspA|ۣ?~6z@]2-jI@-ԛ@5?ɑ+@'} ?2vE@h~6zNK@jIvى2vE@ikz@PW3@ġYg@rEp? 0PiрZ`@DX-M@K r@3[V sY7xD!aaGz~|-@ ([!!@aGz@YHrM~'P1kv5gE>@.c@ġYg@_Sځb\T(/j~8jQ.N1j?GNA&@ob`S7[7ׅ5?K r@%v@7[7ׅ$Bn3bjMEF !޸ @ufi!3 it5$@@+ @TcT";BGLa߶@1Bl@< PѦWӜzt@O*fgҢ@Q;= w1C݂MTcT/ @=@EMv%"Z~qh*T@S9[W4o@m;=@Ң@\hDf>-v|Xex>SA*"/>@q8?@Mv@O@1cU/D|@0RS@Ur5%h:Ҋc@q8?@R+@)֙ "@Nx?b G##@h9+*?O@i@L A$XE@M͘?Z@yy@!&KYa,K|3Ee#S}EJf?Df@5)v?Bv}AG!afpؖS@X`=r#@m\>C r@]%[4M*߻Jy7@ @)UX{?>!--9MIoN#@3[V s7[7ׅ42^P@A%% ?GUM#*6fyF#v'?;7!?UM#*6?1ucAYM@7[7ׅ@k0<@#v@gBs#m?V7@;@@8@r8P7i>>/,@1pYA^Qɑ+@$Bn3bjB$w@,軮sE#v@GN훻F>/,@#vk0<@@2sEW@@/ @: z?8L@?fۇ@g"@sp( @#^? $:@&HSmm?2"x9>Bڌ 0i05@@ϥ?Ak?P}g?V @VW:?Hh)R?•l?$o%Qc?f?[r?boʕ.!??4$rB?icJ?7@*$@+S0M?޼?1Y_IQɏ<@a_t@ c@6樛@-qEN?8cv˛?G\?!\2?*:7T@?orS?ٲtN? so?*$@6W@O]$C@X{Wo5~З>~@h0q@խK@/h<:rPT^@Ќ+2?l?r6IJ ?]p@E5!>>\g@2"ޫ?v4h?_3?i2?L4?HѾ?x @|=nE6`@nj$j/ؾ?[$˯?}fe?=EF@?+S0M?I3su@Oxrm,`? OPp@@.SuCuI@ٿO@..ËV?_r\s?[S?}N8?%3S O}M?8fHI[i7Fz\B?4ꯜ,B?O]$C@Oxrm,?Ch@ƃ)@w\je.Su@@tj,@jڠD@!_[O@!kDưg@Xit(@ @ǙSh@W?jU h@ UN @ݪy?blC@C0@k8?d7d&@WT |;zAܝ?@z9G@^OJ.+0@'(/,* O@0`$ 1:?|zk^Rj6W@2@~vUQttXit(ݚŋ~ @޼?`?V$R@Kc[@Aeu,@]1@[tX@ AC"Q@6=+o^?`eC@3`Sxv@1V!q@Xit(@U3pMF? yIkwקAMF|<|O/Y@"zehW$B:@B5A0*@&rKA@fξM@ U6WX0:Jj@&UvVC|6$@v=3l]2vE@~|-@fyF#v@.:Jߢk@WG@p_*CΞ?S't@i!@1&2JAM$B:'2]{54@&rKA@fξM@:JjO՚Z/8v E@[EEV2vEh!޸ @#vGN훻Fڌ ^>p_*CΞ?6Ch[i@X m3s@󭀽-*16@LC5M@tU !+L_Fr@q9K@;eSHAطi@٦? 6@Z:p-5_a/)r-c@4kh@&!A@٦ɿh@;^q9KFr@Vb`='Vb`@٦?Yd@[:p@ 6@nڴ ej!0&!A4kh@)~@tP`@B@\R#-Yw@ڱGo@wCU,\@&8PRLw0Pn@c&@@*%]@xUT'\@IuQ@d @@h D@u/@)Gkk@$8BN@\R$@r1{r@6{^' \@ei@I@QdwBt uI[@oK^@VG aF֌= @&!"<+?g$Q:?ۛ&j^Mq! NO@+Pnu?sp)領 l@^n[`e@'^I33]7?3ESj:K@kRMgq@&!"-頑?@w%$7O4P@AyJ!p!w@j$I@H}$-s",G@8|E @Z'5>W`w6"@9<$B7_LΖ@@|!i@Ujʹ93k` g@R,@Yn@B 5'#.=͛@Ujʹd@.@Mzy@ {@雠@N?%`Ɂ@D3X|@v0aԶH@5?@>]@$̗$:X@ 0aQu/+6~~QՑ0YZJ@vM/r+aaPF@5?@"7{@^ V@1Gpu/+6X{ V Q0 *qQ*?{L@%7@/R$^@:.zbٰ@6cE@!@=@c@u~zH@R'd@ =@fœ5.b))~%7@yx@8'}_QX @i@Nq@bڃa@1^+)@ /@.@s;@y[:!@](=@[5]@}i+ȟpIoʊU-H@zktW̺#k@>]@^ V@KMlU@"8/UWf"uǢK@*f1$hF@;WZb1B0@AG!a+.i@ t@=5@ˏ;ka 0?ߵC'@UjB4@L*ޜx4a@I<9@uz|T#_@QA:@.zbٰ@i@Nq@']TSH.9L@?9c=i[w[r@ D?9vX]o@\ʥj?@2S@na^܂@^ %v@cml@.i@bd} `@qT@GS8Q5mKb@Hq:?Y̬ z@f/dn#"@7/3u}U墪{$@3]fWS7ri@A.A&чK,@V#<(5b@]@4? hōe@>%sv66cE@bڃa@1[i׭ ~kz?9c=id{@ D[w[r@"^ʥj9vX]o@T3Ve@ y{@1Vt 4@~*(W'@ =5@gټ @GS8@qT@Hq:Q5mKb@覲f/?Y̬ z@x,^PQ }@*)'S:S]D@A.@S7ri@9ԋAkN6K{:N+k@f@4翟(5b@ %)czF-@"X:)o@3X@ѱ -v@<9Œ0_]xPI݋is%T@wy^2@ YmL!@lR- 0;$W㡓A3X@:da@qj]鑲Ow@yPPa͔@ C_Xlѱ -v@qj],2K/@,@6%r@EQpi'v@̧Ov;W@6lroml",ܗ<9Œ0鑲Ow@,@6%r@[8@M40p@2ީj'r @[^@l@oLYEu@$^Z@_]xPI݋{m@=v(@@ɧ+f@%@P@E$t@*_)6yA"nb@ .ҔZ|dmArX\Y@$nb&iGA@{DK=u"@F+@Dʆ?@وRSG{e@描z@Ix }a%E@B%gRRƻ Rd'ί@^9xC J{@7Dʆ)@ֈRS@?@" ́@Ix @描z@c(DhWG*v@Y@CFߖig@r,_?@etP@!/dA6J@>Yr@$7D@&ST@]qq{ҥE"tXⲝH+3@ `i@0ɑV@DmM@.Tj!~@+D@g#@!/dԢ[v@XI{l@d2n@P@4sl[@z g2@lzߥ$Ÿ@4W$BF@=33@B} @?MRn&@~O@19Ns4=Ȉ,@jFs!8%ΈE@!YJKт@ >g]qy!AQ@N Nۙ@hk4)R7M@Wu J@:@MhsAy-.@'Wʚgߖ@љ8g9|<$@F Wg@Kт@*R;9n~G|nhk4@N Nۙ@Wu J)R7M@LhsAy@:@'@..@љ8g@Wʚgߖ@G W@T"Xnw?0@, Xڐ:;@9c[v@%dΰ@~2@~V䛅3]@^ae ?@ǟVmړv@.m!]}lv@_fбHPc@TX ^!s@YbGq@V0LSS@Mcp@$z@1nW%ZֱR&_@ M/zT@ahq@CK@ksqFe:@=XC@0]*m86e@bϟIOQs>yxѹ_@Hq@7$RnW[ts@i/ca@%L@Rn&@?ba1nW%6]o<@^乓Y R6_}}ses=ߐk@uC22~s12@t^J@Q s@k@jYr@d2n@P@_A*g@<R@\2f/eգ$^]%q@qWG@jd@;Rҫ9w\@ C.FI@aY֥@<;_tm@or~ t\2fjgj@odC[Ӗ_@{'?F}@dӺ9@A֩NN@Q@&o)[EQʖ@u@0-;@\c@qEF+@Nx @t#}@}K՘}u@&#AKJWj!>ody$w@'C[Ӗ_@eӺ9F}@އ0r u@ @m[Buʖ@M$bc@C4C/@N@qEF+@}.p@%50@&F7wyEvG0.މ?`l(n@ =r}Қ?%50@Ҙ@/.'0Fvd4FdrA7">Er}Қl(n@o*p:Oߓ~Y@gtv@伣n@mu9@飋Cg@SKݺ'@˪IQ= [*ҷ? ~Cym@Qe_,z I = @7 ͦ3N}V~?0թ'ś1 Py`?AKSZc?:O@;#@Jg\@Bm伣n@wuQM4@m3[e@D@# [Sd͖74|@_{ 68@:|ZP.+C$W@Åf5_r`@b&) TMS@*]wI'/g({uZC@J C%jqyI@h6@cm@CN(w鼨Ga@{r@sd-l>[^@ =zRFADzQ@~rPG@yX@åSg):@Q"jchB{[]@Z:?C/@"n@8&7sd-l@{r@ =zR@?[^@IzOyy;5oS@yXPG@jfcZ@Y!TL@qAXwxmu9@m3[e@N(w"n@ؙA@]p/Bݫ "Qُ@މ4Ti>~@ut^@飋Cg@D@鼨Ga@8&7]p/Bݫ(.@;)~Z@{=JR{@5T5>Fw$oEB@l7ZLc~2@9s@=ЌX?MC5 g@^J7Ԇu@_M@~V䛅=Ќ I5د@wIg@|"2&㶰X?3VR@{EPAqAA[@GFt3@CeK8NLyF@k*a)̖A@Kkn y'26+sLN@Z&F)wlfi8e@pT-Vˀ "@ӜF}&pj!]„.NFةޘA͸lSqAEAWATHA ACeK?Et3@r]> ١)@ryfl";@窣a?|; AЗ$a'5Anomē.A-@Dc9*˚(8P@lƳpW Ap@*3 =Dxnu$b@ulWFpآifsQ&phܧs%KH[yV;W@sh;@QsKϘ tfN͗@ ?2K>{<̉><@wêd7<@p@@>A G(0fRKxM-O{x]]tA7~@\Q\G\ish;V;W@ūNNٷQUJWdخ6ު m{͒yʑ6@o $l\2$cj^z@bW_@ #zWEKE@aE @hh@Q@c4%9_i+"1ԖbW_@?Pbܬ@| Y6@k}H|@)\?c4%@Q@BF=@MZtW(@ęu"|*3>A GVZh@SM$gD! @8c3@2* @A3]#F@dʓY-n@EЅ_@Z/%p@ '*0p@D@ nl@(('*@kn@DF%@@Z9e@n<@:Q], @cl#G@TZ@BF=@ęu"|@tW(@ =Dx(0fRKSM$g孓D@'3<@Rg?@3]@2* @V8D@kb@Hv-B@=@{4u l߬7B@gó@B;=A@[A7@24rP@רui+@@𽗧|l/T'~M#i@3+5 &{yv𽗧|"@u]@/a@fF@oRACDDm@hZ뺮SL@e0-B\@7_ 3@ij R54 n𽗧|l/Tu]@呐@,S@ۡ[9@&Z@yk`@i9m?@b;nZO@>$!%@R,@zy@!8%ΈE@ !YJ@as=ߐk@ @١`V@*/tW@^t@kCr|U(P cĕ"_Cl@Xs,%/#苾v@k]="G@?G,@LN~`@Yn@ {@!YJ!8%ΈE@hq@uC2١`V@ @*/tW@@kCr|82(@)eJ(=W%Ps,%/#@"_Cl@k]="G苾v@KN~`?G,@r:o[@lTPzr@ x2zlTPzr@ uP@V[./|CdB V[.@z*@Qߜ@髉@^>כ`6c! .@<@/|Cz*@@@{m9 7j@" ]?᜙-=@ @zj.A;>)1@@F{3-a;gyj @ޟ90z`w@;>0fy A8JJi$@mp}@_ЈH뽵QE@9 &9+yq`ѽ?B.@^?:3t@hP@U%g@Cs#@W@@Х7t@OӪ; ]}bI 5KlCw#t@8a$u4$Y@U%g@4EA@&_ץ@N@:+3t@$WnY@Y8mq1ʗ]@[ J8,5AtG'wL=8j9ҭK@[ J82r@&s|3g>P3}gC65@ !,5&s|3g׬@-Hg@fEʾ@`*3M@5s's@AtG'>P3-Hg@n!*,@`*3MfEʾ@s's@w}֛ f@ I4@ f I4 I4@/pұ? I4/pұڿQHsΪ@ĖC%/fo@:uy@/y_2* @@3]@ f I4:@5ȼU'2{1Brd@ؒ^Kߟ3w.P]@ޭ5N@ŖC%/foPHsΪ@/y_@:uy@A3]2* @ I4/pұڿ5ȼU^o+Q@`ڨd@v9ҘKqn@ေCdݭ5N.P]@xgUs{r@ԧ c@ϯ2tZbw/?nڸ7cRg*}!@ԧ Ks@ϯ?c@N7vYwɹ9 @_V+X_]_@P:.¡? 2K\@̅-xjt@Q>c1a:AEOЌl7@Lq@P:.¡?v*4_@欑xZ@`Z@@Kvfn0AZPЌ`+Ea,/F)a@Leh=@&h͇wo?@w/a@,S@&ߍ@K{`{@jW1@YI[f@gÿJE@n=U@,},@nK-BuikS5cvfF@ۡ[9@K{`{@'2!@} @.tL@='Q+@0;@48@GUi@Ɇ$b@]tA ܮ"AܤVl@ EQ f` ɠ@]5@cGaa)H. @>QF0Ӛ BӤ:ZW z@bsed@~'FN@%xSulWF7~@ܤVl@z@ڹ:@L\ZrcGaa@]5@lˡA` X91@O3u<,n@}Q(70[@&xS@FN@/ib$+Ą@UI@(ϟUO<PI"]u@s|^@ʔ2\ ?@ ZY:8@(I(ϟUO|(@L4|@M&oȝʔ2@s|^@)!+WīY|t@efuB@kk<PIL4|@(aF@dyy@`WWv߯jg@Y^VԒ@"]u@M&oȝdyyޭV@y?;^g@*eU #zWE| Y6@[^=)3@)X4\lt\@(D%@ F_@KE@k)X4\XBP,-w>x@!V о_e:l¿HNOGDOh@nzRIE3g- p@-@^p`j@lP@?j[M`B4}b /֠lZelb@ f@kp@^p`j@bJÆ@"rj[u°@-dO}a $a\ѯWb@N''*kp f@9@VX ^@62@,FL[v3'KRJE:dwVX ^@"NW!@Mi^cMg$ g@iCK帾#+v^rKawB 5雠@CK@2~sؖVW@'~U(P)eJ(18b @amVdĒ@'#.=͛@N?%ks12]YtDF@>k.+@)CQe4 }ñ@"uǢK@/&z/fuPLW$^D462@Mi^cM:@U_F8_inj@Ib&/e8Z͝/+?ZaC@ B.H'@F 9(+@?%y@+@enB*fb>0@Y4ջI2?,FLg$ g@U_F!@h_Y@)aa#h?'uj#~6M8'@Q @x7Y~@V(q =jv@m@7u "DD܃hnƯz@A;W䱸C[Ӗ_@'{r@sd-l@w7¸@ n~@O٩O:@WBP|3@"|^@77zkx@1\@݂ |b84Jutn@ȯȨ@ t@C@DeUï V(q @x7Y~@Vj? _`-l-@9-/z;W䱸@nƯz@A{'?C[Ӗ_@sd-l{r@ O@M٩O:n~@"|^WBP|3@1\77zkx@V@Y@s@5I tȯȨ@MeUï @C@2(!q@jk,H?8ZY@USq@9l6 ?rR=ݭZ@jLi/@T`X@&W szl6 ҿUSq@Z%X[@>e>Kf]nA*F\A˶!2- +N@7m|/1Gy\ 5 2AAx!*VA˶!2^UgL/cA܊xZh{2@fRC@2Aеc8X15%kN15Az̪ˮH@Gcz̪ˮH7(E@]By5z̪ˮH@bdh15A7(E0sq<@z̪ˮHsB/Ts`B@X'F5e@Bj;E@cư̾vu@m8^L@U`eOWpآi\#F@V8D@39,@"=@ EQ ڹ:@H߳@Srf}mi@%?Zx@!أR@)z.4)ռBu[@SP@gv@)8®@/fA@|l@m>@Vѣ@Wmĉ3t@Ap26"@x9@fsQ&dʓY-n@kb@A]0o@@@f` ɠ@L\ZrSrf@D ADQt@g.hK@Í.ya@kæL@7 ]Os@le]qLJ@6Hz0@[xWP^@ݝ @%@oY{ԅ@,K?!椬@yhHzSA}{x2dBQߜ@@.o+(d@]L"Ɨ@gi.2mm4M@&#\h^Xt@ u1m@ÃA4вz髉@{m9 7j@]L"Ɨ@ĄN:@r<l**tp„&#\@m4M@r<l@mlR@gi.r<lZ4@CYw@@M>jl z2m**tp„CYw@@]sI;@myu'` @b3Õ@l1F(A2nф٘:v_@.C}9@e|Rb093@'U7@b3Õ@6[U@]2_"2%;=C@T# @Y*^ I_!Ǥ@@mZ@=[܏j#@[^+hv@9@#tu}@Svj0kxP% s8@=[܏jT@ۄ1pwv@wr[@KX@.k@PqR%x@-vCQrN7@IFrG%\A[@Wm4M@&#\@r+ܙ@ =CR 0@Y=MI<'&5@A[T`g"N@Fg}cJi@CjDXAF@;&#\@GATHA A&#\m4M@ =r+@U(Xlr@`}`#CP'@iv/i @X u@&NMee7@ r-@qpw/u./> xP .z@o5Bpqpw/u0G@y@ȠԳNY@B"N<@ڱGo@{^' \@^Rf1{Ď8~b-@T @=LZv6춦G@ *ɑ~)@wCU,\@ei@I@QzFnT @$Tyt@FJe\,J&F7wy/.'0lP@"rj!Dz@ X q#'ifo@EvG0Fv?j[u°@ X q@c-{@'ʅņ@yOp@ʅņyOpsʅņyOpsyOp@h@yOpsXyOpsẌ́hGeWsasB2P@= [*ҷ?_{ PR@X -CAo} ADo&@GV}Cf XY?6y 2VxU?%^l??E?Y= LR > ?:FR$d@&TҴ"^b ~Cy68@TNm5@PR9_@Do&@>;:ANek>,"O9@_i[zUӾA@-  [^5@tC huzm%@My3,@3{@V“M@ʅņyOpsGVNfMA4()m@ʅņn@yOpS@vCf@_]1Br@yOpsX}Cfek4()m@AyOpS@8@Kт@ >g@q }@ `@"q`2z@kq"_Cl@Ps,%/#@:y@:_Rjc@&[THB71p&mF@k],@$HT_M<@״qc@F>P@R>|@ >gKт@Fe:@F˼"q@ `@kq@`2z@Xs,%/#"_Cl@:_Rˍ@@WMIVw @pi@NL`L@UP\n@״qc`M<@R>|G>P@t@JJ.@Lu9 hM<+?w%jc@WMI?or@K~M'c @@op?xgSiz|jZ@SBUp@8vW?[J0#R;X>a@WYЈGl&@fDHmԞ@U}Vqu@g$$7O4P@&[Vw @K~}R @\E@McT%fT?|@gb@0]"&zhHM@TLX݉؁ C@ט\)ㅗBD@=XC@ 1mTHB71ppi@M\E@2@bܨ ogvBWf'@0]*mJL@&mF@NL`L'c @McbܨGvSAJ{»@ c:x^#X@%m&)@חPlE#^PQ!{@P_R@p Qz@B?HؗA`$'اH@E r)L@%WaےpBqlm?ro@dm;l9@]Spti@("A9@69@wWdB?lf @$}O3f@0q@LC@=$@K?N`@*(ѯw0exB@W;A@O ip@`$'n=اAO,l@A,@9$`}7je<@7h5@+C#O@w T1@6U ~@S(( N@AwWd@69@:0@ў~umA"l82@Tf>@UON@{@K?ZjXdx@Pp@`5+fZ+SyR8|@K3a@ KbК6U2sEWsp( &HSmmBQ!}׎YMu4 pߣY#&HX1{gsBU2@MF, n@-ǑO6tlt\T@a{wr@s'W@pps@ɋܥ @De$@K|]@"/=@2b @@,R# @Y @ᤔU@ |<|O/Y@-Ǒ _RB@kРgS@Ԛ3RI@V@E ;@ze$1x2J@X\ejXdx@Cbl@bl@d@J3`s-j8IJ0=_B@m@:|ZP.&Ag:c@DϡGJj @6X!@*̲ib O)=8@h#@e =RFJ?ev!PDö@#2$e@{V9Qe_,+C$W@\ Sx}@6y,"O9@D ̷"x@[6o`@2*VMS@ O)=8@&BrNFV$E6X@_>@r@@ڳ^Cޜ@s@EvwH@:c<@x!@Gn)i@z'сC!Fk@s%KH[yG\iZ/%p@=@)O1Pp@oA@%?Zx@g.hK@+R>NņE@Z@.~%Au@6|JI@?hDs@U5‚K@܅@ĉ_@IxX@ x"Y?b@BXpacl1F]2_K_f@|l@ Pc3lF@̮̊x@q{}@uX1E#@-[\>(A2nф"2%|l@eQ@K@_Iَoθ}@L4b@ZRGĢb@k.Dz%@ c:DopdF@/jl@0_2e]y2~@1,_M1o> c:Do@FP՜TizVx@E@y1][@i@K'qA{p!> :Uļ]˖yE@.މ?d4Fd7(E̋pԼAle(oiD@OZB`t(@p4@䰅%аK?x5`rA7">0sq<@le(c󈨜A O?oiD@>l(@teSl>SU\F@WBd9/€@_lWDr\@oV|Hv@#@z@+-@{L@ybQnv@؃X mŴ+-@ËF@6,v@KV\@|+A{~w[v3i`_SO@(L@p)3@Nz@'CK帾(L@κ@aB}}Eqy@0Ž4_@,@f?S R:@+Ce:f?Ճz@7;B5H"9@/+K-R,(@!k0LGQ:?AyJ!#@ۄ1pwv@@op?T%Uv[t@0QȱE󎎥@ ![lk߆R(Hl@PW0f]H?@+5haq! j$I@iz|jZgb@4E@z6r@d2!=5s* ؗA@.C}9@T# @F@_IَoT,AjS@@63G@i.e|RbY*^̮̊x@θ}@sW A Im@ 'Cvi q4,"km|@a<\S^09 I_q{}@L4b@ Im@K$0A)m my${U@gwG2@¯QF@\Yx-@c%@oiD@ O?Zp@d@Nrl@PUm@GPհ@F,NV@yf]ue85G8@x]Ct(ш@Ƹ[u@|SYibs@e6@@6:^E,K@Z?/7YA{I@Rs7gC; O6:^E,K@Tf>j@5H=(]7saS@^ǥ?n<J@Z?/5H= #@t/h]@ qpzB@<@PS@Hx- +N@܊xZh3ty{@J{LMBw8l (:F&+ffB@NJ^ '@Gw*Gr@b*+cDA7m{2@J{LMp]?@;zECm)F[Y;@%yep@wg<@e,{@Ou\Z ׁ)x7?S@х,e,{@ݯ\@FKy-ALJ4-yzղ:3Z|!@1^+)@UT_o82@4GJ|@{ccU&ɉoi"E@ )j@PaP@v,o\@3M"(4@:]O W@Yiq2@݌KT@𵯺r*3@R/kf3wI@{ccU(i@LXjҼE@HG`(wU17sP@o4@3SA@ @aG^<@]s<@,9@q xR,@^>" ]w@˸@Che-Uכ`6c?᜙˸@`1@U_߃Pn)1@8JQ@Ψ 7N\T@5 ٙ@ʤc +Uݛ@@F{3Ji$@Ψ r{@Ep@'Uv*cc?5 ٙ@a 6H@ی#3;vr`5+S7;_0] @Q"o@Vl@!mcz@h*@R:@o fZ+ R:@BQ"o@/06v@㙖/y@TЉR@R:h*@lt\@+ /Uv@0~&8@6kDQPz"93 %@( @0~&8@ߚ@Q;([ZA7@-A}FAsubc@I؉۳:@.lDu@@Gⱛ1Jy@b l@̺)Ȋ]<* \X@~!j@"4E*>@툲j@27O<@woVr$:@9D@,UQ@&&8C@aݟSm,^p{wcč?ԃtm@w?J&&cFT@yg"@IKf+DT@X Lȁ@>*?Y( P@@ \X@$4E*>~!j@ 27O<툲j@I{j@ B@ⱛ1Jy@,UQ@1 unu@\~Ӑ@c6%z(j1$҆s`s#ڽ]@j2>4@b l@&&8C@\~Ӑ@c@fZlj"CdJJV[|Nh`Hl북R'd@](=@$ L*ޜ.i@ =5@$2,@Nw|@r S@_57@̺)ȊaݟSc6fZlj"Y@fՖ@%U @%1*0u@ j? =@[5]@Fxxbd} `@gټ @ p 9@HSr@nAR*@( @]<CR 0@U(X30<2@|U@%{~"@!DKB)8@9KSvST@*<.p=P~v@^Z 34:iMC֫k*a ١)@Y=MIlr@|U@ 4"@bE< 2sWe@m9rSUn@;jRp]S@Nn@|F8@p+@5Y@w^-y*?ˤ=|&@槺F@.~+rՆ@t l@5Y@ߩP@jE㡀i"m@ `@@z 3yo_@]@koe#_gdƿgk5@0@W_?]yo_@u/[@rnƿ_00@W_?,S@ +@,E%%m@C=1@_fбH_~H@ar)L@yf]u~7@O b R @ Q$Gc&ɉoLXjҼE@3tL_h@RnP@w:4@^]i"Ea@ ?z@NU]bCKPc@pGcskߍ@!Pge85G8@Yޫj,8&~@((JpX@i"E@HG`(wRnP@rf,,@n)NPM6x@xЕV&v}-a;gmp}@iLMNA?i}@NXMQ߄#B@T hhh} )qQyj @_ЈH?i}@R5HNA;;XMyj 4)@7NEp@Ճtm@wcč?U@й''@U|WS@ ަw@+@@҆#=ԯz@ƺ׿CubPIY@=yPD@ZH-8:l^@lbABi@RjK@}>h@\T@'Uv*ccčԃtm@й;^@U|WS''@szBd@Ў ҆#@+@@׿C@=ԯz@p-}@YH-8@D@lbABi:l^@}>hRjK@-Fyp)@H+Pnu?-s"8vW?"&CFʛ ?[P uT6NCk @NXM;XMA*"0)68&?(\Cu@(vP.lp@s,G@[J0#zhHM@&f>t@I| S]@6.;XM*"0>0XMAk`"7n=@&cFT@w?J&''@U|WS^A/۝@h@]H/K)z@{1uM@2KN,w+c@[Ub@+6:l@NUy ;D'zC;)  T; @4/ @Ki@/)@7@I>h%w?J&@&cFT@U|WS@''@h@Bc%5*@mmѦĞ2KN,w@{1uM@+6@+c@[Ub@OUy ;D@:l@tm:iLG4/ ; @/)Ki@(I>h%?7@>CZ'@r3Q_|@Ii@]5@cGaa@5 ٙ@c?< 򞚗yg"@%U @a)y31 szBd@]Hmm @PljYlz|[f"soA@3JoV88V@yӶ Bt{@gk@AQ@9 3W-OڍcĞy'RZ+|@ gs|@"<@cGaa]5@ʤc5 ٙ@ alJ@IK%1X@ަw@Ў /K)z@ѦĞPljYlzGD|@wW9fv 95X@dѐu~lg@jIgVwQ@x\N$;6@:Ϫ/<-)GŸ4&3 'hqT@GS8@^dl@ZB@vU@̚6@|]$@z@LNHGS8qT@YB^dl@̚6O@{|]$@ZB`>l(@vD^O?,\Go@x V*(t(@teY[ƿ|8TR^x V*(Fr@KRJE#+v8_ih_Y@3@}Eqy@k6%Au@Wf:dw^rKawnj@)aaNz@0Ž4_@Wf9D\@259( @P@s|^@ʔ2@X( P@>*?=ԯz@׿C@+c@[Ub@+6@3JoVv 95X@kg$@_E-a,mƮ@ttdALt0f@h^0Ŕw@O~M@4y6*x@~ YL@n`"'T@?9H#^9ʔ2s|^@>*Y( P@ƺ׿C=ԯz@+6+c@[Ub@88V@dѐu_E-a@kg$@ttdF>@h^0@ALt0f@O~MŔw@~ YL4y6*x@_ZaV~8c@?ߵC'@tĞN |֍GӟS@1'c@|GU tZKw=5@qoP104Pgc@_RUjB{h@)23)L@ θr|GU tZb|@ϖGW QÊj@]q*R;9n86e@#["!أR@Í.yi@Wp@VAgEߜE:2Cى@R55R@ws{l[@f@P b@oMqwjͶ@WE/@#IjL@3[x !*}}@ |Vlq;^h@cQ:So:_y!AQ@~G|nbϟ+y@)za@{H@O`\@gEߜA@A )e56ޡ&zˀD@fl[@_^tbq@yy@"5 %h]e[(~3PW@XQ@iw;6H:@2}.UUj)僐$h@N Nۙ@hk4@E: [HN@Emv@c.!9@Kzd@@@R'LIO@Bo@cZ٘@AZc@s"@_}GX;b@! fY@Ų5q@iN~@F@!e8@hk4N Nۙ@2Cى@)e56Emv@fO^}@Tzzj@"ã@oI?FBoKIO@AZccZ٘@_}GX;bs"@Ų5q! fY@FiN~@ 0aQu/+6Ct~@-6@m?Sy@a@TLX݉ ogJ{»@x$A= A )j@U17sP@w'b@_U)PA.*p@wG@ Ѵk@QUƮE@Cu6h@vpF@b'Kw2aTϺ햄$HTP\n@WYЈ؁ C@vBWf'@ c:x8@PaP@o4@_U)Pc3Z"@5%U@Y-@ebQP@\Sy+@8aN@ >,@)R7M@Wu Jͯ>@TXIOQs8s%@ %퍃@?Zf@+zfX?MwIg@苾v@k]="G_M<@״qcm6@[9/i*ȕ@~(?Wu J@)R7M@T"X ^!s@>yx'U#j?Zf@ %퍃@+zf@@C5 g@|"2&k]="G@苾v@״qc@`M<@[9/ix9EӖ@(?@*ȕ@ 2K\@欑xZ@h\4$@}Zq<7jO[X/~y<@!5V_84 gi Z|@4UX@̅-xjt@`Z@@}Zq<7֘Fm#@X/~y<@zOgma}.$ E|Xa@~ ^>@k,H?T`X@p'^41@^!Lw'+@kuVE8ZY@&W s^!Lqf@~Fh]"`@`c@)FyFS@xԲgnx=ƞho'ȃ@g&07@bOF=@)Fy[юs@T]n*@daR@O+F j&E@:?\p)領8|E @¼p }@9s1SR55R@ޡ&zԒ<@Yv& /Т@ l@Z'59s1S@¼p }@ws{ˀD@YvXxK@s כ@Jx2 mGF˕JbO @ '{4uؒ^Kqn@ 0@k4%x]7L)@/(ԯe~D<yPLs@G]R@U>9r> uB:*0p@ lKߟ3wေCdk4%x}J@p?!E1JM@!Eqݣx@Cmm)̖A@ryfl@Qy vo>N|FJ$)b@Rxbct@Kk";@Qy voe@WL%*b@%d;|)*qnt@T<_L`f4]FR=@Kw=5@ϖGW Qˆsq@S@:0@dr̈́$5y/@Ĺrym%/\@F*@p;* =@S qoPÊj@S@owd@>9$hF`-k改X5@Kxw59@Q3++M,LPDDE@v|>+@oRA&Z@jW1@} @ͭAXvǕ@V.u2ݡ`%\}Ta"Әr]8N@Ǿg2@L$nP6s]ҡ!@g@! {?lCXvǕ@Zb A sr.@w !5 @kOa ;U2@B|ï@ K!@MauGAƪ6( CDDm@yk`@YI[f@.tL@V.u2 sr.@Lz[ @ @'2@=ΔRNΊ@!]K@a@ |@5;?m2e,z?@y7qY8`{s@m[/鿜2Dc{<\@qvR϶v@u>$N@>Ao'&lHu q@WFc@Yju dq\@|Ijܭ?eƢ?!~OQAj?6K&"y?i*#&nƒ&eB@iV2lAIN΅?Hq:?Q5mKb@fiE?njBl@pJR|?_tg@SU\F@5;?m2@ |@y7BElAm[/?pY8`{s@{<\@QCR϶v@xÌP{Ӽc@=`@@\_<Wju @WFc@|Ijܭ࿼dq\@\&UKUeG@10!`{V@+|"l9R@A{8@S%T@:u:M֪@"w@@:+3t@./>y@Ƞ,Φ@=ߴ@kKyUDS%TA{8@cɺ@awt@Х7t@$WnY@ xP Գ=ߴ@@Eո@kDCy ,ŖIiu;T@^+@t 8z[48@z I = @Åf5_X=s2@UoZ 2VxU?_iϡGJj @[6PA@tk%@虩:@6x=]@l<>e@e2,Q@DX\@靮B@Y8Mr"R !gx)Vv@N__7&,@g㸱@O|`@ sx7 ͦ3_r`@b[Vb/"@%[zUӾA@6o`@jn@p7?6x=]@@۾v2[@>6iBc@.l3@F4k1#[K@dMNlr?@ֈRS@ @[yqq?3)WF@zX1T.@ǭƼQ@وRS?@[Ek@sq8F@958D$k@18ZǭƼQ.@V`[y2yqqsq8F@ZجFz@xt6@<Ē90 {k@jB@2;9v@<1ϑ2)+f@TZ~$Bk@*!]@ 6qIxokp1#%߱g\ !@O@Nx?..b@G@dӺ9@F}@O٩O:@n~@'0E|tiA@ݖ@][^@ =zR@CRK&@LJh>Pckl"͇wWBP|3@"|^^l?-  X!@2*l<>e@۾v2/+@!@5?@64Z)_x@F!+맩"|^@WBP|3@?[^5@*VMS@e2[@!@G< nF@vY{@-Ҿ)_o&@P\&c?{4-*@#`@#1Wz@$D;@ɨ{n$n`5=V@q@j@)[EQ[Bpe YY0կ@њLU @P\@eZ>o&@h}[koABO#`4-*@D;#1Wz@0l0@w-'@\zB8ӗѷ@,Mщ@OT@8&$l&@&MИpT<Sޜ@DX VW\z@w-'@,Mщ@,+`\@&YXpyaG1@ M Uk@eoǿ@hMnr@W,t@.vt@k@ou2s\@'26+窣a:}npac9dΏk@0{_B@hMnr@'@ :_v@X.}K'L@u@j}r@=LZFJHm+@ P@(Jh1s\ 6vLFj@eVW@v6e\,J P@ܖ%)k@s\ WX$oEYV;W@sh;FVZ@yu@v,o\@3SA@A.*p@5%U@&zFJ@dI!\C]@^M7@/Z@tNW8@;TҴ"Ɍ"sh;@V;W@$E6X@.Mn@3M"(4@ @wG@Y-@dn'_@C|4@LXC@p^2@bh-W7@ޟ90뽵QE@ a 6H@Q߄#B@yj ubPIY@pʈ#8@Hz`w@9 &+Uݛ@ی#T h4)@=yP-}@HÕ@QsKūD@߬7B@ګ;@uՎ:@)H. @lˡA` .4)ռkæL@_>@~%Au@P b@_^ttse @MLp5@>-ot@(ȅBD@!|7@BRA@ XKf$cN3@Ϙ NNٷ nl@gó@E4иl@7y@>QF0ӚX91@Bu[@7 ]r@6|JI@oMbq@M@U*wq@\7H@ݳ'@*q[@:c@CAw@jS֝.~@a{wr@I@V@-ot@\7H@Ue'@Tշu@@@rUk^@íJ@f&Fa@m1h F::t@wg@%o=@ś1*]wFADzQ@IzOyy ;)~Z@k>@& z!kk6}@@wyhCD@$Y@ PyI~r;5oS@"Qُ@{=J& z!k&Ee϶@~1raܮ@ꂈ44<ĭV@~~V Q@|s5jV@srQ0 *q|s5]p@̲ib O)=8@h?oUV0 +@1o.c@xÓB O)=8@&Brm +@)^SxÓB+w@H'p5@i8|ۀ@ (9ܔ@vax@t@?@2;>gXC@Tj @k͵Ak_!c]@8pb9@+@bJ=aG]@F@]l.@-]:=n@iɓA|@zD")vax{V@3ʫj {k@]ΔR@1@"67bVN7@@,RzZ1Lq@Y{B@dmlmx\@y{vZX;@-#Ar ;@<' Z&F)w AA[T`#CP'@!DK 2sWe@"ӘkOa=ΔR'2@"67b)@UK~iЀ3`@Y{B0Lq@їH~'II@3@!Ǥ@{L@6,v@ 'Cvi )m}(A'|KVQtU-9@'U7@@ybQnv@KV\@q '|KVr D.A$@DN*˵^n[`e@>W:@LhsAy@qyy@LIO@Bo& /s כ@ۍ@ ZcAwk@籁aLET_@h$6@3=Jk@C<&@d<§@/[)@'^I3`w6"@MhsAy:@wjͶ@"5 Bo@KIO@Т@J Zcj@籁a@Awk@k$6LET_@C<&2=Jk@.[)d<§@l(n@Er}Қ /֠l\ѯWb@#'c-{@s"fj@X5bP@ibK@P8 } =r}Қ?l(n@Zelb@N''ifo@'@ TP@lC4@P8 }%񄁮@_1oL:c2@:]O W@aG^<@ Ѵk@ebQP@I!\C]@C|4@|\"֋h@T7y|sЕTf=V |@zb U@|sb3@Қ@;`bǂP <@Yiq2@]s<@QUƮE@\Sy+@^M7@LXC@T7y|B4ݦ@G\{@uJ1@)@D<6yK?g?2WdخDF%@24rP@xf:\@nZX!iG@)8®@6Hz0@EvwH@܅@(ȅBD@ݳ'@~fVP@@@u@yK?g@y@bΛo#@yK?g)ꞗ6K>6@Z9e@רui+@F́@ttF#@/fA@[xWP^@:c<@ĉ_@!|7@*q[@rÅ@rUk^@yK?g@4n@ڕʆ@Qs@-.@'@W%hcZ٘@AZcAwk@籁a@$V@;$u 3F #@Ά?@cyW@GE@rjZc@3/.@3j^@'..@E/@]e[(AZc@cZ٘@籁aAwk@;$M2Ywa@7(.7@n"ƩcyWΆ?@rjZcGE@4j^4/.@?T- 0@S#IjL@~]7L)@p?!EsЕTG\{@u 3F 7(.7@}4۬@sСQߝiEB)Q@ϔ UL^/.z@3[x3PW@/(ԯe1JM@f=V |@uJ#@n"ƩsС,@Xlcoi@o10K@S\g@Bl&s@r7#(vn<@@%@ \X@ZH-8D@NUy ;D:l@ Bt{@jIgVd@r@h^0ALt0f@#gjR@\AZ2PEށ@ȶ$,TOIb&/e8Z#h?T~cq@LN1Q@6ML"r^U}v@Rf2V@91)Ő=@ yT@D_1@͝/+?'uj#LN1Q@5Q@s_iV{JqRφ.<[@(ː <@Q"@FC8@өX@tZt@wѿwy^2@>y̧Ov;W@j'r,N@w@OӪY8mkKkDC \ &@y]@?tZt@ YmLPPa͔@6lr @8,@ ÍY; ]}q1yUDy ,Ŗy]@SnH@ê)?Dh[a@يb P@#Et0Zlfi8e@З$g"N@ivBw8l;zECB)8@m9rSVN7@@UK~i @ƫ'Rvw@@9s@.jcy?@|M?Et0Z@يb P@pT-Vˀa'5AFg/i @ (:Fm)F[9KSUn@,RzZЀ3`@ƫ'Rvw@sJ@h*xUE.@<Ē9MY {.+U@5HL֫2@3"M5HL֫20<ܕ~95HL֫2@Ҩ~0C@@5HL֫2q~Wʚgߖ@љ8g@5s's@ !*XQ@s"@_}GX;bLET_@k$6Ά?@cyWFs @`Mi@91ԛ`'W@GfKr@љ8gWʚgߖ@s's@w}֛}}@iw;6_}GX;b@s"@h$6@LET_@cyW@Ά?@`Mb@91@i@GfKrԛ`'W@7jO[X/~y<@ gm>8]@ZLJ7D"E=@X/~y<@zOgZL+[2q@&X%N=@AyW0D;^{@Xⲝ$Ÿ@PG@yX77zkx@1\5?@vKCih@2VSn?HBd<H+3@yX@PG@1\@77zkx@64ZY{@2VSnP!@h^Xt@r<l@M>myFS@T]n=k@:zjr@2n:}إ&t5[@q$m@h8(_OZ u1m@mlR@jl zu'`xԲgn*@:zjr@cÂ8@ټ{pexQm@3_<,ZO]2Dc{<\@2nټC6ɬ@GԬC_92b?ؿ{<\@QC:}إ&{peGԬC򵍹B@z2b?ؿP m-Q@Yրz f@*kp%s<=ӡʝw^-jE㡀(@21v @@l'8F),TBv@Ph2:?A(N}{0KvfnpdF@FP՜T!5ma}`^@Dy(@~>`@9KS|uDt283c@c10A/jizVx@V_84 gi.$ E|Dy(@6@vb(}6@#Jw@dM< h^@ r3_dC@:0@d>9$r]8N@ ;U2@;g{ Kp@m+a 2ZU:m"cz%@j潡.H@fvN dΠ tA@ĿtپB@lR'@r̈́$hF`Ǿg2@B|ï@m+az[@/I 9#@qa*gH@s9tca FB@m߇pAb5y/@-kL$nP K!@NΊ@!]K1Lq@Y{B 2Z/I 9#@0 @3 H&X@,`׆M ?O\y @V$b@AĹrym改X5@6s]Ma!]K@NΊ@Y{B@0Lq@U:m"cz%@qa3 H&X@Cd@`xrY84@D%&S~A@Gcz̪ˮH%/\@Kj潡.*gH@,`׆M ?`xrYcCd@,;@\n9@O_(z̪ˮHsB/xw59@H@s9tcO\84@,;@%zU@&c)NnC@'zCtm:iLgk@wQ@Ne@Qa*gnvƏbb@;)  TGAQ@x\N$;6@Qa*6l|*@Iz$D@:VސbYZI$@ )_@ *!V о_`uf!Xnve@)_{m@U`ze:lapeGRe@'dg,ԟ)Ҿ?)_Bx#P]p@3*#PZG%࿚WN>@-q@k:\A@ a;e^@,3zג~D@7<ףd,3zג~D3*#P#`@jJB@@P:\A@#z҂;C@k)@]-C,hwM1%!'@_R [?MLS݂ |b8V@Y@s@ZG%jJB@@L @m)=Z0m>FtJ\c@]T$Ђ3oۈ@4Jutn@5IWN>@Pm)=Z`8@5FcQ: |SvPdy@1m@ ![ ]_L@`DXf7@np"-(k&QAoF@u)t(d@m-j0kxPqRvv\@~'te@qlk&.`dUs@SG@3G~眑(oF@OuB@"d8NFmlv@T|l}H|aE @}H|@% %x@1ĮtŎ廿u)t(d@"d8NF /@9_ohh@"_hh@)\?s8@-vC0HŎ廿=PHm-mlv@9_o@u$o@`9au@q_@fTV e5@]Spti@w T1@qvR϶v@n,@zys0@g!'fY[_9z2b?ؿo^R@$!$@2NO@d@SXc5z9<iuw@@@"\@=M@ƒ)0@G'DX@("A9@6U ~@R϶v@xnߍX@v@h1Φjq3? R2b?ؿP ‚"@:& T+?d@Sn\$@:6!wėę a/H@*1]@_&#V BT(@S((Xc:6!w`@w@md33kV"@f{cg/@Lz N@A5z9<ėęw@!Y8@ a3sa3fj-@t5[@xQm@J4Sܰ@񃯗m3kZ|N`-q$m@3_񃯗mȰOa@ġ51Ǫe@nw?0@YbGƲ2G@?q S@.߃3@򼝽L@x]CtY?]R[sbʯ׿ @A(wb=|&@"m@w:4@n)NP@l'8Fqġr5@AcW]˃@>X1.@V)]dd$, Xq@6*qQ\!x@|@_t`d@2(#f|@Bbt(ш@{4&@v{Z5B@槺F@ `@^]M6x@),LAcW]˃@4E@{ު, @P-V@O?*Ϭ@: :O@ZW z@u<Vѣ@oY{ԅ@x!@IxX@BRA@:`@íJ@y@ڕʆ@H`b@f^r#d@C<̉> m{cl#G@1/@O,w|@By\s&@bs,n@Wmĉ3t@,K?Gn)i@ x"Y?b@ XKc@- @f&Fa@bΛo#@Qs@f^r#qE@aTh%O@9|<$@G W~@5T5>Fwyhܮ@:\A@#z*Mcqff@Q@c4%@D%@9%kVG@z"93A7@ F::t@m1h bW5k@$!%@,},@48@ ZY|t@߯jg@*eUs`Hl북 j?*0u@@<ԭeyg@N|FWL%*b@~@I$)b2PƔt(J$)b@%d;|I$)bP:,@h`Ɣ-Q(&zpH~!j@$4E*>:l^@lbABi; @4/ 9:ϪD#@WY/Ŕw@O~M2PEށ@Z6[ͻ&AIArA?O @NF~*Lq }enC"4E*>@~!j@lbABi@:l^@4/ @; @ /WY/@C#@O~M@Ŕw@Z@2PEށ@IArA"HtANF~*@?O @EL\;vg@ѹ_@=*]@81@݌KT@,9@Cu6h@8aN@/Z@p^2@zb U@1@?T@m᥺@$ƛ^F#% 95Hq@x@RH@𵯺r*3@q xR,@vpF@ >,@tNW8@bh-W7@|sb3@)@m᥺@n\A@d'764\P@=Z rg;Eԧ@h\7$V"@t^J?G,@KN~`F>P@R>|*ȕ@(?@$ƛ^d'wf@,\@YVnMkg@h\@f;Eԧ@RnW[4@<B~E@b-Ĵ'@t^J@I>@LN~`@?G,@R>|@G>P@~(?*ȕ@F#%76,\@<~L@J@/t8@ϸmXWpcQ:SoUiN~@Fd<§@.[)3/.@4j^ԛ`'W@GfKrܳZ'@b^EBJi@RIˀ@Jt8J@Cnn,*c:_Uj)F@iN~@/[)@d<§@3j^@4/.@GfKr@ԛ`'W@b^EB@ܳZ'@RIˀ@KH@! .@-=@uX1E#@ZRGY<)63G@Che-U_u>$N@ÌP{w&/MA=3kZ|Nġ2PƔ{J@cPtT||@@<@ @-[\>Ģb@1[\>@i.U߃Pn>Ao'Ӽc@ 2I`-51t(h`ƔcP)d*@έ2@WZ z`&l=`@tT|έ2@Pe@Krr"Hu q@@\_<|@@WZ z`Krr"4 nAƅE>*@]GRlvz9⡣@bތy@" ́@zX18D$k@fxm'@#1)PL؟@+ Ů[*94j%Z@G4j@솈9?HGRl?ƅE>*@bތyvz9⡣@G{e@T18Z+P(T6mux@+ Ů[*/M'@e jG@¤49G4j@4g@=rTi@nKGUiKi@/)gnvIz$D@~)>@vU*e+Isi@.2P@-Bui@Ɇ/)@Ki@Əbb@:VސbYvU*]`N@uvu@늴B@?Q@=v(@ `i@4W$BF@sy@ҫ9w\@rZh@&i@@|ŗ}it7q@N#j"@Vs1:]aF.,Lc@`0@9M+?@@ɧ+f@0ɑV@=33@*:Y9f@ C.FI@lSU@ə4,@9 MH}N#j"@;@RwzkER8,m÷2_c}FABX٪'w$*_q "@nom}cJi@X vST@;jRpdmlmx\@їH~@9s@h*H@Qp\R;!!YC@m|/2T,bqבWcӜF}ē.ACj u@*<.p]S@y{v'II@.jcxUE.@Qp\R@&Qdwr%1D@~=5W69@wWd@!l@]@x^Y@ȋN@ׇgh} Y尵;:ȣ2Fu(R@KmcYE C5|8PRBt4HWr$i@wWd69@]!l@ȋN@tܳ@SEv,Gp9!(!$KpN:K7d{u@SEEϓgI/=_$V`@@1W]@iQ)3@ è9(@g@`(c@b*@ULIog#ԑ@'?0ۿ@t@?@3ʫjg-Gʘł@ r@V [@諽# A@&pj!-@DcRx)*qnt@W,t@ :_v@|@9T_4e)@6DwBb@]„.N9*˚bct@T<_L.vt@X.}K'L@9T4ʉq@*%]@VG fpؖS@Y'x@%@P@"i@Qp|P6N@,Q@>6iBc@uZ,;m@BR@y_>B8Yrx@:/D;|= /V-$]IM@X`=r#@GgG@E$t@T8@wQ@DX\@.l3@BR@ZI @Zm@n*`W+hדfTįv@;|Bvs@swJ=o|@7fQB:@m\)6yA*_ʖ@uȯȨ@ t2;9v@<1ϑ2@y_>B8Zm@c @Ds[2C@Cvqʬ}3@黲c;@Tįv@NJ0Wv]~@{Hۦ/AV0uo>C r@*_@)6yAu@ʖ@ t@ȯȨ@<1ϑ22;9v@Yrx@n*Ds@Cvq@[2C@*gF s: ٣@..>AXFw>n @SAd џ@GC6u@+rtާGC6u+C5H"9@h*@R:.~@TBv@cMh2:ῒ@&@` 9@osw@?DgO@WwDj>]e:/+R:@h*@+z 3Ph2:?TBv@` 9@wf@{ds@ t57sа@?e@o?C6%FÙ^ݜ|G"o @ tau@ 2@B t@#iWB>@f|Ҷ@\s :pM@IJe@1s37IEBvQQGs :@Ҷ@IJe@m9AP3@Blù>ԑ gj^᠉|Qm2@r=Z@%d>, h~9_o@1ձ@n:tAE)yiz@ݵ-e@.Q9@s{iPO\ =@0N^@ =@0N^@GV@4#@(g`@Ub$@%d>RgA;3~Zr@!X:ˆ!;@ @I|[M@Sv@ lewŅ@pFz|R@.HGd"L:bf0E@Ph@bf0E@Ph@n3s@-6I(a@lΚ9y@I-Ee@Prl@{&հ@GehOx@.{cUH5w$Prl@~0@Wx@8cb@_MO[a hdZDe@Mڥzp|gleAP+);PO7}k@Ço@@ =S@zuCn  @.@(v@Zщ@TrHx#h 3TAxɖh@c"L{c@rl~}D1@_tmSaeOKAD|Lq`@P+);POE>uAxP)@ Rz& 3n@JR ƀ-~+.8@FI;1@4< (v.@'TrH@Zщ@A ugk40>/5.b@QvID c[DUl@fU]Ї|yW_A( &\KAJqs7}xP)@d7Z^@8rhۑPźߣ@G@B 4w@ , unB@8},N<@| @RJyd3S`l@rEzk@wk@ Rz& 8rhۑE/-@GPźߣ@|* !@-@BԌ@$$żJ1\c\-@|pˁ/@Ug!Nd : APźߣ@G@\Au& @˸45u@ۿPv@DU.(@V Yc" +=u pe@A}@vOfG@Pźߣ@u& @~NC@?ʸ45u@~DU.(Pv@klx1we>gvOf@A}@MW?p@[<'ϝ@w]p[<'ύqS&ɾ"dc@W'g@0l[<'ϝ@a8@[<'ύpxIY5Pj@vCWS) I+͟@b_M@~U)ew]p[<'ύT@ȝ%֡@[d7-D@oD K"x@~U)e@b_M@[<'ύpxȝ%O{B@[d7-D֡@A{@dz+CLy@"SÇo3n@B 4w@|֡@[d7-D*1$@xxP.`Pz@_߰Tސ{qL@*;3RIKve@?k71@ϳό@巍7S"S@+CLy@@@JR , * !@[d7-D@֡@xxPPR@Qo=H6K@n~qǓ@vHc֠@63Nx@Pӻ :'4+@A?X8@$\z-iȱ&G4@wJO g@5vt@:_1@t5ʟ@I@B@b/f}@jx|/*Z@u?U}/DXX@tlkM@N @V2 z@M9D t@!`>j:k9@?j@S"@{ eIAP@!ZAa@JH(h@lS"?j@TT@ߔaBdG@s֦:wn@O}n-l۲qJ@T'c@3 o"S@'Z)Nr۵;ò@THZ'ڗ·@gp޻@ıCJM/*otȸy@tGlFN@`L*6wF[n1rƮoOFu+ ?kOw- C?AL@ǻ_{k.@1w$;fGt@,c;evfKqR@0*Arg*a <@`L*.#@[n1#6u+ ?.ǝu4V@0L@%|NY@G:Tc(H@oF5<,@fIs1bЅ@$23d@xdi"@XC@!u)@W@mt?z@˴ n~b4J;/뻸r"@@s& [N6I0 ŘoA5[1@WD@bb>a@rR>@KE@>Y$V@xr;7J@cOP1@kf;?Y>DE@OLr_8@@]@I^@Tj @)W@mt?z@@ @צ?,"Ϸ%[S*ΤQw@&o\rc~?, @xFpZѬ >@&>@FPW@:Z#{h@Gr &@Թm@q[Uݒ{bOLr@>DE@^Uoؑ1L+y@5CyD@ F@@ce1 xuT@mٽH@aMa Q 6u0@<})x@vYɵ@@ yJ@P@T])t7@}jN@N0`<@>"@@2k<@Z}@̸ _f,W?jn@?E* h[G@&.b VI Gf@2?kwz<@b#i1+@@2k<@ٖWe@̸ _f@Z}@Z FQa6:$Vj[o9&.b @G@yſVI Gf@}o@_@0^βf@mk!7V@m;QAz֘Wa4^w_@Ew@X"seh@'%z fzc]@s? yTgPSNj@V@J{ @j~j3_+7@(V7#<А@n"j@wd@J{ggf⺷@n?0k3yObI@(V?_+7@Tɐ@#cR!jN @ /@,H~}J{Y7?B*cE@3gҐ@S/-M@ML$@j@5@+af@^.%Q@b~C2̥p Q@J{{@ /@JN'n?@Jף&";d9ǺĐ@*Nc'{@tΒcݰ@=(@M@[^Bj@ɦP@]9@ٿ /+fɈ0z@/d@,H~}Jף&UA3WZ@KpaL#NJE(wuqHo@,]p@fIY@o7@ٳ`!m@w]Qma5(BNe*h@ B'@)AЋB#cD@k=Ґ%=j7@;aMJ{Y7?";d3WZ@R?\n@Hj(l7kYSoV!'ϑw@N@f7@`!mo7@Ƙ">̷{0silͳ@|}%}s@<RG&эk=Ґ?AЋB#cD@#zXLTjb@B*cE@9ǺĐ@->G@%B1/@ ,eAx@o8c7oU;_@ﱾڋ@3gҐ@*Nc'{@%B1/@E=@, RУhل@q@e@o tpL@;m| i@u;@~$VQ%;%@샯%Ń@\x@*G}{zd'ҵw+)S$~@Y@~$V;I-3@[@|ھIp@cv+{&2@FnG9fC?@WS/-M@tΒcݰ@KpaHjQ%;%@[@guAcy@,@ N@]p!dd-G?ܐ@ y@;"@MzǤ@ML$@=(@L#NJ(l샯%Ń@|ھIp@cy@5XރAցy@ip@3x.ФݧؙK[z@' Zd@b/)@{f_@!@Ro1##@k|}Cњ@ ~Em> 6n@ɗ@zRZ@]ٌ@Vi3k@Ro1@!@k|}@##@ ~(łq@!r@uRZɗ@|:2pb@KY@P%}@~WEvp@!ߒɛ mpL9XA-5Ci@^^ؚO|ڕb@3Ǜه@sߛ₃@P#p@Ҫ44@A{ˌ@n,Fְ@KS@_p#@B3v@0ƵS@p~,[@aZB@-q"@[d@@fI@!`m-5Ci@xAOJ8=:*1k[}@H[Z@$Y@#eyp@=~x@%k `@ϓOĂ@y?s`@yUu@t@R@7@,k͓@#a=@n@c`Ԗ@bήjB>i]0g8A@s/u"j̿bήjB@bήjB@;~@ 6гȱm@OHA֎-@ӷLgxi$LՐ@omtMRx+yw@A8a@1eױ C4f};@@ct@@ҷ@֔\Su(@wG @&G4@;֎-P6v AҷLgxi@@omtMR@$LՐ@gվ?b@vYBK@5Uu {zD1S@RɠM<@#.j@(5j@Jݧ@HeB~;b@꛹9}+@ cݰ@Oͳ9Y xnIFʐ2_c&̩@02zJ1Z@:x@ cݰ@ @},Jo 5ݮ(5aBL:02@2_c&̩@M7@\}@~۩@C[6ɯDg@+n{@R@Ugx@@~$.߃ùg@ލ:@C[6ɯDg@,|A@zJF3-e2܅@d@2YFښ{īZ@gt'sq@;Jȉ!A˒R@XeN,j6sMs@3Γu@X;OJ0 +n{@zJF3-˒R@cy# A>^\#qC yb}@i0@+n{^Đ@['K_\,;3~Zr@{CA7V/@8d<8+@M>ϙ@ Mp@j׸7?[5q@kt h~!X:7V/@Z:A`@S-!=w@z}N˃j@ 64&>J@{DK0":%\@9.=@"7[7@o/d@q@lUT,ERTOx ~"7[78.=@q@YFP@ H]RA7?^I{ w g@>:@?Dfvw@j#uv@ Т'a@ZN{@*wD %&;-PHׯ@Jp@y>όHa `>:@?)0@d1Cp1@VAa@Cŷ[J@&©謑`Ɛ.f@bi@&`t6`wz@X"B>a{z?rA]@JK-a?rA]JK-a@JK-aavMù@JK-a@Uy¹]X&A'VBD@ @h6t5 G΢"@W@]S`P@?P>]wD'Pf(v 'VBD@R.AL|@ r(^}@r?(l@@P@]S`P@ @:vid\@1f@?3ar@:TNXs땊ei- y^AmT@]EJ@l*@@khc5@0``\q:bY@Pi#Dfdk3q@?3ar@b,C@'QngǴ@/]tY@q|XG b@@1)5@[%VLdWt@y7\DJ t@z@ jQ{\Hn@xe@zwӇwNր[@!z@RX]ӮvӇ@4%@v ;@z@@|e(fDbBv@ `ͨj_@S H@jZ!A x@ `@ wp@㭘@%q4|@J@P>iXj@6T7c@E\K{K,%iXj@+n\~@p܅@ @RR.@N#W ^`m[ zi7yw(@~32+s@+(@;K@Lt@ vF(m2;@ ?D;Lt@&@lO^! 鿃m2;@4r`wUBg@ҷLgxi@6?(@x?K?.\aJSNz@~_(@ =@wztSؠ@JO g@dɭӷLgxi@x?K?jn@npo_(JSNz@ݠ@ Rʹf@J 'WFvSX nZi7NA+h<@b@\@תZ@^UC@maϫ]@L>C@=e@a,P@ڈes@Dg]@1OtlN3O1_Tb@Sԟk@(kiHB@=i+@R>cWD@4 E+@yeM@6@$5"[@2vD@W-AN@; )CĊ@G^y%@;=pp@3hh^@jqN@Q}AJIE[h*.43F$8qP^y%Ċ@3h@;=pp@|*s(Uv+4Tgq@X'=@E.b%z@s<*P; JIE[s A4ݽ׹6@·yh@/Q@^D|ؘ@ >Ľ@T!@ӎO_5Ekb /S@C1@'uY%@)J8@GKDy?@c:@Ln3p Δ@}A&J@s<*P@E.b%z@h*4ݽ׹6@A8?1@^D|@/Q@ӎO@T!@_~ƷF> 憎@nzCGUL@4@{茈`@gf@|t@@ceGxvDy@}j@&qtx¡~ u@ӯӲY^@V^9^@olJx@qcɊ>"p|tgf@1 xv2}j@6@Sz@P$ <9S,Z@slB@olJxV^9^@=aK(e3g]&(r@5GQ+uT@pZ7g@&Sz@2l^@_/q@cjݡ@Cx?:Ix@d?}^.|e/Ms@YN%[@J"@- F&].%AqtP$ _/q@!Hc?"z@ 6{v@ѢyO@2D揠A@PÙDɟ?}3@BI,տZudMH@fv@=H0Nkiu?PÙDɟ?AA@BI,?}3@q{"@^Sq{"qGK@2(U׿T/TČ!.M|@H7{u@7r-<]@EKſZ}@̸ _f@SrdM@Y`յa@~ѬXKh4yxw@Yf?UO&@n|Fn@N< ?AЫ7@H7{u@EK?r-<]@̸ _fZ}@Y`յa@Q @z1rvSYf5yxw@m|FnUO&@,WZ FQa~ѬXKz1r].BD@ɥb@};@'ܳ#$@ĊAe@<=38@˥kO7*'.Wd?jn@6:$hvSɥb@Q@4V^@ÿh4L@S<=?ĊAe@)LCU|<Ւu@vF?q@7=s@ =If@|L@۽viPWXLq@!wM.?\o==U2'Cj@Qyk8_g2_Nf@?-%Y@۽vi- @vM.ڿPWXLq@+vXj@bj[Wc#g7D}6K@gYwY:eA*&JF, ,4ea@Yd*U6$ =AL4iҸ6KA*&J\#AG}@FBcA(og&#@wHv79 3TKj>W@q{e.Wdwx@$~@2:@H0@G"ūL@~[ݴ_Rr*@N1Hu @ 3Nf_E:@Tdu[@i!g2@فEK90[i@U9swHvA@wz@4ѷ2:$~@ol@rOv(@f5{Yݕ@޼~m@fHue@o! "˂A@+<[O]K@@e@'mg{Ϳ@7C}[H@IF@79 3Tֺ޻@C>@Lhz&E˛^IdΕ}@4FL:@q@F/]HlY`Α@GR^QҹI5S@D)Q'@S Up" $Ny@8]Eh›T`u1C-nW@wC>@1b~@m@jx[m"^u@ErNw!3@Z"HT2=@E˛^3( r3ZNe(H@&F#p@(d斶@&nK1RBCǬ@QyHunr@GR^@lY`Α@:WtdH,-CYV?@[xq@VH "pbX]$)sQyH@־g.j@sC@o t I\@?;]ʈ h;um@iۓT@b(* A='ǂaOu@{+z.@;Xh%ݏ1jj}r owu@[tTjb@='ǂ@(* A{+@aOu@>Xh%@z.@xS @.?v@ndĨSLH,^s4VBt6/-9 t@߆:*1'[@4g_Q@@1?.?v@ڲ@r?'F3YCTMЁA>[I?Pq@qXDH@\@14g_Q@Bs@~7}@χu@vPv}x9dsu~7}Ϯ:Y/E@좣[r@@?@TPs@%C(F'@@#y@a҈gk@Ts@zD@AKz@`$T@~7}@Q@8bF?TPs@~bS~7}4v,WTPs@?@χu@}Ecf+@*#@/(?7`aogJŧl oё@e&$Ae&$Aiyš):+wMua@8r@3m@ý fIW@I |t@:a@T@E|~?7l@.FP@5-`@JB@~b4J;"ϷācYjk|_@GWhեϙūgi@ЮR@.B @@ո>P@YjJ ,O@&h2@TkIBC@oIrq%@SPAPTO@~$@MS:Ɇ@'ޑ{[u@dn#"@x,^PQEm>!r@·yh@8?1@48U@e  @@ܧ:@Izm|52_"U'%^`@R+c1@Avl@EQ: @豞{v@ Q@w!@0@bFQ3/7/3u}U }@ 6n@e  @>a@L{9n%#fk@1p!8-AR+c1a@.b QMHO @\rfZ+@ @@F9@fFɱt@@=>A@uWߓ61z\8S"@@n_@ê(fgw@&JV@?"Qa@M@ $hCZaC@~6M8'@6MLs_is@4|@@96AP{䷷8ۖ&VYt"EYpd:-+@Hn@ZG@!W;h@ B.H'@Q @"r^UV{JqR@#ĺ@VCNaU]a:Pư|lEbg}egHnd:-+@!W;hZG@}v@φ.<[@96VCN/B@\]{@ސL@ǒOso@KފYs@|) $Wb@:U-4{7DKYt {AP{aU]\]{@b㥧@wiUQ@ $0_PxD:TNXs'Qng}@_4xeHh@N$DgP@ +D@/[03|<@=h@X8^B\wA~q@j" w&@WA@"҉H dNO@ 4 8@땊eiǴ@/]_4xeHh@ܩ)r@ D@WЂ:@CernU8^B\@=h@h" w&wA~q@"҉H?WA@`OC@ޚ).@u%@&7"@X'> 4@( @RJjQmFӋW+­@)ۣ@_>wq@b-Q版v@Ü]ݚ&7"@ys@W&@-2@RXpvx:H@mhɷ%N>y0"@'W{[@w*@`OhOPN]@XSO>@^>i@\>b@`OhO6R2A|k@&v.e>iXSO>@}&@?KKHR@WI8*ذW@UX"v@? W);}bV50q@EKt@>@WI8^@v@>;d_S@E9}9rSYcy.@50;q%@9Dm@<>fA"S @4pf@2l@Mi^NBu@UP(yr{M{@έ"S @6^aA`@,Ef>@)U@c\Gm@ŀEGFYoG0E@E\}@eK^rp@4];' Erp`VM;.F@ ;@eK^rp@'{‹@Okqp> :RT`ZY\:@GSҵ/@M9=@VN@ ʠ23r@1Nw@VN@rhr@Hl KQv 9 z@i9%/YP@EuV2@jNk@/OE@,.}]˖o//h@{\cQ@yylhkyZn [eĦ P@jNk@B78<@NE]M t@~lQ@*_AR9@IX.]n xfVgF%P@<a<TPs@$Ȱ"@"Jȇ96BLVJļv@9ds~bS"Jȇ961#d@fz@'@DA,ʴ@)kP@g+b@h]m"ҷCfߎ@}Wq&@+ۜ&@Ovp@)kP@=0@,DN @;@ɲK'ws@"`Tw@1X@4`@5]+A&FZH}@­/th|@j}w)[<&A@<:F@A.0m@]$NkFP(x@pf@,E&FZKW=AtgZ͒I@ :@ 09 %>A;s^8<:F@̵ZUG8n'@4` |@n{ (Tw@!Y-;"PpyF]WQ@*}@KlD֠S"]*q E6@u=?@f`wsr=!nYQɗ]g@TY@~BZC}pQs@M $">ԙn@u\V`KrS|H@(<8T!Y-Kpv @6<@ifKlD֠S@*}@no[ݕhef`wsr@u=?@А @s,B@TY@M $"@YC}pQs@J^m!rKk@(<8T@S|H@JŧM qg@ԋL_@2A>Nu0m=5-LJxgK@{Օ"A].@G*kr)غ@)|M6@޼//Xo;@ꕼ&6k?@ZG~die@*K@orIU,=~@i%ۯ@=b(@ W ɣAUl@KBM4l oё@M Q%@>NuY"AfFs@jU"3U7ű޼/@)|M6@ꕼ@/Xo;@_G~die&6k?@orI@*K@f1$s~@ѽ+?W8@G+N^Wy@RW]cK֥@57sа@ 2@FI=T@}\H@_>C.Pg[oJ@> ;@F +gORɸ@=@?e@B t@}\H@H@}ò8m9A5bs܂@PVKd@g{:t*5Z @EO\@_ a@SM5a9i c^_tϡJᏘ> k@l@g3XeR@%f,@4|@SM \FI@[F"hgwF`W+IE@8ԖŏqT8@g|@D@ =:yq@ vlOWO@хkUl&pV@b@ } enۘ,ȼc@b8gh@z@$5c{~iT@6Ts-oF(^хkUlpc @4B0}MJ@hG@uY[VႲ6z@⋟OB`@O$Rp}6@E#U7@?Hs@Yz;OkKkBv@3^_?]7[>`#.{]^@@2@$\@OזH[1@?Hs@o9@v@aPTU^_KkBv@3N`½t@2#.{]^@QזH[1$\@1Y_X{NYH'@7ˤɦ@"QP@㘙bB@"أ /{IQɏWo57ˤɦ@q ~>H@UOB@ә 5@ X̘f@zRf2V@(ː <@䷷8ۖa:PސL@_y@$fm1{@0e@ LTkB@E9O\{epǣ0U@-zQ;i@91)Ő=@Q"@&VYtư|ǒOso@$fm1{@TM@)5`K@Z'@iGhUՈ?i@M(UO@ yT@FC8@"EYlEbKފYs@0e@)5`K@ ~'@9A]@` G@'M4i@D_1@өX@pg}eg|) $Wb@ LTkB@Z'@9A]@i 4@uRqe *T@E1bĬ@M;x@]`uRqKW7#A8$'@p6l!2pBewoZ@ Ge8$'@3ڢ"A0:R~3RJǛ@>FE@/뻸r"@@%[f2*GW@iV@ȥu@$@Nri nfHVְjn*V@srR#s@ Q]@ 1@Gmy@s& [S*ΤQw@C/bhեiV@a ̬K@Ygۢ@e޿@T&[Fp& bExv@7AZ\@E@Sp@+ @ȥu@Ygۢ@yAk@S7RR8@z㢵sC_I:7pqDI#zVQ'=1@) ɡ@Π,s@΀Pr@{"KX@$@e޿@k@,cl%Y@z㢵@T7RR8@O6KoqrV?!yNqr3V?"@ IivS@nn@ @Zxid;R@e(پl9<@AϏqk@o˴ 1OGTָ>@FZ{@)d{R@sO4]t@5q=@-;@-@=Zx@ @e(پFm3LABϏ@l9<@Xh{#^\D@Eq@ݽ T)d@FZ{@s@{R@#2n6/@G -;@5q=@=@@-@j|i1@(^uNc@^^OJ8=wt*Apy5@Hg} z6^uNck|i1@ؚO|:*1py5@;U/ AH ۳? ʱk7J@Zg|]^9EZ 8|@kc\(ZZg|E_Ċ@x 7|@ig0l?%fͥ@M@墪{$@*)'S@ܧ:@L{9nd:-+@Hn:UwiUQ@6@#]f@w֙ΈJa @Ϧi -T+hꈕ@k. Y&ry@HЈ3]fW:S]D@Izm%#fk@Hn@d:-+@-4{#]f@jy@Q'A`413GSH&\@h. Y&@+hꈕ@IuQ@(Y@@;:ȣKpbUH~@ è9(@='eOX@= l@f؜@}՚|!똁@"IT@:?@d @@xx,@2FNHiwHk@g@y;];@`BWY@}y$@v4t ]ׁ@EC媠!iB@R,@5a9i c[F"h0(QA-g/@Jpڪ@t@biE,X@{nt24ѹ@yW_S_+&G==D$@_@%Թ^_tϡgwF`W-g/@|8@(]pSR^qg,|?+I@` !D@Ckc@OV*?$Q9=@e0J@N4@<ڋt@~`@Ho@ϑw@cjݡ@ 6{v@GMJl {o)@)%}D=@3(1a@HJ@d@U{U@!Ȭ*nAQ&Ƞ@=%d@^pxJԏ@-_#`@Hb i@ˋӤoF,r@l&p@Cx?:Ix@ѢyO@AIu~)%}D=@5@ǡZR`@Lqj,@^zGo^;pTʢvi@ ¯:@؊a?6a`@~t 5@t!`@*#VB+ z8et@BHE@5vt@:_1.\n/գ@7un@Z]PU٬}:_1@6vt@apo7un@@Dtj37mg>@z&@z Msra@P9Fz&@mSq@!D a##e [XJX%Mif|q*,މ@ =S@ƀ-~FC@ LZ& D@Te8ZrLc0(@HmAR:N$C@2E/"qYl̋JR@u)7qZR_;/m!@);)SQ^Gw+p@\޵ t}$D@RÀ@ f֢zu+.8@ LJA @ ;7)ZTq@mhz@`m%D@%[-Q@xY% Ԛp@gH,g&O&x@j A:6(:W}h@/Ѓb@f@ @řy#gmI@o#=*ϝ( k_ex@}e@ÙsPpiOqԶ@o#=*ϝ]:ʴ@+y 8DFp@/iql@ÙsP@}e@!@tJ쯑&~D@sQC@+_}F@ϓqW$]׭gok]0<@ p;vUsQC@ z@NWsCkuHz$¡ŏ)UUhpU>p@MM@J٣Bi)@;ƭ=Th\%h D@1$ J@J٣B_Q@>ƭ=Th@i)@-47DI9Xh\ ըW@50 ,X'> 4@W&@Go@YNsSm@Xty@"! q@eG7@@-@-t2,@O!u@UM@( @-2@YNs8IdAJ(U@zb@ZKw@,)UVl@ҐR@wb#,@3(@&h/C@-bQZ"pN@ld@cǿjpꈂ,@2Dp7@cǿ⾏WU@oa@C!6̮cS̮@!\\pXYv@a"QP@UOB@䥕@!`@Bߛ6 l@&= Vgu@"\gx E6`=EF OPƃ)@յ@pm۾Ѽʝ}U$2:`@GeB@j|z@Qfd@vQG:@'C6@_옄5@p@w\jepm۾N’@Y3(lOX=,h*חMyB@$@S7RR8@z㢵@rwyg@4b/|24Aȋ@"X)+z㢵T7RR8@4b/TqOǻ@!@D8@>}]qɖ)s&F@5)m@rrIK$/@*gh@:R5C^:ҫiVȶ5)m@_t1_@[M@aKsx2jX6քt@Rf{̷VsC_IO6Koqr|24!@;@5)he:7pqV?!yAȋ@D85)heIٍ@q{ez@x[eOy@Rs~9 `7C@u6I]W- ,@ DPTL@4ox:_W@v)7őD8GbBϟ5@[.>@#]+@TKW@^`@_L 1@=6qQX=@`9@Id.\%7y:@4 @A:4a:AEZPЌOT@&Y%7Z[[z;8C@8@LՀuMà@9*#ùb@9nѬ@\LS|@XC@ E<eQ@_<4lh@ D~V0@:4@4 @OЌ`+E8&$lZ@=-Q*װjԔ@5F}@DC9dd1w~@v@ @1t;_Zt)k@qZ@y;B@Oͳ9},܄W@ 1@TwӕY Jo 5ݮ 1@#/U@.s #x\Qy@$I(Lq@Vѱ cGV[.n@Y/ ,Ɏ@3@8=աO 7o"P@Vѱb=k@[.n@P%z2J@Z3ρV:8(JAm@l@E@y~>`@vb(}Db6@s$A[k A&_:[,+vJ6 q@@Y@S)&lJ@0_1][@9KS|6@s@Db6@&_:[,b_A~:@0 Y@(4)@,'2t-@rvNs#>s=%Q@Gg%@+C/@ ex*0V!@>[SrvNs]5[@Ċs=@P z:GV2@LdaLn fO N@W1tDRY@#>sĊs=@3G@1->@2D@X|@UBUW|& Q@=%Q@P z1-} @2D>@N͊B()0@ʿ _@[:GV2@>@2D벼@7Zm.ëlpv@Gg%@LdaL2D@>@7ZFͥbY@e[m@H$GE@TkT)Ah@־R@׍@t'ULժt WspAy @TkT{6/7ӯ@R@ua<@U,q_?2@Єdt#貖į L#@T2o@F]T@YF@> c `~Vc"-@!+g@ڍFC88ma9c]@F]T@69v@3v\Z&x@er@)2M7t~r§t@mvP@rf{&հ@Wx@A[:A@znh@p0_@uA@;JtɣGehOx@8cb@znh@n:@\[aNtB@MC{_ɏzeE@ _f@W;[[>tR9_T@3#C=6?@8dWEW;[@9oۦ]@ߡbWF@W;[gz@+R(d+?@w'@W;[@>raؒGF@# 1@l7@a,/F)a@2e]i@ Z|@Xa@uDt#Jw@+vJ~:@9=@)'Xz7@<ݧ(Lq@Leh=@y2~@K'qA4UX@~ ^>@283c@dM6 q@0 )'jӲ.t@*3g>YoV@]>썟fOG@:̞Bu@+K=@(Tj@`Ҽl@^ @^_c1H@&jNt@EA밻r@5UpI!@CNb@?t8e+KAQ@?@a4M@|<@Pnr%m@C 债p(U4@e~@:cV~@d&a@DU9?`L@vє@;z@g4TB Wм`OF4֝+vє@oA)@f4T@;z@#޹We?H}@tgZv)_c#?@/j@It@%v'Ļ@­͒I@7őD8L/j@kSa׍@ݿbe0h>m@Dm}@[LN>6@ݴ3"tҌ^@\`ul,]p@N@W>(]pS3(1a@GEد@dM0(d`ĀQ|VC@ӮL9M;@'ٓ%Dd|2JU 38=RmI@=`ul?"tҌ^@fIY@f7@z[$cR^qHJ@dM0(&=q@ӟJYP@}mpɳZ0;~(pܹy1y5q;l@a W@1K@U׀;*@?Q$)kk%x@ c@OCW2h@/c8h0_:Fքz4TlJ:ѵ7j@Q@U׀;*@;|@a8௕ nn.@bU@XA@|V+WY@AW`d9k=! ͙F@aM-@?Qa8௕44@l7!H.v|aˉ@kHpސ@As@'~f@$) nl7!@S&&@%Z+@p ^co-Er@oqf@[C@_bڵǐ@H.vS&&@q F@ :?Mgs@{u'rv@~l+WCB}@kkn.@|aˉ@% :?VnbA&^h\[@1zm,É/@}@F$TY:eG@1ǘ]( +y 8DFp@G/c:@gKqwÙsP@텒Y@"'Qp+vV d@k_ex@/iql@gKJi@ÙsP ,LciQ}JypL!V@m9_}e@ÙsP@qwÙsP&qțt@c`ÙsP}e@ÙsP@ ,Lci3fw@lU H]Rjpoa@#@3VM@y%B@SʬT,ERA7?^ꈂ,@C!3VM@7@[EזOU@c%Ѧ)@1')XyNK@l ‡QΪGnҿ8v@1}Ej@WL2_"вLݩ d@XXjx@l ‡.}`@ 0v@Zmau{)xLMz@Ձ]@%0u@&%x@bU@S\)A"9 Ag(/r5 R1d="۱&N@?<d@ c@XA@"9 AԼAl/ drӽ ESioIq@ i@2clP@w]I*~@IM@qM."MmEWP@-@sXq& E6/Y~@)+!@2Q8SWG%@>PAOX8\5~@e aW=1R>r;E@-@⯘@#@'3y@"CwZT0 B;@P}Y=̡he@Sm@J(U@8MS|@ iT@ l@-G.@9D@In)@|4w8)Gi~E?U@Xty@zb@ iT@@%@AMJ@^vRy@R5([@q@ M73[x^ S-I&*vgh}-Jƅ@-<,X7Zu8K@ϙūgi@Nri T&[DI#NqP%M9AN@Fg $o݊67KRà+@7B~c3@v/Vfqr uyo@ЮR@nfHVְFp& zVr3N@E4@|Lѵ6վF.Bv WKW@`{ȳIm@\9@|'RUX4n@4nmާd@, @ɗ@uRZ|51pjn*V@bExv@Q'=1@V?"@Fg |Lݽ@6ys@"@[ۆ,!VqA&&/@[@ݬ>JBԿ1!B+A Yf;#AA@p~lp@DTA@ j@)w@"@T@bЈ @6j"_AHG\I@<Ҝ{k@[V׺@/D@o6=@ЂOTj@꒔}۳t-7, @\;y@ZvNBqOLd+#a)Zjctk@DTAp~lp@=2t@0@6y>V@/il@DTA@iW6ΐdԺ7@[V׺@rif@ߣ u{@Md+⫢7E/@ؑQ:s@hu@/D@ߣ9@ C0C@\XتhM^B"U@i]mv@ܥ@o6=@ u C0C@$Jz\ ϴ@m[@ryt@kv>"@ЂOTj@{@\XFLJ@r*mb@opX*IM@eÈ@Fmci@@Fŭ.8I@j]r@奝\@[ۆ꒔}MdتhM5x<@opXy UmAL@,!Vq۳t-7+⫢^*IM@L@Ӈgh@A&&/@, @n @eÈ@hN@r饐@M$GQ*\HĩKw@Lak"?@) ![[@cǥج}FD*i@O;k@[@\;y@求@Fmci@r饐@vto@>Z'bҋɥD -@+@34mk@m/6g'eQ;kD*i@ݬ>JZvAC @C_V.@N҉(m]BԿNBqC_V.@2J9]@.6Hխ1OLd+ @n]J @}{@Il@Þm#9W,f#˃@!B+#a)Zn]J @(QM*@[n]h@PI@1i%%Aa@S0@&qҌ@0m=5fFs@l9<@BϏ@y^o@`d(jSy@1ָM@/A@AhB7ΐ@sD@d}vp$@'xA@ Vޜ@&}'>@$(1lQ@0z b:@yN^h6qh@&qҌS0@-LJxgK@jAϏl9<@`&lAC҇@a@IB>Ѕ@;Yc@d}vp$sD@ Vޜ'xA@vjB@xM8*0z@$(1lQ@y@ b:@A̓"(@Ѭ˸45u@?6wF[n19r@?S@p@Hۿʸ45u@[n1#6?S@#$^@bH@n _@#uv@VAa@0p[@LE@n߯%GTS/@NFNw4o((@u?F+a@HP)`rjY` Т'a@Cŷ[J@%E@~&X 1@iΞxC}INFN0+q@M݁?T@ AT8W@q(__@Xbaa:W"! q@ZKw@ l@AMJ@g,_E@ĺH@0z#@zeL@hb'ǣ@)J+3p~U>  7P@-0@eG7@,)UVl@-G.@^vRy@ĺH@o;@x@2ņd@F@P )J?hb'ǣ@+Z<b(C6ld?: dmoP}@d_@>Ai[ 5oS:rzU@*@iH E@4A]@̽@i[ 5Qu`A{j@q.ȳBwg@FD4A[!_(zؾqu@Bޑ@`>jJH(h@&@>A[fT$ALh$6@%M>WUUUUX$:k9@l[fT$AHI AQMq"Njc@WUUUUX$qq 4*H@CnFI;1@unB@-.`Pz@Qo=Z& D@ ;7)Zi @-0kh s*,/@2)u@磫T@pTI╸} gH@,Ֆ_/#7u@V7Z2t%@gW:s@+ܖb@@BE  @4< 8},N@_߰TސH6K@Te8ZTq@-v@"@tW@[dD6-!U@2-Ԍ{#8@pk4_,Κt@hԃ2{ȩ@̂<-3$o@R6>@A50AN"xA.tZ@XOX_06w8)SMP¤YN"xA&q2>AXO@.tZ@Ayt56c8b ,.cnl^al=@O@ A-0+``޿>@O@=BC;@c+F4F?>:wn@J}n@5Z@709z A(+yzq֨k*O^x^[]@W1 a@b(dC@õj)@J8@<Z5%ȯ}@0z@j@#n񣜼@&PsMSm:I@m/@%Tu@=Kh r}wdkЙF@ @fTDOGO}n;wn@5Ҡ|Z'Ia@(+yzqj "u AkJ ] 1Y1 a^[]@õj)b(dC@<@J8@Ӥs1ӧ6V8j@@0z@&PsM@#n񣜼@m/@4z@TzSm@@ZO@T)!XbTDOG@ @})x@F/s]+?q@rc;@%}hZNd@!6YT跱@ W\sL?g@W@C@:ZeC ت@ޜ!Ko@gKF<_J$n@4F ;ܡ@@9|{侍@[$NU@P9#-U@e@-U@e@ W\sXFtӚ@WL?g@:Ze@C@ޜ!KoC ت@o¦w@@9|@4F ;ܡ@#NU{侍@ ]oH9e-U@e-U@qWƮGnr@/OE@NE]{pmko@'y|]iaۓ@ƮGnr@%l/',.}]M t@'yNm&^@o2h@q+RPv@~DU.(qS&IY5Pj@p@bRg~DU.(@Pv@ɾ"dc@vCWRg~@̚@E9O\i&⚣@Ɓ @{>B{eGhƁ @-{@Gv2mxn(5aV@V4]Tp1C=Fo0Pv@IFʐBL:V4]Tp9@ؓߔ@>5.tZ@XO@]jvA0Ձ^l1o| dAgWOQ+Ao`-ko-Ab־US@#=@_vdff^AXO.tZ@0Ձ^n*AdR<[@/d^&mK@cGiڣKB"-u@-ko-nW#=@Wb&@pN{ڀ.C9-.m@ѯ$U@{*j@dff^A233*l1o|dR<[@A4@crԬuPG7Ŏ@ C X\sGY@e}Ur@ZW\ÑG@lyJke@" ;@?1 @J$qTqeC@>w@^e=@x8 @vVJR@1y~@KP@%G0r@/*P@ULF{s@y^QbI@/dcrԬu>7 @@QG7Ŏ@|:Jl@B5(AkG@v@^礮;@%`"@kl`@E׭~}"o3N 's@qN@C>xRe.Px/B@*h{@g'V@vޢd'@;h }S@>\+$@/*P&G0r@( iGI@s-_k @&pV@b@4B0}pǣ0U@UՈ?i@{>G@GbKK肂 E;!1D8@)={Ii@F>QP }MJ@-zQ;i@M(UO@Bv2mGbKK肂{U'@&д@&劰&f-Oiў@O^4@(@ǗO@H;@<& ?(@gAҚ@@:z@;u̝ >#0M?S2_c&̩@02@1C=Foؓߔ@S#@O!9C(MM@022_c&̩@'T_/iO6R#@0Pv@>5O!b@+@цU}w@lB]M@9+0{K@ fW@+@-!=w@l'6Rf"цU}w@QDQ@8m׈t嵰9@M>ϙ@z}N˃j@I/0S }lB8m׈=$@`vQ߃@YJ!@Ͱ/i'6Q6&@'Px<@Ͱ/ii2AG@G׃%&@(3`=Px<@f b8m2;@! enۘhG@ E;!1&д@`kI@?T@d!z5 @ ?m2;@,ȼc@uY[VႲD8@&劰?nl@ȴ\@dAd0";@L?g@WX@mm8@-E@B~qo] @ݧTI@+Qr.ֿ/p@%h@&f3f~@M _Vfb@Dhkb@DhkҷCfߎɲK'wW@L?g@mm8@t@B~q@.E@ݧTIo] @|oH<,&f3@%h@N _Vf@f~@?hk@b@?hk@b@ @L|@ jQ|e(UD{@΋@jM8itبaF޽՝@Cnhnzh@haǘ9Bfۆ$VM / @Du2 uՓ@@o@u=*wD %&`Ɛ.f@]{q@0#`>BF@5@H@uWEo+@&[pZ#G@R*@eXaTxyM./jMeW@wu @3Zap߀ @sX#@YcؑQ:s@i]mv@^mE>JFŭ.Q*\'bҋɥR*@i@٣h!(3eۖ"sǗwu @cUx@?r#@P`TwgP@[&1 @RKR h/2}@q& E'3y@f;#AA@tk@z\ ϴ@8I@HĩKw@D -@e٣-@pE%2YI@HrS@]}Jl@$ouDK@<T>@e=qn~d }aw}Z&m@ՆfR'g@ŧUk@3N6/Y~@"Ch!(pE%6R@H@Zrz)0@`qeAR@;@oN`@I@qk@Xh{#$@j`4=@,uĸ9V@@Wq@(~:l@$C#@|d@q0 rE@@7@VJs9 Q@E zZ@E zZo˴^\D@U E@дj|@3ڳF@ve$LÝR@?(~:lWq@|d$C#@7X$@Z30VJs9 Q7@Kr4Kr4@D4b8gh@6z@+C/@n fm.ëe[m@[Sbc@z ki{L"߽n:tI|[M@;r`z@⋟OB`@ exO N@lpv@Hz kiS%@VBi΃@.Pܻ߽e [v}"rU,ᩪ@AE)Sv@ Mp@ 64VBi΃@j]@0筼S9c@Km8ݒ2@PZ f@UNyiz@ lej׸&>J@.Pܻ0筼 n@=?/r:@Aw@fiI_@8e8'i ӳ$AX@ݵ-e@wŅ@j`дj|@,9@sc@E+/Bϝ}&-Dܿ@Fx.@&-Dܿ@Fx.@@Iʂ@&^@ZEgZ@%\d +\XVx@.Q9@pFz|R@4=@3ڳsc@X*@WrlM@0q 0[w޹u`sVy@]W @wV@]W @wV@on@`z8O@w~v@e@J5X@1SV?(@? @ @5 ZIONS?yt@7qBflSw$@Ӂ{Dq@&=a$ K9,uĸF@WrAY- DՁ@6uf,oJ@BbycTo`\ :s@9V@ve$lM@Y- UؿԔ&A j"i[~Ѹ@2MK l25G\V@j@"83% 1OGTEq@LÝR@@ݽ T@? 8 @6uf,i[~Ѹ@'%Jx~ A`$'\~NT$޻@4]myɷn@ļSӕ@G7>?ndsPG<@ߥ׋@ŧtm@kV&$@V|@sP[DœIBCNGwG7>?@FqvqpaS3^,5tPB$@,5tPB$@H<ѐZк!@ @g@6QeMI@L[~s.@$Lf1<˾Ҳ@ {KfSF-̭@z]_Ko'vT[X*% @d@ǡZR`@ndsFqvqp8o1@46F@xTNt@g&~3Vbuw@&W@,b[q[m' u@Xb@c@s5@VÚq@ܹ3!eU7(e/@ƝC_P@K͂vw@׊"+@]q%`@A w:@(Q&o#,`߈@0Yq+vjA@G@pdp@)[Jh̒@Y_?U{U@Lqj,@PG<@aS3^4P,',@T;]v@d uz߹eEz@ V,b[@&W@dGm@4a!t`@g_0@VÚqs5@)B؈@UtW@D1/K͂vwƝC_P@o&&U@NQMb+@w7oˇz_@ iU@={+!j4 ̴OkUvi@3q;@Y_?@)[Jh̒@5Cg\P-ǕB@rƮoOFu+ ? @n?0k3"WV`Y@둂{2^yB@webu+ ?.ǝu4Vj~j3yObI@둂{2ؔJg@JȒ@ӱ%z s@tRS@$LՐ@omtMR@xe@ `JSNz@_(.1JT@ Dي*9_媺|5y"<@/z@`lm@KVf@o@))j#Gn@aP@5ʟ@,HbomtMR$LՐ@zwӇͨj_@~_(@JSNz@ Dي*9~{@.Qձlr@Pgif@I@JpM_@G@F;@.Shw-ba@, h [J@+_}NW9 `7C@}).]gN@ `V<5׊f5U8f@ N3@jw@L=^@xCy==*]@` @ы&Q@F@ϓqWsCku6I])4T2W^@\JD@F]@ΝIы&Q` @ >V@oO5׊f5U@9G@ѣr? 0XԸ3>@k0@58.6.@_wg@6@nw@fn%@0#v@<)#@R:BpoO@ >V@׊f5Uwqѣr?I+@wbhp@8.?k0@_wg@ӹ`4@fn%6@nw@<)#/#v@FH^siɳ,@#1r1Xhihp.˿,5tP6F@T;]v@"g|@",@- @;MAUqkJӚ"T"@IWQ?g8@:0_Oa,ۑ@-bï@rr㿫I^@ PO;wњ@mqӵk@/daC"+#=@M/ރ.Pxߨ@ׅ(R =n. fhp.˿+9|B$@xTNt@d uz",@X@;MAUqkJ"v@>TE,Ux_"L@\0_O?>g8@.@a,ۑ@Trr?bï@ l<PMY@ mq@;wњ@/daC@ӵk@W2.Px~9@ׅ(R @xߨ@ zb@,5tPg&~3߹eEz@- @;MAUqkJ,!@OZӚ"T"@IWQ?g8@:0_Oa,ۑ@-bï@rr㿫I^@ PO;wњ@mqӵk@/daC"+#=@M/ރ.Pxߨ@ׅ(R %'0j ߘB$@Vbuw@ V;MAUqkJ"v@OZw6@>TE,Ux_"L@\0_O?>g8@.@a,ۑ@Trr?bï@ l<PMY@ mq@;wњ@/daC@ӵk@W2.Px~9@ׅ(R @xߨ@˖o//h@~lQ@n D@A^mWd}%rssF8 z{@{\cQ@*_AR9@A^Ь3@mވds1=e~ z{@]/@ em7yMh\p@avN@b{9u&@5@[S@\H@z܇f@(x@t@@cҳ/0 +@ em8!:P{@nu6j@xWC2UchD=@:LP@3:n@|h@UlA@֮u@$oc2@%W@D+V4.@;"P6<@ˬl@uVuhxpSԅ@zA: TWZ'>;@˱:Zdv#x+%L.@!5c@iܒ'@{L{@N%`:4DS@3ΓdppyF]WQ@ifuVu~f*C@}˸pqW`f~*@12\teMs@"@6uvܒ'!5c@Q%`:@{L{@3Γdp@4DS@ :@D+ָU`i@sLva9x=@ 9݃~@sTF=BՂ[ꠖ@LZy"׿ {@5 LrĸEb@+L~?i5@ fH@} | W@2QãD+ָ @0ܕ3@Iwj~{Ƿ@KLmY@(kn@b"2xjC@ OJ,@2[={v~ @΁Pg@ˊPXsf^^ - n@U &+W6=@@ҐR@9D@R5([@0z#@2ņd@ٴ+y@pvn4d@ٮv@64@yR7S/>̯hARϺH c<@-@wb#,@In)@q@zeL@F@pvn4d@No@ 64ٮv@96kpNS] - P<6V`@"oMցnj>su@o e`@?u)\⦵~b/fd@A8a@vYBK@|ձkμ@Ge3+5@cp=Agʴ7&NxCT@=tM^vIюDvy^5yޤ@32<$y , RУ\x@cv+&W@,b[@:"@g.8&*n@iػlIu6?@1qv@m3@@]@,ehل@*G}{&2@,b[&W@g.'X@L.a+:>p6$^u@g=b@'zM{@]@Ax@q@e@H<ѐZq[mdGm@Ӛ"T"@>TE,UӚ"T"@>TE,U8&*nL.a8$@.q@9`6&@O3Z}:)N@ B@n'@Ȥ%[y@0.O[,pк!@' u@4aIWQx_"L@IWQx_"L@@iػl+:>p.q@vpT@QYqUceȈ@Q[X*V?_["@.FHTb|*KkBv@^_BߛOlļ'@]Rl$ʩ@BW6\@t`@Qeʼn@z^@:"e$'3^_?KkBv@6 l@{<|]Rl$ʩ@S,x@t`CW6\@z^Qeʼn@_",n)}"犚@ * ]،=@ u@E"WOɜN@ni@ *@"犚@ u@0@@bZ4@, B XD-DuGTaR@e2܅@sN@E@Ry^0s.䉭@lP@=<# @<1ly@qYxTNQ1yt@wy @Ugx@d@E@jB@)DIyDYW@cg'@,F@s]ć{@ X.xNCOɣ͚D{@+me@U`i@0ܕRy)Dfw A m^@UIlsg@:AT@\@t<Ίu6 Su8E”'^s@ :1HxQ 5>Y@msIS@@4f|Q ^❨Q&@j 7iZܦp@\sL3@^0sIy m^@ɞ 0Ӵ@MՁpXd@"ʯuy)r@ )MHu?5Lw@dsǵP*\@Y~v@<=A|V\(s@>RĂP@}@K1eױ 5Uu=@?@2_ՒAo@. 1|UgXz$@omwk@N9Nh@EK@\I uf%T{@SQ1@Qrn!7P@i Oʉ@jxnmb@C4 {z(Tj@a4M@o@v%A51RҾ@lQb8L7z@퍔[@pjKܽ@zFw S%` [@l'@pGMl@Կ&2fP@E"bZ4@dRs@?HkëY]7 w@" @*5X~H@WOɜN@, B ?HAʣ7@V w@g"5X~H" @.@(vZ''qu@-k:lZ }1@)UTQ@cG@K@(v@.@-kQ@@fqh@V؞@gL(@ E5KcG@ͅS:P`@6ɒWq@(~:lEV\A 8c 2 A Y@Ow'Ȳ@`H@y nq@}Ψ7p@bN/'ƾ0B>Ԯ@ էgcA@t\E79@b^0q Y@Mӂ@`HOw'Ȳ@GPW#w @Tf4/p@=|fƿ@`os +MF@s\E79gcA@mWi@$~@2:#.@ ADt@0E_co@6 o"%k_,& ({hP@5z@yi?2:@$~@ ADt@o7@*fzq6 o"%k@o@ğQx$ʺLByi5z@H0@ol@*ذW@v@ #:@Ϭ1S;@u&ŭ.NK*@G"ūL@rOv(@UX"v@>;d_S@Ϭ1S;@ @zGJWy{?v 6'Z~[ݴ_f5{Yݕ@ErNwW- ,@:ڲxSE0E*f;Lq@TLW{?"h@ݵXzs)%5@2Sv)%PX@e }`/2@fb@Rr*@޼~!3@ DP'oi@_czqTLW{?A2B@ֆ`A^x@X8YbCMAs@~қ5M}be/7V@wTTf@KfVB@? E9}uzGJW;@[-MQ@@OZ@Y3 A\pW);}9rSY&y[-MQ@v{&\B@X3 A\p@@OZ@N1Hm@Z"HTL@ve"h@ֆ`A4k;@gɀ·veU@PҢp#VkPy@e)SFE>@!RvCHzXKe |@u @fHuT2=@4ox:_:ԡ w@ݵXz^x@gɀ·3lI^@1DgLG@/[V~/@|<`\HuB!S@$8-ӽ@BZщ@'TrH@BԌ@V kl԰NޘA%/@TrHZщ@<@$Yc" x%/@x @Ip[@c+ ykE@87 \h@I@ 1|]P'Aێ@-K&@87 \h@}vܻ@2^w@?s<y\@ZnXzX@xQd@d.*#?@<,K,@" 6fzZԙ][%~q@i9vk':]</@4}e%8@(Z``@i)&h<w@z_7Z@TTDA׽0]I;@d.*#?@jZ4Z@T*6A@"d@}]OJ}6}bzde Vy$(@k^W`v:l@ )8CbR'd@ӌ>1=1@c>hZ@Tף1=@'00o=X|@N͊Bva9x=@IwjUIlsg@MՁi?r+@'w@\f\|@l%Ԃ98xQU1OUv@w;(pnT@c&j y@5_`@ }?y,F@by{fY@gqCUB()0@ 9~{Ƿ@:ApXd@'w@͆C8@%&wp6]H@~@:It@X *!?LH@3@u/˭@lDyɂh@^6a]@yeC4r@2l@f>@/th :@ >.`@^HSfGV@S%x[@#r[KxBʓ@7#_' @gզMi^)U@|@ 09^HSJ*!@-l'&@w>k yx@ъF@KX-r58$ƿ@F9@ê(fgw@*}@KlD֠S@fGV@-lO@*[?OgM*~SەS؆Mf`G@Ky Ь@uFqw@,n+w3T,='@2@P@als@1cJ@@t$(q@1zJJ@fFɱt@&JV@KlD֠S*}@S%x'&@*[?V\@}SەS؆@ŒSdMf`G@uFqwKy Ь@B^) dQlk92@PT,='@1cJals@t$(q@,@hEg?[u@"? &d@sZ"]*qno[ݕh쫭,@)3hxpSԅ@}˸pqWOgM*}SەS؆@Y)X A,*dduG@8z\.@,*Wc"B%p<Ld#ظ@wRlb@pFf@ٶ.Qn@vdyX^JnŢoV?y_@W9,?fVjNm@eΐΓqH;z@{zg@&"t@ \;JΕ@<"u@sZ@ &d@`)XUbK@ E6@e)3@,@zA: T`f~*@~SەS؆ŒSd,*dd>[OALԱS,r5.6a"WD-榁@~V%@`E"wRlbLd#ظ@ٶ.Q@pFf@R}P5@r@Ѝ Yn@` a&W9,V?y_@.Ipj-ð@eΐ@gVjNm@B1}@F({zgz@ \;J@&"t@+T!@+TaǭmK[r/cF@FO6d(@;y]u=?@f`wsr@Mf`G@uGLԱSӗ@~Ftyh;[@_4^ @b5Д@@96o@@n&h@fxv(rr=&َ|@, _i@i Iw_@!;ÄJ@Z}jJ@'ZOԍD2 aD2 ա@Bq.%@)O\ǫɞ@f`wsru=?@Mf`G@@,r5.~Fty4\@_4^ h;[@@96ob5Д@n&h@^>1>@=T@a sd(ܨ)$/`@!;ÄJ_@YTA@W{pI@@=>A@?"GbB 1@It@ݿbem_]@KHʯ 6X@%1.uWߓQa@ϟ5@=6%0h>m@KHʯ |qNg@ 9@^)S3"M5HL֫2<\g@Zwf3[cr96}@mSQKNm@5HL֫2q~Zw";@Ȋ}@;7+ޖ\esOl@f3[cȊ}@W+r@LK-c@./~@ :;@tuH5FAB@+J8G@*H-K3 @4WO=b{1h@lLjr96}@;7+ޖLK- !5@#G)nNG@ Li6HG 6T@eW-2㛙dP@xj , R@ )'brF@8EB8|*}/V@wNր[@S H@habSc+rJ@PL(֬@i=@R#8xt#ՎFX@嗍@fO-l@+]|2@!z@jZ!A x@ǘ9BK[^w|@i=@- ~V@/M@{oA\@8tz@ڂ@3&4q@fۆj@_h\~@-аg@\Jr7@Oj@!p@-qrR@`lm@I@\J8M^vIios@嗍@8tz@wB{tqҳN_6/@o&a@,7J@g(g c@|&M@K8&(uhyjŢ+@;&@sVF@6^N:\Єx@hes@@Y1aV9kƭ1@ѼxF-8 @,!5d;LE@PmKM1*@(û`l)@vDwN"%_yJV^ B;&@*i+om@vb `3>u@mIu@, WRMxo@i}οH9`@Wx7r%ӐN@o54t^ԝc@G#55|0Aw@󲻿A!aB;ze@bV5cy.@*j@D@?Z:Ip0q@50;D@)n@fԎO#D>ᚨsVF@vb `ϙh$W@q=A@Su8l DN*tL@aH @ߥ2_O@@a̔?e_@@*U&X3i/@Z.DC`S@LӺ¿M%T@۠Y|Z,@̣pv"8@$,]6^3>u@q=A@.fv@Lhah8@ {?^~A.9,>[e$[j%|@lq߹Val@ۡ.ErE"l[@LӺ?B`S@CYk8q@kWBF`YBV@yOفƈ!5s@9BH@" +::_l:"q@o^ƭ=Th@I@ 12^w@@hXh@.5-zWh3![@+;ƭ=Thi)@|?sJM/*;-bi@ّ(Q@dG@' @$VH@`x@^|"VrDr@ uՓ2W)2wQj@@܎ 0JM/*@otȸy@PHׯ@&`t;S,@̬븨' dG@M / @uWE^|"Vꃏf @"+:Ѡ@T |ç@G] @@z !D a\-47DDu2o+@rDr@"+@ cI⛚?|}^@Qa@"W@"h D@lF㏊Msra@##e %h D@I9Xh\ uՓ@&[ uՓ:Ѡ@ cI⛚?d@Qa|}^@"h D"W@SmLhz&E˛^=!nYА @WZ'>;@12\te8z\.@6a"WI,@B*>nE˛^3( r3Qɗ]g@s,˱:ZdMs@,*WD-榁@B*>n"eci@{n\@D?@!ɕ`@&Jw}rx`8[(F0@HgEMl!m?@+{!@&Jw}G xMSS-Hj@]73N`&= Vgu@3N`@w @rI@{Y4tZ@~~`^=@2`y] b A@G WK+@j\F6b`@c9I@[>`½t"R0ݖX͇@"C `p@ңY-F?%(@@A}u̜>@7vx@=I@+Ԁu>Iln@;m@-,XO&Ti@@ u@S7ri@A.@Q s@jP?8\@,n (c@cQ@v&TiM u@A.S7ri@k1Fs@9.81ߴ.0CF*Dp_th&t:|Y@93p@ q@]@5F@ 6]Y3>ibήjB@]S`P@@P@?g8@\0_O??g8@\0_O?%zȨJ#@.}`8 qPI a@]ᦿ7=1|Z@DzX{?W3Zj@;G ?Վb@ks֕9wk@^B㼄lX﬏;=.P,;~Ӡ]0g8A@;~@?P]S`P@:0_O>g8@:0_O>g8@.}`Lu9@6P@Zv#A?I a@XDzX{7=1|Z@;G X3Zj@ks֕?Վb@^B?9wk@E]3{Օ"U"3hb'ǣ@P )J?ٮv@ 64$r AY'7 ZM?9@ tyEkV@f8po]@A].@U7)Jhb'ǣ@64@ٮv@Y'W4BDrAZM?9Lҁ2Lyw@SV`k6[d/2+> @NN,)|M6@޼/@7 ZM?9)$.Lx\Q0p-A"<2E-sF@ ig@/1S,)SF@\t@#\֣@#m{s@ƴ@E$XI @:Q@z@Fl@]@ EPC@@jM@YCJ83b;@} y@VN,@ @޼/)|M6@ZM?9@Lҁ.Lx\@@Bk".I Ag@(AU$:XYR@V@tu@\t,)SF@#m{s#\֣@E$@ƴ@軴(5?@D1 x%z@Fl:Q@EPC]@DQC\FA} y3b;@o`l@%aH?^~A,p@ ow?Jz\@li%/M@Vj[b$EUxU@ @.9, ow,p@ly(%@SmH(P@stG݈*@Ga< _@;^F6Q \P@AeaH{@#zP(we|է~0fGa< _@@pL2@ .;G@7#zP(@AeaH{@b$f" Q7~r@E@!b^v@;^F .;G@+@R-4&z@"'49Tއ;j,be@2^P@CdPGk@&T@?ܙ\@Tщv@!'TsfRa@6Q \P@7R-4&z@ 恤@WjHjwZJ2Li_YQ@f;A;@D7T@\6?@1s37Blù{L"߽nzR@. 8jǍ@hƷ@ٮCes@IE>ԑ g߽e [v}. 8jǍ@Hl1@Ns@^\jUwk}]'oh'MAjt3@Vt@FP2,j#qC U#1jt3@|,@7NAFP2@Vt@61M@ $h,n+wB^) dLd#ظ@wRlbLEC@_m@PA!m@5%z\C3Qlk9wRlb@Ld#ظ@_m@ P@"U'%^Aw֙ΈQ'ABsA:Ǧ5ٗALmD,@]E6t"A*ƭ@Mn [|r(l AM3t6G^QO!@fHtͩf!.UQ@8@g8bV(@ @0R;TQܯQ@ndĨr?'FMzA:g7@&i@P\@n3Tp@rx@Saue@# Cv*"@n@SLH,3Y&i@@ Elp@2!A\\@6Bt@VIHR@Flpމ=0-n*"@ Q 6vYɵ@@x¡~ u@<9S,Z@cFX;|@ P晻d@ cb%}hZNd@uVؕ@~w$}u0@ ӯӲY^@slB@霨d@kA۹M@1 Td@!6~w$}o)pģ@F@]j@fU@~ |OZ +I@g,|?d`ĀӟJYP@ Mek@߇W+H `s@bO*E׽L@0Uy0@wsaEi@mwu`'rrh,|ҿ+I@Q|VC@}mp߇W+H\еt@bO*@ `s@0?E׽L@yylIX.]nmWdmވdsgi2Χ@pm@@a@g]+I@hkyZn xfV}%rs1=e~pm@BhV}@o`I@^T2@.0q!@(* A='ǂ@PG7Ŏ@@8f@ N3 0Xwb㭽FAi/Q4p qy_E!A_E@V@-nLy ϐnuHc~@&$jFP@M׆D$Au~ @dQ`@"3Wz@K@=no~j[@`@&H_@*oф @뮧N?q!a)q ='ǂ(* AQG7Ŏ@ N3@8f@Ը3>@hpi/QA:r0@ڥ_E_E!A-nL@V@0][)u@].9FC@@P@6o\U!@u~ M׆D$A ([@cǻŹ@{i@n)i\@|/ -@&H_`@뮧N*oф @CY&7qh@- ytY@N$DgP@ D@H9E@@Frb6bo@UV?KaV@_m@A@n˯ k@ͪ^AmT@q| +D@WЂ:@Fr7LYή@qUVb6bo@L@@m5@o7@`!m{zd'ҵFnG]p!3x b@ @h #@\,C@v{⸀?ٳ`!m@o7@w+)9dd-.Фݧ @h #@)g@]{⸀\,C@YZZZAKB C X|:Jl@k0@@8.?4p:r0@\L>k@̎g\r2׮@;p4Cc M@1Ċ@#@hh|8D@i&{hc@58/gB@?LR'@Y9@YY~b@YZZZA"-u@\sGY@B5(58.k0@ qyڥ̎g\rO (@]o M-xv@#gOIX~Ds@hh|8D#@58/gBi&{hc@As@e3yM1RJ1s{@g(l/ ߥ׋@ @g@@82@3bg;(*Ln/r5 drŧtm@6QeMI@9$o AQAH?@Ơ@rKqIN}<2g@ß NAEJ 2b(lt@E-sF@(AU$E @2AEM@8B@.Su@ѼʝY3(lOX{Y4tZ@a4GD@L|vC@ p@ن<~ sZbyz;L@q?5@ka|ui@kS@.Su@}U=,h*ח~~`^=@+g?ڃ&@ p@A۩ Ho}@k1sfq}.p8W/@U=@D"L@szZ06@Xr16Xj^@c@#G)'֌@,5vM@>WeIlYH}Q"/@aS6ҔE@*~1m l@ *4-oL]t @!((GLz@fBA8Y7AD=\@ ?( .nNG@,5vM@5N@vF4Q {Pyk=6ЊDx S@Y1uF+'P@d XR@X)(ƾ(@T\HF@ +8D'U@C@:Ze@-E@B~q@}6@޽<&jL_N@xP@?:"]K@, q|dN$PV@ +\q{ Ѭ@8U u@TWT@kaq`@#.܌@q`@#.܌@:ZeC@B~q.E@޽<&j\Ȝ@yPL_N@A@UYaޡ@R&q +\q@N$PV@9U u{ Ѭ@}** Nݼ@$.܌q`@$.܌q`@N! @[!x@}3@BI,?srR#s@7AZ\@) ɡ@ IivS@$o݊L;E@EoJ0Zd6@qM\m@H3?cl=gȯ2 E@Ѯj;@n{6@I9R-l3(a@a@@ht1 "@4S)O\ŢlhS@>PW@";\v@ys=g۲qJ@4l@htVk(@4S@1 "@lTb!lTu˅w@5zs=g?\v@Gm@MG@qivCkԲ؆XA e@>-x:Dw@)@OAMG@lBɚ@ivCk-:ֿQ>ۿYd@Ԟ)@OA@?-x:Dw@~Z(Agً@ߢLWU"je@:M,S@gͱ>AFbJA@'GM@pz(q3@$3+Ao`-ko-@@ *qF@A0|A-L=@Wb6@#M-ko-nW *qF@1}@ kX=@.uk#MAb־Uc@,A wx@w+6c@F*ˬxPU@ɮgyȵ;@̎~Z@ro $QD@ؙ8-Wm ydOK4|@ov@=UnxyY@9sX@eC@XE89@EUi@9y@iw,9yh@ɮgyȵ;@@@:ڃ'4XD@f /@Lgԏ.tХe@`@MA$VC@~0C@+U*:-@AFKv@@?hS@Q\$@"Tq, K@Oҥzuf@ij@R9ٿzeʚte@'UWrP@HzPP@[Z?@XJdx4>@ e9?ij@K6aߧDK@ 74@<,K,@T*6< 6NXhH3?c)[r@Dc:b@놵 %<w@zUK &@'/l0|!#j@9J_34U@{W cwpc.@hrCt|F!@0%K0," 6A@El=gDc:b@Հz@҉u0y@pI'&ϛ8ӽ;H1\:@;~tυNh@AD}Aq`G_V@ui7֖7O@:D1J5,J@!!6@kcO@c@s{i.HGd7?[5q@{DK0"$C#@|dS9c@=?B0[wOw'Ȳ@`H,L:Ayd6@J-ў@\ܚ>{LxE!axHq|KVzfs?U_@ϼ @IAIe~#RڰPO\"L:kt:%\@|d@$C#@Km/r:@ϝ}`H@Ow'Ȳ@yd6@AP ATn*s{@N @) 12&; 1l+ơ$ Թ 14mO޹xr;ϼ ?U_@.Ӄty@#E|%j~P@9}Д@?'xP[ u#[@vδ G@ޥx@A`[S1tDRY@ Q@[U1OUv@:ދw@X@DGS@Y J߉@ 3Nfe@(dWH>@CTMP\@ Elp@؜f@?2@-,@>q@՝$@e@a ާ^s4ЁAn3Tp@2!A\\@?2@i1s@g[@A ]@;|)8@8@)=M8G|֨k*kJ,{lc Av&@[|@ LѰҥ@s+WD֖*,YA~@TfF@G8=W@O^x ] 1v&@ WAB~n/8#=V7@s+WD@ҥ@1{t@@\ ;8=WTfF@"X)@>}]q7yMnu6j@ {S@em0&8@|\;@+ɖ)h\p@xWC2em3[Ű@|\;0&8@?j@S"fzZԙ]"d@P-Q@ȯ2 E@놵 %҉u0y@ޯzͪ@S??W0Db@ $tQm1@ 1$P2S@ԃ@Bb@6oPb@rhp@rY@J@4a$DC@-~s9@S"@?j@[%~q@}]OJ}$7>;E@Ѯj;@<w@pI'&ϛS?4t@ Mn@8ĻJOwR]A@ѳԛ@7WC|Z@/,/>#_L@OolY@43sC@;#U/@ W.@/^#@kOw- C?@0L@"s@( `cbqM]vS@AL@%|NY( `vDL]~@EqS@:x"T[Z?@]CJ@֮h@XtO)@:52*K6O@Wd"\\~'@GO??NA|t8a *q, K@XJd֮h@ϕ.py@8$ M@,GK@}/i=@zFWI?ڑlT@벥C#$@ɣUrRHC,@V@BvjQ k *ڕb@k[}@*gh@2jX6ք+pέh#@`_@@Bo@'4b|@5[Ou~@< ϡ@G7@V[ >@'Aq@j֧ @kg2Cy@Vxr8@?V@-L@iV?@BЮp-zU3Ǜه@H[Z@:R5Ct@cG @^5ݕ@BoF@G3t@H1[@ZL@0:[@6Cr@O@rx@6Bt@-,@g[@N@4av{@.z}.x<6/-9[Saue@VIHR@>q@A ]@4av{@%@?u1]Nti9v6}bј⥶@t< |@1AMxfi$Ͽ@@%+^fӺh@ ,e,Ak':]zde Vt< |@V(O@510@Ntl^Ꞓ;Tf{@&RzgF@a]<@P~g@KVf@JpM_@>] ю'.p@h\~@o&a@?@:JB~@ Nw@E_f5b@nܙYhp:+~f@2?ܷo@[ؕQ@P@s'%N`t@[J@F0Zd@47@Yn$0k\@Z?g @WV <ϧ\@C27 {ƹ@{u'\[@/1SV@tu@d02\~D@@C^@|[C/@pJtf vp@]?[@N@[6Q^">:J5C@^9^9@ r$ ߳X6u֍@{u'@oHClVn$0k\47@֎@%8,]G@%O@JQ@nB?s~@/Q@^D|@dݓ@C^@2 xAҸ!=@J5C4ݻH2z@S$7c:Xc@ ڥ@$8,]G֎@JQ%O@[VrEl@/j^D|/Q@|[Ҹ!=X3DqZ AJ5C@@#@ǣ' x[@ N-f ڥc@0^βX"seh@A;_s@DDVF@-6PGJV@KcVؑ@D`Xl@f@'%DDVu6a}@L)@eJn@@ ۚH@p~lp@DTAC{i@1ct@~66c5NSӏ79Se7π@h`j@s@nE\@9(OrZHDTA@p~lp@1ct@^~h@(b0#Ayaӥ},u3k@s>@8UB\@ޜy D@e rx* Bs(HQ]@tg+?>WeIlvF4Q|A@ĺ,!Q@"vшK{t!ԨC>@6h+(HQ]@YH}Q {PyĺvA@O Aj Za@9@D#@2AkS@oS:{j@pFf@ٶ.Q@,!Q@O i*A`Y@_ ut1bT@$.O& NmEϖǻ2AkS#@rzU@q.ȳٶ.QpFf@"vшK{Aj Za@`Y@T~Aj1B@y>TхoRuhg0. AOR'c8E#²YY:C@ZC}pQs@M $"@*@Bwg@T,='@2@Pn@R}P5@r@b5Д@@96oj7g@,ֿvP@_ uy>Tmyx@zj9DyaC}Hw@[v Y$gi@[=^}@~0@pTGݐ@0X@lC D nn@t9GͿ$R¾@&?;U@$h9?IyO@7-7M $"YC}pQs@2@P@T,='@vdyX^Ѝ@96o@b5Д@+ֿvPk7g@t1bхoRzj9DyaA5ٽ@\v Y$@B}Hw@[=^}gi@lC@0X@29G? D nn@&?@$R¾@$h9@;U@@}s@D Tra@%7%kȭ@ۦ|kUWq&@" e@bۦ|kUYy[@/A@IB>Ѕ@ 7qB Cv@^Q@|TE@ȝ!ѣ@E~lc%28AhB7ΐ@;Yc@fl̍_ @.!l@ȝ!ѣ@fW3 @Pېm>[~ 6T7c@p܅B!N @1t\Hs(@.x?,D@nsn@8ͽ1SCum@ykYDԈ@J+,h[@RcT,x~It2p͖@X?ch@%@-Hc@E\K{@᭣Y;_Z-x\Hs(@nsn@ͪ@.4qqh`>Ɓ@eC$fr_tk&@X?ch~It2p͖@-Hc%@T'c@3 @AQ&Ƞ@pTʢvi@V0;Ă@t)k@^[]@Y1 aXb@!t`@8ͽ1.4q*hA@q4vcu(w@{+`@ْҟ/@V;leo0Ⱗ@LqVy-&j]@cXd@E:C_@Pgϟ?~ow@G>vh@6@MKh|ג@Mmd+АmP4@x@3 U'c@=%d@ ¯:@W1 a@^[]@c@g_0@SCuqh`q4v/ @W;le@ْҟ/@LqVy@o0Ⱗ@iE@cXd@Ngϟ?~@:C_@,s0c@"a 9@MKh@6@6Wsc@H\r-)uQx@)0ڬJ@RJjQmRXp-t3(@Y}.`@-#gݛ@kE0@j +FӋvx:2,@&h/-#gݛ@"@AZ)P-M @K, @2r@qZ@C ت@ޜ!Koo] @ݧTIL_N@yPm@yk>Ɓ@cu(w@x!J@4ݴ @Z@v۞:y%@|u@J\#ŧ@E<9}r\@h(1r\@h(1%Z@y;B@ޜ!Ko@C ت@ݧTI@o] @xP@L_N@YDԈ@eC{+`@4ݴK(h@}@t̯@/zn[@݆ʒHJ\@|u@E<9}@$ŧ@g(1@r\@g(1@r\@dp3#W ^ @}@[@?JEe?q1kQ\F@ҺqҾxH@|Z4k":]-q@oM]MgA`m[Z@t̯@?JEe?mw@fr@>=@5ԲlY@itjl@KZߌI@ [egF%P@|]io2h@@a@o`I@SZ^+Y@BĦ P@<aP@&h2@t@yia@QYskD,@ TPLnǵ@^_=}@'Vl1]@@F?/1h"@Z 8qu;BOCW2h@|kZ+@1zmMa":@ln2?X@ZO~Bq/c8h0V+WY@Hpސ@p ^c,É/@ln2?X@4S,@lV)q7Dk</@yzUK &@8ӽ;H1?W Mn@o`]@ꢱU dF@q`=&u[p~2@ d\ Tϓ @( fY?ZgP@4}$(@'/l0\:@0Db@8ĻJOwꢱU&3h@7Q5VzVe@o o<$G :^@Ձv[*@V.9{pP@J-'davN@UchD=@N* A @ǧLRt8ɫK@s@)[@dz@1@߬@\ԢZ@b{9u&@:LP@ @KybJ@Rt81R[Z@b@zr8@o@U@kQCS@åuzE?1g>%L@7`@ h %ۿF, ,G}@FZ{@)d@sD@d}vp$ y/@9IbL@n|o :@B͌@sV | y@ O | +@[ Ē@h %?7`@4ea@FB)dFZ{@d}vp$@sD@9I5Z@n|o@bL@{ۤtƨsV |@B͌@ O |@ y@Y Ē +@@EIIv. @aGe5̴3@.LJI!@B 46iيQMa@.{Rt&GV@sTEIIWѻ@@o#5BK@YVCI-]R#a@FC06)L@ci4Pa@q\;E!@Ysj@$2:`@MyB@2`y tcن<~k1sfqŲrX_}@$i@p$lQ>z @n&OcT|;@4"6.RGeB@$@] bg^K s}.p$i@꣌$@c'x+$#@}ˬ|mݨ`3upFR"|g@zJ1Z@M7@Tw.sǗO@@g;I@Ҁϻ@q\=A~Ժ:x@\}@ӕ #xH;@:z@Ҁϻ@4'@[%Zf7<;q\=[%Z?@QT@l2K}@t r@&u̝ A~Ժf7QT@@8'x@&Юj[@PWXLq@vM.ڿPd`/@xՅQK@[VcEO+zY!{r@ !\@8%c!wM.?PWXLq@xՅQK@JnӍ@s*@h>la@rk1J@!Sj |t cGV[.n@ǧLRt8۝AE8@[.n@P%Rt81E8@֠b@PX8?`c@03?T@NS}9jLJC@{a@ߕGR+&~pQ@'ga4xA@N1,@y .@_b%A(JS @t%Ie@4SfH A>a߻@1&y|D"sX@ѵ H]ysbj\X@Sdpu_Q@Q9>a߻@@{!2 x,j@w7D@S}9y .@盨^@jn4ząީ =@s@|7Z@*Pϳ#jLJC@_bjL@q:$+T"@@ny{Ƕ@5@3:n@ɫK@R[Z@1&{!2|~\gnAU@䆐@Y@qA?*@g2:@18hbaӃEr@`aR@9@[S@|h@s@b@y| [e``U@!_z@u*a87Lv8@6COMQ'@e'+>nN@t2d~S3Qg'%@Y;g xA1@7 WUQ6&@(3`=Y1aVRMxo@@a̔?e$[j%|@P@v@`u*adP-<@$NPo$Ke@lb?fT@01zd i@|<@G (ul@Fph@EG}?Vv#v@ᚵn_@"@/ߴqd6pbT!\a@J˞@t`ق$@FExiEG}?x5@ᚵn_Vv#v@/ߴq@"@FFpbzjzt`ق$J˞@$]׭uHjw@+>2W^@(L%@N|azx@- uY,Bڿ[#f@rM@goz$¡L=^@\JD@N|azx@F6@A|tkLM@5yOV3@db@r$(&M@B W#޹EK@pjgяջP@-] s@^ #^yDh@]`(@м`OFWe?\IKܽ@9ǒZ@4j^ rd@Dr@EK@U,Y<l2PbϨcA@$y#@EK@+^]@}WMyY(?=Pki31S2?#@vd1@Td"˂A@&nK1R$/`<@ha6Vŭ.{?vX@~қ5M}@OZ@X3 A\p@#VkPy@/[̵-E@dJZs`t?ET@w@u[@+<[BCǬ@„aA' z@NK*@ 6'Ze }be/7V@Y3 A\p@OZ@eV~/@ _i*s@w@bwt@9kƭ1@i}οH_@@lq߹VIٖ4c 7cN}@87Lv8@$NP3 }G@EǦ^Yы@w''/s&xY9@\.J[P؀Ȓ@@9;ZRTD9CkD@``NP&Ue@ )TӅb%Z@(yO^@S4sc ^,gO$p@x08»]@bF3@t^%p݋@7L`@l(@Zhƕ3 ;*@XW*5.{z@8(K)qu@Tt^%@bF3@EV\@l ]rPp@Zhut@8ѵXڕ@IC.H $@.Gt@Wkk.XtO)@8$ M@v. @@o#5=;@ޭq@x]NsIik?I3@dKS3J]U1@TFl h 9Fc@qIDWzc@&TT:5,GK@aGe5BK@ޭq@Imj̆@Dkk3 VC{7waJa@GCtBݬinX@`d@;fQl>P@1*Єzuj@̗{:ĥv EÙ@%4D'\@uu2j%4D'\4yϙv%4D'\@wIq@%4D'\+ 2DAN]dZQΪG 0v@e}Ur@AkG@㠲^@QIl i@aKY@@vyu@5˫߮ehU@xU0up@Y?1A@G0@Udž_6\v@5YM@cp@$o<<rLcmhz@nҿ8v@Zma0khtW@ZW\ÑG@v@QIlq@ؓOGg`@+uShP؊@>"eJ@@KKBC@oc@ŮIjwENv@qL$hE@B@︼v4Sfu@wU иENzj#ݹw@nbַĤ_H l@<M@<|o#@6sMs@yb}@#pk gC/@-0zAKN2 ݠ@3Γu@i0@m @pJtKNC+ AbbP@;h <H*k 8E@'&J`]!gm@.8_/?C?"Rra@ĵ8aX}p'&J`].9@7_/!gm@a@UנNAb־US@#=@A0| kX=@̎~Z@:ڃ'4XD@g@Šs](撪N~㼇x@܁ +>@GLb@tXb@ L@|@ r@#=@Wb&@A-L=@.ukro $QD@f /@Šs]-ڒ@_ V*go@qZh@ &ŨL@T=:L@Uiu5@wbҀ@5Fl\@kV&L[~s.@s5@VÚq'@Y7Q`۝sG?Y,@h@mdPm$@$LVÚq@s5@Y7Q?@z@]RundPm@h@V|@f1ʝ-M@2@*{è=6q@)SFE>@|<`\Hh+@uig@>cz $,bJAOr @Kjww@!_Ÿ!RvCHuB!S@uig@٣UD{@uzb|ʹ? @xjr&!_Ÿ?Kjww@wte>nk@/~@ Li6>rx#b/["/@k=6**FW@egtP@H 9!@`4?~3m{@@AX7A@Y)=m5 >'@,E<%aS6ЊDx S@egtP@FB}@w_?z:\@,[ۃ)`@eAu5hRS@'qoD ھb@/Xo;@ꕼ@+3+yR796k tyE2Lyw,)SF@\t7z@1!Ff@@&@Op}@{X@1H?ꕼ/Xo;@p~U>Z@e>i=BՂ(kn@=<# @,F@EHu?w;(It@(L*Z]@}zvƴ@E$@Fp\G6@et_@DGS@՝$@;|)8@]?[@f vp@緢i(@lX@t0D@X\ͷ SοbWU@߈(Jۘaѷ@/O@tϟ(g@JB3@0;2Nr@dqPX5f"@UtY@hzJ@H?4c*0@|+v4@3;@Gma]Eu=@^>i@XSO>@[ꠖ@b"<1ly@s]ć{@”'^s@5LpnT@X *~bv_1>@E$ƴ@zJ @#CX8Ug@Y J߉@e@8@f vp]?[@P"@\9Ǻa}@X\ͷj'b AupI@uo@U<70Pʡ@dr~nS,4@:S(@,JrȆY@29v@d3%̻s>6u@,%JT@[@@YrLJ3;|+v4@ҽߖJ?@I"ey nq@GPW#XI軴(5?@"\>N@[6QC}Hw@\v Y$@ SοupI@z/+@ P7{\fze@%[ ۔/n@*O6a@n80~@W\xc@Y :[v Y$B}Hw@bWU@u P09wAAMl `@˖g)G#@EyHqb72@xKXWB̊@*O6a/n@xZ13n%@tԛ@,\Z|.@7`s*_@hɽ(E?Szmq@>@3@|'vI)Ah@R@[>t+R0l@=§r@"ٗQsD;$$ÃhlcR3mODI-L/;`@־R@ua<@R(d=§r@V{ @ZB $/HbqfmH:k\>}&@q0 7X$@޹u`oJ@2MK l5/p@`$'\~$Uw@jXLn@?b@?KKrE@@Z30sVy@Bbyc25G\V@INT$޻@~@?ęU!@x#h A| @$żJ{qL@n~q磫T@2-Ԍ{:lZ@fqh@1:@ K|LT+5@:,TtΝ;@-[3TA ugk40RJy1\c\-@*;3Ǔ@pTI#8@ }1@V؞@ K:TAep䮜Kri8@N4iҸuΝ;)AnP afC;@N$C@xY9_T@+?@╸} gH@pk4_+uShqZ.@ƒI$@"ٗQsZB $'f@0)3Yx*S@r>@=DRQEV@/t1u7%@ R,W&q@SrPب2E/"qY% Ԛp@3#C=6?@w'@,Ֆ_,Κt@P؊@:"Cj8T@D;$$/Hbq0)3Y歑Ǒ@:>@+Q?u'@czuzbk3`@Qe[@DաO@|a]]D@HauM{@Ƀ}$@,  $,b|ʹQe[@|E@ 9mD@%>r׌9@'tBaO @Ƀ}$@*K@orI@׿ {@ OQ 5>Y@dsj y@3@uPчSV`k:Q@z@FlRϔAo@߈(o@ApeC@nBm 7eR@H*xp,Gc8@ vT (l#©@*^ &v;4@]teorI*K@5 LJ,@msǵP*\@5_/˭@6.·@6[d/z@Fl@:Q@-+$&@Jۘaѷ@U<Ml `@nB8@.oG*lw7@LspSpօ@_ )[1Ү@]te@%v;4@>ԙn@J^m!rlyJke@^礮;@v#x+"@als@1cJJnŢ Yn@@n&hf @Ogi@[=^} i@>"eJ@@9j@ _7@7GW;\~~h.}@Enղ 3^B-tc@W yc4@ZP@Z˟KRױu@{@A> k@WG4A@ǻ_{k@u\V`KrKk@" ;@%`"@%L.@6u1cJ@als@o` an&h@@>P?f @[=^}@gi@aKY@@KKBC@  u@'}W@-xqqmF\j@kUQkA@z%jͧ,-YEc9@)2 @Z˟K@ZP@KT=r]3t}@\DŽP)5ie@fzj@PGڴ^jA@\7vx@A}u̜>@=^هAvݒׇAZz: $U.B!A"J"@~7}4v,We&$ASMvZF@``޿>@A}u̜>7vx@vݒׇANهAZz: $U.B!A"J"@iyš)a(ӕ@U,=~@f1$s~@Zz:Zz:D.AWCNA\rC!p:+wcGf9Yp@i%ۯ@ѽ+?W8@ $ $WCNAu92{ABK!lc4];'Okqp'Px<@-8 @Wx7&X3i/@ۡ.E[(VqX|0j@MQ'@lb?Yы@0h՛b@K?;u%.@ae^3|]%@(pgG`J@+j5 Erp> Px<@f b8,!5r%ӐN@Z.DrE"l[@f%Uf@CV8e'+>fT@w''/>CkD@K?&]@H(%KDe{mI@]}iy^@x%+'F]K@6.@_wg@1@c9X@.i>ܻ6@rS%e'ZN}k|@)xǡS_wg@ӹ`4@H(c9X@*Χ!@UeReg:@C\RȚ!|@@rt/@. S@k*f@]KƱ@Eغx@Ckc@` !D@ӮL9ɳ< `s@bO*@3jN@" +o}pi;~SEJ?@Mօf@Rm$\r@ho|@@a !DCkc@M;@qҵ5bO* `s@" +o\@ԊN@7|Qm$\rMօf@o!{S@@fv@q{"@cD+0&8@|\;\åuzED"sX@ӵ H]@@@18ha/¹ATcT\06#J6+=A$51UA:O=HqGK@ҳ/V|\;@0&8@Ԣ?1g>ѵ H]D"sX@s@@bav9uV?1VpZ`9~"c$51UA7xA8db,3Bd`&).43ؘ@0 +@4.@Z@%L@ӃEr@ ) x@Cշ@e? @D:!@@:O8db,qqf &AMi=@3z9]r@M"2k4nE2eh56Wf@&^q;Q@Vw%6= e@z9: @zۃB@u7q}wpa7ĭ@CF$8q >Ľ@3Bd`&Mi=@:AUEȥ誹4t%@y@@TUp@VgtHk/ E5ĭ@P @%m@W䞼0@Vߺ@ e .X>`2ƕ38ѵXڕ@cwnS@k~f@oRxIva@Ig0~6f e[Y_@ d3k`<Щ ;*@ICk~f@󊷾@`JwrNJ}@Ɨqt[Xߝ@?:"A@@߰u.ܵ @@ehj1V@2iP$נ|LQ]e@]K@UYa߰u.ܵ}M7@ @? `!p@ 02B@pT[|@B~n/83z9]r@UEȥ0sK@` rG!D d?@ҮWp@Q!B@ qB@Z̚W&@peH'ە@]6 + LѰ#=V7@M誹4t%@` rG!56fW AHԿ@SXo@%h()}̡Yvn6@TDgݽ@'xxӬ@38 @Oҥx4>@2*K6O@}/ir@Q9<Nǩ9?zuf@ eWd=@Q9z ľ@21߉࿝/Ʃ_+7@(V?׍@U,qYF@3v\?1 @kl`@Wb6@#Mؙ8Lgvyu@oc@(撪_ _7@'}W@@77T@|\%06^[S@H@d_VY@#T!,#x?`WN >WBTW cZ&x@#MAb־Uc@-Wm yԏ.tN~V*77T@ыS@bSΪ4'$e9[V\[Gy"皒@ؠhq@QyHpN{ڀ.CJ$E׭~}!5c@vܒ'V?y_@&W9,2׮@]o MdOK4|@Хe@5Ů㼇x@go@7GW;\-x|\%0bS @k_@ITb<@m,mADk@vdJl,B?٭)i@~L+Y2@';Da7ԃ@9k@ɱm@pXG@$ @V[s@#6Ix#E{LIJjc1FMyzMy@K=#fu q@F/]Hunr@9-.m@qT"o3iܒ'@!5c@W9,?V?y_@fxv(rr^>1>@;p4C-xv@˫߮eIjw~~hqqm6Ϊk_@Zͦy@z4{ʷhplHRAc%oPk@vdJl@Dk@TUKfh9l#6I@V[s@T(`o*K%l E.fAq@i! ূ@ [ )@%hxI9@~umd33kV"@ a3saaOu@{+@qeC@N 's@.Ip=&=T@_E!A_EhU@ENv@.}@F\j@^[S@Iz4{_Hg@JTnB_@9Hl@? @ sVl@=*Cpx@]Ճ+X"ѽj^if>@3K Tn@0FmAf{c3fj-@{+aOu@j-ð@َ|@a sd_E@_E!AʷhJTS>@ sV@? @+:lj@guQ9r@T<jP@\wm@ T@p$s'zq@~ťX@Sޜ@wTvLS|@O[X{p$sPA=h@U8^B\@II*}*'{,@'?0p`=xv͚@ o{@":8bl@\,YG@X8^B\=h@JT{@ɲ)'?:,@'s o{xv͚@\,YG":8bl@8 ~@~66c(7{@$IKn@}òW`Џj@r.@7 X@'rg9vFÙ>C.P8m9r.@ŸZI@LOM"PvJ@pi!@텒Y@Q}Jyp"@6y>V@m[@j]r@Lak"?@+@XaTxy3eۖ2YI@@V|OqԶ@tJ쯑&"'QpL!V@T@bЈ @/il@ryt@奝\@) ![[@34mk@M./jM"sǗHrS@V|N&@g[oJ@A5bs܂@HWįnſ%j'@ค5 @jڀޑKZRS>a@g@\cЭa> ;@PVKd@nſeF1aiusค5 @4fڅ@8.S*>n@d -r@. oX\cЭa@g@cǥجm/eW@wu @Iۍ1@-Ey@ӵ@7 8j@Iɹu.TJ}F6g'ewu @cUx@-Ey@~@Xhs@cŖT@7yaG6jDTA@Sӏ0#Ayan@W@c>~@E v BT!؄@Ku @W+­@H@W@Xi@6jp4@cMrW@ RI%Uy+@sx@'Y_ٯT!@ӎO@$@iM@ZӤs1ӧ4F ;ܡ@@9|@%h@&f3@N$PV@ +\q@>PW@u˅ҥ@s+WD@@J5C@~It2p͖@X?ch-&|u@J\@%xG`0_ɖ^י3AoB;Q'53h2^p@$&@Wv[ cwq_$dtt7@kS@+J`@w]W@^>@Z%yn@MN?p]["ہ@' @["ہ@' @qeg@A#f:sxUy+@ڗ·@j gӎOT!@v떕@!(#c@5%ȯ}@6V8@9|4F ;ܡ@&f3%h@ +\qN$PV@";w@s+WDҥ@J5C@X?ch@~It2p͖@j]@iJ\|u@Oq@Ϙ0_@W;oB;v-c3A2h2^p#qOv[ c@$&@Ԫ @TdkStt7@w]W+J`@x@@_@pʡzHq@$WM' ["ہ@' ["ہ@I#f:@reg@#zV# wڙt@S J@o9}׌x!j@0z@@z@ǣ' EcXd@J6Jv@)I䙸@3h2^p@#q)'@2p|A]y ]y @azҜ@O̫Z@U2@;.lNg@sߛ₃@$Y@{R@s@HgH ۳'xA@ VޜbL@n|o@+ @^#@W7I.c+֬u@Blx"i@rLꢤׁ;.lNgU2@P#p@#eyp@s{R@} z? ʱ Vޜ@'xA@n|obL@^#@~@;br"flOBl@֬u@rLꢤׁ@x"i@u+@\VM٢@?/Ҫ44@=~x@=b(@G+O4#2n6/@&}vjB@1FZ?@4]myJ-ў@Tn*s{@@'4b|@G3t@ {ۤW7I;br`oA F$xq!\` @t׸Dw@&G@[y@EWӐ@1m@h@Ҁ @Տe @WV_@g@ayNQԟ0 9@-Lr@'kڙA{ˌ@%k `@ W N^Wy@]t@G '>@xM8*9ɷn@\ܚ>{N @5[Ou~@H1[@:@tƨ.c+"flO F$x A5N\5q?(b,42@[69A`@au@S@I@g @3 @&e@ (Adٕ.$E @!@%8@ )8C4U@AD}Aq` 1$ԛ@p~2@o o@c'@@Jp@6`w[XJ׏-@6k@c|c@o@pz@P9FXS1Vc O Ьa@u=9rY @wQj@G]Qa@|}^@cAė@, @1$ ըW@.LbSh@"W@"h D$9-A$HLJ@50 ,5-zWh ~"h D@"W@$HLrǠA8dWEW;[@b) !Ʌ@T#@C)tQ]W;[@>rT#@0l~@mO]sL3xi!g2@O]KEx7x&C@xCyF]@th5ܠ<@gH{8فEK@@e@TcE@*IVݽ==*]@ΝIgH{8:: @D@JhO@UYUC@֪\R y EHJ?D@UYUC@C,)@ {w~iҲƼ%bee>w@qN@``@ӌ>pc.@ui7cSZ1o@R+`@ԃ@WC|Z@ϓ @ՁJNkN@N=%#c̡k8&=lr넳pA9@J^t+@*z{ButHmJxReV@-nL@c M@#gOI6oPb@>#_L@Vv#v@ᚵn_Tb<@plHRA1`"j@Z^3PF@*z{YLf@fL@#5F첔@F@?Aur['#"[8h@Ӫ _@YX:@p%]4'I;{O8@)ܩ0{*j@hZ@1A510@<W@bj=ZpKOkY@bV<@­*;k,AVL[@3wh@z_7Z@Tף1=@MxfNtbj=Zp&@59<@!{Q @m̟d=\@eW A@'P+@Zbyz;L@8W/@p$lc'x+$#@\28+ġ@qoo[Ba0E,|Q@ (~:@O:4"6.R@G WK+@[{@q?5@U=@Q>z @}ˬ|mqoo[BamR\&@髆:@$@"C+R@|rĸEb@2[={vIS@@YkëYV w@`@lDyvKT@FIBqn/70Pʡ@EyHqm 7eR@.oG*l*oV ~@^&ހqa" @/wRH-f@wQ#z+~ @4f|Q ^~v@]7 w@g" }ɂh@ΐt+rCe@O@drb72@H*xpw7@^&ހ@xv<q$p@/tf@ D0CFk)\@@mS@pOFn|%䉜u@tCF*D@?@F8S]}Jkl@f`=S@!7#LLЄdt9oۦ]@aؒGF@Ãhlfmx*S@:>@V@&s~@/Zߨ@\1@ժt#貖įߡbWF@# 1@cR3mH:kr>@+Q?u'@&s~@Fyϐ@\1/Zߨ@Rɸ@Z @]}Jl@a@. oX v B8w@p1VPU @|YCm=˼7@zوf)+!@wZT?r$oW31B@g@\cЭa@Ku @T!؄@n|YC4@_X:@@<:-s,3 ykZW@2Q8S0 B;@#@uDK@72\cЭag@T!؄Ku @ݥFVʄ@m_XKpr@rJX@ O @>2b@TKS@y?s`@ ,Ɏ@Z3ρG7@0:[@[y@[69A`@l(@8}c@g_Y+-A9@b6{(]v@)ڸS@k@s@W#@gڲ@ +1weW'g@S) IB![oR[mNZ(JLmuN@)@ ꨼`C1-r@=u pe@>g0l+͟@D1&.|zcY@ ꨼Š#@1-r"d6A}@vOf@n _@(+>H@̚@h/>Rg~@{L{@Q%`:@fVjNm@eΐ@EnkUQkA@Dk@vdJl@`C1-rXK@SvOfA}@(+>Hn _@h/>Rg~̚@N%`:{L{@eΐgVjNm@ղ 3^Bz%jͧvdJlDk@1-r@"d6<89<@[>S@t0@R0=I@B` @w'~eO@sar; Ny*@ݖX͇@+Ԁuy'~e@B` @sar;e%{6@{@ځ>IGky$ }`aR@Z( Lt@ehj1V@? `!Z,@?A2αÔUS%f}@C( u @sbj\X@>9@F_i@"2k4ny@@2!p@D HԿ@?A2αޖ@܈q>|@Ob='+ӄakBV<@$/hjV@ڙ.&@K;e^ M"񩼻@ً@FE2ehTUp@dSXo@$&@Ov[ c@ÔU܈q>|@V͢a A:iI'-ɠp@ ^H^݅Y@}78@ߢLWbJA@Sdpx,j@56Wf@Vgt?@%hWv[ c$&@S%f}@Ob=':*{7A*Nw@W~h9`@X±1aj?ܻ@:hR@i&&!+g@M7tx7x [w@'4eM#ز@B@NڍF~r§t@o @<حi]F뮲@rN\qq@rhp@OolY@`0%w@eoS@Hz8h5My#5F첔@-@Ys?CHUsu@[k@rY@43sC@᤾a@CL>@mJ<9u9-F@Ys?J@@:Iq`@ @$bU@UÏ_@=@#n񣜼@&PsM@:C_@Ngϟ?~@Zas@ sco~:]@&^q;Q@Hk/ ҮWp@()}̡@@}:wq_Ԫ @zҜ@a+ӄakiI'-*Nw@$Abqp3wc@x ϵ@= җU5Rt@ q=UÏ_@&PsM#n񣜼@Pgϟ?~:C_@ sco~:]Zas@Vw%6E5ĭ@QYvn6@}:@@@$dTda@zҜ@BV<@ɠp@W~h9bqp !t9AXǯ23>@= җU@ϵ@*O¨Gl@>]w @қ@42fP}R86P@E@(1B(?D'Pf(v :v*2fP}R@қ@ qPZv#(1B(?p$B@@?@TPsBLfz@'@0 ;6 9@,6TPs@@?@VJļv@Dt7cP54\/,6}@J\{X8@GV@n3s@%C(F'@3m@AXL=ֵ#@on@V4mO޹@b@b"q@G5U[@xeN-@G5U[@xeN-@oLEAt AߩPo@SO׽@]-N$Ar;JU7@+3'+SA9@Xm W@4#@-6I(a@@ý fIW@x G'%Iʂ@`z8O@zfsxr;*~@#сe@7@ILxd@7@ILxd@J\{t AחS@L@aߗ@Fq@b@(B@,i 0@<@~З>~@$\@QזH[1"أ X̘7h+ eP@Qeʼn@z^s~V@z+6?Ua.@J yU+g@a_t@h0q@OזH[1@$\@/{f@z-7RjښIz^@Qeʼn@z+6s~V@J yU+g@^D[q@90[i@'mg{zXK$8-ӽ@JAOr? @DաO@ 9mD@8pI@ZXë(fU9sͿ@e |@B @xjr|a]]D@%>r׌9@ZXë(fNr@iH FD4AT@uhgo3 A\0C 4EB}~E@4A[!_$.O0. A\0C 4nU^A--~d:O@=yJ?AxhF? ([!!@'?;7!?e ]S't@X p0\[aNtB@J@;# fYV.9{pP@{vuL@GթoEY@_4~@ӿ,b'*5C_dNR|%NRp@]=Aag&w46WA@ ȣ?G?F?aGz@UM#*6?x0EXGx9>Bi!@m3s@_@uA@MC{4a$U/@?ZgP@J-'dGթoEY@`@\Կ,b?_4~@M oTo %NRp@xۖܶwwBybwCGK@ųk_,@PkC*)>@j߁$@xv'T]@}T6SgR@1ucAYM@YHuf1ucAYM@|'oN@1}Ej@u{)xLFߟV$l@x/B@xU0up@qL$hE@-tc@,-YEc9@H@,B?٭TUKfnB_@3,.@A7ck*g@]kIqh^ \e@;4q@ZG4G@M~'P@q5WCTkr@_Sځ@T(/?8jQ.@ǩF#@7[7ׅ@ri!3 7[7ׅ@ME@WLMz@foW/&>@*h{@Y?1A@B@W yc4@)2 @d_VY@)i@~h9l9Hl@A7ck*g@۞@ŮGx@U~#8C^@R . &iC@F<@^ݜ|@mk!7V@z fz]ٌ@|:2pb@JᏘ+IE@biE,X@;-buF@-6L)@7 X@LOM"Pv[ 7"@CA[[Ш|:2pbG"o @f|m;QAzc]@> k@8Ԗ{ntyeʞ@PGJV@e'rg9vJ@CA[A!H@&ޏ8ViKY@`@R+c1[ШyW@8[U3k@P%R+c1@a@|:2pb&ޏ88[UtB&@ ½W>11~描z@Ix @.@ǭƼQ9e jG@BDQ@ߢ4Q]MS@ׯ{+~@½Ix 描z@ǭƼQ@.@4j%Z@¤4ߢ4 @(yZ.SVubNP$5c{~iT@O$Rp)={Ii@&f-9C]M@T@d!zȴ\@u7@mT6Ts-o}6@F>QPOiў@(MM@9+05 @dAd0mTFO_@{侍@#NUf~@N _Vf@"C `p@>I{ Ѭ@9U u#ŧ@E<9}@ϒRc\X@tt7@kS N{@ Z ,@F5v@'t@F5v@'t@[$NU@{侍@M _Vff~@ңYln@8U u@{ Ѭ@E<9}$ŧ@? ͐@ݽrBkS@tt7@y*@ځ>IGk .Q@'tE5v@'tE5v@x]Dkk68@Qgw]@Ht=V@lJ@zqHB`@1daH@NsIi3 VC{Qgw]@r(9x@o%"&A@䋡4@PI@`D63@6 [Qp_t̴3@YVCIk?I3@7waJ{1@/;t@0p?z4@RueKOݖ?w2f5w@Kh|;i;~vth&t:|.LJ-]R#a@dKS3Ja@/;t@'m}"@鳞5K$a@t?e@lj~n<@ t@I?Pq@#Flpމ=ņ@)|av@szN0~=߆:*1'[@qXDH@ Cv0-)|av@*@t[̠[+0hjg)n@Ć:T@_:FAW`R1ӽ E2!ǖ>@H?@4SU@ S|@0bT>yGF=T@I&:@քz4Tld9kd="Sio82@Ơ@ S|@N@.d yL/5.b@d3S`l@|pˁRIKve@vHcl̋JR@gH,g/#7u@hԃ︼v6߫ s<@ N|LT+5@ep䮜=DRQEV@@GY̽@Bޑ@C>@DmEϖǻ8EpTGݐ@GY^fځ@@~$.2+n{qYxT X.xL &@t!}@ťXrĽ)߃YFښ{ī^Đ@NQ1NCOɣt!}@)ji@W9]T5sj\F6b`@&\I@ka|ui@D"L@ݨ`0p'0E,|Q@髆:@~f@h?c9I@7vV3@kS@szZ06@n&Oc3u`=s (~:@$@h?4#bf@֘Ws? y"A*ƭ@]E6tKcVؑ@Jn@cI~O@c-c@4-{>3z@@Ug֤Za4^wTgP]E6t@"A*ƭ@D`Xl@@ ۚH@c-c@~{!@zn,cg֤Z@@Բ؆>ۿYd@<]B@Zem⌭]F @XA e@ԞZerϦ@ۣL]yU,@P6YMD_@2b:Ad@w@U8[c/UP6ɫ*?@g3сW/g@l @yzۈ<-{V91xCptTI{8@94bIV@R@@w`N@ֈWGlOx ~ w g&= @kmGn@w`N@!IG@}{@[n]h@ӵ@Xhs@h@ﮂ?<2J˱e?th?)@Sh*XhsIl@PI@7 8j@cŖT@ﮂ?4 XY@k "k}yݑ(a1n@$Kkj(BÖùg@Z@L~΁Pg@yt@͚D{@0;2Nr@,JrȆťXrĽW9]Gc@Uzm@ލ:@gt'sq@?i5@ˊPXwy @+me@dY@)T5sUzm@6ѭ@v?\J~, fH@sf^^❨Q&@<=A?y,F@^6a fj;@FTqPX529v@xKXW,Gc8@LspSqa" @xv@#={R$" ;K t@^v@p@ 泈y@!ݑsHA&чK,@kN6Avl@.b QJa @`413GS<T>@5qMn [|p@Š F@Bۇp@E6;^$M[/@YRZJ`@āydhca@Ѭ >@24ѹ@yW_S@a M3t4-zR|h@3f@nW;@>z@;|Xjd@fDK@BL *̪J?:et@8pb9@\& @rR>@&>@yW_S24ѹ@3z@n,3f@4@pO,y@ԼDV@yRA@qU"'@JGoJ@o iɾ+A+@e@KE@FPW@8,O!@eKŀp^_=}@nW;@pO,y@oQ@ 6Xq8@*S+n@S Gh1@^TcAbJ=aG]@#"C@>Y$V@:Z#{h@U.jZ}@'V>z@ԼDV@ 6k3@ ac@}uJ@-rXSv@|/*Z@ +uRX `@םF;@<6V`@vy^5IyfP@`C\u?U} 2@]ӮvӇ@ wpU/.7@.Shw"yޤ@`C\`@{zt)e@ +3@V:8(J!,㆟ ؊b9@1Iki@@N+{@˩J: 8q@8=աAm@l(PA 5 ac@b6{N+{@@@Hd;J_zq@kܽU@_4~@\Կ,b?5Q @6@5w$ZtɣɏzeE_MO[@!A@ӿ,b_4~@6@sį@QF9@K}$Ƀ@@#.j@^C ufzFw #$qE@Y@לK@1j^m@G ;}S?0YÄABHU@@!9.N ь[ w߈J}$ɃQF9@ҷ(5j@_c债p(%T SK0@93p@Ltj|@]W%u@abdBHU@}b|@~ ô@X/7"iZ@-a+@y)c"^@H ߿W Xf@pRn_hA$}O3f@"l82@ҕx'[@AeaH{@#zP(@"'49WjHj(,uE@@c[6]A{@Iw}@xK8s@"e"D@g%wH ?y)c"^@(3!x;g @McB\#zP(AeaH{@TއwZJ22(PEU s@Iw}@ZLz@ tN}IWpܹmS@F8S]dT96AGT@gÝm1e32@KȌy1y5pOFn}Jkl@GT@Y4A/"I e@"+S4ǗsҬy!` "Q*"@n[ u#[@xnG@wtM@X@szN0t[̠[>N @mt@]FXgHnd@8sr@ `Y%5LSxKtgͲn@*"@vδ G@%j4@XwtM@~=+0hmt@ @X@~#,Br [r@h([T@)kx.z$:X]FX@j5;X@p]$?1X@0cX~#,Bp]$? jP@8Xb 61/g}mn@"%'X@maϫ]@R>cWD@lY`Α@GR^@EKt@q%@Ąi`@>H@?ZfԎO#>-x:Dw@)@OA@uu2j%4D'\֪ {wm⌭ۣL]g1O@O@/g6}ؙC@4 E+@GR^lY`Α@>@9Dm@qh:F@Zrz)0@:IpD>ᚨ)@OA?-x:Dw@%4D'\+ 2DAN\R y~iҲ]F @yO@1(Fj@}ؙ@qZh@#T!4'L+Y2@|V@ H@hF@ < =G'~@+SUg@^pJ@D.@a9c]@rf=UnxyY@MA$VC@GLb@ &ŨL@,#x?$e9[V';Da7ԃ@o@@2@ <n@4ua@ns^J@1@'eq@s&xY9@``NPD@ςpcfLVfhH߉gmQlE,0k@\.J[P&Ue@ςpc<7tT]@Y@{?D_'fDɟ0k@:(HU'GM@= e@PZ̚W&@xx$/h ^H`@3wc@Xǯ}KA//7gԬ@:p'w e@NA(u"je@pz(z @peHӬ@jV@^݅Y@X±x 23>@//?$AG0u2A'FO;jWe@"\\~'@zFWI?I!@FC06]U1@GCtB0p?z4@鳞5KHqU@n6Ee|$ʧB92a35V@J [~E5g@UGO?ڑlT@B 46)L@TFݬinX@RueK$a@n6E\Lf@֡^V[[X@*%+l{JKGqX@tڧ@,X&,l@>WUUUUX$_vdff^AxA;u[WUUUUX$qq dff^A233*;u[OdEA A*ox8 @g'V@6@nw@fn%y0][)u@#@hh|8D?;W̐@?Aurxv%q@Cy@twb@QDUT?@Nf@*o@ AvVJR@vޢd'@fn%@6@nw@ ϐnu].9hh|8D@#@#45ýa@['#"GFCy@,.@QDU?uwb@G`pf@Dwy8@όHaX"B>azX̯e AsK@ 1ӷ/`lzSB@u@-bQZi~Egh}- 7ld?: }w@hARϺ}{j +-M @1H?{X@6<6Q@PΩQ@@sK@`4ϽAcv4W\?#y@T@ L"ST UM@"pN@?U@Jƅ@P@-0@dmoP}@dkZO@k@i!dH c<@Lt@TfF@;8=W?G~z@]r@+J`@w]WߩPo@L@ӕߊ@ 1ӷcv4"ϲB[A=aH8X@LT@{ ʁ@J&φ@a҈gk@E|~?7l@CڄLRL$ЙF@T)!Xi!d@k@G8=W@TfF@A @ ٦6T@w]W@+J`@SO׽@aߗ@X @N<W\?=aj5A 9z@v9]w@Wɪ@_@fh3G)U@G@ )s@7@cT-oL]t @X)(ƾ(X7A@eAu5aK~wmL@g1#TE@ArYC;4ro8>@umF@-K@RF_ @]f7+?ҭHI@S@*cS~*H-'brF@vjjT=6 r@!((@T\HF@Y)=m5hRS@Y=`1X܁XO@  qŶR@umF@-K@f% @<"s7d5U@x BI@q}^S|H@(<8T@@t$(qΓqB1}@_@!;ÄJ8\@,n@0X@lC@ZP@Z˟K@SC@hr)-[?(<8TS|H@t$(q@@H;F(!;ÄJ@_@,n8\@lC0X@Z˟KZP@hr)-[?+E}@\o==U+vXj@[Vs*@ّ,h@vۛaL'g@i*v+zD@􌭡R2'Cj@bj[cEO+hvۛaN@i*v+@L'g@ER `@XvJxhcz=e@yeM@``Yh@`qeAR@ Ƽ%`lE@^X/@BjE[@/ @12^@l]Nk@̗.n{jwa,P@6@mŸR@;@EHbeew5mӟ@vWqZ@/ @)@R]#k@(D]jT@܂xp͙~@c"L{c@ c[oDA{@k763Nx@ZR_;/m!@j A:62t%@̂<wU иE4o @0i1u7%@wƩ;Խv]3@~߷R0n4@`˒CN wp@՞rl~DUl@ K"x@dz1@Pӻ);)S(:W}h@gW-3$o@Nzj#ݹw@=zuXBO@ R,W|-['7n@ҍeq@`*Y:W4@ŌsC@#'{?@$>r_p#@yUu@V[ >@6Cr@R+&t%Ie@|7Z@nyEWӐ@au@")@(]v@D@J7%?aX@KV@t{M@q3/t@ e r@'1|@ Vhwv3B3v@t@R@'Aq@O@~pQ@4S*Pϳ#{Ƕ@1m@S@~߀v@)ڸS@J7d;@C@w[ y@$Pb@Ʌ@˶v2ɿbï@Trr?bï@Trr?7=1|Z@XDzX{s r$#vV/h@N]$οerV\P@qXŸ@oI)r@. w;ɿ)59i@!ۥ ˿7D*r@O{տ0 +rG rr㿟bï@rr㿟bï@DzX{?7=1|Z@'% N]$?#vV/h@qXŸ@,~MI@ w;?oI)r@ ۥ ?)59i@O{?7D*r@X;O['K_N`t@߳X62 bbP@cAVՎB@J0 \[Ju֍@ݠ@;h VՎB@B A%g Stx.d yȐSs@ o@ @TgÀQ@aM-@?<d@2clP@yL=@"w@^隞QZFQ@IிǕ?@nW\RnܧK@rg"nurD@tѨ@T5@~32+s+(@ܹ3!eU)B؈@Q\F@5^ 5@#"sv@yKYլ9~ia5?r@JJT@ac0T=@Gs!%{V@UzѸ@K";/q :@ {KfS7(e/UtW@I^@ l<PI^@ l<P9`6&@QYqU^>@x@隞QZ#"sv@MGO@Ғc7sEK.!@ec,TF-̭@@D1/ POMY@ POMY@O3ZceȈ@ҺqԲlY@Z%yn@@_@FQ@yKYҒc@6cGg@|P] ٍ{ų@ފsn23fkᴛI.TjTˇ@œIBz]_KƝC_P@K͂vw3brKqh@ndPm@RH@/0}@CNGwoK͂vw@ƝC_P@g;(*LnIN}mdPmh@/0}@NqzqB@`:wuqRn@dlo W@ݑi[j:SPVM;RT`ZYdlo W@da@:GP.S gMC)EDZ@B3^@lզ& A*Bvj^᠉0ƵS@7@hƷ@Ns@j֧ @@垴g#A2;LC@+9 MC BxaZB@#a=@Yd*cAVxr8@ކQ@ +@Y ĒՏe @3 @ah!W@W#@t{M@$Pb@In AZ)}@h“GA>+ XB AXYd@1FXNz aAH-q"@n@U6$ =A(?V@K uy@[ Ē@ +@WV_@&e@bIY@gڲ@q3/t@Ʌ@e _@>@>+ ;F_;5MAVey}+he@@ *T@p6l0:R~K3 @8EB8GLz@ +8 >'@'qoDDo"@pFA~%y@dWCRF_ @<"s7(Y'AG(͔@%z@w(L'M4i@E1bĬ@!2p34WO=|*}/V@fBA8D'U@,E ھb@ M* A lv^@r/f鳽a@]f7d5U@G(͔@lOATWT@}**u_Q@w7iP$נ| 02B@C( uڙ.&@1ajWS!9@J=Jѝka Nݼ@Q9D@LQ]e@pT @K;e?ܻ@J=Jѝ+=So@7]@5ɔ@@qgHnd@r [r@+?ҭx BI@Wʔ@FPgVژ@@uAZFn"@_,rIT8sr@h([T@HI@q}^FPgVRa@b)*@"@ ȯ! vN#'@E7P20@q?vjYTHl @][/ o†%$@{@ F$1q?vjYT@E7P20@ Aq;l@|%f`=S@gÝm1/"I e@RmZL.AHb or@a W@䉜u@!7#Le32@"+S4Hb ny5AD@wfNBu@c\Gmj}w) %>A@Y[@w>k )7)AkZ |iE:@ zO@Qh vf@D@U@[<&A;s^8Y@@#r[yx@kZ $5Aۜr좣rHotl@֔\SJݧ@4Pq@-ba@o3<ʼtz@{@%`\Jr7@g(g c@ Nw@26b@>~@Un&@l Ua@L Uw_-q@} U S@o@, h [J@MցJQ_$xLu@ [@Oj@|&M@E_f5b@Q#K@Un&@^@>v>:Y@^)(@@F@M-@xr;7J@Gr &@ÛĒҖfHts@8UB\@;|Xjd@yRA@Xq8@ ac@q.Jh@*[5@T iGUd@]l.@@cOP1@Թm@4%ͩfnE\@ޜy D@fDK@qU"'@*S+n@}uJ@*[5@GLl@ "W)JG1,_{p!>.@G:cbqEqS@mx@ 54M1o> :U1w$;Tc(H@M]vS@:x 54r7-)b}z@fGt@oF5Kjww@&!_Ÿ?Ha'tKT=r`Di@'s("e1| 8@2|hNGv>}⍗@,c;<,@!_ŸKjww@uM{@Ba]3t}@'s("e*L35@TA =CHuX@9[v@" ɯl(?=P8.r@CMzR@1yzLs1$2Pki31CMzR@Bs1%"D@R2?#` ]07P(ŀE@<:FXCpJp~;AO\@yrGFY<:F@@@ E<߯Л0O\@Wc@zeʚte@K6aߧDK@?NA|t벥C#$@l h`d@Ht=V@o%"&A@e|$ʧB֡^V[[X@błp@K{~j]+]B@`-@'UWrP@ 74@8a *ɣUr 9F;flJ@䋡4@92a35V@*%+lK{~jVip@;j6@Gu5Us!@i K@R2[b7#Tɐ@9sX@~0C@tXb@T=:L@`WN\[9k@ =G'~@4ua@e@\h3dˉg @%|LC!q@D'b7w@<А@#ceC@+U*:-@ L@Uiu5@ Gyɱm@+SUg@ns^J@\h3dˉOߢ @o@@Z@UtY@s>6u@&Ѣ@p@bDw4zoWlRg@*ʿ@hzJ@,%JT@1<~BȂ@͐ٴ3O@McstB*ʿ@UN0@Yc9#-CLk &@~6zit5>/,󭀽-EoJn{6@t|F!@:D1J5,AWp@QucQ n@zO[R@abau@|ߵJ=ΊNK@$@@@*16@0Zd6@I9R0%K0,J@!!6@Qux^@VCۦ$w@|7%jIz.@>Xh%@M׆D$Au~ ? @ sV@3xqO@fmcทr"Bgѳ=c@HUlJ$vى;Xh%z.@u~ @M׆D$A sV? @fmcs@fmc@AŤKOkY@59<@m'GXY@*D@m?Sy@<[LI"nyvxQbV<@!{Q @*D@?L@+Gla@!gm@7_/rHcu@C2"@F`^$kSDW8?0*]#dY !\@rk1J@.8_/?!gm@C2"@k@*5_/Im-KD4q~Sc>3@?rA]JK-a@D)Q'@-CYV D nn@29G?/n@*O6aF`^$_p@] UB,@ppQ:3uS@/AQ/sb@MꟹOtNzԣL͞JK-a@Uy¹S U?@t9GͿ D nn@*O6a@/n@] , F@qpQ:3@UB,@.AQ/@uS@S U@DupD1}@(F0@G xMC?"Ra@kS*5_/3W8@ڗ7b THgEMSS-Hj@ra@UנNDW8?Im-ڗ7b TdU@_@8%!SjL'g@i*v+@0*]KD3Jî@4`@c |ti*v+L'g@#dY4q~4`@0PP@nj>su@o e`@nܙ Hdp<P@xX0l`@KFA!P'k[@MZNF@Eu0@e7d_@+ejSG@o e`@hI@Yhpr2(xX0l`@c>b@cUZў3UtwBp/E@Aӛ1@Km@ %+G@=#u092@u(R@:K7dVI Gf@yſUO&@m|FnO7*Ւu@՚|v4t ]ׁ@~pO@ g%:/ؗ@U*Kmc{u@2?VI Gf@n|Fn@UO&@'.WdvWBTW"皒@pXG@/Zߨ@\1^pJ@1@g @o@r]|@[KpAy @TEUi@@?hS@ r@5Fl\@<ؠh$ @\1@/Zߨ@D.@'eq@%|LC!q@@Z@[K2/@~1ip+=\v@5zs=g?k\'@0PZPv̱I59Z@"в%0u@G0@nbַĤ_qhU~#8C^@xK8s@&QDc~Op@j!@Jn3K6@e@Dvp&@x!6yW@L'j@fEv{ z@G @꛹&jNt@e~@Qrn'@`FX@WhC@9.Nô@L Uw>:Y@xKl@jv@@_>wq@N>y]^9EZx 7|@cMl*yʼ@7a4$lRBqwI^@Z}bl@xNOb-0"@ 8|@irW@ko=q$xZc@AW@Þm1i<2J˱k "k}mݧ@ ,@;pß#9W%n~dh @e?thyݑE6;^.@ ,@SԚ,@"'W{Sb)@Y:sLQ@)h V@Iaɼ=@*q;lWG%@P}Y,f#˃@%Aa@P`Tw }aw} @Z`@:@@r?)@(a1n@$Mpj@;pß"'Wh@ 6#X}Q@=헬@6Z!l@`3#qfE@>PAOX=̡he@gP@Z&m@LAB<:-sJX@[/@Y7m{Sb 6#R).@Bx%Q@$B:񏇪'@:Jj̟`b#H;@|6$@2vEk0<@#v0i05@ڌ 1&2JLC5M@'*5M oT@~S@$B:@Bx%Q@:Jj@񏇪'@|6$@̟`b#H;@2vE@@#v@k0<@ڌ @0i05@AMtU C_dNRo ~S@Iz7T@ W@U &ܦp@>RĂ{fY@yeC\|@ R6a )=M8H?4[@@xZ#©@_ H-f@/II.]N@mȁi]L@]2Qã+W6=@\P@gqC4r@JӢ44nװ@ާG|c*0@YrLJ13n%@*^ )[1Ү@wQ#ztf@!LaMC@]_4@k]0<@ŏ)UU- uAƷӞ@gux@c)Eg)s p;vUhpU>p@Y,Bڿ|tgux@x?T5@ X`5s)Mf+af@ɦP@w]QmaƘ">G?ܐ@ؙK[z@tw,l@e0J@Nч>w@ TA@?.Z@q]D@z"ܸ^2@aLk5H) s?wV3@^.%Q@]9@5(B̷{0s y@' Zd@WU@N4@ TA@@6rs@# )D@\c)/@z}EnHTr^_@qb7L J3@еԮ@`os EPC@]@Yn$0k\@47@&?$R¾@3;@|+v4@~@,\Z[L@bppQ:3UB,@f$~EX(#Aw_A@G%$k!n?J%@tR6@*Uv@@Z@S@ 憎@: @c@ ڥYW ^ nQiYFA L)_j+@)_j+]C)Wų@+~é׋3(@p@AK@cG@-[uΝ;)Aq/ܔH6@6v2e]@kVڠF]AHe3ĔrA|%NRp@YMD_@g3сp`U@Ɋ7حCѫ@%NRp@xۖ2b:AW/g@Ɋq #@,ԝ@?ba]=Aagܶww{o@S\@"cvw@$EzBF#YyM&wBybwC"cvw@kF @ "YyMTmWBd@l @7,ԝ@ҳj@9浳Jlxj@Y`Sw@yzۈحCѫ@?ba9浳O@A<,% v.Ű@4g_Q@\@1.z}.?u1ܠ廁@H6@@1?4g_Q@x<]H6@gVӡ@=2@!L^qV^9^@olJxd?2D揠@^؊JǾ@$tzO@9@w%YȨ@q1lb@?;8`@L^q?=2@olJx@V^9^@}^.$wa@pxJԏaY@u棋&@w%YȨ@z @Z_a@ݝq6@D*i@Q;kIɹu.7ySh*$Kkja{4C@_4@O;k@D*i@TJaGXhs(BÖ_4@ޞA@a^ tw@eQ@ :'s@S)(4)@Xz7@*3|iEۜf[BAHŃkPr_#_<4lh@an:@&lJ@,'<ݧ(g>YoV@:@r좣HŃ]A ls,}a?9@b6bo@qUVkɿ@j^7 J7.V}6@.TuUV?b6bo@j^7J!n6@d.gx7.F@\:@4TL@Jc@@dQ`@ ([@[#f@kLM@wFb :lUݑi[:GPRNxR}@UFO@c)Eg X`5s J7d.1 (@^~u@ls]q*&D@֬b4Z@ ;@GSҵ/@ ^@@C{2@rM@5yOV3@uFUV֫Gj:SP.S gMC)s)Mf.gx7^~u@T(B@qR@I$bR@rqE^"@Vo'W@fEDA5A0#v@<)#"cǻŹ@i&{hc@58/gBtwb@QDU?y}xn@,N$nvltd|@{1ύJ@b@LZCzйs@XY\@A{V@_x|#b@.V_ W@X5~#@xGJ W@;!)@5A@fEDA<)#@/#v@3W{i@58/gB@i&{hc@QDUuwb@C@@@!vtMCs]q{1ύJ@@7@дUZ@\Wx{}p=kX`@%.@D<Ǟb@N94@evfKqR@fIs\DŽP1| 8@TA =C}(]@ 8>obzjɡ{@+?ڀ_c%dg{?FyJU@j)2@0*Arg1bЅ@)5ie@2|hNHuX@ 8f" ^@",Gq@#e}3$~M4 1%T@@`@\=@s!6c@;>@84o@Ċ@P^y%ATJ@)9|\D/}ZG@!W;h7D $0_P+hꈕ@h. Y&@{K@ ft嵰`vQ߃@7@VJs9 Q%\J5X@gcA@s\E79?U_@ϼ )_j+@)_j+@;v@J6v@Հ+y:!sۋ@t"W( .氚6s!6c\=@84o;>@G^y%@Ċ@9)>F?q@!W;h@ZG@KYt {xDk. Y&+hꈕ@W@9@YJ!VJs9 Q@7@d +\X1SVt\E79@gcA@ϼ @?U_@)_j+)_j+@J6v@G @+y:!@ %t"W@sۋ@2TX+]k0x݌od [{fD@Fѐz@a@g7)]T3@'uY%@4@ Q@Z}jJ@YTJx@S܅][VӰ@Հ+y:!@BAUH1G2۸o}%[oI@͓1H@lFK%@~8 )J8@{茈`@w!@'ZOԍA@TBջ30* @C)Wų@vw+y:! %UH,G!A4%@@㭘@ =@ݠ@Z]PUDtEA밻r@:cV~@0j\1[Hò/:v@!7P@pGMl@fO-l@ڂ@ @v:"/y@Ziu@roށ@F="Tw:"/y ь[X!6yW@jv@Q@,O@v ;@%q4|@wztSؠ@ Rʹf@٬}j35UpI!@d&a@D<\\0\YDwq@i Oʉ@Կ&2fP@+]|2@3&4q@Y}-K-z@b3:z?M@R+@cp@:4բ-zh w߈/7L'j@@,O@w@4 Zx WA@"҉H?23r@ 9 z@y ftP2xmHz'+c;@T|;@pFR"@/ߴq@":8bl@\,YGYX:@p%]@O:"C+R@/]@V}p@m?Sy+G<|vd@ :dݝQzBR{AF_ә{@0w}G@cn`)"҉HWA@1Nw@i9%/YP@4ݶPiM ͢VO,K!8y4"6.R"|g@/ߴq"@\,YG@":8bl@p%]YX:@4"6.R@|V}p/]@@\+$@bT!\a@zj,s_@'I;{XX Nf@Dwy8@BR{suy;lt@XT@Y\C@Crkq[5-`@TkIBC@%L@g8bV(@m |\@l1]@@<2p@ZP.@pQ4 @f;?YUݒ{bJB@oIrq%@v/@ @ܻ̬?@F?/1h"@ZP.@ DE@OLr@;=pp@3h@^:Rfu+@^cS@ >#0Ml2K}@8'x@sۋ@t"W@pQL:?O*U@?@HFBLZrOLr>DE@3h;=pp@ҫiVȶ{̷V]cSu+@??St r@&Юj[@t"Wsۋ@4 @ 3CJW?@RϺ@BLZr@Bh^@|*s(GKDy?@9: @%m@( 2TX+]kHFBLZr@&b&@h1 {a@jqUvc:@zۃB@W䞼0@.氚60x݌BLZrBh1 {a@a'J-o@l@ŏqT8@_+C~QܯQ@0R;T@cg֤Z@BL JGoJ@+@m߸v@-@g@]-N$AFq@H8X@ 9z@#A~~8ilAB/(@zD@~ȋp@y Ϡ GYCJ8\FAb(lt@8B섈7@rt/@r;JU7@b@LT@v9]w@~~8-g~/#Ar@`;@{0Ƅ@*鯅Q@iيci4Pa@bϨcA@S2?#@fLVfY@{?1yzLR2?#b@дUZ@@-ll~i8+Om|z&e`@vhH߉ӷn4[e@N ]P@CV]5/@(T[@kǐ@w\1S b@QMa@q\;$y#@vd1@hH߉D_'fs1$` ]07-ll~il˒@gH߉?&e`@GjbP@gY;9@򼡻&{iy;wњ@ mq@;wњ@ mq@W3Zj@;G z@K@n)i\@.i>ܻ6@UeRe7lNx@ 0X;ʿoI)r@ w;?ܑb~@x14P@*&D@\Wx{}8+Oezwwu@%@3my@.^¿¨,#ȿ#aSdy˴҂@kGѿ]@_ws8Trmq;wњ@mq;wњ@;G ?X3Zj@=no~j[@|/ -@rS%eg:@|0X;?7lNx@. w;ɿoI)r@H4P@\݀&/!@֬b4Z@LZp=kXm|z%@4tp<@.^?3my@uwrfXS g{.ZfckG?˴҂@@?6a`@_bڵ~l+WCY:eG@׊"+@o&&U@ow@,s0c@X|@TN_9\ PKa@l(ӂ. `@³`@~ ('El)q@klKp@-_#`@~t 5@ǐ@B}@1ǘ]]q%`@NQMb+@G>vh@"a 9@B}~T@l(ӂ. `@x/ɠ@&``@`_t@ϵs@dG&E@p Q@Ɉ0z@<RG;"@b/)@a%@<ڋt@6V@JxoomVoH!@뵭7lHTL4@< L?.Z@# )D@:S@a ``6WgˎF>}@b`OJ{{@/d@)&MzǤ@{f_@a@~`@T"~mvoe@F.l6>ʝ-M@VL-2Kl3b@q]D@\c)/@a `` @Z x@ 4LJ4d@ҾxH@itjRJJT@6cE7P20@q?vjYT@"{e@\f@~wq@--j=փ|Z4kl@nܧK@acGg@q?vjYTE7P20@ѫJv@Ujq~wOq@A\rv9yV@":]-q@KZrg"nu0T=@|P]D~a@$oq@A\rvDQ/@~V2¶joM]ߌI@rD@Gs!% ٍ{ų@c"p2u,@--j=փ9yV@~V2q@/ WtѨ@{V@*&$o@¶j/6ן@|T5@UzѸ@0G0u@vɆ W|P_1@A.0m@̵ZUKxъF@1z,@z@{zgPA!m@)%@J.@39З]$NG8n'@Bʓ@KX-rJJ@hEg{zg@z@5%PA!m@39Зc\s@t(@ӡ?gzk@X9)7@ i q@\{<@:+~f@2KcUZz"ܸ^2@z}EnHWl@!@l@{OI$8+!cmvVo2 c+Mk3٩? *U@X9)7gzk@\{< i q@2?:+~f@FA!Pў3UtwaLk5HTr^_@!@l@1Cs@bCM!U) hzJf]@BC֮JgV&nAJ@Y1LQHd_Nӵk@/daC@ӵk@/daC@DX%f>2<Վb@ks֕?dj}Fq@oĤ)59i@ ۥ ?'k[@Bp/E@3my@.^?{ObCM!U4h^0@!?@L;P@aA9@ 0Yg@@msQ@ԏAz@C մHm[ Mг/daCӵk@/daCӵk@];@$y ks֕Վb@!pĤ?dj}Fq@!ۥ ˿)59i@.^¿3my@I) hz!?@EB@B մ?ԏAz@*a$23d@4DS@3Γdp@&"t@ \;J@Ƀ}$@O @Rױfzj@V[s@#6I@t0@[>S@Gv>}⍗9[v@>ob",Gq@J`@Dʮ <@xdi3Γdp4DS@ \;J&"t@, Ƀ}$@u@{@PGڴ#6IV[s@[>St0@@" ɯzjɡ{@#e}3Dʮݡw)@񊝝u oys_`@MZNF@Aӛ1@$8+!cmJf]@L;P@My@9T{ef:3GR@b[<@iR]`@>Ww4Eu0@Km@vVo2BC֮JgaA9@9T{ef/H@8i{<@o a%@9P@zqHB`@PI@Oݖ?t?e@J [{JKGqX@]+]B@;j6@ӷn4[e@GjbP@Qa@3k(po`B|@_j]@5F@&GV@YsIDWzc@1*Є1daH@`D63@w2f5w@l~E5g@tڧ@,X`-@Gu5Us!@N ]P@gY;9@3k߹@Y+4ee@a7YV@_4t9in-v@RkCCzйs@`@CV]5/@¨uwrχJ@]F&V@rO@'?2f@\][@ZSfىW@쪏j#@qoj.F~@8(H>)a9AsTj@&TTzuj@Kh|;ij~n<@U&,l@XY\@%.@(T[@,#ȿ#fXS(po`B|@Y+4]F&V@4^N@5Sc@p4@&eQk8ߒ@[Q@0Z&(g`@l"r8e8'b^&v;4@]te@g@ (AdٕQ`V@N`䈼@KBM4cK֥@h6qh@Ѭ @Ӂ{Dq@;y+mn+>} y@3b;@lc%28[~ ]te%v;4@ayNQԟ.$E @N`䈼@Bk@kc\g0-U@eb@?hk@q`@$.܌r\@g(1@ aUN;["ہ@' F5v@'t,}4!@ѧ@5p#@\=(Zl?%e@-U@Dhkb@#.܌@q`@h(1r\@NZj' @["ہ@'t@E5v@ѧ@X+@\=4p#@Q版v@'W{-U@eb@?hk@q`@$.܌r\@g(1@ RI%' @["ہ@'t@E5v@xNOW@\=4p#@Nh@t=@:Mq3@tWM]~]7gԬ@G0uק%AuX VQk<@" ]@,S@$3)MGrxtJ:p'w2AuX V\bY4A)MGr@ p@E zZ@Kr45 Z&=To`j@8{AҠhE zZKr4@IONSa$ K9\ :s@"83%Ҡhg;H%A%=j7@#zXLHb i@t!`@_=@-'%ݍ@#,`߈@ iU@=Qn@|ג@6Wsc@txm2@ho|@o!{+L<Αc.@³`@&``@6WgZ x@\t@RчWf;,t8@pqy]@azs@p@;aMTjb@5(@[Ӛﺦu@h3!@7*G>` @*{è@S@@s@r߄ˎF>}@ 4LJRчgA{ /@Ϫ]E4Y@ˋ*#VB+'vT0Y={+!j"+#=@W2.P"+#=@W2.Pn'@Q[X*VE@mP@%@-HcMmdHqeg@I#f:@.!@ᴛI.Tq1lb@Z_a@~ `_Wfz -@ Ĵ@ǟtmWbp@<:,Wa@Ӥo z[X*% @q+v4 ̴M/ރ.Px~9@M/ރ.Px~9@Ȥ%[?_["@Ua3Y@M`j%@JWH>@-Hc@%@+А\r-)QS)֨Z=6q@A#f:reg@ec,TjTˇ@O*pk 5@?;8`@ݝq6@('Et@b`O4d@;,t8@Ϫ Ĵ@wa@EOcH6/v+}@]P'y\@3![@+@܆H/+@2(j$!>_@1l$Aێ@Z+3![@2(j$YC@{M{@ok4` |@[.>@qQX=@v'Dm}@7#_' @58 zO@rHos@0@a\:έG0E@FP(x@n{ #]+@`9@Ļ@[Lgզ$ƿ@Qh o6dq\@|IjܭSt@"%X (c@cQ;U@$h9@Szmq@hɽ(E?uS@.AQ/@J%@k!n?;ŶO*@!gln@5zNaj!_]@4?(5b@`v?}* m@B_l?V!Rh@ycI>6@O@|Ijܭ?dq\@"%X@St@cQ@ (c@$h9;U@ɽ(E˿Szmq@/AQ/uS@k!nJ%@!gln@ Vnd@_8@^U%f,@D@D$@UMaBPDFJZ 8qS Gh1@-rXSgAG@DY@r@~hP`b+`@fh||ɿ m6 |@5n9@M@o97!&eGIsYLBJ݉@P br'T@05F?G#=$ر]?٭J@mɕH@Z@Jv q@q.@* @49L@?{0r@ FcQ: |c+@(mɕH@2 @Jv qZ@* q.@?{0r49L@ܥ@Z_@T**@i\@@ʨ'@7<ףd]-CYEpv|@Z@Jv qՁQ@Es@ݠVJ@8Tohlmf@XU[)ni,3zג~D,hwMn] uJv q@Z@Es@ u׀@7Tohl@ݠVJ@XU[)ni@mf@~)d_p5~)d@DN5@DN5y`n eWDN5@ܥmЅ>W@gԱhUUI@kSyy@[]7Վq.@* ݠVJ@7Tohl@A^D[@ܡe@,B@}L_5` i?"@ %Z@ї^gƚм,Z/@i+oz@ϴo)!@Rez+@zq?@ +pkTԱqk0$@:B,2@<=Q&[I@*8@9@XCg- z/Fba8pu AR.w2[9 @XA28 px%* @q.@8TohlݠVJ@ܡe@ܺ7@~L_5`@,B@R<r#Cm$ q@MdT@ Mo)!i+oz@!{@Vsb@,4ȮV Aq*xp>~b@_W̃CE qUsFx@zP1ע='@@eN2fg#Fg@e:C-<@e%9k Ib@ӵmPkuM?eN2fZ~Yd@c:C-т.̜@sc`0k@bu@ͣfd@.|c>%% Z@t2c@{j@@%lAHF@# @›@FFOu%.AE[Sk@ <7B@,Z/@ MX\$C*`@+91@Aʖ$*$6gAol@flV[p@l&B@ē\ce@\xG@H:@.WuIglyoV@N_+PҋrT@85@76@qO>N$DE@1U$nkɧ@[@Q^ph#&z-i3x@6k;^d9LaB TbTJ|@~M!MS@N·$@?CBa-g0%۴R`ŀ0@ yf5@G)bw@L_ a@[@ .ƦD@*dKa@ɘnU6k?i3x@׿Ine%"$Hs׎y@.F/Q@dB_Ia@f^ax^:x؍@(S_WD3@דt@gD_@SSAșӾ&A+?e @ZZ@OOŠ@}$0ۡ@E)@9}pR7  'șӾ&AO~FA:Էq$mR )X?@io!n@aH]@0&xgFn@b歹&<Eb*@|4nOm<@q<'Y)Ts_oOų@c XK`@|4nO0>w@s<'Y@n<@e@5W@ja+i30@An}i+oz@o)!- V@=^tm@E-qҡ|8h9?r@ƖV wܔbX@u\@ϴo)!@i+oz@sm@:Q @E,ƖV w,&t@u\ܔbX@EBǦ=@ܱ@3$$vʹ$^/S|@ӝR\bN@ܱ@239\@)ڳB"b@I=5@Rez+@!{@+?:m<@s<'Y@9iO@RY읬@,֯>!к)tM\~@Yڴ@zq?@Vsb@e @Էq$mq<'Yn<@RY읬@$@vrCͯbG4R|qfYڴM\~@yX*@BB(o~ 730}uD@ Nh@ +EAaZ@4d=L7r@N4mپw@flV[Hb8҂d@`p3//vӞL@?B<tZ@(BViq@dI2@T='jagu @ a3@pC)x@1, @D@p@ZZ@R )X?@,vrC(t }@e_~@5X@ vZT@7k@`lɃ@_y@Vݏqz@v[%@khb@kTԱޡUM@3 ^YQ@ q@l&B@OOŠ@io!n@֯>!ͯbe_~@׈_@LJy@9<-c@lus@D\dU@uz@x_rL@h@ē\ce@Q^p*dKaYoي@ t*T1|8@z"@p  ` o&h@oe@b&e@\xG@h#&z-@ɘn t*T>r4Ñ@@E@7!ء@kO`Ss MوJJ@$biG@nκg8,L@^qk0$@1iySc|]@ g j5>тH:@i3x@U6k?{ &@`p3/AC@Yɞ?WA㣔 N5@6TphSaA,=@PYZj;n;@8߱fj4@p\%j)T|@:B-xq@B,vz@.̜@.WuIg6k⿨i3x@-CX?//vӞL@Yɞ?:@6k?*קtn]iSj}AP@q@.ICZ&!@ԡ;hYsg @WD>@%JJR\&@4*{PS'au@}o+ra$WseJ@:L໌[i<<@i.@1kWȐp 'X@Zx@D3,n@}o>s|إ<@ xk@ hO͒Nd@IB2,<@( s/Lgʍu@76@c X+i30@wEo%@(N$K`@An}4F]Sϸq@PYZj&!@Vo!:J@P#UxM_`# @׆q@rSl@4;}xaͭ@ējFP%a@<qrrxv@y>6 |@- zpZ95@\DZ7j@Y1_q@w7t2c@DE@b`~$@>B_y@uz@;n;@ԡ;hYuI@vDVga@5h)p@;mQ@4;})B V@Rb+@G!Ao},:%g9 t@Ku@5n9@M@/Fb`o&|@i[{8i@f2;@`,B9j@{j@@1U$oReSViq@Vݏqz@x_rL@8߱fjsg @/:xE@x/_@k} A@XOG~xaͭ@Rb+@LYc@@I~Г@THO %J6SaI~Г@l @ F\m*x,ԛkt:΃a-gf^a o&h@وJJ@uug@g%Q@!$BjqSl65X@Z/X&@>$FT ;AF2H\ä~v0%۴R`x^:oe@$biG@7 e@L ]O@)SQOhVZ/X&@Y[@moW,Ɂv/zP*Ep?Λ@Cr/sG+?__yd@५[/@lw&v@&?Am~wLQ@PmkՉ?zyc@#o `坿d!>|v|@Z_@%lAŀ0@x؍@U&@ O` &<@?ʯgTUBu@.m^L@>$FTmoW,u@ _p@i/E/q@GHY@ oͬ@*J44@ԡv_pNL4\\Um0@K?&?@kw&v@fmkՉѿBm~wLQ@"o @{yc@OC@ zѴ@z C/ܩ]4@$$vʹ)ڳ zѴ@^f@"h$@jmG)bw@דt@]CQBs'S3@,FesBOTH F\mHv/zi/E/q@J}/@Z# @$[9}@QB@ɓkoj@L_ a@gD_@!*F@(^sBO9qm7O *x\ä~vP*EpGHY@kђ@$[9}@n@XCr@Hl=S@48C%Fx@/Ggf@ ԗ{@"*N+6TѦOv@pdX_@Fx@zP1עA$H@0HGb@Dt+~HtpdX_@䠔3@}@o93H@$^/S|@B"b@{j]kPSdI2@Z$٥q-և%,ԛk oͬ@DeBfX@z C"h$@QB@XCr@]I@ؓs\.p,`bF$@ԝ\y?ӝR\bN@I=5@dI2@T='jaq-ևjJ6Sat:΃*J44@.`Ɯ@/ܩ]4@jmɓkoj@Hl=S@ؓs\俭@<wh==M4c 9pEq^Wb@A/,@x䂐@i\@# @ԡv^du.p'ee%bB@p1@"rB@ @R> ?P6@έ?cc@F(@Onb ?f0kj4@NIC'n9ä@Y@d5C`Hp@m@;^kV4Z@B+ ńw%;)Ƥ|Gk@4gI!b @ބrrilr@.j@@/@UQxD@i 3@ UO`l Gg<]wD@wAV:@ L;^kzh#@H?l&,y?@lU@5JwjR:Gb@.(<ZI"͡@n֕/@&k@Zy!j 3@#!@_mG.J10UdΪ@V XLШR _@G F!>n">@2 p@˫tO@?{ħOƵ@N'WruPĵaRR}j@$@[g,GIqD@N'Ps@@Ea||@.xWj-?. tV#Ez0O!(o@WruPĵ@Ea||@VNԵ@\.;S*CXK@WwW/@Fa/aRR}j@.x\. @@lqDPaki\%@U~,Vq~lqD"@i\%@Xu~q~ϰVbAl@Hx}'@SOd:@jpXd@)AigNMSOd: }_մL&"^@Rvs?9rS-Pw+tdQ@m^Nc oq@"Ms"1 Ni@SOd:@1mM@IlWy*ʒD@SOd:Hbi'#>Ӓ@0j )տT%d@#baf%? x@J&WeRU@įOM@zLL`jpXd@IlWy@E/@N=awhJ@.n^?OJ>i0X xC2 b@2ّ^2@KYݼCBE@NL㗃? FQ@Uhe'c!,k[*=C]~@)A*ʒD@N!@s.{@~`F忿^N@ db@ Ɛa v`P4C8b@L㗃BE@`n^p>j@%q3`@*Ш`\oH03@HcCi cb;z *Ш@03@!ivi cbDƓDxW1Nɍ 8ڃX@âaW@G7vTpvbq' K(0X@;IG7vTj휗@,}61RəlPaki\%@igNMSOd:yqh@?W4ht@.=9 병#to@ _%mMl@:a^`C@r3Csi%)@*фs@i\%@Xu~SOd:Hbi'?W4ht@1`@ 병a;vC B;Pl@OTN@`C@EgP*^壉͉PlKb-Mq@QfFU@mm@YÎ@L@D=@dN{8b@xOz@$mm EHh%4xEj+L1?;c=@9Fbicȕ@~d@-L@D=@sul@S@"W @J_ o̤YیȜ*3_K1?;c=@O';O=>Լ@@ ?8?i6Fz@qSu@?L/V4Z@H?la@ V'0hC I@K#t @A|qEitq@Kż1yQ!^p@"ucL@8@abcj@)jC@%'wi,:@r0rK^PwFr@0*X?L/@qSu@B+ ńw&,y?@ V'Ri@W@֢ u(#)@5_~؎Eb`@"ucLyQ!^p@`bcj8@KaITt@*W- W2UE?h@H0pҰR@EKQ@LpB@]9AP@ 6@[:p@%;)ƤlU@dN{8b@S@0hW@ +\2@jCH8f-@:fɧY|@NI@iD/uCdnZG@|rgW"fgs@EKQH0pҰR@]9APLpB@Z:p 6@|Gk@5JwxOz@"W @C I@֢ ujCǽA'!@6v}@<\ )=5ּNIɧY|@M[>@2". L4@6yUopnBZ\ f-5_anڴ e4gI!b @jR:K#t @(#)H86v}@i<ۈ\@i0MI@ډD#@MAt0\]'WLU wD?亮܎)io? 0@)'P@p5踫/)r-c@j!0ބrrGb@A|q@f-@<\i0MI@ꡆO@~~gИ1Uʥ@4OT@IK('ZcpACj@Qrfb@ilr@.(<Z$mJ_ Eitq@5_~؎: )=ډD#@~~gAc@ibQp{@WZ@Q<[uQ@EW1b.I"͡@m Eo̤YیKż1Eb`@f5ּMAИ1Uʥ@ibQp{@5B~@ exp񜼠٬@Ժ$@pq@UQ@# \&oDJN@wan$s:%߽@ڈPDwټuF6@?6]m>@*[CS" J@ؐO.P@pxm# \&o[ƙ@yan$s@DJN@؈PDw@:%߽@}bI@%n帡eHu t@˽~"o@,O[%yOX`hh2c@PS:5AjBsU~,Vq~`\oH03@.=9 병2!@\:v@]7p@ָTT@_$(3B’e@*bjG@>p@S3Y"R@ @G~4c@$*s" +fq~ϰVb03@!iv 병a;v\:v@Wo>@IF% Q@ofS6@>֦QGU3UG@42H=)@M+pQ@(׋3@PGOc@uZ-D@fÓgR@Tr"xi@86DsZ@θ$@ck%vn2@ }_մ#>Ӓ@=as.{@is$Vh@02Bhy 0n^@Ze@y~Q@"Dwf8@~qVZ.@ժ9%u~@(Ը#+TӪ@7h@=Ʒ$4Tr"xifÓgR@θ$86DsZ@].@&sȿL&"^@0jwhJ@~`0|@=32@oqq7ἇHS@~>@ϰQV8v7(u@A@ )P-S@s_Ϋ-D(₯`E@LI{W;R@cUҚpc@U4ж?"ӈ'Rvs? )տ.n^?F忿2Bh=32@:"Ғ@dHʠGoBі}?Zn{1ŭ?%;=U@ ѦNf@k~ ߞ7]J@9rS-PT%d@OJ>i0^N@y 0n^@oqq7dHʠGo v @Y6B&D c/@X<]uN@iCǪ@P6@΁C"NIpZP?ALJij@>n9ä@`%*@έ?cc@Tx&ڴ@C'LJij@K?AAgˤaӼ>KJ(}@˹lpإ!'rѼGl˹lpإ@EJ̓rnȰ@s&4W?wd3[)Lbh@W ?w5uFQ@[-O6B@˹lpإ>9j@Ѽ!'r˹lpإ@Sn$l|Ҕ@/X),"c0@3;ޯ @wvdT@X),@J ;^@NK@ɮ`v@9?4kh@&!AWBd9eƢ?\&UKUeɧY|@NIt0\]4OT@!'rѼP @@b2@\h4q@( @7ݴr(~(Bn9?֙1Df٬-G@ #0}Oɮ`v@&!A@4kh@/€@!~G@NI@ɧY|@'WLUIK(Ѽ!'r@b2@a W@h6A@/ԫʃ?ñQ'FIJ @?O@Gl˹lpإ@$6h@8bZJy<;R#@?d]F@)V@`fIfDJJ˹lpإ@Sn$8b>\M&@һ#@MCd0$9.<@_J?#Ю[tSxu`UdkpR@f E@EJ̓rl|Ҕ@x1_Rb@ Bn߹cH@Ov"”]U)@ݚ;H@|;@nȰ@/ Bn߹Lj?G@!ΰ@V6ypъ@@s+@#/0@UR]^{M@Z@<O:"nb@`?'/g(q %@¿HNE?tC h#@u@.SVB9zb3IW%G-;0%@E@b^66 B1~5@j@@n֕/@x ~7@jY,"3a@*aD`Ν#@5T]#AUYJ@h- ê8@[)q_;qtr(G+ IBf@@sy M1>@/@&k@jY,"3a@]@ {5JlR@= ⁴8@OP&@ek_{M~P-G?Yo~?* IBf@1@) ?,@8m/2=>8@USq@zl6 ҿxf@RA#fCBܔ¬@&ݻ\@:Q"}Q?4*,8 'x(3H|g@S@!|K6@b{WDq@|P@FctEV8Y$%y?U ?@$>;@eo9l6 ?USq@RA#fa~@jj•F@P]36Q"}@&ݻ\@7=eamS@!|K6x(3H|g@|Pb{WDq@bzZ$rm@W=eZ>o&@P\@Y@n9ä@:%߽@؈PDw@>AgˤqkP >A+ "ߩPHX)f脦z M+@݈@΃7η@ h@ꕫ ѡB@x8bwzڇ:@P\eZ>o&@n9äY@ڈPDw:%߽@n9ä@aӼ>p'wC@+ "ߩ2>AGbz@ZQC݈z M+@ h΃7η@BE0/-@ Ӣ{ܙq:@WZ{?z@+j@0-;@M$bc@Kn@[AB@&h}[koPHX)Gbz@ӯcd'A6R<_@s&v9&DE^HwqQ_@ߩ,@%*@\c@C4C/@ؙZ f@&Ǡ0 @c?{ABOf脦ZQC6R<_@UDR#SA @yRC[ U0 `s@Mr᪖ g@r^sA@5ƞO]"yQ!^p@"ucL5uFQ@wvOv"”ypъ@mz#s@T))@MLc9*y@RBS,h[Rtdy5ƞO]"@r^sA@"ucL@yQ!^p@[dT@]U)@?,@MLFbD@RBS,h@c9*y@r[1cz4-*@#`z M+@݈s&v9& @yt&A~I@3s@р1fZQZ9lq#`@4-*@݈@z M+@DE^RC[~I@e@{A؀1fZ@3s@WӜzt@S9[WF(@]S Jm@d5C`\ޝ.Hd@Lq\${O*fg4o@OI@On`pHp@Lq\${lE)@CBܔjj•F@`9L@<4?AQW{@雠0@KJ`7*̍}@Ѹ\*(@¬@P]3<4q]@^b$ {w)@C/Zģt@۹M@Рu@ū*,8 'eamgPy@x`F@?w)\*k@۹MC/Zģt@EF5̣,c@(?0q_L,lP i(pvbq,}61x(3H|g@S@!|K6\*k@?w)mp r@S> -M@ uM@w9?~@ۉ}?MYJZ"(ݿ,c@_S(A_B' K(0RəlS@!|K6@x(3H|g@>w)@\*k@S> -M@0a$d@x9?~ uM@_$>֦#@eH΃7η@ hHwq U0 `s@3s@؀1fZ@'a!Ge"F@*%S*@CiBVS@7F~$@,BFBqkyv=cj떔70Jab҆56u-$D;@#1Wz@*[u t@ h@΃7η@Q_@Mр1fZ3s@2@IIʥCiBVS@>-|d@K}n|]zə@CS"˽~"o@\aA?Nͦꕫ BE0/-@ad(U@cQpTHQ<An9*4 J@,O[%^kǐ2qѡB@ Ӣk@_qoJ@n9*4+L8AX x db@#to@C B;Pl@"Dwf8@ϰQV4bP:a@!q@g.$J(.:֔v@9:U|@C2 b@ Ɛ _%mMl@OTN@~qV8v7(u@!q@.JA@n?u*km{y@h^@7C^>`mCWd@ jVHhȜ8@`bcjc9*y@RBS,h@ZAUȚ@Prf jV@mCWd@%4x*3_abcj@8@RBS,hc9*y@UȚ@w@V#:@4ܤ^Mw+tdQ@#baf2ّ^2@a v`PZ.@A@Bі}?Y6*aD`Ν#@ {550Vl@>@kU͇qdHUV]ֹhUpD9X@ ULԇd_@m^Nc%? x@KYݼC4C8b@ժ9%u~@ )PZn{B&D c/@5T]#AJlR@>@k6e>kuVEh]"`@EV8Y$r SkoC@ً.@Z@X. VsRwzkE1Gzb3ёO\&p@v!E@`. ?Z@1:]aFR8,mi@kA\zw>@?_,@ GQ@yʩ@@l G.J_{Mi@i@X`,@0UVZm@`@@b -@$%ym@7*̍}@Ѹ\*(q{u}?;e@'GTW~@% ]Gʆ@A@?U ?@W=Ѹ\*(@7*̍}@:Jd[\ % ]@'GTW~@A@9@g<]wD@10U9Fb=>Լ@)jC@KaiD/uCM[>@ wD?'ZWZ@ exAw'~@^tҊŊd$@cBڇ5wdΪ@icȕ@@ ?%'wITt@dnZG@2". L亮܎)cpACj@Q<[p񜼠٬@^tҊv.#@4 [mWWYij&i@X1N@ev%@@`fIf#Ю[tSybRpMLZ;C n=w@[U@fv%@X1N@DJJxu`Ut ?dA.d[U@z (1Wh@p" $[xq@o@6 o"%k@sS U@\@9'f+uv &il#@pQg@Ny@VH 6 o"%ko@b@Dup9'fƆ"@by@B*# pQgl#@ɛ"g4:Afy&RzJ˞@zt`ق$O8@'ܩ0@AF_ә{@0w}G0Y\C@O@3[N3[N@ɭ!I$aHAgF@t`ق$@J˞@)ܩ0O8@0w}G@AF_ә{@moMDCr3[Nk A8R@|/1Gy\fRC@2AF*@Q3++fvN da FB@y @D%&\n9@&c)L-\Aw$2@8R@ 5 2Aеcp;*M,LPDDE@Π tA@m߇pV$S~A@O_(NnC@w$2fbAx8b{ܙq:@??@G+Nyhڔ7A@oR@wzڇ:@WZG+N,Zz@n{{@gnFoRA@Ң@m;=@yhn{{@ @QvT@`}yMGSQ;=Ң@ڔ7gnFQvT@-EVH@ 7x8,Q@6;D;Mkhc5@[%VL%G0r@/*P`@&H_?As@]2@dl+GQ~'J@0``dWt@/*P@&G0r@&H_@`@LR'@e3dl+XjZ@h'@4aZ\qy7 dNO@`OC@KaV@L@Y9@yM1RGQ~h'@ޞhj@[ D:bY@\DJ 4 8@ޚ).@_m@A@@m5@YY~bJ1s{@'J@4aZ[ DiS!@?Mf/ZIg8]Eh›"pbxߨ@ׅ(R @xߨ@ׅ(R @M1*@G#55,@kWBw"Y d{¹d@9wk@^B?3Qg'%@|"pK(eYN%[@ z{@]+ ܜQ.pq @BE@L㗃rP*^壉g.n?uN?Tb@ egT@ ,k;mǔNL㗃?BE@3Cs͉Pl$J(*k egT@η|@fai HcCi cbi%)@Kb-Mq@.:֔v@m{y@ ,fCuool@s-W@i cbDƓD*фs@QfFU@9:U|@h^@k;mǔai s-W@5jUm@;qt~P-GkA\zw>@X`,@H;]@·p| tg SS}@ټG@ZC6@r(G?Yo?_,@0UVZm@·p|n5q@ϣ}}@קޝTwI6@^0H$@AV:@V XLi,:@*W- W|rg4@io?QuQ@Ժ$@p+ IBf@~?Ŋd$@4 [mW tgϣ}}@d+ k@^jA@eD!p@x#ET(`l@;4q@ &iC@)L @e%exb# S@h*_+?ڀ_c$~Ml srFP9>9@kF_@UaWu46%dg{?F4 1uy3zEj@kF_@& o!q@y~Tnnc1}yJU@%T@@%exl srF@Uay~TT 9ͱ@ˍj!2.@nbAg.j@jc1FE.fAq@j)2@`@b# S@sWu46nnc1}ˍj!2.@8w@ w1\hD6Y@bbh7@(I>h%?3W-O<-)G|]$@{4y6*x@~ YL7oȶ?O @NF~*@+{5@{@%xSFN@27O<@툲j@}>h@RjK@I>h%7@ڍcĞŸ4z@|]$@~ YL@4y6*x@lDCm$,TONF~*?O @{@z|/j@_,&ğQx`/2@wTTf@+uby@%@"ylj"OذfMBr=@%asC@ ({hP@$ʺLfb@KfVB@MꟹOD1}@v &iB*# "yljw~ee|@y@ftVh*.nǼ5z@Byil#@pQg"Oذy@-h E@c6jR(𦊏)nyi?5z@pQg@l#@fMBr=@ftc6jc,iF@+c(@Fi@ทr"fmc@Hw.@xQEݫ[è/DY@ G6@Bgѳ=cEi+c(@Bgѳ=c@AŤxQE@Hw.@1뽇O>h*_Bgѳ=c @` @ы&QRFH^*oф @뮧N)xǡSG@mNه@ы&Q@` @:Bpsiɳ뮧N?*oф @ǡS|NmNه@蠂Lzv@bK Ah @8TD!)MGrQk<@)MGr@M!AMU@y &p#r h @j;\ @ܲ)*]5#" ]@ p@MU@{ A}jAKz@2v@? 20 a H@]KƱ@+3'+SA(B@{ ʁ@Wɪ@ilAr@y &}8Ǩ3Aar@`$T@U@'iV5m|'ON@Eغx@9@,i 0@J&φ@_p@M+pQ@z,[@#^a@Z}@/ wz@R_36kImBA@R@UN5ޞdS3Y"R@(׋3@dd5a@R]B@/ wz@YX@cXI@xҽϔQ@)pPc@IGS@:fI;z xR_3cXI@"@8Bȳ?:fI@IGS@W16kIxҽ8Bȳ? #@5^6` @PGOc@i{@*wD=w@mBA@ϔQ@^eNg@m{^n@C\wxKLG~4c@uZ-D@}rJw@gX@R@)pPc@m{^n@o\@]5@^n@@ڰ:Q=^+phx>'eea;;S^n@|^|nNq@ʣ]Y@L$l oq@J&We FQ@`n^p(Ը#+-S@1ŭ?X<U͇qC1Sb0@cy@s@=";OAk/j@TӪ@s_Ϋ%;]uN@dHU0)Pzccy@aU@I0^'M@7h@-D(@sy1@V]ֹhU+/q\fV@ GQ@`@@ټG@TwI6@s@I0:w@m?V`=Ʒ$4₯`E@ M1>@) 'w@08;`п"JsCQ@{f@ATA@ts@i/ca2ʁ6D*oV"y?+|"n9?IJVlc?U,ֺ08;tO @b@s#BmI=ATA{f@i/ca@ts@c|ٳO|Hv@i*#l9R@֙1Df @?O@_O\&-/`/0]@"QW`пb@O m@=M]o7Us9Oew/Yk}-a(2FZ 6b,Xn&8Phr|  6 X l  : X v  J & : N R V h z   D j ,:JZjz,n6"n"8NTZ82ntzZ2zbHv N<^nBd>z$VFb~  " . : H V ` j r z !!!$!4!D!J!P!!!!!!!"4"H"\"w"""""" ##(#4#L#d#l#t#########$$1$J$T$^$z$$$$$$$$$%% %4%H%N%T%^%h%p%x%%%%%%%%%%%%%%%&&&&8&B&L&T&\&d&l&&&&&&&&&&&''&'8'R'l't'|''''''''''(( (( (*(4(F(X(^(d(n(x(((((((((()),)6)@)`))))))))))*$***0*:*D*Z*p*~***********+++++6+P+p++++++++++,, ,(,0,8,@,H,T,`,h,p,~,,,,,,,,,,- -0-@-F-L-V-`-j-t-|---------. ...$.4.D.N.X.`.h.|........ / />/\///////////0:0O0d0j0p00000000000011 1(101>1L1^1p11111112"2,262@2J2V2b2|2222223.363>3F3N3`3r3~3333333333334*444>4F4N4d4z44444444445 5>5T5j5t5~5555555566&646B6P6^6t66666666667777*767D7R7Z7b7p7~777777777778 888.8>8H8R8^8j8x888888888899,9B9\9v999999999: :::(:6:H:Z:b:j:p:v::::::::;";6;<;B;R;b;l;v;;;;;;;;<<<(<2<B<R<`<n<<<<<<<<<<<=="=*=D=^=p===========>>">6>J>R>Z>f>r>>>>>>>>>???"?2?B?Z?r?~?????????@ @@&@:@D@N@X@b@n@z@@@@@@@@@@@@@AA"A.A6A>AJAVAdArA~AAAAAAAABBB.BEDEJETE^EnE~EEEEEEEEFFF*F6F>FFFTFbFpF~FFFFFFFFFFG GG$G6GDGRG`GnGGGGGGGGG H"H*H2H:HBHJHRHbHrHxH~HHHHHHHHI III"I(I.I@IRI\IfI|IIIIIIIIIIIIJJJ$J,J4J>JHJRJ\JdJlJvJJJJJJJJJJJKKKK$K2K@KNK\KjKxKKKKKKKKKKKKKLL"L4LHL\LdLlL|LLLLLLLLLMM M(M0M@MPMVM\MfMpMMMMMMMMMN NNN6NPNXN`NfNlNNNNNNNNNO OOOO$O8OLOlOOOOOOOOOOOOOPP,P`L`^`p````````aaa(a8aXaxa~aaaaaaab bb0bLbZbhbpbxbbbbbbbbbcc"c0c>cLcVc`chcpczccccccccccccdd&d8d@dHdVdddxdddddddddddee,e8eDeVeheneteeeeeeeeeff$f8fBfLf^fpfffffffg4g^ggggggggghhh8hTh~hhhhhhh ii$iDidiriiiiiiij jj&j8j@jHjjjjjjk8k@kHkTk`klkxkkkkkkkkkkkll"l4lLZbjpvƋЋڋ.:F^v̌ތ &0:FR^jpvʍ֍6Rntzގ .BP^fn~̏ڏ"*2:@FVfxƐԐ&>Rfvʑ &.>Nf~ؒ "*4>Rf|“ғޓ*<NXbrΔؔ$6<BLVdrƕڕ"2:BNZjz–Ζږ .DZjzʗܗ,>FNV^jvʘؘ",6HZfrz™Йޙ &0:Nb*+RS !,-TU*+RS !,-TUVWtu()VWtu()VW~PQVWVW~PQVW <=RS"#./0145@AXY <=RS"#./0145@AXY  $%JK  $%JK TUlm<=>?z{ TUlm<=>?z{>?~hijk>?~hijk@A67TUno@ABCDEno@A67TUno@ABCDEno)*-.tu !45&'&'*+fg)*-.tu !45&'&'*+fgHI !  BCHI !  BC  *+bc  *+bcjkDE ^_z{jkDE ^_z{01@A. / 0 1 01@A. / 0 1  z{  JKfg67 z{  JKfg67!"!"#$"#:;#$"#:;%&23$%89LM  &',-FGPQRSXY`abc%&23$%89LM  &',-FGPQRSXY`abc'(23bc~'(23bc~)*fg)*fg+,hi+,hi-./0xy45Z[&'rs-./0xy45Z[&'rs-./0Z[rs-./0Z[rs1BClm./23FGLM&'@ANOPQ%&'(23`a~$%6789<=vwDELMRSXY  XYbc, - %&'(23`a~$%6789<=vwDELMRSXY  XYbc, - 45\]^_45\]^_67bc67bc89rs   vw89rs   vw:;"#$%:;"#$% <=0145XY <=0145XY>?  89JK>?  89JK@A67no>?TUno>?@ABCDEno@A67no>?TUno>?@ABCDEno1BCvw&'BCpqrs1BCvw&'BCpqrsDE()DE()FG$%&'BCFG$%&'BCHItu&'HItu&'JK !JK !LM^_LM^_NONOPQ,-BCPQ,-BCRSHIRSHITUz{TUz{VWVWXYjkXYjkZ[~Z[~\]de$ % \]de$ % ^_^_23`a$%()45>?@A~RS23`a$%()45>?@A~RS'(bc'(bcde !|}de !|}fg:;fg:;hipqrs !hipqrs !jkNO HIpqjkNO HIpq1lm&'Z[\]1lm&'Z[\]nonopq  pq  rs|}rstu0167<=rs|}rstu0167<=tutuvw !z{|}fgNOfgvw !z{|}fgNOfg-.xyxyVWrs-.xyxyVWrs TUz{JKfg67. / 0 1  TUz{JKfg67. / 0 1 rs|}rs|}'(23~rstu'(23~rstuZ[xy:;<=Z[xy:;<=rsZ[rsZ[rsrstuvwxy<=VW      rsrstuvwxy<=VW       <=xyPQRS0145JKXY <=xyPQRS0145JKXYjkjkrsturstuLMvwxyLMvwxy    >?>?jkjkjkjk  *+ !,-  *+ !,-  *+ !TU  *+ !TUlm&'Z[lm\]lm&'Z[lm\]VWVWVWVW^_^_()67()67/0nopq*+ !/0nopq*+ !/0NOTUZ[\]^_z{/0NOTUZ[\]^_z{)*/0NOTUVW^_denoz{)*/0NOTUVW^_denoz{)*/0NOTUVWZ[^_denopqz{)*/0NOTUVWZ[^_denopqz{)*/045NOTUdenopqz{^_)*/045NOTUdenopqz{^_:;nopq:;nopq+,<=+,<=>?>?)*/0JKNOTUVWdez{)*/0JKNOTUVWdez{)*/0NOTUVWZ[^_denopqz{)*/0NOTUVWZ[^_denopqz{)*/0NOTUVWdez{)*/0NOTUVWdez{/0NOTUZ[^_z{/0NOTUZ[^_z{)*/0NOTUZ[^_dez{)*/0NOTUZ[^_dez{)*/0NOTUZ[^_bcdez{)*/0NOTUZ[^_bcdez{)*/0NOTUVW^_dez{)*/0NOTUVW^_dez{)*/0NOTUnopqz{)*/0NOTUnopqz{)*/0NOTU^_denopqz{<=)*/0NOTU^_denopqz{<=TUZ[^_z{TUZ[^_z{+,rs+,rs +,<=fg:;RShi +,<=fg:;RShi)*/0NOTUZ[^_dez{)*/0NOTUZ[^_dez{/0NOTUnopqz{  /0NOTUnopqz{  67>?67>?67bc67bc67LMxy67LMxy/0NOTUnopqz{  /0NOTUnopqz{  67tu67tu)*/0NOTUVWZ[^_denopqz{)*/0NOTUVWZ[^_denopqz{+,fg:;hi+,fg:;hi+,fg:;<=hi+,fg:;<=hi+,<=fg:;+,<=fg:;hino hino LMxyLMxy67$%DE, - 67$%DE, - +,fg:;hi+,fg:;hi)*/0NOTU^_de)*/0NOTU^_de+,fghi+,fghinopqnopqnopq<=nopq<=)*/0NOTUVW^_dez{)*/0NOTUVW^_dez{+,fg:;hi+,fg:;hi'(^_'(^_676767`abc67`abc    45~  45~  RSVW|}  RSVW|}jk()pqjk()pqjkjk"#"#    LMLM123LM@APQ&'123LM@APQ&'JK !JK ! ! !JK !^_BCJK !^_BC"#"#%&23`a$%()4589<=vw~DELMRSno, - %&23`a$%()4589<=vw~DELMRSno, - lm&'FG\]lm&'FG\]`a$%()45~RS`a$%()45~RS*+./0123VW$%&',-~*+./0123VW$%&',-~PQ,-BC,-PQ,-BC,-1*+./0123VW|}$%,-0 1 1*+./0123VW|}$%,-0 1 *+./0123VW,-. / 0 1 *+./0123VW,-. / 0 1 1*+./0123LMVW,-@APQ1*+./0123LMVW,-@APQ`a$%()4567~RS`a$%()4567~RS23456789RSXY23456789RSXY%&23$%6789LMVWXY%&23$%6789LMVWXY:;:;23$%<=@AvwDERSno, - 23$%<=@AvwDERSno, - `a>?@ARSno`a>?@ARSno`a<=>?@Ano`a<=>?@AnoPQ,-BC,-PQ,-BC,-DE 89^_z{DE 89^_z{1FGJKLMnobcfglm1FGJKLMnobcfglmRSHItuRSHItu z{FGJKLMfg67fglm z{FGJKLMfg67fglm123FGJKLM@APQfglm123FGJKLM@APQfglmjkNOjkNOPQPQ  RSTU|}  RSTU|} RSTUlm<=>? RSTUlm<=>?  *+./0123VW|},-  *+./0123VW|},-XYZ[XYZ[XYZ[XYZ[\]de\]deLM !^_BCLM !^_BC`abcNO`abcNO`abcNO`abcNOdefgdefg z{JKdefg67 z{JKdefg67hivwhivwjk./jk./ TUlm<=>? TUlm<=>?FGnofg  FGnofg  hipqrs !hipqrs !hipqrshipqrsHItuHItu23$%<=vwDERS, - 23$%<=vwDERS, - xyxyz{z{  ./RSVW|}  ./RSVW|}`a$%()45~RS`a$%()45~RSPQ,-PQ,-jkNOz{jkNOz{%&23`a$%89>?LMRS%&23`a$%89>?LMRS0101tutuvwvwFGJKLMno$%fglmFGJKLMno$%fglm"#XYZ["#XYZ[|}|}"#DE z{"#DE z{BCBC67`a67`a:;xy:;xyJKJK23$%<=vwDERS, - 23$%<=vwDERS, - $%JK$%JK*+./0123VW*+,-*+./0123VW*+,-  *+  *+./*+./*+ |}vwxyRS |}vwxyRShihiTUhiTUhihihi23$%<=vwDERSrs, - 23$%<=vwDERSrs, - JKJKJKrsJKrsFGJKLMbcfglmFGJKLMbcfglmvwxyvwxyDETU\]^_DETU\]^_,-,-:;@A0 1 :;@A0 1 |}|}z{z{  hi  hi  *+45bc  *+45bcxy  xy  |}|}$%DE, - $%DE, - PQ,-PQ,-NONONONOtutujkjkLM^_LM^_PQ$%PQ$%vwxy$%vwxy$% PQ,- PQ,- PQ,- PQ,-*+bc*+bcZ[Z[\]de\]detulmtulm !   !      #$"##$"#jkDE z{jkDE z{        PQ,-PQ,-VW\]deVW\]de !de   !de       !   !  hiPQno !  hiPQno !  123LMfg !@APQ  123LMfg !@APQ  z{z{hipq !  hipq !  #$"#:;#$"#:;*+./$%&'45PQfg~*+./$%&'45PQfg~1*+$%&'NOPQ~1*+$%&'NOPQ~()()*+bc*+bc*+,-./0123BCVW,-*+,-./0123BCVW,-jk./jk./01012323  $%45~  $%45~ z{JKfg67 z{JKfg67DE89DE89#$"#:;#$"#:; TUlm<=>?z{ TUlm<=>?z{ TUlm<=>?z{ TUlm<=>?z{123LM@APQ0 1 123LM@APQ0 1  !^_BC !^_BC23$%<=vwDERS, - 23$%<=vwDERS, - &'FGHI&'FGHIjkFGHIjkFGHIJKLMJKLM%&23$%89JKLMxy%&23$%89JKLMxy1`abc&'NOPQ1`abc&'NOPQ123LM$%&'@ANOPQ123LM$%&'@ANOPQ23`a$%()4567<=>?vw~DERS, - 23`a$%()4567<=>?vw~DERS, - TU\]^_TU\]^_89VWXY89VWXY236789VWXY236789VWXYlmZ[lmZ[TU\]TU\]DETU^_DETU^_`a`aFG*+bcFG*+bc\]de\]deFGJKLMno$%fglmFGJKLMno$%fglmhihijkjkFGJKLMfglmFGJKLMfglm$%<=>?@Ano$%<=>?@AnojkpqjkpqrsrsHItu !&'*+HItu !&'*+hivwxy$%hivwxy$%LMvwxyXYLMvwxyXY DE <=>?z{ DE <=>?z{|}|}  *+$%&'45~  *+$%&'45~:;xy:;xy*+bc*+bc FGJKLMfglm FGJKLMfglm*+$%&'~*+$%&'~$%67$%67 z{JKfg67 z{JKfg67no !  no !  LM !^_BCLM !^_BCtuDE z{tuDE z{HIHI*+bc$%&'~*+bc$%&'~././`a()>?RS`a()>?RS2323@A@APQxy  PQxy  jk./jk./#$:;<=#$:;<= :;<=>?z{ :;<=>?z{:;:;$%vw~RS$%vw~RSvwxyXYvwxyXY23`a23`aRSHIRSHI|}@Avwxy|}@Avwxy|}|}PQ,-  PQ,-  FGJKLMnofglmFGJKLMnofglm*+FGno$%&'fg~*+FGno$%&'fg~>?@Ano>?@AnoHItulmHItulm TUlmpqrs()<=>? TUlmpqrs()<=>?    2323hivwxyhivwxyhi23`ajkhi23`ajk|}|}8989PQ !  PQ !  ./*+bc./*+bc*+./0123VW,-*+./0123VW,-*+$%&'~*+$%&'~Z[@A\]Z[@A\]@A@A&'FGHI^_&'FGHI^_ lm lm`a$%()45~RS`a$%()45~RSjkDE z{jkDE z{xyJKxyJKvwxyvwxyHItuHItuDE89^_DE89^_$%DE, - $%DE, - %&23$%89LM, - %&23$%89LM, - jkjkPQ  PQ  *+*+@A@ABCjkTUBCDEBCjkTUBCDE    JKxyz{    JKxyz{     JKz{     JKz{    @AXYpqrs    @AXYpqrsXYpqXYpq      JKz{    JKz{:;TU()`a:;TU()`aHIhiHIhiPQFG89:;<=~PQFG89:;<=~LM23LM23DEDE@Ajk,-./@Ajk,-./tu !~&'*+tu !~&'*+"#\]^_RS*+"#\]^_RS*+ $%bcdeJK $%bcdeJK&'z{&'z{()67()67*+,-./23novw*+,-./23novw*+,-23  45novw*+,-23  45novw*+./vw*+./vw012345012345*+,-012345no*+,-012345no-.45&'-.45&'@A67no>?@Ano@A67no>?@Ano89    89    :;TU()`a:;TU()`a<=\]fg<=\]fg>?@A>?@A>?@A"#>?@A"#BCjkhiTUBCjkhiTUDEDEFGBCtuHIFGBCtuHIHIBCHIBCJKpqrs  JKpqrs  LM23^_LM23^_NOpqrsNOpqrsPQ89 PQ89 RSlmRSlm:;TU:;TUVW~VWVW~VWXYZ[XYZ[-./0XYZ[xy:;<=rs-./0XYZ[xy:;<=rs45"#\]^_*+45"#\]^_*+45"#\]^_45"#\]^_`aBC`aBC67$%bcdeJK67$%bcdeJK$%bcdexyJK$%bcdexyJKfgfghi  hi  BCjkfghiBCjkfghilm\]lm\]@Ano@Anopqrs\]NOpqrs\]NO89rspqrstu \]BC    89rspqrstu \]BC    rsrstu01<=rsrstu01<=vw()bcpqvw()bcpqxyz{|}  xyz{|}  xyz{|}  xyz{|}  xyz{|}PQ:;    xyz{|}PQ:;    !~$%&' !~$%&'-./045Z[&'&'rs-./045Z[&'&'rs$%$%LM23^_LM23^_67bc67bcXYXY2323VW./VW./xyxy()no89()no89 23 23z{|}>?@Az{|}>?@A*+./45de*+./45deRSbclmRSbclmXYXYZ[bcZ[bcFG !~$%&'BCFG !~$%&'BCFG$%&'BCFG$%&'BC@A>?>?@ABCDE@A>?>?@ABCDE@A67>?@A67>?bcbc&'&'JKJK*+,-23  ,-TUno*+,-23  ,-TUno,-^_  ,-^_  TUTUHIHI  JKxyz{  JKxyz{,-,-lmlmJKJK"#DE"#DE ! !XY"#XY"#FG./tuHIFG./tuHI./BC./BC<=<=fgfg  no  nopqrs\]NOpqrs\]NO  lmjkZ[fg23lmjkZ[fg231lm1lm,-`a,-`a<=<=@Ano@AnofgfgZ[Z[Z[Z[bcLMbcLMz{z{LMbcLMbcjk./jk./no`ano`anono  ,-  ,-TU,-  ,-TU  no  no    &'&'vwvwvw,-vw,-vwvwDE !DE !PQRSPQRS8989devw !z{|}fgfgdevw !z{|}fgfg"#DE"#DEFG~$%&'BC"#FG~$%&'BC"#-.FG45$%&'BC-.FG45$%&'BCDE()DE()*+RS !*+*+RS !*+,-`a,-`a./BC"#./BC"#0123456789:;<=z{|}|}(),-230123456789:;<=z{|}|}(),-2301234567z{01234567z{0123456789z{|},-0123456789z{|},-0123456701234567014589z{|},-01014589z{|},-0101:;()01:;()01<=defg01<=defg@A>?>?@ABCDE@A>?>?@ABCDE  @AXYpqrs  @AXYpqrsFG./BCBC"#$%FG./BCBC"#$%"#DE"#DEFGFGHIHI    JKz{    JKz{LM^_LM^_NONO|}PQde89:;<=~|}PQde89:;<=~"#*+RS*+"#*+RS*+TUno@A89:;TUno@A89:;VWVW  @AXYpqrs  @AXYpqrsZ[bcZ[bc<=\]fg<=\]fgLM^_`a67LMTULM^_`a67LMTU^_`a0167RSTU  ^_`a0167RSTU  Z[bclmZ[bclmdede<=jk\]fghi<=jk\]fghiBCjkfghiBCjkfghijkjkRSbclmRSbclmTUno@A89:;TUno@A89:;JKNOpqrsJKNOpqrsJKNOpqrsJKNOpqrsFGtuHIFGtuHIvw"#vw"#dexyJKdexyJKvw !01234589z{|},-01fgfgvw !01234589z{|},-01fgfgdevw !014589z{|},-defgdefgdevw !014589z{|},-defgdefgVW~ VWVW~ VWTUTURSRSBCTUpqBCTUpqTUBCDEpqTUBCDEpq@A@A89    89                  ()():;NOTUtu():;NOTUtu()01NO  01NO  rs0167  rs0167  89    89    89    89    ././fgfgrsrsXY^_jkXY^_jk"#DE"#DE:;tu()HI:;tu()HI89JKpqrstu()89JKpqrstu()./01vw  ./01vw  ./    ./    XY"#XY"#hihi>?>?XY^_jkXY^_jk:;()`a:;()`a^_hi^_hi xyz{ xyz{BCTU&'pqrsBCTU&'pqrspq    pq    pqpqpqrs\]  pqrs\]  pqrs\]pqrs\]          DEDERShirsFGRSZ[RShirsFGRSZ[XYZ[^_jkXYZ[^_jk$%$%1BClmxy$%rs1BClmxy$%rsrsxy|}VWrsxy|}VW  >?hijk>?hijkNOpqrsNOpqrspqpqNONOLM^_LM^_LMNOLMNOtu()tu()~ XY~ XY VWXY VWXYVWVWJKJKFGtuHIFGtuHItuHIJK* + tuHIJK* + rsrsDEDE<=\]<=\]NOtuNOtu1lm23LM@APQZ[1lm23LM@APQZ[89rs~ XY89rs~ XY    `a    `a8989JK      8989JK      DEDE>?>?BC:;vwpqBC:;vwpq VW VWPQPQxyPQJKxyPQJK:;:;*+ !*+ !@Avw"#@Avw"#$%$%HItu !~&'*+Z[HItu !~&'*+Z[vw()bcpqvw()bcpq"#\]*+RS*+"#\]*+RS*+  ,-TU  ,-TU././rstu`a0167TU$%<=  rstu`a0167TU$%<=  LM23LM23,-012345,-012345rs^_`a0167TUrs^_`a0167TU89  89  :;:;<=\]<=\]>?~hijk>?~hijkTUno@A 89:;TUno@A 89:;FG`a$%&'BCBC"#$%FG`a$%&'BCBC"#$%DERShi:;DERShi:;FG"#$%:;NOFG"#$%:;NOHI\]HI\]JKxyJKxy^_LM^_LMNO67LMNO67LMPQlm  "#45PQlm  "#45DERShiFGRS:;DERShiFGRS:;@ABCTU@ABCDE@ABCTU@ABCDEVWVWXY^_jkXY^_jkZ[Z[pqrsHI\]pqrsHI\]LM^_RSLM^_RS,-`a !,-`a !vw()bcpqjkvw()bcpqjkPQde  :;PQde  :;fgfgDERShiFGRSTU|}DERShiFGRSTU|}jk,-jk,-PQlm  45PQlm  45@A67  no@Ano@A67  no@Anovw()bcpqvw()bcpqrsZ[rsZ[tu()HItu()HI89BCvwxy<=VWpq89BCvwxy<=VWpqxyZ[vwxy:;<=VWrsxyZ[vwxy:;<=VWrs&'z{&'z{01|}23*+Z[01|}23*+Z[>?~>?~BCFG~BCFG~BCFGBCpqBCFGBCpq()()>?>?PQ,-89:;PQ,-89:;PQ89:;<=~PQ89:;<=~PQTUno@A89:;PQTUno@A89:;PQ   PQ   VW./VW./ !~&' !~&'&'&'RShiFGRSRShiFGRS@Ano>?>?@ABCDE@Ano>?>?@ABCDE<=\]<=\]<=de<=dededelm@AFGlm@AFG@A@Avwxyvwxyvwvw`a`a ! !  `a  `ajk XYjk XYTUTUlmlmnono"#01"#01pqrs\]pqrs\] XY XY!" XY!" XYlm45lm45hihi JK`aRS  JK`aRS  @Avw@Avw@ADE@ADE^_LMNO67LM^_LMNO67LM    `a !tu`a !tu././>?hijk>?hijkDEDE $%deJK $%deJKBCXYZ[bcvw^_jk89jkpqBCXYZ[bcvw^_jk89jkpqBCXYvw&'^_BCjkpqrsBCXYvw&'^_BCjkpqrs bc bcXYXY   JKz{   JKz{ JKbc JKbc././XY^_jkXY^_jk`ars./  `ars./  xyz{NOxyz{NOz{|}z{|}jk XYjk XY    xyz{|}PQ89:;<=~  xyz{|}PQ89:;<=~    ,- !TU  ,- !TU`afg`afgXYZ[  vwxy~XYZ[  vwxy~!"XY!"XY@A 89vw@A 89vwde  vwxy~de  vwxy~PQlm  "#PQlm  "#()`aLMNO67LM  ()`aLMNO67LM  rs|}rs^_`a67NOTUrs67LM  rs|}rs^_`a67NOTUrs67LM  rsxy|}tu`a01<=  rsxy|}tu`a01<=  lmZ[lmZ[^_^_)*|}23Z[)*|}23Z[z{z{z{z{HIRShiFGRSHIRShiFGRS ! !$%./BCBCFG"#$%NO$%./BCBCFG"#$%NOBCBCFG"#$%NOBCBCFG"#$%NOBC&'pqrsBC&'pqrs01:;()./01:;()./*+*+014589z{|},-014589z{|},-()./45defg()./45defg89z{0189z{0101|}23Z[01|}23Z[./45defg./45defg6789bc6789bcPQPQTUno@A 6789:;<=tu~PQPQTUno@A 6789:;<=tu~Z[|}PQTUno@AFGdexy89:;<=xy~  Z[|}PQTUno@AFGdexy89:;<=xy~  Z[PQvwxy89:;<=VW~Z[PQvwxy89:;<=VW~@A67>?>?@ABCDE@A67>?>?@ABCDE@A67>?TUno>?@ABCDEno@A67>?TUno>?@ABCDEno@A>?TU>?@ABCDE@A>?TU>?@ABCDE@A>?TU>?@ABCDE@A>?TU>?@ABCDERShiFGRSTU|}RShiFGRSTU|}FGtuHIFGtuHIJKJKLMPQLMPQpqNOpqNOPQPQ`aRS^_hiFGRSTU|}`aRS^_hiFGRSTU|}^_`a0167hiFGRSTU|}^_`a0167hiFGRSTU|}xyvwxy<=VWrsxyvwxy<=VWrsXYXYrsZ[>?rsZ[>?<=\]<=\]XY^_jkXY^_jk  `a  `abcLMbcLM|}./45defg|}./45defgvw !z{|}./45defgfgvw !z{|}./45defgfg>?hijk>?hijk>?hijk89>?hijk89lmnolmno@A67no@Almno@A67no@Almno  @AXYpqrs  @AXYpqrs  @AXYpqrs  @AXYpqrs89tu89tu   vwxy~   vwxy~JK  :;vwxy~JK  :;vwxy~z{z{hiFGRSTU|}hiFGRSTU|}PQ  89:;<=vwxy~PQ  89:;<=vwxy~JKrs  JKrs  xylmxylmxyz{|}TUBCDE  xyz{|}TUBCDE  XYXYpqpqFG^_FG^_fghihi|}~fghihi|}~+,`aPQRS  +,`aPQRS  &'45z{*+&'45z{*+4545&'FG^_&'FG^_bcfglmbcfglmTUno@A89:;tuTUno@A89:;tu4545    vw()vw()8989    $%bcdexyJK$%bcdexyJKPQde  PQde      JKz{    JKz{FG~FG~>?@A>?@A<=\]<=\]&'&'z{&'&'z{HIHI|}|}DEDE<=01defg<=01defg>?>?XY^_jk89jkXY^_jk89jk|}PQvw"#|}PQvw"#)*|})*|})*|}&'defg)*|}&'defgtu !&'*+tu !&'*+tu !&'*+tu !&'*+NONO@Almno@Almnono:;  `ano:;  `a >?xyRSJK >?xyRSJK`a`a()VW&'()VW&'&'&'89VWrs~HIPQVW89VWrs~HIPQVW89rs  89rs  NO67LMNO67LMJK  vwxy~JK  vwxy~lm45lm45HI^_HI^_rs`a0167RSTUrs`a0167RSTUFG./BC"#FG./BC"#z{"#TUz{"#TU|}"#DEPQ|}"#DEPQxyz{|}"#DEPQvwde:;  xyz{|}"#DEPQvwde:;  ^_hiFGRSTU|}^_hiFGRSTU|}>?hijk>?hijklmFG\]lmFG\]VW~PQVWVW~PQVW  JK  JK@A67no@Ano@A67no@Ano89  vw89  vw@Avw@AvwvwvwPQ   tuPQ   tu:;   :;   89  89  @A67no@Ano@A67no@Ano@A67nono@Ano@A67nono@Ano>?hijk>?hijk@A vwxy@A vwxytutu`a`afgfg`a !`a !:;PQ  "#$%:;PQ  "#$%:;01"#$%:;01"#$%&'bc&'bc:;tu()`a:;tu()`atu !&'|}*+Z[tu !&'|}*+Z[jk,-jk,-././01012323PQlm45PQlm45()NO67LM()NO67LMjk89jk89fgDERS:;fgDERS:;rstu01<=  rstu01<=  Z[>?Z[>?@ABCDEFG@ABCDEFGBCHIrs@ABCpq  BCHIrs@ABCpq  @ADE@ADE@AFG@AFGtuHItuHI$%bcdeJK$%bcdeJKNObc67LMNObc67LMvwFG"#$%NOvwFG"#$%NOLMPQRSLMPQRS PQRS PQRS  ,-TU  ,-TUVW~VWVW~VW XY XY&'|}23*+Z[&'|}23*+Z[lm&'lm\]lm&'lm\]^_^_:;()`a:;()`a67&'bc67&'bc<=|}defg<=|}defg)*vw !<=z{|}fgdefg)*vw !<=z{|}fgdefg+,hi+,hiXYbc^_jkXYbc^_jklmlm*+,-23no*+,-23noBCvw&'BCpqrsBCvw&'BCpqrs-./0BCxyZ[xy&'VWpqrs-./0BCxyZ[xy&'VWpqrs tu tu*+,-./vw*+,-./vw xyz{ xyz{   JKxyz{   JKxyz{|}|}~~|}|}vwpqvwpq45\]^_45\]^_89018901fgfg232301XY$%lm01XY$%lm89:;rs0167"#$%89:;rs0167"#$%./ ./ -.xyXYjkfghiTUrs-.xyXYjkfghiTUrs-./0xyZ[VWrs-./0xyZ[VWrsNOTUpqrs !`aNOTUpqrs !`a^_TU\]>?^_TU\]>?`aRSTU`aRSTU !~&' !~&' !XY  de !XY  deXYZ[XYZ[&'&'xyz{|}:;  xyz{|}:;  8901890189  01$%89  01$%*+,-23`a !no*+,-23`a !no   tu   tu   &'   &' &' &'$%$%!"89tuHIno!"89tuHIno89  HI89  HIrs./rs./!"HI!"HI,-HIno,-HIno./0145./0145rsZ[>?rsZ[>?  45  4589pq  89pq  BC&'pqrsBC&'pqrsPQ89:;<=~   PQ89:;<=~   >?@A>?@ATUno@A89:;TUno@A89:;TUno@A6789:;bcTUno@A6789:;bcJK  JK  ,-,-`a !,-,-`a !`a:;   !* + `a:;   !* +   vwxy~  vwxy~`a$%BC"#`a$%BC"#~~8989DEDE  1BC23LM@APQBCpq1BC23LM@APQBCpq ! !   "#89   "#89%&  &',-FGPQRS%&  &',-FGPQRS  ()HIRS  ()HIRS%&23  XYbc%&23  XYbc>?>?%&  &'(),-FGHINOPQRS%&  &'(),-FGHINOPQRS  ()HINORS  ()HINORS>?"#^_>?"#^_:;HI:;HI:;:;%&  &',-FGPQRS%&  &',-FGPQRS   $%89   $%89>?   89>?   89%&23  &'()*+,-FGHIPQRSXYbc%&23  &'()*+,-FGHIPQRSXYbc*+,-<=>?FGVWXY\]*+,-<=>?FGVWXY\]()BCNO()BCNOBCPQBCPQNONOZ[`aZ[`a()BCNO()BCNO $% $%"#@A"#@A>?>? !23 !23 "#./4589@ALM^_ "#./4589@ALM^_vw $%vw $%%&  &',-FGPQRS`a%&  &',-FGPQRS`a  ()BCHIRS  ()BCHIRS  *+<=FGVW  *+<=FGVW%&  &',-<=FGPQRS%&  &',-<=FGPQRS "#./014567@A "#./014567@A <=./0145XY <=./0145XY !2367 !2367 <="#./0145@AXY <="#./0145@AXY./2367./2367>?   "#89>?   "#89:;HI:;HI*+,-<=VW*+,-<=VW>?VWXY\]>?VWXY\] "#./45@A "#./45@A()BCPQ()BCPQDE\]`aDE\]`a%&  &'*+,-FGPQRS%&  &'*+,-FGPQRS  ():;HIRS  ():;HIRS>?xyJK>?xyJK"#LM^_"#LM^_NONO%&  &',-BCFGPQRS%&  &',-BCFGPQRS%&  &'(),-FGHIPQRS%&  &'(),-FGHIPQRSTU\]`aTU\]`a*+<=>?VWXY\]*+<=>?VWXY\] %&23<=xy  0145>?VWXY\]`abc %&23<=xy  0145>?VWXY\]`abcZ[`aZ[`a>?DETUVWXY\]`a>?DETUVWXY\]`a"#LM^_"#LM^_%&&'DETUXYZ[\]`abc%&&'DETUXYZ[\]`abc%&23  XY`abc%&23  XY`abc\]de$ % \]de$ % fgxyz{& ' fgxyz{& ' hino hino XYjkXYjklm  ! " # lm  ! " # hinohinopq  pq  ~rstu~rstu~rstu~rstuvwvwfgxyz{& ' fgxyz{& ' fgxyz{& ' fgxyz{& ' |} ! |} ! Z[~Z[~vwxyvwxyXYXYXYjkpq  XYjkpq  XY^_pq  XY^_pq  ^_pq  ^_pq  pq  pq  lmvw|}  " # lmvw|}  " # '(bcfgxyz{& ' ( ) '(bcfgxyz{& ' ( ) '(bcfgxyz{& ' '(bcfgxyz{& ' hinohino^_@A0 1 ^_@A0 1 XYXYbcfgbcfg23XY$%<=vwDERSjk, - 23XY$%<=vwDERSjk, - pq  ( ) pq  ( ) XYnoXYno~89VWXY~89VWXYXYjkXYjk~XY~XYhinohino@A0 1 @A0 1 Z[de~Z[de~lmlm'(~XY'(~XYz{z{XYjkXYjkfgxyz{& ' ( ) fgxyz{& ' ( ) \]\]pqpqlm  " # lm  " # 0101RSRS%&'(23~$%89LM%&'(23~$%89LMpq( ) pq( ) pq  pq  rsBC    rsBC    rsTUrsTUtu:;tu:;    LM`a0167LM`a0167LM2367LM236789rs   XY89rs   XY XY XY* + * + "#\]^_"#\]^_z{z{|}|}  ( )   ( ) pq  pq  rs`a   rs`a   pq89        pq89                          rs   rs   hi hi     no !  no !  rsBC    rsBC    hi    hi    <=      <=      01  01  |}    |}    xyz{|}    xyz{|}    lm  ! " # lm  ! " # lm|}  ! lm|}  ! lm  " # lm  " # \]de$ % \]de$ % fgxyz{& ' ( ) fgxyz{& ' ( ) & ' ( ) & ' ( ) * + * + 23$%<=vwDERS, - 23$%<=vwDERS, - z{01. / 0 1 z{01. / 0 1 z{./01@A. / 0 1 z{./01@A. / 0 1 (0@f>+ 7,{3B@Uwd$@giM?@* 5@~##K@n1m?!>.@QiA SK|t@Uu@T?;\C& X@H@SGx@(u@sA2yS@$j\@{Q{@@3>@qRk@@EobYA+ǖ<狻ąT@rg@$@wϔ@@72@V@V@U@a&AUl˜iA}iޓU@:$JOs zOI@T$@U&@'q.@ߡ@n<㡺 "@cq@ '2m-7`~|@,#^@/A?K@occd@Zp@pY@pXoS$@ \?.}x|S*KZh@J&w@tzVax;r@V tׯp@!D@7t>HfɐWLI0b]2gY3@@vV?o@#@JC2@=P00rMi? ɾ@3^Ric@61EZ3> ao`Hv8Z:#tCۆ?9vnoM*u1X@`6@@3&I@2ekf@YiۮK@/Y}UjLUD#FAFg5@}3e׌{@(;چYn@!> [LB@ @k2#\d@4.YD@{F4@.G@=ي5_C!`==݅κV@ҽcA2G@bf@3=D@е@3t! i]@eQ痐k@xrccI@0bZ]>Qb St.`@z*V @r t`oR#Hnk@V@mUӖEZ2U5ܜE@Ct"@P;Om@DjA@ae5g@fȺ@fpM$1.E@Z6KtX@wH;@V@j@g xV2@|I ˗S@-^S0gnZO(:@`f)@qm,?C `  ?S"@xHl@vb"x@k@l޾mJч@N1$C 5@D4Gfp {miB(h)E$_@?{ ܎kr4 *ȫV@>0X(Z@"6j(0@bɘ)@c4@r?t)gB@PvnxJxt#^>`-IoP`7(Uq?%QO_<?s@3Aj+GbKj.W7}2!{6Bj<鱺 `V@c\ު1sKS:) e*$?q #t=6 :3ᔒO}D(V?ں1TTҋyYH9nNlFu AuAVٿ <)bb%@:dVFBrk"W}G4@۾&/@lT% ft0ҟ!E+ay ,;9@tk`s6@Yr6A@rSG0@ ?@#T6W@K<D"@9mZAaBx!@ @ >v`@m*yqrYR5{ntu=$JGfV+l-'@@Mb[?'T1a6@^~E@䙐8):L)@c0;"OSQ@3?0>A kc߯ŶE@n2Bz`F@ 3P bIifP ?XޙLHЅnk!ZHyrl*qh. iff@+J}\@o#@~}G@e6'C)<*„‹.&G@:1@7Xd@@@p 1] @HaZ@PHH >3o#6,Z[C84<98߿hd;r"A@/?b7 ` ?5"*3?d AgCjYQ1ԃQB̫I1 2ZZS@cWeQ@N|I%@E Db1QW5Yy m @srи0Q@@ă_fz@_MV3!$y8ux%5pW]W.lA@Ul8@kFTImEP<:-J@ƟQ@]:# U&tz@b:dM?>|;k@È@i|{@J:m6Xtmeר.ߍ FSJX@!yBt Mn6@M&@]M[1?0>8kS@i7p:@=Īץ6]T 8Q֕(_Eg`@b@@K7>xX&"'9!IA/#T鿟L =пspE?1H_!4@~P((vh$s##}Kp߶na$@rȞD " 4:*`B/@l0%@>$[-! K~ Lo]E"w ޅG3,c[@LFT@=o?<@WI0@S*6(ٹa+Ww0@pBvՇELZF*!8=6o6#@ R;1n4?2VG/BB֨TS^kd@`YåM|5NV2@ˊ3@0L.LE>=@18 VC :?8s LV?-=iҥhrKN@ɭuek5E?-]f9%.-y>37!Qe=LIvg b?_ϫTz@ӕ&pwf@1$7w,P@J/ZgGbJMn WJ;̇0@s->D@q>y8Z?.O@Zݜ'"D;z[@`,V8:jy"Q_YNݲ9QP(kFT@IP%YA@%[+@]"X&uM|l&?Un@=l'@JU%seWBN'y4@ @'B$5"@U뎭!A@ ?KQRAT9T7swك!?;T#nT-B-5(fyd (*835y'@21EqyK!a@PKCV@Kk@zԠIٿ!(ɪJhA@!~xUeˣ9}%@JQ ~@()d@,f%9b A@q׍D1\2,4-[x+4X%\@#&):*W?˒ Q5#a-+7t y/6@),V!@bdLO@ձh??.KUڿ9c$6? Q?R"@5M$@հƃu@tJ*fɓa.GI?X+M{󠘢@}Vr,,6xX-@W8L#H >x07@UDؐI+@ͭP @Z @-u֬ -}!DPQ#;N#u?5@@ p k7,=L@;%?}+VobS|c?Ao@'с>6"A}dU]ThqIABY@c0[@uLuhzEg7on!a,@>5cFd#,ϊ$:@-ɖ @ O5y֒@i>Bq!@˕-_wS@.&[;} Ah/UX*:|T:IɿH6E&":|'49Kr7yxWpv7@jj.4@I<[BKwE4K,* )iSY'}J@ZE!G^QkW 6@Vc13G=灤$}k@Qz_z~@{k0<@xvͺM.갑.Qȓ4R@\ $O U@E@mP@C];JIYhL `qj@LPIVRH91l*!Z!l!@mH$@BO@@{H\+  WX3/n@c-/m0)Tq @gBx]H>VA,JP@$^2DV {@jwH`"W*=mUZ2C^@}2B@A"@M2 ?mhp"|\7*y R O4@MX6?n_|]y9 (@ܷq>^JH:P@=L]]@e(TK@S-N:" bەv@R1|#EȖtר'JJ^& +@@T?*[@qp$@b8@z-7Ʈ:;n?)tuY8v7G79&#ŔjB_@Smh%@gu`?X,]ڿQV23#|c3I@@tUx4@9e@hiXp4$}GWy5RF|姢33@H?*KM@T<>Uy,@Gg@?71e@;˓bS@\4H"}f|4@AtX]W@8_lv@m{v@Gc~4@ŌA# L)b@\sx;`@TXE$utKJ^xJa+4ۂÏQ @:.ӯ:? #K-\0?â)V<<1S v=B$Ὶq?}"Ln(~u{[hC9x]#W-7@?Z se #粒GctNI@v:@^O- CqCl9`U+&P"p;Zv0G?9_%@מW@/Ϳ:@c;}I["y|̐?%5&8ZDp'@Mc&zKjZmW@֢V@oi 'lIckMZuK:5j2@uE.T@ TYurv5t'eD@+yT-@xN?:{;:@W#?VQjH10Ɩ?.=i1Qჺ!4^+>x@AHD%9;AΦK;o[?r=@u -#zC13@P=N%U1i>4@\=@߱4\@Yg=:D3?@;Wc$ri@Zh%AH`OS#yQ )@CPI@q8F@@}!#B,Y@Bp&u^H)x77W!GR?+7,( .[5#?sFFN@?MN(2%I@f@^DA@R'J%@Ps^!HD rC1:>o4,* ݿnw42( Vg5h@~Q@M#'Qr_U3@"޿R@Z̮D-O$,RX@WhQWĺX@]jI@;Q?G_M3.4@iw [vVXMgn{k@Fը'@ٕї@^B]?{s]l.`JW 7=i @ aRC?"=N,@0[|Yl=dV&JJq\m5!5m"&/uB<~د ?$%( ȣvW^#@wD;5s{N@d&zyA6Ϊe܈D9-qb@A%@pc@xys2sG"8K?D5?Қ) OUxQ@B,3@ JP@=U) ~93eh rS᧬?鲺⿜H@Lbe3#Ч-a@b]cl+?lZ =rA[5a6 /ue2y`18MT!3UV›& @L׿]Kl.c@g57@uOE@Ej=LmR~>Úljekh c7 +EL6mG{JrX Y>FUYD@b69rV2T@IՎ(Ux) Cjn@̜"?N9 t@%W @s[ڙԷX5֝#&Pį0F@IDWp)<&J@_ B@;> @@!H@ T$^@7o@)fljg @qƲ.VVH<0?I?C @""4ÂB@l.[D @,gd/[e=<@je$ @ɑ!Þ@u:@I"@G6]s}1D?3EW@J,=?0#k@zÖm6[d7H@ߞ3\@3;A@\F\0@ 8'ZB1@H@[$@e7@HjUT@$ +J@H0@@Bc(@!1a@O*:S@uw'.j:"I8ZTsJ @LI(@!h{ Ny@T lk@424)ѿM$0OR)ֽA@K}"E>@ԱÖJ@@Z *hU?&.IZٱ6_KSby뿍վ)˶#h6@ D1NS,@!^?dso=@Ϋ&v;έBQFY=@ bӢ(^U75KFFS%4b`bDؖ"Y9 h$@'m%@M;@ʉ'pe+z0zy=@N*=5EF1% @Y|/@2/%@xdk+@x@89)E%jaV"G@?)DL @85c@_ )@I0@`S-W]N @}* E#@Dmbm?H-7 G& e˔b̔72%~%`/nV @X@zR'c/je<"0=@{z:U 4H6I#0G.=@7"@گ@pf1|1&@Loq@Œ @%DbC3<́q@B8'%cO7>B) @C?d! {ѹ&^ĔJ(@Ia([ת@-' 0">$|8EN]jDP2hW@'x:@~"@°U92]zR%zR7G_gG@f=P$;z?VPE)- YʠM|?O@4Ljڿ7-8\?a2=@8h>@b2vB>ysa2:?[Fˇ9g(A@YSZ pݿ>9E@;?>6VXpc@9@ 5`*laa|?} ^t@~v6= @:pdw@C#Gڗ}Q5( @G-]Ro?xD0a&0[D uo&@>\C@,h@({,Q7fCdYA2L66@זR#A@3EOB6O"%T@obg`qBiC !eMZ@kȷD@{rx*!B xܡ>Lhc*@ߠh/5-fR"OJ̩s}iKbͿ(?>x } m}`@%֍>@ѡy0dÔ@ riUA$awD@?#@[6 LK1Z/0[ j13b)0\D oJ y?fA KKRW' 3@qJ ,sf$@9^'Zb@'ڥ@ޅjH[TbRt $=+U6c @ьF&M@J;9'b4"֌ :7! >GoI.%=M ON)@! Wܿh+')Z2:n@0g[i@A?rWി9'|@<`Mf*Cu+翛2S~4i=<@xc@@Pί1G 4Xk@:+$-m@j[p(7!̿nCJ |]7neqSN@n"`bFNj /?ӂfOc@ <$u0i\M@85 @u;@-FO;@7~@LDqKhf#goX@c@l;woK6h5Ya%527ZU??469'1@=sG}@ @ŋT*?q2Hb4Ju+(>_'׬@bP0@2%pHpqPu;$Jpi;Gl@]p@Rb^0@>>q'@y@B@ׄ({C@9y^2Ӊ,NNEc?nj |@ȥ(^@ ^yr4GSm DYS Y}? <@5W!alۼܷ)Un T/ H29+CO$GԿB4jKI ~@U/YqN@W$&@#VWtb𿍙E)h!Stkz1@W=?? hYpM@ o,@*3`ᥑB5Hs>@]lQ? mG=Afo㪾ؿ vbSB@.} @$ QHqš%@N@f``,Ec3׿7"$T?ke!@ m[pi@;'d&cG꿁)]as~HN@")(Y:^P|bF7.:֝*ȇsH@ぷ@2pQ~m' j?Cd `z.@ @iؾG$^2ec[ P^;Ek%@P8~ܿVaL01zz @F? @ o;z؏A @?`oZ?1@6P>N5Ht5n@Q0@/2ڂf+[GPt@tUb̉@H͈lRhD@ à ePZDI@h6@~3C{*@e)eӨDZTh2ݔ g;A@nj7D=8@5(m1@39䀄鿆D+b@aSSdGQrE”wF(WAk?{ZGdV? or0S̿fqDm(U4,ftY/@m6|Vb rdU{Ѯ=@В[$-sbA@?B(OyRHiBx$zX??e1X?Z$b4@bL>7r15,O47"fFA%Wmi v f6!K / A-@i3~@=@A̹fG@>2!8yRǯkOoe~@dqޠT@a}@: A=]c@O*XK:ɅG@ھ>5eq -0@jD+(3M,2 (?[K'@t?^JJ#@:G`$5o84/͘A@63GYMW@D5@ڹ)?0@x1e@ P3@u\?mw CB@)0\p ?>@X% ' @L8#t?PY.v% M#@DئC@RڍX ͩ]/Ut]M UynUh@i%)@ o@?ZNL=J@I*A+@?; ]h&@*nI|] @G ƒtM? WL~@p A𿡔 ruF`#jϲ g 'eCVŠ9q3i6 @i~Jp@#J<19XesG){- @P0A@MN`)#@OͱY06Aq/ʡb%T]&|_φr@QaIB@:@vώYBt׍X= mo7ur#%dA7o\ft?Mf1c5p*HlFw8u@`(1R)+ݿeg@f\r@l"K=6d)ɟHB^;@gqZvq4 8V3@l"@_k̟C@>B5@ Z_>@K}@Mz(HRb Upª͔5kr<@=!@g? ?2PN@P󿟘t3@.tJ?7a q?8gxu@IT@m?Q?`"HL \ďH0J9Ā?< pc@@g"@Su ?S[4Fn#F8̺?hDTAϹ 5TVfx#y`?~aΥU?t=l IYT#t?tR@b.TR 5RWKԀE'5.7Έ @61",Z4!"QR@ٹմV#Ҙ)b0S91v(#OB_0"ۺb<8Wm1+F4t;AF0H3MڬrgG@'*'|'/[}~ gTwjkC&Ab91? u'{G4mJ/?"d"~Il@֘ou4@4HnBuJ6:?C @1ScҴk)2)v2L塸nHbm@M6ZPLln @)4odU@E^Kb6?ѳ gj@L=`wPy7U/ hA$E'&l\W FKFNN?- zA@/ 12@2ӐP?r-f?y(Ҿ?sfm@fApBWT R@G@*4:@o"E @b!j!FU=^U/NJ@X@-?<?2&:`@(0@qUI9m,`b@9cWC@r #@&Z)E*jY:;Bw:"@O@\"ԅ]sBy灧^H,SMxYdſQܺ&@@A%`}d[:5FjE}7;鯁 @~ "M@TE#lC@GҿJXo4bGRPS@sΥO&3@ w?7$.q}u*@Y !@s${@u"iЅRZ1@b7o..' x6&.@NCgrx T@fg0zp-(&C9h@3$vOT$^@߁V3w(ZYw@?72ɨ)y0@c2_AÌsplI@IQMC|Q7mL R8sFaۅnF@އ2q&=d@}8P@wErD2oU m;K(p:Ih"@+gp?.Dg86`V#3IT;'a&YHHkv7>K|? @-&=pSn@jHT>6;;"_CYo<@Ph FdTq'T?\@&hF*51D@ hWX I3$,Q@flGQ@i)--d@=]͡TdzA%"cX"@ol@GW%?)P&R*MK @a+'7b@%S,~H?ޥ@(R@_m=p3XTl?T-6wLy=Į6o?UצbO@ڟ ~+U:@p4g@GKa}I(FE+-tR/NsCZ(L4@<@չ)B{*60@m|e3h@Iz%Z#@}ey@=oDfB@J#3@Rl$/ڡ@$];\@$M>,@y"@}0a??A7@>X$ @L̫ft\@ja:@r!]=Z2K2bח4=0_9^l<2$,@ B @:er#ی!s$j@ H?"?$R nF&BwE@+@wcA!@2q?w ;جL4]ME`MhmJ@G`U4@s@%Ȍ?@^~?j8Á[m6#o@$`@ޱܰ~@5ӮxS%3@pxh3c\"z1[B@}m0#|:v@0&Kc0@ tc{@r~:FŪ<(#;L.Ĺ<) @S3~ ;\$=;]L_,#"8B0=s]Bf@Y# hq !@&MMf@-/ l`ė L@R@6@$+#,@s@!,X@,%"춫@E_A@SCc4nJmNŰZя,@ HA@G*o_:@SOB۫bF|M쓊Du? iB6 mXKF#"?k\3Cr@3ՐW3'hQ9Gfp%B)Jq|$@˾NUoB?r]:"y&L?zP: ,@o@}D@a|f\d@ lU"Q3`@i 6ҕ\QڿV W%Q?7@f@@@m_<1snX@u`@, G$w:{v!@+\ji*@@t뇖Xz(w] <*7 m@}y8,@q](7xmGM# 2eQ Q]yV<+,I@y[4@r{YR@%w]J3@?4a0yxD\3 f?m=cM?VA(H> <4d m[ِj@oԋR'&S@]ir@k:Nga-5-3/armci/examples/benchmarks/cg/armci_sharedmemory/timing.c0000640005473000001440000000234411316500271023517 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * Copyright (c) 1995 by PDCL Corporation. All Rights Reserved * NAME * timing.c * PURPOSE * Timing routines for calculating the execution time: * void start_timer(void); Set the timer. * double elapsed_time(void); Return the timing elapsed since * the timer has been set. * NOTES * Jialin Ju - Oct 16, 1995 Created. */ #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_ERRNO_H # include #endif #if HAVE_SYS_TIME_H # include #endif /* Timing routines that use standard Unix gettingofday() */ static struct timezone tz; static struct timeval start_time, finish_time; /* Start measuring a time delay */ void start_timer(void) { gettimeofday( &start_time, &tz); } /* Retunrn elapsed time in milliseconds */ double elapsed_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*(finish_time.tv_sec - start_time.tv_sec) + (finish_time.tv_usec - start_time.tv_usec)/1000.0 ); } /* Return the stopping time in milliseconds */ double stop_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*finish_time.tv_sec + finish_time.tv_usec/1000.0); } ga-5-3/armci/examples/benchmarks/cg/armci_sharedmemory/cg.c0000640005473000001440000001660011643645222022632 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * $Id: cg.c,v 1.1.2.2 2007-07-05 15:29:56 vinod Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if HAVE_FCNTL_H # include #endif #if HAVE_STRING_H # include #endif #include "armci.h" #include "message.h" #define PRINT_VEC_ int na,nz; double *bvec,*dvec,*svec,*dmvec,*m_dvec,*amat,*xvec,*axvec,*rvec,*qvec; int *ridx,*cidx; int me, nproc; int myfirstrow=0,mylastrow=0; double epsilon=1e-4; double time_get=0; static int niter; void read_and_create(int,char **); void computeminverser(double *,double *, double *); void computeminverse(double *,double *, int *,int *); void finalize_arrays(int); extern void acg_matvecmul(double *,double *,double *,int *,int *); extern void acg_addvec(double *,double *,double *,double *, double *); extern void acg_2addvec(double *,double *, double *,double *, double *, double *, double *,double *, double *, double *, int *, int *); extern double acg_ddot(double *,double *); void conjugate_gradient(int nit,int dopreconditioning) { int i; double d_one=1.0,d_negone=-1.0; double delta0=0.0,deltaold=0.0,deltanew=0.0; double alpha=0.0,negalpha,beta,dtransposeq; acg_matvecmul(amat,xvec,axvec,ridx,cidx); /* compute Ax */ #ifdef PRINT_VEC acg_printvec("axvec",axvec); acg_printvec("bvec",bvec); #endif /* TODO original call had too many arguments */ /* acg_addvec(&d_one,bvec,&d_negone,axvec,rvec,ridx,cidx); */ /* r=b-Ax */ acg_addvec(&d_one,bvec,&d_negone,axvec,rvec); /* r=b-Ax */ #ifdef PRINT_VEC acg_printvec("rvec",rvec); if(me==0)for(i=0;i(epsilon*epsilon*delta0);i++){ acg_matvecmul(amat,dvec,qvec,ridx,cidx); /* q = ad */ dtransposeq=acg_ddot(dvec,qvec); /* compute d_transpose.q */ alpha = deltanew/dtransposeq; /* deltanew/(d_transpose.q) */ #if 0 if(i>0 && i%50==0){ /* compute Ax*/ acg_matvecmul(amat,xvec,axvec,ridx,cidx); /* x = x+ alpha.d*/ /* r=b-Ax*/ acg_2addvec(&d_one,xvec,&alpha,dvec,xvec,&d_one,bvec, &d_negone,axvec,rvec,ridx,cidx); } else #endif { negalpha = 0.0-alpha; /* x = x+ alpha.d*/ /* r=r-alpha.q*/ acg_2addvec(&d_one,xvec,&alpha,dvec,xvec,&d_one,rvec, &negalpha,qvec,rvec,ridx,cidx); } if(dopreconditioning) computeminverser(dmvec,rvec,svec); deltaold = deltanew; /* deltaold = deltanew*/ if(dopreconditioning) deltanew = acg_ddot(svec,rvec); /* deltanew = r_transpose.r*/ else deltanew = acg_ddot(rvec,rvec); /* deltanew = r_transpose.r*/ beta = deltanew/deltaold; /* beta = deltanew/deltaold*/ if(dopreconditioning) { /* too many aguments in function call */ /* acg_addvec(&d_one,svec,&beta,dvec,dvec,ridx,cidx); */ /* d = s + beta.d */ acg_addvec(&d_one,svec,&beta,dvec,dvec); } else { /* too many aguments in function call */ /* acg_addvec(&d_one,rvec,&beta,dvec,dvec,ridx,cidx); */ /* d = r + beta.d */ acg_addvec(&d_one,rvec,&beta,dvec,dvec); } #ifdef PRINT_VEC acg_printvec("xvec",xvec); #endif /* acg_printvec("xvec",xvec); */ } if(me==0)printf("\n\tIteration:%d\tBeta:%0.4f\tDelta:%f\n", i,beta,deltanew); niter = i; } void initialize_arrays(int dpc) { int i; for(i=0;i cg.x na nz file"); printf("\n\n where:"); printf("\n\tna is array dimention (only square arrays supported)"); printf("\n\tnz is number of non-zeros"); printf("\n\tfile is either the input file or the word random"); printf("\n\t use the word random if you to use random input"); printf("\n\t input should be in row compressed format"); printf("\n\t file should have matrix a followed by row, col & b (Ax=b)"); printf("\n\t if file also has na and nz, pass them as 0's and the"); printf("\n\t program will read them from the file"); printf("\n\nexample usages are:"); printf("\n\tmpirun -np 4 ./ga_cg.x 5000 80000 /home/me/myinput.dat"); printf("\n\tor"); printf("\n\tmpirun -np 4 ./ga_cg.x 5000 80000 random\n\n"); fflush(stdout); } ARMCI_Finalize(); armci_msg_finalize(); return 0; } read_and_create(argc,argv); if(me==0)printf("\nWarmup and initialization run"); #if 0 initialize_arrays(dopreconditioning); conjugate_gradient(1,dopreconditioning); time_get =0.0; #endif if(me==0)printf("\n\nStarting Conjugate Gradient ...."); initialize_arrays(dopreconditioning); time0=armci_timer(); conjugate_gradient(30000/*2*/,dopreconditioning); time1=armci_timer(); acg_matvecmul(amat,xvec,axvec,ridx,cidx); if(me==0)printf("\n%d:in %d iterations time to solution=%f-%f ax and b in cg_output.out\n",me,niter,(time1-time0),time_get); acg_matvecmul(amat,xvec,axvec,ridx,cidx); if(me==0){ int i; fd = fopen("cg_output.out", "w"); for(i=0;i<=na;i++) fprintf(fd,"\n%d:%s[%d]=%f %s[%d]=%f",me,"bvec",i,bvec[i],"axvec",i,axvec[i]); fflush(stdout); fclose(fd); } finalize_arrays(dopreconditioning); armci_msg_barrier(); if(me==0)printf("Terminating ..\n"); ARMCI_Finalize(); armci_msg_finalize(); return 0; } ga-5-3/armci/examples/benchmarks/RandomAccess/0000750005473000001440000000000012275260546020174 5ustar d3n000usersga-5-3/armci/examples/benchmarks/RandomAccess/ra_common.h0000640005473000001440000000156011263711767022324 0ustar d3n000users/** @file * $ID:$ */ #ifndef RA_COMMON_H_ #define RA_COMMON_H_ #if SIZEOF_LONG == 8 # define POLY 0x0000000000000007UL # define PERIOD 1317624576693539401L typedef unsigned long u64Int; typedef long s64Int; # define FSTR64 "%ld" # define FSTRU64 "%lu" # define ZERO64B 0L #elif SIZEOF_LONG_LONG == 8 # define POLY 0x0000000000000007ULL # define PERIOD 1317624576693539401LL typedef unsigned long long u64Int; typedef long long s64Int; # define FSTR64 "%lld" # define FSTRU64 "%llu" # define ZERO64B 0LL #else # error long nor long long are 8 bytes in size #endif /* Macros for timing */ #define CPUSEC() (HPL_timer_cputime()) #define RTSEC() (MPI_Wtime()) #define MAX_TOTAL_PENDING_UPDATES 1024 #define LOCAL_BUFFER_SIZE MAX_TOTAL_PENDING_UPDATES #define MAX_OUTSTANDING_HANDLES 64 extern u64Int **HPCC_Table; #endif /* RA_COMMON_H_ */ ga-5-3/armci/examples/benchmarks/RandomAccess/simple/0000750005473000001440000000000012275260546021465 5ustar d3n000usersga-5-3/armci/examples/benchmarks/RandomAccess/simple/simple.c0000640005473000001440000001740211643645222023123 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #if HAVE_STDIO_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if HAVE_FCNTL_H # include #endif #include "armci.h" #include "message.h" #include "../ra_common.h" #define DEBUG 0 static int me, nproc; static u64Int procnumupdates,myglobalstart,globaltablelen,mytablelen,mintablesize,*procglobalstart; static int bigtables,Remainder; static int my_free_handle; FILE *fd; u64Int **HPCC_Table; struct vector_dscr_t{ int active; int dstproc; u64Int **xmitbuffer; struct vector_dscr_t *next; armci_giov_t a_v; }; struct vector_dscr_t *vec_dscr; static struct vector_dscr_t curdscr_val; struct vector_dscr_t *curdscr_ptr = &curdscr_val; static armci_hdl_t* _get_next_handle() { my_free_handle++; my_free_handle %= MAX_OUTSTANDING_HANDLES; } /* from hpcc RandomAccess/utility.c */ static u64Int HPCC_starts(s64Int n) { int i,j; u64Int temp,ran,m2[64]; while (n < 0) n += PERIOD; while (n > PERIOD) n -= PERIOD; if (n == 0) return 0x1; temp = 0x1; for (i=0; i<64; i++) { m2[i] = temp; temp = (temp << 1) ^ ((s64Int) temp < 0 ? POLY : 0); temp = (temp << 1) ^ ((s64Int) temp < 0 ? POLY : 0); } for (i=62; i>=0; i--) if ((n >> i) & 1) break; ran = 0x2; while (i > 0) { temp = 0; for (j=0; j<64; j++) if ((ran >> j) & 1) temp ^= m2[j]; ran = temp; i -= 1; if ((n >> i) & 1) ran = (ran << 1) ^ ((s64Int) ran < 0 ? POLY : 0); } return ran; } static void xmitvector(){ struct vector_dscr_t *tmp=curdscr_val.next, *tmp1; u64Int myscale=0; curdscr_ptr = &curdscr_val; while(tmp!=NULL){ if(tmp->dstproc!=me) ARMCI_NbAccV(ARMCI_ACC_RA,&myscale,&tmp->a_v,1,tmp->dstproc,NULL); tmp=tmp->next; } tmp=curdscr_val.next; while(tmp!=NULL){ if(tmp->dstproc==me) ARMCI_AccV(ARMCI_ACC_RA,&myscale,&tmp->a_v,1,tmp->dstproc); tmp=tmp->next; } tmp=curdscr_val.next; while(tmp!=NULL){ tmp->active=0; tmp->a_v.ptr_array_len=0; tmp1=tmp->next; tmp->next=NULL; tmp = tmp1; } } static void addtovector(u64Int ran){ u64Int offset; int proc; struct vector_dscr_t *tmp; offset = ran & (globaltablelen-1); if(offset < bigtables) proc=offset/(mintablesize+1); else proc=(offset-Remainder)/mintablesize; tmp =&vec_dscr[proc]; if(!tmp->active){ tmp->active = 1; tmp->next = NULL; curdscr_ptr->next = tmp; curdscr_ptr = tmp; } *(u64Int *)tmp->a_v.src_ptr_array[tmp->a_v.ptr_array_len]=ran; tmp->a_v.dst_ptr_array[tmp->a_v.ptr_array_len]=(void *)(HPCC_Table[proc]+(offset-procglobalstart[proc])); tmp->a_v.ptr_array_len+=1; } void HPCCRandom_Access() { int i; u64Int ran; ran = HPCC_starts (4 * myglobalstart); for(i=0;i simple.x inpfile\n"); fflush(stdout); } ARMCI_Finalize(); armci_msg_finalize(); return 0; } globaltablelen = atoi(argv[1]); mintablesize = globaltablelen/nproc; Remainder = globaltablelen - mintablesize*nproc; bigtables = (mintablesize+1)*Remainder; if(me #endif #if HAVE_SYS_ERRNO_H # include #endif #if HAVE_SYS_TIME_H # include #endif /* Timing routines that use standard Unix gettingofday() */ static struct timezone tz; static struct timeval start_time, finish_time; /* Start measuring a time delay */ void start_timer(void) { gettimeofday( &start_time, &tz); } /* Retunrn elapsed time in milliseconds */ double elapsed_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*(finish_time.tv_sec - start_time.tv_sec) + (finish_time.tv_usec - start_time.tv_usec)/1000.0 ); } /* Return the stopping time in milliseconds */ double stop_time(void) { gettimeofday( &finish_time, &tz); return(1000.0*finish_time.tv_sec + finish_time.tv_usec/1000.0); } ga-5-3/armci/examples/benchmarks/RandomAccess/smp_bucket/0000750005473000001440000000000012275260546022330 5ustar d3n000usersga-5-3/armci/examples/benchmarks/RandomAccess/smp_bucket/smp_bucket.c0000640005473000001440000002140111643645222024623 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #if HAVE_STDIO_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if HAVE_FCNTL_H # include #endif #include "armci.h" #include "message.h" #include "../ra_common.h" #define DEBUG 0 static int me, nproc,nsmp; static u64Int procnumupdates,myglobalstart,globaltablelen,mytablelen,mintablesize,*procglobalstart; static int bigtables,Remainder; static int *armcismpid; static int my_free_handle; FILE *fd; u64Int **HPCC_Table; struct vector_dscr_t{ int active; int dstproc; int dstsmp; u64Int **xmitbuffer; struct vector_dscr_t *next; armci_giov_t a_v; }; struct vector_dscr_t *vec_dscr; static struct vector_dscr_t curdscr_val; struct vector_dscr_t *curdscr_ptr = &curdscr_val; static armci_hdl_t* _get_next_handle() { my_free_handle++; my_free_handle %= MAX_OUTSTANDING_HANDLES; } /* from hpcc RandomAccess/utility.c */ static u64Int HPCC_starts(s64Int n) { int i,j; u64Int temp,ran,m2[64]; while (n < 0) n += PERIOD; while (n > PERIOD) n -= PERIOD; if (n == 0) return 0x1; temp = 0x1; for (i=0; i<64; i++) { m2[i] = temp; temp = (temp << 1) ^ ((s64Int) temp < 0 ? POLY : 0); temp = (temp << 1) ^ ((s64Int) temp < 0 ? POLY : 0); } for (i=62; i>=0; i--) if ((n >> i) & 1) break; ran = 0x2; while (i > 0) { temp = 0; for (j=0; j<64; j++) if ((ran >> j) & 1) temp ^= m2[j]; ran = temp; i -= 1; if ((n >> i) & 1) ran = (ran << 1) ^ ((s64Int) ran < 0 ? POLY : 0); } return ran; } static void xmitsmpvector(){ struct vector_dscr_t *tmp=curdscr_val.next, *tmp1; int mysmpid = armcismpid[me]; u64Int myscale=0; curdscr_ptr = &curdscr_val; #if DEBUG printf("\n%d:in xmitsmpvector dstproc=%d dstsmp=%d mysmp=%d\n",me,tmp->dstproc,tmp->dstsmp,mysmpid);fflush(stdout); #endif while(tmp!=NULL){ if(tmp->dstsmp!=mysmpid) ARMCI_NbAccV(ARMCI_ACC_RA,&myscale,&tmp->a_v,1,tmp->dstproc,NULL); tmp=tmp->next; } tmp=curdscr_val.next; #if DEBUG printf("\n%d:in xmitsmpvector1 dstproc=%d\n",me,tmp->dstproc);fflush(stdout); #endif while(tmp!=NULL){ if(tmp->dstsmp==mysmpid) ARMCI_AccV(ARMCI_ACC_RA,&myscale,&tmp->a_v,1,tmp->dstproc); tmp=tmp->next; } tmp=curdscr_val.next; #if DEBUG printf("\n%d:in xmitsmpvector2 dstproc=%d\n",me,tmp->dstproc);fflush(stdout); #endif while(tmp!=NULL){ tmp->active=0; tmp->a_v.ptr_array_len=0; tmp1=tmp->next; tmp->next=NULL; tmp = tmp1; } #if DEBUG printf("\n%d:in xmitsmpvector done\n",me);fflush(stdout); #endif } static void addtosmpvector(u64Int ran){ u64Int offset; int proc,smpid; struct vector_dscr_t *tmp; offset = ran & (globaltablelen-1); if(offset < bigtables) proc=offset/(mintablesize+1); else proc=(offset-Remainder)/mintablesize; /*if(vec_dscr[]);*/ smpid = armcismpid[proc]; #if DEBUG printf("\n%d:adding ran=%d offset=%d proc=%d smpid=%d\n",me,ran,offset,proc,smpid);fflush(stdout); #endif tmp =&vec_dscr[smpid]; if(!tmp->active){ tmp->active = 1; tmp->next = NULL; curdscr_ptr->next = tmp; curdscr_ptr = tmp; } *(u64Int *)tmp->a_v.src_ptr_array[tmp->a_v.ptr_array_len]=ran; tmp->a_v.dst_ptr_array[tmp->a_v.ptr_array_len]=(void *)(HPCC_Table[proc]+(offset-procglobalstart[proc])); tmp->a_v.ptr_array_len+=1; #if DEBUG printf("\n%d:added ran=%d smpid=%d ptrarrlen=%d\n",me,ran,smpid,tmp->a_v.ptr_array_len);fflush(stdout); #endif } void HPCCRandom_Access() { int i; u64Int ran; ran = HPCC_starts (4 * myglobalstart); for(i=0;i simple.x inpfile\n"); fflush(stdout); } ARMCI_Finalize(); armci_msg_finalize(); return 0; } globaltablelen = atoi(argv[1]); mintablesize = globaltablelen/nproc; Remainder = globaltablelen - mintablesize*nproc; bigtables = (mintablesize+1)*Remainder; if(me #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_UNISTD_H # include #endif #include #include #include "armci.h" #include "gpc.h" typedef struct {double real,imag;} DoubleComplex; #define LOOP 100 int accloop; int gpcwork_daxpy; int gpcwork_dgemm; int gpcwork_ddot; int gpcwork_memcpy; int me,nprocs; int size=2100*1024*LOOP; int count=2100*1024; int stride_arr[2]={0,0}; double alpha=0.1; double c_alpha=0.1; char **myptrs; double t0,t1,t2,t3; double tmpbuf[LOOP*100]; double tmpbuf1[LOOP*100]; double tmpbuf2[LOOP*100000]; double tmpbuf3[LOOP*100000]; #define DGS 450 double dga[DGS][DGS]; double dgb[DGS][DGS]; double dgc[DGS][DGS]; int gpc_work_handler_daxpy(int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, int *rhsize, void *rdata, int rdlen, int *rdsize, int rtype) { int *rem; int tmp_loop; int i,j; int ONE=1; int N=DGS; rem = (int*)ARMCI_Gpc_translate(*(void**)hdr,to,from); tmp_loop = *rem; t2=MPI_Wtime(); for(j=0;j=2 procs\n"); MPI_Finalize(); exit(1); } right = (me+1)%nprocs; hlen=sizeof(header); bzero(rheader,100); rhlen = hlen; ARMCI_Init(); accloop=atoi(argv[1]); rem=accloop; myptrs = (char **)malloc(sizeof(char *)*nprocs); ARMCI_Malloc((void **)myptrs,size); MPI_Barrier(MPI_COMM_WORLD); gpcwork_memcpy = ARMCI_Gpc_register(gpc_work_handler_memcpy); gpcwork_ddot =ARMCI_Gpc_register(gpc_work_handler_ddot); gpcwork_daxpy = ARMCI_Gpc_register(gpc_work_handler_daxpy); gpcwork_dgemm = ARMCI_Gpc_register(gpc_work_handler_dgemm); MPI_Barrier(MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); ARMCI_Gpc_init_handle(&nbh); if(ARMCI_Gpc_exec(gpcwork_memcpy, right, &header, hlen, loc, sizeof(int), rheader, rhlen,loc, sizeof(int), &nbh)) fprintf(stderr,"ARMCI_Gpc_exec failed\n"); { int m,n,k; char notr='n'; DoubleComplex ZERO; usleep(100); ZERO.real=0.;ZERO.imag=0.; m=n=k=DGS; t0=MPI_Wtime(); #ifdef DGEMM_WORK for(j=0;j<4*15;j++){ c_alpha=c_alpha+j*rand(); dgemm_(¬r,¬r,&m,&n,&k,&c_alpha,c_dga,&m,c_dgb,&n,&ZERO,c_dgc,&k,1,1); } #elif IUNIT_WORK for(j=0;j<2*LOOP*100;j++){ for(i=0;i #endif #if HAVE_STDLIB_H # include #endif #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include # define sleep(x) Sleep(1000*(x)) #endif #if HAVE_ASSERT_H # include #endif #include "armci.h" #include "message.h" #define DIM1 5 #define DIM2 3 #ifdef __sun /* Solaris has shared memory shortages in the default system configuration */ # define DIM3 6 # define DIM4 5 # define DIM5 4 #elif defined(__alpha__) # define DIM3 8 # define DIM4 5 # define DIM5 6 #else # define DIM3 8 # define DIM4 9 # define DIM5 7 #endif #define DIM6 3 #define DIM7 2 #define OFF 1 #define EDIM1 (DIM1+OFF) #define EDIM2 (DIM2+OFF) #define EDIM3 (DIM3+OFF) #define EDIM4 (DIM4+OFF) #define EDIM5 (DIM5+OFF) #define EDIM6 (DIM6+OFF) #define EDIM7 (DIM7+OFF) #define DIMS 4 #define MAXDIMS 7 #define MAX_DIM_VAL 50 #define LOOP 200 #define BASE 100. #define MAXPROC 128 #define TIMES 100 #ifdef CRAY # define ELEMS 800 #else # define ELEMS 200 #endif /***************************** macros ************************/ #define COPY(src, dst, bytes) memcpy((dst),(src),(bytes)) #define ARMCI_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define ARMCI_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define ARMCI_ABS(a) (((a) <0) ? -(a) : (a)) /***************************** global data *******************/ int me, nproc; void* work[MAXPROC]; /* work array for propagating addresses */ #ifdef MSG_COMMS_PVM void pvm_init(int argc, char *argv[]) { int mytid, mygid, ctid[MAXPROC]; int np, i; mytid = pvm_mytid(); if((argc != 2) && (argc != 1)) goto usage; if(argc == 1) np = 1; if(argc == 2) if((np = atoi(argv[1])) < 1) goto usage; if(np > MAXPROC) goto usage; mygid = pvm_joingroup(MPGROUP); if(np > 1) if (mygid == 0) i = pvm_spawn(argv[0], argv+1, 0, "", np-1, ctid); while(pvm_gsize(MPGROUP) < np) sleep(1); /* sync */ pvm_barrier(MPGROUP, np); printf("PVM initialization done!\n"); return; usage: fprintf(stderr, "usage: %s \n", argv[0]); pvm_exit(); exit(-1); } #endif void create_array(void *a[], int elem_size, int ndim, int dims[]) { int bytes=elem_size, i, rc; assert(ndim<=MAXDIMS); for(i=0;i 0.1) { ARMCI_Error("aggregate put failed...1", 0); } } armci_msg_barrier(); if(!dryrun)if(me==0) printf("\n aggregate put ..O.K.\n"); fflush(stdout); if(me==0) { for(i=1; i 0.1) { ARMCI_Error("aggregate get failed...1", 0); } } } } armci_msg_barrier(); if(!dryrun)if(me==0) printf(" aggregate get ..O.K.\n"); fflush(stdout); ARMCI_AllFence(); armci_msg_barrier(); if(!dryrun)if(me==0){printf("O.K.\n"); fflush(stdout);} destroy_array((void **)ddst_put); destroy_array((void **)ddst_get); destroy_array((void **)dsrc); } int main(int argc, char* argv[]) { armci_msg_init(&argc, &argv); nproc = armci_msg_nproc(); me = armci_msg_me(); /* printf("nproc = %d, me = %d\n", nproc, me);*/ if(nproc>MAXPROC && me==0) ARMCI_Error("Test works for up to %d processors\n",MAXPROC); if(me==0){ printf("ARMCI test program (%d processes)\n",nproc); fflush(stdout); sleep(1); } ARMCI_Init(); if(me==0){ printf("\nAggregate put/get requests\n\n"); fflush(stdout); } test_aggregate(1); /* cold start */ test_aggregate(0); /* warm start */ ARMCI_AllFence(); armci_msg_barrier(); if(me==0){printf("\nSuccess!!\n"); fflush(stdout);} sleep(2); armci_msg_barrier(); ARMCI_Finalize(); armci_msg_finalize(); return(0); } ga-5-3/armci/examples/features/aggregation/sparse_matvecmul/0000750005473000001440000000000012275260547023175 5ustar d3n000usersga-5-3/armci/examples/features/aggregation/sparse_matvecmul/sparse_matvecmul.c0000640005473000001440000003161111643645222026711 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id$ */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include # define sleep(x) Sleep(1000*(x)) #endif #if HAVE_ASSERT_H # include #endif #include "armci.h" #include "message.h" #define DIM1 5 #define DIM2 3 #ifdef __sun /* Solaris has shared memory shortages in the default system configuration */ # define DIM3 6 # define DIM4 5 # define DIM5 4 #elif defined(__alpha__) # define DIM3 8 # define DIM4 5 # define DIM5 6 #else # define DIM3 8 # define DIM4 9 # define DIM5 7 #endif #define DIM6 3 #define DIM7 2 #define OFF 1 #define EDIM1 (DIM1+OFF) #define EDIM2 (DIM2+OFF) #define EDIM3 (DIM3+OFF) #define EDIM4 (DIM4+OFF) #define EDIM5 (DIM5+OFF) #define EDIM6 (DIM6+OFF) #define EDIM7 (DIM7+OFF) #define DIMS 4 #define MAXDIMS 7 #define MAX_DIM_VAL 50 #define LOOP 200 #define BASE 100. #define MAXPROC 128 #define TIMES 100 #ifdef CRAY # define ELEMS 800 #else # define ELEMS 200 #endif /***************************** macros ************************/ #define COPY(src, dst, bytes) memcpy((dst),(src),(bytes)) #define ARMCI_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define ARMCI_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define ARMCI_ABS(a) (((a) <0) ? -(a) : (a)) #define ROW 65536 #define COL ROW /* square matrices only for the time being */ /***************************** global data *******************/ int me, nproc; short int fortran_indexing=0; static int proc_row_list[MAXPROC];/*no of rows owned by each process - accumulated*/ static int proc_nz_list[MAXPROC]; /*no of non-zeros owned by each process */ #ifdef MSG_COMMS_PVM void pvm_init(int argc, char *argv[]) { int mytid, mygid, ctid[MAXPROC]; int np, i; mytid = pvm_mytid(); if((argc != 2) && (argc != 1)) goto usage; if(argc == 1) np = 1; if(argc == 2) if((np = atoi(argv[1])) < 1) goto usage; if(np > MAXPROC) goto usage; mygid = pvm_joingroup(MPGROUP); if(np > 1) if (mygid == 0) i = pvm_spawn(argv[0], argv+1, 0, "", np-1, ctid); while(pvm_gsize(MPGROUP) < np) sleep(1); /* sync */ pvm_barrier(MPGROUP, np); printf("PVM initialization done!\n"); return; usage: fprintf(stderr, "usage: %s \n", argv[0]); pvm_exit(); exit(-1); } #endif void create_array(void *a[], int elem_size, int ndim, int dims[]) { int bytes=elem_size, i, rc; assert(ndim<=MAXDIMS); for(i=0;i= local_nz_acc) { proc_row_list[proc_id++] = i+1; local_nz_acc = local_nz*(proc_id+1); if(proc_id == nproc-1) local_nz_acc = non_zero; if(me==0 && proc_id ROW) ARMCI_Error("order is greater than defined variable ROW", ROW); } len = sizeof(int); armci_msg_brdcst(n, len, 0); /* Broad cast number of non_zeros */ if(me==0) fscanf(fp, "%d", non_zero); armci_msg_brdcst(non_zero, len, 0); /* Broadcast row indices */ len = (*n+1)*sizeof(int); row_ind_tmp = (int *)malloc(len); if(me==0)for(i=0; i<*n+1; i++) { fscanf(fp, "%d", &row_ind_tmp[i]); if(fortran_indexing) --row_ind_tmp[i]; } armci_msg_brdcst(row_ind_tmp, len, 0); load_balance(*n, *non_zero, row_ind_tmp); /* find how much temporary storage is needed at the maximum */ if(me==0) { for(max=-1,j=0;j j) return (1); if (i < j) return (-1); return (0); } static int count = -1; static armci_hdl_t gHandle[MAXPROC]; static int prev_proc = -1; static void get_data(int n, int start, int end, double *vec_local, double **vec) { int i, j, rc, bytes, offset; int proc_start, proc_end, idx_start, idx_end; proc_start = proc_end = -1; for(i=0; istart) proc_start = i; if(proc_end<0 && proc_row_list[i]>end) proc_end = i; } if(proc_start<0 || proc_end<0) ARMCI_Error("Invalid Process Ids", -1); for(i=proc_start; i<=proc_end; i++) { if(i==proc_start) idx_start = start; else { if(i==0) idx_start=0; else idx_start = proc_row_list[i-1];} if(i==proc_end) idx_end = end; else idx_end = proc_row_list[i]-1; if(i!=prev_proc) { ++count; prev_proc = i; ARMCI_INIT_HANDLE(&gHandle[count]); ARMCI_SET_AGGREGATE_HANDLE(&gHandle[count]); } if(i==0) offset=0; else offset = proc_row_list[i-1]; if(i==me) { /* local */ for(j=idx_start; j<=idx_end; j++) vec_local[j] = vec[me][j-offset]; } else { /* remote */ bytes = (idx_end-idx_start+1)*sizeof(double); vec_local[idx_start] = -1; #if 0 if((rc=ARMCI_Get(&vec[i][idx_start-offset], &vec_local[idx_start], bytes, i))) #else if((rc=ARMCI_NbGet(&vec[i][idx_start-offset], &vec_local[idx_start], bytes, i, &gHandle[count]))) #endif ARMCI_Error("armci_nbget failed\n",rc); } } } static void sparse_multiply(int n, int non_zero, int *row_ind, int **col_ind, double **values, double **vec, double **svec) { int i, j, k, num_elements, offset, *tmp_indices; double start_time, comm_time, comp_time, v, vec_local[COL]; int start, end, prev, nrows, idx; #if 0 /* ---- Sequential Case ---- */ for(i=0; iprev+1) { end = prev; get_data(n, start, end, vec_local, vec); start = prev = tmp_indices[i]; } else prev = tmp_indices[i]; } get_data(n, start, prev, vec_local, vec); #if 1 if(count>=0) for(i=0; i<=count; i++) ARMCI_Wait(&gHandle[i]); #endif comm_time = armci_timer() - start_time; start_time = armci_timer(); /* Perform Matrix-Vector multiply and store the result in solution vector - "svec[]" */ if(me==0) { nrows = proc_row_list[me]; offset = row_ind[0]; } else { nrows = proc_row_list[me]-proc_row_list[me-1]; offset = row_ind[proc_row_list[me-1]]; } /* printf("%d: My total Work = %d\n", me, nrows); */ for(i=0; iMAXPROC && me==0) ARMCI_Error("Test works for up to %d processors\n",MAXPROC); if(me==0){ printf("ARMCI test program (%d processes)\n",nproc); fflush(stdout); sleep(1); } ARMCI_Init(); if(me==0){ printf("\n Performing Sparse Matrix-Vector Multiplication ...\n\n"); fflush(stdout); } test_sparse(); ARMCI_AllFence(); armci_msg_barrier(); if(me==0){printf("\nSuccess!!\n"); fflush(stdout);} sleep(2); armci_msg_barrier(); ARMCI_Finalize(); armci_msg_finalize(); return(0); } ga-5-3/armci/examples/features/symmetric_memory/0000750005473000001440000000000012275260546020737 5ustar d3n000usersga-5-3/armci/examples/features/symmetric_memory/simple/0000750005473000001440000000000012275260546022230 5ustar d3n000usersga-5-3/armci/examples/features/symmetric_memory/simple/simple.c0000640005473000001440000000024011341051620023642 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /*$Id: simple.c,v 1.1.2.1 2007-06-20 17:42:20 vinod Exp $*/ int main(int argc, char **argv) { return 0; } ga-5-3/armci/examples/features/concurrency/0000750005473000001440000000000012275260547017666 5ustar d3n000usersga-5-3/armci/examples/features/concurrency/README0000640005473000001440000000222711423627743020551 0ustar d3n000usersHigh-performance networks have developed significantly over the past several years. Many of these networks are capable of remote direct memory access (RDMA) communication that involves movement of data between processor memories without memory copies or remote host processor involvement. Current high-speed networks deploy powerful communication processor(s) in the network interface card (NIC) to handle processing of multiple incoming and outgoing messages without interrupting the host processor. For example, the Quadrics Elan4 network interconnect can do two overlapping DMAs and allows multiple outstanding read/write transactions from and to the network interconnect. Switches used in the modern interconnects also have developed significantly in the last several years, facilitating multiple communication paths between network endpoints and hence roviding increased levels of concurrency and redundancy communication between network endpoints. As a result, the modern networks are very capable of handling simultaneous and concurrent data movements. ARMCI allows for its applications to utilize concurrency by its low-overhead implementation of one-sided calls ga-5-3/armci/examples/features/concurrency/simple/0000750005473000001440000000000012275260547021157 5ustar d3n000usersga-5-3/armci/examples/features/concurrency/simple/comdegree.c0000640005473000001440000002605711643645222023263 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** Copyright (c) 2006 * Pacific Northwest National Laboratory, * Battelle Memorial Institute. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: - Redistributions of source code must retain the above * copyright notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the Battelle nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * $Id: comdegree.c,v 1.1.2.1 2007-06-20 17:41:49 vinod Exp $ * * This test checks the networks ability to overlap data transfers. * It does it both for an optimitic case (with no other communication) and * a more realistic case. * --Vinod Tipparaju * --Pacific Northwest National Laboratory * --vinod@pnl.gov */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_ASSERT_H # include #endif #define DEBUG__ #include "armci.h" #include "message.h" /***************************** macros ************************/ #define COPY(src, dst, bytes) memcpy((dst),(src),(bytes)) #define ARMCI_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define ARMCI_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define ARMCI_ABS(a) (((a) <0) ? -(a) : (a)) /***************************** global data *******************/ int me, nproc; void create_array(void *a[], int size) { armci_size_t bytes=size; int rc; rc = ARMCI_Malloc(a, bytes); assert(rc==0); #ifdef DEBUG_ printf("%d after malloc ndim=%d b=%d ptr=%p\n",me,ndim,(int) bytes,a[me]); fflush(stdout); #endif assert(a[me]); bzero(a[me],bytes); } void destroy_array(void *ptr[]) { armci_msg_barrier(); assert(!ARMCI_Free(ptr[me])); } #define LCC 13 #define MAXPROC 128 void test_get_multidma() { int i,j; void *b[MAXPROC], *a[MAXPROC]; int left = (me+nproc-1) % nproc; int right = (me+1) % nproc; /*int sendersright=0,sendersleft=0;*/ int loopcnt=10, itercount=5; double tt/*, t0[LCC]*/,t1[LCC],t2[LCC],t3[LCC]; armci_hdl_t hdl1,hdl2; for(i=0;i #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STDARG_H # include #endif #ifdef WINDOWS_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_TIME_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_TIME_H # include #endif #if HAVE_ASSERT_H # include #endif #include #include "armci.h" #include "message.h" #define NDEBUG /*#define LOG2FILE*/ typedef int t_elem; /* type of an array element */ #define SIZE_ELEM sizeof(t_elem) /* # of simultaneous message for phase A*/ #define SML_MSGS (size < 9 ? size - 1 : 8) #define MIN_MSG_SIZE 8 #define MAX_MSG_SIZE (1024 * 1024) #define MSG_COUNT 20 static inline void ARMCI_ASSERT(int error_code) { if (error_code) { fprintf(stderr, "ARMCI error %d\n", error_code); pause(); ARMCI_Cleanup(); MPI_Abort(MPI_COMM_WORLD, error_code); } } #define FIX_TIME(t) if (t < 0.0) t = 0.0; int size, rank, second; #define ITERS 18 #define ITER_STEPS 20 double iterations_times[ITERS]; int iterations[ITERS]; int *p_srcs, *p_dsts; enum {CONT_PUT, CONT_GET, STRIDED_PUT, STRIDED_GET, STRIDED_ACC, VECTOR_PUT, VECTOR_GET, VECTOR_ACC}; #define OPS_COUNT (STRIDED_ACC + 1) #define NON_CONT(op) (op > CONT_GET) enum {NOWORK, TOTAL, OVERLAP}; #define STATS_COUNT (OVERLAP + 1) /* prints formatted numbered message with processor's rank */ int log_debug(const char *fmt, ...) { int r = 0; #ifndef NDEBUG static int log_counter = 1; va_list ap; va_start(ap, fmt); printf("%03d@%1d: ", log_counter++, rank); r = vprintf(fmt, ap); va_end(ap); #endif return r; } FILE *log_file = NULL; void start_logging(const char *fname) { #ifdef LOG2FILE char exe_name[255]; char log_path[255]; int i; char k; strcpy(exe_name, fname); if (exe_name[strlen(exe_name) - 2] == '.') /* remove .x */ exe_name[strlen(exe_name) - 2] = 0; if (exe_name[0] == '/') { /* full path given */ for (i = ((int)strlen(exe_name)) - 1, k = -1; i >= 0; i--) if (exe_name[i] == '/') { if (k == -1) k = i + 1; else { exe_name[i] = 0; break; } } log_debug("exe: path=%s, name=%s\n", exe_name, exe_name + k); sprintf(log_path, "%s/data/%s.dat", exe_name, exe_name + k); } else { /* only executable name */ sprintf(log_path, "../data/%s.dat", exe_name); } log_debug("log: %s\n", log_path); log_file = fopen(log_path, "w"); if (!log_file) { perror("cannot open log file"); abort(); } #else log_file = stderr; #endif } void finish_logging() { fclose(log_file); } /* prints formatted message to ../data/.dat */ int log_printf(const char *fmt, ...) { int r; va_list ap; va_start(ap, fmt); if (log_file) r = vfprintf(log_file, fmt, ap); else { fprintf(stderr, "warning: logging is not enabled for this process\n"); r = vfprintf(stderr, fmt, ap); } va_end(ap); return r; } struct stats { int size; /* size, including trailing space for arrays */ double put; double get; double *nb_put_a; double *nb_get_a; double *nb_put_b; double *nb_get_b; }; void benchmark(int msg_size, struct stats *st) { void **out_ptrs, **in_ptrs; double time_start, time_after_start, time_after_call, time_after_wait; double time2put, time2get; int i, j; armci_hdl_t handle; out_ptrs = malloc(sizeof(void*)*size); in_ptrs = malloc(sizeof(void*)*size); log_debug("testing message size %d bytes\n", msg_size); log_debug("barrier A\n"); armci_msg_barrier(); /* allocate buffers */ ARMCI_ASSERT(ARMCI_Malloc(out_ptrs, msg_size)); ARMCI_ASSERT(ARMCI_Malloc(in_ptrs, msg_size)); for (i = 0; i < msg_size; i++) { ((char *)out_ptrs[rank])[i] = (char)(rand() >> 24); ((char *)in_ptrs[rank])[i] = (char)(rand() >> 24); } /* warmup call */ log_debug("barrier B\n"); ARMCI_Barrier(); ARMCI_ASSERT(ARMCI_Put(in_ptrs[rank], out_ptrs[second], msg_size, second)); log_debug("barrier C: warmed up\n"); ARMCI_Barrier(); /* phase A */ if (!rank) { /* measure blocking Put 0 -> 1 */ time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_Put(out_ptrs[0], in_ptrs[1], msg_size, 1)); time_after_call = armci_timer(); time2put = time_after_call - time_after_start + time_start - time_after_start; log_debug("PutA(%d bytes) 0 -> 1: %.8f\n", msg_size, time2put); st->put = time2put; } log_debug("barrier D\n"); ARMCI_Barrier(); if (!rank) { /* measure blocking Get 0 <- 1 */ time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_Get(out_ptrs[1], in_ptrs[0], msg_size, 1)); time_after_call = armci_timer(); time2get = time_after_call - time_after_start + time_start - time_after_start; log_debug("GetA(%d bytes) 0 <- 1: %.8f\n", msg_size, time2get); st->get = time2get; } for (i = 1; i <= SML_MSGS; i++) { log_debug("barrier E\n"); ARMCI_Barrier(); if (!rank) { /* put i messages to procs 0..i-1 */ time_start = armci_timer(); time_after_start = armci_timer(); for (j = 1; j <= i; j++) ARMCI_ASSERT(ARMCI_NbPut(out_ptrs[0], in_ptrs[j], msg_size, j, NULL)); ARMCI_WaitAll(); time_after_wait = armci_timer(); time2put = time_after_wait - time_after_start + time_start - time_after_start; log_debug("NbPutA(%d bytes) 0 -> 1..%d: %.8f\n", msg_size, i, time2put); st->nb_put_a[i - 1] = time2put; } } for (i = 1; i <= SML_MSGS; i++) { log_debug("barrier F\n"); ARMCI_Barrier(); if (!rank) { /* get i messages from procs 0..i-1 */ time_start = armci_timer(); time_after_start = armci_timer(); for (j = 1; j <= i; j++) ARMCI_ASSERT(ARMCI_NbGet(out_ptrs[j], in_ptrs[0], msg_size, j, NULL)); ARMCI_WaitAll(); time_after_wait = armci_timer(); time2get = time_after_wait - time_after_start + time_start - time_after_start; log_debug("NbGetA(%d bytes) 0 <- 1..%d: %.8f\n", msg_size, i, time2get); st->nb_get_a[i - 1] = time2get; } } /* phase B */ log_debug("barrier G\n"); ARMCI_Barrier(); ARMCI_INIT_HANDLE(&handle); time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbPut(out_ptrs[rank], in_ptrs[second], msg_size, second, &handle)); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); time2put = time_after_wait - time_after_start + time_start - time_after_start; log_debug("NbPutB(%d bytes) %d -> %d: %.8f\n", msg_size, rank, second, time2put); st->nb_put_b[rank] = time2put; log_debug("barrier H\n"); ARMCI_Barrier(); ARMCI_INIT_HANDLE(&handle); time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbGet(out_ptrs[second], in_ptrs[rank], msg_size, second, &handle)); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); time2get = time_after_wait - time_after_start + time_start - time_after_start; log_debug("NbGetB(%d bytes) %d <- %d: %.8f\n", msg_size, rank, second, time2get); st->nb_get_b[rank] = time2get; log_debug("barrier I\n"); ARMCI_Barrier(); log_debug("finished benchmarking\n"); /* clean up */ ARMCI_Free(out_ptrs[rank]); ARMCI_Free(in_ptrs[rank]); free(out_ptrs); free(in_ptrs); } int main (int argc, char *argv[]) { int i, j, l; char buf[255]; int dist, pos, time_seed; struct stats *st; #ifdef USE_EXP2 int msg_sizes[MSG_COUNT]; #else int msg_sizes[] = {8, 16, 28, 52, 96, 180, 332, 616, 1144, 2124, 3952, 7344, 13652, 25384, 47196, 87748, 163144, 303332, 563972, 1048576}; #endif armci_msg_init(&argc, &argv); rank = armci_msg_me(); size = armci_msg_nproc(); assert((size & 1) ^ 1); /* works with even number of processors only */ log_debug("Message passing initialized\n"); if (!rank) start_logging(argv[0]); ARMCI_ASSERT(ARMCI_Init()); log_debug("ARMCI initialized\n"); /* inialize PRNG, use seed generated on processor 0 for uniform sequence */ time_seed = time(NULL); MPI_Bcast(&time_seed, 1, MPI_INT, 0, MPI_COMM_WORLD); srand(time_seed); rand(); log_debug("seed: %d\n", time_seed); /* generate random pairs of processors */ #define HALFSIZE (size / 2) assert(p_srcs = malloc(sizeof(int) * size)); for (i = 0; i < size; i++) p_srcs[i] = -1; p_dsts = p_srcs + HALFSIZE; for (i = 0, j = size - 1, pos = 0; i < size; i++, j--) { dist = round((double)rand() * j / RAND_MAX + 1); /* random 1..j */ for (l = 0; l < dist; ) { pos = (pos + 1 == size) ? 0 : pos + 1; if ((p_srcs[pos] == -1) && (pos != i)) l++; } p_srcs[pos] = i; } for (i = 0, j = 0; i < HALFSIZE; i++) j += sprintf(buf + j, " %d->%d", p_srcs[i], p_dsts[i]); log_debug("random pairs:%s\n", buf); /* determines a pair/second for current processor */ for (i = 0; i < HALFSIZE; i++) { if (p_srcs[i] == rank) second = p_dsts[i]; if (p_dsts[i] == rank) second = p_srcs[i]; } log_debug("second: %d\n", second); /* allocate memory tatistics */ l = sizeof(struct stats) + 2 * sizeof(double) * (size + SML_MSGS); assert(st = malloc(l)); st->size = l; st->nb_put_a = (double *)(((char *)st) + sizeof(struct stats)); st->nb_get_a = st->nb_put_a + SML_MSGS; st->nb_put_b = st->nb_get_a + SML_MSGS; st->nb_get_b = st->nb_put_b + size; for (i = 0; i < MSG_COUNT; i++) { benchmark(msg_sizes[i], st); if (rank != 0) { MPI_Gather(st->nb_put_b + rank, 1, MPI_DOUBLE, st->nb_put_b, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Gather(st->nb_get_b + rank, 1, MPI_DOUBLE, st->nb_get_b, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); } if (!rank) { double min_put, max_put, mean_put; double min_get, max_get, mean_get; log_printf("msg_size = %d:\n", msg_sizes[i]); log_printf("Put = %.8f Get = %.8f\n", st->put, st->get); for (j = 0; j < SML_MSGS; j++) log_printf("NbPutA(0 -> 1..%d) = %.8f\n", j + 1, st->nb_put_a[j]); for (j = 0; j < SML_MSGS; j++) log_printf("NbGetA(0 -> 1..%d) = %.8f\n", j + 1, st->nb_get_a[j]); /* determine min, max and mean for phase B */ min_put = max_put = mean_put = st->nb_put_b[0]; min_get = max_get = mean_get = st->nb_get_b[0]; for (j = 1; j < size; j++) { if (min_put > st->nb_put_b[j]) min_put = st->nb_put_b[j]; if (max_put < st->nb_put_b[j]) max_put = st->nb_put_b[j]; mean_put += st->nb_put_b[j]; if (min_get > st->nb_get_b[j]) min_get = st->nb_get_b[j]; if (max_get < st->nb_get_b[j]) max_get = st->nb_get_b[j]; mean_get += st->nb_get_b[j]; } mean_put /= size; mean_get /= size; log_printf("NbPutB min = %.8f max = %.8f mean = %.8f\n", min_put, max_put, mean_put); log_printf("NbGetB min = %.8f max = %.8f mean = %.8f\n", min_get, max_get, mean_get); log_printf("\n"); } } /* clean up */ ARMCI_Finalize(); armci_msg_finalize(); free(st); free(p_srcs); if (!rank) finish_logging(); return 0; } ga-5-3/armci/examples/features/gpc/0000750005473000001440000000000012275260547016105 5ustar d3n000usersga-5-3/armci/examples/features/gpc/hashtable/0000750005473000001440000000000012275260547020040 5ustar d3n000usersga-5-3/armci/examples/features/gpc/hashtable/Util.h0000640005473000001440000000077411334614071021125 0ustar d3n000users#ifndef UTIL_H #define UTIL_H #include using std::string; #include "Hash_common.h" extern int armci_hashmap_pack(char *buf, string str); extern int armci_hashmap_unpack(const char *buf, string& str); extern void armci_hashmap_insert(VocabIntMap *vocabMap, const char *buf, size_t bufsize); extern void armci_hashmap_insert2(VocabIntMap *vocabMap, const char *buf, size_t bufsize, int *globalTermIds, int op); #endif /* UTIL_H */ ga-5-3/armci/examples/features/gpc/hashtable/README0000640005473000001440000000004211423627743020714 0ustar d3n000users:Author: Manojkumar Krishnan PNNL ga-5-3/armci/examples/features/gpc/hashtable/DistHashmap.cc0000640005473000001440000002471711021606625022555 0ustar d3n000users/* $Id: DistHashmap.cc,v 1.1.2.1 2007-06-20 17:41:53 vinod Exp $ */ /* * AUTHOR: Manojkumar Krishnan, PNNL */ #include #include #include #include using std::cout; using std::endl; #define DEBUG 0 #ifdef WIN32 # include # define sleep(x) Sleep(1000*(x)) #else # include #endif #include "armci.h" #include "message.h" #define ARMCI_ENABLE_GPC_CALLS #include "gpc.h" #include "Hash_common.h" #include "DistHashmap.h" #include "Util.h" #define BUF_LIMIT 8192 // in bytes. Make sure this value can fit in an // integer variable extern int gpc_disthashmap_handler(int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, int *rhsize, void *rdata, int rdlen, int *rdsize, int rtype); extern void gpc_disthashmap_exec(int hash_op, char *buf, size_t bufsize, int proc, int gpc_handle); extern void gpc_disthashmap_exec_nb(int hash_op, char *buf, size_t bufsize, int proc, int gpc_handle, gpc_hdl_t *nbh); extern void gpc_disthashmap_exec_wait(gpc_hdl_t *nbh); extern int armci_master; short int DistHashmap::sm_initialized=0; DistHashmap::DistHashmap() : mGPCHandle(0), mGlobalIdMap(NULL), m_globalHashMapSize(0) { MP_MYID(&m_me); int nproc; MP_PROCS(&nproc); mIndex = new int[nproc]; for(int i=0; idestroy(); delete[] mIndex; int nproc; MP_PROCS(&nproc); for(int i=0; i BUF_LIMIT) ARMCI_Error("String length is greater than internal buffer. Increase BUF_LIMIT", 0); // if the buffer is full, trigger an insert into the GPC hashmap if(mIndex[dst_proc] + str.length() + padding > BUF_LIMIT) this->commit(dst_proc); // initalize the "number of strings" field in the buffer int *numstrings = (int*)mBuf[dst_proc]; if(mIndex[dst_proc] == 0) { *numstrings = 0; mIndex[dst_proc] += sizeof(int); } (*numstrings)++; // insert into the internal buffer int index = mIndex[dst_proc]; mIndex[dst_proc] += armci_hashmap_pack(&mBuf[dst_proc][index], str); } /** * Call commit() to complete the data insertion into the distributed hashmap * for consistency purposes. This is a collective call. */ void DistHashmap::commit() { int nproc; MP_PROCS(&nproc); for(int i=0; icommit(i); this->rehash(); } /** * Call commit() to complete the data insertion into the distributed hashmap * for consistency purposes (of a specified process). */ void DistHashmap::commit(int proc) { // complete the hashmap insertion if the buffer still has data if(mIndex[proc] > 0) { char *buf = &mBuf[proc][0]; int bufsize = mIndex[proc]; # if DEBUG printf("%d: Commit() to %d: numstrings=%d bufsize=%d\n", m_me, proc, *((int*)buf), bufsize);fflush(stdout); # endif memcpy(mTmpBuf, (const char*)buf, (size_t)bufsize); int tmpBufsize = bufsize; // insert into the distributed hashmap gpc_disthashmap_exec(HASHMAP_INSERT, buf, bufsize, proc, mGPCHandle); mIndex[proc] = 0; // verify the returned data if( *((int*)buf) != *((int*)mTmpBuf) ) ARMCI_Error("DistHashmap::commit() failed", 0); // i.e. save the global ids in the locally cached hashmap (mGlobalIdMap) int *globalTermIds = (int*) (buf + sizeof(int)); armci_hashmap_insert2(mGlobalIdMap, (const char*)mTmpBuf, tmpBufsize, globalTermIds, HASHMAP_INSERT); } } /** * This is a collective call to rehash the distributed hashmap */ void DistHashmap::rehash() { int nclus = armci_domain_count(ARMCI_DOMAIN_SMP); int clus_me = armci_domain_my_id(ARMCI_DOMAIN_SMP); // no need to rehash if #of clusters is <= 1 if(nclus <=1) { m_globalHashMapSize = mGlobalIdMap->size(); return; } // no GPC support for single node multiple processes if(nclus == 1) { int nproc; MP_PROCS(&nproc); if(nproc > 1) ARMCI_Error("DistHashmap::rehash(): no GPC support for single node multiple processes", 0); } int size=0; int *globalHashOffset = new int[nclus]; int *offsetMap = new int[nclus]; if(globalHashOffset == NULL || offsetMap == NULL) ARMCI_Error("DistHashmap::rehash() new alloc failed", 0); for(int i=0; ibegin(); iter!=mGlobalIdMap->end(); iter++) { termStr = (*iter).first; int nproc; MP_PROCS(&nproc); int dst_proc = armci_djb2_hash((unsigned char*)termStr.c_str(), nproc); int dst_clus = armci_domain_id(ARMCI_DOMAIN_SMP, dst_proc); (*iter).second += offsetMap[dst_clus]; } delete[] offsetMap; delete[] globalHashOffset; } /** * to check if a distributed hashmap exists * This is a local call */ bool DistHashmap::isCreated() { if (sm_initialized >0) return true; return false; } /** * This is a collective call */ void DistHashmap::print() { MP_BARRIER(); /* SMP master process destroys the hashmap */ if(m_me == armci_master) { gpc_disthashmap_exec(HASHMAP_PRINT, NULL, 0, m_me, mGPCHandle); } MP_BARRIER(); } /** * This is a local call */ void DistHashmap::print2() { printf("%d: Locally cached Hashmap[%d:%ld]\n", m_me, 1, mGlobalIdMap->size()); VocabIntMap::const_iterator iter; for(iter=mGlobalIdMap->begin(); iter != mGlobalIdMap->end(); iter++) { cout << iter->second << "\t: " << iter->first << endl; } cout << endl; } const VocabIntMap * DistHashmap:: getLocalMapPtr() { return mGlobalIdMap; } int DistHashmap:: getGlobalHashMapSize() { return m_globalHashMapSize; } /* TODO: 1. put the gpc exec functions in GPCHashmapHandler.cc as private methods in this class 2. for better performance, use ARMCI_Malloc instead of new for data transfer GPC buffers */ ga-5-3/armci/examples/features/gpc/hashtable/test_hashtable.cc0000640005473000001440000000341111364357531023337 0ustar d3n000users/* $Id: */ #include #include #include #include using namespace std; #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include # define sleep(x) Sleep(1000*(x)) #endif #include "mp3.h" #include "armci.h" #define ARMCI_ENABLE_GPC_CALLS #include "gpc.h" #include "Hash_common.h" #include "DistHashmap.h" int me, nproc; void test_distHashmap() { ifstream infile("sample.txt"); string str; // create a distributed hashmap if(me==0) { printf("Creating a distributed hashmap\n"); fflush(stdout);} DistHashmap *dist_hashmap = new DistHashmap(); dist_hashmap->create(); if(me==0) { printf("Distributed hashmap created. O.K.\n"); fflush(stdout);} // reads a word from the file and inserts it into the hashmap while(!infile.eof()) { infile >> str; dist_hashmap->insert(str); // if(me==0) { printf("%s\n", str.c_str()); fflush(stdout);} } dist_hashmap->commit(); dist_hashmap->print(); fflush(stdout); MP_BARRIER(); dist_hashmap->print2(); fflush(stdout); MP_BARRIER(); // delete the distributed hashmap dist_hashmap->destroy(); if(me==0) { printf("Distributed hashmap deleted. O.K.\n"); fflush(stdout);} infile.close(); } int main(int argc, char* argv[]) { MP_INIT(argc, argv); MP_PROCS(&nproc); MP_MYID(&me); if(me==0){ printf("ARMCI Distributed Hashmap test program (%d processes)\n",nproc); fflush(stdout); sleep(1); } ARMCI_Init(); if(me==0){ printf("\nDistributed Hashmap using ARMCI's GPC calls\n"); fflush(stdout); } MP_BARRIER(); test_distHashmap(); ARMCI_AllFence(); MP_BARRIER(); ARMCI_Finalize(); MP_FINALIZE(); return(0); } ga-5-3/armci/examples/features/gpc/hashtable/HashFunctions.cc0000640005473000001440000001216510636263374023131 0ustar d3n000users/* $Id: */ #include #include #include /************************************************************ * Possible Hash Functions (using google search) * Hash Functions: As mentioned briefly in the previous section, there are multiple ways for constructing a hash function. Remember that hash function takes the data as input (often a string), and return s an integer in the range of possible indices into the hash table. Every hash function must do that, including the bad ones. So what makes for a good hash function? Characteristics of a Good Hash Function: There are four main characteristics of a good hash function: 1) The hash value is fully determined by the data being hashed. 2) The hash function uses all the input data. 3) The hash function "uniformly" distributes the data across the entire set of possible hash values. 4) The hash function generates very different hash values for similar strings. Let's examine why each of these is important: Rule 1: If something else besides the input data is used to determine the hash, then the hash value is not as dependent upon the input data, thus allowing for a worse distribution of the hash values. Rule 2: If the hash function doesn't use all the input data, then slight variations to the input data would cause an inappropriate number of similar hash values resulting in too many collisions. Rule 3: If the hash function does not uniformly distribute the data across the entire set of possible hash values, a large number of collisions will result, cutting down on the efficiency of the hash table. Rule 4: In real world applications, many data sets contain very similar data elements. We would like these data elements to still be distributable over a hash table. So let's take as an example the hash function used in the last section: */ int armci_hash(char *str, int table_size) { int sum; // Make sure a valid string passed in if (str==NULL) return -1; // Sum up all the characters in the string for( ; *str; str++) sum += *str; // Return the sum mod the table size return sum % table_size; } /* Which rules does it break and satisfy? Rule 1: Satisfies. The hash value is fully determined by the data being hashed. The hash value is just the sum of all the input characters. Rule 2: Satisfies. Every character is summed. Rule 3: Breaks. From looking at it, it isn't obvious that it doesn't uniformly distribute the strings, but if you were to analyze this function for a large input you would see certain statistical properties bad for a hash function. Rule 4: Breaks. Hash the string "bog". Now hash the string "gob". They're the same. Slight variations in the string should result in different hash values, but with this function they often don't. So this hash function isn't so good. It's a good introductory example but not so good in the long run. There are many possible ways to construct a better hash function (doing a web search will turn up hundreds) so we won't cover too many here except to present a few decent examples of hash functions: */ /* Peter Weinberger's */ int armci_hashpjw(char *s) { char *p; unsigned int h, g; h = 0; for(p=s; *p!='\0'; p++){ h = (h<<4) + *p; if (g = h&0xF0000000) { h ^= g>>24; h ^= g; } } return h % 211; } /* UNIX ELF hash * Published hash algorithm used in the UNIX ELF format for object files */ unsigned long armci_elf_hash(char *name) { unsigned long h = 0, g; while ( *name ) { h = ( h << 4 ) + *name++; if ( g = h & 0xF0000000 ) h ^= g >> 24; h &= ~g; } return h; } /* This algorithm was created for the sdbm (a reimplementation of ndbm) * database library and seems to work relatively well in scrambling bits */ unsigned long armci_sdbm_hash(unsigned char *str) { unsigned long hash = 0; int c; while (c = *str++) hash = c + (hash << 6) + (hash << 16) - hash; return hash; } /* djb2: * This algorithm was first reported by Dan Bernstein * many years ago in comp.lang.c */ unsigned long armci_djb2_hash(unsigned char *str, int total_procs) { unsigned long hash = 5381; int c; /** * Modified by Manoj: * while (c = *str++) hash = ((hash << 5) + hash) + c; */ while (c = *str++) hash = (((hash << 5) + hash) + c) % total_procs; return hash; } char armci_XORhash( char *key, int len) { char hash; int i; for (hash=0, i=0; i #ifndef STL_HASHMAP_NAMESPACE # define STL_HASHMAP_NAMESPACE __gnu_cxx #endif ga-5-3/armci/examples/features/gpc/hashtable/Hash_common.h0000640005473000001440000000167511643645222022451 0ustar d3n000users/* $Id: */ #ifndef HASH_COMMON_H #define HASH_COMMON_H #define HASHMAP_CREATE 101 #define HASHMAP_DESTROY 102 #define HASHMAP_INSERT 103 #define HASHMAP_PRINT 104 #define HASHMAP_GET 105 #define HASHMAP_REHASH 106 typedef struct hash_hdr { int hash_op; void*buf; size_t bufsize; }hash_hdr_t; #include using std::string; /* #include "UnicodeString.h" */ #define USE_MAP #ifdef USE_MAP # include typedef std::map VocabIntMap; #else /* USE_MAP */ # include "hash_map.h" using STL_HASHMAP_NAMESPACE::hash_map; using STL_HASHMAP_NAMESPACE::hash; struct hashStr { size_t operator()(const string& str) const { hash H; return H(str.c_str()); } }; typedef hash_map VocabIntMap; #endif /* USE_MAP */ extern unsigned long armci_djb2_hash(unsigned char *str, int total_procs); #endif /* HASH_COMMON_H */ ga-5-3/armci/examples/features/gpc/hashtable/GPCHashmapHandler.cc0000640005473000001440000000770310636263374023570 0ustar d3n000users/* $Id: */ #include #define DEBUG 0 #ifdef WIN32 # include # define sleep(x) Sleep(1000*(x)) #else # include #endif #include "armci.h" #define ARMCI_ENABLE_GPC_CALLS #include "gpc.h" #include "Hash_common.h" #include "GPCHashmap.h" static GPCHashmap *gGPCHashmap=NULL; #if DEBUG char* g_GPCops[6] = {"HASHMAP_CREATE", "HASHMAP_DESTROY", "HASHMAP_INSERT", "HASHMAP_PRINT", "HASHMAP_GET", "HASHMAP_REHASH"}; #endif int gpc_disthashmap_handler(int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, int *rhsize, void *rdata, int rdlen, int *rdsize, int rtype) { hash_hdr_t *lhdr; int rank; MP_MYID(&rank); lhdr = (hash_hdr_t*)ARMCI_Gpc_translate(hdr,to,from); const char *buf = (const char*)data; size_t bufsize = dlen; int hash_op = lhdr->hash_op; // for correctness ? *rhsize = sizeof(int); *rdsize = sizeof(int); #if DEBUG int me; MP_MYID(&me); printf("%d: In GPC handler: %s from=%d to=%d\n", me, g_GPCops[hash_op-HASHMAP_CREATE], from, to); fflush(stdout); #endif switch(hash_op) { case HASHMAP_CREATE: gGPCHashmap = new GPCHashmap(); gGPCHashmap->create(); break; case HASHMAP_DESTROY: gGPCHashmap->destroy(); if(gGPCHashmap != NULL) delete gGPCHashmap; break; case HASHMAP_INSERT: gGPCHashmap->insert(buf, bufsize); // piggy-back the globalIds gGPCHashmap->getGlobalIds(buf, bufsize, (int*)rdata); break; case HASHMAP_PRINT: gGPCHashmap->print(); break; case HASHMAP_REHASH: *rdsize = sizeof(int); gGPCHashmap->rehash((int*)rdata); break; default: ARMCI_Error("gpc_disthashmap_handler(): Invalid hashmap operation",0); } return GPC_DONE; } void gpc_disthashmap_exec_nb(int hash_op, char *buf, size_t bufsize, int proc, int gpc_handle, gpc_hdl_t *nbh) { int hlen; hash_hdr_t header; int rheader; #if DEBUG int me; MP_MYID(&me); printf("%d: Executing GPC: (%s) buf=%p bufsize=%ld proc=%d\n", me, g_GPCops[hash_op-HASHMAP_CREATE], buf, bufsize, proc); fflush(stdout); #endif header.hash_op = hash_op; header.buf = buf; header.bufsize = bufsize; hlen=sizeof(header); if(nbh!= NULL) ARMCI_Gpc_init_handle(nbh); #if 0 if(ARMCI_Gpc_exec(gpc_handle, proc, &header, hlen, buf, bufsize, &rheader, sizeof(int), &rdata, sizeof(int), nbh)) ARMCI_Error("gpc_disthashmap_exec_nb(): ARMCI_Gpc_exec failed", 0); #endif if(ARMCI_Gpc_exec(gpc_handle, proc, &header, hlen, buf, bufsize, &rheader, sizeof(int), buf, bufsize, nbh)) ARMCI_Error("gpc_disthashmap_exec_nb(): ARMCI_Gpc_exec failed", 0); } void gpc_disthashmap_exec_wait(gpc_hdl_t *nbh) { if(nbh!= NULL) ARMCI_Gpc_wait(nbh); } void gpc_disthashmap_exec(int hash_op, char *buf, size_t bufsize, int proc, int gpc_handle) { #if NON_BLOCKING // non blocking GPC is flaky gpc_hdl_t nbh; gpc_disthashmap_exec_nb(hash_op, buf, bufsize, proc, gpc_handle, &nbh); gpc_disthashmap_exec_wait(&nbh); #else gpc_disthashmap_exec_nb(hash_op, buf, bufsize, proc, gpc_handle, NULL); gpc_disthashmap_exec_wait(NULL); #endif /* int hlen; hash_hdr_t header; int rheader, rdata; header.hash_op = hash_op; header.buf = buf; header.bufsize = bufsize; hlen=sizeof(header); ARMCI_Gpc_init_handle(&nbh); if(ARMCI_Gpc_exec(gpc_handle, proc, &header, hlen, buf, bufsize, &rheader, sizeof(int), &rdata, sizeof(int), &nbh)) ARMCI_Error("gpc_disthashmap_exec(): ARMCI_Gpc_exec failed", 0); ARMCI_Gpc_wait(&nbh); */ } ga-5-3/armci/examples/features/gpc/hashtable/HashUtil.cc0000640005473000001440000000643410636263374022100 0ustar d3n000users #include #include "Util.h" #include "armci.h" int armci_hashmap_pack(char *buf, string str) { int len = str.length(); // first copy the length of the string *((int*)buf) = len; // then copy the actual string int index = sizeof(int); char *dst = &buf[index]; strcpy(dst, str.c_str()); index += len; // offset "index" to integer-byte boundary int adjust = sizeof(int) - (index % sizeof(int)); index += adjust; return (int)index; } int armci_hashmap_unpack(const char *buf, string& str) { // first get the string length and the corresponding string int len = *((int*)buf); // then get the actual term string int index = sizeof(int); string termStr(&buf[index], len); str = termStr; index += len; // offset "index" to integer-byte boundary int adjust = sizeof(int) - (index % sizeof(int)); index += adjust; return (int)index; } void armci_hashmap_insert(VocabIntMap *vocabMap, const char *buf, size_t bufsize) { string termStr; size_t index=0; // get the number of strings to be inserted (i.e.first field in the // buffer) and increment the index accordingly. int numstrings = *((int*)buf); index += sizeof(int); #if DEBUG int me; MP_MYID(&me); printf("%d: armci_hashmap_insert(): numstrings=%d bufsize=%ld\n", me, numstrings, bufsize); fflush(stdout); #endif // unpack the buffer for(int i=0; i bufsize) ARMCI_Error("GPCHashmap::insert() failed. Buffer overflow.", 0); // add the term to the hashmap VocabIntMap::const_iterator iter = vocabMap->find(termStr); int termID = -1; if (iter != vocabMap->end()) { // term already in map termID = (*iter).second; } else { // new term. Add to vocab hashmap termID = vocabMap->size(); // starts with zero (*vocabMap)[termStr] = termID; } } } void armci_hashmap_insert2(VocabIntMap *vocabMap, const char *buf, size_t bufsize, int *globalTermIds, int op) { string termStr; size_t index=0; // get the number of strings to be inserted (i.e.first field in the // buffer) and increment the index accordingly. int numstrings = *((int*)buf); index += sizeof(int); // unpack the buffer for(int i=0; i bufsize) ARMCI_Error("armci_hashmap_insert2() failed. Buffer overflow.", 0); if(op==HASHMAP_INSERT) { // insert the term to the hashmap (*vocabMap)[termStr] = globalTermIds[i]; } else if(op==HASHMAP_GET){ // retrieve a term's global id from hashmap globalTermIds[i] = (*vocabMap)[termStr]; } else { ARMCI_Error("armci_hashmap_insert2() Invalid operation", 0); } } } ga-5-3/armci/examples/features/gpc/hashtable/GPCHashmap.h0000640005473000001440000000210011334614071022104 0ustar d3n000users/* $Id: */ #ifndef GPCHASHMAP_H_ #define GPCHASHMAP_H_ #include using std::string; #include "Hash_common.h" class GPCHashmap { public: /** * Constructor */ GPCHashmap(); /** * Default Destructor */ ~GPCHashmap(); /** * creates a new hashmap (local) */ void create(); /** * destroys this hashmap */ void destroy(); /** * inserts elements into hashmap */ void insert(const char *buf, size_t size); /** * get the global term IDs */ void getGlobalIds(const char *buf, size_t bufsize, int *globalTermIds); /** * prints the local hashmap */ void print(); void rehash(int *size); /** * returns true if a hashmap already exists */ static bool isCreated(); private: VocabIntMap *mVocabMap; static short int sm_initialized; }; #endif /* GPCHASHMAP_H_ */ ga-5-3/armci/examples/features/gpc/hashtable/GPCHashmap.cc0000640005473000001440000000527710636263374022276 0ustar d3n000users/* $Id: */ #include #include #include #include using std::string; using std::cout; using std::endl; #define DEBUG 0 #ifdef WIN32 # include # define sleep(x) Sleep(1000*(x)) #else # include #endif #include "armci.h" #define ARMCI_ENABLE_GPC_CALLS #include "gpc.h" /***************************** macros ************************/ extern "C" { # if defined(__ia64) # if defined(__GNUC__) && !defined (__INTEL_COMPILER) # define MEM_FENCE __asm__ __volatile__ ("mf" ::: "memory"); # else /* Intel Compiler */ extern void _armci_ia64_mb(); # define MEM_FENCE _armci_ia64_mb(); # endif # endif } #include "Hash_common.h" #include "GPCHashmap.h" #include "Util.h" short int GPCHashmap::sm_initialized=0; GPCHashmap::GPCHashmap() : mVocabMap(NULL) { } GPCHashmap::~GPCHashmap() { if(sm_initialized != 0) this->destroy(); } void GPCHashmap::create() { if(sm_initialized != 0) { ARMCI_Error("GPCHashmap::create(): Hashmap already exists. At a given time, only one distributed hashmap should exist. Multiple distributed hashmaps not yet supported", 0); } mVocabMap = new VocabIntMap(); sm_initialized=1; } void GPCHashmap::destroy() { if (mVocabMap != NULL) delete mVocabMap; sm_initialized=0; } /** * buf - character array * size - size of strlen array */ void GPCHashmap::insert(const char *buf, size_t bufsize) { armci_hashmap_insert(mVocabMap, buf, bufsize); #ifdef MEM_FENCE MEM_FENCE; #else ARMCI_Error("gpc_insert_handler: MEM_FENCE not defined", 0); #endif } /** * get the global term IDs */ void GPCHashmap::getGlobalIds(const char *buf, size_t bufsize, int *globalTermIds) { globalTermIds[0] = *((int*)buf); armci_hashmap_insert2(mVocabMap, buf, bufsize, &globalTermIds[1], HASHMAP_GET); #ifdef MEM_FENCE MEM_FENCE; #else ARMCI_Error("gpc_insert_handler: MEM_FENCE not defined", 0); #endif } /** * prints the hashmap in this server process */ void GPCHashmap::print() { int me; MP_MYID(&me); printf("%d: Hashmap[%d:%ld]\n", me, 1, mVocabMap->size()); VocabIntMap::const_iterator iter; for(iter=mVocabMap->begin(); iter != mVocabMap->end(); iter++) { cout << iter->second << "\t: " << iter->first << endl; } cout << endl; } // to check if a hashmap exists void GPCHashmap::rehash(int *size) { *size = (int) mVocabMap->size(); #ifdef MEM_FENCE MEM_FENCE; #else ARMCI_Error("gpc_insert_handler: MEM_FENCE not defined", 0); #endif } // to check if a hashmap exists bool GPCHashmap::isCreated() { if (sm_initialized >0) return true; return false; } ga-5-3/armci/examples/features/gpc/hashtable/DistHashmap.h0000640005473000001440000000421511334614071022407 0ustar d3n000users/* $Id: */ #ifndef DISTHASHMAP_H_ #define DISTHASHMAP_H_ #include using std::string; #define ARMCI_ENABLE_GPC_CALLS #include "gpc.h" #include "Hash_common.h" class DistHashmap { public: /** * Constructor */ DistHashmap(); /** * Default Destructor */ ~DistHashmap(); /** * creates a new distributed hashmap */ void create(); /** * destroys this distributed hashmap */ void destroy(); /** * str - string to be inserted into the distributed hashmap * size - size of strlen array * Insert() is just to ensure that there is a new entry to be inserted into * the distributed hash map, and this entry is marked in the local buffer * as "to be inserted". The reason is, it will be expensive to do the insert * for each and every new element. In order to avoid those latency costs, * insert aggregates the entries into a single buffer of size BUF_LIMIT and * only completes the insertion into the distributed hashh map, if and only * if this aggregate local buffer is full. In order to complete this * aggregation call (even though the buffer is not full), commit() can be * used to flush the local buffer into the distributed hash map. So it is a * good practice to call commit after all insert or whenever consistency is * required. */ void insert(string str); /** * Call commit() to complete the data insertion into the distributed * hashmap. */ void commit(); /** * Call commit() to complete the data insertion into the distributed * hashmap of a specified process. */ void commit(int proc); /** * prints this distributed hashmap */ void print(); void print2(); void rehash(); const VocabIntMap * getLocalMapPtr(); /** * returns the Global HashMap Size */ int getGlobalHashMapSize(); /** * returns true if a hashmap already exists */ static bool isCreated(); private: int mGPCHandle; int m_me; static short int sm_initialized; char **mBuf; char *mTmpBuf; /* temporary buffer */ int *mIndex; int m_globalHashMapSize; VocabIntMap *mGlobalIdMap; }; #endif /* DISTHASHMAP_H_ */ ga-5-3/armci/examples/features/gpc/hashtable/sample.txt0000640005473000001440000000021310636263374022057 0ustar d3n000users The Global Arrays (GA) toolkit provides an efficient and portable "shared-memory" programming interface for distributed-memory computers. ga-5-3/armci/examples/features/non-blocking/0000750005473000001440000000000012275260546017713 5ustar d3n000usersga-5-3/armci/examples/features/non-blocking/README0000640005473000001440000000421211423627743020573 0ustar d3n000usersNonblocking operations initiate a communication call and then return control to the application. The user who wishes to exploit nonblocking communication as a technique for latency hiding by overlapping communication with computation implicitly assumes that progress in communication can be made in a purely computational phase of the program execution when no communication calls are made. All the non-blocking transfer functions are prototyped to work as transfers with both "explicit" and "implicit handle". It stores important information about the initiated data transfer. The descriptor is implemented as an abstract data type. This is motivated by a simpler implementation so that a data transfer descriptor can be stored and managed in the application rather in the ARMCI library space. If a NULL value is passed to the argument representing a handle (thus representing "implicit handle"), the function does an implicit handle non-blocking transfer. A request data structure embedded in the handle should not be copied in the application. Upon completion of the data transfer, handle can be reused. A handle can be used to represent multiple operations of the same type (i.e., all puts or all gets). Such handle is an aggregate handle. Underneath, ARMCI combines multiple requests and processes them as a single message (actually by calling ARMCI_PutV/GetV/AccV). An explict handle should be initialized using the following macro, before it is used in any non-blocking operation. It is initialized as follows: - ARMCI_INIT_HANDLE(armci_hdl_t* nb_handle) Nonblocking operations in ARMCI allow user ot initiate a one-sided call and then return control to the user program. The data transfer is completed locally by calling a wait operation. Waiting on a nonblocking put operation assures was injected into the network and the user buffer can be now reused. Both in case of blocking and nonblocking store operations, to access the modified data safely from other nodes programmer has to call an ARMCI_Fence call first. ARMCI_Fence completes data transfers on the remote side. Unlike the blocking operation, the nonblocking operations are NOT ordered. ga-5-3/armci/examples/features/non-blocking/simple/0000750005473000001440000000000012275260546021204 5ustar d3n000usersga-5-3/armci/examples/features/non-blocking/simple/simple.c0000640005473000001440000000322512123157547022642 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id$ */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_UNISTD_H # include #endif #include "armci.h" #include "message.h" int me,nprocs; int LOOP=10; int main(int argc, char **argv) { int i; double **myptrs; double t0,t1,tnbget=0,tnbwait=0,t2=0; armci_msg_init(&argc,&argv); nprocs = armci_msg_nproc(); if (nprocs==1) { fprintf(stderr,"You must use more than 1 process for this test. Exiting gently."); return 0; } me = armci_msg_me(); myptrs = (double **)malloc(sizeof(double *)*nprocs); ARMCI_Init(); ARMCI_Malloc((void **)myptrs,LOOP*sizeof(double)); armci_msg_barrier(); if(me==0){ for(i=0;i #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STDARG_H # include #endif #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_TIME_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_ASSERT_H # include #endif #include #include "armci.h" #include "message.h" extern double exp2(double); extern double round(double); extern double log2(double); #define NDEBUG /*#define LOG2FILE*/ typedef int t_elem; /* type of an array element */ #define SIZE_ELEM sizeof(t_elem) #define STRIDE_OFF (SIZE_ELEM * 4 - 1) #define MIN_MSG_SIZE 8 #define MAX_MSG_SIZE (1024 * 1024) #define MSG_COUNT 20 int armci_error_code; #define ARMCI_ASSERT(error_code) if ((armci_error_code = error_code)) { \ fprintf(stderr, "ARMCI error %d\n", armci_error_code);pause(); \ ARMCI_Cleanup(); MPI_Abort(MPI_COMM_WORLD, armci_error_code); } #define FIX_TIME(t) if (t < 0.0) t = 0.0; int size, rank, second; #define ITERS 18 #define ITER_STEPS 20 double iterations_times[ITERS]; int iterations[ITERS]; int *p_srcs, *p_dsts; enum {CONT_PUT, CONT_GET, STRIDED_PUT, STRIDED_GET, STRIDED_ACC, VECTOR_PUT, VECTOR_GET, VECTOR_ACC}; #define OPS_COUNT (STRIDED_ACC + 1) #define NON_CONT(op) (op > CONT_GET) enum {NOWORK, TOTAL, OVERLAP}; #define STATS_COUNT (OVERLAP + 1) /* prints formatted numbered message with processor's rank */ int log_debug(const char *fmt, ...) { int r = 0; #ifndef NDEBUG static int log_counter = 1; va_list ap; va_start(ap, fmt); printf("%03d@%1d: ", log_counter++, rank); r = vprintf(fmt, ap); va_end(ap); #endif return r; } FILE *log_file = NULL; void start_logging(const char *fname) { #ifdef LOG2FILE char exe_name[255]; char log_path[255]; int i; char k; strcpy(exe_name, fname); if (exe_name[strlen(exe_name) - 2] == '.') /* remove .x */ exe_name[strlen(exe_name) - 2] = 0; if (exe_name[0] == '/') { /* full path given */ for (i = ((int)strlen(exe_name)) - 1, k = -1; i >= 0; i--) if (exe_name[i] == '/') { if (k == -1) k = i + 1; else { exe_name[i] = 0; break; } } log_debug("exe: path=%s, name=%s\n", exe_name, exe_name + k); sprintf(log_path, "%s/data/%s.dat", exe_name, exe_name + k); } else { /* only executable name */ sprintf(log_path, "../data/%s.dat", exe_name); } log_debug("log: %s\n", log_path); log_file = fopen(log_path, "w"); if (!log_file) { perror("cannot open log file"); abort(); } #else log_file = stderr; #endif } void finish_logging() { fclose(log_file); } /* prints formatted message to ../data/.dat */ int log_printf(const char *fmt, ...) { va_list ap; int r; va_start(ap, fmt); if (log_file) r = vfprintf(log_file, fmt, ap); else { fprintf(stderr, "warning: logging is not enabled for this process\n"); r = vfprintf(stderr, fmt, ap); } va_end(ap); return r; } /* computes approximate time of n iterations for variable n */ void time_iterations() { double time_start, time_after_start, time_stop; int i, j, k, l; for (i = 0, j = 1; i < ITERS; i++, j *= 2) { time_start = armci_timer(); time_after_start = armci_timer(); for (l = 0, k = rand(); l < j; l++) k *= rand(); time_stop = armci_timer(); iterations_times[i] = time_stop - time_after_start + time_start - time_after_start; FIX_TIME(iterations_times[i]); iterations[i] = j; log_debug("it takes %.8f sec to iterate %d times\n", iterations_times[i], iterations[i]); } } /* computes useful overlap time for contiguous/vector/strided arrays * * op - operation * * msg_size - size of a message/ 1st dimension (bytes) * * size2 - not used for contiguous arrays * * - size of 2nd dimension for strided arrays (bytes) * * - # of vector segments for vectors * * returns pointer to static array of stats (STATS_COUNT doubles) * */ double * benchmark(int op, int msg_size, int size2) { static double stats[STATS_COUNT]; /* return statistics in static array */ void **array_ptrs; int stride_dist, block_sizes[2], scale = 2; int i=0, j=0, k=0, l=0, less=0, more=0; double time_start=0, time_after_start=0, time_after_call=0, time_after_work=0, time_after_wait=0; double time2call_nw=0, time2wait_nw = 1.0, time_total_nw=0; double time2call_fw, time2work_fw, time2wait_fw, time_total_fw; armci_hdl_t handle; array_ptrs = malloc(sizeof(void*)*size); log_debug("barrier O\n"); armci_msg_barrier(); /* initialize: obtain remote address and generate random array */ switch (op) { case CONT_PUT: case CONT_GET: ARMCI_ASSERT(ARMCI_Malloc(array_ptrs, msg_size)); for (i = 0; i < msg_size; i++) ((char *)array_ptrs[rank])[i] = (char)(rand() >> 24); break; /* 2D strided array of ints */ case STRIDED_PUT: case STRIDED_GET: case STRIDED_ACC: block_sizes[0] = msg_size; block_sizes[1] = size2; stride_dist = STRIDE_OFF + msg_size; log_debug("strided: dim1 = %d (%d bytes), dim2 = %d, stride = %d\n", msg_size / SIZE_ELEM, msg_size, size2, stride_dist); ARMCI_ASSERT(ARMCI_Malloc(array_ptrs, (size2 - 1) * stride_dist + msg_size)); for (i = 0; i < size2; i++) for (j = 0; j < (msg_size / ((int)SIZE_ELEM)); j++) { l = stride_dist * i + SIZE_ELEM * i; *(int *)((char *)array_ptrs[rank] + l) = rand(); } break; } /* warm up call */ log_debug("barrier A\n"); armci_msg_barrier(); if (second != -1) { log_debug("testing message size %d bytes\n", msg_size); switch (op) { case CONT_PUT: ARMCI_INIT_HANDLE(&handle); time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbPut(array_ptrs[rank], array_ptrs[second], msg_size, second, &handle)); time_after_call = armci_timer(); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); break; case CONT_GET: ARMCI_INIT_HANDLE(&handle); time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbGet(array_ptrs[second], array_ptrs[rank], msg_size, second, &handle)); time_after_call = armci_timer(); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); break; case STRIDED_PUT: ARMCI_INIT_HANDLE(&handle); time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbPutS(array_ptrs[rank], &stride_dist, array_ptrs[second], &stride_dist, block_sizes, 1, second, &handle)); time_after_call = armci_timer(); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); break; case STRIDED_GET: ARMCI_INIT_HANDLE(&handle); time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbGetS(array_ptrs[second], &stride_dist, array_ptrs[second], &stride_dist, block_sizes, 1, second, &handle)); time_after_call = armci_timer(); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); break; case STRIDED_ACC: ARMCI_INIT_HANDLE(&handle); time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbAccS(ARMCI_ACC_INT, &scale, array_ptrs[rank], &stride_dist, array_ptrs[second], &stride_dist, block_sizes, 1, second, &handle)); time_after_call = armci_timer(); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); break; } time2call_nw = time_after_call - time_after_start + time_start - time_after_start; time2wait_nw = time_after_wait - time_after_call + time_start - time_after_start; time_total_nw = time_after_wait - time_after_start + time_start - time_after_start; log_debug("time (warm up): %.8f call, %.8f wait, %.8f total\n", time2call_nw, time2wait_nw, time_total_nw); } log_debug("barrier B\n"); armci_msg_barrier(); if (second != -1) { /* no work */ ARMCI_INIT_HANDLE(&handle); switch (op) { case CONT_PUT: time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbPut(array_ptrs[rank], array_ptrs[second], msg_size, second, &handle)); time_after_call = armci_timer(); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); break; case CONT_GET: time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbGet(array_ptrs[second], array_ptrs[rank], msg_size, second, &handle)); time_after_call = armci_timer(); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); break; case STRIDED_PUT: time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbPutS(array_ptrs[rank], &stride_dist, array_ptrs[second], &stride_dist, block_sizes, 1, second, &handle)); time_after_call = armci_timer(); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); break; case STRIDED_GET: time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbGetS(array_ptrs[second], &stride_dist, array_ptrs[rank], &stride_dist, block_sizes, 1, second, &handle)); time_after_call = armci_timer(); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); break; case STRIDED_ACC: time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbAccS(ARMCI_ACC_INT, &scale, array_ptrs[rank], &stride_dist, array_ptrs[second], &stride_dist, block_sizes, 1, second, &handle)); time_after_call = armci_timer(); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); break; } time2call_nw = time_after_call - time_after_start + time_start - time_after_start; FIX_TIME(time2call_nw); time2wait_nw = time_after_wait - time_after_call + time_start - time_after_start; FIX_TIME(time2wait_nw); time_total_nw = time_after_wait - time_after_start + time_start - time_after_start; FIX_TIME(time_total_nw); log_debug("time (no work): %.8f call, %.8f wait, %.8f total\n", time2call_nw, time2wait_nw, time_total_nw); } /* only perform tests if wait time is not 0 */ if (time2wait_nw > 0.0) { /* time2wait_nw is always 1.0 on seconds (receiving nodes) */ double overlaps[ITER_STEPS], totals[ITER_STEPS]; if (second != -1) { /* compute approximate range of iterations */ less = 0, more = iterations[ITERS - 1]; assert(time2wait_nw < iterations_times[ITERS - 1]); for (i = 0; i < ITERS; i++) if (time2wait_nw > iterations_times[i]) less = iterations[i]; else break; for (i = 0; i < ITERS; i++) if (time2wait_nw < iterations_times[ITERS - i - 1]) more = iterations[ITERS - i - 1]; else break; log_debug("wait time (%.8f) is between %d and %d iterations\n", time2wait_nw, less, more); } /* benchmark ITER_STEPS steps within computed range */ for (i = 0, j = less; i < ITER_STEPS; i++, j += (more - less) / (ITER_STEPS - 1)) { /* time noneblocking call with j interations of fake work */ log_debug("barrier C\n"); armci_msg_barrier(); if (second != -1) { ARMCI_INIT_HANDLE(&handle); switch (op) { case CONT_PUT: time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbPut(array_ptrs[rank], array_ptrs[second], msg_size, second, &handle)); time_after_call = armci_timer(); for (l = 0, k = rand(); l < j; l++) k *= rand(); time_after_work = armci_timer(); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); break; case CONT_GET: time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbGet(array_ptrs[second], array_ptrs[rank], msg_size, second, &handle)); time_after_call = armci_timer(); for (l = 0, k = rand(); l < j; l++) k *= rand(); time_after_work = armci_timer(); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); break; case STRIDED_PUT: time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbPutS(array_ptrs[rank], &stride_dist, array_ptrs[second], &stride_dist, block_sizes, 1, second, &handle)); time_after_call = armci_timer(); for (l = 0, k = rand(); l < j; l++) k *= rand(); time_after_work = armci_timer(); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); break; case STRIDED_GET: time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbGetS(array_ptrs[second], &stride_dist, array_ptrs[rank], &stride_dist, block_sizes, 1, second, &handle)); time_after_call = armci_timer(); for (l = 0, k = rand(); l < j; l++) k *= rand(); time_after_work = armci_timer(); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); break; case STRIDED_ACC: time_start = armci_timer(); time_after_start = armci_timer(); ARMCI_ASSERT(ARMCI_NbAccS(ARMCI_ACC_INT, &scale, array_ptrs[rank], &stride_dist, array_ptrs[second], &stride_dist, block_sizes, 1, second, &handle)); time_after_call = armci_timer(); for (l = 0, k = rand(); l < j; l++) k *= rand(); time_after_work = armci_timer(); ARMCI_ASSERT(ARMCI_Wait(&handle)); time_after_wait = armci_timer(); break; } time2call_fw = time_after_call - time_after_start + time_start - time_after_start; FIX_TIME(time2call_fw); time2work_fw = time_after_work - time_after_call + time_start - time_after_start; FIX_TIME(time2work_fw); time2wait_fw = time_after_wait - time_after_work + time_start - time_after_start; FIX_TIME(time2wait_fw); time_total_fw = time_after_wait - time_after_start + time_start - time_after_start; FIX_TIME(time_total_fw); log_debug("time (%d iters): %.8f call, %.8f work, " "%.8f wait %.8f total\n", j, time2call_fw, time2work_fw, time2wait_fw, time_total_fw); overlaps[i] = time2work_fw; totals[i] = time_total_fw; } } /* pick overlap with closest total (less or equal) */ if (second != -1) { double closest_total, closest_overlap; double smallest_total = totals[ITER_STEPS - 1], smallest_overlap = overlaps[ITER_STEPS - 1]; for (i = ITER_STEPS - 1; i >= 0; i--) { closest_total = totals[i]; closest_overlap = overlaps[i]; if (closest_total < smallest_total) { smallest_total = closest_total; smallest_overlap = closest_overlap; } if (closest_total <= time_total_nw) break; } if (closest_total > time_total_nw) { closest_total = smallest_total; closest_overlap = smallest_overlap; } stats[NOWORK] = time_total_nw; stats[TOTAL] = closest_total; stats[OVERLAP] = closest_overlap; } } else { if (second != -1) { for (i = 0; i < ITER_STEPS; i++) { log_debug("barrier C0\n"); armci_msg_barrier(); } stats[NOWORK] = time_total_nw; stats[TOTAL] = 0; stats[OVERLAP] = 0; } } ARMCI_ASSERT(ARMCI_Free(array_ptrs[rank])); free(array_ptrs); log_debug("barrier D\n"); armci_msg_barrier(); return stats; } int main (int argc, char *argv[]) { int i, j, k, l; double u; char buf[255]; int dist, pos, time_seed; int msg_sizes[MSG_COUNT], dim1_sizes[MSG_COUNT], dim2[MSG_COUNT], mul_elem; double *stats=NULL, *stats_all=NULL; double from_log = log2(MIN_MSG_SIZE); double to_log = log2(MAX_MSG_SIZE); double step_log = (to_log - from_log) / (MSG_COUNT - 1); armci_msg_init(&argc, &argv); rank = armci_msg_me(); size = armci_msg_nproc(); assert((size & 1) ^ 1); /* works with even number of processors only */ log_debug("Message passing initialized\n"); ARMCI_ASSERT(ARMCI_Init()); log_debug("ARMCI initialized\n"); if (!rank) start_logging(argv[0]); /* generate MSG_COUNT message sizes MIN_MSG_SIZE thru MAX_MSG_SIZE */ for (i = 0, u = from_log; i < MSG_COUNT; i++, u += step_log) { mul_elem = round(exp2(u)); msg_sizes[i] = mul_elem % ((int)SIZE_ELEM) ? (mul_elem / ((int)SIZE_ELEM) + 1) * ((int)SIZE_ELEM) : mul_elem; /* multiple of SIZE_ELEM */ } /* generate MSG_COUNT respective dim1 sizes and dim2 for strided */ for (i = 0; i < MSG_COUNT; i++) { mul_elem = msg_sizes[i] / SIZE_ELEM; mul_elem = sqrt(2.0 * mul_elem); dim1_sizes[i] = mul_elem * SIZE_ELEM; dim2[i] = mul_elem / 2; } /* print msg_sizes and appropriate derivatives (debug mode only) */ if (!rank) { log_debug("msg_sizes:\n"); for (i = 0; i < MSG_COUNT; i++) log_debug("cont: %d bytes | strided: %d bytes X %d\n", msg_sizes[i], dim1_sizes[i], dim2[i]); } /* inialize PRNG, use seed generated on processor 0 for uniform sequence */ time_seed = time(NULL); MPI_Bcast(&time_seed, 1, MPI_INT, 0, MPI_COMM_WORLD); srand(time_seed); rand(); log_debug("seed: %d\n", time_seed); /* generate random pairs of processors */ #define HALFSIZE (size / 2) assert(p_srcs = malloc(sizeof(int) * size)); for (i = 0; i < size; i++) p_srcs[i] = -1; p_dsts = p_srcs + HALFSIZE; for (i = 0, j = size - 1, pos = 0; i < size; i++, j--) { dist = round((double)rand() * j / RAND_MAX + 1); /* random 1..j */ for (l = 0; l < dist; ) { pos = (pos + 1 == size) ? 0 : pos + 1; if ((p_srcs[pos] == -1) && (pos != i)) l++; } p_srcs[pos] = i; } for (i = 0, j = 0; i < HALFSIZE; i++) j += sprintf(buf + j, " %d->%d", p_srcs[i], p_dsts[i]); log_debug("random pairs:%s\n", buf); /* time interations: 1 thru ITERS */ time_iterations(); /* determine if processor initiates communication and where it sends to, * * -1 for second(receiver) */ second = -1; for (i = 0; i < HALFSIZE; i++) if (p_srcs[i] == rank) second = p_dsts[i]; log_debug("second: %d\n", second); /* allocate memory for statisticis */ #define MSG_OFF (STATS_COUNT * size) #define OPS_OFF (MSG_OFF * MSG_COUNT) assert(stats_all = malloc(OPS_COUNT * OPS_OFF * sizeof(double))); for (i = 0; i < OPS_COUNT; i++) for (j = 0; j < MSG_COUNT; j++) { switch (i) { case CONT_PUT: case CONT_GET: stats = benchmark(i, msg_sizes[j], 0); log_debug("stats: %8d | %.8f | %.8f | %.8f | %.2f\n", msg_sizes[j], stats[NOWORK], stats[TOTAL], stats[OVERLAP], 100.0 * stats[OVERLAP] / stats[TOTAL]); break; case STRIDED_PUT: case STRIDED_GET: case STRIDED_ACC: stats = benchmark(i, dim1_sizes[j], dim2[j]); log_debug("stats: %8d | %.8f | %.8f | %.8f | %.2f\n", dim1_sizes[j] * dim2[j], stats[NOWORK], stats[TOTAL], stats[OVERLAP], 100.0 * stats[OVERLAP] / stats[TOTAL]); break; } MPI_Gather(stats, STATS_COUNT, MPI_DOUBLE, stats_all + i * OPS_OFF + j * MSG_OFF, STATS_COUNT, MPI_DOUBLE, 0, MPI_COMM_WORLD); } if (!rank) for (l = 0; l < HALFSIZE; l++) { /* interate thru pairs */ log_printf("for pair of processors %d -> %d:\n", p_srcs[l], p_dsts[l]); for (i = 0; i < OPS_COUNT; i++) { /* iterate thru operations */ switch (i) { case CONT_PUT: log_printf("ARMCI_NbPut\n"); break; case CONT_GET: log_printf("ARMCI_NbGet\n"); break; case STRIDED_PUT: log_printf("ARMCI_NbPutS\n"); break; case STRIDED_GET: log_printf("ARMCI_NbGetS\n"); break; case STRIDED_ACC: log_printf("ARMCI_NbAccS\n"); break; } log_printf("msg size | nowork | total | overlap |" " ratio\n"); log_printf("---------+------------+------------+------------+" "------\n"); for (j = 0; j < MSG_COUNT; j++) { /* iterate thru msg sizes */ k = i * OPS_OFF + j * MSG_OFF + p_srcs[l] * STATS_COUNT; log_printf("%8d | %.8f | %.8f | %.8f | %.2f\n", NON_CONT(i) ? dim1_sizes[j] * dim2[j]: msg_sizes[j], stats_all[k + NOWORK], stats_all[k + TOTAL], stats_all[k + OVERLAP], (stats_all[k + NOWORK] < stats_all[k + TOTAL]) || (stats_all[k + TOTAL] <= 0.0) ? 0 : 100.0 * stats_all[k + OVERLAP] / stats_all[k + TOTAL]); } log_printf("\n"); } } if (!rank) finish_logging(); ARMCI_Finalize(); armci_msg_finalize(); free(p_srcs); free(stats_all); return 0; } ga-5-3/armci/examples/features/notification/0000750005473000001440000000000012275260547020022 5ustar d3n000usersga-5-3/armci/examples/features/notification/README0000640005473000001440000000407111423627743020704 0ustar d3n000usersIntroduction ============ A new notification functionality has been introduced in ARMCI primarify for the Co-Array fortran compiler. Description =========== Notification is a mechanism for synchronization. 1. process s is the process doing a notify call 2. process d is the destiniation of this notification call Process s makes a armci_notify(d) call. This call is guarenteed to reach the process d (the destination here) only after all prior calls made by process s to process d complete and are commited into process d's memory. armci_notify is a mechanism by which if s notifies d and d does a corresponding notify_wait, after d returns from notify_wait it knows that all communication calls initiated to d by s, before s issued the notification message, are completed and d's memory will reflect that they are completed. Function Definitions ==================== int armci_notify(int proc) -------------------------- :: parameter proc the process/task to which the notification message is sent to return the current value of the pending operations count for process proc blocking: this is a non-blocking call on most networks int armci_notify_wait(int proc,int * pval) ------------------------------------------ :: parameter proc the process/task to which the notification message is sent to pval pointer to the current received count from the initiator of the notify call at the moment. return returns the number of calls that were sent from s (initiator of notify) since the invocation of the last notify_wait blocking: this is a blocking call Sample Program ============== An example program is at armci/src/testnotify.c Here is a sample where process waits for message from left and sends to right:: left=me-1;right=(me==nproc-1)?-1:me+1; if(left!=-1){ rc = armci_notify_wait(left,&wc); } if(right!=-1){ ARMCI_PutS((double*)b[me]+idx, stride, (double*)b[right]+idx, stride, count, strl,right); lc=armci_notify(right); } ga-5-3/armci/examples/features/notification/simple/0000750005473000001440000000000012275260546021312 5ustar d3n000usersga-5-3/armci/examples/features/notification/simple/testnotify.c0000640005473000001440000002223511643645222023667 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: testnotify.c,v 1.1.2.1 2007-06-20 17:42:09 vinod Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_UNISTD_H # include #endif #define DEBUG__ #include "armci.h" #include "message.h" #define DIM1 5 #define DIM2 3 #ifdef __sun /* Solaris has shared memory shortages in the default system configuration */ # define DIM3 6 # define DIM4 5 # define DIM5 4 #elif defined(__alpha__) # define DIM3 8 # define DIM4 5 # define DIM5 6 #else # define DIM3 8 # define DIM4 9 # define DIM5 7 #endif #define DIM6 3 #define DIM7 2 #define OFF 1 #define EDIM1 (DIM1+OFF) #define EDIM2 (DIM2+OFF) #define EDIM3 (DIM3+OFF) #define EDIM4 (DIM4+OFF) #define EDIM5 (DIM5+OFF) #define EDIM6 (DIM6+OFF) #define EDIM7 (DIM7+OFF) #define DIMS 4 #define MAXDIMS 7 #define MAX_DIM_VAL 50 #define LOOP 200 #define BASE 100. #define MAXPROC 128 #define TIMES 100 #ifdef CRAY # define ELEMS 800 #else # define ELEMS 200 #endif /***************************** macros ************************/ #define COPY(src, dst, bytes) memcpy((dst),(src),(bytes)) #define ARMCI_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define ARMCI_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define ARMCI_ABS(a) (((a) <0) ? -(a) : (a)) /***************************** global data *******************/ int me, nproc; void* work[MAXPROC]; /* work array for propagating addresses */ /*\ generate random range for a section of multidimensional array \*/ void get_range(int ndim, int dims[], int lo[], int hi[]) { int dim; for(dim=0; dim 0)? rand()%range : lo[dim]; new_lo[dim] = toss; new_hi[dim] = toss + diff -1; assert(new_hi[dim] < dims[dim]); assert(diff == (new_hi[dim] -new_lo[dim]+1)); } } /*\ print range of ndim dimensional array with two strings before and after \*/ void print_range(char *pre,int ndim, int lo[], int hi[], char* post) { int i; printf("%s[",pre); for(i=0;i1 takes a partial plane */ /* create shared and local arrays */ create_array(b, sizeof(double),ndim,dimsB); create_array(a, sizeof(double),ndim,dimsB); elems = get_elems(ndim, stride, dimsB, sizeof(double)); init((double*)a[me], ndim, elems, dimsB); for(i=0; i dimsB[i]) ? dimsB[i]-1: dimsB[i]-less; count[i]=hi[i]-lo[i]+1; } count[0]*=sizeof(double); for(i=0; i1)? dimsB[ndim-1] : 1; strl = (ndim>1)? ndim-2: 0; /* strides of the subpatch to transfer */ for(i=0;i /dev/null; then echo "$(MPIEXEC)" | $(SED) 's/%NP%/1/'; else echo "$(MPIEXEC)" | $(SED) 's/%NP%/$(NPROCS)/'; fi`; eval $$maybe_mpiexec else LOG_COMPILER = \ maybe_mpiexec=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo ""; else if echo "$(MPIEXEC)" | $(GREP) "%NP%" > /dev/null; then echo "$(MPIEXEC)" | $(SED) 's/%NP%/$(NPROCS)/'; else echo "$(MPIEXEC)"; fi; fi`; eval $$maybe_mpiexec endif # CROSS_COMPILING ga-5-3/comex/configure0000750005473000001440000240132412247206237013630 0ustar d3n000users#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Communication Runtime for Exascale (comex) 1.0. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and hpctools@pnl.gov $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Communication Runtime for Exascale (comex)' PACKAGE_TARNAME='comex' PACKAGE_VERSION='1.0' PACKAGE_STRING='Communication Runtime for Exascale (comex) 1.0' PACKAGE_BUGREPORT='hpctools@pnl.gov' PACKAGE_URL='http://www.emsl.pnl.gov/docs/global/' ac_config_libobj_dir=compat ac_unique_file="src-common/comex.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS MPIEXEC NPROCS OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL ac_ct_AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL RANLIB AR_FLAGS AR SED HAVE_BLAS_FALSE HAVE_BLAS_TRUE BLAS_CPPFLAGS BLAS_LDFLAGS BLAS_LIBS HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE COMEX_NETWORK_CPPFLAGS COMEX_NETWORK_LIBS COMEX_NETWORK_LDFLAGS COMEX_NETWORK_DMAPP_FALSE COMEX_NETWORK_DMAPP_TRUE COMEX_NETWORK_PORTALS4_FALSE COMEX_NETWORK_PORTALS4_TRUE COMEX_NETWORK_OFA_FALSE COMEX_NETWORK_OFA_TRUE COMEX_NETWORK_MPI_TS_FALSE COMEX_NETWORK_MPI_TS_TRUE CROSS_COMPILING_FALSE CROSS_COMPILING_TRUE PERL EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MPICC ENABLE_PROFILING_ARMCI_FALSE ENABLE_PROFILING_ARMCI_TRUE MPI_CPPFLAGS MPI_LDFLAGS MPI_LIBS MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode with_PACKAGE with_mpi enable_mpi_tests enable_profiling_armci enable_dependency_tracking enable_autodetect with_mpi_ts with_ofa with_portals4 with_dmapp enable_assert enable_weak with_blas with_blas4 with_blas8 enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock ' ac_precious_vars='build_alias host_alias target_alias MPICC CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP AR AR_FLAGS RANLIB NPROCS MPIEXEC' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Communication Runtime for Exascale (comex) 1.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/comex] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Communication Runtime for Exascale (comex) 1.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-mpi-tests disable MPI linker tests --enable-profiling-armci enable profiling for ARMCI --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-autodetect attempt to locate COMEX_NETWORK besides MPI two-sided --disable-assert turn off assertions --disable-weak don't use weak symbols for profiling --enable-shared[=PKGS] build shared libraries [default=no] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-PACKAGE[=ARG] for most of the external software packages, ARG can be one or more whitespace-separated directories, linker or preprocessor directives; for example, --with-PACKAGE="/path/to/PACKAGE -lmylib -I/mydir" --with-mpi[=ARG] path to MPI; leave ARG blank to use MPI compiler wrappers in PATH --with-mpi-ts[=ARG] select comex network as MPI-1 two-sided --with-ofa[=ARG] select comex network as Infiniband OpenIB --with-portals4[=ARG] select comex network as Portals4 --with-dmapp[=ARG] select comex network as Cray DMAPP --with-blas[=ARG] use external BLAS library; attempt to detect sizeof(INTEGER) --with-blas4[=ARG] use external BLAS library compiled with sizeof(INTEGER)==4 --with-blas8[=ARG] use external BLAS library compiled with sizeof(INTEGER)==8 --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). Some influential environment variables: MPICC MPI C compiler CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor AR archiver used by libtool (default: ar) AR_FLAGS archiver flags used by libtool (default: cru) RANLIB generates index to archive (default: ranlib) NPROCS number of procs to use for parallel tests (default 4) MPIEXEC how to run parallel tests if built with MPI e.g. "mpiexec -np %NP%" Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . Communication Runtime for Exascale (comex) home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Communication Runtime for Exascale (comex) configure 1.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------- ## ## Report this to hpctools@pnl.gov ## ## ------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_find_intX_t LINENO BITS VAR # ----------------------------------- # Finds a signed integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 $as_echo_n "checking for int$2_t... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in int$2_t 'int' 'long int' \ 'long long int' 'short int' 'signed char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main () { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main () { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if eval test \"x\$"$3"\" = x"no"; then : else break fi done fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_intX_t # ac_fn_c_find_uintX_t LINENO BITS VAR # ------------------------------------ # Finds an unsigned integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 $as_echo_n "checking for uint$2_t... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if eval test \"x\$"$3"\" = x"no"; then : else break fi done fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Communication Runtime for Exascale (comex) $as_me 1.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_header_list " stdlib.h" as_fn_append ac_header_list " unistd.h" as_fn_append ac_header_list " sys/param.h" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in build-aux "$srcdir"/build-aux; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers config.h" ############################################################################### # Init automake ############################################################################### am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='comex' VERSION='1.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Don't emit "rebuild rules" for configure, Makefile.ins, etc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE ############################################################################### # Misc. information and package setup. ############################################################################### # Check whether --with-PACKAGE was given. if test "${with_PACKAGE+set}" = set; then : withval=$with_PACKAGE; fi COMEX_TOP_BUILDDIR="`pwd`" cd "$srcdir" COMEX_TOP_SRCDIR="`pwd`" cd "$COMEX_TOP_BUILDDIR" if test "$COMEX_TOP_BUILDDIR" != "$COMEX_TOP_SRCDIR"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: Detected VPATH build" >&5 $as_echo "$as_me: Detected VPATH build" >&6;} fi # We use the MPI compiler wrappers instead of the standard compilers. # MPI_* vars might exist in environment, but they are really internal. # Reset them. MPI_LIBS= MPI_LDFLAGS= MPI_CPPFLAGS= # Check whether --with-mpi was given. if test "${with_mpi+set}" = set; then : withval=$with_mpi; else with_mpi=yes fi if test "x$with_mpi" = xyes; then : with_mpi_wrappers=yes else with_mpi_wrappers=no fi # In case users don't care whether MPI actually works during configure. # Check whether --enable-mpi-tests was given. if test "${enable_mpi_tests+set}" = set; then : enableval=$enable_mpi_tests; else enable_mpi_tests=yes fi # ARMCI profiling layer # Check whether --enable-profiling-armci was given. if test "${enable_profiling_armci+set}" = set; then : enableval=$enable_profiling_armci; else enable_profiling_armci=no fi if test "x$enable_profiling_armci" = xyes; then : $as_echo "#define COMEX_PROFILING_ARMCI 1" >>confdefs.h fi if test "x$enable_profiling_armci" = xyes; then ENABLE_PROFILING_ARMCI_TRUE= ENABLE_PROFILING_ARMCI_FALSE='#' else ENABLE_PROFILING_ARMCI_TRUE='#' ENABLE_PROFILING_ARMCI_FALSE= fi ######################################### # C compiler ######################################## { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: C compiler" >&5 $as_echo "$as_me: C compiler" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi case $comex_cv_target_base in #( BGP) : comex_mpicc_pref=mpixlc_r; comex_cc_pref=bgxlc_r ;; #( *) : ;; esac # In the case of using MPI wrappers, set CC=MPICC since CC will override # absolutely everything in our list of compilers. # Save CC, just in case. if test x$with_mpi_wrappers = xyes; then : if test "x$CC" != "x$MPICC"; then : comex_orig_CC="$CC" fi case x$CC:x$MPICC in #( x:x) : ;; #( x:x*) : CC="$MPICC" ;; #( x*:x) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired but CC is set while MPICC is unset." >&5 $as_echo "$as_me: WARNING: MPI compilers desired but CC is set while MPICC is unset." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CC will be ignored during compiler selection, but will be" >&5 $as_echo "$as_me: WARNING: CC will be ignored during compiler selection, but will be" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&5 $as_echo "$as_me: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: meant to set MPICC instead of or in addition to CC?" >&5 $as_echo "$as_me: WARNING: meant to set MPICC instead of or in addition to CC?" >&2;} CC= ;; #( x*:x*) : if test "x$CC" != "x$MPICC"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired, MPICC and CC are set, and MPICC!=CC." >&5 $as_echo "$as_me: WARNING: MPI compilers desired, MPICC and CC are set, and MPICC!=CC." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Choosing MPICC over CC." >&5 $as_echo "$as_me: WARNING: Choosing MPICC over CC." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CC will be tested first during MPI compiler unwrapping." >&5 $as_echo "$as_me: WARNING: CC will be tested first during MPI compiler unwrapping." >&2;} fi CC="$MPICC" ;; #( *) : as_fn_error $? "CC/MPICC case failure" "$LINENO" 5 ;; esac fi comex_cc="bgxlc_r bgxlc xlc_r xlc pgcc pathcc icc sxcc fcc opencc suncc craycc gcc cc ecc cl ccc" comex_mpicc="mpicc mpixlc_r mpixlc hcc mpxlc_r mpxlc sxmpicc mpifcc mpgcc mpcc cmpicc cc" if test x$with_mpi_wrappers = xyes; then : CC_TO_TEST="$comex_mpicc_pref $comex_mpicc" else CC_TO_TEST="$comex_cc_pref $comex_cc" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CC_TO_TEST do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in $CC_TO_TEST do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h if test x$with_mpi_wrappers = xyes; then : # Find perl. # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Create inside.pl. rm -f inside.pl cat >inside.pl <<"EOF" #!/usr/bin/perl use strict; use warnings; my $numargs = $#ARGV + 1; if ($numargs != 2) { print "Usage: wrapped.txt naked.txt\n"; exit 1; } # Read each input file as a string (rather than a list). local $/=undef; open WRAPPED, "$ARGV[0]" or die "Could not open wrapped text file: $!"; my $wrapped_lines = ; close WRAPPED; open NAKED, "$ARGV[1]" or die "Could not open naked text file: $!"; my $naked_lines = ; close NAKED; # Replace newlines, + from wrapped and naked lines. $wrapped_lines =~ tr/\n+/ /; $naked_lines =~ tr/\n+/ /; # Remove whitespace from beginning of wrapped and naked lines. $wrapped_lines =~ s/^\s+//; $naked_lines =~ s/^\s+//; # Remove whitespace from end of wrapped and naked lines. $wrapped_lines =~ s/\s+$//; $naked_lines =~ s/\s+$//; # If either wrapped_lines or naked_lines are empty, this is an error. # It is assumed that the particular version string which created the input # files should generate SOMETHING. unless ($wrapped_lines) { exit 1; } unless ($naked_lines) { exit 1; } # Cray compilers append a timestamp into their version string. Remove it. if ($wrapped_lines =~ /\QCray\E/) { $wrapped_lines = substr $wrapped_lines, 0, -28; $naked_lines = substr $naked_lines, 0, -28; } # Can the naked lines be found within the wrapped lines? if ($wrapped_lines =~ /\Q$naked_lines\E/) { #print "Found as substring\n"; exit 0; } # Are the naked lines exactly the same as the wrapped lines? elsif ($wrapped_lines eq $naked_lines) { #print "Found equal\n"; exit 0; } else { #print "Not found\n"; exit 1; } EOF inside="$PERL inside.pl" wrapped="$CC" case $wrapped in #( *_r) : compilers="bgxlc_r xlc_r" ;; #( *) : compilers="bgxlc xlc pgcc pathcc icc sxcc fcc opencc suncc craycc gcc ecc cl ccc cc" ;; #( *) : ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for base $wrapped compiler" >&5 $as_echo_n "checking for base $wrapped compiler... " >&6; } if ${comex_cv_mpic_naked+:} false; then : $as_echo_n "(cached) " >&6 else base="`$wrapped -show 2>/dev/null | sed 's/[ ].*$//' | head -1`" comex_save_CC="$CC" CC="$base" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_cv_mpic_naked="$base" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CC="$comex_save_CC" versions="--version -v -V -qversion" found_wrapped_version=0 # Try separating stdout and stderr. Only compare stdout. if test "x$comex_cv_mpic_naked" = x; then : # prepend any CC/CXX/F77 the user may have specified compilers="$comex_orig_CC $compilers" echo "only comparing stdout" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err naked.txt naked.err if $wrapped $version 1>mpi.txt 2>mpi.err; then : found_wrapped_version=1 for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : comex_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$comex_cv_mpic_naked" != x; then : break fi done fi # Perhaps none of the MPI compilers had a zero exit status (this is bad). # In this case we have to do a brute force match regardless of exit status. if test "x$found_wrapped_version" = x0; then : if test "x$comex_cv_mpic_naked" = x; then : echo "no zero exit status found for MPI compilers" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : comex_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$comex_cv_mpic_naked" != x; then : break fi done fi fi # Try by combining stdout/err into one file. if test "x$comex_cv_mpic_naked" = x; then : echo "try combining stdout and stderr into one file" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt naked.txt if $wrapped $version 1>mpi.txt 2>&1; then : for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>&1; then : if $inside mpi.txt naked.txt >/dev/null; then : comex_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$comex_cv_mpic_naked" != x; then : break fi done fi # If we got this far, then it's likely that the MPI compiler had a zero exit # status when it shouldn't have for one version flag, but later had a non-zero # exit status for a flag it shouldn't have. One false positive hid a false # negative. In this case, brute force compare all MPI compiler output against # all compiler output. if test "x$comex_cv_mpic_naked" = x; then : echo "we have a very badly behaving MPI compiler" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : comex_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$comex_cv_mpic_naked" != x; then : break fi done fi rm -f mpi.txt mpi.err naked.txt naked.err fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_cv_mpic_naked" >&5 $as_echo "$comex_cv_mpic_naked" >&6; } if test "x$comex_cv_mpic_naked" = x; then : as_fn_error $? "Could not determine the C compiler wrapped by MPI" "$LINENO" 5 else if test "x$comex_orig_CC" != x && test "x$comex_orig_CC" != "x$comex_cv_mpic_naked"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unwrapped $wrapped ($comex_cv_mpic_naked) does not match user-specified $comex_orig_CC" >&5 $as_echo "$as_me: WARNING: unwrapped $wrapped ($comex_cv_mpic_naked) does not match user-specified $comex_orig_CC" >&2;} fi fi rm -f inside.pl else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "comex_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_mpi ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : MPI_LIBS="$MPI_LIBS $arg" ;; #( -L*) : MPI_LDFLAGS="$MPI_LDFLAGS $arg" ;; #( -WL*) : MPI_LDFLAGS="$MPI_LDFLAGS $arg" ;; #( -Wl*) : MPI_LDFLAGS="$MPI_LDFLAGS $arg" ;; #( -I*) : MPI_CPPFLAGS="$MPI_CPPFLAGS $arg" ;; #( *.a) : MPI_LIBS="$MPI_LIBS $arg" ;; #( *.so) : MPI_LIBS="$MPI_LIBS $arg" ;; #( *lib) : if test -d $arg; then : MPI_LDFLAGS="$MPI_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : MPI_LDFLAGS="$MPI_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : MPI_LDFLAGS="$MPI_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : MPI_LDFLAGS="$MPI_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : MPI_CPPFLAGS="$MPI_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : MPI_CPPFLAGS="$MPI_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : MPI_CPPFLAGS="$MPI_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : MPI_CPPFLAGS="$MPI_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( -mkl*) : MPI_LIBS="$MPI_LIBS $arg" ;; #( *) : comex_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$comex_arg_parse_ok" = xno; then : if test "x$comex_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : MPI_LDFLAGS="$MPI_LDFLAGS -L$arg/lib64"; comex_arg_parse_ok=yes elif test -d $arg/lib; then : MPI_LDFLAGS="$MPI_LDFLAGS -L$arg/lib"; comex_arg_parse_ok=yes fi if test -d $arg/include64; then : MPI_CPPFLAGS="$MPI_CPPFLAGS -I$arg/include64"; comex_arg_parse_ok=yes elif test -d $arg/include; then : MPI_CPPFLAGS="$MPI_CPPFLAGS -I$arg/include"; comex_arg_parse_ok=yes fi else if test -d $arg/lib; then : MPI_LDFLAGS="$MPI_LDFLAGS -L$arg/lib"; comex_arg_parse_ok=yes fi if test -d $arg/include; then : MPI_CPPFLAGS="$MPI_CPPFLAGS -I$arg/include"; comex_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$comex_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : MPI_LDFLAGS="$MPI_LDFLAGS -L$arg"; comex_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : MPI_CPPFLAGS="$MPI_CPPFLAGS -I$arg"; comex_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$comex_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi done fi case $enable_mpi_tests in #( yes) : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu comex_cv_c_mpi_test_link=no if test "x$comex_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a C MPI program links natively" >&5 $as_echo_n "checking whether a C MPI program links natively... " >&6; } if ac_fn_c_try_link "$LINENO"; then : comex_cv_c_mpi_test_link=yes MPI_LIBS= MPI_LDFLAGS= MPI_CPPFLAGS= else comex_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_cv_c_mpi_test_link" >&5 $as_echo "$comex_cv_c_mpi_test_link" >&6; } fi # That didn't work, so now let's try adding our MPI_* flags. # The CPPFLAGS and LDFLAGS are added up top here, but LIBS will change. comex_save_LIBS="$LIBS" comex_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $MPI_CPPFLAGS" comex_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $MPI_LDFLAGS" if test "x$comex_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a C MPI program links with additional env" >&5 $as_echo_n "checking whether a C MPI program links with additional env... " >&6; } LIBS="$LIBS $MPI_LIBS" if ac_fn_c_try_link "$LINENO"; then : comex_cv_c_mpi_test_link=yes else comex_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$comex_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_cv_c_mpi_test_link" >&5 $as_echo "$comex_cv_c_mpi_test_link" >&6; } fi # That didn't work, so now let's try with specific libs. if test "x$comex_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mvapich libraries" >&5 $as_echo_n "checking for mvapich libraries... " >&6; } for lib in "-lmpich -lpthread" "-lmpich" do LIBS="$LIBS $lib" if ac_fn_c_try_link "$LINENO"; then : comex_cv_c_mpi_test_link="$lib"; break else comex_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$comex_save_LIBS" done LIBS="$comex_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_cv_c_mpi_test_link" >&5 $as_echo "$comex_cv_c_mpi_test_link" >&6; } fi if test "x$comex_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mpich libraries" >&5 $as_echo_n "checking for mpich libraries... " >&6; } for lib in "-lmpich -lpthread" "-lmpich" do LIBS="$LIBS $lib" if ac_fn_c_try_link "$LINENO"; then : comex_cv_c_mpi_test_link="$lib"; break else comex_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$comex_save_LIBS" done LIBS="$comex_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_cv_c_mpi_test_link" >&5 $as_echo "$comex_cv_c_mpi_test_link" >&6; } fi if test "x$comex_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hpmpi libraries" >&5 $as_echo_n "checking for hpmpi libraries... " >&6; } for lib in "-lhpmpio -lhpmpi" "-lhpmpi" do LIBS="$LIBS $lib" if ac_fn_c_try_link "$LINENO"; then : comex_cv_c_mpi_test_link="$lib"; break else comex_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$comex_save_LIBS" done LIBS="$comex_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_cv_c_mpi_test_link" >&5 $as_echo "$comex_cv_c_mpi_test_link" >&6; } fi if test "x$comex_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intelmpi libraries" >&5 $as_echo_n "checking for intelmpi libraries... " >&6; } for lib in "-lmpi -lmpiif -lmpigi -lrt -lpthread" "-lmpi -lmpiif -lmpigi" do LIBS="$LIBS $lib" if ac_fn_c_try_link "$LINENO"; then : comex_cv_c_mpi_test_link="$lib"; break else comex_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$comex_save_LIBS" done LIBS="$comex_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_cv_c_mpi_test_link" >&5 $as_echo "$comex_cv_c_mpi_test_link" >&6; } fi if test "x$comex_cv_c_mpi_test_link" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openmpi libraries" >&5 $as_echo_n "checking for openmpi libraries... " >&6; } for lib in "-lmpi -lpthread" "-lmpi" do LIBS="$LIBS $lib" if ac_fn_c_try_link "$LINENO"; then : comex_cv_c_mpi_test_link="$lib"; break else comex_cv_c_mpi_test_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext LIBS="$comex_save_LIBS" done LIBS="$comex_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_cv_c_mpi_test_link" >&5 $as_echo "$comex_cv_c_mpi_test_link" >&6; } fi rm -f conftest.$ac_ext LIBS="$comex_save_LIBS" LDFLAGS="$comex_save_LDFLAGS" CPPFLAGS="$comex_save_CPPFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu case $comex_cv_c_mpi_test_link in #( yes) : ;; #( no) : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "could not link a C MPI program See \`config.log' for more details" "$LINENO" 5; } ;; #( *) : MPI_LIBS="$comex_cv_c_mpi_test_link" ;; #( *) : ;; esac ;; #( no) : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a simple C MPI program compiles" >&5 $as_echo_n "checking whether a simple C MPI program compiles... " >&6; } if ${comex_cv_c_mpi_test_compile+:} false; then : $as_echo_n "(cached) " >&6 else comex_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $MPI_CPPFLAGS" if ac_fn_c_try_compile "$LINENO"; then : comex_cv_c_mpi_test_compile=yes else comex_cv_c_mpi_test_compile=no fi rm -f core conftest.err conftest.$ac_objext CPPFLAGS="$comex_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_cv_c_mpi_test_compile" >&5 $as_echo "$comex_cv_c_mpi_test_compile" >&6; } rm -f conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "x$comex_cv_c_mpi_test_compile" = xno; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "could not compile simple C MPI program See \`config.log' for more details" "$LINENO" 5; } fi ;; #( *) : ;; esac if test "x$cross_compiling" = xyes; then CROSS_COMPILING_TRUE= CROSS_COMPILING_FALSE='#' else CROSS_COMPILING_TRUE='#' CROSS_COMPILING_FALSE= fi # Establish the underlying network infrastructure (MPI, OFA, DMAPP, etc) # Clear the variables we will be using, just in case. comex_network= COMEX_NETWORK_LIBS= COMEX_NETWORK_LDFLAGS= COMEX_NETWORK_CPPFLAGS= # Check whether --enable-autodetect was given. if test "${enable_autodetect+set}" = set; then : enableval=$enable_autodetect; fi # First, all of the "--with" stuff is taken care of. comex_network_count=0 # Check whether --with-mpi-ts was given. if test "${with_mpi_ts+set}" = set; then : withval=$with_mpi_ts; fi if test "x$with_mpi_ts" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "comex_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_mpi_ts ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $arg" ;; #( -L*) : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS $arg" ;; #( -WL*) : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS $arg" ;; #( -I*) : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS $arg" ;; #( *.a) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $arg" ;; #( *.so) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi ;; #( -mkl*) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $arg" ;; #( *) : comex_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$comex_arg_parse_ok" = xno; then : if test "x$comex_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg/lib64"; comex_arg_parse_ok=yes elif test -d $arg/lib; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg/lib"; comex_arg_parse_ok=yes fi if test -d $arg/include64; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg/include64"; comex_arg_parse_ok=yes elif test -d $arg/include; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg/include"; comex_arg_parse_ok=yes fi else if test -d $arg/lib; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg/lib"; comex_arg_parse_ok=yes fi if test -d $arg/include; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg/include"; comex_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$comex_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg"; comex_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg"; comex_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$comex_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi_ts not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi_ts not parsed" >&2;} fi done fi if test "x$with_mpi_ts" != xno && test "x$with_mpi_ts" != x; then : comex_network=MPI_TS as_fn_arith $comex_network_count + 1 && comex_network_count=$as_val fi # Check whether --with-ofa was given. if test "${with_ofa+set}" = set; then : withval=$with_ofa; fi if test "x$with_ofa" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "comex_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_ofa ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $arg" ;; #( -L*) : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS $arg" ;; #( -WL*) : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS $arg" ;; #( -I*) : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS $arg" ;; #( *.a) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $arg" ;; #( *.so) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi ;; #( -mkl*) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $arg" ;; #( *) : comex_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$comex_arg_parse_ok" = xno; then : if test "x$comex_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg/lib64"; comex_arg_parse_ok=yes elif test -d $arg/lib; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg/lib"; comex_arg_parse_ok=yes fi if test -d $arg/include64; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg/include64"; comex_arg_parse_ok=yes elif test -d $arg/include; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg/include"; comex_arg_parse_ok=yes fi else if test -d $arg/lib; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg/lib"; comex_arg_parse_ok=yes fi if test -d $arg/include; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg/include"; comex_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$comex_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg"; comex_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg"; comex_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$comex_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ofa not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ofa not parsed" >&2;} fi done fi if test "x$with_ofa" != xno && test "x$with_ofa" != x; then : comex_network=OFA as_fn_arith $comex_network_count + 1 && comex_network_count=$as_val fi # Check whether --with-portals4 was given. if test "${with_portals4+set}" = set; then : withval=$with_portals4; fi if test "x$with_portals4" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "comex_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_portals4 ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $arg" ;; #( -L*) : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS $arg" ;; #( -WL*) : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS $arg" ;; #( -I*) : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS $arg" ;; #( *.a) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $arg" ;; #( *.so) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi ;; #( -mkl*) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $arg" ;; #( *) : comex_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$comex_arg_parse_ok" = xno; then : if test "x$comex_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg/lib64"; comex_arg_parse_ok=yes elif test -d $arg/lib; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg/lib"; comex_arg_parse_ok=yes fi if test -d $arg/include64; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg/include64"; comex_arg_parse_ok=yes elif test -d $arg/include; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg/include"; comex_arg_parse_ok=yes fi else if test -d $arg/lib; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg/lib"; comex_arg_parse_ok=yes fi if test -d $arg/include; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg/include"; comex_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$comex_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg"; comex_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg"; comex_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$comex_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_portals4 not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_portals4 not parsed" >&2;} fi done fi if test "x$with_portals4" != xno && test "x$with_portals4" != x; then : comex_network=PORTALS4 as_fn_arith $comex_network_count + 1 && comex_network_count=$as_val fi # Check whether --with-dmapp was given. if test "${with_dmapp+set}" = set; then : withval=$with_dmapp; fi if test "x$with_dmapp" != x; then : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "comex_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_dmapp ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $arg" ;; #( -L*) : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS $arg" ;; #( -WL*) : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS $arg" ;; #( -Wl*) : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS $arg" ;; #( -I*) : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS $arg" ;; #( *.a) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $arg" ;; #( *.so) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi ;; #( -mkl*) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $arg" ;; #( *) : comex_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$comex_arg_parse_ok" = xno; then : if test "x$comex_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg/lib64"; comex_arg_parse_ok=yes elif test -d $arg/lib; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg/lib"; comex_arg_parse_ok=yes fi if test -d $arg/include64; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg/include64"; comex_arg_parse_ok=yes elif test -d $arg/include; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg/include"; comex_arg_parse_ok=yes fi else if test -d $arg/lib; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg/lib"; comex_arg_parse_ok=yes fi if test -d $arg/include; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg/include"; comex_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$comex_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : COMEX_NETWORK_LDFLAGS="$COMEX_NETWORK_LDFLAGS -L$arg"; comex_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : COMEX_NETWORK_CPPFLAGS="$COMEX_NETWORK_CPPFLAGS -I$arg"; comex_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$comex_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_dmapp not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_dmapp not parsed" >&2;} fi done fi if test "x$with_dmapp" != xno && test "x$with_dmapp" != x; then : comex_network=DMAPP as_fn_arith $comex_network_count + 1 && comex_network_count=$as_val fi # Temporarily add COMEX_NETWORK_CPPFLAGS to CPPFLAGS. comex_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $COMEX_NETWORK_CPPFLAGS" # Temporarily add COMEX_NETWORK_LDFLAGS to LDFLAGS. comex_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $COMEX_NETWORK_LDFLAGS" # Temporarily add COMEX_NETWORK_LIBS to LIBS. comex_save_LIBS="$LIBS"; LIBS="$COMEX_NETWORK_LIBS $LIBS" if test "x$enable_autodetect" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for COMEX_NETWORK..." >&5 $as_echo "$as_me: searching for COMEX_NETWORK..." >&6;} if test "x$comex_network" = x && test "x$with_ofa" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for OFA..." >&5 $as_echo "$as_me: searching for OFA..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "infiniband/verbs.h" "ac_cv_header_infiniband_verbs_h" "$ac_includes_default" if test "x$ac_cv_header_infiniband_verbs_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ibv_open_device" >&5 $as_echo_n "checking for library containing ibv_open_device... " >&6; } if ${ac_cv_search_ibv_open_device+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ibv_open_device (); int main () { return ibv_open_device (); ; return 0; } _ACEOF for ac_lib in '' ibverbs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ibv_open_device=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ibv_open_device+:} false; then : break fi done if ${ac_cv_search_ibv_open_device+:} false; then : else ac_cv_search_ibv_open_device=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ibv_open_device" >&5 $as_echo "$ac_cv_search_ibv_open_device" >&6; } ac_res=$ac_cv_search_ibv_open_device if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_ibv_open_device in #( "none required") : ;; #( no) : ;; #( *) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $ac_cv_search_ibv_open_device" ;; esac fi if test "x$happy" = xyes; then : comex_network=OFA; with_ofa=yes; fi fi if test "x$comex_network" = x && test "x$with_portals4" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for PORTALS4..." >&5 $as_echo "$as_me: searching for PORTALS4..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "portals4.h" "ac_cv_header_portals4_h" "$ac_includes_default" if test "x$ac_cv_header_portals4_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing PtlInit" >&5 $as_echo_n "checking for library containing PtlInit... " >&6; } if ${ac_cv_search_PtlInit+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char PtlInit (); int main () { return PtlInit (); ; return 0; } _ACEOF for ac_lib in '' portals4; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_PtlInit=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_PtlInit+:} false; then : break fi done if ${ac_cv_search_PtlInit+:} false; then : else ac_cv_search_PtlInit=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_PtlInit" >&5 $as_echo "$ac_cv_search_PtlInit" >&6; } ac_res=$ac_cv_search_PtlInit if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing PtlFini" >&5 $as_echo_n "checking for library containing PtlFini... " >&6; } if ${ac_cv_search_PtlFini+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char PtlFini (); int main () { return PtlFini (); ; return 0; } _ACEOF for ac_lib in '' portals4; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_PtlFini=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_PtlFini+:} false; then : break fi done if ${ac_cv_search_PtlFini+:} false; then : else ac_cv_search_PtlFini=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_PtlFini" >&5 $as_echo "$ac_cv_search_PtlFini" >&6; } ac_res=$ac_cv_search_PtlFini if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : comex_network=PORTALS4; with_portals4=yes; fi fi if test "x$comex_network" = x && test "x$with_dmapp" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for DMAPP..." >&5 $as_echo "$as_me: searching for DMAPP..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "dmapp.h" "ac_cv_header_dmapp_h" "$ac_includes_default" if test "x$ac_cv_header_dmapp_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethugepagesize" >&5 $as_echo_n "checking for library containing gethugepagesize... " >&6; } if ${ac_cv_search_gethugepagesize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethugepagesize (); int main () { return gethugepagesize (); ; return 0; } _ACEOF for ac_lib in '' hugetlbfs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gethugepagesize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gethugepagesize+:} false; then : break fi done if ${ac_cv_search_gethugepagesize+:} false; then : else ac_cv_search_gethugepagesize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethugepagesize" >&5 $as_echo "$ac_cv_search_gethugepagesize" >&6; } ac_res=$ac_cv_search_gethugepagesize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_LIBHUGETLBFS 1" >>confdefs.h else $as_echo "#define HAVE_LIBHUGETLBFS 0" >>confdefs.h fi case $ac_cv_search_gethugepagesize in #( "none required") : ;; #( no) : ;; #( *) : # add missing lib to COMEX_NETWORK_LIBS if not there case $COMEX_NETWORK_LIBS in #( *$ac_cv_search_gethugepagesize*) : ;; #( *) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $ac_cv_search_gethugepagesize" ;; esac ;; esac ac_fn_c_check_type "$LINENO" "dmapp_lock_desc_t" "ac_cv_type_dmapp_lock_desc_t" "#include " if test "x$ac_cv_type_dmapp_lock_desc_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DMAPP_LOCK_DESC_T 1 _ACEOF fi ac_fn_c_check_type "$LINENO" "dmapp_lock_handle_t" "ac_cv_type_dmapp_lock_handle_t" "#include " if test "x$ac_cv_type_dmapp_lock_handle_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DMAPP_LOCK_HANDLE_T 1 _ACEOF fi fi if test "x$happy" = xyes; then : comex_network=DMAPP; with_dmapp=yes; fi fi if test "x$comex_network" = x; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !!!" >&5 $as_echo "$as_me: WARNING: !!!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No COMEX_NETWORK detected, defaulting to MPI_TS" >&5 $as_echo "$as_me: WARNING: No COMEX_NETWORK detected, defaulting to MPI_TS" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !!!" >&5 $as_echo "$as_me: WARNING: !!!" >&2;} comex_network=MPI_TS; with_mpi_ts=yes fi else # Not autodetecting # Check whether multiple comex networks were selected by user. case $comex_network_count in #( 0) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No COMEX_NETWORK specified, defaulting to MPI_TS" >&5 $as_echo "$as_me: WARNING: No COMEX_NETWORK specified, defaulting to MPI_TS" >&2;} comex_network=MPI_TS; with_mpi_ts=yes ;; #( 1) : if test "x$comex_network" = xMPI_TS; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for MPI_TS..." >&5 $as_echo "$as_me: searching for MPI_TS..." >&6;} happy=yes CPPFLAGS="$CPPFLAGS $MPI_CPPFLAGS" LDFLAGS="$LDFLAGS $MPI_LDFLAGS" LIBS="$LIBS $MPI_LIBS" if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "mpi.h" "ac_cv_header_mpi_h" "$ac_includes_default" if test "x$ac_cv_header_mpi_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing MPI_Init" >&5 $as_echo_n "checking for library containing MPI_Init... " >&6; } if ${ac_cv_search_MPI_Init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char MPI_Init (); int main () { return MPI_Init (); ; return 0; } _ACEOF for ac_lib in '' ; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_MPI_Init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_MPI_Init+:} false; then : break fi done if ${ac_cv_search_MPI_Init+:} false; then : else ac_cv_search_MPI_Init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_MPI_Init" >&5 $as_echo "$ac_cv_search_MPI_Init" >&6; } ac_res=$ac_cv_search_MPI_Init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : comex_network=MPI_TS; with_mpi_ts=yes; else as_fn_error $? "test for COMEX_NETWORK=MPI_TS failed" "$LINENO" 5 fi fi if test "x$comex_network" = xOFA; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for OFA..." >&5 $as_echo "$as_me: searching for OFA..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "infiniband/verbs.h" "ac_cv_header_infiniband_verbs_h" "$ac_includes_default" if test "x$ac_cv_header_infiniband_verbs_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ibv_open_device" >&5 $as_echo_n "checking for library containing ibv_open_device... " >&6; } if ${ac_cv_search_ibv_open_device+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ibv_open_device (); int main () { return ibv_open_device (); ; return 0; } _ACEOF for ac_lib in '' ibverbs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ibv_open_device=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_ibv_open_device+:} false; then : break fi done if ${ac_cv_search_ibv_open_device+:} false; then : else ac_cv_search_ibv_open_device=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ibv_open_device" >&5 $as_echo "$ac_cv_search_ibv_open_device" >&6; } ac_res=$ac_cv_search_ibv_open_device if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi case $ac_cv_search_ibv_open_device in #( "none required") : ;; #( no) : ;; #( *) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $ac_cv_search_ibv_open_device" ;; esac fi if test "x$happy" = xyes; then : comex_network=OFA; with_ofa=yes; else as_fn_error $? "test for COMEX_NETWORK=OFA failed" "$LINENO" 5 fi fi if test "x$comex_network" = xPORTALS4; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for PORTALS4..." >&5 $as_echo "$as_me: searching for PORTALS4..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "portals4.h" "ac_cv_header_portals4_h" "$ac_includes_default" if test "x$ac_cv_header_portals4_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing PtlInit" >&5 $as_echo_n "checking for library containing PtlInit... " >&6; } if ${ac_cv_search_PtlInit+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char PtlInit (); int main () { return PtlInit (); ; return 0; } _ACEOF for ac_lib in '' portals4; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_PtlInit=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_PtlInit+:} false; then : break fi done if ${ac_cv_search_PtlInit+:} false; then : else ac_cv_search_PtlInit=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_PtlInit" >&5 $as_echo "$ac_cv_search_PtlInit" >&6; } ac_res=$ac_cv_search_PtlInit if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing PtlFini" >&5 $as_echo_n "checking for library containing PtlFini... " >&6; } if ${ac_cv_search_PtlFini+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char PtlFini (); int main () { return PtlFini (); ; return 0; } _ACEOF for ac_lib in '' portals4; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_PtlFini=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_PtlFini+:} false; then : break fi done if ${ac_cv_search_PtlFini+:} false; then : else ac_cv_search_PtlFini=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_PtlFini" >&5 $as_echo "$ac_cv_search_PtlFini" >&6; } ac_res=$ac_cv_search_PtlFini if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else happy=no fi fi if test "x$happy" = xyes; then : comex_network=PORTALS4; with_portals4=yes; else as_fn_error $? "test for COMEX_NETWORK=PORTALS4 failed" "$LINENO" 5 fi fi if test "x$comex_network" = xDMAPP; then : { $as_echo "$as_me:${as_lineno-$LINENO}: searching for DMAPP..." >&5 $as_echo "$as_me: searching for DMAPP..." >&6;} happy=yes if test "x$happy" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "dmapp.h" "ac_cv_header_dmapp_h" "$ac_includes_default" if test "x$ac_cv_header_dmapp_h" = xyes; then : else happy=no fi fi if test "x$happy" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethugepagesize" >&5 $as_echo_n "checking for library containing gethugepagesize... " >&6; } if ${ac_cv_search_gethugepagesize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethugepagesize (); int main () { return gethugepagesize (); ; return 0; } _ACEOF for ac_lib in '' hugetlbfs; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gethugepagesize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gethugepagesize+:} false; then : break fi done if ${ac_cv_search_gethugepagesize+:} false; then : else ac_cv_search_gethugepagesize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethugepagesize" >&5 $as_echo "$ac_cv_search_gethugepagesize" >&6; } ac_res=$ac_cv_search_gethugepagesize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_LIBHUGETLBFS 1" >>confdefs.h else $as_echo "#define HAVE_LIBHUGETLBFS 0" >>confdefs.h fi case $ac_cv_search_gethugepagesize in #( "none required") : ;; #( no) : ;; #( *) : # add missing lib to COMEX_NETWORK_LIBS if not there case $COMEX_NETWORK_LIBS in #( *$ac_cv_search_gethugepagesize*) : ;; #( *) : COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $ac_cv_search_gethugepagesize" ;; esac ;; esac ac_fn_c_check_type "$LINENO" "dmapp_lock_desc_t" "ac_cv_type_dmapp_lock_desc_t" "#include " if test "x$ac_cv_type_dmapp_lock_desc_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DMAPP_LOCK_DESC_T 1 _ACEOF fi ac_fn_c_check_type "$LINENO" "dmapp_lock_handle_t" "ac_cv_type_dmapp_lock_handle_t" "#include " if test "x$ac_cv_type_dmapp_lock_handle_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DMAPP_LOCK_HANDLE_T 1 _ACEOF fi fi if test "x$happy" = xyes; then : comex_network=DMAPP; with_dmapp=yes; else as_fn_error $? "test for COMEX_NETWORK=DMAPP failed" "$LINENO" 5 fi fi ;; #( *) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: too many comex networks specified: $comex_network_count" >&5 $as_echo "$as_me: WARNING: too many comex networks specified: $comex_network_count" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: the following were specified:" >&5 $as_echo "$as_me: WARNING: the following were specified:" >&2;} if test "x$with_mpi_ts" != x && test "x$with_mpi_ts" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-mpi-ts=$with_mpi_ts" >&5 $as_echo "$as_me: WARNING: --with-mpi-ts=$with_mpi_ts" >&2;} fi if test "x$with_ofa" != x && test "x$with_ofa" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-ofa=$with_ofa" >&5 $as_echo "$as_me: WARNING: --with-ofa=$with_ofa" >&2;} fi if test "x$with_portals4" != x && test "x$with_portals4" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-portals4=$with_portals4" >&5 $as_echo "$as_me: WARNING: --with-portals4=$with_portals4" >&2;} fi if test "x$with_dmapp" != x && test "x$with_dmapp" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-dmapp=$with_dmapp" >&5 $as_echo "$as_me: WARNING: --with-dmapp=$with_dmapp" >&2;} fi as_fn_error $? "please select only one comex network" "$LINENO" 5 ;; esac fi # Remove COMEX_NETWORK_CPPFLAGS from CPPFLAGS. CPPFLAGS="$comex_save_CPPFLAGS" # Remove COMEX_NETWORK_LDFLAGS from LDFLAGS. LDFLAGS="$comex_save_LDFLAGS" # Remove COMEX_NETWORK_LIBS from LIBS. LIBS="$comex_save_LIBS" if test "x$with_mpi_ts" != x && test "x$with_mpi_ts" != xno; then COMEX_NETWORK_MPI_TS_TRUE= COMEX_NETWORK_MPI_TS_FALSE='#' else COMEX_NETWORK_MPI_TS_TRUE='#' COMEX_NETWORK_MPI_TS_FALSE= fi if test "x$with_ofa" != x && test "x$with_ofa" != xno; then COMEX_NETWORK_OFA_TRUE= COMEX_NETWORK_OFA_FALSE='#' else COMEX_NETWORK_OFA_TRUE='#' COMEX_NETWORK_OFA_FALSE= fi if test "x$with_portals4" != x && test "x$with_portals4" != xno; then COMEX_NETWORK_PORTALS4_TRUE= COMEX_NETWORK_PORTALS4_FALSE='#' else COMEX_NETWORK_PORTALS4_TRUE='#' COMEX_NETWORK_PORTALS4_FALSE= fi if test "x$with_dmapp" != x && test "x$with_dmapp" != xno; then COMEX_NETWORK_DMAPP_TRUE= COMEX_NETWORK_DMAPP_FALSE='#' else COMEX_NETWORK_DMAPP_TRUE='#' COMEX_NETWORK_DMAPP_FALSE= fi if test "x$with_mpi_ts" != x && test "x$with_mpi_ts" != xno; then : $as_echo "#define COMEX_NETWORK_MPI_TS 1" >>confdefs.h else $as_echo "#define COMEX_NETWORK_MPI_TS 0" >>confdefs.h fi if test "x$with_ofa" != x && test "x$with_ofa" != xno; then : $as_echo "#define COMEX_NETWORK_OFA 1" >>confdefs.h else $as_echo "#define COMEX_NETWORK_OFA 0" >>confdefs.h fi if test "x$with_portals4" != x && test "x$with_portals4" != xno; then : $as_echo "#define COMEX_NETWORK_PORTALS4 1" >>confdefs.h else $as_echo "#define COMEX_NETWORK_PORTALS4 0" >>confdefs.h fi if test "x$with_dmapp" != x && test "x$with_dmapp" != xno; then : $as_echo "#define COMEX_NETWORK_DMAPP 1" >>confdefs.h else $as_echo "#define COMEX_NETWORK_DMAPP 0" >>confdefs.h fi # Checks for C header files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable assertions" >&5 $as_echo_n "checking whether to enable assertions... " >&6; } # Check whether --enable-assert was given. if test "${enable_assert+set}" = set; then : enableval=$enable_assert; ac_enable_assert=$enableval if test "x$enableval" = xno; then : $as_echo "#define NDEBUG 1" >>confdefs.h elif test "x$enableval" != xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: invalid argument supplied to --enable-assert" >&5 $as_echo "$as_me: WARNING: invalid argument supplied to --enable-assert" >&2;} ac_enable_assert=yes fi else ac_enable_assert=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_enable_assert" >&5 $as_echo "$ac_enable_assert" >&6; } ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval \${$as_ac_Header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if ${ac_cv_header_stdbool_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { _Bool s: 1; _Bool t; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(_Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (_Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ _Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; int main () { bool e = &s; *pq |= q; *pq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdbool_h=yes else ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 $as_echo "$ac_cv_header_stdbool_h" >&6; } ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi if test $ac_cv_header_stdbool_h = yes; then $as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if ${ac_cv_header_sys_wait_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes else ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 $as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi for ac_header in assert.h do : ac_fn_c_check_header_mongrel "$LINENO" "assert.h" "ac_cv_header_assert_h" "$ac_includes_default" if test "x$ac_cv_header_assert_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ASSERT_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_ASSERT_H 0 _ACEOF fi done for ac_header in errno.h do : ac_fn_c_check_header_mongrel "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default" if test "x$ac_cv_header_errno_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ERRNO_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_ERRNO_H 0 _ACEOF fi done for ac_header in getopt.h do : ac_fn_c_check_header_mongrel "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" if test "x$ac_cv_header_getopt_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETOPT_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_GETOPT_H 0 _ACEOF fi done for ac_header in math.h do : ac_fn_c_check_header_mongrel "$LINENO" "math.h" "ac_cv_header_math_h" "$ac_includes_default" if test "x$ac_cv_header_math_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MATH_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_MATH_H 0 _ACEOF fi done for ac_header in pthread.h do : ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PTHREAD_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_PTHREAD_H 0 _ACEOF fi done for ac_header in semaphore.h do : ac_fn_c_check_header_mongrel "$LINENO" "semaphore.h" "ac_cv_header_semaphore_h" "$ac_includes_default" if test "x$ac_cv_header_semaphore_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SEMAPHORE_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SEMAPHORE_H 0 _ACEOF fi done for ac_header in stdint.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 0 _ACEOF fi done for ac_header in stdio.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdio.h" "ac_cv_header_stdio_h" "$ac_includes_default" if test "x$ac_cv_header_stdio_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDIO_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STDIO_H 0 _ACEOF fi done for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 0 _ACEOF fi done for ac_header in string.h do : ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRING_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STRING_H 0 _ACEOF fi done for ac_header in strings.h do : ac_fn_c_check_header_mongrel "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default" if test "x$ac_cv_header_strings_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRINGS_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STRINGS_H 0 _ACEOF fi done for ac_header in sys/time.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" if test "x$ac_cv_header_sys_time_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_TIME_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_TIME_H 0 _ACEOF fi done for ac_header in sys/types.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" if test "x$ac_cv_header_sys_types_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_TYPES_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_SYS_TYPES_H 0 _ACEOF fi done for ac_header in unistd.h do : ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" if test "x$ac_cv_header_unistd_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UNISTD_H 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_UNISTD_H 0 _ACEOF fi done # Checks for C typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 $as_echo_n "checking for C/C++ restrict keyword... " >&6; } if ${ac_cv_c_restrict+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_restrict=no # The order here caters to the fact that C++ does not require restrict. for ac_kw in __restrict __restrict__ _Restrict restrict; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int * int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int main () { int s[1]; int * $ac_kw t = s; t[0] = 0; return foo(t) ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_restrict=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_restrict" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 $as_echo "$ac_cv_c_restrict" >&6; } case $ac_cv_c_restrict in restrict) ;; no) $as_echo "#define restrict /**/" >>confdefs.h ;; *) cat >>confdefs.h <<_ACEOF #define restrict $ac_cv_c_restrict _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5 $as_echo_n "checking for working volatile... " >&6; } if ${ac_cv_c_volatile+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { volatile int x; int * volatile y = (int *) 0; return !x && !y; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_volatile=yes else ac_cv_c_volatile=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 $as_echo "$ac_cv_c_volatile" >&6; } if test $ac_cv_c_volatile = no; then $as_echo "#define volatile /**/" >>confdefs.h fi ac_fn_c_find_intX_t "$LINENO" "8" "ac_cv_c_int8_t" case $ac_cv_c_int8_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int8_t $ac_cv_c_int8_t _ACEOF ;; esac ac_fn_c_find_intX_t "$LINENO" "16" "ac_cv_c_int16_t" case $ac_cv_c_int16_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int16_t $ac_cv_c_int16_t _ACEOF ;; esac ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" case $ac_cv_c_int32_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int32_t $ac_cv_c_int32_t _ACEOF ;; esac ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" case $ac_cv_c_int64_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int64_t $ac_cv_c_int64_t _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) $as_echo "#define _UINT8_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint8_t $ac_cv_c_uint8_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" case $ac_cv_c_uint16_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define uint16_t $ac_cv_c_uint16_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) $as_echo "#define _UINT32_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint32_t $ac_cv_c_uint32_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" case $ac_cv_c_uint64_t in #( no|yes) ;; #( *) $as_echo "#define _UINT64_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint64_t $ac_cv_c_uint64_t _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PTRDIFF_T 1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for preprocessor symbol for function name" >&5 $as_echo_n "checking for preprocessor symbol for function name... " >&6; } if ${comex_cv_cpp_function+:} false; then : $as_echo_n "(cached) " >&6 else if test x$comex_cv_cpp_function = x; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern int printf(const char *format, ...); int main () { printf("__func__ = %s\n", __func__); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : comex_cv_cpp_function=__func__ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test x$comex_cv_cpp_function = x; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern int printf(const char *format, ...); int main () { printf("__FUNCTION__ = %s\n", __FUNCTION__); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : comex_cv_cpp_function=__FUNCTION__ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test x$comex_cv_cpp_function = x; then : comex_cv_cpp_function='"Unknown"' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_cv_cpp_function" >&5 $as_echo "$comex_cv_cpp_function" >&6; } cat >>confdefs.h <<_ACEOF #define FUNCTION_NAME $comex_cv_cpp_function _ACEOF # Check whether --enable-weak was given. if test "${enable_weak+set}" = set; then : enableval=$enable_weak; else enable_weak=yes fi if test "x$comex_cv_target_base" = xCYGWIN; then : enable_weak=no fi if test "x$enable_weak" = xyes; then : ax_sys_weak_alias=no # Test whether compiler accepts #pragma form of weak aliasing { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports #pragma weak" >&5 $as_echo_n "checking whether $CC supports #pragma weak... " >&6; } if ${ax_cv_sys_weak_alias_pragma+:} false; then : $as_echo_n "(cached) " >&6 else # Try linking with a weak alias... cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void weakf(int c); #pragma weak weakf = __weakf void __weakf(int c) {} int main () { weakf(0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_sys_weak_alias_pragma=yes else ax_cv_sys_weak_alias_pragma=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_sys_weak_alias_pragma" >&5 $as_echo "$ax_cv_sys_weak_alias_pragma" >&6; } # What was the result of the test? if test $ax_sys_weak_alias = no && test $ax_cv_sys_weak_alias_pragma = yes; then : ax_sys_weak_alias=pragma $as_echo "#define HAVE_SYS_WEAK_ALIAS_PRAGMA 1" >>confdefs.h fi else ax_cv_sys_weak_alias_pragma=no $as_echo "#define HAVE_SYS_WEAK_ALIAS_PRAGMA 0" >>confdefs.h fi if test "x$ax_cv_sys_weak_alias_pragma" = xyes; then HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE= HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE='#' else HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE='#' HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE= fi # enable shared libs automatically if profiling using weak symbols if test "x$ax_cv_sys_weak_alias_pragma" = xyes; then : if test "x$enable_profiling" = xyes; then : enable_shared=yes fi fi # Checks for C type sizes. comex_save_LIBS="$LIBS"; LIBS="$LIBS $MPI_LIBS" comex_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $MPI_LDFLAGS" comex_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $MPI_CPPFLAGS" # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of MPI_Aint" >&5 $as_echo_n "checking size of MPI_Aint... " >&6; } if ${ac_cv_sizeof_MPI_Aint+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (MPI_Aint))" "ac_cv_sizeof_MPI_Aint" "#include "; then : else if test "$ac_cv_type_MPI_Aint" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (MPI_Aint) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_MPI_Aint=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_MPI_Aint" >&5 $as_echo "$ac_cv_sizeof_MPI_Aint" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_MPI_AINT $ac_cv_sizeof_MPI_Aint _ACEOF LIBS="$comex_save_LIBS" LDFLAGS="$comex_save_LDFLAGS" CPPFLAGS="$comex_save_CPPFLAGS" # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5 $as_echo_n "checking size of void*... " >&6; } if ${ac_cv_sizeof_voidp+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default"; then : else if test "$ac_cv_type_voidp" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void*) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_voidp=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_voidp" >&5 $as_echo "$ac_cv_sizeof_voidp" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_VOIDP $ac_cv_sizeof_voidp _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 $as_echo_n "checking size of char... " >&6; } if ${ac_cv_sizeof_char+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then : else if test "$ac_cv_type_char" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (char) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_char=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 $as_echo "$ac_cv_sizeof_char" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_CHAR $ac_cv_sizeof_char _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 $as_echo_n "checking size of short... " >&6; } if ${ac_cv_sizeof_short+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : else if test "$ac_cv_type_short" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (short) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_short=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 $as_echo "$ac_cv_sizeof_short" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 $as_echo_n "checking size of int... " >&6; } if ${ac_cv_sizeof_int+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : else if test "$ac_cv_type_int" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_int=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 $as_echo "$ac_cv_sizeof_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 $as_echo_n "checking size of long... " >&6; } if ${ac_cv_sizeof_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 $as_echo "$ac_cv_sizeof_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 $as_echo_n "checking size of long long... " >&6; } if ${ac_cv_sizeof_long_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 $as_echo "$ac_cv_sizeof_long_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float" >&5 $as_echo_n "checking size of float... " >&6; } if ${ac_cv_sizeof_float+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float" "$ac_includes_default"; then : else if test "$ac_cv_type_float" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (float) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_float=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5 $as_echo "$ac_cv_sizeof_float" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_FLOAT $ac_cv_sizeof_float _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 $as_echo_n "checking size of double... " >&6; } if ${ac_cv_sizeof_double+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then : else if test "$ac_cv_type_double" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (double) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_double=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 $as_echo "$ac_cv_sizeof_double" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_DOUBLE $ac_cv_sizeof_double _ACEOF # Checks for C library functions. for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpagesize do : ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" if test "x$ac_cv_func_getpagesize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 $as_echo_n "checking for working mmap... " >&6; } if ${ac_cv_func_mmap_fixed_mapped+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_mmap_fixed_mapped=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include #if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main () { char *data, *data2, *data3; const char *cdata2; int i, pagesize; int fd, fd2; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) return 2; if (write (fd, data, pagesize) != pagesize) return 3; close (fd); /* Next, check that the tail of a page is zero-filled. File must have non-zero length, otherwise we risk SIGBUS for entire page. */ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); if (fd2 < 0) return 4; cdata2 = ""; if (write (fd2, cdata2, 1) != 1) return 5; data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); if (data2 == MAP_FAILED) return 6; for (i = 0; i < pagesize; ++i) if (*(data2 + i)) return 7; close (fd2); if (munmap (data2, pagesize)) return 8; /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) return 9; if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) return 10; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) return 11; /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) return 12; if (read (fd, data3, pagesize) != pagesize) return 13; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) return 14; close (fd); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_mmap_fixed_mapped=yes else ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 $as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then $as_echo "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sqrt" >&5 $as_echo_n "checking for library containing sqrt... " >&6; } if ${ac_cv_search_sqrt+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sqrt (); int main () { return sqrt (); ; return 0; } _ACEOF for ac_lib in '' m; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_sqrt=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_sqrt+:} false; then : break fi done if ${ac_cv_search_sqrt+:} false; then : else ac_cv_search_sqrt=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sqrt" >&5 $as_echo "$ac_cv_search_sqrt" >&6; } ac_res=$ac_cv_search_sqrt if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define SQRT 1" >>confdefs.h else $as_echo "#define SQRT 0" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sem_open" >&5 $as_echo_n "checking for library containing sem_open... " >&6; } if ${ac_cv_search_sem_open+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sem_open (); int main () { return sem_open (); ; return 0; } _ACEOF for ac_lib in '' rt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_sem_open=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_sem_open+:} false; then : break fi done if ${ac_cv_search_sem_open+:} false; then : else ac_cv_search_sem_open=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sem_open" >&5 $as_echo "$ac_cv_search_sem_open" >&6; } ac_res=$ac_cv_search_sem_open if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define SEM_OPEN 1" >>confdefs.h else $as_echo "#define SEM_OPEN 0" >>confdefs.h fi for ac_func in bzero do : ac_fn_c_check_func "$LINENO" "bzero" "ac_cv_func_bzero" if test "x$ac_cv_func_bzero" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BZERO 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_BZERO 0 _ACEOF fi done for ac_func in gettimeofday do : ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday" if test "x$ac_cv_func_gettimeofday" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETTIMEOFDAY 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_GETTIMEOFDAY 0 _ACEOF fi done for ac_func in memset do : ac_fn_c_check_func "$LINENO" "memset" "ac_cv_func_memset" if test "x$ac_cv_func_memset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MEMSET 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_MEMSET 0 _ACEOF fi done for ac_func in munmap do : ac_fn_c_check_func "$LINENO" "munmap" "ac_cv_func_munmap" if test "x$ac_cv_func_munmap" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MUNMAP 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_MUNMAP 0 _ACEOF fi done for ac_func in strchr do : ac_fn_c_check_func "$LINENO" "strchr" "ac_cv_func_strchr" if test "x$ac_cv_func_strchr" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRCHR 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STRCHR 0 _ACEOF fi done for ac_func in strdup do : ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup" if test "x$ac_cv_func_strdup" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRDUP 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STRDUP 0 _ACEOF fi done for ac_func in strncasecmp do : ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp" if test "x$ac_cv_func_strncasecmp" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRNCASECMP 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STRNCASECMP 0 _ACEOF fi done for ac_func in strstr do : ac_fn_c_check_func "$LINENO" "strstr" "ac_cv_func_strstr" if test "x$ac_cv_func_strstr" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRSTR 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_STRSTR 0 _ACEOF fi done # Checks for C libraries. blas_size=4 blas_size_hack=no # Check whether --with-blas was given. if test "${with_blas+set}" = set; then : withval=$with_blas; blas_size_hack=yes fi # Check whether --with-blas4 was given. if test "${with_blas4+set}" = set; then : withval=$with_blas4; blas_size=4; with_blas="$with_blas4" fi # Check whether --with-blas8 was given. if test "${with_blas8+set}" = set; then : withval=$with_blas8; blas_size=8; with_blas="$with_blas8" fi comex_blas_ok=no if test "x$with_blas" = xno; then : comex_blas_ok=skip fi # Parse --with-blas argument. Clear previous values first. BLAS_LIBS= BLAS_LDFLAGS= BLAS_CPPFLAGS= if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "comex_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_blas ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : BLAS_LIBS="$BLAS_LIBS $arg" ;; #( -L*) : BLAS_LDFLAGS="$BLAS_LDFLAGS $arg" ;; #( -WL*) : BLAS_LDFLAGS="$BLAS_LDFLAGS $arg" ;; #( -Wl*) : BLAS_LDFLAGS="$BLAS_LDFLAGS $arg" ;; #( -I*) : BLAS_CPPFLAGS="$BLAS_CPPFLAGS $arg" ;; #( *.a) : BLAS_LIBS="$BLAS_LIBS $arg" ;; #( *.so) : BLAS_LIBS="$BLAS_LIBS $arg" ;; #( *lib) : if test -d $arg; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( -mkl*) : BLAS_LIBS="$BLAS_LIBS $arg" ;; #( *) : comex_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$comex_arg_parse_ok" = xno; then : if test "x$comex_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg/lib64"; comex_arg_parse_ok=yes elif test -d $arg/lib; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg/lib"; comex_arg_parse_ok=yes fi if test -d $arg/include64; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg/include64"; comex_arg_parse_ok=yes elif test -d $arg/include; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg/include"; comex_arg_parse_ok=yes fi else if test -d $arg/lib; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg/lib"; comex_arg_parse_ok=yes fi if test -d $arg/include; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg/include"; comex_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$comex_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg"; comex_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg"; comex_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$comex_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi done comex_save_LIBS="$LIBS" comex_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$BLAS_LDFLAGS $LDFLAGS" comex_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$BLAS_CPPFLAGS $CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: Attempting to locate BLAS library" >&5 $as_echo "$as_me: Attempting to locate BLAS library" >&6;} # First, check environment/command-line variables. # If failed, erase BLAS_LIBS but maintain BLAS_LDFLAGS and BLAS_CPPFLAGS. if test $comex_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS with user-supplied flags" >&5 $as_echo_n "checking for BLAS with user-supplied flags... " >&6; } LIBS="$BLAS_LIBS $LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu comex_blas_ok=no if test "x$comex_blas_ok" = xno; then : caxpy=caxpy daxpy=daxpy saxpy=saxpy zaxpy=zaxpy ccopy=ccopy dcopy=dcopy scopy=scopy zcopy=zcopy cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy_ daxpy=daxpy_ saxpy=saxpy_ zaxpy=zaxpy_ ccopy=ccopy_ dcopy=dcopy_ scopy=scopy_ zcopy=zcopy_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy__ daxpy=daxpy__ saxpy=saxpy__ zaxpy=zaxpy__ ccopy=ccopy__ dcopy=dcopy__ scopy=scopy__ zcopy=zcopy__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM daxpy=DGEMM saxpy=SGEMM zaxpy=ZGEMM ccopy=CCOPY dcopy=DCOPY scopy=SCOPY zcopy=ZCOPY cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM_ daxpy=DGEMM_ saxpy=SGEMM_ zaxpy=ZGEMM_ ccopy=CCOPY_ dcopy=DCOPY_ scopy=SCOPY_ zcopy=ZCOPY_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM__ daxpy=DGEMM__ saxpy=SGEMM__ zaxpy=ZGEMM__ ccopy=CCOPY__ dcopy=DCOPY__ scopy=SCOPY__ zcopy=ZCOPY__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=NOTFOUND daxpy=NOTFOUND saxpy=NOTFOUND zaxpy=NOTFOUND ccopy=NOTFOUND dcopy=NOTFOUND scopy=NOTFOUND zcopy=NOTFOUND fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$comex_save_LIBS" if test $comex_blas_ok = yes; then : if test $blas_size_hack = yes; then : case "$BLAS_LIBS $LIBS $LDFLAGS $CPPFLAGS" in #( *ilp64*) : blas_size=8 ;; #( # Intel MKL *_int64*) : blas_size=8 ;; #( *) : ;; esac fi fi # AMD ACML { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_blas_ok" >&5 $as_echo "$comex_blas_ok" >&6; } fi # AMD Core Math Library (ACML) if test $comex_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in AMD Core Math Library" >&5 $as_echo_n "checking for BLAS in AMD Core Math Library... " >&6; } # add -lacml to BLAS_LIBS if missing from LIBS case $LIBS in #( *acml*) : ;; #( *) : BLAS_LIBS="-lacml" ;; esac LIBS="$BLAS_LIBS $LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu comex_blas_ok=no if test "x$comex_blas_ok" = xno; then : caxpy=caxpy daxpy=daxpy saxpy=saxpy zaxpy=zaxpy ccopy=ccopy dcopy=dcopy scopy=scopy zcopy=zcopy cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy_ daxpy=daxpy_ saxpy=saxpy_ zaxpy=zaxpy_ ccopy=ccopy_ dcopy=dcopy_ scopy=scopy_ zcopy=zcopy_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy__ daxpy=daxpy__ saxpy=saxpy__ zaxpy=zaxpy__ ccopy=ccopy__ dcopy=dcopy__ scopy=scopy__ zcopy=zcopy__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM daxpy=DGEMM saxpy=SGEMM zaxpy=ZGEMM ccopy=CCOPY dcopy=DCOPY scopy=SCOPY zcopy=ZCOPY cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM_ daxpy=DGEMM_ saxpy=SGEMM_ zaxpy=ZGEMM_ ccopy=CCOPY_ dcopy=DCOPY_ scopy=SCOPY_ zcopy=ZCOPY_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM__ daxpy=DGEMM__ saxpy=SGEMM__ zaxpy=ZGEMM__ ccopy=CCOPY__ dcopy=DCOPY__ scopy=SCOPY__ zcopy=ZCOPY__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=NOTFOUND daxpy=NOTFOUND saxpy=NOTFOUND zaxpy=NOTFOUND ccopy=NOTFOUND dcopy=NOTFOUND scopy=NOTFOUND zcopy=NOTFOUND fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$comex_save_LIBS" if test "x$comex_blas_ok" = xyes; then : if test $blas_size_hack = yes; then : case "$BLAS_LIBS $LIBS $LDFLAGS $CPPFLAGS" in #( *_int64*) : blas_size=8 ;; #( *) : ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_blas_ok" >&5 $as_echo "$comex_blas_ok" >&6; } fi # Intel MKL library if test $comex_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in Intel Math Kernel Library" >&5 $as_echo_n "checking for BLAS in Intel Math Kernel Library... " >&6; } # add -lmkl to BLAS_LIBS if missing from LIBS case $LIBS in #( *mkl*) : ;; #( *) : BLAS_LIBS="-lmkl" ;; esac LIBS="$BLAS_LIBS $LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu comex_blas_ok=no if test "x$comex_blas_ok" = xno; then : caxpy=caxpy daxpy=daxpy saxpy=saxpy zaxpy=zaxpy ccopy=ccopy dcopy=dcopy scopy=scopy zcopy=zcopy cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy_ daxpy=daxpy_ saxpy=saxpy_ zaxpy=zaxpy_ ccopy=ccopy_ dcopy=dcopy_ scopy=scopy_ zcopy=zcopy_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy__ daxpy=daxpy__ saxpy=saxpy__ zaxpy=zaxpy__ ccopy=ccopy__ dcopy=dcopy__ scopy=scopy__ zcopy=zcopy__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM daxpy=DGEMM saxpy=SGEMM zaxpy=ZGEMM ccopy=CCOPY dcopy=DCOPY scopy=SCOPY zcopy=ZCOPY cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM_ daxpy=DGEMM_ saxpy=SGEMM_ zaxpy=ZGEMM_ ccopy=CCOPY_ dcopy=DCOPY_ scopy=SCOPY_ zcopy=ZCOPY_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM__ daxpy=DGEMM__ saxpy=SGEMM__ zaxpy=ZGEMM__ ccopy=CCOPY__ dcopy=DCOPY__ scopy=SCOPY__ zcopy=ZCOPY__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=NOTFOUND daxpy=NOTFOUND saxpy=NOTFOUND zaxpy=NOTFOUND ccopy=NOTFOUND dcopy=NOTFOUND scopy=NOTFOUND zcopy=NOTFOUND fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$comex_save_LIBS" if test "x$comex_blas_ok" = xyes; then : if test $blas_size_hack = yes; then : case "$BLAS_LIBS $LIBS $LDFLAGS $CPPFLAGS" in #( *ilp64*) : blas_size=8 ;; #( *) : ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_blas_ok" >&5 $as_echo "$comex_blas_ok" >&6; } fi # ATLAS library (http://math-atlas.sourceforge.net/) if test $comex_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in ATLAS" >&5 $as_echo_n "checking for BLAS in ATLAS... " >&6; } if test "x$enable_f77" = xno; then : # add -lcblas if needed but missing from LIBS case $LIBS in #( *cblas*) : ;; #( *) : BLAS_LIBS="-lcblas" ;; esac else # add -lf77blas if needed but missing from LIBS case $LIBS in #( *f77blas*) : ;; #( *) : BLAS_LIBS="-lf77blas" ;; esac fi # add -latlas if needed but missing from LIBS case $LIBS in #( *atlas*) : ;; #( *) : BLAS_LIBS="$BLAS_LIBS -latlas" ;; esac LIBS="$BLAS_LIBS $LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu comex_blas_ok=no if test "x$comex_blas_ok" = xno; then : caxpy=caxpy daxpy=daxpy saxpy=saxpy zaxpy=zaxpy ccopy=ccopy dcopy=dcopy scopy=scopy zcopy=zcopy cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy_ daxpy=daxpy_ saxpy=saxpy_ zaxpy=zaxpy_ ccopy=ccopy_ dcopy=dcopy_ scopy=scopy_ zcopy=zcopy_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy__ daxpy=daxpy__ saxpy=saxpy__ zaxpy=zaxpy__ ccopy=ccopy__ dcopy=dcopy__ scopy=scopy__ zcopy=zcopy__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM daxpy=DGEMM saxpy=SGEMM zaxpy=ZGEMM ccopy=CCOPY dcopy=DCOPY scopy=SCOPY zcopy=ZCOPY cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM_ daxpy=DGEMM_ saxpy=SGEMM_ zaxpy=ZGEMM_ ccopy=CCOPY_ dcopy=DCOPY_ scopy=SCOPY_ zcopy=ZCOPY_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM__ daxpy=DGEMM__ saxpy=SGEMM__ zaxpy=ZGEMM__ ccopy=CCOPY__ dcopy=DCOPY__ scopy=SCOPY__ zcopy=ZCOPY__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=NOTFOUND daxpy=NOTFOUND saxpy=NOTFOUND zaxpy=NOTFOUND ccopy=NOTFOUND dcopy=NOTFOUND scopy=NOTFOUND zcopy=NOTFOUND fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$comex_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_blas_ok" >&5 $as_echo "$comex_blas_ok" >&6; } fi # PhiPACK libraries (requires generic BLAS lib, too) if test $comex_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in PhiPACK libraries" >&5 $as_echo_n "checking for BLAS in PhiPACK libraries... " >&6; } # add -lblas to BLAS_LIBS if missing from LIBS case $LIBS in #( *blas*) : ;; #( *) : BLAS_LIBS="-lblas" ;; esac # add -ldgemm to BLAS_LIBS if missing from LIBS case $LIBS in #( *dgemm*) : ;; #( *) : BLAS_LIBS="-ldgemm $BLAS_LIBS" ;; esac # add -lsgemm to BLAS_LIBS if missing from LIBS case $LIBS in #( *sgemm*) : ;; #( *) : BLAS_LIBS="-lsgemm $BLAS_LIBS" ;; esac LIBS="$BLAS_LIBS $LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu comex_blas_ok=no if test "x$comex_blas_ok" = xno; then : caxpy=caxpy daxpy=daxpy saxpy=saxpy zaxpy=zaxpy ccopy=ccopy dcopy=dcopy scopy=scopy zcopy=zcopy cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy_ daxpy=daxpy_ saxpy=saxpy_ zaxpy=zaxpy_ ccopy=ccopy_ dcopy=dcopy_ scopy=scopy_ zcopy=zcopy_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy__ daxpy=daxpy__ saxpy=saxpy__ zaxpy=zaxpy__ ccopy=ccopy__ dcopy=dcopy__ scopy=scopy__ zcopy=zcopy__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM daxpy=DGEMM saxpy=SGEMM zaxpy=ZGEMM ccopy=CCOPY dcopy=DCOPY scopy=SCOPY zcopy=ZCOPY cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM_ daxpy=DGEMM_ saxpy=SGEMM_ zaxpy=ZGEMM_ ccopy=CCOPY_ dcopy=DCOPY_ scopy=SCOPY_ zcopy=ZCOPY_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM__ daxpy=DGEMM__ saxpy=SGEMM__ zaxpy=ZGEMM__ ccopy=CCOPY__ dcopy=DCOPY__ scopy=SCOPY__ zcopy=ZCOPY__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=NOTFOUND daxpy=NOTFOUND saxpy=NOTFOUND zaxpy=NOTFOUND ccopy=NOTFOUND dcopy=NOTFOUND scopy=NOTFOUND zcopy=NOTFOUND fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$comex_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_blas_ok" >&5 $as_echo "$comex_blas_ok" >&6; } fi # Apple Accelerate.framework if test $comex_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in Apple Accelerate.framework" >&5 $as_echo_n "checking for BLAS in Apple Accelerate.framework... " >&6; } # add -framework Accelerate to BLAS_LIBS if missing from LIBS case $LIBS in #( *Accelerate*) : ;; #( *) : BLAS_LIBS="-framework Accelerate" ;; esac LIBS="$BLAS_LIBS $LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu comex_blas_ok=no if test "x$comex_blas_ok" = xno; then : caxpy=caxpy daxpy=daxpy saxpy=saxpy zaxpy=zaxpy ccopy=ccopy dcopy=dcopy scopy=scopy zcopy=zcopy cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy_ daxpy=daxpy_ saxpy=saxpy_ zaxpy=zaxpy_ ccopy=ccopy_ dcopy=dcopy_ scopy=scopy_ zcopy=zcopy_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy__ daxpy=daxpy__ saxpy=saxpy__ zaxpy=zaxpy__ ccopy=ccopy__ dcopy=dcopy__ scopy=scopy__ zcopy=zcopy__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM daxpy=DGEMM saxpy=SGEMM zaxpy=ZGEMM ccopy=CCOPY dcopy=DCOPY scopy=SCOPY zcopy=ZCOPY cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM_ daxpy=DGEMM_ saxpy=SGEMM_ zaxpy=ZGEMM_ ccopy=CCOPY_ dcopy=DCOPY_ scopy=SCOPY_ zcopy=ZCOPY_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM__ daxpy=DGEMM__ saxpy=SGEMM__ zaxpy=ZGEMM__ ccopy=CCOPY__ dcopy=DCOPY__ scopy=SCOPY__ zcopy=ZCOPY__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=NOTFOUND daxpy=NOTFOUND saxpy=NOTFOUND zaxpy=NOTFOUND ccopy=NOTFOUND dcopy=NOTFOUND scopy=NOTFOUND zcopy=NOTFOUND fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$comex_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_blas_ok" >&5 $as_echo "$comex_blas_ok" >&6; } fi # Apple vecLib.framework if test $comex_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in Apple vecLib.framework" >&5 $as_echo_n "checking for BLAS in Apple vecLib.framework... " >&6; } # add -framework vecLib to BLAS_LIBS if missing from LIBS case $LIBS in #( *vecLib*) : ;; #( *) : BLAS_LIBS="-framework vecLib" ;; esac LIBS="$BLAS_LIBS $LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu comex_blas_ok=no if test "x$comex_blas_ok" = xno; then : caxpy=caxpy daxpy=daxpy saxpy=saxpy zaxpy=zaxpy ccopy=ccopy dcopy=dcopy scopy=scopy zcopy=zcopy cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy_ daxpy=daxpy_ saxpy=saxpy_ zaxpy=zaxpy_ ccopy=ccopy_ dcopy=dcopy_ scopy=scopy_ zcopy=zcopy_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy__ daxpy=daxpy__ saxpy=saxpy__ zaxpy=zaxpy__ ccopy=ccopy__ dcopy=dcopy__ scopy=scopy__ zcopy=zcopy__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM daxpy=DGEMM saxpy=SGEMM zaxpy=ZGEMM ccopy=CCOPY dcopy=DCOPY scopy=SCOPY zcopy=ZCOPY cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM_ daxpy=DGEMM_ saxpy=SGEMM_ zaxpy=ZGEMM_ ccopy=CCOPY_ dcopy=DCOPY_ scopy=SCOPY_ zcopy=ZCOPY_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM__ daxpy=DGEMM__ saxpy=SGEMM__ zaxpy=ZGEMM__ ccopy=CCOPY__ dcopy=DCOPY__ scopy=SCOPY__ zcopy=ZCOPY__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=NOTFOUND daxpy=NOTFOUND saxpy=NOTFOUND zaxpy=NOTFOUND ccopy=NOTFOUND dcopy=NOTFOUND scopy=NOTFOUND zcopy=NOTFOUND fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$comex_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_blas_ok" >&5 $as_echo "$comex_blas_ok" >&6; } fi # Alpha CXML library (CXML stands for Compaq Extended Math Library) if test $comex_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in Alpha CXML library" >&5 $as_echo_n "checking for BLAS in Alpha CXML library... " >&6; } # add -lcxml to BLAS_LIBS if missing from LIBS case $LIBS in #( *cxml*) : ;; #( *) : BLAS_LIBS="-lcxml" ;; esac LIBS="$BLAS_LIBS $LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu comex_blas_ok=no if test "x$comex_blas_ok" = xno; then : caxpy=caxpy daxpy=daxpy saxpy=saxpy zaxpy=zaxpy ccopy=ccopy dcopy=dcopy scopy=scopy zcopy=zcopy cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy_ daxpy=daxpy_ saxpy=saxpy_ zaxpy=zaxpy_ ccopy=ccopy_ dcopy=dcopy_ scopy=scopy_ zcopy=zcopy_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy__ daxpy=daxpy__ saxpy=saxpy__ zaxpy=zaxpy__ ccopy=ccopy__ dcopy=dcopy__ scopy=scopy__ zcopy=zcopy__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM daxpy=DGEMM saxpy=SGEMM zaxpy=ZGEMM ccopy=CCOPY dcopy=DCOPY scopy=SCOPY zcopy=ZCOPY cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM_ daxpy=DGEMM_ saxpy=SGEMM_ zaxpy=ZGEMM_ ccopy=CCOPY_ dcopy=DCOPY_ scopy=SCOPY_ zcopy=ZCOPY_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM__ daxpy=DGEMM__ saxpy=SGEMM__ zaxpy=ZGEMM__ ccopy=CCOPY__ dcopy=DCOPY__ scopy=SCOPY__ zcopy=ZCOPY__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=NOTFOUND daxpy=NOTFOUND saxpy=NOTFOUND zaxpy=NOTFOUND ccopy=NOTFOUND dcopy=NOTFOUND scopy=NOTFOUND zcopy=NOTFOUND fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$comex_save_LIBS" if test $comex_blas_ok = no; then : # add -lcxml to BLAS_LIBS if missing from LIBS case $LIBS in #( *cxml*) : ;; #( *) : BLAS_LIBS="-lcxml" ;; esac # add -lcpml to BLAS_LIBS if missing from LIBS case $LIBS in #( *cpml*) : ;; #( *) : BLAS_LIBS="$BLAS_LIBS -lcpml" ;; esac LIBS="$BLAS_LIBS $LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu comex_blas_ok=no if test "x$comex_blas_ok" = xno; then : caxpy=caxpy daxpy=daxpy saxpy=saxpy zaxpy=zaxpy ccopy=ccopy dcopy=dcopy scopy=scopy zcopy=zcopy cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy_ daxpy=daxpy_ saxpy=saxpy_ zaxpy=zaxpy_ ccopy=ccopy_ dcopy=dcopy_ scopy=scopy_ zcopy=zcopy_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy__ daxpy=daxpy__ saxpy=saxpy__ zaxpy=zaxpy__ ccopy=ccopy__ dcopy=dcopy__ scopy=scopy__ zcopy=zcopy__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM daxpy=DGEMM saxpy=SGEMM zaxpy=ZGEMM ccopy=CCOPY dcopy=DCOPY scopy=SCOPY zcopy=ZCOPY cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM_ daxpy=DGEMM_ saxpy=SGEMM_ zaxpy=ZGEMM_ ccopy=CCOPY_ dcopy=DCOPY_ scopy=SCOPY_ zcopy=ZCOPY_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM__ daxpy=DGEMM__ saxpy=SGEMM__ zaxpy=ZGEMM__ ccopy=CCOPY__ dcopy=DCOPY__ scopy=SCOPY__ zcopy=ZCOPY__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=NOTFOUND daxpy=NOTFOUND saxpy=NOTFOUND zaxpy=NOTFOUND ccopy=NOTFOUND dcopy=NOTFOUND scopy=NOTFOUND zcopy=NOTFOUND fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$comex_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_blas_ok" >&5 $as_echo "$comex_blas_ok" >&6; } fi # Alpha DXML library (now called CXML, see above) # Sun Performance library if test $comex_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in Sun Performance Library" >&5 $as_echo_n "checking for BLAS in Sun Performance Library... " >&6; } # add -xlic_lib=sunperf to BLAS_LIBS if missing from LIBS case $LIBS in #( *sunperf*) : ;; #( *) : BLAS_LIBS="-xlic_lib=sunperf" ;; esac LIBS="$BLAS_LIBS $LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu comex_blas_ok=no if test "x$comex_blas_ok" = xno; then : caxpy=caxpy daxpy=daxpy saxpy=saxpy zaxpy=zaxpy ccopy=ccopy dcopy=dcopy scopy=scopy zcopy=zcopy cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy_ daxpy=daxpy_ saxpy=saxpy_ zaxpy=zaxpy_ ccopy=ccopy_ dcopy=dcopy_ scopy=scopy_ zcopy=zcopy_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy__ daxpy=daxpy__ saxpy=saxpy__ zaxpy=zaxpy__ ccopy=ccopy__ dcopy=dcopy__ scopy=scopy__ zcopy=zcopy__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM daxpy=DGEMM saxpy=SGEMM zaxpy=ZGEMM ccopy=CCOPY dcopy=DCOPY scopy=SCOPY zcopy=ZCOPY cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM_ daxpy=DGEMM_ saxpy=SGEMM_ zaxpy=ZGEMM_ ccopy=CCOPY_ dcopy=DCOPY_ scopy=SCOPY_ zcopy=ZCOPY_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM__ daxpy=DGEMM__ saxpy=SGEMM__ zaxpy=ZGEMM__ ccopy=CCOPY__ dcopy=DCOPY__ scopy=SCOPY__ zcopy=ZCOPY__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=NOTFOUND daxpy=NOTFOUND saxpy=NOTFOUND zaxpy=NOTFOUND ccopy=NOTFOUND dcopy=NOTFOUND scopy=NOTFOUND zcopy=NOTFOUND fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$comex_save_LIBS" if test $comex_blas_ok = no; then : # add -xlic_lib=sunperf to BLAS_LIBS if missing from LIBS case $LIBS in #( *sunperf*) : ;; #( *) : BLAS_LIBS="-xlic_lib=sunperf" ;; esac # add -lsunmath to BLAS_LIBS if missing from LIBS case $LIBS in #( *sunmath*) : ;; #( *) : BLAS_LIBS="$BLAS_LIBS -lsunmath" ;; esac LIBS="$BLAS_LIBS $LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu comex_blas_ok=no if test "x$comex_blas_ok" = xno; then : caxpy=caxpy daxpy=daxpy saxpy=saxpy zaxpy=zaxpy ccopy=ccopy dcopy=dcopy scopy=scopy zcopy=zcopy cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy_ daxpy=daxpy_ saxpy=saxpy_ zaxpy=zaxpy_ ccopy=ccopy_ dcopy=dcopy_ scopy=scopy_ zcopy=zcopy_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy__ daxpy=daxpy__ saxpy=saxpy__ zaxpy=zaxpy__ ccopy=ccopy__ dcopy=dcopy__ scopy=scopy__ zcopy=zcopy__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM daxpy=DGEMM saxpy=SGEMM zaxpy=ZGEMM ccopy=CCOPY dcopy=DCOPY scopy=SCOPY zcopy=ZCOPY cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM_ daxpy=DGEMM_ saxpy=SGEMM_ zaxpy=ZGEMM_ ccopy=CCOPY_ dcopy=DCOPY_ scopy=SCOPY_ zcopy=ZCOPY_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM__ daxpy=DGEMM__ saxpy=SGEMM__ zaxpy=ZGEMM__ ccopy=CCOPY__ dcopy=DCOPY__ scopy=SCOPY__ zcopy=ZCOPY__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=NOTFOUND daxpy=NOTFOUND saxpy=NOTFOUND zaxpy=NOTFOUND ccopy=NOTFOUND dcopy=NOTFOUND scopy=NOTFOUND zcopy=NOTFOUND fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$comex_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_blas_ok" >&5 $as_echo "$comex_blas_ok" >&6; } fi # SCSL library (SCSL stands for SGI/Cray Scientific Library) if test $comex_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in SGI/Cray Scientific Library" >&5 $as_echo_n "checking for BLAS in SGI/Cray Scientific Library... " >&6; } # add -lscs to BLAS_LIBS if missing from LIBS case $LIBS in #( *scs*) : ;; #( *) : BLAS_LIBS="-lscs" ;; esac LIBS="$BLAS_LIBS $LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu comex_blas_ok=no if test "x$comex_blas_ok" = xno; then : caxpy=caxpy daxpy=daxpy saxpy=saxpy zaxpy=zaxpy ccopy=ccopy dcopy=dcopy scopy=scopy zcopy=zcopy cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy_ daxpy=daxpy_ saxpy=saxpy_ zaxpy=zaxpy_ ccopy=ccopy_ dcopy=dcopy_ scopy=scopy_ zcopy=zcopy_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy__ daxpy=daxpy__ saxpy=saxpy__ zaxpy=zaxpy__ ccopy=ccopy__ dcopy=dcopy__ scopy=scopy__ zcopy=zcopy__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM daxpy=DGEMM saxpy=SGEMM zaxpy=ZGEMM ccopy=CCOPY dcopy=DCOPY scopy=SCOPY zcopy=ZCOPY cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM_ daxpy=DGEMM_ saxpy=SGEMM_ zaxpy=ZGEMM_ ccopy=CCOPY_ dcopy=DCOPY_ scopy=SCOPY_ zcopy=ZCOPY_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM__ daxpy=DGEMM__ saxpy=SGEMM__ zaxpy=ZGEMM__ ccopy=CCOPY__ dcopy=DCOPY__ scopy=SCOPY__ zcopy=ZCOPY__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=NOTFOUND daxpy=NOTFOUND saxpy=NOTFOUND zaxpy=NOTFOUND ccopy=NOTFOUND dcopy=NOTFOUND scopy=NOTFOUND zcopy=NOTFOUND fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$comex_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_blas_ok" >&5 $as_echo "$comex_blas_ok" >&6; } fi # SGIMATH library if test $comex_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in SGIMATH library" >&5 $as_echo_n "checking for BLAS in SGIMATH library... " >&6; } # add -lcomplib.sgimath to BLAS_LIBS if missing from LIBS case $LIBS in #( *complib.sgimath*) : ;; #( *) : BLAS_LIBS="-lcomplib.sgimath" ;; esac LIBS="$BLAS_LIBS $LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu comex_blas_ok=no if test "x$comex_blas_ok" = xno; then : caxpy=caxpy daxpy=daxpy saxpy=saxpy zaxpy=zaxpy ccopy=ccopy dcopy=dcopy scopy=scopy zcopy=zcopy cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy_ daxpy=daxpy_ saxpy=saxpy_ zaxpy=zaxpy_ ccopy=ccopy_ dcopy=dcopy_ scopy=scopy_ zcopy=zcopy_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy__ daxpy=daxpy__ saxpy=saxpy__ zaxpy=zaxpy__ ccopy=ccopy__ dcopy=dcopy__ scopy=scopy__ zcopy=zcopy__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM daxpy=DGEMM saxpy=SGEMM zaxpy=ZGEMM ccopy=CCOPY dcopy=DCOPY scopy=SCOPY zcopy=ZCOPY cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM_ daxpy=DGEMM_ saxpy=SGEMM_ zaxpy=ZGEMM_ ccopy=CCOPY_ dcopy=DCOPY_ scopy=SCOPY_ zcopy=ZCOPY_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM__ daxpy=DGEMM__ saxpy=SGEMM__ zaxpy=ZGEMM__ ccopy=CCOPY__ dcopy=DCOPY__ scopy=SCOPY__ zcopy=ZCOPY__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=NOTFOUND daxpy=NOTFOUND saxpy=NOTFOUND zaxpy=NOTFOUND ccopy=NOTFOUND dcopy=NOTFOUND scopy=NOTFOUND zcopy=NOTFOUND fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$comex_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_blas_ok" >&5 $as_echo "$comex_blas_ok" >&6; } fi # IBM ESSL library (requires generic BLAS lib, too) if test $comex_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in IBM ESSL library" >&5 $as_echo_n "checking for BLAS in IBM ESSL library... " >&6; } # add -lessl to BLAS_LIBS if missing from LIBS case $LIBS in #( *essl*) : ;; #( *) : BLAS_LIBS="-lessl" ;; esac # add -lblas to BLAS_LIBS if missing from LIBS case $LIBS in #( *blas*) : ;; #( *) : BLAS_LIBS="$BLAS_LIBS -lblas" ;; esac LIBS="$BLAS_LIBS $LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu comex_blas_ok=no if test "x$comex_blas_ok" = xno; then : caxpy=caxpy daxpy=daxpy saxpy=saxpy zaxpy=zaxpy ccopy=ccopy dcopy=dcopy scopy=scopy zcopy=zcopy cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy_ daxpy=daxpy_ saxpy=saxpy_ zaxpy=zaxpy_ ccopy=ccopy_ dcopy=dcopy_ scopy=scopy_ zcopy=zcopy_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy__ daxpy=daxpy__ saxpy=saxpy__ zaxpy=zaxpy__ ccopy=ccopy__ dcopy=dcopy__ scopy=scopy__ zcopy=zcopy__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM daxpy=DGEMM saxpy=SGEMM zaxpy=ZGEMM ccopy=CCOPY dcopy=DCOPY scopy=SCOPY zcopy=ZCOPY cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM_ daxpy=DGEMM_ saxpy=SGEMM_ zaxpy=ZGEMM_ ccopy=CCOPY_ dcopy=DCOPY_ scopy=SCOPY_ zcopy=ZCOPY_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM__ daxpy=DGEMM__ saxpy=SGEMM__ zaxpy=ZGEMM__ ccopy=CCOPY__ dcopy=DCOPY__ scopy=SCOPY__ zcopy=ZCOPY__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=NOTFOUND daxpy=NOTFOUND saxpy=NOTFOUND zaxpy=NOTFOUND ccopy=NOTFOUND dcopy=NOTFOUND scopy=NOTFOUND zcopy=NOTFOUND fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$comex_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_blas_ok" >&5 $as_echo "$comex_blas_ok" >&6; } fi # Generic BLAS library if test $comex_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in generic library" >&5 $as_echo_n "checking for BLAS in generic library... " >&6; } BLAS_LIBS="-lblas" LIBS="$BLAS_LIBS $LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu comex_blas_ok=no if test "x$comex_blas_ok" = xno; then : caxpy=caxpy daxpy=daxpy saxpy=saxpy zaxpy=zaxpy ccopy=ccopy dcopy=dcopy scopy=scopy zcopy=zcopy cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy_ daxpy=daxpy_ saxpy=saxpy_ zaxpy=zaxpy_ ccopy=ccopy_ dcopy=dcopy_ scopy=scopy_ zcopy=zcopy_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=caxpy__ daxpy=daxpy__ saxpy=saxpy__ zaxpy=zaxpy__ ccopy=ccopy__ dcopy=dcopy__ scopy=scopy__ zcopy=zcopy__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM daxpy=DGEMM saxpy=SGEMM zaxpy=ZGEMM ccopy=CCOPY dcopy=DCOPY scopy=SCOPY zcopy=ZCOPY cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM_ daxpy=DGEMM_ saxpy=SGEMM_ zaxpy=ZGEMM_ ccopy=CCOPY_ dcopy=DCOPY_ scopy=SCOPY_ zcopy=ZCOPY_ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=CGEMM__ daxpy=DGEMM__ saxpy=SGEMM__ zaxpy=ZGEMM__ ccopy=CCOPY__ dcopy=DCOPY__ scopy=SCOPY__ zcopy=ZCOPY__ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif int main () { char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : comex_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext fi if test "x$comex_blas_ok" = xno; then : caxpy=NOTFOUND daxpy=NOTFOUND saxpy=NOTFOUND zaxpy=NOTFOUND ccopy=NOTFOUND dcopy=NOTFOUND scopy=NOTFOUND zcopy=NOTFOUND fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$comex_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $comex_blas_ok" >&5 $as_echo "$comex_blas_ok" >&6; } fi CPPFLAGS="$comex_save_CPPFLAGS" LDFLAGS="$comex_save_LDFLAGS" # Tests are complete. Execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test $comex_blas_ok = yes; then : have_blas=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: BLAS library not found, using internal BLAS" >&5 $as_echo "$as_me: WARNING: BLAS library not found, using internal BLAS" >&2;} blas_size=4 have_blas=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_BLAS $have_blas _ACEOF cat >>confdefs.h <<_ACEOF #define BLAS_SIZE $blas_size _ACEOF cat >>confdefs.h <<_ACEOF #define BLAS_CAXPY $caxpy _ACEOF cat >>confdefs.h <<_ACEOF #define BLAS_DAXPY $daxpy _ACEOF cat >>confdefs.h <<_ACEOF #define BLAS_SAXPY $saxpy _ACEOF cat >>confdefs.h <<_ACEOF #define BLAS_ZAXPY $zaxpy _ACEOF cat >>confdefs.h <<_ACEOF #define BLAS_CCOPY $ccopy _ACEOF cat >>confdefs.h <<_ACEOF #define BLAS_DCOPY $dcopy _ACEOF cat >>confdefs.h <<_ACEOF #define BLAS_SCOPY $scopy _ACEOF cat >>confdefs.h <<_ACEOF #define BLAS_ZCOPY $zcopy _ACEOF if test $comex_blas_ok = yes; then HAVE_BLAS_TRUE= HAVE_BLAS_FALSE='#' else HAVE_BLAS_TRUE='#' HAVE_BLAS_FALSE= fi ############################################################################### # Checks for programs. ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Checks for additional programs" >&5 $as_echo "$as_me: Checks for additional programs" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed ############################################################################### # Libtool setup -- no compiler/linker tests after this ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Libtool setup" >&5 $as_echo "$as_me: Libtool setup" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} # temporarily restore unwrapped compilers # this works around a bug where libtool sadly relies on matching compiler # names in order to determine features (Fortran only, I think) # libtool doesn't recognize MPI compiler names, nor should it if test x$with_mpi_wrappers = xyes; then : comex_mpi_unwrap_push_save_CC="$CC" comex_mpi_unwrap_push_save_CXX="$CXX" comex_mpi_unwrap_push_save_F77="$F77" comex_mpi_unwrap_push_save_FC="$FC" if test "x$comex_cv_mpic_naked" != x; then : CC="$comex_cv_mpic_naked" fi if test "x$comex_cv_mpicxx_naked" != x; then : CXX="$comex_cv_mpicxx_naked" fi if test "x$comex_cv_mpif77_naked" != x; then : F77="$comex_cv_mpif77_naked" fi if test "x$comex_cv_mpifc_naked" != x; then : FC="$comex_cv_mpifc_naked" fi fi if test "x$AR" = x; then : case $comex_cv_target in #( NEC|NEC64) : AR=sxar ;; #( *) : ;; esac fi if test "x$RANLIB" = x; then : case $comex_cv_target in #( NEC|NEC64) : RANLIB=true ;; #( *) : ;; esac fi case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=no fi enable_dlopen=no enable_win32_dll=no # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: # and now that that's over, put the MPI compilers back # also, the above hack incorrectly sets the base compiler as the linker if test x$with_mpi_wrappers = xyes; then : CC="$comex_mpi_unwrap_push_save_CC" CXX="$comex_mpi_unwrap_push_save_CXX" F77="$comex_mpi_unwrap_push_save_F77" FC="$comex_mpi_unwrap_push_save_FC" compiler="$CC" LTCC="$CC" lt_save_CC="$CC" compiler_DEFAULT="$CC" fi ############################################################################### # Test suite setup ############################################################################### if test "x$NPROCS" = x; then : NPROCS=4 fi if test "x$MPIEXEC" = x; then : for ac_prog in mpirun mpiexec do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MPIEXEC+:} false; then : $as_echo_n "(cached) " >&6 else case $MPIEXEC in [\\/]* | ?:[\\/]*) ac_cv_path_MPIEXEC="$MPIEXEC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MPIEXEC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MPIEXEC=$ac_cv_path_MPIEXEC if test -n "$MPIEXEC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPIEXEC" >&5 $as_echo "$MPIEXEC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$MPIEXEC" && break done MPIEXEC="$MPIEXEC -n %NP%" fi ############################################################################### # The End ############################################################################### ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PROFILING_ARMCI_TRUE}" && test -z "${ENABLE_PROFILING_ARMCI_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PROFILING_ARMCI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CROSS_COMPILING_TRUE}" && test -z "${CROSS_COMPILING_FALSE}"; then as_fn_error $? "conditional \"CROSS_COMPILING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COMEX_NETWORK_MPI_TS_TRUE}" && test -z "${COMEX_NETWORK_MPI_TS_FALSE}"; then as_fn_error $? "conditional \"COMEX_NETWORK_MPI_TS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COMEX_NETWORK_OFA_TRUE}" && test -z "${COMEX_NETWORK_OFA_FALSE}"; then as_fn_error $? "conditional \"COMEX_NETWORK_OFA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COMEX_NETWORK_PORTALS4_TRUE}" && test -z "${COMEX_NETWORK_PORTALS4_FALSE}"; then as_fn_error $? "conditional \"COMEX_NETWORK_PORTALS4\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COMEX_NETWORK_DMAPP_TRUE}" && test -z "${COMEX_NETWORK_DMAPP_FALSE}"; then as_fn_error $? "conditional \"COMEX_NETWORK_DMAPP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE}" && test -z "${HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE}"; then as_fn_error $? "conditional \"HAVE_SYS_WEAK_ALIAS_PRAGMA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_BLAS_TRUE}" && test -z "${HAVE_BLAS_FALSE}"; then as_fn_error $? "conditional \"HAVE_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Communication Runtime for Exascale (comex) $as_me 1.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . Communication Runtime for Exascale (comex) home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ Communication Runtime for Exascale (comex) config.status 1.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="" # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi # Report on what we found. { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: **************************************************************" >&5 $as_echo "$as_me: **************************************************************" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: $PACKAGE_NAME configured as follows:" >&5 $as_echo "$as_me: $PACKAGE_NAME configured as follows:" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: **************************************************************" >&5 $as_echo "$as_me: **************************************************************" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: MPI_LIBS=$MPI_LIBS" >&5 $as_echo "$as_me: MPI_LIBS=$MPI_LIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: MPI_LDFLAGS=$MPI_LDFLAGS" >&5 $as_echo "$as_me: MPI_LDFLAGS=$MPI_LDFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: MPI_CPPFLAGS=$MPI_CPPFLAGS" >&5 $as_echo "$as_me: MPI_CPPFLAGS=$MPI_CPPFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: COMEX_NETWORK=$comex_network" >&5 $as_echo "$as_me: COMEX_NETWORK=$comex_network" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: COMEX_NETWORK_LDFLAGS=$COMEX_NETWORK_LDFLAGS" >&5 $as_echo "$as_me: COMEX_NETWORK_LDFLAGS=$COMEX_NETWORK_LDFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: COMEX_NETWORK_LIBS=$COMEX_NETWORK_LIBS" >&5 $as_echo "$as_me: COMEX_NETWORK_LIBS=$COMEX_NETWORK_LIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: COMEX_NETWORK_CPPFLAGS=$COMEX_NETWORK_CPPFLAGS" >&5 $as_echo "$as_me: COMEX_NETWORK_CPPFLAGS=$COMEX_NETWORK_CPPFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CC=$CC" >&5 $as_echo "$as_me: CC=$CC" >&6;} if test "x$with_mpi_wrappers" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: unwrapped CC=$comex_cv_mpic_naked" >&5 $as_echo "$as_me: unwrapped CC=$comex_cv_mpic_naked" >&6;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: CFLAGS=$CFLAGS" >&5 $as_echo "$as_me: CFLAGS=$CFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CPP=$CPP" >&5 $as_echo "$as_me: CPP=$CPP" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CPPFLAGS=$CPPFLAGS" >&5 $as_echo "$as_me: CPPFLAGS=$CPPFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: LDFLAGS=$LDFLAGS" >&5 $as_echo "$as_me: LDFLAGS=$LDFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: LIBS=$LIBS" >&5 $as_echo "$as_me: LIBS=$LIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: FLIBS=$FLIBS" >&5 $as_echo "$as_me: FLIBS=$FLIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: AR=$AR" >&5 $as_echo "$as_me: AR=$AR" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: AR_FLAGS=$AR_FLAGS" >&5 $as_echo "$as_me: AR_FLAGS=$AR_FLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: DEFS=$DEFS" >&5 $as_echo "$as_me: DEFS=$DEFS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: SHELL=$SHELL" >&5 $as_echo "$as_me: SHELL=$SHELL" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: MPIEXEC=$MPIEXEC" >&5 $as_echo "$as_me: MPIEXEC=$MPIEXEC" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: NPROCS=$NPROCS" >&5 $as_echo "$as_me: NPROCS=$NPROCS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} ga-5-3/comex/testing/0000750005473000001440000000000012275260571013372 5ustar d3n000usersga-5-3/comex/testing/perf_strided.c0000640005473000001440000001073712274750307016221 0ustar d3n000users#include #include #include #include #include #include #include "comex.h" static int me; static int nproc; #define PUTS 0 #define GETS 1 #define ACCS 2 #define MAX_MESSAGE_SIZE 1024*1024 #define MEDIUM_MESSAGE_SIZE 8192 #define ITER_SMALL 100 #define ITER_LARGE 10 #define WARMUP 2 static void fill_array(double *arr, int count, int which); static void strided_test(size_t buffer_size, int op); double dclock() { struct timeval tv; gettimeofday(&tv, NULL); return(tv.tv_sec * 1.0e6 + (double)tv.tv_usec); } int main(int argc, char **argv) { comex_init_args(&argc, &argv); comex_group_rank(COMEX_GROUP_WORLD, &me); comex_group_size(COMEX_GROUP_WORLD, &nproc); /* This test only works for two processes */ assert(nproc == 2); if (0 == me) { printf("msg size (bytes) avg time (us) avg b/w (MB/sec)\n"); } printf("\n\n"); if (0 == me) { printf("#PNNL armci Put Strided Test\n"); } // strided_test(MAX_MESSAGE_SIZE, PUTS); printf("\n\n"); if (0 == me) { printf("#PNNL armci Get Strided Test\n"); } // strided_test(MAX_MESSAGE_SIZE, GETS); printf("\n\n"); if (0 == me) { printf("#PNNL armci Accumulate Strided Test\n"); } strided_test(MAX_MESSAGE_SIZE, ACCS); printf("\n\n"); comex_finalize(); MPI_Finalize(); return 0; } static void fill_array(double *arr, int count, int which) { int i; for (i = 0; i < count; i++) { arr[i] = i; } } static void strided_test(size_t buffer_size, int op) { void **dst_ptr; void **put_buf; void **get_buf; double *times; dst_ptr = (void*)malloc(nproc * sizeof(void*)); put_buf = (void*)malloc(nproc * sizeof(void*)); get_buf = (void*)malloc(nproc * sizeof(void*)); times = (double*)malloc(nproc * sizeof(double)); comex_malloc(dst_ptr, buffer_size, COMEX_GROUP_WORLD); comex_malloc(put_buf, buffer_size, COMEX_GROUP_WORLD); comex_malloc(get_buf, buffer_size, COMEX_GROUP_WORLD); /* initialize what we're putting */ fill_array((double*)put_buf[me], buffer_size/sizeof(double), me); size_t msg_size; int dst = 1; double scale = 1; /* Information for strided data transfer */ int levels = 1; int count[2]; int stride[1]; size_t xdim, ydim; for (msg_size = 16; msg_size <= buffer_size; msg_size *= 2) { int j; int iter = msg_size > MEDIUM_MESSAGE_SIZE ? ITER_LARGE : ITER_SMALL; for (xdim = 8; xdim <= msg_size; xdim *=2 ) { ydim = msg_size / xdim; count[0] = xdim; count[1] = ydim; stride[0] = xdim; double t_start = dclock(), t_end = dclock(); if (0 == me) { for (j= 0; j < iter + WARMUP; ++j) { if (WARMUP == j) { t_start = dclock(); } switch (op) { case PUTS: comex_puts(put_buf[me], stride, dst_ptr[dst], stride, count, levels, dst, COMEX_GROUP_WORLD); break; case GETS: comex_gets(dst_ptr[dst], stride, get_buf[me], stride, count, levels, dst, COMEX_GROUP_WORLD); break; case ACCS: comex_accs(COMEX_ACC_DBL, (void *)&scale, put_buf[me], stride, dst_ptr[dst], stride, count, levels, dst, COMEX_GROUP_WORLD); break; default: comex_error("oops", 1); } } } comex_barrier(COMEX_GROUP_WORLD); /* calculate total time and average time */ t_end = dclock(); if (0 == me) { printf("%5zu\t\t%6.2f\t\t%6.2f\t\t%zu\t\t%zu\n", msg_size, ((t_end - t_start))/iter, msg_size*(nproc-1)*iter/((t_end - t_start)), xdim, ydim); } } } comex_free(dst_ptr[me], COMEX_GROUP_WORLD); comex_free(put_buf[me], COMEX_GROUP_WORLD); comex_free(get_buf[me], COMEX_GROUP_WORLD); free(dst_ptr); free(put_buf); free(get_buf); free(times); } ga-5-3/comex/testing/perf_contig.c0000640005473000001440000000745312274750307016047 0ustar d3n000users#include #include #include #include #include #include #include "comex.h" static int me; static int nproc; #define PUT 0 #define GET 1 #define ACC 2 #define MAX_MESSAGE_SIZE 1024*1024 #define MEDIUM_MESSAGE_SIZE 8192 #define ITER_SMALL 1000 #define ITER_LARGE 100 #define WARMUP 20 static void fill_array(double *arr, int count, int which); static void contig_test(size_t buffer_size, int op); double dclock() { struct timeval tv; gettimeofday(&tv, NULL); return(tv.tv_sec * 1.0e6 + (double)tv.tv_usec); } int main(int argc, char **argv) { comex_init_args(&argc, &argv); comex_group_rank(COMEX_GROUP_WORLD, &me); comex_group_size(COMEX_GROUP_WORLD, &nproc); /* This test only works for two processes */ assert(nproc == 2); if (0 == me) { printf("msg size (bytes) avg time (us) avg b/w (MB/sec)\n"); } printf("\n\n"); if (0 == me) { printf("#PNNL armci Put Test\n"); } contig_test(MAX_MESSAGE_SIZE, PUT); printf("\n\n"); if (0 == me) { printf("#PNNL armci Get Test\n"); } contig_test(MAX_MESSAGE_SIZE, GET); if (0 == me) { printf("#PNNL armci Accumulate Test\n"); } contig_test(MAX_MESSAGE_SIZE, ACC); printf("\n\n"); comex_finalize(); MPI_Finalize(); return 0; } static void fill_array(double *arr, int count, int which) { int i; for (i = 0; i < count; i++) { arr[i] = i * 8.23 + which * 2.89; } } static void contig_test(size_t buffer_size, int op) { void **dst_ptr; void **put_buf; void **get_buf; double *times; dst_ptr = (void*)malloc(nproc * sizeof(void*)); put_buf = (void*)malloc(nproc * sizeof(void*)); get_buf = (void*)malloc(nproc * sizeof(void*)); times = (double*)malloc(nproc * sizeof(double)); comex_malloc(dst_ptr, buffer_size, COMEX_GROUP_WORLD); comex_malloc(put_buf, buffer_size, COMEX_GROUP_WORLD); comex_malloc(get_buf, buffer_size, COMEX_GROUP_WORLD); /* initialize what we're putting */ fill_array((double*)put_buf[me], buffer_size/sizeof(double), me); size_t msg_size; int dst = 1; double scale = 1.0; for (msg_size = 16; msg_size <= buffer_size; msg_size *= 2) { int j; int iter = msg_size > MEDIUM_MESSAGE_SIZE ? ITER_LARGE : ITER_SMALL; double t_start = dclock(), t_end = dclock(); if (0 == me) { for (j= 0; j < iter + WARMUP; ++j) { if (WARMUP == j) { t_start = dclock(); } switch (op) { case PUT: comex_put(put_buf[me], dst_ptr[dst], msg_size, dst, COMEX_GROUP_WORLD); break; case GET: comex_get(dst_ptr[dst], get_buf[me], msg_size, dst, COMEX_GROUP_WORLD); break; case ACC: comex_acc(COMEX_ACC_DBL, &scale, put_buf[me], dst_ptr[dst], msg_size, dst, COMEX_GROUP_WORLD); break; default: comex_error("oops", 1); } } } comex_barrier(COMEX_GROUP_WORLD); /* calculate total time and average time */ t_end = dclock(); if (0 == me) { printf("%5zu\t\t%6.2f\t\t%10.2f\n", msg_size, ((t_end - t_start))/iter, msg_size*(nproc-1)*iter/((t_end - t_start))); } } comex_free(dst_ptr[me], COMEX_GROUP_WORLD); comex_free(put_buf[me], COMEX_GROUP_WORLD); comex_free(get_buf[me], COMEX_GROUP_WORLD); free(dst_ptr); free(put_buf); free(get_buf); free(times); } ga-5-3/comex/testing/perf_amo.c0000640005473000001440000001067212274750307015335 0ustar d3n000users/* Test Rmw Performance * The number of processes are increases from 2 to the number of * processes present in the job */ #include #include #include #include #include #include #include "comex.h" static int me; static int nproc; #define FETCH_AND_ADD 0 #define FETCH_AND_ADD_LONG 1 #define SWAP 2 #define SWAP_LONG 3 #define MAX_MESSAGE_SIZE 1024 #define MEDIUM_MESSAGE_SIZE 8192 #define ITER_SMALL 10000 #define ITER_LARGE 10000 #define WARMUP 20 static void fill_array(double *arr, int count, int which); static void rmw_test(size_t buffer_size, int op); double dclock() { struct timeval tv; gettimeofday(&tv, NULL); return(tv.tv_sec * 1.0e6 + (double)tv.tv_usec); } int main(int argc, char **argv) { comex_init_args(&argc, &argv); comex_group_rank(COMEX_GROUP_WORLD, &me); comex_group_size(COMEX_GROUP_WORLD, &nproc); /* This test only works for two processes */ if (0 == me) { printf("#Processes avg time (us)\n"); printf("\n\n"); } if (0 == me) { printf("#PNNL armci Rmw-Fetch and Add Long Test\n"); printf("\n\n"); } rmw_test(MAX_MESSAGE_SIZE, FETCH_AND_ADD_LONG); if (0 == me) printf("\n\n"); if (0 == me) { printf("#PNNL armci Rmw-Fetch and Add Test\n"); } rmw_test(MAX_MESSAGE_SIZE, FETCH_AND_ADD); if (0 == me) printf("\n\n"); if (0 == me) { printf("#PNNL armci Rmw-Swap Long Test\n"); } rmw_test(MAX_MESSAGE_SIZE, SWAP_LONG); if (0 == me) printf("\n\n"); if (0 == me) { printf("#PNNL armci Rmw-Swap Test\n"); } rmw_test(MAX_MESSAGE_SIZE, SWAP); if (0 == me) printf("\n\n"); comex_finalize(); MPI_Finalize(); return 0; } static void fill_array(double *arr, int count, int which) { int i; for (i = 0; i < count; i++) { arr[i] = i * 8.23 + which * 2.89; } } static void rmw_test(size_t buffer_size, int op) { void **dst_ptr; void **put_buf; void **get_buf; double *times; dst_ptr = (void*)malloc(nproc * sizeof(void*)); put_buf = (void*)malloc(nproc * sizeof(void*)); get_buf = (void*)malloc(nproc * sizeof(void*)); times = (double*)malloc(nproc * sizeof(double)); comex_malloc(dst_ptr, buffer_size, COMEX_GROUP_WORLD); comex_malloc(put_buf, buffer_size, COMEX_GROUP_WORLD); comex_malloc(get_buf, buffer_size, COMEX_GROUP_WORLD); /* initialize what we're putting */ fill_array((double*)put_buf[me], buffer_size/sizeof(double), me); /* All processes perform Rmw on process 0*/ int dst = 0; double t_start = dclock(), t_end = dclock(); int j; int iter = ITER_LARGE; int part_proc; for (part_proc = 2; part_proc <= nproc; part_proc *= 2) { if (me < part_proc) { for (j= 0; j < iter + WARMUP; ++j) { if (WARMUP == j) { t_start = dclock(); } switch (op) { case FETCH_AND_ADD: comex_rmw(COMEX_FETCH_AND_ADD, put_buf[me], dst_ptr[dst], 1, dst, COMEX_GROUP_WORLD); break; case FETCH_AND_ADD_LONG: comex_rmw(COMEX_FETCH_AND_ADD_LONG, put_buf[me], dst_ptr[dst], 1, dst, COMEX_GROUP_WORLD); break; case SWAP: comex_rmw(COMEX_SWAP, put_buf[me], dst_ptr[dst], 1, dst, COMEX_GROUP_WORLD); break; case SWAP_LONG: comex_rmw(COMEX_SWAP_LONG, put_buf[me], dst_ptr[dst], 1, dst, COMEX_GROUP_WORLD); break; default: comex_error("oops", 1); } } } comex_barrier(COMEX_GROUP_WORLD); /* calculate total time and average time */ t_end = dclock(); if (0 == me) { printf("%5d\t\t%6.2f\n", part_proc, ((t_end - t_start))/iter); } } comex_free(dst_ptr[me], COMEX_GROUP_WORLD); comex_free(put_buf[me], COMEX_GROUP_WORLD); comex_free(get_buf[me], COMEX_GROUP_WORLD); free(dst_ptr); free(put_buf); free(get_buf); free(times); } ga-5-3/comex/testing/perf.c0000640005473000001440000000747212274750307014505 0ustar d3n000users#include #include #include #include #include #include #include "comex.h" static int me; static int nproc; #define PUT 0 #define GET 1 #define ACC 2 #define MAX_MESSAGE_SIZE 1024*1024 #define MEDIUM_MESSAGE_SIZE 8192 #define ITER_SMALL 100 #define ITER_LARGE 100 #define WARMUP 10 static void fill_array(double *arr, int count, int which); static void contig_test(size_t buffer_size, int op); double dclock() { struct timeval tv; gettimeofday(&tv, NULL); return(tv.tv_sec * 1.0e6 + (double)tv.tv_usec); } int main(int argc, char **argv) { comex_init_args(&argc, &argv); comex_group_rank(COMEX_GROUP_WORLD, &me); comex_group_size(COMEX_GROUP_WORLD, &nproc); /* This test only works for two processes */ assert(nproc == 2); if (0 == me) { printf("msg size (bytes) avg time (us) avg b/w (MB/sec)\n"); } if (0 == me) { printf("#PNNL comex Put Test\n"); } contig_test(MAX_MESSAGE_SIZE, PUT); if (0 == me) { printf("#PNNL comex Get Test\n"); } contig_test(MAX_MESSAGE_SIZE, GET); if (0 == me) { printf("#PNNL comex Accumulate Test\n"); } contig_test(MAX_MESSAGE_SIZE, ACC); comex_finalize(); MPI_Finalize(); return 0; } static void fill_array(double *arr, int count, int which) { int i; for (i = 0; i < count; i++) { arr[i] = i * 8.23 + which * 2.89; } } static void contig_test(size_t buffer_size, int op) { void **dst_ptr; void **put_buf; void **get_buf; double *times; dst_ptr = (void*)malloc(nproc * sizeof(void*)); put_buf = (void*)malloc(nproc * sizeof(void*)); get_buf = (void*)malloc(nproc * sizeof(void*)); times = (double*)malloc(nproc * sizeof(double)); comex_malloc(dst_ptr, buffer_size, COMEX_GROUP_WORLD); comex_malloc(put_buf, buffer_size, COMEX_GROUP_WORLD); comex_malloc(get_buf, buffer_size, COMEX_GROUP_WORLD); /* initialize what we're putting */ fill_array((double*)put_buf[me], buffer_size/sizeof(double), me); size_t msg_size; int dst = 1; double scale = 1.0; for (msg_size = 16; msg_size <= buffer_size; msg_size *= 2) { int j; int iter = msg_size > MEDIUM_MESSAGE_SIZE ? ITER_LARGE : ITER_SMALL; double t_start = dclock(), t_end = dclock(); if (0 == me) { for (j= 0; j < iter + WARMUP; ++j) { if (WARMUP == j) { t_start = dclock(); } switch (op) { case PUT: comex_put(put_buf[me], dst_ptr[dst], msg_size, dst, COMEX_GROUP_WORLD); break; case GET: comex_get(dst_ptr[dst], get_buf[me], msg_size, dst, COMEX_GROUP_WORLD); break; case ACC: comex_acc(COMEX_ACC_DBL, &scale, put_buf[me], dst_ptr[dst], msg_size, dst, COMEX_GROUP_WORLD); break; default: comex_error("oops", 1); } } } /* calculate total time and average time */ t_end = dclock(); comex_barrier(COMEX_GROUP_WORLD); if (0 == me) { printf("%8zu\t\t%6.2f\t\t%10.2f\n", msg_size, ((t_end - t_start))/iter, msg_size*iter/((t_end - t_start))); } } comex_free(dst_ptr[me], COMEX_GROUP_WORLD); comex_free(put_buf[me], COMEX_GROUP_WORLD); comex_free(get_buf[me], COMEX_GROUP_WORLD); free(dst_ptr); free(put_buf); free(get_buf); free(times); } ga-5-3/comex/testing/test.c0000640005473000001440000012571712274750307014533 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: test.c,v 1.43.6.6 2007-08-30 22:59:27 manoj Exp $ */ #include #include #include #include #include #include #include #include "comex.h" #define DIM1 5 #define DIM2 3 #ifdef __sun /* Solaris has shared memory shortages in the default system configuration */ # define DIM3 6 # define DIM4 5 # define DIM5 4 #elif defined(__alpha__) # define DIM3 8 # define DIM4 5 # define DIM5 6 #else # define DIM3 8 # define DIM4 9 # define DIM5 7 #endif #define DIM6 3 #define DIM7 2 #define OFF 1 #define EDIM1 (DIM1+OFF) #define EDIM2 (DIM2+OFF) #define EDIM3 (DIM3+OFF) #define EDIM4 (DIM4+OFF) #define EDIM5 (DIM5+OFF) #define EDIM6 (DIM6+OFF) #define EDIM7 (DIM7+OFF) #define DIMS 4 #define MAXDIMS 7 #define MAX_DIM_VAL 50 #define LOOP 200 #define BASE 100. #define MAXPROC 128 #define TIMES 100 #ifdef CRAY # define ELEMS 800 #else # define ELEMS 200 #endif /***************************** macros ************************/ #define COPY(src, dst, bytes) memcpy((dst),(src),(bytes)) #define COMEX_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define COMEX_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define COMEX_ABS(a) (((a) <0) ? -(a) : (a)) /***************************** global data *******************/ int me, nproc; int work[MAXPROC]; /* work array for propagating addresses */ static void all_sum_int(int *x, int n) { MPI_Comm comm = MPI_COMM_NULL; MPI_Datatype mpi_type = MPI_INT; int rc = 0; void *result = NULL; MPI_Op mpi_op = MPI_SUM; comex_group_comm(COMEX_GROUP_WORLD, &comm); result = malloc(n*sizeof(int)); assert(result); comex_barrier(COMEX_GROUP_WORLD); rc = MPI_Allreduce(x, result, n, mpi_type, mpi_op, comm); assert(rc == MPI_SUCCESS); memcpy(x, result, sizeof(int) * n); free(result); } static void all_sum_long(long *x, int n) { MPI_Comm comm = MPI_COMM_NULL; MPI_Datatype mpi_type = MPI_LONG; int rc = 0; void *result = NULL; MPI_Op mpi_op = MPI_SUM; comex_group_comm(COMEX_GROUP_WORLD, &comm); result = malloc(n*sizeof(long)); assert(result); comex_barrier(COMEX_GROUP_WORLD); rc = MPI_Allreduce(x, result, n, mpi_type, mpi_op, comm); assert(rc == MPI_SUCCESS); memcpy(x, result, sizeof(long) * n); free(result); } static double timer() { struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec * 1000000.0 + tv.tv_usec; } #ifdef PVM void pvm_init(int argc, char *argv[]) { int mytid, mygid, ctid[MAXPROC]; int np, i; mytid = pvm_mytid(); if ((argc != 2) && (argc != 1)) { goto usage; } if (argc == 1) { np = 1; } if (argc == 2) { if ((np = atoi(argv[1])) < 1) { goto usage; } } if (np > MAXPROC) { goto usage; } mygid = pvm_joingroup(MPGROUP); if (np > 1) { if (mygid == 0) { i = pvm_spawn(argv[0], argv + 1, 0, "", np - 1, ctid); } } while (pvm_gsize(MPGROUP) < np) { sleep(1); } /* sync */ pvm_barrier(MPGROUP, np); printf("PVM initialization done!\n"); return; usage: fprintf(stderr, "usage: %s \n", argv[0]); pvm_exit(); exit(-1); } #endif /*\ generate random range for a section of multidimensional array \*/ void get_range(int ndim, int dims[], int lo[], int hi[]) { int dim; for (dim = 0; dim < ndim; dim++) { int toss1, toss2; toss1 = rand() % dims[dim]; toss2 = rand() % dims[dim]; if (toss1 < toss2) { lo[dim] = toss1; hi[dim] = toss2; } else { hi[dim] = toss1; lo[dim] = toss2; } } } /*\ generates a new random range similar to the input range for an array with specified dimensions \*/ void new_range(int ndim, int dims[], int lo[], int hi[], int new_lo[], int new_hi[]) { int dim; for (dim = 0; dim < ndim; dim++) { int toss, range; int diff = hi[dim] - lo[dim] + 1; assert(diff <= dims[dim]); range = dims[dim] - diff; toss = (range > 0) ? rand() % range : lo[dim]; new_lo[dim] = toss; new_hi[dim] = toss + diff - 1; assert(new_hi[dim] < dims[dim]); assert(diff == (new_hi[dim] - new_lo[dim] + 1)); } } /*\ print range of ndim dimensional array with two strings before and after \*/ void print_range(char *pre, int ndim, int lo[], int hi[], char *post) { int i; printf("%s[", pre); for (i = 0; i < ndim; i++) { printf("%d:%d", lo[i], hi[i]); if (i == ndim - 1) { printf("] %s", post); } else { printf(","); } } } /*\ print subscript of ndim dimensional array with two strings before and after \*/ void print_subscript(char *pre, int ndim, int subscript[], char *post) { int i; printf("%s [", pre); for (i = 0; i < ndim; i++) { printf("%d", subscript[i]); if (i == ndim - 1) { printf("] %s", post); } else { printf(","); } } } /*\ print a section of a 2-D array of doubles \*/ void print_2D_double(double *a, int ld, int *lo, int *hi) { int i, j; for (i = lo[0]; i <= hi[0]; i++) { for (j = lo[1]; j <= hi[1]; j++) { printf("%13f ", a[ld*j+i]); } printf("\n"); } } /*\ initialize array: a[i,j,k,..]=i+100*j+10000*k+ ... \*/ void init(double *a, int ndim, int elems, int dims[]) { int idx[MAXDIMS]; int i, dim; for (i = 0; i < elems; i++) { int Index = i; double field, val; for (dim = 0; dim < ndim; dim++) { idx[dim] = Index % dims[dim]; Index /= dims[dim]; } field = 1.; val = 0.; for (dim = 0; dim < ndim; dim++) { val += field * idx[dim]; field *= BASE; } a[i] = val; /* printf("(%d,%d,%d)=%6.0f",idx[0],idx[1],idx[2],val); */ } } /*\ compute Index from subscript * assume that first subscript component changes first \*/ int Index(int ndim, int subscript[], int dims[]) { int idx = 0, i, factor = 1; for (i = 0; i < ndim; i++) { idx += subscript[i] * factor; factor *= dims[i]; } return idx; } void update_subscript(int ndim, int subscript[], int lo[], int hi[]) { int i; for (i = 0; i < ndim; i++) { if (subscript[i] < hi[i]) { subscript[i]++; return; } subscript[i] = lo[i]; } } void compare_patches(double eps, int ndim, double *patch1, int lo1[], int hi1[], int dims1[], double *patch2, int lo2[], int hi2[], int dims2[]) { int i, j, elems = 1; int subscr1[MAXDIMS], subscr2[MAXDIMS]; double diff, max; int offset1, offset2; for (i = 0; i < ndim; i++) { /* count # of elements & verify consistency of both patches */ int diff = hi1[i] - lo1[i]; assert(diff == (hi2[i] - lo2[i])); assert(diff < dims1[i]); assert(diff < dims2[i]); elems *= diff + 1; subscr1[i] = lo1[i]; subscr2[i] = lo2[i]; } /* compare element values in both patches */ offset1 = Index(ndim, subscr1, dims1); offset2 = Index(ndim, subscr2, dims2); for (j = 0; j < elems; j++) { int idx1, idx2; idx1 = Index(ndim, subscr1, dims1); /* calculate element Index from a subscript */ idx2 = Index(ndim, subscr2, dims2); idx1 -= offset1; idx2 -= offset2; diff = patch1[idx1] - patch2[idx2]; max = COMEX_MAX(COMEX_ABS(patch1[idx1]), COMEX_ABS(patch2[idx2])); if (max == 0. || max < eps) { max = 1.; } if (eps < COMEX_ABS(diff) / max) { char msg[48]; sprintf(msg, "(proc=%d):%f", me, patch1[idx1]); print_subscript("ERROR: a", ndim, subscr1, msg); sprintf(msg, "%f\n", patch2[idx2]); print_subscript(" b", ndim, subscr2, msg); fflush(stdout); sleep(1); comex_error("Bailing out", 0); } { /* update subscript for the patches */ update_subscript(ndim, subscr1, lo1, hi1); update_subscript(ndim, subscr2, lo2, hi2); } } /* make sure we reached upper limit */ /*for(i=0;i "); print_range("remote", ndim, loB, hiB, "-> "); print_range("local", ndim, loC, hiC, "\n"); } idx1 = Index(ndim, loA, dimsA); idx2 = Index(ndim, loB, dimsB); idx3 = Index(ndim, loC, dimsA); for (j = 0; j < ndim; j++) { count[j] = hiA[j] - loA[j] + 1; } count[0] *= sizeof(double); /* convert range to bytes at stride level zero */ (void)comex_puts((double *)a + idx1, strideA, (double *)b[proc] + idx2, strideB, count, ndim - 1, proc, COMEX_GROUP_WORLD); /* sleep(1);*/ /* printf("%d: a=(%x,%f) b=(%x,%f)\n",me,idx1 + (double*)a,*(idx1 + (double*)a),idx2 + (double*)b,*(idx2 + (double*)b));*/ /* fflush(stdout);*/ /* sleep(1);*/ /* note that we do not need comex_fence here since * consectutive operations targeting the same process are ordered */ (void)comex_gets((double *)b[proc] + idx2, strideB, (double *)c + idx3, strideA, count, ndim - 1, proc, COMEX_GROUP_WORLD); compare_patches(0., ndim, (double *)a + idx1, loA, hiA, dimsA, (double *)c + idx3, loC, hiC, dimsA); } free(c); destroy_array(b); free(a); } int nloA[MAXDIMS+1][MAXDIMS], nhiA[MAXDIMS+1][MAXDIMS]; int nloB[MAXDIMS+1][MAXDIMS], nhiB[MAXDIMS+1][MAXDIMS]; int nloC[MAXDIMS+1][MAXDIMS], nhiC[MAXDIMS+1][MAXDIMS]; int get_next_RRproc(int initialize, int ndim) { static int distance; int proc; if (initialize) { distance = nproc / 2; if ((nproc % 2) != 0) { distance++; } if (nproc == 1) { distance = 0; } return(0); } /*send it to a different process everytime*/ proc = (me <= ((nproc % 2 == 0) ? ((nproc / 2) - 1) : (nproc / 2))) ? (me + distance) : (me - distance); if ((nproc % 2) != 0 && me == (nproc / 2)) { proc = me; } if (distance != 0) { if (me < (nproc / 2)) { distance++; if ((me + distance) >= nproc) { distance = nproc / 2; if ((nproc % 2) != 0) { distance++; } distance -= me; } } else { distance--; if ((me - distance) >= (nproc / 2)) { distance = nproc / 2; if ((nproc % 2) != 0) { distance++; } distance = distance + (me - distance); } } if (ndim != 1 && MAXDIMS > nproc && (ndim % (nproc / 2) == 0)) { distance = nproc / 2; if ((nproc % 2) != 0) { distance++; } } } return(proc); } void test_nbdim() { int elems = 1, elems1 = 1; int i, j, proc, ndim, rc; void *b[MAXDIMS+1][MAXPROC]; void *a[MAXDIMS+1], *c[MAXDIMS+1]; comex_request_t hdl_put[MAXDIMS+1], hdl_get[MAXDIMS+1]; int idx1 = 0, idx2 = 0, idx3 = 0; /* create shared and local arrays */ for (ndim = 1; ndim <= MAXDIMS; ndim++) { elems1 *= dimsB[ndim-1]; elems *= dimsA[ndim-1]; rc = comex_malloc(b[ndim], sizeof(double) * elems1, COMEX_GROUP_WORLD); assert(rc == 0); assert(b[ndim][me]); a[ndim] = malloc(sizeof(double) * elems); assert(a[ndim]); c[ndim] = malloc(sizeof(double) * elems); assert(c[ndim]); init(a[ndim], ndim, elems, dimsA); } comex_fence_all(COMEX_GROUP_WORLD); comex_barrier(COMEX_GROUP_WORLD); (void)get_next_RRproc(1, 0); for (ndim = 1; ndim <= MAXDIMS; ndim++) { strideA[0] = sizeof(double); strideB[0] = sizeof(double); for (i = 0; i < ndim; i++) { strideA[i] *= dimsA[i]; strideB[i] *= dimsB[i]; if (i < ndim - 1) { strideA[i+1] = strideA[i]; strideB[i+1] = strideB[i]; } } proc = get_next_RRproc(0, ndim); get_range(ndim, dimsA, nloA[ndim], nhiA[ndim]); new_range(ndim, dimsB, nloA[ndim], nhiA[ndim], nloB[ndim], nhiB[ndim]); new_range(ndim, dimsA, nloA[ndim], nhiA[ndim], nloC[ndim], nhiC[ndim]); if (me == 0) { print_range("local", ndim, nloA[ndim], nhiA[ndim], "-> "); print_range("remote", ndim, nloB[ndim], nhiB[ndim], "-> "); print_range("local", ndim, nloC[ndim], nhiC[ndim], "\n"); fflush(stdout); sleep(1); } idx1 = Index(ndim, nloA[ndim], dimsA); idx2 = Index(ndim, nloB[ndim], dimsB); idx3 = Index(ndim, nloC[ndim], dimsA); for (j = 0; j < ndim; j++) { count[j] = nhiA[ndim][j] - nloA[ndim][j] + 1; } count[0] *= sizeof(double); if (ndim == 1) { (void)comex_nbput((double *)a[ndim] + idx1, (double *)b[ndim][proc] + idx2, count[0], proc, COMEX_GROUP_WORLD, (hdl_put + ndim)); } else { (void)comex_nbputs((double *)a[ndim] + idx1, strideA, (double *)b[ndim][proc] + idx2, strideB, count, ndim - 1, proc, COMEX_GROUP_WORLD, (hdl_put + ndim)); } } sleep(5); comex_barrier(COMEX_GROUP_WORLD); /*before we do gets, we have to make sure puts are complete on the remote processor*/ for (ndim = 1; ndim <= MAXDIMS; ndim++) { comex_wait(hdl_put + ndim); } comex_barrier(COMEX_GROUP_WORLD); comex_fence_all(COMEX_GROUP_WORLD); (void)get_next_RRproc(1, 0); for (ndim = 1; ndim <= MAXDIMS; ndim++) { strideA[0] = sizeof(double); strideB[0] = sizeof(double); for (i = 0; i < ndim; i++) { strideA[i] *= dimsA[i]; strideB[i] *= dimsB[i]; if (i < ndim - 1) { strideA[i+1] = strideA[i]; strideB[i+1] = strideB[i]; } } /*send it to a different process everytime*/ proc = get_next_RRproc(0, ndim); idx1 = Index(ndim, nloA[ndim], dimsA); idx2 = Index(ndim, nloB[ndim], dimsB); idx3 = Index(ndim, nloC[ndim], dimsA); for (j = 0; j < ndim; j++) { count[j] = nhiA[ndim][j] - nloA[ndim][j] + 1; } count[0] *= sizeof(double); if (ndim == 1) { (void)comex_nbget((double *)b[ndim][proc] + idx2, (double *)c[ndim] + idx3, count[0], proc, COMEX_GROUP_WORLD, (hdl_get + ndim)); } else { (void)comex_nbgets((double *)b[ndim][proc] + idx2, strideB, (double *)c[ndim] + idx3, strideA, count, ndim - 1, proc, COMEX_GROUP_WORLD, (hdl_get + ndim)); } } comex_barrier(COMEX_GROUP_WORLD); if (me == 0) { printf("Now waiting for all non-blocking calls and verifying data...\n"); fflush(stdout); } for (ndim = 1; ndim <= MAXDIMS; ndim++) { comex_wait(hdl_get + ndim); idx1 = Index(ndim, nloA[ndim], dimsA); idx2 = Index(ndim, nloB[ndim], dimsB); idx3 = Index(ndim, nloC[ndim], dimsA); compare_patches(0., ndim, (double *)a[ndim] + idx1, nloA[ndim], nhiA[ndim], dimsA, (double *)c[ndim] + idx3, nloC[ndim], nhiC[ndim], dimsA); } if (me == 0) { printf("OK\n"); fflush(stdout); } for (ndim = 1; ndim <= MAXDIMS; ndim++) { destroy_array(b[ndim]); free(c[ndim]); free(a[ndim]); } } #define PTR_ARR_LEN 10 #define VLOOP 50 #define VEC_ELE_LEN 20 /*number of doubles in each dimention*/ #define GIOV_ARR_LEN 9 void verify_vector_data(double *data, int procs, int isput, int datalen) { double facto = 2.89; int i, j = 0, k = 0, kc = 0, dst = 0; if (isput) { facto = 1.89; } for (i = 0; i < datalen; i++) { if (dst != me) if (COMEX_ABS((data[i] - (me + facto + dst)*((kc + 1)*(j % PTR_ARR_LEN + 1)))) > 0.001) { printf("\n%d:while verifying data of a op from proc=%d ", me, dst); printf("giov index=%d ptr_arr_index=%d \n :element index=%d", kc, (j % PTR_ARR_LEN), k); printf(" elem was supposed to be %f but is %f", (me + facto + dst)*((kc + 1)*(j % PTR_ARR_LEN + 1)) , data[i]); fflush(stdout); sleep(1); comex_error("vector non-blocking failed", 0); } k++; if (k == VEC_ELE_LEN) { j++; k = 0; if (j % PTR_ARR_LEN == 0) { kc++; if ((kc % GIOV_ARR_LEN) == 0) { kc = 0; dst++; } } } } } void test_vec_small() { double *getdst; double **putsrc; comex_giov_t dsc[MAXPROC*GIOV_ARR_LEN]; void **psrc; /*arrays of pointers to be used by giov_t*/ void **pdst; void *getsrc[MAXPROC]; /*to allocate mem via comex_malloc*/ void *putdst[MAXPROC]; /*to allocate mem via comex_malloc*/ comex_request_t hdl_put[MAXPROC], hdl_get[MAXPROC]; int i = 0, j = 0, k = 0, kc = 0, kcold = 0, rc, dstproc, dst = 0; int lenpergiov; lenpergiov = PTR_ARR_LEN * VEC_ELE_LEN; rc = comex_malloc(getsrc, sizeof(double) * nproc * GIOV_ARR_LEN * lenpergiov, COMEX_GROUP_WORLD); assert(rc == 0); assert(getsrc[me]); rc = comex_malloc(putdst, sizeof(double) * nproc * GIOV_ARR_LEN * lenpergiov, COMEX_GROUP_WORLD); assert(rc == 0); assert(putdst[me]); /*first malloc for getdst and putsrc, both are 2d arrays*/ getdst = (double *)malloc(sizeof(double) * nproc * GIOV_ARR_LEN * lenpergiov); putsrc = (double **)malloc(sizeof(double *) * nproc * GIOV_ARR_LEN * PTR_ARR_LEN); assert(getdst); assert(putsrc); for (i = 0; i < nproc * GIOV_ARR_LEN * PTR_ARR_LEN; i++) { putsrc[i] = (double *)malloc(sizeof(double) * VEC_ELE_LEN); assert(putsrc[i]); } /*allocating memory for psrc and pdst*/ psrc = (void **)malloc(sizeof(void *) * PTR_ARR_LEN * nproc * GIOV_ARR_LEN); pdst = (void **)malloc(sizeof(void *) * PTR_ARR_LEN * nproc * GIOV_ARR_LEN); assert(pdst); assert(psrc); for (i = 0; i < nproc * lenpergiov * GIOV_ARR_LEN; i++) { putsrc[j][k] = (me + 1.89 + dst) * ((kc + 1) * ((j % PTR_ARR_LEN) + 1)); ((double *)getsrc[me])[i] = (me + 2.89 + dst) * ((kc + 1) * (j % PTR_ARR_LEN + 1)); k++; if (k == VEC_ELE_LEN) { j++; k = 0; if ((j % PTR_ARR_LEN) == 0) { kc++; if ((kc % GIOV_ARR_LEN) == 0) { kc = 0; dst++; } } } } /*********************Testing NbPutV*********************************/ i = 0; j = 0; k = 0; kc = 0; dstproc = me; for (i = 0; i < nproc - 1; i++) { dstproc++; if (dstproc == nproc) { dstproc = 0; } for (j = 0; j < GIOV_ARR_LEN; j++) { kcold = kc; for (k = 0; k < PTR_ARR_LEN; k++, kc++) { double *ptr; psrc[kc] = (void *)putsrc[PTR_ARR_LEN*(dstproc*GIOV_ARR_LEN+j)+k]; ptr = (double *)putdst[dstproc]; pdst[kc] = (void *)(ptr + lenpergiov * (GIOV_ARR_LEN * me + j) + k * VEC_ELE_LEN); } dsc[j].bytes = VEC_ELE_LEN * sizeof(double); dsc[j].src = &psrc[kcold]; dsc[j].dst = &pdst[kcold]; dsc[j].count = PTR_ARR_LEN; } if ((rc = comex_nbputv(dsc, GIOV_ARR_LEN, dstproc, COMEX_GROUP_WORLD, hdl_put + dstproc))) { comex_error("putv failed", rc); } } if (me == 0) { printf("\n\tNow veryfying the vector put data for correctness"); } for (i = 0; i < nproc; i++)if (i != me) { comex_wait(hdl_put + i); } sleep(1); comex_barrier(COMEX_GROUP_WORLD); comex_fence_all(COMEX_GROUP_WORLD); verify_vector_data((double *)putdst[me], nproc, 1, nproc * GIOV_ARR_LEN * lenpergiov); if (me == 0) { printf("\n\tPuts OK\n"); } /****************Done Testing NbPutV*********************************/ /*********************Testing NbGetV*********************************/ i = 0; j = 0; k = 0; kc = 0; dstproc = me; for (i = 0; i < nproc - 1; i++) { dstproc++; if (dstproc == nproc) { dstproc = 0; } for (j = 0; j < GIOV_ARR_LEN; j++) { kcold = kc; for (k = 0; k < PTR_ARR_LEN; k++, kc++) { double *ptr; ptr = getdst; pdst[kc] = (void *)(ptr + lenpergiov * (dstproc * GIOV_ARR_LEN + j) + k * VEC_ELE_LEN); ptr = (double *)(getsrc[dstproc]); psrc[kc] = (void *)(ptr + lenpergiov * (me * GIOV_ARR_LEN + j) + k * VEC_ELE_LEN); } dsc[j].bytes = VEC_ELE_LEN * sizeof(double); dsc[j].src = &psrc[kcold]; dsc[j].dst = &pdst[kcold]; dsc[j].count = PTR_ARR_LEN; } if ((rc = comex_nbgetv(dsc, GIOV_ARR_LEN, dstproc, COMEX_GROUP_WORLD, hdl_get + dstproc))) { comex_error("putv failed", rc); } } if (me == 0) { printf("\n\tNow veryfying the vector get data for correctness"); } for (i = 0; i < nproc; i++)if (i != me) { comex_wait(hdl_get + i); } sleep(1); comex_barrier(COMEX_GROUP_WORLD); verify_vector_data((double *)getdst, nproc, 0, nproc * GIOV_ARR_LEN * lenpergiov); if (me == 0) { printf("\n\tGets OK\n"); } /****************Done Testing NbGetV*********************************/ free(pdst); free(psrc); free(getdst); for (i = 0; i < nproc * GIOV_ARR_LEN * PTR_ARR_LEN; i++) { free(putsrc[i]); } free(putsrc); comex_free(getsrc[me], COMEX_GROUP_WORLD); comex_free(putdst[me], COMEX_GROUP_WORLD); } void GetPermutedProcList(int *ProcList) { int i, iswap, temp; if (nproc > MAXPROC) { comex_error("permute_proc: nproc to big ", nproc); } /* initialize list */ for (i = 0; i < nproc; i++) { ProcList[i] = i; } if (nproc == 1) { return; } /* every process generates different random sequence */ (void)srand((unsigned)me); /* list permutation generated by random swapping */ for (i = 0; i < nproc; i++) { iswap = (int)(rand() % nproc); temp = ProcList[iswap]; ProcList[iswap] = ProcList[i]; ProcList[i] = temp; } } /*\ Atomic Accumulate test: remote += alpha*local * Every process/or has its patch of array b updated TIMES*NPROC times. * The sequence of updates is random: everybody uses a randomly permuted list * and accumulate is non-collective (of-course) \*/ void test_acc(int ndim) { int dim, elems; int i, proc; void *b[MAXPROC]; void *a, *c; double alpha = 0.1, scale; int idx1, idx2; int *proclist = work; elems = 1; strideA[0] = sizeof(double); strideB[0] = sizeof(double); for (i = 0; i < ndim; i++) { strideA[i] *= dimsA[i]; strideB[i] *= dimsB[i]; if (i < ndim - 1) { strideA[i+1] = strideA[i]; strideB[i+1] = strideB[i]; } elems *= dimsA[i]; /* set up patch coordinates: same on every processor */ loA[i] = 0; hiA[i] = loA[i] + 1; loB[i] = dimsB[i] - 2; hiB[i] = loB[i] + 1; count[i] = hiA[i] - loA[i] + 1; } /* create shared and local arrays */ create_array(b, sizeof(double), ndim, dimsB); a = malloc(sizeof(double) * elems); assert(a); c = malloc(sizeof(double) * elems); assert(c); init(a, ndim, elems, dimsA); if (me == 0) { printf("--------array[%d", dimsA[0]); for (dim = 1; dim < ndim; dim++) { printf(",%d", dimsA[dim]); } printf("]--------\n"); } GetPermutedProcList(proclist); idx1 = Index(ndim, loA, dimsA); idx2 = Index(ndim, loB, dimsB); count[0] *= sizeof(double); /* convert range to bytes at stride level zero */ /* initialize all elements of array b to zero */ elems = 1; for (i = 0; i < ndim; i++) { elems *= dimsB[i]; } for (i = 0; i < elems; i++) { ((double *)b[me])[i] = 0.; } sleep(1); if (me == 0) { print_range("patch", ndim, loA, hiA, " -> "); print_range("patch", ndim, loB, hiB, "\n"); fflush(stdout); } comex_fence_all(COMEX_GROUP_WORLD); comex_barrier(COMEX_GROUP_WORLD); for (i = 0; i < TIMES * nproc; i++) { proc = proclist[i%nproc]; (void)comex_accs(COMEX_ACC_DBL, &alpha, (double *)a + idx1, strideA, (double *)b[proc] + idx2, strideB, count, ndim - 1, proc, COMEX_GROUP_WORLD); } /* sleep(9);*/ comex_fence_all(COMEX_GROUP_WORLD); comex_barrier(COMEX_GROUP_WORLD); /* copy my patch into local array c */ (void)comex_gets((double *)b[me] + idx2, strideB, (double *)c + idx1, strideA, count, ndim - 1, me, COMEX_GROUP_WORLD); scale = alpha * TIMES * nproc; scale_patch(scale, ndim, (double *)a + idx1, loA, hiA, dimsA); compare_patches(.0001, ndim, (double *)a + idx1, loA, hiA, dimsA, (double *)c + idx1, loA, hiA, dimsA); comex_barrier(COMEX_GROUP_WORLD); if (0 == me) { printf(" OK\n\n"); fflush(stdout); } free(c); destroy_array(b); free(a); } /*************************** vector interface *********************************\ * tests vector interface for transfers of triangular sections of a 2-D array * ******************************************************************************/ void test_vector() { int dim, elems, ndim, cols, rows, mrc; int i, proc, loop; int rc; int idx1, idx3; void *b[MAXPROC]; void *a, *c; comex_giov_t dsc[MAX_DIM_VAL]; void *psrc[MAX_DIM_VAL]; void *pdst[MAX_DIM_VAL]; elems = 1; ndim = 2; for (i = 0; i < ndim; i++) { dimsA[i] = MAX_DIM_VAL; dimsB[i] = MAX_DIM_VAL + 1; elems *= dimsA[i]; } /* create shared and local arrays */ create_array(b, sizeof(double), ndim, dimsB); a = malloc(sizeof(double) * elems); assert(a); c = malloc(sizeof(double) * elems); assert(c); init(a, ndim, elems, dimsA); if (me == 0) { printf("--------array[%d", dimsA[0]); for (dim = 1; dim < ndim; dim++) { printf(",%d", dimsA[dim]); } printf("]--------\n"); } sleep(1); for (loop = 0; loop < LOOP; loop++) { get_range(ndim, dimsA, loA, hiA); new_range(ndim, dimsB, loA, hiA, loB, hiB); new_range(ndim, dimsA, loA, hiA, loC, hiC); proc = nproc - 1 - me; if (me == 0) { print_range("local", ndim, loA, hiA, "-> "); print_range("remote", ndim, loB, hiB, "-> "); print_range("local", ndim, loC, hiC, "\n"); } /* printf("array at source\n");*/ /* print_2D_double((double *)a, dimsA[0], loA, hiA);*/ cols = hiA[1] - loA[1] + 1; rows = hiA[0] - loA[0] + 1; mrc = COMEX_MIN(cols, rows); /* generate a data descriptor for a lower-triangular patch */ for (i = 0; i < mrc; i++) { int ij[2]; int idx; ij[0] = loA[0] + i; ij[1] = loA[1] + i; idx = Index(ndim, ij, dimsA); psrc[i] = (double *)a + idx; ij[0] = loB[0] + i; ij[1] = loB[1] + i; idx = Index(ndim, ij, dimsB); pdst[i] = (double *)b[proc] + idx; dsc[i].bytes = (rows - i) * sizeof(double); dsc[i].src = &psrc[i]; dsc[i].dst = &pdst[i]; /* assume each element different in size (not true in rectangular patches) */ dsc[i].count = 1; } if ((rc = comex_putv(dsc, mrc, proc, COMEX_GROUP_WORLD))) { comex_error("putv failed ", rc); } /* printf("array at destination\n");*/ /* print_2D_double((double *)b[proc], dimsB[0], loB, hiB);*/ /* generate a data descriptor for the upper-triangular patch */ /* there is one less element since diagonal is excluded */ for (i = 1; i < cols; i++) { int ij[2]; ij[0] = loA[0]; ij[1] = loA[1] + i; psrc[i-1] = (double *)a + Index(ndim, ij, dimsA); ij[0] = loB[0]; ij[1] = loB[1] + i; pdst[i-1] = (double *)b[proc] + Index(ndim, ij, dimsB); mrc = COMEX_MIN(i, rows); dsc[i-1].bytes = mrc * sizeof(double); dsc[i-1].src = &psrc[i-1]; dsc[i-1].dst = &pdst[i-1]; /* assume each element different in size (not true in rectangular patches) */ dsc[i-1].count = 1; } if ((cols - 1))if ((rc = comex_putv(dsc, cols - 1, proc, COMEX_GROUP_WORLD))) { comex_error("putv(2) failed ", rc); } /* we get back entire rectangular patch */ for (i = 0; i < cols; i++) { int ij[2]; ij[0] = loB[0]; ij[1] = loB[1] + i; psrc[i] = (double *)b[proc] + Index(ndim, ij, dimsB); ij[0] = loC[0]; ij[1] = loC[1] + i; pdst[i] = (double *)c + Index(ndim, ij, dimsA); } dsc[0].bytes = rows * sizeof(double); dsc[0].src = psrc; dsc[0].dst = pdst; dsc[0].count = cols; /* note that we do not need comex_fence here since * consecutive operations targeting the same process are ordered */ if ((rc = comex_getv(dsc, 1, proc, COMEX_GROUP_WORLD))) { comex_error("getv failed ", rc); } idx1 = Index(ndim, loA, dimsA); idx3 = Index(ndim, loC, dimsA); compare_patches(0., ndim, (double *)a + idx1, loA, hiA, dimsA, (double *)c + idx3, loC, hiC, dimsA); } free(c); destroy_array(b); free(a); } /*\ Atomic Accumulate test for vector API: remote += alpha*local * Every process/or has its patch of array b updated TIMES*NPROC times. * The sequence of updates is random: everybody uses a randomly permuted list * and accumulate is non-collective (of-course) \*/ void test_vector_acc() { int dim, elems, bytes; int i, j, proc, rc, one = 1; void *b[MAXPROC]; void *psrc[ELEMS/2], *pdst[ELEMS/2]; void *a, *c; double alpha = 0.1, scale; int *proclist = work; comex_giov_t dsc; elems = ELEMS; dim = 1; bytes = sizeof(double) * elems; /* create shared and local arrays */ create_array(b, sizeof(double), dim, &elems); a = malloc(bytes); assert(a); c = malloc(bytes); assert(c); init(a, dim, elems, &elems); if (me == 0) { printf("--------array[%d", elems); printf("]--------\n"); fflush(stdout); } GetPermutedProcList(proclist); /* initialize all elements of array b to zero */ for (i = 0; i < elems; i++) { ((double *)b[me])[i] = 0.; } sleep(1); dsc.bytes = sizeof(double); dsc.src = psrc; dsc.dst = pdst; dsc.count = elems / 2; comex_barrier(COMEX_GROUP_WORLD); for (i = 0; i < TIMES * nproc; i++) { /* proc=proclist[i%nproc];*/ proc = 0; /* accumulate even numbered elements */ for (j = 0; j < elems / 2; j++) { psrc[j] = 2 * j + (double *)a; pdst[j] = 2 * j + (double *)b[proc]; } if ((rc = comex_accv(COMEX_ACC_DBL, &alpha, &dsc, 1, proc, COMEX_GROUP_WORLD))) { comex_error("accumlate failed", rc); } /* for(j=0; j MAXPROC && me == 0) { comex_error("Test works for up to %d processors\n", MAXPROC); } if (me == 0) { printf("COMEX test program (%d processes)\n", nproc); fflush(stdout); sleep(1); } /* if(me==1)comex_die("process 1 committing suicide",1); */ if (me == 0) { printf("\nTesting strided gets and puts\n"); printf("(Only std output for process 0 is printed)\n\n"); fflush(stdout); sleep(1); } for (ndim = 1; ndim <= MAXDIMS; ndim++) { test_dim(ndim); } comex_fence_all(COMEX_GROUP_WORLD); comex_barrier(COMEX_GROUP_WORLD); if (me == 0) { printf("\nTesting non-blocking gets and puts\n"); fflush(stdout); sleep(1); } double timer_test_nbdim = timer(); test_nbdim(); comex_fence_all(COMEX_GROUP_WORLD); comex_barrier(COMEX_GROUP_WORLD); timer_test_nbdim = timer() - timer_test_nbdim; if (me == 0) { printf("timer_test_nbdim=%f\n", timer_test_nbdim); } if (me == 0) { printf("\nTesting non-blocking vector gets and puts\n"); fflush(stdout); sleep(1); } double timer_test_vec_small = timer(); test_vec_small(); comex_fence_all(COMEX_GROUP_WORLD); comex_barrier(COMEX_GROUP_WORLD); timer_test_vec_small = timer() - timer_test_vec_small; if (me == 0){ printf("timer_test_vec_small=%f\n", timer_test_vec_small); } if (me == 0) { printf("\nTesting atomic accumulate\n"); fflush(stdout); sleep(1); } for (ndim = 1; ndim <= MAXDIMS; ndim++) { test_acc(ndim); } comex_fence_all(COMEX_GROUP_WORLD); comex_barrier(COMEX_GROUP_WORLD); if (me == 0) { printf("\nTesting Vector Interface using triangular patches of a 2-D array\n\n"); fflush(stdout); sleep(1); } test_vector(); comex_fence_all(COMEX_GROUP_WORLD); comex_barrier(COMEX_GROUP_WORLD); if (me == 0) { printf("\nTesting Accumulate with Vector Interface\n\n"); fflush(stdout); sleep(1); } double test_vector_acc_timer = timer(); test_vector_acc(); test_vector_acc_timer = timer() - test_vector_acc_timer; if (me == 0) { printf("test_vector_acc_timer=%f\n", test_vector_acc_timer); } comex_fence_all(COMEX_GROUP_WORLD); comex_barrier(COMEX_GROUP_WORLD); if (me == 0) { printf("\nTesting atomic fetch&add\n"); printf("(Std Output for all processes is printed)\n\n"); fflush(stdout); sleep(1); } comex_barrier(COMEX_GROUP_WORLD); test_fetch_add(); if (me == 0) { printf("\nTesting atomic fetch&add long\n"); printf("(Std Output for all processes is printed)\n\n"); fflush(stdout); sleep(1); } comex_barrier(COMEX_GROUP_WORLD); test_fetch_add_long(); comex_fence_all(COMEX_GROUP_WORLD); comex_barrier(COMEX_GROUP_WORLD); if (me == 0) { printf("\nTesting atomic swap\n"); fflush(stdout); } test_swap(); comex_fence_all(COMEX_GROUP_WORLD); comex_barrier(COMEX_GROUP_WORLD); if (me == 0) { printf("\nTesting atomic swap long\n"); fflush(stdout); } test_swap_long(); comex_fence_all(COMEX_GROUP_WORLD); comex_barrier(COMEX_GROUP_WORLD); if (me == 0) { printf("\nTesting aggregate put/get requests\n"); fflush(stdout); } comex_barrier(COMEX_GROUP_WORLD); comex_barrier(COMEX_GROUP_WORLD); if (me == 0) { printf("All tests passed\n"); fflush(stdout); } sleep(2); comex_barrier(COMEX_GROUP_WORLD); comex_finalize(); MPI_Finalize(); return(0); } ga-5-3/comex/testing/shift.c0000640005473000001440000001045412113253371014647 0ustar d3n000users#include #include #include #include #include "comex.h" static int me; static int nproc; static int size[] = {2,4,8,16,32,64,128,256,512,1024,0}; /* 0 is sentinal */ #define PUT_FORWARD 0 #define PUT_BACKWARD 1 #define GET_FORWARD 2 #define GET_BACKWARD 3 static void fill_array(double *arr, int count, int which); static void shift(size_t buffer_size, int op); int main(int argc, char **argv) { int i; comex_init_args(&argc, &argv); comex_group_rank(COMEX_GROUP_WORLD, &me); comex_group_size(COMEX_GROUP_WORLD, &nproc); if (0 == me) { printf("msg size (bytes) avg time (milliseconds) avg b/w (bytes/sec)\n"); } if (0 == me) { printf("shifting put forward\n"); } for (i=0; size[i]!=0; ++i) { shift(size[i], PUT_FORWARD); } if (0 == me) { printf("shifting put backward\n"); } for (i=0; size[i]!=0; ++i) { shift(size[i], PUT_BACKWARD); } if (0 == me) { printf("shifting get forward\n"); } for (i=0; size[i]!=0; ++i) { shift(size[i], GET_FORWARD); } if (0 == me) { printf("shifting get backward\n"); } for (i=0; size[i]!=0; ++i) { shift(size[i], GET_BACKWARD); } comex_finalize(); MPI_Finalize(); return 0; } static void fill_array(double *arr, int count, int which) { int i; for (i = 0; i < count; i++) { arr[i] = i * 8.23 + which * 2.89; } } static void shift(size_t buffer_size, int op) { void **dst_ptr; void **put_buf; void **get_buf; int i=0; double *times; double *result; double total_time=0; MPI_Comm comm = MPI_COMM_NULL; comex_group_comm(COMEX_GROUP_WORLD, &comm); dst_ptr = (void*)malloc(nproc * sizeof(void*)); put_buf = (void*)malloc(nproc * sizeof(void*)); get_buf = (void*)malloc(nproc * sizeof(void*)); times = (double*)malloc(nproc * sizeof(double)); result = (double*)malloc(nproc * sizeof(double)); comex_malloc(dst_ptr, buffer_size, COMEX_GROUP_WORLD); comex_malloc(put_buf, buffer_size, COMEX_GROUP_WORLD); comex_malloc(get_buf, buffer_size, COMEX_GROUP_WORLD); /* initialize what we're putting */ fill_array((double*)put_buf[me], buffer_size/sizeof(double), me); /* initialize time keepers */ (void)memset(times, 0, nproc*sizeof(double)); (void)memset(result, 0, nproc*sizeof(double)); times[me] = MPI_Wtime()*1.0e6; /* the shift */ switch (op) { case PUT_FORWARD: for (i=1; i header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if the system has the type `dmapp_lock_desc_t'. */ #undef HAVE_DMAPP_LOCK_DESC_T /* Define to 1 if the system has the type `dmapp_lock_handle_t'. */ #undef HAVE_DMAPP_LOCK_HANDLE_T /* Define to 1 if you have AC_header, 0 if you don't */ #undef HAVE_ERRNO_H /* Define to 1 if you have AC_header, 0 if you don't */ #undef HAVE_GETOPT_H /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have AC_func, 0 if you don't */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `hugetlbfs' library. */ #undef HAVE_LIBHUGETLBFS /* Define to 1 if you have AC_header, 0 if you don't */ #undef HAVE_MATH_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have AC_func, 0 if you don't */ #undef HAVE_MEMSET /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have AC_func, 0 if you don't */ #undef HAVE_MUNMAP /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have AC_header, 0 if you don't */ #undef HAVE_PTHREAD_H /* Define to 1 if the system has the type `ptrdiff_t'. */ #undef HAVE_PTRDIFF_T /* Define to 1 if you have AC_header, 0 if you don't */ #undef HAVE_SEMAPHORE_H /* Define to 1 if stdbool.h conforms to C99. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have AC_header, 0 if you don't */ #undef HAVE_STDINT_H /* Define to 1 if you have AC_header, 0 if you don't */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have AC_func, 0 if you don't */ #undef HAVE_STRCHR /* Define to 1 if you have AC_func, 0 if you don't */ #undef HAVE_STRDUP /* Define to 1 if you have AC_header, 0 if you don't */ #undef HAVE_STRINGS_H /* Define to 1 if you have AC_header, 0 if you don't */ #undef HAVE_STRING_H /* Define to 1 if you have AC_func, 0 if you don't */ #undef HAVE_STRNCASECMP /* Define to 1 if you have AC_func, 0 if you don't */ #undef HAVE_STRSTR /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have AC_header, 0 if you don't */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have AC_header, 0 if you don't */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define this if weak aliases may be created with #pragma weak */ #undef HAVE_SYS_WEAK_ALIAS_PRAGMA /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define to 1 if assertions should be disabled. */ #undef NDEBUG /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the `sem_open' function. */ #undef SEM_OPEN /* The size of `char', as computed by sizeof. */ #undef SIZEOF_CHAR /* The size of `double', as computed by sizeof. */ #undef SIZEOF_DOUBLE /* The size of `float', as computed by sizeof. */ #undef SIZEOF_FLOAT /* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of `long long', as computed by sizeof. */ #undef SIZEOF_LONG_LONG /* The size of `MPI_Aint', as computed by sizeof. */ #undef SIZEOF_MPI_AINT /* The size of `short', as computed by sizeof. */ #undef SIZEOF_SHORT /* The size of `void*', as computed by sizeof. */ #undef SIZEOF_VOIDP /* Define to 1 if you have the `sqrt' function. */ #undef SQRT /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Version number of package */ #undef VERSION /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE /* Define for Solaris 2.5.1 so the uint32_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT32_T /* Define for Solaris 2.5.1 so the uint64_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT64_T /* Define for Solaris 2.5.1 so the uint8_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT8_T /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to the type of a signed integer type of width exactly 16 bits if such a type exists and the standard includes do not define it. */ #undef int16_t /* Define to the type of a signed integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef int32_t /* Define to the type of a signed integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ #undef int64_t /* Define to the type of a signed integer type of width exactly 8 bits if such a type exists and the standard includes do not define it. */ #undef int8_t /* Define to `long int' if does not define. */ #undef off_t /* Define to `int' if does not define. */ #undef pid_t /* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported directly. */ #undef restrict /* Work around a bug in Sun C++: it does not support _Restrict or __restrict__, even though the corresponding Sun C compiler ends up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. Perhaps some future version of Sun C++ will work with restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ #if defined __SUNPRO_CC && !defined __RESTRICT # define _Restrict # define __restrict__ #endif /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to the type of an unsigned integer type of width exactly 16 bits if such a type exists and the standard includes do not define it. */ #undef uint16_t /* Define to the type of an unsigned integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef uint32_t /* Define to the type of an unsigned integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ #undef uint64_t /* Define to the type of an unsigned integer type of width exactly 8 bits if such a type exists and the standard includes do not define it. */ #undef uint8_t /* Define to empty if the keyword `volatile' does not work. Warning: valid code using `volatile' can become incorrect without. Disable with care. */ #undef volatile ga-5-3/comex/build-aux/0000750005473000001440000000000012275260570013606 5ustar d3n000usersga-5-3/comex/build-aux/depcomp0000750005473000001440000005064312247162412015166 0ustar d3n000users#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-03-27.16; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # A tabulation character. tab=' ' # A newline character. nl=' ' if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form 'foo.o: dependent.h', # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ga-5-3/comex/build-aux/ltmain.sh0000750005473000001440000105154412247166641015446 0ustar d3n000users # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mkl*|-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -mkl*|-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mkl*|-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 ga-5-3/comex/build-aux/install-sh0000750005473000001440000003325611650323546015622 0ustar d3n000users#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ga-5-3/comex/build-aux/missing0000750005473000001440000002415212247162412015204 0ustar d3n000users#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ga-5-3/comex/build-aux/config.guess0000750005473000001440000012743212247162412016132 0ustar d3n000users#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ga-5-3/comex/build-aux/config.sub0000750005473000001440000010517612247162412015576 0ustar d3n000users#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ga-5-3/comex/tools/0000750005473000001440000000000012275260571013055 5ustar d3n000usersga-5-3/comex/tools/prof_gen.py0000750005473000001440000001527012227050137015226 0ustar d3n000users#!/usr/bin/env python '''Generate the armci_prof.c source from the parmci.h header.''' import sys def get_signatures(header): # first, gather all function signatures from parmci.h aka argv[1] accumulating = False signatures = [] current_signature = '' EXTERN = 'extern' SEMICOLON = ';' for line in open(header): line = line.strip() # remove whitespace before and after line if not line: continue # skip blank lines if EXTERN in line and SEMICOLON in line: signatures.append(line) elif EXTERN in line: current_signature = line accumulating = True elif SEMICOLON in line and accumulating: current_signature += line signatures.append(current_signature) accumulating = False elif accumulating: current_signature += line return signatures class FunctionArgument(object): def __init__(self, signature): self.pointer = signature.count('*') self.array = '[' in signature signature = signature.replace('*','').strip() signature = signature.replace('[','').strip() signature = signature.replace(']','').strip() self.type,self.name = signature.split() def __str__(self): ret = self.type[:] ret += ' ' for p in range(self.pointer): ret += '*' ret += self.name if self.array: ret += '[]' return ret class Function(object): def __init__(self, signature): signature = signature.replace('extern','').strip() self.return_type,signature = signature.split(None,1) self.return_type = self.return_type.strip() signature = signature.strip() if '*' not in self.return_type and signature[0] == '*': # return type is void* not void self.return_type += '*' signature = signature[1:].strip() self.name,signature = signature.split('(',1) self.name = self.name.strip() signature = signature.replace(')','').strip() signature = signature.replace(';','').strip() self.args = [] if signature: for arg in signature.split(','): self.args.append(FunctionArgument(arg.strip())) def get_call(self, name=None): sig = '' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += arg.name sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def get_signature(self, name=None): sig = self.return_type[:] sig += ' ' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += str(arg) sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def __str__(self): return self.get_signature() if __name__ == '__main__': if len(sys.argv) != 2: print 'incorrect number of arguments' print 'usage: prof_gen.py > ' sys.exit(len(sys.argv)) # print headers print ''' #if HAVE_CONFIG_H # include "config.h" #endif #include #include #include "armci.h" #include "parmci.h" static MPI_Comm comm = MPI_COMM_NULL; static int me = -1; static int nproc = -1; static double global_start = 0.0; static double global_stop = 0.0; ''' functions = {} # parse signatures into the Function class for sig in get_signatures(sys.argv[1]): function = Function(sig) functions[function.name] = function # for each function, generate a static count for name in sorted(functions): print 'static long count_%s = 0;' % name print '' # for each function, generate a static time for name in sorted(functions): print 'static double time_%s = 0;' % name print '' # now process the functions for name in sorted(functions): func = functions[name] maybe_declare = '' maybe_assign = '' maybe_return = '' if '*' in func.return_type or 'void' not in func.return_type: maybe_declare = '%s ret;' % func.return_type maybe_assign = 'ret = ' maybe_return = 'return ret;' new_name = None if 'PARMCI_' in name: new_name = name.replace('PARMCI_','ARMCI_') elif 'parmci_' in name: new_name = name.replace('parmci_','armci_') if new_name in ['ARMCI_Finalize']: continue elif new_name in ['ARMCI_Init','ARMCI_Init_args']: print ''' %s { double local_start; double local_stop; %s if (comm == MPI_COMM_NULL) { MPI_Comm_dup(MPI_COMM_WORLD, &comm); MPI_Comm_rank(comm, &me); MPI_Comm_size(comm, &nproc); } ++count_%s; global_start = MPI_Wtime(); local_start = MPI_Wtime(); %s%s; local_stop = MPI_Wtime(); time_%s += local_stop - local_start; %s } ''' % (func.get_signature(new_name), maybe_declare, name, maybe_assign, func.get_call(), name, maybe_return) else: print ''' %s { double local_start; double local_stop; %s ++count_%s; local_start = MPI_Wtime(); %s%s; local_stop = MPI_Wtime(); time_%s += local_stop - local_start; %s } ''' % (func.get_signature(new_name), maybe_declare, name, maybe_assign, func.get_call(), name, maybe_return) # prepare to output the terminate function name = 'PARMCI_Finalize' new_name = 'ARMCI_Finalize' func = functions[name] the_code = '' # establish 'the_code' to use in the body of terminate # it's printing the count of each function if it was called at least once the_code += ''' double recvbuf = 0.0; ''' for fname in sorted(functions): the_code += ''' MPI_Reduce(&time_%s, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("%s,%%ld,%%lf\\n", count_%s, recvbuf); } ''' % (fname, fname, fname) # output the terminate function print '''%s { int ret; ++count_%s; %s; global_stop = MPI_Wtime(); /* don't dump info if terminate more than once */ if (1 == count_%s) { %s if (me == 0) { printf("global_stop-global_start,0,%%lf\\n", global_stop-global_start); } } MPI_Comm_free(&comm); } ''' % (func.get_signature(new_name), name, func.get_call(), name, the_code) ga-5-3/comex/tools/armci_prof.c0000640005473000001440000010772012227050137015342 0ustar d3n000users #if HAVE_CONFIG_H # include "config.h" #endif #include #include #include "armci.h" #include "parmci.h" static MPI_Comm comm = MPI_COMM_NULL; static int me = -1; static int nproc = -1; static double global_start = 0.0; static double global_stop = 0.0; static long count_PARMCI_Acc = 0; static long count_PARMCI_AccS = 0; static long count_PARMCI_AccV = 0; static long count_PARMCI_AllFence = 0; static long count_PARMCI_Barrier = 0; static long count_PARMCI_Create_mutexes = 0; static long count_PARMCI_Destroy_mutexes = 0; static long count_PARMCI_Fence = 0; static long count_PARMCI_Finalize = 0; static long count_PARMCI_Free = 0; static long count_PARMCI_Free_local = 0; static long count_PARMCI_Get = 0; static long count_PARMCI_GetS = 0; static long count_PARMCI_GetV = 0; static long count_PARMCI_GetValueDouble = 0; static long count_PARMCI_GetValueFloat = 0; static long count_PARMCI_GetValueInt = 0; static long count_PARMCI_GetValueLong = 0; static long count_PARMCI_Init = 0; static long count_PARMCI_Init_args = 0; static long count_PARMCI_Initialized = 0; static long count_PARMCI_Lock = 0; static long count_PARMCI_Malloc = 0; static long count_PARMCI_Malloc_local = 0; static long count_PARMCI_Memat = 0; static long count_PARMCI_Memget = 0; static long count_PARMCI_NbAccS = 0; static long count_PARMCI_NbAccV = 0; static long count_PARMCI_NbGet = 0; static long count_PARMCI_NbGetS = 0; static long count_PARMCI_NbGetV = 0; static long count_PARMCI_NbPut = 0; static long count_PARMCI_NbPutS = 0; static long count_PARMCI_NbPutV = 0; static long count_PARMCI_NbPutValueDouble = 0; static long count_PARMCI_NbPutValueFloat = 0; static long count_PARMCI_NbPutValueInt = 0; static long count_PARMCI_NbPutValueLong = 0; static long count_PARMCI_Put = 0; static long count_PARMCI_PutS = 0; static long count_PARMCI_PutS_flag = 0; static long count_PARMCI_PutS_flag_dir = 0; static long count_PARMCI_PutV = 0; static long count_PARMCI_PutValueDouble = 0; static long count_PARMCI_PutValueFloat = 0; static long count_PARMCI_PutValueInt = 0; static long count_PARMCI_PutValueLong = 0; static long count_PARMCI_Put_flag = 0; static long count_PARMCI_Rmw = 0; static long count_PARMCI_Test = 0; static long count_PARMCI_Unlock = 0; static long count_PARMCI_Wait = 0; static long count_PARMCI_WaitAll = 0; static long count_PARMCI_WaitProc = 0; static long count_parmci_msg_barrier = 0; static long count_parmci_msg_group_barrier = 0; static long count_parmci_notify = 0; static long count_parmci_notify_wait = 0; static double time_PARMCI_Acc = 0; static double time_PARMCI_AccS = 0; static double time_PARMCI_AccV = 0; static double time_PARMCI_AllFence = 0; static double time_PARMCI_Barrier = 0; static double time_PARMCI_Create_mutexes = 0; static double time_PARMCI_Destroy_mutexes = 0; static double time_PARMCI_Fence = 0; static double time_PARMCI_Finalize = 0; static double time_PARMCI_Free = 0; static double time_PARMCI_Free_local = 0; static double time_PARMCI_Get = 0; static double time_PARMCI_GetS = 0; static double time_PARMCI_GetV = 0; static double time_PARMCI_GetValueDouble = 0; static double time_PARMCI_GetValueFloat = 0; static double time_PARMCI_GetValueInt = 0; static double time_PARMCI_GetValueLong = 0; static double time_PARMCI_Init = 0; static double time_PARMCI_Init_args = 0; static double time_PARMCI_Initialized = 0; static double time_PARMCI_Lock = 0; static double time_PARMCI_Malloc = 0; static double time_PARMCI_Malloc_local = 0; static double time_PARMCI_Memat = 0; static double time_PARMCI_Memget = 0; static double time_PARMCI_NbAccS = 0; static double time_PARMCI_NbAccV = 0; static double time_PARMCI_NbGet = 0; static double time_PARMCI_NbGetS = 0; static double time_PARMCI_NbGetV = 0; static double time_PARMCI_NbPut = 0; static double time_PARMCI_NbPutS = 0; static double time_PARMCI_NbPutV = 0; static double time_PARMCI_NbPutValueDouble = 0; static double time_PARMCI_NbPutValueFloat = 0; static double time_PARMCI_NbPutValueInt = 0; static double time_PARMCI_NbPutValueLong = 0; static double time_PARMCI_Put = 0; static double time_PARMCI_PutS = 0; static double time_PARMCI_PutS_flag = 0; static double time_PARMCI_PutS_flag_dir = 0; static double time_PARMCI_PutV = 0; static double time_PARMCI_PutValueDouble = 0; static double time_PARMCI_PutValueFloat = 0; static double time_PARMCI_PutValueInt = 0; static double time_PARMCI_PutValueLong = 0; static double time_PARMCI_Put_flag = 0; static double time_PARMCI_Rmw = 0; static double time_PARMCI_Test = 0; static double time_PARMCI_Unlock = 0; static double time_PARMCI_Wait = 0; static double time_PARMCI_WaitAll = 0; static double time_PARMCI_WaitProc = 0; static double time_parmci_msg_barrier = 0; static double time_parmci_msg_group_barrier = 0; static double time_parmci_notify = 0; static double time_parmci_notify_wait = 0; int ARMCI_Acc(int optype, void *scale, void *src, void *dst, int bytes, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_Acc; local_start = MPI_Wtime(); ret = PARMCI_Acc(optype, scale, src, dst, bytes, proc); local_stop = MPI_Wtime(); time_PARMCI_Acc += local_stop - local_start; return ret; } int ARMCI_AccS(int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_AccS; local_start = MPI_Wtime(); ret = PARMCI_AccS(optype, scale, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); local_stop = MPI_Wtime(); time_PARMCI_AccS += local_stop - local_start; return ret; } int ARMCI_AccV(int op, void *scale, armci_giov_t *darr, int len, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_AccV; local_start = MPI_Wtime(); ret = PARMCI_AccV(op, scale, darr, len, proc); local_stop = MPI_Wtime(); time_PARMCI_AccV += local_stop - local_start; return ret; } void ARMCI_AllFence() { double local_start; double local_stop; ++count_PARMCI_AllFence; local_start = MPI_Wtime(); PARMCI_AllFence(); local_stop = MPI_Wtime(); time_PARMCI_AllFence += local_stop - local_start; } void ARMCI_Barrier() { double local_start; double local_stop; ++count_PARMCI_Barrier; local_start = MPI_Wtime(); PARMCI_Barrier(); local_stop = MPI_Wtime(); time_PARMCI_Barrier += local_stop - local_start; } int ARMCI_Create_mutexes(int num) { double local_start; double local_stop; int ret; ++count_PARMCI_Create_mutexes; local_start = MPI_Wtime(); ret = PARMCI_Create_mutexes(num); local_stop = MPI_Wtime(); time_PARMCI_Create_mutexes += local_stop - local_start; return ret; } int ARMCI_Destroy_mutexes() { double local_start; double local_stop; int ret; ++count_PARMCI_Destroy_mutexes; local_start = MPI_Wtime(); ret = PARMCI_Destroy_mutexes(); local_stop = MPI_Wtime(); time_PARMCI_Destroy_mutexes += local_stop - local_start; return ret; } void ARMCI_Fence(int proc) { double local_start; double local_stop; ++count_PARMCI_Fence; local_start = MPI_Wtime(); PARMCI_Fence(proc); local_stop = MPI_Wtime(); time_PARMCI_Fence += local_stop - local_start; } int ARMCI_Free(void *ptr) { double local_start; double local_stop; int ret; ++count_PARMCI_Free; local_start = MPI_Wtime(); ret = PARMCI_Free(ptr); local_stop = MPI_Wtime(); time_PARMCI_Free += local_stop - local_start; return ret; } int ARMCI_Free_local(void *ptr) { double local_start; double local_stop; int ret; ++count_PARMCI_Free_local; local_start = MPI_Wtime(); ret = PARMCI_Free_local(ptr); local_stop = MPI_Wtime(); time_PARMCI_Free_local += local_stop - local_start; return ret; } int ARMCI_Get(void *src, void *dst, int bytes, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_Get; local_start = MPI_Wtime(); ret = PARMCI_Get(src, dst, bytes, proc); local_stop = MPI_Wtime(); time_PARMCI_Get += local_stop - local_start; return ret; } int ARMCI_GetS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_GetS; local_start = MPI_Wtime(); ret = PARMCI_GetS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); local_stop = MPI_Wtime(); time_PARMCI_GetS += local_stop - local_start; return ret; } int ARMCI_GetV(armci_giov_t *darr, int len, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_GetV; local_start = MPI_Wtime(); ret = PARMCI_GetV(darr, len, proc); local_stop = MPI_Wtime(); time_PARMCI_GetV += local_stop - local_start; return ret; } double ARMCI_GetValueDouble(void *src, int proc) { double local_start; double local_stop; double ret; ++count_PARMCI_GetValueDouble; local_start = MPI_Wtime(); ret = PARMCI_GetValueDouble(src, proc); local_stop = MPI_Wtime(); time_PARMCI_GetValueDouble += local_stop - local_start; return ret; } float ARMCI_GetValueFloat(void *src, int proc) { double local_start; double local_stop; float ret; ++count_PARMCI_GetValueFloat; local_start = MPI_Wtime(); ret = PARMCI_GetValueFloat(src, proc); local_stop = MPI_Wtime(); time_PARMCI_GetValueFloat += local_stop - local_start; return ret; } int ARMCI_GetValueInt(void *src, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_GetValueInt; local_start = MPI_Wtime(); ret = PARMCI_GetValueInt(src, proc); local_stop = MPI_Wtime(); time_PARMCI_GetValueInt += local_stop - local_start; return ret; } long ARMCI_GetValueLong(void *src, int proc) { double local_start; double local_stop; long ret; ++count_PARMCI_GetValueLong; local_start = MPI_Wtime(); ret = PARMCI_GetValueLong(src, proc); local_stop = MPI_Wtime(); time_PARMCI_GetValueLong += local_stop - local_start; return ret; } int ARMCI_Init() { double local_start; double local_stop; int ret; if (comm == MPI_COMM_NULL) { MPI_Comm_dup(MPI_COMM_WORLD, &comm); MPI_Comm_rank(comm, &me); MPI_Comm_size(comm, &nproc); } ++count_PARMCI_Init; global_start = MPI_Wtime(); local_start = MPI_Wtime(); ret = PARMCI_Init(); local_stop = MPI_Wtime(); time_PARMCI_Init += local_stop - local_start; return ret; } int ARMCI_Init_args(int *argc, char ***argv) { double local_start; double local_stop; int ret; if (comm == MPI_COMM_NULL) { MPI_Comm_dup(MPI_COMM_WORLD, &comm); MPI_Comm_rank(comm, &me); MPI_Comm_size(comm, &nproc); } ++count_PARMCI_Init_args; global_start = MPI_Wtime(); local_start = MPI_Wtime(); ret = PARMCI_Init_args(argc, argv); local_stop = MPI_Wtime(); time_PARMCI_Init_args += local_stop - local_start; return ret; } int ARMCI_Initialized() { double local_start; double local_stop; int ret; ++count_PARMCI_Initialized; local_start = MPI_Wtime(); ret = PARMCI_Initialized(); local_stop = MPI_Wtime(); time_PARMCI_Initialized += local_stop - local_start; return ret; } void ARMCI_Lock(int mutex, int proc) { double local_start; double local_stop; ++count_PARMCI_Lock; local_start = MPI_Wtime(); PARMCI_Lock(mutex, proc); local_stop = MPI_Wtime(); time_PARMCI_Lock += local_stop - local_start; } int ARMCI_Malloc(void **ptr_arr, armci_size_t bytes) { double local_start; double local_stop; int ret; ++count_PARMCI_Malloc; local_start = MPI_Wtime(); ret = PARMCI_Malloc(ptr_arr, bytes); local_stop = MPI_Wtime(); time_PARMCI_Malloc += local_stop - local_start; return ret; } void* ARMCI_Malloc_local(armci_size_t bytes) { double local_start; double local_stop; void* ret; ++count_PARMCI_Malloc_local; local_start = MPI_Wtime(); ret = PARMCI_Malloc_local(bytes); local_stop = MPI_Wtime(); time_PARMCI_Malloc_local += local_stop - local_start; return ret; } void* ARMCI_Memat(armci_meminfo_t *meminfo, long offset) { double local_start; double local_stop; void* ret; ++count_PARMCI_Memat; local_start = MPI_Wtime(); ret = PARMCI_Memat(meminfo, offset); local_stop = MPI_Wtime(); time_PARMCI_Memat += local_stop - local_start; return ret; } void ARMCI_Memget(size_t bytes, armci_meminfo_t *meminfo, int memflg) { double local_start; double local_stop; ++count_PARMCI_Memget; local_start = MPI_Wtime(); PARMCI_Memget(bytes, meminfo, memflg); local_stop = MPI_Wtime(); time_PARMCI_Memget += local_stop - local_start; } int ARMCI_NbAccS(int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t *nb_handle) { double local_start; double local_stop; int ret; ++count_PARMCI_NbAccS; local_start = MPI_Wtime(); ret = PARMCI_NbAccS(optype, scale, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); local_stop = MPI_Wtime(); time_PARMCI_NbAccS += local_stop - local_start; return ret; } int ARMCI_NbAccV(int op, void *scale, armci_giov_t *darr, int len, int proc, armci_hdl_t *nb_handle) { double local_start; double local_stop; int ret; ++count_PARMCI_NbAccV; local_start = MPI_Wtime(); ret = PARMCI_NbAccV(op, scale, darr, len, proc, nb_handle); local_stop = MPI_Wtime(); time_PARMCI_NbAccV += local_stop - local_start; return ret; } int ARMCI_NbGet(void *src, void *dst, int bytes, int proc, armci_hdl_t *nb_handle) { double local_start; double local_stop; int ret; ++count_PARMCI_NbGet; local_start = MPI_Wtime(); ret = PARMCI_NbGet(src, dst, bytes, proc, nb_handle); local_stop = MPI_Wtime(); time_PARMCI_NbGet += local_stop - local_start; return ret; } int ARMCI_NbGetS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t *nb_handle) { double local_start; double local_stop; int ret; ++count_PARMCI_NbGetS; local_start = MPI_Wtime(); ret = PARMCI_NbGetS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); local_stop = MPI_Wtime(); time_PARMCI_NbGetS += local_stop - local_start; return ret; } int ARMCI_NbGetV(armci_giov_t *darr, int len, int proc, armci_hdl_t *nb_handle) { double local_start; double local_stop; int ret; ++count_PARMCI_NbGetV; local_start = MPI_Wtime(); ret = PARMCI_NbGetV(darr, len, proc, nb_handle); local_stop = MPI_Wtime(); time_PARMCI_NbGetV += local_stop - local_start; return ret; } int ARMCI_NbPut(void *src, void *dst, int bytes, int proc, armci_hdl_t *nb_handle) { double local_start; double local_stop; int ret; ++count_PARMCI_NbPut; local_start = MPI_Wtime(); ret = PARMCI_NbPut(src, dst, bytes, proc, nb_handle); local_stop = MPI_Wtime(); time_PARMCI_NbPut += local_stop - local_start; return ret; } int ARMCI_NbPutS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t *nb_handle) { double local_start; double local_stop; int ret; ++count_PARMCI_NbPutS; local_start = MPI_Wtime(); ret = PARMCI_NbPutS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); local_stop = MPI_Wtime(); time_PARMCI_NbPutS += local_stop - local_start; return ret; } int ARMCI_NbPutV(armci_giov_t *darr, int len, int proc, armci_hdl_t *nb_handle) { double local_start; double local_stop; int ret; ++count_PARMCI_NbPutV; local_start = MPI_Wtime(); ret = PARMCI_NbPutV(darr, len, proc, nb_handle); local_stop = MPI_Wtime(); time_PARMCI_NbPutV += local_stop - local_start; return ret; } int ARMCI_NbPutValueDouble(double src, void *dst, int proc, armci_hdl_t *nb_handle) { double local_start; double local_stop; int ret; ++count_PARMCI_NbPutValueDouble; local_start = MPI_Wtime(); ret = PARMCI_NbPutValueDouble(src, dst, proc, nb_handle); local_stop = MPI_Wtime(); time_PARMCI_NbPutValueDouble += local_stop - local_start; return ret; } int ARMCI_NbPutValueFloat(float src, void *dst, int proc, armci_hdl_t *nb_handle) { double local_start; double local_stop; int ret; ++count_PARMCI_NbPutValueFloat; local_start = MPI_Wtime(); ret = PARMCI_NbPutValueFloat(src, dst, proc, nb_handle); local_stop = MPI_Wtime(); time_PARMCI_NbPutValueFloat += local_stop - local_start; return ret; } int ARMCI_NbPutValueInt(int src, void *dst, int proc, armci_hdl_t *nb_handle) { double local_start; double local_stop; int ret; ++count_PARMCI_NbPutValueInt; local_start = MPI_Wtime(); ret = PARMCI_NbPutValueInt(src, dst, proc, nb_handle); local_stop = MPI_Wtime(); time_PARMCI_NbPutValueInt += local_stop - local_start; return ret; } int ARMCI_NbPutValueLong(long src, void *dst, int proc, armci_hdl_t *nb_handle) { double local_start; double local_stop; int ret; ++count_PARMCI_NbPutValueLong; local_start = MPI_Wtime(); ret = PARMCI_NbPutValueLong(src, dst, proc, nb_handle); local_stop = MPI_Wtime(); time_PARMCI_NbPutValueLong += local_stop - local_start; return ret; } int ARMCI_Put(void *src, void *dst, int bytes, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_Put; local_start = MPI_Wtime(); ret = PARMCI_Put(src, dst, bytes, proc); local_stop = MPI_Wtime(); time_PARMCI_Put += local_stop - local_start; return ret; } int ARMCI_PutS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_PutS; local_start = MPI_Wtime(); ret = PARMCI_PutS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); local_stop = MPI_Wtime(); time_PARMCI_PutS += local_stop - local_start; return ret; } int ARMCI_PutS_flag(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_PutS_flag; local_start = MPI_Wtime(); ret = PARMCI_PutS_flag(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, flag, val, proc); local_stop = MPI_Wtime(); time_PARMCI_PutS_flag += local_stop - local_start; return ret; } int ARMCI_PutS_flag_dir(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_PutS_flag_dir; local_start = MPI_Wtime(); ret = PARMCI_PutS_flag_dir(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, flag, val, proc); local_stop = MPI_Wtime(); time_PARMCI_PutS_flag_dir += local_stop - local_start; return ret; } int ARMCI_PutV(armci_giov_t *darr, int len, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_PutV; local_start = MPI_Wtime(); ret = PARMCI_PutV(darr, len, proc); local_stop = MPI_Wtime(); time_PARMCI_PutV += local_stop - local_start; return ret; } int ARMCI_PutValueDouble(double src, void *dst, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_PutValueDouble; local_start = MPI_Wtime(); ret = PARMCI_PutValueDouble(src, dst, proc); local_stop = MPI_Wtime(); time_PARMCI_PutValueDouble += local_stop - local_start; return ret; } int ARMCI_PutValueFloat(float src, void *dst, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_PutValueFloat; local_start = MPI_Wtime(); ret = PARMCI_PutValueFloat(src, dst, proc); local_stop = MPI_Wtime(); time_PARMCI_PutValueFloat += local_stop - local_start; return ret; } int ARMCI_PutValueInt(int src, void *dst, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_PutValueInt; local_start = MPI_Wtime(); ret = PARMCI_PutValueInt(src, dst, proc); local_stop = MPI_Wtime(); time_PARMCI_PutValueInt += local_stop - local_start; return ret; } int ARMCI_PutValueLong(long src, void *dst, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_PutValueLong; local_start = MPI_Wtime(); ret = PARMCI_PutValueLong(src, dst, proc); local_stop = MPI_Wtime(); time_PARMCI_PutValueLong += local_stop - local_start; return ret; } int ARMCI_Put_flag(void *src, void *dst, int bytes, int *f, int v, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_Put_flag; local_start = MPI_Wtime(); ret = PARMCI_Put_flag(src, dst, bytes, f, v, proc); local_stop = MPI_Wtime(); time_PARMCI_Put_flag += local_stop - local_start; return ret; } int ARMCI_Rmw(int op, void *ploc, void *prem, int extra, int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_Rmw; local_start = MPI_Wtime(); ret = PARMCI_Rmw(op, ploc, prem, extra, proc); local_stop = MPI_Wtime(); time_PARMCI_Rmw += local_stop - local_start; return ret; } int ARMCI_Test(armci_hdl_t *nb_handle) { double local_start; double local_stop; int ret; ++count_PARMCI_Test; local_start = MPI_Wtime(); ret = PARMCI_Test(nb_handle); local_stop = MPI_Wtime(); time_PARMCI_Test += local_stop - local_start; return ret; } void ARMCI_Unlock(int mutex, int proc) { double local_start; double local_stop; ++count_PARMCI_Unlock; local_start = MPI_Wtime(); PARMCI_Unlock(mutex, proc); local_stop = MPI_Wtime(); time_PARMCI_Unlock += local_stop - local_start; } int ARMCI_Wait(armci_hdl_t *nb_handle) { double local_start; double local_stop; int ret; ++count_PARMCI_Wait; local_start = MPI_Wtime(); ret = PARMCI_Wait(nb_handle); local_stop = MPI_Wtime(); time_PARMCI_Wait += local_stop - local_start; return ret; } int ARMCI_WaitAll() { double local_start; double local_stop; int ret; ++count_PARMCI_WaitAll; local_start = MPI_Wtime(); ret = PARMCI_WaitAll(); local_stop = MPI_Wtime(); time_PARMCI_WaitAll += local_stop - local_start; return ret; } int ARMCI_WaitProc(int proc) { double local_start; double local_stop; int ret; ++count_PARMCI_WaitProc; local_start = MPI_Wtime(); ret = PARMCI_WaitProc(proc); local_stop = MPI_Wtime(); time_PARMCI_WaitProc += local_stop - local_start; return ret; } void armci_msg_barrier() { double local_start; double local_stop; ++count_parmci_msg_barrier; local_start = MPI_Wtime(); parmci_msg_barrier(); local_stop = MPI_Wtime(); time_parmci_msg_barrier += local_stop - local_start; } void armci_msg_group_barrier(ARMCI_Group *group) { double local_start; double local_stop; ++count_parmci_msg_group_barrier; local_start = MPI_Wtime(); parmci_msg_group_barrier(group); local_stop = MPI_Wtime(); time_parmci_msg_group_barrier += local_stop - local_start; } int armci_notify(int proc) { double local_start; double local_stop; int ret; ++count_parmci_notify; local_start = MPI_Wtime(); ret = parmci_notify(proc); local_stop = MPI_Wtime(); time_parmci_notify += local_stop - local_start; return ret; } int armci_notify_wait(int proc, int *pval) { double local_start; double local_stop; int ret; ++count_parmci_notify_wait; local_start = MPI_Wtime(); ret = parmci_notify_wait(proc, pval); local_stop = MPI_Wtime(); time_parmci_notify_wait += local_stop - local_start; return ret; } void ARMCI_Finalize() { int ret; ++count_PARMCI_Finalize; PARMCI_Finalize(); global_stop = MPI_Wtime(); /* don't dump info if terminate more than once */ if (1 == count_PARMCI_Finalize) { double recvbuf = 0.0; MPI_Reduce(&time_PARMCI_Acc, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Acc,%ld,%lf\n", count_PARMCI_Acc, recvbuf); } MPI_Reduce(&time_PARMCI_AccS, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_AccS,%ld,%lf\n", count_PARMCI_AccS, recvbuf); } MPI_Reduce(&time_PARMCI_AccV, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_AccV,%ld,%lf\n", count_PARMCI_AccV, recvbuf); } MPI_Reduce(&time_PARMCI_AllFence, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_AllFence,%ld,%lf\n", count_PARMCI_AllFence, recvbuf); } MPI_Reduce(&time_PARMCI_Barrier, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Barrier,%ld,%lf\n", count_PARMCI_Barrier, recvbuf); } MPI_Reduce(&time_PARMCI_Create_mutexes, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Create_mutexes,%ld,%lf\n", count_PARMCI_Create_mutexes, recvbuf); } MPI_Reduce(&time_PARMCI_Destroy_mutexes, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Destroy_mutexes,%ld,%lf\n", count_PARMCI_Destroy_mutexes, recvbuf); } MPI_Reduce(&time_PARMCI_Fence, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Fence,%ld,%lf\n", count_PARMCI_Fence, recvbuf); } MPI_Reduce(&time_PARMCI_Finalize, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Finalize,%ld,%lf\n", count_PARMCI_Finalize, recvbuf); } MPI_Reduce(&time_PARMCI_Free, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Free,%ld,%lf\n", count_PARMCI_Free, recvbuf); } MPI_Reduce(&time_PARMCI_Free_local, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Free_local,%ld,%lf\n", count_PARMCI_Free_local, recvbuf); } MPI_Reduce(&time_PARMCI_Get, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Get,%ld,%lf\n", count_PARMCI_Get, recvbuf); } MPI_Reduce(&time_PARMCI_GetS, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_GetS,%ld,%lf\n", count_PARMCI_GetS, recvbuf); } MPI_Reduce(&time_PARMCI_GetV, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_GetV,%ld,%lf\n", count_PARMCI_GetV, recvbuf); } MPI_Reduce(&time_PARMCI_GetValueDouble, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_GetValueDouble,%ld,%lf\n", count_PARMCI_GetValueDouble, recvbuf); } MPI_Reduce(&time_PARMCI_GetValueFloat, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_GetValueFloat,%ld,%lf\n", count_PARMCI_GetValueFloat, recvbuf); } MPI_Reduce(&time_PARMCI_GetValueInt, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_GetValueInt,%ld,%lf\n", count_PARMCI_GetValueInt, recvbuf); } MPI_Reduce(&time_PARMCI_GetValueLong, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_GetValueLong,%ld,%lf\n", count_PARMCI_GetValueLong, recvbuf); } MPI_Reduce(&time_PARMCI_Init, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Init,%ld,%lf\n", count_PARMCI_Init, recvbuf); } MPI_Reduce(&time_PARMCI_Init_args, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Init_args,%ld,%lf\n", count_PARMCI_Init_args, recvbuf); } MPI_Reduce(&time_PARMCI_Initialized, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Initialized,%ld,%lf\n", count_PARMCI_Initialized, recvbuf); } MPI_Reduce(&time_PARMCI_Lock, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Lock,%ld,%lf\n", count_PARMCI_Lock, recvbuf); } MPI_Reduce(&time_PARMCI_Malloc, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Malloc,%ld,%lf\n", count_PARMCI_Malloc, recvbuf); } MPI_Reduce(&time_PARMCI_Malloc_local, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Malloc_local,%ld,%lf\n", count_PARMCI_Malloc_local, recvbuf); } MPI_Reduce(&time_PARMCI_Memat, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Memat,%ld,%lf\n", count_PARMCI_Memat, recvbuf); } MPI_Reduce(&time_PARMCI_Memget, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Memget,%ld,%lf\n", count_PARMCI_Memget, recvbuf); } MPI_Reduce(&time_PARMCI_NbAccS, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_NbAccS,%ld,%lf\n", count_PARMCI_NbAccS, recvbuf); } MPI_Reduce(&time_PARMCI_NbAccV, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_NbAccV,%ld,%lf\n", count_PARMCI_NbAccV, recvbuf); } MPI_Reduce(&time_PARMCI_NbGet, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_NbGet,%ld,%lf\n", count_PARMCI_NbGet, recvbuf); } MPI_Reduce(&time_PARMCI_NbGetS, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_NbGetS,%ld,%lf\n", count_PARMCI_NbGetS, recvbuf); } MPI_Reduce(&time_PARMCI_NbGetV, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_NbGetV,%ld,%lf\n", count_PARMCI_NbGetV, recvbuf); } MPI_Reduce(&time_PARMCI_NbPut, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_NbPut,%ld,%lf\n", count_PARMCI_NbPut, recvbuf); } MPI_Reduce(&time_PARMCI_NbPutS, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_NbPutS,%ld,%lf\n", count_PARMCI_NbPutS, recvbuf); } MPI_Reduce(&time_PARMCI_NbPutV, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_NbPutV,%ld,%lf\n", count_PARMCI_NbPutV, recvbuf); } MPI_Reduce(&time_PARMCI_NbPutValueDouble, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_NbPutValueDouble,%ld,%lf\n", count_PARMCI_NbPutValueDouble, recvbuf); } MPI_Reduce(&time_PARMCI_NbPutValueFloat, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_NbPutValueFloat,%ld,%lf\n", count_PARMCI_NbPutValueFloat, recvbuf); } MPI_Reduce(&time_PARMCI_NbPutValueInt, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_NbPutValueInt,%ld,%lf\n", count_PARMCI_NbPutValueInt, recvbuf); } MPI_Reduce(&time_PARMCI_NbPutValueLong, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_NbPutValueLong,%ld,%lf\n", count_PARMCI_NbPutValueLong, recvbuf); } MPI_Reduce(&time_PARMCI_Put, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Put,%ld,%lf\n", count_PARMCI_Put, recvbuf); } MPI_Reduce(&time_PARMCI_PutS, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_PutS,%ld,%lf\n", count_PARMCI_PutS, recvbuf); } MPI_Reduce(&time_PARMCI_PutS_flag, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_PutS_flag,%ld,%lf\n", count_PARMCI_PutS_flag, recvbuf); } MPI_Reduce(&time_PARMCI_PutS_flag_dir, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_PutS_flag_dir,%ld,%lf\n", count_PARMCI_PutS_flag_dir, recvbuf); } MPI_Reduce(&time_PARMCI_PutV, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_PutV,%ld,%lf\n", count_PARMCI_PutV, recvbuf); } MPI_Reduce(&time_PARMCI_PutValueDouble, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_PutValueDouble,%ld,%lf\n", count_PARMCI_PutValueDouble, recvbuf); } MPI_Reduce(&time_PARMCI_PutValueFloat, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_PutValueFloat,%ld,%lf\n", count_PARMCI_PutValueFloat, recvbuf); } MPI_Reduce(&time_PARMCI_PutValueInt, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_PutValueInt,%ld,%lf\n", count_PARMCI_PutValueInt, recvbuf); } MPI_Reduce(&time_PARMCI_PutValueLong, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_PutValueLong,%ld,%lf\n", count_PARMCI_PutValueLong, recvbuf); } MPI_Reduce(&time_PARMCI_Put_flag, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Put_flag,%ld,%lf\n", count_PARMCI_Put_flag, recvbuf); } MPI_Reduce(&time_PARMCI_Rmw, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Rmw,%ld,%lf\n", count_PARMCI_Rmw, recvbuf); } MPI_Reduce(&time_PARMCI_Test, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Test,%ld,%lf\n", count_PARMCI_Test, recvbuf); } MPI_Reduce(&time_PARMCI_Unlock, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Unlock,%ld,%lf\n", count_PARMCI_Unlock, recvbuf); } MPI_Reduce(&time_PARMCI_Wait, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_Wait,%ld,%lf\n", count_PARMCI_Wait, recvbuf); } MPI_Reduce(&time_PARMCI_WaitAll, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_WaitAll,%ld,%lf\n", count_PARMCI_WaitAll, recvbuf); } MPI_Reduce(&time_PARMCI_WaitProc, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("PARMCI_WaitProc,%ld,%lf\n", count_PARMCI_WaitProc, recvbuf); } MPI_Reduce(&time_parmci_msg_barrier, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("parmci_msg_barrier,%ld,%lf\n", count_parmci_msg_barrier, recvbuf); } MPI_Reduce(&time_parmci_msg_group_barrier, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("parmci_msg_group_barrier,%ld,%lf\n", count_parmci_msg_group_barrier, recvbuf); } MPI_Reduce(&time_parmci_notify, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("parmci_notify,%ld,%lf\n", count_parmci_notify, recvbuf); } MPI_Reduce(&time_parmci_notify_wait, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, comm); if (me == 0) { printf("parmci_notify_wait,%ld,%lf\n", count_parmci_notify_wait, recvbuf); } if (me == 0) { printf("global_stop-global_start,0,%lf\n", global_stop-global_start); } } MPI_Comm_free(&comm); } ga-5-3/comex/tools/capi_gen.py0000750005473000001440000001031312227050137015165 0ustar d3n000users#!/usr/bin/env python '''Generate armci's capi.c source from the parmci.h header.''' import sys def get_signatures(header): # first, gather all function signatures from parmci.h aka argv[1] accumulating = False signatures = [] current_signature = '' EXTERN = 'extern' SEMICOLON = ';' for line in open(header): line = line.strip() # remove whitespace before and after line if not line: continue # skip blank lines if EXTERN in line and SEMICOLON in line: signatures.append(line) elif EXTERN in line: current_signature = line accumulating = True elif SEMICOLON in line and accumulating: current_signature += line signatures.append(current_signature) accumulating = False elif accumulating: current_signature += line return signatures class FunctionArgument(object): def __init__(self, signature): self.pointer = signature.count('*') self.array = '[' in signature signature = signature.replace('*','').strip() signature = signature.replace('[','').strip() signature = signature.replace(']','').strip() self.type,self.name = signature.split() def __str__(self): ret = self.type[:] ret += ' ' for p in range(self.pointer): ret += '*' ret += self.name if self.array: ret += '[]' return ret class Function(object): def __init__(self, signature): signature = signature.replace('extern','').strip() self.return_type,signature = signature.split(None,1) self.return_type = self.return_type.strip() signature = signature.strip() if '*' not in self.return_type and signature[0] == '*': # return type is void* not void self.return_type += '*' signature = signature[1:].strip() self.name,signature = signature.split('(',1) self.name = self.name.strip() signature = signature.replace(')','').strip() signature = signature.replace(';','').strip() self.args = [] if signature: for arg in signature.split(','): self.args.append(FunctionArgument(arg.strip())) def get_call(self, name=None): sig = '' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += arg.name sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def get_signature(self, name=None): sig = self.return_type[:] sig += ' ' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += str(arg) sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def __str__(self): return self.get_signature() if __name__ == '__main__': if len(sys.argv) != 2: print 'incorrect number of arguments' print 'usage: capi_gen.py > ' sys.exit(len(sys.argv)) # print headers print ''' #if HAVE_CONFIG_H # include "config.h" #endif #include #include "armci.h" #include "parmci.h" ''' functions = {} # parse signatures into the Function class for sig in get_signatures(sys.argv[1]): function = Function(sig) functions[function.name] = function # now process the functions for name in sorted(functions): func = functions[name] maybe_return = '' if '*' in func.return_type or 'void' not in func.return_type: maybe_return = 'return ' func = functions[name] new_name = None if 'PARMCI_' in name: new_name = name.replace('PARMCI_','ARMCI_') elif 'parmci_' in name: new_name = name.replace('parmci_','armci_') print ''' #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak %s #endif %s { %s%s; } ''' % (new_name, func.get_signature(new_name), maybe_return, func.get_call()) ga-5-3/comex/src-armci/0000750005473000001440000000000012275260566013601 5ustar d3n000usersga-5-3/comex/src-armci/message.h0000640005473000001440000000645012077332772015403 0ustar d3n000users#ifndef _MESSAGE_H_ #define _MESSAGE_H_ #include "armci.h" #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif #define ARMCI_INT -99 #define ARMCI_LONG -101 #define ARMCI_LONG_LONG -102 #define ARMCI_FLOAT -306 #define ARMCI_DOUBLE -307 #define SCOPE_ALL 333 #define SCOPE_NODE 337 #define SCOPE_MASTERS 339 #define armci_msg_sel(x,n,op,type,contribute)\ armci_msg_sel_scope(SCOPE_ALL,(x),(n),(op),(type),(contribute)) #if 0 #define armci_msg_bcast(buffer, len, root)\ armci_msg_bcast_scope(SCOPE_ALL, (buffer), (len), (root)) #else extern void armci_msg_bcast(void *buffer, int len, int root); #endif extern void armci_msg_sel_scope(int scope, void *x, int n, char* op, int type, int contribute); extern void armci_msg_bcast_scope(int scope, void* buffer, int len, int root); extern void armci_msg_brdcst(void* buffer, int len, int root); extern void armci_msg_snd(int tag, void* buffer, int len, int to); extern void armci_msg_rcv(int tag, void* buffer, int buflen, int *msglen, int from); extern int armci_msg_rcvany(int tag, void* buffer, int buflen, int *msglen); extern void armci_msg_reduce(void *x, int n, char *op, int type); extern void armci_msg_reduce_scope(int scope, void *x, int n, char *op, int type); extern void armci_msg_gop_scope(int scope, void *x, int n, char* op, int type); extern void armci_msg_igop(int *x, int n, char* op); extern void armci_msg_lgop(long *x, int n, char* op); extern void armci_msg_llgop(long long *x, int n, char* op); extern void armci_msg_fgop(float *x, int n, char* op); extern void armci_msg_dgop(double *x, int n, char* op); extern void armci_exchange_address(void *ptr_ar[], int n); extern void armci_msg_barrier(); extern void armci_msg_bintree(int scope, int* Root, int *Up, int *Left, int *Right); extern int armci_msg_me(); extern int armci_msg_nproc(); extern void armci_msg_abort(int code); extern void armci_msg_init(int *argc, char ***argv); extern void armci_msg_finalize(); extern double armci_timer(); extern void armci_msg_clus_brdcst(void *buf, int len); extern void armci_msg_clus_igop(int *x, int n, char* op); extern void armci_msg_clus_fgop(float *x, int n, char* op); extern void armci_msg_clus_lgop(long *x, int n, char* op); extern void armci_msg_clus_llgop(long long *x, int n, char* op); extern void armci_msg_clus_dgop(double *x, int n, char* op); extern void armci_msg_group_gop_scope(int scope, void *x, int n, char* op, int type, ARMCI_Group *group); extern void armci_msg_group_igop(int *x, int n, char* op,ARMCI_Group *group); extern void armci_msg_group_lgop(long *x, int n, char* op,ARMCI_Group *group); extern void armci_msg_group_llgop(long long *x, int n, char* op,ARMCI_Group *group); extern void armci_msg_group_fgop(float *x, int n, char* op,ARMCI_Group *group); extern void armci_msg_group_dgop(double *x, int n,char* op,ARMCI_Group *group); extern void armci_exchange_address_grp(void *ptr_arr[], int n, ARMCI_Group *group); extern void armci_msg_group_barrier(ARMCI_Group *group); extern void armci_msg_group_bcast_scope(int scope, void *buf, int len, int root, ARMCI_Group *group); extern void armci_grp_clus_brdcst(void *buf, int len, int grp_master, int grp_clus_nproc,ARMCI_Group *mastergroup); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif ga-5-3/comex/src-armci/Makefile.inc0000640005473000001440000000071712100270004015766 0ustar d3n000userslib_LTLIBRARIES += libarmci.la libarmci_la_SOURCES = libarmci_la_SOURCES += src-armci/armci.c libarmci_la_SOURCES += src-armci/groups.c libarmci_la_SOURCES += src-armci/message.c libarmci_la_SOURCES += src-armci/iterator.c libarmci_la_SOURCES += src-armci/iterator.h libarmci_la_LIBADD = libcomexi.la include_HEADERS += src-armci/armci.h include_HEADERS += src-armci/message.h noinst_LTLIBRARIES += libarmcii.la libarmcii_la_SOURCES = $(libarmci_la_SOURCES) ga-5-3/comex/src-armci/iterator.h0000640005473000001440000000260412274750307015602 0ustar d3n000users/** @file iterator.h * @author Sriram Krishnamoorthy * @brief Stride iterator. * An iterator for the stride descriptor to reuse common traversal * functionality. More functionality related to the strided * descriptor reusable across files will be extracted here as well. */ #ifndef _STRIDE_INFO_H_ #define _STRIDE_INFO_H_ #include "armci.h" /*for ARMCI_MAX_STRIDE_LEVEL and dassert*/ #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif typedef struct { char *base_ptr; int stride_levels; int stride_arr[ARMCI_MAX_STRIDE_LEVEL]; int seg_count[ARMCI_MAX_STRIDE_LEVEL+1]; int size, pos, itr[ARMCI_MAX_STRIDE_LEVEL]; } stride_info_t; void armci_stride_info_init(stride_info_t *sinfo, void *base_ptr, int stride_levels, const int *stride_arr, const int *seg_count); void armci_stride_info_destroy(stride_info_t *sinfo); int armci_stride_info_count(stride_info_t *sinfo); int armci_stride_info_pos(stride_info_t *sinfo); void armci_stride_info_next(stride_info_t *sinfo); void *armci_stride_info_seg_ptr(stride_info_t *sinfo); int armci_stride_info_seg_size(stride_info_t *sinfo); int armci_stride_info_seg_off(stride_info_t *sinfo); int armci_stride_info_size(stride_info_t *sinfo); int armci_stride_info_has_more(stride_info_t *sinfo); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /*_STRIDE_INFO_H_*/ ga-5-3/comex/src-armci/armci.h0000640005473000001440000004137512247204305015044 0ustar d3n000users/* ARMCI header file */ #ifndef _ARMCI_H #define _ARMCI_H /* for size_t */ #include #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern int armci_sameclusnode(int proc); typedef struct { void **src_ptr_array; void **dst_ptr_array; int ptr_array_len; int bytes; } armci_giov_t; typedef long armci_size_t; extern int armci_notify(int proc); extern int armci_notify_wait(int proc,int *pval); extern int ARMCI_Init(); /* initialize ARMCI */ extern int ARMCI_Init_args(int *argc, char ***argv); /* initialize ARMCI */ extern int ARMCI_Initialized(); extern void ARMCI_Barrier(); /* ARMCI Barrier*/ extern int ARMCI_Put(void *src, void* dst, int bytes, int proc); extern int ARMCI_Put_flag(void *src, void* dst,int bytes,int *f,int v,int proc); /* On path for deprecation */ #define ARMCI_Put1(_s,_d,_b,_p) memcpy(_d,_s,_b), 0 extern int ARMCI_PutS( /* strided put */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ); extern int ARMCI_PutS_flag_dir( /* put with flag that uses direct put */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int *flag, /* pointer to remote flag */ int val, /* value to set flag upon completion of data transfer */ int proc /* remote process(or) ID */ ); extern int ARMCI_PutS_flag( void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of segments at each stride levels: count[0]=bytes*/ int stride_levels, /* number of stride levels */ int *flag, /* pointer to remote flag */ int val, /* value to set flag upon completion of data transfer */ int proc /* remote process(or) ID */ ); extern int ARMCI_Acc(int optype, void *scale, void *src, void* dst, int bytes, int proc); extern int ARMCI_AccS( /* strided accumulate */ int optype, /* operation */ void *scale, /* scale factor x += scale*y */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ); extern int ARMCI_Get(void *src, void* dst, int bytes, int proc); extern int ARMCI_GetS( /* strided get */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc /* remote process(or) ID */ ); extern int ARMCI_GetV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int ARMCI_PutV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int ARMCI_AccV( int op, /* operation code */ void *scale, /* scaling factor for accumulate */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc /* remote process(or) ID */ ); extern int ARMCI_PutValueInt(int src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc /* remote process (or) ID */ ); extern int ARMCI_PutValueLong(long src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc /* remote process (or) ID */ ); extern int ARMCI_PutValueFloat(float src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc /* remote process (or) ID */ ); extern int ARMCI_PutValueDouble(double src,/* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc /* remote process (or) ID */ ); extern int ARMCI_GetValueInt(void *src, int proc); extern long ARMCI_GetValueLong(void *src, int proc); extern float ARMCI_GetValueFloat(void *src, int proc); extern double ARMCI_GetValueDouble(void *src, int proc); extern int ARMCI_Malloc(void* ptr_arr[], armci_size_t bytes); extern int ARMCI_Free(void *ptr); extern void* ARMCI_Malloc_local(armci_size_t bytes); extern int ARMCI_Free_local(void *ptr); extern int ARMCI_Same_node(int proc); extern void ARMCI_Finalize(); /* terminate ARMCI */ extern void ARMCI_Error(char *msg, int code); extern void ARMCI_Fence(int proc); extern void ARMCI_AllFence(); extern int ARMCI_Rmw(int op, void *ploc, void *prem, int extra, int proc); extern void ARMCI_Cleanup(); extern int ARMCI_Create_mutexes(int num); extern int ARMCI_Destroy_mutexes(); extern void ARMCI_Lock(int mutex, int proc); extern void ARMCI_Unlock(int mutex, int proc); extern void ARMCI_Set_shm_limit(unsigned long shmemlimit); extern int ARMCI_Uses_shm(); extern void ARMCI_Copy(void *src, void *dst, int n); #define FAIL -1 #define FAIL2 -2 #define FAIL3 -3 #define FAIL4 -4 #define FAIL5 -5 #define FAIL6 -6 #define FAIL7 -7 #define FAIL8 -8 #define ARMCI_SWAP 10 #define ARMCI_SWAP_LONG 11 #define ARMCI_FETCH_AND_ADD 12 #define ARMCI_FETCH_AND_ADD_LONG 13 #define ARMCI_ACC_OFF 36 #define ARMCI_ACC_INT (ARMCI_ACC_OFF + 1) #define ARMCI_ACC_DBL (ARMCI_ACC_OFF + 2) #define ARMCI_ACC_FLT (ARMCI_ACC_OFF + 3) #define ARMCI_ACC_CPL (ARMCI_ACC_OFF + 4) #define ARMCI_ACC_DCP (ARMCI_ACC_OFF + 5) #define ARMCI_ACC_LNG (ARMCI_ACC_OFF + 6) #define ARMCI_MAX_STRIDE_LEVEL 8 /****************Error/termination macros************************/ /**Debug assert macro. To be used instead of assert for more user * informative and cleaner death. Also allows individualized * enabling/disabling of assert statements. * @param _enable Ignore this assertion if _enable==0 * @param _cond Condition to be evaluated (assert that it is true) * @param _plist Information to be printed using printf, should be * within parenthesis (eg., dassert(1,0,("%d:test n=%d\n",me,0)); * ). This is fed directly to printf. */ int dassertp_fail(const char *cond_string, const char *file, const char *func, unsigned int line, int code); void derr_printf(const char *format, ...); #undef dassertp #define dassertp(_enable,_cond,_plist) do { \ if((_enable) && !(_cond)) { \ derr_printf _plist; \ dassertp_fail(#_cond,__FILE__,FUNCTION_NAME,__LINE__,1); \ }} while(0) #undef dassertc #define dassertc(_enable,_cond,_plist,_code) do { \ if((_enable) && !(_cond)) { \ derr_printf _plist; \ dassertp_fail(#_cond,__FILE__,FUNCTION_NAME,__LINE__,_code); \ }} while(0) #undef dassert #define dassert(_enable,_cond) dassertp((_enable),(_cond),("")) #undef dassert1 #define dassert1(_enable,_cond,_ival) \ dassertp((_enable),(_cond),("%d: error ival=%d\n", \ armci_msg_me(),(int)(_ival))) #define armci_die(_msg,_code) dassertc(1,0, \ ("%d:%s: %d\n", armci_msg_me(),(_msg),(_code)),_code) #define armci_die2(_msg,_code1,_code2) dassertc(1,0, \ ("%d:%s: (%d,%d)\n",armci_msg_me(),(_msg),(_code1),(_code2)),_code1) /************ locality information **********************************************/ typedef int armci_domain_t; #define ARMCI_DOMAIN_SMP 0 /* SMP node domain for armci_domain_XXX calls */ extern int armci_domain_nprocs(armci_domain_t domain, int id); extern int armci_domain_id(armci_domain_t domain, int glob_proc_id); extern int armci_domain_glob_proc_id(armci_domain_t domain, int id, int loc_proc_id); extern int armci_domain_my_id(armci_domain_t domain); extern int armci_domain_count(armci_domain_t domain); extern int armci_domain_same_id(armci_domain_t domain, int proc); /* PVM group * On CrayT3E: the default group is the global group which is (char *)NULL * It is the only working group. * On Workstations: the default group is "mp_working_group". User can set * the group name by calling the ARMCI_PVM_init (defined * in message.c) and passing the group name to the library. */ extern char *mp_group_name; /*********************stuff for non-blocking API******************************/ /*\ the request structure for non-blocking api. \*/ /*max of sizes for all platforms. Increase if any platform needs more*/ typedef int armci_hdl_t; typedef int ARMCI_Group; extern void ARMCI_Group_create(int n, int *pid_list, ARMCI_Group *group_out); extern void ARMCI_Group_create_child(int n, int *pid_list, ARMCI_Group *group_out, ARMCI_Group *group_parent); extern void ARMCI_Group_free(ARMCI_Group *group); extern int ARMCI_Group_rank(ARMCI_Group *group, int *rank); extern void ARMCI_Group_size(ARMCI_Group *group, int *size); extern void ARMCI_Group_set_default(ARMCI_Group *group); extern void ARMCI_Group_get_default(ARMCI_Group *group_out); extern void ARMCI_Group_get_world(ARMCI_Group *group_out); extern int ARMCI_Absolute_id(ARMCI_Group *group, int group_rank); extern int ARMCI_Uses_shm_grp(ARMCI_Group *group); extern int ARMCI_Malloc_group(void *ptr_arr[], armci_size_t bytes,ARMCI_Group *group); extern int ARMCI_Free_group(void *ptr, ARMCI_Group *group); extern int ARMCI_NbPut(void *src, void* dst, int bytes, int proc,armci_hdl_t* nb_handle); extern int ARMCI_NbPutS( /* strided put */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbAccS( /* strided accumulate */ int optype, /* operation */ void *scale, /* scale factor x += scale*y */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbGet(void *src, void* dst, int bytes, int proc,armci_hdl_t* nb_handle); extern int ARMCI_NbGetS( /* strided get */ void *src_ptr, /* pointer to 1st segment at source*/ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination*/ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level count[0]=bytes */ int stride_levels, /* number of stride levels */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handler/*armci_non-blocking request handle*/ ); extern int ARMCI_NbGetV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbPutV( armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbAccV( int op, /* operation code */ void *scale, /* scaling factor for accumulate */ armci_giov_t darr[], /* descriptor array */ int len, /* length of descriptor array */ int proc, /* remote process(or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle*/ ); extern int ARMCI_NbPutValueInt(int src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc, /* remote process (or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle */ ); extern int ARMCI_NbPutValueLong(long src, /* value in a register to put */ void *dst, /* dest starting addr to put data */ int proc, /* remote process (or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle */ ); extern int ARMCI_NbPutValueFloat(float src,/* value in a register to put */ void *dst,/* dest starting addr to put data */ int proc, /* remote process (or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle */ ); extern int ARMCI_NbPutValueDouble(double src,/* value in a register to put */ void *dst,/* dest starting addr to put data*/ int proc, /* remote process (or) ID */ armci_hdl_t* nb_handle /*armci_non-blocking request handle */ ); extern int ARMCI_Wait(armci_hdl_t* nb_handle); /*non-blocking request handle*/ extern int ARMCI_Test(armci_hdl_t* nb_handle); /*non-blocking request handle*/ extern int ARMCI_WaitAll (); extern int ARMCI_WaitProc (int proc); extern void ARMCI_SET_AGGREGATE_HANDLE(armci_hdl_t* nb_handle); extern void ARMCI_UNSET_AGGREGATE_HANDLE(armci_hdl_t* nb_handle); /* #define ARMCI_INIT_HANDLE(hdl) do {((double *)((hdl)->data))[0]=0; \ ((double *)((hdl)->data))[1]=0; }while(0) */ #define ARMCI_INIT_HANDLE(hdl) /* -------------- ARMCI Non-collective memory allocator ------------- */ typedef struct armci_meminfo_ds { char * armci_addr; /* remote address of the creator which can be used in ARMCI communication */ char *addr; /* local address of creator which can be used in to set SMP memoffset, armci_set_mem_offset() */ size_t size; /* size of remote pid's segment (bytes) */ int cpid; /* armci pid of creator */ long idlist[128]; } armci_meminfo_t; extern void ARMCI_Memget(size_t bytes, armci_meminfo_t *meminfo, int memflg); extern void* ARMCI_Memat(armci_meminfo_t *meminfo, long offset); extern void ARMCI_Memdt(armci_meminfo_t *meminfo, long offset); extern void ARMCI_Memctl(armci_meminfo_t *meminfo); /* ------------------------------------------------------------------ */ #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* _ARMCI_H */ ga-5-3/comex/src-armci/iterator.c0000640005473000001440000001226512274750307015601 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file iterator.h * @author Sriram Krishnamoorthy * @brief Stride iterator. * An iterator for the stride descriptor to reuse common traversal * functionality. More functionality related to the strided * descriptor reusable across files will be extracted here as well. */ #include #include #include #include #include "iterator.h" /**Create a stride iterator. * @param base_ptr IN Starting pointer for stride descriptor * @param stride_levels IN #stride levels * @param stride_arr IN the strides (arr of size[stride_levels]) * @param seg_count IN #segments in each stride * level([stride_levels+1]) * @return Handle to stride iterator created */ void armci_stride_info_init(stride_info_t *sinfo, void *base_ptr, int stride_levels, const int *stride_arr, const int *seg_count) { int i; assert(sinfo!=NULL); assert(stride_levels>=0); assert(stride_levels<=ARMCI_MAX_STRIDE_LEVEL); for(i=0; i= seg_count[0]); else assert(stride_arr[i] >= stride_arr[i-1]*seg_count[i]); } sinfo->base_ptr= base_ptr; sinfo->stride_levels = stride_levels; for(i=0; istride_arr[i] = stride_arr[i]; } for(i=0; iseg_count[i] = seg_count[i]; } sinfo->size=1; for(i=1; isize *= sinfo->seg_count[i]; } assert(sinfo->size>0); sinfo->pos=0; for(i=0; iitr[i] = 0; } } /**Destroy a stride iterator. * @param psitr IN/OUT Pointer to stride iterator * @return void */ void armci_stride_info_destroy(stride_info_t *sinfo) { } /**Size of the stride iterator. Defined as total #contiguous * segments in the stride iterator. * @param sitr IN Handle to stride iterator * @return Size of the stride iterator */ int armci_stride_info_size(stride_info_t *sinfo) { assert(sinfo!=NULL); return sinfo->size; } /**Position of the stride iterator. Between 0 and (size-1), * inclusive. Position is the index of the contiguous segment * currently traversed by the iterator. * @param sitr IN Handle to stride descriptor * @return Position of the iterator */ int armci_stride_info_pos(stride_info_t *sinfo) { assert(sinfo!=NULL); return sinfo->pos; } /**Move the iterator to the next position. Assumes position<=size. * @param sitr IN Handle to stride descriptor * @return void */ void armci_stride_info_next(stride_info_t *sinfo) { int i; assert(sinfo!=NULL); assert(sinfo->pos size); sinfo->pos += 1; if(sinfo->stride_levels>0) { sinfo->itr[0] += 1; for(i=0; istride_levels-1 && sinfo->itr[i]==sinfo->seg_count[i+1]; i++) { sinfo->itr[i] = 0; sinfo->itr[i+1] += 1; } assert(sinfo->itr[i] <= sinfo->seg_count[i+1]); } } /**Get pointer to the contiguous segment currently being * traversed. This is the pointer to the user buffer. * @param sitr IN Handle to stride descriptor * @return pointer to current contiguous segment */ void *armci_stride_info_seg_ptr(stride_info_t *sinfo) { assert(sinfo!=NULL); return sinfo->base_ptr + armci_stride_info_seg_off(sinfo); } /**Get the size of the current segment. * @param sitr IN Handle to stride descriptor * @return Size of the current segment */ int armci_stride_info_seg_size(stride_info_t *sinfo) { assert(sinfo!=NULL); return sinfo->seg_count[0]; } /**Get the offset of the current segment with respect to the start of * the first segment (a.k.a src_ptr) * @param sitr IN Handle to stride descriptor * @return Offset of the current segment */ int armci_stride_info_seg_off(stride_info_t *sinfo) { int i; int off; assert(sinfo!=NULL); off=0; for(i=0; istride_levels; i++) { off += sinfo->itr[i] * sinfo->stride_arr[i]; } return off; } /**Check if there are more segments to iterate over. (a.k.a * positionpossize; } void armci_write_strided( void *ptr, int stride_levels, int stride_arr[], int count[], char *buf) { const int seg_size = count[0]; int off=0; assert(count[0]>0); stride_info_t sitr; armci_stride_info_init(&sitr,ptr,stride_levels,stride_arr,count); while(armci_stride_info_has_more(&sitr)) { char *sptr = armci_stride_info_seg_ptr(&sitr); memcpy(&buf[off],sptr,seg_size); off += seg_size; armci_stride_info_next(&sitr); } armci_stride_info_destroy(&sitr); } void armci_read_strided( void *ptr, int stride_levels, int stride_arr[], int count[], char *buf) { const int seg_size = count[0]; int off=0; assert(count[0]>0); stride_info_t sitr; armci_stride_info_init(&sitr,ptr,stride_levels,stride_arr,count); while(armci_stride_info_has_more(&sitr)) { char *dptr = armci_stride_info_seg_ptr(&sitr); memcpy(dptr,&buf[off],seg_size); off += seg_size; armci_stride_info_next(&sitr); } armci_stride_info_destroy(&sitr); } ga-5-3/comex/src-armci/groups.c0000640005473000001440000000245512100322123015242 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include "armci.h" #include "message.h" #include "comex.h" /* ARMCI has the notion of a default group and a world group. */ ARMCI_Group ARMCI_Default_Proc_Group = 0; int ARMCI_Group_rank(ARMCI_Group *id, int *rank) { return comex_group_rank(*id, rank); } void ARMCI_Group_size(ARMCI_Group *id, int *size) { comex_group_size(*id, size); } int ARMCI_Absolute_id(ARMCI_Group *id, int group_rank) { int world_rank; assert(COMEX_SUCCESS == comex_group_translate_world(*id, group_rank, &world_rank)); return world_rank; } void ARMCI_Group_set_default(ARMCI_Group *id) { ARMCI_Default_Proc_Group = *id; } void ARMCI_Group_get_default(ARMCI_Group *group_out) { *group_out = ARMCI_Default_Proc_Group; } void ARMCI_Group_get_world(ARMCI_Group *group_out) { *group_out = COMEX_GROUP_WORLD; } void ARMCI_Group_free(ARMCI_Group *id) { comex_group_free(*id); } void ARMCI_Group_create_child( int n, int *pid_list, ARMCI_Group *id_child, ARMCI_Group *id_parent) { comex_group_create(n, pid_list, *id_parent, id_child); } void ARMCI_Group_create(int n, int *pid_list, ARMCI_Group *group_out) { comex_group_create(n, pid_list, ARMCI_Default_Proc_Group, group_out); } ga-5-3/comex/src-armci/armci.c0000640005473000001440000002643312274750307015045 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include "armci.h" #include "parmci.h" #include "comex.h" extern int ARMCI_Default_Proc_Group; MPI_Comm ARMCI_COMM_WORLD; static void convert_giov(armci_giov_t *a, comex_giov_t *b, int len) { int i; for (i=0; i #include "armci.h" #include "parmci.h" #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Acc #endif int ARMCI_Acc(int optype, void *scale, void *src, void *dst, int bytes, int proc) { return PARMCI_Acc(optype, scale, src, dst, bytes, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_AccS #endif int ARMCI_AccS(int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { return PARMCI_AccS(optype, scale, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_AccV #endif int ARMCI_AccV(int op, void *scale, armci_giov_t *darr, int len, int proc) { return PARMCI_AccV(op, scale, darr, len, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_AllFence #endif void ARMCI_AllFence() { PARMCI_AllFence(); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Barrier #endif void ARMCI_Barrier() { PARMCI_Barrier(); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Create_mutexes #endif int ARMCI_Create_mutexes(int num) { return PARMCI_Create_mutexes(num); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Destroy_mutexes #endif int ARMCI_Destroy_mutexes() { return PARMCI_Destroy_mutexes(); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Fence #endif void ARMCI_Fence(int proc) { PARMCI_Fence(proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Finalize #endif void ARMCI_Finalize() { PARMCI_Finalize(); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Free #endif int ARMCI_Free(void *ptr) { return PARMCI_Free(ptr); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Free_local #endif int ARMCI_Free_local(void *ptr) { return PARMCI_Free_local(ptr); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Get #endif int ARMCI_Get(void *src, void *dst, int bytes, int proc) { return PARMCI_Get(src, dst, bytes, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_GetS #endif int ARMCI_GetS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { return PARMCI_GetS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_GetV #endif int ARMCI_GetV(armci_giov_t *darr, int len, int proc) { return PARMCI_GetV(darr, len, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_GetValueDouble #endif double ARMCI_GetValueDouble(void *src, int proc) { return PARMCI_GetValueDouble(src, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_GetValueFloat #endif float ARMCI_GetValueFloat(void *src, int proc) { return PARMCI_GetValueFloat(src, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_GetValueInt #endif int ARMCI_GetValueInt(void *src, int proc) { return PARMCI_GetValueInt(src, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_GetValueLong #endif long ARMCI_GetValueLong(void *src, int proc) { return PARMCI_GetValueLong(src, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Init #endif int ARMCI_Init() { return PARMCI_Init(); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Init_args #endif int ARMCI_Init_args(int *argc, char ***argv) { return PARMCI_Init_args(argc, argv); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Initialized #endif int ARMCI_Initialized() { return PARMCI_Initialized(); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Lock #endif void ARMCI_Lock(int mutex, int proc) { PARMCI_Lock(mutex, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Malloc #endif int ARMCI_Malloc(void **ptr_arr, armci_size_t bytes) { return PARMCI_Malloc(ptr_arr, bytes); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Malloc_local #endif void* ARMCI_Malloc_local(armci_size_t bytes) { return PARMCI_Malloc_local(bytes); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Memat #endif void* ARMCI_Memat(armci_meminfo_t *meminfo, long offset) { return PARMCI_Memat(meminfo, offset); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Memget #endif void ARMCI_Memget(size_t bytes, armci_meminfo_t *meminfo, int memflg) { PARMCI_Memget(bytes, meminfo, memflg); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbAccS #endif int ARMCI_NbAccS(int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbAccS(optype, scale, src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbAccV #endif int ARMCI_NbAccV(int op, void *scale, armci_giov_t *darr, int len, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbAccV(op, scale, darr, len, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbGet #endif int ARMCI_NbGet(void *src, void *dst, int bytes, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbGet(src, dst, bytes, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbGetS #endif int ARMCI_NbGetS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbGetS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbGetV #endif int ARMCI_NbGetV(armci_giov_t *darr, int len, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbGetV(darr, len, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbPut #endif int ARMCI_NbPut(void *src, void *dst, int bytes, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbPut(src, dst, bytes, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbPutS #endif int ARMCI_NbPutS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbPutS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbPutV #endif int ARMCI_NbPutV(armci_giov_t *darr, int len, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbPutV(darr, len, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbPutValueDouble #endif int ARMCI_NbPutValueDouble(double src, void *dst, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbPutValueDouble(src, dst, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbPutValueFloat #endif int ARMCI_NbPutValueFloat(float src, void *dst, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbPutValueFloat(src, dst, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbPutValueInt #endif int ARMCI_NbPutValueInt(int src, void *dst, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbPutValueInt(src, dst, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_NbPutValueLong #endif int ARMCI_NbPutValueLong(long src, void *dst, int proc, armci_hdl_t *nb_handle) { return PARMCI_NbPutValueLong(src, dst, proc, nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Put #endif int ARMCI_Put(void *src, void *dst, int bytes, int proc) { return PARMCI_Put(src, dst, bytes, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_PutS #endif int ARMCI_PutS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc) { return PARMCI_PutS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_PutS_flag #endif int ARMCI_PutS_flag(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc) { return PARMCI_PutS_flag(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, flag, val, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_PutS_flag_dir #endif int ARMCI_PutS_flag_dir(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc) { return PARMCI_PutS_flag_dir(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, flag, val, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_PutV #endif int ARMCI_PutV(armci_giov_t *darr, int len, int proc) { return PARMCI_PutV(darr, len, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_PutValueDouble #endif int ARMCI_PutValueDouble(double src, void *dst, int proc) { return PARMCI_PutValueDouble(src, dst, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_PutValueFloat #endif int ARMCI_PutValueFloat(float src, void *dst, int proc) { return PARMCI_PutValueFloat(src, dst, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_PutValueInt #endif int ARMCI_PutValueInt(int src, void *dst, int proc) { return PARMCI_PutValueInt(src, dst, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_PutValueLong #endif int ARMCI_PutValueLong(long src, void *dst, int proc) { return PARMCI_PutValueLong(src, dst, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Put_flag #endif int ARMCI_Put_flag(void *src, void *dst, int bytes, int *f, int v, int proc) { return PARMCI_Put_flag(src, dst, bytes, f, v, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Rmw #endif int ARMCI_Rmw(int op, void *ploc, void *prem, int extra, int proc) { return PARMCI_Rmw(op, ploc, prem, extra, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Test #endif int ARMCI_Test(armci_hdl_t *nb_handle) { return PARMCI_Test(nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Unlock #endif void ARMCI_Unlock(int mutex, int proc) { PARMCI_Unlock(mutex, proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_Wait #endif int ARMCI_Wait(armci_hdl_t *nb_handle) { return PARMCI_Wait(nb_handle); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_WaitAll #endif int ARMCI_WaitAll() { return PARMCI_WaitAll(); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak ARMCI_WaitProc #endif int ARMCI_WaitProc(int proc) { return PARMCI_WaitProc(proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak armci_msg_barrier #endif void armci_msg_barrier() { parmci_msg_barrier(); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak armci_msg_group_barrier #endif void armci_msg_group_barrier(ARMCI_Group *group) { parmci_msg_group_barrier(group); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak armci_notify #endif int armci_notify(int proc) { return parmci_notify(proc); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak armci_notify_wait #endif int armci_notify_wait(int proc, int *pval) { return parmci_notify_wait(proc, pval); } ga-5-3/comex/src-armci/message.c0000640005473000001440000004003612274750307015371 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include "armci.h" #include "message.h" #include "comex.h" #if COMEX_NETWORK_MPI_TS extern void comex_make_progress(void); #define COMEX_TAG 27624 #endif /* hacky alias for MPI_COMM_SELF */ static ARMCI_Group ARMCI_GROUP_SELF = -2; extern int ARMCI_Default_Proc_Group; /* for armci_msg_sel_scope */ static MPI_Datatype MPI_LONGLONG_INT; static MPI_Comm wc() { MPI_Comm comm; assert(COMEX_SUCCESS == comex_group_comm(COMEX_GROUP_WORLD, &comm)); return comm; } /* undocumented, but used in GA to expose MPI_Comm */ MPI_Comm armci_group_comm(ARMCI_Group *group) { MPI_Comm comm; assert(COMEX_SUCCESS == comex_group_comm(*group, &comm)); return comm; } static MPI_Datatype armci_type_to_mpi_type(int type) { MPI_Datatype mpi_dt; if (type == ARMCI_INT) { mpi_dt = MPI_INT; } else if (type == ARMCI_LONG) { mpi_dt = MPI_LONG; } else if (type == ARMCI_LONG_LONG) { mpi_dt = MPI_LONG_LONG; } else if (type == ARMCI_FLOAT) { mpi_dt = MPI_FLOAT; } else if (type == ARMCI_DOUBLE) { mpi_dt = MPI_DOUBLE; } else { assert(0); } return mpi_dt; } static MPI_Op armci_op_to_mpi_op(char *op) { MPI_Op result; if (strncmp(op, "+", 1) == 0) { result = MPI_SUM; } else if (strncmp(op, "max", 3) == 0) { result = MPI_MAX; } else if (strncmp(op, "min", 3) == 0) { result = MPI_MIN; } else if (strncmp(op, "*", 1) == 0) { result = MPI_PROD; } else if (strncmp(op, "absmin", 6) == 0) { result = MPI_MIN; } else if (strncmp(op, "absmax", 6) == 0) { result = MPI_MAX; } else if (strncmp(op, "or", 2) == 0) { result = MPI_BOR; } else { printf("Unsupported gop operation:%s\n",op); assert(0); } return result; } static void do_abs(void *x, int n, int type) { #define ARMCI_ABS_INT(a) (((a) >= 0) ? (a) : (-(a))) #define ARMCI_ABS_FLT(a) (((a) >= 0.0) ? (a) : (-(a))) #define DO_ABS(ARMCI_TYPE, C_TYPE, WHICH) \ if (type == ARMCI_TYPE) { \ int i; \ C_TYPE *y = (C_TYPE *)x; \ for (i = 0; i < n; i++) { \ y[i] = ARMCI_ABS_##WHICH(y[i]); \ } \ } \ else DO_ABS(ARMCI_INT, int, INT) DO_ABS(ARMCI_LONG, long, INT) DO_ABS(ARMCI_LONG_LONG, long long, INT) DO_ABS(ARMCI_FLOAT, float, FLT) DO_ABS(ARMCI_DOUBLE, double, FLT) { assert(0); } #undef ARMCI_ABS_INT #undef ARMCI_ABS_FLT #undef DO_ABS } static MPI_Comm get_comm(ARMCI_Group *group) { MPI_Comm comm; assert(COMEX_SUCCESS == comex_group_comm(*group, &comm)); return comm; } static ARMCI_Group get_default_group() { ARMCI_Group group; ARMCI_Group_get_default(&group); return group; } static MPI_Comm get_default_comm() { ARMCI_Group group; ARMCI_Group_get_default(&group); return get_comm(&group); } static int get_default_rank() { int rank; MPI_Comm_rank(get_default_comm(), &rank); return rank; } static void do_gop(void *x, int n, char* op, int type, ARMCI_Group group) { MPI_Comm comm = MPI_COMM_NULL; int mpi_type_size = 0; MPI_Datatype mpi_type = MPI_DATATYPE_NULL; int rc = 0; void *result = NULL; MPI_Op mpi_op = MPI_OP_NULL; if (ARMCI_GROUP_SELF == group) { comm = MPI_COMM_SELF; } else { comm = get_comm(&group); } mpi_type = armci_type_to_mpi_type(type); MPI_Type_size(mpi_type, &mpi_type_size); mpi_op = armci_op_to_mpi_op(op); if (strncmp(op, "absmin", 6) == 0) { do_abs(x, n, type); } else if (strncmp(op, "absmax", 6) == 0) { do_abs(x, n, type); } result = malloc(n*mpi_type_size); assert(result); if (ARMCI_GROUP_SELF != group) { comex_barrier(group); } rc = MPI_Allreduce(x, result, n, mpi_type, mpi_op, comm); assert(rc == MPI_SUCCESS); memcpy(x, result, mpi_type_size * n); free(result); } void armci_msg_bcast(void *buf, int len, int root) { assert(buf != NULL); comex_barrier(ARMCI_Default_Proc_Group); MPI_Bcast(buf, len, MPI_BYTE, root, get_default_comm()); } /* the payload is a struct with a union e.g. * * typedef struct { * union val_t {double dval; int ival; long lval; long long llval; float fval;}v; * Integer subscr[MAXDIM]; * DoubleComplex extra; * SingleComplex extra2; * } elem_info_t; * * The key piece is the first sizeof(double) bytes. The rest of the struct * simply tags along for the communication and can be represented as a byte * stream. * * The 'n' parameter is the size of the entire payload i.e. * sizeof(struct elem_info_t). * * We really care which process has the min/max value and then bcast the * entire payload using the min/max answer as the root. */ void armci_msg_sel_scope(int scope, void *x, int n, char* op, int type, int contribute) { static int initialized = 0; MPI_Op mpi_op = MPI_OP_NULL; MPI_Comm comm = get_default_comm(); if (SCOPE_NODE == scope) { comm = MPI_COMM_SELF; } /* first time this function is called we establish the * long long w/ int type that MPI doesn't provide by default */ if (!initialized) { int block[2]; MPI_Aint disp[2]; MPI_Datatype type[2]; initialized = 1; type[0] = MPI_LONG_LONG; type[1] = MPI_INT; disp[0] = 0; disp[1] = sizeof(long long); block[0] = 1; block[1] = 1; MPI_Type_struct(2, block, disp, type, &MPI_LONGLONG_INT); } if (strncmp(op, "min", 3) == 0) { mpi_op = MPI_MINLOC; } else if (strncmp(op, "max", 3) == 0) { mpi_op = MPI_MAXLOC; } else { assert(0); } #define SELECT(ARMCI_TYPE, C_TYPE, MPI_TYPE) \ if (type == ARMCI_TYPE) { \ struct { \ C_TYPE val; \ int rank; \ } in, out; \ in.val = *((C_TYPE*)x); \ in.rank = get_default_rank(); \ if (SCOPE_NODE != scope) { \ comex_barrier(ARMCI_Default_Proc_Group); \ } \ MPI_Allreduce(&in, &out, 1, MPI_TYPE, mpi_op, comm); \ armci_msg_bcast(x, n, out.rank); \ } \ else SELECT(ARMCI_INT, int, MPI_2INT) SELECT(ARMCI_LONG, long, MPI_LONG_INT) SELECT(ARMCI_LONG_LONG, long long, MPI_LONGLONG_INT) SELECT(ARMCI_FLOAT, float, MPI_FLOAT_INT) SELECT(ARMCI_DOUBLE, double, MPI_DOUBLE_INT) { assert(0); } #undef SELECT } void armci_msg_bcast_scope(int scope, void* buffer, int len, int root) { if (SCOPE_ALL == scope || SCOPE_MASTERS == scope) { armci_msg_bcast(buffer, len, root); } else if (SCOPE_NODE == scope) { assert(buffer != NULL); MPI_Bcast(buffer, len, MPI_BYTE, root, MPI_COMM_SELF); } else { assert(0); } } void armci_msg_brdcst(void* buffer, int len, int root) { armci_msg_bcast(buffer, len, root); } /* there was a case in ghost update where a proc sent a message to itself */ static MPI_Request self_request = MPI_REQUEST_NULL; static int self_request_flag = 0; void armci_msg_snd(int tag, void* buffer, int len, int to) { MPI_Comm comm = wc(); MPI_Request request; MPI_Status status; int self; int flag = 0; int rc; rc = MPI_Comm_rank(comm, &self); assert(MPI_SUCCESS == rc); #if COMEX_NETWORK_MPI_TS assert(COMEX_TAG != tag); #endif rc = MPI_Isend(buffer, len, MPI_CHAR, to, tag, wc(), &request); assert(MPI_SUCCESS == rc); if (to == self) { /* make sure this proc hasn't already sent to itself -- we only allow * one outstanding self send */ assert(!self_request_flag); self_request_flag = 1; self_request = request; } else { do { MPI_Test(&request, &flag, &status); assert(MPI_SUCCESS == rc); #if COMEX_NETWORK_MPI_TS comex_make_progress(); #endif } while (!flag); } } void armci_msg_rcv(int tag, void* buffer, int len, int *msglen, int from) { MPI_Comm comm = wc(); MPI_Request request; MPI_Status status; int self; int flag = 0; int rc; rc = MPI_Comm_rank(comm, &self); assert(MPI_SUCCESS == rc); #if COMEX_NETWORK_MPI_TS assert(COMEX_TAG != tag); #endif rc = MPI_Irecv(buffer, len, MPI_CHAR, from, tag, wc(), &request); assert(MPI_SUCCESS == rc); if (from == self && self_request_flag) { do { MPI_Test(&self_request, &flag, &status); assert(MPI_SUCCESS == rc); #if COMEX_NETWORK_MPI_TS comex_make_progress(); #endif } while (!flag); self_request = MPI_REQUEST_NULL; self_request_flag = 0; } do { MPI_Test(&request, &flag, &status); assert(MPI_SUCCESS == rc); #if COMEX_NETWORK_MPI_TS comex_make_progress(); #endif } while (!flag); if(msglen) { rc = MPI_Get_count(&status, MPI_CHAR, msglen); assert(MPI_SUCCESS == rc); } } int armci_msg_rcvany(int tag, void* buffer, int len, int *msglen) { MPI_Comm comm = wc(); MPI_Request request; MPI_Status status; int rank; int flag = 0; int rc; rc = MPI_Comm_rank(comm, &rank); assert(MPI_SUCCESS == rc); #if COMEX_NETWORK_MPI_TS assert(COMEX_TAG != tag); #endif rc = MPI_Irecv(buffer, len, MPI_CHAR, MPI_ANY_SOURCE, tag, wc(), &request); assert(MPI_SUCCESS == rc); do { MPI_Test(&request, &flag, &status); assert(MPI_SUCCESS == rc); #if COMEX_NETWORK_MPI_TS comex_make_progress(); #endif } while (!flag); if(msglen) { rc = MPI_Get_count(&status, MPI_CHAR, msglen); assert(MPI_SUCCESS == rc); } return (int)status.MPI_SOURCE; } void armci_msg_reduce(void *x, int n, char *op, int type) { do_gop(x, n, op, type, get_default_group()); } void armci_msg_reduce_scope(int scope, void *x, int n, char *op, int type) { if (SCOPE_NODE == scope) { do_gop(x, n, op, type, ARMCI_GROUP_SELF); } else { do_gop(x, n, op, type, get_default_group()); } } void armci_msg_gop_scope(int scope, void *x, int n, char* op, int type) { if (SCOPE_NODE == scope) { do_gop(x, n, op, type, ARMCI_GROUP_SELF); } else { do_gop(x, n, op, type, get_default_group()); } } void armci_msg_igop(int *x, int n, char* op) { do_gop(x, n, op, ARMCI_INT, get_default_group()); } void armci_msg_lgop(long *x, int n, char* op) { do_gop(x, n, op, ARMCI_LONG, get_default_group()); } void armci_msg_llgop(long long *x, int n, char* op) { do_gop(x, n, op, ARMCI_LONG_LONG, get_default_group()); } void armci_msg_fgop(float *x, int n, char* op) { do_gop(x, n, op, ARMCI_FLOAT, get_default_group()); } void armci_msg_dgop(double *x, int n, char* op) { do_gop(x, n, op, ARMCI_DOUBLE, get_default_group()); } void armci_exchange_address(void *ptr_ar[], int n) { ARMCI_Group group; ARMCI_Group_get_default(&group); armci_exchange_address_grp(ptr_ar, n, &group); } void parmci_msg_barrier() { comex_barrier(ARMCI_Default_Proc_Group); MPI_Barrier(get_default_comm()); } void armci_msg_bintree(int scope, int* Root, int *Up, int *Left, int *Right) { int root, up, left, right, index, nproc; assert(SCOPE_NODE != scope); assert(SCOPE_MASTERS != scope); root = 0; nproc = armci_msg_nproc(); index = armci_msg_me() - root; up = (index-1)/2 + root; if( up < root) up = -1; left = 2*index + 1 + root; if(left >= root+nproc) left = -1; right = 2*index + 2 + root; if(right >= root+nproc)right = -1; *Up = up; *Left = left; *Right = right; *Root = root; } int armci_msg_me() { int rank; assert(comex_initialized()); assert(wc() != MPI_COMM_NULL); MPI_Comm_rank(wc(), &rank); return rank; } int armci_msg_nproc() { int size; assert(comex_initialized()); assert(wc() != MPI_COMM_NULL); MPI_Comm_size(wc(), &size); return size; } void armci_msg_abort(int code) { fprintf(stderr, "Exiting, Error in Communication\n"); MPI_Abort(wc(), code); } void armci_msg_init(int *argc, char ***argv) { int flag; MPI_Initialized(&flag); if(!flag) { MPI_Init(argc, argv); } } void armci_msg_finalize() { int flag; MPI_Initialized(&flag); assert(flag); MPI_Finalize(); } double armci_timer() { return MPI_Wtime(); } void armci_msg_clus_brdcst(void *buf, int len) { assert(0); } void armci_msg_clus_igop(int *x, int n, char* op) { assert(0); } void armci_msg_clus_fgop(float *x, int n, char* op) { assert(0); } void armci_msg_clus_lgop(long *x, int n, char* op) { assert(0); } void armci_msg_clus_llgop(long long *x, int n, char* op) { assert(0); } void armci_msg_clus_dgop(double *x, int n, char* op) { assert(0); } void armci_msg_group_gop_scope(int scope, void *x, int n, char* op, int type, ARMCI_Group *group) { if (SCOPE_NODE == scope) { do_gop(x, n, op, type, ARMCI_GROUP_SELF); } else { do_gop(x, n, op, type, *group); } } void armci_msg_group_igop(int *x, int n, char* op, ARMCI_Group *group) { do_gop(x, n, op, ARMCI_INT, *group); } void armci_msg_group_lgop(long *x, int n, char* op, ARMCI_Group *group) { do_gop(x, n, op, ARMCI_LONG, *group); } void armci_msg_group_llgop(long long *x, int n, char* op, ARMCI_Group *group) { do_gop(x, n, op, ARMCI_LONG_LONG, *group); } void armci_msg_group_fgop(float *x, int n, char* op, ARMCI_Group *group) { do_gop(x, n, op, ARMCI_FLOAT, *group); } void armci_msg_group_dgop(double *x, int n,char* op, ARMCI_Group *group) { do_gop(x, n, op, ARMCI_DOUBLE, *group); } void armci_exchange_address_grp(void *ptr_arr[], int n, ARMCI_Group *group) { assert(0); #if 0 MPI_Datatype mpi_datatype; if (sizeof(void*) == sizeof(int)) { mpi_datatype = MPI_INT; } else if (sizeof(void*) == sizeof(long)) { mpi_datatype = MPI_LONG; } else if (sizeof(void*) == sizeof(long long)) { mpi_datatype = MPI_LONG_LONG; } else { assert(0); } MPI_Allgather(MPI_IN_PLACE, 0, MPI_DATATYPE_NULL, ptr_ar, n, mpi_datatype, get_comm(group)); #endif } void parmci_msg_group_barrier(ARMCI_Group *group) { comex_barrier(*group); MPI_Barrier(get_comm(group)); } void armci_msg_group_bcast_scope(int scope, void *buf, int len, int root, ARMCI_Group *group) { if (SCOPE_NODE == scope) { MPI_Bcast(buf, len, MPI_BYTE, root, MPI_COMM_SELF); } else { int root_sub; int err; /* NOTE: this function is passed a root which has been translated back * to the world group while the group passed in is the sub * communicator group... what a mess */ MPI_Group group_world; MPI_Group group_sub; err = MPI_Comm_group(wc(), &group_world); assert(MPI_SUCCESS == err); err = MPI_Comm_group(get_comm(group), &group_sub); assert(MPI_SUCCESS == err); err = MPI_Group_translate_ranks(group_world, 1, &root, group_sub, &root_sub); comex_barrier(*group); err = MPI_Bcast(buf, len, MPI_BYTE, root_sub, get_comm(group)); assert(MPI_SUCCESS == err); } } void armci_grp_clus_brdcst(void *buf, int len, int grp_master, int grp_clus_nproc,ARMCI_Group *mastergroup) { assert(0); } ga-5-3/comex/src-armci/parmci.h0000640005473000001440000001066512247204305015222 0ustar d3n000users#ifndef _PARMCI_H_ #define _PARMCI_H_ #include "armci.h" extern int PARMCI_Acc(int optype, void *scale, void *src, void* dst, int bytes, int proc); extern int PARMCI_AccS(int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc); extern int PARMCI_AccV(int op, void *scale, armci_giov_t * darr, int len, int proc); extern void PARMCI_AllFence(); extern void PARMCI_Barrier(); extern int PARMCI_Create_mutexes(int num); extern int PARMCI_Destroy_mutexes(); extern void PARMCI_Fence(int proc); extern void PARMCI_Finalize(); extern int PARMCI_Free_local(void *ptr); extern int PARMCI_Free(void *ptr); extern int PARMCI_GetS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc); extern double PARMCI_GetValueDouble(void *src, int proc); extern float PARMCI_GetValueFloat(void *src, int proc); extern int PARMCI_GetValueInt(void *src, int proc); extern long PARMCI_GetValueLong(void *src, int proc); extern int PARMCI_GetV(armci_giov_t * darr, int len, int proc); extern int PARMCI_Get(void *src, void *dst, int bytes, int proc); extern int PARMCI_Init(); extern int PARMCI_Init_args(int *argc, char ***argv); extern int PARMCI_Initialized(); extern void PARMCI_Lock(int mutex, int proc); extern void* PARMCI_Malloc_local(armci_size_t bytes); extern int PARMCI_Malloc(void **ptr_arr, armci_size_t bytes); extern void* PARMCI_Memat(armci_meminfo_t * meminfo, long offset); extern void PARMCI_Memget(size_t bytes, armci_meminfo_t * meminfo, int memflg); extern int PARMCI_NbAccS(int optype, void *scale, void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t * nb_handle); extern int PARMCI_NbAccV(int op, void *scale, armci_giov_t * darr, int len, int proc, armci_hdl_t * nb_handle); extern int PARMCI_NbGetS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t * nb_handle); extern int PARMCI_NbGetV(armci_giov_t * darr, int len, int proc, armci_hdl_t * nb_handle); extern int PARMCI_NbGet(void *src, void *dst, int bytes, int proc, armci_hdl_t * nb_handle); extern int PARMCI_NbPutS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc, armci_hdl_t * nb_handle); extern int PARMCI_NbPutValueDouble(double src, void *dst, int proc, armci_hdl_t* nb_handle); extern int PARMCI_NbPutValueFloat(float src, void *dst, int proc, armci_hdl_t* nb_handle); extern int PARMCI_NbPutValueInt(int src, void *dst, int proc, armci_hdl_t* nb_handle); extern int PARMCI_NbPutValueLong(long src, void *dst, int proc, armci_hdl_t* nb_handle); extern int PARMCI_NbPutV(armci_giov_t * darr, int len, int proc, armci_hdl_t * nb_handle); extern int PARMCI_NbPut(void *src, void *dst, int bytes, int proc, armci_hdl_t * nb_handle); extern int PARMCI_Put_flag(void *src, void *dst, int bytes, int *f, int v, int proc); extern int PARMCI_PutS_flag_dir(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc); extern int PARMCI_PutS_flag(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int *flag, int val, int proc); extern int PARMCI_PutS(void *src_ptr, int *src_stride_arr, void *dst_ptr, int *dst_stride_arr, int *count, int stride_levels, int proc); extern int PARMCI_PutValueDouble(double src, void *dst, int proc); extern int PARMCI_PutValueFloat(float src, void *dst, int proc); extern int PARMCI_PutValueInt(int src, void *dst, int proc); extern int PARMCI_PutValueLong(long src, void *dst, int proc); extern int PARMCI_PutV(armci_giov_t * darr, int len, int proc); extern int PARMCI_Put(void *src, void *dst, int bytes, int proc); extern int PARMCI_Rmw(int op, void *ploc, void *prem, int extra, int proc); extern int PARMCI_Test(armci_hdl_t * nb_handle); extern void PARMCI_Unlock(int mutex, int proc); extern int PARMCI_WaitAll(); extern int PARMCI_Wait(armci_hdl_t * nb_handle); extern int PARMCI_WaitProc(int proc); extern void parmci_msg_barrier(); extern void parmci_msg_group_barrier(ARMCI_Group *group); extern int parmci_notify(int proc); extern int parmci_notify_wait(int proc, int *pval); #endif /* _PARMCI_H_ */ ga-5-3/comex/src-dmapp/0000750005473000001440000000000012275260570013602 5ustar d3n000usersga-5-3/comex/src-dmapp/Makefile.inc0000640005473000001440000000061712100346451016005 0ustar d3n000userslibcomex_la_SOURCES += src-dmapp/comex.c libcomex_la_SOURCES += src-dmapp/comex_impl.h #libcomex_la_SOURCES += src-dmapp/clusterinfo.c #libcomex_la_SOURCES += src-dmapp/clusterinfo.h libcomex_la_SOURCES += src-dmapp/groups.c libcomex_la_SOURCES += src-dmapp/groups.h libcomex_la_SOURCES += src-dmapp/reg_cache.c libcomex_la_SOURCES += src-dmapp/reg_cache.h AM_CPPFLAGS += -I$(top_srcdir)/src-dmapp ga-5-3/comex/src-dmapp/reg_cache.h0000640005473000001440000000171611763763301015662 0ustar d3n000users#ifndef _REG_CACHE_H_ #define _REG_CACHE_H_ #include /** * Enumerate the return codes for registration cache functions. */ typedef enum _reg_return_t { RR_SUCCESS=0, /**< success */ RR_FAILURE /**< non-specific failure */ } reg_return_t; /** * A registered contiguous memory region. */ typedef struct _reg_entry_t { void *buf; /**< starting address of region */ size_t len; /**< length of region */ dmapp_seg_desc_t mr; /**< dmapp registered memory region */ struct _reg_entry_t *next; /**< next memory region in list */ } reg_entry_t; /* functions * * documentation is in the *.c file */ reg_return_t reg_cache_init(int nprocs); reg_return_t reg_cache_destroy(); reg_entry_t *reg_cache_find(int rank, void *buf, int len); reg_entry_t *reg_cache_insert(int rank, void *buf, int len, dmapp_seg_desc_t mr); reg_return_t reg_cache_delete(int, void *buf); #endif /* _REG_CACHE_H_ */ ga-5-3/comex/src-dmapp/reg_cache.c0000640005473000001440000004617012100346451015645 0ustar d3n000users/** * Registration cache. * * Defensive programming via copious assert statements is encouraged. */ #if HAVE_CONFIG_H # include "config.h" #endif /* C headers */ #include #include #include #include /* 3rd party headers */ #include #include /* our headers */ #include "comex.h" #include "comex_impl.h" #include "reg_cache.h" /** * A registered dmapp segment. * * dmapp segment registrations *can* return the same segment for instance if * the user is allocating many small buffers which are smaller than the page * size used by dmapp. We only keep track of local dmapp memory registrations. */ typedef struct _dmapp_entry_t { dmapp_seg_desc_t mr; /**< dmapp registered memory region */ int count; /**< ref count */ struct _dmapp_entry_t *next; /**< next memory region in list */ } dmapp_entry_t; /* the static members in this module */ static reg_entry_t **reg_cache = NULL; /**< list of caches (one per process) */ static int reg_nprocs = 0; /**< number of caches (one per process) */ static dmapp_entry_t *dmapp_cache = NULL; /**< list of cached dmapp segments */ /* the static functions in this module */ static dmapp_entry_t *dmapp_cache_find(dmapp_seg_desc_t mr); static dmapp_entry_t *dmapp_cache_find_intersection(dmapp_seg_desc_t mr); static dmapp_entry_t *dmapp_cache_insert(dmapp_seg_desc_t mr); static reg_return_t dmapp_cache_delete(dmapp_seg_desc_t mr); static reg_return_t seg_cmp(void *reg_addr, size_t reg_len, void *oth_addr, size_t oth_len, int op); static reg_return_t seg_intersects(void *reg_addr, size_t reg_len, void *oth_addr, size_t oth_len); static reg_return_t seg_contains(void *reg_addr, size_t reg_len, void *oth_addr, size_t oth_len); static reg_return_t reg_entry_intersects(reg_entry_t *reg_entry, void *buf, int len); static reg_return_t reg_entry_contains(reg_entry_t *reg_entry, void *buf, int len); static reg_return_t dmapp_seg_intersects(dmapp_seg_desc_t first, dmapp_seg_desc_t second); static reg_return_t dmapp_seg_contains(dmapp_seg_desc_t first, dmapp_seg_desc_t second); #define TEST_FOR_INTERSECTION 0 #define TEST_FOR_CONTAINMENT 1 /** * Detects whether two memory segments intersect or one contains the other. * * @param[in] reg_addr starting address of original segment * @param[in] reg_len length of original segment * @param[in] oth_addr starting address of other segment * @param[in] oth_len length of other segment * @param[in] op op to perform, either TEST_FOR_INTERSECTION or * TEST_FOR_CONTAINMENT * * @pre NULL != reg_beg * @pre NULL != oth_beg * * @return RR_SUCCESS on success */ static reg_return_t seg_cmp(void *reg_addr, size_t reg_len, void *oth_addr, size_t oth_len, int op) { ptrdiff_t reg_beg = 0; ptrdiff_t reg_end = 0; ptrdiff_t oth_beg = 0; ptrdiff_t oth_end = 0; int result = 0; /* preconditions */ assert(NULL != reg_addr); assert(NULL != oth_addr); /* casts to ptrdiff_t since arithmetic on void* is undefined */ reg_beg = (ptrdiff_t)(reg_addr); reg_end = reg_beg + (ptrdiff_t)(reg_len) - 1; oth_beg = (ptrdiff_t)(oth_addr); oth_end = oth_beg + (ptrdiff_t)(oth_len) - 1; switch (op) { case TEST_FOR_INTERSECTION: result = reg_end >= oth_beg && oth_end >= reg_beg; break; case TEST_FOR_CONTAINMENT: result = reg_beg <= oth_beg && oth_end <= reg_end; break; default: assert(0); } if (result) { return RR_SUCCESS; } else { return RR_FAILURE; } } /** * Detects whether two memory segments intersect. * * @param[in] reg_addr starting address of original segment * @param[in] reg_len length of original segment * @param[in] oth_addr starting address of other segment * @param[in] oth_len length of other segment * * @pre NULL != reg_beg * @pre NULL != oth_beg * * @return RR_SUCCESS on success */ static reg_return_t seg_intersects(void *reg_addr, size_t reg_len, void *oth_addr, size_t oth_len) { /* preconditions */ assert(NULL != reg_addr); assert(NULL != oth_addr); return seg_cmp( reg_addr, reg_len, oth_addr, oth_len, TEST_FOR_INTERSECTION); } /** * Detects whether the first memory segment contains the other. * * @param[in] reg_addr starting address of original segment * @param[in] reg_len length of original segment * @param[in] oth_addr starting address of other segment * @param[in] oth_len length of other segment * * @pre NULL != reg_beg * @pre NULL != oth_beg * * @return RR_SUCCESS on success */ static reg_return_t seg_contains(void *reg_addr, size_t reg_len, void *oth_addr, size_t oth_len) { /* preconditions */ assert(NULL != reg_addr); assert(NULL != oth_addr); return seg_cmp( reg_addr, reg_len, oth_addr, oth_len, TEST_FOR_CONTAINMENT); } /** * Detects whether two memory segments intersect. * * @param[in] reg_entry the registration entry * @param[in] buf starting address for the contiguous memory region * @param[in] len length of the contiguous memory region * * @pre NULL != reg_entry * @pre NULL != buf * @pre len >= 0 * * @return RR_SUCCESS on success */ static reg_return_t reg_entry_intersects(reg_entry_t *reg_entry, void *buf, int len) { /* preconditions */ assert(NULL != reg_entry); assert(NULL != buf); assert(len >= 0); return seg_intersects( reg_entry->buf, reg_entry->len, buf, len); } /** * Detects whether the first memory segment contains the other. * * @param[in] reg_entry the registration entry * @param[in] buf starting address for the contiguous memory region * @param[in] len length of the contiguous memory region * * @pre NULL != reg_entry * @pre NULL != buf * @pre len >= 0 * * @return RR_SUCCESS on success */ static reg_return_t reg_entry_contains(reg_entry_t *reg_entry, void *buf, int len) { /* preconditions */ assert(NULL != reg_entry); assert(NULL != buf); assert(len >= 0); return seg_contains( reg_entry->buf, reg_entry->len, buf, len); } /** * Detects whether two dmapp segments intersect. * * @param[in] first the original registration entry * @param[in] second segment to test against * * @return RR_SUCCESS on success */ static reg_return_t dmapp_seg_intersects(dmapp_seg_desc_t first, dmapp_seg_desc_t second) { return seg_intersects(first.addr, first.len, second.addr, second.len); } /** * Detects whether the first dmapp segment contains the other. * * @param[in] first the original registration entry * @param[in] second segment to test against * * @return RR_SUCCESS on success */ static reg_return_t dmapp_seg_contains(dmapp_seg_desc_t first, dmapp_seg_desc_t second) { return seg_contains(first.addr, first.len, second.addr, second.len); } /** * Remove registration cache entry without deregistration. * * @param[in] rank the rank where the entry came from * @param[in] reg_entry the entry * * @pre NULL != reg_entry * @pre 0 <= rank && rank < reg_nprocs * * @return RR_SUCCESS on success */ static reg_return_t reg_entry_destroy(int rank, reg_entry_t *reg_entry) { /* preconditions */ assert(NULL != reg_entry); assert(0 <= rank && rank < reg_nprocs); if (l_state.rank == rank) { dmapp_cache_delete(reg_entry->mr); } /* free cache entry */ free(reg_entry); return RR_SUCCESS; } /** * Create internal data structures for the registration cache. * * @param[in] nprocs number of registration caches to create i.e. one per * process * * @pre this function is called once to initialize the internal data * structures and cannot be called again until reg_cache_destroy() has been * called * * @see reg_cache_destroy() * * @return RR_SUCCESS on success */ reg_return_t reg_cache_init(int nprocs) { int i = 0; /* preconditions */ assert(NULL == reg_cache); assert(0 == reg_nprocs); assert(NULL == dmapp_cache); /* keep the number of caches around for later use */ reg_nprocs = nprocs; /* allocate the registration cache list: */ reg_cache = (reg_entry_t **)malloc( sizeof(reg_entry_t *) * reg_nprocs); assert(reg_cache); /* initialize the registration cache list: */ for (i = 0; i < reg_nprocs; ++i) { reg_cache[i] = NULL; } return RR_SUCCESS; } /** * Deregister and destroy all cache entries and associated buffers. * * @pre this function is called once to destroy the internal data structures * and cannot be called again until reg_cache_init() has been called * * @see reg_cache_init() * * @return RR_SUCCESS on success */ reg_return_t reg_cache_destroy() { int i = 0; /* preconditions */ assert(NULL != reg_cache); assert(0 != reg_nprocs); for (i = 0; i < reg_nprocs; ++i) { reg_entry_t *runner = reg_cache[i]; while (runner) { reg_entry_t *previous = runner; /* pointer to previous runner */ /* get next runner */ runner = runner->next; /* destroy the entry */ reg_entry_destroy(i, previous); } } /* free registration cache list */ free(reg_cache); reg_cache = NULL; /* reset the number of caches */ reg_nprocs = 0; /* by the time all entries are destroyed, dmapp cache should be empty */ assert(NULL == dmapp_cache); return RR_SUCCESS; } /** * Locate a registration cache entry which contains the given segment * completely. * * @param[in] rank rank of the process * @param[in] buf starting address of the buffer * @parma[in] len length of the buffer * * @pre 0 <= rank && rank < reg_nprocs * @pre reg_cache_init() was previously called * * @return the reg cache entry, or NULL on failure */ reg_entry_t* reg_cache_find(int rank, void *buf, int len) { reg_entry_t *entry = NULL; reg_entry_t *runner = NULL; /* preconditions */ assert(NULL != reg_cache); assert(0 <= rank && rank < reg_nprocs); runner = reg_cache[rank]; while (runner && NULL == entry) { if (RR_SUCCESS == reg_entry_contains(runner, buf, len)) { entry = runner; } runner = runner->next; } #ifndef NDEBUG /* we assert that the found entry was unique */ while (runner) { if (RR_SUCCESS == reg_entry_contains(runner, buf, len)) { assert(0); } runner = runner->next; } #endif return entry; } /** * Locate a dmapp segment which contains the given segment completely. * * @param[in] mr the dmapp segment * * @return the reg cache entry, or NULL on failure */ static dmapp_entry_t* dmapp_cache_find(dmapp_seg_desc_t mr) { dmapp_entry_t *entry = NULL; dmapp_entry_t *runner = NULL; runner = dmapp_cache; while (runner && NULL == entry) { if (RR_SUCCESS == dmapp_seg_contains(runner->mr, mr)) { entry = runner; } runner = runner->next; } /* we assert that the found entry was unique */ while (runner) { if (RR_SUCCESS == dmapp_seg_contains(runner->mr, mr)) { assert(0); } runner = runner->next; } return entry; } /** * Locate a registration cache entry which intersects the given segment. * * @param[in] rank rank of the process * @param[in] buf starting address of the buffer * @parma[in] len length of the buffer * * @pre 0 <= rank && rank < reg_nprocs * @pre reg_cache_init() was previously called * * @return the reg cache entry, or NULL on failure */ reg_entry_t* reg_cache_find_intersection(int rank, void *buf, int len) { reg_entry_t *entry = NULL; reg_entry_t *runner = NULL; /* preconditions */ assert(NULL != reg_cache); assert(0 <= rank && rank < reg_nprocs); runner = reg_cache[rank]; while (runner && NULL == entry) { if (RR_SUCCESS == reg_entry_intersects(runner, buf, len)) { entry = runner; } runner = runner->next; } /* we assert that the found entry was unique */ while (runner) { if (RR_SUCCESS == reg_entry_contains(runner, buf, len)) { assert(0); } runner = runner->next; } return entry; } /** * Locate a dmapp segment which intersects the given segment. * * @param[in] mr the dmapp segment * * @return the reg cache entry, or NULL on failure */ static dmapp_entry_t* dmapp_cache_find_intersection(dmapp_seg_desc_t mr) { dmapp_entry_t *entry = NULL; dmapp_entry_t *runner = NULL; runner = dmapp_cache; while (runner && NULL == entry) { if (RR_SUCCESS == dmapp_seg_intersects(runner->mr, mr)) { entry = runner; } runner = runner->next; } /* we assert that the found entry was unique */ while (runner) { if (RR_SUCCESS == dmapp_seg_intersects(runner->mr, mr)) { assert(0); } runner = runner->next; } return entry; } /** * Create a new registration entry based on the given members. * * @pre 0 <= rank && rank < reg_nprocs * @pre NULL != buf * @pre 0 <= len * @pre reg_cache_init() was previously called * @pre NULL == reg_cache_find(rank, buf, 0) * @pre NULL == reg_cache_find_intersection(rank, buf, 0) * * @return RR_SUCCESS on success */ reg_entry_t* reg_cache_insert(int rank, void *buf, int len, dmapp_seg_desc_t mr) { reg_entry_t *node = NULL; /* preconditions */ assert(NULL != reg_cache); assert(0 <= rank && rank < reg_nprocs); assert(NULL != buf); assert(len >= 0); assert(NULL == reg_cache_find(rank, buf, len)); assert(NULL == reg_cache_find_intersection(rank, buf, len)); if (rank == l_state.rank) { dmapp_cache_insert(mr); } /* allocate the new entry */ node = (reg_entry_t *)malloc(sizeof(reg_entry_t)); assert(node); /* initialize the new entry */ node->buf = buf; node->len = len; node->mr = mr; node->next = NULL; /* push new entry to tail of linked list */ if (NULL == reg_cache[rank]) { reg_cache[rank] = node; } else { reg_entry_t *runner = reg_cache[rank]; while (runner->next) { runner = runner->next; } runner->next = node; } return RR_SUCCESS; } /** * Removes the reg cache entry associated with the given rank and buffer. * * If this process owns the buffer, it will unregister the buffer, as well. * * @param[in] rank * @param[in] buf * * @pre 0 <= rank && rank < reg_nprocs * @pre NULL != buf * @pre reg_cache_init() was previously called * @pre NULL != reg_cache_find(rank, buf, 0) * * @return RR_SUCCESS on success * RR_FAILURE otherwise */ reg_return_t reg_cache_delete(int rank, void *buf) { reg_return_t status = RR_FAILURE; reg_entry_t *runner = NULL; reg_entry_t *previous_runner = NULL; /* preconditions */ assert(NULL != reg_cache); assert(0 <= rank && rank < reg_nprocs); assert(NULL != buf); assert(NULL != reg_cache_find(rank, buf, 0)); /* this is more restrictive than reg_cache_find() in that we locate * exactlty the same region starting address */ runner = reg_cache[rank]; while (runner) { if (runner->buf == buf) { break; } previous_runner = runner; runner = runner->next; } /* we should have found an entry */ if (NULL == runner) { assert(0); return RR_FAILURE; } /* pop the entry out of the linked list */ if (previous_runner) { previous_runner->next = runner->next; } else { reg_cache[rank] = reg_cache[rank]->next; } status = reg_entry_destroy(rank, runner); return status; } /** * Increments the ref count of an existing dmapp segement or inserts a new * entry into the list. * * @param[in] mr the dmapp segment * * @return */ static dmapp_entry_t *dmapp_cache_insert(dmapp_seg_desc_t mr) { dmapp_entry_t *runner = NULL; dmapp_entry_t *previous_runner = NULL; /* this is more restrictive than dmapp_cache_find() in that we locate * exactlty the same region starting address */ runner = dmapp_cache; while (runner) { if (runner->mr.addr == mr.addr) { break; } previous_runner = runner; runner = runner->next; } if (runner) { /* make sure it's an exact match */ assert(runner->mr.len == mr.len); /* increment ref count */ ++(runner->count); #if DEBUG printf("[%d] incrementing ref count of (%p,%zu) to %d\n", l_state.rank, runner->mr.addr, runner->mr.len, runner->count); #endif } else { runner = malloc(sizeof(dmapp_entry_t)); runner->mr = mr; runner->count = 1; runner->next = NULL; if (previous_runner) { previous_runner->next = runner; } else { dmapp_cache = runner; } #if DEBUG printf("[%d] inserting (%p,%zu)\n", l_state.rank, runner->mr.addr, runner->mr.len); #endif } return runner; } /** * Decrements the ref count and possibly removes the dmapp cache entry * associated with the given dmapp segment. * * @param[in] mr the dmapp segment to possibly remove * * @pre NULL != dmapp_cache_find(mr) * * @return RR_SUCCESS on success * RR_FAILURE otherwise */ reg_return_t dmapp_cache_delete(dmapp_seg_desc_t mr) { reg_return_t status = RR_FAILURE; dmapp_entry_t *runner = NULL; dmapp_entry_t *previous_runner = NULL; /* preconditions */ assert(NULL != dmapp_cache); if (NULL == dmapp_cache_find(mr)) { printf("[%d] dmapp_cache_find(mr) failed, mr=(%p,%zu)\n", l_state.rank, mr.addr, mr.len); assert(0); } /* this is more restrictive than dmapp_cache_find() in that we locate * exactlty the same region starting address */ runner = dmapp_cache; while (runner) { if (runner->mr.addr == mr.addr) { break; } previous_runner = runner; runner = runner->next; } /* we should have found an entry */ if (NULL == runner) { assert(0); return RR_FAILURE; } /* decrement ref count */ --(runner->count); assert(runner->count >= 0); #if DEBUG printf("[%d] decrementing ref count of (%p,%zu) to %d\n", l_state.rank, runner->mr.addr, runner->mr.len, runner->count); #endif if (0 == runner->count) { /* pop the entry out of the linked list */ if (previous_runner) { previous_runner->next = runner->next; } else { dmapp_cache = dmapp_cache->next; } #if DEBUG printf("[%d] removing (%p,%zu)\n", l_state.rank, runner->mr.addr, runner->mr.len); #endif dmapp_mem_unregister(&(runner->mr)); free(runner); } return status; } ga-5-3/comex/src-dmapp/clusterinfo.h0000640005473000001440000000103612035356407016310 0ustar d3n000users#ifndef CLUSTERINFO_H_ #define CLUSTERINFO_H_ /* consider up to HOSTNAME_LEN characters in host name */ #define HOSTNAME_LEN 64 typedef struct { int master; int nslave; char hostname[HOSTNAME_LEN]; } armci_clus_t; extern armci_clus_t *armci_clus_info; extern int armci_me; extern int armci_nproc; extern int armci_nclus; extern int armci_clus_me; extern int armci_master; extern int armci_clus_first; extern int armci_clus_last; extern int armci_clus_id(int p); extern void armci_init_clusinfo(); #endif /* CLUSTERINFO_H_ */ ga-5-3/comex/src-dmapp/comex_impl.h0000640005473000001440000000234212100346451016077 0ustar d3n000users#ifndef COMEX_IMPL_H_ #define COMEX_IMPL_H_ #include #include #define COMEX_DMAPP_OFFLOAD_THRESHOLD 2048 #define DEFAULT_SYM_HEAP_SIZE 32*1048576 #define DMAPP_ROUTING 1 #define MAX_NB_OUTSTANDING 1024 #define FAILURE_BUFSIZE 1048576 #define PIPELINED_ACCUMULATE 0 #define PIPELINED_MAX_BUFFERS 5 #define PIPELINED_BUFSIZE 1048576 typedef struct { MPI_Comm world_comm; int rank; int size; /* DMAPP Specific */ dmapp_jobinfo_t job; /* buffers for locks */ unsigned long **atomic_lock_buf; /**< internal lock, one per process */ unsigned long *local_lock_buf; /**< holds value of remote lock locally */ unsigned long **mutexes; /**< all mutexes */ unsigned long *local_mutex; /**< store the remote mutex value */ unsigned int *num_mutexes; /**< how many mutexes on each process */ /* fallback buffers when errors are detected */ void *acc_buf; int acc_buf_len; void *put_buf; int put_buf_len; void *get_buf; int get_buf_len; #if PIPELINED_ACCUMULATE /* buffers for pipelining */ void **pipe_acc_buf; int pipe_acc_buf_len; #endif /* envs */ int dmapp_routing; } local_state; extern local_state l_state; #endif /* COMEX_IMPL_H_ */ ga-5-3/comex/src-dmapp/groups.c0000640005473000001440000002066712100346451015267 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include "comex.h" #include "comex_impl.h" #include "groups.h" /* the HEAD of the group linked list */ comex_igroup_t *group_list = NULL; /* static functions implemented in this file */ static void comex_create_group_and_igroup( comex_group_t *id, comex_igroup_t **igroup); static void comex_igroup_finalize(comex_igroup_t *igroup); /** * Return the comex igroup instance given the group id. * * The group linked list is searched sequentially until the given group * is found. It is an error if this function is called before * comex_group_init(). An error occurs if the given group is not found. */ comex_igroup_t* comex_get_igroup_from_group(comex_group_t id) { comex_igroup_t *current_group_list_item = group_list; assert(group_list != NULL); while (current_group_list_item != NULL) { if (current_group_list_item->id == id) { return current_group_list_item; } current_group_list_item = current_group_list_item->next; } comex_error("comex group lookup failed", -1); return NULL; } /** * Creates and associates an comex group with an comex igroup. * * This does *not* initialize the members of the comex igroup. */ static void comex_create_group_and_igroup( comex_group_t *id, comex_igroup_t **igroup) { comex_igroup_t *new_group_list_item = NULL; comex_igroup_t *last_group_list_item = NULL; /* find the last group in the group linked list */ last_group_list_item = group_list; while (last_group_list_item->next != NULL) { last_group_list_item = last_group_list_item->next; } /* create, init, and insert the new node for the linked list */ new_group_list_item = malloc(sizeof(comex_igroup_t)); new_group_list_item->id = last_group_list_item->id + 1; new_group_list_item->comm = MPI_COMM_NULL; new_group_list_item->group = MPI_GROUP_NULL; new_group_list_item->next = NULL; last_group_list_item->next = new_group_list_item; /* return the group id and comex igroup */ *igroup = new_group_list_item; *id = new_group_list_item->id; } int comex_group_rank(comex_group_t group, int *rank) { int status; comex_igroup_t *igroup = comex_get_igroup_from_group(group); status = MPI_Group_rank(igroup->group, rank); if (status != MPI_SUCCESS) { comex_error("MPI_Group_rank: Failed ", status); } return COMEX_SUCCESS; } int comex_group_size(comex_group_t group, int *size) { int status; comex_igroup_t *igroup = comex_get_igroup_from_group(group); status = MPI_Group_size(igroup->group, size); if (status != MPI_SUCCESS) { comex_error("MPI_Group_size: Failed ", status); } return COMEX_SUCCESS; } int comex_group_comm(comex_group_t group, MPI_Comm *comm) { int status; comex_igroup_t *igroup = comex_get_igroup_from_group(group); *comm = igroup->comm; return COMEX_SUCCESS; } int comex_group_translate_world(comex_group_t group, int group_rank, int *world_rank) { if (COMEX_GROUP_WORLD == group) { *world_rank = group_rank; } else { comex_igroup_t *igroup = comex_get_igroup_from_group(group); comex_igroup_t *world_igroup = comex_get_igroup_from_group(COMEX_GROUP_WORLD); int status = MPI_Group_translate_ranks( igroup->group, 1, &group_rank, world_igroup->group, world_rank); if (status != MPI_SUCCESS) { comex_error("MPI_Group_translate_ranks: Failed ", status); } } return COMEX_SUCCESS; } /** * Destroys the given comex igroup. */ static void comex_igroup_finalize(comex_igroup_t *igroup) { int status; assert(igroup); if (igroup->group != MPI_GROUP_NULL) { status = MPI_Group_free(&igroup->group); if (status != MPI_SUCCESS) { comex_error("MPI_Group_free: Failed ", status); } } if (igroup->comm != MPI_COMM_NULL) { status = MPI_Comm_free(&igroup->comm); if (status != MPI_SUCCESS) { comex_error("MPI_Comm_free: Failed ", status); } } } int comex_group_free(comex_group_t id) { comex_igroup_t *current_group_list_item = group_list; comex_igroup_t *previous_group_list_item = NULL; /* find the group to free */ while (current_group_list_item != NULL) { if (current_group_list_item->id == id) { break; } previous_group_list_item = current_group_list_item; current_group_list_item = current_group_list_item->next; } /* make sure we found a group */ assert(current_group_list_item != NULL); /* remove the group from the linked list */ if (previous_group_list_item != NULL) { previous_group_list_item->next = current_group_list_item->next; } /* free the group */ comex_igroup_finalize(current_group_list_item); free(current_group_list_item); return COMEX_SUCCESS; } int comex_group_create( int n, int *pid_list, comex_group_t id_parent, comex_group_t *id_child) { int status; int grp_me; comex_igroup_t *igroup_child = NULL; MPI_Group *group_child = NULL; MPI_Comm *comm_child = NULL; comex_igroup_t *igroup_parent = NULL; MPI_Group *group_parent = NULL; MPI_Comm *comm_parent = NULL; /* create the node in the linked list of groups and */ /* get the child's MPI_Group and MPI_Comm, to be populated shortly */ comex_create_group_and_igroup(id_child, &igroup_child); group_child = &(igroup_child->group); comm_child = &(igroup_child->comm); /* get the parent's MPI_Group and MPI_Comm */ igroup_parent = comex_get_igroup_from_group(id_parent); group_parent = &(igroup_parent->group); comm_parent = &(igroup_parent->comm); status = MPI_Group_incl(*group_parent, n, pid_list, group_child); if (status != MPI_SUCCESS) { comex_error("MPI_Group_incl: Failed ", status); } { MPI_Comm comm, comm1, comm2; int lvl=1, local_ldr_pos; MPI_Group_rank(*group_child, &grp_me); if (grp_me == MPI_UNDEFINED) { /* FIXME: keeping the group around for now */ return COMEX_SUCCESS; } /* SK: sanity check for the following bitwise operations */ assert(grp_me>=0); MPI_Comm_dup(MPI_COMM_SELF, &comm); /* FIXME: can be optimized away */ local_ldr_pos = grp_me; while(n>lvl) { int tag=0; int remote_ldr_pos = local_ldr_pos^lvl; if (remote_ldr_pos < n) { int remote_leader = pid_list[remote_ldr_pos]; MPI_Comm peer_comm = *comm_parent; int high = (local_ldr_posid = COMEX_GROUP_WORLD; group_list->next = NULL; /* save MPI world group and communicatior in COMEX_GROUP_WORLD */ group_list->comm = l_state.world_comm; MPI_Comm_group(group_list->comm, &(group_list->group)); } void comex_group_finalize() { comex_igroup_t *current_group_list_item = group_list; comex_igroup_t *previous_group_list_item = NULL; /* don't free the world group (the list head) */ current_group_list_item = current_group_list_item->next; while (current_group_list_item != NULL) { previous_group_list_item = current_group_list_item; current_group_list_item = current_group_list_item->next; comex_igroup_finalize(previous_group_list_item); free(previous_group_list_item); } /* ok, now free the world group, but not the world comm */ MPI_Group_free(&(group_list->group)); free(group_list); group_list = NULL; } ga-5-3/comex/src-dmapp/comex.c0000640005473000001440000014713012274750307015071 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* C and/or system headers */ #include #include #include #include #include #include #include /* 3rd party headers */ #include #include /* our headers */ #include "comex.h" #include "comex_impl.h" /*#include "clusterinfo.h"*/ #include "groups.h" #include "reg_cache.h" #include "acc.h" /* Cray */ #if HAVE_DMAPP_LOCK_DESC_T && HAVE_DMAPP_LOCK_HANDLE_T # define HAVE_DMAPP_LOCK 1 #endif #define DEBUG 0 #if HAVE_DMAPP_LOCK // COMEX_MAX_LOCKS mirrors the default DMAPP_MAX_LOCKS limit // Larger values of COMEX_MAX_LOCKS will require DMAPP_MAX_LOCKS be set at runtime. // DMAPP_MAX_LOCKS has a maxium value of 1023 #define COMEX_MAX_LOCKS 128 static dmapp_lock_desc_t lock_desc[COMEX_MAX_LOCKS]; static dmapp_lock_handle_t lock_handle[COMEX_MAX_LOCKS]; #endif /* exported state */ local_state l_state; int comex_me=-1; int comex_nproc=-1; /* static state */ static int initialized=0; /* for comex_initialized(), 0=false */ static int total_outstanding=0; static int max_outstanding_nb=MAX_NB_OUTSTANDING; static int malloc_is_using_huge_pages=0; /* from env var, 0=false */ static int comex_is_using_huge_pages=0; /* from env var, 0=false */ static long hugetlb_default_page_size=0; /* from env var, in bytes */ static long sc_page_size=0; /* from sysconf, in bytes */ static long hugepagesize=0; /* from libhugetlbfs, in bytes */ static long comex_page_size=0; /* page size consensus, in bytes */ static char skip_lock=0; /* don't acquire or release lock */ static char skip_sync=0; /* don't sync implicit nb requests */ /* static function declarations */ static void check_envs(void); static void create_dmapp_locks(void); static void destroy_dmapp_locks(void); static void dmapp_alloc_buf(void); static void dmapp_free_buf(void); static void dmapp_initialize(void); static void dmapp_network_lock(int proc); static void dmapp_network_unlock(int proc); static void dmapp_terminate(void); static void increment_total_outstanding(void); static void wait_and_clear_total_outstanding(void); static void my_free(void *ptr); static void* my_malloc(size_t size); static int my_memalign(void **memptr, size_t alignment, size_t size); static int comex_get_nbi(void *src, void *dst, int bytes, int proc); static int comex_get_nb(void *src, void *dst, int bytes, int proc, dmapp_syncid_handle_t *handle); static int comex_put_nbi(void *src, void *dst, int bytes, int proc); static int comex_put_nb(void *src, void *dst, int bytes, int proc, dmapp_syncid_handle_t *handle); static void* _comex_malloc_local(size_t size, dmapp_seg_desc_t *seg); static void* my_malloc(size_t size) { void *memptr=NULL; #if DEBUG if (0 == l_state.rank) { printf("my_malloc(%lu)\n", (long unsigned)size); } #endif #if HAVE_LIBHUGETLBFS if (malloc_is_using_huge_pages) { memptr = malloc(size); } else if (comex_is_using_huge_pages) { memptr = get_hugepage_region(size, GHR_DEFAULT); } else { memptr = malloc(size); } #else memptr = malloc(size); #endif /* postconditions */ assert(memptr); return memptr; } static void my_free(void *ptr) { #if DEBUG if (0 == l_state.rank) { printf("my_free(%p)\n", ptr); } #endif #if HAVE_LIBHUGETLBFS if (malloc_is_using_huge_pages) { free(ptr); } else if (comex_is_using_huge_pages) { free_hugepage_region(ptr); } else { free(ptr); } #else free(ptr); #endif } static int my_memalign(void **memptr, size_t alignment, size_t size) { int status = 0; #if DEBUG if (0 == l_state.rank) { printf("my_memalign(%lu)\n", (long unsigned)size); } #endif /* preconditions */ assert(memptr); #if HAVE_LIBHUGETLBFS if (malloc_is_using_huge_pages) { status = posix_memalign(memptr, alignment, size); } else if (comex_is_using_huge_pages) { *memptr = get_hugepage_region(size, GHR_DEFAULT); } else { status = posix_memalign(memptr, alignment, size); } #else status = posix_memalign(memptr, alignment, size); #endif /* postconditions */ assert(*memptr); return status; } static void increment_total_outstanding(void) { ++total_outstanding; if (total_outstanding == max_outstanding_nb) { wait_and_clear_total_outstanding(); } } static void wait_and_clear_total_outstanding(void) { int status; status = dmapp_gsync_wait(); assert(status == DMAPP_RC_SUCCESS); total_outstanding = 0; } /* The blocking implementations should use blocking DMAPP calls */ int comex_put(void *src, void *dst, int bytes, int proc, comex_group_t group) { int status; status = comex_put_nbi(src, dst, bytes, proc); assert(status == DMAPP_RC_SUCCESS); comex_wait_proc(proc, group); return COMEX_SUCCESS; } int comex_get(void *src, void *dst, int bytes, int proc, comex_group_t group) { int status; status = comex_get_nbi(src, dst, bytes, proc); assert(status == DMAPP_RC_SUCCESS); comex_wait_proc(proc, group); return COMEX_SUCCESS; } /* The blocking implementations should use blocking DMAPP calls */ static int comex_put_nbi(void *src, void *dst, int bytes, int proc) { int status = DMAPP_RC_SUCCESS; int nelems = bytes; int type = DMAPP_BYTE; int failure_observed = 0; reg_entry_t *dst_reg = NULL; reg_entry_t *src_reg = NULL; /* Corner case */ if (proc == l_state.rank) { memcpy(dst, src, bytes); return status; } /* If the number of bytes is even, use Double word datatype, * DMAPP_BYTE performance is much worse */ if (0 == bytes%16) { nelems = bytes/16; type = DMAPP_DQW; } else if (0 == bytes%8) { nelems = bytes/8; type = DMAPP_QW; } else if (0 == bytes%4) { nelems = bytes/4; type = DMAPP_DW; } /* Find the dmapp seg desc */ dst_reg = reg_cache_find(proc, dst, bytes); assert(dst_reg); src_reg = reg_cache_find(l_state.rank, src, bytes); status = dmapp_put_nbi(dst, &(dst_reg->mr), proc, src, nelems, type); increment_total_outstanding(); if (status != DMAPP_RC_SUCCESS) { failure_observed = 1; } /* Fallback */ if (failure_observed) { comex_wait_all(COMEX_GROUP_WORLD); assert(bytes <= l_state.put_buf_len); memcpy(l_state.put_buf, src, bytes); status = dmapp_put_nbi(dst, &(dst_reg->mr), proc, l_state.put_buf, nelems, type); increment_total_outstanding(); comex_wait_all(COMEX_GROUP_WORLD); /* Fallback must work correctly */ assert(status == DMAPP_RC_SUCCESS); } return status; } /* The blocking implementations should use blocking DMAPP calls */ static int comex_put_nb(void *src, void *dst, int bytes, int proc, dmapp_syncid_handle_t *handle) { int status = DMAPP_RC_SUCCESS; int nelems = bytes; int type = DMAPP_BYTE; int failure_observed = 0; reg_entry_t *dst_reg = NULL; reg_entry_t *src_reg = NULL; /* If the number of bytes is even, use Double word datatype, * DMAPP_BYTE performance is much worse */ if (0 == bytes%16) { nelems = bytes/16; type = DMAPP_DQW; } else if (0 == bytes%8) { nelems = bytes/8; type = DMAPP_QW; } else if (0 == bytes%4) { nelems = bytes/4; type = DMAPP_DW; } /* Find the dmapp seg desc */ dst_reg = reg_cache_find(proc, dst, bytes); assert(dst_reg); src_reg = reg_cache_find(l_state.rank, src, bytes); status = dmapp_put_nb(dst, &(dst_reg->mr), proc, src, nelems, type, handle); assert(status == DMAPP_RC_SUCCESS); return status; } static int comex_get_nb(void *src, void *dst, int bytes, int proc, dmapp_syncid_handle_t *handle) { int status = DMAPP_RC_SUCCESS; int nelems = bytes; int type = DMAPP_BYTE; int failure_observed = 0; reg_entry_t *dst_reg = NULL; reg_entry_t *src_reg = NULL; /* If the number of bytes is even, use Double word datatype, * DMAPP_BYTE performance is much worse */ if (0 == bytes%16) { nelems = bytes/16; type = DMAPP_DQW; } else if (0 == bytes%8) { nelems = bytes/8; type = DMAPP_QW; } else if (0 == bytes%4) { nelems = bytes/4; type = DMAPP_DW; } /* Find the dmapp seg desc */ dst_reg = reg_cache_find(proc, src, bytes); assert(dst_reg); src_reg = reg_cache_find(l_state.rank, dst, bytes); status = dmapp_get_nb(dst, src, &(dst_reg->mr), proc, nelems, type, handle); assert(status == DMAPP_RC_SUCCESS); return COMEX_SUCCESS; } static int comex_get_nbi(void *src, void *dst, int bytes, int proc) { int status = DMAPP_RC_SUCCESS; int nelems = bytes; int type = DMAPP_BYTE; int failure_observed = 0; reg_entry_t *dst_reg = NULL; reg_entry_t *src_reg = NULL; /* Corner case */ if (proc == l_state.rank) { memcpy(dst, src, bytes); return status; } /* If the number of bytes is even, use Double word datatype, * DMAPP_BYTE performance is much worse */ if (0 == bytes%16) { nelems = bytes/16; type = DMAPP_DQW; } else if (0 == bytes%8) { nelems = bytes/8; type = DMAPP_QW; } else if (0 == bytes%4) { nelems = bytes/4; type = DMAPP_DW; } /* Find the dmapp seg desc */ dst_reg = reg_cache_find(proc, src, bytes); assert(dst_reg); src_reg = reg_cache_find(l_state.rank, dst, bytes); status = dmapp_get_nbi(dst, src, &(dst_reg->mr), proc, nelems, type); increment_total_outstanding(); if (status != DMAPP_RC_SUCCESS) { failure_observed = 1; } /* Fallback */ if (failure_observed) { comex_wait_all(COMEX_GROUP_WORLD); assert(bytes <= l_state.get_buf_len); status = dmapp_get(l_state.get_buf, src, &(dst_reg->mr), proc, nelems, type); memcpy(dst, l_state.get_buf, bytes); } /* Original or fallback must work correctly */ assert(status == DMAPP_RC_SUCCESS); return status; } static void dmapp_network_lock(int proc) { int dmapp_status; #if HAVE_DMAPP_LOCK dmapp_lock_acquire( &lock_desc[0], &(l_state.job.data_seg), proc, 0, &lock_handle[0]); #else reg_entry_t *dst_reg= reg_cache_find(proc, l_state.atomic_lock_buf[proc], sizeof(long)); assert(dst_reg); do { dmapp_status = dmapp_acswap_qw(l_state.local_lock_buf, l_state.atomic_lock_buf[proc], &(dst_reg->mr), proc, 0, l_state.rank + 1); assert(dmapp_status == DMAPP_RC_SUCCESS); } while(*(l_state.local_lock_buf) != 0); #endif } static void dmapp_network_unlock(int proc) { int dmapp_status; # if HAVE_DMAPP_LOCK dmapp_lock_release( lock_handle[0], 0 ); #else reg_entry_t *dst_reg= reg_cache_find(proc, l_state.atomic_lock_buf[proc], sizeof(long)); assert(dst_reg); do { dmapp_status = dmapp_acswap_qw(l_state.local_lock_buf, l_state.atomic_lock_buf[proc], &(dst_reg->mr), proc, l_state.rank + 1, 0); assert(dmapp_status == DMAPP_RC_SUCCESS); } while (*(l_state.local_lock_buf) != (unsigned long)(l_state.rank + 1)); #endif } int comex_puts(void *src_ptr, int src_stride_ar[/*stride_levels*/], void *dst_ptr, int dst_stride_ar[/*stride_levels*/], int count[/*stride_levels+1*/], int stride_levels, int proc, comex_group_t group) { int i, j; long src_idx, dst_idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int src_bvalue[7], src_bunit[7]; int dst_bvalue[7], dst_bunit[7]; int dmapp_status; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) { n1dim *= count[i]; } /* calculate the destination indices */ src_bvalue[0] = 0; src_bvalue[1] = 0; src_bunit[0] = 1; src_bunit[1] = 1; dst_bvalue[0] = 0; dst_bvalue[1] = 0; dst_bunit[0] = 1; dst_bunit[1] = 1; for(i=2; i<=stride_levels; i++) { src_bvalue[i] = 0; dst_bvalue[i] = 0; src_bunit[i] = src_bunit[i-1] * count[i-1]; dst_bunit[i] = dst_bunit[i-1] * count[i-1]; } /* index mangling */ for(i=0; i (count[j]-1)) { src_bvalue[j] = 0; } } for(j=1; j<=stride_levels; j++) { dst_idx += dst_bvalue[j] * dst_stride_ar[j-1]; if((i+1) % dst_bunit[j] == 0) { dst_bvalue[j]++; } if(dst_bvalue[j] > (count[j]-1)) { dst_bvalue[j] = 0; } } dmapp_status = comex_put_nbi((char *)src_ptr + src_idx, (char *)dst_ptr + dst_idx, count[0], proc); assert(dmapp_status == DMAPP_RC_SUCCESS); } if (0 == skip_sync) { comex_wait_proc(proc, group); } return COMEX_SUCCESS; } int comex_gets(void *src_ptr, int src_stride_ar[/*stride_levels*/], void *dst_ptr, int dst_stride_ar[/*stride_levels*/], int count[/*stride_levels+1*/], int stride_levels, int proc, comex_group_t group) { int i, j; long src_idx, dst_idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int src_bvalue[7], src_bunit[7]; int dst_bvalue[7], dst_bunit[7]; int dmapp_status; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) { n1dim *= count[i]; } /* calculate the destination indices */ src_bvalue[0] = 0; src_bvalue[1] = 0; src_bunit[0] = 1; src_bunit[1] = 1; dst_bvalue[0] = 0; dst_bvalue[1] = 0; dst_bunit[0] = 1; dst_bunit[1] = 1; for(i=2; i<=stride_levels; i++) { src_bvalue[i] = 0; dst_bvalue[i] = 0; src_bunit[i] = src_bunit[i-1] * count[i-1]; dst_bunit[i] = dst_bunit[i-1] * count[i-1]; } for(i=0; i (count[j]-1)) { src_bvalue[j] = 0; } } dst_idx = 0; for(j=1; j<=stride_levels; j++) { dst_idx += dst_bvalue[j] * dst_stride_ar[j-1]; if((i+1) % dst_bunit[j] == 0) { dst_bvalue[j]++; } if(dst_bvalue[j] > (count[j]-1)) { dst_bvalue[j] = 0; } } dmapp_status = comex_get_nbi((char *)src_ptr + src_idx, (char *)dst_ptr + dst_idx, count[0], proc); assert(dmapp_status == DMAPP_RC_SUCCESS); } if (0 == skip_sync) { comex_wait_proc(proc, group); } return COMEX_SUCCESS; } int comex_acc(int datatype, void *scale, void *src_ptr, void *dst_ptr, int bytes, int proc, comex_group_t group) { comex_accs(datatype, scale, src_ptr, NULL, dst_ptr, NULL, &bytes, 0, proc, group); return COMEX_SUCCESS; } int comex_accs(int datatype, void *scale, void *src_ptr, int src_stride_ar[/*stride_levels*/], void *dst_ptr, int dst_stride_ar[/*stride_levels*/], int count[/*stride_levels+1*/], int stride_levels, int proc, comex_group_t group) { int i, j; long src_idx, dst_idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int src_bvalue[7], src_bunit[7]; int dst_bvalue[7], dst_bunit[7]; int sizetogetput; void *get_buf; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ src_bvalue[0] = 0; src_bvalue[1] = 0; src_bunit[0] = 1; src_bunit[1] = 1; dst_bvalue[0] = 0; dst_bvalue[1] = 0; dst_bunit[0] = 1; dst_bunit[1] = 1; for(i=2; i<=stride_levels; i++) { src_bvalue[i] = 0; dst_bvalue[i] = 0; src_bunit[i] = src_bunit[i-1] * count[i-1]; dst_bunit[i] = dst_bunit[i-1] * count[i-1]; } sizetogetput = count[0]; if (0 == skip_lock) { // grab the atomics lock dmapp_network_lock(proc); } #if PIPELINED_ACCUMULATE if (sizetogetput > l_state.pipe_acc_buf_len) #endif { /* fall back to sequential with newly allocated buffer */ if (sizetogetput <= l_state.acc_buf_len) { get_buf = l_state.acc_buf; } else { get_buf = (char *)my_malloc(sizeof(char) * sizetogetput); } assert(get_buf); for(i=0; i (count[j]-1)) { src_bvalue[j] = 0; } } dst_idx = 0; for(j=1; j<=stride_levels; j++) { dst_idx += dst_bvalue[j] * dst_stride_ar[j-1]; if((i+1) % dst_bunit[j] == 0) { dst_bvalue[j]++; } if(dst_bvalue[j] > (count[j]-1)) { dst_bvalue[j] = 0; } } // Get the remote data in a temp buffer comex_get((char *)dst_ptr + dst_idx, get_buf, sizetogetput, proc, group); _acc(datatype, count[0], get_buf, ((char*)src_ptr)+src_idx, scale); // Write back comex_put(get_buf, (char *)dst_ptr + dst_idx, sizetogetput, proc, group); } if (sizetogetput > l_state.acc_buf_len) { // unregister temp buffer ? TODO consider keeping temp buf around // in case another large request comes along? free(get_buf); } } #if PIPELINED_ACCUMULATE else { printf("pipelined acc\n"); /* pipelined protocol, sort of */ long pipe_src_idx[PIPELINED_MAX_BUFFERS]; long pipe_dst_idx[PIPELINED_MAX_BUFFERS]; dmapp_syncid_handle_t pipe_handle[PIPELINED_MAX_BUFFERS]; char pipe_state[PIPELINED_MAX_BUFFERS]; long pipe_index = 0; char done = 0; for (i=0; i (count[j]-1)) { src_bvalue[j] = 0; } } /* calculate the dst_idx */ dst_idx = 0; for(j=1; j<=stride_levels; j++) { dst_idx += dst_bvalue[j] * dst_stride_ar[j-1]; if((i+1) % dst_bunit[j] == 0) { dst_bvalue[j]++; } if(dst_bvalue[j] > (count[j]-1)) { dst_bvalue[j] = 0; } } // Get the remote data in a temp buffer comex_get_nb((char *)dst_ptr + dst_idx, l_state.pipe_acc_buf[pipe_index], sizetogetput, proc, &pipe_handle[pipe_index]); pipe_dst_idx[pipe_index] = dst_idx; pipe_src_idx[pipe_index] = src_idx; pipe_state[pipe_index] = 1; pipe_index = (pipe_index+1) % PIPELINED_MAX_BUFFERS; } /* no more gets to issue, but we may have outstanding gets/puts */ do { done = 1; for (pipe_index=0; pipe_index l_state.acc_buf_len) my_free(get_buf); return COMEX_SUCCESS; } int comex_fence_all(comex_group_t group) { comex_wait_all(group); /* noop for DMAPP */ return COMEX_SUCCESS; } int comex_fence_proc(int proc, comex_group_t group) { comex_wait_all(group); /* noop for DMAPP */ return COMEX_SUCCESS; } /* comex_barrier is comex_fence_all + MPI_Barrier */ int comex_barrier(comex_group_t group) { MPI_Comm comm; comex_fence_all(group); assert(COMEX_SUCCESS == comex_group_comm(group, &comm)); MPI_Barrier(comm); return COMEX_SUCCESS; } void comex_error(char *msg, int code) { if (0 == l_state.rank) fprintf(stderr,"Received an Error in Communication\n"); MPI_Abort(l_state.world_comm, code); } static void* _comex_malloc_local(size_t size, dmapp_seg_desc_t *seg) { void *ptr; int rc; int status; rc = my_memalign(&ptr, comex_page_size, sizeof(char)*size); assert(0 == rc); assert(ptr); status = dmapp_mem_register(ptr, size, seg); assert(status == DMAPP_RC_SUCCESS); #if DEBUG printf("[%d] _comex_malloc_local ptr=%p size=%zu\n", l_state.rank, ptr, size); printf("[%d] _comex_malloc_local seg=%p size=%zu\n", l_state.rank, seg->addr, seg->len); #endif #if 0 assert(seg->addr == ptr); assert(seg->len == size); /* @TODO this failed! */ #endif reg_cache_insert(l_state.rank, ptr, size, *seg); return ptr; } void *comex_malloc_local(size_t size) { void *ptr = NULL; dmapp_seg_desc_t seg; ptr = _comex_malloc_local(size, &seg); return ptr; } int comex_free_local(void *ptr) { reg_return_t status = RR_FAILURE; /* preconditions */ assert(NULL != ptr); /* remove from reg cache */ status = reg_cache_delete(l_state.rank, ptr); assert(RR_SUCCESS == status); /* free the memory */ my_free(ptr); return COMEX_SUCCESS; } static void destroy_dmapp_locks(void) { #if DMAPP_LOCK #else if (l_state.local_lock_buf) comex_free_local(l_state.local_lock_buf); if (l_state.atomic_lock_buf) comex_free(l_state.atomic_lock_buf[l_state.rank], COMEX_GROUP_WORLD); #endif } static void create_dmapp_locks(void) { #if DMAPP_LOCK bzero(lock_desc, sizeof(lock_desc)); #else l_state.local_lock_buf = comex_malloc_local(sizeof(long)); assert(l_state.local_lock_buf); l_state.atomic_lock_buf = (unsigned long**)my_malloc(l_state.size * sizeof(unsigned long*)); assert(l_state.atomic_lock_buf); comex_malloc((void**)l_state.atomic_lock_buf, sizeof(long), COMEX_GROUP_WORLD); *(long *)(l_state.atomic_lock_buf[l_state.rank]) = 0; *(long *)(l_state.local_lock_buf) = 0; #endif MPI_Barrier(l_state.world_comm); } static void dmapp_alloc_buf(void) { int i; // FAILURE_BUFSIZE should be some multiple of our page size? #if PIPELINED_ACCUMULATE l_state.pipe_acc_buf = malloc(PIPELINED_MAX_BUFFERS * sizeof(void*)); l_state.pipe_acc_buf_len = comex_page_size; for (i=0; i= 200112L || _XOPEN_SOURCE >= 600) # error posix_memalign *NOT* available #endif /* groups */ comex_group_init(); /* Initialize */ dmapp_initialize(); /* mutexes */ l_state.mutexes = NULL; l_state.local_mutex = NULL; l_state.num_mutexes = NULL; /* cluster info */ /*comex_init_clusinfo();*/ /* Synch - Sanity Check */ MPI_Barrier(l_state.world_comm); return COMEX_SUCCESS; } int comex_init_args(int *argc, char ***argv) { int rc; int init_flag; MPI_Initialized(&init_flag); if(!init_flag) MPI_Init(argc, argv); rc = comex_init(); return rc; } int comex_finalize() { /* it's okay to call multiple times -- extra calls are no-ops */ if (!initialized) { return COMEX_SUCCESS; } initialized = 0; /* Make sure that all outstanding operations are done */ comex_wait_all(COMEX_GROUP_WORLD); dmapp_terminate(); /* groups */ comex_group_finalize(); MPI_Barrier(l_state.world_comm); // destroy the communicators MPI_Comm_free(&l_state.world_comm); return COMEX_SUCCESS; } int comex_nbput(void *src, void *dst, int bytes, int proc, comex_group_t group, comex_request_t *hdl) { int rc; rc = comex_put_nbi(src, dst, bytes, proc); return (rc == DMAPP_RC_SUCCESS) ? COMEX_SUCCESS : COMEX_FAILURE; } int comex_nbget(void *src, void *dst, int bytes, int proc, comex_group_t group, comex_request_t *hdl) { int rc; rc = comex_get_nbi(src, dst, bytes, proc); return (rc == DMAPP_RC_SUCCESS) ? COMEX_SUCCESS : COMEX_FAILURE; } int comex_wait_proc(int proc, comex_group_t group) { wait_and_clear_total_outstanding(); return COMEX_SUCCESS; } int comex_wait(comex_request_t* hdl) { wait_and_clear_total_outstanding(); return COMEX_SUCCESS; } int comex_test(comex_request_t* hdl, int *status) { wait_and_clear_total_outstanding(); *status = 0; return COMEX_SUCCESS; } int comex_wait_all(comex_group_t group) { wait_and_clear_total_outstanding(); return COMEX_SUCCESS; } int comex_nbputs( void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, comex_group_t group, comex_request_t *hdl) { int rc; assert(0 == skip_sync); skip_sync = 1; rc = comex_puts(src, src_stride, dst, dst_stride, count, stride_levels, proc, group); skip_sync = 0; return rc; } int comex_nbgets( void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, comex_group_t group, comex_request_t *hdl) { int rc; assert(0 == skip_sync); skip_sync = 1; rc = comex_gets(src, src_stride, dst, dst_stride, count, stride_levels, proc, group); skip_sync = 0; return rc; } int comex_nbaccs( int datatype, void *scale, void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, comex_group_t group, comex_request_t *hdl) { int rc; rc = comex_accs(datatype, scale, src, src_stride, dst, dst_stride, count, stride_levels, proc, group); return rc; } /* Vector Calls */ int comex_putv(comex_giov_t *iov, int iov_len, int proc, comex_group_t group) { int status; int i; for (i=0; imr), proc, extra); assert(status == DMAPP_RC_SUCCESS); #else long tmp; dmapp_network_lock(proc); comex_get(prem, ploc, sizeof(long), proc, group); tmp = *(long*)ploc + extra; comex_put(&tmp, prem, sizeof(long), proc, group); dmapp_network_unlock(proc); #endif } else if (op == COMEX_SWAP) { /* dmapp doesn't have atomic swap for int */ int tmp; dmapp_network_lock(proc); comex_get(prem, &tmp, sizeof(int), proc, group); comex_put(ploc, prem, sizeof(int), proc, group); dmapp_network_unlock(proc); *(int*)ploc = tmp; } else if (op == COMEX_SWAP_LONG) { /* dmapp has atomic cswap for long, but it's non-blocking */ long tmp; dmapp_network_lock(proc); comex_get(prem, &tmp, sizeof(long), proc, group); comex_put(ploc, prem, sizeof(long), proc, group); dmapp_network_unlock(proc); *(long*)ploc = tmp; } else { assert(0); } return COMEX_SUCCESS; } /* Mutex Operations */ int comex_create_mutexes(int num) { int i=0; assert(NULL == l_state.mutexes); assert(NULL == l_state.local_mutex); assert(NULL == l_state.num_mutexes); /* every process knows how many mutexes created on every process */ l_state.num_mutexes = (unsigned int*)my_malloc(l_state.size * sizeof(unsigned int)); assert(l_state.num_mutexes); /* gather the counts */ MPI_Allgather(&num, 1, MPI_INT, l_state.num_mutexes, 1, MPI_UNSIGNED, l_state.world_comm); /* create the 1 element buffer to hold a remote mutex */ l_state.local_mutex = comex_malloc_local(sizeof(unsigned long)); assert(l_state.local_mutex); /* init the local mutex holder to rank+1, indicating no mutex is held */ *(unsigned long *)(l_state.local_mutex) = l_state.rank+1; MPI_Barrier(l_state.world_comm); /* create all of the mutexes */ l_state.mutexes = (unsigned long**)my_malloc(l_state.size * sizeof(unsigned long*)); assert(l_state.mutexes); comex_malloc((void**)l_state.mutexes, num*sizeof(unsigned long), COMEX_GROUP_WORLD); /* init all of my mutexes to 0 */ for (i=0; imr), proc, 0, l_state.rank + 1); assert(dmapp_status == DMAPP_RC_SUCCESS); } while(*(l_state.local_mutex) != 0); return COMEX_SUCCESS; } int comex_unlock(int mutex, int proc) { int dmapp_status; reg_entry_t *dst_reg = NULL; /* preconditions */ assert(0 <= proc && proc < l_state.size); assert(0 <= mutex && (unsigned int)(mutex) < l_state.num_mutexes[proc]); dst_reg = reg_cache_find(proc, &(l_state.mutexes[proc][mutex]), sizeof(unsigned long)); assert(dst_reg); do { dmapp_status = dmapp_acswap_qw(l_state.local_mutex, &(l_state.mutexes[proc][mutex]), &(dst_reg->mr), proc, l_state.rank + 1, 0); assert(dmapp_status == DMAPP_RC_SUCCESS); } while (*(l_state.local_mutex) != (unsigned long)(l_state.rank + 1)); return COMEX_SUCCESS; } int comex_malloc(void *ptrs[], size_t size, comex_group_t group) { comex_igroup_t *igroup = NULL; MPI_Comm comm = MPI_COMM_NULL; int comm_rank = -1; int comm_size = -1; int rc = MPI_SUCCESS; void *src_buf = NULL; size_t max_size = size; dmapp_seg_desc_t heap_seg; dmapp_seg_desc_t *allgather_heap_seg = NULL; int i = 0; /* preconditions */ assert(ptrs); igroup = comex_get_igroup_from_group(group); comm = igroup->comm; assert(comm != MPI_COMM_NULL); MPI_Comm_rank(comm, &comm_rank); MPI_Comm_size(comm, &comm_size); /* achieve consensus on the allocation size */ rc = MPI_Allreduce(&size, &max_size, 1, MPI_LONG, MPI_MAX, comm); assert(rc == MPI_SUCCESS); size = max_size; assert(size > 0); /* allocate and register segment */ ptrs[comm_rank] = _comex_malloc_local(sizeof(char)*max_size, &heap_seg); /* exchange buffer address */ /* @TODO: Consider using MPI_IN_PLACE? */ memcpy(&src_buf, &ptrs[comm_rank], sizeof(void *)); MPI_Allgather(&src_buf, sizeof(void *), MPI_BYTE, ptrs, sizeof(void *), MPI_BYTE, comm); /* allocate receive buffer for exchange of registration info */ allgather_heap_seg = (dmapp_seg_desc_t *)my_malloc( sizeof(dmapp_seg_desc_t) * comm_size); assert(allgather_heap_seg); /* exchange registration info */ MPI_Allgather(&heap_seg, sizeof(dmapp_seg_desc_t), MPI_BYTE, allgather_heap_seg, sizeof(dmapp_seg_desc_t), MPI_BYTE, comm); /* insert this info into registration cache */ for (i = 0; i < comm_size; ++i) { int world_rank; assert(COMEX_SUCCESS == comex_group_translate_world(group, i, &world_rank)); if (i == comm_rank) continue; reg_cache_insert(world_rank, ptrs[i], size, allgather_heap_seg[i]); } // Free the temporary buffer my_free(allgather_heap_seg); MPI_Barrier(comm); return COMEX_SUCCESS; } int comex_free(void *ptr, comex_group_t group) { comex_igroup_t *igroup = NULL; MPI_Comm comm = MPI_COMM_NULL; int comm_rank; int comm_size; int i; long **allgather_ptrs = NULL; /* preconditions */ assert(NULL != ptr); igroup = comex_get_igroup_from_group(group); comm = igroup->comm; assert(comm != MPI_COMM_NULL); MPI_Comm_rank(comm, &comm_rank); MPI_Comm_size(comm, &comm_size); /* allocate receive buffer for exchange of pointers */ allgather_ptrs = (long **)my_malloc(sizeof(void *) * comm_size); assert(allgather_ptrs); /* exchange of pointers */ MPI_Allgather(&ptr, sizeof(void *), MPI_BYTE, allgather_ptrs, sizeof(void *), MPI_BYTE, comm); /* remove all ptrs from registration cache */ for (i = 0; i < comm_size; i++) { int world_rank; assert(COMEX_SUCCESS == comex_group_translate_world(group, i, &world_rank)); if (i == comm_rank) continue; reg_cache_delete(world_rank, allgather_ptrs[i]); } /* remove my ptr from reg cache and free ptr */ comex_free_local(ptr); my_free(allgather_ptrs); /* Is this needed? */ MPI_Barrier(comm); return COMEX_SUCCESS; } /* DMAPP Functions */ static void check_envs(void) { char *value; /* COMEX_DMAPP_ROUTING * * TODO description */ if ((value = getenv("COMEX_DMAPP_ROUTING")) != NULL){ l_state.dmapp_routing = (atoi(value)); } else { l_state.dmapp_routing = DMAPP_ROUTING_ADAPTIVE; } #if HAVE_LIBHUGETLBFS /* hugepagesize * * set the static variable hugepagesize */ hugepagesize = gethugepagesize(); /* HUGETLB_MORECORE * * this variable controls whether malloc() will use hugepage memory which * means when we use malloc() and when the user application calls malloc * we will be competing for hugepage memory! */ if ((value = getenv("HUGETLB_MORECORE")) != NULL) { if (0 == strncasecmp(value, "y", 1)) { malloc_is_using_huge_pages = 1; } else if (0 == strncasecmp(value, "n", 1)) { malloc_is_using_huge_pages = 0; } } /* COMEX_USE_HUGEPAGES * * COMEX can be built with hugepages and still allow the user to disable * their use. We assume that if libhugetlbfs is linked in, the user wants * to use it. This env var is then for the user to disable it, for some * reason. */ comex_is_using_huge_pages = 1; /* the default if libhugetlbfs is linked */ if ((value = getenv("COMEX_USE_HUGEPAGES")) != NULL) { if (0 == strncasecmp(value, "y", 1)) { comex_is_using_huge_pages = 1; } else if (0 == strncasecmp(value, "n", 1)) { comex_is_using_huge_pages = 0; } } /* HUGETLB_DEFAULT_PAGE_SIZE * * controls the page size that will be used for hugepages * we look for this value in case it is specified and we want to allocate * memory aligned to the same page size */ if ((value = getenv("HUGETLB_DEFAULT_PAGE_SIZE")) != NULL){ /* must be one of [128K|512K|2M|8M|16M|64M] */ if (0 == strncasecmp(value, "128K", 4)) { hugetlb_default_page_size = 131072; } else if (0 == strncasecmp(value, "512K", 4)) { hugetlb_default_page_size = 524288; } else if (0 == strncasecmp(value, "2M", 2)) { hugetlb_default_page_size = 2097152; } else if (0 == strncasecmp(value, "8M", 2)) { hugetlb_default_page_size = 8388608; } else if (0 == strncasecmp(value, "16M", 3)) { hugetlb_default_page_size = 16777216; } else if (0 == strncasecmp(value, "64M", 3)) { hugetlb_default_page_size = 67108864; } else { assert(0); } } if (malloc_is_using_huge_pages || comex_is_using_huge_pages) { comex_page_size = hugepagesize; } #endif /* HAVE_LIBHUGETLBFS */ /* get page size for memory allocation */ sc_page_size = sysconf(_SC_PAGESIZE); assert(sc_page_size >= 1); if (0 == comex_page_size) { comex_page_size = sc_page_size; } //#if DEBUG #if 1 if (0 == l_state.rank) { printf("gethugepagesize()=%ld\n", hugepagesize); printf("hugetlb_default_page_size=%ld\n", hugetlb_default_page_size); printf("_SC_PAGESIZE=%ld\n", sc_page_size); printf("comex_page_size=%ld\n", comex_page_size); printf("comex_is_using_huge_pages=%d\n", comex_is_using_huge_pages); printf("malloc_is_using_huge_pages=%d\n", malloc_is_using_huge_pages); } #endif } static void dmapp_initialize(void) { dmapp_return_t status; dmapp_rma_attrs_ext_t requested_attrs; dmapp_rma_attrs_ext_t actual_attrs; memset(&requested_attrs, 0, sizeof(requested_attrs)); memset(&actual_attrs, 0, sizeof(actual_attrs)); status = dmapp_get_rma_attrs_ext(&requested_attrs); assert(status == DMAPP_RC_SUCCESS); // Check envs check_envs(); /* The maximum number of outstanding non-blocking requests supported. You * can only specify this flag during initialization. The following is the * range of valid values to be supplied: [DMAPP_MIN_OUTSTANDING_NB, .., * DMAPP_MAX_OUTSTANDING_NB] Setting the value to one of the extremes may * lead to a slowdown. The recommended value is DMAPP_DEF_OUTSTANDING_NB. * Users can experiment with the value to find the optimal setting for * their application. */ requested_attrs.max_outstanding_nb = MAX_NB_OUTSTANDING; assert(MAX_NB_OUTSTANDING > DMAPP_MIN_OUTSTANDING_NB); assert(MAX_NB_OUTSTANDING < DMAPP_MAX_OUTSTANDING_NB); if (0 == l_state.rank) { if (MAX_NB_OUTSTANDING != DMAPP_DEF_OUTSTANDING_NB) { printf("MAX_NB_OUTSTANDING=%u != DMAPP_DEF_OUTSTANDING_NB=%u\n", MAX_NB_OUTSTANDING, DMAPP_DEF_OUTSTANDING_NB); } } /* The threshold, in bytes, for switching between CPU-based * mechanisms and CPU offload mechanisms. This value can be * specified at any time and can use any value. The default setting is * DMAPP_OFFLOAD_THRESHOLD. Very small or very large settings * may lead to suboptimal performance. The default value is 4k bytes. * Consider how to best set this threshold. While a threshold increase * may increase CPU availability, it may also increase transfer latency * due to BTE involvement. */ requested_attrs.offload_threshold = COMEX_DMAPP_OFFLOAD_THRESHOLD; /* Specifies the type of routing to be used. Applies to RMA requests with * PUT semantics and all AMOs. The default is DMAPP_ROUTING_ADAPTIVE. * The value can be specified at any time. Note that * DMAPP_ROUTING_IN_ORDER guarantees the requests arrive in order and may * result in poor performance. Valid settings are: * - DMAPP_ROUTING_IN_ORDER * - DMAPP_ROUTING_DETERMINISTIC * - DMAPP_ROUTING_ADAPTIVE */ requested_attrs.put_relaxed_ordering = l_state.dmapp_routing; /* Specifies the type of routing to be used. Applies to RMA requests with * GET semantics. The default is DMAPP_ROUTING_ADAPTIVE. The value can be * specified at any time. Note that DMAPP_ROUTING_IN_ORDER may result in * poor performance. Valid settings are: * - DMAPP_ROUTING_IN_ORDER * - DMAPP_ROUTING_DETERMINISTIC * - DMAPP_ROUTING_ADAPTIVE */ requested_attrs.get_relaxed_ordering = l_state.dmapp_routing; /* The maximum number of threads that can access DMAPP. You can only use * this when thread-safety is enabled. The default is 1. You can only * specify this during initialization and it must be >= 1. */ requested_attrs.max_concurrency = 1; /* Defines the PI ordering registration flags used by DMAPP when * registering all memory regions with GNI. Applies to the data, symmetric * heap, and user or dynamically mapped regions. The default is * DMAPP_PI_RELAXED_ORDERING. * * The dmapp_pi_reg_type_t enumeration defines the modes of PI access * ordering to be used by DMAPP during memory registration with uGNI; * therefore, these modes apply to the data and symmetric heap and any * user or dynamically mapped regions. * * These modes do not affect GET operations. * * Strict ordering ensures that posted and non-posted writes arrive at the * target in strict order. Default and relaxed ordering impose no ordering * constraints, therefore if an application requires the global visibility * of data (for example, after a blocking put or gsync/fence), it must * perform extra synchronization in the form of a remote GET from the * target node in order to ensure that written data is globally visible. * - DMAPP_PI_ORDERING_STRICT Strict PI (P_PASS_PW=0, NP_PASS_PW=0) * - DMAPP_PI_ORDERING_DEFAULT Default GNI PI (P_PASS_PW=0, NP_PASS_PW=1) * - DMAPP_PI_ORDERING_RELAXED Relaxed PI ordering (P_PASS_PW=1, NP_PASS_PW=1) */ requested_attrs.PI_ordering = DMAPP_PI_ORDERING_RELAXED; // initialize status = dmapp_init_ext(&requested_attrs, &actual_attrs); assert(status == DMAPP_RC_SUCCESS); #define sanity(field) assert(actual_attrs.field == requested_attrs.field) sanity(max_outstanding_nb); sanity(offload_threshold); sanity(put_relaxed_ordering); sanity(get_relaxed_ordering); sanity(max_concurrency); sanity(PI_ordering); #undef sanity // TODO is this the correct place to set this? max_outstanding_nb = actual_attrs.max_outstanding_nb; status = dmapp_get_jobinfo (&(l_state.job)); assert(status == DMAPP_RC_SUCCESS); // Initialize the reg cache reg_cache_init(l_state.size); // Allocate buffers dmapp_alloc_buf(); // Create locks create_dmapp_locks(); /* Synchronize */ MPI_Barrier(l_state.world_comm); } static void dmapp_terminate(void) { int status; destroy_dmapp_locks(); dmapp_free_buf(); reg_cache_destroy(l_state.size); status = dmapp_finalize(); assert(status == DMAPP_RC_SUCCESS); MPI_Barrier(l_state.world_comm); } int comex_initialized() { return initialized; } ga-5-3/comex/src-dmapp/clusterinfo.c0000640005473000001440000003223312035356407016306 0ustar d3n000users/****************************************************************************** * file: clusterinfo.c * purpose: Determine cluster info i.e., number of machines and processes * running on each of them. * *******************************************************************************/ #if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include "clusterinfo.h" #include "message.h" /* NO_SHMEM enables to simulate cluster environment on a single workstation. * Must define NO_SHMMAX_SEARCH in shmem.c to prevent depleting shared memory * due to a gready shmem request by the master process on cluster node 0. */ #define armci_enable_alpha_hack() 1 #define ARMCI_TAG 30000 #define DEBUG 0 #define MAX_HOSTNAME 80 #define CHECK_NODE_NAMES #define CLUSTER 1 /* until I remove all non CLUSTER code */ /* print info on how many cluster nodes detected */ #define PRINT_CLUSTER_INFO 1 static const char *network_protocol="DMAPP"; /* stores cluster configuration. * Initialized before user threads are created and then read-only */ armci_clus_t *armci_clus_info; int armci_nclus; int armci_clus_me; int armci_master; int armci_clus_first; int armci_clus_last; #ifdef HITACHI #include # define GETHOSTNAME sr_gethostname ndes_t _armci_group; static int sr_gethostname(char *name, int len) { int no; pid_t ppid; if(hmpp_nself (&_armci_group,&no,&ppid,0,NULL) <0) return -1; if(len<6)armci_die("len too small",len); if(no>1024)armci_die("expected node id <1024",no); sprintf(name,"n%d",no); return 0; } #elif defined(SGIALTIX) # define GETHOSTNAME altix_gethostname static int altix_gethostname(char *name, int len) { sprintf(name,"altix"); return 0; } #elif defined(CRAY_XT) /* && !defined(PORTALS) */ #define GETHOSTNAME cnos_gethostname static int cnos_gethostname(char *name, int len) { int size,rank; size=PMI_Get_rank(&rank); sprintf(name,"%d",rank); } #else # define GETHOSTNAME gethostname #endif static char* merge_names(char *name) { int jump = 1, rem, to, from; int lenmes, lenbuf, curlen, totbuflen= armci_nproc*HOSTNAME_LEN; int len = strlen(name); char *work = malloc(totbuflen); if(!work)armci_die("armci: merge_names: malloc failed: ",totbuflen); strcpy(work, name); curlen = len+1; /* prefix tree merges names in the order of process numbering in log(P)time * result = name_1//name_2//...//name_P-1 */ do { jump *= 2; rem = armci_me%jump; if(rem){ to = armci_me - rem; armci_msg_snd(ARMCI_TAG, work, curlen, to); break; }else{ from = armci_me + jump/2; if(from < armci_nproc){ lenbuf = totbuflen - curlen; armci_msg_rcv(ARMCI_TAG, work+curlen, lenbuf, &lenmes, from); curlen += lenmes; } } }while (jump < armci_nproc); return(work); } static void process_hostlist(char *names) { #ifdef CLUSTER int i, cluster=0; char *s,*master; int len, root=0; /******** inspect list of machine names to determine locality ********/ if (armci_me==0){ /* first find out how many cluster nodes we got */ armci_nclus =1; s=master=names; for(i=1; i < armci_nproc; i++){ s += strlen(s)+1; if(strcmp(s,master)){ /* we found a new machine name on the list */ master = s; armci_nclus++; /*fprintf(stderr,"new name %s len =%d\n",master, strlen(master));*/ } } /* allocate memory */ armci_clus_info = (armci_clus_t*)malloc(armci_nclus*sizeof(armci_clus_t)); if(!armci_clus_info) armci_die("malloc failed for clusinfo",armci_nclus); /* fill the data structure -- go through the list again */ s=names; master="*-"; /* impossible hostname */ cluster =0; for(i=0; i < armci_nproc; i++){ if(strcmp(s,master)){ /* we found a new machine name on the list */ master = s; armci_clus_info[cluster].nslave=1; armci_clus_info[cluster].master=i; strcpy(armci_clus_info[cluster].hostname, master); #ifdef CHECK_NODE_NAMES /* need consecutive task id allocated on the same node * the current test only compares hostnames against first cluster */ if(cluster) if(!strcmp(master,armci_clus_info[0].hostname)){ /* we have seen that hostname before */ fprintf(stderr, "ARMCI supports block process mapping only\n"); armci_die("Cannot run: improper task to host mapping!",0); } #endif cluster++; } else{ /* the process is still on the same host */ armci_clus_info[cluster-1].nslave++; } s += strlen(s)+1; } if(armci_nclus != cluster) armci_die("inconsistency processing clusterinfo",armci_nclus); } /******** process 0 got all data ********/ /* now broadcast locality info struct to all processes * two steps are needed because of the unknown length of hostname list */ len = sizeof(int); armci_msg_brdcst(&armci_nclus, len, root); if(armci_me){ /* allocate memory */ armci_clus_info = (armci_clus_t*)malloc(armci_nclus*sizeof(armci_clus_t)); if(!armci_clus_info) armci_die("malloc failed for clusinfo",armci_nclus); } len = sizeof(armci_clus_t)*armci_nclus; armci_msg_brdcst(armci_clus_info, len, root); /******** all processes 0 got all data ********/ /* now determine current cluster node id by comparing me to master */ armci_clus_me = armci_nclus-1; for(i =0; i< armci_nclus-1; i++) if(armci_me < armci_clus_info[i+1].master){ armci_clus_me=i; break; } #else armci_clus_me=0; armci_nclus=1; armci_clus_info = (armci_clus_t*)malloc(armci_nclus*sizeof(armci_clus_t)); if(!armci_clus_info) armci_die("malloc failed for clusinfo",armci_nclus); strcpy(armci_clus_info[0].hostname, names); armci_clus_info[0].master=0; armci_clus_info[0].nslave=armci_nproc; #endif /* Starting process ID on my node */ armci_clus_first = armci_clus_info[armci_clus_me].master; /* Last process ID on my node */ armci_clus_last = armci_clus_first + armci_clus_info[armci_clus_me].nslave-1; } /*\ Substring Replacement: replace needle with nail in a haystack \*/ static char *substr_replace(char *haystack, char *needle, char *nail) { char *tmp, *pos, *first; size_t len=strlen(needle), nlen=strlen(nail),bytes; size_t left; pos = strstr(haystack,needle); if (pos ==NULL) return NULL; first= tmp = calloc(strlen(haystack)+nlen-len+1+1,1); if(first==NULL) return(NULL); bytes = pos - haystack; while(bytes){ *tmp = *haystack; tmp++; haystack++; bytes--;} while(nlen) { *tmp = *nail; tmp++; nail++; nlen--;} haystack += len; left = strlen(haystack); while(left>0){*tmp = *haystack; tmp++; haystack++; left --;} *tmp='\0'; return(first); } /*\ ARMCI_HOSTNAME_REPLACE contains "needle/nail" string to derive new hostname \*/ static char *new_hostname(char *host) { char *tmp, *needle, *nail; if((tmp =getenv("ARMCI_HOSTNAME_REPLACE"))){ needle = strdup(tmp); if(needle== NULL) return NULL; nail = strchr(needle,'/'); if(nail == NULL) return NULL; *nail = '\0'; nail++; if(nail == (needle+1)){ char* tmp1 = calloc(strlen(host)+strlen(nail)+1,1); if(tmp1 == NULL) return NULL; strcpy(tmp1,host); strcat(tmp1,nail); return tmp1; } return substr_replace(host,needle,nail); } else return NULL; } static void print_clus_info() { int i; if(PRINT_CLUSTER_INFO && armci_nclus > 1 && armci_me ==0){ printf("ARMCI configured for %d cluster nodes. Network protocol is '%s'.\n", armci_nclus, network_protocol); fflush(stdout); } if(armci_me==0 && DEBUG) for(i=0;i= MAX_HOSTNAME) armci_die("armci: hostname too long",strlen(tmp)); strcpy(name,tmp); printf("%d using %s hostname\n",armci_me, name); fflush(stdout); } len = strlen(name); #if ARMCI_ENABLE_GPC_CALLS /*a simple way to run as many servers as compute processes*/ enval = getenv("ARMCI_NSERV_EQ_NPROC"); if(enval != NULL){ sprintf(name+len,"n%d",getpid()); len = strlen(name); printf("\n%s\n",name); } #endif #ifdef HOSTNAME_TRUNCATE { /* in some cases (e.g.,SP) when name is used to determine * cluster structure but not to establish communication * we can truncate hostnames to save memory */ int i; limit = HOSTNAME_LEN-1; for(i=0; i",i+1); } if(len>limit)name[limit]='\0'; len =limit; } #else if(len >= HOSTNAME_LEN-1) armci_die("armci: gethostname overrun name string length",len); #endif #ifdef NO_SHMEM if(armci_enable_alpha_hack()) { name[len]='0'+armci_me; name[len+1]='\0'; len++; } #endif if(DEBUG) fprintf(stderr,"%d: %s len=%d\n",armci_me, name,(int)strlen(name)); #ifdef CLUSTER merged = merge_names(name); /* create hostname list */ process_hostlist(merged); /* compute cluster info */ free(merged); #else process_hostlist(name); /* compute cluster info */ #endif armci_master = armci_clus_info[armci_clus_me].master; #ifdef NO_SHMEM if(armci_enable_alpha_hack()) { int i; for(i=0;i= armci_nproc) armci_die("armci_clus_id: out of range",p); if (p < armci_clus_first){ from = 0; to = armci_clus_me; } else { from = armci_clus_me; to = armci_nclus; } found = to - 1; /* Binary search algorithm to be implemented, * sequential search for now */ for(c = from; c < to - 1; c++) if (p < armci_clus_info[c+1].master) { found = c; break; } return found; } /*\ return number of processes in the domain represented by id; id<0 means my node \*/ int armci_domain_nprocs(armci_domain_t domain, int id) { if(id >= armci_nclus) armci_die2("armci domain error",id,armci_nclus); /* This is an error condition */ if(id < 0) { fprintf(stderr,"[%d] Returned domain is invalid\n", armci_me); id = armci_clus_me; } return armci_clus_info[id].nslave; } /* return number of nodes in diven domain */ int armci_domain_count(armci_domain_t domain) { return armci_nclus; } /* return domain ID of the specified process */ int armci_domain_id(armci_domain_t domain, int glob_proc_id) { int id = glob_proc_id; if(id <0 || id >= armci_nproc) { armci_die2("armci domain error",id,armci_nproc); } return armci_clus_id(glob_proc_id); } /* return global ID of a process loc_proc_id in domain identified by id * armci_domain_nproc(id)< loc_proc_id >=0 */ int armci_domain_glob_proc_id(armci_domain_t domain, int id, int loc_proc_id) { if(id <0 || id >= armci_nclus) armci_die2("armci domain error",id,armci_nclus); if(loc_proc_id<0 || loc_proc_id>= armci_clus_info[id].nslave) armci_die2("armci domain proc error", loc_proc_id,armci_clus_info[id].nslave); return (armci_clus_info[id].master + loc_proc_id); } /* return ID of domain that the calling process belongs to */ int armci_domain_my_id(armci_domain_t domain) { return armci_clus_me; } /* Check whether the oricess is in the same domain */ int armci_domain_same_id (armci_domain_t domain, int proc) { #if 0 int rc = SAMECLUSNODE(proc); return rc; #else assert(0); #endif } ga-5-3/comex/src-dmapp/groups.h0000640005473000001440000000107312100346451015262 0ustar d3n000users/** * Private header file for comex groups backed by MPI_comm. * * The rest of the comex group functions are defined in the public comex.h. * * @author Jeff Daily */ #ifndef _COMEX_GROUPS_H_ #define _COMEX_GROUPS_H_ #include #include "comex.h" typedef struct group_link { struct group_link *next; comex_group_t id; MPI_Comm comm; MPI_Group group; } comex_igroup_t; extern void comex_group_init(); extern void comex_group_finalize(); extern comex_igroup_t* comex_get_igroup_from_group(comex_group_t group); #endif /* _COMEX_GROUPS_H_ */ ga-5-3/comex/src-mpi/0000750005473000001440000000000012275260571013267 5ustar d3n000usersga-5-3/comex/src-mpi/Makefile.inc0000640005473000001440000000031312100060357015460 0ustar d3n000userslibcomex_la_SOURCES += src-mpi/comex.c libcomex_la_SOURCES += src-mpi/comex_impl.h libcomex_la_SOURCES += src-mpi/groups.c libcomex_la_SOURCES += src-mpi/groups.h AM_CPPFLAGS += -I$(top_srcdir)/src-mpi ga-5-3/comex/src-mpi/comex_impl.h0000640005473000001440000000356712075637456015620 0ustar d3n000users#ifndef COMEX_IMPL_H_ #define COMEX_IMPL_H_ #include //#define MAX_NB_OUTSTANDING 1024 #define MAX_NB_OUTSTANDING 8 #define COMEX_TAG 27624 typedef enum { OP_PUT = 0, OP_GET_REQUEST, OP_GET_RESPONSE, OP_ACC_INT, OP_ACC_DBL, OP_ACC_FLT, OP_ACC_CPL, OP_ACC_DCP, OP_ACC_LNG, OP_FENCE_REQUEST, OP_FENCE_RESPONSE, OP_BARRIER_REQUEST, OP_BARRIER_RESPONSE, OP_FETCH_AND_ADD_REQUEST, OP_FETCH_AND_ADD_RESPONSE, OP_SWAP_REQUEST, OP_SWAP_RESPONSE, OP_LOCK_REQUEST, OP_LOCK_RESPONSE, OP_UNLOCK, } op_t; typedef struct { op_t operation; void *remote_address; void *local_address; int length; /**< length of message/payload not including header */ void *notify_address; } header_t; typedef struct message_link { struct message_link *next; int dest; char *message; MPI_Request request; } message_t; typedef struct get_link { struct get_link *next; char *notify_address; } get_t; typedef struct barrier_link { struct barrier_link *next; int world_rank; void *notify_address; } barrier_t; typedef struct lock_link { struct lock_link *next; int rank; int id; void *notify_address; } lock_t; typedef struct { MPI_Comm world_comm; int rank; int size; /* buffers for locks */ int *mutexes; /**< local mutexes */ int num_mutexes; /**< how many mutexes on this process */ /* a queue for outgoing messages */ int mq_size; message_t *mq_head; message_t *mq_tail; /* a queue for get notifications */ get_t *gq_head; get_t *gq_tail; /* a queue for barrier requests */ barrier_t *bq_head; barrier_t *bq_tail; /* a queue for lock requests */ lock_t *lq_head; lock_t *lq_tail; } local_state; extern local_state l_state; extern void comex_make_progress(void); #endif /* COMEX_IMPL_H_ */ ga-5-3/comex/src-mpi/groups.c0000640005473000001440000002066712100322123014741 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include "comex.h" #include "comex_impl.h" #include "groups.h" /* the HEAD of the group linked list */ comex_igroup_t *group_list = NULL; /* static functions implemented in this file */ static void comex_create_group_and_igroup( comex_group_t *id, comex_igroup_t **igroup); static void comex_igroup_finalize(comex_igroup_t *igroup); /** * Return the comex igroup instance given the group id. * * The group linked list is searched sequentially until the given group * is found. It is an error if this function is called before * comex_group_init(). An error occurs if the given group is not found. */ comex_igroup_t* comex_get_igroup_from_group(comex_group_t id) { comex_igroup_t *current_group_list_item = group_list; assert(group_list != NULL); while (current_group_list_item != NULL) { if (current_group_list_item->id == id) { return current_group_list_item; } current_group_list_item = current_group_list_item->next; } comex_error("comex group lookup failed", -1); return NULL; } /** * Creates and associates an comex group with an comex igroup. * * This does *not* initialize the members of the comex igroup. */ static void comex_create_group_and_igroup( comex_group_t *id, comex_igroup_t **igroup) { comex_igroup_t *new_group_list_item = NULL; comex_igroup_t *last_group_list_item = NULL; /* find the last group in the group linked list */ last_group_list_item = group_list; while (last_group_list_item->next != NULL) { last_group_list_item = last_group_list_item->next; } /* create, init, and insert the new node for the linked list */ new_group_list_item = malloc(sizeof(comex_igroup_t)); new_group_list_item->id = last_group_list_item->id + 1; new_group_list_item->comm = MPI_COMM_NULL; new_group_list_item->group = MPI_GROUP_NULL; new_group_list_item->next = NULL; last_group_list_item->next = new_group_list_item; /* return the group id and comex igroup */ *igroup = new_group_list_item; *id = new_group_list_item->id; } int comex_group_rank(comex_group_t group, int *rank) { int status; comex_igroup_t *igroup = comex_get_igroup_from_group(group); status = MPI_Group_rank(igroup->group, rank); if (status != MPI_SUCCESS) { comex_error("MPI_Group_rank: Failed ", status); } return COMEX_SUCCESS; } int comex_group_size(comex_group_t group, int *size) { int status; comex_igroup_t *igroup = comex_get_igroup_from_group(group); status = MPI_Group_size(igroup->group, size); if (status != MPI_SUCCESS) { comex_error("MPI_Group_size: Failed ", status); } return COMEX_SUCCESS; } int comex_group_comm(comex_group_t group, MPI_Comm *comm) { int status; comex_igroup_t *igroup = comex_get_igroup_from_group(group); *comm = igroup->comm; return COMEX_SUCCESS; } int comex_group_translate_world(comex_group_t group, int group_rank, int *world_rank) { if (COMEX_GROUP_WORLD == group) { *world_rank = group_rank; } else { comex_igroup_t *igroup = comex_get_igroup_from_group(group); comex_igroup_t *world_igroup = comex_get_igroup_from_group(COMEX_GROUP_WORLD); int status = MPI_Group_translate_ranks( igroup->group, 1, &group_rank, world_igroup->group, world_rank); if (status != MPI_SUCCESS) { comex_error("MPI_Group_translate_ranks: Failed ", status); } } return COMEX_SUCCESS; } /** * Destroys the given comex igroup. */ static void comex_igroup_finalize(comex_igroup_t *igroup) { int status; assert(igroup); if (igroup->group != MPI_GROUP_NULL) { status = MPI_Group_free(&igroup->group); if (status != MPI_SUCCESS) { comex_error("MPI_Group_free: Failed ", status); } } if (igroup->comm != MPI_COMM_NULL) { status = MPI_Comm_free(&igroup->comm); if (status != MPI_SUCCESS) { comex_error("MPI_Comm_free: Failed ", status); } } } int comex_group_free(comex_group_t id) { comex_igroup_t *current_group_list_item = group_list; comex_igroup_t *previous_group_list_item = NULL; /* find the group to free */ while (current_group_list_item != NULL) { if (current_group_list_item->id == id) { break; } previous_group_list_item = current_group_list_item; current_group_list_item = current_group_list_item->next; } /* make sure we found a group */ assert(current_group_list_item != NULL); /* remove the group from the linked list */ if (previous_group_list_item != NULL) { previous_group_list_item->next = current_group_list_item->next; } /* free the group */ comex_igroup_finalize(current_group_list_item); free(current_group_list_item); return COMEX_SUCCESS; } int comex_group_create( int n, int *pid_list, comex_group_t id_parent, comex_group_t *id_child) { int status; int grp_me; comex_igroup_t *igroup_child = NULL; MPI_Group *group_child = NULL; MPI_Comm *comm_child = NULL; comex_igroup_t *igroup_parent = NULL; MPI_Group *group_parent = NULL; MPI_Comm *comm_parent = NULL; /* create the node in the linked list of groups and */ /* get the child's MPI_Group and MPI_Comm, to be populated shortly */ comex_create_group_and_igroup(id_child, &igroup_child); group_child = &(igroup_child->group); comm_child = &(igroup_child->comm); /* get the parent's MPI_Group and MPI_Comm */ igroup_parent = comex_get_igroup_from_group(id_parent); group_parent = &(igroup_parent->group); comm_parent = &(igroup_parent->comm); status = MPI_Group_incl(*group_parent, n, pid_list, group_child); if (status != MPI_SUCCESS) { comex_error("MPI_Group_incl: Failed ", status); } { MPI_Comm comm, comm1, comm2; int lvl=1, local_ldr_pos; MPI_Group_rank(*group_child, &grp_me); if (grp_me == MPI_UNDEFINED) { /* FIXME: keeping the group around for now */ return COMEX_SUCCESS; } /* SK: sanity check for the following bitwise operations */ assert(grp_me>=0); MPI_Comm_dup(MPI_COMM_SELF, &comm); /* FIXME: can be optimized away */ local_ldr_pos = grp_me; while(n>lvl) { int tag=0; int remote_ldr_pos = local_ldr_pos^lvl; if (remote_ldr_pos < n) { int remote_leader = pid_list[remote_ldr_pos]; MPI_Comm peer_comm = *comm_parent; int high = (local_ldr_posid = COMEX_GROUP_WORLD; group_list->next = NULL; /* save MPI world group and communicatior in COMEX_GROUP_WORLD */ group_list->comm = l_state.world_comm; MPI_Comm_group(group_list->comm, &(group_list->group)); } void comex_group_finalize() { comex_igroup_t *current_group_list_item = group_list; comex_igroup_t *previous_group_list_item = NULL; /* don't free the world group (the list head) */ current_group_list_item = current_group_list_item->next; while (current_group_list_item != NULL) { previous_group_list_item = current_group_list_item; current_group_list_item = current_group_list_item->next; comex_igroup_finalize(previous_group_list_item); free(previous_group_list_item); } /* ok, now free the world group, but not the world comm */ MPI_Group_free(&(group_list->group)); free(group_list); group_list = NULL; } ga-5-3/comex/src-mpi/comex.c0000640005473000001440000016401012247216346014551 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* C and/or system headers */ #include #include #include #include #include #include /* 3rd party headers */ #include /* our headers */ #include "comex.h" #include "comex_impl.h" #include "groups.h" #include "acc.h" #define MEMSET_AFTER_MALLOC 0 #define DEBUG 0 #define DEBUG_TO_FILE 0 #if DEBUG_TO_FILE # define printf(...) fprintf(my_file, __VA_ARGS__); fflush(my_file); #endif /* exported state */ local_state l_state; int comex_me=-1; int comex_nproc=-1; /* static state */ static int initialized=0; /* for comex_initialized(), 0=false */ static char *fence_array=NULL; #if DEBUG_TO_FILE static FILE *my_file=NULL; #endif /* static function declarations */ static void _mq_push(int dest, char *message, int count); static int _mq_test(void); static void _mq_pop(void); static void _gq_push(char *notify); static void _gq_push_item(get_t *item); static void _make_progress_if_needed(void); static int _my_isend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request); static void _my_free(void *ptr); static void* _my_malloc(size_t size); static void* _my_memcpy(void *dest, const void *src, size_t n); static int _get_nbi(void *src, void *dst, int bytes, int proc); static int _put_nbi(void *src, void *dst, int bytes, int proc); static void _put_handler(header_t *header, char *payload); static void _get_request_handler(header_t *header, int proc); static void _get_response_handler(header_t *header, char *payload); static void _acc_handler(header_t *header, char *payload); static void _fence_request_handler(header_t *header, int proc); static void _fence_response_handler(header_t *header, int proc); static void _barrier_request_handler(header_t *header, int proc); static void _barrier_response_handler(header_t *header, int proc); static void _send_fence_message(int proc, int *notify); static void _fetch_and_add_request_handler(header_t *header, char *payload, int proc); static void _fetch_and_add_response_handler(header_t *header, char *payload); static void _swap_request_handler(header_t *header, char *payload, int proc); static void _swap_response_handler(header_t *header, char *payload); static void _lock_request_handler(header_t *header, int proc); static void _lock_response_handler(header_t *header); static void _unlock_request_handler(header_t *header, int proc); static void _lq_push(int rank, int id, char *notify); static int _lq_progress(void); int _my_isend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) { #if DEBUG { char *op; switch (((header_t*)buf)->operation) { case OP_PUT: op="OP_PUT"; break; case OP_GET_REQUEST: op="OP_GET_REQUEST"; break; case OP_GET_RESPONSE: op="OP_GET_RESPONSE"; break; case OP_ACC_INT: op="OP_ACC_INT"; break; case OP_ACC_DBL: op="OP_ACC_DBL"; break; case OP_ACC_FLT: op="OP_ACC_FLT"; break; case OP_ACC_CPL: op="OP_ACC_CPL"; break; case OP_ACC_DCP: op="OP_ACC_DCP"; break; case OP_ACC_LNG: op="OP_ACC_LNG"; break; case OP_FENCE_REQUEST: op="OP_FENCE_REQUEST"; break; case OP_FENCE_RESPONSE: op="OP_FENCE_RESPONSE"; break; case OP_BARRIER_REQUEST: op="OP_BARRIER_REQUEST"; break; case OP_BARRIER_RESPONSE: op="OP_BARRIER_RESPONSE"; break; case OP_FETCH_AND_ADD_REQUEST: op="OP_FETCH_AND_ADD_REQUEST"; break; case OP_FETCH_AND_ADD_RESPONSE: op="OP_FETCH_AND_ADD_RESPONSE"; break; case OP_SWAP_REQUEST: op="OP_SWAP_REQUEST"; break; case OP_SWAP_RESPONSE: op="OP_SWAP_RESPONSE"; break; case OP_LOCK_REQUEST: op="OP_LOCK_REQUEST"; break; case OP_LOCK_RESPONSE: op="OP_LOCK_RESPONSE"; break; case OP_UNLOCK: op="OP_UNLOCK"; break; default: assert(0); } printf("[%d] sending %s to %d\n", l_state.rank, op, dest); } #endif assert(dest != MPI_ANY_SOURCE); return MPI_Isend(buf, count, datatype, dest, tag, comm, request); } static void* _my_memcpy(void *dest, const void *src, size_t n) { #if DEBUG printf("[%d] _my_memcpy(dest=%p, src=%p, n=%zu)\n", l_state.rank, dest, src, n); #endif return memcpy(dest, src, n); } static void* _my_malloc(size_t size) { void *memptr=NULL; memptr = malloc(size); assert(memptr); #if MEMSET_AFTER_MALLOC /* valgrind was reporting uninitialized values coming from _my_malloc * so use this memset to quiet valgrind for now. We may turn this * off after additional development/testing if we find the true * source of the uninitialized bytes. */ memptr = memset(memptr, 0, size); assert(memptr); #endif #if DEBUG printf("[%d] _my_malloc(%zu) -> %p\n", l_state.rank, size, memptr); #endif return memptr; } static void _my_free(void *ptr) { #if DEBUG printf("[%d] _my_free(%p)\n", l_state.rank, ptr); #endif free(ptr); } #if DEBUG # define _my_free(ARG) _my_free(ARG); printf(#ARG) #endif static void _mq_push(int dest, char *message, int count) { message_t *mq = NULL; mq = _my_malloc(sizeof(message_t)); assert(mq); mq->next = NULL; mq->dest = dest; mq->message = message; _my_isend(message, count, MPI_CHAR, dest, COMEX_TAG, l_state.world_comm, &(mq->request)); if (l_state.mq_tail) { l_state.mq_tail->next = mq; l_state.mq_tail = mq; } else { l_state.mq_head = mq; l_state.mq_tail = mq; } ++l_state.mq_size; assert(l_state.mq_size >= 0); } static int _mq_test() { int flag; int rc; MPI_Status status; assert(l_state.mq_head); assert(l_state.mq_tail); assert(l_state.mq_head->request != MPI_REQUEST_NULL); rc = MPI_Test(&(l_state.mq_head->request), &flag, &status); assert(MPI_SUCCESS == rc); return flag; } static void _mq_pop() { message_t *mq_to_delete = NULL; assert(l_state.mq_head); assert(l_state.mq_tail); assert(l_state.mq_head->request == MPI_REQUEST_NULL); mq_to_delete = l_state.mq_head; l_state.mq_head = l_state.mq_head->next; /* don't need message or request any longer */ _my_free(mq_to_delete->message); _my_free(mq_to_delete); if (NULL == l_state.mq_head) { l_state.mq_tail = NULL; } --l_state.mq_size; assert(l_state.mq_size >= 0); } static void _gq_push(char *notify) { get_t *item = _my_malloc(sizeof(get_t)); item->next = NULL; item->notify_address = notify; _gq_push_item(item); } static void _gq_push_item(get_t *item) { assert(item); if (l_state.gq_tail) { l_state.gq_tail->next = item; l_state.gq_tail = item; } else { l_state.gq_head = item; l_state.gq_tail = item; } } /* iterate over get queue and pop completed get requests * return true if there are get requests remaining */ static int _gq_test() { get_t *old_gq = l_state.gq_head; l_state.gq_head = NULL; l_state.gq_tail = NULL; while (old_gq) { if (*((char*)old_gq->notify_address)) { _gq_push_item(old_gq); old_gq = old_gq->next; } else { get_t *need_to_free = old_gq; old_gq = old_gq->next; _my_free((char*)need_to_free->notify_address); _my_free(need_to_free); } if (l_state.gq_tail) { l_state.gq_tail->next = NULL; } } return NULL != l_state.gq_tail; } static void _make_progress_if_needed(void) { #if DEBUG printf("[%d] _make_progress_if_needed()\n", l_state.rank); #endif if (l_state.mq_size >= MAX_NB_OUTSTANDING) { comex_make_progress(); } } void comex_make_progress(void) { int iprobe_flag=0; MPI_Status iprobe_status; int get_flag=0; int lock_flag=0; #if DEBUG printf("[%d] comex_make_progress()\n", l_state.rank); #endif do { iprobe_flag = 0; get_flag = 0; /* test for outgoing message completion only if we have outgoing * messages; we test from the head only */ if (l_state.mq_head) { while (l_state.mq_head && _mq_test()) { _mq_pop(); } } /* test for incoming get responses */ if (_gq_test()) { get_flag = 1; } /* test for incoming messages */ MPI_Iprobe(MPI_ANY_SOURCE, COMEX_TAG, l_state.world_comm, &iprobe_flag, &iprobe_status); if (iprobe_flag) { int length; char *message; char *payload; header_t *header; MPI_Status recv_status; /* allocate message buffer and get message */ MPI_Get_count(&iprobe_status, MPI_CHAR, &length); #if DEBUG printf("[%d] iprobe source=%d length=%d\n", l_state.rank, iprobe_status.MPI_SOURCE, length); #endif message = _my_malloc(length); MPI_Recv(message, length, MPI_CHAR, iprobe_status.MPI_SOURCE, COMEX_TAG, l_state.world_comm, &recv_status); header = (header_t*)message; payload = message + sizeof(header_t); /* dispatch message handler */ switch (header->operation) { case OP_PUT: _put_handler(header, payload); break; case OP_GET_REQUEST: _get_request_handler(header, iprobe_status.MPI_SOURCE); break; case OP_GET_RESPONSE: _get_response_handler(header, payload); break; case OP_ACC_INT: case OP_ACC_DBL: case OP_ACC_FLT: case OP_ACC_CPL: case OP_ACC_DCP: case OP_ACC_LNG: _acc_handler(header, payload); break; case OP_FENCE_REQUEST: _fence_request_handler(header, iprobe_status.MPI_SOURCE); break; case OP_FENCE_RESPONSE: _fence_response_handler(header, iprobe_status.MPI_SOURCE); break; case OP_BARRIER_REQUEST: _barrier_request_handler(header, iprobe_status.MPI_SOURCE); break; case OP_BARRIER_RESPONSE: _barrier_response_handler(header, iprobe_status.MPI_SOURCE); break; case OP_FETCH_AND_ADD_REQUEST: _fetch_and_add_request_handler(header, payload, iprobe_status.MPI_SOURCE); break; case OP_FETCH_AND_ADD_RESPONSE: _fetch_and_add_response_handler(header, payload); break; case OP_SWAP_REQUEST: _swap_request_handler(header, payload, iprobe_status.MPI_SOURCE); break; case OP_SWAP_RESPONSE: _swap_response_handler(header, payload); break; case OP_LOCK_REQUEST: _lock_request_handler(header, iprobe_status.MPI_SOURCE); break; case OP_LOCK_RESPONSE: _lock_response_handler(header); break; case OP_UNLOCK: _unlock_request_handler(header, iprobe_status.MPI_SOURCE); break; default: printf("[%d] header operation not recognized: %d\n", l_state.rank, header->operation); assert(0); } /* free the message buffer */ _my_free(message); } lock_flag = _lq_progress(); /* loop until we run out of incoming and outgoing messages */ #if DEBUG printf("[%d] iprobe_flag=%d || get_flag=%d || l_state.mq_size=%d lock_flag=%d\n", l_state.rank, iprobe_flag, get_flag, l_state.mq_size, lock_flag); #endif } while (iprobe_flag || get_flag || l_state.mq_size); } static void _put_handler(header_t *header, char *payload) { #if DEBUG printf("[%d] _put_handler rem=%p loc=%p len=%d not=%p\n", l_state.rank, header->remote_address, header->local_address, header->length, header->notify_address); #endif assert(OP_PUT == header->operation); _my_memcpy(header->remote_address, payload, header->length); } static void _get_request_handler(header_t *request_header, int proc) { char *message; #if DEBUG printf("[%d] _get_request_handler proc=%d\n", l_state.rank, proc); #endif #if DEBUG printf("[%d] request_header rem=%p loc=%p len=%d not=%p\n", l_state.rank, request_header->remote_address, request_header->local_address, request_header->length, request_header->notify_address); #endif assert(OP_GET_REQUEST == request_header->operation); /* reuse the header, just change the OP */ /* NOTE: it gets deleted anyway when we return from this handler */ request_header->operation = OP_GET_RESPONSE; message = _my_malloc(sizeof(header_t) + request_header->length); _my_memcpy(message, request_header, sizeof(header_t)); _my_memcpy(message+sizeof(header_t), request_header->remote_address, request_header->length); _mq_push(proc, message, sizeof(header_t) + request_header->length); } static void _get_response_handler(header_t *header, char *payload) { #if DEBUG printf("[%d] _get_response_handler rem=%p loc=%p len=%d not=%p\n", l_state.rank, header->remote_address, header->local_address, header->length, header->notify_address); #endif assert(OP_GET_RESPONSE == header->operation); _my_memcpy(header->local_address, payload, header->length); *((char*)(header->notify_address)) = 0; } static void _acc_handler(header_t *header, char *payload) { int op; int sizeof_scale; #if DEBUG printf("[%d] _acc_handler\n", l_state.rank); #endif switch (header->operation) { case OP_ACC_INT: sizeof_scale = sizeof(int); op = COMEX_ACC_INT; break; case OP_ACC_DBL: sizeof_scale = sizeof(double); op = COMEX_ACC_DBL; break; case OP_ACC_FLT: sizeof_scale = sizeof(float); op = COMEX_ACC_FLT; break; case OP_ACC_LNG: sizeof_scale = sizeof(long); op = COMEX_ACC_LNG; break; case OP_ACC_CPL: sizeof_scale = sizeof(SingleComplex); op = COMEX_ACC_CPL; break; case OP_ACC_DCP: sizeof_scale = sizeof(DoubleComplex); op = COMEX_ACC_DCP; break; default: assert(0); } _acc(op, header->length, header->remote_address, payload+sizeof_scale, payload); } static void _fence_request_handler(header_t *header, int proc) { header_t *response_header = NULL; #if DEBUG printf("[%d] _fence_request_handler proc=%d\n", l_state.rank, proc); #endif /* preconditions */ assert(header); /* allocate new header */ response_header = _my_malloc(sizeof(header_t)); assert(response_header); /* we make a copy since the original header will be free'd upon return */ memcpy(response_header, header, sizeof(header_t)); /* the only thing that changes is the operation */ response_header->operation = OP_FENCE_RESPONSE; /* we send the header back to the originating proc */ _mq_push(proc, (char*)response_header, sizeof(header_t)); } static void _fence_response_handler(header_t *header, int proc) { #if DEBUG printf("[%d] _fence_response_handler proc=%d decrementing %d\n", l_state.rank, proc, (int)(*((int*)header->notify_address))); #endif assert(header); --(*((int*)(header->notify_address))); } /* barrier requests are always queued for later */ static void _barrier_request_handler(header_t *header, int proc) { barrier_t *new_barrier_request = NULL; #if DEBUG printf("[%d] _barrier_request_handler proc=%d\n", l_state.rank, proc); #endif /* create new queued barrier request */ new_barrier_request = _my_malloc(sizeof(barrier_t)); new_barrier_request->next = NULL; new_barrier_request->world_rank = proc; new_barrier_request->notify_address = header->notify_address; if (NULL == l_state.bq_head) { l_state.bq_head = new_barrier_request; l_state.bq_tail = new_barrier_request; } else { l_state.bq_tail->next = new_barrier_request; l_state.bq_tail = new_barrier_request; } } static void _barrier_response_handler(header_t *header, int proc) { #if DEBUG printf("[%d] _barrier_response_handler proc=%d\n", l_state.rank, proc); #endif ++(*((char*)header->notify_address)); } int comex_put(void *src, void *dst, int bytes, int proc, comex_group_t group) { CHECK_GROUP(group,proc); #if DEBUG printf("[%d] comex_put(src=%p, dst=%p, bytes=%d, proc=%d, group=%d)\n", l_state.rank, src, dst, bytes, proc, group); #endif _put_nbi(src, dst, bytes, proc); comex_wait_proc(proc, group); return COMEX_SUCCESS; } int comex_get(void *src, void *dst, int bytes, int proc, comex_group_t group) { CHECK_GROUP(group,proc); #if DEBUG printf("[%d] comex_get(src=%p, dst=%p, bytes=%d, proc=%d)\n", l_state.rank, src, dst, bytes, proc); #endif _get_nbi(src, dst, bytes, proc); comex_wait_proc(proc, group); return COMEX_SUCCESS; } static int _put_nbi(void *src, void *dst, int bytes, int proc) { header_t header; char *message; #if DEBUG printf("[%d] _put_nbi(src=%p, dst=%p, bytes=%d, proc=%d)\n", l_state.rank, src, dst, bytes, proc); #endif /* Corner case */ if (proc == l_state.rank) { _my_memcpy(dst, src, bytes); return COMEX_SUCCESS; } header.operation = OP_PUT; header.remote_address = dst; header.local_address = src; header.length = bytes; header.notify_address = NULL; message = _my_malloc(sizeof(header_t) + bytes); _my_memcpy(message, &header, sizeof(header_t)); _my_memcpy(message+sizeof(header_t), src, bytes); fence_array[proc] = 1; _mq_push(proc, message, sizeof(header_t) + bytes); _make_progress_if_needed(); return COMEX_SUCCESS; } /* TODO: need data type as a parameter before using this function! */ static int _acc_nbi(void *src, void *dst, int bytes, int proc, int datatype, void *scale) { header_t header; char *message; int message_size = 0; int scale_size = 0; #if DEBUG printf("[%d] _acc_nbi(scale=%p src=%p, dst=%p, bytes=%d, proc=%d)\n", l_state.rank, scale, src, dst, bytes, proc); #endif switch (datatype) { case COMEX_ACC_INT: header.operation = OP_ACC_INT; scale_size = sizeof(int); break; case COMEX_ACC_DBL: header.operation = OP_ACC_DBL; scale_size = sizeof(double); break; case COMEX_ACC_FLT: header.operation = OP_ACC_FLT; scale_size = sizeof(float); break; case COMEX_ACC_CPL: header.operation = OP_ACC_CPL; scale_size = sizeof(SingleComplex); break; case COMEX_ACC_DCP: header.operation = OP_ACC_DCP; scale_size = sizeof(DoubleComplex); break; case COMEX_ACC_LNG: header.operation = OP_ACC_LNG; scale_size = sizeof(long); break; default: assert(0); } /* Corner case */ if (proc == l_state.rank) { _acc(datatype, bytes, dst, src, scale); return COMEX_SUCCESS; } header.remote_address = dst; header.local_address = src; header.length = bytes; header.notify_address = NULL; message_size = sizeof(header_t) + scale_size + bytes; message = _my_malloc(message_size); _my_memcpy(message, &header, sizeof(header_t)); _my_memcpy(message+sizeof(header_t), scale, scale_size); _my_memcpy(message+sizeof(header_t)+scale_size, src, bytes); fence_array[proc] = 1; _mq_push(proc, message, message_size); _make_progress_if_needed(); return COMEX_SUCCESS; } static int _get_nbi(void *src, void *dst, int bytes, int proc) { header_t *header = NULL; #if DEBUG printf("[%d] _get_nbi(src=%p, dst=%p, bytes=%d, proc=%d)\n", l_state.rank, src, dst, bytes, proc); #endif /* Corner case */ if (proc == l_state.rank) { _my_memcpy(dst, src, bytes); return COMEX_SUCCESS; } header = _my_malloc(sizeof(header_t)); assert(header); header->operation = OP_GET_REQUEST; header->remote_address = src; header->local_address = dst; header->length = bytes; header->notify_address = _my_malloc(sizeof(char)); /* set the value to wait on for a get response */ *((char*)(header->notify_address)) = 1; _gq_push(header->notify_address); /* get request is a header-only message */ _mq_push(proc, (char*)header, sizeof(header_t)); _make_progress_if_needed(); return COMEX_SUCCESS; } int comex_puts( void *src_ptr, int *src_stride_ar, void *dst_ptr, int *dst_stride_ar, int *count, int stride_levels, int proc, comex_group_t group) { int i, j; long src_idx, dst_idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int src_bvalue[7], src_bunit[7]; int dst_bvalue[7], dst_bunit[7]; CHECK_GROUP(group,proc); #if DEBUG if (stride_levels) { printf("[%d] comex_puts(src_ptr=%p, src_stride_ar[0]=%d, dst_ptr=%p, dst_stride_ar[0]=%d, count[0]=%d, stride_levels=%d, proc=%d)\n", l_state.rank, src_ptr, src_stride_ar[0], dst_ptr, dst_stride_ar[0], count[0], stride_levels, proc); } else { printf("[%d] comex_puts(src_ptr=%p, src_stride_ar=NULL, dst_ptr=%p, dst_stride_ar=NULL, count=NULL, stride_levels=%d, proc=%d)\n", l_state.rank, src_ptr, dst_ptr, stride_levels, proc); } #endif /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) { n1dim *= count[i]; } /* calculate the destination indices */ src_bvalue[0] = 0; src_bvalue[1] = 0; src_bunit[0] = 1; src_bunit[1] = 1; dst_bvalue[0] = 0; dst_bvalue[1] = 0; dst_bunit[0] = 1; dst_bunit[1] = 1; for(i=2; i<=stride_levels; i++) { src_bvalue[i] = 0; dst_bvalue[i] = 0; src_bunit[i] = src_bunit[i-1] * count[i-1]; dst_bunit[i] = dst_bunit[i-1] * count[i-1]; } /* index mangling */ for(i=0; i (count[j]-1)) { src_bvalue[j] = 0; } } for(j=1; j<=stride_levels; j++) { dst_idx += dst_bvalue[j] * dst_stride_ar[j-1]; if((i+1) % dst_bunit[j] == 0) { dst_bvalue[j]++; } if(dst_bvalue[j] > (count[j]-1)) { dst_bvalue[j] = 0; } } _put_nbi((char *)src_ptr + src_idx, (char *)dst_ptr + dst_idx, count[0], proc); } comex_wait_proc(proc, group); return COMEX_SUCCESS; } int comex_gets( void *src_ptr, int *src_stride_ar, void *dst_ptr, int *dst_stride_ar, int *count, int stride_levels, int proc, comex_group_t group) { int i, j; long src_idx, dst_idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int src_bvalue[7], src_bunit[7]; int dst_bvalue[7], dst_bunit[7]; CHECK_GROUP(group,proc); #if DEBUG if (stride_levels) { printf("[%d] comex_gets(src_ptr=%p, src_stride_ar[0]=%d, dst_ptr=%p, dst_stride_ar[0]=%d, count[0]=%d, stride_levels=%d, proc=%d)\n", l_state.rank, src_ptr, src_stride_ar[0], dst_ptr, dst_stride_ar[0], count[0], stride_levels, proc); } else { printf("[%d] comex_gets(src_ptr=%p, src_stride_ar=NULL, dst_ptr=%p, dst_stride_ar=NULL, count=NULL, stride_levels=%d, proc=%d)\n", l_state.rank, src_ptr, dst_ptr, stride_levels, proc); } #endif /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) { n1dim *= count[i]; } /* calculate the destination indices */ src_bvalue[0] = 0; src_bvalue[1] = 0; src_bunit[0] = 1; src_bunit[1] = 1; dst_bvalue[0] = 0; dst_bvalue[1] = 0; dst_bunit[0] = 1; dst_bunit[1] = 1; for(i=2; i<=stride_levels; i++) { src_bvalue[i] = 0; dst_bvalue[i] = 0; src_bunit[i] = src_bunit[i-1] * count[i-1]; dst_bunit[i] = dst_bunit[i-1] * count[i-1]; } for(i=0; i (count[j]-1)) { src_bvalue[j] = 0; } } dst_idx = 0; for(j=1; j<=stride_levels; j++) { dst_idx += dst_bvalue[j] * dst_stride_ar[j-1]; if((i+1) % dst_bunit[j] == 0) { dst_bvalue[j]++; } if(dst_bvalue[j] > (count[j]-1)) { dst_bvalue[j] = 0; } } _get_nbi((char *)src_ptr + src_idx, (char *)dst_ptr + dst_idx, count[0], proc); } comex_wait_proc(proc, group); return COMEX_SUCCESS; } int comex_acc( int datatype, void *scale, void *src_ptr, void *dst_ptr, int bytes, int proc, comex_group_t group) { comex_accs(datatype, scale, src_ptr, NULL, dst_ptr, NULL, &bytes, 0, proc, group); return COMEX_SUCCESS; } int comex_accs( int datatype, void *scale, void *src_ptr, int *src_stride_ar, void *dst_ptr, int *dst_stride_ar, int *count, int stride_levels, int proc, comex_group_t group) { int i, j; long src_idx, dst_idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int src_bvalue[7], src_bunit[7]; int dst_bvalue[7], dst_bunit[7]; CHECK_GROUP(group,proc); #if DEBUG if (stride_levels) { printf("[%d] comex_accs(src_ptr=%p, src_stride_ar[0]=%d, dst_ptr=%p, dst_stride_ar[0]=%d, count[0]=%d, stride_levels=%d, proc=%d)\n", l_state.rank, src_ptr, src_stride_ar[0], dst_ptr, dst_stride_ar[0], count[0], stride_levels, proc); } else { printf("[%d] comex_accs(src_ptr=%p, src_stride_ar=NULL, dst_ptr=%p, dst_stride_ar=NULL, count=NULL, stride_levels=%d, proc=%d)\n", l_state.rank, src_ptr, dst_ptr, stride_levels, proc); } #endif /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) { n1dim *= count[i]; } /* calculate the destination indices */ src_bvalue[0] = 0; src_bvalue[1] = 0; src_bunit[0] = 1; src_bunit[1] = 1; dst_bvalue[0] = 0; dst_bvalue[1] = 0; dst_bunit[0] = 1; dst_bunit[1] = 1; for(i=2; i<=stride_levels; i++) { src_bvalue[i] = 0; dst_bvalue[i] = 0; src_bunit[i] = src_bunit[i-1] * count[i-1]; dst_bunit[i] = dst_bunit[i-1] * count[i-1]; } /* index mangling */ for(i=0; i (count[j]-1)) { src_bvalue[j] = 0; } } for(j=1; j<=stride_levels; j++) { dst_idx += dst_bvalue[j] * dst_stride_ar[j-1]; if((i+1) % dst_bunit[j] == 0) { dst_bvalue[j]++; } if(dst_bvalue[j] > (count[j]-1)) { dst_bvalue[j] = 0; } } _acc_nbi((char *)src_ptr + src_idx, (char *)dst_ptr + dst_idx, count[0], proc, datatype, scale); } comex_wait_proc(proc, group); return COMEX_SUCCESS; } static void _send_fence_message(int proc, int *notify) { header_t *header = NULL; #if DEBUG printf("[%d] _send_fence_message(proc=%d notify=%p)\n", l_state.rank, proc, notify); #endif /* create and prepare the header */ header = _my_malloc(sizeof(header_t)); assert(header); header->operation = OP_FENCE_REQUEST; header->remote_address = NULL; header->local_address = NULL; header->length = 0; header->notify_address = notify; _mq_push(proc, (char*)header, sizeof(header_t)); _make_progress_if_needed(); } int comex_fence_all(comex_group_t group) { int p = 0; int count_before = 0; int count_after = 0; int *notify = NULL; #if DEBUG printf("[%d] comex_fence_all()\n", l_state.rank); #endif /* count how many fence messagse to send */ for (p=0; p 0) { comex_make_progress(); #if DEBUG printf("[%d] are we stuck? notify=%d\n", l_state.rank, *notify); #endif } for (p=0; p 0) { comex_make_progress(); } fence_array[proc] = 0; _my_free(notify); return COMEX_SUCCESS; } int comex_barrier(comex_group_t comex_group) { MPI_Comm mpi_comm_default; MPI_Group mpi_group_world; MPI_Group mpi_group_default; comex_igroup_t *comex_igroup = NULL; int group_size = -1; int group_rank = -1; int group_proc = -1; /* used in for loop */ int status = 0; char *group_mask; /* which procs are part of default group 0/1 */ char *request_received_mask; /* which procs did we queue requests from */ char *response_received_mask; /* which procs did we get ack from */ int request_received_count = 0; int response_received_count = 0; #if DEBUG printf("[%d] comex_barrier(%d)\n", l_state.rank, comex_group); #endif /* get comm size and rank from group parameter */ comex_igroup = comex_get_igroup_from_group(comex_group); mpi_group_default = comex_igroup->group; mpi_comm_default = comex_igroup->comm; status = MPI_Comm_size(mpi_comm_default, &group_size); assert(MPI_SUCCESS == status); status = MPI_Comm_rank(mpi_comm_default, &group_rank); assert(MPI_SUCCESS == status); /* get world group (for later rank translation) */ status = MPI_Comm_group(l_state.world_comm, &mpi_group_world); assert(MPI_SUCCESS == status); /* create array to note which procs we should respond to */ group_mask = _my_malloc(sizeof(char) * l_state.size); memset(group_mask, 0, sizeof(char) * l_state.size); /* create array to note which procs we've received requests from */ request_received_mask = _my_malloc(sizeof(char) * l_state.size); memset(request_received_mask, 0, sizeof(char) * l_state.size); /* create array to note which procs we've received responses from */ response_received_mask = _my_malloc(sizeof(char) * group_size); memset(response_received_mask, 0, sizeof(char) * group_size); /* send out barrier requests to all procs in default group */ #define USE_RING 1 #if USE_RING int ring_proc; for (ring_proc=0; ring_procoperation = OP_BARRIER_REQUEST; header->remote_address = NULL; header->local_address = NULL; header->length = 0; header->notify_address = &response_received_mask[group_proc]; /* barrier request is a header-only message */ #if DEBUG printf("[%d] sending barrier to %d\n", l_state.rank, world_rank); #endif _mq_push(world_rank, (char*)header, sizeof(header_t)); _make_progress_if_needed(); } /* done with MPI_Group so free it */ MPI_Group_free(&mpi_group_world); /* wait until we've queued all incoming requests */ do { int p; barrier_t *qcur = NULL; comex_make_progress(); qcur = l_state.bq_head; while (NULL != qcur) { if (group_mask[qcur->world_rank]) { request_received_mask[qcur->world_rank] = 1; } qcur = qcur->next; } request_received_count = 0; for (p=0; pworld_rank] && 1 == request_received_mask[qcur->world_rank]) { barrier_t *last = NULL; header_t *response = NULL; request_received_mask[qcur->world_rank] = 0; response = _my_malloc(sizeof(header_t)); response->operation = OP_BARRIER_RESPONSE; response->remote_address = NULL; response->local_address = NULL; response->length = 0; response->notify_address = qcur->notify_address; /* barrier response is a header-only message */ _mq_push(qcur->world_rank, (char*)response, sizeof(header_t)); _make_progress_if_needed(); last = qcur; qcur = qcur->next; _my_free(last); } else { if (new_bq_tail) { assert(NULL == new_bq_tail->next); assert(new_bq_head); new_bq_tail->next = qcur; new_bq_tail = qcur; } else { assert(NULL == new_bq_head); new_bq_head = qcur; new_bq_tail = qcur; } qcur = qcur->next; new_bq_tail->next = NULL; } } l_state.bq_head = new_bq_head; l_state.bq_tail = new_bq_tail; request_received_count = 0; for (p=0; poperation = op; header->remote_address = prem; header->local_address = ploc; header->length = length; header->notify_address = notify; /* set the value to wait on for a rmw response */ *notify = 1; message = _my_malloc(sizeof(header_t) + length); _my_memcpy(message, header, sizeof(header_t)); _my_memcpy(message+sizeof(header_t), payload, length); _mq_push(proc, (char*)message, sizeof(header_t)+length); while (*notify > 0) { comex_make_progress(); #if DEBUG printf("[%d] are we stuck? rmw notify=%d\n", l_state.rank, (int)*notify); #endif } _my_free(notify); _my_free(payload); _my_free(header); return COMEX_SUCCESS; } static void _fetch_and_add_request_handler(header_t *request_header, char *payload, int proc) { char *message; #if DEBUG printf("[%d] _fetch_and_add_request_handler proc=%d\n", l_state.rank, proc); #endif #if DEBUG printf("[%d] request_header rem=%p loc=%p len=%d not=%p\n", l_state.rank, request_header->remote_address, request_header->local_address, request_header->length, request_header->notify_address); #endif assert(OP_FETCH_AND_ADD_REQUEST == request_header->operation); /* reuse the header, just change the OP */ /* NOTE: it gets deleted anyway when we return from this handler */ request_header->operation = OP_FETCH_AND_ADD_RESPONSE; /* fetch */ message = _my_malloc(sizeof(header_t) + request_header->length); _my_memcpy(message, request_header, sizeof(header_t)); _my_memcpy(message+sizeof(header_t), request_header->remote_address, request_header->length); /* "add" */ if (sizeof(int) == request_header->length) { *((int*)request_header->remote_address) += *((int*)payload); } else if (sizeof(long) == request_header->length) { *((long*)request_header->remote_address) += *((long*)payload); } else { assert(0); } _mq_push(proc, message, sizeof(header_t) + request_header->length); } static void _fetch_and_add_response_handler(header_t *header, char *payload) { #if DEBUG printf("[%d] _fetch_and_add_response_handler rem=%p loc=%p len=%d not=%p\n", l_state.rank, header->remote_address, header->local_address, header->length, header->notify_address); #endif assert(OP_FETCH_AND_ADD_RESPONSE == header->operation); _my_memcpy(header->local_address, payload, header->length); *((char*)(header->notify_address)) = 0; } static void _swap_request_handler(header_t *header, char *payload, int proc) { char *message = NULL; void *tmp = NULL; #if DEBUG printf("[%d] _swap_request rem=%p loc=%p len=%d not=%p\n", l_state.rank, header->remote_address, header->local_address, header->length, header->notify_address); #endif assert(OP_SWAP_REQUEST == header->operation); assert(header->length > 0); /* need a temporary for the swap */ tmp = _my_malloc(header->length); _my_memcpy(tmp, payload, header->length); _my_memcpy(payload, header->remote_address, header->length); _my_memcpy(header->remote_address, tmp, header->length); _my_free(tmp); /* reuse the header, just change the OP */ /* NOTE: it gets deleted anyway when we return from this handler */ header->operation = OP_SWAP_RESPONSE; message = _my_malloc(sizeof(header_t) + header->length); _my_memcpy(message, header, sizeof(header_t)); _my_memcpy(message+sizeof(header_t), payload, header->length); _mq_push(proc, message, sizeof(header_t) + header->length); } static void _swap_response_handler(header_t *header, char *payload) { #if DEBUG printf("[%d] _swap_response_handler rem=%p loc=%p len=%d not=%p\n", l_state.rank, header->remote_address, header->local_address, header->length, header->notify_address); #endif assert(OP_SWAP_RESPONSE == header->operation); _my_memcpy(header->local_address, payload, header->length); *((char*)(header->notify_address)) = 0; } static void _lock_request_handler(header_t *header, int proc) { #if DEBUG printf("[%d] _lock_request_handler id=%d proc=%d\n", l_state.rank, header->length, proc); #endif _lq_push(proc, header->length, header->notify_address); } static void _lock_response_handler(header_t *header) { #if DEBUG printf("[%d] _lock_response_handler id=%d\n", l_state.rank, header->length); #endif *((char*)header->notify_address) = 0; } static void _unlock_request_handler(header_t *header, int proc) { #if DEBUG printf("[%d] _unlock_request_handler id=%d proc=%d\n", l_state.rank, header->length, proc); #endif assert(header->length >= 0); assert(header->length < l_state.num_mutexes); /* make sure the unlock request came from the lock holder */ assert(l_state.mutexes[header->length] == proc); l_state.mutexes[header->length] = -1; } static void _lq_push(int rank, int id, char *notify) { lock_t *lock = NULL; #if DEBUG printf("[%d] _lq_push rank=%d id=%d\n", l_state.rank, rank, id); #endif lock = _my_malloc(sizeof(lock_t)); lock->next = NULL; lock->rank = rank; lock->id = id; lock->notify_address = notify; if (l_state.lq_tail) { #if DEBUG printf("[%d] _lq_push rank=%d id=%d to tail\n", l_state.rank, rank, id); #endif assert(NULL == l_state.lq_tail->next); l_state.lq_tail->next = lock; l_state.lq_tail = lock; } else { #if DEBUG printf("[%d] _lq_push rank=%d id=%d to head\n", l_state.rank, rank, id); #endif assert(NULL == l_state.lq_head); l_state.lq_head = lock; l_state.lq_tail = lock; } } static int _lq_progress(void) { int needs_progress = 0; lock_t *lock = NULL; lock_t *new_lock_head = NULL; lock_t *new_lock_tail = NULL; #if DEBUG if (l_state.num_mutexes > 0) { printf("[%d] _lq_progress mutex[0]=%d\n", l_state.rank, l_state.mutexes[0]); } else { //printf("[%d] _lq_progress no mutexes\n", l_state.rank); } #endif lock = l_state.lq_head; while (lock) { if (l_state.mutexes[lock->id] < 0) { lock_t *last = NULL; header_t *header = NULL; l_state.mutexes[lock->id] = lock->rank; #if DEBUG printf("[%d] _lq_progress rank=%d now holds lock %d\n", l_state.rank, lock->rank, lock->id); #endif header = _my_malloc(sizeof(header_t)); header->operation = OP_LOCK_RESPONSE; header->remote_address = NULL; header->local_address = NULL; header->length = -1; header->notify_address = lock->notify_address; _mq_push(lock->rank, (char*)header, sizeof(header_t)); last = lock; lock = lock->next; _my_free(last); needs_progress = 1; } else { #if DEBUG printf("[%d] _lq_progress rank=%d could not acquire lock %d\n", l_state.rank, lock->rank, lock->id); #endif if (new_lock_tail) { assert(new_lock_head); assert(NULL == new_lock_tail->next); new_lock_tail->next = lock; new_lock_tail = lock; } else { assert(NULL == new_lock_head); new_lock_head = lock; new_lock_tail = lock; } lock = lock->next; new_lock_tail->next = NULL; } } l_state.lq_head = new_lock_head; l_state.lq_tail = new_lock_tail; return needs_progress; } /* Mutex Operations */ int comex_create_mutexes(int num) { int i=0; assert(0 <= num); assert(NULL == l_state.mutexes); assert(0 == l_state.num_mutexes); assert(NULL == l_state.lq_head); assert(NULL == l_state.lq_tail); l_state.num_mutexes = num; if (num > 0) { /* create all of the mutexes */ l_state.mutexes = (int*)_my_malloc(num * sizeof(int)); assert(l_state.mutexes); /* init all of my mutexes to unlocked */ for (i=0; i= 0) { ++number_of_outstanding_locks; } } } while (l_state.lq_head || number_of_outstanding_locks > 0); assert(NULL == l_state.lq_head); assert(NULL == l_state.lq_tail); #ifndef NDEBUG { int i; for (i=0; ioperation = OP_LOCK_REQUEST; header->remote_address = NULL; header->local_address = NULL; header->length = mutex; header->notify_address = notify; _mq_push(proc, (char*)header, sizeof(header_t)); while (*notify) { #if DEBUG printf("notify=%d\n", (int)*notify); #endif comex_make_progress(); } _my_free(notify); return COMEX_SUCCESS; } int comex_unlock(int mutex, int proc) { #if DEBUG printf("[%d] comex_unlock id=%d proc=%d\n", l_state.rank, mutex, proc); #endif header_t *header = NULL; header = _my_malloc(sizeof(header_t)); header->operation = OP_UNLOCK; header->remote_address = NULL; header->local_address = NULL; header->length = mutex; header->notify_address = NULL; _mq_push(proc, (char*)header, sizeof(header_t)); _make_progress_if_needed(); return COMEX_SUCCESS; } int comex_malloc(void **ptrs, size_t size, comex_group_t group) { comex_igroup_t *igroup = NULL; MPI_Comm comm = MPI_COMM_NULL; int comm_rank = -1; int rc = MPI_SUCCESS; #if DEBUG printf("[%d] comex_malloc_group(ptrs=%p, size=%ld, ...)\n", l_state.rank, ptrs, size); #endif /* preconditions */ assert(ptrs); assert(group >= 0); igroup = comex_get_igroup_from_group(group); comm = igroup->comm; assert(comm != MPI_COMM_NULL); MPI_Comm_rank(comm, &comm_rank); /* allocate and register segment */ ptrs[comm_rank] = comex_malloc_local(sizeof(char)*size); /* exchange buffer address */ comex_barrier(group); /* end ARMCI epoch, enter MPI epoch */ rc = MPI_Allgather(MPI_IN_PLACE, 0, MPI_LONG, ptrs, 1, MPI_LONG, comm); assert(MPI_SUCCESS == rc); #if DEBUG { int i; int size; MPI_Comm_size(comm, &size); for (i=0; i= 0); igroup = comex_get_igroup_from_group(group); comm = igroup->comm; /* remove my ptr from reg cache and free ptr */ comex_free_local(ptr); /* Synchronize: required by ARMCI semantics */ comex_barrier(group); return COMEX_SUCCESS; } ga-5-3/comex/src-mpi/groups.h0000640005473000001440000000265712247160607014770 0ustar d3n000users/** * Private header file for comex groups backed by MPI_comm. * * The rest of the comex group functions are defined in the public comex.h. * These are the private group functions. * * @author Jeff Daily */ #ifndef _COMEX_GROUPS_H_ #define _COMEX_GROUPS_H_ #include #include "comex.h" typedef struct group_link { struct group_link *next; comex_group_t id; MPI_Comm comm; MPI_Group group; } comex_igroup_t; extern void comex_group_init(); extern void comex_group_finalize(); extern comex_igroup_t* comex_get_igroup_from_group(comex_group_t group); /* verify that proc is part of group * translate proc to world group * change group to world group */ #define CHECK_GROUP(GROUP,PROC) do { \ int size; \ assert(COMEX_SUCCESS == comex_group_size(GROUP,&size)); \ assert(PROC >= 0); \ assert(PROC < size); \ if (COMEX_GROUP_WORLD != GROUP) { \ int world_proc; \ comex_group_translate_world(GROUP, PROC, &world_proc); \ PROC = world_proc; \ GROUP = COMEX_GROUP_WORLD; \ } \ } while(0) #endif /* _COMEX_GROUPS_H_ */ ga-5-3/comex/src-ofa/0000750005473000001440000000000012275260570013246 5ustar d3n000usersga-5-3/comex/src-ofa/device.c0000640005473000001440000000235712116425146014655 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include "comex.h" #include "comex_impl.h" #include "openib.h" // Device specific implementation // void* COMEXD_register_memory(void *buf, int len) { return openib_register_memory(buf, len); } int COMEXD_deregister_memory(void *buf) { return openib_deregister_memory(buf); } int COMEXD_put_nbi(void *src, void *dst, int bytes, int proc) { if (proc == l_state.rank) { (void) memcpy(dst, src, bytes); return 0; } return openib_put_nbi(src, dst, bytes, proc); } int COMEXD_get_nbi(void *src, void *dst, int bytes, int proc) { if (proc == l_state.rank) { (void) memcpy(dst, src, bytes); return 0; } return openib_get_nbi(src, dst, bytes, proc); } void COMEXD_network_lock(int proc) { openib_network_lock(proc); } void COMEXD_network_unlock(int proc) { openib_network_unlock(proc); } int COMEXD_waitproc(int proc) { return openib_waitproc(proc); } int COMEXD_waitall() { openib_waitall(); return 0; } int COMEXD_initialize() { return openib_initialize(); } int COMEXD_finalize() { return openib_finalize(); } ga-5-3/comex/src-ofa/mutex.c0000640005473000001440000000103712116425146014552 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include "comex.h" #include "comex_impl.h" int comex_create_mutexes(int num) { assert(0); return COMEX_SUCCESS; } int comex_destroy_mutexes() { assert(0); return COMEX_SUCCESS; } int comex_lock(int mutex, int proc) { assert(0); return COMEX_SUCCESS; } int comex_unlock(int mutex, int proc) { assert(0); return COMEX_SUCCESS; } ga-5-3/comex/src-ofa/Makefile.inc0000640005473000001440000000132312116207056015450 0ustar d3n000userslibcomex_la_SOURCES += src-ofa/comex.c libcomex_la_SOURCES += src-ofa/comex_impl.h libcomex_la_SOURCES += src-ofa/contig.c libcomex_la_SOURCES += src-ofa/device.c libcomex_la_SOURCES += src-ofa/device.h libcomex_la_SOURCES += src-ofa/fence.c libcomex_la_SOURCES += src-ofa/gpa.c libcomex_la_SOURCES += src-ofa/groups.c libcomex_la_SOURCES += src-ofa/groups.h libcomex_la_SOURCES += src-ofa/mutex.c libcomex_la_SOURCES += src-ofa/openib.c libcomex_la_SOURCES += src-ofa/openib.h libcomex_la_SOURCES += src-ofa/reg_cache.c libcomex_la_SOURCES += src-ofa/reg_cache.h libcomex_la_SOURCES += src-ofa/strided.c libcomex_la_SOURCES += src-ofa/vector.c libcomex_la_SOURCES += src-ofa/wait.c AM_CPPFLAGS += -I$(top_srcdir)/src-ofa ga-5-3/comex/src-ofa/contig.c0000640005473000001440000000333212116207056014671 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include "comex.h" #include "comex_impl.h" int comex_put(void *src, void *dst, int bytes, int proc, comex_group_t group) { assert(src && dst && bytes); COMEXD_put_nbi(src, dst, bytes, proc); COMEXD_waitproc(proc); return 0; } int comex_get(void *src, void *dst, int bytes, int proc, comex_group_t group) { COMEXD_get_nbi(src, dst, bytes, proc); COMEXD_waitproc(proc); return 0; } int comex_acc(int datatype, void *scale, void *src_ptr, void *dst_ptr, int bytes, int proc, comex_group_t group) { double *get_buf = (double *)l_state.acc_buf; double *_src_buf = (double *)src_ptr; double calc_scale = *(double *)scale; int m, limit; assert(bytes <= l_state.acc_buf_len); assert(datatype == COMEX_ACC_DBL); assert(get_buf); COMEXD_network_lock(proc); comex_get(dst_ptr, get_buf, bytes, proc, group); for (m=0, limit=bytes/sizeof(double); m #include #include #include #include #include "comex.h" #include "comex_impl.h" int comex_wait_proc(int proc, comex_group_t group) { return COMEXD_waitproc(proc); } int comex_wait(comex_request_t * hdl) { return COMEXD_waitall(); } int comex_test(comex_request_t * hdl, int *status) { *status = 0; return COMEXD_waitall(); } int comex_wait_all(comex_group_t group) { return COMEXD_waitall(); } ga-5-3/comex/src-ofa/reg_cache.h0000640005473000001440000000073411757471653015336 0ustar d3n000users#ifndef _REG_CACHE_H_ #define _REG_CACHE_H_ #include struct _reg_entry_t { void *buf; int len; int lkey; int rkey; struct ibv_mr *mr; struct _reg_entry_t *next; }; struct _reg_entry_t *reg_cache_find(int, void *, int); int reg_cache_init(int, int); int reg_cache_destroy(int); int reg_cache_insert(int rank, void *buf, int len, int, int, struct ibv_mr *); void reg_cache_delete(int rank, void *buf); #endif /* _REG_CACHE_H_ */ ga-5-3/comex/src-ofa/reg_cache.c0000640005473000001440000000571012116425146015312 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #include "comex.h" #include "comex_impl.h" #include "reg_cache.h" // Registration cache : Defensive Programming // nprocs: number of processes // size: number of entries struct _reg_entry_t **reg_cache; // cache size for each process // int cache_size = -1; int reg_cache_init(int nprocs, int size) { // Allocate the registration cache: reg_cache = (struct _reg_entry_t **)malloc(sizeof(struct _reg_entry_t *) * nprocs); assert(reg_cache); int i; for (i = 0; i < nprocs; ++i) { reg_cache[i] = (struct _reg_entry_t *)malloc(sizeof(struct _reg_entry_t)); assert(reg_cache[i]); reg_cache[i]->next = NULL; } return 0; } int reg_cache_destroy(int nprocs) { int i; // TODO: Deregister all entries for (i = 0; i < nprocs; ++i) { if (reg_cache[i]) free(reg_cache[i]); } assert(reg_cache); free(reg_cache); return 0; } struct _reg_entry_t* reg_cache_find(int rank, void *buf, int len) { struct _reg_entry_t *runner = reg_cache[rank]->next; while (runner) { if (runner->buf <= buf && runner->len >= len && ((runner->buf + runner->len) >= (buf + len))) { return(runner); } runner = runner->next; } return NULL; } int reg_cache_insert(int rank, void *buf, int len, int lkey, int rkey, struct ibv_mr *mr) { struct _reg_entry_t *node, *runner = (struct _reg_entry_t *)(reg_cache[rank]); node = (struct _reg_entry_t *)malloc(sizeof(struct _reg_entry_t)); assert(node); node->buf = buf; node->len = len; node->lkey = lkey; node->rkey = rkey; node->next = NULL; if (mr) { node->mr = mr; assert(node->mr); assert(node->buf == buf); } assert(NULL == reg_cache_find(rank, buf, 0)); while (runner->next) { runner = runner->next; } runner->next = node; return 0; } void reg_cache_delete(int rank, void *buf) { struct _reg_entry_t *found, *runner = (struct _reg_entry_t *)reg_cache[rank]; while (runner->next) { if (runner->next->buf == buf) { found = runner->next; runner->next = runner->next->next; free(found); return; } runner = runner->next; } assert(0); } #if 0 // Test Driver int main() { reg_cache_init(16, 4); _reg_entry_t *reg_entry; long *a = (long *)malloc(sizeof(long) *8192); reg_cache_insert(0, a, 16, 1, 1); reg_entry = reg_cache_find(1, a , 16); assert(!reg_entry); #if 1 reg_entry = reg_cache_find(0, a , 32); assert(!reg_entry); reg_entry = reg_cache_find(0, a , 16); assert(reg_entry); reg_entry = reg_cache_find(0, a , 32); assert(!reg_entry); #endif reg_cache_destroy(16); } #endif ga-5-3/comex/src-ofa/gpa.c0000640005473000001440000000000011717545305014152 0ustar d3n000usersga-5-3/comex/src-ofa/openib.c0000640005473000001440000004572512116425146014700 0ustar d3n000users/* Author: Abhinav Vishnu */ #if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #include #include #include "comex.h" #include "comex_impl.h" #include "openib.h" #include "reg_cache.h" /* Global vars */ int me; int nprocs; double timecalc[20000]; struct RC_Conn conn; struct User_Opts opts; struct HCA hca; struct Local_Buf lbuf; struct Remote_Buf rbuf; struct ibv_recv_wr rr_desc; struct ibv_sge rr_sg_entry; pthread_t test_async_thread; void openib_init_envs() { char *value; if ((value = getenv("COMEX_OPENIB_USE_DREG")) != NULL){ l_state.comex_openib_use_dreg = (atoi(value)); } else { l_state.comex_openib_use_dreg = 0; } } void init_params(void) { opts.msg_size = DEFAULT_MSG_SIZE; opts.iterations = DEFAULT_ITERATIONS; opts.rdma_flag = 0; opts.sendrecv_flag = 0; opts.all_msgs = 1; opts.memperf = 0; opts.align = ALIGNMENT; opts.ib_devname = NULL; opts.num_cqe = DEFAULT_NUM_CQE; opts.send_wr = DEFAULT_NUM_OUST_SEND; opts.recv_wr = DEFAULT_NUM_OUST_RECV; opts.num_sge = DEFAULT_NUM_SGE; opts.latency = 0; opts.bandwidth = 0; opts.bibandwidth = 0; opts.window = DEFAULT_WINDOW_SIZE; opts.num_ports = 1; opts.striping_threshold = STRIPING_THRESHOLD; opts.num_qp_per_port = 1; opts.default_port = DEFAULT_PORT; hca.ib_dev = NULL; hca.context = NULL; hca.pd = NULL; lbuf.buf_original = NULL; lbuf.buf = NULL; lbuf.mr = NULL; conn.qp = (struct ibv_qp **) malloc(nprocs * sizeof(struct ibv_qp *)); conn.lid = (uint16_t *) malloc(nprocs * sizeof(uint16_t)); conn.qp_num = (uint32_t *) malloc(nprocs * sizeof(uint32_t)); rbuf.qp_num = (uint32_t *) malloc(nprocs * sizeof(uint32_t)); rbuf.lid = (uint16_t *) malloc(nprocs * sizeof(uint16_t)); rbuf.rkey = (uint32_t *) malloc(nprocs * sizeof(uint32_t)); rbuf.buf = (char **) malloc(nprocs * sizeof(char *)); assert(conn.qp && conn.lid && rbuf.qp_num && rbuf.lid && rbuf.rkey && rbuf.buf); } double my_wtime() { double t; struct timeval tv; static unsigned long initialized = 0; static unsigned long sec_base; gettimeofday(&tv, NULL); if (!initialized) { sec_base = tv.tv_sec; initialized = 1; } t = (double) (tv.tv_sec - sec_base) + (double) tv.tv_usec * 1.0e-6; return t; } void release_resources(void) { int i; // Destroy the registration cache reg_cache_destroy(nprocs); for(i = 0; i < nprocs ; i++) { if (me != i) { if(ibv_destroy_qp(conn.qp[i])) { printf("Exiting\n"); exit(1); } } } #if 0 if(ibv_destroy_cq(hca.cq)) { fprintf(stderr,"Couldn't destroy cq %s\n", ibv_get_device_name(hca.ib_dev)); } if(ibv_dealloc_pd(hca.pd)) { fprintf(stderr,"Couldn't free pd %s\n", ibv_get_device_name(hca.ib_dev)); } #endif free(conn.qp); free(conn.lid); free(conn.qp_num); free(rbuf.qp_num); free(rbuf.lid); #if 0 free(rbuf.rkey); free(rbuf.buf); #endif } int open_hca(void) { struct ibv_device **dev_list=NULL; int num_hcas; dev_list = ibv_get_device_list(&num_hcas); // Assume that the first device has an ACTIVE port // if it does not we do not handle this situation for now hca.ib_dev = dev_list[0]; hca.context = ibv_open_device(hca.ib_dev); if(!hca.context) { fprintf(stderr,"Couldn't get context %s\n", ibv_get_device_name(hca.ib_dev)); return 1; } hca.pd = ibv_alloc_pd(hca.context); assert(hca.pd != NULL); if(!hca.pd) { fprintf(stderr,"Couldn't get pd %s\n", ibv_get_device_name(hca.ib_dev)); return 1; } return 0; } int create_cq(void) { hca.cq = ibv_create_cq(hca.context, opts.num_cqe, NULL, NULL, 0); assert(hca.cq); return 0; } int exch_addr(void) { int rc; rc = MPI_Alltoall((void *)conn.qp_num, sizeof(uint32_t), MPI_BYTE, (void *)rbuf.qp_num, sizeof(uint32_t), MPI_BYTE, l_state.world_comm); assert(!rc); rc = MPI_Alltoall((void *)conn.lid, sizeof(uint16_t), MPI_BYTE, (void *)rbuf.lid, sizeof(uint16_t), MPI_BYTE, l_state.world_comm); assert(!rc); #ifdef DEBUG for (i = 0; i < nprocs; i++) { if (me == i) continue; fprintf(stdout,"[%d] Remote QP %d, Remote LID %u, Rkey %u, Lkey %u\n" " LBuf %p, RBuf %p\n", me, rbuf.qp_num[i], rbuf.lid[i], rbuf.rkey[i], lbuf.mr->lkey, lbuf.buf, rbuf.buf[i]); fflush(stdout); } #endif return 0; } int create_qp(void) { struct ibv_qp_attr qp_attr; int i; memset(&qp_attr, 0, sizeof qp_attr); struct ibv_qp_init_attr attr; memset(&attr, 0, sizeof attr); attr.send_cq = hca.cq; attr.recv_cq = hca.cq; attr.cap.max_send_wr = opts.send_wr; attr.cap.max_recv_wr = opts.recv_wr; attr.cap.max_send_sge = opts.num_sge; attr.cap.max_recv_sge = opts.num_sge; attr.cap.max_inline_data = 1; attr.qp_type = IBV_QPT_RC; // Create a connection to yourself for(i = 0; i < nprocs; i++) { conn.qp[i] = ibv_create_qp(hca.pd, &attr); if(!conn.qp[i]) { fprintf(stderr,"Couldn't create QP\n"); return 1; } conn.qp_num[i] = conn.qp[i]->qp_num; qp_attr.qp_state = IBV_QPS_INIT; qp_attr.pkey_index = 0; qp_attr.port_num = 1; qp_attr.qp_access_flags = IBV_ACCESS_LOCAL_WRITE| IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ | IBV_ACCESS_REMOTE_ATOMIC; if(ibv_modify_qp(conn.qp[i], &qp_attr, IBV_QP_STATE | IBV_QP_PKEY_INDEX | IBV_QP_PORT | IBV_QP_ACCESS_FLAGS)) { fprintf(stderr,"Could not modify QP to INIT\n"); return 1; } #ifdef DEBUG fprintf(stdout,"[%d] Created QP %d, LID %d\n", me, conn.qp_num[i], conn.lid[i]); fflush(stdout); #endif } return 0; } int get_lid(void) { struct ibv_port_attr port_attr[MAX_PORTS]; int i, j; int active_port_found = 0; for (j = 1; j <= opts.num_ports; j++) { if (!ibv_query_port(hca.context, j, &port_attr[j - 1]) && (port_attr[j - 1].state == IBV_PORT_ACTIVE)) { active_port_found = 1; for (i = 0; i < nprocs; i++) conn.lid[i] = port_attr[j - 1].lid; return 0; } } assert(active_port_found); return 1; } int connect_qp(void) { struct ibv_qp_attr attr; int i; memset(&attr, 0 , sizeof attr); for(i = 0; i < nprocs; i++){ attr.qp_state = IBV_QPS_RTR; attr.path_mtu = IBV_MTU_2048; attr.dest_qp_num = rbuf.qp_num[i]; attr.rq_psn = 0; attr.max_dest_rd_atomic = 10; attr.min_rnr_timer = 20; attr.ah_attr.is_global = 0; attr.ah_attr.dlid = rbuf.lid[i]; attr.ah_attr.sl = 0; attr.ah_attr.src_path_bits = 0; attr.ah_attr.port_num = 1; attr.ah_attr.static_rate = 0; if (ibv_modify_qp(conn.qp[i], &attr, IBV_QP_STATE | IBV_QP_AV | IBV_QP_PATH_MTU | IBV_QP_DEST_QPN | IBV_QP_RQ_PSN | IBV_QP_MAX_DEST_RD_ATOMIC | IBV_QP_MIN_RNR_TIMER)) { fprintf(stderr, "Failed to modify QP to RTR\n"); return 1; } attr.qp_state = IBV_QPS_RTS; attr.timeout = 14; attr.retry_cnt = 7; attr.rnr_retry = 7; attr.sq_psn = 0; attr.max_rd_atomic = 0; if (ibv_modify_qp(conn.qp[i], &attr, IBV_QP_STATE | IBV_QP_TIMEOUT | IBV_QP_RETRY_CNT | IBV_QP_RNR_RETRY | IBV_QP_SQ_PSN | IBV_QP_MAX_QP_RD_ATOMIC)) { fprintf(stderr, "Failed to modify QP to RTS\n"); return 1; } } return 0; } struct ibv_send_wr sr_desc; struct ibv_sge sr_sg_entry; // All data transfers must go through this function void prepare_and_post_send_desc(void *src, void *dst, int dest, int len, int lkey, int rkey, int type, int lock_or_unlock) { sr_desc.send_flags = IBV_SEND_SIGNALED; sr_desc.next = NULL; sr_desc.opcode = type; sr_desc.wr_id = 0; sr_desc.num_sge = 1; if(IBV_WR_RDMA_WRITE == type) { sr_desc.wr.rdma.remote_addr = (uintptr_t) (dst); sr_sg_entry.addr = (uintptr_t) (src); sr_sg_entry.length = len; sr_desc.wr.rdma.rkey = rkey; } if (IBV_WR_RDMA_READ == type) { sr_desc.wr.rdma.remote_addr = (uintptr_t) (src); sr_sg_entry.addr = (uintptr_t) (dst); sr_sg_entry.length = len; sr_desc.wr.rdma.rkey = rkey; } if (IBV_WR_ATOMIC_CMP_AND_SWP == type) { sr_desc.wr.atomic.remote_addr = (uintptr_t) (dst); sr_desc.wr.atomic.rkey = rkey; sr_sg_entry.addr = (uintptr_t) (src); sr_sg_entry.length = sizeof(long); if (lock_or_unlock == OPENIB_LOCK) { sr_desc.wr.atomic.compare_add = 0; sr_desc.wr.atomic.swap = l_state.rank + 1; } else if (lock_or_unlock == OPENIB_UNLOCK){ sr_desc.wr.atomic.compare_add = l_state.rank + 1; sr_desc.wr.atomic.swap = 0; } else { assert(0); } } sr_sg_entry.lkey = lkey; sr_desc.sg_list = &(sr_sg_entry); struct ibv_send_wr *bad_wr; if(ibv_post_send(conn.qp[dest], &sr_desc, &bad_wr)) { fprintf(stderr,"[%d] Error posting send\n", me); fflush(stderr); } // Increment outstanding and check whether we need to make progress increment_outstanding(); } /* Poll CQ till n_sends are complete and n_recvs * are complete */ int poll_cq(int n_sends, int n_recvs) { int ne; struct ibv_wc wc; int send_comp = 0; int recv_comp = 0; // return if poll cq is called with no outstanding messages if (!n_sends) return 0; // Make sure that no recv requests are called assert(!n_recvs); while (1) { do { ne = ibv_poll_cq(hca.cq, 1, &wc); } while (ne < 1); /* Okay, got an entry, check for errors */ if(ne < 0) { fprintf(stderr,"Error Polling CQ\n"); return 1; } if(wc.status != IBV_WC_SUCCESS) { fprintf(stderr, "[%d] Failed status %d\n", me, wc.status); return 1; } /* What type is it? */ /* In this test suite, we are using either send descriptors * or RDMA, hence the following is OK */ if(IBV_WC_RDMA_WRITE == wc.opcode || IBV_WC_RDMA_READ == wc.opcode || IBV_WC_COMP_SWAP == wc.opcode) { /* Send Completion */ if(n_sends) { send_comp++; } } else { fprintf(stderr, "Unknown opcode recv'd\n"); assert(0); } if((n_sends == send_comp) && (n_recvs == recv_comp)) { break; } } return 0; } void openib_waitall() { // Poll the CQ for all outstanding data transfer int rc = poll_cq(l_state.num_outstanding, 0); assert(!rc); l_state.num_outstanding = 0; } void increment_outstanding() { l_state.num_outstanding++; if ((l_state.num_outstanding == DEFAULT_NUM_OUST_SEND)) { openib_waitall(); } } void * openib_register_memory(void *buf, int len) { struct ibv_mr *mr; mr = ibv_reg_mr(hca.pd, buf, len, IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_WRITE | IBV_ACCESS_REMOTE_READ | IBV_ACCESS_REMOTE_ATOMIC); if (mr) { // Insert in the registration cache reg_cache_insert(l_state.rank, buf, len, mr->lkey, mr->rkey, mr); } return (void *)mr; } int openib_deregister_memory(void *buf) { struct _reg_entry_t *reg = reg_cache_find(l_state.rank, buf, 0); assert(reg); if (ibv_dereg_mr(reg->mr)) { assert(0); } reg_cache_delete(l_state.rank, buf); return 0; } int openib_put_nbi(void *src, void *dst, int bytes, int proc) { void *src_ptr; int local_reg_failure = 0; struct _reg_entry_t *local_reg, *remote_reg; // Search for local key local_reg = reg_cache_find(l_state.rank, src, bytes); // Search for remote key remote_reg = reg_cache_find(proc, dst, bytes); if (!local_reg && l_state.comex_openib_use_dreg) { openib_register_memory(src, bytes); local_reg = reg_cache_find(l_state.rank, src, bytes); } if (local_reg) { src_ptr = src; } else { local_reg_failure = 1; openib_waitall(); src_ptr = l_state.put_buf; assert(bytes <= l_state.put_buf_len); memcpy(src_ptr, src, bytes); local_reg = reg_cache_find(l_state.rank, src_ptr, bytes); assert(local_reg); } // Ensure that the registration entries are valid assert(remote_reg); // Prepare a send decriptor and post prepare_and_post_send_desc(src_ptr, dst, proc, bytes, local_reg->lkey, remote_reg->rkey, IBV_WR_RDMA_WRITE, -1); if (local_reg_failure) { openib_waitall(); } return 0; } int openib_get_nbi(void *src, void *dst, int bytes, int proc) { void *dst_ptr; int local_reg_failure = 0; // Due to location consistency semantics, we need to call waitall here //openib_waitall(); // The source is the buffer from which the data is read struct _reg_entry_t *local_reg, *remote_reg; // Search for local key local_reg = reg_cache_find(l_state.rank, dst, bytes); // Search for remote key remote_reg = reg_cache_find(proc, src, bytes); assert(remote_reg); if (!local_reg && l_state.comex_openib_use_dreg) { openib_register_memory(dst, bytes); local_reg = reg_cache_find(l_state.rank, dst, bytes); } // Ensure that the registration entries are valid if (local_reg) { dst_ptr = dst; } else { local_reg_failure = 1; assert(bytes <= l_state.get_buf_len); dst_ptr = l_state.get_buf; local_reg = reg_cache_find(l_state.rank, dst_ptr, bytes); assert(local_reg); openib_waitall(); } assert(remote_reg); // Prepare a send decriptor and post prepare_and_post_send_desc(src, dst_ptr, proc, bytes, local_reg->lkey, remote_reg->rkey, IBV_WR_RDMA_READ, -1); if (local_reg_failure) { openib_waitall(); memcpy(dst, dst_ptr, bytes); } return 0; } void openib_network_lock(int proc) { void *src = l_state.local_lock_buf; void *dst = l_state.atomic_lock_buf[proc]; assert(src && dst); int bytes = sizeof(long); // The source is the buffer from which the data is read struct _reg_entry_t *local_reg, *remote_reg; // Search for local key local_reg = reg_cache_find(l_state.rank, src, sizeof(long)); // Search for remote key remote_reg = reg_cache_find(proc, dst, sizeof(long)); // Ensure that the registration entries are valid assert(local_reg && remote_reg); // Prepare a send decriptor and post // do { prepare_and_post_send_desc(src, dst, proc, bytes, local_reg->lkey, remote_reg->rkey, IBV_WR_ATOMIC_CMP_AND_SWP, OPENIB_LOCK); openib_waitall(); } while (*(long *)(src) != 0); } void openib_network_unlock(int proc) { void *src = l_state.local_lock_buf; void *dst = l_state.atomic_lock_buf[proc]; assert(src && dst); int bytes = sizeof(long); // The source is the buffer from which the data is read struct _reg_entry_t *local_reg, *remote_reg; // Search for local key local_reg = reg_cache_find(l_state.rank, src, sizeof(long)); // Search for remote key remote_reg = reg_cache_find(proc, dst, sizeof(long)); // Ensure that the registration entries are valid assert(local_reg); assert(remote_reg); // Prepare a send decriptor and post do { prepare_and_post_send_desc(src, dst, proc, bytes, local_reg->lkey, remote_reg->rkey, IBV_WR_ATOMIC_CMP_AND_SWP, OPENIB_UNLOCK); openib_waitall(); } while (*(long *)(src) != l_state.rank + 1); } void openib_create_locks() { // Create the locks and initialize them l_state.local_lock_buf = comex_malloc_local(sizeof(long)); assert(l_state.local_lock_buf); l_state.atomic_lock_buf = (void **)malloc(l_state.size * sizeof(void *)); assert(l_state.atomic_lock_buf); comex_malloc((l_state.atomic_lock_buf), sizeof(long), COMEX_GROUP_WORLD); *(long *)(l_state.atomic_lock_buf[l_state.rank]) = 0; *(long *)(l_state.local_lock_buf) = 0; MPI_Barrier(l_state.world_comm); } void openib_alloc_buf() { l_state.acc_buf_len = 1048576; l_state.acc_buf = (void *)malloc(sizeof(char) * l_state.acc_buf_len); l_state.put_buf_len = 1048576; l_state.put_buf = (void *)malloc(sizeof(char) * l_state.put_buf_len); l_state.get_buf_len = 1048576; l_state.get_buf = (void *)malloc(sizeof(char) * l_state.get_buf_len); assert(l_state.acc_buf && l_state.put_buf && l_state.get_buf); void *info; info = openib_register_memory(l_state.acc_buf, l_state.acc_buf_len); assert(info); info = openib_register_memory(l_state.put_buf, l_state.put_buf_len); assert(info); info = openib_register_memory(l_state.get_buf, l_state.get_buf_len); assert(info); } int openib_waitproc(int proc) { openib_waitall(); return 0; } int openib_finalize() { release_resources(); return 0; } int openib_initialize() { // Use the previously cached info me = l_state.rank; nprocs = l_state.size; assert(l_state.world_comm); // initialize the envs openib_init_envs(); //Initialize the registration cache reg_cache_init(nprocs, 0); init_params(); if(open_hca()) { release_resources(); exit(1); } if(create_cq()) { release_resources(); exit(1); } if(get_lid()) { release_resources(); exit(1); } if(create_qp()) { release_resources(); exit(1); } if(exch_addr()) { release_resources(); exit(1); } if(connect_qp()) { release_resources(); exit(1); } // Create network locks openib_create_locks(); // Allocate buffers for one sided operations openib_alloc_buf(); MPI_Barrier(l_state.world_comm); return 0; } ga-5-3/comex/src-ofa/fence.c0000640005473000001440000000111112116425146014461 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include "comex.h" #include "comex_impl.h" #include "device.h" int comex_fence_all(comex_group_t group) { COMEXD_waitall(); return COMEX_SUCCESS; } int comex_fence_proc(int proc, comex_group_t group) { COMEXD_waitall(); return COMEX_SUCCESS; } int comex_barrier(comex_group_t group) { assert(l_state.world_comm); comex_fence_all(group); MPI_Barrier(l_state.world_comm); return COMEX_SUCCESS; } ga-5-3/comex/src-ofa/openib.h0000640005473000001440000000734212116425146014676 0ustar d3n000users#ifndef OPENIB_H_ #define OPENIB_H_ #include /* for uint16_t, uint32_t */ #define OPENIB_LOCK 0 #define OPENIB_UNLOCK 1 /* Default values */ #define MEMCPY_ITERS (10000) #define MAX_PORT_NUM (2) #define DEFAULT_PORT (1) #define MEMCPY_SIZE (16 * 1024 * 1024) #define MAX_PORTS (1) #define MAX_QP_PER_PORT (1) #define MAX_SUBCHANNELS (MAX_PORTS * MAX_QP_PER_PORT) #define DEFAULT_MSG_SIZE (8 * 1048576) #define DEFAULT_BW_ITERS (200) #define DEFAULT_ITERATIONS (10000) #define DEFAULT_NUM_CQE (40000) #define DEFAULT_NUM_OUST_RECV (0) #define DEFAULT_NUM_OUST_SEND (128) #define DEFAULT_NUM_SGE (1) #define DEFAULT_WINDOW_SIZE (32) #define ALIGNMENT (64) #define STRIPING_THRESHOLD (16 * 1024) #define MHZ 238 #define SKIP 10 #define rdtsc(x) asm volatile("rdtsc" : "=A" (x)) /* Read and Write Barriers for PPC, required */ #ifdef _PPC64_ # define STBAR() asm volatile ("sync": : :"memory") /* ": : :" for C++ */ # define READBAR() asm volatile ("sync": : :"memory") # define WRITEBAR() asm volatile ("eieio": : :"memory") #else # define STBAR() # define READBAR() # define WRITEBAR() #endif struct User_Opts { int msg_size; int iterations; int rdma_flag; int sendrecv_flag; char *ib_devname; int all_msgs; int align; int num_cqe; int send_wr; int recv_wr; int num_sge; int latency; int bandwidth; int bibandwidth; int window; int num_ports; int num_qp_per_port; int striping_threshold; int subchannels; int regcost; int memperf; int default_port; int use_apm; int apm_test; int test_nft; int use_srq; }; struct HCA { struct ibv_device *ib_dev; struct ibv_context *context; struct ibv_pd *pd; struct ibv_cq *cq; struct ibv_srq *srq_hndl; struct ibv_comp_channel *scomp_ch; struct ibv_comp_channel *rcomp_ch; void *cntx; }; struct Local_Buf { char *buf_original; char *buf; char *tmp; struct ibv_mr *mr; }; struct Remote_Buf { char **buf; uint32_t *qp_num; uint16_t *lid; uint32_t *rkey; }; struct RC_Conn { struct ibv_qp **qp; uint16_t *lid; uint32_t *qp_num; }; //static struct ibv_srq * create_srq(); static inline int min(int a, int b) { return (a < b ? a : b); } static inline int max(int a, int b) { return (a > b ? a : b); } extern void post_recv_desc(int dest); extern void init_params(void); extern double my_wtime(); extern void release_resources(void); extern int open_hca(void); extern int reg_buf(void); extern int create_cq(void); extern int exch_addr(void); extern int create_qp(void); extern int get_lid(void); extern int connect_qp(void); extern void prepare_and_post_send_desc(void *src, void *dst, int dest, int len, int lkey, int rkey, int type, int lock_or_unlock); extern int poll_cq(int n_sends, int n_recvs); extern void openib_waitall(); extern void increment_outstanding(); extern void * openib_register_memory(void *buf, int len); extern int openib_deregister_memory(void *buf); extern int openib_put_nbi(void *src, void *dst, int bytes, int proc); extern int openib_get_nbi(void *src, void *dst, int bytes, int proc); extern void openib_network_lock(int proc); extern void openib_network_unlock(int proc); extern void openib_create_locks(); extern void openib_alloc_buf(); extern int openib_waitproc(int proc); extern int openib_finalize(); extern int openib_initialize(); #endif /* OPENIB_H_ */ ga-5-3/comex/src-ofa/comex_impl.h0000640005473000001440000000112112116207056015541 0ustar d3n000users#ifndef COMEX_IMPL_H_ #define COMEX_IMPL_H_ #include #include "device.h" #define MIN_REGISTRATION_SIZE 64 #define ACC_PIPELINE_THRESHOLD 8192 typedef struct { MPI_Comm world_comm; int rank; int size; // buffer for lock void **atomic_lock_buf; void *local_lock_buf; void *acc_buf; int acc_buf_len; void *put_buf; int put_buf_len; void *get_buf; int get_buf_len; // Number of outstanding data transfers unsigned long num_outstanding; int comex_openib_use_dreg; } local_state; extern local_state l_state; #endif ga-5-3/comex/src-ofa/groups.c0000640005473000001440000002254012116425146014731 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDLIB_H # include #endif #if HAVE_ASSERT_H # include #endif #include "comex.h" #include "comex_impl.h" #include "groups.h" /* COMEX has the notion of a default group and a world group. */ comex_group_t COMEX_Default_Proc_Group = 0; comex_group_t COMEX_World_Proc_Group = 0; /* the HEAD of the group linked list */ comex_igroup_t *group_list = NULL; /** * Return the comex_igroup_t instance given the comex_group_t. * * The group linked list is searched sequentially until the given group * is found. It is an error if this function is called before * comex_group_init(). An error occurs if the given group is not found. */ comex_igroup_t* comex_get_igroup_from_group(comex_group_t id) { comex_igroup_t *current_group_list_item = group_list; assert(group_list != NULL); while (current_group_list_item != NULL) { if (current_group_list_item->id == id) { return current_group_list_item; } current_group_list_item = current_group_list_item->next; } comex_error("comex_group_t lookup failed", -1); return NULL; } /** * Creates and associates an comex_group_t with an comex_igroup_t. * * This does *not* initialize the members of the comex_igroup_t. */ static void comex_create_group_and_igroup( comex_group_t *id, comex_igroup_t **igroup) { comex_igroup_t *new_group_list_item = NULL; comex_igroup_t *last_group_list_item = NULL; /* find the last group in the group linked list */ last_group_list_item = group_list; while (last_group_list_item->next != NULL) { last_group_list_item = last_group_list_item->next; } /* create, init, and insert the new node for the linked list */ new_group_list_item = malloc(sizeof(comex_igroup_t)); new_group_list_item->id = last_group_list_item->id + 1; new_group_list_item->next = NULL; last_group_list_item->next = new_group_list_item; /* return the group id and comex_igroup_t */ *igroup = new_group_list_item; *id = new_group_list_item->id; } /** * Returns the rank of this process within the given group. */ int comex_group_rank(comex_group_t id, int *rank) { int status; comex_igroup_t *igroup = comex_get_igroup_from_group(id); status = MPI_Group_rank(igroup->group, rank); if (status != MPI_SUCCESS) { comex_error("MPI_Group_rank: Failed ", status); } return COMEX_SUCCESS; } /** * Returns the size of a group. */ int comex_group_size(comex_group_t id, int *size) { int status; comex_igroup_t *igroup = comex_get_igroup_from_group(id); status = MPI_Group_size(igroup->group, size); if (status != MPI_SUCCESS) { comex_error("MPI_Group_size: Failed ", status); } return COMEX_SUCCESS; } int comex_group_comm(comex_group_t group, MPI_Comm *comm) { comex_igroup_t *igroup = comex_get_igroup_from_group(group); *comm = igroup->comm; return COMEX_SUCCESS; } /** * Translates the given rank from the given group into that of the world group. */ int comex_group_translate_world(comex_group_t id, int group_rank, int *world_rank) { int status; MPI_Group world_group; comex_igroup_t *igroup = comex_get_igroup_from_group(id); status = MPI_Comm_group(l_state.world_comm, &world_group); if (status != MPI_SUCCESS) { comex_error("MPI_Comm_group: Failed ", status); } status = MPI_Group_translate_ranks( igroup->group, 1, &group_rank, world_group, world_rank); if (status != MPI_SUCCESS) { comex_error("MPI_Group_translate_ranks: Failed ", status); } return COMEX_SUCCESS; } /** * Sets the default comex_group_t. */ void comex_group_set_default(comex_group_t id) { /* sanity check that the group is valid */ comex_igroup_t *igroup = comex_get_igroup_from_group(id); assert(NULL != igroup); COMEX_Default_Proc_Group = id; } /** * Gets the default comex_group_t. */ void comex_group_get_default(comex_group_t *group_out) { *group_out = COMEX_Default_Proc_Group; } /** * Gets the world comex_group_t. */ void comex_group_get_world(comex_group_t *group_out) { *group_out = COMEX_World_Proc_Group; } /** * Destroys the given comex_igroup_t. */ static void comex_igroup_finalize(comex_igroup_t *igroup) { int status; assert(igroup); status = MPI_Group_free(&igroup->group); if (status != MPI_SUCCESS) { comex_error("MPI_Group_free: Failed ", status); } if (igroup->comm != MPI_COMM_NULL) { status = MPI_Comm_free(&igroup->comm); if (status != MPI_SUCCESS) { comex_error("MPI_Comm_free: Failed ", status); } } } /** * Removes and destroys the given comex_group_t from the group linked list. */ int comex_group_free(comex_group_t id) { comex_igroup_t *current_group_list_item = group_list; comex_igroup_t *previous_group_list_item = NULL; /* find the group to free */ while (current_group_list_item != NULL) { if (current_group_list_item->id == id) { break; } previous_group_list_item = current_group_list_item; current_group_list_item = current_group_list_item->next; } /* make sure we found a group */ assert(current_group_list_item != NULL); /* remove the group from the linked list */ if (previous_group_list_item != NULL) { previous_group_list_item->next = current_group_list_item->next; } /* free the group */ comex_igroup_finalize(current_group_list_item); free(current_group_list_item); return COMEX_SUCCESS; } /** * Create a child group for to the given group. * * @param[in] n #procs in this group (<= that in group_parent) * @param[in] pid_list The list of proc ids (w.r.t. group_parent) * @param[out] id_child Handle to store the created group * @param[in] id_parent Parent group */ int comex_group_create( int n, int *pid_list, comex_group_t id_parent, comex_group_t *id_child) { int status; int grp_me; comex_igroup_t *igroup_child = NULL; MPI_Group *group_child = NULL; MPI_Comm *comm_child = NULL; comex_igroup_t *igroup_parent = NULL; MPI_Group *group_parent = NULL; MPI_Comm *comm_parent = NULL; /* create the node in the linked list of groups and */ /* get the child's MPI_Group and MPI_Comm, to be populated shortly */ comex_create_group_and_igroup(id_child, &igroup_child); group_child = &(igroup_child->group); comm_child = &(igroup_child->comm); /* get the parent's MPI_Group and MPI_Comm */ igroup_parent = comex_get_igroup_from_group(id_parent); group_parent = &(igroup_parent->group); comm_parent = &(igroup_parent->comm); status = MPI_Group_incl(*group_parent, n, pid_list, group_child); if (status != MPI_SUCCESS) { comex_error("MPI_Group_incl: Failed ", status); } { MPI_Comm comm, comm1, comm2; int lvl=1, local_ldr_pos; MPI_Group_rank(*group_child, &grp_me); if (grp_me == MPI_UNDEFINED) { *comm_child = MPI_COMM_NULL; /* FIXME: keeping the group around for now */ return COMEX_SUCCESS; } /* SK: sanity check for the following bitwise operations */ assert(grp_me>=0); MPI_Comm_dup(MPI_COMM_SELF, &comm); /* FIXME: can be optimized away */ local_ldr_pos = grp_me; while(n>lvl) { int tag=0; int remote_ldr_pos = local_ldr_pos^lvl; if (remote_ldr_pos < n) { int remote_leader = pid_list[remote_ldr_pos]; MPI_Comm peer_comm = *comm_parent; int high = (local_ldr_posid = COMEX_World_Proc_Group; group_list->next = NULL; /* save MPI world group and communicatior in COMEX_World_Proc_Group */ group_list->comm = l_state.world_comm; MPI_Comm_group(l_state.world_comm, &(group_list->group)); } void comex_group_finalize() { comex_igroup_t *current_group_list_item = group_list; comex_igroup_t *previous_group_list_item = NULL; /* don't free the world group (the list head) */ current_group_list_item = current_group_list_item->next; while (current_group_list_item != NULL) { previous_group_list_item = current_group_list_item; current_group_list_item = current_group_list_item->next; comex_igroup_finalize(previous_group_list_item); free(previous_group_list_item); } } ga-5-3/comex/src-ofa/comex.c0000640005473000001440000002063612116425146014531 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* C and/or system headers */ #include #include #include #include #include /* 3rd party headers */ #include #include /* our headers */ #include "comex.h" #include "device.h" #include "comex_impl.h" #include "groups.h" #include "reg_cache.h" /* exported state */ local_state l_state; /* static state */ static int initialized=0; /* for comex_initialized(), 0=false */ static long sc_page_size=-1; /* from sysconf, in bytes */ /* static function declarations */ static void *_comex_malloc_local(size_t size, void **rinfo); void comex_error(char *msg, int code) { if (0 == l_state.rank) { fprintf(stderr,"Received an Error in Communication\n"); } MPI_Abort(l_state.world_comm, code); } int comex_malloc(void **ptrs, size_t size, comex_group_t group) { comex_igroup_t *igroup = NULL; MPI_Comm comm = MPI_COMM_NULL; int comm_size = -1; int comm_rank = -1; int rc = MPI_SUCCESS; void *src_buf = NULL; size_t max_size = size; void *local_rkey_buf = NULL; struct ibv_mr *mr = NULL; int *allgather_rkey_buf = NULL; int i = 0; /* preconditions */ assert(ptrs); igroup = comex_get_igroup_from_group(group); comm = igroup->comm; assert(comm != MPI_COMM_NULL); rc = MPI_Comm_rank(comm, &comm_rank); assert(rc == MPI_SUCCESS); rc = MPI_Comm_size(comm, &comm_size); assert(rc == MPI_SUCCESS); /* achieve consensus on the allocation size */ rc = MPI_Allreduce(&size, &max_size, 1, MPI_LONG, MPI_MAX, comm); assert(rc == MPI_SUCCESS); size = max_size; /* 0 Byte registrations are potential problems */ if (size < MIN_REGISTRATION_SIZE) { size = MIN_REGISTRATION_SIZE; } /* allocate and register the user level buffer */ ptrs[comm_rank] = _comex_malloc_local(sizeof(char)*max_size, &local_rkey_buf); assert(local_rkey_buf); /* exchange buffer address */ /* @TODO: Consider usijng MPI_IN_PLACE? */ memcpy(&src_buf, &ptrs[comm_rank], sizeof(void *)); MPI_Allgather(&src_buf, sizeof(void *), MPI_BYTE, ptrs, sizeof(void *), MPI_BYTE, comm); /* allocate buffer for collecting remote keys */ allgather_rkey_buf = (int *)malloc(sizeof(int) * comm_size); assert(allgather_rkey_buf); /* set the rkey of the local buffer */ mr = (struct ibv_mr *)local_rkey_buf; allgather_rkey_buf[comm_rank] = mr->rkey; /* exchange rkeys */ MPI_Allgather(MPI_IN_PLACE, 0, MPI_DATATYPE_NULL, allgather_rkey_buf, 1, MPI_INT, comm); /* insert in the remote registration cache */ for (i = 0; i < comm_size; i++) { int world_rank; comex_group_translate_world(group, i, &world_rank); if (i == comm_rank) { continue; } reg_cache_insert(world_rank, ptrs[i], size, -1, allgather_rkey_buf[i], NULL); } /* free the temporary buffer */ free(allgather_rkey_buf); MPI_Barrier(comm); return 0; } int comex_free(void *ptr, comex_group_t group) { comex_igroup_t *igroup = NULL; MPI_Comm comm = MPI_COMM_NULL; int comm_size = -1; int comm_rank = -1; int i; long **allgather_ptrs = NULL; int rc = -1; /* preconditions */ assert(NULL != ptr); igroup = comex_get_igroup_from_group(group); comm = igroup->comm; assert(comm != MPI_COMM_NULL); rc = MPI_Comm_rank(comm, &comm_rank); assert(rc == MPI_SUCCESS); rc = MPI_Comm_size(comm, &comm_size); assert(rc == MPI_SUCCESS); /* allocate receive buffer for exhange of pointers */ allgather_ptrs = (long **)malloc(sizeof(void *) * comm_size); assert(allgather_ptrs); /* exchange of pointers */ rc = MPI_Allgather(&ptr, sizeof(void *), MPI_BYTE, allgather_ptrs, sizeof(void *), MPI_BYTE, comm); assert(rc == MPI_SUCCESS); /* remove all ptrs from registration cache */ for (i = 0; i < comm_size; i++) { int world_rank; comex_group_translate_world(group, i, &world_rank); if (i == comm_rank) { continue; } reg_cache_delete(world_rank, allgather_ptrs[i]); } /* remove my ptr from reg cache and free ptr */ comex_free_local(ptr); /* Synchronize: required by COMEX semantics */ free(allgather_ptrs); MPI_Barrier(comm); return 0; } static void *_comex_malloc_local(size_t size, void **rinfo) { void *ptr = NULL; int rc = 0; /* allocate the user level buffer */ rc = posix_memalign(&ptr, sc_page_size, sizeof(char)*size); assert(0 == rc); assert(ptr); /* register the buffer and check the return info */ *rinfo = COMEXD_register_memory(ptr, size); return ptr; } // recursively find individual regions which can be registered void recursive_reg(void *ptr, size_t size) { assert(sc_page_size >= 0); if (size <= (unsigned long)sc_page_size) return; if (COMEXD_register_memory(ptr, size)) return; else { recursive_reg(ptr, size / 2); recursive_reg(ptr + size /2, size / 2); } } void *comex_malloc_local(size_t size) { void *ptr = NULL; void *rinfo = NULL; ptr = _comex_malloc_local(size, &rinfo); if (!rinfo) { // registration failed recursive_reg(ptr, size); } return ptr; } int comex_free_local(void *ptr) { assert(ptr != NULL); COMEXD_deregister_memory(ptr); free(ptr); return COMEX_SUCCESS; } int comex_init() { int init_flag; /* Test if initialized has been called more than once */ if (initialized) { return 0; } initialized = 1; /* Assert MPI has been initialized */ MPI_Initialized(&init_flag); assert(init_flag); /* Duplicate the World Communicator */ MPI_Comm_dup(MPI_COMM_WORLD, &(l_state.world_comm)); /* My Rank */ MPI_Comm_rank(l_state.world_comm, &(l_state.rank)); /* World Size */ MPI_Comm_size(l_state.world_comm, &(l_state.size)); // init groups comex_group_init(); // Initialize the number of outstanding messages l_state.num_outstanding = 0; // Get the page size for malloc sc_page_size = sysconf(_SC_PAGESIZE); // Initialize the COMEX device COMEXD_initialize(); /* Synch - Sanity Check */ MPI_Barrier(l_state.world_comm); return 0; } int comex_init_args(int *argc, char ***argv) { int rc; int init_flag; MPI_Initialized(&init_flag); if(!init_flag) { MPI_Init(argc, argv); } rc = comex_init(); return rc; } int comex_finalize() { // Make sure that all outstanding operations are done comex_wait_all(COMEX_GROUP_WORLD); // Call COMEX device specific finalize COMEXD_finalize(); MPI_Barrier(l_state.world_comm); // destroys all groups and their communicators comex_group_finalize(); // destroy the primary communicator assert(MPI_SUCCESS == MPI_Comm_free(&l_state.world_comm)); return COMEX_SUCCESS; } void comex_cleanup() { comex_finalize(); } int comex_rmw(int op, void *ploc, void *prem, int extra, int proc, comex_group_t group) { if (op == COMEX_FETCH_AND_ADD) { COMEXD_network_lock(proc); comex_get(prem, ploc, sizeof(int), proc, group); (*(int *)ploc) += extra; comex_put(ploc, prem, sizeof(int), proc, group); (*(int *)ploc) -= extra; COMEXD_network_unlock(proc); } else if (op == COMEX_FETCH_AND_ADD_LONG) { COMEXD_network_lock(proc); comex_get(prem, ploc, sizeof(long), proc, group); (*(long *)ploc) += extra; comex_put(ploc, prem, sizeof(long), proc, group); (*(long *)ploc) -= extra; COMEXD_network_unlock(proc); } else if (op == COMEX_SWAP) { int tmp; COMEXD_network_lock(proc); comex_get(prem, &tmp, sizeof(int), proc, group); comex_put(ploc, prem, sizeof(int), proc, group); COMEXD_network_unlock(proc); *(int*)ploc = tmp; } else if (op == COMEX_SWAP_LONG) { long tmp; COMEXD_network_lock(proc); comex_get(prem, &tmp, sizeof(long), proc, group); comex_put(ploc, prem, sizeof(long), proc, group); COMEXD_network_unlock(proc); *(long*)ploc = tmp; } else { assert(0); } return 0; } int comex_initialized() { return initialized; } ga-5-3/comex/src-ofa/vector.c0000640005473000001440000000375512116207056014721 0ustar d3n000users#include #include #include #include #include #include "comex.h" #include "comex_impl.h" int comex_putv(comex_giov_t *iov, int iov_len, int proc, comex_group_t group) { int i; for (i=0; i #include #include #include #include // Device specific functions void* COMEXD_register_memory(void *buf, int len); int COMEXD_deregister_memory(void *buf); int COMEXD_put_nbi(void *src, void *dst, int bytes, int proc); int COMEXD_get_nbi(void *src, void *dst, int bytes, int proc); void COMEXD_network_lock(int proc); void COMEXD_network_unlock(int proc); int COMEXD_waitproc(int proc); int COMEXD_waitall(); int COMEXD_initialize(); int COMEXD_finalize(); ga-5-3/comex/src-ofa/groups.h0000640005473000001440000000120512116207056014727 0ustar d3n000users/** * Private header file for COMEX groups backed by MPI_comm. * * The rest of the COMEX_Group functions are defined in the public comex.h. * * @author Jeff Daily */ #ifndef _COMEX_GROUPS_H_ #define _COMEX_GROUPS_H_ #include /* dup of MPI_COMM_WORLD for internal MPI communication */ extern MPI_Comm COMEX_COMM_WORLD; typedef struct group_link { struct group_link *next; comex_group_t id; MPI_Comm comm; MPI_Group group; } comex_igroup_t; extern void comex_group_init(); extern void comex_group_finalize(); extern comex_igroup_t* comex_get_igroup_from_group(comex_group_t group); #endif /* _COMEX_GROUPS_H_ */ ga-5-3/comex/src-ofa/strided.c0000640005473000001440000002405112116425146015047 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* C and/or system headers */ #include #include #include #include /* 3rd party headers */ #include /* our headers */ #include "comex.h" #include "comex_impl.h" /* needed for complex accumulate */ typedef struct { double real; double imag; } DoubleComplex; typedef struct { float real; float imag; } SingleComplex; int comex_nbputs(void *src_ptr, int src_stride_ar[/*stride_levels*/], void *dst_ptr, int dst_stride_ar[/*stride_levels*/], int count[/*stride_levels+1*/], int stride_levels, int proc, comex_group_t group, comex_request_t *hdl) { int i, j; long src_idx, dst_idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int src_bvalue[7], src_bunit[7]; int dst_bvalue[7], dst_bunit[7]; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) { n1dim *= count[i]; } /* calculate the destination indices */ src_bvalue[0] = 0; src_bvalue[1] = 0; src_bunit[0] = 1; src_bunit[1] = 1; dst_bvalue[0] = 0; dst_bvalue[1] = 0; dst_bunit[0] = 1; dst_bunit[1] = 1; for(i=2; i<=stride_levels; i++) { src_bvalue[i] = 0; dst_bvalue[i] = 0; src_bunit[i] = src_bunit[i-1] * count[i-1]; dst_bunit[i] = dst_bunit[i-1] * count[i-1]; } /* index mangling */ for(i=0; i (count[j]-1)) src_bvalue[j] = 0; } for(j=1; j<=stride_levels; j++) { dst_idx += dst_bvalue[j] * dst_stride_ar[j-1]; if((i+1) % dst_bunit[j] == 0) dst_bvalue[j]++; if(dst_bvalue[j] > (count[j]-1)) dst_bvalue[j] = 0; } COMEXD_put_nbi((char *)src_ptr + src_idx, (char *)dst_ptr + dst_idx, count[0], proc); } comex_wait_proc(proc, group); return COMEX_SUCCESS; } int comex_nbgets(void *src_ptr, int src_stride_ar[/*stride_levels*/], void *dst_ptr, int dst_stride_ar[/*stride_levels*/], int count[/*stride_levels+1*/], int stride_levels, int proc, comex_group_t group, comex_request_t *hdl) { int i, j; long src_idx, dst_idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int src_bvalue[7], src_bunit[7]; int dst_bvalue[7], dst_bunit[7]; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ src_bvalue[0] = 0; src_bvalue[1] = 0; src_bunit[0] = 1; src_bunit[1] = 1; dst_bvalue[0] = 0; dst_bvalue[1] = 0; dst_bunit[0] = 1; dst_bunit[1] = 1; for(i=2; i<=stride_levels; i++) { src_bvalue[i] = 0; dst_bvalue[i] = 0; src_bunit[i] = src_bunit[i-1] * count[i-1]; dst_bunit[i] = dst_bunit[i-1] * count[i-1]; } for(i=0; i (count[j]-1)) src_bvalue[j] = 0; } dst_idx = 0; for(j=1; j<=stride_levels; j++) { dst_idx += dst_bvalue[j] * dst_stride_ar[j-1]; if((i+1) % dst_bunit[j] == 0) dst_bvalue[j]++; if(dst_bvalue[j] > (count[j]-1)) dst_bvalue[j] = 0; } COMEXD_get_nbi((char *)src_ptr + src_idx, (char *)dst_ptr + dst_idx, count[0], proc); } COMEXD_waitproc(proc); return COMEX_SUCCESS; } int comex_nbaccs(int datatype, void *scale, void *src_ptr, int src_stride_ar[/*stride_levels*/], void *dst_ptr, int dst_stride_ar[/*stride_levels*/], int count[/*stride_levels+1*/], int stride_levels, int proc, comex_group_t group, comex_request_t *hdl) { int i, j; long src_idx, dst_idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int src_bvalue[7], src_bunit[7]; int dst_bvalue[7], dst_bunit[7]; int sizetogetput; void *get_buf; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ src_bvalue[0] = 0; src_bvalue[1] = 0; src_bunit[0] = 1; src_bunit[1] = 1; dst_bvalue[0] = 0; dst_bvalue[1] = 0; dst_bunit[0] = 1; dst_bunit[1] = 1; for(i=2; i<=stride_levels; i++) { src_bvalue[i] = 0; dst_bvalue[i] = 0; src_bunit[i] = src_bunit[i-1] * count[i-1]; dst_bunit[i] = dst_bunit[i-1] * count[i-1]; } sizetogetput = count[0]; /* TODO: Can we allocate a temporary buffer like we did for the * gemini port? */ if (sizetogetput <= l_state.acc_buf_len) { get_buf = l_state.acc_buf; } else { get_buf = comex_malloc_local(sizetogetput); } assert(get_buf); /* grab the atomics lock */ COMEXD_network_lock(proc); for(i=0; i (count[j]-1)) { src_bvalue[j] = 0; } } dst_idx = 0; for(j=1; j<=stride_levels; j++) { dst_idx += dst_bvalue[j] * dst_stride_ar[j-1]; if((i+1) % dst_bunit[j] == 0) { dst_bvalue[j]++; } if(dst_bvalue[j] > (count[j]-1)) { dst_bvalue[j] = 0; } } comex_get((char *)dst_ptr + dst_idx, l_state.acc_buf, count[0], proc, group); #define EQ_ONE_REG(A) ((A) == 1.0) #define EQ_ONE_CPL(A) ((A).real == 1.0 && (A).imag == 0.0) #define IADD_REG(A,B) (A) += (B) #define IADD_CPL(A,B) (A).real += (B).real; (A).imag += (B).imag #define IADD_SCALE_REG(A,B,C) (A) += (B) * (C) #define IADD_SCALE_CPL(A,B,C) (A).real += ((B).real*(C).real) - ((B).imag*(C).imag);\ (A).imag += ((B).real*(C).imag) + ((B).imag*(C).real); #define ACC(WHICH, COMEX_TYPE, C_TYPE) \ if (datatype == COMEX_TYPE) { \ int m; \ int m_lim = count[0]/sizeof(C_TYPE); \ C_TYPE *iterator = (C_TYPE *)get_buf; \ C_TYPE *value = (C_TYPE *)((char *)src_ptr + src_idx); \ C_TYPE calc_scale = *(C_TYPE *)scale; \ if (EQ_ONE_##WHICH(calc_scale)) { \ for (m = 0 ; m < m_lim; ++m) { \ IADD_##WHICH(iterator[m], value[m]); \ } \ } \ else { \ for (m = 0 ; m < m_lim; ++m) { \ IADD_SCALE_##WHICH(iterator[m], value[m], calc_scale); \ } \ } \ } else ACC(REG, COMEX_ACC_DBL, double) ACC(REG, COMEX_ACC_FLT, float) ACC(REG, COMEX_ACC_INT, int) ACC(REG, COMEX_ACC_LNG, long) ACC(CPL, COMEX_ACC_DCP, DoubleComplex) ACC(CPL, COMEX_ACC_CPL, SingleComplex) { assert(0); } #undef ACC #undef EQ_ONE_REG #undef EQ_ONE_CPL #undef IADD_REG #undef IADD_CPL #undef IADD_SCALE_REG #undef IADD_SCALE_CPL comex_put((char *)l_state.acc_buf, (char *)dst_ptr + dst_idx, count[0], proc, group); } COMEXD_waitproc(proc); COMEXD_network_unlock(proc); if (sizetogetput > l_state.acc_buf_len) { comex_free_local(get_buf); } return COMEX_SUCCESS; } int comex_puts(void *src_ptr, int src_stride_ar[/*stride_levels*/], void *dst_ptr, int dst_stride_ar[/*stride_levels*/], int count[/*stride_levels+1*/], int stride_levels, int proc, comex_group_t group) { comex_nbputs(src_ptr, src_stride_ar, dst_ptr, dst_stride_ar, count,stride_levels,proc, group, NULL); COMEXD_waitproc(proc); return COMEX_SUCCESS; } int comex_gets(void *src_ptr, int src_stride_ar[/*stride_levels*/], void *dst_ptr, int dst_stride_ar[/*stride_levels*/], int count[/*stride_levels+1*/], int stride_levels, int proc, comex_group_t group) { comex_nbgets(src_ptr, src_stride_ar, dst_ptr, dst_stride_ar, count,stride_levels, proc, group, NULL); COMEXD_waitproc(proc); return COMEX_SUCCESS; } int comex_accs(int datatype, void *scale, void *src_ptr, int src_stride_ar[/*stride_levels*/], void *dst_ptr, int dst_stride_ar[/*stride_levels*/], int count[/*stride_levels+1*/], int stride_levels, int proc, comex_group_t group) { comex_nbaccs(datatype, scale, src_ptr, src_stride_ar, dst_ptr, dst_stride_ar, count, stride_levels, proc, group, NULL); COMEXD_waitproc(proc); return COMEX_SUCCESS; } ga-5-3/comex/configure.ac0000640005473000001440000001641112247204305014177 0ustar d3n000users# Process this file with autoconf to produce a configure script. ############################################################################### # Init autoconf ############################################################################### AC_PREREQ([2.67]) AC_INIT([Communication Runtime for Exascale (comex)], [1.0], [hpctools@pnl.gov], [comex], [http://www.emsl.pnl.gov/docs/global/]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_HEADER([config.h]) AC_CONFIG_LIBOBJ_DIR([compat]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR([src-common/comex.h]) ############################################################################### # Init automake ############################################################################### AM_INIT_AUTOMAKE([color-tests foreign parallel-tests silent-rules subdir-objects]) # Don't emit "rebuild rules" for configure, Makefile.ins, etc. AM_MAINTAINER_MODE ############################################################################### # Misc. information and package setup. ############################################################################### COMEX_WITH_HELP COMEX_TOP_BUILDDIR="`pwd`" cd "$srcdir" COMEX_TOP_SRCDIR="`pwd`" cd "$COMEX_TOP_BUILDDIR" AS_IF([test "$COMEX_TOP_BUILDDIR" != "$COMEX_TOP_SRCDIR"], [AC_MSG_NOTICE([Detected VPATH build])]) # We use the MPI compiler wrappers instead of the standard compilers. COMEX_WITH_MPI # In case users don't care whether MPI actually works during configure. COMEX_DISABLE_MPI_TESTS # ARMCI profiling layer COMEX_ENABLE_PROFILING_ARMCI ######################################### # C compiler ######################################## AC_MSG_NOTICE AC_MSG_NOTICE([C compiler]) AC_MSG_NOTICE COMEX_PROG_MPICC AC_USE_SYSTEM_EXTENSIONS AS_IF([test x$with_mpi_wrappers = xyes], [COMEX_MPI_UNWRAP], [COMEX_ARG_PARSE([with_mpi], [MPI_LIBS], [MPI_LDFLAGS], [MPI_CPPFLAGS])]) AS_CASE([$enable_mpi_tests], [yes],[COMEX_MPICC_TEST_LINK], [no], [COMEX_MPICC_TEST_COMPILE]) AM_CONDITIONAL([CROSS_COMPILING], [test "x$cross_compiling" = xyes]) # Establish the underlying network infrastructure (MPI, OFA, DMAPP, etc) COMEX_NETWORK_SETUP # Checks for C header files. AC_HEADER_ASSERT AC_HEADER_DIRENT AC_HEADER_STDBOOL AC_HEADER_STDC AC_HEADER_SYS_WAIT COMEX_CHECK_HEADERS([assert.h]) COMEX_CHECK_HEADERS([errno.h]) COMEX_CHECK_HEADERS([getopt.h]) COMEX_CHECK_HEADERS([math.h]) COMEX_CHECK_HEADERS([pthread.h]) COMEX_CHECK_HEADERS([semaphore.h]) COMEX_CHECK_HEADERS([stdint.h]) COMEX_CHECK_HEADERS([stdio.h]) COMEX_CHECK_HEADERS([stdlib.h]) COMEX_CHECK_HEADERS([string.h]) COMEX_CHECK_HEADERS([strings.h]) COMEX_CHECK_HEADERS([sys/time.h]) COMEX_CHECK_HEADERS([sys/types.h]) COMEX_CHECK_HEADERS([unistd.h]) # Checks for C typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE AC_C_RESTRICT AC_C_VOLATILE AC_TYPE_INT8_T AC_TYPE_INT16_T AC_TYPE_INT32_T AC_TYPE_INT64_T AC_TYPE_OFF_T AC_TYPE_PID_T AC_TYPE_SIZE_T AC_TYPE_UINT8_T AC_TYPE_UINT16_T AC_TYPE_UINT32_T AC_TYPE_UINT64_T AC_CHECK_TYPES([ptrdiff_t]) COMEX_FUNCTION COMEX_DISABLE_SYS_WEAK_ALIAS COMEX_SYS_WEAK_ALIAS # Checks for C type sizes. comex_save_LIBS="$LIBS"; LIBS="$LIBS $MPI_LIBS" comex_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $MPI_LDFLAGS" comex_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $MPI_CPPFLAGS" AC_CHECK_SIZEOF([MPI_Aint], [], [[#include ]]) LIBS="$comex_save_LIBS" LDFLAGS="$comex_save_LDFLAGS" CPPFLAGS="$comex_save_CPPFLAGS" AC_CHECK_SIZEOF([void*]) AC_CHECK_SIZEOF([char]) AC_CHECK_SIZEOF([short]) AC_CHECK_SIZEOF([int]) AC_CHECK_SIZEOF([long]) AC_CHECK_SIZEOF([long long]) AC_CHECK_SIZEOF([float]) AC_CHECK_SIZEOF([double]) # Checks for C library functions. AC_FUNC_MMAP COMEX_SEARCH_LIBS([sqrt], [m]) COMEX_SEARCH_LIBS([sem_open], [rt]) COMEX_CHECK_FUNCS([bzero]) COMEX_CHECK_FUNCS([gettimeofday]) COMEX_CHECK_FUNCS([memset]) COMEX_CHECK_FUNCS([munmap]) COMEX_CHECK_FUNCS([strchr]) COMEX_CHECK_FUNCS([strdup]) COMEX_CHECK_FUNCS([strncasecmp]) COMEX_CHECK_FUNCS([strstr]) # Checks for C libraries. COMEX_BLAS ############################################################################### # Checks for programs. ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([Checks for additional programs]) AC_MSG_NOTICE AC_PROG_GREP AC_PROG_SED ############################################################################### # Libtool setup -- no compiler/linker tests after this ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([Libtool setup]) AC_MSG_NOTICE # temporarily restore unwrapped compilers # this works around a bug where libtool sadly relies on matching compiler # names in order to determine features (Fortran only, I think) # libtool doesn't recognize MPI compiler names, nor should it AS_IF([test x$with_mpi_wrappers = xyes], [COMEX_MPI_UNWRAP_PUSH]) COMEX_AR LT_INIT([disable-shared]) # and now that that's over, put the MPI compilers back # also, the above hack incorrectly sets the base compiler as the linker AS_IF([test x$with_mpi_wrappers = xyes], [COMEX_MPI_UNWRAP_POP compiler="$CC" LTCC="$CC" lt_save_CC="$CC" compiler_DEFAULT="$CC"]) ############################################################################### # Test suite setup ############################################################################### AC_ARG_VAR([NPROCS], [number of procs to use for parallel tests (default 4)]) AS_IF([test "x$NPROCS" = x], [NPROCS=4]) AC_SUBST([NPROCS]) AC_ARG_VAR([MPIEXEC], [how to run parallel tests if built with MPI e.g. "mpiexec -np %NP%"]) AS_IF([test "x$MPIEXEC" = x], [AC_PATH_PROGS([MPIEXEC], [mpirun mpiexec]) MPIEXEC="$MPIEXEC -n %NP%"]) AC_SUBST([MPIEXEC]) ############################################################################### # The End ############################################################################### AC_CONFIG_FILES([Makefile]) AC_OUTPUT # Report on what we found. AC_MSG_NOTICE([]) AC_MSG_NOTICE([**************************************************************]) AC_MSG_NOTICE([ $PACKAGE_NAME configured as follows:]) AC_MSG_NOTICE([**************************************************************]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([ MPI_LIBS=$MPI_LIBS]) AC_MSG_NOTICE([ MPI_LDFLAGS=$MPI_LDFLAGS]) AC_MSG_NOTICE([ MPI_CPPFLAGS=$MPI_CPPFLAGS]) AC_MSG_NOTICE([ COMEX_NETWORK=$comex_network]) AC_MSG_NOTICE([ COMEX_NETWORK_LDFLAGS=$COMEX_NETWORK_LDFLAGS]) AC_MSG_NOTICE([ COMEX_NETWORK_LIBS=$COMEX_NETWORK_LIBS]) AC_MSG_NOTICE([COMEX_NETWORK_CPPFLAGS=$COMEX_NETWORK_CPPFLAGS]) AC_MSG_NOTICE([ CC=$CC]) AS_IF([test "x$with_mpi_wrappers" = xyes], [ AC_MSG_NOTICE([ unwrapped CC=$comex_cv_mpic_naked]) ]) AC_MSG_NOTICE([ CFLAGS=$CFLAGS]) AC_MSG_NOTICE([ CPP=$CPP]) AC_MSG_NOTICE([ CPPFLAGS=$CPPFLAGS]) AC_MSG_NOTICE([ LDFLAGS=$LDFLAGS]) AC_MSG_NOTICE([ LIBS=$LIBS]) AC_MSG_NOTICE([ FLIBS=$FLIBS]) AC_MSG_NOTICE([ AR=$AR]) AC_MSG_NOTICE([ AR_FLAGS=$AR_FLAGS]) AC_MSG_NOTICE([ DEFS=$DEFS]) AC_MSG_NOTICE([ SHELL=$SHELL]) AC_MSG_NOTICE([ MPIEXEC=$MPIEXEC]) AC_MSG_NOTICE([ NPROCS=$NPROCS]) AC_MSG_NOTICE([]) ga-5-3/comex/Makefile.in0000640005473000001440000020203712247206237013765 0ustar d3n000users# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## # Makefile.am for COMEX. # # Rationale: # This Makefile.am follows many of the suggestions outlined in the paper # "Recursive Make Considered Harmful". # # Additional targets: # Besides the traditional make targets supplied by Automake, we have added the # "checkprogs" target to build test programs. # VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = check_PROGRAMS = testing/perf$(EXEEXT) testing/perf_amo$(EXEEXT) \ testing/perf_contig$(EXEEXT) testing/perf_strided$(EXEEXT) \ testing/shift$(EXEEXT) testing/test$(EXEEXT) DIST_COMMON = $(am__configure_deps) $(am__include_HEADERS_DIST) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/config.h.in $(top_srcdir)/configure \ $(top_srcdir)/src-armci/Makefile.inc \ $(top_srcdir)/src-dmapp/Makefile.inc \ $(top_srcdir)/src-mpi/Makefile.inc \ $(top_srcdir)/src-ofa/Makefile.inc \ $(top_srcdir)/src-portals4/Makefile.inc build-aux/config.guess \ build-aux/config.sub build-aux/depcomp build-aux/install-sh \ build-aux/ltmain.sh build-aux/missing @COMEX_NETWORK_PORTALS4_TRUE@am__append_1 = src-portals4/comex.c \ @COMEX_NETWORK_PORTALS4_TRUE@ src-portals4/comex_impl.h \ @COMEX_NETWORK_PORTALS4_TRUE@ src-portals4/groups.c \ @COMEX_NETWORK_PORTALS4_TRUE@ src-portals4/groups.h @COMEX_NETWORK_PORTALS4_TRUE@am__append_2 = -I$(top_srcdir)/src-portals4 #libcomex_la_SOURCES += src-dmapp/clusterinfo.c #libcomex_la_SOURCES += src-dmapp/clusterinfo.h @COMEX_NETWORK_DMAPP_TRUE@am__append_3 = src-dmapp/comex.c \ @COMEX_NETWORK_DMAPP_TRUE@ src-dmapp/comex_impl.h \ @COMEX_NETWORK_DMAPP_TRUE@ src-dmapp/groups.c \ @COMEX_NETWORK_DMAPP_TRUE@ src-dmapp/groups.h \ @COMEX_NETWORK_DMAPP_TRUE@ src-dmapp/reg_cache.c \ @COMEX_NETWORK_DMAPP_TRUE@ src-dmapp/reg_cache.h @COMEX_NETWORK_DMAPP_TRUE@am__append_4 = -I$(top_srcdir)/src-dmapp @COMEX_NETWORK_OFA_TRUE@am__append_5 = src-ofa/comex.c \ @COMEX_NETWORK_OFA_TRUE@ src-ofa/comex_impl.h src-ofa/contig.c \ @COMEX_NETWORK_OFA_TRUE@ src-ofa/device.c src-ofa/device.h \ @COMEX_NETWORK_OFA_TRUE@ src-ofa/fence.c src-ofa/gpa.c \ @COMEX_NETWORK_OFA_TRUE@ src-ofa/groups.c src-ofa/groups.h \ @COMEX_NETWORK_OFA_TRUE@ src-ofa/mutex.c src-ofa/openib.c \ @COMEX_NETWORK_OFA_TRUE@ src-ofa/openib.h src-ofa/reg_cache.c \ @COMEX_NETWORK_OFA_TRUE@ src-ofa/reg_cache.h src-ofa/strided.c \ @COMEX_NETWORK_OFA_TRUE@ src-ofa/vector.c src-ofa/wait.c @COMEX_NETWORK_OFA_TRUE@am__append_6 = -I$(top_srcdir)/src-ofa @COMEX_NETWORK_MPI_TS_TRUE@am__append_7 = src-mpi/comex.c \ @COMEX_NETWORK_MPI_TS_TRUE@ src-mpi/comex_impl.h \ @COMEX_NETWORK_MPI_TS_TRUE@ src-mpi/groups.c src-mpi/groups.h @COMEX_NETWORK_MPI_TS_TRUE@am__append_8 = -I$(top_srcdir)/src-mpi ############################################################################## # src-portals4 # ############################################################################## # src-dmapp # ############################################################################## # src-ofa # ############################################################################## # src-mpi # ############################################################################## # src-armci # ############################################################################## # profiling # @ENABLE_PROFILING_ARMCI_TRUE@am__append_9 = -I$(top_srcdir)/src-armci @ENABLE_PROFILING_ARMCI_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@am__append_10 = libarmci_prof.la @ENABLE_PROFILING_ARMCI_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@am__append_11 = src-armci/capi.c @ENABLE_PROFILING_ARMCI_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE@am__append_12 = tools/armci_prof.c @ENABLE_PROFILING_ARMCI_FALSE@am__append_13 = src-armci/capi.c @ENABLE_PROFILING_ARMCI_FALSE@am__append_14 = src-armci/parmci.h TESTS = $(am__EXEEXT_2) $(PARALLEL_TESTS) XFAIL_TESTS = $(am__EXEEXT_2) $(am__EXEEXT_2) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_sys_weak_alias.m4 \ $(top_srcdir)/m4/comex_ar.m4 \ $(top_srcdir)/m4/comex_arg_parse.m4 \ $(top_srcdir)/m4/comex_blas.m4 \ $(top_srcdir)/m4/comex_check_func.m4 \ $(top_srcdir)/m4/comex_check_header.m4 \ $(top_srcdir)/m4/comex_enable_profile.m4 \ $(top_srcdir)/m4/comex_function.m4 \ $(top_srcdir)/m4/comex_mpi_test_disable.m4 \ $(top_srcdir)/m4/comex_mpi_unwrap.m4 \ $(top_srcdir)/m4/comex_mpicc.m4 \ $(top_srcdir)/m4/comex_mpicc_test.m4 \ $(top_srcdir)/m4/comex_network_setup.m4 \ $(top_srcdir)/m4/comex_sys_weak_alias.m4 \ $(top_srcdir)/m4/comex_with_help.m4 \ $(top_srcdir)/m4/comex_with_mpi.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/lt_obsolete.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) libarmci_la_DEPENDENCIES = libcomexi.la am__libarmci_la_SOURCES_DIST = src-armci/armci.c src-armci/groups.c \ src-armci/message.c src-armci/iterator.c src-armci/iterator.h \ src-armci/capi.c tools/armci_prof.c am__dirstamp = $(am__leading_dot)dirstamp @ENABLE_PROFILING_ARMCI_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@am__objects_1 = src-armci/capi.lo @ENABLE_PROFILING_ARMCI_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE@am__objects_2 = tools/armci_prof.lo @ENABLE_PROFILING_ARMCI_FALSE@am__objects_3 = src-armci/capi.lo am_libarmci_la_OBJECTS = src-armci/armci.lo src-armci/groups.lo \ src-armci/message.lo src-armci/iterator.lo $(am__objects_1) \ $(am__objects_2) $(am__objects_3) libarmci_la_OBJECTS = $(am_libarmci_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent libarmci_prof_la_LIBADD = am__libarmci_prof_la_SOURCES_DIST = tools/armci_prof.c @ENABLE_PROFILING_ARMCI_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@am_libarmci_prof_la_OBJECTS = tools/armci_prof.lo libarmci_prof_la_OBJECTS = $(am_libarmci_prof_la_OBJECTS) @ENABLE_PROFILING_ARMCI_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@am_libarmci_prof_la_rpath = -rpath \ @ENABLE_PROFILING_ARMCI_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@ $(libdir) libarmcii_la_LIBADD = am__libarmcii_la_SOURCES_DIST = src-armci/armci.c src-armci/groups.c \ src-armci/message.c src-armci/iterator.c src-armci/iterator.h \ src-armci/capi.c tools/armci_prof.c am__objects_4 = src-armci/armci.lo src-armci/groups.lo \ src-armci/message.lo src-armci/iterator.lo $(am__objects_1) \ $(am__objects_2) $(am__objects_3) am_libarmcii_la_OBJECTS = $(am__objects_4) libarmcii_la_OBJECTS = $(am_libarmcii_la_OBJECTS) am__DEPENDENCIES_1 = libcomex_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am__libcomex_la_SOURCES_DIST = src-portals4/comex.c \ src-portals4/comex_impl.h src-portals4/groups.c \ src-portals4/groups.h src-dmapp/comex.c src-dmapp/comex_impl.h \ src-dmapp/groups.c src-dmapp/groups.h src-dmapp/reg_cache.c \ src-dmapp/reg_cache.h src-ofa/comex.c src-ofa/comex_impl.h \ src-ofa/contig.c src-ofa/device.c src-ofa/device.h \ src-ofa/fence.c src-ofa/gpa.c src-ofa/groups.c \ src-ofa/groups.h src-ofa/mutex.c src-ofa/openib.c \ src-ofa/openib.h src-ofa/reg_cache.c src-ofa/reg_cache.h \ src-ofa/strided.c src-ofa/vector.c src-ofa/wait.c \ src-mpi/comex.c src-mpi/comex_impl.h src-mpi/groups.c \ src-mpi/groups.h @COMEX_NETWORK_PORTALS4_TRUE@am__objects_5 = src-portals4/comex.lo \ @COMEX_NETWORK_PORTALS4_TRUE@ src-portals4/groups.lo @COMEX_NETWORK_DMAPP_TRUE@am__objects_6 = src-dmapp/comex.lo \ @COMEX_NETWORK_DMAPP_TRUE@ src-dmapp/groups.lo \ @COMEX_NETWORK_DMAPP_TRUE@ src-dmapp/reg_cache.lo @COMEX_NETWORK_OFA_TRUE@am__objects_7 = src-ofa/comex.lo \ @COMEX_NETWORK_OFA_TRUE@ src-ofa/contig.lo src-ofa/device.lo \ @COMEX_NETWORK_OFA_TRUE@ src-ofa/fence.lo src-ofa/gpa.lo \ @COMEX_NETWORK_OFA_TRUE@ src-ofa/groups.lo src-ofa/mutex.lo \ @COMEX_NETWORK_OFA_TRUE@ src-ofa/openib.lo src-ofa/reg_cache.lo \ @COMEX_NETWORK_OFA_TRUE@ src-ofa/strided.lo src-ofa/vector.lo \ @COMEX_NETWORK_OFA_TRUE@ src-ofa/wait.lo @COMEX_NETWORK_MPI_TS_TRUE@am__objects_8 = src-mpi/comex.lo \ @COMEX_NETWORK_MPI_TS_TRUE@ src-mpi/groups.lo am_libcomex_la_OBJECTS = $(am__objects_5) $(am__objects_6) \ $(am__objects_7) $(am__objects_8) libcomex_la_OBJECTS = $(am_libcomex_la_OBJECTS) libcomexi_la_LIBADD = am__libcomexi_la_SOURCES_DIST = src-portals4/comex.c \ src-portals4/comex_impl.h src-portals4/groups.c \ src-portals4/groups.h src-dmapp/comex.c src-dmapp/comex_impl.h \ src-dmapp/groups.c src-dmapp/groups.h src-dmapp/reg_cache.c \ src-dmapp/reg_cache.h src-ofa/comex.c src-ofa/comex_impl.h \ src-ofa/contig.c src-ofa/device.c src-ofa/device.h \ src-ofa/fence.c src-ofa/gpa.c src-ofa/groups.c \ src-ofa/groups.h src-ofa/mutex.c src-ofa/openib.c \ src-ofa/openib.h src-ofa/reg_cache.c src-ofa/reg_cache.h \ src-ofa/strided.c src-ofa/vector.c src-ofa/wait.c \ src-mpi/comex.c src-mpi/comex_impl.h src-mpi/groups.c \ src-mpi/groups.h am__objects_9 = $(am__objects_5) $(am__objects_6) $(am__objects_7) \ $(am__objects_8) am_libcomexi_la_OBJECTS = $(am__objects_9) libcomexi_la_OBJECTS = $(am_libcomexi_la_OBJECTS) PROGRAMS = $(bin_PROGRAMS) LIBOBJDIR = compat/ am_testing_perf_OBJECTS = testing/perf.$(OBJEXT) testing_perf_OBJECTS = $(am_testing_perf_OBJECTS) testing_perf_LDADD = $(LDADD) testing_perf_DEPENDENCIES = libcomex.la $(LTLIBOBJS) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_testing_perf_amo_OBJECTS = testing/perf_amo.$(OBJEXT) testing_perf_amo_OBJECTS = $(am_testing_perf_amo_OBJECTS) testing_perf_amo_LDADD = $(LDADD) testing_perf_amo_DEPENDENCIES = libcomex.la $(LTLIBOBJS) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_testing_perf_contig_OBJECTS = testing/perf_contig.$(OBJEXT) testing_perf_contig_OBJECTS = $(am_testing_perf_contig_OBJECTS) testing_perf_contig_LDADD = $(LDADD) testing_perf_contig_DEPENDENCIES = libcomex.la $(LTLIBOBJS) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_testing_perf_strided_OBJECTS = testing/perf_strided.$(OBJEXT) testing_perf_strided_OBJECTS = $(am_testing_perf_strided_OBJECTS) testing_perf_strided_LDADD = $(LDADD) testing_perf_strided_DEPENDENCIES = libcomex.la $(LTLIBOBJS) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_testing_shift_OBJECTS = testing/shift.$(OBJEXT) testing_shift_OBJECTS = $(am_testing_shift_OBJECTS) testing_shift_LDADD = $(LDADD) testing_shift_DEPENDENCIES = libcomex.la $(LTLIBOBJS) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_testing_test_OBJECTS = testing/test.$(OBJEXT) testing_test_OBJECTS = $(am_testing_test_OBJECTS) testing_test_LDADD = $(LDADD) testing_test_DEPENDENCIES = libcomex.la $(LTLIBOBJS) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libarmci_la_SOURCES) $(libarmci_prof_la_SOURCES) \ $(libarmcii_la_SOURCES) $(libcomex_la_SOURCES) \ $(libcomexi_la_SOURCES) $(testing_perf_SOURCES) \ $(testing_perf_amo_SOURCES) $(testing_perf_contig_SOURCES) \ $(testing_perf_strided_SOURCES) $(testing_shift_SOURCES) \ $(testing_test_SOURCES) DIST_SOURCES = $(am__libarmci_la_SOURCES_DIST) \ $(am__libarmci_prof_la_SOURCES_DIST) \ $(am__libarmcii_la_SOURCES_DIST) \ $(am__libcomex_la_SOURCES_DIST) \ $(am__libcomexi_la_SOURCES_DIST) $(testing_perf_SOURCES) \ $(testing_perf_amo_SOURCES) $(testing_perf_contig_SOURCES) \ $(testing_perf_strided_SOURCES) $(testing_shift_SOURCES) \ $(testing_test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__include_HEADERS_DIST = $(top_srcdir)/src-common/comex.h \ src-armci/armci.h src-armci/message.h src-armci/parmci.h HEADERS = $(include_HEADERS) ETAGS = etags CTAGS = ctags # If stdout is a non-dumb tty, use colors. If test -t is not supported, # then this fails; a conservative approach. Of course do not redirect # stdout here, just stderr. am__tty_colors = \ red=; grn=; lgn=; blu=; std=; \ test "X$(AM_COLOR_TESTS)" != Xno \ && test "X$$TERM" != Xdumb \ && { test "X$(AM_COLOR_TESTS)" = Xalways || test -t 1 2>/dev/null; } \ && { \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ std=''; \ } # Restructured Text title and section. am__rst_title = sed 's/.*/ & /;h;s/./=/g;p;x;p;g;p;s/.*//' am__rst_section = sed 'p;s/./=/g;p;g' # Put stdin (possibly several lines separated by ". ") in a box. # Prefix each line by 'col' and terminate each with 'std', for coloring. # Multi line coloring is problematic with "less -R", so we really need # to color each line individually. am__text_box = $(AWK) '{ \ n = split($$0, lines, "\\. "); max = 0; \ for (i = 1; i <= n; ++i) \ if (max < length(lines[i])) \ max = length(lines[i]); \ for (i = 0; i < max; ++i) \ line = line "="; \ print col line std; \ for (i = 1; i <= n; ++i) \ if (lines[i]) \ print col lines[i] std; \ print col line std; \ }' # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log, and passes # TESTS_ENVIRONMENT. Save and restore TERM around use of # TESTS_ENVIRONMENT, in case that unsets it. am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ srcdir=$(srcdir); export srcdir; \ rm -f $@-t; \ am__trap='rm -f '\''$(abs_builddir)/$@-t'\''; (exit $$st); exit $$st'; \ trap "st=129; $$am__trap" 1; trap "st=130; $$am__trap" 2; \ trap "st=141; $$am__trap" 13; trap "st=143; $$am__trap" 15; \ am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`; \ test "x$$am__odir" = x. || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; __SAVED_TERM=$$TERM; \ $(TESTS_ENVIRONMENT) # To be appended to the command running the test. Handle the stdout # and stderr redirection, and catch the exit status. am__check_post = \ >$@-t 2>&1; \ estatus=$$?; \ if test -n '$(DISABLE_HARD_ERRORS)' \ && test $$estatus -eq 99; then \ estatus=1; \ fi; \ TERM=$$__SAVED_TERM; export TERM; \ $(am__tty_colors); \ xfailed=PASS; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ xfailed=XFAIL;; \ esac; \ case $$estatus.$$xfailed in \ 0.XFAIL) col=$$red; res=XPASS;; \ 0.*) col=$$grn; res=PASS ;; \ 77.*) col=$$blu; res=SKIP ;; \ 99.*) col=$$red; res=FAIL ;; \ *.XFAIL) col=$$lgn; res=XFAIL;; \ *.*) col=$$red; res=FAIL ;; \ esac; \ echo "$${col}$$res$${std}: $$f"; \ echo "$$res: $$f (exit: $$estatus)" | \ $(am__rst_section) >$@; \ cat $@-t >>$@; \ rm -f $@-t RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck check-html recheck-html TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html) am__EXEEXT_1 = am__EXEEXT_2 = $(am__EXEEXT_1) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) TEST_LOGS_TMP = $(TEST_LOGS:.log=.log-t) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLAS_CPPFLAGS = @BLAS_CPPFLAGS@ BLAS_LDFLAGS = @BLAS_LDFLAGS@ BLAS_LIBS = @BLAS_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COMEX_NETWORK_CPPFLAGS = @COMEX_NETWORK_CPPFLAGS@ COMEX_NETWORK_LDFLAGS = @COMEX_NETWORK_LDFLAGS@ COMEX_NETWORK_LIBS = @COMEX_NETWORK_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MPICC = @MPICC@ MPIEXEC = @MPIEXEC@ MPI_CPPFLAGS = @MPI_CPPFLAGS@ MPI_LDFLAGS = @MPI_LDFLAGS@ MPI_LIBS = @MPI_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ NPROCS = @NPROCS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # The usual aclocal nonsense to get include paths right. ACLOCAL_AMFLAGS = -I m4 # All public headers, installed programs, test programs, and example programs # are listed in these variables. Appended to throughout. These are the # automake variables used. include_HEADERS = $(top_srcdir)/src-common/comex.h src-armci/armci.h \ src-armci/message.h $(am__append_14) check_LTLIBRARIES = lib_LTLIBRARIES = libcomex.la libarmci.la $(am__append_10) # internal libcomex for possibly rolling up into other libraries noinst_LTLIBRARIES = libcomexi.la libarmcii.la EXTRA_DIST = README BUILT_SOURCES = MOSTLYCLEANFILES = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = AM_CFLAGS = AM_CPPFLAGS = $(MPI_CPPFLAGS) $(COMEX_NETWORK_CPPFLAGS) \ $(BLAS_CPPFLAGS) -I$(top_srcdir)/src-common $(am__append_2) \ $(am__append_4) $(am__append_6) $(am__append_8) \ $(am__append_9) AM_LDFLAGS = $(MPI_LDFLAGS) $(COMEX_NETWORK_LDFLAGS) $(BLAS_LDFLAGS) LDADD = libcomex.la $(LTLIBOBJS) $(MPI_LIBS) $(COMEX_NETWORK_LIBS) \ $(BLAS_LIBS) # later Makefile fragments append to this libcomex_la_SOURCES = $(am__append_1) $(am__append_3) $(am__append_5) \ $(am__append_7) libcomex_la_LIBADD = $(MPI_LIBS) $(COMEX_NETWORK_LIBS) libcomexi_la_SOURCES = $(libcomex_la_SOURCES) ############################################################################## # compiler and linker flags # # Important for external tools wanting to know how to link to COMEX. SED_NORMALIZE_WHITESPACE = $(SED) 's/ [ ]*/ /g;s/" /"/g;s/ "/"/g' libarmci_la_SOURCES = src-armci/armci.c src-armci/groups.c \ src-armci/message.c src-armci/iterator.c src-armci/iterator.h \ $(am__append_11) $(am__append_12) $(am__append_13) libarmci_la_LIBADD = libcomexi.la libarmcii_la_SOURCES = $(libarmci_la_SOURCES) @ENABLE_PROFILING_ARMCI_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@libarmci_prof_la_SOURCES = tools/armci_prof.c COMEX_SERIAL_TESTS = COMEX_SERIAL_TESTS_XFAIL = COMEX_PARALLEL_TESTS = testing/perf$(EXEEXT) testing/perf_amo$(EXEEXT) \ testing/perf_contig$(EXEEXT) testing/perf_strided$(EXEEXT) \ testing/shift$(EXEEXT) testing/test$(EXEEXT) COMEX_PARALLEL_TESTS_XFAIL = COMEX_TESTS = $(COMEX_SERIAL_TESTS) $(COMEX_PARALLEL_TESTS) COMEX_TESTS_XFAIL = $(COMEX_SERIAL_TESTS_XFAIL) $(COMEX_PARALLEL_TESTS_XFAIL) testing_perf_SOURCES = testing/perf.c testing_perf_amo_SOURCES = testing/perf_amo.c testing_perf_contig_SOURCES = testing/perf_contig.c testing_perf_strided_SOURCES = testing/perf_strided.c testing_shift_SOURCES = testing/shift.c testing_test_SOURCES = testing/test.c # support verbose/silent make rules for additional programs # sed SED_V = $(SED__v_$(V)) SED__v_ = $(SED__v_$(AM_DEFAULT_VERBOSITY)) SED__v_0 = @echo " SED " $@; ############################################################################## # test suite # # Some tests were commented out either because they required an input file or # they were failing for unknown reasons and we didn't want to further debug. # SERIAL_TESTS = $(COMEX_SERIAL_TESTS) SERIAL_TESTS_XFAIL = $(COMEX_SERIAL_TESTS_XFAIL) PARALLEL_TESTS = $(COMEX_PARALLEL_TESTS) PARALLEL_TESTS_XFAIL = $(COMEX_PARALLEL_TESTS_XFAIL) @CROSS_COMPILING_TRUE@maybe_mpiexec = `if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo "$(MPIEXEC)" | $(SED) 's/%NP%/1/'; else echo "$(MPIEXEC)" | $(SED) 's/%NP%/$(NPROCS)/'; fi`; eval $$maybe_mpiexec @CROSS_COMPILING_FALSE@LOG_COMPILER = \ @CROSS_COMPILING_FALSE@maybe_mpiexec=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo ""; else if echo "$(MPIEXEC)" | $(GREP) "%NP%" > /dev/null; then echo "$(MPIEXEC)" | $(SED) 's/%NP%/$(NPROCS)/'; else echo "$(MPIEXEC)"; fi; fi`; eval $$maybe_mpiexec all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .html .lo .log .o .obj .test .test$(EXEEXT) am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/src-portals4/Makefile.inc $(top_srcdir)/src-dmapp/Makefile.inc $(top_srcdir)/src-ofa/Makefile.inc $(top_srcdir)/src-mpi/Makefile.inc $(top_srcdir)/src-armci/Makefile.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/src-portals4/Makefile.inc $(top_srcdir)/src-dmapp/Makefile.inc $(top_srcdir)/src-ofa/Makefile.inc $(top_srcdir)/src-mpi/Makefile.inc $(top_srcdir)/src-armci/Makefile.inc: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 clean-checkLTLIBRARIES: -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) @list='$(check_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done src-armci/$(am__dirstamp): @$(MKDIR_P) src-armci @: > src-armci/$(am__dirstamp) src-armci/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src-armci/$(DEPDIR) @: > src-armci/$(DEPDIR)/$(am__dirstamp) src-armci/armci.lo: src-armci/$(am__dirstamp) \ src-armci/$(DEPDIR)/$(am__dirstamp) src-armci/groups.lo: src-armci/$(am__dirstamp) \ src-armci/$(DEPDIR)/$(am__dirstamp) src-armci/message.lo: src-armci/$(am__dirstamp) \ src-armci/$(DEPDIR)/$(am__dirstamp) src-armci/iterator.lo: src-armci/$(am__dirstamp) \ src-armci/$(DEPDIR)/$(am__dirstamp) src-armci/capi.lo: src-armci/$(am__dirstamp) \ src-armci/$(DEPDIR)/$(am__dirstamp) tools/$(am__dirstamp): @$(MKDIR_P) tools @: > tools/$(am__dirstamp) tools/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) tools/$(DEPDIR) @: > tools/$(DEPDIR)/$(am__dirstamp) tools/armci_prof.lo: tools/$(am__dirstamp) \ tools/$(DEPDIR)/$(am__dirstamp) libarmci.la: $(libarmci_la_OBJECTS) $(libarmci_la_DEPENDENCIES) $(EXTRA_libarmci_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) -rpath $(libdir) $(libarmci_la_OBJECTS) $(libarmci_la_LIBADD) $(LIBS) libarmci_prof.la: $(libarmci_prof_la_OBJECTS) $(libarmci_prof_la_DEPENDENCIES) $(EXTRA_libarmci_prof_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_libarmci_prof_la_rpath) $(libarmci_prof_la_OBJECTS) $(libarmci_prof_la_LIBADD) $(LIBS) libarmcii.la: $(libarmcii_la_OBJECTS) $(libarmcii_la_DEPENDENCIES) $(EXTRA_libarmcii_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libarmcii_la_OBJECTS) $(libarmcii_la_LIBADD) $(LIBS) src-portals4/$(am__dirstamp): @$(MKDIR_P) src-portals4 @: > src-portals4/$(am__dirstamp) src-portals4/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src-portals4/$(DEPDIR) @: > src-portals4/$(DEPDIR)/$(am__dirstamp) src-portals4/comex.lo: src-portals4/$(am__dirstamp) \ src-portals4/$(DEPDIR)/$(am__dirstamp) src-portals4/groups.lo: src-portals4/$(am__dirstamp) \ src-portals4/$(DEPDIR)/$(am__dirstamp) src-dmapp/$(am__dirstamp): @$(MKDIR_P) src-dmapp @: > src-dmapp/$(am__dirstamp) src-dmapp/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src-dmapp/$(DEPDIR) @: > src-dmapp/$(DEPDIR)/$(am__dirstamp) src-dmapp/comex.lo: src-dmapp/$(am__dirstamp) \ src-dmapp/$(DEPDIR)/$(am__dirstamp) src-dmapp/groups.lo: src-dmapp/$(am__dirstamp) \ src-dmapp/$(DEPDIR)/$(am__dirstamp) src-dmapp/reg_cache.lo: src-dmapp/$(am__dirstamp) \ src-dmapp/$(DEPDIR)/$(am__dirstamp) src-ofa/$(am__dirstamp): @$(MKDIR_P) src-ofa @: > src-ofa/$(am__dirstamp) src-ofa/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src-ofa/$(DEPDIR) @: > src-ofa/$(DEPDIR)/$(am__dirstamp) src-ofa/comex.lo: src-ofa/$(am__dirstamp) \ src-ofa/$(DEPDIR)/$(am__dirstamp) src-ofa/contig.lo: src-ofa/$(am__dirstamp) \ src-ofa/$(DEPDIR)/$(am__dirstamp) src-ofa/device.lo: src-ofa/$(am__dirstamp) \ src-ofa/$(DEPDIR)/$(am__dirstamp) src-ofa/fence.lo: src-ofa/$(am__dirstamp) \ src-ofa/$(DEPDIR)/$(am__dirstamp) src-ofa/gpa.lo: src-ofa/$(am__dirstamp) \ src-ofa/$(DEPDIR)/$(am__dirstamp) src-ofa/groups.lo: src-ofa/$(am__dirstamp) \ src-ofa/$(DEPDIR)/$(am__dirstamp) src-ofa/mutex.lo: src-ofa/$(am__dirstamp) \ src-ofa/$(DEPDIR)/$(am__dirstamp) src-ofa/openib.lo: src-ofa/$(am__dirstamp) \ src-ofa/$(DEPDIR)/$(am__dirstamp) src-ofa/reg_cache.lo: src-ofa/$(am__dirstamp) \ src-ofa/$(DEPDIR)/$(am__dirstamp) src-ofa/strided.lo: src-ofa/$(am__dirstamp) \ src-ofa/$(DEPDIR)/$(am__dirstamp) src-ofa/vector.lo: src-ofa/$(am__dirstamp) \ src-ofa/$(DEPDIR)/$(am__dirstamp) src-ofa/wait.lo: src-ofa/$(am__dirstamp) \ src-ofa/$(DEPDIR)/$(am__dirstamp) src-mpi/$(am__dirstamp): @$(MKDIR_P) src-mpi @: > src-mpi/$(am__dirstamp) src-mpi/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src-mpi/$(DEPDIR) @: > src-mpi/$(DEPDIR)/$(am__dirstamp) src-mpi/comex.lo: src-mpi/$(am__dirstamp) \ src-mpi/$(DEPDIR)/$(am__dirstamp) src-mpi/groups.lo: src-mpi/$(am__dirstamp) \ src-mpi/$(DEPDIR)/$(am__dirstamp) libcomex.la: $(libcomex_la_OBJECTS) $(libcomex_la_DEPENDENCIES) $(EXTRA_libcomex_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) -rpath $(libdir) $(libcomex_la_OBJECTS) $(libcomex_la_LIBADD) $(LIBS) libcomexi.la: $(libcomexi_la_OBJECTS) $(libcomexi_la_DEPENDENCIES) $(EXTRA_libcomexi_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libcomexi_la_OBJECTS) $(libcomexi_la_LIBADD) $(LIBS) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list testing/$(am__dirstamp): @$(MKDIR_P) testing @: > testing/$(am__dirstamp) testing/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) testing/$(DEPDIR) @: > testing/$(DEPDIR)/$(am__dirstamp) testing/perf.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/perf$(EXEEXT): $(testing_perf_OBJECTS) $(testing_perf_DEPENDENCIES) $(EXTRA_testing_perf_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/perf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_perf_OBJECTS) $(testing_perf_LDADD) $(LIBS) testing/perf_amo.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/perf_amo$(EXEEXT): $(testing_perf_amo_OBJECTS) $(testing_perf_amo_DEPENDENCIES) $(EXTRA_testing_perf_amo_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/perf_amo$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_perf_amo_OBJECTS) $(testing_perf_amo_LDADD) $(LIBS) testing/perf_contig.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/perf_contig$(EXEEXT): $(testing_perf_contig_OBJECTS) $(testing_perf_contig_DEPENDENCIES) $(EXTRA_testing_perf_contig_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/perf_contig$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_perf_contig_OBJECTS) $(testing_perf_contig_LDADD) $(LIBS) testing/perf_strided.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/perf_strided$(EXEEXT): $(testing_perf_strided_OBJECTS) $(testing_perf_strided_DEPENDENCIES) $(EXTRA_testing_perf_strided_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/perf_strided$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_perf_strided_OBJECTS) $(testing_perf_strided_LDADD) $(LIBS) testing/shift.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/shift$(EXEEXT): $(testing_shift_OBJECTS) $(testing_shift_DEPENDENCIES) $(EXTRA_testing_shift_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/shift$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_shift_OBJECTS) $(testing_shift_LDADD) $(LIBS) testing/test.$(OBJEXT): testing/$(am__dirstamp) \ testing/$(DEPDIR)/$(am__dirstamp) testing/test$(EXEEXT): $(testing_test_OBJECTS) $(testing_test_DEPENDENCIES) $(EXTRA_testing_test_DEPENDENCIES) testing/$(am__dirstamp) @rm -f testing/test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testing_test_OBJECTS) $(testing_test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f src-armci/armci.$(OBJEXT) -rm -f src-armci/armci.lo -rm -f src-armci/capi.$(OBJEXT) -rm -f src-armci/capi.lo -rm -f src-armci/groups.$(OBJEXT) -rm -f src-armci/groups.lo -rm -f src-armci/iterator.$(OBJEXT) -rm -f src-armci/iterator.lo -rm -f src-armci/message.$(OBJEXT) -rm -f src-armci/message.lo -rm -f src-dmapp/comex.$(OBJEXT) -rm -f src-dmapp/comex.lo -rm -f src-dmapp/groups.$(OBJEXT) -rm -f src-dmapp/groups.lo -rm -f src-dmapp/reg_cache.$(OBJEXT) -rm -f src-dmapp/reg_cache.lo -rm -f src-mpi/comex.$(OBJEXT) -rm -f src-mpi/comex.lo -rm -f src-mpi/groups.$(OBJEXT) -rm -f src-mpi/groups.lo -rm -f src-ofa/comex.$(OBJEXT) -rm -f src-ofa/comex.lo -rm -f src-ofa/contig.$(OBJEXT) -rm -f src-ofa/contig.lo -rm -f src-ofa/device.$(OBJEXT) -rm -f src-ofa/device.lo -rm -f src-ofa/fence.$(OBJEXT) -rm -f src-ofa/fence.lo -rm -f src-ofa/gpa.$(OBJEXT) -rm -f src-ofa/gpa.lo -rm -f src-ofa/groups.$(OBJEXT) -rm -f src-ofa/groups.lo -rm -f src-ofa/mutex.$(OBJEXT) -rm -f src-ofa/mutex.lo -rm -f src-ofa/openib.$(OBJEXT) -rm -f src-ofa/openib.lo -rm -f src-ofa/reg_cache.$(OBJEXT) -rm -f src-ofa/reg_cache.lo -rm -f src-ofa/strided.$(OBJEXT) -rm -f src-ofa/strided.lo -rm -f src-ofa/vector.$(OBJEXT) -rm -f src-ofa/vector.lo -rm -f src-ofa/wait.$(OBJEXT) -rm -f src-ofa/wait.lo -rm -f src-portals4/comex.$(OBJEXT) -rm -f src-portals4/comex.lo -rm -f src-portals4/groups.$(OBJEXT) -rm -f src-portals4/groups.lo -rm -f testing/perf.$(OBJEXT) -rm -f testing/perf_amo.$(OBJEXT) -rm -f testing/perf_contig.$(OBJEXT) -rm -f testing/perf_strided.$(OBJEXT) -rm -f testing/shift.$(OBJEXT) -rm -f testing/test.$(OBJEXT) -rm -f tools/armci_prof.$(OBJEXT) -rm -f tools/armci_prof.lo distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@src-armci/$(DEPDIR)/armci.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-armci/$(DEPDIR)/capi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-armci/$(DEPDIR)/groups.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-armci/$(DEPDIR)/iterator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-armci/$(DEPDIR)/message.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-dmapp/$(DEPDIR)/comex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-dmapp/$(DEPDIR)/groups.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-dmapp/$(DEPDIR)/reg_cache.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-mpi/$(DEPDIR)/comex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-mpi/$(DEPDIR)/groups.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-ofa/$(DEPDIR)/comex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-ofa/$(DEPDIR)/contig.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-ofa/$(DEPDIR)/device.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-ofa/$(DEPDIR)/fence.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-ofa/$(DEPDIR)/gpa.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-ofa/$(DEPDIR)/groups.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-ofa/$(DEPDIR)/mutex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-ofa/$(DEPDIR)/openib.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-ofa/$(DEPDIR)/reg_cache.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-ofa/$(DEPDIR)/strided.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-ofa/$(DEPDIR)/vector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-ofa/$(DEPDIR)/wait.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals4/$(DEPDIR)/comex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src-portals4/$(DEPDIR)/groups.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/perf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/perf_amo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/perf_contig.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/perf_strided.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/shift.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@testing/$(DEPDIR)/test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tools/$(DEPDIR)/armci_prof.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf src-armci/.libs src-armci/_libs -rm -rf src-dmapp/.libs src-dmapp/_libs -rm -rf src-mpi/.libs src-mpi/_libs -rm -rf src-ofa/.libs src-ofa/_libs -rm -rf src-portals4/.libs src-portals4/_libs -rm -rf testing/.libs testing/_libs -rm -rf tools/.libs tools/_libs distclean-libtool: -rm -f libtool config.lt install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__sh_e_setup); \ list='$(TEST_LOGS)'; \ results=`for f in $$list; do \ test -r $$f && read line < $$f && echo "$$line" \ || echo FAIL; \ done`; \ all=`echo "$$results" | sed '/^$$/d' | wc -l | sed -e 's/^[ ]*//'`; \ fail=`echo "$$results" | grep -c '^FAIL'`; \ pass=`echo "$$results" | grep -c '^PASS'`; \ skip=`echo "$$results" | grep -c '^SKIP'`; \ xfail=`echo "$$results" | grep -c '^XFAIL'`; \ xpass=`echo "$$results" | grep -c '^XPASS'`; \ failures=`expr $$fail + $$xpass`; \ all=`expr $$all - $$skip`; \ if test "$$all" -eq 1; then tests=test; All=; \ else tests=tests; All="All "; fi; \ case fail=$$fail:xpass=$$xpass:xfail=$$xfail in \ fail=0:xpass=0:xfail=0) \ msg="$$All$$all $$tests passed. "; \ exit=true;; \ fail=0:xpass=0:xfail=*) \ msg="$$All$$all $$tests behaved as expected"; \ if test "$$xfail" -eq 1; then xfailures=failure; \ else xfailures=failures; fi; \ msg="$$msg ($$xfail expected $$xfailures). "; \ exit=true;; \ fail=*:xpass=0:xfail=*) \ msg="$$fail of $$all $$tests failed. "; \ exit=false;; \ fail=*:xpass=*:xfail=*) \ msg="$$failures of $$all $$tests did not behave as expected"; \ if test "$$xpass" -eq 1; then xpasses=pass; \ else xpasses=passes; fi; \ msg="$$msg ($$xpass unexpected $$xpasses). "; \ exit=false;; \ *) \ echo >&2 "incorrect case"; exit 4;; \ esac; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ msg="$$msg($$skip test was not run). "; \ else \ msg="$$msg($$skip tests were not run). "; \ fi; \ fi; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ echo "$$msg"; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for f in $$list; do \ test -r $$f && read line < $$f || line=; \ case $$line in \ PASS:*|XFAIL:*);; \ *) echo; cat $$f;; \ esac; \ done; \ } >$(TEST_SUITE_LOG).tmp; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if test "$$failures" -ne 0; then \ msg="$${msg}See $(subdir)/$(TEST_SUITE_LOG). "; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ msg="$${msg}Please report to $(PACKAGE_BUGREPORT). "; \ fi; \ fi; \ test x"$$VERBOSE" = x || $$exit || cat $(TEST_SUITE_LOG); \ $(am__tty_colors); \ if $$exit; then \ col="$$grn"; \ else \ col="$$red"; \ fi; \ echo "$$msg" | $(am__text_box) "col=$$col" "std=$$std"; \ $$exit || exit 1 check-TESTS recheck: @if test $@ != recheck; then \ list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list; \ fi @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @list='' list2='$(TEST_LOGS)'; for f in $$list2; do \ test .log = $$f && continue; \ if test $@ = recheck; then \ test -f $$f || continue; \ if test -r $$f && read line < $$f; then \ case $$line in FAIL*|XPASS*) : ;; *) continue;; esac; \ fi; \ fi; \ if test -z "$$list"; then list=$$f; else list="$$list $$f"; fi; \ done; \ if test $@ = recheck && test -n "$$list"; then \ $(am__make_dryrun) || rm -f $$list || exit 1; \ fi; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$list" recheck: $(check_LTLIBRARIES) $(check_PROGRAMS) am--mostlyclean-test-html: list='$(TEST_LOGS:.log=.html)'; test -z "$$list" || rm -f $$list rm -f $(TEST_SUITE_HTML) .log.html: @list='$(RST2HTML) $$RST2HTML rst2html rst2html.py'; \ for r2h in $$list; do \ if ($$r2h --version) >/dev/null 2>&1; then \ R2H=$$r2h; \ fi; \ done; \ if test -z "$$R2H"; then \ echo >&2 "cannot find rst2html, cannot create $@"; \ exit 2; \ fi; \ $$R2H $< >$@.tmp @mv $@.tmp $@ # Be sure to run check first, and then to convert the result. # Beware of concurrent executions. Run "check" not "check-TESTS", as # check-SCRIPTS and other dependencies are rebuilt by the former only. # And expect check to fail. check-html recheck-html: @target=`echo $@ | sed 's/-html$$//'`; \ rv=0; $(MAKE) $(AM_MAKEFLAGS) $$target || rv=$$?; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML) TEST_LOGS= || exit 4; \ exit $$rv testing/perf.log: testing/perf$(EXEEXT) @p='testing/perf$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/perf_amo.log: testing/perf_amo$(EXEEXT) @p='testing/perf_amo$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/perf_contig.log: testing/perf_contig$(EXEEXT) @p='testing/perf_contig$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/perf_strided.log: testing/perf_strided$(EXEEXT) @p='testing/perf_strided$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/shift.log: testing/shift$(EXEEXT) @p='testing/shift$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) testing/test.log: testing/test$(EXEEXT) @p='testing/test$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) .test.log: @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) config.h install-binPROGRAMS: install-libLTLIBRARIES installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(LIBOBJS)" || rm -f $(LIBOBJS) -test -z "$(LTLIBOBJS)" || rm -f $(LTLIBOBJS) -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS_TMP)" || rm -f $(TEST_LOGS_TMP) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f src-armci/$(DEPDIR)/$(am__dirstamp) -rm -f src-armci/$(am__dirstamp) -rm -f src-dmapp/$(DEPDIR)/$(am__dirstamp) -rm -f src-dmapp/$(am__dirstamp) -rm -f src-mpi/$(DEPDIR)/$(am__dirstamp) -rm -f src-mpi/$(am__dirstamp) -rm -f src-ofa/$(DEPDIR)/$(am__dirstamp) -rm -f src-ofa/$(am__dirstamp) -rm -f src-portals4/$(DEPDIR)/$(am__dirstamp) -rm -f src-portals4/$(am__dirstamp) -rm -f testing/$(DEPDIR)/$(am__dirstamp) -rm -f testing/$(am__dirstamp) -rm -f tools/$(DEPDIR)/$(am__dirstamp) -rm -f tools/$(am__dirstamp) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-binPROGRAMS clean-checkLTLIBRARIES clean-checkPROGRAMS \ clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf src-armci/$(DEPDIR) src-dmapp/$(DEPDIR) src-mpi/$(DEPDIR) src-ofa/$(DEPDIR) src-portals4/$(DEPDIR) testing/$(DEPDIR) tools/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf src-armci/$(DEPDIR) src-dmapp/$(DEPDIR) src-mpi/$(DEPDIR) src-ofa/$(DEPDIR) src-portals4/$(DEPDIR) testing/$(DEPDIR) tools/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: am--mostlyclean-test-html mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-includeHEADERS \ uninstall-libLTLIBRARIES .MAKE: all check check-am check-html install install-am install-strip \ recheck-html .PHONY: CTAGS GTAGS all all-am am--mostlyclean-test-html am--refresh \ check check-TESTS check-am check-html clean clean-binPROGRAMS \ clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ ctags dist dist-all dist-bzip2 dist-gzip dist-lzip dist-lzma \ dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-includeHEADERS install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck recheck-html tags uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-includeHEADERS \ uninstall-libLTLIBRARIES .PHONY: flags flags: @echo ' =========================================================================== ' @echo ' Suggested compiler/linker options are as follows.' @echo ' COMEX libraries are installed in $(libdir)' @echo ' COMEX headers are installed in $(includedir)' @echo ' ' @echo ' CPPFLAGS="$(MPI_CPPFLAGS) $(COMEX_NETWORK_CPPFLAGS) -I$(includedir)"' | $(SED_NORMALIZE_WHITESPACE) @echo ' ' @echo ' LDFLAGS="$(MPI_LDFLAGS) $(COMEX_NETWORK_LDFLAGS) -L$(libdir)"' | $(SED_NORMALIZE_WHITESPACE) @echo ' ' @echo ' For C/C++ Programs: ' @echo ' LIBS="-lcomex $(MPI_LIBS) $(COMEX_NETWORK_LIBS) $(MAYBE_FLIBS)"' | $(SED_NORMALIZE_WHITESPACE) @echo ' =========================================================================== ' ############################################################################## # the end # .PHONY: checkprogs checkprogs: $(check_PROGRAMS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ga-5-3/comex/src-portals4/0000750005473000001440000000000012275260570014251 5ustar d3n000usersga-5-3/comex/src-portals4/Makefile.inc0000640005473000001440000000034412155635053016462 0ustar d3n000userslibcomex_la_SOURCES += src-portals4/comex.c libcomex_la_SOURCES += src-portals4/comex_impl.h libcomex_la_SOURCES += src-portals4/groups.c libcomex_la_SOURCES += src-portals4/groups.h AM_CPPFLAGS += -I$(top_srcdir)/src-portals4 ga-5-3/comex/src-portals4/comex_impl.h0000640005473000001440000000202512245425776016566 0ustar d3n000users#ifndef COMEX_IMPL_H_ #define COMEX_IMPL_H_ #include #include #define COMEX_MAX_NB_OUTSTANDING 16 #define DEBUG 0 #define DEBUG_TO_FILE 0 #if DEBUG_TO_FILE # define printf(...) fprintf(l_state.my_file, __VA_ARGS__); fflush(l_state.my_file) #else # define printf(...) fprintf(stderr, __VA_ARGS__); fflush(stderr) #endif typedef struct { MPI_Comm world_comm; int rank; int size; ptl_ni_limits_t ptl_ni_limits; ptl_handle_ni_t ptl_ni_handle; ptl_process_t ptl_process_id; ptl_process_t *ptl_process_ids; ptl_uid_t ptl_uid; ptl_pt_index_t ptl_pt_index; ptl_pt_index_t *ptl_pt_indexes; ptl_handle_eq_t ptl_eq_handle; ptl_handle_md_t ptl_md_handle; ptl_handle_le_t ptl_le_handle; long **mutexes; /**< all mutexes */ long *local_mutex; /**< store the remote mutex value */ unsigned int *num_mutexes; /**< how many mutexes on each process */ #if DEBUG_TO_FILE FILE *my_file; #endif } local_state; extern local_state l_state; #endif /* COMEX_IMPL_H_ */ ga-5-3/comex/src-portals4/groups.c0000640005473000001440000002066712155635053015747 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include "comex.h" #include "comex_impl.h" #include "groups.h" /* the HEAD of the group linked list */ comex_igroup_t *group_list = NULL; /* static functions implemented in this file */ static void comex_create_group_and_igroup( comex_group_t *id, comex_igroup_t **igroup); static void comex_igroup_finalize(comex_igroup_t *igroup); /** * Return the comex igroup instance given the group id. * * The group linked list is searched sequentially until the given group * is found. It is an error if this function is called before * comex_group_init(). An error occurs if the given group is not found. */ comex_igroup_t* comex_get_igroup_from_group(comex_group_t id) { comex_igroup_t *current_group_list_item = group_list; assert(group_list != NULL); while (current_group_list_item != NULL) { if (current_group_list_item->id == id) { return current_group_list_item; } current_group_list_item = current_group_list_item->next; } comex_error("comex group lookup failed", -1); return NULL; } /** * Creates and associates an comex group with an comex igroup. * * This does *not* initialize the members of the comex igroup. */ static void comex_create_group_and_igroup( comex_group_t *id, comex_igroup_t **igroup) { comex_igroup_t *new_group_list_item = NULL; comex_igroup_t *last_group_list_item = NULL; /* find the last group in the group linked list */ last_group_list_item = group_list; while (last_group_list_item->next != NULL) { last_group_list_item = last_group_list_item->next; } /* create, init, and insert the new node for the linked list */ new_group_list_item = malloc(sizeof(comex_igroup_t)); new_group_list_item->id = last_group_list_item->id + 1; new_group_list_item->comm = MPI_COMM_NULL; new_group_list_item->group = MPI_GROUP_NULL; new_group_list_item->next = NULL; last_group_list_item->next = new_group_list_item; /* return the group id and comex igroup */ *igroup = new_group_list_item; *id = new_group_list_item->id; } int comex_group_rank(comex_group_t group, int *rank) { int status; comex_igroup_t *igroup = comex_get_igroup_from_group(group); status = MPI_Group_rank(igroup->group, rank); if (status != MPI_SUCCESS) { comex_error("MPI_Group_rank: Failed ", status); } return COMEX_SUCCESS; } int comex_group_size(comex_group_t group, int *size) { int status; comex_igroup_t *igroup = comex_get_igroup_from_group(group); status = MPI_Group_size(igroup->group, size); if (status != MPI_SUCCESS) { comex_error("MPI_Group_size: Failed ", status); } return COMEX_SUCCESS; } int comex_group_comm(comex_group_t group, MPI_Comm *comm) { int status; comex_igroup_t *igroup = comex_get_igroup_from_group(group); *comm = igroup->comm; return COMEX_SUCCESS; } int comex_group_translate_world(comex_group_t group, int group_rank, int *world_rank) { if (COMEX_GROUP_WORLD == group) { *world_rank = group_rank; } else { comex_igroup_t *igroup = comex_get_igroup_from_group(group); comex_igroup_t *world_igroup = comex_get_igroup_from_group(COMEX_GROUP_WORLD); int status = MPI_Group_translate_ranks( igroup->group, 1, &group_rank, world_igroup->group, world_rank); if (status != MPI_SUCCESS) { comex_error("MPI_Group_translate_ranks: Failed ", status); } } return COMEX_SUCCESS; } /** * Destroys the given comex igroup. */ static void comex_igroup_finalize(comex_igroup_t *igroup) { int status; assert(igroup); if (igroup->group != MPI_GROUP_NULL) { status = MPI_Group_free(&igroup->group); if (status != MPI_SUCCESS) { comex_error("MPI_Group_free: Failed ", status); } } if (igroup->comm != MPI_COMM_NULL) { status = MPI_Comm_free(&igroup->comm); if (status != MPI_SUCCESS) { comex_error("MPI_Comm_free: Failed ", status); } } } int comex_group_free(comex_group_t id) { comex_igroup_t *current_group_list_item = group_list; comex_igroup_t *previous_group_list_item = NULL; /* find the group to free */ while (current_group_list_item != NULL) { if (current_group_list_item->id == id) { break; } previous_group_list_item = current_group_list_item; current_group_list_item = current_group_list_item->next; } /* make sure we found a group */ assert(current_group_list_item != NULL); /* remove the group from the linked list */ if (previous_group_list_item != NULL) { previous_group_list_item->next = current_group_list_item->next; } /* free the group */ comex_igroup_finalize(current_group_list_item); free(current_group_list_item); return COMEX_SUCCESS; } int comex_group_create( int n, int *pid_list, comex_group_t id_parent, comex_group_t *id_child) { int status; int grp_me; comex_igroup_t *igroup_child = NULL; MPI_Group *group_child = NULL; MPI_Comm *comm_child = NULL; comex_igroup_t *igroup_parent = NULL; MPI_Group *group_parent = NULL; MPI_Comm *comm_parent = NULL; /* create the node in the linked list of groups and */ /* get the child's MPI_Group and MPI_Comm, to be populated shortly */ comex_create_group_and_igroup(id_child, &igroup_child); group_child = &(igroup_child->group); comm_child = &(igroup_child->comm); /* get the parent's MPI_Group and MPI_Comm */ igroup_parent = comex_get_igroup_from_group(id_parent); group_parent = &(igroup_parent->group); comm_parent = &(igroup_parent->comm); status = MPI_Group_incl(*group_parent, n, pid_list, group_child); if (status != MPI_SUCCESS) { comex_error("MPI_Group_incl: Failed ", status); } { MPI_Comm comm, comm1, comm2; int lvl=1, local_ldr_pos; MPI_Group_rank(*group_child, &grp_me); if (grp_me == MPI_UNDEFINED) { /* FIXME: keeping the group around for now */ return COMEX_SUCCESS; } /* SK: sanity check for the following bitwise operations */ assert(grp_me>=0); MPI_Comm_dup(MPI_COMM_SELF, &comm); /* FIXME: can be optimized away */ local_ldr_pos = grp_me; while(n>lvl) { int tag=0; int remote_ldr_pos = local_ldr_pos^lvl; if (remote_ldr_pos < n) { int remote_leader = pid_list[remote_ldr_pos]; MPI_Comm peer_comm = *comm_parent; int high = (local_ldr_posid = COMEX_GROUP_WORLD; group_list->next = NULL; /* save MPI world group and communicatior in COMEX_GROUP_WORLD */ group_list->comm = l_state.world_comm; MPI_Comm_group(group_list->comm, &(group_list->group)); } void comex_group_finalize() { comex_igroup_t *current_group_list_item = group_list; comex_igroup_t *previous_group_list_item = NULL; /* don't free the world group (the list head) */ current_group_list_item = current_group_list_item->next; while (current_group_list_item != NULL) { previous_group_list_item = current_group_list_item; current_group_list_item = current_group_list_item->next; comex_igroup_finalize(previous_group_list_item); free(previous_group_list_item); } /* ok, now free the world group, but not the world comm */ MPI_Group_free(&(group_list->group)); free(group_list); group_list = NULL; } ga-5-3/comex/src-portals4/comex.c0000640005473000001440000016176612247154644015555 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* C and/or system headers */ #include #include #include #include #include #include #include #include /* 3rd party headers */ #include #include /* our headers */ #include "acc.h" #include "comex.h" #include "comex_impl.h" #include "groups.h" #define CHECK_PTL_RETVAL(retval) check_ptl_retval((retval), __FILE__, __LINE__) #define CHECK_MPI_RETVAL(retval) check_mpi_retval((retval), __FILE__, __LINE__) #if SIZEOF_VOIDP == SIZEOF_MPI_AINT # define MPI_VOIDP MPI_AINT #elif SIZEOF_VOIDP == SIZEOF_INT # define MPI_VOIDP MPI_INT #elif SIZEOF_VOIDP == SIZEOF_LONG # define MPI_VOIDP MPI_LONG #elif SIZEOF_VOIDP == SIZEOF_LONG_LONG # define MPI_VOIDP MPI_LONG_LONG_INT #else # error cannot determine MPI_Datatype for void* #endif /* keep track of all nonblocking operations */ typedef struct { int in_use; /**< 1 == user-visible handle */ int send; int reply; int ack; } nb_t; static nb_t *nb_state = NULL; static int nb_index = 0; static int nb_count_event = 0; static int nb_count_event_processed = 0; static int nb_count_send = 0; static int nb_count_send_processed = 0; static int nb_count_reply = 0; static int nb_count_reply_processed = 0; static int nb_count_ack = 0; static int nb_count_ack_processed = 0; /* exported state */ local_state l_state; /* static state */ static int initialized=0; /* for comex_initialized(), 0=false */ static char skip_lock=0; /* don't acquire or release lock */ static int nb_max_outstanding = 0; static void* acc_buf = NULL; static void* rmw_buf = NULL; static void* swp_buf = NULL; /* static function declarations */ static void acquire_remote_lock(int proc); static void release_remote_lock(int proc); static inline void check_ptl_retval(int retval, const char *file, int line); static inline const char * str_ptl_retval(int retval); static inline void check_mpi_retval(int retval, const char *file, int line); static inline const char * str_mpi_retval(int retval); static inline void nb_process_event(); static inline void nb_wait_for_event_space(); static inline int nb_get_handle_index(); static inline nb_t* nb_wait_for_handle(); static inline void nb_wait_for_send(nb_t *nb); static inline void nb_wait_for_reply(nb_t *nb); static inline void nb_wait_for_ack(nb_t *nb); static inline void nb_wait_for_all(nb_t *nb); static inline void nb_wait_all(); static inline void nb_put(void *src, void *dst, int bytes, int proc, nb_t *nb); static inline void nb_get(void *src, void *dst, int bytes, int proc, nb_t *nb); static inline void nb_acc(int datatype, void *scale, void *src, void *dst, int bytes, int proc, nb_t *nb); static inline void nb_puts( void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, nb_t *nb); static inline void nb_gets( void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, nb_t *nb); static inline void nb_accs( int datatype, void *scale, void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, nb_t *nb); static inline void nb_putv(comex_giov_t *iov, int iov_len, int proc, nb_t *nb); static inline void nb_getv(comex_giov_t *iov, int iov_len, int proc, nb_t *nb); static inline void nb_accv(int datatype, void *scale, comex_giov_t *iov, int iov_len, int proc, nb_t *nb); int comex_init() { int init_flag = 0; int status = 0; ptl_ni_limits_t ptl_ni_limits_requested; ptl_md_t ptl_md; ptl_le_t ptl_le; int nb_max_outstanding_initial = 0; if (initialized) { return 0; } initialized = 1; /* Assert MPI has been initialized */ status = MPI_Initialized(&init_flag); CHECK_MPI_RETVAL(status); assert(init_flag); /* Duplicate the World Communicator */ status = MPI_Comm_dup(MPI_COMM_WORLD, &(l_state.world_comm)); CHECK_MPI_RETVAL(status); assert(l_state.world_comm); /* My Rank */ status = MPI_Comm_rank(l_state.world_comm, &(l_state.rank)); CHECK_MPI_RETVAL(status); /* World Size */ status = MPI_Comm_size(l_state.world_comm, &(l_state.size)); CHECK_MPI_RETVAL(status); /* groups */ comex_group_init(); /* nonblocking state */ nb_state = NULL; /* initialized later */ nb_index = 0; nb_count_event = 0; nb_count_event_processed = 0; nb_count_send = 0; nb_count_send_processed = 0; nb_count_reply = 0; nb_count_reply_processed = 0; nb_count_ack = 0; nb_count_ack_processed = 0; nb_max_outstanding = COMEX_MAX_NB_OUTSTANDING; /* initial hint */ /* env vars */ { char *value = NULL; if ((value = getenv("COMEX_MAX_NB_OUTSTANDING")) != NULL) { nb_max_outstanding = atoi(value); } } /* portals4 */ /* init portals */ status = PtlInit(); CHECK_PTL_RETVAL(status); /* init portals network */ ptl_ni_limits_requested.max_entries = INT_MAX; ptl_ni_limits_requested.max_unexpected_headers = INT_MAX; ptl_ni_limits_requested.max_mds = INT_MAX; ptl_ni_limits_requested.max_eqs = INT_MAX; ptl_ni_limits_requested.max_cts = INT_MAX; ptl_ni_limits_requested.max_pt_index = INT_MAX; ptl_ni_limits_requested.max_iovecs = INT_MAX; ptl_ni_limits_requested.max_list_size = INT_MAX; ptl_ni_limits_requested.max_triggered_ops = INT_MAX; ptl_ni_limits_requested.max_msg_size = LONG_MAX; ptl_ni_limits_requested.max_atomic_size = LONG_MAX; ptl_ni_limits_requested.max_fetch_atomic_size = LONG_MAX; ptl_ni_limits_requested.max_waw_ordered_size = LONG_MAX; ptl_ni_limits_requested.max_war_ordered_size = LONG_MAX; ptl_ni_limits_requested.max_volatile_size = LONG_MAX; ptl_ni_limits_requested.features = PTL_TARGET_BIND_INACCESSIBLE; status = PtlNIInit(PTL_IFACE_DEFAULT, PTL_NI_NO_MATCHING | PTL_NI_LOGICAL, PTL_PID_ANY, &ptl_ni_limits_requested, &l_state.ptl_ni_limits, &l_state.ptl_ni_handle); CHECK_PTL_RETVAL(status); if (0 == l_state.rank) { printf("max_entries = %d (%d requested)\n", l_state.ptl_ni_limits.max_entries, ptl_ni_limits_requested.max_entries); printf("max_unexpected_headers = %d (%d requested)\n", l_state.ptl_ni_limits.max_unexpected_headers, ptl_ni_limits_requested.max_unexpected_headers); printf("max_mds = %d (%d requested)\n", l_state.ptl_ni_limits.max_mds, ptl_ni_limits_requested.max_mds); printf("max_eqs = %d (%d requested)\n", l_state.ptl_ni_limits.max_eqs, ptl_ni_limits_requested.max_eqs); printf("max_cts = %d (%d requested)\n", l_state.ptl_ni_limits.max_cts, ptl_ni_limits_requested.max_cts); printf("max_pt_index = %d (%d requested)\n", l_state.ptl_ni_limits.max_pt_index, ptl_ni_limits_requested.max_pt_index); printf("max_iovecs = %d (%d requested)\n", l_state.ptl_ni_limits.max_iovecs, ptl_ni_limits_requested.max_iovecs); printf("max_list_size = %d (%d requested)\n", l_state.ptl_ni_limits.max_list_size, ptl_ni_limits_requested.max_list_size); printf("max_triggered_ops = %d (%d requested)\n", l_state.ptl_ni_limits.max_triggered_ops, ptl_ni_limits_requested.max_triggered_ops); printf("max_msg_size = %ld (%ld requested)\n", l_state.ptl_ni_limits.max_msg_size, ptl_ni_limits_requested.max_msg_size); printf("max_atomic_size = %ld (%ld requested)\n", l_state.ptl_ni_limits.max_atomic_size, ptl_ni_limits_requested.max_atomic_size); printf("max_fetch_atomic_size = %ld (%ld requested)\n", l_state.ptl_ni_limits.max_fetch_atomic_size, ptl_ni_limits_requested.max_fetch_atomic_size); printf("max_waw_ordered_size = %ld (%ld requested)\n", l_state.ptl_ni_limits.max_waw_ordered_size, ptl_ni_limits_requested.max_waw_ordered_size); printf("max_war_ordered_size = %ld (%ld requested)\n", l_state.ptl_ni_limits.max_war_ordered_size, ptl_ni_limits_requested.max_war_ordered_size); printf("max_volatile_size = %ld (%ld requested)\n", l_state.ptl_ni_limits.max_volatile_size, ptl_ni_limits_requested.max_volatile_size); printf("features = %u (%u requested)\n", l_state.ptl_ni_limits.features, ptl_ni_limits_requested.features); } /* establish physical to logical rank mapping */ //status = PtlGetId(l_state.ptl_ni_handle, &l_state.ptl_process_id); status = PtlGetPhysId(l_state.ptl_ni_handle, &l_state.ptl_process_id); CHECK_PTL_RETVAL(status); /* keep track of all process ids */ l_state.ptl_process_ids = (ptl_process_t*)malloc( sizeof(ptl_process_t)*l_state.size); assert(NULL != l_state.ptl_process_ids); l_state.ptl_process_ids[l_state.rank] = l_state.ptl_process_id; status = MPI_Allgather(MPI_IN_PLACE, 0, MPI_DATATYPE_NULL, l_state.ptl_process_ids, sizeof(ptl_process_t), MPI_CHAR, l_state.world_comm); CHECK_MPI_RETVAL(status); /* set the mapping (same on all procs) */ status = PtlSetMap(l_state.ptl_ni_handle, l_state.size, l_state.ptl_process_ids); CHECK_PTL_RETVAL(status); /* get this proc's uid */ status = PtlGetUid(l_state.ptl_ni_handle, &l_state.ptl_uid); CHECK_PTL_RETVAL(status); /* create event queue for initiator events */ nb_max_outstanding_initial = nb_max_outstanding; status = PtlEQAlloc(l_state.ptl_ni_handle, nb_max_outstanding*2, &l_state.ptl_eq_handle); while (PTL_NO_SPACE == status && nb_max_outstanding > 0) { /* half the max and try again */ nb_max_outstanding /= 2; status = PtlEQAlloc(l_state.ptl_ni_handle, nb_max_outstanding*2, &l_state.ptl_eq_handle); } assert(nb_max_outstanding > 0); CHECK_PTL_RETVAL(status); if (0 == l_state.rank) { printf("event queue size = %d (%d requested)\n", nb_max_outstanding, nb_max_outstanding_initial); } /* create nonblocking state registers */ nb_state = (nb_t*)malloc(sizeof(nb_t) * nb_max_outstanding); assert(NULL != nb_state); (void)memset(nb_state, 0, sizeof(nb_t) * nb_max_outstanding); /* create memory descriptor */ ptl_md.start = 0; ptl_md.length = PTL_SIZE_MAX; ptl_md.options = PTL_MD_UNORDERED; ptl_md.eq_handle = l_state.ptl_eq_handle; ptl_md.ct_handle = PTL_CT_NONE; status = PtlMDBind(l_state.ptl_ni_handle, &ptl_md, &l_state.ptl_md_handle); CHECK_PTL_RETVAL(status); /* allocate a single portal table entry as the target for all ops */ status = PtlPTAlloc(l_state.ptl_ni_handle, 0, PTL_EQ_NONE, PTL_PT_ANY, &l_state.ptl_pt_index); assert(l_state.ptl_pt_index == 0); CHECK_PTL_RETVAL(status); l_state.ptl_pt_indexes = (ptl_pt_index_t*)malloc( sizeof(ptl_pt_index_t)*l_state.size); l_state.ptl_pt_indexes[l_state.rank] = l_state.ptl_pt_index; status = MPI_Allgather(MPI_IN_PLACE, 0, MPI_DATATYPE_NULL, l_state.ptl_pt_indexes, sizeof(ptl_pt_index_t), MPI_CHAR, l_state.world_comm); CHECK_MPI_RETVAL(status); /* allocate a single list entry for the single portal table index */ ptl_le.start = NULL; ptl_le.length = PTL_SIZE_MAX; ptl_le.ct_handle = PTL_CT_NONE; ptl_le.uid = PTL_UID_ANY; ptl_le.options = PTL_LE_OP_PUT | PTL_LE_OP_GET; status = PtlLEAppend(l_state.ptl_ni_handle, l_state.ptl_pt_index, &ptl_le, PTL_PRIORITY_LIST, NULL, &l_state.ptl_le_handle); CHECK_PTL_RETVAL(status); /* mutexes */ l_state.mutexes = NULL; l_state.local_mutex = NULL; l_state.num_mutexes = NULL; if (l_state.rank == l_state.size-1) { printf("using %d process(es)\n", l_state.size); } /* Synch - Sanity Check */ MPI_Barrier(l_state.world_comm); return COMEX_SUCCESS; } int comex_init_args(int *argc, char ***argv) { int init_flag; MPI_Initialized(&init_flag); if(!init_flag) { MPI_Init(argc, argv); } return comex_init(); } int comex_initialized() { return initialized; } void comex_error(char *msg, int code) { fprintf(stderr,"[%d] Received an Error in Communication: (%d) %s\n", l_state.rank, code, msg); MPI_Abort(l_state.world_comm, code); } int comex_put( void *src, void *dst, int bytes, int proc, comex_group_t group) { nb_t *nb = NULL; int world_proc = -1; int status = 0; nb = nb_wait_for_handle(); status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_put(src, dst, bytes, world_proc, nb); nb_wait_for_send(nb); return COMEX_SUCCESS; } int comex_get( void *src, void *dst, int bytes, int proc, comex_group_t group) { nb_t *nb = NULL; int world_proc = -1; int status = 0; nb = nb_wait_for_handle(); status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_get(src, dst, bytes, world_proc, nb); nb_wait_for_reply(nb); return COMEX_SUCCESS; } int comex_acc( int datatype, void *scale, void *src, void *dst, int bytes, int proc, comex_group_t group) { nb_t *nb = NULL; int world_proc = -1; int status = 0; nb = nb_wait_for_handle(); status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_acc(datatype, scale, src, dst, bytes, world_proc, nb); nb_wait_for_send(nb); return COMEX_SUCCESS; } int comex_puts( void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, comex_group_t group) { nb_t *nb = NULL; int world_proc = -1; int status = 0; nb = nb_wait_for_handle(); status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_puts(src, src_stride, dst, dst_stride, count, stride_levels, world_proc, nb); nb_wait_for_send(nb); return COMEX_SUCCESS; } int comex_gets( void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, comex_group_t group) { nb_t *nb = NULL; int world_proc = -1; int status = 0; nb = nb_wait_for_handle(); status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_gets(src, src_stride, dst, dst_stride, count, stride_levels, world_proc, nb); nb_wait_for_reply(nb); return COMEX_SUCCESS; } int comex_accs( int datatype, void *scale, void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, comex_group_t group) { nb_t *nb = NULL; int world_proc = -1; int status = 0; nb = nb_wait_for_handle(); status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_accs(datatype, scale, src, src_stride, dst, dst_stride, count, stride_levels, world_proc, nb); nb_wait_for_send(nb); return COMEX_SUCCESS; } int comex_putv( comex_giov_t *iov, int iov_len, int proc, comex_group_t group) { int i = 0; nb_t *nb = NULL; int world_proc = -1; int status = 0; nb = nb_wait_for_handle(); status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_putv(iov, iov_len, world_proc, nb); nb_wait_for_send(nb); return COMEX_SUCCESS; } int comex_getv( comex_giov_t *iov, int iov_len, int proc, comex_group_t group) { int i = 0; nb_t *nb = NULL; int world_proc = -1; int status = 0; nb = nb_wait_for_handle(); status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_getv(iov, iov_len, world_proc, nb); nb_wait_for_reply(nb); return COMEX_SUCCESS; } int comex_accv( int datatype, void *scale, comex_giov_t *iov, int iov_len, int proc, comex_group_t group) { int i = 0; nb_t *nb = NULL; int world_proc = -1; int status = 0; nb = nb_wait_for_handle(); status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_accv(datatype, scale, iov, iov_len, world_proc, nb); nb_wait_for_send(nb); return COMEX_SUCCESS; } int comex_fence_all(comex_group_t group) { return comex_wait_all(group); } int comex_fence_proc(int proc, comex_group_t group) { return comex_wait_all(group); } /* comex_barrier is comex_fence_all + MPI_Barrier */ int comex_barrier(comex_group_t group) { MPI_Comm comm; comex_fence_all(group); assert(COMEX_SUCCESS == comex_group_comm(group, &comm)); MPI_Barrier(comm); return COMEX_SUCCESS; } void *comex_malloc_local(size_t size) { int retval = 0; void *memptr = NULL; retval = posix_memalign(&memptr, sizeof(void*), size); if (0 != retval) { errno = retval; perror("comex_malloc_local: posix_memalign"); MPI_Abort(l_state.world_comm, retval); } return memptr; } int comex_free_local(void *ptr) { free(ptr); return COMEX_SUCCESS; } int comex_finalize() { /* it's okay to call multiple times -- extra calls are no-ops */ if (!initialized) { return; } initialized = 0; /* Make sure that all outstanding operations are done */ comex_wait_all(COMEX_GROUP_WORLD); /* groups */ comex_group_finalize(); /* portals4 */ PtlFini(); MPI_Barrier(l_state.world_comm); // destroy the communicators MPI_Comm_free(&l_state.world_comm); return COMEX_SUCCESS; } int comex_wait_proc(int proc, comex_group_t group) { return comex_wait_all(group); } int comex_wait(comex_request_t* hdl) { int index = 0; nb_t *nb = NULL; assert(NULL != hdl); index = *(int*)hdl; assert(index >= 0); assert(index < nb_max_outstanding); nb = &nb_state[index]; if (0 == nb->in_use) { fprintf(stderr, "{%d} comex_test Error: invalid handle\n", l_state.rank); } nb_wait_for_all(nb); nb->in_use = 0; return COMEX_SUCCESS; } int comex_test(comex_request_t* hdl, int *status) { int index = 0; nb_t *nb = NULL; assert(NULL != hdl); index = *(int*)hdl; assert(index >= 0); assert(index < nb_max_outstanding); nb = &nb_state[index]; if (0 == nb->in_use) { fprintf(stderr, "{%d} comex_test Error: invalid handle\n", l_state.rank); } if (nb->send == 0 && nb->reply == 0 && nb->ack == 0) { *status = 0; nb->in_use = 0; } else { *status = 1; } return COMEX_SUCCESS; } int comex_wait_all(comex_group_t group) { nb_wait_all(); return COMEX_SUCCESS; } int comex_nbput( void *src, void *dst, int bytes, int proc, comex_group_t group, comex_request_t *hdl) { nb_t *nb = NULL; int world_proc = -1; int status = 0; comex_request_t _hdl = 0; nb = nb_wait_for_handle(); _hdl = nb_get_handle_index(); assert(&nb_state[_hdl] == nb); if (hdl) { *hdl = _hdl; nb->in_use = 1; } status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_put(src, dst, bytes, world_proc, nb); return COMEX_SUCCESS; } int comex_nbget( void *src, void *dst, int bytes, int proc, comex_group_t group, comex_request_t *hdl) { nb_t *nb = NULL; int world_proc = -1; int status = 0; comex_request_t _hdl = 0; nb = nb_wait_for_handle(); _hdl = nb_get_handle_index(); assert(&nb_state[_hdl] == nb); if (hdl) { *hdl = _hdl; nb->in_use = 1; } status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_get(src, dst, bytes, world_proc, nb); return COMEX_SUCCESS; } int comex_nbacc( int datatype, void *scale, void *src, void *dst, int bytes, int proc, comex_group_t group, comex_request_t *hdl) { nb_t *nb = NULL; int world_proc = -1; int status = 0; comex_request_t _hdl = 0; nb = nb_wait_for_handle(); _hdl = nb_get_handle_index(); assert(&nb_state[_hdl] == nb); if (hdl) { *hdl = _hdl; nb->in_use = 1; } status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_acc(datatype, scale, src, dst, bytes, world_proc, nb); return COMEX_SUCCESS; } int comex_nbputs( void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, comex_group_t group, comex_request_t *hdl) { nb_t *nb = NULL; int world_proc = -1; int status = 0; comex_request_t _hdl = 0; nb = nb_wait_for_handle(); _hdl = nb_get_handle_index(); assert(&nb_state[_hdl] == nb); if (hdl) { *hdl = _hdl; nb->in_use = 1; } status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_puts(src, src_stride, dst, dst_stride, count, stride_levels, world_proc, nb); return COMEX_SUCCESS; } int comex_nbgets( void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, comex_group_t group, comex_request_t *hdl) { nb_t *nb = NULL; int world_proc = -1; int status = 0; comex_request_t _hdl = 0; nb = nb_wait_for_handle(); _hdl = nb_get_handle_index(); assert(&nb_state[_hdl] == nb); if (hdl) { *hdl = _hdl; nb->in_use = 1; } status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_gets(src, src_stride, dst, dst_stride, count, stride_levels, world_proc, nb); return COMEX_SUCCESS; } int comex_nbaccs( int datatype, void *scale, void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, comex_group_t group, comex_request_t *hdl) { nb_t *nb = NULL; int world_proc = -1; int status = 0; comex_request_t _hdl = 0; nb = nb_wait_for_handle(); _hdl = nb_get_handle_index(); assert(&nb_state[_hdl] == nb); if (hdl) { *hdl = _hdl; nb->in_use = 1; } status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_accs(datatype, scale, src, src_stride, dst, dst_stride, count, stride_levels, world_proc, nb); return COMEX_SUCCESS; } int comex_nbputv( comex_giov_t *iov, int iov_len, int proc, comex_group_t group, comex_request_t* hdl) { int i = 0; nb_t *nb = NULL; int world_proc = -1; int status = 0; comex_request_t _hdl = 0; nb = nb_wait_for_handle(); _hdl = nb_get_handle_index(); assert(&nb_state[_hdl] == nb); if (hdl) { *hdl = _hdl; nb->in_use = 1; } status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_putv(iov, iov_len, world_proc, nb); return COMEX_SUCCESS; } int comex_nbgetv( comex_giov_t *iov, int iov_len, int proc, comex_group_t group, comex_request_t* hdl) { int i = 0; nb_t *nb = NULL; int world_proc = -1; int status = 0; comex_request_t _hdl = 0; nb = nb_wait_for_handle(); _hdl = nb_get_handle_index(); assert(&nb_state[_hdl] == nb); if (hdl) { *hdl = _hdl; nb->in_use = 1; } status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_getv(iov, iov_len, world_proc, nb); return COMEX_SUCCESS; } int comex_nbaccv( int datatype, void *scale, comex_giov_t *iov, int iov_len, int proc, comex_group_t group, comex_request_t* hdl) { int i = 0; nb_t *nb = NULL; int world_proc = -1; int status = 0; comex_request_t _hdl = 0; nb = nb_wait_for_handle(); _hdl = nb_get_handle_index(); assert(&nb_state[_hdl] == nb); if (hdl) { *hdl = _hdl; nb->in_use = 1; } status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); nb_accv(datatype, scale, iov, iov_len, world_proc, nb); return COMEX_SUCCESS; } int comex_rmw( int op, void *ploc, void *prem, int extra, int proc, comex_group_t group) { ptl_process_t peer; nb_t *nb = NULL; int world_proc = -1; int status = 0; if (DEBUG) { printf("[%d] comex_rmw(op=%d, ploc(%p)=%d, prem(%p), extra=%d, proc=%d, group=%d)\n", l_state.rank, op, ploc, *((int*)ploc), prem, extra, proc, group); } nb = nb_wait_for_handle(); nb_wait_for_event_space(); nb_count_event += 2; nb_count_send += 1; nb_count_reply += 1; nb->send += 1; nb->reply += 1; status = comex_group_translate_world(group, proc, &world_proc); assert(COMEX_SUCCESS == status); /* allocate rmw buffer on first use */ if (NULL == rmw_buf) { rmw_buf = comex_malloc_local(sizeof(long)); assert(sizeof(long) <= l_state.ptl_ni_limits.max_fetch_atomic_size); } peer.rank = world_proc; if (op == COMEX_FETCH_AND_ADD) { *((int*)rmw_buf) = extra; if (DEBUG) { printf("[%d] comex_rmw ploc=%d rmw_buf=%d\n", l_state.rank, *((int*)ploc), *((int*)rmw_buf)); } status = PtlFetchAtomic( l_state.ptl_md_handle, (ptl_size_t)ploc, l_state.ptl_md_handle, (ptl_size_t)rmw_buf, sizeof(int), peer, l_state.ptl_pt_indexes[world_proc], (ptl_match_bits_t)0, (ptl_size_t)prem, nb, (ptl_hdr_data_t)0, PTL_SUM, PTL_INT32_T); } else if (op == COMEX_FETCH_AND_ADD_LONG) { *((long*)rmw_buf) = (long)extra; if (DEBUG) { printf("[%d] comex_rmw rmw_buf=%ld\n", l_state.rank, *((long*)rmw_buf)); } status = PtlFetchAtomic( l_state.ptl_md_handle, (ptl_size_t)ploc, l_state.ptl_md_handle, (ptl_size_t)rmw_buf, sizeof(long), peer, l_state.ptl_pt_indexes[world_proc], (ptl_match_bits_t)0, (ptl_size_t)prem, nb, (ptl_hdr_data_t)0, PTL_SUM, PTL_INT64_T); } else if (op == COMEX_SWAP) { *((int*)rmw_buf) = *((int*)ploc); status = PtlSwap( l_state.ptl_md_handle, (ptl_size_t)ploc, l_state.ptl_md_handle, (ptl_size_t)rmw_buf, sizeof(int), peer, l_state.ptl_pt_indexes[world_proc], (ptl_match_bits_t)0, (ptl_size_t)prem, nb, (ptl_hdr_data_t)0, NULL, PTL_SWAP, PTL_INT32_T); } else if (op == COMEX_SWAP_LONG) { *((long*)rmw_buf) = *((long*)ploc); status = PtlSwap( l_state.ptl_md_handle, (ptl_size_t)ploc, l_state.ptl_md_handle, (ptl_size_t)rmw_buf, sizeof(long), peer, l_state.ptl_pt_indexes[world_proc], (ptl_match_bits_t)0, (ptl_size_t)prem, nb, (ptl_hdr_data_t)0, NULL, PTL_SWAP, PTL_INT64_T); } else { assert(0); } nb_wait_for_all(nb); return COMEX_SUCCESS; } /* Mutex Operations */ int comex_create_mutexes(int num) { int i=0; if (DEBUG) { printf("[%d] comex_create_mutexes(num=%d)\n", l_state.rank, num); } assert(NULL == l_state.mutexes); assert(NULL == l_state.local_mutex); assert(NULL == l_state.num_mutexes); /* every process knows how many mutexes created on every process */ l_state.num_mutexes = (unsigned int*)malloc(l_state.size * sizeof(unsigned int)); assert(l_state.num_mutexes); /* gather the counts */ MPI_Allgather(&num, 1, MPI_INT, l_state.num_mutexes, 1, MPI_UNSIGNED, l_state.world_comm); /* create the 1 element buffer to hold a remote mutex */ l_state.local_mutex = comex_malloc_local(sizeof(long)); assert(l_state.local_mutex); /* init the local mutex holder to rank+1, indicating no mutex is held */ *l_state.local_mutex = l_state.rank+1; MPI_Barrier(l_state.world_comm); /* create all of the mutexes */ l_state.mutexes = (long**)malloc(l_state.size * sizeof(long*)); assert(l_state.mutexes); comex_malloc((void**)l_state.mutexes, num*sizeof(long), COMEX_GROUP_WORLD); /* init all of my mutexes to 0 */ for (i=0; isend += 1; nb->reply += 1; status = PtlSwap( l_state.ptl_md_handle, (ptl_size_t)l_state.local_mutex, l_state.ptl_md_handle, (ptl_size_t)rmw_buf, sizeof(long), peer, l_state.ptl_pt_indexes[proc], (ptl_match_bits_t)0, (ptl_size_t)&l_state.mutexes[proc][mutex], nb, (ptl_hdr_data_t)0, swp_buf, PTL_CSWAP, PTL_INT64_T); nb_wait_for_all(nb); } while(*(l_state.local_mutex) != 0); return COMEX_SUCCESS; } int comex_unlock(int mutex, int proc) { ptl_process_t peer; nb_t *nb = NULL; int status = 0; if (DEBUG) { printf("[%d] comex_unlock(mutex=%d, proc=%d)\n", l_state.rank, mutex, proc); } /* preconditions */ assert(0 <= proc && proc < l_state.size); assert(0 <= mutex && ((unsigned int)mutex) < l_state.num_mutexes[proc]); /* you cannot unlock a mutex you haven't locked */ assert(*l_state.local_mutex == 0); assert(NULL != rmw_buf); assert(NULL != swp_buf); peer.rank = proc; *((long*)rmw_buf) = 0; /* 0 == unlocked */ *((long*)swp_buf) = l_state.rank + 1; /* value should be the one we put */ do { nb = nb_wait_for_handle(); nb_wait_for_event_space(); nb_count_event += 2; nb_count_send += 1; nb_count_reply += 1; nb->send += 1; nb->reply += 1; status = PtlSwap( l_state.ptl_md_handle, (ptl_size_t)l_state.local_mutex, l_state.ptl_md_handle, (ptl_size_t)rmw_buf, sizeof(long), peer, l_state.ptl_pt_indexes[proc], (ptl_match_bits_t)0, (ptl_size_t)&l_state.mutexes[proc][mutex], nb, (ptl_hdr_data_t)0, swp_buf, PTL_CSWAP, PTL_INT64_T); nb_wait_for_all(nb); } while(*(l_state.local_mutex) == 0); assert(*(l_state.local_mutex) == (long)(l_state.rank + 1)); return COMEX_SUCCESS; } int comex_malloc(void *ptrs[], size_t size, comex_group_t group) { comex_igroup_t *igroup = NULL; MPI_Comm comm = MPI_COMM_NULL; int comm_rank = -1; int comm_size = -1; int status = 0; /* preconditions */ assert(NULL != ptrs); igroup = comex_get_igroup_from_group(group); comm = igroup->comm; assert(MPI_COMM_NULL != comm); status = MPI_Comm_rank(comm, &comm_rank); CHECK_MPI_RETVAL(status); status = MPI_Comm_size(comm, &comm_size); CHECK_MPI_RETVAL(status); /* allocate and register segment */ ptrs[comm_rank] = comex_malloc_local(sizeof(char)*size); /* exchange buffer address */ status = MPI_Allgather(MPI_IN_PLACE, 0, MPI_DATATYPE_NULL, ptrs, 1, MPI_VOIDP, comm); CHECK_MPI_RETVAL(status); status = MPI_Barrier(comm); CHECK_MPI_RETVAL(status); return COMEX_SUCCESS; } int comex_free(void *ptr, comex_group_t group) { comex_igroup_t *igroup = NULL; MPI_Comm comm = MPI_COMM_NULL; int comm_rank = -1; int comm_size = -1; long **allgather_ptrs = NULL; int status = 0; /* preconditions */ assert(NULL != ptr); igroup = comex_get_igroup_from_group(group); comm = igroup->comm; assert(MPI_COMM_NULL != comm); status = MPI_Comm_rank(comm, &comm_rank); CHECK_MPI_RETVAL(status); status = MPI_Comm_size(comm, &comm_size); CHECK_MPI_RETVAL(status); /* allocate receive buffer for exchange of pointers */ allgather_ptrs = (long **)malloc(sizeof(void *) * comm_size); assert(allgather_ptrs); /* exchange of pointers */ status = MPI_Allgather(&ptr, sizeof(void *), MPI_BYTE, allgather_ptrs, sizeof(void *), MPI_BYTE, comm); CHECK_MPI_RETVAL(status); /* TODO do something useful with pointers */ /* remove my ptr from reg cache and free ptr */ comex_free_local(ptr); free(allgather_ptrs); /* Is this needed? */ status = MPI_Barrier(comm); CHECK_MPI_RETVAL(status); return COMEX_SUCCESS; } static void acquire_remote_lock(int proc) { assert(0); } static void release_remote_lock(int proc) { assert(0); } static inline void check_ptl_retval(int retval, const char *file, int line) { if (PTL_OK != retval) { const char *msg = str_ptl_retval(retval); fprintf(stderr, "{%d} PTL Error: %s: line %d: %s\n", l_state.rank, file, line, msg); MPI_Abort(l_state.world_comm, retval); } } static inline const char * str_ptl_retval(int retval) { const char *msg = NULL; switch(retval) { case PTL_OK : msg = "PTL_OK"; break; case PTL_ARG_INVALID : msg = "PTL_ARG_INVALID"; break; case PTL_CT_NONE_REACHED : msg = "PTL_CT_NONE_REACHED"; break; case PTL_EQ_DROPPED : msg = "PTL_EQ_DROPPED"; break; case PTL_EQ_EMPTY : msg = "PTL_EQ_EMPTY"; break; case PTL_FAIL : msg = "PTL_FAIL"; break; case PTL_IGNORED : msg = "PTL_IGNORED"; break; case PTL_IN_USE : msg = "PTL_IN_USE"; break; case PTL_INTERRUPTED : msg = "PTL_INTERRUPTED"; break; case PTL_LIST_TOO_LONG : msg = "PTL_LIST_TOO_LONG"; break; case PTL_NO_INIT : msg = "PTL_NO_INIT"; break; case PTL_NO_SPACE : msg = "PTL_NO_SPACE"; break; case PTL_PID_IN_USE : msg = "PTL_PID_IN_USE"; break; case PTL_PT_FULL : msg = "PTL_PT_FULL"; break; case PTL_PT_EQ_NEEDED : msg = "PTL_PT_EQ_NEEDED"; break; case PTL_PT_IN_USE : msg = "PTL_PT_IN_USE"; break; default : msg = "DEFAULT"; break; } return msg; } static inline void check_mpi_retval(int retval, const char *file, int line) { if (MPI_SUCCESS != retval) { const char *msg = str_mpi_retval(retval); fprintf(stderr, "{%d} MPI Error: %s: line %d: %s\n", l_state.rank, file, line, msg); MPI_Abort(l_state.world_comm, retval); } } static inline const char *str_mpi_retval(int retval) { const char *msg = NULL; switch(retval) { case MPI_SUCCESS : msg = "MPI_SUCCESS"; break; case MPI_ERR_BUFFER : msg = "MPI_ERR_BUFFER"; break; case MPI_ERR_COUNT : msg = "MPI_ERR_COUNT"; break; case MPI_ERR_TYPE : msg = "MPI_ERR_TYPE"; break; case MPI_ERR_TAG : msg = "MPI_ERR_TAG"; break; case MPI_ERR_COMM : msg = "MPI_ERR_COMM"; break; case MPI_ERR_RANK : msg = "MPI_ERR_RANK"; break; case MPI_ERR_ROOT : msg = "MPI_ERR_ROOT"; break; case MPI_ERR_GROUP : msg = "MPI_ERR_GROUP"; break; case MPI_ERR_OP : msg = "MPI_ERR_OP"; break; case MPI_ERR_TOPOLOGY : msg = "MPI_ERR_TOPOLOGY"; break; case MPI_ERR_DIMS : msg = "MPI_ERR_DIMS"; break; case MPI_ERR_ARG : msg = "MPI_ERR_ARG"; break; case MPI_ERR_UNKNOWN : msg = "MPI_ERR_UNKNOWN"; break; case MPI_ERR_TRUNCATE : msg = "MPI_ERR_TRUNCATE"; break; case MPI_ERR_OTHER : msg = "MPI_ERR_OTHER"; break; case MPI_ERR_INTERN : msg = "MPI_ERR_INTERN"; break; case MPI_ERR_IN_STATUS : msg = "MPI_ERR_IN_STATUS"; break; case MPI_ERR_PENDING : msg = "MPI_ERR_PENDING"; break; case MPI_ERR_REQUEST : msg = "MPI_ERR_REQUEST"; break; case MPI_ERR_LASTCODE : msg = "MPI_ERR_LASTCODE"; break; default : msg = "DEFAULT"; break; } return msg; } static inline void nb_process_event() { ptl_event_t ptl_event; nb_t *nb = NULL; int status = 0; if (DEBUG) { printf("[%d] nb_process_event\n", l_state.rank); } assert(nb_count_event-nb_count_event_processed > 0); #if 0 status = PtlEQWait(l_state.ptl_eq_handle, &ptl_event); CHECK_PTL_RETVAL(status); #else while (1) { unsigned int which = 1; status = PtlEQPoll(&l_state.ptl_eq_handle, 1, 500, &ptl_event, &which); if (PTL_OK == status) { assert(0 == which); break; } else if (PTL_EQ_EMPTY == status) { /* no event found, so try again */ printf("[%d] nb_process_event timeout waiting for event; retry\n" "send %d/%d reply %d/%d ack %d/%d all %d/%d\n", l_state.rank, nb_count_send_processed, nb_count_send, nb_count_reply_processed, nb_count_reply, nb_count_ack_processed, nb_count_ack, nb_count_event_processed, nb_count_event); } else { CHECK_PTL_RETVAL(status); } } #endif assert(NULL != ptl_event.user_ptr); nb = (nb_t*)(ptl_event.user_ptr); assert(NULL != nb); /* check for error condition */ if (PTL_NI_OK != ptl_event.ni_fail_type) { const char *msg = NULL; switch (ptl_event.ni_fail_type) { case PTL_NI_UNDELIVERABLE : msg = "PTL_NI_UNDELIVERABLE"; break; case PTL_NI_PT_DISABLED : msg = "PTL_NI_PT_DISABLED"; break; case PTL_NI_DROPPED : msg = "PTL_NI_DROPPED"; break; case PTL_NI_PERM_VIOLATION : msg = "PTL_NI_PERM_VIOLATION"; break; case PTL_NI_OP_VIOLATION : msg = "PTL_NI_OP_VIOLATION"; break; default : msg = "DEFAULT"; break; } fprintf(stderr, "{%d} PTL Error: %s: line %d: %s\n", l_state.rank, __FILE__, __LINE__, msg); MPI_Abort(l_state.world_comm, ptl_event.ni_fail_type); } /* decrement associated nonblocking handle */ if (PTL_EVENT_REPLY == ptl_event.type) { if (DEBUG) { printf("[%d] nb_process_event PTL_EVENT_REPLY\n", l_state.rank); } assert(nb->reply > 0); nb_count_reply_processed += 1; nb->reply -= 1; } else if (PTL_EVENT_SEND == ptl_event.type) { if (DEBUG) { printf("[%d] nb_process_event PTL_EVENT_SEND\n", l_state.rank); } assert(nb->send > 0); nb_count_send_processed += 1; nb->send -= 1; } else if (PTL_EVENT_ACK == ptl_event.type) { if (DEBUG) { printf("[%d] nb_process_event PTL_EVENT_ACK\n", l_state.rank); } assert(nb->ack > 0); nb_count_ack_processed += 1; nb->ack -= 1; } else { fprintf(stderr, "{%d} nb_process_event Error: unrecognized event\n", l_state.rank); MPI_Abort(l_state.world_comm, ptl_event.type); } nb_count_event_processed += 1; } static inline void nb_wait_for_event_space() { /* make sure we didn't overrun the event queue */ assert((nb_count_event-nb_count_event_processed) <= nb_max_outstanding); /* we need at most space for two events */ while ((nb_count_event-nb_count_event_processed) >= (nb_max_outstanding-2)) { nb_process_event(); } } static inline int nb_get_handle_index() { int value = 0; if (0 == nb_index) { value = nb_max_outstanding-1; } else { value = nb_index-1; } return value; } /** Poll event queue until resources become available. */ static inline nb_t* nb_wait_for_handle() { nb_t *nb = NULL; int in_use_count = 0; /* find first handle that isn't associated with a user-level handle */ /* make sure the handle we find has processed all events */ /* the user can accidentally exhaust the available handles */ do { ++in_use_count; if (in_use_count > nb_max_outstanding) { fprintf(stderr, "{%d} nb_wait_for_handle Error: all user-level " "nonblocking handles have been exhausted\n", l_state.rank); MPI_Abort(l_state.world_comm, -1); } nb = &nb_state[nb_index++]; nb_index %= nb_max_outstanding; /* wrap around if needed */ nb_wait_for_all(nb); } while (nb->in_use); nb_wait_for_event_space(); return nb; } static inline void nb_wait_for_send(nb_t *nb) { assert(NULL != nb); while (nb->send > 0) { nb_process_event(); } } static inline void nb_wait_for_reply(nb_t *nb) { assert(NULL != nb); while (nb->reply > 0) { nb_process_event(); } } static inline void nb_wait_for_ack(nb_t *nb) { assert(NULL != nb); while (nb->ack > 0) { nb_process_event(); } } static inline void nb_wait_for_all(nb_t *nb) { if (DEBUG) { printf("[%d] nb_wait_for_all\n", l_state.rank); } assert(NULL != nb); while (nb->send > 0 || nb->reply > 0 || nb->ack > 0) { nb_process_event(); } } static inline void nb_wait_all() { assert(nb_count_event-nb_count_event_processed >= 0); while (nb_count_event-nb_count_event_processed > 0) { nb_process_event(); } #ifndef NDEBUG { size_t i=0; for (i=0; i 0); assert(proc >= 0); assert(proc < l_state.size); assert(NULL != nb); if (l_state.rank == proc) { memcpy(dst, src, bytes); return; } peer.rank = proc; nb_wait_for_event_space(); nb_count_event += 2; nb_count_send += 1; nb_count_ack += 1; nb->send += 1; nb->ack += 1; status = PtlPut(l_state.ptl_md_handle, (ptl_size_t)src, (ptl_size_t)bytes, PTL_ACK_REQ, peer, l_state.ptl_pt_indexes[proc], (ptl_match_bits_t)0, (ptl_size_t)dst, (void*)nb, (ptl_hdr_data_t)0); CHECK_PTL_RETVAL(status); } static inline void nb_get(void *src, void *dst, int bytes, int proc, nb_t *nb) { int status = 0; ptl_process_t peer; assert(NULL != src); assert(NULL != dst); assert(bytes > 0); assert(proc >= 0); assert(proc < l_state.size); assert(NULL != nb); if (l_state.rank == proc) { memcpy(dst, src, bytes); return; } peer.rank = proc; nb_wait_for_event_space(); nb_count_event += 1; nb_count_reply += 1; nb->reply += 1; status = PtlGet(l_state.ptl_md_handle, (ptl_size_t)dst, (ptl_size_t)bytes, peer, l_state.ptl_pt_indexes[proc], (ptl_match_bits_t)0, (ptl_size_t)src, (void*)nb); CHECK_PTL_RETVAL(status); } static inline void nb_acc(int datatype, void *scale, void *src, void *dst, int bytes, int proc, nb_t *nb) { int status = 0; ptl_process_t peer; ptl_datatype_t ptl_datatype; char need_scale = 0; void *send_buf = NULL; assert(NULL != src); assert(NULL != dst); assert(bytes > 0); assert(proc >= 0); assert(proc < l_state.size); assert(NULL != nb); /* if max_atomic_size is surpassed, break up the transfer into strides */ if (bytes > l_state.ptl_ni_limits.max_atomic_size) { int i = 0; int levels = 1; int xdim = l_state.ptl_ni_limits.max_atomic_size; int ydim = bytes / xdim; int remainder = bytes % xdim; for (i=0; isend += 1; nb->ack += 1; switch (datatype) { case COMEX_ACC_INT: ptl_datatype = PTL_INT32_T; break; case COMEX_ACC_DBL: ptl_datatype = PTL_DOUBLE; break; case COMEX_ACC_FLT: ptl_datatype = PTL_FLOAT; break; case COMEX_ACC_CPL: ptl_datatype = PTL_FLOAT_COMPLEX; break; case COMEX_ACC_DCP: ptl_datatype = PTL_DOUBLE_COMPLEX; break; case COMEX_ACC_LNG: ptl_datatype = PTL_INT64_T; break; default: assert(0); } switch (datatype) { case COMEX_ACC_INT: need_scale = (*((int*)scale) != 1); break; case COMEX_ACC_DBL: need_scale = (*((double*)scale) != 1); break; case COMEX_ACC_FLT: need_scale = (*((float*)scale) != 1); break; case COMEX_ACC_CPL: need_scale = 1; break; case COMEX_ACC_DCP: need_scale = 1; break; case COMEX_ACC_LNG: need_scale = (*((long*)scale) != 1); break; default: assert(0); } if (need_scale) { /* local scaling of src */ _scale(datatype, bytes, acc_buf, src, scale); send_buf = acc_buf; } else { send_buf = src; } status = PtlAtomic(l_state.ptl_md_handle, (ptl_size_t)send_buf, (ptl_size_t)bytes, PTL_ACK_REQ, peer, l_state.ptl_pt_indexes[proc], (ptl_match_bits_t)0, (ptl_size_t)dst, (void*)nb, (ptl_hdr_data_t)NULL, PTL_SUM, ptl_datatype); CHECK_PTL_RETVAL(status); if (need_scale) { nb_wait_for_send(nb); /* so we can reuse acc_buf */ } } static inline void nb_puts( void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, nb_t *nb) { int i, j; long src_idx, dst_idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int src_bvalue[7], src_bunit[7]; int dst_bvalue[7], dst_bunit[7]; int status = 0; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) { n1dim *= count[i]; } /* calculate the destination indices */ src_bvalue[0] = 0; src_bvalue[1] = 0; src_bunit[0] = 1; src_bunit[1] = 1; dst_bvalue[0] = 0; dst_bvalue[1] = 0; dst_bunit[0] = 1; dst_bunit[1] = 1; for(i=2; i<=stride_levels; i++) { src_bvalue[i] = 0; dst_bvalue[i] = 0; src_bunit[i] = src_bunit[i-1] * count[i-1]; dst_bunit[i] = dst_bunit[i-1] * count[i-1]; } status = PtlStartBundle(l_state.ptl_ni_handle); CHECK_PTL_RETVAL(status); /* index mangling */ for(i=0; i (count[j]-1)) { src_bvalue[j] = 0; } } for(j=1; j<=stride_levels; j++) { dst_idx += dst_bvalue[j] * dst_stride[j-1]; if((i+1) % dst_bunit[j] == 0) { dst_bvalue[j]++; } if(dst_bvalue[j] > (count[j]-1)) { dst_bvalue[j] = 0; } } nb_put((char *)src + src_idx, (char *)dst + dst_idx, count[0], proc, nb); } status = PtlEndBundle(l_state.ptl_ni_handle); CHECK_PTL_RETVAL(status); } static inline void nb_gets( void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, nb_t *nb) { int i, j; long src_idx, dst_idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int src_bvalue[7], src_bunit[7]; int dst_bvalue[7], dst_bunit[7]; int status = 0; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) { n1dim *= count[i]; } /* calculate the destination indices */ src_bvalue[0] = 0; src_bvalue[1] = 0; src_bunit[0] = 1; src_bunit[1] = 1; dst_bvalue[0] = 0; dst_bvalue[1] = 0; dst_bunit[0] = 1; dst_bunit[1] = 1; for(i=2; i<=stride_levels; i++) { src_bvalue[i] = 0; dst_bvalue[i] = 0; src_bunit[i] = src_bunit[i-1] * count[i-1]; dst_bunit[i] = dst_bunit[i-1] * count[i-1]; } status = PtlStartBundle(l_state.ptl_ni_handle); CHECK_PTL_RETVAL(status); for(i=0; i (count[j]-1)) { src_bvalue[j] = 0; } } dst_idx = 0; for(j=1; j<=stride_levels; j++) { dst_idx += dst_bvalue[j] * dst_stride[j-1]; if((i+1) % dst_bunit[j] == 0) { dst_bvalue[j]++; } if(dst_bvalue[j] > (count[j]-1)) { dst_bvalue[j] = 0; } } nb_get((char *)src + src_idx, (char *)dst + dst_idx, count[0], proc, nb); } status = PtlEndBundle(l_state.ptl_ni_handle); CHECK_PTL_RETVAL(status); } static inline void nb_accs( int datatype, void *scale, void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, nb_t *nb) { int i, j; long src_idx, dst_idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int src_bvalue[7], src_bunit[7]; int dst_bvalue[7], dst_bunit[7]; int status = 0; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) { n1dim *= count[i]; } /* calculate the destination indices */ src_bvalue[0] = 0; src_bvalue[1] = 0; src_bunit[0] = 1; src_bunit[1] = 1; dst_bvalue[0] = 0; dst_bvalue[1] = 0; dst_bunit[0] = 1; dst_bunit[1] = 1; for(i=2; i<=stride_levels; i++) { src_bvalue[i] = 0; dst_bvalue[i] = 0; src_bunit[i] = src_bunit[i-1] * count[i-1]; dst_bunit[i] = dst_bunit[i-1] * count[i-1]; } status = PtlStartBundle(l_state.ptl_ni_handle); CHECK_PTL_RETVAL(status); /* index mangling */ for(i=0; i (count[j]-1)) { src_bvalue[j] = 0; } } for(j=1; j<=stride_levels; j++) { dst_idx += dst_bvalue[j] * dst_stride[j-1]; if((i+1) % dst_bunit[j] == 0) { dst_bvalue[j]++; } if(dst_bvalue[j] > (count[j]-1)) { dst_bvalue[j] = 0; } } nb_acc(datatype, scale, (char *)src + src_idx, (char *)dst + dst_idx, count[0], proc, nb); } status = PtlEndBundle(l_state.ptl_ni_handle); CHECK_PTL_RETVAL(status); } static inline void nb_putv( comex_giov_t *iov, int iov_len, int proc, nb_t *nb) { int i = 0; int status = 0; status = PtlStartBundle(l_state.ptl_ni_handle); CHECK_PTL_RETVAL(status); for (i=0; i #include "comex.h" typedef struct group_link { struct group_link *next; comex_group_t id; MPI_Comm comm; MPI_Group group; } comex_igroup_t; extern void comex_group_init(); extern void comex_group_finalize(); extern comex_igroup_t* comex_get_igroup_from_group(comex_group_t group); #endif /* _COMEX_GROUPS_H_ */ ga-5-3/comex/src-common/0000750005473000001440000000000012275260571013772 5ustar d3n000usersga-5-3/comex/src-common/comex.h0000640005473000001440000005142412247204305015255 0ustar d3n000users/* comex header file */ #ifndef _COMEX_H #define _COMEX_H #include #include #if defined(__cplusplus) || defined(c_plusplus) extern "c" { #endif typedef struct { void **src; /**< array of source starting addresses */ void **dst; /**< array of destination starting addresses */ int count; /**< size of address arrays (src[count],dst[count]) */ int bytes; /**< length in bytes for each src[i]/dst[i] pair */ } comex_giov_t; typedef int comex_request_t; typedef int comex_group_t; #define COMEX_GROUP_WORLD 0 #define COMEX_GROUP_NULL -1 #define COMEX_SUCCESS 0 #define COMEX_FAILURE 1 #define COMEX_SWAP 10 #define COMEX_SWAP_LONG 11 #define COMEX_FETCH_AND_ADD 12 #define COMEX_FETCH_AND_ADD_LONG 13 #define COMEX_ACC_OFF 36 #define COMEX_ACC_INT (COMEX_ACC_OFF + 1) #define COMEX_ACC_DBL (COMEX_ACC_OFF + 2) #define COMEX_ACC_FLT (COMEX_ACC_OFF + 3) #define COMEX_ACC_CPL (COMEX_ACC_OFF + 4) #define COMEX_ACC_DCP (COMEX_ACC_OFF + 5) #define COMEX_ACC_LNG (COMEX_ACC_OFF + 6) #define COMEX_MAX_STRIDE_LEVEL 8 /** * Initialize comex. * * @return COMEX_SUCCESS on sucess */ extern int comex_init(); /** * Initialize comex with command line arguments. * * @return COMEX_SUCCESS on sucess */ extern int comex_init_args(int *argc, char ***argv); /** * Test whether comex has been initialized. * * @return COMEX_SUCCESS if comex has been initialized * COMEX_FAILURE if comex has not */ extern int comex_initialized(); /** * Terminate comex and clean up resources. * * @return COMEX_SUCCESS on sucess */ extern int comex_finalize(); /** * Abort comex, printing the msg, and exiting with code. * * @param[in] msg the message to print * @param[in] code the code to exit with */ extern void comex_error(char *msg, int code); /** * Create a new group from the given group and process ID list. * * The rank list selects the ranks from the given group to become members of * the new group. The ranks should be nonnegative and range from zero to the * size of the given group. * * This functions is collective only over the ranks within the rank list and * not over the entire original group. * * @param[in] n the number of ranks to select for the new group * @param[in] rank_list the list of ranks to select for the new group * @param[in] group the group to subset for the new group * @param[out] new_group the newly created group * @return COMEX_SUCCESS on success * COMEX_FAILURE if a rank in the rank list is out of bounds */ extern int comex_group_create( int n, int *pid_list, comex_group_t group, comex_group_t *new_group); /** * Marks the group for deallocation. * * @param[in] group group to be destroyed * @return COMEX_SUCCESS on sucess */ extern int comex_group_free(comex_group_t group); /** * Determines the rank of the calling process in the given group. * * @param[in] group group handle * @param[out] rank rank of the calling process in the group * @return COMEX_SUCCESS on sucess */ extern int comex_group_rank(comex_group_t group, int *rank); /** * Determines the size of the given group. * * @param[in] group group handle * @param[out] size number of processes in the group * @return COMEX_SUCCESS on sucess */ extern int comex_group_size(comex_group_t group, int *size); /** * Returns the MPI_Comm object backing the given group. * * The actual MPI_Comm object is returned, therefore do not call * MPI_Comm_free() on the returned communicator. This function is for * convenience to be able to MPI_Comm_dup() the returned MPI_Comm instance. * * @param[in] group group handle * @param[out] comm the communicator handle * @return COMEX_SUCCESS on sucess */ extern int comex_group_comm(comex_group_t group, MPI_Comm *comm); /** * Translates the ranks of processes in one group to those in another group. * * @param[in] n the number of ranks in the ranks_from and ranks_to arrays * @param[in] group_from the group to translate ranks from * @param[in] ranks_from array of zer or more valid ranks in group_from * @param[in] group_to the group to translate ranks to * @param[out] ranks_to array of corresponding ranks in group_to * @return COMEX_SUCCESS on sucess */ extern int comex_group_translate_ranks(int n, comex_group_t group_from, int *ranks_from, comex_group_t group_to, int *ranks_to); /** * Translate the given rank from its group to its corresponding rank in the * world group. * * Shorthand notation for common case. * * @param[in] group the group to translate from * @param[in] group_rank the rank to translate from * @param[out] world_rank the corresponding world rank * @return COMEX_SUCCESS on sucess */ extern int comex_group_translate_world( comex_group_t group, int group_rank, int *world_rank); /** * A collective communication and operations barrier. * * Ensures all comex communication has completed prior to performing the * operations barrier. * * @param[in] group the group to perform the collective barrier over * @return COMEX_SUCCESS on sucess */ extern int comex_barrier(comex_group_t group); /** * Contiguous Put. * * @param[in] src pointer to 1st segment at source * @param[in] dst pointer to 1st segment at destination * @param[in] bytes number of bytes to transfer * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @return COMEX_SUCCESS on sucess */ extern int comex_put( void *src, void *dst, int bytes, int proc, comex_group_t group); /** * Strided Put. * * @param[in] src pointer to 1st segment at source * @param[in] src_stride array of strides at source * @param[in] dst pointer to 1st segment at destination * @param[in] dst_stride array of strides at destination * @param[in] count number of units at each stride level count[0]=bytes * @param[in] stride_levels number of stride levels * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @return COMEX_SUCCESS on success */ extern int comex_puts( void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, comex_group_t group); /** * Vector Put. * * @param[in] darr descriptor array * @param[in] len length of descriptor array * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @return COMEX_SUCCESS on success */ extern int comex_putv( comex_giov_t *darr, int len, int proc, comex_group_t group); /** * Nonblocking Contiguous Put. * * @param[in] src pointer to 1st segment at source * @param[in] dst pointer to 1st segment at destination * @param[in] bytes number of bytes to transfer * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @param[out] nb_handle nonblocking request object * @return COMEX_SUCCESS on sucess */ extern int comex_nbput( void *src, void *dst, int bytes, int proc, comex_group_t group, comex_request_t* nb_handle); /** * Nonblocking Strided Put. * * @param[in] src pointer to 1st segment at source * @param[in] src_stride array of strides at source * @param[in] dst pointer to 1st segment at destination * @param[in] dst_stride array of strides at destination * @param[in] count number of units at each stride level count[0]=bytes * @param[in] stride_levels number of stride levels * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @param[out] nb_handle nonblocking request object * @return COMEX_SUCCESS on success */ extern int comex_nbputs( void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, comex_group_t group, comex_request_t* nb_handle); /** * Nonblocking Vector Put. * * @param[in] darr descriptor array * @param[in] len length of descriptor array * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @param[out] nb_handle nonblocking request object * @return COMEX_SUCCESS on success */ extern int comex_nbputv( comex_giov_t *darr, int len, int proc, comex_group_t group, comex_request_t* nb_handle); /** * Contiguous Atomic Accumulate. * * @param[in] op operation * @param[in] scale factor x += scale*y * @param[in] src pointer to 1st segment at source * @param[in] dst pointer to 1st segment at destination * @param[in] bytes number of bytes to transfer * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @return COMEX_SUCCESS on success */ extern int comex_acc( int op, void *scale, void *src, void *dst, int bytes, int proc, comex_group_t group); /** * Strided Atomic Accumulate. * * @param[in] op operation * @param[in] scale factor x += scale*y * @param[in] src pointer to 1st segment at source * @param[in] src_stride [stride_levels] array of strides at source * @param[in] dst pointer to 1st segment at destination * @param[in] dst_stride [stride_levels] array of strides at destination * @param[in] count [stride_levels+1] number of units at each stride level * count[0]=bytes * @param[in] stride_levels number of stride levels * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @return COMEX_SUCCESS on success */ extern int comex_accs( int op, void *scale, void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, comex_group_t group); /** * Vector Atomic Accumulate. * * @param[in] op operation * @param[in] scale factor x += scale*y * @param[in] darr descriptor array * @param[in] len length of descriptor array * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @return COMEX_SUCCESS on success */ extern int comex_accv( int op, void *scale, comex_giov_t *darr, int len, int proc, comex_group_t group); /** * Nonblocking Contiguous Atomic Accumulate. * * @param[in] op operation * @param[in] scale factor x += scale*y * @param[in] src pointer to 1st segment at source * @param[in] dst pointer to 1st segment at destination * @param[in] bytes number of bytes to transfer * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @param[out] nb_handle nonblocking request object * @return COMEX_SUCCESS on success */ extern int comex_nbacc( int op, void *scale, void *src, void *dst, int bytes, int proc, comex_group_t group, comex_request_t *nb_handle); /** * Strided Atomic Accumulate. * * @param[in] op operation * @param[in] scale factor x += scale*y * @param[in] src pointer to 1st segment at source * @param[in] src_stride array of strides at source * @param[in] dst pointer to 1st segment at destination * @param[in] dst_stride array of strides at destination * @param[in] count number of units at each stride level count[0]=bytes * @param[in] stride_levels number of stride levels * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @param[out] nb_handle nonblocking request object * @return COMEX_SUCCESS on success */ extern int comex_nbaccs( int op, void *scale, void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, comex_group_t group, comex_request_t* nb_handle); /** * Vector Atomic Accumulate. * * @param[in] op operation * @param[in] scale factor x += scale*y * @param[in] darr descriptor array * @param[in] len length of descriptor array * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @param[out] nb_handle nonblocking request object * @return COMEX_SUCCESS on success */ extern int comex_nbaccv( int op, void *scale, comex_giov_t *darr, int len, int proc, comex_group_t group, comex_request_t* nb_handle); /** * Contiguous Get. * * @param[in] src pointer to 1st segment at source * @param[in] dst pointer to 1st segment at destination * @param[in] bytes number of bytes to transfer * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @return COMEX_SUCCESS on sucess */ extern int comex_get( void *src, void *dst, int bytes, int proc, comex_group_t group); /** * Strided Get. * * @param[in] src pointer to 1st segment at source * @param[in] src_stride array of strides at source * @param[in] dst pointer to 1st segment at destination * @param[in] dst_stride array of strides at destination * @param[in] count number of units at each stride level count[0]=bytes * @param[in] stride_levels number of stride levels * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @return COMEX_SUCCESS on success */ extern int comex_gets( void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, comex_group_t group); /** * Vector Get. * * @param[in] darr descriptor array * @param[in] len length of descriptor array * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @return COMEX_SUCCESS on success */ extern int comex_getv( comex_giov_t *darr, int len, int proc, comex_group_t group); /** * Nonblocking Contiguous Get. * * @param[in] src pointer to 1st segment at source * @param[in] dst pointer to 1st segment at destination * @param[in] bytes number of bytes to transfer * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @param[out] nb_handle nonblocking request object * @return COMEX_SUCCESS on sucess */ extern int comex_nbget( void *src, void *dst, int bytes, int proc, comex_group_t group, comex_request_t* nb_handle); /** * Nonblocking Strided Get. * * @param[in] src pointer to 1st segment at source * @param[in] src_stride array of strides at source * @param[in] dst pointer to 1st segment at destination * @param[in] dst_stride array of strides at destination * @param[in] count number of units at each stride level count[0]=bytes * @param[in] stride_levels number of stride levels * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @param[out] nb_handle nonblocking request object * @return COMEX_SUCCESS on success */ extern int comex_nbgets( void *src, int *src_stride, void *dst, int *dst_stride, int *count, int stride_levels, int proc, comex_group_t group, comex_request_t *nb_handler); /** * Nonblocking Vector Get. * * @param[in] darr descriptor array * @param[in] len length of descriptor array * @param[in] proc remote process(or) id * @param[in] group the calling process and remote process must belong to the * same group * @param[out] nb_handle nonblocking request object * @return COMEX_SUCCESS on success */ extern int comex_nbgetv( comex_giov_t *darr, int len, int proc, comex_group_t group, comex_request_t* nb_handle); /** * Collective allocation of registered memory and exchange of addresses. * * @param[out] ptr_arr array of memory addresses * w.r.t. each process's address space * @param[in] bytes how many bytes to allocate locally * @param[in] group the group to which the calling process belongs * @return COMEX_SUCCESS on success */ extern int comex_malloc( void **ptr_arr, size_t bytes, comex_group_t group); /** * Collective free of memory given the original local pointer. * * @param[in] ptr the original local memory allocated using comex_malloc * @param[in] group the group to which the calling process belongs * @return COMEX_SUCCESS on success */ extern int comex_free(void *ptr, comex_group_t group); /** * Local (noncollective) allocation of registered memory. * * Using memory allocated here may have performance benefits when used as a * communication buffer. * * @param[in] bytes how many bytes to allocate locally * @return COMEX_SUCCESS on success */ extern void* comex_malloc_local(size_t bytes); /** * Local (noncollective) free of memory allocated by comex_malloc_local. * * @param[in] the original local memory allocated using comex_malloc_local * @return COMEX_SUCCESS on success */ extern int comex_free_local(void *ptr); /** * Flush all outgoing messages from me to the given proc. * * @param[in] proc the proc with which to flush outgoing messages * @return COMEX_SUCCESS on success */ extern int comex_fence_proc(int proc, comex_group_t group); /** * Flush all outgoing messages to all procs. * * @return COMEX_SUCCESS on success */ extern int comex_fence_all(comex_group_t group); /** * Collectively create num locks locally. * * Remote procs may create a different number of locks, including zero. * * This function is always collective on the world group. * * @param[in] num number of locks to create locally * @return COMEX_SUCCESS on success */ extern int comex_create_mutexes(int num); /** * Collectively destroy all previously created locks. * * This function is always collective on the world group. * * @param[in] num number of locks to create locally * @return COMEX_SUCCESS on success */ extern int comex_destroy_mutexes(); /** * Lock the given mutex on the given proc. * * This function is always on the world group. * * @param[in] mutex the ID of the mutex to lock on proc * @param[in] the ID of the proc which owns the mutex * * @return COMEX_SUCCESS on success * COMEX_FAILURE if given mutex or proc is out of range */ extern int comex_lock(int mutex, int proc); /** * Unlock the given mutex on the given proc. * * This function is always on the world group. * * @param[in] mutex the ID of the mutex to unlock on proc * @param[in] the ID of the proc which owns the mutex * * @return COMEX_SUCCESS on success * COMEX_FAILURE if given mutex or proc is out of range */ extern int comex_unlock(int mutex, int proc); /** * Read-modify-write atomic operation. * * The operations may be one of * - COMEX_SWAP * - COMEX_SWAP_LONG * - COMEX_FETCH_AND_ADD * - COMEX_FETCH_AND_ADD_LONG * * For the swap operations, the extra parameter is not used. The values of the * ploc and prem locations are swapped. * * For the fetch and add operations, the extra parameter is also used to * indicate how much to increment the remote value. The original remove value * is returned in the ploc parameter. * * @param[in] op the operation to perform (see list above) * @param[in] ploc the value to update locally * @param[in] prem the value to update remotely * @param[in] extra for COMEX_FETCH_AND_ADD and COMEX_FETCH_AND_ADD_LONG, the * amount to increment the remote value by * @param[in] proc remote process(or) id * @param[in] group group handle * @return COMEX_SUCCESS on sucess */ extern int comex_rmw( int op, void *ploc, void *prem, int extra, int proc, comex_group_t group); /** * Waits for completion of non-blocking comex operations with explicit handles. * * @param[in] nb_handle the handle * @return COMEX_SUCCESS on sucess */ extern int comex_wait(comex_request_t *nb_handle); /** * Checks completion status of non-blocking comex operations with explicit * handles. * * @param[in] nb_handle the handle * @param[out] status 0-completed, 1-in progress * @return COMEX_SUCCESS on sucess */ extern int comex_test(comex_request_t *nb_handle, int *status); /** * Wait for all outstanding implicit non-blocking operations to finish. * * @param[in] group group handle * @return COMEX_SUCCESS on sucess */ extern int comex_wait_all(comex_group_t group); /** * Wait for all outstanding implicit non-blocking operations to a particular * process to finish. * * @param[in] proc proc for which all the outstanding non-blocking operations * have to be completed * @param[in] group group handle * @return COMEX_SUCCESS on sucess */ extern int comex_wait_proc(int proc, comex_group_t group); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif /* _COMEX_H */ ga-5-3/comex/src-common/acc.h0000640005473000001440000001174612274750307014703 0ustar d3n000users#ifndef _COMEX_COMMON_ACC_H_ #define _COMEX_COMMON_ACC_H_ #include "comex.h" /* needed for complex accumulate */ typedef struct { double real; double imag; } DoubleComplex; typedef struct { float real; float imag; } SingleComplex; #if SIZEOF_INT == BLAS_SIZE #define BLAS_INT int #elif SIZEOF_LONG == BLAS_SIZE #define BLAS_INT long #elif SIZEOF_LONG_LONG == BLAS_SIZE #define BLAS_INT long long #endif #define IADD_SCALE_REG(A,B,C) (A) += (B) * (C) #define IADD_SCALE_CPL(A,B,C) \ (A).real += ((B).real*(C).real) - ((B).imag*(C).imag);\ (A).imag += ((B).real*(C).imag) + ((B).imag*(C).real); #define MUL_REG(A,B,C) (A) = (B) * (C) #define MUL_CPL(A,B,C) \ (A).real = ((B).real*(C).real) - ((B).imag*(C).imag);\ (A).imag = ((B).real*(C).imag) + ((B).imag*(C).real); static inline void _scale( const int op, const int bytes, void * const restrict dst, const void * const restrict src, const void * const restrict scale) { #define SCALE_BLAS(COMEX_TYPE, C_TYPE, LETTER) \ if (op == COMEX_TYPE) { \ const BLAS_INT ONE = 1; \ const BLAS_INT N = bytes/sizeof(C_TYPE); \ BLAS_##LETTER##COPY(&N, src, &ONE, dst, &ONE); \ BLAS_##LETTER##AXPY(&N, scale, src, &ONE, dst, &ONE); \ } else #define SCALE(WHICH, COMEX_TYPE, C_TYPE) \ if (op == COMEX_TYPE) { \ int m; \ const int m_lim = bytes/sizeof(C_TYPE); \ C_TYPE * const restrict iterator = (C_TYPE * const restrict )dst; \ const C_TYPE * const restrict value = (const C_TYPE * const restrict)src;\ const C_TYPE calc_scale = *(const C_TYPE * const restrict )scale; \ for (m = 0 ; m < m_lim; ++m) { \ MUL_##WHICH(iterator[m], value[m], calc_scale); \ } \ } else #if HAVE_BLAS SCALE_BLAS(COMEX_ACC_DBL, double, D) SCALE_BLAS(COMEX_ACC_FLT, float, S) SCALE(REG, COMEX_ACC_INT, int) SCALE(REG, COMEX_ACC_LNG, long) SCALE_BLAS(COMEX_ACC_DCP, DoubleComplex, Z) SCALE_BLAS(COMEX_ACC_CPL, SingleComplex, C) #else SCALE(REG, COMEX_ACC_DBL, double) SCALE(REG, COMEX_ACC_FLT, float) SCALE(REG, COMEX_ACC_INT, int) SCALE(REG, COMEX_ACC_LNG, long) SCALE(CPL, COMEX_ACC_DCP, DoubleComplex) SCALE(CPL, COMEX_ACC_CPL, SingleComplex) #endif { #ifdef COMEX_ASSERT COMEX_ASSERT(0); #else assert(0); #endif } #undef SCALE_BLAS #undef SCALE } static inline void _acc( const int op, const int bytes, void * const restrict dst, const void * const restrict src, const void * const restrict scale) { #define ACC_BLAS(COMEX_TYPE, C_TYPE, LETTER) \ if (op == COMEX_TYPE) { \ const BLAS_INT ONE = 1; \ const BLAS_INT N = bytes/sizeof(C_TYPE); \ BLAS_##LETTER##AXPY(&N, scale, src, &ONE, dst, &ONE); \ } else #define ACC(WHICH, COMEX_TYPE, C_TYPE) \ if (op == COMEX_TYPE) { \ int m; \ const int m_lim = bytes/sizeof(C_TYPE); \ C_TYPE * const restrict iterator = (C_TYPE * const restrict)dst; \ const C_TYPE * const restrict value = (const C_TYPE * const restrict)src;\ const C_TYPE calc_scale = *(const C_TYPE * const restrict)scale; \ for (m = 0 ; m < m_lim; ++m) { \ IADD_SCALE_##WHICH(iterator[m], value[m], calc_scale); \ } \ } else #if HAVE_BLAS ACC_BLAS(COMEX_ACC_DBL, double, D) ACC_BLAS(COMEX_ACC_FLT, float, S) ACC(REG, COMEX_ACC_INT, int) ACC(REG, COMEX_ACC_LNG, long) ACC_BLAS(COMEX_ACC_DCP, DoubleComplex, Z) ACC_BLAS(COMEX_ACC_CPL, SingleComplex, C) #else ACC(REG, COMEX_ACC_DBL, double) ACC(REG, COMEX_ACC_FLT, float) ACC(REG, COMEX_ACC_INT, int) ACC(REG, COMEX_ACC_LNG, long) ACC(CPL, COMEX_ACC_DCP, DoubleComplex) ACC(CPL, COMEX_ACC_CPL, SingleComplex) #endif { #ifdef COMEX_ASSERT COMEX_ASSERT(0); #else assert(0); #endif } #undef ACC_BLAS #undef ACC } #undef IADD_SCALE_REG #undef IADD_SCALE_CPL #undef MUL_REG #undef MUL_CPL #undef BLAS_INT #endif /* _COMEX_COMMON_ACC_H_ */ ga-5-3/comex/src-template/0000750005473000001440000000000012275260570014314 5ustar d3n000usersga-5-3/comex/src-template/Makefile.inc0000640005473000001440000000045712102576350016526 0ustar d3n000users# NOTE: Replace 'template' with appropriate name of new src-xxx directory. libcomex_la_SOURCES += src-template/comex.c libcomex_la_SOURCES += src-template/comex_impl.h libcomex_la_SOURCES += src-template/groups.c libcomex_la_SOURCES += src-template/groups.h AM_CPPFLAGS += -I$(top_srcdir)/src-template ga-5-3/comex/src-template/comex_impl.h0000640005473000001440000000031512102601247016606 0ustar d3n000users#ifndef COMEX_IMPL_H_ #define COMEX_IMPL_H_ #include typedef struct { MPI_Comm world_comm; int rank; int size; } local_state; extern local_state l_state; #endif /* COMEX_IMPL_H_ */ ga-5-3/comex/src-template/groups.c0000640005473000001440000002066712102576350016006 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include "comex.h" #include "comex_impl.h" #include "groups.h" /* the HEAD of the group linked list */ comex_igroup_t *group_list = NULL; /* static functions implemented in this file */ static void comex_create_group_and_igroup( comex_group_t *id, comex_igroup_t **igroup); static void comex_igroup_finalize(comex_igroup_t *igroup); /** * Return the comex igroup instance given the group id. * * The group linked list is searched sequentially until the given group * is found. It is an error if this function is called before * comex_group_init(). An error occurs if the given group is not found. */ comex_igroup_t* comex_get_igroup_from_group(comex_group_t id) { comex_igroup_t *current_group_list_item = group_list; assert(group_list != NULL); while (current_group_list_item != NULL) { if (current_group_list_item->id == id) { return current_group_list_item; } current_group_list_item = current_group_list_item->next; } comex_error("comex group lookup failed", -1); return NULL; } /** * Creates and associates an comex group with an comex igroup. * * This does *not* initialize the members of the comex igroup. */ static void comex_create_group_and_igroup( comex_group_t *id, comex_igroup_t **igroup) { comex_igroup_t *new_group_list_item = NULL; comex_igroup_t *last_group_list_item = NULL; /* find the last group in the group linked list */ last_group_list_item = group_list; while (last_group_list_item->next != NULL) { last_group_list_item = last_group_list_item->next; } /* create, init, and insert the new node for the linked list */ new_group_list_item = malloc(sizeof(comex_igroup_t)); new_group_list_item->id = last_group_list_item->id + 1; new_group_list_item->comm = MPI_COMM_NULL; new_group_list_item->group = MPI_GROUP_NULL; new_group_list_item->next = NULL; last_group_list_item->next = new_group_list_item; /* return the group id and comex igroup */ *igroup = new_group_list_item; *id = new_group_list_item->id; } int comex_group_rank(comex_group_t group, int *rank) { int status; comex_igroup_t *igroup = comex_get_igroup_from_group(group); status = MPI_Group_rank(igroup->group, rank); if (status != MPI_SUCCESS) { comex_error("MPI_Group_rank: Failed ", status); } return COMEX_SUCCESS; } int comex_group_size(comex_group_t group, int *size) { int status; comex_igroup_t *igroup = comex_get_igroup_from_group(group); status = MPI_Group_size(igroup->group, size); if (status != MPI_SUCCESS) { comex_error("MPI_Group_size: Failed ", status); } return COMEX_SUCCESS; } int comex_group_comm(comex_group_t group, MPI_Comm *comm) { int status; comex_igroup_t *igroup = comex_get_igroup_from_group(group); *comm = igroup->comm; return COMEX_SUCCESS; } int comex_group_translate_world(comex_group_t group, int group_rank, int *world_rank) { if (COMEX_GROUP_WORLD == group) { *world_rank = group_rank; } else { comex_igroup_t *igroup = comex_get_igroup_from_group(group); comex_igroup_t *world_igroup = comex_get_igroup_from_group(COMEX_GROUP_WORLD); int status = MPI_Group_translate_ranks( igroup->group, 1, &group_rank, world_igroup->group, world_rank); if (status != MPI_SUCCESS) { comex_error("MPI_Group_translate_ranks: Failed ", status); } } return COMEX_SUCCESS; } /** * Destroys the given comex igroup. */ static void comex_igroup_finalize(comex_igroup_t *igroup) { int status; assert(igroup); if (igroup->group != MPI_GROUP_NULL) { status = MPI_Group_free(&igroup->group); if (status != MPI_SUCCESS) { comex_error("MPI_Group_free: Failed ", status); } } if (igroup->comm != MPI_COMM_NULL) { status = MPI_Comm_free(&igroup->comm); if (status != MPI_SUCCESS) { comex_error("MPI_Comm_free: Failed ", status); } } } int comex_group_free(comex_group_t id) { comex_igroup_t *current_group_list_item = group_list; comex_igroup_t *previous_group_list_item = NULL; /* find the group to free */ while (current_group_list_item != NULL) { if (current_group_list_item->id == id) { break; } previous_group_list_item = current_group_list_item; current_group_list_item = current_group_list_item->next; } /* make sure we found a group */ assert(current_group_list_item != NULL); /* remove the group from the linked list */ if (previous_group_list_item != NULL) { previous_group_list_item->next = current_group_list_item->next; } /* free the group */ comex_igroup_finalize(current_group_list_item); free(current_group_list_item); return COMEX_SUCCESS; } int comex_group_create( int n, int *pid_list, comex_group_t id_parent, comex_group_t *id_child) { int status; int grp_me; comex_igroup_t *igroup_child = NULL; MPI_Group *group_child = NULL; MPI_Comm *comm_child = NULL; comex_igroup_t *igroup_parent = NULL; MPI_Group *group_parent = NULL; MPI_Comm *comm_parent = NULL; /* create the node in the linked list of groups and */ /* get the child's MPI_Group and MPI_Comm, to be populated shortly */ comex_create_group_and_igroup(id_child, &igroup_child); group_child = &(igroup_child->group); comm_child = &(igroup_child->comm); /* get the parent's MPI_Group and MPI_Comm */ igroup_parent = comex_get_igroup_from_group(id_parent); group_parent = &(igroup_parent->group); comm_parent = &(igroup_parent->comm); status = MPI_Group_incl(*group_parent, n, pid_list, group_child); if (status != MPI_SUCCESS) { comex_error("MPI_Group_incl: Failed ", status); } { MPI_Comm comm, comm1, comm2; int lvl=1, local_ldr_pos; MPI_Group_rank(*group_child, &grp_me); if (grp_me == MPI_UNDEFINED) { /* FIXME: keeping the group around for now */ return COMEX_SUCCESS; } /* SK: sanity check for the following bitwise operations */ assert(grp_me>=0); MPI_Comm_dup(MPI_COMM_SELF, &comm); /* FIXME: can be optimized away */ local_ldr_pos = grp_me; while(n>lvl) { int tag=0; int remote_ldr_pos = local_ldr_pos^lvl; if (remote_ldr_pos < n) { int remote_leader = pid_list[remote_ldr_pos]; MPI_Comm peer_comm = *comm_parent; int high = (local_ldr_posid = COMEX_GROUP_WORLD; group_list->next = NULL; /* save MPI world group and communicatior in COMEX_GROUP_WORLD */ group_list->comm = l_state.world_comm; MPI_Comm_group(group_list->comm, &(group_list->group)); } void comex_group_finalize() { comex_igroup_t *current_group_list_item = group_list; comex_igroup_t *previous_group_list_item = NULL; /* don't free the world group (the list head) */ current_group_list_item = current_group_list_item->next; while (current_group_list_item != NULL) { previous_group_list_item = current_group_list_item; current_group_list_item = current_group_list_item->next; comex_igroup_finalize(previous_group_list_item); free(previous_group_list_item); } /* ok, now free the world group, but not the world comm */ MPI_Group_free(&(group_list->group)); free(group_list); group_list = NULL; } ga-5-3/comex/src-template/comex.c0000640005473000001440000004675612102601247015603 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* C and/or system headers */ #include #include #include #include #include #include /* 3rd party headers */ #include /* our headers */ #include "comex.h" #include "comex_impl.h" #include "groups.h" #define DEBUG 0 /* exported state */ local_state l_state; /* static state */ static int initialized=0; /* for comex_initialized(), 0=false */ static char skip_lock=0; /* don't acquire or release lock */ /* static function declarations */ static void acquire_remote_lock(int proc); static void release_remote_lock(int proc); static inline void acc( int datatype, int count, void *get_buf, void *src_ptr, long src_idx, void *scale); /* needed for complex accumulate */ typedef struct { double real; double imag; } DoubleComplex; typedef struct { float real; float imag; } SingleComplex; int comex_init() { int status; if (initialized) { return 0; } initialized = 1; /* Assert MPI has been initialized */ int init_flag; status = MPI_Initialized(&init_flag); assert(MPI_SUCCESS == status); assert(init_flag); /* Duplicate the World Communicator */ status = MPI_Comm_dup(MPI_COMM_WORLD, &(l_state.world_comm)); assert(MPI_SUCCESS == status); assert(l_state.world_comm); /* My Rank */ status = MPI_Comm_rank(l_state.world_comm, &(l_state.rank)); assert(MPI_SUCCESS == status); /* World Size */ status = MPI_Comm_size(l_state.world_comm, &(l_state.size)); assert(MPI_SUCCESS == status); /* groups */ comex_group_init(); /* Synch - Sanity Check */ MPI_Barrier(l_state.world_comm); return COMEX_SUCCESS; } int comex_init_args(int *argc, char ***argv) { int init_flag; MPI_Initialized(&init_flag); if(!init_flag) { MPI_Init(argc, argv); } return comex_init(); } int comex_initialized() { return initialized; } void comex_error(char *msg, int code) { fprintf(stderr,"[%d] Received an Error in Communication: (%d) %s\n", l_state.rank, code, msg); MPI_Abort(l_state.world_comm, code); } int comex_put( void *src, void *dst, int bytes, int proc, comex_group_t group) { assert(0); return COMEX_SUCCESS; } int comex_get( void *src, void *dst, int bytes, int proc, comex_group_t group) { assert(0); return COMEX_SUCCESS; } int comex_acc( int datatype, void *scale, void *src_ptr, void *dst_ptr, int bytes, int proc, comex_group_t group) { return comex_accs( datatype, scale, src_ptr, NULL, dst_ptr, NULL, &bytes, 0, proc, group); } int comex_puts( void *src_ptr, int *src_stride_ar, void *dst_ptr, int *dst_stride_ar, int *count, int stride_levels, int proc, comex_group_t group) { int i, j; long src_idx, dst_idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int src_bvalue[7], src_bunit[7]; int dst_bvalue[7], dst_bunit[7]; int status; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) { n1dim *= count[i]; } /* calculate the destination indices */ src_bvalue[0] = 0; src_bvalue[1] = 0; src_bunit[0] = 1; src_bunit[1] = 1; dst_bvalue[0] = 0; dst_bvalue[1] = 0; dst_bunit[0] = 1; dst_bunit[1] = 1; for(i=2; i<=stride_levels; i++) { src_bvalue[i] = 0; dst_bvalue[i] = 0; src_bunit[i] = src_bunit[i-1] * count[i-1]; dst_bunit[i] = dst_bunit[i-1] * count[i-1]; } /* index mangling */ for(i=0; i (count[j]-1)) { src_bvalue[j] = 0; } } for(j=1; j<=stride_levels; j++) { dst_idx += dst_bvalue[j] * dst_stride_ar[j-1]; if((i+1) % dst_bunit[j] == 0) { dst_bvalue[j]++; } if(dst_bvalue[j] > (count[j]-1)) { dst_bvalue[j] = 0; } } status = comex_put((char *)src_ptr + src_idx, (char *)dst_ptr + dst_idx, count[0], proc, group); assert(status == COMEX_SUCCESS); } return COMEX_SUCCESS; } int comex_gets( void *src_ptr, int *src_stride_ar, void *dst_ptr, int *dst_stride_ar, int *count, int stride_levels, int proc, comex_group_t group) { int i, j; long src_idx, dst_idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int src_bvalue[7], src_bunit[7]; int dst_bvalue[7], dst_bunit[7]; int status; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) { n1dim *= count[i]; } /* calculate the destination indices */ src_bvalue[0] = 0; src_bvalue[1] = 0; src_bunit[0] = 1; src_bunit[1] = 1; dst_bvalue[0] = 0; dst_bvalue[1] = 0; dst_bunit[0] = 1; dst_bunit[1] = 1; for(i=2; i<=stride_levels; i++) { src_bvalue[i] = 0; dst_bvalue[i] = 0; src_bunit[i] = src_bunit[i-1] * count[i-1]; dst_bunit[i] = dst_bunit[i-1] * count[i-1]; } for(i=0; i (count[j]-1)) { src_bvalue[j] = 0; } } dst_idx = 0; for(j=1; j<=stride_levels; j++) { dst_idx += dst_bvalue[j] * dst_stride_ar[j-1]; if((i+1) % dst_bunit[j] == 0) { dst_bvalue[j]++; } if(dst_bvalue[j] > (count[j]-1)) { dst_bvalue[j] = 0; } } status = comex_get((char *)src_ptr + src_idx, (char *)dst_ptr + dst_idx, count[0], proc, group); assert(status == COMEX_SUCCESS); } return COMEX_SUCCESS; } int comex_accs( int datatype, void *scale, void *src_ptr, int *src_stride_ar, void *dst_ptr, int *dst_stride_ar, int *count, int stride_levels, int proc, comex_group_t group) { int i, j; long src_idx, dst_idx; /* index offset of current block position to ptr */ int n1dim; /* number of 1 dim block */ int src_bvalue[7], src_bunit[7]; int dst_bvalue[7], dst_bunit[7]; void *get_buf; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i<=stride_levels; i++) n1dim *= count[i]; /* calculate the destination indices */ src_bvalue[0] = 0; src_bvalue[1] = 0; src_bunit[0] = 1; src_bunit[1] = 1; dst_bvalue[0] = 0; dst_bvalue[1] = 0; dst_bunit[0] = 1; dst_bunit[1] = 1; for(i=2; i<=stride_levels; i++) { src_bvalue[i] = 0; dst_bvalue[i] = 0; src_bunit[i] = src_bunit[i-1] * count[i-1]; dst_bunit[i] = dst_bunit[i-1] * count[i-1]; } if (0 == skip_lock) { // grab the atomics lock acquire_remote_lock(proc); } get_buf = (char *)malloc(sizeof(char) * count[0]); assert(get_buf); for(i=0; i (count[j]-1)) { src_bvalue[j] = 0; } } dst_idx = 0; for(j=1; j<=stride_levels; j++) { dst_idx += dst_bvalue[j] * dst_stride_ar[j-1]; if((i+1) % dst_bunit[j] == 0) { dst_bvalue[j]++; } if(dst_bvalue[j] > (count[j]-1)) { dst_bvalue[j] = 0; } } // Get the remote data in a temp buffer comex_get((char *)dst_ptr + dst_idx, get_buf, count[0], proc, group); // Local accumulate acc(datatype, count[0], get_buf, src_ptr, src_idx, scale); // Write back to remote data comex_put(get_buf, (char *)dst_ptr + dst_idx, count[0], proc, group); } if (0 == skip_lock) { // ungrab the lock release_remote_lock(proc); } free(get_buf); return COMEX_SUCCESS; } int comex_putv( comex_giov_t *iov, int iov_len, int proc, comex_group_t group) { int status; int i; for (i=0; icomm; assert(comm != MPI_COMM_NULL); MPI_Comm_rank(comm, &comm_rank); MPI_Comm_size(comm, &comm_size); /* allocate and register segment */ ptrs[comm_rank] = comex_malloc_local(sizeof(char)*size); /* exchange buffer address */ /* @TODO: Consider using MPI_IN_PLACE? */ memcpy(&src_buf, &ptrs[comm_rank], sizeof(void *)); MPI_Allgather(&src_buf, sizeof(void *), MPI_BYTE, ptrs, sizeof(void *), MPI_BYTE, comm); MPI_Barrier(comm); return COMEX_SUCCESS; } int comex_free(void *ptr, comex_group_t group) { comex_igroup_t *igroup = NULL; MPI_Comm comm = MPI_COMM_NULL; int comm_rank; int comm_size; long **allgather_ptrs = NULL; /* preconditions */ assert(NULL != ptr); igroup = comex_get_igroup_from_group(group); comm = igroup->comm; assert(comm != MPI_COMM_NULL); MPI_Comm_rank(comm, &comm_rank); MPI_Comm_size(comm, &comm_size); /* allocate receive buffer for exchange of pointers */ allgather_ptrs = (long **)malloc(sizeof(void *) * comm_size); assert(allgather_ptrs); /* exchange of pointers */ MPI_Allgather(&ptr, sizeof(void *), MPI_BYTE, allgather_ptrs, sizeof(void *), MPI_BYTE, comm); /* TODO do something useful with pointers */ /* remove my ptr from reg cache and free ptr */ comex_free_local(ptr); free(allgather_ptrs); /* Is this needed? */ MPI_Barrier(comm); return COMEX_SUCCESS; } static void acquire_remote_lock(int proc) { assert(0); } static void release_remote_lock(int proc) { assert(0); } static inline void acc( int datatype, int count, void *get_buf, void *src_ptr, long src_idx, void *scale) { #define EQ_ONE_REG(A) ((A) == 1.0) #define EQ_ONE_CPL(A) ((A).real == 1.0 && (A).imag == 0.0) #define IADD_REG(A,B) (A) += (B) #define IADD_CPL(A,B) (A).real += (B).real; (A).imag += (B).imag #define IADD_SCALE_REG(A,B,C) (A) += (B) * (C) #define IADD_SCALE_CPL(A,B,C) (A).real += ((B).real*(C).real) - ((B).imag*(C).imag);\ (A).imag += ((B).real*(C).imag) + ((B).imag*(C).real); #define ACC(WHICH, COMEX_TYPE, C_TYPE) \ if (datatype == COMEX_TYPE) { \ int m; \ int m_lim = count/sizeof(C_TYPE); \ C_TYPE *iterator = (C_TYPE *)get_buf; \ C_TYPE *value = (C_TYPE *)((char *)src_ptr + src_idx); \ C_TYPE calc_scale = *(C_TYPE *)scale; \ if (EQ_ONE_##WHICH(calc_scale)) { \ for (m = 0 ; m < m_lim; ++m) { \ IADD_##WHICH(iterator[m], value[m]); \ } \ } \ else { \ for (m = 0 ; m < m_lim; ++m) { \ IADD_SCALE_##WHICH(iterator[m], value[m], calc_scale); \ } \ } \ } else ACC(REG, COMEX_ACC_DBL, double) ACC(REG, COMEX_ACC_FLT, float) ACC(REG, COMEX_ACC_INT, int) ACC(REG, COMEX_ACC_LNG, long) ACC(CPL, COMEX_ACC_DCP, DoubleComplex) ACC(CPL, COMEX_ACC_CPL, SingleComplex) { assert(0); } #undef ACC #undef EQ_ONE_REG #undef EQ_ONE_CPL #undef IADD_REG #undef IADD_CPL #undef IADD_SCALE_REG #undef IADD_SCALE_CPL } ga-5-3/comex/src-template/groups.h0000640005473000001440000000107312102576350016001 0ustar d3n000users/** * Private header file for comex groups backed by MPI_comm. * * The rest of the comex group functions are defined in the public comex.h. * * @author Jeff Daily */ #ifndef _COMEX_GROUPS_H_ #define _COMEX_GROUPS_H_ #include #include "comex.h" typedef struct group_link { struct group_link *next; comex_group_t id; MPI_Comm comm; MPI_Group group; } comex_igroup_t; extern void comex_group_init(); extern void comex_group_finalize(); extern comex_igroup_t* comex_get_igroup_from_group(comex_group_t group); #endif /* _COMEX_GROUPS_H_ */ ga-5-3/comex/compat/0000750005473000001440000000000012275260567013205 5ustar d3n000usersga-5-3/comex/compat/random.c0000640005473000001440000003320211633465620014624 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* * Copyright (c) 1983 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that the above copyright notice and this paragraph are * duplicated in all such forms and that any documentation, * advertising materials, and other materials related to such * distribution and use acknowledge that the software was developed * by the University of California, Berkeley. The name of the * University may not be used to endorse or promote products derived * from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)random.c 5.5 (Berkeley) 7/6/88"; #endif /* LIBC_SCCS and not lint */ #include /* * random.c: * An improved random number generation package. In addition to the standard * rand()/srand() like interface, this package also has a special state info * interface. The initstate() routine is called with a seed, an array of * bytes, and a count of how many bytes are being passed in; this array is then * initialized to contain information for random number generation with that * much state information. Good sizes for the amount of state information are * 32, 64, 128, and 256 bytes. The state can be switched by calling the * setstate() routine with the same array as was initiallized with initstate(). * By default, the package runs with 128 bytes of state information and * generates far better random numbers than a linear congruential generator. * If the amount of state information is less than 32 bytes, a simple linear * congruential R.N.G. is used. * Internally, the state information is treated as an array of longs; the * zeroeth element of the array is the type of R.N.G. being used (small * integer); the remainder of the array is the state information for the * R.N.G. Thus, 32 bytes of state information will give 7 longs worth of * state information, which will allow a degree seven polynomial. (Note: the * zeroeth word of state information also has some other information stored * in it -- see setstate() for details). * The random number generation technique is a linear feedback shift register * approach, employing trinomials (since there are fewer terms to sum up that * way). In this approach, the least significant bit of all the numbers in * the state table will act as a linear feedback shift register, and will have * period 2^deg - 1 (where deg is the degree of the polynomial being used, * assuming that the polynomial is irreducible and primitive). The higher * order bits will have longer periods, since their values are also influenced * by pseudo-random carries out of the lower bits. The total period of the * generator is approximately deg*(2**deg - 1); thus doubling the amount of * state information has a vast influence on the period of the generator. * Note: the deg*(2**deg - 1) is an approximation only good for large deg, * when the period of the shift register is the dominant factor. With deg * equal to seven, the period is actually much longer than the 7*(2**7 - 1) * predicted by this formula. */ /* * For each of the currently supported random number generators, we have a * break value on the amount of state information (you need at least this * many bytes of state info to support this random number generator), a degree * for the polynomial (actually a trinomial) that the R.N.G. is based on, and * the separation between the two lower order coefficients of the trinomial. */ #define TYPE_0 0 /* linear congruential */ #define BREAK_0 8 #define DEG_0 0 #define SEP_0 0 #define TYPE_1 1 /* x**7 + x**3 + 1 */ #define BREAK_1 32 #define DEG_1 7 #define SEP_1 3 #define TYPE_2 2 /* x**15 + x + 1 */ #define BREAK_2 64 #define DEG_2 15 #define SEP_2 1 #define TYPE_3 3 /* x**31 + x**3 + 1 */ #define BREAK_3 128 #define DEG_3 31 #define SEP_3 3 #define TYPE_4 4 /* x**63 + x + 1 */ #define BREAK_4 256 #define DEG_4 63 #define SEP_4 1 /* * Array versions of the above information to make code run faster -- relies * on fact that TYPE_i == i. */ #define MAX_TYPES 5 /* max number of types above */ static int degrees[ MAX_TYPES ] = { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 }; static int seps[ MAX_TYPES ] = { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 }; /* * Initially, everything is set up as if from : * initstate( 1, &randtbl, 128 ); * Note that this initialization takes advantage of the fact that srandom() * advances the front and rear pointers 10*rand_deg times, and hence the * rear pointer which starts at 0 will also end up at zero; thus the zeroeth * element of the state information, which contains info about the current * position of the rear pointer is just * MAX_TYPES*(rptr - state) + TYPE_3 == TYPE_3. */ static unsigned long randtbl[ DEG_3 + 1 ] = { TYPE_3, 0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342, 0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb, 0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd, 0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86, 0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7, 0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc, 0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b, 0xf5ad9d0e, 0x8999220b, 0x27fb47b9 }; /* * fptr and rptr are two pointers into the state info, a front and a rear * pointer. These two pointers are always rand_sep places aparts, as they cycle * cyclically through the state information. (Yes, this does mean we could get * away with just one pointer, but the code for random() is more efficient this * way). The pointers are left positioned as they would be from the call * initstate( 1, randtbl, 128 ) * (The position of the rear pointer, rptr, is really 0 (as explained above * in the initialization of randtbl) because the state table pointer is set * to point to randtbl[1] (as explained below). */ static long *fptr = (long*) &randtbl[ SEP_3 + 1 ]; static long *rptr = (long*) &randtbl[ 1 ]; /* * The following things are the pointer to the state information table, * the type of the current generator, the degree of the current polynomial * being used, and the separation between the two pointers. * Note that for efficiency of random(), we remember the first location of * the state information, not the zeroeth. Hence it is valid to access * state[-1], which is used to store the type of the R.N.G. * Also, we remember the last location, since this is more efficient than * indexing every time to find the address of the last element to see if * the front and rear pointers have wrapped. */ static long *state = (long*) &randtbl[ 1 ]; static int rand_type = TYPE_3; static int rand_deg = DEG_3; static int rand_sep = SEP_3; static long *end_ptr = (long*) &randtbl[ DEG_3 + 1 ]; /* * random: * If we are using the trivial TYPE_0 R.N.G., just do the old linear * congruential bit. Otherwise, we do our fancy trinomial stuff, which is the * same in all ther other cases due to all the global variables that have been * set up. The basic operation is to add the number at the rear pointer into * the one at the front pointer. Then both pointers are advanced to the next * location cyclically in the table. The value returned is the sum generated, * reduced to 31 bits by throwing away the "least random" low bit. * Note: the code takes advantage of the fact that both the front and * rear pointers can't wrap on the same call by not testing the rear * pointer if the front one has wrapped. * Returns a 31-bit random number. */ long random() { long i; if( rand_type == TYPE_0 ) { i = state[0] = ( state[0]*1103515245 + 12345 )&0x7fffffff; } else { *fptr += *rptr; i = (*fptr >> 1)&0x7fffffff; /* chucking least random bit */ if( ++fptr >= end_ptr ) { fptr = state; ++rptr; } else { if( ++rptr >= end_ptr ) rptr = state; } } return( i ); } /* * srandom: * Initialize the random number generator based on the given seed. If the * type is the trivial no-state-information type, just remember the seed. * Otherwise, initializes state[] based on the given "seed" via a linear * congruential generator. Then, the pointers are set to known locations * that are exactly rand_sep places apart. Lastly, it cycles the state * information a given number of times to get rid of any initial dependencies * introduced by the L.C.R.N.G. * Note that the initialization of randtbl[] for default usage relies on * values produced by this routine. */ void srandom( x ) unsigned x; { register int i; if( rand_type == TYPE_0 ) { state[ 0 ] = x; } else { state[ 0 ] = x; for( i = 1; i < rand_deg; i++ ) { state[i] = 1103515245*state[i - 1] + 12345; } fptr = &state[ rand_sep ]; rptr = &state[ 0 ]; for( i = 0; i < 10*rand_deg; i++ ) random(); } } /* * initstate: * Initialize the state information in the given array of n bytes for * future random number generation. Based on the number of bytes we * are given, and the break values for the different R.N.G.'s, we choose * the best (largest) one we can and set things up for it. srandom() is * then called to initialize the state information. * Note that on return from srandom(), we set state[-1] to be the type * multiplexed with the current value of the rear pointer; this is so * successive calls to initstate() won't lose this information and will * be able to restart with setstate(). * Note: the first thing we do is save the current state, if any, just like * setstate() so that it doesn't matter when initstate is called. * Returns a pointer to the old state. */ char * initstate( seed, arg_state, n ) unsigned seed; /* seed for R. N. G. */ char *arg_state; /* pointer to state array */ int n; /* # bytes of state info */ { register char *ostate = (char *)( &state[ -1 ] ); if( rand_type == TYPE_0 ) state[ -1 ] = rand_type; else state[ -1 ] = MAX_TYPES*(rptr - state) + rand_type; if( n < BREAK_1 ) { if( n < BREAK_0 ) { fprintf( stderr, "initstate: not enough state (%d bytes) with which to do jack; ignored.\n", n ); return 0; } rand_type = TYPE_0; rand_deg = DEG_0; rand_sep = SEP_0; } else { if( n < BREAK_2 ) { rand_type = TYPE_1; rand_deg = DEG_1; rand_sep = SEP_1; } else { if( n < BREAK_3 ) { rand_type = TYPE_2; rand_deg = DEG_2; rand_sep = SEP_2; } else { if( n < BREAK_4 ) { rand_type = TYPE_3; rand_deg = DEG_3; rand_sep = SEP_3; } else { rand_type = TYPE_4; rand_deg = DEG_4; rand_sep = SEP_4; } } } } state = &( ( (long *)arg_state )[1] ); /* first location */ end_ptr = &state[ rand_deg ]; /* must set end_ptr before srandom */ srandom( seed ); if( rand_type == TYPE_0 ) state[ -1 ] = rand_type; else state[ -1 ] = MAX_TYPES*(rptr - state) + rand_type; return( ostate ); } /* * setstate: * Restore the state from the given state array. * Note: it is important that we also remember the locations of the pointers * in the current state information, and restore the locations of the pointers * from the old state information. This is done by multiplexing the pointer * location into the zeroeth word of the state information. * Note that due to the order in which things are done, it is OK to call * setstate() with the same state as the current state. * Returns a pointer to the old state information. */ char * setstate( arg_state ) char *arg_state; { register long *new_state = (long *)arg_state; register int type = new_state[0]%MAX_TYPES; register int rear = new_state[0]/MAX_TYPES; char *ostate = (char *)( &state[ -1 ] ); if( rand_type == TYPE_0 ) state[ -1 ] = rand_type; else state[ -1 ] = MAX_TYPES*(rptr - state) + rand_type; switch( type ) { case TYPE_0: case TYPE_1: case TYPE_2: case TYPE_3: case TYPE_4: rand_type = type; rand_deg = degrees[ type ]; rand_sep = seps[ type ]; break; default: fprintf( stderr, "setstate: state info has been munged; not changed.\n" ); } state = &new_state[ 1 ]; if( rand_type != TYPE_0 ) { rptr = &state[ rear ]; fptr = &state[ (rear + rand_sep)%rand_deg ]; } end_ptr = &state[ rand_deg ]; /* set end_ptr too */ return( ostate ); } ga-5-3/comex/compat/malloc.c0000640005473000001440000000041411256001653014603 0ustar d3n000users#include #undef malloc #include void *malloc(); /* Allocate an N-byte block of memory from the heap. If N is zero, allocate a 1-byte block. */ void *rpl_malloc(size_t n) { if (n == 0) { n = 1; } return malloc(n); } ga-5-3/comex/compat/strdup.c0000640005473000001440000000037611272474200014664 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include extern char *strcpy(); extern size_t strlen(); char *strdup(char *s) { char *new; if ((new = malloc((size_t) (strlen(s)+1)))) (void) strcpy(new,s); return new; } ga-5-3/comex/compat/strtok.c0000640005473000001440000000365111272474200014670 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * Primitive version of strtok for alliant etc who don't have it. * I think it works .... ? */ #undef NULL #define NULL 0 /** * Return 1 if in set, 0 otherwise. */ static int InSet(char *a, char *set) { register char test; register char b = (*a); while ( (test = *set++) ) { if (test == b) { return 1; } } return 0; } /* * Return pointer to next character in string not in set or * return NULL pointer if no such character. */ static char *NextNotInSet(char *string, char *set) { /* Return NULL if given NULL */ if (string == (char *) NULL) { return (char *) NULL; } while (*string) { if (InSet(string, set)) { string++; } else { break; } } if (*string) { return string; } else { return (char *) NULL; } } /** * Return pointer to next character in string in set or * return NULL pointer if no such character. */ static char *NextInSet(char *string, char *set) { /* Return NULL if given NULL */ if (string == (char *) NULL) { return (char *) NULL; } while (*string) { if (InSet(string, set)) { break; } else { string++; } } if (*string) { return string; } else { return (char *) NULL; } } /** * Naive version of strtok for the alliant. */ char *strtok(char *s1, char *s2) { static char *string = (char *) NULL; char *start, *end; /* Initialize on first call */ if (s1 != (char *) NULL) { string = s1; } start = NextNotInSet(string, s2); /* Find start of next token */ end = NextInSet(start, s2); /* Find end of this token */ if (end == (char *) NULL) { string = (char *) NULL; } else { string = end + 1; *end = '\0'; } return start; } ga-5-3/comex/compat/memalign.c0000640005473000001440000000200511272474200015123 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file */ /** * Cut from SUN man-page. * * memalign() allocates size bytes on a specified alignment * boundary, and returns a pointer to the allocated block. The * value of the returned address is guaranteed to be an even * multiple of alignment. Note: the value of alignment must be * a power of two, and must be greater than or equal to the * size of a word. * * No checking is done on the value of alignment ... should really. */ char *memalign(unsigned alignment, unsigned size) { union screwup { unsigned long integer; char *address; } fiddle; unsigned long offset; alignment += alignment; /* Actually align on twice requested boundary */ fiddle.address = malloc((unsigned) (alignment+size)); if (fiddle.address != (char *) 0) { offset = fiddle.integer & (alignment-1); if (offset != 0) { fiddle.address += alignment - offset; } } return fiddle.address; } ga-5-3/comex/compat/dummy.c0000640005473000001440000000026011324122542014463 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif int dummy_func_for_nonempty_libcompat_ga(int dummy) { int dont_optimize_away = 4; return dont_optimize_away + dummy; } ga-5-3/comex/aclocal.m40000640005473000001440000011446412247204305013560 0ustar d3n000users# generated automatically by aclocal 1.11.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, # 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless `enable' is passed literally. # For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2009, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few `make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using `$V' instead of `$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/ax_sys_weak_alias.m4]) m4_include([m4/comex_ar.m4]) m4_include([m4/comex_arg_parse.m4]) m4_include([m4/comex_blas.m4]) m4_include([m4/comex_check_func.m4]) m4_include([m4/comex_check_header.m4]) m4_include([m4/comex_enable_profile.m4]) m4_include([m4/comex_function.m4]) m4_include([m4/comex_mpi_test_disable.m4]) m4_include([m4/comex_mpi_unwrap.m4]) m4_include([m4/comex_mpicc.m4]) m4_include([m4/comex_mpicc_test.m4]) m4_include([m4/comex_network_setup.m4]) m4_include([m4/comex_sys_weak_alias.m4]) m4_include([m4/comex_with_help.m4]) m4_include([m4/comex_with_mpi.m4]) m4_include([m4/libtool.m4]) m4_include([m4/lt_obsolete.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) ga-5-3/comex/m4/0000750005473000001440000000000012275260567012242 5ustar d3n000usersga-5-3/comex/m4/ax_sys_weak_alias.m40000640005473000001440000002724712247204305016172 0ustar d3n000users# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_sys_weak_alias.html # =========================================================================== # # SYNOPSIS # # AX_SYS_WEAK_ALIAS # # DESCRIPTION # # Determines whether weak aliases are supported on the system, and if so, # what scheme is used to declare them. Also checks to see if aliases can # cross object file boundaries, as some systems don't permit them to. # # Most systems permit something called a "weak alias" or "weak symbol." # These aliases permit a library to provide a stub form of a routine # defined in another library, thus allowing the first library to operate # even if the other library is not linked. This macro will check for # support of weak aliases, figure out what schemes are available, and # determine some characteristics of the weak alias support -- primarily, # whether a weak alias declared in one object file may be referenced from # another object file. # # There are four known schemes of declaring weak symbols; each scheme is # checked in turn, and the first one found is prefered. Note that only one # of the mentioned preprocessor macros will be defined! # # 1. Function attributes # # This scheme was first introduced by the GNU C compiler, and attaches # attributes to particular functions. It is among the easiest to use, and # so is the first one checked. If this scheme is detected, the # preprocessor macro HAVE_SYS_WEAK_ALIAS_ATTRIBUTE will be defined to 1. # This scheme is used as in the following code fragment: # # void __weakf(int c) # { # /* Function definition... */ # } # # void weakf(int c) __attribute__((weak, alias("__weakf"))); # # 2. #pragma weak # # This scheme is in use by many compilers other than the GNU C compiler. # It is also particularly easy to use, and fairly portable -- well, as # portable as these things get. If this scheme is detected first, the # preprocessor macro HAVE_SYS_WEAK_ALIAS_PRAGMA will be defined to 1. This # scheme is used as in the following code fragment: # # extern void weakf(int c); # #pragma weak weakf = __weakf # void __weakf(int c) # { # /* Function definition... */ # } # # 3. #pragma _HP_SECONDARY_DEF # # This scheme appears to be in use by the HP compiler. As it is rather # specialized, this is one of the last schemes checked. If it is the first # one detected, the preprocessor macro HAVE_SYS_WEAK_ALIAS_HPSECONDARY # will be defined to 1. This scheme is used as in the following code # fragment: # # extern void weakf(int c); # #pragma _HP_SECONDARY_DEF __weakf weakf # void __weakf(int c) # { # /* Function definition... */ # } # # 4. #pragma _CRI duplicate # # This scheme appears to be in use by the Cray compiler. As it is rather # specialized, it too is one of the last schemes checked. If it is the # first one detected, the preprocessor macro # HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE will be defined to 1. This scheme is # used as in the following code fragment: # # extern void weakf(int c); # #pragma _CRI duplicate weakf as __weakf # void __weakf(int c) # { # /* Function definition... */ # } # # In addition to the preprocessor macros listed above, if any scheme is # found, the preprocessor macro HAVE_SYS_WEAK_ALIAS will also be defined # to 1. # # Once a weak aliasing scheme has been found, a check will be performed to # see if weak aliases are honored across object file boundaries. If they # are, the HAVE_SYS_WEAK_ALIAS_CROSSFILE preprocessor macro is defined to # 1. # # This Autoconf macro also makes two substitutions. The first, WEAK_ALIAS, # contains the name of the scheme found (one of "attribute", "pragma", # "hpsecondary", or "criduplicate"), or "no" if no weak aliasing scheme # was found. The second, WEAK_ALIAS_CROSSFILE, is set to "yes" or "no" # depending on whether or not weak aliases may cross object file # boundaries. # # LICENSE # # Copyright (c) 2008 Kevin L. Mitchell # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 6 AU_ALIAS([KLM_SYS_WEAK_ALIAS], [AX_SYS_WEAK_ALIAS]) AC_DEFUN([AX_SYS_WEAK_ALIAS], [ # starting point: no aliasing scheme yet... ax_sys_weak_alias=no # Figure out what kind of aliasing may be supported... _AX_SYS_WEAK_ALIAS_ATTRIBUTE _AX_SYS_WEAK_ALIAS_PRAGMA _AX_SYS_WEAK_ALIAS_HPSECONDARY _AX_SYS_WEAK_ALIAS_CRIDUPLICATE # Do we actually support aliasing? AC_CACHE_CHECK([how to create weak aliases with $CC], [ax_cv_sys_weak_alias], [ax_cv_sys_weak_alias=$ax_sys_weak_alias]) # OK, set a #define AS_IF([test $ax_cv_sys_weak_alias != no], [ AC_DEFINE([HAVE_SYS_WEAK_ALIAS], 1, [Define this if your system can create weak aliases]) ]) # Can aliases cross object file boundaries? _AX_SYS_WEAK_ALIAS_CROSSFILE # OK, remember the results AC_SUBST([WEAK_ALIAS], [$ax_cv_sys_weak_alias]) AC_SUBST([WEAK_ALIAS_CROSSFILE], [$ax_cv_sys_weak_alias_crossfile]) ]) AC_DEFUN([_AX_SYS_WEAK_ALIAS_ATTRIBUTE], [ # Test whether compiler accepts __attribute__ form of weak aliasing AC_CACHE_CHECK([whether $CC accepts function __attribute__((weak,alias()))], [ax_cv_sys_weak_alias_attribute], [ # We add -Werror if it's gcc to force an error exit if the weak attribute # isn't understood AS_IF([test $GCC = yes], [ save_CFLAGS=$CFLAGS CFLAGS=-Werror]) # Try linking with a weak alias... AC_LINK_IFELSE([ AC_LANG_PROGRAM([ void __weakf(int c) {} void weakf(int c) __attribute__((weak, alias("__weakf")));], [weakf(0)])], [ax_cv_sys_weak_alias_attribute=yes], [ax_cv_sys_weak_alias_attribute=no]) # Restore original CFLAGS AS_IF([test $GCC = yes], [ CFLAGS=$save_CFLAGS]) ]) # What was the result of the test? AS_IF([test $ax_sys_weak_alias = no && test $ax_cv_sys_weak_alias_attribute = yes], [ ax_sys_weak_alias=attribute AC_DEFINE([HAVE_SYS_WEAK_ALIAS_ATTRIBUTE], 1, [Define this if weak aliases may be created with __attribute__]) ]) ]) AC_DEFUN([_AX_SYS_WEAK_ALIAS_PRAGMA], [ # Test whether compiler accepts #pragma form of weak aliasing AC_CACHE_CHECK([whether $CC supports @%:@pragma weak], [ax_cv_sys_weak_alias_pragma], [ # Try linking with a weak alias... AC_LINK_IFELSE([ AC_LANG_PROGRAM([ extern void weakf(int c); @%:@pragma weak weakf = __weakf void __weakf(int c) {}], [weakf(0)])], [ax_cv_sys_weak_alias_pragma=yes], [ax_cv_sys_weak_alias_pragma=no]) ]) # What was the result of the test? AS_IF([test $ax_sys_weak_alias = no && test $ax_cv_sys_weak_alias_pragma = yes], [ ax_sys_weak_alias=pragma AC_DEFINE([HAVE_SYS_WEAK_ALIAS_PRAGMA], 1, [Define this if weak aliases may be created with @%:@pragma weak]) ]) ]) AC_DEFUN([_AX_SYS_WEAK_ALIAS_HPSECONDARY], [ # Test whether compiler accepts _HP_SECONDARY_DEF pragma from HP... AC_CACHE_CHECK([whether $CC supports @%:@pragma _HP_SECONDARY_DEF], [ax_cv_sys_weak_alias_hpsecondary], [ # Try linking with a weak alias... AC_LINK_IFELSE([ AC_LANG_PROGRAM([ extern void weakf(int c); @%:@pragma _HP_SECONDARY_DEF __weakf weakf void __weakf(int c) {}], [weakf(0)])], [ax_cv_sys_weak_alias_hpsecondary=yes], [ax_cv_sys_weak_alias_hpsecondary=no]) ]) # What was the result of the test? AS_IF([test $ax_sys_weak_alias = no && test $ax_cv_sys_weak_alias_hpsecondary = yes], [ ax_sys_weak_alias=hpsecondary AC_DEFINE([HAVE_SYS_WEAK_ALIAS_HPSECONDARY], 1, [Define this if weak aliases may be created with @%:@pragma _HP_SECONDARY_DEF]) ]) ]) AC_DEFUN([_AX_SYS_WEAK_ALIAS_CRIDUPLICATE], [ # Test whether compiler accepts "_CRI duplicate" pragma from Cray AC_CACHE_CHECK([whether $CC supports @%:@pragma _CRI duplicate], [ax_cv_sys_weak_alias_criduplicate], [ # Try linking with a weak alias... AC_LINK_IFELSE([ AC_LANG_PROGRAM([ extern void weakf(int c); @%:@pragma _CRI duplicate weakf as __weakf void __weakf(int c) {}], [weakf(0)])], [ax_cv_sys_weak_alias_criduplicate=yes], [ax_cv_sys_weak_alias_criduplicate=no]) ]) # What was the result of the test? AS_IF([test $ax_sys_weak_alias = no && test $ax_cv_sys_weak_alias_criduplicate = yes], [ ax_sys_weak_alias=criduplicate AC_DEFINE([HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE], 1, [Define this if weak aliases may be created with @%:@pragma _CRI duplicate]) ]) ]) dnl Note: This macro is modeled closely on AC_LINK_IFELSE, and in fact dnl depends on some implementation details of that macro, particularly dnl its use of _AC_MSG_LOG_CONFTEST to log the failed test program and dnl its use of ac_link for running the linker. AC_DEFUN([_AX_SYS_WEAK_ALIAS_CROSSFILE], [ # Check to see if weak aliases can cross object file boundaries AC_CACHE_CHECK([whether $CC supports weak aliases across object file boundaries], [ax_cv_sys_weak_alias_crossfile], [ AS_IF([test $ax_cv_sys_weak_alias = no], [ax_cv_sys_weak_alias_crossfile=no], [ dnl Must build our own test files... # conftest1 contains our weak alias definition... cat >conftest1.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest1.$ac_ext cat >>conftest1.$ac_ext <<_ACEOF /* end confdefs.h. */ @%:@ifndef HAVE_SYS_WEAK_ALIAS_ATTRIBUTE extern void weakf(int c); @%:@endif @%:@if defined(HAVE_SYS_WEAK_ALIAS_PRAGMA) @%:@pragma weak weakf = __weakf @%:@elif defined(HAVE_SYS_WEAK_ALIAS_HPSECONDARY) @%:@pragma _HP_SECONDARY_DEF __weakf weakf @%:@elif defined(HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE) @%:@pragma _CRI duplicate weakf as __weakf @%:@endif void __weakf(int c) {} @%:@ifdef HAVE_SYS_WEAK_ALIAS_ATTRIBUTE void weakf(int c) __attribute((weak, alias("__weakf"))); @%:@endif _ACEOF # And conftest2 contains our main routine that calls it cat >conftest2.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >> conftest2.$ac_ext cat >>conftest2.$ac_ext <<_ACEOF /* end confdefs.h. */ extern void weakf(int c); int main () { weakf(0); return 0; } _ACEOF # We must remove the object files (if any) ourselves... rm -f conftest2.$ac_objext conftest$ac_exeext # Change ac_link to compile *2* files together save_aclink=$ac_link ac_link=`echo "$ac_link" | \ sed -e 's/conftest\(\.\$ac_ext\)/conftest1\1 conftest2\1/'` dnl Substitute our own routine for logging the conftest m4_pushdef([_AC_MSG_LOG_CONFTEST], [echo "$as_me: failed program was:" >&AS_MESSAGE_LOG_FD echo ">>> conftest1.$ac_ext" >&AS_MESSAGE_LOG_FD sed "s/^/| /" conftest1.$ac_ext >&AS_MESSAGE_LOG_FD echo ">>> conftest2.$ac_ext" >&AS_MESSAGE_LOG_FD sed "s/^/| /" conftest2.$ac_ext >&AS_MESSAGE_LOG_FD ])dnl # Since we created the files ourselves, don't use SOURCE argument AC_LINK_IFELSE(, [ax_cv_sys_weak_alias_crossfile=yes], [ax_cv_sys_weak_alias_crossfile=no]) dnl Restore _AC_MSG_LOG_CONFTEST m4_popdef([_AC_MSG_LOG_CONFTEST])dnl # Restore ac_link ac_link=$save_aclink # We must remove the object files (if any) and C files ourselves... rm -f conftest1.$ac_ext conftest2.$ac_ext \ conftest1.$ac_objext conftest2.$ac_objext ]) ]) # What were the results of the test? AS_IF([test $ax_cv_sys_weak_alias_crossfile = yes], [ AC_DEFINE([HAVE_SYS_WEAK_ALIAS_CROSSFILE], 1, [Define this if weak aliases in other files are honored]) ]) ]) ga-5-3/comex/m4/comex_with_help.m40000640005473000001440000000066112122367322015652 0ustar d3n000users# COMEX_WITH_HELP # ------------ # Using undocumented features, add some text to our --with-PACKAGE help to # avoid repetition. AC_DEFUN([COMEX_WITH_HELP], [AC_ARG_WITH([PACKAGE], [AS_HELP_STRING([--with-PACKAGE[[=ARG]]], [for most of the external software packages, ARG can be one or more whitespace-separated directories, linker or preprocessor directives; for example, --with-PACKAGE="/path/to/PACKAGE -lmylib -I/mydir"])])]) ga-5-3/comex/m4/ltoptions.m40000640005473000001440000003007312122367322014527 0ustar d3n000users# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) ga-5-3/comex/m4/comex_check_header.m40000640005473000001440000000136412122367322016255 0ustar d3n000users# COMEX_CHECK_HEADERS(HEADER-FILE..., # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], [INCLUDES]) # ---------------------------------------------------------------------- # Inspired by # http://pdh11.blogspot.com/2009/04/standard-macros-available-in-gnu.html # but really a modified version of AC_CHECK_HEADERS. AC_DEFUN([COMEX_CHECK_HEADERS], [m4_map_args_w([$1], [_AH_CHECK_HEADER(], [)])]dnl [AS_FOR([AC_header], [ac_header], [$1], [AC_CHECK_HEADER(AC_header, [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_]AC_header), 1, [Define to 1 if you have AC_header, 0 if you don't]) $2], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_]AC_header), 0, [Define to 1 if you have AC_header, 0 if you don't]) $3], [$4])dnl]) ])# COMEX_CHECK_HEADERS ga-5-3/comex/m4/ltversion.m40000640005473000001440000000126212122367322014517 0ustar d3n000users# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) ga-5-3/comex/m4/comex_network_setup.m40000640005473000001440000002214112247206237016602 0ustar d3n000users# _COMEX_NETWORK_WITH(KEY, DESCRIPTION) # -------------------------------------------------- # A helper macro for generating all of the AC_ARG_WITHs. # Also may establish value of comex_network. # Counts how many comex networks were specified by user. AC_DEFUN([_COMEX_NETWORK_WITH], [ AC_ARG_WITH([$1], [AS_HELP_STRING([--with-$1[[=ARG]]], [select comex network as $2])]) AS_VAR_PUSHDEF([KEY], m4_toupper(m4_translit([$1], [-.], [__]))) AS_VAR_PUSHDEF([with_key], m4_translit([with_$1], [-.], [__])) dnl Can't have AM_CONDITIONAL here in case configure must find comex network dnl without user intervention. dnl AM_CONDITIONAL([COMEX_NETWORK_]KEY, [test "x$with_key" != x]) AS_IF([test "x$with_key" != x], [COMEX_ARG_PARSE([with_key], [COMEX_NETWORK_LIBS], [COMEX_NETWORK_LDFLAGS], [COMEX_NETWORK_CPPFLAGS])]) AS_IF([test "x$with_key" != xno && test "x$with_key" != x], [comex_network=KEY AS_VAR_ARITH([comex_network_count], [$comex_network_count + 1])]) AS_VAR_POPDEF([KEY]) AS_VAR_POPDEF([with_key]) ])dnl # _COMEX_NETWORK_WARN(KEY) # --------------------------- # Helper macro for idicating value of comex network arguments. AC_DEFUN([_COMEX_NETWORK_WARN], [ AS_VAR_PUSHDEF([with_key], m4_translit([with_$1], [-.], [__])) AS_IF([test "x$with_key" != x && test "x$with_key" != xno], [AC_MSG_WARN([--with-$1=$with_key])]) AS_VAR_POPDEF([with_key]) ])dnl # _COMEX_NETWORK_AC_DEFINE(KEY) #-------------------------------------- # Helper macro for generating all AC_DEFINEs. AC_DEFUN([_COMEX_NETWORK_AC_DEFINE], [ AS_VAR_PUSHDEF([KEY], m4_toupper(m4_translit([$1], [-.], [__]))) AS_VAR_PUSHDEF([with_key], m4_translit([with_$1], [-.], [__])) AS_IF([test "x$with_key" != x && test "x$with_key" != xno], [AC_DEFINE([COMEX_NETWORK_]KEY, [1], [Define to 1 if the network is ]KEY)], [AC_DEFINE([COMEX_NETWORK_]KEY, [0], [Define to 1 if the network is ]KEY)]) AS_VAR_POPDEF([KEY]) AS_VAR_POPDEF([with_key]) ])dnl # _COMEX_NETWORK_AM_CONDITIONAL(KEY) #-------------------------------------- # Helper macro for generating all AM_CONDITIONALs. AC_DEFUN([_COMEX_NETWORK_AM_CONDITIONAL], [ AS_VAR_PUSHDEF([KEY], m4_toupper(m4_translit([$1], [-.], [__]))) AS_VAR_PUSHDEF([with_key], m4_translit([with_$1], [-.], [__])) AM_CONDITIONAL([COMEX_NETWORK_]KEY, [test "x$with_key" != x && test "x$with_key" != xno]) AS_VAR_POPDEF([KEY]) AS_VAR_POPDEF([with_key]) ])dnl # _COMEX_NETWORK_MPI_TS([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------------- AC_DEFUN([_COMEX_NETWORK_MPI_TS], [ AC_MSG_NOTICE([searching for MPI_TS...]) happy=yes CPPFLAGS="$CPPFLAGS $MPI_CPPFLAGS" LDFLAGS="$LDFLAGS $MPI_LDFLAGS" LIBS="$LIBS $MPI_LIBS" AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([mpi.h], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([MPI_Init], [], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [comex_network=MPI_TS; with_mpi_ts=yes; $1], [$2]) ])dnl # _COMEX_NETWORK_OFA([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------------------------------ AC_DEFUN([_COMEX_NETWORK_OFA], [ AC_MSG_NOTICE([searching for OFA...]) happy=yes AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([infiniband/verbs.h], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([ibv_open_device], [ibverbs], [], [happy=no]) AS_CASE([$ac_cv_search_ibv_open_device], ["none required"], [], [no], [], [COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $ac_cv_search_ibv_open_device"])]) AS_IF([test "x$happy" = xyes], [comex_network=OFA; with_ofa=yes; $1], [$2]) ])dnl # _COMEX_NETWORK_PORTALS4([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------------------------------- AC_DEFUN([_COMEX_NETWORK_PORTALS4], [ AC_MSG_NOTICE([searching for PORTALS4...]) happy=yes AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([portals4.h], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([PtlInit], [portals4], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([PtlFini], [portals4], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [comex_network=PORTALS4; with_portals4=yes; $1], [$2]) ])dnl # _COMEX_NETWORK_DMAPP([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------------------------------ # TODO when dmapp headers and libraries become available, fix this AC_DEFUN([_COMEX_NETWORK_DMAPP], [ AC_MSG_NOTICE([searching for DMAPP...]) happy=yes AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([dmapp.h], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([gethugepagesize], [hugetlbfs], [AC_DEFINE([HAVE_LIBHUGETLBFS], [1], [Define to 1 if you have the `hugetlbfs' library.])], [AC_DEFINE([HAVE_LIBHUGETLBFS], [0], [Define to 1 if you have the `hugetlbfs' library.])]) AS_CASE([$ac_cv_search_gethugepagesize], ["none required"], [], [no], [], [# add missing lib to COMEX_NETWORK_LIBS if not there AS_CASE([$COMEX_NETWORK_LIBS], [*$ac_cv_search_gethugepagesize*], [], [COMEX_NETWORK_LIBS="$COMEX_NETWORK_LIBS $ac_cv_search_gethugepagesize"])]) AC_CHECK_TYPES([dmapp_lock_desc_t], [], [], [[#include ]]) AC_CHECK_TYPES([dmapp_lock_handle_t], [], [], [[#include ]]) ]) AS_IF([test "x$happy" = xyes], [comex_network=DMAPP; with_dmapp=yes; $1], [$2]) ])dnl # COMEX_NETWORK_SETUP # ------------------- # This macro allows user to choose the comex network but also allows the # network to be tested for automatically. AC_DEFUN([COMEX_NETWORK_SETUP], [ # Clear the variables we will be using, just in case. comex_network= COMEX_NETWORK_LIBS= COMEX_NETWORK_LDFLAGS= COMEX_NETWORK_CPPFLAGS= AC_ARG_ENABLE([autodetect], [AS_HELP_STRING([--enable-autodetect], [attempt to locate COMEX_NETWORK besides MPI two-sided])]) # First, all of the "--with" stuff is taken care of. comex_network_count=0 _COMEX_NETWORK_WITH([mpi-ts], [MPI-1 two-sided]) _COMEX_NETWORK_WITH([ofa], [Infiniband OpenIB]) _COMEX_NETWORK_WITH([portals4], [Portals4]) _COMEX_NETWORK_WITH([dmapp], [Cray DMAPP]) # Temporarily add COMEX_NETWORK_CPPFLAGS to CPPFLAGS. comex_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $COMEX_NETWORK_CPPFLAGS" # Temporarily add COMEX_NETWORK_LDFLAGS to LDFLAGS. comex_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $COMEX_NETWORK_LDFLAGS" # Temporarily add COMEX_NETWORK_LIBS to LIBS. comex_save_LIBS="$LIBS"; LIBS="$COMEX_NETWORK_LIBS $LIBS" AS_IF([test "x$enable_autodetect" = xyes], [AC_MSG_NOTICE([searching for COMEX_NETWORK...]) AS_IF([test "x$comex_network" = x && test "x$with_ofa" != xno], [_COMEX_NETWORK_OFA()]) AS_IF([test "x$comex_network" = x && test "x$with_portals4" != xno], [_COMEX_NETWORK_PORTALS4()]) AS_IF([test "x$comex_network" = x && test "x$with_dmapp" != xno], [_COMEX_NETWORK_DMAPP()]) AS_IF([test "x$comex_network" = x], [AC_MSG_WARN([!!!]) AC_MSG_WARN([No COMEX_NETWORK detected, defaulting to MPI_TS]) AC_MSG_WARN([!!!]) comex_network=MPI_TS; with_mpi_ts=yes])], [# Not autodetecting # Check whether multiple comex networks were selected by user. AS_CASE([$comex_network_count], [0], [AC_MSG_WARN([No COMEX_NETWORK specified, defaulting to MPI_TS]) comex_network=MPI_TS; with_mpi_ts=yes], [1], [AS_IF([test "x$comex_network" = xMPI_TS], [_COMEX_NETWORK_MPI_TS([], [AC_MSG_ERROR([test for COMEX_NETWORK=MPI_TS failed])])]) AS_IF([test "x$comex_network" = xOFA], [_COMEX_NETWORK_OFA([], [AC_MSG_ERROR([test for COMEX_NETWORK=OFA failed])])]) AS_IF([test "x$comex_network" = xPORTALS4], [_COMEX_NETWORK_PORTALS4([], [AC_MSG_ERROR([test for COMEX_NETWORK=PORTALS4 failed])])]) AS_IF([test "x$comex_network" = xDMAPP], [_COMEX_NETWORK_DMAPP([], [AC_MSG_ERROR([test for COMEX_NETWORK=DMAPP failed])])]) ], [AC_MSG_WARN([too many comex networks specified: $comex_network_count]) AC_MSG_WARN([the following were specified:]) _COMEX_NETWORK_WARN([mpi-ts]) _COMEX_NETWORK_WARN([ofa]) _COMEX_NETWORK_WARN([portals4]) _COMEX_NETWORK_WARN([dmapp]) AC_MSG_ERROR([please select only one comex network])])]) # Remove COMEX_NETWORK_CPPFLAGS from CPPFLAGS. CPPFLAGS="$comex_save_CPPFLAGS" # Remove COMEX_NETWORK_LDFLAGS from LDFLAGS. LDFLAGS="$comex_save_LDFLAGS" # Remove COMEX_NETWORK_LIBS from LIBS. LIBS="$comex_save_LIBS" _COMEX_NETWORK_AM_CONDITIONAL([mpi-ts]) _COMEX_NETWORK_AM_CONDITIONAL([ofa]) _COMEX_NETWORK_AM_CONDITIONAL([portals4]) _COMEX_NETWORK_AM_CONDITIONAL([dmapp]) _COMEX_NETWORK_AC_DEFINE([mpi-ts]) _COMEX_NETWORK_AC_DEFINE([ofa]) _COMEX_NETWORK_AC_DEFINE([portals4]) _COMEX_NETWORK_AC_DEFINE([dmapp]) AC_SUBST([COMEX_NETWORK_LDFLAGS]) AC_SUBST([COMEX_NETWORK_LIBS]) AC_SUBST([COMEX_NETWORK_CPPFLAGS]) ])dnl ga-5-3/comex/m4/comex_mpi_unwrap.m40000640005473000001440000002211512122367322016046 0ustar d3n000users# COMEX_MPI_UNWRAP() # --------------- # Attempt to unwrap the MPI compiler for the current language and determine # the underlying compiler. # # The strategy is to first compare the stdout of the version flags using # a custom perl script. Next we combine stdout and sterr for the comparison. # Occasionally, the MPI compiler will always report a non-zero exit status. # That is the last case checked for. AC_DEFUN([COMEX_MPI_UNWRAP], [ # Find perl. AC_PATH_PROG([PERL], [perl]) # Create inside.pl. rm -f inside.pl [cat >inside.pl <<"EOF" #!/usr/bin/perl use strict; use warnings; my $numargs = @S|@#ARGV + 1; if ($numargs != 2) { print "Usage: wrapped.txt naked.txt\n"; exit 1; } # Read each input file as a string (rather than a list). local $/=undef; open WRAPPED, "$ARGV[0]" or die "Could not open wrapped text file: $!"; my $wrapped_lines = ; close WRAPPED; open NAKED, "$ARGV[1]" or die "Could not open naked text file: $!"; my $naked_lines = ; close NAKED; # Replace newlines, + from wrapped and naked lines. $wrapped_lines =~ tr/\n+/ /; $naked_lines =~ tr/\n+/ /; # Remove whitespace from beginning of wrapped and naked lines. $wrapped_lines =~ s/^\s+//; $naked_lines =~ s/^\s+//; # Remove whitespace from end of wrapped and naked lines. $wrapped_lines =~ s/\s+$//; $naked_lines =~ s/\s+$//; # If either wrapped_lines or naked_lines are empty, this is an error. # It is assumed that the particular version string which created the input # files should generate SOMETHING. unless ($wrapped_lines) { exit 1; } unless ($naked_lines) { exit 1; } # Cray compilers append a timestamp into their version string. Remove it. if ($wrapped_lines =~ /\QCray\E/) { $wrapped_lines = substr $wrapped_lines, 0, -28; $naked_lines = substr $naked_lines, 0, -28; } # Can the naked lines be found within the wrapped lines? if ($wrapped_lines =~ /\Q$naked_lines\E/) { #print "Found as substring\n"; exit 0; } # Are the naked lines exactly the same as the wrapped lines? elsif ($wrapped_lines eq $naked_lines) { #print "Found equal\n"; exit 0; } else { #print "Not found\n"; exit 1; } EOF] inside="$PERL inside.pl" wrapped="$_AC_CC" AC_LANG_CASE( [C], [AS_CASE([$wrapped], [*_r], [compilers="bgxlc_r xlc_r"], [*], [compilers="bgxlc xlc pgcc pathcc icc sxcc fcc opencc suncc craycc gcc ecc cl ccc cc"]) ], [C++], [AS_CASE([$wrapped], [*_r], [compilers="bgxlC_r xlC_r"], [*], [compilers="icpc pgCC pathCC sxc++ xlC bgxlC openCC sunCC crayc++ g++ c++ gpp aCC cxx cc++ cl.exe FCC KCC RCC CC"]) ], [Fortran 77], [AS_CASE([$wrapped], [*_r], [compilers="bgxlf95_r xlf95_r bgxlf90_r xlf90_r bgxlf_r xlf_r"], [*], [compilers="gfortran g95 bgxlf95 xlf95 f95 fort ifort ifc efc pgf95 pathf95 lf95 openf95 sunf95 crayftn bgxlf90 xlf90 f90 pgf90 pathf90 pghpf epcf90 sxf90 openf90 sunf90 g77 bgxlf xlf f77 frt pgf77 pathf77 cf77 fort77 fl32 af77"]) ], [Fortran], [ ]) AS_VAR_PUSHDEF([comex_save_comp], [comex_save_[]_AC_CC[]]) AS_VAR_PUSHDEF([comex_orig_comp], [comex_orig_[]_AC_CC[]]) AS_VAR_PUSHDEF([comex_cv_mpi_naked], [comex_cv_mpi[]_AC_LANG_ABBREV[]_naked]) AC_CACHE_CHECK([for base $wrapped compiler], [comex_cv_mpi_naked], [ base="`$wrapped -show 2>/dev/null | sed 's/@<:@ @:>@.*@S|@//' | head -1`" comex_save_comp="$_AC_CC" _AC_CC="$base" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [comex_cv_mpi_naked="$base"]) _AC_CC="$comex_save_comp" versions="--version -v -V -qversion" found_wrapped_version=0 # Try separating stdout and stderr. Only compare stdout. AS_IF([test "x$comex_cv_mpi_naked" = x], [ # prepend any CC/CXX/F77 the user may have specified compilers="$comex_orig_comp $compilers" echo "only comparing stdout" >&AS_MESSAGE_LOG_FD for version in $versions do echo "trying version=$version" >&AS_MESSAGE_LOG_FD rm -f mpi.txt mpi.err naked.txt naked.err AS_IF([$wrapped $version 1>mpi.txt 2>mpi.err], [found_wrapped_version=1 for naked_compiler in $compilers do AS_IF([test "x$naked_compiler" != "x$wrapped"], [AS_IF([$naked_compiler $version 1>naked.txt 2>naked.err], [AS_IF([$inside mpi.txt naked.txt >/dev/null], [comex_cv_mpi_naked=$naked_compiler; break], [echo "inside.pl $wrapped $naked_compiler failed, skipping" >&AS_MESSAGE_LOG_FD])], [echo "$naked_compiler $version failed, skipping" >&AS_MESSAGE_LOG_FD])]) done], [echo "$wrapped $version failed, skipping" >&AS_MESSAGE_LOG_FD]) AS_IF([test "x$comex_cv_mpi_naked" != x], [break]) done ]) # Perhaps none of the MPI compilers had a zero exit status (this is bad). # In this case we have to do a brute force match regardless of exit status. AS_IF([test "x$found_wrapped_version" = x0], [ AS_IF([test "x$comex_cv_mpi_naked" = x], [ echo "no zero exit status found for MPI compilers" >&AS_MESSAGE_LOG_FD for version in $versions do echo "trying version=$version" >&AS_MESSAGE_LOG_FD rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do AS_IF([test "x$naked_compiler" != "x$wrapped"], [rm -f naked.txt naked.err AS_IF([$naked_compiler $version 1>naked.txt 2>naked.err], [AS_IF([$inside mpi.txt naked.txt >/dev/null], [comex_cv_mpi_naked=$naked_compiler; break], [echo "inside.pl $wrapped $naked_compiler failed, skipping" >&AS_MESSAGE_LOG_FD])], [echo "$naked_compiler $version failed, skipping" >&AS_MESSAGE_LOG_FD])]) done AS_IF([test "x$comex_cv_mpi_naked" != x], [break]) done ]) ]) # Try by combining stdout/err into one file. AS_IF([test "x$comex_cv_mpi_naked" = x], [ echo "try combining stdout and stderr into one file" >&AS_MESSAGE_LOG_FD for version in $versions do echo "trying version=$version" >&AS_MESSAGE_LOG_FD rm -f mpi.txt naked.txt AS_IF([$wrapped $version 1>mpi.txt 2>&1], [for naked_compiler in $compilers do AS_IF([test "x$naked_compiler" != "x$wrapped"], [AS_IF([$naked_compiler $version 1>naked.txt 2>&1], [AS_IF([$inside mpi.txt naked.txt >/dev/null], [comex_cv_mpi_naked=$naked_compiler; break], [echo "inside.pl $wrapped $naked_compiler failed, skipping" >&AS_MESSAGE_LOG_FD])], [echo "$naked_compiler $version failed, skipping" >&AS_MESSAGE_LOG_FD])]) done], [echo "$wrapped $version failed, skipping" >&AS_MESSAGE_LOG_FD]) AS_IF([test "x$comex_cv_mpi_naked" != x], [break]) done ]) # If we got this far, then it's likely that the MPI compiler had a zero exit # status when it shouldn't have for one version flag, but later had a non-zero # exit status for a flag it shouldn't have. One false positive hid a false # negative. In this case, brute force compare all MPI compiler output against # all compiler output. AS_IF([test "x$comex_cv_mpi_naked" = x], [ echo "we have a very badly behaving MPI compiler" >&AS_MESSAGE_LOG_FD for version in $versions do echo "trying version=$version" >&AS_MESSAGE_LOG_FD rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do AS_IF([test "x$naked_compiler" != "x$wrapped"], [rm -f naked.txt naked.err AS_IF([$naked_compiler $version 1>naked.txt 2>naked.err], [AS_IF([$inside mpi.txt naked.txt >/dev/null], [comex_cv_mpi_naked=$naked_compiler; break], [echo "inside.pl $wrapped $naked_compiler failed, skipping" >&AS_MESSAGE_LOG_FD])], [echo "$naked_compiler $version failed, skipping" >&AS_MESSAGE_LOG_FD])]) done AS_IF([test "x$comex_cv_mpi_naked" != x], [break]) done ]) rm -f mpi.txt mpi.err naked.txt naked.err ]) AS_IF([test "x$comex_cv_mpi_naked" = x], [AC_MSG_ERROR([Could not determine the ]_AC_LANG[ compiler wrapped by MPI])], [AS_IF([test "x$comex_orig_comp" != x && test "x$comex_orig_comp" != "x$comex_cv_mpi_naked"], [AC_MSG_WARN([unwrapped $wrapped ($comex_cv_mpi_naked) does not match user-specified $comex_orig_comp])])]) AS_VAR_POPDEF([comex_save_comp]) AS_VAR_POPDEF([comex_cv_mpi_naked]) rm -f inside.pl ])dnl # COMEX_MPI_UNWRAP_PUSH() # -------------------- # Set CC/CXX/F77/FC to their unwrapped MPI counterparts. # Save their old values for restoring later. AC_DEFUN([COMEX_MPI_UNWRAP_PUSH], [ comex_mpi_unwrap_push_save_CC="$CC" comex_mpi_unwrap_push_save_CXX="$CXX" comex_mpi_unwrap_push_save_F77="$F77" comex_mpi_unwrap_push_save_FC="$FC" AS_IF([test "x$comex_cv_mpic_naked" != x], [ CC="$comex_cv_mpic_naked"]) AS_IF([test "x$comex_cv_mpicxx_naked" != x], [CXX="$comex_cv_mpicxx_naked"]) AS_IF([test "x$comex_cv_mpif77_naked" != x], [F77="$comex_cv_mpif77_naked"]) AS_IF([test "x$comex_cv_mpifc_naked" != x], [ FC="$comex_cv_mpifc_naked"]) ])dnl # COMEX_MPI_UNWRAP_POP() # ------------------- # Restore CC/CXX/F77/FC to their MPI counterparts. AC_DEFUN([COMEX_MPI_UNWRAP_POP], [ CC="$comex_mpi_unwrap_push_save_CC" CXX="$comex_mpi_unwrap_push_save_CXX" F77="$comex_mpi_unwrap_push_save_F77" FC="$comex_mpi_unwrap_push_save_FC" ])dnl ga-5-3/comex/m4/comex_sys_weak_alias.m40000640005473000001440000000200512247204305016656 0ustar d3n000users# COMEX_DISABLE_SYS_WEAK_ALIAS # ------------------------- # Whether to disable the test for weak aliases AC_DEFUN([COMEX_DISABLE_SYS_WEAK_ALIAS], [ AC_ARG_ENABLE([weak], [AS_HELP_STRING([--disable-weak], [don't use weak symbols for profiling])], [], [enable_weak=yes]) AS_IF([test "x$comex_cv_target_base" = xCYGWIN], [enable_weak=no]) ])dnl # COMEX_SYS_WEAK_ALIAS # ----------------- # Whether pragma weak is supported. AC_DEFUN([COMEX_SYS_WEAK_ALIAS], [ AS_IF([test "x$enable_weak" = xyes], [ax_sys_weak_alias=no _AX_SYS_WEAK_ALIAS_PRAGMA], [ax_cv_sys_weak_alias_pragma=no AC_DEFINE([HAVE_SYS_WEAK_ALIAS_PRAGMA], [0], [Define this if weak aliases may be created with @%:@pragma weak])]) AM_CONDITIONAL([HAVE_SYS_WEAK_ALIAS_PRAGMA], [test "x$ax_cv_sys_weak_alias_pragma" = xyes]) # enable shared libs automatically if profiling using weak symbols AS_IF([test "x$ax_cv_sys_weak_alias_pragma" = xyes], [AS_IF([test "x$enable_profiling" = xyes], [enable_shared=yes])]) ])dnl ga-5-3/comex/m4/lt_obsolete.m40000640005473000001440000001375612122367322015020 0ustar d3n000users# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) ga-5-3/comex/m4/comex_function.m40000640005473000001440000000172212122367322015513 0ustar d3n000users# COMEX_FUNCTION # ----------- # Define FUNCTION_NAME to either __func__ or __FUNCTION__ appropriately. # If all else fails, #define FUNCTION_NAME . AC_DEFUN([COMEX_FUNCTION], [AC_CACHE_CHECK([for preprocessor symbol for function name], [comex_cv_cpp_function], [AS_IF([test x$comex_cv_cpp_function = x], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[extern int printf(const char *format, ...);]], [[printf("__func__ = %s\n", __func__);]])], [comex_cv_cpp_function=__func__])]) AS_IF([test x$comex_cv_cpp_function = x], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[extern int printf(const char *format, ...);]], [[printf("__FUNCTION__ = %s\n", __FUNCTION__);]])], [comex_cv_cpp_function=__FUNCTION__])]) AS_IF([test x$comex_cv_cpp_function = x], [comex_cv_cpp_function='"Unknown"'])]) AC_DEFINE_UNQUOTED([FUNCTION_NAME], [$comex_cv_cpp_function], [CPP symbol for function name, if available]) ])# COMEX_FUNCTION ga-5-3/comex/m4/comex_mpicc_test.m40000640005473000001440000001100012122367322016006 0ustar d3n000users# COMEX_MPICC_TEST_PROGRAM # --------------------- # Create an MPI test program in C. AC_DEFUN([COMEX_MPICC_TEST_PROGRAM], [ AC_LANG_PUSH([C]) AC_LANG_CONFTEST([AC_LANG_PROGRAM([[#include ]], [[int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize();]])]) AC_LANG_POP([C]) ])dnl # COMEX_MPICC_TEST_COMPILE # --------------------- # Attempt to compile a simple MPI program in C. AC_DEFUN([COMEX_MPICC_TEST_COMPILE], [ AC_LANG_PUSH([C]) COMEX_MPICC_TEST_PROGRAM() AC_CACHE_CHECK([whether a simple C MPI program compiles], [comex_cv_c_mpi_test_compile], [comex_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $MPI_CPPFLAGS" AC_COMPILE_IFELSE([], [comex_cv_c_mpi_test_compile=yes], [comex_cv_c_mpi_test_compile=no]) CPPFLAGS="$comex_save_CPPFLAGS"]) rm -f conftest.$ac_ext AC_LANG_POP([C]) AS_IF([test "x$comex_cv_c_mpi_test_compile" = xno], [AC_MSG_FAILURE([could not compile simple C MPI program])]) ])dnl # COMEX_MPICC_TEST_LINK # ------------------ # Attempt to link a simple MPI program in C. AC_DEFUN([COMEX_MPICC_TEST_LINK], [ AC_LANG_PUSH([C]) COMEX_MPICC_TEST_PROGRAM() comex_cv_c_mpi_test_link=no AS_IF([test "x$comex_cv_c_mpi_test_link" = xno], [AC_MSG_CHECKING([whether a C MPI program links natively]) AC_LINK_IFELSE([], [comex_cv_c_mpi_test_link=yes MPI_LIBS= MPI_LDFLAGS= MPI_CPPFLAGS=], [comex_cv_c_mpi_test_link=no]) AC_MSG_RESULT([$comex_cv_c_mpi_test_link])]) # That didn't work, so now let's try adding our MPI_* flags. # The CPPFLAGS and LDFLAGS are added up top here, but LIBS will change. comex_save_LIBS="$LIBS" comex_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $MPI_CPPFLAGS" comex_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $MPI_LDFLAGS" AS_IF([test "x$comex_cv_c_mpi_test_link" = xno], [AC_MSG_CHECKING([whether a C MPI program links with additional env]) LIBS="$LIBS $MPI_LIBS" AC_LINK_IFELSE([], [comex_cv_c_mpi_test_link=yes], [comex_cv_c_mpi_test_link=no]) LIBS="$comex_save_LIBS" AC_MSG_RESULT([$comex_cv_c_mpi_test_link])]) # That didn't work, so now let's try with specific libs. AS_IF([test "x$comex_cv_c_mpi_test_link" = xno], [AC_MSG_CHECKING([for mvapich libraries]) for lib in "-lmpich -lpthread" "-lmpich" do LIBS="$LIBS $lib" AC_LINK_IFELSE([], [comex_cv_c_mpi_test_link="$lib"; break], [comex_cv_c_mpi_test_link=no]) LIBS="$comex_save_LIBS" done LIBS="$comex_save_LIBS" AC_MSG_RESULT([$comex_cv_c_mpi_test_link])]) AS_IF([test "x$comex_cv_c_mpi_test_link" = xno], [AC_MSG_CHECKING([for mpich libraries]) for lib in "-lmpich -lpthread" "-lmpich" do LIBS="$LIBS $lib" AC_LINK_IFELSE([], [comex_cv_c_mpi_test_link="$lib"; break], [comex_cv_c_mpi_test_link=no]) LIBS="$comex_save_LIBS" done LIBS="$comex_save_LIBS" AC_MSG_RESULT([$comex_cv_c_mpi_test_link])]) AS_IF([test "x$comex_cv_c_mpi_test_link" = xno], [AC_MSG_CHECKING([for hpmpi libraries]) for lib in "-lhpmpio -lhpmpi" "-lhpmpi" do LIBS="$LIBS $lib" AC_LINK_IFELSE([], [comex_cv_c_mpi_test_link="$lib"; break], [comex_cv_c_mpi_test_link=no]) LIBS="$comex_save_LIBS" done LIBS="$comex_save_LIBS" AC_MSG_RESULT([$comex_cv_c_mpi_test_link])]) AS_IF([test "x$comex_cv_c_mpi_test_link" = xno], [AC_MSG_CHECKING([for intelmpi libraries]) for lib in "-lmpi -lmpiif -lmpigi -lrt -lpthread" "-lmpi -lmpiif -lmpigi" do LIBS="$LIBS $lib" AC_LINK_IFELSE([], [comex_cv_c_mpi_test_link="$lib"; break], [comex_cv_c_mpi_test_link=no]) LIBS="$comex_save_LIBS" done LIBS="$comex_save_LIBS" AC_MSG_RESULT([$comex_cv_c_mpi_test_link])]) AS_IF([test "x$comex_cv_c_mpi_test_link" = xno], [AC_MSG_CHECKING([for openmpi libraries]) for lib in "-lmpi -lpthread" "-lmpi" do LIBS="$LIBS $lib" AC_LINK_IFELSE([], [comex_cv_c_mpi_test_link="$lib"; break], [comex_cv_c_mpi_test_link=no]) LIBS="$comex_save_LIBS" done LIBS="$comex_save_LIBS" AC_MSG_RESULT([$comex_cv_c_mpi_test_link])]) rm -f conftest.$ac_ext LIBS="$comex_save_LIBS" LDFLAGS="$comex_save_LDFLAGS" CPPFLAGS="$comex_save_CPPFLAGS" AC_LANG_POP([C]) AS_CASE([$comex_cv_c_mpi_test_link], [yes], [], [no], [AC_MSG_FAILURE([could not link a C MPI program])], [*], [MPI_LIBS="$comex_cv_c_mpi_test_link"], []) ])dnl ga-5-3/comex/m4/comex_blas.m40000640005473000001440000003065112247204305014611 0ustar d3n000users# COMEX_C_BLAS_TEST # ----------------- # Generate C conftest for BLAS. AC_DEFUN([COMEX_C_BLAS_TEST], [ AC_LANG_CONFTEST([AC_LANG_PROGRAM( [#ifdef __cplusplus extern "C" { #endif char $caxpy (); char $daxpy (); char $saxpy (); char $zaxpy (); char $ccopy (); char $dcopy (); char $scopy (); char $zcopy (); #ifdef __cplusplus } #endif ], [[char caxpy_result = $caxpy (); char daxpy_result = $daxpy (); char saxpy_result = $saxpy (); char zaxpy_result = $zaxpy (); char ccopy_result = $ccopy (); char dcopy_result = $dcopy (); char scopy_result = $scopy (); char zcopy_result = $zcopy (); ]])]) ]) # COMEX_RUN_BLAS_TEST # ------------------- # Test the linker. # Clears BLAS_LIBS on failure. Sets comex_blas_ok=yes on success. AC_DEFUN([COMEX_RUN_BLAS_TEST], [ AC_LANG_PUSH([C]) comex_blas_ok=no AS_IF([test "x$comex_blas_ok" = xno], [caxpy=caxpy daxpy=daxpy saxpy=saxpy zaxpy=zaxpy ccopy=ccopy dcopy=dcopy scopy=scopy zcopy=zcopy COMEX_C_BLAS_TEST() AC_LINK_IFELSE([], [comex_blas_ok=yes], [BLAS_LIBS=])]) AS_IF([test "x$comex_blas_ok" = xno], [caxpy=caxpy_ daxpy=daxpy_ saxpy=saxpy_ zaxpy=zaxpy_ ccopy=ccopy_ dcopy=dcopy_ scopy=scopy_ zcopy=zcopy_ COMEX_C_BLAS_TEST() AC_LINK_IFELSE([], [comex_blas_ok=yes], [BLAS_LIBS=])]) AS_IF([test "x$comex_blas_ok" = xno], [caxpy=caxpy__ daxpy=daxpy__ saxpy=saxpy__ zaxpy=zaxpy__ ccopy=ccopy__ dcopy=dcopy__ scopy=scopy__ zcopy=zcopy__ COMEX_C_BLAS_TEST() AC_LINK_IFELSE([], [comex_blas_ok=yes], [BLAS_LIBS=])]) AS_IF([test "x$comex_blas_ok" = xno], [caxpy=CGEMM daxpy=DGEMM saxpy=SGEMM zaxpy=ZGEMM ccopy=CCOPY dcopy=DCOPY scopy=SCOPY zcopy=ZCOPY COMEX_C_BLAS_TEST() AC_LINK_IFELSE([], [comex_blas_ok=yes], [BLAS_LIBS=])]) AS_IF([test "x$comex_blas_ok" = xno], [caxpy=CGEMM_ daxpy=DGEMM_ saxpy=SGEMM_ zaxpy=ZGEMM_ ccopy=CCOPY_ dcopy=DCOPY_ scopy=SCOPY_ zcopy=ZCOPY_ COMEX_C_BLAS_TEST() AC_LINK_IFELSE([], [comex_blas_ok=yes], [BLAS_LIBS=])]) AS_IF([test "x$comex_blas_ok" = xno], [caxpy=CGEMM__ daxpy=DGEMM__ saxpy=SGEMM__ zaxpy=ZGEMM__ ccopy=CCOPY__ dcopy=DCOPY__ scopy=SCOPY__ zcopy=ZCOPY__ COMEX_C_BLAS_TEST() AC_LINK_IFELSE([], [comex_blas_ok=yes], [BLAS_LIBS=])]) AS_IF([test "x$comex_blas_ok" = xno], [caxpy=NOTFOUND daxpy=NOTFOUND saxpy=NOTFOUND zaxpy=NOTFOUND ccopy=NOTFOUND dcopy=NOTFOUND scopy=NOTFOUND zcopy=NOTFOUND]) AC_LANG_POP([C]) ])dnl # COMEX_BLAS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # ------------------------------------------------- # Parse the --with-blas argument and test for all *axpy routines. We use # different tests depending on whether Fortran sources are enabled. There are # many flavors of BLAS that we test for explicitly, although the list could # probably be reduced based on currently available systems. AC_DEFUN([COMEX_BLAS], [ blas_size=4 blas_size_hack=no AC_ARG_WITH([blas], [AS_HELP_STRING([--with-blas[[=ARG]]], [use external BLAS library; attempt to detect sizeof(INTEGER)])], [blas_size_hack=yes]) AC_ARG_WITH([blas4], [AS_HELP_STRING([--with-blas4[[=ARG]]], [use external BLAS library compiled with sizeof(INTEGER)==4])], [blas_size=4; with_blas="$with_blas4"]) AC_ARG_WITH([blas8], [AS_HELP_STRING([--with-blas8[[=ARG]]], [use external BLAS library compiled with sizeof(INTEGER)==8])], [blas_size=8; with_blas="$with_blas8"]) comex_blas_ok=no AS_IF([test "x$with_blas" = xno], [comex_blas_ok=skip]) # Parse --with-blas argument. Clear previous values first. BLAS_LIBS= BLAS_LDFLAGS= BLAS_CPPFLAGS= COMEX_ARG_PARSE([with_blas], [BLAS_LIBS], [BLAS_LDFLAGS], [BLAS_CPPFLAGS]) comex_save_LIBS="$LIBS" comex_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$BLAS_LDFLAGS $LDFLAGS" comex_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$BLAS_CPPFLAGS $CPPFLAGS" AC_MSG_NOTICE([Attempting to locate BLAS library]) # First, check environment/command-line variables. # If failed, erase BLAS_LIBS but maintain BLAS_LDFLAGS and BLAS_CPPFLAGS. AS_IF([test $comex_blas_ok = no], [AC_MSG_CHECKING([for BLAS with user-supplied flags]) LIBS="$BLAS_LIBS $LIBS" COMEX_RUN_BLAS_TEST() LIBS="$comex_save_LIBS" AS_IF([test $comex_blas_ok = yes], [AS_IF([test $blas_size_hack = yes], [AS_CASE(["$BLAS_LIBS $LIBS $LDFLAGS $CPPFLAGS"], [*ilp64*], [blas_size=8], # Intel MKL [*_int64*], [blas_size=8])])]) # AMD ACML AC_MSG_RESULT([$comex_blas_ok])]) # AMD Core Math Library (ACML) AS_IF([test $comex_blas_ok = no], [AC_MSG_CHECKING([for BLAS in AMD Core Math Library]) # add -lacml to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*acml*], [], [BLAS_LIBS="-lacml"]) LIBS="$BLAS_LIBS $LIBS" COMEX_RUN_BLAS_TEST() LIBS="$comex_save_LIBS" AS_IF([test "x$comex_blas_ok" = xyes], [AS_IF([test $blas_size_hack = yes], [AS_CASE(["$BLAS_LIBS $LIBS $LDFLAGS $CPPFLAGS"], [*_int64*], [blas_size=8])])]) AC_MSG_RESULT([$comex_blas_ok])]) # Intel MKL library AS_IF([test $comex_blas_ok = no], [AC_MSG_CHECKING([for BLAS in Intel Math Kernel Library]) # add -lmkl to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*mkl*], [], [BLAS_LIBS="-lmkl"]) LIBS="$BLAS_LIBS $LIBS" COMEX_RUN_BLAS_TEST() LIBS="$comex_save_LIBS" AS_IF([test "x$comex_blas_ok" = xyes], [AS_IF([test $blas_size_hack = yes], [AS_CASE(["$BLAS_LIBS $LIBS $LDFLAGS $CPPFLAGS"], [*ilp64*], [blas_size=8])])]) AC_MSG_RESULT([$comex_blas_ok])]) # ATLAS library (http://math-atlas.sourceforge.net/) AS_IF([test $comex_blas_ok = no], [AC_MSG_CHECKING([for BLAS in ATLAS]) AS_IF([test "x$enable_f77" = xno], [# add -lcblas if needed but missing from LIBS AS_CASE([$LIBS], [*cblas*], [], [BLAS_LIBS="-lcblas"])], [# add -lf77blas if needed but missing from LIBS AS_CASE([$LIBS], [*f77blas*], [], [BLAS_LIBS="-lf77blas"])]) # add -latlas if needed but missing from LIBS AS_CASE([$LIBS], [*atlas*], [], [BLAS_LIBS="$BLAS_LIBS -latlas"]) LIBS="$BLAS_LIBS $LIBS" COMEX_RUN_BLAS_TEST() LIBS="$comex_save_LIBS" AC_MSG_RESULT([$comex_blas_ok])]) # PhiPACK libraries (requires generic BLAS lib, too) AS_IF([test $comex_blas_ok = no], [AC_MSG_CHECKING([for BLAS in PhiPACK libraries]) # add -lblas to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*blas*], [], [BLAS_LIBS="-lblas"]) # add -ldgemm to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*dgemm*], [], [BLAS_LIBS="-ldgemm $BLAS_LIBS"]) # add -lsgemm to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*sgemm*], [], [BLAS_LIBS="-lsgemm $BLAS_LIBS"]) LIBS="$BLAS_LIBS $LIBS" COMEX_RUN_BLAS_TEST() LIBS="$comex_save_LIBS" AC_MSG_RESULT([$comex_blas_ok])]) # Apple Accelerate.framework AS_IF([test $comex_blas_ok = no], [AC_MSG_CHECKING([for BLAS in Apple Accelerate.framework]) # add -framework Accelerate to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*Accelerate*], [], [BLAS_LIBS="-framework Accelerate"]) LIBS="$BLAS_LIBS $LIBS" COMEX_RUN_BLAS_TEST() LIBS="$comex_save_LIBS" AC_MSG_RESULT([$comex_blas_ok])]) # Apple vecLib.framework AS_IF([test $comex_blas_ok = no], [AC_MSG_CHECKING([for BLAS in Apple vecLib.framework]) # add -framework vecLib to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*vecLib*], [], [BLAS_LIBS="-framework vecLib"]) LIBS="$BLAS_LIBS $LIBS" COMEX_RUN_BLAS_TEST() LIBS="$comex_save_LIBS" AC_MSG_RESULT([$comex_blas_ok])]) # Alpha CXML library (CXML stands for Compaq Extended Math Library) AS_IF([test $comex_blas_ok = no], [AC_MSG_CHECKING([for BLAS in Alpha CXML library]) # add -lcxml to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*cxml*], [], [BLAS_LIBS="-lcxml"]) LIBS="$BLAS_LIBS $LIBS" COMEX_RUN_BLAS_TEST() LIBS="$comex_save_LIBS" AS_IF([test $comex_blas_ok = no], [# add -lcxml to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*cxml*], [], [BLAS_LIBS="-lcxml"]) # add -lcpml to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*cpml*], [], [BLAS_LIBS="$BLAS_LIBS -lcpml"]) LIBS="$BLAS_LIBS $LIBS" COMEX_RUN_BLAS_TEST() LIBS="$comex_save_LIBS"]) AC_MSG_RESULT([$comex_blas_ok])]) # Alpha DXML library (now called CXML, see above) # Sun Performance library AS_IF([test $comex_blas_ok = no], [AC_MSG_CHECKING([for BLAS in Sun Performance Library]) # add -xlic_lib=sunperf to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*sunperf*], [], [BLAS_LIBS="-xlic_lib=sunperf"]) LIBS="$BLAS_LIBS $LIBS" COMEX_RUN_BLAS_TEST() LIBS="$comex_save_LIBS" AS_IF([test $comex_blas_ok = no], [# add -xlic_lib=sunperf to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*sunperf*], [], [BLAS_LIBS="-xlic_lib=sunperf"]) # add -lsunmath to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*sunmath*], [], [BLAS_LIBS="$BLAS_LIBS -lsunmath"]) LIBS="$BLAS_LIBS $LIBS" COMEX_RUN_BLAS_TEST() LIBS="$comex_save_LIBS"]) AC_MSG_RESULT([$comex_blas_ok])]) # SCSL library (SCSL stands for SGI/Cray Scientific Library) AS_IF([test $comex_blas_ok = no], [AC_MSG_CHECKING([for BLAS in SGI/Cray Scientific Library]) # add -lscs to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*scs*], [], [BLAS_LIBS="-lscs"]) LIBS="$BLAS_LIBS $LIBS" COMEX_RUN_BLAS_TEST() LIBS="$comex_save_LIBS" AC_MSG_RESULT([$comex_blas_ok])]) # SGIMATH library AS_IF([test $comex_blas_ok = no], [AC_MSG_CHECKING([for BLAS in SGIMATH library]) # add -lcomplib.sgimath to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*complib.sgimath*], [], [BLAS_LIBS="-lcomplib.sgimath"]) LIBS="$BLAS_LIBS $LIBS" COMEX_RUN_BLAS_TEST() LIBS="$comex_save_LIBS" AC_MSG_RESULT([$comex_blas_ok])]) # IBM ESSL library (requires generic BLAS lib, too) AS_IF([test $comex_blas_ok = no], [AC_MSG_CHECKING([for BLAS in IBM ESSL library]) # add -lessl to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*essl*], [], [BLAS_LIBS="-lessl"]) # add -lblas to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*blas*], [], [BLAS_LIBS="$BLAS_LIBS -lblas"]) LIBS="$BLAS_LIBS $LIBS" COMEX_RUN_BLAS_TEST() LIBS="$comex_save_LIBS" AC_MSG_RESULT([$comex_blas_ok])]) # Generic BLAS library AS_IF([test $comex_blas_ok = no], [AC_MSG_CHECKING([for BLAS in generic library]) BLAS_LIBS="-lblas" LIBS="$BLAS_LIBS $LIBS" COMEX_RUN_BLAS_TEST() LIBS="$comex_save_LIBS" AC_MSG_RESULT([$comex_blas_ok])]) CPPFLAGS="$comex_save_CPPFLAGS" LDFLAGS="$comex_save_LDFLAGS" AC_SUBST([BLAS_LIBS]) AC_SUBST([BLAS_LDFLAGS]) AC_SUBST([BLAS_CPPFLAGS]) # Tests are complete. Execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: AS_IF([test $comex_blas_ok = yes], [have_blas=1 $1], [AC_MSG_WARN([BLAS library not found, using internal BLAS]) blas_size=4 have_blas=0 $2]) AC_DEFINE_UNQUOTED([HAVE_BLAS], [$have_blas], [Define to 1 if using external BLAS library]) AC_DEFINE_UNQUOTED([BLAS_SIZE], [$blas_size], [Define to sizeof(INTEGER) used to compile BLAS]) AC_DEFINE_UNQUOTED([BLAS_CAXPY], [$caxpy], [Define to name of caxpy routine to call from C]) AC_DEFINE_UNQUOTED([BLAS_DAXPY], [$daxpy], [Define to name of daxpy routine to call from C]) AC_DEFINE_UNQUOTED([BLAS_SAXPY], [$saxpy], [Define to name of saxpy routine to call from C]) AC_DEFINE_UNQUOTED([BLAS_ZAXPY], [$zaxpy], [Define to name of zaxpy routine to call from C]) AC_DEFINE_UNQUOTED([BLAS_CCOPY], [$ccopy], [Define to name of ccopy routine to call from C]) AC_DEFINE_UNQUOTED([BLAS_DCOPY], [$dcopy], [Define to name of dcopy routine to call from C]) AC_DEFINE_UNQUOTED([BLAS_SCOPY], [$scopy], [Define to name of scopy routine to call from C]) AC_DEFINE_UNQUOTED([BLAS_ZCOPY], [$zcopy], [Define to name of zcopy routine to call from C]) AM_CONDITIONAL([HAVE_BLAS], [test $comex_blas_ok = yes]) ])dnl COMEX_BLAS ga-5-3/comex/m4/comex_with_mpi.m40000640005473000001440000000206112122367322015503 0ustar d3n000users# COMEX_WITH_MPI # -------------- # Establishes all things related to the Message Passing Interface. # This includes the compilers to use (either standard or MPI wrappers) # or the proper linker flags (-L), libs (-l) or preprocessor directives (-I). # Yes, it's a beefy AC macro, but because when MPI is desired it replaces the # usual compiler the order here is necessary and it is all interdependent. AC_DEFUN([COMEX_WITH_MPI], [ # MPI_* vars might exist in environment, but they are really internal. # Reset them. MPI_LIBS= MPI_LDFLAGS= MPI_CPPFLAGS= AC_ARG_WITH([mpi], [AS_HELP_STRING([--with-mpi[[=ARG]]], [path to MPI; leave ARG blank to use MPI compiler wrappers in PATH])], [], [with_mpi=yes]) AS_IF([test "x$with_mpi" = xyes], [with_mpi_wrappers=yes], [with_mpi_wrappers=no]) dnl postpone parsing with_mpi until we know sizeof(void*) dnl AS_IF([test x$with_mpi_wrappers = xno], dnl [COMEX_ARG_PARSE([with_mpi], [MPI_LIBS], [MPI_LDFLAGS], [MPI_CPPFLAGS])]) AC_SUBST([MPI_LIBS]) AC_SUBST([MPI_LDFLAGS]) AC_SUBST([MPI_CPPFLAGS]) ])dnl ga-5-3/comex/m4/libtool.m40000640005473000001440000105721612122367322014151 0ustar d3n000users# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS ga-5-3/comex/m4/comex_enable_profile.m40000640005473000001440000000230512247204305016631 0ustar d3n000users# COMEX_ENABLE_PROFILING_ARMCI # ---------------------------- # Whether to enable profiling for ARMCI. # AC_DEFINEs COMEX_PROFILING_ARMCI. AC_DEFUN([COMEX_ENABLE_PROFILING_ARMCI], [ AC_ARG_ENABLE([profiling-armci], [AS_HELP_STRING([--enable-profiling-armci], [enable profiling for ARMCI])], [], [enable_profiling_armci=no]) AS_IF([test "x$enable_profiling_armci" = xyes], [AC_DEFINE([COMEX_PROFILING_ARMCI], [1], [Define if ARMCI profiling is enabled])]) AM_CONDITIONAL([ENABLE_PROFILING_ARMCI], [test "x$enable_profiling_armci" = xyes]) ])dnl # COMEX_ENABLE_PROFILING_COMEX # ---------------------------- # Whether to enable profiling for COMEX. # AC_DEFINEs COMEX_PROFILING_COMEX. AC_DEFUN([COMEX_ENABLE_PROFILING_COMEX], [ AC_ARG_ENABLE([profiling-comex], [AS_HELP_STRING([--enable-profiling-comex], [enable profiling for ComEx])], [], [enable_profiling_comex=no]) AS_IF([test "x$enable_profiling_comex" = xyes], [AC_DEFINE([COMEX_PROFILING_COMEX], [1], [Define if ComEx profiling is enabled])]) AM_CONDITIONAL([ENABLE_PROFILING_COMEX], [test "x$enable_profiling_comex" = xyes]) ])dnl ga-5-3/comex/m4/comex_ar.m40000640005473000001440000000130512122367322014265 0ustar d3n000users# COMEX_AR # ----- # Libtool doesn't advertise AR nor AR_FLAGS in case the user wishes to # override them. Further, certain systems require a different archiver. # RANLIB may also be affected. # Use this prior to LT_INIT. # # Known archivers: # ar - all known systems # sxar - special to NEC/NEC64 # AC_DEFUN([COMEX_AR], [ AC_ARG_VAR([AR], [archiver used by libtool (default: ar)]) AC_ARG_VAR([AR_FLAGS], [archiver flags used by libtool (default: cru)]) AC_ARG_VAR([RANLIB], [generates index to archive (default: ranlib)]) AS_IF([test "x$AR" = x], [AS_CASE([$comex_cv_target], [NEC|NEC64], [AR=sxar])]) AS_IF([test "x$RANLIB" = x], [AS_CASE([$comex_cv_target], [NEC|NEC64], [RANLIB=true])]) ])dnl ga-5-3/comex/m4/comex_check_func.m40000640005473000001440000000252612122367322015761 0ustar d3n000users# COMEX_CHECK_FUNCS(FUNCTION..., [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------------------------------------ # Inspired by # http://pdh11.blogspot.com/2009/04/standard-macros-available-in-gnu.html # but really a modified version of AC_CHECK_FUNCS. AC_DEFUN([COMEX_CHECK_FUNCS], [m4_map_args_w([$1], [_AH_CHECK_FUNC(], [)])]dnl [AS_FOR([AC_func], [ac_func], [$1], [AC_CHECK_FUNC(AC_func, [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_]AC_func), 1, [Define to 1 if you have AC_func, 0 if you don't]) $2], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_]AC_func), 0, [Define to 1 if you have AC_func, 0 if you don't]) $3], [$4])dnl]) ])# COMEX_CHECK_FUNCS # COMEX_SEARCH_LIBS(FUNCTION, LIBRARIES..., # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------------------------------------ # Inspired by # http://pdh11.blogspot.com/2009/04/standard-macros-available-in-gnu.html # but really a wrapped version of AC_SEARCH_LIBS. AC_DEFUN([COMEX_SEARCH_LIBS], [ AS_VAR_PUSHDEF([HAVE_FUNC], m4_toupper(m4_translit([$1], [-.], [__]))) AC_SEARCH_LIBS([$1], [$2], [AC_DEFINE([HAVE_FUNC], [1], [Define to 1 if you have the `$1' function.]) $3], [AC_DEFINE([HAVE_FUNC], [0], [Define to 1 if you have the `$1' function.]) $4]) AS_VAR_POPDEF([HAVE_FUNC]) ]) # COMEX_SEARCH_LIBS ga-5-3/comex/m4/comex_arg_parse.m40000640005473000001440000000703212247166641015642 0ustar d3n000users# COMEX_ARG_PARSE(ARG, VAR_LIBS, VAR_LDFLAGS, VAR_CPPFLAGS) # ------------------------------------------------------ # Parse whitespace-separated ARG into appropriate LIBS, LDFLAGS, and # CPPFLAGS variables. # some examples (not exhaustive): # $arg="/apps/mpi/hp/2.03.01.00/include/64 /apps/mpi/hp/2.03.01.00/lib/linux_amd64 -lmtmpi" # $arg="/usr/local" # $arg="-I/usr/local/include -L/usr/local/lib -lsomelib" # $arg="/usr/lib/mpich-shmem -lfmpich-shmem -lmpich-shmem -lpmpich-shmem" # $arg="/usr/lib/mpich-shmem/include /usr/lib/mpich-shmem/lib -lfmpich-shmem -lmpich-shmem -lpmpich-shmem" # $arg="/usr/local/lib64 /usr/local/include64" # # Special Cases: # -mkl[=arg] Intel compiler with special -mkl flag for headers and linking AC_DEFUN([COMEX_ARG_PARSE], [AC_COMPUTE_INT([comex_arg_parse_sizeof_voidp], [(long int) (sizeof (void*))]) for arg in $$1 ; do AS_CASE([$arg], [yes], [], [no], [], [-l*], [$2="$$2 $arg"], [-L*], [$3="$$3 $arg"], [-WL*], [$3="$$3 $arg"], [-Wl*], [$3="$$3 $arg"], [-I*], [$4="$$4 $arg"], [*.a], [$2="$$2 $arg"], [*.so], [$2="$$2 $arg"], [*lib], [AS_IF([test -d $arg], [$3="$$3 -L$arg"], [AC_MSG_WARN([$arg of $1 not parsed])])], [*lib/], [AS_IF([test -d $arg], [$3="$$3 -L$arg"], [AC_MSG_WARN([$arg of $1 not parsed])])], [*lib64], [AS_IF([test -d $arg], [$3="$$3 -L$arg"], [AC_MSG_WARN([$arg of $1 not parsed])])], [*lib64/], [AS_IF([test -d $arg], [$3="$$3 -L$arg"], [AC_MSG_WARN([$arg of $1 not parsed])])], [*include], [AS_IF([test -d $arg], [$4="$$4 -I$arg"], [AC_MSG_WARN([$arg of $1 not parsed])])], [*include/], [AS_IF([test -d $arg], [$4="$$4 -I$arg"], [AC_MSG_WARN([$arg of $1 not parsed])])], [*include64], [AS_IF([test -d $arg], [$4="$$4 -I$arg"], [AC_MSG_WARN([$arg of $1 not parsed])])], [*include64/], [AS_IF([test -d $arg], [$4="$$4 -I$arg"], [AC_MSG_WARN([$arg of $1 not parsed])])], [-mkl*], [$2="$$2 $arg"], [comex_arg_parse_ok=no]) # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include AS_IF([test "x$comex_arg_parse_ok" = xno], [AS_IF([test "x$comex_arg_parse_sizeof_voidp" = x8], [AS_IF([test -d $arg/lib64], [$3="$$3 -L$arg/lib64"; comex_arg_parse_ok=yes], [test -d $arg/lib], [$3="$$3 -L$arg/lib"; comex_arg_parse_ok=yes]) AS_IF([test -d $arg/include64],[$4="$$4 -I$arg/include64"; comex_arg_parse_ok=yes], [test -d $arg/include], [$4="$$4 -I$arg/include"; comex_arg_parse_ok=yes])], [AS_IF([test -d $arg/lib], [$3="$$3 -L$arg/lib"; comex_arg_parse_ok=yes]) AS_IF([test -d $arg/include], [$4="$$4 -I$arg/include"; comex_arg_parse_ok=yes])])]) # $arg still unknown, look for "lib" and "include" anywhere... AS_IF([test "x$comex_arg_parse_ok" = xno], [AS_CASE([$arg], [*lib*], [AS_IF([test -d $arg], [$3="$$3 -L$arg"; comex_arg_parse_ok=yes])], [*include*],[AS_IF([test -d $arg], [$4="$$4 -I$arg"; comex_arg_parse_ok=yes])])]) # warn user that $arg fell through AS_IF([test "x$comex_arg_parse_ok" = xno], [AC_MSG_WARN([$arg of $1 not parsed])]) done])dnl ga-5-3/comex/m4/comex_mpi_test_disable.m40000640005473000001440000000045012122367322017172 0ustar d3n000users# COMEX_DISABLE_MPI_TESTS() # --------------------- # Whether to disable all MPI linker tests. AC_DEFUN([COMEX_DISABLE_MPI_TESTS], [AC_ARG_ENABLE([mpi-tests], [AS_HELP_STRING([--disable-mpi-tests], [disable MPI linker tests])], [], [enable_mpi_tests=yes]) ])# COMEX_DISABLE_MPI_TESTS ga-5-3/comex/m4/ltsugar.m40000640005473000001440000001042412122367322014153 0ustar d3n000users# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) ga-5-3/comex/m4/comex_mpicc.m40000640005473000001440000000416612122367322014766 0ustar d3n000users# COMEX_PROG_MPICC # ---------------- # If desired, replace CC with MPICC while searching for a C compiler. # # Known C compilers # cc generic compiler name # ccc Fujitsu ?? old Cray ?? # cl # ecc Intel on IA64 ?? # gcc GNU # icc Intel # bgxlc Intel on BG/P # bgxlc_r Intel on BG/P, thread safe # xlc Intel # xlc_r Intel, thread safe # pgcc Portland Group # pathcc PathScale # sxcc NEC SX # fcc Fujitsu # opencc AMD's x86 open64 # suncc Sun's Studio # craycc Cray # # Known MPI C compilers: # mpicc # mpixlc_r # mpixlc # hcc # mpxlc_r # mpxlc # sxmpicc NEC SX # mpifcc Fujitsu # mpgcc # mpcc # cmpicc # cc # AC_DEFUN([COMEX_PROG_MPICC], [AC_ARG_VAR([MPICC], [MPI C compiler]) AS_CASE([$comex_cv_target_base], [BGP], [comex_mpicc_pref=mpixlc_r; comex_cc_pref=bgxlc_r], []) # In the case of using MPI wrappers, set CC=MPICC since CC will override # absolutely everything in our list of compilers. # Save CC, just in case. AS_IF([test x$with_mpi_wrappers = xyes], [AS_IF([test "x$CC" != "x$MPICC"], [comex_orig_CC="$CC"]) AS_CASE([x$CC:x$MPICC], [x:x], [], [x:x*], [CC="$MPICC"], [x*:x], [AC_MSG_WARN([MPI compilers desired but CC is set while MPICC is unset.]) AC_MSG_WARN([CC will be ignored during compiler selection, but will be]) AC_MSG_WARN([tested first during MPI compiler unwrapping. Perhaps you]) AC_MSG_WARN([meant to set MPICC instead of or in addition to CC?]) CC=], [x*:x*], [AS_IF([test "x$CC" != "x$MPICC"], [AC_MSG_WARN([MPI compilers desired, MPICC and CC are set, and MPICC!=CC.]) AC_MSG_WARN([Choosing MPICC over CC.]) AC_MSG_WARN([CC will be tested first during MPI compiler unwrapping.])]) CC="$MPICC"], [AC_MSG_ERROR([CC/MPICC case failure])])]) comex_cc="bgxlc_r bgxlc xlc_r xlc pgcc pathcc icc sxcc fcc opencc suncc craycc gcc cc ecc cl ccc" comex_mpicc="mpicc mpixlc_r mpixlc hcc mpxlc_r mpxlc sxmpicc mpifcc mpgcc mpcc cmpicc cc" AS_IF([test x$with_mpi_wrappers = xyes], [CC_TO_TEST="$comex_mpicc_pref $comex_mpicc"], [CC_TO_TEST="$comex_cc_pref $comex_cc"]) AC_PROG_CC([$CC_TO_TEST]) ])dnl ga-5-3/README0000640005473000001440000005271111442451124011460 0ustar d3n000usersGLOBAL ARRAYS ~~~~~~~~~~~~~ DISCLAIMER ========== This material was prepared as an account of work sponsored by an agency of the United States Government. Neither the United States Government nor the United States Department of Energy, nor Battelle, nor any of their employees, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, SOFTWARE, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ACKNOWLEDGMENT ============== This software and its documentation were produced with United States Government support under Contract Number DE-AC06-76RLO-1830 awarded by the United States Department of Energy. The United States Government retains a paid-up non-exclusive, irrevocable worldwide license to reproduce, prepare derivative works, perform publicly and display publicly by or for the US Government, including the right to distribute to other US Government contractors. The primary current source of funding for development of GA is the DoE-2000 ACTS project. GA is a part of the ACTS toolkit: http://acts.nersc.gov FOR THE IMPATIENT ================= The command:: ./configure && make && make install should compile the static GA library (libga.a) to use sockets and install headers and libraries to /usr/local/include and /usr/local/lib, respectively. Please refer to the INSTALL file for generic build instructions. That is a good place to start if you are new to using "configure; make; make install" types of builds. Detailed instructions are covered later in this file. QUESTIONS/HELP/SUPPORT/BUG-REPORT ================================= email: hpctools@pnl.gov If you encounter any problems, please first refer to the file NOTES located in the same directory and see the GA support webpage: http://www.emsl.pnl.gov/docs/global/support.html Please don't hesitate to send us an email. An archive of emails is available at: http://groups.google.com/group/hpctools WHERE IS THE DOCUMENTATION? =========================== The GA webpage has the most current versions of the Fortran and C documentation and the User's Manual in the HTML format: http://www.emsl.pnl.gov/docs/global/ ABOUT THIS SOFTWARE =================== This directory contains the Global Arrays (GA), Aggregate Remote Memory Copy Interface (ARMCI) run-time library, and Memory Allocator (MA), parallel I/O libraries (DRA,EAF,SF), TCGMSG, and TCGMSG-MPI packages bundled together. Global Arrays is a portable Non-Uniform Memory Access (NUMA) shared-memory programming environment for distributed and shared memory computers. It augments the message-passing model by providing a shared-memory like access to distributed dense arrays. ARMCI provides one-sided remote memory operations used by GA. DRA (Disk Resident Arrays) is a parallel I/O library that maintains dense 2-dim arrays on disk. SF (Shared Files) is a parallel I/O library that allows noncollective I/O to a parallel file. EAF (Exclusive Access Files) is parallel I/O library that supports I/O to private files. TCGMSG is a simple, efficient, but becoming obsolete message-passing library. TCGMSG-MPI is a TCGMSG interface implementation on top of MPI and ARMCI. MA is a dynamic memory allocator/manager for Fortran and C programs. GA++ is a C++ binding for global arrays. See file 'COPYRIGHT' for copying conditions. See file 'INSTALL' for compilation and installation instructions (generic). See file 'NEWS' for a list of major changes in the current release. See file 'AUTHORS' for the names of anyone who has contributed to GA. See file 'NOTES' for a few platform-specific symptoms and fixes. DIRECTORY STRUCTURE (ALPHABETICALLY) ==================================== - armci + config (configuration makefile includes) + doc (documentation for ARMCI library) + lib (compatibility source files for missing system features) + src (source code for ARMCI library) - build-aux (autotools support scripts) - cca (common component architecture) - compat (compatibility source files for missing system features) - doc (documentation) - ga++ (C++ Bindings for Global Arrays) + doc (contains sample Doxyfile for Doxygen doc generator) + src (source code for GA C++ bindings) + testing (test programs) - gaf2c (Fortran-to-C compatibility library and tests) - global + doc (paper & documentation in PostScript, HTML & plain text) + src (source code for GA library) + testing (GA test programs and performance results) + trace (library and programs to generate and process tracefiles) + X (xregion visualization program for GA) - LinAlg (linear algebra software used by GA) + lapack+blas - m4 (autoconf macros) - ma (Memory Allocator) + man - pario + dra (Disk Resident Array Library code) + eaf (Exclusive Access Files Library code) + elio ("device" layer for other parallel I/O models) + sf (Shared Files Library code) - tcgmsg (simple, legacy message-passing library) + ipcv4.0 + ipcv5.0 + tcgmsg-mpi (TCGMSG on top of MPI) HOW TO BUILD THE PACKAGE? ========================= Please refer to the INSTALL file for generic build instructions. That is a good place to start if you are new to using "configure; make; make install" types of builds. The following will cover platform-specific considerations as well as the various optional features of GA. Customizations to the GA build via the configure script are discussed next. Configuration Options --------------------- There are many options available when configuring GA. Although configure can be safely run within this distributions' root folder, we recommend performing an out-of-source (aka VPATH) build. This will cleanly separate the generated Makefiles and compiled object files and libraries from the source code. This will allow, for example, one build using sockets versus another build using OpenIB for the communication layer to use the same source tree e.g.:: mkdir bld_mpi_sockets && cd bld_mpi_sockets && ../configure mkdir bld_mpi_openib && cd bld_mpi_openib && ../configure --with-openib Regardless of your choice to perform a VPATH build, the following should hopefully elucidate the myriad options to configure. Only the options requiring additional details are documented here. ./configure --help will certainly list more options in addition to limited documentation. --disable-f77 Disable Fortran code. This used to be the old GA_C_CORE or NOFORT environment variables which enabled the C++ bindings. However, it is severely broken. There are certain cases where Fortran code is required but this will not inhibit the building of the C++ bindings. In the future we may be able to eliminate the need for the Fortran compiler/linker. Use at your own risk (of missing symbols at link-time.) --enable-cxx Build C++ interface. This will require the C++ linker to locate the Fortran libraries (handled automatically) but user C++ code will require the same considerations (C++ linker, Fortran libraries.) --disable-opt Don't use hard-coded optimization flags. GA is a highly-optimized piece of software. There are certain optimization levels or flags that are known to break the software. If you experience mysterious faults, consider rebuilding without optimization by using this option. --enable-peigs Enable Parallel Eigensystem Solver interface. This will build the stubs required to call into the peigs library (external). --enable-checkpoint Enable checkpointing. Untested. For use with old X-based visualization tool. --enable-profile Enable profiling. Not sure what this does, sorry. --enable-trace Enable tracing. Not sure what this does, sorry. --enable-thread-safety **unsupported** Turn on thread safety. --enable-underscoring Force single underscore for all external Fortran symbols. Usually, configure is able to detect the name mangling scheme of the detected Fortran compiler and will default to using what is detected. This includes any variation of zero, one, or two underscores or whether UPPERCASE or lowercase symbols are used. If you want to force a single underscore which was the default of older GA builds, use this option. Otherwise, you can use the FFLAGS environment variable to override the Fortran compiler's or platform's defaults e.g. configure FFLAGS=-fno-underscoring. --enable-i4 Use 4 bytes for Fortran INTEGER size. Otherwise, the default INTEGER size is set to the results of the C sizeof(void*) operator. --enable-i8 Use 8 bytes for Fortran INTEGER size. Otherwise, the default INTEGER size is set to the results of the C sizeof(void*) operator. --enable-shared Build shared libraries [default=no]. Useful, for example, if you plan on wrapping GA with an interpreted language such as Python. Otherwise, some systems only support static libraries (or vice versa) but static libraries are the default. For most of the external software packages an optional argument is allowed (represented as ARG below.) **ARG can be omitted** or can be one or more whitespace-separated directories, linker or preprocessor directives. For example:: --with-mpi="/path/to/mpi -lmylib -I/mydir" --with-mpi=/path/to/mpi/base --with-mpi=-lmpich The messaging libraries supported include MPI, TCGMSG, and TCGMSG over MPI. If you omit their respective --with-* option, MPI is the default. GA can be built to work with MPI or TCGMSG. Since the TCGMSG package is small (comparing to portable MPI implementations), compiles fast, it is still bundled with the GA package. --with-mpi=ARG Select MPI as the messaging library (default). If you omit ARG, we attempt to locate the MPI compiler wrappers. If you supply anything for ARG, we will parse ARG as indicated above. --with-tcgmsg Select TCGMSG as the messaging library; if --with-mpi is also specified then TCGMSG over MPI is used. --with-vampir=ARG Enable VAMPIR performance tracing. http://www.vampir.eu --with-blas=ARG Use external BLAS library; attempt to detect sizeof(INTEGER) used to compile BLAS; if not found, an internal BLAS is built --with-blas4=ARG Use external BLAS library compiled with sizeof(INTEGER)==4 --with-blas8=ARG Use external BLAS library compiled with sizeof(INTEGER)==8 --with-lapack=ARG Use external LAPACK library. If not found, an internal one is built. --with-scalapack=ARG Use external ScaLAPACK library. The ARMCI networks supported are listed next. Our ability to automatically locate required headers libraries is currently inadequate. Therefore, you will likely need to specify the optional ARG pointing to the necessary directories and/or libraries. sockets is the default ARMCI network if nothing else is specified. --with-bgml=ARG select armci network as IBM BG/L --with-cray-shmem=ARG select armci network as Cray XT shmem --with-dcmf=ARG select armci network as IBM BG/P Deep Computing Message Framework --with-lapi=ARG select armci network as IBM LAPI --with-mpi-spawn=ARG select armci network as MPI-2 dynamic process mgmt --with-openib=ARG select armci network as Infiniband OpenIB --with-portals=ARG select armci network as Cray XT portals --with-sockets=ARG select armci network as Ethernet TCP/IP (default) There are some influential environment variables as documented in configure --help, however there are a few that are special to GA. - THREAD_LIBRARY See --enable-thread-safety. I don't know what this does, sorry. - F77_INT_FLAG Fortran compiler flag to set the default INTEGER size. We know about certain Fortran flags that set the default INTEGER size, but there will certainly be some new (or old) ones that we don't know about. If the configure test to determine the correct flag fails, please try setting this variable and rerunning configure. - F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS If cross compiling, set to either "yes" (default) or "no" (after string). For compatibility between Fortran and C, a Fortran subroutine written in C that takes a character string must take an additional argument (one per character string) indicating the length of the string. This 'hidden' argument appears either immediately after the string in the argument list or after all other arguments to the function. This is compiler dependent. We attempt to detect this behavior automatically, but in the case of cross-compiled systems it may be necessary to specify the less usual after string convention the gaf2c/testarg program crashes. Special Notes for BLAS ---------------------- BLAS, being a Fortran library, can be compiled with a default INTEGER size of 4 or a promoted INTEGER size of 8. Experience has shown us that most of the time the default size of INTEGER used is 4. In some cases, however, you may have an external BLAS library which is using 8-byte INTEGERs. In order to correctly interface with an external BLAS library, GA must know the size of INTEGER used by the BLAS library. configure has the following BLAS-related options: --with-blas, --with-blas4, and --with-blas8. The latter two will force the INTEGER size to 4- or 8-bytes, respectively. The first option, --with-blas, defaults to 4-byte INTEGERS *however* in the two special cases of using ACML or MKL, it is possible to detect 8-byte INTEGERs automatically. As documented in the ACML manual, if the path to the library has "_int64" then 8-byte INTEGERs are used. As documented in the MKL manual, if the library is "ilp64", then 8-byte INTEGERs are used. You may always override --with-blas by specifying the INTEGER size using one of the two more specific options. Cross-Compilation Issues ------------------------ Certain platforms cross-compile from a login node for a compute node, or one might choose to cross-compile for other reasons. Cross-compiling requires the use of the --host option to configure which indicates to configure that certain run-time tests should not be executed. See INSTALL for details on use of the --host option. Two of our target platforms are known to require cross-compilation, Cray XT and IBM Blue Gene. Cray XT +++++++ It has been noted that configure still succeeds without the use of the --host flag. If you experience problems without --host, we recommend:: configure --host=x86_64-unknown-linux-gnu And if that doesn't work (cross-compilation is not detected) you must then *force* cross-compilation using both --host and --build together:: configure --host=x86_64-unknown-linux-gnu --build=x86_64-unknown-linux-gnu BlueGene/P ++++++++++ Currently the only way to detect the BGP platform and compile correctly is to use:: configure --host=powerpc-bgp-linux The rest of the configure options apply as usual e.g. --with-dcmf in this case. Compiler Selection ------------------ Unless otherwise noted you can try to overwrite the default compiler names detected by configure by defining F77, CC, and CXX for Fortran (77), C, and C++ compilers, respectively. Or when using the MPI compilers MPIF77, MPICC, and MPICXX for MPI Fortran (77), C, and C++ compilers, respectively:: configure F77=f90 CC=gcc configure MPIF77=mpif90 MPICC=mpicc Although you can change the compiler at make-time it will likely fail. Many platform-specific compiler flags are detected at configure-time based on the compiler selection. If changing compilers, we recommend rerunning configure as above. After Configuration ------------------- By this point we assume you have successfully run configure either from the base distribution directory or from a separate build directory (aka VPATH build.) You are now ready to run 'make'. You can optionally run parallel make using the "-j" option which significantly speeds up the build. If using the MPI compiler wrappers, occasionally using "-j" will cause build failures because the MPI compiler wrapper creates a temporary symlink to the mpif.h header. In that case, you won't be able to use the "-j" option. Further, the influential environment variables used at configure-time can be overridden at make-time in case problems are encountered. For example:: ./configure CFLAGS=-Wimplicit ... make CFLAGS="-Wimplicit -g -O0" One particularly influential make variable is "V" which controls the verbosity of the make output. This variable corresponds to the --dis/enable-silent-riles configure-time option, but I often prefer the make-time variable:: make V=0 (configure --enable-silent-rules) make V=1 (configure --disable-silent-rules) Test Programs ------------- Running "make checkprogs" will build most test and example programs. Note that not all tests are built -- some tests depend on certain features being detected or enabled during configure. These programs are not intented to be examples of good GA coding practices because they often include private headers. However, they help us debug or time our GA library. Test Suite ++++++++++ Running "make check" will build most test and example programs (See "make checkprogs" notes above) in addition to running the test suite. The test suite runs both the serial and parallel tests. The test suite must know how to launch the parallel tests via the MPIEXEC variable. Please read your MPI flavor's documentation on how to launch, or if using TCGMSG you will use the "parallel" tool. For example, the following is the command to launch the test suite when compiled with OpenMPI:: make check MPIEXEC="mpiexec -np 4" All tests have a per-test log file containing the output of the test. So if the test is global/testing/test.x, the log file would be global/testing/test.log. The output of failed tests is collected in the top-level log summary test-suite.log. The test suite will recurse into the ARMCI directory and run the ARMCI test suite first. If the ARMCI test suite fails, the GA test suite will not run (the assumption here is that you should fix bugs in the dependent library first.) To run only the GA test suite, type "make check-ga" with the appropriate MPIEXEC variable. How to Run GA Test Programs? ---------------------------- Depends on the system. MPPs like Intel iPSC/860, Delta, Paragon, IBM SPx, Cray T3/E have their own commands for submitting parallel jobs. On workstations and clusters, GA are run like ordinary message-passing programs:: To run GA programs with MPI, you need to built the package to be compatible with MPI (see README in ./global and documentation in ./global/doc/ ) and run it as any other MPI program. The GA package has been tested only with a limited number of MPI implementations (MPICH, and vendor's: Intel, IBM, Sun, HP, and SGI). TCGMSG `parallel' command (built automaticaly in ./tcgmsg/ipcv4.0/parallel if needed) is used to start a job on clusters if you are using TCGMSG as your message-passing library. On the workstations, GA-based programs that use TCGMSG can be run with a single process without the `parallel' command -- just by typing program name -- useful for debugging. Other Issues ============ a. LINUX64 supports ALPHA, Itanium, Opteron, and Em64T processors only. b. The SGI_N32 version is recommended on all newer SGI boxes including the O2, Octane, Origin, Indigo2, and PowerChallenge systems unless the system has lots of memory and your program uses huge arrays (>4GB) in which case 64-bit addressing is required (SGITFP version). In addition, TARGET_CPU environment variable can be used to choose the optimal compiler flags for R8000 and R10000 processors. c. In 64 bit platforms, if you are using blas libraries that takes integer as 8 bytes, then set the following environment variables: setenv BLAS_I8 yes setenv BLAS_LIB specify_your_blas_library e.g.setenv BLAS_LIB -L/usr/lib/libblas.a d. To turn Async I/O on under Linux, set environment variable USE_LINUXAIO=y Performance Tuning ------------------ global/src/gaconfig.h has a varible called AVOID_MA_STORAGE. If defined, this variable forces GA to use ARMCI memory which can lead to better performance on platforms on which memory needs to be registered for fast communication. Setting an environment variable MA_USE_ARMCI_MEM forces MA library to use ARMCI memory, communication via which can be faster on networks like GM, VIA and InfiniBand. ga-5-3/config.h.in0000640005473000001440000004623712122367322012633 0ustar d3n000users/* config.h.in. Generated from configure.ac by autoheader. */ /* TODO */ #undef ACC_SMP /* TODO */ #undef ALLOC_MUNMAP /* TODO */ #undef ALLOW_PIN /* Defined when using DCMF */ #undef ARMCIX /* Define to 1 on BlueGene/L systems */ #undef BGL /* TODO */ #undef BGML /* Define to 1 on BlueGene/P systems */ #undef BGP /* Define to sizeof(INTEGER) used to compile BLAS */ #undef BLAS_SIZE /* Define to 1 on Cray XT systems using Catamount */ #undef CATAMOUNT /* TODO */ #undef CLUSTER /* TODO */ #undef CRAY_SHMEM /* Define to 1 on Cray SV1 systems */ #undef CRAY_SV1 /* Define to 1 on Cray SV2 systems */ #undef CRAY_SV2 /* Define to 1 on Cray T3E systems */ #undef CRAY_T3E /* for Gemini */ #undef CRAY_UGNI /* TODO */ #undef CRAY_XT /* Define to 1 on Cray YMP systems */ #undef CRAY_YMP /* Define to 1 on Cygnus systems */ #undef CYGNUS /* Define to 1 on Cygwin systems */ #undef CYGWIN /* TODO */ #undef DATA_SERVER /* Defined when using DCMF */ #undef DCMF /* Define to 1 on DEC OSF */ #undef DECOSF /* TODO */ #undef DOELAN4 /* enables ARMCI in MA */ #undef ENABLE_ARMCI_MEM_OPTION /* Define if checkpointing is enabled */ #undef ENABLE_CHECKPOINT /* Define to 1 if using Fortran */ #undef ENABLE_F77 /* Define to 1 if PeIGS is enabled */ #undef ENABLE_PEIGS /* set to 1 if profiling is enabled */ #undef ENABLE_PROFILING /* Define if tracing is enabled */ #undef ENABLE_TRACE /* whether the hidden string length comes after all other args */ #undef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS /* Define to dummy `main' function (if any) required to link to the Fortran libraries. */ #undef F77_DUMMY_MAIN /* Name of F77 flush routine */ #undef F77_FLUSH /* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ #undef F77_FUNC /* As F77_FUNC, but for C identifiers containing underscores. */ #undef F77_FUNC_ /* Name of routine e.g. getarg, pxfgetarg */ #undef F77_GETARG /* Arguments to getarg e.g. i,s or i,s,l,ier */ #undef F77_GETARG_ARGS /* Declaration of routine e.g. external GETARG */ #undef F77_GETARG_DECL /* Name of routine e.g. iargc, ipxfargc */ #undef F77_IARGC /* Define if F77 and FC dummy `main' functions are identical. */ #undef FC_DUMMY_MAIN_EQ_F77 /* Define to 1 on fujitsu systems */ #undef FUJITSU_VPP /* Define to 1 on fujitsu systems */ #undef FUJITSU_VPP64 /* CPP symbol for function name, if available */ #undef FUNCTION_NAME /* Module command when using Fortran 90 compiler e.g. use f90_unix */ #undef FXX_MODULE /* for Gemini */ #undef GEMINI /* TODO */ #undef GM /* set to 1 if ARMCI has armci_group_comm function */ #undef HAVE_ARMCI_GROUP_COMM /* set to 1 if ARMCI has ARMCI_Group.comm member */ #undef HAVE_ARMCI_GROUP_COMM_MEMBER /* set to 1 if ARMCI has ARMCI_Initialized function */ #undef HAVE_ARMCI_INITIALIZED /* set to 1 if ARMCI has armci_msg_finalize function */ #undef HAVE_ARMCI_MSG_FINALIZE /* set to 1 if ARMCI has armci_msg_init function */ #undef HAVE_ARMCI_MSG_INIT /* set to 1 if ARMCI has armci_notify function */ #undef HAVE_ARMCI_NOTIFY /* set to 1 if ARMCI has armci_stride_info_init function */ #undef HAVE_ARMCI_STRIDE_INFO_INIT /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_ASSERT_H /* Define to 1 if you have the `bcopy' function, 0 if you don't */ #undef HAVE_BCOPY /* Define to 1 if using external BLAS library */ #undef HAVE_BLAS /* Define to 1 if you have the `bzero' function, 0 if you don't */ #undef HAVE_BZERO /* Define to 1 if you have the `create_shared_region' function, 0 if you don't */ #undef HAVE_CREATE_SHARED_REGION /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the `dtime' function. */ #undef HAVE_DTIME /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_ERRNO_H /* Define to 1 if you have the `etime' function. */ #undef HAVE_ETIME /* whether F77 flush routine is available */ #undef HAVE_F77_FLUSH /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_FCNTL_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_FFIO_H /* Define to 1 if you have the 'floor' function. */ #undef HAVE_FLOOR /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ #undef HAVE_FSEEKO /* Define to 1 if you have the `ftruncate' function, 0 if you don't */ #undef HAVE_FTRUNCATE /* Define to 1 if you have the `gethostbyname' function, 0 if you don't */ #undef HAVE_GETHOSTBYNAME /* Define to 1 if you have the `gethostname' function, 0 if you don't */ #undef HAVE_GETHOSTNAME /* Define to 1 if you have the `getpagesize' function, 0 if you don't */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the `gettimeofday' function, 0 if you don't */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the 'hypot' function. */ #undef HAVE_HYPOT /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if using external LAPACK library */ #undef HAVE_LAPACK /* Defined if plot library is available */ #undef HAVE_LIBPLOT /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_LINUX_LIMITS_H /* Define to 1 if the system has the type `long double'. */ #undef HAVE_LONG_DOUBLE /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_MALLOC_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_MATH_H /* Define to 1 if you have the `memalign' function, 0 if you don't */ #undef HAVE_MEMALIGN /* Define to 1 if you have the `memcpy' function, 0 if you don't */ #undef HAVE_MEMCPY /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function, 0 if you don't */ #undef HAVE_MEMSET /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the 'modf' function. */ #undef HAVE_MODF /* Define to 1 if you have the `munmap' function, 0 if you don't */ #undef HAVE_MUNMAP /* define if the compiler implements namespaces */ #undef HAVE_NAMESPACES /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* set to 1 if libonesided has onesided_fadd (added in v1.6) */ #undef HAVE_ONESIDED_FADD /* set to 1 if libonesided has onesided_mem_htflush (added in v1.5) */ #undef HAVE_ONESIDED_MEM_HTFLUSH /* Define to 1 if you have the `pause' function, 0 if you don't */ #undef HAVE_PAUSE /* whether the ScaLAPACK library implements pdsyevr */ #undef HAVE_PDSYEVR /* Define to 1 if you have the `posix_memalign' function, 0 if you don't */ #undef HAVE_POSIX_MEMALIGN /* Define to 1 if you have the 'pow' function. */ #undef HAVE_POW /* define to 1 if the C compiler has a program name global varaible */ #undef HAVE_PROGNAME /* Define to 1 if you have the `putenv' function, 0 if you don't */ #undef HAVE_PUTENV /* Define to 1 if you have ScaLAPACK library. */ #undef HAVE_SCALAPACK /* Define to 1 if you have the `select' function, 0 if you don't */ #undef HAVE_SELECT /* Define to 1 if you have the `setenv' function, 0 if you don't */ #undef HAVE_SETENV /* Define to 1 if you have the `shared_malloc' function, 0 if you don't */ #undef HAVE_SHARED_MALLOC /* Define to 1 if you have the `shmalloc' function, 0 if you don't */ #undef HAVE_SHMALLOC /* Define to 1 if you have the `socket' function, 0 if you don't */ #undef HAVE_SOCKET /* Define to 1 if you have the 'sqrt' function. */ #undef HAVE_SQRT /* Define to 1 if you have the `srand' function, 0 if you don't */ #undef HAVE_SRAND /* Define to 1 if you have the `srandom' function, 0 if you don't */ #undef HAVE_SRANDOM /* Define to 1 if stdbool.h conforms to C99. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strchr' function, 0 if you don't */ #undef HAVE_STRCHR /* Define to 1 if you have the `strdup' function, 0 if you don't */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror' function, 0 if you don't */ #undef HAVE_STRERROR /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_STRING_H /* Define to 1 if you have the `strstr' function, 0 if you don't */ #undef HAVE_STRSTR /* Define to 1 if you have the `strtol' function, 0 if you don't */ #undef HAVE_STRTOL /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_SYS_FILE_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_SYS_FSID_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_SYS_FSTYP_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_SYS_IOSW_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_SYS_IPC_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_SYS_MMAN_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_SYS_MOUNT_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_SYS_SEM_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_SYS_SHM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_SYS_STATFS_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_SYS_STATVFS_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_SYS_VFS_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define this if weak aliases may be created with #pragma weak */ #undef HAVE_SYS_WEAK_ALIAS_PRAGMA /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_TIME_H /* define if sys/sem.h has union semun */ #undef HAVE_UNION_SEMUN /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* Define to 1 if you have the header file, 0 if you don't */ #undef HAVE_WINDOWS_H /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to 1 on hitachi systems */ #undef HITACHI /* Define to 1 on HP-UX systems */ #undef HPUX /* Define to 1 on 64bit HP-UX systems */ #undef HPUX64 /* Define to 1 on IBM SP systems */ #undef IBM /* Define to 1 on 64bit IBM SP systems */ #undef IBM64 /* Define to 1 on ??? systems */ #undef INTERIX /* TODO */ #undef LAPI /* Define to 1 on 64bit IBM systems with LAPI */ #undef LAPI64 /* TODO */ #undef LAPI_RDMA /* for Gemini */ #undef LIBONESIDED /* Define to 1 on generic Linux systems */ #undef LINUX /* Define to 1 on generic 64bit Linux systems */ #undef LINUX64 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define to 1 on OSX systems */ #undef MACX /* Define to 1 on 64bit OSX systems */ #undef MACX64 /* TODO */ #undef MELLANOX /* TODO */ #undef MPI_MT /* TODO */ #undef MPI_SPAWN /* Use MPI for messaging */ #undef MSG_COMMS_MPI /* Use TCGMSG for messaging */ #undef MSG_COMMS_TCGMSG /* Use TCGMSG (ipcv4.0) for messaging */ #undef MSG_COMMS_TCGMSG4 /* Use TCGMSG (ipcv5.0) for messaing */ #undef MSG_COMMS_TCGMSG5 /* TODO */ #undef MULTI_CTX /* Define to 1 if assertions should be disabled. */ #undef NDEBUG /* Define to 1 on NEC systems */ #undef NEC /* Define to 1 on 64bit NEC systems */ #undef NEC64 /* whether to wait until the last moment to call ARMCI_Init() in TCGMSG-MPI */ #undef NEED_DELAY_TCGMSG_MPI_STARTUP /* Define to 1 if not using Fortran */ #undef NOFORT /* this was defined unconditionally when using LAPI for tcgmsg 5 */ #undef NOTIFY_SENDER /* Set some mallopt options */ #undef NOUSE_MMAP /* Disables use of shared memory */ #undef NO_SHM /* TODO */ #undef OPENIB /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* TODO */ #undef PEND_BUFS /* TODO */ #undef PORTALS /* TODO */ #undef POSIX_THREADS /* define to the name of the program name global variable */ #undef PROGNAME /* TODO */ #undef PTHREADS /* TODO */ #undef QUADRICS /* TODO */ #undef REPORT_SHMMAX /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* ScaLAPACK is using 8-byte integers */ #undef SCALAPACK_I8 /* Define to the type of arg 1 for `select'. */ #undef SELECT_TYPE_ARG1 /* Define to the type of args 2, 3 and 4 for `select'. */ #undef SELECT_TYPE_ARG234 /* Define to the type of arg 5 for `select'. */ #undef SELECT_TYPE_ARG5 /* TODO */ #undef SERVER_THREAD /* Define to 1 on ??? systems */ #undef SGI /* Define to 1 on ??? systems */ #undef SGITFP /* Define to 1 on ??? systems */ #undef SGI_N32 /* The size of `char', as computed by sizeof. */ #undef SIZEOF_CHAR /* The size of `double', as computed by sizeof. */ #undef SIZEOF_DOUBLE /* The size of 'DOUBLE PRECISION' as computed by C's sizeof. */ #undef SIZEOF_F77_DOUBLE_PRECISION /* The size of 'INTEGER' as computed by C's sizeof. */ #undef SIZEOF_F77_INTEGER /* The size of 'REAL' as computed by C's sizeof. */ #undef SIZEOF_F77_REAL /* The size of `float', as computed by sizeof. */ #undef SIZEOF_FLOAT /* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of `long double', as computed by sizeof. */ #undef SIZEOF_LONG_DOUBLE /* The size of `long long', as computed by sizeof. */ #undef SIZEOF_LONG_LONG /* The size of `short', as computed by sizeof. */ #undef SIZEOF_SHORT /* The size of `void*', as computed by sizeof. */ #undef SIZEOF_VOIDP /* TODO */ #undef SOCKETS /* Define to 1 on Solaris systems */ #undef SOLARIS /* Define to 1 on 64bit Solaris systems */ #undef SOLARIS64 /* TODO */ #undef SPAWN_CRAY_XT /* This is always defined. Dunno why. */ #undef STATS /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Defined if we want this system to use SYSV shared memory */ #undef SYSV /* deprecated, use MSG_COMMS_TCGMSG */ #undef TCGMSG /* turn on thread safety */ #undef THREAD_SAFE /* TODO */ #undef USE_MALLOC /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* TODO */ #undef VAPI /* This is always defined. Dunno why. */ #undef VERIFY /* Version number of package */ #undef VERSION /* TODO */ #undef VIA /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ #undef _LARGEFILE_SOURCE /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE /* TODO */ #undef _REENTRANT /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to the type of a signed integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ #undef int64_t /* Define to `long int' if does not define. */ #undef off_t /* Define to `int' if does not define. */ #undef pid_t /* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported directly. */ #undef restrict /* Work around a bug in Sun C++: it does not support _Restrict or __restrict__, even though the corresponding Sun C compiler ends up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. Perhaps some future version of Sun C++ will work with restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ #if defined __SUNPRO_CC && !defined __RESTRICT # define _Restrict # define __restrict__ #endif /* Define to `unsigned int' if does not define. */ #undef size_t /* Define as `fork' if `vfork' does not work. */ #undef vfork /* Define to empty if the keyword `volatile' does not work. Warning: valid code using `volatile' can become incorrect without. Disable with care. */ #undef volatile /* DO NOT MODIFY THE FOLLOWING PREPROCESSOR DIRECTIVES */ #ifdef MSG_COMMS_MPI # ifdef __cplusplus # define MPIPP # else # define MPI # endif /* __cplusplus */ #endif /* MSG_COMMS_MPI */ ga-5-3/build-aux/0000750005473000001440000000000012275260531012470 5ustar d3n000usersga-5-3/build-aux/depcomp0000750005473000001440000005064312247162412014053 0ustar d3n000users#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-03-27.16; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # A tabulation character. tab=' ' # A newline character. nl=' ' if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form 'foo.o: dependent.h', # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ga-5-3/build-aux/ltmain.sh0000750005473000001440000105154412247166641014333 0ustar d3n000users # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mkl*|-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -mkl*|-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mkl*|-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 ga-5-3/build-aux/install-sh0000750005473000001440000003325611650323546014507 0ustar d3n000users#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ga-5-3/build-aux/missing0000750005473000001440000002415212247162412014071 0ustar d3n000users#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ga-5-3/build-aux/config.guess0000750005473000001440000012743212247162412015017 0ustar d3n000users#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ga-5-3/build-aux/config.sub0000750005473000001440000010517612247162412014463 0ustar d3n000users#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ga-5-3/gfutex/0000750005473000001440000000000012275260562012104 5ustar d3n000usersga-5-3/gfutex/Makefile.am0000640005473000001440000000332411705616646014150 0ustar d3n000usersACLOCAL_AMFLAGS = -I m4 -I ../m4 EXTRA_DIST = AM_FFLAGS = AM_CFLAGS = AM_CXXFLAGS = AM_CPPFLAGS = AM_CPPFLAGS += -I$(top_srcdir)/src AM_CPPFLAGS += $(TBB_CPPFLAGS) AM_CPPFLAGS += $(BOOST_CPPFLAGS) AM_CPPFLAGS += $(GA_CPPFLAGS) AM_CPPFLAGS += $(GA_MP_CPPFLAGS) LDADD = LDADD += libgfutex.la LDADD += $(TBB_LIBS) LDADD += $(GA_LIBS) LDADD += $(GA_MP_LIBS) LDADD += $(GA_FLIBS) AM_LDFLAGS = AM_LDFLAGS += $(TBB_LDFLAGS) AM_LDFLAGS += $(GA_LDFLAGS) AM_LDFLAGS += $(GA_MP_LDFLAGS) AM_LDFLAGS += $(GA_FLIBS) include_HEADERS = include_HEADERS += src/gfutex.h lib_LTLIBRARIES = lib_LTLIBRARIES += libgfutex.la libgfutex_la_SOURCES = libgfutex_la_SOURCES += src/gf_cache.C libgfutex_la_SOURCES += src/gfutex.C .PHONY: checkprogs checkprogs: $(check_PROGRAMS) check_PROGRAMS = check_PROGRAMS += test/test_gfutex check_PROGRAMS += examples/scf/scf test_test_gfutex_SOURCES = test/test_gfutex.C examples_scf_scf_SOURCES = examples_scf_scf_SOURCES += examples/scf/cscc.h examples_scf_scf_SOURCES += examples/scf/input.c examples_scf_scf_SOURCES += examples/scf/input.h examples_scf_scf_SOURCES += examples/scf/integ.c examples_scf_scf_SOURCES += examples/scf/integ.h examples_scf_scf_SOURCES += examples/scf/oneel.C examples_scf_scf_SOURCES += examples/scf/oneel.h examples_scf_scf_SOURCES += examples/scf/output.c examples_scf_scf_SOURCES += examples/scf/output.h examples_scf_scf_SOURCES += examples/scf/scf.c examples_scf_scf_SOURCES += examples/scf/scf.h examples_scf_scf_SOURCES += examples/scf/sum.c examples_scf_scf_SOURCES += examples/scf/sum.h examples_scf_scf_SOURCES += examples/scf/timer.c examples_scf_scf_SOURCES += examples/scf/timer.h examples_scf_scf_SOURCES += examples/scf/twoel.C examples_scf_scf_SOURCES += examples/scf/twoel.h ga-5-3/gfutex/configure0000750005473000001440000245117512247166641014034 0ustar d3n000users#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Global Futures 0.1. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and hpctools@pnnl.gov $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Global Futures' PACKAGE_TARNAME='gfutex' PACKAGE_VERSION='0.1' PACKAGE_STRING='Global Futures 0.1' PACKAGE_BUGREPORT='hpctools@pnnl.gov' PACKAGE_URL='' ac_unique_file="src/gfutex.C" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL ac_ct_AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED LIBTOOL RANLIB AR_FLAGS AR GA_FLIBS GA_LIBS GA_LDFLAGS GA_CPPFLAGS GA_CONFIG LIBOBJS BOOST_LDFLAGS BOOST_CPPFLAGS TBB_LIBS TBB_LDFLAGS TBB_CPPFLAGS CXXCPP am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX MPICXX EGREP GREP CPP PERL am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MPICC GA_MP_CPPFLAGS GA_MP_LDFLAGS GA_MP_LIBS MSG_COMMS_TCGMSG5_FALSE MSG_COMMS_TCGMSG5_TRUE MSG_COMMS_TCGMSG4_FALSE MSG_COMMS_TCGMSG4_TRUE MSG_COMMS_MPI_FALSE MSG_COMMS_MPI_TRUE GFUTEX_STANDALONE_FALSE GFUTEX_STANDALONE_TRUE MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM CROSS_COMPILING_FALSE CROSS_COMPILING_TRUE SOLARIS_FALSE SOLARIS_TRUE SGITFP_FALSE SGITFP_TRUE SGI_N32_FALSE SGI_N32_TRUE SGI_FALSE SGI_TRUE NEC_FALSE NEC_TRUE MACX_FALSE MACX_TRUE LINUX_FALSE LINUX_TRUE LAPI_FALSE LAPI_TRUE INTERIX_FALSE INTERIX_TRUE IBM_FALSE IBM_TRUE HPUX_FALSE HPUX_TRUE HITACHI_FALSE HITACHI_TRUE FUJITSU_VPP_FALSE FUJITSU_VPP_TRUE DECOSF_FALSE DECOSF_TRUE CYGWIN_FALSE CYGWIN_TRUE CYGNUS_FALSE CYGNUS_TRUE CRAY_YMP_FALSE CRAY_YMP_TRUE CRAY_XT_FALSE CRAY_XT_TRUE CRAY_T3E_FALSE CRAY_T3E_TRUE CRAY_SV2_FALSE CRAY_SV2_TRUE CRAY_SV1_FALSE CRAY_SV1_TRUE CATAMOUNT_FALSE CATAMOUNT_TRUE BGP_FALSE BGP_TRUE BGL_FALSE BGL_TRUE host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode with_PACKAGE with_mpi enable_mpi_tests enable_dependency_tracking enable_assert with_tbb with_boost with_boost_libdir with_ga enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock ' ac_precious_vars='build_alias host_alias target_alias MPICC CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP MPICXX CXX CXXFLAGS CCC CXXCPP AR AR_FLAGS RANLIB' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Global Futures 0.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/gfutex] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Global Futures 0.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-mpi-tests disable MPI linker tests --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-assert turn off assertions --enable-shared[=PKGS] build shared libraries [default=no] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-PACKAGE[=ARG] for most of the external software packages, ARG can be one or more whitespace-separated directories, linker or preprocessor directives; for example, --with-PACKAGE="/path/to/PACKAGE -lmylib -I/mydir" --with-mpi[=ARG] select MPI as the messaging library (default); leave ARG blank to use MPI compiler wrappers --with-tbb[=ARG] specify location of tbb install and/or other flags --with-boost[=ARG] use Boost library from a standard location (ARG=yes), from the specified location (ARG=), or disable it (ARG=no) [ARG=yes] --with-boost-libdir=LIB_DIR Force given directory for boost libraries. Note that this will override library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located. --with-ga[=ARG] specify location of ga install and/or other flags --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). Some influential environment variables: MPICC MPI C compiler CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor MPICXX MPI C++ compiler CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor AR archiver used by libtool (default: ar) AR_FLAGS archiver flags used by libtool (default: cru) RANLIB generates index to archive (default: ranlib) Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Global Futures configure 0.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## -------------------------------- ## ## Report this to hpctools@pnnl.gov ## ## -------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_cxx_try_run LINENO # ------------------------ # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_cxx_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_run # ac_fn_cxx_compute_int LINENO EXPR VAR INCLUDES # ---------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_cxx_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_cxx_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## -------------------------------- ## ## Report this to hpctools@pnnl.gov ## ## -------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_mongrel # ac_fn_cxx_check_type LINENO TYPE VAR INCLUDES # --------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_cxx_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_type # ac_fn_cxx_check_func LINENO FUNC VAR # ------------------------------------ # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_cxx_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_func # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Global Futures $as_me 0.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in build-aux "$srcdir"/build-aux; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers config.h" ############################################################################### # Must occur before automake init ############################################################################### # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # AH_TEMPLATE for all known TARGETs { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TARGET base (64bit-ness checked later)" >&5 $as_echo_n "checking for TARGET base (64bit-ness checked later)... " >&6; } if ${ga_cv_target_base+:} false; then : $as_echo_n "(cached) " >&6 else ga_cv_target_base=UNKNOWN if test "x$ga_cv_target_base" = xUNKNOWN; then : if test -f /bgsys/drivers/ppcfloor/arch/include/common/bgp_personality.h; then : ga_cv_target_base=BGP fi fi if test "x$ga_cv_target_base" = xUNKNOWN; then : if test -d /bgl/BlueLight/ppcfloor/bglsys/include; then : ga_cv_target_base=BGL fi fi if test "x$ga_cv_target_base" = xUNKNOWN; then : case $host in #( *bgl*) : ga_cv_target_base=BGL ;; #( *bgp*) : ga_cv_target_base=BGP ;; #( #[TODO], [ga_cv_target_base=CATAMOUNT], #[TODO], [ga_cv_target_base=CRAY_XT], *cygwin*) : ga_cv_target_base=CYGWIN ;; #( *fujitsu*) : ga_cv_target_base=FUJITSU_VPP ;; #( *hpux*) : ga_cv_target_base=HPUX ;; #( *ibm*) : ga_cv_target_base=IBM ;; #( #[TODO], [ga_cv_target_base=LAPI], *linux*) : ga_cv_target_base=LINUX ;; #( *darwin*) : ga_cv_target_base=MACX ;; #( *apple*) : ga_cv_target_base=MACX ;; #( *superux*) : ga_cv_target_base=NEC ;; #( *solaris*) : ga_cv_target_base=SOLARIS ;; #( *) : ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_target_base" >&5 $as_echo "$ga_cv_target_base" >&6; } cat >>confdefs.h <<_ACEOF #define $ga_cv_target_base 1 _ACEOF # A horrible hack that should go away somehow... { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we think this system is what we call SYSV" >&5 $as_echo_n "checking whether we think this system is what we call SYSV... " >&6; } if ${ga_cv_sysv+:} false; then : $as_echo_n "(cached) " >&6 else case $ga_cv_target_base in #( SUN|SOLARIS|SGI|SGI_N32|SGITFP|HPUX|IBM|DECOSF|LINUX|INTERIX|NEC|LAPI) : ga_cv_sysv=yes ;; #( *) : ga_cv_sysv=no ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_sysv" >&5 $as_echo "$ga_cv_sysv" >&6; } if test x$ga_cv_sysv = xyes; then : $as_echo "#define SYSV 1" >>confdefs.h fi # Hopefully these will never be used and we can remove them soon. if test "$ga_cv_target_base" = BGL; then BGL_TRUE= BGL_FALSE='#' else BGL_TRUE='#' BGL_FALSE= fi if test "$ga_cv_target_base" = BGP; then BGP_TRUE= BGP_FALSE='#' else BGP_TRUE='#' BGP_FALSE= fi if test "$ga_cv_target_base" = CATAMOUNT; then CATAMOUNT_TRUE= CATAMOUNT_FALSE='#' else CATAMOUNT_TRUE='#' CATAMOUNT_FALSE= fi if test "$ga_cv_target_base" = CRAY_SV1; then CRAY_SV1_TRUE= CRAY_SV1_FALSE='#' else CRAY_SV1_TRUE='#' CRAY_SV1_FALSE= fi if test "$ga_cv_target_base" = CRAY_SV2; then CRAY_SV2_TRUE= CRAY_SV2_FALSE='#' else CRAY_SV2_TRUE='#' CRAY_SV2_FALSE= fi if test "$ga_cv_target_base" = CRAY_T3E; then CRAY_T3E_TRUE= CRAY_T3E_FALSE='#' else CRAY_T3E_TRUE='#' CRAY_T3E_FALSE= fi if test "$ga_cv_target_base" = CRAY_XT; then CRAY_XT_TRUE= CRAY_XT_FALSE='#' else CRAY_XT_TRUE='#' CRAY_XT_FALSE= fi if test "$ga_cv_target_base" = CRAY_YMP; then CRAY_YMP_TRUE= CRAY_YMP_FALSE='#' else CRAY_YMP_TRUE='#' CRAY_YMP_FALSE= fi if test "$ga_cv_target_base" = CYGNUS; then CYGNUS_TRUE= CYGNUS_FALSE='#' else CYGNUS_TRUE='#' CYGNUS_FALSE= fi if test "$ga_cv_target_base" = CYGWIN; then CYGWIN_TRUE= CYGWIN_FALSE='#' else CYGWIN_TRUE='#' CYGWIN_FALSE= fi if test "$ga_cv_target_base" = DECOSF; then DECOSF_TRUE= DECOSF_FALSE='#' else DECOSF_TRUE='#' DECOSF_FALSE= fi if test "$ga_cv_target_base" = FUJITSU_VPP; then FUJITSU_VPP_TRUE= FUJITSU_VPP_FALSE='#' else FUJITSU_VPP_TRUE='#' FUJITSU_VPP_FALSE= fi if test "$ga_cv_target_base" = HITACHI; then HITACHI_TRUE= HITACHI_FALSE='#' else HITACHI_TRUE='#' HITACHI_FALSE= fi if test "$ga_cv_target_base" = HPUX; then HPUX_TRUE= HPUX_FALSE='#' else HPUX_TRUE='#' HPUX_FALSE= fi if test "$ga_cv_target_base" = IBM; then IBM_TRUE= IBM_FALSE='#' else IBM_TRUE='#' IBM_FALSE= fi if test "$ga_cv_target_base" = INTERIX; then INTERIX_TRUE= INTERIX_FALSE='#' else INTERIX_TRUE='#' INTERIX_FALSE= fi if test "$ga_cv_target_base" = LAPI; then LAPI_TRUE= LAPI_FALSE='#' else LAPI_TRUE='#' LAPI_FALSE= fi if test "$ga_cv_target_base" = LINUX; then LINUX_TRUE= LINUX_FALSE='#' else LINUX_TRUE='#' LINUX_FALSE= fi if test "$ga_cv_target_base" = MACX; then MACX_TRUE= MACX_FALSE='#' else MACX_TRUE='#' MACX_FALSE= fi if test "$ga_cv_target_base" = NEC; then NEC_TRUE= NEC_FALSE='#' else NEC_TRUE='#' NEC_FALSE= fi if test "$ga_cv_target_base" = SGI; then SGI_TRUE= SGI_FALSE='#' else SGI_TRUE='#' SGI_FALSE= fi if test "$ga_cv_target_base" = SGI_N32; then SGI_N32_TRUE= SGI_N32_FALSE='#' else SGI_N32_TRUE='#' SGI_N32_FALSE= fi if test "$ga_cv_target_base" = SGITFP; then SGITFP_TRUE= SGITFP_FALSE='#' else SGITFP_TRUE='#' SGITFP_FALSE= fi if test "$ga_cv_target_base" = SOLARIS; then SOLARIS_TRUE= SOLARIS_FALSE='#' else SOLARIS_TRUE='#' SOLARIS_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if ${ga_cv_cross_compiling+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$ga_cv_target_base" = xBGP; then : cross_compiling=yes fi ga_cv_cross_compiling=$cross_compiling fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_cross_compiling" >&5 $as_echo "$ga_cv_cross_compiling" >&6; } if test "x$cross_compiling" = xyes; then CROSS_COMPILING_TRUE= CROSS_COMPILING_FALSE='#' else CROSS_COMPILING_TRUE='#' CROSS_COMPILING_FALSE= fi ############################################################################### ## Init automake ################################################################################ am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='gfutex' VERSION='0.1' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' ## Don't emit "rebuild rules" for configure, Makefile.ins, etc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE ############################################################################### # Misc. information and package setup. ############################################################################### # Check whether --with-PACKAGE was given. if test "${with_PACKAGE+set}" = set; then : withval=$with_PACKAGE; fi GFUTEX_TOP_BUILDDIR="`pwd`" cd "$srcdir" GFUTEX_TOP_SRCDIR="`pwd`" cd "$GFUTEX_TOP_BUILDDIR" if test "$GFUTEX_TOP_BUILDDIR" != "GFUTEX_TOP_SRCDIR"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: Detected VPATH build" >&5 $as_echo "$as_me: Detected VPATH build" >&6;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gfutex is built outside of GA" >&5 $as_echo_n "checking whether gfutex is built outside of GA... " >&6; } if ${gfutex_cv_standalone+:} false; then : $as_echo_n "(cached) " >&6 else if test -f "$GFUTEX_TOP_BUILDDIR/../armci/config.status"; then : gfutex_cv_standalone=no else gfutex_cv_standalone=yes fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gfutex_cv_standalone" >&5 $as_echo "$gfutex_cv_standalone" >&6; } if test x$gfutex_cv_standalone = xyes; then GFUTEX_STANDALONE_TRUE= GFUTEX_STANDALONE_FALSE='#' else GFUTEX_STANDALONE_TRUE='#' GFUTEX_STANDALONE_FALSE= fi # If MPI is desired we use the MPI compiler wrappers instead of the standard # compilers. # GA_MP_* vars might exist in environment, but they are really internal. # Reset them. GA_MP_LIBS= GA_MP_LDFLAGS= GA_MP_CPPFLAGS= # Check whether --with-mpi was given. if test "${with_mpi+set}" = set; then : withval=$with_mpi; else with_mpi=yes fi with_mpi_need_parse=no case $with_mpi in #( yes) : with_mpi_wrappers=yes; ga_msg_comms=MPI ;; #( no) : case $ga_cv_target_base in #( MACX|LAPI|CYGNUS|CYGWIN|INTERIX) : ga_msg_comms=TCGMSG5 ;; #( *) : ga_msg_comms=TCGMSG ;; esac ;; #( *) : with_mpi_need_parse=yes; ga_msg_comms=MPI ;; #( *) : ;; esac if test "x$ga_msg_comms" = xMPI; then MSG_COMMS_MPI_TRUE= MSG_COMMS_MPI_FALSE='#' else MSG_COMMS_MPI_TRUE='#' MSG_COMMS_MPI_FALSE= fi if test "x$ga_msg_comms" = xTCGMSG; then MSG_COMMS_TCGMSG4_TRUE= MSG_COMMS_TCGMSG4_FALSE='#' else MSG_COMMS_TCGMSG4_TRUE='#' MSG_COMMS_TCGMSG4_FALSE= fi if test "x$ga_msg_comms" = xTCGMSG5; then MSG_COMMS_TCGMSG5_TRUE= MSG_COMMS_TCGMSG5_FALSE='#' else MSG_COMMS_TCGMSG5_TRUE='#' MSG_COMMS_TCGMSG5_FALSE= fi case $ga_msg_comms in #( MPI) : $as_echo "#define MSG_COMMS_MPI 1" >>confdefs.h ;; #( TCGMSG) : $as_echo "#define MSG_COMMS_TCGMSG4 1" >>confdefs.h $as_echo "#define MSG_COMMS_TCGMSG 1" >>confdefs.h $as_echo "#define TCGMSG 1" >>confdefs.h ;; #( TCGMSG5) : $as_echo "#define MSG_COMMS_TCGMSG5 1" >>confdefs.h $as_echo "#define MSG_COMMS_TCGMSG 1" >>confdefs.h $as_echo "#define TCGMSG 1" >>confdefs.h ;; #( *) : ;; esac # F77 and C++ are always enabled for gfutex enable_f77=yes enable_cxx=yes # Check whether --enable-mpi-tests was given. if test "${enable_mpi_tests+set}" = set; then : enableval=$enable_mpi_tests; else enable_mpi_tests=yes fi ############################################################################### # C compiler ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: C compiler" >&5 $as_echo "$as_me: C compiler" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} tascel_save_CFLAGS="$CFLAGS" DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi case $ga_cv_target_base in #( BGP) : ga_mpicc_pref=mpixlc_r; ga_cc_pref=bgxlc_r ;; #( *) : ;; esac # In the case of using MPI wrappers, set CC=MPICC since CC will override # absolutely everything in our list of compilers. # Save CC, just in case. if test x$with_mpi_wrappers = xyes; then : if test "x$CC" != "x$MPICC"; then : ga_orig_CC="$CC" fi case x$CC:x$MPICC in #( x:x) : ;; #( x:x*) : CC="$MPICC" ;; #( x*:x) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired but CC is set while MPICC is unset." >&5 $as_echo "$as_me: WARNING: MPI compilers desired but CC is set while MPICC is unset." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CC will be ignored during compiler selection, but will be" >&5 $as_echo "$as_me: WARNING: CC will be ignored during compiler selection, but will be" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&5 $as_echo "$as_me: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: meant to set MPICC instead of or in addition to CC?" >&5 $as_echo "$as_me: WARNING: meant to set MPICC instead of or in addition to CC?" >&2;} CC= ;; #( x*:x*) : if test "x$CC" != "x$MPICC"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired, MPICC and CC are set, and MPICC!=CC." >&5 $as_echo "$as_me: WARNING: MPI compilers desired, MPICC and CC are set, and MPICC!=CC." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Choosing MPICC over CC." >&5 $as_echo "$as_me: WARNING: Choosing MPICC over CC." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CC will be tested first during MPI compiler unwrapping." >&5 $as_echo "$as_me: WARNING: CC will be tested first during MPI compiler unwrapping." >&2;} fi CC="$MPICC" ;; #( *) : as_fn_error $? "CC/MPICC case failure" "$LINENO" 5 ;; esac fi ga_cc="bgxlc_r bgxlc xlc_r xlc pgcc pathcc icc sxcc fcc opencc suncc craycc gcc cc ecc cl ccc" ga_mpicc="mpicc mpixlc_r mpixlc hcc mpxlc_r mpxlc sxmpicc mpifcc mpgcc mpcc cmpicc cc" if test x$with_mpi_wrappers = xyes; then : CC_TO_TEST="$ga_mpicc_pref $ga_mpicc" else CC_TO_TEST="$ga_cc_pref $ga_cc" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CC_TO_TEST do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in $CC_TO_TEST do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi CFLAGS="$tascel_save_CFLAGS" if test x$with_mpi_wrappers = xyes; then : # Find perl. # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Create inside.pl. rm -f inside.pl cat >inside.pl <<"EOF" #!/usr/bin/perl use strict; use warnings; my $numargs = $#ARGV + 1; if ($numargs != 2) { print "Usage: wrapped.txt naked.txt\n"; exit 1; } # Read each input file as a string (rather than a list). local $/=undef; open WRAPPED, "$ARGV[0]" or die "Could not open wrapped text file: $!"; my $wrapped_lines = ; close WRAPPED; open NAKED, "$ARGV[1]" or die "Could not open naked text file: $!"; my $naked_lines = ; close NAKED; # Replace newlines, + from wrapped and naked lines. $wrapped_lines =~ tr/\n+/ /; $naked_lines =~ tr/\n+/ /; # Remove whitespace from beginning of wrapped and naked lines. $wrapped_lines =~ s/^\s+//; $naked_lines =~ s/^\s+//; # Remove whitespace from end of wrapped and naked lines. $wrapped_lines =~ s/\s+$//; $naked_lines =~ s/\s+$//; # If either wrapped_lines or naked_lines are empty, this is an error. # It is assumed that the particular version string which created the input # files should generate SOMETHING. unless ($wrapped_lines) { exit 1; } unless ($naked_lines) { exit 1; } # Cray compilers append a timestamp into their version string. Remove it. if ($wrapped_lines =~ /\QCray\E/) { $wrapped_lines = substr $wrapped_lines, 0, -28; $naked_lines = substr $naked_lines, 0, -28; } # Can the naked lines be found within the wrapped lines? if ($wrapped_lines =~ /\Q$naked_lines\E/) { #print "Found as substring\n"; exit 0; } # Are the naked lines exactly the same as the wrapped lines? elsif ($wrapped_lines eq $naked_lines) { #print "Found equal\n"; exit 0; } else { #print "Not found\n"; exit 1; } EOF inside="$PERL inside.pl" wrapped="$CC" case $wrapped in #( *_r) : compilers="bgxlc_r xlc_r" ;; #( *) : compilers="bgxlc xlc pgcc pathcc icc sxcc fcc opencc suncc craycc gcc ecc cl ccc cc" ;; #( *) : ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for base $wrapped compiler" >&5 $as_echo_n "checking for base $wrapped compiler... " >&6; } if ${ga_cv_mpic_naked+:} false; then : $as_echo_n "(cached) " >&6 else base="`$wrapped -show 2>/dev/null | sed 's/[ ].*$//' | head -1`" ga_save_CC="$CC" CC="$base" # if -m32 or -m64 is present in the -show params, or separately, add it unwrapped_args="`$wrapped -show 2>/dev/null`" extra_arg="" for arg in $unwrapped_args $wrapped do case $arg in #( *-m32*) : extra_arg="-m32" ;; #( *-m64*) : extra_arg="-m64" ;; #( *) : ;; esac done if test "x$extra_arg" != x; then : base="$base $extra_arg" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_cv_mpic_naked="$base" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CC="$ga_save_CC" versions="--version -v -V -qversion" found_wrapped_version=0 # Try separating stdout and stderr. Only compare stdout. if test "x$ga_cv_mpic_naked" = x; then : # prepend any CC/CXX/F77 the user may have specified compilers="$ga_orig_CC $compilers" echo "only comparing stdout" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err naked.txt naked.err if $wrapped $version 1>mpi.txt 2>mpi.err; then : found_wrapped_version=1 for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpic_naked" != x; then : break fi done fi # Perhaps none of the MPI compilers had a zero exit status (this is bad). # In this case we have to do a brute force match regardless of exit status. if test "x$found_wrapped_version" = x0; then : if test "x$ga_cv_mpic_naked" = x; then : echo "no zero exit status found for MPI compilers" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpic_naked" != x; then : break fi done fi fi # Try by combining stdout/err into one file. if test "x$ga_cv_mpic_naked" = x; then : echo "try combining stdout and stderr into one file" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt naked.txt if $wrapped $version 1>mpi.txt 2>&1; then : for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>&1; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpic_naked" != x; then : break fi done fi # If we got this far, then it's likely that the MPI compiler had a zero exit # status when it shouldn't have for one version flag, but later had a non-zero # exit status for a flag it shouldn't have. One false positive hid a false # negative. In this case, brute force compare all MPI compiler output against # all compiler output. if test "x$ga_cv_mpic_naked" = x; then : echo "we have a very badly behaving MPI compiler" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpic_naked" != x; then : break fi done fi rm -f mpi.txt mpi.err naked.txt naked.err fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_mpic_naked" >&5 $as_echo "$ga_cv_mpic_naked" >&6; } if test "x$ga_cv_mpic_naked" = x; then : as_fn_error $? "Could not determine the C compiler wrapped by MPI" "$LINENO" 5 else if test "x$ga_orig_CC" != x && test "x$ga_orig_CC" != "x$ga_cv_mpic_naked"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unwrapped $wrapped ($ga_cv_mpic_naked) does not match user-specified $ga_orig_CC" >&5 $as_echo "$as_me: WARNING: unwrapped $wrapped ($ga_cv_mpic_naked) does not match user-specified $ga_orig_CC" >&2;} fi fi rm -f inside.pl else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_mpi ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : GA_MP_LIBS="$GA_MP_LIBS $arg" ;; #( -L*) : GA_MP_LDFLAGS="$GA_MP_LDFLAGS $arg" ;; #( -WL*) : GA_MP_LDFLAGS="$GA_MP_LDFLAGS $arg" ;; #( -Wl*) : GA_MP_LDFLAGS="$GA_MP_LDFLAGS $arg" ;; #( -I*) : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS $arg" ;; #( *.a) : GA_MP_LIBS="$GA_MP_LIBS $arg" ;; #( *.so) : GA_MP_LIBS="$GA_MP_LIBS $arg" ;; #( *lib) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( -mkl*) : GA_MP_LIBS="$GA_MP_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi done fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a simple C MPI program compiles" >&5 $as_echo_n "checking whether a simple C MPI program compiles... " >&6; } if ${ga_cv_c_mpi_test_compile+:} false; then : $as_echo_n "(cached) " >&6 else ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" if ac_fn_c_try_compile "$LINENO"; then : ga_cv_c_mpi_test_compile=yes else ga_cv_c_mpi_test_compile=no fi rm -f core conftest.err conftest.$ac_objext CPPFLAGS="$ga_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_compile" >&5 $as_echo "$ga_cv_c_mpi_test_compile" >&6; } rm -f conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "x$ga_cv_c_mpi_test_compile" = xno; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "could not compile simple C MPI program See \`config.log' for more details" "$LINENO" 5; } fi # Hack to append .x to executables. EXEEXT=.x$EXEEXT if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_target64_sizeof_voidp" ""; then : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TARGET 64bit-ness" >&5 $as_echo_n "checking for TARGET 64bit-ness... " >&6; } if ${ga_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else if test x$ga_target64_sizeof_voidp = x8; then : ga_cv_target=${ga_cv_target_base}64 else ga_cv_target=$ga_cv_target_base fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_target" >&5 $as_echo "$ga_cv_target" >&6; } cat >>confdefs.h <<_ACEOF #define $ga_cv_target 1 _ACEOF # Checks for C libraries. # Checks for C header files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable assertions" >&5 $as_echo_n "checking whether to enable assertions... " >&6; } # Check whether --enable-assert was given. if test "${enable_assert+set}" = set; then : enableval=$enable_assert; ac_enable_assert=$enableval if test "x$enableval" = xno; then : $as_echo "#define NDEBUG 1" >>confdefs.h elif test "x$enableval" != xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: invalid argument supplied to --enable-assert" >&5 $as_echo "$as_me: WARNING: invalid argument supplied to --enable-assert" >&2;} ac_enable_assert=yes fi else ac_enable_assert=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_enable_assert" >&5 $as_echo "$ac_enable_assert" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in limits.h math.h omp.h pthread.h sched.h stdint.h stdio.h stdlib.h string.h sys/time.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 0 _ACEOF fi done # Checks for C typedefs, structures, and compiler characteristics. # Checks for C library functions. ############################################################################### # C++ compiler ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: C++ compiler" >&5 $as_echo "$as_me: C++ compiler" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu gfutex_save_CXXFLAGS="$CXXFLAGS" case $ga_cv_target_base in #( BGP) : ga_mpicxx_pref=mpixlcxx_r; ga_cxx_pref=bgxlC_r ;; #( *) : ;; esac # In the case of using MPI wrappers, set CXX=MPICXX since CXX will override # absolutely everything in our list of compilers. if test x$with_mpi_wrappers = xyes; then : if test "x$CXX" != "x$MPICXX"; then : ga_orig_CXX="$CXX" fi case x$CXX:x$MPICXX in #( x:x) : ;; #( x:x*) : CXX="$MPICXX" ;; #( x*:x) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired but CXX is set while MPICXX is unset." >&5 $as_echo "$as_me: WARNING: MPI compilers desired but CXX is set while MPICXX is unset." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CXX will be ignored during compiler selection, but will be" >&5 $as_echo "$as_me: WARNING: CXX will be ignored during compiler selection, but will be" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&5 $as_echo "$as_me: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: meant to set MPICXX instead of or in addition to CXX?" >&5 $as_echo "$as_me: WARNING: meant to set MPICXX instead of or in addition to CXX?" >&2;} CXX= ;; #( x*:x*) : if test "x$CXX" != "x$MPICXX"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired, MPICXX and CXX are set, and MPICXX!=CXX." >&5 $as_echo "$as_me: WARNING: MPI compilers desired, MPICXX and CXX are set, and MPICXX!=CXX." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Choosing MPICXX over CXX." >&5 $as_echo "$as_me: WARNING: Choosing MPICXX over CXX." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CXX will be tested first during MPI compiler unwrapping." >&5 $as_echo "$as_me: WARNING: CXX will be tested first during MPI compiler unwrapping." >&2;} fi CXX="$MPICXX" ;; #( *) : as_fn_error $? "CXX/MPICXX case failure" "$LINENO" 5 ;; esac fi ga_cxx="icpc pgCC pathCC sxc++ xlC_r xlC bgxlC_r bgxlC openCC sunCC crayc++ g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC" ga_mpicxx="mpic++ mpicxx mpiCC sxmpic++ hcp mpxlC_r mpxlC mpixlcxx_r mpixlcxx mpg++ mpc++ mpCC cmpic++ mpiFCC CC" if test x$with_mpi_wrappers = xyes; then : CXX_TO_TEST="$ga_mpicxx_pref $ga_mpicxx" else CXX_TO_TEST="$ga_cxx_pref $ga_cxx" fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in $CXX_TO_TEST do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CXX_TO_TEST do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi CXXFLAGS="$gfutex_save_CXXFLAGS" if test x$with_mpi_wrappers = xyes; then : # Find perl. # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Create inside.pl. rm -f inside.pl cat >inside.pl <<"EOF" #!/usr/bin/perl use strict; use warnings; my $numargs = $#ARGV + 1; if ($numargs != 2) { print "Usage: wrapped.txt naked.txt\n"; exit 1; } # Read each input file as a string (rather than a list). local $/=undef; open WRAPPED, "$ARGV[0]" or die "Could not open wrapped text file: $!"; my $wrapped_lines = ; close WRAPPED; open NAKED, "$ARGV[1]" or die "Could not open naked text file: $!"; my $naked_lines = ; close NAKED; # Replace newlines, + from wrapped and naked lines. $wrapped_lines =~ tr/\n+/ /; $naked_lines =~ tr/\n+/ /; # Remove whitespace from beginning of wrapped and naked lines. $wrapped_lines =~ s/^\s+//; $naked_lines =~ s/^\s+//; # Remove whitespace from end of wrapped and naked lines. $wrapped_lines =~ s/\s+$//; $naked_lines =~ s/\s+$//; # If either wrapped_lines or naked_lines are empty, this is an error. # It is assumed that the particular version string which created the input # files should generate SOMETHING. unless ($wrapped_lines) { exit 1; } unless ($naked_lines) { exit 1; } # Cray compilers append a timestamp into their version string. Remove it. if ($wrapped_lines =~ /\QCray\E/) { $wrapped_lines = substr $wrapped_lines, 0, -28; $naked_lines = substr $naked_lines, 0, -28; } # Can the naked lines be found within the wrapped lines? if ($wrapped_lines =~ /\Q$naked_lines\E/) { #print "Found as substring\n"; exit 0; } # Are the naked lines exactly the same as the wrapped lines? elsif ($wrapped_lines eq $naked_lines) { #print "Found equal\n"; exit 0; } else { #print "Not found\n"; exit 1; } EOF inside="$PERL inside.pl" wrapped="$CXX" case $wrapped in #( *_r) : compilers="bgxlC_r xlC_r" ;; #( *) : compilers="icpc pgCC pathCC sxc++ xlC bgxlC openCC sunCC crayc++ g++ c++ gpp aCC cxx cc++ cl.exe FCC KCC RCC CC" ;; #( *) : ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for base $wrapped compiler" >&5 $as_echo_n "checking for base $wrapped compiler... " >&6; } if ${ga_cv_mpicxx_naked+:} false; then : $as_echo_n "(cached) " >&6 else base="`$wrapped -show 2>/dev/null | sed 's/[ ].*$//' | head -1`" ga_save_CXX="$CXX" CXX="$base" # if -m32 or -m64 is present in the -show params, or separately, add it unwrapped_args="`$wrapped -show 2>/dev/null`" extra_arg="" for arg in $unwrapped_args $wrapped do case $arg in #( *-m32*) : extra_arg="-m32" ;; #( *-m64*) : extra_arg="-m64" ;; #( *) : ;; esac done if test "x$extra_arg" != x; then : base="$base $extra_arg" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ga_cv_mpicxx_naked="$base" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CXX="$ga_save_CXX" versions="--version -v -V -qversion" found_wrapped_version=0 # Try separating stdout and stderr. Only compare stdout. if test "x$ga_cv_mpicxx_naked" = x; then : # prepend any CC/CXX/F77 the user may have specified compilers="$ga_orig_CXX $compilers" echo "only comparing stdout" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err naked.txt naked.err if $wrapped $version 1>mpi.txt 2>mpi.err; then : found_wrapped_version=1 for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpicxx_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpicxx_naked" != x; then : break fi done fi # Perhaps none of the MPI compilers had a zero exit status (this is bad). # In this case we have to do a brute force match regardless of exit status. if test "x$found_wrapped_version" = x0; then : if test "x$ga_cv_mpicxx_naked" = x; then : echo "no zero exit status found for MPI compilers" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpicxx_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpicxx_naked" != x; then : break fi done fi fi # Try by combining stdout/err into one file. if test "x$ga_cv_mpicxx_naked" = x; then : echo "try combining stdout and stderr into one file" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt naked.txt if $wrapped $version 1>mpi.txt 2>&1; then : for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>&1; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpicxx_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpicxx_naked" != x; then : break fi done fi # If we got this far, then it's likely that the MPI compiler had a zero exit # status when it shouldn't have for one version flag, but later had a non-zero # exit status for a flag it shouldn't have. One false positive hid a false # negative. In this case, brute force compare all MPI compiler output against # all compiler output. if test "x$ga_cv_mpicxx_naked" = x; then : echo "we have a very badly behaving MPI compiler" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpicxx_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpicxx_naked" != x; then : break fi done fi rm -f mpi.txt mpi.err naked.txt naked.err fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_mpicxx_naked" >&5 $as_echo "$ga_cv_mpicxx_naked" >&6; } if test "x$ga_cv_mpicxx_naked" = x; then : as_fn_error $? "Could not determine the C++ compiler wrapped by MPI" "$LINENO" 5 else if test "x$ga_orig_CXX" != x && test "x$ga_orig_CXX" != "x$ga_cv_mpicxx_naked"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unwrapped $wrapped ($ga_cv_mpicxx_naked) does not match user-specified $ga_orig_CXX" >&5 $as_echo "$as_me: WARNING: unwrapped $wrapped ($ga_cv_mpicxx_naked) does not match user-specified $ga_orig_CXX" >&2;} fi fi rm -f inside.pl fi if test "x$with_mpi" != xno; then : ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a simple C++ MPI program works" >&5 $as_echo_n "checking whether a simple C++ MPI program works... " >&6; } if ${ga_cv_cxx_mpi_test+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ga_cv_cxx_mpi_test=yes else ga_cv_cxx_mpi_test=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext # That didn't work, so now let's try with our GA_MP_* flags. if test "x$ga_cv_cxx_mpi_test" = xno; then : ga_save_LIBS="$LIBS"; LIBS="$LIBS $GA_MP_LIBS" ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ga_cv_cxx_mpi_test=yes else ga_cv_cxx_mpi_test=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ga_save_LIBS" CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" fi # That didn't work, so now let's try with our GA_MP_* flags and various libs. if test "x$ga_cv_cxx_mpi_test" = xno; then : for lib in -lmpi -lmpich; do ga_save_LIBS="$LIBS"; LIBS="$LIBS $GA_MP_LIBS $lib" ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ga_cv_cxx_mpi_test=$lib; break else ga_cv_cxx_mpi_test=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ga_save_LIBS" CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" done LIBS="$ga_save_LIBS" CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_cxx_mpi_test" >&5 $as_echo "$ga_cv_cxx_mpi_test" >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu case $ga_cv_cxx_mpi_test in #( yes) : ;; #( no) : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "could not link simple C++ MPI program See \`config.log' for more details" "$LINENO" 5; } ;; #( *) : GA_MP_LIBS="$ga_cv_cxx_mpi_test" ;; #( *) : ;; esac fi # Checks for libraries. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu tbb_ok=no # has the user set TBBROOT or tbb_root? if test "x$TBBROOT" != x || test "x$tbb_root" != x; then : rm -f the_makefile rm -f result.txt rm -f out.txt cat >the_makefile <<"EOF" ifdef TBBROOT tbb_root=$(TBBROOT) endif include $(tbb_root)/build/common.inc result.txt: @echo "$(work_dir)" > result.txt EOF if gmake -f the_makefile &> out.txt; then : tbb_work_dir=`cat result.txt`; tbb_ok=yes else cat out.txt >&5 fi if test "x$tbb_work_dir" != x; then : TBB_LDFLAGS="-L${tbb_work_dir}_release" fi if test "x$TBBROOT" != x; then : TBB_CPPFLAGS="-I$TBBROOT/include" elif test "x$tbb_root" != x; then : TBB_CPPFLAGS="-I$tbb_root/include" fi TBB_LIBS="-ltbb" rm -f the_makefile rm -f result.txt rm -f out.txt fi if test "x$tbb_ok" = xno; then : TBB_LIBS= TBB_LDFLAGS= TBB_CPPFLAGS= # Check whether --with-tbb was given. if test "${with_tbb+set}" = set; then : withval=$with_tbb; else with_tbb=yes fi case $with_tbb in #( yes) : ;; #( no) : ;; #( *) : if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_tbb ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : TBB_LIBS="$TBB_LIBS $arg" ;; #( -L*) : TBB_LDFLAGS="$TBB_LDFLAGS $arg" ;; #( -WL*) : TBB_LDFLAGS="$TBB_LDFLAGS $arg" ;; #( -Wl*) : TBB_LDFLAGS="$TBB_LDFLAGS $arg" ;; #( -I*) : TBB_CPPFLAGS="$TBB_CPPFLAGS $arg" ;; #( *.a) : TBB_LIBS="$TBB_LIBS $arg" ;; #( *.so) : TBB_LIBS="$TBB_LIBS $arg" ;; #( *lib) : if test -d $arg; then : TBB_LDFLAGS="$TBB_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_tbb not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_tbb not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : TBB_LDFLAGS="$TBB_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_tbb not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_tbb not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : TBB_LDFLAGS="$TBB_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_tbb not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_tbb not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : TBB_LDFLAGS="$TBB_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_tbb not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_tbb not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : TBB_CPPFLAGS="$TBB_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_tbb not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_tbb not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : TBB_CPPFLAGS="$TBB_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_tbb not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_tbb not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : TBB_CPPFLAGS="$TBB_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_tbb not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_tbb not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : TBB_CPPFLAGS="$TBB_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_tbb not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_tbb not parsed" >&2;} fi ;; #( -mkl*) : TBB_LIBS="$TBB_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : TBB_LDFLAGS="$TBB_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : TBB_LDFLAGS="$TBB_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : TBB_CPPFLAGS="$TBB_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : TBB_CPPFLAGS="$TBB_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : TBB_LDFLAGS="$TBB_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : TBB_CPPFLAGS="$TBB_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : TBB_LDFLAGS="$TBB_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : TBB_CPPFLAGS="$TBB_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_tbb not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_tbb not parsed" >&2;} fi done ;; esac # Check for header. ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $TBB_CPPFLAGS" ac_fn_cxx_check_header_mongrel "$LINENO" "tbb/tbb.h" "ac_cv_header_tbb_tbb_h" "$ac_includes_default" if test "x$ac_cv_header_tbb_tbb_h" = xyes; then : else as_fn_error $? "could not locate Intel Thread Building Blocks" "$LINENO" 5 fi CPPFLAGS="$ga_save_CPPFLAGS" # Check for library. ga_save_LIBS="$LIBS"; LIBS="$TBB_LIBS $LIBS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $TBB_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing TBB_runtime_interface_version" >&5 $as_echo_n "checking for library containing TBB_runtime_interface_version... " >&6; } if ${ac_cv_search_TBB_runtime_interface_version+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char TBB_runtime_interface_version (); int main () { return TBB_runtime_interface_version (); ; return 0; } _ACEOF for ac_lib in '' tbb; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_search_TBB_runtime_interface_version=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_TBB_runtime_interface_version+:} false; then : break fi done if ${ac_cv_search_TBB_runtime_interface_version+:} false; then : else ac_cv_search_TBB_runtime_interface_version=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_TBB_runtime_interface_version" >&5 $as_echo "$ac_cv_search_TBB_runtime_interface_version" >&6; } ac_res=$ac_cv_search_TBB_runtime_interface_version if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi LIBS="$ga_save_LIBS" LDFLAGS="$ga_save_LDFLAGS" if test "x$ac_cv_search_TBB_runtime_interface_version" != xno; then : tbb_ok=yes $as_echo "#define HAVE_TBB 1" >>confdefs.h else as_fn_error $? "could not locate Intel Thread Building Blocks" "$LINENO" 5 fi fi # Check whether --with-boost was given. if test "${with_boost+set}" = set; then : withval=$with_boost; if test "$withval" = "no"; then want_boost="no" elif test "$withval" = "yes"; then want_boost="yes" ac_boost_path="" else want_boost="yes" ac_boost_path="$withval" fi else want_boost="yes" fi # Check whether --with-boost-libdir was given. if test "${with_boost_libdir+set}" = set; then : withval=$with_boost_libdir; if test -d "$withval" then ac_boost_lib_path="$withval" else as_fn_error $? "--with-boost-libdir expected directory name" "$LINENO" 5 fi else ac_boost_lib_path="" fi if test "x$want_boost" = "xyes"; then boost_lib_version_req=1.35.0 boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([0-9]*\.[0-9]*\)'` boost_lib_version_req_major=`expr $boost_lib_version_req : '\([0-9]*\)'` boost_lib_version_req_minor=`expr $boost_lib_version_req : '[0-9]*\.\([0-9]*\)'` boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[0-9]*\.[0-9]*\.\([0-9]*\)'` if test "x$boost_lib_version_req_sub_minor" = "x" ; then boost_lib_version_req_sub_minor="0" fi WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for boostlib >= $boost_lib_version_req" >&5 $as_echo_n "checking for boostlib >= $boost_lib_version_req... " >&6; } succeeded=no libsubdirs="lib" ax_arch=`uname -m` if test $ax_arch = x86_64 -o $ax_arch = ppc64 -o $ax_arch = s390x -o $ax_arch = sparc64; then libsubdirs="lib64 lib lib64" fi if test "$ac_boost_path" != ""; then BOOST_CPPFLAGS="-I$ac_boost_path/include" for ac_boost_path_tmp in $libsubdirs; do if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp" break fi done elif test "$cross_compiling" != yes; then for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then for libsubdir in $libsubdirs ; do if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir" BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" break; fi done fi if test "$ac_boost_lib_path" != ""; then BOOST_LDFLAGS="-L$ac_boost_lib_path" fi CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } succeeded=yes found_system=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test "x$succeeded" != "xyes"; then _version=0 if test "$ac_boost_path" != ""; then if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp fi VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" done fi else if test "$cross_compiling" != yes; then for ac_boost_path in /usr /usr/local /opt /opt/local ; do if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp best_path=$ac_boost_path fi done fi done VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" if test "$ac_boost_lib_path" = ""; then for libsubdir in $libsubdirs ; do if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done BOOST_LDFLAGS="-L$best_path/$libsubdir" fi fi if test "x$BOOST_ROOT" != "x"; then for libsubdir in $libsubdirs ; do if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` stage_version_shorten=`expr $stage_version : '\([0-9]*\.[0-9]*\)'` V_CHECK=`expr $stage_version_shorten \>\= $_version` if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: We will use a staged boost library from $BOOST_ROOT" >&5 $as_echo "$as_me: We will use a staged boost library from $BOOST_ROOT" >&6;} BOOST_CPPFLAGS="-I$BOOST_ROOT" BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir" fi fi fi fi CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } succeeded=yes found_system=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi if test "$succeeded" != "yes" ; then if test "$_version" = "0" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation." >&5 $as_echo "$as_me: We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation." >&6;} else { $as_echo "$as_me:${as_lineno-$LINENO}: Your boost libraries seems to old (version $_version)." >&5 $as_echo "$as_me: Your boost libraries seems to old (version $_version)." >&6;} fi # execute ACTION-IF-NOT-FOUND (if present): boost_ok=no else $as_echo "#define HAVE_BOOST /**/" >>confdefs.h # execute ACTION-IF-FOUND (if present): boost_ok=yes fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" fi # could not find boost install # try $ac_boost_path or $BOOST_ROOT as CPPFLAG if test "x$boost_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-installed and non-staged boost headers" >&5 $as_echo_n "checking for non-installed and non-staged boost headers... " >&6; } if ${ga_cv_boost_headers+:} false; then : $as_echo_n "(cached) " >&6 else gfutex_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I$ac_boost_path" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ga_cv_boost_headers="$ac_boost_path" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$gfutex_save_CPPFLAGS" if test "x$ga_cv_boost_headers" = x; then : gfutex_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I$BOOST_ROOT" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ga_cv_boost_headers="$BOOST_ROOT" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$gfutex_save_CPPFLAGS" fi if test "x$ga_cv_boost_headers" = x; then : ga_cv_boost_headers="no" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_boost_headers" >&5 $as_echo "$ga_cv_boost_headers" >&6; } if test "x$ga_cv_boost_headers" = xno; then : as_fn_error $? "could not locate boost headers" "$LINENO" 5 else BOOST_CPPFLAGS="-I$ga_cv_boost_headers" fi fi # Checks for C++ header files. # Checks for C++ typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if ${ac_cv_header_stdbool_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { _Bool s: 1; _Bool t; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(_Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (_Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ _Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; int main () { bool e = &s; *pq |= q; *pq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_header_stdbool_h=yes else ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 $as_echo "$ac_cv_header_stdbool_h" >&6; } ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi if test $ac_cv_header_stdbool_h = yes; then $as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi # Checks for C++ type sizes. # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5 $as_echo_n "checking size of void*... " >&6; } if ${ac_cv_sizeof_voidp+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default"; then : else if test "$ac_cv_type_voidp" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void*) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_voidp=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_voidp" >&5 $as_echo "$ac_cv_sizeof_voidp" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_VOIDP $ac_cv_sizeof_voidp _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 $as_echo_n "checking size of char... " >&6; } if ${ac_cv_sizeof_char+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then : else if test "$ac_cv_type_char" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (char) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_char=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 $as_echo "$ac_cv_sizeof_char" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_CHAR $ac_cv_sizeof_char _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 $as_echo_n "checking size of short... " >&6; } if ${ac_cv_sizeof_short+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : else if test "$ac_cv_type_short" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (short) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_short=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 $as_echo "$ac_cv_sizeof_short" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 $as_echo_n "checking size of int... " >&6; } if ${ac_cv_sizeof_int+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : else if test "$ac_cv_type_int" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_int=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 $as_echo "$ac_cv_sizeof_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 $as_echo_n "checking size of long... " >&6; } if ${ac_cv_sizeof_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 $as_echo "$ac_cv_sizeof_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF if test x$ac_cv_type_long_long_int = xyes; then : # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 $as_echo_n "checking size of long long... " >&6; } if ${ac_cv_sizeof_long_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 $as_echo "$ac_cv_sizeof_long_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float" >&5 $as_echo_n "checking size of float... " >&6; } if ${ac_cv_sizeof_float+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float" "$ac_includes_default"; then : else if test "$ac_cv_type_float" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (float) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_float=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5 $as_echo "$ac_cv_sizeof_float" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_FLOAT $ac_cv_sizeof_float _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 $as_echo_n "checking size of double... " >&6; } if ${ac_cv_sizeof_double+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then : else if test "$ac_cv_type_double" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (double) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_double=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 $as_echo "$ac_cv_sizeof_double" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_DOUBLE $ac_cv_sizeof_double _ACEOF if test x$ac_cv_type_long_double = xyes; then : # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5 $as_echo_n "checking size of long double... " >&6; } if ${ac_cv_sizeof_long_double+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double" "$ac_includes_default"; then : else if test "$ac_cv_type_long_double" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long double) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long_double=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5 $as_echo "$ac_cv_sizeof_long_double" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double _ACEOF fi # Checks for C++ library functions. for ac_header in stdlib.h do : ac_fn_cxx_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 $as_echo_n "checking for GNU libc compatible malloc... " >&6; } if ${ac_cv_func_malloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_malloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif int main () { return ! malloc (0); ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO"; then : ac_cv_func_malloc_0_nonnull=yes else ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 $as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes; then : $as_echo "#define HAVE_MALLOC 1" >>confdefs.h else $as_echo "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac $as_echo "#define malloc rpl_malloc" >>confdefs.h fi for ac_func in gettimeofday memset pow sqrt strerror do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ############################################################################### # Look for Global Arrays ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether this package is part of GA distribution" >&5 $as_echo_n "checking whether this package is part of GA distribution... " >&6; } if ${ga_cv_libga_la_found+:} false; then : $as_echo_n "(cached) " >&6 else if test -f "../libga.la"; then : ga_cv_libga_la_found=yes else ga_cv_libga_la_found=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_libga_la_found" >&5 $as_echo "$ga_cv_libga_la_found" >&6; } if test "x$ga_cv_libga_la_found" = xyes; then : GA_LIBS="../libga.la" GA_CPPFLAGS="-I$srcdir/../global/src -I../global/src -I$srcdir/../ma -I../ma -I../gaf2c -I../armci/gaf2c -I$srcdir/../armci/src/include" GA_FLIBS=`echo '@FLIBS@' | ../config.status --file=-` else ga_save_PATH="$PATH" if test -d $with_ga; then : PATH="$with_ga:$PATH" fi if test -d $with_ga/bin; then : PATH="$with_ga/bin:$PATH" fi # Extract the first word of "ga-config", so it can be a program name with args. set dummy ga-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GA_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $GA_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GA_CONFIG="$GA_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GA_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GA_CONFIG=$ac_cv_path_GA_CONFIG if test -n "$GA_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GA_CONFIG" >&5 $as_echo "$GA_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi PATH="$ga_save_PATH" if test "x$GA_CONFIG" != x; then : GA_CPPFLAGS=`$GA_CONFIG --cppflags` GA_LDFLAGS=`$GA_CONFIG --ldflags` GA_LIBS=`$GA_CONFIG --libs` GA_FLIBS=`$GA_CONFIG --flibs` else GA_LIBS= GA_LDFLAGS= GA_CPPFLAGS= # Check whether --with-ga was given. if test "${with_ga+set}" = set; then : withval=$with_ga; else with_ga=yes fi case $with_ga in #( yes) : ;; #( no) : ;; #( *) : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_ga ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : GA_LIBS="$GA_LIBS $arg" ;; #( -L*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -WL*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -Wl*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -I*) : GA_CPPFLAGS="$GA_CPPFLAGS $arg" ;; #( *.a) : GA_LIBS="$GA_LIBS $arg" ;; #( *.so) : GA_LIBS="$GA_LIBS $arg" ;; #( *lib) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( -mkl*) : GA_LIBS="$GA_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi done ;; esac # Check for header. ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_CPPFLAGS" ac_fn_c_check_header_mongrel "$LINENO" "ga.h" "ac_cv_header_ga_h" "$ac_includes_default" if test "x$ac_cv_header_ga_h" = xyes; then : else { ac_cv_search_GA_Initialize=; unset ac_cv_search_GA_Initialize;} GA_LIBS= GA_LDFLAGS= GA_CPPFLAGS= # Check whether --with-ga was given. if test "${with_ga+set}" = set; then : withval=$with_ga; else with_ga=yes fi case $with_ga in #( yes) : ;; #( no) : ;; #( *) : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_ga ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : GA_LIBS="$GA_LIBS $arg" ;; #( -L*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -WL*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -Wl*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -I*) : GA_CPPFLAGS="$GA_CPPFLAGS $arg" ;; #( *.a) : GA_LIBS="$GA_LIBS $arg" ;; #( *.so) : GA_LIBS="$GA_LIBS $arg" ;; #( *lib) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( -mkl*) : GA_LIBS="$GA_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi done ;; esac # Check for header. ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_CPPFLAGS" ac_fn_c_check_header_mongrel "$LINENO" "ga.h" "ac_cv_header_ga_h" "$ac_includes_default" if test "x$ac_cv_header_ga_h" = xyes; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Could not locate Global Arrays 5.x nor 4.x See \`config.log' for more details" "$LINENO" 5; } fi CPPFLAGS="$ga_save_CPPFLAGS" # Check for library. ga_save_LIBS="$LIBS"; LIBS="$GA_LIBS $LIBS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing GA_Initialize" >&5 $as_echo_n "checking for library containing GA_Initialize... " >&6; } if ${ac_cv_search_GA_Initialize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char GA_Initialize (); int main () { return GA_Initialize (); ; return 0; } _ACEOF for ac_lib in '' global; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib -lma -larmci -llinalg $FLIBS $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_GA_Initialize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_GA_Initialize+:} false; then : break fi done if ${ac_cv_search_GA_Initialize+:} false; then : else ac_cv_search_GA_Initialize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_GA_Initialize" >&5 $as_echo "$ac_cv_search_GA_Initialize" >&6; } ac_res=$ac_cv_search_GA_Initialize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi LIBS="$ga_save_LIBS" LDFLAGS="$ga_save_LDFLAGS" if test "x$ac_cv_search_GA_Initialize" != xno; then : GA_LIBS="-lglobal -lma -larmci -llinalg" $as_echo "#define HAVE_GA 1" >>confdefs.h else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Could not locate Global Arrays 5.x nor 4.x See \`config.log' for more details" "$LINENO" 5; } fi fi CPPFLAGS="$ga_save_CPPFLAGS" # Check for library. ga_save_LIBS="$LIBS"; LIBS="$GA_LIBS $LIBS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing GA_Initialize" >&5 $as_echo_n "checking for library containing GA_Initialize... " >&6; } if ${ac_cv_search_GA_Initialize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char GA_Initialize (); int main () { return GA_Initialize (); ; return 0; } _ACEOF for ac_lib in '' ga; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $FLIBS $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_GA_Initialize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_GA_Initialize+:} false; then : break fi done if ${ac_cv_search_GA_Initialize+:} false; then : else ac_cv_search_GA_Initialize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_GA_Initialize" >&5 $as_echo "$ac_cv_search_GA_Initialize" >&6; } ac_res=$ac_cv_search_GA_Initialize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi LIBS="$ga_save_LIBS" LDFLAGS="$ga_save_LDFLAGS" if test "x$ac_cv_search_GA_Initialize" != xno; then : GA_LIBS="-lga" $as_echo "#define HAVE_GA 1" >>confdefs.h else { ac_cv_search_GA_Initialize=; unset ac_cv_search_GA_Initialize;} GA_LIBS= GA_LDFLAGS= GA_CPPFLAGS= # Check whether --with-ga was given. if test "${with_ga+set}" = set; then : withval=$with_ga; else with_ga=yes fi case $with_ga in #( yes) : ;; #( no) : ;; #( *) : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_ga ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : GA_LIBS="$GA_LIBS $arg" ;; #( -L*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -WL*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -Wl*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -I*) : GA_CPPFLAGS="$GA_CPPFLAGS $arg" ;; #( *.a) : GA_LIBS="$GA_LIBS $arg" ;; #( *.so) : GA_LIBS="$GA_LIBS $arg" ;; #( *lib) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( -mkl*) : GA_LIBS="$GA_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi done ;; esac # Check for header. ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_CPPFLAGS" ac_fn_c_check_header_mongrel "$LINENO" "ga.h" "ac_cv_header_ga_h" "$ac_includes_default" if test "x$ac_cv_header_ga_h" = xyes; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Could not locate Global Arrays 5.x nor 4.x See \`config.log' for more details" "$LINENO" 5; } fi CPPFLAGS="$ga_save_CPPFLAGS" # Check for library. ga_save_LIBS="$LIBS"; LIBS="$GA_LIBS $LIBS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing GA_Initialize" >&5 $as_echo_n "checking for library containing GA_Initialize... " >&6; } if ${ac_cv_search_GA_Initialize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char GA_Initialize (); int main () { return GA_Initialize (); ; return 0; } _ACEOF for ac_lib in '' global; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib -lma -larmci -llinalg $FLIBS $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_GA_Initialize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_GA_Initialize+:} false; then : break fi done if ${ac_cv_search_GA_Initialize+:} false; then : else ac_cv_search_GA_Initialize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_GA_Initialize" >&5 $as_echo "$ac_cv_search_GA_Initialize" >&6; } ac_res=$ac_cv_search_GA_Initialize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi LIBS="$ga_save_LIBS" LDFLAGS="$ga_save_LDFLAGS" if test "x$ac_cv_search_GA_Initialize" != xno; then : GA_LIBS="-lglobal -lma -larmci -llinalg" $as_echo "#define HAVE_GA 1" >>confdefs.h else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Could not locate Global Arrays 5.x nor 4.x See \`config.log' for more details" "$LINENO" 5; } fi fi fi fi ############################################################################### # Libtool setup -- no compiler/linker tests after this ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Libtool setup" >&5 $as_echo "$as_me: Libtool setup" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} # temporarily restore unwrapped compilers # this works around a bug where libtool sadly relies on matching compiler # names in order to determine features (Fortran only, I think) # libtool doesn't recognize MPI compiler names, nor should it if test x$with_mpi_wrappers = xyes; then : ga_mpi_unwrap_push_save_CC="$CC" ga_mpi_unwrap_push_save_CXX="$CXX" ga_mpi_unwrap_push_save_F77="$F77" ga_mpi_unwrap_push_save_FC="$FC" if test "x$ga_cv_mpic_naked" != x; then : CC="$ga_cv_mpic_naked" fi if test "x$ga_cv_mpicxx_naked" != x; then : CXX="$ga_cv_mpicxx_naked" fi if test "x$ga_cv_mpif77_naked" != x; then : F77="$ga_cv_mpif77_naked" fi if test "x$ga_cv_mpifc_naked" != x; then : FC="$ga_cv_mpifc_naked" fi fi if test "x$AR" = x; then : case $ga_cv_target in #( NEC|NEC64) : AR=sxar ;; #( *) : ;; esac fi if test "x$RANLIB" = x; then : case $ga_cv_target in #( NEC|NEC64) : RANLIB=true ;; #( *) : ;; esac fi case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf # Set options # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=no fi enable_dlopen=no enable_win32_dll=no # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: # and now that that's over, put the MPI compilers back # also, the above hack incorrectly sets the base compiler as the linker if test x$with_mpi_wrappers = xyes; then : CC="$ga_mpi_unwrap_push_save_CC" CXX="$ga_mpi_unwrap_push_save_CXX" F77="$ga_mpi_unwrap_push_save_F77" FC="$ga_mpi_unwrap_push_save_FC" compiler="$CC" LTCC="$CC" lt_save_CC="$CC" compiler_DEFAULT="$CC" compiler_CXX="$CXX" compiler_F77="$F77" fi ############################################################################### # The End ############################################################################### ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${BGL_TRUE}" && test -z "${BGL_FALSE}"; then as_fn_error $? "conditional \"BGL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BGP_TRUE}" && test -z "${BGP_FALSE}"; then as_fn_error $? "conditional \"BGP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CATAMOUNT_TRUE}" && test -z "${CATAMOUNT_FALSE}"; then as_fn_error $? "conditional \"CATAMOUNT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_SV1_TRUE}" && test -z "${CRAY_SV1_FALSE}"; then as_fn_error $? "conditional \"CRAY_SV1\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_SV2_TRUE}" && test -z "${CRAY_SV2_FALSE}"; then as_fn_error $? "conditional \"CRAY_SV2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_T3E_TRUE}" && test -z "${CRAY_T3E_FALSE}"; then as_fn_error $? "conditional \"CRAY_T3E\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_XT_TRUE}" && test -z "${CRAY_XT_FALSE}"; then as_fn_error $? "conditional \"CRAY_XT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_YMP_TRUE}" && test -z "${CRAY_YMP_FALSE}"; then as_fn_error $? "conditional \"CRAY_YMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CYGNUS_TRUE}" && test -z "${CYGNUS_FALSE}"; then as_fn_error $? "conditional \"CYGNUS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CYGWIN_TRUE}" && test -z "${CYGWIN_FALSE}"; then as_fn_error $? "conditional \"CYGWIN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DECOSF_TRUE}" && test -z "${DECOSF_FALSE}"; then as_fn_error $? "conditional \"DECOSF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FUJITSU_VPP_TRUE}" && test -z "${FUJITSU_VPP_FALSE}"; then as_fn_error $? "conditional \"FUJITSU_VPP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HITACHI_TRUE}" && test -z "${HITACHI_FALSE}"; then as_fn_error $? "conditional \"HITACHI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HPUX_TRUE}" && test -z "${HPUX_FALSE}"; then as_fn_error $? "conditional \"HPUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${IBM_TRUE}" && test -z "${IBM_FALSE}"; then as_fn_error $? "conditional \"IBM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${INTERIX_TRUE}" && test -z "${INTERIX_FALSE}"; then as_fn_error $? "conditional \"INTERIX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LAPI_TRUE}" && test -z "${LAPI_FALSE}"; then as_fn_error $? "conditional \"LAPI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LINUX_TRUE}" && test -z "${LINUX_FALSE}"; then as_fn_error $? "conditional \"LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MACX_TRUE}" && test -z "${MACX_FALSE}"; then as_fn_error $? "conditional \"MACX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NEC_TRUE}" && test -z "${NEC_FALSE}"; then as_fn_error $? "conditional \"NEC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SGI_TRUE}" && test -z "${SGI_FALSE}"; then as_fn_error $? "conditional \"SGI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SGI_N32_TRUE}" && test -z "${SGI_N32_FALSE}"; then as_fn_error $? "conditional \"SGI_N32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SGITFP_TRUE}" && test -z "${SGITFP_FALSE}"; then as_fn_error $? "conditional \"SGITFP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SOLARIS_TRUE}" && test -z "${SOLARIS_FALSE}"; then as_fn_error $? "conditional \"SOLARIS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CROSS_COMPILING_TRUE}" && test -z "${CROSS_COMPILING_FALSE}"; then as_fn_error $? "conditional \"CROSS_COMPILING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GFUTEX_STANDALONE_TRUE}" && test -z "${GFUTEX_STANDALONE_FALSE}"; then as_fn_error $? "conditional \"GFUTEX_STANDALONE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MSG_COMMS_MPI_TRUE}" && test -z "${MSG_COMMS_MPI_FALSE}"; then as_fn_error $? "conditional \"MSG_COMMS_MPI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MSG_COMMS_TCGMSG4_TRUE}" && test -z "${MSG_COMMS_TCGMSG4_FALSE}"; then as_fn_error $? "conditional \"MSG_COMMS_TCGMSG4\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MSG_COMMS_TCGMSG5_TRUE}" && test -z "${MSG_COMMS_TCGMSG5_FALSE}"; then as_fn_error $? "conditional \"MSG_COMMS_TCGMSG5\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Global Futures $as_me 0.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ Global Futures config.status 0.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi # Report on what we found. { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: **************************************************************" >&5 $as_echo "$as_me: **************************************************************" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: $PACKAGE_NAME configured as follows:" >&5 $as_echo "$as_me: $PACKAGE_NAME configured as follows:" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: **************************************************************" >&5 $as_echo "$as_me: **************************************************************" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_MP_LIBS=$GA_MP_LIBS" >&5 $as_echo "$as_me: GA_MP_LIBS=$GA_MP_LIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_MP_LDFLAGS=$GA_MP_LDFLAGS" >&5 $as_echo "$as_me: GA_MP_LDFLAGS=$GA_MP_LDFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_MP_CPPFLAGS=$GA_MP_CPPFLAGS" >&5 $as_echo "$as_me: GA_MP_CPPFLAGS=$GA_MP_CPPFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CC=$CC" >&5 $as_echo "$as_me: CC=$CC" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CFLAGS=$CFLAGS" >&5 $as_echo "$as_me: CFLAGS=$CFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CXX=$CXX" >&5 $as_echo "$as_me: CXX=$CXX" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CXXFLAGS=$CXXFLAGS" >&5 $as_echo "$as_me: CXXFLAGS=$CXXFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CPP=$CPP" >&5 $as_echo "$as_me: CPP=$CPP" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CPPFLAGS=$CPPFLAGS" >&5 $as_echo "$as_me: CPPFLAGS=$CPPFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: LDFLAGS=$LDFLAGS" >&5 $as_echo "$as_me: LDFLAGS=$LDFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: LIBS=$LIBS" >&5 $as_echo "$as_me: LIBS=$LIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: AR=$AR" >&5 $as_echo "$as_me: AR=$AR" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: AR_FLAGS=$AR_FLAGS" >&5 $as_echo "$as_me: AR_FLAGS=$AR_FLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_CPPFLAGS=$GA_CPPFLAGS" >&5 $as_echo "$as_me: GA_CPPFLAGS=$GA_CPPFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_LDFLAGS=$GA_LDFLAGS" >&5 $as_echo "$as_me: GA_LDFLAGS=$GA_LDFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_LIBS=$GA_LIBS $GA_FLIBS" >&5 $as_echo "$as_me: GA_LIBS=$GA_LIBS $GA_FLIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: DEFS=$DEFS" >&5 $as_echo "$as_me: DEFS=$DEFS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: SHELL=$SHELL" >&5 $as_echo "$as_me: SHELL=$SHELL" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} ga-5-3/gfutex/test/0000750005473000001440000000000012275260561013062 5ustar d3n000usersga-5-3/gfutex/test/test_gfutex.C0000640005473000001440000000634411704074222015530 0ustar d3n000users#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "gfutex.h" using namespace tbb; using namespace globalFutures; typedef enumerable_thread_specific TInfo; static void GFTest(int g_a, int ndims, int lo[], int hi[], void *arg); static const int numTimes = 2000; static int g_a; static GFHandle gfhndl; static atomic sum; static int esum = 0; static int *procs_contr = NULL; static TInfo tinfo(0); struct gftestarg { int val; int src; }; int main(int argc, char *argv[]) { int me, nproc; int firstNLP; double t0, t1, t2, t3; MPI_Init(&argc, &argv); GA_Initialize(); GFInitialize(); me = GA_Nodeid(); nproc = GA_Nnodes(); procs_contr = new int[nproc]; for (int i = 0; i < nproc; i++) procs_contr[i] = 0; firstNLP = nproc / GA_Cluster_nnodes(); if (me == 0) { std::cout << "Number of procs: " << nproc << std::endl; std::cout << "Number of nodes: " << GA_Cluster_nnodes() << std::endl; std::cout << "Number of procs per node: " << firstNLP << std::endl; } MPI_Barrier(MPI_COMM_WORLD); #if 0 for (int i = 0; i < nproc; i++) { if (me == i) std:: cout << "Proc: " << me << ", nodeid: " << GA_Cluster_nodeid() << std::flush << std::endl; MPI_Barrier(MPI_COMM_WORLD); } #endif sum = 0; for (int i = 0; i < nproc; i++) esum += (i + 1); int dims[] = { 1000, 1000 }; int lo[] = { 10, 10 }, hi[] = { 10, 10 }; g_a = NGA_Create(MT_DBL, 2, dims, "A", NULL); GA_Print_distribution(g_a); gfhndl = GFRegister(GFTest, sizeof(gftestarg)); gftestarg gfa; gfa.val = me + 1; gfa.src = me; #if 1 t0 = MPI_Wtime(); if (me >= 0) for (int i = 0; i < numTimes; i++) GFExecute(gfhndl, g_a, 2, lo, hi, &gfa); t1 = MPI_Wtime(); MPI_Barrier(MPI_COMM_WORLD); t2 = MPI_Wtime(); GFAllQuiesce(gfhndl); t3 = MPI_Wtime(); if (sum != 0) { std::cout << "Proc: " << me << ", sum: " << std::fixed << sum << ", expected sum: " << numTimes * esum << std::flush << std::endl; std::cout << "Proc: " << me << ", exec. time: " << t1 - t0 << ", quiesce time: " << t3 - t2 << std::flush << std::endl; } #endif #if 0 std::cout << "Proc: " << me << ", added: " << std::fixed << numTimes * gfa.val << std::flush << std::endl; #endif if (sum != 0) for (int i = 0; i < nproc; i++) std::cout << "Proc: " << me << ", procs_contr[" << std::dec << i << "]: " << procs_contr[i] << std::flush << std::endl; std::cout << std::endl; for (TInfo::const_iterator iter = tinfo.begin(); iter != tinfo.end(); iter++) std::cout << *iter << " "; std::cout << std::endl; MPI_Barrier(MPI_COMM_WORLD); GA_Destroy(g_a); GFFinalize(); GA_Terminate(); MPI_Finalize(); delete [] procs_contr; return 0; } // main void GFTest(int g_a, int ndims, int lo[], int hi[], void *arg) { gftestarg *gfa = static_cast(arg); sum += gfa->val; procs_contr[gfa->src] = 1; TInfo::reference ltinfo = tinfo.local(); ltinfo++; } // GFTest ga-5-3/gfutex/config.h.in0000640005473000001440000001401612140267645014132 0ustar d3n000users/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 on BlueGene/L systems */ #undef BGL /* Define to 1 on BlueGene/P systems */ #undef BGP /* Define to 1 on Cray XT systems using Catamount */ #undef CATAMOUNT /* Define to 1 on Cray SV1 systems */ #undef CRAY_SV1 /* Define to 1 on Cray SV2 systems */ #undef CRAY_SV2 /* Define to 1 on Cray T3E systems */ #undef CRAY_T3E /* Define to 1 on Cray XT systems */ #undef CRAY_XT /* Define to 1 on Cray YMP systems */ #undef CRAY_YMP /* Define to 1 on Cygnus systems */ #undef CYGNUS /* Define to 1 on Cygwin systems */ #undef CYGWIN /* Define to 1 on DEC OSF */ #undef DECOSF /* Define to 1 on fujitsu systems */ #undef FUJITSU_VPP /* Define to 1 on fujitsu systems */ #undef FUJITSU_VPP64 /* define if the Boost library is available */ #undef HAVE_BOOST /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* set to 1 if we have the indicated package */ #undef HAVE_GA /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the header file. */ #undef HAVE_MATH_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the header file. */ #undef HAVE_OMP_H /* Define to 1 if you have the `pow' function. */ #undef HAVE_POW /* Define to 1 if you have the header file. */ #undef HAVE_PTHREAD_H /* Define to 1 if you have the header file. */ #undef HAVE_SCHED_H /* Define to 1 if you have the `sqrt' function. */ #undef HAVE_SQRT /* Define to 1 if stdbool.h conforms to C99. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* set to 1 if we have the indicated package */ #undef HAVE_TBB /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to 1 on hitachi systems */ #undef HITACHI /* Define to 1 on HP-UX systems */ #undef HPUX /* Define to 1 on 64bit HP-UX systems */ #undef HPUX64 /* Define to 1 on IBM SP systems */ #undef IBM /* Define to 1 on 64bit IBM SP systems */ #undef IBM64 /* Define to 1 on ??? systems */ #undef INTERIX /* Define to 1 on IBM systems with LAPI */ #undef LAPI /* Define to 1 on 64bit IBM systems with LAPI */ #undef LAPI64 /* Define to 1 on generic Linux systems */ #undef LINUX /* Define to 1 on generic 64bit Linux systems */ #undef LINUX64 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define to 1 on OSX systems */ #undef MACX /* Define to 1 on 64bit OSX systems */ #undef MACX64 /* Use MPI for messaging */ #undef MSG_COMMS_MPI /* Use TCGMSG for messaging */ #undef MSG_COMMS_TCGMSG /* Use TCGMSG (ipcv4.0) for messaging */ #undef MSG_COMMS_TCGMSG4 /* Use TCGMSG (ipcv5.0) for messaing */ #undef MSG_COMMS_TCGMSG5 /* Define to 1 if assertions should be disabled. */ #undef NDEBUG /* Define to 1 on NEC systems */ #undef NEC /* Define to 1 on 64bit NEC systems */ #undef NEC64 /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 on ??? systems */ #undef SGI /* Define to 1 on ??? systems */ #undef SGITFP /* Define to 1 on ??? systems */ #undef SGI_N32 /* The size of `char', as computed by sizeof. */ #undef SIZEOF_CHAR /* The size of `double', as computed by sizeof. */ #undef SIZEOF_DOUBLE /* The size of `float', as computed by sizeof. */ #undef SIZEOF_FLOAT /* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of `long double', as computed by sizeof. */ #undef SIZEOF_LONG_DOUBLE /* The size of `long long', as computed by sizeof. */ #undef SIZEOF_LONG_LONG /* The size of `short', as computed by sizeof. */ #undef SIZEOF_SHORT /* The size of `void*', as computed by sizeof. */ #undef SIZEOF_VOIDP /* Define to 1 on Solaris systems */ #undef SOLARIS /* Define to 1 on 64bit Solaris systems */ #undef SOLARIS64 /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define if we want this system to use SYSV shared memory */ #undef SYSV /* deprecated, use MSG_COMMS_TCGMSG */ #undef TCGMSG /* Version number of package */ #undef VERSION /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to `unsigned int' if does not define. */ #undef size_t ga-5-3/gfutex/build-aux/0000750005473000001440000000000012275260562013776 5ustar d3n000usersga-5-3/gfutex/build-aux/depcomp0000750005473000001440000005064312247162412015355 0ustar d3n000users#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-03-27.16; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # A tabulation character. tab=' ' # A newline character. nl=' ' if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form 'foo.o: dependent.h', # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ga-5-3/gfutex/build-aux/ltmain.sh0000640005473000001440000105154412247166641015633 0ustar d3n000users # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mkl*|-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -mkl*|-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mkl*|-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 ga-5-3/gfutex/build-aux/install-sh0000750005473000001440000003325611704074222016003 0ustar d3n000users#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ga-5-3/gfutex/build-aux/missing0000750005473000001440000002415212247162412015373 0ustar d3n000users#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ga-5-3/gfutex/build-aux/config.guess0000750005473000001440000012743212247162412016321 0ustar d3n000users#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ga-5-3/gfutex/build-aux/config.sub0000750005473000001440000010517612247162412015765 0ustar d3n000users#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ga-5-3/gfutex/tools/0000750005473000001440000000000012275260562013244 5ustar d3n000usersga-5-3/gfutex/tools/clean_ipcs.sh0000750005473000001440000000025011704074222015670 0ustar d3n000users#!/bin/bash for d in `ipcs -q | awk '{ print $2 }' | grep "[0-9]"` do ipcrm -q $d done for d in `ipcs -m | awk '{ print $2 }' | grep "[0-9]"` do ipcrm -m $d done ga-5-3/gfutex/configure.ac0000640005473000001440000001416311704074222014370 0ustar d3n000users# Process this file with autoconf to produce a configure script. ############################################################################### ## Init autoconf ################################################################################ AC_PREREQ([2.68]) AC_INIT([Global Futures], [0.1], [hpctools@pnnl.gov], [gfutex]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_HEADER([config.h]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR([src/gfutex.C]) ############################################################################### # Must occur before automake init ############################################################################### GA_TARGET GA_CROSS_COMPILING ############################################################################### ## Init automake ################################################################################ AM_INIT_AUTOMAKE([color-tests foreign parallel-tests silent-rules subdir-objects]) ## Don't emit "rebuild rules" for configure, Makefile.ins, etc. AM_MAINTAINER_MODE ############################################################################### # Misc. information and package setup. ############################################################################### GA_WITH_HELP GFUTEX_TOP_BUILDDIR="`pwd`" cd "$srcdir" GFUTEX_TOP_SRCDIR="`pwd`" cd "$GFUTEX_TOP_BUILDDIR" AS_IF([test "$GFUTEX_TOP_BUILDDIR" != "GFUTEX_TOP_SRCDIR"], [AC_MSG_NOTICE([Detected VPATH build])]) AC_CACHE_CHECK([whether gfutex is built outside of GA], [gfutex_cv_standalone], [AS_IF([test -f "$GFUTEX_TOP_BUILDDIR/../armci/config.status"], [gfutex_cv_standalone=no], [gfutex_cv_standalone=yes])]) AM_CONDITIONAL([GFUTEX_STANDALONE], [test x$gfutex_cv_standalone = xyes]) # If MPI is desired we use the MPI compiler wrappers instead of the standard # compilers. GA_MSG_COMMS([no-tcgmsg]) # F77 and C++ are always enabled for gfutex enable_f77=yes enable_cxx=yes GA_DISABLE_MPI_TESTS ############################################################################### # C compiler ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([C compiler]) AC_MSG_NOTICE tascel_save_CFLAGS="$CFLAGS" GA_PROG_MPICC CFLAGS="$tascel_save_CFLAGS" AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP], [GA_ARG_PARSE([with_mpi], [GA_MP_LIBS], [GA_MP_LDFLAGS], [GA_MP_CPPFLAGS])]) GA_MPICC_TEST_COMPILE # Hack to append .x to executables. AC_SUBST([EXEEXT], [.x$EXEEXT]) GA_TARGET64 # Checks for C libraries. # Checks for C header files. AC_HEADER_ASSERT GA_CHECK_HEADERS([limits.h math.h omp.h pthread.h sched.h stdint.h stdio.h stdlib.h string.h sys/time.h unistd.h]) # Checks for C typedefs, structures, and compiler characteristics. # Checks for C library functions. ############################################################################### # C++ compiler ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([C++ compiler]) AC_MSG_NOTICE AC_LANG_PUSH([C++]) gfutex_save_CXXFLAGS="$CXXFLAGS" GA_PROG_MPICXX CXXFLAGS="$gfutex_save_CXXFLAGS" AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP]) GA_MPICXX_TEST # Checks for libraries. GA_TBB GA_BOOST # Checks for C++ header files. # Checks for C++ typedefs, structures, and compiler characteristics. AC_HEADER_STDBOOL AC_C_INLINE AC_TYPE_SIZE_T # Checks for C++ type sizes. AC_CHECK_SIZEOF([void*]) AC_CHECK_SIZEOF([char]) AC_CHECK_SIZEOF([short]) AC_CHECK_SIZEOF([int]) AC_CHECK_SIZEOF([long]) AS_IF([test x$ac_cv_type_long_long_int = xyes], [AC_CHECK_SIZEOF([long long])]) AC_CHECK_SIZEOF([float]) AC_CHECK_SIZEOF([double]) AS_IF([test x$ac_cv_type_long_double = xyes], [AC_CHECK_SIZEOF([long double])]) # Checks for C++ library functions. AC_FUNC_MALLOC AC_CHECK_FUNCS([gettimeofday memset pow sqrt strerror]) AC_LANG_POP([C++]) ############################################################################### # Look for Global Arrays ############################################################################### GA_REQUIRE ############################################################################### # Libtool setup -- no compiler/linker tests after this ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([Libtool setup]) AC_MSG_NOTICE # temporarily restore unwrapped compilers # this works around a bug where libtool sadly relies on matching compiler # names in order to determine features (Fortran only, I think) # libtool doesn't recognize MPI compiler names, nor should it AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP_PUSH]) GA_AR LT_INIT([disable-shared]) # and now that that's over, put the MPI compilers back # also, the above hack incorrectly sets the base compiler as the linker AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP_POP compiler="$CC" LTCC="$CC" lt_save_CC="$CC" compiler_DEFAULT="$CC" compiler_CXX="$CXX" compiler_F77="$F77"]) ############################################################################### # The End ############################################################################### AC_CONFIG_FILES([Makefile]) AC_OUTPUT # Report on what we found. AC_MSG_NOTICE([]) AC_MSG_NOTICE([**************************************************************]) AC_MSG_NOTICE([ $PACKAGE_NAME configured as follows:]) AC_MSG_NOTICE([**************************************************************]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([ GA_MP_LIBS=$GA_MP_LIBS]) AC_MSG_NOTICE([ GA_MP_LDFLAGS=$GA_MP_LDFLAGS]) AC_MSG_NOTICE([GA_MP_CPPFLAGS=$GA_MP_CPPFLAGS]) AC_MSG_NOTICE([ CC=$CC]) AC_MSG_NOTICE([ CFLAGS=$CFLAGS]) AC_MSG_NOTICE([ CXX=$CXX]) AC_MSG_NOTICE([ CXXFLAGS=$CXXFLAGS]) AC_MSG_NOTICE([ CPP=$CPP]) AC_MSG_NOTICE([ CPPFLAGS=$CPPFLAGS]) AC_MSG_NOTICE([ LDFLAGS=$LDFLAGS]) AC_MSG_NOTICE([ LIBS=$LIBS]) AC_MSG_NOTICE([ AR=$AR]) AC_MSG_NOTICE([ AR_FLAGS=$AR_FLAGS]) AC_MSG_NOTICE([ GA_CPPFLAGS=$GA_CPPFLAGS]) AC_MSG_NOTICE([ GA_LDFLAGS=$GA_LDFLAGS]) AC_MSG_NOTICE([ GA_LIBS=$GA_LIBS $GA_FLIBS]) AC_MSG_NOTICE([ DEFS=$DEFS]) AC_MSG_NOTICE([ SHELL=$SHELL]) AC_MSG_NOTICE([]) ga-5-3/gfutex/Makefile.in0000640005473000001440000010502112247166641014153 0ustar d3n000users# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test/test_gfutex$(EXEEXT) examples/scf/scf$(EXEEXT) subdir = . DIST_COMMON = $(am__configure_deps) $(include_HEADERS) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/config.h.in $(top_srcdir)/configure INSTALL \ build-aux/config.guess build-aux/config.sub build-aux/depcomp \ build-aux/install-sh build-aux/ltmain.sh build-aux/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../m4/ax_boost_base.m4 \ $(top_srcdir)/../m4/ga.m4 $(top_srcdir)/../m4/ga_ar.m4 \ $(top_srcdir)/../m4/ga_arg_parse.m4 \ $(top_srcdir)/../m4/ga_boost.m4 \ $(top_srcdir)/../m4/ga_check_header.m4 \ $(top_srcdir)/../m4/ga_check_package.m4 \ $(top_srcdir)/../m4/ga_cross_compiling.m4 \ $(top_srcdir)/../m4/ga_mpi_test_disable.m4 \ $(top_srcdir)/../m4/ga_mpi_unwrap.m4 \ $(top_srcdir)/../m4/ga_mpicc.m4 \ $(top_srcdir)/../m4/ga_mpicc_test.m4 \ $(top_srcdir)/../m4/ga_mpicxx.m4 \ $(top_srcdir)/../m4/ga_mpicxx_test.m4 \ $(top_srcdir)/../m4/ga_msg_comms.m4 \ $(top_srcdir)/../m4/ga_target.m4 $(top_srcdir)/../m4/ga_tbb.m4 \ $(top_srcdir)/../m4/ga_with_help.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/lt_obsolete.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libgfutex_la_LIBADD = am__dirstamp = $(am__leading_dot)dirstamp am_libgfutex_la_OBJECTS = src/gf_cache.lo src/gfutex.lo libgfutex_la_OBJECTS = $(am_libgfutex_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am_examples_scf_scf_OBJECTS = examples/scf/input.$(OBJEXT) \ examples/scf/integ.$(OBJEXT) examples/scf/oneel.$(OBJEXT) \ examples/scf/output.$(OBJEXT) examples/scf/scf.$(OBJEXT) \ examples/scf/sum.$(OBJEXT) examples/scf/timer.$(OBJEXT) \ examples/scf/twoel.$(OBJEXT) examples_scf_scf_OBJECTS = $(am_examples_scf_scf_OBJECTS) examples_scf_scf_LDADD = $(LDADD) am__DEPENDENCIES_1 = examples_scf_scf_DEPENDENCIES = libgfutex.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_test_test_gfutex_OBJECTS = test/test_gfutex.$(OBJEXT) test_test_gfutex_OBJECTS = $(am_test_test_gfutex_OBJECTS) test_test_gfutex_LDADD = $(LDADD) test_test_gfutex_DEPENDENCIES = libgfutex.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgfutex_la_SOURCES) $(examples_scf_scf_SOURCES) \ $(test_test_gfutex_SOURCES) DIST_SOURCES = $(libgfutex_la_SOURCES) $(examples_scf_scf_SOURCES) \ $(test_test_gfutex_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(include_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GA_CONFIG = @GA_CONFIG@ GA_CPPFLAGS = @GA_CPPFLAGS@ GA_FLIBS = @GA_FLIBS@ GA_LDFLAGS = @GA_LDFLAGS@ GA_LIBS = @GA_LIBS@ GA_MP_CPPFLAGS = @GA_MP_CPPFLAGS@ GA_MP_LDFLAGS = @GA_MP_LDFLAGS@ GA_MP_LIBS = @GA_MP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MPICC = @MPICC@ MPICXX = @MPICXX@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TBB_CPPFLAGS = @TBB_CPPFLAGS@ TBB_LDFLAGS = @TBB_LDFLAGS@ TBB_LIBS = @TBB_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 -I ../m4 EXTRA_DIST = AM_FFLAGS = AM_CFLAGS = AM_CXXFLAGS = AM_CPPFLAGS = -I$(top_srcdir)/src $(TBB_CPPFLAGS) $(BOOST_CPPFLAGS) \ $(GA_CPPFLAGS) $(GA_MP_CPPFLAGS) LDADD = libgfutex.la $(TBB_LIBS) $(GA_LIBS) $(GA_MP_LIBS) $(GA_FLIBS) AM_LDFLAGS = $(TBB_LDFLAGS) $(GA_LDFLAGS) $(GA_MP_LDFLAGS) $(GA_FLIBS) include_HEADERS = src/gfutex.h lib_LTLIBRARIES = libgfutex.la libgfutex_la_SOURCES = src/gf_cache.C src/gfutex.C test_test_gfutex_SOURCES = test/test_gfutex.C examples_scf_scf_SOURCES = examples/scf/cscc.h examples/scf/input.c \ examples/scf/input.h examples/scf/integ.c examples/scf/integ.h \ examples/scf/oneel.C examples/scf/oneel.h \ examples/scf/output.c examples/scf/output.h examples/scf/scf.c \ examples/scf/scf.h examples/scf/sum.c examples/scf/sum.h \ examples/scf/timer.c examples/scf/timer.h examples/scf/twoel.C \ examples/scf/twoel.h all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .C .c .lo .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done src/$(am__dirstamp): @$(MKDIR_P) src @: > src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/$(DEPDIR) @: > src/$(DEPDIR)/$(am__dirstamp) src/gf_cache.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/gfutex.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) libgfutex.la: $(libgfutex_la_OBJECTS) $(libgfutex_la_DEPENDENCIES) $(EXTRA_libgfutex_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(libgfutex_la_OBJECTS) $(libgfutex_la_LIBADD) $(LIBS) clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list examples/scf/$(am__dirstamp): @$(MKDIR_P) examples/scf @: > examples/scf/$(am__dirstamp) examples/scf/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/scf/$(DEPDIR) @: > examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/input.$(OBJEXT): examples/scf/$(am__dirstamp) \ examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/integ.$(OBJEXT): examples/scf/$(am__dirstamp) \ examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/oneel.$(OBJEXT): examples/scf/$(am__dirstamp) \ examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/output.$(OBJEXT): examples/scf/$(am__dirstamp) \ examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/scf.$(OBJEXT): examples/scf/$(am__dirstamp) \ examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/sum.$(OBJEXT): examples/scf/$(am__dirstamp) \ examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/timer.$(OBJEXT): examples/scf/$(am__dirstamp) \ examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/twoel.$(OBJEXT): examples/scf/$(am__dirstamp) \ examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/scf$(EXEEXT): $(examples_scf_scf_OBJECTS) $(examples_scf_scf_DEPENDENCIES) $(EXTRA_examples_scf_scf_DEPENDENCIES) examples/scf/$(am__dirstamp) @rm -f examples/scf/scf$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(examples_scf_scf_OBJECTS) $(examples_scf_scf_LDADD) $(LIBS) test/$(am__dirstamp): @$(MKDIR_P) test @: > test/$(am__dirstamp) test/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) test/$(DEPDIR) @: > test/$(DEPDIR)/$(am__dirstamp) test/test_gfutex.$(OBJEXT): test/$(am__dirstamp) \ test/$(DEPDIR)/$(am__dirstamp) test/test_gfutex$(EXEEXT): $(test_test_gfutex_OBJECTS) $(test_test_gfutex_DEPENDENCIES) $(EXTRA_test_test_gfutex_DEPENDENCIES) test/$(am__dirstamp) @rm -f test/test_gfutex$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(test_test_gfutex_OBJECTS) $(test_test_gfutex_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f examples/scf/input.$(OBJEXT) -rm -f examples/scf/integ.$(OBJEXT) -rm -f examples/scf/oneel.$(OBJEXT) -rm -f examples/scf/output.$(OBJEXT) -rm -f examples/scf/scf.$(OBJEXT) -rm -f examples/scf/sum.$(OBJEXT) -rm -f examples/scf/timer.$(OBJEXT) -rm -f examples/scf/twoel.$(OBJEXT) -rm -f src/gf_cache.$(OBJEXT) -rm -f src/gf_cache.lo -rm -f src/gfutex.$(OBJEXT) -rm -f src/gfutex.lo -rm -f test/test_gfutex.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@examples/scf/$(DEPDIR)/input.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/scf/$(DEPDIR)/integ.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/scf/$(DEPDIR)/oneel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/scf/$(DEPDIR)/output.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/scf/$(DEPDIR)/scf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/scf/$(DEPDIR)/sum.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/scf/$(DEPDIR)/timer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/scf/$(DEPDIR)/twoel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gf_cache.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gfutex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/test_gfutex.Po@am__quote@ .C.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .C.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .C.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf examples/scf/.libs examples/scf/_libs -rm -rf src/.libs src/_libs -rm -rf test/.libs test/_libs distclean-libtool: -rm -f libtool config.lt install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) config.h installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f examples/scf/$(DEPDIR)/$(am__dirstamp) -rm -f examples/scf/$(am__dirstamp) -rm -f src/$(DEPDIR)/$(am__dirstamp) -rm -f src/$(am__dirstamp) -rm -f test/$(DEPDIR)/$(am__dirstamp) -rm -f test/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf examples/scf/$(DEPDIR) src/$(DEPDIR) test/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf examples/scf/$(DEPDIR) src/$(DEPDIR) test/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES .MAKE: all check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \ clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool ctags dist dist-all dist-bzip2 dist-gzip \ dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ info-am install install-am install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-includeHEADERS \ install-info install-info-am install-libLTLIBRARIES \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-includeHEADERS uninstall-libLTLIBRARIES .PHONY: checkprogs checkprogs: $(check_PROGRAMS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ga-5-3/gfutex/INSTALL0000640005473000001440000003633211704074222013135 0ustar d3n000usersInstallation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. ga-5-3/gfutex/src/0000750005473000001440000000000012275260562012673 5ustar d3n000usersga-5-3/gfutex/src/gfutex.h0000640005473000001440000000443211704074222014342 0ustar d3n000users#ifndef __GFUTEX_H #define __GFUTEX_H #include namespace globalFutures { typedef void (*RemoteFuncProto) (int g_a, int ndims, int lo[], int hi[], void *arg); typedef size_t GFHandle; int GFInitialize(); void GFFinalize(); GFHandle GFRegister(RemoteFuncProto func, const size_t argSz, const size_t retSz = 0U); void GFEnqueue(GFHandle hndl, int g_a, int ndims, int lo[], int hi[], void *arg); void GFEnqueue(GFHandle hndl, int g_a, int ndims, int lo[], int hi[], void *iarg, void **&oarg); void GFExecute(GFHandle hndl, int g_a, int ndims, int lo[], int hi[], void *arg); void GFExecute(GFHandle hndl, int g_a, int ndims, int lo[], int hi[], void *iarg, void **&oarg); int GFMaxConcurrency(); void GFQuiesce(); void GFAllQuiesce(); void GFQuiesce(GFHandle hndl); void GFAllQuiesce(GFHandle hndl); // Overloaded GA functions for thread-safety void GF_Access(int g_a, int lo[], int hi[], void *ptr, int ld[]); void GF_Release(int g_a, int lo[], int hi[]); void GF_Get(int g_a, int lo[], int hi[], void *buf, int ld[]); int GF_Locate_region(int g_a, int lo[], int hi[], int map[], int procs[]); void GF_Distribution(int g_a, int iproc, int lo[], int hi[]); void GF_Acc(int g_a, int lo[], int hi[], void *buf, int ld[], void *alpha); void GF_NbAcc(int g_a, int lo[], int hi[], void *buf, int ld[], void *alpha, ga_nbhdl_t *nbhandle); void GF_NbGet(int g_a, int lo[], int hi[], void *buf, int ld[], ga_nbhdl_t *nbhandle); void GF_NbPut(int g_a, int lo[], int hi[], void *buf, int ld[], ga_nbhdl_t *nbhandle); void GF_NbWait(ga_nbhdl_t *nbhandle); int GF_Ndim(int g_a); int GF_Cluster_nodeid(); int GF_Cluster_proc_nodeid(int proc); void GF_Inquire(int g_a, int *type, int *ndim, int dims[]); // Caching functions for remote data void GF_CachedGet(int g_a, int lo[], int hi[], void *buf, int ld[]); void GF_CachedAcc(int g_a, int lo[], int hi[], void *buf, int ld[], void *alpha); void GF_CachedNbGet(int g_a, int lo[], int hi[], void *buf, int ld[], ga_nbhdl_t *nbhandle); void GF_CachedNbWait(ga_nbhdl_t *nbhandle); void GF_CacheReadOnlyEmpty(int g_a); void GF_CacheReadWriteFlush(int g_a); void GF_CacheAccFlush(int g_a); unsigned int GF_CacheGetMisses(int g_a); unsigned int GF_CacheGetHits(int g_a); } #endif // __GFUTEX_H ga-5-3/gfutex/src/gf_cache.C0000640005473000001440000003552611704074222014522 0ustar d3n000users#include #include #include #include #include #include #include #include #include #include #include "gfutex.h" #include "gfutex_internal.h" #include "gf_cache_internal.h" #undef CACHE_STATS namespace globalFutures { using namespace globalFutures_implementation; typedef tbb::enumerable_thread_specific TSum; static GACache cache; static GACacheNBOps nbops; #ifdef CACHE_STATS static GACacheStats cacheStats; #endif template void accumulate(T *cbuf, const T *buf, size_t nelems); static bool is_slice_local(int g_a, int lo[], int hi[]); static size_t type_size(int type); static size_t slice_size(int g_a, int lo[], int hi[]); static bool get_accessor(int g_a, int lo[], int hi[], int ld[], GAInstanceCacheMap::const_accessor &acc); static void get_accessor(int g_a, int lo[], int hi[], int ld[], GAInstanceCacheMap::accessor &acc); static bool try_read_cache(int g_a, int lo[], int hi[], int ld[], void *buf); static void local_accumulate(int g_a, size_t sz, void *cbuf, const void *buf, const void *alpha); static void typed_accumulate(int type, void *cbuf, const void *buf, size_t nelems, const void *alpha); static void create_one(int type, void *alpha); static void dump_cache(std::ofstream &ofs, const int line); std::ofstream ofs; void GF_CachedGet(int g_a, int lo[], int hi[], void *buf, int ld[]) { #if 0 if (!ofs.is_open()) { std::ostringstream ostr; ostr << "diags.dat." << me; ofs.open(ostr.str().c_str(), std::ios_base::out | std::ios_base::app); } #endif if (is_slice_local(g_a, lo, hi)) { GF_Get(g_a, lo, hi, buf, ld); return; } // Optimistic cache search, assume the slice is there... bool incache = try_read_cache(g_a, lo, hi, ld, buf); if (incache) return; GAInstanceCacheMap::accessor inst_mod_acc; get_accessor(g_a, lo, hi, ld, inst_mod_acc); char *&dat = inst_mod_acc->second.getData(); size_t &sz = inst_mod_acc->second.getSize(); size_t ssz = slice_size(g_a, lo, hi); if (!dat) { dat = new char[ssz]; sz = ssz; GF_Get(g_a, lo, hi, buf, ld); memcpy(dat, buf, ssz); } else { assert(dat && (sz == ssz)); memcpy(buf, dat, sz); } } // GF_CachedGet void GF_CachedAcc(int g_a, int lo[], int hi[], void *buf, int ld[], void *alpha) { if (is_slice_local(g_a, lo, hi)) { GF_Acc(g_a, lo, hi, buf, ld, alpha); return; } // Optimistic cache search, assume the slice is there... GAInstanceCacheMap::accessor inst_mod_acc; get_accessor(g_a, lo, hi, ld, inst_mod_acc); char *&dat = inst_mod_acc->second.getData(); size_t &sz = inst_mod_acc->second.getSize(); if (!dat) { size_t ssz = slice_size(g_a, lo, hi); dat = new char[ssz]; sz = ssz; memset(dat, 0, ssz); } else assert(dat && (sz == slice_size(g_a, lo, hi))); local_accumulate(g_a, sz, dat, buf, alpha); } // GF_CachedAcc void GF_CachedNbGet(int g_a, int lo[], int hi[], void *buf, int ld[], ga_nbhdl_t *nbhandle) { try { bool is_local = is_slice_local(g_a, lo, hi); bool incache = try_read_cache(g_a, lo, hi, ld, buf); GACacheNBOps::const_accessor cacc; bool found = nbops.find(cacc, nbhandle); if (found) { // ofs << "Non-blocking operation found in cache: " << __LINE__ << std::flush << std::endl; throw GFutException("Non-blocking operation should not be in the cache!"); } GASliceNBInfo nbinfo(g_a, lo, hi, buf, ld, is_local, incache); GACacheNBOps::accessor acc; bool ins = nbops.insert(acc, nbhandle); if (!ins) { // ofs << "Non-blocking operation found in cache: " << __LINE__ << std::flush << std::endl; throw GFutException("Non-blocking operation should not be in the cache!"); } // ofs << "Inserted nbop in cache: " << nbhandle << ", is_local: " << is_local << // ", incache: " << incache << std::flush << std::endl; acc->second = nbinfo; if (!incache || is_local) GF_NbGet(g_a, lo, hi, buf, ld, nbhandle); } catch (const GFutException &excp) { std::cerr << excp.what() << std::endl; exit(EXIT_FAILURE); } } // GF_CachedNbGet void GF_CachedNbWait(ga_nbhdl_t *nbhandle) { try { GACacheNBOps::const_accessor acc; bool found = nbops.find(acc, nbhandle); if (!found) { // ofs << "Problems with nbop: " << nbhandle << std::flush << std::endl; throw GFutException("Non-blocking operation should be in the cache!"); } bool is_local = acc->second.get_local(); bool incache = acc->second.get_incache(); if (is_local || !incache) GF_NbWait(nbhandle); if (!is_local && !incache) { size_t ssz = slice_size(acc->second.get_g_a(), acc->second.get_lo(), acc->second.get_hi()); GAInstanceCacheMap::accessor inst_acc; get_accessor(acc->second.get_g_a(), acc->second.get_lo(), acc->second.get_hi(), acc->second.get_ld(), inst_acc); char *&dat = inst_acc->second.getData(); size_t &sz = inst_acc->second.getSize(); if (!dat) { dat = new char[ssz]; sz = ssz; memcpy(dat, acc->second.get_buf(), ssz); } else assert(dat && (sz == slice_size(acc->second.get_g_a(), acc->second.get_lo(), acc->second.get_hi()))); } nbops.erase(acc); // Erase record of non-blocking operation } catch (const GFutException &excp) { std::cerr << excp.what() << std::endl; exit(EXIT_FAILURE); } } // GF_CachedNbWait void GF_CacheReadOnlyEmpty(int g_a) { GACache::accessor mod_acc; bool found = cache.find(mod_acc, g_a); if (found) { #ifdef CACHE_STATS GACacheStats::accessor sacc; #endif mod_acc->second.cmap.clear(); // Erase all cache entries for GA instance g_a #ifdef CACHE_STATS cacheStats.find(sacc, g_a); sacc->second.hits = 0U; sacc->second.misses = 0U; #endif } } // GF_CacheReadOnlyEmpty void GF_CacheReadWriteFlush(int g_a) { GACache::accessor acc; bool found = cache.find(acc, g_a); if (!found) return; #ifdef CACHE_STATS GACacheStats::accessor sacc; #endif size_t sz = acc->second.cmap.size(); ga_nbhdl_t *hdls = new ga_nbhdl_t[sz]; int pos = 0; for (GAInstanceCacheMap::const_iterator iter = acc->second.cmap.begin(); iter != acc->second.cmap.end(); iter++) { GF_NbPut(g_a, iter->first.get_lo(), iter->first.get_hi(), iter->second.getData(), iter->first.get_ld(), &hdls[pos]); pos++; } for (size_t i = 0U; i < sz; i++) GF_NbWait(&hdls[pos]); acc->second.cmap.clear(); #ifdef CACHE_STATS cacheStats.find(sacc, g_a); sacc->second.hits = 0U; sacc->second.misses = 0U; #endif delete [] hdls; } // GF_CacheReadWriteFlush void GF_CacheAccFlush(int g_a) { GACache::accessor acc; bool found = cache.find(acc, g_a); if (!found) return; int dims[GA_MAX_DIM]; int ndim, type; GF_Inquire(g_a, &type, &ndim, dims); char *alpha = new char[type_size(type)]; #ifdef CACHE_STATS GACacheStats::accessor sacc; #endif size_t sz = acc->second.cmap.size(); ga_nbhdl_t *hdls = new ga_nbhdl_t[sz]; int pos = 0; create_one(type, alpha); for (GAInstanceCacheMap::const_iterator iter = acc->second.cmap.begin(); iter != acc->second.cmap.end(); iter++) { GF_NbAcc(g_a, iter->first.get_lo(), iter->first.get_hi(), iter->second.getData(), iter->first.get_ld(), alpha, &hdls[pos]); pos++; } for (size_t i = 0U; i < sz; i++) GF_NbWait(&hdls[pos]); acc->second.cmap.clear(); #ifdef CACHE_STATS cacheStats.find(sacc, g_a); sacc->second.hits = 0U; sacc->second.misses = 0U; #endif delete [] alpha; delete [] hdls; } // GF_CacheAccFlush unsigned int GF_CacheGetMisses(int g_a) { #ifdef CACHE_STATS GACacheStats::const_accessor acc; bool found = cacheStats.find(acc, g_a); if (found) return acc->second.misses; #endif return 0U; } // GF_CacheGetMisses unsigned int GF_CacheGetHits(int g_a) { #ifdef CACHE_STATS GACacheStats::const_accessor acc; bool found = cacheStats.find(acc, g_a); if (found) return acc->second.hits; #endif return 0U; } // GF_CacheGetHits bool is_slice_local(int g_a, int lo[], int hi[]) { int ndims = GF_Ndim(g_a); int *map = new int[2 * ndims * nproc]; int *procs = new int[nproc]; bool ret = false; int np = GF_Locate_region(g_a, lo, hi, map, procs); if (np == 1 && procs[0] == me) ret = true; delete [] map; delete [] procs; return ret; } // is_slice_local size_t type_size(int type) { size_t tsz; switch (type) { case C_CHAR: tsz = sizeof(char); break; case C_DBL: tsz = sizeof(double); break; case C_DCPL: tsz = sizeof(MA_DoubleComplex); break; case C_FLOAT: tsz = sizeof(float); break; case C_INT: tsz = sizeof(int); break; case C_LDBL: tsz = sizeof(MA_LongDouble); break; case C_LDCPL: tsz = sizeof(MA_LongDoubleComplex); break; case C_LONGLONG: tsz = sizeof(long long int); break; case C_LONG: tsz = sizeof(long int); break; case C_SCPL: tsz = sizeof(MA_SingleComplex); break; default: std::cerr << "Proc: " << me << ", GA data type not found! " << type << std::endl; exit(EXIT_FAILURE); } return tsz; } // type_size size_t slice_size(int g_a, int lo[], int hi[]) { int dims[GA_MAX_DIM]; int ndim, type; size_t sz; GF_Inquire(g_a, &type, &ndim, dims); sz = type_size(type); for (int i = 0; i < ndim; i++) sz *= (hi[i] - lo[i] + 1); return sz; } // slice_size bool get_accessor(int g_a, int lo[], int hi[], int ld[], GAInstanceCacheMap::const_accessor &acc) { GACache::const_accessor accessor; cache.insert(accessor, g_a); GASliceKey slkey(g_a, lo, hi, ld); bool slice_found = accessor->second.cmap.find(acc, slkey); accessor.release(); #ifdef CACHE_STATS GACacheStats::accessor sacc; cacheStats.insert(sacc, g_a); if (slice_found) sacc->second.hits++; else sacc->second.misses++; #endif return slice_found; } // get_accessor void get_accessor(int g_a, int lo[], int hi[], int ld[], GAInstanceCacheMap::accessor &acc) { GACache::accessor mod_acc; cache.insert(mod_acc, g_a); GASliceKey slkey(g_a, lo, hi, ld); bool ins = mod_acc->second.cmap.insert(acc, slkey); mod_acc.release(); #ifdef CACHE_STATS GACacheStats::accessor sacc; cacheStats.insert(sacc, g_a); if (ins) sacc->second.misses++; else sacc->second.hits++; #endif } // get_accessor bool try_read_cache(int g_a, int lo[], int hi[], int ld[], void *buf) { GAInstanceCacheMap::const_accessor inst_acc; bool slice_found = get_accessor(g_a, lo, hi, ld, inst_acc); if (slice_found) { size_t sz = inst_acc->second.getSize(); memcpy(buf, inst_acc->second.getData(), sz); } return slice_found; } // try_read_cache template void accumulate(T *cbuf, const T *buf, size_t nelems, const T *alpha) { for (size_t i = 0; i < nelems; i++) cbuf[i] += (*alpha * buf[i]); } // accumulate void local_accumulate(int g_a, size_t sz, void *cbuf, const void *buf, const void *alpha) { int dims[GA_MAX_DIM]; int ndim, type; size_t nelems; GF_Inquire(g_a, &type, &ndim, dims); nelems = sz / type_size(type); typed_accumulate(type, cbuf, buf, nelems, alpha); } // local_accumulate void typed_accumulate(int type, void *cbuf, const void *buf, size_t nelems, const void *alpha) { switch (type) { case C_CHAR: accumulate(static_cast(cbuf), static_cast(buf), nelems, static_cast(alpha)); break; case C_DBL: accumulate(static_cast(cbuf), static_cast(buf), nelems, static_cast(alpha)); break; case C_FLOAT: accumulate(static_cast(cbuf), static_cast(buf), nelems, static_cast(alpha)); break; case C_INT: accumulate(static_cast(cbuf), static_cast(buf), nelems, static_cast(alpha)); break; case C_LONGLONG: accumulate(static_cast(cbuf), static_cast(buf), nelems, static_cast(alpha)); break; case C_LONG: accumulate(static_cast(cbuf), static_cast(buf), nelems, static_cast(alpha)); break; default: std::cerr << "Proc: " << me << ", unsupported type for cached accumulate: " << type << std::endl; exit(EXIT_FAILURE); } } // typed_accumulate void create_one(int type, void *alpha) { char one[sizeof(long long int)]; memset(one, 0, sizeof(one)); switch (type) { case C_CHAR: one[0] = 1; memcpy(alpha, one, sizeof(char)); break; case C_DBL: *(reinterpret_cast(one)) = 1.0; memcpy(alpha, one, sizeof(double)); break; case C_FLOAT: *(reinterpret_cast(one)) = 1.0f; memcpy(alpha, one, sizeof(float)); break; case C_INT: *(reinterpret_cast(one)) = 1; memcpy(alpha, one, sizeof(int)); break; case C_LONGLONG: *(reinterpret_cast(one)) = 1L; memcpy(alpha, one, sizeof(long long int)); break; case C_LONG: *(reinterpret_cast(one)) = 1L; memcpy(alpha, one, sizeof(long int)); break; default: std::cerr << "Proc: " << me << ", unsupported type for cached accumulate: " << type << std::endl; exit(EXIT_FAILURE); } } // create_one void dump_cache(std::ofstream &ofs, const int line) { for (GACache::const_iterator iter = cache.begin(); iter != cache.end(); iter++) { int ndim = GF_Ndim(iter->first); ofs << line << " slices for g_a: " << iter->first << ", number: " << iter->second.cmap.size() << std::endl << std::endl; for (GAInstanceCacheMap::const_iterator iiter = iter->second.cmap.begin(); iiter != iter->second.cmap.end(); iiter++) { ofs << "g_a: << " << iiter->first.get_g_a() << ", lo: "; for (int i = 0; i < ndim - 1; i++) ofs << iiter->first.get_lo()[i] << " "; ofs << iiter->first.get_lo()[ndim - 1] << ", hi: "; for (int i = 0; i < ndim - 1; i++) ofs << iiter->first.get_hi()[i] << " "; ofs << iiter->first.get_hi()[ndim - 1] << ", sz: " << iiter->second.getSize(); ofs << ", dat: " << std::hex << static_cast(iiter->second.getData()) << std::dec; ofs << std::endl; } } ofs << std::flush; } // dump_cache } ga-5-3/gfutex/src/gfutex.C0000640005473000001440000006200311704074222014273 0ustar d3n000users#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "gfutex.h" #include "gfutex_internal.h" namespace globalFutures_implementation { int nproc, me; int nodeme; } namespace globalFutures { using namespace globalFutures_implementation; typedef int (*Gpc_Func)(); static const char *const msgq_name = "futures_queue"; static const char *const tbb_nthreads = "TBB_NTHREADS"; static const int maxCnt = INT_MAX / 100; static const int maxRets = 10000000; static const int msgqMaxNumMsgs = 51200; static const int msgqMaxMsgSz = 8192; static const unsigned int complete = 1U; static const unsigned int incomplete = 0U; static int msgLenOff; static int msgDatOff; static message_queue *msgq = NULL; static NodeQueues msgqs; static ProcIdMap pmap; static int nthreads; static int hgpced, hgpcxd; static atomic listen; static GAMutex inGA; // Is any thread in the GA library? static FuncArray funcArray; static unsigned int *pretid_cnt; static char tmpdirname[] = "gfutex_XXXXXX"; static MPI_Comm pcomm; static unsigned int volatile **retptrs; static unsigned int currRetPos; static RetMutex currRetLock; static DirectMap directActivity; static task_scheduler_init *tsched = NULL; static atomic pbcnt, execnt, msgscnt, msgrcnt; static void send_gpc(GFHandle hndl, int g_a, int ndims, int lo[], int hi[], void *arg, bool enqueue); static int gpc_enqueue_dispatcher(int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, int *rhsize, void *rdata, int rdlen, int *rdsize, int rtype); static int gpc_execute_dispatcher(int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, int *rhsize, void *rdata, int rdlen, int *rdsize, int rtype); static void msgq_listener(); static void wait_remote(GFHandle hndl, int np, int procs[], unsigned int rdata[]); static void process_execmsg(); static int put_value_long(unsigned int val, int offs, int target); static void print_debug_info(); int GFInitialize() { char *retdir, *snthreads; int lendir; MPI_Comm_dup(MPI_COMM_WORLD, &pcomm); // Duplicate MPI_COMM_WORLD for compatibility me = GA_Nodeid(); nproc = GA_Nnodes(); snthreads = getenv(tbb_nthreads); if (snthreads) nthreads = atoi(snthreads) + 1; else nthreads = task_scheduler_init::default_num_threads(); if (me == 0) std::cerr << "Number of TBB threads to use: " << nthreads << std::endl; int nnds = GA_Cluster_nnodes(); if (nnds > 1) tsched = new task_scheduler_init(task_scheduler_init::deferred); else tsched = new task_scheduler_init(nthreads); hgpced = ARMCI_Gpc_register(reinterpret_cast(gpc_enqueue_dispatcher)); hgpcxd = ARMCI_Gpc_register(reinterpret_cast(gpc_execute_dispatcher)); retptrs = new unsigned int volatile *[nproc]; ARMCI_Malloc(reinterpret_cast(const_cast(retptrs)), sizeof(unsigned int) * maxRets); int nid = GA_Cluster_nodeid(); int nodenproc = GA_Cluster_nprocs(nid); for (int i = 0; i < maxRets; i++) retptrs[me][i] = incomplete; for (int i = 0; i < nodenproc; i++) if (me == GA_Cluster_procid(nid, i)) { nodeme = i; break; } try { std::ostringstream ostr; std::string qname; if (nodeme == 0) { for (int i = 0; i < nodenproc; i++) { int rpid = GA_Cluster_procid(nid, i); ostr << msgq_name << rpid; qname = ostr.str(); message_queue::remove(qname.c_str()); message_queue *nqueue = new message_queue(create_only, qname.c_str(), msgqMaxNumMsgs, msgqMaxMsgSz); QueueData qdata; qdata.queue = nqueue; qdata.qname = qname; qdata.mname = qname + "_mutex"; named_mutex::remove(qdata.mname.c_str()); qdata.mutex = new named_mutex(create_only, qdata.mname.c_str()); msgqs.push_back(qdata); ostr.str(""); pmap[rpid] = i; } msgq = msgqs.at(0).queue; MPI_Barrier(pcomm); } else { MPI_Barrier(pcomm); for (int i = 0; i < nodenproc; i++) { int rpid = GA_Cluster_procid(nid, i); ostr << msgq_name << rpid; qname = ostr.str(); message_queue *nqueue = new message_queue(open_only, qname.c_str()); QueueData qdata; qdata.queue = nqueue; qdata.qname = qname; qdata.mname = qname + "_mutex"; qdata.mutex = new named_mutex(open_only, qdata.mname.c_str()); msgqs.push_back(qdata); if (rpid == me) msgq = nqueue; ostr.str(""); pmap[rpid] = i; } } } catch (const MsgqException &excp) { std::cerr << __LINE__ << " " << excp.what() << std::endl; exit(EXIT_FAILURE); } catch(interprocess_exception &ex){ std::cerr << ex.what() << ": " << __LINE__ << std::endl; exit(EXIT_FAILURE); } msgLenOff = 1; msgDatOff = nproc + 1; listen = 1U; currRetPos = 0U; pbcnt = 0U; execnt = 0U; msgscnt = 0U; msgrcnt = 0U; MPI_Barrier(pcomm); return 1; } // GFInitialize void GFFinalize() { int retc; MPI_Barrier(pcomm); try { for (FuncArray::iterator iter = funcArray.begin(); iter != funcArray.end(); iter++) { RemoteFunction *func = *iter; if (func) func->finalizeThreads(); } listen = 0U; assert(tsched); delete tsched; for (NodeQueues::iterator iter = msgqs.begin(); iter != msgqs.end(); iter++) { message_queue *q = iter->queue; named_mutex *m = iter->mutex; assert(q); delete q; assert(m); delete m; if (nodeme == 0) { message_queue::remove(iter->qname.c_str()); named_mutex::remove(iter->mname.c_str()); } iter->queue = NULL; iter->mutex = NULL; } } catch (const MsgqException &excp) { std::cerr << __LINE__ << " " << excp.what() << std::endl; exit(EXIT_FAILURE); } MPI_Barrier(pcomm); for (FuncArray::iterator iter = funcArray.begin(); iter != funcArray.end(); iter++) { RemoteFunction *func = *iter; if (func) delete func; } ARMCI_Free(const_cast(retptrs[me])); delete [] retptrs; MPI_Barrier(pcomm); MPI_Comm_free(&pcomm); } // GFFinalize GFHandle GFRegister(RemoteFuncProto func, const size_t argSz, const size_t retSz) { if (argSz > msgqMaxMsgSz) { std::cerr << "GFRegister: Argument size exceeds maximum allowed!, argSz: " << argSz << ", max. allowed: " << msgqMaxMsgSz << std::endl; exit(EXIT_FAILURE); } RemoteFunction *ptr = new RemoteFunction(func, argSz, retSz); funcArray.push_back(ptr); // Elements are owned by the array now MPI_Barrier(pcomm); return funcArray.size() - 1; } // GFRegister void send_gpc(GFHandle hndl, int g_a, int ndims, int lo[], int hi[], void *arg, bool enqueue) { try { int *plo, *phi; void *parg; int np; int hgpc; RemoteFunction *ptr = funcArray.at(hndl); int *map = new int[2 * ndims * nproc]; int *procs = new int[nproc]; size_t tlen = sizeof(GPCArgsExec) + sizeof(lo[0]) * ndims + sizeof(hi[0]) * ndims + ptr->getArgSz(); char *sndBuf = new char[tlen]; GPCArgsExec *gpcArgs = reinterpret_cast(sndBuf); bool direct; if (enqueue) hgpc = hgpced; else hgpc = hgpcxd; plo = reinterpret_cast(gpcArgs->dat); phi = plo + ndims; parg = phi + ndims; gpcArgs->g_a = g_a; gpcArgs->ndims = ndims; gpcArgs->src = me; direct = (task::self().parent() == NULL); memcpy(plo, lo, sizeof(lo[0]) * ndims); memcpy(phi, hi, sizeof(hi[0]) * ndims); memcpy(parg, arg, ptr->getArgSz()); np = GF_Locate_region(g_a, lo, hi, map, procs); unsigned int *rdata = new unsigned int[np]; for (int i = 0; i < np; i++) { GAMutex::scoped_lock glock; RetMutex::scoped_lock rlock; unsigned int retPos; unsigned int retDat; rlock.acquire(currRetLock); // Lock position counter retPos = currRetPos++; if (currRetPos == maxRets) currRetPos = 0U; rlock.release(); // Unlock position counter if (retptrs[me][retPos] == complete) { std::cerr << "Error executing GPC for process: " << i << ", from process: " << me << ", too many concurrent GPCs ?" << std::endl; std::cerr << "directActivity.size(): " << directActivity.size() << std::endl; exit(EXIT_FAILURE); } gpcArgs->offs = retPos; // Address to indicate completion rdata[i] = retPos; { DirectMap::accessor a; directActivity.insert(a, retPos); a->second = direct; } glock.acquire(inGA); ARMCI_Gpc_exec(hgpc, procs[i], &hndl, sizeof(hndl), gpcArgs, tlen, NULL, 0, &retDat, sizeof(retDat), NULL); glock.release(); } delete [] rdata; delete [] map; delete [] procs; delete [] sndBuf; } catch (const std::out_of_range &excp) { std::cerr << "Proc: " << me << ", function not registered: " << hndl << ", line:" << __LINE__ << ", " << excp.what() << std::endl; std::cerr << "funcArray.size(): " << funcArray.size() << std::endl; exit(EXIT_FAILURE); } } // send_gpc void GFEnqueue(GFHandle hndl, int g_a, int ndims, int lo[], int hi[], void *arg) { send_gpc(hndl, g_a, ndims, lo, hi, arg, true); } // GFEnqueue void GFExecute(GFHandle hndl, int g_a, int ndims, int lo[], int hi[], void *arg) { send_gpc(hndl, g_a, ndims, lo, hi, arg, false); } // GFExecute int GFMaxConcurrency() { return maxRets; } // GFMaxConcurrency void GFQuiesce(GFHandle hndl) { try { if (task::self().parent() != NULL) throw GFutException("GFQuiesce() must be called only from the main process!"); bool allquiet; // Now wait for all activities spawned on other processes to complete do { allquiet = true; for (DirectMap::const_iterator iter = directActivity.begin(); iter != directActivity.end(); iter++) { unsigned int pos = iter->first; if (iter->second && retptrs[me][pos] != complete) allquiet = false; } } while(!allquiet); // All directly spawned activities are quiesced for this process for (DirectMap::iterator iter = directActivity.begin(); iter != directActivity.end(); iter++) { unsigned int pos = iter->first; if (iter->second) { assert(retptrs[me][pos] == complete); retptrs[me][pos] = incomplete; directActivity.erase(pos); } } } catch (const std::out_of_range &excp) { std::cerr << "Function not registered: " << __LINE__ << excp.what() << std::endl; exit(EXIT_FAILURE); } catch (const GFutException &excp) { std::cerr << excp.what() << std::endl; exit(EXIT_FAILURE); } } // GFQuiesce void GFAllQuiesce(GFHandle hndl) { try { if (task::self().parent() != NULL) throw GFutException("GFQuiesce() must be called only from the main process!"); RemoteFunction *ptr = funcArray.at(hndl); int compcnt; int totcnt; int passcnt = 0; int maxRefCnt = 0; #if 0 tbb::tick_count t0, t1; double taccum = 0.0, caccum = 0.0, waccum = 0.0, raccum = 0.0; #endif // Now wait for all activities spawned locally & on other processes to complete #if 0 t0 = tbb::tick_count::now(); #endif do { compcnt = 0; totcnt = 0; #if 0 tbb::tick_count t2, t3; t2 = tbb::tick_count::now(); #endif for (DirectMap::const_iterator iter = directActivity.begin(); iter != directActivity.end(); iter++) { unsigned int pos = iter->first; if (/* iter->second && */ retptrs[me][pos] != complete) compcnt++; } msgq_listener(); #if 0 t3 = tbb::tick_count::now(); caccum += (t3 - t2).seconds(); #endif task *parentTask = ptr->getParentTask(); int refCnt = -1; if (!parentTask) goto reduction; #if 0 t2 = tbb::tick_count::now(); #endif refCnt = parentTask->ref_count(); if (refCnt > maxRefCnt) maxRefCnt = refCnt; if (refCnt > 0) { ptr->lockParent(); parentTask->wait_for_all(); parentTask->destroy(*parentTask); parentTask = new (task::allocate_root()) empty_task; parentTask->set_ref_count(1); ptr->setParentTask(parentTask); ptr->unlockParent(); } #if 0 t3 = tbb::tick_count::now(); waccum += (t3 - t2).seconds(); #endif reduction: #if 0 if (passcnt % 1000000 == 0 && me == 0) { std::cout << "Proc: " << me << ", passcnt: " << passcnt << ", refCnt: " << refCnt << ", compcnt: " << compcnt << std::flush << std::endl; print_debug_info(); std::cout << "Proc: " << me << ", directActivity.size(): " << directActivity.size() << std::flush << std::endl; } #endif #if 0 t2 = tbb::tick_count::now(); #endif MPI_Allreduce(&compcnt, &totcnt, 1, MPI_INT, MPI_SUM, pcomm); #if 0 t3 = tbb::tick_count::now(); raccum += (t3 - t2).seconds(); #endif passcnt++; } while (totcnt > 0 /* && passcnt < maxCnt */); #if 0 t1 = tbb::tick_count::now(); taccum += (t1 - t0).seconds(); #endif MPI_Barrier(pcomm); #if 0 if (me == 0) { for (int i = 0; i < directActivity.size(); i++) std::cout << "Proc: " << me << ", retptrs[" << me << "][" << i << "]: " << (void *)&retptrs[me][i] << std::flush << std::endl; std::cout << "Proc: " << me << ", final passcnt: " << passcnt << ", maxRefCnt: " << maxRefCnt << ", compcnt: " << compcnt << ", totcnt: " << totcnt << std::flush << std::endl; print_debug_info(); std::cout << "Proc: " << me << ", final directActivity.size(): " << directActivity.size() << std::flush << std::endl; } #endif #if 0 std::cout << "Proc: " << me << ", time spent checking: " << std::fixed << taccum << ", passcnt: " << passcnt << std::endl; std::cout << "Proc: " << me << ", time spent in loop: " << caccum << ", time spent waiting for tasks: " << waccum << ", time spent in reduction: " << raccum << std::flush << std::endl; #endif // All spawned activities are quiesced for (DirectMap::iterator iter = directActivity.begin(); iter != directActivity.end(); iter++) { unsigned int pos = iter->first; if (retptrs[me][pos] != complete) { std::cerr << "Proc: " << me << ", activity: " << pos << ", should be complete!" << std::flush << std::endl; std::cerr << "Proc: " << me << ", pos: " << pos << ", retptrs: " << retptrs[me][pos] << ", direct: " << iter->second << std::flush << std::endl; } retptrs[me][pos] = incomplete; } directActivity.clear(); // All indirectly spawned activities are quiesced at this point // Safe to call GA without lock MPI_Barrier(pcomm); } catch (const std::out_of_range &excp) { std::cerr << "Function not registered: " << __LINE__ << excp.what() << std::endl; exit(EXIT_FAILURE); } } // GFAllQuiesce void GFAllQuiesce() { for (GFHandle hndl = 0U; hndl < funcArray.size(); hndl++) GFAllQuiesce(hndl); } // GFAllQuiesce void GF_Access(int g_a, int lo[], int hi[], void *ptr, int ld[]) { GAMutex::scoped_lock lock; lock.acquire(inGA); ::NGA_Access(g_a, lo, hi, ptr, ld); lock.release(); } // GF_Access void GF_Release(int g_a, int lo[], int hi[]) { GAMutex::scoped_lock lock; lock.acquire(inGA); ::NGA_Release(g_a, lo, hi); lock.release(); } // GF_Release void GF_Get(int g_a, int lo[], int hi[], void *buf, int ld[]) { GAMutex::scoped_lock lock; lock.acquire(inGA); ::NGA_Get(g_a, lo, hi, buf, ld); lock.release(); } // GF_Get int GF_Locate_region(int g_a, int lo[], int hi[], int map[], int procs[]) { GAMutex::scoped_lock lock; lock.acquire(inGA); int np = ::NGA_Locate_region(g_a, lo, hi, map, procs); lock.release(); return np; } // GF_Locate_region void GF_Distribution(int g_a, int iproc, int lo[], int hi[]) { GAMutex::scoped_lock lock; lock.acquire(inGA); ::NGA_Distribution(g_a, iproc, lo, hi); lock.release(); } // GF_Distribution void GF_Acc(int g_a, int lo[], int hi[], void *buf, int ld[], void *alpha) { GAMutex::scoped_lock lock; lock.acquire(inGA); ::NGA_Acc(g_a, lo, hi, buf, ld, alpha); lock.release(); } // GFAcc void GF_NbAcc(int g_a, int lo[], int hi[], void *buf, int ld[], void *alpha, ga_nbhdl_t *nbhandle) { GAMutex::scoped_lock lock; lock.acquire(inGA); ::NGA_NbAcc(g_a, lo, hi, buf, ld, alpha, nbhandle); lock.release(); } // GF_NbAcc void GF_NbGet(int g_a, int lo[], int hi[], void *buf, int ld[], ga_nbhdl_t *nbhandle) { GAMutex::scoped_lock lock; lock.acquire(inGA); ::NGA_NbGet(g_a, lo, hi, buf, ld, nbhandle); lock.release(); } // GF_NbGet void GF_NbPut(int g_a, int lo[], int hi[], void *buf, int ld[], ga_nbhdl_t *nbhandle) { GAMutex::scoped_lock lock; lock.acquire(inGA); ::NGA_NbPut(g_a, lo, hi, buf, ld, nbhandle); lock.release(); } // GF_NbPut void GF_NbWait(ga_nbhdl_t *nbhandle) { GAMutex::scoped_lock lock; lock.acquire(inGA); ::NGA_NbWait(nbhandle); lock.release(); } // GF_NbWait int GF_Ndim(int g_a) { GAMutex::scoped_lock lock; lock.acquire(inGA); int ret = ::GA_Ndim(g_a); lock.release(); return ret; } // GF_Ndim int GF_Cluster_nodeid() { GAMutex::scoped_lock lock; lock.acquire(inGA); int ret = ::GA_Cluster_nodeid(); lock.release(); return ret; } // GF_Cluster_nodeid int GF_Cluster_proc_nodeid(int proc) { GAMutex::scoped_lock lock; lock.acquire(inGA); int ret = ::GA_Cluster_proc_nodeid(proc); lock.release(); return ret; } // GF_Cluster_proc_nodeid void GF_Inquire(int g_a, int *type, int *ndim, int dims[]) { GAMutex::scoped_lock lock; lock.acquire(inGA); ::NGA_Inquire(g_a, type, ndim, dims); lock.release(); } // GF_Inquire // Internal member functions RemoteFunction::~RemoteFunction() { } // ~RemoteFunction void RemoteFunction::execute(void *buf, size_t bufSz) { // Very careful allocation char *rbuf = new char[bufSz + sizeof(ExecutorArgs) - sizeof(GPCArgsExec)]; // Will be deleted as the user or library checks for completion ExecutorArgs *rargs = reinterpret_cast(rbuf); rargs->func = func; memcpy(&rargs->gpcArgs, buf, bufSz); if (!tsched->is_active()) tsched->initialize(nthreads); if (!parentTask) { lockParent(); if (!parentTask) { parentTask = new (task::allocate_root()) empty_task; parentTask->set_ref_count(1); } unlockParent(); } GFutTask *rec = new (parentTask->allocate_child()) GFutTask(rbuf); parentTask->increment_ref_count(); pbcnt++; #if 1 task::enqueue(*rec); #else parentTask->spawn(*rec); #endif } // execute void RemoteFunction::finalizeThreads(const bool terminate) { if (!parentTask) return; if (parentTask->ref_count() > 0) parentTask->wait_for_all(); // Wait for all child tasks to finish parentTask->destroy(*parentTask); parentTask = NULL; } // finalizeThreads // Static function definitions int gpc_enqueue_dispatcher(int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, int *rhsize, void *rdata, int rdlen, int *rdsize, int rtype) { try { gfutmsglen msglen; char *alc = new char[sizeof(gfutmsgsnd) + hlen + dlen]; gfutmsgsnd *msgbuf = reinterpret_cast(alc); msglen.len = hlen + dlen; memcpy(msgbuf->dat, hdr, hlen); memcpy(msgbuf->dat + hlen, data, dlen); ProcIdMap::const_iterator iter = pmap.find(to); if (iter == pmap.end()) throw std::out_of_range("key not found in pmap!"); QueueData &qdata = msgqs.at(iter->second); message_queue *mqueue = qdata.queue; assert(mqueue); scoped_lock lock(*qdata.mutex); bool ret = mqueue->try_send(&msglen, sizeof(msglen), to); if (!ret) throw GFutException("Message queue is full for process!"); ret = mqueue->try_send(msgbuf, hlen + dlen, to); if (!ret) throw GFutException("Message queue is full for process!"); lock.unlock(); msgscnt++; delete [] alc; } catch (const MsgqException &excp) { std::cerr << __LINE__ << " " << excp.what() << std::endl; exit(EXIT_FAILURE); } catch (const GFutException &excp) { std::cerr << excp.what() << std::endl; exit(EXIT_FAILURE); } catch(interprocess_exception &ex){ std::cerr << ex.what() << ": " << __LINE__ << std::endl; exit(EXIT_FAILURE); } catch (const std::out_of_range &excp) { std::cerr << excp.what() << ": " << __LINE__ << std::endl; std::cerr << "Proc: " << me << ", to: " << to << ", pmap[to]: " << pmap[to] << std::endl; std::cerr << "Proc: " << me << ", msgqs.size(): " << msgqs.size() << std::endl; exit(EXIT_FAILURE); } return GPC_DONE; } // gpc_enqueue_dispatcher int gpc_execute_dispatcher(int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, int *rhsize, void *rdata, int rdlen, int *rdsize, int rtype) { try { GFHandle hndl; hndl = *(reinterpret_cast(hdr)); RemoteFunction *func = funcArray.at(hndl); func->execute(data, dlen); } catch (const std::out_of_range &excp) { std::cerr << excp.what() << ": " << __LINE__ << std::endl; exit(EXIT_FAILURE); } return GPC_DONE; } // gpc_execute_dispatcher void msgq_listener() { unsigned int cont_listen; int cnt = 0; do { try { process_execmsg(); cont_listen = listen; cnt++; } catch (const MsgqException &excp) { std::cerr << __LINE__ << " " << excp.what() << std::endl; exit(EXIT_FAILURE); } catch (const std::out_of_range &excp) { std::cerr << "Function not registered: " << __LINE__ << excp.what() << std::endl; exit(EXIT_FAILURE); } catch(interprocess_exception &ex){ std::cerr << ex.what() << ": " << __LINE__ << std::endl; std::cerr << ex.get_native_error() << ", " << ex.get_error_code(); std::cerr << ", " << size_error << std::endl; exit(EXIT_FAILURE); } } while ((msgq->get_num_msg() > 0) /* && (cnt < maxCnt) */); } // msgq_listener void GFutTask::msgq_executor(void *arg) { ExecutorArgs *earg; int *lo, *hi; void *rarg; earg = reinterpret_cast(arg); lo = reinterpret_cast(earg->gpcArgs.dat); hi = lo + earg->gpcArgs.ndims; rarg = hi + earg->gpcArgs.ndims; earg->func(earg->gpcArgs.g_a, earg->gpcArgs.ndims, lo, hi, rarg); put_value_long(complete, earg->gpcArgs.offs, earg->gpcArgs.src); execnt++; } // msgq_executor void wait_remote(GFHandle hndl, int np, int procs[], unsigned int rdata[]) { bool *status = new bool[np]; bool flag; int cnt = 0; for (int i = 0; i < np; i++) status[i] = false; do { flag = true; for (int i = 0; i < np; i++) { int pos = rdata[i]; if (!status[i]) status[i] = (retptrs[me][pos] == complete); this_tbb_thread::yield(); flag = (flag && status[i]); } cnt++; } while (!flag && cnt < maxCnt); delete [] status; if (cnt >= maxCnt) throw GFutException("wait_remote() exceeded iteration count, response did not arrive"); } // wait_remote void process_execmsg() { gfutmsglen msglen; size_t rsz = 0U; unsigned int prio = 0U; bool ret = msgq->try_receive(&msglen, msgqMaxMsgSz, rsz, prio); if (ret) { assert(rsz == sizeof(msglen)); char *alc = new char[sizeof(gfutmsgsnd) + msglen.len]; // Length of function type is // included in the overall message length gfutmsgrcv *msgbuf = reinterpret_cast(alc); bool oret; do { oret = msgq->try_receive(msgbuf, msgqMaxMsgSz, rsz, prio); } while (!oret); assert(rsz == msglen.len); msgrcnt++; RemoteFunction *func = funcArray.at(msgbuf->func); func->execute(&msgbuf->gpcArgs, rsz - sizeof(msgbuf->func)); delete [] alc; } } // process_execmsg int put_value_long(unsigned int val, int offs, int target) { GAMutex::scoped_lock lock; int ret = 0; lock.acquire(inGA); ret = ARMCI_PutValueInt(val, const_cast(&retptrs[target][offs]), target); ARMCI_Fence(target); lock.release(); return ret; } // put_value_long void print_debug_info() { std::cout << "pbcnt: " << pbcnt << ", execnt: " << execnt << std::flush << std::endl; std::cout << "msgscnt: " << msgscnt << ", msgrcnt: " << msgrcnt << std::endl; std::cout << "number of messages in queue: " << msgq->get_num_msg() << std::endl; std::cout << "listen: " << listen << std::flush << std::endl; } // print_debug_info } ga-5-3/gfutex/src/gfutex_instr_comm.C0000640005473000001440000006674012077364014016546 0ustar d3n000users#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "gfutex.h" #include "gfutex_internal.h" namespace globalFutures_implementation { int nproc, me; int nodeme; } namespace globalFutures { using namespace globalFutures_implementation; typedef int (*Gpc_Func)(); struct CommInfo { int target; int g_a; tbb_thread::id tid; }; typedef std::list ProcList; static const char *const msgq_name = "futures_queue"; static const char *const tbb_nthreads = "TBB_NTHREADS"; static const int maxCnt = INT_MAX / 100; static const int maxRets = 10000000; static const int msgqMaxNumMsgs = 51200; static const int msgqMaxMsgSz = 8192; static const unsigned int complete = 1U; static const unsigned int incomplete = 0U; static int msgLenOff; static int msgDatOff; static message_queue *msgq = NULL; static NodeQueues msgqs; static ProcIdMap pmap; static int nthreads; static int hgpced, hgpcxd; static atomic listen; static GAMutex inGA; // Is any thread in the GA library? static FuncArray funcArray; static unsigned int *pretid_cnt; static char tmpdirname[] = "gfutex_XXXXXX"; static MPI_Comm pcomm; static unsigned int volatile **retptrs; static unsigned int currRetPos; static RetMutex currRetLock; static DirectMap directActivity; static task_scheduler_init *tsched = NULL; static atomic pbcnt, execnt, msgscnt, msgrcnt; static ProcList procList; static void send_gpc(GFHandle hndl, int g_a, int ndims, int lo[], int hi[], void *arg, bool enqueue); static int gpc_enqueue_dispatcher(int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, int *rhsize, void *rdata, int rdlen, int *rdsize, int rtype); static int gpc_execute_dispatcher(int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, int *rhsize, void *rdata, int rdlen, int *rdsize, int rtype); static void msgq_listener(); static void wait_remote(GFHandle hndl, int np, int procs[], unsigned int rdata[]); static void process_execmsg(); static int put_value_long(unsigned int val, int offs, int target); static void print_debug_info(); int GFInitialize() { char *retdir, *snthreads; int lendir; MPI_Comm_dup(MPI_COMM_WORLD, &pcomm); // Duplicate MPI_COMM_WORLD for compatibility me = GA_Nodeid(); nproc = GA_Nnodes(); snthreads = getenv(tbb_nthreads); if (snthreads) nthreads = atoi(snthreads) + 1; else nthreads = task_scheduler_init::default_num_threads(); if (me == 0) std::cerr << "Number of TBB threads to use: " << nthreads << std::endl; int nnds = GA_Cluster_nnodes(); if (nnds > 1) tsched = new task_scheduler_init(task_scheduler_init::deferred); else tsched = new task_scheduler_init(nthreads); hgpced = ARMCI_Gpc_register(reinterpret_cast(gpc_enqueue_dispatcher)); hgpcxd = ARMCI_Gpc_register(reinterpret_cast(gpc_execute_dispatcher)); retptrs = new unsigned int volatile *[nproc]; ARMCI_Malloc(reinterpret_cast(const_cast(retptrs)), sizeof(unsigned int) * maxRets); int nid = GA_Cluster_nodeid(); int nodenproc = GA_Cluster_nprocs(nid); for (int i = 0; i < maxRets; i++) retptrs[me][i] = incomplete; for (int i = 0; i < nodenproc; i++) if (me == GA_Cluster_procid(nid, i)) { nodeme = i; break; } try { std::ostringstream ostr; std::string qname; if (nodeme == 0) { for (int i = 0; i < nodenproc; i++) { int rpid = GA_Cluster_procid(nid, i); ostr << msgq_name << rpid; qname = ostr.str(); message_queue::remove(qname.c_str()); message_queue *nqueue = new message_queue(create_only, qname.c_str(), msgqMaxNumMsgs, msgqMaxMsgSz); QueueData qdata; qdata.queue = nqueue; qdata.qname = qname; qdata.mname = qname + "_mutex"; named_mutex::remove(qdata.mname.c_str()); qdata.mutex = new named_mutex(create_only, qdata.mname.c_str()); msgqs.push_back(qdata); ostr.str(""); pmap[rpid] = i; } msgq = msgqs.at(0).queue; MPI_Barrier(pcomm); } else { MPI_Barrier(pcomm); for (int i = 0; i < nodenproc; i++) { int rpid = GA_Cluster_procid(nid, i); ostr << msgq_name << rpid; qname = ostr.str(); message_queue *nqueue = new message_queue(open_only, qname.c_str()); QueueData qdata; qdata.queue = nqueue; qdata.qname = qname; qdata.mname = qname + "_mutex"; qdata.mutex = new named_mutex(open_only, qdata.mname.c_str()); msgqs.push_back(qdata); if (rpid == me) msgq = nqueue; ostr.str(""); pmap[rpid] = i; } } } catch (const MsgqException &excp) { std::cerr << __LINE__ << " " << excp.what() << std::endl; exit(EXIT_FAILURE); } catch(interprocess_exception &ex){ std::cerr << ex.what() << ": " << __LINE__ << std::endl; exit(EXIT_FAILURE); } msgLenOff = 1; msgDatOff = nproc + 1; listen = 1U; currRetPos = 0U; pbcnt = 0U; execnt = 0U; msgscnt = 0U; msgrcnt = 0U; MPI_Barrier(pcomm); return 1; } // GFInitialize void GFFinalize() { int retc; std::ostringstream ostr; std::string fname; ostr << "comms.dat." << me; fname = ostr.str(); std::ofstream ofs(fname.c_str()); for (ProcList::const_iterator iter = procList.begin(); iter != procList.end(); iter++) ofs << iter->target << ", " << iter->g_a << ", " << iter->tid << std::endl; ofs.close(); MPI_Barrier(pcomm); try { for (FuncArray::iterator iter = funcArray.begin(); iter != funcArray.end(); iter++) { RemoteFunction *func = *iter; if (func) func->finalizeThreads(); } listen = 0U; assert(tsched); delete tsched; for (NodeQueues::iterator iter = msgqs.begin(); iter != msgqs.end(); iter++) { message_queue *q = iter->queue; named_mutex *m = iter->mutex; assert(q); delete q; assert(m); delete m; if (nodeme == 0) { message_queue::remove(iter->qname.c_str()); named_mutex::remove(iter->mname.c_str()); } iter->queue = NULL; iter->mutex = NULL; } } catch (const MsgqException &excp) { std::cerr << __LINE__ << " " << excp.what() << std::endl; exit(EXIT_FAILURE); } MPI_Barrier(pcomm); for (FuncArray::iterator iter = funcArray.begin(); iter != funcArray.end(); iter++) { RemoteFunction *func = *iter; if (func) delete func; } ARMCI_Free(const_cast(retptrs[me])); delete [] retptrs; MPI_Barrier(pcomm); MPI_Comm_free(&pcomm); } // GFFinalize GFHandle GFRegister(RemoteFuncProto func, const size_t argSz, const size_t retSz) { if (argSz > msgqMaxMsgSz) { std::cerr << "GFRegister: Argument size exceeds maximum allowed!, argSz: " << argSz << ", max. allowed: " << msgqMaxMsgSz << std::endl; exit(EXIT_FAILURE); } RemoteFunction *ptr = new RemoteFunction(func, argSz, retSz); funcArray.push_back(ptr); // Elements are owned by the array now MPI_Barrier(pcomm); return funcArray.size() - 1; } // GFRegister void send_gpc(GFHandle hndl, int g_a, int ndims, int lo[], int hi[], void *arg, bool enqueue) { try { int *plo, *phi; void *parg; int np; int hgpc; RemoteFunction *ptr = funcArray.at(hndl); int *map = new int[2 * ndims * nproc]; int *procs = new int[nproc]; size_t tlen = sizeof(GPCArgsExec) + sizeof(lo[0]) * ndims + sizeof(hi[0]) * ndims + ptr->getArgSz(); char *sndBuf = new char[tlen]; GPCArgsExec *gpcArgs = reinterpret_cast(sndBuf); bool direct; if (enqueue) hgpc = hgpced; else hgpc = hgpcxd; plo = reinterpret_cast(gpcArgs->dat); phi = plo + ndims; parg = phi + ndims; gpcArgs->g_a = g_a; gpcArgs->ndims = ndims; gpcArgs->src = me; direct = (task::self().parent() == NULL); memcpy(plo, lo, sizeof(lo[0]) * ndims); memcpy(phi, hi, sizeof(hi[0]) * ndims); memcpy(parg, arg, ptr->getArgSz()); np = GF_Locate_region(g_a, lo, hi, map, procs); unsigned int *rdata = new unsigned int[np]; for (int i = 0; i < np; i++) { GAMutex::scoped_lock glock; RetMutex::scoped_lock rlock; unsigned int retPos; unsigned int retDat; rlock.acquire(currRetLock); // Lock position counter retPos = currRetPos++; if (currRetPos == maxRets) currRetPos = 0U; rlock.release(); // Unlock position counter if (retptrs[me][retPos] == complete) { std::cerr << "Error executing GPC for process: " << i << ", from process: " << me << ", too many concurrent GPCs ?" << std::endl; std::cerr << "directActivity.size(): " << directActivity.size() << std::endl; exit(EXIT_FAILURE); } gpcArgs->offs = retPos; // Address to indicate completion rdata[i] = retPos; { DirectMap::accessor a; directActivity.insert(a, retPos); a->second = direct; } glock.acquire(inGA); ARMCI_Gpc_exec(hgpc, procs[i], &hndl, sizeof(hndl), gpcArgs, tlen, NULL, 0, &retDat, sizeof(retDat), NULL); glock.release(); } delete [] rdata; delete [] map; delete [] procs; delete [] sndBuf; } catch (const std::out_of_range &excp) { std::cerr << "Proc: " << me << ", function not registered: " << hndl << ", line:" << __LINE__ << ", " << excp.what() << std::endl; std::cerr << "funcArray.size(): " << funcArray.size() << std::endl; exit(EXIT_FAILURE); } } // send_gpc void GFEnqueue(GFHandle hndl, int g_a, int ndims, int lo[], int hi[], void *arg) { send_gpc(hndl, g_a, ndims, lo, hi, arg, true); } // GFEnqueue void GFExecute(GFHandle hndl, int g_a, int ndims, int lo[], int hi[], void *arg) { send_gpc(hndl, g_a, ndims, lo, hi, arg, false); } // GFExecute int GFMaxConcurrency() { return maxRets; } // GFMaxConcurrency void GFQuiesce(GFHandle hndl) { try { if (task::self().parent() != NULL) throw GFutException("GFQuiesce() must be called only from the main process!"); bool allquiet; // Now wait for all activities spawned on other processes to complete do { allquiet = true; for (DirectMap::const_iterator iter = directActivity.begin(); iter != directActivity.end(); iter++) { unsigned int pos = iter->first; if (iter->second && retptrs[me][pos] != complete) allquiet = false; } } while(!allquiet); // All directly spawned activities are quiesced for this process for (DirectMap::iterator iter = directActivity.begin(); iter != directActivity.end(); iter++) { unsigned int pos = iter->first; if (iter->second) { assert(retptrs[me][pos] == complete); retptrs[me][pos] = incomplete; directActivity.erase(pos); } } } catch (const std::out_of_range &excp) { std::cerr << "Function not registered: " << __LINE__ << excp.what() << std::endl; exit(EXIT_FAILURE); } catch (const GFutException &excp) { std::cerr << excp.what() << std::endl; exit(EXIT_FAILURE); } } // GFQuiesce void GFAllQuiesce(GFHandle hndl) { try { if (task::self().parent() != NULL) throw GFutException("GFQuiesce() must be called only from the main process!"); RemoteFunction *ptr = funcArray.at(hndl); int compcnt; int totcnt; int passcnt = 0; int maxRefCnt = 0; #if 0 tbb::tick_count t0, t1; double taccum = 0.0, caccum = 0.0, waccum = 0.0, raccum = 0.0; #endif // Now wait for all activities spawned locally & on other processes to complete #if 0 t0 = tbb::tick_count::now(); #endif do { compcnt = 0; totcnt = 0; #if 0 tbb::tick_count t2, t3; t2 = tbb::tick_count::now(); #endif for (DirectMap::const_iterator iter = directActivity.begin(); iter != directActivity.end(); iter++) { unsigned int pos = iter->first; if (/* iter->second && */ retptrs[me][pos] != complete) compcnt++; } msgq_listener(); #if 0 t3 = tbb::tick_count::now(); caccum += (t3 - t2).seconds(); #endif task *parentTask = ptr->getParentTask(); int refCnt = -1; if (!parentTask) goto reduction; #if 0 t2 = tbb::tick_count::now(); #endif refCnt = parentTask->ref_count(); if (refCnt > maxRefCnt) maxRefCnt = refCnt; if (refCnt > 0) { ptr->lockParent(); parentTask->wait_for_all(); parentTask->destroy(*parentTask); parentTask = new (task::allocate_root()) empty_task; parentTask->set_ref_count(1); ptr->setParentTask(parentTask); ptr->unlockParent(); } #if 0 t3 = tbb::tick_count::now(); waccum += (t3 - t2).seconds(); #endif reduction: #if 0 if (passcnt % 1000000 == 0 && me == 0) { std::cout << "Proc: " << me << ", passcnt: " << passcnt << ", refCnt: " << refCnt << ", compcnt: " << compcnt << std::flush << std::endl; print_debug_info(); std::cout << "Proc: " << me << ", directActivity.size(): " << directActivity.size() << std::flush << std::endl; } #endif #if 0 t2 = tbb::tick_count::now(); #endif MPI_Allreduce(&compcnt, &totcnt, 1, MPI_INT, MPI_SUM, pcomm); #if 0 t3 = tbb::tick_count::now(); raccum += (t3 - t2).seconds(); #endif passcnt++; } while (totcnt > 0 /* && passcnt < maxCnt */); #if 0 t1 = tbb::tick_count::now(); taccum += (t1 - t0).seconds(); #endif MPI_Barrier(pcomm); #if 0 if (me == 0) { for (int i = 0; i < directActivity.size(); i++) std::cout << "Proc: " << me << ", retptrs[" << me << "][" << i << "]: " << (void *)&retptrs[me][i] << std::flush << std::endl; std::cout << "Proc: " << me << ", final passcnt: " << passcnt << ", maxRefCnt: " << maxRefCnt << ", compcnt: " << compcnt << ", totcnt: " << totcnt << std::flush << std::endl; print_debug_info(); std::cout << "Proc: " << me << ", final directActivity.size(): " << directActivity.size() << std::flush << std::endl; } #endif #if 0 std::cout << "Proc: " << me << ", time spent checking: " << std::fixed << taccum << ", passcnt: " << passcnt << std::endl; std::cout << "Proc: " << me << ", time spent in loop: " << caccum << ", time spent waiting for tasks: " << waccum << ", time spent in reduction: " << raccum << std::flush << std::endl; #endif // All spawned activities are quiesced for (DirectMap::iterator iter = directActivity.begin(); iter != directActivity.end(); iter++) { unsigned int pos = iter->first; if (retptrs[me][pos] != complete) { std::cerr << "Proc: " << me << ", activity: " << pos << ", should be complete!" << std::flush << std::endl; std::cerr << "Proc: " << me << ", pos: " << pos << ", retptrs: " << retptrs[me][pos] << ", direct: " << iter->second << std::flush << std::endl; } retptrs[me][pos] = incomplete; } directActivity.clear(); // All indirectly spawned activities are quiesced at this point // Safe to call GA without lock MPI_Barrier(pcomm); } catch (const std::out_of_range &excp) { std::cerr << "Function not registered: " << __LINE__ << excp.what() << std::endl; exit(EXIT_FAILURE); } } // GFAllQuiesce void GFAllQuiesce() { for (GFHandle hndl = 0U; hndl < funcArray.size(); hndl++) GFAllQuiesce(hndl); } // GFAllQuiesce void GF_Access(int g_a, int lo[], int hi[], void *ptr, int ld[]) { GAMutex::scoped_lock lock; lock.acquire(inGA); ::NGA_Access(g_a, lo, hi, ptr, ld); lock.release(); } // GF_Access void GF_Release(int g_a, int lo[], int hi[]) { GAMutex::scoped_lock lock; lock.acquire(inGA); ::NGA_Release(g_a, lo, hi); lock.release(); } // GF_Release void GF_Get(int g_a, int lo[], int hi[], void *buf, int ld[]) { GAMutex::scoped_lock lock; int ndims = GF_Ndim(g_a); int *map = new int[2 * ndims * nproc]; int *procs = new int[nproc]; lock.acquire(inGA); int np = ::NGA_Locate_region(g_a, lo, hi, map, procs); for (int i = 0; i < np; i++) { CommInfo cinfo; cinfo.target = procs[i]; cinfo.g_a = g_a; cinfo.tid = this_tbb_thread::get_id(); procList.push_back(cinfo); } ::NGA_Get(g_a, lo, hi, buf, ld); lock.release(); delete [] procs; delete [] map; } // GF_Get int GF_Locate_region(int g_a, int lo[], int hi[], int map[], int procs[]) { GAMutex::scoped_lock lock; lock.acquire(inGA); int np = ::NGA_Locate_region(g_a, lo, hi, map, procs); lock.release(); return np; } // GF_Locate_region void GF_Distribution(int g_a, int iproc, int lo[], int hi[]) { GAMutex::scoped_lock lock; lock.acquire(inGA); ::NGA_Distribution(g_a, iproc, lo, hi); lock.release(); } // GF_Distribution void GF_Acc(int g_a, int lo[], int hi[], void *buf, int ld[], void *alpha) { GAMutex::scoped_lock lock; int ndims = GF_Ndim(g_a); int *map = new int[2 * ndims * nproc]; int *procs = new int[nproc]; lock.acquire(inGA); int np = ::NGA_Locate_region(g_a, lo, hi, map, procs); for (int i = 0; i < np; i++) { CommInfo cinfo; cinfo.target = procs[i]; cinfo.g_a = g_a; cinfo.tid = this_tbb_thread::get_id(); procList.push_back(cinfo); } ::NGA_Acc(g_a, lo, hi, buf, ld, alpha); lock.release(); delete [] procs; delete [] map; } // GFAcc void GF_NbAcc(int g_a, int lo[], int hi[], void *buf, int ld[], void *alpha, ga_nbhdl_t *nbhandle) { GAMutex::scoped_lock lock; int ndims = GF_Ndim(g_a); int *map = new int[2 * ndims * nproc]; int *procs = new int[nproc]; lock.acquire(inGA); int np = ::NGA_Locate_region(g_a, lo, hi, map, procs); for (int i = 0; i < np; i++) { CommInfo cinfo; cinfo.target = procs[i]; cinfo.g_a = g_a; cinfo.tid = this_tbb_thread::get_id(); procList.push_back(cinfo); } ::NGA_NbAcc(g_a, lo, hi, buf, ld, alpha, nbhandle); lock.release(); delete [] procs; delete [] map; } // GF_NbAcc void GF_NbGet(int g_a, int lo[], int hi[], void *buf, int ld[], ga_nbhdl_t *nbhandle) { GAMutex::scoped_lock lock; int ndims = GF_Ndim(g_a); int *map = new int[2 * ndims * nproc]; int *procs = new int[nproc]; lock.acquire(inGA); int np = ::NGA_Locate_region(g_a, lo, hi, map, procs); for (int i = 0; i < np; i++) { CommInfo cinfo; cinfo.target = procs[i]; cinfo.g_a = g_a; cinfo.tid = this_tbb_thread::get_id(); procList.push_back(cinfo); } ::NGA_NbGet(g_a, lo, hi, buf, ld, nbhandle); lock.release(); delete [] procs; delete [] map; } // GF_NbGet void GF_NbPut(int g_a, int lo[], int hi[], void *buf, int ld[], ga_nbhdl_t *nbhandle) { GAMutex::scoped_lock lock; int ndims = GF_Ndim(g_a); int *map = new int[2 * ndims * nproc]; int *procs = new int[nproc]; lock.acquire(inGA); int np = ::NGA_Locate_region(g_a, lo, hi, map, procs); for (int i = 0; i < np; i++) { CommInfo cinfo; cinfo.target = procs[i]; cinfo.g_a = g_a; cinfo.tid = this_tbb_thread::get_id(); procList.push_back(cinfo); } ::NGA_NbPut(g_a, lo, hi, buf, ld, nbhandle); lock.release(); delete [] procs; delete [] map; } // GF_NbPut void GF_NbWait(ga_nbhdl_t *nbhandle) { GAMutex::scoped_lock lock; lock.acquire(inGA); ::NGA_NbWait(nbhandle); lock.release(); } // GF_NbWait int GF_Ndim(int g_a) { GAMutex::scoped_lock lock; lock.acquire(inGA); int ret = ::GA_Ndim(g_a); lock.release(); return ret; } // GF_Ndim int GF_Cluster_nodeid() { GAMutex::scoped_lock lock; lock.acquire(inGA); int ret = ::GA_Cluster_nodeid(); lock.release(); return ret; } // GF_Cluster_nodeid int GF_Cluster_proc_nodeid(int proc) { GAMutex::scoped_lock lock; lock.acquire(inGA); int ret = ::GA_Cluster_proc_nodeid(proc); lock.release(); return ret; } // GF_Cluster_proc_nodeid void GF_Inquire(int g_a, int *type, int *ndim, int dims[]) { GAMutex::scoped_lock lock; lock.acquire(inGA); ::NGA_Inquire(g_a, type, ndim, dims); lock.release(); } // GF_Inquire // Internal member functions RemoteFunction::~RemoteFunction() { } // ~RemoteFunction void RemoteFunction::execute(void *buf, size_t bufSz) { // Very careful allocation char *rbuf = new char[bufSz + sizeof(ExecutorArgs) - sizeof(GPCArgsExec)]; // Will be deleted as the user or library checks for completion ExecutorArgs *rargs = reinterpret_cast(rbuf); rargs->func = func; memcpy(&rargs->gpcArgs, buf, bufSz); if (!tsched->is_active()) tsched->initialize(nthreads); if (!parentTask) { lockParent(); if (!parentTask) { parentTask = new (task::allocate_root()) empty_task; parentTask->set_ref_count(1); } unlockParent(); } GFutTask *rec = new (parentTask->allocate_child()) GFutTask(rbuf); parentTask->increment_ref_count(); pbcnt++; #if 1 task::enqueue(*rec); #else parentTask->spawn(*rec); #endif } // execute void RemoteFunction::finalizeThreads(const bool terminate) { if (!parentTask) return; if (parentTask->ref_count() > 0) parentTask->wait_for_all(); // Wait for all child tasks to finish parentTask->destroy(*parentTask); parentTask = NULL; } // finalizeThreads // Static function definitions int gpc_enqueue_dispatcher(int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, int *rhsize, void *rdata, int rdlen, int *rdsize, int rtype) { try { gfutmsglen msglen; char *alc = new char[sizeof(gfutmsgsnd) + hlen + dlen]; gfutmsgsnd *msgbuf = reinterpret_cast(alc); msglen.len = hlen + dlen; memcpy(msgbuf->dat, hdr, hlen); memcpy(msgbuf->dat + hlen, data, dlen); ProcIdMap::const_iterator iter = pmap.find(to); if (iter == pmap.end()) throw std::out_of_range("key not found in pmap!"); QueueData &qdata = msgqs.at(iter->second); message_queue *mqueue = qdata.queue; assert(mqueue); scoped_lock lock(*qdata.mutex); bool ret = mqueue->try_send(&msglen, sizeof(msglen), to); if (!ret) throw GFutException("Message queue is full for process!"); ret = mqueue->try_send(msgbuf, hlen + dlen, to); if (!ret) throw GFutException("Message queue is full for process!"); lock.unlock(); msgscnt++; delete [] alc; } catch (const MsgqException &excp) { std::cerr << __LINE__ << " " << excp.what() << std::endl; exit(EXIT_FAILURE); } catch (const GFutException &excp) { std::cerr << excp.what() << std::endl; exit(EXIT_FAILURE); } catch(interprocess_exception &ex){ std::cerr << ex.what() << ": " << __LINE__ << std::endl; exit(EXIT_FAILURE); } catch (const std::out_of_range &excp) { std::cerr << excp.what() << ": " << __LINE__ << std::endl; std::cerr << "Proc: " << me << ", to: " << to << ", pmap[to]: " << pmap[to] << std::endl; std::cerr << "Proc: " << me << ", msgqs.size(): " << msgqs.size() << std::endl; exit(EXIT_FAILURE); } return GPC_DONE; } // gpc_enqueue_dispatcher int gpc_execute_dispatcher(int to, int from, void *hdr, int hlen, void *data, int dlen, void *rhdr, int rhlen, int *rhsize, void *rdata, int rdlen, int *rdsize, int rtype) { try { GFHandle hndl; hndl = *(reinterpret_cast(hdr)); RemoteFunction *func = funcArray.at(hndl); func->execute(data, dlen); } catch (const std::out_of_range &excp) { std::cerr << excp.what() << ": " << __LINE__ << std::endl; exit(EXIT_FAILURE); } return GPC_DONE; } // gpc_execute_dispatcher void msgq_listener() { unsigned int cont_listen; int cnt = 0; do { try { process_execmsg(); cont_listen = listen; cnt++; } catch (const MsgqException &excp) { std::cerr << __LINE__ << " " << excp.what() << std::endl; exit(EXIT_FAILURE); } catch (const std::out_of_range &excp) { std::cerr << "Function not registered: " << __LINE__ << excp.what() << std::endl; exit(EXIT_FAILURE); } catch(interprocess_exception &ex){ std::cerr << ex.what() << ": " << __LINE__ << std::endl; std::cerr << ex.get_native_error() << ", " << ex.get_error_code(); std::cerr << ", " << size_error << std::endl; exit(EXIT_FAILURE); } } while ((msgq->get_num_msg() > 0) /* && (cnt < maxCnt) */); } // msgq_listener void GFutTask::msgq_executor(void *arg) { ExecutorArgs *earg; int *lo, *hi; void *rarg; earg = reinterpret_cast(arg); lo = reinterpret_cast(earg->gpcArgs.dat); hi = lo + earg->gpcArgs.ndims; rarg = hi + earg->gpcArgs.ndims; earg->func(earg->gpcArgs.g_a, earg->gpcArgs.ndims, lo, hi, rarg); put_value_long(complete, earg->gpcArgs.offs, earg->gpcArgs.src); execnt++; } // msgq_executor void wait_remote(GFHandle hndl, int np, int procs[], unsigned int rdata[]) { bool *status = new bool[np]; bool flag; int cnt = 0; for (int i = 0; i < np; i++) status[i] = false; do { flag = true; for (int i = 0; i < np; i++) { int pos = rdata[i]; if (!status[i]) status[i] = (retptrs[me][pos] == complete); this_tbb_thread::yield(); flag = (flag && status[i]); } cnt++; } while (!flag && cnt < maxCnt); delete [] status; if (cnt >= maxCnt) throw GFutException("wait_remote() exceeded iteration count, response did not arrive"); } // wait_remote void process_execmsg() { gfutmsglen msglen; size_t rsz = 0U; unsigned int prio = 0U; bool ret = msgq->try_receive(&msglen, msgqMaxMsgSz, rsz, prio); if (ret) { assert(rsz == sizeof(msglen)); char *alc = new char[sizeof(gfutmsgsnd) + msglen.len]; // Length of function type is // included in the overall message length gfutmsgrcv *msgbuf = reinterpret_cast(alc); bool oret; do { oret = msgq->try_receive(msgbuf, msgqMaxMsgSz, rsz, prio); } while (!oret); assert(rsz == msglen.len); msgrcnt++; RemoteFunction *func = funcArray.at(msgbuf->func); func->execute(&msgbuf->gpcArgs, rsz - sizeof(msgbuf->func)); delete [] alc; } } // process_execmsg int put_value_long(unsigned int val, int offs, int target) { GAMutex::scoped_lock lock; int ret = 0; lock.acquire(inGA); ret = ARMCI_PutValueInt(val, const_cast(&retptrs[target][offs]), target); ARMCI_Fence(target); lock.release(); return ret; } // put_value_long void print_debug_info() { std::cout << "pbcnt: " << pbcnt << ", execnt: " << execnt << std::flush << std::endl; std::cout << "msgscnt: " << msgscnt << ", msgrcnt: " << msgrcnt << std::endl; std::cout << "number of messages in queue: " << msgq->get_num_msg() << std::endl; std::cout << "listen: " << listen << std::flush << std::endl; } // print_debug_info } ga-5-3/gfutex/src/gf_cache_internal.h0000640005473000001440000001406311704074222016454 0ustar d3n000users#ifndef __GF_CACHE_INTERNAL_H #define __GF_CACHE_INTERNAL_H #include #include #include #include #include #include "gfutex.h" namespace globalFutures { extern std::ofstream ofs; } namespace globalFutures_implementation { using namespace tbb; using namespace globalFutures; class GASliceKey { protected: int g_a; int *lo; int *hi; int *ld; public: GASliceKey() : g_a(0), lo(NULL), hi(NULL), ld(NULL) { }; GASliceKey(const int og_a, const int *olo, const int *ohi, const int *old); GASliceKey(const GASliceKey &othis); ~GASliceKey(); int get_g_a() const { return g_a; }; int *get_lo() const { return lo; }; int *get_hi() const { return hi; }; int *get_ld() const { return ld; }; friend class GASliceKeyCompare; }; class GASliceCache { protected: char *data; size_t sz; public: GASliceCache() : data(NULL), sz(0U) { }; GASliceCache(const GASliceCache &othis); ~GASliceCache(); char *&getData() { return data; }; char *getData() const { return data; }; size_t getSize() const { return sz; }; size_t &getSize() { return sz; }; }; class GASliceKeyCompare { public: GASliceKeyCompare() { }; GASliceKeyCompare(const GASliceKeyCompare &othis) { }; ~GASliceKeyCompare() { }; bool equal(const GASliceKey &k, const GASliceKey &j) const; size_t hash(const GASliceKey &k) const; }; class GASliceNBInfo { protected: int g_a; int *lo; int *hi; void *buf; int *ld; bool local; bool incache; public: GASliceNBInfo() : g_a(0), lo(NULL), hi(NULL), buf(NULL), ld(NULL), local(false), incache(false) { }; GASliceNBInfo(int og_a, int *olo, int *ohi, void *obuf, int *old, bool olocal, bool oincache); GASliceNBInfo(const GASliceNBInfo &othis) : g_a(0), lo(NULL), hi(NULL), buf(NULL), ld(NULL), local(false), incache(false) { *this = othis; }; ~GASliceNBInfo(); GASliceNBInfo &operator = (const GASliceNBInfo &othis); int get_g_a() const { return g_a; }; int *get_lo() const { return lo; }; int *get_hi() const { return hi; }; void *get_buf() const { return buf; }; int *get_ld() const { return ld; }; bool get_local() const { return local; }; bool get_incache() const { return incache; }; }; typedef concurrent_hash_map GAInstanceCacheMap; struct GAInstanceCache { GAInstanceCacheMap cmap; GAInstanceCache() { }; GAInstanceCache(const GAInstanceCache &othis) : cmap(othis.cmap) { }; }; struct GAInstanceStats { unsigned int hits; unsigned int misses; GAInstanceStats() : hits(0U), misses(0U) { }; }; typedef concurrent_hash_map GACache; typedef concurrent_hash_map GACacheNBOps; typedef concurrent_hash_map GACacheStats; inline GASliceKey::GASliceKey(const int og_a, const int *olo, const int *ohi, const int *old) : g_a(og_a) { int ndim = GF_Ndim(g_a); lo = new int[ndim]; hi = new int[ndim]; ld = new int[ndim - 1]; for (int i = 0; i < ndim; i++) { lo[i] = olo[i]; hi[i] = ohi[i]; } for (int i = 0; i < ndim - 1; i++) ld[i] = old[i]; } // GASliceKey inline GASliceKey::GASliceKey(const GASliceKey &othis) : g_a(othis.g_a) { int ndim = GF_Ndim(g_a); lo = new int[ndim]; hi = new int[ndim]; ld = new int[ndim - 1]; for (int i = 0; i < ndim; i++) { lo[i] = othis.lo[i]; hi[i] = othis.hi[i]; } for (int i = 0; i < ndim - 1; i++) ld[i] = othis.ld[i]; } // GASliceKey inline GASliceKey::~GASliceKey() { if (lo) delete [] lo; if (hi) delete [] hi; if (ld) delete [] ld; } // ~GASliceKey inline GASliceCache::GASliceCache(const GASliceCache &othis) : data(NULL), sz(othis.sz) { if (sz > 0) { data = new char[sz]; memcpy(data, othis.data, sz); } } // GASliceCache inline GASliceCache::~GASliceCache() { if (data) delete [] data; } // ~GASliceCache inline bool GASliceKeyCompare::equal(const GASliceKey &k, const GASliceKey &j) const { if (k.g_a != j.g_a) return false; int ndim = GF_Ndim(k.g_a); for (int i = 0; i < ndim; i++) { if (k.lo[i] != j.lo[i]) return false; if (k.hi[i] != j.hi[i]) return false; } return true; } // equal inline size_t GASliceKeyCompare::hash(const GASliceKey &k) const { int ndim = GF_Ndim(k.g_a); size_t curr = tbb_hasher(k.g_a); for (int i = 0; i < ndim; i++) curr ^= (tbb_hasher(k.lo[i]) ^ tbb_hasher(k.hi[i])); return curr; } // hash inline GASliceNBInfo::GASliceNBInfo(int og_a, int *olo, int *ohi, void *obuf, int *old, bool olocal, bool oincache) : g_a(og_a), buf(obuf), local(olocal), incache(oincache) { assert(NGA_Valid_handle(g_a)); int ndim = GF_Ndim(g_a); lo = new int[ndim]; hi = new int[ndim]; ld = new int[ndim - 1]; for (int i = 0; i < ndim; i++) { lo[i] = olo[i]; hi[i] = ohi[i]; } for (int i = 0; i < ndim - 1; i++) ld[i] = old[i]; } // GASliceNBInfo inline GASliceNBInfo::~GASliceNBInfo() { if (lo) delete [] lo; if (hi) delete [] hi; if (ld) delete [] ld; } // ~GASliceNBInfo inline GASliceNBInfo &GASliceNBInfo::operator = (const GASliceNBInfo &othis) { g_a = othis.g_a; buf = othis.buf; local = othis.local; incache = othis.incache; if (lo) delete [] lo; if (hi) delete [] hi; if (ld) delete ld; lo = NULL; hi = NULL; ld = NULL; if (NGA_Valid_handle(g_a)) { int ndim = GF_Ndim(g_a); lo = new int[ndim]; hi = new int[ndim]; ld = new int[ndim - 1]; for (int i = 0; i < ndim; i++) { lo[i] = othis.lo[i]; hi[i] = othis.hi[i]; } for (int i = 0; i < ndim - 1; i++) ld[i] = othis.ld[i]; } return *this; } // operator = } #endif // __GF_CACHE_INTERNAL_H ga-5-3/gfutex/src/micro_gf.C0000640005473000001440000000376011704074222014563 0ustar d3n000users#include #include #include #include #include #include #include #include #include "gfutex.h" using namespace globalFutures; static void GFTest(int g_a, int ndims, int lo[], int hi[], void *arg); static const int numTimes = 20000; static int g_proc; static GFHandle gfhndl; struct gftestarg { }; int main(int argc, char *argv[]) { int me, nproc; double t0, t1, t2, t3; MPI_Init(&argc, &argv); GA_Initialize(); GFInitialize(); me = GA_Nodeid(); nproc = GA_Nnodes(); if (me == 0) { std::cout << "Number of procs: " << nproc << std::endl; std::cout << "Number of nodes: " << GA_Cluster_nnodes() << std::endl; } MPI_Barrier(MPI_COMM_WORLD); int dims[] = { nproc }; int lo[] = { nproc - 1 }, hi[] = { nproc - 1 }; g_proc = NGA_Create(MT_INT, 1, dims, "procs", NULL); GA_Print_distribution(g_proc); gfhndl = GFRegister(GFTest, sizeof(gftestarg)); gftestarg gfa; t0 = MPI_Wtime(); if (me == 0) for (int i = 0; i < numTimes; i++) GFEnqueue(gfhndl, g_proc, 1, lo, hi, &gfa); t1 = MPI_Wtime(); MPI_Barrier(MPI_COMM_WORLD); t2 = MPI_Wtime(); GFAllQuiesce(gfhndl); t3 = MPI_Wtime(); std::cout << "Proc: " << me << ", enqueue exec. time: " << t1 - t0 << ", quiesce time: " << t3 - t2 << std::flush << std::endl; MPI_Barrier(MPI_COMM_WORLD); t0 = MPI_Wtime(); if (me == 0) for (int i = 0; i < numTimes; i++) GFExecute(gfhndl, g_proc, 1, lo, hi, &gfa); t1 = MPI_Wtime(); MPI_Barrier(MPI_COMM_WORLD); t2 = MPI_Wtime(); GFAllQuiesce(gfhndl); t3 = MPI_Wtime(); std::cout << "Proc: " << me << ", execute exec. time: " << t1 - t0 << ", quiesce time: " << t3 - t2 << std::flush << std::endl; MPI_Barrier(MPI_COMM_WORLD); GA_Destroy(g_proc); GFFinalize(); GA_Terminate(); MPI_Finalize(); return 0; } // main void GFTest(int g_a, int ndims, int lo[], int hi[], void *arg) { gftestarg *gfa = static_cast(arg); } // GFTest ga-5-3/gfutex/src/gfutex_internal.h0000640005473000001440000000653411704074222016243 0ustar d3n000users#ifndef __GFUTEX_INTERNAL_H #define __GFUTEX_INTERNAL_H #include #include #include #include #include #include #include #include #include using namespace tbb; using namespace boost::interprocess; namespace globalFutures_implementation { extern int nproc, me; extern int nodeme; } namespace globalFutures { struct GPCArgsExec { int g_a; int ndims; int src; int offs; // Remote location to indicate completion of the execution char dat[]; }; struct gfutmsglen { int len; }; struct gfutmsgsnd { char dat[]; }; struct gfutmsgrcv { GFHandle func; // Coming from GPC header GPCArgsExec gpcArgs; // Embedded structure with the rest of the data }; struct ExecutorArgs { RemoteFuncProto func; int shep; GPCArgsExec gpcArgs; }; class MsgqException : public std::exception { private: int errnum; public: MsgqException(int oerrnum) : errnum(oerrnum) { } virtual const char *what() const throw() { return strerror(errnum); } }; class GFutException : public std::exception { private: const std::string str; public: GFutException(const std::string ostr) : str(ostr) { } virtual ~GFutException() throw() { } virtual const char *what() const throw() { return str.c_str(); } }; class RemoteFunction { public: RemoteFunction(RemoteFuncProto ofunc, const size_t oargSz, const size_t oretSz = 0U) : argSz(oargSz), retSz(oretSz), parentTask(NULL), func(ofunc) { } virtual ~RemoteFunction(); virtual void execute(void *buf, size_t bufSz); void finalizeThreads(const bool terminate = true); size_t getArgSz() const { return argSz; } size_t getRetSz() const { return retSz; } RemoteFuncProto getRealFunc() { return func; } task *getParentTask() const { return parentTask; } void setParentTask(task *oParentTask) { parentTask = oParentTask; } void lockParent() { rlock.acquire(mutex); } void unlockParent() { rlock.release(); } protected: typedef queuing_mutex ParentMutex; const size_t argSz; const size_t retSz; task *parentTask; RemoteFuncProto func; ParentMutex mutex; ParentMutex::scoped_lock rlock; }; struct QueueData { message_queue *queue; std::string qname; named_mutex *mutex; std::string mname; QueueData() : queue(NULL), mutex(NULL) { }; QueueData(const QueueData &othis) : queue(othis.queue), qname(othis.qname), mutex(othis.mutex), mname(othis.mname) { }; ~QueueData() { }; }; typedef std::vector FuncArray; typedef queuing_mutex GAMutex; typedef queuing_mutex RetMutex; typedef concurrent_hash_map DirectMap; typedef std::map ProcIdMap; typedef std::vector NodeQueues; struct GFutTask : public task { private: void *rarg; static void msgq_executor(void *arg); public: GFutTask() : rarg(NULL) { } GFutTask(void *orarg) : rarg(orarg) { } explicit GFutTask(const GFutTask &othis) : rarg(othis.rarg) { } ~GFutTask() { if (rarg) delete rarg; } task *execute() { msgq_executor(rarg); return NULL; }; }; } #endif // __GFUTEX_INTERNAL_H ga-5-3/gfutex/aclocal.m40000640005473000001440000011454512247166641013761 0ustar d3n000users# generated automatically by aclocal 1.11.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, # 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless `enable' is passed literally. # For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2009, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few `make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using `$V' instead of `$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../m4/ax_boost_base.m4]) m4_include([../m4/ga.m4]) m4_include([../m4/ga_ar.m4]) m4_include([../m4/ga_arg_parse.m4]) m4_include([../m4/ga_boost.m4]) m4_include([../m4/ga_check_header.m4]) m4_include([../m4/ga_check_package.m4]) m4_include([../m4/ga_cross_compiling.m4]) m4_include([../m4/ga_mpi_test_disable.m4]) m4_include([../m4/ga_mpi_unwrap.m4]) m4_include([../m4/ga_mpicc.m4]) m4_include([../m4/ga_mpicc_test.m4]) m4_include([../m4/ga_mpicxx.m4]) m4_include([../m4/ga_mpicxx_test.m4]) m4_include([../m4/ga_msg_comms.m4]) m4_include([../m4/ga_target.m4]) m4_include([../m4/ga_tbb.m4]) m4_include([../m4/ga_with_help.m4]) m4_include([m4/libtool.m4]) m4_include([m4/lt_obsolete.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) ga-5-3/gfutex/m4/0000750005473000001440000000000012275260562012424 5ustar d3n000usersga-5-3/gfutex/m4/ltoptions.m40000640005473000001440000003007311704074222014715 0ustar d3n000users# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) ga-5-3/gfutex/m4/ltversion.m40000640005473000001440000000126211704074222014705 0ustar d3n000users# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) ga-5-3/gfutex/m4/lt_obsolete.m40000640005473000001440000001375612247162412015210 0ustar d3n000users# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) ga-5-3/gfutex/m4/libtool.m40000640005473000001440000105721611704074222014337 0ustar d3n000users# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS ga-5-3/gfutex/m4/ltsugar.m40000640005473000001440000001042411704074222014341 0ustar d3n000users# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) ga-5-3/gfutex/examples/0000750005473000001440000000000012275260562013722 5ustar d3n000usersga-5-3/gfutex/examples/scf/0000750005473000001440000000000012275260563014476 5ustar d3n000usersga-5-3/gfutex/examples/scf/scf.h0000640005473000001440000000106211704074222015411 0ustar d3n000users#ifndef __SCF_H #define __SCF_H #ifdef __cplusplus extern "C" { #endif int next_4chunk(int *lo, int *hi, int *ilo, int *jlo, int *klo, int *llo, long int *pitask); void clean_chunk(double chunk[][ichunk]); void g(double *value, int i, int j, int k, int l); double contract_matrices(int g_a, int g_b); long int acquire_tasks(int numTasks); int translate_task(long int itask, int *lo, int *hi, int *ilo, int *jlo, int *klo, int *llo); int next_chunk(int *lo, int *hi); double h(int i, int j); #ifdef __cplusplus } #endif #endif /* __SCF_H */ ga-5-3/gfutex/examples/scf/cscc.h0000640005473000001440000000172611704074222015560 0ustar d3n000users#ifndef __CSCC_H #define __CSCC_H #include #ifdef __cplusplus extern "C" { #endif #define maxatom 384 #define maxnbfn 15 * maxatom #define mxiter 30 #define maxnnbfn maxnbfn * (maxnbfn + 1) / 2 #define pi 3.141592653589793 #define tol 0.006 #define tol2e 0.000001 //#define MAX(a,b) GA_MAX(a,b) //#define MIN(a,b) GA_MIN(a,b) #define MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define MIN(a,b) (((a) <= (b)) ? (a) : (b)) extern double enrep, q[maxatom], ax[maxatom], ay[maxatom], az[maxatom], x[maxnbfn], y[maxnbfn], z[maxnbfn], expnt[maxnbfn], rnorm[maxnbfn]; extern long long int iky[maxnbfn], nocc, nbfn, nnbfn; extern long long int icut1,icut2,icut3,icut4; extern int natom; //long long int --> long #define ichunk 40 extern double eigv[maxnbfn]; extern int g_counter, g_dens, g_fock, g_tfock, g_schwarz, g_work, g_ident, g_orbs; extern int g_tmp, g_proc; //temporay global array for storage major transformation #ifdef __cplusplus } #endif #endif /* __CSCC_H */ ga-5-3/gfutex/examples/scf/timer.h0000640005473000001440000000014111704074222015753 0ustar d3n000users#ifdef __cplusplus extern "C" { #endif extern double timer(void); #ifdef __cplusplus } #endif ga-5-3/gfutex/examples/scf/integ.c0000640005473000001440000000573111704074222015746 0ustar d3n000users#include #include "cscc.h" #include "ga.h" double fm[2001][5]; double rdelta, delta, delo2; double exprjh(double x) { //$Id: integ.F,v 1.1 2005-03-08 23:58:03 d3g293 Exp $ double ret; // dumb solution to underflow problems on sun if (x < -37.0) { ret = 0.0; } else { ret = exp(x); } return ret; } void setfm(void) { int i, ii; double t[2001]; double et[2001], rr, tt; int MAXm; delta = 0.014; delo2 = delta * 0.5; rdelta = 1.0 / delta; //MAXm = 4; MAXm = 3; //Fortran Array Index 1==> C Array Index 0==> for (i = 0; i < 2001; i++) { tt = delta * (double)i; //i-1 ---> i et[i] = exprjh(-tt); t[i] = tt * 2.0; fm[i][MAXm + 1] = 0.0; } for (i = 199; i > MAXm; i--) { rr = 1.0 / (double)(2 * i + 1); //+1 ---> +1 for (ii = 0; ii < 2001; ii++) { fm[ii][MAXm + 1] = (et[ii] + t[ii] * fm[ii][MAXm + 1]) * rr; } } for (i = MAXm; i >= 0; i--) { rr = 1.0 / (double) (2 * i + 1); //-1 ---> +1 for (ii = 0; ii < 2001; ii++) { fm[ii][i] = (et[ii] + t[ii] * fm[ii][i+1]) * rr; } } return; } void f0(double *value, double t) { const double fac0 = 0.88622692545276; const double rhalf = 0.5; const double rthird = (1.0 / 3.0); const double rquart = 0.25; double t0 = 28.0; //fortran: data --> C: long double or double? int n; double x; // computes f0 to a relative accuracy of better than 4.e-13 for all t. // uses 4th order taylor expansion on grid out to t=28.0 // asymptotic expansion accurate for t greater than 28 if (t >= t0) *value = fac0 / sqrt(t); else { n = (int) ((t + delo2) * rdelta); x = delta * (double) n - t; //n=n+1; //c index 0, fortran index 1 *value = fm[n][0] + x * (fm[n][1] + x * rhalf * (fm[n][2] + x * rthird * (fm[n][3] + x * rquart * fm[n][4]))); } return; } void addin(double *g, int *i, int *j, int *k, int *l, double *fock, double *dens, int *iky) //seems unused { static double g2, g4, gg; static int ij, ik, il, jk, jl, kl; static double aij, aik, ajk, ail, gil; gg = *g; g2 = gg + gg; g4 = g2 + g2; ik = iky[*i] + *k; il = iky[*i] + *l; ij = iky[*i] + *j; jk = iky[MAX(*j,*k)] + MIN(*j,*k); jl = iky[MAX(*j,*l)] + MIN(*j,*l); kl = iky[*k] + *l; aij = g4 * dens[kl] + fock[ij]; fock[kl] = g4 * dens[ij] + fock[kl]; fock[ij] = aij; gil = gg; if (*i == *k || *j == *l) { gg = g2; } if (*j == *k) { gil = g2; } ajk = fock[jk] - gil * dens[il]; ail = fock[il] - gil * dens[jk]; aik = fock[ik] - gg * dens[jl]; fock[jl] -= gg * dens[ik]; fock[jk] = ajk; fock[il] = ail; fock[ik] = aik; return; } void dfill(int *n, double *val, double *a, int *ia) //seems unused { int i; if (*ia == 1) { for (i = 0; i < *n; i++) { a[i] = *val; } } else { for (i = 0; i < (*n - 1) * (*ia) + 1; i += *ia) { a[i] = *val; } } return; } ga-5-3/gfutex/examples/scf/input.h0000640005473000001440000000013611704074222015776 0ustar d3n000users#ifdef __cplusplus extern "C" { #endif extern void input(void); #ifdef __cplusplus } #endif ga-5-3/gfutex/examples/scf/be.sh0000750005473000001440000000044311704074222015413 0ustar d3n000users#!/bin/sh ## Generate input file for SCF if [ $# -lt 1 ] then echo "Usage: $0 " exit 1 fi file=be.inpt /bin/rm -rf $file echo $1 >> $file echo >> $file iters=`expr $1 - 1` for i in `seq 0 $iters` do echo "4 `expr 4 "*" $i`.000 0.000 0.000" >> $file done ga-5-3/gfutex/examples/scf/README0000640005473000001440000000315511704074222015352 0ustar d3n000usersThis is a converted version of the scf test code in the tcgmsg directory that solves the Hartree-Fock equations for a cluster of beryllium atoms. The main modifications are that this code is uses distributed data instead of replicated data and is based on the GA function calls instead of TCGMSG. The input is a simple XYZ format file of the form 1 Number of beryllium atoms 2 Blank line 3 4 x y z 4 4 x y z . . . Other parameters that control convergence etc. can be found in the cscf.h file. The two-electron Fock build does not make use of the 8-fold symmetry of the two-electron integrals. The default diagonalization routine makes use of a similarity transform so that only a standard eigenvalue problem needs to be solved. A direct solution using a generalized eigenvalue solver can be had by setting the USE_TRANSFORM compiler directive to 0 in the top of the scf.F file. A larger system containing 16 atoms has also been included in this directory. To run the larger problem, just copy the file be16.inpt to be.inpt and run the code. ------------------------------------------------------------------------------- d3y186: (1). C version file list 1.cscc.h 2.input.h 3.input.c 4.integ.h 5.integ.c 6.output.h 7.output.c 8.timer.h 9.timer.c 10.scf.c (2). remove all .F files after checking out from SVN (3). change the path for GA in the Makefile (4). use the command "module load pgi/10.6" to load pgcc use the command "module load mpi/mvapich/1.1/pgi" to load mpi (5). You can compile your GA in Trinity by "gmake TARGET=LINUX64 USE_MPI=y ARMCI_NETWORK=OPENIB CC=pgcc FC=pgf90 LIBMPI="-lmpich -libumad" 2>&1 | tee make.log" ga-5-3/gfutex/examples/scf/output.c0000640005473000001440000000244011704074222016172 0ustar d3n000users #include #include #include "cscc.h" #include "ga.h" void output(double *z, int rowlow, int rowhi, int collow, int colhi, int rowdim, int coldim, int nctl) { static int kcol = 8; static double zero = 0.0; int i, j, k; int last, begin; for (i = rowlow; i < rowhi; i++) { /* for (j = collow; j < colhi; j++) { if (z[i,j] != zero) { goto L15; } } */ if (z[i] != zero) { goto L15; } } printf(" zero matrix \n"); goto L3; L15: if (rowhi < rowlow) { goto L3; } if (colhi < collow) { goto L3; } last = MIN(colhi, collow + kcol - 1); for (begin = collow; begin < colhi; begin += kcol) { for (i = begin; i < last; i++) { printf(" col %3d ",i); } printf("\n"); for (k = rowlow; k < rowhi; k++) { //for (i = begin; i < last; i++) //{ //if (z[k,i] != zero) if (z[k] != zero) { goto L5; } //} // goto L1; continue; L5: //for (i = begin; i < last; i++) //{ //printf("row %4d %9.4f",i,z[k,i]); printf("row %4d %9.4f", k, z[k]); //} printf("\n"); //L1: // ; } last = MIN((last + kcol), colhi); } L3: printf("\n"); return; } ga-5-3/gfutex/examples/scf/sum.c0000640005473000001440000000126411704074222015441 0ustar d3n000users#include #include #include #include "sum.h" double sum(int g_a) { int me, ndims, *lo, *hi, *ld; double *dat, sum; int sz, i; me = GA_Nodeid(); ndims = GA_Ndim(g_a); lo = malloc(sizeof(int) * ndims); hi = malloc(sizeof(int) * ndims); ld = malloc(sizeof(int) * ndims); NGA_Distribution(g_a, me, lo, hi); NGA_Access(g_a, lo, hi, &dat, ld); sz = 1; for (i = 0; i < ndims; i++) { sz *= ((hi[i] - lo[i]) + 1); // printf("dim: %d, lo: %d, hi: %d\n", i, lo[i], hi[i]); } sum = 0.0; for (i = 0; i < sz; i++) sum += dat[i]; NGA_Release(g_a, lo, hi); free(lo); free(hi); free(ld); return sum; } /* sum */ ga-5-3/gfutex/examples/scf/input.c0000640005473000001440000000464411704074222016001 0ustar d3n000users #include "ga.h" #include "cscc.h" #include #include void input(void) { //....................................................................... // Input configuration from an XYZ format file call be.inpt and set up // initial data structures. Atomic numbers from XYZ file are ignored and // an atomic number of 4 (Beryllium) is used instead. //....................................................................... int i, j; static double r; static int ifcnt; double ax_test; // initialize variables natom = 0; for (i = 0; i < maxatom; i++) { ax[i] = 0.0; ay[i] = 0.0; az[i] = 0.0; } if (GA_Nodeid() == 0) { FILE *fp; fp = fopen("be.inpt","r"); fscanf(fp,"%d",&natom); /* Read in coordinates */ for (i = 0; i < natom; i++) { fscanf(fp,"%d",&j); fscanf(fp,"%lf",&ax[i]); fscanf(fp,"%lf",&ay[i]); fscanf(fp,"%lf",&az[i]); } fclose(fp); } GA_Igop(&natom, 1, "+"); GA_Dgop(&ax[0], natom, "+"); GA_Dgop(&ay[0], natom, "+"); GA_Dgop(&az[0], natom, "+"); // Set up s-function centers and nuclear charges //ifcnt = 1; ifcnt = 0; //Fortran Array Index 1===> C Array Index 0===> for (i = 0; i < natom; i++) { q[i] = 4.0; expnt[ifcnt] = 1741.0; expnt[ifcnt + 1] = 262.1; expnt[ifcnt + 2] = 60.33; expnt[ifcnt + 3] = 17.62; expnt[ifcnt + 4] = 5.933; expnt[ifcnt + 5] = 2.185; expnt[ifcnt + 6] = 0.859; expnt[ifcnt + 7] = 0.1806; expnt[ifcnt + 8] = 0.05835; expnt[ifcnt + 9] = 0.3; expnt[ifcnt + 10] = 0.3; expnt[ifcnt + 11] = 0.3; expnt[ifcnt + 12] = 0.3; expnt[ifcnt + 13] = 0.3; expnt[ifcnt + 14] = 0.3; for (j = 0; j < 15; j++) { x[ifcnt] = ax[i]; y[ifcnt] = ay[i]; z[ifcnt] = az[i]; if (j == 9) //10-->9 index tranlation x[ifcnt] += 1.6; if (j == 10) x[ifcnt] -= 1.6; if (j == 11) y[ifcnt] += 1.6; if (j == 12) y[ifcnt] -= 1.6; if (j == 13) z[ifcnt] += 1.6; if (j == 14) z[ifcnt] -= 1.6; ifcnt++; } } // evaluate repulsion energy enrep = 0.0; for (i = 0; i < natom; i++) { for (j = i + 1; j < natom; j++) { r = sqrt((ax[i] - ax[j]) * (ax[i] - ax[j]) + (ay[i] - ay[j]) * (ay[i] - ay[j]) + (az[i] - az[j]) * (az[i] - az[j])); enrep += q[i] * q[j] / r; } } nocc = natom << 1; nbfn = natom * 15; nnbfn = nbfn * (nbfn + 1) / 2; return; } ga-5-3/gfutex/examples/scf/twoel.h0000640005473000001440000000055111704074222015772 0ustar d3n000users#ifndef __TWOEL_H #define __TWOEL_H #include #ifdef __cplusplus extern "C" { #endif int GFInitialize(); void GFFinalize(); void twoel(double schwmax, double *etwo, int nproc); void twoel_orig(double schwmax, double *etwo, int nproc); #ifdef __cplusplus } #endif #undef CLOG #ifdef CLOG extern FILE *clog; #endif #endif /* __TWOEL_H */ ga-5-3/gfutex/examples/scf/output.h0000640005473000001440000000027311704074222016201 0ustar d3n000users#ifdef __cplusplus extern "C" { #endif extern void output(double *z, int rowlow, int rowhi, int collow, int colhi, int rowdim, int coldim, int nctl); #ifdef __cplusplus } #endif ga-5-3/gfutex/examples/scf/integ.h0000640005473000001440000000052511704074222015747 0ustar d3n000users#ifdef __cplusplus extern "C" { #endif extern double exprjh(double x); extern void setfm(void); extern void f0(double* value, double t); extern void addin(double *g, int *i, int *j, int *k, int *l, double *fock, double *dens, int *iky); extern void dfill(int *n, double *val, double *a, int *ia); #ifdef __cplusplus } #endif ga-5-3/gfutex/examples/scf/scf.c0000640005473000001440000011366311704074222015417 0ustar d3n000users/* C version of the GA SCF code */ #include #include #include #include #include #include #include "cscc.h" #include "integ.h" #include "input.h" #include "output.h" #include "oneel.h" #include "twoel.h" #include "scf.h" #include "timer.h" // #include "global.h" // #include "tcgmsg.h" #include "sum.h" //function declaration void makesz(double* schwmax); void ininrm(void); double s(int i,int j); void makden(void); int nxtask(int nproc); int verify_zero_chunk(double chunk[][ichunk]); void damp(double* fac); void prnout(int iter, double energy, double deltad, double tester); double dendif(void); double testfock(void); void shiftfock(double shift); void prnfin(double energy); void diagon(double* tester, int iter); void makeob(void); void denges(void); void setarrays(void); void closearrays(void); void makoverlap(void); void setoverlap(double *a,int* lo,int* hi, int ld1,int ld2); void print_GA_block(int g_a); void print_GA_block_ij(int g_a,int tlo); void dump_chunk(double *a,int ld1,int ld2); // double abs_double(double x); #ifdef CLOG FILE *clog = NULL; #endif double enrep, q[maxatom], ax[maxatom], ay[maxatom], az[maxatom], x[maxnbfn], y[maxnbfn], z[maxnbfn], expnt[maxnbfn], rnorm[maxnbfn]; long long int iky[maxnbfn], nocc, nbfn, nnbfn; long long int icut1,icut2,icut3,icut4; int natom; //long long int --> long double eigv[maxnbfn]; int g_counter, g_dens, g_fock, g_tfock, g_schwarz, g_work, g_ident, g_orbs; int g_tmp, g_proc; //temporay global array for storage major transformation int main(int argc, char **argv) { long long int nints, maxint; // CAUTION: int precision requirements; // nints, maxint, etc. are proportional to the number of basis functions; // to the fourth power! 216^4 is greater than the largest number; // that can be represented as a 32-bit signed interger, so 64-bit; // arithmetic is needed to count integrals when calculating more than; // 14 Be atoms with 15 basis functions each. Since integrals are counted; // over all iterations, 18 iterations with 7 atoms can result in precision; // problems. Note that the wave function could be calculated correctly; // for much larger basis sets without 64-bit ints because the required; // indexing is usually proportional to nbfn^2, which is good to 46,340; // basis functions, except that the task counter runs as (nbfn/ichunk)^4,; // so with ichunk = 10, 32-bit ints yield correct wavefunctions out to; // 2145 basis functions (maxatom=143), or 4290 (maxatom=286) with ichunk =; // 20, ...; //; // This warning applies to the Global Arrays implementation as well!; // functions of special concern are GA_igop and NGA_Read_inc.; //; #define USE_TRANSFORM 1 #define MPI 1 int heap, stack; double tinit=0.0, tonel=0.0, ttwoel=0.0, tdiag=0.0, tdens=0.0, tprint=0.0; double eone=0.0, etwo=0.0, energy=0.0, deltad=0.0; //implicit variables in fortran int me; double frac; int iter; double scale; int nproc = 0; double rjunk; double totsec, tester; double schwmax; #ifdef CLOG char fname[50]; #endif // initalize the parallel message passing environment; #ifdef MPI MPI_Init(&argc,&argv); #else //pbeginf(); tcg_pbeginf(); #endif GA_Initialize(); // Allocate memory; heap = 32000000; stack = 64000000; if (!MA_init(MT_DBL, stack, heap)) GA_Error("ma_init failed",-1); #if 1 GFInitialize(); #endif me = GA_Nodeid(); nproc = GA_Nnodes(); // initialize a bunch of stuff and initial density matrix; rjunk = timer(); #ifdef CLOG sprintf(fname, "clog.dat.%d", me); clog = fopen(fname, "w"); #endif // get input from file be.inpt; input(); // create and allocate global arrays; setarrays(); if (me == 0) { printf(" bytes of memory used by node 0: %lld\n\n", GA_Inquire_memory()); } ininrm(); // create initial guess for density matrix by using single atom; // densities; denges(); #if 1 GA_Print_distribution(g_schwarz); GA_Print_distribution(g_dens); #endif #if USE_TRANSFORM // make initial orthogonal orbital set for solution method using; // similarity transform; makeob(); #endif // make info for sparsity test; makesz(&schwmax); tinit = timer(); // print preliminary data before any long compute segments start; if (me == 0) printf("\n"); // ^* iterate ^*; for (iter = 0; iter < mxiter; iter++) { double s; // make the one particle contribution to the fock matrix; // and get the partial contribution to the energy; oneel(schwmax, &eone, nproc); tonel = tonel + timer(); #if 0 s = sum(g_fock); GA_Dgop(&s, 1, "+"); if (me == 0) printf("g_fock sum after oneel: %f\n", s); s = sum(g_orbs); GA_Dgop(&s, 1, "+"); if (me == 0) printf("g_orbs sum after oneel: %f\n", s); #endif // compute the two particle contributions to the fock matrix and; // get the total energy.; twoel(schwmax, &etwo, nproc); ttwoel = ttwoel + timer(); #if 0 s = sum(g_fock); GA_Dgop(&s, 1, "+"); if (me == 0) printf("g_fock sum after twoel: %f\n", s); #endif // Diagonalize the fock matrix. The diagonalizers used in this; // are actually sequential, not parallel.; diagon(&tester, iter); tdiag = tdiag + timer(); #if 0 s = sum(g_fock); GA_Dgop(&s, 1, "+"); if (me == 0) printf("g_fock sum after diagon: %f\n", s); s = sum(g_orbs); GA_Dgop(&s, 1, "+"); if (me == 0) printf("g_orbs sum after diagon: %f\n", s); #endif // make the new density matrix in g_work from orbitals in g_orbs,; // compute the norm of the change in the density matrix and; // then update the density matrix in g_dens with damping.; makden(); deltad = dendif(); if (iter == 0) scale = 0.00; else if (iter < 5) { if (nbfn > 60) scale = 0.50; else scale = 0.00; } else scale = 0.00; damp(&scale); tdens = tdens + timer(); // add up energy and print out convergence information; if (me == 0) { energy = enrep + eone + etwo; prnout(iter, energy, deltad, tester); tprint = tprint + timer(); } // if converged exit iteration loop; if (deltad < tol) goto L20; #if GA_VERSION_MAJOR >= 5 GA_Llgop(&icut4, 1, "+"); #else GA_Igop(&icut4, 1, "+"); #endif if(icut4 == 0) { // something has gone wrong--print what you know and quit.; printf("no two-electron integrals computed!\n"); goto L20; } } iter = iter - 1; if(me == 0) printf("SCF failed to converge in %d iters\n", iter); //...v....1....v....2....v....3....v....4....v....5....v....6....v....7..; //; // finished ... print out eigenvalues and occupied orbitals; //; L20: #if GA_VERSION_MAJOR >= 5 GA_Llgop(&icut1, 1, (char*) "+"); GA_Llgop(&icut2, 1, (char*) "+"); GA_Llgop(&icut3, 1, (char*) "+"); #else GA_Igop(&icut1, 1, (char*) "+"); GA_Igop(&icut2, 1, (char*) "+"); GA_Igop(&icut3, 1, (char*) "+"); #endif if (me == 0) { // print out timing information; prnfin(energy); printf(" init onel twoel diag dens print ncpu \n"); printf(" ---- ---- ----- ---- ---- ---- ---- \n"); totsec = tinit + tonel + ttwoel + tdiag + tdens + tprint; printf("%10.2f %10.2f %10.2f %10.2f %10.2f %10.2f %d",tinit, tonel, ttwoel, tdiag, tdens,tprint,nproc); printf("\n elapsed time in seconds %10.2f\n\n",totsec); // print out information on # integrals evaluated each iteration; nints = icut1 + icut2 + icut3; frac = (double)icut3 / (double)nints; printf("No. of integrals screened or computed (all iters) \n\n"); printf("-------------------------------------\n"); printf(" failed #ij test failed #kl test #compute #total fraction\n"); printf(" ---------- ---------------- ------------- ------ --------\n"); printf("%15lld %15lld %15lld %15lld %9.6f\n", icut1, icut2, icut3, nints, frac); maxint = nbfn; maxint = pow(maxint, 4) * (iter + 1); if(nints != maxint) { printf("Inconsistent number of integrals, should be %ld\n", maxint); printf("Note: largest 32-bit int is 2,147,483,647\n"); printf("Probably due to insufficient int precision in GA.\n"); } #ifndef MPI tcg_stats(); #endif } closearrays(); #ifdef CLOG fprintf(stderr, "Before GFFinalize()\n"); fflush(stderr); #endif #ifdef CLOG fclose(clog); #endif #if 1 GFFinalize(); #endif #ifdef CLOG fprintf(stderr, "After GFFinalize()\n"); fflush(stderr); #endif GA_Terminate(); #ifdef CLOG fprintf(stderr, "After GA_Terminate()\n"); fflush(stderr); #endif #ifdef MPI MPI_Finalize(); #else tcg_pend(); #endif } void makesz(double *schwmax) { double work[ichunk][ichunk]; int lo[2],hi[2],i,j,iloc,jloc,ld; int dotask; int lo_c[2],hi_c[2]; //column-major inter-patch switch //implicit declared variable in fortran double gg; //schwarz(ij) = (ij|ij) for sparsity test; icut1 = 0; icut2 = 0; icut3 = 0; GA_Zero(g_schwarz); GA_Zero(g_counter); *schwmax = 0.00; dotask = next_chunk(lo, hi); ld = ichunk; while (dotask) { for (i = lo[0]; i <= hi[0]; i++) { iloc = i - lo[0]; for (j = lo[1]; j <= hi[1]; j++) { jloc = j - lo[1]; g(&gg, i, j, i, j); work[iloc][jloc] = sqrt(gg); //work[jloc][iloc] = sqrt(gg); *schwmax = MAX((*schwmax), work[iloc][jloc]); // *schwmax = MAX((*schwmax), work[jloc][iloc]); } } // lo_c[0]=lo[1]; // lo_c[1]=lo[0]; // hi_c[0]=hi[1]; // hi_c[1]=hi[0]; NGA_Put(g_schwarz, lo, hi, work, &ld); // NGA_Put(g_schwarz,lo_c,hi_c,work,&ld); //column-major inter-patch switch dotask = next_chunk(lo, hi); } GA_Dgop(schwmax, 1, "max"); return; } void ininrm(void) { long long int maxint; //implicit declared variables in fortran int i; // write a little welcome message; maxint = nbfn; maxint = pow(maxint, 4); if (GA_Nodeid()==0) { printf(" Example Direct Self Consistent Field Program \n"); printf(" -------------------------------------------- \n\n"); printf(" no. of atoms .............. %5d\n", natom); printf(" no. of occupied orbitals .. %5ld\n", nocc); printf(" no. of basis functions .... %5ld\n", nbfn); printf(" basis functions^4 ......... %5ld\n", maxint); printf(" convergence threshold ..... %9.4f\n", tol); printf(" chunk size .................%5d\n", ichunk); } // generate normalisation coefficients for the basis functions; // and the index array iky; for (i = 0; i < nbfn; i++) { //iky[i] = i*(i-1)/2; iky[i] = (i + 1) * i / 2; } for (i = 0;i < nbfn;i++) { rnorm[i] = pow((expnt[i] * 2.00 / pi), 0.750); } // initialize common for computing f0; setfm(); } double h(int i,int j) { //vd$r novector; //vd$r noconcur; // generate the one particle hamiltonian matrix element; // over the normalized primitive 1s functions i and j; double ret; //implicit declared variables in fortran double f0val = 0.00; double sum = 0.00; double facij,expij,repij; int iat; //long iat; double xp,yp,zp,rpc2; double rab2; rab2 = (x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]) + (z[i]-z[j])*(z[i]-z[j]); facij = expnt[i]*expnt[j]/(expnt[i]+expnt[j]); expij = exprjh(-facij*rab2); repij = (2.00*pi/(expnt[i]+expnt[j])) * expij; // first do the nuclear attraction integrals; for (iat = 0;iat < natom;iat++) { xp = (x[i]*expnt[i] + x[j]*expnt[j])/(expnt[i]+expnt[j]); yp = (y[i]*expnt[i] + y[j]*expnt[j])/(expnt[i]+expnt[j]); zp = (z[i]*expnt[i] + z[j]*expnt[j])/(expnt[i]+expnt[j]); rpc2 = (xp-ax[iat])*(xp-ax[iat]) + (yp-ay[iat])*(yp-ay[iat]) + (zp-az[iat])*(zp-az[iat]); //; f0(&f0val, (expnt[i]+expnt[j])*rpc2); sum = sum - repij * q[iat] * f0val; } // add on the kinetic energy term; sum = sum + facij*(3.00-2.00*facij*rab2) * pow((pi/(expnt[i]+expnt[j])),1.50) * expij; // finally multiply by the normalization constants; ret = sum * rnorm[i] * rnorm[j]; return ret; } double s(int i, int j) { // generate the overlap matrix element between the normalized; // primitve gaussian 1s functions i and j; double ret; //implicit declared variables in fortran double rab2, facij; rab2 = (x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]) + (z[i] - z[j]) * (z[i] - z[j]); facij = expnt[i] * expnt[j] / (expnt[i] + expnt[j]); ret = pow((pi / (expnt[i] + expnt[j])), 1.50) * exprjh(-facij * rab2) * rnorm[i] * rnorm[j]; return ret; } void makden(void) { double work[ichunk][ichunk], orbsi[maxnbfn][ichunk]; //maxnbfn double orbsj[maxnbfn][ichunk]; //maxnbfn int lo[2], hi[2], tlo[2], thi[2], i, j, iloc, jloc, ld; int dotask; //implicit declared variables in fortran double p; int k; //transform between column-major row-major // double a[ichunk][ichunk], b[ichunk][ichunk]; // int lo_c[2],hi_c[2]; // generate density matrix from orbitals in g_orbs. the first; // nocc orbitals are doubly occupied.; // GA_Zero(g_counter); // dotask = next_chunk(lo, hi); ld = ichunk; //transform g_orbs from column-major to row-major /* while (dotask) { */ /* NGA_Get(g_orbs, lo, hi, a, &ld); */ /* for (j = 0; j <= hi[1] - lo[1]; j++) { */ /* for (i = 0; i <= hi[0] - lo[0]; i++) { */ /* b[j][i] = a[i][j]; //intra-patch transfrom */ /* } */ /* } */ /* lo_c[0] = lo[1]; //inter-patch transform */ /* lo_c[1] = lo[0]; */ /* hi_c[0] = hi[1]; */ /* hi_c[1] = hi[0]; */ /* NGA_Put(g_tmp, lo_c, hi_c, b, &ld); */ /* dotask = next_chunk(lo, hi); */ /* } */ /* GA_Copy(g_tmp, g_orbs); */ // GA_Transpose(g_orbs, g_tmp); // GA_Copy(g_tmp, g_orbs); GA_Zero(g_counter); dotask = next_chunk(lo, hi); while (dotask) { ld = ichunk; tlo[0] = 0; thi[0] = nocc - 1; tlo[1] = lo[0]; thi[1] = hi[0]; NGA_Get(g_orbs, tlo, thi, orbsi, &ld); tlo[1] = lo[1]; thi[1] = hi[1]; NGA_Get(g_orbs, tlo, thi, orbsj, &ld); for (i = lo[0]; i <= hi[0]; i++) { iloc = i - lo[0];// + 1; for (j = lo[1]; j <= hi[1]; j++) { jloc = j - lo[1];// + 1; p = 0.0; for (k = 0; k < nocc; k++) { p = p + orbsi[k][iloc] * orbsj[k][jloc]; } work[iloc][jloc] = 2.0 * p; } } ld = ichunk; NGA_Put(g_work, lo, hi, work, &ld); dotask = next_chunk(lo, hi); } // GA_Transpose(g_orbs, g_tmp); // GA_Copy(g_tmp, g_orbs); // GA_Transpose(g_work, g_tmp); // GA_Copy(g_tmp, g_work); //transform g_orbs from row-major to column major /* ld = ichunk; */ /* GA_Zero(g_counter); */ /* dotask = next_chunk(lo, hi); */ /* while (dotask) { */ /* NGA_Get(g_orbs, lo, hi, a, &ld); */ /* for (j = 0; j <= hi[1] - lo[1]; j++) { */ /* for (i = 0; i <= hi[0] - lo[0]; i++) { */ /* b[j][i] = a[i][j]; //intra-patch transfrom */ /* } */ /* } */ /* lo_c[0] = lo[1]; //inter-patch transform */ /* lo_c[1] = lo[0]; */ /* hi_c[0] = hi[1]; */ /* hi_c[1] = hi[0]; */ /* NGA_Put(g_tmp, lo_c, hi_c, b, &ld); */ /* dotask = next_chunk(lo, hi); */ /* } */ /* GA_Copy(g_tmp, g_orbs); */ // transform g_work from row-major to column major /* ld = ichunk; */ /* GA_Zero(g_counter); */ /* dotask = next_chunk(lo, hi); */ /* while (dotask) { */ /* NGA_Get(g_work, lo, hi, a, &ld); */ /* for (j = 0; j <= hi[1] - lo[1]; j++) { */ /* for (i = 0; i <= hi[0] - lo[0]; i++) { */ /* b[j][i] = a[i][j]; //intra-patch transfrom */ /* } */ /* } */ /* lo_c[0] = lo[1]; //inter-patch transform */ /* lo_c[1] = lo[0]; */ /* hi_c[0] = hi[1]; */ /* hi_c[1] = hi[0]; */ /* NGA_Put(g_tmp, lo_c, hi_c, b, &ld); */ /* dotask = next_chunk(lo, hi); */ /* } */ /* GA_Copy(g_tmp, g_work); */ return; } int nxtask(int nproc) //not used { const int ichunk_local = 10; //in the header file, ichunk is defined as 20, so I rename it as ichunk_local static double nleft=0, icount=0; int ret = 0; //implicit declared variables in fortran int junk; // wrapper round nxtval() to increase granularity; // and thus reduce no. of requests to shared counter; #ifndef MPI if(nproc>0) { if(nleft==0) { icount = tcg_nxtval(nproc) * ichunk_local; nleft = ichunk_local; } ret = icount; icount = icount + 1; nleft = nleft -1; } else { nleft = 0; ret = 0; junk = tcg_nxtval(nproc); } #endif // following does dumb static load balancing; //; //$$$ if(nproc>0) { //$$$ if (nleft == 0) { //$$$ icount = GA_Nodeid(); //$$$ nleft = 1; //$$$ } //$$$ nxtask = icount; //$$$ icount = icount + GA_Nnodes(); //$$$ } else { //$$$ nleft = 0; //$$$ nxtask = 0; //$$$ } return ret; } int next_chunk(int* lo,int* hi) { //const int one=1; int one = 0; int imax, ilo, jlo; //implicit declared variables in fortran int itask; int ret; itask = NGA_Read_inc(g_counter, &one, 1); imax = nbfn / ichunk; if (nbfn - ichunk * imax > 0) imax = imax + 1; if (itask < imax * imax) { ilo = itask % imax; jlo = (itask - ilo) / imax; lo[0] = ilo * ichunk; lo[1] = jlo * ichunk; hi[0] = MIN((ilo + 1) * ichunk - 1, nbfn); hi[1] = MIN((jlo + 1) * ichunk - 1, nbfn); ret = 1; } else ret = 0; return ret; } long int acquire_tasks(int numTasks) { int one = 0; long int itask; itask = NGA_Read_inc(g_counter, &one, numTasks); return itask; } // acquire_tasks int translate_task(long int itask, int *lo, int *hi, int *ilo, int *jlo, int *klo, int *llo) { long int imax; int itmp; int ret; imax = nbfn / ichunk; if (nbfn - ichunk * imax > 0) imax = imax + 1; if (itask < 0) { printf("translate_task: itask negative: %ld imax: %ld nbfn: %ld ichunk: %d\n", itask, imax, nbfn, ichunk); printf("probable GA int precision problem if imax^4 > 2^31\n"); printf("\n"); printf("translate_task\n"); exit(0); } if (itask < pow(imax, 4)) { *ilo = itask % imax; itmp = (itask - (*ilo)) / imax; *jlo = itmp % imax; itmp = (itmp - (*jlo)) / imax; *klo = itmp % imax; *llo = (itmp - (*klo)) / imax; lo[0] = (*ilo) * ichunk; lo[1] = (*jlo) * ichunk; lo[2] = (*klo) * ichunk; lo[3] = (*llo) * ichunk; hi[0] = MIN(((*ilo) + 1) * ichunk - 1, nbfn); hi[1] = MIN(((*jlo) + 1) * ichunk - 1, nbfn); hi[2] = MIN(((*klo) + 1) * ichunk -1, nbfn); hi[3] = MIN(((*llo) + 1) * ichunk - 1, nbfn); ret = 1; } else ret = 0; return ret; } // translate_task int next_4chunk(int *lo,int *hi,int* ilo,int* jlo,int* klo,int* llo, long int *pitask) { int one = 0; long int imax; long int itask; int itmp; int ret; itask = NGA_Read_inc(g_counter, &one, 1); *pitask = itask; imax = nbfn / ichunk; if (nbfn - ichunk * imax > 0) imax = imax + 1; if (itask < 0) { printf("next_4chunk: itask negative: %ld imax: %ld nbfn: %ld ichunk: %d\n", itask, imax, nbfn, ichunk); printf("probable GA int precision problem if imax^4 > 2^31\n"); printf("\n"); printf("next_4chunk\n"); exit(0); } if (itask < pow(imax, 4)) { *ilo = itask % imax; itmp = (itask - (*ilo)) / imax; *jlo = itmp % imax; itmp = (itmp - (*jlo)) / imax; *klo = itmp % imax; *llo = (itmp - (*klo)) / imax; lo[0] = (*ilo) * ichunk; lo[1] = (*jlo) * ichunk; lo[2] = (*klo) * ichunk; lo[3] = (*llo) * ichunk; hi[0] = MIN(((*ilo) + 1) * ichunk - 1, nbfn); hi[1] = MIN(((*jlo) + 1) * ichunk - 1, nbfn); hi[2] = MIN(((*klo) + 1) * ichunk -1, nbfn); hi[3] = MIN(((*llo) + 1) * ichunk - 1, nbfn); ret = 1; } else ret = 0; return ret; } void clean_chunk(double chunk[][ichunk]) { int i, j; for (i = 0; i < ichunk; i++) for (j = 0; j < ichunk; j++) chunk[i][j] = 0.0; } // clean_chunk int verify_zero_chunk(double chunk[][ichunk]) { int i, j, flag; flag = 1; for (i = 0; (i < ichunk) && flag; i++) for (j = 0; (j < ichunk) && flag; j++) if (chunk[i][j] != 0.0) { flag = 0; fprintf(stderr, "chunk[%d][%d] != 0.0, %.16f\n", i, j, chunk[i][j]); break; } return flag; } void damp(double *fac) { // create damped density matrix as a linear combination of; // old density matrix and density matrix formed from new orbitals; //implicit declared variables in fortran double ofac; ofac = 1.00 - (*fac); GA_Add(fac, g_dens, &ofac, g_work, g_dens); return; } void prnout(int iter, double energy, double deltad, double tester) { // printout results of each iteration; if (GA_Nodeid() != 0) return; printf(" iter= %3d, energy=%15.8f, deltad= %9.7f, deltaf=%9.7f\n", iter, energy, deltad, tester); return; } double dendif(void) { double xdiff; double dens_c[ichunk][ichunk],work_c[ichunk][ichunk]; int lo[2], hi[2], i, j, ld; int dotask; // int lo_c[2],hi_c[2]; //column-major inter-patch switch double ret; //implicit declared variables in fortran double denmax; // compute largest change in density matrix elements; denmax = 0.00; GA_Zero(g_counter); dotask = next_chunk(lo,hi); ld = ichunk; while(dotask) { //column-major inter-path switch // lo_c[0] = lo[1]; // lo_c[1] = lo[0]; // hi_c[0] = hi[1]; // hi_c[1] = hi[0]; NGA_Get(g_dens, lo, hi, dens_c, &ld); NGA_Get(g_work, lo, hi, work_c, &ld); //column-major inter-patch switch // NGA_Get(g_dens,lo_c,hi_c,dens_c,&ld); // NGA_Get(g_work,lo_c,hi_c,work_c,&ld); for (j = 0; j <= hi[1] - lo[1]; j++) { for (i = 0; i <= hi[0] - lo[0]; i++) { //xdiff = abs(dens_c[i][j]-work_c[i][j]); //xdiff = abs_double(dens_c[j][i]-work_c[j][i]); //column-major intra-patch switch xdiff = fabs(dens_c[i][j] - work_c[i][j]); //column-major intra-patch switch if (xdiff > denmax) denmax = xdiff; } } dotask = next_chunk(lo, hi); } GA_Dgop(&denmax, 1, "max"); ret = denmax; return ret; } double testfock(void) { double xmax, xtmp; double work[ichunk][ichunk]; int lo[2], hi[2], i, j, iloc, jloc, ld; int dotask; // int lo_c[2],hi_c[2]; //column-major inter-patch switch double ret; // compute largest change in density matrix elements; xmax = 0.00; GA_Zero(g_counter); dotask = next_chunk(lo, hi); ld = ichunk; while(dotask) { //column-major inter-patch switch // lo_c[0]=lo[1]; // lo_c[1]=lo[0]; // hi_c[0]=hi[1]; // hi_c[1]=hi[0]; NGA_Get(g_fock, lo, hi, work, &ld); // NGA_Get(g_fock, lo_c, hi_c, work, &ld);//column-major inter-patch switch for (j = lo[1]; j <= hi[1]; j++) { jloc = j - lo[1]; for (i = lo[0]; i <= hi[0]; i++) { iloc = i - lo[0]; if (i != j) { //xtmp = abs(work[iloc][jloc]); // xtmp = abs_double(work[jloc][iloc]); //column-major intra-patch switch xtmp = fabs(work[iloc][jloc]); //column-major intra-patch switch if (xtmp > xmax) xmax = xtmp; } } } dotask = next_chunk(lo, hi); } GA_Dgop(&xmax, 1, "max"); ret = xmax; return ret; } void shiftfock(double shift) { double work[ichunk][ichunk]; int lo[2], hi[2], i, j, iloc, jloc, ld, icnt; int dotask; // int lo_c[2],hi_c[2]; //column-major inter-patch switch // compute largest change in density matrix elements; GA_Zero(g_counter); dotask = next_chunk(lo, hi); ld = ichunk; while (dotask) { //column-major inter-path switch // lo_c[0]=lo[1]; // lo_c[1]=lo[0]; // hi_c[0]=hi[1]; // hi_c[1]=hi[0]; // NGA_Get(g_fock, lo_c, hi_c, work, &ld); //column-major inter-patch switch NGA_Get(g_fock, lo, hi, work, &ld); icnt = 0; for (j = lo[1]; j <= hi[1]; j++) { jloc = j - lo[1]; for (i = lo[0]; i <= hi[0]; i++) { iloc = i - lo[0]; if ((i == j) && (i > (nocc - 1))) { work[iloc][jloc] = work[iloc][jloc] + shift; // work[jloc][iloc] = work[jloc][iloc] + shift; //column-major inter-patch switch icnt = icnt + 1; } } } if (icnt > 0) //NGA_Put(g_fock, lo_c, hi_c, work, &ld);//column-major inter-patch switch NGA_Put(g_fock, lo, hi, work, &ld); dotask = next_chunk(lo, hi); } return; } void prnfin(double energy) { double orbs[maxnbfn][maxnbfn]; int lo[2],hi[2],ld; // printout final results; if (GA_Nodeid() != 0) return; printf("\n\nfinal energy = %18.11f\n",energy); printf("\neigenvalues\n\n"); output(eigv, 0, MIN(nbfn,nocc+5), 0, 1, nbfn, 1, 1); //output(eigv, 1, MIN(nbfn,nocc+5), 1, 1, nbfn, 1, 1); return; } void g(double *value, int i, int j, int k, int l) { //implicit declared variables in fortran double f0val, rab2, rcd2, facij,fackl,exijkl,denom, fac, xp,yp,zp,xq,yq,zq,rpq2; // compute the two electon integral (ij|kl) over normalized; // primitive 1s gaussians; f0val = 0.00; rab2 = (x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]) + (z[i] - z[j]) * (z[i] - z[j]); rcd2 = (x[k] - x[l]) * (x[k] - x[l]) + (y[k] - y[l]) * (y[k] - y[l]) + (z[k] - z[l]) * (z[k] - z[l]); facij = expnt[i] * expnt[j] / (expnt[i] + expnt[j]); fackl = expnt[k] * expnt[l] / (expnt[k] + expnt[l]); exijkl = exprjh(-facij * rab2 - fackl * rcd2); denom = (expnt[i] + expnt[j]) * (expnt[k] + expnt[l]) * sqrt(expnt[i] + expnt[j] + expnt[k] + expnt[l]); fac = (expnt[i] + expnt[j]) * (expnt[k] + expnt[l]) / (expnt[i] + expnt[j] + expnt[k] + expnt[l]); xp = (x[i] * expnt[i] + x[j] * expnt[j]) / (expnt[i] + expnt[j]); yp = (y[i] * expnt[i] + y[j] * expnt[j]) / (expnt[i] + expnt[j]); zp = (z[i] * expnt[i] + z[j] * expnt[j]) / (expnt[i] + expnt[j]); xq = (x[k] * expnt[k] + x[l] * expnt[l]) / (expnt[k] + expnt[l]); yq = (y[k] * expnt[k] + y[l] * expnt[l]) / (expnt[k] + expnt[l]); zq = (z[k] * expnt[k] + z[l] * expnt[l]) / (expnt[k] + expnt[l]); rpq2 = (xp - xq) * (xp - xq) + (yp - yq) * (yp - yq) + (zp - zq) * (zp - zq); f0(&f0val, fac * rpq2); *value = (2.00 * pow(pi, 2.50) / denom) * exijkl * f0val * rnorm[i] * rnorm[j] * rnorm[k] * rnorm[l]; return; } void diagon(double *tester, int iter) { // diagon(fock, orbs, evals, work, tester, iter); double r_zero, r_one, shift; //implicit declared variables in fortran int i, me; double test = -1.0, s; me = GA_Nodeid(); #if USE_TRANSFORM // use similarity transform to solve standard eigenvalue problem; // (overlap matrix has been transformed out of the problem); r_one = 1.00; r_zero = 0.00; GA_Dgemm('n', 'n', nbfn, nbfn, nbfn, r_one, g_fock, g_orbs, r_zero, g_tfock); #if 0 s = sum(g_tfock); GA_Dgop(&s, 1, "+"); if (me == 0) printf("g_tfock sum after first dgemm(): %f\n", s); #endif GA_Dgemm('t', 'n', nbfn, nbfn, nbfn, r_one, g_orbs, g_tfock, r_zero, g_fock); #if 0 s = sum(g_fock); GA_Dgop(&s, 1, "+"); if (me == 0) printf("g_fock sum after second dgemm(): %f\n", s); #endif *tester = testfock(); shift = 0.00; if ((*tester) > 0.30) { shift = 0.30; } #if 1 else { if (nbfn > 60) shift = 0.10; else shift = 0.00; } #endif //if (iter>=2 && shift!=0.00) if (iter >= 1 && shift != 0.00) { //iter 2 in Fotran is iter 1 in C shiftfock(shift); } GA_Copy(g_orbs, g_tfock); GA_Diag_std_seq(g_fock, g_work, eigv); // Back transform eigenvectors; GA_Dgemm('n', 'n', nbfn, nbfn, nbfn, r_one, g_tfock, g_work, r_zero, g_orbs); if (iter>= 1 && shift != 0.00) { //>=2 --> >=1 for (i = nocc; i < nbfn; i++) { eigv[i] = eigv[i] - shift; } } #else //; // Keep remaking overlap matrix since GA_Diag_seq does not; // guarantee that g_ident is preserved.; //; makoverlap(); GA_Diag_seq(g_fock, g_ident, g_orbs, eigv); *tester = 0.00; #endif return; } void makeob(void) { double work[ichunk][ichunk],orbs[ichunk][ichunk]; double eval[maxnbfn]; int lo[2],hi[2],ld,me,i,j,iloc,jloc; int dotask; int lo_c[2],hi_c[2]; //for column-major switch // generate set of orthonormal vectors by creating a random; // symmetric matrix and solving associated generalized eigenvalue; // problem using the correct overlap matrix.; me = GA_Nodeid(); GA_Zero(g_counter); dotask = next_chunk(lo, hi); ld = ichunk; while (dotask) { for (i = lo[0]; i <= hi[0]; i++) { iloc = i - lo[0]; for (j = lo[1]; j <= hi[1]; j++) { jloc = j - lo[1]; work[iloc][jloc] = s(i, j); //work[jloc][iloc] = s(i,j); //column-major intra-patch switch orbs[iloc][jloc] = 0.5;//drand48(); //orbs[jloc][iloc] = 0.5; //column-major intra-patch switch } } NGA_Put(g_ident, lo, hi, work, &ld); NGA_Put(g_fock, lo, hi, orbs, &ld); // lo_c[0]=lo[1]; //lo_c[1]=lo[0]; // hi_c[0]=hi[1]; // hi_c[1]=hi[0]; // NGA_Put(g_ident,lo_c,hi_c,work,&ld); // NGA_Put(g_fock,lo_c,hi_c,orbs,&ld); dotask = next_chunk(lo, hi); } GA_Symmetrize(g_fock); GA_Diag_seq(g_fock, g_ident, g_orbs, eval); return; } void denges(void) { // Form guess density from superposition of atomic densities in the AO; // basis set ... instead of doing the atomic SCF hardwire for this; // small basis set for the Be atom.; int one, itask, lo[2], hi[2], ld; double atdens[15][15] = { {0.000002,0.000027,0.000129,0.000428,0.000950,0.001180, 0.000457,-0.000270,-0.000271,0.000004,0.000004,0.000004, 0.000004,0.000004,0.000004}, {0.000027,0.000102,0.000987, 0.003269,0.007254,0.009007,0.003492,-0.002099,-0.002108, 0.000035,0.000035,0.000035,0.000035,0.000035,0.000035}, {0.000129,0.000987,0.002381,0.015766,0.034988,0.043433, 0.016835,-0.010038,-0.010082,0.000166,0.000166,0.000166, 0.000166,0.000166,0.000166}, {0.000428,0.003269,0.015766, 0.026100,0.115858,0.144064,0.055967,-0.035878,-0.035990, 0.000584,0.000584,0.000584,0.000584,0.000584,0.000584}, {0.000950,0.007254,0.034988,0.115858,0.128586,0.320120, 0.124539,-0.083334,-0.083536,0.001346,0.001346,0.001346, 0.001346,0.001346,0.001346}, {0.001180,0.009007,0.043433, 0.144064,0.320120,0.201952,0.159935,-0.162762,-0.162267, 0.002471,0.002471,0.002471,0.002471,0.002471,0.002471}, {0.000457,0.003492,0.016835,0.055967,0.124539,0.159935, 0.032378,-0.093780,-0.093202,0.001372,0.001372,0.001372, 0.001372,0.001372,0.001372}, {-0.000270,-0.002099,-0.010038, -0.035878,-0.083334,-0.162762,-0.093780,0.334488,0.660918, -0.009090,-0.009090,-0.009090,-0.009090,-0.009090,-0.009090}, {-0.000271,-0.002108,-0.010082,-0.035990,-0.083536,-0.162267, -0.093202,0.660918,0.326482,-0.008982,-0.008982,-0.008981, -0.008981,-0.008981,-0.008982}, {0.000004,0.000035,0.000166, 0.000584,0.001346,0.002471,0.001372,-0.009090,-0.008982, 0.000062,0.000124,0.000124,0.000124,0.000124,0.000124}, {0.000004,0.000035,0.000166,0.000584,0.001346,0.002471, 0.001372,-0.009090,-0.008982,0.000124,0.000062,0.000124, 0.000124,0.000124,0.000124}, {0.000004,0.000035,0.000166, 0.000584,0.001346,0.002471,0.001372,-0.009090,-0.008981, 0.000124,0.000124,0.000062,0.000124,0.000124,0.000124}, {0.000004,0.000035,0.000166,0.000584,0.001346,0.002471, 0.001372,-0.009090,-0.008981,0.000124,0.000124,0.000124, 0.000062,0.000124,0.000124}, {0.000004,0.000035,0.000166, 0.000584,0.001346,0.002471,0.001372,-0.009090,-0.008981, 0.000124,0.000124,0.000124,0.000124,0.000062,0.000124}, {0.000004,0.000035,0.000166,0.000584,0.001346,0.002471, 0.001372,-0.009090,-0.008982,0.000124,0.000124,0.000124, 0.000124,0.000124,0.000062}}; //implicit declared variables in fortran int ioff,i,j; double atdens_f[15][15]; // Create initial guess for density matrix in global array; GA_Zero(g_dens); GA_Zero(g_counter); //one = 1; one = 0; ld = 15; // Correct for a factor of two along the diagonal; for (i = 0; i < ld; i++) { atdens[i][i] = 2.00 * atdens[i][i]; } //to get a fortran based array by switching the indices for (i = 0; i < 15; i++) { for (j = 0; j < 15; j++) { atdens_f[j][i] = atdens[i][j]; } } itask = NGA_Read_inc(g_counter, &one, 1); while(itask < natom) { ioff = itask * 15; lo[0] = ioff + 0; //1--->0 lo[1] = ioff + 0; //1--->0 hi[0] = ioff + 14;//15--->14 hi[1] = ioff + 14;//15--->14 //NGA_Put(g_dens,lo,hi,atdens,&ld); NGA_Put(g_dens, lo, hi, atdens_f, &ld); itask = NGA_Read_inc(g_counter, &one, 1); } GA_Sync(); return; } void setarrays(void) { int one, two, dims[2]; int status; int nproc; one = 1; two = 2; nproc = GA_Nnodes(); g_counter = GA_Create_handle(); GA_Set_data(g_counter,one,&one,MT_INT); status = GA_Allocate(g_counter); GA_Zero(g_counter); g_proc = GA_Create_handle(); GA_Set_data(g_proc, one, &nproc, MT_INT); status = GA_Allocate(g_proc); GA_Zero(g_proc); dims[0] = nbfn; dims[1] = nbfn; g_dens = GA_Create_handle(); GA_Set_data(g_dens, two, dims, MT_DBL); status = GA_Allocate(g_dens); GA_Zero(g_dens); g_schwarz = GA_Create_handle(); GA_Set_data(g_schwarz, two, dims, MT_DBL); status = GA_Allocate(g_schwarz); GA_Zero(g_schwarz); g_fock = GA_Create_handle(); GA_Set_data(g_fock, two, dims, MT_DBL); status = GA_Allocate(g_fock); GA_Zero(g_fock); g_tfock = GA_Create_handle(); GA_Set_data(g_tfock, two, dims, MT_DBL); status = GA_Allocate(g_tfock); GA_Zero(g_tfock); g_work = GA_Create_handle(); GA_Set_data(g_work, two, dims, MT_DBL); status = GA_Allocate(g_work); GA_Zero(g_work); g_ident = GA_Create_handle(); GA_Set_data(g_ident, two, dims, MT_DBL); status = GA_Allocate(g_ident); GA_Zero(g_ident); g_orbs = GA_Create_handle(); GA_Set_data(g_orbs, two, dims, MT_DBL); status = GA_Allocate(g_orbs); GA_Zero(g_orbs); //temporay global array for storage major transformation g_tmp = GA_Create_handle(); GA_Set_data(g_tmp, two, dims, MT_DBL); status = GA_Allocate(g_tmp); GA_Zero(g_tmp); return; } void closearrays(void) { GA_Destroy(g_counter); GA_Destroy(g_proc); GA_Destroy(g_dens); GA_Destroy(g_schwarz); GA_Destroy(g_fock); GA_Destroy(g_tfock); GA_Destroy(g_work); GA_Destroy(g_ident); GA_Destroy(g_orbs); //temporay global array for storage major transformation GA_Destroy(g_tmp); return; } void makoverlap(void) //not used due to USE_TRANSFORM { int me, lo[2], hi[2], ld[2]; int ld1, ld2; double *ptr; //int--->double me = GA_Nodeid(); NGA_Distribution(g_ident, me, lo, hi); NGA_Access(g_ident, lo, hi, &ptr, ld); ld1 = hi[0] - lo[0] + 1; ld2 = hi[1] - lo[1] + 1; setoverlap(ptr,lo,hi,ld1,ld2); NGA_Release(g_ident,lo,hi); return; } void setoverlap(double *a,int* lo,int* hi, int ld1,int ld2) //not used due to USE_TRANSFORM { int i,j,ii, jj; for (i = 0;i < ld1;i++) { ii = i + lo[0]; for (j = 0;j < ld2;j++) { jj = j + lo[1]; #if USE_TRANSFORM if (ii==jj) //a[i][j] = 1.0; a[ld2*i+j]=1.0; else //a[i][j] = 0.0; a[ld2*i+j] = 0.0; #else //a[i][j] = s[ii][jj]; a[ld1*i+j] = s[ii][jj]; #endif } } return; } void print_GA_block(int g_a) //not used { int lo[2], hi[2], ld1, ld2, ld; double *ptr; //int--->double //implicit declared variables in fortran int me; me = GA_Nodeid(); NGA_Distribution(g_a, me, lo, hi); ld1 = hi[0] - lo[0] + 1; ld2 = hi[1] - lo[1] + 1; NGA_Access(g_a, lo, hi, &ptr, &ld); dump_chunk(ptr,ld1,ld2); NGA_Release(g_a,lo,hi); return; } void print_GA_block_ij(int g_a,int tlo) //not used { int lo[2], hi[2], ld1, ld2, ld; double *ptr; //int--->double //implicit declared variables in fortran int me; me = GA_Nodeid(); NGA_Distribution(g_a, me, lo, hi); ld1 = hi[0] - lo[0] + 1; ld2 = hi[1] - lo[1] + 1; NGA_Access(g_a, &tlo, hi, &ptr, &ld); dump_chunk(ptr,ld1,ld2); NGA_Release(g_a,lo,hi); return; } void dump_chunk(double *a,int ld1,int ld2) //not used { //implicit declared variables in fortran int i,j; double trace; for (i = 0; i < MIN(10,ld1);i++) { for (j = 0; j < MIN(10,ld2); j++) { //printf("%10.4f\n",a[i][j]); printf("%10.4f\n",a[MIN(10,ld2)*i+j]); } } trace = 0.00; for (i=0;i #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "cscc.h" #include "scf.h" #include "twoel.h" using namespace globalFutures; typedef double ChunkArray[ichunk][ichunk]; struct TaskStats { long int taskid; int lo[4][2], hi[4][2]; bool executed; TaskStats() : taskid(-1), executed(false) { for (int i = 0; i < 4; i++) for (int j = 0; j < 2; j++) { lo[i][j] = -1; hi[i][j] = -1; } } // TaskStats }; typedef std::list TaskStatsList; typedef tbb::enumerable_thread_specific TIAccum; typedef tbb::enumerable_thread_specific PTaskStatsList; static void TwoElThreadTask(int g_a, int ndims, int plo[], int phi[], void *arg); static void TwoElThreadOMP(int g_a, int ndims, int plo[], int phi[], void *arg); struct TwoElArgs { double schwmax; long int itasklo, itaskhi; }; #ifdef DEBUG static const int maxTasks = 1000; #endif static double traccum = 0.0; static TIAccum tiaccum(0.0); static PTaskStatsList statsList; #ifdef DEBUG static double taskTimes[maxTasks]; static tbb::tbb_thread::id taskIDs[maxTasks]; static cpu_set_t sets[maxTasks]; static pthread_t threadIDs[maxTasks]; static long int tlo[maxTasks], thi[maxTasks]; static tbb::atomic taskPos; #endif static GFHandle tehndl; static int numTasks; static tbb::atomic execTasks; static void print_task_stats(int me, int nproc, int g_a); int GFInitialize() { int ret = globalFutures::GFInitialize(); tehndl = GFRegister(TwoElThreadTask, sizeof(TwoElArgs)); #ifdef DEBUG taskPos = 0U; #endif execTasks = 0L; // traccum = new double[nsheps]; // for (int i = 0; i < nsheps; i++) // traccum[i] = 0.0; return ret; } // GFInitialize void GFFinalize() { globalFutures::GFFinalize(); } // GFFinalize void twoel_orig(double schwmax, double *etwo, int nproc) { double f_ij[ichunk][ichunk], d_kl[ichunk][ichunk]; double f_ik[ichunk][ichunk], d_jl[ichunk][ichunk]; double s_ij[ichunk][ichunk], s_kl[ichunk][ichunk]; double one; long long int ijcnt, klcnt, ijklcnt; int lo[4], hi[4], lo_ik[2], hi_ik[2], lo_jl[2], hi_jl[2]; int i, j, k, l, iloc, jloc, kloc, lloc, ich, it, jt, kt, lt; int dotask, newtask, accum; int itask; double gg; ga_nbhdl_t f0, f1; #ifdef CLOG int *procs = NULL, *map = NULL, *phist = NULL, np = 0, ip; #endif // add in the two-electron contribution to the fock matrix; #ifdef CLOG procs = (int *)malloc(sizeof(int) * nproc); phist = (int *)calloc(nproc, sizeof(int)); map = (int *)malloc(sizeof(int) * 2 * nproc); #endif one = 1.00; ijcnt = icut1; klcnt = icut2; ijklcnt = icut3; GA_Zero(g_counter); ich = ichunk; dotask = next_4chunk(lo, hi, &it, &jt, &kt, <); itask = 0; newtask = 1; accum = 0; while (dotask) { lo_ik[0] = lo[0]; lo_ik[1] = lo[2]; hi_ik[0] = hi[0]; hi_ik[1] = hi[2]; lo_jl[0] = lo[1]; lo_jl[1] = lo[3]; hi_jl[0] = hi[1]; hi_jl[1] = hi[3]; #ifdef CLOG np = GF_Locate_region(g_schwarz, lo, hi, map, procs); if (np > 1) fprintf(clog, "Attention: multi-processor tile: %d\n", np); for (ip = 0; ip < np; ip++) { fprintf(clog, "itask: %d, g_schwarz tile: %d %d %d %d, proc: %d\n", itask, lo[0], lo[1], hi[0], hi[1], procs[ip]); phist[procs[ip]]++; } #endif GF_Get(g_schwarz, lo, hi, s_ij, &ich); clean_chunk(f_ij); clean_chunk(f_ik); for (i = lo[0]; i <= hi[0]; i++) { iloc = i - lo[0]; for (j = lo[1]; j <= hi[1]; j++) { jloc = j - lo[1]; if ((s_ij[iloc][jloc] * schwmax) < tol2e) icut1 = icut1 + (hi[2] - lo[2] + 1) * (hi[3] - lo[3] + 1); else { ga_nbhdl_t s, d0, d1; if (newtask) { GF_NbGet(g_schwarz, &lo[2], &hi[2], s_kl, &ich, &s); GF_NbGet(g_dens, &lo[2], &hi[2], d_kl, &ich, &d0); GF_NbGet(g_dens, lo_jl, hi_jl, d_jl, &ich, &d1); #ifdef CLOG np = GF_Locate_region(g_schwarz, &lo[2], &hi[2], map, procs); if (np > 1) fprintf(clog, "Attention: multi-processor tile: %d\n", np); for (ip = 0; ip < np; ip++) { fprintf(clog, "itask: %d, g_schwarz tile: %d %d %d %d, proc: %d\n", itask, lo[2], lo[3], hi[2], hi[3], procs[ip]); phist[procs[ip]]++; } np = GF_Locate_region(g_dens, lo_jl, hi_jl, map, procs); if (np > 1) fprintf(clog, "Attention: multi-processor tile: %d\n", np); for (ip = 0; ip < np; ip++) { fprintf(clog, "itask: %d, g_dens tile: %d %d %d %d, proc: %d\n", itask, lo_jl[0], lo_jl[1], hi_jl[0], hi_jl[1], procs[ip]); phist[procs[ip]]++; } #endif GF_NbWait(&s); } for (k = lo[2]; k <= hi[2]; k++) { kloc = k - lo[2]; for (l = lo[3]; l <= hi[3]; l++) { lloc = l - lo[3]; if (s_ij[iloc][jloc] * s_kl[kloc][lloc] < tol2e) icut2 = icut2 + 1; else { if (newtask) { GF_NbWait(&d0); GF_NbWait(&d1); newtask = 0; } g(&gg, i, j, k, l); f_ij[iloc][jloc] = f_ij[iloc][jloc] + gg * d_kl[kloc][lloc]; f_ik[iloc][kloc] = f_ik[iloc][kloc] - 0.50 * gg * d_jl[jloc][lloc]; icut3 = icut3 + 1; accum = 1; } } } if (newtask) { GF_NbWait(&d0); GF_NbWait(&d1); newtask = 0; } } } } if (accum) { GF_NbAcc(g_fock, lo, hi, f_ij, &ich, &one, &f0); GF_NbAcc(g_fock, lo_ik, hi_ik, f_ik, &ich, &one, &f1); } dotask = next_4chunk(lo, hi, &it, &jt, &kt, <); if (accum) { GF_NbWait(&f0); GF_NbWait(&f1); } if (dotask) { newtask = 1; accum = 0; #ifdef CLOG fprintf(clog, "\n"); #endif } itask++; } *etwo = 0.50 * contract_matrices(g_fock, g_dens); ijcnt = icut1 - ijcnt; klcnt = icut2 - klcnt; ijklcnt = icut3 - ijklcnt; icut4 = icut3; #ifdef CLOG fprintf(clog, "\n"); for (ip = 0; ip < nproc; ip++) fprintf(clog, "Proc: %d, cnt: %d\n", ip, phist[ip]); free(procs); free(phist); free(map); #endif if (icut3 > 0) return; // no integrals may be calculated if there is no work for; // this node (ichunk too big), or, something is wrong; printf("no two-electron integrals computed by node %d\n", GA_Nodeid()); printf("\n"); } // twoel_orig static tbb::atomic aicut1, aicut2, aicut3; #define DYNAMIC_TASKS 1 #define ACCURATE_TIMING 1 void twoel(double schwmax, double *etwo, int nproc) { int dotask, itask, ndim; int lo[4], hi[4], it, jt, kt, lt; long long int ijcnt, klcnt, ijklcnt; long int taskid, tidlo, tidhi, currLim, incrT, tmpi; double tr0, tr1, tr2, tr3, teaccum, tqaccum; long long int totTasks, procTasks; int me; // add in the two-electron contribution to the fock matrix; ijcnt = icut1; klcnt = icut2; ijklcnt = icut3; me = GA_Nodeid(); tmpi = ceil(static_cast(nbfn) / static_cast(ichunk)); incrT = tmpi * tmpi; totTasks = incrT * incrT; numTasks = ceil(static_cast(totTasks) / incrT); // n^2 integrals per task procTasks = ceil(static_cast(totTasks) / static_cast(nproc)); procTasks = ceil(static_cast(procTasks) / static_cast(nproc)); tidlo = me * procTasks; tidhi = (me + 1) * procTasks - 1; currLim = totTasks / incrT; #if 0 std::cout << "Proc: " << me << ", totTasks: " << totTasks << ", numTasks: " << numTasks << std::endl; std::cout << "Proc: " << me << ", procTasks: " << procTasks << ", tidlo: " << tidlo << ", tidhi: " << tidhi << std::flush << std::endl; #endif GA_Zero(g_counter); #ifdef DYNAMIC_TASKS taskid = acquire_tasks(numTasks); dotask = translate_task(taskid, lo, hi, &it, &jt, &kt, <); #endif // dotask = next_4chunk(lo, hi, &it, &jt, &kt, <); itask = 0; TwoElArgs teargs; teargs.schwmax = schwmax; ndim = GA_Ndim(g_schwarz); aicut1 = icut1; aicut2 = icut2; aicut3 = icut3; teaccum = 0.0; tqaccum = 0.0; tr0 = MPI_Wtime(); // for (taskid = tidlo; taskid <= tidhi; taskid++) { #ifndef DYNAMIC_TASKS for (taskid = tidlo; taskid <= tidhi; taskid += numTasks) { #else while (dotask) { #endif teargs.itasklo = taskid; #ifndef DYNAMIC_TASKS teargs.itaskhi = std::min(taskid + numTasks - 1, tidhi); #else teargs.itaskhi = taskid + numTasks - 1; #endif #ifndef DYNAMIC_TASKS dotask = translate_task(taskid, lo, hi, &it, &jt, &kt, <); #endif GFExecute(tehndl, g_schwarz, ndim, &lo[2], &hi[2], &teargs); // TwoElThreadOMP(g_schwarz, ndim, &lo[2], &hi[2], &teargs); #ifdef DYNAMIC_TASKS taskid = acquire_tasks(numTasks); dotask = translate_task(taskid, lo, hi, &it, &jt, &kt, <); #endif // dotask = next_4chunk(lo, hi, &it, &jt, &kt, <); itask++; if (itask % GFMaxConcurrency() == 0) GFQuiesce(tehndl); } tr1 = MPI_Wtime(); tr2 = MPI_Wtime(); GFAllQuiesce(tehndl); tr3 = MPI_Wtime(); traccum += (tr1 - tr0) + (tr3 - tr2); teaccum += (tr1 - tr0); tqaccum += (tr3 - tr2); #if 0 printf("Proc: %d, number of tasks executed: %d, exec. time: %f, quiesce time: %f\n", me, itask, teaccum, tqaccum); fflush(stdout); #endif #ifdef CLOG fprintf(clog, "After threaded execution\n"); fflush(clog); #endif icut1 = aicut1; icut2 = aicut2; icut3 = aicut3; *etwo = 0.50 * contract_matrices(g_fock, g_dens); ijcnt = icut1 - ijcnt; klcnt = icut2 - klcnt; ijklcnt = icut3 - ijklcnt; icut4 = icut3; print_task_stats(me, nproc, g_schwarz); if (icut3 > 0) return; // no integrals may be calculated if there is no work for; // this node (ichunk too big), or, something is wrong; printf("no two-electron integrals computed by node %d\n", me); printf("\n"); } // twoel void TwoElThreadTask(int g_a, int ndims, int plo[], int phi[], void *arg) { const double one = 1.0; TwoElArgs *teargs; double gg; int i, j, k, l, iloc, jloc, kloc, lloc, ich, it, jt, kt, lt; int lo[4], hi[4], lo_ik[2], hi_ik[2], lo_jl[2], hi_jl[2]; int newtask, accum; ChunkArray *f_ij, *d_kl; ChunkArray *f_ik, *d_jl; ChunkArray *s_ij, *s_kl; ga_nbhdl_t f0, f1; unsigned int lTaskPos; long long int laicut1 = 0L, laicut2 = 0L, laicut3 = 0L; long int lexecTasks = 0L; teargs = reinterpret_cast(arg); f_ij = reinterpret_cast(new ChunkArray); d_kl = reinterpret_cast(new ChunkArray); f_ik = reinterpret_cast(new ChunkArray); d_jl = reinterpret_cast(new ChunkArray); s_ij = reinterpret_cast(new ChunkArray); s_kl = reinterpret_cast(new ChunkArray); ich = ichunk; #ifdef DEBUG lTaskPos = taskPos++; taskIDs[lTaskPos] = tbb::this_tbb_thread::get_id(); threadIDs[lTaskPos] = pthread_self(); tlo[lTaskPos] = teargs->itasklo; thi[lTaskPos] = teargs->itaskhi; #endif #if 0 pthread_getaffinity_np(threadIDs[lTaskPos], sizeof(sets[lTaskPos]), &sets[lTaskPos]); unsigned int ccnt = 0U; for (int i = 0; i < CPU_SETSIZE; i++) if (CPU_ISSET(i, &sets[lTaskPos])) ccnt++; if (ccnt > 1U) { unsigned int lcore = cores.fetch_and_add(2U); CPU_ZERO(&sets[lTaskPos]); CPU_SET(lcore, &sets[lTaskPos]); pthread_setaffinity_np(threadIDs[lTaskPos], sizeof(sets[lTaskPos]), &sets[lTaskPos]); } #endif PTaskStatsList::reference ltlist = statsList.local(); tbb::tick_count t0, t1; t0 = tbb::tick_count::now(); for (long int itask = teargs->itasklo; itask <= teargs->itaskhi; itask++) { int dotask; newtask = 1; accum = 0; dotask = translate_task(itask, lo, hi, &it, &jt, &kt, <); if (!dotask) break; lo_ik[0] = lo[0]; lo_ik[1] = lo[2]; hi_ik[0] = hi[0]; hi_ik[1] = hi[2]; lo_jl[0] = lo[1]; lo_jl[1] = lo[3]; hi_jl[0] = hi[1]; hi_jl[1] = hi[3]; ltlist.push_back(TaskStats()); TaskStats &stats = ltlist.back(); stats.taskid = itask; stats.lo[0][0] = lo[0]; stats.lo[0][1] = lo[1]; stats.hi[0][0] = hi[0]; stats.hi[0][1] = hi[1]; GF_Get(g_schwarz, lo, hi, s_ij, &ich); clean_chunk(*f_ij); clean_chunk(*f_ik); for (i = lo[0]; i <= hi[0]; i++) { iloc = i - lo[0]; for (j = lo[1]; j <= hi[1]; j++) { jloc = j - lo[1]; if (((*s_ij)[iloc][jloc] * teargs->schwmax) < tol2e) // qthread_incr(&icut1, (hi[2] - lo[2] + 1) * (hi[3] - lo[3] + 1)); laicut1 += (hi[2] - lo[2] + 1) * (hi[3] - lo[3] + 1); else { ga_nbhdl_t s, d0, d1; if (newtask) { GF_NbGet(g_schwarz, &lo[2], &hi[2], *s_kl, &ich, &s); GF_NbGet(g_dens, &lo[2], &hi[2], *d_kl, &ich, &d0); GF_NbGet(g_dens, lo_jl, hi_jl, *d_jl, &ich, &d1); stats.lo[1][0] = lo[2]; stats.lo[1][1] = lo[3]; stats.hi[1][0] = hi[2]; stats.hi[1][1] = hi[3]; stats.lo[2][0] = lo[2]; stats.lo[2][1] = lo[3]; stats.hi[2][0] = hi[2]; stats.hi[2][1] = hi[3]; stats.lo[3][0] = lo_jl[0]; stats.lo[3][1] = lo_jl[1]; stats.hi[3][0] = hi_jl[0]; stats.hi[3][1] = hi_jl[1]; GF_NbWait(&s); } for (k = lo[2]; k <= hi[2]; k++) { kloc = k - lo[2]; for (l = lo[3]; l <= hi[3]; l++) { lloc = l - lo[3]; if ((*s_ij)[iloc][jloc] * (*s_kl)[kloc][lloc] < tol2e) // qthread_incr(&icut2, 1); laicut2++; else { if (newtask) { GF_NbWait(&d0); GF_NbWait(&d1); newtask = 0; stats.executed = true; lexecTasks++; } g(&gg, i, j, k, l); (*f_ij)[iloc][jloc] = (*f_ij)[iloc][jloc] + gg * (*d_kl)[kloc][lloc]; (*f_ik)[iloc][kloc] = (*f_ik)[iloc][kloc] - 0.50 * gg * (*d_jl)[jloc][lloc]; // qthread_incr(&icut3, 1); laicut3++; accum = 1; } } } if (newtask) { GF_NbWait(&d0); GF_NbWait(&d1); newtask = 0; } } } } if (accum) { GF_NbAcc(g_fock, lo, hi, *f_ij, &ich, const_cast(&one), &f0); GF_NbAcc(g_fock, lo_ik, hi_ik, *f_ik, &ich, const_cast(&one), &f1); GF_NbWait(&f0); GF_NbWait(&f1); } } aicut1 += laicut1; aicut2 += laicut2; aicut3 += laicut3; execTasks += lexecTasks; t1 = tbb::tick_count::now(); #ifdef ACCURATE_TIMING TIAccum::reference ltiacc = tiaccum.local(); ltiacc += (t1 - t0).seconds(); #endif #ifdef DEBUG taskTimes[lTaskPos] = (t1 - t0).seconds(); #endif delete [] f_ij; delete [] d_kl; delete [] f_ik; delete [] d_jl; delete [] s_ij; delete [] s_kl; // qthread_dincr(&traccum[qthread_shep(NULL)], tr1 - tr0); } // TwoElThreadTask void TwoElThreadOMP(int g_a, int ndims, int plo[], int phi[], void *arg) { const double one = 1.0; TwoElArgs *teargs; double gg; int i, j, k, l, iloc, jloc, kloc, lloc, ich, it, jt, kt, lt; int lo[4], hi[4], lo_ik[2], hi_ik[2], lo_jl[2], hi_jl[2]; int newtask, accum; ChunkArray *f_ij, *d_kl; ChunkArray *f_ik, *d_jl; ChunkArray *s_ij, *s_kl; ga_nbhdl_t f0, f1; unsigned int lTaskPos; teargs = reinterpret_cast(arg); ich = ichunk; long long int laicut1 = 0L, laicut2 = 0L, laicut3 = 0L; long int lexecTasks = 0L; #pragma omp parallel default(none), shared(teargs, g_schwarz, g_dens, g_fock, ich, aicut1, aicut2, aicut3, tiaccum, execTasks, statsList), private(f_ij, d_kl, f_ik, d_jl, s_ij, s_kl, gg, newtask, accum, lo, hi, it, jt, kt, lt, lo_ik, hi_ik, lo_jl, hi_jl, i, j, k, l, iloc, jloc, kloc, lloc, f0, f1, laicut1, laicut2, laicut3, lexecTasks) { tbb::tick_count t0, t1; t0 = tbb::tick_count::now(); f_ij = reinterpret_cast(new ChunkArray); d_kl = reinterpret_cast(new ChunkArray); f_ik = reinterpret_cast(new ChunkArray); d_jl = reinterpret_cast(new ChunkArray); s_ij = reinterpret_cast(new ChunkArray); s_kl = reinterpret_cast(new ChunkArray); laicut1 = 0L; laicut2 = 0L; laicut3 = 0L; lexecTasks = 0L; PTaskStatsList::reference ltlist = statsList.local(); #pragma omp for schedule(guided), nowait for (long int itask = teargs->itasklo; itask <= teargs->itaskhi; itask++) { int dotask; newtask = 1; accum = 0; dotask = translate_task(itask, lo, hi, &it, &jt, &kt, <); if (!dotask) continue; lo_ik[0] = lo[0]; lo_ik[1] = lo[2]; hi_ik[0] = hi[0]; hi_ik[1] = hi[2]; lo_jl[0] = lo[1]; lo_jl[1] = lo[3]; hi_jl[0] = hi[1]; hi_jl[1] = hi[3]; ltlist.push_back(TaskStats()); TaskStats &stats = ltlist.back(); stats.taskid = itask; stats.lo[0][0] = lo[0]; stats.lo[0][1] = lo[1]; stats.hi[0][0] = hi[0]; stats.hi[0][1] = hi[1]; GF_Get(g_schwarz, lo, hi, s_ij, &ich); clean_chunk(*f_ij); clean_chunk(*f_ik); for (i = lo[0]; i <= hi[0]; i++) { iloc = i - lo[0]; for (j = lo[1]; j <= hi[1]; j++) { jloc = j - lo[1]; if (((*s_ij)[iloc][jloc] * teargs->schwmax) < tol2e) // qthread_incr(&icut1, (hi[2] - lo[2] + 1) * (hi[3] - lo[3] + 1)); laicut1 += (hi[2] - lo[2] + 1) * (hi[3] - lo[3] + 1); else { ga_nbhdl_t s, d0, d1; if (newtask) { GF_NbGet(g_schwarz, &lo[2], &hi[2], *s_kl, &ich, &s); GF_NbGet(g_dens, &lo[2], &hi[2], *d_kl, &ich, &d0); GF_NbGet(g_dens, lo_jl, hi_jl, *d_jl, &ich, &d1); stats.lo[1][0] = lo[2]; stats.lo[1][1] = lo[3]; stats.hi[1][0] = hi[2]; stats.hi[1][1] = hi[3]; stats.lo[2][0] = lo[2]; stats.lo[2][1] = lo[3]; stats.hi[2][0] = hi[2]; stats.hi[2][1] = hi[3]; stats.lo[3][0] = lo_jl[0]; stats.lo[3][1] = lo_jl[1]; stats.hi[3][0] = hi_jl[0]; stats.hi[3][1] = hi_jl[1]; GF_NbWait(&s); } for (k = lo[2]; k <= hi[2]; k++) { kloc = k - lo[2]; for (l = lo[3]; l <= hi[3]; l++) { lloc = l - lo[3]; if ((*s_ij)[iloc][jloc] * (*s_kl)[kloc][lloc] < tol2e) // qthread_incr(&icut2, 1); laicut2++; else { if (newtask) { GF_NbWait(&d0); GF_NbWait(&d1); newtask = 0; lexecTasks++; stats.executed = true; } g(&gg, i, j, k, l); (*f_ij)[iloc][jloc] = (*f_ij)[iloc][jloc] + gg * (*d_kl)[kloc][lloc]; (*f_ik)[iloc][kloc] = (*f_ik)[iloc][kloc] - 0.50 * gg * (*d_jl)[jloc][lloc]; // qthread_incr(&icut3, 1); laicut3++; accum = 1; } } } if (newtask) { GF_NbWait(&d0); GF_NbWait(&d1); newtask = 0; } } } } if (accum) { GF_NbAcc(g_fock, lo, hi, *f_ij, &ich, const_cast(&one), &f0); GF_NbAcc(g_fock, lo_ik, hi_ik, *f_ik, &ich, const_cast(&one), &f1); GF_NbWait(&f0); GF_NbWait(&f1); } } delete [] f_ij; delete [] d_kl; delete [] f_ik; delete [] d_jl; delete [] s_ij; delete [] s_kl; aicut1 += laicut1; aicut2 += laicut2; aicut3 += laicut3; execTasks += lexecTasks; t1 = tbb::tick_count::now(); TIAccum::reference ltiacc = tiaccum.local(); ltiacc += (t1 - t0).seconds(); } } // TwoElThreadOMP void print_timing(int me) { #ifdef DEBUG typedef std::map ThreadMap; const int nthreads = tbb::task_scheduler_init::default_num_threads(); double accumTimes[nthreads]; ThreadMap tids; int pos = 0; for (int i = 0; i < nthreads; i++) accumTimes[i] = 0.0; for (int i = 0; i < maxTasks; i++) { bool newtid; ThreadMap::const_iterator iter = tids.find(taskIDs[i]); newtid = (iter == tids.end()); if (newtid) tids[taskIDs[i]] = pos++; } for (ThreadMap::const_iterator iter = tids.begin(); iter != tids.end(); iter++) std::cout << "Thread ID: " << iter->first << ", pos: " << iter->second << std::endl; for (int i = 0; i < maxTasks; i++) accumTimes[tids[taskIDs[i]]] += taskTimes[i]; for (int i = 0; i < nthreads; i++) std::cout << "Thread: " << i << ", time: " << accumTimes[i] << std::endl; std::cout << "Main thread ID: " << pthread_self() << std::endl; for (int i = 0; i < maxTasks; i++) { std::cout << "Task: " << i << ", pthread id: " << threadIDs[i] << ", tbb id: " << taskIDs[i] /* << ", CPU set: "; */; /* for (int j = 0; j < CPU_SETSIZE; j++) if (CPU_ISSET(j, &sets[i])) std::cout << j << " "; */ std::cout << ", tlo: " << tlo[i] << ", thi: " << thi[i]; std::cout << std::endl; } #endif if (me == 0) { printf("Time spent in twoel: %f\n", traccum); fflush(stdout); } #ifdef ACCURATE_TIMING std::ostringstream ostr; ostr << "clog.dat." << me; std::ofstream ofs(ostr.str().c_str(), std::ios_base::out | std::ios_base::app); ofs << "icut3: " << icut3 << ", execTasks: " << execTasks << ", time: "; for (TIAccum::const_iterator iter = tiaccum.begin(); iter != tiaccum.end(); iter++) ofs << *iter << " "; ofs << std::flush << std::endl; #endif } // print_timing void print_task_stats(int me, int nproc, int g_a) { std::ostringstream ostr; ostr << "tasks.dat." << me; std::ofstream ofs(ostr.str().c_str(), std::ios_base::out | std::ios_base::app); int *map = new int[2 * 2 * nproc]; int *procs = new int[nproc]; ofs << "Executed real tasks: " << execTasks << std::endl; #if 0 for (PTaskStatsList::const_iterator iter = statsList.begin(); iter != statsList.end(); iter++) { ofs << "List size: " << iter->size() << std::endl << std::endl; for (TaskStatsList::const_iterator iiter = iter->begin(); iiter != iter->end(); iiter++) { ofs << "task id: " << iiter->taskid << ", coords: "; for (int i = 0; i < 4; i++) { int np = GF_Locate_region(g_a, const_cast(iiter->lo[i]), const_cast(iiter->hi[i]), map, procs); for (int j = 0; j < 2; j++) ofs << "(" << iiter->lo[i][j] << ", " << iiter->hi[i][j] << ")"; ofs << ", on procs: "; for (int k = 0; k < np; k++) ofs << procs[k] << " "; ofs << std::endl; } } ofs << std::endl << std::endl; } #else int *hist = new int[nproc], *ghist = NULL; int taskcnt = 0; for (int i = 0; i < nproc; i++) hist[i] = 0; for (PTaskStatsList::const_iterator iter = statsList.begin(); iter != statsList.end(); iter++) for (TaskStatsList::const_iterator iiter = iter->begin(); iiter != iter->end(); iiter++) { for (int i = 1; i < 4; i++) { int np = GF_Locate_region(g_a, const_cast(iiter->lo[i]), const_cast(iiter->hi[i]), map, procs); for (int k = 0; k < np; k++) hist[procs[k]]++; } taskcnt++; } for (int i = 0; i < nproc; i++) ofs << "Proc: " << i << ", comms: " << hist[i] << std::endl; ofs << std::endl; ofs << "Total number of executed tasks: " << taskcnt << std::endl; ofs << std::endl << std::endl; if (me == 0) ghist = new int[nproc]; MPI_Reduce(hist, ghist, nproc, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { ofs << "Global histogram" << std::endl << std::endl; for (int i = 0; i < nproc; i++) ofs << "Proc: " << i << ", tasks: " << ghist[i] << std::endl; delete [] ghist; } delete [] hist; ofs << std::endl << std::endl; for (PTaskStatsList::const_iterator iter = statsList.begin(); iter != statsList.end(); iter++) for (TaskStatsList::const_iterator iiter = iter->begin(); iiter != iter->end(); iiter++) ofs << "Task ID: " << iiter->taskid << ", real: " << iiter->executed << std::endl; #endif delete [] map; delete [] procs; } // print_task_stats ga-5-3/gfutex/examples/scf/be.inpt0000640005473000001440000001335711704074222015761 0ustar d3n000users256 4 0.000 0.000 0.000 4 4.000 0.000 0.000 4 8.000 0.000 0.000 4 12.000 0.000 0.000 4 16.000 0.000 0.000 4 20.000 0.000 0.000 4 24.000 0.000 0.000 4 28.000 0.000 0.000 4 32.000 0.000 0.000 4 36.000 0.000 0.000 4 40.000 0.000 0.000 4 44.000 0.000 0.000 4 48.000 0.000 0.000 4 52.000 0.000 0.000 4 56.000 0.000 0.000 4 60.000 0.000 0.000 4 64.000 0.000 0.000 4 68.000 0.000 0.000 4 72.000 0.000 0.000 4 76.000 0.000 0.000 4 80.000 0.000 0.000 4 84.000 0.000 0.000 4 88.000 0.000 0.000 4 92.000 0.000 0.000 4 96.000 0.000 0.000 4 100.000 0.000 0.000 4 104.000 0.000 0.000 4 108.000 0.000 0.000 4 112.000 0.000 0.000 4 116.000 0.000 0.000 4 120.000 0.000 0.000 4 124.000 0.000 0.000 4 128.000 0.000 0.000 4 132.000 0.000 0.000 4 136.000 0.000 0.000 4 140.000 0.000 0.000 4 144.000 0.000 0.000 4 148.000 0.000 0.000 4 152.000 0.000 0.000 4 156.000 0.000 0.000 4 160.000 0.000 0.000 4 164.000 0.000 0.000 4 168.000 0.000 0.000 4 172.000 0.000 0.000 4 176.000 0.000 0.000 4 180.000 0.000 0.000 4 184.000 0.000 0.000 4 188.000 0.000 0.000 4 192.000 0.000 0.000 4 196.000 0.000 0.000 4 200.000 0.000 0.000 4 204.000 0.000 0.000 4 208.000 0.000 0.000 4 212.000 0.000 0.000 4 216.000 0.000 0.000 4 220.000 0.000 0.000 4 224.000 0.000 0.000 4 228.000 0.000 0.000 4 232.000 0.000 0.000 4 236.000 0.000 0.000 4 240.000 0.000 0.000 4 244.000 0.000 0.000 4 248.000 0.000 0.000 4 252.000 0.000 0.000 4 256.000 0.000 0.000 4 260.000 0.000 0.000 4 264.000 0.000 0.000 4 268.000 0.000 0.000 4 272.000 0.000 0.000 4 276.000 0.000 0.000 4 280.000 0.000 0.000 4 284.000 0.000 0.000 4 288.000 0.000 0.000 4 292.000 0.000 0.000 4 296.000 0.000 0.000 4 300.000 0.000 0.000 4 304.000 0.000 0.000 4 308.000 0.000 0.000 4 312.000 0.000 0.000 4 316.000 0.000 0.000 4 320.000 0.000 0.000 4 324.000 0.000 0.000 4 328.000 0.000 0.000 4 332.000 0.000 0.000 4 336.000 0.000 0.000 4 340.000 0.000 0.000 4 344.000 0.000 0.000 4 348.000 0.000 0.000 4 352.000 0.000 0.000 4 356.000 0.000 0.000 4 360.000 0.000 0.000 4 364.000 0.000 0.000 4 368.000 0.000 0.000 4 372.000 0.000 0.000 4 376.000 0.000 0.000 4 380.000 0.000 0.000 4 384.000 0.000 0.000 4 388.000 0.000 0.000 4 392.000 0.000 0.000 4 396.000 0.000 0.000 4 400.000 0.000 0.000 4 404.000 0.000 0.000 4 408.000 0.000 0.000 4 412.000 0.000 0.000 4 416.000 0.000 0.000 4 420.000 0.000 0.000 4 424.000 0.000 0.000 4 428.000 0.000 0.000 4 432.000 0.000 0.000 4 436.000 0.000 0.000 4 440.000 0.000 0.000 4 444.000 0.000 0.000 4 448.000 0.000 0.000 4 452.000 0.000 0.000 4 456.000 0.000 0.000 4 460.000 0.000 0.000 4 464.000 0.000 0.000 4 468.000 0.000 0.000 4 472.000 0.000 0.000 4 476.000 0.000 0.000 4 480.000 0.000 0.000 4 484.000 0.000 0.000 4 488.000 0.000 0.000 4 492.000 0.000 0.000 4 496.000 0.000 0.000 4 500.000 0.000 0.000 4 504.000 0.000 0.000 4 508.000 0.000 0.000 4 512.000 0.000 0.000 4 516.000 0.000 0.000 4 520.000 0.000 0.000 4 524.000 0.000 0.000 4 528.000 0.000 0.000 4 532.000 0.000 0.000 4 536.000 0.000 0.000 4 540.000 0.000 0.000 4 544.000 0.000 0.000 4 548.000 0.000 0.000 4 552.000 0.000 0.000 4 556.000 0.000 0.000 4 560.000 0.000 0.000 4 564.000 0.000 0.000 4 568.000 0.000 0.000 4 572.000 0.000 0.000 4 576.000 0.000 0.000 4 580.000 0.000 0.000 4 584.000 0.000 0.000 4 588.000 0.000 0.000 4 592.000 0.000 0.000 4 596.000 0.000 0.000 4 600.000 0.000 0.000 4 604.000 0.000 0.000 4 608.000 0.000 0.000 4 612.000 0.000 0.000 4 616.000 0.000 0.000 4 620.000 0.000 0.000 4 624.000 0.000 0.000 4 628.000 0.000 0.000 4 632.000 0.000 0.000 4 636.000 0.000 0.000 4 640.000 0.000 0.000 4 644.000 0.000 0.000 4 648.000 0.000 0.000 4 652.000 0.000 0.000 4 656.000 0.000 0.000 4 660.000 0.000 0.000 4 664.000 0.000 0.000 4 668.000 0.000 0.000 4 672.000 0.000 0.000 4 676.000 0.000 0.000 4 680.000 0.000 0.000 4 684.000 0.000 0.000 4 688.000 0.000 0.000 4 692.000 0.000 0.000 4 696.000 0.000 0.000 4 700.000 0.000 0.000 4 704.000 0.000 0.000 4 708.000 0.000 0.000 4 712.000 0.000 0.000 4 716.000 0.000 0.000 4 720.000 0.000 0.000 4 724.000 0.000 0.000 4 728.000 0.000 0.000 4 732.000 0.000 0.000 4 736.000 0.000 0.000 4 740.000 0.000 0.000 4 744.000 0.000 0.000 4 748.000 0.000 0.000 4 752.000 0.000 0.000 4 756.000 0.000 0.000 4 760.000 0.000 0.000 4 764.000 0.000 0.000 4 768.000 0.000 0.000 4 772.000 0.000 0.000 4 776.000 0.000 0.000 4 780.000 0.000 0.000 4 784.000 0.000 0.000 4 788.000 0.000 0.000 4 792.000 0.000 0.000 4 796.000 0.000 0.000 4 800.000 0.000 0.000 4 804.000 0.000 0.000 4 808.000 0.000 0.000 4 812.000 0.000 0.000 4 816.000 0.000 0.000 4 820.000 0.000 0.000 4 824.000 0.000 0.000 4 828.000 0.000 0.000 4 832.000 0.000 0.000 4 836.000 0.000 0.000 4 840.000 0.000 0.000 4 844.000 0.000 0.000 4 848.000 0.000 0.000 4 852.000 0.000 0.000 4 856.000 0.000 0.000 4 860.000 0.000 0.000 4 864.000 0.000 0.000 4 868.000 0.000 0.000 4 872.000 0.000 0.000 4 876.000 0.000 0.000 4 880.000 0.000 0.000 4 884.000 0.000 0.000 4 888.000 0.000 0.000 4 892.000 0.000 0.000 4 896.000 0.000 0.000 4 900.000 0.000 0.000 4 904.000 0.000 0.000 4 908.000 0.000 0.000 4 912.000 0.000 0.000 4 916.000 0.000 0.000 4 920.000 0.000 0.000 4 924.000 0.000 0.000 4 928.000 0.000 0.000 4 932.000 0.000 0.000 4 936.000 0.000 0.000 4 940.000 0.000 0.000 4 944.000 0.000 0.000 4 948.000 0.000 0.000 4 952.000 0.000 0.000 4 956.000 0.000 0.000 4 960.000 0.000 0.000 4 964.000 0.000 0.000 4 968.000 0.000 0.000 4 972.000 0.000 0.000 4 976.000 0.000 0.000 4 980.000 0.000 0.000 4 984.000 0.000 0.000 4 988.000 0.000 0.000 4 992.000 0.000 0.000 4 996.000 0.000 0.000 4 1000.000 0.000 0.000 4 1004.000 0.000 0.000 4 1008.000 0.000 0.000 4 1012.000 0.000 0.000 4 1016.000 0.000 0.000 4 1020.000 0.000 0.000 ga-5-3/gfutex/examples/scf/oneel.C0000640005473000001440000000154711704074222015703 0ustar d3n000users#include #include "cscc.h" #include "scf.h" #include "oneel.h" void oneel(double schwmax, double *eone, int nproc) { int lo[2], hi[2], i, j, iloc, jloc, ld; double work[ichunk][ichunk],tfock[ichunk][ichunk]; int dotask; // fill in the one-electron part of the fock matrix and; // compute the one-electron energy contribution; GA_Zero(g_counter); dotask = next_chunk(lo, hi); ld = ichunk; while (dotask) { NGA_Get(g_schwarz, lo, hi, work, &ld); for (i = lo[0];i <= hi[0];i++) { iloc = i - lo[0]; for (j = lo[1]; j <= hi[1]; j++) { jloc = j - lo[1]; tfock[iloc][jloc] = 0.00; if ((work[iloc][jloc] * schwmax) > tol2e) { tfock[iloc][jloc] = h(i, j); } } } NGA_Put(g_fock, lo, hi, tfock, &ld); dotask = next_chunk(lo, hi); } *eone = 0.50 * contract_matrices(g_fock, g_dens); } // oneel ga-5-3/gfutex/examples/scf/sum.h0000640005473000001440000000010611704074222015440 0ustar d3n000users#ifndef __SUM_H #define __SUM_H extern double sum(int g_a); #endif ga-5-3/gfutex/examples/scf/be.inpt.160000640005473000001440000000054411704074222016200 0ustar d3n000users16 4 0.000 0.000 0.000 4 4.000 0.000 0.000 4 8.000 0.000 0.000 4 12.000 0.000 0.000 4 16.000 0.000 0.000 4 20.000 0.000 0.000 4 24.000 0.000 0.000 4 28.000 0.000 0.000 4 32.000 0.000 0.000 4 36.000 0.000 0.000 4 40.000 0.000 0.000 4 44.000 0.000 0.000 4 48.000 0.000 0.000 4 52.000 0.000 0.000 4 56.000 0.000 0.000 4 60.000 0.000 0.000 ga-5-3/gfutex/examples/scf/oneel.h0000640005473000001440000000036511704074222015745 0ustar d3n000users#ifndef __ONEEL_H #define __ONEEL_H #ifdef __cplusplus extern "C" { #endif void oneel(double schwmax, double *eone, int nproc); void oneel_orig(double schwmax, double *eone, int nproc); #ifdef __cplusplus } #endif #endif /* __ONEEL_H */ ga-5-3/gfutex/examples/scf/twoel.C0000640005473000001440000007016511704074222015735 0ustar d3n000users#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "cscc.h" #include "scf.h" #include "twoel.h" using namespace globalFutures; namespace globalFutures { extern std::ofstream ofs; } static const int MaxTasks = 1000; static const int MaxExecTasks = 10; typedef double ChunkArray[ichunk][ichunk]; struct LocalBuffers { ChunkArray tf_ij, td_kl, tf_ik, td_jl, ts_ij, ts_kl; }; struct MapProcs { int *map, *procs; MapProcs() : map(NULL), procs(NULL) { }; ~MapProcs() { if (map) delete [] map; if (procs) delete [] procs; }; }; typedef tbb::enumerable_thread_specific TIAccum; typedef tbb::enumerable_thread_specific TLocalBuffers; typedef tbb::enumerable_thread_specific TMapProcs; struct RTaskData { int ntasks; long int tasks[MaxTasks]; RTaskData() : ntasks(0) { }; }; typedef std::map RTaskMap; typedef tbb::enumerable_thread_specific TRTaskMap; static void TwoElTaskExecute(int g_a, int ndims, int plo[], int phi[], void *arg); static void TwoElTaskCheck(int g_a, int ndims, int plo[], int phi[], void *arg); static void TwoElTaskSecondCheck(int g_a, int ndims, int plo[], int phi[], void *arg); static void TwoElTaskSend(int g_a, int ndims, int plo[], int phi[], void *arg); static void TwoElTaskRedist(int g_a, int ndims, int plo[], int phi[], void *arg); struct TwoElExecuteArgs { double schwmax; int ntasks; long int tasks[MaxExecTasks]; }; struct TwoElCheckArgs { double schwmax; long int taskid; int lo[4], hi[4]; }; struct TwoElSecondCheckArgs { int ntasks; long int tasks[MaxTasks]; TwoElSecondCheckArgs() : ntasks(0) { }; }; struct TwoElSendArgs { double schwmax; int ntasks; long int tasks[MaxTasks]; }; struct TwoElComputeArgs { double schwmax; }; struct TwoElTaskRedistArgs { int ntasks; long int tasks[MaxTasks]; }; struct RedistSched { int dst; int ntasks; }; typedef std::vector RedistPlan; typedef tbb::concurrent_queue TaskQueue; typedef tbb::concurrent_hash_map TaskFilter; static TIAccum tiaccum(0.0); static TLocalBuffers localBuffs; static TMapProcs mapProcs; static TRTaskMap ttmap; static int nprocs, nid, me; static GFHandle te_hndl, tch_hndl, t2ch_hndl, ts_hndl, trd_hndl; static tbb::atomic execTasks; static tbb::atomic aicut1, aicut2, aicut3; static bool filter_done = false; static TaskQueue *taskQueue = NULL, *ftaskQueue = NULL; static TaskFilter tfilter; static bool is_task_local(int g_a, int *lo, int *hi, int me, int *map, int *procs); static void add_rtask_and_send(RTaskMap &tmap, long int taskid, int dst, double schwmax); static void flush_rtasks(RTaskMap &tmap, double schwmax); static void flush_sctasks(); static void print_task_stats(int me); static void redistribute_work(int me, RedistPlan &redistPlan); static void send_redist_futures(int me, RedistPlan &redistPlan); static void execute_tasks(int me, double schwmax); static void execute_tasks_nf(int me, double schwmax); int GFInitialize() { int ret = globalFutures::GFInitialize(); te_hndl = GFRegister(TwoElTaskExecute, sizeof(TwoElExecuteArgs)); tch_hndl = GFRegister(TwoElTaskCheck, sizeof(TwoElCheckArgs)); t2ch_hndl = GFRegister(TwoElTaskSecondCheck, sizeof(TwoElSecondCheckArgs)); ts_hndl = GFRegister(TwoElTaskSend, sizeof(TwoElSendArgs)); trd_hndl = GFRegister(TwoElTaskRedist, sizeof(TwoElTaskRedistArgs)); execTasks = 0L; return ret; } // GFInitialize void GFFinalize() { if (taskQueue) delete taskQueue; if (ftaskQueue) delete ftaskQueue; globalFutures::GFFinalize(); } // GFFinalize void twoel_orig(double schwmax, double *etwo, int nproc) { double f_ij[ichunk][ichunk], d_kl[ichunk][ichunk]; double f_ik[ichunk][ichunk], d_jl[ichunk][ichunk]; double s_ij[ichunk][ichunk], s_kl[ichunk][ichunk]; double one; long long int ijcnt, klcnt, ijklcnt; int lo[4], hi[4], lo_ik[2], hi_ik[2], lo_jl[2], hi_jl[2]; int i, j, k, l, iloc, jloc, kloc, lloc, ich, it, jt, kt, lt; int dotask, newtask, accum; long int itask, taskcnt = 0L; int ctask; double gg; ga_nbhdl_t f0, f1; // add in the two-electron contribution to the fock matrix; one = 1.00; ijcnt = icut1; klcnt = icut2; ijklcnt = icut3; ich = ichunk; me = GA_Nodeid(); if (!ftaskQueue || ftaskQueue->empty()) { double t0, t1; assert(!taskQueue); t0 = MPI_Wtime(); taskQueue = new TaskQueue; taskcnt = 0L; GA_Zero(g_counter); dotask = next_4chunk(lo, hi, &it, &jt, &kt, <, &itask); ctask = 0; newtask = 1; accum = 0; while (dotask) { lo_ik[0] = lo[0]; lo_ik[1] = lo[2]; hi_ik[0] = hi[0]; hi_ik[1] = hi[2]; lo_jl[0] = lo[1]; lo_jl[1] = lo[3]; hi_jl[0] = hi[1]; hi_jl[1] = hi[3]; taskcnt++; GF_CachedGet(g_schwarz, lo, hi, s_ij, &ich); clean_chunk(f_ij); clean_chunk(f_ik); for (i = lo[0]; i <= hi[0]; i++) { iloc = i - lo[0]; for (j = lo[1]; j <= hi[1]; j++) { jloc = j - lo[1]; if ((s_ij[iloc][jloc] * schwmax) < tol2e) icut1 = icut1 + (hi[2] - lo[2] + 1) * (hi[3] - lo[3] + 1); else { ga_nbhdl_t s, d0, d1; if (newtask) { GF_CachedNbGet(g_schwarz, &lo[2], &hi[2], s_kl, &ich, &s); GF_CachedNbGet(g_dens, &lo[2], &hi[2], d_kl, &ich, &d0); GF_CachedNbGet(g_dens, lo_jl, hi_jl, d_jl, &ich, &d1); GF_CachedNbWait(&s); } for (k = lo[2]; k <= hi[2]; k++) { kloc = k - lo[2]; for (l = lo[3]; l <= hi[3]; l++) { lloc = l - lo[3]; if (s_ij[iloc][jloc] * s_kl[kloc][lloc] < tol2e) icut2 = icut2 + 1; else { if (newtask) { GF_CachedNbWait(&d0); GF_CachedNbWait(&d1); newtask = 0; execTasks++; } g(&gg, i, j, k, l); f_ij[iloc][jloc] = f_ij[iloc][jloc] + gg * d_kl[kloc][lloc]; f_ik[iloc][kloc] = f_ik[iloc][kloc] - 0.50 * gg * d_jl[jloc][lloc]; icut3 = icut3 + 1; accum = 1; } } } if (newtask) { GF_CachedNbWait(&d0); GF_CachedNbWait(&d1); newtask = 0; } } } } if (accum) { // GF_NbAcc(g_fock, lo, hi, f_ij, &ich, &one, &f0); GF_CachedAcc(g_fock, lo, hi, f_ij, &ich, &one); // GF_NbAcc(g_fock, lo_ik, hi_ik, f_ik, &ich, &one, &f1); GF_CachedAcc(g_fock, lo_ik, hi_ik, f_ik, &ich, &one); taskQueue->push(itask); } dotask = next_4chunk(lo, hi, &it, &jt, &kt, <, &itask); if (accum) { // GF_NbWait(&f0); // GF_NbWait(&f1); } if (dotask) { newtask = 1; accum = 0; } ctask++; } ftaskQueue = new TaskQueue(*taskQueue); delete taskQueue; taskQueue = NULL; t1 = MPI_Wtime(); TIAccum::reference ltiacc = tiaccum.local(); ltiacc += (t1 - t0); } else { assert(!taskQueue); taskQueue = new TaskQueue(*ftaskQueue); aicut1 = icut1; aicut2 = icut2; aicut3 = icut3; execute_tasks_nf(me, schwmax); // Actual execution of enqueued tasks delete taskQueue; taskQueue = NULL; icut1 = aicut1; icut2 = aicut2; icut3 = aicut3; } #if 1 std::ostringstream ostr; ostr << "tasks.dat." << me; std::ofstream ofsl(ostr.str().c_str(), std::ios_base::out | std::ios_base::app); ofsl << "Number of tasks inspected: " << taskcnt << std::endl; ofsl << "Executed real tasks: " << execTasks << std::endl << std::endl; for (TIAccum::const_iterator iter = tiaccum.begin(); iter != tiaccum.end(); iter++) ofsl << *iter << " "; ofsl << std::endl << std::endl; tiaccum.clear(); execTasks = 0L; #endif // Flush Fock matrix accumulate cache GF_CacheAccFlush(g_fock); *etwo = 0.50 * contract_matrices(g_fock, g_dens); ijcnt = icut1 - ijcnt; klcnt = icut2 - klcnt; ijklcnt = icut3 - ijklcnt; icut4 = icut3; GF_CacheReadOnlyEmpty(g_dens); if (icut3 > 0) return; // no integrals may be calculated if there is no work for; // this node (ichunk too big), or, something is wrong; printf("no two-electron integrals computed by node %d\n", me); printf("\n"); } // twoel_orig void twoel(double schwmax, double *etwo, int nproc) { int dotask, itask, ndim; int lo[4], hi[4], it, jt, kt, lt; long long int ijcnt, klcnt, ijklcnt; long int taskid, tidlo, tidhi, currLim, incrT, tmpi; double tr0, tr1, tr2, tr3, teaccum, tqaccum, tgaccum, traccum; double tg0, tg1, te0, te1, teqaccum; long long int totTasks, procTasks, ppos; // add in the two-electron contribution to the fock matrix; ijcnt = icut1; klcnt = icut2; ijklcnt = icut3; me = GA_Nodeid(); nid = GA_Cluster_nodeid(); #if 0 if (!ofs.is_open()) { std::ostringstream ostr; ostr << "diags.dat." << me; ofs.open(ostr.str().c_str(), std::ios_base::out | std::ios_base::app); } #endif nprocs = nproc; tmpi = ceil(static_cast(nbfn) / static_cast(ichunk)); incrT = tmpi * tmpi; totTasks = incrT * incrT; procTasks = ceil(static_cast(totTasks) / static_cast(nproc)); tidlo = me * procTasks; tidhi = (me + 1) * procTasks - 1; int *map = new int[2 * 2 * nproc]; int *procs = new int[nproc]; RTaskMap tmap; itask = 0; TwoElCheckArgs tcargs; tcargs.schwmax = schwmax; ndim = GA_Ndim(g_schwarz); aicut1 = icut1; aicut2 = icut2; aicut3 = icut3; teaccum = 0.0; tqaccum = 0.0; tgaccum = 0.0; traccum = 0.0; teqaccum = 0.0; execTasks = 0L; if (!ftaskQueue || ftaskQueue->empty()) { assert(!taskQueue); taskQueue = new TaskQueue; tr0 = MPI_Wtime(); for (taskid = tidlo; taskid <= tidhi; taskid++) { dotask = translate_task(taskid, lo, hi, &it, &jt, &kt, <); tcargs.taskid = taskid; bool is_local = is_task_local(g_schwarz, lo, hi, me, map, procs); if (dotask && is_local) { memcpy(tcargs.lo, lo, sizeof(lo)); memcpy(tcargs.hi, hi, sizeof(hi)); GFExecute(tch_hndl, g_schwarz, ndim, lo, hi, &tcargs); } else if (dotask && !is_local) add_rtask_and_send(tmap, taskid, procs[0], schwmax); itask++; } flush_rtasks(tmap, schwmax); tr1 = MPI_Wtime(); tr2 = MPI_Wtime(); GFAllQuiesce(); flush_sctasks(); GFAllQuiesce(); tr3 = MPI_Wtime(); traccum += (tr1 - tr0); tqaccum += (tr3 - tr2); RedistPlan plan; tg0 = MPI_Wtime(); redistribute_work(me, plan); send_redist_futures(me, plan); GFAllQuiesce(); tg1 = MPI_Wtime(); tgaccum += (tg1 - tg0); #if 1 size_t qsz = taskQueue->unsafe_size(); size_t *rqsz = new size_t[nproc]; memset(rqsz, 0, sizeof(size_t) * nproc); MPI_Allgather(&qsz, 1, MPI_UNSIGNED_LONG, rqsz, 1, MPI_UNSIGNED_LONG, MPI_COMM_WORLD); if (me == 0) { for (int i = 0; i < nproc; i++) std::cout << "rqsz[" << i << "]: " << rqsz[i] << std::endl; std::cout << std::flush; } delete [] rqsz; #endif ftaskQueue = new TaskQueue(*taskQueue); } else { assert(!taskQueue); taskQueue = new TaskQueue(*ftaskQueue); } te0 = MPI_Wtime(); execute_tasks(me, schwmax); // Actual execution of enqueued tasks te1 = MPI_Wtime(); tr2 = MPI_Wtime(); GFAllQuiesce(); filter_done = true; tr3 = MPI_Wtime(); teaccum += (te1 - te0); teqaccum += (tr3 - tr2); #if 1 std::ostringstream ostr; ostr << "tasks.dat." << me; std::ofstream ofsl(ostr.str().c_str(), std::ios_base::out | std::ios_base::app); ofsl << "Number of tasks inspected: " << itask << ", exec. time: " << teaccum << ", exec. quiesce time: " << teqaccum << ", check time: " << traccum << ", check quiesce time: " << tqaccum << ", redistribution time: " << tgaccum << std::endl; ofsl << "Executed real tasks: " << execTasks << std::endl << std::endl; for (TIAccum::const_iterator iter = tiaccum.begin(); iter != tiaccum.end(); iter++) ofsl << *iter << " "; ofsl << std::endl << std::endl; tiaccum.clear(); #endif icut1 = aicut1; icut2 = aicut2; icut3 = aicut3; #if 0 ofsl << "Cache hits g_schwarz: " << GF_CacheGetHits(g_schwarz) << ", misses: " << GF_CacheGetMisses(g_schwarz) << std::endl; ofsl << "Cache hits g_dens: " << GF_CacheGetHits(g_dens) << ", misses: " << GF_CacheGetMisses(g_dens) << std::endl; ofsl << "Cache hits g_fock: " << GF_CacheGetHits(g_fock) << ", misses: " << GF_CacheGetMisses(g_fock) << std::endl; #endif tr0 = MPI_Wtime(); // Flush Fock matrix accumulate cache GF_CacheAccFlush(g_fock); tr1 = MPI_Wtime(); ofsl << "Acc cache flush time: " << (tr1 - tr0) << std::endl << std::endl; *etwo = 0.50 * contract_matrices(g_fock, g_dens); ijcnt = icut1 - ijcnt; klcnt = icut2 - klcnt; ijklcnt = icut3 - ijklcnt; icut4 = icut3; #if 0 print_task_stats(me); #endif delete [] map; delete [] procs; delete taskQueue; taskQueue = NULL; GF_CacheReadOnlyEmpty(g_dens); if (icut3 > 0) return; // no integrals may be calculated if there is no work for; // this node (ichunk too big), or, something is wrong; printf("no two-electron integrals computed by node %d\n", me); printf("\n"); } // twoel void TwoElTaskExecute(int g_a, int ndims, int plo[], int phi[], void *arg) { const double one = 1.0; TwoElExecuteArgs *teargs; double gg; int i, j, k, l, iloc, jloc, kloc, lloc, ich, it, jt, kt, lt; int lo[4], hi[4], lo_ik[2], hi_ik[2], lo_jl[2], hi_jl[2]; int newtask, accum; ChunkArray *f_ij, *d_kl; ChunkArray *f_ik, *d_jl; ChunkArray *s_ij, *s_kl; ga_nbhdl_t f0, f1; unsigned int lTaskPos; long long int laicut1 = 0L, laicut2 = 0L, laicut3 = 0L; long int lexecTasks = 0L; teargs = reinterpret_cast(arg); TLocalBuffers::reference ltbuffs = localBuffs.local(); f_ij = <buffs.tf_ij; d_kl = <buffs.td_kl; f_ik = <buffs.tf_ik; d_jl = <buffs.td_jl; s_ij = <buffs.ts_ij; s_kl = <buffs.ts_kl; ich = ichunk; tbb::tick_count t0, t1; t0 = tbb::tick_count::now(); for (int pos = 0; pos < teargs->ntasks; pos++) { int dotask; long int taskid = teargs->tasks[pos]; ga_nbhdl_t s; if (filter_done) { TaskFilter::const_accessor cacc; bool found = tfilter.find(cacc, taskid); if (!found) continue; } newtask = 1; accum = 0; dotask = translate_task(taskid, lo, hi, &it, &jt, &kt, <); assert(dotask); lo_ik[0] = lo[0]; lo_ik[1] = lo[2]; hi_ik[0] = hi[0]; hi_ik[1] = hi[2]; lo_jl[0] = lo[1]; lo_jl[1] = lo[3]; hi_jl[0] = hi[1]; hi_jl[1] = hi[3]; GF_CachedGet(g_schwarz, lo, hi, *s_ij, &ich); GF_CachedNbGet(g_schwarz, &lo[2], &hi[2], *s_kl, &ich, &s); clean_chunk(*f_ij); clean_chunk(*f_ik); for (i = lo[0]; i <= hi[0]; i++) { iloc = i - lo[0]; for (j = lo[1]; j <= hi[1]; j++) { jloc = j - lo[1]; if (((*s_ij)[iloc][jloc] * teargs->schwmax) < tol2e) laicut1 += (hi[2] - lo[2] + 1) * (hi[3] - lo[3] + 1); else { ga_nbhdl_t d0, d1; if (newtask) { GF_CachedNbGet(g_dens, &lo[2], &hi[2], *d_kl, &ich, &d0); GF_CachedNbGet(g_dens, lo_jl, hi_jl, *d_jl, &ich, &d1); GF_CachedNbWait(&s); } for (k = lo[2]; k <= hi[2]; k++) { kloc = k - lo[2]; for (l = lo[3]; l <= hi[3]; l++) { lloc = l - lo[3]; if ((*s_ij)[iloc][jloc] * (*s_kl)[kloc][lloc] < tol2e) laicut2++; else { if (newtask) { GF_CachedNbWait(&d0); GF_CachedNbWait(&d1); newtask = 0; lexecTasks++; } g(&gg, i, j, k, l); (*f_ij)[iloc][jloc] = (*f_ij)[iloc][jloc] + gg * (*d_kl)[kloc][lloc]; (*f_ik)[iloc][kloc] = (*f_ik)[iloc][kloc] - 0.50 * gg * (*d_jl)[jloc][lloc]; laicut3++; accum = 1; } } } if (newtask) { GF_CachedNbWait(&d0); GF_CachedNbWait(&d1); newtask = 0; } } } } if (accum) { // GF_NbAcc(g_fock, lo, hi, *f_ij, &ich, const_cast(&one), &f0); // GF_NbAcc(g_fock, lo_ik, hi_ik, *f_ik, &ich, const_cast(&one), &f1); GF_CachedAcc(g_fock, lo, hi, *f_ij, &ich, const_cast(&one)); GF_CachedAcc(g_fock, lo_ik, hi_ik, *f_ik, &ich, const_cast(&one)); // GF_NbWait(&f0); // GF_NbWait(&f1); if (!filter_done) { TaskFilter::const_accessor cacc; tfilter.insert(cacc, taskid); } } } aicut1 += laicut1; aicut2 += laicut2; aicut3 += laicut3; execTasks += lexecTasks; t1 = tbb::tick_count::now(); TIAccum::reference ltiacc = tiaccum.local(); ltiacc += (t1 - t0).seconds(); } // TwoElTaskExecute void TwoElTaskCheck(int g_a, int ndims, int plo[], int phi[], void *arg) { TwoElCheckArgs *tcargs = reinterpret_cast(arg); bool rte = false; ChunkArray *s_ij; double *rs_ij, *ors_ij; int ich = ichunk; int accs0; int *map, *procs; bool hget0 = false; TLocalBuffers::reference ltbuffs = localBuffs.local(); TMapProcs::reference ltmapProcs = mapProcs.local(); if (!ltmapProcs.map) ltmapProcs.map = new int[2 * 2 * nprocs]; if (!ltmapProcs.procs) ltmapProcs.procs = new int[nprocs]; map = ltmapProcs.map; procs = ltmapProcs.procs; int np = GF_Locate_region(g_schwarz, tcargs->lo, tcargs->hi, map, procs); if (np > 1 || procs[0] != me) hget0 = true; if (hget0) { s_ij = <buffs.ts_ij; GF_CachedGet(g_schwarz, tcargs->lo, tcargs->hi, *s_ij, &ich); rs_ij = &(*s_ij)[0][0]; ors_ij = rs_ij; accs0 = ich; } else { GF_Access(g_schwarz, tcargs->lo, tcargs->hi, &rs_ij, &accs0); ors_ij = rs_ij; } for (int il = tcargs->lo[0]; il <= tcargs->hi[0] && !rte; il++) { int iloc = il - tcargs->lo[0]; rs_ij = (ors_ij + iloc * accs0); for (int jl = tcargs->lo[1]; jl <= tcargs->hi[1] && !rte; jl++) { int jloc = jl - tcargs->lo[1]; if ((*rs_ij * tcargs->schwmax) >= tol2e) rte = true; rs_ij++; } } if (rte) { #if 1 TRTaskMap::reference lttmap = ttmap.local(); np = GF_Locate_region(g_schwarz, &tcargs->lo[2], &tcargs->hi[2], map, procs); RTaskData &tdata = lttmap[procs[0]]; tdata.tasks[tdata.ntasks] = tcargs->taskid; tdata.ntasks++; if (tdata.ntasks == MaxTasks) { TwoElSecondCheckArgs tscargs; tscargs.ntasks = tdata.ntasks; memcpy(tscargs.tasks, tdata.tasks, sizeof(tdata.tasks[0]) * tdata.ntasks); GFExecute(t2ch_hndl, g_proc, 1, &procs[0], &procs[0], &tscargs); tdata.ntasks = 0; } #else taskQueue->push(tcargs->taskid); #endif } if (!hget0) GF_Release(g_schwarz, tcargs->lo, tcargs->hi); } // TwoElTaskCheck void TwoElTaskSecondCheck(int g_a, int ndims, int plo[], int phi[], void *arg) { TwoElSecondCheckArgs *tscargs = reinterpret_cast(arg); ChunkArray *s_kl; double *rs_kl, *ors_kl; int lo[4], hi[4], it, jt, kt, lt; long int taskid; int accs1; int ich = ichunk; int *map, *procs; TLocalBuffers::reference ltbuffs = localBuffs.local(); TMapProcs::reference ltmapProcs = mapProcs.local(); if (!ltmapProcs.map) ltmapProcs.map = new int[2 * 2 * nprocs]; if (!ltmapProcs.procs) ltmapProcs.procs = new int[nprocs]; map = ltmapProcs.map; procs = ltmapProcs.procs; for (int i = 0; i < tscargs->ntasks; i++) { bool rti = false; bool hget1 = false; taskid = tscargs->tasks[i]; bool dotask = translate_task(taskid, lo, hi, &it, &jt, &kt, <); int np = GF_Locate_region(g_schwarz, &lo[2], &hi[2], map, procs); if (np > 1 || procs[0] != me) hget1 = true; if (hget1) { s_kl = <buffs.ts_kl; GF_CachedGet(g_schwarz, &lo[2], &hi[2], *s_kl, &ich); rs_kl = &(*s_kl)[0][0]; ors_kl = rs_kl; accs1 = ich; } else { GF_Access(g_schwarz, &lo[2], &hi[2], &rs_kl, &accs1); ors_kl = rs_kl; } for (int kl = lo[2]; kl <= hi[2] && !rti; kl++) { int kloc = kl - lo[2]; rs_kl = (ors_kl + kloc * accs1); for (int ll = lo[3]; ll <= hi[3] && !rti; ll++) { int lloc = ll - lo[3]; if (fabs(*rs_kl) >= tol2e) rti = true; rs_kl++; } } if (rti) taskQueue->push(taskid); if (!hget1) GF_Release(g_schwarz, &lo[2], &hi[2]); } } // TwoElTaskSecondCheck void TwoElTaskSend(int g_a, int ndims, int plo[], int phi[], void *arg) { TwoElSendArgs *tsargs = reinterpret_cast(arg); int lo[4], hi[4], it, jt, kt, lt, ndim; bool dotask; long int taskid; TwoElCheckArgs tcargs; tcargs.schwmax = tsargs->schwmax; ndim = GF_Ndim(g_schwarz); for (int i = 0; i < tsargs->ntasks; i++) { taskid = tsargs->tasks[i]; dotask = translate_task(taskid, lo, hi, &it, &jt, &kt, <); tcargs.taskid = taskid; memcpy(tcargs.lo, lo, sizeof(lo)); memcpy(tcargs.hi, hi, sizeof(hi)); GFExecute(tch_hndl, g_schwarz, ndim, lo, hi, &tcargs); } } // TwoElTaskSend void TwoElTaskRedist(int g_a, int ndims, int plo[], int phi[], void *arg) { TwoElTaskRedistArgs *trargs = reinterpret_cast(arg); const int ntasks = trargs->ntasks; for (int i = 0; i < ntasks; i++) taskQueue->push(trargs->tasks[i]); } // TwoElTaskRedist void print_task_stats(int me) { std::ostringstream ostr; ostr << "tasks.dat." << me; std::ofstream ofs(ostr.str().c_str(), std::ios_base::out | std::ios_base::app); ofs << "Executed real tasks: " << execTasks << std::endl << std::endl; for (TIAccum::const_iterator iter = tiaccum.begin(); iter != tiaccum.end(); iter++) ofs << *iter << " "; ofs << std::endl << std::endl; } // print_task_stats bool is_task_local(int g_a, int *lo, int *hi, int me, int *map, int *procs) { int np = GF_Locate_region(g_a, lo, hi, map, procs); return (procs[0] == me); } // is_task_local void add_rtask_and_send(RTaskMap &tmap, long int taskid, int dst, double schwmax) { RTaskData &tdata = tmap[dst]; tdata.tasks[tdata.ntasks] = taskid; tdata.ntasks++; if (tdata.ntasks == MaxTasks) { TwoElSendArgs tsargs; tsargs.schwmax = schwmax; memcpy(tsargs.tasks, tdata.tasks, sizeof(tdata.tasks[0]) * tdata.ntasks); tsargs.ntasks = tdata.ntasks; GFExecute(ts_hndl, g_proc, 1, &dst, &dst, &tsargs); tdata.ntasks = 0; } } // add_rtask_and_send void flush_rtasks(RTaskMap &tmap, double schwmax) { TwoElSendArgs tsargs; tsargs.schwmax = schwmax; for (RTaskMap::iterator iter = tmap.begin(); iter != tmap.end(); iter++) { int dst = iter->first; memcpy(tsargs.tasks, iter->second.tasks, sizeof(iter->second.tasks[0]) * iter->second.ntasks); tsargs.ntasks = iter->second.ntasks; GFExecute(ts_hndl, g_proc, 1, &dst, &dst, &tsargs); iter->second.ntasks = 0; } } // flush_rtasks void flush_sctasks() { TwoElSecondCheckArgs tscargs; for (TRTaskMap::const_iterator iter = ttmap.begin(); iter != ttmap.end(); iter++) for (RTaskMap::const_iterator iiter = iter->begin(); iiter != iter->end(); iiter++) { int dst = iiter->first; memcpy(tscargs.tasks, iiter->second.tasks, sizeof(iiter->second.tasks[0]) * iiter->second.ntasks); tscargs.ntasks = iiter->second.ntasks; GFExecute(t2ch_hndl, g_proc, 1, &dst, &dst, &tscargs); } ttmap.clear(); } // flush_sctasks void redistribute_work(int me, RedistPlan &redistPlan) { size_t qsz = taskQueue->unsafe_size(); size_t *rqsz = new size_t[nprocs] /*, *crqsz = new size_t[nprocs] */; memset(rqsz, 0, sizeof(size_t) * nprocs); MPI_Allgather(&qsz, 1, MPI_UNSIGNED_LONG, rqsz, 1, MPI_UNSIGNED_LONG, MPI_COMM_WORLD); #if 1 if (me == 0) { for (int i = 0; i < nprocs; i++) std::cout << "rqsz[" << i << "]: " << rqsz[i] << std::endl; std::cout << std::flush; } #endif size_t tqsz = 0U, avgt, cavgt; for (int i = 0; i < nprocs; i++) tqsz += rqsz[i]; // Integer floor avgt = tqsz / nprocs; cavgt = (tqsz + nprocs - 1) / nprocs; #if 1 if (me == 0) { std::cout << "avgt: " << avgt << ", cavgt: " << cavgt << std::flush << std::endl; std::cout << "tqsz: " << tqsz << std::endl; for (int i = 0; i < nprocs; i++) if (rqsz[i] > avgt) std::cout << "over avgt: " << i << ", " << rqsz[i] - avgt << std::endl; } #endif // memcpy(crqsz, rqsz, sizeof(size_t) * nprocs); if (rqsz[me] < avgt) goto lend; for (int lme = 0; lme < nprocs; lme++) { for (int i = 0; i < nprocs; i++) { size_t tdd; if (i == me || i == lme) continue; if (rqsz[me] <= cavgt) break; if (rqsz[lme] <= cavgt) break; if (rqsz[i] < cavgt) { tdd = std::min(rqsz[lme] - cavgt, cavgt - rqsz[i]); if (tdd > 0) { rqsz[lme] -= tdd; rqsz[i] += tdd; } if (me == lme && tdd > 0) { RedistSched sch; sch.dst = i; sch.ntasks = tdd; redistPlan.push_back(sch); } } } } lend: #if 0 int *irqsz = new int[nprocs], *rrqsz = new int[nprocs]; memset(irqsz, 0, sizeof(int) * nprocs); memset(rrqsz, 0, sizeof(int) * nprocs); for (RedistPlan::const_iterator iter = redistPlan.begin(); iter != redistPlan.end(); iter++) { irqsz[me] -= iter->ntasks; irqsz[iter->dst] += iter->ntasks; } MPI_Reduce(irqsz, rrqsz, nprocs, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { for (int i = 0; i < nprocs; i++) crqsz[i] += rrqsz[i]; } delete [] rrqsz; delete [] irqsz; std::ostringstream ostr; ostr << "tasks.dat." << me; std::ofstream ofs(ostr.str().c_str(), std::ios_base::out | std::ios_base::app); if (me == 0) { size_t sqsz = 0U; for (int i = 0; i < nprocs; i++) { sqsz += crqsz[i]; ofs << "crqsz[" << i << "]: " << crqsz[i] << std::endl; } ofs << "Total tasks: " << sqsz << std::endl; ofs << std::endl << std::endl; } for (RedistPlan::const_iterator iter = redistPlan.begin(); iter != redistPlan.end(); iter++) ofs << "Send: " << iter->ntasks << ", to proc: " << iter->dst << std::endl; #endif delete [] rqsz; // delete [] crqsz; } // redistribute_work void send_redist_futures(int me, RedistPlan &redistPlan) { for (RedistPlan::iterator iter = redistPlan.begin(); iter != redistPlan.end(); iter++) { long int taskid; bool popped; int outer = (iter->ntasks + MaxTasks - 1) / MaxTasks; int lastBatch = iter->ntasks - (outer - 1) * MaxTasks; if (lastBatch < 0) lastBatch = iter->ntasks; for (int nit = 0; nit < outer; nit++) { TwoElTaskRedistArgs trargs; int pos = 0; int tasksToPop = (nit == (outer - 1)) ? lastBatch : MaxTasks; trargs.ntasks = tasksToPop; for (int i = 0; i < tasksToPop; i++) { popped = taskQueue->try_pop(taskid); assert(popped); trargs.tasks[pos] = taskid; pos++; } GFExecute(trd_hndl, g_proc, 1, &iter->dst, &iter->dst, &trargs); } } } // send_redist_futures void execute_tasks(int me, double schwmax) { long int taskid; bool popped; int qsz = taskQueue->unsafe_size(); int outer = (qsz + MaxExecTasks - 1) / MaxExecTasks; int lastBatch = qsz - (outer - 1) * MaxExecTasks; if (lastBatch < 0) lastBatch = qsz; for (int nit = 0; nit < outer; nit++) { TwoElExecuteArgs teargs; int pos = 0; int tasksToPop = (nit == (outer - 1)) ? lastBatch : MaxExecTasks; teargs.schwmax = schwmax; teargs.ntasks = tasksToPop; for (int i = 0; i < tasksToPop; i++) { popped = taskQueue->try_pop(taskid); assert(popped); teargs.tasks[pos] = taskid; pos++; } GFExecute(te_hndl, g_proc, 1, &me, &me, &teargs); } } // execute_tasks void execute_tasks_nf(int me, double schwmax) { long int taskid; bool popped; int qsz = taskQueue->unsafe_size(); int outer = (qsz + MaxExecTasks - 1) / MaxExecTasks; int lastBatch = qsz - (outer - 1) * MaxExecTasks; if (lastBatch < 0) lastBatch = qsz; for (int nit = 0; nit < outer; nit++) { TwoElExecuteArgs teargs; int pos = 0; int tasksToPop = (nit == (outer - 1)) ? lastBatch : MaxExecTasks; teargs.schwmax = schwmax; teargs.ntasks = tasksToPop; for (int i = 0; i < tasksToPop; i++) { popped = taskQueue->try_pop(taskid); assert(popped); teargs.tasks[pos] = taskid; pos++; } TwoElTaskExecute(g_proc, 1, &me, &me, &teargs); } } // execute_tasks_nf ga-5-3/gfutex/examples/scf/timer.c0000640005473000001440000000207211704074222015753 0ustar d3n000users#include #include double timer(void) { // return the time since the last call to timer. // must be initialized by calling once and throwing away the // value // ... use cpu time on multi-user machines // ... use elapsed time on dedicated or single user machines. // //mdc*if unix // real*4 dtime, tt(2) // timer = dble(dtime(tt)) //mdc*elseif tcgmsg //Id: timer.F,v 1.1 2005-03-08 23:58:03 d3g293 Exp $ #if 0 const double million = 1.0e6; static struct timeval tvlast; static int initted = 0; struct timeval tv; struct timezone tz; double ret, t0, t1; gettimeofday(&tv, &tz); if (!initted) { tvlast = tv; initted = 1; } t0 = tvlast.tv_sec * million + tvlast.tv_usec; t1 = tv.tv_sec * million + tvlast.tv_usec; ret = (t1 - t0) / million; tvlast = tv; return ret; #else static int initted = 0; static double pt = 0.0; double ct = 0.0, ret; if (!initted) { pt = MPI_Wtime(); initted = 1; } ct = MPI_Wtime(); ret = ct - pt; pt = ct; return ret; #endif } ga-5-3/COPYRIGHT0000640005473000001440000000614311470303441012070 0ustar d3n000usersCopyright (c) 2006, Battelle Memorial Institute All rights reserved. 1. Battelle Memorial Institute (hereinafter Battelle) hereby grants permission to any person or entity lawfully obtaining a copy of this software and associated documentation files (hereinafter "the Software") to redistribute and use the Software in source and binary forms, with or without modification. Such person or entity may use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and may permit others to do so, subject to the following conditions: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimers. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Other than as used herein, neither the name Battelle Memorial Institute or Battelle may be used in any form whatsoever without the express written consent of Battelle. 2. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BATTELLE OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3. The Software was produced by BMI under Contract No. DE-AC05-76RL01830 with the Department of Energy. For five (5) years from February 23, 2006, the Government is granted for itself and others acting on its behalf a nonexclusive, paid-up, irrevocable worldwide license in this data to reproduce, prepare derivative works, and perform publicly and display publicly, by or on behalf of the Government. There is provision for the possible extension of the term of this license. Subsequent to that period or any extension granted, the Government is granted for itself and others acting on its behalf a nonexclusive, paid-up, irrevocable worldwide license in this data to reproduce, prepare derivative works, distribute copies to the public, perform publicly and display publicly, and to permit others to do so. The specific term of the license can be identified by inquiry made to Battelle or DOE. Neither the United States nor the United States Department of Energy, nor any of their employees, makes any warranty, express or implied, or assumes any legal liability or responsibility for the accuracy, completeness or usefulness of any data, apparatus, product or process disclosed, or represents that its use would not infringe privately owned rights. Open Source License (0102) ga-5-3/tools/0000750005473000001440000000000012275260561011741 5ustar d3n000usersga-5-3/tools/gpwapigen.py0000750005473000001440000000740011651347004014273 0ustar d3n000users#!/usr/bin/env python '''Generate the gp-wapi.c source from the gp-papi.h header.''' import sys def get_signatures(header): # first, gather all function signatures from gp-papi.h aka argv[1] accumulating = False signatures = [] current_signature = '' EXTERN = 'extern' SEMICOLON = ';' for line in open(header): line = line.strip() # remove whitespace before and after line if not line: continue # skip blank lines if EXTERN in line and SEMICOLON in line: signatures.append(line) elif EXTERN in line: current_signature = line accumulating = True elif SEMICOLON in line and accumulating: current_signature += line signatures.append(current_signature) accumulating = False elif accumulating: current_signature += line return signatures class FunctionArgument(object): def __init__(self, signature): self.pointer = signature.count('*') self.array = '[' in signature signature = signature.replace('*','').strip() signature = signature.replace('[','').strip() signature = signature.replace(']','').strip() self.type,self.name = signature.split() def __str__(self): ret = self.type[:] ret += ' ' for p in range(self.pointer): ret += '*' ret += self.name if self.array: ret += '[]' return ret class Function(object): def __init__(self, signature): signature = signature.replace('extern','').strip() self.return_type,signature = signature.split(None,1) self.return_type = self.return_type.strip() signature = signature.strip() self.name,signature = signature.split('(',1) self.name = self.name.strip() signature = signature.replace(')','').strip() signature = signature.replace(';','').strip() self.args = [] if signature: for arg in signature.split(','): self.args.append(FunctionArgument(arg.strip())) def get_call(self, name=None): sig = '' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += arg.name sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def get_signature(self, name=None): sig = self.return_type[:] sig += ' ' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += str(arg) sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def __str__(self): return self.get_signature() if __name__ == '__main__': if len(sys.argv) != 2: print 'incorrect number of arguments' print 'usage: gpwapigen.py > ' sys.exit(len(sys.argv)) # print headers print ''' #if HAVE_CONFIG_H # include "config.h" #endif #include "gp-papi.h" #include "typesf2c.h" ''' functions = {} # parse signatures into the Function class for sig in get_signatures(sys.argv[1]): function = Function(sig) functions[function.name] = function # now process the functions for name in sorted(functions): func = functions[name] maybe_return = '' if 'void' not in func.return_type: maybe_return = 'return ' func = functions[name] wnga_name = name.replace('pgp_','wgp_') print ''' %s { %s%s; } ''' % (func.get_signature(wnga_name), maybe_return, func.get_call()) ga-5-3/tools/wapigen_counts.py0000750005473000001440000001130111651347004015332 0ustar d3n000users#!/usr/bin/env python '''Generate the wapi_counts.c source from the ga-papi.h header.''' import sys def get_signatures(header): # first, gather all function signatures from ga-papi.h aka argv[1] accumulating = False signatures = [] current_signature = '' EXTERN = 'extern' SEMICOLON = ';' for line in open(header): line = line.strip() # remove whitespace before and after line if not line: continue # skip blank lines if EXTERN in line and SEMICOLON in line: signatures.append(line) elif EXTERN in line: current_signature = line accumulating = True elif SEMICOLON in line and accumulating: current_signature += line signatures.append(current_signature) accumulating = False elif accumulating: current_signature += line return signatures class FunctionArgument(object): def __init__(self, signature): self.pointer = signature.count('*') self.array = '[' in signature signature = signature.replace('*','').strip() signature = signature.replace('[','').strip() signature = signature.replace(']','').strip() self.type,self.name = signature.split() def __str__(self): ret = self.type[:] ret += ' ' for p in range(self.pointer): ret += '*' ret += self.name if self.array: ret += '[]' return ret class Function(object): def __init__(self, signature): signature = signature.replace('extern','').strip() self.return_type,signature = signature.split(None,1) self.return_type = self.return_type.strip() signature = signature.strip() self.name,signature = signature.split('(',1) self.name = self.name.strip() signature = signature.replace(')','').strip() signature = signature.replace(';','').strip() self.args = [] if signature: for arg in signature.split(','): self.args.append(FunctionArgument(arg.strip())) def get_call(self, name=None): sig = '' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += arg.name sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def get_signature(self, name=None): sig = self.return_type[:] sig += ' ' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += str(arg) sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def __str__(self): return self.get_signature() if __name__ == '__main__': if len(sys.argv) != 2: print 'incorrect number of arguments' print 'usage: wapigen_counts.py > ' sys.exit(len(sys.argv)) # print headers print ''' #if HAVE_CONFIG_H # include "config.h" #endif #include "ga-papi.h" #include "typesf2c.h" ''' functions = {} # parse signatures into the Function class for sig in get_signatures(sys.argv[1]): function = Function(sig) functions[function.name] = function # for each function, generate a static count for name in sorted(functions): print 'static long count_%s = 0;' % name print '' # now process the functions for name in sorted(functions): func = functions[name] if 'terminate' in name: continue maybe_return = '' if 'void' not in func.return_type: maybe_return = 'return ' func = functions[name] wnga_name = name.replace('pnga_','wnga_') print ''' %s { ++count_%s; %s%s; } ''' % (func.get_signature(wnga_name), name, maybe_return, func.get_call()) # prepare to output the terminate function name = 'pnga_terminate' wnga_name = name.replace('pnga_','wnga_') func = functions[name] the_code = '' # establish 'the_code' to use in the body of terminate # it's printing the count of each function if it was called at least once for name in sorted(functions): the_code += ''' if (count_%s) { printf("%s %%ld\\n", count_%s); } ''' % (name, name, name) # output the terminate function print '''%s { ++count_pnga_terminate; %s; /* don't dump info if terminate more than once */ if (1 == count_pnga_terminate) { %s } } ''' % (func.get_signature(wnga_name), func.get_call(), the_code) ga-5-3/tools/wapigen.py0000750005473000001440000000740011651347004013744 0ustar d3n000users#!/usr/bin/env python '''Generate the ga-wapi.c source from the ga-papi.h header.''' import sys def get_signatures(header): # first, gather all function signatures from ga-papi.h aka argv[1] accumulating = False signatures = [] current_signature = '' EXTERN = 'extern' SEMICOLON = ';' for line in open(header): line = line.strip() # remove whitespace before and after line if not line: continue # skip blank lines if EXTERN in line and SEMICOLON in line: signatures.append(line) elif EXTERN in line: current_signature = line accumulating = True elif SEMICOLON in line and accumulating: current_signature += line signatures.append(current_signature) accumulating = False elif accumulating: current_signature += line return signatures class FunctionArgument(object): def __init__(self, signature): self.pointer = signature.count('*') self.array = '[' in signature signature = signature.replace('*','').strip() signature = signature.replace('[','').strip() signature = signature.replace(']','').strip() self.type,self.name = signature.split() def __str__(self): ret = self.type[:] ret += ' ' for p in range(self.pointer): ret += '*' ret += self.name if self.array: ret += '[]' return ret class Function(object): def __init__(self, signature): signature = signature.replace('extern','').strip() self.return_type,signature = signature.split(None,1) self.return_type = self.return_type.strip() signature = signature.strip() self.name,signature = signature.split('(',1) self.name = self.name.strip() signature = signature.replace(')','').strip() signature = signature.replace(';','').strip() self.args = [] if signature: for arg in signature.split(','): self.args.append(FunctionArgument(arg.strip())) def get_call(self, name=None): sig = '' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += arg.name sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def get_signature(self, name=None): sig = self.return_type[:] sig += ' ' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += str(arg) sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def __str__(self): return self.get_signature() if __name__ == '__main__': if len(sys.argv) != 2: print 'incorrect number of arguments' print 'usage: wapigen.py > ' sys.exit(len(sys.argv)) # print headers print ''' #if HAVE_CONFIG_H # include "config.h" #endif #include "ga-papi.h" #include "typesf2c.h" ''' functions = {} # parse signatures into the Function class for sig in get_signatures(sys.argv[1]): function = Function(sig) functions[function.name] = function # now process the functions for name in sorted(functions): func = functions[name] maybe_return = '' if 'void' not in func.return_type: maybe_return = 'return ' func = functions[name] wnga_name = name.replace('pnga_','wnga_') print ''' %s { %s%s; } ''' % (func.get_signature(wnga_name), maybe_return, func.get_call()) ga-5-3/tools/wapigen_timers.py0000750005473000001440000001454112274750307015341 0ustar d3n000users#!/usr/bin/env python '''Generate the wapi_times.c source from the ga-papi.h header.''' import sys def get_signatures(header): # first, gather all function signatures from ga-papi.h aka argv[1] accumulating = False signatures = [] current_signature = '' EXTERN = 'extern' SEMICOLON = ';' for line in open(header): line = line.strip() # remove whitespace before and after line if not line: continue # skip blank lines if EXTERN in line and SEMICOLON in line: signatures.append(line) elif EXTERN in line: current_signature = line accumulating = True elif SEMICOLON in line and accumulating: current_signature += line signatures.append(current_signature) accumulating = False elif accumulating: current_signature += line return signatures class FunctionArgument(object): def __init__(self, signature): self.pointer = signature.count('*') self.array = '[' in signature signature = signature.replace('*','').strip() signature = signature.replace('[','').strip() signature = signature.replace(']','').strip() self.type,self.name = signature.split() def __str__(self): ret = self.type[:] ret += ' ' for p in range(self.pointer): ret += '*' ret += self.name if self.array: ret += '[]' return ret class Function(object): def __init__(self, signature): signature = signature.replace('extern','').strip() self.return_type,signature = signature.split(None,1) self.return_type = self.return_type.strip() signature = signature.strip() self.name,signature = signature.split('(',1) self.name = self.name.strip() signature = signature.replace(')','').strip() signature = signature.replace(';','').strip() self.args = [] if signature: for arg in signature.split(','): self.args.append(FunctionArgument(arg.strip())) def get_call(self, name=None): sig = '' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += arg.name sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def get_signature(self, name=None): sig = self.return_type[:] sig += ' ' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += str(arg) sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def __str__(self): return self.get_signature() if __name__ == '__main__': if len(sys.argv) != 2: print 'incorrect number of arguments' print 'usage: wapigen_counts.py > ' sys.exit(len(sys.argv)) # print headers print ''' #if HAVE_CONFIG_H # include "config.h" #endif #include #include "ga-papi.h" #include "typesf2c.h" static int me; static int nproc; ''' functions = {} # parse signatures into the Function class for sig in get_signatures(sys.argv[1]): function = Function(sig) functions[function.name] = function # for each function, generate a static count for name in sorted(functions): print 'static long count_%s = 0;' % name print '' # for each function, generate a static time for name in sorted(functions): print 'static double time_%s = 0;' % name print '' # now process the functions for name in sorted(functions): func = functions[name] if 'terminate' in name: continue elif 'initialized' in name: pass # don't skip pnga_initialized elif 'initialize' in name: continue func = functions[name] wnga_name = name.replace('pnga_','wnga_') if 'void' not in func.return_type: print ''' %s { %s return_value; double local_start, local_stop; ++count_%s; local_start = MPI_Wtime(); return_value = %s; local_stop = MPI_Wtime(); time_%s += local_stop - local_start; return return_value; } ''' % (func.get_signature(wnga_name), func.return_type, name, func.get_call(), name) else: print ''' %s { double local_start, local_stop; ++count_%s; local_start = MPI_Wtime(); %s; local_stop = MPI_Wtime(); time_%s += local_stop - local_start; } ''' % (func.get_signature(wnga_name), name, func.get_call(), name) # prepare to output the initialize function name = 'pnga_initialize' wnga_name = name.replace('pnga_','wnga_') func = functions[name] # output the initialize function print '''%s { ++count_pnga_initialize; %s; MPI_Comm_rank(MPI_COMM_WORLD, &me); MPI_Comm_size(MPI_COMM_WORLD, &nproc); } ''' % (func.get_signature(wnga_name), func.get_call()) # prepare to output the initialize_ltd function name = 'pnga_initialize_ltd' wnga_name = name.replace('pnga_','wnga_') func = functions[name] # output the initialize_ltd function print '''%s { ++count_pnga_initialize_ltd; %s; MPI_Comm_rank(MPI_COMM_WORLD, &me); MPI_Comm_size(MPI_COMM_WORLD, &nproc); } ''' % (func.get_signature(wnga_name), func.get_call()) # prepare to output the terminate function name = 'pnga_terminate' wnga_name = name.replace('pnga_','wnga_') func = functions[name] the_code = '' # establish 'the_code' to use in the body of terminate # it's printing the count of each function if it was called at least once the_code += ''' double recvbuf = 0.0; ''' for name in sorted(functions): the_code += ''' MPI_Reduce(&time_%s, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("%s,%%ld,%%lf\\n", count_%s, recvbuf); } ''' % (name, name, name) # output the terminate function print '''%s { ++count_pnga_terminate; %s; /* don't dump info if terminate more than once */ if (1 == count_pnga_terminate) { %s } } ''' % (func.get_signature(wnga_name), func.get_call(), the_code) ga-5-3/tools/gp-wapi.c0000640005473000001440000000307011651347004013445 0ustar d3n000users #if HAVE_CONFIG_H # include "config.h" #endif #include "gp-papi.h" #include "typesf2c.h" logical wgp_allocate(Integer g_p) { return pgp_allocate(g_p); } void wgp_assign_local_element(Integer g_p, Integer *subscript, void *ptr, Integer size) { pgp_assign_local_element(g_p, subscript, ptr, size); } Integer wgp_create_handle() { return pgp_create_handle(); } void wgp_debug(Integer g_p) { pgp_debug(g_p); } logical wgp_destroy(Integer g_p) { return pgp_destroy(g_p); } void wgp_distribution(Integer g_p, Integer proc, Integer *lo, Integer *hi) { pgp_distribution(g_p, proc, lo, hi); } void wgp_free(void *ptr) { pgp_free(ptr); } void* wgp_free_local_element(Integer g_p, Integer *subscript) { pgp_free_local_element(g_p, subscript); } void wgp_get(Integer g_p, Integer *lo, Integer *hi, void *buf, void **buf_ptr, Integer *ld, void *buf_size, Integer *ld_sz, Integer *size, Integer isize) { pgp_get(g_p, lo, hi, buf, buf_ptr, ld, buf_size, ld_sz, size, isize); } Integer wgp_get_dimension(Integer g_p) { return pgp_get_dimension(g_p); } void wgp_get_size(Integer g_p, Integer *lo, Integer *hi, Integer *size, Integer isize) { pgp_get_size(g_p, lo, hi, size, isize); } void wgp_initialize() { pgp_initialize(); } void* wgp_malloc(size_t size) { pgp_malloc(size); } void wgp_set_chunk(Integer g_p, Integer *chunk) { pgp_set_chunk(g_p, chunk); } void wgp_set_dimensions(Integer g_p, Integer ndim, Integer *dims) { pgp_set_dimensions(g_p, ndim, dims); } void wgp_terminate() { pgp_terminate(); } ga-5-3/tools/ga-config.in.m4sh0000640005473000001440000000434512115161655015001 0ustar d3n000usersdnl run "autom4te -l m4sh ga-config.in.m4sh > ga-config.in" AS_INIT f77="@F77@" cc="@CC@" cppflags="@SCALAPACK_CPPFLAGS@ @LAPACK_CPPFLAGS@ @BLAS_CPPFLAGS@ @GA_MP_CPPFLAGS@ @ARMCI_NETWORK_CPPFLAGS@ -I@prefix@/include" cflags="@GA_COPT@" fflags="@GA_FOPT@ @FFLAG_INT@" fint="@FFLAG_INT@" ldflags="@SCALAPACK_LDFLAGS@ @LAPACK_LDFLAGS@ @BLAS_LDFLAGS@ @GA_MP_LDFLAGS@ @ARMCI_NETWORK_LDFLAGS@ -L@prefix@/lib" libs="-lga @SCALAPACK_LIBS@ @LAPACK_LIBS@ @BLAS_LIBS@ -larmci @GA_MP_LIBS@ @ARMCI_NETWORK_LIBS@" flibs="@FLIBS@" enable_f77_true="@ENABLE_F77_TRUE@" version="@PACKAGE_VERSION@" AS_IF([test "x$enable_f77_true" = x], [enable_f77=yes], [enable_f77=no]) [usage="Usage: ga-config [OPTIONS]... With the exception of --version and --help, all other options can be combined or run exclusively. Output is echoed to stdout. Options: --f77 --cc --cppflags --cflags --fflags --fint --ldflags --libs --flibs --enable-f77 --version --help "] result= while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -help | --help | --hel | --he | -h ) AS_ECHO(["$usage"]); exit ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) AS_ECHO(["$version"]); exit ;; -f77 | --f77) result="$result $f77" ;; -cc | --cc ) result="$result $cc" ;; -cppflags | --cppflags ) result="$result $cppflags" ;; -cflags | --cflags ) result="$result $cflags" ;; -fflags | --fflags ) result="$result $fflags" ;; -ldflags | --ldflags ) result="$result $ldflags" ;; -libs | --libs ) result="$result $libs" ;; -flibs | --flibs ) result="$result $flibs" ;; -fint | --fint ) result="$result $fint" ;; -enable-f77 | --enable-f77 ) result="$result $enable_f77" ;; # This is an error. *) AS_ECHO(["unrecognized option: \`$1' Try \`$0 --help' for more information."]); exit ;; esac shift done AS_ECHO(["$result"]) | sed 's/ [ ]*/ /g;s/" /"/g;s/ "/"/g;s/^ [ ]*//;s/ [ ]*$//' ga-5-3/tools/f77funcgen.pl0000750005473000001440000001053011701753503014245 0ustar d3n000users# # f77funcgen.pl # # find all pnga_ functions and output as many F77_FUNC_ macros as possible # output pnga_ functions that don't quite fit # if ($#ARGV+1 != 1) { die "usage: f77funcgen.pl filename"; } open FILE, "<$ARGV[0]" or die $!; while () { if (/pnga_/) { chomp; s/^.*pnga_(.*)\(.*$/\1/; $big = uc $_; print "#define ga_${_}_ F77_FUNC_(ga_$_, GA_$big)\n"; print "#define ga_c${_}_ F77_FUNC_(ga_c$_,GA_C$big)\n"; print "#define ga_d${_}_ F77_FUNC_(ga_d$_,GA_D$big)\n"; print "#define ga_i${_}_ F77_FUNC_(ga_i$_,GA_I$big)\n"; print "#define ga_s${_}_ F77_FUNC_(ga_s$_,GA_S$big)\n"; print "#define ga_z${_}_ F77_FUNC_(ga_z$_,GA_Z$big)\n"; print "#define nga_${_}_ F77_FUNC_(nga_$_, NGA_$big)\n"; print "#define nga_c${_}_ F77_FUNC_(nga_c$_,NGA_C$big)\n"; print "#define nga_d${_}_ F77_FUNC_(nga_d$_,NGA_D$big)\n"; print "#define nga_i${_}_ F77_FUNC_(nga_i$_,NGA_I$big)\n"; print "#define nga_s${_}_ F77_FUNC_(nga_s$_,NGA_S$big)\n"; print "#define nga_z${_}_ F77_FUNC_(nga_z$_,NGA_Z$big)\n"; } } print "/* the missing functions are either complex type or strangely named */\n"; print "\n"; print "#define gai_cdot_patch_ F77_FUNC_(gai_cdot_patch,GAI_CDOT_PATCH)\n"; print "#define gai_zdot_patch_ F77_FUNC_(gai_zdot_patch,GAI_ZDOT_PATCH)\n"; print "#define ngai_cdot_patch_ F77_FUNC_(ngai_cdot_patch,NGAI_CDOT_PATCH)\n"; print "#define ngai_zdot_patch_ F77_FUNC_(ngai_zdot_patch,NGAI_ZDOT_PATCH)\n"; print "\n"; print "#define ga_cscal_patch_ F77_FUNC_(ga_cscal_patch,GA_CSCAL_PATCH)\n"; print "#define ga_dscal_patch_ F77_FUNC_(ga_dscal_patch,GA_DSCAL_PATCH)\n"; print "#define ga_iscal_patch_ F77_FUNC_(ga_iscal_patch,GA_ISCAL_PATCH)\n"; print "#define ga_sscal_patch_ F77_FUNC_(ga_sscal_patch,GA_SSCAL_PATCH)\n"; print "#define ga_zscal_patch_ F77_FUNC_(ga_zscal_patch,GA_ZSCAL_PATCH)\n"; print "\n"; print "#define ga_cscal_ F77_FUNC_(ga_cscal,GA_CSCAL)\n"; print "#define ga_dscal_ F77_FUNC_(ga_dscal,GA_DSCAL)\n"; print "#define ga_iscal_ F77_FUNC_(ga_iscal,GA_ISCAL)\n"; print "#define ga_sscal_ F77_FUNC_(ga_sscal,GA_SSCAL)\n"; print "#define ga_zscal_ F77_FUNC_(ga_zscal,GA_ZSCAL)\n"; print "\n"; print "#define gai_cdot_ F77_FUNC_(gai_cdot,GAI_CDOT)\n"; print "#define gai_zdot_ F77_FUNC_(gai_zdot,GAI_ZDOT)\n"; print "#define ngai_cdot_ F77_FUNC_(ngai_cdot,NGAI_CDOT)\n"; print "#define ngai_zdot_ F77_FUNC_(ngai_zdot,NGAI_ZDOT)\n"; print "\n"; print "#define ga_cgemm_ F77_FUNC_(ga_cgemm,GA_CGEMM)\n"; print "#define ga_dgemm_ F77_FUNC_(ga_dgemm,GA_DGEMM)\n"; print "#define ga_sgemm_ F77_FUNC_(ga_sgemm,GA_SGEMM)\n"; print "#define ga_zgemm_ F77_FUNC_(ga_zgemm,GA_ZGEMM)\n"; print "\n"; print "#define nga_periodic_get_ F77_FUNC_(nga_periodic_get,NGA_PERIODIC_GET)\n"; print "#define nga_periodic_put_ F77_FUNC_(nga_periodic_put,NGA_PERIODIC_PUT)\n"; print "#define nga_periodic_acc_ F77_FUNC_(nga_periodic_acc,NGA_PERIODIC_ACC)\n"; print "\n"; print "#define ga_access_ F77_FUNC_(ga_access,GA_ACCESS)\n"; print "#define nga_access_ F77_FUNC_(nga_access,NGA_ACCESS)\n"; print "#define nga_access_block_ F77_FUNC_(nga_access_block,NGA_ACCESS_BLOCK)\n"; print "#define nga_access_block_grid_ F77_FUNC_(nga_access_block_grid,NGA_ACCESS_BLOCK_GRID)\n"; print "#define nga_access_block_segment_ F77_FUNC_(nga_access_block_segment,NGA_ACCESS_BLOCK_SEGMENT)\n"; print "\n"; print "#define ga_pgroup_cgop_ F77_FUNC_(ga_pgroup_cgop,GA_PGROUP_CGOP)\n"; print "#define ga_pgroup_dgop_ F77_FUNC_(ga_pgroup_dgop,GA_PGROUP_DGOP)\n"; print "#define ga_pgroup_igop_ F77_FUNC_(ga_pgroup_igop,GA_PGROUP_IGOP)\n"; print "#define ga_pgroup_sgop_ F77_FUNC_(ga_pgroup_sgop,GA_PGROUP_SGOP)\n"; print "#define ga_pgroup_zgop_ F77_FUNC_(ga_pgroup_zgop,GA_PGROUP_ZGOP)\n"; print "\n"; print "#define nga_pgroup_cgop_ F77_FUNC_(nga_pgroup_cgop,NGA_PGROUP_CGOP)\n"; print "#define nga_pgroup_dgop_ F77_FUNC_(nga_pgroup_dgop,NGA_PGROUP_DGOP)\n"; print "#define nga_pgroup_igop_ F77_FUNC_(nga_pgroup_igop,NGA_PGROUP_IGOP)\n"; print "#define nga_pgroup_sgop_ F77_FUNC_(nga_pgroup_sgop,NGA_PGROUP_SGOP)\n"; print "#define nga_pgroup_zgop_ F77_FUNC_(nga_pgroup_zgop,NGA_PGROUP_ZGOP)\n"; ga-5-3/tools/fapi_header_gen.py0000750005473000001440000000737211651347004015402 0ustar d3n000users#!/usr/bin/env python '''Generate the fapi.c source from the ga-papi.h header.''' import sys def get_signatures(header): # first, gather all function signatures from ga-papi.h aka argv[1] accumulating = False signatures = [] current_signature = '' EXTERN = 'extern' SEMICOLON = ';' for line in open(header): line = line.strip() # remove whitespace before and after line if not line: continue # skip blank lines if EXTERN in line and SEMICOLON in line: signatures.append(line) elif EXTERN in line: current_signature = line accumulating = True elif SEMICOLON in line and accumulating: current_signature += line signatures.append(current_signature) accumulating = False elif accumulating: current_signature += line return signatures class FunctionArgument(object): def __init__(self, signature): self.pointer = signature.count('*') self.array = '[' in signature signature = signature.replace('*','').strip() signature = signature.replace('[','').strip() signature = signature.replace(']','').strip() self.type,self.name = signature.split() def __str__(self): ret = self.type[:] ret += ' ' for p in range(self.pointer): ret += '*' ret += self.name if self.array: ret += '[]' return ret class Function(object): def __init__(self, signature): signature = signature.replace('extern','').strip() self.return_type,signature = signature.split(None,1) self.return_type = self.return_type.strip() signature = signature.strip() self.name,signature = signature.split('(',1) self.name = self.name.strip() signature = signature.replace(')','').strip() signature = signature.replace(';','').strip() self.args = [] if signature: for arg in signature.split(','): self.args.append(FunctionArgument(arg.strip())) def get_call(self, name=None): sig = '' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += arg.name sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def get_signature(self, name=None): sig = self.return_type[:] sig += ' ' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += str(arg) sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def __str__(self): return self.get_signature() if __name__ == '__main__': if len(sys.argv) != 2: print 'incorrect number of arguments' print 'usage: wapigen.py > ' sys.exit(len(sys.argv)) # print headers print ''' #if HAVE_CONFIG_H # include "config.h" #endif #include "ga-papi.h" #include "typesf2c.h" ''' functions = {} # parse signatures into the Function class for sig in get_signatures(sys.argv[1]): function = Function(sig) functions[function.name] = function # now process the functions for name in sorted(functions): func = functions[name] maybe_return = '' if 'void' not in func.return_type: maybe_return = 'return ' func = functions[name] wnga_name = name.replace('pnga_','wnga_') print ''' %s { %s%s; } ''' % (func.get_signature(wnga_name), maybe_return, func.get_call()) ga-5-3/tools/ga-config.in0000640005473000001440000002305312115161655014124 0ustar d3n000users#! /bin/sh # Generated from ga-config.in.m4sh by GNU Autoconf 2.69. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested="" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes break 2 fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset ## -------------------- ## ## Main body of script. ## ## -------------------- ## f77="@F77@" cc="@CC@" cppflags="@SCALAPACK_CPPFLAGS@ @LAPACK_CPPFLAGS@ @BLAS_CPPFLAGS@ @GA_MP_CPPFLAGS@ @ARMCI_NETWORK_CPPFLAGS@ -I@prefix@/include" cflags="@GA_COPT@" fflags="@GA_FOPT@ @FFLAG_INT@" fint="@FFLAG_INT@" ldflags="@SCALAPACK_LDFLAGS@ @LAPACK_LDFLAGS@ @BLAS_LDFLAGS@ @GA_MP_LDFLAGS@ @ARMCI_NETWORK_LDFLAGS@ -L@prefix@/lib" libs="-lga @SCALAPACK_LIBS@ @LAPACK_LIBS@ @BLAS_LIBS@ -larmci @GA_MP_LIBS@ @ARMCI_NETWORK_LIBS@" flibs="@FLIBS@" enable_f77_true="@ENABLE_F77_TRUE@" version="@PACKAGE_VERSION@" if test "x$enable_f77_true" = x; then : enable_f77=yes else enable_f77=no fi usage="Usage: ga-config [OPTIONS]... With the exception of --version and --help, all other options can be combined or run exclusively. Output is echoed to stdout. Options: --f77 --cc --cppflags --cflags --fflags --fint --ldflags --libs --flibs --enable-f77 --version --help " result= while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\(^=*\)='` ac_optarg=`expr "X$1" : 'X^=*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\(^=*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -help | --help | --hel | --he | -h ) $as_echo "$usage"; exit ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$version"; exit ;; -f77 | --f77) result="$result $f77" ;; -cc | --cc ) result="$result $cc" ;; -cppflags | --cppflags ) result="$result $cppflags" ;; -cflags | --cflags ) result="$result $cflags" ;; -fflags | --fflags ) result="$result $fflags" ;; -ldflags | --ldflags ) result="$result $ldflags" ;; -libs | --libs ) result="$result $libs" ;; -flibs | --flibs ) result="$result $flibs" ;; -fint | --fint ) result="$result $fint" ;; -enable-f77 | --enable-f77 ) result="$result $enable_f77" ;; # This is an error. *) $as_echo "unrecognized option: \`$1' Try \`$0 --help' for more information."; exit ;; esac shift done $as_echo "$result" | sed 's/ */ /g;s/" /"/g;s/ "/"/g;s/^ *//;s/ *$//' ga-5-3/tools/ga-wapi.c0000640005473000001440000047140712274750307013451 0ustar d3n000users #if HAVE_CONFIG_H # include "config.h" #endif #include #include "ga-papi.h" #include "typesf2c.h" static int me; static int nproc; static long count_pnga_abs_value = 0; static long count_pnga_abs_value_patch = 0; static long count_pnga_acc = 0; static long count_pnga_access_block_grid_idx = 0; static long count_pnga_access_block_grid_ptr = 0; static long count_pnga_access_block_idx = 0; static long count_pnga_access_block_ptr = 0; static long count_pnga_access_block_segment_idx = 0; static long count_pnga_access_block_segment_ptr = 0; static long count_pnga_access_ghost_element = 0; static long count_pnga_access_ghost_element_ptr = 0; static long count_pnga_access_ghost_ptr = 0; static long count_pnga_access_ghosts = 0; static long count_pnga_access_idx = 0; static long count_pnga_access_ptr = 0; static long count_pnga_add = 0; static long count_pnga_add_constant = 0; static long count_pnga_add_constant_patch = 0; static long count_pnga_add_diagonal = 0; static long count_pnga_add_patch = 0; static long count_pnga_alloc_gatscat_buf = 0; static long count_pnga_allocate = 0; static long count_pnga_bin_index = 0; static long count_pnga_bin_sorter = 0; static long count_pnga_brdcst = 0; static long count_pnga_check_handle = 0; static long count_pnga_cluster_nnodes = 0; static long count_pnga_cluster_nodeid = 0; static long count_pnga_cluster_nprocs = 0; static long count_pnga_cluster_proc_nodeid = 0; static long count_pnga_cluster_procid = 0; static long count_pnga_comp_patch = 0; static long count_pnga_compare_distr = 0; static long count_pnga_copy = 0; static long count_pnga_copy_patch = 0; static long count_pnga_copy_patch_dp = 0; static long count_pnga_create = 0; static long count_pnga_create_bin_range = 0; static long count_pnga_create_config = 0; static long count_pnga_create_ghosts = 0; static long count_pnga_create_ghosts_config = 0; static long count_pnga_create_ghosts_irreg = 0; static long count_pnga_create_ghosts_irreg_config = 0; static long count_pnga_create_handle = 0; static long count_pnga_create_irreg = 0; static long count_pnga_create_irreg_config = 0; static long count_pnga_create_mutexes = 0; static long count_pnga_ddot_patch_dp = 0; static long count_pnga_deregister_type = 0; static long count_pnga_destroy = 0; static long count_pnga_destroy_mutexes = 0; static long count_pnga_diag = 0; static long count_pnga_diag_reuse = 0; static long count_pnga_diag_seq = 0; static long count_pnga_diag_std = 0; static long count_pnga_diag_std_seq = 0; static long count_pnga_distribution = 0; static long count_pnga_dot = 0; static long count_pnga_dot_patch = 0; static long count_pnga_duplicate = 0; static long count_pnga_elem_divide = 0; static long count_pnga_elem_divide_patch = 0; static long count_pnga_elem_maximum = 0; static long count_pnga_elem_maximum_patch = 0; static long count_pnga_elem_minimum = 0; static long count_pnga_elem_minimum_patch = 0; static long count_pnga_elem_multiply = 0; static long count_pnga_elem_multiply_patch = 0; static long count_pnga_elem_step_divide_patch = 0; static long count_pnga_elem_stepb_divide_patch = 0; static long count_pnga_error = 0; static long count_pnga_fence = 0; static long count_pnga_fill = 0; static long count_pnga_fill_patch = 0; static long count_pnga_free_gatscat_buf = 0; static long count_pnga_gather = 0; static long count_pnga_gather2d = 0; static long count_pnga_get = 0; static long count_pnga_get_block_info = 0; static long count_pnga_get_debug = 0; static long count_pnga_get_diag = 0; static long count_pnga_get_dimension = 0; static long count_pnga_get_field = 0; static long count_pnga_get_ghost_block = 0; static long count_pnga_get_pgroup = 0; static long count_pnga_get_pgroup_size = 0; static long count_pnga_get_proc_grid = 0; static long count_pnga_get_proc_index = 0; static long count_pnga_ghost_barrier = 0; static long count_pnga_gop = 0; static long count_pnga_has_ghosts = 0; static long count_pnga_init_fence = 0; static long count_pnga_initialize = 0; static long count_pnga_initialize_ltd = 0; static long count_pnga_initialized = 0; static long count_pnga_inquire = 0; static long count_pnga_inquire_memory = 0; static long count_pnga_inquire_name = 0; static long count_pnga_inquire_type = 0; static long count_pnga_is_mirrored = 0; static long count_pnga_list_nodeid = 0; static long count_pnga_llt_solve = 0; static long count_pnga_locate = 0; static long count_pnga_locate_nnodes = 0; static long count_pnga_locate_num_blocks = 0; static long count_pnga_locate_region = 0; static long count_pnga_lock = 0; static long count_pnga_lu_solve = 0; static long count_pnga_lu_solve_alt = 0; static long count_pnga_lu_solve_seq = 0; static long count_pnga_mask_sync = 0; static long count_pnga_matmul = 0; static long count_pnga_matmul_mirrored = 0; static long count_pnga_matmul_patch = 0; static long count_pnga_median = 0; static long count_pnga_median_patch = 0; static long count_pnga_memory_avail = 0; static long count_pnga_memory_avail_type = 0; static long count_pnga_memory_limited = 0; static long count_pnga_merge_distr_patch = 0; static long count_pnga_merge_mirrored = 0; static long count_pnga_msg_brdcst = 0; static long count_pnga_msg_pgroup_sync = 0; static long count_pnga_msg_sync = 0; static long count_pnga_nbacc = 0; static long count_pnga_nbget = 0; static long count_pnga_nbget_field = 0; static long count_pnga_nbget_ghost_dir = 0; static long count_pnga_nblock = 0; static long count_pnga_nbput = 0; static long count_pnga_nbput_field = 0; static long count_pnga_nbput_notify = 0; static long count_pnga_nbtest = 0; static long count_pnga_nbwait = 0; static long count_pnga_nbwait_notify = 0; static long count_pnga_ndim = 0; static long count_pnga_nnodes = 0; static long count_pnga_nodeid = 0; static long count_pnga_norm1 = 0; static long count_pnga_norm_infinity = 0; static long count_pnga_pack = 0; static long count_pnga_patch_enum = 0; static long count_pnga_patch_intersect = 0; static long count_pnga_periodic = 0; static long count_pnga_pgroup_absolute_id = 0; static long count_pnga_pgroup_brdcst = 0; static long count_pnga_pgroup_create = 0; static long count_pnga_pgroup_destroy = 0; static long count_pnga_pgroup_get_default = 0; static long count_pnga_pgroup_get_mirror = 0; static long count_pnga_pgroup_get_world = 0; static long count_pnga_pgroup_gop = 0; static long count_pnga_pgroup_nnodes = 0; static long count_pnga_pgroup_nodeid = 0; static long count_pnga_pgroup_set_default = 0; static long count_pnga_pgroup_split = 0; static long count_pnga_pgroup_split_irreg = 0; static long count_pnga_pgroup_sync = 0; static long count_pnga_print = 0; static long count_pnga_print_distribution = 0; static long count_pnga_print_file = 0; static long count_pnga_print_patch = 0; static long count_pnga_print_patch2d = 0; static long count_pnga_print_patch_file = 0; static long count_pnga_print_patch_file2d = 0; static long count_pnga_print_stats = 0; static long count_pnga_proc_topology = 0; static long count_pnga_put = 0; static long count_pnga_put_field = 0; static long count_pnga_randomize = 0; static long count_pnga_read_inc = 0; static long count_pnga_recip = 0; static long count_pnga_recip_patch = 0; static long count_pnga_register_type = 0; static long count_pnga_release = 0; static long count_pnga_release_block = 0; static long count_pnga_release_block_grid = 0; static long count_pnga_release_block_segment = 0; static long count_pnga_release_ghost_element = 0; static long count_pnga_release_ghosts = 0; static long count_pnga_release_update = 0; static long count_pnga_release_update_block = 0; static long count_pnga_release_update_block_grid = 0; static long count_pnga_release_update_block_segment = 0; static long count_pnga_release_update_ghost_element = 0; static long count_pnga_release_update_ghosts = 0; static long count_pnga_scale = 0; static long count_pnga_scale_cols = 0; static long count_pnga_scale_patch = 0; static long count_pnga_scale_rows = 0; static long count_pnga_scan_add = 0; static long count_pnga_scan_copy = 0; static long count_pnga_scatter = 0; static long count_pnga_scatter2d = 0; static long count_pnga_scatter_acc = 0; static long count_pnga_scatter_acc2d = 0; static long count_pnga_select_elem = 0; static long count_pnga_set_array_name = 0; static long count_pnga_set_block_cyclic = 0; static long count_pnga_set_block_cyclic_proc_grid = 0; static long count_pnga_set_chunk = 0; static long count_pnga_set_data = 0; static long count_pnga_set_debug = 0; static long count_pnga_set_diagonal = 0; static long count_pnga_set_ghost_corner_flag = 0; static long count_pnga_set_ghost_info = 0; static long count_pnga_set_ghosts = 0; static long count_pnga_set_irreg_distr = 0; static long count_pnga_set_irreg_flag = 0; static long count_pnga_set_memory_limit = 0; static long count_pnga_set_pgroup = 0; static long count_pnga_set_restricted = 0; static long count_pnga_set_restricted_range = 0; static long count_pnga_set_update4_info = 0; static long count_pnga_set_update5_info = 0; static long count_pnga_shift_diagonal = 0; static long count_pnga_solve = 0; static long count_pnga_spd_invert = 0; static long count_pnga_step_bound_info = 0; static long count_pnga_step_bound_info_patch = 0; static long count_pnga_step_mask_patch = 0; static long count_pnga_step_max = 0; static long count_pnga_step_max_patch = 0; static long count_pnga_strided_acc = 0; static long count_pnga_strided_get = 0; static long count_pnga_strided_put = 0; static long count_pnga_summarize = 0; static long count_pnga_symmetrize = 0; static long count_pnga_sync = 0; static long count_pnga_terminate = 0; static long count_pnga_timer = 0; static long count_pnga_total_blocks = 0; static long count_pnga_transpose = 0; static long count_pnga_type_c2f = 0; static long count_pnga_type_f2c = 0; static long count_pnga_unlock = 0; static long count_pnga_unpack = 0; static long count_pnga_update1_ghosts = 0; static long count_pnga_update2_ghosts = 0; static long count_pnga_update3_ghosts = 0; static long count_pnga_update44_ghosts = 0; static long count_pnga_update4_ghosts = 0; static long count_pnga_update55_ghosts = 0; static long count_pnga_update5_ghosts = 0; static long count_pnga_update6_ghosts = 0; static long count_pnga_update7_ghosts = 0; static long count_pnga_update_ghost_dir = 0; static long count_pnga_update_ghosts = 0; static long count_pnga_update_ghosts_nb = 0; static long count_pnga_uses_ma = 0; static long count_pnga_uses_proc_grid = 0; static long count_pnga_valid_handle = 0; static long count_pnga_verify_handle = 0; static long count_pnga_wtime = 0; static long count_pnga_zero = 0; static long count_pnga_zero_diagonal = 0; static long count_pnga_zero_patch = 0; static double time_pnga_abs_value = 0; static double time_pnga_abs_value_patch = 0; static double time_pnga_acc = 0; static double time_pnga_access_block_grid_idx = 0; static double time_pnga_access_block_grid_ptr = 0; static double time_pnga_access_block_idx = 0; static double time_pnga_access_block_ptr = 0; static double time_pnga_access_block_segment_idx = 0; static double time_pnga_access_block_segment_ptr = 0; static double time_pnga_access_ghost_element = 0; static double time_pnga_access_ghost_element_ptr = 0; static double time_pnga_access_ghost_ptr = 0; static double time_pnga_access_ghosts = 0; static double time_pnga_access_idx = 0; static double time_pnga_access_ptr = 0; static double time_pnga_add = 0; static double time_pnga_add_constant = 0; static double time_pnga_add_constant_patch = 0; static double time_pnga_add_diagonal = 0; static double time_pnga_add_patch = 0; static double time_pnga_alloc_gatscat_buf = 0; static double time_pnga_allocate = 0; static double time_pnga_bin_index = 0; static double time_pnga_bin_sorter = 0; static double time_pnga_brdcst = 0; static double time_pnga_check_handle = 0; static double time_pnga_cluster_nnodes = 0; static double time_pnga_cluster_nodeid = 0; static double time_pnga_cluster_nprocs = 0; static double time_pnga_cluster_proc_nodeid = 0; static double time_pnga_cluster_procid = 0; static double time_pnga_comp_patch = 0; static double time_pnga_compare_distr = 0; static double time_pnga_copy = 0; static double time_pnga_copy_patch = 0; static double time_pnga_copy_patch_dp = 0; static double time_pnga_create = 0; static double time_pnga_create_bin_range = 0; static double time_pnga_create_config = 0; static double time_pnga_create_ghosts = 0; static double time_pnga_create_ghosts_config = 0; static double time_pnga_create_ghosts_irreg = 0; static double time_pnga_create_ghosts_irreg_config = 0; static double time_pnga_create_handle = 0; static double time_pnga_create_irreg = 0; static double time_pnga_create_irreg_config = 0; static double time_pnga_create_mutexes = 0; static double time_pnga_ddot_patch_dp = 0; static double time_pnga_deregister_type = 0; static double time_pnga_destroy = 0; static double time_pnga_destroy_mutexes = 0; static double time_pnga_diag = 0; static double time_pnga_diag_reuse = 0; static double time_pnga_diag_seq = 0; static double time_pnga_diag_std = 0; static double time_pnga_diag_std_seq = 0; static double time_pnga_distribution = 0; static double time_pnga_dot = 0; static double time_pnga_dot_patch = 0; static double time_pnga_duplicate = 0; static double time_pnga_elem_divide = 0; static double time_pnga_elem_divide_patch = 0; static double time_pnga_elem_maximum = 0; static double time_pnga_elem_maximum_patch = 0; static double time_pnga_elem_minimum = 0; static double time_pnga_elem_minimum_patch = 0; static double time_pnga_elem_multiply = 0; static double time_pnga_elem_multiply_patch = 0; static double time_pnga_elem_step_divide_patch = 0; static double time_pnga_elem_stepb_divide_patch = 0; static double time_pnga_error = 0; static double time_pnga_fence = 0; static double time_pnga_fill = 0; static double time_pnga_fill_patch = 0; static double time_pnga_free_gatscat_buf = 0; static double time_pnga_gather = 0; static double time_pnga_gather2d = 0; static double time_pnga_get = 0; static double time_pnga_get_block_info = 0; static double time_pnga_get_debug = 0; static double time_pnga_get_diag = 0; static double time_pnga_get_dimension = 0; static double time_pnga_get_field = 0; static double time_pnga_get_ghost_block = 0; static double time_pnga_get_pgroup = 0; static double time_pnga_get_pgroup_size = 0; static double time_pnga_get_proc_grid = 0; static double time_pnga_get_proc_index = 0; static double time_pnga_ghost_barrier = 0; static double time_pnga_gop = 0; static double time_pnga_has_ghosts = 0; static double time_pnga_init_fence = 0; static double time_pnga_initialize = 0; static double time_pnga_initialize_ltd = 0; static double time_pnga_initialized = 0; static double time_pnga_inquire = 0; static double time_pnga_inquire_memory = 0; static double time_pnga_inquire_name = 0; static double time_pnga_inquire_type = 0; static double time_pnga_is_mirrored = 0; static double time_pnga_list_nodeid = 0; static double time_pnga_llt_solve = 0; static double time_pnga_locate = 0; static double time_pnga_locate_nnodes = 0; static double time_pnga_locate_num_blocks = 0; static double time_pnga_locate_region = 0; static double time_pnga_lock = 0; static double time_pnga_lu_solve = 0; static double time_pnga_lu_solve_alt = 0; static double time_pnga_lu_solve_seq = 0; static double time_pnga_mask_sync = 0; static double time_pnga_matmul = 0; static double time_pnga_matmul_mirrored = 0; static double time_pnga_matmul_patch = 0; static double time_pnga_median = 0; static double time_pnga_median_patch = 0; static double time_pnga_memory_avail = 0; static double time_pnga_memory_avail_type = 0; static double time_pnga_memory_limited = 0; static double time_pnga_merge_distr_patch = 0; static double time_pnga_merge_mirrored = 0; static double time_pnga_msg_brdcst = 0; static double time_pnga_msg_pgroup_sync = 0; static double time_pnga_msg_sync = 0; static double time_pnga_nbacc = 0; static double time_pnga_nbget = 0; static double time_pnga_nbget_field = 0; static double time_pnga_nbget_ghost_dir = 0; static double time_pnga_nblock = 0; static double time_pnga_nbput = 0; static double time_pnga_nbput_field = 0; static double time_pnga_nbput_notify = 0; static double time_pnga_nbtest = 0; static double time_pnga_nbwait = 0; static double time_pnga_nbwait_notify = 0; static double time_pnga_ndim = 0; static double time_pnga_nnodes = 0; static double time_pnga_nodeid = 0; static double time_pnga_norm1 = 0; static double time_pnga_norm_infinity = 0; static double time_pnga_pack = 0; static double time_pnga_patch_enum = 0; static double time_pnga_patch_intersect = 0; static double time_pnga_periodic = 0; static double time_pnga_pgroup_absolute_id = 0; static double time_pnga_pgroup_brdcst = 0; static double time_pnga_pgroup_create = 0; static double time_pnga_pgroup_destroy = 0; static double time_pnga_pgroup_get_default = 0; static double time_pnga_pgroup_get_mirror = 0; static double time_pnga_pgroup_get_world = 0; static double time_pnga_pgroup_gop = 0; static double time_pnga_pgroup_nnodes = 0; static double time_pnga_pgroup_nodeid = 0; static double time_pnga_pgroup_set_default = 0; static double time_pnga_pgroup_split = 0; static double time_pnga_pgroup_split_irreg = 0; static double time_pnga_pgroup_sync = 0; static double time_pnga_print = 0; static double time_pnga_print_distribution = 0; static double time_pnga_print_file = 0; static double time_pnga_print_patch = 0; static double time_pnga_print_patch2d = 0; static double time_pnga_print_patch_file = 0; static double time_pnga_print_patch_file2d = 0; static double time_pnga_print_stats = 0; static double time_pnga_proc_topology = 0; static double time_pnga_put = 0; static double time_pnga_put_field = 0; static double time_pnga_randomize = 0; static double time_pnga_read_inc = 0; static double time_pnga_recip = 0; static double time_pnga_recip_patch = 0; static double time_pnga_register_type = 0; static double time_pnga_release = 0; static double time_pnga_release_block = 0; static double time_pnga_release_block_grid = 0; static double time_pnga_release_block_segment = 0; static double time_pnga_release_ghost_element = 0; static double time_pnga_release_ghosts = 0; static double time_pnga_release_update = 0; static double time_pnga_release_update_block = 0; static double time_pnga_release_update_block_grid = 0; static double time_pnga_release_update_block_segment = 0; static double time_pnga_release_update_ghost_element = 0; static double time_pnga_release_update_ghosts = 0; static double time_pnga_scale = 0; static double time_pnga_scale_cols = 0; static double time_pnga_scale_patch = 0; static double time_pnga_scale_rows = 0; static double time_pnga_scan_add = 0; static double time_pnga_scan_copy = 0; static double time_pnga_scatter = 0; static double time_pnga_scatter2d = 0; static double time_pnga_scatter_acc = 0; static double time_pnga_scatter_acc2d = 0; static double time_pnga_select_elem = 0; static double time_pnga_set_array_name = 0; static double time_pnga_set_block_cyclic = 0; static double time_pnga_set_block_cyclic_proc_grid = 0; static double time_pnga_set_chunk = 0; static double time_pnga_set_data = 0; static double time_pnga_set_debug = 0; static double time_pnga_set_diagonal = 0; static double time_pnga_set_ghost_corner_flag = 0; static double time_pnga_set_ghost_info = 0; static double time_pnga_set_ghosts = 0; static double time_pnga_set_irreg_distr = 0; static double time_pnga_set_irreg_flag = 0; static double time_pnga_set_memory_limit = 0; static double time_pnga_set_pgroup = 0; static double time_pnga_set_restricted = 0; static double time_pnga_set_restricted_range = 0; static double time_pnga_set_update4_info = 0; static double time_pnga_set_update5_info = 0; static double time_pnga_shift_diagonal = 0; static double time_pnga_solve = 0; static double time_pnga_spd_invert = 0; static double time_pnga_step_bound_info = 0; static double time_pnga_step_bound_info_patch = 0; static double time_pnga_step_mask_patch = 0; static double time_pnga_step_max = 0; static double time_pnga_step_max_patch = 0; static double time_pnga_strided_acc = 0; static double time_pnga_strided_get = 0; static double time_pnga_strided_put = 0; static double time_pnga_summarize = 0; static double time_pnga_symmetrize = 0; static double time_pnga_sync = 0; static double time_pnga_terminate = 0; static double time_pnga_timer = 0; static double time_pnga_total_blocks = 0; static double time_pnga_transpose = 0; static double time_pnga_type_c2f = 0; static double time_pnga_type_f2c = 0; static double time_pnga_unlock = 0; static double time_pnga_unpack = 0; static double time_pnga_update1_ghosts = 0; static double time_pnga_update2_ghosts = 0; static double time_pnga_update3_ghosts = 0; static double time_pnga_update44_ghosts = 0; static double time_pnga_update4_ghosts = 0; static double time_pnga_update55_ghosts = 0; static double time_pnga_update5_ghosts = 0; static double time_pnga_update6_ghosts = 0; static double time_pnga_update7_ghosts = 0; static double time_pnga_update_ghost_dir = 0; static double time_pnga_update_ghosts = 0; static double time_pnga_update_ghosts_nb = 0; static double time_pnga_uses_ma = 0; static double time_pnga_uses_proc_grid = 0; static double time_pnga_valid_handle = 0; static double time_pnga_verify_handle = 0; static double time_pnga_wtime = 0; static double time_pnga_zero = 0; static double time_pnga_zero_diagonal = 0; static double time_pnga_zero_patch = 0; void wnga_abs_value(Integer g_a) { double local_start, local_stop; ++count_pnga_abs_value; local_start = MPI_Wtime(); pnga_abs_value(g_a); local_stop = MPI_Wtime(); time_pnga_abs_value += local_stop - local_start; } void wnga_abs_value_patch(Integer g_a, Integer *lo, Integer *hi) { double local_start, local_stop; ++count_pnga_abs_value_patch; local_start = MPI_Wtime(); pnga_abs_value_patch(g_a, lo, hi); local_stop = MPI_Wtime(); time_pnga_abs_value_patch += local_stop - local_start; } void wnga_acc(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, void *alpha) { double local_start, local_stop; ++count_pnga_acc; local_start = MPI_Wtime(); pnga_acc(g_a, lo, hi, buf, ld, alpha); local_stop = MPI_Wtime(); time_pnga_acc += local_stop - local_start; } void wnga_access_block_grid_idx(Integer g_a, Integer *subscript, AccessIndex *index, Integer *ld) { double local_start, local_stop; ++count_pnga_access_block_grid_idx; local_start = MPI_Wtime(); pnga_access_block_grid_idx(g_a, subscript, index, ld); local_stop = MPI_Wtime(); time_pnga_access_block_grid_idx += local_stop - local_start; } void wnga_access_block_grid_ptr(Integer g_a, Integer *index, void *ptr, Integer *ld) { double local_start, local_stop; ++count_pnga_access_block_grid_ptr; local_start = MPI_Wtime(); pnga_access_block_grid_ptr(g_a, index, ptr, ld); local_stop = MPI_Wtime(); time_pnga_access_block_grid_ptr += local_stop - local_start; } void wnga_access_block_idx(Integer g_a, Integer idx, AccessIndex *index, Integer *ld) { double local_start, local_stop; ++count_pnga_access_block_idx; local_start = MPI_Wtime(); pnga_access_block_idx(g_a, idx, index, ld); local_stop = MPI_Wtime(); time_pnga_access_block_idx += local_stop - local_start; } void wnga_access_block_ptr(Integer g_a, Integer idx, void *ptr, Integer *ld) { double local_start, local_stop; ++count_pnga_access_block_ptr; local_start = MPI_Wtime(); pnga_access_block_ptr(g_a, idx, ptr, ld); local_stop = MPI_Wtime(); time_pnga_access_block_ptr += local_stop - local_start; } void wnga_access_block_segment_idx(Integer g_a, Integer proc, AccessIndex *index, Integer *len) { double local_start, local_stop; ++count_pnga_access_block_segment_idx; local_start = MPI_Wtime(); pnga_access_block_segment_idx(g_a, proc, index, len); local_stop = MPI_Wtime(); time_pnga_access_block_segment_idx += local_stop - local_start; } void wnga_access_block_segment_ptr(Integer g_a, Integer proc, void *ptr, Integer *len) { double local_start, local_stop; ++count_pnga_access_block_segment_ptr; local_start = MPI_Wtime(); pnga_access_block_segment_ptr(g_a, proc, ptr, len); local_stop = MPI_Wtime(); time_pnga_access_block_segment_ptr += local_stop - local_start; } void wnga_access_ghost_element(Integer g_a, AccessIndex *index, Integer subscript[], Integer ld[]) { double local_start, local_stop; ++count_pnga_access_ghost_element; local_start = MPI_Wtime(); pnga_access_ghost_element(g_a, index, subscript, ld); local_stop = MPI_Wtime(); time_pnga_access_ghost_element += local_stop - local_start; } void wnga_access_ghost_element_ptr(Integer g_a, void *ptr, Integer subscript[], Integer ld[]) { double local_start, local_stop; ++count_pnga_access_ghost_element_ptr; local_start = MPI_Wtime(); pnga_access_ghost_element_ptr(g_a, ptr, subscript, ld); local_stop = MPI_Wtime(); time_pnga_access_ghost_element_ptr += local_stop - local_start; } void wnga_access_ghost_ptr(Integer g_a, Integer dims[], void *ptr, Integer ld[]) { double local_start, local_stop; ++count_pnga_access_ghost_ptr; local_start = MPI_Wtime(); pnga_access_ghost_ptr(g_a, dims, ptr, ld); local_stop = MPI_Wtime(); time_pnga_access_ghost_ptr += local_stop - local_start; } void wnga_access_ghosts(Integer g_a, Integer dims[], AccessIndex *index, Integer ld[]) { double local_start, local_stop; ++count_pnga_access_ghosts; local_start = MPI_Wtime(); pnga_access_ghosts(g_a, dims, index, ld); local_stop = MPI_Wtime(); time_pnga_access_ghosts += local_stop - local_start; } void wnga_access_idx(Integer g_a, Integer *lo, Integer *hi, AccessIndex *index, Integer *ld) { double local_start, local_stop; ++count_pnga_access_idx; local_start = MPI_Wtime(); pnga_access_idx(g_a, lo, hi, index, ld); local_stop = MPI_Wtime(); time_pnga_access_idx += local_stop - local_start; } void wnga_access_ptr(Integer g_a, Integer *lo, Integer *hi, void *ptr, Integer *ld) { double local_start, local_stop; ++count_pnga_access_ptr; local_start = MPI_Wtime(); pnga_access_ptr(g_a, lo, hi, ptr, ld); local_stop = MPI_Wtime(); time_pnga_access_ptr += local_stop - local_start; } void wnga_add(void *alpha, Integer g_a, void *beta, Integer g_b, Integer g_c) { double local_start, local_stop; ++count_pnga_add; local_start = MPI_Wtime(); pnga_add(alpha, g_a, beta, g_b, g_c); local_stop = MPI_Wtime(); time_pnga_add += local_stop - local_start; } void wnga_add_constant(Integer g_a, void *alpha) { double local_start, local_stop; ++count_pnga_add_constant; local_start = MPI_Wtime(); pnga_add_constant(g_a, alpha); local_stop = MPI_Wtime(); time_pnga_add_constant += local_stop - local_start; } void wnga_add_constant_patch(Integer g_a, Integer *lo, Integer *hi, void *alpha) { double local_start, local_stop; ++count_pnga_add_constant_patch; local_start = MPI_Wtime(); pnga_add_constant_patch(g_a, lo, hi, alpha); local_stop = MPI_Wtime(); time_pnga_add_constant_patch += local_stop - local_start; } void wnga_add_diagonal(Integer g_a, Integer g_v) { double local_start, local_stop; ++count_pnga_add_diagonal; local_start = MPI_Wtime(); pnga_add_diagonal(g_a, g_v); local_stop = MPI_Wtime(); time_pnga_add_diagonal += local_stop - local_start; } void wnga_add_patch(void *alpha, Integer g_a, Integer *alo, Integer *ahi, void *beta, Integer g_b, Integer *blo, Integer *bhi, Integer g_c, Integer *clo, Integer *chi) { double local_start, local_stop; ++count_pnga_add_patch; local_start = MPI_Wtime(); pnga_add_patch(alpha, g_a, alo, ahi, beta, g_b, blo, bhi, g_c, clo, chi); local_stop = MPI_Wtime(); time_pnga_add_patch += local_stop - local_start; } void wnga_alloc_gatscat_buf(Integer nelems) { double local_start, local_stop; ++count_pnga_alloc_gatscat_buf; local_start = MPI_Wtime(); pnga_alloc_gatscat_buf(nelems); local_stop = MPI_Wtime(); time_pnga_alloc_gatscat_buf += local_stop - local_start; } logical wnga_allocate(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_allocate; local_start = MPI_Wtime(); return_value = pnga_allocate(g_a); local_stop = MPI_Wtime(); time_pnga_allocate += local_stop - local_start; return return_value; } void wnga_bin_index(Integer g_bin, Integer g_cnt, Integer g_off, Integer *values, Integer *subs, Integer n, Integer sortit) { double local_start, local_stop; ++count_pnga_bin_index; local_start = MPI_Wtime(); pnga_bin_index(g_bin, g_cnt, g_off, values, subs, n, sortit); local_stop = MPI_Wtime(); time_pnga_bin_index += local_stop - local_start; } void wnga_bin_sorter(Integer g_bin, Integer g_cnt, Integer g_off) { double local_start, local_stop; ++count_pnga_bin_sorter; local_start = MPI_Wtime(); pnga_bin_sorter(g_bin, g_cnt, g_off); local_stop = MPI_Wtime(); time_pnga_bin_sorter += local_stop - local_start; } void wnga_brdcst(Integer type, void *buf, Integer len, Integer originator) { double local_start, local_stop; ++count_pnga_brdcst; local_start = MPI_Wtime(); pnga_brdcst(type, buf, len, originator); local_stop = MPI_Wtime(); time_pnga_brdcst += local_stop - local_start; } void wnga_check_handle(Integer g_a, char *string) { double local_start, local_stop; ++count_pnga_check_handle; local_start = MPI_Wtime(); pnga_check_handle(g_a, string); local_stop = MPI_Wtime(); time_pnga_check_handle += local_stop - local_start; } Integer wnga_cluster_nnodes() { Integer return_value; double local_start, local_stop; ++count_pnga_cluster_nnodes; local_start = MPI_Wtime(); return_value = pnga_cluster_nnodes(); local_stop = MPI_Wtime(); time_pnga_cluster_nnodes += local_stop - local_start; return return_value; } Integer wnga_cluster_nodeid() { Integer return_value; double local_start, local_stop; ++count_pnga_cluster_nodeid; local_start = MPI_Wtime(); return_value = pnga_cluster_nodeid(); local_stop = MPI_Wtime(); time_pnga_cluster_nodeid += local_stop - local_start; return return_value; } Integer wnga_cluster_nprocs(Integer node) { Integer return_value; double local_start, local_stop; ++count_pnga_cluster_nprocs; local_start = MPI_Wtime(); return_value = pnga_cluster_nprocs(node); local_stop = MPI_Wtime(); time_pnga_cluster_nprocs += local_stop - local_start; return return_value; } Integer wnga_cluster_proc_nodeid(Integer proc) { Integer return_value; double local_start, local_stop; ++count_pnga_cluster_proc_nodeid; local_start = MPI_Wtime(); return_value = pnga_cluster_proc_nodeid(proc); local_stop = MPI_Wtime(); time_pnga_cluster_proc_nodeid += local_stop - local_start; return return_value; } Integer wnga_cluster_procid(Integer node, Integer loc_proc_id) { Integer return_value; double local_start, local_stop; ++count_pnga_cluster_procid; local_start = MPI_Wtime(); return_value = pnga_cluster_procid(node, loc_proc_id); local_stop = MPI_Wtime(); time_pnga_cluster_procid += local_stop - local_start; return return_value; } logical wnga_comp_patch(Integer andim, Integer *alo, Integer *ahi, Integer bndim, Integer *blo, Integer *bhi) { logical return_value; double local_start, local_stop; ++count_pnga_comp_patch; local_start = MPI_Wtime(); return_value = pnga_comp_patch(andim, alo, ahi, bndim, blo, bhi); local_stop = MPI_Wtime(); time_pnga_comp_patch += local_stop - local_start; return return_value; } logical wnga_compare_distr(Integer g_a, Integer g_b) { logical return_value; double local_start, local_stop; ++count_pnga_compare_distr; local_start = MPI_Wtime(); return_value = pnga_compare_distr(g_a, g_b); local_stop = MPI_Wtime(); time_pnga_compare_distr += local_stop - local_start; return return_value; } void wnga_copy(Integer g_a, Integer g_b) { double local_start, local_stop; ++count_pnga_copy; local_start = MPI_Wtime(); pnga_copy(g_a, g_b); local_stop = MPI_Wtime(); time_pnga_copy += local_stop - local_start; } void wnga_copy_patch(char *trans, Integer g_a, Integer *alo, Integer *ahi, Integer g_b, Integer *blo, Integer *bhi) { double local_start, local_stop; ++count_pnga_copy_patch; local_start = MPI_Wtime(); pnga_copy_patch(trans, g_a, alo, ahi, g_b, blo, bhi); local_stop = MPI_Wtime(); time_pnga_copy_patch += local_stop - local_start; } void wnga_copy_patch_dp(char *t_a, Integer g_a, Integer ailo, Integer aihi, Integer ajlo, Integer ajhi, Integer g_b, Integer bilo, Integer bihi, Integer bjlo, Integer bjhi) { double local_start, local_stop; ++count_pnga_copy_patch_dp; local_start = MPI_Wtime(); pnga_copy_patch_dp(t_a, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi); local_stop = MPI_Wtime(); time_pnga_copy_patch_dp += local_stop - local_start; } logical wnga_create(Integer type, Integer ndim, Integer *dims, char *name, Integer *chunk, Integer *g_a) { logical return_value; double local_start, local_stop; ++count_pnga_create; local_start = MPI_Wtime(); return_value = pnga_create(type, ndim, dims, name, chunk, g_a); local_stop = MPI_Wtime(); time_pnga_create += local_stop - local_start; return return_value; } logical wnga_create_bin_range(Integer g_bin, Integer g_cnt, Integer g_off, Integer *g_range) { logical return_value; double local_start, local_stop; ++count_pnga_create_bin_range; local_start = MPI_Wtime(); return_value = pnga_create_bin_range(g_bin, g_cnt, g_off, g_range); local_stop = MPI_Wtime(); time_pnga_create_bin_range += local_stop - local_start; return return_value; } logical wnga_create_config(Integer type, Integer ndim, Integer *dims, char *name, Integer *chunk, Integer p_handle, Integer *g_a) { logical return_value; double local_start, local_stop; ++count_pnga_create_config; local_start = MPI_Wtime(); return_value = pnga_create_config(type, ndim, dims, name, chunk, p_handle, g_a); local_stop = MPI_Wtime(); time_pnga_create_config += local_stop - local_start; return return_value; } logical wnga_create_ghosts(Integer type, Integer ndim, Integer *dims, Integer *width, char *name, Integer *chunk, Integer *g_a) { logical return_value; double local_start, local_stop; ++count_pnga_create_ghosts; local_start = MPI_Wtime(); return_value = pnga_create_ghosts(type, ndim, dims, width, name, chunk, g_a); local_stop = MPI_Wtime(); time_pnga_create_ghosts += local_stop - local_start; return return_value; } logical wnga_create_ghosts_config(Integer type, Integer ndim, Integer *dims, Integer *width, char *name, Integer *chunk, Integer p_handle, Integer *g_a) { logical return_value; double local_start, local_stop; ++count_pnga_create_ghosts_config; local_start = MPI_Wtime(); return_value = pnga_create_ghosts_config(type, ndim, dims, width, name, chunk, p_handle, g_a); local_stop = MPI_Wtime(); time_pnga_create_ghosts_config += local_stop - local_start; return return_value; } logical wnga_create_ghosts_irreg(Integer type, Integer ndim, Integer *dims, Integer *width, char *name, Integer *map, Integer *block, Integer *g_a) { logical return_value; double local_start, local_stop; ++count_pnga_create_ghosts_irreg; local_start = MPI_Wtime(); return_value = pnga_create_ghosts_irreg(type, ndim, dims, width, name, map, block, g_a); local_stop = MPI_Wtime(); time_pnga_create_ghosts_irreg += local_stop - local_start; return return_value; } logical wnga_create_ghosts_irreg_config(Integer type, Integer ndim, Integer *dims, Integer *width, char *name, Integer *map, Integer *block, Integer p_handle, Integer *g_a) { logical return_value; double local_start, local_stop; ++count_pnga_create_ghosts_irreg_config; local_start = MPI_Wtime(); return_value = pnga_create_ghosts_irreg_config(type, ndim, dims, width, name, map, block, p_handle, g_a); local_stop = MPI_Wtime(); time_pnga_create_ghosts_irreg_config += local_stop - local_start; return return_value; } Integer wnga_create_handle() { Integer return_value; double local_start, local_stop; ++count_pnga_create_handle; local_start = MPI_Wtime(); return_value = pnga_create_handle(); local_stop = MPI_Wtime(); time_pnga_create_handle += local_stop - local_start; return return_value; } logical wnga_create_irreg(Integer type, Integer ndim, Integer *dims, char *name, Integer *map, Integer *block, Integer *g_a) { logical return_value; double local_start, local_stop; ++count_pnga_create_irreg; local_start = MPI_Wtime(); return_value = pnga_create_irreg(type, ndim, dims, name, map, block, g_a); local_stop = MPI_Wtime(); time_pnga_create_irreg += local_stop - local_start; return return_value; } logical wnga_create_irreg_config(Integer type, Integer ndim, Integer *dims, char *name, Integer *map, Integer *block, Integer p_handle, Integer *g_a) { logical return_value; double local_start, local_stop; ++count_pnga_create_irreg_config; local_start = MPI_Wtime(); return_value = pnga_create_irreg_config(type, ndim, dims, name, map, block, p_handle, g_a); local_stop = MPI_Wtime(); time_pnga_create_irreg_config += local_stop - local_start; return return_value; } logical wnga_create_mutexes(Integer num) { logical return_value; double local_start, local_stop; ++count_pnga_create_mutexes; local_start = MPI_Wtime(); return_value = pnga_create_mutexes(num); local_stop = MPI_Wtime(); time_pnga_create_mutexes += local_stop - local_start; return return_value; } DoublePrecision wnga_ddot_patch_dp(Integer g_a, char *t_a, Integer ailo, Integer aihi, Integer ajlo, Integer ajhi, Integer g_b, char *t_b, Integer bilo, Integer bihi, Integer bjlo, Integer bjhi) { DoublePrecision return_value; double local_start, local_stop; ++count_pnga_ddot_patch_dp; local_start = MPI_Wtime(); return_value = pnga_ddot_patch_dp(g_a, t_a, ailo, aihi, ajlo, ajhi, g_b, t_b, bilo, bihi, bjlo, bjhi); local_stop = MPI_Wtime(); time_pnga_ddot_patch_dp += local_stop - local_start; return return_value; } int wnga_deregister_type(int type) { int return_value; double local_start, local_stop; ++count_pnga_deregister_type; local_start = MPI_Wtime(); return_value = pnga_deregister_type(type); local_stop = MPI_Wtime(); time_pnga_deregister_type += local_stop - local_start; return return_value; } logical wnga_destroy(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_destroy; local_start = MPI_Wtime(); return_value = pnga_destroy(g_a); local_stop = MPI_Wtime(); time_pnga_destroy += local_stop - local_start; return return_value; } logical wnga_destroy_mutexes() { logical return_value; double local_start, local_stop; ++count_pnga_destroy_mutexes; local_start = MPI_Wtime(); return_value = pnga_destroy_mutexes(); local_stop = MPI_Wtime(); time_pnga_destroy_mutexes += local_stop - local_start; return return_value; } void wnga_diag(Integer g_a, Integer g_s, Integer g_v, DoublePrecision *eval) { double local_start, local_stop; ++count_pnga_diag; local_start = MPI_Wtime(); pnga_diag(g_a, g_s, g_v, eval); local_stop = MPI_Wtime(); time_pnga_diag += local_stop - local_start; } void wnga_diag_reuse(Integer reuse, Integer g_a, Integer g_s, Integer g_v, DoublePrecision *eval) { double local_start, local_stop; ++count_pnga_diag_reuse; local_start = MPI_Wtime(); pnga_diag_reuse(reuse, g_a, g_s, g_v, eval); local_stop = MPI_Wtime(); time_pnga_diag_reuse += local_stop - local_start; } void wnga_diag_seq(Integer g_a, Integer g_s, Integer g_v, DoublePrecision *eval) { double local_start, local_stop; ++count_pnga_diag_seq; local_start = MPI_Wtime(); pnga_diag_seq(g_a, g_s, g_v, eval); local_stop = MPI_Wtime(); time_pnga_diag_seq += local_stop - local_start; } void wnga_diag_std(Integer g_a, Integer g_v, DoublePrecision *eval) { double local_start, local_stop; ++count_pnga_diag_std; local_start = MPI_Wtime(); pnga_diag_std(g_a, g_v, eval); local_stop = MPI_Wtime(); time_pnga_diag_std += local_stop - local_start; } void wnga_diag_std_seq(Integer g_a, Integer g_v, DoublePrecision *eval) { double local_start, local_stop; ++count_pnga_diag_std_seq; local_start = MPI_Wtime(); pnga_diag_std_seq(g_a, g_v, eval); local_stop = MPI_Wtime(); time_pnga_diag_std_seq += local_stop - local_start; } void wnga_distribution(Integer g_a, Integer proc, Integer *lo, Integer *hi) { double local_start, local_stop; ++count_pnga_distribution; local_start = MPI_Wtime(); pnga_distribution(g_a, proc, lo, hi); local_stop = MPI_Wtime(); time_pnga_distribution += local_stop - local_start; } void wnga_dot(int type, Integer g_a, Integer g_b, void *value) { double local_start, local_stop; ++count_pnga_dot; local_start = MPI_Wtime(); pnga_dot(type, g_a, g_b, value); local_stop = MPI_Wtime(); time_pnga_dot += local_stop - local_start; } void wnga_dot_patch(Integer g_a, char *t_a, Integer *alo, Integer *ahi, Integer g_b, char *t_b, Integer *blo, Integer *bhi, void *retval) { double local_start, local_stop; ++count_pnga_dot_patch; local_start = MPI_Wtime(); pnga_dot_patch(g_a, t_a, alo, ahi, g_b, t_b, blo, bhi, retval); local_stop = MPI_Wtime(); time_pnga_dot_patch += local_stop - local_start; } logical wnga_duplicate(Integer g_a, Integer *g_b, char *array_name) { logical return_value; double local_start, local_stop; ++count_pnga_duplicate; local_start = MPI_Wtime(); return_value = pnga_duplicate(g_a, g_b, array_name); local_stop = MPI_Wtime(); time_pnga_duplicate += local_stop - local_start; return return_value; } void wnga_elem_divide(Integer g_a, Integer g_b, Integer g_c) { double local_start, local_stop; ++count_pnga_elem_divide; local_start = MPI_Wtime(); pnga_elem_divide(g_a, g_b, g_c); local_stop = MPI_Wtime(); time_pnga_elem_divide += local_stop - local_start; } void wnga_elem_divide_patch(Integer g_a, Integer *alo, Integer *ahi, Integer g_b, Integer *blo, Integer *bhi, Integer g_c, Integer *clo, Integer *chi) { double local_start, local_stop; ++count_pnga_elem_divide_patch; local_start = MPI_Wtime(); pnga_elem_divide_patch(g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi); local_stop = MPI_Wtime(); time_pnga_elem_divide_patch += local_stop - local_start; } void wnga_elem_maximum(Integer g_a, Integer g_b, Integer g_c) { double local_start, local_stop; ++count_pnga_elem_maximum; local_start = MPI_Wtime(); pnga_elem_maximum(g_a, g_b, g_c); local_stop = MPI_Wtime(); time_pnga_elem_maximum += local_stop - local_start; } void wnga_elem_maximum_patch(Integer g_a, Integer *alo, Integer *ahi, Integer g_b, Integer *blo, Integer *bhi, Integer g_c, Integer *clo, Integer *chi) { double local_start, local_stop; ++count_pnga_elem_maximum_patch; local_start = MPI_Wtime(); pnga_elem_maximum_patch(g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi); local_stop = MPI_Wtime(); time_pnga_elem_maximum_patch += local_stop - local_start; } void wnga_elem_minimum(Integer g_a, Integer g_b, Integer g_c) { double local_start, local_stop; ++count_pnga_elem_minimum; local_start = MPI_Wtime(); pnga_elem_minimum(g_a, g_b, g_c); local_stop = MPI_Wtime(); time_pnga_elem_minimum += local_stop - local_start; } void wnga_elem_minimum_patch(Integer g_a, Integer *alo, Integer *ahi, Integer g_b, Integer *blo, Integer *bhi, Integer g_c, Integer *clo, Integer *chi) { double local_start, local_stop; ++count_pnga_elem_minimum_patch; local_start = MPI_Wtime(); pnga_elem_minimum_patch(g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi); local_stop = MPI_Wtime(); time_pnga_elem_minimum_patch += local_stop - local_start; } void wnga_elem_multiply(Integer g_a, Integer g_b, Integer g_c) { double local_start, local_stop; ++count_pnga_elem_multiply; local_start = MPI_Wtime(); pnga_elem_multiply(g_a, g_b, g_c); local_stop = MPI_Wtime(); time_pnga_elem_multiply += local_stop - local_start; } void wnga_elem_multiply_patch(Integer g_a, Integer *alo, Integer *ahi, Integer g_b, Integer *blo, Integer *bhi, Integer g_c, Integer *clo, Integer *chi) { double local_start, local_stop; ++count_pnga_elem_multiply_patch; local_start = MPI_Wtime(); pnga_elem_multiply_patch(g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi); local_stop = MPI_Wtime(); time_pnga_elem_multiply_patch += local_stop - local_start; } void wnga_elem_step_divide_patch(Integer g_a, Integer *alo, Integer *ahi, Integer g_b, Integer *blo, Integer *bhi, Integer g_c, Integer *clo, Integer *chi) { double local_start, local_stop; ++count_pnga_elem_step_divide_patch; local_start = MPI_Wtime(); pnga_elem_step_divide_patch(g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi); local_stop = MPI_Wtime(); time_pnga_elem_step_divide_patch += local_stop - local_start; } void wnga_elem_stepb_divide_patch(Integer g_a, Integer *alo, Integer *ahi, Integer g_b, Integer *blo, Integer *bhi, Integer g_c, Integer *clo, Integer *chi) { double local_start, local_stop; ++count_pnga_elem_stepb_divide_patch; local_start = MPI_Wtime(); pnga_elem_stepb_divide_patch(g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi); local_stop = MPI_Wtime(); time_pnga_elem_stepb_divide_patch += local_stop - local_start; } void wnga_error(char *string, Integer icode) { double local_start, local_stop; ++count_pnga_error; local_start = MPI_Wtime(); pnga_error(string, icode); local_stop = MPI_Wtime(); time_pnga_error += local_stop - local_start; } void wnga_fence() { double local_start, local_stop; ++count_pnga_fence; local_start = MPI_Wtime(); pnga_fence(); local_stop = MPI_Wtime(); time_pnga_fence += local_stop - local_start; } void wnga_fill(Integer g_a, void *val) { double local_start, local_stop; ++count_pnga_fill; local_start = MPI_Wtime(); pnga_fill(g_a, val); local_stop = MPI_Wtime(); time_pnga_fill += local_stop - local_start; } void wnga_fill_patch(Integer g_a, Integer *lo, Integer *hi, void *val) { double local_start, local_stop; ++count_pnga_fill_patch; local_start = MPI_Wtime(); pnga_fill_patch(g_a, lo, hi, val); local_stop = MPI_Wtime(); time_pnga_fill_patch += local_stop - local_start; } void wnga_free_gatscat_buf() { double local_start, local_stop; ++count_pnga_free_gatscat_buf; local_start = MPI_Wtime(); pnga_free_gatscat_buf(); local_stop = MPI_Wtime(); time_pnga_free_gatscat_buf += local_stop - local_start; } void wnga_gather(Integer g_a, void *v, void *subscript, Integer c_flag, Integer nv) { double local_start, local_stop; ++count_pnga_gather; local_start = MPI_Wtime(); pnga_gather(g_a, v, subscript, c_flag, nv); local_stop = MPI_Wtime(); time_pnga_gather += local_stop - local_start; } void wnga_gather2d(Integer g_a, void *v, Integer *i, Integer *j, Integer nv) { double local_start, local_stop; ++count_pnga_gather2d; local_start = MPI_Wtime(); pnga_gather2d(g_a, v, i, j, nv); local_stop = MPI_Wtime(); time_pnga_gather2d += local_stop - local_start; } void wnga_get(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld) { double local_start, local_stop; ++count_pnga_get; local_start = MPI_Wtime(); pnga_get(g_a, lo, hi, buf, ld); local_stop = MPI_Wtime(); time_pnga_get += local_stop - local_start; } void wnga_get_block_info(Integer g_a, Integer *num_blocks, Integer *block_dims) { double local_start, local_stop; ++count_pnga_get_block_info; local_start = MPI_Wtime(); pnga_get_block_info(g_a, num_blocks, block_dims); local_stop = MPI_Wtime(); time_pnga_get_block_info += local_stop - local_start; } logical wnga_get_debug() { logical return_value; double local_start, local_stop; ++count_pnga_get_debug; local_start = MPI_Wtime(); return_value = pnga_get_debug(); local_stop = MPI_Wtime(); time_pnga_get_debug += local_stop - local_start; return return_value; } void wnga_get_diag(Integer g_a, Integer g_v) { double local_start, local_stop; ++count_pnga_get_diag; local_start = MPI_Wtime(); pnga_get_diag(g_a, g_v); local_stop = MPI_Wtime(); time_pnga_get_diag += local_stop - local_start; } Integer wnga_get_dimension(Integer g_a) { Integer return_value; double local_start, local_stop; ++count_pnga_get_dimension; local_start = MPI_Wtime(); return_value = pnga_get_dimension(g_a); local_stop = MPI_Wtime(); time_pnga_get_dimension += local_stop - local_start; return return_value; } void wnga_get_field(Integer g_a, Integer *lo, Integer *hi, Integer foff, Integer fsize, void *buf, Integer *ld) { double local_start, local_stop; ++count_pnga_get_field; local_start = MPI_Wtime(); pnga_get_field(g_a, lo, hi, foff, fsize, buf, ld); local_stop = MPI_Wtime(); time_pnga_get_field += local_stop - local_start; } void wnga_get_ghost_block(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld) { double local_start, local_stop; ++count_pnga_get_ghost_block; local_start = MPI_Wtime(); pnga_get_ghost_block(g_a, lo, hi, buf, ld); local_stop = MPI_Wtime(); time_pnga_get_ghost_block += local_stop - local_start; } Integer wnga_get_pgroup(Integer g_a) { Integer return_value; double local_start, local_stop; ++count_pnga_get_pgroup; local_start = MPI_Wtime(); return_value = pnga_get_pgroup(g_a); local_stop = MPI_Wtime(); time_pnga_get_pgroup += local_stop - local_start; return return_value; } Integer wnga_get_pgroup_size(Integer grp_id) { Integer return_value; double local_start, local_stop; ++count_pnga_get_pgroup_size; local_start = MPI_Wtime(); return_value = pnga_get_pgroup_size(grp_id); local_stop = MPI_Wtime(); time_pnga_get_pgroup_size += local_stop - local_start; return return_value; } void wnga_get_proc_grid(Integer g_a, Integer *dims) { double local_start, local_stop; ++count_pnga_get_proc_grid; local_start = MPI_Wtime(); pnga_get_proc_grid(g_a, dims); local_stop = MPI_Wtime(); time_pnga_get_proc_grid += local_stop - local_start; } void wnga_get_proc_index(Integer g_a, Integer iproc, Integer *index) { double local_start, local_stop; ++count_pnga_get_proc_index; local_start = MPI_Wtime(); pnga_get_proc_index(g_a, iproc, index); local_stop = MPI_Wtime(); time_pnga_get_proc_index += local_stop - local_start; } void wnga_ghost_barrier() { double local_start, local_stop; ++count_pnga_ghost_barrier; local_start = MPI_Wtime(); pnga_ghost_barrier(); local_stop = MPI_Wtime(); time_pnga_ghost_barrier += local_stop - local_start; } void wnga_gop(Integer type, void *x, Integer n, char *op) { double local_start, local_stop; ++count_pnga_gop; local_start = MPI_Wtime(); pnga_gop(type, x, n, op); local_stop = MPI_Wtime(); time_pnga_gop += local_stop - local_start; } logical wnga_has_ghosts(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_has_ghosts; local_start = MPI_Wtime(); return_value = pnga_has_ghosts(g_a); local_stop = MPI_Wtime(); time_pnga_has_ghosts += local_stop - local_start; return return_value; } void wnga_init_fence() { double local_start, local_stop; ++count_pnga_init_fence; local_start = MPI_Wtime(); pnga_init_fence(); local_stop = MPI_Wtime(); time_pnga_init_fence += local_stop - local_start; } int wnga_initialized() { int return_value; double local_start, local_stop; ++count_pnga_initialized; local_start = MPI_Wtime(); return_value = pnga_initialized(); local_stop = MPI_Wtime(); time_pnga_initialized += local_stop - local_start; return return_value; } void wnga_inquire(Integer g_a, Integer *type, Integer *ndim, Integer *dims) { double local_start, local_stop; ++count_pnga_inquire; local_start = MPI_Wtime(); pnga_inquire(g_a, type, ndim, dims); local_stop = MPI_Wtime(); time_pnga_inquire += local_stop - local_start; } Integer wnga_inquire_memory() { Integer return_value; double local_start, local_stop; ++count_pnga_inquire_memory; local_start = MPI_Wtime(); return_value = pnga_inquire_memory(); local_stop = MPI_Wtime(); time_pnga_inquire_memory += local_stop - local_start; return return_value; } void wnga_inquire_name(Integer g_a, char **array_name) { double local_start, local_stop; ++count_pnga_inquire_name; local_start = MPI_Wtime(); pnga_inquire_name(g_a, array_name); local_stop = MPI_Wtime(); time_pnga_inquire_name += local_stop - local_start; } void wnga_inquire_type(Integer g_a, Integer *type) { double local_start, local_stop; ++count_pnga_inquire_type; local_start = MPI_Wtime(); pnga_inquire_type(g_a, type); local_stop = MPI_Wtime(); time_pnga_inquire_type += local_stop - local_start; } logical wnga_is_mirrored(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_is_mirrored; local_start = MPI_Wtime(); return_value = pnga_is_mirrored(g_a); local_stop = MPI_Wtime(); time_pnga_is_mirrored += local_stop - local_start; return return_value; } void wnga_list_nodeid(Integer *list, Integer nprocs) { double local_start, local_stop; ++count_pnga_list_nodeid; local_start = MPI_Wtime(); pnga_list_nodeid(list, nprocs); local_stop = MPI_Wtime(); time_pnga_list_nodeid += local_stop - local_start; } Integer wnga_llt_solve(Integer g_a, Integer g_b) { Integer return_value; double local_start, local_stop; ++count_pnga_llt_solve; local_start = MPI_Wtime(); return_value = pnga_llt_solve(g_a, g_b); local_stop = MPI_Wtime(); time_pnga_llt_solve += local_stop - local_start; return return_value; } logical wnga_locate(Integer g_a, Integer *subscript, Integer *owner) { logical return_value; double local_start, local_stop; ++count_pnga_locate; local_start = MPI_Wtime(); return_value = pnga_locate(g_a, subscript, owner); local_stop = MPI_Wtime(); time_pnga_locate += local_stop - local_start; return return_value; } logical wnga_locate_nnodes(Integer g_a, Integer *lo, Integer *hi, Integer *np) { logical return_value; double local_start, local_stop; ++count_pnga_locate_nnodes; local_start = MPI_Wtime(); return_value = pnga_locate_nnodes(g_a, lo, hi, np); local_stop = MPI_Wtime(); time_pnga_locate_nnodes += local_stop - local_start; return return_value; } Integer wnga_locate_num_blocks(Integer g_a, Integer *lo, Integer *hi) { Integer return_value; double local_start, local_stop; ++count_pnga_locate_num_blocks; local_start = MPI_Wtime(); return_value = pnga_locate_num_blocks(g_a, lo, hi); local_stop = MPI_Wtime(); time_pnga_locate_num_blocks += local_stop - local_start; return return_value; } logical wnga_locate_region(Integer g_a, Integer *lo, Integer *hi, Integer *map, Integer *proclist, Integer *np) { logical return_value; double local_start, local_stop; ++count_pnga_locate_region; local_start = MPI_Wtime(); return_value = pnga_locate_region(g_a, lo, hi, map, proclist, np); local_stop = MPI_Wtime(); time_pnga_locate_region += local_stop - local_start; return return_value; } void wnga_lock(Integer mutex) { double local_start, local_stop; ++count_pnga_lock; local_start = MPI_Wtime(); pnga_lock(mutex); local_stop = MPI_Wtime(); time_pnga_lock += local_stop - local_start; } void wnga_lu_solve(char *tran, Integer g_a, Integer g_b) { double local_start, local_stop; ++count_pnga_lu_solve; local_start = MPI_Wtime(); pnga_lu_solve(tran, g_a, g_b); local_stop = MPI_Wtime(); time_pnga_lu_solve += local_stop - local_start; } void wnga_lu_solve_alt(Integer tran, Integer g_a, Integer g_b) { double local_start, local_stop; ++count_pnga_lu_solve_alt; local_start = MPI_Wtime(); pnga_lu_solve_alt(tran, g_a, g_b); local_stop = MPI_Wtime(); time_pnga_lu_solve_alt += local_stop - local_start; } void wnga_lu_solve_seq(char *trans, Integer g_a, Integer g_b) { double local_start, local_stop; ++count_pnga_lu_solve_seq; local_start = MPI_Wtime(); pnga_lu_solve_seq(trans, g_a, g_b); local_stop = MPI_Wtime(); time_pnga_lu_solve_seq += local_stop - local_start; } void wnga_mask_sync(Integer begin, Integer end) { double local_start, local_stop; ++count_pnga_mask_sync; local_start = MPI_Wtime(); pnga_mask_sync(begin, end); local_stop = MPI_Wtime(); time_pnga_mask_sync += local_stop - local_start; } void wnga_matmul(char *transa, char *transb, void *alpha, void *beta, Integer g_a, Integer ailo, Integer aihi, Integer ajlo, Integer ajhi, Integer g_b, Integer bilo, Integer bihi, Integer bjlo, Integer bjhi, Integer g_c, Integer cilo, Integer cihi, Integer cjlo, Integer cjhi) { double local_start, local_stop; ++count_pnga_matmul; local_start = MPI_Wtime(); pnga_matmul(transa, transb, alpha, beta, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi); local_stop = MPI_Wtime(); time_pnga_matmul += local_stop - local_start; } void wnga_matmul_mirrored(char *transa, char *transb, void *alpha, void *beta, Integer g_a, Integer ailo, Integer aihi, Integer ajlo, Integer ajhi, Integer g_b, Integer bilo, Integer bihi, Integer bjlo, Integer bjhi, Integer g_c, Integer cilo, Integer cihi, Integer cjlo, Integer cjhi) { double local_start, local_stop; ++count_pnga_matmul_mirrored; local_start = MPI_Wtime(); pnga_matmul_mirrored(transa, transb, alpha, beta, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi); local_stop = MPI_Wtime(); time_pnga_matmul_mirrored += local_stop - local_start; } void wnga_matmul_patch(char *transa, char *transb, void *alpha, void *beta, Integer g_a, Integer alo[], Integer ahi[], Integer g_b, Integer blo[], Integer bhi[], Integer g_c, Integer clo[], Integer chi[]) { double local_start, local_stop; ++count_pnga_matmul_patch; local_start = MPI_Wtime(); pnga_matmul_patch(transa, transb, alpha, beta, g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi); local_stop = MPI_Wtime(); time_pnga_matmul_patch += local_stop - local_start; } void wnga_median(Integer g_a, Integer g_b, Integer g_c, Integer g_m) { double local_start, local_stop; ++count_pnga_median; local_start = MPI_Wtime(); pnga_median(g_a, g_b, g_c, g_m); local_stop = MPI_Wtime(); time_pnga_median += local_stop - local_start; } void wnga_median_patch(Integer g_a, Integer *alo, Integer *ahi, Integer g_b, Integer *blo, Integer *bhi, Integer g_c, Integer *clo, Integer *chi, Integer g_m, Integer *mlo, Integer *mhi) { double local_start, local_stop; ++count_pnga_median_patch; local_start = MPI_Wtime(); pnga_median_patch(g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi, g_m, mlo, mhi); local_stop = MPI_Wtime(); time_pnga_median_patch += local_stop - local_start; } Integer wnga_memory_avail() { Integer return_value; double local_start, local_stop; ++count_pnga_memory_avail; local_start = MPI_Wtime(); return_value = pnga_memory_avail(); local_stop = MPI_Wtime(); time_pnga_memory_avail += local_stop - local_start; return return_value; } Integer wnga_memory_avail_type(Integer datatype) { Integer return_value; double local_start, local_stop; ++count_pnga_memory_avail_type; local_start = MPI_Wtime(); return_value = pnga_memory_avail_type(datatype); local_stop = MPI_Wtime(); time_pnga_memory_avail_type += local_stop - local_start; return return_value; } logical wnga_memory_limited() { logical return_value; double local_start, local_stop; ++count_pnga_memory_limited; local_start = MPI_Wtime(); return_value = pnga_memory_limited(); local_stop = MPI_Wtime(); time_pnga_memory_limited += local_stop - local_start; return return_value; } void wnga_merge_distr_patch(Integer g_a, Integer *alo, Integer *ahi, Integer g_b, Integer *blo, Integer *bhi) { double local_start, local_stop; ++count_pnga_merge_distr_patch; local_start = MPI_Wtime(); pnga_merge_distr_patch(g_a, alo, ahi, g_b, blo, bhi); local_stop = MPI_Wtime(); time_pnga_merge_distr_patch += local_stop - local_start; } void wnga_merge_mirrored(Integer g_a) { double local_start, local_stop; ++count_pnga_merge_mirrored; local_start = MPI_Wtime(); pnga_merge_mirrored(g_a); local_stop = MPI_Wtime(); time_pnga_merge_mirrored += local_stop - local_start; } void wnga_msg_brdcst(Integer type, void *buffer, Integer len, Integer root) { double local_start, local_stop; ++count_pnga_msg_brdcst; local_start = MPI_Wtime(); pnga_msg_brdcst(type, buffer, len, root); local_stop = MPI_Wtime(); time_pnga_msg_brdcst += local_stop - local_start; } void wnga_msg_pgroup_sync(Integer grp_id) { double local_start, local_stop; ++count_pnga_msg_pgroup_sync; local_start = MPI_Wtime(); pnga_msg_pgroup_sync(grp_id); local_stop = MPI_Wtime(); time_pnga_msg_pgroup_sync += local_stop - local_start; } void wnga_msg_sync() { double local_start, local_stop; ++count_pnga_msg_sync; local_start = MPI_Wtime(); pnga_msg_sync(); local_stop = MPI_Wtime(); time_pnga_msg_sync += local_stop - local_start; } void wnga_nbacc(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, void *alpha, Integer *nbhndl) { double local_start, local_stop; ++count_pnga_nbacc; local_start = MPI_Wtime(); pnga_nbacc(g_a, lo, hi, buf, ld, alpha, nbhndl); local_stop = MPI_Wtime(); time_pnga_nbacc += local_stop - local_start; } void wnga_nbget(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, Integer *nbhandle) { double local_start, local_stop; ++count_pnga_nbget; local_start = MPI_Wtime(); pnga_nbget(g_a, lo, hi, buf, ld, nbhandle); local_stop = MPI_Wtime(); time_pnga_nbget += local_stop - local_start; } void wnga_nbget_field(Integer g_a, Integer *lo, Integer *hi, Integer foff, Integer fsize, void *buf, Integer *ld, Integer *nbhandle) { double local_start, local_stop; ++count_pnga_nbget_field; local_start = MPI_Wtime(); pnga_nbget_field(g_a, lo, hi, foff, fsize, buf, ld, nbhandle); local_stop = MPI_Wtime(); time_pnga_nbget_field += local_stop - local_start; } void wnga_nbget_ghost_dir(Integer g_a, Integer *mask, Integer *nbhandle) { double local_start, local_stop; ++count_pnga_nbget_ghost_dir; local_start = MPI_Wtime(); pnga_nbget_ghost_dir(g_a, mask, nbhandle); local_stop = MPI_Wtime(); time_pnga_nbget_ghost_dir += local_stop - local_start; } void wnga_nblock(Integer g_a, Integer *nblock) { double local_start, local_stop; ++count_pnga_nblock; local_start = MPI_Wtime(); pnga_nblock(g_a, nblock); local_stop = MPI_Wtime(); time_pnga_nblock += local_stop - local_start; } void wnga_nbput(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, Integer *nbhandle) { double local_start, local_stop; ++count_pnga_nbput; local_start = MPI_Wtime(); pnga_nbput(g_a, lo, hi, buf, ld, nbhandle); local_stop = MPI_Wtime(); time_pnga_nbput += local_stop - local_start; } void wnga_nbput_field(Integer g_a, Integer *lo, Integer *hi, Integer foff, Integer fsize, void *buf, Integer *ld, Integer *nbhandle) { double local_start, local_stop; ++count_pnga_nbput_field; local_start = MPI_Wtime(); pnga_nbput_field(g_a, lo, hi, foff, fsize, buf, ld, nbhandle); local_stop = MPI_Wtime(); time_pnga_nbput_field += local_stop - local_start; } void wnga_nbput_notify(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, Integer g_b, Integer *ecoords, void *bufn, Integer *nbhandle) { double local_start, local_stop; ++count_pnga_nbput_notify; local_start = MPI_Wtime(); pnga_nbput_notify(g_a, lo, hi, buf, ld, g_b, ecoords, bufn, nbhandle); local_stop = MPI_Wtime(); time_pnga_nbput_notify += local_stop - local_start; } Integer wnga_nbtest(Integer *nbhandle) { Integer return_value; double local_start, local_stop; ++count_pnga_nbtest; local_start = MPI_Wtime(); return_value = pnga_nbtest(nbhandle); local_stop = MPI_Wtime(); time_pnga_nbtest += local_stop - local_start; return return_value; } void wnga_nbwait(Integer *nbhandle) { double local_start, local_stop; ++count_pnga_nbwait; local_start = MPI_Wtime(); pnga_nbwait(nbhandle); local_stop = MPI_Wtime(); time_pnga_nbwait += local_stop - local_start; } void wnga_nbwait_notify(Integer *nbhandle) { double local_start, local_stop; ++count_pnga_nbwait_notify; local_start = MPI_Wtime(); pnga_nbwait_notify(nbhandle); local_stop = MPI_Wtime(); time_pnga_nbwait_notify += local_stop - local_start; } Integer wnga_ndim(Integer g_a) { Integer return_value; double local_start, local_stop; ++count_pnga_ndim; local_start = MPI_Wtime(); return_value = pnga_ndim(g_a); local_stop = MPI_Wtime(); time_pnga_ndim += local_stop - local_start; return return_value; } Integer wnga_nnodes() { Integer return_value; double local_start, local_stop; ++count_pnga_nnodes; local_start = MPI_Wtime(); return_value = pnga_nnodes(); local_stop = MPI_Wtime(); time_pnga_nnodes += local_stop - local_start; return return_value; } Integer wnga_nodeid() { Integer return_value; double local_start, local_stop; ++count_pnga_nodeid; local_start = MPI_Wtime(); return_value = pnga_nodeid(); local_stop = MPI_Wtime(); time_pnga_nodeid += local_stop - local_start; return return_value; } void wnga_norm1(Integer g_a, double *nm) { double local_start, local_stop; ++count_pnga_norm1; local_start = MPI_Wtime(); pnga_norm1(g_a, nm); local_stop = MPI_Wtime(); time_pnga_norm1 += local_stop - local_start; } void wnga_norm_infinity(Integer g_a, double *nm) { double local_start, local_stop; ++count_pnga_norm_infinity; local_start = MPI_Wtime(); pnga_norm_infinity(g_a, nm); local_stop = MPI_Wtime(); time_pnga_norm_infinity += local_stop - local_start; } void wnga_pack(Integer g_a, Integer g_b, Integer g_sbit, Integer lo, Integer hi, Integer *icount) { double local_start, local_stop; ++count_pnga_pack; local_start = MPI_Wtime(); pnga_pack(g_a, g_b, g_sbit, lo, hi, icount); local_stop = MPI_Wtime(); time_pnga_pack += local_stop - local_start; } void wnga_patch_enum(Integer g_a, Integer lo, Integer hi, void *start, void *stride) { double local_start, local_stop; ++count_pnga_patch_enum; local_start = MPI_Wtime(); pnga_patch_enum(g_a, lo, hi, start, stride); local_stop = MPI_Wtime(); time_pnga_patch_enum += local_stop - local_start; } logical wnga_patch_intersect(Integer *lo, Integer *hi, Integer *lop, Integer *hip, Integer ndim) { logical return_value; double local_start, local_stop; ++count_pnga_patch_intersect; local_start = MPI_Wtime(); return_value = pnga_patch_intersect(lo, hi, lop, hip, ndim); local_stop = MPI_Wtime(); time_pnga_patch_intersect += local_stop - local_start; return return_value; } void wnga_periodic(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, void *alpha, Integer op_code) { double local_start, local_stop; ++count_pnga_periodic; local_start = MPI_Wtime(); pnga_periodic(g_a, lo, hi, buf, ld, alpha, op_code); local_stop = MPI_Wtime(); time_pnga_periodic += local_stop - local_start; } Integer wnga_pgroup_absolute_id(Integer grp, Integer pid) { Integer return_value; double local_start, local_stop; ++count_pnga_pgroup_absolute_id; local_start = MPI_Wtime(); return_value = pnga_pgroup_absolute_id(grp, pid); local_stop = MPI_Wtime(); time_pnga_pgroup_absolute_id += local_stop - local_start; return return_value; } void wnga_pgroup_brdcst(Integer grp_id, Integer type, void *buf, Integer len, Integer originator) { double local_start, local_stop; ++count_pnga_pgroup_brdcst; local_start = MPI_Wtime(); pnga_pgroup_brdcst(grp_id, type, buf, len, originator); local_stop = MPI_Wtime(); time_pnga_pgroup_brdcst += local_stop - local_start; } Integer wnga_pgroup_create(Integer *list, Integer count) { Integer return_value; double local_start, local_stop; ++count_pnga_pgroup_create; local_start = MPI_Wtime(); return_value = pnga_pgroup_create(list, count); local_stop = MPI_Wtime(); time_pnga_pgroup_create += local_stop - local_start; return return_value; } logical wnga_pgroup_destroy(Integer grp) { logical return_value; double local_start, local_stop; ++count_pnga_pgroup_destroy; local_start = MPI_Wtime(); return_value = pnga_pgroup_destroy(grp); local_stop = MPI_Wtime(); time_pnga_pgroup_destroy += local_stop - local_start; return return_value; } Integer wnga_pgroup_get_default() { Integer return_value; double local_start, local_stop; ++count_pnga_pgroup_get_default; local_start = MPI_Wtime(); return_value = pnga_pgroup_get_default(); local_stop = MPI_Wtime(); time_pnga_pgroup_get_default += local_stop - local_start; return return_value; } Integer wnga_pgroup_get_mirror() { Integer return_value; double local_start, local_stop; ++count_pnga_pgroup_get_mirror; local_start = MPI_Wtime(); return_value = pnga_pgroup_get_mirror(); local_stop = MPI_Wtime(); time_pnga_pgroup_get_mirror += local_stop - local_start; return return_value; } Integer wnga_pgroup_get_world() { Integer return_value; double local_start, local_stop; ++count_pnga_pgroup_get_world; local_start = MPI_Wtime(); return_value = pnga_pgroup_get_world(); local_stop = MPI_Wtime(); time_pnga_pgroup_get_world += local_stop - local_start; return return_value; } void wnga_pgroup_gop(Integer p_grp, Integer type, void *x, Integer n, char *op) { double local_start, local_stop; ++count_pnga_pgroup_gop; local_start = MPI_Wtime(); pnga_pgroup_gop(p_grp, type, x, n, op); local_stop = MPI_Wtime(); time_pnga_pgroup_gop += local_stop - local_start; } Integer wnga_pgroup_nnodes(Integer grp) { Integer return_value; double local_start, local_stop; ++count_pnga_pgroup_nnodes; local_start = MPI_Wtime(); return_value = pnga_pgroup_nnodes(grp); local_stop = MPI_Wtime(); time_pnga_pgroup_nnodes += local_stop - local_start; return return_value; } Integer wnga_pgroup_nodeid(Integer grp) { Integer return_value; double local_start, local_stop; ++count_pnga_pgroup_nodeid; local_start = MPI_Wtime(); return_value = pnga_pgroup_nodeid(grp); local_stop = MPI_Wtime(); time_pnga_pgroup_nodeid += local_stop - local_start; return return_value; } void wnga_pgroup_set_default(Integer grp) { double local_start, local_stop; ++count_pnga_pgroup_set_default; local_start = MPI_Wtime(); pnga_pgroup_set_default(grp); local_stop = MPI_Wtime(); time_pnga_pgroup_set_default += local_stop - local_start; } Integer wnga_pgroup_split(Integer grp, Integer grp_num) { Integer return_value; double local_start, local_stop; ++count_pnga_pgroup_split; local_start = MPI_Wtime(); return_value = pnga_pgroup_split(grp, grp_num); local_stop = MPI_Wtime(); time_pnga_pgroup_split += local_stop - local_start; return return_value; } Integer wnga_pgroup_split_irreg(Integer grp, Integer mycolor) { Integer return_value; double local_start, local_stop; ++count_pnga_pgroup_split_irreg; local_start = MPI_Wtime(); return_value = pnga_pgroup_split_irreg(grp, mycolor); local_stop = MPI_Wtime(); time_pnga_pgroup_split_irreg += local_stop - local_start; return return_value; } void wnga_pgroup_sync(Integer grp_id) { double local_start, local_stop; ++count_pnga_pgroup_sync; local_start = MPI_Wtime(); pnga_pgroup_sync(grp_id); local_stop = MPI_Wtime(); time_pnga_pgroup_sync += local_stop - local_start; } void wnga_print(Integer g_a) { double local_start, local_stop; ++count_pnga_print; local_start = MPI_Wtime(); pnga_print(g_a); local_stop = MPI_Wtime(); time_pnga_print += local_stop - local_start; } void wnga_print_distribution(int fstyle, Integer g_a) { double local_start, local_stop; ++count_pnga_print_distribution; local_start = MPI_Wtime(); pnga_print_distribution(fstyle, g_a); local_stop = MPI_Wtime(); time_pnga_print_distribution += local_stop - local_start; } void wnga_print_file(FILE *file, Integer g_a) { double local_start, local_stop; ++count_pnga_print_file; local_start = MPI_Wtime(); pnga_print_file(file, g_a); local_stop = MPI_Wtime(); time_pnga_print_file += local_stop - local_start; } void wnga_print_patch(Integer g_a, Integer *lo, Integer *hi, Integer pretty) { double local_start, local_stop; ++count_pnga_print_patch; local_start = MPI_Wtime(); pnga_print_patch(g_a, lo, hi, pretty); local_stop = MPI_Wtime(); time_pnga_print_patch += local_stop - local_start; } void wnga_print_patch2d(Integer g_a, Integer ilo, Integer ihi, Integer jlo, Integer jhi, Integer pretty) { double local_start, local_stop; ++count_pnga_print_patch2d; local_start = MPI_Wtime(); pnga_print_patch2d(g_a, ilo, ihi, jlo, jhi, pretty); local_stop = MPI_Wtime(); time_pnga_print_patch2d += local_stop - local_start; } void wnga_print_patch_file(FILE *file, Integer g_a, Integer *lo, Integer *hi, Integer pretty) { double local_start, local_stop; ++count_pnga_print_patch_file; local_start = MPI_Wtime(); pnga_print_patch_file(file, g_a, lo, hi, pretty); local_stop = MPI_Wtime(); time_pnga_print_patch_file += local_stop - local_start; } void wnga_print_patch_file2d(FILE *file, Integer g_a, Integer ilo, Integer ihi, Integer jlo, Integer jhi, Integer pretty) { double local_start, local_stop; ++count_pnga_print_patch_file2d; local_start = MPI_Wtime(); pnga_print_patch_file2d(file, g_a, ilo, ihi, jlo, jhi, pretty); local_stop = MPI_Wtime(); time_pnga_print_patch_file2d += local_stop - local_start; } void wnga_print_stats() { double local_start, local_stop; ++count_pnga_print_stats; local_start = MPI_Wtime(); pnga_print_stats(); local_stop = MPI_Wtime(); time_pnga_print_stats += local_stop - local_start; } void wnga_proc_topology(Integer g_a, Integer proc, Integer *subscript) { double local_start, local_stop; ++count_pnga_proc_topology; local_start = MPI_Wtime(); pnga_proc_topology(g_a, proc, subscript); local_stop = MPI_Wtime(); time_pnga_proc_topology += local_stop - local_start; } void wnga_put(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld) { double local_start, local_stop; ++count_pnga_put; local_start = MPI_Wtime(); pnga_put(g_a, lo, hi, buf, ld); local_stop = MPI_Wtime(); time_pnga_put += local_stop - local_start; } void wnga_put_field(Integer g_a, Integer *lo, Integer *hi, Integer foff, Integer fsize, void *buf, Integer *ld) { double local_start, local_stop; ++count_pnga_put_field; local_start = MPI_Wtime(); pnga_put_field(g_a, lo, hi, foff, fsize, buf, ld); local_stop = MPI_Wtime(); time_pnga_put_field += local_stop - local_start; } void wnga_randomize(Integer g_a, void *val) { double local_start, local_stop; ++count_pnga_randomize; local_start = MPI_Wtime(); pnga_randomize(g_a, val); local_stop = MPI_Wtime(); time_pnga_randomize += local_stop - local_start; } Integer wnga_read_inc(Integer g_a, Integer *subscript, Integer inc) { Integer return_value; double local_start, local_stop; ++count_pnga_read_inc; local_start = MPI_Wtime(); return_value = pnga_read_inc(g_a, subscript, inc); local_stop = MPI_Wtime(); time_pnga_read_inc += local_stop - local_start; return return_value; } void wnga_recip(Integer g_a) { double local_start, local_stop; ++count_pnga_recip; local_start = MPI_Wtime(); pnga_recip(g_a); local_stop = MPI_Wtime(); time_pnga_recip += local_stop - local_start; } void wnga_recip_patch(Integer g_a, Integer *lo, Integer *hi) { double local_start, local_stop; ++count_pnga_recip_patch; local_start = MPI_Wtime(); pnga_recip_patch(g_a, lo, hi); local_stop = MPI_Wtime(); time_pnga_recip_patch += local_stop - local_start; } int wnga_register_type(size_t size) { int return_value; double local_start, local_stop; ++count_pnga_register_type; local_start = MPI_Wtime(); return_value = pnga_register_type(size); local_stop = MPI_Wtime(); time_pnga_register_type += local_stop - local_start; return return_value; } void wnga_release(Integer g_a, Integer *lo, Integer *hi) { double local_start, local_stop; ++count_pnga_release; local_start = MPI_Wtime(); pnga_release(g_a, lo, hi); local_stop = MPI_Wtime(); time_pnga_release += local_stop - local_start; } void wnga_release_block(Integer g_a, Integer iblock) { double local_start, local_stop; ++count_pnga_release_block; local_start = MPI_Wtime(); pnga_release_block(g_a, iblock); local_stop = MPI_Wtime(); time_pnga_release_block += local_stop - local_start; } void wnga_release_block_grid(Integer g_a, Integer *index) { double local_start, local_stop; ++count_pnga_release_block_grid; local_start = MPI_Wtime(); pnga_release_block_grid(g_a, index); local_stop = MPI_Wtime(); time_pnga_release_block_grid += local_stop - local_start; } void wnga_release_block_segment(Integer g_a, Integer iproc) { double local_start, local_stop; ++count_pnga_release_block_segment; local_start = MPI_Wtime(); pnga_release_block_segment(g_a, iproc); local_stop = MPI_Wtime(); time_pnga_release_block_segment += local_stop - local_start; } void wnga_release_ghost_element(Integer g_a, Integer subscript[]) { double local_start, local_stop; ++count_pnga_release_ghost_element; local_start = MPI_Wtime(); pnga_release_ghost_element(g_a, subscript); local_stop = MPI_Wtime(); time_pnga_release_ghost_element += local_stop - local_start; } void wnga_release_ghosts(Integer g_a) { double local_start, local_stop; ++count_pnga_release_ghosts; local_start = MPI_Wtime(); pnga_release_ghosts(g_a); local_stop = MPI_Wtime(); time_pnga_release_ghosts += local_stop - local_start; } void wnga_release_update(Integer g_a, Integer *lo, Integer *hi) { double local_start, local_stop; ++count_pnga_release_update; local_start = MPI_Wtime(); pnga_release_update(g_a, lo, hi); local_stop = MPI_Wtime(); time_pnga_release_update += local_stop - local_start; } void wnga_release_update_block(Integer g_a, Integer iblock) { double local_start, local_stop; ++count_pnga_release_update_block; local_start = MPI_Wtime(); pnga_release_update_block(g_a, iblock); local_stop = MPI_Wtime(); time_pnga_release_update_block += local_stop - local_start; } void wnga_release_update_block_grid(Integer g_a, Integer *index) { double local_start, local_stop; ++count_pnga_release_update_block_grid; local_start = MPI_Wtime(); pnga_release_update_block_grid(g_a, index); local_stop = MPI_Wtime(); time_pnga_release_update_block_grid += local_stop - local_start; } void wnga_release_update_block_segment(Integer g_a, Integer iproc) { double local_start, local_stop; ++count_pnga_release_update_block_segment; local_start = MPI_Wtime(); pnga_release_update_block_segment(g_a, iproc); local_stop = MPI_Wtime(); time_pnga_release_update_block_segment += local_stop - local_start; } void wnga_release_update_ghost_element(Integer g_a, Integer subscript[]) { double local_start, local_stop; ++count_pnga_release_update_ghost_element; local_start = MPI_Wtime(); pnga_release_update_ghost_element(g_a, subscript); local_stop = MPI_Wtime(); time_pnga_release_update_ghost_element += local_stop - local_start; } void wnga_release_update_ghosts(Integer g_a) { double local_start, local_stop; ++count_pnga_release_update_ghosts; local_start = MPI_Wtime(); pnga_release_update_ghosts(g_a); local_stop = MPI_Wtime(); time_pnga_release_update_ghosts += local_stop - local_start; } void wnga_scale(Integer g_a, void *alpha) { double local_start, local_stop; ++count_pnga_scale; local_start = MPI_Wtime(); pnga_scale(g_a, alpha); local_stop = MPI_Wtime(); time_pnga_scale += local_stop - local_start; } void wnga_scale_cols(Integer g_a, Integer g_v) { double local_start, local_stop; ++count_pnga_scale_cols; local_start = MPI_Wtime(); pnga_scale_cols(g_a, g_v); local_stop = MPI_Wtime(); time_pnga_scale_cols += local_stop - local_start; } void wnga_scale_patch(Integer g_a, Integer *lo, Integer *hi, void *alpha) { double local_start, local_stop; ++count_pnga_scale_patch; local_start = MPI_Wtime(); pnga_scale_patch(g_a, lo, hi, alpha); local_stop = MPI_Wtime(); time_pnga_scale_patch += local_stop - local_start; } void wnga_scale_rows(Integer g_a, Integer g_v) { double local_start, local_stop; ++count_pnga_scale_rows; local_start = MPI_Wtime(); pnga_scale_rows(g_a, g_v); local_stop = MPI_Wtime(); time_pnga_scale_rows += local_stop - local_start; } void wnga_scan_add(Integer g_a, Integer g_b, Integer g_sbit, Integer lo, Integer hi, Integer excl) { double local_start, local_stop; ++count_pnga_scan_add; local_start = MPI_Wtime(); pnga_scan_add(g_a, g_b, g_sbit, lo, hi, excl); local_stop = MPI_Wtime(); time_pnga_scan_add += local_stop - local_start; } void wnga_scan_copy(Integer g_a, Integer g_b, Integer g_sbit, Integer lo, Integer hi) { double local_start, local_stop; ++count_pnga_scan_copy; local_start = MPI_Wtime(); pnga_scan_copy(g_a, g_b, g_sbit, lo, hi); local_stop = MPI_Wtime(); time_pnga_scan_copy += local_stop - local_start; } void wnga_scatter(Integer g_a, void *v, void *subscript, Integer c_flag, Integer nv) { double local_start, local_stop; ++count_pnga_scatter; local_start = MPI_Wtime(); pnga_scatter(g_a, v, subscript, c_flag, nv); local_stop = MPI_Wtime(); time_pnga_scatter += local_stop - local_start; } void wnga_scatter2d(Integer g_a, void *v, Integer *i, Integer *j, Integer nv) { double local_start, local_stop; ++count_pnga_scatter2d; local_start = MPI_Wtime(); pnga_scatter2d(g_a, v, i, j, nv); local_stop = MPI_Wtime(); time_pnga_scatter2d += local_stop - local_start; } void wnga_scatter_acc(Integer g_a, void *v, void *subscript, Integer c_flag, Integer nv, void *alpha) { double local_start, local_stop; ++count_pnga_scatter_acc; local_start = MPI_Wtime(); pnga_scatter_acc(g_a, v, subscript, c_flag, nv, alpha); local_stop = MPI_Wtime(); time_pnga_scatter_acc += local_stop - local_start; } void wnga_scatter_acc2d(Integer g_a, void *v, Integer *i, Integer *j, Integer nv, void *alpha) { double local_start, local_stop; ++count_pnga_scatter_acc2d; local_start = MPI_Wtime(); pnga_scatter_acc2d(g_a, v, i, j, nv, alpha); local_stop = MPI_Wtime(); time_pnga_scatter_acc2d += local_stop - local_start; } void wnga_select_elem(Integer g_a, char *op, void *val, Integer *subscript) { double local_start, local_stop; ++count_pnga_select_elem; local_start = MPI_Wtime(); pnga_select_elem(g_a, op, val, subscript); local_stop = MPI_Wtime(); time_pnga_select_elem += local_stop - local_start; } void wnga_set_array_name(Integer g_a, char *array_name) { double local_start, local_stop; ++count_pnga_set_array_name; local_start = MPI_Wtime(); pnga_set_array_name(g_a, array_name); local_stop = MPI_Wtime(); time_pnga_set_array_name += local_stop - local_start; } void wnga_set_block_cyclic(Integer g_a, Integer *dims) { double local_start, local_stop; ++count_pnga_set_block_cyclic; local_start = MPI_Wtime(); pnga_set_block_cyclic(g_a, dims); local_stop = MPI_Wtime(); time_pnga_set_block_cyclic += local_stop - local_start; } void wnga_set_block_cyclic_proc_grid(Integer g_a, Integer *dims, Integer *proc_grid) { double local_start, local_stop; ++count_pnga_set_block_cyclic_proc_grid; local_start = MPI_Wtime(); pnga_set_block_cyclic_proc_grid(g_a, dims, proc_grid); local_stop = MPI_Wtime(); time_pnga_set_block_cyclic_proc_grid += local_stop - local_start; } void wnga_set_chunk(Integer g_a, Integer *chunk) { double local_start, local_stop; ++count_pnga_set_chunk; local_start = MPI_Wtime(); pnga_set_chunk(g_a, chunk); local_stop = MPI_Wtime(); time_pnga_set_chunk += local_stop - local_start; } void wnga_set_data(Integer g_a, Integer ndim, Integer *dims, Integer type) { double local_start, local_stop; ++count_pnga_set_data; local_start = MPI_Wtime(); pnga_set_data(g_a, ndim, dims, type); local_stop = MPI_Wtime(); time_pnga_set_data += local_stop - local_start; } void wnga_set_debug(logical flag) { double local_start, local_stop; ++count_pnga_set_debug; local_start = MPI_Wtime(); pnga_set_debug(flag); local_stop = MPI_Wtime(); time_pnga_set_debug += local_stop - local_start; } void wnga_set_diagonal(Integer g_a, Integer g_v) { double local_start, local_stop; ++count_pnga_set_diagonal; local_start = MPI_Wtime(); pnga_set_diagonal(g_a, g_v); local_stop = MPI_Wtime(); time_pnga_set_diagonal += local_stop - local_start; } void wnga_set_ghost_corner_flag(Integer g_a, logical flag) { double local_start, local_stop; ++count_pnga_set_ghost_corner_flag; local_start = MPI_Wtime(); pnga_set_ghost_corner_flag(g_a, flag); local_stop = MPI_Wtime(); time_pnga_set_ghost_corner_flag += local_stop - local_start; } logical wnga_set_ghost_info(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_set_ghost_info; local_start = MPI_Wtime(); return_value = pnga_set_ghost_info(g_a); local_stop = MPI_Wtime(); time_pnga_set_ghost_info += local_stop - local_start; return return_value; } void wnga_set_ghosts(Integer g_a, Integer *width) { double local_start, local_stop; ++count_pnga_set_ghosts; local_start = MPI_Wtime(); pnga_set_ghosts(g_a, width); local_stop = MPI_Wtime(); time_pnga_set_ghosts += local_stop - local_start; } void wnga_set_irreg_distr(Integer g_a, Integer *map, Integer *block) { double local_start, local_stop; ++count_pnga_set_irreg_distr; local_start = MPI_Wtime(); pnga_set_irreg_distr(g_a, map, block); local_stop = MPI_Wtime(); time_pnga_set_irreg_distr += local_stop - local_start; } void wnga_set_irreg_flag(Integer g_a, logical flag) { double local_start, local_stop; ++count_pnga_set_irreg_flag; local_start = MPI_Wtime(); pnga_set_irreg_flag(g_a, flag); local_stop = MPI_Wtime(); time_pnga_set_irreg_flag += local_stop - local_start; } void wnga_set_memory_limit(Integer mem_limit) { double local_start, local_stop; ++count_pnga_set_memory_limit; local_start = MPI_Wtime(); pnga_set_memory_limit(mem_limit); local_stop = MPI_Wtime(); time_pnga_set_memory_limit += local_stop - local_start; } void wnga_set_pgroup(Integer g_a, Integer p_handle) { double local_start, local_stop; ++count_pnga_set_pgroup; local_start = MPI_Wtime(); pnga_set_pgroup(g_a, p_handle); local_stop = MPI_Wtime(); time_pnga_set_pgroup += local_stop - local_start; } void wnga_set_restricted(Integer g_a, Integer *list, Integer size) { double local_start, local_stop; ++count_pnga_set_restricted; local_start = MPI_Wtime(); pnga_set_restricted(g_a, list, size); local_stop = MPI_Wtime(); time_pnga_set_restricted += local_stop - local_start; } void wnga_set_restricted_range(Integer g_a, Integer lo_proc, Integer hi_proc) { double local_start, local_stop; ++count_pnga_set_restricted_range; local_start = MPI_Wtime(); pnga_set_restricted_range(g_a, lo_proc, hi_proc); local_stop = MPI_Wtime(); time_pnga_set_restricted_range += local_stop - local_start; } logical wnga_set_update4_info(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_set_update4_info; local_start = MPI_Wtime(); return_value = pnga_set_update4_info(g_a); local_stop = MPI_Wtime(); time_pnga_set_update4_info += local_stop - local_start; return return_value; } logical wnga_set_update5_info(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_set_update5_info; local_start = MPI_Wtime(); return_value = pnga_set_update5_info(g_a); local_stop = MPI_Wtime(); time_pnga_set_update5_info += local_stop - local_start; return return_value; } void wnga_shift_diagonal(Integer g_a, void *c) { double local_start, local_stop; ++count_pnga_shift_diagonal; local_start = MPI_Wtime(); pnga_shift_diagonal(g_a, c); local_stop = MPI_Wtime(); time_pnga_shift_diagonal += local_stop - local_start; } Integer wnga_solve(Integer g_a, Integer g_b) { Integer return_value; double local_start, local_stop; ++count_pnga_solve; local_start = MPI_Wtime(); return_value = pnga_solve(g_a, g_b); local_stop = MPI_Wtime(); time_pnga_solve += local_stop - local_start; return return_value; } Integer wnga_spd_invert(Integer g_a) { Integer return_value; double local_start, local_stop; ++count_pnga_spd_invert; local_start = MPI_Wtime(); return_value = pnga_spd_invert(g_a); local_stop = MPI_Wtime(); time_pnga_spd_invert += local_stop - local_start; return return_value; } void wnga_step_bound_info(Integer g_xx, Integer g_vv, Integer g_xxll, Integer g_xxuu, void *boundmin, void *wolfemin, void *boundmax) { double local_start, local_stop; ++count_pnga_step_bound_info; local_start = MPI_Wtime(); pnga_step_bound_info(g_xx, g_vv, g_xxll, g_xxuu, boundmin, wolfemin, boundmax); local_stop = MPI_Wtime(); time_pnga_step_bound_info += local_stop - local_start; } void wnga_step_bound_info_patch(Integer g_xx, Integer *xxlo, Integer *xxhi, Integer g_vv, Integer *vvlo, Integer *vvhi, Integer g_xxll, Integer *xxlllo, Integer *xxllhi, Integer g_xxuu, Integer *xxuulo, Integer *xxuuhi, void *boundmin, void *wolfemin, void *boundmax) { double local_start, local_stop; ++count_pnga_step_bound_info_patch; local_start = MPI_Wtime(); pnga_step_bound_info_patch(g_xx, xxlo, xxhi, g_vv, vvlo, vvhi, g_xxll, xxlllo, xxllhi, g_xxuu, xxuulo, xxuuhi, boundmin, wolfemin, boundmax); local_stop = MPI_Wtime(); time_pnga_step_bound_info_patch += local_stop - local_start; } void wnga_step_mask_patch(Integer g_a, Integer *alo, Integer *ahi, Integer g_b, Integer *blo, Integer *bhi, Integer g_c, Integer *clo, Integer *chi) { double local_start, local_stop; ++count_pnga_step_mask_patch; local_start = MPI_Wtime(); pnga_step_mask_patch(g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi); local_stop = MPI_Wtime(); time_pnga_step_mask_patch += local_stop - local_start; } void wnga_step_max(Integer g_a, Integer g_b, void *retval) { double local_start, local_stop; ++count_pnga_step_max; local_start = MPI_Wtime(); pnga_step_max(g_a, g_b, retval); local_stop = MPI_Wtime(); time_pnga_step_max += local_stop - local_start; } void wnga_step_max_patch(Integer g_a, Integer *alo, Integer *ahi, Integer g_b, Integer *blo, Integer *bhi, void *result) { double local_start, local_stop; ++count_pnga_step_max_patch; local_start = MPI_Wtime(); pnga_step_max_patch(g_a, alo, ahi, g_b, blo, bhi, result); local_stop = MPI_Wtime(); time_pnga_step_max_patch += local_stop - local_start; } void wnga_strided_acc(Integer g_a, Integer *lo, Integer *hi, Integer *skip, void *buf, Integer *ld, void *alpha) { double local_start, local_stop; ++count_pnga_strided_acc; local_start = MPI_Wtime(); pnga_strided_acc(g_a, lo, hi, skip, buf, ld, alpha); local_stop = MPI_Wtime(); time_pnga_strided_acc += local_stop - local_start; } void wnga_strided_get(Integer g_a, Integer *lo, Integer *hi, Integer *skip, void *buf, Integer *ld) { double local_start, local_stop; ++count_pnga_strided_get; local_start = MPI_Wtime(); pnga_strided_get(g_a, lo, hi, skip, buf, ld); local_stop = MPI_Wtime(); time_pnga_strided_get += local_stop - local_start; } void wnga_strided_put(Integer g_a, Integer *lo, Integer *hi, Integer *skip, void *buf, Integer *ld) { double local_start, local_stop; ++count_pnga_strided_put; local_start = MPI_Wtime(); pnga_strided_put(g_a, lo, hi, skip, buf, ld); local_stop = MPI_Wtime(); time_pnga_strided_put += local_stop - local_start; } void wnga_summarize(Integer verbose) { double local_start, local_stop; ++count_pnga_summarize; local_start = MPI_Wtime(); pnga_summarize(verbose); local_stop = MPI_Wtime(); time_pnga_summarize += local_stop - local_start; } void wnga_symmetrize(Integer g_a) { double local_start, local_stop; ++count_pnga_symmetrize; local_start = MPI_Wtime(); pnga_symmetrize(g_a); local_stop = MPI_Wtime(); time_pnga_symmetrize += local_stop - local_start; } void wnga_sync() { double local_start, local_stop; ++count_pnga_sync; local_start = MPI_Wtime(); pnga_sync(); local_stop = MPI_Wtime(); time_pnga_sync += local_stop - local_start; } double wnga_timer() { double return_value; double local_start, local_stop; ++count_pnga_timer; local_start = MPI_Wtime(); return_value = pnga_timer(); local_stop = MPI_Wtime(); time_pnga_timer += local_stop - local_start; return return_value; } Integer wnga_total_blocks(Integer g_a) { Integer return_value; double local_start, local_stop; ++count_pnga_total_blocks; local_start = MPI_Wtime(); return_value = pnga_total_blocks(g_a); local_stop = MPI_Wtime(); time_pnga_total_blocks += local_stop - local_start; return return_value; } void wnga_transpose(Integer g_a, Integer g_b) { double local_start, local_stop; ++count_pnga_transpose; local_start = MPI_Wtime(); pnga_transpose(g_a, g_b); local_stop = MPI_Wtime(); time_pnga_transpose += local_stop - local_start; } Integer wnga_type_c2f(Integer type) { Integer return_value; double local_start, local_stop; ++count_pnga_type_c2f; local_start = MPI_Wtime(); return_value = pnga_type_c2f(type); local_stop = MPI_Wtime(); time_pnga_type_c2f += local_stop - local_start; return return_value; } Integer wnga_type_f2c(Integer type) { Integer return_value; double local_start, local_stop; ++count_pnga_type_f2c; local_start = MPI_Wtime(); return_value = pnga_type_f2c(type); local_stop = MPI_Wtime(); time_pnga_type_f2c += local_stop - local_start; return return_value; } void wnga_unlock(Integer mutex) { double local_start, local_stop; ++count_pnga_unlock; local_start = MPI_Wtime(); pnga_unlock(mutex); local_stop = MPI_Wtime(); time_pnga_unlock += local_stop - local_start; } void wnga_unpack(Integer g_a, Integer g_b, Integer g_sbit, Integer lo, Integer hi, Integer *icount) { double local_start, local_stop; ++count_pnga_unpack; local_start = MPI_Wtime(); pnga_unpack(g_a, g_b, g_sbit, lo, hi, icount); local_stop = MPI_Wtime(); time_pnga_unpack += local_stop - local_start; } void wnga_update1_ghosts(Integer g_a) { double local_start, local_stop; ++count_pnga_update1_ghosts; local_start = MPI_Wtime(); pnga_update1_ghosts(g_a); local_stop = MPI_Wtime(); time_pnga_update1_ghosts += local_stop - local_start; } logical wnga_update2_ghosts(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_update2_ghosts; local_start = MPI_Wtime(); return_value = pnga_update2_ghosts(g_a); local_stop = MPI_Wtime(); time_pnga_update2_ghosts += local_stop - local_start; return return_value; } logical wnga_update3_ghosts(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_update3_ghosts; local_start = MPI_Wtime(); return_value = pnga_update3_ghosts(g_a); local_stop = MPI_Wtime(); time_pnga_update3_ghosts += local_stop - local_start; return return_value; } logical wnga_update44_ghosts(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_update44_ghosts; local_start = MPI_Wtime(); return_value = pnga_update44_ghosts(g_a); local_stop = MPI_Wtime(); time_pnga_update44_ghosts += local_stop - local_start; return return_value; } logical wnga_update4_ghosts(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_update4_ghosts; local_start = MPI_Wtime(); return_value = pnga_update4_ghosts(g_a); local_stop = MPI_Wtime(); time_pnga_update4_ghosts += local_stop - local_start; return return_value; } logical wnga_update55_ghosts(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_update55_ghosts; local_start = MPI_Wtime(); return_value = pnga_update55_ghosts(g_a); local_stop = MPI_Wtime(); time_pnga_update55_ghosts += local_stop - local_start; return return_value; } logical wnga_update5_ghosts(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_update5_ghosts; local_start = MPI_Wtime(); return_value = pnga_update5_ghosts(g_a); local_stop = MPI_Wtime(); time_pnga_update5_ghosts += local_stop - local_start; return return_value; } logical wnga_update6_ghosts(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_update6_ghosts; local_start = MPI_Wtime(); return_value = pnga_update6_ghosts(g_a); local_stop = MPI_Wtime(); time_pnga_update6_ghosts += local_stop - local_start; return return_value; } logical wnga_update7_ghosts(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_update7_ghosts; local_start = MPI_Wtime(); return_value = pnga_update7_ghosts(g_a); local_stop = MPI_Wtime(); time_pnga_update7_ghosts += local_stop - local_start; return return_value; } logical wnga_update_ghost_dir(Integer g_a, Integer pdim, Integer pdir, logical pflag) { logical return_value; double local_start, local_stop; ++count_pnga_update_ghost_dir; local_start = MPI_Wtime(); return_value = pnga_update_ghost_dir(g_a, pdim, pdir, pflag); local_stop = MPI_Wtime(); time_pnga_update_ghost_dir += local_stop - local_start; return return_value; } void wnga_update_ghosts(Integer g_a) { double local_start, local_stop; ++count_pnga_update_ghosts; local_start = MPI_Wtime(); pnga_update_ghosts(g_a); local_stop = MPI_Wtime(); time_pnga_update_ghosts += local_stop - local_start; } void wnga_update_ghosts_nb(Integer g_a, Integer *nbhandle) { double local_start, local_stop; ++count_pnga_update_ghosts_nb; local_start = MPI_Wtime(); pnga_update_ghosts_nb(g_a, nbhandle); local_stop = MPI_Wtime(); time_pnga_update_ghosts_nb += local_stop - local_start; } logical wnga_uses_ma() { logical return_value; double local_start, local_stop; ++count_pnga_uses_ma; local_start = MPI_Wtime(); return_value = pnga_uses_ma(); local_stop = MPI_Wtime(); time_pnga_uses_ma += local_stop - local_start; return return_value; } logical wnga_uses_proc_grid(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_uses_proc_grid; local_start = MPI_Wtime(); return_value = pnga_uses_proc_grid(g_a); local_stop = MPI_Wtime(); time_pnga_uses_proc_grid += local_stop - local_start; return return_value; } logical wnga_valid_handle(Integer g_a) { logical return_value; double local_start, local_stop; ++count_pnga_valid_handle; local_start = MPI_Wtime(); return_value = pnga_valid_handle(g_a); local_stop = MPI_Wtime(); time_pnga_valid_handle += local_stop - local_start; return return_value; } Integer wnga_verify_handle(Integer g_a) { Integer return_value; double local_start, local_stop; ++count_pnga_verify_handle; local_start = MPI_Wtime(); return_value = pnga_verify_handle(g_a); local_stop = MPI_Wtime(); time_pnga_verify_handle += local_stop - local_start; return return_value; } DoublePrecision wnga_wtime() { DoublePrecision return_value; double local_start, local_stop; ++count_pnga_wtime; local_start = MPI_Wtime(); return_value = pnga_wtime(); local_stop = MPI_Wtime(); time_pnga_wtime += local_stop - local_start; return return_value; } void wnga_zero(Integer g_a) { double local_start, local_stop; ++count_pnga_zero; local_start = MPI_Wtime(); pnga_zero(g_a); local_stop = MPI_Wtime(); time_pnga_zero += local_stop - local_start; } void wnga_zero_diagonal(Integer g_a) { double local_start, local_stop; ++count_pnga_zero_diagonal; local_start = MPI_Wtime(); pnga_zero_diagonal(g_a); local_stop = MPI_Wtime(); time_pnga_zero_diagonal += local_stop - local_start; } void wnga_zero_patch(Integer g_a, Integer *lo, Integer *hi) { double local_start, local_stop; ++count_pnga_zero_patch; local_start = MPI_Wtime(); pnga_zero_patch(g_a, lo, hi); local_stop = MPI_Wtime(); time_pnga_zero_patch += local_stop - local_start; } void wnga_initialize() { ++count_pnga_initialize; pnga_initialize(); MPI_Comm_rank(MPI_COMM_WORLD, &me); MPI_Comm_size(MPI_COMM_WORLD, &nproc); } void wnga_initialize_ltd(Integer limit) { ++count_pnga_initialize_ltd; pnga_initialize_ltd(limit); MPI_Comm_rank(MPI_COMM_WORLD, &me); MPI_Comm_size(MPI_COMM_WORLD, &nproc); } void wnga_terminate() { ++count_pnga_terminate; pnga_terminate(); /* don't dump info if terminate more than once */ if (1 == count_pnga_terminate) { double recvbuf = 0.0; MPI_Reduce(&time_pnga_abs_value, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_abs_value,%ld,%lf\n", count_pnga_abs_value, recvbuf); } MPI_Reduce(&time_pnga_abs_value_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_abs_value_patch,%ld,%lf\n", count_pnga_abs_value_patch, recvbuf); } MPI_Reduce(&time_pnga_acc, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_acc,%ld,%lf\n", count_pnga_acc, recvbuf); } MPI_Reduce(&time_pnga_access_block_grid_idx, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_access_block_grid_idx,%ld,%lf\n", count_pnga_access_block_grid_idx, recvbuf); } MPI_Reduce(&time_pnga_access_block_grid_ptr, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_access_block_grid_ptr,%ld,%lf\n", count_pnga_access_block_grid_ptr, recvbuf); } MPI_Reduce(&time_pnga_access_block_idx, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_access_block_idx,%ld,%lf\n", count_pnga_access_block_idx, recvbuf); } MPI_Reduce(&time_pnga_access_block_ptr, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_access_block_ptr,%ld,%lf\n", count_pnga_access_block_ptr, recvbuf); } MPI_Reduce(&time_pnga_access_block_segment_idx, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_access_block_segment_idx,%ld,%lf\n", count_pnga_access_block_segment_idx, recvbuf); } MPI_Reduce(&time_pnga_access_block_segment_ptr, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_access_block_segment_ptr,%ld,%lf\n", count_pnga_access_block_segment_ptr, recvbuf); } MPI_Reduce(&time_pnga_access_ghost_element, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_access_ghost_element,%ld,%lf\n", count_pnga_access_ghost_element, recvbuf); } MPI_Reduce(&time_pnga_access_ghost_element_ptr, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_access_ghost_element_ptr,%ld,%lf\n", count_pnga_access_ghost_element_ptr, recvbuf); } MPI_Reduce(&time_pnga_access_ghost_ptr, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_access_ghost_ptr,%ld,%lf\n", count_pnga_access_ghost_ptr, recvbuf); } MPI_Reduce(&time_pnga_access_ghosts, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_access_ghosts,%ld,%lf\n", count_pnga_access_ghosts, recvbuf); } MPI_Reduce(&time_pnga_access_idx, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_access_idx,%ld,%lf\n", count_pnga_access_idx, recvbuf); } MPI_Reduce(&time_pnga_access_ptr, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_access_ptr,%ld,%lf\n", count_pnga_access_ptr, recvbuf); } MPI_Reduce(&time_pnga_add, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_add,%ld,%lf\n", count_pnga_add, recvbuf); } MPI_Reduce(&time_pnga_add_constant, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_add_constant,%ld,%lf\n", count_pnga_add_constant, recvbuf); } MPI_Reduce(&time_pnga_add_constant_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_add_constant_patch,%ld,%lf\n", count_pnga_add_constant_patch, recvbuf); } MPI_Reduce(&time_pnga_add_diagonal, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_add_diagonal,%ld,%lf\n", count_pnga_add_diagonal, recvbuf); } MPI_Reduce(&time_pnga_add_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_add_patch,%ld,%lf\n", count_pnga_add_patch, recvbuf); } MPI_Reduce(&time_pnga_alloc_gatscat_buf, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_alloc_gatscat_buf,%ld,%lf\n", count_pnga_alloc_gatscat_buf, recvbuf); } MPI_Reduce(&time_pnga_allocate, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_allocate,%ld,%lf\n", count_pnga_allocate, recvbuf); } MPI_Reduce(&time_pnga_bin_index, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_bin_index,%ld,%lf\n", count_pnga_bin_index, recvbuf); } MPI_Reduce(&time_pnga_bin_sorter, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_bin_sorter,%ld,%lf\n", count_pnga_bin_sorter, recvbuf); } MPI_Reduce(&time_pnga_brdcst, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_brdcst,%ld,%lf\n", count_pnga_brdcst, recvbuf); } MPI_Reduce(&time_pnga_check_handle, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_check_handle,%ld,%lf\n", count_pnga_check_handle, recvbuf); } MPI_Reduce(&time_pnga_cluster_nnodes, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_cluster_nnodes,%ld,%lf\n", count_pnga_cluster_nnodes, recvbuf); } MPI_Reduce(&time_pnga_cluster_nodeid, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_cluster_nodeid,%ld,%lf\n", count_pnga_cluster_nodeid, recvbuf); } MPI_Reduce(&time_pnga_cluster_nprocs, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_cluster_nprocs,%ld,%lf\n", count_pnga_cluster_nprocs, recvbuf); } MPI_Reduce(&time_pnga_cluster_proc_nodeid, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_cluster_proc_nodeid,%ld,%lf\n", count_pnga_cluster_proc_nodeid, recvbuf); } MPI_Reduce(&time_pnga_cluster_procid, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_cluster_procid,%ld,%lf\n", count_pnga_cluster_procid, recvbuf); } MPI_Reduce(&time_pnga_comp_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_comp_patch,%ld,%lf\n", count_pnga_comp_patch, recvbuf); } MPI_Reduce(&time_pnga_compare_distr, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_compare_distr,%ld,%lf\n", count_pnga_compare_distr, recvbuf); } MPI_Reduce(&time_pnga_copy, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_copy,%ld,%lf\n", count_pnga_copy, recvbuf); } MPI_Reduce(&time_pnga_copy_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_copy_patch,%ld,%lf\n", count_pnga_copy_patch, recvbuf); } MPI_Reduce(&time_pnga_copy_patch_dp, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_copy_patch_dp,%ld,%lf\n", count_pnga_copy_patch_dp, recvbuf); } MPI_Reduce(&time_pnga_create, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_create,%ld,%lf\n", count_pnga_create, recvbuf); } MPI_Reduce(&time_pnga_create_bin_range, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_create_bin_range,%ld,%lf\n", count_pnga_create_bin_range, recvbuf); } MPI_Reduce(&time_pnga_create_config, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_create_config,%ld,%lf\n", count_pnga_create_config, recvbuf); } MPI_Reduce(&time_pnga_create_ghosts, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_create_ghosts,%ld,%lf\n", count_pnga_create_ghosts, recvbuf); } MPI_Reduce(&time_pnga_create_ghosts_config, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_create_ghosts_config,%ld,%lf\n", count_pnga_create_ghosts_config, recvbuf); } MPI_Reduce(&time_pnga_create_ghosts_irreg, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_create_ghosts_irreg,%ld,%lf\n", count_pnga_create_ghosts_irreg, recvbuf); } MPI_Reduce(&time_pnga_create_ghosts_irreg_config, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_create_ghosts_irreg_config,%ld,%lf\n", count_pnga_create_ghosts_irreg_config, recvbuf); } MPI_Reduce(&time_pnga_create_handle, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_create_handle,%ld,%lf\n", count_pnga_create_handle, recvbuf); } MPI_Reduce(&time_pnga_create_irreg, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_create_irreg,%ld,%lf\n", count_pnga_create_irreg, recvbuf); } MPI_Reduce(&time_pnga_create_irreg_config, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_create_irreg_config,%ld,%lf\n", count_pnga_create_irreg_config, recvbuf); } MPI_Reduce(&time_pnga_create_mutexes, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_create_mutexes,%ld,%lf\n", count_pnga_create_mutexes, recvbuf); } MPI_Reduce(&time_pnga_ddot_patch_dp, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_ddot_patch_dp,%ld,%lf\n", count_pnga_ddot_patch_dp, recvbuf); } MPI_Reduce(&time_pnga_deregister_type, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_deregister_type,%ld,%lf\n", count_pnga_deregister_type, recvbuf); } MPI_Reduce(&time_pnga_destroy, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_destroy,%ld,%lf\n", count_pnga_destroy, recvbuf); } MPI_Reduce(&time_pnga_destroy_mutexes, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_destroy_mutexes,%ld,%lf\n", count_pnga_destroy_mutexes, recvbuf); } MPI_Reduce(&time_pnga_diag, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_diag,%ld,%lf\n", count_pnga_diag, recvbuf); } MPI_Reduce(&time_pnga_diag_reuse, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_diag_reuse,%ld,%lf\n", count_pnga_diag_reuse, recvbuf); } MPI_Reduce(&time_pnga_diag_seq, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_diag_seq,%ld,%lf\n", count_pnga_diag_seq, recvbuf); } MPI_Reduce(&time_pnga_diag_std, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_diag_std,%ld,%lf\n", count_pnga_diag_std, recvbuf); } MPI_Reduce(&time_pnga_diag_std_seq, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_diag_std_seq,%ld,%lf\n", count_pnga_diag_std_seq, recvbuf); } MPI_Reduce(&time_pnga_distribution, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_distribution,%ld,%lf\n", count_pnga_distribution, recvbuf); } MPI_Reduce(&time_pnga_dot, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_dot,%ld,%lf\n", count_pnga_dot, recvbuf); } MPI_Reduce(&time_pnga_dot_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_dot_patch,%ld,%lf\n", count_pnga_dot_patch, recvbuf); } MPI_Reduce(&time_pnga_duplicate, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_duplicate,%ld,%lf\n", count_pnga_duplicate, recvbuf); } MPI_Reduce(&time_pnga_elem_divide, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_elem_divide,%ld,%lf\n", count_pnga_elem_divide, recvbuf); } MPI_Reduce(&time_pnga_elem_divide_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_elem_divide_patch,%ld,%lf\n", count_pnga_elem_divide_patch, recvbuf); } MPI_Reduce(&time_pnga_elem_maximum, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_elem_maximum,%ld,%lf\n", count_pnga_elem_maximum, recvbuf); } MPI_Reduce(&time_pnga_elem_maximum_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_elem_maximum_patch,%ld,%lf\n", count_pnga_elem_maximum_patch, recvbuf); } MPI_Reduce(&time_pnga_elem_minimum, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_elem_minimum,%ld,%lf\n", count_pnga_elem_minimum, recvbuf); } MPI_Reduce(&time_pnga_elem_minimum_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_elem_minimum_patch,%ld,%lf\n", count_pnga_elem_minimum_patch, recvbuf); } MPI_Reduce(&time_pnga_elem_multiply, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_elem_multiply,%ld,%lf\n", count_pnga_elem_multiply, recvbuf); } MPI_Reduce(&time_pnga_elem_multiply_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_elem_multiply_patch,%ld,%lf\n", count_pnga_elem_multiply_patch, recvbuf); } MPI_Reduce(&time_pnga_elem_step_divide_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_elem_step_divide_patch,%ld,%lf\n", count_pnga_elem_step_divide_patch, recvbuf); } MPI_Reduce(&time_pnga_elem_stepb_divide_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_elem_stepb_divide_patch,%ld,%lf\n", count_pnga_elem_stepb_divide_patch, recvbuf); } MPI_Reduce(&time_pnga_error, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_error,%ld,%lf\n", count_pnga_error, recvbuf); } MPI_Reduce(&time_pnga_fence, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_fence,%ld,%lf\n", count_pnga_fence, recvbuf); } MPI_Reduce(&time_pnga_fill, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_fill,%ld,%lf\n", count_pnga_fill, recvbuf); } MPI_Reduce(&time_pnga_fill_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_fill_patch,%ld,%lf\n", count_pnga_fill_patch, recvbuf); } MPI_Reduce(&time_pnga_free_gatscat_buf, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_free_gatscat_buf,%ld,%lf\n", count_pnga_free_gatscat_buf, recvbuf); } MPI_Reduce(&time_pnga_gather, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_gather,%ld,%lf\n", count_pnga_gather, recvbuf); } MPI_Reduce(&time_pnga_gather2d, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_gather2d,%ld,%lf\n", count_pnga_gather2d, recvbuf); } MPI_Reduce(&time_pnga_get, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_get,%ld,%lf\n", count_pnga_get, recvbuf); } MPI_Reduce(&time_pnga_get_block_info, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_get_block_info,%ld,%lf\n", count_pnga_get_block_info, recvbuf); } MPI_Reduce(&time_pnga_get_debug, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_get_debug,%ld,%lf\n", count_pnga_get_debug, recvbuf); } MPI_Reduce(&time_pnga_get_diag, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_get_diag,%ld,%lf\n", count_pnga_get_diag, recvbuf); } MPI_Reduce(&time_pnga_get_dimension, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_get_dimension,%ld,%lf\n", count_pnga_get_dimension, recvbuf); } MPI_Reduce(&time_pnga_get_field, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_get_field,%ld,%lf\n", count_pnga_get_field, recvbuf); } MPI_Reduce(&time_pnga_get_ghost_block, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_get_ghost_block,%ld,%lf\n", count_pnga_get_ghost_block, recvbuf); } MPI_Reduce(&time_pnga_get_pgroup, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_get_pgroup,%ld,%lf\n", count_pnga_get_pgroup, recvbuf); } MPI_Reduce(&time_pnga_get_pgroup_size, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_get_pgroup_size,%ld,%lf\n", count_pnga_get_pgroup_size, recvbuf); } MPI_Reduce(&time_pnga_get_proc_grid, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_get_proc_grid,%ld,%lf\n", count_pnga_get_proc_grid, recvbuf); } MPI_Reduce(&time_pnga_get_proc_index, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_get_proc_index,%ld,%lf\n", count_pnga_get_proc_index, recvbuf); } MPI_Reduce(&time_pnga_ghost_barrier, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_ghost_barrier,%ld,%lf\n", count_pnga_ghost_barrier, recvbuf); } MPI_Reduce(&time_pnga_gop, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_gop,%ld,%lf\n", count_pnga_gop, recvbuf); } MPI_Reduce(&time_pnga_has_ghosts, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_has_ghosts,%ld,%lf\n", count_pnga_has_ghosts, recvbuf); } MPI_Reduce(&time_pnga_init_fence, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_init_fence,%ld,%lf\n", count_pnga_init_fence, recvbuf); } MPI_Reduce(&time_pnga_initialize, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_initialize,%ld,%lf\n", count_pnga_initialize, recvbuf); } MPI_Reduce(&time_pnga_initialize_ltd, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_initialize_ltd,%ld,%lf\n", count_pnga_initialize_ltd, recvbuf); } MPI_Reduce(&time_pnga_initialized, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_initialized,%ld,%lf\n", count_pnga_initialized, recvbuf); } MPI_Reduce(&time_pnga_inquire, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_inquire,%ld,%lf\n", count_pnga_inquire, recvbuf); } MPI_Reduce(&time_pnga_inquire_memory, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_inquire_memory,%ld,%lf\n", count_pnga_inquire_memory, recvbuf); } MPI_Reduce(&time_pnga_inquire_name, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_inquire_name,%ld,%lf\n", count_pnga_inquire_name, recvbuf); } MPI_Reduce(&time_pnga_inquire_type, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_inquire_type,%ld,%lf\n", count_pnga_inquire_type, recvbuf); } MPI_Reduce(&time_pnga_is_mirrored, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_is_mirrored,%ld,%lf\n", count_pnga_is_mirrored, recvbuf); } MPI_Reduce(&time_pnga_list_nodeid, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_list_nodeid,%ld,%lf\n", count_pnga_list_nodeid, recvbuf); } MPI_Reduce(&time_pnga_llt_solve, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_llt_solve,%ld,%lf\n", count_pnga_llt_solve, recvbuf); } MPI_Reduce(&time_pnga_locate, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_locate,%ld,%lf\n", count_pnga_locate, recvbuf); } MPI_Reduce(&time_pnga_locate_nnodes, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_locate_nnodes,%ld,%lf\n", count_pnga_locate_nnodes, recvbuf); } MPI_Reduce(&time_pnga_locate_num_blocks, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_locate_num_blocks,%ld,%lf\n", count_pnga_locate_num_blocks, recvbuf); } MPI_Reduce(&time_pnga_locate_region, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_locate_region,%ld,%lf\n", count_pnga_locate_region, recvbuf); } MPI_Reduce(&time_pnga_lock, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_lock,%ld,%lf\n", count_pnga_lock, recvbuf); } MPI_Reduce(&time_pnga_lu_solve, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_lu_solve,%ld,%lf\n", count_pnga_lu_solve, recvbuf); } MPI_Reduce(&time_pnga_lu_solve_alt, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_lu_solve_alt,%ld,%lf\n", count_pnga_lu_solve_alt, recvbuf); } MPI_Reduce(&time_pnga_lu_solve_seq, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_lu_solve_seq,%ld,%lf\n", count_pnga_lu_solve_seq, recvbuf); } MPI_Reduce(&time_pnga_mask_sync, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_mask_sync,%ld,%lf\n", count_pnga_mask_sync, recvbuf); } MPI_Reduce(&time_pnga_matmul, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_matmul,%ld,%lf\n", count_pnga_matmul, recvbuf); } MPI_Reduce(&time_pnga_matmul_mirrored, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_matmul_mirrored,%ld,%lf\n", count_pnga_matmul_mirrored, recvbuf); } MPI_Reduce(&time_pnga_matmul_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_matmul_patch,%ld,%lf\n", count_pnga_matmul_patch, recvbuf); } MPI_Reduce(&time_pnga_median, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_median,%ld,%lf\n", count_pnga_median, recvbuf); } MPI_Reduce(&time_pnga_median_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_median_patch,%ld,%lf\n", count_pnga_median_patch, recvbuf); } MPI_Reduce(&time_pnga_memory_avail, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_memory_avail,%ld,%lf\n", count_pnga_memory_avail, recvbuf); } MPI_Reduce(&time_pnga_memory_avail_type, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_memory_avail_type,%ld,%lf\n", count_pnga_memory_avail_type, recvbuf); } MPI_Reduce(&time_pnga_memory_limited, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_memory_limited,%ld,%lf\n", count_pnga_memory_limited, recvbuf); } MPI_Reduce(&time_pnga_merge_distr_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_merge_distr_patch,%ld,%lf\n", count_pnga_merge_distr_patch, recvbuf); } MPI_Reduce(&time_pnga_merge_mirrored, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_merge_mirrored,%ld,%lf\n", count_pnga_merge_mirrored, recvbuf); } MPI_Reduce(&time_pnga_msg_brdcst, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_msg_brdcst,%ld,%lf\n", count_pnga_msg_brdcst, recvbuf); } MPI_Reduce(&time_pnga_msg_pgroup_sync, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_msg_pgroup_sync,%ld,%lf\n", count_pnga_msg_pgroup_sync, recvbuf); } MPI_Reduce(&time_pnga_msg_sync, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_msg_sync,%ld,%lf\n", count_pnga_msg_sync, recvbuf); } MPI_Reduce(&time_pnga_nbacc, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_nbacc,%ld,%lf\n", count_pnga_nbacc, recvbuf); } MPI_Reduce(&time_pnga_nbget, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_nbget,%ld,%lf\n", count_pnga_nbget, recvbuf); } MPI_Reduce(&time_pnga_nbget_field, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_nbget_field,%ld,%lf\n", count_pnga_nbget_field, recvbuf); } MPI_Reduce(&time_pnga_nbget_ghost_dir, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_nbget_ghost_dir,%ld,%lf\n", count_pnga_nbget_ghost_dir, recvbuf); } MPI_Reduce(&time_pnga_nblock, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_nblock,%ld,%lf\n", count_pnga_nblock, recvbuf); } MPI_Reduce(&time_pnga_nbput, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_nbput,%ld,%lf\n", count_pnga_nbput, recvbuf); } MPI_Reduce(&time_pnga_nbput_field, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_nbput_field,%ld,%lf\n", count_pnga_nbput_field, recvbuf); } MPI_Reduce(&time_pnga_nbput_notify, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_nbput_notify,%ld,%lf\n", count_pnga_nbput_notify, recvbuf); } MPI_Reduce(&time_pnga_nbtest, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_nbtest,%ld,%lf\n", count_pnga_nbtest, recvbuf); } MPI_Reduce(&time_pnga_nbwait, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_nbwait,%ld,%lf\n", count_pnga_nbwait, recvbuf); } MPI_Reduce(&time_pnga_nbwait_notify, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_nbwait_notify,%ld,%lf\n", count_pnga_nbwait_notify, recvbuf); } MPI_Reduce(&time_pnga_ndim, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_ndim,%ld,%lf\n", count_pnga_ndim, recvbuf); } MPI_Reduce(&time_pnga_nnodes, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_nnodes,%ld,%lf\n", count_pnga_nnodes, recvbuf); } MPI_Reduce(&time_pnga_nodeid, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_nodeid,%ld,%lf\n", count_pnga_nodeid, recvbuf); } MPI_Reduce(&time_pnga_norm1, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_norm1,%ld,%lf\n", count_pnga_norm1, recvbuf); } MPI_Reduce(&time_pnga_norm_infinity, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_norm_infinity,%ld,%lf\n", count_pnga_norm_infinity, recvbuf); } MPI_Reduce(&time_pnga_pack, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_pack,%ld,%lf\n", count_pnga_pack, recvbuf); } MPI_Reduce(&time_pnga_patch_enum, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_patch_enum,%ld,%lf\n", count_pnga_patch_enum, recvbuf); } MPI_Reduce(&time_pnga_patch_intersect, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_patch_intersect,%ld,%lf\n", count_pnga_patch_intersect, recvbuf); } MPI_Reduce(&time_pnga_periodic, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_periodic,%ld,%lf\n", count_pnga_periodic, recvbuf); } MPI_Reduce(&time_pnga_pgroup_absolute_id, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_pgroup_absolute_id,%ld,%lf\n", count_pnga_pgroup_absolute_id, recvbuf); } MPI_Reduce(&time_pnga_pgroup_brdcst, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_pgroup_brdcst,%ld,%lf\n", count_pnga_pgroup_brdcst, recvbuf); } MPI_Reduce(&time_pnga_pgroup_create, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_pgroup_create,%ld,%lf\n", count_pnga_pgroup_create, recvbuf); } MPI_Reduce(&time_pnga_pgroup_destroy, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_pgroup_destroy,%ld,%lf\n", count_pnga_pgroup_destroy, recvbuf); } MPI_Reduce(&time_pnga_pgroup_get_default, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_pgroup_get_default,%ld,%lf\n", count_pnga_pgroup_get_default, recvbuf); } MPI_Reduce(&time_pnga_pgroup_get_mirror, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_pgroup_get_mirror,%ld,%lf\n", count_pnga_pgroup_get_mirror, recvbuf); } MPI_Reduce(&time_pnga_pgroup_get_world, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_pgroup_get_world,%ld,%lf\n", count_pnga_pgroup_get_world, recvbuf); } MPI_Reduce(&time_pnga_pgroup_gop, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_pgroup_gop,%ld,%lf\n", count_pnga_pgroup_gop, recvbuf); } MPI_Reduce(&time_pnga_pgroup_nnodes, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_pgroup_nnodes,%ld,%lf\n", count_pnga_pgroup_nnodes, recvbuf); } MPI_Reduce(&time_pnga_pgroup_nodeid, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_pgroup_nodeid,%ld,%lf\n", count_pnga_pgroup_nodeid, recvbuf); } MPI_Reduce(&time_pnga_pgroup_set_default, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_pgroup_set_default,%ld,%lf\n", count_pnga_pgroup_set_default, recvbuf); } MPI_Reduce(&time_pnga_pgroup_split, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_pgroup_split,%ld,%lf\n", count_pnga_pgroup_split, recvbuf); } MPI_Reduce(&time_pnga_pgroup_split_irreg, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_pgroup_split_irreg,%ld,%lf\n", count_pnga_pgroup_split_irreg, recvbuf); } MPI_Reduce(&time_pnga_pgroup_sync, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_pgroup_sync,%ld,%lf\n", count_pnga_pgroup_sync, recvbuf); } MPI_Reduce(&time_pnga_print, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_print,%ld,%lf\n", count_pnga_print, recvbuf); } MPI_Reduce(&time_pnga_print_distribution, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_print_distribution,%ld,%lf\n", count_pnga_print_distribution, recvbuf); } MPI_Reduce(&time_pnga_print_file, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_print_file,%ld,%lf\n", count_pnga_print_file, recvbuf); } MPI_Reduce(&time_pnga_print_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_print_patch,%ld,%lf\n", count_pnga_print_patch, recvbuf); } MPI_Reduce(&time_pnga_print_patch2d, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_print_patch2d,%ld,%lf\n", count_pnga_print_patch2d, recvbuf); } MPI_Reduce(&time_pnga_print_patch_file, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_print_patch_file,%ld,%lf\n", count_pnga_print_patch_file, recvbuf); } MPI_Reduce(&time_pnga_print_patch_file2d, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_print_patch_file2d,%ld,%lf\n", count_pnga_print_patch_file2d, recvbuf); } MPI_Reduce(&time_pnga_print_stats, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_print_stats,%ld,%lf\n", count_pnga_print_stats, recvbuf); } MPI_Reduce(&time_pnga_proc_topology, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_proc_topology,%ld,%lf\n", count_pnga_proc_topology, recvbuf); } MPI_Reduce(&time_pnga_put, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_put,%ld,%lf\n", count_pnga_put, recvbuf); } MPI_Reduce(&time_pnga_put_field, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_put_field,%ld,%lf\n", count_pnga_put_field, recvbuf); } MPI_Reduce(&time_pnga_randomize, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_randomize,%ld,%lf\n", count_pnga_randomize, recvbuf); } MPI_Reduce(&time_pnga_read_inc, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_read_inc,%ld,%lf\n", count_pnga_read_inc, recvbuf); } MPI_Reduce(&time_pnga_recip, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_recip,%ld,%lf\n", count_pnga_recip, recvbuf); } MPI_Reduce(&time_pnga_recip_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_recip_patch,%ld,%lf\n", count_pnga_recip_patch, recvbuf); } MPI_Reduce(&time_pnga_register_type, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_register_type,%ld,%lf\n", count_pnga_register_type, recvbuf); } MPI_Reduce(&time_pnga_release, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_release,%ld,%lf\n", count_pnga_release, recvbuf); } MPI_Reduce(&time_pnga_release_block, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_release_block,%ld,%lf\n", count_pnga_release_block, recvbuf); } MPI_Reduce(&time_pnga_release_block_grid, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_release_block_grid,%ld,%lf\n", count_pnga_release_block_grid, recvbuf); } MPI_Reduce(&time_pnga_release_block_segment, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_release_block_segment,%ld,%lf\n", count_pnga_release_block_segment, recvbuf); } MPI_Reduce(&time_pnga_release_ghost_element, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_release_ghost_element,%ld,%lf\n", count_pnga_release_ghost_element, recvbuf); } MPI_Reduce(&time_pnga_release_ghosts, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_release_ghosts,%ld,%lf\n", count_pnga_release_ghosts, recvbuf); } MPI_Reduce(&time_pnga_release_update, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_release_update,%ld,%lf\n", count_pnga_release_update, recvbuf); } MPI_Reduce(&time_pnga_release_update_block, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_release_update_block,%ld,%lf\n", count_pnga_release_update_block, recvbuf); } MPI_Reduce(&time_pnga_release_update_block_grid, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_release_update_block_grid,%ld,%lf\n", count_pnga_release_update_block_grid, recvbuf); } MPI_Reduce(&time_pnga_release_update_block_segment, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_release_update_block_segment,%ld,%lf\n", count_pnga_release_update_block_segment, recvbuf); } MPI_Reduce(&time_pnga_release_update_ghost_element, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_release_update_ghost_element,%ld,%lf\n", count_pnga_release_update_ghost_element, recvbuf); } MPI_Reduce(&time_pnga_release_update_ghosts, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_release_update_ghosts,%ld,%lf\n", count_pnga_release_update_ghosts, recvbuf); } MPI_Reduce(&time_pnga_scale, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_scale,%ld,%lf\n", count_pnga_scale, recvbuf); } MPI_Reduce(&time_pnga_scale_cols, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_scale_cols,%ld,%lf\n", count_pnga_scale_cols, recvbuf); } MPI_Reduce(&time_pnga_scale_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_scale_patch,%ld,%lf\n", count_pnga_scale_patch, recvbuf); } MPI_Reduce(&time_pnga_scale_rows, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_scale_rows,%ld,%lf\n", count_pnga_scale_rows, recvbuf); } MPI_Reduce(&time_pnga_scan_add, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_scan_add,%ld,%lf\n", count_pnga_scan_add, recvbuf); } MPI_Reduce(&time_pnga_scan_copy, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_scan_copy,%ld,%lf\n", count_pnga_scan_copy, recvbuf); } MPI_Reduce(&time_pnga_scatter, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_scatter,%ld,%lf\n", count_pnga_scatter, recvbuf); } MPI_Reduce(&time_pnga_scatter2d, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_scatter2d,%ld,%lf\n", count_pnga_scatter2d, recvbuf); } MPI_Reduce(&time_pnga_scatter_acc, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_scatter_acc,%ld,%lf\n", count_pnga_scatter_acc, recvbuf); } MPI_Reduce(&time_pnga_scatter_acc2d, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_scatter_acc2d,%ld,%lf\n", count_pnga_scatter_acc2d, recvbuf); } MPI_Reduce(&time_pnga_select_elem, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_select_elem,%ld,%lf\n", count_pnga_select_elem, recvbuf); } MPI_Reduce(&time_pnga_set_array_name, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_array_name,%ld,%lf\n", count_pnga_set_array_name, recvbuf); } MPI_Reduce(&time_pnga_set_block_cyclic, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_block_cyclic,%ld,%lf\n", count_pnga_set_block_cyclic, recvbuf); } MPI_Reduce(&time_pnga_set_block_cyclic_proc_grid, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_block_cyclic_proc_grid,%ld,%lf\n", count_pnga_set_block_cyclic_proc_grid, recvbuf); } MPI_Reduce(&time_pnga_set_chunk, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_chunk,%ld,%lf\n", count_pnga_set_chunk, recvbuf); } MPI_Reduce(&time_pnga_set_data, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_data,%ld,%lf\n", count_pnga_set_data, recvbuf); } MPI_Reduce(&time_pnga_set_debug, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_debug,%ld,%lf\n", count_pnga_set_debug, recvbuf); } MPI_Reduce(&time_pnga_set_diagonal, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_diagonal,%ld,%lf\n", count_pnga_set_diagonal, recvbuf); } MPI_Reduce(&time_pnga_set_ghost_corner_flag, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_ghost_corner_flag,%ld,%lf\n", count_pnga_set_ghost_corner_flag, recvbuf); } MPI_Reduce(&time_pnga_set_ghost_info, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_ghost_info,%ld,%lf\n", count_pnga_set_ghost_info, recvbuf); } MPI_Reduce(&time_pnga_set_ghosts, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_ghosts,%ld,%lf\n", count_pnga_set_ghosts, recvbuf); } MPI_Reduce(&time_pnga_set_irreg_distr, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_irreg_distr,%ld,%lf\n", count_pnga_set_irreg_distr, recvbuf); } MPI_Reduce(&time_pnga_set_irreg_flag, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_irreg_flag,%ld,%lf\n", count_pnga_set_irreg_flag, recvbuf); } MPI_Reduce(&time_pnga_set_memory_limit, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_memory_limit,%ld,%lf\n", count_pnga_set_memory_limit, recvbuf); } MPI_Reduce(&time_pnga_set_pgroup, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_pgroup,%ld,%lf\n", count_pnga_set_pgroup, recvbuf); } MPI_Reduce(&time_pnga_set_restricted, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_restricted,%ld,%lf\n", count_pnga_set_restricted, recvbuf); } MPI_Reduce(&time_pnga_set_restricted_range, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_restricted_range,%ld,%lf\n", count_pnga_set_restricted_range, recvbuf); } MPI_Reduce(&time_pnga_set_update4_info, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_update4_info,%ld,%lf\n", count_pnga_set_update4_info, recvbuf); } MPI_Reduce(&time_pnga_set_update5_info, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_set_update5_info,%ld,%lf\n", count_pnga_set_update5_info, recvbuf); } MPI_Reduce(&time_pnga_shift_diagonal, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_shift_diagonal,%ld,%lf\n", count_pnga_shift_diagonal, recvbuf); } MPI_Reduce(&time_pnga_solve, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_solve,%ld,%lf\n", count_pnga_solve, recvbuf); } MPI_Reduce(&time_pnga_spd_invert, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_spd_invert,%ld,%lf\n", count_pnga_spd_invert, recvbuf); } MPI_Reduce(&time_pnga_step_bound_info, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_step_bound_info,%ld,%lf\n", count_pnga_step_bound_info, recvbuf); } MPI_Reduce(&time_pnga_step_bound_info_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_step_bound_info_patch,%ld,%lf\n", count_pnga_step_bound_info_patch, recvbuf); } MPI_Reduce(&time_pnga_step_mask_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_step_mask_patch,%ld,%lf\n", count_pnga_step_mask_patch, recvbuf); } MPI_Reduce(&time_pnga_step_max, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_step_max,%ld,%lf\n", count_pnga_step_max, recvbuf); } MPI_Reduce(&time_pnga_step_max_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_step_max_patch,%ld,%lf\n", count_pnga_step_max_patch, recvbuf); } MPI_Reduce(&time_pnga_strided_acc, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_strided_acc,%ld,%lf\n", count_pnga_strided_acc, recvbuf); } MPI_Reduce(&time_pnga_strided_get, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_strided_get,%ld,%lf\n", count_pnga_strided_get, recvbuf); } MPI_Reduce(&time_pnga_strided_put, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_strided_put,%ld,%lf\n", count_pnga_strided_put, recvbuf); } MPI_Reduce(&time_pnga_summarize, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_summarize,%ld,%lf\n", count_pnga_summarize, recvbuf); } MPI_Reduce(&time_pnga_symmetrize, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_symmetrize,%ld,%lf\n", count_pnga_symmetrize, recvbuf); } MPI_Reduce(&time_pnga_sync, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_sync,%ld,%lf\n", count_pnga_sync, recvbuf); } MPI_Reduce(&time_pnga_terminate, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_terminate,%ld,%lf\n", count_pnga_terminate, recvbuf); } MPI_Reduce(&time_pnga_timer, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_timer,%ld,%lf\n", count_pnga_timer, recvbuf); } MPI_Reduce(&time_pnga_total_blocks, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_total_blocks,%ld,%lf\n", count_pnga_total_blocks, recvbuf); } MPI_Reduce(&time_pnga_transpose, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_transpose,%ld,%lf\n", count_pnga_transpose, recvbuf); } MPI_Reduce(&time_pnga_type_c2f, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_type_c2f,%ld,%lf\n", count_pnga_type_c2f, recvbuf); } MPI_Reduce(&time_pnga_type_f2c, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_type_f2c,%ld,%lf\n", count_pnga_type_f2c, recvbuf); } MPI_Reduce(&time_pnga_unlock, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_unlock,%ld,%lf\n", count_pnga_unlock, recvbuf); } MPI_Reduce(&time_pnga_unpack, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_unpack,%ld,%lf\n", count_pnga_unpack, recvbuf); } MPI_Reduce(&time_pnga_update1_ghosts, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_update1_ghosts,%ld,%lf\n", count_pnga_update1_ghosts, recvbuf); } MPI_Reduce(&time_pnga_update2_ghosts, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_update2_ghosts,%ld,%lf\n", count_pnga_update2_ghosts, recvbuf); } MPI_Reduce(&time_pnga_update3_ghosts, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_update3_ghosts,%ld,%lf\n", count_pnga_update3_ghosts, recvbuf); } MPI_Reduce(&time_pnga_update44_ghosts, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_update44_ghosts,%ld,%lf\n", count_pnga_update44_ghosts, recvbuf); } MPI_Reduce(&time_pnga_update4_ghosts, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_update4_ghosts,%ld,%lf\n", count_pnga_update4_ghosts, recvbuf); } MPI_Reduce(&time_pnga_update55_ghosts, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_update55_ghosts,%ld,%lf\n", count_pnga_update55_ghosts, recvbuf); } MPI_Reduce(&time_pnga_update5_ghosts, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_update5_ghosts,%ld,%lf\n", count_pnga_update5_ghosts, recvbuf); } MPI_Reduce(&time_pnga_update6_ghosts, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_update6_ghosts,%ld,%lf\n", count_pnga_update6_ghosts, recvbuf); } MPI_Reduce(&time_pnga_update7_ghosts, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_update7_ghosts,%ld,%lf\n", count_pnga_update7_ghosts, recvbuf); } MPI_Reduce(&time_pnga_update_ghost_dir, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_update_ghost_dir,%ld,%lf\n", count_pnga_update_ghost_dir, recvbuf); } MPI_Reduce(&time_pnga_update_ghosts, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_update_ghosts,%ld,%lf\n", count_pnga_update_ghosts, recvbuf); } MPI_Reduce(&time_pnga_update_ghosts_nb, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_update_ghosts_nb,%ld,%lf\n", count_pnga_update_ghosts_nb, recvbuf); } MPI_Reduce(&time_pnga_uses_ma, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_uses_ma,%ld,%lf\n", count_pnga_uses_ma, recvbuf); } MPI_Reduce(&time_pnga_uses_proc_grid, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_uses_proc_grid,%ld,%lf\n", count_pnga_uses_proc_grid, recvbuf); } MPI_Reduce(&time_pnga_valid_handle, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_valid_handle,%ld,%lf\n", count_pnga_valid_handle, recvbuf); } MPI_Reduce(&time_pnga_verify_handle, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_verify_handle,%ld,%lf\n", count_pnga_verify_handle, recvbuf); } MPI_Reduce(&time_pnga_wtime, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_wtime,%ld,%lf\n", count_pnga_wtime, recvbuf); } MPI_Reduce(&time_pnga_zero, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_zero,%ld,%lf\n", count_pnga_zero, recvbuf); } MPI_Reduce(&time_pnga_zero_diagonal, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_zero_diagonal,%ld,%lf\n", count_pnga_zero_diagonal, recvbuf); } MPI_Reduce(&time_pnga_zero_patch, &recvbuf, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (me == 0) { printf("pnga_zero_patch,%ld,%lf\n", count_pnga_zero_patch, recvbuf); } } } ga-5-3/tools/wapigen_trace.py0000750005473000001440000004145511651347004015132 0ustar d3n000users#!/usr/bin/env python '''Generate the wapi_trace.c source from the ga-papi.h header.''' import sys def get_signatures(header): # first, gather all function signatures from ga-papi.h aka argv[1] accumulating = False signatures = [] current_signature = '' EXTERN = 'extern' SEMICOLON = ';' for line in open(header): line = line.strip() # remove whitespace before and after line if not line: continue # skip blank lines if EXTERN in line and SEMICOLON in line: signatures.append(line) elif EXTERN in line: current_signature = line accumulating = True elif SEMICOLON in line and accumulating: current_signature += line signatures.append(current_signature) accumulating = False elif accumulating: current_signature += line return signatures format_from_type = { "char": "%c", "int": "%d", "long": "%ld", "long long": "%lld", "float": "%f", "double": "%lf", "Integer": "%ld", "logical": "%ld", } intp_names = [ 'lo', 'alo', 'blo', 'clo', 'hi', 'ahi', 'bhi', 'chi', 'subscript', 'dims', 'ld', 'width', 'chunk', 'map', 'block', ] class FunctionArgument(object): def __init__(self, signature): self.pointer = signature.count('*') self.array = '[' in signature signature = signature.replace('*','').strip() signature = signature.replace('[','').strip() signature = signature.replace(']','').strip() self.type,self.name = signature.split() self.intp = ((self.pointer == 1 or self.array) and self.type == 'Integer' and self.name in intp_names) def __str__(self): ret = self.type[:] ret += ' ' for p in range(self.pointer): ret += '*' ret += self.name if self.array: ret += '[]' return ret class Function(object): def __init__(self, signature): signature = signature.replace('extern','').strip() self.return_type,signature = signature.split(None,1) self.return_type = self.return_type.strip() signature = signature.strip() self.name,signature = signature.split('(',1) self.name = self.name.strip() signature = signature.replace(')','').strip() signature = signature.replace(';','').strip() self.args = [] if signature: for arg in signature.split(','): self.args.append(FunctionArgument(arg.strip())) def get_call(self, name=None): sig = '' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += arg.name sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def get_signature(self, name=None): sig = self.return_type[:] sig += ' ' if not name: sig += self.name else: sig += name sig += '(' if self.args: for arg in self.args: sig += str(arg) sig += ', ' sig = sig[:-2] # remove last ', ' sig += ')' return sig def args_have_nv(self): for arg in self.args: if arg.name == 'nv' and not arg.pointer: return True return False def args_have_ga(self): for arg in self.args: if arg.name == 'g_a' and not arg.pointer: return True return False def args_have_alpha(self): for arg in self.args: if arg.name == 'alpha': return True return False def args_have_beta(self): for arg in self.args: if arg.name == 'beta': return True return False def args_have_ndim(self): for arg in self.args: if 'ndim' in arg.name and not arg.pointer: return True return False def get_ndim_name(self): if 'set_irreg' in self.name: return 'pnga_set_data_last_ndim' else: for arg in self.args: if 'ndim' in arg.name and not arg.pointer: return arg.name return '_ndim' def args_have_intp(self): for arg in self.args: if arg.intp: return True return False def get_tracer_body(self): slot = 0 tracer = '' if self.args_have_intp() and 'set_irreg' not in self.name: if not self.args_have_ndim() and self.args_have_ga(): tracer += ' int _ndim = pnga_ndim(g_a);\n' if self.args_have_alpha(): tracer += ' Integer _atype;\n' if self.args_have_beta(): tracer += ' Integer _btype;\n' if self.args_have_alpha(): tracer += ' pnga_inquire_type(g_a, &_atype);\n' if self.args_have_beta(): tracer += ' pnga_inquire_type(g_b, &_btype);\n' if 'void' not in func.return_type: tracer += ' %s retval;\n' % self.return_type pf,slot = self.get_tracer_printf(False,slot) tracer += ' %s;\n' % pf tracer += ' ' if 'void' not in func.return_type: tracer += 'retval = ' tracer += '%s;\n' % self.get_call() pf,slot = self.get_tracer_printf(True,slot) tracer += ' %s;\n' % pf if 'void' not in func.return_type: tracer += ' return retval;\n' return tracer def get_tracer_printf(self, end, slot): tracer = 'fprintf(fptrace, "%lf,' if end: tracer += '/' tracer += self.name + ',' if self.args: tracer += '(' for arg in self.args: if arg.pointer == 1 and 'char' in arg.type: tracer += '%s;' elif arg.name == 'alpha' or arg.name == 'beta': tracer += '%s;' elif arg.intp: tracer += '%s;' elif arg.pointer or arg.array: tracer += '%p;' else: tracer += '%s;' % format_from_type[arg.type] tracer = tracer[:-1] tracer += ')' tracer += '\\n",MPI_Wtime()-first_wtime' if self.args: for arg in self.args: if arg.intp: #if self.args_have_nv(): # tracer += ',expand_intp(%s*nv,%s,%d)' % ( # self.get_ndim_name(), arg.name, slot) if 'map' in arg.name and 'locate_region' not in self.name: tracer += ',expand_intp(sum_intp(%s,block),%s,%d)' % ( self.get_ndim_name(), arg.name, slot) elif 'ld' in arg.name: tracer += ',expand_intp(%s-1,%s,%d)' % ( self.get_ndim_name(), arg.name, slot) else: tracer += ',expand_intp(%s,%s,%d)' % ( self.get_ndim_name(), arg.name, slot) slot += 1 elif 'alpha' in arg.name: tracer += ',expand_voidp(_atype,alpha,%d)' % slot slot += 1 elif 'beta' in arg.name: tracer += ',expand_voidp(_btype,beta,%d)' % slot slot += 1 else: tracer += ',%s' % arg.name tracer += ')' return tracer,slot def __str__(self): return self.get_signature() if __name__ == '__main__': if len(sys.argv) != 2: print 'incorrect number of arguments' print 'usage: wapigen_trace.py > ' sys.exit(len(sys.argv)) # print headers and other static stuff print ''' #if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #include #include "ga-papi.h" #include "typesf2c.h" FILE *fptrace=NULL; double first_wtime; int me, nproc; #if HAVE_PROGNAME extern const char * PROGNAME; #endif #define LOHI_BUFSIZE 200 #define LOHI_SLOTS 20 static char **lohi_bufs; static int pnga_set_data_last_ndim=-1; static Integer sum_intp(int ndim, Integer *lohi) { Integer sum=0; assert(ndim>=0); if (NULL != lohi) { int i; for (i=0; i= 0 && slot < LOHI_SLOTS); str = lohi_bufs[slot]; current_str = str; if (NULL == value) { size_written = sprintf(current_str, "NULL"); total_written += size_written; assert(size_written > 0); assert(total_written < LOHI_BUFSIZE); current_str += size_written; } else { switch (type) { case C_INT: size_written = sprintf(current_str, "%d", *((int*)value)); break; case C_LONG: size_written = sprintf(current_str, "%ld", *((long*)value)); break; case C_LONGLONG:size_written = sprintf(current_str, "%lld", *((long long*)value)); break; case C_FLOAT: size_written = sprintf(current_str, "%f", *((float*)value)); break; case C_DBL: size_written = sprintf(current_str, "%lf", *((double*)value)); break; case C_SCPL: size_written = sprintf(current_str, "%f#%f", ((SingleComplex*)value)->real, ((SingleComplex*)value)->imag); break; case C_DCPL: size_written = sprintf(current_str, "%lf#%lf", ((DoubleComplex*)value)->real, ((DoubleComplex*)value)->imag); break; } total_written += size_written; assert(size_written > 0); assert(total_written < LOHI_BUFSIZE); current_str += size_written; } return str; } static char* expand_intp(int ndim, Integer *lohi, int slot) { char *str=NULL, *current_str=NULL; int i; int size_written; int total_written = 0; assert(ndim>=0); assert(slot >= 0 && slot < LOHI_SLOTS); str = lohi_bufs[slot]; current_str = str; if (NULL == lohi) { size_written = sprintf(current_str, "{NULL}"); total_written += size_written; assert(size_written > 0); assert(total_written < LOHI_BUFSIZE); current_str += size_written; } else if (0 == ndim) { size_written = sprintf(current_str, "{}"); total_written += size_written; assert(size_written > 0); assert(total_written < LOHI_BUFSIZE); current_str += size_written; } else { size_written = sprintf(current_str, "{%ld", lohi[0]); total_written += size_written; assert(size_written > 0); assert(total_written < LOHI_BUFSIZE); current_str += size_written; for (i=1; i 0); assert(total_written < LOHI_BUFSIZE); current_str += size_written; } size_written = sprintf(current_str, "}\\0"); total_written += size_written; assert(size_written > 0); assert(total_written < LOHI_BUFSIZE); current_str += size_written; } return str; } static void init_lohi_bufs() { int i; lohi_bufs = (char**)malloc(sizeof(char*)*LOHI_SLOTS); for (i=0; i : * * The standard string functions (strcat, strcmp, strcpy, strlen, etc.) * dereference their pointer arguments without first checking to see if * the arguments are NULL (0). On some machines (e.g., the VAX) this is * harmless, but on others (e.g., the DECstation 3100) it causes a * segmentation fault. * * The string utilities defined here provide functionality similar to that * of their standard counterparts, but they are careful not to dereference * arguments which are NULL. * * : * * A string is of type "pointer to char" (char *); a string is terminated * by a byte whose value is 0 (a null character). The term "Nstring" will * be used to mean "NULL string" (pointer value of 0); "Zstring" will be * used to mean "zero-length string" (nonzero pointer value, but no nonzero * bytes pointed to). is concerned with Nstrings. */ #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #include "string-util.h" /** ** public routines **/ /* ------------------------------------------------------------------------- */ /* * Return the length of (i.e., number of nonzero bytes in) the given string. */ /* ------------------------------------------------------------------------- */ unsigned int str_len(s) char *s; /* string */ { int length = 0; /* see */ if (!s) { /* length of Nstring is 0 */ return(0); } while (*s++) { length++; } return(length); } /* ------------------------------------------------------------------------- */ /* * Return the index of the string in slist for which s is a match; s "matches" * a string t in slist if (a) s and t are equal, or (b) s is a prefix of t but * is not a prefix of any other string in slist. * * If s matches no string in slist, return SM_NONE. If s matches more than * one string in slist, return SM_MANY. * * Restriction: slist can contain no Nstrings. */ /* ------------------------------------------------------------------------- */ int str_match(s, slist, n) char *s; /* string to match */ char *slist[]; /* list of strings to search */ unsigned int n; /* # of strings in slist */ { size_t i; /* loop index */ size_t length; /* of s */ int match; /* index of string in slist matched by s */ /* see */ if (!s) { return(SM_NONE); } /* we know s is not an Nstring */ length = strlen(s); match = -1; for (i = 0; i < n; i++) { /* s, slist[i] are not Nstrings */ if (!strncmp(s, slist[i], length)) { /* s is at least a prefix */ if (length == strlen(slist[i])) { /* exact match */ return(i); } /* now we know s is a proper prefix */ if (match < 0) { /* first match we've seen */ match = i; } else { /* s is a proper prefix of more than one string in slist */ return(SM_MANY); } } } if (match < 0) { /* s is not a prefix of any string in slist */ return(SM_NONE); } else { /* s is a proper prefix of exactly one string in slist */ return(match); } } ga-5-3/ma/testf.F0000640005473000001440000004314611411137202012425 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c c $Id: testf.F,v 1.6 1997-02-26 20:39:23 d3h325 Exp $ c c c Exercise the MA routines. c program testf implicit none #include "mafdecls.fh" character char1 character*2 char2 character char5(5) integer handle1 integer handle2 integer handle3 integer handle4 integer i integer ihandle1 MA_ACCESS_INDEX_TYPE index1 MA_ACCESS_INDEX_TYPE index2 logical value c ok write (*,*) 'start testing MA_set_error_print ...' value = MA_set_error_print(.true.) write (*,*) 'should see an MA error message here ...' value = MA_pop_stack(-1) value = MA_set_error_print(.false.) if (value) then write (*,*) 'should not see an MA error message here ...' value = MA_pop_stack(-1) else write (*,*) '... failure; return value is wrong' endif write (*,*) 'stop testing MA_set_error_print' write (*,*) ' ' value = MA_set_error_print(.true.) c ok write (*,*) 'should be 9 values ...' write (*,*) '1. MA_sizeof(MT_BYTE, 1, MT_BYTE) = ', $ MA_sizeof(MT_BYTE, 1, MT_BYTE) write (*,*) '2. MA_sizeof(MT_INT, 1, MT_BYTE) = ', $ MA_sizeof(MT_INT, 1, MT_BYTE) write (*,*) '3. MA_sizeof(MT_LOG, 1, MT_BYTE) = ', $ MA_sizeof(MT_LOG, 1, MT_BYTE) write (*,*) '4. MA_sizeof(MT_REAL, 1, MT_BYTE) = ', $ MA_sizeof(MT_REAL, 1, MT_BYTE) write (*,*) '5. MA_sizeof(MT_DBL, 1, MT_BYTE) = ', $ MA_sizeof(MT_DBL, 1, MT_BYTE) write (*,*) '6. MA_sizeof(MT_SCPL, 1, MT_BYTE) = ', $ MA_sizeof(MT_SCPL, 1, MT_BYTE) write (*,*) '7. MA_sizeof(MT_DCPL, 1, MT_BYTE) = ', $ MA_sizeof(MT_DCPL, 1, MT_BYTE) write (*,*) '8. MA_sizeof(MT_BYTE, 3, MT_DBL) = ', $ MA_sizeof(MT_BYTE, 3, MT_DBL) write (*,*) '9. MA_sizeof(MT_BYTE, 33, MT_DBL) = ', $ MA_sizeof(MT_BYTE, 33, MT_DBL) write (*,*) ' ' c ok write (*,*) 'should be 2 values ...' write (*,*) '1. MA_sizeof_overhead(MT_BYTE) = ', $ MA_sizeof_overhead(MT_BYTE) write (*,*) '2. MA_sizeof_overhead(MT_INT) = ', $ MA_sizeof_overhead(MT_INT) write (*,*) ' ' c fail write (*,*) 'should fail (not init) ...' value = MA_push_stack(MT_DBL, 10, 'stack1', handle1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c ok value = MA_initialized() if (value) then write (*,*) 'MA_initialized returns true (failure)' else write (*,*) 'MA_initialized returns false (success)' endif write (*,*) ' ' c fail write (*,*) 'should fail (bad datatype) ...' value = MA_init(-1, 10, 10) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c ok write (*,*) 'should succeed ...' value = MA_init(MT_DBL, 1000, 1000) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c ok value = MA_initialized() if (value) then write (*,*) 'MA_initialized returns true (success)' else write (*,*) 'MA_initialized returns false (failure)' endif write (*,*) ' ' c ok write (*,*) 'should be 1 value ...' write (*,*) '1. MA_sizeof_overhead(MT_BYTE) = ', $ MA_sizeof_overhead(MT_BYTE) write (*,*) ' ' c fail write (*,*) 'should fail (bad handle) ...' handle1 = 0 value = MA_pop_stack(handle1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c fail write (*,*) 'should fail (bad handle) ...' handle1 = 37 value = MA_pop_stack(handle1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c fail write (*,*) 'should fail (bad handle) ...' handle1 = 10000 value = MA_pop_stack(handle1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c fail write (*,*) 'should fail (bad handle) ...' value = MA_get_index(handle1, index1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c ok write (*,*) 'start testing MA_chop_stack ...' value = MA_push_stack(MT_BYTE, 1, 'stack1', handle1) value = MA_push_stack(MT_BYTE, 2, 'stack2', handle2) value = MA_push_stack(MT_BYTE, 3, 'stack3', handle3) value = MA_push_stack(MT_BYTE, 4, 'stack4', handle4) write (*,*) 'should be 4 blocks on stack ...' call MA_summarize_allocated_blocks write (*,*) 'should succeed ...' value = MA_chop_stack(handle4) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) 'should be 3 blocks on stack ...' call MA_summarize_allocated_blocks write (*,*) 'should fail (not in stack) ...' value = MA_chop_stack(handle4) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) 'should succeed ...' value = MA_chop_stack(handle2) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) 'should be 1 block on stack ...' call MA_summarize_allocated_blocks write (*,*) 'should succeed ...' value = MA_chop_stack(handle1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) 'should be 0 blocks ...' call MA_summarize_allocated_blocks value = MA_push_stack(MT_BYTE, 1, 'stack1', handle1) do 10 i = 1, 33 value = MA_push_stack(MT_BYTE, 1, 'stackn', handle2) 10 continue value = MA_chop_stack(handle1) write (*,*) 'stop testing MA_chop_stack' write (*,*) ' ' c ok write (*,*) 'start testing 0-length stack allocations ...' value = MA_push_get(MT_INT, 1, 'stack1', handle1, index1) value = MA_push_get(MT_INT, 0, 'stack2', handle2, index2) value = MA_push_stack(MT_BYTE, 0, 'stack3', handle3) value = MA_push_stack(MT_BYTE, 4, 'stack4', handle4) int_mb(index1) = 123 int_mb(index2) = 0 write (*,*) 'should fail (bad right sig on stack2) ...' value = MA_verify_allocator_stuff() if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) 'should succeed ...' value = MA_chop_stack(handle1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) 'stop testing 0-length stack allocations ...' write (*,*) ' ' c ok write (*,*) 'start testing 0-length heap allocations ...' value = MA_alloc_get(MT_INT, 1, 'heap1', handle1, index1) value = MA_alloc_get(MT_INT, 0, 'heap2', handle2, index2) value = MA_allocate_heap(MT_BYTE, 0, 'heap3', handle3) value = MA_allocate_heap(MT_BYTE, 4, 'heap4', handle4) int_mb(index1) = 123 value = MA_free_heap(handle4) value = MA_free_heap(handle3) value = MA_free_heap(handle2) value = MA_free_heap(handle1) write (*,*) 'should be 0 blocks ...' call MA_summarize_allocated_blocks write (*,*) 'stop testing 0-length heap allocations ...' write (*,*) ' ' c ok write (*,*) 'should succeed ...' value = MA_push_stack(MT_DBL, 10, 'stack1', handle1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) 'should succeed ...' value = MA_get_index(handle1, index1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif dbl_mb(index1) = 19.82 dbl_mb(index1 + 9) = dbl_mb(index1) - 19 write (*,*) 'should be 19.82 and 0.82 ...' write (*,*) 'dbl_mb(', index1, ') = ', dbl_mb(index1) write (*,*) 'dbl_mb(', index1 + 9, ') = ', dbl_mb(index1 + 9) write (*,*) ' ' c ok write (*,*) 'should succeed ...' value = MA_allocate_heap(MT_INT, 10, 'heap1', handle2) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c fail write (*,*) 'should fail (not in heap) ...' value = MA_free_heap(handle1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c fail write (*,*) 'should fail (not in stack) ...' value = MA_pop_stack(handle2) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c ok write (*,*) 'should succeed ...' value = MA_push_stack(MT_BYTE, 5, 'stack2', handle3) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c ok write (*,*) 'should see something here ...' call MA_summarize_allocated_blocks write (*,*) ' ' c fail write (*,*) 'should fail (not top of stack) ...' value = MA_pop_stack(handle1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c ok write (*,*) 'should succeed ...' value = MA_pop_stack(handle3) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c ok write (*,*) 'should succeed ...' value = MA_pop_stack(handle1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c ok write (*,*) 'should succeed ...' value = MA_get_index(handle2, index2) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif int_mb(index2) = 1963 int_mb(index2 + 9) = int_mb(index2) - 1900 write (*,*) 'should be 1963 and 63 ...' write (*,*) 'int_mb(', index2, ') = ', int_mb(index2) write (*,*) 'int_mb(', index2 + 9, ') = ', int_mb(index2 + 9) write (*,*) ' ' c ok write (*,*) 'should succeed ...' value = MA_allocate_heap(MT_REAL, 1, 'heap2', handle3) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c ok write (*,*) 'start testing MA_verify_allocator_stuff ...' write (*,*) 'should see nothing here ...' value = MA_verify_allocator_stuff() write (*,*) 'should succeed ...' if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) 'stop testing MA_verify_allocator_stuff' write (*,*) ' ' c fail write (*,*) 'should fail (bad right guard) ...' int_mb(index2 + 10) = 0 value = MA_free_heap(handle2) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c ok write (*,*) 'should succeed ...' value = MA_set_auto_verify(.true.) value = MA_set_auto_verify(.true.) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c fail write (*,*) 'start testing MA_set_auto_verify ...' write (*,*) 'should see something here ...' value = MA_set_auto_verify(.true.) value = MA_free_heap(handle2) write (*,*) 'should fail (bad right guard) ...' if (value) then write (*,*) '... success' else write (*,*) '... failure' endif value = MA_set_auto_verify(.false.) write (*,*) 'stop testing MA_set_auto_verify' write (*,*) ' ' c fail write (*,*) 'start testing MA_verify_allocator_stuff ...' write (*,*) 'should see something here ...' value = MA_verify_allocator_stuff() write (*,*) 'should fail (bad right guard) ...' if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) 'stop testing MA_verify_allocator_stuff' write (*,*) ' ' c ok write (*,*) 'should be 3 values ...' write (*,*) '1. MA_inquire_avail(MT_DBL) = ', $ MA_inquire_avail(MT_DBL) write (*,*) '2. MA_inquire_avail(MT_BYTE) = ', $ MA_inquire_avail(MT_BYTE) write (*,*) '3. MA_inquire_avail(MT_DCPL) = ', $ MA_inquire_avail(MT_DCPL) write (*,*) ' ' c fail write (*,*) 'should be 3 values ...' write (*,*) '1. MA_inquire_heap(MT_DBL) = ', $ MA_inquire_heap(MT_DBL) write (*,*) '2. MA_inquire_heap(MT_BYTE) = ', $ MA_inquire_heap(MT_BYTE) write (*,*) '3. MA_inquire_heap(MT_DCPL) = ', $ MA_inquire_heap(MT_DCPL) write (*,*) ' ' c fail write (*,*) 'should be 3 values ...' write (*,*) '1. MA_inquire_stack(MT_DBL) = ', $ MA_inquire_stack(MT_DBL) write (*,*) '2. MA_inquire_stack(MT_BYTE) = ', $ MA_inquire_stack(MT_BYTE) write (*,*) '3. MA_inquire_stack(MT_DCPL) = ', $ MA_inquire_stack(MT_DCPL) write (*,*) ' ' c ok write (*,*) 'should succeed ...' value = MA_alloc_get(MT_INT, 1, 'heap3', handle1, index1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif int_mb(index1) = 1982 write (*,*) 'should be 1982 ...' write (*,*) 'int_mb(', index1, ') = ', int_mb(index1) write (*,*) ' ' c ok write (*,*) 'should succeed ...' value = MA_free_heap(handle1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c ok write (*,*) 'start testing byte arrays ...' write (*,*) 'should succeed ...' value = MA_push_get(MT_BYTE, 5, 'stack3', handle1, index1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif char5(1) = 'z' char5(2) = 'y' char5(3) = 'x' char5(4) = 'w' char5(5) = 'v' do 20 i = 0, 4 byte_mb(index1 + i) = char5(i + 1) 20 continue write (*,*) 'should be zyxwv ...' do 30 i = 0, 4 char1 = byte_mb(index1+i) write (*,*) 'byte_mb(', index1+i, ') = ', char1 30 continue write (*,*) 'should succeed ...' value = MA_pop_stack(handle1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) 'should succeed ...' i = 1 char2 = 'ab' value = MA_alloc_get(MT_BYTE, i * 2, 'heap4', handle1, index1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif byte_mb(index1) = char2(1:1) byte_mb(index1 + 1) = char2(2:2) write (*,*) 'should be ab ...' do 40 i = 0, 1 char1 = byte_mb(index1+i) write (*,*) 'byte_mb(', index1+i, ') = ', char1 40 continue write (*,*) 'should succeed ...' value = MA_free_heap(handle1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) 'stop testing byte arrays ...' write (*,*) ' ' c ok write (*,*) 'should succeed ...' value = MA_push_get(MT_INT, 1, 'stack3', handle1, index1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif int_mb(index1) = 5 write (*,*) 'should be 5 ...' write (*,*) 'int_mb(', index1, ') = ', int_mb(index1) write (*,*) ' ' c ok write (*,*) 'should succeed ...' value = MA_pop_stack(handle1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c ok write (*,*) 'start testing MA_print_stats ...' call MA_print_stats(.true.) write (*,*) 'stop testing MA_print_stats' write (*,*) ' ' c fail write (*,*) 'should fail (not implemented) ...' value = MA_init_memhandle_iterator(ihandle1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c fail write (*,*) 'should fail (not implemented) ...' value = MA_get_next_memhandle(ihandle1, handle1) if (value) then write (*,*) '... success' else write (*,*) '... failure' endif write (*,*) ' ' c ok write (*,*) 'start testing MA_set_hard_fail ...' value = MA_set_hard_fail(.false.) write (*,*) 'should see a (nonfatal) MA error message here ...' value = MA_pop_stack(-1) value = MA_set_hard_fail(.true.) value = MA_set_hard_fail(.true.) if (value) then write (*,*) 'should see a (hard failure)', $ ' MA error message here ...' value = MA_pop_stack(-1) else write (*,*) '... failure; return value is wrong' endif write (*,*) 'stop testing MA_set_hard_fail' end ga-5-3/ma/test-inquire.c0000640005473000001440000000601611411201316013757 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* * $Id: test-inquire.c,v 1.1 2002-09-14 05:40:30 d3g001 Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #include "macdecls.h" #define MAXHANDLES 10 static void print_inquire(); int main(int argc, char **argv) { Integer units_heap; Integer units_stack; Boolean ok; Integer handle[MAXHANDLES]; MA_AccessIndex index[MAXHANDLES]; /* set sizes of heap and stack */ units_heap = 50000; units_stack = 20000; /* initialize */ ok = MA_init(MT_DBL, units_stack, units_heap); if (!ok) { (void)fprintf(stderr, "MA_init failed; punting\n"); exit(1); } printf("# initialized heap = %ld, stack = %ld\n", (long)units_heap, (long)units_stack); printf("# should see roughly the following values:\n"); printf("# MA_inquire_heap(MT_DBL) = 50K\n"); printf("# MA_inquire_heap_check_stack(MT_DBL) = 50K\n"); printf("# MA_inquire_heap_no_partition(MT_DBL) = 70K\n"); printf("# MA_inquire_stack(MT_DBL) = 20K\n"); printf("# MA_inquire_stack_check_heap(MT_DBL) = 20K\n"); printf("# MA_inquire_stack_no_partition(MT_DBL) = 70K\n"); print_inquire(); printf("# allocate 2 heap (10K, 20K), 1 stack (35K)\n"); MA_alloc_get(MT_DBL, 10000, "heap0", &handle[0], &index[0]); MA_alloc_get(MT_DBL, 20000, "heap1", &handle[1], &index[1]); MA_push_get(MT_DBL, 35000, "stack0", &handle[2], &index[2]); printf("# free 1 heap (10K)\n"); MA_free_heap(handle[0]); printf("# should see roughly the following values:\n"); printf("# MA_inquire_heap(MT_DBL) = 20K\n"); printf("# MA_inquire_heap_check_stack(MT_DBL) = 10K\n"); printf("# MA_inquire_heap_no_partition(MT_DBL) = 10K\n"); printf("# MA_inquire_stack(MT_DBL) = 0\n"); printf("# MA_inquire_stack_check_heap(MT_DBL) = 0\n"); printf("# MA_inquire_stack_no_partition(MT_DBL) = 5K\n"); print_inquire(); return 0; } void print_inquire() { int howmany; (void)printf("--------------------------------------------------------\n"); howmany = MA_inquire_heap(MT_DBL); (void)printf("MA_inquire_heap(MT_DBL) = %d\n", howmany); howmany = MA_inquire_heap_check_stack(MT_DBL); (void)printf("MA_inquire_heap_check_stack(MT_DBL) = %d\n", howmany); howmany = MA_inquire_heap_no_partition(MT_DBL); (void)printf("MA_inquire_heap_no_partition(MT_DBL) = %d\n", howmany); howmany = MA_inquire_stack(MT_DBL); (void)printf("MA_inquire_stack(MT_DBL) = %d\n", howmany); howmany = MA_inquire_stack_check_heap(MT_DBL); (void)printf("MA_inquire_stack_check_heap(MT_DBL) = %d\n", howmany); howmany = MA_inquire_stack_no_partition(MT_DBL); (void)printf("MA_inquire_stack_no_partition(MT_DBL) = %d\n", howmany); (void)printf("--------------------------------------------------------\n"); } ga-5-3/ma/scope.h0000640005473000001440000000050111256770646012465 0ustar d3n000users/** @file * Private header file containing symbolic constants for internal C routines. * * This file should only be included by internal C files. */ #ifndef _scope_h #define _scope_h /** ** constants **/ /* pseudo reserved words for scope control */ #define private static #define public #endif /* _scope_h */ ga-5-3/ma/man/0000750005473000001440000000000012275260550011747 5ustar d3n000usersga-5-3/ma/man/man3/0000750005473000001440000000000012275260550012605 5ustar d3n000usersga-5-3/ma/man/man3/MA_allocate_heap.30000640005473000001440000000407507540051245016034 0ustar d3n000users.TH MA_ALLOCATE_HEAP 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_allocate_heap - allocate a heap block .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_allocate_heap(datatype, nelem, name, memhandle) Integer datatype; /* read-only */ Integer nelem; /* read-only */ char *name; /* read-only */ Integer *memhandle; /* write-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" logical function MA_allocate_heap(datatype, nelem, name, memhandle) integer datatype integer nelem character*(*) name integer memhandle .fi .SH DESCRIPTION MA_allocate_heap() allocates a heap block large enough to hold .I nelem elements of type .I datatype and associates .I name with the block for debugging purposes. A handle for the block is returned in .IR memhandle . .\" .SH USAGE .SH DIAGNOSTICS block '%s', MA not yet initialized .in +0.5i MA_init() must be called before this routine is called. .in block '%s', invalid datatype: %d .in +0.5i .I datatype must be one of those listed in macdecls.h or mafdecls.fh. .in block '%s', invalid nelem: %d .in +0.5i .I nelem must be greater than zero. .in block '%s', not enough space to allocate %d bytes .in +0.5i Recovery may be attempted by deallocating unneeded blocks and resubmitting the request, or the application may be rewritten to request more memory initially in the call to MA_init(). .in .SH "RETURN VALUE" C: MA_TRUE upon success, MA_FALSE upon failure. .br FORTRAN: .true. upon success, .false. upon failure. .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_alloc_get(3), MA_free_heap(3), MA_get_index(3), MA_get_pointer(3), MA_inquire_avail(3), MA_inquire_heap(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_inquire_stack.30000640005473000001440000000266407540051245016116 0ustar d3n000users.TH MA_INQUIRE_STACK 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_inquire_stack - find out how much free space is available in the stack region .SH "C SYNOPSIS" .nf #include "macdecls.h" Integer MA_inquire_stack(datatype) Integer datatype; /* read-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" integer function MA_inquire_stack(datatype) integer datatype .fi .SH DESCRIPTION MA_inquire_stack() returns the maximum number of elements of type .I datatype that can currently be allocated in the stack, in a single allocation request, with respect to the partition defined at initialization. .\" .SH USAGE .SH DIAGNOSTICS MA not yet initialized .in +0.5i MA_init() must be called before this routine is called. .in invalid datatype: %d .in +0.5i .I datatype must be one of those listed in macdecls.h or mafdecls.fh. .in .SH "RETURN VALUE" C: The number of elements, as described above. .br FORTRAN: The number of elements, as described above. .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_inquire_avail(3), MA_inquire_heap(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_set_hard_fail.30000640005473000001440000000246707540051245016042 0ustar d3n000users.TH MA_SET_HARD_FAIL 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_set_hard_fail - set the ma_hard_fail flag .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_set_hard_fail(value) Boolean value; /* read-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" logical function MA_set_hard_fail(value) logical value .fi .SH DESCRIPTION MA_set_hard_fail() sets the ma_hard_fail flag to .I value and returns the flag's previous value. If the ma_hard_fail flag is true, then any error detected by MA (including those normally considered nonfatal) causes program termination. The ma_hard_fail flag is initially false. .\" .SH USAGE .\" .SH DIAGNOSTICS .SH "RETURN VALUE" C: The previous value of the ma_hard_fail flag (MA_TRUE or MA_FALSE). .br FORTRAN: The previous value of the ma_hard_fail flag (.true. or .false.). .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_set_auto_verify(3), MA_set_error_print(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_verify_allocator_stuff.30000640005473000001440000000414107540051245020020 0ustar d3n000users.TH MA_VERIFY_ALLOCATOR_STUFF 3 "20 February 1997" "MA Release 1.8" " " .SH NAME MA_verify_allocator_stuff - sanity check the internal state of MA .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_verify_allocator_stuff() .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" logical function MA_verify_allocator_stuff() .fi .SH DESCRIPTION MA_verify_allocator_stuff() checks each block currently allocated on the heap or the stack for checksum and guard errors. For each error found, a message is printed on the standard output (stdout). If any errors are found, a summary message is printed on the standard error (stderr), else nothing is printed. .\" .SH USAGE .SH DIAGNOSTICS unavailable; recompile MA with -DVERIFY .in +0.5i To use this routine, MA must be compiled with cpp option -DVERIFY. .in %s block '%s', handle %d, address 0x%lx: .in +0.5i The following diagnostics are each prefixed by this information, which identifies the corrupted block. .in current checksum %lu != stored checksum %lu .in +0.5i This indicates that the block has been corrupted by having its internal state overwritten. .in current left signature %u != proper left signature %u .in +0.5i This indicates that the block has been corrupted by being overwritten at the left end. The likely cause of this is an application indexing bug. .in current right signature %u != proper right signature %u .in +0.5i This indicates that the block has been corrupted by being overwritten at the right end. The likely cause of this is an application indexing bug. .in .SH "RETURN VALUE" C: MA_TRUE upon success (no errors), MA_FALSE upon failure (errors). .br FORTRAN: .true. upon success (no errors), .false. upon failure (errors). .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_set_auto_verify(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA.30000640005473000001440000001420707540051245013171 0ustar d3n000users.TH MA 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA - introduction to the MA dynamic memory allocator .SH DESCRIPTION MA is a library of routines that comprises a dynamic memory allocator for use by C, FORTRAN, or mixed-language applications. C applications can benefit from using MA instead of the ordinary malloc() and free() routines because of the extra features MA provides: both heap and stack memory management disciplines, debugging and verification support, usage statistics, and quantitative memory availability information. FORTRAN applications can take advantage of the same features, and may in fact require a library such as MA because dynamic memory allocation is not supported by all versions of the language. MA is designed to be portable across a variety of platforms. The following platforms are currently supported: .in +0.5i .nf alpha_osf13 DEC Alpha, DEC OSF/1 V1.3 alpha_osf13_i8 DEC Alpha, DEC OSF/1 V1.3, f77 -i8 crayc90_7c_dp Cray Y-MP C90, UNICOS 7.C, cf77 -Wf-dp crayt3d_802_dp Cray T3D, UNICOS 8.0.2, cf77 -Wf-dp delta_pgi40 Intel DELTA, NX/M R1.5 (cross-compiled by PGI 4.0) hp700_ux90 HP 9000/700, HP-UX 9.0, gcc ipsc_pgi40 Intel iPSC/860, NX/M R1.4 (cross-compiled by PGI 4.0) ksr1_1141 KSR1, KSR OS R1.1.4.1 ksr1_1141_i4 KSR1, KSR OS R1.1.4.1, f77 -i4 ksr1_1141_i4r8 KSR1, KSR OS R1.1.4.1, f77 -i4 -r8 ksr1_1141_r8 KSR1, KSR OS R1.1.4.1, f77 -r8 paragon_osf12 Intel Paragon, OSF/1 R1.2 rs_aix32 IBM RS/6000, AIX 3.2 sgi_405f SGI, IRIX 4.0.5F sgi_5111 SGI, IRIX 5.1.1.1 sgi_60 SGI Power Challenge, IRIX 6.0 sgi_60_i8 SGI Power Challenge, IRIX 6.0, f77 -i8 sun4m_412 Sun SPARC, SunOS 4.1.x sun4x_55 Sun SPARC, SunOS 5.5.x .fi .in .SH IMPLEMENTATION Memory layout: .in +0.5i .nf segment = heap_region stack_region region = block block block ... block = AD gap1 guard1 client_space guard2 gap2 .fi .in A segment of memory is obtained from the OS upon initialization. The low end of the segment is managed as a heap; the heap region grows from low addresses to high addresses. The high end of the segment is managed as a stack; the stack region grows from high addresses to low addresses. Each region consists of a series of contiguous blocks, one per allocation request, and possibly some unused space. Blocks in the heap region are either in use by the client (allocated and not yet deallocated) or not in use by the client (allocated and already deallocated). A block on the rightmost end of the heap region becomes part of the unused space upon deallocation. Blocks in the stack region are always in use by the client, because when a stack block is deallocated, it becomes part of the unused space. A block consists of the client space, i.e., the range of memory available for use by the application; guard words adjacent to each end of the client space to help detect improper memory access by the client; bookkeeping info (in an "allocation descriptor," AD); and two gaps, each zero or more bytes long, to satisfy alignment constraints (specifically, to ensure that AD and client_space are aligned properly). .SH "LIST OF ROUTINES" All MA routines are shown below, grouped by category and listed alphabetically within each category. Initialization .in +0.5i .nf MA_init() MA_initialized() MA_sizeof() MA_sizeof_overhead() .fi .in Allocation .in +0.5i .nf MA_alloc_get() MA_allocate_heap() MA_get_index() MA_get_pointer() MA_inquire_avail() MA_inquire_heap() MA_inquire_stack() MA_push_get() MA_push_stack() .fi .in Deallocation .in +0.5i .nf MA_chop_stack() MA_free_heap() MA_pop_stack() .fi .in Debugging .in +0.5i .nf MA_set_auto_verify() MA_set_error_print() MA_set_hard_fail() MA_summarize_allocated_blocks() MA_verify_allocator_stuff() .fi .in Iteration Over Allocated Blocks .in +0.5i .nf MA_get_next_memhandle() MA_init_memhandle_iterator() .fi .in Statistics .in +0.5i .nf MA_print_stats() .fi .in .SH TYPES There are three MA-specific types in the public C interface to MA: Integer, Boolean, and Pointer. They are accessible by including macdecls.h. Integer is defined in such a way that sizeof(Integer) is equal to the number of bytes in a FORTRAN integer, which varies according to compiler options and platform. Boolean is equivalent to Integer, and Pointer is equivalent to char *. .SH ERRORS Errors considered fatal by MA result in program termination. Errors considered nonfatal by MA cause the MA routine to return an error value to the caller. For most boolean functions, false is returned upon failure and true is returned upon success. (The boolean functions for which the return value means something other than success or failure are MA_set_auto_verify(), MA_set_error_print(), and MA_set_hard_fail().) Integer functions return zero upon failure; depending on the function, zero may or may not be distinguishable as an exceptional value. An application can force MA to treat all errors as fatal via MA_set_hard_fail(). If a fatal error occurs, an error message is printed on the standard error (stderr). By default, error messages are also printed for nonfatal errors. An application can force MA to print or not print error messages for nonfatal errors via MA_set_error_print(). .SH FILES To access required MA definitions, C applications should include macdecls.h and FORTRAN applications should include mafdecls.fh. .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA_alloc_get(3), MA_allocate_heap(3), MA_chop_stack(3), MA_free_heap(3), MA_get_index(3), MA_get_next_memhandle(3), MA_get_pointer(3), MA_init(3), MA_initialized(3), MA_init_memhandle_iterator(3), MA_inquire_avail(3), MA_inquire_heap(3), MA_inquire_stack(3), MA_pop_stack(3), MA_print_stats(3), MA_push_get(3), MA_push_stack(3), MA_set_auto_verify(3), MA_set_error_print(3), MA_set_hard_fail(3), MA_sizeof(3), MA_sizeof_overhead(3), MA_summarize_allocated_blocks(3), MA_verify_allocator_stuff(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_init_memhandle_iterator.30000640005473000001440000000322107540051245020131 0ustar d3n000users.TH MA_INITIALIZE_MEMHANDLE_ITERATOR 3 "20 February 1997" "MA Release 1.8" " " .SH NAME MA_init_memhandle_iterator - initialize a scan of currently allocated blocks .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_init_memhandle_iterator(ithandle) Integer *ithandle; /* write-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" logical function MA_init_memhandle_iterator(ithandle) integer ithandle .fi .SH DESCRIPTION MA_init_memhandle_iterator() returns in .I ithandle the iterator handle for a scan of currently allocated blocks. .SH USAGE The following FORTRAN code illustrates the use of MA_init_memhandle_iterator() by looping over all currently allocated blocks. .nf #include "mafdecls.fh" logical ok integer ihandle integer mhandle ok = MA_init_memhandle_iterator(ihandle) if (ok) then ok = MA_get_next_memhandle(ihandle, mhandle) 10 if (ok) then ... process mhandle ok = MA_get_next_memhandle(ihandle, mhandle) goto 10 endif endif .fi .\" .SH DIAGNOSTICS .SH "RETURN VALUE" C: MA_TRUE upon success, MA_FALSE upon failure. .br FORTRAN: .true. upon success, .false. upon failure. .SH NOTES This routine is not yet implemented. .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_get_next_memhandle(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_inquire_avail.30000640005473000001440000000312407540051245016075 0ustar d3n000users.TH MA_INQUIRE_AVAIL 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_inquire_avail - find out how much free space is available between the heap and stack regions .SH "C SYNOPSIS" .nf #include "macdecls.h" Integer MA_inquire_avail(datatype) Integer datatype; /* read-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" integer function MA_inquire_avail(datatype) integer datatype .fi .SH DESCRIPTION MA_inquire_avail() returns the maximum number of elements of type .I datatype that can currently be allocated in the space between the heap and stack, in a single allocation request, ignoring the partition defined at initialization. Note that this might not be the largest piece of memory available; the heap may contain deallocated blocks that are larger. .\" .SH USAGE .SH DIAGNOSTICS MA not yet initialized .in +0.5i MA_init() must be called before this routine is called. .in invalid datatype: %d .in +0.5i .I datatype must be one of those listed in macdecls.h or mafdecls.fh. .in .SH "RETURN VALUE" C: The number of elements, as described above. .br FORTRAN: The number of elements, as described above. .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_inquire_heap(3), MA_inquire_stack(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_free_heap.30000640005473000001440000000364307540051245015171 0ustar d3n000users.TH MA_FREE_HEAP 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_free_heap - deallocate a heap block .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_free_heap(memhandle) Integer memhandle; /* read-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" logical function MA_free_heap(memhandle) integer memhandle .fi .SH DESCRIPTION MA_free_heap() deallocates the heap block corresponding to the handle .I memhandle (which was returned by MA_alloc_get() or MA_allocate_heap() when the block was allocated). .\" .SH USAGE .SH DIAGNOSTICS invalid memhandle: %d .in +0.5i .I memhandle is not a valid handle. .in invalid checksum for memhandle %d (name: '%s') .in +0.5i The block's computed checksum does not match its stored checksum. This indicates that the block has been corrupted by having its internal state overwritten. .in invalid guard(s) for memhandle %d (name: '%s') .in +0.5i This indicates that the block has been corrupted by being overwritten at one or both ends. The likely cause of this is an application indexing bug. .in memhandle %d (name: '%s') not in heap .in +0.5i The block is not currently allocated in the heap. .in Other diagnostics are possible. If seen, they indicate corruption of the internal state of MA, caused by bugs in either MA or the application. .SH "RETURN VALUE" C: MA_TRUE upon success, MA_FALSE upon failure. .br FORTRAN: .true. upon success, .false. upon failure. .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_alloc_get(3), MA_allocate_heap(3), MA_inquire_avail(3), MA_inquire_heap(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_set_auto_verify.30000640005473000001440000000271207540051245016456 0ustar d3n000users.TH MA_SET_AUTO_VERIFY 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_set_auto_verify - set the ma_auto_verify flag .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_set_auto_verify(value) Boolean value; /* read-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" logical function MA_set_auto_verify(value) logical value .fi .SH DESCRIPTION MA_set_auto_verify() sets the ma_auto_verify flag to .I value and returns the flag's previous value. If the ma_auto_verify flag is true, then MA_verify_allocator_stuff() is called upon invocation by every other public MA routine except: .in +0.5i .nf MA_initialized() MA_set_auto_verify() MA_set_error_print() MA_set_hard_fail() .fi .in The ma_auto_verify flag is initially false. .\" .SH USAGE .\" .SH DIAGNOSTICS .SH "RETURN VALUE" C: The previous value of the ma_auto_verify flag (MA_TRUE or MA_FALSE). .br FORTRAN: The previous value of the ma_auto_verify flag (.true. or .false.). .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_set_error_print(3), MA_set_hard_fail(3), MA_verify_allocator_stuff(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_push_stack.30000640005473000001440000000410207540051245015406 0ustar d3n000users.TH MA_PUSH_STACK 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_push_stack - allocate a stack block .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_push_stack(datatype, nelem, name, memhandle) Integer datatype; /* read-only */ Integer nelem; /* read-only */ char *name; /* read-only */ Integer *memhandle; /* write-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" logical function MA_push_stack(datatype, nelem, name, memhandle) integer datatype integer nelem character*(*) name integer memhandle .fi .SH DESCRIPTION MA_push_stack() allocates a stack block large enough to hold .I nelem elements of type .I datatype and associates .I name with the block for debugging purposes. A handle for the block is returned in .IR memhandle . .\" .SH USAGE .SH DIAGNOSTICS block '%s', MA not yet initialized .in +0.5i MA_init() must be called before this routine is called. .in block '%s', invalid datatype: %d .in +0.5i .I datatype must be one of those listed in macdecls.h or mafdecls.fh. .in block '%s', invalid nelem: %d .in +0.5i .I nelem must be greater than zero. .in block '%s', not enough space to allocate %d bytes .in +0.5i Recovery may be attempted by deallocating unneeded blocks and resubmitting the request, or the application may be rewritten to request more memory initially in the call to MA_init(). .in .SH "RETURN VALUE" C: MA_TRUE upon success, MA_FALSE upon failure. .br FORTRAN: .true. upon success, .false. upon failure. .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_chop_stack(3), MA_get_index(3), MA_get_pointer(3), MA_inquire_avail(3), MA_inquire_stack(3), MA_pop_stack(3), MA_push_get(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_alloc_get.30000640005473000001440000000611407540051245015200 0ustar d3n000users.TH MA_ALLOC_GET 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_alloc_get - allocate a heap block and get the corresponding base index .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_alloc_get(datatype, nelem, name, memhandle, index) Integer datatype; /* read-only */ Integer nelem; /* read-only */ char *name; /* read-only */ Integer *memhandle; /* write-only */ Integer *index; /* write-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" logical function MA_alloc_get(datatype, nelem, name, memhandle, index) integer datatype integer nelem character*(*) name integer memhandle integer index .fi .SH DESCRIPTION MA_alloc_get() is a convenience function that combines MA_allocate_heap() and MA_get_index(). MA_alloc_get() allocates a heap block large enough to hold .I nelem elements of type .I datatype and associates .I name with the block for debugging purposes. A handle for the block is returned in .I memhandle and the base index for the type-specific data array that is appropriate for the block is returned in .IR index . .SH USAGE The following FORTRAN code illustrates the use of MA_alloc_get() by allocating a block of 5 integers on the heap and then storing values into the integers. .nf #include "mafdecls.fh" logical ok integer mhandle integer index integer i ok = MA_alloc_get(MT_INT, 5, 'heap int block', mhandle, index) if (ok) then do 10 i = 0, 4 int_mb(index + i) = 0 10 continue endif .fi .SH DIAGNOSTICS block '%s', MA not yet initialized .in +0.5i MA_init() must be called before this routine is called. .in block '%s', invalid datatype: %d .in +0.5i .I datatype must be one of those listed in macdecls.h or mafdecls.fh. .in block '%s', invalid nelem: %d .in +0.5i .I nelem must be greater than zero. .in block '%s', not enough space to allocate %d bytes .in +0.5i Recovery may be attempted by deallocating unneeded blocks and resubmitting the request, or the application may be rewritten to request more memory initially in the call to MA_init(). .in Other diagnostics are possible. If seen, they indicate corruption of the internal state of MA, caused by bugs in either MA or the application. .SH "RETURN VALUE" C: MA_TRUE upon success, MA_FALSE upon failure. .br FORTRAN: .true. upon success, .false. upon failure. .SH NOTES Type-specific data arrays are not yet available in C, so employ pointers instead of indices by using MA_allocate_heap() and MA_get_pointer() instead of MA_alloc_get(). .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_allocate_heap(3), MA_free_heap(3), MA_get_index(3), MA_get_pointer(3), MA_inquire_avail(3), MA_inquire_heap(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_get_pointer.30000640005473000001440000000476507540051245015600 0ustar d3n000users.TH MA_GET_POINTER 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_get_pointer - get the base pointer for a block .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_get_pointer(memhandle, pointer) Integer memhandle; /* read-only */ Pointer *pointer; /* write-only */ .fi .SH "FORTRAN SYNOPSIS" Not available. .SH DESCRIPTION MA_get_pointer() returns in .I pointer the base pointer for the block corresponding to the handle .I memhandle (which was returned by MA_allocate_heap() or MA_push_stack() when the block was allocated). .SH USAGE The following C code illustrates the use of MA_get_pointer() by allocating a block of 5 integers on the heap and then storing values into the integers. .nf #include "macdecls.h" Boolean ok; Integer mhandle; Pointer pointer; int i; ok = MA_allocate_heap(MT_INT, 5, "heap int block", &mhandle); if (ok) { ok = MA_get_pointer(mhandle, &pointer); if (ok) for (i = 0; i < 5; i++) *((int *)pointer + i) = 0; } .fi .SH DIAGNOSTICS invalid memhandle: %d .in +0.5i .I memhandle is not a valid handle. .in invalid checksum for memhandle %d (name: '%s') .in +0.5i The block's computed checksum does not match its stored checksum. This indicates that the block has been corrupted by having its internal state overwritten. .in invalid guard(s) for memhandle %d (name: '%s') .in +0.5i This indicates that the block has been corrupted by being overwritten at one or both ends. The likely cause of this is an application indexing bug. .in memhandle %d (name: '%s') not in heap or stack .in +0.5i The block is not currently allocated in the heap or the stack. .in Other diagnostics are possible. If seen, they indicate corruption of the internal state of MA, caused by bugs in either MA or the application. .SH "RETURN VALUE" C: MA_TRUE upon success, MA_FALSE upon failure. .br FORTRAN: Not available. .SH NOTES MA_get_pointer() is not available in FORTRAN, because FORTRAN does not support pointers. .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_alloc_get(3), MA_allocate_heap(3), MA_get_index(3), MA_push_get(3), MA_push_stack(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_sizeof_overhead.30000640005473000001440000000464607540051245016433 0ustar d3n000users.TH MA_SIZEOF_OVERHEAD 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_sizeof_overhead - compute size of block overhead .SH "C SYNOPSIS" .nf #include "macdecls.h" Integer MA_sizeof_overhead(datatype) Integer datatype; /* read-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" integer function MA_sizeof_overhead(datatype) integer datatype .fi .SH DESCRIPTION MA_sizeof_overhead() returns the number of elements of type .I datatype required to contain the worst case number of bytes of overhead for any block. .SH USAGE The following FORTRAN code illustrates the use of MA_sizeof_overhead() by computing the space required for 100 integers in 5 allocations in the heap, 200 logicals in 4 allocations in the heap, 300 reals in 3 allocations in the stack, and 400 doubles in 2 allocations in the stack. .nf #include "mafdecls.fh" logical ok integer heap_bytes_data integer heap_bytes_overhead integer heap_bytes_total integer stack_bytes_data integer stack_bytes_overhead integer stack_bytes_total heap_bytes_data = MA_sizeof(MT_INT, 100, MT_BYTE) + MA_sizeof(MT_LOG, 200, MT_BYTE) heap_bytes_overhead = (5 + 4) * MA_sizeof_overhead(MT_BYTE) heap_bytes_total = heap_bytes_data + heap_bytes_overhead stack_bytes_data = MA_sizeof(MT_REAL, 300, MT_BYTE) + MA_sizeof(MT_DBL, 400, MT_BYTE) stack_bytes_overhead = (3 + 2) * MA_sizeof_overhead(MT_BYTE) stack_bytes_total = stack_bytes_data + stack_bytes_overhead ok = MA_init(MT_BYTE, stack_bytes_total, heap_bytes_total) .fi .SH DIAGNOSTICS unable to set sizes of FORTRAN datatypes .in +0.5i This indicates either that the internal state of MA is corrupted or that there is a problem in the C-FORTRAN linkage. .in invalid datatype: %d .in +0.5i .I datatype must be one of those listed in macdecls.h or mafdecls.fh. .in .SH "RETURN VALUE" C: The number of elements, as described above. .br FORTRAN: The number of elements, as described above. .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_sizeof(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_sizeof.30000640005473000001440000000520507540051245014546 0ustar d3n000users.TH MA_SIZEOF 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_sizeof - compute sizes of data types .SH "C SYNOPSIS" .nf #include "macdecls.h" Integer MA_sizeof(datatype1, nelem1, datatype2) Integer datatype1; /* read-only */ Integer nelem1; /* read-only */ Integer datatype2; /* read-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" integer function MA_sizeof(datatype1, nelem1, datatype2) integer datatype1 integer nelem1 integer datatype2 .fi .SH DESCRIPTION MA_sizeof() returns the number of elements of type .I datatype2 required to contain .I nelem1 elements of type .IR datatype1 . .SH USAGE The following FORTRAN code illustrates the use of MA_sizeof() by computing the space required for 100 integers in 5 allocations in the heap, 200 logicals in 4 allocations in the heap, 300 reals in 3 allocations in the stack, and 400 doubles in 2 allocations in the stack. .nf #include "mafdecls.fh" logical ok integer heap_bytes_data integer heap_bytes_overhead integer heap_bytes_total integer stack_bytes_data integer stack_bytes_overhead integer stack_bytes_total heap_bytes_data = MA_sizeof(MT_INT, 100, MT_BYTE) + MA_sizeof(MT_LOG, 200, MT_BYTE) heap_bytes_overhead = (5 + 4) * MA_sizeof_overhead(MT_BYTE) heap_bytes_total = heap_bytes_data + heap_bytes_overhead stack_bytes_data = MA_sizeof(MT_REAL, 300, MT_BYTE) + MA_sizeof(MT_DBL, 400, MT_BYTE) stack_bytes_overhead = (3 + 2) * MA_sizeof_overhead(MT_BYTE) stack_bytes_total = stack_bytes_data + stack_bytes_overhead ok = MA_init(MT_BYTE, stack_bytes_total, heap_bytes_total) .fi .SH DIAGNOSTICS unable to set sizes of FORTRAN datatypes .in +0.5i This indicates either that the internal state of MA is corrupted or that there is a problem in the C-FORTRAN linkage. .in invalid datatype: %d .in +0.5i .I datatype1 and .I datatype2 must be one of those listed in macdecls.h or mafdecls.fh. .in invalid nelem: %d .in +0.5i .I nelem1 must be greater than or equal to zero. .in .SH "RETURN VALUE" C: The number of elements, as described above. .br FORTRAN: The number of elements, as described above. .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_sizeof_overhead(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_push_get.30000640005473000001440000000612107540051245015063 0ustar d3n000users.TH MA_PUSH_GET 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_push_get - allocate a stack block and get the corresponding base index .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_push_get(datatype, nelem, name, memhandle, index) Integer datatype; /* read-only */ Integer nelem; /* read-only */ char *name; /* read-only */ Integer *memhandle; /* write-only */ Integer *index; /* write-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" logical function MA_push_get(datatype, nelem, name, memhandle, index) integer datatype integer nelem character*(*) name integer memhandle integer index .fi .SH DESCRIPTION MA_push_get() is a convenience function that combines MA_push_stack() and MA_get_index(). MA_push_get() allocates a stack block large enough to hold .I nelem elements of type .I datatype and associates .I name with the block for debugging purposes. A handle for the block is returned in .I memhandle and the base index for the type-specific data array that is appropriate for the block is returned in .IR index . .SH USAGE The following FORTRAN code illustrates the use of MA_push_get() by allocating a block of 5 integers on the stack and then storing values into the integers. .nf #include "mafdecls.fh" logical ok integer mhandle integer index integer i ok = MA_push_get(MT_INT, 5, 'stack int block', mhandle, index) if (ok) then do 10 i = 0, 4 int_mb(index + i) = 0 10 continue endif .fi .SH DIAGNOSTICS block '%s', MA not yet initialized .in +0.5i MA_init() must be called before this routine is called. .in block '%s', invalid datatype: %d .in +0.5i .I datatype must be one of those listed in macdecls.h or mafdecls.fh. .in block '%s', invalid nelem: %d .in +0.5i .I nelem must be greater than zero. .in block '%s', not enough space to allocate %d bytes .in +0.5i Recovery may be attempted by deallocating unneeded blocks and resubmitting the request, or the application may be rewritten to request more memory initially in the call to MA_init(). .in Other diagnostics are possible. If seen, they indicate corruption of the internal state of MA, caused by bugs in either MA or the application. .SH "RETURN VALUE" C: MA_TRUE upon success, MA_FALSE upon failure. .br FORTRAN: .true. upon success, .false. upon failure. .SH NOTES Type-specific data arrays are not yet available in C, so employ pointers instead of indices by using MA_push_stack() and MA_get_pointer() instead of MA_push_get(). .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_chop_stack(3), MA_get_index(3), MA_get_pointer(3), MA_inquire_avail(3), MA_inquire_stack(3), MA_pop_stack(3), MA_push_stack(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_print_stats.30000640005473000001440000000220207540051245015613 0ustar d3n000users.TH MA_PRINT_STATS 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_print_stats - print MA usage statistics on the standard output (stdout) .SH "C SYNOPSIS" .nf #include "macdecls.h" void MA_print_stats() .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" subroutine MA_print_stats .fi .SH DESCRIPTION MA_print_stats() prints MA allocation statistics (current and maximum number of blocks and total bytes for heap and stack) and calls per MA routine on the standard output (stdout). .\" .SH USAGE .SH DIAGNOSTICS unavailable; recompile MA with -DSTATS .in +0.5i To use this routine, MA must be compiled with cpp option -DSTATS. .in .SH "RETURN VALUE" C: None. .br FORTRAN: None. .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_summarize_allocated_blocks(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_initialized.30000640005473000001440000000204707540051245015555 0ustar d3n000users.TH MA_INITIALIZED 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_initialized - find out if MA has been successfully initialized .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_initialized() .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" logical function MA_initialized() .fi .SH DESCRIPTION MA_initialized() returns true if MA_init() has been called successfully, otherwise it returns false. .\" .SH USAGE .\" .SH DIAGNOSTICS .SH "RETURN VALUE" C: MA_TRUE if MA has been successfully initialized, MA_FALSE otherwise. .br FORTRAN: .true. if MA has been successfully initialized, .false. otherwise. .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_init(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_summarize_allocated_blocks.30000640005473000001440000000411307540051245020625 0ustar d3n000users.TH MA_SUMMARIZE_ALLOCATED_BLOCKS 3 "20 February 1997" "MA Release 1.8" " " .SH NAME MA_summarize_allocated_blocks - print information about currently allocated blocks on the standard output (stdout) .SH "C SYNOPSIS" .nf #include "macdecls.h" void MA_summarize_allocated_blocks() .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" subroutine MA_summarize_allocated_blocks .fi .SH DESCRIPTION MA_summarize_allocated_blocks() prints the following information on the standard output (stdout) for each block currently allocated on the heap or the stack. address .in +0.5i The location in memory of (i.e., pointer to) the block. .in handle .in +0.5i The memhandle by which the block is referenced (returned when the block was allocated). .in name .in +0.5i The name of the block (specified when the block was allocated). .in type of elements .in +0.5i The type of data elements stored in the block (specified when the block was allocated). .in number of elements .in +0.5i The number of data elements stored in the block (specified when the block was allocated). .in address of client space .in +0.5i The location in memory of (i.e., pointer to) the data elements. This is the value returned by MA_get_pointer(). .in index for client space .in +0.5i The base index for the appropriate type-specific data array. This is the value returned by MA_get_index(). .in total number of bytes .in +0.5i The total number of bytes, including overhead, in the block. .in .\" .SH USAGE .SH DIAGNOSTICS invalid index_base: %d .in +0.5i This indicates either that the internal state of MA is corrupted or that there is a problem in the C-FORTRAN linkage. .in .SH "RETURN VALUE" C: None. .br FORTRAN: None. .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_print_stats(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_init.30000640005473000001440000000720307540051245014212 0ustar d3n000users.TH MA_INITIALIZE 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_init - initialize the memory allocator .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_init(datatype, nominal_stack, nominal_heap) Integer datatype; /* read-only */ Integer nominal_stack; /* read-only */ Integer nominal_heap; /* read-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" logical function MA_init(datatype, nominal_stack, nominal_heap) integer datatype integer nominal_stack integer nominal_heap .fi .SH DESCRIPTION MA_init() initializes the memory allocator by requesting from the operating system a single segment of memory that is used to satisfy allocations for both the heap and the stack. The memory segment is large enough to hold .I nominal_heap elements of type .I datatype in the heap and .I nominal_stack elements of type .I datatype in the stack, plus the overhead for two allocations (one heap and one stack); if more than two allocations will exist concurrently, overhead may be computed using MA_sizeof_overhead() and factored into .I nominal_heap and .IR nominal_stack . If .I nominal_heap is less than zero, a default total size for the heap is used. If .I nominal_stack is less than zero, a default total size for the stack is used. MA_init() must be called before any other MA routine is called, except MA_set_auto_verify(), MA_set_error_print(), MA_set_hard_fail(), MA_sizeof(), or MA_sizeof_overhead(). .SH USAGE The following FORTRAN code illustrates the use of MA_init() by computing the space required for 100 integers in 5 allocations in the heap, 200 logicals in 4 allocations in the heap, 300 reals in 3 allocations in the stack, and 400 doubles in 2 allocations in the stack. .nf #include "mafdecls.fh" logical ok integer heap_bytes_data integer heap_bytes_overhead integer heap_bytes_total integer stack_bytes_data integer stack_bytes_overhead integer stack_bytes_total heap_bytes_data = MA_sizeof(MT_INT, 100, MT_BYTE) + MA_sizeof(MT_LOG, 200, MT_BYTE) heap_bytes_overhead = (5 + 4) * MA_sizeof_overhead(MT_BYTE) heap_bytes_total = heap_bytes_data + heap_bytes_overhead stack_bytes_data = MA_sizeof(MT_REAL, 300, MT_BYTE) + MA_sizeof(MT_DBL, 400, MT_BYTE) stack_bytes_overhead = (3 + 2) * MA_sizeof_overhead(MT_BYTE) stack_bytes_total = stack_bytes_data + stack_bytes_overhead ok = MA_init(MT_BYTE, stack_bytes_total, heap_bytes_total) .fi .SH DIAGNOSTICS unable to set sizes of FORTRAN datatypes .in +0.5i This indicates either that the internal state of MA is corrupted or that there is a problem in the C-FORTRAN linkage. .in MA already initialized .in +0.5i MA_init() may not be called after it has returned successfully. .in invalid datatype: %d .in +0.5i .I datatype must be one of those listed in macdecls.h or mafdecls.fh. .in could not allocate %d bytes .in +0.5i The request for memory to the operating system failed. Recovery may be attempted by calling MA_init() again and requesting less memory. .in .SH "RETURN VALUE" C: MA_TRUE upon success, MA_FALSE upon failure. .br FORTRAN: .true. upon success, .false. upon failure. .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_initialized(3), MA_sizeof(3), MA_sizeof_overhead(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_chop_stack.30000640005473000001440000000400607540051245015363 0ustar d3n000users.TH MA_CHOP_STACK 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_chop_stack - deallocate a stack block and all stack blocks allocated after it .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_chop_stack(memhandle) Integer memhandle; /* read-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" logical function MA_chop_stack(memhandle) integer memhandle .fi .SH DESCRIPTION MA_chop_stack() deallocates the stack block corresponding to the handle .I memhandle (which was returned by MA_push_get() or MA_push_stack() when the block was allocated) and all stack blocks allocated after it. .\" .SH USAGE .SH DIAGNOSTICS invalid memhandle: %d .in +0.5i .I memhandle is not a valid handle. .in invalid checksum for memhandle %d (name: '%s') .in +0.5i The block's computed checksum does not match its stored checksum. This indicates that the block has been corrupted by having its internal state overwritten. .in invalid guard(s) for memhandle %d (name: '%s') .in +0.5i This indicates that the block has been corrupted by being overwritten at one or both ends. The likely cause of this is an application indexing bug. .in memhandle %d (name: '%s') not in stack .in +0.5i The block is not currently allocated in the stack. .in Other diagnostics are possible. If seen, they indicate corruption of the internal state of MA, caused by bugs in either MA or the application. .SH "RETURN VALUE" C: MA_TRUE upon success, MA_FALSE upon failure. .br FORTRAN: .true. upon success, .false. upon failure. .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_inquire_avail(3), MA_inquire_stack(3), MA_pop_stack(3), MA_push_get(3), MA_push_stack(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_inquire_heap.30000640005473000001440000000265607540051245015727 0ustar d3n000users.TH MA_INQUIRE_HEAP 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_inquire_heap - find out how much free space is available in the heap region .SH "C SYNOPSIS" .nf #include "macdecls.h" Integer MA_inquire_heap(datatype) Integer datatype; /* read-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" integer function MA_inquire_heap(datatype) integer datatype .fi .SH DESCRIPTION MA_inquire_heap() returns the maximum number of elements of type .I datatype that can currently be allocated in the heap, in a single allocation request, with respect to the partition defined at initialization. .\" .SH USAGE .SH DIAGNOSTICS MA not yet initialized .in +0.5i MA_init() must be called before this routine is called. .in invalid datatype: %d .in +0.5i .I datatype must be one of those listed in macdecls.h or mafdecls.fh. .in .SH "RETURN VALUE" C: The number of elements, as described above. .br FORTRAN: The number of elements, as described above. .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_inquire_avail(3), MA_inquire_stack(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_pop_stack.30000640005473000001440000000420307540051245015227 0ustar d3n000users.TH MA_POP_STACK 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_pop_stack - deallocate a stack block .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_pop_stack(memhandle) Integer memhandle; /* read-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" logical function MA_pop_stack(memhandle) integer memhandle .fi .SH DESCRIPTION MA_pop_stack() deallocates the stack block corresponding to the handle .I memhandle (which was returned by MA_push_get() or MA_push_stack() when the block was allocated), which must be at the top of the stack (i.e., the stack block most recently allocated). .\" .SH USAGE .SH DIAGNOSTICS invalid memhandle: %d .in +0.5i .I memhandle is not a valid handle. .in invalid checksum for memhandle %d (name: '%s') .in +0.5i The block's computed checksum does not match its stored checksum. This indicates that the block has been corrupted by having its internal state overwritten. .in invalid guard(s) for memhandle %d (name: '%s') .in +0.5i This indicates that the block has been corrupted by being overwritten at one or both ends. The likely cause of this is an application indexing bug. .in memhandle %d (name: '%s') not in stack .in +0.5i The block is not currently allocated in the stack. .in memhandle %d (name: '%s') not top of stack .in +0.5i The block is currently allocated in the stack, but is not at the top of the stack. .in Other diagnostics are possible. If seen, they indicate corruption of the internal state of MA, caused by bugs in either MA or the application. .SH "RETURN VALUE" C: MA_TRUE upon success, MA_FALSE upon failure. .br FORTRAN: .true. upon success, .false. upon failure. .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_push_get(3), MA_push_stack(3), MA_inquire_avail(3), MA_inquire_stack(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_get_next_memhandle.30000640005473000001440000000357707540051245017110 0ustar d3n000users.TH MA_GET_NEXT_MEMHANDLE 3 "20 February 1997" "MA Release 1.8" " " .SH NAME MA_get_next_memhandle - get the handle for the next block in the scan of currently allocated blocks .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_get_next_memhandle(ithandle, memhandle) Integer *ithandle; /* read-write */ Integer *memhandle; /* write-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" logical function MA_get_next_memhandle(ithandle, memhandle) integer ithandle integer memhandle .fi .SH DESCRIPTION MA_get_next_memhandle() returns in .I memhandle the handle for the next block in the scan of currently allocated blocks corresponding to the iterator handle .I ithandle (which was returned by MA_init_memhandle_iterator() when the scan was initialized). .SH USAGE The following FORTRAN code illustrates the use of MA_get_next_memhandle() by looping over all currently allocated blocks. .nf #include "mafdecls.fh" logical ok integer ihandle integer mhandle ok = MA_init_memhandle_iterator(ihandle) if (ok) then ok = MA_get_next_memhandle(ihandle, mhandle) 10 if (ok) then ... process mhandle ok = MA_get_next_memhandle(ihandle, mhandle) goto 10 endif endif .fi .\" .SH DIAGNOSTICS .SH "RETURN VALUE" C: MA_TRUE upon success, MA_FALSE upon failure. .br FORTRAN: .true. upon success, .false. upon failure. .SH NOTES This routine is not yet implemented. .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_init_memhandle_iterator(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_get_index.30000640005473000001440000000536507540051245015224 0ustar d3n000users.TH MA_GET_INDEX 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_get_index - get the base index for a block .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_get_index(memhandle, index) Integer memhandle; /* read-only */ Integer *index; /* write-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" logical function MA_get_index(memhandle, index) integer memhandle integer index .fi .SH DESCRIPTION MA_get_index() returns in .I index the base index for the type-specific data array that is appropriate for the block corresponding to the handle .I memhandle (which was returned by MA_allocate_heap() or MA_push_stack() when the block was allocated). .SH USAGE The following FORTRAN code illustrates the use of MA_get_index() by allocating a block of 5 integers on the heap and then storing values into the integers. .nf #include "mafdecls.fh" logical ok integer mhandle integer index integer i ok = MA_allocate_heap(MT_INT, 5, 'heap int block', mhandle) if (ok) then ok = MA_get_index(mhandle, index) if (ok) then do 10 i = 0, 4 int_mb(index + i) = 0 10 continue endif endif .fi .SH DIAGNOSTICS invalid memhandle: %d .in +0.5i .I memhandle is not a valid handle. .in invalid checksum for memhandle %d (name: '%s') .in +0.5i The block's computed checksum does not match its stored checksum. This indicates that the block has been corrupted by having its internal state overwritten. .in invalid guard(s) for memhandle %d (name: '%s') .in +0.5i This indicates that the block has been corrupted by being overwritten at one or both ends. The likely cause of this is an application indexing bug. .in memhandle %d (name: '%s') not in heap or stack .in +0.5i The block is not currently allocated in the heap or the stack. .in Other diagnostics are possible. If seen, they indicate corruption of the internal state of MA, caused by bugs in either MA or the application. .SH "RETURN VALUE" C: MA_TRUE upon success, MA_FALSE upon failure. .br FORTRAN: .true. upon success, .false. upon failure. .SH NOTES Type-specific data arrays are not yet available in C, so employ pointers instead of indices by using MA_get_pointer() instead of MA_get_index(). .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_alloc_get(3), MA_allocate_heap(3), MA_get_pointer(3), MA_push_get(3), MA_push_stack(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/man3/MA_set_error_print.30000640005473000001440000000255607540051245016475 0ustar d3n000users.TH MA_SET_ERROR_PRINT 3 "20 February 1997" "MA Release 1.8" "MA LIBRARY ROUTINES" .SH NAME MA_set_error_print - set the ma_error_print flag .SH "C SYNOPSIS" .nf #include "macdecls.h" Boolean MA_set_error_print(value) Boolean value; /* read-only */ .fi .SH "FORTRAN SYNOPSIS" .nf #include "mafdecls.fh" logical function MA_set_error_print(value) logical value .fi .SH DESCRIPTION MA_set_error_print() sets the ma_error_print flag to .I value and returns the flag's previous value. If the ma_error_print flag is true, then nonfatal errors cause messages to be printed on the standard error (stderr), else they do not. (Fatal errors always generate messages.) The ma_error_print flag is initially true. .\" .SH USAGE .\" .SH DIAGNOSTICS .SH "RETURN VALUE" C: The previous value of the ma_error_print flag (MA_TRUE or MA_FALSE). .br FORTRAN: The previous value of the ma_error_print flag (.true. or .false.). .\" .SH NOTES .SH FILES .nf Include files: /msrc/proj/hpctools/ma/release/current/include Library: /msrc/proj/hpctools/ma/release/current/lib/\fIplatform\fR/libma.a Man pages: /msrc/proj/hpctools/ma/release/current/man/man3 Source code: /msrc/proj/hpctools/ma/release/current/tar/ma\fIrelease\fR.tar .fi .SH "SEE ALSO" .na MA(3), MA_set_auto_verify(3), MA_set_hard_fail(3) .ad .SH AUTHOR Gregory S. Thomas, Pacific Northwest National Laboratory ga-5-3/ma/man/whatis0000640005473000001440000000321207540051245013166 0ustar d3n000usersMA (3) - introduction to the MA dynamic memory allocator MA_alloc_get (3) - allocate a heap block and get the corresponding base index MA_allocate_heap (3) - allocate a heap block MA_chop_stack (3) - deallocate a stack block and all stack blocks allocated after it MA_free_heap (3) - deallocate a heap block MA_get_index (3) - get the base index for a block MA_get_next_memhandle (3) - get the handle for the next block in the scan of currently allocated blocks MA_get_pointer (3) - get the base pointer for a block MA_init (3) - initialize the memory allocator MA_initialized (3) - find out if MA has been successfully initialized MA_init_memhandle_iterator (3) - initialize a scan of currently allocated blocks MA_inquire_avail (3) - find out how much free space is available between the heap and stack regions MA_inquire_heap (3) - find out how much free space is available in the heap region MA_inquire_stack (3) - find out how much free space is available in the stack region MA_pop_stack (3) - deallocate a stack block MA_print_stats (3) - print MA usage statistics on the standard output (stdout) MA_push_get (3) - allocate a stack block and get the corresponding base index MA_push_stack (3) - allocate a stack block MA_set_auto_verify (3) - set the ma_auto_verify flag MA_set_error_print (3) - set the ma_error_print flag MA_set_hard_fail (3) - set the ma_hard_fail flag MA_sizeof (3) - compute sizes of data types MA_sizeof_overhead (3) - compute size of block overhead MA_summarize_allocated_blocks (3) - print information about currently allocated blocks on the standard output (stdout) MA_verify_allocator_stuff (3) - sanity check the internal state of MA ga-5-3/ma/error.c0000640005473000001440000000367311272474200012476 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * Error handling module. */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #include "error.h" #include "scope.h" /** default # of initial table entries */ #define MA_EBUF_SIZE 1024 /** buffer for error messages */ public char ma_ebuf[MA_EBUF_SIZE]; /** print error messages for nonfatal errors? */ public Boolean ma_error_print = MA_TRUE; /** terminate execution upon any error? */ public Boolean ma_hard_fail = MA_FALSE; void (*ma_func_terminate)() = 0; void MA_set_error_callback(void (*func)()) { ma_func_terminate = func; } /** * Depending on the given arguments and certain global parameters, * possibly print a message to stderr and/or terminate the program. * * @param elevel severity of error * @param etype category of error * @param func name of routine in which error was found * @param emsg msg describing error */ public void ma_error(ErrorLevel elevel, ErrorType etype, char *func, char *emsg) { /* print a message? */ if ((elevel == EL_Fatal) || ma_hard_fail || ma_error_print) { char *s1; /* internal or not */ char *s2; /* class of error */ /* set s1 */ if (etype == ET_Internal) { s1 = "internal "; } else { s1 = ""; } /* set s2 */ if (elevel == EL_Fatal) { s2 = "fatal error"; } else if (ma_hard_fail) { s2 = "hard failure"; } else { s2 = "error"; } /* print the message */ (void)fflush(stdout); (void)fflush(stderr); (void)fprintf(stderr, "MA %s%s: %s: %s\n", s1, s2, func, emsg); (void)fflush(stderr); } /* terminate execution? */ if ((elevel == EL_Fatal) || ma_hard_fail) { if(ma_func_terminate) { ma_func_terminate("MA aborting",0); } else { exit(1); } } } ga-5-3/ma/matypes.h.in0000640005473000001440000000147611411201316013427 0ustar d3n000users/** @file * Private header file containing C type definitions. * * This file should only be included directly by internal C * header files (e.g., macdecls.h). It may be included indirectly * by external C files that include the appropriate header * file (e.g., macdecls.h). */ #ifndef _MATYPES_H #define _MATYPES_H /** ** types **/ #include "typesf2c.h" typedef Integer Boolean; /* MA_TRUE or MA_FALSE */ typedef char * Pointer; /* generic pointer */ /* not all C compilers support long double */ typedef @MA_LONG_DOUBLE@ MA_LongDouble; /* no C compilers support complex types */ typedef struct {float dummy[2];} MA_SingleComplex; typedef struct {double dummy[2];} MA_DoubleComplex; typedef struct {double dummy[4];} MA_LongDoubleComplex; typedef @MA_ACCESS_INDEX_TYPE_C@ MA_AccessIndex; #endif /* _matypes_h */ ga-5-3/ma/memcpy.h0000640005473000001440000000201411577714507012647 0ustar d3n000users/** @file * Private header file containing symbolic constants, type declarations, * and macro definitions for OS memory routines, to provide a level of * abstraction between them and routines that use them. * * This file should only be included by internal C files. */ #ifndef _memcpy_h #define _memcpy_h /** ** constants **/ /* ensure that NULL is defined */ #ifndef NULL #define NULL 0 #endif /** ** macros **/ /* allocate bytes */ #define bytealloc(nbytes) malloc((unsigned long)(nbytes)) /* deallocate bytes */ #define bytefree(pointer) (void)free((char *)(pointer)) #if HAVE_STRING_H # include #else # ifndef HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr (), *strrchr (); # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif #define bytecopy(from,to,nbytes) \ ((void)memcpy((char *)(to), (char *)(from), (int)(nbytes))) #endif /* _memcpy_h */ ga-5-3/ma/mafdecls.fh.in0000640005473000001440000001100412006000267013660 0ustar d3n000users#ifndef _mafdecls_fh #define _mafdecls_fh ! ! $Id: mafdecls.fh,v 1.11 2002-09-14 05:40:30 d3g001 Exp $ ! ! ! Public header file for a portable dynamic memory allocator. ! ! This file may be included by internal and external FORTRAN files. ! #include "macommon.h" ! ! The guard ends here instead of at the end of the file because we only ! need the cpp constants (stuff above) defined once per FORTRAN file, ! but need the declarations (stuff below) to be defined each time this ! file is included in a FORTRAN file. ! #endif ! ! constants ! ! type declarations for datatype constants integer MT_BYTE ! byte integer MT_INT ! integer integer MT_LOG ! logical integer MT_REAL ! real integer MT_DBL ! double precision integer MT_SCPL ! single precision complex integer MT_DCPL ! double precision complex integer MT_F_FIRST ! first type integer MT_F_LAST ! last type ! parameter declarations for datatype constants parameter (MT_BYTE = MT_F_BYTE) parameter (MT_INT = MT_F_INT) parameter (MT_LOG = MT_F_LOG) parameter (MT_REAL = MT_F_REAL) parameter (MT_DBL = MT_F_DBL) parameter (MT_SCPL = MT_F_SCPL) parameter (MT_DCPL = MT_F_DCPL) parameter (MT_F_FIRST = MT_BYTE) parameter (MT_F_LAST = MT_DCPL) ! ! function types ! #ifndef MAF_INTERNAL logical MA_alloc_get logical MA_allocate_heap logical MA_chop_stack logical MA_free_heap logical MA_free_heap_piece logical MA_get_index logical MA_get_next_memhandle logical MA_get_numalign logical MA_init logical MA_initialized logical MA_init_memhandle_iterator integer MA_inquire_avail integer MA_inquire_heap integer MA_inquire_heap_check_stack integer MA_inquire_heap_no_partition integer MA_inquire_stack integer MA_inquire_stack_check_heap integer MA_inquire_stack_no_partition logical MA_pop_stack ! subroutine MA_print_stats logical MA_push_get logical MA_push_stack logical MA_set_auto_verify logical MA_set_error_print logical MA_set_hard_fail logical MA_set_numalign integer MA_sizeof integer MA_sizeof_overhead ! subroutine MA_summarize_allocated_blocks ! subroutine MA_trace logical MA_verify_allocator_stuff external MA_alloc_get external MA_allocate_heap external MA_chop_stack external MA_free_heap external MA_free_heap_piece external MA_get_index external MA_get_next_memhandle external MA_get_numalign external MA_init external MA_initialized external MA_init_memhandle_iterator external MA_inquire_avail external MA_inquire_heap external MA_inquire_heap_check_stack external MA_inquire_heap_no_partition external MA_inquire_stack external MA_inquire_stack_check_heap external MA_inquire_stack_no_partition external MA_pop_stack external MA_print_stats external MA_push_get external MA_push_stack external MA_set_auto_verify external MA_set_error_print external MA_set_hard_fail external MA_set_numalign external MA_sizeof external MA_sizeof_overhead external MA_summarize_allocated_blocks external MA_trace external MA_verify_allocator_stuff #endif ! ! variables ! #ifdef HPUX # define HP_SHARED_COMMON_ #endif ! common blocks #ifdef HP_SHARED_COMMON *$HP$ shared_common /mbc_byte/ #endif common /mbc_byte/ byte_mb(2) character*1 byte_mb #ifdef HP_SHARED_COMMON *$HP$ shared_common /mbc_int/ #endif common /mbc_int/ int_mb(2) integer int_mb #ifdef HP_SHARED_COMMON *$HP$ shared_common /mbc_log/ #endif common /mbc_log/ log_mb(2) logical log_mb #ifdef HP_SHARED_COMMON *$HP$ shared_common /mbc_real/ #endif common /mbc_real/ real_mb(2) real real_mb #ifdef HP_SHARED_COMMON *$HP$ shared_common /mbc_dbl/ #endif common /mbc_dbl/ dbl_mb(2) double precision dbl_mb #ifdef HP_SHARED_COMMON *$HP$ shared_common /mbc_scpl/ #endif common /mbc_scpl/ scpl_mb(2) complex scpl_mb #ifdef HP_SHARED_COMMON *$HP$ shared_common /mbc_dcpl/ #endif common /mbc_dcpl/ dcpl_mb(2) double complex dcpl_mb #define MA_ACCESS_INDEX_TYPE @MA_ACCESS_INDEX_TYPE@ #define MAPOINTER @MA_ACCESS_INDEX_TYPE@ ga-5-3/ma/MA.tex0000640005473000001440000000555306101251652012216 0ustar d3n000users\documentstyle[11pt,twocolumn]{article} % vertical parameters \setlength{\topmargin}{0in} \setlength{\headheight}{0in} \setlength{\headsep}{0in} \setlength{\topskip}{0in} \setlength{\textheight}{8.5in} \setlength{\footheight}{10pt} \setlength{\footskip}{0.5in} % horizontal parameters \setlength{\textwidth}{6.5in} \setlength{\oddsidemargin}{0in} \setlength{\evensidemargin}{0in} \setlength{\marginparwidth}{0in} \setlength{\parindent}{0in} \begin{document} MA is a library of routines that comprises a dynamic memory allocator for use by C, FORTRAN, or mixed-language applications. C applications can benefit from using MA instead of the ordinary malloc() and free() routines because of the extra features MA provides: both heap and stack memory management disciplines, debugging and verification support, usage statistics, and quantitative memory availability information. FORTRAN applications can take advantage of the same features, and may in fact require a library such as MA because dynamic memory allocation is not supported by all versions of the language. MA is designed to be portable across a variety of platforms. The following platforms are currently supported: \begin{itemize} \item Cray Y-MP C90 \item Cray T3D \item DEC Alpha \item HP 9000/700 \item IBM RS/6000 \item Intel DELTA \item Intel iPSC/860 \item Intel Paragon \item KSR1 \item SGI \item SGI Power Challenge \item SPARC \end{itemize} The implementation of MA uses the following memory layout: \begin{quote} segment = heap\_region stack\_region \\ region = block block block \ldots \\ block = AD gap1 guard1 client\_space guard2 gap2 \end{quote} A segment of memory is obtained from the OS upon initialization. The low end of the segment is managed as a heap; the heap region grows from low addresses to high addresses. The high end of the segment is managed as a stack; the stack region grows from high addresses to low addresses. Each region consists of a series of contiguous blocks, one per allocation request, and possibly some unused space. Blocks in the heap region are either in use by the client (allocated and not yet deallocated) or not in use by the client (allocated and already deallocated). A block on the rightmost end of the heap region becomes part of the unused space upon deallocation. Blocks in the stack region are always in use by the client, because when a stack block is deallocated, it becomes part of the unused space. A block consists of the client space, i.e., the range of memory available for use by the application; guard words adjacent to each end of the client space to help detect improper memory access by the client; bookkeeping info (in an ``allocation descriptor,'' AD); and two gaps, each zero or more bytes long, to satisfy alignment constraints (specifically, to ensure that AD and client\_space are aligned properly). A set of man pages for the MA routines is available. \end{document} ga-5-3/ma/maf.F0000640005473000001440000003541612030450527012052 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c c $Id: maf.F,v 1.14 2003-07-10 19:19:28 d3h325 Exp $ c c c FORTRAN routines for a portable dynamic memory allocator. c #define MAF_INTERNAL cc cc private routines cc c --------------------------------------------------------------- c c --------------------------------------------------------------- c integer function ma_set_sizes () implicit none #include "maf2c.fh" #include "mafdecls.fh" ma_set_sizes = 0 if (f2c_inform_base(MT_BYTE, byte_mb(1), byte_mb(2)) .eq. $ MA_FALSE) return if (f2c_inform_base(MT_INT, int_mb(1), int_mb(2)) .eq. $ MA_FALSE) return if (f2c_inform_base(MT_LOG, log_mb(1), log_mb(2)) .eq. $ MA_FALSE) return if (f2c_inform_base(MT_REAL, real_mb(1), real_mb(2)) .eq. $ MA_FALSE) return if (f2c_inform_base(MT_DBL, dbl_mb(1), dbl_mb(2)) .eq. $ MA_FALSE) return if (f2c_inform_base(MT_SCPL, scpl_mb(1), scpl_mb(2)) .eq. $ MA_FALSE) return if (f2c_inform_base(MT_DCPL, dcpl_mb(1), dcpl_mb(2)) .eq. $ MA_FALSE) return ma_set_sizes = 1 return end cc cc public routines cc c In general, each routine simply calls its corresponding f2c_ C c wrapper routine, which performs any necessary argument munging c and then calls the corresponding C routine. c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_alloc_get (datatype, nelem, name, memhandle, $ index) implicit none #include "mafdecls.fh" integer datatype integer nelem character*(*) name integer memhandle MA_ACCESS_INDEX_TYPE index #include "maf2c.fh" if (f2c_alloc_get(datatype, nelem, name, memhandle, index) .eq. $ MA_TRUE) then MA_alloc_get = .true. else MA_alloc_get = .false. endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_allocate_heap (datatype, nelem, name, $ memhandle) implicit none integer datatype integer nelem character*(*) name integer memhandle #include "maf2c.fh" if (f2c_allocate_heap(datatype, nelem, name, memhandle) .eq. $ MA_TRUE) then MA_allocate_heap = .true. else MA_allocate_heap = .false. endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_chop_stack (memhandle) implicit none integer memhandle #include "maf2c.fh" if (f2c_chop_stack(memhandle) .eq. MA_TRUE) then MA_chop_stack = .true. else MA_chop_stack = .false. endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_free_heap (memhandle) implicit none integer memhandle #include "maf2c.fh" if (f2c_free_heap(memhandle) .eq. MA_TRUE) then MA_free_heap = .true. else MA_free_heap = .false. endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_free_heap_piece (memhandle, nelem) implicit none integer memhandle integer nelem #include "maf2c.fh" if (f2c_free_heap_piece(memhandle, nelem) .eq. MA_TRUE) then MA_free_heap_piece = .true. else MA_free_heap_piece = .false. endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_get_index (memhandle, index) implicit none #include "mafdecls.fh" integer memhandle MA_ACCESS_INDEX_TYPE index #include "maf2c.fh" if (f2c_get_index(memhandle, index) .eq. MA_TRUE) then MA_get_index = .true. else MA_get_index = .false. endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_get_next_memhandle (ithandle, memhandle) implicit none integer ithandle integer memhandle #include "maf2c.fh" if (f2c_get_next_memhandle(ithandle, memhandle) .eq. MA_TRUE) $ then MA_get_next_memhandle = .true. else MA_get_next_memhandle = .false. endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_get_numalign (numalign) implicit none integer numalign #include "maf2c.fh" MA_get_numalign = (f2c_get_numalign(numalign) .eq. MA_TRUE) return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_init (datatype, stack, heap) implicit none integer datatype integer stack integer heap #include "maf2c.fh" if (f2c_init(datatype, stack, heap) .eq. MA_TRUE) then MA_init = .true. else MA_init = .false. endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_initialized () implicit none #include "maf2c.fh" if (f2c_initialized() .eq. MA_TRUE) then MA_initialized = .true. else MA_initialized = .false. endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_init_memhandle_iterator (ithandle) implicit none integer ithandle #include "maf2c.fh" if (f2c_init_memhandle_iterator(ithandle) .eq. MA_TRUE) $ then MA_init_memhandle_iterator = .true. else MA_init_memhandle_iterator = .false. endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c integer function MA_inquire_avail (datatype) implicit none integer datatype #include "maf2c.fh" MA_inquire_avail = f2c_inquire_avail(datatype) return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c integer function MA_inquire_heap (datatype) implicit none integer datatype #include "maf2c.fh" MA_inquire_heap = f2c_inquire_heap(datatype) return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c integer function MA_inquire_heap_check_stack (datatype) implicit none integer datatype #include "maf2c.fh" MA_inquire_heap_check_stack = $ f2c_inquire_heap_check_stack(datatype) return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c integer function MA_inquire_heap_no_partition (datatype) implicit none integer datatype #include "maf2c.fh" MA_inquire_heap_no_partition = $ f2c_inquire_heap_no_partition(datatype) return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c integer function MA_inquire_stack (datatype) implicit none integer datatype #include "maf2c.fh" MA_inquire_stack = f2c_inquire_stack(datatype) return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c integer function MA_inquire_stack_check_heap (datatype) implicit none integer datatype #include "maf2c.fh" MA_inquire_stack_check_heap = $ f2c_inquire_stack_check_heap(datatype) return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c integer function MA_inquire_stack_no_partition (datatype) implicit none integer datatype #include "maf2c.fh" MA_inquire_stack_no_partition = $ f2c_inquire_stack_no_partition(datatype) return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_pop_stack (memhandle) implicit none integer memhandle #include "maf2c.fh" if (f2c_pop_stack(memhandle) .eq. MA_TRUE) then MA_pop_stack = .true. else MA_pop_stack = .false. endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c subroutine MA_print_stats(printroutines) implicit none logical printroutines #include "maf2c.fh" if (printroutines) then call f2c_print_stats(1) else call f2c_print_stats(0) endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_push_get (datatype, nelem, name, memhandle, $ index) implicit none #include "mafdecls.fh" integer datatype integer nelem character*(*) name integer memhandle MA_ACCESS_INDEX_TYPE index #include "maf2c.fh" if (f2c_push_get(datatype, nelem, name, memhandle, index) .eq. $ MA_TRUE) then MA_push_get = .true. else MA_push_get = .false. endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_push_stack (datatype, nelem, name, $ memhandle) implicit none integer datatype integer nelem character*(*) name integer memhandle #include "maf2c.fh" if (f2c_push_stack(datatype, nelem, name, memhandle) .eq. $ MA_TRUE) then MA_push_stack = .true. else MA_push_stack = .false. endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_set_auto_verify (value) implicit none logical value integer ivalue #include "maf2c.fh" if (value) then ivalue = MA_TRUE else ivalue = MA_FALSE endif if (f2c_set_auto_verify(ivalue) .eq. MA_TRUE) then MA_set_auto_verify = .true. else MA_set_auto_verify = .false. endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_set_error_print (value) implicit none logical value integer ivalue #include "maf2c.fh" if (value) then ivalue = MA_TRUE else ivalue = MA_FALSE endif if (f2c_set_error_print(ivalue) .eq. MA_TRUE) then MA_set_error_print = .true. else MA_set_error_print = .false. endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_set_hard_fail (value) implicit none logical value integer ivalue #include "maf2c.fh" if (value) then ivalue = MA_TRUE else ivalue = MA_FALSE endif if (f2c_set_hard_fail(ivalue) .eq. MA_TRUE) then MA_set_hard_fail = .true. else MA_set_hard_fail = .false. endif return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_set_numalign (numalign) implicit none integer numalign #include "maf2c.fh" MA_set_numalign = (f2c_set_numalign(numalign) .eq. MA_TRUE) return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c integer function MA_sizeof (datatype1, nelem1, datatype2) implicit none integer datatype1 integer nelem1 integer datatype2 #include "maf2c.fh" MA_sizeof = f2c_sizeof(datatype1, nelem1, datatype2) return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c integer function MA_sizeof_overhead (datatype) implicit none integer datatype #include "maf2c.fh" MA_sizeof_overhead = f2c_sizeof_overhead(datatype) return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c subroutine MA_summarize_allocated_blocks implicit none #include "maf2c.fh" call f2c_summarize_allocated_blocks() return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c subroutine ma_trace(value) implicit none integer value #include "maf2c.fh" call f2c_trace(value) return end c --------------------------------------------------------------- c c --------------------------------------------------------------- c logical function MA_verify_allocator_stuff () implicit none #include "maf2c.fh" if (f2c_verify_allocator_stuff() .eq. MA_TRUE) then MA_verify_allocator_stuff = .true. else MA_verify_allocator_stuff = .false. endif return end #undef MAF_INTERNAL ga-5-3/ma/maf2c.fh0000640005473000001440000000512711252517773012517 0ustar d3n000users#ifndef _maf2c_fh #define _maf2c_fh c c $Id: maf2c.fh,v 1.6 2002-09-14 05:40:30 d3g001 Exp $ c c c Private header file containing FORTRAN type declarations for the c C wrapper routines. c c This file should only be included by internal FORTRAN files. c c c The guard ends here instead of at the end of the file because we c need the declarations (stuff below) to be defined each time this file c is included by a FORTRAN file. c #endif /* _maf2c_fh */ c c function types c integer f2c_alloc_get integer f2c_allocate_heap integer f2c_chop_stack integer f2c_free_heap integer f2c_free_heap_piece integer f2c_get_index integer f2c_get_next_memhandle integer f2c_get_numalign integer f2c_inform_base integer f2c_init integer f2c_initialized integer f2c_init_memhandle_iterator integer f2c_inquire_avail integer f2c_inquire_heap integer f2c_inquire_heap_check_stack integer f2c_inquire_heap_no_partition integer f2c_inquire_stack integer f2c_inquire_stack_check_heap integer f2c_inquire_stack_no_partition integer f2c_pop_stack c void f2c_print_stats integer f2c_push_get integer f2c_push_stack integer f2c_set_auto_verify integer f2c_set_error_print integer f2c_set_hard_fail integer f2c_set_numalign integer f2c_sizeof integer f2c_sizeof_overhead c void f2c_summarize_allocated_blocks c void f2c_trace integer f2c_verify_allocator_stuff external f2c_alloc_get external f2c_allocate_heap external f2c_chop_stack external f2c_free_heap external f2c_free_heap_piece external f2c_get_index external f2c_get_next_memhandle external f2c_get_numalign external f2c_inform_base external f2c_init external f2c_initialized external f2c_init_memhandle_iterator external f2c_inquire_avail external f2c_inquire_heap external f2c_inquire_heap_check_stack external f2c_inquire_heap_no_partition external f2c_inquire_stack external f2c_inquire_stack_check_heap external f2c_inquire_stack_no_partition external f2c_pop_stack external f2c_print_stats external f2c_push_get external f2c_push_stack external f2c_set_auto_verify external f2c_set_error_print external f2c_set_hard_fail external f2c_set_numalign external f2c_sizeof external f2c_sizeof_overhead external f2c_summarize_allocated_blocks external f2c_trace external f2c_verify_allocator_stuff ga-5-3/ma/ma.c0000640005473000001440000032643312030366012011736 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* * Portable dynamic memory allocator. */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_MALLOC_H # include #endif #include "error.h" #include "farg.h" #include "ma.h" #include "memcpy.h" #include "scope.h" #include "table.h" #ifdef ENABLE_ARMCI_MEM_OPTION extern void* ARMCI_Malloc_local(long bytes); #endif /* * Memory layout: * * segment = heap_region stack_region * region = block block block ... * block = AD gap1 guard1 client_space guard2 gap2 * * A segment of memory is obtained from the OS upon initialization. * The low end of the segment is managed as a heap; the heap region * grows from low addresses to high addresses. The high end of the * segment is managed as a stack; the stack region grows from high * addresses to low addresses. * * Each region consists of a series of contiguous blocks, one per * allocation request, and possibly some unused space. Blocks in * the heap region are either in use by the client (allocated and * not yet deallocated) or not in use by the client (allocated and * already deallocated). A block on the rightmost end of the heap * region becomes part of the unused space upon deallocation. * Blocks in the stack region are always in use by the client, * because when a stack block is deallocated, it becomes part of * the unused space. * * A block consists of the client space, i.e., the range of memory * available for use by the application; guard words adjacent to * each end of the client space to help detect improper memory access * by the client; bookkeeping info (in an "allocation descriptor," * AD); and two gaps, each zero or more bytes long, to satisfy * alignment constraints (specifically, to ensure that AD and * client_space are aligned properly). */ /** ** constants **/ /* return value for returns that should never execute */ #define DONTCARE (Integer)0 /* default total # of bytes */ #define DEFAULT_TOTAL_HEAP 524288 /* 2^19 */ #define DEFAULT_TOTAL_STACK 524288 /* 2^19 */ /* estimate of max # of outstanding allocation requests */ #define DEFAULT_REQUESTS_HEAP 1 #define DEFAULT_REQUESTS_STACK 1 /* bytes per address */ #define BPA 1 /* per-allocation storage overhead, excluding alignment gaps */ #define BLOCK_OVERHEAD_FIXED (sizeof(AD) + (2 * sizeof(Guard))) /* block lengths are integral multiples of this */ /* * Note that for machines such as the KSR on which sizeof(pointer) * and sizeof(long) are different than sizeof(int), alignment issues * can be tricky. For example, the fields of a struct (e.g., * client_space of AD) can be improperly aligned if the struct is * dynamically placed (by MA) in such a way that the first field is * properly aligned but sizes of subsequent fields accumulate to cause * a later field to be misaligned. By defining the unit of alignment * to be the biggest of the integer and pointer types, part of the * problem is solved, but the sum of sizes of preceding fields can * still potentially cause difficulty. */ #if defined(BGP) || defined(BGQ) #define ALIGNMENT 32 #else #define ALIGNMENT sizeof(long) #endif /* min size of block split and placed on free list */ #define MINBLOCKSIZE mai_round((long)(ALIGNMENT + BLOCK_OVERHEAD_FIXED), \ (ulongi)ALIGNMENT) /* signatures for guard words */ #define GUARD1 (Guard)0xaaaaaaaa /* start signature */ #define GUARD2 (Guard)0x55555555 /* stop signature */ /** ** types **/ typedef unsigned int Guard; /* for detection of memory trashing */ typedef unsigned long ulongi; /* for brevity */ /* allocation request for a block */ typedef struct _AR { Integer datatype; /* of elements */ Integer nelem; /* # of elements */ } AR; /* allocation descriptor for a block */ typedef struct _AD { Integer datatype; /* of elements */ Integer nelem; /* # of elements */ char name[MA_NAMESIZE]; /* given by client */ Pointer client_space; /* start of client space */ ulongi nbytes; /* total # of bytes */ struct _AD *next; /* AD in linked list */ ulongi checksum; /* of AD */ } AD; /* block location for mh2ad */ typedef enum { BL_HeapOrStack, BL_Heap, BL_Stack, BL_StackTop } BlockLocation; /** ** function types **/ private Boolean ad_big_enough(AD *ad, Pointer ar); private Boolean ad_eq(AD *ad, Pointer ad_target); private Boolean ad_gt(AD *ad, Pointer ad_target); private Boolean ad_le(AD *ad, Pointer ad_target); private Boolean ad_lt(AD *ad, Pointer ad_target); private void ad_print(AD *ad, char *block_type); private void balloc_after(AR *ar, Pointer address, Pointer *client_space, ulongi *nbytes); private void balloc_before(AR *ar, Pointer address, Pointer *client_space, ulongi *nbytes); private void block_free_heap(AD *ad); private AD *block_split(AD *ad, ulongi bytes_needed, Boolean insert_free); private ulongi checksum(AD *ad); #ifdef DEBUG private void debug_ad_print(AD *ad); #endif /* DEBUG */ private Boolean guard_check(AD *ad); private void guard_set(AD *ad); private void list_coalesce(AD *list); private AD *list_delete(AD *ad, AD **list); private int list_delete_many(AD **list, Boolean (*pred)(), Pointer closure, void (*action)()); private AD *list_delete_one(AD **list, Boolean (*pred)(), Pointer closure); private void list_insert(AD *ad, AD **list); private void list_insert_ordered(AD *ad, AD **list, Boolean (*pred)()); private Boolean list_member(AD *ad, AD *list); private int list_print(AD *list, char *block_type, int index_base); private void list_verify(AD *list, char *block_type, char *preamble, int *blocks, int *bad_blocks, int *bad_checksums, int *bad_lguards, int *bad_rguards); private Integer ma_max_heap_frag_nelem(Integer datatype, Integer min_nelem); private Integer ma_nelem(Pointer address, ulongi length, Integer datatype); private void ma_preinitialize(char *caller); private Boolean mh2ad(Integer memhandle, AD **adout, BlockLocation location, char *caller); private void mh_free(AD *ad); private long mai_round(long value, ulongi unit); private void str_ncopy(char *to, char *from, int maxchars); /* foreign routines */ extern Integer ma_set_sizes_(); /* from the MA FORTRAN interface */ /** ** variables **/ /* base addresses of the datatypes */ private Pointer ma_base[] = { (Pointer)ma_cb_char, /* MT_C_CHAR */ (Pointer)ma_cb_int, /* MT_C_INT */ (Pointer)ma_cb_long, /* MT_C_LONGINT */ (Pointer)ma_cb_float, /* MT_C_FLOAT */ (Pointer)ma_cb_dbl, /* MT_C_DBL */ (Pointer)ma_cb_ldbl, /* MT_C_LDBL */ (Pointer)ma_cb_scpl, /* MT_C_SCPL */ (Pointer)ma_cb_dcpl, /* MT_C_DCPL */ (Pointer)ma_cb_ldcpl, /* MT_C_LDCPL */ 0, /* MT_F_BYTE */ 0, /* MT_F_INT */ 0, /* MT_F_LOG */ 0, /* MT_F_REAL */ 0, /* MT_F_DBL */ 0, /* MT_F_SCPL */ 0, /* MT_F_DCPL */ (Pointer)ma_cb_longlong /* MT_C_LONGLONG */ }; /* names of the datatypes */ private char *ma_datatype[] = { "char", "int", "long int", "float", "double", "long double", "single precision complex", "double precision complex", "long double precision complex", "byte", "integer", "logical", "real", "double precision", "single precision complex", "double precision complex", "long long" }; /* numbers of bytes in the datatypes */ private int ma_sizeof[] = { sizeof(char), /* MT_C_CHAR */ sizeof(int), /* MT_C_INT */ sizeof(long int), /* MT_C_LONGINT */ sizeof(float), /* MT_C_FLOAT */ sizeof(double), /* MT_C_DBL */ sizeof(MA_LongDouble), /* MT_C_LDBL */ sizeof(MA_SingleComplex), /* MT_C_SCPL */ sizeof(MA_DoubleComplex), /* MT_C_DCPL */ sizeof(MA_LongDoubleComplex), /* MT_C_LDCPL */ 0, /* MT_F_BYTE */ 0, /* MT_F_INT */ 0, /* MT_F_LOG */ 0, /* MT_F_REAL */ 0, /* MT_F_DBL */ 0, /* MT_F_SCPL */ 0, /* MT_F_DCPL */ sizeof(long long) /* MT_C_LONGLONG */ }; /* * Initially, ma_hp points to the start of the segment, and ma_sp * points to the first address past the end of the segment. The * start of the segment is always pointed to by ma_segment, and * the first address past the end of the segment is always pointed * to by ma_eos. The (unenforced) boundary between the heap region * and the stack region, defined at initialization, is always pointed * to by ma_partition. * * ................................................ * ^ ^ ^ * ma_segment, ma_hp ma_partition ma_eos, ma_sp * * Later, ma_hp points to the first address past the end of the * rightmost heap block, and ma_sp points to the leftmost stack block. * * hhhhhhhhhhhhhhhh.....................sssssssssss * ^ ^ ^ ^ ^ * ma_segment ma_hp ma_partition ma_sp ma_eos */ private Pointer ma_segment; /* memory from OS */ private Pointer ma_partition; /* boundary between heap and stack */ private Pointer ma_eos; /* end of segment */ private Pointer ma_hp; /* heap pointer */ private Pointer ma_sp; /* stack pointer */ private AD *ma_hfree; /* free list for heap */ private AD *ma_hused; /* used list for heap */ private AD *ma_sused; /* used list for stack */ /* toggled when ma_preinitialize succeeds */ private Boolean ma_preinitialized = MA_FALSE; /* toggled when MA_init succeeds */ private Boolean ma_initialized = MA_FALSE; /* invoke MA_verify_allocator_stuff in each public routine? */ private Boolean ma_auto_verify = MA_FALSE; /* print push/pop/alloc/free? */ private Boolean ma_trace = MA_FALSE; /* base arrays for the C datatypes */ public char ma_cb_char[2]; /* MT_C_CHAR */ public int ma_cb_int[2]; /* MT_C_INT */ public long ma_cb_long[2]; /* MT_C_LONGINT */ public long long ma_cb_longlong[2];/* MT_C_LONGLONG */ public float ma_cb_float[2]; /* MT_C_FLOAT */ public double ma_cb_dbl[2]; /* MT_C_DBL */ public MA_LongDouble ma_cb_ldbl[2]; /* MT_C_LDBL */ public MA_SingleComplex ma_cb_scpl[2]; /* MT_C_SCPL */ public MA_DoubleComplex ma_cb_dcpl[2]; /* MT_C_DCPL */ public MA_LongDoubleComplex ma_cb_ldcpl[2]; /* MT_C_LDCPL */ /* requested power-of-two alignment */ private Integer ma_numalign = 0; /** ** macros **/ /* minimum of two values */ #ifdef min #undef min #endif #define min(a, b) (((b) < (a)) ? (b) : (a)) /* maximum of two values */ #ifdef max #undef max #endif #define max(a, b) (((b) > (a)) ? (b) : (a)) /* proper word ending corresponding to n */ #define plural(n) (((n) == 1) ? "" : "s") /* convert between internal and external datatype values */ #define mt_import(d) ((d) - MT_BASE) #define mt_export(d) ((d) + MT_BASE) /* return nonzero if d is a valid (external) datatype */ #define mt_valid(d) (((d) >= MT_FIRST) && ((d) <= MT_LAST)) /* convert between pointer (address) and equivalent byte address */ #define p2b(p) ((ulongi)(p) * BPA) #define b2p(b) ((Pointer)((b) / BPA)) /* return nonzero if a is a potentially valid address */ #define reasonable_address(a) (((a) >= ma_segment) && ((a) < ma_eos)) /* worst case bytes of overhead for any block of elements of datatype d */ #define max_block_overhead(d) \ (BLOCK_OVERHEAD_FIXED + (ma_sizeof[d] - 1) + (ALIGNMENT - 1)) /* compute 0-based index for client_space from AD */ #define client_space_index(ad) \ ((MA_AccessIndex)((long)((ad)->client_space - ma_base[(ad)->datatype]) / \ ma_sizeof[(ad)->datatype])) /* compute address of guard from AD */ #define guard1(ad) ((Pointer)((ad)->client_space - sizeof(Guard))) #define guard2(ad) ((Pointer)((ad)->client_space \ + ((ad)->nelem * ma_sizeof[(ad)->datatype]))) /* * When reading or writing guard values, it is necessary to do an * explicit byte copy to avoid bus errors caused by guards that * are not suitably aligned. */ /* copy from guard to value */ #define guard_read(guard, value) bytecopy((guard), (value), sizeof(Guard)) /* copy from value to guard */ #define guard_write(guard, value) bytecopy((value), (guard), sizeof(Guard)) /** ** statistics stuff **/ #ifdef STATS /* the number of routines for which calls are counted */ #define NUMROUTINES ((int)FID_MA_verify_allocator_stuff + 1) /* function identifiers */ typedef enum { FID_MA_alloc_get = 0, FID_MA_allocate_heap, FID_MA_chop_stack, FID_MA_free_heap, FID_MA_free_heap_piece, FID_MA_get_index, FID_MA_get_mbase, FID_MA_get_next_memhandle, FID_MA_get_numalign, FID_MA_get_pointer, FID_MA_init, FID_MA_initialized, FID_MA_init_memhandle_iterator, FID_MA_inquire_avail, FID_MA_inquire_heap, FID_MA_inquire_heap_check_stack, FID_MA_inquire_heap_no_partition, FID_MA_inquire_stack, FID_MA_inquire_stack_check_heap, FID_MA_inquire_stack_no_partition, FID_MA_pop_stack, FID_MA_print_stats, FID_MA_push_get, FID_MA_push_stack, FID_MA_set_auto_verify, FID_MA_set_error_print, FID_MA_set_hard_fail, FID_MA_set_numalign, FID_MA_sizeof, FID_MA_sizeof_overhead, FID_MA_summarize_allocated_blocks, FID_MA_trace, FID_MA_verify_allocator_stuff } FID; /* MA usage statistics */ typedef struct { ulongi hblocks; /* current # of heap blocks */ ulongi hblocks_max; /* max # of heap blocks */ ulongi hbytes; /* current # of heap bytes */ ulongi hbytes_max; /* max # of heap bytes */ ulongi sblocks; /* current # of stack blocks */ ulongi sblocks_max; /* max # of stack blocks */ ulongi sbytes; /* current # of stack bytes */ ulongi sbytes_max; /* max # of stack bytes */ ulongi calls[NUMROUTINES];/* # of calls to each routine */ } Stats; /* names of the routines */ private char *ma_routines[] = { "MA_alloc_get", "MA_allocate_heap", "MA_chop_stack", "MA_free_heap", "MA_free_heap_piece", "MA_get_index", "MA_get_mbase", "MA_get_next_memhandle", "MA_get_numalign", "MA_get_pointer", "MA_init", "MA_initialized", "MA_init_memhandle_iterator", "MA_inquire_avail", "MA_inquire_heap", "MA_inquire_heap_check_stack", "MA_inquire_heap_no_partition", "MA_inquire_stack", "MA_inquire_stack_check_heap", "MA_inquire_stack_no_partition", "MA_pop_stack", "MA_print_stats", "MA_push_get", "MA_push_stack", "MA_set_auto_verify", "MA_set_error_print", "MA_set_hard_fail", "MA_set_numalign", "MA_sizeof", "MA_sizeof_overhead", "MA_summarize_allocated_blocks", "MA_trace", "MA_verify_allocator_stuff" }; /* MA usage statistics */ private Stats ma_stats; #endif /* STATS */ /** ** private routines **/ /* ------------------------------------------------------------------------- */ /* * Return MA_TRUE if ad can satisfy ar, else return MA_FALSE. * If ad can satisfy ar, set its client_space and nbytes fields * after performing any splitting. */ /* ------------------------------------------------------------------------- */ private Boolean ad_big_enough(ad, ar) AD *ad; /* the AD to test */ Pointer ar; /* allocation request */ { Pointer client_space; /* location of client_space */ ulongi nbytes; /* length of block for ar */ /* perform trial allocation to determine size */ balloc_after((AR *)ar, (Pointer)ad, &client_space, &nbytes); if (nbytes <= ad->nbytes) { /* ad is big enough; split block if necessary */ (void)block_split(ad, nbytes, MA_TRUE); /* set fields appropriately */ ad->client_space = client_space; /* success */ return MA_TRUE; } else /* ad is not big enough */ return MA_FALSE; } /* ------------------------------------------------------------------------- */ /* * Return MA_TRUE if ad == ad_target, else return MA_FALSE. */ /* ------------------------------------------------------------------------- */ private Boolean ad_eq(ad, ad_target) AD *ad; /* the AD to test */ Pointer ad_target; /* the AD to match */ { return (ad == (AD *)ad_target) ? MA_TRUE : MA_FALSE; } /* ------------------------------------------------------------------------- */ /* * Return MA_TRUE if ad > ad_target, else return MA_FALSE. */ /* ------------------------------------------------------------------------- */ private Boolean ad_gt(ad, ad_target) AD *ad; /* the AD to test */ Pointer ad_target; /* the AD to match */ { return (ad > (AD *)ad_target) ? MA_TRUE : MA_FALSE; } /* ------------------------------------------------------------------------- */ /* * Return MA_TRUE if ad <= ad_target, else return MA_FALSE. */ /* ------------------------------------------------------------------------- */ private Boolean ad_le(ad, ad_target) AD *ad; /* the AD to test */ Pointer ad_target; /* the AD to match */ { return (ad <= (AD *)ad_target) ? MA_TRUE : MA_FALSE; } /* ------------------------------------------------------------------------- */ /* * Return MA_TRUE if ad < ad_target, else return MA_FALSE. */ /* ------------------------------------------------------------------------- */ private Boolean ad_lt(ad, ad_target) AD *ad; /* the AD to test */ Pointer ad_target; /* the AD to match */ { return (ad < (AD *)ad_target) ? MA_TRUE : MA_FALSE; } /* ------------------------------------------------------------------------- */ /* * Print identifying information about the given AD to stdout. */ /* ------------------------------------------------------------------------- */ private void ad_print(ad, block_type) AD *ad; /* to print */ char *block_type; /* for output */ { Integer memhandle; /* memhandle for AD */ /* convert AD to memhandle */ memhandle = ma_table_lookup_assoc((TableData)ad); /* print to stdout */ (void)printf("%s block '%s', handle ", block_type, ad->name); if (memhandle == TABLE_HANDLE_NONE) (void)printf("unknown"); else (void)printf("%ld", (long)memhandle); (void)printf(", address 0x%lx", (long)ad); } /* ------------------------------------------------------------------------- */ /* * Allocate a block suitable for ar starting at address. No fields of * the new block are modified. */ /* ------------------------------------------------------------------------- */ private void balloc_after(ar, address, client_space, nbytes) AR *ar; /* allocation request */ Pointer address; /* to allocate after */ Pointer *client_space; /* RETURN: location of client_space */ ulongi *nbytes; /* RETURN: length of block */ { Integer datatype; /* of elements in this block */ ulongi L_client_space; /* length of client_space */ Pointer A_client_space; /* address of client_space */ int L_gap1; /* length of gap1 */ int L_gap2; /* length of gap2 */ ulongi B_address; /* byte equivalent of address */ ulongi B_base; /* byte equivalent of ma_base[datatype] */ ulongi B_client_space; /* byte equivalent of A_client_space */ datatype = ar->datatype; B_address = p2b(address); B_base = p2b(ma_base[datatype]); /* * To ensure that client_space is properly aligned: * * (A(client_space) - ma_base[datatype]) % ma_sizeof[datatype] == 0 * * where * * A(client_space) == address + L(AD) + L(gap1) + L(guard1) */ L_client_space = ar->nelem * ma_sizeof[datatype]; L_gap1 = ((long)B_base - (long)B_address - (long)sizeof(AD) - (long)sizeof(Guard)) % (long)ma_sizeof[datatype]; if (L_gap1 < 0) L_gap1 += ma_sizeof[datatype]; B_client_space = B_address + sizeof(AD) + L_gap1 + sizeof(Guard); A_client_space = b2p(B_client_space); B_client_space = p2b(A_client_space); /* * To align client space according to overall alignment of absolute * address on user requested 2^ma_numalign boundary. * Note that if the base arrays are not aligned accordingly then * this alignement request is not satisfiable and will be quietly * ignored. */ if (ma_numalign > 0) { unsigned long mask = (1<datatype; B_address = p2b(address); B_base = p2b(ma_base[datatype]); /* * To ensure that client_space is properly aligned: * * (A(client_space) - ma_base[datatype]) % ma_sizeof[datatype] == 0 * * where * * A(client_space) == address - L(gap2) - L(guard2) - L(client_space) */ L_client_space = ar->nelem * ma_sizeof[datatype]; L_gap2 = (B_address - sizeof(Guard) - L_client_space - B_base) % ma_sizeof[datatype]; if (L_gap2 < 0) L_gap2 += ma_sizeof[datatype]; B_client_space = B_address - L_gap2 - sizeof(Guard) - L_client_space; A_client_space = b2p(B_client_space); B_client_space = p2b(A_client_space); /* * To align client space according to overall alignment of absolute * address on user requested 2^ma_numalign boundary. * Note that if the base arrays are not aligned accordingly then * this alignement request is not satisfiable and will be quietly * ignored. */ if (ma_numalign > 0) { unsigned long mask = (1<next) { if (ad2 > max_ad) max_ad = ad2; } if (max_ad) { /* at least 1 block is in use */ /* set ma_hp to first address past end of max_ad */ ma_hp = (Pointer)max_ad + max_ad->nbytes; /* delete any free list blocks that are no longer in heap region */ (void)list_delete_many( &ma_hfree, ad_gt, (Pointer)max_ad, (void (*)())NULL); /* if ad is in the heap region, add it to free list */ if (ad < max_ad) { list_insert_ordered(ad, &ma_hfree, ad_lt); list_coalesce(ma_hfree); } } else { /* no blocks are in use */ /* set ma_hp to start of segment */ ma_hp = ma_segment; /* clear the free list */ ma_hfree = (AD *)NULL; } } /* ------------------------------------------------------------------------- */ /* * If ad is sufficiently bigger than bytes_needed bytes, create a new * block from the remainder, optionally insert it in the free list, * and set the lengths of both blocks. * * Return a pointer to the new block (NULL if not created). */ /* ------------------------------------------------------------------------- */ private AD *block_split(ad, bytes_needed, insert_free) AD *ad; /* the AD to split */ ulongi bytes_needed; /* from ad */ Boolean insert_free; /* insert in free list? */ { ulongi bytes_extra; /* in ad */ AD *ad2; /* the new AD */ /* caller ensures that ad->nbytes >= bytes_needed */ bytes_extra = ad->nbytes - bytes_needed; if (bytes_extra >= ((ulongi)MINBLOCKSIZE)) { /* create a new block */ ad2 = (AD *)((Pointer)ad + bytes_needed); /* set the length of ad2 */ ad2->nbytes = bytes_extra; if (insert_free) { /* insert ad2 into free list */ list_insert_ordered(ad2, &ma_hfree, ad_lt); } /* set the length of ad */ ad->nbytes = bytes_needed; return ad2; } else { /* * If 0 <= bytes_extra < MINBLOCKSIZE then there are too few * extra bytes to form a new block. In this case, we simply * do nothing; ad will retain its original length (which is * either perfect or slightly too big), and the entire block * will be reclaimed upon deallocation, preventing any * memory leakage. */ return (AD *)NULL; } } /* ------------------------------------------------------------------------- */ /* * Compute and return a checksum for ad. Include all fields except name, * next, and checksum. */ /* ------------------------------------------------------------------------- */ private ulongi checksum(ad) AD *ad; /* the AD to compute checksum for */ { return (ulongi)( ad->datatype + ad->nelem + (ulongi)ad->client_space + ad->nbytes); } /* ------------------------------------------------------------------------- */ /* * Print to stderr the addresses of the fields of the given ad. */ /* ------------------------------------------------------------------------- */ #ifdef DEBUG private void debug_ad_print(ad) AD *ad; /* the AD to print */ { #define NUMADFIELDS 7 char *fn[NUMADFIELDS]; /* field names */ long fa[NUMADFIELDS]; /* field addresses */ int i; /* loop index */ long address; /* other addresses */ /* set field names */ fn[0] = "datatype"; fn[1] = "nelem"; fn[2] = "name"; fn[3] = "client_space"; fn[4] = "nbytes"; fn[5] = "next"; fn[6] = "checksum"; /* set field addresses */ fa[0] = (long)(&(ad->datatype)); fa[1] = (long)(&(ad->nelem)); fa[2] = (long)(&(ad->name)); fa[3] = (long)(&(ad->client_space)); fa[4] = (long)(&(ad->nbytes)); fa[5] = (long)(&(ad->next)); fa[6] = (long)(&(ad->checksum)); /* print AD fields to stderr */ (void)fprintf(stderr, "debug_ad_print:\n"); for (i = 0; i < NUMADFIELDS; i++) (void)fprintf(stderr, "\t0x%lx mod4,8,16=%d,%d,%-2d ad->%s\n", fa[i], fa[i] % 4, fa[i] % 8, fa[i] % 16, fn[i]); /* print other addresses to stderr */ address = (long)guard1(ad); (void)fprintf(stderr, "\t0x%lx mod4,8,16=%d,%d,%-2d guard1\n", address, address % 4, address % 8, address % 16); address = (long)ad->client_space; (void)fprintf(stderr, "\t0x%lx mod4,8,16=%d,%d,%-2d client_space\n", address, address % 4, address % 8, address % 16); address = (long)guard2(ad); (void)fprintf(stderr, "\t0x%lx mod4,8,16=%d,%d,%-2d guard2\n", address, address % 4, address % 8, address % 16); (void)fflush(stderr); } #endif /* DEBUG */ /* ------------------------------------------------------------------------- */ /* * Return MA_TRUE if the guards associated with ad contain valid signatures, * else return MA_FALSE. */ /* ------------------------------------------------------------------------- */ private Boolean guard_check(ad) AD *ad; /* the AD to check guards for */ { Guard signature; /* value to be read */ Pointer guard; /* address to read from */ guard = guard1(ad); guard_read(guard, &signature); if (signature != GUARD1) return MA_FALSE; guard = guard2(ad); guard_read(guard, &signature); if (signature != GUARD2) return MA_FALSE; /* success */ return MA_TRUE; } /* ------------------------------------------------------------------------- */ /* * Write signatures into the guards associated with ad. */ /* ------------------------------------------------------------------------- */ private void guard_set(ad) AD *ad; /* the AD to set guards for */ { Guard signature; /* value to be written */ Pointer guard; /* address to write to */ signature = GUARD1; guard = guard1(ad); guard_write(guard, &signature); signature = GUARD2; guard = guard2(ad); guard_write(guard, &signature); } /* ------------------------------------------------------------------------- */ /* * Coalesce list by merging any adjacent elements that are contiguous. * The list is assumed to be ordered by increasing addresses, i.e., * addressOf(element i) < addressOf(element i+1). */ /* ------------------------------------------------------------------------- */ private void list_coalesce(list) AD *list; /* the list to coalesce */ { AD *ad1; /* lead traversal pointer */ AD *ad2; /* trailing traversal pointer */ for (ad2 = list; ad2;) { /* compute first address beyond ad2 */ ad1 = (AD *)((Pointer)ad2 + ad2->nbytes); /* are ad2 and ad1 contiguous? */ if (ad1 == ad2->next) { /* yes; merge ad1 into ad2 */ ad2->nbytes += ad1->nbytes; ad2->next = ad1->next; } else { /* no; advance ad2 */ ad2 = ad2->next; } } } /* ------------------------------------------------------------------------- */ /* * Delete and return the first occurrence of ad from list. If ad is not * a member of list, return NULL. */ /* ------------------------------------------------------------------------- */ private AD *list_delete(ad, list) AD *ad; /* the AD to delete */ AD **list; /* the list to delete from */ { return list_delete_one(list, ad_eq, (Pointer)ad); } /* ------------------------------------------------------------------------- */ /* * Apply pred (with closure) to each element of list. Delete each element * that satisfies pred, after applying action to the element (if action is * not NULL). Return the number of elements deleted. */ /* ------------------------------------------------------------------------- */ private int list_delete_many(list, pred, closure, action) AD **list; /* the list to search */ Boolean (*pred)(); /* predicate */ Pointer closure; /* for pred */ void (*action)(); /* to apply before deletion */ { AD *ad1; /* lead traversal pointer */ AD *ad2; /* trailing traversal pointer */ int ndeleted = 0; /* # of elements deleted from list */ for (ad2 = (AD *)NULL, ad1 = *list; ad1; ad1 = ad1->next) { /* does ad1 match? */ if ((*pred)(ad1, closure)) { /* yes; apply action, then delete ad1 from list */ if (action != (void (*)())NULL) (*action)(ad1); if (ad2) { /* ad1 is second or later element */ ad2->next = ad1->next; } else { /* ad1 is first element */ *list = ad1->next; } ndeleted++; } else { /* no; ad1 survives, so scoot ad2 along */ ad2 = ad1; } } /* return the # of elements deleted from list */ return ndeleted; } /* ------------------------------------------------------------------------- */ /* * Apply pred (with closure) to each element of list. Delete and return * the first element that satisfies pred. If no element satisfies pred, * return NULL. */ /* ------------------------------------------------------------------------- */ private AD *list_delete_one(list, pred, closure) AD **list; /* the list to search */ Boolean (*pred)(); /* predicate */ Pointer closure; /* for pred */ { AD *ad1; /* lead traversal pointer */ AD *ad2; /* trailing traversal pointer */ for (ad2 = (AD *)NULL, ad1 = *list; ad1; ad2 = ad1, ad1 = ad1->next) { /* does ad1 match? */ if ((*pred)(ad1, closure)) { /* yes; delete ad1 from list */ if (ad2) { /* ad1 is second or later element */ ad2->next = ad1->next; } else { /* ad1 is first element */ *list = ad1->next; } /* success */ return ad1; } } /* failure */ return (AD *)NULL; } /* ------------------------------------------------------------------------- */ /* * Insert ad into list. */ /* ------------------------------------------------------------------------- */ private void list_insert(ad, list) AD *ad; /* the AD to insert */ AD **list; /* the list to insert into */ { /* push ad onto list */ ad->next = *list; *list = ad; } /* ------------------------------------------------------------------------- */ /* * Insert ad into list, immediately before the first element e * for which pred(ad, e) returns true. If there is no such element, * insert ad after the last element of list. */ /* ------------------------------------------------------------------------- */ private void list_insert_ordered(ad, list, pred) AD *ad; /* the AD to insert */ AD **list; /* the list to insert into */ Boolean (*pred)(); /* predicate */ { AD *ad1; /* lead traversal pointer */ AD *ad2; /* trailing traversal pointer */ if (*list == (AD *)NULL) { /* empty list */ ad->next = (AD *)NULL; *list = ad; return; } /* list has at least one element */ for (ad2 = (AD *)NULL, ad1 = *list; ad1; ad2 = ad1, ad1 = ad1->next) { /* does ad1 match? */ if ((*pred)(ad, ad1)) { /* yes; insert ad before ad1 */ if (ad2) { /* ad1 is second or later element */ ad2->next = ad; } else { /* ad1 is first element */ *list = ad; } ad->next = ad1; /* success */ return; } } /* append ad to list */ ad2->next = ad; ad->next = (AD *)NULL; } /* ------------------------------------------------------------------------- */ /* * Return MA_TRUE if ad is a member of list, else return MA_FALSE. */ /* ------------------------------------------------------------------------- */ private Boolean list_member(ad, list) AD *ad; /* the AD to search for */ AD *list; /* the list to search */ { AD *ad1; /* traversal pointer */ for (ad1 = list; ad1; ad1 = ad1->next) if (ad1 == ad) /* ad is a member of list */ return MA_TRUE; /* ad is not a member of list */ return MA_FALSE; } /* ------------------------------------------------------------------------- */ /* * Print information to stdout about each block on list. Return the * number of blocks on list. */ /* ------------------------------------------------------------------------- */ private int list_print(list, block_type, index_base) AD *list; /* to print */ char *block_type; /* for output */ int index_base; /* 0 (C) or 1 (FORTRAN) */ { AD *ad; /* traversal pointer */ int nblocks; /* # of blocks on list */ /* print each block on list */ for (ad = list, nblocks = 0; ad; ad = ad->next, nblocks++) { /* print to stdout */ ad_print(ad, block_type); (void)printf(":\n"); (void)printf("\ttype of elements:\t\t%s\n", ma_datatype[ad->datatype]); (void)printf("\tnumber of elements:\t\t%ld\n", (long)ad->nelem); (void)printf("\taddress of client space:\t0x%lx\n", (long)ad->client_space); (void)printf("\tindex for client space:\t\t%ld\n", (long)(client_space_index(ad) + index_base)); (void)printf("\ttotal number of bytes:\t\t%lu\n", ad->nbytes); } /* return the number of blocks on list */ return nblocks; } /* ------------------------------------------------------------------------- */ /* * Check each block on list for checksum and guard errors. For each error * found, print a message to stdout. Return counts of the various errors * in the bad_ parameters. */ /* ------------------------------------------------------------------------- */ private void list_verify(list, block_type, preamble, blocks, bad_blocks, bad_checksums, bad_lguards, bad_rguards) AD *list; /* to verify */ char *block_type; /* for error messages */ char *preamble; /* printed before first error message */ int *blocks; /* RETURN: # of blocks */ int *bad_blocks; /* RETURN: # of blocks having errors */ int *bad_checksums; /* RETURN: # of blocks having bad checksum */ int *bad_lguards; /* RETURN: # of blocks having bad guard1 */ int *bad_rguards; /* RETURN: # of blocks having bad guard2 */ { AD *ad; /* traversal pointer */ Boolean first_bad_block;/* first bad block found? */ Boolean bad_block; /* problem in current block? */ Guard signature; /* value to be read */ Pointer guard; /* address to read from */ /* initialize */ *blocks = 0; *bad_blocks = 0; *bad_checksums = 0; *bad_lguards = 0; *bad_rguards = 0; first_bad_block = MA_TRUE; /* check each block on list */ for (ad = list; ad; ad = ad->next) { (*blocks)++; bad_block = MA_FALSE; /* check for checksum error */ if (checksum(ad) != ad->checksum) { /* print preamble if necessary */ if (first_bad_block && (preamble != (char *)NULL)) { (void)printf(preamble); first_bad_block = MA_FALSE; } /* print error message to stdout */ ad_print(ad, block_type); (void)printf(":\n\t"); (void)printf("current checksum %lu != stored checksum %lu\n", checksum(ad), ad->checksum); /* do bookkeeping */ (*bad_checksums)++; bad_block = MA_TRUE; } /* check for bad guard1 */ guard = guard1(ad); guard_read(guard, &signature); if (signature != GUARD1) { /* print preamble if necessary */ if (first_bad_block && (preamble != (char *)NULL)) { (void)printf(preamble); first_bad_block = MA_FALSE; } /* print error message to stdout */ ad_print(ad, block_type); (void)printf(":\n\t"); (void)printf( "current left signature %u != proper left signature %u\n", signature, GUARD1); /* do bookkeeping */ (*bad_lguards)++; bad_block = MA_TRUE; } /* check for bad guard2 */ guard = guard2(ad); guard_read(guard, &signature); if (signature != GUARD2) { /* print preamble if necessary */ if (first_bad_block && (preamble != (char *)NULL)) { (void)printf(preamble); first_bad_block = MA_FALSE; } /* print error message to stdout */ ad_print(ad, block_type); (void)printf(":\n\t"); (void)printf( "current right signature %u != proper right signature %u\n", signature, GUARD2); /* do bookkeeping */ (*bad_rguards)++; bad_block = MA_TRUE; } /* if any errors, bump bad block count */ if (bad_block) (*bad_blocks)++; } } /* ------------------------------------------------------------------------- */ /* * Return the maximum number of datatype elements that can currently be * accomodated in a heap fragment (a block on the heap free list) entirely * within the heap region, or 0 if this number is less than min_nelem. */ /* ------------------------------------------------------------------------- */ private Integer ma_max_heap_frag_nelem(datatype, min_nelem) Integer datatype; /* of elements */ Integer min_nelem; /* for fragment to be considered */ { ulongi min_bytes; /* for fragment to be considered */ AD *ad; /* traversal pointer */ ulongi nbytes; /* in current fragment */ Integer nelem; /* in current fragment */ Integer max_nelem; /* result */ /* set the threshold */ min_bytes = (min_nelem * ma_sizeof[datatype]) + BLOCK_OVERHEAD_FIXED; /* search the heap free list */ max_nelem = 0; for (ad = ma_hfree; ad; ad = ad->next) { /* * There are 3 cases to consider: * * (a) fragment is outside heap region * (b) fragment straddles partition between heap and stack regions * (c) fragment is inside heap region */ if ((Pointer)ad >= ma_partition) { /* case (a): reject */ continue; } else if (((Pointer)ad + ad->nbytes) >= ma_partition) { /* case (b): truncate fragment at partition */ nbytes = (ulongi)(ma_partition - (Pointer)ad); } else { /* case (c): accept */ nbytes = ad->nbytes; } if (nbytes >= min_bytes) { nelem = ma_nelem((Pointer)ad, nbytes, datatype); max_nelem = max(max_nelem, nelem); } } /* return the result */ return max_nelem; } /* ------------------------------------------------------------------------- */ /* * Return the maximum number of datatype elements that can currently * be accomodated in length bytes starting at address. */ /* ------------------------------------------------------------------------- */ private Integer ma_nelem(address, length, datatype) Pointer address; /* location of hypothetical block */ ulongi length; /* length of hypothetical block */ Integer datatype; /* of elements in hypothetical block */ { AR ar; /* allocation request */ Pointer client_space; /* location of client_space */ ulongi nbytes; /* length of block for ar */ if (length <= BLOCK_OVERHEAD_FIXED) /* no point in computing anything */ return (Integer)0; /* compute initial request */ ar.datatype = datatype; ar.nelem = (length - BLOCK_OVERHEAD_FIXED) / ma_sizeof[datatype]; /* make requests until one succeeds or we give up */ while (ar.nelem > 0) { /* perform trial allocation to determine size */ balloc_after(&ar, address, &client_space, &nbytes); if (nbytes > length) /* not enough space for ar.nelem elements */ ar.nelem--; else /* enough space for ar.nelem elements */ break; } /* return the result */ return ar.nelem; } /* ------------------------------------------------------------------------- */ /* * Perform operations necessary to allow certain functions to be invoked * before MA_init is called. */ /* ------------------------------------------------------------------------- */ private void ma_preinitialize(caller) char *caller; /* name of calling routine */ { if (ma_preinitialized) return; /* call a FORTRAN routine to set bases and sizes of FORTRAN datatypes */ if (ma_set_sizes_() == 0) { (void)sprintf(ma_ebuf, "unable to set sizes of FORTRAN datatypes"); ma_error(EL_Fatal, ET_Internal, caller, ma_ebuf); return; } /* success */ ma_preinitialized = MA_TRUE; } /* ------------------------------------------------------------------------- */ /* * If memhandle is valid according to location, return the corresponding AD * in adout and return MA_TRUE, else print an error message and return * MA_FALSE. */ /* ------------------------------------------------------------------------- */ private Boolean mh2ad(memhandle, adout, location, caller) Integer memhandle; /* the handle to verify and convert */ AD **adout; /* RETURN: AD corresponding to memhandle */ BlockLocation location; /* where AD must reside */ char *caller; /* name of calling routine */ { AD *ad; Boolean check_checksum = MA_TRUE; Boolean check_guards = MA_TRUE; Boolean check_heap = MA_FALSE; Boolean check_stack = MA_FALSE; Boolean check_stacktop = MA_FALSE; Boolean check_heapandstack = MA_FALSE; switch (location) { case BL_HeapOrStack: check_heapandstack = MA_TRUE; break; case BL_Heap: check_heap = MA_TRUE; break; case BL_Stack: check_stack = MA_TRUE; break; case BL_StackTop: check_stacktop = MA_TRUE; break; default: (void)sprintf(ma_ebuf, "invalid location: %d", (int)location); ma_error(EL_Nonfatal, ET_Internal, "mh2ad", ma_ebuf); return MA_FALSE; } /* convert memhandle to AD */ if (!ma_table_verify(memhandle, caller)) return MA_FALSE; else ad = (AD *)ma_table_lookup(memhandle); /* attempt to avoid crashes due to corrupt addresses */ if (!reasonable_address((Pointer)ad)) { (void)sprintf(ma_ebuf, "invalid block address (0x%lx) for memhandle %ld", (long)ad, (long)memhandle); ma_error(EL_Nonfatal, ET_External, caller, ma_ebuf); return MA_FALSE; } if (check_checksum) { if (checksum(ad) != ad->checksum) { (void)sprintf(ma_ebuf, "invalid checksum for memhandle %ld (name: '%s')", (long)memhandle, ad->name); ma_error(EL_Nonfatal, ET_External, caller, ma_ebuf); return MA_FALSE; } } if (check_guards) { if (!guard_check(ad)) { (void)sprintf(ma_ebuf, "invalid guard(s) for memhandle %ld (name: '%s')", (long)memhandle, ad->name); ma_error(EL_Nonfatal, ET_External, caller, ma_ebuf); return MA_FALSE; } } if (check_heap) { if (!list_member(ad, ma_hused)) { (void)sprintf(ma_ebuf, "memhandle %ld (name: '%s') not in heap", (long)memhandle, ad->name); ma_error(EL_Nonfatal, ET_External, caller, ma_ebuf); return MA_FALSE; } } else if (check_stack) { if (!list_member(ad, ma_sused)) { (void)sprintf(ma_ebuf, "memhandle %ld (name: '%s') not in stack", (long)memhandle, ad->name); ma_error(EL_Nonfatal, ET_External, caller, ma_ebuf); return MA_FALSE; } } else if (check_stacktop) { /* is it in the stack? */ if (!list_member(ad, ma_sused)) { (void)sprintf(ma_ebuf, "memhandle %ld (name: '%s') not in stack", (long)memhandle, ad->name); ma_error(EL_Nonfatal, ET_External, caller, ma_ebuf); return MA_FALSE; } /* is it on top of the stack? */ if ((Pointer)ad != ma_sp) { (void)sprintf(ma_ebuf, "memhandle %ld (name: '%s') not top of stack", (long)memhandle, ad->name); ma_error(EL_Nonfatal, ET_External, caller, ma_ebuf); return MA_FALSE; } } else if (check_heapandstack) { if ((!list_member(ad, ma_hused)) && (!list_member(ad, ma_sused))) { (void)sprintf(ma_ebuf, "memhandle %ld (name: '%s') not in heap or stack", (long)memhandle, ad->name); ma_error(EL_Nonfatal, ET_External, caller, ma_ebuf); return MA_FALSE; } } /* ad is valid */ *adout = ad; return MA_TRUE; } /* ------------------------------------------------------------------------- */ /* * Free the memhandle corresponding to the given AD. */ /* ------------------------------------------------------------------------- */ private void mh_free(ad) AD *ad; /* the AD whose memhandle to free */ { Integer memhandle; /* memhandle for AD */ /* convert AD to memhandle */ if ((memhandle = ma_table_lookup_assoc((TableData)ad)) == TABLE_HANDLE_NONE) { (void)sprintf(ma_ebuf, "cannot find memhandle for block address 0x%lx", (long)ad); ma_error(EL_Nonfatal, ET_Internal, "mh_free", ma_ebuf); } else /* free memhandle */ ma_table_deallocate(memhandle); } /* ------------------------------------------------------------------------- */ /* * Return the first multiple of unit which is >= value. */ /* ------------------------------------------------------------------------- */ private long mai_round(value, unit) long value; /* to round */ ulongi unit; /* to round to */ { /* voodoo ... */ unit--; value += unit; value &= ~(long)unit; return value; } /* ------------------------------------------------------------------------- */ /* * Copy at most maxchars-1 non-NUL chars from from to to; NUL-terminate to. */ /* ------------------------------------------------------------------------- */ private void str_ncopy(to, from, maxchars) char *to; /* space to copy to */ char *from; /* space to copy from */ int maxchars; /* max # of chars (including NUL) copied */ { if (from == (char *)NULL) { to[0] = '\0'; return; } /* copy up to maxchars chars */ (void)strncpy(to, from, maxchars); /* ensure to is NUL-terminated */ to[maxchars-1] = '\0'; } /** ** public routines for internal use only **/ /* ------------------------------------------------------------------------- */ /* * Set the base address and size of the given datatype. */ /* ------------------------------------------------------------------------- */ public Boolean MAi_inform_base(datatype, address1, address2) Integer datatype; /* to set size of */ Pointer address1; /* of datatype element base */ Pointer address2; /* of an adjacent datatype element */ { /* verify uninitialization */ if (ma_initialized) { (void)sprintf(ma_ebuf, "MA already initialized"); ma_error(EL_Nonfatal, ET_Internal, "MAi_inform_base", ma_ebuf); return MA_FALSE; } /* verify datatype */ if (!mt_valid(datatype)) { (void)sprintf(ma_ebuf, "invalid datatype: %ld", (long)datatype); ma_error(EL_Nonfatal, ET_Internal, "MAi_inform_base", ma_ebuf); return MA_FALSE; } /* convert datatype to internal (index-suitable) value */ datatype = mt_import(datatype); /* set the base address of datatype */ ma_base[datatype] = address1; /* set the size of datatype */ ma_sizeof[datatype] = (int)(address2 - address1); /* success */ return MA_TRUE; } #if NOFORT Integer ma_set_sizes_() { MAi_inform_base(MT_F_BYTE, &ma_cb_char[0], &ma_cb_char[1]); MAi_inform_base(MT_F_INT, &ma_cb_int[0], &ma_cb_int[1]); MAi_inform_base(MT_F_LOG, &ma_cb_int[0], &ma_cb_int[1]); MAi_inform_base(MT_F_REAL, &ma_cb_float[0], &ma_cb_float[1]); MAi_inform_base(MT_F_DBL, &ma_cb_dbl[0], &ma_cb_dbl[1]); MAi_inform_base(MT_F_SCPL, &ma_cb_scpl[0], &ma_cb_scpl[1]); MAi_inform_base(MT_F_DCPL, &ma_cb_dcpl[0], &ma_cb_dcpl[1]); return 1; } #endif /* ------------------------------------------------------------------------- */ /* * Print debugging information about all blocks currently in use * on the heap or the stack. */ /* ------------------------------------------------------------------------- */ public void MAi_summarize_allocated_blocks(index_base) int index_base; /* 0 (C) or 1 (FORTRAN) */ { int heap_blocks; /* # of blocks on heap used list */ int stack_blocks; /* # of blocks on stack used list */ #ifdef STATS ma_stats.calls[(int)FID_MA_summarize_allocated_blocks]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return; #endif /* VERIFY */ /* verify index_base */ if ((index_base != 0) && (index_base != 1)) { (void)sprintf(ma_ebuf, "invalid index_base: %d", index_base); ma_error(EL_Nonfatal, ET_Internal, "MAi_summarize_allocated_blocks", ma_ebuf); return; } (void)printf("MA_summarize_allocated_blocks: starting scan ...\n"); /* print blocks on the heap used list */ heap_blocks = list_print(ma_hused, "heap", index_base); /* print blocks on the stack used list */ stack_blocks = list_print(ma_sused, "stack", index_base); (void)printf("MA_summarize_allocated_blocks: scan completed: "); (void)printf("%d heap block%s, %d stack block%s\n", heap_blocks, plural(heap_blocks), stack_blocks, plural(stack_blocks)); } /** ** public routines **/ /* ------------------------------------------------------------------------- */ /* * Convenience function that combines MA_allocate_heap and MA_get_index. */ /* ------------------------------------------------------------------------- */ public Boolean MA_alloc_get( Integer datatype, /* of elements in this block */ Integer nelem, /* # of elements in this block */ const char *name, /* assigned to this block by client */ Integer *memhandle, /* RETURN: handle for this block */ MA_AccessIndex *index /* RETURN: index for this block */ ) { #ifdef STATS ma_stats.calls[(int)FID_MA_alloc_get]++; #endif /* STATS */ if (MA_allocate_heap(datatype, nelem, name, memhandle)) /* MA_allocate_heap succeeded; try MA_get_index */ return MA_get_index(*memhandle, index); else /* MA_allocate_heap failed */ return MA_FALSE; } /* ------------------------------------------------------------------------- */ /* * Allocate a heap block big enough to hold nelem elements * of the given datatype. * * Return MA_TRUE upon success, or MA_FALSE upon failure. */ /* ------------------------------------------------------------------------- */ public Boolean MA_allocate_heap( Integer datatype, /* of elements in this block */ Integer nelem, /* # of elements in this block */ const char *name, /* assigned to this block by client */ Integer *memhandle /* RETURN: handle for this block */ ) { AR ar; /* allocation request */ AD *ad; /* AD for newly allocated block */ Pointer client_space; /* location of client_space */ ulongi nbytes; /* length of block for ar */ Pointer new_hp; /* new ma_hp */ #ifdef STATS ma_stats.calls[(int)FID_MA_allocate_heap]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return MA_FALSE; #endif /* VERIFY */ if (ma_trace) (void)printf("MA: allocating '%s' (%d)\n", name, (int)nelem); /* verify initialization */ if (!ma_initialized) { (void)sprintf(ma_ebuf, "block '%s', MA not yet initialized", name); ma_error(EL_Nonfatal, ET_External, "MA_allocate_heap", ma_ebuf); return MA_FALSE; } /* verify datatype */ if (!mt_valid(datatype)) { (void)sprintf(ma_ebuf, "block '%s', invalid datatype: %ld", name, (long)datatype); ma_error(EL_Nonfatal, ET_External, "MA_allocate_heap", ma_ebuf); return MA_FALSE; } /* verify nelem */ if (nelem < 0) { (void)sprintf(ma_ebuf, "block '%s', invalid nelem: %ld", name, (long)nelem); ma_error(EL_Nonfatal, ET_External, "MA_allocate_heap", ma_ebuf); return MA_FALSE; } /* convert datatype to internal (index-suitable) value */ datatype = mt_import(datatype); /* * attempt to allocate space */ ar.datatype = datatype; ar.nelem = nelem; /* search the free list */ ad = list_delete_one(&ma_hfree, ad_big_enough, (Pointer)&ar); /* if search of free list failed, try expanding heap region */ if (ad == (AD *)NULL) { /* perform trial allocation to determine size */ balloc_after(&ar, ma_hp, &client_space, &nbytes); new_hp = ma_hp + nbytes; if (new_hp > ma_sp) { (void)sprintf(ma_ebuf, "block '%s', not enough space to allocate %lu bytes", name, nbytes); ma_error(EL_Nonfatal, ET_External, "MA_allocate_heap", ma_ebuf); return MA_FALSE; } else { /* heap region expanded successfully */ ad = (AD *)ma_hp; /* set fields appropriately */ ad->client_space = client_space; ad->nbytes = nbytes; } } /* * space has been allocated */ /* initialize the AD */ ad->datatype = datatype; ad->nelem = nelem; str_ncopy(ad->name, (char*)name, MA_NAMESIZE); /* ad->client_space is already set */ /* ad->nbytes is already set */ list_insert(ad, &ma_hused); ad->checksum = checksum(ad); /* set the guards */ guard_set(ad); #ifdef DEBUG debug_ad_print(ad); #endif /* DEBUG */ /* update ma_hp if necessary */ new_hp = (Pointer)ad + ad->nbytes; if (new_hp > ma_hp) { ma_hp = new_hp; } #ifdef STATS ma_stats.hblocks++; ma_stats.hblocks_max = max(ma_stats.hblocks, ma_stats.hblocks_max); ma_stats.hbytes += ad->nbytes; ma_stats.hbytes_max = max(ma_stats.hbytes, ma_stats.hbytes_max); #endif /* STATS */ /* convert AD to memhandle */ if ((*memhandle = ma_table_allocate((TableData)ad)) == TABLE_HANDLE_NONE) /* failure */ return MA_FALSE; else /* success */ return MA_TRUE; } /* ------------------------------------------------------------------------- */ /* * Deallocate the given stack block and all stack blocks allocated * after it. * * Return MA_TRUE upon success, or MA_FALSE upon failure. */ /* ------------------------------------------------------------------------- */ public Boolean MA_chop_stack(Integer memhandle)/*the block to deallocate up to*/ { AD *ad; /* AD for memhandle */ #ifdef STATS ma_stats.calls[(int)FID_MA_chop_stack]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return MA_FALSE; #endif /* VERIFY */ /* verify memhandle and convert to AD */ if (!mh2ad(memhandle, &ad, BL_Stack, "MA_chop_stack")) return MA_FALSE; /* delete block and all blocks above it from used list */ #ifdef STATS ma_stats.sblocks -= list_delete_many(&ma_sused, ad_le, (Pointer)ad, mh_free); #else (void)list_delete_many(&ma_sused, ad_le, (Pointer)ad, mh_free); #endif /* STATS */ /* pop block and all blocks above it from stack */ #ifdef STATS ma_stats.sbytes -= (((Pointer)ad + ad->nbytes) - ma_sp); #endif /* STATS */ ma_sp = (Pointer)ad + ad->nbytes; /* success */ return MA_TRUE; } /* ------------------------------------------------------------------------- */ /* * Deallocate the given heap block. * * Return MA_TRUE upon success, or MA_FALSE upon failure. */ /* ------------------------------------------------------------------------- */ public Boolean MA_free_heap(Integer memhandle) /* the block to deallocate */ { AD *ad; /* AD for memhandle */ #ifdef STATS ma_stats.calls[(int)FID_MA_free_heap]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return MA_FALSE; #endif /* VERIFY */ /* verify memhandle and convert to AD */ if (!mh2ad(memhandle, &ad, BL_Heap, "MA_free_heap")) return MA_FALSE; if (ma_trace) (void)printf("MA: freeing '%s'\n", ad->name); /* delete block from used list */ if (list_delete(ad, &ma_hused) != ad) { (void)sprintf(ma_ebuf, "memhandle %ld (name: '%s') not on heap used list", (long)memhandle, ad->name); ma_error(EL_Nonfatal, ET_Internal, "MA_free_heap", ma_ebuf); return MA_FALSE; } #ifdef STATS ma_stats.hblocks--; ma_stats.hbytes -= ad->nbytes; #endif /* STATS */ /* reclaim the deallocated block */ block_free_heap(ad); /* free memhandle */ ma_table_deallocate(memhandle); /* success */ return MA_TRUE; } /* ------------------------------------------------------------------------- */ /* * Deallocate nelem elements from the given heap block. * * The nelem elements (of the datatype specified when the heap block * was allocated) to be deallocated are assumed to be at the rightmost * (i.e., higher addresses) edge of the heap block. * * Return MA_TRUE upon success, or MA_FALSE upon failure. */ /* ------------------------------------------------------------------------- */ public Boolean MA_free_heap_piece( Integer memhandle, /* the block to deallocate a piece of */ Integer nelem /* # of elements to deallocate */) { AD *ad; /* AD for memhandle */ AD *ad_reclaim; /* AD for data returned */ AR ar; /* AR for data kept */ Pointer client_space; /* location of client_space */ ulongi nbytes; /* length of block for data kept */ #ifdef STATS ma_stats.calls[(int)FID_MA_free_heap_piece]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return MA_FALSE; #endif /* VERIFY */ /* verify memhandle and convert to AD */ if (!mh2ad(memhandle, &ad, BL_Heap, "MA_free_heap_piece")) return MA_FALSE; /* verify nelem */ if (nelem < 0) { (void)sprintf(ma_ebuf, "block '%s', invalid nelem: %ld", ad->name, (long)nelem); ma_error(EL_Nonfatal, ET_External, "MA_free_heap_piece", ma_ebuf); return MA_FALSE; } else if (nelem >= ad->nelem) { /* deallocate the whole block */ return MA_free_heap(memhandle); } if (ma_trace) (void)printf("MA: freeing %ld elements of '%s'\n", (long)nelem, ad->name); /* set AR for data to keep */ ar.datatype = ad->datatype; ar.nelem = ad->nelem - nelem; /* perform trial allocation to determine size */ balloc_after(&ar, (Pointer)ad, &client_space, &nbytes); if (nbytes < ad->nbytes) { /* ad has extra space; split block if possible */ ad_reclaim = block_split(ad, nbytes, (Boolean)MA_FALSE); if (ad_reclaim) { #ifdef STATS ma_stats.hbytes -= ad_reclaim->nbytes; #endif /* STATS */ /* reclaim the deallocated (new) block */ block_free_heap(ad_reclaim); } } /* update surviving block */ ad->nelem = ar.nelem; ad->checksum = checksum(ad); /* set the guards */ guard_set(ad); #ifdef DEBUG debug_ad_print(ad); #endif /* DEBUG */ /* success */ return MA_TRUE; } /* ------------------------------------------------------------------------- */ /* * Get the base index for the given block. * * Return MA_TRUE upon success, or MA_FALSE upon failure. */ /* ------------------------------------------------------------------------- */ public Boolean MA_get_index( Integer memhandle, /* block to get index for */ MA_AccessIndex *index /* RETURN: base index */) { AD *ad; /* AD for memhandle */ #ifdef STATS ma_stats.calls[(int)FID_MA_get_index]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return MA_FALSE; #endif /* VERIFY */ /* verify memhandle and convert to AD */ if (mh2ad(memhandle, &ad, BL_HeapOrStack, "MA_get_index")) { /* compute index */ *index = client_space_index(ad); /* success */ return MA_TRUE; } else { /* failure */ return MA_FALSE; } } /* ------------------------------------------------------------------------- */ /* * Return the base address of the given datatype. */ /* ------------------------------------------------------------------------- */ public Pointer MA_get_mbase(Integer datatype) /* to get base address of */ { #ifdef STATS ma_stats.calls[(int)FID_MA_get_mbase]++; #endif /* STATS */ /* preinitialize if necessary */ ma_preinitialize("MA_get_mbase"); /* verify datatype */ if (!mt_valid(datatype)) { (void)sprintf(ma_ebuf, "invalid datatype: %ld", (long)datatype); ma_error(EL_Fatal, ET_External, "MA_get_mbase", ma_ebuf); return NULL; } /* convert datatype to internal (index-suitable) value */ datatype = mt_import(datatype); return ma_base[datatype]; } /* ------------------------------------------------------------------------- */ /* * Get the handle for the next block in the scan of currently allocated * blocks. * * Return MA_TRUE upon success, or MA_FALSE upon failure. */ /* ------------------------------------------------------------------------- */ public Boolean MA_get_next_memhandle( Integer *ithandle, /* handle for this iterator */ Integer *memhandle /* RETURN: handle for the next block */) { #ifdef STATS ma_stats.calls[(int)FID_MA_get_next_memhandle]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return MA_FALSE; #endif /* VERIFY */ /* not yet implemented */ (void)sprintf(ma_ebuf, "not yet implemented"); ma_error(EL_Nonfatal, ET_External, "MA_get_next_memhandle", ma_ebuf); return MA_FALSE; } /* ------------------------------------------------------------------------- */ /* * Get the requested alignment. * * Return MA_TRUE upon success, or MA_FALSE upon failure. */ /* ------------------------------------------------------------------------- */ public Boolean MA_get_numalign(Integer *value) /* RETURN: requested alignment */ { #ifdef STATS ma_stats.calls[(int)FID_MA_get_numalign]++; #endif /* STATS */ *value = ma_numalign; return MA_TRUE; } /* ------------------------------------------------------------------------- */ /* * Get the base pointer for the given block. * * Return MA_TRUE upon success, or MA_FALSE upon failure. */ /* ------------------------------------------------------------------------- */ /* JN converted to void* to avoid calling hassles */ public Boolean MA_get_pointer( Integer memhandle, /* block to get pointer for */ void *pointer /* RETURN: base pointer */) { AD *ad; /* AD for memhandle */ #ifdef STATS ma_stats.calls[(int)FID_MA_get_pointer]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return MA_FALSE; #endif /* VERIFY */ /* verify memhandle and convert to AD */ if (mh2ad(memhandle, &ad, BL_HeapOrStack, "MA_get_pointer")) { /* compute pointer */ #if 0 *pointer = ad->client_space; #endif *(char**)pointer = ad->client_space; /* success */ return MA_TRUE; } else { /* failure */ return MA_FALSE; } } /* ------------------------------------------------------------------------- */ /* * Initialize the memory allocator. * * Return MA_TRUE upon success, or MA_FALSE upon failure. */ /* ------------------------------------------------------------------------- */ public Boolean MA_init( Integer datatype, /* for computing storage requirement */ Integer nominal_stack, /* # of datatype elements desired for stack */ Integer nominal_heap /* # of datatype elements desired for heap */) { ulongi heap_bytes; /* # of bytes for heap */ ulongi stack_bytes; /* # of bytes for stack */ ulongi total_bytes; /* total # of bytes */ #ifdef STATS ma_stats.calls[(int)FID_MA_init]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return MA_FALSE; #endif /* VERIFY */ /* preinitialize if necessary */ ma_preinitialize("MA_init"); /* verify uninitialization */ if (ma_initialized) { (void)sprintf(ma_ebuf, "MA already initialized"); ma_error(EL_Nonfatal, ET_External, "MA_init", ma_ebuf); return MA_FALSE; } /* verify datatype */ if (!mt_valid(datatype)) { (void)sprintf(ma_ebuf, "invalid datatype: %ld", (long)datatype); ma_error(EL_Nonfatal, ET_External, "MA_init", ma_ebuf); return MA_FALSE; } /* convert datatype to internal (index-suitable) value */ datatype = mt_import(datatype); /* compute # of bytes in heap */ if (nominal_heap < 0) { heap_bytes = DEFAULT_TOTAL_HEAP; } else { heap_bytes = (nominal_heap * ma_sizeof[datatype]) + (DEFAULT_REQUESTS_HEAP * max_block_overhead(datatype)); } heap_bytes = (unsigned long)mai_round((long)heap_bytes, (ulongi)ALIGNMENT); /* compute # of bytes in stack */ if (nominal_stack < 0) { stack_bytes = DEFAULT_TOTAL_STACK; } else { stack_bytes = (nominal_stack * ma_sizeof[datatype]) + (DEFAULT_REQUESTS_STACK * max_block_overhead(datatype)); } stack_bytes = (unsigned long)mai_round((long)stack_bytes, (ulongi)ALIGNMENT); /* segment consists of heap and stack */ total_bytes = heap_bytes + stack_bytes; #ifdef NOUSE_MMAP /* disable memory mapped malloc */ mallopt(M_MMAP_MAX, 0); mallopt(M_TRIM_THRESHOLD, -1); #endif /* allocate the segment of memory */ #ifdef ENABLE_ARMCI_MEM_OPTION if(getenv("MA_USE_ARMCI_MEM")) { ma_segment = (Pointer)ARMCI_Malloc_local(total_bytes); } else #endif ma_segment = (Pointer)bytealloc(total_bytes); if (ma_segment == (Pointer)NULL) { (void)sprintf(ma_ebuf, "could not allocate %lu bytes", total_bytes); ma_error(EL_Nonfatal, ET_External, "MA_init", ma_ebuf); return MA_FALSE; } /* * initialize management stuff */ /* partition is at (first address past) end of heap */ ma_partition = ma_segment + heap_bytes; /* compute (first address past) end of segment */ ma_eos = ma_segment + total_bytes; /* ma_hp initially points at start of segment */ ma_hp = ma_segment; /* ma_sp initially points at end of segment */ ma_sp = ma_eos; /* lists are all initially empty */ ma_hfree = (AD *)NULL; ma_hused = (AD *)NULL; ma_sused = (AD *)NULL; /* we are now initialized */ ma_initialized = MA_TRUE; /* success */ return MA_TRUE; } /* ------------------------------------------------------------------------- */ /* * Return MA_TRUE if MA_init has been called successfully, * else return MA_FALSE. */ /* ------------------------------------------------------------------------- */ public Boolean MA_initialized() { #ifdef STATS ma_stats.calls[(int)FID_MA_initialized]++; #endif /* STATS */ return ma_initialized; } /* ------------------------------------------------------------------------- */ /* * Initialize a scan of currently allocated blocks. * * Return MA_TRUE upon success, or MA_FALSE upon failure. */ /* ------------------------------------------------------------------------- */ public Boolean MA_init_memhandle_iterator( Integer *ithandle) { #ifdef STATS ma_stats.calls[(int)FID_MA_init_memhandle_iterator]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return MA_FALSE; #endif /* VERIFY */ /* not yet implemented */ (void)sprintf(ma_ebuf, "not yet implemented"); ma_error(EL_Nonfatal, ET_External, "MA_init_memhandle_iterator", ma_ebuf); return MA_FALSE; } /* ------------------------------------------------------------------------- */ /* * Return the maximum number of datatype elements that can currently * be allocated in the space between the heap and the stack, in a single * allocation request, ignoring the partition defined at initialization. * * Note that this might not be the largest piece of memory available; * the heap may contain deallocated blocks that are larger. */ /* ------------------------------------------------------------------------- */ public Integer MA_inquire_avail(Integer datatype) { long gap_length; /* # of bytes between heap and stack */ Integer nelem_gap; /* max elements containable in gap */ #ifdef STATS ma_stats.calls[(int)FID_MA_inquire_avail]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return DONTCARE; #endif /* VERIFY */ /* verify initialization */ if (!ma_initialized) { (void)sprintf(ma_ebuf, "MA not yet initialized"); ma_error(EL_Nonfatal, ET_External, "MA_inquire_avail", ma_ebuf); return (Integer)0; } /* verify datatype */ if (!mt_valid(datatype)) { (void)sprintf(ma_ebuf, "invalid datatype: %ld", (long)datatype); ma_error(EL_Fatal, ET_External, "MA_inquire_avail", ma_ebuf); return DONTCARE; } /* convert datatype to internal (index-suitable) value */ datatype = mt_import(datatype); /* * compute the # of elements for which space is available */ /* try space between heap and stack */ gap_length = (long)(ma_sp - ma_hp); if (gap_length > 0) nelem_gap = ma_nelem(ma_hp, (ulongi)gap_length, datatype); else nelem_gap = 0; /* success */ return nelem_gap; } /* ------------------------------------------------------------------------- */ /* * Return the maximum number of datatype elements that can currently * be allocated in the heap, in a single allocation request, * honoring the partition defined at initialization. * * This routine does not check the stack. Therefore, if the stack * has overgrown the partition, the answer returned by this routine * might be incorrect, i.e., there might be less memory available * than this routine indicates. */ /* ------------------------------------------------------------------------- */ public Integer MA_inquire_heap(Integer datatype) { long gap_length; /* # of bytes between heap and partition */ Integer nelem_gap; /* max elements containable in gap */ Integer nelem_frag; /* max elements containable in any frag */ #ifdef STATS ma_stats.calls[(int)FID_MA_inquire_heap]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return DONTCARE; #endif /* VERIFY */ /* verify initialization */ if (!ma_initialized) { (void)sprintf(ma_ebuf, "MA not yet initialized"); ma_error(EL_Nonfatal, ET_External, "MA_inquire_heap", ma_ebuf); return (Integer)0; } /* verify datatype */ if (!mt_valid(datatype)) { (void)sprintf(ma_ebuf, "invalid datatype: %ld", (long)datatype); ma_error(EL_Fatal, ET_External, "MA_inquire_heap", ma_ebuf); return DONTCARE; } /* convert datatype to internal (index-suitable) value */ datatype = mt_import(datatype); /* * compute the # of elements for which space is available */ /* try space between heap and partition */ gap_length = (long)(ma_partition - ma_hp); if (gap_length > 0) nelem_gap = ma_nelem(ma_hp, (ulongi)gap_length, datatype); else nelem_gap = 0; /* try heap fragments */ nelem_frag = ma_max_heap_frag_nelem(datatype, nelem_gap); /* success */ return max(nelem_gap, nelem_frag); } /* ------------------------------------------------------------------------- */ /* * Return the maximum number of datatype elements that can currently * be allocated in the heap, in a single allocation request, * honoring the partition defined at initialization. * * This routine does check the stack. Therefore, whether or not the stack * has overgrown the partition, the answer returned by this routine * will be correct, i.e., there will be at least the memory available * that this routine indicates. * * Note that this might not be the largest piece of memory available; * the space between the heap and the stack may be larger. */ /* ------------------------------------------------------------------------- */ public Integer MA_inquire_heap_check_stack(Integer datatype) { long gap_length; /* # of bytes between heap and partition */ Integer nelem_gap; /* max elements containable in gap */ Integer nelem_frag; /* max elements containable in any frag */ #ifdef STATS ma_stats.calls[(int)FID_MA_inquire_heap_check_stack]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return DONTCARE; #endif /* VERIFY */ /* verify initialization */ if (!ma_initialized) { (void)sprintf(ma_ebuf, "MA not yet initialized"); ma_error(EL_Nonfatal, ET_External, "MA_inquire_heap_check_stack", ma_ebuf); return (Integer)0; } /* verify datatype */ if (!mt_valid(datatype)) { (void)sprintf(ma_ebuf, "invalid datatype: %ld", (long)datatype); ma_error(EL_Fatal, ET_External, "MA_inquire_heap_check_stack", ma_ebuf); return DONTCARE; } /* convert datatype to internal (index-suitable) value */ datatype = mt_import(datatype); /* * compute the # of elements for which space is available */ /* try space between heap and partition or heap and stack */ gap_length = min((long)(ma_partition - ma_hp), (long)(ma_sp - ma_hp)); if (gap_length > 0) nelem_gap = ma_nelem(ma_hp, (ulongi)gap_length, datatype); else nelem_gap = 0; /* try heap fragments */ nelem_frag = ma_max_heap_frag_nelem(datatype, nelem_gap); /* success */ return max(nelem_gap, nelem_frag); } /* ------------------------------------------------------------------------- */ /* * Return the maximum number of datatype elements that can currently * be allocated in the heap, in a single allocation request, * ignoring the partition defined at initialization. * * This routine does check the stack. Therefore, whether or not the stack * has overgrown the partition, the answer returned by this routine * will be correct, i.e., there will be at least the memory available * that this routine indicates. * * Note that this will be the largest piece of memory available. */ /* ------------------------------------------------------------------------- */ public Integer MA_inquire_heap_no_partition(Integer datatype) { long gap_length; /* # of bytes between heap and partition */ Integer nelem_gap; /* max elements containable in gap */ Integer nelem_frag; /* max elements containable in any frag */ #ifdef STATS ma_stats.calls[(int)FID_MA_inquire_heap_no_partition]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return DONTCARE; #endif /* VERIFY */ /* verify initialization */ if (!ma_initialized) { (void)sprintf(ma_ebuf, "MA not yet initialized"); ma_error(EL_Nonfatal, ET_External, "MA_inquire_heap_no_partition", ma_ebuf); return (Integer)0; } /* verify datatype */ if (!mt_valid(datatype)) { (void)sprintf(ma_ebuf, "invalid datatype: %ld", (long)datatype); ma_error(EL_Fatal, ET_External, "MA_inquire_heap_no_partition", ma_ebuf); return DONTCARE; } /* convert datatype to internal (index-suitable) value */ datatype = mt_import(datatype); /* * compute the # of elements for which space is available */ /* try space between heap and stack */ gap_length = (long)(ma_sp - ma_hp); if (gap_length > 0) nelem_gap = ma_nelem(ma_hp, (ulongi)gap_length, datatype); else nelem_gap = 0; /* try heap fragments */ nelem_frag = ma_max_heap_frag_nelem(datatype, nelem_gap); /* success */ return max(nelem_gap, nelem_frag); } /* ------------------------------------------------------------------------- */ /* * Return the maximum number of datatype elements that can currently * be allocated in the stack, in a single allocation request, * honoring the partition defined at initialization. * * This routine does not check the heap. Therefore, if the heap * has overgrown the partition, the answer returned by this routine * might be incorrect, i.e., there might be less memory available * than this routine indicates. */ /* ------------------------------------------------------------------------- */ public Integer MA_inquire_stack(Integer datatype) { long gap_length; /* # of bytes between partition and stack */ Integer nelem_gap; /* max elements containable in gap */ #ifdef STATS ma_stats.calls[(int)FID_MA_inquire_stack]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return DONTCARE; #endif /* VERIFY */ /* verify initialization */ if (!ma_initialized) { (void)sprintf(ma_ebuf, "MA not yet initialized"); ma_error(EL_Nonfatal, ET_External, "MA_inquire_stack", ma_ebuf); return (Integer)0; } /* verify datatype */ if (!mt_valid(datatype)) { (void)sprintf(ma_ebuf, "invalid datatype: %ld", (long)datatype); ma_error(EL_Fatal, ET_External, "MA_inquire_stack", ma_ebuf); return DONTCARE; } /* convert datatype to internal (index-suitable) value */ datatype = mt_import(datatype); /* * compute the # of elements for which space is available */ /* try space between partition and stack */ gap_length = (long)(ma_sp - ma_partition); if (gap_length > 0) nelem_gap = ma_nelem(ma_partition, (ulongi)gap_length, datatype); else nelem_gap = 0; /* success */ return nelem_gap; } /* ------------------------------------------------------------------------- */ /* * Return the maximum number of datatype elements that can currently * be allocated in the stack, in a single allocation request, * honoring the partition defined at initialization. * * This routine does check the heap. Therefore, whether or not the heap * has overgrown the partition, the answer returned by this routine * will be correct, i.e., there will be at least the memory available * that this routine indicates. * * Note that this might not be the largest piece of memory available; * the space between the heap and the stack may be larger. */ /* ------------------------------------------------------------------------- */ public Integer MA_inquire_stack_check_heap(Integer datatype) { long gap_length; /* # of bytes between partition and stack */ Integer nelem_gap; /* max elements containable in gap */ #ifdef STATS ma_stats.calls[(int)FID_MA_inquire_stack_check_heap]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return DONTCARE; #endif /* VERIFY */ /* verify initialization */ if (!ma_initialized) { (void)sprintf(ma_ebuf, "MA not yet initialized"); ma_error(EL_Nonfatal, ET_External, "MA_inquire_stack_check_heap", ma_ebuf); return (Integer)0; } /* verify datatype */ if (!mt_valid(datatype)) { (void)sprintf(ma_ebuf, "invalid datatype: %ld", (long)datatype); ma_error(EL_Fatal, ET_External, "MA_inquire_stack_check_heap", ma_ebuf); return DONTCARE; } /* convert datatype to internal (index-suitable) value */ datatype = mt_import(datatype); /* * compute the # of elements for which space is available */ /* try space between partition and stack or heap and stack */ gap_length = min((long)(ma_sp - ma_partition), (long)(ma_sp - ma_hp)); if (gap_length > 0) nelem_gap = ma_nelem(ma_partition, (ulongi)gap_length, datatype); else nelem_gap = 0; /* success */ return nelem_gap; } /* ------------------------------------------------------------------------- */ /* * Return the maximum number of datatype elements that can currently * be allocated in the stack, in a single allocation request, * ignoring the partition defined at initialization. * * This routine does check the heap. Therefore, whether or not the heap * has overgrown the partition, the answer returned by this routine * will be correct, i.e., there will be at least the memory available * that this routine indicates. * * Note that this might not be the largest piece of memory available; * the heap may contain deallocated blocks that are larger. * * This routine is equivalent to MA_inquire_avail. */ /* ------------------------------------------------------------------------- */ public Integer MA_inquire_stack_no_partition(Integer datatype) { long gap_length; /* # of bytes between heap and partition */ Integer nelem_gap; /* max elements containable in gap */ #ifdef STATS ma_stats.calls[(int)FID_MA_inquire_stack_no_partition]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return DONTCARE; #endif /* VERIFY */ /* verify initialization */ if (!ma_initialized) { (void)sprintf(ma_ebuf, "MA not yet initialized"); ma_error(EL_Nonfatal, ET_External, "MA_inquire_stack_no_partition", ma_ebuf); return (Integer)0; } /* verify datatype */ if (!mt_valid(datatype)) { (void)sprintf(ma_ebuf, "invalid datatype: %ld", (long)datatype); ma_error(EL_Fatal, ET_External, "MA_inquire_stack_no_partition", ma_ebuf); return DONTCARE; } /* convert datatype to internal (index-suitable) value */ datatype = mt_import(datatype); /* * compute the # of elements for which space is available */ /* try space between heap and stack */ gap_length = (long)(ma_sp - ma_hp); if (gap_length > 0) nelem_gap = ma_nelem(ma_hp, (ulongi)gap_length, datatype); else nelem_gap = 0; /* success */ return nelem_gap; } /* ------------------------------------------------------------------------- */ /* * Deallocate the given stack block, which must be the one most recently * allocated. * * Return MA_TRUE upon success, or MA_FALSE upon failure. */ /* ------------------------------------------------------------------------- */ public Boolean MA_pop_stack(Integer memhandle) /* the block to deallocate */ { AD *ad; /* AD for memhandle */ #ifdef STATS ma_stats.calls[(int)FID_MA_pop_stack]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return MA_FALSE; #endif /* VERIFY */ /* verify memhandle and convert to AD */ if (!mh2ad(memhandle, &ad, BL_StackTop, "MA_pop_stack")) return MA_FALSE; if (ma_trace) (void)printf("MA: popping '%s'\n", ad->name); /* delete block from used list */ if (list_delete(ad, &ma_sused) != ad) { (void)sprintf(ma_ebuf, "memhandle %ld (name: '%s') not on stack used list", (long)memhandle, ad->name); ma_error(EL_Nonfatal, ET_Internal, "MA_pop_stack", ma_ebuf); return MA_FALSE; } /* pop block from stack */ ma_sp += ad->nbytes; #ifdef STATS ma_stats.sblocks--; ma_stats.sbytes -= ad->nbytes; #endif /* STATS */ /* free memhandle */ ma_table_deallocate(memhandle); /* success */ return MA_TRUE; } /* ------------------------------------------------------------------------- */ /* * Print usage statistics. */ /* ------------------------------------------------------------------------- */ public void MA_print_stats(Boolean printroutines) { #ifdef STATS int i; /* loop index */ #ifdef STATS ma_stats.calls[(int)FID_MA_print_stats]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return; #endif /* VERIFY */ (void)printf("MA usage statistics:\n"); (void)printf("\n\tallocation statistics:\n"); (void)printf("\t\t\t\t\t heap\t stack\n"); (void)printf("\t\t\t\t\t ----\t -----\n"); (void)printf("\tcurrent number of blocks\t%10lu\t%10lu\n", ma_stats.hblocks, ma_stats.sblocks); (void)printf("\tmaximum number of blocks\t%10lu\t%10lu\n", ma_stats.hblocks_max, ma_stats.sblocks_max); (void)printf("\tcurrent total bytes\t\t%10lu\t%10lu\n", ma_stats.hbytes, ma_stats.sbytes); (void)printf("\tmaximum total bytes\t\t%10lu\t%10lu\n", ma_stats.hbytes_max, ma_stats.sbytes_max); (void)printf("\tmaximum total K-bytes\t\t%10lu\t%10lu\n", ((ma_stats.hbytes_max+999)/1000), ((ma_stats.sbytes_max+999)/1000)); (void)printf("\tmaximum total M-bytes\t\t%10lu\t%10lu\n", ((ma_stats.hbytes_max+999999)/1000000), ((ma_stats.sbytes_max+999999)/1000000)); if (printroutines) { (void)printf("\n\tcalls per routine:\n"); for (i = 0; i < NUMROUTINES; i++) (void)printf("\t\t%10lu %s\n", ma_stats.calls[i], ma_routines[i]); } #else (void)sprintf(ma_ebuf, "unavailable; recompile MA with -DSTATS"); ma_error(EL_Nonfatal, ET_External, "MA_print_stats", ma_ebuf); #endif /* STATS */ } /* ------------------------------------------------------------------------- */ /* * Convenience function that combines MA_push_stack and MA_get_index. */ /* ------------------------------------------------------------------------- */ public Boolean MA_push_get( Integer datatype, /* of elements in this block */ Integer nelem, /* # of elements in this block */ const char *name, /* assigned to this block by client */ Integer *memhandle, /* RETURN: handle for this block */ MA_AccessIndex *index /* RETURN: index for this block */) { #ifdef STATS ma_stats.calls[(int)FID_MA_push_get]++; #endif /* STATS */ if (MA_push_stack(datatype, nelem, name, memhandle)) /* MA_push_stack succeeded; try MA_get_index */ return MA_get_index(*memhandle, index); else /* MA_push_stack failed */ return MA_FALSE; } /* ------------------------------------------------------------------------- */ /* * Allocate a stack block big enough to hold nelem elements * of the given datatype. * * Return MA_TRUE upon success, or MA_FALSE upon failure. */ /* ------------------------------------------------------------------------- */ public Boolean MA_push_stack( Integer datatype, /* of elements in this block */ Integer nelem, /* # of elements in this block */ const char *name, /* assigned to this block by client */ Integer *memhandle /* RETURN: handle for this block */) { AR ar; /* allocation request */ AD *ad; /* AD for newly allocated block */ Pointer client_space; /* location of client_space */ ulongi nbytes; /* length of block for ar */ Pointer new_sp; /* new ma_sp */ #ifdef STATS ma_stats.calls[(int)FID_MA_push_stack]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return MA_FALSE; #endif /* VERIFY */ if (ma_trace) (void)printf("MA: pushing '%s' (%d)\n", name, (int)nelem); /* verify initialization */ if (!ma_initialized) { (void)sprintf(ma_ebuf, "block '%s', MA not yet initialized", name); ma_error(EL_Nonfatal, ET_External, "MA_push_stack", ma_ebuf); return MA_FALSE; } /* verify datatype */ if (!mt_valid(datatype)) { (void)sprintf(ma_ebuf, "block '%s', invalid datatype: %ld", name, (long)datatype); ma_error(EL_Nonfatal, ET_External, "MA_push_stack", ma_ebuf); return MA_FALSE; } /* verify nelem */ if (nelem < 0) { (void)sprintf(ma_ebuf, "block '%s', invalid nelem: %ld", name, (long)nelem); ma_error(EL_Nonfatal, ET_External, "MA_push_stack", ma_ebuf); return MA_FALSE; } /* convert datatype to internal (index-suitable) value */ datatype = mt_import(datatype); /* * attempt to allocate space */ ar.datatype = datatype; ar.nelem = nelem; balloc_before(&ar, ma_sp, &client_space, &nbytes); new_sp = ma_sp - nbytes; /* if (new_sp < ma_hp) */ if (((ulongi)(ma_sp - ma_hp)) < nbytes) { (void)sprintf(ma_ebuf, "block '%s', not enough space to allocate %lu bytes", name, nbytes); ma_error(EL_Nonfatal, ET_External, "MA_push_stack", ma_ebuf); return MA_FALSE; } else { ad = (AD *)new_sp; } /* * space has been allocated */ /* initialize the AD */ ad->datatype = datatype; ad->nelem = nelem; str_ncopy(ad->name, (char*)name, MA_NAMESIZE); ad->client_space = client_space; ad->nbytes = nbytes; list_insert(ad, &ma_sused); ad->checksum = checksum(ad); /* set the guards */ guard_set(ad); #ifdef DEBUG debug_ad_print(ad); #endif /* DEBUG */ /* update ma_sp */ ma_sp = new_sp; #ifdef STATS ma_stats.sblocks++; ma_stats.sblocks_max = max(ma_stats.sblocks, ma_stats.sblocks_max); ma_stats.sbytes += ad->nbytes; ma_stats.sbytes_max = max(ma_stats.sbytes, ma_stats.sbytes_max); #endif /* STATS */ /* convert AD to memhandle */ if ((*memhandle = ma_table_allocate((TableData)ad)) == TABLE_HANDLE_NONE) /* failure */ return MA_FALSE; else /* success */ return MA_TRUE; } /* ------------------------------------------------------------------------- */ /* * Set the ma_auto_verify flag to value and return its previous value. */ /* ------------------------------------------------------------------------- */ public Boolean MA_set_auto_verify(Boolean value /* to set flag to */) { Boolean old_value; /* of flag */ #ifdef STATS ma_stats.calls[(int)FID_MA_set_auto_verify]++; #endif /* STATS */ old_value = ma_auto_verify; ma_auto_verify = value; return old_value; } /* ------------------------------------------------------------------------- */ /* * Set the ma_error_print flag to value and return its previous value. */ /* ------------------------------------------------------------------------- */ public Boolean MA_set_error_print(Boolean value /* to set flag to */) { Boolean old_value; /* of flag */ #ifdef STATS ma_stats.calls[(int)FID_MA_set_error_print]++; #endif /* STATS */ old_value = ma_error_print; ma_error_print = value; return old_value; } /* ------------------------------------------------------------------------- */ /* * Set the ma_hard_fail flag to value and return its previous value. */ /* ------------------------------------------------------------------------- */ public Boolean MA_set_hard_fail( Boolean value /* to set flag to */) { Boolean old_value; /* of flag */ #ifdef STATS ma_stats.calls[(int)FID_MA_set_hard_fail]++; #endif /* STATS */ old_value = ma_hard_fail; ma_hard_fail = value; return old_value; } /* ------------------------------------------------------------------------- */ /* * Set the requested alignment. * * Return MA_TRUE upon success, or MA_FALSE upon failure. */ /* ------------------------------------------------------------------------- */ public Boolean MA_set_numalign(Integer value) { #ifdef STATS ma_stats.calls[(int)FID_MA_set_numalign]++; #endif /* STATS */ if ((value < 0) || (value > 30)) { (void)sprintf(ma_ebuf, "invalid alignment: %ld", (long)value); ma_error(EL_Nonfatal, ET_External, "MA_set_numalign", ma_ebuf); return MA_FALSE; } ma_numalign = value; return MA_TRUE; } /* ------------------------------------------------------------------------- */ /* * Return the number of elements of datatype2 required to contain * nelem1 elements of datatype1. */ /* ------------------------------------------------------------------------- */ public Integer MA_sizeof( Integer datatype1, /* of source elements */ Integer nelem1, /* # of source elements */ Integer datatype2 /* of target elements */) { ulongi source_bytes; /* nelem1 * ma_sizeof[datatype1] */ int ceiling; /* 1 iff ceiling alters result */ #ifdef STATS ma_stats.calls[(int)FID_MA_sizeof]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return DONTCARE; #endif /* VERIFY */ /* preinitialize if necessary */ ma_preinitialize("MA_sizeof"); /* verify datatype1 */ if (!mt_valid(datatype1)) { (void)sprintf(ma_ebuf, "invalid datatype: %ld", (long)datatype1); ma_error(EL_Fatal, ET_External, "MA_sizeof", ma_ebuf); return DONTCARE; } /* verify nelem1 */ if (nelem1 < 0) { (void)sprintf(ma_ebuf, "invalid nelem: %ld", (long)nelem1); ma_error(EL_Fatal, ET_External, "MA_sizeof", ma_ebuf); return DONTCARE; } /* verify datatype2 */ if (!mt_valid(datatype2)) { (void)sprintf(ma_ebuf, "invalid datatype: %ld", (long)datatype2); ma_error(EL_Fatal, ET_External, "MA_sizeof", ma_ebuf); return DONTCARE; } /* convert datatype1 to internal (index-suitable) value */ datatype1 = mt_import(datatype1); /* convert datatype2 to internal (index-suitable) value */ datatype2 = mt_import(datatype2); /* compute and return the result */ source_bytes = nelem1 * ma_sizeof[datatype1]; ceiling = (source_bytes % ma_sizeof[datatype2]) ? 1 : 0; return (Integer)((source_bytes / ma_sizeof[datatype2]) + ceiling); } /* ------------------------------------------------------------------------- */ /* * Return the number of elements of datatype required to contain * the worst case number of bytes of overhead for any block. */ /* ------------------------------------------------------------------------- */ public Integer MA_sizeof_overhead(Integer datatype) { int overhead_bytes; /* max bytes of overhead for any block */ int ceiling; /* 1 iff ceiling alters result */ int max_sizeof; /* max over i of ma_sizeof[i] */ int biggest_datatype=0; /* corresponds to max_sizeof */ int i; /* loop index */ #ifdef STATS ma_stats.calls[(int)FID_MA_sizeof_overhead]++; #endif /* STATS */ #ifdef VERIFY if (ma_auto_verify && !MA_verify_allocator_stuff()) return DONTCARE; #endif /* VERIFY */ /* preinitialize if necessary */ ma_preinitialize("MA_sizeof_overhead"); /* verify datatype */ if (!mt_valid(datatype)) { (void)sprintf(ma_ebuf, "invalid datatype: %ld", (long)datatype); ma_error(EL_Fatal, ET_External, "MA_sizeof_overhead", ma_ebuf); return DONTCARE; } /* convert datatype to internal (index-suitable) value */ datatype = mt_import(datatype); /* compute and return the result */ for (max_sizeof = 0, i = 0; i < MT_NUMTYPES; i++) if (ma_sizeof[i] > max_sizeof) { max_sizeof = ma_sizeof[i]; biggest_datatype = i; } overhead_bytes = max_block_overhead(biggest_datatype); ceiling = (overhead_bytes % ma_sizeof[datatype]) ? 1 : 0; return (Integer)((overhead_bytes / ma_sizeof[datatype]) + ceiling); } /* ------------------------------------------------------------------------- */ /* * Print debugging information about all blocks currently in use * on the heap or the stack. */ /* ------------------------------------------------------------------------- */ public void MA_summarize_allocated_blocks() { /* C indices are 0-based */ MAi_summarize_allocated_blocks(0); } /* ------------------------------------------------------------------------- */ /* * Control tracing of allocation and deallocation operations. */ /* ------------------------------------------------------------------------- */ public void MA_trace(Boolean value) { ma_trace = value; } /* ------------------------------------------------------------------------- */ /* * Sanity check the internal state of MA and print the results. * * Return MA_TRUE upon success, or MA_FALSE upon failure. */ /* ------------------------------------------------------------------------- */ public Boolean MA_verify_allocator_stuff() { #ifdef VERIFY char *preamble; /* printed before block error messages */ int heap_blocks; int bad_heap_blocks; int bad_heap_checksums; int bad_heap_lguards; int bad_heap_rguards; int stack_blocks; int bad_stack_blocks; int bad_stack_checksums; int bad_stack_lguards; int bad_stack_rguards; #ifdef STATS ma_stats.calls[(int)FID_MA_verify_allocator_stuff]++; #endif /* STATS */ preamble = "MA_verify_allocator_stuff: starting scan ...\n"; /* check each block on the heap used list */ list_verify(ma_hused, "heap", preamble, &heap_blocks, &bad_heap_blocks, &bad_heap_checksums, &bad_heap_lguards, &bad_heap_rguards); if (bad_heap_blocks > 0) /* only print preamble once */ preamble = (char *)NULL; /* check each block on the stack used list */ list_verify(ma_sused, "stack", preamble, &stack_blocks, &bad_stack_blocks, &bad_stack_checksums, &bad_stack_lguards, &bad_stack_rguards); if ((bad_heap_blocks > 0) || (bad_stack_blocks > 0)) { Boolean old_ma_error_print; /* print postamble */ (void)printf("MA_verify_allocator_stuff: scan completed\n"); /* construct a summary of the results */ (void)sprintf(ma_ebuf, "\n\t\t\t\theap\tstack\n\t\t\t\t----\t-----\n\tchecksum errors\t\t%4d\t%5d\n\tleft signature errors\t%4d\t%5d\n\tright signature errors\t%4d\t%5d\n\ttotal bad blocks\t%4d\t%5d\n\ttotal blocks\t\t%4d\t%5d", bad_heap_checksums, bad_stack_checksums, bad_heap_lguards, bad_stack_lguards, bad_heap_rguards, bad_stack_rguards, bad_heap_blocks, bad_stack_blocks, heap_blocks, stack_blocks); /* print the summary on stderr */ old_ma_error_print = ma_error_print; ma_error_print = MA_TRUE; ma_error(EL_Nonfatal, ET_External, "MA_verify_allocator_stuff", ma_ebuf); ma_error_print = old_ma_error_print; /* problems were found */ return MA_FALSE; } else /* no problems found */ return MA_TRUE; #else #ifdef STATS ma_stats.calls[(int)FID_MA_verify_allocator_stuff]++; #endif /* STATS */ (void)sprintf(ma_ebuf, "unavailable; recompile MA with -DVERIFY"); ma_error(EL_Nonfatal, ET_External, "MA_verify_allocator_stuff", ma_ebuf); return MA_FALSE; #endif /* VERIFY */ } ga-5-3/ma/table.h0000640005473000001440000000132111647355530012437 0ustar d3n000users/** @file * Private header file containing symbolic constants and type declarations * for the table module. * * This file should only be included by internal C files. */ #ifndef _table_h #define _table_h #include "matypes.h" /** ** constants **/ /* invalid handle */ #define TABLE_HANDLE_NONE (Integer)(-1) /** ** types **/ /* type of data in each table entry */ typedef char * TableData; /** ** function types **/ extern Integer ma_table_allocate(TableData data); extern void ma_table_deallocate(Integer handle); extern TableData ma_table_lookup(Integer handle); extern Integer ma_table_lookup_assoc(TableData data); extern Boolean ma_table_verify(Integer handle, char *caller); #endif /* _table_h */ ga-5-3/ma/ma.h0000640005473000001440000000656211647355530011761 0ustar d3n000users/** @file * Private header file containing symbolic constants and type declarations * for internal C routines. * * This file should only be included by internal C files. */ #ifndef _ma_h #define _ma_h #include "macdecls.h" /** ** function types **/ extern Boolean MAi_inform_base(Integer datatype, Pointer address1, Pointer address2); extern void MAi_summarize_allocated_blocks(int index_base); #define f2c_alloc_get_ F77_FUNC_(f2c_alloc_get,F2C_ALLOC_GET) #define f2c_allocate_heap_ F77_FUNC_(f2c_allocate_heap,F2C_ALLOCATE_HEAP) #define f2c_chop_stack_ F77_FUNC_(f2c_chop_stack,F2C_CHOP_STACK) #define f2c_free_heap_ F77_FUNC_(f2c_free_heap,F2C_FREE_HEAP) #define f2c_free_heap_piece_ F77_FUNC_(f2c_free_heap_piece,F2C_FREE_HEAP_PIECE) #define f2c_get_index_ F77_FUNC_(f2c_get_index,F2C_GET_INDEX) #define f2c_get_next_memhandle_ F77_FUNC_(f2c_get_next_memhandle,F2C_GET_NEXT_MEMHANDLE) #define f2c_get_numalign_ F77_FUNC_(f2c_get_numalign,F2C_GET_NUMALIGN) #define f2c_inform_base_ F77_FUNC_(f2c_inform_base,F2C_INFORM_BASE) #define f2c_inform_base_fcd_ F77_FUNC_(f2c_inform_base_fcd,F2C_INFORM_BASE_FCD) #define f2c_init_ F77_FUNC_(f2c_init,F2C_INIT) #define f2c_init_memhandle_iterator_ F77_FUNC_(f2c_init_memhandle_iterator,F2C_INIT_MEMHANDLE_ITERATOR) #define f2c_initialized_ F77_FUNC_(f2c_initialized,F2C_INITIALIZED) #define f2c_inquire_avail_ F77_FUNC_(f2c_inquire_avail,F2C_INQUIRE_AVAIL) #define f2c_inquire_heap_ F77_FUNC_(f2c_inquire_heap,F2C_INQUIRE_HEAP) #define f2c_inquire_stack_ F77_FUNC_(f2c_inquire_stack,F2C_INQUIRE_STACK) #define f2c_inquire_heap_check_stack_ F77_FUNC_(f2c_inquire_heap_check_stack,F2C_INQUIRE_HEAP_CHECK_STACK) #define f2c_inquire_heap_no_partition_ F77_FUNC_(f2c_inquire_heap_no_partition,F2C_INQUIRE_HEAP_NO_PARTITION) #define f2c_inquire_stack_check_heap_ F77_FUNC_(f2c_inquire_stack_check_heap,F2C_INQUIRE_STACK_CHECK_HEAP) #define f2c_inquire_stack_no_partition_ F77_FUNC_(f2c_inquire_stack_no_partition,F2C_INQUIRE_STACK_NO_PARTITION) #define f2c_pop_stack_ F77_FUNC_(f2c_pop_stack,F2C_POP_STACK) #define f2c_print_stats_ F77_FUNC_(f2c_print_stats,F2C_PRINT_STATS) #define f2c_push_get_ F77_FUNC_(f2c_push_get,F2C_PUSH_GET) #define f2c_push_stack_ F77_FUNC_(f2c_push_stack,F2C_PUSH_STACK) #define f2c_set_auto_verify_ F77_FUNC_(f2c_set_auto_verify,F2C_SET_AUTO_VERIFY) #define f2c_set_error_print_ F77_FUNC_(f2c_set_error_print,F2C_SET_ERROR_PRINT) #define f2c_set_hard_fail_ F77_FUNC_(f2c_set_hard_fail,F2C_SET_HARD_FAIL) #define f2c_set_numalign_ F77_FUNC_(f2c_set_numalign,F2C_SET_NUMALIGN) #define f2c_sizeof_ F77_FUNC_(f2c_sizeof,F2C_SIZEOF) #define f2c_sizeof_overhead_ F77_FUNC_(f2c_sizeof_overhead,F2C_SIZEOF_OVERHEAD) #define f2c_summarize_allocated_blocks_ F77_FUNC_(f2c_summarize_allocated_blocks,F2C_SUMMARIZE_ALLOCATED_BLOCKS) #define f2c_trace_ F77_FUNC_(f2c_trace,F2C_TRACE) #define f2c_verify_allocator_stuff_ F77_FUNC_(f2c_verify_allocator_stuff,F2C_VERIFY_ALLOCATOR_STUFF) #define ma_set_sizes_ F77_FUNC_(ma_set_sizes,MA_SET_SIZES) #endif /* _ma_h */ ga-5-3/ma/table.c0000640005473000001440000001743211300600175012424 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* * $Id: table.c,v 1.6 2000-10-13 23:18:18 d3h325 Exp $ */ /* * Dynamic table module. * * Each table entry consists of an external data item and internal state. * The size of the table is automatically increased if there isn't room * to add another entry. The client can allocate, deallocate, verify * entries, and perform both handle-->data and data-->handle lookup. */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #include "error.h" #include "memcpy.h" #include "scope.h" #include "table.h" /** ** constants **/ /* default # of initial table entries */ #define DEFAULT_TABLE_ENTRIES 32 /** ** types **/ /* state of a TableEntry */ typedef enum { TES_Unused = 0, /* never used */ TES_Allocated, /* currently in use */ TES_Deallocated /* formerly in use */ } TableEntryState; /* table entry consists of data and state */ typedef struct _TableEntry { TableData data; /* in this entry */ TableEntryState state; /* of this entry */ } TableEntry; /* table is an array of table entries */ typedef TableEntry * Table; /** ** variables **/ /* currently only one table is managed */ private Table ma_table = NULL; private Integer ma_table_capacity = 0; private Integer ma_table_entries = 0; private Integer ma_table_next_slot = 0; /** ** public routines for internal use only **/ /* ------------------------------------------------------------------------- */ /* * Allocate a table slot, store the given data into it, and return a handle * by which the slot may be referenced. If a slot cannot be allocated, * return TABLE_HANDLE_NONE. */ /* ------------------------------------------------------------------------- */ public Integer ma_table_allocate(data) TableData data; /* to store */ { Table new_ma_table; Integer new_ma_table_capacity; unsigned new_ma_table_size; Integer i; Integer slots_examined; /* expand the table if necessary */ if (ma_table_entries >= ma_table_capacity) { /* increase table capacity */ if (ma_table_capacity == 0) /* set the initial capacity */ new_ma_table_capacity = DEFAULT_TABLE_ENTRIES; else /* double the current capacity */ new_ma_table_capacity = 2 * ma_table_capacity; /* allocate space for new table */ new_ma_table_size = (unsigned)(new_ma_table_capacity * sizeof(TableEntry)); if ((new_ma_table = (Table)bytealloc(new_ma_table_size)) == (Table)NULL) { (void)sprintf(ma_ebuf, "could not allocate %u bytes for ma_table", new_ma_table_size); ma_error(EL_Nonfatal, ET_Internal, "ma_table_allocate", ma_ebuf); return TABLE_HANDLE_NONE; } /* copy and free old table */ if (ma_table_capacity > 0) { bytecopy(ma_table, new_ma_table, (ma_table_capacity * sizeof(TableEntry))); bytefree(ma_table); } /* initialize new part of new table */ for (i = new_ma_table_capacity-1; i >= ma_table_capacity; i--) new_ma_table[i].state = TES_Unused; /* remember the new table */ ma_table = new_ma_table; ma_table_next_slot = ma_table_capacity; ma_table_capacity = new_ma_table_capacity; } /* perform a linear circular search to find the next available slot */ for (slots_examined = 0, i = ma_table_next_slot; slots_examined < ma_table_capacity; slots_examined++, i = (i+1) % ma_table_capacity) { if (ma_table[i].state != TES_Allocated) { /* store the data */ ma_table[i].data = data; ma_table[i].state = TES_Allocated; /* increment ma_table_entries */ ma_table_entries++; /* advance ma_table_next_slot */ ma_table_next_slot = (i+1) % ma_table_capacity; /* return the handle */ return i; } } /* if we get here, something is wrong */ (void)sprintf(ma_ebuf, "no ma_table slot available, %ld/%ld slots used", (long)ma_table_entries, (long)ma_table_capacity); ma_error(EL_Nonfatal, ET_Internal, "ma_table_allocate", ma_ebuf); return TABLE_HANDLE_NONE; } /* ------------------------------------------------------------------------- */ /* * Deallocate the table slot corresponding to the given handle, * which should have been verified previously (e.g., via ma_table_verify()). * If handle is invalid, print an error message. */ /* ------------------------------------------------------------------------- */ public void ma_table_deallocate(handle) Integer handle; /* to deallocate */ { if (ma_table_verify(handle, "ma_table_deallocate")) { /* deallocate the slot */ ma_table[handle].state = TES_Deallocated; /* decrement ma_table_entries */ ma_table_entries--; } } /* ------------------------------------------------------------------------- */ /* * Return the data in the table slot corresponding to the given handle, * which should have been verified previously (e.g., via ma_table_verify()). * If handle is invalid, print an error message and return NULL. */ /* ------------------------------------------------------------------------- */ public TableData ma_table_lookup(handle) Integer handle; /* to lookup */ { if (ma_table_verify(handle, "ma_table_lookup")) /* success */ return ma_table[handle].data; else /* failure */ return (TableData)NULL; } /* ------------------------------------------------------------------------- */ /* * Return the handle for the table slot containing the given data (i.e., * perform an associative or inverted lookup), or TABLE_HANDLE_NONE if * no currently allocated table slot contains the given data. * * If more than one table slot contains the given data, the one whose * handle is returned is undefined (i.e., implementation dependent). */ /* ------------------------------------------------------------------------- */ public Integer ma_table_lookup_assoc(data) TableData data; /* to lookup */ { Integer i; /* perform a linear search from the first table slot */ for (i = 0; i < ma_table_capacity; i++) if ((ma_table[i].state == TES_Allocated) && (ma_table[i].data == data)) /* success */ return i; /* failure */ return TABLE_HANDLE_NONE; } /* ------------------------------------------------------------------------- */ /* * Return MA_TRUE if the given handle corresponds to a valid table slot * (one that is currently allocated), else return MA_FALSE and print an * error message. */ /* ------------------------------------------------------------------------- */ public Boolean ma_table_verify(handle, caller) Integer handle; /* to verify */ char *caller; /* name of calling routine */ { Boolean badhandle; /* is handle invalid? */ badhandle = MA_FALSE; /* if handle is invalid, construct an error message */ if ((handle < 0) || (handle >= ma_table_capacity) || (ma_table[handle].state == TES_Unused)) { (void)sprintf(ma_ebuf, "handle %ld is not valid", (long)handle); badhandle = MA_TRUE; } else if (ma_table[handle].state == TES_Deallocated) { (void)sprintf(ma_ebuf, "handle %ld already deallocated", (long)handle); badhandle = MA_TRUE; } if (badhandle) { /* invalid handle */ ma_error(EL_Nonfatal, ET_External, caller, ma_ebuf); return MA_FALSE; } else /* valid handle */ return MA_TRUE; } ga-5-3/ma/error.h0000640005473000001440000000167211647355530012512 0ustar d3n000users/** @file * Private header file containing symbolic constants and type declarations * for the error handling module. * * This file should only be included by internal C files. */ #ifndef _error_h #define _error_h #include "macdecls.h" /** ** types **/ /* severity levels of errors */ typedef enum { EL_Fatal, /* unrecoverable */ EL_Nonfatal /* recoverable */ } ErrorLevel; /* categories of errors */ typedef enum { ET_External, /* anticipated, client-level problem */ ET_Internal /* unanticipated problem internal to MA */ } ErrorType; /** ** function types **/ extern void ma_error(ErrorLevel elevel, ErrorType etype, char *func, char *emsg); /** ** variables **/ /* buffer for error messages */ extern char ma_ebuf[]; /* print error messages for nonfatal errors? */ extern Boolean ma_error_print; /* terminate execution upon any error? */ extern Boolean ma_hard_fail; #endif /* _error_h */ ga-5-3/ma/f2c.c0000640005473000001440000001667411411137202012015 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * C wrapper routines. In general, f2c_foo_ is called by FORTRAN routine * MA_foo, performs any necessary argument munging, then calls C routine * MA_foo. */ #include "farg.h" #include "typesf2c.h" #include "ma.h" #include "scope.h" #ifdef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS public Boolean FATR f2c_alloc_get_(datatype, nelem, name, memhandle, index, namesize) Integer *datatype; Integer *nelem; char *name; Integer *memhandle; MA_AccessIndex *index; int namesize; /* implicitly passed by FORTRAN */ #else /* F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS */ public Boolean FATR f2c_alloc_get_(datatype, nelem, name, namesize, memhandle, index) Integer *datatype; Integer *nelem; char *name; int namesize; /* implicitly passed by FORTRAN */ Integer *memhandle; MA_AccessIndex *index; #endif /* F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS */ { Boolean value; char buf[MA_NAMESIZE]; /* ensure that name is NUL-terminated */ ga_f2cstring(name, namesize, buf, (Integer)sizeof(buf)); value = MA_alloc_get(*datatype, *nelem, buf, memhandle, index); /* FORTRAN array indexing is 1-based, so increment index */ (*index)++; return value; } #ifdef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS public Boolean FATR f2c_allocate_heap_(datatype, nelem, name, memhandle, namesize) Integer *datatype; Integer *nelem; char *name; Integer *memhandle; int namesize; /* implicitly passed by FORTRAN */ #else /* F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS */ public Boolean FATR f2c_allocate_heap_(datatype, nelem, name, namesize, memhandle) Integer *datatype; Integer *nelem; char *name; int namesize; /* implicitly passed by FORTRAN */ Integer *memhandle; #endif /* F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS */ { char buf[MA_NAMESIZE]; /* ensure that name is NUL-terminated */ ga_f2cstring(name, namesize, buf, (Integer)sizeof(buf)); return MA_allocate_heap(*datatype, *nelem, buf, memhandle); } public Boolean FATR f2c_chop_stack_(memhandle) Integer *memhandle; { return MA_chop_stack(*memhandle); } public Boolean FATR f2c_free_heap_(memhandle) Integer *memhandle; { return MA_free_heap(*memhandle); } public Boolean FATR f2c_free_heap_piece_(memhandle, nelem) Integer *memhandle; Integer *nelem; { return MA_free_heap_piece(*memhandle, *nelem); } public Boolean FATR f2c_get_index_(memhandle, index) Integer *memhandle; MA_AccessIndex *index; { Boolean value = MA_get_index(*memhandle, index); /* FORTRAN array indexing is 1-based, so increment index */ (*index)++; return value; } public Boolean FATR f2c_get_next_memhandle_(ithandle, memhandle) Integer *ithandle; Integer *memhandle; { return MA_get_next_memhandle(ithandle, memhandle); } public Boolean FATR f2c_get_numalign_(value) Integer *value; { return MA_get_numalign(value); } public Boolean FATR f2c_inform_base_(datatype, address1, address2) Integer *datatype; Pointer address1; Pointer address2; { return MAi_inform_base(*datatype, address1, address2); } public Boolean FATR f2c_init_(datatype, nominal_stack, nominal_heap) Integer *datatype; Integer *nominal_stack; Integer *nominal_heap; { return MA_init(*datatype, *nominal_stack, *nominal_heap); } public Boolean FATR f2c_initialized_() { return MA_initialized(); } public Boolean FATR f2c_init_memhandle_iterator_(ithandle) Integer *ithandle; { return MA_init_memhandle_iterator(ithandle); } public Integer FATR f2c_inquire_avail_(datatype) Integer *datatype; { return MA_inquire_avail(*datatype); } public Integer FATR f2c_inquire_heap_(datatype) Integer *datatype; { return MA_inquire_heap(*datatype); } public Integer FATR f2c_inquire_heap_check_stack_(datatype) Integer *datatype; { return MA_inquire_heap_check_stack(*datatype); } public Integer FATR f2c_inquire_heap_no_partition_(datatype) Integer *datatype; { return MA_inquire_heap_no_partition(*datatype); } public Integer FATR f2c_inquire_stack_(datatype) Integer *datatype; { return MA_inquire_stack(*datatype); } public Integer FATR f2c_inquire_stack_check_heap_(datatype) Integer *datatype; { return MA_inquire_stack_check_heap(*datatype); } public Integer FATR f2c_inquire_stack_no_partition_(datatype) Integer *datatype; { return MA_inquire_stack_no_partition(*datatype); } public Boolean FATR f2c_pop_stack_(memhandle) Integer *memhandle; { return MA_pop_stack(*memhandle); } public void FATR f2c_print_stats_(printroutines) Boolean *printroutines; { MA_print_stats(*printroutines); } #ifdef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS public Boolean FATR f2c_push_get_(datatype, nelem, name, memhandle, index, namesize) Integer *datatype; Integer *nelem; char *name; Integer *memhandle; MA_AccessIndex *index; int namesize; /* implicitly passed by FORTRAN */ #else /* F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS */ public Boolean FATR f2c_push_get_(datatype, nelem, name, namesize, memhandle, index) Integer *datatype; Integer *nelem; char *name; int namesize; /* implicitly passed by FORTRAN */ Integer *memhandle; MA_AccessIndex *index; #endif /* F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS */ { Boolean value; char buf[MA_NAMESIZE]; /* ensure that name is NUL-terminated */ ga_f2cstring(name, namesize, buf, (Integer)sizeof(buf)); value = MA_push_get(*datatype, *nelem, buf, memhandle, index); /* FORTRAN array indexing is 1-based, so increment index */ (*index)++; return value; } #ifdef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS public Boolean FATR f2c_push_stack_(datatype, nelem, name, memhandle, namesize) Integer *datatype; Integer *nelem; char *name; Integer *memhandle; int namesize; /* implicitly passed by FORTRAN */ #else /* F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS */ public Boolean FATR f2c_push_stack_(datatype, nelem, name, namesize, memhandle) Integer *datatype; Integer *nelem; char *name; int namesize; Integer *memhandle; #endif /* F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS */ { char buf[MA_NAMESIZE]; /* ensure that name is NUL-terminated */ ga_f2cstring(name, namesize, buf, (Integer)sizeof(buf)); return MA_push_stack(*datatype, *nelem, buf, memhandle); } public Boolean FATR f2c_set_auto_verify_(value) Integer *value; { return MA_set_auto_verify((Boolean)*value); } public Boolean FATR f2c_set_error_print_(value) Integer *value; { return MA_set_error_print((Boolean)*value); } public Boolean FATR f2c_set_hard_fail_(value) Integer *value; { return MA_set_hard_fail((Boolean)*value); } public Boolean FATR f2c_set_numalign_(value) Integer *value; { return MA_set_numalign(*value); } public Integer FATR f2c_sizeof_(datatype1, nelem1, datatype2) Integer *datatype1; Integer *nelem1; Integer *datatype2; { return MA_sizeof(*datatype1, *nelem1, *datatype2); } public Integer FATR f2c_sizeof_overhead_(datatype) Integer *datatype; { return MA_sizeof_overhead(*datatype); } public void FATR f2c_summarize_allocated_blocks_() { /* FORTRAN indices are 1-based */ MAi_summarize_allocated_blocks(1); } public void FATR f2c_trace_(value) Integer *value; { MA_trace((Boolean)*value); } public Boolean FATR f2c_verify_allocator_stuff_() { return MA_verify_allocator_stuff(); } ga-5-3/ma/test-coalesce.c0000640005473000001440000000333411411201316014061 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* * $Id: test-coalesce.c,v 1.4 2002-09-14 05:40:30 d3g001 Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #include "macdecls.h" #define MAXHANDLES 10 int main(int argc, char **argv) { Integer bytes_heap; Integer bytes_stack; int howmany; Boolean ok; Integer handle[MAXHANDLES]; MA_AccessIndex index[MAXHANDLES]; /* set sizes of heap and stack */ bytes_heap = 1024; bytes_stack = 0; /* initialize */ ok = MA_init(MT_CHAR, bytes_stack, bytes_heap); if (!ok) { (void)fprintf(stderr, "MA_init failed; punting\n"); exit(1); } howmany = MA_inquire_heap(MT_INT); (void)printf("MA_inquire_heap(MT_INT) = %d\n", howmany); printf("# Allocating 4 memory segments\n"); MA_alloc_get(MT_INT, howmany/5, "heap0", &handle[0], &index[0]); MA_alloc_get(MT_INT, howmany/5, "heap1", &handle[1], &index[1]); MA_alloc_get(MT_INT, howmany/5, "heap2", &handle[2], &index[2]); MA_alloc_get(MT_INT, howmany/5, "heap3", &handle[3], &index[3]); printf("# Deleting 2 non-adjacent memory segments\n"); MA_free_heap(handle[0]); MA_free_heap(handle[2]); printf("# Attempting to allocate memory segment -- should fail\n"); MA_alloc_get(MT_INT, howmany/4, "heap4", &handle[4], &index[4]); printf("# Freeing some memory and trying again -- should succeed\n"); MA_free_heap(handle[1]); MA_alloc_get(MT_INT, howmany/4, "heap4", &handle[4], &index[4]); printf("# Printing stats for allocated blocks -- should be two active\n"); MA_summarize_allocated_blocks(); return 0; } ga-5-3/ma/macommon.h0000640005473000001440000000166711251563723013167 0ustar d3n000users#ifndef _macommon_h #define _macommon_h #define MA_FALSE 0 #define MA_TRUE 1 #define MA_DEFAULT_SPACE (-1) #define MA_NAMESIZE 32 #define MT_BASE 1000 #define MT_C_CHAR (MT_BASE + 0) #define MT_C_INT (MT_BASE + 1) #define MT_C_LONGINT (MT_BASE + 2) #define MT_C_FLOAT (MT_BASE + 3) #define MT_C_DBL (MT_BASE + 4) #define MT_C_LDBL (MT_BASE + 5) #define MT_C_SCPL (MT_BASE + 6) #define MT_C_DCPL (MT_BASE + 7) #define MT_C_LDCPL (MT_BASE + 8) #define MT_F_BYTE (MT_BASE + 9) #define MT_F_INT (MT_BASE + 10) #define MT_F_LOG (MT_BASE + 11) #define MT_F_REAL (MT_BASE + 12) #define MT_F_DBL (MT_BASE + 13) #define MT_F_SCPL (MT_BASE + 14) #define MT_F_DCPL (MT_BASE + 15) #define MT_C_LONGLONG (MT_BASE + 16) #define MT_FIRST MT_C_CHAR #define MT_LAST MT_C_LONGLONG #define MT_NUMTYPES (MT_LAST - MT_FIRST + 1) #endif /* _macommon_h */ ga-5-3/ma/macdecls.h0000640005473000001440000001277411411201316013116 0ustar d3n000users/** @file * Public header file for a portable dynamic memory allocator. * * This file may be included by internal and external C files. */ #ifndef _macdecls_h #define _macdecls_h #ifdef __cplusplus extern "C" { #endif #include "macommon.h" #include "matypes.h" /** ** constants **/ /* datatypes */ #define MT_CHAR MT_C_CHAR /**< char */ #define MT_INT MT_C_INT /**< int */ #define MT_LONGINT MT_C_LONGINT /**< long int */ #define MT_LONGLONG MT_C_LONGLONG /**< long long */ #define MT_REAL MT_C_FLOAT /**< float */ #define MT_DBL MT_C_DBL /**< double */ #define MT_LDBL MT_C_LDBL /**< long double */ #define MT_SCPL MT_C_SCPL /**< single precision complex */ #define MT_DCPL MT_C_DCPL /**< double precision complex */ #define MT_LDCPL MT_C_LDCPL /**< long double precision complex */ #define MT_C_FIRST MT_CHAR /**< first type */ #define MT_C_LAST MT_LDCPL /**< last type */ /** ** function types **/ extern Boolean MA_alloc_get( Integer datatype, /**< of elements in this block */ Integer nelem, /**< # of elements in this block */ const char *name, /**< assigned to this block by client */ Integer *memhandle, /**< RETURN: handle for this block */ MA_AccessIndex *index /**< RETURN: index for this block */ ); extern Boolean MA_allocate_heap( Integer datatype, /**< of elements in this block */ Integer nelem, /**< # of elements in this block */ const char *name, /**< assigned to this block by client */ Integer *memhandle /**< RETURN: handle for this block */ ); extern Boolean MA_chop_stack(Integer memhandle); extern Boolean MA_free_heap(Integer memhandle); extern Boolean MA_free_heap_piece( Integer memhandle, /**< the block to deallocate a piece of */ Integer nelem /**< # of elements to deallocate */); extern Boolean MA_get_index( Integer memhandle, /**< block to get index for */ MA_AccessIndex *index /**< RETURN: base index */); extern Pointer MA_get_mbase(Integer datatype); /**< to get base address of */ extern Boolean MA_get_next_memhandle( Integer *ithandle, /**< handle for this iterator */ Integer *memhandle /**< RETURN: handle for the next block */); extern Boolean MA_get_numalign(Integer *value); extern Boolean MA_get_pointer( Integer memhandle, /**< block to get pointer for */ void *pointer /**< JN: void** = void* */ ); extern Boolean MA_init( Integer datatype, /**< for computing storage requirement */ Integer nominal_stack, /**< # of datatype elements desired for stack */ Integer nominal_heap /**< # of datatype elements desired for heap */); extern Boolean MA_initialized(); extern Boolean MA_init_memhandle_iterator( Integer *ithandle); extern Integer MA_inquire_avail(Integer datatype); extern Integer MA_inquire_heap(Integer datatype); extern Integer MA_inquire_heap_check_stack(Integer datatype); extern Integer MA_inquire_heap_no_partition(Integer datatype); extern Integer MA_inquire_stack(Integer datatype); extern Integer MA_inquire_stack_check_heap(Integer datatype); extern Integer MA_inquire_stack_no_partition(Integer datatype); extern Boolean MA_pop_stack(Integer memhandle); extern void MA_print_stats(Boolean printroutines); extern Boolean MA_push_get( Integer datatype, /**< of elements in this block */ Integer nelem, /**< # of elements in this block */ const char *name, /**< assigned to this block by client */ Integer *memhandle, /**< RETURN: handle for this block */ MA_AccessIndex *index /**< RETURN: index for this block */); extern Boolean MA_push_stack( Integer datatype, /**< of elements in this block */ Integer nelem, /**< # of elements in this block */ const char *name, /**< assigned to this block by client */ Integer *memhandle /**< RETURN: handle for this block */); extern Boolean MA_set_auto_verify(Boolean value /* to set flag to */); extern Boolean MA_set_error_print(Boolean value /* to set flag to */); extern Boolean MA_set_hard_fail( Boolean value /* to set flag to */); extern Boolean MA_set_numalign(Integer value); extern Integer MA_sizeof( Integer datatype1, /**< of source elements */ Integer nelem1, /**< # of source elements */ Integer datatype2 /**< of target elements */); extern Integer MA_sizeof_overhead(Integer datatype); extern void MA_summarize_allocated_blocks(); extern void MA_trace(Boolean value); extern Boolean MA_verify_allocator_stuff(); extern void MA_set_error_callback(void(*func)()); extern void ma_set_error_callback(); /** ** variables **/ /* base arrays for the C datatypes */ extern char ma_cb_char[]; /**< MT_C_CHAR */ extern int ma_cb_int[]; /**< MT_C_INT */ extern long ma_cb_long[]; /**< MT_C_LONGINT */ extern long long ma_cb_longlong[]; /**< MT_C_LONGLONG */ extern float ma_cb_float[]; /**< MT_C_FLOAT */ extern double ma_cb_dbl[]; /**< MT_C_DBL */ extern MA_LongDouble ma_cb_ldbl[]; /**< MT_C_LDBL */ extern MA_SingleComplex ma_cb_scpl[]; /**< MT_C_SCPL */ extern MA_DoubleComplex ma_cb_dcpl[]; /**< MT_C_DCPL */ extern MA_LongDoubleComplex ma_cb_ldcpl[]; /**< MT_C_LDCPL */ #ifdef __cplusplus } #endif #endif /* _macdecls_h */ ga-5-3/ma/string-util.h0000640005473000001440000000057111256770646013644 0ustar d3n000users/** @file * Private header file for string utilities. * * This file should only be included by internal C files. */ #ifndef _string_util_h #define _string_util_h /** ** constants **/ /* str_match return values */ #define SM_NONE (-1) #define SM_MANY (-2) /** ** function types **/ extern unsigned int str_len(); extern int str_match(); #endif /* _string_util_h */ ga-5-3/ma/testc.c0000640005473000001440000002774411411201316012463 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* * $Id: testc.c,v 1.5 1999-05-27 16:31:16 d3h325 Exp $ */ /* * Test harness for portable dynamic memory allocator. */ #include "macdecls.h" #include "string-util.h" #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif /** ** constants **/ #define NUM_COMMANDS (int)(sizeof(commands) / sizeof(char *)) /** ** types **/ typedef enum { C_MA_alloc_get = 0, C_MA_allocate_heap, C_MA_chop_stack, C_MA_free_heap, C_MA_get_index, C_MA_get_next_memhandle, C_MA_get_pointer, C_MA_init, C_MA_init_memhandle_iterator, C_MA_inquire_avail, C_MA_inquire_heap, C_MA_inquire_stack, C_MA_pop_stack, C_MA_print_stats, C_MA_push_get, C_MA_push_stack, C_MA_set_auto_verify, C_MA_set_error_print, C_MA_set_hard_fail, C_MA_sizeof, C_MA_sizeof_overhead, C_MA_summarize_allocated_blocks, C_MA_verify_allocator_stuff, C_bye, C_exit, C_help, C_quit, C_questionmark } Command; /** ** variables **/ static char *commands[] = { "MA_alloc_get", "MA_allocate_heap", "MA_chop_stack", "MA_free_heap", "MA_get_index", "MA_get_next_memhandle", "MA_get_pointer", "MA_init", "MA_init_memhandle_iterator", "MA_inquire_avail", "MA_inquire_heap", "MA_inquire_stack", "MA_pop_stack", "MA_print_stats", "MA_push_get", "MA_push_stack", "MA_set_auto_verify", "MA_set_error_print", "MA_set_hard_fail", "MA_sizeof", "MA_sizeof_overhead", "MA_summarize_allocated_blocks", "MA_verify_allocator_stuff", "bye", "exit", "help", "quit", "?" }; static char *help[] = { "MA_alloc_get(datatype, nelem, name, memhandle, index)", "MA_allocate_heap(datatype, nelem, name, memhandle)", "MA_chop_stack(memhandle)", "MA_free_heap(memhandle)", "MA_get_index(memhandle, index)", "MA_get_next_memhandle(ithandle, memhandle)", "MA_get_pointer(memhandle, pointer)", "MA_init(datatype, nominal_stack, nominal_heap)", "MA_init_memhandle_iterator(ithandle)", "MA_inquire_avail(datatype)", "MA_inquire_heap(datatype)", "MA_inquire_stack(datatype)", "MA_pop_stack(memhandle)", "MA_print_stats()", "MA_push_get(datatype, nelem, name, memhandle, index)", "MA_push_stack(datatype, nelem, name, memhandle)", "MA_set_auto_verify(value)", "MA_set_error_print(value)", "MA_set_hard_fail(value)", "MA_sizeof(datatype1, nelem1, datatype2)", "MA_sizeof_overhead(datatype)", "MA_summarize_allocated_blocks()", "MA_verify_allocator_stuff()", "bye", "exit", "help", "quit", "?" }; /** ** public routines **/ /* ------------------------------------------------------------------------- */ /* * Interactive interface to MA routines. */ /* ------------------------------------------------------------------------- */ int main(argc, argv) int argc; char *argv[]; { char s[81]; /* string buffer */ int c; /* index of command */ int ii1; /* in int buffer */ int ii2; /* in int buffer */ int ii3; /* in int buffer */ Integer oi1; /* out int buffer */ MA_AccessIndex oi2; /* out int buffer */ Pointer op; /* out Pointer buffer */ int value; /* return value buffer */ while (1) { printf("testc> "); if (scanf("%80s", s) != 1) { printf("*** Input read failed; exiting.\n"); exit(1); } c = str_match(s, commands, NUM_COMMANDS); if (c == SM_MANY) { printf("*** '%s' is ambiguous\n", s); continue; } else if (c == SM_NONE) { printf("*** Unrecognized command '%s'\n", s); continue; } switch ((Command)c) { case C_MA_alloc_get: if (scanf("%d %d %80s", &ii1, &ii2, s) != 3) printf("*** Input read failed for %s\n", commands[c]); else { value = MA_alloc_get(ii1, ii2, s, &oi1, &oi2); printf("%s=%d memhandle=%ld index=%ld\n", commands[c], value, (long)oi1, (long)oi2); } break; case C_MA_allocate_heap: if (scanf("%d %d %80s", &ii1, &ii2, s) != 3) printf("*** Input read failed for %s\n", commands[c]); else { value = MA_allocate_heap(ii1, ii2, s, &oi1); printf("%s=%d memhandle=%ld\n", commands[c], value, (long)oi1); } break; case C_MA_chop_stack: if (scanf("%d", &ii1) != 1) printf("*** Input read failed for %s\n", commands[c]); else { value = MA_chop_stack(ii1); printf("%s=%d\n", commands[c], value); } break; case C_MA_free_heap: if (scanf("%d", &ii1) != 1) printf("*** Input read failed for %s\n", commands[c]); else { value = MA_free_heap(ii1); printf("%s=%d\n", commands[c], value); } break; case C_MA_get_index: if (scanf("%d", &ii1) != 1) printf("*** Input read failed for %s\n", commands[c]); else { value = MA_get_index(ii1, &oi2); printf("%s=%d index=%ld\n", commands[c], value, (long)oi2); } break; case C_MA_get_next_memhandle: if (scanf("%d", &ii1) != 1) printf("*** Input read failed for %s\n", commands[c]); else { Integer tmp = ii1; value = MA_get_next_memhandle(&tmp, &oi1); printf("%s=%d ithandle=%ld memhandle=%ld\n", commands[c], value, (long)tmp, (long)oi1); } break; case C_MA_get_pointer: if (scanf("%d", &ii1) != 1) printf("*** Input read failed for %s\n", commands[c]); else { value = MA_get_pointer(ii1, &op); printf("%s=%d pointer=%lu\n", commands[c], value, (unsigned long)op); } break; case C_MA_init: if (scanf("%d %d %d", &ii1, &ii2, &ii3) != 3) printf("*** Input read failed for %s\n", commands[c]); else { value = MA_init(ii1, ii2, ii3); printf("%s=%d\n", commands[c], value); } break; case C_MA_init_memhandle_iterator: value = MA_init_memhandle_iterator(&oi1); printf("%s=%d ithandle=%ld\n", commands[c], value, (long)oi1); break; case C_MA_inquire_avail: if (scanf("%d", &ii1) != 1) printf("*** Input read failed for %s\n", commands[c]); else { oi1 = MA_inquire_avail(ii1); printf("%s=%ld\n", commands[c], (long)oi1); } break; case C_MA_inquire_heap: if (scanf("%d", &ii1) != 1) printf("*** Input read failed for %s\n", commands[c]); else { oi1 = MA_inquire_heap(ii1); printf("%s=%ld\n", commands[c], (long)oi1); } break; case C_MA_inquire_stack: if (scanf("%d", &ii1) != 1) printf("*** Input read failed for %s\n", commands[c]); else { oi1 = MA_inquire_stack(ii1); printf("%s=%ld\n", commands[c], (long)oi1); } break; case C_MA_pop_stack: if (scanf("%d", &ii1) != 1) printf("*** Input read failed for %s\n", commands[c]); else { value = MA_pop_stack(ii1); printf("%s=%d\n", commands[c], value); } break; case C_MA_print_stats: MA_print_stats(1); break; case C_MA_push_get: if (scanf("%d %d %80s", &ii1, &ii2, s) != 3) printf("*** Input read failed for %s\n", commands[c]); else { value = MA_push_get(ii1, ii2, s, &oi1, &oi2); printf("%s=%d memhandle=%ld index=%ld\n", commands[c], value, (long)oi1, (long)oi2); } break; case C_MA_push_stack: if (scanf("%d %d %80s", &ii1, &ii2, s) != 3) printf("*** Input read failed for %s\n", commands[c]); else { value = MA_push_stack(ii1, ii2, s, &oi1); printf("%s=%d memhandle=%ld\n", commands[c], value, (long)oi1); } break; case C_MA_set_auto_verify: if (scanf("%d", &ii1) != 1) printf("*** Input read failed for %s\n", commands[c]); else { value = MA_set_auto_verify(ii1); printf("%s=%d\n", commands[c], value); } break; case C_MA_set_error_print: if (scanf("%d", &ii1) != 1) printf("*** Input read failed for %s\n", commands[c]); else { value = MA_set_error_print(ii1); printf("%s=%d\n", commands[c], value); } break; case C_MA_set_hard_fail: if (scanf("%d", &ii1) != 1) printf("*** Input read failed for %s\n", commands[c]); else { value = MA_set_hard_fail(ii1); printf("%s=%d\n", commands[c], value); } break; case C_MA_sizeof: if (scanf("%d %d %d", &ii1, &ii2, &ii3) != 3) printf("*** Input read failed for %s\n", commands[c]); else { oi1 = MA_sizeof(ii1, ii2, ii3); printf("%s=%ld\n", commands[c], (long)oi1); } break; case C_MA_sizeof_overhead: if (scanf("%d", &ii1) != 1) printf("*** Input read failed for %s\n", commands[c]); else { oi1 = MA_sizeof_overhead(ii1); printf("%s=%ld\n", commands[c], (long)oi1); } break; case C_MA_summarize_allocated_blocks: MA_summarize_allocated_blocks(); break; case C_MA_verify_allocator_stuff: value = MA_verify_allocator_stuff(); printf("%s=%d\n", commands[c], value); break; case C_bye: /* fall through */ case C_exit: /* fall through */ case C_quit: exit(0); case C_help: /* fall through */ case C_questionmark: for (ii1 = 0; ii1 < NUM_COMMANDS; ii1++) printf(" %s\n", help[ii1]); break; default: printf("*** Unrecognized case '%d' in switch\n", c); } } return 0; } ga-5-3/benchmarks/0000750005473000001440000000000012275260573012721 5ustar d3n000usersga-5-3/benchmarks/README.first0000640005473000001440000000153511712035144014721 0ustar d3n000users============ README.first ============ What is this for? ----------------- This directory is meant to stage some of our test programs into a gzipped tarball meant for benchmark testing on various platforms. Our tests depend on certain header files, preprocessor directives, and additional test-related functions which aren't available from a standard installation of GA. The files here are meant to fill that void. See the README for details about the contained files. Note that the README will describe these files as well as files which have not yet been staged. How to Generate the Benchmarks Tarball -------------------------------------- Simply run "make". The default make target will create a "ga-benchmarks" directory, copy various test sources as well as the sources found here, and remove the default staging make target from the copied Makefile. ga-5-3/benchmarks/util.c0000640005473000001440000000355711712035144014042 0ustar d3n000users#include #include #include "ga.h" #include "typesf2c.h" #define F77_SET_MA_USE_ARMCI_MEM(name) \ void name() \ { \ int retval; \ if((retval=setenv("MA_USE_ARMCI_MEM", "YES", 1)) != 0) \ GA_Error("setenv failed: insufficient space in the environment",1); \ } F77_SET_MA_USE_ARMCI_MEM(set_ma_use_armci_mem) F77_SET_MA_USE_ARMCI_MEM(set_ma_use_armci_mem_) F77_SET_MA_USE_ARMCI_MEM(set_ma_use_armci_mem__) F77_SET_MA_USE_ARMCI_MEM(SET_MA_USE_ARMCI_MEM) F77_SET_MA_USE_ARMCI_MEM(SET_MA_USE_ARMCI_MEM_) F77_SET_MA_USE_ARMCI_MEM(SET_MA_USE_ARMCI_MEM__) #define F77_UTIL_MDTOB(name) \ Integer name(Integer *n) \ { \ if (*n < 0) \ GA_Error("util_MDTOB_: negative argument",*n); \ return (Integer) (*n * sizeof(DoublePrecision)); \ } F77_UTIL_MDTOB(util_mdtob) F77_UTIL_MDTOB(util_mdtob_) F77_UTIL_MDTOB(util_mdtob__) F77_UTIL_MDTOB(UTIL_MDTOB) F77_UTIL_MDTOB(UTIL_MDTOB_) F77_UTIL_MDTOB(UTIL_MDTOB__) #define F77_UTIL_TIMER(name) \ double name() \ { \ return GA_Wtime(); \ } F77_UTIL_TIMER(util_timer) F77_UTIL_TIMER(util_timer_) F77_UTIL_TIMER(util_timer__) F77_UTIL_TIMER(UTIL_TIMER) F77_UTIL_TIMER(UTIL_TIMER_) F77_UTIL_TIMER(UTIL_TIMER__) #define F77_FLUSH(name) \ void name(Integer *unit) \ { \ fflush(stdout); \ fflush(stderr); \ } F77_FLUSH(ffflush) F77_FLUSH(ffflush_) F77_FLUSH(ffflush__) F77_FLUSH(FFFLUSH) F77_FLUSH(FFFLUSH_) F77_FLUSH(FFFLUSH__) ga-5-3/benchmarks/README0000640005473000001440000000315011712035144013566 0ustar d3n000users============================================= README for Global Arrays and ARMCI Benchmarks ============================================= How to Build the Benchmarks --------------------------- The Makefile assumes you have installed GA 5-1 or later which also installs the "ga-config" helper script. This script contains the various linker, compiler, and preprocessor flags used to build GA. You must specify the path to ga-config or else edit the Makefile to add the necessary flags manually. For example:: make GA_CONFIG=/path/to/ga/install/bin/ga-config make CPPFLAGS=-I/path/to/ga/install/include LDFLAGS=-L/path/to/ga/install/lib LIBS=-lga It is *much* easier to use the installed ga-config script! Directory Contents ------------------ -armci_perf.c ARMCI benchmark where proc 0 sequentially communicates with the other 1..P procs -config.fh a few necessary preprocessor symbols for Fortran -config.h a few necessary preprocessor symbols for C -ga_perf.c GA benchmark demonstrating the overhead added by the GA layer compared to the "armci_perf.c" benchmark -ga_ptp.F GA benchmark where all procs communicate -ga_shift.F GA benchmark using a shift algorithm -LICENSE legal information about these files -Makefile makefile for building these benchmarks -mp3.fh message passing init and termination symbols for Fortran -mp3.h message passing init and termination symbols for C -README this file -testutil.fh contains a few Fortran declarations for extra functions How to Run the Benchmarks ------------------------- TODO ga-5-3/benchmarks/config.h0000640005473000001440000000020311712035144014320 0ustar d3n000users#define HAVE_STDIO_H 1 #define HAVE_STDLIB_H 1 #define HAVE_ASSERT_H 1 #define HAVE_UNISTD_H 1 #define HAVE_MATH_H 1 #define MPI 1 ga-5-3/benchmarks/testutil.fh0000640005473000001440000000015711712035144015106 0ustar d3n000users double precision util_timer integer util_mdtob external util_timer external util_mdtob ga-5-3/benchmarks/Makefile0000640005473000001440000000425611712035144014356 0ustar d3n000users GA_CONFIG := # e.g. /path/to/ga/install/bin/ga-config ifneq ($(GA_CONFIG),) CPPFLAGS := $(shell $(GA_CONFIG) --cppflags) FFLAGS := $(shell $(GA_CONFIG) --fflags) CFLAGS := $(shell $(GA_CONFIG) --cflags) LIBS := $(shell $(GA_CONFIG) --libs) FLIBS := $(shell $(GA_CONFIG) --flibs) LDFLAGS := $(shell $(GA_CONFIG) --ldflags) CC := $(shell $(GA_CONFIG) --cc) F77 := $(shell $(GA_CONFIG) --f77) endif dist: rm -rf ga-benchmarks mkdir ga-benchmarks cp -f ../global/testing/mp3.h ./ga-benchmarks/mp3.h cp -f ../global/testing/mp3.fh ./ga-benchmarks/mp3.fh cp -f ../global/testing/ga_shift.F ./ga-benchmarks/ga_shift.F cp -f ../global/testing/perf.F ./ga-benchmarks/ga_ptp.F cp -f ../global/testing/perf2.c ./ga-benchmarks/ga_perf.c cp -f ../armci/testing/perf.c ./ga-benchmarks/armci_perf.c cp -f ./Makefile ./ga-benchmarks/Makefile cp -f ./config.h ./ga-benchmarks/config.h cp -f ./config.fh ./ga-benchmarks/config.fh cp -f ./util.c ./ga-benchmarks/util.c cp -f ./testutil.fh ./ga-benchmarks/testutil.fh cp -f ./README ./ga-benchmarks/README sed -i '13,31d' ./ga-benchmarks/Makefile rm -f ga-benchmarks.tgz tar -czf ga-benchmarks.tgz ./ga-benchmarks .SUFFIXES: benchmarks: ga_shift.x ga_ptp.x ga_perf.x armci_perf.x ga_shift.x: ga_shift.o util.o $(F77) -o $@ $^ $(LDFLAGS) $(LIBS) ga_shift.o: ga_shift.F mp3.fh config.fh $(F77) -o $@ -c $< -DHAVE_CONFIG_H -I. $(CPPFLAGS) $(FFLAGS) ga_ptp.x: ga_ptp.o util.o $(F77) -o $@ $^ $(LDFLAGS) $(LIBS) ga_ptp.o: ga_ptp.F mp3.fh config.fh $(F77) -o $@ -c $< -DHAVE_CONFIG_H -I. $(CPPFLAGS) $(FFLAGS) ga_perf.x: ga_perf.o util.o $(CC) -o $@ $^ $(LDFLAGS) $(LIBS) $(FLIBS) ga_perf.o: ga_perf.c mp3.h config.h $(CC) -o $@ -c $< -DHAVE_CONFIG_H -I. $(CPPFLAGS) $(CFLAGS) armci_perf.x: armci_perf.o util.o $(CC) -o $@ $^ $(LDFLAGS) $(LIBS) $(FLIBS) armci_perf.o: armci_perf.c mp3.h config.h $(CC) -o $@ -c $< -DHAVE_CONFIG_H -I. $(CPPFLAGS) $(CFLAGS) util.o: util.c $(CC) -o $@ -c $< -DHAVE_CONFIG_H -I. $(CPPFLAGS) $(CFLAGS) config.h: config.fh: mp3.h: mp3.fh: clean: rm -f *.x *.o ga-5-3/benchmarks/config.fh0000640005473000001440000000001611712035144014470 0ustar d3n000users#define MPI 1 ga-5-3/configure.ac0000640005473000001440000004462612274750307013105 0ustar d3n000users# Process this file with autoconf to produce a configure script. ############################################################################### # Init autoconf ############################################################################### AC_PREREQ([2.67]) AC_INIT([Global Arrays (GA)], [5.3], [hpctools@pnl.gov], [ga], [http://www.emsl.pnl.gov/docs/global/]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_HEADER([config.h]) AC_CONFIG_LIBOBJ_DIR([compat]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR([global/src/ga.h]) ############################################################################### # Must occur before automake init ############################################################################### GA_TARGET GA_CROSS_COMPILING ############################################################################### # Init automake ############################################################################### AM_INIT_AUTOMAKE([color-tests foreign parallel-tests silent-rules subdir-objects]) # Don't emit "rebuild rules" for configure, Makefile.ins, etc. AM_MAINTAINER_MODE ############################################################################### # Misc. information and package setup. ############################################################################### GA_WITH_HELP GA_TOP_BUILDDIR="`pwd`" cd "$srcdir" GA_TOP_SRCDIR="`pwd`" cd "$GA_TOP_BUILDDIR" AS_IF([test "$GA_TOP_BUILDDIR" != "$GA_TOP_SRCDIR"], [AC_MSG_NOTICE([Detected VPATH build])]) # Determine messaging library up front because if MPI is desired we use the # MPI compiler wrappers instead of the standard compilers. GA_MSG_COMMS # Whether to disable/enable Fortran 77 or C++ bindings. # Note that compiling the Fortran 77 source is enabled by default. GA_F77_DISABLE GA_CXX_ENABLE GA_DISABLE_MPI_TESTS GA_ENABLE_WARNINGS GA_ENABLE_CHECKPOINT GA_ENABLE_OPT GA_ENABLE_PEIGS GA_ENABLE_PROFILING GA_ENABLE_TRACE GA_THREAD_SAFE # Unless we rename all preprocessor symbols of MPI and MPIPP # in the source code, this hack is necessary. AH_BOTTOM([/* DO NOT MODIFY THE FOLLOWING PREPROCESSOR DIRECTIVES */ #ifdef MSG_COMMS_MPI # ifdef __cplusplus # define MPIPP # else # define MPI # endif /* __cplusplus */ #endif /* MSG_COMMS_MPI */]) ######################################### # C compiler ######################################### AC_MSG_NOTICE AC_MSG_NOTICE([C compiler]) AC_MSG_NOTICE ga_save_CFLAGS="$CFLAGS" GA_PROG_MPICC CFLAGS="$ga_save_CFLAGS" AC_USE_SYSTEM_EXTENSIONS GA_COMPILER_VENDOR GA_WARN_FLAGS ga_save_CFLAGS="$CFLAGS" CFLAGS="$ga_cv_c_warning_flags $CFLAGS" AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP], [GA_ARG_PARSE([with_mpi], [GA_MP_LIBS], [GA_MP_LDFLAGS], [GA_MP_CPPFLAGS])]) # If F77 is enabled, only perform a simple compilation test. AS_IF([test "x$with_mpi" != xno], [ AS_CASE([$enable_f77:$enable_mpi_tests], [yes:*], [GA_MPICC_TEST_COMPILE], [no:yes],[GA_MPICC_TEST_LINK], [no:no], [GA_MPICC_TEST_COMPILE])]) # Hack to append .x to executables. AC_SUBST([EXEEXT], [.x$EXEEXT]) GA_TARGET64 # Establish the underlying network infrastructure (SOCKETS, OPENIB, etc) GA_ARMCI_NETWORK # Checks for C header files. AC_HEADER_ASSERT AC_HEADER_DIRENT AC_HEADER_STDBOOL AC_HEADER_STDC AC_HEADER_SYS_WAIT GA_CHECK_HEADERS([assert.h]) GA_CHECK_HEADERS([errno.h]) GA_CHECK_HEADERS([fcntl.h]) GA_CHECK_HEADERS([ffio.h]) GA_CHECK_HEADERS([limits.h]) GA_CHECK_HEADERS([linux/limits.h]) GA_CHECK_HEADERS([malloc.h]) GA_CHECK_HEADERS([math.h]) GA_CHECK_HEADERS([stddef.h]) GA_CHECK_HEADERS([stdint.h]) GA_CHECK_HEADERS([stdio.h]) GA_CHECK_HEADERS([stdlib.h]) GA_CHECK_HEADERS([string.h]) GA_CHECK_HEADERS([strings.h]) GA_CHECK_HEADERS([sys/file.h]) GA_CHECK_HEADERS([sys/fsid.h]) GA_CHECK_HEADERS([sys/fstyp.h]) GA_CHECK_HEADERS([sys/ioctl.h]) GA_CHECK_HEADERS([sys/iosw.h]) GA_CHECK_HEADERS([sys/ipc.h]) GA_CHECK_HEADERS([sys/mman.h]) GA_CHECK_HEADERS([sys/mount.h]) GA_CHECK_HEADERS([sys/param.h]) GA_CHECK_HEADERS([sys/sem.h]) GA_CHECK_HEADERS([sys/shm.h]) GA_CHECK_HEADERS([sys/statfs.h]) GA_CHECK_HEADERS([sys/stat.h]) GA_CHECK_HEADERS([sys/statvfs.h]) GA_CHECK_HEADERS([sys/time.h]) GA_CHECK_HEADERS([sys/types.h]) GA_CHECK_HEADERS([sys/vfs.h]) GA_CHECK_HEADERS([time.h]) GA_CHECK_HEADERS([unistd.h]) GA_CHECK_HEADERS([windows.h]) # Checks for C typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE AC_C_RESTRICT AC_C_VOLATILE AC_TYPE_INT64_T AC_TYPE_LONG_DOUBLE AC_TYPE_OFF_T AC_TYPE_PID_T AC_TYPE_SIGNAL AC_TYPE_SIZE_T AC_SYS_LARGEFILE AC_FUNC_FSEEKO GA_FUNCTION GA_PROGNAME GA_DISABLE_SYS_WEAK_ALIAS GA_SYS_WEAK_ALIAS GA_UNION_SEMUN # Checks for C type sizes. AC_CHECK_SIZEOF([void*]) AC_CHECK_SIZEOF([char]) AC_CHECK_SIZEOF([short]) AC_CHECK_SIZEOF([int]) AC_CHECK_SIZEOF([long]) AC_CHECK_SIZEOF([long long]) AC_CHECK_SIZEOF([float]) AC_CHECK_SIZEOF([double]) AS_IF([test x$ac_cv_type_long_double = xyes], [AC_CHECK_SIZEOF([long double])]) GA_C_POINTER_AS_INTEGER # Checks for C library functions. AC_FUNC_FORK AC_FUNC_MMAP AC_FUNC_SELECT_ARGTYPES AC_SEARCH_LIBS([floor], [m], [have_floor=1], [have_floor=0]) AC_DEFINE_UNQUOTED([HAVE_FLOOR], [$have_floor], [Define to 1 if you have the 'floor' function.]) AC_SEARCH_LIBS([modf], [m], [have_modf=1], [have_modf=0]) AC_DEFINE_UNQUOTED([HAVE_MODF], [$have_modf], [Define to 1 if you have the 'modf' function.]) AC_SEARCH_LIBS([pow], [m], [have_pow=1], [have_pow=0]) AC_DEFINE_UNQUOTED([HAVE_POW], [$have_pow], [Define to 1 if you have the 'pow' function.]) AC_SEARCH_LIBS([sqrt], [m], [have_sqrt=1], [have_sqrt=0]) AC_DEFINE_UNQUOTED([HAVE_SQRT], [$have_sqrt], [Define to 1 if you have the 'sqrt' function.]) AC_SEARCH_LIBS([hypot], [m], [have_hypot=1], [have_hypot=0]) AC_DEFINE_UNQUOTED([HAVE_HYPOT], [$have_hypot], [Define to 1 if you have the 'hypot' function.]) GA_CHECK_FUNCS([bcopy]) GA_CHECK_FUNCS([bzero]) GA_CHECK_FUNCS([create_shared_region]) GA_CHECK_FUNCS([ftruncate]) GA_CHECK_FUNCS([gethostbyname]) GA_CHECK_FUNCS([gethostname]) GA_CHECK_FUNCS([getpagesize]) GA_CHECK_FUNCS([gettimeofday]) GA_CHECK_FUNCS([memalign]) GA_CHECK_FUNCS([memcpy]) GA_CHECK_FUNCS([memset]) GA_CHECK_FUNCS([munmap]) GA_CHECK_FUNCS([pause]) GA_CHECK_FUNCS([posix_memalign]) GA_CHECK_FUNCS([putenv]) GA_CHECK_FUNCS([select]) GA_CHECK_FUNCS([setenv]) GA_CHECK_FUNCS([shared_malloc]) GA_CHECK_FUNCS([shmalloc]) GA_CHECK_FUNCS([socket]) GA_CHECK_FUNCS([srand]) GA_CHECK_FUNCS([srandom]) GA_CHECK_FUNCS([strchr]) GA_CHECK_FUNCS([strdup]) GA_CHECK_FUNCS([strerror]) GA_CHECK_FUNCS([strstr]) GA_CHECK_FUNCS([strtol]) # Checks for C libraries. GA_CHECK_LIBPLOT GA_C_OPT CFLAGS="$ga_save_CFLAGS" ######################################### # C++ compiler ######################################### AC_MSG_NOTICE AS_IF([test "x$enable_cxx" = xyes], [AC_MSG_NOTICE([C++ compiler])], [AC_MSG_NOTICE([C++ compiler (disabled, but some tests still required)])]) AC_MSG_NOTICE AC_LANG_PUSH([C++]) # GA_PROG_MPICXX is required to silence complaints that C++ source exists # even if C++ support has been disabled. ga_save_CXXFLAGS="$CXXFLAGS" GA_PROG_MPICXX CXXFLAGS="$ga_save_CXXFLAGS" AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP]) AS_IF([test "x$enable_cxx" = xyes], [ GA_COMPILER_VENDOR GA_WARN_FLAGS ga_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$ga_cv_cxx_warning_flags $CXXFLAGS" AS_IF([test "x$with_mpi" != xno], [GA_MPICXX_TEST]) # Checks for C++ header files. # Checks for C++ typedefs, structures, and compiler characteristics. GA_CXX_NAMESPACES # Checks for C++ type sizes. # Checks for C++ library functions. GA_CXX_OPT CXXFLAGS="$ga_save_CXXFLAGS" ]) # conditionals must be defined unconditionally AM_CONDITIONAL([CXX_NAMESPACES], [test x$ga_cv_cxx_namespaces = xyes]) AC_LANG_POP([C++]) ######################################### # Assembler ######################################### AC_MSG_NOTICE AC_MSG_NOTICE([Assembler]) AC_MSG_NOTICE GA_AS AM_PROG_AS ######################################### # Fortran compiler ######################################### AC_MSG_NOTICE AS_IF([test "x$enable_f77" = xyes], [AC_MSG_NOTICE([Fortran compiler])], [AC_MSG_NOTICE([Fortran compiler (disabled, but some tests still required)])]) AC_MSG_NOTICE AC_LANG_PUSH([Fortran 77]) ga_save_FFLAGS="$FFLAGS" GA_PROG_MPIF77 FFLAGS="$ga_save_FFLAGS" # If Fortran 77 compiler was not found, we disable support for it. AS_IF([test "x$F77" = x], [enable_f77=no]) # If Fortran 77 compiler does not work, we disable support for it. AC_LINK_IFELSE( [AC_LANG_PROGRAM([],[])], [], [AC_MSG_WARN([Fortran compiler does not work, disabling]) enable_f77=no F77=]) GA_F77_DISABLE_RESULTS # Perform Fortran 77 tests only if enabled. if test "x$enable_f77" = xyes; then : AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP]) GA_COMPILER_VENDOR GA_WARN_FLAGS ga_save_FFLAGS="$FFLAGS" FFLAGS="$ga_cv_f77_warning_flags $FFLAGS" # If F77 is enabled, perform a simple link test for MPI. AS_IF([test "x$with_mpi" != xno], [AS_IF([test "x$enable_mpi_tests" = xyes], [GA_MPIF77_TEST_LINK], [GA_MPIF77_TEST_COMPILE])]) GA_SUPPRESS_MESSAGE GA_F77_LIBRARY_LDFLAGS GA_F77_MAYBE_UNDERSCORING AC_F77_DUMMY_MAIN AC_F77_WRAPPERS GA_F77_CPP_SYMBOL GA_F77_FIXED GA_F77_MISMATCH_TYPE GA_F77_INTEGER_SIZE # Checks for Fortran typedefs, structures, and compiler characteristics. # Checks for Fortran type sizes. ga_save_FFLAGS="$FFLAGS"; FFLAGS="$FFLAGS $FFLAG_INT" GA_F77_CHECK_SIZEOF([INTEGER], [$ga_cv_f77_integer_size]) FFLAGS="$ga_save_FFLAGS" GA_F77_CHECK_SIZEOF([REAL], [4]) GA_F77_CHECK_SIZEOF([DOUBLE PRECISION], [8]) # Checks for Fortran library functions. GA_CHECK_FUNCS([dtime etime]) GA_F77_FLUSH # The rest of the Fortran 77 to C compatibility checks. GA_F2C_NOMAIN GA_F2C_CMDARGS GA_F2C_HIDDEN_STRING_LENGTH_CONVENTION GA_F2C_MATCH_TYPES([INTEGER], [short, int, long, long long]) GA_F2C_MATCH_TYPES([REAL], [float, double, long double]) GA_F2C_MATCH_TYPES([DOUBLE PRECISION], [float, double, long double]) GA_F77_OPT FFLAGS="$ga_save_FFLAGS" else # enable_f77=no version of AC_F77_WRAPPERS AC_DEFINE([F77_FUNC(name,NAME)], [name @%:@@%:@ _]) AC_DEFINE([F77_FUNC_(name,NAME)],[name @%:@@%:@ _]) # enable_f77=no version of GA_F77_CHECK_SIZEOF AC_DEFINE_UNQUOTED(AS_TR_CPP(sizeof_f77_INTEGER), [$ac_cv_sizeof_voidp], [The size of 'INTEGER' as computed by C's sizeof.]) AC_DEFINE_UNQUOTED(AS_TR_CPP(sizeof_f77_REAL), [4], [The size of 'REAL' as computed by C's sizeof.]) AC_DEFINE_UNQUOTED(AS_TR_CPP(sizeof_f77_DOUBLE PRECISION), [8], [The size of 'DOUBLE PRECISION' as computed by C's sizeof.]) # enable_f77=no version of GA_F2C_NOMAIN AC_SUBST([FLD_NOMAIN], []) # enable_f77=no version of GA_F2C_CMDARGS F2C_GETARG="F2C_GETARG" F2C_IARGC="F2C_IARGC" AC_SUBST([F2C_GETARG]) AC_SUBST([F2C_IARGC]) # enable_f77=no version of GA_F2C_HIDDEN_STRING_LENGTH_CONVENTION AC_DEFINE([F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS], [1], [whether the hidden string length comes after all other args]) # enable_f77=no version of GA_F2C_MATCH_TYPES AC_SUBST([F2C_INTEGER_C_TYPE], [long]) AC_SUBST([F2C_REAL_C_TYPE], [float]) AC_SUBST([F2C_DOUBLE_PRECISION_C_TYPE], [double]) fi # This is required to override what automake does, if needed. GA_F77_LD_OVERRIDE AC_LANG_POP([Fortran 77]) ############################################################################### # Checks for BLAS/LAPACK/SCALAPACK require both C and Fortran features to # have been detected. Further, they assume the current AC_LANG is C. ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([Checks for BLAS,LAPACK,ScaLAPACK]) AC_MSG_NOTICE GA_BLAS GA_LAPACK GA_SCALAPACK ############################################################################### # Checks for programs. ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([Checks for additional programs]) AC_MSG_NOTICE AC_PROG_GREP AC_PROG_SED AM_PATH_PYTHON([],[],[:]) AM_CONDITIONAL([HAVE_PYTHON], [test "x$PYTHON" != x]) AC_PATH_PROG([M4], [m4], [notfound]) AM_CONDITIONAL([HAVE_M4], [test "x$M4" != xnotfound]) AC_PATH_PROG([PERL], [perl], [notfound]) AM_CONDITIONAL([HAVE_PERL], [test "x$PERL" != xnotfound]) # X needed for xregion program, but only if desired. AC_ARG_ENABLE([xregion], [AS_HELP_STRING([--enable-xregion], [build global/X/xregion])], [enable_xregion=yes], [enable_xregion=no]) AS_IF([test "x$enable_xregion" = xyes], [AC_PATH_X AS_IF([test "x$x_includes" != x], [X_CPPFLAGS="-I$x_includes"], [X_CPPFLAGS=]) AC_SUBST([X_CPPFLAGS]) AS_IF([test "x$x_libraries" != x], [X_LDFLAGS="-L$x_libraries"], [X_LDFLAGS=]) AC_SUBST([X_LDFLAGS])]) AM_CONDITIONAL([ENABLE_XREGION], [test "x$enable_xregion" = xyes]) AM_CONDITIONAL([NO_X], [test "$no_x" = xyes]) ############################################################################### # Libtool setup -- no compiler/linker tests after this ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([Libtool setup]) AC_MSG_NOTICE # temporarily restore unwrapped compilers # this works around a bug where libtool sadly relies on matching compiler # names in order to determine features (Fortran only, I think) # libtool doesn't recognize MPI compiler names, nor should it AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP_PUSH]) GA_AR LT_INIT([disable-shared]) # and now that that's over, put the MPI compilers back # also, the above hack incorrectly sets the base compiler as the linker AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP_POP compiler="$CC" LTCC="$CC" lt_save_CC="$CC" compiler_DEFAULT="$CC" compiler_CXX="$CXX" compiler_F77="$F77"]) ############################################################################### # Remaining setup -- some tests, some individual components ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([Miscellaneous remaining setup]) AC_MSG_NOTICE # Establish some preprocessor symbols. ARMCI_SETUP # Set up MA. MA_ENABLE_ARMCI_MEM_OPTION MA_LONG_DOUBLE_TYPEDEF MA_STATS MA_VERIFY AS_IF([test "x$ga_cv_target" = xLINUX64], [AS_CASE([$host_cpu], [x86_64|ppc64], [AC_DEFINE([NOUSE_MMAP], [1], [Set some mallopt options])])]) # Create proper types for our access functions. AS_IF([test "x$ac_cv_sizeof_voidp" = "x8"], [ga_access_index_type="integer*8" ga_access_index_type_c="long"], [ga_access_index_type="integer" ga_access_index_type_c="int"]) AC_SUBST([GA_ACCESS_INDEX_TYPE], [$ga_access_index_type]) AC_SUBST([MA_ACCESS_INDEX_TYPE], [$ga_access_index_type]) AC_SUBST([MA_ACCESS_INDEX_TYPE_C], [$ga_access_index_type_c]) # Make GP arrays optional. AC_ARG_ENABLE([gparrays], [AS_HELP_STRING([--enable-gparrays], [enable Global Pointer Arrays])], [], [enable_gparrays=no]) AM_CONDITIONAL([ENABLE_GPARRAYS], [test "x$enable_gparrays" = xyes]) ############################################################################### # Test suite setup ############################################################################### AC_ARG_VAR([NPROCS], [number of procs to use for parallel tests (default 4)]) AS_IF([test "x$NPROCS" = x], [NPROCS=4]) AC_SUBST([NPROCS]) AC_ARG_VAR([MPIEXEC], [how to run parallel tests if built with MPI e.g. "mpiexec -np %NP%"]) AS_CASE([$ga_msg_comms], [TCGMSG], [TCGEXEC="`pwd`/armci/parallel.x"], [TCGMSG5], [TCGEXEC=], [MPI|TCGMSGMPI], [AS_IF([test "x$MPIEXEC" = x], [AC_PATH_PROGS([MPIEXEC], [mpirun mpiexec]) MPIEXEC="$MPIEXEC -n %NP%"])]) AC_SUBST([MPIEXEC]) AC_SUBST([TCGEXEC]) ############################################################################### # The End ############################################################################### AC_CONFIG_FILES([Makefile gaf2c/farg.h gaf2c/typesf2c.h global/src/global.fh ma/mafdecls.fh ma/matypes.h]) AC_CONFIG_FILES([tools/ga-config], [chmod +x tools/ga-config]) AC_CONFIG_SUBDIRS([armci]) AC_CONFIG_SUBDIRS([comex]) AC_OUTPUT # Report on what we found. AC_MSG_NOTICE([]) AC_MSG_NOTICE([**************************************************************]) AC_MSG_NOTICE([ $PACKAGE_NAME configured as follows:]) AC_MSG_NOTICE([**************************************************************]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([ TARGET=$ga_cv_target]) AC_MSG_NOTICE([ MSG_COMMS=$ga_msg_comms]) AC_MSG_NOTICE([ GA_MP_LIBS=$GA_MP_LIBS]) AC_MSG_NOTICE([ GA_MP_LDFLAGS=$GA_MP_LDFLAGS]) AC_MSG_NOTICE([ GA_MP_CPPFLAGS=$GA_MP_CPPFLAGS]) AC_MSG_NOTICE([ ARMCI_NETWORK=$ga_armci_network]) AC_MSG_NOTICE([ ARMCI_NETWORK_LDFLAGS=$ARMCI_NETWORK_LDFLAGS]) AC_MSG_NOTICE([ ARMCI_NETWORK_LIBS=$ARMCI_NETWORK_LIBS]) AC_MSG_NOTICE([ARMCI_NETWORK_CPPFLAGS=$ARMCI_NETWORK_CPPFLAGS]) AS_IF([test "x$enable_f77" = xyes], [ AC_MSG_NOTICE([ F77=$F77]) AS_IF([test "x$with_mpi_wrappers" = xyes], [ AC_MSG_NOTICE([ unwrapped F77=$ga_cv_mpif77_naked]) ]) AC_MSG_NOTICE([ FFLAGS=$FFLAGS]) AC_MSG_NOTICE([ FFLAG_INT=$FFLAG_INT]) AC_MSG_NOTICE([ GA_FOPT=$GA_FOPT]) ]) AC_MSG_NOTICE([ CC=$CC]) AS_IF([test "x$with_mpi_wrappers" = xyes], [ AC_MSG_NOTICE([ unwrapped CC=$ga_cv_mpic_naked]) ]) AC_MSG_NOTICE([ CFLAGS=$CFLAGS]) AC_MSG_NOTICE([ GA_COPT=$GA_COPT]) AS_IF([test "x$enable_cxx" = xyes], [ AC_MSG_NOTICE([ CXX=$CXX]) AS_IF([test "x$with_mpi_wrappers" = xyes], [ AC_MSG_NOTICE([ unwrapped CXX=$ga_cv_mpicxx_naked]) ]) AC_MSG_NOTICE([ CXXFLAGS=$CXXFLAGS]) AC_MSG_NOTICE([ GA_CXXOPT=$GA_CXXOPT]) ]) AC_MSG_NOTICE([ CPP=$CPP]) AC_MSG_NOTICE([ CPPFLAGS=$CPPFLAGS]) AC_MSG_NOTICE([ LDFLAGS=$LDFLAGS]) AC_MSG_NOTICE([ LIBS=$LIBS]) AC_MSG_NOTICE([ FLIBS=$FLIBS]) AC_MSG_NOTICE([ BLAS_LDFLAGS=$BLAS_LDFLAGS]) AC_MSG_NOTICE([ BLAS_LIBS=$BLAS_LIBS]) AC_MSG_NOTICE([ BLAS_CPPFLAGS=$BLAS_CPPFLAGS]) AC_MSG_NOTICE([ AR=$AR]) AC_MSG_NOTICE([ AR_FLAGS=$AR_FLAGS]) AC_MSG_NOTICE([ CCAS=$CCAS]) AC_MSG_NOTICE([ CCAS_FLAGS=$CCAS_FLAGS]) AC_MSG_NOTICE([ DEFS=$DEFS]) AC_MSG_NOTICE([ SHELL=$SHELL]) AS_CASE([$ga_msg_comms], [MPI|TCGMSGMPI], [ AC_MSG_NOTICE([ MPIEXEC=$MPIEXEC]) ]) AC_MSG_NOTICE([ NPROCS=$NPROCS]) AC_MSG_NOTICE([]) ga-5-3/gparrays/0000750005473000001440000000000012275260530012425 5ustar d3n000usersga-5-3/gparrays/testing/0000750005473000001440000000000012275260531014103 5ustar d3n000usersga-5-3/gparrays/testing/test.F0000640005473000001440000000007311476240075015175 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif end ga-5-3/gparrays/testing/transpose.c0000640005473000001440000013525212213710423016266 0ustar d3n000users #include #include "macdecls.h" #include "ga.h" #include "gp.h" #define USE_HYPRE 0 #define IMAX 100 #define JMAX 100 #define KMAX 100 #define LMAX IMAX*JMAX*KMAX #define MAXVEC 5000000 #define EPSLN 1.0d-10 #define CHECK_BOUND 1 #define bb_a(ib) bb_v(bb_i + (ib)) #define cc_a(ib) cc_v(cc_i + (ib)) #define Integer int #define MAX_FACTOR 10000 #if USE_HYPRE #include "HYPRE.h" #include "HYPRE_struct_mv.h" #include "mpi.h" #endif void grid_factor(int p, int xdim, int ydim, int zdim, int *idx, int *idy, int *idz) { int i, j; int ip, ifac, pmax, prime[MAX_FACTOR]; int fac[MAX_FACTOR]; int ix, iy, iz, ichk; i = 1; /* factor p completely first, find all prime numbers, besides 1, less than or equal to the square root of p */ ip = (int)(sqrt((double)p))+1; pmax = 0; for (i=2; i<=ip; i++) { ichk = 1; for (j=0; j MAX_FACTOR) printf("Overflow in grid_factor\n"); prime[pmax-1] = i; } } /* find all prime factors of p */ ip = p; ifac = 0; for (i=0; i= 0; i--) { ix = xdim/(*idx); iy = ydim/(*idy); iz = zdim/(*idz); if (ix >= iy && ix >= iz && ix > 1) { *idx = fac[i]*(*idx); } else if (iy >= ix && iy >= iz && iy > 1) { *idy = fac[i]*(*idy); } else if (iz >= ix && iz >= iy && iz > 1) { *idz = fac[i]*(*idz); } else { printf("Too many processors in grid factoring routine\n"); } } } /* Short subroutine for multiplying sparse matrix block with vector segment */ void loc_matmul(double *a_mat, int *jvec, int *ivec, double *bvec, double *cvec, int nrows) { double tempc; int i, j, jj, jmin,jmax; for (i=0; i hi[0]) { jdx = kp*pdi*pdj + jp*pdi + ip + 1; ecnt[jdx] = ecnt[jdx] + 1; } else { ecnt[me] = ecnt[me] + 1; } } if (ix-1 >= 0) { if (ix-1 < lo[0]) { jdx = kp*pdi*pdj + jp*pdi + ip - 1; ecnt[jdx] = ecnt[jdx] + 1; } else { ecnt[me] = ecnt[me] + 1; } } if (iy+1 <= jdim-1) { if (iy+1 > hi[1]) { jdx = kp*pdi*pdj + (jp+1)*pdi + ip; ecnt[jdx] = ecnt[jdx] + 1; } else { ecnt[me] = ecnt[me] + 1; } } if (iy-1 >= 0) { if (iy-1 < lo[1]) { jdx = kp*pdi*pdj + (jp-1)*pdi + ip; ecnt[jdx] = ecnt[jdx] + 1; } else { ecnt[me] = ecnt[me] + 1; } } if (iz+1 <= kdim-1) { if (iz+1 > hi[2]) { jdx = (kp+1)*pdi*pdj + jp*pdi + ip; ecnt[jdx] = ecnt[jdx] + 1; } else { ecnt[me] = ecnt[me] + 1; } } if (iz-1 >= 0) { if (iz-1 < lo[2]) { jdx = (kp-1)*pdi*pdj + jp*pdi + ip; ecnt[jdx] = ecnt[jdx] + 1; } else { ecnt[me] = ecnt[me] + 1; } } } /* Create list of processors that this processor is coupled to. If ecnt[i] is greater than zero then process i is coupled to this process. ltotal_procs: the total number of other processor that this process is coupled to. This includes this process (the diagonal term). lproclist[i]: the IDs of the processor that this processor is coupled to lproc_inv[i]: the location in lproclist of processor i. If processor i is not coupled to this process, the lproc_inv[i] = -1 ncnt: total number of non-zero elements held by this process nnz_list[i]: number of processes coupled to process i by sparse blocks nnz: total number of sparse blocks */ ltotal_procs = 0; ncnt = 0; for (i=0; i 0) { ltotal_procs++; ncnt += ecnt[i]; } } nsave = ncnt; lproclist = (int*)malloc(ltotal_procs*sizeof(int)); lproc_inv = (int*)malloc(nprocs*sizeof(int)); licnt = (int*)malloc(ltotal_procs*sizeof(int)); for (i=0; i 0) { lproclist[j] = i; if (j > 0) { lvoffset[j] = ecnt[lproclist[j-1]]+lvoffset[j-1]; } lproc_inv[i] = j; j++; } } /* Create arrays the hold the sparse block representation of the sparse matrix gp_block[nnz]: Global Pointer array holding the sparse sub-matrices g_j[nnz]: column block indices for the element in gp_block g_i[nprocs]: row block indices for the elements in g_j */ tmapc = (int*)malloc((nprocs+1)*sizeof(int)); tmapc[0] = 0; for (i=1; i<=nprocs; i++) { tmapc[i] = tmapc[i-1]+nnz_list[i-1]; } *gp_block = GP_Create_handle(); GP_Set_dimensions(*gp_block,one,&nnz); GP_Set_irreg_distr(*gp_block, tmapc, &nprocs); GP_Allocate(*gp_block); *g_j = NGA_Create_handle(); NGA_Set_data(*g_j,one,&nnz,C_INT); NGA_Set_irreg_distr(*g_j, tmapc, &nprocs); NGA_Allocate(*g_j); for (i=0; i hi[0]) { jdx = kp*pdi*pdj + jp*pdi + ip + 1; il = 0; jl = iy - lo[1]; kl = iz - lo[2]; ldpi = xld[ip+1]; } else { jdx = me; il = ix - lo[0] + 1; jl = iy - lo[1]; kl = iz - lo[2]; ldpi = ldi; } idx = kl*ldpi*ldj + jl*ldpi + il; nghbrs[ncnt] = idx; procid[ncnt] = jdx; } if (ix-1 >= 0) { ncnt++; ixn[ncnt] = ix - 1; iyn[ncnt] = iy; izn[ncnt] = iz; if (ix-1 < lo[0]) { jdx = kp*pdi*pdj + jp*pdi + ip - 1; il = xld[ip-1] - 1; jl = iy - lo[1]; kl = iz - lo[2]; ldmi = xld[ip-1]; } else { jdx = me; il = ix - lo[0] - 1; jl = iy - lo[1]; kl = iz - lo[2]; ldmi = ldi; } idx = kl*ldmi*ldj + jl*ldmi + il; nghbrs[ncnt] = idx; procid[ncnt] = jdx; } if (iy+1 <= jdim-1) { ncnt++; ixn[ncnt] = ix; iyn[ncnt] = iy + 1; izn[ncnt] = iz; if (iy+1 > hi[1]) { jdx = kp*pdi*pdj + (jp+1)*pdi + ip; il = ix - lo[0]; jl = 0; kl = iz - lo[2]; ldpj = yld[jp+1]; } else { jdx = me; il = ix - lo[0]; jl = iy - lo[1] + 1; kl = iz - lo[2]; ldpj = ldj; } idx = kl*ldi*ldpj + jl*ldi + il; nghbrs[ncnt] = idx; procid[ncnt] = jdx; } if (iy-1 >= 0) { ncnt++; ixn[ncnt] = ix; iyn[ncnt] = iy - 1; izn[ncnt] = iz; if (iy-1 < lo[1]) { jdx = kp*pdi*pdj + (jp-1)*pdi + ip; il = ix - lo[0]; jl = yld[jp-1] - 1; kl = iz - lo[2]; ldmj = yld[jp-1]; } else { jdx = me; il = ix - lo[0]; jl = iy - lo[1] - 1; kl = iz - lo[2]; ldmj = ldj; } idx = kl*ldi*ldmj + jl*ldi + il; nghbrs[ncnt] = idx; procid[ncnt] = jdx; } if (iz+1 <= kdim-1) { ncnt++; ixn[ncnt] = ix; iyn[ncnt] = iy; izn[ncnt] = iz + 1; if (iz+1 > hi[2]) { jdx = (kp+1)*pdi*pdj + jp*pdi + ip; il = ix - lo[0]; jl = iy - lo[1]; kl = 0; } else { jdx = me; il = ix - lo[0]; jl = iy - lo[1]; kl = iz - lo[2] + 1; } idx = kl*ldi*ldj + jl*ldi + il; nghbrs[ncnt] = idx; procid[ncnt] = jdx; } if (iz-1 >= 0) { ncnt++; ixn[ncnt] = ix; iyn[ncnt] = iy; izn[ncnt] = iz - 1; if (iz-1 < lo[2]) { jdx = (kp-1)*pdi*pdj + jp*pdi + ip; il = ix - lo[0]; jl = iy - lo[1]; kl = zld[kp-1] - 1; } else { jdx = me; il = ix - lo[0]; jl = iy - lo[1]; kl = iz - lo[2] - 1; } idx = kl*ldi*ldj + jl*ldi + il; nghbrs[ncnt] = idx; procid[ncnt] = jdx; } /* sort indices so that neighbors run from lowest to highest local index. This sort is not particularly efficient but ncnt is generally small */ ncnt++; for (j=0; j nghbrs[k]) { itmp = nghbrs[j]; nghbrs[j] = nghbrs[k]; nghbrs[k] = itmp; itmp = ixn[j]; ixn[j] = ixn[k]; ixn[k] = itmp; itmp = iyn[j]; iyn[j] = iyn[k]; iyn[k] = itmp; itmp = izn[j]; izn[j] = izn[k]; izn[k] = itmp; itmp = procid[j]; procid[j] = procid[k]; procid[k] = itmp; } } } for (k=0; k= ntot) { printf("p[%d] Invalid neighbor %d\n",me,nghbrs[k]); } } /* set weights corresponding to a finite difference Laplacian on a 7-point stencil */ for (j=0; j= nsave) { printf("p[%d] Out of bounds (lvoffset+licnt)[%d]: %d\n",me,idx,lvoffset[idx]+licnt[idx]); } if (lvoffset[idx]+licnt[idx]>=idbg) { } /* TODO: Check this carefully */ jval[lvoffset[idx]+licnt[idx]] = nghbrs[j]; ivalt[idx*isize+i-imin] = ivalt[idx*isize+i-imin]+1; licnt[idx]++; } } /* finish evaluating ival array */ for (i=0; i MAXVEC) NGA_Error("ISIZE exceeds MAXVEC in local arrays ",isize); /* Local portion of sparse matrix has been evaluated and decomposed into blocks that match partitioning of right hand side across processors. The following data is available at this point: 1) ltotal_procs: the number of processors that are coupled to this one via the sparse matrix 2) lproclist(ltotal_procs): a list of processor IDs that are coupled to this processor 3) lproc_inv(nprocs): The entry in proc_list that corresponds to a given processor. If the entry is -1 then that processor does not couple to this processor. 4) licnt(ltotal_procs): The number of non-zero entries in the sparse matrix that couple the process represented by proc_list(j) to this process 5) lvoffset(ltotal_procs): The offsets for the non-zero data in the arrays rval and jval for the blocks that couple this processor to other processes in proc_list 6) offset(nprocs): the offset array for the distributed right hand side vector These arrays describe how the sparse matrix is layed out both locally and across processors. In addition, the actual data for the distributed sparse matrix is found in the following arrays: 1) rval: values of matrix for all blocks on this processor 2) jval: j-indices of matrix for all blocks on this processor 3) ival(ltotal_procs*(lnsize(me)+1)): starting index in rval and jval for each row in each block */ NGA_Sync(); /* Create a sparse array of sparse blocks. Each block element is divided into for sections. The first section consists of 7 ints and contains the parameters imin: minimum i index represented by block imin: maximum i index represented by block jmin: minimum j index represented by block jmin: maximum j index represented by block iblock: row index of block jblock: column index of block nnz: number of non-zero elements in block The next section consists of nnz doubles that represent the non-zero values in the block. The third section consists of nnz ints and contains the local j indices of all values. The final section consists of (imax-imin+2) ints and contains the starting index in jval and rval for the each row between imin and imax. An extra value is included at the end and is set equal to nnz+1. This is included to simplify some coding. */ offset = 0; for (i=0; i ntot-1) { bhi[1] = ntot-1; } btot = (hi[0]-lo[0]+1)*(hi[1]-lo[1]+1)*(hi[2]-lo[2]+1); for (i=0; i 1.0e-10) { printf("p[%d] i: %d vector: %f cbuf: %f\n",me,i,vector[i],cbuf[i]); } prdot2 = prdot2 + (vector[i]-cbuf[i])*(vector[i]-cbuf[i]); } NGA_Dgop(&dotga,1,"+"); NGA_Dgop(&dothypre,1,"+"); NGA_Dgop(&prdot2,1,"+"); prtot2 += sqrt(prdot2); gatot2 += sqrt(dotga); hypretot2 += sqrt(dothypre); free(cbuf); free(blk_ptr); #endif /* Clean up transposed matrix */ GP_Distribution(gt_a_data,me,blo,bhi); for (i=blo[0]; i #include "ga.h" #include "gp.h" #include "macdecls.h" #include "mp3.h" #include /* #define N_I 4 #define N_J 4 */ #define N_I 32 #define N_J 32 #define N_K 32 /* #define Q_I 2 #define Q_J 2 */ #define Q_I 8 #define Q_J 8 /* get random patch for GP */ void get_range( int ndim, int dims[], int lo[], int hi[], int g_p) { int dim, nproc, i, itmp; nproc = NGA_Nodeid(); /* Mix up values on different processors */ for (i=0; i MAX_FACTOR) printf("Overflow in grid factor\n"); prime[pmax-1] = i; } } /** * find all prime factors of p */ ip = p; ifac = 0; for (i=0; i=0; ii--) { i = idim/ti; j = jdim/tj; k = kdim/tk; if (i >= j && i >= k && i > 1) { ti = fac[ii]*ti; } else if (j >= i && j >= k && j > 1) { tj = fac[ii]*tj; } else if (k >= i && k >= j && k > 1) { tk = fac[ii]*tk; } else { printf("Too many processors in factoring routine\n"); } } free(prime); free(fac); *pdi = ti; *pdj = tj; *pdk = tk; } void do_work() { int g_p, me, i, ii, j, jj, l, k, nv; int nproc, next; int m_k_ij, m_l_ij, idx; int dims[2], lo[2], hi[2], ndim; int lo_t[2], hi_t[2]; int dims3[3], lo3[3], hi3[3], blocks[3], chunk[3]; int nelems, nsize; int idim, jdim, kdim, subscript[2], size; int pdi, pdj, pdk; int ld[2], ld_sz[2]; int checksize; int *ptr, *mapc; void **buf_ptr; void *buf; int *buf_size; void *elem_buf; int *subscripts; /* Create Global Pointer array */ dims[0] = N_I; dims[1] = N_J; ndim = 2; me = NGA_Nodeid(); nproc = NGA_Nnodes(); g_p = GP_Create_handle(); GP_Set_dimensions(g_p, ndim, dims); GP_Allocate(g_p); /* Find locally owned elements in Global Pointer array. Only these elements can be assigned to data using the GP_Assign_local_element routine. */ GP_Distribution(g_p, me, lo, hi); idim = hi[0] - lo[0] + 1; jdim = hi[1] - lo[1] + 1; for (ii=0; iihi[0] || subscript[1]hi[1]) { printf("p[%d] assign i: %d j: %d lo[0]: %d hi[0]: %d lo[1]: %d hi[1]: %d\n", me,subscript[0],subscript[1],lo[0],hi[0],lo[1],hi[1]); } GP_Assign_local_element(g_p, subscript, (void*)ptr, size); } } /* Guarantee data consistency */ GP_Sync(); /*GP_Debug(g_p);*/ /* Generate bounding coordinates to an arbitrary patch in GP array */ get_range(ndim, dims, lo, hi, g_p); /* Find the total amount of data contained in the patch */ nsize = (hi[0]-lo[0]+1)*(hi[1]-lo[1]+1); GP_Get_size(g_p, lo, hi, &size); /* Allocate local buffers and retrieve data */ buf = (void*)malloc(size); buf_ptr = (void**)malloc(nsize*sizeof(void*)); buf_size = (int*) malloc(nsize*sizeof(int)); ld[1] = hi[0]-lo[0]+1; ld[0] = hi[1]-lo[1]+1; ld_sz[1] = hi[0]-lo[0]+1; ld_sz[0] = hi[1]-lo[1]+1; GA_Set_debug(1); GP_Get(g_p, lo, hi, buf, buf_ptr, ld, buf_size, ld_sz, &size, 0); if (me==0) printf("\nCompleted GP_Get\n"); GA_Set_debug(0); /* Check contents of buffers to see if data is as expected */ for (i=lo[0]; i<=hi[0]; i++) { ii = i - lo[0]; for (j=lo[1]; j<=hi[1]; j++) { jj = j - lo[1]; idx = j*N_I + i; ptr = (int*)buf_ptr[ii*ld[0]+jj]; m_k_ij = i%Q_I + 1; m_l_ij = j%Q_J + 1; if (buf_size[ii*ld_sz[0]+jj] != 4*(ptr[0]*ptr[1]+2)) { printf("p[%d] size expected: %d actual: %d\n",me,buf_size[ii*ld_sz[0]+jj], 4*(ptr[0]*ptr[1]+2)); } if (ptr[0] != m_k_ij) { printf("p[%d] [%d,%d] Dimension(1) i actual: %d expected: %d\n",me,i,j,ptr[0],m_k_ij); } if (ptr[1] != m_l_ij) { printf("p[%d] [%d,%d] Dimension(1) j actual: %d expected: %d\n",me,i,j,ptr[1],m_l_ij); } for (k=0; k extern void GP_Access_element(int g_p, int *subscript, void *ptr, int *size); extern int GP_Allocate(int g_p); extern void GP_Assign_local_element(int g_p, int *subscript, void *ptr, int size); extern int GP_Create_handle(); extern void GP_Debug(int g_p); extern int GP_Destroy(int g_p); extern void GP_Distribution(int g_p, int proc, int *lo, int *hi); extern void GP_Free(void* ptr); extern void* GP_Free_local_element(int g_p, int *subscript); extern int GP_Get_dimension(int g_p); extern void GP_Gather_size(int g_p, int nv, int *subscript, int *size); extern void GP_Gather(int g_p, int nv, int *subscript, void *buf, void **buf_ptr, int *buf_size, int *size, int setbuf); extern void GP_Get_size(int g_p, int *lo, int *hi, int *size); extern void GP_Get(int g_p, int *lo, int *hi, void *buf, void **buf_ptr, int *ld, void *buf_size, int *ld_sz, int *size, int setbuf); extern void GP_Initialize(); extern void* GP_Malloc(size_t size); extern void GP_Memzero(int g_p); extern void GP_Put(int g_p, int *lo, int *hi, void **buf_ptr, int *ld, void *buf_size, int *ld_sz, int *size, int checksize); extern void GP_Release_element(int g_p, int *subscript); extern void GP_Release_update_element(int g_p, int *subscript); extern void GP_Scatter(int g_p, int nv, int *subscript, void **buf_ptr, int *buf_size, int *size, int checksize); extern void GP_Set_chunk(int g_p, int *chunk); extern void GP_Set_dimensions(int g_p, int ndim, int *dims); extern void GP_Set_irreg_distr(int g_p, int *mapc, int *blocks); extern void GP_Sync(); extern void GP_Terminate(); ga-5-3/gparrays/src/gpcapi.c0000640005473000001440000002061512024206011014612 0ustar d3n000users/** * @file gpcapi.c * * Implements the C interface. * These calls forward to the (possibly) weak symbols of the internal * implementations. */ #if HAVE_CONFIG_H # include "config.h" #endif #include #include #include "gp.h" #include "gpbase.h" #include "gp-papi.h" #if ENABLE_PROFILING # include "gp-wapi.h" #else # include "gp-wapidefs.h" #endif #ifdef USE_FAPI # define COPYC2F(carr, farr, n){\ int i; for(i=0; i< (n); i++)(farr)[i]=(Integer)(carr)[i];} # define COPYF2C(farr, carr, n){\ int i; for(i=0; i< (n); i++)(carr)[i]=(int)(farr)[i];} # define COPYINDEX_F2C COPYF2C #else # define COPYC2F(carr, farr, n){\ int i; for(i=0; i< (n); i++)(farr)[n-i-1]=(Integer)(carr)[i];} # define COPYINDEX_C2F(carr, farr, n){\ int i; for(i=0; i< (n); i++)(farr)[n-i-1]=(Integer)(carr)[i]+1;} # define COPYINDEX_F2C(farr, carr, n){\ int i; for(i=0; i< (n); i++)(carr)[n-i-1]=(int)(farr)[i] -1;} #endif static Integer* gp_copy_map(int block[], int block_ndim, int map[]); void GP_Access_element(int g_p, int *subscript, void *ptr, int *size) { Integer ag_p = (Integer)g_p; Integer _gp_idx[GP_MAX_DIM]; Integer asize; int ndim = wgp_get_dimension(ag_p); COPYINDEX_C2F(subscript,_gp_idx,ndim); wgp_access_element(ag_p, _gp_idx, ptr, &asize); *size = (int)asize; } int GP_Allocate(int g_p) { Integer ag_p; ag_p = (Integer)g_p; return (int)wgp_allocate(ag_p); } void GP_Assign_local_element(int g_p, int *subscript, void *ptr, int size) { Integer ag_p = (Integer)g_p; Integer _gp_idx[GP_MAX_DIM]; Integer asize = (Integer)size; int ndim = wgp_get_dimension(ag_p); COPYINDEX_C2F(subscript,_gp_idx,ndim); wgp_assign_local_element(ag_p, _gp_idx, ptr, asize, 4); } int GP_Create_handle() { return (int)wgp_create_handle(); } void GP_Debug(int g_p) { Integer ag_p; ag_p = (Integer)g_p; wgp_debug(ag_p, 4); } int GP_Destroy(int g_p) { Integer ag_p; ag_p = (Integer)g_p; return (int)wgp_destroy(ag_p); } void GP_Distribution(int g_p, int proc, int *lo, int *hi) { Integer ag_p = (Integer)g_p; Integer p = (Integer)proc; int ndim = (int)wgp_get_dimension(ag_p); Integer _gp_lo[GP_MAX_DIM], _gp_hi[GP_MAX_DIM]; wgp_distribution(ag_p, p, _gp_lo, _gp_hi); COPYINDEX_F2C(_gp_lo, lo, ndim); COPYINDEX_F2C(_gp_hi, hi, ndim); } void GP_Free(void* ptr) { wgp_free(ptr); } void* GP_Free_local_element(int g_p, int *subscript) { Integer ag_p = (Integer)g_p; int ndim = wgp_get_dimension(ag_p); Integer _gp_idx[GP_MAX_DIM]; COPYINDEX_C2F(subscript, _gp_idx, ndim); return wgp_free_local_element(ag_p, _gp_idx); } int GP_Get_dimension(int g_p) { return wgp_get_dimension(g_p); } void GP_Gather_size(int g_p, int nv, int *subscript, int *size) { int idx, i; Integer ag_p = (Integer)g_p; Integer anv = (Integer)nv; Integer asize; Integer *asubscript; int ndim = wgp_get_dimension(ag_p); asubscript = (Integer*)malloc((int)ndim*nv*sizeof(Integer)); if (asubscript == NULL) GA_Error("Memory allocation in GP_Gather_size failed",0); /* adjust the indices for fortran interface */ for (idx=0; idx /* Routines from gpbase.c */ extern void pgp_debug(Integer g_p, Integer intsize); extern void pgp_initialize(); extern void pgp_terminate(); extern void* pgp_malloc(size_t size); extern void pgp_free(void* ptr); extern Integer pgp_create_handle(); extern void pgp_set_dimensions(Integer g_p, Integer ndim, Integer *dims, Integer intsize); extern Integer pgp_get_dimension(Integer g_p); extern void pgp_set_chunk(Integer g_p, Integer *chunk); extern void pgp_set_irreg_distr(Integer g_p, Integer *mapc, Integer *nblock); extern logical pgp_allocate(Integer g_p); extern logical pgp_destroy(Integer g_p); extern void pgp_distribution(Integer g_p, Integer proc, Integer *lo, Integer *hi); extern void pgp_assign_local_element(Integer g_p, Integer *subscript, void *ptr, Integer size, Integer intsize); extern void* pgp_free_local_element(Integer g_p, Integer *subscript); extern void pgp_memzero(Integer g_p, Integer intsize); extern void pgp_sync(); /* Routines from gponesided.c */ extern void pgp_get(Integer g_p, Integer *lo, Integer *hi, void *buf, void **buf_ptr, Integer *ld, void *buf_size, Integer *ld_sz, Integer *size, Integer isize, Integer setbuf); extern void pgp_put(Integer g_p, Integer *lo, Integer *hi, void **buf_ptr, Integer *ld, void *buf_size, Integer *ld_sz, Integer *size, Integer checksize, Integer isize); extern void pgp_get_size(Integer g_p, Integer *lo, Integer *hi, Integer *size, Integer isize); extern void pgp_access_element(Integer g_p, Integer *subscript, void *ptr, Integer *size); extern void pgp_release_element(Integer g_p, Integer *subscript); extern void pgp_release_update_element(Integer g_p, Integer *subscript); extern void pgp_gather_size(Integer g_p, Integer nv, Integer *subscript, Integer *size, Integer intsize); extern void pgp_gather(Integer g_p, Integer nv, Integer *subscript, void *buf, void **buf_ptr, void *buf_size, Integer *size, Integer intsize, Integer setbuf); extern void pgp_scatter(Integer g_p, Integer nv, Integer *subscript, void **buf_ptr, void *buf_size, Integer *size, Integer checksize, Integer intsize); #endif /* GPPAPI_H */ ga-5-3/gparrays/src/gpbase.c0000640005473000001440000003555211723262644014641 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_ASSERT_H # include #endif #include "gacommon.h" #include "typesf2c.h" #include "ga-papi.h" #include "gp-papi.h" #include "gp-wapi.h" #include "gpbase.h" #include "armci.h" extern void gpi_onesided_init(); extern void gpi_onesided_clean(); gp_array_t *GP; int GP_pointer_type; /** * Initialize internal library structures for Global Pointer Arrays */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wgp_initialize = pgp_initialize #endif void pgp_initialize() { Integer i; GP = (gp_array_t*)malloc(sizeof(gp_array_t)*GP_MAX_ARRAYS); GP_pointer_type = pnga_register_type(sizeof(armci_meminfo_t)); if (!GP) { pnga_error("gp_initialize: malloc GP failed",0); } for (i=0; iarmci_addr = ((char*)meminfo_ptr->armci_addr) + meminfo_sz; meminfo_ptr->addr = ((char*)meminfo_ptr->addr) + meminfo_sz; meminfo_ptr->size -= meminfo_sz; /*bjp printf("p[%d]: armci_addr = %ld\n", pnga_nodeid(), (long)meminfo_ptr->armci_addr); */ return meminfo_ptr->addr; } /** * Special free() for Global Pointer Arrays */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wgp_free = pgp_free #endif void pgp_free(void* ptr) { armci_meminfo_t meminfo; size_t meminfo_sz = sizeof(armci_meminfo_t); if(!ptr) pnga_error("gp_free: Invalid pointer",0); memcpy( &meminfo, ((char*)ptr)-meminfo_sz, meminfo_sz); /* update the meminfo structure */ meminfo.armci_addr = ((char*)meminfo.armci_addr) - meminfo_sz; meminfo.addr = ((char*)meminfo.addr) - meminfo_sz; meminfo.size += meminfo_sz; ARMCI_Memctl(&meminfo); } /** * Create a handle for a GP array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wgp_create_handle = pgp_create_handle #endif Integer pgp_create_handle() { Integer i, handle=-GP_OFFSET-1; for (i=0; i GP_MAX_DIM) { pnga_error("gp_set_dimensions: dimension is not valid", ndim); } for (i=0; iGP[handle].hi[i]) { /*bjp printf("p[%d] subscript[%d]: %d\n",pnga_nodeid(),i,subscript[i]); printf("p[%d] lo[%d]: %d hi[%d]: %d\n",pnga_nodeid(),i,GP[handle].lo[i],i, GP[handle].hi[i]); */ /* printf("p[%d] subscript[%d]: %d lo[%d]: %d hi[%d]: %d\n",pnga_nodeid(), i, subscript[i], i, GP[handle].lo[i], i, GP[handle].hi[i]); */ pnga_error("gp_assign_local_element: subscript out of bounds", i); } } pnga_access_ptr(GP[handle].g_size_array,subscript,subscript,&gp_ptr,ld); if (intsize == 4) { *((int*)gp_ptr) = (int)size; } else { *((int64_t*)gp_ptr) = (int64_t)size; } /*bjp printf("p[%ld] (internal) size %d at location [%ld:%ld]\n", (long)pnga_nodeid(), *((int*)gp_ptr), (long)subscript[0],(long)subscript[1]); */ pnga_release_update(GP[handle].g_size_array, subscript, subscript); pnga_access_ptr(GP[handle].g_ptr_array,subscript,subscript,&gp_ptr,ld); *((armci_meminfo_t*)gp_ptr) = *((armci_meminfo_t*)(((char*)ptr)-sizeof(armci_meminfo_t))); pnga_release_update(GP[handle].g_ptr_array, subscript, subscript); } /** * Free local data element using access via the Global Pointer array. * @param[in] g_p pointer array handle * @param[in] subscript[ndim] location of element in pointer array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wgp_free_local_element = pgp_free_local_element #endif void* pgp_free_local_element(Integer g_p, Integer *subscript) { armci_meminfo_t *gp_ptr; void *ptr; Integer handle, ld[GP_MAX_DIM-1], i; GP_Int buf; handle = g_p + GP_OFFSET; /* check to make sure that element is located in local block of GP array */ for (i=0; iGP[handle].hi[i]) { pnga_error("gp_free_local_element: subscript out of bounds", i); } } pnga_access_ptr(GP[handle].g_ptr_array,subscript,subscript,&gp_ptr,ld); ptr = (*gp_ptr).addr; memset((void*)gp_ptr,0,sizeof(armci_meminfo_t)); pnga_release_update(GP[handle].g_ptr_array, subscript, subscript); /* set corresponding element of size array to zero */ buf = 0; for (i=0; i #endif #if HAVE_STRING_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_ASSERT_H # include #endif #include "gacommon.h" #include "typesf2c.h" #include "gpbase.h" #include "armci.h" #include "message.h" #include "ga-papi.h" #include "gp-papi.h" #include "gp-wapi.h" #define gpm_GetRangeFromMap(p, ndim, plo, phi){ \ Integer _mloc = p* ndim *2; \ *plo = (Integer*)_gp_map + _mloc; \ *phi = *plo + ndim; \ } /** * Utility arrays used in onesided communication */ Integer *_gp_map; Integer *_gp_proclist; /** * Initialize utility arrays */ void gpi_onesided_init() { Integer nproc; nproc = pnga_pgroup_nnodes(pnga_pgroup_get_world()); _gp_proclist = (Integer*)malloc((size_t)nproc*sizeof(Integer)); _gp_map = (Integer*)malloc((size_t)(nproc*2*GP_MAX_DIM)*sizeof(Integer)); } /** * Clean utility arrays */ void gpi_onesided_clean() { free(_gp_map); free(_gp_proclist); } /** * Get sizes of element in GP array and return them to a local buffer. Also * evaluate the total size of the data to be copied and return that in the * variable size. intsize is an internal variable that can be used to * distinguish between 4 and 8 byte integers * @param[in] g_p pointer array handle * @param[in] lo[ndim] lower corner of pointer array block * @param[in] hi[ndim] upper corner of pointer array block * @param[out] buf buffer that holds element sizes * @param[in] ld[ndim-1] physical dimensions of buffer * @param[out] size total size of requested data * @param[in] intsize parameter to distinguish between 4 and 8 * byte integers */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wgp_get_size = pgp_get_size #endif void pgp_get_size(Integer g_p, Integer *lo, Integer *hi, Integer *size, Integer intsize) { Integer handle, ndim, i, nelems; Integer block_ld[GP_MAX_DIM-1]; int *int_ptr; int *long_ptr; handle = g_p + GP_OFFSET; if (!GP[handle].active) { pnga_error("gp_get_size: inactive array handle specified", g_p); } ndim = pnga_ndim(GP[handle].g_ptr_array); for (i=0; i GP[handle].hi[i]) pnga_error("gp_get_size: illegal block size specified", g_p); } /* Find total number of elements in block and get strides of requested block */ ndim = GP[handle].ndim; nelems = 1; for (i=0; i GP[handle].hi[i]) pnga_error("gp_get: illegal block size specified", g_p); } /*bjp printf("p[%d] (gp_get) lo[0]: %d hi[0]: %d lo[1]: %d hi[1]: %d\n", me,lo[0],hi[0],lo[1],hi[1]); */ if (!setbuf) { pnga_get(GP[handle].g_size_array, lo, hi, buf_size, ld_sz); } /* Get strides of requested block */ ndim = GP[handle].ndim; nelems = 1; for (i=0; i=0; d--) { offset_sz = offset_sz*ld_sz[d] + index[d]; offset_d = offset_d*ld[d] + index[d]; } /* evaluate offset in data buffer */ buf_ptr[offset_d] = (void*)(((char*)buf)+offset_ptr); if (intsize == 4) { offset_ptr += ((int*)buf_size)[offset_sz]; } else { offset_ptr += ((int64_t*)buf_size)[offset_sz]; } /*bjp printf("p[%d] (gp_get) buf_size[%d]: %d\n",me,offset_sz,((int*)buf_size)[offset_sz]); */ idx++; } *size = offset_ptr; /* locate the processors containing some portion of the patch represented by * lo and hi and return the results in _gp_map, gp_proclist, and np. * _gp_proclist contains a list of processors containing some portion of the * patch, _gp_map contains the lower and upper indices of the portion of the * patch held by a given processor and np contains the number of processors * that contain some portion of the patch. */ pnga_locate_region(GP[handle].g_size_array, lo, hi, _gp_map, _gp_proclist, &np); /* Loop over processors containing data */ for (idx=0; idx=0; d--) { offset_rem = offset_rem*block_ld_loc[d] + index[d]; offset_sz = offset_sz*ld_sz[d] + index[d] + plo[d] - lo[d]; offset_d = offset_d*ld[d] + index[d] + plo[d] - lo[d]; } /*bjp printf("p[%d] j: %d offset_rem: %d offset_sz: %d offset_d: %d\n", me, j, offset_rem, offset_sz, offset_d); */ if (intsize == 4) { bytes = (int)((int*)buf_size)[offset_sz]; } else { bytes = (int)((int64_t*)buf_size)[offset_sz]; } /*bjp printf("p[%d] bytes: %d\n",me,bytes); */ if (bytes > 0) { if (rem_ptr[offset_rem].cpid == me) { (src_array[j])[0] = ((void*)(rem_ptr[offset_rem].addr)); /* handle remote and SMP case */ } else if (pnga_cluster_proc_nodeid(me) == pnga_cluster_proc_nodeid(rem_ptr[offset_rem].cpid)) { (src_array[j])[0] = ARMCI_Memat(&rem_ptr[offset_rem], sizeof(armci_meminfo_t)); } else { (src_array[j])[0] = (void*)rem_ptr[offset_rem].armci_addr; } (dst_array[j])[0] = (void*)buf_ptr[offset_d]; #define DBG desc[jcnt].src_ptr_array = src_array[j]; desc[jcnt].dst_ptr_array = dst_array[j]; desc[jcnt].bytes = bytes; desc[jcnt].ptr_array_len = 1; /*bjp printf("p[%ld] jcnt: %d nelems: %ld index[%ld,%ld] bytes: %d src_ptr: %ld p: %d dst_ptr: %ld\n", (long)pnga_nodeid(), jcnt, (long)nelems, (long)(index[0]+plo[0]), (long)(index[1]+plo[1]), desc[jcnt].bytes, (long)desc[jcnt].src_ptr_array[0], (int)p, (long)desc[jcnt].dst_ptr_array[0]); */ jcnt++; } else { /*bjp printf("p[%ld] null pointer at i: %ld j: %ld\n", (long)pnga_nodeid(), (long)(index[0]+plo[0]), (long)(index[1]+plo[1])); */ } } /*bjp printf("p[%ld] (gp_get) jcnt: %d p: %d\n",(long)pnga_nodeid(),jcnt,p); */ #ifdef XDBG for (j=0; j 0) { rc = ARMCI_GetV(desc, (int)jcnt, (int)p); if (rc) pnga_error("ARMCI_GetV failure in gp_get",rc); } #endif for (j=0; j GP[handle].hi[i]) pnga_error("gp_put: illegal block size specified", g_p); } /* Get strides of target block */ ndim = GP[handle].ndim; nelems = 1; for (i=0; i=0; d--) { offset_rem = offset_rem*block_ld_loc[d] + index[d]; offset_sz = offset_sz*ld_sz[d] + index[d] + plo[d] - lo[d]; offset_d = offset_d*ld[d] + index[d] + plo[d] - lo[d]; } if (intsize == 4) { bytes = (int)((int*)buf_size)[offset_sz]; } else { bytes = (int)((int64_t*)buf_size)[offset_sz]; } if (bytes > 0) { if (rem_ptr[offset_rem].cpid == me) { (dst_array[j])[0] = ((void*)(rem_ptr[offset_rem].addr)); /* handle remote and SMP case */ } else if (pnga_cluster_proc_nodeid(me) == pnga_cluster_proc_nodeid(rem_ptr[offset_rem].cpid)) { (dst_array[j])[0] = ARMCI_Memat(&rem_ptr[offset_rem], sizeof(armci_meminfo_t)); } else { (dst_array[j])[0] = (void*)rem_ptr[offset_rem].armci_addr; } (src_array[j])[0] = (void*)buf_ptr[offset_d]; #define DBG desc[jcnt].src_ptr_array = src_array[j]; desc[jcnt].dst_ptr_array = dst_array[j]; desc[jcnt].bytes = bytes; desc[jcnt].ptr_array_len = 1; jcnt++; } else { /*bjp printf("p[%ld] null pointer at i: %ld j: %ld\n", (long)pnga_nodeid(), (long)(index[0]+plo[0]), (long)(index[1]+plo[1])); */ } } #ifdef XDBG for (j=0; j 0) { rc = ARMCI_PutV(desc, (int)jcnt, (int)p); if (rc) pnga_error("ARMCI_PutV failure in gp_put",rc); } #endif for (j=0; jhi[i]) { pnga_error("gp_access_element: subscript out of bounds", i); } if (i 0) { idx = header[iproc]; /* allocate descriptor array for this vector call */ desc = (armci_giov_t*)malloc((int)nelems[iproc]*sizeof(armci_giov_t)); src_array = (void***)malloc((int)nelems[iproc]*sizeof(void**)); dst_array = (void***)malloc((int)nelems[iproc]*sizeof(void**)); j = 0; while (idx > -1) { if (intsize == 4) { bytes = (int)((int*)buf_size)[idx]; } else { bytes = (int)((int64_t*)buf_size)[idx]; } if (bytes>0) { src_array[j] = (void**)malloc(sizeof(void*)); dst_array[j] = (void**)malloc(sizeof(void*)); if (iproc == me) { (src_array[j])[0] = ((void*)(info_buf[idx].addr)); } else if (pnga_cluster_proc_nodeid(me) == pnga_cluster_proc_nodeid(iproc)) { (src_array[j])[0] = ARMCI_Memat(&info_buf[idx],sizeof(armci_meminfo_t)); } else { (src_array[j])[0] = (void*)(info_buf[idx].armci_addr); } (dst_array[j])[0] = (void*)(buf_ptr[idx]); if (intsize == 4) { desc[j].bytes = (int)((int*)buf_size)[idx]; } else { desc[j].bytes = (int)((int64_t*)buf_size)[idx]; } desc[j].src_ptr_array = src_array[j]; desc[j].dst_ptr_array = dst_array[j]; desc[j].ptr_array_len = 1; j++; } idx = list[idx]; } /* gather data from remote locations */ #ifdef XDBG for (idx=0; idx 0) { rc = ARMCI_GetV(desc, (int)j, (int)iproc); if (rc) pnga_error("ARMCI_GetV failure in gp_gather",rc); } #endif /* free arrays */ for (j=0; j 0) { idx = header[iproc]; /* allocate descriptor array for this vector call */ desc = (armci_giov_t*)malloc((int)nelems[iproc]*sizeof(armci_giov_t)); src_array = (void***)malloc((int)nelems[iproc]*sizeof(void**)); dst_array = (void***)malloc((int)nelems[iproc]*sizeof(void**)); j = 0; while (idx > -1) { if (intsize == 4) { bytes = (int)((int*)buf_size)[idx]; } else { bytes = (int)((int64_t*)buf_size)[idx]; } if (bytes>0) { src_array[j] = (void**)malloc(sizeof(void*)); dst_array[j] = (void**)malloc(sizeof(void*)); if (iproc == me) { (dst_array[j])[0] = ((void*)(info_buf[idx].addr)); } else if (pnga_cluster_proc_nodeid(me) == pnga_cluster_proc_nodeid(iproc)) { (dst_array[j])[0] = ARMCI_Memat(&info_buf[idx],sizeof(armci_meminfo_t)); } else { (dst_array[j])[0] = (void*)(info_buf[idx].armci_addr); } (src_array[j])[0] = (void*)(buf_ptr[idx]); if (intsize == 4) { desc[j].bytes = (int)((int*)buf_size)[idx]; } else { desc[j].bytes = (int)((int64_t*)buf_size)[idx]; } desc[j].src_ptr_array = src_array[j]; desc[j].dst_ptr_array = dst_array[j]; desc[j].ptr_array_len = 1; j++; } idx = list[idx]; } /* gather data from remote locations */ #ifdef XDBG for (idx=0; idx 0) { rc = ARMCI_PutV(desc, (int)j, (int)iproc); if (rc) pnga_error("ARMCI_PutV failure in gp_gather",rc); } #endif /* free arrays */ for (j=0; j= 0. * * N (input) INTEGER * The number of columns of the matrix A. N >= 0. * * A (input) DOUBLE PRECISION array, dimension (LDA,N) * The m by n matrix A. If UPLO = 'U', only the upper triangle * or trapezoid is accessed; if UPLO = 'L', only the lower * triangle or trapezoid is accessed. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,M). * * B (output) DOUBLE PRECISION array, dimension (LDB,N) * On exit, B = A in the locations specified by UPLO. * * LDB (input) INTEGER * The leading dimension of the array B. LDB >= max(1,M). * * ===================================================================== * * .. Local Scalars .. INTEGER I, J * .. * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. * .. Intrinsic Functions .. INTRINSIC MIN * .. * .. Executable Statements .. * IF( GAL_LSAME( UPLO, 'U' ) ) THEN DO 20 J = 1, N DO 10 I = 1, MIN( J, M ) B( I, J ) = A( I, J ) 10 CONTINUE 20 CONTINUE ELSE IF( GAL_LSAME( UPLO, 'L' ) ) THEN DO 40 J = 1, N DO 30 I = J, M B( I, J ) = A( I, J ) 30 CONTINUE 40 CONTINUE ELSE DO 60 J = 1, N DO 50 I = 1, M B( I, J ) = A( I, J ) 50 CONTINUE 60 CONTINUE END IF RETURN * * End of GAL_DLACPY * END ga-5-3/LinAlg/lapack+blas/zgemm.f0000640005473000001440000003172412140045175015406 0ustar d3n000users SUBROUTINE GAL_ZGEMM ( TRANSA, TRANSB, M, N, K, $ ALPHA, A, LDA, B, LDB, BETA, C, LDC ) * .. Scalar Arguments .. CHARACTER*1 TRANSA, TRANSB INTEGER M, N, K, LDA, LDB, LDC COMPLEX*16 ALPHA, BETA * .. Array Arguments .. COMPLEX*16 A( LDA, * ), B( LDB, * ), C( LDC, * ) * .. * * Purpose * ======= * * GAL_ZGEMM performs one of the matrix-matrix operations * * C := alpha*op( A )*op( B ) + beta*C, * * where op( X ) is one of * * op( X ) = X or op( X ) = X' or op( X ) = conjg( X' ), * * alpha and beta are scalars, and A, B and C are matrices, with op( A ) * an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. * * Parameters * ========== * * TRANSA - CHARACTER*1. * On entry, TRANSA specifies the form of op( A ) to be used in * the matrix multiplication as follows: * * TRANSA = 'N' or 'n', op( A ) = A. * * TRANSA = 'T' or 't', op( A ) = A'. * * TRANSA = 'C' or 'c', op( A ) = conjg( A' ). * * Unchanged on exit. * * TRANSB - CHARACTER*1. * On entry, TRANSB specifies the form of op( B ) to be used in * the matrix multiplication as follows: * * TRANSB = 'N' or 'n', op( B ) = B. * * TRANSB = 'T' or 't', op( B ) = B'. * * TRANSB = 'C' or 'c', op( B ) = conjg( B' ). * * Unchanged on exit. * * M - INTEGER. * On entry, M specifies the number of rows of the matrix * op( A ) and of the matrix C. M must be at least zero. * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the number of columns of the matrix * op( B ) and the number of columns of the matrix C. N must be * at least zero. * Unchanged on exit. * * K - INTEGER. * On entry, K specifies the number of columns of the matrix * op( A ) and the number of rows of the matrix op( B ). K must * be at least zero. * Unchanged on exit. * * ALPHA - COMPLEX*16 . * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * A - COMPLEX*16 array of DIMENSION ( LDA, ka ), where ka is * k when TRANSA = 'N' or 'n', and is m otherwise. * Before entry with TRANSA = 'N' or 'n', the leading m by k * part of the array A must contain the matrix A, otherwise * the leading k by m part of the array A must contain the * matrix A. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. When TRANSA = 'N' or 'n' then * LDA must be at least max( 1, m ), otherwise LDA must be at * least max( 1, k ). * Unchanged on exit. * * B - COMPLEX*16 array of DIMENSION ( LDB, kb ), where kb is * n when TRANSB = 'N' or 'n', and is k otherwise. * Before entry with TRANSB = 'N' or 'n', the leading k by n * part of the array B must contain the matrix B, otherwise * the leading n by k part of the array B must contain the * matrix B. * Unchanged on exit. * * LDB - INTEGER. * On entry, LDB specifies the first dimension of B as declared * in the calling (sub) program. When TRANSB = 'N' or 'n' then * LDB must be at least max( 1, k ), otherwise LDB must be at * least max( 1, n ). * Unchanged on exit. * * BETA - COMPLEX*16 . * On entry, BETA specifies the scalar beta. When BETA is * supplied as zero then C need not be set on input. * Unchanged on exit. * * C - COMPLEX*16 array of DIMENSION ( LDC, n ). * Before entry, the leading m by n part of the array C must * contain the matrix C, except when beta is zero, in which * case C need not be set on entry. * On exit, the array C is overwritten by the m by n matrix * ( alpha*op( A )*op( B ) + beta*C ). * * LDC - INTEGER. * On entry, LDC specifies the first dimension of C as declared * in the calling (sub) program. LDC must be at least * max( 1, m ). * Unchanged on exit. * * * Level 3 Blas routine. * * -- Written on 8-February-1989. * Jack Dongarra, Argonne National Laboratory. * Iain Duff, AERE Harwell. * Jeremy Du Croz, Numerical Algorithms Group Ltd. * Sven Hammarling, Numerical Algorithms Group Ltd. * * * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC CONJG, MAX * .. Local Scalars .. LOGICAL CONJA, CONJB, NOTA, NOTB INTEGER I, INFO, J, L, NCOLA, NROWA, NROWB COMPLEX*16 TEMP * .. Parameters .. COMPLEX*16 ONE PARAMETER ( ONE = ( 1.0D+0, 0.0D+0 ) ) COMPLEX*16 ZERO PARAMETER ( ZERO = ( 0.0D+0, 0.0D+0 ) ) * .. * .. Executable Statements .. * * Set NOTA and NOTB as true if A and B respectively are not * conjugated or transposed, set CONJA and CONJB as true if A and * B respectively are to be transposed but not conjugated and set * NROWA, NCOLA and NROWB as the number of rows and columns of A * and the number of rows of B respectively. * NOTA = GAL_LSAME( TRANSA, 'N' ) NOTB = GAL_LSAME( TRANSB, 'N' ) CONJA = GAL_LSAME( TRANSA, 'C' ) CONJB = GAL_LSAME( TRANSB, 'C' ) IF( NOTA )THEN NROWA = M NCOLA = K ELSE NROWA = K NCOLA = M END IF IF( NOTB )THEN NROWB = K ELSE NROWB = N END IF * * Test the input parameters. * INFO = 0 IF( ( .NOT.NOTA ).AND. $ ( .NOT.CONJA ).AND. $ ( .NOT.GAL_LSAME( TRANSA, 'T' ) ) )THEN INFO = 1 ELSE IF( ( .NOT.NOTB ).AND. $ ( .NOT.CONJB ).AND. $ ( .NOT.GAL_LSAME( TRANSB, 'T' ) ) )THEN INFO = 2 ELSE IF( M .LT.0 )THEN INFO = 3 ELSE IF( N .LT.0 )THEN INFO = 4 ELSE IF( K .LT.0 )THEN INFO = 5 ELSE IF( LDA.LT.MAX( 1, NROWA ) )THEN INFO = 8 ELSE IF( LDB.LT.MAX( 1, NROWB ) )THEN INFO = 10 ELSE IF( LDC.LT.MAX( 1, M ) )THEN INFO = 13 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_ZGEMM ', INFO ) RETURN END IF * * Quick return if possible. * IF( ( M.EQ.0 ).OR.( N.EQ.0 ).OR. $ ( ( ( ALPHA.EQ.ZERO ).OR.( K.EQ.0 ) ).AND.( BETA.EQ.ONE ) ) ) $ RETURN * * And when alpha.eq.zero. * IF( ALPHA.EQ.ZERO )THEN IF( BETA.EQ.ZERO )THEN DO 20, J = 1, N DO 10, I = 1, M C( I, J ) = ZERO 10 CONTINUE 20 CONTINUE ELSE DO 40, J = 1, N DO 30, I = 1, M C( I, J ) = BETA*C( I, J ) 30 CONTINUE 40 CONTINUE END IF RETURN END IF * * Start the operations. * IF( NOTB )THEN IF( NOTA )THEN * * Form C := alpha*A*B + beta*C. * DO 90, J = 1, N IF( BETA.EQ.ZERO )THEN DO 50, I = 1, M C( I, J ) = ZERO 50 CONTINUE ELSE IF( BETA.NE.ONE )THEN DO 60, I = 1, M C( I, J ) = BETA*C( I, J ) 60 CONTINUE END IF DO 80, L = 1, K IF( B( L, J ).NE.ZERO )THEN TEMP = ALPHA*B( L, J ) DO 70, I = 1, M C( I, J ) = C( I, J ) + TEMP*A( I, L ) 70 CONTINUE END IF 80 CONTINUE 90 CONTINUE ELSE IF( CONJA )THEN * * Form C := alpha*conjg( A' )*B + beta*C. * DO 120, J = 1, N DO 110, I = 1, M TEMP = ZERO DO 100, L = 1, K TEMP = TEMP + CONJG( A( L, I ) )*B( L, J ) 100 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 110 CONTINUE 120 CONTINUE ELSE * * Form C := alpha*A'*B + beta*C * DO 150, J = 1, N DO 140, I = 1, M TEMP = ZERO DO 130, L = 1, K TEMP = TEMP + A( L, I )*B( L, J ) 130 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 140 CONTINUE 150 CONTINUE END IF ELSE IF( NOTA )THEN IF( CONJB )THEN * * Form C := alpha*A*conjg( B' ) + beta*C. * DO 200, J = 1, N IF( BETA.EQ.ZERO )THEN DO 160, I = 1, M C( I, J ) = ZERO 160 CONTINUE ELSE IF( BETA.NE.ONE )THEN DO 170, I = 1, M C( I, J ) = BETA*C( I, J ) 170 CONTINUE END IF DO 190, L = 1, K IF( B( J, L ).NE.ZERO )THEN TEMP = ALPHA*CONJG( B( J, L ) ) DO 180, I = 1, M C( I, J ) = C( I, J ) + TEMP*A( I, L ) 180 CONTINUE END IF 190 CONTINUE 200 CONTINUE ELSE * * Form C := alpha*A*B' + beta*C * DO 250, J = 1, N IF( BETA.EQ.ZERO )THEN DO 210, I = 1, M C( I, J ) = ZERO 210 CONTINUE ELSE IF( BETA.NE.ONE )THEN DO 220, I = 1, M C( I, J ) = BETA*C( I, J ) 220 CONTINUE END IF DO 240, L = 1, K IF( B( J, L ).NE.ZERO )THEN TEMP = ALPHA*B( J, L ) DO 230, I = 1, M C( I, J ) = C( I, J ) + TEMP*A( I, L ) 230 CONTINUE END IF 240 CONTINUE 250 CONTINUE END IF ELSE IF( CONJA )THEN IF( CONJB )THEN * * Form C := alpha*conjg( A' )*conjg( B' ) + beta*C. * DO 280, J = 1, N DO 270, I = 1, M TEMP = ZERO DO 260, L = 1, K TEMP = TEMP + $ CONJG( A( L, I ) )*CONJG( B( J, L ) ) 260 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 270 CONTINUE 280 CONTINUE ELSE * * Form C := alpha*conjg( A' )*B' + beta*C * DO 310, J = 1, N DO 300, I = 1, M TEMP = ZERO DO 290, L = 1, K TEMP = TEMP + CONJG( A( L, I ) )*B( J, L ) 290 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 300 CONTINUE 310 CONTINUE END IF ELSE IF( CONJB )THEN * * Form C := alpha*A'*conjg( B' ) + beta*C * DO 340, J = 1, N DO 330, I = 1, M TEMP = ZERO DO 320, L = 1, K TEMP = TEMP + A( L, I )*CONJG( B( J, L ) ) 320 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 330 CONTINUE 340 CONTINUE ELSE * * Form C := alpha*A'*B' + beta*C * DO 370, J = 1, N DO 360, I = 1, M TEMP = ZERO DO 350, L = 1, K TEMP = TEMP + A( L, I )*B( J, L ) 350 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 360 CONTINUE 370 CONTINUE END IF END IF * RETURN * * End of GAL_ZGEMM . * END ga-5-3/LinAlg/lapack+blas/sgemm.f0000640005473000001440000002274211633440402015375 0ustar d3n000users SUBROUTINE GAL_SGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA, $ B,LDB,BETA,C,LDC) * .. Scalar Arguments .. REAL ALPHA,BETA INTEGER K,LDA,LDB,LDC,M,N CHARACTER TRANSA,TRANSB * .. * .. Array Arguments .. REAL A(LDA,*),B(LDB,*),C(LDC,*) * .. * * Purpose * ======= * * GAL_SGEMM performs one of the matrix-matrix operations * * C := alpha*op( A )*op( B ) + beta*C, * * where op( X ) is one of * * op( X ) = X or op( X ) = X', * * alpha and beta are scalars, and A, B and C are matrices, with op( A ) * an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. * * Arguments * ========== * * TRANSA - CHARACTER*1. * On entry, TRANSA specifies the form of op( A ) to be used in * the matrix multiplication as follows: * * TRANSA = 'N' or 'n', op( A ) = A. * * TRANSA = 'T' or 't', op( A ) = A'. * * TRANSA = 'C' or 'c', op( A ) = A'. * * Unchanged on exit. * * TRANSB - CHARACTER*1. * On entry, TRANSB specifies the form of op( B ) to be used in * the matrix multiplication as follows: * * TRANSB = 'N' or 'n', op( B ) = B. * * TRANSB = 'T' or 't', op( B ) = B'. * * TRANSB = 'C' or 'c', op( B ) = B'. * * Unchanged on exit. * * M - INTEGER. * On entry, M specifies the number of rows of the matrix * op( A ) and of the matrix C. M must be at least zero. * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the number of columns of the matrix * op( B ) and the number of columns of the matrix C. N must be * at least zero. * Unchanged on exit. * * K - INTEGER. * On entry, K specifies the number of columns of the matrix * op( A ) and the number of rows of the matrix op( B ). K must * be at least zero. * Unchanged on exit. * * ALPHA - REAL . * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * A - REAL array of DIMENSION ( LDA, ka ), where ka is * k when TRANSA = 'N' or 'n', and is m otherwise. * Before entry with TRANSA = 'N' or 'n', the leading m by k * part of the array A must contain the matrix A, otherwise * the leading k by m part of the array A must contain the * matrix A. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. When TRANSA = 'N' or 'n' then * LDA must be at least max( 1, m ), otherwise LDA must be at * least max( 1, k ). * Unchanged on exit. * * B - REAL array of DIMENSION ( LDB, kb ), where kb is * n when TRANSB = 'N' or 'n', and is k otherwise. * Before entry with TRANSB = 'N' or 'n', the leading k by n * part of the array B must contain the matrix B, otherwise * the leading n by k part of the array B must contain the * matrix B. * Unchanged on exit. * * LDB - INTEGER. * On entry, LDB specifies the first dimension of B as declared * in the calling (sub) program. When TRANSB = 'N' or 'n' then * LDB must be at least max( 1, k ), otherwise LDB must be at * least max( 1, n ). * Unchanged on exit. * * BETA - REAL . * On entry, BETA specifies the scalar beta. When BETA is * supplied as zero then C need not be set on input. * Unchanged on exit. * * C - REAL array of DIMENSION ( LDC, n ). * Before entry, the leading m by n part of the array C must * contain the matrix C, except when beta is zero, in which * case C need not be set on entry. * On exit, the array C is overwritten by the m by n matrix * ( alpha*op( A )*op( B ) + beta*C ). * * LDC - INTEGER. * On entry, LDC specifies the first dimension of C as declared * in the calling (sub) program. LDC must be at least * max( 1, m ). * Unchanged on exit. * * * Level 3 Blas routine. * * -- Written on 8-February-1989. * Jack Dongarra, Argonne National Laboratory. * Iain Duff, AERE Harwell. * Jeremy Du Croz, Numerical Algorithms Group Ltd. * Sven Hammarling, Numerical Algorithms Group Ltd. * * * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX * .. * .. Local Scalars .. REAL TEMP INTEGER I,INFO,J,L,NCOLA,NROWA,NROWB LOGICAL NOTA,NOTB * .. * .. Parameters .. REAL ONE,ZERO PARAMETER (ONE=1.0E+0,ZERO=0.0E+0) * .. * * Set NOTA and NOTB as true if A and B respectively are not * transposed and set NROWA, NCOLA and NROWB as the number of rows * and columns of A and the number of rows of B respectively. * NOTA = GAL_LSAME(TRANSA,'N') NOTB = GAL_LSAME(TRANSB,'N') IF (NOTA) THEN NROWA = M NCOLA = K ELSE NROWA = K NCOLA = M END IF IF (NOTB) THEN NROWB = K ELSE NROWB = N END IF * * Test the input parameters. * INFO = 0 IF ((.NOT.NOTA) .AND. (.NOT.GAL_LSAME(TRANSA,'C')) .AND. + (.NOT.GAL_LSAME(TRANSA,'T'))) THEN INFO = 1 ELSE IF ((.NOT.NOTB) .AND. (.NOT.GAL_LSAME(TRANSB,'C')) .AND. + (.NOT.GAL_LSAME(TRANSB,'T'))) THEN INFO = 2 ELSE IF (M.LT.0) THEN INFO = 3 ELSE IF (N.LT.0) THEN INFO = 4 ELSE IF (K.LT.0) THEN INFO = 5 ELSE IF (LDA.LT.MAX(1,NROWA)) THEN INFO = 8 ELSE IF (LDB.LT.MAX(1,NROWB)) THEN INFO = 10 ELSE IF (LDC.LT.MAX(1,M)) THEN INFO = 13 END IF IF (INFO.NE.0) THEN CALL GAL_XERBLA('GAL_SGEMM ',INFO) RETURN END IF * * Quick return if possible. * IF ((M.EQ.0) .OR. (N.EQ.0) .OR. + (((ALPHA.EQ.ZERO).OR. (K.EQ.0)).AND. (BETA.EQ.ONE))) RETURN * * And if alpha.eq.zero. * IF (ALPHA.EQ.ZERO) THEN IF (BETA.EQ.ZERO) THEN DO 20 J = 1,N DO 10 I = 1,M C(I,J) = ZERO 10 CONTINUE 20 CONTINUE ELSE DO 40 J = 1,N DO 30 I = 1,M C(I,J) = BETA*C(I,J) 30 CONTINUE 40 CONTINUE END IF RETURN END IF * * Start the operations. * IF (NOTB) THEN IF (NOTA) THEN * * Form C := alpha*A*B + beta*C. * DO 90 J = 1,N IF (BETA.EQ.ZERO) THEN DO 50 I = 1,M C(I,J) = ZERO 50 CONTINUE ELSE IF (BETA.NE.ONE) THEN DO 60 I = 1,M C(I,J) = BETA*C(I,J) 60 CONTINUE END IF DO 80 L = 1,K IF (B(L,J).NE.ZERO) THEN TEMP = ALPHA*B(L,J) DO 70 I = 1,M C(I,J) = C(I,J) + TEMP*A(I,L) 70 CONTINUE END IF 80 CONTINUE 90 CONTINUE ELSE * * Form C := alpha*A'*B + beta*C * DO 120 J = 1,N DO 110 I = 1,M TEMP = ZERO DO 100 L = 1,K TEMP = TEMP + A(L,I)*B(L,J) 100 CONTINUE IF (BETA.EQ.ZERO) THEN C(I,J) = ALPHA*TEMP ELSE C(I,J) = ALPHA*TEMP + BETA*C(I,J) END IF 110 CONTINUE 120 CONTINUE END IF ELSE IF (NOTA) THEN * * Form C := alpha*A*B' + beta*C * DO 170 J = 1,N IF (BETA.EQ.ZERO) THEN DO 130 I = 1,M C(I,J) = ZERO 130 CONTINUE ELSE IF (BETA.NE.ONE) THEN DO 140 I = 1,M C(I,J) = BETA*C(I,J) 140 CONTINUE END IF DO 160 L = 1,K IF (B(J,L).NE.ZERO) THEN TEMP = ALPHA*B(J,L) DO 150 I = 1,M C(I,J) = C(I,J) + TEMP*A(I,L) 150 CONTINUE END IF 160 CONTINUE 170 CONTINUE ELSE * * Form C := alpha*A'*B' + beta*C * DO 200 J = 1,N DO 190 I = 1,M TEMP = ZERO DO 180 L = 1,K TEMP = TEMP + A(L,I)*B(J,L) 180 CONTINUE IF (BETA.EQ.ZERO) THEN C(I,J) = ALPHA*TEMP ELSE C(I,J) = ALPHA*TEMP + BETA*C(I,J) END IF 190 CONTINUE 200 CONTINUE END IF END IF * RETURN * * End of GAL_SGEMM . * END ga-5-3/LinAlg/lapack+blas/dlaset.f0000640005473000001440000000624711633440402015543 0ustar d3n000users SUBROUTINE GAL_DLASET( UPLO, M, N, ALPHA, BETA, A, LDA ) * * -- LAPACK auxiliary routine (version 1.1) -- * Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., * Courant Institute, Argonne National Lab, and Rice University * October 31, 1992 * * .. Scalar Arguments .. CHARACTER UPLO INTEGER LDA, M, N DOUBLE PRECISION ALPHA, BETA * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ) * .. * * Purpose * ======= * * GAL_DLASET initializes an m-by-n matrix A to BETA on the diagonal and * ALPHA on the offdiagonals. * * Arguments * ========= * * UPLO (input) CHARACTER*1 * Specifies the part of the matrix A to be set. * = 'U': Upper triangular part is set; the strictly lower * triangular part of A is not changed. * = 'L': Lower triangular part is set; the strictly upper * triangular part of A is not changed. * Otherwise: All of the matrix A is set. * * M (input) INTEGER * The number of rows of the matrix A. M >= 0. * * N (input) INTEGER * The number of columns of the matrix A. N >= 0. * * ALPHA (input) DOUBLE PRECISION * The constant to which the offdiagonal elements are to be set. * * BETA (input) DOUBLE PRECISION * The constant to which the diagonal elements are to be set. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On exit, the leading m-by-n submatrix of A is set as follows: * * if UPLO = 'U', A(i,j) = ALPHA, 1<=i<=j-1, 1<=j<=n, * if UPLO = 'L', A(i,j) = ALPHA, j+1<=i<=m, 1<=j<=n, * otherwise, A(i,j) = ALPHA, 1<=i<=m, 1<=j<=n, i.ne.j, * * and, for all UPLO, A(i,i) = BETA, 1<=i<=min(m,n). * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,M). * * ===================================================================== * * .. Local Scalars .. INTEGER I, J * .. * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. * .. Intrinsic Functions .. INTRINSIC MIN * .. * .. Executable Statements .. * IF( GAL_LSAME( UPLO, 'U' ) ) THEN * * Set the strictly upper triangular or trapezoidal part of the * array to ALPHA. * DO 20 J = 2, N DO 10 I = 1, MIN( J-1, M ) A( I, J ) = ALPHA 10 CONTINUE 20 CONTINUE * ELSE IF( GAL_LSAME( UPLO, 'L' ) ) THEN * * Set the strictly lower triangular or trapezoidal part of the * array to ALPHA. * DO 40 J = 1, MIN( M, N ) DO 30 I = J + 1, M A( I, J ) = ALPHA 30 CONTINUE 40 CONTINUE * ELSE * * Set the leading m-by-n submatrix to ALPHA. * DO 60 J = 1, N DO 50 I = 1, M A( I, J ) = ALPHA 50 CONTINUE 60 CONTINUE END IF * * Set the first min(M,N) diagonal elements to BETA. * DO 70 I = 1, MIN( M, N ) A( I, I ) = BETA 70 CONTINUE * RETURN * * End of GAL_DLASET * END ga-5-3/LinAlg/lapack+blas/ilaenv.f0000640005473000001440000003600211643111243015534 0ustar d3n000users INTEGER FUNCTION GAL_ILAENV( ISPEC, NAME, OPTS, $ N1, N2, N3, N4 ) * * -- LAPACK auxiliary routine (preliminary version) -- * Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., * Courant Institute, Argonne National Lab, and Rice University * February 20, 1992 * * .. Scalar Arguments .. CHARACTER*( * ) NAME, OPTS INTEGER ISPEC, N1, N2, N3, N4 * .. * * Purpose * ======= * * GAL_ILAENV is called from the LAPACK routines to choose * problem-dependent parameters for the local environment. See ISPEC * for a description of the parameters. * * This version provides a set of parameters which should give good, * but not optimal, performance on many of the currently available * computers. Users are encouraged to modify this subroutine to set * the tuning parameters for their particular machine using the option * and problem size information in the arguments. * * This routine will not function correctly if it is converted to all * lower case. Converting it to all upper case is allowed. * * Arguments * ========= * * ISPEC (input) INTEGER * Specifies the parameter to be returned as the value of * GAL_ILAENV. * = 1: the optimal blocksize; if this value is 1, an unblocked * algorithm will give the best performance. * = 2: the minimum block size for which the block routine * should be used; if the usable block size is less than * this value, an unblocked routine should be used. * = 3: the crossover point (in a block routine, for N less * than this value, an unblocked routine should be used) * = 4: the number of shifts, used in the nonsymmetric * eigenvalue routines * = 5: the minimum column dimension for blocking to be used; * rectangular blocks must have dimension at least k by m, * where k is given by GAL_ILAENV(2,...) and m by * GAL_ILAENV(5,...) * = 6: the crossover point for the SVD (when reducing an m by n * matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds * this value, a QR factorization is used first to reduce * the matrix to a triangular form.) * = 7: the number of processors * = 8: the crossover point for the multishift QR and QZ methods * for nonsymmetric eigenvalue problems. * * NAME (input) CHARACTER*(*) * The name of the calling subroutine, in either upper case or * lower case. * * OPTS (input) CHARACTER*(*) * The character options to the subroutine NAME, concatenated * into a single character string. For example, UPLO = 'U', * TRANS = 'T', and DIAG = 'N' for a triangular routine would * be specified as OPTS = 'UTN'. * * N1 (input) INTEGER * N2 (input) INTEGER * N3 (input) INTEGER * N4 (input) INTEGER * Problem dimensions for the subroutine NAME; these may not all * be required. * * (GAL_ILAENV) (output) INTEGER * >= 0: the value of the parameter specified by ISPEC * < 0: if GAL_ILAENV = -k, the k-th argument had an illegal * value. * * Further Details * =============== * * The following conventions have been used when calling GAL_ILAENV from * the LAPACK routines: * 1) OPTS is a concatenation of all of the character options to * subroutine NAME, in the same order that they appear in the * argument list for NAME, even if they are not used in determining * the value of the parameter specified by ISPEC. * 2) The problem dimensions N1, N2, N3, N4 are specified in the order * that they appear in the argument list for NAME. N1 is used * first, N2 second, and so on, and unused problem dimensions are * passed a value of -1. * 3) The parameter value returned by GAL_ILAENV is checked for * validity in the calling subroutine. For example, GAL_ILAENV is * used to retrieve the optimal blocksize for STRTRI as follows: * * NB = GAL_ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 ) * IF( NB.LE.1 ) NB = MAX( 1, N ) * * ===================================================================== * * .. Local Scalars .. LOGICAL CNAME, SNAME CHARACTER*1 C1 CHARACTER*2 C2, C4 CHARACTER*3 C3 CHARACTER*6 SUBNAM INTEGER I, IC, IZ, NB, NBMIN, NX * .. * .. Intrinsic Functions .. INTRINSIC CHAR, ICHAR, INT, MIN, REAL * .. * .. Executable Statements .. * GO TO ( 100, 100, 100, 400, 500, 600, 700, 800 ) ISPEC * * Invalid value for ISPEC * GAL_ILAENV = -1 RETURN * 100 CONTINUE * * Convert NAME to upper case if the first character is lower case. * GAL_ILAENV = 1 SUBNAM = NAME IC = ICHAR( SUBNAM( 1:1 ) ) IZ = ICHAR( 'Z' ) IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN * * ASCII character set * IF( IC.GE.97 .AND. IC.LE.122 ) THEN SUBNAM( 1:1 ) = CHAR( IC-32 ) DO 10 I = 2, 6 IC = ICHAR( SUBNAM( I:I ) ) IF( IC.GE.97 .AND. IC.LE.122 ) $ SUBNAM( I:I ) = CHAR( IC-32 ) 10 CONTINUE END IF * ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN * * EBCDIC character set * IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN SUBNAM( 1:1 ) = CHAR( IC+64 ) DO 20 I = 2, 6 IC = ICHAR( SUBNAM( I:I ) ) IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. $ ( IC.GE.162 .AND. IC.LE.169 ) ) $ SUBNAM( I:I ) = CHAR( IC+64 ) 20 CONTINUE END IF * ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN * * Prime machines: ASCII+128 * IF( IC.GE.225 .AND. IC.LE.250 ) THEN SUBNAM( 1:1 ) = CHAR( IC-32 ) DO 30 I = 2, 6 IC = ICHAR( SUBNAM( I:I ) ) IF( IC.GE.225 .AND. IC.LE.250 ) $ SUBNAM( I:I ) = CHAR( IC-32 ) 30 CONTINUE END IF END IF * C1 = SUBNAM( 1:1 ) SNAME = C1.EQ.'S' .OR. C1.EQ.'D' CNAME = C1.EQ.'C' .OR. C1.EQ.'Z' IF( .NOT.( CNAME .OR. SNAME ) ) $ RETURN C2 = SUBNAM( 2:3 ) C3 = SUBNAM( 4:6 ) C4 = C3( 2:3 ) * GO TO ( 110, 200, 300 ) ISPEC * 110 CONTINUE * * ISPEC = 1: block size * * In these examples, separate code is provided for setting NB for * real and complex. We assume that NB will take the same value in * single or double precision. * NB = 1 * IF( C2.EQ.'GE' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. $ C3.EQ.'QLF' ) THEN IF( SNAME ) THEN NB = 32 ELSE NB = 32 END IF ELSE IF( C3.EQ.'HRD' ) THEN IF( SNAME ) THEN NB = 32 ELSE NB = 32 END IF ELSE IF( C3.EQ.'BRD' ) THEN IF( SNAME ) THEN NB = 32 ELSE NB = 32 END IF ELSE IF( C3.EQ.'TRI' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF END IF ELSE IF( C2.EQ.'PO' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF END IF ELSE IF( C2.EQ.'SY' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN NB = 1 ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN NB = 64 END IF ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN IF( C3.EQ.'TRF' ) THEN NB = 64 ELSE IF( C3.EQ.'TRD' ) THEN NB = 1 ELSE IF( C3.EQ.'GST' ) THEN NB = 64 END IF ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN IF( C3( 1:1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NB = 32 END IF ELSE IF( C3( 1:1 ).EQ.'M' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NB = 32 END IF END IF ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN IF( C3( 1:1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NB = 32 END IF ELSE IF( C3( 1:1 ).EQ.'M' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NB = 32 END IF END IF ELSE IF( C2.EQ.'GB' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN IF( N4.LE.64 ) THEN NB = 1 ELSE NB = 32 END IF ELSE IF( N4.LE.64 ) THEN NB = 1 ELSE NB = 32 END IF END IF END IF ELSE IF( C2.EQ.'PB' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN IF( N2.LE.64 ) THEN NB = 1 ELSE NB = 32 END IF ELSE IF( N2.LE.64 ) THEN NB = 1 ELSE NB = 32 END IF END IF END IF ELSE IF( C2.EQ.'TR' ) THEN IF( C3.EQ.'TRI' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF END IF ELSE IF( C2.EQ.'LA' ) THEN IF( C3.EQ.'UUM' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF END IF ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN IF( C3.EQ.'EBZ' ) THEN NB = 1 END IF END IF GAL_ILAENV = NB RETURN * 200 CONTINUE * * ISPEC = 2: minimum block size * NBMIN = 2 IF( C2.EQ.'GE' ) THEN IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. $ C3.EQ.'QLF' ) THEN IF( SNAME ) THEN NBMIN = 2 ELSE NBMIN = 2 END IF ELSE IF( C3.EQ.'HRD' ) THEN IF( SNAME ) THEN NBMIN = 2 ELSE NBMIN = 2 END IF ELSE IF( C3.EQ.'BRD' ) THEN IF( SNAME ) THEN NBMIN = 2 ELSE NBMIN = 2 END IF ELSE IF( C3.EQ.'TRI' ) THEN IF( SNAME ) THEN NBMIN = 2 ELSE NBMIN = 2 END IF END IF ELSE IF( C2.EQ.'SY' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN NBMIN = 2 ELSE NBMIN = 2 END IF ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN NBMIN = 2 END IF ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN IF( C3.EQ.'TRD' ) THEN NBMIN = 2 END IF ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN IF( C3( 1:1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NBMIN = 2 END IF ELSE IF( C3( 1:1 ).EQ.'M' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NBMIN = 2 END IF END IF ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN IF( C3( 1:1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NBMIN = 2 END IF ELSE IF( C3( 1:1 ).EQ.'M' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NBMIN = 2 END IF END IF END IF GAL_ILAENV = NBMIN RETURN * 300 CONTINUE * * ISPEC = 3: crossover point * NX = 0 IF( C2.EQ.'GE' ) THEN IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. $ C3.EQ.'QLF' ) THEN IF( SNAME ) THEN NX = 128 ELSE NX = 128 END IF ELSE IF( C3.EQ.'HRD' ) THEN IF( SNAME ) THEN NX = 128 ELSE NX = 128 END IF ELSE IF( C3.EQ.'BRD' ) THEN IF( SNAME ) THEN NX = 128 ELSE NX = 128 END IF END IF ELSE IF( C2.EQ.'SY' ) THEN IF( SNAME .AND. C3.EQ.'TRD' ) THEN NX = 1 END IF ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN IF( C3.EQ.'TRD' ) THEN NX = 1 END IF ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN IF( C3( 1:1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NX = 128 END IF END IF ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN IF( C3( 1:1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NX = 128 END IF END IF END IF GAL_ILAENV = NX RETURN * 400 CONTINUE * * ISPEC = 4: number of shifts (used by xHSEQR) * GAL_ILAENV = 6 RETURN * 500 CONTINUE * * ISPEC = 5: minimum column dimension (not used) * GAL_ILAENV = 2 RETURN * 600 CONTINUE * * ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD) * GAL_ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 ) RETURN * 700 CONTINUE * * ISPEC = 7: number of processors (not used) * GAL_ILAENV = 1 RETURN * 800 CONTINUE * * ISPEC = 8: crossover point for multishift (used by xHSEQR) * GAL_ILAENV = 50 RETURN * * End of GAL_ILAENV * END ga-5-3/LinAlg/lapack+blas/dblas.f0000640005473000001440000067766611643111243015376 0ustar d3n000users double precision function gal_dasum(n,dx,incx) c c takes the sum of the absolute values. c uses unrolled loops for increment equal to one. c jack dongarra, linpack, 3/11/78. c modified to correct problem with negative increment, 8/21/90. c double precision dx(1),dtemp integer i,incx,ix,m,mp1,n c gal_dasum = 0.0d0 dtemp = 0.0d0 if(n.le.0)return if(incx.eq.1)go to 20 c c code for increment not equal to 1 c ix = 1 if(incx.lt.0)ix = (-n+1)*incx + 1 do 10 i = 1,n dtemp = dtemp + dabs(dx(ix)) ix = ix + incx 10 continue gal_dasum = dtemp return c c code for increment equal to 1 c c c clean-up loop c 20 m = mod(n,6) if( m .eq. 0 ) go to 40 do 30 i = 1,m dtemp = dtemp + dabs(dx(i)) 30 continue if( n .lt. 6 ) go to 60 40 mp1 = m + 1 do 50 i = mp1,n,6 dtemp = dtemp + dabs(dx(i)) + dabs(dx(i + 1)) + dabs(dx(i + 2)) * + dabs(dx(i + 3)) + dabs(dx(i + 4)) + dabs(dx(i + 5)) 50 continue 60 gal_dasum = dtemp return end subroutine gal_daxpy(n,da,dx,incx,dy,incy) c c constant times a vector plus a vector. c uses unrolled loops for increments equal to one. c jack dongarra, linpack, 3/11/78. c double precision dx(1),dy(1),da integer i,incx,incy,ix,iy,m,mp1,n c if(n.le.0)return if (da .eq. 0.0d0) return if(incx.eq.1.and.incy.eq.1)go to 20 c c code for unequal increments or equal increments c not equal to 1 c ix = 1 iy = 1 if(incx.lt.0)ix = (-n+1)*incx + 1 if(incy.lt.0)iy = (-n+1)*incy + 1 do 10 i = 1,n dy(iy) = dy(iy) + da*dx(ix) ix = ix + incx iy = iy + incy 10 continue return c c code for both increments equal to 1 c c c clean-up loop c 20 m = mod(n,4) if( m .eq. 0 ) go to 40 do 30 i = 1,m dy(i) = dy(i) + da*dx(i) 30 continue if( n .lt. 4 ) return 40 mp1 = m + 1 do 50 i = mp1,n,4 dy(i) = dy(i) + da*dx(i) dy(i + 1) = dy(i + 1) + da*dx(i + 1) dy(i + 2) = dy(i + 2) + da*dx(i + 2) dy(i + 3) = dy(i + 3) + da*dx(i + 3) 50 continue return end double precision function gal_dcabs1(z) double complex z,zz double precision t(2) equivalence (zz,t(1)) zz = z gal_dcabs1 = dabs(t(1)) + dabs(t(2)) return end subroutine gal_dcopy(n,dx,incx,dy,incy) c c copies a vector, x, to a vector, y. c uses unrolled loops for increments equal to one. c jack dongarra, linpack, 3/11/78. c double precision dx(1),dy(1) integer i,incx,incy,ix,iy,m,mp1,n c if(n.le.0)return if(incx.eq.1.and.incy.eq.1)go to 20 c c code for unequal increments or equal increments c not equal to 1 c ix = 1 iy = 1 if(incx.lt.0)ix = (-n+1)*incx + 1 if(incy.lt.0)iy = (-n+1)*incy + 1 do 10 i = 1,n dy(iy) = dx(ix) ix = ix + incx iy = iy + incy 10 continue return c c code for both increments equal to 1 c c c clean-up loop c 20 m = mod(n,7) if( m .eq. 0 ) go to 40 do 30 i = 1,m dy(i) = dx(i) 30 continue if( n .lt. 7 ) return 40 mp1 = m + 1 do 50 i = mp1,n,7 dy(i) = dx(i) dy(i + 1) = dx(i + 1) dy(i + 2) = dx(i + 2) dy(i + 3) = dx(i + 3) dy(i + 4) = dx(i + 4) dy(i + 5) = dx(i + 5) dy(i + 6) = dx(i + 6) 50 continue return end double precision function gal_ddot(n,dx,incx,dy,incy) c c forms the dot product of two vectors. c uses unrolled loops for increments equal to one. c jack dongarra, linpack, 3/11/78. c double precision dx(1),dy(1),dtemp integer i,incx,incy,ix,iy,m,mp1,n c gal_ddot = 0.0d0 dtemp = 0.0d0 if(n.le.0)return if(incx.eq.1.and.incy.eq.1)go to 20 c c code for unequal increments or equal increments c not equal to 1 c ix = 1 iy = 1 if(incx.lt.0)ix = (-n+1)*incx + 1 if(incy.lt.0)iy = (-n+1)*incy + 1 do 10 i = 1,n dtemp = dtemp + dx(ix)*dy(iy) ix = ix + incx iy = iy + incy 10 continue gal_ddot = dtemp return c c code for both increments equal to 1 c c c clean-up loop c 20 m = mod(n,5) if( m .eq. 0 ) go to 40 do 30 i = 1,m dtemp = dtemp + dx(i)*dy(i) 30 continue if( n .lt. 5 ) go to 60 40 mp1 = m + 1 do 50 i = mp1,n,5 dtemp = dtemp + dx(i)*dy(i) + dx(i + 1)*dy(i + 1) + * dx(i + 2)*dy(i + 2) + dx(i + 3)*dy(i + 3) + dx(i + 4)*dy(i + 4) 50 continue 60 gal_ddot = dtemp return end SUBROUTINE GAL_DGBMV ( TRANS, M, N, KL, KU, ALPHA, A, LDA, $ X, INCX, BETA, Y, INCY ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA, BETA INTEGER INCX, INCY, KL, KU, LDA, M, N CHARACTER*1 TRANS * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), X( * ), Y( * ) * .. * * Purpose * ======= * * GAL_DGBMV performs one of the matrix-vector operations * * y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y, * * where alpha and beta are scalars, x and y are vectors and A is an * m by n band matrix, with kl sub-diagonals and ku super-diagonals. * * Parameters * ========== * * TRANS - CHARACTER*1. * On entry, TRANS specifies the operation to be performed as * follows: * * TRANS = 'N' or 'n' y := alpha*A*x + beta*y. * * TRANS = 'T' or 't' y := alpha*A'*x + beta*y. * * TRANS = 'C' or 'c' y := alpha*A'*x + beta*y. * * Unchanged on exit. * * M - INTEGER. * On entry, M specifies the number of rows of the matrix A. * M must be at least zero. * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the number of columns of the matrix A. * N must be at least zero. * Unchanged on exit. * * KL - INTEGER. * On entry, KL specifies the number of sub-diagonals of the * matrix A. KL must satisfy 0 .le. KL. * Unchanged on exit. * * KU - INTEGER. * On entry, KU specifies the number of super-diagonals of the * matrix A. KU must satisfy 0 .le. KU. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). * Before entry, the leading ( kl + ku + 1 ) by n part of the * array A must contain the matrix of coefficients, supplied * column by column, with the leading diagonal of the matrix in * row ( ku + 1 ) of the array, the first super-diagonal * starting at position 2 in row ku, the first sub-diagonal * starting at position 1 in row ( ku + 2 ), and so on. * Elements in the array A that do not correspond to elements * in the band matrix (such as the top left ku by ku triangle) * are not referenced. * The following program segment will transfer a band matrix * from conventional full matrix storage to band storage: * * DO 20, J = 1, N * K = KU + 1 - J * DO 10, I = MAX( 1, J - KU ), MIN( M, J + KL ) * A( K + I, J ) = matrix( I, J ) * 10 CONTINUE * 20 CONTINUE * * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. LDA must be at least * ( kl + ku + 1 ). * Unchanged on exit. * * X - DOUBLE PRECISION array of DIMENSION at least * ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' * and at least * ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. * Before entry, the incremented array X must contain the * vector x. * Unchanged on exit. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * BETA - DOUBLE PRECISION. * On entry, BETA specifies the scalar beta. When BETA is * supplied as zero then Y need not be set on input. * Unchanged on exit. * * Y - DOUBLE PRECISION array of DIMENSION at least * ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' * and at least * ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. * Before entry, the incremented array Y must contain the * vector y. On exit, Y is overwritten by the updated vector y. * * INCY - INTEGER. * On entry, INCY specifies the increment for the elements of * Y. INCY must not be zero. * Unchanged on exit. * * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * .. Parameters .. DOUBLE PRECISION ONE , ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. Local Scalars .. DOUBLE PRECISION TEMP INTEGER I, INFO, IX, IY, J, JX, JY, K, KUP1, KX, KY, $ LENX, LENY * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC MAX, MIN * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF ( .NOT.GAL_LSAME( TRANS, 'N' ).AND. $ .NOT.GAL_LSAME( TRANS, 'T' ).AND. $ .NOT.GAL_LSAME( TRANS, 'C' ) )THEN INFO = 1 ELSE IF( M.LT.0 )THEN INFO = 2 ELSE IF( N.LT.0 )THEN INFO = 3 ELSE IF( KL.LT.0 )THEN INFO = 4 ELSE IF( KU.LT.0 )THEN INFO = 5 ELSE IF( LDA.LT.( KL + KU + 1 ) )THEN INFO = 8 ELSE IF( INCX.EQ.0 )THEN INFO = 10 ELSE IF( INCY.EQ.0 )THEN INFO = 13 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DGBMV ', INFO ) RETURN END IF * * Quick return if possible. * IF( ( M.EQ.0 ).OR.( N.EQ.0 ).OR. $ ( ( ALPHA.EQ.ZERO ).AND.( BETA.EQ.ONE ) ) ) $ RETURN * * Set LENX and LENY, the lengths of the vectors x and y, and set * up the start points in X and Y. * IF( GAL_LSAME( TRANS, 'N' ) )THEN LENX = N LENY = M ELSE LENX = M LENY = N END IF IF( INCX.GT.0 )THEN KX = 1 ELSE KX = 1 - ( LENX - 1 )*INCX END IF IF( INCY.GT.0 )THEN KY = 1 ELSE KY = 1 - ( LENY - 1 )*INCY END IF * * Start the operations. In this version the elements of A are * accessed sequentially with one pass through the band part of A. * * First form y := beta*y. * IF( BETA.NE.ONE )THEN IF( INCY.EQ.1 )THEN IF( BETA.EQ.ZERO )THEN DO 10, I = 1, LENY Y( I ) = ZERO 10 CONTINUE ELSE DO 20, I = 1, LENY Y( I ) = BETA*Y( I ) 20 CONTINUE END IF ELSE IY = KY IF( BETA.EQ.ZERO )THEN DO 30, I = 1, LENY Y( IY ) = ZERO IY = IY + INCY 30 CONTINUE ELSE DO 40, I = 1, LENY Y( IY ) = BETA*Y( IY ) IY = IY + INCY 40 CONTINUE END IF END IF END IF IF( ALPHA.EQ.ZERO ) $ RETURN KUP1 = KU + 1 IF( GAL_LSAME( TRANS, 'N' ) )THEN * * Form y := alpha*A*x + y. * JX = KX IF( INCY.EQ.1 )THEN DO 60, J = 1, N IF( X( JX ).NE.ZERO )THEN TEMP = ALPHA*X( JX ) K = KUP1 - J DO 50, I = MAX( 1, J - KU ), MIN( M, J + KL ) Y( I ) = Y( I ) + TEMP*A( K + I, J ) 50 CONTINUE END IF JX = JX + INCX 60 CONTINUE ELSE DO 80, J = 1, N IF( X( JX ).NE.ZERO )THEN TEMP = ALPHA*X( JX ) IY = KY K = KUP1 - J DO 70, I = MAX( 1, J - KU ), MIN( M, J + KL ) Y( IY ) = Y( IY ) + TEMP*A( K + I, J ) IY = IY + INCY 70 CONTINUE END IF JX = JX + INCX IF( J.GT.KU ) $ KY = KY + INCY 80 CONTINUE END IF ELSE * * Form y := alpha*A'*x + y. * JY = KY IF( INCX.EQ.1 )THEN DO 100, J = 1, N TEMP = ZERO K = KUP1 - J DO 90, I = MAX( 1, J - KU ), MIN( M, J + KL ) TEMP = TEMP + A( K + I, J )*X( I ) 90 CONTINUE Y( JY ) = Y( JY ) + ALPHA*TEMP JY = JY + INCY 100 CONTINUE ELSE DO 120, J = 1, N TEMP = ZERO IX = KX K = KUP1 - J DO 110, I = MAX( 1, J - KU ), MIN( M, J + KL ) TEMP = TEMP + A( K + I, J )*X( IX ) IX = IX + INCX 110 CONTINUE Y( JY ) = Y( JY ) + ALPHA*TEMP JY = JY + INCY IF( J.GT.KU ) $ KX = KX + INCX 120 CONTINUE END IF END IF * RETURN * * End of GAL_DGBMV . * END SUBROUTINE GAL_DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA, $ B,LDB,BETA,C,LDC) C .. Parameters .. DOUBLE PRECISION ONE, ZERO PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) INTEGER MB, NB, KB PARAMETER (MB=64,NB=MB,KB=64) C .. Scalar Arguments .. DOUBLE PRECISION ALPHA, BETA INTEGER K, LDA, LDB, LDC, M, N CHARACTER TRANSA, TRANSB C .. Array Arguments .. C C Purpose C ======= C C GAL_DGEMM performs one of the matrix-matrix operations C C C := alpha*op( A )*op( B ) + beta*C, C C where op( X ) is one of C C op( X ) = X or op( X ) = X', C C alpha and beta are scalars, and A, B and C are matrices, with op( C A ) an m by k matrix, op( B ) a k by n matrix and C an m by n C matrix. C C Parameters C ========== C C TRANSA - CHARACTER*1. C On entry, TRANSA specifies the form of op( A ) to be used in C the matrix multiplication as follows: C C TRANSA = 'N' or 'n', op( A ) = A. C C TRANSA = 'T' or 't', op( A ) = A'. C C TRANSA = 'C' or 'c', op( A ) = A'. C C Unchanged on exit. C C TRANSB - CHARACTER*1. C On entry, TRANSB specifies the form of op( B ) to be used in C the matrix multiplication as follows: C C TRANSB = 'N' or 'n', op( B ) = B. C C TRANSB = 'T' or 't', op( B ) = B'. C C TRANSB = 'C' or 'c', op( B ) = B'. C C Unchanged on exit. C C M - INTEGER. C On entry, M specifies the number of rows of the matrix C op( A ) and of the matrix C. M must be at least zero. C Unchanged on exit. C C N - INTEGER. C On entry, N specifies the number of columns of the matrix C op( B ) and the number of columns of the matrix C. N must be C at least zero. C Unchanged on exit. C C K - INTEGER. C On entry, K specifies the number of columns of the matrix C op( A ) and the number of rows of the matrix op( B ). K must C be at least zero. C Unchanged on exit. C C ALPHA - DOUBLE PRECISION. C On entry, ALPHA specifies the scalar alpha. C Unchanged on exit. C C A - DOUBLE PRECISION array of DIMENSION ( LDA, ka ), where ka C is k when TRANSA = 'N' or 'n', and is m otherwise. Before C entry with TRANSA = 'N' or 'n', the leading m by k part of the C array A must contain the matrix A, otherwise the leading k by C m part of the array A must contain the matrix A. C Unchanged on exit. C C LDA - INTEGER. C On entry, LDA specifies the first dimension of A as declared C in the calling (sub) program. When TRANSA = 'N' or 'n' then C LDA must be at least max( 1, m ), otherwise LDA must be at C least max( 1, k ). C Unchanged on exit. C C B - DOUBLE PRECISION array of DIMENSION ( LDB, kb ), where kb C is n when TRANSB = 'N' or 'n', and is k otherwise. Before C entry with TRANSB = 'N' or 'n', the leading k by n part of the C array B must contain the matrix B, otherwise the leading n by C k part of the array B must contain the matrix B. C Unchanged on exit. C C LDB - INTEGER. C On entry, LDB specifies the first dimension of B as declared C in the calling (sub) program. When TRANSB = 'N' or 'n' then C LDB must be at least max( 1, k ), otherwise LDB must be at C least max( 1, n ). C Unchanged on exit. C C BETA - DOUBLE PRECISION. C On entry, BETA specifies the scalar beta. When BETA is C supplied as zero then C need not be set on input. C Unchanged on exit. C C C - DOUBLE PRECISION array of DIMENSION ( LDC, n ). C Before entry, the leading m by n part of the array C must C contain the matrix C, except when beta is zero, in which C case C need not be set on entry. C On exit, the array C is overwritten by the m by n matrix C ( alpha*op( A )*op( B ) + beta*C ). C C LDC - INTEGER. C On entry, LDC specifies the first dimension of C as declared C in the calling (sub) program. LDC must be at least C max( 1, m ). C Unchanged on exit. C C C Level 3 Blas routine. C C -- Written on 8-February-1989. C Jack Dongarra, Argonne National Laboratory. C Iain Duff, AERE Harwell. C Jeremy Du Croz, Numerical Algorithms Group Ltd. C Sven Hammarling, Numerical Algorithms Group Ltd. * * This code comes from a report entitled: * The IBM RISC System/6000 and Linear Algebra Operations, by * Jack J. Dongarra, Peter Mayes, and Giuseppe Radicati di Brozolo, * University of Tennessee Computer Science Tech Report: CS - 90 - * 122. C C DOUBLE PRECISION A(LDA,*), B(LDB,*), C(LDC,*) C .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME C .. External Subroutines .. EXTERNAL GAL_XERBLA C .. Intrinsic Functions .. INTRINSIC MAX, MIN C .. Local Scalars .. DOUBLE PRECISION T11, T12, T21, T22 INTEGER I, IDEPTH, II, ILEN, INFO, ISPAN, J, JDEPTH, JJ, * JLEN, JSPAN, L, LL, LSPAN, NCOLA, NROWA, NROWB LOGICAL NOTA, NOTB C .. Local Arrays .. DOUBLE PRECISION CH(KB,MB), CH1(KB), CH2(KB) C .. Executable Statements .. C C Set NOTA and NOTB as true if A and B respectively are not C transposed and set NROWA, NCOLA and NROWB as the number of rows C and columns of A and the number of rows of B respectively. C NOTA = GAL_LSAME(TRANSA,'N') NOTB = GAL_LSAME(TRANSB,'N') IF (NOTA) THEN NROWA = M NCOLA = K ELSE NROWA = K NCOLA = M END IF IF (NOTB) THEN NROWB = K ELSE NROWB = N END IF C C Test the input parameters. C INFO = 0 IF (( .NOT. NOTA) .AND. ( .NOT. GAL_LSAME(TRANSA,'C')) * .AND. ( .NOT. GAL_LSAME(TRANSA,'T'))) THEN INFO = 1 ELSE IF (( .NOT. NOTB) .AND. ( .NOT. GAL_LSAME(TRANSB,'C')) * .AND. ( .NOT. GAL_LSAME(TRANSB,'T'))) THEN INFO = 2 ELSE IF (M.LT.0) THEN INFO = 3 ELSE IF (N.LT.0) THEN INFO = 4 ELSE IF (K.LT.0) THEN INFO = 5 ELSE IF (LDA.LT.MAX(1,NROWA)) THEN INFO = 8 ELSE IF (LDB.LT.MAX(1,NROWB)) THEN INFO = 10 ELSE IF (LDC.LT.MAX(1,M)) THEN INFO = 13 END IF IF (INFO.NE.0) THEN CALL GAL_XERBLA('GAL_DGEMM ',INFO) RETURN END IF C C Quick return if possible. C IF ((M.EQ.0) .OR. (N.EQ.0) .OR. (((ALPHA.EQ.ZERO) .OR. (K.EQ.0)) * .AND. (BETA.EQ.ONE))) RETURN IF (BETA.EQ.ZERO) THEN DO 40 J = 1, N DO 20 I = 1, M C(I,J) = ZERO 20 CONTINUE 40 CONTINUE ELSE DO 80 J = 1, N DO 60 I = 1, M C(I,J) = BETA*C(I,J) 60 CONTINUE 80 CONTINUE END IF C C And if alpha.eq.zero. C IF (ALPHA.EQ.ZERO) RETURN C C Start the operations. C IF (NOTB) THEN IF (NOTA) THEN C C Form C := C + alpha*A*B. C DO 380 L = 1, K, KB LSPAN = MIN(KB,K-L+1) DO 360 I = 1, M, MB IDEPTH = 2 ISPAN = MIN(MB,M-I+1) ILEN = IDEPTH*(ISPAN/IDEPTH) DO 120 II = I, I + ISPAN - 1 DO 100 LL = L, L + LSPAN - 1 CH(LL-L+1,II-I+1) = ALPHA*A(II,LL) 100 CONTINUE 120 CONTINUE DO 340 J = 1, N, NB JDEPTH = 2 JSPAN = MIN(NB,N-J+1) JLEN = JDEPTH*(JSPAN/JDEPTH) DO 220 JJ = J, J + JLEN - 1, JDEPTH DO 160 II = I, I + ILEN - 1, IDEPTH T11 = ZERO T21 = ZERO T12 = ZERO T22 = ZERO DO 140 LL = L, L + LSPAN - 1 T11 = T11 + CH(LL-L+1,II-I+1)*B(LL,JJ) T21 = T21 + CH(LL-L+1,II-I+2)*B(LL,JJ) T12 = T12 + CH(LL-L+1,II-I+1)*B(LL,JJ+1) T22 = T22 + CH(LL-L+1,II-I+2)*B(LL,JJ+1) 140 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II+1,JJ) = C(II+1,JJ) + T21 C(II,JJ+1) = C(II,JJ+1) + T12 C(II+1,JJ+1) = C(II+1,JJ+1) + T22 160 CONTINUE IF (ILEN.LT.ISPAN) THEN DO 200 II = I + ILEN, I + ISPAN - 1 T11 = ZERO T12 = ZERO DO 180 LL = L, L + LSPAN - 1 T11 = T11 + CH(LL-L+1,II-I+1)*B(LL,JJ) T12 = T12 + CH(LL-L+1,II-I+1)*B(LL, * JJ+1) 180 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II,JJ+1) = C(II,JJ+1) + T12 200 CONTINUE END IF 220 CONTINUE IF (JLEN.LT.JSPAN) THEN DO 320 JJ = J + JLEN, J + JSPAN - 1 DO 260 II = I, I + ILEN - 1, IDEPTH T11 = ZERO T21 = ZERO DO 240 LL = L, L + LSPAN - 1 T11 = T11 + CH(LL-L+1,II-I+1)*B(LL,JJ) T21 = T21 + CH(LL-L+1,II-I+2)*B(LL,JJ) 240 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II+1,JJ) = C(II+1,JJ) + T21 260 CONTINUE IF (ILEN.LT.ISPAN) THEN DO 300 II = I + ILEN, I + ISPAN - 1 T11 = ZERO DO 280 LL = L, L + LSPAN - 1 T11 = T11 + CH(LL-L+1,II-I+1)*B(LL, * JJ) 280 CONTINUE C(II,JJ) = C(II,JJ) + T11 300 CONTINUE END IF 320 CONTINUE END IF 340 CONTINUE 360 CONTINUE 380 CONTINUE ELSE C C Form C := C + alpha*A'*B C DO 680 I = 1, M, MB IDEPTH = 2 ISPAN = MIN(MB,M-I+1) ILEN = IDEPTH*(ISPAN/IDEPTH) DO 660 L = 1, K, KB LSPAN = MIN(KB,K-L+1) DO 420 II = I, I + ISPAN - 1 DO 400 LL = L, L + LSPAN - 1 CH(LL-L+1,II-I+1) = ALPHA*A(LL,II) 400 CONTINUE 420 CONTINUE DO 640 J = 1, N, NB JDEPTH = 2 JSPAN = MIN(NB,N-J+1) JLEN = JDEPTH*(JSPAN/JDEPTH) DO 520 JJ = J, J + JLEN - 1, JDEPTH DO 460 II = I, I + ILEN - 1, IDEPTH T11 = ZERO T21 = ZERO T12 = ZERO T22 = ZERO DO 440 LL = L, L + LSPAN - 1 T11 = T11 + CH(LL-L+1,II-I+1)*B(LL,JJ) T21 = T21 + CH(LL-L+1,II-I+2)*B(LL,JJ) T12 = T12 + CH(LL-L+1,II-I+1)*B(LL,JJ+1) T22 = T22 + CH(LL-L+1,II-I+2)*B(LL,JJ+1) 440 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II+1,JJ) = C(II+1,JJ) + T21 C(II,JJ+1) = C(II,JJ+1) + T12 C(II+1,JJ+1) = C(II+1,JJ+1) + T22 460 CONTINUE IF (ILEN.LT.ISPAN) THEN DO 500 II = I + ILEN, I + ISPAN - 1 T11 = ZERO T12 = ZERO DO 480 LL = L, L + LSPAN - 1 T11 = T11 + CH(LL-L+1,II-I+1)*B(LL,JJ) T12 = T12 + CH(LL-L+1,II-I+1)*B(LL, * JJ+1) 480 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II,JJ+1) = C(II,JJ+1) + T12 500 CONTINUE END IF 520 CONTINUE IF (JLEN.LT.JSPAN) THEN DO 620 JJ = J + JLEN, J + JSPAN - 1 DO 560 II = I, I + ILEN - 1, IDEPTH T11 = ZERO T21 = ZERO DO 540 LL = L, L + LSPAN - 1 T11 = T11 + CH(LL-L+1,II-I+1)*B(LL,JJ) T21 = T21 + CH(LL-L+1,II-I+2)*B(LL,JJ) 540 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II+1,JJ) = C(II+1,JJ) + T21 560 CONTINUE IF (ILEN.LT.ISPAN) THEN DO 600 II = I + ILEN, I + ISPAN - 1 T11 = ZERO DO 580 LL = L, L + LSPAN - 1 T11 = T11 + CH(LL-L+1,II-I+1)*B(LL, * JJ) 580 CONTINUE C(II,JJ) = C(II,JJ) + T11 600 CONTINUE END IF 620 CONTINUE END IF 640 CONTINUE 660 CONTINUE 680 CONTINUE END IF ELSE IF (NOTA) THEN C C Form C := C + alpha*A*B' C DO 1000 J = 1, N, NB JDEPTH = 2 JSPAN = MIN(NB,N-J+1) JLEN = JDEPTH*(JSPAN/JDEPTH) DO 980 L = 1, K, KB LSPAN = MIN(KB,K-L+1) DO 720 JJ = J, J + JSPAN - 1 DO 700 LL = L, L + LSPAN - 1 CH(LL-L+1,JJ-J+1) = ALPHA*B(JJ,LL) 700 CONTINUE 720 CONTINUE DO 960 I = 1, M, MB IDEPTH = 2 ISPAN = MIN(MB,M-I+1) ILEN = IDEPTH*(ISPAN/IDEPTH) DO 840 II = I, I + ILEN - 1, IDEPTH DO 740 LL = L, L + LSPAN - 1 CH1(LL-L+1) = A(II,LL) CH2(LL-L+1) = A(II+1,LL) 740 CONTINUE DO 780 JJ = J, J + JLEN - 1, JDEPTH T11 = ZERO T21 = ZERO T12 = ZERO T22 = ZERO DO 760 LL = L, L + LSPAN - 1 T11 = T11 + CH1(LL-L+1)*CH(LL-L+1,JJ-J+1) T21 = T21 + CH2(LL-L+1)*CH(LL-L+1,JJ-J+1) T12 = T12 + CH1(LL-L+1)*CH(LL-L+1,JJ-J+2) T22 = T22 + CH2(LL-L+1)*CH(LL-L+1,JJ-J+2) 760 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II+1,JJ) = C(II+1,JJ) + T21 C(II,JJ+1) = C(II,JJ+1) + T12 C(II+1,JJ+1) = C(II+1,JJ+1) + T22 780 CONTINUE IF (JLEN.LT.JSPAN) THEN DO 820 JJ = J + JLEN, J + JSPAN - 1 T11 = ZERO T21 = ZERO DO 800 LL = L, L + LSPAN - 1 T11 = T11 + A(II,LL)*CH(LL-L+1,JJ-J+1) T21 = T21 + A(II+1,LL)*CH(LL-L+1, * JJ-J+1) 800 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II+1,JJ) = C(II+1,JJ) + T21 820 CONTINUE END IF 840 CONTINUE IF (ILEN.LT.ISPAN) THEN DO 940 II = I + ILEN, I + ISPAN - 1 DO 880 JJ = J, J + JLEN - 1, JDEPTH T11 = ZERO T12 = ZERO DO 860 LL = L, L + LSPAN - 1 T11 = T11 + A(II,LL)*CH(LL-L+1,JJ-J+1) T12 = T12 + A(II,LL)*CH(LL-L+1,JJ-J+2) 860 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II,JJ+1) = C(II,JJ+1) + T12 880 CONTINUE IF (JLEN.LT.JSPAN) THEN DO 920 JJ = J + JLEN, J + JSPAN - 1 T11 = ZERO DO 900 LL = L, L + LSPAN - 1 T11 = T11 + A(II,LL)*CH(LL-L+1, * JJ-J+1) 900 CONTINUE C(II,JJ) = C(II,JJ) + T11 920 CONTINUE END IF 940 CONTINUE END IF 960 CONTINUE 980 CONTINUE 1000 CONTINUE ELSE C C Form C := C + alpha*A'*B' C DO 1300 J = 1, N, NB JDEPTH = 2 JSPAN = MIN(NB,N-J+1) JLEN = JDEPTH*(JSPAN/JDEPTH) DO 1280 L = 1, K, KB LSPAN = MIN(KB,K-L+1) DO 1040 JJ = J, J + JSPAN - 1 DO 1020 LL = L, L + LSPAN - 1 CH(LL-L+1,JJ-J+1) = ALPHA*B(JJ,LL) 1020 CONTINUE 1040 CONTINUE DO 1260 I = 1, M, MB IDEPTH = 2 ISPAN = MIN(MB,M-I+1) ILEN = IDEPTH*(ISPAN/IDEPTH) DO 1140 II = I, I + ILEN - 1, IDEPTH DO 1080 JJ = J, J + JLEN - 1, JDEPTH T11 = ZERO T21 = ZERO T12 = ZERO T22 = ZERO DO 1060 LL = L, L + LSPAN - 1 T11 = T11 + A(LL,II)*CH(LL-L+1,JJ-J+1) T21 = T21 + A(LL,II+1)*CH(LL-L+1,JJ-J+1) T12 = T12 + A(LL,II)*CH(LL-L+1,JJ-J+2) T22 = T22 + A(LL,II+1)*CH(LL-L+1,JJ-J+2) 1060 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II+1,JJ) = C(II+1,JJ) + T21 C(II,JJ+1) = C(II,JJ+1) + T12 C(II+1,JJ+1) = C(II+1,JJ+1) + T22 1080 CONTINUE IF (JLEN.LT.JSPAN) THEN DO 1120 JJ = J + JLEN, J + JSPAN - 1 T11 = ZERO T21 = ZERO DO 1100 LL = L, L + LSPAN - 1 T11 = T11 + A(LL,II)*CH(LL-L+1,JJ-J+1) T21 = T21 + A(LL,II+1)*CH(LL-L+1, * JJ-J+1) 1100 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II+1,JJ) = C(II+1,JJ) + T21 1120 CONTINUE END IF 1140 CONTINUE IF (ILEN.LT.ISPAN) THEN DO 1240 II = I + ILEN, I + ISPAN - 1 DO 1180 JJ = J, J + JLEN - 1, JDEPTH T11 = ZERO T12 = ZERO DO 1160 LL = L, L + LSPAN - 1 T11 = T11 + A(LL,II)*CH(LL-L+1,JJ-J+1) T12 = T12 + A(LL,II)*CH(LL-L+1,JJ-J+2) 1160 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II,JJ+1) = C(II,JJ+1) + T12 1180 CONTINUE IF (JLEN.LT.JSPAN) THEN DO 1220 JJ = J + JLEN, J + JSPAN - 1 T11 = ZERO DO 1200 LL = L, L + LSPAN - 1 T11 = T11 + A(LL,II)*CH(LL-L+1, * JJ-J+1) 1200 CONTINUE C(II,JJ) = C(II,JJ) + T11 1220 CONTINUE END IF 1240 CONTINUE END IF 1260 CONTINUE 1280 CONTINUE 1300 CONTINUE END IF END IF C RETURN C C End of GAL_DGEMM . C END SUBROUTINE GAL_DGEMV ( TRANS, M, N, ALPHA, A, LDA, X, INCX, $ BETA, Y, INCY ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA, BETA INTEGER INCX, INCY, LDA, M, N CHARACTER*1 TRANS * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), X( * ), Y( * ) * .. * * Purpose * ======= * * GAL_DGEMV performs one of the matrix-vector operations * * y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y, * * where alpha and beta are scalars, x and y are vectors and A is an * m by n matrix. * * Parameters * ========== * * TRANS - CHARACTER*1. * On entry, TRANS specifies the operation to be performed as * follows: * * TRANS = 'N' or 'n' y := alpha*A*x + beta*y. * * TRANS = 'T' or 't' y := alpha*A'*x + beta*y. * * TRANS = 'C' or 'c' y := alpha*A'*x + beta*y. * * Unchanged on exit. * * M - INTEGER. * On entry, M specifies the number of rows of the matrix A. * M must be at least zero. * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the number of columns of the matrix A. * N must be at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). * Before entry, the leading m by n part of the array A must * contain the matrix of coefficients. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. LDA must be at least * max( 1, m ). * Unchanged on exit. * * X - DOUBLE PRECISION array of DIMENSION at least * ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' * and at least * ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. * Before entry, the incremented array X must contain the * vector x. * Unchanged on exit. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * BETA - DOUBLE PRECISION. * On entry, BETA specifies the scalar beta. When BETA is * supplied as zero then Y need not be set on input. * Unchanged on exit. * * Y - DOUBLE PRECISION array of DIMENSION at least * ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' * and at least * ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. * Before entry with BETA non-zero, the incremented array Y * must contain the vector y. On exit, Y is overwritten by the * updated vector y. * * INCY - INTEGER. * On entry, INCY specifies the increment for the elements of * Y. INCY must not be zero. * Unchanged on exit. * * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * * .. Parameters .. DOUBLE PRECISION ONE , ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. Local Scalars .. DOUBLE PRECISION TEMP INTEGER I, INFO, IX, IY, J, JX, JY, KX, KY, LENX, LENY * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC MAX * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF ( .NOT.GAL_LSAME( TRANS, 'N' ).AND. $ .NOT.GAL_LSAME( TRANS, 'T' ).AND. $ .NOT.GAL_LSAME( TRANS, 'C' ) )THEN INFO = 1 ELSE IF( M.LT.0 )THEN INFO = 2 ELSE IF( N.LT.0 )THEN INFO = 3 ELSE IF( LDA.LT.MAX( 1, M ) )THEN INFO = 6 ELSE IF( INCX.EQ.0 )THEN INFO = 8 ELSE IF( INCY.EQ.0 )THEN INFO = 11 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DGEMV ', INFO ) RETURN END IF * * Quick return if possible. * IF( ( M.EQ.0 ).OR.( N.EQ.0 ).OR. $ ( ( ALPHA.EQ.ZERO ).AND.( BETA.EQ.ONE ) ) ) $ RETURN * * Set LENX and LENY, the lengths of the vectors x and y, and set * up the start points in X and Y. * IF( GAL_LSAME( TRANS, 'N' ) )THEN LENX = N LENY = M ELSE LENX = M LENY = N END IF IF( INCX.GT.0 )THEN KX = 1 ELSE KX = 1 - ( LENX - 1 )*INCX END IF IF( INCY.GT.0 )THEN KY = 1 ELSE KY = 1 - ( LENY - 1 )*INCY END IF * * Start the operations. In this version the elements of A are * accessed sequentially with one pass through A. * * First form y := beta*y. * IF( BETA.NE.ONE )THEN IF( INCY.EQ.1 )THEN IF( BETA.EQ.ZERO )THEN DO 10, I = 1, LENY Y( I ) = ZERO 10 CONTINUE ELSE DO 20, I = 1, LENY Y( I ) = BETA*Y( I ) 20 CONTINUE END IF ELSE IY = KY IF( BETA.EQ.ZERO )THEN DO 30, I = 1, LENY Y( IY ) = ZERO IY = IY + INCY 30 CONTINUE ELSE DO 40, I = 1, LENY Y( IY ) = BETA*Y( IY ) IY = IY + INCY 40 CONTINUE END IF END IF END IF IF( ALPHA.EQ.ZERO ) $ RETURN IF( GAL_LSAME( TRANS, 'N' ) )THEN * * Form y := alpha*A*x + y. * JX = KX IF( INCY.EQ.1 )THEN DO 60, J = 1, N IF( X( JX ).NE.ZERO )THEN TEMP = ALPHA*X( JX ) DO 50, I = 1, M Y( I ) = Y( I ) + TEMP*A( I, J ) 50 CONTINUE END IF JX = JX + INCX 60 CONTINUE ELSE DO 80, J = 1, N IF( X( JX ).NE.ZERO )THEN TEMP = ALPHA*X( JX ) IY = KY DO 70, I = 1, M Y( IY ) = Y( IY ) + TEMP*A( I, J ) IY = IY + INCY 70 CONTINUE END IF JX = JX + INCX 80 CONTINUE END IF ELSE * * Form y := alpha*A'*x + y. * JY = KY IF( INCX.EQ.1 )THEN DO 100, J = 1, N TEMP = ZERO DO 90, I = 1, M TEMP = TEMP + A( I, J )*X( I ) 90 CONTINUE Y( JY ) = Y( JY ) + ALPHA*TEMP JY = JY + INCY 100 CONTINUE ELSE DO 120, J = 1, N TEMP = ZERO IX = KX DO 110, I = 1, M TEMP = TEMP + A( I, J )*X( IX ) IX = IX + INCX 110 CONTINUE Y( JY ) = Y( JY ) + ALPHA*TEMP JY = JY + INCY 120 CONTINUE END IF END IF * RETURN * * End of GAL_DGEMV . * END SUBROUTINE GAL_DGER ( M, N, ALPHA, X, INCX, Y, INCY, A, LDA ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA INTEGER INCX, INCY, LDA, M, N * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), X( * ), Y( * ) * .. * * Purpose * ======= * * GAL_DGER performs the rank 1 operation * * A := alpha*x*y' + A, * * where alpha is a scalar, x is an m element vector, y is an n element * vector and A is an m by n matrix. * * Parameters * ========== * * M - INTEGER. * On entry, M specifies the number of rows of the matrix A. * M must be at least zero. * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the number of columns of the matrix A. * N must be at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * X - DOUBLE PRECISION array of dimension at least * ( 1 + ( m - 1 )*abs( INCX ) ). * Before entry, the incremented array X must contain the m * element vector x. * Unchanged on exit. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * Y - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCY ) ). * Before entry, the incremented array Y must contain the n * element vector y. * Unchanged on exit. * * INCY - INTEGER. * On entry, INCY specifies the increment for the elements of * Y. INCY must not be zero. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). * Before entry, the leading m by n part of the array A must * contain the matrix of coefficients. On exit, A is * overwritten by the updated matrix. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. LDA must be at least * max( 1, m ). * Unchanged on exit. * * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. Local Scalars .. DOUBLE PRECISION TEMP INTEGER I, INFO, IX, J, JY, KX * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC MAX * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF ( M.LT.0 )THEN INFO = 1 ELSE IF( N.LT.0 )THEN INFO = 2 ELSE IF( INCX.EQ.0 )THEN INFO = 5 ELSE IF( INCY.EQ.0 )THEN INFO = 7 ELSE IF( LDA.LT.MAX( 1, M ) )THEN INFO = 9 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DGER ', INFO ) RETURN END IF * * Quick return if possible. * IF( ( M.EQ.0 ).OR.( N.EQ.0 ).OR.( ALPHA.EQ.ZERO ) ) $ RETURN * * Start the operations. In this version the elements of A are * accessed sequentially with one pass through A. * IF( INCY.GT.0 )THEN JY = 1 ELSE JY = 1 - ( N - 1 )*INCY END IF IF( INCX.EQ.1 )THEN DO 20, J = 1, N IF( Y( JY ).NE.ZERO )THEN TEMP = ALPHA*Y( JY ) DO 10, I = 1, M A( I, J ) = A( I, J ) + X( I )*TEMP 10 CONTINUE END IF JY = JY + INCY 20 CONTINUE ELSE IF( INCX.GT.0 )THEN KX = 1 ELSE KX = 1 - ( M - 1 )*INCX END IF DO 40, J = 1, N IF( Y( JY ).NE.ZERO )THEN TEMP = ALPHA*Y( JY ) IX = KX DO 30, I = 1, M A( I, J ) = A( I, J ) + X( IX )*TEMP IX = IX + INCX 30 CONTINUE END IF JY = JY + INCY 40 CONTINUE END IF * RETURN * * End of GAL_DGER . * END double precision function gal_dnrm2 ( n, dx, incx) integer i, incx, ix, j, n, next double precision dx(1), cutlo, cuthi, hitest, sum, xmax,zero,one data zero, one /0.0d0, 1.0d0/ c c euclidean norm of the n-vector stored in dx() with storage c increment incx . c if n .le. 0 return with result = 0. c if n .ge. 1 then incx must be .ge. 1 c c c.l.lawson, 1978 jan 08 c modified to correct problem with negative increment, 8/21/90. c modified to correct failure to update ix, 1/25/92. c c four phase method using two built-in constants that are c hopefully applicable to all machines. c cutlo = maximum of dsqrt(u/eps) over all known machines. c cuthi = minimum of dsqrt(v) over all known machines. c where c eps = smallest no. such that eps + 1. .gt. 1. c u = smallest positive no. (underflow limit) c v = largest no. (overflow limit) c c brief outline of algorithm.. c c phase 1 scans zero components. c move to phase 2 when a component is nonzero and .le. cutlo c move to phase 3 when a component is .gt. cutlo c move to phase 4 when a component is .ge. cuthi/m c where m = n for x() real and m = 2*n for complex. c c values for cutlo and cuthi.. c from the environmental parameters listed in the imsl converter c document the limiting values are as follows.. c cutlo, s.p. u/eps = 2**(-102) for honeywell. close seconds are c univac and dec at 2**(-103) c thus cutlo = 2**(-51) = 4.44089e-16 c cuthi, s.p. v = 2**127 for univac, honeywell, and dec. c thus cuthi = 2**(63.5) = 1.30438e19 c cutlo, d.p. u/eps = 2**(-67) for honeywell and dec. c thus cutlo = 2**(-33.5) = 8.23181d-11 c cuthi, d.p. same as s.p. cuthi = 1.30438d19 c data cutlo, cuthi / 8.232d-11, 1.304d19 / c data cutlo, cuthi / 4.441e-16, 1.304e19 / data cutlo, cuthi / 8.232d-11, 1.304d19 / c if(n .gt. 0) go to 10 gal_dnrm2 = zero go to 300 c 10 assign 30 to next sum = zero i = 1 if( incx .lt. 0 )i = (-n+1)*incx + 1 ix = 1 c begin main loop 20 go to next,(30, 50, 70, 110) 30 if( dabs(dx(i)) .gt. cutlo) go to 85 assign 50 to next xmax = zero c c phase 1. sum is zero c 50 if( dx(i) .eq. zero) go to 200 if( dabs(dx(i)) .gt. cutlo) go to 85 c c prepare for phase 2. assign 70 to next go to 105 c c prepare for phase 4. c 100 continue ix = j assign 110 to next sum = (sum / dx(i)) / dx(i) 105 xmax = dabs(dx(i)) go to 115 c c phase 2. sum is small. c scale to avoid destructive underflow. c 70 if( dabs(dx(i)) .gt. cutlo ) go to 75 c c common code for phases 2 and 4. c in phase 4 sum is large. scale to avoid overflow. c 110 if( dabs(dx(i)) .le. xmax ) go to 115 sum = one + sum * (xmax / dx(i))**2 xmax = dabs(dx(i)) go to 200 c 115 sum = sum + (dx(i)/xmax)**2 go to 200 c c c prepare for phase 3. c 75 sum = (sum * xmax) * xmax c c c for real or d.p. set hitest = cuthi/n c for complex set hitest = cuthi/(2*n) c 85 hitest = cuthi/float( n ) c c phase 3. sum is mid-range. no scaling. c do 95 j = ix,n if(dabs(dx(i)) .ge. hitest) go to 100 sum = sum + dx(i)**2 i = i + incx 95 continue gal_dnrm2 = dsqrt( sum ) go to 300 c 200 continue ix = ix + 1 i = i + incx if( ix .le. n ) go to 20 c c end of main loop. c c compute square root and adjust for scaling. c gal_dnrm2 = xmax * dsqrt(sum) 300 continue return end subroutine gal_drot (n,dx,incx,dy,incy,c,s) c c applies a plane rotation. c jack dongarra, linpack, 3/11/78. c double precision dx(1),dy(1),dtemp,c,s integer i,incx,incy,ix,iy,n c if(n.le.0)return if(incx.eq.1.and.incy.eq.1)go to 20 c c code for unequal increments or equal increments not equal c to 1 c ix = 1 iy = 1 if(incx.lt.0)ix = (-n+1)*incx + 1 if(incy.lt.0)iy = (-n+1)*incy + 1 do 10 i = 1,n dtemp = c*dx(ix) + s*dy(iy) dy(iy) = c*dy(iy) - s*dx(ix) dx(ix) = dtemp ix = ix + incx iy = iy + incy 10 continue return c c code for both increments equal to 1 c 20 do 30 i = 1,n dtemp = c*dx(i) + s*dy(i) dy(i) = c*dy(i) - s*dx(i) dx(i) = dtemp 30 continue return end subroutine gal_gal_drotg(da,db,c,s) c c construct givens plane rotation. c jack dongarra, linpack, 3/11/78. c double precision da,db,c,s,roe,scale,r,z c roe = db if( dabs(da) .gt. dabs(db) ) roe = da scale = dabs(da) + dabs(db) if( scale .ne. 0.0d0 ) go to 10 c = 1.0d0 s = 0.0d0 r = 0.0d0 z = 0.0d0 go to 20 10 r = scale*dsqrt((da/scale)**2 + (db/scale)**2) r = dsign(1.0d0,roe)*r c = da/r s = db/r z = 1.0d0 if( dabs(da) .gt. dabs(db) ) z = s if( dabs(db) .ge. dabs(da) .and. c .ne. 0.0d0 ) z = 1.0d0/c 20 da = r db = z return end SUBROUTINE GAL_DSBMV ( UPLO, N, K, ALPHA, A, LDA, X, INCX, $ BETA, Y, INCY ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA, BETA INTEGER INCX, INCY, K, LDA, N CHARACTER*1 UPLO * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), X( * ), Y( * ) * .. * * Purpose * ======= * * GAL_DSBMV performs the matrix-vector operation * * y := alpha*A*x + beta*y, * * where alpha and beta are scalars, x and y are n element vectors and * A is an n by n symmetric band matrix, with k super-diagonals. * * Parameters * ========== * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the upper or lower * triangular part of the band matrix A is being supplied as * follows: * * UPLO = 'U' or 'u' The upper triangular part of A is * being supplied. * * UPLO = 'L' or 'l' The lower triangular part of A is * being supplied. * * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the order of the matrix A. * N must be at least zero. * Unchanged on exit. * * K - INTEGER. * On entry, K specifies the number of super-diagonals of the * matrix A. K must satisfy 0 .le. K. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). * Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) * by n part of the array A must contain the upper triangular * band part of the symmetric matrix, supplied column by * column, with the leading diagonal of the matrix in row * ( k + 1 ) of the array, the first super-diagonal starting at * position 2 in row k, and so on. The top left k by k triangle * of the array A is not referenced. * The following program segment will transfer the upper * triangular part of a symmetric band matrix from conventional * full matrix storage to band storage: * * DO 20, J = 1, N * M = K + 1 - J * DO 10, I = MAX( 1, J - K ), J * A( M + I, J ) = matrix( I, J ) * 10 CONTINUE * 20 CONTINUE * * Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) * by n part of the array A must contain the lower triangular * band part of the symmetric matrix, supplied column by * column, with the leading diagonal of the matrix in row 1 of * the array, the first sub-diagonal starting at position 1 in * row 2, and so on. The bottom right k by k triangle of the * array A is not referenced. * The following program segment will transfer the lower * triangular part of a symmetric band matrix from conventional * full matrix storage to band storage: * * DO 20, J = 1, N * M = 1 - J * DO 10, I = J, MIN( N, J + K ) * A( M + I, J ) = matrix( I, J ) * 10 CONTINUE * 20 CONTINUE * * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. LDA must be at least * ( k + 1 ). * Unchanged on exit. * * X - DOUBLE PRECISION array of DIMENSION at least * ( 1 + ( n - 1 )*abs( INCX ) ). * Before entry, the incremented array X must contain the * vector x. * Unchanged on exit. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * BETA - DOUBLE PRECISION. * On entry, BETA specifies the scalar beta. * Unchanged on exit. * * Y - DOUBLE PRECISION array of DIMENSION at least * ( 1 + ( n - 1 )*abs( INCY ) ). * Before entry, the incremented array Y must contain the * vector y. On exit, Y is overwritten by the updated vector y. * * INCY - INTEGER. * On entry, INCY specifies the increment for the elements of * Y. INCY must not be zero. * Unchanged on exit. * * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * * .. Parameters .. DOUBLE PRECISION ONE , ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. Local Scalars .. DOUBLE PRECISION TEMP1, TEMP2 INTEGER I, INFO, IX, IY, J, JX, JY, KPLUS1, KX, KY, L * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC MAX, MIN * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF ( .NOT.GAL_LSAME( UPLO, 'U' ).AND. $ .NOT.GAL_LSAME( UPLO, 'L' ) )THEN INFO = 1 ELSE IF( N.LT.0 )THEN INFO = 2 ELSE IF( K.LT.0 )THEN INFO = 3 ELSE IF( LDA.LT.( K + 1 ) )THEN INFO = 6 ELSE IF( INCX.EQ.0 )THEN INFO = 8 ELSE IF( INCY.EQ.0 )THEN INFO = 11 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DSBMV ', INFO ) RETURN END IF * * Quick return if possible. * IF( ( N.EQ.0 ).OR.( ( ALPHA.EQ.ZERO ).AND.( BETA.EQ.ONE ) ) ) $ RETURN * * Set up the start points in X and Y. * IF( INCX.GT.0 )THEN KX = 1 ELSE KX = 1 - ( N - 1 )*INCX END IF IF( INCY.GT.0 )THEN KY = 1 ELSE KY = 1 - ( N - 1 )*INCY END IF * * Start the operations. In this version the elements of the array A * are accessed sequentially with one pass through A. * * First form y := beta*y. * IF( BETA.NE.ONE )THEN IF( INCY.EQ.1 )THEN IF( BETA.EQ.ZERO )THEN DO 10, I = 1, N Y( I ) = ZERO 10 CONTINUE ELSE DO 20, I = 1, N Y( I ) = BETA*Y( I ) 20 CONTINUE END IF ELSE IY = KY IF( BETA.EQ.ZERO )THEN DO 30, I = 1, N Y( IY ) = ZERO IY = IY + INCY 30 CONTINUE ELSE DO 40, I = 1, N Y( IY ) = BETA*Y( IY ) IY = IY + INCY 40 CONTINUE END IF END IF END IF IF( ALPHA.EQ.ZERO ) $ RETURN IF( GAL_LSAME( UPLO, 'U' ) )THEN * * Form y when upper triangle of A is stored. * KPLUS1 = K + 1 IF( ( INCX.EQ.1 ).AND.( INCY.EQ.1 ) )THEN DO 60, J = 1, N TEMP1 = ALPHA*X( J ) TEMP2 = ZERO L = KPLUS1 - J DO 50, I = MAX( 1, J - K ), J - 1 Y( I ) = Y( I ) + TEMP1*A( L + I, J ) TEMP2 = TEMP2 + A( L + I, J )*X( I ) 50 CONTINUE Y( J ) = Y( J ) + TEMP1*A( KPLUS1, J ) + ALPHA*TEMP2 60 CONTINUE ELSE JX = KX JY = KY DO 80, J = 1, N TEMP1 = ALPHA*X( JX ) TEMP2 = ZERO IX = KX IY = KY L = KPLUS1 - J DO 70, I = MAX( 1, J - K ), J - 1 Y( IY ) = Y( IY ) + TEMP1*A( L + I, J ) TEMP2 = TEMP2 + A( L + I, J )*X( IX ) IX = IX + INCX IY = IY + INCY 70 CONTINUE Y( JY ) = Y( JY ) + TEMP1*A( KPLUS1, J ) + ALPHA*TEMP2 JX = JX + INCX JY = JY + INCY IF( J.GT.K )THEN KX = KX + INCX KY = KY + INCY END IF 80 CONTINUE END IF ELSE * * Form y when lower triangle of A is stored. * IF( ( INCX.EQ.1 ).AND.( INCY.EQ.1 ) )THEN DO 100, J = 1, N TEMP1 = ALPHA*X( J ) TEMP2 = ZERO Y( J ) = Y( J ) + TEMP1*A( 1, J ) L = 1 - J DO 90, I = J + 1, MIN( N, J + K ) Y( I ) = Y( I ) + TEMP1*A( L + I, J ) TEMP2 = TEMP2 + A( L + I, J )*X( I ) 90 CONTINUE Y( J ) = Y( J ) + ALPHA*TEMP2 100 CONTINUE ELSE JX = KX JY = KY DO 120, J = 1, N TEMP1 = ALPHA*X( JX ) TEMP2 = ZERO Y( JY ) = Y( JY ) + TEMP1*A( 1, J ) L = 1 - J IX = JX IY = JY DO 110, I = J + 1, MIN( N, J + K ) IX = IX + INCX IY = IY + INCY Y( IY ) = Y( IY ) + TEMP1*A( L + I, J ) TEMP2 = TEMP2 + A( L + I, J )*X( IX ) 110 CONTINUE Y( JY ) = Y( JY ) + ALPHA*TEMP2 JX = JX + INCX JY = JY + INCY 120 CONTINUE END IF END IF * RETURN * * End of GAL_DSBMV . * END subroutine gal_dscal(n,da,dx,incx) c c scales a vector by a constant. c uses unrolled loops for increment equal to one. c jack dongarra, linpack, 3/11/78. c modified to correct problem with negative increment, 8/21/90. c double precision da,dx(1) integer i,incx,ix,m,mp1,n c if(n.le.0)return if(incx.eq.1)go to 20 c c code for increment not equal to 1 c ix = 1 if(incx.lt.0)ix = (-n+1)*incx + 1 do 10 i = 1,n dx(ix) = da*dx(ix) ix = ix + incx 10 continue return c c code for increment equal to 1 c c c clean-up loop c 20 m = mod(n,5) if( m .eq. 0 ) go to 40 do 30 i = 1,m dx(i) = da*dx(i) 30 continue if( n .lt. 5 ) return 40 mp1 = m + 1 do 50 i = mp1,n,5 dx(i) = da*dx(i) dx(i + 1) = da*dx(i + 1) dx(i + 2) = da*dx(i + 2) dx(i + 3) = da*dx(i + 3) dx(i + 4) = da*dx(i + 4) 50 continue return end SUBROUTINE GAL_DSPMV ( UPLO, N, ALPHA, AP, X, INCX, BETA, $ Y, INCY ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA, BETA INTEGER INCX, INCY, N CHARACTER*1 UPLO * .. Array Arguments .. DOUBLE PRECISION AP( * ), X( * ), Y( * ) * .. * * Purpose * ======= * * GAL_DSPMV performs the matrix-vector operation * * y := alpha*A*x + beta*y, * * where alpha and beta are scalars, x and y are n element vectors and * A is an n by n symmetric matrix, supplied in packed form. * * Parameters * ========== * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the upper or lower * triangular part of the matrix A is supplied in the packed * array AP as follows: * * UPLO = 'U' or 'u' The upper triangular part of A is * supplied in AP. * * UPLO = 'L' or 'l' The lower triangular part of A is * supplied in AP. * * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the order of the matrix A. * N must be at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * AP - DOUBLE PRECISION array of DIMENSION at least * ( ( n*( n + 1 ) )/2 ). * Before entry with UPLO = 'U' or 'u', the array AP must * contain the upper triangular part of the symmetric matrix * packed sequentially, column by column, so that AP( 1 ) * contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) * and a( 2, 2 ) respectively, and so on. * Before entry with UPLO = 'L' or 'l', the array AP must * contain the lower triangular part of the symmetric matrix * packed sequentially, column by column, so that AP( 1 ) * contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) * and a( 3, 1 ) respectively, and so on. * Unchanged on exit. * * X - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCX ) ). * Before entry, the incremented array X must contain the n * element vector x. * Unchanged on exit. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * BETA - DOUBLE PRECISION. * On entry, BETA specifies the scalar beta. When BETA is * supplied as zero then Y need not be set on input. * Unchanged on exit. * * Y - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCY ) ). * Before entry, the incremented array Y must contain the n * element vector y. On exit, Y is overwritten by the updated * vector y. * * INCY - INTEGER. * On entry, INCY specifies the increment for the elements of * Y. INCY must not be zero. * Unchanged on exit. * * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * * .. Parameters .. DOUBLE PRECISION ONE , ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. Local Scalars .. DOUBLE PRECISION TEMP1, TEMP2 INTEGER I, INFO, IX, IY, J, JX, JY, K, KK, KX, KY * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF ( .NOT.GAL_LSAME( UPLO, 'U' ).AND. $ .NOT.GAL_LSAME( UPLO, 'L' ) )THEN INFO = 1 ELSE IF( N.LT.0 )THEN INFO = 2 ELSE IF( INCX.EQ.0 )THEN INFO = 6 ELSE IF( INCY.EQ.0 )THEN INFO = 9 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DSPMV ', INFO ) RETURN END IF * * Quick return if possible. * IF( ( N.EQ.0 ).OR.( ( ALPHA.EQ.ZERO ).AND.( BETA.EQ.ONE ) ) ) $ RETURN * * Set up the start points in X and Y. * IF( INCX.GT.0 )THEN KX = 1 ELSE KX = 1 - ( N - 1 )*INCX END IF IF( INCY.GT.0 )THEN KY = 1 ELSE KY = 1 - ( N - 1 )*INCY END IF * * Start the operations. In this version the elements of the array AP * are accessed sequentially with one pass through AP. * * First form y := beta*y. * IF( BETA.NE.ONE )THEN IF( INCY.EQ.1 )THEN IF( BETA.EQ.ZERO )THEN DO 10, I = 1, N Y( I ) = ZERO 10 CONTINUE ELSE DO 20, I = 1, N Y( I ) = BETA*Y( I ) 20 CONTINUE END IF ELSE IY = KY IF( BETA.EQ.ZERO )THEN DO 30, I = 1, N Y( IY ) = ZERO IY = IY + INCY 30 CONTINUE ELSE DO 40, I = 1, N Y( IY ) = BETA*Y( IY ) IY = IY + INCY 40 CONTINUE END IF END IF END IF IF( ALPHA.EQ.ZERO ) $ RETURN KK = 1 IF( GAL_LSAME( UPLO, 'U' ) )THEN * * Form y when AP contains the upper triangle. * IF( ( INCX.EQ.1 ).AND.( INCY.EQ.1 ) )THEN DO 60, J = 1, N TEMP1 = ALPHA*X( J ) TEMP2 = ZERO K = KK DO 50, I = 1, J - 1 Y( I ) = Y( I ) + TEMP1*AP( K ) TEMP2 = TEMP2 + AP( K )*X( I ) K = K + 1 50 CONTINUE Y( J ) = Y( J ) + TEMP1*AP( KK + J - 1 ) + ALPHA*TEMP2 KK = KK + J 60 CONTINUE ELSE JX = KX JY = KY DO 80, J = 1, N TEMP1 = ALPHA*X( JX ) TEMP2 = ZERO IX = KX IY = KY DO 70, K = KK, KK + J - 2 Y( IY ) = Y( IY ) + TEMP1*AP( K ) TEMP2 = TEMP2 + AP( K )*X( IX ) IX = IX + INCX IY = IY + INCY 70 CONTINUE Y( JY ) = Y( JY ) + TEMP1*AP( KK + J - 1 ) + ALPHA*TEMP2 JX = JX + INCX JY = JY + INCY KK = KK + J 80 CONTINUE END IF ELSE * * Form y when AP contains the lower triangle. * IF( ( INCX.EQ.1 ).AND.( INCY.EQ.1 ) )THEN DO 100, J = 1, N TEMP1 = ALPHA*X( J ) TEMP2 = ZERO Y( J ) = Y( J ) + TEMP1*AP( KK ) K = KK + 1 DO 90, I = J + 1, N Y( I ) = Y( I ) + TEMP1*AP( K ) TEMP2 = TEMP2 + AP( K )*X( I ) K = K + 1 90 CONTINUE Y( J ) = Y( J ) + ALPHA*TEMP2 KK = KK + ( N - J + 1 ) 100 CONTINUE ELSE JX = KX JY = KY DO 120, J = 1, N TEMP1 = ALPHA*X( JX ) TEMP2 = ZERO Y( JY ) = Y( JY ) + TEMP1*AP( KK ) IX = JX IY = JY DO 110, K = KK + 1, KK + N - J IX = IX + INCX IY = IY + INCY Y( IY ) = Y( IY ) + TEMP1*AP( K ) TEMP2 = TEMP2 + AP( K )*X( IX ) 110 CONTINUE Y( JY ) = Y( JY ) + ALPHA*TEMP2 JX = JX + INCX JY = JY + INCY KK = KK + ( N - J + 1 ) 120 CONTINUE END IF END IF * RETURN * * End of GAL_DSPMV . * END SUBROUTINE GAL_DSPR ( UPLO, N, ALPHA, X, INCX, AP ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA INTEGER INCX, N CHARACTER*1 UPLO * .. Array Arguments .. DOUBLE PRECISION AP( * ), X( * ) * .. * * Purpose * ======= * * GAL_DSPR performs the symmetric rank 1 operation * * A := alpha*x*x' + A, * * where alpha is a real scalar, x is an n element vector and A is an * n by n symmetric matrix, supplied in packed form. * * Parameters * ========== * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the upper or lower * triangular part of the matrix A is supplied in the packed * array AP as follows: * * UPLO = 'U' or 'u' The upper triangular part of A is * supplied in AP. * * UPLO = 'L' or 'l' The lower triangular part of A is * supplied in AP. * * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the order of the matrix A. * N must be at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * X - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCX ) ). * Before entry, the incremented array X must contain the n * element vector x. * Unchanged on exit. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * AP - DOUBLE PRECISION array of DIMENSION at least * ( ( n*( n + 1 ) )/2 ). * Before entry with UPLO = 'U' or 'u', the array AP must * contain the upper triangular part of the symmetric matrix * packed sequentially, column by column, so that AP( 1 ) * contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) * and a( 2, 2 ) respectively, and so on. On exit, the array * AP is overwritten by the upper triangular part of the * updated matrix. * Before entry with UPLO = 'L' or 'l', the array AP must * contain the lower triangular part of the symmetric matrix * packed sequentially, column by column, so that AP( 1 ) * contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) * and a( 3, 1 ) respectively, and so on. On exit, the array * AP is overwritten by the lower triangular part of the * updated matrix. * * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. Local Scalars .. DOUBLE PRECISION TEMP INTEGER I, INFO, IX, J, JX, K, KK, KX * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF ( .NOT.GAL_LSAME( UPLO, 'U' ).AND. $ .NOT.GAL_LSAME( UPLO, 'L' ) )THEN INFO = 1 ELSE IF( N.LT.0 )THEN INFO = 2 ELSE IF( INCX.EQ.0 )THEN INFO = 5 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DSPR ', INFO ) RETURN END IF * * Quick return if possible. * IF( ( N.EQ.0 ).OR.( ALPHA.EQ.ZERO ) ) $ RETURN * * Set the start point in X if the increment is not unity. * IF( INCX.LE.0 )THEN KX = 1 - ( N - 1 )*INCX ELSE IF( INCX.NE.1 )THEN KX = 1 END IF * * Start the operations. In this version the elements of the array AP * are accessed sequentially with one pass through AP. * KK = 1 IF( GAL_LSAME( UPLO, 'U' ) )THEN * * Form A when upper triangle is stored in AP. * IF( INCX.EQ.1 )THEN DO 20, J = 1, N IF( X( J ).NE.ZERO )THEN TEMP = ALPHA*X( J ) K = KK DO 10, I = 1, J AP( K ) = AP( K ) + X( I )*TEMP K = K + 1 10 CONTINUE END IF KK = KK + J 20 CONTINUE ELSE JX = KX DO 40, J = 1, N IF( X( JX ).NE.ZERO )THEN TEMP = ALPHA*X( JX ) IX = KX DO 30, K = KK, KK + J - 1 AP( K ) = AP( K ) + X( IX )*TEMP IX = IX + INCX 30 CONTINUE END IF JX = JX + INCX KK = KK + J 40 CONTINUE END IF ELSE * * Form A when lower triangle is stored in AP. * IF( INCX.EQ.1 )THEN DO 60, J = 1, N IF( X( J ).NE.ZERO )THEN TEMP = ALPHA*X( J ) K = KK DO 50, I = J, N AP( K ) = AP( K ) + X( I )*TEMP K = K + 1 50 CONTINUE END IF KK = KK + N - J + 1 60 CONTINUE ELSE JX = KX DO 80, J = 1, N IF( X( JX ).NE.ZERO )THEN TEMP = ALPHA*X( JX ) IX = JX DO 70, K = KK, KK + N - J AP( K ) = AP( K ) + X( IX )*TEMP IX = IX + INCX 70 CONTINUE END IF JX = JX + INCX KK = KK + N - J + 1 80 CONTINUE END IF END IF * RETURN * * End of GAL_DSPR . * END SUBROUTINE GAL_GAL_DSPR2 ( UPLO, N, ALPHA, X, INCX, Y, INCY, AP ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA INTEGER INCX, INCY, N CHARACTER*1 UPLO * .. Array Arguments .. DOUBLE PRECISION AP( * ), X( * ), Y( * ) * .. * * Purpose * ======= * * GAL_GAL_DSPR2 performs the symmetric rank 2 operation * * A := alpha*x*y' + alpha*y*x' + A, * * where alpha is a scalar, x and y are n element vectors and A is an * n by n symmetric matrix, supplied in packed form. * * Parameters * ========== * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the upper or lower * triangular part of the matrix A is supplied in the packed * array AP as follows: * * UPLO = 'U' or 'u' The upper triangular part of A is * supplied in AP. * * UPLO = 'L' or 'l' The lower triangular part of A is * supplied in AP. * * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the order of the matrix A. * N must be at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * X - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCX ) ). * Before entry, the incremented array X must contain the n * element vector x. * Unchanged on exit. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * Y - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCY ) ). * Before entry, the incremented array Y must contain the n * element vector y. * Unchanged on exit. * * INCY - INTEGER. * On entry, INCY specifies the increment for the elements of * Y. INCY must not be zero. * Unchanged on exit. * * AP - DOUBLE PRECISION array of DIMENSION at least * ( ( n*( n + 1 ) )/2 ). * Before entry with UPLO = 'U' or 'u', the array AP must * contain the upper triangular part of the symmetric matrix * packed sequentially, column by column, so that AP( 1 ) * contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) * and a( 2, 2 ) respectively, and so on. On exit, the array * AP is overwritten by the upper triangular part of the * updated matrix. * Before entry with UPLO = 'L' or 'l', the array AP must * contain the lower triangular part of the symmetric matrix * packed sequentially, column by column, so that AP( 1 ) * contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) * and a( 3, 1 ) respectively, and so on. On exit, the array * AP is overwritten by the lower triangular part of the * updated matrix. * * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. Local Scalars .. DOUBLE PRECISION TEMP1, TEMP2 INTEGER I, INFO, IX, IY, J, JX, JY, K, KK, KX, KY * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF ( .NOT.GAL_LSAME( UPLO, 'U' ).AND. $ .NOT.GAL_LSAME( UPLO, 'L' ) )THEN INFO = 1 ELSE IF( N.LT.0 )THEN INFO = 2 ELSE IF( INCX.EQ.0 )THEN INFO = 5 ELSE IF( INCY.EQ.0 )THEN INFO = 7 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_GAL_DSPR2 ', INFO ) RETURN END IF * * Quick return if possible. * IF( ( N.EQ.0 ).OR.( ALPHA.EQ.ZERO ) ) $ RETURN * * Set up the start points in X and Y if the increments are not both * unity. * IF( ( INCX.NE.1 ).OR.( INCY.NE.1 ) )THEN IF( INCX.GT.0 )THEN KX = 1 ELSE KX = 1 - ( N - 1 )*INCX END IF IF( INCY.GT.0 )THEN KY = 1 ELSE KY = 1 - ( N - 1 )*INCY END IF JX = KX JY = KY END IF * * Start the operations. In this version the elements of the array AP * are accessed sequentially with one pass through AP. * KK = 1 IF( GAL_LSAME( UPLO, 'U' ) )THEN * * Form A when upper triangle is stored in AP. * IF( ( INCX.EQ.1 ).AND.( INCY.EQ.1 ) )THEN DO 20, J = 1, N IF( ( X( J ).NE.ZERO ).OR.( Y( J ).NE.ZERO ) )THEN TEMP1 = ALPHA*Y( J ) TEMP2 = ALPHA*X( J ) K = KK DO 10, I = 1, J AP( K ) = AP( K ) + X( I )*TEMP1 + Y( I )*TEMP2 K = K + 1 10 CONTINUE END IF KK = KK + J 20 CONTINUE ELSE DO 40, J = 1, N IF( ( X( JX ).NE.ZERO ).OR.( Y( JY ).NE.ZERO ) )THEN TEMP1 = ALPHA*Y( JY ) TEMP2 = ALPHA*X( JX ) IX = KX IY = KY DO 30, K = KK, KK + J - 1 AP( K ) = AP( K ) + X( IX )*TEMP1 + Y( IY )*TEMP2 IX = IX + INCX IY = IY + INCY 30 CONTINUE END IF JX = JX + INCX JY = JY + INCY KK = KK + J 40 CONTINUE END IF ELSE * * Form A when lower triangle is stored in AP. * IF( ( INCX.EQ.1 ).AND.( INCY.EQ.1 ) )THEN DO 60, J = 1, N IF( ( X( J ).NE.ZERO ).OR.( Y( J ).NE.ZERO ) )THEN TEMP1 = ALPHA*Y( J ) TEMP2 = ALPHA*X( J ) K = KK DO 50, I = J, N AP( K ) = AP( K ) + X( I )*TEMP1 + Y( I )*TEMP2 K = K + 1 50 CONTINUE END IF KK = KK + N - J + 1 60 CONTINUE ELSE DO 80, J = 1, N IF( ( X( JX ).NE.ZERO ).OR.( Y( JY ).NE.ZERO ) )THEN TEMP1 = ALPHA*Y( JY ) TEMP2 = ALPHA*X( JX ) IX = JX IY = JY DO 70, K = KK, KK + N - J AP( K ) = AP( K ) + X( IX )*TEMP1 + Y( IY )*TEMP2 IX = IX + INCX IY = IY + INCY 70 CONTINUE END IF JX = JX + INCX JY = JY + INCY KK = KK + N - J + 1 80 CONTINUE END IF END IF * RETURN * * End of GAL_GAL_DSPR2 . * END subroutine gal_dswap (n,dx,incx,dy,incy) c c interchanges two vectors. c uses unrolled loops for increments equal one. c jack dongarra, linpack, 3/11/78. c double precision dx(1),dy(1),dtemp integer i,incx,incy,ix,iy,m,mp1,n c if(n.le.0)return if(incx.eq.1.and.incy.eq.1)go to 20 c c code for unequal increments or equal increments not equal c to 1 c ix = 1 iy = 1 if(incx.lt.0)ix = (-n+1)*incx + 1 if(incy.lt.0)iy = (-n+1)*incy + 1 do 10 i = 1,n dtemp = dx(ix) dx(ix) = dy(iy) dy(iy) = dtemp ix = ix + incx iy = iy + incy 10 continue return c c code for both increments equal to 1 c c c clean-up loop c 20 m = mod(n,3) if( m .eq. 0 ) go to 40 do 30 i = 1,m dtemp = dx(i) dx(i) = dy(i) dy(i) = dtemp 30 continue if( n .lt. 3 ) return 40 mp1 = m + 1 do 50 i = mp1,n,3 dtemp = dx(i) dx(i) = dy(i) dy(i) = dtemp dtemp = dx(i + 1) dx(i + 1) = dy(i + 1) dy(i + 1) = dtemp dtemp = dx(i + 2) dx(i + 2) = dy(i + 2) dy(i + 2) = dtemp 50 continue return end SUBROUTINE GAL_DSYMM ( SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, $ BETA, C, LDC ) * .. Scalar Arguments .. CHARACTER*1 SIDE, UPLO INTEGER M, N, LDA, LDB, LDC DOUBLE PRECISION ALPHA, BETA * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), B( LDB, * ), C( LDC, * ) * .. * * Purpose * ======= * * GAL_DSYMM performs one of the matrix-matrix operations * * C := alpha*A*B + beta*C, * * or * * C := alpha*B*A + beta*C, * * where alpha and beta are scalars, A is a symmetric matrix and B and * C are m by n matrices. * * Parameters * ========== * * SIDE - CHARACTER*1. * On entry, SIDE specifies whether the symmetric matrix A * appears on the left or right in the operation as follows: * * SIDE = 'L' or 'l' C := alpha*A*B + beta*C, * * SIDE = 'R' or 'r' C := alpha*B*A + beta*C, * * Unchanged on exit. * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the upper or lower * triangular part of the symmetric matrix A is to be * referenced as follows: * * UPLO = 'U' or 'u' Only the upper triangular part of the * symmetric matrix is to be referenced. * * UPLO = 'L' or 'l' Only the lower triangular part of the * symmetric matrix is to be referenced. * * Unchanged on exit. * * M - INTEGER. * On entry, M specifies the number of rows of the matrix C. * M must be at least zero. * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the number of columns of the matrix C. * N must be at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, ka ), where ka is * m when SIDE = 'L' or 'l' and is n otherwise. * Before entry with SIDE = 'L' or 'l', the m by m part of * the array A must contain the symmetric matrix, such that * when UPLO = 'U' or 'u', the leading m by m upper triangular * part of the array A must contain the upper triangular part * of the symmetric matrix and the strictly lower triangular * part of A is not referenced, and when UPLO = 'L' or 'l', * the leading m by m lower triangular part of the array A * must contain the lower triangular part of the symmetric * matrix and the strictly upper triangular part of A is not * referenced. * Before entry with SIDE = 'R' or 'r', the n by n part of * the array A must contain the symmetric matrix, such that * when UPLO = 'U' or 'u', the leading n by n upper triangular * part of the array A must contain the upper triangular part * of the symmetric matrix and the strictly lower triangular * part of A is not referenced, and when UPLO = 'L' or 'l', * the leading n by n lower triangular part of the array A * must contain the lower triangular part of the symmetric * matrix and the strictly upper triangular part of A is not * referenced. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. When SIDE = 'L' or 'l' then * LDA must be at least max( 1, m ), otherwise LDA must be at * least max( 1, n ). * Unchanged on exit. * * B - DOUBLE PRECISION array of DIMENSION ( LDB, n ). * Before entry, the leading m by n part of the array B must * contain the matrix B. * Unchanged on exit. * * LDB - INTEGER. * On entry, LDB specifies the first dimension of B as declared * in the calling (sub) program. LDB must be at least * max( 1, m ). * Unchanged on exit. * * BETA - DOUBLE PRECISION. * On entry, BETA specifies the scalar beta. When BETA is * supplied as zero then C need not be set on input. * Unchanged on exit. * * C - DOUBLE PRECISION array of DIMENSION ( LDC, n ). * Before entry, the leading m by n part of the array C must * contain the matrix C, except when beta is zero, in which * case C need not be set on entry. * On exit, the array C is overwritten by the m by n updated * matrix. * * LDC - INTEGER. * On entry, LDC specifies the first dimension of C as declared * in the calling (sub) program. LDC must be at least * max( 1, m ). * Unchanged on exit. * * * Level 3 Blas routine. * * -- Written on 8-February-1989. * Jack Dongarra, Argonne National Laboratory. * Iain Duff, AERE Harwell. * Jeremy Du Croz, Numerical Algorithms Group Ltd. * Sven Hammarling, Numerical Algorithms Group Ltd. * * * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC MAX * .. Local Scalars .. LOGICAL UPPER INTEGER I, INFO, J, K, NROWA DOUBLE PRECISION TEMP1, TEMP2 * .. Parameters .. DOUBLE PRECISION ONE , ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. Executable Statements .. * * Set NROWA as the number of rows of A. * IF( GAL_LSAME( SIDE, 'L' ) )THEN NROWA = M ELSE NROWA = N END IF UPPER = GAL_LSAME( UPLO, 'U' ) * * Test the input parameters. * INFO = 0 IF( ( .NOT.GAL_LSAME( SIDE, 'L' ) ).AND. $ ( .NOT.GAL_LSAME( SIDE, 'R' ) ) )THEN INFO = 1 ELSE IF( ( .NOT.UPPER ).AND. $ ( .NOT.GAL_LSAME( UPLO, 'L' ) ) )THEN INFO = 2 ELSE IF( M .LT.0 )THEN INFO = 3 ELSE IF( N .LT.0 )THEN INFO = 4 ELSE IF( LDA.LT.MAX( 1, NROWA ) )THEN INFO = 7 ELSE IF( LDB.LT.MAX( 1, M ) )THEN INFO = 9 ELSE IF( LDC.LT.MAX( 1, M ) )THEN INFO = 12 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DSYMM ', INFO ) RETURN END IF * * Quick return if possible. * IF( ( M.EQ.0 ).OR.( N.EQ.0 ).OR. $ ( ( ALPHA.EQ.ZERO ).AND.( BETA.EQ.ONE ) ) ) $ RETURN * * And when alpha.eq.zero. * IF( ALPHA.EQ.ZERO )THEN IF( BETA.EQ.ZERO )THEN DO 20, J = 1, N DO 10, I = 1, M C( I, J ) = ZERO 10 CONTINUE 20 CONTINUE ELSE DO 40, J = 1, N DO 30, I = 1, M C( I, J ) = BETA*C( I, J ) 30 CONTINUE 40 CONTINUE END IF RETURN END IF * * Start the operations. * IF( GAL_LSAME( SIDE, 'L' ) )THEN * * Form C := alpha*A*B + beta*C. * IF( UPPER )THEN DO 70, J = 1, N DO 60, I = 1, M TEMP1 = ALPHA*B( I, J ) TEMP2 = ZERO DO 50, K = 1, I - 1 C( K, J ) = C( K, J ) + TEMP1 *A( K, I ) TEMP2 = TEMP2 + B( K, J )*A( K, I ) 50 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = TEMP1*A( I, I ) + ALPHA*TEMP2 ELSE C( I, J ) = BETA *C( I, J ) + $ TEMP1*A( I, I ) + ALPHA*TEMP2 END IF 60 CONTINUE 70 CONTINUE ELSE DO 100, J = 1, N DO 90, I = M, 1, -1 TEMP1 = ALPHA*B( I, J ) TEMP2 = ZERO DO 80, K = I + 1, M C( K, J ) = C( K, J ) + TEMP1 *A( K, I ) TEMP2 = TEMP2 + B( K, J )*A( K, I ) 80 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = TEMP1*A( I, I ) + ALPHA*TEMP2 ELSE C( I, J ) = BETA *C( I, J ) + $ TEMP1*A( I, I ) + ALPHA*TEMP2 END IF 90 CONTINUE 100 CONTINUE END IF ELSE * * Form C := alpha*B*A + beta*C. * DO 170, J = 1, N TEMP1 = ALPHA*A( J, J ) IF( BETA.EQ.ZERO )THEN DO 110, I = 1, M C( I, J ) = TEMP1*B( I, J ) 110 CONTINUE ELSE DO 120, I = 1, M C( I, J ) = BETA*C( I, J ) + TEMP1*B( I, J ) 120 CONTINUE END IF DO 140, K = 1, J - 1 IF( UPPER )THEN TEMP1 = ALPHA*A( K, J ) ELSE TEMP1 = ALPHA*A( J, K ) END IF DO 130, I = 1, M C( I, J ) = C( I, J ) + TEMP1*B( I, K ) 130 CONTINUE 140 CONTINUE DO 160, K = J + 1, N IF( UPPER )THEN TEMP1 = ALPHA*A( J, K ) ELSE TEMP1 = ALPHA*A( K, J ) END IF DO 150, I = 1, M C( I, J ) = C( I, J ) + TEMP1*B( I, K ) 150 CONTINUE 160 CONTINUE 170 CONTINUE END IF * RETURN * * End of GAL_DSYMM . * END SUBROUTINE GAL_DSYMV ( UPLO, N, ALPHA, A, LDA, X, INCX, $ BETA, Y, INCY ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA, BETA INTEGER INCX, INCY, LDA, N CHARACTER*1 UPLO * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), X( * ), Y( * ) * .. * * Purpose * ======= * * GAL_DSYMV performs the matrix-vector operation * * y := alpha*A*x + beta*y, * * where alpha and beta are scalars, x and y are n element vectors and * A is an n by n symmetric matrix. * * Parameters * ========== * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the upper or lower * triangular part of the array A is to be referenced as * follows: * * UPLO = 'U' or 'u' Only the upper triangular part of A * is to be referenced. * * UPLO = 'L' or 'l' Only the lower triangular part of A * is to be referenced. * * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the order of the matrix A. * N must be at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). * Before entry with UPLO = 'U' or 'u', the leading n by n * upper triangular part of the array A must contain the upper * triangular part of the symmetric matrix and the strictly * lower triangular part of A is not referenced. * Before entry with UPLO = 'L' or 'l', the leading n by n * lower triangular part of the array A must contain the lower * triangular part of the symmetric matrix and the strictly * upper triangular part of A is not referenced. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. LDA must be at least * max( 1, n ). * Unchanged on exit. * * X - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCX ) ). * Before entry, the incremented array X must contain the n * element vector x. * Unchanged on exit. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * BETA - DOUBLE PRECISION. * On entry, BETA specifies the scalar beta. When BETA is * supplied as zero then Y need not be set on input. * Unchanged on exit. * * Y - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCY ) ). * Before entry, the incremented array Y must contain the n * element vector y. On exit, Y is overwritten by the updated * vector y. * * INCY - INTEGER. * On entry, INCY specifies the increment for the elements of * Y. INCY must not be zero. * Unchanged on exit. * * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * * .. Parameters .. DOUBLE PRECISION ONE , ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. Local Scalars .. DOUBLE PRECISION TEMP1, TEMP2 INTEGER I, INFO, IX, IY, J, JX, JY, KX, KY * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC MAX * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF ( .NOT.GAL_LSAME( UPLO, 'U' ).AND. $ .NOT.GAL_LSAME( UPLO, 'L' ) )THEN INFO = 1 ELSE IF( N.LT.0 )THEN INFO = 2 ELSE IF( LDA.LT.MAX( 1, N ) )THEN INFO = 5 ELSE IF( INCX.EQ.0 )THEN INFO = 7 ELSE IF( INCY.EQ.0 )THEN INFO = 10 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DSYMV ', INFO ) RETURN END IF * * Quick return if possible. * IF( ( N.EQ.0 ).OR.( ( ALPHA.EQ.ZERO ).AND.( BETA.EQ.ONE ) ) ) $ RETURN * * Set up the start points in X and Y. * IF( INCX.GT.0 )THEN KX = 1 ELSE KX = 1 - ( N - 1 )*INCX END IF IF( INCY.GT.0 )THEN KY = 1 ELSE KY = 1 - ( N - 1 )*INCY END IF * * Start the operations. In this version the elements of A are * accessed sequentially with one pass through the triangular part * of A. * * First form y := beta*y. * IF( BETA.NE.ONE )THEN IF( INCY.EQ.1 )THEN IF( BETA.EQ.ZERO )THEN DO 10, I = 1, N Y( I ) = ZERO 10 CONTINUE ELSE DO 20, I = 1, N Y( I ) = BETA*Y( I ) 20 CONTINUE END IF ELSE IY = KY IF( BETA.EQ.ZERO )THEN DO 30, I = 1, N Y( IY ) = ZERO IY = IY + INCY 30 CONTINUE ELSE DO 40, I = 1, N Y( IY ) = BETA*Y( IY ) IY = IY + INCY 40 CONTINUE END IF END IF END IF IF( ALPHA.EQ.ZERO ) $ RETURN IF( GAL_LSAME( UPLO, 'U' ) )THEN * * Form y when A is stored in upper triangle. * IF( ( INCX.EQ.1 ).AND.( INCY.EQ.1 ) )THEN DO 60, J = 1, N TEMP1 = ALPHA*X( J ) TEMP2 = ZERO DO 50, I = 1, J - 1 Y( I ) = Y( I ) + TEMP1*A( I, J ) TEMP2 = TEMP2 + A( I, J )*X( I ) 50 CONTINUE Y( J ) = Y( J ) + TEMP1*A( J, J ) + ALPHA*TEMP2 60 CONTINUE ELSE JX = KX JY = KY DO 80, J = 1, N TEMP1 = ALPHA*X( JX ) TEMP2 = ZERO IX = KX IY = KY DO 70, I = 1, J - 1 Y( IY ) = Y( IY ) + TEMP1*A( I, J ) TEMP2 = TEMP2 + A( I, J )*X( IX ) IX = IX + INCX IY = IY + INCY 70 CONTINUE Y( JY ) = Y( JY ) + TEMP1*A( J, J ) + ALPHA*TEMP2 JX = JX + INCX JY = JY + INCY 80 CONTINUE END IF ELSE * * Form y when A is stored in lower triangle. * IF( ( INCX.EQ.1 ).AND.( INCY.EQ.1 ) )THEN DO 100, J = 1, N TEMP1 = ALPHA*X( J ) TEMP2 = ZERO Y( J ) = Y( J ) + TEMP1*A( J, J ) DO 90, I = J + 1, N Y( I ) = Y( I ) + TEMP1*A( I, J ) TEMP2 = TEMP2 + A( I, J )*X( I ) 90 CONTINUE Y( J ) = Y( J ) + ALPHA*TEMP2 100 CONTINUE ELSE JX = KX JY = KY DO 120, J = 1, N TEMP1 = ALPHA*X( JX ) TEMP2 = ZERO Y( JY ) = Y( JY ) + TEMP1*A( J, J ) IX = JX IY = JY DO 110, I = J + 1, N IX = IX + INCX IY = IY + INCY Y( IY ) = Y( IY ) + TEMP1*A( I, J ) TEMP2 = TEMP2 + A( I, J )*X( IX ) 110 CONTINUE Y( JY ) = Y( JY ) + ALPHA*TEMP2 JX = JX + INCX JY = JY + INCY 120 CONTINUE END IF END IF * RETURN * * End of GAL_DSYMV . * END SUBROUTINE GAL_DSYR ( UPLO, N, ALPHA, X, INCX, A, LDA ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA INTEGER INCX, LDA, N CHARACTER*1 UPLO * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), X( * ) * .. * * Purpose * ======= * * GAL_DSYR performs the symmetric rank 1 operation * * A := alpha*x*x' + A, * * where alpha is a real scalar, x is an n element vector and A is an * n by n symmetric matrix. * * Parameters * ========== * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the upper or lower * triangular part of the array A is to be referenced as * follows: * * UPLO = 'U' or 'u' Only the upper triangular part of A * is to be referenced. * * UPLO = 'L' or 'l' Only the lower triangular part of A * is to be referenced. * * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the order of the matrix A. * N must be at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * X - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCX ) ). * Before entry, the incremented array X must contain the n * element vector x. * Unchanged on exit. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). * Before entry with UPLO = 'U' or 'u', the leading n by n * upper triangular part of the array A must contain the upper * triangular part of the symmetric matrix and the strictly * lower triangular part of A is not referenced. On exit, the * upper triangular part of the array A is overwritten by the * upper triangular part of the updated matrix. * Before entry with UPLO = 'L' or 'l', the leading n by n * lower triangular part of the array A must contain the lower * triangular part of the symmetric matrix and the strictly * upper triangular part of A is not referenced. On exit, the * lower triangular part of the array A is overwritten by the * lower triangular part of the updated matrix. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. LDA must be at least * max( 1, n ). * Unchanged on exit. * * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. Local Scalars .. DOUBLE PRECISION TEMP INTEGER I, INFO, IX, J, JX, KX * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC MAX * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF ( .NOT.GAL_LSAME( UPLO, 'U' ).AND. $ .NOT.GAL_LSAME( UPLO, 'L' ) )THEN INFO = 1 ELSE IF( N.LT.0 )THEN INFO = 2 ELSE IF( INCX.EQ.0 )THEN INFO = 5 ELSE IF( LDA.LT.MAX( 1, N ) )THEN INFO = 7 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DSYR ', INFO ) RETURN END IF * * Quick return if possible. * IF( ( N.EQ.0 ).OR.( ALPHA.EQ.ZERO ) ) $ RETURN * * Set the start point in X if the increment is not unity. * IF( INCX.LE.0 )THEN KX = 1 - ( N - 1 )*INCX ELSE IF( INCX.NE.1 )THEN KX = 1 END IF * * Start the operations. In this version the elements of A are * accessed sequentially with one pass through the triangular part * of A. * IF( GAL_LSAME( UPLO, 'U' ) )THEN * * Form A when A is stored in upper triangle. * IF( INCX.EQ.1 )THEN DO 20, J = 1, N IF( X( J ).NE.ZERO )THEN TEMP = ALPHA*X( J ) DO 10, I = 1, J A( I, J ) = A( I, J ) + X( I )*TEMP 10 CONTINUE END IF 20 CONTINUE ELSE JX = KX DO 40, J = 1, N IF( X( JX ).NE.ZERO )THEN TEMP = ALPHA*X( JX ) IX = KX DO 30, I = 1, J A( I, J ) = A( I, J ) + X( IX )*TEMP IX = IX + INCX 30 CONTINUE END IF JX = JX + INCX 40 CONTINUE END IF ELSE * * Form A when A is stored in lower triangle. * IF( INCX.EQ.1 )THEN DO 60, J = 1, N IF( X( J ).NE.ZERO )THEN TEMP = ALPHA*X( J ) DO 50, I = J, N A( I, J ) = A( I, J ) + X( I )*TEMP 50 CONTINUE END IF 60 CONTINUE ELSE JX = KX DO 80, J = 1, N IF( X( JX ).NE.ZERO )THEN TEMP = ALPHA*X( JX ) IX = JX DO 70, I = J, N A( I, J ) = A( I, J ) + X( IX )*TEMP IX = IX + INCX 70 CONTINUE END IF JX = JX + INCX 80 CONTINUE END IF END IF * RETURN * * End of GAL_DSYR . * END SUBROUTINE GAL_GAL_DSYR2 ( UPLO, N, ALPHA, X, INCX, Y, INCY, $ A, LDA ) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA INTEGER INCX, INCY, LDA, N CHARACTER*1 UPLO * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), X( * ), Y( * ) * .. * * Purpose * ======= * * GAL_GAL_DSYR2 performs the symmetric rank 2 operation * * A := alpha*x*y' + alpha*y*x' + A, * * where alpha is a scalar, x and y are n element vectors and A is an n * by n symmetric matrix. * * Parameters * ========== * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the upper or lower * triangular part of the array A is to be referenced as * follows: * * UPLO = 'U' or 'u' Only the upper triangular part of A * is to be referenced. * * UPLO = 'L' or 'l' Only the lower triangular part of A * is to be referenced. * * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the order of the matrix A. * N must be at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * X - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCX ) ). * Before entry, the incremented array X must contain the n * element vector x. * Unchanged on exit. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * Y - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCY ) ). * Before entry, the incremented array Y must contain the n * element vector y. * Unchanged on exit. * * INCY - INTEGER. * On entry, INCY specifies the increment for the elements of * Y. INCY must not be zero. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). * Before entry with UPLO = 'U' or 'u', the leading n by n * upper triangular part of the array A must contain the upper * triangular part of the symmetric matrix and the strictly * lower triangular part of A is not referenced. On exit, the * upper triangular part of the array A is overwritten by the * upper triangular part of the updated matrix. * Before entry with UPLO = 'L' or 'l', the leading n by n * lower triangular part of the array A must contain the lower * triangular part of the symmetric matrix and the strictly * upper triangular part of A is not referenced. On exit, the * lower triangular part of the array A is overwritten by the * lower triangular part of the updated matrix. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. LDA must be at least * max( 1, n ). * Unchanged on exit. * * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. Local Scalars .. DOUBLE PRECISION TEMP1, TEMP2 INTEGER I, INFO, IX, IY, J, JX, JY, KX, KY * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC MAX * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF ( .NOT.GAL_LSAME( UPLO, 'U' ).AND. $ .NOT.GAL_LSAME( UPLO, 'L' ) )THEN INFO = 1 ELSE IF( N.LT.0 )THEN INFO = 2 ELSE IF( INCX.EQ.0 )THEN INFO = 5 ELSE IF( INCY.EQ.0 )THEN INFO = 7 ELSE IF( LDA.LT.MAX( 1, N ) )THEN INFO = 9 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_GAL_DSYR2 ', INFO ) RETURN END IF * * Quick return if possible. * IF( ( N.EQ.0 ).OR.( ALPHA.EQ.ZERO ) ) $ RETURN * * Set up the start points in X and Y if the increments are not both * unity. * IF( ( INCX.NE.1 ).OR.( INCY.NE.1 ) )THEN IF( INCX.GT.0 )THEN KX = 1 ELSE KX = 1 - ( N - 1 )*INCX END IF IF( INCY.GT.0 )THEN KY = 1 ELSE KY = 1 - ( N - 1 )*INCY END IF JX = KX JY = KY END IF * * Start the operations. In this version the elements of A are * accessed sequentially with one pass through the triangular part * of A. * IF( GAL_LSAME( UPLO, 'U' ) )THEN * * Form A when A is stored in the upper triangle. * IF( ( INCX.EQ.1 ).AND.( INCY.EQ.1 ) )THEN DO 20, J = 1, N IF( ( X( J ).NE.ZERO ).OR.( Y( J ).NE.ZERO ) )THEN TEMP1 = ALPHA*Y( J ) TEMP2 = ALPHA*X( J ) DO 10, I = 1, J A( I, J ) = A( I, J ) + X( I )*TEMP1 + Y( I )*TEMP2 10 CONTINUE END IF 20 CONTINUE ELSE DO 40, J = 1, N IF( ( X( JX ).NE.ZERO ).OR.( Y( JY ).NE.ZERO ) )THEN TEMP1 = ALPHA*Y( JY ) TEMP2 = ALPHA*X( JX ) IX = KX IY = KY DO 30, I = 1, J A( I, J ) = A( I, J ) + X( IX )*TEMP1 $ + Y( IY )*TEMP2 IX = IX + INCX IY = IY + INCY 30 CONTINUE END IF JX = JX + INCX JY = JY + INCY 40 CONTINUE END IF ELSE * * Form A when A is stored in the lower triangle. * IF( ( INCX.EQ.1 ).AND.( INCY.EQ.1 ) )THEN DO 60, J = 1, N IF( ( X( J ).NE.ZERO ).OR.( Y( J ).NE.ZERO ) )THEN TEMP1 = ALPHA*Y( J ) TEMP2 = ALPHA*X( J ) DO 50, I = J, N A( I, J ) = A( I, J ) + X( I )*TEMP1 + Y( I )*TEMP2 50 CONTINUE END IF 60 CONTINUE ELSE DO 80, J = 1, N IF( ( X( JX ).NE.ZERO ).OR.( Y( JY ).NE.ZERO ) )THEN TEMP1 = ALPHA*Y( JY ) TEMP2 = ALPHA*X( JX ) IX = JX IY = JY DO 70, I = J, N A( I, J ) = A( I, J ) + X( IX )*TEMP1 $ + Y( IY )*TEMP2 IX = IX + INCX IY = IY + INCY 70 CONTINUE END IF JX = JX + INCX JY = JY + INCY 80 CONTINUE END IF END IF * RETURN * * End of GAL_GAL_DSYR2 . * END SUBROUTINE GAL_GAL_GAL_DSYR2K( UPLO, TRANS, N, K, $ ALPHA, A, LDA, B, LDB, BETA, C, LDC ) * .. Scalar Arguments .. CHARACTER*1 UPLO, TRANS INTEGER N, K, LDA, LDB, LDC DOUBLE PRECISION ALPHA, BETA * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), B( LDB, * ), C( LDC, * ) * .. * * Purpose * ======= * * GAL_GAL_GAL_DSYR2K performs one of the symmetric rank 2k operations * * C := alpha*A*B' + alpha*B*A' + beta*C, * * or * * C := alpha*A'*B + alpha*B'*A + beta*C, * * where alpha and beta are scalars, C is an n by n symmetric matrix * and A and B are n by k matrices in the first case and k by n * matrices in the second case. * * Parameters * ========== * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the upper or lower * triangular part of the array C is to be referenced as * follows: * * UPLO = 'U' or 'u' Only the upper triangular part of C * is to be referenced. * * UPLO = 'L' or 'l' Only the lower triangular part of C * is to be referenced. * * Unchanged on exit. * * TRANS - CHARACTER*1. * On entry, TRANS specifies the operation to be performed as * follows: * * TRANS = 'N' or 'n' C := alpha*A*B' + alpha*B*A' + * beta*C. * * TRANS = 'T' or 't' C := alpha*A'*B + alpha*B'*A + * beta*C. * * TRANS = 'C' or 'c' C := alpha*A'*B + alpha*B'*A + * beta*C. * * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the order of the matrix C. N must be * at least zero. * Unchanged on exit. * * K - INTEGER. * On entry with TRANS = 'N' or 'n', K specifies the number * of columns of the matrices A and B, and on entry with * TRANS = 'T' or 't' or 'C' or 'c', K specifies the number * of rows of the matrices A and B. K must be at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, ka ), where ka is * k when TRANS = 'N' or 'n', and is n otherwise. * Before entry with TRANS = 'N' or 'n', the leading n by k * part of the array A must contain the matrix A, otherwise * the leading k by n part of the array A must contain the * matrix A. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. When TRANS = 'N' or 'n' * then LDA must be at least max( 1, n ), otherwise LDA must * be at least max( 1, k ). * Unchanged on exit. * * B - DOUBLE PRECISION array of DIMENSION ( LDB, kb ), where kb is * k when TRANS = 'N' or 'n', and is n otherwise. * Before entry with TRANS = 'N' or 'n', the leading n by k * part of the array B must contain the matrix B, otherwise * the leading k by n part of the array B must contain the * matrix B. * Unchanged on exit. * * LDB - INTEGER. * On entry, LDB specifies the first dimension of B as declared * in the calling (sub) program. When TRANS = 'N' or 'n' * then LDB must be at least max( 1, n ), otherwise LDB must * be at least max( 1, k ). * Unchanged on exit. * * BETA - DOUBLE PRECISION. * On entry, BETA specifies the scalar beta. * Unchanged on exit. * * C - DOUBLE PRECISION array of DIMENSION ( LDC, n ). * Before entry with UPLO = 'U' or 'u', the leading n by n * upper triangular part of the array C must contain the upper * triangular part of the symmetric matrix and the strictly * lower triangular part of C is not referenced. On exit, the * upper triangular part of the array C is overwritten by the * upper triangular part of the updated matrix. * Before entry with UPLO = 'L' or 'l', the leading n by n * lower triangular part of the array C must contain the lower * triangular part of the symmetric matrix and the strictly * upper triangular part of C is not referenced. On exit, the * lower triangular part of the array C is overwritten by the * lower triangular part of the updated matrix. * * LDC - INTEGER. * On entry, LDC specifies the first dimension of C as declared * in the calling (sub) program. LDC must be at least * max( 1, n ). * Unchanged on exit. * * * Level 3 Blas routine. * * * -- Written on 8-February-1989. * Jack Dongarra, Argonne National Laboratory. * Iain Duff, AERE Harwell. * Jeremy Du Croz, Numerical Algorithms Group Ltd. * Sven Hammarling, Numerical Algorithms Group Ltd. * * * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC MAX * .. Local Scalars .. LOGICAL UPPER INTEGER I, INFO, J, L, NROWA DOUBLE PRECISION TEMP1, TEMP2 * .. Parameters .. DOUBLE PRECISION ONE , ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. Executable Statements .. * * Test the input parameters. * IF( GAL_LSAME( TRANS, 'N' ) )THEN NROWA = N ELSE NROWA = K END IF UPPER = GAL_LSAME( UPLO, 'U' ) * INFO = 0 IF( ( .NOT.UPPER ).AND. $ ( .NOT.GAL_LSAME( UPLO , 'L' ) ) )THEN INFO = 1 ELSE IF( ( .NOT.GAL_LSAME( TRANS, 'N' ) ).AND. $ ( .NOT.GAL_LSAME( TRANS, 'T' ) ).AND. $ ( .NOT.GAL_LSAME( TRANS, 'C' ) ) )THEN INFO = 2 ELSE IF( N .LT.0 )THEN INFO = 3 ELSE IF( K .LT.0 )THEN INFO = 4 ELSE IF( LDA.LT.MAX( 1, NROWA ) )THEN INFO = 7 ELSE IF( LDB.LT.MAX( 1, NROWA ) )THEN INFO = 9 ELSE IF( LDC.LT.MAX( 1, N ) )THEN INFO = 12 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_GAL_GAL_DSYR2K', INFO ) RETURN END IF * * Quick return if possible. * IF( ( N.EQ.0 ).OR. $ ( ( ( ALPHA.EQ.ZERO ).OR.( K.EQ.0 ) ).AND.( BETA.EQ.ONE ) ) ) $ RETURN * * And when alpha.eq.zero. * IF( ALPHA.EQ.ZERO )THEN IF( UPPER )THEN IF( BETA.EQ.ZERO )THEN DO 20, J = 1, N DO 10, I = 1, J C( I, J ) = ZERO 10 CONTINUE 20 CONTINUE ELSE DO 40, J = 1, N DO 30, I = 1, J C( I, J ) = BETA*C( I, J ) 30 CONTINUE 40 CONTINUE END IF ELSE IF( BETA.EQ.ZERO )THEN DO 60, J = 1, N DO 50, I = J, N C( I, J ) = ZERO 50 CONTINUE 60 CONTINUE ELSE DO 80, J = 1, N DO 70, I = J, N C( I, J ) = BETA*C( I, J ) 70 CONTINUE 80 CONTINUE END IF END IF RETURN END IF * * Start the operations. * IF( GAL_LSAME( TRANS, 'N' ) )THEN * * Form C := alpha*A*B' + alpha*B*A' + C. * IF( UPPER )THEN DO 130, J = 1, N IF( BETA.EQ.ZERO )THEN DO 90, I = 1, J C( I, J ) = ZERO 90 CONTINUE ELSE IF( BETA.NE.ONE )THEN DO 100, I = 1, J C( I, J ) = BETA*C( I, J ) 100 CONTINUE END IF DO 120, L = 1, K IF( ( A( J, L ).NE.ZERO ).OR. $ ( B( J, L ).NE.ZERO ) )THEN TEMP1 = ALPHA*B( J, L ) TEMP2 = ALPHA*A( J, L ) DO 110, I = 1, J C( I, J ) = C( I, J ) + $ A( I, L )*TEMP1 + B( I, L )*TEMP2 110 CONTINUE END IF 120 CONTINUE 130 CONTINUE ELSE DO 180, J = 1, N IF( BETA.EQ.ZERO )THEN DO 140, I = J, N C( I, J ) = ZERO 140 CONTINUE ELSE IF( BETA.NE.ONE )THEN DO 150, I = J, N C( I, J ) = BETA*C( I, J ) 150 CONTINUE END IF DO 170, L = 1, K IF( ( A( J, L ).NE.ZERO ).OR. $ ( B( J, L ).NE.ZERO ) )THEN TEMP1 = ALPHA*B( J, L ) TEMP2 = ALPHA*A( J, L ) DO 160, I = J, N C( I, J ) = C( I, J ) + $ A( I, L )*TEMP1 + B( I, L )*TEMP2 160 CONTINUE END IF 170 CONTINUE 180 CONTINUE END IF ELSE * * Form C := alpha*A'*B + alpha*B'*A + C. * IF( UPPER )THEN DO 210, J = 1, N DO 200, I = 1, J TEMP1 = ZERO TEMP2 = ZERO DO 190, L = 1, K TEMP1 = TEMP1 + A( L, I )*B( L, J ) TEMP2 = TEMP2 + B( L, I )*A( L, J ) 190 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP1 + ALPHA*TEMP2 ELSE C( I, J ) = BETA *C( I, J ) + $ ALPHA*TEMP1 + ALPHA*TEMP2 END IF 200 CONTINUE 210 CONTINUE ELSE DO 240, J = 1, N DO 230, I = J, N TEMP1 = ZERO TEMP2 = ZERO DO 220, L = 1, K TEMP1 = TEMP1 + A( L, I )*B( L, J ) TEMP2 = TEMP2 + B( L, I )*A( L, J ) 220 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP1 + ALPHA*TEMP2 ELSE C( I, J ) = BETA *C( I, J ) + $ ALPHA*TEMP1 + ALPHA*TEMP2 END IF 230 CONTINUE 240 CONTINUE END IF END IF * RETURN * * End of GAL_GAL_GAL_DSYR2K. * END SUBROUTINE GAL_GAL_DSYRK ( UPLO, TRANS, N, K, ALPHA, A, LDA, $ BETA, C, LDC ) * .. Scalar Arguments .. CHARACTER*1 UPLO, TRANS INTEGER N, K, LDA, LDC DOUBLE PRECISION ALPHA, BETA * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), C( LDC, * ) * .. * * Purpose * ======= * * GAL_GAL_DSYRK performs one of the symmetric rank k operations * * C := alpha*A*A' + beta*C, * * or * * C := alpha*A'*A + beta*C, * * where alpha and beta are scalars, C is an n by n symmetric matrix * and A is an n by k matrix in the first case and a k by n matrix * in the second case. * * Parameters * ========== * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the upper or lower * triangular part of the array C is to be referenced as * follows: * * UPLO = 'U' or 'u' Only the upper triangular part of C * is to be referenced. * * UPLO = 'L' or 'l' Only the lower triangular part of C * is to be referenced. * * Unchanged on exit. * * TRANS - CHARACTER*1. * On entry, TRANS specifies the operation to be performed as * follows: * * TRANS = 'N' or 'n' C := alpha*A*A' + beta*C. * * TRANS = 'T' or 't' C := alpha*A'*A + beta*C. * * TRANS = 'C' or 'c' C := alpha*A'*A + beta*C. * * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the order of the matrix C. N must be * at least zero. * Unchanged on exit. * * K - INTEGER. * On entry with TRANS = 'N' or 'n', K specifies the number * of columns of the matrix A, and on entry with * TRANS = 'T' or 't' or 'C' or 'c', K specifies the number * of rows of the matrix A. K must be at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, ka ), where ka is * k when TRANS = 'N' or 'n', and is n otherwise. * Before entry with TRANS = 'N' or 'n', the leading n by k * part of the array A must contain the matrix A, otherwise * the leading k by n part of the array A must contain the * matrix A. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. When TRANS = 'N' or 'n' * then LDA must be at least max( 1, n ), otherwise LDA must * be at least max( 1, k ). * Unchanged on exit. * * BETA - DOUBLE PRECISION. * On entry, BETA specifies the scalar beta. * Unchanged on exit. * * C - DOUBLE PRECISION array of DIMENSION ( LDC, n ). * Before entry with UPLO = 'U' or 'u', the leading n by n * upper triangular part of the array C must contain the upper * triangular part of the symmetric matrix and the strictly * lower triangular part of C is not referenced. On exit, the * upper triangular part of the array C is overwritten by the * upper triangular part of the updated matrix. * Before entry with UPLO = 'L' or 'l', the leading n by n * lower triangular part of the array C must contain the lower * triangular part of the symmetric matrix and the strictly * upper triangular part of C is not referenced. On exit, the * lower triangular part of the array C is overwritten by the * lower triangular part of the updated matrix. * * LDC - INTEGER. * On entry, LDC specifies the first dimension of C as declared * in the calling (sub) program. LDC must be at least * max( 1, n ). * Unchanged on exit. * * * Level 3 Blas routine. * * -- Written on 8-February-1989. * Jack Dongarra, Argonne National Laboratory. * Iain Duff, AERE Harwell. * Jeremy Du Croz, Numerical Algorithms Group Ltd. * Sven Hammarling, Numerical Algorithms Group Ltd. * * * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC MAX * .. Local Scalars .. LOGICAL UPPER INTEGER I, INFO, J, L, NROWA DOUBLE PRECISION TEMP * .. Parameters .. DOUBLE PRECISION ONE , ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. Executable Statements .. * * Test the input parameters. * IF( GAL_LSAME( TRANS, 'N' ) )THEN NROWA = N ELSE NROWA = K END IF UPPER = GAL_LSAME( UPLO, 'U' ) * INFO = 0 IF( ( .NOT.UPPER ).AND. $ ( .NOT.GAL_LSAME( UPLO , 'L' ) ) )THEN INFO = 1 ELSE IF( ( .NOT.GAL_LSAME( TRANS, 'N' ) ).AND. $ ( .NOT.GAL_LSAME( TRANS, 'T' ) ).AND. $ ( .NOT.GAL_LSAME( TRANS, 'C' ) ) )THEN INFO = 2 ELSE IF( N .LT.0 )THEN INFO = 3 ELSE IF( K .LT.0 )THEN INFO = 4 ELSE IF( LDA.LT.MAX( 1, NROWA ) )THEN INFO = 7 ELSE IF( LDC.LT.MAX( 1, N ) )THEN INFO = 10 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_GAL_DSYRK ', INFO ) RETURN END IF * * Quick return if possible. * IF( ( N.EQ.0 ).OR. $ ( ( ( ALPHA.EQ.ZERO ).OR.( K.EQ.0 ) ).AND.( BETA.EQ.ONE ) ) ) $ RETURN * * And when alpha.eq.zero. * IF( ALPHA.EQ.ZERO )THEN IF( UPPER )THEN IF( BETA.EQ.ZERO )THEN DO 20, J = 1, N DO 10, I = 1, J C( I, J ) = ZERO 10 CONTINUE 20 CONTINUE ELSE DO 40, J = 1, N DO 30, I = 1, J C( I, J ) = BETA*C( I, J ) 30 CONTINUE 40 CONTINUE END IF ELSE IF( BETA.EQ.ZERO )THEN DO 60, J = 1, N DO 50, I = J, N C( I, J ) = ZERO 50 CONTINUE 60 CONTINUE ELSE DO 80, J = 1, N DO 70, I = J, N C( I, J ) = BETA*C( I, J ) 70 CONTINUE 80 CONTINUE END IF END IF RETURN END IF * * Start the operations. * IF( GAL_LSAME( TRANS, 'N' ) )THEN * * Form C := alpha*A*A' + beta*C. * IF( UPPER )THEN DO 130, J = 1, N IF( BETA.EQ.ZERO )THEN DO 90, I = 1, J C( I, J ) = ZERO 90 CONTINUE ELSE IF( BETA.NE.ONE )THEN DO 100, I = 1, J C( I, J ) = BETA*C( I, J ) 100 CONTINUE END IF DO 120, L = 1, K IF( A( J, L ).NE.ZERO )THEN TEMP = ALPHA*A( J, L ) DO 110, I = 1, J C( I, J ) = C( I, J ) + TEMP*A( I, L ) 110 CONTINUE END IF 120 CONTINUE 130 CONTINUE ELSE DO 180, J = 1, N IF( BETA.EQ.ZERO )THEN DO 140, I = J, N C( I, J ) = ZERO 140 CONTINUE ELSE IF( BETA.NE.ONE )THEN DO 150, I = J, N C( I, J ) = BETA*C( I, J ) 150 CONTINUE END IF DO 170, L = 1, K IF( A( J, L ).NE.ZERO )THEN TEMP = ALPHA*A( J, L ) DO 160, I = J, N C( I, J ) = C( I, J ) + TEMP*A( I, L ) 160 CONTINUE END IF 170 CONTINUE 180 CONTINUE END IF ELSE * * Form C := alpha*A'*A + beta*C. * IF( UPPER )THEN DO 210, J = 1, N DO 200, I = 1, J TEMP = ZERO DO 190, L = 1, K TEMP = TEMP + A( L, I )*A( L, J ) 190 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 200 CONTINUE 210 CONTINUE ELSE DO 240, J = 1, N DO 230, I = J, N TEMP = ZERO DO 220, L = 1, K TEMP = TEMP + A( L, I )*A( L, J ) 220 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 230 CONTINUE 240 CONTINUE END IF END IF * RETURN * * End of GAL_GAL_DSYRK . * END SUBROUTINE GAL_DTBMV ( UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, K, LDA, N CHARACTER*1 DIAG, TRANS, UPLO * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), X( * ) * .. * * Purpose * ======= * * GAL_DTBMV performs one of the matrix-vector operations * * x := A*x, or x := A'*x, * * where x is an n element vector and A is an n by n unit, or non-unit, * upper or lower triangular band matrix, with ( k + 1 ) diagonals. * * Parameters * ========== * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the matrix is an upper or * lower triangular matrix as follows: * * UPLO = 'U' or 'u' A is an upper triangular matrix. * * UPLO = 'L' or 'l' A is a lower triangular matrix. * * Unchanged on exit. * * TRANS - CHARACTER*1. * On entry, TRANS specifies the operation to be performed as * follows: * * TRANS = 'N' or 'n' x := A*x. * * TRANS = 'T' or 't' x := A'*x. * * TRANS = 'C' or 'c' x := A'*x. * * Unchanged on exit. * * DIAG - CHARACTER*1. * On entry, DIAG specifies whether or not A is unit * triangular as follows: * * DIAG = 'U' or 'u' A is assumed to be unit triangular. * * DIAG = 'N' or 'n' A is not assumed to be unit * triangular. * * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the order of the matrix A. * N must be at least zero. * Unchanged on exit. * * K - INTEGER. * On entry with UPLO = 'U' or 'u', K specifies the number of * super-diagonals of the matrix A. * On entry with UPLO = 'L' or 'l', K specifies the number of * sub-diagonals of the matrix A. * K must satisfy 0 .le. K. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). * Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) * by n part of the array A must contain the upper triangular * band part of the matrix of coefficients, supplied column by * column, with the leading diagonal of the matrix in row * ( k + 1 ) of the array, the first super-diagonal starting at * position 2 in row k, and so on. The top left k by k triangle * of the array A is not referenced. * The following program segment will transfer an upper * triangular band matrix from conventional full matrix storage * to band storage: * * DO 20, J = 1, N * M = K + 1 - J * DO 10, I = MAX( 1, J - K ), J * A( M + I, J ) = matrix( I, J ) * 10 CONTINUE * 20 CONTINUE * * Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) * by n part of the array A must contain the lower triangular * band part of the matrix of coefficients, supplied column by * column, with the leading diagonal of the matrix in row 1 of * the array, the first sub-diagonal starting at position 1 in * row 2, and so on. The bottom right k by k triangle of the * array A is not referenced. * The following program segment will transfer a lower * triangular band matrix from conventional full matrix storage * to band storage: * * DO 20, J = 1, N * M = 1 - J * DO 10, I = J, MIN( N, J + K ) * A( M + I, J ) = matrix( I, J ) * 10 CONTINUE * 20 CONTINUE * * Note that when DIAG = 'U' or 'u' the elements of the array A * corresponding to the diagonal elements of the matrix are not * referenced, but are assumed to be unity. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. LDA must be at least * ( k + 1 ). * Unchanged on exit. * * X - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCX ) ). * Before entry, the incremented array X must contain the n * element vector x. On exit, X is overwritten with the * tranformed vector x. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. Local Scalars .. DOUBLE PRECISION TEMP INTEGER I, INFO, IX, J, JX, KPLUS1, KX, L LOGICAL NOUNIT * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC MAX, MIN * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF ( .NOT.GAL_LSAME( UPLO , 'U' ).AND. $ .NOT.GAL_LSAME( UPLO , 'L' ) )THEN INFO = 1 ELSE IF( .NOT.GAL_LSAME( TRANS, 'N' ).AND. $ .NOT.GAL_LSAME( TRANS, 'T' ).AND. $ .NOT.GAL_LSAME( TRANS, 'C' ) )THEN INFO = 2 ELSE IF( .NOT.GAL_LSAME( DIAG , 'U' ).AND. $ .NOT.GAL_LSAME( DIAG , 'N' ) )THEN INFO = 3 ELSE IF( N.LT.0 )THEN INFO = 4 ELSE IF( K.LT.0 )THEN INFO = 5 ELSE IF( LDA.LT.( K + 1 ) )THEN INFO = 7 ELSE IF( INCX.EQ.0 )THEN INFO = 9 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DTBMV ', INFO ) RETURN END IF * * Quick return if possible. * IF( N.EQ.0 ) $ RETURN * NOUNIT = GAL_LSAME( DIAG, 'N' ) * * Set up the start point in X if the increment is not unity. This * will be ( N - 1 )*INCX too small for descending loops. * IF( INCX.LE.0 )THEN KX = 1 - ( N - 1 )*INCX ELSE IF( INCX.NE.1 )THEN KX = 1 END IF * * Start the operations. In this version the elements of A are * accessed sequentially with one pass through A. * IF( GAL_LSAME( TRANS, 'N' ) )THEN * * Form x := A*x. * IF( GAL_LSAME( UPLO, 'U' ) )THEN KPLUS1 = K + 1 IF( INCX.EQ.1 )THEN DO 20, J = 1, N IF( X( J ).NE.ZERO )THEN TEMP = X( J ) L = KPLUS1 - J DO 10, I = MAX( 1, J - K ), J - 1 X( I ) = X( I ) + TEMP*A( L + I, J ) 10 CONTINUE IF( NOUNIT ) $ X( J ) = X( J )*A( KPLUS1, J ) END IF 20 CONTINUE ELSE JX = KX DO 40, J = 1, N IF( X( JX ).NE.ZERO )THEN TEMP = X( JX ) IX = KX L = KPLUS1 - J DO 30, I = MAX( 1, J - K ), J - 1 X( IX ) = X( IX ) + TEMP*A( L + I, J ) IX = IX + INCX 30 CONTINUE IF( NOUNIT ) $ X( JX ) = X( JX )*A( KPLUS1, J ) END IF JX = JX + INCX IF( J.GT.K ) $ KX = KX + INCX 40 CONTINUE END IF ELSE IF( INCX.EQ.1 )THEN DO 60, J = N, 1, -1 IF( X( J ).NE.ZERO )THEN TEMP = X( J ) L = 1 - J DO 50, I = MIN( N, J + K ), J + 1, -1 X( I ) = X( I ) + TEMP*A( L + I, J ) 50 CONTINUE IF( NOUNIT ) $ X( J ) = X( J )*A( 1, J ) END IF 60 CONTINUE ELSE KX = KX + ( N - 1 )*INCX JX = KX DO 80, J = N, 1, -1 IF( X( JX ).NE.ZERO )THEN TEMP = X( JX ) IX = KX L = 1 - J DO 70, I = MIN( N, J + K ), J + 1, -1 X( IX ) = X( IX ) + TEMP*A( L + I, J ) IX = IX - INCX 70 CONTINUE IF( NOUNIT ) $ X( JX ) = X( JX )*A( 1, J ) END IF JX = JX - INCX IF( ( N - J ).GE.K ) $ KX = KX - INCX 80 CONTINUE END IF END IF ELSE * * Form x := A'*x. * IF( GAL_LSAME( UPLO, 'U' ) )THEN KPLUS1 = K + 1 IF( INCX.EQ.1 )THEN DO 100, J = N, 1, -1 TEMP = X( J ) L = KPLUS1 - J IF( NOUNIT ) $ TEMP = TEMP*A( KPLUS1, J ) DO 90, I = J - 1, MAX( 1, J - K ), -1 TEMP = TEMP + A( L + I, J )*X( I ) 90 CONTINUE X( J ) = TEMP 100 CONTINUE ELSE KX = KX + ( N - 1 )*INCX JX = KX DO 120, J = N, 1, -1 TEMP = X( JX ) KX = KX - INCX IX = KX L = KPLUS1 - J IF( NOUNIT ) $ TEMP = TEMP*A( KPLUS1, J ) DO 110, I = J - 1, MAX( 1, J - K ), -1 TEMP = TEMP + A( L + I, J )*X( IX ) IX = IX - INCX 110 CONTINUE X( JX ) = TEMP JX = JX - INCX 120 CONTINUE END IF ELSE IF( INCX.EQ.1 )THEN DO 140, J = 1, N TEMP = X( J ) L = 1 - J IF( NOUNIT ) $ TEMP = TEMP*A( 1, J ) DO 130, I = J + 1, MIN( N, J + K ) TEMP = TEMP + A( L + I, J )*X( I ) 130 CONTINUE X( J ) = TEMP 140 CONTINUE ELSE JX = KX DO 160, J = 1, N TEMP = X( JX ) KX = KX + INCX IX = KX L = 1 - J IF( NOUNIT ) $ TEMP = TEMP*A( 1, J ) DO 150, I = J + 1, MIN( N, J + K ) TEMP = TEMP + A( L + I, J )*X( IX ) IX = IX + INCX 150 CONTINUE X( JX ) = TEMP JX = JX + INCX 160 CONTINUE END IF END IF END IF * RETURN * * End of GAL_DTBMV . * END SUBROUTINE GAL_DTBSV ( UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, K, LDA, N CHARACTER*1 DIAG, TRANS, UPLO * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), X( * ) * .. * * Purpose * ======= * * GAL_DTBSV solves one of the systems of equations * * A*x = b, or A'*x = b, * * where b and x are n element vectors and A is an n by n unit, or * non-unit, upper or lower triangular band matrix, with ( k + 1 ) * diagonals. * * No test for singularity or near-singularity is included in this * routine. Such tests must be performed before calling this routine. * * Parameters * ========== * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the matrix is an upper or * lower triangular matrix as follows: * * UPLO = 'U' or 'u' A is an upper triangular matrix. * * UPLO = 'L' or 'l' A is a lower triangular matrix. * * Unchanged on exit. * * TRANS - CHARACTER*1. * On entry, TRANS specifies the equations to be solved as * follows: * * TRANS = 'N' or 'n' A*x = b. * * TRANS = 'T' or 't' A'*x = b. * * TRANS = 'C' or 'c' A'*x = b. * * Unchanged on exit. * * DIAG - CHARACTER*1. * On entry, DIAG specifies whether or not A is unit * triangular as follows: * * DIAG = 'U' or 'u' A is assumed to be unit triangular. * * DIAG = 'N' or 'n' A is not assumed to be unit * triangular. * * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the order of the matrix A. * N must be at least zero. * Unchanged on exit. * * K - INTEGER. * On entry with UPLO = 'U' or 'u', K specifies the number of * super-diagonals of the matrix A. * On entry with UPLO = 'L' or 'l', K specifies the number of * sub-diagonals of the matrix A. * K must satisfy 0 .le. K. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). * Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) * by n part of the array A must contain the upper triangular * band part of the matrix of coefficients, supplied column by * column, with the leading diagonal of the matrix in row * ( k + 1 ) of the array, the first super-diagonal starting at * position 2 in row k, and so on. The top left k by k triangle * of the array A is not referenced. * The following program segment will transfer an upper * triangular band matrix from conventional full matrix storage * to band storage: * * DO 20, J = 1, N * M = K + 1 - J * DO 10, I = MAX( 1, J - K ), J * A( M + I, J ) = matrix( I, J ) * 10 CONTINUE * 20 CONTINUE * * Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) * by n part of the array A must contain the lower triangular * band part of the matrix of coefficients, supplied column by * column, with the leading diagonal of the matrix in row 1 of * the array, the first sub-diagonal starting at position 1 in * row 2, and so on. The bottom right k by k triangle of the * array A is not referenced. * The following program segment will transfer a lower * triangular band matrix from conventional full matrix storage * to band storage: * * DO 20, J = 1, N * M = 1 - J * DO 10, I = J, MIN( N, J + K ) * A( M + I, J ) = matrix( I, J ) * 10 CONTINUE * 20 CONTINUE * * Note that when DIAG = 'U' or 'u' the elements of the array A * corresponding to the diagonal elements of the matrix are not * referenced, but are assumed to be unity. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. LDA must be at least * ( k + 1 ). * Unchanged on exit. * * X - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCX ) ). * Before entry, the incremented array X must contain the n * element right-hand side vector b. On exit, X is overwritten * with the solution vector x. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. Local Scalars .. DOUBLE PRECISION TEMP INTEGER I, INFO, IX, J, JX, KPLUS1, KX, L LOGICAL NOUNIT * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC MAX, MIN * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF ( .NOT.GAL_LSAME( UPLO , 'U' ).AND. $ .NOT.GAL_LSAME( UPLO , 'L' ) )THEN INFO = 1 ELSE IF( .NOT.GAL_LSAME( TRANS, 'N' ).AND. $ .NOT.GAL_LSAME( TRANS, 'T' ).AND. $ .NOT.GAL_LSAME( TRANS, 'C' ) )THEN INFO = 2 ELSE IF( .NOT.GAL_LSAME( DIAG , 'U' ).AND. $ .NOT.GAL_LSAME( DIAG , 'N' ) )THEN INFO = 3 ELSE IF( N.LT.0 )THEN INFO = 4 ELSE IF( K.LT.0 )THEN INFO = 5 ELSE IF( LDA.LT.( K + 1 ) )THEN INFO = 7 ELSE IF( INCX.EQ.0 )THEN INFO = 9 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DTBSV ', INFO ) RETURN END IF * * Quick return if possible. * IF( N.EQ.0 ) $ RETURN * NOUNIT = GAL_LSAME( DIAG, 'N' ) * * Set up the start point in X if the increment is not unity. This * will be ( N - 1 )*INCX too small for descending loops. * IF( INCX.LE.0 )THEN KX = 1 - ( N - 1 )*INCX ELSE IF( INCX.NE.1 )THEN KX = 1 END IF * * Start the operations. In this version the elements of A are * accessed by sequentially with one pass through A. * IF( GAL_LSAME( TRANS, 'N' ) )THEN * * Form x := inv( A )*x. * IF( GAL_LSAME( UPLO, 'U' ) )THEN KPLUS1 = K + 1 IF( INCX.EQ.1 )THEN DO 20, J = N, 1, -1 IF( X( J ).NE.ZERO )THEN L = KPLUS1 - J IF( NOUNIT ) $ X( J ) = X( J )/A( KPLUS1, J ) TEMP = X( J ) DO 10, I = J - 1, MAX( 1, J - K ), -1 X( I ) = X( I ) - TEMP*A( L + I, J ) 10 CONTINUE END IF 20 CONTINUE ELSE KX = KX + ( N - 1 )*INCX JX = KX DO 40, J = N, 1, -1 KX = KX - INCX IF( X( JX ).NE.ZERO )THEN IX = KX L = KPLUS1 - J IF( NOUNIT ) $ X( JX ) = X( JX )/A( KPLUS1, J ) TEMP = X( JX ) DO 30, I = J - 1, MAX( 1, J - K ), -1 X( IX ) = X( IX ) - TEMP*A( L + I, J ) IX = IX - INCX 30 CONTINUE END IF JX = JX - INCX 40 CONTINUE END IF ELSE IF( INCX.EQ.1 )THEN DO 60, J = 1, N IF( X( J ).NE.ZERO )THEN L = 1 - J IF( NOUNIT ) $ X( J ) = X( J )/A( 1, J ) TEMP = X( J ) DO 50, I = J + 1, MIN( N, J + K ) X( I ) = X( I ) - TEMP*A( L + I, J ) 50 CONTINUE END IF 60 CONTINUE ELSE JX = KX DO 80, J = 1, N KX = KX + INCX IF( X( JX ).NE.ZERO )THEN IX = KX L = 1 - J IF( NOUNIT ) $ X( JX ) = X( JX )/A( 1, J ) TEMP = X( JX ) DO 70, I = J + 1, MIN( N, J + K ) X( IX ) = X( IX ) - TEMP*A( L + I, J ) IX = IX + INCX 70 CONTINUE END IF JX = JX + INCX 80 CONTINUE END IF END IF ELSE * * Form x := inv( A')*x. * IF( GAL_LSAME( UPLO, 'U' ) )THEN KPLUS1 = K + 1 IF( INCX.EQ.1 )THEN DO 100, J = 1, N TEMP = X( J ) L = KPLUS1 - J DO 90, I = MAX( 1, J - K ), J - 1 TEMP = TEMP - A( L + I, J )*X( I ) 90 CONTINUE IF( NOUNIT ) $ TEMP = TEMP/A( KPLUS1, J ) X( J ) = TEMP 100 CONTINUE ELSE JX = KX DO 120, J = 1, N TEMP = X( JX ) IX = KX L = KPLUS1 - J DO 110, I = MAX( 1, J - K ), J - 1 TEMP = TEMP - A( L + I, J )*X( IX ) IX = IX + INCX 110 CONTINUE IF( NOUNIT ) $ TEMP = TEMP/A( KPLUS1, J ) X( JX ) = TEMP JX = JX + INCX IF( J.GT.K ) $ KX = KX + INCX 120 CONTINUE END IF ELSE IF( INCX.EQ.1 )THEN DO 140, J = N, 1, -1 TEMP = X( J ) L = 1 - J DO 130, I = MIN( N, J + K ), J + 1, -1 TEMP = TEMP - A( L + I, J )*X( I ) 130 CONTINUE IF( NOUNIT ) $ TEMP = TEMP/A( 1, J ) X( J ) = TEMP 140 CONTINUE ELSE KX = KX + ( N - 1 )*INCX JX = KX DO 160, J = N, 1, -1 TEMP = X( JX ) IX = KX L = 1 - J DO 150, I = MIN( N, J + K ), J + 1, -1 TEMP = TEMP - A( L + I, J )*X( IX ) IX = IX - INCX 150 CONTINUE IF( NOUNIT ) $ TEMP = TEMP/A( 1, J ) X( JX ) = TEMP JX = JX - INCX IF( ( N - J ).GE.K ) $ KX = KX - INCX 160 CONTINUE END IF END IF END IF * RETURN * * End of GAL_DTBSV . * END SUBROUTINE GAL_DTPMV ( UPLO, TRANS, DIAG, N, AP, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, N CHARACTER*1 DIAG, TRANS, UPLO * .. Array Arguments .. DOUBLE PRECISION AP( * ), X( * ) * .. * * Purpose * ======= * * GAL_DTPMV performs one of the matrix-vector operations * * x := A*x, or x := A'*x, * * where x is an n element vector and A is an n by n unit, or non-unit, * upper or lower triangular matrix, supplied in packed form. * * Parameters * ========== * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the matrix is an upper or * lower triangular matrix as follows: * * UPLO = 'U' or 'u' A is an upper triangular matrix. * * UPLO = 'L' or 'l' A is a lower triangular matrix. * * Unchanged on exit. * * TRANS - CHARACTER*1. * On entry, TRANS specifies the operation to be performed as * follows: * * TRANS = 'N' or 'n' x := A*x. * * TRANS = 'T' or 't' x := A'*x. * * TRANS = 'C' or 'c' x := A'*x. * * Unchanged on exit. * * DIAG - CHARACTER*1. * On entry, DIAG specifies whether or not A is unit * triangular as follows: * * DIAG = 'U' or 'u' A is assumed to be unit triangular. * * DIAG = 'N' or 'n' A is not assumed to be unit * triangular. * * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the order of the matrix A. * N must be at least zero. * Unchanged on exit. * * AP - DOUBLE PRECISION array of DIMENSION at least * ( ( n*( n + 1 ) )/2 ). * Before entry with UPLO = 'U' or 'u', the array AP must * contain the upper triangular matrix packed sequentially, * column by column, so that AP( 1 ) contains a( 1, 1 ), * AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 ) * respectively, and so on. * Before entry with UPLO = 'L' or 'l', the array AP must * contain the lower triangular matrix packed sequentially, * column by column, so that AP( 1 ) contains a( 1, 1 ), * AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 ) * respectively, and so on. * Note that when DIAG = 'U' or 'u', the diagonal elements of * A are not referenced, but are assumed to be unity. * Unchanged on exit. * * X - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCX ) ). * Before entry, the incremented array X must contain the n * element vector x. On exit, X is overwritten with the * tranformed vector x. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. Local Scalars .. DOUBLE PRECISION TEMP INTEGER I, INFO, IX, J, JX, K, KK, KX LOGICAL NOUNIT * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF ( .NOT.GAL_LSAME( UPLO , 'U' ).AND. $ .NOT.GAL_LSAME( UPLO , 'L' ) )THEN INFO = 1 ELSE IF( .NOT.GAL_LSAME( TRANS, 'N' ).AND. $ .NOT.GAL_LSAME( TRANS, 'T' ).AND. $ .NOT.GAL_LSAME( TRANS, 'C' ) )THEN INFO = 2 ELSE IF( .NOT.GAL_LSAME( DIAG , 'U' ).AND. $ .NOT.GAL_LSAME( DIAG , 'N' ) )THEN INFO = 3 ELSE IF( N.LT.0 )THEN INFO = 4 ELSE IF( INCX.EQ.0 )THEN INFO = 7 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DTPMV ', INFO ) RETURN END IF * * Quick return if possible. * IF( N.EQ.0 ) $ RETURN * NOUNIT = GAL_LSAME( DIAG, 'N' ) * * Set up the start point in X if the increment is not unity. This * will be ( N - 1 )*INCX too small for descending loops. * IF( INCX.LE.0 )THEN KX = 1 - ( N - 1 )*INCX ELSE IF( INCX.NE.1 )THEN KX = 1 END IF * * Start the operations. In this version the elements of AP are * accessed sequentially with one pass through AP. * IF( GAL_LSAME( TRANS, 'N' ) )THEN * * Form x:= A*x. * IF( GAL_LSAME( UPLO, 'U' ) )THEN KK =1 IF( INCX.EQ.1 )THEN DO 20, J = 1, N IF( X( J ).NE.ZERO )THEN TEMP = X( J ) K = KK DO 10, I = 1, J - 1 X( I ) = X( I ) + TEMP*AP( K ) K = K + 1 10 CONTINUE IF( NOUNIT ) $ X( J ) = X( J )*AP( KK + J - 1 ) END IF KK = KK + J 20 CONTINUE ELSE JX = KX DO 40, J = 1, N IF( X( JX ).NE.ZERO )THEN TEMP = X( JX ) IX = KX DO 30, K = KK, KK + J - 2 X( IX ) = X( IX ) + TEMP*AP( K ) IX = IX + INCX 30 CONTINUE IF( NOUNIT ) $ X( JX ) = X( JX )*AP( KK + J - 1 ) END IF JX = JX + INCX KK = KK + J 40 CONTINUE END IF ELSE KK = ( N*( N + 1 ) )/2 IF( INCX.EQ.1 )THEN DO 60, J = N, 1, -1 IF( X( J ).NE.ZERO )THEN TEMP = X( J ) K = KK DO 50, I = N, J + 1, -1 X( I ) = X( I ) + TEMP*AP( K ) K = K - 1 50 CONTINUE IF( NOUNIT ) $ X( J ) = X( J )*AP( KK - N + J ) END IF KK = KK - ( N - J + 1 ) 60 CONTINUE ELSE KX = KX + ( N - 1 )*INCX JX = KX DO 80, J = N, 1, -1 IF( X( JX ).NE.ZERO )THEN TEMP = X( JX ) IX = KX DO 70, K = KK, KK - ( N - ( J + 1 ) ), -1 X( IX ) = X( IX ) + TEMP*AP( K ) IX = IX - INCX 70 CONTINUE IF( NOUNIT ) $ X( JX ) = X( JX )*AP( KK - N + J ) END IF JX = JX - INCX KK = KK - ( N - J + 1 ) 80 CONTINUE END IF END IF ELSE * * Form x := A'*x. * IF( GAL_LSAME( UPLO, 'U' ) )THEN KK = ( N*( N + 1 ) )/2 IF( INCX.EQ.1 )THEN DO 100, J = N, 1, -1 TEMP = X( J ) IF( NOUNIT ) $ TEMP = TEMP*AP( KK ) K = KK - 1 DO 90, I = J - 1, 1, -1 TEMP = TEMP + AP( K )*X( I ) K = K - 1 90 CONTINUE X( J ) = TEMP KK = KK - J 100 CONTINUE ELSE JX = KX + ( N - 1 )*INCX DO 120, J = N, 1, -1 TEMP = X( JX ) IX = JX IF( NOUNIT ) $ TEMP = TEMP*AP( KK ) DO 110, K = KK - 1, KK - J + 1, -1 IX = IX - INCX TEMP = TEMP + AP( K )*X( IX ) 110 CONTINUE X( JX ) = TEMP JX = JX - INCX KK = KK - J 120 CONTINUE END IF ELSE KK = 1 IF( INCX.EQ.1 )THEN DO 140, J = 1, N TEMP = X( J ) IF( NOUNIT ) $ TEMP = TEMP*AP( KK ) K = KK + 1 DO 130, I = J + 1, N TEMP = TEMP + AP( K )*X( I ) K = K + 1 130 CONTINUE X( J ) = TEMP KK = KK + ( N - J + 1 ) 140 CONTINUE ELSE JX = KX DO 160, J = 1, N TEMP = X( JX ) IX = JX IF( NOUNIT ) $ TEMP = TEMP*AP( KK ) DO 150, K = KK + 1, KK + N - J IX = IX + INCX TEMP = TEMP + AP( K )*X( IX ) 150 CONTINUE X( JX ) = TEMP JX = JX + INCX KK = KK + ( N - J + 1 ) 160 CONTINUE END IF END IF END IF * RETURN * * End of GAL_DTPMV . * END SUBROUTINE GAL_DTPSV ( UPLO, TRANS, DIAG, N, AP, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, N CHARACTER*1 DIAG, TRANS, UPLO * .. Array Arguments .. DOUBLE PRECISION AP( * ), X( * ) * .. * * Purpose * ======= * * GAL_DTPSV solves one of the systems of equations * * A*x = b, or A'*x = b, * * where b and x are n element vectors and A is an n by n unit, or * non-unit, upper or lower triangular matrix, supplied in packed form. * * No test for singularity or near-singularity is included in this * routine. Such tests must be performed before calling this routine. * * Parameters * ========== * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the matrix is an upper or * lower triangular matrix as follows: * * UPLO = 'U' or 'u' A is an upper triangular matrix. * * UPLO = 'L' or 'l' A is a lower triangular matrix. * * Unchanged on exit. * * TRANS - CHARACTER*1. * On entry, TRANS specifies the equations to be solved as * follows: * * TRANS = 'N' or 'n' A*x = b. * * TRANS = 'T' or 't' A'*x = b. * * TRANS = 'C' or 'c' A'*x = b. * * Unchanged on exit. * * DIAG - CHARACTER*1. * On entry, DIAG specifies whether or not A is unit * triangular as follows: * * DIAG = 'U' or 'u' A is assumed to be unit triangular. * * DIAG = 'N' or 'n' A is not assumed to be unit * triangular. * * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the order of the matrix A. * N must be at least zero. * Unchanged on exit. * * AP - DOUBLE PRECISION array of DIMENSION at least * ( ( n*( n + 1 ) )/2 ). * Before entry with UPLO = 'U' or 'u', the array AP must * contain the upper triangular matrix packed sequentially, * column by column, so that AP( 1 ) contains a( 1, 1 ), * AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 ) * respectively, and so on. * Before entry with UPLO = 'L' or 'l', the array AP must * contain the lower triangular matrix packed sequentially, * column by column, so that AP( 1 ) contains a( 1, 1 ), * AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 ) * respectively, and so on. * Note that when DIAG = 'U' or 'u', the diagonal elements of * A are not referenced, but are assumed to be unity. * Unchanged on exit. * * X - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCX ) ). * Before entry, the incremented array X must contain the n * element right-hand side vector b. On exit, X is overwritten * with the solution vector x. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. Local Scalars .. DOUBLE PRECISION TEMP INTEGER I, INFO, IX, J, JX, K, KK, KX LOGICAL NOUNIT * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF ( .NOT.GAL_LSAME( UPLO , 'U' ).AND. $ .NOT.GAL_LSAME( UPLO , 'L' ) )THEN INFO = 1 ELSE IF( .NOT.GAL_LSAME( TRANS, 'N' ).AND. $ .NOT.GAL_LSAME( TRANS, 'T' ).AND. $ .NOT.GAL_LSAME( TRANS, 'C' ) )THEN INFO = 2 ELSE IF( .NOT.GAL_LSAME( DIAG , 'U' ).AND. $ .NOT.GAL_LSAME( DIAG , 'N' ) )THEN INFO = 3 ELSE IF( N.LT.0 )THEN INFO = 4 ELSE IF( INCX.EQ.0 )THEN INFO = 7 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DTPSV ', INFO ) RETURN END IF * * Quick return if possible. * IF( N.EQ.0 ) $ RETURN * NOUNIT = GAL_LSAME( DIAG, 'N' ) * * Set up the start point in X if the increment is not unity. This * will be ( N - 1 )*INCX too small for descending loops. * IF( INCX.LE.0 )THEN KX = 1 - ( N - 1 )*INCX ELSE IF( INCX.NE.1 )THEN KX = 1 END IF * * Start the operations. In this version the elements of AP are * accessed sequentially with one pass through AP. * IF( GAL_LSAME( TRANS, 'N' ) )THEN * * Form x := inv( A )*x. * IF( GAL_LSAME( UPLO, 'U' ) )THEN KK = ( N*( N + 1 ) )/2 IF( INCX.EQ.1 )THEN DO 20, J = N, 1, -1 IF( X( J ).NE.ZERO )THEN IF( NOUNIT ) $ X( J ) = X( J )/AP( KK ) TEMP = X( J ) K = KK - 1 DO 10, I = J - 1, 1, -1 X( I ) = X( I ) - TEMP*AP( K ) K = K - 1 10 CONTINUE END IF KK = KK - J 20 CONTINUE ELSE JX = KX + ( N - 1 )*INCX DO 40, J = N, 1, -1 IF( X( JX ).NE.ZERO )THEN IF( NOUNIT ) $ X( JX ) = X( JX )/AP( KK ) TEMP = X( JX ) IX = JX DO 30, K = KK - 1, KK - J + 1, -1 IX = IX - INCX X( IX ) = X( IX ) - TEMP*AP( K ) 30 CONTINUE END IF JX = JX - INCX KK = KK - J 40 CONTINUE END IF ELSE KK = 1 IF( INCX.EQ.1 )THEN DO 60, J = 1, N IF( X( J ).NE.ZERO )THEN IF( NOUNIT ) $ X( J ) = X( J )/AP( KK ) TEMP = X( J ) K = KK + 1 DO 50, I = J + 1, N X( I ) = X( I ) - TEMP*AP( K ) K = K + 1 50 CONTINUE END IF KK = KK + ( N - J + 1 ) 60 CONTINUE ELSE JX = KX DO 80, J = 1, N IF( X( JX ).NE.ZERO )THEN IF( NOUNIT ) $ X( JX ) = X( JX )/AP( KK ) TEMP = X( JX ) IX = JX DO 70, K = KK + 1, KK + N - J IX = IX + INCX X( IX ) = X( IX ) - TEMP*AP( K ) 70 CONTINUE END IF JX = JX + INCX KK = KK + ( N - J + 1 ) 80 CONTINUE END IF END IF ELSE * * Form x := inv( A' )*x. * IF( GAL_LSAME( UPLO, 'U' ) )THEN KK = 1 IF( INCX.EQ.1 )THEN DO 100, J = 1, N TEMP = X( J ) K = KK DO 90, I = 1, J - 1 TEMP = TEMP - AP( K )*X( I ) K = K + 1 90 CONTINUE IF( NOUNIT ) $ TEMP = TEMP/AP( KK + J - 1 ) X( J ) = TEMP KK = KK + J 100 CONTINUE ELSE JX = KX DO 120, J = 1, N TEMP = X( JX ) IX = KX DO 110, K = KK, KK + J - 2 TEMP = TEMP - AP( K )*X( IX ) IX = IX + INCX 110 CONTINUE IF( NOUNIT ) $ TEMP = TEMP/AP( KK + J - 1 ) X( JX ) = TEMP JX = JX + INCX KK = KK + J 120 CONTINUE END IF ELSE KK = ( N*( N + 1 ) )/2 IF( INCX.EQ.1 )THEN DO 140, J = N, 1, -1 TEMP = X( J ) K = KK DO 130, I = N, J + 1, -1 TEMP = TEMP - AP( K )*X( I ) K = K - 1 130 CONTINUE IF( NOUNIT ) $ TEMP = TEMP/AP( KK - N + J ) X( J ) = TEMP KK = KK - ( N - J + 1 ) 140 CONTINUE ELSE KX = KX + ( N - 1 )*INCX JX = KX DO 160, J = N, 1, -1 TEMP = X( JX ) IX = KX DO 150, K = KK, KK - ( N - ( J + 1 ) ), -1 TEMP = TEMP - AP( K )*X( IX ) IX = IX - INCX 150 CONTINUE IF( NOUNIT ) $ TEMP = TEMP/AP( KK - N + J ) X( JX ) = TEMP JX = JX - INCX KK = KK - (N - J + 1 ) 160 CONTINUE END IF END IF END IF * RETURN * * End of GAL_DTPSV . * END SUBROUTINE GAL_DTRMM ( SIDE, UPLO, TRANSA, DIAG, M, N, $ ALPHA, A, LDA, B, LDB ) * .. Scalar Arguments .. CHARACTER*1 SIDE, UPLO, TRANSA, DIAG INTEGER M, N, LDA, LDB DOUBLE PRECISION ALPHA * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), B( LDB, * ) * .. * * Purpose * ======= * * GAL_DTRMM performs one of the matrix-matrix operations * * B := alpha*op( A )*B, or B := alpha*B*op( A ), * * where alpha is a scalar, B is an m by n matrix, A is a unit, or * non-unit, upper or lower triangular matrix and op( A ) is one of * * op( A ) = A or op( A ) = A'. * * Parameters * ========== * * SIDE - CHARACTER*1. * On entry, SIDE specifies whether op( A ) multiplies B from * the left or right as follows: * * SIDE = 'L' or 'l' B := alpha*op( A )*B. * * SIDE = 'R' or 'r' B := alpha*B*op( A ). * * Unchanged on exit. * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the matrix A is an upper or * lower triangular matrix as follows: * * UPLO = 'U' or 'u' A is an upper triangular matrix. * * UPLO = 'L' or 'l' A is a lower triangular matrix. * * Unchanged on exit. * * TRANSA - CHARACTER*1. * On entry, TRANSA specifies the form of op( A ) to be used in * the matrix multiplication as follows: * * TRANSA = 'N' or 'n' op( A ) = A. * * TRANSA = 'T' or 't' op( A ) = A'. * * TRANSA = 'C' or 'c' op( A ) = A'. * * Unchanged on exit. * * DIAG - CHARACTER*1. * On entry, DIAG specifies whether or not A is unit triangular * as follows: * * DIAG = 'U' or 'u' A is assumed to be unit triangular. * * DIAG = 'N' or 'n' A is not assumed to be unit * triangular. * * Unchanged on exit. * * M - INTEGER. * On entry, M specifies the number of rows of B. M must be at * least zero. * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the number of columns of B. N must be * at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. When alpha is * zero then A is not referenced and B need not be set before * entry. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, k ), where k is m * when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'. * Before entry with UPLO = 'U' or 'u', the leading k by k * upper triangular part of the array A must contain the upper * triangular matrix and the strictly lower triangular part of * A is not referenced. * Before entry with UPLO = 'L' or 'l', the leading k by k * lower triangular part of the array A must contain the lower * triangular matrix and the strictly upper triangular part of * A is not referenced. * Note that when DIAG = 'U' or 'u', the diagonal elements of * A are not referenced either, but are assumed to be unity. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. When SIDE = 'L' or 'l' then * LDA must be at least max( 1, m ), when SIDE = 'R' or 'r' * then LDA must be at least max( 1, n ). * Unchanged on exit. * * B - DOUBLE PRECISION array of DIMENSION ( LDB, n ). * Before entry, the leading m by n part of the array B must * contain the matrix B, and on exit is overwritten by the * transformed matrix. * * LDB - INTEGER. * On entry, LDB specifies the first dimension of B as declared * in the calling (sub) program. LDB must be at least * max( 1, m ). * Unchanged on exit. * * * Level 3 Blas routine. * * -- Written on 8-February-1989. * Jack Dongarra, Argonne National Laboratory. * Iain Duff, AERE Harwell. * Jeremy Du Croz, Numerical Algorithms Group Ltd. * Sven Hammarling, Numerical Algorithms Group Ltd. * * * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC MAX * .. Local Scalars .. LOGICAL LSIDE, NOUNIT, UPPER INTEGER I, INFO, J, K, NROWA DOUBLE PRECISION TEMP * .. Parameters .. DOUBLE PRECISION ONE , ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. Executable Statements .. * * Test the input parameters. * LSIDE = GAL_LSAME( SIDE , 'L' ) IF( LSIDE )THEN NROWA = M ELSE NROWA = N END IF NOUNIT = GAL_LSAME( DIAG , 'N' ) UPPER = GAL_LSAME( UPLO , 'U' ) * INFO = 0 IF( ( .NOT.LSIDE ).AND. $ ( .NOT.GAL_LSAME( SIDE , 'R' ) ) )THEN INFO = 1 ELSE IF( ( .NOT.UPPER ).AND. $ ( .NOT.GAL_LSAME( UPLO , 'L' ) ) )THEN INFO = 2 ELSE IF( ( .NOT.GAL_LSAME( TRANSA, 'N' ) ).AND. $ ( .NOT.GAL_LSAME( TRANSA, 'T' ) ).AND. $ ( .NOT.GAL_LSAME( TRANSA, 'C' ) ) )THEN INFO = 3 ELSE IF( ( .NOT.GAL_LSAME( DIAG , 'U' ) ).AND. $ ( .NOT.GAL_LSAME( DIAG , 'N' ) ) )THEN INFO = 4 ELSE IF( M .LT.0 )THEN INFO = 5 ELSE IF( N .LT.0 )THEN INFO = 6 ELSE IF( LDA.LT.MAX( 1, NROWA ) )THEN INFO = 9 ELSE IF( LDB.LT.MAX( 1, M ) )THEN INFO = 11 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DTRMM ', INFO ) RETURN END IF * * Quick return if possible. * IF( N.EQ.0 ) $ RETURN * * And when alpha.eq.zero. * IF( ALPHA.EQ.ZERO )THEN DO 20, J = 1, N DO 10, I = 1, M B( I, J ) = ZERO 10 CONTINUE 20 CONTINUE RETURN END IF * * Start the operations. * IF( LSIDE )THEN IF( GAL_LSAME( TRANSA, 'N' ) )THEN * * Form B := alpha*A*B. * IF( UPPER )THEN DO 50, J = 1, N DO 40, K = 1, M IF( B( K, J ).NE.ZERO )THEN TEMP = ALPHA*B( K, J ) DO 30, I = 1, K - 1 B( I, J ) = B( I, J ) + TEMP*A( I, K ) 30 CONTINUE IF( NOUNIT ) $ TEMP = TEMP*A( K, K ) B( K, J ) = TEMP END IF 40 CONTINUE 50 CONTINUE ELSE DO 80, J = 1, N DO 70 K = M, 1, -1 IF( B( K, J ).NE.ZERO )THEN TEMP = ALPHA*B( K, J ) B( K, J ) = TEMP IF( NOUNIT ) $ B( K, J ) = B( K, J )*A( K, K ) DO 60, I = K + 1, M B( I, J ) = B( I, J ) + TEMP*A( I, K ) 60 CONTINUE END IF 70 CONTINUE 80 CONTINUE END IF ELSE * * Form B := alpha*B*A'. * IF( UPPER )THEN DO 110, J = 1, N DO 100, I = M, 1, -1 TEMP = B( I, J ) IF( NOUNIT ) $ TEMP = TEMP*A( I, I ) DO 90, K = 1, I - 1 TEMP = TEMP + A( K, I )*B( K, J ) 90 CONTINUE B( I, J ) = ALPHA*TEMP 100 CONTINUE 110 CONTINUE ELSE DO 140, J = 1, N DO 130, I = 1, M TEMP = B( I, J ) IF( NOUNIT ) $ TEMP = TEMP*A( I, I ) DO 120, K = I + 1, M TEMP = TEMP + A( K, I )*B( K, J ) 120 CONTINUE B( I, J ) = ALPHA*TEMP 130 CONTINUE 140 CONTINUE END IF END IF ELSE IF( GAL_LSAME( TRANSA, 'N' ) )THEN * * Form B := alpha*B*A. * IF( UPPER )THEN DO 180, J = N, 1, -1 TEMP = ALPHA IF( NOUNIT ) $ TEMP = TEMP*A( J, J ) DO 150, I = 1, M B( I, J ) = TEMP*B( I, J ) 150 CONTINUE DO 170, K = 1, J - 1 IF( A( K, J ).NE.ZERO )THEN TEMP = ALPHA*A( K, J ) DO 160, I = 1, M B( I, J ) = B( I, J ) + TEMP*B( I, K ) 160 CONTINUE END IF 170 CONTINUE 180 CONTINUE ELSE DO 220, J = 1, N TEMP = ALPHA IF( NOUNIT ) $ TEMP = TEMP*A( J, J ) DO 190, I = 1, M B( I, J ) = TEMP*B( I, J ) 190 CONTINUE DO 210, K = J + 1, N IF( A( K, J ).NE.ZERO )THEN TEMP = ALPHA*A( K, J ) DO 200, I = 1, M B( I, J ) = B( I, J ) + TEMP*B( I, K ) 200 CONTINUE END IF 210 CONTINUE 220 CONTINUE END IF ELSE * * Form B := alpha*B*A'. * IF( UPPER )THEN DO 260, K = 1, N DO 240, J = 1, K - 1 IF( A( J, K ).NE.ZERO )THEN TEMP = ALPHA*A( J, K ) DO 230, I = 1, M B( I, J ) = B( I, J ) + TEMP*B( I, K ) 230 CONTINUE END IF 240 CONTINUE TEMP = ALPHA IF( NOUNIT ) $ TEMP = TEMP*A( K, K ) IF( TEMP.NE.ONE )THEN DO 250, I = 1, M B( I, K ) = TEMP*B( I, K ) 250 CONTINUE END IF 260 CONTINUE ELSE DO 300, K = N, 1, -1 DO 280, J = K + 1, N IF( A( J, K ).NE.ZERO )THEN TEMP = ALPHA*A( J, K ) DO 270, I = 1, M B( I, J ) = B( I, J ) + TEMP*B( I, K ) 270 CONTINUE END IF 280 CONTINUE TEMP = ALPHA IF( NOUNIT ) $ TEMP = TEMP*A( K, K ) IF( TEMP.NE.ONE )THEN DO 290, I = 1, M B( I, K ) = TEMP*B( I, K ) 290 CONTINUE END IF 300 CONTINUE END IF END IF END IF * RETURN * * End of GAL_DTRMM . * END SUBROUTINE GAL_DTRMV ( UPLO, TRANS, DIAG, N, A, LDA, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, LDA, N CHARACTER*1 DIAG, TRANS, UPLO * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), X( * ) * .. * * Purpose * ======= * * GAL_DTRMV performs one of the matrix-vector operations * * x := A*x, or x := A'*x, * * where x is an n element vector and A is an n by n unit, or non-unit, * upper or lower triangular matrix. * * Parameters * ========== * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the matrix is an upper or * lower triangular matrix as follows: * * UPLO = 'U' or 'u' A is an upper triangular matrix. * * UPLO = 'L' or 'l' A is a lower triangular matrix. * * Unchanged on exit. * * TRANS - CHARACTER*1. * On entry, TRANS specifies the operation to be performed as * follows: * * TRANS = 'N' or 'n' x := A*x. * * TRANS = 'T' or 't' x := A'*x. * * TRANS = 'C' or 'c' x := A'*x. * * Unchanged on exit. * * DIAG - CHARACTER*1. * On entry, DIAG specifies whether or not A is unit * triangular as follows: * * DIAG = 'U' or 'u' A is assumed to be unit triangular. * * DIAG = 'N' or 'n' A is not assumed to be unit * triangular. * * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the order of the matrix A. * N must be at least zero. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). * Before entry with UPLO = 'U' or 'u', the leading n by n * upper triangular part of the array A must contain the upper * triangular matrix and the strictly lower triangular part of * A is not referenced. * Before entry with UPLO = 'L' or 'l', the leading n by n * lower triangular part of the array A must contain the lower * triangular matrix and the strictly upper triangular part of * A is not referenced. * Note that when DIAG = 'U' or 'u', the diagonal elements of * A are not referenced either, but are assumed to be unity. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. LDA must be at least * max( 1, n ). * Unchanged on exit. * * X - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCX ) ). * Before entry, the incremented array X must contain the n * element vector x. On exit, X is overwritten with the * tranformed vector x. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. Local Scalars .. DOUBLE PRECISION TEMP INTEGER I, INFO, IX, J, JX, KX LOGICAL NOUNIT * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC MAX * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF ( .NOT.GAL_LSAME( UPLO , 'U' ).AND. $ .NOT.GAL_LSAME( UPLO , 'L' ) )THEN INFO = 1 ELSE IF( .NOT.GAL_LSAME( TRANS, 'N' ).AND. $ .NOT.GAL_LSAME( TRANS, 'T' ).AND. $ .NOT.GAL_LSAME( TRANS, 'C' ) )THEN INFO = 2 ELSE IF( .NOT.GAL_LSAME( DIAG , 'U' ).AND. $ .NOT.GAL_LSAME( DIAG , 'N' ) )THEN INFO = 3 ELSE IF( N.LT.0 )THEN INFO = 4 ELSE IF( LDA.LT.MAX( 1, N ) )THEN INFO = 6 ELSE IF( INCX.EQ.0 )THEN INFO = 8 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DTRMV ', INFO ) RETURN END IF * * Quick return if possible. * IF( N.EQ.0 ) $ RETURN * NOUNIT = GAL_LSAME( DIAG, 'N' ) * * Set up the start point in X if the increment is not unity. This * will be ( N - 1 )*INCX too small for descending loops. * IF( INCX.LE.0 )THEN KX = 1 - ( N - 1 )*INCX ELSE IF( INCX.NE.1 )THEN KX = 1 END IF * * Start the operations. In this version the elements of A are * accessed sequentially with one pass through A. * IF( GAL_LSAME( TRANS, 'N' ) )THEN * * Form x := A*x. * IF( GAL_LSAME( UPLO, 'U' ) )THEN IF( INCX.EQ.1 )THEN DO 20, J = 1, N IF( X( J ).NE.ZERO )THEN TEMP = X( J ) DO 10, I = 1, J - 1 X( I ) = X( I ) + TEMP*A( I, J ) 10 CONTINUE IF( NOUNIT ) $ X( J ) = X( J )*A( J, J ) END IF 20 CONTINUE ELSE JX = KX DO 40, J = 1, N IF( X( JX ).NE.ZERO )THEN TEMP = X( JX ) IX = KX DO 30, I = 1, J - 1 X( IX ) = X( IX ) + TEMP*A( I, J ) IX = IX + INCX 30 CONTINUE IF( NOUNIT ) $ X( JX ) = X( JX )*A( J, J ) END IF JX = JX + INCX 40 CONTINUE END IF ELSE IF( INCX.EQ.1 )THEN DO 60, J = N, 1, -1 IF( X( J ).NE.ZERO )THEN TEMP = X( J ) DO 50, I = N, J + 1, -1 X( I ) = X( I ) + TEMP*A( I, J ) 50 CONTINUE IF( NOUNIT ) $ X( J ) = X( J )*A( J, J ) END IF 60 CONTINUE ELSE KX = KX + ( N - 1 )*INCX JX = KX DO 80, J = N, 1, -1 IF( X( JX ).NE.ZERO )THEN TEMP = X( JX ) IX = KX DO 70, I = N, J + 1, -1 X( IX ) = X( IX ) + TEMP*A( I, J ) IX = IX - INCX 70 CONTINUE IF( NOUNIT ) $ X( JX ) = X( JX )*A( J, J ) END IF JX = JX - INCX 80 CONTINUE END IF END IF ELSE * * Form x := A'*x. * IF( GAL_LSAME( UPLO, 'U' ) )THEN IF( INCX.EQ.1 )THEN DO 100, J = N, 1, -1 TEMP = X( J ) IF( NOUNIT ) $ TEMP = TEMP*A( J, J ) DO 90, I = J - 1, 1, -1 TEMP = TEMP + A( I, J )*X( I ) 90 CONTINUE X( J ) = TEMP 100 CONTINUE ELSE JX = KX + ( N - 1 )*INCX DO 120, J = N, 1, -1 TEMP = X( JX ) IX = JX IF( NOUNIT ) $ TEMP = TEMP*A( J, J ) DO 110, I = J - 1, 1, -1 IX = IX - INCX TEMP = TEMP + A( I, J )*X( IX ) 110 CONTINUE X( JX ) = TEMP JX = JX - INCX 120 CONTINUE END IF ELSE IF( INCX.EQ.1 )THEN DO 140, J = 1, N TEMP = X( J ) IF( NOUNIT ) $ TEMP = TEMP*A( J, J ) DO 130, I = J + 1, N TEMP = TEMP + A( I, J )*X( I ) 130 CONTINUE X( J ) = TEMP 140 CONTINUE ELSE JX = KX DO 160, J = 1, N TEMP = X( JX ) IX = JX IF( NOUNIT ) $ TEMP = TEMP*A( J, J ) DO 150, I = J + 1, N IX = IX + INCX TEMP = TEMP + A( I, J )*X( IX ) 150 CONTINUE X( JX ) = TEMP JX = JX + INCX 160 CONTINUE END IF END IF END IF * RETURN * * End of GAL_DTRMV . * END SUBROUTINE GAL_DTRSM ( SIDE, UPLO, TRANSA, DIAG, M, N, $ ALPHA, A, LDA, B, LDB ) * .. Scalar Arguments .. CHARACTER*1 SIDE, UPLO, TRANSA, DIAG INTEGER M, N, LDA, LDB DOUBLE PRECISION ALPHA * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), B( LDB, * ) * .. * * Purpose * ======= * * GAL_DTRSM solves one of the matrix equations * * op( A )*X = alpha*B, or X*op( A ) = alpha*B, * * where alpha is a scalar, X and B are m by n matrices, A is a unit, or * non-unit, upper or lower triangular matrix and op( A ) is one of * * op( A ) = A or op( A ) = A'. * * The matrix X is overwritten on B. * * Parameters * ========== * * SIDE - CHARACTER*1. * On entry, SIDE specifies whether op( A ) appears on the left * or right of X as follows: * * SIDE = 'L' or 'l' op( A )*X = alpha*B. * * SIDE = 'R' or 'r' X*op( A ) = alpha*B. * * Unchanged on exit. * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the matrix A is an upper or * lower triangular matrix as follows: * * UPLO = 'U' or 'u' A is an upper triangular matrix. * * UPLO = 'L' or 'l' A is a lower triangular matrix. * * Unchanged on exit. * * TRANSA - CHARACTER*1. * On entry, TRANSA specifies the form of op( A ) to be used in * the matrix multiplication as follows: * * TRANSA = 'N' or 'n' op( A ) = A. * * TRANSA = 'T' or 't' op( A ) = A'. * * TRANSA = 'C' or 'c' op( A ) = A'. * * Unchanged on exit. * * DIAG - CHARACTER*1. * On entry, DIAG specifies whether or not A is unit triangular * as follows: * * DIAG = 'U' or 'u' A is assumed to be unit triangular. * * DIAG = 'N' or 'n' A is not assumed to be unit * triangular. * * Unchanged on exit. * * M - INTEGER. * On entry, M specifies the number of rows of B. M must be at * least zero. * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the number of columns of B. N must be * at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. When alpha is * zero then A is not referenced and B need not be set before * entry. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, k ), where k is m * when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'. * Before entry with UPLO = 'U' or 'u', the leading k by k * upper triangular part of the array A must contain the upper * triangular matrix and the strictly lower triangular part of * A is not referenced. * Before entry with UPLO = 'L' or 'l', the leading k by k * lower triangular part of the array A must contain the lower * triangular matrix and the strictly upper triangular part of * A is not referenced. * Note that when DIAG = 'U' or 'u', the diagonal elements of * A are not referenced either, but are assumed to be unity. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. When SIDE = 'L' or 'l' then * LDA must be at least max( 1, m ), when SIDE = 'R' or 'r' * then LDA must be at least max( 1, n ). * Unchanged on exit. * * B - DOUBLE PRECISION array of DIMENSION ( LDB, n ). * Before entry, the leading m by n part of the array B must * contain the right-hand side matrix B, and on exit is * overwritten by the solution matrix X. * * LDB - INTEGER. * On entry, LDB specifies the first dimension of B as declared * in the calling (sub) program. LDB must be at least * max( 1, m ). * Unchanged on exit. * * * Level 3 Blas routine. * * * -- Written on 8-February-1989. * Jack Dongarra, Argonne National Laboratory. * Iain Duff, AERE Harwell. * Jeremy Du Croz, Numerical Algorithms Group Ltd. * Sven Hammarling, Numerical Algorithms Group Ltd. * * * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC MAX * .. Local Scalars .. LOGICAL LSIDE, NOUNIT, UPPER INTEGER I, INFO, J, K, NROWA DOUBLE PRECISION TEMP * .. Parameters .. DOUBLE PRECISION ONE , ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. Executable Statements .. * * Test the input parameters. * LSIDE = GAL_LSAME( SIDE , 'L' ) IF( LSIDE )THEN NROWA = M ELSE NROWA = N END IF NOUNIT = GAL_LSAME( DIAG , 'N' ) UPPER = GAL_LSAME( UPLO , 'U' ) * INFO = 0 IF( ( .NOT.LSIDE ).AND. $ ( .NOT.GAL_LSAME( SIDE , 'R' ) ) )THEN INFO = 1 ELSE IF( ( .NOT.UPPER ).AND. $ ( .NOT.GAL_LSAME( UPLO , 'L' ) ) )THEN INFO = 2 ELSE IF( ( .NOT.GAL_LSAME( TRANSA, 'N' ) ).AND. $ ( .NOT.GAL_LSAME( TRANSA, 'T' ) ).AND. $ ( .NOT.GAL_LSAME( TRANSA, 'C' ) ) )THEN INFO = 3 ELSE IF( ( .NOT.GAL_LSAME( DIAG , 'U' ) ).AND. $ ( .NOT.GAL_LSAME( DIAG , 'N' ) ) )THEN INFO = 4 ELSE IF( M .LT.0 )THEN INFO = 5 ELSE IF( N .LT.0 )THEN INFO = 6 ELSE IF( LDA.LT.MAX( 1, NROWA ) )THEN INFO = 9 ELSE IF( LDB.LT.MAX( 1, M ) )THEN INFO = 11 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DTRSM ', INFO ) RETURN END IF * * Quick return if possible. * IF( N.EQ.0 ) $ RETURN * * And when alpha.eq.zero. * IF( ALPHA.EQ.ZERO )THEN DO 20, J = 1, N DO 10, I = 1, M B( I, J ) = ZERO 10 CONTINUE 20 CONTINUE RETURN END IF * * Start the operations. * IF( LSIDE )THEN IF( GAL_LSAME( TRANSA, 'N' ) )THEN * * Form B := alpha*inv( A )*B. * IF( UPPER )THEN DO 60, J = 1, N IF( ALPHA.NE.ONE )THEN DO 30, I = 1, M B( I, J ) = ALPHA*B( I, J ) 30 CONTINUE END IF DO 50, K = M, 1, -1 IF( B( K, J ).NE.ZERO )THEN IF( NOUNIT ) $ B( K, J ) = B( K, J )/A( K, K ) DO 40, I = 1, K - 1 B( I, J ) = B( I, J ) - B( K, J )*A( I, K ) 40 CONTINUE END IF 50 CONTINUE 60 CONTINUE ELSE DO 100, J = 1, N IF( ALPHA.NE.ONE )THEN DO 70, I = 1, M B( I, J ) = ALPHA*B( I, J ) 70 CONTINUE END IF DO 90 K = 1, M IF( B( K, J ).NE.ZERO )THEN IF( NOUNIT ) $ B( K, J ) = B( K, J )/A( K, K ) DO 80, I = K + 1, M B( I, J ) = B( I, J ) - B( K, J )*A( I, K ) 80 CONTINUE END IF 90 CONTINUE 100 CONTINUE END IF ELSE * * Form B := alpha*inv( A' )*B. * IF( UPPER )THEN DO 130, J = 1, N DO 120, I = 1, M TEMP = ALPHA*B( I, J ) DO 110, K = 1, I - 1 TEMP = TEMP - A( K, I )*B( K, J ) 110 CONTINUE IF( NOUNIT ) $ TEMP = TEMP/A( I, I ) B( I, J ) = TEMP 120 CONTINUE 130 CONTINUE ELSE DO 160, J = 1, N DO 150, I = M, 1, -1 TEMP = ALPHA*B( I, J ) DO 140, K = I + 1, M TEMP = TEMP - A( K, I )*B( K, J ) 140 CONTINUE IF( NOUNIT ) $ TEMP = TEMP/A( I, I ) B( I, J ) = TEMP 150 CONTINUE 160 CONTINUE END IF END IF ELSE IF( GAL_LSAME( TRANSA, 'N' ) )THEN * * Form B := alpha*B*inv( A ). * IF( UPPER )THEN DO 210, J = 1, N IF( ALPHA.NE.ONE )THEN DO 170, I = 1, M B( I, J ) = ALPHA*B( I, J ) 170 CONTINUE END IF DO 190, K = 1, J - 1 IF( A( K, J ).NE.ZERO )THEN DO 180, I = 1, M B( I, J ) = B( I, J ) - A( K, J )*B( I, K ) 180 CONTINUE END IF 190 CONTINUE IF( NOUNIT )THEN TEMP = ONE/A( J, J ) DO 200, I = 1, M B( I, J ) = TEMP*B( I, J ) 200 CONTINUE END IF 210 CONTINUE ELSE DO 260, J = N, 1, -1 IF( ALPHA.NE.ONE )THEN DO 220, I = 1, M B( I, J ) = ALPHA*B( I, J ) 220 CONTINUE END IF DO 240, K = J + 1, N IF( A( K, J ).NE.ZERO )THEN DO 230, I = 1, M B( I, J ) = B( I, J ) - A( K, J )*B( I, K ) 230 CONTINUE END IF 240 CONTINUE IF( NOUNIT )THEN TEMP = ONE/A( J, J ) DO 250, I = 1, M B( I, J ) = TEMP*B( I, J ) 250 CONTINUE END IF 260 CONTINUE END IF ELSE * * Form B := alpha*B*inv( A' ). * IF( UPPER )THEN DO 310, K = N, 1, -1 IF( NOUNIT )THEN TEMP = ONE/A( K, K ) DO 270, I = 1, M B( I, K ) = TEMP*B( I, K ) 270 CONTINUE END IF DO 290, J = 1, K - 1 IF( A( J, K ).NE.ZERO )THEN TEMP = A( J, K ) DO 280, I = 1, M B( I, J ) = B( I, J ) - TEMP*B( I, K ) 280 CONTINUE END IF 290 CONTINUE IF( ALPHA.NE.ONE )THEN DO 300, I = 1, M B( I, K ) = ALPHA*B( I, K ) 300 CONTINUE END IF 310 CONTINUE ELSE DO 360, K = 1, N IF( NOUNIT )THEN TEMP = ONE/A( K, K ) DO 320, I = 1, M B( I, K ) = TEMP*B( I, K ) 320 CONTINUE END IF DO 340, J = K + 1, N IF( A( J, K ).NE.ZERO )THEN TEMP = A( J, K ) DO 330, I = 1, M B( I, J ) = B( I, J ) - TEMP*B( I, K ) 330 CONTINUE END IF 340 CONTINUE IF( ALPHA.NE.ONE )THEN DO 350, I = 1, M B( I, K ) = ALPHA*B( I, K ) 350 CONTINUE END IF 360 CONTINUE END IF END IF END IF * RETURN * * End of GAL_DTRSM . * END SUBROUTINE GAL_DTRSV ( UPLO, TRANS, DIAG, N, A, LDA, X, INCX ) * .. Scalar Arguments .. INTEGER INCX, LDA, N CHARACTER*1 DIAG, TRANS, UPLO * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), X( * ) * .. * * Purpose * ======= * * GAL_DTRSV solves one of the systems of equations * * A*x = b, or A'*x = b, * * where b and x are n element vectors and A is an n by n unit, or * non-unit, upper or lower triangular matrix. * * No test for singularity or near-singularity is included in this * routine. Such tests must be performed before calling this routine. * * Parameters * ========== * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the matrix is an upper or * lower triangular matrix as follows: * * UPLO = 'U' or 'u' A is an upper triangular matrix. * * UPLO = 'L' or 'l' A is a lower triangular matrix. * * Unchanged on exit. * * TRANS - CHARACTER*1. * On entry, TRANS specifies the equations to be solved as * follows: * * TRANS = 'N' or 'n' A*x = b. * * TRANS = 'T' or 't' A'*x = b. * * TRANS = 'C' or 'c' A'*x = b. * * Unchanged on exit. * * DIAG - CHARACTER*1. * On entry, DIAG specifies whether or not A is unit * triangular as follows: * * DIAG = 'U' or 'u' A is assumed to be unit triangular. * * DIAG = 'N' or 'n' A is not assumed to be unit * triangular. * * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the order of the matrix A. * N must be at least zero. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). * Before entry with UPLO = 'U' or 'u', the leading n by n * upper triangular part of the array A must contain the upper * triangular matrix and the strictly lower triangular part of * A is not referenced. * Before entry with UPLO = 'L' or 'l', the leading n by n * lower triangular part of the array A must contain the lower * triangular matrix and the strictly upper triangular part of * A is not referenced. * Note that when DIAG = 'U' or 'u', the diagonal elements of * A are not referenced either, but are assumed to be unity. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. LDA must be at least * max( 1, n ). * Unchanged on exit. * * X - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCX ) ). * Before entry, the incremented array X must contain the n * element right-hand side vector b. On exit, X is overwritten * with the solution vector x. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. Local Scalars .. DOUBLE PRECISION TEMP INTEGER I, INFO, IX, J, JX, KX LOGICAL NOUNIT * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC MAX * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF ( .NOT.GAL_LSAME( UPLO , 'U' ).AND. $ .NOT.GAL_LSAME( UPLO , 'L' ) )THEN INFO = 1 ELSE IF( .NOT.GAL_LSAME( TRANS, 'N' ).AND. $ .NOT.GAL_LSAME( TRANS, 'T' ).AND. $ .NOT.GAL_LSAME( TRANS, 'C' ) )THEN INFO = 2 ELSE IF( .NOT.GAL_LSAME( DIAG , 'U' ).AND. $ .NOT.GAL_LSAME( DIAG , 'N' ) )THEN INFO = 3 ELSE IF( N.LT.0 )THEN INFO = 4 ELSE IF( LDA.LT.MAX( 1, N ) )THEN INFO = 6 ELSE IF( INCX.EQ.0 )THEN INFO = 8 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_DTRSV ', INFO ) RETURN END IF * * Quick return if possible. * IF( N.EQ.0 ) $ RETURN * NOUNIT = GAL_LSAME( DIAG, 'N' ) * * Set up the start point in X if the increment is not unity. This * will be ( N - 1 )*INCX too small for descending loops. * IF( INCX.LE.0 )THEN KX = 1 - ( N - 1 )*INCX ELSE IF( INCX.NE.1 )THEN KX = 1 END IF * * Start the operations. In this version the elements of A are * accessed sequentially with one pass through A. * IF( GAL_LSAME( TRANS, 'N' ) )THEN * * Form x := inv( A )*x. * IF( GAL_LSAME( UPLO, 'U' ) )THEN IF( INCX.EQ.1 )THEN DO 20, J = N, 1, -1 IF( X( J ).NE.ZERO )THEN IF( NOUNIT ) $ X( J ) = X( J )/A( J, J ) TEMP = X( J ) DO 10, I = J - 1, 1, -1 X( I ) = X( I ) - TEMP*A( I, J ) 10 CONTINUE END IF 20 CONTINUE ELSE JX = KX + ( N - 1 )*INCX DO 40, J = N, 1, -1 IF( X( JX ).NE.ZERO )THEN IF( NOUNIT ) $ X( JX ) = X( JX )/A( J, J ) TEMP = X( JX ) IX = JX DO 30, I = J - 1, 1, -1 IX = IX - INCX X( IX ) = X( IX ) - TEMP*A( I, J ) 30 CONTINUE END IF JX = JX - INCX 40 CONTINUE END IF ELSE IF( INCX.EQ.1 )THEN DO 60, J = 1, N IF( X( J ).NE.ZERO )THEN IF( NOUNIT ) $ X( J ) = X( J )/A( J, J ) TEMP = X( J ) DO 50, I = J + 1, N X( I ) = X( I ) - TEMP*A( I, J ) 50 CONTINUE END IF 60 CONTINUE ELSE JX = KX DO 80, J = 1, N IF( X( JX ).NE.ZERO )THEN IF( NOUNIT ) $ X( JX ) = X( JX )/A( J, J ) TEMP = X( JX ) IX = JX DO 70, I = J + 1, N IX = IX + INCX X( IX ) = X( IX ) - TEMP*A( I, J ) 70 CONTINUE END IF JX = JX + INCX 80 CONTINUE END IF END IF ELSE * * Form x := inv( A' )*x. * IF( GAL_LSAME( UPLO, 'U' ) )THEN IF( INCX.EQ.1 )THEN DO 100, J = 1, N TEMP = X( J ) DO 90, I = 1, J - 1 TEMP = TEMP - A( I, J )*X( I ) 90 CONTINUE IF( NOUNIT ) $ TEMP = TEMP/A( J, J ) X( J ) = TEMP 100 CONTINUE ELSE JX = KX DO 120, J = 1, N TEMP = X( JX ) IX = KX DO 110, I = 1, J - 1 TEMP = TEMP - A( I, J )*X( IX ) IX = IX + INCX 110 CONTINUE IF( NOUNIT ) $ TEMP = TEMP/A( J, J ) X( JX ) = TEMP JX = JX + INCX 120 CONTINUE END IF ELSE IF( INCX.EQ.1 )THEN DO 140, J = N, 1, -1 TEMP = X( J ) DO 130, I = N, J + 1, -1 TEMP = TEMP - A( I, J )*X( I ) 130 CONTINUE IF( NOUNIT ) $ TEMP = TEMP/A( J, J ) X( J ) = TEMP 140 CONTINUE ELSE KX = KX + ( N - 1 )*INCX JX = KX DO 160, J = N, 1, -1 TEMP = X( JX ) IX = KX DO 150, I = N, J + 1, -1 TEMP = TEMP - A( I, J )*X( IX ) IX = IX - INCX 150 CONTINUE IF( NOUNIT ) $ TEMP = TEMP/A( J, J ) X( JX ) = TEMP JX = JX - INCX 160 CONTINUE END IF END IF END IF * RETURN * * End of GAL_DTRSV . * END double precision function gal_dzasum(n,zx,incx) c c takes the sum of the absolute values. c jack dongarra, 3/11/78. c modified to correct problem with negative increment, 8/21/90. c double complex zx(1) double precision stemp,gal_dcabs1 integer i,incx,ix,n c gal_dzasum = 0.0d0 stemp = 0.0d0 if(n.le.0)return if(incx.eq.1)go to 20 c c code for increment not equal to 1 c ix = 1 if(incx.lt.0)ix = (-n+1)*incx + 1 do 10 i = 1,n stemp = stemp + gal_dcabs1(zx(ix)) ix = ix + incx 10 continue gal_dzasum = stemp return c c code for increment equal to 1 c 20 do 30 i = 1,n stemp = stemp + gal_dcabs1(zx(i)) 30 continue gal_dzasum = stemp return end double precision function gal_dznrm2( n, zx, incx) logical imag, scale integer i, incx, ix, n, next double precision cutlo, cuthi, hitest, sum, xmax, absx, zero, one double complex zx(1) double precision dreal,dimag double complex zdumr,zdumi dreal(zdumr) = zdumr dimag(zdumi) = (0.0d0,-1.0d0)*zdumi data zero, one /0.0d0, 1.0d0/ c c unitary norm of the complex n-vector stored in zx() with storage c increment incx . c if n .le. 0 return with result = 0. c if n .ge. 1 then incx must be .ge. 1 c c c.l.lawson , 1978 jan 08 c modified to correct problem with negative increment, 8/21/90. c c four phase method using two built-in constants that are c hopefully applicable to all machines. c cutlo = maximum of sqrt(u/eps) over all known machines. c cuthi = minimum of sqrt(v) over all known machines. c where c eps = smallest no. such that eps + 1. .gt. 1. c u = smallest positive no. (underflow limit) c v = largest no. (overflow limit) c c brief outline of algorithm.. c c phase 1 scans zero components. c move to phase 2 when a component is nonzero and .le. cutlo c move to phase 3 when a component is .gt. cutlo c move to phase 4 when a component is .ge. cuthi/m c where m = n for x() real and m = 2*n for complex. c c values for cutlo and cuthi.. c from the environmental parameters listed in the imsl converter c document the limiting values are as follows.. c cutlo, s.p. u/eps = 2**(-102) for honeywell. close seconds are c univac and dec at 2**(-103) c thus cutlo = 2**(-51) = 4.44089e-16 c cuthi, s.p. v = 2**127 for univac, honeywell, and dec. c thus cuthi = 2**(63.5) = 1.30438e19 c cutlo, d.p. u/eps = 2**(-67) for honeywell and dec. c thus cutlo = 2**(-33.5) = 8.23181d-11 c cuthi, d.p. same as s.p. cuthi = 1.30438d19 c data cutlo, cuthi / 8.232d-11, 1.304d19 / c data cutlo, cuthi / 4.441e-16, 1.304e19 / data cutlo, cuthi / 8.232d-11, 1.304d19 / c if(n .gt. 0) go to 10 gal_dznrm2 = zero go to 300 c 10 assign 30 to next sum = zero i = 1 if( incx .lt. 0 )i = (-n+1)*incx + 1 c begin main loop do 220 ix = 1,n absx = dabs(dreal(zx(i))) imag = .false. go to next,(30, 50, 70, 90, 110) 30 if( absx .gt. cutlo) go to 85 assign 50 to next scale = .false. c c phase 1. sum is zero c 50 if( absx .eq. zero) go to 200 if( absx .gt. cutlo) go to 85 c c prepare for phase 2. assign 70 to next go to 105 c c prepare for phase 4. c 100 assign 110 to next sum = (sum / absx) / absx 105 scale = .true. xmax = absx go to 115 c c phase 2. sum is small. c scale to avoid destructive underflow. c 70 if( absx .gt. cutlo ) go to 75 c c common code for phases 2 and 4. c in phase 4 sum is large. scale to avoid overflow. c 110 if( absx .le. xmax ) go to 115 sum = one + sum * (xmax / absx)**2 xmax = absx go to 200 c 115 sum = sum + (absx/xmax)**2 go to 200 c c c prepare for phase 3. c 75 sum = (sum * xmax) * xmax c 85 assign 90 to next scale = .false. c c for real or d.p. set hitest = cuthi/n c for complex set hitest = cuthi/(2*n) c hitest = cuthi/dble( 2*n ) c c phase 3. sum is mid-range. no scaling. c 90 if(absx .ge. hitest) go to 100 sum = sum + absx**2 200 continue c control selection of real and imaginary parts. c if(imag) go to 210 absx = dabs(dimag(zx(i))) imag = .true. go to next,( 50, 70, 90, 110 ) c 210 continue i = i + incx 220 continue c c end of main loop. c compute square root and adjust for scaling. c gal_dznrm2 = dsqrt(sum) if(scale) gal_dznrm2 = gal_dznrm2 * xmax 300 continue return end integer function gal_idamax(n,dx,incx) c c finds the index of element having max. absolute value. c jack dongarra, linpack, 3/11/78. c modified to correct problem with negative increment, 8/21/90. c double precision dx(1),dmax integer i,incx,ix,n c gal_idamax = 0 if( n .lt. 1 ) return gal_idamax = 1 if(n.eq.1)return if(incx.eq.1)go to 20 c c code for increment not equal to 1 c ix = 1 if(incx.lt.0)ix = (-n+1)*incx + 1 dmax = dabs(dx(ix)) ix = ix + incx do 10 i = 2,n if(dabs(dx(ix)).le.dmax) go to 5 gal_idamax = i dmax = dabs(dx(ix)) 5 ix = ix + incx 10 continue return c c code for increment equal to 1 c 20 dmax = dabs(dx(1)) do 30 i = 2,n if(dabs(dx(i)).le.dmax) go to 30 gal_idamax = i dmax = dabs(dx(i)) 30 continue return end ga-5-3/LinAlg/lapack+blas/dgetrs.f0000640005473000001440000001034711643111243015552 0ustar d3n000users SUBROUTINE GAL_DGETRS( TRANS, N, NRHS, A, LDA, IPIV, B, LDB, $ INFO ) * * -- LAPACK routine (version 1.1) -- * Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., * Courant Institute, Argonne National Lab, and Rice University * March 31, 1993 * * .. Scalar Arguments .. CHARACTER TRANS INTEGER INFO, LDA, LDB, N, NRHS * .. * .. Array Arguments .. INTEGER IPIV( * ) DOUBLE PRECISION A( LDA, * ), B( LDB, * ) * .. * * Purpose * ======= * * GAL_DGETRS solves a system of linear equations * A * X = B or A' * X = B * with a general N-by-N matrix A using the LU factorization computed * by GAL_DGETRF. * * Arguments * ========= * * TRANS (input) CHARACTER*1 * Specifies the form of the system of equations: * = 'N': A * X = B (No transpose) * = 'T': A'* X = B (Transpose) * = 'C': A'* X = B (Conjugate transpose = Transpose) * * N (input) INTEGER * The order of the matrix A. N >= 0. * * NRHS (input) INTEGER * The number of right hand sides, i.e., the number of columns * of the matrix B. NRHS >= 0. * * A (input) DOUBLE PRECISION array, dimension (LDA,N) * The factors L and U from the factorization A = P*L*U * as computed by GAL_DGETRF. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,N). * * IPIV (input) INTEGER array, dimension (N) * The pivot indices from GAL_DGETRF; for 1<=i<=N, row i of the * matrix was interchanged with row IPIV(i). * * B (input/output) DOUBLE PRECISION array, dimension (LDB,NRHS) * On entry, the right hand side matrix B. * On exit, the solution matrix X. * * LDB (input) INTEGER * The leading dimension of the array B. LDB >= max(1,N). * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE PARAMETER ( ONE = 1.0D+0 ) * .. * .. Local Scalars .. LOGICAL NOTRAN * .. * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. * .. External Subroutines .. EXTERNAL GAL_DLASWP, GAL_DTRSM, GAL_XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 NOTRAN = GAL_LSAME( TRANS, 'N' ) IF( .NOT.NOTRAN .AND. .NOT.GAL_LSAME( TRANS, 'T' ) .AND. .NOT. $ GAL_LSAME( TRANS, 'C' ) ) THEN INFO = -1 ELSE IF( N.LT.0 ) THEN INFO = -2 ELSE IF( NRHS.LT.0 ) THEN INFO = -3 ELSE IF( LDA.LT.MAX( 1, N ) ) THEN INFO = -5 ELSE IF( LDB.LT.MAX( 1, N ) ) THEN INFO = -8 END IF IF( INFO.NE.0 ) THEN CALL GAL_XERBLA( 'GAL_DGETRS', -INFO ) RETURN END IF * * Quick return if possible * IF( N.EQ.0 .OR. NRHS.EQ.0 ) $ RETURN * IF( NOTRAN ) THEN * * Solve A * X = B. * * Apply row interchanges to the right hand sides. * CALL GAL_DLASWP( NRHS, B, LDB, 1, N, IPIV, 1 ) * * Solve L*X = B, overwriting B with X. * CALL GAL_DTRSM( 'Left', 'Lower', 'No transpose', 'Unit', N, $ NRHS, ONE, A, LDA, B, LDB ) * * Solve U*X = B, overwriting B with X. * CALL GAL_DTRSM( 'Left', 'Upper', 'No transpose', 'Non-unit', N, $ NRHS, ONE, A, LDA, B, LDB ) ELSE * * Solve A' * X = B. * * Solve U'*X = B, overwriting B with X. * CALL GAL_DTRSM( 'Left', 'Upper', 'Transpose', 'Non-unit', N, $ NRHS, ONE, A, LDA, B, LDB ) * * Solve L'*X = B, overwriting B with X. * CALL GAL_DTRSM( 'Left', 'Lower', 'Transpose', 'Unit', N, NRHS, $ ONE, A, LDA, B, LDB ) * * Apply row interchanges to the solution vectors. * CALL GAL_DLASWP( NRHS, B, LDB, 1, N, IPIV, -1 ) END IF * RETURN * * End of GAL_DGETRS * END ga-5-3/LinAlg/lapack+blas/dgetrf.f0000640005473000001440000001151711672215522015544 0ustar d3n000users SUBROUTINE GAL_DGETRF( M, N, A, LDA, IPIV, INFO ) * * -- LAPACK routine (version 1.1) -- * Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., * Courant Institute, Argonne National Lab, and Rice University * March 31, 1993 * * .. Scalar Arguments .. INTEGER INFO, LDA, M, N * .. * .. Array Arguments .. INTEGER IPIV( * ) DOUBLE PRECISION A( LDA, * ) * .. * * Purpose * ======= * * GAL_DGETRF computes an LU factorization of a general M-by-N matrix A * using partial pivoting with row interchanges. * * The factorization has the form * A = P * L * U * where P is a permutation matrix, L is lower triangular with unit * diagonal elements (lower trapezoidal if m > n), and U is upper * triangular (upper trapezoidal if m < n). * * This is the right-looking Level 3 BLAS version of the algorithm. * * Arguments * ========= * * M (input) INTEGER * The number of rows of the matrix A. M >= 0. * * N (input) INTEGER * The number of columns of the matrix A. N >= 0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On entry, the M-by-N matrix to be factored. * On exit, the factors L and U from the factorization * A = P*L*U; the unit diagonal elements of L are not stored. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,M). * * IPIV (output) INTEGER array, dimension (min(M,N)) * The pivot indices; for 1 <= i <= min(M,N), row i of the * matrix was interchanged with row IPIV(i). * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value * > 0: if INFO = i, U(i,i) is exactly zero. The factorization * has been completed, but the factor U is exactly * singular, and division by zero will occur if it is used * to solve a system of equations. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE PARAMETER ( ONE = 1.0D+0 ) * .. * .. Local Scalars .. INTEGER I, IINFO, J, JB, NB * .. * .. External Subroutines .. EXTERNAL GAL_DGEMM, GAL_DGETF2, GAL_DLASWP EXTERNAL GAL_DTRSM, GAL_XERBLA * .. * .. External Functions .. INTEGER GAL_ILAENV EXTERNAL GAL_ILAENV * .. * .. Intrinsic Functions .. INTRINSIC MAX, MIN * .. * .. Executable Statements .. * * Test the input parameters. * * call flush() INFO = 0 IF( M.LT.0 ) THEN INFO = -1 ELSE IF( N.LT.0 ) THEN INFO = -2 ELSE IF( LDA.LT.MAX( 1, M ) ) THEN INFO = -4 END IF IF( INFO.NE.0 ) THEN CALL GAL_XERBLA( 'GAL_DGETRF', -INFO ) RETURN END IF * * Quick return if possible * IF( M.EQ.0 .OR. N.EQ.0 ) $ RETURN * * Determine the block size for this environment. * NB = GAL_ILAENV( 1, 'GAL_DGETRF', ' ', M, N, -1, -1 ) IF( NB.LE.1 .OR. NB.GE.MIN( M, N ) ) THEN * * Use unblocked code. * CALL GAL_DGETF2( M, N, A, LDA, IPIV, INFO ) ELSE * * Use blocked code. * DO 20 J = 1, MIN( M, N ), NB JB = MIN( MIN( M, N )-J+1, NB ) * * Factor diagonal and subdiagonal blocks and test for exact * singularity. * CALL GAL_DGETF2( M-J+1, JB, A( J, J ), LDA, IPIV( J ), $ IINFO ) * * Adjust INFO and the pivot indices. * IF( INFO.EQ.0 .AND. IINFO.GT.0 ) $ INFO = IINFO + J - 1 DO 10 I = J, MIN( M, J+JB-1 ) IPIV( I ) = J - 1 + IPIV( I ) 10 CONTINUE * * Apply interchanges to columns 1:J-1. * CALL GAL_DLASWP( J-1, A, LDA, J, J+JB-1, IPIV, 1 ) * IF( J+JB.LE.N ) THEN * * Apply interchanges to columns J+JB:N. * CALL GAL_DLASWP( N-J-JB+1, A( 1, J+JB ), LDA, J, J+JB-1, $ IPIV, 1 ) * * Compute block row of U. * CALL GAL_DTRSM( 'Left', 'Lower', 'No transpose', 'Unit', $ JB, $ N-J-JB+1, ONE, A( J, J ), LDA, A( J, J+JB ), $ LDA ) IF( J+JB.LE.M ) THEN * * Update trailing submatrix. * CALL GAL_DGEMM( 'No transpose', 'No transpose', $ M-J-JB+1, $ N-J-JB+1, JB, -ONE, A( J+JB, J ), LDA, $ A( J, J+JB ), LDA, ONE, A( J+JB, J+JB ), $ LDA ) END IF END IF 20 CONTINUE END IF RETURN * * End of GAL_DGETRF * END ga-5-3/LinAlg/lapack+blas/dgetf2.f0000640005473000001440000000743611643111243015442 0ustar d3n000users SUBROUTINE GAL_DGETF2( M, N, A, LDA, IPIV, INFO ) * * -- LAPACK routine (version 1.1) -- * Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., * Courant Institute, Argonne National Lab, and Rice University * June 30, 1992 * * .. Scalar Arguments .. INTEGER INFO, LDA, M, N * .. * .. Array Arguments .. INTEGER IPIV( * ) DOUBLE PRECISION A( LDA, * ) * .. * * Purpose * ======= * * GAL_DGETF2 computes an LU factorization of a general m-by-n matrix A * using partial pivoting with row interchanges. * * The factorization has the form * A = P * L * U * where P is a permutation matrix, L is lower triangular with unit * diagonal elements (lower trapezoidal if m > n), and U is upper * triangular (upper trapezoidal if m < n). * * This is the right-looking Level 2 BLAS version of the algorithm. * * Arguments * ========= * * M (input) INTEGER * The number of rows of the matrix A. M >= 0. * * N (input) INTEGER * The number of columns of the matrix A. N >= 0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On entry, the m by n matrix to be factored. * On exit, the factors L and U from the factorization * A = P*L*U; the unit diagonal elements of L are not stored. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,M). * * IPIV (output) INTEGER array, dimension (min(M,N)) * The pivot indices; for 1 <= i <= min(M,N), row i of the * matrix was interchanged with row IPIV(i). * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -k, the k-th argument had an illegal value * > 0: if INFO = k, U(k,k) is exactly zero. The factorization * has been completed, but the factor U is exactly * singular, and division by zero will occur if it is used * to solve a system of equations. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE, ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. Local Scalars .. INTEGER J, JP * .. * .. External Functions .. INTEGER GAL_IDAMAX EXTERNAL GAL_IDAMAX * .. * .. External Subroutines .. EXTERNAL GAL_DGER, GAL_DSCAL, GAL_DSWAP, GAL_XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX, MIN * .. * .. Executable Statements .. * * Test the input parameters. * INFO = 0 IF( M.LT.0 ) THEN INFO = -1 ELSE IF( N.LT.0 ) THEN INFO = -2 ELSE IF( LDA.LT.MAX( 1, M ) ) THEN INFO = -4 END IF IF( INFO.NE.0 ) THEN CALL GAL_XERBLA( 'GAL_DGETF2', -INFO ) RETURN END IF * * Quick return if possible * IF( M.EQ.0 .OR. N.EQ.0 ) $ RETURN * DO 10 J = 1, MIN( M, N ) * * Find pivot and test for singularity. * JP = J - 1 + GAL_IDAMAX( M-J+1, A( J, J ), 1 ) IPIV( J ) = JP IF( A( JP, J ).NE.ZERO ) THEN * * Apply the interchange to columns 1:N. * IF( JP.NE.J ) $ CALL GAL_DSWAP( N, A( J, 1 ), LDA, A( JP, 1 ), LDA ) * * Compute elements J+1:M of J-th column. * IF( J.LT.M ) $ CALL GAL_DSCAL( M-J, ONE / A( J, J ), A( J+1, J ), 1 ) * ELSE IF( INFO.EQ.0 ) THEN * INFO = J END IF * IF( J.LT.MIN( M, N ) ) THEN * * Update trailing submatrix. * CALL GAL_DGER( M-J, N-J, -ONE, A( J+1, J ), 1, A( J, J+1 ), $ LDA, A( J+1, J+1 ), LDA ) END IF 10 CONTINUE RETURN * * End of GAL_DGETF2 * END ga-5-3/LinAlg/lapack+blas/lsame.f0000640005473000001440000000456411633440402015370 0ustar d3n000users LOGICAL FUNCTION GAL_LSAME( CA, CB ) * * -- LAPACK auxiliary routine (version 1.0) -- * Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., * Courant Institute, Argonne National Lab, and Rice University * February 29, 1992 * * .. Scalar Arguments .. CHARACTER CA, CB * .. * * Purpose * ======= * * GAL_LSAME returns .TRUE. if CA is the same letter as CB regardless of * case. * * Arguments * ========= * * CA (input) CHARACTER*1 * CB (input) CHARACTER*1 * CA and CB specify the single characters to be compared. * * .. Intrinsic Functions .. INTRINSIC ICHAR * .. * .. Local Scalars .. INTEGER INTA, INTB, ZCODE * .. * .. Executable Statements .. * * Test if the characters are equal * GAL_LSAME = CA.EQ.CB IF( GAL_LSAME ) $ RETURN * * Now test for equivalence if both characters are alphabetic. * ZCODE = ICHAR( 'Z' ) * * Use 'Z' rather than 'A' so that ASCII can be detected on Prime * machines, on which ICHAR returns a value with bit 8 set. * ICHAR('A') on Prime machines returns 193 which is the same as * ICHAR('A') on an EBCDIC machine. * INTA = ICHAR( CA ) INTB = ICHAR( CB ) * IF( ZCODE.EQ.90 .OR. ZCODE.EQ.122 ) THEN * * ASCII is assumed - ZCODE is the ASCII code of either lower or * upper case 'Z'. * IF( INTA.GE.97 .AND. INTA.LE.122 ) INTA = INTA - 32 IF( INTB.GE.97 .AND. INTB.LE.122 ) INTB = INTB - 32 * ELSE IF( ZCODE.EQ.233 .OR. ZCODE.EQ.169 ) THEN * * EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or * upper case 'Z'. * IF( INTA.GE.129 .AND. INTA.LE.137 .OR. $ INTA.GE.145 .AND. INTA.LE.153 .OR. $ INTA.GE.162 .AND. INTA.LE.169 ) INTA = INTA + 64 IF( INTB.GE.129 .AND. INTB.LE.137 .OR. $ INTB.GE.145 .AND. INTB.LE.153 .OR. $ INTB.GE.162 .AND. INTB.LE.169 ) INTB = INTB + 64 * ELSE IF( ZCODE.EQ.218 .OR. ZCODE.EQ.250 ) THEN * * ASCII is assumed, on Prime machines - ZCODE is the ASCII code * plus 128 of either lower or upper case 'Z'. * IF( INTA.GE.225 .AND. INTA.LE.250 ) INTA = INTA - 32 IF( INTB.GE.225 .AND. INTB.LE.250 ) INTB = INTB - 32 END IF GAL_LSAME = INTA.EQ.INTB * * RETURN * * End of GAL_LSAME * END ga-5-3/LinAlg/lapack+blas/galinalg.h0000640005473000001440000002677011643111243016051 0ustar d3n000users#ifndef GALINALG_H_ #define GALINALG_H_ #define sgemm_ F77_FUNC(sgemm, SGEMM) #define dgemm_ F77_FUNC(dgemm, DGEMM) #define zgemm_ F77_FUNC(zgemm, ZGEMM) #define cgemm_ F77_FUNC(cgemm, CGEMM) #define dgetrf_ F77_FUNC(dgetrf,DGETRF) #define dgetrs_ F77_FUNC(dgetrs,DGETRS) #define dtrsm_ F77_FUNC(dtrsm, DTRSM) #define gal_sgemm_ F77_FUNC_(gal_sgemm, GAL_SGEMM) #define gal_dgemm_ F77_FUNC_(gal_dgemm, GAL_DGEMM) #define gal_zgemm_ F77_FUNC_(gal_zgemm, GAL_ZGEMM) #define gal_cgemm_ F77_FUNC_(gal_cgemm, GAL_CGEMM) #define gal_dgetrf_ F77_FUNC_(gal_dgetrf,GAL_DGETRF) #define gal_dgetrs_ F77_FUNC_(gal_dgetrs,GAL_DGETRS) #define gal_dtrsm_ F77_FUNC_(gal_dtrsm, GAL_DTRSM) #if HAVE_BLAS || ENABLE_F77 # if BLAS_SIZE == SIZEOF_SHORT # define BlasInt short # elif BLAS_SIZE == SIZEOF_INT # define BlasInt int # elif BLAS_SIZE == SIZEOF_LONG # define BlasInt long # elif BLAS_SIZE == SIZEOF_LONG_LONG # define BlasInt long long # endif #else # define BlasInt int #endif #if HAVE_BLAS # if defined(F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS) extern void sgemm_(char *TRANSA, char *TRANSB, BlasInt *M, BlasInt *N, BlasInt *K, Real *ALPHA, Real *A, BlasInt *LDA, Real *B, BlasInt *LDB, Real *BETA, Real *C, BlasInt *LDC, int alen, int blen); extern void dgemm_(char *TRANSA, char *TRANSB, BlasInt *M, BlasInt *N, BlasInt *K, DoublePrecision *ALPHA, DoublePrecision *A, BlasInt *LDA, DoublePrecision *B, BlasInt *LDB, DoublePrecision *BETA, DoublePrecision *C, BlasInt *LDC, int alen, int blen); extern void zgemm_(char *TRANSA, char *TRANSB, BlasInt *M, BlasInt *N, BlasInt *K, DoubleComplex *ALPHA, DoubleComplex *A, BlasInt *LDA, DoubleComplex *B, BlasInt *LDB, DoubleComplex *BETA, DoubleComplex *C, BlasInt *LDC, int alen, int blen); extern void cgemm_(char *TRANSA, char *TRANSB, BlasInt *M, BlasInt *N, BlasInt *K, SingleComplex *ALPHA, SingleComplex *A, BlasInt *LDA, SingleComplex *B, BlasInt *LDB, SingleComplex *BETA, SingleComplex *C, BlasInt *LDC, int alen, int blen); # else extern void sgemm_(char *TRANSA, int alen, char *TRANSB, int blen, BlasInt *M, BlasInt *N, BlasInt *K, Real *ALPHA, Real *A, BlasInt *LDA, Real *B, BlasInt *LDB, Real *BETA, Real *C, BlasInt *LDC); extern void dgemm_(char *TRANSA, int alen, char *TRANSB, int blen, BlasInt *M, BlasInt *N, BlasInt *K, DoublePrecision *ALPHA, DoublePrecision *A, BlasInt *LDA, DoublePrecision *B, BlasInt *LDB, DoublePrecision *BETA, DoublePrecision *C, BlasInt *LDC); extern void zgemm_(char *TRANSA, int alen, char *TRANSB, int blen, BlasInt *M, BlasInt *N, BlasInt *K, DoubleComplex *ALPHA, DoubleComplex *A, BlasInt *LDA, DoubleComplex *B, BlasInt *LDB, DoubleComplex *BETA, DoubleComplex *C, BlasInt *LDC); extern void cgemm_(char *TRANSA, int alen, char *TRANSB, int blen, BlasInt *M, BlasInt *N, BlasInt *K, SingleComplex *ALPHA, SingleComplex *A, BlasInt *LDA, SingleComplex *B, BlasInt *LDB, SingleComplex *BETA, SingleComplex *C, BlasInt *LDC); # endif #elif ENABLE_F77 # if defined(F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS) extern void gal_sgemm_(char *TRANSA, char *TRANSB, BlasInt *M, BlasInt *N, BlasInt *K, Real *ALPHA, Real *A, BlasInt *LDA, Real *B, BlasInt *LDB, Real *BETA, Real *C, BlasInt *LDC, int alen, int blen); extern void gal_dgemm_(char *TRANSA, char *TRANSB, BlasInt *M, BlasInt *N, BlasInt *K, DoublePrecision *ALPHA, DoublePrecision *A, BlasInt *LDA, DoublePrecision *B, BlasInt *LDB, DoublePrecision *BETA, DoublePrecision *C, BlasInt *LDC, int alen, int blen); extern void gal_zgemm_(char *TRANSA, char *TRANSB, BlasInt *M, BlasInt *N, BlasInt *K, DoubleComplex *ALPHA, DoubleComplex *A, BlasInt *LDA, DoubleComplex *B, BlasInt *LDB, DoubleComplex *BETA, DoubleComplex *C, BlasInt *LDC, int alen, int blen); extern void gal_cgemm_(char *TRANSA, char *TRANSB, BlasInt *M, BlasInt *N, BlasInt *K, SingleComplex *ALPHA, SingleComplex *A, BlasInt *LDA, SingleComplex *B, BlasInt *LDB, SingleComplex *BETA, SingleComplex *C, BlasInt *LDC, int alen, int blen); # else extern void gal_sgemm_(char *TRANSA, int alen, char *TRANSB, int blen, BlasInt *M, BlasInt *N, BlasInt *K, Real *ALPHA, Real *A, BlasInt *LDA, Real *B, BlasInt *LDB, Real *BETA, Real *C, BlasInt *LDC); extern void gal_dgemm_(char *TRANSA, int alen, char *TRANSB, int blen, BlasInt *M, BlasInt *N, BlasInt *K, DoublePrecision *ALPHA, DoublePrecision *A, BlasInt *LDA, DoublePrecision *B, BlasInt *LDB, DoublePrecision *BETA, DoublePrecision *C, BlasInt *LDC); extern void gal_zgemm_(char *TRANSA, int alen, char *TRANSB, int blen, BlasInt *M, BlasInt *N, BlasInt *K, DoubleComplex *ALPHA, DoubleComplex *A, BlasInt *LDA, DoubleComplex *B, BlasInt *LDB, DoubleComplex *BETA, DoubleComplex *C, BlasInt *LDC); extern void gal_cgemm_(char *TRANSA, int alen, char *TRANSB, int blen, BlasInt *M, BlasInt *N, BlasInt *K, SingleComplex *ALPHA, SingleComplex *A, BlasInt *LDA, SingleComplex *B, BlasInt *LDB, SingleComplex *BETA, SingleComplex *C, BlasInt *LDC); # endif #else # include "xgemm.h" #endif /* HAVE_BLAS */ #if HAVE_LAPACK # if defined(F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS) extern void dtrsm_(char *side, char *uplo, char *transa, char *diag, BlasInt *m, BlasInt *n, DoublePrecision *alpha, DoublePrecision *a, BlasInt *lda, DoublePrecision *b, BlasInt *ldb, int, int, int, int ); extern void dgetrs_(char *trans, BlasInt *n, BlasInt *nrhs, DoublePrecision *a, Integer *lda, Integer *ipiv, DoublePrecision *b, Integer *ldb, Integer *info, int len ); # else extern void dtrsm_(char *side, int, char *uplo, int, char *transa, int, char *diag, int, BlasInt *m, BlasInt *n, DoublePrecision *alpha, DoublePrecision *a, BlasInt *lda, DoublePrecision *b, BlasInt *ldb ); extern void dgetrs_(char *trans, int len, BlasInt *n, BlasInt *nrhs, DoublePrecision *a, Integer *lda, Integer *ipiv, DoublePrecision *b, Integer *ldb, Integer *info ); # endif extern void dgetrf_( BlasInt *m, BlasInt *n, DoublePrecision *a, BlasInt *ld, BlasInt *ipiv, BlasInt *info ); #elif ENABLE_F77 # if defined(F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS) extern void gal_dtrsm_(char *side, char *uplo, char *transa, char *diag, BlasInt *m, BlasInt *n, DoublePrecision *alpha, DoublePrecision *a, BlasInt *lda, DoublePrecision *b, BlasInt *ldb, int, int, int, int ); extern void gal_dgetrs_(char *trans, BlasInt *n, BlasInt *nrhs, DoublePrecision *a, Integer *lda, Integer *ipiv, DoublePrecision *b, Integer *ldb, Integer *info, int len ); # else extern void gal_dtrsm_(char *side, int, char *uplo, int, char *transa, int, char *diag, int, BlasInt *m, BlasInt *n, DoublePrecision *alpha, DoublePrecision *a, BlasInt *lda, DoublePrecision *b, BlasInt *ldb ); extern void gal_dgetrs_(char *trans, int len, BlasInt *n, BlasInt *nrhs, DoublePrecision *a, Integer *lda, Integer *ipiv, DoublePrecision *b, Integer *ldb, Integer *info ); # endif extern void gal_dgetrf_( BlasInt *m, BlasInt *n, DoublePrecision *a, BlasInt *ld, BlasInt *ipiv, BlasInt *info ); #else #endif /* HAVE_LAPACK */ #if HAVE_BLAS # if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS # define BLAS_SGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ sgemm_(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc, 1, 1) # define BLAS_DGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ dgemm_(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc, 1, 1) # define BLAS_ZGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ zgemm_(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc, 1, 1) # define BLAS_CGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ cgemm_(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc, 1, 1) # else # define BLAS_SGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ sgemm_(ta, 1, tb, 1, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) # define BLAS_DGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ dgemm_(ta, 1, tb, 1, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) # define BLAS_ZGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ zgemm_(ta, 1, tb, 1, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) # define BLAS_CGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ cgemm_(ta, 1, tb, 1, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) # endif #elif ENABLE_F77 # if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS # define BLAS_SGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ gal_sgemm_(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc, 1, 1) # define BLAS_DGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ gal_dgemm_(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc, 1, 1) # define BLAS_ZGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ gal_zgemm_(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc, 1, 1) # define BLAS_CGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ gal_cgemm_(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc, 1, 1) # else # define BLAS_SGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ gal_sgemm_(ta, 1, tb, 1, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) # define BLAS_DGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ gal_dgemm_(ta, 1, tb, 1, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) # define BLAS_ZGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ gal_zgemm_(ta, 1, tb, 1, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) # define BLAS_CGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ gal_cgemm_(ta, 1, tb, 1, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) # endif #else # define BLAS_SGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ xb_sgemm(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) # define BLAS_DGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ xb_dgemm(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) # define BLAS_ZGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ xb_zgemm(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) # define BLAS_CGEMM(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) \ xb_cgemm(ta, tb, i, j, k, alpha, a, lda, b, ldb, beta, c, ldc) #endif #if HAVE_LAPACK # if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS # define LAPACK_DTRSM(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) \ dtrsm_(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb, 1, 1, 1, 1) # define LAPACK_DGETRS(trans, n, nrhs, a, lda, ipiv, b, ldb, info) \ dgetrs_(trans, n, nrhs, a, lda, ipiv, b, ldb, info, 1) # else # define LAPACK_DTRSM(side, 1, uplo, 1, transa, 1, diag, 1, m, n, alpha, a, lda, b, ldb) \ dtrsm_(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) # define LAPACK_DGETRS(trans, n, nrhs, a, lda, ipiv, b, ldb, info) \ dgetrs_(trans, 1, n, nrhs, a, lda, ipiv, b, ldb, info) # endif # define LAPACK_DGETRF dgetrf_ #elif ENABLE_F77 # if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS # define LAPACK_DTRSM(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) \ gal_dtrsm_(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb, 1, 1, 1, 1) # define LAPACK_DGETRS(trans, n, nrhs, a, lda, ipiv, b, ldb, info) \ gal_dgetrs_(trans, n, nrhs, a, lda, ipiv, b, ldb, info, 1) # else # define LAPACK_DTRSM(side, 1, uplo, 1, transa, 1, diag, 1, m, n, alpha, a, lda, b, ldb) \ gal_dtrsm_(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) # define LAPACK_DGETRS(trans, n, nrhs, a, lda, ipiv, b, ldb, info) \ gal_dgetrs_(trans, 1, n, nrhs, a, lda, ipiv, b, ldb, info) # endif # define LAPACK_DGETRF gal_dgetrf_ #elif NOFORT #endif #endif /* GALINALG_H_ */ ga-5-3/LinAlg/lapack+blas/cgemm.f0000640005473000001440000003167011633440402015355 0ustar d3n000users SUBROUTINE GAL_CGEMM ( TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, $ B, LDB, BETA, C, LDC ) * .. Scalar Arguments .. CHARACTER*1 TRANSA, TRANSB INTEGER M, N, K, LDA, LDB, LDC COMPLEX ALPHA, BETA * .. Array Arguments .. COMPLEX A( LDA, * ), B( LDB, * ), C( LDC, * ) * .. * * Purpose * ======= * * GAL_CGEMM performs one of the matrix-matrix operations * * C := alpha*op( A )*op( B ) + beta*C, * * where op( X ) is one of * * op( X ) = X or op( X ) = X' or op( X ) = conjg( X' ), * * alpha and beta are scalars, and A, B and C are matrices, with op( A ) * an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. * * Parameters * ========== * * TRANSA - CHARACTER*1. * On entry, TRANSA specifies the form of op( A ) to be used in * the matrix multiplication as follows: * * TRANSA = 'N' or 'n', op( A ) = A. * * TRANSA = 'T' or 't', op( A ) = A'. * * TRANSA = 'C' or 'c', op( A ) = conjg( A' ). * * Unchanged on exit. * * TRANSB - CHARACTER*1. * On entry, TRANSB specifies the form of op( B ) to be used in * the matrix multiplication as follows: * * TRANSB = 'N' or 'n', op( B ) = B. * * TRANSB = 'T' or 't', op( B ) = B'. * * TRANSB = 'C' or 'c', op( B ) = conjg( B' ). * * Unchanged on exit. * * M - INTEGER. * On entry, M specifies the number of rows of the matrix * op( A ) and of the matrix C. M must be at least zero. * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the number of columns of the matrix * op( B ) and the number of columns of the matrix C. N must be * at least zero. * Unchanged on exit. * * K - INTEGER. * On entry, K specifies the number of columns of the matrix * op( A ) and the number of rows of the matrix op( B ). K must * be at least zero. * Unchanged on exit. * * ALPHA - COMPLEX . * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * A - COMPLEX array of DIMENSION ( LDA, ka ), where ka is * k when TRANSA = 'N' or 'n', and is m otherwise. * Before entry with TRANSA = 'N' or 'n', the leading m by k * part of the array A must contain the matrix A, otherwise * the leading k by m part of the array A must contain the * matrix A. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. When TRANSA = 'N' or 'n' then * LDA must be at least max( 1, m ), otherwise LDA must be at * least max( 1, k ). * Unchanged on exit. * * B - COMPLEX array of DIMENSION ( LDB, kb ), where kb is * n when TRANSB = 'N' or 'n', and is k otherwise. * Before entry with TRANSB = 'N' or 'n', the leading k by n * part of the array B must contain the matrix B, otherwise * the leading n by k part of the array B must contain the * matrix B. * Unchanged on exit. * * LDB - INTEGER. * On entry, LDB specifies the first dimension of B as declared * in the calling (sub) program. When TRANSB = 'N' or 'n' then * LDB must be at least max( 1, k ), otherwise LDB must be at * least max( 1, n ). * Unchanged on exit. * * BETA - COMPLEX . * On entry, BETA specifies the scalar beta. When BETA is * supplied as zero then C need not be set on input. * Unchanged on exit. * * C - COMPLEX array of DIMENSION ( LDC, n ). * Before entry, the leading m by n part of the array C must * contain the matrix C, except when beta is zero, in which * case C need not be set on entry. * On exit, the array C is overwritten by the m by n matrix * ( alpha*op( A )*op( B ) + beta*C ). * * LDC - INTEGER. * On entry, LDC specifies the first dimension of C as declared * in the calling (sub) program. LDC must be at least * max( 1, m ). * Unchanged on exit. * * * Level 3 Blas routine. * * -- Written on 8-February-1989. * Jack Dongarra, Argonne National Laboratory. * Iain Duff, AERE Harwell. * Jeremy Du Croz, Numerical Algorithms Group Ltd. * Sven Hammarling, Numerical Algorithms Group Ltd. * * * .. External Functions .. LOGICAL GAL_LSAME EXTERNAL GAL_LSAME * .. External Subroutines .. EXTERNAL GAL_XERBLA * .. Intrinsic Functions .. INTRINSIC CONJG, MAX * .. Local Scalars .. LOGICAL CONJA, CONJB, NOTA, NOTB INTEGER I, INFO, J, L, NCOLA, NROWA, NROWB COMPLEX TEMP * .. Parameters .. COMPLEX ONE PARAMETER ( ONE = ( 1.0E+0, 0.0E+0 ) ) COMPLEX ZERO PARAMETER ( ZERO = ( 0.0E+0, 0.0E+0 ) ) * .. * .. Executable Statements .. * * Set NOTA and NOTB as true if A and B respectively are not * conjugated or transposed, set CONJA and CONJB as true if A and * B respectively are to be transposed but not conjugated and set * NROWA, NCOLA and NROWB as the number of rows and columns of A * and the number of rows of B respectively. * NOTA = GAL_LSAME( TRANSA, 'N' ) NOTB = GAL_LSAME( TRANSB, 'N' ) CONJA = GAL_LSAME( TRANSA, 'C' ) CONJB = GAL_LSAME( TRANSB, 'C' ) IF( NOTA )THEN NROWA = M NCOLA = K ELSE NROWA = K NCOLA = M END IF IF( NOTB )THEN NROWB = K ELSE NROWB = N END IF * * Test the input parameters. * INFO = 0 IF( ( .NOT.NOTA ).AND. $ ( .NOT.CONJA ).AND. $ ( .NOT.GAL_LSAME( TRANSA, 'T' ) ) )THEN INFO = 1 ELSE IF( ( .NOT.NOTB ).AND. $ ( .NOT.CONJB ).AND. $ ( .NOT.GAL_LSAME( TRANSB, 'T' ) ) )THEN INFO = 2 ELSE IF( M .LT.0 )THEN INFO = 3 ELSE IF( N .LT.0 )THEN INFO = 4 ELSE IF( K .LT.0 )THEN INFO = 5 ELSE IF( LDA.LT.MAX( 1, NROWA ) )THEN INFO = 8 ELSE IF( LDB.LT.MAX( 1, NROWB ) )THEN INFO = 10 ELSE IF( LDC.LT.MAX( 1, M ) )THEN INFO = 13 END IF IF( INFO.NE.0 )THEN CALL GAL_XERBLA( 'GAL_CGEMM ', INFO ) RETURN END IF * * Quick return if possible. * IF( ( M.EQ.0 ).OR.( N.EQ.0 ).OR. $ ( ( ( ALPHA.EQ.ZERO ).OR.( K.EQ.0 ) ).AND.( BETA.EQ.ONE ) ) ) $ RETURN * * And when alpha.eq.zero. * IF( ALPHA.EQ.ZERO )THEN IF( BETA.EQ.ZERO )THEN DO 20, J = 1, N DO 10, I = 1, M C( I, J ) = ZERO 10 CONTINUE 20 CONTINUE ELSE DO 40, J = 1, N DO 30, I = 1, M C( I, J ) = BETA*C( I, J ) 30 CONTINUE 40 CONTINUE END IF RETURN END IF * * Start the operations. * IF( NOTB )THEN IF( NOTA )THEN * * Form C := alpha*A*B + beta*C. * DO 90, J = 1, N IF( BETA.EQ.ZERO )THEN DO 50, I = 1, M C( I, J ) = ZERO 50 CONTINUE ELSE IF( BETA.NE.ONE )THEN DO 60, I = 1, M C( I, J ) = BETA*C( I, J ) 60 CONTINUE END IF DO 80, L = 1, K IF( B( L, J ).NE.ZERO )THEN TEMP = ALPHA*B( L, J ) DO 70, I = 1, M C( I, J ) = C( I, J ) + TEMP*A( I, L ) 70 CONTINUE END IF 80 CONTINUE 90 CONTINUE ELSE IF( CONJA )THEN * * Form C := alpha*conjg( A' )*B + beta*C. * DO 120, J = 1, N DO 110, I = 1, M TEMP = ZERO DO 100, L = 1, K TEMP = TEMP + CONJG( A( L, I ) )*B( L, J ) 100 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 110 CONTINUE 120 CONTINUE ELSE * * Form C := alpha*A'*B + beta*C * DO 150, J = 1, N DO 140, I = 1, M TEMP = ZERO DO 130, L = 1, K TEMP = TEMP + A( L, I )*B( L, J ) 130 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 140 CONTINUE 150 CONTINUE END IF ELSE IF( NOTA )THEN IF( CONJB )THEN * * Form C := alpha*A*conjg( B' ) + beta*C. * DO 200, J = 1, N IF( BETA.EQ.ZERO )THEN DO 160, I = 1, M C( I, J ) = ZERO 160 CONTINUE ELSE IF( BETA.NE.ONE )THEN DO 170, I = 1, M C( I, J ) = BETA*C( I, J ) 170 CONTINUE END IF DO 190, L = 1, K IF( B( J, L ).NE.ZERO )THEN TEMP = ALPHA*CONJG( B( J, L ) ) DO 180, I = 1, M C( I, J ) = C( I, J ) + TEMP*A( I, L ) 180 CONTINUE END IF 190 CONTINUE 200 CONTINUE ELSE * * Form C := alpha*A*B' + beta*C * DO 250, J = 1, N IF( BETA.EQ.ZERO )THEN DO 210, I = 1, M C( I, J ) = ZERO 210 CONTINUE ELSE IF( BETA.NE.ONE )THEN DO 220, I = 1, M C( I, J ) = BETA*C( I, J ) 220 CONTINUE END IF DO 240, L = 1, K IF( B( J, L ).NE.ZERO )THEN TEMP = ALPHA*B( J, L ) DO 230, I = 1, M C( I, J ) = C( I, J ) + TEMP*A( I, L ) 230 CONTINUE END IF 240 CONTINUE 250 CONTINUE END IF ELSE IF( CONJA )THEN IF( CONJB )THEN * * Form C := alpha*conjg( A' )*conjg( B' ) + beta*C. * DO 280, J = 1, N DO 270, I = 1, M TEMP = ZERO DO 260, L = 1, K TEMP = TEMP + CONJG( A( L, I ) )*CONJG( B( J, L ) ) 260 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 270 CONTINUE 280 CONTINUE ELSE * * Form C := alpha*conjg( A' )*B' + beta*C * DO 310, J = 1, N DO 300, I = 1, M TEMP = ZERO DO 290, L = 1, K TEMP = TEMP + CONJG( A( L, I ) )*B( J, L ) 290 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 300 CONTINUE 310 CONTINUE END IF ELSE IF( CONJB )THEN * * Form C := alpha*A'*conjg( B' ) + beta*C * DO 340, J = 1, N DO 330, I = 1, M TEMP = ZERO DO 320, L = 1, K TEMP = TEMP + A( L, I )*CONJG( B( J, L ) ) 320 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 330 CONTINUE 340 CONTINUE ELSE * * Form C := alpha*A'*B' + beta*C * DO 370, J = 1, N DO 360, I = 1, M TEMP = ZERO DO 350, L = 1, K TEMP = TEMP + A( L, I )*B( J, L ) 350 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 360 CONTINUE 370 CONTINUE END IF END IF * RETURN * * End of GAL_CGEMM . * END ga-5-3/LinAlg/lapack+blas/xerbla.f0000640005473000001440000000217511633440402015540 0ustar d3n000users SUBROUTINE GAL_XERBLA( SRNAME, INFO ) * * -- LAPACK auxiliary routine (preliminary version) -- * Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., * Courant Institute, Argonne National Lab, and Rice University * February 29, 1992 * * .. Scalar Arguments .. CHARACTER*6 SRNAME INTEGER INFO * .. * * Purpose * ======= * * GAL_XERBLA is an error handler for the LAPACK routines. * It is called by an LAPACK routine if an input parameter has an * invalid value. A message is printed and execution stops. * * Installers may consider modifying the STOP statement in order to * call system-specific exception-handling facilities. * * Arguments * ========= * * SRNAME (input) CHARACTER*6 * The name of the routine which called GAL_XERBLA. * * INFO (input) INTEGER * The position of the invalid parameter in the parameter list * of the calling routine. * * WRITE( *, FMT = 9999 )SRNAME, INFO * * 9999 FORMAT( ' ** On entry to ', A6, ' parameter number ', I2, ' had ', $ 'an illegal value' ) * * End of GAL_XERBLA * END ga-5-3/LinAlg/lapack+blas/zaxpy.f0000640005473000001440000000144511633440402015435 0ustar d3n000users subroutine gal_zaxpy(n,za,zx,incx,zy,incy) c c constant times a vector plus a vector. c jack dongarra, 3/11/78. c double complex zx(1),zy(1),za integer i,incx,incy,ix,iy,n double precision gal_dcabs1 if(n.le.0)return if (gal_dcabs1(za) .eq. 0.0d0) return if (incx.eq.1.and.incy.eq.1)go to 20 c c code for unequal increments or equal increments c not equal to 1 c ix = 1 iy = 1 if(incx.lt.0)ix = (-n+1)*incx + 1 if(incy.lt.0)iy = (-n+1)*incy + 1 do 10 i = 1,n zy(iy) = zy(iy) + za*zx(ix) ix = ix + incx iy = iy + incy 10 continue return c c code for both increments equal to 1 c 20 do 30 i = 1,n zy(i) = zy(i) + za*zx(i) 30 continue return end ga-5-3/LinAlg/lapack+blas/dummy.c0000640005473000001440000000030111272474200015402 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* dummy routine to make linalg.a legitimate when we do not compile lapack or blas */ void __dummy_linalg(int *a, int *b) { if(a) *a=*b; } ga-5-3/LinAlg/lapack+blas/xgemm.c0000640005473000001440000007520111633440402015375 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "xgemm.h" #define COLMAJOR 'c' #define ROWMAJOR 'r' #define MDEBUG 0 void xb_sgemm (char *transa, char *transb, int *M, int *N, int *K, float *alpha, const float *a, int *p_lda, const float *b, int *p_ldb, float *beta, float *c, int *p_ldc) /* * Purpose * ======= * * This routine computes the matrix product: * * C <- alpha * op(A) * op(B) + beta * C . * * where op(M) represents either M, M transpose, * or M conjugate transpose. * * Arguments * ========= * * order (input) enum blas_order_type * Storage of input matrices A, B, and C. * * transa (input) enum blas_trans_type * Operation to be done on matrix A before multiplication. * Can be no operation, transposition, or conjugate transposition. * * transb (input) enum blas_trans_type * Operation to be done on matrix B before multiplication. * Can be no operation, transposition, or conjugate transposition. * * m n k (input) int * The dimensions of matrices A, B, and C. * Matrix C is m-by-n matrix. * Matrix A is m-by-k if A is not transposed, * k-by-m otherwise. * Matrix B is k-by-n if B is not transposed, * n-by-k otherwise. * * alpha (input) float * * a (input) const float* * matrix A. * * lda (input) int * leading dimension of A. * * b (input) const float* * matrix B * * ldb (input) int * leading dimension of B. * * beta (input) float * * c (input/output) float* * matrix C * * ldc (input) int * leading dimension of C. * */ { /* Integer Index Variables */ int i, j, h; int ai, bj, ci; int aih, bhj, cij; /* Index into matrices a, b, c during multiply */ int incai, incaih; /* Index increments for matrix a */ int incbj, incbhj; /* Index increments for matrix b */ int incci, inccij; /* Index increments for matrix c */ /* Input Matrices */ const float *a_i = a; const float *b_i = b; /* Output Matrix */ float *c_i = c; /* Input Scalars */ float alpha_i = *alpha; float beta_i = *beta; int m=*M, n=*N, k=*K; int lda=*p_lda, ldb=*p_ldb, ldc=*p_ldc; /* Temporary Floating-Point Variables */ float a_elem; float b_elem; float c_elem; float prod; float sum; float tmp1; float tmp2; char order = COLMAJOR; /* For the time being, it is always COLMAJOR. Eventually, it might change. */ #if MDEBUG const float *A = a, *B =b, *C = c, *C1 = c; printf("In Sgemm\n"); printf("m=%d, n=%d, k=%d\n", m, n, k); printf("alpha=%f, beta=%f\n", alpha_i, beta_i); printf("\n"); /* for(i=0; i/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = $(am__EXEEXT_1) global/trace/adjust$(EXEEXT) \ global/trace/collisions$(EXEEXT) check_PROGRAMS = ma/testc$(EXEEXT) ma/test-coalesce$(EXEEXT) \ ma/test-inquire$(EXEEXT) $(am__EXEEXT_2) \ global/testing/big$(EXEEXT) global/testing/elempatch$(EXEEXT) \ global/testing/gatscat$(EXEEXT) global/testing/getmem$(EXEEXT) \ global/testing/mtest$(EXEEXT) \ global/testing/mulmatpatchc$(EXEEXT) \ global/testing/ntestc$(EXEEXT) global/testing/ntestfc$(EXEEXT) \ global/testing/packc$(EXEEXT) \ global/testing/patch_enumc$(EXEEXT) \ global/testing/perf2$(EXEEXT) global/testing/print$(EXEEXT) \ global/testing/scan_addc$(EXEEXT) \ global/testing/scan_copyc$(EXEEXT) \ global/testing/testc$(EXEEXT) \ global/testing/testmatmultc$(EXEEXT) \ global/testing/testmult$(EXEEXT) \ global/testing/testmultrect$(EXEEXT) \ global/testing/unpackc$(EXEEXT) $(am__EXEEXT_3) \ $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) \ $(am__EXEEXT_7) $(am__EXEEXT_8) $(am__EXEEXT_9) \ global/examples/lennard-jones/lennard$(EXEEXT) \ $(am__EXEEXT_10) pario/dra/bign$(EXEEXT) \ pario/dra/dbg_read$(EXEEXT) pario/dra/dbg_write$(EXEEXT) \ pario/dra/dra2arviz$(EXEEXT) pario/dra/ntestc$(EXEEXT) \ pario/dra/perfn$(EXEEXT) pario/dra/rate$(EXEEXT) \ $(am__EXEEXT_11) $(am__EXEEXT_12) $(am__EXEEXT_13) \ $(am__EXEEXT_14) $(am__EXEEXT_15) $(am__EXEEXT_16) @ENABLE_F77_TRUE@am__append_1 = $(FLD_NOMAIN) ############################################################################## # LinAlg/lapack+blas # # Since we gave all linalg routines a gal_ prefix, we can unconditionally # compile our internal linalg routines. # @ENABLE_F77_TRUE@am__append_2 = ma/maf.F LinAlg/lapack+blas/dgetf2.f \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/dgetrf.f \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/dgetrs.f \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/dlacpy.f \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/dlaset.f \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/dlaswp.f \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/ilaenv.f \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/lsame.f \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/xerbla.f \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/cgemm.f \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/dblas.f \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/sgemm.f \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/zaxpy.f \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/zgemm.f @ENABLE_F77_TRUE@am__append_3 = ma/testf @ENABLE_F77_TRUE@am__append_4 = ma/testf$(EXEEXT) @ENABLE_F77_TRUE@am__append_5 = ma/testf$(EXEEXT) ############################################################################## # tools # # The following to support tracing, profiling, etc. # @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@am__append_6 = libwapi.la @ENABLE_GPARRAYS_TRUE@@ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@am__append_7 = tools/gp-wapi.c @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE@am__append_8 = tools/ga-wapi.c @ENABLE_GPARRAYS_TRUE@@ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE@am__append_9 = tools/gp-wapi.c @ENABLE_GPARRAYS_TRUE@am__append_10 = tools/gpwapigen.py @ENABLE_F77_TRUE@am__append_11 = global/src/complex.F \ @ENABLE_F77_TRUE@ global/src/ga_diag_seq.F global/src/rsg.f @CRAY_XT_NETWORKS_TRUE@@ENABLE_F77_TRUE@am__append_12 = global/src/ga_dgemmf.F @ENABLE_F77_TRUE@@ENABLE_PEIGS_TRUE@am__append_13 = global/src/ga_diag.F @ENABLE_F77_TRUE@@HAVE_SCALAPACK_TRUE@am__append_14 = global/src/scalapack.F @ENABLE_CHECKPOINT_TRUE@am__append_15 = global/src/ga_ckpt.c @MSG_COMMS_MPI_TRUE@am__append_16 = global/src/ga-mpi.h \ @MSG_COMMS_MPI_TRUE@ global/src/ga-mpi.fh @ENABLE_F77_TRUE@am__append_17 = global/testing/bin \ @ENABLE_F77_TRUE@ global/testing/blktest global/testing/d2test \ @ENABLE_F77_TRUE@ global/testing/g2test global/testing/g3test \ @ENABLE_F77_TRUE@ global/testing/ga_lu global/testing/ga_shift \ @ENABLE_F77_TRUE@ global/testing/ghosts global/testing/jacobi \ @ENABLE_F77_TRUE@ global/testing/mir_perf2 \ @ENABLE_F77_TRUE@ global/testing/mmatrix \ @ENABLE_F77_TRUE@ global/testing/mulmatpatch \ @ENABLE_F77_TRUE@ global/testing/nb2test global/testing/ndim \ @ENABLE_F77_TRUE@ global/testing/patch global/testing/patch2 \ @ENABLE_F77_TRUE@ global/testing/patch_enumf \ @ENABLE_F77_TRUE@ global/testing/perfmod global/testing/perform \ @ENABLE_F77_TRUE@ global/testing/perf \ @ENABLE_F77_TRUE@ global/testing/pg2testmatmult \ @ENABLE_F77_TRUE@ global/testing/pg2test \ @ENABLE_F77_TRUE@ global/testing/pgtestmatmult \ @ENABLE_F77_TRUE@ global/testing/pgtest global/testing/random \ @ENABLE_F77_TRUE@ global/testing/scan \ @ENABLE_F77_TRUE@ global/testing/simple_groups \ @ENABLE_F77_TRUE@ global/testing/sparse \ @ENABLE_F77_TRUE@ global/testing/sprsmatmult \ @ENABLE_F77_TRUE@ global/testing/stride global/testing/testeig \ @ENABLE_F77_TRUE@ global/testing/testmatmult \ @ENABLE_F77_TRUE@ global/testing/testsolve global/testing/test \ @ENABLE_F77_TRUE@ global/testing/test_mirrored \ @ENABLE_F77_TRUE@ global/testing/types_test \ @ENABLE_F77_TRUE@ global/testing/field_test @ENABLE_F77_TRUE@@HAVE_SCALAPACK_TRUE@am__append_18 = global/testing/testspd @ENABLE_F77_FALSE@@HAVE_LAPACK_TRUE@am__append_19 = global/testing/ga_lu @MSG_COMMS_MPI_TRUE@am__append_20 = global/testing/ga-mpi \ @MSG_COMMS_MPI_TRUE@ global/testing/lock \ @MSG_COMMS_MPI_TRUE@ global/testing/simple_groups_comm \ @MSG_COMMS_MPI_TRUE@ global/testing/simple_groups_commc @SYSV_TRUE@am__append_21 = global/testing/ipc_clean # TODO somehow unit tests depend on MPI -- need to fix @MSG_COMMS_MPI_TRUE@am__append_22 = \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_abs_value \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_acc \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_add \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_add_constant \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_add_constantpatch \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_add_diagonal \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_add_patch \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_copy2 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_copy3 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_copy \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_copypatch2 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_copypatch \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_create1 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_create2 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_create3 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_create \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_create_handle \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_create_irreg2 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_create_irreg3 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_create_irreg \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_destroy \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_dgop \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_dot \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_duplicate \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_elem_divide \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_elem_dividepatch \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_elem_maximum \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_elem_maximumpatch \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_elem_minimum \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_elem_minimumpatch \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_elem_multiply \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_elem_multiplypatch \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_fill \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_fillpatch1 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_fillpatch \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_gather2 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_gather3 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_gather \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_get_blockinfo \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_get \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_get_diagonal \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_igop2 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_igop \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_inquire \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_intialize \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_lgop \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_median \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_ndim2 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_ndim \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_nnodes \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_nodeid \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_create2 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_create3 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_create4 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_create5 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_create \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_destroy2 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_destroy \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_nnodes_nodeid \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_setdefault \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_put2 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_put \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_scale2 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_scale \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_scale_cols \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_scale_patch \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_scale_rows \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_scatter \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_set_data \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_set_diagonal \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_set_restricted \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_solve \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_sync \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_transpose2 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_transpose3 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_transpose \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_zero \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_zerodiagonal \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_zeropatch2 \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_zeropatch #GLOBAL_PARALLEL_TESTS += global/testing/d2test$(EXEEXT) # needs input file #GLOBAL_PARALLEL_TESTS += global/testing/pg2testmatmult$(EXEEXT) # needs 8 procs exactly #GLOBAL_PARALLEL_TESTS += global/testing/pgtestmatmult$(EXEEXT) # needs 8 procs exactly #GLOBAL_PARALLEL_TESTS += global/testing/random$(EXEEXT) # takes too long @ENABLE_F77_TRUE@am__append_23 = global/testing/bin$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/blktest$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/g2test$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/g3test$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/ga_lu$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/ga_shift$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/ghosts$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/jacobi$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/mir_perf2$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/mmatrix$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/mulmatpatch$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/nb2test$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/ndim$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/patch$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/patch2$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/patch_enumf$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/perfmod$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/perform$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/perf$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/perf2$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/pg2test$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/pgtest$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/scan$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/simple_groups$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/sparse$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/sprsmatmult$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/stride$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/testeig$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/testmatmult$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/testsolve$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/test$(EXEEXT) @ENABLE_F77_TRUE@@HAVE_SCALAPACK_TRUE@am__append_24 = global/testing/testspd$(EXEEXT) @ENABLE_F77_FALSE@@HAVE_LAPACK_TRUE@am__append_25 = global/testing/ga_lu$(EXEEXT) @MSG_COMMS_MPI_TRUE@am__append_26 = global/testing/ga-mpi$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/lock$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/simple_groups_comm$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/simple_groups_commc$(EXEEXT) @HAVE_M4_TRUE@am__append_27 = $(GLOBAL_TESTING_M4_DEPS) \ @HAVE_M4_TRUE@ global/testing/README @HAVE_M4_TRUE@am__append_28 = global/testing/nga-onesided.F \ @HAVE_M4_TRUE@ global/testing/nga-patch.F \ @HAVE_M4_TRUE@ global/testing/nga-periodic.F \ @HAVE_M4_TRUE@ global/testing/nga-scatter.F \ @HAVE_M4_TRUE@ global/testing/nga-util.F \ @HAVE_M4_TRUE@ global/testing/ngatest.F @ENABLE_F77_TRUE@@HAVE_M4_TRUE@am__append_29 = \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/nga-onesided \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/nga-patch \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/nga-periodic \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/nga-scatter \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/nga-util \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/ngatest @ENABLE_F77_TRUE@@HAVE_M4_TRUE@am__append_30 = global/testing/nga-onesided$(EXEEXT) \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/nga-patch$(EXEEXT) \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/nga-periodic$(EXEEXT) \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/nga-scatter$(EXEEXT) \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/nga-scatter$(EXEEXT) \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/nga-util$(EXEEXT) \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/ngatest$(EXEEXT) @ENABLE_F77_TRUE@am__append_31 = global/testing/ffflush.F \ @ENABLE_F77_TRUE@ global/testing/testblas.F @ENABLE_F77_TRUE@am__append_32 = global/examples/boltzmann/boltz \ @ENABLE_F77_TRUE@ global/examples/conjugate_gradient/ga_cg \ @ENABLE_F77_TRUE@ global/examples/md_cluster/grp_sim \ @ENABLE_F77_TRUE@ global/examples/scf/scf pario/dra/big \ @ENABLE_F77_TRUE@ pario/dra/dra_mxm pario/dra/ntest \ @ENABLE_F77_TRUE@ pario/dra/perf pario/dra/perf2 \ @ENABLE_F77_TRUE@ pario/dra/perf3 pario/dra/test \ @ENABLE_F77_TRUE@ pario/dra/test_mxm pario/dra/time_mxm \ @ENABLE_F77_TRUE@ pario/eaf/test pario/sf/test @ENABLE_F77_TRUE@am__append_33 = global/examples/boltzmann/boltz$(EXEEXT) ############################################################################## # global/X # @ENABLE_XREGION_TRUE@@NO_X_FALSE@am__append_34 = global/X/xregion ############################################################################## # ga++/src # @CXX_BINDINGS_TRUE@am__append_35 = libga++.la @CXX_BINDINGS_TRUE@am__append_36 = ga++/src/ga++.h \ @CXX_BINDINGS_TRUE@ ga++/src/GAServices.h \ @CXX_BINDINGS_TRUE@ ga++/src/GlobalArray.h ga++/src/init_term.h \ @CXX_BINDINGS_TRUE@ ga++/src/PGroup.h ga++/src/services.h @CXX_BINDINGS_TRUE@am__append_37 = -I$(top_srcdir)/ga++/src ############################################################################## # ga++/testing # @CXX_BINDINGS_TRUE@am__append_38 = ga++/testing/elempatch \ @CXX_BINDINGS_TRUE@ ga++/testing/mtest ga++/testing/ntestc \ @CXX_BINDINGS_TRUE@ ga++/testing/testc ga++/testing/testmult @ENABLE_GPARRAYS_TRUE@am__append_39 = gparrays/src/gp-wapi.h \ @ENABLE_GPARRAYS_TRUE@ gparrays/src/gp-wapidefs.h @ENABLE_GPARRAYS_TRUE@am__append_40 = gparrays/src/gp-wapi.h \ @ENABLE_GPARRAYS_TRUE@ gparrays/src/gp-wapidefs.h @ENABLE_GPARRAYS_TRUE@am__append_41 = gparrays/src/gpbase.c \ @ENABLE_GPARRAYS_TRUE@ gparrays/src/gpbase.h \ @ENABLE_GPARRAYS_TRUE@ gparrays/src/gpcapi.c \ @ENABLE_GPARRAYS_TRUE@ gparrays/src/gpfapi.c \ @ENABLE_GPARRAYS_TRUE@ gparrays/src/gponesided.c \ @ENABLE_GPARRAYS_TRUE@ gparrays/src/gp-papi.h @ENABLE_GPARRAYS_TRUE@am__append_42 = gparrays/src/gp-wapidefs.h @ENABLE_GPARRAYS_TRUE@am__append_43 = gparrays/src/gp.h \ @ENABLE_GPARRAYS_TRUE@ gparrays/src/gp-papi.h @ENABLE_GPARRAYS_TRUE@am__append_44 = gparrays/src/gp-wapi.h @ENABLE_F77_TRUE@@ENABLE_GPARRAYS_TRUE@am__append_45 = gparrays/testing/test @ENABLE_GPARRAYS_TRUE@am__append_46 = gparrays/testing/testc \ @ENABLE_GPARRAYS_TRUE@ gparrays/testing/transpose @ENABLE_GPARRAYS_TRUE@am__append_47 = \ @ENABLE_GPARRAYS_TRUE@ -I$(top_build_prefix)gparrays/src \ @ENABLE_GPARRAYS_TRUE@ -I$(top_srcdir)/gparrays/src @ENABLE_F77_TRUE@am__append_48 = gaf2c/farg.F @ENABLE_F77_TRUE@am__append_49 = gaf2c/testarg @ENABLE_F77_TRUE@am__append_50 = gaf2c/testarg$(EXEEXT) ############################################################################## # tcgmsg/tcgmsg-mpi # @MSG_COMMS_MPI_TRUE@am__append_51 = tcgmsg/tcgmsg-mpi/checkbyte.c \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/clustercheck.c \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/collect.c \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/drand48.c \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/evlog.c \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/evlog.h \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/evon.c \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/llog.c \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/misc.c \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/niceftn.c \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/nxtval-armci.c \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/p2p.c \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/pbeginf.c \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/pfilecopy.c \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/sizeof.c \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/sndrcv.h \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/srftoc.h \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/tcgmsgP.h @MSG_COMMS_MPI_TRUE@am__append_52 = -I$(top_srcdir)/tcgmsg/tcgmsg-mpi @MSG_COMMS_MPI_TRUE@am__append_53 = tcgmsg/tests/test_asyn \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tests/test @ENABLE_F77_TRUE@@MSG_COMMS_MPI_TRUE@am__append_54 = tcgmsg/tests/testf ############################################################################## # armci # if TCGMSG is coming from ARMCI @ARMCI_NETWORK_ARMCI_FALSE@@MSG_COMMS_TCGMSG4_TRUE@am__append_55 = -I$(top_srcdir)/armci/tcgmsg @ARMCI_NETWORK_ARMCI_FALSE@@MSG_COMMS_TCGMSG5_TRUE@am__append_56 = -I$(top_srcdir)/armci/tcgmsg @ARMCI_NETWORK_ARMCI_FALSE@@ARMCI_NETWORK_PORTALS_TRUE@am__append_57 = -I$(top_srcdir)/armci/src-portals \ @ARMCI_NETWORK_ARMCI_FALSE@@ARMCI_NETWORK_PORTALS_TRUE@ -I$(top_srcdir)/armci/tcgmsg @ARMCI_NETWORK_ARMCI_FALSE@@ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_58 = -I$(top_srcdir)/armci/src-gemini \ @ARMCI_NETWORK_ARMCI_FALSE@@ARMCI_NETWORK_GEMINI_TRUE@@ARMCI_NETWORK_PORTALS_FALSE@ -I$(top_srcdir)/armci/tcgmsg @ARMCI_NETWORK_ARMCI_FALSE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@am__append_59 = -I$(top_srcdir)/armci/src/include \ @ARMCI_NETWORK_ARMCI_FALSE@@ARMCI_NETWORK_GEMINI_FALSE@@ARMCI_NETWORK_PORTALS_FALSE@ -I$(top_srcdir)/armci/tcgmsg @ARMCI_NETWORK_ARMCI_TRUE@am__append_60 = $(ARMCI_NETWORK_LIBS) \ @ARMCI_NETWORK_ARMCI_TRUE@ $(GA_MP_LIBS) @ARMCI_NETWORK_ARMCI_FALSE@@ARMCI_SRC_DIR_COMEX_TRUE@am__append_61 = comex/libarmci.la @ARMCI_NETWORK_ARMCI_FALSE@@ARMCI_SRC_DIR_COMEX_FALSE@am__append_62 = armci/libarmci.la @ARMCI_NETWORK_ARMCI_FALSE@am__append_63 = $(GA_MP_LIBS) \ @ARMCI_NETWORK_ARMCI_FALSE@ $(ARMCI_NETWORK_LIBS) TESTS = $(am__EXEEXT_18) $(am__EXEEXT_19) XFAIL_TESTS = $(am__EXEEXT_20) $(am__EXEEXT_21) subdir = . DIST_COMMON = README $(am__configure_deps) $(am__include_HEADERS_DIST) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/config.h.in $(top_srcdir)/configure \ $(top_srcdir)/gaf2c/farg.h.in \ $(top_srcdir)/gaf2c/typesf2c.h.in \ $(top_srcdir)/global/src/global.fh.in \ $(top_srcdir)/ma/mafdecls.fh.in $(top_srcdir)/ma/matypes.h.in \ $(top_srcdir)/tools/ga-config.in INSTALL NEWS \ build-aux/config.guess build-aux/config.sub build-aux/depcomp \ build-aux/install-sh build-aux/ltmain.sh build-aux/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/armci_setup.m4 \ $(top_srcdir)/m4/ax_sys_weak_alias.m4 \ $(top_srcdir)/m4/ga_ar.m4 $(top_srcdir)/m4/ga_arg_parse.m4 \ $(top_srcdir)/m4/ga_armci_network.m4 $(top_srcdir)/m4/ga_as.m4 \ $(top_srcdir)/m4/ga_blas.m4 \ $(top_srcdir)/m4/ga_c_match_types.m4 \ $(top_srcdir)/m4/ga_c_opt.m4 $(top_srcdir)/m4/ga_check_func.m4 \ $(top_srcdir)/m4/ga_check_header.m4 \ $(top_srcdir)/m4/ga_check_libplot.m4 \ $(top_srcdir)/m4/ga_compiler_vendor.m4 \ $(top_srcdir)/m4/ga_cross_compiling.m4 \ $(top_srcdir)/m4/ga_cxx.m4 \ $(top_srcdir)/m4/ga_cxx_namespaces.m4 \ $(top_srcdir)/m4/ga_cxx_opt.m4 \ $(top_srcdir)/m4/ga_enable_checkpoint.m4 \ $(top_srcdir)/m4/ga_enable_opt.m4 \ $(top_srcdir)/m4/ga_enable_peigs.m4 \ $(top_srcdir)/m4/ga_enable_profile.m4 \ $(top_srcdir)/m4/ga_enable_trace.m4 \ $(top_srcdir)/m4/ga_f2c_cmdargs.m4 \ $(top_srcdir)/m4/ga_f2c_match_types.m4 \ $(top_srcdir)/m4/ga_f2c_nomain.m4 \ $(top_srcdir)/m4/ga_f2c_string.m4 \ $(top_srcdir)/m4/ga_f77_check_sizeof.m4 \ $(top_srcdir)/m4/ga_f77_cpp_symbols.m4 \ $(top_srcdir)/m4/ga_f77_disable.m4 \ $(top_srcdir)/m4/ga_f77_fixed.m4 \ $(top_srcdir)/m4/ga_f77_flush.m4 \ $(top_srcdir)/m4/ga_f77_integer_size.m4 \ $(top_srcdir)/m4/ga_f77_ld_override.m4 \ $(top_srcdir)/m4/ga_f77_library_ldflags.m4 \ $(top_srcdir)/m4/ga_f77_mismatch_type.m4 \ $(top_srcdir)/m4/ga_f77_opt.m4 \ $(top_srcdir)/m4/ga_f77_underscore.m4 \ $(top_srcdir)/m4/ga_function.m4 $(top_srcdir)/m4/ga_lapack.m4 \ $(top_srcdir)/m4/ga_mpi_test_disable.m4 \ $(top_srcdir)/m4/ga_mpi_unwrap.m4 $(top_srcdir)/m4/ga_mpicc.m4 \ $(top_srcdir)/m4/ga_mpicc_test.m4 \ $(top_srcdir)/m4/ga_mpicxx.m4 \ $(top_srcdir)/m4/ga_mpicxx_test.m4 \ $(top_srcdir)/m4/ga_mpif77.m4 \ $(top_srcdir)/m4/ga_mpif77_test.m4 \ $(top_srcdir)/m4/ga_msg_comms.m4 \ $(top_srcdir)/m4/ga_progname.m4 \ $(top_srcdir)/m4/ga_scalapack.m4 \ $(top_srcdir)/m4/ga_suppress_msg.m4 \ $(top_srcdir)/m4/ga_sys_weak_alias.m4 \ $(top_srcdir)/m4/ga_target.m4 \ $(top_srcdir)/m4/ga_thread_safe.m4 \ $(top_srcdir)/m4/ga_union_semun.m4 \ $(top_srcdir)/m4/ga_warn_flags.m4 \ $(top_srcdir)/m4/ga_with_help.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/lt_obsolete.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/ma_enable_armci_mem.m4 \ $(top_srcdir)/m4/ma_long_double.m4 \ $(top_srcdir)/m4/ma_stats.m4 $(top_srcdir)/m4/ma_verify.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = gaf2c/farg.h gaf2c/typesf2c.h \ global/src/global.fh ma/mafdecls.fh ma/matypes.h \ tools/ga-config CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(bindir)" "$(DESTDIR)$(includedir)" \ "$(DESTDIR)$(includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libga___la_LIBADD = am__libga___la_SOURCES_DIST = ga++/src/GAServices.cc \ ga++/src/GlobalArray.cc ga++/src/PGroup.cc \ ga++/src/init_term.cc ga++/src/overload.cc \ ga++/src/services.cc am__dirstamp = $(am__leading_dot)dirstamp @CXX_BINDINGS_TRUE@am_libga___la_OBJECTS = ga++/src/GAServices.lo \ @CXX_BINDINGS_TRUE@ ga++/src/GlobalArray.lo ga++/src/PGroup.lo \ @CXX_BINDINGS_TRUE@ ga++/src/init_term.lo ga++/src/overload.lo \ @CXX_BINDINGS_TRUE@ ga++/src/services.lo libga___la_OBJECTS = $(am_libga___la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent @CXX_BINDINGS_TRUE@am_libga___la_rpath = -rpath $(libdir) am__DEPENDENCIES_1 = @ARMCI_NETWORK_ARMCI_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \ @ARMCI_NETWORK_ARMCI_TRUE@ $(am__DEPENDENCIES_1) @ARMCI_NETWORK_ARMCI_FALSE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) \ @ARMCI_NETWORK_ARMCI_FALSE@ $(am__DEPENDENCIES_1) libga_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) $(am__append_61) \ $(am__append_62) $(am__DEPENDENCIES_3) am__libga_la_SOURCES_DIST = compat/random.c ma/error.c ma/f2c.c \ ma/ma.c ma/ma.h ma/memcpy.h ma/string-util.c ma/table.c \ ma/maf.F LinAlg/lapack+blas/dgetf2.f \ LinAlg/lapack+blas/dgetrf.f LinAlg/lapack+blas/dgetrs.f \ LinAlg/lapack+blas/dlacpy.f LinAlg/lapack+blas/dlaset.f \ LinAlg/lapack+blas/dlaswp.f LinAlg/lapack+blas/ilaenv.f \ LinAlg/lapack+blas/lsame.f LinAlg/lapack+blas/xerbla.f \ LinAlg/lapack+blas/cgemm.f LinAlg/lapack+blas/dblas.f \ LinAlg/lapack+blas/sgemm.f LinAlg/lapack+blas/zaxpy.f \ LinAlg/lapack+blas/zgemm.f LinAlg/lapack+blas/xgemm.c \ LinAlg/lapack+blas/xgemm.h LinAlg/lapack+blas/galinalg.h \ LinAlg/lapack+blas/galinalg.fh global/src/abstract_ops.h \ global/src/base.c global/src/base.h global/src/capi.c \ global/src/cnames.h global/src/collect.c \ global/src/datatypes.c global/src/decomp.c global/src/diag.fh \ global/src/DP.c global/src/elem_alg.c global/src/fapi.c \ global/src/ga_ckpt.h global/src/gaconfig.h \ global/src/ga_diag_seqc.c global/src/ga_malloc.c \ global/src/ga_profile.h global/src/ga_solve_seq.c \ global/src/ga_symmetr.c global/src/ga_trace.c \ global/src/ghosts.c global/src/global.h \ global/src/global.nalg.c global/src/global.npatch.c \ global/src/global.periodic.c global/src/globalp.h \ global/src/global.util.c global/src/hsort.scat.c \ global/src/matmul.c global/src/matmul.h global/src/matrix.c \ global/src/nbutil.c global/src/onesided.c \ global/src/peigstubs.c global/src/scalapack.fh \ global/src/sclstubs.c global/src/select.c global/src/sparse.c \ global/src/types.xh global/src/types2.xh global/src/complex.F \ global/src/ga_diag_seq.F global/src/rsg.f \ global/src/ga_dgemmf.F global/src/ga_diag.F \ global/src/scalapack.F global/src/ga_ckpt.c \ pario/dra/buffers.c pario/dra/buffers.h pario/dra/capi.c \ pario/dra/disk.arrays.c pario/dra/disk.param.c \ pario/dra/draf2c.h pario/dra/drap.h pario/dra/env.c \ pario/dra/fortran.c pario/dra/patch.util.c pario/eaf/eaf.c \ pario/eaf/eaf_f2c.c pario/eaf/eafP.h pario/elio/elio.c \ pario/elio/eliop.h pario/elio/pablo.h pario/elio/stat.c \ pario/sf/sf_capi.c pario/sf/sff2c.h pario/sf/sf_fortran.c \ pario/sf/shared.files.c gparrays/src/gpbase.c \ gparrays/src/gpbase.h gparrays/src/gpcapi.c \ gparrays/src/gpfapi.c gparrays/src/gponesided.c \ gparrays/src/gp-papi.h gaf2c/gaf2c.c gaf2c/drand.c \ gaf2c/farg.F tcgmsg/capi.c tcgmsg/fapi.c \ tcgmsg/tcgmsg-mpi/checkbyte.c tcgmsg/tcgmsg-mpi/clustercheck.c \ tcgmsg/tcgmsg-mpi/collect.c tcgmsg/tcgmsg-mpi/drand48.c \ tcgmsg/tcgmsg-mpi/evlog.c tcgmsg/tcgmsg-mpi/evlog.h \ tcgmsg/tcgmsg-mpi/evon.c tcgmsg/tcgmsg-mpi/llog.c \ tcgmsg/tcgmsg-mpi/misc.c tcgmsg/tcgmsg-mpi/niceftn.c \ tcgmsg/tcgmsg-mpi/nxtval-armci.c tcgmsg/tcgmsg-mpi/p2p.c \ tcgmsg/tcgmsg-mpi/pbeginf.c tcgmsg/tcgmsg-mpi/pfilecopy.c \ tcgmsg/tcgmsg-mpi/sizeof.c tcgmsg/tcgmsg-mpi/sndrcv.h \ tcgmsg/tcgmsg-mpi/srftoc.h tcgmsg/tcgmsg-mpi/tcgmsgP.h @ENABLE_F77_TRUE@am__objects_1 = ma/maf.lo \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/dgetf2.lo \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/dgetrf.lo \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/dgetrs.lo \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/dlacpy.lo \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/dlaset.lo \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/dlaswp.lo \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/ilaenv.lo \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/lsame.lo \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/xerbla.lo \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/cgemm.lo \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/dblas.lo \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/sgemm.lo \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/zaxpy.lo \ @ENABLE_F77_TRUE@ LinAlg/lapack+blas/zgemm.lo @ENABLE_F77_TRUE@am__objects_2 = global/src/complex.lo \ @ENABLE_F77_TRUE@ global/src/ga_diag_seq.lo global/src/rsg.lo @CRAY_XT_NETWORKS_TRUE@@ENABLE_F77_TRUE@am__objects_3 = global/src/ga_dgemmf.lo @ENABLE_F77_TRUE@@ENABLE_PEIGS_TRUE@am__objects_4 = \ @ENABLE_F77_TRUE@@ENABLE_PEIGS_TRUE@ global/src/ga_diag.lo @ENABLE_F77_TRUE@@HAVE_SCALAPACK_TRUE@am__objects_5 = \ @ENABLE_F77_TRUE@@HAVE_SCALAPACK_TRUE@ global/src/scalapack.lo @ENABLE_CHECKPOINT_TRUE@am__objects_6 = global/src/ga_ckpt.lo @ENABLE_GPARRAYS_TRUE@am__objects_7 = gparrays/src/gpbase.lo \ @ENABLE_GPARRAYS_TRUE@ gparrays/src/gpcapi.lo \ @ENABLE_GPARRAYS_TRUE@ gparrays/src/gpfapi.lo \ @ENABLE_GPARRAYS_TRUE@ gparrays/src/gponesided.lo @ENABLE_F77_TRUE@am__objects_8 = gaf2c/farg.lo @MSG_COMMS_MPI_TRUE@am__objects_9 = tcgmsg/tcgmsg-mpi/checkbyte.lo \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/clustercheck.lo \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/collect.lo \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/drand48.lo \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/evlog.lo \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/evon.lo \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/llog.lo \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/misc.lo \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/niceftn.lo \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/nxtval-armci.lo \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/p2p.lo \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/pbeginf.lo \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/pfilecopy.lo \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tcgmsg-mpi/sizeof.lo am_libga_la_OBJECTS = compat/random.lo ma/error.lo ma/f2c.lo ma/ma.lo \ ma/string-util.lo ma/table.lo $(am__objects_1) \ LinAlg/lapack+blas/xgemm.lo global/src/base.lo \ global/src/capi.lo global/src/collect.lo \ global/src/datatypes.lo global/src/decomp.lo global/src/DP.lo \ global/src/elem_alg.lo global/src/fapi.lo \ global/src/ga_diag_seqc.lo global/src/ga_malloc.lo \ global/src/ga_solve_seq.lo global/src/ga_symmetr.lo \ global/src/ga_trace.lo global/src/ghosts.lo \ global/src/global.nalg.lo global/src/global.npatch.lo \ global/src/global.periodic.lo global/src/global.util.lo \ global/src/hsort.scat.lo global/src/matmul.lo \ global/src/matrix.lo global/src/nbutil.lo \ global/src/onesided.lo global/src/peigstubs.lo \ global/src/sclstubs.lo global/src/select.lo \ global/src/sparse.lo $(am__objects_2) $(am__objects_3) \ $(am__objects_4) $(am__objects_5) $(am__objects_6) \ pario/dra/buffers.lo pario/dra/capi.lo \ pario/dra/disk.arrays.lo pario/dra/disk.param.lo \ pario/dra/env.lo pario/dra/fortran.lo pario/dra/patch.util.lo \ pario/eaf/eaf.lo pario/eaf/eaf_f2c.lo pario/elio/elio.lo \ pario/elio/stat.lo pario/sf/sf_capi.lo pario/sf/sf_fortran.lo \ pario/sf/shared.files.lo $(am__objects_7) gaf2c/gaf2c.lo \ gaf2c/drand.lo $(am__objects_8) tcgmsg/capi.lo tcgmsg/fapi.lo \ $(am__objects_9) @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE@am__objects_10 = tools/ga-wapi.lo @ENABLE_GPARRAYS_TRUE@@ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_FALSE@am__objects_11 = tools/gp-wapi.lo am__objects_12 = nodist_libga_la_OBJECTS = $(am__objects_10) $(am__objects_11) \ $(am__objects_12) libga_la_OBJECTS = $(am_libga_la_OBJECTS) $(nodist_libga_la_OBJECTS) libwapi_la_LIBADD = am__libwapi_la_SOURCES_DIST = tools/ga-wapi.c tools/gp-wapi.c @ENABLE_GPARRAYS_TRUE@@ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@am__objects_13 = tools/gp-wapi.lo @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@am_libwapi_la_OBJECTS = tools/ga-wapi.lo \ @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@ $(am__objects_13) libwapi_la_OBJECTS = $(am_libwapi_la_OBJECTS) @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@am_libwapi_la_rpath = -rpath \ @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@ $(libdir) @ENABLE_XREGION_TRUE@@NO_X_FALSE@am__EXEEXT_1 = \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@ global/X/xregion$(EXEEXT) @ENABLE_F77_TRUE@am__EXEEXT_2 = ma/testf$(EXEEXT) @ENABLE_F77_TRUE@am__EXEEXT_3 = global/testing/bin$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/blktest$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/d2test$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/g2test$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/g3test$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/ga_lu$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/ga_shift$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/ghosts$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/jacobi$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/mir_perf2$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/mmatrix$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/mulmatpatch$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/nb2test$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/ndim$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/patch$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/patch2$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/patch_enumf$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/perfmod$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/perform$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/perf$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/pg2testmatmult$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/pg2test$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/pgtestmatmult$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/pgtest$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/random$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/scan$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/simple_groups$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/sparse$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/sprsmatmult$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/stride$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/testeig$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/testmatmult$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/testsolve$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/test$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/test_mirrored$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/types_test$(EXEEXT) \ @ENABLE_F77_TRUE@ global/testing/field_test$(EXEEXT) @ENABLE_F77_TRUE@@HAVE_SCALAPACK_TRUE@am__EXEEXT_4 = global/testing/testspd$(EXEEXT) @ENABLE_F77_FALSE@@HAVE_LAPACK_TRUE@am__EXEEXT_5 = global/testing/ga_lu$(EXEEXT) @MSG_COMMS_MPI_TRUE@am__EXEEXT_6 = global/testing/ga-mpi$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/lock$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/simple_groups_comm$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/simple_groups_commc$(EXEEXT) @SYSV_TRUE@am__EXEEXT_7 = global/testing/ipc_clean$(EXEEXT) @MSG_COMMS_MPI_TRUE@am__EXEEXT_8 = global/testing/unit-tests/ga_abs_value$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_acc$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_add$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_add_constant$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_add_constantpatch$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_add_diagonal$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_add_patch$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_copy2$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_copy3$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_copy$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_copypatch2$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_copypatch$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_create1$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_create2$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_create3$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_create$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_create_handle$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_create_irreg2$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_create_irreg3$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_create_irreg$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_destroy$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_dgop$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_dot$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_duplicate$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_elem_divide$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_elem_dividepatch$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_elem_maximum$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_elem_maximumpatch$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_elem_minimum$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_elem_minimumpatch$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_elem_multiply$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_elem_multiplypatch$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_fill$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_fillpatch1$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_fillpatch$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_gather2$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_gather3$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_gather$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_get_blockinfo$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_get$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_get_diagonal$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_igop2$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_igop$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_inquire$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_intialize$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_lgop$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_median$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_ndim2$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_ndim$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_nnodes$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_nodeid$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_create2$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_create3$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_create4$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_create5$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_create$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_destroy2$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_destroy$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_nnodes_nodeid$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_pgroup_setdefault$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_put2$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_put$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_scale2$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_scale$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_scale_cols$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_scale_patch$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_scale_rows$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_scatter$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_set_data$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_set_diagonal$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_set_restricted$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_solve$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_sync$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_transpose2$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_transpose3$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_transpose$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_zero$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_zerodiagonal$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_zeropatch2$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ global/testing/unit-tests/ga_zeropatch$(EXEEXT) @ENABLE_F77_TRUE@@HAVE_M4_TRUE@am__EXEEXT_9 = global/testing/nga-onesided$(EXEEXT) \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/nga-patch$(EXEEXT) \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/nga-periodic$(EXEEXT) \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/nga-scatter$(EXEEXT) \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/nga-util$(EXEEXT) \ @ENABLE_F77_TRUE@@HAVE_M4_TRUE@ global/testing/ngatest$(EXEEXT) @ENABLE_F77_TRUE@am__EXEEXT_10 = \ @ENABLE_F77_TRUE@ global/examples/boltzmann/boltz$(EXEEXT) \ @ENABLE_F77_TRUE@ global/examples/conjugate_gradient/ga_cg$(EXEEXT) \ @ENABLE_F77_TRUE@ global/examples/md_cluster/grp_sim$(EXEEXT) \ @ENABLE_F77_TRUE@ global/examples/scf/scf$(EXEEXT) \ @ENABLE_F77_TRUE@ pario/dra/big$(EXEEXT) \ @ENABLE_F77_TRUE@ pario/dra/dra_mxm$(EXEEXT) \ @ENABLE_F77_TRUE@ pario/dra/ntest$(EXEEXT) \ @ENABLE_F77_TRUE@ pario/dra/perf$(EXEEXT) \ @ENABLE_F77_TRUE@ pario/dra/perf2$(EXEEXT) \ @ENABLE_F77_TRUE@ pario/dra/perf3$(EXEEXT) \ @ENABLE_F77_TRUE@ pario/dra/test$(EXEEXT) \ @ENABLE_F77_TRUE@ pario/dra/test_mxm$(EXEEXT) \ @ENABLE_F77_TRUE@ pario/dra/time_mxm$(EXEEXT) \ @ENABLE_F77_TRUE@ pario/eaf/test$(EXEEXT) \ @ENABLE_F77_TRUE@ pario/sf/test$(EXEEXT) @CXX_BINDINGS_TRUE@am__EXEEXT_11 = ga++/testing/elempatch$(EXEEXT) \ @CXX_BINDINGS_TRUE@ ga++/testing/mtest$(EXEEXT) \ @CXX_BINDINGS_TRUE@ ga++/testing/ntestc$(EXEEXT) \ @CXX_BINDINGS_TRUE@ ga++/testing/testc$(EXEEXT) \ @CXX_BINDINGS_TRUE@ ga++/testing/testmult$(EXEEXT) @ENABLE_F77_TRUE@@ENABLE_GPARRAYS_TRUE@am__EXEEXT_12 = gparrays/testing/test$(EXEEXT) @ENABLE_GPARRAYS_TRUE@am__EXEEXT_13 = gparrays/testing/testc$(EXEEXT) \ @ENABLE_GPARRAYS_TRUE@ gparrays/testing/transpose$(EXEEXT) @ENABLE_F77_TRUE@am__EXEEXT_14 = gaf2c/testarg$(EXEEXT) @MSG_COMMS_MPI_TRUE@am__EXEEXT_15 = tcgmsg/tests/test_asyn$(EXEEXT) \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tests/test$(EXEEXT) @ENABLE_F77_TRUE@@MSG_COMMS_MPI_TRUE@am__EXEEXT_16 = tcgmsg/tests/testf$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) LIBOBJDIR = compat/ am__ga___testing_elempatch_SOURCES_DIST = ga++/testing/elempatch.cc @CXX_BINDINGS_TRUE@am_ga___testing_elempatch_OBJECTS = \ @CXX_BINDINGS_TRUE@ ga++/testing/elempatch.$(OBJEXT) ga___testing_elempatch_OBJECTS = $(am_ga___testing_elempatch_OBJECTS) am__DEPENDENCIES_4 = $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) @ENABLE_F77_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1) @CXX_BINDINGS_TRUE@ga___testing_elempatch_DEPENDENCIES = libga++.la \ @CXX_BINDINGS_TRUE@ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_5) ga___testing_elempatch_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(ga___testing_elempatch_LDFLAGS) \ $(LDFLAGS) -o $@ am__ga___testing_mtest_SOURCES_DIST = ga++/testing/mtest.cc @CXX_BINDINGS_TRUE@am_ga___testing_mtest_OBJECTS = \ @CXX_BINDINGS_TRUE@ ga++/testing/mtest.$(OBJEXT) ga___testing_mtest_OBJECTS = $(am_ga___testing_mtest_OBJECTS) @CXX_BINDINGS_TRUE@ga___testing_mtest_DEPENDENCIES = libga++.la \ @CXX_BINDINGS_TRUE@ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_5) ga___testing_mtest_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(ga___testing_mtest_LDFLAGS) \ $(LDFLAGS) -o $@ am__ga___testing_ntestc_SOURCES_DIST = ga++/testing/ntestc.cc \ ga++/testing/util.c @CXX_BINDINGS_TRUE@am_ga___testing_ntestc_OBJECTS = \ @CXX_BINDINGS_TRUE@ ga++/testing/ntestc.$(OBJEXT) \ @CXX_BINDINGS_TRUE@ ga++/testing/util.$(OBJEXT) ga___testing_ntestc_OBJECTS = $(am_ga___testing_ntestc_OBJECTS) @CXX_BINDINGS_TRUE@ga___testing_ntestc_DEPENDENCIES = libga++.la \ @CXX_BINDINGS_TRUE@ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_5) ga___testing_ntestc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(ga___testing_ntestc_LDFLAGS) \ $(LDFLAGS) -o $@ am__ga___testing_testc_SOURCES_DIST = ga++/testing/testc.cc @CXX_BINDINGS_TRUE@am_ga___testing_testc_OBJECTS = \ @CXX_BINDINGS_TRUE@ ga++/testing/testc.$(OBJEXT) ga___testing_testc_OBJECTS = $(am_ga___testing_testc_OBJECTS) @CXX_BINDINGS_TRUE@ga___testing_testc_DEPENDENCIES = libga++.la \ @CXX_BINDINGS_TRUE@ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_5) ga___testing_testc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(ga___testing_testc_LDFLAGS) \ $(LDFLAGS) -o $@ am__ga___testing_testmult_SOURCES_DIST = ga++/testing/testmult.cc @CXX_BINDINGS_TRUE@am_ga___testing_testmult_OBJECTS = \ @CXX_BINDINGS_TRUE@ ga++/testing/testmult.$(OBJEXT) ga___testing_testmult_OBJECTS = $(am_ga___testing_testmult_OBJECTS) @CXX_BINDINGS_TRUE@ga___testing_testmult_DEPENDENCIES = libga++.la \ @CXX_BINDINGS_TRUE@ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_5) ga___testing_testmult_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(ga___testing_testmult_LDFLAGS) \ $(LDFLAGS) -o $@ am_gaf2c_testarg_OBJECTS = gaf2c/testarg.$(OBJEXT) \ gaf2c/testargf.$(OBJEXT) gaf2c_testarg_OBJECTS = $(am_gaf2c_testarg_OBJECTS) gaf2c_testarg_LDADD = $(LDADD) gaf2c_testarg_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) gaf2c_testarg_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(gaf2c_testarg_LDFLAGS) $(LDFLAGS) -o \ $@ am__global_X_xregion_SOURCES_DIST = global/X/xregion_colormap.c \ global/X/xregion_dialog.c global/X/xregion_display.c \ global/X/xregion_fileio.c global/X/xregion_main.c \ global/X/xregion_overview.c global/X/xregion_pixregion.c \ global/X/xregion_scrollbars.c global/X/xregion_util.c \ global/X/xregion_view.c global/X/xregion_xcmap.c @ENABLE_XREGION_TRUE@@NO_X_FALSE@am_global_X_xregion_OBJECTS = global/X/global_X_xregion-xregion_colormap.$(OBJEXT) \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@ global/X/global_X_xregion-xregion_dialog.$(OBJEXT) \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@ global/X/global_X_xregion-xregion_display.$(OBJEXT) \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@ global/X/global_X_xregion-xregion_fileio.$(OBJEXT) \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@ global/X/global_X_xregion-xregion_main.$(OBJEXT) \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@ global/X/global_X_xregion-xregion_overview.$(OBJEXT) \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@ global/X/global_X_xregion-xregion_pixregion.$(OBJEXT) \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@ global/X/global_X_xregion-xregion_scrollbars.$(OBJEXT) \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@ global/X/global_X_xregion-xregion_util.$(OBJEXT) \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@ global/X/global_X_xregion-xregion_view.$(OBJEXT) \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@ global/X/global_X_xregion-xregion_xcmap.$(OBJEXT) global_X_xregion_OBJECTS = $(am_global_X_xregion_OBJECTS) global_X_xregion_DEPENDENCIES = global_X_xregion_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(global_X_xregion_LDFLAGS) $(LDFLAGS) \ -o $@ am_global_examples_boltzmann_boltz_OBJECTS = global/examples/boltzmann/global_examples_boltzmann_boltz-boltzmann.$(OBJEXT) \ global/examples/boltzmann/global_examples_boltzmann_boltz-equil.$(OBJEXT) \ global/examples/boltzmann/global_examples_boltzmann_boltz-get_patch.$(OBJEXT) \ global/examples/boltzmann/global_examples_boltzmann_boltz-initpar.$(OBJEXT) \ global/examples/boltzmann/global_examples_boltzmann_boltz-main.$(OBJEXT) \ global/examples/boltzmann/global_examples_boltzmann_boltz-printdat.$(OBJEXT) \ global/examples/boltzmann/global_examples_boltzmann_boltz-properties.$(OBJEXT) \ global/examples/boltzmann/global_examples_boltzmann_boltz-setup.$(OBJEXT) \ global/examples/boltzmann/global_examples_boltzmann_boltz-timestep.$(OBJEXT) \ global/examples/boltzmann/global_examples_boltzmann_boltz-vorticity.$(OBJEXT) global_examples_boltzmann_boltz_OBJECTS = \ $(am_global_examples_boltzmann_boltz_OBJECTS) global_examples_boltzmann_boltz_LDADD = $(LDADD) global_examples_boltzmann_boltz_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_examples_boltzmann_boltz_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) \ $(global_examples_boltzmann_boltz_LDFLAGS) $(LDFLAGS) -o $@ am_global_examples_conjugate_gradient_ga_cg_OBJECTS = \ global/examples/conjugate_gradient/computeloops.$(OBJEXT) \ global/examples/conjugate_gradient/ga_cg.$(OBJEXT) \ global/examples/conjugate_gradient/matvecmul.$(OBJEXT) \ global/examples/conjugate_gradient/read_input.$(OBJEXT) global_examples_conjugate_gradient_ga_cg_OBJECTS = \ $(am_global_examples_conjugate_gradient_ga_cg_OBJECTS) global_examples_conjugate_gradient_ga_cg_LDADD = $(LDADD) global_examples_conjugate_gradient_ga_cg_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_examples_lennard_jones_lennard_OBJECTS = \ global/examples/lennard-jones/lennard.$(OBJEXT) global_examples_lennard_jones_lennard_OBJECTS = \ $(am_global_examples_lennard_jones_lennard_OBJECTS) global_examples_lennard_jones_lennard_LDADD = $(LDADD) global_examples_lennard_jones_lennard_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_examples_md_cluster_grp_sim_OBJECTS = \ global/examples/md_cluster/cell_list.$(OBJEXT) \ global/examples/md_cluster/cl_sim.$(OBJEXT) \ global/examples/md_cluster/cluster.$(OBJEXT) \ global/examples/md_cluster/estats.$(OBJEXT) \ global/examples/md_cluster/factor.$(OBJEXT) \ global/examples/md_cluster/force.$(OBJEXT) \ global/examples/md_cluster/gather.$(OBJEXT) \ global/examples/md_cluster/grp_sim.$(OBJEXT) \ global/examples/md_cluster/hash.$(OBJEXT) \ global/examples/md_cluster/heapsort.$(OBJEXT) \ global/examples/md_cluster/kin.$(OBJEXT) \ global/examples/md_cluster/mdinit.$(OBJEXT) \ global/examples/md_cluster/mdout.$(OBJEXT) \ global/examples/md_cluster/mdstep.$(OBJEXT) \ global/examples/md_cluster/newcfg.$(OBJEXT) \ global/examples/md_cluster/nextc.$(OBJEXT) \ global/examples/md_cluster/pairs.$(OBJEXT) \ global/examples/md_cluster/ran3.$(OBJEXT) \ global/examples/md_cluster/rdpar.$(OBJEXT) \ global/examples/md_cluster/scatter.$(OBJEXT) \ global/examples/md_cluster/shuffle.$(OBJEXT) \ global/examples/md_cluster/sort.$(OBJEXT) \ global/examples/md_cluster/tstats.$(OBJEXT) \ global/examples/md_cluster/update.$(OBJEXT) global_examples_md_cluster_grp_sim_OBJECTS = \ $(am_global_examples_md_cluster_grp_sim_OBJECTS) global_examples_md_cluster_grp_sim_LDADD = $(LDADD) global_examples_md_cluster_grp_sim_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_examples_md_cluster_grp_sim_LINK = $(LIBTOOL) $(AM_V_lt) \ --tag=F77 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ $(F77LD) $(AM_FFLAGS) $(FFLAGS) \ $(global_examples_md_cluster_grp_sim_LDFLAGS) $(LDFLAGS) -o $@ am_global_examples_scf_scf_OBJECTS = \ global/examples/scf/input.$(OBJEXT) \ global/examples/scf/integ.$(OBJEXT) \ global/examples/scf/output.$(OBJEXT) \ global/examples/scf/scf.$(OBJEXT) \ global/examples/scf/timer.$(OBJEXT) global_examples_scf_scf_OBJECTS = \ $(am_global_examples_scf_scf_OBJECTS) global_examples_scf_scf_LDADD = $(LDADD) global_examples_scf_scf_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_examples_scf_scf_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_examples_scf_scf_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_big_SOURCES_DIST = global/testing/big.c \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F @ENABLE_F77_TRUE@am__objects_14 = global/testing/ffflush.$(OBJEXT) \ @ENABLE_F77_TRUE@ global/testing/testblas.$(OBJEXT) am__objects_15 = global/testing/util.$(OBJEXT) $(am__objects_14) am_global_testing_big_OBJECTS = global/testing/big.$(OBJEXT) \ $(am__objects_15) global_testing_big_OBJECTS = $(am_global_testing_big_OBJECTS) global_testing_big_LDADD = $(LDADD) global_testing_big_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_bin_SOURCES_DIST = global/testing/bin.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_bin_OBJECTS = global/testing/bin.$(OBJEXT) \ $(am__objects_15) global_testing_bin_OBJECTS = $(am_global_testing_bin_OBJECTS) global_testing_bin_LDADD = $(LDADD) global_testing_bin_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_bin_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_bin_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_blktest_SOURCES_DIST = global/testing/blktest.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_blktest_OBJECTS = global/testing/blktest.$(OBJEXT) \ $(am__objects_15) global_testing_blktest_OBJECTS = $(am_global_testing_blktest_OBJECTS) global_testing_blktest_LDADD = $(LDADD) global_testing_blktest_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_blktest_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_blktest_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_d2test_SOURCES_DIST = global/testing/d2test.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_d2test_OBJECTS = global/testing/d2test.$(OBJEXT) \ $(am__objects_15) global_testing_d2test_OBJECTS = $(am_global_testing_d2test_OBJECTS) global_testing_d2test_LDADD = $(LDADD) global_testing_d2test_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_d2test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_d2test_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_elempatch_SOURCES_DIST = \ global/testing/elempatch.c global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_elempatch_OBJECTS = \ global/testing/elempatch.$(OBJEXT) $(am__objects_15) global_testing_elempatch_OBJECTS = \ $(am_global_testing_elempatch_OBJECTS) global_testing_elempatch_LDADD = $(LDADD) global_testing_elempatch_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_field_test_SOURCES_DIST = \ global/testing/field-test.F global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_field_test_OBJECTS = \ global/testing/field-test.$(OBJEXT) $(am__objects_15) global_testing_field_test_OBJECTS = \ $(am_global_testing_field_test_OBJECTS) global_testing_field_test_LDADD = $(LDADD) global_testing_field_test_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_field_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_field_test_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_g2test_SOURCES_DIST = global/testing/g2test.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_g2test_OBJECTS = global/testing/g2test.$(OBJEXT) \ $(am__objects_15) global_testing_g2test_OBJECTS = $(am_global_testing_g2test_OBJECTS) global_testing_g2test_LDADD = $(LDADD) global_testing_g2test_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_g2test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_g2test_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_g3test_SOURCES_DIST = global/testing/g3test.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_g3test_OBJECTS = global/testing/g3test.$(OBJEXT) \ $(am__objects_15) global_testing_g3test_OBJECTS = $(am_global_testing_g3test_OBJECTS) global_testing_g3test_LDADD = $(LDADD) global_testing_g3test_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_g3test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_g3test_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_ga_mpi_SOURCES_DIST = global/testing/ga-mpi.c \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_ga_mpi_OBJECTS = global/testing/ga-mpi.$(OBJEXT) \ $(am__objects_15) global_testing_ga_mpi_OBJECTS = $(am_global_testing_ga_mpi_OBJECTS) global_testing_ga_mpi_LDADD = $(LDADD) global_testing_ga_mpi_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_ga_lu_SOURCES_DIST = global/testing/ga_lu.c \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_ga_lu_OBJECTS = global/testing/ga_lu.$(OBJEXT) \ $(am__objects_15) global_testing_ga_lu_OBJECTS = $(am_global_testing_ga_lu_OBJECTS) global_testing_ga_lu_LDADD = $(LDADD) global_testing_ga_lu_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_ga_shift_SOURCES_DIST = global/testing/ga_shift.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_ga_shift_OBJECTS = \ global/testing/ga_shift.$(OBJEXT) $(am__objects_15) global_testing_ga_shift_OBJECTS = \ $(am_global_testing_ga_shift_OBJECTS) global_testing_ga_shift_LDADD = $(LDADD) global_testing_ga_shift_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_ga_shift_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_ga_shift_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_gatscat_SOURCES_DIST = global/testing/gatscat.c \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_gatscat_OBJECTS = global/testing/gatscat.$(OBJEXT) \ $(am__objects_15) global_testing_gatscat_OBJECTS = $(am_global_testing_gatscat_OBJECTS) global_testing_gatscat_LDADD = $(LDADD) global_testing_gatscat_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_getmem_SOURCES_DIST = global/testing/getmem.c \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_getmem_OBJECTS = global/testing/getmem.$(OBJEXT) \ $(am__objects_15) global_testing_getmem_OBJECTS = $(am_global_testing_getmem_OBJECTS) global_testing_getmem_LDADD = $(LDADD) global_testing_getmem_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_ghosts_SOURCES_DIST = global/testing/ghosts.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_ghosts_OBJECTS = global/testing/ghosts.$(OBJEXT) \ $(am__objects_15) global_testing_ghosts_OBJECTS = $(am_global_testing_ghosts_OBJECTS) global_testing_ghosts_LDADD = $(LDADD) global_testing_ghosts_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_ghosts_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_ghosts_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_ipc_clean_SOURCES_DIST = \ global/testing/ipc.clean.c global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_ipc_clean_OBJECTS = \ global/testing/ipc.clean.$(OBJEXT) $(am__objects_15) global_testing_ipc_clean_OBJECTS = \ $(am_global_testing_ipc_clean_OBJECTS) global_testing_ipc_clean_LDADD = $(LDADD) global_testing_ipc_clean_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_jacobi_SOURCES_DIST = global/testing/jacobi.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_jacobi_OBJECTS = global/testing/jacobi.$(OBJEXT) \ $(am__objects_15) global_testing_jacobi_OBJECTS = $(am_global_testing_jacobi_OBJECTS) global_testing_jacobi_LDADD = $(LDADD) global_testing_jacobi_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_jacobi_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_jacobi_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_lock_SOURCES_DIST = global/testing/lock.c \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_lock_OBJECTS = global/testing/lock.$(OBJEXT) \ $(am__objects_15) global_testing_lock_OBJECTS = $(am_global_testing_lock_OBJECTS) global_testing_lock_LDADD = $(LDADD) global_testing_lock_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_mir_perf2_SOURCES_DIST = \ global/testing/mir_perf2.F global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_mir_perf2_OBJECTS = \ global/testing/mir_perf2.$(OBJEXT) $(am__objects_15) global_testing_mir_perf2_OBJECTS = \ $(am_global_testing_mir_perf2_OBJECTS) global_testing_mir_perf2_LDADD = $(LDADD) global_testing_mir_perf2_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_mir_perf2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_mir_perf2_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_mmatrix_SOURCES_DIST = global/testing/mmatrix.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_mmatrix_OBJECTS = global/testing/mmatrix.$(OBJEXT) \ $(am__objects_15) global_testing_mmatrix_OBJECTS = $(am_global_testing_mmatrix_OBJECTS) global_testing_mmatrix_LDADD = $(LDADD) global_testing_mmatrix_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_mmatrix_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_mmatrix_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_mtest_SOURCES_DIST = global/testing/mtest.c \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_mtest_OBJECTS = global/testing/mtest.$(OBJEXT) \ $(am__objects_15) global_testing_mtest_OBJECTS = $(am_global_testing_mtest_OBJECTS) global_testing_mtest_LDADD = $(LDADD) global_testing_mtest_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_mulmatpatch_SOURCES_DIST = \ global/testing/mulmatpatch.F global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_mulmatpatch_OBJECTS = \ global/testing/mulmatpatch.$(OBJEXT) $(am__objects_15) global_testing_mulmatpatch_OBJECTS = \ $(am_global_testing_mulmatpatch_OBJECTS) global_testing_mulmatpatch_LDADD = $(LDADD) global_testing_mulmatpatch_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_mulmatpatch_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_mulmatpatch_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_mulmatpatchc_SOURCES_DIST = \ global/testing/mulmatpatchc.c global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_mulmatpatchc_OBJECTS = \ global/testing/mulmatpatchc.$(OBJEXT) $(am__objects_15) global_testing_mulmatpatchc_OBJECTS = \ $(am_global_testing_mulmatpatchc_OBJECTS) global_testing_mulmatpatchc_LDADD = $(LDADD) global_testing_mulmatpatchc_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_nb2test_SOURCES_DIST = global/testing/nb2test.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_nb2test_OBJECTS = global/testing/nb2test.$(OBJEXT) \ $(am__objects_15) global_testing_nb2test_OBJECTS = $(am_global_testing_nb2test_OBJECTS) global_testing_nb2test_LDADD = $(LDADD) global_testing_nb2test_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_nb2test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_nb2test_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_ndim_SOURCES_DIST = global/testing/ndim.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_ndim_OBJECTS = global/testing/ndim.$(OBJEXT) \ $(am__objects_15) global_testing_ndim_OBJECTS = $(am_global_testing_ndim_OBJECTS) global_testing_ndim_LDADD = $(LDADD) global_testing_ndim_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_ndim_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_ndim_LDFLAGS) \ $(LDFLAGS) -o $@ nodist_global_testing_nga_onesided_OBJECTS = \ global/testing/nga-onesided.$(OBJEXT) $(am__objects_15) global_testing_nga_onesided_OBJECTS = \ $(nodist_global_testing_nga_onesided_OBJECTS) global_testing_nga_onesided_LDADD = $(LDADD) global_testing_nga_onesided_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_nga_onesided_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_nga_onesided_LDFLAGS) \ $(LDFLAGS) -o $@ nodist_global_testing_nga_patch_OBJECTS = \ global/testing/nga-patch.$(OBJEXT) $(am__objects_15) global_testing_nga_patch_OBJECTS = \ $(nodist_global_testing_nga_patch_OBJECTS) global_testing_nga_patch_LDADD = $(LDADD) global_testing_nga_patch_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_nga_patch_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_nga_patch_LDFLAGS) \ $(LDFLAGS) -o $@ nodist_global_testing_nga_periodic_OBJECTS = \ global/testing/nga-periodic.$(OBJEXT) $(am__objects_15) global_testing_nga_periodic_OBJECTS = \ $(nodist_global_testing_nga_periodic_OBJECTS) global_testing_nga_periodic_LDADD = $(LDADD) global_testing_nga_periodic_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_nga_periodic_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_nga_periodic_LDFLAGS) \ $(LDFLAGS) -o $@ nodist_global_testing_nga_scatter_OBJECTS = \ global/testing/nga-scatter.$(OBJEXT) $(am__objects_15) global_testing_nga_scatter_OBJECTS = \ $(nodist_global_testing_nga_scatter_OBJECTS) global_testing_nga_scatter_LDADD = $(LDADD) global_testing_nga_scatter_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_nga_scatter_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_nga_scatter_LDFLAGS) \ $(LDFLAGS) -o $@ nodist_global_testing_nga_util_OBJECTS = \ global/testing/nga-util.$(OBJEXT) $(am__objects_15) global_testing_nga_util_OBJECTS = \ $(nodist_global_testing_nga_util_OBJECTS) global_testing_nga_util_LDADD = $(LDADD) global_testing_nga_util_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_nga_util_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_nga_util_LDFLAGS) \ $(LDFLAGS) -o $@ nodist_global_testing_ngatest_OBJECTS = \ global/testing/ngatest.$(OBJEXT) $(am__objects_15) global_testing_ngatest_OBJECTS = \ $(nodist_global_testing_ngatest_OBJECTS) global_testing_ngatest_LDADD = $(LDADD) global_testing_ngatest_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_ngatest_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_ngatest_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_ntestc_SOURCES_DIST = global/testing/ntestc.c \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_ntestc_OBJECTS = global/testing/ntestc.$(OBJEXT) \ $(am__objects_15) global_testing_ntestc_OBJECTS = $(am_global_testing_ntestc_OBJECTS) global_testing_ntestc_LDADD = $(LDADD) global_testing_ntestc_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_ntestfc_SOURCES_DIST = global/testing/ntestfc.c \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_ntestfc_OBJECTS = global/testing/ntestfc.$(OBJEXT) \ $(am__objects_15) global_testing_ntestfc_OBJECTS = $(am_global_testing_ntestfc_OBJECTS) global_testing_ntestfc_LDADD = $(LDADD) global_testing_ntestfc_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_packc_SOURCES_DIST = global/testing/packc.c \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_packc_OBJECTS = global/testing/packc.$(OBJEXT) \ $(am__objects_15) global_testing_packc_OBJECTS = $(am_global_testing_packc_OBJECTS) global_testing_packc_LDADD = $(LDADD) global_testing_packc_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_patch_SOURCES_DIST = global/testing/patch.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_patch_OBJECTS = global/testing/patch.$(OBJEXT) \ $(am__objects_15) global_testing_patch_OBJECTS = $(am_global_testing_patch_OBJECTS) global_testing_patch_LDADD = $(LDADD) global_testing_patch_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_patch_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_patch_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_patch2_SOURCES_DIST = global/testing/patch2.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_patch2_OBJECTS = global/testing/patch2.$(OBJEXT) \ $(am__objects_15) global_testing_patch2_OBJECTS = $(am_global_testing_patch2_OBJECTS) global_testing_patch2_LDADD = $(LDADD) global_testing_patch2_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_patch2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_patch2_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_patch_enumc_SOURCES_DIST = \ global/testing/patch_enumc.c global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_patch_enumc_OBJECTS = \ global/testing/patch_enumc.$(OBJEXT) $(am__objects_15) global_testing_patch_enumc_OBJECTS = \ $(am_global_testing_patch_enumc_OBJECTS) global_testing_patch_enumc_LDADD = $(LDADD) global_testing_patch_enumc_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_patch_enumf_SOURCES_DIST = \ global/testing/patch_enumf.F global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_patch_enumf_OBJECTS = \ global/testing/patch_enumf.$(OBJEXT) $(am__objects_15) global_testing_patch_enumf_OBJECTS = \ $(am_global_testing_patch_enumf_OBJECTS) global_testing_patch_enumf_LDADD = $(LDADD) global_testing_patch_enumf_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_patch_enumf_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_patch_enumf_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_perf_SOURCES_DIST = global/testing/perf.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_perf_OBJECTS = global/testing/perf.$(OBJEXT) \ $(am__objects_15) global_testing_perf_OBJECTS = $(am_global_testing_perf_OBJECTS) global_testing_perf_LDADD = $(LDADD) global_testing_perf_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_perf_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_perf_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_perf2_SOURCES_DIST = global/testing/perf2.c \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_perf2_OBJECTS = global/testing/perf2.$(OBJEXT) \ $(am__objects_15) global_testing_perf2_OBJECTS = $(am_global_testing_perf2_OBJECTS) global_testing_perf2_LDADD = $(LDADD) global_testing_perf2_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_perfmod_SOURCES_DIST = global/testing/perfmod.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_perfmod_OBJECTS = global/testing/perfmod.$(OBJEXT) \ $(am__objects_15) global_testing_perfmod_OBJECTS = $(am_global_testing_perfmod_OBJECTS) global_testing_perfmod_LDADD = $(LDADD) global_testing_perfmod_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_perfmod_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_perfmod_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_perform_SOURCES_DIST = global/testing/perform.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_perform_OBJECTS = global/testing/perform.$(OBJEXT) \ $(am__objects_15) global_testing_perform_OBJECTS = $(am_global_testing_perform_OBJECTS) global_testing_perform_LDADD = $(LDADD) global_testing_perform_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_perform_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_perform_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_pg2test_SOURCES_DIST = global/testing/pg2test.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_pg2test_OBJECTS = global/testing/pg2test.$(OBJEXT) \ $(am__objects_15) global_testing_pg2test_OBJECTS = $(am_global_testing_pg2test_OBJECTS) global_testing_pg2test_LDADD = $(LDADD) global_testing_pg2test_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_pg2test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_pg2test_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_pg2testmatmult_SOURCES_DIST = \ global/testing/pg2testmatmult.F global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_pg2testmatmult_OBJECTS = \ global/testing/pg2testmatmult.$(OBJEXT) $(am__objects_15) global_testing_pg2testmatmult_OBJECTS = \ $(am_global_testing_pg2testmatmult_OBJECTS) global_testing_pg2testmatmult_LDADD = $(LDADD) global_testing_pg2testmatmult_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_pg2testmatmult_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) \ $(global_testing_pg2testmatmult_LDFLAGS) $(LDFLAGS) -o $@ am__global_testing_pgtest_SOURCES_DIST = global/testing/pgtest.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_pgtest_OBJECTS = global/testing/pgtest.$(OBJEXT) \ $(am__objects_15) global_testing_pgtest_OBJECTS = $(am_global_testing_pgtest_OBJECTS) global_testing_pgtest_LDADD = $(LDADD) global_testing_pgtest_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_pgtest_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_pgtest_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_pgtestmatmult_SOURCES_DIST = \ global/testing/pgtestmatmult.F global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_pgtestmatmult_OBJECTS = \ global/testing/pgtestmatmult.$(OBJEXT) $(am__objects_15) global_testing_pgtestmatmult_OBJECTS = \ $(am_global_testing_pgtestmatmult_OBJECTS) global_testing_pgtestmatmult_LDADD = $(LDADD) global_testing_pgtestmatmult_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_pgtestmatmult_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_pgtestmatmult_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_print_SOURCES_DIST = global/testing/print.c \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_print_OBJECTS = global/testing/print.$(OBJEXT) \ $(am__objects_15) global_testing_print_OBJECTS = $(am_global_testing_print_OBJECTS) global_testing_print_LDADD = $(LDADD) global_testing_print_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_random_SOURCES_DIST = global/testing/random.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_random_OBJECTS = global/testing/random.$(OBJEXT) \ $(am__objects_15) global_testing_random_OBJECTS = $(am_global_testing_random_OBJECTS) global_testing_random_LDADD = $(LDADD) global_testing_random_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_random_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_random_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_scan_SOURCES_DIST = global/testing/scan.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_scan_OBJECTS = global/testing/scan.$(OBJEXT) \ $(am__objects_15) global_testing_scan_OBJECTS = $(am_global_testing_scan_OBJECTS) global_testing_scan_LDADD = $(LDADD) global_testing_scan_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_scan_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_scan_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_scan_addc_SOURCES_DIST = \ global/testing/scan_addc.c global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_scan_addc_OBJECTS = \ global/testing/scan_addc.$(OBJEXT) $(am__objects_15) global_testing_scan_addc_OBJECTS = \ $(am_global_testing_scan_addc_OBJECTS) global_testing_scan_addc_LDADD = $(LDADD) global_testing_scan_addc_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_scan_copyc_SOURCES_DIST = \ global/testing/scan_copyc.c global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_scan_copyc_OBJECTS = \ global/testing/scan_copyc.$(OBJEXT) $(am__objects_15) global_testing_scan_copyc_OBJECTS = \ $(am_global_testing_scan_copyc_OBJECTS) global_testing_scan_copyc_LDADD = $(LDADD) global_testing_scan_copyc_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_simple_groups_SOURCES_DIST = \ global/testing/simple_groups.F global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_simple_groups_OBJECTS = \ global/testing/simple_groups.$(OBJEXT) $(am__objects_15) global_testing_simple_groups_OBJECTS = \ $(am_global_testing_simple_groups_OBJECTS) global_testing_simple_groups_LDADD = $(LDADD) global_testing_simple_groups_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_simple_groups_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_simple_groups_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_simple_groups_comm_SOURCES_DIST = \ global/testing/simple_groups_comm.F global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_simple_groups_comm_OBJECTS = \ global/testing/simple_groups_comm.$(OBJEXT) $(am__objects_15) global_testing_simple_groups_comm_OBJECTS = \ $(am_global_testing_simple_groups_comm_OBJECTS) global_testing_simple_groups_comm_LDADD = $(LDADD) global_testing_simple_groups_comm_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_simple_groups_comm_LINK = $(LIBTOOL) $(AM_V_lt) \ --tag=F77 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ $(F77LD) $(AM_FFLAGS) $(FFLAGS) \ $(global_testing_simple_groups_comm_LDFLAGS) $(LDFLAGS) -o $@ am__global_testing_simple_groups_commc_SOURCES_DIST = \ global/testing/simple_groups_commc.c \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_simple_groups_commc_OBJECTS = \ global/testing/simple_groups_commc.$(OBJEXT) $(am__objects_15) global_testing_simple_groups_commc_OBJECTS = \ $(am_global_testing_simple_groups_commc_OBJECTS) global_testing_simple_groups_commc_LDADD = $(LDADD) global_testing_simple_groups_commc_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_sparse_SOURCES_DIST = global/testing/sparse.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_sparse_OBJECTS = global/testing/sparse.$(OBJEXT) \ $(am__objects_15) global_testing_sparse_OBJECTS = $(am_global_testing_sparse_OBJECTS) global_testing_sparse_LDADD = $(LDADD) global_testing_sparse_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_sparse_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_sparse_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_sprsmatmult_SOURCES_DIST = \ global/testing/sprsmatmult.F global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_sprsmatmult_OBJECTS = \ global/testing/sprsmatmult.$(OBJEXT) $(am__objects_15) global_testing_sprsmatmult_OBJECTS = \ $(am_global_testing_sprsmatmult_OBJECTS) global_testing_sprsmatmult_LDADD = $(LDADD) global_testing_sprsmatmult_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_sprsmatmult_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_sprsmatmult_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_stride_SOURCES_DIST = global/testing/stride.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_stride_OBJECTS = global/testing/stride.$(OBJEXT) \ $(am__objects_15) global_testing_stride_OBJECTS = $(am_global_testing_stride_OBJECTS) global_testing_stride_LDADD = $(LDADD) global_testing_stride_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_stride_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_stride_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_test_SOURCES_DIST = global/testing/test.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_test_OBJECTS = global/testing/test.$(OBJEXT) \ $(am__objects_15) global_testing_test_OBJECTS = $(am_global_testing_test_OBJECTS) global_testing_test_LDADD = $(LDADD) global_testing_test_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_test_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_test_mirrored_SOURCES_DIST = global/testing/test.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F @ENABLE_F77_TRUE@am__objects_16 = global/testing/global_testing_test_mirrored-ffflush.$(OBJEXT) \ @ENABLE_F77_TRUE@ global/testing/global_testing_test_mirrored-testblas.$(OBJEXT) am__objects_17 = \ global/testing/global_testing_test_mirrored-util.$(OBJEXT) \ $(am__objects_16) am_global_testing_test_mirrored_OBJECTS = \ global/testing/global_testing_test_mirrored-test.$(OBJEXT) \ $(am__objects_17) global_testing_test_mirrored_OBJECTS = \ $(am_global_testing_test_mirrored_OBJECTS) global_testing_test_mirrored_LDADD = $(LDADD) global_testing_test_mirrored_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_test_mirrored_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_test_mirrored_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_testc_SOURCES_DIST = global/testing/testc.c \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_testc_OBJECTS = global/testing/testc.$(OBJEXT) \ $(am__objects_15) global_testing_testc_OBJECTS = $(am_global_testing_testc_OBJECTS) global_testing_testc_LDADD = $(LDADD) global_testing_testc_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_testeig_SOURCES_DIST = global/testing/testeig.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_testeig_OBJECTS = global/testing/testeig.$(OBJEXT) \ $(am__objects_15) global_testing_testeig_OBJECTS = $(am_global_testing_testeig_OBJECTS) global_testing_testeig_LDADD = $(LDADD) global_testing_testeig_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_testeig_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_testeig_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_testmatmult_SOURCES_DIST = \ global/testing/testmatmult.F global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_testmatmult_OBJECTS = \ global/testing/testmatmult.$(OBJEXT) $(am__objects_15) global_testing_testmatmult_OBJECTS = \ $(am_global_testing_testmatmult_OBJECTS) global_testing_testmatmult_LDADD = $(LDADD) global_testing_testmatmult_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_testmatmult_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_testmatmult_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_testmatmultc_SOURCES_DIST = \ global/testing/testmatmultc.c global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_testmatmultc_OBJECTS = \ global/testing/testmatmultc.$(OBJEXT) $(am__objects_15) global_testing_testmatmultc_OBJECTS = \ $(am_global_testing_testmatmultc_OBJECTS) global_testing_testmatmultc_LDADD = $(LDADD) global_testing_testmatmultc_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_testmult_SOURCES_DIST = global/testing/testmult.c \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_testmult_OBJECTS = \ global/testing/testmult.$(OBJEXT) $(am__objects_15) global_testing_testmult_OBJECTS = \ $(am_global_testing_testmult_OBJECTS) global_testing_testmult_LDADD = $(LDADD) global_testing_testmult_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_testmultrect_SOURCES_DIST = \ global/testing/testmultrect.c global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_testmultrect_OBJECTS = \ global/testing/testmultrect.$(OBJEXT) $(am__objects_15) global_testing_testmultrect_OBJECTS = \ $(am_global_testing_testmultrect_OBJECTS) global_testing_testmultrect_LDADD = $(LDADD) global_testing_testmultrect_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_testsolve_SOURCES_DIST = \ global/testing/testsolve.F global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_testsolve_OBJECTS = \ global/testing/testsolve.$(OBJEXT) $(am__objects_15) global_testing_testsolve_OBJECTS = \ $(am_global_testing_testsolve_OBJECTS) global_testing_testsolve_LDADD = $(LDADD) global_testing_testsolve_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_testsolve_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_testsolve_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_testspd_SOURCES_DIST = global/testing/testspd.F \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_testspd_OBJECTS = global/testing/testspd.$(OBJEXT) \ $(am__objects_15) global_testing_testspd_OBJECTS = $(am_global_testing_testspd_OBJECTS) global_testing_testspd_LDADD = $(LDADD) global_testing_testspd_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_testspd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_testspd_LDFLAGS) \ $(LDFLAGS) -o $@ am__global_testing_types_test_SOURCES_DIST = \ global/testing/types-test.F global/testing/testutil.fh \ global/testing/testutil.h global/testing/util.c \ global/testing/ffflush.F global/testing/testblas.F am_global_testing_types_test_OBJECTS = \ global/testing/types-test.$(OBJEXT) $(am__objects_15) global_testing_types_test_OBJECTS = \ $(am_global_testing_types_test_OBJECTS) global_testing_types_test_LDADD = $(LDADD) global_testing_types_test_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) global_testing_types_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(global_testing_types_test_LDFLAGS) \ $(LDFLAGS) -o $@ am__objects_18 = global/testing/unit-tests/mock.$(OBJEXT) am_global_testing_unit_tests_ga_abs_value_OBJECTS = \ global/testing/unit-tests/ga_abs_value.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_abs_value_OBJECTS = \ $(am_global_testing_unit_tests_ga_abs_value_OBJECTS) global_testing_unit_tests_ga_abs_value_LDADD = $(LDADD) global_testing_unit_tests_ga_abs_value_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_acc_OBJECTS = \ global/testing/unit-tests/ga_acc.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_acc_OBJECTS = \ $(am_global_testing_unit_tests_ga_acc_OBJECTS) global_testing_unit_tests_ga_acc_LDADD = $(LDADD) global_testing_unit_tests_ga_acc_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_add_OBJECTS = \ global/testing/unit-tests/ga_add.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_add_OBJECTS = \ $(am_global_testing_unit_tests_ga_add_OBJECTS) global_testing_unit_tests_ga_add_LDADD = $(LDADD) global_testing_unit_tests_ga_add_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_add_constant_OBJECTS = \ global/testing/unit-tests/ga_add_constant.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_add_constant_OBJECTS = \ $(am_global_testing_unit_tests_ga_add_constant_OBJECTS) global_testing_unit_tests_ga_add_constant_LDADD = $(LDADD) global_testing_unit_tests_ga_add_constant_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_add_constantpatch_OBJECTS = \ global/testing/unit-tests/ga_add_constantpatch.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_add_constantpatch_OBJECTS = \ $(am_global_testing_unit_tests_ga_add_constantpatch_OBJECTS) global_testing_unit_tests_ga_add_constantpatch_LDADD = $(LDADD) global_testing_unit_tests_ga_add_constantpatch_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_add_diagonal_OBJECTS = \ global/testing/unit-tests/ga_add_diagonal.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_add_diagonal_OBJECTS = \ $(am_global_testing_unit_tests_ga_add_diagonal_OBJECTS) global_testing_unit_tests_ga_add_diagonal_LDADD = $(LDADD) global_testing_unit_tests_ga_add_diagonal_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_add_patch_OBJECTS = \ global/testing/unit-tests/ga_add_patch.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_add_patch_OBJECTS = \ $(am_global_testing_unit_tests_ga_add_patch_OBJECTS) global_testing_unit_tests_ga_add_patch_LDADD = $(LDADD) global_testing_unit_tests_ga_add_patch_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_copy_OBJECTS = \ global/testing/unit-tests/ga_copy.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_copy_OBJECTS = \ $(am_global_testing_unit_tests_ga_copy_OBJECTS) global_testing_unit_tests_ga_copy_LDADD = $(LDADD) global_testing_unit_tests_ga_copy_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_copy2_OBJECTS = \ global/testing/unit-tests/ga_copy2.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_copy2_OBJECTS = \ $(am_global_testing_unit_tests_ga_copy2_OBJECTS) global_testing_unit_tests_ga_copy2_LDADD = $(LDADD) global_testing_unit_tests_ga_copy2_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_copy3_OBJECTS = \ global/testing/unit-tests/ga_copy3.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_copy3_OBJECTS = \ $(am_global_testing_unit_tests_ga_copy3_OBJECTS) global_testing_unit_tests_ga_copy3_LDADD = $(LDADD) global_testing_unit_tests_ga_copy3_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_copypatch_OBJECTS = \ global/testing/unit-tests/ga_copypatch.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_copypatch_OBJECTS = \ $(am_global_testing_unit_tests_ga_copypatch_OBJECTS) global_testing_unit_tests_ga_copypatch_LDADD = $(LDADD) global_testing_unit_tests_ga_copypatch_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_copypatch2_OBJECTS = \ global/testing/unit-tests/ga_copypatch2.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_copypatch2_OBJECTS = \ $(am_global_testing_unit_tests_ga_copypatch2_OBJECTS) global_testing_unit_tests_ga_copypatch2_LDADD = $(LDADD) global_testing_unit_tests_ga_copypatch2_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_create_OBJECTS = \ global/testing/unit-tests/ga_create.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_create_OBJECTS = \ $(am_global_testing_unit_tests_ga_create_OBJECTS) global_testing_unit_tests_ga_create_LDADD = $(LDADD) global_testing_unit_tests_ga_create_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_create1_OBJECTS = \ global/testing/unit-tests/ga_create1.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_create1_OBJECTS = \ $(am_global_testing_unit_tests_ga_create1_OBJECTS) global_testing_unit_tests_ga_create1_LDADD = $(LDADD) global_testing_unit_tests_ga_create1_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_create2_OBJECTS = \ global/testing/unit-tests/ga_create2.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_create2_OBJECTS = \ $(am_global_testing_unit_tests_ga_create2_OBJECTS) global_testing_unit_tests_ga_create2_LDADD = $(LDADD) global_testing_unit_tests_ga_create2_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_create3_OBJECTS = \ global/testing/unit-tests/ga_create3.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_create3_OBJECTS = \ $(am_global_testing_unit_tests_ga_create3_OBJECTS) global_testing_unit_tests_ga_create3_LDADD = $(LDADD) global_testing_unit_tests_ga_create3_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_create_handle_OBJECTS = \ global/testing/unit-tests/ga_create_handle.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_create_handle_OBJECTS = \ $(am_global_testing_unit_tests_ga_create_handle_OBJECTS) global_testing_unit_tests_ga_create_handle_LDADD = $(LDADD) global_testing_unit_tests_ga_create_handle_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_create_irreg_OBJECTS = \ global/testing/unit-tests/ga_create_irreg.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_create_irreg_OBJECTS = \ $(am_global_testing_unit_tests_ga_create_irreg_OBJECTS) global_testing_unit_tests_ga_create_irreg_LDADD = $(LDADD) global_testing_unit_tests_ga_create_irreg_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_create_irreg2_OBJECTS = \ global/testing/unit-tests/ga_create_irreg2.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_create_irreg2_OBJECTS = \ $(am_global_testing_unit_tests_ga_create_irreg2_OBJECTS) global_testing_unit_tests_ga_create_irreg2_LDADD = $(LDADD) global_testing_unit_tests_ga_create_irreg2_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_create_irreg3_OBJECTS = \ global/testing/unit-tests/ga_create_irreg3.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_create_irreg3_OBJECTS = \ $(am_global_testing_unit_tests_ga_create_irreg3_OBJECTS) global_testing_unit_tests_ga_create_irreg3_LDADD = $(LDADD) global_testing_unit_tests_ga_create_irreg3_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_destroy_OBJECTS = \ global/testing/unit-tests/ga_destroy.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_destroy_OBJECTS = \ $(am_global_testing_unit_tests_ga_destroy_OBJECTS) global_testing_unit_tests_ga_destroy_LDADD = $(LDADD) global_testing_unit_tests_ga_destroy_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_dgop_OBJECTS = \ global/testing/unit-tests/ga_dgop.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_dgop_OBJECTS = \ $(am_global_testing_unit_tests_ga_dgop_OBJECTS) global_testing_unit_tests_ga_dgop_LDADD = $(LDADD) global_testing_unit_tests_ga_dgop_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_dot_OBJECTS = \ global/testing/unit-tests/ga_dot.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_dot_OBJECTS = \ $(am_global_testing_unit_tests_ga_dot_OBJECTS) global_testing_unit_tests_ga_dot_LDADD = $(LDADD) global_testing_unit_tests_ga_dot_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_duplicate_OBJECTS = \ global/testing/unit-tests/ga_duplicate.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_duplicate_OBJECTS = \ $(am_global_testing_unit_tests_ga_duplicate_OBJECTS) global_testing_unit_tests_ga_duplicate_LDADD = $(LDADD) global_testing_unit_tests_ga_duplicate_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_elem_divide_OBJECTS = \ global/testing/unit-tests/ga_elem_divide.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_elem_divide_OBJECTS = \ $(am_global_testing_unit_tests_ga_elem_divide_OBJECTS) global_testing_unit_tests_ga_elem_divide_LDADD = $(LDADD) global_testing_unit_tests_ga_elem_divide_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_elem_dividepatch_OBJECTS = \ global/testing/unit-tests/ga_elem_dividepatch.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_elem_dividepatch_OBJECTS = \ $(am_global_testing_unit_tests_ga_elem_dividepatch_OBJECTS) global_testing_unit_tests_ga_elem_dividepatch_LDADD = $(LDADD) global_testing_unit_tests_ga_elem_dividepatch_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_elem_maximum_OBJECTS = \ global/testing/unit-tests/ga_elem_maximum.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_elem_maximum_OBJECTS = \ $(am_global_testing_unit_tests_ga_elem_maximum_OBJECTS) global_testing_unit_tests_ga_elem_maximum_LDADD = $(LDADD) global_testing_unit_tests_ga_elem_maximum_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_elem_maximumpatch_OBJECTS = \ global/testing/unit-tests/ga_elem_maximumpatch.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_elem_maximumpatch_OBJECTS = \ $(am_global_testing_unit_tests_ga_elem_maximumpatch_OBJECTS) global_testing_unit_tests_ga_elem_maximumpatch_LDADD = $(LDADD) global_testing_unit_tests_ga_elem_maximumpatch_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_elem_minimum_OBJECTS = \ global/testing/unit-tests/ga_elem_minimum.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_elem_minimum_OBJECTS = \ $(am_global_testing_unit_tests_ga_elem_minimum_OBJECTS) global_testing_unit_tests_ga_elem_minimum_LDADD = $(LDADD) global_testing_unit_tests_ga_elem_minimum_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_elem_minimumpatch_OBJECTS = \ global/testing/unit-tests/ga_elem_minimumpatch.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_elem_minimumpatch_OBJECTS = \ $(am_global_testing_unit_tests_ga_elem_minimumpatch_OBJECTS) global_testing_unit_tests_ga_elem_minimumpatch_LDADD = $(LDADD) global_testing_unit_tests_ga_elem_minimumpatch_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_elem_multiply_OBJECTS = \ global/testing/unit-tests/ga_elem_multiply.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_elem_multiply_OBJECTS = \ $(am_global_testing_unit_tests_ga_elem_multiply_OBJECTS) global_testing_unit_tests_ga_elem_multiply_LDADD = $(LDADD) global_testing_unit_tests_ga_elem_multiply_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_elem_multiplypatch_OBJECTS = \ global/testing/unit-tests/ga_elem_multiplypatch.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_elem_multiplypatch_OBJECTS = \ $(am_global_testing_unit_tests_ga_elem_multiplypatch_OBJECTS) global_testing_unit_tests_ga_elem_multiplypatch_LDADD = $(LDADD) global_testing_unit_tests_ga_elem_multiplypatch_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_fill_OBJECTS = \ global/testing/unit-tests/ga_fill.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_fill_OBJECTS = \ $(am_global_testing_unit_tests_ga_fill_OBJECTS) global_testing_unit_tests_ga_fill_LDADD = $(LDADD) global_testing_unit_tests_ga_fill_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_fillpatch_OBJECTS = \ global/testing/unit-tests/ga_fillpatch.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_fillpatch_OBJECTS = \ $(am_global_testing_unit_tests_ga_fillpatch_OBJECTS) global_testing_unit_tests_ga_fillpatch_LDADD = $(LDADD) global_testing_unit_tests_ga_fillpatch_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_fillpatch1_OBJECTS = \ global/testing/unit-tests/ga_fillpatch1.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_fillpatch1_OBJECTS = \ $(am_global_testing_unit_tests_ga_fillpatch1_OBJECTS) global_testing_unit_tests_ga_fillpatch1_LDADD = $(LDADD) global_testing_unit_tests_ga_fillpatch1_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_gather_OBJECTS = \ global/testing/unit-tests/ga_gather.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_gather_OBJECTS = \ $(am_global_testing_unit_tests_ga_gather_OBJECTS) global_testing_unit_tests_ga_gather_LDADD = $(LDADD) global_testing_unit_tests_ga_gather_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_gather2_OBJECTS = \ global/testing/unit-tests/ga_gather2.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_gather2_OBJECTS = \ $(am_global_testing_unit_tests_ga_gather2_OBJECTS) global_testing_unit_tests_ga_gather2_LDADD = $(LDADD) global_testing_unit_tests_ga_gather2_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_gather3_OBJECTS = \ global/testing/unit-tests/ga_gather3.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_gather3_OBJECTS = \ $(am_global_testing_unit_tests_ga_gather3_OBJECTS) global_testing_unit_tests_ga_gather3_LDADD = $(LDADD) global_testing_unit_tests_ga_gather3_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_get_OBJECTS = \ global/testing/unit-tests/ga_get.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_get_OBJECTS = \ $(am_global_testing_unit_tests_ga_get_OBJECTS) global_testing_unit_tests_ga_get_LDADD = $(LDADD) global_testing_unit_tests_ga_get_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_get_blockinfo_OBJECTS = \ global/testing/unit-tests/ga_get_blockinfo.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_get_blockinfo_OBJECTS = \ $(am_global_testing_unit_tests_ga_get_blockinfo_OBJECTS) global_testing_unit_tests_ga_get_blockinfo_LDADD = $(LDADD) global_testing_unit_tests_ga_get_blockinfo_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_get_diagonal_OBJECTS = \ global/testing/unit-tests/ga_get_diagonal.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_get_diagonal_OBJECTS = \ $(am_global_testing_unit_tests_ga_get_diagonal_OBJECTS) global_testing_unit_tests_ga_get_diagonal_LDADD = $(LDADD) global_testing_unit_tests_ga_get_diagonal_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_igop_OBJECTS = \ global/testing/unit-tests/ga_igop.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_igop_OBJECTS = \ $(am_global_testing_unit_tests_ga_igop_OBJECTS) global_testing_unit_tests_ga_igop_LDADD = $(LDADD) global_testing_unit_tests_ga_igop_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_igop2_OBJECTS = \ global/testing/unit-tests/ga_igop2.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_igop2_OBJECTS = \ $(am_global_testing_unit_tests_ga_igop2_OBJECTS) global_testing_unit_tests_ga_igop2_LDADD = $(LDADD) global_testing_unit_tests_ga_igop2_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_inquire_OBJECTS = \ global/testing/unit-tests/ga_inquire.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_inquire_OBJECTS = \ $(am_global_testing_unit_tests_ga_inquire_OBJECTS) global_testing_unit_tests_ga_inquire_LDADD = $(LDADD) global_testing_unit_tests_ga_inquire_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_intialize_OBJECTS = \ global/testing/unit-tests/ga_intialize.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_intialize_OBJECTS = \ $(am_global_testing_unit_tests_ga_intialize_OBJECTS) global_testing_unit_tests_ga_intialize_LDADD = $(LDADD) global_testing_unit_tests_ga_intialize_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_lgop_OBJECTS = \ global/testing/unit-tests/ga_lgop.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_lgop_OBJECTS = \ $(am_global_testing_unit_tests_ga_lgop_OBJECTS) global_testing_unit_tests_ga_lgop_LDADD = $(LDADD) global_testing_unit_tests_ga_lgop_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_median_OBJECTS = \ global/testing/unit-tests/ga_median.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_median_OBJECTS = \ $(am_global_testing_unit_tests_ga_median_OBJECTS) global_testing_unit_tests_ga_median_LDADD = $(LDADD) global_testing_unit_tests_ga_median_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_ndim_OBJECTS = \ global/testing/unit-tests/ga_ndim.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_ndim_OBJECTS = \ $(am_global_testing_unit_tests_ga_ndim_OBJECTS) global_testing_unit_tests_ga_ndim_LDADD = $(LDADD) global_testing_unit_tests_ga_ndim_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_ndim2_OBJECTS = \ global/testing/unit-tests/ga_ndim2.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_ndim2_OBJECTS = \ $(am_global_testing_unit_tests_ga_ndim2_OBJECTS) global_testing_unit_tests_ga_ndim2_LDADD = $(LDADD) global_testing_unit_tests_ga_ndim2_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_nnodes_OBJECTS = \ global/testing/unit-tests/ga_nnodes.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_nnodes_OBJECTS = \ $(am_global_testing_unit_tests_ga_nnodes_OBJECTS) global_testing_unit_tests_ga_nnodes_LDADD = $(LDADD) global_testing_unit_tests_ga_nnodes_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_nodeid_OBJECTS = \ global/testing/unit-tests/ga_nodeid.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_nodeid_OBJECTS = \ $(am_global_testing_unit_tests_ga_nodeid_OBJECTS) global_testing_unit_tests_ga_nodeid_LDADD = $(LDADD) global_testing_unit_tests_ga_nodeid_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_pgroup_create_OBJECTS = \ global/testing/unit-tests/ga_pgroup_create.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_pgroup_create_OBJECTS = \ $(am_global_testing_unit_tests_ga_pgroup_create_OBJECTS) global_testing_unit_tests_ga_pgroup_create_LDADD = $(LDADD) global_testing_unit_tests_ga_pgroup_create_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_pgroup_create2_OBJECTS = \ global/testing/unit-tests/ga_pgroup_create2.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_pgroup_create2_OBJECTS = \ $(am_global_testing_unit_tests_ga_pgroup_create2_OBJECTS) global_testing_unit_tests_ga_pgroup_create2_LDADD = $(LDADD) global_testing_unit_tests_ga_pgroup_create2_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_pgroup_create3_OBJECTS = \ global/testing/unit-tests/ga_pgroup_create3.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_pgroup_create3_OBJECTS = \ $(am_global_testing_unit_tests_ga_pgroup_create3_OBJECTS) global_testing_unit_tests_ga_pgroup_create3_LDADD = $(LDADD) global_testing_unit_tests_ga_pgroup_create3_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_pgroup_create4_OBJECTS = \ global/testing/unit-tests/ga_pgroup_create4.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_pgroup_create4_OBJECTS = \ $(am_global_testing_unit_tests_ga_pgroup_create4_OBJECTS) global_testing_unit_tests_ga_pgroup_create4_LDADD = $(LDADD) global_testing_unit_tests_ga_pgroup_create4_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_pgroup_create5_OBJECTS = \ global/testing/unit-tests/ga_pgroup_create5.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_pgroup_create5_OBJECTS = \ $(am_global_testing_unit_tests_ga_pgroup_create5_OBJECTS) global_testing_unit_tests_ga_pgroup_create5_LDADD = $(LDADD) global_testing_unit_tests_ga_pgroup_create5_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_pgroup_destroy_OBJECTS = \ global/testing/unit-tests/ga_pgroup_destroy.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_pgroup_destroy_OBJECTS = \ $(am_global_testing_unit_tests_ga_pgroup_destroy_OBJECTS) global_testing_unit_tests_ga_pgroup_destroy_LDADD = $(LDADD) global_testing_unit_tests_ga_pgroup_destroy_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_pgroup_destroy2_OBJECTS = \ global/testing/unit-tests/ga_pgroup_destroy2.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_pgroup_destroy2_OBJECTS = \ $(am_global_testing_unit_tests_ga_pgroup_destroy2_OBJECTS) global_testing_unit_tests_ga_pgroup_destroy2_LDADD = $(LDADD) global_testing_unit_tests_ga_pgroup_destroy2_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_pgroup_nnodes_nodeid_OBJECTS = \ global/testing/unit-tests/ga_pgroup_nnodes_nodeid.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_pgroup_nnodes_nodeid_OBJECTS = $(am_global_testing_unit_tests_ga_pgroup_nnodes_nodeid_OBJECTS) global_testing_unit_tests_ga_pgroup_nnodes_nodeid_LDADD = $(LDADD) global_testing_unit_tests_ga_pgroup_nnodes_nodeid_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_pgroup_setdefault_OBJECTS = \ global/testing/unit-tests/ga_pgroup_setdefault.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_pgroup_setdefault_OBJECTS = \ $(am_global_testing_unit_tests_ga_pgroup_setdefault_OBJECTS) global_testing_unit_tests_ga_pgroup_setdefault_LDADD = $(LDADD) global_testing_unit_tests_ga_pgroup_setdefault_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_put_OBJECTS = \ global/testing/unit-tests/ga_put.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_put_OBJECTS = \ $(am_global_testing_unit_tests_ga_put_OBJECTS) global_testing_unit_tests_ga_put_LDADD = $(LDADD) global_testing_unit_tests_ga_put_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_put2_OBJECTS = \ global/testing/unit-tests/ga_put2.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_put2_OBJECTS = \ $(am_global_testing_unit_tests_ga_put2_OBJECTS) global_testing_unit_tests_ga_put2_LDADD = $(LDADD) global_testing_unit_tests_ga_put2_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_scale_OBJECTS = \ global/testing/unit-tests/ga_scale.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_scale_OBJECTS = \ $(am_global_testing_unit_tests_ga_scale_OBJECTS) global_testing_unit_tests_ga_scale_LDADD = $(LDADD) global_testing_unit_tests_ga_scale_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_scale2_OBJECTS = \ global/testing/unit-tests/ga_scale2.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_scale2_OBJECTS = \ $(am_global_testing_unit_tests_ga_scale2_OBJECTS) global_testing_unit_tests_ga_scale2_LDADD = $(LDADD) global_testing_unit_tests_ga_scale2_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_scale_cols_OBJECTS = \ global/testing/unit-tests/ga_scale_cols.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_scale_cols_OBJECTS = \ $(am_global_testing_unit_tests_ga_scale_cols_OBJECTS) global_testing_unit_tests_ga_scale_cols_LDADD = $(LDADD) global_testing_unit_tests_ga_scale_cols_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_scale_patch_OBJECTS = \ global/testing/unit-tests/ga_scale_patch.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_scale_patch_OBJECTS = \ $(am_global_testing_unit_tests_ga_scale_patch_OBJECTS) global_testing_unit_tests_ga_scale_patch_LDADD = $(LDADD) global_testing_unit_tests_ga_scale_patch_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_scale_rows_OBJECTS = \ global/testing/unit-tests/ga_scale_rows.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_scale_rows_OBJECTS = \ $(am_global_testing_unit_tests_ga_scale_rows_OBJECTS) global_testing_unit_tests_ga_scale_rows_LDADD = $(LDADD) global_testing_unit_tests_ga_scale_rows_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_scatter_OBJECTS = \ global/testing/unit-tests/ga_scatter.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_scatter_OBJECTS = \ $(am_global_testing_unit_tests_ga_scatter_OBJECTS) global_testing_unit_tests_ga_scatter_LDADD = $(LDADD) global_testing_unit_tests_ga_scatter_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_set_data_OBJECTS = \ global/testing/unit-tests/ga_set_data.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_set_data_OBJECTS = \ $(am_global_testing_unit_tests_ga_set_data_OBJECTS) global_testing_unit_tests_ga_set_data_LDADD = $(LDADD) global_testing_unit_tests_ga_set_data_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_set_diagonal_OBJECTS = \ global/testing/unit-tests/ga_set_diagonal.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_set_diagonal_OBJECTS = \ $(am_global_testing_unit_tests_ga_set_diagonal_OBJECTS) global_testing_unit_tests_ga_set_diagonal_LDADD = $(LDADD) global_testing_unit_tests_ga_set_diagonal_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_set_restricted_OBJECTS = \ global/testing/unit-tests/ga_set_restricted.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_set_restricted_OBJECTS = \ $(am_global_testing_unit_tests_ga_set_restricted_OBJECTS) global_testing_unit_tests_ga_set_restricted_LDADD = $(LDADD) global_testing_unit_tests_ga_set_restricted_DEPENDENCIES = \ $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_solve_OBJECTS = \ global/testing/unit-tests/ga_solve.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_solve_OBJECTS = \ $(am_global_testing_unit_tests_ga_solve_OBJECTS) global_testing_unit_tests_ga_solve_LDADD = $(LDADD) global_testing_unit_tests_ga_solve_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_sync_OBJECTS = \ global/testing/unit-tests/ga_sync.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_sync_OBJECTS = \ $(am_global_testing_unit_tests_ga_sync_OBJECTS) global_testing_unit_tests_ga_sync_LDADD = $(LDADD) global_testing_unit_tests_ga_sync_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_transpose_OBJECTS = \ global/testing/unit-tests/ga_transpose.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_transpose_OBJECTS = \ $(am_global_testing_unit_tests_ga_transpose_OBJECTS) global_testing_unit_tests_ga_transpose_LDADD = $(LDADD) global_testing_unit_tests_ga_transpose_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_transpose2_OBJECTS = \ global/testing/unit-tests/ga_transpose2.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_transpose2_OBJECTS = \ $(am_global_testing_unit_tests_ga_transpose2_OBJECTS) global_testing_unit_tests_ga_transpose2_LDADD = $(LDADD) global_testing_unit_tests_ga_transpose2_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_transpose3_OBJECTS = \ global/testing/unit-tests/ga_transpose3.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_transpose3_OBJECTS = \ $(am_global_testing_unit_tests_ga_transpose3_OBJECTS) global_testing_unit_tests_ga_transpose3_LDADD = $(LDADD) global_testing_unit_tests_ga_transpose3_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_zero_OBJECTS = \ global/testing/unit-tests/ga_zero.$(OBJEXT) $(am__objects_18) global_testing_unit_tests_ga_zero_OBJECTS = \ $(am_global_testing_unit_tests_ga_zero_OBJECTS) global_testing_unit_tests_ga_zero_LDADD = $(LDADD) global_testing_unit_tests_ga_zero_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_zerodiagonal_OBJECTS = \ global/testing/unit-tests/ga_zerodiagonal.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_zerodiagonal_OBJECTS = \ $(am_global_testing_unit_tests_ga_zerodiagonal_OBJECTS) global_testing_unit_tests_ga_zerodiagonal_LDADD = $(LDADD) global_testing_unit_tests_ga_zerodiagonal_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_zeropatch_OBJECTS = \ global/testing/unit-tests/ga_zeropatch.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_zeropatch_OBJECTS = \ $(am_global_testing_unit_tests_ga_zeropatch_OBJECTS) global_testing_unit_tests_ga_zeropatch_LDADD = $(LDADD) global_testing_unit_tests_ga_zeropatch_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_testing_unit_tests_ga_zeropatch2_OBJECTS = \ global/testing/unit-tests/ga_zeropatch2.$(OBJEXT) \ $(am__objects_18) global_testing_unit_tests_ga_zeropatch2_OBJECTS = \ $(am_global_testing_unit_tests_ga_zeropatch2_OBJECTS) global_testing_unit_tests_ga_zeropatch2_LDADD = $(LDADD) global_testing_unit_tests_ga_zeropatch2_DEPENDENCIES = $(LTLIBOBJS) \ libga.la $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__global_testing_unpackc_SOURCES_DIST = global/testing/unpackc.c \ global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c global/testing/ffflush.F \ global/testing/testblas.F am_global_testing_unpackc_OBJECTS = global/testing/unpackc.$(OBJEXT) \ $(am__objects_15) global_testing_unpackc_OBJECTS = $(am_global_testing_unpackc_OBJECTS) global_testing_unpackc_LDADD = $(LDADD) global_testing_unpackc_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_global_trace_adjust_OBJECTS = global/trace/adjust.$(OBJEXT) global_trace_adjust_OBJECTS = $(am_global_trace_adjust_OBJECTS) global_trace_adjust_DEPENDENCIES = global_trace_adjust_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(global_trace_adjust_LDFLAGS) \ $(LDFLAGS) -o $@ am_global_trace_collisions_OBJECTS = \ global/trace/collisions.$(OBJEXT) global_trace_collisions_OBJECTS = \ $(am_global_trace_collisions_OBJECTS) global_trace_collisions_DEPENDENCIES = global_trace_collisions_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(global_trace_collisions_LDFLAGS) \ $(LDFLAGS) -o $@ am__gparrays_testing_test_SOURCES_DIST = gparrays/testing/test.F @ENABLE_GPARRAYS_TRUE@am_gparrays_testing_test_OBJECTS = \ @ENABLE_GPARRAYS_TRUE@ gparrays/testing/test.$(OBJEXT) gparrays_testing_test_OBJECTS = $(am_gparrays_testing_test_OBJECTS) gparrays_testing_test_LDADD = $(LDADD) gparrays_testing_test_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) gparrays_testing_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(gparrays_testing_test_LDFLAGS) \ $(LDFLAGS) -o $@ am__gparrays_testing_testc_SOURCES_DIST = gparrays/testing/testc.c @ENABLE_GPARRAYS_TRUE@am_gparrays_testing_testc_OBJECTS = \ @ENABLE_GPARRAYS_TRUE@ gparrays/testing/testc.$(OBJEXT) gparrays_testing_testc_OBJECTS = $(am_gparrays_testing_testc_OBJECTS) gparrays_testing_testc_LDADD = $(LDADD) gparrays_testing_testc_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__gparrays_testing_transpose_SOURCES_DIST = \ gparrays/testing/transpose.c @ENABLE_GPARRAYS_TRUE@am_gparrays_testing_transpose_OBJECTS = \ @ENABLE_GPARRAYS_TRUE@ gparrays/testing/transpose.$(OBJEXT) gparrays_testing_transpose_OBJECTS = \ $(am_gparrays_testing_transpose_OBJECTS) gparrays_testing_transpose_LDADD = $(LDADD) gparrays_testing_transpose_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_ma_test_coalesce_OBJECTS = ma/test-coalesce.$(OBJEXT) ma_test_coalesce_OBJECTS = $(am_ma_test_coalesce_OBJECTS) ma_test_coalesce_LDADD = $(LDADD) ma_test_coalesce_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_ma_test_inquire_OBJECTS = ma/test-inquire.$(OBJEXT) ma_test_inquire_OBJECTS = $(am_ma_test_inquire_OBJECTS) ma_test_inquire_LDADD = $(LDADD) ma_test_inquire_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_ma_testc_OBJECTS = ma/testc.$(OBJEXT) ma_testc_OBJECTS = $(am_ma_testc_OBJECTS) ma_testc_LDADD = $(LDADD) ma_testc_DEPENDENCIES = $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_ma_testf_OBJECTS = ma/testf.$(OBJEXT) ma_testf_OBJECTS = $(am_ma_testf_OBJECTS) ma_testf_LDADD = $(LDADD) ma_testf_DEPENDENCIES = $(LTLIBOBJS) libga.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) ma_testf_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \ $(ma_testf_LDFLAGS) $(LDFLAGS) -o $@ am__objects_19 = pario/dra/ffflush.$(OBJEXT) pario/dra/util.$(OBJEXT) am_pario_dra_big_OBJECTS = pario/dra/big.$(OBJEXT) $(am__objects_19) pario_dra_big_OBJECTS = $(am_pario_dra_big_OBJECTS) pario_dra_big_LDADD = $(LDADD) pario_dra_big_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) pario_dra_big_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(pario_dra_big_LDFLAGS) $(LDFLAGS) -o \ $@ am_pario_dra_bign_OBJECTS = pario/dra/bign.$(OBJEXT) pario_dra_bign_OBJECTS = $(am_pario_dra_bign_OBJECTS) pario_dra_bign_LDADD = $(LDADD) pario_dra_bign_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_pario_dra_dbg_read_OBJECTS = pario/dra/dbg_read.$(OBJEXT) pario_dra_dbg_read_OBJECTS = $(am_pario_dra_dbg_read_OBJECTS) pario_dra_dbg_read_LDADD = $(LDADD) pario_dra_dbg_read_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_pario_dra_dbg_write_OBJECTS = pario/dra/dbg_write.$(OBJEXT) pario_dra_dbg_write_OBJECTS = $(am_pario_dra_dbg_write_OBJECTS) pario_dra_dbg_write_LDADD = $(LDADD) pario_dra_dbg_write_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_pario_dra_dra2arviz_OBJECTS = pario/dra/dra2arviz.$(OBJEXT) pario_dra_dra2arviz_OBJECTS = $(am_pario_dra_dra2arviz_OBJECTS) pario_dra_dra2arviz_LDADD = $(LDADD) pario_dra_dra2arviz_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_pario_dra_dra_mxm_OBJECTS = pario/dra/dra_mxm.$(OBJEXT) \ $(am__objects_19) pario_dra_dra_mxm_OBJECTS = $(am_pario_dra_dra_mxm_OBJECTS) pario_dra_dra_mxm_LDADD = $(LDADD) pario_dra_dra_mxm_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) pario_dra_dra_mxm_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(pario_dra_dra_mxm_LDFLAGS) $(LDFLAGS) \ -o $@ am_pario_dra_ntest_OBJECTS = pario/dra/ntest.$(OBJEXT) \ $(am__objects_19) pario_dra_ntest_OBJECTS = $(am_pario_dra_ntest_OBJECTS) pario_dra_ntest_LDADD = $(LDADD) pario_dra_ntest_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) pario_dra_ntest_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(pario_dra_ntest_LDFLAGS) $(LDFLAGS) \ -o $@ am_pario_dra_ntestc_OBJECTS = pario/dra/ntestc.$(OBJEXT) pario_dra_ntestc_OBJECTS = $(am_pario_dra_ntestc_OBJECTS) pario_dra_ntestc_LDADD = $(LDADD) pario_dra_ntestc_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_pario_dra_perf_OBJECTS = pario/dra/perf.$(OBJEXT) $(am__objects_19) pario_dra_perf_OBJECTS = $(am_pario_dra_perf_OBJECTS) pario_dra_perf_LDADD = $(LDADD) pario_dra_perf_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) pario_dra_perf_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(pario_dra_perf_LDFLAGS) $(LDFLAGS) -o \ $@ am_pario_dra_perf2_OBJECTS = pario/dra/perf2.$(OBJEXT) \ $(am__objects_19) pario_dra_perf2_OBJECTS = $(am_pario_dra_perf2_OBJECTS) pario_dra_perf2_LDADD = $(LDADD) pario_dra_perf2_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) pario_dra_perf2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(pario_dra_perf2_LDFLAGS) $(LDFLAGS) \ -o $@ am_pario_dra_perf3_OBJECTS = pario/dra/perf3.$(OBJEXT) \ $(am__objects_19) pario_dra_perf3_OBJECTS = $(am_pario_dra_perf3_OBJECTS) pario_dra_perf3_LDADD = $(LDADD) pario_dra_perf3_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) pario_dra_perf3_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(pario_dra_perf3_LDFLAGS) $(LDFLAGS) \ -o $@ am_pario_dra_perfn_OBJECTS = pario/dra/perfn.$(OBJEXT) pario_dra_perfn_OBJECTS = $(am_pario_dra_perfn_OBJECTS) pario_dra_perfn_LDADD = $(LDADD) pario_dra_perfn_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_pario_dra_rate_OBJECTS = pario/dra/rate.$(OBJEXT) pario_dra_rate_OBJECTS = $(am_pario_dra_rate_OBJECTS) pario_dra_rate_LDADD = $(LDADD) pario_dra_rate_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_pario_dra_test_OBJECTS = pario/dra/test.$(OBJEXT) $(am__objects_19) pario_dra_test_OBJECTS = $(am_pario_dra_test_OBJECTS) pario_dra_test_LDADD = $(LDADD) pario_dra_test_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) pario_dra_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(pario_dra_test_LDFLAGS) $(LDFLAGS) -o \ $@ am_pario_dra_test_mxm_OBJECTS = pario/dra/test_mxm.$(OBJEXT) \ $(am__objects_19) pario_dra_test_mxm_OBJECTS = $(am_pario_dra_test_mxm_OBJECTS) pario_dra_test_mxm_LDADD = $(LDADD) pario_dra_test_mxm_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) pario_dra_test_mxm_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(pario_dra_test_mxm_LDFLAGS) \ $(LDFLAGS) -o $@ am_pario_dra_time_mxm_OBJECTS = pario/dra/time_mxm.$(OBJEXT) \ $(am__objects_19) pario_dra_time_mxm_OBJECTS = $(am_pario_dra_time_mxm_OBJECTS) pario_dra_time_mxm_LDADD = $(LDADD) pario_dra_time_mxm_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) pario_dra_time_mxm_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(pario_dra_time_mxm_LDFLAGS) \ $(LDFLAGS) -o $@ am_pario_eaf_test_OBJECTS = pario/eaf/test.$(OBJEXT) $(am__objects_19) pario_eaf_test_OBJECTS = $(am_pario_eaf_test_OBJECTS) pario_eaf_test_LDADD = $(LDADD) pario_eaf_test_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) pario_eaf_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(pario_eaf_test_LDFLAGS) $(LDFLAGS) -o \ $@ am_pario_sf_test_OBJECTS = pario/sf/test.$(OBJEXT) $(am__objects_19) pario_sf_test_OBJECTS = $(am_pario_sf_test_OBJECTS) pario_sf_test_LDADD = $(LDADD) pario_sf_test_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) pario_sf_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(pario_sf_test_LDFLAGS) $(LDFLAGS) -o \ $@ am__tcgmsg_tests_test_SOURCES_DIST = tcgmsg/tests/test.c @MSG_COMMS_MPI_TRUE@am_tcgmsg_tests_test_OBJECTS = \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tests/test.$(OBJEXT) tcgmsg_tests_test_OBJECTS = $(am_tcgmsg_tests_test_OBJECTS) tcgmsg_tests_test_LDADD = $(LDADD) tcgmsg_tests_test_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__tcgmsg_tests_test_asyn_SOURCES_DIST = tcgmsg/tests/test_asyn.c @MSG_COMMS_MPI_TRUE@am_tcgmsg_tests_test_asyn_OBJECTS = \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tests/test_asyn.$(OBJEXT) tcgmsg_tests_test_asyn_OBJECTS = $(am_tcgmsg_tests_test_asyn_OBJECTS) tcgmsg_tests_test_asyn_LDADD = $(LDADD) tcgmsg_tests_test_asyn_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__tcgmsg_tests_testf_SOURCES_DIST = tcgmsg/tests/testf.F @MSG_COMMS_MPI_TRUE@am_tcgmsg_tests_testf_OBJECTS = \ @MSG_COMMS_MPI_TRUE@ tcgmsg/tests/testf.$(OBJEXT) tcgmsg_tests_testf_OBJECTS = $(am_tcgmsg_tests_testf_OBJECTS) tcgmsg_tests_testf_LDADD = $(LDADD) tcgmsg_tests_testf_DEPENDENCIES = $(LTLIBOBJS) libga.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) tcgmsg_tests_testf_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(F77LD) \ $(AM_FFLAGS) $(FFLAGS) $(tcgmsg_tests_testf_LDFLAGS) \ $(LDFLAGS) -o $@ SCRIPTS = $(bin_SCRIPTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f PPF77COMPILE = $(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) LTPPF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(F77) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_FFLAGS) $(FFLAGS) AM_V_PPF77 = $(am__v_PPF77_@AM_V@) am__v_PPF77_ = $(am__v_PPF77_@AM_DEFAULT_V@) am__v_PPF77_0 = @echo " PPF77 " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ F77LD = $(F77) AM_V_F77LD = $(am__v_F77LD_@AM_V@) am__v_F77LD_ = $(am__v_F77LD_@AM_DEFAULT_V@) COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS) LTF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS) AM_V_F77 = $(am__v_F77_@AM_V@) am__v_F77_ = $(am__v_F77_@AM_DEFAULT_V@) am__v_F77_0 = @echo " F77 " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libga___la_SOURCES) $(libga_la_SOURCES) \ $(nodist_libga_la_SOURCES) $(libwapi_la_SOURCES) \ $(ga___testing_elempatch_SOURCES) \ $(ga___testing_mtest_SOURCES) $(ga___testing_ntestc_SOURCES) \ $(ga___testing_testc_SOURCES) $(ga___testing_testmult_SOURCES) \ $(gaf2c_testarg_SOURCES) $(global_X_xregion_SOURCES) \ $(global_examples_boltzmann_boltz_SOURCES) \ $(global_examples_conjugate_gradient_ga_cg_SOURCES) \ $(global_examples_lennard_jones_lennard_SOURCES) \ $(nodist_EXTRA_global_examples_lennard_jones_lennard_SOURCES) \ $(global_examples_md_cluster_grp_sim_SOURCES) \ $(global_examples_scf_scf_SOURCES) \ $(global_testing_big_SOURCES) \ $(nodist_EXTRA_global_testing_big_SOURCES) \ $(global_testing_bin_SOURCES) \ $(global_testing_blktest_SOURCES) \ $(global_testing_d2test_SOURCES) \ $(global_testing_elempatch_SOURCES) \ $(nodist_EXTRA_global_testing_elempatch_SOURCES) \ $(global_testing_field_test_SOURCES) \ $(global_testing_g2test_SOURCES) \ $(global_testing_g3test_SOURCES) \ $(global_testing_ga_mpi_SOURCES) \ $(nodist_EXTRA_global_testing_ga_mpi_SOURCES) \ $(global_testing_ga_lu_SOURCES) \ $(nodist_EXTRA_global_testing_ga_lu_SOURCES) \ $(global_testing_ga_shift_SOURCES) \ $(global_testing_gatscat_SOURCES) \ $(nodist_EXTRA_global_testing_gatscat_SOURCES) \ $(global_testing_getmem_SOURCES) \ $(nodist_EXTRA_global_testing_getmem_SOURCES) \ $(global_testing_ghosts_SOURCES) \ $(global_testing_ipc_clean_SOURCES) \ $(nodist_EXTRA_global_testing_ipc_clean_SOURCES) \ $(global_testing_jacobi_SOURCES) \ $(global_testing_lock_SOURCES) \ $(nodist_EXTRA_global_testing_lock_SOURCES) \ $(global_testing_mir_perf2_SOURCES) \ $(global_testing_mmatrix_SOURCES) \ $(global_testing_mtest_SOURCES) \ $(nodist_EXTRA_global_testing_mtest_SOURCES) \ $(global_testing_mulmatpatch_SOURCES) \ $(global_testing_mulmatpatchc_SOURCES) \ $(nodist_EXTRA_global_testing_mulmatpatchc_SOURCES) \ $(global_testing_nb2test_SOURCES) \ $(global_testing_ndim_SOURCES) \ $(nodist_global_testing_nga_onesided_SOURCES) \ $(nodist_global_testing_nga_patch_SOURCES) \ $(nodist_global_testing_nga_periodic_SOURCES) \ $(nodist_global_testing_nga_scatter_SOURCES) \ $(nodist_global_testing_nga_util_SOURCES) \ $(nodist_global_testing_ngatest_SOURCES) \ $(global_testing_ntestc_SOURCES) \ $(nodist_EXTRA_global_testing_ntestc_SOURCES) \ $(global_testing_ntestfc_SOURCES) \ $(nodist_EXTRA_global_testing_ntestfc_SOURCES) \ $(global_testing_packc_SOURCES) \ $(nodist_EXTRA_global_testing_packc_SOURCES) \ $(global_testing_patch_SOURCES) \ $(global_testing_patch2_SOURCES) \ $(global_testing_patch_enumc_SOURCES) \ $(nodist_EXTRA_global_testing_patch_enumc_SOURCES) \ $(global_testing_patch_enumf_SOURCES) \ $(global_testing_perf_SOURCES) $(global_testing_perf2_SOURCES) \ $(nodist_EXTRA_global_testing_perf2_SOURCES) \ $(global_testing_perfmod_SOURCES) \ $(global_testing_perform_SOURCES) \ $(global_testing_pg2test_SOURCES) \ $(global_testing_pg2testmatmult_SOURCES) \ $(global_testing_pgtest_SOURCES) \ $(global_testing_pgtestmatmult_SOURCES) \ $(global_testing_print_SOURCES) \ $(nodist_EXTRA_global_testing_print_SOURCES) \ $(global_testing_random_SOURCES) \ $(global_testing_scan_SOURCES) \ $(global_testing_scan_addc_SOURCES) \ $(nodist_EXTRA_global_testing_scan_addc_SOURCES) \ $(global_testing_scan_copyc_SOURCES) \ $(nodist_EXTRA_global_testing_scan_copyc_SOURCES) \ $(global_testing_simple_groups_SOURCES) \ $(global_testing_simple_groups_comm_SOURCES) \ $(global_testing_simple_groups_commc_SOURCES) \ $(nodist_EXTRA_global_testing_simple_groups_commc_SOURCES) \ $(global_testing_sparse_SOURCES) \ $(global_testing_sprsmatmult_SOURCES) \ $(global_testing_stride_SOURCES) \ $(global_testing_test_SOURCES) \ $(global_testing_test_mirrored_SOURCES) \ $(global_testing_testc_SOURCES) \ $(nodist_EXTRA_global_testing_testc_SOURCES) \ $(global_testing_testeig_SOURCES) \ $(global_testing_testmatmult_SOURCES) \ $(global_testing_testmatmultc_SOURCES) \ $(nodist_EXTRA_global_testing_testmatmultc_SOURCES) \ $(global_testing_testmult_SOURCES) \ $(nodist_EXTRA_global_testing_testmult_SOURCES) \ $(global_testing_testmultrect_SOURCES) \ $(nodist_EXTRA_global_testing_testmultrect_SOURCES) \ $(global_testing_testsolve_SOURCES) \ $(global_testing_testspd_SOURCES) \ $(global_testing_types_test_SOURCES) \ $(global_testing_unit_tests_ga_abs_value_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_abs_value_SOURCES) \ $(global_testing_unit_tests_ga_acc_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_acc_SOURCES) \ $(global_testing_unit_tests_ga_add_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_add_SOURCES) \ $(global_testing_unit_tests_ga_add_constant_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_add_constant_SOURCES) \ $(global_testing_unit_tests_ga_add_constantpatch_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_add_constantpatch_SOURCES) \ $(global_testing_unit_tests_ga_add_diagonal_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_add_diagonal_SOURCES) \ $(global_testing_unit_tests_ga_add_patch_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_add_patch_SOURCES) \ $(global_testing_unit_tests_ga_copy_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_copy_SOURCES) \ $(global_testing_unit_tests_ga_copy2_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_copy2_SOURCES) \ $(global_testing_unit_tests_ga_copy3_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_copy3_SOURCES) \ $(global_testing_unit_tests_ga_copypatch_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_copypatch_SOURCES) \ $(global_testing_unit_tests_ga_copypatch2_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_copypatch2_SOURCES) \ $(global_testing_unit_tests_ga_create_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_create_SOURCES) \ $(global_testing_unit_tests_ga_create1_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_create1_SOURCES) \ $(global_testing_unit_tests_ga_create2_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_create2_SOURCES) \ $(global_testing_unit_tests_ga_create3_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_create3_SOURCES) \ $(global_testing_unit_tests_ga_create_handle_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_create_handle_SOURCES) \ $(global_testing_unit_tests_ga_create_irreg_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_create_irreg_SOURCES) \ $(global_testing_unit_tests_ga_create_irreg2_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_create_irreg2_SOURCES) \ $(global_testing_unit_tests_ga_create_irreg3_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_create_irreg3_SOURCES) \ $(global_testing_unit_tests_ga_destroy_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_destroy_SOURCES) \ $(global_testing_unit_tests_ga_dgop_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_dgop_SOURCES) \ $(global_testing_unit_tests_ga_dot_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_dot_SOURCES) \ $(global_testing_unit_tests_ga_duplicate_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_duplicate_SOURCES) \ $(global_testing_unit_tests_ga_elem_divide_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_elem_divide_SOURCES) \ $(global_testing_unit_tests_ga_elem_dividepatch_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_elem_dividepatch_SOURCES) \ $(global_testing_unit_tests_ga_elem_maximum_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_elem_maximum_SOURCES) \ $(global_testing_unit_tests_ga_elem_maximumpatch_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_elem_maximumpatch_SOURCES) \ $(global_testing_unit_tests_ga_elem_minimum_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_elem_minimum_SOURCES) \ $(global_testing_unit_tests_ga_elem_minimumpatch_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_elem_minimumpatch_SOURCES) \ $(global_testing_unit_tests_ga_elem_multiply_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_elem_multiply_SOURCES) \ $(global_testing_unit_tests_ga_elem_multiplypatch_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_elem_multiplypatch_SOURCES) \ $(global_testing_unit_tests_ga_fill_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_fill_SOURCES) \ $(global_testing_unit_tests_ga_fillpatch_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_fillpatch_SOURCES) \ $(global_testing_unit_tests_ga_fillpatch1_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_fillpatch1_SOURCES) \ $(global_testing_unit_tests_ga_gather_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_gather_SOURCES) \ $(global_testing_unit_tests_ga_gather2_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_gather2_SOURCES) \ $(global_testing_unit_tests_ga_gather3_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_gather3_SOURCES) \ $(global_testing_unit_tests_ga_get_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_get_SOURCES) \ $(global_testing_unit_tests_ga_get_blockinfo_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_get_blockinfo_SOURCES) \ $(global_testing_unit_tests_ga_get_diagonal_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_get_diagonal_SOURCES) \ $(global_testing_unit_tests_ga_igop_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_igop_SOURCES) \ $(global_testing_unit_tests_ga_igop2_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_igop2_SOURCES) \ $(global_testing_unit_tests_ga_inquire_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_inquire_SOURCES) \ $(global_testing_unit_tests_ga_intialize_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_intialize_SOURCES) \ $(global_testing_unit_tests_ga_lgop_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_lgop_SOURCES) \ $(global_testing_unit_tests_ga_median_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_median_SOURCES) \ $(global_testing_unit_tests_ga_ndim_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_ndim_SOURCES) \ $(global_testing_unit_tests_ga_ndim2_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_ndim2_SOURCES) \ $(global_testing_unit_tests_ga_nnodes_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_nnodes_SOURCES) \ $(global_testing_unit_tests_ga_nodeid_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_nodeid_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_create_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_pgroup_create_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_create2_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_pgroup_create2_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_create3_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_pgroup_create3_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_create4_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_pgroup_create4_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_create5_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_pgroup_create5_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_destroy_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_pgroup_destroy_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_destroy2_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_pgroup_destroy2_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_nnodes_nodeid_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_pgroup_nnodes_nodeid_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_setdefault_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_pgroup_setdefault_SOURCES) \ $(global_testing_unit_tests_ga_put_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_put_SOURCES) \ $(global_testing_unit_tests_ga_put2_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_put2_SOURCES) \ $(global_testing_unit_tests_ga_scale_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_scale_SOURCES) \ $(global_testing_unit_tests_ga_scale2_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_scale2_SOURCES) \ $(global_testing_unit_tests_ga_scale_cols_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_scale_cols_SOURCES) \ $(global_testing_unit_tests_ga_scale_patch_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_scale_patch_SOURCES) \ $(global_testing_unit_tests_ga_scale_rows_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_scale_rows_SOURCES) \ $(global_testing_unit_tests_ga_scatter_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_scatter_SOURCES) \ $(global_testing_unit_tests_ga_set_data_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_set_data_SOURCES) \ $(global_testing_unit_tests_ga_set_diagonal_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_set_diagonal_SOURCES) \ $(global_testing_unit_tests_ga_set_restricted_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_set_restricted_SOURCES) \ $(global_testing_unit_tests_ga_solve_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_solve_SOURCES) \ $(global_testing_unit_tests_ga_sync_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_sync_SOURCES) \ $(global_testing_unit_tests_ga_transpose_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_transpose_SOURCES) \ $(global_testing_unit_tests_ga_transpose2_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_transpose2_SOURCES) \ $(global_testing_unit_tests_ga_transpose3_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_transpose3_SOURCES) \ $(global_testing_unit_tests_ga_zero_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_zero_SOURCES) \ $(global_testing_unit_tests_ga_zerodiagonal_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_zerodiagonal_SOURCES) \ $(global_testing_unit_tests_ga_zeropatch_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_zeropatch_SOURCES) \ $(global_testing_unit_tests_ga_zeropatch2_SOURCES) \ $(nodist_EXTRA_global_testing_unit_tests_ga_zeropatch2_SOURCES) \ $(global_testing_unpackc_SOURCES) \ $(nodist_EXTRA_global_testing_unpackc_SOURCES) \ $(global_trace_adjust_SOURCES) \ $(global_trace_collisions_SOURCES) \ $(gparrays_testing_test_SOURCES) \ $(gparrays_testing_testc_SOURCES) \ $(nodist_EXTRA_gparrays_testing_testc_SOURCES) \ $(gparrays_testing_transpose_SOURCES) \ $(nodist_EXTRA_gparrays_testing_transpose_SOURCES) \ $(ma_test_coalesce_SOURCES) \ $(nodist_EXTRA_ma_test_coalesce_SOURCES) \ $(ma_test_inquire_SOURCES) \ $(nodist_EXTRA_ma_test_inquire_SOURCES) $(ma_testc_SOURCES) \ $(nodist_EXTRA_ma_testc_SOURCES) $(ma_testf_SOURCES) \ $(pario_dra_big_SOURCES) $(pario_dra_bign_SOURCES) \ $(nodist_EXTRA_pario_dra_bign_SOURCES) \ $(pario_dra_dbg_read_SOURCES) \ $(nodist_EXTRA_pario_dra_dbg_read_SOURCES) \ $(pario_dra_dbg_write_SOURCES) \ $(nodist_EXTRA_pario_dra_dbg_write_SOURCES) \ $(pario_dra_dra2arviz_SOURCES) \ $(nodist_EXTRA_pario_dra_dra2arviz_SOURCES) \ $(pario_dra_dra_mxm_SOURCES) $(pario_dra_ntest_SOURCES) \ $(pario_dra_ntestc_SOURCES) \ $(nodist_EXTRA_pario_dra_ntestc_SOURCES) \ $(pario_dra_perf_SOURCES) $(pario_dra_perf2_SOURCES) \ $(pario_dra_perf3_SOURCES) $(pario_dra_perfn_SOURCES) \ $(nodist_EXTRA_pario_dra_perfn_SOURCES) \ $(pario_dra_rate_SOURCES) \ $(nodist_EXTRA_pario_dra_rate_SOURCES) \ $(pario_dra_test_SOURCES) $(pario_dra_test_mxm_SOURCES) \ $(pario_dra_time_mxm_SOURCES) $(pario_eaf_test_SOURCES) \ $(pario_sf_test_SOURCES) $(tcgmsg_tests_test_SOURCES) \ $(nodist_EXTRA_tcgmsg_tests_test_SOURCES) \ $(tcgmsg_tests_test_asyn_SOURCES) \ $(nodist_EXTRA_tcgmsg_tests_test_asyn_SOURCES) \ $(tcgmsg_tests_testf_SOURCES) DIST_SOURCES = $(am__libga___la_SOURCES_DIST) \ $(am__libga_la_SOURCES_DIST) $(am__libwapi_la_SOURCES_DIST) \ $(am__ga___testing_elempatch_SOURCES_DIST) \ $(am__ga___testing_mtest_SOURCES_DIST) \ $(am__ga___testing_ntestc_SOURCES_DIST) \ $(am__ga___testing_testc_SOURCES_DIST) \ $(am__ga___testing_testmult_SOURCES_DIST) \ $(gaf2c_testarg_SOURCES) $(am__global_X_xregion_SOURCES_DIST) \ $(global_examples_boltzmann_boltz_SOURCES) \ $(global_examples_conjugate_gradient_ga_cg_SOURCES) \ $(global_examples_lennard_jones_lennard_SOURCES) \ $(global_examples_md_cluster_grp_sim_SOURCES) \ $(global_examples_scf_scf_SOURCES) \ $(am__global_testing_big_SOURCES_DIST) \ $(am__global_testing_bin_SOURCES_DIST) \ $(am__global_testing_blktest_SOURCES_DIST) \ $(am__global_testing_d2test_SOURCES_DIST) \ $(am__global_testing_elempatch_SOURCES_DIST) \ $(am__global_testing_field_test_SOURCES_DIST) \ $(am__global_testing_g2test_SOURCES_DIST) \ $(am__global_testing_g3test_SOURCES_DIST) \ $(am__global_testing_ga_mpi_SOURCES_DIST) \ $(am__global_testing_ga_lu_SOURCES_DIST) \ $(am__global_testing_ga_shift_SOURCES_DIST) \ $(am__global_testing_gatscat_SOURCES_DIST) \ $(am__global_testing_getmem_SOURCES_DIST) \ $(am__global_testing_ghosts_SOURCES_DIST) \ $(am__global_testing_ipc_clean_SOURCES_DIST) \ $(am__global_testing_jacobi_SOURCES_DIST) \ $(am__global_testing_lock_SOURCES_DIST) \ $(am__global_testing_mir_perf2_SOURCES_DIST) \ $(am__global_testing_mmatrix_SOURCES_DIST) \ $(am__global_testing_mtest_SOURCES_DIST) \ $(am__global_testing_mulmatpatch_SOURCES_DIST) \ $(am__global_testing_mulmatpatchc_SOURCES_DIST) \ $(am__global_testing_nb2test_SOURCES_DIST) \ $(am__global_testing_ndim_SOURCES_DIST) \ $(am__global_testing_ntestc_SOURCES_DIST) \ $(am__global_testing_ntestfc_SOURCES_DIST) \ $(am__global_testing_packc_SOURCES_DIST) \ $(am__global_testing_patch_SOURCES_DIST) \ $(am__global_testing_patch2_SOURCES_DIST) \ $(am__global_testing_patch_enumc_SOURCES_DIST) \ $(am__global_testing_patch_enumf_SOURCES_DIST) \ $(am__global_testing_perf_SOURCES_DIST) \ $(am__global_testing_perf2_SOURCES_DIST) \ $(am__global_testing_perfmod_SOURCES_DIST) \ $(am__global_testing_perform_SOURCES_DIST) \ $(am__global_testing_pg2test_SOURCES_DIST) \ $(am__global_testing_pg2testmatmult_SOURCES_DIST) \ $(am__global_testing_pgtest_SOURCES_DIST) \ $(am__global_testing_pgtestmatmult_SOURCES_DIST) \ $(am__global_testing_print_SOURCES_DIST) \ $(am__global_testing_random_SOURCES_DIST) \ $(am__global_testing_scan_SOURCES_DIST) \ $(am__global_testing_scan_addc_SOURCES_DIST) \ $(am__global_testing_scan_copyc_SOURCES_DIST) \ $(am__global_testing_simple_groups_SOURCES_DIST) \ $(am__global_testing_simple_groups_comm_SOURCES_DIST) \ $(am__global_testing_simple_groups_commc_SOURCES_DIST) \ $(am__global_testing_sparse_SOURCES_DIST) \ $(am__global_testing_sprsmatmult_SOURCES_DIST) \ $(am__global_testing_stride_SOURCES_DIST) \ $(am__global_testing_test_SOURCES_DIST) \ $(am__global_testing_test_mirrored_SOURCES_DIST) \ $(am__global_testing_testc_SOURCES_DIST) \ $(am__global_testing_testeig_SOURCES_DIST) \ $(am__global_testing_testmatmult_SOURCES_DIST) \ $(am__global_testing_testmatmultc_SOURCES_DIST) \ $(am__global_testing_testmult_SOURCES_DIST) \ $(am__global_testing_testmultrect_SOURCES_DIST) \ $(am__global_testing_testsolve_SOURCES_DIST) \ $(am__global_testing_testspd_SOURCES_DIST) \ $(am__global_testing_types_test_SOURCES_DIST) \ $(global_testing_unit_tests_ga_abs_value_SOURCES) \ $(global_testing_unit_tests_ga_acc_SOURCES) \ $(global_testing_unit_tests_ga_add_SOURCES) \ $(global_testing_unit_tests_ga_add_constant_SOURCES) \ $(global_testing_unit_tests_ga_add_constantpatch_SOURCES) \ $(global_testing_unit_tests_ga_add_diagonal_SOURCES) \ $(global_testing_unit_tests_ga_add_patch_SOURCES) \ $(global_testing_unit_tests_ga_copy_SOURCES) \ $(global_testing_unit_tests_ga_copy2_SOURCES) \ $(global_testing_unit_tests_ga_copy3_SOURCES) \ $(global_testing_unit_tests_ga_copypatch_SOURCES) \ $(global_testing_unit_tests_ga_copypatch2_SOURCES) \ $(global_testing_unit_tests_ga_create_SOURCES) \ $(global_testing_unit_tests_ga_create1_SOURCES) \ $(global_testing_unit_tests_ga_create2_SOURCES) \ $(global_testing_unit_tests_ga_create3_SOURCES) \ $(global_testing_unit_tests_ga_create_handle_SOURCES) \ $(global_testing_unit_tests_ga_create_irreg_SOURCES) \ $(global_testing_unit_tests_ga_create_irreg2_SOURCES) \ $(global_testing_unit_tests_ga_create_irreg3_SOURCES) \ $(global_testing_unit_tests_ga_destroy_SOURCES) \ $(global_testing_unit_tests_ga_dgop_SOURCES) \ $(global_testing_unit_tests_ga_dot_SOURCES) \ $(global_testing_unit_tests_ga_duplicate_SOURCES) \ $(global_testing_unit_tests_ga_elem_divide_SOURCES) \ $(global_testing_unit_tests_ga_elem_dividepatch_SOURCES) \ $(global_testing_unit_tests_ga_elem_maximum_SOURCES) \ $(global_testing_unit_tests_ga_elem_maximumpatch_SOURCES) \ $(global_testing_unit_tests_ga_elem_minimum_SOURCES) \ $(global_testing_unit_tests_ga_elem_minimumpatch_SOURCES) \ $(global_testing_unit_tests_ga_elem_multiply_SOURCES) \ $(global_testing_unit_tests_ga_elem_multiplypatch_SOURCES) \ $(global_testing_unit_tests_ga_fill_SOURCES) \ $(global_testing_unit_tests_ga_fillpatch_SOURCES) \ $(global_testing_unit_tests_ga_fillpatch1_SOURCES) \ $(global_testing_unit_tests_ga_gather_SOURCES) \ $(global_testing_unit_tests_ga_gather2_SOURCES) \ $(global_testing_unit_tests_ga_gather3_SOURCES) \ $(global_testing_unit_tests_ga_get_SOURCES) \ $(global_testing_unit_tests_ga_get_blockinfo_SOURCES) \ $(global_testing_unit_tests_ga_get_diagonal_SOURCES) \ $(global_testing_unit_tests_ga_igop_SOURCES) \ $(global_testing_unit_tests_ga_igop2_SOURCES) \ $(global_testing_unit_tests_ga_inquire_SOURCES) \ $(global_testing_unit_tests_ga_intialize_SOURCES) \ $(global_testing_unit_tests_ga_lgop_SOURCES) \ $(global_testing_unit_tests_ga_median_SOURCES) \ $(global_testing_unit_tests_ga_ndim_SOURCES) \ $(global_testing_unit_tests_ga_ndim2_SOURCES) \ $(global_testing_unit_tests_ga_nnodes_SOURCES) \ $(global_testing_unit_tests_ga_nodeid_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_create_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_create2_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_create3_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_create4_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_create5_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_destroy_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_destroy2_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_nnodes_nodeid_SOURCES) \ $(global_testing_unit_tests_ga_pgroup_setdefault_SOURCES) \ $(global_testing_unit_tests_ga_put_SOURCES) \ $(global_testing_unit_tests_ga_put2_SOURCES) \ $(global_testing_unit_tests_ga_scale_SOURCES) \ $(global_testing_unit_tests_ga_scale2_SOURCES) \ $(global_testing_unit_tests_ga_scale_cols_SOURCES) \ $(global_testing_unit_tests_ga_scale_patch_SOURCES) \ $(global_testing_unit_tests_ga_scale_rows_SOURCES) \ $(global_testing_unit_tests_ga_scatter_SOURCES) \ $(global_testing_unit_tests_ga_set_data_SOURCES) \ $(global_testing_unit_tests_ga_set_diagonal_SOURCES) \ $(global_testing_unit_tests_ga_set_restricted_SOURCES) \ $(global_testing_unit_tests_ga_solve_SOURCES) \ $(global_testing_unit_tests_ga_sync_SOURCES) \ $(global_testing_unit_tests_ga_transpose_SOURCES) \ $(global_testing_unit_tests_ga_transpose2_SOURCES) \ $(global_testing_unit_tests_ga_transpose3_SOURCES) \ $(global_testing_unit_tests_ga_zero_SOURCES) \ $(global_testing_unit_tests_ga_zerodiagonal_SOURCES) \ $(global_testing_unit_tests_ga_zeropatch_SOURCES) \ $(global_testing_unit_tests_ga_zeropatch2_SOURCES) \ $(am__global_testing_unpackc_SOURCES_DIST) \ $(global_trace_adjust_SOURCES) \ $(global_trace_collisions_SOURCES) \ $(am__gparrays_testing_test_SOURCES_DIST) \ $(am__gparrays_testing_testc_SOURCES_DIST) \ $(am__gparrays_testing_transpose_SOURCES_DIST) \ $(ma_test_coalesce_SOURCES) $(ma_test_inquire_SOURCES) \ $(ma_testc_SOURCES) $(ma_testf_SOURCES) \ $(pario_dra_big_SOURCES) $(pario_dra_bign_SOURCES) \ $(pario_dra_dbg_read_SOURCES) $(pario_dra_dbg_write_SOURCES) \ $(pario_dra_dra2arviz_SOURCES) $(pario_dra_dra_mxm_SOURCES) \ $(pario_dra_ntest_SOURCES) $(pario_dra_ntestc_SOURCES) \ $(pario_dra_perf_SOURCES) $(pario_dra_perf2_SOURCES) \ $(pario_dra_perf3_SOURCES) $(pario_dra_perfn_SOURCES) \ $(pario_dra_rate_SOURCES) $(pario_dra_test_SOURCES) \ $(pario_dra_test_mxm_SOURCES) $(pario_dra_time_mxm_SOURCES) \ $(pario_eaf_test_SOURCES) $(pario_sf_test_SOURCES) \ $(am__tcgmsg_tests_test_SOURCES_DIST) \ $(am__tcgmsg_tests_test_asyn_SOURCES_DIST) \ $(am__tcgmsg_tests_testf_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__include_HEADERS_DIST = ma/error.h ma/macdecls.h ma/macommon.h \ ma/maf2c.fh ma/mafdecls.fh ma/matypes.h ma/scope.h \ ma/string-util.h ma/table.h global/src/gacommon.h \ global/src/ga.h global/src/global.fh global/src/ga-papi.h \ global/src/ga-mpi.h global/src/ga-mpi.fh pario/dra/dra.fh \ pario/dra/dra.h pario/eaf/eaf.fh pario/eaf/eaf.h \ pario/elio/chemio.h pario/elio/elio.h pario/sf/coms.h \ pario/sf/sf.fh pario/sf/sf.h ga++/src/ga++.h \ ga++/src/GAServices.h ga++/src/GlobalArray.h \ ga++/src/init_term.h ga++/src/PGroup.h ga++/src/services.h \ gparrays/src/gp.h gparrays/src/gp-papi.h gaf2c/typesf2c.h \ gaf2c/farg.h tcgmsg/tcgmsg.fh tcgmsg/tcgmsg.h \ tcgmsg/tcgmsg-mpi/msgtypesc.h tcgmsg/tcgmsg-mpi/msgtypesf.h HEADERS = $(include_HEADERS) $(nodist_include_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ check recheck check-html recheck-html distdir dist dist-all \ distcheck ETAGS = etags CTAGS = ctags # If stdout is a non-dumb tty, use colors. If test -t is not supported, # then this fails; a conservative approach. Of course do not redirect # stdout here, just stderr. am__tty_colors = \ red=; grn=; lgn=; blu=; std=; \ test "X$(AM_COLOR_TESTS)" != Xno \ && test "X$$TERM" != Xdumb \ && { test "X$(AM_COLOR_TESTS)" = Xalways || test -t 1 2>/dev/null; } \ && { \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ std=''; \ } # Restructured Text title and section. am__rst_title = sed 's/.*/ & /;h;s/./=/g;p;x;p;g;p;s/.*//' am__rst_section = sed 'p;s/./=/g;p;g' # Put stdin (possibly several lines separated by ". ") in a box. # Prefix each line by 'col' and terminate each with 'std', for coloring. # Multi line coloring is problematic with "less -R", so we really need # to color each line individually. am__text_box = $(AWK) '{ \ n = split($$0, lines, "\\. "); max = 0; \ for (i = 1; i <= n; ++i) \ if (max < length(lines[i])) \ max = length(lines[i]); \ for (i = 0; i < max; ++i) \ line = line "="; \ print col line std; \ for (i = 1; i <= n; ++i) \ if (lines[i]) \ print col lines[i] std; \ print col line std; \ }' # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log, and passes # TESTS_ENVIRONMENT. Save and restore TERM around use of # TESTS_ENVIRONMENT, in case that unsets it. am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ srcdir=$(srcdir); export srcdir; \ rm -f $@-t; \ am__trap='rm -f '\''$(abs_builddir)/$@-t'\''; (exit $$st); exit $$st'; \ trap "st=129; $$am__trap" 1; trap "st=130; $$am__trap" 2; \ trap "st=141; $$am__trap" 13; trap "st=143; $$am__trap" 15; \ am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`; \ test "x$$am__odir" = x. || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; __SAVED_TERM=$$TERM; \ $(TESTS_ENVIRONMENT) # To be appended to the command running the test. Handle the stdout # and stderr redirection, and catch the exit status. am__check_post = \ >$@-t 2>&1; \ estatus=$$?; \ if test -n '$(DISABLE_HARD_ERRORS)' \ && test $$estatus -eq 99; then \ estatus=1; \ fi; \ TERM=$$__SAVED_TERM; export TERM; \ $(am__tty_colors); \ xfailed=PASS; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ xfailed=XFAIL;; \ esac; \ case $$estatus.$$xfailed in \ 0.XFAIL) col=$$red; res=XPASS;; \ 0.*) col=$$grn; res=PASS ;; \ 77.*) col=$$blu; res=SKIP ;; \ 99.*) col=$$red; res=FAIL ;; \ *.XFAIL) col=$$lgn; res=XFAIL;; \ *.*) col=$$red; res=FAIL ;; \ esac; \ echo "$${col}$$res$${std}: $$f"; \ echo "$$res: $$f (exit: $$estatus)" | \ $(am__rst_section) >$@; \ cat $@-t >>$@; \ rm -f $@-t RECHECK_LOGS = $(TEST_LOGS) TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html) am__EXEEXT_17 = am__EXEEXT_18 = $(MA_SERIAL_TESTS) $(am__EXEEXT_17) $(am__EXEEXT_17) am__EXEEXT_19 = $(am__EXEEXT_17) $(GLOBAL_PARALLEL_TESTS) \ $(CXX_PARALLEL_TESTS) am__EXEEXT_20 = $(MA_SERIAL_TESTS_XFAIL) $(am__EXEEXT_17) \ $(am__EXEEXT_17) am__EXEEXT_21 = $(am__EXEEXT_17) $(am__EXEEXT_17) $(am__EXEEXT_17) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) TEST_LOGS_TMP = $(TEST_LOGS:.log=.log-t) DIST_SUBDIRS = comex armci . DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARMCI_NETWORK_CPPFLAGS = @ARMCI_NETWORK_CPPFLAGS@ ARMCI_NETWORK_LDFLAGS = @ARMCI_NETWORK_LDFLAGS@ ARMCI_NETWORK_LIBS = @ARMCI_NETWORK_LIBS@ ARMCI_SRC_DIR = @ARMCI_SRC_DIR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLAS_CPPFLAGS = @BLAS_CPPFLAGS@ BLAS_LDFLAGS = @BLAS_LDFLAGS@ BLAS_LIBS = @BLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ C_POINTER_AS_INTEGER = @C_POINTER_AS_INTEGER@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F2C_DOUBLE_PRECISION_C_TYPE = @F2C_DOUBLE_PRECISION_C_TYPE@ F2C_GETARG = @F2C_GETARG@ F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS = @F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS@ F2C_IARGC = @F2C_IARGC@ F2C_INTEGER_C_TYPE = @F2C_INTEGER_C_TYPE@ F2C_REAL_C_TYPE = @F2C_REAL_C_TYPE@ F77 = @F77@ F77LINK = @F77LINK@ FFLAGS = @FFLAGS@ FFLAG_INT = @FFLAG_INT@ FGREP = @FGREP@ FLD_NOMAIN = @FLD_NOMAIN@ FLIBS = @FLIBS@ GA_ACCESS_INDEX_TYPE = @GA_ACCESS_INDEX_TYPE@ GA_COPT = @GA_COPT@ GA_CXXOPT = @GA_CXXOPT@ GA_CXX_WARN = @GA_CXX_WARN@ GA_C_WARN = @GA_C_WARN@ GA_FOPT = @GA_FOPT@ GA_F_WARN = @GA_F_WARN@ GA_MP_CPPFLAGS = @GA_MP_CPPFLAGS@ GA_MP_LDFLAGS = @GA_MP_LDFLAGS@ GA_MP_LIBS = @GA_MP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LAPACK_CPPFLAGS = @LAPACK_CPPFLAGS@ LAPACK_LDFLAGS = @LAPACK_LDFLAGS@ LAPACK_LIBS = @LAPACK_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ M4 = @M4@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MA_ACCESS_INDEX_TYPE = @MA_ACCESS_INDEX_TYPE@ MA_ACCESS_INDEX_TYPE_C = @MA_ACCESS_INDEX_TYPE_C@ MA_LONG_DOUBLE = @MA_LONG_DOUBLE@ MKDIR_P = @MKDIR_P@ MPICC = @MPICC@ MPICXX = @MPICXX@ MPIEXEC = @MPIEXEC@ MPIF77 = @MPIF77@ NM = @NM@ NMEDIT = @NMEDIT@ NPROCS = @NPROCS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PLOTLIB = @PLOTLIB@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SCALAPACK_CPPFLAGS = @SCALAPACK_CPPFLAGS@ SCALAPACK_LDFLAGS = @SCALAPACK_LDFLAGS@ SCALAPACK_LIBS = @SCALAPACK_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TCGEXEC = @TCGEXEC@ THREAD_LIBRARY = @THREAD_LIBRARY@ VERSION = @VERSION@ XMKMF = @XMKMF@ X_CPPFLAGS = @X_CPPFLAGS@ X_LDFLAGS = @X_LDFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ am__v_F77LD_0 = @am__v_F77LD_0@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # The usual aclocal nonsense to get include paths right. ACLOCAL_AMFLAGS = -I m4 # All public headers, installed programs, test programs, and example programs # are listed in these variables. Appended to throughout. These are the # automake variables used. include_HEADERS = ma/error.h ma/macdecls.h ma/macommon.h ma/maf2c.fh \ ma/mafdecls.fh ma/matypes.h ma/scope.h ma/string-util.h \ ma/table.h global/src/gacommon.h global/src/ga.h \ global/src/global.fh global/src/ga-papi.h $(am__append_16) \ pario/dra/dra.fh pario/dra/dra.h pario/eaf/eaf.fh \ pario/eaf/eaf.h pario/elio/chemio.h pario/elio/elio.h \ pario/sf/coms.h pario/sf/sf.fh pario/sf/sf.h $(am__append_36) \ $(am__append_43) gaf2c/typesf2c.h gaf2c/farg.h \ tcgmsg/tcgmsg.fh tcgmsg/tcgmsg.h tcgmsg/tcgmsg-mpi/msgtypesc.h \ tcgmsg/tcgmsg-mpi/msgtypesf.h nodist_include_HEADERS = global/src/ga-wapi.h $(am__append_44) bin_SCRIPTS = tools/ga-config check_LTLIBRARIES = lib_LTLIBRARIES = libga.la $(am__append_6) $(am__append_35) ############################################################################## # compat # # Although the compat directory houses replacements for missing or erroneous # standard C functions and such sources are conditionally compiled based on # results from configure tests, without the "random" implementation the # m4-generated tests always fail for scatter and copy_patch. ############################################################################## # ma # ############################################################################## # pario # ############################################################################## # gaf2c # ############################################################################## # tcgmsg # libga_la_SOURCES = compat/random.c ma/error.c ma/f2c.c ma/ma.c ma/ma.h \ ma/memcpy.h ma/string-util.c ma/table.c $(am__append_2) \ LinAlg/lapack+blas/xgemm.c LinAlg/lapack+blas/xgemm.h \ LinAlg/lapack+blas/galinalg.h LinAlg/lapack+blas/galinalg.fh \ global/src/abstract_ops.h global/src/base.c global/src/base.h \ global/src/capi.c global/src/cnames.h global/src/collect.c \ global/src/datatypes.c global/src/decomp.c global/src/diag.fh \ global/src/DP.c global/src/elem_alg.c global/src/fapi.c \ global/src/ga_ckpt.h global/src/gaconfig.h \ global/src/ga_diag_seqc.c global/src/ga_malloc.c \ global/src/ga_profile.h global/src/ga_solve_seq.c \ global/src/ga_symmetr.c global/src/ga_trace.c \ global/src/ghosts.c global/src/global.h \ global/src/global.nalg.c global/src/global.npatch.c \ global/src/global.periodic.c global/src/globalp.h \ global/src/global.util.c global/src/hsort.scat.c \ global/src/matmul.c global/src/matmul.h global/src/matrix.c \ global/src/nbutil.c global/src/onesided.c \ global/src/peigstubs.c global/src/scalapack.fh \ global/src/sclstubs.c global/src/select.c global/src/sparse.c \ global/src/types.xh global/src/types2.xh $(am__append_11) \ $(am__append_12) $(am__append_13) $(am__append_14) \ $(am__append_15) pario/dra/buffers.c pario/dra/buffers.h \ pario/dra/capi.c pario/dra/disk.arrays.c \ pario/dra/disk.param.c pario/dra/draf2c.h pario/dra/drap.h \ pario/dra/env.c pario/dra/fortran.c pario/dra/patch.util.c \ pario/eaf/eaf.c pario/eaf/eaf_f2c.c pario/eaf/eafP.h \ pario/elio/elio.c pario/elio/eliop.h pario/elio/pablo.h \ pario/elio/stat.c pario/sf/sf_capi.c pario/sf/sff2c.h \ pario/sf/sf_fortran.c pario/sf/shared.files.c $(am__append_41) \ gaf2c/gaf2c.c gaf2c/drand.c $(am__append_48) tcgmsg/capi.c \ tcgmsg/fapi.c $(am__append_51) # As of ga-5-2 libarmci is no longer rolled up into libga. libga_la_LIBADD = $(SCALAPACK_LIBS) $(LAPACK_LIBS) $(BLAS_LIBS) \ $(am__append_60) $(am__append_61) $(am__append_62) \ $(am__append_63) nodist_libga_la_SOURCES = config.fh $(am__append_8) $(am__append_9) \ global/src/ga-wapidefs.h $(am__append_42) ############################################################################## # global # ############################################################################## # global/doc # ############################################################################## # tcgmsg/examples # # NOTE: While we don't build the tcgmsg examples, we include everything in the # distribution anyway. # ############################################################################## # tascel # The tascel directory is not automatically configured nor added to SUBDIRS. # However, it is still distributed with GA. ############################################################################## # gfutex # The gfutex directory is not automatically configured nor added to SUBDIRS. # However, it is still distributed with GA. EXTRA_DIST = README LinAlg/lapack+blas/README global/README \ $(am__append_10) tools/wapigen.py tools/wapigen_counts.py \ tools/wapigen_trace.py $(am__append_27) \ global/examples/boltzmann/README \ global/examples/lennard-jones/README \ global/examples/md_cluster/atom.inp \ global/examples/scf/be16.inpt global/examples/scf/be.inpt \ global/examples/scf/ft-scf.F global/examples/scf/README \ global/X/README global/trace/README global/trace/test.f \ global/doc/README global/doc/Supercomputing94.pdf \ global/doc/user.pdf pario/dra/dbg_read.c pario/dra/dbg_write.c \ pario/dra/dra2arviz.c pario/dra/global.unsup.c \ pario/dra/README ga++/README tcgmsg/examples/blkdat120lin.f \ tcgmsg/examples/blkdat15.f tcgmsg/examples/blkdat240lin.f \ tcgmsg/examples/blkdat30.f tcgmsg/examples/blkdat60.f \ tcgmsg/examples/blkdat60lin.f tcgmsg/examples/cscf120lin.h \ tcgmsg/examples/cscf15.h tcgmsg/examples/cscf240lin.h \ tcgmsg/examples/cscf30.h tcgmsg/examples/cscf60.h \ tcgmsg/examples/cscf60lin.h tcgmsg/examples/cscf.h \ tcgmsg/examples/daxpy1.s tcgmsg/examples/daxpy.f \ tcgmsg/examples/ddot.f tcgmsg/examples/demo.proto \ tcgmsg/examples/diagon.f tcgmsg/examples/dscal.f \ tcgmsg/examples/fexit.f.proto tcgmsg/examples/getmem.c \ tcgmsg/examples/grid.c tcgmsg/examples/ieeetrap.c \ tcgmsg/examples/integ.f tcgmsg/examples/jacobi.f \ tcgmsg/examples/Makefile.proto tcgmsg/examples/mc.f \ tcgmsg/examples/mc.input tcgmsg/examples/md.f \ tcgmsg/examples/mxv_daxpy1.f tcgmsg/examples/mxv_dgemv.f \ tcgmsg/examples/mxv_fortran.f tcgmsg/examples/output.f \ tcgmsg/examples/prtri.f tcgmsg/examples/random.c \ tcgmsg/examples/README tcgmsg/examples/runit \ tcgmsg/examples/runit.grid tcgmsg/examples/scfblas.f \ tcgmsg/examples/scf.f tcgmsg/examples/timer.f \ tcgmsg/examples/trace.out tcgmsg/examples/xpix.shar \ tcgmsg/tcgmsg-mpi/README tascel gfutex ############################################################################## # config # # The config.h file is automatically generated from config.h.in at configure # time. However, it contains symbols which certain Fortran compilers do not # understand. Therefore, we create a config.fh file which is Fortran-specific # and works with all Fortran compilers. # BUILT_SOURCES = config.fh global/src/ga-wapi.h \ global/src/ga-wapidefs.h $(am__append_39) MOSTLYCLEANFILES = CLEANFILES = $(bin_SCRIPTS) config.fh global/src/ga-wapi.h \ global/src/ga-wapidefs.h $(am__append_28) $(am__append_40) DISTCLEANFILES = MAINTAINERCLEANFILES = AM_FFLAGS = $(GA_FOPT) $(GA_F_WARN) $(FFLAG_INT) AM_CFLAGS = $(GA_COPT) $(GA_C_WARN) AM_CXXFLAGS = $(GA_CXXOPT) $(GA_CXX_WARN) ############################################################################## # global/testing # AM_CPPFLAGS = $(SCALAPACK_CPPFLAGS) $(LAPACK_CPPFLAGS) \ $(BLAS_CPPFLAGS) $(GA_MP_CPPFLAGS) $(ARMCI_NETWORK_CPPFLAGS) \ -I$(top_build_prefix)ma -I$(top_srcdir)/ma \ -I$(top_srcdir)/LinAlg/lapack+blas \ -I$(top_build_prefix)global/src -I$(top_srcdir)/global/src \ -I$(top_srcdir)/global/testing -I$(top_srcdir)/pario/dra \ -I$(top_srcdir)/pario/eaf -I$(top_srcdir)/pario/elio \ -I$(top_srcdir)/pario/sf $(am__append_37) $(am__append_47) \ -I$(top_build_prefix)gaf2c -I$(top_srcdir)/gaf2c \ -I$(top_srcdir)/tcgmsg $(am__append_52) $(am__append_55) \ $(am__append_56) $(am__append_57) $(am__append_58) \ $(am__append_59) AM_LDFLAGS = $(SCALAPACK_LDFLAGS) $(LAPACK_LDFLAGS) $(BLAS_LDFLAGS) \ $(GA_MP_LDFLAGS) $(ARMCI_NETWORK_LDFLAGS) $(am__append_1) FLDFLAGS = $(SCALAPACK_LDFLAGS) $(LAPACK_LDFLAGS) $(BLAS_LDFLAGS) \ $(GA_MP_LDFLAGS) $(ARMCI_NETWORK_LDFLAGS) LDADD = $(LTLIBOBJS) libga.la $(SCALAPACK_LIBS) $(LAPACK_LIBS) \ $(BLAS_LIBS) $(GA_MP_LIBS) $(ARMCI_NETWORK_LIBS) # Certain trickery when turning Fortran support on or off. @ENABLE_F77_TRUE@MAYBE_DUMMY_F_LINK = dummy.f @ENABLE_F77_TRUE@MAYBE_FLIBS = $(FLIBS) ############################################################################## # compiler and linker flags # # Important for external tools wanting to know how to link to GA. This # functionality caries over from the pre-autotools GA build. SED_NORMALIZE_WHITESPACE = $(SED) 's/ [ ]*/ /g;s/" /"/g;s/ "/"/g' #MA_SERIAL_TESTS += ma/testc$(EXEEXT) # iteractive prompt MA_SERIAL_TESTS = ma/test-coalesce$(EXEEXT) ma/test-inquire$(EXEEXT) \ $(am__append_4) MA_SERIAL_TESTS_XFAIL = $(am__append_5) MA_PARALLEL_TESTS = MA_PARALLEL_TESTS_XFAIL = MA_TESTS = $(MA_SERIAL_TESTS) $(MA_PARALLEL_TESTS) MA_TESTS_XFAIL = $(MA_SERIAL_TESTS_XFAIL) $(MA_PARALLEL_TESTS_XFAIL) ma_testf_SOURCES = ma/testf.F ma_testc_SOURCES = ma/testc.c ma_test_coalesce_SOURCES = ma/test-coalesce.c ma_test_inquire_SOURCES = ma/test-inquire.c ma_testf_LDFLAGS = $(FLDFLAGS) nodist_EXTRA_ma_testc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_ma_test_coalesce_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_ma_test_inquire_SOURCES = $(MAYBE_DUMMY_F_LINK) @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@libwapi_la_SOURCES = tools/ga-wapi.c \ @ENABLE_PROFILING_TRUE@@HAVE_SYS_WEAK_ALIAS_PRAGMA_TRUE@ $(am__append_7) ############################################################################## # global/src # PAPI_H = $(top_srcdir)/global/src/ga-papi.h GLOBAL_SERIAL_TESTS = GLOBAL_SERIAL_TESTS_XFAIL = #GLOBAL_PARALLEL_TESTS += global/testing/big$(EXEEXT) # needs lots of memory #GLOBAL_PARALLEL_TESTS += global/testing/gatscat$(EXEEXT) # broken GLOBAL_PARALLEL_TESTS = global/testing/elempatch$(EXEEXT) \ global/testing/getmem$(EXEEXT) global/testing/mtest$(EXEEXT) \ global/testing/mulmatpatchc$(EXEEXT) \ global/testing/ntestc$(EXEEXT) global/testing/ntestfc$(EXEEXT) \ global/testing/packc$(EXEEXT) \ global/testing/patch_enumc$(EXEEXT) \ global/testing/print$(EXEEXT) \ global/testing/scan_addc$(EXEEXT) \ global/testing/scan_copyc$(EXEEXT) \ global/testing/testc$(EXEEXT) \ global/testing/testmatmultc$(EXEEXT) \ global/testing/testmult$(EXEEXT) \ global/testing/testmultrect$(EXEEXT) \ global/testing/unpackc$(EXEEXT) $(am__append_23) \ $(am__append_24) $(am__append_25) $(am__append_26) \ $(am__append_30) \ global/examples/lennard-jones/lennard$(EXEEXT) \ $(am__append_33) GLOBAL_PARALLEL_TESTS_XFAIL = GLOBAL_TESTS = $(GLOBAL_SERIAL_TESTS) $(GLOBAL_PARALLEL_TESTS) GLOBAL_TESTS_XFAIL = $(GLOBAL_SERIAL_TESTS_XFAIL) $(GLOBAL_PARALLEL_TESTS_XFAIL) #GLOBAL_PARALLEL_TESTS += global/testing/ipc_clean$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_abs_value$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_acc$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_add$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_add_constant$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_add_constantpatch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_add_diagonal$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_add_patch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_copy2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_copy3$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_copy$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_copypatch2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_copypatch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_create1$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_create2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_create3$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_create$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_create_handle$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_create_irreg2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_create_irreg3$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_create_irreg$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_destroy$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_dgop$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_dot$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_duplicate$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_elem_divide$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_elem_dividepatch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_elem_maximum$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_elem_maximumpatch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_elem_minimum$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_elem_minimumpatch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_elem_multiply$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_elem_multiplypatch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_fill$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_fillpatch1$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_fillpatch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_gather2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_gather3$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_gather$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_get_blockinfo$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_get$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_get_diagonal$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_igop2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_igop$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_inquire$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_intialize$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_lgop$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_median$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_ndim2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_ndim$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_nnodes$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_nodeid$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_create2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_create3$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_create4$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_create5$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_create$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_destroy2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_destroy$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_nnodes_nodeid$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_pgroup_setdefault$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_put2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_put$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_scale2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_scale$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_scale_cols$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_scale_patch$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_scale_rows$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_scatter$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_set_data$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_set_diagonal$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_set_restricted$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_solve$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_sync$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_transpose2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_transpose3$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_transpose$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_zero$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_zerodiagonal$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_zeropatch2$(EXEEXT) #GLOBAL_PARALLEL_TESTS += global/testing/unit-tests/ga_zeropatch$(EXEEXT) @HAVE_M4_TRUE@GLOBAL_TESTING_M4_DEPS = \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_GA_FILL.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_main.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_NGA_ACC.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_NGA_ADD_PATCH.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_NGA_COPY_PATCH.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_NGA_DOT_PATCH.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_NGA_FILL_PATCH.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_NGA_GATHER.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_NGA_GET.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_NGA_PERIODIC_ACC.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_NGA_PERIODIC_GET.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_NGA_PERIODIC_PUT.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_NGA_PUT.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_NGA_SCALE_PATCH.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_NGA_SCATTER_ACC.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_NGA_SCATTER.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_util_comm.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ndim_util.src \ @HAVE_M4_TRUE@ global/testing/ngatest_src/ngatest.def \ @HAVE_M4_TRUE@ global/testing/nga-onesided.m4 \ @HAVE_M4_TRUE@ global/testing/nga-patch.m4 \ @HAVE_M4_TRUE@ global/testing/nga-periodic.m4 \ @HAVE_M4_TRUE@ global/testing/nga-scatter.m4 \ @HAVE_M4_TRUE@ global/testing/ngatest.m4 \ @HAVE_M4_TRUE@ global/testing/nga-util.m4 gtsrc = global/testing/testutil.fh global/testing/testutil.h \ global/testing/util.c $(am__append_31) global_testing_big_SOURCES = global/testing/big.c $(gtsrc) global_testing_bin_SOURCES = global/testing/bin.F $(gtsrc) global_testing_blktest_SOURCES = global/testing/blktest.F $(gtsrc) global_testing_d2test_SOURCES = global/testing/d2test.F $(gtsrc) global_testing_elempatch_SOURCES = global/testing/elempatch.c $(gtsrc) global_testing_field_test_SOURCES = global/testing/field-test.F $(gtsrc) global_testing_g2test_SOURCES = global/testing/g2test.F $(gtsrc) global_testing_g3test_SOURCES = global/testing/g3test.F $(gtsrc) global_testing_ga_lu_SOURCES = global/testing/ga_lu.c $(gtsrc) global_testing_ga_mpi_SOURCES = global/testing/ga-mpi.c $(gtsrc) global_testing_ga_shift_SOURCES = global/testing/ga_shift.F $(gtsrc) global_testing_gatscat_SOURCES = global/testing/gatscat.c $(gtsrc) global_testing_getmem_SOURCES = global/testing/getmem.c $(gtsrc) global_testing_ghosts_SOURCES = global/testing/ghosts.F $(gtsrc) global_testing_ipc_clean_SOURCES = global/testing/ipc.clean.c $(gtsrc) global_testing_jacobi_SOURCES = global/testing/jacobi.F $(gtsrc) global_testing_lock_SOURCES = global/testing/lock.c $(gtsrc) global_testing_mir_perf2_SOURCES = global/testing/mir_perf2.F $(gtsrc) global_testing_mmatrix_SOURCES = global/testing/mmatrix.F $(gtsrc) global_testing_mtest_SOURCES = global/testing/mtest.c $(gtsrc) global_testing_mulmatpatch_SOURCES = global/testing/mulmatpatch.F $(gtsrc) global_testing_mulmatpatchc_SOURCES = global/testing/mulmatpatchc.c $(gtsrc) global_testing_nb2test_SOURCES = global/testing/nb2test.F $(gtsrc) global_testing_ndim_SOURCES = global/testing/ndim.F $(gtsrc) global_testing_ntestc_SOURCES = global/testing/ntestc.c $(gtsrc) global_testing_ntestfc_SOURCES = global/testing/ntestfc.c $(gtsrc) global_testing_packc_SOURCES = global/testing/packc.c $(gtsrc) global_testing_patch_SOURCES = global/testing/patch.F $(gtsrc) global_testing_patch2_SOURCES = global/testing/patch2.F $(gtsrc) global_testing_patch_enumc_SOURCES = global/testing/patch_enumc.c $(gtsrc) global_testing_patch_enumf_SOURCES = global/testing/patch_enumf.F $(gtsrc) global_testing_perf_SOURCES = global/testing/perf.F $(gtsrc) global_testing_perf2_SOURCES = global/testing/perf2.c $(gtsrc) global_testing_perfmod_SOURCES = global/testing/perfmod.F $(gtsrc) global_testing_perform_SOURCES = global/testing/perform.F $(gtsrc) global_testing_pg2test_SOURCES = global/testing/pg2test.F $(gtsrc) global_testing_pg2testmatmult_SOURCES = global/testing/pg2testmatmult.F $(gtsrc) global_testing_pgtest_SOURCES = global/testing/pgtest.F $(gtsrc) global_testing_pgtestmatmult_SOURCES = global/testing/pgtestmatmult.F $(gtsrc) global_testing_print_SOURCES = global/testing/print.c $(gtsrc) global_testing_random_SOURCES = global/testing/random.F $(gtsrc) global_testing_scan_SOURCES = global/testing/scan.F $(gtsrc) global_testing_scan_addc_SOURCES = global/testing/scan_addc.c $(gtsrc) global_testing_scan_copyc_SOURCES = global/testing/scan_copyc.c $(gtsrc) global_testing_simple_groups_SOURCES = global/testing/simple_groups.F $(gtsrc) global_testing_simple_groups_comm_SOURCES = global/testing/simple_groups_comm.F $(gtsrc) global_testing_simple_groups_commc_SOURCES = global/testing/simple_groups_commc.c $(gtsrc) global_testing_sparse_SOURCES = global/testing/sparse.F $(gtsrc) global_testing_sprsmatmult_SOURCES = global/testing/sprsmatmult.F $(gtsrc) global_testing_stride_SOURCES = global/testing/stride.F $(gtsrc) global_testing_test_SOURCES = global/testing/test.F $(gtsrc) global_testing_test_mirrored_SOURCES = global/testing/test.F $(gtsrc) global_testing_testc_SOURCES = global/testing/testc.c $(gtsrc) global_testing_testeig_SOURCES = global/testing/testeig.F $(gtsrc) global_testing_testmatmult_SOURCES = global/testing/testmatmult.F $(gtsrc) global_testing_testmatmultc_SOURCES = global/testing/testmatmultc.c $(gtsrc) global_testing_testmult_SOURCES = global/testing/testmult.c $(gtsrc) global_testing_testmultrect_SOURCES = global/testing/testmultrect.c $(gtsrc) global_testing_testsolve_SOURCES = global/testing/testsolve.F $(gtsrc) global_testing_testspd_SOURCES = global/testing/testspd.F $(gtsrc) global_testing_types_test_SOURCES = global/testing/types-test.F $(gtsrc) global_testing_unpackc_SOURCES = global/testing/unpackc.c $(gtsrc) nodist_global_testing_nga_onesided_SOURCES = global/testing/nga-onesided.F $(gtsrc) nodist_global_testing_nga_patch_SOURCES = global/testing/nga-patch.F $(gtsrc) nodist_global_testing_nga_periodic_SOURCES = global/testing/nga-periodic.F $(gtsrc) nodist_global_testing_nga_scatter_SOURCES = global/testing/nga-scatter.F $(gtsrc) nodist_global_testing_nga_util_SOURCES = global/testing/nga-util.F $(gtsrc) nodist_global_testing_ngatest_SOURCES = global/testing/ngatest.F $(gtsrc) UNIT_TEST_EXTRA_SRC = global/testing/unit-tests/mock.c \ global/testing/unit-tests/mock.h global_testing_unit_tests_ga_abs_value_SOURCES = global/testing/unit-tests/ga_abs_value.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_acc_SOURCES = global/testing/unit-tests/ga_acc.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_add_SOURCES = global/testing/unit-tests/ga_add.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_add_constant_SOURCES = global/testing/unit-tests/ga_add_constant.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_add_constantpatch_SOURCES = global/testing/unit-tests/ga_add_constantpatch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_add_diagonal_SOURCES = global/testing/unit-tests/ga_add_diagonal.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_add_patch_SOURCES = global/testing/unit-tests/ga_add_patch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_copy2_SOURCES = global/testing/unit-tests/ga_copy2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_copy3_SOURCES = global/testing/unit-tests/ga_copy3.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_copy_SOURCES = global/testing/unit-tests/ga_copy.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_copypatch2_SOURCES = global/testing/unit-tests/ga_copypatch2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_copypatch_SOURCES = global/testing/unit-tests/ga_copypatch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_create1_SOURCES = global/testing/unit-tests/ga_create1.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_create2_SOURCES = global/testing/unit-tests/ga_create2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_create3_SOURCES = global/testing/unit-tests/ga_create3.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_create_SOURCES = global/testing/unit-tests/ga_create.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_create_handle_SOURCES = global/testing/unit-tests/ga_create_handle.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_create_irreg2_SOURCES = global/testing/unit-tests/ga_create_irreg2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_create_irreg3_SOURCES = global/testing/unit-tests/ga_create_irreg3.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_create_irreg_SOURCES = global/testing/unit-tests/ga_create_irreg.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_destroy_SOURCES = global/testing/unit-tests/ga_destroy.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_dgop_SOURCES = global/testing/unit-tests/ga_dgop.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_dot_SOURCES = global/testing/unit-tests/ga_dot.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_duplicate_SOURCES = global/testing/unit-tests/ga_duplicate.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_elem_divide_SOURCES = global/testing/unit-tests/ga_elem_divide.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_elem_dividepatch_SOURCES = global/testing/unit-tests/ga_elem_dividepatch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_elem_maximum_SOURCES = global/testing/unit-tests/ga_elem_maximum.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_elem_maximumpatch_SOURCES = global/testing/unit-tests/ga_elem_maximumpatch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_elem_minimum_SOURCES = global/testing/unit-tests/ga_elem_minimum.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_elem_minimumpatch_SOURCES = global/testing/unit-tests/ga_elem_minimumpatch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_elem_multiply_SOURCES = global/testing/unit-tests/ga_elem_multiply.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_elem_multiplypatch_SOURCES = global/testing/unit-tests/ga_elem_multiplypatch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_fill_SOURCES = global/testing/unit-tests/ga_fill.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_fillpatch1_SOURCES = global/testing/unit-tests/ga_fillpatch1.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_fillpatch_SOURCES = global/testing/unit-tests/ga_fillpatch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_gather2_SOURCES = global/testing/unit-tests/ga_gather2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_gather3_SOURCES = global/testing/unit-tests/ga_gather3.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_gather_SOURCES = global/testing/unit-tests/ga_gather.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_get_blockinfo_SOURCES = global/testing/unit-tests/ga_get_blockinfo.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_get_SOURCES = global/testing/unit-tests/ga_get.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_get_diagonal_SOURCES = global/testing/unit-tests/ga_get_diagonal.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_igop2_SOURCES = global/testing/unit-tests/ga_igop2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_igop_SOURCES = global/testing/unit-tests/ga_igop.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_inquire_SOURCES = global/testing/unit-tests/ga_inquire.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_intialize_SOURCES = global/testing/unit-tests/ga_intialize.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_lgop_SOURCES = global/testing/unit-tests/ga_lgop.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_median_SOURCES = global/testing/unit-tests/ga_median.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_ndim2_SOURCES = global/testing/unit-tests/ga_ndim2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_ndim_SOURCES = global/testing/unit-tests/ga_ndim.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_nnodes_SOURCES = global/testing/unit-tests/ga_nnodes.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_nodeid_SOURCES = global/testing/unit-tests/ga_nodeid.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_create2_SOURCES = global/testing/unit-tests/ga_pgroup_create2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_create3_SOURCES = global/testing/unit-tests/ga_pgroup_create3.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_create4_SOURCES = global/testing/unit-tests/ga_pgroup_create4.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_create5_SOURCES = global/testing/unit-tests/ga_pgroup_create5.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_create_SOURCES = global/testing/unit-tests/ga_pgroup_create.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_destroy2_SOURCES = global/testing/unit-tests/ga_pgroup_destroy2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_destroy_SOURCES = global/testing/unit-tests/ga_pgroup_destroy.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_nnodes_nodeid_SOURCES = global/testing/unit-tests/ga_pgroup_nnodes_nodeid.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_pgroup_setdefault_SOURCES = global/testing/unit-tests/ga_pgroup_setdefault.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_put2_SOURCES = global/testing/unit-tests/ga_put2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_put_SOURCES = global/testing/unit-tests/ga_put.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_scale2_SOURCES = global/testing/unit-tests/ga_scale2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_scale_SOURCES = global/testing/unit-tests/ga_scale.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_scale_cols_SOURCES = global/testing/unit-tests/ga_scale_cols.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_scale_patch_SOURCES = global/testing/unit-tests/ga_scale_patch.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_scale_rows_SOURCES = global/testing/unit-tests/ga_scale_rows.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_scatter_SOURCES = global/testing/unit-tests/ga_scatter.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_set_data_SOURCES = global/testing/unit-tests/ga_set_data.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_set_diagonal_SOURCES = global/testing/unit-tests/ga_set_diagonal.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_set_restricted_SOURCES = global/testing/unit-tests/ga_set_restricted.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_solve_SOURCES = global/testing/unit-tests/ga_solve.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_sync_SOURCES = global/testing/unit-tests/ga_sync.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_transpose2_SOURCES = global/testing/unit-tests/ga_transpose2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_transpose3_SOURCES = global/testing/unit-tests/ga_transpose3.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_transpose_SOURCES = global/testing/unit-tests/ga_transpose.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_zero_SOURCES = global/testing/unit-tests/ga_zero.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_zerodiagonal_SOURCES = global/testing/unit-tests/ga_zerodiagonal.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_zeropatch2_SOURCES = global/testing/unit-tests/ga_zeropatch2.c $(UNIT_TEST_EXTRA_SRC) global_testing_unit_tests_ga_zeropatch_SOURCES = global/testing/unit-tests/ga_zeropatch.c $(UNIT_TEST_EXTRA_SRC) global_testing_bin_LDFLAGS = $(FLDFLAGS) global_testing_blktest_LDFLAGS = $(FLDFLAGS) global_testing_d2test_LDFLAGS = $(FLDFLAGS) global_testing_field_test_LDFLAGS = $(FLDFLAGS) global_testing_g2test_LDFLAGS = $(FLDFLAGS) global_testing_g3test_LDFLAGS = $(FLDFLAGS) global_testing_ga_shift_LDFLAGS = $(FLDFLAGS) global_testing_ghosts_LDFLAGS = $(FLDFLAGS) global_testing_jacobi_LDFLAGS = $(FLDFLAGS) global_testing_mir_perf2_LDFLAGS = $(FLDFLAGS) global_testing_mmatrix_LDFLAGS = $(FLDFLAGS) global_testing_mulmatpatch_LDFLAGS = $(FLDFLAGS) global_testing_nb2test_LDFLAGS = $(FLDFLAGS) global_testing_ndim_LDFLAGS = $(FLDFLAGS) global_testing_nga_onesided_LDFLAGS = $(FLDFLAGS) global_testing_nga_patch_LDFLAGS = $(FLDFLAGS) global_testing_nga_periodic_LDFLAGS = $(FLDFLAGS) global_testing_nga_scatter_LDFLAGS = $(FLDFLAGS) global_testing_ngatest_LDFLAGS = $(FLDFLAGS) global_testing_nga_util_LDFLAGS = $(FLDFLAGS) global_testing_patch_enumf_LDFLAGS = $(FLDFLAGS) global_testing_patch_LDFLAGS = $(FLDFLAGS) global_testing_patch2_LDFLAGS = $(FLDFLAGS) global_testing_perf_LDFLAGS = $(FLDFLAGS) global_testing_perfmod_LDFLAGS = $(FLDFLAGS) global_testing_perform_LDFLAGS = $(FLDFLAGS) global_testing_pg2test_LDFLAGS = $(FLDFLAGS) global_testing_pg2testmatmult_LDFLAGS = $(FLDFLAGS) global_testing_pgtest_LDFLAGS = $(FLDFLAGS) global_testing_pgtestmatmult_LDFLAGS = $(FLDFLAGS) global_testing_random_LDFLAGS = $(FLDFLAGS) global_testing_scan_LDFLAGS = $(FLDFLAGS) global_testing_simple_groups_LDFLAGS = $(FLDFLAGS) global_testing_simple_groups_comm_LDFLAGS = $(FLDFLAGS) global_testing_sparse_LDFLAGS = $(FLDFLAGS) global_testing_sprsmatmult_LDFLAGS = $(FLDFLAGS) global_testing_stride_LDFLAGS = $(FLDFLAGS) global_testing_testeig_LDFLAGS = $(FLDFLAGS) global_testing_test_LDFLAGS = $(FLDFLAGS) global_testing_test_mirrored_LDFLAGS = $(FLDFLAGS) global_testing_testmatmult_LDFLAGS = $(FLDFLAGS) global_testing_testsolve_LDFLAGS = $(FLDFLAGS) global_testing_testspd_LDFLAGS = $(FLDFLAGS) global_testing_types_test_LDFLAGS = $(FLDFLAGS) nodist_EXTRA_global_testing_big_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_elempatch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_ga_lu_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_ga_mpi_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_gatscat_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_getmem_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_ipc_clean_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_lock_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_mtest_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_mulmatpatchc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_ntestc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_ntestfc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_packc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_patch_enumc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_perf2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_print_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_scan_addc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_scan_copyc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_simple_groups_commc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_testc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_testmatmultc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_testmult_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_testmultrect_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unpackc_SOURCES = $(MAYBE_DUMMY_F_LINK) global_testing_test_mirrored_CPPFLAGS = $(AM_CPPFLAGS) -DMIRROR=1 nodist_EXTRA_global_testing_unit_tests_ga_abs_value_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_acc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_add_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_add_constant_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_add_constantpatch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_add_diagonal_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_add_patch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_copy2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_copy3_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_copy_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_copypatch2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_copypatch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_create1_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_create2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_create3_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_create_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_create_handle_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_create_irreg2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_create_irreg3_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_create_irreg_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_destroy_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_dgop_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_dot_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_duplicate_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_elem_divide_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_elem_dividepatch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_elem_maximum_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_elem_maximumpatch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_elem_minimum_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_elem_minimumpatch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_elem_multiply_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_elem_multiplypatch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_fill_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_fillpatch1_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_fillpatch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_gather2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_gather3_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_gather_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_get_blockinfo_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_get_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_get_diagonal_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_igop2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_igop_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_inquire_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_intialize_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_lgop_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_median_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_ndim2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_ndim_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_nnodes_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_nodeid_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_create2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_create3_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_create4_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_create5_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_create_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_destroy2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_destroy_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_nnodes_nodeid_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_pgroup_setdefault_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_put2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_put_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_scale2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_scale_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_scale_cols_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_scale_patch_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_scale_rows_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_scatter_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_set_data_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_set_diagonal_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_set_restricted_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_solve_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_sync_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_transpose2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_transpose3_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_transpose_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_zero_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_zerodiagonal_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_zeropatch2_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_global_testing_unit_tests_ga_zeropatch_SOURCES = $(MAYBE_DUMMY_F_LINK) #GLOBAL_PARALLEL_TESTS += global/examples/conjugate_gradient/ga_cg$(EXEEXT) # needs input #GLOBAL_PARALLEL_TESTS += global/examples/md_cluster/grp_sim$(EXEEXT) # needs input #GLOBAL_PARALLEL_TESTS += global/examples/scf/scf$(EXEEXT) # needs input global_examples_boltzmann_boltz_SOURCES = \ global/examples/boltzmann/boltzmann.F \ global/examples/boltzmann/common \ global/examples/boltzmann/equil.F \ global/examples/boltzmann/get_patch.F \ global/examples/boltzmann/initpar.F \ global/examples/boltzmann/main.F \ global/examples/boltzmann/printdat.F \ global/examples/boltzmann/properties.F \ global/examples/boltzmann/setup.F \ global/examples/boltzmann/timestep.F \ global/examples/boltzmann/vorticity.F global_examples_boltzmann_boltz_LDFLAGS = $(FLDFLAGS) global_examples_boltzmann_boltz_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/global/examples/boltzmann global_examples_conjugate_gradient_ga_cg_SOURCES = \ global/examples/conjugate_gradient/computeloops.F \ global/examples/conjugate_gradient/finclude.h \ global/examples/conjugate_gradient/ga_cg.c \ global/examples/conjugate_gradient/matvecmul.c \ global/examples/conjugate_gradient/read_input.c global_examples_lennard_jones_lennard_SOURCES = \ global/examples/lennard-jones/lennard.c nodist_EXTRA_global_examples_lennard_jones_lennard_SOURCES = $(MAYBE_DUMMY_F_LINK) global_examples_md_cluster_grp_sim_SOURCES = \ global/examples/md_cluster/cell_list.F \ global/examples/md_cluster/cl_sim.F \ global/examples/md_cluster/cluster.F \ global/examples/md_cluster/common.fh \ global/examples/md_cluster/estats.F \ global/examples/md_cluster/factor.F \ global/examples/md_cluster/force.F \ global/examples/md_cluster/gather.F \ global/examples/md_cluster/grp_sim.F \ global/examples/md_cluster/hash.F \ global/examples/md_cluster/heapsort.F \ global/examples/md_cluster/kin.F \ global/examples/md_cluster/mdinit.F \ global/examples/md_cluster/mdout.F \ global/examples/md_cluster/mdstep.F \ global/examples/md_cluster/newcfg.F \ global/examples/md_cluster/nextc.F \ global/examples/md_cluster/pairs.F \ global/examples/md_cluster/ran3.F \ global/examples/md_cluster/rdpar.F \ global/examples/md_cluster/scatter.F \ global/examples/md_cluster/shuffle.F \ global/examples/md_cluster/sort.F \ global/examples/md_cluster/tstats.F \ global/examples/md_cluster/update.F global_examples_md_cluster_grp_sim_LDFLAGS = $(FLDFLAGS) global_examples_scf_scf_SOURCES = \ global/examples/scf/cscf.h \ global/examples/scf/input.F \ global/examples/scf/integ.F \ global/examples/scf/output.F \ global/examples/scf/scf.F \ global/examples/scf/timer.F global_examples_scf_scf_LDFLAGS = $(FLDFLAGS) @ENABLE_XREGION_TRUE@@NO_X_FALSE@global_X_xregion_SOURCES = \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@global/X/xregion_colormap.c \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@global/X/xregion_dialog.c \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@global/X/xregion_display.c \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@global/X/xregion_fileio.c \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@global/X/xregion_main.c \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@global/X/xregion_overview.c \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@global/X/xregion_pixregion.c \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@global/X/xregion_scrollbars.c \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@global/X/xregion_util.c \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@global/X/xregion_view.c \ @ENABLE_XREGION_TRUE@@NO_X_FALSE@global/X/xregion_xcmap.c @ENABLE_XREGION_TRUE@@NO_X_FALSE@global_X_xregion_CPPFLAGS = $(X_CPPFLAGS) @ENABLE_XREGION_TRUE@@NO_X_FALSE@global_X_xregion_LDFLAGS = $(X_LDFLAGS) @ENABLE_XREGION_TRUE@@NO_X_FALSE@global_X_xregion_LDADD = -lXaw -lXmu -lXt -lX11 -lXau -lXdmcp -lXext global_trace_adjust_SOURCES = global/trace/adjust.c global_trace_adjust_LDFLAGS = global_trace_adjust_LDADD = global_trace_collisions_SOURCES = global/trace/collisions.c global_trace_collisions_LDFLAGS = global_trace_collisions_LDADD = PARIO_SERIAL_TESTS = PARIO_SERIAL_TESTS_XFAIL = #PARIO_PARALLEL_TESTS += pario/dra/dbg_read$(EXEEXT) # barely compiles, wrong test #PARIO_PARALLEL_TESTS += pario/dra/dbg_write$(EXEEXT) # barely compiles, wrong test #PARIO_PARALLEL_TESTS += pario/dra/dra2arviz$(EXEEXT) # not a test? PARIO_PARALLEL_TESTS = pario/dra/bign$(EXEEXT) \ pario/dra/ntestc$(EXEEXT) pario/dra/perfn$(EXEEXT) \ pario/dra/rate$(EXEEXT) PARIO_PARALLEL_TESTS_XFAIL = PARIO_TESTS = $(PARIO_SERIAL_TESTS) $(PARIO_PARALLEL_TESTS) PARIO_TESTS_XFAIL = $(PARIO_SERIAL_TESTS_XFAIL) $(PARIO_PARALLEL_TESTS_XFAIL) dtsrc = pario/dra/ffflush.F pario/dra/util.c pario_dra_big_SOURCES = pario/dra/big.F $(dtsrc) pario_dra_bign_SOURCES = pario/dra/bign.c pario_dra_dbg_read_SOURCES = pario/dra/dbg_read.c pario_dra_dbg_write_SOURCES = pario/dra/dbg_write.c pario_dra_dra2arviz_SOURCES = pario/dra/dra2arviz.c pario_dra_dra_mxm_SOURCES = pario/dra/dra_mxm.F $(dtsrc) pario_dra_ntest_SOURCES = pario/dra/ntest.F $(dtsrc) pario_dra_ntestc_SOURCES = pario/dra/ntestc.c pario_dra_perf_SOURCES = pario/dra/perf.F $(dtsrc) pario_dra_perf2_SOURCES = pario/dra/perf2.F $(dtsrc) pario_dra_perf3_SOURCES = pario/dra/perf3.F $(dtsrc) pario_dra_perfn_SOURCES = pario/dra/perfn.c pario_dra_rate_SOURCES = pario/dra/rate.c pario_dra_test_SOURCES = pario/dra/test.F $(dtsrc) pario_dra_test_mxm_SOURCES = pario/dra/test_mxm.F $(dtsrc) pario_dra_time_mxm_SOURCES = pario/dra/time_mxm.F $(dtsrc) pario_eaf_test_SOURCES = pario/eaf/test.F $(dtsrc) pario_sf_test_SOURCES = pario/sf/test.F $(dtsrc) nodist_EXTRA_pario_dra_bign_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_pario_dra_dbg_read_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_pario_dra_dbg_write_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_pario_dra_dra2arviz_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_pario_dra_ntestc_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_pario_dra_perfn_SOURCES = $(MAYBE_DUMMY_F_LINK) nodist_EXTRA_pario_dra_rate_SOURCES = $(MAYBE_DUMMY_F_LINK) pario_dra_big_LDFLAGS = $(FLDFLAGS) pario_dra_dra_mxm_LDFLAGS = $(FLDFLAGS) pario_dra_ntest_LDFLAGS = $(FLDFLAGS) pario_dra_perf_LDFLAGS = $(FLDFLAGS) pario_dra_perf2_LDFLAGS = $(FLDFLAGS) pario_dra_perf3_LDFLAGS = $(FLDFLAGS) pario_dra_test_LDFLAGS = $(FLDFLAGS) pario_dra_test_mxm_LDFLAGS = $(FLDFLAGS) pario_dra_time_mxm_LDFLAGS = $(FLDFLAGS) pario_eaf_test_LDFLAGS = $(FLDFLAGS) pario_sf_test_LDFLAGS = $(FLDFLAGS) @CXX_BINDINGS_TRUE@libga___la_SOURCES = ga++/src/GAServices.cc \ @CXX_BINDINGS_TRUE@ ga++/src/GlobalArray.cc ga++/src/PGroup.cc \ @CXX_BINDINGS_TRUE@ ga++/src/init_term.cc ga++/src/overload.cc \ @CXX_BINDINGS_TRUE@ ga++/src/services.cc @CXX_BINDINGS_TRUE@CXX_SERIAL_TESTS = @CXX_BINDINGS_TRUE@CXX_SERIAL_TESTS_XFAIL = @CXX_BINDINGS_TRUE@CXX_PARALLEL_TESTS = \ @CXX_BINDINGS_TRUE@ ga++/testing/elempatch$(EXEEXT) \ @CXX_BINDINGS_TRUE@ ga++/testing/mtest$(EXEEXT) \ @CXX_BINDINGS_TRUE@ ga++/testing/ntestc$(EXEEXT) \ @CXX_BINDINGS_TRUE@ ga++/testing/testc$(EXEEXT) \ @CXX_BINDINGS_TRUE@ ga++/testing/testmult$(EXEEXT) @CXX_BINDINGS_TRUE@CXX_PARALLEL_TESTS_XFAIL = @CXX_BINDINGS_TRUE@CXX_TESTS = $(CXX_SERIAL_TESTS) $(CXX_PARALLEL_TESTS) @CXX_BINDINGS_TRUE@CXX_TESTS_XFAIL = $(CXX_SERIAL_TESTS_XFAIL) $(CXX_PARALLEL_TESTS_XFAIL) @CXX_BINDINGS_TRUE@ga___testing_elempatch_SOURCES = ga++/testing/elempatch.cc @CXX_BINDINGS_TRUE@ga___testing_mtest_SOURCES = ga++/testing/mtest.cc @CXX_BINDINGS_TRUE@ga___testing_ntestc_SOURCES = ga++/testing/ntestc.cc \ @CXX_BINDINGS_TRUE@ ga++/testing/util.c @CXX_BINDINGS_TRUE@ga___testing_testc_SOURCES = ga++/testing/testc.cc @CXX_BINDINGS_TRUE@ga___testing_testmult_SOURCES = ga++/testing/testmult.cc @CXX_BINDINGS_TRUE@ga___testing_elempatch_LDADD = libga++.la $(LDADD) $(MAYBE_FLIBS) @CXX_BINDINGS_TRUE@ga___testing_mtest_LDADD = libga++.la $(LDADD) $(MAYBE_FLIBS) @CXX_BINDINGS_TRUE@ga___testing_ntestc_LDADD = libga++.la $(LDADD) $(MAYBE_FLIBS) @CXX_BINDINGS_TRUE@ga___testing_testc_LDADD = libga++.la $(LDADD) $(MAYBE_FLIBS) @CXX_BINDINGS_TRUE@ga___testing_testmult_LDADD = libga++.la $(LDADD) $(MAYBE_FLIBS) @CXX_BINDINGS_TRUE@ga___testing_elempatch_LDFLAGS = $(FLDFLAGS) @CXX_BINDINGS_TRUE@ga___testing_mtest_LDFLAGS = $(FLDFLAGS) @CXX_BINDINGS_TRUE@ga___testing_ntestc_LDFLAGS = $(FLDFLAGS) @CXX_BINDINGS_TRUE@ga___testing_testc_LDFLAGS = $(FLDFLAGS) @CXX_BINDINGS_TRUE@ga___testing_testmult_LDFLAGS = $(FLDFLAGS) ############################################################################## # gparrays # @ENABLE_GPARRAYS_TRUE@GPPAPI_H = $(top_srcdir)/gparrays/src/gp-papi.h @ENABLE_GPARRAYS_TRUE@gparrays_testing_test_SOURCES = gparrays/testing/test.F @ENABLE_GPARRAYS_TRUE@gparrays_testing_testc_SOURCES = gparrays/testing/testc.c @ENABLE_GPARRAYS_TRUE@gparrays_testing_transpose_SOURCES = gparrays/testing/transpose.c @ENABLE_GPARRAYS_TRUE@nodist_EXTRA_gparrays_testing_testc_SOURCES = $(MAYBE_DUMMY_F_LINK) @ENABLE_GPARRAYS_TRUE@nodist_EXTRA_gparrays_testing_transpose_SOURCES = $(MAYBE_DUMMY_F_LINK) @ENABLE_GPARRAYS_TRUE@gparrays_testing_test_LDFLAGS = $(FLDFLAGS) GAF2C_SERIAL_TESTS = $(am__append_50) GAF2C_SERIAL_TESTS_XFAIL = GAF2C_PARALLEL_TESTS = GAF2C_PARALLEL_TESTS_XFAIL = GAF2C_TESTS = $(GAF2C_SERIAL_TESTS) $(GAF2C_PARALLEL_TESTS) GAF2C_TESTS_XFAIL = $(GAF2C_SERIAL_TESTS_XFAIL) $(GAF2C_PARALLEL_TESTS_XFAIL) gaf2c_testarg_SOURCES = gaf2c/testarg.c gaf2c/testargf.f gaf2c_testarg_LDFLAGS = $(FLDFLAGS) #TCGMSG_PARALLEL_TESTS += tcgmsg/tests/test_asyn$(EXEEXT) # useless test #TCGMSG_PARALLEL_TESTS += tcgmsg/tests/test$(EXEEXT) # requires user input #if ENABLE_F77 #TCGMSG_PARALLEL_TESTS += tcgmsg/tests/testf$(EXEEXT) #endif @MSG_COMMS_MPI_TRUE@tcgmsg_tests_test_asyn_SOURCES = tcgmsg/tests/test_asyn.c @MSG_COMMS_MPI_TRUE@tcgmsg_tests_testf_SOURCES = tcgmsg/tests/testf.F @MSG_COMMS_MPI_TRUE@tcgmsg_tests_test_SOURCES = tcgmsg/tests/test.c @MSG_COMMS_MPI_TRUE@tcgmsg_tests_testf_LDFLAGS = $(FLDFLAGS) @MSG_COMMS_MPI_TRUE@nodist_EXTRA_tcgmsg_tests_test_asyn_SOURCES = $(MAYBE_DUMMY_F_LINK) @MSG_COMMS_MPI_TRUE@nodist_EXTRA_tcgmsg_tests_test_SOURCES = $(MAYBE_DUMMY_F_LINK) ############################################################################## # armci @ARMCI_NETWORK_ARMCI_FALSE@@ARMCI_SRC_DIR_COMEX_TRUE@MAYBE_COMEX = comex @ARMCI_NETWORK_ARMCI_FALSE@@ARMCI_SRC_DIR_COMEX_FALSE@MAYBE_ARMCI = armci SUBDIRS = $(MAYBE_COMEX) $(MAYBE_ARMCI) . GA_RECURSIVE_TARGETS = checkprogs-recursive # END COPY # support verbose/silent make rules for additional programs # m4 M4_V = $(M4__v_$(V)) M4__v_ = $(M4__v_$(AM_DEFAULT_VERBOSITY)) M4__v_0 = @echo " M4 " $@; # sed SED_V = $(SED__v_$(V)) SED__v_ = $(SED__v_$(AM_DEFAULT_VERBOSITY)) SED__v_0 = @echo " SED " $@; # python PYTHON_V = $(PYTHON__v_$(V)) PYTHON__v_ = $(PYTHON__v_$(AM_DEFAULT_VERBOSITY)) PYTHON__v_0 = @echo " PYTHON" $@; # cp CP = cp CP_V = $(CP__v_$(V)) CP__v_ = $(CP__v_$(AM_DEFAULT_VERBOSITY)) CP__v_0 = @echo " CP " $@; @MSG_COMMS_TCGMSG4_TRUE@MAYBE_PFILES = pfiles ############################################################################## # test suite # # Tests were broken up into groups depending on the piece of the distribution # which they tested. # # Some tests were commented out either because they required an input file or # they were failing for unknown reasons and we didn't want to further debug. # Some tests were based on old versions of GA which no longer applied but we # kept anyway (see pario). # # We leave pario tests out of the main set of tests because not all systems # can handle the disk requirements. # SERIAL_TESTS = $(MA_SERIAL_TESTS) $(GLOBAL_SERIAL_TESTS) \ $(CXX_SERIAL_TESTS) SERIAL_TESTS_XFAIL = $(MA_SERIAL_TESTS_XFAIL) \ $(GLOBAL_SERIAL_TESTS_XFAIL) $(CXX_SERIAL_TESTS_XFAIL) PARALLEL_TESTS = $(MA_PARALLEL_TESTS) $(GLOBAL_PARALLEL_TESTS) \ $(CXX_PARALLEL_TESTS) PARALLEL_TESTS_XFAIL = $(MA_PARALLEL_TESTS_XFAIL) \ $(GLOBAL_PARALLEL_TESTS_XFAIL) $(CXX_PARALLEL_TESTS_XFAIL) @CROSS_COMPILING_FALSE@@MSG_COMMS_TCGMSG4_FALSE@@MSG_COMMS_TCGMSG5_FALSE@LOG_COMPILER = \ @CROSS_COMPILING_FALSE@@MSG_COMMS_TCGMSG4_FALSE@@MSG_COMMS_TCGMSG5_FALSE@maybe_mpiexec=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo ""; else if echo "$(MPIEXEC)" | $(GREP) "%NP%" > /dev/null; then echo "$(MPIEXEC)" | $(SED) 's/%NP%/$(NPROCS)/'; else echo "$(MPIEXEC)"; fi; fi`; eval $$maybe_mpiexec @MSG_COMMS_TCGMSG4_FALSE@@MSG_COMMS_TCGMSG5_TRUE@LOG_COMPILER = tst="$$dir$$f -np $(NPROCS)"; eval @MSG_COMMS_TCGMSG4_TRUE@LOG_COMPILER = \ @MSG_COMMS_TCGMSG4_TRUE@maybe_tcgexec=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo ""; else echo "$(TCGEXEC)"; fi`; eval $$maybe_tcgexec @CROSS_COMPILING_TRUE@@MSG_COMMS_TCGMSG4_FALSE@@MSG_COMMS_TCGMSG5_FALSE@maybe_mpiexec = `if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo "$(MPIEXEC)" | $(SED) 's/%NP%/1/'; else echo "$(MPIEXEC)" | $(SED) 's/%NP%/$(NPROCS)/'; fi`; eval $$maybe_mpiexec all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .F .c .cc .f .html .lo .log .m4 .o .obj .test .test$(EXEEXT) am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 gaf2c/farg.h: $(top_builddir)/config.status $(top_srcdir)/gaf2c/farg.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ gaf2c/typesf2c.h: $(top_builddir)/config.status $(top_srcdir)/gaf2c/typesf2c.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ global/src/global.fh: $(top_builddir)/config.status $(top_srcdir)/global/src/global.fh.in cd $(top_builddir) && $(SHELL) ./config.status $@ ma/mafdecls.fh: $(top_builddir)/config.status $(top_srcdir)/ma/mafdecls.fh.in cd $(top_builddir) && $(SHELL) ./config.status $@ ma/matypes.h: $(top_builddir)/config.status $(top_srcdir)/ma/matypes.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ tools/ga-config: $(top_builddir)/config.status $(top_srcdir)/tools/ga-config.in cd $(top_builddir) && $(SHELL) ./config.status $@ clean-checkLTLIBRARIES: -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) @list='$(check_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done ga++/src/$(am__dirstamp): @$(MKDIR_P) ga++/src @: > ga++/src/$(am__dirstamp) ga++/src/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) ga++/src/$(DEPDIR) @: > ga++/src/$(DEPDIR)/$(am__dirstamp) ga++/src/GAServices.lo: ga++/src/$(am__dirstamp) \ ga++/src/$(DEPDIR)/$(am__dirstamp) ga++/src/GlobalArray.lo: ga++/src/$(am__dirstamp) \ ga++/src/$(DEPDIR)/$(am__dirstamp) ga++/src/PGroup.lo: ga++/src/$(am__dirstamp) \ ga++/src/$(DEPDIR)/$(am__dirstamp) ga++/src/init_term.lo: ga++/src/$(am__dirstamp) \ ga++/src/$(DEPDIR)/$(am__dirstamp) ga++/src/overload.lo: ga++/src/$(am__dirstamp) \ ga++/src/$(DEPDIR)/$(am__dirstamp) ga++/src/services.lo: ga++/src/$(am__dirstamp) \ ga++/src/$(DEPDIR)/$(am__dirstamp) libga++.la: $(libga___la_OBJECTS) $(libga___la_DEPENDENCIES) $(EXTRA_libga___la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(am_libga___la_rpath) $(libga___la_OBJECTS) $(libga___la_LIBADD) $(LIBS) compat/$(am__dirstamp): @$(MKDIR_P) compat @: > compat/$(am__dirstamp) compat/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) compat/$(DEPDIR) @: > compat/$(DEPDIR)/$(am__dirstamp) compat/random.lo: compat/$(am__dirstamp) \ compat/$(DEPDIR)/$(am__dirstamp) ma/$(am__dirstamp): @$(MKDIR_P) ma @: > ma/$(am__dirstamp) ma/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) ma/$(DEPDIR) @: > ma/$(DEPDIR)/$(am__dirstamp) ma/error.lo: ma/$(am__dirstamp) ma/$(DEPDIR)/$(am__dirstamp) ma/f2c.lo: ma/$(am__dirstamp) ma/$(DEPDIR)/$(am__dirstamp) ma/ma.lo: ma/$(am__dirstamp) ma/$(DEPDIR)/$(am__dirstamp) ma/string-util.lo: ma/$(am__dirstamp) ma/$(DEPDIR)/$(am__dirstamp) ma/table.lo: ma/$(am__dirstamp) ma/$(DEPDIR)/$(am__dirstamp) ma/maf.lo: ma/$(am__dirstamp) ma/$(DEPDIR)/$(am__dirstamp) LinAlg/lapack+blas/$(am__dirstamp): @$(MKDIR_P) LinAlg/lapack+blas @: > LinAlg/lapack+blas/$(am__dirstamp) LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) LinAlg/lapack+blas/$(DEPDIR) @: > LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) LinAlg/lapack+blas/dgetf2.lo: LinAlg/lapack+blas/$(am__dirstamp) \ LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) LinAlg/lapack+blas/dgetrf.lo: LinAlg/lapack+blas/$(am__dirstamp) \ LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) LinAlg/lapack+blas/dgetrs.lo: LinAlg/lapack+blas/$(am__dirstamp) \ LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) LinAlg/lapack+blas/dlacpy.lo: LinAlg/lapack+blas/$(am__dirstamp) \ LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) LinAlg/lapack+blas/dlaset.lo: LinAlg/lapack+blas/$(am__dirstamp) \ LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) LinAlg/lapack+blas/dlaswp.lo: LinAlg/lapack+blas/$(am__dirstamp) \ LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) LinAlg/lapack+blas/ilaenv.lo: LinAlg/lapack+blas/$(am__dirstamp) \ LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) LinAlg/lapack+blas/lsame.lo: LinAlg/lapack+blas/$(am__dirstamp) \ LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) LinAlg/lapack+blas/xerbla.lo: LinAlg/lapack+blas/$(am__dirstamp) \ LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) LinAlg/lapack+blas/cgemm.lo: LinAlg/lapack+blas/$(am__dirstamp) \ LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) LinAlg/lapack+blas/dblas.lo: LinAlg/lapack+blas/$(am__dirstamp) \ LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) LinAlg/lapack+blas/sgemm.lo: LinAlg/lapack+blas/$(am__dirstamp) \ LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) LinAlg/lapack+blas/zaxpy.lo: LinAlg/lapack+blas/$(am__dirstamp) \ LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) LinAlg/lapack+blas/zgemm.lo: LinAlg/lapack+blas/$(am__dirstamp) \ LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) LinAlg/lapack+blas/xgemm.lo: LinAlg/lapack+blas/$(am__dirstamp) \ LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) global/src/$(am__dirstamp): @$(MKDIR_P) global/src @: > global/src/$(am__dirstamp) global/src/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) global/src/$(DEPDIR) @: > global/src/$(DEPDIR)/$(am__dirstamp) global/src/base.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/capi.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/collect.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/datatypes.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/decomp.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/DP.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/elem_alg.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/fapi.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/ga_diag_seqc.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/ga_malloc.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/ga_solve_seq.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/ga_symmetr.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/ga_trace.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/ghosts.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/global.nalg.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/global.npatch.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/global.periodic.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/global.util.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/hsort.scat.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/matmul.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/matrix.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/nbutil.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/onesided.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/peigstubs.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/sclstubs.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/select.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/sparse.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/complex.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/ga_diag_seq.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/rsg.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/ga_dgemmf.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/ga_diag.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/scalapack.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) global/src/ga_ckpt.lo: global/src/$(am__dirstamp) \ global/src/$(DEPDIR)/$(am__dirstamp) pario/dra/$(am__dirstamp): @$(MKDIR_P) pario/dra @: > pario/dra/$(am__dirstamp) pario/dra/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) pario/dra/$(DEPDIR) @: > pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/buffers.lo: pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/capi.lo: pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/disk.arrays.lo: pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/disk.param.lo: pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/env.lo: pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/fortran.lo: pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/patch.util.lo: pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/eaf/$(am__dirstamp): @$(MKDIR_P) pario/eaf @: > pario/eaf/$(am__dirstamp) pario/eaf/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) pario/eaf/$(DEPDIR) @: > pario/eaf/$(DEPDIR)/$(am__dirstamp) pario/eaf/eaf.lo: pario/eaf/$(am__dirstamp) \ pario/eaf/$(DEPDIR)/$(am__dirstamp) pario/eaf/eaf_f2c.lo: pario/eaf/$(am__dirstamp) \ pario/eaf/$(DEPDIR)/$(am__dirstamp) pario/elio/$(am__dirstamp): @$(MKDIR_P) pario/elio @: > pario/elio/$(am__dirstamp) pario/elio/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) pario/elio/$(DEPDIR) @: > pario/elio/$(DEPDIR)/$(am__dirstamp) pario/elio/elio.lo: pario/elio/$(am__dirstamp) \ pario/elio/$(DEPDIR)/$(am__dirstamp) pario/elio/stat.lo: pario/elio/$(am__dirstamp) \ pario/elio/$(DEPDIR)/$(am__dirstamp) pario/sf/$(am__dirstamp): @$(MKDIR_P) pario/sf @: > pario/sf/$(am__dirstamp) pario/sf/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) pario/sf/$(DEPDIR) @: > pario/sf/$(DEPDIR)/$(am__dirstamp) pario/sf/sf_capi.lo: pario/sf/$(am__dirstamp) \ pario/sf/$(DEPDIR)/$(am__dirstamp) pario/sf/sf_fortran.lo: pario/sf/$(am__dirstamp) \ pario/sf/$(DEPDIR)/$(am__dirstamp) pario/sf/shared.files.lo: pario/sf/$(am__dirstamp) \ pario/sf/$(DEPDIR)/$(am__dirstamp) gparrays/src/$(am__dirstamp): @$(MKDIR_P) gparrays/src @: > gparrays/src/$(am__dirstamp) gparrays/src/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) gparrays/src/$(DEPDIR) @: > gparrays/src/$(DEPDIR)/$(am__dirstamp) gparrays/src/gpbase.lo: gparrays/src/$(am__dirstamp) \ gparrays/src/$(DEPDIR)/$(am__dirstamp) gparrays/src/gpcapi.lo: gparrays/src/$(am__dirstamp) \ gparrays/src/$(DEPDIR)/$(am__dirstamp) gparrays/src/gpfapi.lo: gparrays/src/$(am__dirstamp) \ gparrays/src/$(DEPDIR)/$(am__dirstamp) gparrays/src/gponesided.lo: gparrays/src/$(am__dirstamp) \ gparrays/src/$(DEPDIR)/$(am__dirstamp) gaf2c/$(am__dirstamp): @$(MKDIR_P) gaf2c @: > gaf2c/$(am__dirstamp) gaf2c/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) gaf2c/$(DEPDIR) @: > gaf2c/$(DEPDIR)/$(am__dirstamp) gaf2c/gaf2c.lo: gaf2c/$(am__dirstamp) gaf2c/$(DEPDIR)/$(am__dirstamp) gaf2c/drand.lo: gaf2c/$(am__dirstamp) gaf2c/$(DEPDIR)/$(am__dirstamp) gaf2c/farg.lo: gaf2c/$(am__dirstamp) gaf2c/$(DEPDIR)/$(am__dirstamp) tcgmsg/$(am__dirstamp): @$(MKDIR_P) tcgmsg @: > tcgmsg/$(am__dirstamp) tcgmsg/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) tcgmsg/$(DEPDIR) @: > tcgmsg/$(DEPDIR)/$(am__dirstamp) tcgmsg/capi.lo: tcgmsg/$(am__dirstamp) \ tcgmsg/$(DEPDIR)/$(am__dirstamp) tcgmsg/fapi.lo: tcgmsg/$(am__dirstamp) \ tcgmsg/$(DEPDIR)/$(am__dirstamp) tcgmsg/tcgmsg-mpi/$(am__dirstamp): @$(MKDIR_P) tcgmsg/tcgmsg-mpi @: > tcgmsg/tcgmsg-mpi/$(am__dirstamp) tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) tcgmsg/tcgmsg-mpi/$(DEPDIR) @: > tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp) tcgmsg/tcgmsg-mpi/checkbyte.lo: tcgmsg/tcgmsg-mpi/$(am__dirstamp) \ tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp) tcgmsg/tcgmsg-mpi/clustercheck.lo: tcgmsg/tcgmsg-mpi/$(am__dirstamp) \ tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp) tcgmsg/tcgmsg-mpi/collect.lo: tcgmsg/tcgmsg-mpi/$(am__dirstamp) \ tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp) tcgmsg/tcgmsg-mpi/drand48.lo: tcgmsg/tcgmsg-mpi/$(am__dirstamp) \ tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp) tcgmsg/tcgmsg-mpi/evlog.lo: tcgmsg/tcgmsg-mpi/$(am__dirstamp) \ tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp) tcgmsg/tcgmsg-mpi/evon.lo: tcgmsg/tcgmsg-mpi/$(am__dirstamp) \ tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp) tcgmsg/tcgmsg-mpi/llog.lo: tcgmsg/tcgmsg-mpi/$(am__dirstamp) \ tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp) tcgmsg/tcgmsg-mpi/misc.lo: tcgmsg/tcgmsg-mpi/$(am__dirstamp) \ tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp) tcgmsg/tcgmsg-mpi/niceftn.lo: tcgmsg/tcgmsg-mpi/$(am__dirstamp) \ tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp) tcgmsg/tcgmsg-mpi/nxtval-armci.lo: tcgmsg/tcgmsg-mpi/$(am__dirstamp) \ tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp) tcgmsg/tcgmsg-mpi/p2p.lo: tcgmsg/tcgmsg-mpi/$(am__dirstamp) \ tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp) tcgmsg/tcgmsg-mpi/pbeginf.lo: tcgmsg/tcgmsg-mpi/$(am__dirstamp) \ tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp) tcgmsg/tcgmsg-mpi/pfilecopy.lo: tcgmsg/tcgmsg-mpi/$(am__dirstamp) \ tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp) tcgmsg/tcgmsg-mpi/sizeof.lo: tcgmsg/tcgmsg-mpi/$(am__dirstamp) \ tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp) tools/$(am__dirstamp): @$(MKDIR_P) tools @: > tools/$(am__dirstamp) tools/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) tools/$(DEPDIR) @: > tools/$(DEPDIR)/$(am__dirstamp) tools/ga-wapi.lo: tools/$(am__dirstamp) \ tools/$(DEPDIR)/$(am__dirstamp) tools/gp-wapi.lo: tools/$(am__dirstamp) \ tools/$(DEPDIR)/$(am__dirstamp) libga.la: $(libga_la_OBJECTS) $(libga_la_DEPENDENCIES) $(EXTRA_libga_la_DEPENDENCIES) $(AM_V_F77LD)$(F77LINK) -rpath $(libdir) $(libga_la_OBJECTS) $(libga_la_LIBADD) $(LIBS) libwapi.la: $(libwapi_la_OBJECTS) $(libwapi_la_DEPENDENCIES) $(EXTRA_libwapi_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_libwapi_la_rpath) $(libwapi_la_OBJECTS) $(libwapi_la_LIBADD) $(LIBS) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list ga++/testing/$(am__dirstamp): @$(MKDIR_P) ga++/testing @: > ga++/testing/$(am__dirstamp) ga++/testing/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) ga++/testing/$(DEPDIR) @: > ga++/testing/$(DEPDIR)/$(am__dirstamp) ga++/testing/elempatch.$(OBJEXT): ga++/testing/$(am__dirstamp) \ ga++/testing/$(DEPDIR)/$(am__dirstamp) ga++/testing/elempatch$(EXEEXT): $(ga___testing_elempatch_OBJECTS) $(ga___testing_elempatch_DEPENDENCIES) $(EXTRA_ga___testing_elempatch_DEPENDENCIES) ga++/testing/$(am__dirstamp) @rm -f ga++/testing/elempatch$(EXEEXT) $(AM_V_CXXLD)$(ga___testing_elempatch_LINK) $(ga___testing_elempatch_OBJECTS) $(ga___testing_elempatch_LDADD) $(LIBS) ga++/testing/mtest.$(OBJEXT): ga++/testing/$(am__dirstamp) \ ga++/testing/$(DEPDIR)/$(am__dirstamp) ga++/testing/mtest$(EXEEXT): $(ga___testing_mtest_OBJECTS) $(ga___testing_mtest_DEPENDENCIES) $(EXTRA_ga___testing_mtest_DEPENDENCIES) ga++/testing/$(am__dirstamp) @rm -f ga++/testing/mtest$(EXEEXT) $(AM_V_CXXLD)$(ga___testing_mtest_LINK) $(ga___testing_mtest_OBJECTS) $(ga___testing_mtest_LDADD) $(LIBS) ga++/testing/ntestc.$(OBJEXT): ga++/testing/$(am__dirstamp) \ ga++/testing/$(DEPDIR)/$(am__dirstamp) ga++/testing/util.$(OBJEXT): ga++/testing/$(am__dirstamp) \ ga++/testing/$(DEPDIR)/$(am__dirstamp) ga++/testing/ntestc$(EXEEXT): $(ga___testing_ntestc_OBJECTS) $(ga___testing_ntestc_DEPENDENCIES) $(EXTRA_ga___testing_ntestc_DEPENDENCIES) ga++/testing/$(am__dirstamp) @rm -f ga++/testing/ntestc$(EXEEXT) $(AM_V_CXXLD)$(ga___testing_ntestc_LINK) $(ga___testing_ntestc_OBJECTS) $(ga___testing_ntestc_LDADD) $(LIBS) ga++/testing/testc.$(OBJEXT): ga++/testing/$(am__dirstamp) \ ga++/testing/$(DEPDIR)/$(am__dirstamp) ga++/testing/testc$(EXEEXT): $(ga___testing_testc_OBJECTS) $(ga___testing_testc_DEPENDENCIES) $(EXTRA_ga___testing_testc_DEPENDENCIES) ga++/testing/$(am__dirstamp) @rm -f ga++/testing/testc$(EXEEXT) $(AM_V_CXXLD)$(ga___testing_testc_LINK) $(ga___testing_testc_OBJECTS) $(ga___testing_testc_LDADD) $(LIBS) ga++/testing/testmult.$(OBJEXT): ga++/testing/$(am__dirstamp) \ ga++/testing/$(DEPDIR)/$(am__dirstamp) ga++/testing/testmult$(EXEEXT): $(ga___testing_testmult_OBJECTS) $(ga___testing_testmult_DEPENDENCIES) $(EXTRA_ga___testing_testmult_DEPENDENCIES) ga++/testing/$(am__dirstamp) @rm -f ga++/testing/testmult$(EXEEXT) $(AM_V_CXXLD)$(ga___testing_testmult_LINK) $(ga___testing_testmult_OBJECTS) $(ga___testing_testmult_LDADD) $(LIBS) gaf2c/testarg.$(OBJEXT): gaf2c/$(am__dirstamp) \ gaf2c/$(DEPDIR)/$(am__dirstamp) gaf2c/testargf.$(OBJEXT): gaf2c/$(am__dirstamp) \ gaf2c/$(DEPDIR)/$(am__dirstamp) gaf2c/testarg$(EXEEXT): $(gaf2c_testarg_OBJECTS) $(gaf2c_testarg_DEPENDENCIES) $(EXTRA_gaf2c_testarg_DEPENDENCIES) gaf2c/$(am__dirstamp) @rm -f gaf2c/testarg$(EXEEXT) $(AM_V_F77LD)$(gaf2c_testarg_LINK) $(gaf2c_testarg_OBJECTS) $(gaf2c_testarg_LDADD) $(LIBS) global/X/$(am__dirstamp): @$(MKDIR_P) global/X @: > global/X/$(am__dirstamp) global/X/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) global/X/$(DEPDIR) @: > global/X/$(DEPDIR)/$(am__dirstamp) global/X/global_X_xregion-xregion_colormap.$(OBJEXT): \ global/X/$(am__dirstamp) global/X/$(DEPDIR)/$(am__dirstamp) global/X/global_X_xregion-xregion_dialog.$(OBJEXT): \ global/X/$(am__dirstamp) global/X/$(DEPDIR)/$(am__dirstamp) global/X/global_X_xregion-xregion_display.$(OBJEXT): \ global/X/$(am__dirstamp) global/X/$(DEPDIR)/$(am__dirstamp) global/X/global_X_xregion-xregion_fileio.$(OBJEXT): \ global/X/$(am__dirstamp) global/X/$(DEPDIR)/$(am__dirstamp) global/X/global_X_xregion-xregion_main.$(OBJEXT): \ global/X/$(am__dirstamp) global/X/$(DEPDIR)/$(am__dirstamp) global/X/global_X_xregion-xregion_overview.$(OBJEXT): \ global/X/$(am__dirstamp) global/X/$(DEPDIR)/$(am__dirstamp) global/X/global_X_xregion-xregion_pixregion.$(OBJEXT): \ global/X/$(am__dirstamp) global/X/$(DEPDIR)/$(am__dirstamp) global/X/global_X_xregion-xregion_scrollbars.$(OBJEXT): \ global/X/$(am__dirstamp) global/X/$(DEPDIR)/$(am__dirstamp) global/X/global_X_xregion-xregion_util.$(OBJEXT): \ global/X/$(am__dirstamp) global/X/$(DEPDIR)/$(am__dirstamp) global/X/global_X_xregion-xregion_view.$(OBJEXT): \ global/X/$(am__dirstamp) global/X/$(DEPDIR)/$(am__dirstamp) global/X/global_X_xregion-xregion_xcmap.$(OBJEXT): \ global/X/$(am__dirstamp) global/X/$(DEPDIR)/$(am__dirstamp) global/X/xregion$(EXEEXT): $(global_X_xregion_OBJECTS) $(global_X_xregion_DEPENDENCIES) $(EXTRA_global_X_xregion_DEPENDENCIES) global/X/$(am__dirstamp) @rm -f global/X/xregion$(EXEEXT) $(AM_V_CCLD)$(global_X_xregion_LINK) $(global_X_xregion_OBJECTS) $(global_X_xregion_LDADD) $(LIBS) global/examples/boltzmann/$(am__dirstamp): @$(MKDIR_P) global/examples/boltzmann @: > global/examples/boltzmann/$(am__dirstamp) global/examples/boltzmann/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) global/examples/boltzmann/$(DEPDIR) @: > global/examples/boltzmann/$(DEPDIR)/$(am__dirstamp) global/examples/boltzmann/global_examples_boltzmann_boltz-boltzmann.$(OBJEXT): \ global/examples/boltzmann/$(am__dirstamp) \ global/examples/boltzmann/$(DEPDIR)/$(am__dirstamp) global/examples/boltzmann/global_examples_boltzmann_boltz-equil.$(OBJEXT): \ global/examples/boltzmann/$(am__dirstamp) \ global/examples/boltzmann/$(DEPDIR)/$(am__dirstamp) global/examples/boltzmann/global_examples_boltzmann_boltz-get_patch.$(OBJEXT): \ global/examples/boltzmann/$(am__dirstamp) \ global/examples/boltzmann/$(DEPDIR)/$(am__dirstamp) global/examples/boltzmann/global_examples_boltzmann_boltz-initpar.$(OBJEXT): \ global/examples/boltzmann/$(am__dirstamp) \ global/examples/boltzmann/$(DEPDIR)/$(am__dirstamp) global/examples/boltzmann/global_examples_boltzmann_boltz-main.$(OBJEXT): \ global/examples/boltzmann/$(am__dirstamp) \ global/examples/boltzmann/$(DEPDIR)/$(am__dirstamp) global/examples/boltzmann/global_examples_boltzmann_boltz-printdat.$(OBJEXT): \ global/examples/boltzmann/$(am__dirstamp) \ global/examples/boltzmann/$(DEPDIR)/$(am__dirstamp) global/examples/boltzmann/global_examples_boltzmann_boltz-properties.$(OBJEXT): \ global/examples/boltzmann/$(am__dirstamp) \ global/examples/boltzmann/$(DEPDIR)/$(am__dirstamp) global/examples/boltzmann/global_examples_boltzmann_boltz-setup.$(OBJEXT): \ global/examples/boltzmann/$(am__dirstamp) \ global/examples/boltzmann/$(DEPDIR)/$(am__dirstamp) global/examples/boltzmann/global_examples_boltzmann_boltz-timestep.$(OBJEXT): \ global/examples/boltzmann/$(am__dirstamp) \ global/examples/boltzmann/$(DEPDIR)/$(am__dirstamp) global/examples/boltzmann/global_examples_boltzmann_boltz-vorticity.$(OBJEXT): \ global/examples/boltzmann/$(am__dirstamp) \ global/examples/boltzmann/$(DEPDIR)/$(am__dirstamp) global/examples/boltzmann/boltz$(EXEEXT): $(global_examples_boltzmann_boltz_OBJECTS) $(global_examples_boltzmann_boltz_DEPENDENCIES) $(EXTRA_global_examples_boltzmann_boltz_DEPENDENCIES) global/examples/boltzmann/$(am__dirstamp) @rm -f global/examples/boltzmann/boltz$(EXEEXT) $(AM_V_F77LD)$(global_examples_boltzmann_boltz_LINK) $(global_examples_boltzmann_boltz_OBJECTS) $(global_examples_boltzmann_boltz_LDADD) $(LIBS) global/examples/conjugate_gradient/$(am__dirstamp): @$(MKDIR_P) global/examples/conjugate_gradient @: > global/examples/conjugate_gradient/$(am__dirstamp) global/examples/conjugate_gradient/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) global/examples/conjugate_gradient/$(DEPDIR) @: > global/examples/conjugate_gradient/$(DEPDIR)/$(am__dirstamp) global/examples/conjugate_gradient/computeloops.$(OBJEXT): \ global/examples/conjugate_gradient/$(am__dirstamp) \ global/examples/conjugate_gradient/$(DEPDIR)/$(am__dirstamp) global/examples/conjugate_gradient/ga_cg.$(OBJEXT): \ global/examples/conjugate_gradient/$(am__dirstamp) \ global/examples/conjugate_gradient/$(DEPDIR)/$(am__dirstamp) global/examples/conjugate_gradient/matvecmul.$(OBJEXT): \ global/examples/conjugate_gradient/$(am__dirstamp) \ global/examples/conjugate_gradient/$(DEPDIR)/$(am__dirstamp) global/examples/conjugate_gradient/read_input.$(OBJEXT): \ global/examples/conjugate_gradient/$(am__dirstamp) \ global/examples/conjugate_gradient/$(DEPDIR)/$(am__dirstamp) global/examples/conjugate_gradient/ga_cg$(EXEEXT): $(global_examples_conjugate_gradient_ga_cg_OBJECTS) $(global_examples_conjugate_gradient_ga_cg_DEPENDENCIES) $(EXTRA_global_examples_conjugate_gradient_ga_cg_DEPENDENCIES) global/examples/conjugate_gradient/$(am__dirstamp) @rm -f global/examples/conjugate_gradient/ga_cg$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_examples_conjugate_gradient_ga_cg_OBJECTS) $(global_examples_conjugate_gradient_ga_cg_LDADD) $(LIBS) global/examples/lennard-jones/$(am__dirstamp): @$(MKDIR_P) global/examples/lennard-jones @: > global/examples/lennard-jones/$(am__dirstamp) global/examples/lennard-jones/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) global/examples/lennard-jones/$(DEPDIR) @: > global/examples/lennard-jones/$(DEPDIR)/$(am__dirstamp) global/examples/lennard-jones/lennard.$(OBJEXT): \ global/examples/lennard-jones/$(am__dirstamp) \ global/examples/lennard-jones/$(DEPDIR)/$(am__dirstamp) global/examples/lennard-jones/lennard$(EXEEXT): $(global_examples_lennard_jones_lennard_OBJECTS) $(global_examples_lennard_jones_lennard_DEPENDENCIES) $(EXTRA_global_examples_lennard_jones_lennard_DEPENDENCIES) global/examples/lennard-jones/$(am__dirstamp) @rm -f global/examples/lennard-jones/lennard$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_examples_lennard_jones_lennard_OBJECTS) $(global_examples_lennard_jones_lennard_LDADD) $(LIBS) global/examples/md_cluster/$(am__dirstamp): @$(MKDIR_P) global/examples/md_cluster @: > global/examples/md_cluster/$(am__dirstamp) global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) global/examples/md_cluster/$(DEPDIR) @: > global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/cell_list.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/cl_sim.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/cluster.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/estats.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/factor.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/force.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/gather.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/grp_sim.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/hash.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/heapsort.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/kin.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/mdinit.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/mdout.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/mdstep.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/newcfg.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/nextc.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/pairs.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/ran3.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/rdpar.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/scatter.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/shuffle.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/sort.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/tstats.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/update.$(OBJEXT): \ global/examples/md_cluster/$(am__dirstamp) \ global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) global/examples/md_cluster/grp_sim$(EXEEXT): $(global_examples_md_cluster_grp_sim_OBJECTS) $(global_examples_md_cluster_grp_sim_DEPENDENCIES) $(EXTRA_global_examples_md_cluster_grp_sim_DEPENDENCIES) global/examples/md_cluster/$(am__dirstamp) @rm -f global/examples/md_cluster/grp_sim$(EXEEXT) $(AM_V_F77LD)$(global_examples_md_cluster_grp_sim_LINK) $(global_examples_md_cluster_grp_sim_OBJECTS) $(global_examples_md_cluster_grp_sim_LDADD) $(LIBS) global/examples/scf/$(am__dirstamp): @$(MKDIR_P) global/examples/scf @: > global/examples/scf/$(am__dirstamp) global/examples/scf/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) global/examples/scf/$(DEPDIR) @: > global/examples/scf/$(DEPDIR)/$(am__dirstamp) global/examples/scf/input.$(OBJEXT): \ global/examples/scf/$(am__dirstamp) \ global/examples/scf/$(DEPDIR)/$(am__dirstamp) global/examples/scf/integ.$(OBJEXT): \ global/examples/scf/$(am__dirstamp) \ global/examples/scf/$(DEPDIR)/$(am__dirstamp) global/examples/scf/output.$(OBJEXT): \ global/examples/scf/$(am__dirstamp) \ global/examples/scf/$(DEPDIR)/$(am__dirstamp) global/examples/scf/scf.$(OBJEXT): \ global/examples/scf/$(am__dirstamp) \ global/examples/scf/$(DEPDIR)/$(am__dirstamp) global/examples/scf/timer.$(OBJEXT): \ global/examples/scf/$(am__dirstamp) \ global/examples/scf/$(DEPDIR)/$(am__dirstamp) global/examples/scf/scf$(EXEEXT): $(global_examples_scf_scf_OBJECTS) $(global_examples_scf_scf_DEPENDENCIES) $(EXTRA_global_examples_scf_scf_DEPENDENCIES) global/examples/scf/$(am__dirstamp) @rm -f global/examples/scf/scf$(EXEEXT) $(AM_V_F77LD)$(global_examples_scf_scf_LINK) $(global_examples_scf_scf_OBJECTS) $(global_examples_scf_scf_LDADD) $(LIBS) global/testing/$(am__dirstamp): @$(MKDIR_P) global/testing @: > global/testing/$(am__dirstamp) global/testing/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) global/testing/$(DEPDIR) @: > global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/big.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/util.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/ffflush.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/testblas.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/big$(EXEEXT): $(global_testing_big_OBJECTS) $(global_testing_big_DEPENDENCIES) $(EXTRA_global_testing_big_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/big$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_big_OBJECTS) $(global_testing_big_LDADD) $(LIBS) global/testing/bin.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/bin$(EXEEXT): $(global_testing_bin_OBJECTS) $(global_testing_bin_DEPENDENCIES) $(EXTRA_global_testing_bin_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/bin$(EXEEXT) $(AM_V_F77LD)$(global_testing_bin_LINK) $(global_testing_bin_OBJECTS) $(global_testing_bin_LDADD) $(LIBS) global/testing/blktest.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/blktest$(EXEEXT): $(global_testing_blktest_OBJECTS) $(global_testing_blktest_DEPENDENCIES) $(EXTRA_global_testing_blktest_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/blktest$(EXEEXT) $(AM_V_F77LD)$(global_testing_blktest_LINK) $(global_testing_blktest_OBJECTS) $(global_testing_blktest_LDADD) $(LIBS) global/testing/d2test.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/d2test$(EXEEXT): $(global_testing_d2test_OBJECTS) $(global_testing_d2test_DEPENDENCIES) $(EXTRA_global_testing_d2test_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/d2test$(EXEEXT) $(AM_V_F77LD)$(global_testing_d2test_LINK) $(global_testing_d2test_OBJECTS) $(global_testing_d2test_LDADD) $(LIBS) global/testing/elempatch.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/elempatch$(EXEEXT): $(global_testing_elempatch_OBJECTS) $(global_testing_elempatch_DEPENDENCIES) $(EXTRA_global_testing_elempatch_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/elempatch$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_elempatch_OBJECTS) $(global_testing_elempatch_LDADD) $(LIBS) global/testing/field-test.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/field_test$(EXEEXT): $(global_testing_field_test_OBJECTS) $(global_testing_field_test_DEPENDENCIES) $(EXTRA_global_testing_field_test_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/field_test$(EXEEXT) $(AM_V_F77LD)$(global_testing_field_test_LINK) $(global_testing_field_test_OBJECTS) $(global_testing_field_test_LDADD) $(LIBS) global/testing/g2test.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/g2test$(EXEEXT): $(global_testing_g2test_OBJECTS) $(global_testing_g2test_DEPENDENCIES) $(EXTRA_global_testing_g2test_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/g2test$(EXEEXT) $(AM_V_F77LD)$(global_testing_g2test_LINK) $(global_testing_g2test_OBJECTS) $(global_testing_g2test_LDADD) $(LIBS) global/testing/g3test.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/g3test$(EXEEXT): $(global_testing_g3test_OBJECTS) $(global_testing_g3test_DEPENDENCIES) $(EXTRA_global_testing_g3test_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/g3test$(EXEEXT) $(AM_V_F77LD)$(global_testing_g3test_LINK) $(global_testing_g3test_OBJECTS) $(global_testing_g3test_LDADD) $(LIBS) global/testing/ga-mpi.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/ga-mpi$(EXEEXT): $(global_testing_ga_mpi_OBJECTS) $(global_testing_ga_mpi_DEPENDENCIES) $(EXTRA_global_testing_ga_mpi_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/ga-mpi$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_ga_mpi_OBJECTS) $(global_testing_ga_mpi_LDADD) $(LIBS) global/testing/ga_lu.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/ga_lu$(EXEEXT): $(global_testing_ga_lu_OBJECTS) $(global_testing_ga_lu_DEPENDENCIES) $(EXTRA_global_testing_ga_lu_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/ga_lu$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_ga_lu_OBJECTS) $(global_testing_ga_lu_LDADD) $(LIBS) global/testing/ga_shift.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/ga_shift$(EXEEXT): $(global_testing_ga_shift_OBJECTS) $(global_testing_ga_shift_DEPENDENCIES) $(EXTRA_global_testing_ga_shift_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/ga_shift$(EXEEXT) $(AM_V_F77LD)$(global_testing_ga_shift_LINK) $(global_testing_ga_shift_OBJECTS) $(global_testing_ga_shift_LDADD) $(LIBS) global/testing/gatscat.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/gatscat$(EXEEXT): $(global_testing_gatscat_OBJECTS) $(global_testing_gatscat_DEPENDENCIES) $(EXTRA_global_testing_gatscat_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/gatscat$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_gatscat_OBJECTS) $(global_testing_gatscat_LDADD) $(LIBS) global/testing/getmem.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/getmem$(EXEEXT): $(global_testing_getmem_OBJECTS) $(global_testing_getmem_DEPENDENCIES) $(EXTRA_global_testing_getmem_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/getmem$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_getmem_OBJECTS) $(global_testing_getmem_LDADD) $(LIBS) global/testing/ghosts.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/ghosts$(EXEEXT): $(global_testing_ghosts_OBJECTS) $(global_testing_ghosts_DEPENDENCIES) $(EXTRA_global_testing_ghosts_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/ghosts$(EXEEXT) $(AM_V_F77LD)$(global_testing_ghosts_LINK) $(global_testing_ghosts_OBJECTS) $(global_testing_ghosts_LDADD) $(LIBS) global/testing/ipc.clean.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/ipc_clean$(EXEEXT): $(global_testing_ipc_clean_OBJECTS) $(global_testing_ipc_clean_DEPENDENCIES) $(EXTRA_global_testing_ipc_clean_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/ipc_clean$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_ipc_clean_OBJECTS) $(global_testing_ipc_clean_LDADD) $(LIBS) global/testing/jacobi.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/jacobi$(EXEEXT): $(global_testing_jacobi_OBJECTS) $(global_testing_jacobi_DEPENDENCIES) $(EXTRA_global_testing_jacobi_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/jacobi$(EXEEXT) $(AM_V_F77LD)$(global_testing_jacobi_LINK) $(global_testing_jacobi_OBJECTS) $(global_testing_jacobi_LDADD) $(LIBS) global/testing/lock.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/lock$(EXEEXT): $(global_testing_lock_OBJECTS) $(global_testing_lock_DEPENDENCIES) $(EXTRA_global_testing_lock_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/lock$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_lock_OBJECTS) $(global_testing_lock_LDADD) $(LIBS) global/testing/mir_perf2.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/mir_perf2$(EXEEXT): $(global_testing_mir_perf2_OBJECTS) $(global_testing_mir_perf2_DEPENDENCIES) $(EXTRA_global_testing_mir_perf2_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/mir_perf2$(EXEEXT) $(AM_V_F77LD)$(global_testing_mir_perf2_LINK) $(global_testing_mir_perf2_OBJECTS) $(global_testing_mir_perf2_LDADD) $(LIBS) global/testing/mmatrix.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/mmatrix$(EXEEXT): $(global_testing_mmatrix_OBJECTS) $(global_testing_mmatrix_DEPENDENCIES) $(EXTRA_global_testing_mmatrix_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/mmatrix$(EXEEXT) $(AM_V_F77LD)$(global_testing_mmatrix_LINK) $(global_testing_mmatrix_OBJECTS) $(global_testing_mmatrix_LDADD) $(LIBS) global/testing/mtest.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/mtest$(EXEEXT): $(global_testing_mtest_OBJECTS) $(global_testing_mtest_DEPENDENCIES) $(EXTRA_global_testing_mtest_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/mtest$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_mtest_OBJECTS) $(global_testing_mtest_LDADD) $(LIBS) global/testing/mulmatpatch.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/mulmatpatch$(EXEEXT): $(global_testing_mulmatpatch_OBJECTS) $(global_testing_mulmatpatch_DEPENDENCIES) $(EXTRA_global_testing_mulmatpatch_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/mulmatpatch$(EXEEXT) $(AM_V_F77LD)$(global_testing_mulmatpatch_LINK) $(global_testing_mulmatpatch_OBJECTS) $(global_testing_mulmatpatch_LDADD) $(LIBS) global/testing/mulmatpatchc.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/mulmatpatchc$(EXEEXT): $(global_testing_mulmatpatchc_OBJECTS) $(global_testing_mulmatpatchc_DEPENDENCIES) $(EXTRA_global_testing_mulmatpatchc_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/mulmatpatchc$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_mulmatpatchc_OBJECTS) $(global_testing_mulmatpatchc_LDADD) $(LIBS) global/testing/nb2test.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/nb2test$(EXEEXT): $(global_testing_nb2test_OBJECTS) $(global_testing_nb2test_DEPENDENCIES) $(EXTRA_global_testing_nb2test_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/nb2test$(EXEEXT) $(AM_V_F77LD)$(global_testing_nb2test_LINK) $(global_testing_nb2test_OBJECTS) $(global_testing_nb2test_LDADD) $(LIBS) global/testing/ndim.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/ndim$(EXEEXT): $(global_testing_ndim_OBJECTS) $(global_testing_ndim_DEPENDENCIES) $(EXTRA_global_testing_ndim_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/ndim$(EXEEXT) $(AM_V_F77LD)$(global_testing_ndim_LINK) $(global_testing_ndim_OBJECTS) $(global_testing_ndim_LDADD) $(LIBS) global/testing/nga-onesided.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/nga-onesided$(EXEEXT): $(global_testing_nga_onesided_OBJECTS) $(global_testing_nga_onesided_DEPENDENCIES) $(EXTRA_global_testing_nga_onesided_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/nga-onesided$(EXEEXT) $(AM_V_F77LD)$(global_testing_nga_onesided_LINK) $(global_testing_nga_onesided_OBJECTS) $(global_testing_nga_onesided_LDADD) $(LIBS) global/testing/nga-patch.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/nga-patch$(EXEEXT): $(global_testing_nga_patch_OBJECTS) $(global_testing_nga_patch_DEPENDENCIES) $(EXTRA_global_testing_nga_patch_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/nga-patch$(EXEEXT) $(AM_V_F77LD)$(global_testing_nga_patch_LINK) $(global_testing_nga_patch_OBJECTS) $(global_testing_nga_patch_LDADD) $(LIBS) global/testing/nga-periodic.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/nga-periodic$(EXEEXT): $(global_testing_nga_periodic_OBJECTS) $(global_testing_nga_periodic_DEPENDENCIES) $(EXTRA_global_testing_nga_periodic_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/nga-periodic$(EXEEXT) $(AM_V_F77LD)$(global_testing_nga_periodic_LINK) $(global_testing_nga_periodic_OBJECTS) $(global_testing_nga_periodic_LDADD) $(LIBS) global/testing/nga-scatter.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/nga-scatter$(EXEEXT): $(global_testing_nga_scatter_OBJECTS) $(global_testing_nga_scatter_DEPENDENCIES) $(EXTRA_global_testing_nga_scatter_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/nga-scatter$(EXEEXT) $(AM_V_F77LD)$(global_testing_nga_scatter_LINK) $(global_testing_nga_scatter_OBJECTS) $(global_testing_nga_scatter_LDADD) $(LIBS) global/testing/nga-util.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/nga-util$(EXEEXT): $(global_testing_nga_util_OBJECTS) $(global_testing_nga_util_DEPENDENCIES) $(EXTRA_global_testing_nga_util_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/nga-util$(EXEEXT) $(AM_V_F77LD)$(global_testing_nga_util_LINK) $(global_testing_nga_util_OBJECTS) $(global_testing_nga_util_LDADD) $(LIBS) global/testing/ngatest.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/ngatest$(EXEEXT): $(global_testing_ngatest_OBJECTS) $(global_testing_ngatest_DEPENDENCIES) $(EXTRA_global_testing_ngatest_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/ngatest$(EXEEXT) $(AM_V_F77LD)$(global_testing_ngatest_LINK) $(global_testing_ngatest_OBJECTS) $(global_testing_ngatest_LDADD) $(LIBS) global/testing/ntestc.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/ntestc$(EXEEXT): $(global_testing_ntestc_OBJECTS) $(global_testing_ntestc_DEPENDENCIES) $(EXTRA_global_testing_ntestc_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/ntestc$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_ntestc_OBJECTS) $(global_testing_ntestc_LDADD) $(LIBS) global/testing/ntestfc.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/ntestfc$(EXEEXT): $(global_testing_ntestfc_OBJECTS) $(global_testing_ntestfc_DEPENDENCIES) $(EXTRA_global_testing_ntestfc_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/ntestfc$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_ntestfc_OBJECTS) $(global_testing_ntestfc_LDADD) $(LIBS) global/testing/packc.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/packc$(EXEEXT): $(global_testing_packc_OBJECTS) $(global_testing_packc_DEPENDENCIES) $(EXTRA_global_testing_packc_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/packc$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_packc_OBJECTS) $(global_testing_packc_LDADD) $(LIBS) global/testing/patch.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/patch$(EXEEXT): $(global_testing_patch_OBJECTS) $(global_testing_patch_DEPENDENCIES) $(EXTRA_global_testing_patch_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/patch$(EXEEXT) $(AM_V_F77LD)$(global_testing_patch_LINK) $(global_testing_patch_OBJECTS) $(global_testing_patch_LDADD) $(LIBS) global/testing/patch2.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/patch2$(EXEEXT): $(global_testing_patch2_OBJECTS) $(global_testing_patch2_DEPENDENCIES) $(EXTRA_global_testing_patch2_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/patch2$(EXEEXT) $(AM_V_F77LD)$(global_testing_patch2_LINK) $(global_testing_patch2_OBJECTS) $(global_testing_patch2_LDADD) $(LIBS) global/testing/patch_enumc.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/patch_enumc$(EXEEXT): $(global_testing_patch_enumc_OBJECTS) $(global_testing_patch_enumc_DEPENDENCIES) $(EXTRA_global_testing_patch_enumc_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/patch_enumc$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_patch_enumc_OBJECTS) $(global_testing_patch_enumc_LDADD) $(LIBS) global/testing/patch_enumf.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/patch_enumf$(EXEEXT): $(global_testing_patch_enumf_OBJECTS) $(global_testing_patch_enumf_DEPENDENCIES) $(EXTRA_global_testing_patch_enumf_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/patch_enumf$(EXEEXT) $(AM_V_F77LD)$(global_testing_patch_enumf_LINK) $(global_testing_patch_enumf_OBJECTS) $(global_testing_patch_enumf_LDADD) $(LIBS) global/testing/perf.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/perf$(EXEEXT): $(global_testing_perf_OBJECTS) $(global_testing_perf_DEPENDENCIES) $(EXTRA_global_testing_perf_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/perf$(EXEEXT) $(AM_V_F77LD)$(global_testing_perf_LINK) $(global_testing_perf_OBJECTS) $(global_testing_perf_LDADD) $(LIBS) global/testing/perf2.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/perf2$(EXEEXT): $(global_testing_perf2_OBJECTS) $(global_testing_perf2_DEPENDENCIES) $(EXTRA_global_testing_perf2_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/perf2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_perf2_OBJECTS) $(global_testing_perf2_LDADD) $(LIBS) global/testing/perfmod.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/perfmod$(EXEEXT): $(global_testing_perfmod_OBJECTS) $(global_testing_perfmod_DEPENDENCIES) $(EXTRA_global_testing_perfmod_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/perfmod$(EXEEXT) $(AM_V_F77LD)$(global_testing_perfmod_LINK) $(global_testing_perfmod_OBJECTS) $(global_testing_perfmod_LDADD) $(LIBS) global/testing/perform.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/perform$(EXEEXT): $(global_testing_perform_OBJECTS) $(global_testing_perform_DEPENDENCIES) $(EXTRA_global_testing_perform_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/perform$(EXEEXT) $(AM_V_F77LD)$(global_testing_perform_LINK) $(global_testing_perform_OBJECTS) $(global_testing_perform_LDADD) $(LIBS) global/testing/pg2test.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/pg2test$(EXEEXT): $(global_testing_pg2test_OBJECTS) $(global_testing_pg2test_DEPENDENCIES) $(EXTRA_global_testing_pg2test_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/pg2test$(EXEEXT) $(AM_V_F77LD)$(global_testing_pg2test_LINK) $(global_testing_pg2test_OBJECTS) $(global_testing_pg2test_LDADD) $(LIBS) global/testing/pg2testmatmult.$(OBJEXT): \ global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/pg2testmatmult$(EXEEXT): $(global_testing_pg2testmatmult_OBJECTS) $(global_testing_pg2testmatmult_DEPENDENCIES) $(EXTRA_global_testing_pg2testmatmult_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/pg2testmatmult$(EXEEXT) $(AM_V_F77LD)$(global_testing_pg2testmatmult_LINK) $(global_testing_pg2testmatmult_OBJECTS) $(global_testing_pg2testmatmult_LDADD) $(LIBS) global/testing/pgtest.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/pgtest$(EXEEXT): $(global_testing_pgtest_OBJECTS) $(global_testing_pgtest_DEPENDENCIES) $(EXTRA_global_testing_pgtest_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/pgtest$(EXEEXT) $(AM_V_F77LD)$(global_testing_pgtest_LINK) $(global_testing_pgtest_OBJECTS) $(global_testing_pgtest_LDADD) $(LIBS) global/testing/pgtestmatmult.$(OBJEXT): \ global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/pgtestmatmult$(EXEEXT): $(global_testing_pgtestmatmult_OBJECTS) $(global_testing_pgtestmatmult_DEPENDENCIES) $(EXTRA_global_testing_pgtestmatmult_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/pgtestmatmult$(EXEEXT) $(AM_V_F77LD)$(global_testing_pgtestmatmult_LINK) $(global_testing_pgtestmatmult_OBJECTS) $(global_testing_pgtestmatmult_LDADD) $(LIBS) global/testing/print.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/print$(EXEEXT): $(global_testing_print_OBJECTS) $(global_testing_print_DEPENDENCIES) $(EXTRA_global_testing_print_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/print$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_print_OBJECTS) $(global_testing_print_LDADD) $(LIBS) global/testing/random.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/random$(EXEEXT): $(global_testing_random_OBJECTS) $(global_testing_random_DEPENDENCIES) $(EXTRA_global_testing_random_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/random$(EXEEXT) $(AM_V_F77LD)$(global_testing_random_LINK) $(global_testing_random_OBJECTS) $(global_testing_random_LDADD) $(LIBS) global/testing/scan.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/scan$(EXEEXT): $(global_testing_scan_OBJECTS) $(global_testing_scan_DEPENDENCIES) $(EXTRA_global_testing_scan_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/scan$(EXEEXT) $(AM_V_F77LD)$(global_testing_scan_LINK) $(global_testing_scan_OBJECTS) $(global_testing_scan_LDADD) $(LIBS) global/testing/scan_addc.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/scan_addc$(EXEEXT): $(global_testing_scan_addc_OBJECTS) $(global_testing_scan_addc_DEPENDENCIES) $(EXTRA_global_testing_scan_addc_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/scan_addc$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_scan_addc_OBJECTS) $(global_testing_scan_addc_LDADD) $(LIBS) global/testing/scan_copyc.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/scan_copyc$(EXEEXT): $(global_testing_scan_copyc_OBJECTS) $(global_testing_scan_copyc_DEPENDENCIES) $(EXTRA_global_testing_scan_copyc_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/scan_copyc$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_scan_copyc_OBJECTS) $(global_testing_scan_copyc_LDADD) $(LIBS) global/testing/simple_groups.$(OBJEXT): \ global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/simple_groups$(EXEEXT): $(global_testing_simple_groups_OBJECTS) $(global_testing_simple_groups_DEPENDENCIES) $(EXTRA_global_testing_simple_groups_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/simple_groups$(EXEEXT) $(AM_V_F77LD)$(global_testing_simple_groups_LINK) $(global_testing_simple_groups_OBJECTS) $(global_testing_simple_groups_LDADD) $(LIBS) global/testing/simple_groups_comm.$(OBJEXT): \ global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/simple_groups_comm$(EXEEXT): $(global_testing_simple_groups_comm_OBJECTS) $(global_testing_simple_groups_comm_DEPENDENCIES) $(EXTRA_global_testing_simple_groups_comm_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/simple_groups_comm$(EXEEXT) $(AM_V_F77LD)$(global_testing_simple_groups_comm_LINK) $(global_testing_simple_groups_comm_OBJECTS) $(global_testing_simple_groups_comm_LDADD) $(LIBS) global/testing/simple_groups_commc.$(OBJEXT): \ global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/simple_groups_commc$(EXEEXT): $(global_testing_simple_groups_commc_OBJECTS) $(global_testing_simple_groups_commc_DEPENDENCIES) $(EXTRA_global_testing_simple_groups_commc_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/simple_groups_commc$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_simple_groups_commc_OBJECTS) $(global_testing_simple_groups_commc_LDADD) $(LIBS) global/testing/sparse.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/sparse$(EXEEXT): $(global_testing_sparse_OBJECTS) $(global_testing_sparse_DEPENDENCIES) $(EXTRA_global_testing_sparse_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/sparse$(EXEEXT) $(AM_V_F77LD)$(global_testing_sparse_LINK) $(global_testing_sparse_OBJECTS) $(global_testing_sparse_LDADD) $(LIBS) global/testing/sprsmatmult.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/sprsmatmult$(EXEEXT): $(global_testing_sprsmatmult_OBJECTS) $(global_testing_sprsmatmult_DEPENDENCIES) $(EXTRA_global_testing_sprsmatmult_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/sprsmatmult$(EXEEXT) $(AM_V_F77LD)$(global_testing_sprsmatmult_LINK) $(global_testing_sprsmatmult_OBJECTS) $(global_testing_sprsmatmult_LDADD) $(LIBS) global/testing/stride.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/stride$(EXEEXT): $(global_testing_stride_OBJECTS) $(global_testing_stride_DEPENDENCIES) $(EXTRA_global_testing_stride_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/stride$(EXEEXT) $(AM_V_F77LD)$(global_testing_stride_LINK) $(global_testing_stride_OBJECTS) $(global_testing_stride_LDADD) $(LIBS) global/testing/test.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/test$(EXEEXT): $(global_testing_test_OBJECTS) $(global_testing_test_DEPENDENCIES) $(EXTRA_global_testing_test_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/test$(EXEEXT) $(AM_V_F77LD)$(global_testing_test_LINK) $(global_testing_test_OBJECTS) $(global_testing_test_LDADD) $(LIBS) global/testing/global_testing_test_mirrored-test.$(OBJEXT): \ global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/global_testing_test_mirrored-util.$(OBJEXT): \ global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/global_testing_test_mirrored-ffflush.$(OBJEXT): \ global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/global_testing_test_mirrored-testblas.$(OBJEXT): \ global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/test_mirrored$(EXEEXT): $(global_testing_test_mirrored_OBJECTS) $(global_testing_test_mirrored_DEPENDENCIES) $(EXTRA_global_testing_test_mirrored_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/test_mirrored$(EXEEXT) $(AM_V_F77LD)$(global_testing_test_mirrored_LINK) $(global_testing_test_mirrored_OBJECTS) $(global_testing_test_mirrored_LDADD) $(LIBS) global/testing/testc.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/testc$(EXEEXT): $(global_testing_testc_OBJECTS) $(global_testing_testc_DEPENDENCIES) $(EXTRA_global_testing_testc_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/testc$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_testc_OBJECTS) $(global_testing_testc_LDADD) $(LIBS) global/testing/testeig.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/testeig$(EXEEXT): $(global_testing_testeig_OBJECTS) $(global_testing_testeig_DEPENDENCIES) $(EXTRA_global_testing_testeig_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/testeig$(EXEEXT) $(AM_V_F77LD)$(global_testing_testeig_LINK) $(global_testing_testeig_OBJECTS) $(global_testing_testeig_LDADD) $(LIBS) global/testing/testmatmult.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/testmatmult$(EXEEXT): $(global_testing_testmatmult_OBJECTS) $(global_testing_testmatmult_DEPENDENCIES) $(EXTRA_global_testing_testmatmult_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/testmatmult$(EXEEXT) $(AM_V_F77LD)$(global_testing_testmatmult_LINK) $(global_testing_testmatmult_OBJECTS) $(global_testing_testmatmult_LDADD) $(LIBS) global/testing/testmatmultc.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/testmatmultc$(EXEEXT): $(global_testing_testmatmultc_OBJECTS) $(global_testing_testmatmultc_DEPENDENCIES) $(EXTRA_global_testing_testmatmultc_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/testmatmultc$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_testmatmultc_OBJECTS) $(global_testing_testmatmultc_LDADD) $(LIBS) global/testing/testmult.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/testmult$(EXEEXT): $(global_testing_testmult_OBJECTS) $(global_testing_testmult_DEPENDENCIES) $(EXTRA_global_testing_testmult_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/testmult$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_testmult_OBJECTS) $(global_testing_testmult_LDADD) $(LIBS) global/testing/testmultrect.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/testmultrect$(EXEEXT): $(global_testing_testmultrect_OBJECTS) $(global_testing_testmultrect_DEPENDENCIES) $(EXTRA_global_testing_testmultrect_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/testmultrect$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_testmultrect_OBJECTS) $(global_testing_testmultrect_LDADD) $(LIBS) global/testing/testsolve.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/testsolve$(EXEEXT): $(global_testing_testsolve_OBJECTS) $(global_testing_testsolve_DEPENDENCIES) $(EXTRA_global_testing_testsolve_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/testsolve$(EXEEXT) $(AM_V_F77LD)$(global_testing_testsolve_LINK) $(global_testing_testsolve_OBJECTS) $(global_testing_testsolve_LDADD) $(LIBS) global/testing/testspd.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/testspd$(EXEEXT): $(global_testing_testspd_OBJECTS) $(global_testing_testspd_DEPENDENCIES) $(EXTRA_global_testing_testspd_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/testspd$(EXEEXT) $(AM_V_F77LD)$(global_testing_testspd_LINK) $(global_testing_testspd_OBJECTS) $(global_testing_testspd_LDADD) $(LIBS) global/testing/types-test.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/types_test$(EXEEXT): $(global_testing_types_test_OBJECTS) $(global_testing_types_test_DEPENDENCIES) $(EXTRA_global_testing_types_test_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/types_test$(EXEEXT) $(AM_V_F77LD)$(global_testing_types_test_LINK) $(global_testing_types_test_OBJECTS) $(global_testing_types_test_LDADD) $(LIBS) global/testing/unit-tests/$(am__dirstamp): @$(MKDIR_P) global/testing/unit-tests @: > global/testing/unit-tests/$(am__dirstamp) global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) global/testing/unit-tests/$(DEPDIR) @: > global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_abs_value.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/mock.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_abs_value$(EXEEXT): $(global_testing_unit_tests_ga_abs_value_OBJECTS) $(global_testing_unit_tests_ga_abs_value_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_abs_value_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_abs_value$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_abs_value_OBJECTS) $(global_testing_unit_tests_ga_abs_value_LDADD) $(LIBS) global/testing/unit-tests/ga_acc.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_acc$(EXEEXT): $(global_testing_unit_tests_ga_acc_OBJECTS) $(global_testing_unit_tests_ga_acc_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_acc_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_acc$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_acc_OBJECTS) $(global_testing_unit_tests_ga_acc_LDADD) $(LIBS) global/testing/unit-tests/ga_add.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_add$(EXEEXT): $(global_testing_unit_tests_ga_add_OBJECTS) $(global_testing_unit_tests_ga_add_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_add_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_add$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_add_OBJECTS) $(global_testing_unit_tests_ga_add_LDADD) $(LIBS) global/testing/unit-tests/ga_add_constant.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_add_constant$(EXEEXT): $(global_testing_unit_tests_ga_add_constant_OBJECTS) $(global_testing_unit_tests_ga_add_constant_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_add_constant_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_add_constant$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_add_constant_OBJECTS) $(global_testing_unit_tests_ga_add_constant_LDADD) $(LIBS) global/testing/unit-tests/ga_add_constantpatch.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_add_constantpatch$(EXEEXT): $(global_testing_unit_tests_ga_add_constantpatch_OBJECTS) $(global_testing_unit_tests_ga_add_constantpatch_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_add_constantpatch_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_add_constantpatch$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_add_constantpatch_OBJECTS) $(global_testing_unit_tests_ga_add_constantpatch_LDADD) $(LIBS) global/testing/unit-tests/ga_add_diagonal.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_add_diagonal$(EXEEXT): $(global_testing_unit_tests_ga_add_diagonal_OBJECTS) $(global_testing_unit_tests_ga_add_diagonal_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_add_diagonal_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_add_diagonal$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_add_diagonal_OBJECTS) $(global_testing_unit_tests_ga_add_diagonal_LDADD) $(LIBS) global/testing/unit-tests/ga_add_patch.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_add_patch$(EXEEXT): $(global_testing_unit_tests_ga_add_patch_OBJECTS) $(global_testing_unit_tests_ga_add_patch_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_add_patch_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_add_patch$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_add_patch_OBJECTS) $(global_testing_unit_tests_ga_add_patch_LDADD) $(LIBS) global/testing/unit-tests/ga_copy.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_copy$(EXEEXT): $(global_testing_unit_tests_ga_copy_OBJECTS) $(global_testing_unit_tests_ga_copy_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_copy_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_copy$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_copy_OBJECTS) $(global_testing_unit_tests_ga_copy_LDADD) $(LIBS) global/testing/unit-tests/ga_copy2.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_copy2$(EXEEXT): $(global_testing_unit_tests_ga_copy2_OBJECTS) $(global_testing_unit_tests_ga_copy2_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_copy2_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_copy2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_copy2_OBJECTS) $(global_testing_unit_tests_ga_copy2_LDADD) $(LIBS) global/testing/unit-tests/ga_copy3.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_copy3$(EXEEXT): $(global_testing_unit_tests_ga_copy3_OBJECTS) $(global_testing_unit_tests_ga_copy3_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_copy3_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_copy3$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_copy3_OBJECTS) $(global_testing_unit_tests_ga_copy3_LDADD) $(LIBS) global/testing/unit-tests/ga_copypatch.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_copypatch$(EXEEXT): $(global_testing_unit_tests_ga_copypatch_OBJECTS) $(global_testing_unit_tests_ga_copypatch_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_copypatch_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_copypatch$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_copypatch_OBJECTS) $(global_testing_unit_tests_ga_copypatch_LDADD) $(LIBS) global/testing/unit-tests/ga_copypatch2.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_copypatch2$(EXEEXT): $(global_testing_unit_tests_ga_copypatch2_OBJECTS) $(global_testing_unit_tests_ga_copypatch2_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_copypatch2_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_copypatch2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_copypatch2_OBJECTS) $(global_testing_unit_tests_ga_copypatch2_LDADD) $(LIBS) global/testing/unit-tests/ga_create.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_create$(EXEEXT): $(global_testing_unit_tests_ga_create_OBJECTS) $(global_testing_unit_tests_ga_create_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_create_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_create$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_create_OBJECTS) $(global_testing_unit_tests_ga_create_LDADD) $(LIBS) global/testing/unit-tests/ga_create1.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_create1$(EXEEXT): $(global_testing_unit_tests_ga_create1_OBJECTS) $(global_testing_unit_tests_ga_create1_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_create1_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_create1$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_create1_OBJECTS) $(global_testing_unit_tests_ga_create1_LDADD) $(LIBS) global/testing/unit-tests/ga_create2.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_create2$(EXEEXT): $(global_testing_unit_tests_ga_create2_OBJECTS) $(global_testing_unit_tests_ga_create2_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_create2_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_create2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_create2_OBJECTS) $(global_testing_unit_tests_ga_create2_LDADD) $(LIBS) global/testing/unit-tests/ga_create3.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_create3$(EXEEXT): $(global_testing_unit_tests_ga_create3_OBJECTS) $(global_testing_unit_tests_ga_create3_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_create3_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_create3$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_create3_OBJECTS) $(global_testing_unit_tests_ga_create3_LDADD) $(LIBS) global/testing/unit-tests/ga_create_handle.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_create_handle$(EXEEXT): $(global_testing_unit_tests_ga_create_handle_OBJECTS) $(global_testing_unit_tests_ga_create_handle_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_create_handle_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_create_handle$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_create_handle_OBJECTS) $(global_testing_unit_tests_ga_create_handle_LDADD) $(LIBS) global/testing/unit-tests/ga_create_irreg.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_create_irreg$(EXEEXT): $(global_testing_unit_tests_ga_create_irreg_OBJECTS) $(global_testing_unit_tests_ga_create_irreg_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_create_irreg_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_create_irreg$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_create_irreg_OBJECTS) $(global_testing_unit_tests_ga_create_irreg_LDADD) $(LIBS) global/testing/unit-tests/ga_create_irreg2.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_create_irreg2$(EXEEXT): $(global_testing_unit_tests_ga_create_irreg2_OBJECTS) $(global_testing_unit_tests_ga_create_irreg2_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_create_irreg2_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_create_irreg2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_create_irreg2_OBJECTS) $(global_testing_unit_tests_ga_create_irreg2_LDADD) $(LIBS) global/testing/unit-tests/ga_create_irreg3.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_create_irreg3$(EXEEXT): $(global_testing_unit_tests_ga_create_irreg3_OBJECTS) $(global_testing_unit_tests_ga_create_irreg3_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_create_irreg3_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_create_irreg3$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_create_irreg3_OBJECTS) $(global_testing_unit_tests_ga_create_irreg3_LDADD) $(LIBS) global/testing/unit-tests/ga_destroy.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_destroy$(EXEEXT): $(global_testing_unit_tests_ga_destroy_OBJECTS) $(global_testing_unit_tests_ga_destroy_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_destroy_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_destroy$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_destroy_OBJECTS) $(global_testing_unit_tests_ga_destroy_LDADD) $(LIBS) global/testing/unit-tests/ga_dgop.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_dgop$(EXEEXT): $(global_testing_unit_tests_ga_dgop_OBJECTS) $(global_testing_unit_tests_ga_dgop_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_dgop_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_dgop$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_dgop_OBJECTS) $(global_testing_unit_tests_ga_dgop_LDADD) $(LIBS) global/testing/unit-tests/ga_dot.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_dot$(EXEEXT): $(global_testing_unit_tests_ga_dot_OBJECTS) $(global_testing_unit_tests_ga_dot_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_dot_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_dot$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_dot_OBJECTS) $(global_testing_unit_tests_ga_dot_LDADD) $(LIBS) global/testing/unit-tests/ga_duplicate.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_duplicate$(EXEEXT): $(global_testing_unit_tests_ga_duplicate_OBJECTS) $(global_testing_unit_tests_ga_duplicate_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_duplicate_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_duplicate$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_duplicate_OBJECTS) $(global_testing_unit_tests_ga_duplicate_LDADD) $(LIBS) global/testing/unit-tests/ga_elem_divide.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_elem_divide$(EXEEXT): $(global_testing_unit_tests_ga_elem_divide_OBJECTS) $(global_testing_unit_tests_ga_elem_divide_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_elem_divide_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_elem_divide$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_elem_divide_OBJECTS) $(global_testing_unit_tests_ga_elem_divide_LDADD) $(LIBS) global/testing/unit-tests/ga_elem_dividepatch.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_elem_dividepatch$(EXEEXT): $(global_testing_unit_tests_ga_elem_dividepatch_OBJECTS) $(global_testing_unit_tests_ga_elem_dividepatch_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_elem_dividepatch_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_elem_dividepatch$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_elem_dividepatch_OBJECTS) $(global_testing_unit_tests_ga_elem_dividepatch_LDADD) $(LIBS) global/testing/unit-tests/ga_elem_maximum.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_elem_maximum$(EXEEXT): $(global_testing_unit_tests_ga_elem_maximum_OBJECTS) $(global_testing_unit_tests_ga_elem_maximum_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_elem_maximum_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_elem_maximum$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_elem_maximum_OBJECTS) $(global_testing_unit_tests_ga_elem_maximum_LDADD) $(LIBS) global/testing/unit-tests/ga_elem_maximumpatch.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_elem_maximumpatch$(EXEEXT): $(global_testing_unit_tests_ga_elem_maximumpatch_OBJECTS) $(global_testing_unit_tests_ga_elem_maximumpatch_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_elem_maximumpatch_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_elem_maximumpatch$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_elem_maximumpatch_OBJECTS) $(global_testing_unit_tests_ga_elem_maximumpatch_LDADD) $(LIBS) global/testing/unit-tests/ga_elem_minimum.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_elem_minimum$(EXEEXT): $(global_testing_unit_tests_ga_elem_minimum_OBJECTS) $(global_testing_unit_tests_ga_elem_minimum_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_elem_minimum_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_elem_minimum$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_elem_minimum_OBJECTS) $(global_testing_unit_tests_ga_elem_minimum_LDADD) $(LIBS) global/testing/unit-tests/ga_elem_minimumpatch.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_elem_minimumpatch$(EXEEXT): $(global_testing_unit_tests_ga_elem_minimumpatch_OBJECTS) $(global_testing_unit_tests_ga_elem_minimumpatch_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_elem_minimumpatch_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_elem_minimumpatch$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_elem_minimumpatch_OBJECTS) $(global_testing_unit_tests_ga_elem_minimumpatch_LDADD) $(LIBS) global/testing/unit-tests/ga_elem_multiply.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_elem_multiply$(EXEEXT): $(global_testing_unit_tests_ga_elem_multiply_OBJECTS) $(global_testing_unit_tests_ga_elem_multiply_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_elem_multiply_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_elem_multiply$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_elem_multiply_OBJECTS) $(global_testing_unit_tests_ga_elem_multiply_LDADD) $(LIBS) global/testing/unit-tests/ga_elem_multiplypatch.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_elem_multiplypatch$(EXEEXT): $(global_testing_unit_tests_ga_elem_multiplypatch_OBJECTS) $(global_testing_unit_tests_ga_elem_multiplypatch_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_elem_multiplypatch_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_elem_multiplypatch$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_elem_multiplypatch_OBJECTS) $(global_testing_unit_tests_ga_elem_multiplypatch_LDADD) $(LIBS) global/testing/unit-tests/ga_fill.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_fill$(EXEEXT): $(global_testing_unit_tests_ga_fill_OBJECTS) $(global_testing_unit_tests_ga_fill_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_fill_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_fill$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_fill_OBJECTS) $(global_testing_unit_tests_ga_fill_LDADD) $(LIBS) global/testing/unit-tests/ga_fillpatch.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_fillpatch$(EXEEXT): $(global_testing_unit_tests_ga_fillpatch_OBJECTS) $(global_testing_unit_tests_ga_fillpatch_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_fillpatch_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_fillpatch$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_fillpatch_OBJECTS) $(global_testing_unit_tests_ga_fillpatch_LDADD) $(LIBS) global/testing/unit-tests/ga_fillpatch1.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_fillpatch1$(EXEEXT): $(global_testing_unit_tests_ga_fillpatch1_OBJECTS) $(global_testing_unit_tests_ga_fillpatch1_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_fillpatch1_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_fillpatch1$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_fillpatch1_OBJECTS) $(global_testing_unit_tests_ga_fillpatch1_LDADD) $(LIBS) global/testing/unit-tests/ga_gather.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_gather$(EXEEXT): $(global_testing_unit_tests_ga_gather_OBJECTS) $(global_testing_unit_tests_ga_gather_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_gather_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_gather$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_gather_OBJECTS) $(global_testing_unit_tests_ga_gather_LDADD) $(LIBS) global/testing/unit-tests/ga_gather2.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_gather2$(EXEEXT): $(global_testing_unit_tests_ga_gather2_OBJECTS) $(global_testing_unit_tests_ga_gather2_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_gather2_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_gather2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_gather2_OBJECTS) $(global_testing_unit_tests_ga_gather2_LDADD) $(LIBS) global/testing/unit-tests/ga_gather3.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_gather3$(EXEEXT): $(global_testing_unit_tests_ga_gather3_OBJECTS) $(global_testing_unit_tests_ga_gather3_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_gather3_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_gather3$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_gather3_OBJECTS) $(global_testing_unit_tests_ga_gather3_LDADD) $(LIBS) global/testing/unit-tests/ga_get.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_get$(EXEEXT): $(global_testing_unit_tests_ga_get_OBJECTS) $(global_testing_unit_tests_ga_get_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_get_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_get$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_get_OBJECTS) $(global_testing_unit_tests_ga_get_LDADD) $(LIBS) global/testing/unit-tests/ga_get_blockinfo.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_get_blockinfo$(EXEEXT): $(global_testing_unit_tests_ga_get_blockinfo_OBJECTS) $(global_testing_unit_tests_ga_get_blockinfo_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_get_blockinfo_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_get_blockinfo$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_get_blockinfo_OBJECTS) $(global_testing_unit_tests_ga_get_blockinfo_LDADD) $(LIBS) global/testing/unit-tests/ga_get_diagonal.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_get_diagonal$(EXEEXT): $(global_testing_unit_tests_ga_get_diagonal_OBJECTS) $(global_testing_unit_tests_ga_get_diagonal_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_get_diagonal_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_get_diagonal$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_get_diagonal_OBJECTS) $(global_testing_unit_tests_ga_get_diagonal_LDADD) $(LIBS) global/testing/unit-tests/ga_igop.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_igop$(EXEEXT): $(global_testing_unit_tests_ga_igop_OBJECTS) $(global_testing_unit_tests_ga_igop_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_igop_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_igop$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_igop_OBJECTS) $(global_testing_unit_tests_ga_igop_LDADD) $(LIBS) global/testing/unit-tests/ga_igop2.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_igop2$(EXEEXT): $(global_testing_unit_tests_ga_igop2_OBJECTS) $(global_testing_unit_tests_ga_igop2_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_igop2_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_igop2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_igop2_OBJECTS) $(global_testing_unit_tests_ga_igop2_LDADD) $(LIBS) global/testing/unit-tests/ga_inquire.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_inquire$(EXEEXT): $(global_testing_unit_tests_ga_inquire_OBJECTS) $(global_testing_unit_tests_ga_inquire_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_inquire_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_inquire$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_inquire_OBJECTS) $(global_testing_unit_tests_ga_inquire_LDADD) $(LIBS) global/testing/unit-tests/ga_intialize.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_intialize$(EXEEXT): $(global_testing_unit_tests_ga_intialize_OBJECTS) $(global_testing_unit_tests_ga_intialize_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_intialize_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_intialize$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_intialize_OBJECTS) $(global_testing_unit_tests_ga_intialize_LDADD) $(LIBS) global/testing/unit-tests/ga_lgop.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_lgop$(EXEEXT): $(global_testing_unit_tests_ga_lgop_OBJECTS) $(global_testing_unit_tests_ga_lgop_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_lgop_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_lgop$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_lgop_OBJECTS) $(global_testing_unit_tests_ga_lgop_LDADD) $(LIBS) global/testing/unit-tests/ga_median.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_median$(EXEEXT): $(global_testing_unit_tests_ga_median_OBJECTS) $(global_testing_unit_tests_ga_median_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_median_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_median$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_median_OBJECTS) $(global_testing_unit_tests_ga_median_LDADD) $(LIBS) global/testing/unit-tests/ga_ndim.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_ndim$(EXEEXT): $(global_testing_unit_tests_ga_ndim_OBJECTS) $(global_testing_unit_tests_ga_ndim_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_ndim_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_ndim$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_ndim_OBJECTS) $(global_testing_unit_tests_ga_ndim_LDADD) $(LIBS) global/testing/unit-tests/ga_ndim2.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_ndim2$(EXEEXT): $(global_testing_unit_tests_ga_ndim2_OBJECTS) $(global_testing_unit_tests_ga_ndim2_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_ndim2_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_ndim2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_ndim2_OBJECTS) $(global_testing_unit_tests_ga_ndim2_LDADD) $(LIBS) global/testing/unit-tests/ga_nnodes.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_nnodes$(EXEEXT): $(global_testing_unit_tests_ga_nnodes_OBJECTS) $(global_testing_unit_tests_ga_nnodes_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_nnodes_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_nnodes$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_nnodes_OBJECTS) $(global_testing_unit_tests_ga_nnodes_LDADD) $(LIBS) global/testing/unit-tests/ga_nodeid.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_nodeid$(EXEEXT): $(global_testing_unit_tests_ga_nodeid_OBJECTS) $(global_testing_unit_tests_ga_nodeid_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_nodeid_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_nodeid$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_nodeid_OBJECTS) $(global_testing_unit_tests_ga_nodeid_LDADD) $(LIBS) global/testing/unit-tests/ga_pgroup_create.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_pgroup_create$(EXEEXT): $(global_testing_unit_tests_ga_pgroup_create_OBJECTS) $(global_testing_unit_tests_ga_pgroup_create_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_pgroup_create_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_pgroup_create$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_pgroup_create_OBJECTS) $(global_testing_unit_tests_ga_pgroup_create_LDADD) $(LIBS) global/testing/unit-tests/ga_pgroup_create2.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_pgroup_create2$(EXEEXT): $(global_testing_unit_tests_ga_pgroup_create2_OBJECTS) $(global_testing_unit_tests_ga_pgroup_create2_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_pgroup_create2_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_pgroup_create2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_pgroup_create2_OBJECTS) $(global_testing_unit_tests_ga_pgroup_create2_LDADD) $(LIBS) global/testing/unit-tests/ga_pgroup_create3.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_pgroup_create3$(EXEEXT): $(global_testing_unit_tests_ga_pgroup_create3_OBJECTS) $(global_testing_unit_tests_ga_pgroup_create3_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_pgroup_create3_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_pgroup_create3$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_pgroup_create3_OBJECTS) $(global_testing_unit_tests_ga_pgroup_create3_LDADD) $(LIBS) global/testing/unit-tests/ga_pgroup_create4.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_pgroup_create4$(EXEEXT): $(global_testing_unit_tests_ga_pgroup_create4_OBJECTS) $(global_testing_unit_tests_ga_pgroup_create4_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_pgroup_create4_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_pgroup_create4$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_pgroup_create4_OBJECTS) $(global_testing_unit_tests_ga_pgroup_create4_LDADD) $(LIBS) global/testing/unit-tests/ga_pgroup_create5.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_pgroup_create5$(EXEEXT): $(global_testing_unit_tests_ga_pgroup_create5_OBJECTS) $(global_testing_unit_tests_ga_pgroup_create5_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_pgroup_create5_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_pgroup_create5$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_pgroup_create5_OBJECTS) $(global_testing_unit_tests_ga_pgroup_create5_LDADD) $(LIBS) global/testing/unit-tests/ga_pgroup_destroy.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_pgroup_destroy$(EXEEXT): $(global_testing_unit_tests_ga_pgroup_destroy_OBJECTS) $(global_testing_unit_tests_ga_pgroup_destroy_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_pgroup_destroy_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_pgroup_destroy$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_pgroup_destroy_OBJECTS) $(global_testing_unit_tests_ga_pgroup_destroy_LDADD) $(LIBS) global/testing/unit-tests/ga_pgroup_destroy2.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_pgroup_destroy2$(EXEEXT): $(global_testing_unit_tests_ga_pgroup_destroy2_OBJECTS) $(global_testing_unit_tests_ga_pgroup_destroy2_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_pgroup_destroy2_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_pgroup_destroy2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_pgroup_destroy2_OBJECTS) $(global_testing_unit_tests_ga_pgroup_destroy2_LDADD) $(LIBS) global/testing/unit-tests/ga_pgroup_nnodes_nodeid.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_pgroup_nnodes_nodeid$(EXEEXT): $(global_testing_unit_tests_ga_pgroup_nnodes_nodeid_OBJECTS) $(global_testing_unit_tests_ga_pgroup_nnodes_nodeid_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_pgroup_nnodes_nodeid_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_pgroup_nnodes_nodeid$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_pgroup_nnodes_nodeid_OBJECTS) $(global_testing_unit_tests_ga_pgroup_nnodes_nodeid_LDADD) $(LIBS) global/testing/unit-tests/ga_pgroup_setdefault.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_pgroup_setdefault$(EXEEXT): $(global_testing_unit_tests_ga_pgroup_setdefault_OBJECTS) $(global_testing_unit_tests_ga_pgroup_setdefault_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_pgroup_setdefault_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_pgroup_setdefault$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_pgroup_setdefault_OBJECTS) $(global_testing_unit_tests_ga_pgroup_setdefault_LDADD) $(LIBS) global/testing/unit-tests/ga_put.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_put$(EXEEXT): $(global_testing_unit_tests_ga_put_OBJECTS) $(global_testing_unit_tests_ga_put_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_put_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_put$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_put_OBJECTS) $(global_testing_unit_tests_ga_put_LDADD) $(LIBS) global/testing/unit-tests/ga_put2.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_put2$(EXEEXT): $(global_testing_unit_tests_ga_put2_OBJECTS) $(global_testing_unit_tests_ga_put2_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_put2_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_put2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_put2_OBJECTS) $(global_testing_unit_tests_ga_put2_LDADD) $(LIBS) global/testing/unit-tests/ga_scale.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_scale$(EXEEXT): $(global_testing_unit_tests_ga_scale_OBJECTS) $(global_testing_unit_tests_ga_scale_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_scale_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_scale$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_scale_OBJECTS) $(global_testing_unit_tests_ga_scale_LDADD) $(LIBS) global/testing/unit-tests/ga_scale2.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_scale2$(EXEEXT): $(global_testing_unit_tests_ga_scale2_OBJECTS) $(global_testing_unit_tests_ga_scale2_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_scale2_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_scale2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_scale2_OBJECTS) $(global_testing_unit_tests_ga_scale2_LDADD) $(LIBS) global/testing/unit-tests/ga_scale_cols.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_scale_cols$(EXEEXT): $(global_testing_unit_tests_ga_scale_cols_OBJECTS) $(global_testing_unit_tests_ga_scale_cols_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_scale_cols_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_scale_cols$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_scale_cols_OBJECTS) $(global_testing_unit_tests_ga_scale_cols_LDADD) $(LIBS) global/testing/unit-tests/ga_scale_patch.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_scale_patch$(EXEEXT): $(global_testing_unit_tests_ga_scale_patch_OBJECTS) $(global_testing_unit_tests_ga_scale_patch_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_scale_patch_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_scale_patch$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_scale_patch_OBJECTS) $(global_testing_unit_tests_ga_scale_patch_LDADD) $(LIBS) global/testing/unit-tests/ga_scale_rows.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_scale_rows$(EXEEXT): $(global_testing_unit_tests_ga_scale_rows_OBJECTS) $(global_testing_unit_tests_ga_scale_rows_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_scale_rows_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_scale_rows$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_scale_rows_OBJECTS) $(global_testing_unit_tests_ga_scale_rows_LDADD) $(LIBS) global/testing/unit-tests/ga_scatter.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_scatter$(EXEEXT): $(global_testing_unit_tests_ga_scatter_OBJECTS) $(global_testing_unit_tests_ga_scatter_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_scatter_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_scatter$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_scatter_OBJECTS) $(global_testing_unit_tests_ga_scatter_LDADD) $(LIBS) global/testing/unit-tests/ga_set_data.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_set_data$(EXEEXT): $(global_testing_unit_tests_ga_set_data_OBJECTS) $(global_testing_unit_tests_ga_set_data_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_set_data_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_set_data$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_set_data_OBJECTS) $(global_testing_unit_tests_ga_set_data_LDADD) $(LIBS) global/testing/unit-tests/ga_set_diagonal.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_set_diagonal$(EXEEXT): $(global_testing_unit_tests_ga_set_diagonal_OBJECTS) $(global_testing_unit_tests_ga_set_diagonal_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_set_diagonal_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_set_diagonal$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_set_diagonal_OBJECTS) $(global_testing_unit_tests_ga_set_diagonal_LDADD) $(LIBS) global/testing/unit-tests/ga_set_restricted.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_set_restricted$(EXEEXT): $(global_testing_unit_tests_ga_set_restricted_OBJECTS) $(global_testing_unit_tests_ga_set_restricted_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_set_restricted_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_set_restricted$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_set_restricted_OBJECTS) $(global_testing_unit_tests_ga_set_restricted_LDADD) $(LIBS) global/testing/unit-tests/ga_solve.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_solve$(EXEEXT): $(global_testing_unit_tests_ga_solve_OBJECTS) $(global_testing_unit_tests_ga_solve_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_solve_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_solve$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_solve_OBJECTS) $(global_testing_unit_tests_ga_solve_LDADD) $(LIBS) global/testing/unit-tests/ga_sync.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_sync$(EXEEXT): $(global_testing_unit_tests_ga_sync_OBJECTS) $(global_testing_unit_tests_ga_sync_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_sync_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_sync$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_sync_OBJECTS) $(global_testing_unit_tests_ga_sync_LDADD) $(LIBS) global/testing/unit-tests/ga_transpose.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_transpose$(EXEEXT): $(global_testing_unit_tests_ga_transpose_OBJECTS) $(global_testing_unit_tests_ga_transpose_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_transpose_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_transpose$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_transpose_OBJECTS) $(global_testing_unit_tests_ga_transpose_LDADD) $(LIBS) global/testing/unit-tests/ga_transpose2.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_transpose2$(EXEEXT): $(global_testing_unit_tests_ga_transpose2_OBJECTS) $(global_testing_unit_tests_ga_transpose2_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_transpose2_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_transpose2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_transpose2_OBJECTS) $(global_testing_unit_tests_ga_transpose2_LDADD) $(LIBS) global/testing/unit-tests/ga_transpose3.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_transpose3$(EXEEXT): $(global_testing_unit_tests_ga_transpose3_OBJECTS) $(global_testing_unit_tests_ga_transpose3_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_transpose3_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_transpose3$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_transpose3_OBJECTS) $(global_testing_unit_tests_ga_transpose3_LDADD) $(LIBS) global/testing/unit-tests/ga_zero.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_zero$(EXEEXT): $(global_testing_unit_tests_ga_zero_OBJECTS) $(global_testing_unit_tests_ga_zero_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_zero_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_zero$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_zero_OBJECTS) $(global_testing_unit_tests_ga_zero_LDADD) $(LIBS) global/testing/unit-tests/ga_zerodiagonal.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_zerodiagonal$(EXEEXT): $(global_testing_unit_tests_ga_zerodiagonal_OBJECTS) $(global_testing_unit_tests_ga_zerodiagonal_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_zerodiagonal_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_zerodiagonal$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_zerodiagonal_OBJECTS) $(global_testing_unit_tests_ga_zerodiagonal_LDADD) $(LIBS) global/testing/unit-tests/ga_zeropatch.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_zeropatch$(EXEEXT): $(global_testing_unit_tests_ga_zeropatch_OBJECTS) $(global_testing_unit_tests_ga_zeropatch_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_zeropatch_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_zeropatch$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_zeropatch_OBJECTS) $(global_testing_unit_tests_ga_zeropatch_LDADD) $(LIBS) global/testing/unit-tests/ga_zeropatch2.$(OBJEXT): \ global/testing/unit-tests/$(am__dirstamp) \ global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) global/testing/unit-tests/ga_zeropatch2$(EXEEXT): $(global_testing_unit_tests_ga_zeropatch2_OBJECTS) $(global_testing_unit_tests_ga_zeropatch2_DEPENDENCIES) $(EXTRA_global_testing_unit_tests_ga_zeropatch2_DEPENDENCIES) global/testing/unit-tests/$(am__dirstamp) @rm -f global/testing/unit-tests/ga_zeropatch2$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unit_tests_ga_zeropatch2_OBJECTS) $(global_testing_unit_tests_ga_zeropatch2_LDADD) $(LIBS) global/testing/unpackc.$(OBJEXT): global/testing/$(am__dirstamp) \ global/testing/$(DEPDIR)/$(am__dirstamp) global/testing/unpackc$(EXEEXT): $(global_testing_unpackc_OBJECTS) $(global_testing_unpackc_DEPENDENCIES) $(EXTRA_global_testing_unpackc_DEPENDENCIES) global/testing/$(am__dirstamp) @rm -f global/testing/unpackc$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(global_testing_unpackc_OBJECTS) $(global_testing_unpackc_LDADD) $(LIBS) global/trace/$(am__dirstamp): @$(MKDIR_P) global/trace @: > global/trace/$(am__dirstamp) global/trace/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) global/trace/$(DEPDIR) @: > global/trace/$(DEPDIR)/$(am__dirstamp) global/trace/adjust.$(OBJEXT): global/trace/$(am__dirstamp) \ global/trace/$(DEPDIR)/$(am__dirstamp) global/trace/adjust$(EXEEXT): $(global_trace_adjust_OBJECTS) $(global_trace_adjust_DEPENDENCIES) $(EXTRA_global_trace_adjust_DEPENDENCIES) global/trace/$(am__dirstamp) @rm -f global/trace/adjust$(EXEEXT) $(AM_V_CCLD)$(global_trace_adjust_LINK) $(global_trace_adjust_OBJECTS) $(global_trace_adjust_LDADD) $(LIBS) global/trace/collisions.$(OBJEXT): global/trace/$(am__dirstamp) \ global/trace/$(DEPDIR)/$(am__dirstamp) global/trace/collisions$(EXEEXT): $(global_trace_collisions_OBJECTS) $(global_trace_collisions_DEPENDENCIES) $(EXTRA_global_trace_collisions_DEPENDENCIES) global/trace/$(am__dirstamp) @rm -f global/trace/collisions$(EXEEXT) $(AM_V_CCLD)$(global_trace_collisions_LINK) $(global_trace_collisions_OBJECTS) $(global_trace_collisions_LDADD) $(LIBS) gparrays/testing/$(am__dirstamp): @$(MKDIR_P) gparrays/testing @: > gparrays/testing/$(am__dirstamp) gparrays/testing/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) gparrays/testing/$(DEPDIR) @: > gparrays/testing/$(DEPDIR)/$(am__dirstamp) gparrays/testing/test.$(OBJEXT): gparrays/testing/$(am__dirstamp) \ gparrays/testing/$(DEPDIR)/$(am__dirstamp) gparrays/testing/test$(EXEEXT): $(gparrays_testing_test_OBJECTS) $(gparrays_testing_test_DEPENDENCIES) $(EXTRA_gparrays_testing_test_DEPENDENCIES) gparrays/testing/$(am__dirstamp) @rm -f gparrays/testing/test$(EXEEXT) $(AM_V_F77LD)$(gparrays_testing_test_LINK) $(gparrays_testing_test_OBJECTS) $(gparrays_testing_test_LDADD) $(LIBS) gparrays/testing/testc.$(OBJEXT): gparrays/testing/$(am__dirstamp) \ gparrays/testing/$(DEPDIR)/$(am__dirstamp) gparrays/testing/testc$(EXEEXT): $(gparrays_testing_testc_OBJECTS) $(gparrays_testing_testc_DEPENDENCIES) $(EXTRA_gparrays_testing_testc_DEPENDENCIES) gparrays/testing/$(am__dirstamp) @rm -f gparrays/testing/testc$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(gparrays_testing_testc_OBJECTS) $(gparrays_testing_testc_LDADD) $(LIBS) gparrays/testing/transpose.$(OBJEXT): \ gparrays/testing/$(am__dirstamp) \ gparrays/testing/$(DEPDIR)/$(am__dirstamp) gparrays/testing/transpose$(EXEEXT): $(gparrays_testing_transpose_OBJECTS) $(gparrays_testing_transpose_DEPENDENCIES) $(EXTRA_gparrays_testing_transpose_DEPENDENCIES) gparrays/testing/$(am__dirstamp) @rm -f gparrays/testing/transpose$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(gparrays_testing_transpose_OBJECTS) $(gparrays_testing_transpose_LDADD) $(LIBS) ma/test-coalesce.$(OBJEXT): ma/$(am__dirstamp) \ ma/$(DEPDIR)/$(am__dirstamp) ma/test-coalesce$(EXEEXT): $(ma_test_coalesce_OBJECTS) $(ma_test_coalesce_DEPENDENCIES) $(EXTRA_ma_test_coalesce_DEPENDENCIES) ma/$(am__dirstamp) @rm -f ma/test-coalesce$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ma_test_coalesce_OBJECTS) $(ma_test_coalesce_LDADD) $(LIBS) ma/test-inquire.$(OBJEXT): ma/$(am__dirstamp) \ ma/$(DEPDIR)/$(am__dirstamp) ma/test-inquire$(EXEEXT): $(ma_test_inquire_OBJECTS) $(ma_test_inquire_DEPENDENCIES) $(EXTRA_ma_test_inquire_DEPENDENCIES) ma/$(am__dirstamp) @rm -f ma/test-inquire$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ma_test_inquire_OBJECTS) $(ma_test_inquire_LDADD) $(LIBS) ma/testc.$(OBJEXT): ma/$(am__dirstamp) ma/$(DEPDIR)/$(am__dirstamp) ma/testc$(EXEEXT): $(ma_testc_OBJECTS) $(ma_testc_DEPENDENCIES) $(EXTRA_ma_testc_DEPENDENCIES) ma/$(am__dirstamp) @rm -f ma/testc$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(ma_testc_OBJECTS) $(ma_testc_LDADD) $(LIBS) ma/testf.$(OBJEXT): ma/$(am__dirstamp) ma/$(DEPDIR)/$(am__dirstamp) ma/testf$(EXEEXT): $(ma_testf_OBJECTS) $(ma_testf_DEPENDENCIES) $(EXTRA_ma_testf_DEPENDENCIES) ma/$(am__dirstamp) @rm -f ma/testf$(EXEEXT) $(AM_V_F77LD)$(ma_testf_LINK) $(ma_testf_OBJECTS) $(ma_testf_LDADD) $(LIBS) pario/dra/big.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/ffflush.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/util.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/big$(EXEEXT): $(pario_dra_big_OBJECTS) $(pario_dra_big_DEPENDENCIES) $(EXTRA_pario_dra_big_DEPENDENCIES) pario/dra/$(am__dirstamp) @rm -f pario/dra/big$(EXEEXT) $(AM_V_F77LD)$(pario_dra_big_LINK) $(pario_dra_big_OBJECTS) $(pario_dra_big_LDADD) $(LIBS) pario/dra/bign.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/bign$(EXEEXT): $(pario_dra_bign_OBJECTS) $(pario_dra_bign_DEPENDENCIES) $(EXTRA_pario_dra_bign_DEPENDENCIES) pario/dra/$(am__dirstamp) @rm -f pario/dra/bign$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(pario_dra_bign_OBJECTS) $(pario_dra_bign_LDADD) $(LIBS) pario/dra/dbg_read.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/dbg_read$(EXEEXT): $(pario_dra_dbg_read_OBJECTS) $(pario_dra_dbg_read_DEPENDENCIES) $(EXTRA_pario_dra_dbg_read_DEPENDENCIES) pario/dra/$(am__dirstamp) @rm -f pario/dra/dbg_read$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(pario_dra_dbg_read_OBJECTS) $(pario_dra_dbg_read_LDADD) $(LIBS) pario/dra/dbg_write.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/dbg_write$(EXEEXT): $(pario_dra_dbg_write_OBJECTS) $(pario_dra_dbg_write_DEPENDENCIES) $(EXTRA_pario_dra_dbg_write_DEPENDENCIES) pario/dra/$(am__dirstamp) @rm -f pario/dra/dbg_write$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(pario_dra_dbg_write_OBJECTS) $(pario_dra_dbg_write_LDADD) $(LIBS) pario/dra/dra2arviz.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/dra2arviz$(EXEEXT): $(pario_dra_dra2arviz_OBJECTS) $(pario_dra_dra2arviz_DEPENDENCIES) $(EXTRA_pario_dra_dra2arviz_DEPENDENCIES) pario/dra/$(am__dirstamp) @rm -f pario/dra/dra2arviz$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(pario_dra_dra2arviz_OBJECTS) $(pario_dra_dra2arviz_LDADD) $(LIBS) pario/dra/dra_mxm.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/dra_mxm$(EXEEXT): $(pario_dra_dra_mxm_OBJECTS) $(pario_dra_dra_mxm_DEPENDENCIES) $(EXTRA_pario_dra_dra_mxm_DEPENDENCIES) pario/dra/$(am__dirstamp) @rm -f pario/dra/dra_mxm$(EXEEXT) $(AM_V_F77LD)$(pario_dra_dra_mxm_LINK) $(pario_dra_dra_mxm_OBJECTS) $(pario_dra_dra_mxm_LDADD) $(LIBS) pario/dra/ntest.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/ntest$(EXEEXT): $(pario_dra_ntest_OBJECTS) $(pario_dra_ntest_DEPENDENCIES) $(EXTRA_pario_dra_ntest_DEPENDENCIES) pario/dra/$(am__dirstamp) @rm -f pario/dra/ntest$(EXEEXT) $(AM_V_F77LD)$(pario_dra_ntest_LINK) $(pario_dra_ntest_OBJECTS) $(pario_dra_ntest_LDADD) $(LIBS) pario/dra/ntestc.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/ntestc$(EXEEXT): $(pario_dra_ntestc_OBJECTS) $(pario_dra_ntestc_DEPENDENCIES) $(EXTRA_pario_dra_ntestc_DEPENDENCIES) pario/dra/$(am__dirstamp) @rm -f pario/dra/ntestc$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(pario_dra_ntestc_OBJECTS) $(pario_dra_ntestc_LDADD) $(LIBS) pario/dra/perf.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/perf$(EXEEXT): $(pario_dra_perf_OBJECTS) $(pario_dra_perf_DEPENDENCIES) $(EXTRA_pario_dra_perf_DEPENDENCIES) pario/dra/$(am__dirstamp) @rm -f pario/dra/perf$(EXEEXT) $(AM_V_F77LD)$(pario_dra_perf_LINK) $(pario_dra_perf_OBJECTS) $(pario_dra_perf_LDADD) $(LIBS) pario/dra/perf2.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/perf2$(EXEEXT): $(pario_dra_perf2_OBJECTS) $(pario_dra_perf2_DEPENDENCIES) $(EXTRA_pario_dra_perf2_DEPENDENCIES) pario/dra/$(am__dirstamp) @rm -f pario/dra/perf2$(EXEEXT) $(AM_V_F77LD)$(pario_dra_perf2_LINK) $(pario_dra_perf2_OBJECTS) $(pario_dra_perf2_LDADD) $(LIBS) pario/dra/perf3.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/perf3$(EXEEXT): $(pario_dra_perf3_OBJECTS) $(pario_dra_perf3_DEPENDENCIES) $(EXTRA_pario_dra_perf3_DEPENDENCIES) pario/dra/$(am__dirstamp) @rm -f pario/dra/perf3$(EXEEXT) $(AM_V_F77LD)$(pario_dra_perf3_LINK) $(pario_dra_perf3_OBJECTS) $(pario_dra_perf3_LDADD) $(LIBS) pario/dra/perfn.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/perfn$(EXEEXT): $(pario_dra_perfn_OBJECTS) $(pario_dra_perfn_DEPENDENCIES) $(EXTRA_pario_dra_perfn_DEPENDENCIES) pario/dra/$(am__dirstamp) @rm -f pario/dra/perfn$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(pario_dra_perfn_OBJECTS) $(pario_dra_perfn_LDADD) $(LIBS) pario/dra/rate.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/rate$(EXEEXT): $(pario_dra_rate_OBJECTS) $(pario_dra_rate_DEPENDENCIES) $(EXTRA_pario_dra_rate_DEPENDENCIES) pario/dra/$(am__dirstamp) @rm -f pario/dra/rate$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(pario_dra_rate_OBJECTS) $(pario_dra_rate_LDADD) $(LIBS) pario/dra/test.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/test$(EXEEXT): $(pario_dra_test_OBJECTS) $(pario_dra_test_DEPENDENCIES) $(EXTRA_pario_dra_test_DEPENDENCIES) pario/dra/$(am__dirstamp) @rm -f pario/dra/test$(EXEEXT) $(AM_V_F77LD)$(pario_dra_test_LINK) $(pario_dra_test_OBJECTS) $(pario_dra_test_LDADD) $(LIBS) pario/dra/test_mxm.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/test_mxm$(EXEEXT): $(pario_dra_test_mxm_OBJECTS) $(pario_dra_test_mxm_DEPENDENCIES) $(EXTRA_pario_dra_test_mxm_DEPENDENCIES) pario/dra/$(am__dirstamp) @rm -f pario/dra/test_mxm$(EXEEXT) $(AM_V_F77LD)$(pario_dra_test_mxm_LINK) $(pario_dra_test_mxm_OBJECTS) $(pario_dra_test_mxm_LDADD) $(LIBS) pario/dra/time_mxm.$(OBJEXT): pario/dra/$(am__dirstamp) \ pario/dra/$(DEPDIR)/$(am__dirstamp) pario/dra/time_mxm$(EXEEXT): $(pario_dra_time_mxm_OBJECTS) $(pario_dra_time_mxm_DEPENDENCIES) $(EXTRA_pario_dra_time_mxm_DEPENDENCIES) pario/dra/$(am__dirstamp) @rm -f pario/dra/time_mxm$(EXEEXT) $(AM_V_F77LD)$(pario_dra_time_mxm_LINK) $(pario_dra_time_mxm_OBJECTS) $(pario_dra_time_mxm_LDADD) $(LIBS) pario/eaf/test.$(OBJEXT): pario/eaf/$(am__dirstamp) \ pario/eaf/$(DEPDIR)/$(am__dirstamp) pario/eaf/test$(EXEEXT): $(pario_eaf_test_OBJECTS) $(pario_eaf_test_DEPENDENCIES) $(EXTRA_pario_eaf_test_DEPENDENCIES) pario/eaf/$(am__dirstamp) @rm -f pario/eaf/test$(EXEEXT) $(AM_V_F77LD)$(pario_eaf_test_LINK) $(pario_eaf_test_OBJECTS) $(pario_eaf_test_LDADD) $(LIBS) pario/sf/test.$(OBJEXT): pario/sf/$(am__dirstamp) \ pario/sf/$(DEPDIR)/$(am__dirstamp) pario/sf/test$(EXEEXT): $(pario_sf_test_OBJECTS) $(pario_sf_test_DEPENDENCIES) $(EXTRA_pario_sf_test_DEPENDENCIES) pario/sf/$(am__dirstamp) @rm -f pario/sf/test$(EXEEXT) $(AM_V_F77LD)$(pario_sf_test_LINK) $(pario_sf_test_OBJECTS) $(pario_sf_test_LDADD) $(LIBS) tcgmsg/tests/$(am__dirstamp): @$(MKDIR_P) tcgmsg/tests @: > tcgmsg/tests/$(am__dirstamp) tcgmsg/tests/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) tcgmsg/tests/$(DEPDIR) @: > tcgmsg/tests/$(DEPDIR)/$(am__dirstamp) tcgmsg/tests/test.$(OBJEXT): tcgmsg/tests/$(am__dirstamp) \ tcgmsg/tests/$(DEPDIR)/$(am__dirstamp) tcgmsg/tests/test$(EXEEXT): $(tcgmsg_tests_test_OBJECTS) $(tcgmsg_tests_test_DEPENDENCIES) $(EXTRA_tcgmsg_tests_test_DEPENDENCIES) tcgmsg/tests/$(am__dirstamp) @rm -f tcgmsg/tests/test$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(tcgmsg_tests_test_OBJECTS) $(tcgmsg_tests_test_LDADD) $(LIBS) tcgmsg/tests/test_asyn.$(OBJEXT): tcgmsg/tests/$(am__dirstamp) \ tcgmsg/tests/$(DEPDIR)/$(am__dirstamp) tcgmsg/tests/test_asyn$(EXEEXT): $(tcgmsg_tests_test_asyn_OBJECTS) $(tcgmsg_tests_test_asyn_DEPENDENCIES) $(EXTRA_tcgmsg_tests_test_asyn_DEPENDENCIES) tcgmsg/tests/$(am__dirstamp) @rm -f tcgmsg/tests/test_asyn$(EXEEXT) $(AM_V_F77LD)$(F77LINK) $(tcgmsg_tests_test_asyn_OBJECTS) $(tcgmsg_tests_test_asyn_LDADD) $(LIBS) tcgmsg/tests/testf.$(OBJEXT): tcgmsg/tests/$(am__dirstamp) \ tcgmsg/tests/$(DEPDIR)/$(am__dirstamp) tcgmsg/tests/testf$(EXEEXT): $(tcgmsg_tests_testf_OBJECTS) $(tcgmsg_tests_testf_DEPENDENCIES) $(EXTRA_tcgmsg_tests_testf_DEPENDENCIES) tcgmsg/tests/$(am__dirstamp) @rm -f tcgmsg/tests/testf$(EXEEXT) $(AM_V_F77LD)$(tcgmsg_tests_testf_LINK) $(tcgmsg_tests_testf_OBJECTS) $(tcgmsg_tests_testf_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f LinAlg/lapack+blas/cgemm.$(OBJEXT) -rm -f LinAlg/lapack+blas/cgemm.lo -rm -f LinAlg/lapack+blas/dblas.$(OBJEXT) -rm -f LinAlg/lapack+blas/dblas.lo -rm -f LinAlg/lapack+blas/dgetf2.$(OBJEXT) -rm -f LinAlg/lapack+blas/dgetf2.lo -rm -f LinAlg/lapack+blas/dgetrf.$(OBJEXT) -rm -f LinAlg/lapack+blas/dgetrf.lo -rm -f LinAlg/lapack+blas/dgetrs.$(OBJEXT) -rm -f LinAlg/lapack+blas/dgetrs.lo -rm -f LinAlg/lapack+blas/dlacpy.$(OBJEXT) -rm -f LinAlg/lapack+blas/dlacpy.lo -rm -f LinAlg/lapack+blas/dlaset.$(OBJEXT) -rm -f LinAlg/lapack+blas/dlaset.lo -rm -f LinAlg/lapack+blas/dlaswp.$(OBJEXT) -rm -f LinAlg/lapack+blas/dlaswp.lo -rm -f LinAlg/lapack+blas/ilaenv.$(OBJEXT) -rm -f LinAlg/lapack+blas/ilaenv.lo -rm -f LinAlg/lapack+blas/lsame.$(OBJEXT) -rm -f LinAlg/lapack+blas/lsame.lo -rm -f LinAlg/lapack+blas/sgemm.$(OBJEXT) -rm -f LinAlg/lapack+blas/sgemm.lo -rm -f LinAlg/lapack+blas/xerbla.$(OBJEXT) -rm -f LinAlg/lapack+blas/xerbla.lo -rm -f LinAlg/lapack+blas/xgemm.$(OBJEXT) -rm -f LinAlg/lapack+blas/xgemm.lo -rm -f LinAlg/lapack+blas/zaxpy.$(OBJEXT) -rm -f LinAlg/lapack+blas/zaxpy.lo -rm -f LinAlg/lapack+blas/zgemm.$(OBJEXT) -rm -f LinAlg/lapack+blas/zgemm.lo -rm -f compat/random.$(OBJEXT) -rm -f compat/random.lo -rm -f ga++/src/GAServices.$(OBJEXT) -rm -f ga++/src/GAServices.lo -rm -f ga++/src/GlobalArray.$(OBJEXT) -rm -f ga++/src/GlobalArray.lo -rm -f ga++/src/PGroup.$(OBJEXT) -rm -f ga++/src/PGroup.lo -rm -f ga++/src/init_term.$(OBJEXT) -rm -f ga++/src/init_term.lo -rm -f ga++/src/overload.$(OBJEXT) -rm -f ga++/src/overload.lo -rm -f ga++/src/services.$(OBJEXT) -rm -f ga++/src/services.lo -rm -f ga++/testing/elempatch.$(OBJEXT) -rm -f ga++/testing/mtest.$(OBJEXT) -rm -f ga++/testing/ntestc.$(OBJEXT) -rm -f ga++/testing/testc.$(OBJEXT) -rm -f ga++/testing/testmult.$(OBJEXT) -rm -f ga++/testing/util.$(OBJEXT) -rm -f gaf2c/drand.$(OBJEXT) -rm -f gaf2c/drand.lo -rm -f gaf2c/farg.$(OBJEXT) -rm -f gaf2c/farg.lo -rm -f gaf2c/gaf2c.$(OBJEXT) -rm -f gaf2c/gaf2c.lo -rm -f gaf2c/testarg.$(OBJEXT) -rm -f gaf2c/testargf.$(OBJEXT) -rm -f global/X/global_X_xregion-xregion_colormap.$(OBJEXT) -rm -f global/X/global_X_xregion-xregion_dialog.$(OBJEXT) -rm -f global/X/global_X_xregion-xregion_display.$(OBJEXT) -rm -f global/X/global_X_xregion-xregion_fileio.$(OBJEXT) -rm -f global/X/global_X_xregion-xregion_main.$(OBJEXT) -rm -f global/X/global_X_xregion-xregion_overview.$(OBJEXT) -rm -f global/X/global_X_xregion-xregion_pixregion.$(OBJEXT) -rm -f global/X/global_X_xregion-xregion_scrollbars.$(OBJEXT) -rm -f global/X/global_X_xregion-xregion_util.$(OBJEXT) -rm -f global/X/global_X_xregion-xregion_view.$(OBJEXT) -rm -f global/X/global_X_xregion-xregion_xcmap.$(OBJEXT) -rm -f global/examples/boltzmann/global_examples_boltzmann_boltz-boltzmann.$(OBJEXT) -rm -f global/examples/boltzmann/global_examples_boltzmann_boltz-equil.$(OBJEXT) -rm -f global/examples/boltzmann/global_examples_boltzmann_boltz-get_patch.$(OBJEXT) -rm -f global/examples/boltzmann/global_examples_boltzmann_boltz-initpar.$(OBJEXT) -rm -f global/examples/boltzmann/global_examples_boltzmann_boltz-main.$(OBJEXT) -rm -f global/examples/boltzmann/global_examples_boltzmann_boltz-printdat.$(OBJEXT) -rm -f global/examples/boltzmann/global_examples_boltzmann_boltz-properties.$(OBJEXT) -rm -f global/examples/boltzmann/global_examples_boltzmann_boltz-setup.$(OBJEXT) -rm -f global/examples/boltzmann/global_examples_boltzmann_boltz-timestep.$(OBJEXT) -rm -f global/examples/boltzmann/global_examples_boltzmann_boltz-vorticity.$(OBJEXT) -rm -f global/examples/conjugate_gradient/computeloops.$(OBJEXT) -rm -f global/examples/conjugate_gradient/ga_cg.$(OBJEXT) -rm -f global/examples/conjugate_gradient/matvecmul.$(OBJEXT) -rm -f global/examples/conjugate_gradient/read_input.$(OBJEXT) -rm -f global/examples/lennard-jones/lennard.$(OBJEXT) -rm -f global/examples/md_cluster/cell_list.$(OBJEXT) -rm -f global/examples/md_cluster/cl_sim.$(OBJEXT) -rm -f global/examples/md_cluster/cluster.$(OBJEXT) -rm -f global/examples/md_cluster/estats.$(OBJEXT) -rm -f global/examples/md_cluster/factor.$(OBJEXT) -rm -f global/examples/md_cluster/force.$(OBJEXT) -rm -f global/examples/md_cluster/gather.$(OBJEXT) -rm -f global/examples/md_cluster/grp_sim.$(OBJEXT) -rm -f global/examples/md_cluster/hash.$(OBJEXT) -rm -f global/examples/md_cluster/heapsort.$(OBJEXT) -rm -f global/examples/md_cluster/kin.$(OBJEXT) -rm -f global/examples/md_cluster/mdinit.$(OBJEXT) -rm -f global/examples/md_cluster/mdout.$(OBJEXT) -rm -f global/examples/md_cluster/mdstep.$(OBJEXT) -rm -f global/examples/md_cluster/newcfg.$(OBJEXT) -rm -f global/examples/md_cluster/nextc.$(OBJEXT) -rm -f global/examples/md_cluster/pairs.$(OBJEXT) -rm -f global/examples/md_cluster/ran3.$(OBJEXT) -rm -f global/examples/md_cluster/rdpar.$(OBJEXT) -rm -f global/examples/md_cluster/scatter.$(OBJEXT) -rm -f global/examples/md_cluster/shuffle.$(OBJEXT) -rm -f global/examples/md_cluster/sort.$(OBJEXT) -rm -f global/examples/md_cluster/tstats.$(OBJEXT) -rm -f global/examples/md_cluster/update.$(OBJEXT) -rm -f global/examples/scf/input.$(OBJEXT) -rm -f global/examples/scf/integ.$(OBJEXT) -rm -f global/examples/scf/output.$(OBJEXT) -rm -f global/examples/scf/scf.$(OBJEXT) -rm -f global/examples/scf/timer.$(OBJEXT) -rm -f global/src/DP.$(OBJEXT) -rm -f global/src/DP.lo -rm -f global/src/base.$(OBJEXT) -rm -f global/src/base.lo -rm -f global/src/capi.$(OBJEXT) -rm -f global/src/capi.lo -rm -f global/src/collect.$(OBJEXT) -rm -f global/src/collect.lo -rm -f global/src/complex.$(OBJEXT) -rm -f global/src/complex.lo -rm -f global/src/datatypes.$(OBJEXT) -rm -f global/src/datatypes.lo -rm -f global/src/decomp.$(OBJEXT) -rm -f global/src/decomp.lo -rm -f global/src/elem_alg.$(OBJEXT) -rm -f global/src/elem_alg.lo -rm -f global/src/fapi.$(OBJEXT) -rm -f global/src/fapi.lo -rm -f global/src/ga_ckpt.$(OBJEXT) -rm -f global/src/ga_ckpt.lo -rm -f global/src/ga_dgemmf.$(OBJEXT) -rm -f global/src/ga_dgemmf.lo -rm -f global/src/ga_diag.$(OBJEXT) -rm -f global/src/ga_diag.lo -rm -f global/src/ga_diag_seq.$(OBJEXT) -rm -f global/src/ga_diag_seq.lo -rm -f global/src/ga_diag_seqc.$(OBJEXT) -rm -f global/src/ga_diag_seqc.lo -rm -f global/src/ga_malloc.$(OBJEXT) -rm -f global/src/ga_malloc.lo -rm -f global/src/ga_solve_seq.$(OBJEXT) -rm -f global/src/ga_solve_seq.lo -rm -f global/src/ga_symmetr.$(OBJEXT) -rm -f global/src/ga_symmetr.lo -rm -f global/src/ga_trace.$(OBJEXT) -rm -f global/src/ga_trace.lo -rm -f global/src/ghosts.$(OBJEXT) -rm -f global/src/ghosts.lo -rm -f global/src/global.nalg.$(OBJEXT) -rm -f global/src/global.nalg.lo -rm -f global/src/global.npatch.$(OBJEXT) -rm -f global/src/global.npatch.lo -rm -f global/src/global.periodic.$(OBJEXT) -rm -f global/src/global.periodic.lo -rm -f global/src/global.util.$(OBJEXT) -rm -f global/src/global.util.lo -rm -f global/src/hsort.scat.$(OBJEXT) -rm -f global/src/hsort.scat.lo -rm -f global/src/matmul.$(OBJEXT) -rm -f global/src/matmul.lo -rm -f global/src/matrix.$(OBJEXT) -rm -f global/src/matrix.lo -rm -f global/src/nbutil.$(OBJEXT) -rm -f global/src/nbutil.lo -rm -f global/src/onesided.$(OBJEXT) -rm -f global/src/onesided.lo -rm -f global/src/peigstubs.$(OBJEXT) -rm -f global/src/peigstubs.lo -rm -f global/src/rsg.$(OBJEXT) -rm -f global/src/rsg.lo -rm -f global/src/scalapack.$(OBJEXT) -rm -f global/src/scalapack.lo -rm -f global/src/sclstubs.$(OBJEXT) -rm -f global/src/sclstubs.lo -rm -f global/src/select.$(OBJEXT) -rm -f global/src/select.lo -rm -f global/src/sparse.$(OBJEXT) -rm -f global/src/sparse.lo -rm -f global/testing/big.$(OBJEXT) -rm -f global/testing/bin.$(OBJEXT) -rm -f global/testing/blktest.$(OBJEXT) -rm -f global/testing/d2test.$(OBJEXT) -rm -f global/testing/elempatch.$(OBJEXT) -rm -f global/testing/ffflush.$(OBJEXT) -rm -f global/testing/field-test.$(OBJEXT) -rm -f global/testing/g2test.$(OBJEXT) -rm -f global/testing/g3test.$(OBJEXT) -rm -f global/testing/ga-mpi.$(OBJEXT) -rm -f global/testing/ga_lu.$(OBJEXT) -rm -f global/testing/ga_shift.$(OBJEXT) -rm -f global/testing/gatscat.$(OBJEXT) -rm -f global/testing/getmem.$(OBJEXT) -rm -f global/testing/ghosts.$(OBJEXT) -rm -f global/testing/global_testing_test_mirrored-ffflush.$(OBJEXT) -rm -f global/testing/global_testing_test_mirrored-test.$(OBJEXT) -rm -f global/testing/global_testing_test_mirrored-testblas.$(OBJEXT) -rm -f global/testing/global_testing_test_mirrored-util.$(OBJEXT) -rm -f global/testing/ipc.clean.$(OBJEXT) -rm -f global/testing/jacobi.$(OBJEXT) -rm -f global/testing/lock.$(OBJEXT) -rm -f global/testing/mir_perf2.$(OBJEXT) -rm -f global/testing/mmatrix.$(OBJEXT) -rm -f global/testing/mtest.$(OBJEXT) -rm -f global/testing/mulmatpatch.$(OBJEXT) -rm -f global/testing/mulmatpatchc.$(OBJEXT) -rm -f global/testing/nb2test.$(OBJEXT) -rm -f global/testing/ndim.$(OBJEXT) -rm -f global/testing/nga-onesided.$(OBJEXT) -rm -f global/testing/nga-patch.$(OBJEXT) -rm -f global/testing/nga-periodic.$(OBJEXT) -rm -f global/testing/nga-scatter.$(OBJEXT) -rm -f global/testing/nga-util.$(OBJEXT) -rm -f global/testing/ngatest.$(OBJEXT) -rm -f global/testing/ntestc.$(OBJEXT) -rm -f global/testing/ntestfc.$(OBJEXT) -rm -f global/testing/packc.$(OBJEXT) -rm -f global/testing/patch.$(OBJEXT) -rm -f global/testing/patch2.$(OBJEXT) -rm -f global/testing/patch_enumc.$(OBJEXT) -rm -f global/testing/patch_enumf.$(OBJEXT) -rm -f global/testing/perf.$(OBJEXT) -rm -f global/testing/perf2.$(OBJEXT) -rm -f global/testing/perfmod.$(OBJEXT) -rm -f global/testing/perform.$(OBJEXT) -rm -f global/testing/pg2test.$(OBJEXT) -rm -f global/testing/pg2testmatmult.$(OBJEXT) -rm -f global/testing/pgtest.$(OBJEXT) -rm -f global/testing/pgtestmatmult.$(OBJEXT) -rm -f global/testing/print.$(OBJEXT) -rm -f global/testing/random.$(OBJEXT) -rm -f global/testing/scan.$(OBJEXT) -rm -f global/testing/scan_addc.$(OBJEXT) -rm -f global/testing/scan_copyc.$(OBJEXT) -rm -f global/testing/simple_groups.$(OBJEXT) -rm -f global/testing/simple_groups_comm.$(OBJEXT) -rm -f global/testing/simple_groups_commc.$(OBJEXT) -rm -f global/testing/sparse.$(OBJEXT) -rm -f global/testing/sprsmatmult.$(OBJEXT) -rm -f global/testing/stride.$(OBJEXT) -rm -f global/testing/test.$(OBJEXT) -rm -f global/testing/testblas.$(OBJEXT) -rm -f global/testing/testc.$(OBJEXT) -rm -f global/testing/testeig.$(OBJEXT) -rm -f global/testing/testmatmult.$(OBJEXT) -rm -f global/testing/testmatmultc.$(OBJEXT) -rm -f global/testing/testmult.$(OBJEXT) -rm -f global/testing/testmultrect.$(OBJEXT) -rm -f global/testing/testsolve.$(OBJEXT) -rm -f global/testing/testspd.$(OBJEXT) -rm -f global/testing/types-test.$(OBJEXT) -rm -f global/testing/unit-tests/ga_abs_value.$(OBJEXT) -rm -f global/testing/unit-tests/ga_acc.$(OBJEXT) -rm -f global/testing/unit-tests/ga_add.$(OBJEXT) -rm -f global/testing/unit-tests/ga_add_constant.$(OBJEXT) -rm -f global/testing/unit-tests/ga_add_constantpatch.$(OBJEXT) -rm -f global/testing/unit-tests/ga_add_diagonal.$(OBJEXT) -rm -f global/testing/unit-tests/ga_add_patch.$(OBJEXT) -rm -f global/testing/unit-tests/ga_copy.$(OBJEXT) -rm -f global/testing/unit-tests/ga_copy2.$(OBJEXT) -rm -f global/testing/unit-tests/ga_copy3.$(OBJEXT) -rm -f global/testing/unit-tests/ga_copypatch.$(OBJEXT) -rm -f global/testing/unit-tests/ga_copypatch2.$(OBJEXT) -rm -f global/testing/unit-tests/ga_create.$(OBJEXT) -rm -f global/testing/unit-tests/ga_create1.$(OBJEXT) -rm -f global/testing/unit-tests/ga_create2.$(OBJEXT) -rm -f global/testing/unit-tests/ga_create3.$(OBJEXT) -rm -f global/testing/unit-tests/ga_create_handle.$(OBJEXT) -rm -f global/testing/unit-tests/ga_create_irreg.$(OBJEXT) -rm -f global/testing/unit-tests/ga_create_irreg2.$(OBJEXT) -rm -f global/testing/unit-tests/ga_create_irreg3.$(OBJEXT) -rm -f global/testing/unit-tests/ga_destroy.$(OBJEXT) -rm -f global/testing/unit-tests/ga_dgop.$(OBJEXT) -rm -f global/testing/unit-tests/ga_dot.$(OBJEXT) -rm -f global/testing/unit-tests/ga_duplicate.$(OBJEXT) -rm -f global/testing/unit-tests/ga_elem_divide.$(OBJEXT) -rm -f global/testing/unit-tests/ga_elem_dividepatch.$(OBJEXT) -rm -f global/testing/unit-tests/ga_elem_maximum.$(OBJEXT) -rm -f global/testing/unit-tests/ga_elem_maximumpatch.$(OBJEXT) -rm -f global/testing/unit-tests/ga_elem_minimum.$(OBJEXT) -rm -f global/testing/unit-tests/ga_elem_minimumpatch.$(OBJEXT) -rm -f global/testing/unit-tests/ga_elem_multiply.$(OBJEXT) -rm -f global/testing/unit-tests/ga_elem_multiplypatch.$(OBJEXT) -rm -f global/testing/unit-tests/ga_fill.$(OBJEXT) -rm -f global/testing/unit-tests/ga_fillpatch.$(OBJEXT) -rm -f global/testing/unit-tests/ga_fillpatch1.$(OBJEXT) -rm -f global/testing/unit-tests/ga_gather.$(OBJEXT) -rm -f global/testing/unit-tests/ga_gather2.$(OBJEXT) -rm -f global/testing/unit-tests/ga_gather3.$(OBJEXT) -rm -f global/testing/unit-tests/ga_get.$(OBJEXT) -rm -f global/testing/unit-tests/ga_get_blockinfo.$(OBJEXT) -rm -f global/testing/unit-tests/ga_get_diagonal.$(OBJEXT) -rm -f global/testing/unit-tests/ga_igop.$(OBJEXT) -rm -f global/testing/unit-tests/ga_igop2.$(OBJEXT) -rm -f global/testing/unit-tests/ga_inquire.$(OBJEXT) -rm -f global/testing/unit-tests/ga_intialize.$(OBJEXT) -rm -f global/testing/unit-tests/ga_lgop.$(OBJEXT) -rm -f global/testing/unit-tests/ga_median.$(OBJEXT) -rm -f global/testing/unit-tests/ga_ndim.$(OBJEXT) -rm -f global/testing/unit-tests/ga_ndim2.$(OBJEXT) -rm -f global/testing/unit-tests/ga_nnodes.$(OBJEXT) -rm -f global/testing/unit-tests/ga_nodeid.$(OBJEXT) -rm -f global/testing/unit-tests/ga_pgroup_create.$(OBJEXT) -rm -f global/testing/unit-tests/ga_pgroup_create2.$(OBJEXT) -rm -f global/testing/unit-tests/ga_pgroup_create3.$(OBJEXT) -rm -f global/testing/unit-tests/ga_pgroup_create4.$(OBJEXT) -rm -f global/testing/unit-tests/ga_pgroup_create5.$(OBJEXT) -rm -f global/testing/unit-tests/ga_pgroup_destroy.$(OBJEXT) -rm -f global/testing/unit-tests/ga_pgroup_destroy2.$(OBJEXT) -rm -f global/testing/unit-tests/ga_pgroup_nnodes_nodeid.$(OBJEXT) -rm -f global/testing/unit-tests/ga_pgroup_setdefault.$(OBJEXT) -rm -f global/testing/unit-tests/ga_put.$(OBJEXT) -rm -f global/testing/unit-tests/ga_put2.$(OBJEXT) -rm -f global/testing/unit-tests/ga_scale.$(OBJEXT) -rm -f global/testing/unit-tests/ga_scale2.$(OBJEXT) -rm -f global/testing/unit-tests/ga_scale_cols.$(OBJEXT) -rm -f global/testing/unit-tests/ga_scale_patch.$(OBJEXT) -rm -f global/testing/unit-tests/ga_scale_rows.$(OBJEXT) -rm -f global/testing/unit-tests/ga_scatter.$(OBJEXT) -rm -f global/testing/unit-tests/ga_set_data.$(OBJEXT) -rm -f global/testing/unit-tests/ga_set_diagonal.$(OBJEXT) -rm -f global/testing/unit-tests/ga_set_restricted.$(OBJEXT) -rm -f global/testing/unit-tests/ga_solve.$(OBJEXT) -rm -f global/testing/unit-tests/ga_sync.$(OBJEXT) -rm -f global/testing/unit-tests/ga_transpose.$(OBJEXT) -rm -f global/testing/unit-tests/ga_transpose2.$(OBJEXT) -rm -f global/testing/unit-tests/ga_transpose3.$(OBJEXT) -rm -f global/testing/unit-tests/ga_zero.$(OBJEXT) -rm -f global/testing/unit-tests/ga_zerodiagonal.$(OBJEXT) -rm -f global/testing/unit-tests/ga_zeropatch.$(OBJEXT) -rm -f global/testing/unit-tests/ga_zeropatch2.$(OBJEXT) -rm -f global/testing/unit-tests/mock.$(OBJEXT) -rm -f global/testing/unpackc.$(OBJEXT) -rm -f global/testing/util.$(OBJEXT) -rm -f global/trace/adjust.$(OBJEXT) -rm -f global/trace/collisions.$(OBJEXT) -rm -f gparrays/src/gpbase.$(OBJEXT) -rm -f gparrays/src/gpbase.lo -rm -f gparrays/src/gpcapi.$(OBJEXT) -rm -f gparrays/src/gpcapi.lo -rm -f gparrays/src/gpfapi.$(OBJEXT) -rm -f gparrays/src/gpfapi.lo -rm -f gparrays/src/gponesided.$(OBJEXT) -rm -f gparrays/src/gponesided.lo -rm -f gparrays/testing/test.$(OBJEXT) -rm -f gparrays/testing/testc.$(OBJEXT) -rm -f gparrays/testing/transpose.$(OBJEXT) -rm -f ma/error.$(OBJEXT) -rm -f ma/error.lo -rm -f ma/f2c.$(OBJEXT) -rm -f ma/f2c.lo -rm -f ma/ma.$(OBJEXT) -rm -f ma/ma.lo -rm -f ma/maf.$(OBJEXT) -rm -f ma/maf.lo -rm -f ma/string-util.$(OBJEXT) -rm -f ma/string-util.lo -rm -f ma/table.$(OBJEXT) -rm -f ma/table.lo -rm -f ma/test-coalesce.$(OBJEXT) -rm -f ma/test-inquire.$(OBJEXT) -rm -f ma/testc.$(OBJEXT) -rm -f ma/testf.$(OBJEXT) -rm -f pario/dra/big.$(OBJEXT) -rm -f pario/dra/bign.$(OBJEXT) -rm -f pario/dra/buffers.$(OBJEXT) -rm -f pario/dra/buffers.lo -rm -f pario/dra/capi.$(OBJEXT) -rm -f pario/dra/capi.lo -rm -f pario/dra/dbg_read.$(OBJEXT) -rm -f pario/dra/dbg_write.$(OBJEXT) -rm -f pario/dra/disk.arrays.$(OBJEXT) -rm -f pario/dra/disk.arrays.lo -rm -f pario/dra/disk.param.$(OBJEXT) -rm -f pario/dra/disk.param.lo -rm -f pario/dra/dra2arviz.$(OBJEXT) -rm -f pario/dra/dra_mxm.$(OBJEXT) -rm -f pario/dra/env.$(OBJEXT) -rm -f pario/dra/env.lo -rm -f pario/dra/ffflush.$(OBJEXT) -rm -f pario/dra/fortran.$(OBJEXT) -rm -f pario/dra/fortran.lo -rm -f pario/dra/ntest.$(OBJEXT) -rm -f pario/dra/ntestc.$(OBJEXT) -rm -f pario/dra/patch.util.$(OBJEXT) -rm -f pario/dra/patch.util.lo -rm -f pario/dra/perf.$(OBJEXT) -rm -f pario/dra/perf2.$(OBJEXT) -rm -f pario/dra/perf3.$(OBJEXT) -rm -f pario/dra/perfn.$(OBJEXT) -rm -f pario/dra/rate.$(OBJEXT) -rm -f pario/dra/test.$(OBJEXT) -rm -f pario/dra/test_mxm.$(OBJEXT) -rm -f pario/dra/time_mxm.$(OBJEXT) -rm -f pario/dra/util.$(OBJEXT) -rm -f pario/eaf/eaf.$(OBJEXT) -rm -f pario/eaf/eaf.lo -rm -f pario/eaf/eaf_f2c.$(OBJEXT) -rm -f pario/eaf/eaf_f2c.lo -rm -f pario/eaf/test.$(OBJEXT) -rm -f pario/elio/elio.$(OBJEXT) -rm -f pario/elio/elio.lo -rm -f pario/elio/stat.$(OBJEXT) -rm -f pario/elio/stat.lo -rm -f pario/sf/sf_capi.$(OBJEXT) -rm -f pario/sf/sf_capi.lo -rm -f pario/sf/sf_fortran.$(OBJEXT) -rm -f pario/sf/sf_fortran.lo -rm -f pario/sf/shared.files.$(OBJEXT) -rm -f pario/sf/shared.files.lo -rm -f pario/sf/test.$(OBJEXT) -rm -f tcgmsg/capi.$(OBJEXT) -rm -f tcgmsg/capi.lo -rm -f tcgmsg/fapi.$(OBJEXT) -rm -f tcgmsg/fapi.lo -rm -f tcgmsg/tcgmsg-mpi/checkbyte.$(OBJEXT) -rm -f tcgmsg/tcgmsg-mpi/checkbyte.lo -rm -f tcgmsg/tcgmsg-mpi/clustercheck.$(OBJEXT) -rm -f tcgmsg/tcgmsg-mpi/clustercheck.lo -rm -f tcgmsg/tcgmsg-mpi/collect.$(OBJEXT) -rm -f tcgmsg/tcgmsg-mpi/collect.lo -rm -f tcgmsg/tcgmsg-mpi/drand48.$(OBJEXT) -rm -f tcgmsg/tcgmsg-mpi/drand48.lo -rm -f tcgmsg/tcgmsg-mpi/evlog.$(OBJEXT) -rm -f tcgmsg/tcgmsg-mpi/evlog.lo -rm -f tcgmsg/tcgmsg-mpi/evon.$(OBJEXT) -rm -f tcgmsg/tcgmsg-mpi/evon.lo -rm -f tcgmsg/tcgmsg-mpi/llog.$(OBJEXT) -rm -f tcgmsg/tcgmsg-mpi/llog.lo -rm -f tcgmsg/tcgmsg-mpi/misc.$(OBJEXT) -rm -f tcgmsg/tcgmsg-mpi/misc.lo -rm -f tcgmsg/tcgmsg-mpi/niceftn.$(OBJEXT) -rm -f tcgmsg/tcgmsg-mpi/niceftn.lo -rm -f tcgmsg/tcgmsg-mpi/nxtval-armci.$(OBJEXT) -rm -f tcgmsg/tcgmsg-mpi/nxtval-armci.lo -rm -f tcgmsg/tcgmsg-mpi/p2p.$(OBJEXT) -rm -f tcgmsg/tcgmsg-mpi/p2p.lo -rm -f tcgmsg/tcgmsg-mpi/pbeginf.$(OBJEXT) -rm -f tcgmsg/tcgmsg-mpi/pbeginf.lo -rm -f tcgmsg/tcgmsg-mpi/pfilecopy.$(OBJEXT) -rm -f tcgmsg/tcgmsg-mpi/pfilecopy.lo -rm -f tcgmsg/tcgmsg-mpi/sizeof.$(OBJEXT) -rm -f tcgmsg/tcgmsg-mpi/sizeof.lo -rm -f tcgmsg/tests/test.$(OBJEXT) -rm -f tcgmsg/tests/test_asyn.$(OBJEXT) -rm -f tcgmsg/tests/testf.$(OBJEXT) -rm -f tools/ga-wapi.$(OBJEXT) -rm -f tools/ga-wapi.lo -rm -f tools/gp-wapi.$(OBJEXT) -rm -f tools/gp-wapi.lo distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@LinAlg/lapack+blas/$(DEPDIR)/xgemm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@compat/$(DEPDIR)/random.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ga++/src/$(DEPDIR)/GAServices.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ga++/src/$(DEPDIR)/GlobalArray.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ga++/src/$(DEPDIR)/PGroup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ga++/src/$(DEPDIR)/init_term.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ga++/src/$(DEPDIR)/overload.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ga++/src/$(DEPDIR)/services.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ga++/testing/$(DEPDIR)/elempatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ga++/testing/$(DEPDIR)/mtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ga++/testing/$(DEPDIR)/ntestc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ga++/testing/$(DEPDIR)/testc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ga++/testing/$(DEPDIR)/testmult.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ga++/testing/$(DEPDIR)/util.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gaf2c/$(DEPDIR)/drand.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gaf2c/$(DEPDIR)/gaf2c.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gaf2c/$(DEPDIR)/testarg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/X/$(DEPDIR)/global_X_xregion-xregion_colormap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/X/$(DEPDIR)/global_X_xregion-xregion_dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/X/$(DEPDIR)/global_X_xregion-xregion_display.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/X/$(DEPDIR)/global_X_xregion-xregion_fileio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/X/$(DEPDIR)/global_X_xregion-xregion_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/X/$(DEPDIR)/global_X_xregion-xregion_overview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/X/$(DEPDIR)/global_X_xregion-xregion_pixregion.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/X/$(DEPDIR)/global_X_xregion-xregion_scrollbars.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/X/$(DEPDIR)/global_X_xregion-xregion_util.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/X/$(DEPDIR)/global_X_xregion-xregion_view.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/X/$(DEPDIR)/global_X_xregion-xregion_xcmap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/examples/conjugate_gradient/$(DEPDIR)/ga_cg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/examples/conjugate_gradient/$(DEPDIR)/matvecmul.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/examples/conjugate_gradient/$(DEPDIR)/read_input.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/examples/lennard-jones/$(DEPDIR)/lennard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/DP.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/base.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/capi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/collect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/datatypes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/decomp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/elem_alg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/fapi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/ga_ckpt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/ga_diag_seqc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/ga_malloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/ga_solve_seq.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/ga_symmetr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/ga_trace.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/ghosts.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/global.nalg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/global.npatch.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/global.periodic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/global.util.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/hsort.scat.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/matmul.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/matrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/nbutil.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/onesided.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/peigstubs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/sclstubs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/select.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/src/$(DEPDIR)/sparse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/big.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/elempatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/ga-mpi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/ga_lu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/gatscat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/getmem.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/global_testing_test_mirrored-util.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/ipc.clean.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/lock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/mtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/mulmatpatchc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/ntestc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/ntestfc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/packc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/patch_enumc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/perf2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/print.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/scan_addc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/scan_copyc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/simple_groups_commc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/testc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/testmatmultc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/testmult.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/testmultrect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/unpackc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/$(DEPDIR)/util.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_abs_value.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_acc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_add.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_add_constant.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_add_constantpatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_add_diagonal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_add_patch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_copy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_copy2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_copy3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_copypatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_copypatch2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_create.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_create1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_create2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_create3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_create_handle.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_create_irreg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_create_irreg2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_create_irreg3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_destroy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_dgop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_dot.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_duplicate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_elem_divide.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_elem_dividepatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_elem_maximum.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_elem_maximumpatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_elem_minimum.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_elem_minimumpatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_elem_multiply.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_elem_multiplypatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_fill.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_fillpatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_fillpatch1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_gather.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_gather2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_gather3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_get.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_get_blockinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_get_diagonal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_igop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_igop2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_inquire.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_intialize.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_lgop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_median.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_ndim.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_ndim2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_nnodes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_nodeid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_pgroup_create.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_pgroup_create2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_pgroup_create3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_pgroup_create4.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_pgroup_create5.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_pgroup_destroy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_pgroup_destroy2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_pgroup_nnodes_nodeid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_pgroup_setdefault.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_put.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_put2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_scale.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_scale2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_scale_cols.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_scale_patch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_scale_rows.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_scatter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_set_data.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_set_diagonal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_set_restricted.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_solve.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_sync.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_transpose.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_transpose2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_transpose3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_zero.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_zerodiagonal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_zeropatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/ga_zeropatch2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/testing/unit-tests/$(DEPDIR)/mock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/trace/$(DEPDIR)/adjust.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@global/trace/$(DEPDIR)/collisions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gparrays/src/$(DEPDIR)/gpbase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gparrays/src/$(DEPDIR)/gpcapi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gparrays/src/$(DEPDIR)/gpfapi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gparrays/src/$(DEPDIR)/gponesided.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gparrays/testing/$(DEPDIR)/testc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gparrays/testing/$(DEPDIR)/transpose.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ma/$(DEPDIR)/error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ma/$(DEPDIR)/f2c.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ma/$(DEPDIR)/ma.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ma/$(DEPDIR)/string-util.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ma/$(DEPDIR)/table.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ma/$(DEPDIR)/test-coalesce.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ma/$(DEPDIR)/test-inquire.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@ma/$(DEPDIR)/testc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/dra/$(DEPDIR)/bign.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/dra/$(DEPDIR)/buffers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/dra/$(DEPDIR)/capi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/dra/$(DEPDIR)/dbg_read.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/dra/$(DEPDIR)/dbg_write.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/dra/$(DEPDIR)/disk.arrays.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/dra/$(DEPDIR)/disk.param.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/dra/$(DEPDIR)/dra2arviz.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/dra/$(DEPDIR)/env.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/dra/$(DEPDIR)/fortran.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/dra/$(DEPDIR)/ntestc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/dra/$(DEPDIR)/patch.util.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/dra/$(DEPDIR)/perfn.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/dra/$(DEPDIR)/rate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/dra/$(DEPDIR)/util.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/eaf/$(DEPDIR)/eaf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/eaf/$(DEPDIR)/eaf_f2c.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/elio/$(DEPDIR)/elio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/elio/$(DEPDIR)/stat.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/sf/$(DEPDIR)/sf_capi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/sf/$(DEPDIR)/sf_fortran.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pario/sf/$(DEPDIR)/shared.files.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/$(DEPDIR)/capi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/$(DEPDIR)/fapi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/tcgmsg-mpi/$(DEPDIR)/checkbyte.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/tcgmsg-mpi/$(DEPDIR)/clustercheck.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/tcgmsg-mpi/$(DEPDIR)/collect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/tcgmsg-mpi/$(DEPDIR)/drand48.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/tcgmsg-mpi/$(DEPDIR)/evlog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/tcgmsg-mpi/$(DEPDIR)/evon.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/tcgmsg-mpi/$(DEPDIR)/llog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/tcgmsg-mpi/$(DEPDIR)/misc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/tcgmsg-mpi/$(DEPDIR)/niceftn.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/tcgmsg-mpi/$(DEPDIR)/nxtval-armci.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/tcgmsg-mpi/$(DEPDIR)/p2p.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/tcgmsg-mpi/$(DEPDIR)/pbeginf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/tcgmsg-mpi/$(DEPDIR)/pfilecopy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/tcgmsg-mpi/$(DEPDIR)/sizeof.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/tests/$(DEPDIR)/test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tcgmsg/tests/$(DEPDIR)/test_asyn.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tools/$(DEPDIR)/ga-wapi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tools/$(DEPDIR)/gp-wapi.Plo@am__quote@ .F.o: $(AM_V_PPF77)$(PPF77COMPILE) -c -o $@ $< .F.obj: $(AM_V_PPF77)$(PPF77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .F.lo: $(AM_V_PPF77)$(LTPPF77COMPILE) -c -o $@ $< global/examples/boltzmann/global_examples_boltzmann_boltz-boltzmann.o: global/examples/boltzmann/boltzmann.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-boltzmann.o `test -f 'global/examples/boltzmann/boltzmann.F' || echo '$(srcdir)/'`global/examples/boltzmann/boltzmann.F global/examples/boltzmann/global_examples_boltzmann_boltz-boltzmann.obj: global/examples/boltzmann/boltzmann.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-boltzmann.obj `if test -f 'global/examples/boltzmann/boltzmann.F'; then $(CYGPATH_W) 'global/examples/boltzmann/boltzmann.F'; else $(CYGPATH_W) '$(srcdir)/global/examples/boltzmann/boltzmann.F'; fi` global/examples/boltzmann/global_examples_boltzmann_boltz-equil.o: global/examples/boltzmann/equil.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-equil.o `test -f 'global/examples/boltzmann/equil.F' || echo '$(srcdir)/'`global/examples/boltzmann/equil.F global/examples/boltzmann/global_examples_boltzmann_boltz-equil.obj: global/examples/boltzmann/equil.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-equil.obj `if test -f 'global/examples/boltzmann/equil.F'; then $(CYGPATH_W) 'global/examples/boltzmann/equil.F'; else $(CYGPATH_W) '$(srcdir)/global/examples/boltzmann/equil.F'; fi` global/examples/boltzmann/global_examples_boltzmann_boltz-get_patch.o: global/examples/boltzmann/get_patch.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-get_patch.o `test -f 'global/examples/boltzmann/get_patch.F' || echo '$(srcdir)/'`global/examples/boltzmann/get_patch.F global/examples/boltzmann/global_examples_boltzmann_boltz-get_patch.obj: global/examples/boltzmann/get_patch.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-get_patch.obj `if test -f 'global/examples/boltzmann/get_patch.F'; then $(CYGPATH_W) 'global/examples/boltzmann/get_patch.F'; else $(CYGPATH_W) '$(srcdir)/global/examples/boltzmann/get_patch.F'; fi` global/examples/boltzmann/global_examples_boltzmann_boltz-initpar.o: global/examples/boltzmann/initpar.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-initpar.o `test -f 'global/examples/boltzmann/initpar.F' || echo '$(srcdir)/'`global/examples/boltzmann/initpar.F global/examples/boltzmann/global_examples_boltzmann_boltz-initpar.obj: global/examples/boltzmann/initpar.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-initpar.obj `if test -f 'global/examples/boltzmann/initpar.F'; then $(CYGPATH_W) 'global/examples/boltzmann/initpar.F'; else $(CYGPATH_W) '$(srcdir)/global/examples/boltzmann/initpar.F'; fi` global/examples/boltzmann/global_examples_boltzmann_boltz-main.o: global/examples/boltzmann/main.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-main.o `test -f 'global/examples/boltzmann/main.F' || echo '$(srcdir)/'`global/examples/boltzmann/main.F global/examples/boltzmann/global_examples_boltzmann_boltz-main.obj: global/examples/boltzmann/main.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-main.obj `if test -f 'global/examples/boltzmann/main.F'; then $(CYGPATH_W) 'global/examples/boltzmann/main.F'; else $(CYGPATH_W) '$(srcdir)/global/examples/boltzmann/main.F'; fi` global/examples/boltzmann/global_examples_boltzmann_boltz-printdat.o: global/examples/boltzmann/printdat.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-printdat.o `test -f 'global/examples/boltzmann/printdat.F' || echo '$(srcdir)/'`global/examples/boltzmann/printdat.F global/examples/boltzmann/global_examples_boltzmann_boltz-printdat.obj: global/examples/boltzmann/printdat.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-printdat.obj `if test -f 'global/examples/boltzmann/printdat.F'; then $(CYGPATH_W) 'global/examples/boltzmann/printdat.F'; else $(CYGPATH_W) '$(srcdir)/global/examples/boltzmann/printdat.F'; fi` global/examples/boltzmann/global_examples_boltzmann_boltz-properties.o: global/examples/boltzmann/properties.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-properties.o `test -f 'global/examples/boltzmann/properties.F' || echo '$(srcdir)/'`global/examples/boltzmann/properties.F global/examples/boltzmann/global_examples_boltzmann_boltz-properties.obj: global/examples/boltzmann/properties.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-properties.obj `if test -f 'global/examples/boltzmann/properties.F'; then $(CYGPATH_W) 'global/examples/boltzmann/properties.F'; else $(CYGPATH_W) '$(srcdir)/global/examples/boltzmann/properties.F'; fi` global/examples/boltzmann/global_examples_boltzmann_boltz-setup.o: global/examples/boltzmann/setup.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-setup.o `test -f 'global/examples/boltzmann/setup.F' || echo '$(srcdir)/'`global/examples/boltzmann/setup.F global/examples/boltzmann/global_examples_boltzmann_boltz-setup.obj: global/examples/boltzmann/setup.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-setup.obj `if test -f 'global/examples/boltzmann/setup.F'; then $(CYGPATH_W) 'global/examples/boltzmann/setup.F'; else $(CYGPATH_W) '$(srcdir)/global/examples/boltzmann/setup.F'; fi` global/examples/boltzmann/global_examples_boltzmann_boltz-timestep.o: global/examples/boltzmann/timestep.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-timestep.o `test -f 'global/examples/boltzmann/timestep.F' || echo '$(srcdir)/'`global/examples/boltzmann/timestep.F global/examples/boltzmann/global_examples_boltzmann_boltz-timestep.obj: global/examples/boltzmann/timestep.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-timestep.obj `if test -f 'global/examples/boltzmann/timestep.F'; then $(CYGPATH_W) 'global/examples/boltzmann/timestep.F'; else $(CYGPATH_W) '$(srcdir)/global/examples/boltzmann/timestep.F'; fi` global/examples/boltzmann/global_examples_boltzmann_boltz-vorticity.o: global/examples/boltzmann/vorticity.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-vorticity.o `test -f 'global/examples/boltzmann/vorticity.F' || echo '$(srcdir)/'`global/examples/boltzmann/vorticity.F global/examples/boltzmann/global_examples_boltzmann_boltz-vorticity.obj: global/examples/boltzmann/vorticity.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_examples_boltzmann_boltz_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/examples/boltzmann/global_examples_boltzmann_boltz-vorticity.obj `if test -f 'global/examples/boltzmann/vorticity.F'; then $(CYGPATH_W) 'global/examples/boltzmann/vorticity.F'; else $(CYGPATH_W) '$(srcdir)/global/examples/boltzmann/vorticity.F'; fi` global/testing/global_testing_test_mirrored-test.o: global/testing/test.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_testing_test_mirrored_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/testing/global_testing_test_mirrored-test.o `test -f 'global/testing/test.F' || echo '$(srcdir)/'`global/testing/test.F global/testing/global_testing_test_mirrored-test.obj: global/testing/test.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_testing_test_mirrored_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/testing/global_testing_test_mirrored-test.obj `if test -f 'global/testing/test.F'; then $(CYGPATH_W) 'global/testing/test.F'; else $(CYGPATH_W) '$(srcdir)/global/testing/test.F'; fi` global/testing/global_testing_test_mirrored-ffflush.o: global/testing/ffflush.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_testing_test_mirrored_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/testing/global_testing_test_mirrored-ffflush.o `test -f 'global/testing/ffflush.F' || echo '$(srcdir)/'`global/testing/ffflush.F global/testing/global_testing_test_mirrored-ffflush.obj: global/testing/ffflush.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_testing_test_mirrored_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/testing/global_testing_test_mirrored-ffflush.obj `if test -f 'global/testing/ffflush.F'; then $(CYGPATH_W) 'global/testing/ffflush.F'; else $(CYGPATH_W) '$(srcdir)/global/testing/ffflush.F'; fi` global/testing/global_testing_test_mirrored-testblas.o: global/testing/testblas.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_testing_test_mirrored_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/testing/global_testing_test_mirrored-testblas.o `test -f 'global/testing/testblas.F' || echo '$(srcdir)/'`global/testing/testblas.F global/testing/global_testing_test_mirrored-testblas.obj: global/testing/testblas.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_testing_test_mirrored_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) -c -o global/testing/global_testing_test_mirrored-testblas.obj `if test -f 'global/testing/testblas.F'; then $(CYGPATH_W) 'global/testing/testblas.F'; else $(CYGPATH_W) '$(srcdir)/global/testing/testblas.F'; fi` .F.f: $(F77COMPILE) -F $< .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< global/X/global_X_xregion-xregion_colormap.o: global/X/xregion_colormap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_colormap.o -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_colormap.Tpo -c -o global/X/global_X_xregion-xregion_colormap.o `test -f 'global/X/xregion_colormap.c' || echo '$(srcdir)/'`global/X/xregion_colormap.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_colormap.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_colormap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_colormap.c' object='global/X/global_X_xregion-xregion_colormap.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_colormap.o `test -f 'global/X/xregion_colormap.c' || echo '$(srcdir)/'`global/X/xregion_colormap.c global/X/global_X_xregion-xregion_colormap.obj: global/X/xregion_colormap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_colormap.obj -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_colormap.Tpo -c -o global/X/global_X_xregion-xregion_colormap.obj `if test -f 'global/X/xregion_colormap.c'; then $(CYGPATH_W) 'global/X/xregion_colormap.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_colormap.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_colormap.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_colormap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_colormap.c' object='global/X/global_X_xregion-xregion_colormap.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_colormap.obj `if test -f 'global/X/xregion_colormap.c'; then $(CYGPATH_W) 'global/X/xregion_colormap.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_colormap.c'; fi` global/X/global_X_xregion-xregion_dialog.o: global/X/xregion_dialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_dialog.o -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_dialog.Tpo -c -o global/X/global_X_xregion-xregion_dialog.o `test -f 'global/X/xregion_dialog.c' || echo '$(srcdir)/'`global/X/xregion_dialog.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_dialog.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_dialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_dialog.c' object='global/X/global_X_xregion-xregion_dialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_dialog.o `test -f 'global/X/xregion_dialog.c' || echo '$(srcdir)/'`global/X/xregion_dialog.c global/X/global_X_xregion-xregion_dialog.obj: global/X/xregion_dialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_dialog.obj -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_dialog.Tpo -c -o global/X/global_X_xregion-xregion_dialog.obj `if test -f 'global/X/xregion_dialog.c'; then $(CYGPATH_W) 'global/X/xregion_dialog.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_dialog.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_dialog.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_dialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_dialog.c' object='global/X/global_X_xregion-xregion_dialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_dialog.obj `if test -f 'global/X/xregion_dialog.c'; then $(CYGPATH_W) 'global/X/xregion_dialog.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_dialog.c'; fi` global/X/global_X_xregion-xregion_display.o: global/X/xregion_display.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_display.o -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_display.Tpo -c -o global/X/global_X_xregion-xregion_display.o `test -f 'global/X/xregion_display.c' || echo '$(srcdir)/'`global/X/xregion_display.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_display.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_display.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_display.c' object='global/X/global_X_xregion-xregion_display.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_display.o `test -f 'global/X/xregion_display.c' || echo '$(srcdir)/'`global/X/xregion_display.c global/X/global_X_xregion-xregion_display.obj: global/X/xregion_display.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_display.obj -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_display.Tpo -c -o global/X/global_X_xregion-xregion_display.obj `if test -f 'global/X/xregion_display.c'; then $(CYGPATH_W) 'global/X/xregion_display.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_display.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_display.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_display.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_display.c' object='global/X/global_X_xregion-xregion_display.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_display.obj `if test -f 'global/X/xregion_display.c'; then $(CYGPATH_W) 'global/X/xregion_display.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_display.c'; fi` global/X/global_X_xregion-xregion_fileio.o: global/X/xregion_fileio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_fileio.o -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_fileio.Tpo -c -o global/X/global_X_xregion-xregion_fileio.o `test -f 'global/X/xregion_fileio.c' || echo '$(srcdir)/'`global/X/xregion_fileio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_fileio.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_fileio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_fileio.c' object='global/X/global_X_xregion-xregion_fileio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_fileio.o `test -f 'global/X/xregion_fileio.c' || echo '$(srcdir)/'`global/X/xregion_fileio.c global/X/global_X_xregion-xregion_fileio.obj: global/X/xregion_fileio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_fileio.obj -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_fileio.Tpo -c -o global/X/global_X_xregion-xregion_fileio.obj `if test -f 'global/X/xregion_fileio.c'; then $(CYGPATH_W) 'global/X/xregion_fileio.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_fileio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_fileio.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_fileio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_fileio.c' object='global/X/global_X_xregion-xregion_fileio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_fileio.obj `if test -f 'global/X/xregion_fileio.c'; then $(CYGPATH_W) 'global/X/xregion_fileio.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_fileio.c'; fi` global/X/global_X_xregion-xregion_main.o: global/X/xregion_main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_main.o -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_main.Tpo -c -o global/X/global_X_xregion-xregion_main.o `test -f 'global/X/xregion_main.c' || echo '$(srcdir)/'`global/X/xregion_main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_main.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_main.c' object='global/X/global_X_xregion-xregion_main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_main.o `test -f 'global/X/xregion_main.c' || echo '$(srcdir)/'`global/X/xregion_main.c global/X/global_X_xregion-xregion_main.obj: global/X/xregion_main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_main.obj -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_main.Tpo -c -o global/X/global_X_xregion-xregion_main.obj `if test -f 'global/X/xregion_main.c'; then $(CYGPATH_W) 'global/X/xregion_main.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_main.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_main.c' object='global/X/global_X_xregion-xregion_main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_main.obj `if test -f 'global/X/xregion_main.c'; then $(CYGPATH_W) 'global/X/xregion_main.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_main.c'; fi` global/X/global_X_xregion-xregion_overview.o: global/X/xregion_overview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_overview.o -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_overview.Tpo -c -o global/X/global_X_xregion-xregion_overview.o `test -f 'global/X/xregion_overview.c' || echo '$(srcdir)/'`global/X/xregion_overview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_overview.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_overview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_overview.c' object='global/X/global_X_xregion-xregion_overview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_overview.o `test -f 'global/X/xregion_overview.c' || echo '$(srcdir)/'`global/X/xregion_overview.c global/X/global_X_xregion-xregion_overview.obj: global/X/xregion_overview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_overview.obj -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_overview.Tpo -c -o global/X/global_X_xregion-xregion_overview.obj `if test -f 'global/X/xregion_overview.c'; then $(CYGPATH_W) 'global/X/xregion_overview.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_overview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_overview.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_overview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_overview.c' object='global/X/global_X_xregion-xregion_overview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_overview.obj `if test -f 'global/X/xregion_overview.c'; then $(CYGPATH_W) 'global/X/xregion_overview.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_overview.c'; fi` global/X/global_X_xregion-xregion_pixregion.o: global/X/xregion_pixregion.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_pixregion.o -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_pixregion.Tpo -c -o global/X/global_X_xregion-xregion_pixregion.o `test -f 'global/X/xregion_pixregion.c' || echo '$(srcdir)/'`global/X/xregion_pixregion.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_pixregion.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_pixregion.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_pixregion.c' object='global/X/global_X_xregion-xregion_pixregion.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_pixregion.o `test -f 'global/X/xregion_pixregion.c' || echo '$(srcdir)/'`global/X/xregion_pixregion.c global/X/global_X_xregion-xregion_pixregion.obj: global/X/xregion_pixregion.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_pixregion.obj -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_pixregion.Tpo -c -o global/X/global_X_xregion-xregion_pixregion.obj `if test -f 'global/X/xregion_pixregion.c'; then $(CYGPATH_W) 'global/X/xregion_pixregion.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_pixregion.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_pixregion.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_pixregion.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_pixregion.c' object='global/X/global_X_xregion-xregion_pixregion.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_pixregion.obj `if test -f 'global/X/xregion_pixregion.c'; then $(CYGPATH_W) 'global/X/xregion_pixregion.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_pixregion.c'; fi` global/X/global_X_xregion-xregion_scrollbars.o: global/X/xregion_scrollbars.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_scrollbars.o -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_scrollbars.Tpo -c -o global/X/global_X_xregion-xregion_scrollbars.o `test -f 'global/X/xregion_scrollbars.c' || echo '$(srcdir)/'`global/X/xregion_scrollbars.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_scrollbars.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_scrollbars.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_scrollbars.c' object='global/X/global_X_xregion-xregion_scrollbars.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_scrollbars.o `test -f 'global/X/xregion_scrollbars.c' || echo '$(srcdir)/'`global/X/xregion_scrollbars.c global/X/global_X_xregion-xregion_scrollbars.obj: global/X/xregion_scrollbars.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_scrollbars.obj -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_scrollbars.Tpo -c -o global/X/global_X_xregion-xregion_scrollbars.obj `if test -f 'global/X/xregion_scrollbars.c'; then $(CYGPATH_W) 'global/X/xregion_scrollbars.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_scrollbars.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_scrollbars.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_scrollbars.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_scrollbars.c' object='global/X/global_X_xregion-xregion_scrollbars.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_scrollbars.obj `if test -f 'global/X/xregion_scrollbars.c'; then $(CYGPATH_W) 'global/X/xregion_scrollbars.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_scrollbars.c'; fi` global/X/global_X_xregion-xregion_util.o: global/X/xregion_util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_util.o -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_util.Tpo -c -o global/X/global_X_xregion-xregion_util.o `test -f 'global/X/xregion_util.c' || echo '$(srcdir)/'`global/X/xregion_util.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_util.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_util.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_util.c' object='global/X/global_X_xregion-xregion_util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_util.o `test -f 'global/X/xregion_util.c' || echo '$(srcdir)/'`global/X/xregion_util.c global/X/global_X_xregion-xregion_util.obj: global/X/xregion_util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_util.obj -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_util.Tpo -c -o global/X/global_X_xregion-xregion_util.obj `if test -f 'global/X/xregion_util.c'; then $(CYGPATH_W) 'global/X/xregion_util.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_util.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_util.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_util.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_util.c' object='global/X/global_X_xregion-xregion_util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_util.obj `if test -f 'global/X/xregion_util.c'; then $(CYGPATH_W) 'global/X/xregion_util.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_util.c'; fi` global/X/global_X_xregion-xregion_view.o: global/X/xregion_view.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_view.o -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_view.Tpo -c -o global/X/global_X_xregion-xregion_view.o `test -f 'global/X/xregion_view.c' || echo '$(srcdir)/'`global/X/xregion_view.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_view.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_view.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_view.c' object='global/X/global_X_xregion-xregion_view.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_view.o `test -f 'global/X/xregion_view.c' || echo '$(srcdir)/'`global/X/xregion_view.c global/X/global_X_xregion-xregion_view.obj: global/X/xregion_view.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_view.obj -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_view.Tpo -c -o global/X/global_X_xregion-xregion_view.obj `if test -f 'global/X/xregion_view.c'; then $(CYGPATH_W) 'global/X/xregion_view.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_view.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_view.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_view.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_view.c' object='global/X/global_X_xregion-xregion_view.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_view.obj `if test -f 'global/X/xregion_view.c'; then $(CYGPATH_W) 'global/X/xregion_view.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_view.c'; fi` global/X/global_X_xregion-xregion_xcmap.o: global/X/xregion_xcmap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_xcmap.o -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_xcmap.Tpo -c -o global/X/global_X_xregion-xregion_xcmap.o `test -f 'global/X/xregion_xcmap.c' || echo '$(srcdir)/'`global/X/xregion_xcmap.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_xcmap.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_xcmap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_xcmap.c' object='global/X/global_X_xregion-xregion_xcmap.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_xcmap.o `test -f 'global/X/xregion_xcmap.c' || echo '$(srcdir)/'`global/X/xregion_xcmap.c global/X/global_X_xregion-xregion_xcmap.obj: global/X/xregion_xcmap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/X/global_X_xregion-xregion_xcmap.obj -MD -MP -MF global/X/$(DEPDIR)/global_X_xregion-xregion_xcmap.Tpo -c -o global/X/global_X_xregion-xregion_xcmap.obj `if test -f 'global/X/xregion_xcmap.c'; then $(CYGPATH_W) 'global/X/xregion_xcmap.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_xcmap.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/X/$(DEPDIR)/global_X_xregion-xregion_xcmap.Tpo global/X/$(DEPDIR)/global_X_xregion-xregion_xcmap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/X/xregion_xcmap.c' object='global/X/global_X_xregion-xregion_xcmap.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_X_xregion_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/X/global_X_xregion-xregion_xcmap.obj `if test -f 'global/X/xregion_xcmap.c'; then $(CYGPATH_W) 'global/X/xregion_xcmap.c'; else $(CYGPATH_W) '$(srcdir)/global/X/xregion_xcmap.c'; fi` global/testing/global_testing_test_mirrored-util.o: global/testing/util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_testing_test_mirrored_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/testing/global_testing_test_mirrored-util.o -MD -MP -MF global/testing/$(DEPDIR)/global_testing_test_mirrored-util.Tpo -c -o global/testing/global_testing_test_mirrored-util.o `test -f 'global/testing/util.c' || echo '$(srcdir)/'`global/testing/util.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/testing/$(DEPDIR)/global_testing_test_mirrored-util.Tpo global/testing/$(DEPDIR)/global_testing_test_mirrored-util.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/testing/util.c' object='global/testing/global_testing_test_mirrored-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_testing_test_mirrored_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/testing/global_testing_test_mirrored-util.o `test -f 'global/testing/util.c' || echo '$(srcdir)/'`global/testing/util.c global/testing/global_testing_test_mirrored-util.obj: global/testing/util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_testing_test_mirrored_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT global/testing/global_testing_test_mirrored-util.obj -MD -MP -MF global/testing/$(DEPDIR)/global_testing_test_mirrored-util.Tpo -c -o global/testing/global_testing_test_mirrored-util.obj `if test -f 'global/testing/util.c'; then $(CYGPATH_W) 'global/testing/util.c'; else $(CYGPATH_W) '$(srcdir)/global/testing/util.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) global/testing/$(DEPDIR)/global_testing_test_mirrored-util.Tpo global/testing/$(DEPDIR)/global_testing_test_mirrored-util.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global/testing/util.c' object='global/testing/global_testing_test_mirrored-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(global_testing_test_mirrored_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o global/testing/global_testing_test_mirrored-util.obj `if test -f 'global/testing/util.c'; then $(CYGPATH_W) 'global/testing/util.c'; else $(CYGPATH_W) '$(srcdir)/global/testing/util.c'; fi` .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< .f.o: $(AM_V_F77)$(F77COMPILE) -c -o $@ $< .f.obj: $(AM_V_F77)$(F77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .f.lo: $(AM_V_F77)$(LTF77COMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf LinAlg/lapack+blas/.libs LinAlg/lapack+blas/_libs -rm -rf compat/.libs compat/_libs -rm -rf ga++/src/.libs ga++/src/_libs -rm -rf ga++/testing/.libs ga++/testing/_libs -rm -rf gaf2c/.libs gaf2c/_libs -rm -rf global/X/.libs global/X/_libs -rm -rf global/examples/boltzmann/.libs global/examples/boltzmann/_libs -rm -rf global/examples/conjugate_gradient/.libs global/examples/conjugate_gradient/_libs -rm -rf global/examples/lennard-jones/.libs global/examples/lennard-jones/_libs -rm -rf global/examples/md_cluster/.libs global/examples/md_cluster/_libs -rm -rf global/examples/scf/.libs global/examples/scf/_libs -rm -rf global/src/.libs global/src/_libs -rm -rf global/testing/.libs global/testing/_libs -rm -rf global/testing/unit-tests/.libs global/testing/unit-tests/_libs -rm -rf global/trace/.libs global/trace/_libs -rm -rf gparrays/src/.libs gparrays/src/_libs -rm -rf gparrays/testing/.libs gparrays/testing/_libs -rm -rf ma/.libs ma/_libs -rm -rf pario/dra/.libs pario/dra/_libs -rm -rf pario/eaf/.libs pario/eaf/_libs -rm -rf pario/elio/.libs pario/elio/_libs -rm -rf pario/sf/.libs pario/sf/_libs -rm -rf tcgmsg/.libs tcgmsg/_libs -rm -rf tcgmsg/tcgmsg-mpi/.libs tcgmsg/tcgmsg-mpi/_libs -rm -rf tcgmsg/tests/.libs tcgmsg/tests/_libs -rm -rf tools/.libs tools/_libs distclean-libtool: -rm -f libtool config.lt install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) install-nodist_includeHEADERS: $(nodist_include_HEADERS) @$(NORMAL_INSTALL) @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-nodist_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__sh_e_setup); \ list='$(TEST_LOGS)'; \ results=`for f in $$list; do \ test -r $$f && read line < $$f && echo "$$line" \ || echo FAIL; \ done`; \ all=`echo "$$results" | sed '/^$$/d' | wc -l | sed -e 's/^[ ]*//'`; \ fail=`echo "$$results" | grep -c '^FAIL'`; \ pass=`echo "$$results" | grep -c '^PASS'`; \ skip=`echo "$$results" | grep -c '^SKIP'`; \ xfail=`echo "$$results" | grep -c '^XFAIL'`; \ xpass=`echo "$$results" | grep -c '^XPASS'`; \ failures=`expr $$fail + $$xpass`; \ all=`expr $$all - $$skip`; \ if test "$$all" -eq 1; then tests=test; All=; \ else tests=tests; All="All "; fi; \ case fail=$$fail:xpass=$$xpass:xfail=$$xfail in \ fail=0:xpass=0:xfail=0) \ msg="$$All$$all $$tests passed. "; \ exit=true;; \ fail=0:xpass=0:xfail=*) \ msg="$$All$$all $$tests behaved as expected"; \ if test "$$xfail" -eq 1; then xfailures=failure; \ else xfailures=failures; fi; \ msg="$$msg ($$xfail expected $$xfailures). "; \ exit=true;; \ fail=*:xpass=0:xfail=*) \ msg="$$fail of $$all $$tests failed. "; \ exit=false;; \ fail=*:xpass=*:xfail=*) \ msg="$$failures of $$all $$tests did not behave as expected"; \ if test "$$xpass" -eq 1; then xpasses=pass; \ else xpasses=passes; fi; \ msg="$$msg ($$xpass unexpected $$xpasses). "; \ exit=false;; \ *) \ echo >&2 "incorrect case"; exit 4;; \ esac; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ msg="$$msg($$skip test was not run). "; \ else \ msg="$$msg($$skip tests were not run). "; \ fi; \ fi; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ echo "$$msg"; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for f in $$list; do \ test -r $$f && read line < $$f || line=; \ case $$line in \ PASS:*|XFAIL:*);; \ *) echo; cat $$f;; \ esac; \ done; \ } >$(TEST_SUITE_LOG).tmp; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if test "$$failures" -ne 0; then \ msg="$${msg}See $(subdir)/$(TEST_SUITE_LOG). "; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ msg="$${msg}Please report to $(PACKAGE_BUGREPORT). "; \ fi; \ fi; \ test x"$$VERBOSE" = x || $$exit || cat $(TEST_SUITE_LOG); \ $(am__tty_colors); \ if $$exit; then \ col="$$grn"; \ else \ col="$$red"; \ fi; \ echo "$$msg" | $(am__text_box) "col=$$col" "std=$$std"; \ $$exit || exit 1 check-TESTS recheck: @if test $@ != recheck; then \ list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list; \ fi @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @list='' list2='$(TEST_LOGS)'; for f in $$list2; do \ test .log = $$f && continue; \ if test $@ = recheck; then \ test -f $$f || continue; \ if test -r $$f && read line < $$f; then \ case $$line in FAIL*|XPASS*) : ;; *) continue;; esac; \ fi; \ fi; \ if test -z "$$list"; then list=$$f; else list="$$list $$f"; fi; \ done; \ if test $@ = recheck && test -n "$$list"; then \ $(am__make_dryrun) || rm -f $$list || exit 1; \ fi; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$list" recheck: $(check_LTLIBRARIES) $(check_PROGRAMS) am--mostlyclean-test-html: list='$(TEST_LOGS:.log=.html)'; test -z "$$list" || rm -f $$list rm -f $(TEST_SUITE_HTML) .log.html: @list='$(RST2HTML) $$RST2HTML rst2html rst2html.py'; \ for r2h in $$list; do \ if ($$r2h --version) >/dev/null 2>&1; then \ R2H=$$r2h; \ fi; \ done; \ if test -z "$$R2H"; then \ echo >&2 "cannot find rst2html, cannot create $@"; \ exit 2; \ fi; \ $$R2H $< >$@.tmp @mv $@.tmp $@ # Be sure to run check first, and then to convert the result. # Beware of concurrent executions. Run "check" not "check-TESTS", as # check-SCRIPTS and other dependencies are rebuilt by the former only. # And expect check to fail. check-html recheck-html: @target=`echo $@ | sed 's/-html$$//'`; \ rv=0; $(MAKE) $(AM_MAKEFLAGS) $$target || rv=$$?; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML) TEST_LOGS= || exit 4; \ exit $$rv ma/test-coalesce.log: ma/test-coalesce$(EXEEXT) @p='ma/test-coalesce$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) ma/test-inquire.log: ma/test-inquire$(EXEEXT) @p='ma/test-inquire$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) ma/testf.log: ma/testf$(EXEEXT) @p='ma/testf$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/elempatch.log: global/testing/elempatch$(EXEEXT) @p='global/testing/elempatch$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/getmem.log: global/testing/getmem$(EXEEXT) @p='global/testing/getmem$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/mtest.log: global/testing/mtest$(EXEEXT) @p='global/testing/mtest$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/mulmatpatchc.log: global/testing/mulmatpatchc$(EXEEXT) @p='global/testing/mulmatpatchc$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/ntestc.log: global/testing/ntestc$(EXEEXT) @p='global/testing/ntestc$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/ntestfc.log: global/testing/ntestfc$(EXEEXT) @p='global/testing/ntestfc$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/packc.log: global/testing/packc$(EXEEXT) @p='global/testing/packc$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/patch_enumc.log: global/testing/patch_enumc$(EXEEXT) @p='global/testing/patch_enumc$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/print.log: global/testing/print$(EXEEXT) @p='global/testing/print$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/scan_addc.log: global/testing/scan_addc$(EXEEXT) @p='global/testing/scan_addc$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/scan_copyc.log: global/testing/scan_copyc$(EXEEXT) @p='global/testing/scan_copyc$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/testc.log: global/testing/testc$(EXEEXT) @p='global/testing/testc$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/testmatmultc.log: global/testing/testmatmultc$(EXEEXT) @p='global/testing/testmatmultc$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/testmult.log: global/testing/testmult$(EXEEXT) @p='global/testing/testmult$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/testmultrect.log: global/testing/testmultrect$(EXEEXT) @p='global/testing/testmultrect$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/unpackc.log: global/testing/unpackc$(EXEEXT) @p='global/testing/unpackc$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/bin.log: global/testing/bin$(EXEEXT) @p='global/testing/bin$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/blktest.log: global/testing/blktest$(EXEEXT) @p='global/testing/blktest$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/g2test.log: global/testing/g2test$(EXEEXT) @p='global/testing/g2test$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/g3test.log: global/testing/g3test$(EXEEXT) @p='global/testing/g3test$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/ga_lu.log: global/testing/ga_lu$(EXEEXT) @p='global/testing/ga_lu$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/ga_shift.log: global/testing/ga_shift$(EXEEXT) @p='global/testing/ga_shift$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/ghosts.log: global/testing/ghosts$(EXEEXT) @p='global/testing/ghosts$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/jacobi.log: global/testing/jacobi$(EXEEXT) @p='global/testing/jacobi$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/mir_perf2.log: global/testing/mir_perf2$(EXEEXT) @p='global/testing/mir_perf2$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/mmatrix.log: global/testing/mmatrix$(EXEEXT) @p='global/testing/mmatrix$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/mulmatpatch.log: global/testing/mulmatpatch$(EXEEXT) @p='global/testing/mulmatpatch$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/nb2test.log: global/testing/nb2test$(EXEEXT) @p='global/testing/nb2test$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/ndim.log: global/testing/ndim$(EXEEXT) @p='global/testing/ndim$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/patch.log: global/testing/patch$(EXEEXT) @p='global/testing/patch$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/patch2.log: global/testing/patch2$(EXEEXT) @p='global/testing/patch2$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/patch_enumf.log: global/testing/patch_enumf$(EXEEXT) @p='global/testing/patch_enumf$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/perfmod.log: global/testing/perfmod$(EXEEXT) @p='global/testing/perfmod$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/perform.log: global/testing/perform$(EXEEXT) @p='global/testing/perform$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/perf.log: global/testing/perf$(EXEEXT) @p='global/testing/perf$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/perf2.log: global/testing/perf2$(EXEEXT) @p='global/testing/perf2$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/pg2test.log: global/testing/pg2test$(EXEEXT) @p='global/testing/pg2test$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/pgtest.log: global/testing/pgtest$(EXEEXT) @p='global/testing/pgtest$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/scan.log: global/testing/scan$(EXEEXT) @p='global/testing/scan$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/simple_groups.log: global/testing/simple_groups$(EXEEXT) @p='global/testing/simple_groups$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/sparse.log: global/testing/sparse$(EXEEXT) @p='global/testing/sparse$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/sprsmatmult.log: global/testing/sprsmatmult$(EXEEXT) @p='global/testing/sprsmatmult$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/stride.log: global/testing/stride$(EXEEXT) @p='global/testing/stride$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/testeig.log: global/testing/testeig$(EXEEXT) @p='global/testing/testeig$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/testmatmult.log: global/testing/testmatmult$(EXEEXT) @p='global/testing/testmatmult$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/testsolve.log: global/testing/testsolve$(EXEEXT) @p='global/testing/testsolve$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/test.log: global/testing/test$(EXEEXT) @p='global/testing/test$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/testspd.log: global/testing/testspd$(EXEEXT) @p='global/testing/testspd$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/ga-mpi.log: global/testing/ga-mpi$(EXEEXT) @p='global/testing/ga-mpi$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/lock.log: global/testing/lock$(EXEEXT) @p='global/testing/lock$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/simple_groups_comm.log: global/testing/simple_groups_comm$(EXEEXT) @p='global/testing/simple_groups_comm$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/simple_groups_commc.log: global/testing/simple_groups_commc$(EXEEXT) @p='global/testing/simple_groups_commc$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/nga-onesided.log: global/testing/nga-onesided$(EXEEXT) @p='global/testing/nga-onesided$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/nga-patch.log: global/testing/nga-patch$(EXEEXT) @p='global/testing/nga-patch$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/nga-periodic.log: global/testing/nga-periodic$(EXEEXT) @p='global/testing/nga-periodic$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/nga-scatter.log: global/testing/nga-scatter$(EXEEXT) @p='global/testing/nga-scatter$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/nga-util.log: global/testing/nga-util$(EXEEXT) @p='global/testing/nga-util$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/testing/ngatest.log: global/testing/ngatest$(EXEEXT) @p='global/testing/ngatest$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/examples/lennard-jones/lennard.log: global/examples/lennard-jones/lennard$(EXEEXT) @p='global/examples/lennard-jones/lennard$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) global/examples/boltzmann/boltz.log: global/examples/boltzmann/boltz$(EXEEXT) @p='global/examples/boltzmann/boltz$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) ga++/testing/elempatch.log: ga++/testing/elempatch$(EXEEXT) @p='ga++/testing/elempatch$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) ga++/testing/mtest.log: ga++/testing/mtest$(EXEEXT) @p='ga++/testing/mtest$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) ga++/testing/ntestc.log: ga++/testing/ntestc$(EXEEXT) @p='ga++/testing/ntestc$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) ga++/testing/testc.log: ga++/testing/testc$(EXEEXT) @p='ga++/testing/testc$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) ga++/testing/testmult.log: ga++/testing/testmult$(EXEEXT) @p='ga++/testing/testmult$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) .test.log: @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(HEADERS) \ config.h install-binPROGRAMS: install-libLTLIBRARIES installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(LIBOBJS)" || rm -f $(LIBOBJS) -test -z "$(LTLIBOBJS)" || rm -f $(LTLIBOBJS) -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS_TMP)" || rm -f $(TEST_LOGS_TMP) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f LinAlg/lapack+blas/$(DEPDIR)/$(am__dirstamp) -rm -f LinAlg/lapack+blas/$(am__dirstamp) -rm -f compat/$(DEPDIR)/$(am__dirstamp) -rm -f compat/$(am__dirstamp) -rm -f ga++/src/$(DEPDIR)/$(am__dirstamp) -rm -f ga++/src/$(am__dirstamp) -rm -f ga++/testing/$(DEPDIR)/$(am__dirstamp) -rm -f ga++/testing/$(am__dirstamp) -rm -f gaf2c/$(DEPDIR)/$(am__dirstamp) -rm -f gaf2c/$(am__dirstamp) -rm -f global/X/$(DEPDIR)/$(am__dirstamp) -rm -f global/X/$(am__dirstamp) -rm -f global/examples/boltzmann/$(DEPDIR)/$(am__dirstamp) -rm -f global/examples/boltzmann/$(am__dirstamp) -rm -f global/examples/conjugate_gradient/$(DEPDIR)/$(am__dirstamp) -rm -f global/examples/conjugate_gradient/$(am__dirstamp) -rm -f global/examples/lennard-jones/$(DEPDIR)/$(am__dirstamp) -rm -f global/examples/lennard-jones/$(am__dirstamp) -rm -f global/examples/md_cluster/$(DEPDIR)/$(am__dirstamp) -rm -f global/examples/md_cluster/$(am__dirstamp) -rm -f global/examples/scf/$(DEPDIR)/$(am__dirstamp) -rm -f global/examples/scf/$(am__dirstamp) -rm -f global/src/$(DEPDIR)/$(am__dirstamp) -rm -f global/src/$(am__dirstamp) -rm -f global/testing/$(DEPDIR)/$(am__dirstamp) -rm -f global/testing/$(am__dirstamp) -rm -f global/testing/unit-tests/$(DEPDIR)/$(am__dirstamp) -rm -f global/testing/unit-tests/$(am__dirstamp) -rm -f global/trace/$(DEPDIR)/$(am__dirstamp) -rm -f global/trace/$(am__dirstamp) -rm -f gparrays/src/$(DEPDIR)/$(am__dirstamp) -rm -f gparrays/src/$(am__dirstamp) -rm -f gparrays/testing/$(DEPDIR)/$(am__dirstamp) -rm -f gparrays/testing/$(am__dirstamp) -rm -f ma/$(DEPDIR)/$(am__dirstamp) -rm -f ma/$(am__dirstamp) -rm -f pario/dra/$(DEPDIR)/$(am__dirstamp) -rm -f pario/dra/$(am__dirstamp) -rm -f pario/eaf/$(DEPDIR)/$(am__dirstamp) -rm -f pario/eaf/$(am__dirstamp) -rm -f pario/elio/$(DEPDIR)/$(am__dirstamp) -rm -f pario/elio/$(am__dirstamp) -rm -f pario/sf/$(DEPDIR)/$(am__dirstamp) -rm -f pario/sf/$(am__dirstamp) -rm -f tcgmsg/$(DEPDIR)/$(am__dirstamp) -rm -f tcgmsg/$(am__dirstamp) -rm -f tcgmsg/tcgmsg-mpi/$(DEPDIR)/$(am__dirstamp) -rm -f tcgmsg/tcgmsg-mpi/$(am__dirstamp) -rm -f tcgmsg/tests/$(DEPDIR)/$(am__dirstamp) -rm -f tcgmsg/tests/$(am__dirstamp) -rm -f tools/$(DEPDIR)/$(am__dirstamp) -rm -f tools/$(am__dirstamp) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) @MSG_COMMS_TCGMSG4_FALSE@clean-local: clean: clean-recursive clean-am: clean-binPROGRAMS clean-checkLTLIBRARIES clean-checkPROGRAMS \ clean-generic clean-libLTLIBRARIES clean-libtool clean-local \ mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf LinAlg/lapack+blas/$(DEPDIR) compat/$(DEPDIR) ga++/src/$(DEPDIR) ga++/testing/$(DEPDIR) gaf2c/$(DEPDIR) global/X/$(DEPDIR) global/examples/conjugate_gradient/$(DEPDIR) global/examples/lennard-jones/$(DEPDIR) global/src/$(DEPDIR) global/testing/$(DEPDIR) global/testing/unit-tests/$(DEPDIR) global/trace/$(DEPDIR) gparrays/src/$(DEPDIR) gparrays/testing/$(DEPDIR) ma/$(DEPDIR) pario/dra/$(DEPDIR) pario/eaf/$(DEPDIR) pario/elio/$(DEPDIR) pario/sf/$(DEPDIR) tcgmsg/$(DEPDIR) tcgmsg/tcgmsg-mpi/$(DEPDIR) tcgmsg/tests/$(DEPDIR) tools/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-includeHEADERS install-nodist_includeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-binSCRIPTS \ install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf LinAlg/lapack+blas/$(DEPDIR) compat/$(DEPDIR) ga++/src/$(DEPDIR) ga++/testing/$(DEPDIR) gaf2c/$(DEPDIR) global/X/$(DEPDIR) global/examples/conjugate_gradient/$(DEPDIR) global/examples/lennard-jones/$(DEPDIR) global/src/$(DEPDIR) global/testing/$(DEPDIR) global/testing/unit-tests/$(DEPDIR) global/trace/$(DEPDIR) gparrays/src/$(DEPDIR) gparrays/testing/$(DEPDIR) ma/$(DEPDIR) pario/dra/$(DEPDIR) pario/eaf/$(DEPDIR) pario/elio/$(DEPDIR) pario/sf/$(DEPDIR) tcgmsg/$(DEPDIR) tcgmsg/tcgmsg-mpi/$(DEPDIR) tcgmsg/tests/$(DEPDIR) tools/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: am--mostlyclean-test-html mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \ uninstall-includeHEADERS uninstall-libLTLIBRARIES \ uninstall-nodist_includeHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ check-am check-html ctags-recursive install install-am \ install-strip recheck-html tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--mostlyclean-test-html am--refresh check \ check-TESTS check-am check-html clean clean-binPROGRAMS \ clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \ clean-libLTLIBRARIES clean-libtool clean-local ctags \ ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-hook \ dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ info-am install install-am install-binPROGRAMS \ install-binSCRIPTS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-includeHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ install-nodist_includeHEADERS install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck recheck-html tags tags-recursive uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-binSCRIPTS \ uninstall-includeHEADERS uninstall-libLTLIBRARIES \ uninstall-nodist_includeHEADERS .PHONY: flags flags: @echo '# =========================================================================== ' @echo 'F77="$(F77)"' @echo 'CC="$(CC)"' @CXX_BINDINGS_TRUE@ @echo 'CXX="$(CXX)"' @echo '# Suggested compiler/linker options are as follows.' @echo '# GA libraries are installed in $(libdir)' @echo '# GA headers are installed in $(includedir)' @echo '#' @echo 'CPPFLAGS="$(SCALAPACK_CPPFLAGS) $(LAPACK_CPPFLAGS) $(BLAS_CPPFLAGS) $(GA_MP_CPPFLAGS) $(ARMCI_NETWORK_CPPFLAGS) -I$(includedir)"' | $(SED_NORMALIZE_WHITESPACE) @echo '#' @echo 'LDFLAGS="$(SCALAPACK_LDFLAGS) $(LAPACK_LDFLAGS) $(BLAS_LDFLAGS) $(GA_MP_LDFLAGS) $(ARMCI_NETWORK_LDFLAGS) -L$(libdir)"' | $(SED_NORMALIZE_WHITESPACE) @echo '#' @echo '# For Fortran Programs: ' @echo 'FFLAGS="$(AM_FFLAGS)"' | $(SED_NORMALIZE_WHITESPACE) @echo 'LIBS="-lga $(SCALAPACK_LIBS) $(LAPACK_LIBS) $(BLAS_LIBS) $(GA_MP_LIBS) $(ARMCI_NETWORK_LIBS)"' | $(SED_NORMALIZE_WHITESPACE) @echo '#' @echo '# For C Programs: ' @echo 'CFLAGS="$(AM_CFLAGS)"' | $(SED_NORMALIZE_WHITESPACE) @echo 'LIBS="-lga $(SCALAPACK_LIBS) $(LAPACK_LIBS) $(BLAS_LIBS) $(GA_MP_LIBS) $(ARMCI_NETWORK_LIBS) $(MAYBE_FLIBS)"' | $(SED_NORMALIZE_WHITESPACE) @CXX_BINDINGS_TRUE@ @echo '#' @CXX_BINDINGS_TRUE@ @echo '# For C++ Programs: ' @CXX_BINDINGS_TRUE@ @echo 'CXXFLAGS="$(AM_CXXFLAGS)"' | $(SED_NORMALIZE_WHITESPACE) @CXX_BINDINGS_TRUE@ @echo 'LIBS="-lga++ -lga $(SCALAPACK_LIBS) $(LAPACK_LIBS) $(BLAS_LIBS) $(GA_MP_LIBS) $(ARMCI_NETWORK_LIBS) $(MAYBE_FLIBS)"' | $(SED_NORMALIZE_WHITESPACE) @echo '# =========================================================================== ' config.fh: config.h @-rm -f $@ $(SED_V) \ $(SED) "/^#/!d" config.h > $@ global/src/ga-wapi.h: $(PAPI_H) @-rm -f $@ $(SED_V) \ $(SED) -e "s/PAPI/WAPI/g" \ -e "s/pnga_/wnga_/g" \ -e "/typedef/d" \ $(PAPI_H) > $@ global/src/ga-wapidefs.h: $(PAPI_H) @-rm -f $@ $(SED_V) \ $(SED) -e "s/PAPI/WAPIDEFS/g" \ -e "s/^.*p\(nga_.*\)(.*$$/#define w\1 p\1/g" \ -e "/^ /d" \ -e "/^\/\*/d" \ -e "/^ \*/d" \ -e "/typedef/d" \ $(PAPI_H) > $@ @HAVE_M4_TRUE@global/testing/nga-onesided.F: $(GLOBAL_TESTING_M4_DEPS) @HAVE_M4_TRUE@global/testing/nga-patch.F: $(GLOBAL_TESTING_M4_DEPS) @HAVE_M4_TRUE@global/testing/nga-periodic.F: $(GLOBAL_TESTING_M4_DEPS) @HAVE_M4_TRUE@global/testing/nga-scatter.F: $(GLOBAL_TESTING_M4_DEPS) @HAVE_M4_TRUE@global/testing/nga-util.F: $(GLOBAL_TESTING_M4_DEPS) @HAVE_M4_TRUE@global/testing/ngatest.F: $(GLOBAL_TESTING_M4_DEPS) @HAVE_M4_TRUE@.m4.F: @HAVE_M4_TRUE@ $(M4_V) \ @HAVE_M4_TRUE@ $(M4) -I$(top_srcdir)/global/testing $< > $@ ############################################################################## # python # @HAVE_PYTHON_TRUE@python: install @HAVE_PYTHON_TRUE@ (cd $(top_srcdir)/python && $(PYTHON) setup.py build_ext -L$(libdir) -I$(includedir)) || exit 1 @HAVE_PYTHON_TRUE@ (cd $(top_srcdir)/python && $(PYTHON) setup.py install) || exit 1 @ENABLE_GPARRAYS_TRUE@gparrays/src/gp-wapi.h: $(GPPAPI_H) @ENABLE_GPARRAYS_TRUE@ @-rm -f $@ @ENABLE_GPARRAYS_TRUE@ $(SED_V) \ @ENABLE_GPARRAYS_TRUE@ $(SED) -e "s/GPPAPI/GPWAPI/g" \ @ENABLE_GPARRAYS_TRUE@ -e "s/pgp_/wgp_/g" \ @ENABLE_GPARRAYS_TRUE@ -e "/typedef/d" \ @ENABLE_GPARRAYS_TRUE@ $(GPPAPI_H) > $@ @ENABLE_GPARRAYS_TRUE@gparrays/src/gp-wapidefs.h: $(GPPAPI_H) @ENABLE_GPARRAYS_TRUE@ @-rm -f $@ @ENABLE_GPARRAYS_TRUE@ $(SED_V) \ @ENABLE_GPARRAYS_TRUE@ $(SED) -e "s/GPPAPI/GPWAPIDEFS/g" \ @ENABLE_GPARRAYS_TRUE@ -e "s/^.*p\(gp_.*\)(.*$$/#define w\1 p\1/g" \ @ENABLE_GPARRAYS_TRUE@ -e "/^ /d" \ @ENABLE_GPARRAYS_TRUE@ -e "/^\/\*/d" \ @ENABLE_GPARRAYS_TRUE@ -e "/^ \*/d" \ @ENABLE_GPARRAYS_TRUE@ -e "/typedef/d" \ @ENABLE_GPARRAYS_TRUE@ -e "/include/d" \ @ENABLE_GPARRAYS_TRUE@ $(GPPAPI_H) > $@ @ARMCI_NETWORK_ARMCI_FALSE@@ARMCI_SRC_DIR_COMEX_TRUE@comex/libarmci.la: @ARMCI_NETWORK_ARMCI_FALSE@@ARMCI_SRC_DIR_COMEX_TRUE@ ($(am__cd) comex && $(MAKE) $(AM_MAKEFLAGS) all) || exit 1; @ARMCI_NETWORK_ARMCI_FALSE@@ARMCI_SRC_DIR_COMEX_FALSE@armci/libarmci.la: @ARMCI_NETWORK_ARMCI_FALSE@@ARMCI_SRC_DIR_COMEX_FALSE@ ($(am__cd) armci && $(MAKE) $(AM_MAKEFLAGS) all) || exit 1; dist-hook: tascel-dist-hook .PHONY: tascel-dist-hook tascel-dist-hook: rm -rf $(distdir)/tascel/autom4te.cache dist-hook: gfutex-dist-hook .PHONY: gfutex-dist-hook gfutex-dist-hook: rm -rf $(distdir)/gfutex/autom4te.cache ############################################################################## # the end # .PHONY: checkprogs checkprogs-recursive checkprogs-am checkprogs: checkprogs-recursive checkprogs-am: $(check_PROGRAMS) # COPIED FROM MAKEFILE GENERATED BY AUTOMAKE 1.11.1 # Modified to use our own recursive targets. $(GA_RECURSIVE_TARGETS): all @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" .PHONY: pfiles clean-pfiles @MSG_COMMS_TCGMSG4_TRUE@pfiles: $(check_PROGRAMS) @MSG_COMMS_TCGMSG4_TRUE@ for p in $(check_PROGRAMS); do \ @MSG_COMMS_TCGMSG4_TRUE@ echo "`whoami` `hostname` $(NPROCS) `pwd`/$$p /tmp" > $$p.p; \ @MSG_COMMS_TCGMSG4_TRUE@ done @MSG_COMMS_TCGMSG4_TRUE@check: pfiles @MSG_COMMS_TCGMSG4_TRUE@clean-pfiles: @MSG_COMMS_TCGMSG4_TRUE@ find . -name '*.p' -exec rm {} \; ; @MSG_COMMS_TCGMSG4_TRUE@clean-local: clean-pfiles .PHONY: check-ga check-ga: $(all-am) $(check_LTLIBRARIES) $(check_PROGRAMS) $(MAYBE_PFILES) $(MAKE) $(AM_MAKEFLAGS) check-TESTS .PHONY: check-ma check-ma: $(all-am) $(check_LTLIBRARIES) $(MA_TESTS) $(MAYBE_PFILES) $(MAKE) $(AM_MAKEFLAGS) TESTS="$(MA_TESTS)" XFAIL_TESTS="$(MA_TESTS_XFAIL)" check-TESTS .PHONY: check-global check-global: $(all-am) $(check_LTLIBRARIES) $(GLOBAL_TESTS) $(MAYBE_PFILES) $(MAKE) $(AM_MAKEFLAGS) TESTS="$(GLOBAL_TESTS)" XFAIL_TESTS="$(GLOBAL_TESTS_XFAIL)" check-TESTS .PHONY: check-pario check-pario: $(all-am) $(check_LTLIBRARIES) $(PARIO_TESTS) $(MAYBE_PFILES) $(MAKE) $(AM_MAKEFLAGS) TESTS="$(PARIO_TESTS)" XFAIL_TESTS="$(PARIO_TESTS_XFAIL)" check-TESTS .PHONY: check-ga++ @CXX_BINDINGS_TRUE@check-ga++: $(all-am) $(check_LTLIBRARIES) $(CXX_TESTS) $(MAYBE_PFILES) @CXX_BINDINGS_TRUE@ $(MAKE) $(AM_MAKEFLAGS) TESTS="$(CXX_TESTS)" XFAIL_TESTS="$(CXX_TESTS_XFAIL)" check-TESTS # Because pario tests are not listed in the TESTS variable, the log targets # are not generated by automake. Do them manually here. pario/dra/bign.log: pario/dra/bign$(EXEEXT) @p='pario/dra/bign$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) pario/dra/ntestc.log: pario/dra/ntestc$(EXEEXT) @p='pario/dra/ntestc$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) pario/dra/perfn.log: pario/dra/perfn$(EXEEXT) @p='pario/dra/perfn$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) pario/dra/rate.log: pario/dra/rate$(EXEEXT) @p='pario/dra/rate$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ga-5-3/global/0000750005473000001440000000000012275260561012041 5ustar d3n000usersga-5-3/global/doc/0000750005473000001440000000000012275260551012605 5ustar d3n000usersga-5-3/global/doc/Supercomputing94.pdf0000640005473000001440000027465211300316052016504 0ustar d3n000users%PDF-1.2 % 2 0 obj << /Length 3632 /Filter /FlateDecode >> stream HWMsHGjKb%:_3I{jZd[dsؤm߇nR"3[;đE6B_^ io./BRtyvMigµnx}# R?E ZodCE /\xwnllu ߄3Gȏ&ֽ/Pj>ͱUCG^pMݻw>]%Gldۀ\^^? w+[kQRo$GP%:*|ύl+u0C|b{b5uޚV+Je?z-;eT_yp.uxiu;eCjF|.6%hP P`G0%mw|) `pv\{]U [;w9f4? tT![ۼ8i,HygV#ILY)J׃EҢ-ˢiJ[>F뉽`I h0s3b.L䏫-gF{g(;2a aHlՔ)9Arf4rDi4uq%\THmnqeE RڞpXZ\׺[#  EcugJ=]TC"G(s*D7TB/rm:37Â&Ŵ`zZ% bhuFW%`/lw|6Nbcb0x>b Sy%R"SoyZndIvxlPt}GE~#g5Mǰ:Q2l,Vq}ub+ծbpswtd1dU}1RM=z;rݧa/6_ [|˞n!_<Si@8K &}]El Z6뫓AHHbGq-;CkTi'VsS?wSqU&~1޸f)SejUEnF`(q/ ϽGU˂J]V=NZ ""qy8zbDgh9HyS9`$E㮎YVF-9-IZ]9NES0O[Ua5L 8gQ#-}o=gI[c=53^0YOXB4W>%M8p.L*u * s@ݯ\!]l_񅰍K z/YL{N DHB+M;='(Enj)aw77X^[{[cyd`fi'fI9tݾRKr[Ph@j6?XQXWd~_=\K& s}yrodV6=*Ќݘ-ܚ:kZEDL>ӷ?*lov 4~ y~+(mlDc4 SծV~V}d v,WwΧq,}<ݽka `ћ3U60p *n&%7Aڤ_?3K7 q:~7}u#-R(*˫ddx*p곴h5& *aߛ.2,dDk?,/Avis34e(U *p/ȵo7= O^z"v(^ѹ*"?լ1<7`lMw8+P4IVqo٦ vmd#k< $o4[9% !GqV`IaQ;OlޑG$#.(A?+ ;nI[H<]}<^3#ZDUj4bDhAb|5b/ڕa6Gڪphp gR]LW9!V>n ҢBk16lF,Vs,|R80|\ŐzL$b\c㏼t;6SEp/slSsj~t`:ozƚ.\>&lL\BkZ;tկv9JR>*Jhޕ|6dnz)2hH -cp%o F=Z {A6wMqw݂0AQYAEteRCUύo.)8_]Ӏ@JpxxYS1aT.R'S.wP8!n^h`]fD)ekUIV^J4Vz؃lt^BC)U˺)f0/c{P ILH)J?;L[BE ӱ$ 4ɟ>'/Y}eQvN_g\ZOK:@-MXq\6yth. h8cyUz򕜔9 (W#UW8L3lLq` UoŇJɶtBZDYB'F1*3d-ɽ|> /ExtGState << /GS1 8 0 R >> >> endobj 11 0 obj << /Length 3496 /Filter /FlateDecode >> stream HWr8}wԔ&z͙LfRkm택$$$!Hۚxdjk+Uv,>}:d7BW!*K,aOXGl.pq}n#gY.% ?Hٺ pֹt}E뫏kz-?^4Z(|zgd'1_ȏu? "c;4*Z3Y3ξ|xR _^u[gigdqނ?˙3UqeK`b; W0\ƋRdK)UC3o!a 9쏚^!uM׊U$=>ުC)sٚLZkAbSJD[j92E\Z皵{a}y{d𧖕,y3.V`zQ+QgU~UOQ4E L bVԏZ= +cj+xˍc%6U`Ckʥj)ADȦzֈFG`1$UB{IDVE&賦F+Eg5/#?Zfla ==O`:J)7 o$rDNJ᠚ylO$ Upȼx${Ȋڲ\U`a[QQtu^vf}cW>|}Zk-N~ErC26U60c0臙 J@?BK]-`4V3M]3}Ư'˧Qd9b#E)E}\ƫc9s!+yх0rNu|Xײk S/HF=$\H-$^n]l0RsI2I0u6/ӟ9Ϗn.tY1dA-6je"j}oڶL JDЏ0} aV)OŎ9㤪m&/wm:3)ިNYo>fi}_7Mt$;rKQlԈ.U&D8:RI[kQZF&Q,ir{(-X.TKnSАǯjzO(w2̏X\ _*(9"8F9A3 l/_5Mm?QjrXT6&IYl)u`"p-e}q;̿Tu\S)4S;_p]Fhhڥ &ZRZT{fN-j11$U{n5HQB7j EO[-/ lx=هmSwF5 .s3ډzObHy2(:6*L:Gd h{4SA++^x@ +r|miFL aW_{^~봢5ochtM#զ| */|Y}pG6xzm4AF $D9b:Y[/ڞ1cyC槺;EYI;8`8eJhqgzNt uH&[΄uNZ5?wɍ2 !؄ ZJ4ΖM.~m;OȫHMZz*^GK4kOɴ1sA؇"d68݂/޿+^= endstream endobj 12 0 obj << /ProcSet [/PDF /Text ] /Font << /F2 4 0 R /F6 6 0 R /F8 7 0 R /F9 13 0 R >> /ExtGState << /GS1 8 0 R >> >> endobj 15 0 obj << /Length 3133 /Filter /FlateDecode >> stream HWKs6kFK)#1|A5yf*&! Ii[=)Rv%>=܈"v0I$Nm: VllhǴNo§E~gYRZݗIHCvٟ,5|'7n ;'i@~6t% qꞍ$9[_A%CZϗQf_a~\4%Z=\5:0ʶhg/pVH; 4v)ILV(#uVj=y!I6`0uY0^67}-bb\ $\2 RQLeVNuaXV{VQhxbA1^I|G gd GJhR%ǟf ܣ˫zVՓ*^A,kn=pni}<d\Qʾ?K#LH*+IVn^ap#QX&o=?] Pm|>@`)\?arSTk&\0Չ5jRT5 Ac %YXTn&|dJBsʙ:Mu㵃9>,NrAE!9\N4߮WWlA~F.GJ\!B1s,Duᛊ2v3'clVv([v7Œga)B(sʼn GDa'p^5vŢǴt3qQGZ/<e^Br# 4N/CNa *F4lU鹋-jda{U*- X1hkoO4AY |n/;M3(!hE '|# /@Ӗh_G;&-ņHpIԢ -aR}Bb*c$uZPrci3YFRhnA KXFAukHr/0d l08L_ģ৾-wN }[5I7Z-E`sj$/^xJ~"ȨJwҝMm=f݇H1٩"Qر#;~.$iϬnFd$=WbSGku0.c]k'`~Wq9tix1֯9VnN~ndؒvshqY%Szt> YThwyӕmHlCZ5?7)䂚h0'4C0\ dՋ܅abb!t/C{CϬ; z. b\OM瘦|'SHpr-'(巯@':wUv>`^j\Bݽ2/DUn5ٴ=K#.ZNgoTI4ai%~JFu hϜ6Heka-2>7NR35jCVFmp H8pO6@C[+b {w`T"i?f}Efw݌fS$ݞ*=Pv*Ikb3i+EVnf'7ABj\vhMWI`=8i+S a#l~JCgh> /ExtGState << /GS1 8 0 R >> >> endobj 18 0 obj << /Length 3217 /Filter /FlateDecode >> stream HWmona J >8%u3b@VJbu}fw)QC€eٙgymg;?R?N?Q8Г@4j2'BH$Rbv"y;(\z2U)S(5 N3@0H%P `v;xpO=,t,hJ>b?|i"A.`^)2fl@15ʮ!(%B$ԎcZ}ow/=l:xߢͬWRwk*TMCUnIPr]PJQ#ꭻIS&40J4Q{eɉ\A$禅'B?XshQ7{qP7Fq&7ę?O'g;Gs 7nOJ/*mJ` bZ]ʹ5S%d<3q5H}Lp:9+m n!U'ˡZӚ\Ǐ2|@ 1- Fں&DN o_h;:LZ{4.i{ E("?0xY4AAvfhd`^zdwAy9 R:Ƿ@ڲ>MݭMZvZgK4 Aծ@ԃMkuFb'9Os?L#Yo$aNY;ePqU׶W.fPfσ4%]-=NL_"ʌ8J$94KlDo^Fa|_)2e@4GĖ5b!(n=EhyV{HuQ!F)xn*$[g묮o&ӄ')\ݭ:d4tȖg&~ sd8U?w!70}p :;Ήm";ҕ92SJ }~oO("Zbs4|jM;\ BzRNڢkӚYi0ץU0%#ri-''Kw QfGʞDYy1U hdacVC49-^QuѨz誇-y Kg~D̮h5#TM@v$<y<]NKhY[2۪+ úva691z7]N>Au/_Z$ 9.unBGw!}h^Зg0 L,ݪhn/}($D~Śy&xw(1yR_5ۇKRKOpn?\zǫ҃7b|(*gX||4Inm*&N%7W %aAiOkTTr1>refA~j:4H(BIS iRf[Ōg'[fj.myN6mVR5}ȜG1Z,N@[*'{YXZkyhTao<2GTzIJrjhy &iɊa(k Kf3;EuݮvTt8 9 M;G za(WTRppɤJ" ENaX0ίϾْ {v  s]Ռ9#Ei(إy'(>C~)`s1]3TތâX~< grN} (A4mN尐܀z_ߥ+C%ePZ9OI }jg3?WԻWtig YKpO84=?{PCTW#?'1$Do :/; vvC5 ZA*yHXX6?5'@ĸfQ\ڄ7k@{kuܝpΊ`Vg1m· = +lH՜W R A<wG#GӸKݮ)IR9+Ñk(Vn[Vx( [rLdm Q.i)ȼ d .hOo4䴺̌KqT<y4 5zX] z Y=?>vVW2HXoVtK׳ ?ä-3Y+B)čAkQkޕ80;P:bThzAi5, }{m\K:MTKy PQX6x endstream endobj 19 0 obj << /ProcSet [/PDF /Text ] /Font << /F2 4 0 R /F6 6 0 R /F8 7 0 R /F9 13 0 R /F11 20 0 R /F13 21 0 R >> /ExtGState << /GS1 8 0 R >> >> endobj 23 0 obj << /Length 9732 /Filter /FlateDecode >> stream HWے6}}:ۛbooobr-S1DHdz(^J~[›DbY1Nb΢Bۛ uno?7?6K\,Hˈޙ+p6ӎh&ζf+Q(k^Eb}h?4 mveUZFYO%XfUz,+8QV[QUH[YKaj$ve'؜;cdڪ|W) ]{pgV'ҙD87{,qgMUѭcUeV悎]=Ux踨mPEYE!6 (eɇt(=vzߔ ܱ?z7{[T2M%WDww~M] ?!?,l!\< žQ5ivdCeHï.KڌjVxUM O"nSXښҞMvJS63ʠUfKdۍwוw.7Fէ&y԰]ģ.2a:_S3GOÌ^7q9}n͍Bm]Zq(Fu  09K^V~h7 (;5a!VHd^{ +N+56 RR"KQ/lwFꫧ +YSl.dRjmM@%p@pG+u1nlB>tvhs/T(c@[t`L|;cO/o: )~=S?Y 8c|3fA%Bvɦo-Ys-tnDqdA 㺚JX4 J\<,:5sUMB MF78q!S$Ý>U̜N╆'mKA/l{Hb>/72G*y:\`ch]~{G P|Lr;6Y~ͦh/7Bc6\z+P_L|_Vh00 Ls=tnq G$֒4a-:{OCrWP;%^:Ҍ.|̼@Pv2ӹ:s$+S, уZD̑k6=-%aT#2/_嘏e Ny_PH ͸Kq G-˥.\t' v܊<},ӠQqs_4-t"0+tM('ӡLSs:q5s:"usz&>vMSW]vx>_pC>V qy4 3wƴ %D<<<* }X!⩯хЋgznG ʪr_`$#~†U4L3&K]7]G=p9d[*Rg[0\{IZ48loON~2ߙZ]a[C J ~[krĵ`~gߞ \M(XpG$ou_6.)NI' 1eKܖӶui,<pCT Py,GЎSafX 93CAgyʼnC~qPp]Їv2~E3I2V)5_v`&&HuMZƚK R;bEGR_VdGA/SXѠQk Ԛ$*TEW]\eBU1%$pI_i5|!ƕb[+7-G]c= O,GG$E+[і)?=3\ђX b(y<7 &m9\Qݍ'CIk11Ͽ1qADgڿz֒@mT{6pT$Ua*@ d;ytܨ{>UNgxCy(V(EZ%}QW!1hCGYiXjmI+p$-3,UA*A+sISUa`:zIO/.To2עBj#urģjc6 (v-qtHFSFa^rE*N7B,Nd" fGNjlxz?Lxz?,xz?Yxf[~y~C-] ?:VzkXC!QϟL${7u*MER #BYSD" F9Uļ>ġg7(b&PF+xXj7("3ݚ" 2fqB/[?QEDsBAlqTVѯsvY!qv2E@|nUݪ" cEZY/B 4ilg1b8p;6S6ы k/N_8{p:5s8u  [puXk'm4Ee5eO_C|*˗-/o_ffvwHQi`M{|huBE0H20MIS4_,E#yӿǿ_nɶosqэHK4HB'ʅJ)\D:9?q(lriy\ISґ>̳dgN|ɋ;7m,Eax]K BP*Ms5Džּ$pmc] V1x7V7kcXcE>e b,W "V@ACܘDod1{G MwWn-XC2\~.?a҆?ۈe*f.Ƕ|`]$SR`n~WXFR aCJP4,TUbEYjN\`{\SwEX[a#X)h<Ŋ/ͪw ( 7β|7{&nB.%i%'&Bjځ!V۲pvź;+{l5k Vvc Æfވ._j@cNIݙ8ÂqPyVߩIcܵXV aؒMTuHQ+_[5i Lv#oI4TzX>q#eF7Tx+Dn]jk )BeH hzE877k"ػCN)ST"m"HA$EaesL}*fm"%ڲ^ hr%aQ|Q7S(ׇm֔t\AwyȄ&nⰶB䌞]F!TlrTx9!QrϱM)=`+ l , c*FpaxF2>UبPSwYٛB_ZHN9ߩcoȺ4L-8u|hRs,43`Ȏ5IMnDrlc 4\$[mMt.0b OT-L@U4,f6guKWrđmUŝõQorޖ&cm]bԌɊyij&%QAu"[ C11SVIق"Uco}i3BԄaIΠ,QpݨǻQ -4W& .+ZpbmH[v5ᶭ^W:diK$=#!Bϒ3==MM=z3Sn`t`?_N^]sggJtz {[ ?jP !B&@%g~u3CT˹ XA *MK|GX펇_! JXeƾj!xPv?a^q`*Af<6}7XN4_ 6 ЍLVEI䚹YƎ\ fBދHs/ +^Oj'ī{"Nn`ti%وx// Ll.gX= yEG7V\ӟIW' Ș;7FJ 哠;!a;gLF7s3rA:v |i^E ZFGZ$:PkH**)4I%jNP 6ޖsҠ3,:%2 P\JxomQ#*8]A Urd6:ƪQ`ap*ʜ0^qd'_?~vrƶ8R|SnBBHlE6ɡO e[-u~y~1H \7?)E~ α#4G&USlwF&_́gx=ZnC,g)Y^\H$໖{h⓰oo+@@{ ~&phW}ޅ|hETtG |CDcUJ lIZ=w׾@k傫ej ~StŋE}AnA u'sG 歏 8DW-c,|;%|A{R=ȈGջ҅KYe}tY!»K~|Z땳زޢBb[peCvBCqa$e/ xCZM%nRarot-Lw2-]lCd+mEZm-"dbΎ|Ek׏m<<[Ak.IǍ:9rv1yE+[ؽVry6A' RQJ4[*FaՃ:4_+ qĕ+]֗]xxA9듀%nRaro ^E"{~:o5G4nE4o)˚Qڽ:"[Kޥeߚ N";-_tK:qmսv -$IK˫qdz8;ַ:pp~)eޤ-:I8E+<`[Izs٦.nKeRo o6erqi:w_B:$wk۴3s1#_ˈ2ٺ=熩J1s,@o#&}Ѯ9(%E~u2:oe-q{"NkŖcvm^׸C@gqhX {MX3)+dѓkb}0m-q{"NuĖcXRO#&w~51 H8)D'6Kqն>^O&*gO%nKᧇb˱s{6{Lޭk(6_g[bS,Eƹ ^vOpλz5C\Cӗb˱s;ГyfN י!^aY%^֛wWeر￁#ǯ/}e>O6M G eKa `-:&NǐeAZQe}қM^GqSʫ`)†)R}+Ĺ >8؁k64G(v`=km`ST}tāo6Xn|@W)w ƐnW?O9oTFEOUYz~hN~A/*ђjJ&S1xg> .``"bG燄D{'](S7|{@Wt&}\~x'of1I+;ITzRnJdžu9ٴc> %}RҞ6g؁vj@O~?(6RyzAg諪Tf9bf6𑕆S^O߃Q\бCf5YN;*>on?|Uo0O8xfoRznA~}?fVvQ;hm190YԮZzMǧk榩ܠGt'^g݊cCSI--3wR S: B'AM~qܮ7o59O wCƚ1)6t5ӯݑIU7}dj~Ȓ"|b464uBz2x3S24kF1= ?H[ck"}"2{|ӆM//TBģfeߴJjыm򩩌U[ iZwմ{ akz?PvH) ?%'iɖl=r m]^3t 5*ToBjƳ^~mD߅$H,$ʙZHHY(0Bfef@BቻN$X ce PE@8!`( GB-e0,"+ܴ*ZBfFtDHҋL^Q~6|˽`bmڎK{|;f*$|t [uQ%2sF=8˨!lM+IjܭЁ"k=@H$&1XyuB )V#5:={hC@A؇{dރ!.EE;s;눲_FBnGdn=:L(=t:;s@qEwN%d}XBPQ3j}芨g!UЇ蒚Uyҹb!S ]zXYk?s6ӃCvl,lI QC+3é9SmвY:Leoaq>Ώǟ/<%)zޞ^Wߟni E4oY<) -?ebqJpz2͍qMF 5 { {F0a`ɐԜ˹ChݬFS327@Os7XкAkA/ `xw7Sv.ƸP7&BGȪ6xD`eK03wƱ/0dMXMe &'s}Xs̛JbGp=^C4^.XnA"t endstream endobj 24 0 obj << /ProcSet [/PDF /Text ] /Font << /F2 4 0 R /F4 5 0 R /F8 7 0 R >> /ExtGState << /GS1 8 0 R /GS2 25 0 R >> >> endobj 27 0 obj << /Length 42042 /Filter /FlateDecode >> stream HWKo Q^plvcx9d% LJ%bڙ_*փlI*㣝y[gOWlU656zru9NW?]_>z`M%6BghvW n:|}uw غ`D?&!-VqM}o۶n(qsf>thv#Dގ?}3x toqa7-{OX9Fz2Χv 0@3a:{t8e*Gb0j!3恪0(L?魎? wx`13Y~O/\#vsURG 08i9"o86{d[8\d#o El{@_d4Sq6Ogz}Vl h}ٝ1j{Lp;?`#4XÃ6ݧ0H;8A.Um_;Ź#.,&%ݐ0VTٜ\96ʩQ7fyFQ(6u zA 3t92|riҳ1 >A;~7ͳim?̗ B;}'*kc@yȭF|iwM$76-̢PD FBH,W#DnQ(~]"-~(1B[; ExV*vevuPDmX"b7xr5GpJhĕYWQ(F\!Dq"hBWQ(F\!D!qAB4 ! EWN#PBB4 !>uz/Tī*Nl*EeezɖPī="Wĥ-˻e7p xݲo[v tn-]rIЊ>͇K7i@x~t7D|aSvaUS"A]'xNreŒbR$ozY.vHb U|MY.5V$WvzY.vx,{㻡I.v'S>㋝bZIV;P&WmE+`P۳\ȖVE!)>Pv&@bW0B P @9D P @YeF)@xH P" @eJ P* @L(d簲I&th{4"&[9M~ Ӏw;/f_ޭ~y7zU?!.olw@NLJt|q1d潁T**l]+C*}.O,ˊɬHxވxp;~|9}.`|򡵍7_f웋>7 =30?u |_ mbܗ(]Ȃو}יYeM"q;'bM6ɒeWOʨOA>'\ JGUF=QflŚ/;dI̫'eT#r}? qCϚ>]ZGvnmFRPyXVoέΝutT$GVlt J,0 }4nIQR\VȴveQ#L /eU,sRT4h;ױ NE1,f\*p7h,e`]S˻U謐śR*k<}a:>CRRHnB4ŵT&B*_crRU<#7V.f$ \ ܱ%r]1{ %v 8 +oKtVMU@էj8ȧjyŻ \g ][67u5Mxsnu<,*qI_ wqnF-]K) kFgiM˥P~>(M-r灡']AF)&K\[pI=ĘOfjѳ$U[D^yuԁi`HtDbK b_S*{`F=K7vmb Y]9:wXDAk|df(^,EDaFS{K+%-UVdHF%QGJ*q=$D1V E1RΔvgƻ{"jȫ7V.$ң-k0ߎ"Ʈ-b7$ P.%m^,襞zsnu<;0CdWA,4ptADNvv[ Dz㌖`ñӕ7.(g\~ץe6kw'eggz~QU3j4wC;]GnJ: AcqDK1ś_ #eb+$'od/ ycpUADg{Љc>l:NJ.#H L=q׻^ş_znºI< R?ˆs;- kKH{h1IH$,]'i %uyV#?^spw[Sl<`]!_^UE"˶8e!`x!;+N6|˾#`#B<=`yV iF c]'koM2%K׶ܚT8Gێ$mZMS\no+=rxe=V 1,CWgJ!z =Q7EW^/ UpX7ԥs]i]Жuܝl}G-̣EEl]S|=܎V&MroXh '׬ghNߤa?Fؑtw;Ú%Uк'4Icðս^o9xŎdQC7idvFY[Z{F5WCQj6h 7imDh發aT}_R\i4MCٙxk#k*휷ehRC{5ΚjNuc,k1=/# -~:j;Pr9xeGSҎ T^ʹ1b|,nCv^M hv*Z'9۬:=4ICzvtA +~ B4 m?W{P4{_;ړzTAox?Ҧܫڬ}~ZtzC0hOe<>4\Zr,?*F/T_T_ r"y/WJvȹtl a*ZJr.{լh fC˂E"ʚUif\s*І@r22ڶ$kw@NM”*hr@P.Mxaԧ/ WR;-=KsfmuHIMx{"_݀V~Jh3 H4 6c[qB)lBƆ$/rML[n^rM}Wwm.ivMx:uC!^Q,}wWrOӃ<}c>`pS{7եs^%H9p-yA8O5{vvHuF`پ#}%:#*.)arl3}E~ڇɾ+-Mp)┡@6z{&Mvam3=;wV75k֭iPy ;CXO\}5Fl;lzvg4Joٱ~+7Ku%NnP`Vr\$-lQ;b{7&lVߌNWtn(fC\-fG ͅ兿b-'19So"jqDƝ)MśK((}y7m8~͖S DzOo^L:Aړ]#_/f;ۖ` q_o֢UR >䀜dŗzm4} ] lv*8?"Ыnf9A [ꑂz҇;,E_A#;u ":o\vCzM_Qrd 2\Y^#/L183ШʎD82j-+&ˢ;{UU9b2m;*U0lg4uS;Lm4UQ~ / wuvg_7ר.ρ*M@*,W!K[]xܵC9B/N_N6WֵmO3!MF |vbQa1lS]>(n||9;B/Nl.,/}د</@lKcv{ѧ >k;B/Nl[WZ5EOăt1H09?S_s9+=yl6è\P^0/5G2A4kO6KaB|_uJ#s9d-gڝ*f(Ь3=7֕-_^GF>.?ԛܗSt qWx| z=(+ܯoZCYhQ9Cz>Y @A|4[VtC8s|d@Õ5H8dwx*8 v)2"{ZQf!{J@kPhk+~[_>/M׬i8]gL?Gk,)/do+zB5Ck,{]Ua+߸3@)#`'闿6Ԯ8ݜq. lj&2G p!7ކEN3| 9\wq8?2|[kX̧gΟg qxrAۗ+hUj4YGƁ{Q_3N5f%ќ|g9kX4\\7?FImk5Ck,nuɣW[׿e\<|-C-]S1ڥ2u}˰ˬO)r-gHGXɉ4/*_Ǥ(^t |_29k&<}=3e1y[\M\q9SH0nY{7)Y7'C˥veF?9(Զ0 ZJuEYKF dJIټRn SI){ c2eh?:@d ;ѩ">J^2%K'E:hn?@$1,hrzLISd~]e\m ST:BTdg!BCs6)I/QCsv%;%Ƀ|9CQ6)Y ֬(h5 H2%7FĜr 2%7&fy@~J<\8|PGsӤWg?'e r6eU/Kˏ!) (rQnW$0|quvP2X q3lvFJsH1.  1Dʋ^H&pE@ۥG>[+ջS {g` eLy"¡GZ V.|+6Ҧ.Z9BmX腖) (`;Vc.IJyA/7 /@IB7`m@4~PvF.Lzՠ<@kT X_SX fQ9k*44,'S@PD&6U::{NF<'! ^.xpk4LyAiM[2B[R<\3MB#^=Lx!w]GAE\!<N1^X XN<p|-zD,^1>HN{*E˭@\LXVvS]hB|2`bn?ћy>uoьˋ Nmr#&;u1C1{ԨX[g=vAʊo:G`3(ozi`ywbNsi9c9g^A92ӥFO=4MSK7 V(' RQ!ԭʗme+q_͌eawS 3g 2` Ќ=)^y1 ڕ0x1,JBΏreOxXrн]J ֽ;=p ߇CQы(Cm [ >hڠ=$^mQ0lãYx0lģYE@qdQT`Z*pZ)PC%DTU7GS`xd0\i$dc$` ⠔U wr !3-GPC%&.iT_T@eLy.Njb?Q9+x!zQUELmVtIj,ɝ<0UMr"CأĴ<=iDڲ0ȐfjVC..9gVov<^(3١!P+ϲ%Mi3ìiu~]rzj[2% "5H%Fxy-/fd0%J]@~p_&y6nU>}*6=%`q!)XA AWRL [ 9\Y@ l؏6y+ cKrJF`Jg)y!ǚP)G U)5lPI%jNX%m&?(rd(I0Iu20q&,X`ٌ4,,* ,'.`N\4.h/{\ڊK IDa@0NxDcT~Aq bŒ'hxn߿#9xj3_(ʋ=KJCEVuRwFV,\FYۥZCYjgIk.A,:JCheBpKZp5T(M*;4c/SӾ@}l|vd(8$H2J &M(mlJ}@"% Mc) dt;$[Z Aol;PCйFkHP}!2AOȼwLPGa/wYa4 8Ӣ 'B̼ؖjAywy*y!YĒ[5\#..!uI }I =*E\2\) ] (GĄĬR\>.&9z`')-!i@Aa^138J) /iA02Yp{[PYGj@djăzocpXHڰ$C$;0BB-doX;$eBWn$+oX0p`TOj H.ISGE [Ռa P(-_Nb(T7$Q8@a@(}OMыmR=P&Y,ߩ#ZBG82n|kYy!¹چ<Z>lpr@ pFnϢELImY)5vK2iO|\mCl j[?EF]@*o_O7}vy-GrJVfTt5Hpb;|G]>NyKYݔ9#6闏bJOᢇoJByܢ^# 9]Ɣu$[R6&)!6v;G-<Ї#<^~Ho7_lDb(Lg*@쉄U" G5:x [_bj I/~oxiVtYxn??5W j+q yi?|<Þ1o@;1$,ܗі S]C/]c(o*ΜLoE2t .cs Q6Q{0?XrQ UڦQ<}O#Uslf*L Xc/łvp;/&A,n;vPL~x#. x *9~pV 6 .[AHͬNErm|Scǐ8Vnz'9xy7a]`CPY`CI҂ p0Xa[`ij<+U=8p3wpn%%b%ݰGpKn2ރ-+=Ͳ2փ++#=2:-'2R~o$p ?%UO٬TX{Tuƿ#S D^[V XOz/z6| t%;?v90߸ 2-F:6['Fek\0Oy|ʰǷ'a4ORyyj8/9xΗUױwp$[ܿvsp6u̴0}ՠW}ܚ}o>ΐx3jV%&2UTgBDlGOUʩ|(o?ntt[q~bNO |l|?Ha&%B°@E8X(#?FꎺJXR΢P:-AG9Κa2\W5Ri`.Eb+s2ܸPvژkj+2J`h[ˆǮAS&ރɓc~1Ʒ6On .Gkr ƹ4ח ű]e]w=e3縶v$3 YvâEN7i][]_6kӛ:v5T\xpB]i0/p~hMP6ϢnhӶ>] p gC)Ns;donPlV6HN}lZe2_L%)q1g+^ U ʛ4`U2_mmrFS)3'$E[qpr nj3QnkmMev+[g%>Lɠ WAEl'&/a XPIz"̟/KwLg Gg8LN ek2Ex3|8TG>7NKf(D!{Xnu\r 4gv"xwOD7 *F>m02HʥֵuyOLltOo ףLe-vx7;*/do̊g;Gf-wh(޺[ j+ `N]:[cisoIz4eXYeWh`cpUm3/zX O~֊8ڼ؀]`[!C6`i/:K!.m`ha1ժqy*e5xzCK*O4톿TnX`D'Z+7鎽1`5nFTI{d$Du}Q#&<,2ײ}C剜SF_U9m~0Jy*J5F](4b$An7n@: 5$̩R5GFiriO@V%0Fly<Ĥm`}Q#-X:c>Q%KBNsy0WA}4! Eðv0ƃ46l(U(`D7PzkL 4޲jQ0~/i#18x%®N=MkӺ=w#nq6EfZv8"vQRZΚXKsZ-%0,Z7`&cU<b[{%oƌ /BVPdЊ{Wղkmgxqzt56`4l3流/']KHQ*+P SLPgߋ+O%$qya, ˝p> ._mWԈrYRQ١TCXspu!a,bv \=eDkqzK}ה"wqC 3#S#L=7sY&.ϡЍآQ_F@? n_C5A`bLM9@X̷tX:c%-KPfq/#֠N1́D+.W ia]ŽGWt$6аv1/#K9 }$i(:`Veɂa Lj" 4G/)֎xYZX9!*@OuJ(`TϹD=6I:ǐp;2-c·ɾZ`9=Gbf;td%nZ˚έ+!;V7u1\/nXJ3,I3J~Wku*fmRnD ݬ-8ÌYާHMBE NͶ2$XƬW> G}/nbx_ =%8ْ9A$&TTFga8f+ RwXK\9j. ǀ 4(Y EoU&e]]$Yބa.w&.b˱s90  e*kEkWukNH/w.,-zhnbrm ڌ=MJ̎K&*$WmsAn۲]ظVo]VNQGS@~PABک2z>Fa]g; _ "8X2 ) rKxM Ń{Y`xp8!($ Qܸl[SED:jNqPL`!^_56v?Q֡xEzo\Rc[~ zNTz]W1`rsN?F~=XRީԺ::p{8)3vxY$[o * {)w{YpXànb>p\wjNDzO$t;R̚qHp7iNp3، DM΂D2غmҫg`v?>nWFˀi mQPsD^t{-.j10`f=wZJ65:m~A6:rJTLg?+{۲T:觍i5 ,̑X 0پ1[!)D+lޢ{;c<$yWpQi:LAy"_-iO V~vr2)!Yt+L#;*!"<#Vb.(;IJ-P1 ]7g\S6pRPd\e?s/a"ʝ$}brvXa;dΑVH>'$768&NgiDߒԴ݊ĜnnɃBe\rZ^/7~"j}"w֓Nrax'%&]c{;!ؖP$ [߆g mT*lew u@>o& .nDB1KC,Tnӛri،\!)[$~ӢM}Hk(9 HGKW᩼˜Mxs.mA.1M *f/;(@3HW w&n.[0nluR[U#ˑ_<~| 3` |~}O4*=}vO߭ť_ii@Bwt#|IM)ol{-؍)kBp:pV,Z'{+;^+z ^C==W2X\u/.c_3!l1sk8CMtYďao_Vo)>;fE6VjtZ.$,Ny;tm!hoIb ^+]q!)%THۃc }daywa-rlmWZOpp@C^ZL+2ֽdվs}kwUfدΰ*/߾&d {1^ V:`&55rm1g}5Ȇmu~ rmPȜ8fas {99o~uwK5cC7%1LzPs:tNK;Rrq+#yBހc2i>ﮇw|ܣ\aϰKw8 Hvyy==_:H#/V`)ږ0`T`CT87_.H"TTa0Xb,{S.Bn2b^]Ÿl9@WU(BB LaqP!8BWUC\!T 0!K:ϕXH,UPx0"~ΟО~,~h݆,\hϲ dZ)51 7[W n܀ncpaE6E1Lq`2(z(%yi]Z:5^6U;q^%"J?A Q]k+*!5 C5"U#HQ!jy|U+*tu(jĄsD EG 㣫O+ @iYQ#JӲBmE`EӲB谚ӲF4eE"tA5 "ǭFLj)*7@DRL62YdEaLV1Y 0dC(aLV1YdE L62YdEaLV1YdE L62YdEaLV1YdE L62YdE0Y1dC(aLs[9oBF'ěo.'7NF躁ژ=0@%q4c.ruaz_;n{cd3i}~t.U P1`!<CǑI8"j6 ~4׏x/Y[8a౒\b Y .>hK. x8v*HM"<h–op1q=@fG{jA<$nS% #'pGEJFхb2V)6gK Ԟvɥ/:OW| QDi${yZu|DbɗD`>{7DuDrg(FHˋ@Ꝥ=|_5֋(U!o{{C{N5(rTJ)+rPCscWssPx|/ N5>2HUriBZdIFX,ZE Yݬ}ݛeK; 5ڎ 3q{Q8h#[w{?{n{nWWx]۔(tƌkPIצR׶g04SǦ{.o94a94i=G I!Q36! kS!M6wGD䑽( (WkߋHI"8^rjCΔ%CW& HEA+{=٧̩U#@O%xH* v84+t zz\r}]תmoyA^[=/-@=4)Gjf1$i _C{O--qG,mi]*m9&ы&66dfDyV?qe';; ,?h}zMƔ6{]U::2{aǮyY)W7M^Z8heNr (؉9!XLC/ ;v3CFNQR Z7ޒYf/˝+հX+z_[V*Y;j gGfEظ\u _VbveMYQF^]goq Ѯ! o.m}H1 R[Q'<&/ҰrAʕL[ϻ? :, ƃPCL,#T:+ڲgx[F^,_[ԁS+3K0u9*3ϋ.f:tG{;{WwtwϞeiԓN)P,Jnq4|^tg6=_h7Ovw=dށ=%!E?d;PctsFob|mŒ%~_7z}g_^W % FEO7ͬp/ǜ6ǐEE[aM/M:߫;z_67V B&fYw}Pͳղ5]h7OvwŽ+_DYJZZEws@wo)\/r 5PjǺu2mUlu[ +( *RkU#*7_؃YId&19T9xYy3̷uY;$:Mém(s|M=a7v6qRU+~uŔiRL&IvQ! T(m@,FFKz?(< a& kD`?'砨r $n{碕'#|OYA 爭Uk}Szn\J zqU\G൜]+(p^tu@#Xy.'ϒfuu%_P MXoT6NyuʭKtX^Wi?$>j-axD C6𾼌@y_b5UgTvw< [6*+j"=Xߥ*Shry#Kuz1Vny;yM J"J 'Mܭ.`;%mJ&xr'@{j%秭Ɛ@ҵռbjyw!A<_=(Vf$vYkYOasa򼚚E?B 5jYzdz0]ct ؅=b+޼ͱO-4pW{dz|_*u7Wϑ S;uDv$ip+cxUW|Rz#Lh2D ,r,@Ԑe,Ӻk'b Oay%Pi'ʊ)fͨBdA2Dx^AD-:ޝ(:Ƨx x׻mTLN_V:^[Q۫Y>*hdVune2 2 :@9RVTH~ܡGдZKkWåI W,h(\-sAh)8_}йUqfU":G$.2(e%DDoGގȬBĔUexijw #`gWvDHG5)I/;Ǻ³V1*\ǀZ^vXʏҡخo-o jҭͯAoGH"}=">/;DX Qi^ߎ ]0")7# I65kD;jvDH$'*B*h`:3]vl'ţ49əL#B6jdE~5Cu}xrryTg}닪8Lrr.ȷ#Bb()-v2H#BbƔkHu:vtDHllnʒ#h)3O1I% /WvDHlQrh_툐ӗͩԒKI_eSz^3Z 2%N#BiLE"L툐(j QTe.ǀqF;GTj(BYebʚźK bTnp\)>R1mp.ux訇Ɏ3vK@(2fy;'R*h-bә M"{npS)lFͻHkEjiNdKKVgEj޴j0uV-ZNKPYOW!I"lvBgk[22bD&k'۪8#K1]LK)pSA` Q(g &`B}4\+zљ}QM ^؄͓u{zRr~aU)͔ch9lѝoѓ!y?O=ӓwm-v{TT [(xf>*Eyr+ط2 S`=o>%7v,cr)b)~o|Meor}m?9KٮgG%7Vh$ jӽɛ^ H F1 ]ȤZnmD ]5`n[ΗOkM(=xu7JCq?Lj ѐWIOX#M6/Z~9nؿQL> wMG(ꭈ?i(X'9[s fUkirF] mHk˻qzX+94v]2paLWiF$fi͓8e7J킝^rَXw::Xڏxy4c7Gɮ%ך.=xY`[w)Vl5F|y?/d4wU&#~2ô ? \ib,E,㈪FH<O<)D)wcL:V[Ah2دebYG+q}ToC34(C( F(:%w3;bwW鲎j)# FᚁLUH!HPi93$߈u]1viv9SVݗ56HC~v |:aΏ##ib89cEV#0RP$KOM8͛tZo|x2KB+s7)>w_؈?6i#[H(E{r)aqp :QSt!4^a%$ ֦]30ls᭄B [mMe}5%.R鲎jo`^.nVk(gGΟz\! cl:ٌҥ8d?7,UvF9)_)ue'-:mU*qgc-_x/co::LW THk5n&.).)## k4_ܙ`OgM|Z'Jcy*Vh%r ;sݺbbx)!6vYKqٕ1 ]a);XwWVh%pl|_q\w 3Ůސ eleMrٺ2KGf:4]=0Kk\rYw#(O0[\'TPBx)!vRƯ6/5Bp$۾[%.RamAr⥦0$'KFVx2hϵ(.TX5l/o_:~ywp꟟9LLatSHҭ Դۺm2A%c`ӛFpa2HNT f#+_r9L1 WqfOx?5n~ `@I>p/Gw HY7qc #u\vJdgh8H̻CA,LB'T1md;hq`f WˏؐF4i&{S<432w =ɿAp)yJ|gwqY?8O?ݕ9WSf~e|<h~pi_+)bHXNʥ$ˊfv \.Jҧdׁ^i;tnO)Pc]UK}h )u6#o_;?=!Y&K9gỳ8,\/n9ℯW`  .OAocR'v^0;t=3l b5+cħP,7jjY~')puU2`hO 犯+kPw$4&{5ҀDn[4X<\@hzS4~ liOq#~mdXvƁYTeRctfzfZCk_֗7tAl1I^;N CpM,#vsA,l^I?GH>&(1kvfК=J*iO?9J"OtM+Jz { +zGk4M;ibwO{c:]ځz[To+l~{eK77*;~1%p.|jgjyo2dٶ+}NBOg﵎&;*K6^~ "=ppvQD=xjC/F^v[6Z{Lz ])Y߭$H8^qe~[ɪQ9js.@z_me[si[)śwT;:}MKvH&;Ȃj Ƌ@͉[%yEQMdԁNb/(,'`츂rD3vIXLNIanXEQ,jAqJ|d$YKQMjy8fb˜K.lO鼃^( @>W9FGSv%W .qzNA䤭*^&nM4$LE50x7(ߴ(I֓81F2`l"K X#4Of9yK *Od.H1KQ j?5f\6lUQ,J꬝G9E{d1E(==Tr_hSYF2FE}y[N 5t]-f)n bT$3>c&Zzހ,e pHeѺk P&B\YFs#K|:E}ƙ.`fJ @abɌd>RD"qxZ)sd+b$-Eh P#6K.Da*܋݄_F*QVlB1=% aL"jnJ)Jg>@8 m 'n{i֮ ,>վ}?9^v}\9P7hiTe01ڷuvߢ_}M *HH/d.wq{\Nn]^A JϏ_ o9Ans障ξE 5搫CSf 5<{todZQRBp+ZhgB}CѼFWݷtg`ΙE[Ȣ<\fB!MBg/0g\, DP@-3( Jΐ+ltSwy-ItJ0LTTe\;3 ieߗ <F7w7/g<tBx@4^Cėp%;䉹z4z}JQ|S1/c: !)3SB(o < ByP@ {R)}6p;ep1,Cf9%pG} 7]FɌ&JJ=LWücL?uD|5*~}}(p/U"Ht_a~xkrxq#0߯ooA^ _y2VO?v÷}F|Gp Ǚ3 kr`01' F0?. 'Ciƀ`N` I[8vɴ'>0<8-0ĄF^v0vy`eacЗu /; ;`0 3Ơ/ ^R PEŨ3< ZAc.&-œiY9ӈ0oL@5|g>h=_V79 VD r]}uȉ{w\/hWaIR% v2ͽ sǛ^+=(yc2QkS !pZkBhlq<~:']!!+GM!҄8N8p!p䍺vB(CnrCcm4X!L! i^ij"{dGqxdGqXdEkdF{dGqxdGqxdGrȰ,0 0 0 0 0 0 0X34_˼j|j 9S_9>Tȡ 7^ Jm f_. @nydrV&\}d/_]oJ4dD<߱HD95V7ĉS:ڟ# Y`o3νlF@6҅ ϭa! I:DI;I;},ѹuڦv=%\cHeI`_k|!WiR yNT +\-+^hAlYR`5nYzǽpQVL#24d>ֹ pVVas,:~襁+q|o(s7YE)!υ1酴ny9;K* MX n1C&+ZI!Em>%PD\r^Fjh/8GHaAC`3m=46ɇ9T.-^\ ֈmn.U+g֖9qH9>GMaC"WAmi4t֥ *+NNA̻y9!5 v*lE-%Wz1 ArTzmlhZ!p8Ţ.8FT p(W7iu-x~hLаB+ɩUJ7E,™laB5jf$խ?s':jh0HŮ_…%M9#fySWEXhMR݊n*26ePh@C:٘b$W\fL9#Jj\Z)7]X<;y~h˦´P᫠S `f(q?9sɯ$b}2 OwZY fXͫHфHMYA£+wDMC2Qt͌+z"u+6&nE2xHIfx ,!oLC h+AR+Vv]R^:9`u$K+a@Fu3b6GaAC`3mWx.qe2)o%puW, F ʔ7Vw _~+ʕ`MZ] aWd A0 !<$Aa.Ku|~.w伤!J̨ K#,0^b|nEmet ;p]sF v'u6ߢg6lgi'mNn=y\]Z_P6j^Tͱq-kUT_RC,-Ȩm튽iYܫ,+Q۶~ұ8?-d(Y o97_vN$ B$-MbɮLې+ pq)$f\RזQf=LJ}^7IdMע*1WpM-Q113a})r#.Y" q6m ?ݵ[]GM8Vv%ӮK@<"5Eg]rJ]&nz(]$q~+ӳ蹊x)P'KUr dm,L o\vʻn_(|w!gN.KEU)T74dPeP\MtWavi1i 6[%C"|Y˿\F&i .UDe*(ȧ}ue*-PEۀn|NL![rS2uvԱIA&ްbMCWJtzhCn`mBCYeM9v_^k1&LBUϛ$#xlcjTVJd&!Q>1a5\n%4Oj#\!6H3ړ>ܾS4R{|0 BR&G ӡ^^G~DA-+#SKtJ:iE ʨgN?eR6oj#dvf6;*t%' vwU8J%."Je\fT8ƁχFEΛو3&Q1t('rHmLof# m$Rf;H mC=6_%G^kv65oOXDcԦ=|Mw@ X iw$FXn5*4A ldhK]Wڈ X qKRG|jbrъDZu6 cn:pK4$ڐ(6"ؓlf8OUszWE7}0)?C GĘk &>ofc]Dp,(Xd㛝+ =~>BUqJ~WEF@Q7kuE+4B%;A}u>+GO:Q+,YI֑:٭Y\=*V+X#G\(p$$HZ焹IPY.C)&b,1mD5d^1iCnCb=iOPa~T0X$ OUɊYq~ p)9A`ʜT߆=!?3}mmoHM~ m ?URtY-ׅPD{5ƦTrMf@sVepLrJy4.1emhW5׿_'0:W!]Op*uUshY`hK.J4Zߧ!Mr_ ;۵Xt^1<܍ͅfNgT +?G`9g` g` ~|1IH(h=N.PNo۹ȸuZ`iM7HN-|B|%M S1T3zRD.p6Tӻ]^0_\Y$u2tמ_m'0@O MM2Ȑsm HF=ʵIn뛡6};|>[lg&݉ zqH^cE5̯ƨnFe'fLr =ܵͳř Z,Hܤ##][WJo^}l[ڋtdMߢoo8ӓ^>}FRN8e`dh@KF[W6&A)mt,:|$FW-ewی8IՇ+@3K_[/J}emhWcݺE3#<ϐ#!3 Q*Nj'0L{l9/=/𮾎5[Wg3ھGj;;Owm}{i01h~,0{'JdaUrz@ߓlBed s̺nseԥ.:E^TdFq06.l~n&rhS5Pq%vK_B5o{_fΆ]Tඖ_Yڸ7,lv?{~&wo)6ou"7ML2[*_x'Pv`t φ#~͓[0{v?{׌uz{:m\5]UoWt߮U\{nc;"3UDzi"}QB=PZͣBuCO2_u݂Ы#ࣃ^qr<αQQ&"Bܘ `Pd뇒i( ;qtU/?͛i3nm^VDi@^ɮTn.5e~ɟd;vmMNNs:yQJOaalQ0cԮȕZ<> em`T ?:`RMj"".E7W9W)]]>"egc;`]=IZh]=rp䢫k,>(KnFmd>כ̚$ɎLt "{k:o/R2 ]Kv[WEI[쀨k۵ݓdGX{k6Vilͷyocmo-|dۺw? z""PN%g %Tmύ-;yǻ)$e0:خmBNjde"lspG4[xF&k?Ql)?Ov[#pSFƐ<*_ 0!φA|mlYl׶k?'iI3ne>.s6]т ae~ ìIۄ'"9x cd@$'O:Ac4 =LsR ;WFۤI񜛔6SmjxzSRg3u<݇HIGMH 4,;n,;9'":W} j 'E,;,>fu`t]ۮwfᖍFEDO+)!k cӤ_Q%|3q eI<׳=',~mm'4.E#xuuP"$UBq654_F`M2yҶJFMVxR ÔZvEiE0)]j`]OHg@-Hq'O5ӄQpt]B`zEqc^hmT(d iQ"Is 7e&.p݆ ilژ_vM(j;j6g^M7A*k0@e'B/*#EU:bSg2wgcDu vio+2]#,mmkV?5[6zRm}]LO?b.T%` oWTW?H?6ìl׶k?[(Iٮ)A:]T"K/EVLsնfq`pMY靾/vv;:7dwNCgOv`\q0Gۥm"I;XS+"WnẄ́&{W[2ϲv ]ѼQ˷{V";^WFS'>ê+)z%O烉v#`vG5,)TQVӆj [ϕTV}En璪a{2rl`]ծl^-b۵9$ ^ǛX{RǯXJ[qT_~G%D= уm^I!5ց4uzB᪝Uꧫv߮ݿ|ڔjװ|Ҿ [D zi)a.qYJW/~_8rGW^Ưcl]ٮyl,un,귊rHjŗyV7v@ۅ5~V0]-TDFk)h*_dȇl"y)~n쀨k۵cpFEDO+)!TDnl+ p[Pdޘa UͻK0Ց%߅"2ڃZU'W+{;_HWʜ mvg$בY7[)v$qxoʶ'98{M2! fű(Ʊcusj:E?%+w&?D<3'gR7R'*+K5ZZzVHOPͺV*5P }Rv&XAnZO ," ?Ն3%rtIf@) +Ҵ|TO~=#cُT:6&v ;w$W,O-VVb_GnjAfמ(꾠f}g^Do(*pW=e`Eb50Oj9rv;tm[Ojd]\mxJl\1NČ~h\lr䊌UoO4^=6by;1]U yhxbhw Dā)1W,[*Ի~ћTJrh J+c 株k+w˔<,Y‹غ:0WYfcxXR/ԡz2cR`BGs95 w}lo?waMc٦GՕyS4۵~e_dtd'tvަYkqRLvX;;>"}1 }AUśdFz=$F#N}V'1{>׬4reC,pʉ*r*6,bNrፇ5^#uJia +)A6/3ZHxYQ:m"OGJux֟7=&79#84lJ-Ip8(4ZP6`hDUI۸Gr4"))28_N쩃2` $WWAxxl9`:IL[# T1SHӧItӥ$ο蒟l9~i tVJmþȐla\r& K}y:as IReȸ +ѣAl RH=P$|*ٺ(%jdYZq؞rRs(]u8j% +ϊq(PEl$g 03î02Sm@NxNrV- +w7\rtWǞ$Ϯ+32_Dnb3ؼ 5N/+4q`yIzb޶S[_ZADE=kR;[3m2 E쥇ww=+ƫx[A{7I Iհ_%MLީit.iKM54z-CpbE?Rq m]%wnn=Tnr7S8^Yvask@Ap;.N_0+Y5c{Ş W$zEmU!P/ݜ[S TnrsKQ{2vmSFn'wnnxs>=[Sc˱߄_#~L>5}XvT\ ǭO }7<.nݚo6|&굺b CԱBM4ZK`0&6I6,MLΩioMP=DF)qoeTHslb-U;JE3t[S [a5c˱d6 HQzu WB$)6ܹI }GG#xg.8!*AR{*ίYz-)w*|wfl9um%rU@<&<':mKTm-AMr;6;[3W/V:u,;mJ<z,Z~rUV k g{WI ;[3Mv>5?/ 1@]52iDlQɼS!mMºUB5K ީݚoU7;@ &MVYp=ј1c2田\>/H.uorwHYT ,CD.=BZ~|wtyWpذީݚ3 `zDv;[S@saO0> W(%E_w[S)nro8:۴Κ]wjpմ&xXB;WAW/my(lsfh)L YkHBFiL8סm:]q.mZڼ˛ߴlki%\V@dٱ셚*Է.uL6B;O!]%,*:  kۻ+^nIN *C;nq6nEWZ s{o$U ;[3{N561ź700.6?<augvq{ww֌-ǞJ+2eԸ*SZHjzm݀CI.I%K{o=8g'6vmᷞjs!H"^"HZBH {j;I6rX7⌦7w  0Poz/vAM-B6>l0n ?ܵ5\iLX2@C 3Cx7Fbh/_uD& 'X9uїdA`mDOr%JNYAT&A^AZky t6^u@ú1t6wxB|p]iQSN+ q0=maݱw%nNavzho"NY.خd Iޫʵ rFS6Xٌ %ʘ62gyeGy2irX/Teud:惝+xº!*.m|F]|CY[ѹCI[b5` !mCO'P TX#p?Fay` pE05` "XLB:0Pt 2U Ft<cR U`|q({0P{#j d@@%y, 9q"kd vz򄬳#҃*j3ҔI*н&`䠇4΂+cC@0Ŋ< cp0&ZB`rƘ@1 i/; _5tE@<G>N]R&8 `5086Hw::Vja* ?#T'؞t0POt>4 Ez)8*-8/UV[_}ƓFNY10YǛ}ɎMuڷ8'vL' LHtaL1dPJ=)ȴwPjvR6Mw ~8Vwwcz+f|A_!8ԃMBb& kV{Ӈ헏_{ׯBIo.j[ҕjs/%eep=)1p5!1.ЍK w +Ư _V x~hlQ@>}|8ޢY@2ƭ U?4HJv'ER\mh7An]({թĵt]|CI֤I~)419}1C\9:!fq;#.rA0Ěd2khk$n="#Hµt]|C2"xZks`Xs`X]W:TuDj p}O_>Z=-1],Vm$n]B![tLIf̳a ,̸`*?E4XK N!O N@< H#tPjO/KN+ӂ<$9 cgz& P),mhֆunm|'F]|CߟF0#ƀes2s[`2j(mn ?ݵ76BuT,䟾 I5(e@-I=# `%+;>C\Acjr)SLe^Z!Se54|Uo7GhDEBm`*KZ<ҹ!&^uQ4S9!Zܢ6wg^)|d<"%gak ï_~>)/_٩fM>Zw~rpOsthtv`.C⊛}~6EK|Em! -v\χPUp۝c̷{ꑪ?FuwEh endstream endobj 28 0 obj << /ProcSet [/PDF /Text ] /Font << /F2 4 0 R /F4 5 0 R /F6 6 0 R /F8 7 0 R /F9 13 0 R >> /ExtGState << /GS1 8 0 R /GS2 25 0 R >> >> endobj 30 0 obj << /Length 15111 /Filter /FlateDecode >> stream H|WKO%K>n9vd+NVf8ڒ(Nߧhv[Qw_7FѨtgTRW*xX+O .Bm&yVBu*<ӝ龉/p9m3Ics ?;}7Π[o x}Η㢚/X8T3v꩙M460󠺦}Q6H4•Rm.J?݅5M AOծ^Czypf9ݬԂǧnooDAưHuE;ر'G07 .Hrx8f,wվ*tNYK2Ź(*D\Rs𶶵V 5]3L OP*>p!cC$8Jn4!c|/n )7J?u~osυ_kI_q*f,uIʫZV}7%Dv`+:5[t c]m\sd 4e T7)GKM/A*Sb)]fYc=S桡TDUpyvEz+iT@HJE-kބ`C\OũNT >u;w/ᆗKN(L*{f$9<]_0O91eXԾ%Lelw;{7n,eKv=6/B`Y"3m- }L ]\͉gVESڈ b2פ%m_mӐSjHO?#֓K/y&BN;z_^S(i^N2V)r%rm`ɭ!G<]]Ӳ68s@Mݜr*q@@na(lF;]~C36ؼP4 g%)Q`(~~WUl9Q;mJ_%])d c9)^Q³mSTk9,E;^ ~#uWxD3h#D|D! (+1BQ8FQMWxDV4 rCW)ITm\+eo/+:vrdfv}U<\}wW g|π~wx8'<3@) 'x< iB @ D:L0  T1%׵^ w߮]*<`ķpգm)4D%DYCROuJ&F^+`, w@)Q& j?%-I(77%e.+R0F 9b21iԹ!Bd9oar|WP3 P$\ -ᇶʸL|0!C j Fex*#C/h΢KTuɈuJ RBQ#*]Ba3ȐnϨ3 L+ᔑ4]xuΓ|JT۰I݉]mn"낦*oZf \'I|YTenK -3qAmE3J&dq^eNy΂Y# @da\uoZxJo8:N:*+ɟjˬÒC/Zt&yρ"AJs^2TȰiߚ$BS!j'͝BΖα6*ҽ&)Ic9UYFR|.}&ɝUj'ͽϖα 9#hIcYZ w IdH'&+yDn)sݍdT1y RކhTL.YOŹշL7k8{>;oȾt;bR(2i&5aefߤ4ك(J淑Zl{dw/ASܾ){X1ᆢH,Q(5&6|DS1lD7~64b_oDB:]ƺDzT19o6ތ%cPe5oE%8aWHkU?+[{- 6y/M( QH92FEPg%ȚzjMfB)Ga ;Q]Q8aMI*=o<C` TJ1]C0kkiF SN؟0ye%2L[ B_cD'$F0gʾ*P aUº14ir8k7="+; zǽCRsЍ}%avq{? [[̛N(EFaYeS6{M-&'c?h[\gpg*|e3Xg%ղ*+k/GvȲEӾ :!Őz~a{~a{{Xֵ={kB.fR1Jvh:h`~Ho)TFh!p5o_(Mepk4(qtҷd%6b~Ͽ}Szu䑅ηY\eXe޶fNy"a2Id~l)[Bj-.q29d+%] +VdKΚu{f{VdUAS<ީbf.d%yr$GO@]gMΎkB"(lf`1p1[M&6##Ī5*f`yX~`"rK&$Pxw*|uG3 794Yƌw: lo qz?ye謨]Cɰbf=AkTkKz,.V/GX7&p2Y S@HbfބDb`3B+7#!ؠR՝VqtM2swY4 _ь-Ʈ3fO{Q7YPj^c):ղ]W2s*|mG38~G6G&7< 1[/S3DR @6XZ3v } pMBbeD%dcnx<:`b, !UˇUU@JN_M!OkayHP;:њ`Y9<Y49L5,U!9/3#J<@7^{Pۉ{`}u~ۅi_[ Ez!qgPb&d3m{C>6MlC1w@9c%Q=iޕZ k1i DM@#x$Ϫ] ^<7ꑄ HBhkgoxC =~)%)>~ZXVQ0PA/.1OETmL *ӤU>cVs2RYЌwœA%:{V9SJuGk+Qym%{I~Om&U&XdI:/>Rfz:[Cru46k (gԚRbmJK@gzCztXJv?xoh7ghˎ=qxPvRn[}YMIٺEQn~dvM{{zU!C-5M# a T@A9܀^Q7p Rg-~:0Uywlb:Р2fXz'*|:I[4#έ@ K(mFM[Rc6ِ'RaF8>HiI`dMJS"MtFh\]:,:)n'tCt(9IFNqm~qߧ_kΖxE7x&yϺ(wX_uޜUJW}.:l$Կk]bތIw_WHAb~1VXќc-ߌ}Qrsn .V&i/b=eI("hdQ۰sR#ߜE:m{^/E@IJ4f1pG!7DAWb@м7 %BI[1YE.!7`|!ۜ~r)"$K{E+quEF+RM NSHyuE9.'~\2*ۜRDM)7'cF9bH 4;%=s`;ì-*.H,rYǗte"B.Y[&iuwfYꥈX^#|qg:E__K!oTRZBPFڥ،փE%#Kmv즖d_+lʧF%c؇ti\("$6i_^'㪗"BDw FU1?* e#]D$+R^/EDv3|Tha)b3dL`ec:eRlU,sWo,R"EW9 V^WhA@h8Tȝ.`WوwBQ~vl!Y_?>BzOPd wǩlw-7:ѵ%\'FW]tDiloogϭ(+MfrG+_ &1xUh;8:W-;m2X#ˡVݺ#l?")ߨգ/.8vj6bz펔FVBBE8p`0n^&g1S zXk, M:y>޹uud5K`q`ttj(2 ^Ui q4, yVI9#6ַB蔙(l}Uzkr0f: M+SC}'d$JDAHBɏ鳔1O68psWPѡ~m^?:[&`M$@]66ZDd<^$MBa4;z9Z<2p.A.mQF,[י& :"tf0q4\#.CSڼ~DJH[Z3SDh.\P-7;uvdr\='[vIçû gWK060{wݘ?ckyڀӸqxhk綻YiK?(%$fܡ Q͛F˥nȶJ֍b/me=~zh˷wlh>+GQû,$miw)0zh' -vm;?̍%G7T`M$@g,m'/mƱ?Z4-ÎДW nG\ (dw !;S=({B.-\ELXnR9a myݠ-Lƻ:y$mJs KXRpLeð+ޢcZR[0@;n1wq pۗ=l!agҾlG\+ٹQƦ-K|}nfp)g x/i'>bhX@g &H,یjTҙƳf]9;{Lqv(˳snGWٙ.P,!!<?5/Q򇚪_qXQkj,Aj7/ϟ_?Xϧ4%s5AԨJ.`miVO[sxw=Po5bl[SзG3r& =Nv5ob%c.9r| CO)_͏w lgc~NA8_TcF6<k|/s~^Ұ^'M*{+6<;9LiP ڟ$w~ˌ8[δG7ѱ& +@F]$PƆ} xn͕n vAPA x5^Ou ƫE[|6-+b,;7#D|D]]왪 ^9mS+ Tvh3 |5zE)Uz=&/ݞ%Җ{q iVUfkՀ( 9 Gw%g(V\)YEIz5tey-g>;=jݻ?' FxUqŹU}ڣ 2}:[>5Vu-AR/ڠ1hGyɻ59Zǹo8т>v*9FFn[!ʹ\ idH v czI23xD[}>[wけӭ;ίz~{~W6iM˸еR p+-^8pn4AV8jS4<\7Zލ Fg5͜k|T_ tQe|tם0Ŏv0<݈W4UN+b`U ;`G7*K浘ݴ9t8 iaW!!+e㉱ne|]:>r?U7rD`hd6  /b`5fZ#YyU,@nvUב$]i>`beia|V:Rht P` 5J(+bâ#3 +V) [V+`bՈ.PQXq5*I~6$~ A2|lMaxR2fyyv[Q"]SXх X8; d3cڇI\jLFT l$*c6b~>Lg\꘷Y*WK}zE8M2P垢TJBdɩ}86NXA} Y%/n 5`:e,4򶥨 +]X'4MȲEVR4`\r,X6U[(7'U,ULj0l"Ic2VNa{Jؠ6|PBh hMb7-fTxI(6MHA _bec%pC;v:d8d:d(Ն` %:ЃU|ՅZ+Ѽ<$nFb 8EZKEpR>]"j2Y ؤA 66&؂%Gh~ -F(ZZ`L')m/J@["6_f\6!k-CL)&𲩧TjChBRg\ynf$$Ǻ9g l8IGohRPIj,^m ,ޖj'w|1!ZD3AfLGvDm"Gpw@.ns_|!w}]` $ą~EoGyIЙ ԫkE$$HWN/(hkwOe= 2t7ر^wY HX^_3Lٽt|2~r"uc㰫f׿}kyLZ2./pQwgbTC4+t%BJM8^xzt* jk\ouݲ HoRBJVǏ!Ev z;uc=7Kuf*)* S^6ObȾM˲VH Jb<u F*kJ:k(ai  6HrU5{ZAҭڰ;$[,/&tEZFl1cfn(+T\2h_6 -)_mSTtܬݥd<AI+ݿTCI||ŬaWEIkRNh=/WA_E@P)y wVp<~)Mۇ$GӊQ;gYWdHLn㉖6r(js}G'AvĤ jCkAc hQu,ȵXRj>ӊJϱ7*@SиugKp>„vgH]"SPm)"~z ûLylRz)yp 뜏ճD-n3l<.9UY`1ǀ^ݹV#.rƫϯoU7 Yem6=6ҘR3.$h$Ρ=D<)vH?%/P+[X:pߌd1U #$up=K(+kuC ?Ȗl`Z3?7*: 4Gf8!NM_]=Od="<:?JVsBX##ͥOLQlv'v DӠ:g*nIDͦR+mbc)ˬW0" c=Qۉ{ y#-iv1,b}ܷr=©>KDUy3fg2wnӫr҃j,qMnumTr: 09_ 08O*h H-%?>&Q׫Vz &^̬LrNV3u,4M0zh[D;94{:4~. p*esٵTs=yhnOG2y C-:Oj$FZS󁱤Deޢzp|:uΐ j7{WɃy25Yߋ'j`9"B{4\HiY~Nhc`,`r 3k瀓s{F;ra6*Nc(="xq:ZH#F=rm7gd:]*s ʼ\~,gJ5uKm$'e^&$qtɩ+*,~v(䌀'iF13S]JNj0Bohd)fYͲᩣG9 bDŽlGhS'Hd,<{u D&7I01yq^ΩڀP6qU@k-42&2(hwI8Oϼ'-=+ ER}u 78q+a'Q4 _{øb֯`ځ`*3 k`򵃻,| Ff0|@0kL$oN'o+q51nU2p]Y}m'u:Pq7uׁׁF%ׁ^~or~o]I>R_ioitw9w܈N-g ^f^Z:caW36.iK>%o,k*x:Ƌ{Itڅ2Pg{bxݻp}=Bj?W%Ld=Ap$gF@X # 7c@P "Rq $g80Ha\p$`r$0EHJqa;,a\p 1B`O#aB`5&!8֑:ٮ" Eq$tzM'*1Hp!0ta3TBa؏cp%e )gXM9Ê^TrU3JJwa VY6e/-gXi9j^[rlܫ^^2ח3af /0cx9*Vb3ט3ƜaEf /2cxë^fΰ2sՙ2v VhΰJ3U|\Koqńn!|rn SSXL?/V)>+&|/p^[0p4QF- w(]mk`n܋S`٘ZYEз %Ur_߿!v#e˒ADkgn'ii/Knh }n?~Tm{Gx)t[wzZ#wb˩]`x/۶ ,q]*mmDWC;@{ി̝@:J wh5\5e 3̟$_){* θ 0O6T@E%a ƽ:ͭΦ,*"[bd[%b_NS$&3RtA*0͵SТfWoj].g0`ŊDQ (a]?I0ve'y]zamo;lvVmQ.l*^֋ \ ׆]O7aIΐthhkcpWMn*-(բ%i О&M܎ho(r 㺡ΉZ$ΈԔ=oܱmΪ,*ץ"44k2%yMf\y%_s\K.KRl>ajYj-\4'eqM6$H)cXlF2w.vh`H uȔ٤g p'VRrG6Hb{;vh`s u31+g+m#6ʓ R]j)Lh{Ĝ7f[mٺJnUۙRJ~I%Tb&I$ gϐG~Ƀgy [{*n`w"g7}bf(toZ.tB0߅ΆVzlX3`Kv9+`J u`jVvӒYX6Lv8f4}}t=؂mjsUaQTâmk 2JĶPK\33Ж [ݩ!]&2Lc:pGWnު-jbEsG kC{Lr$#Ν 2a5yJvV&7oQeJ%$8n@@>u&,o 01V8ƶ7WΈxնZVAf7oJ?SΕz%\W]+5jr㓞[ۼUXUI]aj:7ox+7r{፱hYLzdeIw|QX(lq ۈ0EkNUҭQ/aUs70FY']Z7kL2HQP 5X3f]«d+Ei2ˁeR ;-ēz#p'?V:}TBXAo|jP'ѲҐڭ C%!3‰HTE,N2cVhd8c4qC4ʐMMsU$_8v"2qȖֳui`h,*S U;IC): iJ!(43Y*BFJvUeMc-f-5L1k3NI7apٚ/*:g`LS8$ e CS`X墫~1R@7x:UovZ.^F~@k#*K QR tNi.~iSӣ7 ? Ӝn<7?gk[ՈY [eSEkx|˃\n )8&P𱐬1ۥ$,9k ˧k6{Ok)3 endstream endobj 31 0 obj << /ProcSet [/PDF /Text ] /Font << /F2 4 0 R /F4 5 0 R /F6 6 0 R /F8 7 0 R /F9 13 0 R >> /ExtGState << /GS1 8 0 R /GS2 25 0 R >> >> endobj 32 0 obj << /Type /XObject /Subtype /Image /Name /Im1 /Width 180 /Height 173 /BitsPerComponent 8 /ColorSpace 33 0 R /Length 76 /Filter /FlateDecode >> stream HA ӱjٶm۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m ( endstream endobj 34 0 obj << /Type /XObject /Subtype /Image /Name /Im2 /Width 180 /Height 173 /BitsPerComponent 8 /ColorSpace 33 0 R /Length 76 /Filter /FlateDecode >> stream HA ӱjٶm۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m۶m ( endstream endobj 36 0 obj << /Length 2534 /Filter /FlateDecode >> stream HW]F|0RԽY $#r$M<0je_k-`kkfwuuuuNŻ"v2E$[.,S݄)K6S"|ijl?9K6})݆=Wņosa.|r3ۦacYgq]mlpp"0I&M?`冷C tKY4bD:Jy\(ZQww)*YyQr \xQc蛺fGE񖕼t c'pzgC#rC /A*ugB ˚qֵ/IS*)t(щq'0N\@6}K񍂔4!8EZоt ֵpAR-3agrgnAEU6CdgbifDNji3c@Yh[ K,-3$OpD+y?1yIҍ}p}f1݆YcS`OŦJne)A>] 0Lw{MՁMF Znz 8!$L]9عޯ~xdPVK|$G˺kuy)z(xqT^VsPw^]. 1_L"j]RmDgjgvIsP_/Q3\VPT&x=9_M#Wc{e:a'K)5{xvVJU ͟e^B ~Z,:ޮ=w Itu eRPF#Kgy@S{QV+;e .k,kFs p' -~߂U9W^$6, oAn#W%N!'t:08 i+uۛՐIH]XM#BB$meEt&JNҏڛm^,'lvIX\MKZO3tH3 枺e}&y5~yFҊWv&lc+Dƀe亶16 Xmsz.FK=>By!Lܠhtq@{3ҸԴ\vC8Ifbݰ%u~o}]}ls¹K&⠄rs8bzwbQ\E6Nٰ)yH3V௜LdUЏ&A(-_Db#)=j3旦l\$  6##{rO,#rtF1+@w=גhC7H$I~lWo͋'REM4*kRE`6&Z]1&> H(hRKKMzkH6 \ew݂DasF>0v djW.kb rmѤ7S3 ٣2qŷg- sR":uvgqp?pwZox5JyNJ~xs<\PR|ag&;K \[FV;hgg=^XK9ƊyKGjRtgI &8&QaiC^P9x9-X3žy d^I%RIIoɠ=E[UN`N\+:tK*nHcG,v#s%:J:WfOV[phmq V#Â]@ftnU*Ο._K>h3Ͽ[.n,vń&P!tͻJ VAlEf[ٝ+e.]rkГ.hPi\X3 oNb ro7sWm㐅7P)$ _ js`EIG†$ 3crBήn:G) yX4ů08/#Dêo9$qc?f8#?OB{qQ9⒢ͅ ah b.J>,1Zې\Y;eJ4!QjX\|r~ok ީd\D"C2VH,e4 \)q|OHŻ~'Z(#޵B=N"Xdm߄Adp-3o?JGw]/^Y̏4scl @0* w=_JpGmGOmX޸pдk7 V:KWȵLfd7.3]~ l endstream endobj 37 0 obj << /ProcSet [/PDF /Text /ImageC /ImageI] /Font << /F2 4 0 R /F4 5 0 R /F8 7 0 R >> /XObject << /Im1 32 0 R /Im2 34 0 R >> /ExtGState << /GS1 8 0 R >> /ColorSpace << /CS1 33 0 R >> >> endobj 33 0 obj [/Indexed /DeviceRGB 1 38 0 R] endobj 38 0 obj << /Filter /ASCII85Decode /Length 12 >> stream s8W,urr)~> endstream endobj 40 0 obj << /Length 3517 /Filter /FlateDecode >> stream H|W[6}_`bn.M| }h]JtHɮ3$eK4z̙3̤p]$+q`$^Ey 3n[<.c)]_$8YmsPmK|mfۿn5r+6,ˋ޳Z fqiR_">FegI`Yho9܊{+I__)~T'd~nMR7.NRb#|3rwI셏 .u5k5z2&9*YRkϑ.Lw0<*6jcfBxU㠫%@cŇ;6!C{e@=wlu577 l1-K/,0eEBqkGƕՀg (1z.TC)vAqa3M4Gj=%zyP/{<%K#uD,"/#uAFs ^6 >z6Цhd9KcЃː y:1';q#}WgR.d#7.A^D-ody+ko;ַGL,¾YZ_+\\{ twZL&Pgß)8yF)NW$ ԅ|ߨ[^79o+תx 1v<'!Z" Qa"AĈP<uC[dϺWCB՘sFi_g7 IґH90;_⾥x9!3αGZ4Nf =R9PL[e?A!/]/txÊU`T!xZ4Dʏ3q0Z*Yo UO6~0ӊկJn*L#084梸-50mJW%?g $vRA){cvOrBhKH]M?v/UC7M֋ uC鷽gLiɘTXlH{DSIhΚVy> u(Qk H/[EbRЦ+0>W,&!ٹKk;!o]rh:0$81Ko4wSF!-90X kH,MMI1\`āJ{(m;V/1-u "BtK&KT 1}o8D.O^gEglaoy;>X_b[bHwBh9ICv&ҖJY:,*猋D E#{EFxePdiZYv&1o+@w0$aPǚN7<xcYϵd% wpKqF ʺ_{ĬMC|W ۏd6dxN+ 1B[#-Ne-[L*.xA,#Ӻk#4ei2vDh\'.BHX '":^#M0e3ol*C?+5޼Ef8grY-0tҘd@Yo|`u>e(+_E88b '8OtÅIpX7vGtP2lgtF6qc}@(^@* .ANCX7߀Xek].^3TA5:F$~o !fXuR_~a>uG9fo/t!޶,AXPLO{vd9m S#TISn2lƆKS 98uȎsߑ#ܐC,E&?MqG^j}1b&:$Ό?5͒{ab4`-/D `G*YI-2C >5 I~Hnyfq_ a:o /x^2r]M"t6lKiWOᝤVdл?gP||U=Mu]EHrbSt\)j91E9D,榩&H y+U<=K]b#OB,+J 6ͲtU2xYi"OWH&'#kEV}INDz>ԆlSqhe[*`7_dx<ЅA߂-{Xl*04Tng(?kK|41 X_|xº JF"}\{*7nLR"qׯ`&b2Ku-jNT׫VLh'5 ]htQ҈al8~,]' }օpP,U{*dXQ <#ޝc5sJxi7 4OD?̴UIyiRQ 3&pqAn#*Kj_F@݉-R=v ceb[]%pv'6(IAfa'M5@[v*0`BSSsΚDIKj(36\}{ݓV_D:5n߿:> endstream endobj 41 0 obj << /ProcSet [/PDF /Text ] /Font << /F2 4 0 R /F6 6 0 R /F8 7 0 R >> /ExtGState << /GS1 8 0 R >> >> endobj 43 0 obj << /Length 2121 /Filter /FlateDecode >> stream HWr|wTJ$xۧu|Yd+D)Rv_x&5U#>}ϾYWgd, iĉPND.x%,VXK!S'$7v"9?3Zq~v'>^@B7&Q}DcG֥w1ug[ّǭ %?KID$OtNɯU7r<⻾t]y{,R(fCdm.l3Fy6usky*MRgeALoH\2ΨgEy3 -I-PU9y0uޝN jrYe\crĻ}KnQEU=:-c,;P{x4nj{"J-58 P" `s頔 Zܢp:ܞ)JeUY0z=8 ,:r,rȪg !b)t S@⸬;$-%( HJ~E [Z1N@_ J{j"]?du˟:w{Ln2INYF`7 K璢#K\Mg}y*B- 4ܢ.$ȁ!m]!Wzxeq]V~5{hWg |EժtT*{ij4L~$ZCTYn*bD7Pd.TTK5JgN*Y 1 BRmg9o[,nڷ*T ͵gkYGal.x#ѧ#ړST{![,c܍mƽ6µ^υ]I)$mru ?e-0sGVpblZmK:Ig K8!۞lV6)W?|ꈽ1'&a+$F$IB˺Q&YE;I\+)̂R ʜԢ= !uCbwAtT<DgTfs,aȬt0pldMD%$@a+"_%y*0is:2i4+o"kSU6CH; QEw}u&`'z GL.0^:%3`Xuj% ,vw7L9_GWu_!DMZIEUH*Hѣ}lbW $P3lm2LovfFp:^9M}:kB޾,$X [78?q"Q ĝ@ʘA |PA:QM.֛&ƘTh1Z\#}ј^ WQ `WAFwjntDJ uuTQl~.BkĎM)p81~@,dQwzW~.x= VPZ|Sڤ,QnzE`w3":~fl1eǪ}2;A źp"ՠy2/z7 a:27t=e428nٓ/5t0/eVS_:|*;[unI%ձIҪAaQb9Dz|Z|- 3f!cA)!-e7Q;-햇e}l/VcB@E#v=WޞctV6zNl{pgzɑ_7p` RWY Wػdmk^֫ T$8ֽJhuU2yN{;23;w ٻ{bڜew8uh]Γx/%n2L&Gb^<DoSۧ1I endstream endobj 44 0 obj << /ProcSet [/PDF /Text ] /Font << /F2 4 0 R /F6 6 0 R /F11 20 0 R >> /ExtGState << /GS1 8 0 R >> >> endobj 45 0 obj << /Type /Halftone /HalftoneType 1 /HalftoneName (Default) /Frequency 60 /Angle 45 /SpotFunction /Round >> endobj 46 0 obj << /Type /Halftone /HalftoneType 1 /Frequency 18.75 /Angle 0 /SpotFunction 47 0 R >> endobj 47 0 obj << /FunctionType 0 /Domain [-1 1 -1 1] /Range [-1 1] /BitsPerSample 8 /Size [33 33] /Length 31 /Filter /FlateDecode >> stream H TQ 6 endstream endobj 8 0 obj << /Type /ExtGState /SA false /OP false /HT /Default >> endobj 25 0 obj << /Type /ExtGState /SA false /OP false /HT 46 0 R >> endobj 4 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /Encoding 48 0 R /BaseFont /Times-Roman >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /Name /F4 /Encoding 48 0 R /BaseFont /Helvetica >> endobj 6 0 obj << /Type /Font /Subtype /Type1 /Name /F6 /Encoding 48 0 R /BaseFont /Times-Italic >> endobj 7 0 obj << /Type /Font /Subtype /Type1 /Name /F8 /Encoding 48 0 R /BaseFont /Helvetica-Bold >> endobj 13 0 obj << /Type /Font /Subtype /Type1 /Name /F9 /Encoding 49 0 R /BaseFont /Symbol >> endobj 20 0 obj << /Type /Font /Subtype /Type1 /Name /F11 /Encoding 48 0 R /BaseFont /Courier >> endobj 21 0 obj << /Type /Font /Subtype /Type1 /Name /F13 /Encoding 48 0 R /BaseFont /Courier-Bold >> endobj 48 0 obj << /Type /Encoding /Differences [ 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla /eacute/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis /ntilde/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave /ucircumflex/udieresis/dagger/.notdef 164/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash 177/.notdef/.notdef/.notdef/yen 182/.notdef/.notdef/.notdef/.notdef /.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash/questiondown/exclamdown /logicalnot/.notdef/florin/.notdef/.notdef/guillemotleft/guillemotright/ellipsis /.notdef/Agrave/Atilde/Otilde/OE/oe/endash/emdash /quotedblleft/quotedblright/quoteleft/quoteright 216/ydieresis/Ydieresis/fraction/currency /guilsinglleft/guilsinglright/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase /perthousand/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex /Idieresis/Igrave/Oacute/Ocircumflex 241/Ograve/Uacute/Ucircumflex/Ugrave 246/circumflex/tilde/macron/breve/dotaccent/ring/cedilla/hungarumlaut /ogonek/caron ] >> endobj 49 0 obj << /Type /Encoding /Differences [] >> endobj 1 0 obj << /Type /Page /Parent 9 0 R /Resources 3 0 R /Contents 2 0 R >> endobj 10 0 obj << /Type /Page /Parent 9 0 R /Resources 12 0 R /Contents 11 0 R >> endobj 14 0 obj << /Type /Page /Parent 9 0 R /Resources 16 0 R /Contents 15 0 R >> endobj 17 0 obj << /Type /Page /Parent 9 0 R /Resources 19 0 R /Contents 18 0 R >> endobj 22 0 obj << /Type /Page /Parent 9 0 R /Resources 24 0 R /Contents 23 0 R >> endobj 26 0 obj << /Type /Page /Parent 9 0 R /Resources 28 0 R /Contents 27 0 R >> endobj 29 0 obj << /Type /Page /Parent 9 0 R /Resources 31 0 R /Contents 30 0 R >> endobj 35 0 obj << /Type /Page /Parent 9 0 R /Resources 37 0 R /Contents 36 0 R >> endobj 39 0 obj << /Type /Page /Parent 9 0 R /Resources 41 0 R /Contents 40 0 R >> endobj 42 0 obj << /Type /Page /Parent 9 0 R /Resources 44 0 R /Contents 43 0 R >> endobj 9 0 obj << /Type /Pages /Kids [1 0 R 10 0 R 14 0 R 17 0 R 22 0 R 26 0 R 29 0 R 35 0 R 39 0 R 42 0 R] /Count 10 /MediaBox [0 0 612 792] >> endobj 50 0 obj << /Type /Catalog /Pages 9 0 R >> endobj 51 0 obj << /CreationDate (D:19980522165535) /Producer (\376\377\000A\000c\000r\000o\000b\000a\000t\000 \000D\000i\000s\000t\000i\000l\000l\000e\000r\000 \0003\000.\0000\0002) >> endobj xref 0 52 0000000000 65535 f 0000094166 00000 n 0000000017 00000 n 0000003729 00000 n 0000092152 00000 n 0000092260 00000 n 0000092366 00000 n 0000092475 00000 n 0000091995 00000 n 0000095073 00000 n 0000094254 00000 n 0000003867 00000 n 0000007444 00000 n 0000092586 00000 n 0000094345 00000 n 0000007584 00000 n 0000010798 00000 n 0000094436 00000 n 0000010926 00000 n 0000014224 00000 n 0000092690 00000 n 0000092796 00000 n 0000094527 00000 n 0000014390 00000 n 0000024203 00000 n 0000092074 00000 n 0000094618 00000 n 0000024344 00000 n 0000066468 00000 n 0000094709 00000 n 0000066632 00000 n 0000081825 00000 n 0000081989 00000 n 0000085355 00000 n 0000082255 00000 n 0000094800 00000 n 0000082521 00000 n 0000085136 00000 n 0000085405 00000 n 0000094891 00000 n 0000085498 00000 n 0000089096 00000 n 0000094982 00000 n 0000089224 00000 n 0000091426 00000 n 0000091556 00000 n 0000091689 00000 n 0000091799 00000 n 0000092907 00000 n 0000094106 00000 n 0000095226 00000 n 0000095282 00000 n trailer << /Size 52 /Root 50 0 R /Info 51 0 R /ID [] >> startxref 95474 %%EOF ga-5-3/global/doc/README0000640005473000001440000000073111423627743013473 0ustar d3n000usersDocumentation for Global Arrays ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - user.pdf -- User's Manual for GA 3.0 in Adobe PDF format. - Supercomputing94.pdf -- The original SC'94 paper describing GA. You need to use Acrobat Reader version at least 3.0 to view and print these documents. This program is available for free from: http://www.adobe.com/prodindex/acrobat/readstep.html More documentation is available at the GA homepage: http://www.emsl.pnl.gov/docs/global ga-5-3/global/doc/user.pdf0000640005473000001440000361301411300316052014251 0ustar d3n000users%PDF-1.3 % 1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>stream xctem6۶mWRmgǶmWlvŶmGݧ{}O\sJƶ1['zfD¶ ; 9F H `L$0"ba!b!sw075s"RQT/?"Dt47!>l6NcE% @dbn א'U! ͍̍6j"[o?"#[cBsdvBБȀ`dp3â#8X;:~L lsdKdncdlt}9~KXm휈ʋNfNv4fٚ|K9o,`N6DNo-!7pv41/VGoo_qYK_R郹#ʄۦӷmSsDĖvs8+AT ƶ6VDFY[QϪ@Vk_#K9C9[YX7/"#H:|w`bnQ `,oddFdb`=m'gfw)Y|O69 _snɿS^~GIH֍ȓ{YXq|[df )c`F#"'M3JN6߫? s{gw,L\le5q_KpDC/`ki_X' [+u&>-mݘHg:5:lX?܂ q5] `nkQn$wAM0ϓz1^^ʲ;_E! Fq5 ם:ˆF^Cg :|eY+sW#HKP<:ς`%QJN8by6me_+]_;*O}/]Au6M_mƦlwT1<3 l.!y")(\1+7=\'nVNYڭD1$UEIXC VCmPYBu]_ ^6xj`:B<6=p5Xy s6n!t>TL~e ZzseB\o|Ugۀ/\ t "wҊ?8'N4Bf)#nYW dk8c*(R je{ Fzow$`EQ#"RXנmEvK@ c,϶1{X6TC\Fon-5ZE2EÉ', 테T@Q|]DiU  XLX;ADjN<(U='@Ogj| ܂2q|1)CEi"tS%I?bT-q e@h1di!V`sk"5$@ 61$@`θHh} 4n,,#&¨6PW٨xAoDgD$!.VkdxWziu_d׌9OMBޫ8d8Sq7`$ DG㵒IR XoDꩋh Χ6Hn(:mYZJk:Ȃ"D;߷ˑqS_5$LEgsʂ 7'o?Zl锒ۚ-Dè[G/ >Oj⪣bj\4z {RP=O%Qo_x061gwH{k1=pfsU[ݠ97k8 bt jC'.0%3/B޲;a[cr ) T9pd&Ra (= 'i= ,\)s{RI$FiB93y-%ckALґ$ZJ{3ex2V'(}g#63LdEךMmAufV>(2yu^Rn[89Y P >*?TWVwP pWC{Ym`q̵ kޔ;;44"`HKW x7*#/g7zC`|izB`"n(5`hyNMq\pIV\Y_ѥtjbg˔c*KXЈ93(f[+B{RF38wF=@KKBmà3Z(hKwQ* s<&kGb0ѹGB ]qoyŖPcju2ي-W0HSdVc׮B]7H&31d/EU. k0j_@sېWSbeJ3Ww# {I<_-(uő6F<;r- _?40vu+ dyn+M49DJ"Q%BVP5u6`k$'0nF4 fAf>f(` )h7eX2RU{NN8?կHwc :|/ ʷ9&57ĊU>".H"J}0xpN=[7p>1{h{4_C XiIEyпYd+ o=` =KQӨ:8wo`=r`'JTF|PSCXeoΎS{'͛$g@W&9JYSgdLɒf:s%_DII 5-z3;ќB]Qח1,r~ q}=n#/P$zv+| Hѯ,x}h,Ork"-dJz0ْL┹ %jg!2608>v`N9uӹR[ID|k.k~6tX;Ej&jʡ q!U^7^*P%nPJM1)…PcC+DaioE@ϵԏsd~y:ކ+TszQSKC&Uf:rȾOښB!f*x]毞FwJwƭe[3Е:Yg ! r抏YٿSeș܍}Eyi/8P3M@Wemp-.1q1r-,"xcow5%ǭ T?$а6\O*?w؃.FYL RoD GgdmuD-!F{(\k?qIx "d72Ed+ :{|GzYV޲ЗvOpl©>DwjxPUKر]ȣPPڿ܀mx6EkF*)g'9B@7Aq]bp!@LG(oK~wƸ)u/%>t!ijp9v+ [Aa+dą I$QtK '98we8J"~ꆸhqϦu!!L@Mߧ tUpQsG=_]h1|{0 qZWO9~ 0N|<z=) V}&qřwtPdh䴖xM22 `2,NeguXp#6PI[U )l[ouos1:* qTe S)Mth)wL+dyJUoSwP|zcvkW&Va4*Fʶиm$YɌۻT'=MlOmxuy[6Zi߉`$m&{i F* zn`Q%eS5RoGzTb1p 5juG vq6ѐ A HNщO^(#-IF?;ٸj#&Ccl.oŞ(:ɷ5@ru56 e7&Jдϭٵz4=<ֿT~>/UACGpp OθTK<7qz8gܼ4nK#s pRS{Oxq1ʘQ+n+ܥ0+zcT=_C;]#ch"5mʱS$%}O2 >3[B7Fއbcirs0#B^CI'x/ R33RG;vWԃtmg 遥MGɰ<'&QG>nlDT}A,!\p9eeW׾B$ ܌kjHz-3[CI.caw vnJS+iw"VݲXkL+|6\HZh%PtLvjy5Y1rV-qM!l+u2t8If;Mp3J3@;Om7]쎱Q2&wsj+_&8 H+к,hx|1NB D)x'{OSdn]h1;F6PP3u Y3 rn>:ŷS?k)+BeJ$z"Ѫ6thp:*Tg^qx5УS bMOԡr8؅ewN&'F)`džXo6!L҉quh;+ͧcĈ(*(1LKܺV(Τup \6Q׉4itН?=)nc`}a ΅ !o %_h/ra=h)zk_Lb= Z@#a_18^XNEI@*oOjO^IƪXv~E`Ts$[+(PMmAϱSHJ"+(o~#I/|JIE qr~pJڡfEՂl2#vg*S? f! xT և `i1UuPZb% 8B})߭ݻ;4p='ٵmW0? w泺P3]hC4hNksIP4 ڔ^~VOmrj_l`yn  f甇o֖IkzK>-b".'u`ң.3<#A\Ӑ{3\+Q*UCm<&%$Ɂk8+>"C-j푍I uҪq!o;f\q: .SI$#sq@HԇHRЇ_F%EVsڔl-'z)G JeSIirVRXU3TmL@ymSg %E7_?0f򧥴@.{~a]!ą;Ot+2;CS-b )'l 6Yv` HtX=~^A9H,ǩM|MӤ|hkV>~ESuJLZh=~nk[f=4!oVdh2z V7=zšv05"I+sm;EGro` 8E'' HuPXzS%opk}/R@(1=ĪT꧒Wo&7Dquz|OpStG"e;A"ԃrR)uuz,Y{elw+י0$JZ=V&Ͷ4U't a#g+/5h,_ULW˜]Cӓ?Z!k-fiu>lqx' SX>PkZE#<_~EWr {@ $9h\|<锩j"‚}BUXwEN=^0#!%=Z(sVJLc̹ړ~L6Ъ{} na#fKkۨE :+%[ q-;]33Iu ^~cdZ(<ʼC>cL@C8tŽ^JH1δE#5&E[7\Y}g'yh Iި{Hhb3u,4 Tg!-Uխ%HaBliSm3kvOꨏೳuM#ئ#dl^Ngl+LUEKg\o} fM9KF"[(ȿ/ oEDj-o.:c=@Ky@~֠~\XU%aJ[{u4BbNܣR^!0\}yYi| [V'S+svջ<')[p|g[\Hot9!; F{$, .8uw vBυ;vuK6}⍐*Dv57{9/hSc% @H6.jky@պ 'di.*1nHL.2f_>I r'U2CӇ;;g1 Sy4$x*q$2zJd_= ZHw~e¥X[m\eՋt3K%5*BS>{AܵupٝȪL_=潳.[i!iURѶ%ȧNd.i‘U\~qKc0I5YRA2:`+O/lAaQehܦsڸ,|T_B~9΋F(BD?fP/F/ M< c0RiPu { ǀ0BςoU*)?ˈO/gT#"[Q ^_c|af[7W1*=!RHz`j]ҌyY?FADg6Ձ4YQ]xo,6䀘1/[slRڕ}͎9,&^H-JdW ~cs ev'i& R'~ hr ya/( 顷awSj_ A#zL%78 o% ujX2aG <᯻jQAĹ2>Jk ~&?0ڼ/p򛔗M s$OZOk8f`nT6 OE}Vb'h֗DFA޵ӑ] W&Gb)  /TT,JvF-4?f ̋c*ggH\n1BD"AG=nB7a8K[ 5Q3Rv[<ϟX|ҳ.{@bR M̲/˓,^ fX&aN̮=\+V`qrڟH*idHm5 `0c.~yM*a[s;HK/}HcؚLς泬Ӵ{Oy~CcA:DF5iٝ`k/p=l׺U|4~iddt㊫*XhCפz"ІRIa EJTKm: 64PV4 Y1gp+6v_M }ޝv1$ ]_e= D=hK^k*q4Ĺ}JǞ}ׄD""v1s`pY(@bC)\P4XPt3χvj_#yf>;I)#xP(& ՑSQ!wWUIYw]n"UX.]i "s}K$3 KYv{;G+t7=ht8eJRXRw?2fdpKx%^e/l:e- ].b~0ɯEpNM~2n9x 3ԄguM/PE@Y|CU~uJl. DjH? gphQ^k>~5!Ln,kOlQA^@|1a؜4=gjFd: }Ǫf6: {]lڂ2l KTt և+c=M*+"tn&Ae&/v\ y5QE:Q˯x5 ڣL&NM5^Zג{}ȥZ"^c6g⢒:abH2><](9RM5}2{y0Bu#u}V'* QYidBUhC$XL0"X{L6^-U5QG|~r\c* d LRJvtA- q/1L?끡:(~Ws!ڂ\9& cXiۮ8+ɷ<@hlW9™Q!IeU0fXgџ_koˀ`okCPEi6H# &-b-x%2&z[؍  n"\HsqOka Ip#BNjo[ S4\86ׯ0m@5y~ ɮq'I1旻LO`wcoKʆf`0d *y8ٵ/Y1$t^!jLM(+bVYȅ|Ђ4 h|R\T[Ԡ$Nz>{d &]1|^"W%e2O&Ҩ澦f}XSMI_ S2U S@ Rxa#' Q?j¦PAQ\Kw/8U- zy'QDhj7rr^; 뉤$hk}<#X~c0B(0"RU& E| |R8Q-Qoc^LT[vG̗5*^b&=8a4fTT#yPO4Fy#WR> 2Pg7?nVp_f;T݌0a{If#BG -+b5^,ylT̋YtxY(#'|l!Kk ?QIJ]Kx]5j F' Ҁ+Ag't,;0=S&1N?E{8"3wnY`gkuvm1 Gz{D;A (V;aJ-c-3yɫ Nx" o&B43B Y*Y,G} &TH&#`>!aC?{I?áE< ۲ 7M 2znOעÖa+mת(De? G,a9x 3SV:.?K*4J@l1oClݭ,+pGhy#!Ugp|pAOANj0p6!lR8ӓlv}ˈnԘieT_$4bC3#:H4  VRLID 5D&͘900[`Ya*fzn*]<(v_iv9xJ읜UoJ~ʋ#W}1d<&iԀ/<(g c5;OuQ&wSc>"?uAOݽ]"YSq1]^LqJh#Q^!I~I.1kmP@Nu jG'V,6T-9E>?P@(n,\ Or HވIS:G`l ;):c".fʳI9F(hCT6}ٮ~(H˂ލiyݴn&4P;̏ lq:ਡ]LR1sS[l^?i֔ %toB{|* giu s2aI3;-Ԝ/9oV؄HH (<7I+DO3E:Էv] ?/@ @rKV|ՎHq#Y 60G5Po/9mʵV~*Ϡʠ =F?%Yed.|&"+]@hTzc3w4Z&g{Qu0bwlPZ}M}Q2i5?A\O=mVŝ\8W+29 =/V-'EDE@.]><˄_TBE❏[=ਯVBqYm-jvfА\2)B²gB̑Cޗ5 ٰP=X͛oL.&4~8#4سUU|hTy۩XЃӨ@FFra rd;sU5@ʿ[0$y(Pд`pKGLEg |8d>vo2Ors2D:)K&wZG>v@9Qj=PejŮo Qyw]}p,cܥ[|O\Afk/HO,8{d6n4 /z57:&"Nv< H$aȀ37]Eb[ێ-J wâie8Þ+Z]EJl2"`B:C-be.)7@h ]K{2kBϤ7sE|.B6lHOYc٧S/jFoKpCmvVsEi  ndy z#x 1vyNWD#;JڀbXayEC/T%=C9C)Z<'I +5S͉V1L!|U^ 㚇1H Py6ӿj$%܏ei,# Ɣ J~%$ .u,946=C2Uk^'S=.XB!2<ܰ{EMb)]ف=(O0eCzr.'79%j%PRAsIL#T1cБ/d 6ggT|N֋me2ۛTXG5XT** )¡$&ҬԨثe*fR[:*{W NpuhvS;&>5)zg>iZz%D"ZjPK['dq?zSB9=F;;1H E/1ppbN:^!kd s%)q?Jgy&L5h/'`XE;TNJEy<⺛lw 䍦{vo:7ix+_a1tm[2&צ8H ?lޤ&55LjM&Q Ń,{44D ijz$-{c%tK,nI0rgZ9!dAD8! fz˖1=DHNy*|-Х8/4cvS&[w @b?'CC= *A|P"GZM7A.*E{t~0oyO.B]ZͥG LpiֿY\P[z6mz70J[OZtg^ʌ4Pʻ>o5@Ni 2yW$$\5c1^p+@t2GPṮQU<'Mv>CtRɰA$Lt[/t- `i_> ֥~@z;G/syeRn_yG9wq-(T8Rp9t^Am" ]J*G[T-9O=;-K7#" Akd7,TL.!lR#-϶_f+^.HRQ ^&N9gvK*h @EQ3&aF6G~0>Hμ#Gl? &ƜzJZG-?UTa# ꮟ&nk}(Ջb-`Ui׆KV.K+DJ2 t6QFĎ@-w4w'Ԡ.NE٨}E`GWS|Xf#ק~'wt>s&m% )":;D;5qDj=`>\**ag,/ B&rƵn(:,TiL%)&}f0u懡D"WI{D#BkP9(5E^-~?/_ZEk˱텚Ep6?\HX<۲8qh;Ќ@׿SYnWL xa3lOum2z+Zc VA`[ 52]sW#GC(Ԁ{(1Lc[ɉ!H }m"WXYXMB!70w༈О'#y^<54wn8"|i6-練GXOעJzP!yz=7f︶G*Ĩx$YT*^ZÑKfޯoV /po.HYjeω/2/Vy#F,T{њtjOU`ă۫/(ʹ;=ƨ<̳SJlh8G >ZMK7y'J ^m_ОyQMdz<5\4pM8vZ-ADRDe"apK;_{DMgďƨ6ZisiUWQN+I38iF ĸRpm62=8M,!-,`[„z_8$?OesAeUU(˰ tr{HKYK8o4r{\|@ܶ(Nx/꽷'y+P鷧"_$:]+~3gq0#=O9HE(FKFOIϓ28 vА0Rþ L3ev)J6S!Nw#*vRBUbg65$a' AW* lj0lZP{˿)"܀d sirͲM~tP.i'єdjxrጱ5ܼ\N93?Vڭ.A[ oM\) {[-#LE=NfڸˈYF- |yMih2}V_iofVab!u~@?_,%)T*=|Pӎꭽ]D*aPzF9ݟㅲ 4͐>rC 3C]&r ƵLOnEgE%/ ݄-p[h-AQ  2Arv:ݼXh6/NC=ҟC UE%&`u){ӷ?xѾS;qQ@n3VD4SpN }ɾVF2&AAqѯ!W u {GD n*}p ξئXu<^Hk`B7]$ʫQMfƖ)JeyTCf P +"gob%7g$T{_] 9 ы[!i!"PD6i0)"[9XK rCR` "bVˏQOO:eJEG^km\)w}E%P^yBz~WSR_#Y@7glBStE]U X2{NƓXtF1dT#-ܻ+6>4;q36FL۩3^Bԩ}2g} (G1Tep"݋}a35줩w_`ذmxcGX| .1D0XN Oq*lTD8`J4{u2NpUfcu"ݙ^&]p4jE'G[#I=Fg뗨שs 7QdϽ.\Lq6NLCai#ݹ*ޞ99 n]<$ʻ2RW{ ,0.WOۜVlN_`+Gj1 x.A{63dt&3|_xF j+@'8o0&HY!/jX,'xwѸtjܔ_%f@,_%_?["V1$+uu3E)b[H9?y$[G1nWHN˕g#O. =)(-@ U#M=|ǧfr )ЗVqw*ܴsѺ5W"]P!4IG؆PvۮD?3o-a]~(O3[Ȣkbޖ/RV]eNmP WIfR'vۃp#!\r{.@z&(_k/dINX'W7X˜o2kȵVJi RXiRphe$ңt!Y'(Dצ >1rQrM&-̌e-`b0=XQBn;d2lM܃'qw 6US"/H{}$f3z;Hb20꿩j&P95g3 0E$5D&46iZ;6DUtsR+%,ӑ'33g[j\SYgkq2ZMZuN4?EkdT5"u*fdIJ~Ԛe.Xsvk}`IZaa4⦞YuLc"'rp?osJ^@R}eduK!?v=R^ɲQN2=ɰS4<η1OR ov.zF@/n}X-9 'ay7ܵyQ!hm&‹䤚l5n]tбסdt혔=A.aMNC{o<-9 F=-pVvwc&F䋸27쎁'>O#n'A;2IG`OV ?8WvICd§-MHb6 H]4PᑐhW(2yorqG<؎Sݽ:=X7񚋃:_eZ8hN#,u4J΍jU/c?v9 s3[A!fb?[9)0+&/Ï#YaqqEIv6ST ]Mra7f94R ٜ\۪f7޺J9 QjCPҖTrz1vb71P=12Up2 [ۦs69L~vbK@/XGTkv0ATNZt!/fO\28p4u؁˒O]u.\/xm\˽X'?ds-_DlQA_I1tvFv3x,_ױ>|þ*^z &Y!ENxd.}߳@"4z5gvƒzNMh0O9\42EF)xߕZENc]q1צR f;@ &Fˀ^9KŅ?H̷IC.vÜ6P 4$~]GgQOv<&mI$jW^,&;[O` +gS 0q,>‡ GXM ͮ K;񪸐ζ4g*ؼSXD<rT8g ӏY8sz{^(R XCvVҧZ_,#!<g0y|anh6$6NZprfY{,XNR錐0ZM>C :I.ļ&:roq>M-ͧSYR>vluSXbbdbkp؀m2$+tzg+EgX@O*/1$/l{hQr%,5nẉj|2BviSvVaPQEK/l`U56#Q{d(tCq^N87Of"̎nA_4IY3z݇.wl̸a0S"s!$ 38Sxb`Y,\у@pi.Q CP)łǍݒ寴BNbrOH$UuUj+%G1Ӯ\"˜nY-=}s광 [ X|no]cf"MF %) ybTH30@w>S39Mٛ5mG0"Ʀ`VHݭ{}j!ӖϦ܁RIYJ /fɛHlU,? 3cgjѷf- cwkX vluHr,?ԜTkmt;Cص9BHII]sNZ}0bD{N 9!G|?sxgn%cއݚqW4-MHziO4 < .>&1%h2d~-8% Pء'˨2`c8u{e~j }ӿ>HGQW61 ICc_B\W)ٛrl1#\I1&4VF  3%Ɠ2ڕVPTgEfaŎJO_32*qk,0Hڳ?- #hI\:.!\r6F*)th'):AOXܑpG?5ļ_0 b۬_XXWQ߱iܶV!ʲ{/AU8C^4.5.4H.kL*(NbK`k_u11 -ӲsOË"р>פDԖ ļ(F?Ε =CUC7_|AǨtԟX_f*e &e& Zd[F)?d}* zpq/,o=f,0zH!+']a]( Zc7BNVݦ{ElŽ3vL\beeP`ry7+ $+ PKuIQr!x4|moP%$M}tZl>/d݊gז]`r2Ih>>,3I8P1<..9E Ջ}zC9^` ]KKVvn.pp{p! $8?(ǩ?]Lk|7&U#O =5g䑐vh79:m.]T^5o%mgܜ>t?)JE#;e,gA`?% }6mVt[+Vc r9F$VVeސ%DGAH22cpW;TW}1 DXypax ZNo9$DDf>zY!fR4͐4yޏ4H YB?fl=6(D~OkR,t+:k ,Q=CAAkD-# PL iݪ4LcV28JCI=emV5rY3k[5'.ԐJҳ&AT.DwЇ)g݇Xux' /zܱ/l{ pа,h0 $A:M}P)0vd6%sZ])Q'ks4؎8J ItÓ6jTہSW^6;I&L*qXHE?׷M2Qx]X)[bHkbQ9pvJC&bdi <<x(ձC1fH|`LCF?S;6(noZn/4EIZ6_]hTeJG8JTw.@'QX*f%Hh5՘dB$̐?D\'als3NJŻ/+0'^`dq:3G/fR[HBsnGie['P^̧>`g*d/vΎ*PẀqn} pή(֭"x[_@ɃM8u=OўLiY%b_䨵KE}B:-QAr͒*EF5}1rm =pB/]ՂT{_z[pNk y 2*OqC䲇,Z|xGch-K0bY<0~_TK,<%T @n;U %Hよq8Y+M+W20L>n_ ڇ$x\\2jHk%Vc<5C&mq/߽s(T2lPM.t FT|_v#f8M%:)O(}ĎTSK%Er9Ծم"@ 'QB=n!!o`D:L>2z}9ʋqsI28ʩCl}lal$Y8pفO]mQRi3YFAq;kGh3t]^Nl %;Ǖe{j=ǓPBO_7T2F T5ঘ6Iga$Ѡv ؖg7_g-˫$P-ЋMνH@\7tRo&AAJ G'[ѽ huXsD(rt\l^Ei0J5 KvE8Yo$;rGDn BdDG)F 髽*8R:%x"Q;;,a7 En;_@9U|ERO[?_Qu+IXz% Gete>$g1g=w}:,LV4nXaQ]4ơu'1'9%L# H-;uz] ]{z?Ixe 0 Ù~ݺ'=Რ;3.mJagFJ$%nլNOipPDxOF Y\`}%Nx^öI@Z\#[k,i`C3څ|():wV5*D١9f#EcJwIl?WY})G.5xAk@@uyeC DCoo"KnE[OStM`(0^5)ѸG (KxGwmE`COzѓw`UϩVN #t(Q Ğ>9tna% G̢{-+rɠ|<nn(n4D$_=KLS?V!wlcGFp?U.Sz_}.,;{LVLkFm˞p#׿\]efzay2x `4Rկyx.$:_=9Tg؝hoΡGJI]: >6 p i;9ώCU29 s|S@.EJS?Q0}]wW.OwӐMUfXpµO l]1w| +JC.:M ,˾RfSsAUPk;R|cȍ0"`g/F#Z=Oqԕ ŷ猌 ɔ@&=4<\dwa P$9A dK,ZÏFGg(^y 9=E\KT7ݦ"| K>n9%7՗C9B=G#_#!t8qs-HhY"cq?'ԛ\]Nk dPӮ_({OC 'ʠ>C&UD&}c ՠS^f#=#k5EC9r F, ^˛GœmcS:ގC-MI` '~u?\f1Sx%wCϧ%-yL/^% G:!;Aê?bEFh9Fe-þLuCD3{5AjE?5@PCB9j(q,Z' 5/P&!u)O/xlY'_%=sG35aoQ=,Jp3_@HHs2Gb;%OvEJݞ$ȥx>IQ,=m;9gIh>\r{viBAXu2H^'f" [3)nF<ܭϝ l~?7?WPrrwj,Bi3Zim%ԡỏ;.3}<9`<~Z:W Јt2aSfhybnЉ{ %Z3~%g9ԑ#`c(a켿@D'a퀟"QL[!1ۧ넫-bOXb*xLY,{e ݥ_f>d(ڨ^w6:iy ]!0B/yIbnF{v\hCbQ9_-qRď)NL F^'Q~uZb}XtRz(n}Y湷Ye#i3LDlx ׁz8p6SMhJbzJy q˦Gg*!dl$ow'wPKc%J],^+xx(>l8N'>>H*bB5,,7{ Ni/мPB kM )mm .pzN>6fe?Kd@^&ܞ kv71t SwfI G# SpCj":zKNo:rNcfb!ثJ֓R+?q@+X ZĻ: Q\>>›Z(Qӷ zc/?qRON4gGQG3TX(tK!{jQKˏNBը~9]," qSB rXF:͌ݶkƃk@&Rjul1yO&P罨&δdJ߰Y[qL2]N:s獭,0$bK Dx2ۧ{߭#u7dp$*zVS3F~^Xqg"\A>g(1r#ܼo%/#6.8VGl9iW$% 3n]*fEE#ۋ&n%gF xY6OmA2Ǽ+瑷qܛ7&`}X7S· Rﹲ'|x&$5yDʼnfas쟀,Lc:B3M*HxS ${NR/9" }AMoRՋ4Yy++ &^t.|IÍ<ٹb tZp\ Q"?xP*._vXBhhmY$ dcl{ e y{>g\~6}g^Ԁ $(@ϥsQ^o2lIZ3 mzVEkY51_eέoA0g /5f+E7dO@K*p05$~ǁQ$We$ #̈́y,D0ت =ح  ލ@Z~lݳvܲ7k@:u:8,H`r uZ~f8m4VMSw&@c{b۞_l۶m۶db۶mۘ`?^lW}4f1[~+<|:YV3bNjxv`fR|i.CZ %I&5cޡ]W4Ī'B&fF '&-]\ ޣk7*RUp_)EQVW ͅN2#pӊ%find\ym&%Қx-x6J~+$:Q!Hd^?rk# fdJ:}! Н1-`$޶dHZNm F0h$)ekO|z5KfeUgONU^g RaVl,\CjN4=NPpx(U9V&Wt:S*0ȵB˘A{ήIGȁ&+uZNp'Lx8 ?=6Qbdד;W 5XiF淊M' 97nMpifB z}g4y?wG*-S'dlkA#8U@#a$$*:}D/{|Y㶶LNoPz҂4fSCos6a1.L4phGi~"0'^ =pcq 9QMӶ},g+O6Ơ4} N>6oչ?=ޒWV$׻&Cc`Hilr\ɋL>l}9? CeyY08Q2..IA)h<-?k0P6_edlX orFz"J0~8o1p=a |* /'MxN,>:e>( u!1wV)鳫6JΗKe#k:H:֘ ڴ.ze.wW͈87 ӴPxnyZg-K\YcLVda~@ Ȓ&GBɾɩDF1USyowqR+PS|r3Ea׆7^Sm5-hGI|}[N#sⳔ H pY9z?s8^ 9_׵O#O vXHD8!X]0Y'b!W~(κgb|)Ua?C0F!uo̮maA8}&ʵ7\[OG= "!&`nJ$~j8>)[v葢L}XqzԖ`Zd$eLjR(W>WE.*w7w?O@ yc=mz"DIZ&He#z aX E#*gtBnR!yQ\_ez[WB%x?8GQQO5LZ^?~tPȻ9*;wrm?k֐k:/ ʕiWkӮ{a~j\&)OJT3kHp]We k PRj /S듼lQ*'6p\ <1z FA*FY/tia &;*TU]#Xی>7%&$/!ksz~\^3-X^F;L":hA#4[R⃔He!x- ~TReӉF6* {[Qf{N75V+I6kBSqw' L:&dUCh%l q/-HۅؾvW^ Emg`kR[+*=gMe O3+_9/HQP7ZۣF$0*U]dA9&+OEEZ(]qґņ Hb ^,8ATe0"v>{Z?ny'|:y=D`sU W'dP߸k y9B+9tz@=9_ˑCSwwq-1KI9Zo=KR̢ ?>nŋ*gFTí׈P2• Vgjk+?qo >Ji k \=eJ'@% k/`pF=0xk3=cerN;ȦAXًKH/LaU#$NH׾k؟fG5Tn>$Fz1A{C_ѾY'x)N~J*0ueB?=|2n!zv^{Iwfjq$c/>f)`*P.ZldkYB{׼03n&Ný(6M B=`0,9b5؃86yNzζjCa$`3^| QrϞ9<( Fa%m:y7lnzĎD r+WֆHm]*,EaFۂXƶgX xΏ)rE)Q=`Iĥ&vQu&?RI<Ŗ%.,ڠG2m%Mzlo!8yx|63o*JfϨ7 Dy*֏J m3YW T!&ʷb0J±S?*hj|E6_!WS1ǃrc}d7<l׊?'x" i+J7EDэ,㞎MY[,I:En{ m=cq'`Gf۪>5YR;l<^s5Ri԰S9OcNvӮXyt8fjS؋3(fs͆BA Zd;_0.ˌW:@$m\L=D|@sV x!yIc NP pni9ˈ+oQURBW0s`f9[jNbW*FjzL6333ϳ^8Õ.0”">Xؓ1L~AGk޻>O~gtZ t}+4u@><yEYYZOF&tB$]vWޣ ڟهΝAoE': ɍ5RK gƣ[DO1`s3>h^.x]gzkyprR|hKz_R bx9n!jM~6V#F~6i"}HGױ[>Ʀ55hk0C64XgA}*\<[W-#BHd 5h}mi AqH;_]`tV(g|p[ >hتAsJ'haR1a:6nG8#\~)Xh-'cBhM ?!C ,)8" -$!лNpq6 Ea'PǾYLW!zD_/amU1+yfe}P9S;=M DX>yg:MmYk9\'eA>YDԊOc7hed Ջb}90 i5y|rQ`yq2(ŕHQXGn}z Iǹ#tKɾa쫽'|y T|1]s$I&C]ӿq,ap>2 0WqvT(vh"𪁲6gXjo+CH_:gOp"ERX[.`,^>k6K?]C(]4-ƥ|̘y(9?%hמ4qw0'vTj=ƒ}%]9_=J m2[80x(T n N[}`Ye*ӕYdR4sJ?(+?E 0*uK9̨AMwxබ:-VxT^=x=u',,t@bD`Xk,GLm al sRb0{ 8mH$K l']Yj''ZwǔT l&5{ۀt=2X24cĪBl+wFIL,I: 3W/iZY"TʸgN:K(wB!,wF\o Rd%y!5gwNԨ^sd6nOѝtY9(EgG$B(l 9Ƙ!g)3#SXV^Lq_0VzEsxpNP>[ 9 G.k2#e,ptrv? iafG=b]猐A4ƀS,f!5n|S.UܰmFQinC mȵ͎0s%b%vO*\P < |+%dAG:0s}LVY9TI WG^j7x5=K8\LBmQͲ n` aͥUGEx`6= .J ]p5C`C+1[L72*DrI3=Yzu|R)7Q3!@rTwvFȂΨqu[,J\>'fTm qNx/I JrD2mr(z GC1Ȗw2cz\[r?ς5mM0YJ3Y-<+=P$B PUczM*AMQz(U ]bJH5,+W}V~!7ê $N؀ϪÏ6M:g֞k` )ܚ[z+ڪK'(qA=^7 `] 3:!Y۸v,PbRJ*`sdx>[6LT-Avu~)aCޝjԌc  T 7<ԛ: A .ӑB' t kn-DlsqL B1rgDcJ׍G6ߤwKmFk,`4Okh֭ZeMb1u5U|EStwYϬ(M tJ0wkN5dK?%Xn@:dZj)wٸAd;кCI9>!COA}4]:[/xbf[L=Ec1ⳅ9.-j R[Ҁs8߸! v0<@z"Sk8ȷLe^4{{#;EAҝ uˌ2g-Z|"6iɠђ"ҝHq̘?>e/ W;)rn|hwsٜ) kVw87SƆ!^?m_Q{55KvYOl ?fb3Φ, !N®pQ9Ŧb%z )A ^o48>̈́7+b8Fu&sdXȏ"DYIp‡,$&z00ĤZqwő] vͼ,6bL^]QzyArQ n5 rv))e:Qe1H!®caonIZl"̰ VsֿJ=H#Z2Iuu| SKBd/MMKt됔&}Ԏ9BFl_6lB'e1դKqW/@ tEs}) %h%+v9 N/*ۼa->&M3 > {BPȊA0+^kITbX&{ԭ,ov#J Vꬿ޴J:aP-[h϶du]H|!rtQjC}=KFK~h"DxqÝJU y//{>F rfht2XM]ހ<-vE$r2:"뫠*LJfWpzU蠤çKX'܇pj0&0 /<";g,h8U+L*v2lk+;Ci˄9udNH96=oQ>?}w1ZCj$`i Ms>H?Q$62+sk˗ŖrrA7uǍ\U_‰Yk/ӎ*xO%G9v/D!̂xNzz7#)tVq7=?%~2!DoZp^~S6&20ST]ٞz%QDPHcM/xlִW7&@YkΉ(pYk]L.+\&][W~TRK~2ump@qDxi RbUQWGAA(堸.?OegmnZhu͆9};@OS{bo_͹?m9Ƙri97ˊ'#lOǫsn*ߕieJU4G? .D@:v_a0*2B-%V9dA. tv>a}ffSg4g~XOkuNE_ک,U>-O-Nu.\D]cb}(Ϥ},Nð+|`1Va|jciH(M&MSk1Stn==(ՠ,Nv18"05$$~^'(w`;^<ُ}45ЅV cͼ!N^IÑd5 eNOPwaq\BcpL U0,uC\}`DESR: jvx.5j0NשJcVgYM^;YۓoE_RhCD ?QyYqb_ uILݮ?d'Xx3}%Ysw_FҌ0AJ4`+v8=d i&en0W9ٹۑVi+ݲv,!Wג;-m¹ S ᖯ7.~׿& ?O?~xt0#JkYF2qWV O^oEm@ә-vGQPubZȚ3Q&cVp+kb'\Otc'Ӭ žZaM9LC%F8RUآ`il-#clCʗ/f_%$uCR-Kx2|fN)ks/207 %o˧ʖ $M?,!Iw*@@Uj&aQ=S]o)ނ ¶OzCj^Xݎ~9zzf#`>*#Ѓ_ν(G;^ 1P ATDHʡ' ;FP$(W|$=1Pʯ$Pfbɹ"\wyԖ/MLkM:n4ez9ق{-TaëXwVJM̈dL}>G̔[{~2jM ݢS tcTD!d4+ժs<Wdw0Lٗ^ i@Iq?*C w`"Uef$ RX6$P3J&6sՃ$Vժ'jlNTsq|pr-#rƮun_n<[Hpzr|qhAa}29|U>Cв(0o_90[ȔG1p*Pꯟv$xh|(ctɨ*x>D]ɓ\ƣXjL[UJ(#3zhn '3k%VzZ4`ɺVl"Jr 4Y^qqqu_Zj|0T`M:K3!,P2hp##jВNe鮳輋J7rsUH?eg)#GT kCf=lbէw~V\e4N Sv$L֢^-ZN lSF\4>ǍcԙJÞpР I=L;'KZv=t=l“, pw-6im T@;l498 ( p?VQh+'v~ds\8:U8rQSb3fE*+ cA:D u+NCVW>#ӱsDYeK_g%'hv62'aŘ.OΈSuMH 06R ={,m:?kB;c?!E)|!Ǯ]9d+V-ܵhS̏˹ӳf1(i夃>d*ȏ2 Z B>"l7ï[ovjRy?~U]*M'V/MX3b.۸9љ" B3u5AsvX!R7U4yR j*ڭ L ` !*@ 9FGHU~f1jy#Ab.k Jqȴ l8,tFD2cLTE=y6p`~#mR?0Z;Bz-QHETJ*ɉ͒iƲ4d~k"p|@{s1 xR ʚ%Ys`e(!;D8AC= \d%o< 671u_4ubJƑ*W4 u?^A~}@n 48"B*D&oXD k7JY5Ja#f".HFޠ& YB ޼6C%Ifi?md%SFTc*B@AAA_XI Qp]nwJZOg1+&1.AemT2w4N]52ۈ Z/c]!IfɅ-@ liNUҥ#G=6u֦ <Qㆼ8qɩx<BN}\i c@WǘB$PAӗsH!bbm@'֙bl#Npu1ܘ=Dt&<퇶4wY>/4Mž)߂祘$Q\Vz4^^Af-J@Enw/]V5okTv+rqfJr]4.(qZu:wk -o݀Z0􏎫8A\HrG)<3<̍J[0]*R"(|;~7ρ@e`͗YG$[%{i؅Lmht"ܬզ49 M,ɸ3dF#J!j[=<"DW~=rhΑ3l$'DOc;иJQ& >ym#OYwt$KȯGC;io}-Ry`uzf'ϚnJ AHHa{^y1|xx ^R'dj!ZTt}li:P(OϰWL/5w?xcUϣ$̞*"ٖok}_eC|8D̼JY\|ˤݩѸșQi^$l+Vڜ@apo=%$8Ӓ{M+ڡȥnսB`&7?GƊwءdAm}Zt/sDɥxLaTS]xbб =QH!%`xo#kGg;G+zIendstream endobj 4 0 obj<>endobj 5 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]endobj 6 0 obj<>stream xc@/회m{2&^٭lM5a&]mdO}c(ITEL FV&>ЙQ IDsōA@>& 4Xyyy(?u=,,AuMZzz#0Χ=upڃ>!U@0e4R )=jbke 2ڻi΀O??0}:!08M>Հ@X G`p6}7u5ǁOg?A>%>y`J. Sg+GӪ 4c p04s0u'X|rAV.0̬\m=?m9:[ W+{ 0v6||b_O@.@[s&VOOVtfs:+A4 f393*3NJ?P_q{kdiwſ_ux3rٸy\<nV? g+g, 7u0gUAf? +'Wgl,\e>Gv-4E8_4a{ZJ'ˊ(k-aaSbSĵ ' zf#kaGL.->|dyhGYahA&U]O`` ]-S;Gu&yNrvҴ5A43;~aFN>ln~q" - |or*\+d<ɦ)f F?iTUp?:C# #%A! bd#E/ d.t9}he)eLP}[-kV{eKARhq%Rˊ~d!20VyײU*KG(K_gLW~{vfxw ыv+\52 VO{'3O3$z8g89VW]s񠟖aSh20?|]Gkn)%G0QpN-Q|:Ӝ-?,+hi!!;sX>rIy % eo#.>=BFl&f73T-~ SZT [cQ;uF⒑z:EB.1#>+hep֪/20q!eXI@DWftZDx:@)n:ݽDP/cϺM]+8AT48%㑠\ļ hlBz 3YACʃ K$y2_qD߯' CYGۍ H\ntwqNK+qM(# 00LKtpǕ_+)脆Fh%y2u#/*f.oK8P>AZ[~|y|.m q3`at Ӟ~HlbGȜnC ݥMG%cHS[OApH&h([dg>%̓ԇ*p1G3u7|foi"eS};T:GzQJ̓MYaךh&Ed8 M)#ȋbՇ-fYhQh8/ڭt=cIsygdxGj}Ep݀R~h'_iC#7+ȪT*fueE!ʣ&cAh^5(.P)1}<ܯmɋg]]  C*ɽL'ԥi~nq:?4 ԘmIb"R- 2=QܨnNT -p;KF(D&a>8~~Yl3Xʧ=ϜtOG@iZ;g~C= s5ؕ͌ Fp):.ju 8p,c[%iOy Z,hf^ai|ܤh`%{%ZAf#d+Qjk!d3sAڐmk_z a[йթ( Y;V 㽼]!S$P]_/6p8{/߇\ E P= T#`=BCK"}{ԫIv[vxPOkD>L$zLi{Tt6,!*R$H&o;j07#{| 9Xskp.} Ǹr2Y lHRoϵX`uA7Ea-^Z(ݐ[v5 & ݕ%$, ) 6lۗj(t׋Y='Pz^ybFWD $'`hJz]d>ʱ\# P8Q7t% /R*Ħ7\G=B$))*큭d~_݇H+kACgG"$:􍳸r{2P@mHrۗYYmKk,N/z|nb,kA3k@1htSWc1B֛n+VlK<`CGVמ1«1*-PDcT8x 㖱$ܘPJ:nc{.ӐK}̹>ԏs@Kz FìvAu.2y"oOp٭1qi7lo2hD望a6tSa0H̜r)%7w®}椮L=]ѥ&8vp(v9$Rz.i&N6 06WצTq խCxu@6aŌk$nT,A~B d:1X7/UA0 _F7#^Ap`f^W/y+S PQ >#cc$O Qj4¡'4/Q9fY= /KSO귄Q&Dd`QިաnrwD:%V Xk,˴R (E^V;#{=9\"FB谠kdb!|KY^R$˗H XTj\y'/  %]pqntdyOU`y{KP)n4EOS[VOmoFk(Na86|-LR %H)zOP Rj3[YJ,^e50;:{yU)0h,cYVҼxuZ@Zī~ %"ݰҾj$uZm]Dì"}`MN?YJ0#<փ2^&AV,0j6'iw, =m;~8οm|@> ѵz2JiA;J>Äz2?z;Cmj<#uVi!AM C!'^Kۍ+y`o0p76V {p@N|DNZte|0 ؓ'ȱ#kj 9[gW|oWMMlKfÂB&}]ϱ ̀ Lz2ogB )k8ʮ:U3 ӯrt&mh>q>ڤjqJ5/X.NZDv2Lթ] 2r`^ר,yxȟ f(jRDbZl w9#4M@'3At\_CV'R`\c{ Zka$RpL\xyʢبLF aUvmhSFk@O ptq4Uxs=DcHm$ȜQ)fx Ae)^:mZE45'S;H3)T^gV5xt]m!"B5hII#kBVY:,6&_fcWšx8r+,5\D3W7\fQJ?s%C8jv~'DnK n6L[%H 2*&Bif%+BWt2Sc AU ,j[0j?šj0K(+;( >ԈFK4Mvtm2%mfF9lpH Q>N)q >ip _g2a_:Zlj| 58MaϊÒ/E )x2N8Ma,}F2܁JxRm>yāo}f;:nP/U|}dٯ .+ߴSHY =L;Z%>/eJG(@'!V] )/00Un3"Pxl.3$yމg ]d&U 4]J+/oAMq9E-o|\Ocr/4 ?@X` ڃ7IT)}/L!WF1|rLMf:LZJOֹ4TУr9!1yme|&Mmĵsbg=jTLeu+]f@b,xmQ_W;^=I8Yg+e6a\eC;%4V@݌4/G>U{m+'tCS]`&ڤ&Ym5zlړL(U)!`N)Bo/1ū{EUݓS8轢] >=yIgvdck$ EH ,^ՆJ4QpK/Wt|э&jOi(I[%yhBVV{Q[>8-EBxLR 87f#$d xqmRj~7l~I߅tceoT8hC[ڌu8d%0_tXU~c 0P8Ǒ^Ͼf#nA88JM: y6P-3N 6#Sk7=eRSPQ| %݊l;Ru3>ژBp/|jY;OT]៮ T!S`5#ʺUH -h)#ۓ.3l?s/!M.*2,RO,n_zQ ',pIA&yA5o&%M`4\׈Z27썹sF(Ԩz֮->M֥C9Z""@qD}k##{=8 Y]qAnQc3D3?Zjhdfv|Q)'lH<'!hVVJIv}%iޏwd\IFJ3ש%)L-W<%|cfDQQɐAaw28~;DOC"lpz ϷV[^C :mLmҩlgL+,G s3P_ [8ԛ c&%\"wnWw}y<-%[.G|-.3T)VyӉdF #Kgw6z1*0>ҵ85QB4 "G5[[?mԀ:tԝ/u"sULm/G/7 Q{yBMJKY^8ybX6Bv,켽`Ki` wAmhSDaqCy&OO| '3j ˺& y9ۜrbyYavlg*Љ  r$,/qXc+' n?:TDEar@0=7_αwDWANgn-6 o#"oG坅glqhz%Ӻ'76fgx8籧/G%JcZX('pAWb)d8~O4kO=Ф;7,]ebv@o Q3_{h)K(fTD{SC6D 4-Ob:6|sQ<):4 [ #mү#67 :PqA \rPV[tD`CϼҦ0.vMS)]m gwjqnIF &&Ľ= E֐fX0kK儓9fT⫇>Yj xkl]Y2 olv+f tAhԉfF4>U3Ge\?7l{]Ǜg4*6Ml [@_ˍ6 0[*&쟗+;ETZ/>:u:AϺW Z;--V̈7jݰ[`Cy\qu9&x~{@:(łZvs'vnaur#~vESqu߇[R!|>7pn3vza< dg(I841:GY~#ˑ>rJUުZ>5n%vѹr+D:jZz*PY14H7xi}U֙4¼mQyn nllC:IsC/@3[}{]9b&}@LJ26/2||XY k-OLlJbM玆Q=Ӂ<.,=pƩ1f¾tNArؔT67g 4uFF_Z9#]IݬoAC5)ȗ 8s[?~:W범 M$0;Ny}UkZNg NЍ߮zImuRZ6bh3j{_D+ 19vhŀnѽ(@&bs.g7Y0$`uikbO>P{*QfϾf tڄ+clD1ܗT?C|{x%aZ9eTqWK@w ,}+*3.;ݚd.g}diX%GoσIN hY5@iuh,)C0YVv\ /^IӪ0 DŽے֪.CwU&{Oݪ Ͱ|,@ɊP4uy做N<"W_?`dۤg8Hс16#f%_@|R@)@3~$&:7(C凄WQ4s#썏 $1^`@c/)z@Xg\Im!9LEڂ^ 1DCZ|<7#32H%wW~G__J~7$[lr?lEeؿhA3{cz\>~Q*p,L6 F=p(ìʁ Z ~8xIte~8 ~KSre҉[5u;'rVz0Ps˯eF)WrkvzX(+]H ^!ewScjF&4X4ρ_t Hf pFlCL'?Y_Q7Ϟ45jf3cZ/7G.XGX:3g%?Ko]H{>`|_xĠHFdBk@sgXܚ$̈uoAIz>#g@o8*,- >35SK01> 7ύ qHmBe7ep;.nxa Ƌe&Hsd8< [A(h(dNwc>b䎛&Je܄C@KoQDa&.B=AH_ uWzfx,}UWUyZ#=l:B붢5/WuaX$vIh]!6]~D\^]*nszFlQVZ"ٌ§s?Rƅu.x8;H)T-YvCm)%d Š5,yףMJv5+I 7->M܅?)cԣNVC?_5E^ 6v|M.c'@ >`h kTd`M޹UCjDytjX%]LnGvʒkΡH*BfOlzUa _"HRWpmuvtG# Il,n["5Q<aQ#RT61o+ xާY`5>iPB*o1lnp:}3C(#?uMMhQ/;G -u^}׽h~1[unb fKmMt͉w B''.ԓ[$#i]]2E\ -ߢ<\umşYG<#jJ g/-!_d Ҙϸ@eY` _97ΚY@Vz<~:ljA;#νbIC | .hӖ?a6@9Y>ӏ4K{D{eގmOsr@U~D-;ajoUߋ s/^4Ѕ^/?M qF!iNgd,A ¯s :xAPv7Ka$iJg?R9 `M_} a)֢.t"o_M0لJd 6ZoܳDAryr"+s$f"#eKKs r^џkau}Ÿ |n-BN%-͡[ͯRoOo~Fpw TU˸a`*l5)P.)H+c?wHOǯ2|Ut;^}P#lUy`Ea_vأ{WsF$H0;q!yN 6? kG9w-x{sѯha'PWI9[. qĈڇ'}rq+W4{\{znsfE]LycYt3#+ i9MM}w[3xɤ8ck+ui$K{t`r}0/mi8!٢,اOFXg'TpǪwMmnP̘?@xkKqj@ekLލhocPIl `&K\a\XF L-˅w=ƴV&{rʭ؆8ϙs$՚Y1Tk5&;y@D>5n|%[E‹7aZ܎ؕQFJNyKIWypX-EAűҡj**h%BΥ5L"0:tlh$\A%IYٛ?+AyN$~$EUOnbx1-:_y"FWٸCY}K) 'J= u#WKd֗Tzt1{15j2IiaFH'+E\~dSI!;667oX?h-vQ1~mNy1H`KT8.~˯5 u=.DԩW#ʽlB$"b!΃B sLB, 0 oVkdYsy^L/!:1䯌A,,bp:(Fȃ.IX39fhTyi4A:d_V'kEy\8>[/>ȁoEn*=~~,j,7 IѢtZ5I ogçEY /) 7!8I1CY2!ßn3"Y@+9Hh Т˂o_NW׋*`Ч-͙W?i;$i;I Bb͍7[m؍rt %"~s'wp͔v|9ÀLvNUbhNw%+Gl)38r*m@evJ;׺si[ޚ $XW{fu;ߋO0 [-s?dԪՕɡ&U8>TRLh9Q|-*i'_~ntA/{`Q_#S.B.:ܖ83?JaÞ~ȴgBҵ+JJ"G-_9rʛJw6G ={ NCD<ӇQD$묕p4$yq#g?- ۀ8\wZ܆ HIR9Ts| P.ޮRR nvُ[/饨SGJ5J*d: dUYg]wu}ՈKw]K⽑^itzj--+eoj^<{Bhk~u>녻zhvMm@vV89jDŽa]]s0O&H٫b$&ɗ'v+/hr$pWOrko\ejb'ɜ no}`*)KÄ6zj԰?95FsB#~Ptvm4.[ņ؉9-tK8D,˶ 7`.=G2rma!S`c)JC1Kd>dKOp}R%@XTa8O, Ɖbe\9+BL_y,p<^Wp֬޼2P{xtI3/#T?J34necS-65t`lGÈ4ld,P5Jmώ!T3ע: G&&ru-9b?װʻS[6|QrPd+-,vTsQ?DiH<\c,nj wofWL9E/Fҥ(oza(m'G4`^Ѐ'NƱ?Ƿ2L{:I[aph9PO7NѨ4l'AdKd*|H}T?Q^Rv][oY|um^@?_Vzb%-B w;G"TЧ~ݨ҆sbF.G~aςSU8GPYp![& f219w~*AZ߬c Ĝ"}Ω 0˱k.E܀A۶A:ӿP]z)r&xm;1a p8k1E,K9soR! urTԼlY+Gpu_3}Jΐ0 [8v0uw^yot4f{~N񃩑\*A؞Koe<;17UNΞgalaӆ,Pw')⟻8`s-N .Oy&l W6AzDf0k3Tc@|3͡ǿ*4;R*tPnG-Yb:}s(W܊ʥǦeQlQ3|t?3"T"$yL0B7I"q۱S1`cB!*]y DZvr Q VDogH^PA.5D$"5{*𐬧9UQSUEm4_4s-XLW3'P3 }!؏x-[%PYjqf^!"P+m֎̭XjFM )ы @j6ōxOTQc Đg"p1X~>$ő{ߠrp*ْ__xƨvb+N:gaogNjϨ,Gɸ2jMhI#UhTEsmNaشzC˖4zG`l6 `]R!}%RT|=svy-ƠdžX46Iw%n$STMΓDD}ֻ_Ľ cB :hjMc=;[.? 䲔x|VOD<ߣ@(;|I0°mSR, $Y< WO}AnlPn C!d'z %Is%ICQM~ H4(q)Oy;˼"=,Q7:4F,fDz%clEC`$ͭje| Q"۾xFD嶾ez%xow)Aw/[MYB? gTww P=|.,ӹWy'#vqנyZڰŷEWy{׀.tu]5UqM?k'(.I^ew^d}QoSL$ $?NVFds-R"Zb:vEvsE᫆8$/K7o. c2M efՙ?j N];jfPGZzVξbexhS,Un6;=;Jj׊x7R&aLurW | hY2& 0>hE41/<@ÿ6gS\F˚5Rc0v(~ѽ@Xo,'|;!$."YrGA#x rs7*}m}S= 9ɢ|kK A`n )a*0&mU1WS |);yׁ"~b3GrQc.눣r']6͕قhkttz 9|z4:A%PRM$ǜFJ%?2o,zb5ps|{tP(Z[ 4 aRp'P S6i3nE]U,f BON=nk<yzv"E -'W;zل٬#s$S4ua0ۗWr"g.u>c֍uy |FB r3^5Jv܉bC5K} [1q-B\1RO%FưkwwRRSAOۑ.Wm}ȡe(9ݏTVS>A+S2Nm]>ˍL_-t>(">1 /%Nd{xu~m]LG;Wr%?gT5{a54wa@wYzU`N@ /3~;?o!˔ XC'Zκ9Qc8 +^SjF(uQIqs&L~ D:Ty )$!fG.uRJa]! 3[Lg `(U `| fT].(5>ĄH9oLҔ=zQ}ɾO+ -VK&ښbkl؁Ʒ}nyפ~5?-YEg11ϛB#8w?\7#;ӘˈۀQhGɘzMe4E} ~(\[(;>'Acy& irR"0U6ܱ ƒTu+^dƶM#ZX|-OJФSe Fidl.Iv#EnJAfS_u,úݫD”JDioi0'WÜe}ΊGm]f )`2;kp[U~L}I1m.J'И3Lxt a@}tTMڞӥ\MY4rw!|{mѪO ,%`{UDEZr27%Qoq\r(⁘"ͻL':PBึ(O(=WIF۳;uWThM sڏC:اHm%rF| =,B"[M>0t#,A*}Zڋ ~eՋFoFf?4(NcB%VLBg]Zu/$y>פDӟb.:T -N`'S8pvBn\kcs{m8DJw \;SREayXAfPi1`o>s (,_q[%i*y? /^q atwf ] @&NU5{^MT; _FSA8rKG,Vխk]@Oet0N[(Z~4.6F\=V9OP`NFq %z vD 9̩c,…իM -΍{IѢ(uz;TN+aFA{h:܏Ay0՗eJGKj3;+v~D~RAZd+1Ɛ'E lM,B7G4DN9G( hL'IaŞ>w 5vm:YlT]NX^&;~_^H<~8Epxł7\kC€W4!x!xyZ!0gYشuPt"-x.{e׼xҧEQżvvsȳSB^&وrnoQV92&{4P7tPJOzyF~QRXb wMR_=?JQpg#+t\_0^kg_j"n>ҵ9_b.RH7LeH `y񹘿1w-˸"SsؑO,0a'J2;ť-,8ӶK AyoPlw8l0aBMjF2 f\H@i/ke%&; #uֈ!}]PBsDef0AS<9[Z2!~ "'Iu1v(ms]=8mQ3n\`_-|ȑ8wJE±t$Y97*) p<ʿf8G>>55a7lRZb HFP䡥ʷT Y0ig)MG  }(zLNλEh{ fo5Z]wGysN9"Vuo}y(خN(K(Qԫ +GGK:”bm<,%RAh8iC_3In/ k}±٣yjfN aU jJ|nFoN̟FFKQHU1tya/AWU3dbm)Ie$7Y_ҧRB9V +2y(U(|`2>p$?V9%擒l;Qn_TE)ŹpA[iXlU_tj&vOcZud\w=%:ҥ D.涂~oqDzh2H5eӣav/p d~{&eua\|(>#SX:9)M{GR1Mњ=a>r.EQQ}_< Ŗ˝@.h̽9kkk9oإq%>#"=Ԯb2&4yCRץs:XO :^-4@wZݐAY&թm 7g*B Oq Ca;'Xo@Qa6:%C>0#{$`wdӆ%D?>x_ V* P.`ٮ"{|IZy}Ee3X۵O&<Ɨ8tSfotI.ROCaLğYB4>ShKwry/ PQ8FӨGA5cu m-c:\kUUpymoOuDՉLWCwN4(t͌-5YYqIě`Z\Q켳 ?M+@vwuõ{5C{ikl; #ќ4,'naLJ)|zQ]ɇ@Zpҩ= bnna_c 7Ro{բOYlł;Rj߸jf,T ϫ#8v\u~C $QF)NS^jubGZ/A.D9)k-JB0w>MХ;dWbX]:1UUd. b J8*m%J]Tg,Vt5m!MDK*mm^b[,̣fxÝ}Jlؕ77Iå1 ƢzAМqYC{jl3ÍCsZ&L:,تE9$=6<8d).~wv+?v kbuNѲq5 bKzϲ+RM>X[J=^P,?Od\vKr6) 1HT7_hm.a+0. HO&W٨D)gQk}kX>tɢF#ΤMw.*ʻ\łC sXkxF*. D5 %tH2ErvQ+H_Q^[vvXPhleb@5;pYGj;j;`jmx&j-swm^ϛCVjSa;RO*j._Ѣ%"Wh@Mչ=DA8_ JY)jBf[n`(JDǛGe'KT}QwL6Dwu5]^T1Ky%+x"W7!ȫ&+M66eOYӎLNdWc ,,!vnSGwpx=ř"aK؉|j84cѭa~NV <&5N!BjGgEs >;d89kz̭hjAb\gJZ҈A;o;Y{Kn1~P ό[5/N4V?$iqRUOD`U=YxfǬf羕ҹi1i|@iާKaWu26?14>8?k&R"V I?];pf3E&?gx9Mqac3r/i=B8c D:m|da5 ҂'sd8K߾XYpRH:8_=l#1vp+#5{rqEMA) =XPɒ+Y WDG`n'tcR$-K߰}n]bINWú)U:/[n3\2ZN3gmuv7VPq|ϓߖ-rZcns\)~1& /8ib!MQ /0 *=FG(F#kzI<=פ;b*֌6ԔzǭĔD:J ™du1KԪWVA{~xz!)j!5 ȟ*lm?Z[3[h{@0@?mTE Mf=xcLȀM@,]z0񅇡~@p5KlfبhD %zJP63xɋLB.tvSfgڧvTq㍜֛ݴp7L(=KB)u*:Fui?o@d$ͣ4Gf\UBN:m0I+;Q6wlDٔ{Ũbǚ&iEÄ-}yAbST}00{Œ `kW`/ɜ8Rxs$nN ^ї&ᴭ{>R1xM=C@SRHrSp)j_fxF̿!mBCVto -fI4/d:ha@'eRQF՝ݑsjZC/%D쁣t vwBkMG{Ff )oo'S[4j-e-$xjɘrnfbD4pnVrKꁿvBcZV`RmW0'kkow4gNX՘\ښ 6]^^^eVj9)iת{x)!׈[*[Q$̘NN%7Vp exё=O/PJNa_fV3׀Ov@5.o?V ;ARBikE8~u ji7lCR9Y-r>h2q^r.\a!*ql鉔ᴵhYzQ23m6Mxf' 0LeP5Ο 3}.PqZ! jAi2Ɨ.pf%`~&qni+foRqx@w -H6\WSCR ^l,xh}cןw!M<Yg3ubnlL#z.#2>e أdS<쨶{Far K?Z>wqK{C_wy-moB$E°Q 5#Y1b2 4p{h.Zvҽ}X@>u_薪u";LFkЉAnk"1E0$[QdힴCB c?k҅))EgX<'!AJ\1O׫osRyS6 4Nh$ Cfjato1TJ!/b0d]b5oid:蒌-pu\kE5 z1mL6kN D\v*Mg b ރAhTHhA)):?'u)J'rAW,"S+ }KM&h_K&_)C3.U``tܢ\6=>a9%Yض +JvbILm)_ܜzqa?9(Xb:XjC(JQR{!ܥB.:wۨnd ~]ȐaY|pcenZhod!be'X\r.G=B qRCiQwLqCTJ+t!ryP.*9Lq;\x[fMe 1?5($`LυV8QOڝ豱wW{dHFX ۔N')5~*UBhK5-~7Ў_PHAeQvAS&O* "%93QvzٮU[`vEdE]7HZ_U醃戢@SiaڃZ*٨'P9hPXtbnI{-b5IM?j7V>#CMGO51F_xI~[f{)1͖VC#Zs3u&_K22"z OgQqNhQ# 'ziiLDZ䵒:ji=ٱ\؈d^~&oNRQdB/Wb y]D "b:Z#56Npml5}P?HJSXX}~nc2k..$1:#6c}wU%N?pqSl% 1 AIPnֵpeW1h{xMʰĦ,%)VG1w0de}"^o,bGqȴdw"ɴ -`^h_nJdBNy-Bғ 22)  z+K.a}K(r4rc[ J'/:o5;l\p}at@HbbZ{y!A.N1{ O1R2]Mңlg3'̷_Q2$&ZLsV!}ށbSO!x!xyu3X#zNioPIOA_2ˬo56j\~h(Ǡ^G*C?MiV8Cm]GeX_upq̖idrP*v?SHP{jM1K# bܠ 6oujjQsJ!e2# fǻnN #ѷ×X9Uw4΀uA4eئ\xs`wQRjsSKje}α_y3yzJ+eQ%}4VE0y dz !6Hg9Yqf0;VVx,%X^*3kKUocrŏIf,h`o`~q=.7T;mڵ]gF'2J2\R fpYɢu{j%Iu8 Tfd#& ‰βr bwrg=ઝJ2WDvaxRatO|Uf]O YBIY5 wbdJChT(D nB*9'ĽcgEМKO6/,iE½~ZxL^qPP[A+2 qSDr>P޿OLdJsb&*fro2Hh`d1nu_ڇ9knXxL mǙ*FƜjhs &|I9iqN7bQ2h;O^M+x _w2֪pȓK wz|LUi7VXa;+".hG%p \.̗\U^Rp0^Sy0|dOH]oM$!RsFٖ\[%b7æI, j02\3#etF_$SnD@Mv'  f*[^?bO|j7yK2/dZD]2zi&:÷i^JXFYVشoyvd6q:aՎ5]/a]5'}' 4D™5׏qG22zcv5 a#[*V2|.dymAidF p9_j0y~_d 7fr_,Vq-Ԁ8,1~&fH7HhI e m6(;4~zH2@N0דN.o׮h_nzDd<>f\A2ȑjcha6&Q]HM! >`PI5ΘxeFn 0(R ]O@pV.Pav@_ǿ ;_'u $6;rUj]}bO,Z-|eSq8L6TE ȺKqnvz/BBa*!2a]GlDk`crTwl].5ˑCkn!|`<:S>c&џ eGZ q] 6:HLqfRYs[R)%"%ZӭBGe,/CDzO5-[0]_r)Oe` 1Qܨn5k@~(v!j Ȋu,QPXݤďײwO_7OcZZf[>5MTNS<5Dʣ:YހF$ a5^I[VP2z,bD}DbuVe 0sh*uB8`t B7Q\"l?{_+32'9v+%Gns^v),AYw=̗&r>+̸̿ӉO! r(l>N`OWl&Դo8*bkY:ZET,#r \8jִе6R^0Vs$!XUhNS&h,i1]Ւ69F)Ҟ 2=ӃN!d,ȗғa%<&}e/`ZI-ܬ+N^sdu a6&J3E9;{ΎeķL90jՍ66)GG q`o$y)6rUg}VI_"u:8|iI{!\lyW&L} LYs"[&Jgj=p ΁eF%| 呔pų0$9P7k/P'Ea]{jDԹ*i 3v*n̝X+XiJ]z4? 0<LEǶSfrG]geV`i![Шl5wn:`5:z_ dǷՁ[[%HI/E;wL:EC/Rv5GNN0pCS)Lnx&{V!dX˨!ٸr]˳2-<)JaD`u4z{7}Xj#Ɇ \ݢ[t%Syk#nM_>KxՀ+ a4ߖ.Ż.K% *@oEK',r;-UsO>S4 OYʷ'Okۻv.Vy ZT$3rweD`Qw;a!_ %øhΞ31H"Lfj[!kۣkkX8g.zk& SَedRʬәXꉜY2ܺ  pG: U1ܐr*&";~LE@  R#:PB[WO>e? ̓Hc҄^Pq㘞( V/yZkaYm }?aO5D%I{m՟>IEoᵈITL` +eLD¼1g#z&(Sl}B;`Do1 jEB tmiRзo6؊gI7K 8 iBu!A m]f4D@"u(T'z=[fv%R3p@eͷI.M#[Cª 93H/ű6Be )zkP0^hhz[KUPR5J{H#~t!l8*jx-Wdc)$h|Gq\rE;rxb+ kc'7<2)-w꠵;[fXcOLUѧ#p0M*OOc[{]ZDh2]%áyݠ؈aC enrMKTo7FgMұL " iމFK8az:$RY4V1ljȓ0[06܎+b^|[RҜ:D`D_;-I5MF,IFa,$&D@ \h A.u:Vn|0=_3qֺ|:N#ա#}Jp0TdVtiG"elCr=P 旋󋺥rf |&T)lea{8:?IV'FM& ODNtҐ;&B0}|6`f#&`_n|YE?]lE :7+@e ~ R ڱL)eD,__19Dnk%(W:f U_g~_sfQA Dā£odr\(%`8GŦK/پќ]d|."{H6zmrdYFL`/x0P(,DEPUXK'~m P`srj=fW;R)6K X{ =QrHhn3|0>Sb@&K*4dpo&lIj"? 借\k+W{ ĶG.Q@L99ا=}?vP YT6@Ѡ}Q4 h|+ͥiLÒ0(>Ipۏ.D7*g5"-,xC1-@_G+DŽڅhˡ W(`¥H -n T8\04yY՞s.yx_VB$ִTC Ҍ7uٕ^O&zCz>@q5>%FMSp`JBd24V&㈖3PF)1INj~-%[i'aؽ7L%|N.t`"I0e{ͪ^3@܆.?f3@\aVguY08^/ڙ p"DvzažeSΖm  &^ݫT @EH]OKR|iU+f4`^L׸_fdD~Yh$,N$ =No1d9Ed:PIV;$jRz*>5MF$9ꐤܬx7 0` yV,ofGH$DpkǫD(fy丘'UxI3 +lZ-NF)LJz0W2wpTL}T n=_#+`}w(zL%pnj+hWdj>u&=*,-}/Z~v l(l1ՈP"~^k_d!æ ?,W?9է*GQ sh&AqLz5_SؿJTXNw0cT`JVB{LuUo <<~qZ0ϡZ+/c3<7{qT}tz`=, eCl:9ye 4r b!hK'UQI1-&,x|Ӟ؄u)pk9FAӢ#r`!n(%5$lxj⎉h#omU.Ң3keZ54;GXF  ȊпODIaB4NQ)L)[FȲmttM;}}—.پBRrفj=Fҳluv}V %q""OPRAH`٪zC.6zRE_U~m7!I^A$->Λ:Sz=|][d]Xuv;wj&̌e[n}ȝr pINf49͈1QD|޻?L5|.@Q9I͆ %ҏE͖2rK Qyf]ʓy2ͳm3߾ޛp{^~ $#{x´ Еgƫz9T^eBʽI(n?rX^MP}[P{~ay$ds6Wc 6(2 .u w'Uڧ-]:9HiM.{Q cyy(ϓLA 6Z v4w& %@6hmMS5DUwnA;sa2}=Z ]3S5FT.9WKl1[fH3.Qh>9*.3Z]šb \`ni}ɪH?OFG6 ?DM̾tH `vPw]ra,ή ^S~0S0hlݕxDMRTۢ&(УCYc[oJcdRuлm lxBk˔D|QJH影8W|Cф{巶as@:oJc-a%pš<&WJM&V\:S >#w7 `@JYn!1N \c3oryV d"觐Tp $ذsšELvؠ%UyW[d UH2e }6N/cihNiVM^.\{j^wW2Ť˜;0Q8cTEǍo_rSBa3FnpM1b:boD^OYRi|h4;0l_.1.Y]7a_p 2]酕eJMY6!´m_) yYdD FJD\* .jg ke"~;P$XY構!yFÞwa>\gGckO J3e /2ZAK`gƗ8`=k"v@G]7CU+_'*'Bcdvw׾59ke8ݑ!2G3>[eQ3..o_*l{[`ۚa8CתZ2Xv.'BA;-)_~ҝj^36Gwz(Njɀ ?.›ڻu-~RF@87C4 iʮ$kVu/@`xWJ.7Sw"VU[ FEV\Sf}+7<̽u{Sη[rKV(F-= ݇0wFOkLn` M ŗP>?`~ΉR +ْT^Ӯ/ǯБSeea%\Tԇ.N1Ib8GbMWX{a ߆@e\]8J&)۹MVw#&g{ﺩ=6Eh](:|t`ܯ8 z[yxVaS8"φRpæJZIef١^Gj\&Ih\ӭ'pkp@{XijdDIN^\gʔ]b{&ޯd@:Mm)S+h|i ĩ;{̃xR%WHK .9jzt%(ٳ!wMGٽu,=#q]|ƁH?&0W4kyWbf=/l( K@+-8+#J 7OXILe` ?֐+B'掎@2]p.3DACAn$ځsfNLAkL T7?\WYLi!x 5R$~ZXH)3:$] :}rkJ>|N ;}p=s_-.d.Y:}mdկPt)l7,>;:0\ăj7ZR86gq>_8 | \ۑ,,ˠ !{'47'aދR# HiYz"~M^ 7ECB<nX/3;BYKFGv Mv5\bprA|ű/cmVmv I_pZ)ʱޖ"ȣw6#E5b %cND8dD+ )i֏t>h)I:[LˑhUR6H*FԚhɆP9{}JK|5-^O[~G&##(۩+5Y#P aG<R)B8un}f{eQZpގAws Sу7zO*@@z:F[ 9Z h&Yχ6(޼Salr%+>@s9GOLާiE( T,yҸOH5bsoh(p`~m$ƕ/&V>_Vu?i'3sxF$ۥ#jC3S8a-Ms5OR@A4ssSBd8Q97t a&WK62 R+Rݘ ^)~5cP+83zSFmz>٩͵u)Q@?Xԕ:bHAM?Ƽed&,WϬhLYY0kXBj Z62[yTJ/7"aƖyϺ@) jͺL*J KniRI,'5ÙhS.‡X'9T쭷:Ȥ(})WQ$mW|4 b`*\#OζyQL KosS!LF*P ~0%iiRXրb fv,8H]z 4 ?Z~0^oaަ}Sŭ6rR4h #l# .ћ=L?J<?.t0\YѝVI-aafbՒ TJnع밵4T@XZ)ORh_6 kT3nele6<`MǺ'ք V)Ji|%J.yǺt@v#$CMNEi'EP^D@9"*m^HuPϫ֑3]1x7GVɺ֙!UHz-_o̒Ukhi?ϥ ~wLޠvbՀ 7@(!dװN . hQ֫Y47:J%F8DD)f &@!q(֖a-_(hK\:5Sq, N]C{Ϟ$ #^nYl α|kW؇[{rǛ'+4ꘗ2eZ.s*eOq/TcGP+Es٧zZ"7su]ꥻw\tiWˈeA:LjK9yI37܇EZ ۘxzv 'v48^SlbL WB7NՕ*!Z%Y\0kOhJn GO<uLǛ.MJB:7R7m{R,2>& ĵC #*aKh!!U(wQ8y3tKd. +qVaKH5[)ቷ#jQ7|F‰^,0I]" W2B%,t$?V .9t܊J%T}RǸi?5Y ;v.JU #14T_樛 W F q1 / f=PR7Ֆp!ڥ9ﴪJW| MItgᘀԧpt|NX#zt ENL,k=VWqPTn͝x-_?Q6-A-/%x59Sr`E/օIҢ}[Suj@5q"'W_VfYņy FcQ7 F @te>=B\#X ,+ʂV3˾CZqI6 xo] <%]Oq`߁%iQm&I4;egwOJ-GQ&CJatۧ/ ._w/@q0}k͖xYJ^qϜOSWZ3KbKSKPga#;s0Ǭid,:TRC90 YwY`%I^űi@1͒!uBhG*D)Ԍ=Efș 9)1)CP^eo8y$h]kּm*ٱ%+ȕ% [qFy'T7\v-Wp5MdVS18ĩ ?Uq0>b-^tnp N`bPpMɚߨ bBR.`6xYTM_#[.WN 7 Ɗ0TTFu ʋU,PR^ ?ǵ #r)>y #C&[Hb~`1Su2SxՙXA6dDn( *',u|!^fT$d҄h8LW{9}S7Զw>SMU@P{-A}'fE;1Dܓ6@ih;PP(ħRjoÔ˵g÷(R"G$y8&fBɊUgi%˷5'+fd*"fsAkokbҡUL(e폼H褉_t$KᘫD.-!9-qr(^p%9xs `}L9xkuɢp{b+v]  3~ҍ іS$Gh5[7H P|(R>X*t@TG>U 5؈rv$L%*#JTy=v0A! %1Lʶ>}?#)e@11Fc];y|3mTb%ƒ[aJHk) ~Qz°k1w^dG5=al)ô%YJ .z HRb n=BԉM1Goó@S.yJcX:]0e@쮧r~{e8Ff%o9z;*'-ų3~7nA.Z j5Q\ׯD9S=5Qojŷ 1^h}$ЁV_I/K.$~r0ڬA'=5*1ōڙ5lS[[Uy'#C>H3:S幧uNG}0<-Ş\Ks&@>XԒV ]z!7~ %mFvoW?f-XY'x悤ЈQekhz.0eI%{o*~ ڃM{tTGO$(vp  İvT1GMR^(N}gy, cd__s5䷍-wc`$b|HAkUC)><.$z.I>t ˺i1=25[J>D;x10| Wmx*gRZUKp$w?m;k閦=ڳwt Χя粖I|؀QІiL0: S PZgT Tm7z|s?T29]K)!oq~Id5GLsK-?pixBwAXMɌڬvgt|T dUV7h}Mpbfa[w~5$(-usLW_"]8uQg5Zci. ,)C$qwi.`-r,@iGsߒ &`4 I2.-@N\Vlwrm@htϢ~2-M$V8>57#K!YװMIzMB j)Ӊ_|CxpڎJ$4mjث/EXAZN.NJ+cG2`Ύ$boPw߭ Va]wAp$Z%KkЩt8Q/rNFz'̨h8d[AC>T,nmck&ȿ{J7jKVɏ3*=ܤ3+3 2%N$:Ӯ{SQicH] MkU7 E9T;ߧBSzN&AOV{Ƈp~E#NX"}{r-"bj.8LӐi7u[Lnnf8X@SQQyGqHy!FEw\\0v(TQE̝K`Ȟ8jQ) ٪0 )J _USF_y זY{窚$w4jGP2!6K~FoM޲F`b/hriF;yp@x{^;շf44P[_wLDzW5D)&R .6&^/O& !agEv7`w_ Xĥ3}ǯb)ͮcjm +rP8ҌAʚcy 4259՞P._,$ c ~ "U ^pyH8!0EXc sg|(jPI9-~šQ"y%an,=ލdpR{땭dSj;gs E[૔}n3ZUҬ-}j֑ɿ SqJ̻zg`[؊@-D7:˯PB>1CAݮFZ/; nJVڊE x_NEPR߼Y+(yS0 _KJ^1 V Jjk3֋9ʹVc$i.O4el.ҳhcTq4 `n=T(wG@‰hxn_uxNR.(":J!!.yhdp6 eaKo_vk956~=HhAf*'G#R)σW )Ño_֍a#y+'ЇTݻ~-9 ,FX'C?,V2_^ސ ب[9a"܂NXɴ)<_a:lEFG+Vvqm8Uo93a ?lRY,&z+.'M!L vSkmo-u6IH*!}?@w #8!6ޑ~>ι/?[ "/e&Z{r MҜp8~l60#| /9gnA5SUHVM8|-et"\E?esQǝP8S/U5<(BNa&RC3$$x*d'6i5gX3|1) Q?fRM# 1ߢ.$z@hZH?&t)OA=r<1!n} foLzK- V%dkjTjJh[-Em5` zh+8:(GA|A/ v 9| C&q3E0V͜lT=4RLBR7@)M`*bF:6,}`/(|Bα s~Ɏ$nq?cX%Og]8g#E?~ٕ?Lf(rf C V^bC}8E_CtFςNBQzSfZ H3[Ajzu$Hf\x΄?ǵHY.i"0FĤ6&@{ yk|0m.]Eieh,6/p!FfoyY\9mKi[6:>D֪#|HkUFUfi=#v)E2Ҵn2AsU&l\ Q o?:'sr{QKi)5]RrOv3ű݉:ߴ{W 87}W_”ʧlC 9uަwRmdZ>!kÃNi . < l$4 gv_]C~ὢ/'/?Gln~ 3t 論t؛ﯢUe%P\>' UH Z wAWR^c^^Aa/|̥a(y98]n7АD}m8o?aR/BZxu]eM錝k3 sW>vclv&G<}cX)@/ YT`{;Lik:|ܔy.!i(%:ܯTU?yptKYxRRٺk8\KX[^&*Yѣ. kunf}(E86?J\I U@u9?3o`‰:/QAs *b#bmk%eP#TorH;, `aZ*p>'s+V)++//ąmCd%dtN*%X~jppi|`vۼs,NA38&3G8 cuREj\ QHk/+~EqD`n|J j)J20Fdt[J F)XZp-=)ŷ0KZUDK}}H_ cVу$ UyO}pȉWW +;W%E)7FSZ*xL|DNMgmMIvԅZdVEZ闡xJߌ6>-h-ϷN$.D2 ,kMց Wڴ~3T:WT$y UJ(B-I_EG+_uXl\_ =,r"V 5խky<G:p$9zXʶW9SE@| G7tVp5qac?ٰK ̒eTm|?âHUjzΆO~k ]: BUhG5F R.K밨QvcY$(yj)컱`Iaig YqvNҥgs}Pw-XR^ՉD!l|[3;<_cL'q'VXla2LA.U{%qSUֵ7W X\w ]Qbm *wЊ %g n' =ܽՇ^7lB#L.Acub c :;Goשz>qMUطzBYSKte[k l(7DWG\,rZ{w41T4QrMf۱23v8'?\ =dxq-$fwF&Zy8 :`H\TD>.)*:#/|J(詶U~01j,=W" 0~|' %Ee5zJ.*h5âP ƞ?'MF_}4I3@'Qд,xH0&sMt&oA{ہ,.m>U!d9f60Z*eyfzI$ @Sk}ƕ_Ls}a 勉-ԵM!ŇM3ܶ*Τi,P*ۜ*O3qHr-:PXs["֡(NsϧYrGbp_D26ГlF(zՋҒZTY|jpwqMW \T_E]]P4Ljs8HVUl+8/_1uc=\H,;F>q7]Ss2\حk3tj̖fB:?!l۴ŨEX bԔAlR.e2?eѮ/6Q-GQ%?r#ثf` kPJͼN..QL  ~@Y&΃tws Ԭ)!4ƪr< 9WeΪHGVISIt.xhxAdh!!&9|߈Q%j&Cd 4`SlɱoеLLÀΚJ#c2LJcx_ }=f숌6b ڑ O,ȴ-X " TBŒ'u׏Z:! ‘g IwyQ@rW*#rP`zHU-Hb&q8M^yv9Ʃ0uJ<{v,(:3W:o_XfzRzc^ےKIOqY;[]gcSDZm+oH[36zWZcxh0.+OpՐui(9o\Y('As,V9ϵllVҖ^J9VdZ]Ϋٲm/ ٲUBRŪ&I%݀Kx\{d-8^C߼+KŮEX4B"Z-I9J?u,Ĕwdl*M ր[BhLl|T7.Z;Avs! mQ߷=7cXm?iB|zC:i"4bǖk5 mIyp*h`MأZ@U֖gNsFZ`4'u凵H^&FY8bV9}e_=061pt1pYendstream endobj 7 0 obj<>endobj 8 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]endobj 9 0 obj<>stream xcxd}?cb۶m۶c;ضyffwv_w^T]5?T]UJv&vδt ?Bv.&r.&o"+ )O1@`!Vp03wP(QRS7r5,ld&v6&&LL&S kBLV fbkh` w madbdB 0s|9l-I͉;'[ `0s4ue6bh-a6&odha */,q:8 343r߶ 1u6u8&c '{ko-G@p413p46qr6mwgҶ`dbmJ۷- ?"akj`d\MU f;c;[k) wg]5+ _iR.u5 4O5E3kɖp6n[o4edIX`j`8Z[ؚ|/p[:S60'Llǀ Bo ߶da߇hLvv#aє1pvph1100'aFWr65"(wL ,e Oa}욘DC/`lXd hi^X&(u&Q?- 1 rnt̍y!}s vr3ٸ^vA닚zS_+fL Q׻ ݁5 q;bn!'i.@I!Vq-ǃ2JΨ*tWֆ'F %:xM2% ih_~s]3&髊< * ))=^߂);kAoEnĻ @RƪA^E\zC<ߏFnc/*[AT?Jp/{A̋Lǻ8Y8꠽4л4ˀI)/C/&ŸigdGµOj\l2$E@{G;@cv⽡R_R"*-@ H˅3 |YE0lp ąH&]Zd@VxPľ=ߔ4jfimWZ"U~{alk}JH1hԭaBGQYj121/P~,|=-o4&IR'5|ݱ$=4￞?TD od3F=hQ;p JtL5a(ZVt5CcP&jz9k0Eh[EL#;I.a؁trca> EjL[aFZ]}@ UyJR%xֆ?ӧ+a||loX6̦gֿS/ Q+1hB8 Jq{އ$1-2.{l#!fjxfGd&RᚄpZm W=F"2 !rJF]l3N֌F᯵{"<[#V/O;t/T6{J.w/PgI647@%SBN؞{RXqZ)<O=?oR"#`cb $aOhG+k&PԣT"N旣})99ƴN&/%WB ?.^$L-uk*th6"bs/rU:EZN>x~[oWtrݬ@l,r|SpTxl/6ciP?ǼC6(d?tJLjQ(]NYui/D΄i{NΈ"YE{Cϑ 5j]ہkgoVVJ(xن;!]tXw-\wZrJضݮ\ 0pe%/*·"[BihCQ Ib4!O* +iV#裡Y1[q(KޙR-.q}F7hK/䉝Usˮ,¬#›_ڸ 80m&XxER62;SdT29xab(sKryֱǘz91j8]̖‹dU7WZۭnG{K9}Rн6YvP0̙z E'f"8jD_}P`,e9;NH>'u|GmZ Rƿ:ZH>',W@#һZSk%} `Guov iV/̿,aJB7 MPCe]՗:kZ.e9 !GVMVfyx>ԏ扇 @Țޕ&iZTt_+ANE<(.hH(3Dǥt8sY`-ϡ%(Ab兜a/i}_6^ 3N5xTO u@$R> Ղ~1Rϡ7evS|zZ1~p?Zc|_+ m@vjЙvz-!ho:׎!`}|LL*ߩǠaH40rK1Twz䰔giA{9uBW0<4P0 ]\ Oͧg$g=eH7Pak)fc39T! В9-a[NQqMCۢ3,Xd=O &~ElomSUoAHg*mĪ:Ԡ 'r`C՞P{uCXkNGoI;6:y040ˇPޫѯvi—M(h^ZC^>(% '._dGsDE@>8smX>IKăAkJh0Sk$73|k7 .HOdE;Wȫ}maDϦ\ȭ:9Erco6YY쥥`!䲄: rm6kWVBkBF..k[fF?!kk)$0xs315ƞ]]n{S٘x4},'s2Y.o6Iim'(iU]9~RÙ{`dn UY{wpw 4UvRj\79 Js2Xdn̾q%{[*;-JoG c!M2ͫ`Sqgd6Y8_犱O2TSj w{ƶN!V ]1HMKEȪStxeRÈFRθUT>JuQzyNPpϨuH"N܆!l wwT,M.kO_"ϩr;%]Ժ !Lϵ->[r|P Ճˠ 4.)o C('K똪8*K"$A'pYhZFvՊ3Z;w[EBҤl˶!a^=rWO]#̬^W{9W14"M [zqO SBs#;9ؚ ٤ܻNeq}!|H:TdJrg˕Κ錦?^/ sht|nFV̪ nʿpz#jTb-p &g:_гɩ ]䫷nyf+8mb<_7o %yFyߡ@{ \1GAjvaޒH`")cf#wf%nl% ML4zl{ ^Y7Ln.3,n=_-&^D+H~ٟ-h: "[}a0yā3Sh|>nzýCLnlUwt۷w c CZ'bLT M q N>p48䗣c ?|f*$+t}@>,: W5Oi"s (S.i'o:#JqMqJRygQˌov M`7)9 3֭4L"-jG#⇾0vLAM7ͺq"Nrǝ qȂgn%ޏ?j&t\㬧XIf6h±?$kH@ϐ X2` f+U-)pg?-6iQG}4Oigɳ }$-b:aoKmr#HlY+(}DцxbT'۲*I[;/xFG9Zwp%v$4镋K=F3[*gY̖19 . ;uT+}Ef 0UX&]*J9qC$ %:o[>] ]b)YR]O[6o>ϝP^2Cb{ljhmJ&0{+ݺZ0ܲPֳF>wӽ44!Di,Bʋޚ  m.@31^ }wӥl!>MrS0UK>̃fHZ&`,ITU:*жvGJa:vf,c@h c ~ ;zR+NJ X;]-AO)O@J<"2'N0# Ƽs, `[\ƈLBWiG!S)d@[|zeoPc.Ds*ҳh1GOEvE !BM/3k$-poRX,\Ey<.}!6 ~o~nX1ŘJ%/ݾme!V >zrE#\?JtN0 U.eA{LFJq꧃wg7XT薽p<{d{m߾06$f DzpeqCH`;J n*O޺c 4CKCE$# >ƪĨC=_SL8֧9.tw$TVf4VAr6 1K5Ct,{m.?f &Kg ,s2ƉO>6z^&G,غ٤BeFG.͸tZu#KX(p$P*}0Ϩ8pVƒ.Q+Rt5Qw= Vpֺã>rARJM-BhSsF8&6#5 8bbqY^0d]ixͻ%,sDA` ~jy\1<鲪)=NuyYx$J>Mim+4G_Up+!8r%Gמuz]%7(2;f%"~&vMsW>!-_ L/*7LLB)|iR"]g&O7Q87C1jVv l#H L_FJ$)5e֨ uWF{KRVm@6#+Lo & o;?m.F:S 8&=]%$HK<+⋕Q25*tk W Ǧȍ"U.M62'c[ W1ۚ\; nJex&a[P}w2stk~#%zT!':Fs~U k|0b>FݲP٤k$ ͬPZs6kJn:E%ٸ )_ L!?^\NSDhEzd %Q3x~"vqRO ub-AxD-jJ[Q4E z/Z)::)$VL=卞KafrdT8o|\d9lNw1?*Uh8;BŇLmE\B6;:1]MXߙ6@. c$p^-dvL[\(ж1&P&.Mi#?z~Kk/p*QѾ} oeqs*`n4UMXLg·닙&!ML}W\Tur]`n,m UE q>윣УKzH{eY6* ~*1k๿fds"A  aե7Jj~J\ 䤒$N麨F5_[HTv"448L<6jNА"0~!M^"։aQ7Y,%PmA{ʝ}-ug}}'E6GUڝp#/?W͍j޶}Gr(UY5, øx,z¼e 4w!9xd ?zch7y0do Km#B#o ]_zS瘀KsJK!UNN1\DjRܥR'Qn4{ i#b42eGmr}*yJ|4o-pFj U5 ;ՓrvH˘?psD>Rxnh^i6%=(LEVUS?qD;7eXg9+m*j%n7kE˖T(v"<#p "8ڙ_鬍iXJͣT5! x~Ț8`_ǹݿmQ7mre˴(8P;ȫ Z/0h/8,W˕OjD,Kh;=/m[rHZcO}RQ@XwXԟxd] xCˆc[9]Yq3nX Ši4T&J=Tvڠq) {|A' !=cpa#jPNxKIޅ=ͶIRv3 V2xj@l̥Kk_BYvi/W5Enj&Rk~lӽl[`eG"Lj۩ /^;,}v CxwՒ"! AIslD{ےR~574:4mΉF&,FJ&ZgہκTؤRWwgܬ#-SgϢ[U&t:fG"/GKӟFR; /*Vq1 04\qܔ%+Q+* #^q~_/ e]/kmeV3XKۏ%qá&ܺ>>2#3?sYW%N*Txdߜ1﵊ul\\^Wf+>րO W ds򞌡ez']afB*az-/]0tP?J}$f!y< u_IZ5~S)31eJ VG,vԥ%rUkO;Ƅ٩݇]W⅝fx<>:PuZ}5?̾xSxv.9gnrpK'l2R6-ѝ(j4tQCOkMUP/Ǥ W31[[ I%86p=~Ű3*⌮0y>+KI/vgK V^::2A[K_=M&N xiq 8RSS(K"DL? آ(I@eZ89OHY "{1&~502XKyDZD썁(Y*2VAQř2kh 6L"<.^1cGqۦ/`SP)9:LJt I~ʄ n93e2x1 7b cC9%% Kux'¿'"mkB;7*xSiy;Ei* yх<7Yyv۠;ݍ~@٠K{9e%[Vd}j_}-8E);_7{,Y3%X|sɨ7bUj: &Y5h0g3Zb-ܝԺ97Ya7[(I؄$Bbj$7 :aj{&IـT|ECZ\Yj*4r=4qdN>9 !=O s}Lb1LyQL*h}8M{ϰތY:ɶ+reP15鰲DjYΒP\;[,urx40w%s q5A1~ay  Q(7mKQj0`*E*$ED'-_7S(A 6dV%ѺY'rë45KU]"~dqU05WaCU v[*oҬX1vDJ؊s({* E%"IuguBK(ÇB[7N@B.dMdq?[bU05;:A-sBpj0~)=Ōs/>2bi"iJ" "~j y!LI ;A 6Vx|ޢ/&jN)Ύqm_i~o|8#"^!i+X e=w!}|&kꏻ^1OzAȠO0 [^C?"ISC& H`νU#O~ěLx!נupQ:bA?IegtY9.my!^;oQ=v_R^Xb=x[t窃qNJ\ M'_!Z}q$0sdaRZҵ{ 9~f7ј&``W)M˦JbdC4aSi( kRm*ژZ_ ?[YD+2sx%"Q[,$SsVAt84jD"7Qeⶱf*ϱj.}{.mAڔJ6dFGycb-ǻ> rx\u;_iMJ/m {8}*"pe&y |XsяSK7UC(O$tA](QpQdR&K2"FӃmvY揭v |'FmXµ¸QAt3 8glvV.ǥkOy!ZEl\LYkX uJq#tPI:*% b9]38eFE+7 9tV lJ pY2aY{`lx厥P뱹GpB~cS҅@.u- qs?e:3hgW9m^3~wXcO"(y4,j ؎g̟z#fWE*lY8*Z+岐V}V\,6Zv;GB[kp<-=D]^+2lX&i ,!E%+  T9M;-;h LGN_ݿC'dCudjWz|IA0f!ɜYej-6:zDמcka ֬)%{iaONL%ǧnUh /f8S9-ID0B"::cT]sTᶙ|1J2ujh9wY.8ÓMӶ+It'X6~єXt֠ iW.D]LiV?tb@)[ tw-L^QZ>۔a/DX n ߡd1ɩ bkN&mhU՚ cR|딘a26-3H#laxeBdrq1 ,<̽Y%ymvi#<b֕7-m0妒Z bkT~Knp;*TAʕؐ!ӽS*&V &6bugPamo:v;O'~}0-̟EM[ŲroOur(,_*G2 D$Z%`2X!W2 9R2UxzGmV^6 Gt̋tRDtOv:+뒟YZE~e rF-!hRycPf\l[`bJ+|% GY "+ڮT =Rda^SK5ؠ)&mk?M%c0`JĢA[SZ0UmSF &rcG<iTd ΒŒrWYlq z\v Hҝzq:|a#r$u[SRP4MY/Uw`5,vt0ZX;=?pSP6ty2@X\;$wd=-N Rt5U:DߦLz/m^'zBRQNgA򏴼 K2Mn &3:#3)Ç8C\Tӽȣ&nev*^0!`j`Muu9;iPV)@^SY]m5zNW٨x- f_bq[~zAdv]8+N!Jrhp4v]|`  n'u\/-HĝaZ9LPggįHm&H ;݋ޘ ((O*ydY!D{"A. 6ߠW@% =c59xJՍI?JLuALUgد;Z N\Y)m3Č&WPu>osu1aPP[Lg}NoQyQjyD۞%V'/(1 ##ZFzsу2LbأrjBvƃ)M"`B${k-٥CU?M"3[ѣpfΦ%oluyB'd\JA% ,ѵ~EԈo|n"QRS0d}pUzy֙P_!jDs :Pt{H>_URy uC[mNa1JRIIݜt /=adN:)& ]Bj? lnwWtI(L;SHN̪\Ub5@gQnF'~ac۸?zjf3OPJkN\.?/u!EpHj,C&:$eZMe)WTl C"׌>6P40OMLa `#CѨ3SW5gEck|9J4f_D˖] hKjT)9 >6bTL8i-V&pzai 8SQ'sT9ys ;knR{*\to'N \ Ǝ:Kᛎh LJ^[oPEK@O& C$K,~?\ +~Hz4>:ŗJ!K5n$ |+yKsH5n]Mc~UyTBfIJugv/98Ԍ )[CEBu4i}[K: ]0QEҎr1fW3#b<:o3:BŇqizwemYol-ƞKD41Izx>n8 ސW4=z#9gRC5ͺ{иA>ȃ#u ]Pe@TPLw(?Xk=ve\:Jj"Nqh(.G?N}w $Ę O0w3U u#̧ '*:!Kx:Eʁ"nFO8_۝/-!QЬ~9w)r4 ? 9#=ll^E$/op๶ J 6䋓㓋¶yFHӧTLl9P1ӡ/p@}ie( qOy$C?9cۚ.?{(s;J8ұyP+^`I!1{ש'!"uk!A:r'm:aoGHݝ 3uCXÚ"3ȗ S'Lʯ|ea5kݢ6-(:yERm1NyA@}%N:o!yes6JQ5UG_!TIh;M3*fm*?k}{ b+b=~ 2.mPmS/OŁhmӆgLFG 7 FffY &'7WW.!8GDqBaRit:TcS}#̨Yɛ|npXX*Nꔵ( *b6lu&mt8(l@~]J8pX,{d +b鮳ʅ2?ڝ1 &f0DNh\FU#f,.t<5=Q@;;ty.C@#k.\gp^;|z`T_OкCfn{9>ԟq#d=aR~C ch?wO5c ?\@~-%gZ_`r"³%+S}+'C)Bu{:ɴGp=8!R ;)[wkD(c %Н& M! .y(-ױw*pi yn7QΊXInYZz3K[@X`5=.cl:Rka I`&XgΔd,YOvAÇ?n7WW' o@C7,{`i:rͷ2(AҼ}9&=ԮLᦆ ,H1$5f.h9q4St^O֥us# Sgx k %{?A,}N/۳k:>D&F*4WOAgYgm*f+rm/@%3.R3 la5/lowAB_JxVI,QarYe=svZMZKaZj^DhIMW5x3! Pj tc0Ț/C{/=zػ%LSv^2&/cdA0s5fc┄Fb;Lů@$1Kܤx| iމ- =7Rhu.nV9Tf0tUSOROjrd~5;9$t㤈eVD1f)hUZHRjX@fd #xi Mp!2'IXע `(!ZNR}̺ycS[fTMD9޸t?ö*Y稒8rQQ>š'ǝ7D:PM̾.9;ܣ݂0Wf utlZwu\ލ*KTXƙ4cs&=< S.2 ̣X5[ $(x|GӀwnkQ8 680{׿\dNSydG,S>2VCn9]wǦ׈#wAi6W؀|^f}5fGnL"0'h)QP. )=PXfkZ#-hcv͆<2CHQ:|禑 f p6+ώ { ó`^I1XFDm~:?L2`gX,U:@+L;$[Ru{e^h6ȬkE0^.MSu(-oȏU)4mӽqqvWg5$uu Th;pײ;+9z.>Vat~@ 2S?[^?0'x7f|e@Mkj6cPk8G mʃ.JnteRL'<$am wJi4vV4L`e"Gk(_'ddFMPm$s*Jhvr>nG`Eel@xs31@՚Әh ª! &ц7h2x{_TE=C!'`/%"IT_`$0N4s/1H8&մ- N9Ȏ16 㴗G4sqG&s $a^+ 37wblՃd;#yܖdjF](Px- d'CHQzZ~cukz~$Fp,n-[^1 -Jve|yd$Mv ᮐ˝KG^ձ29LjηYzu#;,axT_<kACbp+ЖcGu9 \4^ ׾wxLVR+uN$ZA[ +ll v/PS\IC`]:0Zt{oZ%] ")kV^,\_z`DDsaw/e4:U+q&U4( YdDSB#r ϓwMBZ0c-J-с:I1Vu<ʽI|gp:ݶϖ0ݍm1K4;ս^Xo0iY&vKT TRRQ0 o|Zځ G2i( jޅ0 ؤ]'G >9jftj 8-)|愳p|"0Cٹ*aɂjE-0\TԼ ?RèhIuW>a"5JOV!32\ h1xuUcN r5E48ڳQ#iuMs54(YeaBip-lKy+C*$H*XӪwC$hJ*O x{s$wWeNH.Ko1 H1$hY̵F~w*xehxvl ğc'C쾝Z<}/#b ./iۙ&pf Х 3FJ1ӥcU-Uh=6%t翊{M|lqkא<BTaQS1nq CYidr^ n{Ӎ2^jlK^x3)EQę}bF=U#\[i 쫂'> qM@>;{TIFnA Es9%peDSoIh՘ܖniGd/$%kY* 1{i@G8jEPOTQߚAԺ_L‗O ,ȉXpxL7̈ (}A<,Dq] l"њRNx cBw^F=374ZBPCqƾQ3QyNgc7cʛ^s:JF缗HlO37%J>=<,GbY̋ܩ2EbBk0)b\e=傈N:4'jC8Ns=99GCDP8lEdHGS7s^BяRW+{FZX&6\mq bKЅvn{Wu~2!;0,y~o0I]|m2 XIzfrIy3 \ ZZvKA&=`NS {kIbE۾jc—W1(hf P[`"'O%B5ǔKütY.ٺ&5S1PZ8m9S]`aav>WDo)лn z<<''c6РVgMJB"9nu fdMً`hpٿ=֍Р:mRTEᐳwk,hL)VPz;pZZs5<{V4eB?fN$U9P^v؁Nc}Woy'#D%ZN5gv2?E?"(.G'9}EgqaI?YFh/ܤ-9ߕI9,Ygd.f?bZ ~ P]u6IG~@*ϟgBb]%.ۗF/+Y̜ܴشQa~VC/ rF^# OReT6] /y}#= 8Oji\7>8$|m'Iw9}4T.Fxd4dTE\ }h\B]XCtƆxʖ`.1{R)>(uda솢 B:AUCePF- [ [N }jv"j:;h%MgΎ'fBjOS >(doD~"YkGu== }Ӎ} *2߿>0>X"2_qۼ.hR$Ge{4dJ< r͂< ;;vh{BOI7o2=Xo1]}*C Ι7l)SCU/B,%8ޣ4țTwiqΉhv}c΢IgL$́mS?:&ql~jU /]v vup ;<(v(;ցVQz1@<>,̓MLV"4 VK4H-] nR*+ݍ9~2~'HHB .$ | ',k;7 0ZGiU]:)-(9X ay'C|qmeevIjŞt^eo-F`M_A+7*'^eYW\JX993Bq|Ry5HȅOltdWN^RulO-Ns$ tbWAJuƾ,CpB镩c{d-h.~h1$_a3Z Ş7N_̒ _  c^2+x!)헼Z kh;.쨵@~WF,{$ҺQRpc_GObwww>'/+,Ҁ.w2&Hڠ$T0_tnSoa Jv$&c1D?SJ_tnN}](LZ`SΪ`k%#^xe*L.>kYhlonRv)LeM,vAGFymk86?  '7I1>P-Vk) HCr*vd6wg9ZX!MOO{<tȕހy10V!3Y44ҤlDC3ԌivsD@ u5vlTKuU#tm_/H!.K.7ZthѰ'iJ?QN4n?̫Lt?٭28wqZeM566>3C&s fD.*Sq}x11Mzp|!T~ѷ텾?K jx߈19tENY4 Kdc&֣Y;}k~&5 ,SȌVWG$ahOJyzO TjG*`i:d,L ~@3X%,jؠ׭)+8Sv}:xZkw%ꅖP5_RfGb#R:e%Os qhqJ6; ݧ<; l>FHzM=y g׷ZIh>SG^[G-4"UX:)qc{ ֖CغQ嫚XU傫EE)9)[zІZcw4Vb}G]WT(|DeA&6YPvKiP<5Ek"|UĬP63?dk@=)0.2K+X j{ ] p\CEd=HrX~tO+B]%,Yb+]qP1 m)n3kubUSLJG?ܱo X4ptr n4E5ynj0AiBh;U0$-Y.m3%RN{oeB6G=3^&yoReO{;OMԐ4 p0>*dL) q;Ր8> 1M(G.E{`dpP80]a"j3g2Ͱ%Ts6Hoܜ(Mǡ7"yA:/6 ztm*ՙEeȔ,K!f(fi -wVOqآ܍FDsUz(}hR8wx&n/̆ d]{ M \ ڀ"qePk0+x89D%&2$\~܎ A2bkNkc9*cy `1ڵxћ4QQ${MſnHmEH/"û.[.|2K9-My:OicJ{n-Z4>LȜGVᘅ& (%:k{F!,z:$iqX'O*B~,FP 0H Par K⻮؈('>i AFgFZXXZݡw*0 }1[ ~NFm6KA&' /TɘF"rp HN2*WCG^u/9Ē)d4* )]l6JFh>őVfhݰwnȠfb&.lg2Y67sѡj*eQ˨vgLjg42M|ƛUSrkΰ*ږKu3 wܓF -8wXutMd{ n7:XB6wD5UHQQo klٗڑY{pyL[Gzoh<֑Nk;uY90sCIe lT/ɹ65mJnkǪeT6Q INdtM sKR:^Q NB>~6˩@BϔNKRz'iĔL筁B4#53۵jRSO{zԮܭs8@M?yeEYȋfA>#'b-̏6 譵R,K*;sj>/u \ ^L2v3P)𵨸UxKieWWq-WC@ 2T}ȹ.wbUa,aKזsO( ?^|֯CԔ ȱۮqޱVD$OD|vrTd麇|IJ"=Mӓ4T}S H C9/`Zy9אeL[yq.DxG=E}Jzi6b\Bf5?r/<NuScxk;P9 v<(o7I \ʚ @]a-1S0nM|ŚhG{?*v;芴kEr0RWĐ|ǔ'ؽk}*x#Ԣ0"(*zdָ.qû";0@b#L˫?#Ϥs^&9~&&)ڄߣ~ݧn0.RsU`ܑu퍞 vEޭ̋YnˮG2Hflrr/T1C)Iqx+`  ő W:|IHu{iKOyR̀$c NQa9ہL"_v cHnfSFl)$3|HDQcRWýjHIp3ZHD"I@Cm`I] gAgJư"fkE2I Jh7zpU߹t8g peeQsBߡI $]1mj^lk oGd4?ڭ -R,՚!Wˆ{J[ Z,g fENIn8],mu)F}isn_q9. @辙9/$yVi7TIKl?HuaTL>(A{!,^}g"[7*-k:1MQʣ Pu$Ш|]]s6 LCÓ/tq@x "më3|HMt91~Z'U2 trN؁fFLBQ$iDQ,?HQ>QY?%=8-j؈ ywSe=9q̟T "[xrb_{3>&d֡4d?1xJ1'-<-Wz&RY1v 0\ːIO12cRDV$jו \@a0@<1hdƕ}Оj&\rzs+ZAjeckq[+M1_Bt+$F !ڿ,7Tx5/6u8_NP1'N$`Byd|rD\v.HQBY^pIjCK|:喇{dT..?ɜ4تEZ UFK8k*"9&Km[tir|5-w0c9$v@![t\Ti ?q S:g+)edC|2 +F܂C!l/#.+TrR3Vij_Ur"{YѽJ Mюa< vM dELܞ^;}4eCI* %'oNpǬ]lC)y 9$ʇ';Wח/Pf|$#nטZ^ƙ׷ӎ.?4'+W'oGT 4d+p77c:!a帛OV~74͹7rFĆN%&e)@to!ߐSeHHM0ӸNGK$3FÓS@nGJOۂI++<:Tmj5E@P羃C8܊)+z?,35!/7z'#u 6.(n;iN)@6ʵ4䌍Ax1^.KDٛ3T4 5fNr#3}— [ j=d}n8ݥ0{6--)7 .Y'tX\SHqز]IpUWރ$(ml>Gp0]d8@ XMY5<pn#f"&Y؆?tO;兺 BLu~>M'?5PC5/ukDj!&Q˿=6ruL\bvHFI/ W̃tȺNJVp$sJE_|aJGŽh l[K_uǟ%WyzHQZB; TߙRi,VX1KZu$r\b~`[ i۴Dz:6?ΧJ.6mp ]|te_rh73Llz)r%{؛Jvwhx@0·Lm[z$48&QX"Ea,u%jV$X k~v)替:b{9|T`S籉k8z.-uJ7>IG,6r'3V?>`ss:CEA=T pD:#=y8iuXn\!aG'@$\y {jx{#h_anFım&JK%K7[jA/3hH‹fLrV0h5CH19` }U6U~?Q:LW$R62RV?k +{ xѠYή,O~3,v c EUƫКˆcY?[uZJIKB sG(N#L$!w۽Wd9Eq{ɉP5x4N,V,cRsX?UE-nOL"^ed7 dcޗc$ ->JEb'7 8#~dJspw"_^b\r|`/f:zl*GϗԻ2ZE:'l'99 0@KCLO-]7t؄ a m*~ڂ kқ/`%E|(<n˛WRV9Z> ӏ8$U38V)!!wElG7j=[4 gSMEe&ўTI+框 -eNg&[DÆ}mHE;[.Д܇i%}3btD7MFWg(adhzserVJ<"uEIZ1+avKsH<|0ot$@Q /9ukD2TtA[8#P{]Fat㛥#,~qkNv:"&7#{z)LҸ 2mac$7|I.@Q!@x*t~5틱9A -3:Dùa0da PX7}hox go޷(r܉&P9؂GFF³:a2jd8_$v`c-+>/Gr]oP lK]ljjǜD4^Phc:?B%4Y64? `5cV꽁%?c= <`\21%qt#KCc%Lc۶m۶;ѱqm۶ms0YLO-ju=#vS!@"6"C}B|uˇ{ǃo~h?^nqE4fn^ Rz񾵹l۳&#O `_tjXaekA>=/;KtKb`M1'# 07.H= |W^u!էd']Yr2 5t$ӟLZao7>q:2ӋEr珓?msΉYHtUۆ7$gmgfOFR<]X?tLJ5n+Y?G)_\-9TqtQ U2rކ^T2 Wyo~?josa# 5܅[9 +H0{tNhs,2_è(5YyB0|:"Q[/SZ^.A$ME*^ԅA$CL\zȶ%=nl+Ϥ`U Xds`*\j[{,ò2!Wic~!)/s=>+V(L]Nb@1]h1x *D:EpX~5 A',/?݂j0@d7]QqґTZǘrͨ +)>(#ݑ}1N<_h*ey^{NpѶU6UMW5뺐ƚ™$5wpVcKQ`ս[cyEMeZmr({l/^`/{b_J&ȶ:6Q*kݥ ߲am+wql50a>y"[o>lZN&Uc*[%"(чaΒ+~ q66pã+O*5]<J?۰a *]!Yjlk)Zb+U71uZH|tTc.e[2.tcc=h:nNH?{Ũ0Ir}Wv^j8NXt.͌ }ŻE) KڼBًHg hcG1Zem!)D(pQxŚ[ܔu*$bO}t籸c%†LLX͘Jt[Rr0rN +U(Bjfu5rP$EO{G`EDѹ_u-oó׳Yw!Y{ Py>(ST#/5W 3;@~Y\bmZ𲟿[kaQjaA*{]S&2q?u`c=MHȎE()bgᙍaN9Fbv.*ҧƽrR,Y㣂[Z[s=o\dʝQdbਝҤМD,x)10X+>q^nl.=/2*-l:5WaԂ@k҉{9b-:K+h>~0G 5MSڂgS;&Hr65A9!}pMdTqG|RBY1N:c[5Ɉҫ0LLKb-lQzF"0&@㚖XYIǁpCf xlBW ~RH Agd*R?p}&rwDҜ'-DA3b j@!~p؆ doŇH⬶7cŭ_U%&%`(G\e&϶bF3@\b ; 7bU-ۢI XN; d|7izjNjKv”rU ?QtŦV!=x@60CvKOuIf:Y/m|K7vw%ۨZәlx/KY ѐub۔l<`K\_S%s?-z^%Ww,kAvv)>!i"<s6ZT8 ^Jˣ=is/x  ppP( :S_Zz /T9\LO^<wRdqQ5=dH2*K}SrOjU/3bo=2lʮK?kaM.]BB /ᶫhn/"ClXBcBB!=6^A/ڀgHlZ]R*FL8BJb%&ǹpLwnyY.Zm}Xm6kz=IIX\f}= OZuA9F?k ΪòvTvpNV $I2P' -Jʹ"g6za:raԵQ8z?\vV Ӷ'P֊=aSǞC9`@8}o0=qa $"bp\՛ ܚH0\VŦ`pZ{>}3[1ەF~a~x@5ŧW0˧kl/:Qew^`f  3k1N-r$0H2ԾH1J96͍}EC9wz+DU8cH>k^u} zyRʦY:iEQjТAj?eYߎ`rIe >k] ]%=/':dUqLMQp#0b/f-5D!gLG*[X9vT]tQaeD l=6cUH'J- 6Zbي7)_y7AqFBȇEy;z1Ž~zBoaA;V ; q4Y/??z2[^rtE,u6&7B yE9.TX׷΄ڳ?S1ËUvݛ5`JhK\3#S/i 'RM/ ͫHJګP߯"‚ 0 wP"oMeo-m~bcҾ ;Z5حZS X)W#(GKPVU`]L5IZ],;"[|gW*Xd@neDܓf# V8 "dg9k j3 a[6Ơ8!+ T{du{_U t^薔rS"դ)X0'y Фk>϶^moPao(4 ~xc[pg_@;Z* ܥ[-1c@fS>DO;NA jR."[a f1мu T# DV ,}]U6Ɨ}9rz$3lI?U4IS/@Eͬ`@+bSGF[%vhn)>-{'7Na6/DhÍnIsGowF:Ʈxh){ iJ_HzAKl['> D9'aH=N0nqӨ6IHY`qhy?DtrXWzd{ӿd^mt3X(MMካT+c}F  jgUZp/"S. &aޭ00m=?`Ͱr_ F v\0`H׬uq`?gUDevV4UM [ݪ@QZauyV}5NvUJ*CXC9js}5`89,$pmA3.;ro $"Ko~w7Jۺ ^J{A+ޛ~69G+xQH8l k섻76VD2}˾N z[0HCj>IHF8o0!)KpST==}s1ax}gl#I2cIViƞ޽UPˁ\h0c'@iJgp~uJ(**9+h2de`dSݛG [fEK'X/#pi}Rz9lX?チeĝ=MG!abi(PnTR'Yihr+=YYNo9s+Cs.pttIdjGj"1u1R\Bgf*ָw!R kE-u,Sܤ^"Kw"')ٷ{OTR^y~*gPMda@3Pqe?=J2;ŷeT ̴̒6ԆIt{ |~, rfM^AtM%p8 c/؆,/L ԗяdpX+EFږN)$-"d5z)0\%*TLhD/̷,ԈP\ųF`Dž\yȥ AT `:T5#uŏwܾ~FTl#YB6Lu*6Oʄr9 I~_^CU1ZᩪIDI;7y;}Ml䇢=΃p"CrQP[ݒTWnTcu?&ٺFvH6„(PhJL#BOQ@VT7j&}'3L:\ގ[Pkմw 7e*׾&$S® _ .D5NIH(BFeeQɶ@&O/'FRQQv!Ȥ/l@"7ܲΌ"[)͇9:-%XT콙:9jʴ,E~}0ʄRt OM3_ڏ$+I+G8A7Mp;Rg2kO B쯝81xc;FRY^EJóh:O #HMڙRPů>:NS2q=6ɡyy!+/hLKN7M<{bc8OE8TE^kb~EAID[5 EJwԥbܝ= /86`Ϸ z q¯҅C0Eqٱ'0tuٳ e RS|#$߿u sٜoStk:]MTzRz8  Hr,(ec=9#c%TINP9=3à$wL(y'?ӖӯtphMQT*"ļPA T8k6؊U(oҬ/77JmE#5|e+">L0X'J)TUw0 ᷚ),wGէVp%/+h[}+Y3M+}66A}\ BVTϩL; R_R|0Z&6@LvWHEu= /b|Ż^ed=nF'S}x.M6;H7 :n n"%&1Hh>j 4cƢJ9J6?EIk7UV:'鳕u&o0)3Y~i:{ZtBXTBh+b꣝-o#,l68ED)>U-|>TL5}S)J?LQ>]w~ ‡QvU?) R$'UVb8@{a"\DӍ3)U :NM) Q3qC9M޿|h x 1skY3HRE˜_#}[TRDvq3YQ~"Stݮȵ#JefCNZ鱅M1K;6~8L{P~h[:9W[ۄn45Z>`ɘ^CBmǍ~&g ; ak$^9w}Y4 Տ'0O;-.ȜF r8Er(&{jw|z"xR.k33SvfM/?ˈ5am+}>!Nu=YU 4а j%$m,am#%pو6۬EF&S'NHiNI3s#,Ԥsu卾4,xh >^WNЋ hɰi?\Dɛx%欗fBOuʉyDucc6;}; =-&[͖YEC@\} Sr/Bi'<"4BPuh2M\iw>>U% L;q)/.ew I YQrP2m1zj]g*[VsBap|%1[#dkCJ'EL&wuBF ~6]IQI%8lBU(_i ʱFc)F/< | M6Cz yGށ(И>[^(4du8Kw- G_ }[0+lZ4ijF-8qR+N9KQz,{ѬJ! a,g X/oS;²endstream endobj 10 0 obj<>endobj 11 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]endobj 12 0 obj<>stream xsp_/ul;;m۶cvl;mcuNN:sTM՝Z>ދTEQR:X199:> ⮖ )Ȓmi4Xyyy)Nޮ@kFSM(̼vP}<,흜,ANJꖖ% ho WVѕUH+i--]M*f@s͒` $s;9Z ͍ Q7)fenlts<nkWSGg@N?|ҭ>S )SqrAO*Rdc Ƕ pp2w'X|rA@G70XݜM?m9冻<`ZZZ[}|b_N_>AnVLl6A4t wyX+A4 N K+xf%'g4gUf#)oyRJ r:?Ŵ-h,M];,E? g~@7) dn25-,]큎c-`deӰ9~N,KGſgߗL|0HӛVt\qGQL `daOx8_ @*\^HYX?1n F⟙W:Z|.E]-e%>ece-swWU=r--,cM 6YdɣF)KVPV~ ozs!z-=*M+QFeaW?M}]z~@@Ȋ2L*l6_%v@`,tHcp_W>r6|tcD`:_~8D 94ndpfQdZ?uLB5Dv-+%eXeT$F1q1Mlj&%$w.BƯ fmg0MUU \z֝^1'[>ܲxJ2, הG Mx2HLK{eyq/=G9@:Ӕ9gAk }vf9|O>Aj;ֺXmpf!43$Fq͗C6b(ZLtϬ&3f8limQO@!>\7`lzk;t  aG4*%HXqD~,rW|p+E4&]t~QEi/}@qN mW"c/Gz(}(&D򁟥%Ĥ4$%rOQuC60Nz̯ʙ)(/kWϔ '~p]9cB%; 3> \d=$>KZM B:ϖ|H$6yϲVi:&W:@ށwU ҩvm͆F׸x~S} O Xسm@D,l)i~Z7jg!@,c ZѷӐ>}+*%Nc5| 瘔snb-CQ,|^W&흟7jdiY_mjoNGluhޣo 6t,I0,y r~ς&cS__lh͋\G<%3ݹضZWtu'[ubUy7S(6`>EXRlf\P9?JJ  kJbVQ|/9[ި)D#_#E'Hc,BJ&`=wHdZ},۽S߆#mS&$KP VrV oDǯ- nZp#vT}dɄvPt\2s͖B,@SZ|M_z 4a+A*]c/<-JX<.Íٯyl@;H I>:UIMHcf<]K;e R&KBp Tm]q,g@h aM~ŀ{I#nY<˽265ɓ!$tD#%ٷR٩v<" evj Lah٨Bikq╳SS~A#$^r8zF\'!򄷨猼Dq5l-lw@-9QL߇ybc!O~Z(]bF0H=,Hw (\t'I2׌Yc O CJ w;nnC1~ݾm`hx ҉?韄.^X:2\.L{uiz#BK=&VgJi|*= 3oɞUã'vlx{ _INDCJ?KDO~ûc Aφp#j0osemT; K7IlvJ&tQqNnVg# X*ͭBCG߻t"s5V%/qrS֣ţ@~Yj#'M^8^jdHluw'!TtT)zLS|s!xXM~,])Kuݿ+DI`Hr? -H_$Uf97Ef:-lhBޭFە񊇛yGWlיy(0Zʪ@t%OF\.i2c\Ƚ)8G UG?T)&N*BjG-'HPnYكin;f@v57fM#.+=m 4E?<7ܧ@yGO0@͑a[ֱqͽjζ&TY_ ,@@}c;SĢVAU]iP)38Ma?<0 -8FsQN YmLiB߻'1[̒8>LdEB<%ĊD .%GPcK`@Mx;wB;N.V)G:m{Jgya762G{@]C{ij8 2F%js0V4;Ja,%(J9l=&qK7b/ I"t (>HE V2Ww4N*dO!4a*.˱kUMذV2h[_59:EK>c@F;v3(:,, vc R 3G[oɇVq-5z3k#Wiy*/dbjصsBq1rE;RE߉Ff'L%&8Hu(Qrd֥nWu_?wmcbiJN)lL*bwr&s=T}\7t.ZeA"4$u|ICum84f98 wIcJb):CM}{ &?,o o{>'^F?)a=UڨAEJ/ƅAO1ğ5֍L~g1Q<@qbYIr A4ZCI4P#;k]x=#H_%uZa6`;e R80Ud<5)f^4]щ|k0ƵoAz#G|(*bz*sZX!̇m[qG~🎼BY_A^;HW9rz,+2P=f6e w}`ķ'˯(`6?L<7Ty xd Z\Ӯ-  Cː #]jCX'Bϊtd):uHK!Dy_`\jk'*wOiw8ߏMcx-tp2޿7 HK& D=Jrx-*oZAcDŽHQ뤎R"`.jѩ4ɏ*_ *vGy5a̻B^D0(M {£1oK7'ZQT~W K=!jRuU¥GHs3kӃ¾B׎)6]nQNǙ#ʹ.+jԵ5Z_8N",;<Uxs 3-[4VRzOj9S9P@FDKzm8(ay,ACoMQ%ɂ V{Ck M"H4s=)dUzg}io7(D5*#j? 1H˰0:ȹc STZf9,Ɏp6rFqDC%ˌ{/q׵]dV](WƜ>o/kaɵYүAmHǦ}p%B{{X~ƽ/by28&_ı6 04Xx3GGPU B 3G_B?)'W0Qp^3nSy"*b?o9  HְZƒ}w,ǷfeO_4Z.kTk2U?;"H"gJ }Z{;UHNDʓ&1;{i3v.51Vy*K7;[N=&9[̇0v<>`?֟ -vX{@9b3},yd'{yKVUXż:8cQcql  2YR\'Vhi>r\Т)_8c-k^yWhՁ)ۯҁ1!F+6Wz|5O HRKwb ZȞOV_<*. W6P׬K$%MكzG^x}44"ԭ]8-9b܁gv֪ydXˢ<Y]ƖESD93 .IRIfj+Ly~n`Ƴ(w#x0UbՀf _G6 U;#qtӕ٧7_]4S&W8C{;=ph2[R>ꖰ7C_CJne5߬+Aq-T}gB&*nF tPC0?bvY9R bd>&Fv~љ)UOd53Ch0H`,}=d>g{W(iq!/Q ùZX؅qUz 賖_p$ǦQS?ޕ`'6y'^.(eQ;"jnyٞkfܛvΕ3Hޥgi,4de׍U~U#Wt<o:B턲ɚ/uw+n0$Q~) vF0|cby-YXFwz77S^kLlI\vʹ%W,E~t'dD*}tAB-oC=8%ԩ/8i ob#'Aܑh^5䄑2y~TO-C3*ᶸG`<%5Ġ2¶K.b f(~2TYkAcjV1 C8+ , Rx̣ "|zI%{ISRC;wRuBI٦*J~nՐ:~#4FMÛE}.l5@2gM6z^WOoi>`N*y%'s].g%%&(c/,F@53-I,Χ^ίRbsZ] gK ?iLq(?g*1V Y1坠cvߚ8<}n;93#DWm3/ k6OIMP!E=G=PͨL)1d5/E]cO+:TyuovĂ/)Qu'8bdʿ?B "3zU7(cPJ\}6PaI QC;&jAG3ay}P:s;bB%(z> Ϙc%޲h S09j?l6\duc [lcp%7>ghm4{C]X)-@<544O]g-:.ym!910cKܠ  ?B.'GpCi(lq{XGX{W]##[=gdw99gg"wTx_LYߕ/y!aίcX+R!6u@0h8{kqa)?yԑ砉ks S~Y~q:;vVV%j]Usbemr}x얍2}$VF%ټ ֖壞b6Bp= ^_NB2RGռyVE|6{k{c1ix65;{<Hӥ]*N1U~)YA%CN ] i1\hTqqeMvpM R=f7xet$K')iw {c5z]t41-$?afE_S|OhqBg &WY]RJcHJ:Fťq >CעwUU9%9#З*Oĺ3F|SB>i`:gRr8*/ ׿:4Â(= J{e )v(e0/䦢TEiMfij%ؗ"+ ]sd!A0 DRaX jZ|[ >1&oѰ 1eև 9)>\\^a/7~c}R[N3W#ԙ0C@prAnRyBY4[ъ~V ;T55_Otu‹$Zɸbbyd.#6R]O8o>;n^+Hջq!'ir?L>@1ͼDlC.tmcKڎH2уj ܟulwr|~?S3Ќ:[,ĿK IPCe&w2Ûv]~B-zggE2k'qK;lܽk{ kT:{rd;k?'/^4/TpziGEǞnEZ0 z >\uq=e=&%bW-fldjoI***ξ QV He+MEAC-d&=i*@7 9iTǚ"WB$2יqAT!J#wavQPfd[$'"-9O~!l[f_pME,cŏ;\|(!R(*.#/5ƐI#-ju1\ퟓw͉-Njp\Bt *ZX|GTh@AY9$w|i_gG;TY4$SWT Ĵ @v$~fWqCਏXMdوӥ!=fI/{9:'AucDij:HCLL.R*gږ7@(Ư`:W 5:RE9(x/>1q/M෩nz#%1%-qֹ:ns9hVS,~9=q}ZWE9{YݭJ|-ECPU$(P$GX{pd͕iƿ^3wPm]8nwNOA{~i EYF\mP/; dJ cl_b& ڴriu9rs0oمZe7Vh1ڙSg|l|Ş6dJC?-CS+ltf<x.m|xmh Κ2q~$0-[ccNږ!D ިp6V0 .{a( YxGn iNjAݯۻ=s$iv.82 4Ҳ ~5ȯbҪ* #񊤽"Gq3 #5gs(,^tĵqF0Iǃ R=NX2pi]('|7;P>$d\V/ǢC7C8̟! St$R3d?#' 4;؀:NQ/`Ԋ$$0`+ P}NВb]3:h/n4*CݝDmtd/yl @"*<pV?9b[-k'NvX\0w4ܪx ^>G-_ޭ@Xv\ "IbbS2Cٮ|b=OMpng6-uubHueP_>QE Sr?2ՍܫQ]8OYbdEH ߦw*!QhdOo}GN$puPx˶طwC̨]EZ?x5a\9^?paҘO':}1~O@0$^kngdeTxg)+2"c2_!X`E5A7Oc0)6VkΤ;SO +Kl0E<-bm\TRq;R9\iW)@W}mTcC /e-m9T4NrKM5M Bg~88_M)6{~_)t DD7#Q/Om  q%2kLZ<$u3;TsS1^x@ͺv^ ~jn?=FL*u^Ms1l; w1p].M&NZtq ЂaD.(T]+J#n>u}?EX`]hjn?%I57{jڟ\k{O;->mYZ.8&hE(*~Ytz9qD Q8UKPd$8ǎS4 8d`˜ezYL F9"Ylv< CFtJtxHt MTMaId\_ڍ\b^-Y@3Ekhb X3>X]\"9-GY0:a, Q/CI,z'>Wf٘K'*h A]7jXʍ*H&WBITV&93恻S>5&銍F;9G,t}l}+K-AB lSɨiwZaZXH7_cP*.m)$nRټ8tfMi>jj!ϛZL!4ay <ؚi9"qbd3$SQ]U>(22 Uee>Kэ%)<cAR}.nI-o *0M>s[XmaR`t^T́r]B̋L])ziAwg?nWDiԾR9^̕((4l>jA#';$Ў2ebwd25S"hrWn%"`<ْ Nnvi9ʁ]Ey룤H}QA]8@sxabnhRb(UKJ QdX֙%X-%}JugsnMOpÏ ƒ$F~~?bke8ײͶSV6hY/Ux1,;'qQ8̷W2 Ω:>[-G݈C%jR~Ga'3ΜByϴ,F51 *VW3w?(Q [Cr4GzFJEXun煡ƈ&nŘO4t?NP qK.yrfK@H*-1ϯqZmv{e8s.ߢ^cGq"3|< [odxHNyYL樿xM}et=RbId){{,[Ko)={B EVU790HhdP,@}Eez%&+v-^K.r&G@ %8ZJf\a0پpJbeB~ vsA@j1$֭T]_=ܩYUFćNMqƀd^gqc#zͮWMELU$8X KyĶMʆ*bq$n zM2pgy{*,׻A9= s@MV$]D0I UbZK޷`AWkp5w|g-FinP˂/?| P{'> X% `&x0|5䳉-K1P)+ bb$|P갻3,̋>IiqWH5m*j[ #0c1r|Ѡ߿[Sѳȯꎨ0ĕPIH޽m-e]3/nz:(]A-z ̇Z;!&5W /y;s.|ILku.2Bk<}wLB-7HN8)H m[գrQF>q^" F[ʋSHZ?4n(DY'Sljh OvO{x7 5ϋdQ"%Up4VWo~r'.+UtFn GHfHɇOW HSݵ't6Nc&m0?_sSV/ǺGAÜ![N,+g \"-DT7I;\m3RY.'[ۗC,p.r- '݆IMo 8{f5D1Bh‹(hGeޞ4OCaFQܧ%B.5;A~T"M 8wSP{u+v\CG!$5L0@'9@5 Ohnx$1N5/%2}84Pkr! $`F%W/Oˍp84YS ꩘"sզj}] JepC!g2`JNhCrp5[L~ QZb}&<{ļr7 qtd@!k!?ke\MCJ\HUmw"A)0 -č`k_c~^mIdI ;vCp `"/p3w!@_H6 ~:dҧD}3B>_V{2)3z@v 2}Xԅ=fh,91NrpfvkEq=m5*8)|kyuG{<;=3@_qphR NN3=p b^Li_ G=;#5rRdT9ѳI D&ՄkOd+G@?Wn4@}Z#3NEBg=T~/1ܢE$<}'J0e0m#n{3_:AfAlhHK!L9ĪGEBq@, .;/ oz {`V32`f+{S[1ϩ$SC+AvNߓ$Y+hHamJ3Z=9ݶOO 6k r ^xr\U`roMAH"IŏDr*?#>UЁgz{#gbᶜ+A]e8zLYtOj϶ Ѹ癣vjpu??1c)f\?bqI???pdhc1M%~#/GEfD u;5rQV]({SńC"NcmHqkt}w/>[.Km㢿lbPM(Yu4k`NB1؉RCAܲ[[}b}dѕmiɻ`u;[l~mˎ{)GJ-m.t+Ւ?1QKCџ!KȠP_*@տ9L~A0ޭ()h8YWt\ D [=`+juld毬tzuGW& .ʢ΁Z lSYgIMU (jf]Ԅ2)o1:Τ?kk"_W Th3W\˸BBş2(#kˤm>AbOk}$f8JLg庥i&-U7Y=X&shozX'2( '/璄Z~\!ׅVN۾csj|8 5"(#٩ j QB9]4O Xj6놈NC 9]x_B7)VWq3m\=?y(kzx4YGO2k29MX^N?? ) @^n)aq(3L1ሹxAJʆZJ~C&"\r"sG )IVkZ-*UHѷ{N垃yA3TߵQO3З GlC-.$rs"3>ɏ)g6ӄUAB)z?7ScGҍws ӱF!@nt[+JP\' 8/od;bG]GL 5%z!Lj@& +?gcaf n|lL* ^#({DMx';z[7ں:^Wc&gU|X4\^~qݶV#yKÏ3J|4]Igdg\!"/ۢgR!so!YGAis_8T޺U"70m@*}x\W$ 0 !+P%9Iyd+CcLBk-j^ w{$T D}M=U7X Ÿ#@UO˽N.8ǡםT}vt0.#ѮMԕIO ύt'iok%hI.3aS@WX|ƺ; Ի@ FVebAGP_3jKhCӊW%L2q!0SY(K_U/Kks`6 tשY6{CbFo2FtXN} OłБt 1I,Ǣ|bKP]gӪ^qš𭶌|i0i Kt,Vhy%+ϫe'Wc1[Ag0,֙a %H%674bхM/Y( )(p@ˑ~VnAr}4."Ttf"Ѹ̱.+@[lm)""mX/jvLϩiV\PS9b}D_[ÃMiŷ OWɮ#E޼}3Tj*>|Bt5׼ȫ=(zw(ED]j8q*[>qFӹmg,yV8uSUf)0Bԟ\*rbJ+g[.$Ɩ z3F[g4/S[Z}vi5|˳ۍו])d:wʲ(W@kE57[{|78m89֋; W3}Ejad@RfR<Þi(7A#po Tp°΍d3ulYǐo='E6eM%uz'_E;iT-KE0_gfB Ls㣚I/?J&:zW!zZm~ -*~آ\b{g_>x'fjUIF`!JČX m}qk <Ȓ*V぀ME'%YUTGq=ШeKw¦[ut\F`QIS\^L%!Dt3OsgO56>*K3$mcr9FQKu*(ᛖܙa*֚jF@3sf Ds8dqwf5Az6.*H``^9Χ؃!-jc(R | ˙qǹ3QVvHH~c[@#"\{_Qm~l~6k+yFP! +CeD/0Zr4 TmN4=djN1ĎR>\j(QiT{3-t*d UHCf˝dC4w L\n֠ *^6YAX~S0¾5VҗO N5'%[V*oO~="Fkʚ5y*!! m*Z(=`سaM@I̹vGJ0X#xb؆PӋ.77o>@`ЕrXibA5_,RPy}v K4^Qu QTlke0uХa,a^)Jo=뽋*/H~z rJw>RQ<ܕ{XPۑEq^ҫhc+RO=uƭW&KN BD )iMZӌ #E8]cWꥀd#gk'Hvst_LY#3 g067 $іev:(Gu99*)0êub]Y"MU{܈v2?v! ,~PlQ98:2);fg}_s&fnQpbCQl3/i 3CDa;=Xk"πyui#RjDhUoX~JsSX<6R ˜0.(n1p`O[TN4M/\]I*87z&3] 0`x\U`/ij0H Tw>ayME_,Bn] Y0 h+_pA=0MS5~WNɤdϴBqZ,eW8 Dl?s5ǹQ䷾_jN G̉GAK(p3 eT/0W>a=]ϏH;yu ρ搂q /5l9: YC_Q3"*= a>;NFzZ-1daPc~JD_e XԵ75:oZwzyd2+H.6P oL["'_Yig1g{~x[Xń;IX7O.:~*vP]M yj> ӑp~S)"( K8J6>e{Ml Z"l ]ná 2oV(Զk4rS=3Ԑ2WB\zn[Upi .^Bq6=I¨[i1O‘)I;5:]fY'{(RMfn>KpP=TZj L/5s?$"BO>k؃hp\a7H3EʆRWW%%ߊʦɌm#oۍ*7jPMcbɤ%ێȔ@d!sxo9j[ !+1 `` J0|Z~=5.%gig*gz3_W)8Ɨbf3 '[tZn='4Gs6C\b@ߚ?%]'n^Gx9dsT6}ORLv3}ۚ'tml nBl룔*$"y'MVq>M| w0cuX%9ph8j,R9ĆtO+x+QnIC͟J *ILQ6M-n[7[~ Ū64сC9r` 'ϸG1 _\\O?a>hwϝ#D^b=nk엍%|jSd<ߐx$5 n_{qt(jY/> NGJ6v0G 3X#d^K8dXY8ȸ$Iv΁@bb1&D6D]Y1o!ue)4 [_%RcIN % ']8KhEGJ_uڅo:߈,ÃYc0|q&p2vBe_Fԕ*O֊ /9f4=dXtUlcG[Fv]c85M-ģy`Uj HQZB9Wy2-g%SS~C߄WrYge/@EWۉP܃` K HAN@BߵT:N*@Ѵ 4h(NsQاvMD6%¹8:~"Gcffoo#|;u@b*"8W ג ‹ [BxtcSY۾s^;[seo+U5цW5p#ߟ[~4P-)=˸30StxSmB. u4I.9E ia3c¨{X/@Ո5mG }bpodnezmG^Mfz$iQ#HmV]8@Mfj .ըl0QNyVh2+8?.hG[ClGzÞ9IdR8c=T 9[xer̖t9x܃‚*p, |7XڊCxm}3|e!NA_g?C[]n=`4rzQIT#zX6LcF`qya4$^ͷjK(A܍{>R{iW-*|UMcʀIO `U8|SMXn~ɦWj,2e<vj ޯuqe Uo`)'7|Li *>1H}T&m)(a\p<=8ҠoLvJ1Y2o?45 VLn az/%xItU%`_;@6 l&ۺް@O4ޘ8נb QBLг,Ibjo}zz|=vj#@rq!_o+q4D?b/RQz">? oBDsT/&B^^'n`H?b.߾Nر{zk2P& ȫt f]zii}StaIɆVHJR-fՅ15^j &.ʔa&OQZD6<7ܘ?36P o~㛑\:+\wMJ+j:@bk%BSu]ɜ8 II9;nkW"mL L\=>{2(HjYyVBVఈ{u"/Yn|\]_j%&aolܘQH64Ӳ_F_.8l((Im22cFV0z~ݳUn?\1FJj~XF:d 7$VL\M~#0d>)r6IAKk}8湊Z,ھp^Q_H| &DyQY>JMr7>>W$D9Nٮ6V=]I$$$B}Ĥ1ܾ(E|$^:z ϖu}[׈zhk'Fx>ùdhŨʃl{&c[mW5&0WU;`{? V(#W+1`W7d4^϶:[eQBq;GFR5?Ӓ85Dȧ;C" R0x"0u)i+ix\`fvDN]EWс2[$ 48(3QOmn_Lhmd Kb^9hK([t*W$37}p˱A$7>,"WnX3^XGòMIϊISNș9R&02ݢ*(ϒwT́xԩo03Ht;P)$*tz>x 4~O[AEDz0SIz3㪅U͛\\Ԣ7[`0:(JC7v`a +ΐ*4W~ucV&;8HHJjGT*ipBWldlrEʃMO;}[A] *c`a~m?@.iY~WP07mF6V2" yd1NT7s3ssvzJ15;L52Tz!oi CzOSZgJ\GtuCĊ;${,?cAh]-r8|ae:̒j˷xvAxvx,RQH>;sK¹KQ7Y^jNQIT1& BbQ[߳`cm+W+V~$oe…lB$S_ulqɵw_~!8 "@,5I~VSvrB_xAA@B+&۫nc↠ScYU$GEy7@ ݐөA(5bJO zYh6(L VäEn~plM9OKo^{x(0=>5Sd7wR j Da1Kи^YeηOG#݈B3SH'ҭ3Rq~&tG$4nHFm`b03S 2Z%X/0"jzdɿ0~rX}=\nf@ǖ<05Ugaf|( PjF,-P[7b=݅\jEmoH)'0N:-22PصWYg_G;υ L74MQ:[c w 9A X6JdB ~1~'0KM%pN?iIER0#&-(v` $) m=wKg>ŖlSZ; 'bձ =!ɓY/((Kؑkk_l { (^3:!7swa>oK-j@\AٽkEy3SkGLI(6Msi-h9@e΂i{+{fu&Ti{ФTN{7t⋫Y],ftJ[m vx\_6fƎX5з^-=JS J~fʶʒ"81/t:/J_$?;"9<12 h+h*) ;"\$%߁BvY-~uG[mwʜgu3gu@v{4;0.E-V#dpyگ>f-[+he[<+ r~ϝ_ȇ _SՈK9,WT}<)zRIk*8h$ (H EƗwwrV)GrK$lba()ܫujW%Wy?k#V8n%5Y ,0dCt. )ǯm[;/Wb[M{-w%g(sBK N#SET^2DE0 % 5mH5|5lWq,[ YU7R0M"=/+cYMފm-ߐMj[˖cxѐ=\P uiʁ4-z(i$Hș02M X.[†WgzA؋˫ qf^r+vDE6osKZCpnuTFM☤L5%.NoO\m'l9DU}g@gtyjl Zhp=+cX o3浉 uɃ<%gAfA"#oK;2`ezX_˛&tw8#gf<,*[{vfX\ۢԦ~lHGER -Y'ݰ'xL6*- 40Q+~J^8'wռBwOʎ_KGR_S7nmJpI@qz9_@)2ϋWg!md4]q뗉 q'\Qȑ\6?uln2f( !6d3/Vv8F/ Cd!3ZCF ǫBr*!RCȻ*z{j]YL ȫ=v"!rv.6G*Kᮋ[KVr }%dqiqq+Fib+|䱏_dHIvtD=U.mm?,LˆZ6tU3 b2M=kqni޷Q{ݔӕ9.%zFWS-6x_\"|=`ř}G727HX(eI3r\90h^^O=Y?BVdtǨuKXvK3bKϟ Egܜ&<]zpGl"F)g@U}3X&d<1%Ė.9q{0 ]KтA V9 R+G[ $z)EF8ʘ(Wh.꾶R;k]tp OmG$/ R+aeeiX_!%Ee폵ݓA7L9B.* ,ι]j=z¢f1DVNy4:4Ni7uOa9̝d0J!>aMFz-ߜFZyYa7~]7Pc2ť(AojkC4G |})&|art~`Ęo)vP78VjY5 Oncss,dhP+ 9!L3;d1[c7W W-̳-?[8d [ N7; - AL[ULBMrN݉8l#0\f%Ү=Dݳe O}pj'/2 v &{'=̪kۺ!w(nSǛs&tWU"^afu*:/=YFAԘ#jwΉDUꟇzR'R5dHi`6y-StJˋ4B6J Q?uڝ40uc5'5*g'GٵD#g={dgJ7 yW6(v}"pCsoSo2o?BSaxxbaIK\G{K P]efrt!$loX8e5#^YH  &{;g&7XRl&hj@/)\D PE@axg/IXeUi+M8{D-O1|wtokQٜ-Fm'aq@? л snhTmEHmە4T"4< F8;٢~VCYT}Ap.mu[EOr< P]q\cPc:eQ[h"<Tlgd~5ò<@.ui†LC Y NXo2 b$r>oj 溢NϤHT$h̭s{V6+nM%O#V#Mƕ#M)|l[,[./ciaѠȓ*, tsҠ1,Ƌu< jx~;$|7yxd3uiDy.}R9Md2+4ngߩ(vi8mnmBOz@S@3U7~q`IWC6 ]C y d)q g'?1!DYI/Xz27x;ܗEV_E]ȍ8t$O~%56?ùťqN,|-+NU1"QMSk=(zX])FYΩP0Q ^đ;UgB)%h /kSO+ntG&mu\-i^ Z-  eI(+幁4yX%oDS w%'OP- Wр^AsVޡU eS]p-`Ҥ6wHٖe\vԈ^;qq)ݟʵ3W ,ZFBqA>xol^Dfc{v{ 6t2r0ˆpRͧV=k PEkF&O+hEiӹ"G~ h>lBpJD /gZʗ^)X#HNh}± !*J֢C"D2;nj+2-qv܀g֠$MT2΢/R#,sGw|7 ŞRǵY4ȹl;W0ɴ\spc ʋKS%)XERPꄩ+u#-4)odv#saGZ?5 ,5W3`9\i)Ebڐ(,tLqBndD`oP+Dn$tCQAb.pQʂB%H+j6 {BaOMh^̷i]~˄Dᅍ RCm]sXʈ&,,&-gsq҇>ĵ쒷8o_"!Ŕ)BD~[[U6+=J]M'_Cb=,J<<_^} BM&6wj3cF1v{A#APe"y*KV0t5X)2'ڡc;5~%?^!3Г`(}(6L`T7e S=UJ/Hy]o$`q[~dhf GUd+?_J w7Ͼ°cZ'K࡯K)$GB{WTScpҶ!y"{C9<Ȼ=8ɀّwBW} aLh{F #]~8ҡ_$ʐV\> /,iZ}*"9ƔEEt QHJ脥7&;dZsZbq9g{-R): ydia-~6:S# 3͝Ib,En`U$P@ 0 |e׫32*zbldkR+һTq?2.$Ή9 Wptg.Pq_/ =$nϢ~o- -،6߈-;-f:3{ .Ku2aU 8:hxU p dY F}(ͨE` VB֘ yŐ{&UGj9=ZxE M`D'1:9 t]9a˾W(Is :!:WUDPZmAUf=;zǨa4x25\HBO K^pрԗq}TeT\Xv$2)`X1K=GxcC¾tX0?y ē_Ar|)]Cc4$M[Z(n u*2ٺzdnȲlMnEMXq}5}C_zP~c ^| #)(]տCzYeŦP Cٿ%m1bdk X4Zs^"Av̷P& $WL}:>#zhJWd+cDvhHXVG\RסP CcD3~$«FM.\t8+y_+ZCDIaA + apM[w#-ҚdDI qL_mN]L:-|O%c>9T.:03y(-( fb 1*98cɕ14)BR]%ލ7 #_\ '?MRUr̜t{;!$%n;d79I~ȲMA-$8AWN\QFvK%Nޖ!zP "uk3kbh&.0`Wdzly*dq4128L$niaOD|Tj9EpQGk!-fJ1?ԙ/ ݴz[n@w IZnԇ `--Ynv7T_$5) ٗ&zu>)2'&ӟj0vmAluJ5 2o9il mZj#j|gW&rRuU9 x9SUW)Сh@J%rӳe «a+NjcrīX۔>HЮ [@4w6Uz+ ӫgFpWOz#o '͛mc>5:B~M15eL2~U'(%L8B"OniH^C`X_da~jvֽ S\3)Pf`\-i pBDP̬=,ͺ|Z93bƆu[v(R'lX`*nHK|MbIgЇ=_'ї^ m9 .V@0zXR|rIAb`rE%+ܸx^MFk564N,xb9̲Ahs4"ֳp/h%DQG+"_A,۠b#v6m߾/=ag6d"A.0'QwjYXMy5a(QLÝzO0O"ŏMXe"C4j?^k6^+pǶ&V Vv7Dђp ރ߃ j2d:[ifXT_.*Tmr(]x!Nvmss ˯/j6$#E',n4x5ڳ]!,%=HaLlK}\]ı sQ)7ˈ`Qe FCs|ρL+5nSY9 ^&Iwi|>RGL5>R)j66,w2>&~Є{@Ҩ?XG *M{Xhk0 7r+T|FEƺ@HvA}P$F% 0%8;2 ]-v$Šܐ3r+L}B0ՎRta4ܔ'injSԾM#6*µ?)svw{!Rlʋ7Š8!҇G I7IlصLX= 0˘讙oo1뒘#ReX  aa8l\X#zYJ<3_QYslR>qDY`MkSd*\z \f|[lVe ;^V2_@8Z8a+e^)Mg+_nI&ݯ0{'jYXt"'9Y9/Dv])l,kLЉ҈Y:Y|hC2?x)?d5UvnU+KH !=y[nBPeUa+'X&Bya";FGd.Mv /!gvY(gŠ{i9ʽ/r f|?0^u>xdfb&j (fXn6D|=Qr~+3A2ؚJ6)~vbؚkMubBZ\l6䉀Tu-o7 Jve.4e`@|EpmB^o+XYSjGY_K '.x۠ 2+ċ |QuG7oٌK?\`Q_6=(O> 2 zb#F4 aho /iL嚃SR:͢Hy4U J|u3AozWBVB)q֤)&O z2E :4cAp]b0e6̨iv|RFK?/פs57KbElEexOQ)rd)FM?hkmE}gId~ܐX.2U05 <t&&bxG ܥK+#Zӹ(̧5X+fFSW@G<5%fK?ɟ[/\}'IamE1'u˚D\%,!<`iW)8!?t9_?K#0p0d%T5e<ꢂY;t?2#t-yQ>RcN| V 08b) =ߘQǥqHZU?rz;_Op g:=DI·*%޶1E'ɻ-Uq/kF>ݝh,gE)k_q;eԽ8VR눏m07lV`JH]ꀩAR`nct W4T wO! 0/ +5"3q $@.v:2I _,5rU'P7K>Jg@A1e"e]!+[jmBPBeNޥo\?}aH_6ӭh=̳ cJ~<_z7O8)8UFV,xkZMP5 %"6YH6 >ox @>EYt$X,cTeFh5wET?UvAQ|Q 2Z>nk#9Y2/yԲ4Hk+ Fzd0-,;iv~j}ӷ`ug7(^r5"]QZ[HT&C7U䯴8j }NCKi4ݽ z"m{/Xl"X8$bN0 '1ߦ;7W@W##`q"3R0 : 7#>tKA} 7 k=r,HS]e8/vm%snr1'?y RE,n>y _gob5%i`~ ~C]Y̡{E 鼀3{Es'B$V3x[]Fe@5lyZכT{w_T=8v#Iʽ]&_uuapǏM0ͿEJ&Mé?Հ|o c-Xᴲ p[:RbPAZA~}CwMKtpQ,tPg@z%;& F1@Vwڼ @?lj5[վ jr1Ҫ_s^ǔ5<jtETuE#6Uxժ8h)eKM>endobj 14 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 250 333 408 500 500 833 778 180 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 600 444 444 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 333 500 500 500 500 200 500 333 760 276 500 564 564 760 333 400 564 300 300 333 500 453 250 333 300 310 500 750 750 750 444 722 722 722 722 722 722 889 667 611 611 611 611 333 333 333 333 722 722 722 722 722 722 722 564 722 722 722 722 722 722 556 500 444 444 444 444 444 444 667 444 444 444 444 444 278 278 278 278 500 500 500 500 500 500 500 564 500 500 500 500 500 500 500 500]endobj 15 0 obj<>stream xct]&vvlv*cVmRmuCU ڎL#lEnV&\=^ BXfM\ a$,9e/ߠ08cy'T.s~cLa0f=(IvN_}tή8À{232)묑-eŭ)&58}~"Y1`vNjWxa}vϡl֯܈y2:{[R+e}S?]Hl_!M?t ЂVf E3Ģ/rŚ,,qű5:AXfoO\ <}q'1bN1M"tKv&K F'>HUg@P`9bU |Y|q >':o u*2*N8*t.ZƆ'B^{X ۳.%4s~Fں!DgEa5ug\qi^WX45$j?ƕ^ ًALbyi*qEc^AߚaqF2ǑA}U|o&P]5 Lj Nba bWĪBW(6`F13mwK$X>&)޷]t[@3/G"et:,;8Zf4tnLDz +}ލT9tyh7,m{ Ϝ:vA#;vz|bFGW;UTM.*E>Ndğ\xƥ1 YiXz6rs|jQMi]f|,JAɇ(Z^AEH"*8cacDn#'4].uvy{e=:Hxs!=qth茵bD~=}THbѰOS S`-!oZz6m0K M`6\\m{ z/~ŁwT;dr?ũ Agi0&gPe(C^ &M3`<>!_ ߖZr? ޾0k(T!6MQXVYۄ z8`>N]*%k1hQ RCnس.֝^y 4`+-Q"VEFɖca LD{?mG!ѽJTHf C5Ck ^T.kz{Z֩;Bum0Ogb6Y1Tk8|Ǝh^{TGQO M.tĶJ7y XkxX;Tˮ]H%uO3!1@/!\giROt/"G@[YK,]WROeם;2@zO! ?}&5M !G% ٠8bqB"l8 ГbT:=S2{!Ӳ?Z7lU3lR>-*^xa?!e=z;{vEN@}%).j+-)GGa߉%4 ic )_*ZoJ29t'FcKEy*WՃ$kj!L!M+$)j ]u:XqV Ex,i9oodbJ  >]4bP $ׄbZe<5A~;G/ ∳ROϳ WgȒϯ.P s1/x1)/Ųmh?St )ObCihMMo6V}4U`؇[v&$ 7KxjR4M1%[.eh36mA 0[no{ƨ!.<+ܫsx88zj{H3GaCA'fe]qOMx5RD6agyU48W˹bopBhlM3~D-LXԩ1y_p.NU vxuteyA&p2&uerkD5!CY6u? lf" QfgJ4W6'k)r<“fMVʋW/eZ(4\ml\n{/ #ѡ8z{$, Pֱy% n 9Ez `rGBiM.JIؐTEK7ߔfVl1.e촕2P6FRV=ubMIOqזq:M޿_G _ջж3΋3 TB4Jm! 4MծF=KXʟн|[SՄl~.1f^~@ vcWeK R30=4܌E˯05JH>Q)P";q*| ' IGc~+"]HҮm3D}Oݭ N&N,KK=7Ba@~*6"N tE:ʶ<\-ږLzZ!ޙRTD~VB@ Π]= M?24'9ըmq'h-fN84&vk..xE+q1 ݙł-4SAΥsޝibZř2H^ڦ?A7q08mDVnVJO'8C7ng&l13CBN%gS )~9`I1oYspί\]5+YG%EOby9e0i,}9h}4„ɀ`z90sTI2yI.xk ΩdP@K\ng=dnҴ8jTDX> P\$!>#nCc}|G=bJ6"zzgAS/'k}i'TeZ7c9bxwv,: 4 pؚ5^gxI`=bM:}܅Gylimgbh9<r=a3W~NdaCbxW \PH-}3au87Gw nG,[B3Ν 0NsJϚq><30Hĺ#0ѷMo1Cc"XmvHLFD*SnT 2g vϸSWUg0[Q{Am 3J0>Kq@Uvɜ't@M 3X^=c" R/^hݞ&̊Y )x=Xy  WTN{Uf ы1mU4Tp*T[M6˟VEГ頡QH E'oWY*-636p.!x^ѧh9K ͘x߄k/w|nHH>PFI-T IYxu wS^FrPVån0*wU@Ead& V_3 >Gzlw TGC2#5Z!\Y+e#V Ӌt]]ܰ5?U\A>,_ 7B!%Yj 5{ Dnjf{VZ]CdP)Pԥ|Ĝ._ 3O~[ KIm'-'r E}y"ﺬiWь+|[~N՝@;’n TpT:J]k˝v |gVccD2TtbaSe^@eĨn3LFs53dZ:j'{?3(ӀA:Vd/ 3:Qm*hT&8;9-{hl9YM C`>6d~dgST}D\5'qDdep)&vhQ ]r8%Vl <"ݣ <ֽ]I)o 2hHmѵ1k/~!>x6:ܷFc\>=¦,p?0m"ҌB]غoݥU@)֘F7!l_)#+Np6 ѩVWUHC2<4l;,u(>BP\$& {ys\0s H])b3ԁeĈDh5Qc!˦=|R(53. n)Hx A:GGNX7uT[^GP9 <Ddc;b3R $&reswB!m t9Ny (N3Aϥa)M睴l^x _yxYK isUMMEG#8KV9+@ݩ͛ec\H ɨ2Ss z"hH˒\#U -tCLPb_\P*qU -$7^KXVx?x\Sr jޭ!垙A4ڛvg )\wCSL$(ZW2+U\[ZC>-\rCyV!d3%ŞgJjj"2 1`^],Yuݹ"TH&۷ۛY #Yj[ =ܗz8ͻv[u(WfIqz2R0M"8jPsa[Y6'Fוּu?ckia{I9jXkyVz>㰰L&CnAey4#gA݉?ptScE'b5T$DƂPDEpFwU&/8`𾕬kzvr 'IݕB("Qҋ@T&֨ChnD*eXG9]@Kɖϱ%'gk̼gp/"\iMNh 瓡J I; &ɠѦ јFUe; fE(/+F$А[:Y$|i%w'='7cZ-߈-o5X7qkL1 ^k`ٷoF܁~sm:pU Rä[؇[>JS }J2iY N\daZV^z;٩3FT( U(btqnb0;M-;ν$R|qqN[\dGr h;eMǀzViy( h dE|Np~?6X>TɒȔTW{W'G"1¬]GqWSpsC=]3-bfԶ 2kHBmr:j4R"8ɐ8s8Nu]MJ\X쎝&<+T\JYSf h`9y5WFyBڥZz++5؇nw٬mv/S #N~I$xbm؀WH\2qN&0*;Su"\aiLl:@*+@@&z [ۚ]Z$xdưetWGԩ@\k4yNņI][p눁I63 ˁ>Z7 O dhLτ*9׵;=47n9w+9;)aO6-;~R#[$w1f2/ />L FT#oGw&ujێg_\^=Jw'oAQBRUI\eK"-NsuNj{1 !G<\%Y\|)k%PhoN^k餀,SV+>lO49glx7dѹ1>7ڡUe!'$f!/!/ۦif Wq`4,ScSPmmt㑣1 vGAnˍIh7Oy}u E2^rerC- )c2*MXM<4m'4ÆmcǔRs[&/y-^Mt ʙYgik+HFݧ1c'=y 4MDdIL8Bx;S1#iofQ 2{55TvDҐprnnSç [Ֆr|RHq{דȳU }dR.VK_ySq-4Ve.M-ϢlJZv@EQD`h&=|뇋8~vwK9$m67\aH* ' lf>] l 6£Ŏ! G+iXz>{?a5ǣ>_Bڲ3/]#1=#JD~:HMx7d F2o[O| eؼ") !98ܛ5d\ ϩn$ąT); .MyZǎ=Ra.K܉O~۱uoB%tL JȂ$U7>A00HzLB90T>+1)ǡfMYr?M*@tX)C Rc@ϳֹ ͆o+.v j ˇ4q(Lǵ@@T*o5Z4%ޭOڋG :L & Ts ,[Mض@xΫ*L}P񇮏+V5q0{Zśѝ2 Ԥ\Q{mߢiw}NeQUGnwtL 6*Ot`WSETV 7D؊Ifۼ̡0e»7&#RS Iy . ;ǿ?@(AMFˉbP.@-p \O).), k3MÃŵ?m7ve^6/1dZKpu^WhEAFq.qX#Q?*{Z;|i" U9q=xQ '[TduYTjꅮNZFҍpOSH_|g6~a2w2pN<Ћ%‰%(e|.鶭0̙HR^#r|٨S4@X,׸|8llqSprfyN& F}@ڷEQ%/a=&>~?2;b%0(D.@İ U`xy27] o||%r]6AhՏ'*rЁyf1p4!U,` "Km/fPP]2sSCٹ|IҧNe,A~J+ 䆄ZJMp/ol'ݫ48='o+@,W q@| j&EXG-0ؼu#% V%'PcuWT!H h 6B&q r'Ed~&; |&tGNSbWJ|Tp4Cn#c,aD)s@O{{ zI`Q8&}{$K-W@زjf]w84%1t}{DXC=lZ1lĿ~a.<:ќ|,_ _QR DemP+=ʑ&J`Z$r\f"qOK H[a8 ؍m<,g˝jXMjt+f/_ݏO9Ah~+sն{/Z?nJP*YxZ=c}2bbrp0r9kG7X>סamkaB:spG/L-ɺV1CGzW[R욂ԣEFt!-wjݖFwgC`G){rAFV͊mD-#ng|{KfšO]9DAC>L]M&]SD9"?gj>FhI C~0e~~G,6bI߀ gjnpơ`QH  JF0c䙜rG3t Yo#qMaEy)&OKJo#DOfgrQ5KfP %-RTx,CޒUyt:Wpl) qPz}[@ט7=ǒmWeizOIn\e L)e0&$W 熋m p.2xχAݖ(,eBYI\}!H?_fDW^QI16 ד2`T"L/Nqnv'yԉS\B .UF|le51c9V"ٔT>Jl͙$*q]GD ӻ4sM%]`~FBskDoGf#Ip/ ~n0~svXB(CLZiRazϸne9MOd\Sa/PJPѪ(MHD8r'о$%l)B3Ox?`8Qx77vNW WP^IX;{5hMGV6'x&D|$`Y3pZ^\<;/FrT 8I)r ۩f(*vc'v_ Gr1ST=Dw;sIS#p:bڨF9GBX]a?0WvAp}`ȱ:`ĺt&/jKXI< Et4R/vA}ʫIEƷo~ c DA²<.[ʇsa' 薥}}&+!9Dz% W) <0l9"ޟE%萅ᾥ7鲖 .aSrCvsϻV2$01f˻Lcg*߅IRA+o!6㷴ޘ#{M=ݱΙ5W!wzgj9Ǣ`E54W&YzqpL+E $6C+yMlJ&\$7UWϹ€?tݓeKX֝d+z yqƇix_(l|f_#lXF]r咋M D) { G;@Ŀw1[vhdrN!Te簫y]P8;=c`Ţ?&N+}yyLO9up3w3"SY}"f5W'fȞ凌yZ(EiL8V'[} Qv+~KvRlMz3]o!L9BW8~\ 塪TDxt=dȽ|4HOi9"KB,?ꬼV$Kl%+9N͒27b媐\VP:=Z*eձR>CJg[= \U7[,7a:9,Vl/.ljolH08b/:*C@QF SO}F[8?.2k\L#Ѫ2y?4_ QJUNB0d{x۴Ԓ6TOBE4l#4Tv5~pQpuX()7K.dRp{@0ڕNIt + {`oÐ389EQX$U5N:8ొK]5Mќ;IUYjəȽ EA/9ag!séHh#,)9'n">\u06(ΟQO2{ax \e1`K!s ̩`):;vq ?ApURKs lF8,ik?42Ri9?*b !ft~7L1WsoWcI0??j[(aa:r:/ս-g5XTwU讒{-~Y' *aAk31`ѝo2a_*`#0ǞKMw uᠳsA}4_7; .,W\i" ]#q~^Eu_x@ͬ3 |-t iĬSxC}ѤmEbJŵq|(iEe"G c4`B{-I;ߩ+,,uJw|+ۮtS]I Bvǿˎ{#X/#Ԥ_TGJ߄W˥l1mqʳO:5t>&z׷U,49gARˢfJ;"id8nZʒe\ƧQX ]@&^." F,J.$!9H#7Ɔgݥu^n_&;@{{#^-v Pg9RiMkDRn$`dK<`О_w] r61c8Lln6ĨlX/bGb$Zofql":b(]?Q>WtwNT@MQDҼq` zz_銜?c /mt2OсoCV}ҒH% HMڰ*uv4;$-83o[_q]\|XFQRf-L*i/~}#ՊM\K^M'0[?x9nsȯ 4,Ai@R<2f/hN8Vb x az"OuCP^E X<PE˙ޛ4 d*bT2vYsX0(^hIavu]10_\ $3~[f*l'ËCTNtj S)l"o5Hc[$=K{ɾ.zc>HꦁxϠ:55 c}E!^^OQe!׼bҾJdqeF2Q#$x- l1StVr"h5[J<ئgzܣIali0V񛬤ciάNJwfNS*ݬHrVf-`)-\ 0>[{$D8:4 ~R!dL$ w,OrsOz92\C/ n:>y0/5WPb{:n-ۼ1zṪQ Vp ݞ6 ^6 ۔sp]!YDzw}\ ȏw},W=MLx ɑڧ+6h 49/QDIJr9굱Lj2Ff vNGA)x=nNØA&Ԃ4{9`܈jƩIf]&UpshUXwDwqˍrk2[r'=Od]\ie*`> "d¶hn-Z[F}KCs6LN,1JskgU[SxzK E~Xl-3$UwDQϛ_nSS=Pԃ{'K1}ƪđe\pl.[|@5pAmФ-| 6s4+h_} ]%f+'+޼2aM0կDl5"p;q/ur~[k$rֶ֣ZJX3*f5 Ӣ]؊Rgpj!pD&8~2&x߱l,8G$_މ tGk^WJ_ u,҉ko<|^=N_~6q;r>ū{9qYˆ뮼iPMPqv9NZTo}k5"sp{<;e.7k;C ~ъZ>H)a(i~S9ǁG+i#'|Bj[^M3*kհ" cm3P&Yƾi[>NҺ|sY@(\21tErY+M$ ˽oh”˭_,@8dLMKq\a]QsNK`f))EKS:E {id$AI2Mv 3YרZ=ǘ'k&.V?hV".L VAA&<7K$5 2% VBKˊpyPCXӴ( "8,Lem.0N?IP88ӹ1az֦H#KJma~wvP {ZZWx쬚SS,޳D6MawC) <&r}ATy\qe1k:(VsEjm}9PmɧÚeu"$r⋲()FvI`JN7߳Ym0X˜K̀K>f[ .,cpxO-3KeB<,Qze]}jGeSY)8S5QygN}~ 8XoY8WpϹ{NlU>Xrg X 8XZ>相0"o) ?s&ڐgN{ӝ&Q>ϓDHiQfd6>Ry/m`;yf!~ }`]i88ϒ?8Iᕞܧ L:5#ȔUǩOƪEpZ[XS{+QquV@&d]]dN[l cȃD/Ï3ڐӃV``֩e-\ i=s:i()+@kxx#N\l8cLM#sX 𬲟H$|T'WQn,6[7k /IVWw=Ht'&GaNJK⅂%&mrkeP,>'} 5.sda;>^d"OM4·%3nUޯ6uY7\T݈!'=Ið2&" ) 5838G3Y6$y^ëI lh nNo Sz?7C4V5HãySx<0}LgIxgk T*vN7 /˯jw?4$/!]:=y{L2}PMG/FLƷp 0W>C:LGuA<֌= w.К*O,Lt] h)u"3`MjY0H Ռ<6faOLM(([=gПP^- {>^7Wǚҥ+E\HؿXx)/RR 1;*!%)bnB7Q0)Ie&GI~ͺ>L= _8@oa ywzdbh.I_ߛ?}"83ƭ /ƳstBsBK}`}db®A;6ƅSe_9J=j%mދ >4| ',6A :av;!}2 aIg7WWO_|+Ι^\\_7E(2pn֍!{3r#d PNgA`xi $e߸S'pɻҽ:}<d:,ȳVgë֌9qT}kuk"RyOsZ^]U/*BoΟfI | @LrF[ίVݙ3QR8VUDrda?k^y$d0Ҳ@2kԠNę6™ŏ lN 8ׄgϗ&%͑SKFOؐ\,O#:.ʍg 8c>з!|5ēc؀x%43X\Z%ct% olW6H}t6';uSWŵ 7'rAֲ,d [ۙ7l^mBj_7as|De eS1.rؤ v5#q&Xh1's=ry7 Ǐ"vSY&{=QjEpcl'X]}њ(÷hNw ]m-f)n[Tk YSoVD'q]9NV{_Nش6h jzXWU ?|Ќ V"JluU\{`3;lR/ӊW ت^\í峡#CB ÕK𳷪eds1w.xa=]C2S# i0-LICʼtY+;2Y1^Wtō{ >{P KIwJӀ?p?]&8Z"0g6Gn*fbϓ--%>e]돻`r(p\Qk&6jdwDӎK dחSb7ӼZ ARd'1>bMODPѩ؆q@Rf6"k_*\b^)o 곓 |FF@\:1#.>RAJ \YkG.u^-R@*0 wތAdcVT%W5"eI)N7# 9;\~4z1.̬ y'ڢ &˱l>WuЄq%#"~-Q4*F:Me-fn<, un<޴!Q-ps$ 8ZA7bX;{@Sa)hFa^ ňxʳTtB.0<)0w H\gAq9!H)*T+Chi,e] XY"Rÿ  }Ar5vnBTQGLRfٳU&YMV$\~]Ј^4MXxV[\), ~ͣ:f?0;=-nFU;i!Ǟ|3!B[N G/Pt^FĖ 8/M+qq&8p{UoolkD&D-wH'z5cBHt&r5=&]o[RpZt6PO2qg+M.VHn-ؼr+B ;dtJ48tć f%ӆ,|qW&ux1^$%v!`6 Ӊ+QNKrv\zN'f(Oͧay58F d]qJ(U(ϊDH̘NJބ~ca(x)x8J4lt94g6v ?eloU5;JIR \l;%H~oղҋ)5%}!D#tD/%&':MJT|,~A,İ0L.`7Q͉)Y >CʗT?E b17Ȧ<wwZ<2aXC]1̇wt23&ٝ^ǐ) " t&k7ޢ<ԇ;1Ѷ@bqU*G@Ch,pZF3_O-M]esrV굛vEbU<%NNa+ )CHXK=Yε.&|><Z#axO3)ygG4p٧|/X¥%@]nv i]` Ә"g-L0.W6S۪„>9>%)F+"F}ʄ[Iu1wM_Ys z&T<&AXc+&Z 8yRQxA<b։r(uO_:bf)al̪QW?')^I ƥׯi `<{aͮ;Џ1otϹq l+{WyDHN>N4Rhqepm.V i=r!Re}lA>@🹹Tq*C wQPh\|̕c%ߌx1Cw`>kD{7nJYu9DU@RFx_)KYǏo#"%}*_}aSBM=(sRy)9;^ FQGMΝSjj yRd,wsKHJb}JEHG}=c {;9 Պ8y=ƅJP'y=&~v*Qn< `y%{Rp}LƄƜw+lQ#b0F&(?&=E LM Q~Xb u2p$s3* P Z ȿy *O6tmل(Y{Ӷ鷔Xj vv$)?36vDk: PsVHiԳC̱!DYg+kkCeu/ x*{PI^m*a$I3XS^p=ALl0Whd(q#%˓CrK "TRyNP8G.`E{BCp|'6gʘA}ΦCGLzϏbҙ;4J~抚ŵ r6l B5bCBo::`= _"}7UPCA;3V:5 oe" MȝLEr,9NW;,($)pxQ.ĺ4hM;03UVNά#uϨN[|.J#Խt^$mWj2&x@O7Tu%Ѻo["ہC?M(Od}B iꨝ>#(=H^B1g3^Jri].}iۍ#f5R[=:nN8n \S% Qa}q-<gBO4a2P=RXE8P{z+WS`CIZrS_>"6U`6٠ b)89۵* ގ(FB۝Q~EK|JRN[9(] )长:" ZahcX%l7Y. OsƊdQ>VI߀˵:α*!kԶh &T B/O)8H^;پn|ܯ#FIkoX;h!y$qN^'Xhnf`W!uiyZuC[Nz::9҇΂ÓQE= &'Y¤@'Zes0XmI|`Ub0 WM)TYS &qƯ#:]^ZZwk9*wqsΫ"bD'gZE.fzFbi_=;AEQ&oH 7V|J2~ЀM#$:ٝECj"th8wTA-r8.ʏ/ {0GqɊ;ĤO^]CXm,k&L+uƄܳg-5PV>i\lA?N&,U4w-v$3&hZ2-{Ll9k?w@+E!Mf. 1)2x.jyhgr Emchp~NTTЬ^%zH7x;f`CuClt'qg(/CPq= 4#1S1<`5Wna!(zIg]?lJB>J`1T6^o!{Nx;i׳G yuu'A$Zlsr@$ ^“7XD,n6ΤʹTwRCtvMm@Rsu8 <:٢, oVk{ƔU01U4ъ}&;>.i%mk eyjM goqpvҾMo$ =k<>p + 1%">JV.,R,WAR/^6q/@ aVަqqOs /z-s:z1>I,O:OW1g?xr HN(ОR++4]^mUj3JԂ +]M'XX+oRD6.@zuC>J3oԱάf;5Xʭ)~)ǩ&9uK DŽz km#/79!uAʢ9˛` uj#w.vƷL`|r *@ ڎ=y&V C]']?A|vW~F~# uyu2](q"]O. [φɻe9q~Z|i'vG3C;̠wR&TeZ<(l8!ˠLؠ~%} 2A$q QLh"50W.L*3Kʕ;6w>PV=㎵4ȚC gyg}Adhll7^O]`~|ǎ-}6ᵫdV5ZE%QYpGڃɀK1q˓gB=i7'dH=KY"Mjqhr̿3.I?gU8ު$\e3IbrHxH҄4T)JY'LS܍jSmvs~cmYwosm+ (7V?- SN[gC>S%9ɚcRP"?Bw51~'k sOD86%iC:3s$¾`@kܙ ?d3B [}JrSs Kc$~4jݝZr1@'nşu9[s*jic.ʢ'3s8zns?Iy 99;j~B0|N֛ 4bE26 lvV ADI.PȮm۠X! l4ͬO|}<Sw[rՖ4{,_$S~:6*Fߚioͣc& RK`zG.Y9̈ϔ:dbR/`וPvb! ]=Eq`o:} |QMד &&fBI$ TnHѱNyJC|%B57/ F3\S9x0\7I SK/F[=1%ZX?N{g<NuHzK ~OdY e<%Mۙ(׵% H@ CڷtN<-j@S?ɮ~-C~VKޞ}\t\@V8ʼnWE*խBh01&,5#L͹ Z'OQGj 2  B9X< SRU%BẄ́]'Z! p4+C,D&ǶxvWf?> "梹=Йz"!䂚d`Y6;ҙ7|6[Rsz3Ƅ3#T? L+w<ܱr(ͦurXz֗h"p9}sŐt9a_T!m_7J%aqbj9 gKt^2rJfyfa.:bU' 2lLm"SqEXr@胷Wo{P`=6;MӍ-y*T?Bg"hZO$dcޜK>mYU8[#c˙O}@1\*#2U(YvrUww9d&c1Gɂ0%$ KP($=.=KĖ\T>Ptp/yJy2Ѽ2@^' -Ugsl:<'O᧝L0rmJepuA͉øw/nP ~ob1T :9ֆ4W'3Y#.F?^w WU*=Fxy#_rHJ>/fx9/bv)MeSlxՇеs<i}9!E4&K+!4ę[%[\np 30]+uMpG$"Cɞ5)@1f4^- 9;AhO9 Cte%ȥPWMxMA`c#50{e-;+luC(yE'YG[,_a[J\K!cV}@tù9b3Ӝ1ii8U5>z,ָ 7H\ISf 76X["$,_Z5J;o29|ׅ4OڠhEB7ܳӳ 9C=N4 {oz z-iz)Ҕ1 `ҔGҧox?[+׏YR=9TFUHϴ 5ԑow?-XjTov9~D9gf,Ǭ1=;}U'N` Ѳ̿޹!޴= w3ܝ$ &ogV$DIXc9`ȇmzu?N9pMc2 JA?y^﬒dQx%aVD9$'gB6aiϺoMdՖW pG˿s)Jy a`Kϻ-JXRK}9JǞKlG]$9&w"`#ek9bQTocɤ fVe~b!x =A tW?iO\셰-6DKIG-|Jq`̹ GâW)3к_M* zdEqFX;i /Eg:B4/HşQW&g<<)_)ezb~]: 2,(&J*B+T`~]v53:6~X:M0RK4;O꛽%6wWkul=EV U)YP9&]% d#Pe&lXH,'1J :e[%huJx* akCn4be6񏅽0u4M`'l0E9y$ 0l|jI;VT[LMpcƧ/aWͿ2-ց$^g ηzmJ9ƹeQ2SHe&0SDj,Z /dž52VsѵV7WmpƖaK kί?V K Ίp:"+4 zQ;~ 1+r<}%eSUU&CwΝ|›^N^,/!loHTd;]y݅R]H~Ũt*<7k&cKT-錜"=UMTf~NY~dVybDW|ڱ>Odhl xοAK۠Z? ᄚ=b/SQ|)B c _`]\hBI6}`n-T8^R;x WBd#$xJՆAPfwUvglHw7%C!~wџQj|>śhJ HihQy P,1dmukSG7bh'{YTWLe3ǒ9Cw҉A4mjNwPlxjR ;?`}jb LPR{ϐ;d"e%նӄ M?ͪg5 Իu^U[ħq(ÿl[%cӘQ?.aqf%D **3cN֏@F1FmjEvHP>d7%㫏)r ^9*Tt"WHʾ~N&;C0Q1x<2nd=<~5\C@Q%j>up9jiǘ vccf_/H-+__ +Os2ͨXE@nV }A~7/{c.XIh;ɼ`y,/:Y(,[8-p]>[ŁSh^/ߏgDNGI |!G~w/,7|Y@g=g׾(uT `ddt>'a-4mjYK9;:qBf{ jgyakLnu0"\-L!"|t[ӡ,vXt< Hg-͔D;߳,[7Rwɬ925gWu3 " ;=:^;$X &D1ͮ#%GS ,+DF$ҭ!"x$YP,4k0( {D+KJe17R~y!C=c *MV2`-N-2)Us*{X_` xn r1dZ-0l%)?Md"6زx0e-="zK:)u'9_[s̯x=<:,- *WBXnkPbn&XfӽhP}ڍ%mKm=ųC(?ԗX`p+)@Ml+e(Il9e&6ii`(9#U}4ݨ?Ƚ|]ܞ93ZhDz'Hٻ- uA ȜװdJ[e☩9!nX#l,VFXYFAY 4Hb0^M8e''R葇Vxk,յbkýhz~`B k|ʋxe׷Ω&%EUZi!D0mN5;z*(%.?UήFt3us/eoٟ' 8LѿzI;!L#WHC-ba* ꘥#mpD9FI*MY]\S~v BxH0 Tʎ ^b]9T 15L,F  Lqeh4Rr|W>P4E2`i6RoB0IJ?ϣ=cN0[_4C?7ɗP1Z LF-j&3Ai >KȂcc1ULfQ1 [ܿ:aV3(s zhMXi= ʥ!à˞lͽFH*-Ԗ}nжkH;OND!ML ͪN`U{4mG2Zc94j=g|.qso\R UJY462мJsn*#M$9A [2F]n^p u5x˜Ya>7z{1u2tg(^>cdD!n.b×M.,t"huks0THcfōcY4,z Y*MA?8+ 9fl$c90f2҇]~r%uBTMZ]DQU\s?'5E 6ArO9}g1Vr;9X%B7zm+NvPifۍmVCJX|K et:;gvmϒޘ)Xk2JVI:Uj8fQkj,GRw.kc ]L{8UξDS()ѵӲB7k)˦_?ܛp 7mRv'hU2B`:kU12{n|'٬ {#gLO%.C["(GB z,bJSW%5`vbjhLc^.Ďh-]?SZƳ!fVQD "1O􀯃7QަewŸa=Y9`"_J{:R6ml~I~d <stj ;8NM݇Uf{7ёZ`7 -yҠO: $]sY7e3e h{Ѣxt܋-I͍s2hەwU)?ՋNAPE1GpU#YخܨIttxz|-|ݕlp$$z$}М6m&%\_u y^=PֶzmdR[*K %'r#JW C2 ;dRCl `m`وwWj*ӎ2:WT б߹T J'weN@HTa3rq|!h^(CFȲృS~3黼㷖hx{z#3~ͻ^WA\mjeFf!VCwz|eqs8KC? ?+Ū*:;z:#=g!oJ}ɟZIPA Iޙ_BS3ą/)s |bƝ!kQM c +!/)G6w ZP%[Ti_15E/GdI9BfOWHNKj5C۾Ktrp齱O+OOS^K̬TQgW_܀I=$r56%Dqř1P,,w 6 MGН43U%b4ȥ>U] +}$|71Tnjp{ĪJ(7Qc(aoozo:9lAlk #{e2p׾J\d#o/\SۅϲOp4ԫ LMa"','9q؎B\w/6ׅ1w<ֹPV4 'eʍhG̰AD4QϾMj@vA|vC' '|R~EV_vO {ٗ䓊w][7KxvAGGᖆ uhp 0qoEJS10 Ki땴&)ʆ5$N }oQtǥ5NYӐE5DfC6L >S95f!Q2h& -SzW|g _5̒ʑ䶊TSlIQZK)(g|C '%D 8a5p~3eT5b>RAIQY2H+81/<m"N*WTOHOqm>|Ld>f{jj9p*su?mKs{ۚy;sS  A) >Jp&w~M#3ũ'zr ><~$bB0^%IL\X>Do2= }>?0m{x%h>b-=G_3(Nַ˲-l/c3aߜO@$XՌ`<XJ:u%l9\7L2_0h?|25q(9D: w/^Bּچ ݉QS յX?`NXˀl_{u2y )`|gbVIęRrY2ur#AݒHry_uK&.E^lРӢgV~X'eQ&0idZ,RzAh J}?#95@c}%(g:[4=9eYNѨCAKr9ҠJib<~3S2Q-ZH _G7 m 6eO"=cjȰo]!?3_)O>dmľ39wTTWxyT~Pm?w\3?`y3‰Gs X  2#CZSd5HQDWq<zcVkȜgkm&Cpbh x@@85 x4(@Hծ] ^#?#e}!?. ̦yp&,)rX=K,*?;(Ѣԧ$4]7,t?w^_ Iv`ݓZ7z:? ~LoȜˍUSs|@hnyEOR_ EĜȶM^)`Wؘ{?6&&a8r(.^q MX)4qW)ebq}TW]q9BHnG UW4?v+̂Y \CMTj!yBK7>V0Tלto_lسL q^!01d-iFj TeMc#&x{EN Yn5)1|oRK+=X hEZ# M]+(̞2.(wt;eqYfɩ2" TJ u㳅 PBV_M@cWrf:+wI,ԒQ]: %U b4蒯-`G!mTӳ6+rc3|MD UԊ' \wƉ+vVbx`LIendstream endobj 16 0 obj<>endobj 17 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 250 333 555 500 500 1000 833 278 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444 394 220 394 520 600 500 500 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 333 500 500 500 500 220 500 333 747 300 500 570 570 747 333 400 570 300 300 333 556 540 250 333 300 330 500 750 750 750 500 722 722 722 722 722 722 1000 722 667 667 667 667 389 389 389 389 722 722 778 778 778 778 778 570 778 722 722 722 722 722 611 556 500 500 500 500 500 500 722 444 444 444 444 444 278 278 278 278 500 556 500 500 500 500 500 570 500 556 556 556 556 500 556 500]endobj 18 0 obj<>stream xcte].b{Ŷm[;+mJ*m۪>yo:wXGGksINJ/ljo sgf`Y]l,M_v8rrQ' 4M,,fnnn8r J]E(=linZmlv._׊@ 0D$T IjO,r&@;g 5 Eg03'4g/'FgttvZ,NFv._gb3q5ǁ/~88I~]M,\_V$?-{/IS{ /3E6F_,冫y@p9`9_>X8mYl|6cJL:' f02]@eXR?K,cZF5]*FvϘCbg(33-%,=J.&3# T3:X_KS4j+Y@;V4ȿ\g(}u_?6h{9,L_]g,lVoѕ7rq01011_;#ngboOٙ~M-]b_Ѳ0qr˖אP ?@8v0y2_G7{ҰX~2FȵleK8g!҈sOZMC= 3azE!A7u-Z^@<_BNdY[ ˮ Co%ll@;m Lv4:Zz~谑ST>ֽb,.@t5!lPl ʛl!'/L\4O.ٴY,36/kal!3[{+ʗf d5_д%u;orwosǩM'),сef&)WD5+O*oTxV63b*њ.ND}^xn3|唼BoUm ߴ{_^C?rjN('y5gTFUS~R7*jzmF` q=V8EēnsEbǽ'Ru¾ͷχ˵QĕDJԅ&A75O0a# {gG=F>Y8 u1T${әՐT)qCL<Ɣ[11u9yGårՙt>x7Un/ߛfZBi;R>~%LڮcmKA(?*B>FLheIIg,jWT}ΞDkw3Ěͣ O!q~3Wƅ nA׃CG3/Qd pCcqv&9IM+9&z4&T6,,`⮘ eoӨ2=T/^Op?ii@ULVjz0!&JI4&Wn@U*؛]jK_Ciu8S~cKyW@Ҫ(I#"މطbw D"]UMe^eCl]]}jz"hK&#NW\&{uuF[ EPJ*ebxW] GHREH7I}_iϡv҆ʋ͑@E C;3צvm^'&UOaa¨o;t7`]ЕYIWUv:@]vϥ\XeB" BF݆5%_QT?M3`R'~O,RS{}hmI:M5<#0V: +/ow%%`b2/}OvM ooT~,ҩlbɄ(m/(S#gOy%uUeRjS$9hWTj{}A;^e|tE1)Y{+bF**B9$\~TyS ia5Z9!A,Ł_xF0nkPܻٵֆ02 e^ /ة1ūV&A ~5l@ɷ,}\pM54v(!9`)g:n)W߄`)nD ڥ!ׂTTެYg@g;CZ׊rWΑq^kzVZvdSn`I4X[i)C6d~ϼUѺ ^[TOuۺ N,"o%l9QQ eo )tUS2 b3!~b`5IN-^\d('Kt7ނ;|!npmY]lmL@NBa%NԿ`rh^QmwfDs[b$u17y*|qSo}Ma~nhp!0qC?^HY%{0St1oar nK'OX`:oQ2BoaZk nqoS߸>;v]WcsaEF+ܘ-Ms߮53\v*8Ý q2a7/⋔6cρ6EK&][(KW<_9GA~m |7SJ87Wڛ4HFgWƷW@z*1|6Klĭ\6m6 `A(0vhCB. 5 p#?L}DFf-@[`R zG[ˍO|MċVY/VmP^vry ܿgg *:vZ1w,ͼGBx@sxeA/eF 65Wp|wpNsڼ\b*b[e1~kD2*J#F2 8ܞ)jr^C1XDBxC8QI`M v[ZCS?N??]LAxzT[| [w7="$ Ie08"dI2RM ڶ(/ eqPe@W$, 'l@{K? 찥}z$.'CK &خ`<}+=Ǹ99f*T;'deVKDo?fS93c( /Ӗ/7EbSGrAُ:'!GaǟC8f|ˑmilr.Z (B5K΅9#S'үv ʾgo6h<ʞm)  {@VM'W _cI$p + NRwWfrԨK$$1\ IV~ }rTqo[>gP>Fp׸M@~m_sSH8 ~K@`_oRIRzgh<2/p((n=\i|RLozOq3w\fGvěԠЗWTb ,"eW`C#,, 0ʡ*M0KV'QR?PwHuCĘ#%X 2qfrޗylE2GC=z>~,vܿ)XyH݊˔E&c1c,H(!YZŐ}֝^n9(߂;x`?IR !QxS@FS{WI\C_^#U=|w,esR3fMK=Flp).ą0p& ", Uؐd YPE«ySM=]h֖DeĂf*pp>[w&QJcMhxq]I붶"2S9!HȉTv=l3F_(h-%@59HOWbƜߌ(HH&a-iI`2.I\?M6+ٝiO(͗I]&А/3=z Z>BpRH 3XI[' K$V-; ^PK\[_j<|2@h(Ѷ<M="""k?8(96`5 f?_7(;cmWl)Vy\/(h[kYH#viN y|_jBw^$ ]kʌ)a`V q`Kɀ}tp:/53`jxD\x*v--xbAv9C;ժjC f1U|Pcg/=c=E l#W[ٿׅ̙M2K7gI!;آK.& u&4TK֛Ci+Ec0Ӹ<j\x Ey>;Cl͑KEdvQoimh*bB]VD5ƎI{]eMy4($4Os:{{I8I[rBd3>HPDٌմ u:<Ȉb(6=f%QRK4dKgQ4] W!3c$lw YV}+M<SZbp ut~Ĺ46 &_,E҃jR gbrF[ٵЬ},c;NJʯ"#dB%7?8(;5e&njʥGR r)&fHހ?o>]rK6f7UMg)F:-1ǎT2`X"5o"~Qhxoj#Y'ZRk3ΟU;Q WӐF|FwZOnry lɝB?(Jo_!v8"ϐ[Yymv-j wx{݁)Tv GlR9.,cy؜eō^$BEk'PYa`7`<0?8=Rsw,Ycѿ84ow4YXy0V'߼T͒]{"fnUwTW-X~[SMTTD4MBfB]&Id) Gd_=4DѪ3->zrc6IR|g״,YR+E} =.f[*ţG~! 1sE\CDNyޥaatl0%w`=\hC4aЍCM&:P(]%HM4sb115hU zdoCVY!%님CCwQT T ScN$݄=3=1 @rmoq;. fRaå֘g+*[_[8Uq\r25mYډ;szA5B*>r*qϥ-̶/ T}~H=_/oDR$CGls|/ "Pj pfpCWS]Tt>*ސnKki='ME9@ K(۞:5HlPi-XJ["MI;w9䅳{W&j&VԼ!&W[X`No188ݡ3QGm2ߋݧ1U)ʋ| !y}Y< l`_ {U^ A~O/JQω9DJf KLhaɪy=QvF[Hq4fs֓*F`X-WK ͽ㛴;TI^۰jh!.:vT<_ Mj݃%ʍ{qG57z  L tj.7^WQ&ʹ<J_{36}S.ۻ=rI*j*&J|N㝨qPl#$'\xTHҴGXmQa3#t/;[c䞂#Z)n!4׾08Ce&Ͳ +:aڅk[B[I_>d'NgYNf؋M&đpDI*SZ>?ZlOUc+lRahMMUoT/q2E⃖;VNrQh6)-gŤ7is=l!>k#"w=^thi5 ~2?XѨHGſZm9ނHA€`ZruFUc Sv-f U2|Tzj@S`̦n/]'yP똍?\k~pяɣl7 q"@ {sA pֆa:֯jԼV*f잢47L3AH ¢Ī$~0\ܮUPj'(hhwq_o =I-%)%"}i=U)=1,AɇazI/#S[X5 (D>9(ʛz%0] ,|.H*lM7譚x]Z]jL9=5Ν"M7~N B,Z)ģ)?"Wp< KfY'<;o,jf 9ID͏8Epjvi;!L+`, dw9g^N3 {Rg3xGz2SmglnIG&g q̢O;ObH+d!0ŏ|:H˲ŞLws߈DQC]xE }A,wUM-L.$@_m-F |:RÊP=.)C"MP_ZZ=(q% OKy rf>@uw2ۣ*}HB0QC1SsLZF0/WJ$C/fcʙ|JW |?]\V]\TNHJFZNҊAwh($)U|%O'ٙ,ܕdM!bcp7daEuHBu)Z i]ڧRW4PoH_̆Axnb{w9a>LFvn%xTJ#5wd򹘓7}oKT,?ڛڰea%49-3|m._N#{Y6YdVD_`>$Yhbxqvp/IPMkۜ{,t>wbY /`al8 7?#;^beύ$JV{)qA"C:gi+A,mEW]hĺ;b%=hXpѱ RĀ%X7MqA6{3_xs"4Fn4:pĆm&J*K:CKCel@sZjHeU yi ]O Xtd@fOw>˜=\Juʚ~V $ҿeRw|R_;5BpUrri~=[g$*n L1/ >yÂ>/;4G{mA[V4C(LK*68|LnHfCS҃W; 2mPFM=Q‚rmzWۂHGffy&ࠣJMw$vJ-$~p$ JCݙ(A",=DO)j:HA?7)ɍWeONݶ;Nf]tEܘ8q UU4 JX5+$] 70cmgM? E^._kn5̣Cݱy)@4M%_785̣\14|V >tOM 7x[Ë }z -ZE)CtYX(cPB6tXU:R j?A3ߕ*5L;%ѧ7"E;p/'dRȒ;FqwG͡F,zRJhg={Vn(ӮWH˦U-YU 0g5vc?fP;\_o1Ia0P_oV3X Q8smR ev^\O'f]b j9uu !lwEbS/45J8^yCl7΁XY٥ϒ !R6(7.ü{n=WI U)O 8g,r"AW仞oVdDrL&#u<Ґ-Xǂfn4JGO-G>s,Du?ɶxfx,^$^SmLfo ͤ ٕb}B,.EC]k!q SER. -|2;$BuRIa( (d}&?rK5iR yq,@0aO`'RN_=]3ѝ^Eկ}]qW3O io[F+Υwkb\KI8Aޭ?[h.~ >9@=C6/𶐁s{`87y=bogq f#K~^*.D/bC-'C.)j\ae{5|]B)B/ ㈋d34x72 jۓ)h>e61#sESmrvCi5 >G d~)v "J ƞQ%%0@9V JPnziDY `PN;9Юr:|-s4aF%8^dO#rVV1dKzoOy6"I8B1$ qBUF.B ɩoq_+D~tvpGNFVH]w)pfO$G|; 8\eC^Vxm+B`Z(ʐH܂.7Wfg,-P' ʼ7QG5ڸwsP`Ztei{+kVds7aܖGr)/#;;B 鬠*Uٽ};?Z8B-V5£e]j7MB|c#ZWVф?сW4MgrGx{{N;1:A4bDfv>x-DAsT*cLym?*or_y%(ARy,3'‰3!\O7'M^&e}y65MNzFg;X&Ծ:ΡDo)Cw҉ݘLÞC*LIb+r(]Mꘈ%_Mg 5o" ^,BKM 3^h]x~+gLظ׭.?zH!OSr⍯ρ,F2[ R&κ\EX#P^֬Xe6qƍ#t/:_l,r*G@Cqβ(BU{qG]\k.[n'HO$ɲt}E}'bXPp i4 &JCji:Q rاk,v:l%C>!RZU=!]6v_ѧF!mD7Z~>zlX~$.okPfaNb2-t8̆g~/ 5QKu'Zr5(NhZyWW y!fd32f}{ VX=_e2%)鲭t>L>]ZžZD8C#,O_)ki3owc<(au꤫<"0 AI;M>zsA$ʕoRAeCʄ߹q RE>I44&@*zkBhWQB=GΠ"f_dJCy)iz{^4m?D"/oC[鶇Hn[T_Z(4mn6L)BwQ 4@Z5[\8߉= ъfmO;i8\.Z_@sqnz$UC=Fiz(4ĥ`D6qSHv-%J$ $ܧZ/tHu {gUܹ%L`m%@I:bϼS݊zy!k?i5PZQޅIw/~;T(zp&vO K1;I:.4,ˏEo5QKCV埛GC X7pG{B_s] e><<_q?BcMrT{i}鄪6Qwľi~Z\qi`.GY0(R!oySHR9Y.njwȴ|c+Ʊ&1*!]vƜPݾ^¹(RpEL2/,Cp`a[6E2B[,gN沱_&'){͐)ɾ IU'KIpvtARP)%We8C]#D9jIp MRN)©oVf <0施b\y5ZiBpeEYnA9l\k!$ؕH#4ãP\:l̮`&ײ Ib " r@K6ۦi Xn%Yk+u]z'%{ziiSH툈'/1MN`.-smVlB4ɾ). /s^eى_\L?Xf 8gzM0^)AKkQ!E\SW*ѦSY)VmKv4Z *S(d*\b"!(PI+*^(;T5`Dsa!^J7UbZiBJe7afqiKVY(l`#8O;k-omÏ۽re  RQgǐV4Zrq66(P"<(n$P7ڠsmoB-h9k$pR*fR|_ƜkdVz;[ `BMga"ۂ4ۢNJ$ijD; =kWXho?&;6weiIЍ%ZsSMڄ0Ykmq-|2j%v=PM-%Q.ϡ};ꎧş;H }N+ N:L$_s<m yDEM=ʻnb-l4im`T}ϥofބΐE/5>!B E!  UKizNTl5wzޓhLjqw>\G]7x0#JUD;_!(9Qwu՞~r4YmŸ676./zߧlj*r˒&7~w?5'3}$aWpcD QVhbQU֫Otv 1[`3"k2$P@wkTkMG)rh !c[!/:fK.B;'NT"ɤkBxpHĉ(BHcOh}5W70mDea+] ?ׇi Z^%荟)dr:Z /p[QMDP x77hucߝ63ٿO'jJX5FHWQ. p'CAJBrIV Zόjc8c aYU&{V1p8KZe( ~\}(-2O^M;vx˶XQ&0+rUw<|ci NqG_i Hd c9*٣j, `~OaTO"phfg(&b[`F)̚ML?P$zzH.=E[ Zols59:Ӈu@pGdIC}xMv&D~T,nPI{6^ JO{VW"w|m{8S)LhYXv78i᲻ʰ#i?8TCaJ3 ䷓X_g 2t?z5LK<7`c"Jr 딡/R $ˀ\(1M&NGfkNEM?#3G2>5RTР KwDJ}qSe)p$aB-x2cix!H˨HJ.cL%{bw8 IW [*r7U`^R)!T[㇥ %ݓnUE | {#SL;4}u-$Xm*'L\i^4/n6%kAf7[ዷ'nr3qf0͕n5y.p!Fbw.݃"l%&CC٨̀/V'}3a xAS/יh Yj \}c[<댒s7쌆>OFU~T;L,K.+2BQOCL#!Ң5J}[1]O Gl#zZ9`%WIȓQrj4qauu 怴6]JBF* #v/!j-+b$E6FUcUS}ΨaMQ-ؐ7AGjX:Cuqql 7Gp!ꋍ!ǡep,dOtSI19*!v$`߯LtdZ jiC8C~.>,e8d5Q?::οOAn)rєs8-(W/GHBgqexr`\ )Il~KP- Ilѱ٧ŎsK=k =CZ?JZҞwt;hC7W<{JvW-YWSL[6?p6vJގWe@t| nB=uNT0-,p3|'R\ c]})iVC5W*]z$ڱoДT60)ҫN4[_X&?p[8IO>O|=%U,e{\̂\$q[CEKN'f :%?nm0=]i:jTqk#\CnXhVx'pwF[">:atDV^ {Œi)lapTlɾ JEW,FC]ԌZ߰X%YJ[,U 4ppnZ)UT85eܲ`"m7LRLI#j]ADž|hr-bQ3L%Iu51}Z3іl+WMW, +Rj.$f@I 'Eٵ>G%{`Cj05Ӻ`I(Z,D66'/sKD>Yi R0^[FEޯr)NHkYЩn֜;w.15Y5nkkL`XAp^+"r\7I:f N1YZQi׷ UƆ,%*0 F2WE&ͳf)Z mt{;RcyY J * 0euPDX͚8ϪLCۏigW^M-pOU tanJ.uYjH_ݵaDA]wKxbo6ʲ`ˮ8N8ezYcF6h{@r&z c06A:{` ;fq$٥~-j{q-h 4Ȍf1-6h…lm5ȟx0Trpxk ?x(wcnE$_YO92ډӰ1ZT(m\,- $:jUg^Br~џ+RvIBѶPm7,Kʆ'OOg[׷ȍF Y~ F)T<رF,hhVi$ӪJ֒ .4/<4 Wk!B0ۮ&GmHʳ{dcx {>;az6^ȹ}9jB4x Qn%Th={谔⮚xQ*-UI#!`K[5?a5hc@@`0 mr'^hK@LL&GyYb21* kZnD]x>1eƵg( HS/Po,G 2Stnd]"kxF?s%dѹK~d:csO9M~1dsnkղF_KyLb-H7!Q&X#WI3&;$S!]Q6 @*gi7V!{Y l K> ?O@ibk8>'pDYm'Y]pu:3hH|zlsb5hϣEa(UQ58V;lӤ=AK[y&(Z M3yv¯jˁL3vO#]I(`)"aZ(czjM*l"ȪF3?]lC[Z;{ OOc(t! J粐65ubsPw&B~Ÿ#m5҈U$rICLtJB&gR+`r9]|Ji*ո fH yb1vAtԪ=G#Lf0qM_^X" B<>n` ONMt fztVOꧨrwD,}-Mx5s|St0>!xr4Kٵ rbwTur9V쎮YEcCG ObZo:7{ô q;\8_1v ~҃:pp͎ ^Mv$\?t(,Azca_Sv@A[Y = uxȫ"e:dͅE) \69LY"FDV5[)ӑ-yt ~*q&L&~Z8z \C=y ddȟEq*ckN?Ն8-00s8m().yf#x|,Ф`˫H MDcFk؝Pwv$1+3n~T־A]q!`*hkS%A&nٵ${;)+G@e`N9 Oa&뗑fK$ _8o5NIB 51EF J*\ rT:HJ'6i-<Ǟc 좛W7L v3m| K$,`fD0(IN @uu<"&86VyO 8;LRIgk5x$PnlP#QWQp=1v2Y:%I s640 .ERUDDDښB?D't||X\;Ȼˬ3P%KfBv+7ʔ93Zf ^\{+F:&;}yO*}FJqګIi縀G0zYƕܯ_\j{+0k)2$zSq1c@JwG{4P77>k4X 1ϙG4>]yVm9F8j6a; VCOAXuOᄹbXuҒy կxywQk N? 7SaQHhrG Tt[Ch[%[Λ)um#|Mi)d8 8t&Vv.Z©m.I@tGsʯ (1tOWu Y [6\5I Q[A_6B7VԵR^L|fbU?7=pm#N c׊}h޹uF);Kf\dHi$Eٱ^ƿ'՛}  @|:\tTWA{iUkpRJ+ȡaq>5YMk 6E9o-st$[M2fHRos&,)7 40t_JgNHd͊@ r CB/f㥑*tGwB1TNsTѐŁbt%s#IΉ?$d `)[aHgx-`D{~U meME ؅4=mSW񯅅m# XTa ya.:6ڌ^Cؕ@q #,YȆrA$TVDg(!Ԩ8߅ ȈzTa~/f1*X(U<1W$oc2?;u2Y en bPa(#_-cc*݀&ۡQx(AӔ( !,Uk ]j>,b4@&aVؼx Kv/v>eةt`R4$WE Ջ<92Y֎Vd[^̺5 Agttl Na`T=syѪѫZc dL''uHbO,>au͆qF BOpQn~w:OH}i`؏zƢ !)}ΑI) c${Ļ.0scv1o/#s, y-b`LK4X e!cmbss' f6KK?á{\.ڻ ݹ=A,+嚻gQM- 0G}(=g}Ɠ<<*zҐ. Y*3gl.GLȿ<6S}k̀Ālgib5~>I@Tt& mW@%)dpoZQk.'#~+ảogBVMie{W{z[Uf)N#`BWK88 qzaVy(6*Gq,ݰT >P3F\ybcu)T;u[J=ݹ1݈ȷK!c<aB1V;ґ4S<++˕:'qchCNßZM'Pb 1ܻ%jP$#\HCBa 7҅Ցc^?j) /-*u+x(Fb%z^!]5fl,77gvcyMUξlɳsH*$-OBmfAcɞWeG% ū"C6tj-IȎ 1'o_I%[G|[Lq.$ZI EOTgk2P1[OrVf'˖Y%+]a S>Ш=t#%5GC­]ǡ;q[v /܎n\D^RLhO:IO̱-9i_e5*E[h))*dV]|B&&XסٗVxU"]>wZ꒿7_eA_^xS @EI^ ZLMD9te@drbJX:B9'X(_V:Jamw_K'wK(@ރ93 4#`Ƃn*M,l8l}m_D wrvގ^ &`70AC/Qes8&/EdU&8uu]ܹNgu3g=Ozb!ؑϓ_1QIL!d^5'~1t>RUN-I kS[wDw/ƒ"YƕWhdxXCDкb8#PF"۫gGe'`[,w.^vtq2;yYۦ"z;r.0'icBKPóʶ4UG%NF.n$`J]%^hx겝ae+!OwQu7#s.AY/Uoe`K[ Hz kkF~qHu ZG| k ifjE[(m>8P>|m#֣f6_o]4 s!Z/BRӷeqOk'VaE"I i}q2Qݮƌ68.rlqCA&۞Eevswmyff|8gWdU즊1Zpq'Qbv.7k jť~ ],-28Yw$:亊cG{6B"$yi=dAFΒSO}H`5CFTZ3|ڍ*,2 ᠈5+c*/:?ݖgs.x˔368bYyQ3>PQɲex0 BB_r+߸ҴYTLUtc`~\{yDC6_wBM(ߨ/:AX[DQNn%#$Mp; CLUSvQd_-QZϝg6ͅ*ݖRYJo[2 aq E`vW=[F )l/S)rҒ-G}# FTL9"#_?VcRw?0Ĝ d\tCޞnC詏0_uCxs+R '^"4D0GdLSlfNh w^s ڻ+վ]k(6pDJ{ !/> raj@-/#q~/dQ4orkɏPA}b&zN2S#͝! )jSAe*܍P ;2Peo|HRdnk 'xVǫBZ+nBVYQo0ܥ 1g􉺽Ex0'"ZM(u>~h^c;=pkG&%*;%ԕfwNhdž7mRW92shUxvU{ saB۷!)SO}&4͙~;Y X}eLS4zfF`nN8g//8>@^Wl)ž6qi E#MruUռ!K&X,jНS=C3ŻUG~ͲOgF?RAʍ ז%CA7!‹l#ubksZ^9QPO!fwg[PB8=)}a~F6ޯ,dOR(,ZJ?!΋P`ۜ(*z)<,kmd`Ef9[7eA ?yB3 SH)~۴,\g&)Y8O$z+[ig/f7{0~kAz?y@AaGEu%^KH|:KQ݈t}QvFjd t3&@ ٤:IVZ_"sV(aOP"VgڞD˾1{N1[쇕p!- {Yh,պf'yU=^X.#r{mj5L]ӷ5|m𡵞aMfL)ݷŐ\6do-3]%"tqsh՚hWw 4u@sĽ0jlthA8s묋@bo>wK}߭)~债)^};!ӎ EWq͂=eE>]MC2oq |Tsb!`-|K־}T ;>%6qA@3c=|6mrh7>go3aL7 Lːpz`Pw(b[4]* _q:T©|;z= 7E4G@x@rć3p ˡ!.qÞqyd ԻtSX 7ƮPvٱ-S$rymu[Gj+m{ұ$0KBobad|"'?|aa@[S7!3( Ƕm۶m۶m۶mޱm۶=?lv^T}|/u rE:~A΢TMP[! j%/B!XW[W7l5/qˮ?y#Blv@qWFOû Ȓ$i+ (/͎ ٤%~seui5h]2SlB34Ɓb`BkME o02B^GN~qls02 ]߻V%2`+0w+,=e/CqR;abɫC\ |R@Gds Eggw3t0/#vbG> ƱΧhtrRe9wz'e]pUnWm1a_c+E#'ydؽ62 ){b4FC&_xhh]C,D9K!|l@nU6jV=Sl [KAJJn&>|2M FT_`EtE6=ja֧/B#9=%nI=?V],A>b/x/V#p#WJ$GtzSFJ9|RJd<-yAW >!FzJiz_EοlȇZ~Ɣ' L$3|4h&iW}4*ta=ș1jg)&_ӑr׶ZhI@[qQ<2zUJc@xp _ѫ2yKmino%+͉׿E@'9cǀdYѨ/1NW*N1׬ª7Iyy ܱ >z@0~[B,6x Gux2uBreypU]`##lόcHt)% /#~=YʎHaXPAqgnx`rh{w[@{Q=&`6^0DzbE%MVPENo)Ћ 359R&h$oo\S#aǬ%Ʊ;\)]f-K'3D t\£xncSЌhf7Ug/⼣-_bś#tzFE.TȨ ۇMQgirX`ZcL@7Ɖ.wOYBGNeeF"GG]8u[Ṳϩ[k9|̋D k^Sإr?G`"r: +m=T6"J!Q烗G5@1qVm_5nP9d{ߥh=I3p#UFtPi|/l=#R]ߙBAPhaGI~57y ?J}Ge[-iGjWcb(M@>bV;Kjt~O;uV`!_3}ұ]}3#J$Y"&\ +𘁶҄a_l!B*5]eX #^Uh[=!9 ͯ",Hʻͽ9е,D_=A`/t>(aׁ݉k1*yN tR dG z|2-aK')\lj(5 Gog)ZgJNdP p._G20''=,SқRp"q=evA53/{1ѨK,W\^YViD]MJ۬D7{T/XcGWl1ܷ;+E>K(ǯ+/wg[qA{W\hY |sLU`]y9}ֹB)(V`i st  8 #0k:*Eէ?wU\C4"19Rp]Zt$Ha NG65+6r! ȫxۥzGǒ^x"[y_66b=uriF"V=]x.:` +-2DVR8ɳ+ c%VS+|d8E'wZE;1%8YQ~Ɠ}'OmtR%cQ cyB=bֹ@]bd|iG#8TVV-lߛ<8:Ƴ>EVk{|MGѯd bŇW*x\ٍj{ 9`IczQ>5gO] aK;7ŎV#LQd2PV -(vڧb@GSp&eC ~gh06ܶ&A‰yL$BsѬ b>kK,&YZMH9t2XK!QBƫSGGpmGQjWcM"c3ֽyO[ޖ!Fp&zWmN+gf2i-{$,GW5߮;0fG'9@lh*{͉i[wZ/ie2j>KH.)}1?~54 N/l6Ts/f@;̓߰'/0N.=Nf }G~A<.ɠ6x" #rrOz _9Kre4nzOnxg>+;Kr]uGlIQ'{-wstI"#t$td6) fH֨h/lɺqF]bĺ|ߌ! (jWdT.A"a$LJ=t$d߼OzaZ.cwM4*}f2:PӾ'*(rOX,Nɓ|:X_YnVnk.a$Wt=%+sAGD࿀-d#.m Hx,­<8s3sXoCTC+/c\5$cټVolH%c鐁%[1Sn.Orn0P耘UcشlG,jAI. H2_se+݀n~,%&ߵz*OICmc`oZd'hs`l>ɕ#os.K 9NCG MH O&f=_` mX8JFwA[:M6hPĈ/GPn[%Jgpf*/:]x>8xn4PNpU40rd;T#!>!fM_KbRI SNQ2LP+ȣxÍC58d r)Y;b?:] ,K!QS͛#.|ck1 =S|1՛31Qɨ5$0Cj=;+RM1N\zO#Gi>6Aڎ!Z2ae6v3}@gLFn1s-M|;pR~*ºf3CeE<(9H F侲a8ݻ0rM;VM )2 yy '|exTav5 ~Q"֗_\QE9Y2QC5CMT7YїH"ќe'l}~.aWǥ *;lj٘)#dpfYhCC1}ܧj#wh9l3z<Koq3qk Xm;~aȲ5(^7 v иhŧ qSrm4~n= RܼhJ@Yø!mv%nA&e"^l9k'E-ͷWM1C5q/鬢 oެNKiR4 o+C+QM  {fӑԷ.E ۜ/ykWck1kv;@HlɋtT+OfSW\&F|ؒM΁0`8Gd50ٮꀎČ7L=㙘6^KA4Y{STF)S*L_X}qB~a>_JӽQ{ITO@[D+ W -fJTY>o \ŃvkokƺťRbr҉Im4?j\(U/*T-BE}Pu*麜0Ҩwpz{z".A>_褑+}pJ}RtMLFSVQVFת;C.3 /E)|' x?DAeJp̏&TC"NUYX{ !1V.lƖq[Z$RbcC1 Burr~ٽ΁G#)n%A?\]L2 iTHQLi)AvVh_x; Մ.f5j#dTV"z9lL'Ō̗`CAYIfSEO6(6D9ܢs!EqR1ϸP\qSl5Ժ|P'K~]eoX{nTd?*WI4E(KYUEoObhýrW⅀ Jl]G]!MGQz36_X춓?&7Vg1b%ϫ"ov<Өq^\52SM؎M] eBZ~vٽ6YeԽ ]>{T7S)5vOt-KJ"ͳǔ$e{-ʌqm̡a.ubCg +rDޘT3;eOyڞ j OiN,aAVJF^忇rHP|3Vcs9j ڶ 6y!-mURK͋INhëNAloލ֫NF'9କ(G2MWN3h?E@2pБ9]򺷦3}2ʂVNW 'F}\ )A V=^v`Y),&$/l*O s0#7{*dʅw)'Vg~_L-faNM]c0ss*s& 4I)P-?L!zﱔT^T#sݽ9ݐ9tڻQT@R2_d6Ċ-\}F9$yi"lDY\3K*[R$=tQ>z̘E7d 4i<:J`O[Y쪑l;,ˁVPM$^9ìpwTTg;Y,Xǝ:N( G5(R ;&qAv"fRui*!gM`]ߵOJ.k$kJ܎ *\uF'ŹMa{[pݰYT7P~z8cѥv`' (#iO g} d<i/ogEϚ &jߎ; } pFK`s;@9!$j'jLxGƚBik=/ƒ;\# J|dMۗOQҌHXE3 _?t+\mYtv]7"+KEaI(˴u/n."?$gl 6ޗ?Io4"qC}v]{ _}C;ɠiGXv+JgX7vA-TV$lo ˕G(YjzvPa3 !5$S822!S@ʈ~ +?`.Ʊό^/ԯFUnD zhPv|o!_Ih_ ҦeDcxnJU+eLϸlP6-Io bkS`U(5qI?>x"kBL7 VwBomP'p>W\[%7²:.} N{,Æ/hā! Nto=혙ȕqna'@gEOT+jIRUB&V:3 yp|~gIЛ98"LKRWao5q9ɝWZ{V>*HLRKz~@TR񺶕KVGJ ~PP={o:Ҋ|sh.|U%鉢͝ix7sfCtCtH *֢s;s?X؜1_w9 n4` 9؂V40R4iX !/' RIN6yF+XʹR[F|%dZ"\#|j!.%Gew,?#qe7`_.^WzӲÇa /!K{zL5Yehkhg4t@nN>\ ZF}%F:5XXdhJ )h1-(0fG?jҔ 2IQ^ЀCn -}0߬d>H Q'ᔂiHC`VDŽV_wXYI'Vn#I~W#ax@|aKþc-. [倆19tj{hHa0Z1"<HZZWUaZ63ъ{HJKrm!#69}m&$.?Ye W%W ۿ}F%c5߉4lIG~?]B*/_Op73B~홀V/vnPsByp e8[P@LsDZz ĞgSxvPF[#nbA{ % 26"qd:LMmJr^#J,m\z-d &9΍ PBȐ%p `AΕC9p_h:)xFpw5(s פAvsm潵\zGNH|DJS}eJZeqqD<ꑰ# eUML#eGA_esX+ ^ TV㽯O ˁ_mL \m q8endstream endobj 19 0 obj<>endobj 20 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 250 333 420 500 500 833 778 214 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389 400 275 400 541 600 556 556 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 389 500 500 500 500 275 500 333 760 276 500 675 675 760 333 400 675 300 300 333 500 523 250 333 300 310 500 750 750 750 500 611 611 611 611 611 611 889 667 611 611 611 611 333 333 333 333 722 667 722 722 722 722 722 675 722 722 722 722 722 556 611 500 500 500 500 500 500 500 667 444 444 444 444 444 278 278 278 278 500 500 500 500 500 500 500 675 500 500 500 500 500 444 500 444]endobj 21 0 obj<>stream xeTdͲ-Sk^Hи;4 o#o~w~T3"C*)HTDL ,̼5+; )KGA! 4vr7v4fq)GsprtPh-|YXY(܁v@{/kCU j [bJ2 Rj)ull Pr3,rV@{ %g0u7h._A.@S/3)=lg rX8ۻ~`eojfO_r<~8:;|})9:[9*K;NWKc|X}_;L?0_ZWc+{+K0̬\m|9:[+ 7+{ 0v6||a>?yzcGG[Y;k`5gcaiN7w0[n:wDO|al`o01)8~%@WeFZJR+,j'Wa*vxo? lMo ,boE ,lD+I+O%աf@g[+{/`8ڛNgD7ARiW5/G ?5?X:x|X3xx8<~ 17vu2323+#ao`ۛ} VNn@2˗S210 4;]1*짿}ݴ 帴.HS0H{^ 5n伝cJ4xqz;ӴQvnH7Ra\AdXvWuPr~1'u_1@U92^i#D&۞VQ[6|:puE3k_; DWD 2.MЮCgneeXDR!%Smӎd6DA5n`t9%T?k7df."ŘG|>D~ &um`7q m󞏗R#M9O,@X 7o W`w(%ۺ3l"(4Grd\AeuVd%ĘoMC/])q]OKrP6}# {SwF0砘ߺ.ݚMҤƈnrѱ@oIfȕykZT;^%( 6SN Fs}>Z Qm[49~pQNzC0IL&Ó̈́#[UMdks6~jVivS̺vcNѻx?BǦnY⯪Zg2-,%E7Oh@)=;FWei  )f5Cĕ{N< $bQo 픂{+"J|vOi%G*{aIմ8pDl?ڔ|b(8oO֤kcA ՄRpts=M#5WrmEO,`7Cp{9wӽ CvIYPek.pҬ.{&3 'AAxvS"Q4K٤n0oG( ̳{j1odXlOb9\>)=BsanDAd'Px#E N)KCe PJ<N=Ry)< ަ}9vMXp.x 2FF]*jR@\UgYA X]@{cיWu99ָq.Z̮ED'HysdVV]ڪRo~ά+6[*_,9깹Lސމyr83PIS8cy5O33\1DUi3g?Mek+gd*m|3bb-㗧]+J'=\UGN 0&BS9TϥQ9_U',Hr)}L+TFb;- DG;Ҿqe꼴fT;G^7τQ~z@.c N[GD5۾J36+׉bh߫nj׊h:ez,UHBQĉa5Tf݂;λo kk_ȁK#e.FI Lnn#9T]аؔh(QyO4Pr*+'X`COQ-|تh; Xr$ΝCn/ kenZV|'F#T8$=#E)5# 6zT`3 [RR$-6FH4i{'a) Iq8l;_9ږ]#(&YΆJȆYaf6,T;e.nj> '}KǕ*"کytlC_p,FUiB7xi|ӴLr NӡCz MKY.ニ>ïa nn GCNS $Mrzpmȇ7<ĩ68x }}W@pq#F wIhVKOTFSkpTڞ 4|ѦdM!La/NS}9=S&ԄJ] NyH1C!!'Yږ#]׃$/H &I8njn6isvrHeAZU}jcﮗT @ '[bh&j녈]ŇW;IĻ[6g޻p{ B>~FA9hޚr~nȍOTwp >ֹת [틊 }gWrG@uQvhư:Q2īAi{fJ._ӣ8k<>7ֲH08&QaR d݉SmY&/Jd ]s;LkkXI"qJ2d7ua'S[X1흼~_,ޅ04*w4}[/`4*tGG ~p"{1ɏ"'B4Kea] {wO?;x$.P)[L|O2϶-{B|Ģ:Be;1 TV7 v?r֓-L#s=fk':| <1N~om|Uchԟ^{njKUeJph 4(KcWĨ+9D6-ho4\wRRmyҷڰ͚YڳBt,*ؚ! mEHx1Cqd:S??tX䴩z/tVrR|mw R=)f[w]]#"g)'.ZYg׹7:O<<̵)#M 9]AyFY?.LIǻyb|Y$AÚs vs`]GheK7=5jx7_&;FR6e[vA.S/ai%=hӂ i tLrA^cG;FMLPBk:?o-ȷ9aOPwUL s"P&du'PkU+ ,.vODt}JʲP|.b`mI^Hz$3e[?ňXȽBF$!ل2y{TC $+fV>!0M::kc5گg9<͝:?qSS WI9 >?09*e;I L^9ݥ :yδ6𗌝:%E}|mo:,?j?YNҼp*#<waP=n6PZw}t$J7Jھ5o .Wֶk73 evoYpBp(f]Ǥ,GJ >zuG;5OEAhy8х)"6`:yB!\t(7E;>b͘DT}cDА\T$~Cn]UtU_^1x|Tr̘D\>)X:ƍ5>cZXK#yR|6븿Ą]=B]! nb9 sT}ׯx4T޾{[s `Ux@p ZETy[gN-2 /.5𴇾NuZVYx9n$E<}LRu$F[Y +t@b,|qټb04#uO~?)Gn?]Oն oWDNƈuL>9*0gCu!ʭb1KAPuv\ FKun}/f-^¸'N c:.'r701Sv'+R]iE#P3tZΚB6E'Qs w;g,?|Rd?3t WjT,LD8WޟVy}V^;8wH TX#OcDӲ(&q҅4VF4y E}}f#NnE83,zjzɊ7#4VU9yb[l-D KYE4Wt_s|%eiPUd-gn>lӓ5YPf&a%[\m^iM w\Ƙc ![l${)| ~' tkmO; ^GZrHmu`z3|9 -'WG@@o'P*ȣ4 {@-|+>K܌2dM N!\?z"=޴tD=mb 鎗{@m50!aXP˦Jg ƙ(MaUĊs:C61 Kzۧz@!۔6ll&5uXoV)<`U5 (ƒ,z)դg:M(* 5fGRORCdZV;ƩVO OF󗷩sg rKY+=K? Nٮl*x[g~ֹ\̼d 㺟ݏ_i-|^3C%:Hzǽ@ⳊvIPDfOt޲*lr|lDɆI$1Kԝ\3x)X^Wz9 Q[]uv Ӎ8p '{(_|\ߗ3ewXlҙJbw}U|=0G;!%ߧI'{eM #e cT{j4Q4 dj`ҫCAYwü j{m>PmAN`ٻaMo8h Dš^֒ĚG^ v.с+W R= ǖBE_vlShmInC\ٗrq3ZOWʜ`ϐ;t"=OCPh=NNx%=R$ZL{-LbBgw[P&;N$m1@ʓVX*}ƹ/ %07'_/^eJrFF#]4K4#+V'T/Zav-Pw{BnjF* bΉaޘt٬C4PH͜;#xw`(q)mHJsC2̆4vhHbn"PdL'8&9q˘(s^W;綟_|0$cnRbH djkG:xc6C v zɿb ^XN+zn[-cƒf~c8d\?6' _F ^avN^b!l`+ktJ9BoXf w eg!d^EqZ}X땜=Q@rVަŲ9fɯj3upfP/~6#\!?YQ|Uդ8[UWod5tmFw i͙j%ݕL?ˇLJQtMwlSڦh%"f bv@NGݷDbeVC!j(Sifol^(Ϝz D_qc6~dO!B `҇޹pxTI-KXתBA6@NA2 t7F)ai;BDihN&Mwy*jcgkhA'Y:Y$#Պjp 1/Ns .FLjpkA6GAWʶK9/,rLOȹŰ(06iA66%/Q7*N6)-NiZct6meWIl(A5菍g|ބV@jML>> SF?rGǾ<^.@AkhU2|N~k@k0ܭfs[DyjTt$9z>tc %b-E 0 :0Ty}Hvibeoj:%VLa&\n#ֹZ-gq<=Upes9FJ;g) XaCO4Fm^1y ^orH%=`'Gacy,'y_l(zp("R*ra(Ba# ۝ltssx%*d(0~G;*8#q`EcdV\)/"]S|T HԻ6kdWl4b:|γVFjLK#4'>bGdHGc; LUC`p Zpf4 E4P2LԸF0:m,wޥ[[g{ڼ ;4'Vaݨfxt\h@P#s ˏԾ +BZ2 swaWhXq]ôkͱ6~M=N 92(=ntۼ?{lhG?.>2 Ҧ:,Z)YpӀ_\SնN. 1N+b#;x>fPf<%hMیag1wT_NUv ;%N[ Ov4|Co : -\U7`Ur }d[vKW^g H?ˣxIP&!-n%0!;S~t8wɳ=1=R~[ 1ZJyQǣK? RWi Kk∣}^n*K4.Fӌ{B^ w D9k${uSlz:kYjl~B4K0ZjGAӓ% KJ~2C ٌ:Qb&橕'ɡvsq}-nKn F]BjNe]g?>;Xc&4 չM.t0* ~SdQ,15F蓐řY<*(mrgRg*¾I3$#@BBA~?/&;YNкY)TKezՔ4o `FWí]Sf^mVL(y&R:Dڥòf~ G,%Ya֢30 5xA5CEg[TŔ-Kj=GDRp.mޢW.[N61?'S%*Y#P(q*Æ6!YPY*:gJOWd[PVFg<ڸa؃S?L)Ka?EklN1;"Vn>&a]T,&5wmTxK/P!.D;D,;A+zf+;6ea*ܚ+K#Swm~sd3nV]ݔΊfF[Mȍ8vhSXD)Ћ|e2g L5 *q⫙~VLRW4 xaðeXQW6M󴎋i冑 GQô׭Rjd뉇^K/H:g|K4"D?SUsJrtՋ oggMj.8bT{%nWZ]QnL!<63]ܾ)Rwd ,{͟㽾Y3].dc!r|;|-HĜ$B:jXSg8\H׷lBX}GpX50rL VV5efb0Z C'YPw%iㅕ~>y(YYG-qJ3- C-z ѤֈO0<$cEbs͉w_H6uLt+٪mI1`Z*+1XȅBo?$󣏔g'[ %8@V5Avy#lVrզF@4et# $OsљfNj_]T^TG3[zfW'b I ktBQ+.@#$.aKܹ@oCV4҅] ++b-N(]'l}:q"aavz@uʵ+{XɄ̃p+ !݊𘚬LU~+Ge<}f]k|^x0m"\O4Eg TqxZ]k_!}|'^Wל0L.Hśl^_pV4a'umL`@zoV> 5ZFZ’]rR^oq@nIW{oERKt;T׉D`~FZZ\mp8[$*oF_TQUCL=Np C}2H~Y-9]'PMMـcc ٠^y{$?p"6`U]5HɈ']i&2Yg%'~NyJ.piMB"89 Ѿbf(o}=uO,ѐd&ޟd|]Tnԝ3.|U"nѷQbyZUMY--{C5U ()Xyc'm\3@@ >ШÉ_b:V큻?b k#uixF0bTݍaHq B0'ZSDx]!&"RZVˡwN)/F Ǘ%9nY*(c[)g|q9rU_.  Rsq=IfPd"f^^2ro@O P䭇1ֆ{VAR~(2C'>}a"YTZk l\*vk&0 "A19)7 i.JY4^M3J 1VM< `s39nbɊXABАlBMhuϏ,GX=XR].7pE :oU4 8d ۂq݅rjJm Tx-- Qsp4:^ khqwPy?+̝z f\KG1~GTԪXp^deSW.9ۦDytėKјLcfJ{ZAf_2E+3 kkRKklxr-|7Þ sAP%jTA`:d&+gUFO8Np.TA"ļaEH`ZԦH_$ϑ9].!6Pcp5jgm]hh(jAU_o[$_E% r&.r}œ! m yQXzRL3`0Wˌ,{zNB^pʕJUSh_ENX0k?ZAЃ5K)K}!2ʛ+tu,9xsTn?P(DDˋs)skN@3t_ o1j>aBkEMF!`'-3; 6AokTk[%);vP6g6,ǣ-?MXA& }hCβUM?_*юCYnĄxGɔyk-e;2ҏPx) %0k~!ű Lg\?@,Sᮩ34A|M?;YՓ"t܉ ɵd#hkb"A}(uߒn$K59%u[hH ?_wa 7$5B3x yL&QP?aABڧ<7`na3ZԥCxq [B_ʃk&F$Oջya"Vwͣ~`8֛\ ԶXgʆ_& aqh'rhpAIXn'X&β>*M;gF5lA|I%pW%oODteDYXI7?ˢث UGul~WCwX2˲jx Ak]2z7XWNJ…QfP7*3ȽuвW )wpSm]7 hAF D:ıM!A}y.sR}vKl U1Yzf_X{)B*]'=:Mg)Y|X 7 ^!0Ϊq'W.c0Wx+^#SIa2sq"˨][[qeVprKj[&Ӓޏ_Y N@Jtүp!=lX~.iZ`gtmtvaN[&. ? \&XƆ՝viJ_|doY,kob ̂M PtRSvF68ȹu?Xi\WxW(9\{b,9,ݡyHM9'QV~R Z#뵊! |4#W.׫s(]#ynmlZAR#M~sDL0QtV.(`{%KWpᙗVN;iڲcgPOrѡcw:dV,LLf6/;\?Ksc.7<*CM܅zJoiпABAk͌ f02=R@+/sF >).Yj~@"!*cxXsQL(׿P *Z+a1*IHL62c=m5Qp{LP**ʘ@zƵtXH)YsԈpGe`zRŒ-&Rû ȇae6Kwvj2JCf jT#(?՟IhΉY7#X=\0q約YSg  Sg[H'('ڧ G{2RYXsbA1lKxYr!gT?(V92Z1u[CM +ʗH$dR]OS4B4>QkR;87_՘+Tݡ! ^HUG] =hx.8pPEOYg;! "%DHҢjX6wÏCO$zb,fTJ'bj|5Kv1+0 6pz⣁, hpmɞ_RߠEvXw/TeJ:t\'u+ Ub!a)bVrȽ +hpBr#Hh hUvn_/郰3ߧ~:v WCF0AlN+rQhx0uLŸK@u2>CWQ*юxQhc,h6*NQ, &HlcmFBKӯFRR.ˉf.f9KamK-wh*"jqHy6 ̀-JyT\$HjUq$Q&"bshrA{0EwßR' / ɱ< {S4W;ǿ2 hzft3%|/̐[ v򏟏^0!QN@xSBXcp+^1X2b< bl 4{Kf,k;Id,8L`WuEϙܢ]g%#Pyٲ[1fhMg'A^ϙw\kxߤQcMIjKL.~k˂|'ҹiMRNe٬Id5ftR8I/u&G{G1i.%ʷ/ftf-M;nldk tvr&)6"(Tk8j*Pw&C),f`æ-,aoԫ/nX։~`|".+H!f2E..X`c1-(.6[l5NEǸrglXK)~̛FDG@sᤘ<(dT(J/ E=eE+2P7 {^8/l!bT B{ğhEPSLV&|rs/:OgLʆA*ʍtң&iZnXVh@`BQ kK\ ;_)nA-qtVjat :>j``ȠL`#%@W\ID"8k@fUw3BWb"j03&Gx,aZa׵#NT@,P吝yKQM>-ìS1BeeyX"]1{h= )wS<45mf]߫_ϼe;+EhM*hCQ=r7Rn ~τyT[8-ubfü͵^ ~D{8>s_$y`\I- 7F&wI K?rkrBl8xż fru%A-Ir'b<%XzbMjZC~O*.@LtkI8'&RFF{i?32-c6o8"'Co;kay,7u%,{M!DFR\ ]F nU)3 .so}g%~,MKrȭ2'm N{ B=XB}zh#hvt̙%YYLiAZW $-LtUE.ѯXFqBޗ UM*)Hiy|)0W;RzXmӻ\GJ+ݨX<%A lV$#`~10υo&НɳGRX~4 BE(b+P4 T\LX^@˓ JSj`2 kZ+]ldAŷ;] =T@!+,@ӿi+(D^KA0J*Dtgxv{ 2͞׏9옟W7㻂I>@cǟ^=d֭21aZOMqJ~,WLlQ>>P~1*Eռ!HA戔/BNx^@o- E):|c{]D}'*E<<z6 1*@/įېo\]av2AbixeR0uİЂ1Rmlaγ2Nu6 jlV]VH  q^o1U+PM;j\Ҡ̝Z28iB *fG;%#Zk7ڟ▆El|зB1/=F->٢" Mt隨,u$%k4 ?:kRzX$<#B<3u&t)-ZJ( hGʖ$sP0`XYQTks&qđHѻsfr4C .^: *|?irN[wǾ 9uIҷhmNse*J+`'܉Et+ɹ %tի$>;(>[:dqs7+\s*Jω-NGOw!=d_/i 6*Jp[ϟG}6GU:z6kՠcIT`By~ @Y !~Ljt=is 0qpz7ρ)6Cn x %7!^!sHr-ݪtmB7=ރb3>4l7KBL2 K 7Wy&HB陣;=˿(Rg.nP^sfk0n|7i0IA{m4tK\\(9`1׈5t[.$'낖Qwj)gfF&[F_>P`o)6-ї&BGRPBYsCS X5ϐS/RzK8+l!!r۔(re-UM>MHȞVOAqY1iκ)o:E(n 4_we5M*Nb. ] AYƏaC#1L@<_+,M+[q/)+&`LgB*}tMK qa6C0]U8]<d;Xg^O3Uk/nb_?#j]}AmQH i$$PD>bǯ9fBR)˿i}8Ʋ}#!;$cP(Pf^iMEW m,]0EmD*oΣ9MW:pYNjrf\0[QO]е &G5T&+pV2U/ 8ŢtX&hXӋŋ8Ht2@YQO@>L" #hBKRde!Cn|VB{D&rLUaT50ՒUUٱp6 9ސұ΃F q!aa,2 fcZ{#ʄʵT MW; "%ʝÿC 6@aua!Jtg=ƻ)iC5ۥ{[3[\&EսeMo oA{.{Hx^:4&-mjĽ.U`_8J{,}~@gd?𨸺OpL\#sys Fsl:;#c0T_hnĢ:z LA 1N6ZE|)iϾ55p]T1d1w1ћ=P(\1:^}jMsȰ #;PZ%$buL> 5V+?rzf%|(P[!X9(qO?A݄#6vAu}\(C_Fbا5 ]!]KcĞx5GXyڣn{+P3i%hPQ,-Y;a#aV .$Ut`>s8Zo0< m(_dHhlVѱLKоDJ 3Ŕե"8X9ST/LJKN$|~o9ǒ~G/R\OWfe`Be,}C? Sr#93k{π o++ΰ﬍{Nߴ5υHl{&py='ױkӂCr>r eȬ3PhCxM=|K5j[g!hʤ"I~l:pwn!HeL/2vv" 3sOj~ѯx%)'%*hS}tƽD6j\-3Ncr891Pl(?E9q#؍h2q\ԯ DE<@Js,HUC8Nb&Y}=4qk[oGl$aЭɢ_o_7X! {{cER_ Eg'm\0#B Cb~BA Z〰xU^:!KVe2dl[xMM2ăf؊Nr0.xR\a@AmpzB0($xZC^?}}\mSXX09Aٝ^?YQ:H|3Y BD!ưͯjn\g[SO:-ohBG91B\0=3;\XbA4#Cv3T4=m !h'|l 0ؤB=zs'U_"':Pydp2[)3?{$C=h䖾MfYJ`뗺D5 տ!P\X/F=T7Z{+AC@&fli!&s3@ei}uqc$eUWw^=eWOWfrg;`bZ I1"gy)t{mBq;zbѦnj4XR H\pW}Z$H/q/q!{0N:ŝS, R5孧:J{%P*j8P1B_y&&1+ ]9N!cpEХmJ[,v~BѰ옠VS~eMW!Nɒq5"'8g;Vj[H-t7ף ` {F!,(Oժ&$c_P Q?}$AJ {(b\.MBmʹ>i'Y{'|,ՔfҒkPF-e"6\Oc]@(0OwǞ!_Hc6]`GBzğsgS7?.9RMe@H9Y߂)ë:,!b FAxC"7(jI g0髚D^Lt*Trg9s*F}(խ\1u!J7A ~T},@DOG#of 犜]1,{4AVk_S \e?]L=bdUaș<* Mqvi_NДERnpkGEȑEY(rI'DH]*[ڥDF해ł&~kQ JDq\S Gd]rܽ-6$eDYPDa)76)JFr]^*+ʐ4/3x_df7-\H̃czJKAjɥJ& y\y2m!dVi1k25OghN˴ֹlHz &DMUt /= 2a?olCx!=D,&ே˲"]/{d _="5)$@oM=n'Nؤ[-cExJeʗ4 ??paT21JsOYAA V,*|F0-g&c}G.MPH>Ԁ4>KgA`SܣEAIGiu2#;wM&N',өH؄H;daTsK8|VS$ Gwpb=f R o)# OjI:$aR3?ӓYmY $4f}S{]9|@phJoпXXOֵ+]Щ\pHbOTfƨ_VqaR6 -wo_fvA.d3 1̳IS{hYC,uG0GGU7зDٳpcfH"t\ 'M/GOGܳKV[Mp,3 %LRCGSV lj<-i"ni`CcՎ5췳ٕ!Vy\vt *jl])7GaOKD34\Ϝ*wY+.I_:WLQHZ;呹wyaocw ҥhCa;w}><6F6 lga(< p P%K?r_+9XbO"zʫCJ'%{+xXx _Ve3Ʈ9%I<(: 39Im+:I 2cVB_qɆZ$궱&ܝ^Ԇw>A2ZƒS3uHB9ÚV#W.FB-#P'&ʺ66=etnӹ0_™q%s`g̈́j ̤\?S7\ɡK,rӷ)IΡ_˱gTYTHl'Э[<]q=nTw* Д >WUu8 "Z@_^!XD/_v&6YG]Rh*BHas'lO0 |8M S ;3|l ̗a=y]L%MhڅWcjGuϒQslJqKt[[xD>؊3aKyD#!0=c%h D| F #}T(mzrdIxU0jLEfV%,-e~g>.{T*=[cHxěaI! Ú2Y+F q?"X K r釋AF?Ǚ} O;\(!cVo2 0,dϭ$+MShʌWq?x3*f:Jjl>E0]FG ,DFg 3*C%Ilj V7/vz[ qr-|Yy~OZ-"$/B]D@\d.>ثRRGW]3h~Oh_}5tuJ Qd ɱia (,lz#&GZ>O$^ZuXQ,Le[iv<{AZl Y "\2w[puR(f/e/H\Ҕ6 v`t,M%9co  ,TGWb]H[9 􈬖mHtye3h+VER!X%"g[B @NGsf$e%Ud7(!ã~JoO+ PUc}shLw } [B;!P#;Abϥ%Y s߁ս<<1&m+,gv91zGryn:h<<؊aIaj3J4~s?K'2PҐ+`֩&=vά]lj#X}2Vz\}|Zjo !A–:- eY}kg~{9EȁWK+8T\÷t2;FBKH?#BFb'~K:Yh 37eu3e14S8_~Y'e hw" ,$ z[Fe x\/mfC u ҡz :uzV42+W5GCiX8(MeHϕ'u]&t&]TeHMkhAeI1a*~M,b4Sm3␹+.lQ0< `IfTcMA*բkH^)q+l*jM pH$SbMnKa #=~th绖md K8¥_fa@(z'nKl *Sfˠ.]db= 'lt'5^N L6SТb(%t~$^;Ćnxjdmd89+KVY )zR_Sح WhϬ,@mdQ KzSM6ojJhak繅z ,jwQ3c+ru7Vو_HEUws,;LN[}#gv"PY,[ە/ n|B%xd nE3ɫGX?8 y@5vT!fKԣjO$^ѕmC?#k,)vf]hAN*"1U~ɕ:5x;<$piguHtMdx.M;a@v#aYpQT}B&QB185p҆%1=~쟧@ -(*kXX%eE#u9Q 9*)Oy=qMZiwf `>A 0^y9 pɔ+-H8B9Qiؼ9C~OMbPvGi!vXg9usBb1%z< ,/yd+ $S q-ExЗFXUbvS"SZ) fn&,آƊMR>ڬ(1)һW4\k, CTjw.ʁX%Mw.RT@C|AX˽J4]`dt馊PLg.η|_o{k&5@ET]وGT'cfK?l2 ed]l^ E4|+KV7`Uk0S<6W,`-6FnITiywJ!}(4Jj?#a0ר mwo,mm2F,p9GeŤ͡3j0x*V=^˄9+-9Ӧ @rb0@7q1@;)PIw[` w2艮*4!x"rMh8B7WV>divI&m3!PyDMä\%\z!s1>N9^SyO|H#Vr(jVNpG&ܨ# $6 oE׿Ɗ`i ple*Ӧ!vC=9Ȧ f*Z^ Xddt~騑ؾ3I~8Rqerѭ8kfx^l?$@XR6 ݕǢΝhL ;G;@HTOrLGpgt>'޾9z9MJ_~ȟҎ@)HYeՓ!m/E=⦩]vmLKՄi\~.1Wx e\D9_ziCr>ƣN"YC s.ny,+sc{>&@-bKߎ#Yng'ίA'75oZ0~>3S||MC?ff?/H[L$L!{+fKxmeD }@Ё"p{3a,׾"V 8U~K+/h{J-AG鱺^@QVaW 2 ޹TF9 s{"R#Cwqu$rW+DV!Rmw O1{4VFaT9rIV47-JQe矍xs+w$D/]gz!9 Ѭ11닣cR/=7h$$oB$bpR|k 3uRj? ykWΔL$^0[w#[+6B! aeFWaFa-S'#bc1 Gx۴,H F<!A1]U+9tI\q,ϟ>gbߜz*l4uP$ 2bkPHH#l깻MJݞ{#`3Vu[X$PNCc$I,ikg~v\7.ɧ.7e9e6@;Qµ}⯤j>nc?c 8 EpeO X _»wϹɥO,6/!lF H<,I;UO>zʒ#W>8ݳM.S*1ʑqÄ]8D [?nL w(Y#j,8&[/hd-码vQd 'SL2׀Qܿh4NA<'=e{@'גw.#a#u`%뺶 ͍yaIJ~;0?5xNVbV+P*?z+0`3ԎC { &n Lީ㹴Uυ8 -ÇXpoČ \GV2Z/WјIzӤJz${A pj]}>6!qB3;4Aݺ%bGyR@HQdwڟD_2)~0M)+l(JeH[SZ՟o7:=[{W¸_>m~ 56G+8Y^EwSZNP}N 說] DSa8zD!'d|ص{ 3 *j<7@ tŰ,;\=Ώ5ţ  r'" 𬘿rȶe@`%T#}B}mƙTzC+yq]6[PIO:%x?@>ȸ:[aMKTDj4 0_!';g YNuMD >aLGmp]|]^$n=&u_p"Ho}%=PŶa/;J|!W j[F*Т{(in2c5[vRR3mD1GfRF:#k(`2 :خYlOi F_01amQ'P?hL[v]siٿ!>YEIZ1QF?cHp44'Z"+PzL7S@g"F&%m4I3aV/@ U07=TIיaO(w^ FF<\p$HSfoZջmN wߑQa:c9zoӵ GJL3|tA/ʄSo\UÌ^OSs o#tRrF0QsU)BGiAe9x !~{YxuJx6$'!s"=~232WT aq'`MZ!27">lJ_u.|" lZ7k ](oTiEZbU9!w_Jx%C<_ja}b;%_rhpI- b=׿YUK(40r'D=-VDP|ͫg_%C L#:_nL~hdI ]NGƻ޷97v^[J] hdzٰ 3R7iOФBGM!™يy.TǟKO3t( oN ܲΊe ,S~?<w>O'w"{nswRS_moPoԔ7M-\AisGP pO%/jм=T~_l PBiWx&QoM9{||RB_2LBq?ېmC]T(f`/h$3ErJroB=7lu8x@E6|}RhwyY3a-bP(/TrZwhF«+2dw":mT"%֌*9c{&|lܸDrELq \[p٨r_Lیwo.lJbr_=֑A29Tt7)m?Sژ) lLrnKsJ N5?~kr)iro&h0&¦4ѾqVff8ZV{'ć#d\Go;$Κ 5)rM,]Z.N3t?IG8B\F~ dEsDs8wJI`pN#"\J2$ 6v4|= g i.;gyhV9c5NRt(U)d R7( 9,>@?YR΁vX:Fze!uʈ~g2O=>XmlXKY6ǶA:N[Ace1k{V ۺL-l'EGs*}S>lҧLc/=u*ٻI "/޸ S?^R'VTM[S0=*2-Ts#)yDV!h1RdE3q nu>CB'Ux&eVTdD"ߏFr*Tn4hz0+7Hv+ET>sadX>Y=@>3!6_CcbBeA]F*c={ ZKo-[:H[IAuTvR$Iwv*1.ȡzip{H)+'Nxr ͮ~qbӟ|X.}ǥtChVU+)#i)52Cɗ$^7~N dJ%xYȹ)C s^+׳9|!:ˢ ]T9x'=J; ;(7u7g>6;vGX݆/:$A֬>oG'=ʥ|Dn=,-n!?5d '˃HVmtH\la{QS˙;BF>kPR" |9HR4$[fOꁘCw%@mcD۶mNvǶm$_Onw jV>٣HQIe(Z=D/RtBdzO)Yb[S>|QUpuqpgPE]nF$&Sr$5\W%$xJj2NX#h02C;BV߸Lbu񝈻rR fgNDӓ>kP)}ʜ:|;-IPU9%ewގa o8Ӣ:ɘqV/re:*G>Aƻƫ^agt{`&(pAOw}啼`0Glۓ}eoH/PLp'P1'lfspvc4trN*Cɺf;LYcɲj~s6 ^)I2f(|@RHְT<ϥ/KB> z2 pMqXVSL7kg̕e e5U@v_:?lsXXYQStt%Pӹ&u<3B߳qVd&]]&y231v QHBpC(s&H@}{U{1gGхpB]\$T۷X>p>Uh+@kf %[CJ>+FA ex~~+U>Y~ ,1B5 J.&V45.^ޟ6Av ο؍KͳiߞVVe:5(ᑦ ߿}R<{MJ v|T/C5oIWSqu$xy`*M ^˄M 1<vTMv%g,c5P<4-̎ `gdyY |˽?e ";4e>Au( V>.Ϳ\ewK(׿㮕_ @=oODXSn^mueS'z=׃q( %9o%_kR|O V;,?o~Ay~fykZ'[|+ Ǹ~AH _';M2:cІ s;`(տh#UpoFZ^u4@0iݙK_`ɖ2ERSjKb^K0Eɸ'+NChth|n"¦B6 03u8ټ!nŢxД*l WA*J m)2]I i>T]~4oZO/>s<)ͱհcrEeViof8y`>8E ǀEn~=xf0e#qQXSĔtErD}Kn9\猑ϵPÔoAAWg恬d3.޿օXa L1&ŘJ̃+l@ʓ^>I+߰D tqIaݐd 5Tr.y;xͪ-W-8LL>e|nia S[cLSY0')YH٪ /d-TVl2u(R@ٳ. 5}+vgOmW3_hLo0krx5)rH!3W u.Xaa@GVþKg~'Y9&D4zAQ)lzm=Unj@R^$R3SeTIA7dm&pEB(1ҌKét">杯ݥ_s2P* u%tbc\Qnq+xXح—8_z}6\v(#NW{!@Vj^ h9; jkN^!|N Νϟ0 D~&ʥM:bjz?+W ^]bh}0=fT&Hp^ҿ?)G;cK:$,;dׅSo?pO2ߣhG窸o9p )v=2' QXG[=R͘l '_8t>H :v.fܢzjȸFO8՟SGx?ؒ h P+6fŬT7׎أ_[/uyf(!^k*~jj& #%#0a3ITqn+lJZfƞ$AM~gG,qQEVvI],k @2JDiaSl7V:+t7Wa-W mӐ * g0^*N lĽ4iMSY=CBR|9AV@V9WN({aJ7ĀZ05̗1fӵ~{(ԯ>iCB"&n lS\Y݅^C!;Ť+fxK}u4UO=wKYw}$xS?@J5^ΉI[()EEcPuE~7 pKX?\(v=nC'жe%ˁ-eI %\1իDžTk2%i^w`x $ґO*b(JVP0a1[?QK"L>1Z%}a%O|pʐ$$9Nb#{4#nڣuu;w+oF77`HcJ/,%+v3cy< Q}ί_7]H&~BǑJm@aqQޗ#R_[ǝ$Cg֨qY | Ew<5:Aٍ6NO5tVRtODžκKiQv@w-wi˙?@"I1orY/N !# j[3z$x,}Zo\(47*IHExƗ-A/ZU:}oLzo/d-X-al|hYZqUBo (9A#|=x_AUsC;7J-ģrO|eclp?2Yl[v+CGDds5T=?z'?ңHDIHiC{pcj/x3UWGP*Ba<9ѷ ~{>P-o|lxzi z;@ChVXBh\R-XP<֪V6<ǡg-{)Q ea۪GOBV61\tC0|i` BHjebRyi+^ԠhJì~ǜψI;n Yò7՛4"x8X|Vժqz]8c:d CӋh>g%x .' n..Œ%jg$O2#̸/ jĭ ேOQi K2ZoJ, e| gNdc D+gYSg/eI6OKi^cHa!79˩k v/J'p.}a"w=mFrˏb;6pz$r0sF43j}`H8QU|[҉\k<]߃^bҔ[DBd=\}o!(s7:>C7SB>8Jw!#Cl;J<˙S.0_~Y3F*z"\;V`t#=6tc"GT#WY@Zg! L 66isԔ5|L$Wڳ: g2&YQ&GkBŒR=EiK~(?T+r=gfk9 Bg2=e7Pt?kw;]tN/-8.=ͯr 1rdbFTt!w AWv:c9 Մf(:wyO)C E$=ŗS9g.QڰvHl<%N:Xn*.L)v4=u NJIɮ"0r?4W!*^cXt,{6J83i{aŚ]^t@C^ '1{VF+@_ꨈ$ ,tUCZcs' 䶭ݾU!s{.a%.hU%B@X3`o柫yY?wgc+OژH짥&\8 ~]'[+si,*(vA5ASTb^@dp AbyQ K_~ lp;k|ցțY ;eW}`G/\[aʑeEsCjpndAS@4ԋuRk5-EP@ 9tF4R;\Se})8f2fd[XxVӕ*n9|'ϢtA\>770i(Vx=j_Yyv:mҦ6^TK>7laC'w-1VdH(Z(';2͢CkLHqy&s)E3\ x:L2U=ʎa2yu1gx385Prh0D=/6wWիxf+Ӊ!la hU7siWsofoce7䢤YQU"$2i%۟ة]戾1Ѐn$ߥ B˅ܮ3ZV5;5djϭaQ®uJUfkzL:`Ar &n~7.Xv3c3 x\60 :9pyC $ ^(Yfk[z."%t.I;}@DB LgL13Q?$0ab0v &T68' Ԏ}9}vz?AmU ͦi_9އhE$Z8?2|p()mtCU|r'qSU,dɑQ.d>)^Yݣ {a7OQBn\)MAIiݙQS. TT`;ո-K]*ȶ._kSqr t= (!4c[C//C:1M])F FA[loo iSoyQIgAF2?4GkI|i|oRjo!\MW_O)26,Wm$hүYܛsYx!׫lE f b _'i:*|-vKW2=xmv5 ieE8<}[7>c/n$y EܐjD kߓ##{~>cFg ;ς{{fZŊg'ŖU#F{3E13~̍;"bD#n6Ў,k+v+/)GIsjF`8}}tI"5Q5Hƽ2y%;~55;(QJ >fսuiaoIdIaŰrPԬ %ص69jܕʵ e͎m dd+Y]'eɶI/\ٷV¶Xv]^GC[!n|[j)@+_rC0`q]KaOucce\ YkfGVjx4"#:n/;y؂:1X.: 6t;._#Ѻ`)Jv МLl;Vx[?MYg볹+F, Obа_ cX̋umC[i(űͷ_YR BU-R`kKecۂ4C.LGcqK7'a~ sB?0 G]< \!MѴS'R7I)Nr}\,op>.jdbVah}ɚu%Mu7fL4ʠliڌZxQITK>1}RFwZ#uK, CGVFqv~iؑ,zQWHWOzC$/-lFMC00ĽP? )BV޳Ƅn&ok(ckΥ0] iMEG_k!X 5UXI;}VK([rF6G5IF>rT"cw[^ƛZ \@+IE:GFڑ"kvQߊ?yZ8zKEy>bĮ:!7\T|@ CX `!c2~B.+j)";V?Û^!Sy^*nVG;5)[*Ay'dwK{Le)C_<ݿ<'Go2[T/UA5o ]hBp]=9o5X%ˉ|pP:%\5.# :MT qoG:j}@'O˗`/  :ܬgk{hXǕUs ]μ) Pg+~#$܂cv1DEYWJ3e@<]}r~g5W hGKX`OAI*b-ysA[gɦi9\i@m2zpW,R;r%=opʚ>7/7y|Z~@G`=VՁ/eUtL #Rbt!$y G֞mxH#;C5sI2to*P!U*×osZSe:65%ڳ&%M<-tG]pzxpJJ_oeg*IژXc~KS(|zHpMF`2nE}lkl ;b6t̡ĻVit02,[ZEDFc eeqɝO0b ~$|3*5)7tW{)n~nv>۳i'KV*3~{F3JgiA2WB&9grfv"9.|XU7 EMKW!'~ݟXDwU4 u|_}OikGيybTr@_2ͼ|5P^gwQ$C_kL_n,ƼdռXQu-cY D4+lp<6X*Oj},bgZEVWr8_0 Xz!Iu[v>ߍB=\- (4Gwo1A͚|l/iuiu*;5`!sXhsS2^#э>\臘_lE ]0$H.B|. I5R/kK! Z{}WJR&JұrE C>endobj 23 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 250 389 555 500 500 833 778 278 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 832 667 667 667 722 667 667 722 778 389 500 667 611 889 722 722 611 722 667 556 611 722 667 889 667 611 611 333 278 333 570 500 333 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278 556 444 667 500 444 389 348 220 348 570 600 500 500 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 389 500 500 500 500 220 500 333 747 266 500 606 606 747 333 400 570 300 300 333 576 500 250 333 300 300 500 750 750 750 500 667 667 667 667 667 667 944 667 667 667 667 667 389 389 389 389 722 722 722 722 722 722 722 570 722 722 722 722 722 611 611 500 500 500 500 500 500 500 722 444 444 444 444 444 278 278 278 278 500 556 500 500 500 500 500 570 500 556 556 556 556 444 500 444]endobj 24 0 obj<>stream xcpm7vvlv:mtl۶tl;ۙs0ufaW]oymɈLL\6n.Ɔ+ )7@ jj `f0qqqD<,-\JT44MG`oMgKs;XQba 01+hJI(%TvN6W#Kc) M03'4go'gSco5ScSXS'[Kg3`dh{?|; d-aSwvq6vtp|[U..vf;%M]7?0\CK;g7`d 0tv1 d/7\-Z77?8Q l[∭x^3LFX[ӛa A/-}rM3!:ya!wUCM@OF,;jOxM1?4g /\\hKTK m! ~ic猝B-ݍy2)]~yapv7hp28ýGY%|9})bjWXS)%Otz1^m%]c }N^k=d/n)'@H@&1H&$h dV}1hܭVOk@}r!r˳xɽgU6)̍Ac%=Vu S˂9}Aa /~+Z雀\!mcz)kFˮ[Ogܪ79P8ׂr+"I10+IHZ? MPv嬤w;!ϥt^"uJ@WimU>RR`\e]0Kˀ?J|*f z)҂љq@y]-LJlSB'ĆŽj9aϸPD0w3ƦK)=i]^TNʥ)7B%QbpuY#)'#MeNI!Z eBCH1݂O8D%[\hVș=)"bB{rTPOS۪썋C5AUé`#9cI2 &ߗl>5JM*x\U ZM.4,;zlS"s1O2)چ'&<]B(yh멂ogXyK'F @!tpkJ JS' n#x…K@gxSn$f(^&d(dz3 4-f( <{_o2G<:WmJy?ȍ(p!7˻ˡx xŊmLpS|N0C+#Ґ`3c&k:l*'.tl<:;|VwNUCP!ĩ |.#G!7GKF6#w񽲁tclWZz1ZJp]$ ʭ/Rss +o}|fzʨ s #+O׆RS}# ҡ1Gy\oT0di9a/uŚϗ-A$< {Uv5hqp.€ I.+e@Y#M|BJړ\Hr/"Or:ͳ`ج,^fn3K_1^*˻6(t/#9`7?t*׭(QmF_EYnùq6=_Sw<V8ߙ9;Avѡ8$x(xBct}*|Ẅ́HbR,E"&U[~þKS:dޚ K#ɍ뒽mKޤgM5ٿ+=è}x: 8TJGdIErf"p"8o[%bNU'к&?3k,_5*W%Z U2y/N5Ks5KE|1 ofőtgDa`~wP"HۏSLچO'L?l`m+h\Ao#<*Csx{^M;@vI~ci+Uo'&Lh`*ߍ-ɜ$Yhߟ ^J5:Bxڨr3'^@ ^sa556W&鞎[:kTD?֖L3' .aaG9^1{x7%\ NnV$g~/oA 6T쵋H qSr"O_A !2UNbn j(ӓ608փX"seJr s;Nf -u=G[̒@5U{2 Dal ߒ$)gp[2ܵ:Jݺ&4G GnUV LfMxWB~݂97?E|M T3 E׹/maٌ zK=aPcB1,BЛ΁g?H~˚ؒji2Xqjنړ,"WFO:D8;Cktzڄ~eM倔{!h5i] Jl^{lـ.~/3ιwڛDU$c1Oɼ8j#` ޓc@˹MN\f1(3Oj7{6(lOL )-T>sp /<׷9z }B? 'վ΀Q)@Ֆdu@[6#pHPgbN^prWLXF[ XEv-^O8=fjj>S :w?(vx Y\\^ d`޶/s%x8?I4Hv8\Prhx-2'f[FʓIl[K)ܶpK|$Bi,n)Z)3׿Ti!FzM4՘yO v& zz /1>)AX'Dh Ųڛ xv+|\ ͅMt3E^ѣQFS}| u|\H& Y_[wECw]\IJ4&v8E KgWEtiHt 9j{! 5O*jb]Ef).~e`nH^X V &sʼ3ALý"|Eid L.R y_$K%N C4sl Ƚr_EDU2·=W61K[K9S T"FO`ǣq6+`UH1}..=!^ǺqMK ocEecI ӗ|LXB P\~9~wKAM780xrb;`LtfOJϮF Nu4N8 `a숸y FVT_ ,~4PIrAoIrzH+LV%K3vu\E8n۰:Yr8-M,g9{Ͱb~t1;hi݆.,COL խ5XIZsq %)ow@PS5~a{L@jo܉@s7g__7^/_l@0bTAA[\q>q51Qb-\_Fn\G̮ 68:XP̍؟18מC*S[qQ>=4TuF&Ӄ#ü5f_V m@nbzȦ$'~qеJ\S[fׅ+uH?Y @H_f :(lN9h ; ;hޞ㓋y?qo?{xah9CZʕ=H)$<0*kK'*k WY)IZ84i N.1!Q_Bf{b5/I(ӕ&aU :cէ5mYa cq}#*m}߆2C\ |?ތi{1sȟǵRqC3L⋻SʆCG5U(>Ɠ\iZ1 UGȼp$ൈ YfY]7zxXu gäI/_Bi.ܫ)A7ޮ~ᯨEm#yZ͓ 3:\Z^=khڃz'#ةsIȥzFNm׾QJb-k`B7vBH=sc9` gt;oK0FAY~(p2wVpנ8rS/|AYGyO=|qU$͌7M*'?iÂ./#21yu.('"i-6[ *,WHi ?iIgљJ!T \fjܭY,Agĩ^WhCuՋatd/A:nXmvM:~f6G1:u_$ ,˞*1yhƣ;<7&.4Вn`X0tί?r;޳m67>$x1Rg3\u̧߅;c3`ҁKHH8^v`xUY|K,Vڱ] 2&%HLD:b爈mmfr{=zw8M~)+HiqnރͺYǐ9])L'\<5XUo5/E̬Kwx6Z86h֓dW{[MwaA5Y5s?~~Otea@S.Biv k%HޭNGUb[sX]akVE^+蠺85`^ۊŵK7BْO#>I)q_;^=򰣉vD/BhFB輶2e –%TVфg޼L!wB҉j.+m諣`zsr U-sr jNp7 ͓u7 J*]HQ:ӯ?}bNCgϪSÕGUͽ[03ldc2scZ2W7oAn *~51i}( BWC-_&OPXL)`6QJt9v"U%L$R~^{8J%ʧ5aqeP/Q 8koGYv Z]IA1dmcTgͰ@O OP1vc`BLPȉ/L hlR1(yɳy4x^!kdG6OL`#]^e8 ނ5m1=!jFA7) ;}" XY9-xhڨopzH/tF38NI _ -ye^:*_.ܒ$?Д\XZyYX1~ =у"4n1ļ/՚Y:=zZ1aY*D(=bVp+t;\ohnE`}A$eB&j4!U/(S& @${M7WΤnړԁEU+?R #KwUor^ye$Prl%Խ)t:0*7s++Im-7kL|(E/ElV_g/0O-N AK[d(#X gELRߐ޶|cy bJ=*VUo!g2[qꖔ+NZ!{@@ǻbQߪloޛP_/oiK.M.4R:D1L9Rh^/=w?qޛ !klvڶ4@ ,[ih>BOxôֶ@R_E5=<^L2BC>ur5pMs<%<}*}oR%/RRv`Z_N#(7p(F;D9_ڊZp;+Lzd!1?J,XsHՃqHFT,;~4ܘ/n0%Y# =ȳ .Sj & p'B5̈́=33jrU/R9j~U"e~{@-_ND--a+:,OjXcx"D+K/;x/ՖKݡf(KZAu> AvfbU6A}GqJj. j\X^ƼG?㢙MqoWoj]G@>)0Bs*JmHbٻF> `A%mqŒ` 6jTSk^" I-!U}3) 09^k8)f3ms79žKz$ܐS|r"4_Tu$vQ',D}Ca Ή<ʷB&Ǿw&t>­"t yvyb"3{_>Ly^9;6]/Gvʕբ|o(*Kz^R1DB, vn`(~`Q'([}Ǥ?a ď܈!~ (^tdV%tSbx{r8T7ۉmߩK=4F x*Z,1ɖ˝/׏E;4\Xs>~yɾƄh ԖDP-OȀݤ-4U6:x 鸏x9^K䩪9 2*:aORxB$:miN'"Ӳ@f2wV!pIc6v4 S=>D/޵׮+ Zr~-?o@5bT|hgj/NHd-&o#P +aSip1۾|m9B v/q5}ܼ&$C4GCCYM&uقÊNs g E&}v䭾*_$r%Q&Ě$ ]!#t9Rgzϐ&8Ձ`n`J*uT9ߘ8-W$mK8h_#)yl"4YTIiwn3ى@)k7ktHE\_֘UQfD0 9uvd$+E<% 1e8 eQx6iݽd%(YHr4a'l"WMF2q*E< Gv;.ɛjTp5ʐ<}vr/ M PY-ЎZ-N`k̖wu@sf6Cq)UߧH;ܵ<;KsD**~BP-x?l'UQ8p4="wyGz^SPrBBR F_jx6>mTzfˆ%ԩrEs U$o9p,!gdcjLMw!-{wTEڰn#-q_JMHlÎRfv~.&Ǭ~j$͠Bo ĉtV3Qk@6KkU.1\ ˘k!TȍCD7܈vm#;c/7i?TΊ>8:rJXpL]LySR\a( tKLl7ϝp[|e fЏ]#^!32Br3{e!(QȘX燌*$ ZqKQ#}z1 \m*9CS>D%QIX? R@^+2 FL'w0Ѓ\A\|e1Ѹ_Fq޳h%`[uq'G k:m+Zj,-H ϭA63Ԫ\ʯ ^-Y~9b@!Z:(ToAͿinrP18-`0( D G<张v9?%e\8..|?ݯAˋ"w4FmyMO+BIe~lAڒ%W?~>vjɴ{b`9Q!#"&n<}DEr0Vp|cBy0ߴ̮{k<">烶EV7Z;,-\<}8[ph2kEmnz4-q Ĕaa-*jmuEI#9߷LwG2/D.Vs}+53qY1&UAD1 n`z yꛨ%lEEЪ=SZaB4͎"ShkL=]Xukiqd Q?(R9FtyӭH]Tg 絟*w{64A \Me`AdD\mylc#UAa|*n(,HG/KGP ]bZ25K/8Ht2 >?3jR%o4lJ},\{MBb9>pth]7,'fZʅvI-+}2 פaj[lk{ '(~}Iv͗g дd&rE7Q7.Y5◑=Ifnol)zB?-0T^N@罶ܐnN[3:\ȓ5zi vr-ޖ OdIFRi[pTɵ5U$ÏqF4Ph|(nڃ^(3YפfeSI'++ɾήS h. j'0Hs>گY߻Pa[#\־"ݽp ¿ d &Y_#C{qD"@}ѿE 4,:׏ƬM%`KC/]7R uVau O&Fc,bU `()]'k (-}? rm? mN>>@0 tP[A"V;zuM9" [PgsN+9k%F\mP|A!"\fWv5$-go2b0 Q~Ipᐰ5\RdqZ|ᖀ0 q`X;C(KPr 7"zcHK_pշt\'[?Ɠ@ō!$d}l-2c,qF8ٝ~M@͝' vC>gAh+LV ̩?sZ3rGNv΅C=Qvc!$" I?o]n{g%*Tݵa"Ihɳ *{nA6߿ 5Gc%?l`dt=L&gdaJˬO? 8* h-gh&fF)FZWm*jXÑ)cq͚Zj9LɪV(ļ ӤpFo@Vjz=d|6g Z4:q7RZ#& . T}ֻ_lP_<*4IC5*mw(r,QThk2"T?Vk3o0il5 *h:*+R`BdT١ٽO h!O\x:۴+CO/ݵN6AoHS+_/I׶aT49tw${MjKB\W//K8R [qOk#>>'o&,6h~JݩnD[/ O_pBV XDx殭"XɛC/сla^V_#|AV.af|LmXOk.n*JƑk jL !1VLMNXኅ 57.Njy6;#ANqm/9T.]i/ϴ8T?"%sO/fӣWBvq81ܣ]6CIr M9 Q,&J1~J^9_UFx :=]Bx5 r쾕 ({X$IֳpɃ:կڝqSQ9sue*^ J3T_`W_;(@UV zե%iYR#;s܏`[{f,'sU1/% gP2tTDhܟ M@m*8æ3 5,|L67sn+yg 3*~~d5QlRzI+~?D8Qa#-^dwG3h> /9زm!C+#<Bnȧì^c; f\`L"DG3+'j \Χi(bYlv,Ƌ@n4IHM=1Z-HNayq^>饪"B`?_arH1ؐ"b] D qp-1j#-a&1uU8v= /uٹh䚹 +eփ|zW˄y@/֭E Z ,7:޵r0f~*:3<}.h/٦@qőP{2|TV$,;j/,l+l3Gt]/sm kC" pt?GFf0$ muJмzҭJj0bƊ\Y q2wg9@ƿxBeCw=T;I+p I  YX5p`v/L@0Wm"zB.;Wxu)TT{G}c~ 8%)ɓ,KY]k̴q86}i ǁSS)%\?wIFnuzcX.S׮#9>I1p$wWe6[_e̼.$23M}L$SӮ"6b >ɦYw7H᥎|QdNS.r`Jw\Eix !۲ZfA).L3DaPc:)Q km+.ʮ阉&gZb.~3=^Di Zʄ"0tro++S}wc cWlvܻϤV/e‰ A=Kn7+@!!RB'Fm:!CB=lZZƒt0:f @c,90-];~<*& H? UI'OSv Aff`2U*jߨ]Fx(F#'F8 A; 0S3ȱ@'7?s|&TN\RfU mȯ+,,UT []a,Dv棺<ƈ3M(UfC߸Jl IkѨX]Rap|Պ-۠3y;rC\:@W͔lpWNM#M#[_K#+F%i{/&كEUAB>T^yv4eyBO~&Mr:EI[Q-3Y,ؾo /pN nh ?늺T?oj9}!j,Q29k^'vsQ^[Ӌ.dJzoUı>Z l:΀eT=~ny.xL\6 (.y??='A욾. â43S]Cxۙ.{{)ow*}eSG=vkd/Ʈ{ӔD}zԿ(šW{[\q*?Ň4a6+B>SLJizpQ< T9)vr-# $MZH%;zaa%yj?+]4(.&<岯 (~Dq>Hduij|%T+QGvLew[mQ:uy][]@aŰ n i(% .3( -1ZGm.+XP3mKg?zR-z"V|_f\v*Bf69 ;{k覊1v+p',m4ߺ`M f)o0^0A' zU-岙{IӮb(ԅ\mR9Tz({\eޯ>W3XsV~g*[EʈzP}ũNH>*x4̚\2tuRX:\-b5 %׼"Оze}q6g3nEDqIM {yPB=lF2Ƒ_~GICVn8Y[;"zDdoaAq˭$g~`=fZ"HH;4k4cL t8LfYc@G/t;w&ib).gUXJ1!~2Q`^y EZd=뭵cQmj(,W 3w}QpTmLY۟2e-05t,bm+{S(RA9t^1&Ng.`Gcη7Mӽ,j"g46}?ɸx~_CPtNK݌H뱄K]mXn7{2NniУHUc%ry0(?=XR5nN9 _$LxqS횒A-I84K6N[r^X!9Q|赚ʃR3@ ȇT2Va'(+?Lu.r7/(CPԏ=o_[]dOS3>o mA KR#9TPf7]-^TMߙ_*v;u.Z03E MƧ4}ڧ)~>v<ؗF3]AZ*m\6L1]]⮾tT7a"x4劌73b.d7ΏU/͵tؘl 8W'OVDgdнV9@B^C!yt):Vc-®&~d˺IzP\v14(D8`=u2Yi0ѫ2jX#=̄q Aq%yE9@\6餋犅̠Tȫ{_dЌPm bft2-Ma!SKH76 Ĭ-4,TK& 2Z_΋ CDL??M!7;o\o0Ldd Ny f )M8_2[Ȼ짐 34L1o! Pg{GD4L2>Ol1Oр?dTiGk2%SLX7P-hchB=F:bƓCeh8|cPwQD7 WC^޻x@`TQt}ЄKY!;jrKod0R.`4|JK5Oeikm{,;BU, Yl j|i h:xln8O3_Q Uʋv "^>O :7]=]S\5繍נp`,;vy[TZbU'Ӑ,+#1&6;- VTv^4HaQB1jzF˩rD { bM+TO|?AݗpZLJE* G&6t4UnbfjtYOuQ6ٹp';\2ikm(C?7d`T&  Nf9e{>X4xpxt-VHH`Il8  QJf'vc9YdpUE@YGa/,m:W% (5O|rkxb6E1OdЬa(Lǣ4Rʛ<͞s1c;Z$3i[Aޢ 7*΁Mς?k'0:_m"0@ڧM]N(̣Jџ[\7T|:C|n+uFgC"6swW0.ϹrR  q wBd;b­*~+D7*Z/C,'^' +[xaQn;|*S(3 dWVZB+ T2M=g"uت1NXVkƩN/ź\1HYҦB0mAcTzM D|n KH!E_<_"!RTe3xbtݸ V=x.)A6Ow(Û?/<&$ d/Ȯ[Y;oqy`K 1&=`NS {MC~1KF*^!\P^AkA ၴ,7{vRN*WݾVVUœ+ }npj1ts>3|v_6Ft-9V\{R#z7Rs5?@sTUI;7&WPs*E$7syvs0o}<gHmI3G%ʼB t5|;#)*!{ﮛSnSXz < K\~_h*2xdd`2.ل*WGw :" :ϏJBb`?{šuvZqS&\`ӻkfXbK,Xrׁ-RY~Z}-hGd*S4^;7ap|Cۓf.d;dkjkE}`a:ၮ I3PCmeU*Ovj_ ~;u0)cnKr9wxWOx(<~}a րRE贆.{T b1s%OR#J7~0{5m?">O# U|0R#8krw+z qfPR!i6-B!n|)׻zyG)km3 {뼞qra^8h⹿@nKWopUEU'Pj2:vB {U{XfYqs&Uĩf{v(/cMݒt w*MQۻbܶYC4ϔ6@L윰)DئPÔUYcͅmg~ȧxsygBȔ. Q̵<n0j{Y0a?:ƕ'J9 .KTxuOq[tؐYգ'G2aHKl"${yzF_۸]~DdsWOJn+g EA7{yU#, >+'&Յp¹}oUlMhwU}C*svR8>MY6ζpo8g6qx 6feһLmz'\_z1$XB,<`N?⸣1:VO:M;ʼnǼ~=ɗ[<6əoF%Sc>€V砄g/0"lwx> {BwCkԣ>S$Vh0)[r 6)Io;'wz6%` P}V`mֹZuMj򚺺/U%ôFWF=>?e}P3In9ZG s.]1)M\я%>+TEw/gF%cDTL Dj>_SqW!%-thsN`|FĿr{ Tg|U!`5=mQΚko;^D3V'^70<W^GfFVGڑp5Gs$R:1*t%ʐVu.qC|%+E|qLU :d,O[Kof̣=CP,!#FXqxz\<3B/͉3vqRٶ-D@w0TR miBRW0x6/#YX! %yrR/-ִh`T-DB",G6V~{­0ݺŵ^%(,}W;~W*GjY [4Q&MSHB d)m4_>Vgs` ):q|x詮D[L~ ê}A==|kelХߎ/fؼ;hm'D?R.hP/ZJ-+ C1.jad/S͡V)pQ\V&@@c2$ᚠVc\7^غMjd]ڱV(,Ukug# X1f?w}F3N)7J2Q0$ VV7͝C1V'P@KzEE˅8rUBʁ %w _QHw/Y!<_ܡڑ//.)ZxX]}ئ7c 9?'hD/] lV[R\EQ3 ǁ>υ<¾ݤ.a%,nf K1䮏Bu=u*:>$w8.,gؓ2.D^a?ˎx^8&GÝ[~871hHv@"\6A=r|UIp/^k)y8S- Ȝo{$C>]l }i3NYJށ|01b:Ɲ=?{捴8_W>$.leGqlE-]_(+#ĐFC mpa[Y~I2F;8)tKތ9c 4:_ ZfY9:?g\" ^8<7YJf*l|ZyGaS/dZU_4^G3? GҦI-֐:E~<,]ZUnM}I*e2E0fg[MuosS40b (Ѝ,iÈ0-C&ԝ(@ q` FU\jtNMĦrcQ]2 z0S:/߆0UXiB<7(Z=vĎYmP R( V=` GQDv.Kfq=A0?ׅVVO1Τ5E9u5.2tu\3LpM1c+˩:'o4l=.@d5`]ZZc7dmԷ7nbJi,+{ٵLq+~ϫkZYߴ6KN-ʞW~ɆC~ j2Ɉi)E! wԍ CiVȺ?sr_uw$n3L;@VE `r~jIn|w: ` iK{%Jø0E}1:5^{bTUv:C}VRYJlÿ́sJQ OEjz{Zx"lj58PE93vZhi:l=B2ceO2P0%M^nRc!&np]h\Evg uw/F##C[eE$dPVRJ4UD &KTt3˲IRj!u踯 = d?i@bDB'8?*UͰNPvYX8jMb.P܆&wJL), LKϙ݅Py5yQEr׆ijر) CT)nױzY۵754f?lDB7z4)龻BpF<쵻[r Fr j# C75&U |=z4 )NKCM/c<~Q8eZS`[8 BWj`hfK^ďz¡a DLou JPA-UJ`+aEȵKln@3ָ,kH` [Ԡf"AoeytExxFz_G{xQr?/b1lloJwf ihkYiCOG̾˭pn#6Q! Z/~j,ĶB`WwzM>k̰@EdpV崙Xk*Zw6DH0Cw A^ zd$/_9SL]9!ifP(/Ɖ\(ƺbf@qO6TzVXX:ÊPNPm }(ʢQ,aIX^P9 ٢63n$Pwz>#B$nd3*]|rB64ъ(A=i>`DzvWc<,A̩cɰײwOigKp70P}6% ,k_c`ڽwֈxc4mmiH(VPL ^8gmy]J5tr qi$}2ućzZ csϭZ^XԦ;Tat|Ddx/5cA#zw5 #ɮstytsvmLf5}|xűfǹ.\$ 7א: )"uugxpfb(:kN/IXhL5Gf1-z9Y Vs mpCUOlzg{Q9SN8;u|Y/*@όgJ!3v-#c Eʖi:e%X9dm?%#(18xtWm&)ڿSq{Ue{ZF冰Lz`߉mw½"[T>{! /MZ[.$roS5I\dH>'î/c{NUt?%8&!ݼޓrMcܼY(h@:|ߐ's韉ZT-xCޟ)eqozBi.cynu:c1Wn_  ; hûmD,T[:S$;VK2J01Aewt6|MASHHn[eLh~;6LpDO60%'@ <`G/eIg^%NdmF=.Hw,yQ8+q/;4P)ABt„]ڪhhADh][`b-Vϳ^ݏLdԹHP )P k^r{_FQ"nyStĞ_` FhnWAD31S XGQwn#]R5hqTmB(ڑv|Q@9͋D9\:yV[-,K .2ӁaȱUPOU$8|aæ񮔉*/P:!nI0CxY3J!^m(7Q׀ N&= #LX"%qUi MctiR{'NuQ&ŽyV)§xge/nnwMI``r+"l 7nKiJS#Q:Ej,.}ѧ*5HL 2{jMgsirHvaq[y!nnkslLtV6494ZZىFKR+rĥf.e:R|>K^h^>ѫ=9pv#5ԟq=Kg}%HWbb)'*!r W1+Ja]Sa"ȼ!C ~ 7+a p;xݴ#/#]^Ax݇We*J!OG;B @scħs6><| uig%/d܊{1kݡ ( a#K^ҜF%jx(lG+CH#ɑ%7.νw&~w+ )w"Ww:'5cc c'_G&5$E # $q;5=ψ?g;r{eLɹv_r vD,g Kxyq[+T`~EF?8=jq.ofh@wKx 7UI-12-} !CiSъW3Q"_"Z:D#~zܔ:FfO(ՏHI>ǽ0ĭmd42T)` Uv,hSZF``]8MQҟ V,reopl`}ėYs,5L*c6! huW\ ?'N'?LVXRW tQ4n8enϡaf8AcP AY5<0ON6c >]Y8 4Ԡ8B Um,0fP1 aYi;:A_2 ٮFӕXmZ6iR؅p?AO_2ŜLflڀëbI>AE,S̏0)юs'ZDaz肹ygͽ!dr*Z<ݥ !Ջ`qWnZ B5\|l5$9)2\ 6d9J?$i^(:UnPđ;l-L92  =&=aOeDa\6R} N"but4VPI\w'"DV6ԽOaWY*sb"jVP}$dQ3$Qa-EÆf#J9<}T4|e ?gxkN. rqʩKa2K?JЯv*1hS.:^wAܑ"[T¦Xː#dUyȏn9^sA#lk,Q\iRb7^/h36ƴX}6Cci{(0"^ɄfɊ`f"4/!F԰D1#fO;-^yF5k)ūfW;s a%+P#@$yݤ=Qs:jU `B8vݭ U;(U0%1ɀA2D74Rx ZA"#'HA kByeYV 41-TIG -s<q'狼ygWjA9+xZ fW2kHJ砙{\Bb\qHOδS%aݗ[!fD-"93=s(Zy % "Nn$DI}FOi'opGf;~MUDte5&(p_+aY]%v$Z0yވ%>BR2TpeS0j'g2 o\4-sX^MR[D̬yÓs\8gFҔo_u=S}c FfI6wZiXLMz)>Y9K&{NO"sݹۮ уJ0+`p/P<"@u֝7Ǜb[ dۦ-F1חMh/85HWbPc#c&MuM)6 LũC\iH)Hq+֧YcUT1M5>; vh/5i1 b{KE<\c{>zWcQ<}  dp&9Pig=ܭ-EN=ìJS:|!X:pǨ^suڏ^bu}Ѹ1̫6Bv-!2I:Fz?){@)ƋDZ[C7Ues`̣b[z `s6nfr/y9R,&%3=phdyA%uufOG<"[\?5/U ?$ =]?zĉQHh:#+Un!+VcMO| L)[*&i){C CCy$oYqGQ0L2\j$#"m1ј9A bw"`pe!h=par;95O3E<ʟOrQSo  sH}f6Og'JDL>%}DkG}fM?SfD. /"K=bP,%.V;+.8Zoz!']=KDԣR(' }\|^~Z9ut*p\'=<,*{x{ I(#!QfZ -=qxs͡ѡG,? gkĆŷKRGAXok.5|QlV.1ݿAd lΩ#;Ja E&:@شu G0䧖ek]챲;f&t#6B TIAiu)`Ŗ\]*hVYOB\W8<· EĄ8&:^b0u8ָJƀO80MtyuMg}& 8#Ǿ+X+ XIѽHBȀkx x!YJu Ѝލ˚!sFmp>L88%nW Dғ,@XULQbͪ4->)OY1gm?4Ԏd]\[A{ +bd0(m_~EgibK%9Ag@i[RS1hTJYHnx4O]ߚ,mpI_Dc=M˟8Q/&#N5H߿QsT6UWYV<;Sb]UEOL,g(ȋ8 ~)(Hmնp&)e5 jH޹dV%$sciDm@R2Vl˾>ܠ˙"GaƞeZBmIiPc7aΥ7b?Vi ARb$cQr6њi䥑q Θ;0u%x&`[01> p r[YyK?Xj178ߑ泦BߖzLwAL5jf5"mC:!)> 6!FJ'q@M¦Ϙo$Y$) v4#%eq"u08[H\OgeɐRe_}Oxf5M~Llu./)]Ek\h)Vo uOLOɔBTVvJ$'HOÕ:3Qm "m=7+.Q=S08ȓ{w˒幨q}.؞,o;F̾4eN&TՖ!ifv; _pN6@"dre 7->_+hnZz22WJB0_=l5)6j&3]+ m soEHb-R9}2lLt~ssR~RYy"h^io^QXLkȂv|nuNv|s%t"ijU=`3:< Jhn<1Z=8Adt!gbA#_Jpݰ8Eb[ADW ؀Y7MϪY:.1dRnm|YF ILK|׎V_JenJحIԏ/YPg &+&G܏ ><W0>śl?2Dkl1: }bbS\5BH5kH[VC}7`A@o%ї,0 ?P? ŘFPd؎K$em - mdX̬E5KqHmmq E?7ϋ}{} J{{NR?DWXDcSGZhV Z:18o/%#8{R1cR#n*:! ]q=ܣVRX kYpvkuwZF.-;cHx?v;ߥNAf^RjKC2Q7@d3e 3)?Dm"~+dqE8J8~*X/7KF ZqN7kUz8js@I_.gBQٟv&keo s BB9yGV\ŵ!$ִpyY_^CDh%oQ_'Wtr?Z*ttm;+՗rB"H/TB׏?ZGq0z&r5Ǧƽu'v,u i CXB>$unrXMu2J R:QH]ɖu+egNaF! `) (8erǫ)1 wY+ֶ(M}j+S9K6Wp&K-F>=eGfYZ=I9QllUC/u{h{f}O9/YAsb>LK63M-)7AQ5`>֙N]}(:"rW0O J\:n9o kud OhbpI8B_jo"~P@'t[D*܉}U" l5Ԍ68¿4j :p{{ Sƌ3@+ Iո~]L,~ v\ GU[%o>Ow Q/_orDDO_/ GFGS@n:endstream endobj 25 0 obj<>endobj 26 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 278 278 355 556 556 889 667 191 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 333 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 600 333 333 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 333 556 556 556 556 260 556 333 737 370 556 584 584 737 333 606 584 351 351 333 556 537 278 333 351 365 556 869 869 869 611 667 667 667 667 667 667 1000 722 667 667 667 667 278 278 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 666 666 611 556 556 556 556 556 556 889 500 556 556 556 556 278 278 278 278 556 556 556 556 556 556 556 584 611 556 556 556 556 500 555 500]endobj 27 0 obj<>stream xc|e]/[b۶ݱb۶mttlv:V8y}|:wFHQN(ngLD Z- M_46822G34&...823R: Sy'뤓-k :> ́S k @DAQSJ^@)!  .FY c `j"ٚXBNC=h`tprZ,f_9pX[+_J$lx_휜-_VEOgsCl;Y|v_&v.K?jΆNg`X8[z|Rfh/7\,lZ#K?89[{ݿ g')=Mc/fp 􉔭?&.s:+A ՗&v)WOwU#){{d)yw.6_ __?r6&B@)gï5F&,-܁&SC믱]hma ax*V_` hkoTg?_VYˡP.g{Yaa;w kY\\>;R9+gh _!kojlLzegC[//Ί PJ/[._/,J s@w1ܟe> L~mm adǥSlFǭXg[?7C\844[ڱBt DC҃ĝoު`w4FS+O?>7<4-.A4 m"Qm-y6(lβ|$6nwE^a.%9mWeX|Uj~bhvPBL/gu%>Meà exMy^f 0!>ZW*`سq3%a xJ?H]0(3.Q$6͋ZKc:c9'ITՉ~ DoyhaW1W u\JG]{P,H~13:gz\OJh6R|W0i,kyE,(7np0="Nxsz?=GޞZܳ~u=2j~$q$XiQKn-_W٭' OxE+-(+¡T8 [=$vvwXK4/x1ڋCo-gp`}_F0h{|K(&E ~d)RHN##i;#ȫ)^0-BlۧgIA"ag{םTـ0m+[FAm)y"Yj9`?:^w;C+MA_WBsRxn oI0V ͹PFy ]FS*^%Z1L:1L~DĞ|%9IJq Or)ioOv|&j-f.@!nhf虿̣ۀeYB8Jxwx|Tb«ӕ:v?]3w_cܹl&dA\RXiF(VH0`?T3q)ڏ;gY|Iyv/:ǹw,6rWx>%BNjOǠ7Oa7U̲la e/\GLuw /$g[`C;YAϪ2v4ex bMSKDoT+8.`9'l@%ZH-ܯ2L7j7lZr(kʦx{b^` 0,:MPi/T9K%Yg;E8(SiQ2Z@Vfv5FQǪR'R[Ƿaeq,_fRC}hYgKѷs{⥛,`lqR)aB^VƝ=ZQO3hI#kH`kD3;?Syvy L'8 ENhK"z'Ēf{O!Dw01 Uk̺1ۛnJT',w s CH;4fptX6aIH;.7% Ӈ4߀W{k/ONn\?r'M>N01=~DŧUm $t]ūe'.hfqxCuylt$T";$h|sZC"wSS"R<pߴ(^گq72!d{n936tqK:M&7la8hkǁX*1r-{j(Sa:8#\;By\$EyXEsT[úHQD<XLq !:&D/F*@)|!˾Πltz Otq\po p6o'B}_KPc"8(Z)'&?O eO֛s~JPKgmIp/f2G]fTU2mUrۅ$տ P>7lٱkTVM';S5 2c@/#q0.O=1X6Dfۘz\aS_E _|>a{-" * eUgB:H4y8r.vgҼq7o.k 8/C)NGS1|rX#|̦]&. $gnߩsxc qyeL*#j{Wp|DFw M1}\.å%U]?4sIЖ4 m>TգY7è$3/ֹ:;_|U՜$}-6!NnodU4JE+,5U\Jtjz+囯'O.^< _G0RAg(q[EG\ˬ"1[^jc)TF̭,NN}X(7vt,dE`a,}n_iiICfuln1ұ(h(Ρ5șv, aMr[QmePѳL)M⊿$` UuaA.jb9-ѭ4LS0 ܢfBnk|c&RAr9om*SL4(%+aory,>[[ln)Ӥ/`kRh7M@jnMUzskn]75 z/` Sh"A@4B7tAV4Y-ԡTp*-T㖪Ls#ʡ }z]7zʷ"N ҕXH%81M[VÛ~W0AlpGJ5,GNo`{XCLa,TRƴPݱd=|-`xo o ]j[ӵ(%+ IT/,)'[F{){.qѾjD؄ԌcMl{<BU i1֍u) 4h sA/8tL 9:۸yE1Y;K;POvF % 1I9 ?;^ Hx2 F]xRZd+'&c8Kފ)"cT@JADm/IirY P:*əF9-9z )8uL>gP?gj^3dke[6vjIݰҴV& CMNwl߽aDkT,&>uawf}ҔQdU%*HH C ؞N-zb/pe蹱S] ʣ%!d{U8j&jD笤#t'G| \?6-pTL8˟usL%%I& ,]O^ͱ%:ռu7An˫ݩusLBPhXUY9vqtڪ33JI-A!u'0!@5Ja UaR *N#-rCZ;l;o ,Wjzٗ)KiL\ cz";5ฺU;֎# BZd(9dAtK'h8cTG^F?XC RsO |b{dXۈJsM/7TA6 O]g픕 #ѵ32v(Ec)OEYŸ"Gm}3eϑt)i/Sq y<F+ܔvw7)L%miƇɻRB3LG (O:HX[mBޝ(vu 1_R]ZcˡM])AA%T {6.ONԽxO'r@W p:?IFRg9Gֱ vDr >nPcHv#|JaPk EaAA6oyV=lnUN3'-.mL 얽Vj":M&g.u*F6wIK[)h1" CVHG &pԟȺDB$\3A}ZbYg|Fm%ۀ͋8YU|F#}$Q9t0 Yhqu.-m/$1DwN_ŲԦG+YH;JL0)ВNX?H/OHQU|w,|Ñ=Sf`x}͏&n oܮ|TI|*isv+7UB-eK܉7 )G &^T- a-2aDhl(C@iZƜnƇ:NY/R뗑y6Ԣ*û?4&la= s(,﬍R3Ƒ|2H=˴l3+{ $/.h- X;.*uchĈTQg6ѬGo`ȇFO@V9Йw8(zy1eZN:|ZObSpJrȴ6IVQ 룤E|j!A#N4HQ5ןbA2J~KblqPMUo8_uTOc !ugnPDRЎزvZm׺X_aѱOd*MR=Sh*ܑd눳D-5bH_aDbo3jFYTa/L= ^Z݁-t'Xsr R뮅D~)(u8ů!wzT Ez**R ,*&v7kz D$"T9t c ٤eNۚiȞHg ZiᢼT6؈_LYߛڡ]%H_ rN]&qϛF=23k+›JZ+V-Iwh(ҁرya)2ZEEfV[ЇPkk\5S4j.P'Sn9Ck 3}%BE]gs|X>JQӀr=76ӌ(.HTÌy-{+m)^9utӪ= 4N |/4(5/lZ2l(L^ZغDFtcN>o`Zh[`kg-j9QZY֏a1n(Ǫ]&=#ykϯ'E#|΁}~)nwj'#Kԥ|~fYIq *y,H]k4An$i4os̡γպ P ѷ2 Ⱦ/^30z?4?i-X}/t R~AC'㣫$*ō v_ohwDgPQd.!X0f7w=9H3 ĹKNU}=7)U m#)=[=jq_$c]T QgqfN@-& Tt@EvS . %UCg uww۞x h.SoC3=9N3gCQ{'qt`H]KX'M pmb},Ě6ӨPڊ99IL?(bRL%')m(4[$cmWbEơ2@ޫ`+=πI>$F꼨Y̻3  O^t.BE2o=n.F6*CsV1#(HDLIԁ{{&JE@`*fkTjoUqsv&Y&tb{u*bܙL^slC-u^zЩqW1ib+g= JRr%/'#Z$gEKjAaGR2 ٚj܆DR5=Ihؔ9ߡh1ǃ8BEdP3={}g)$I/ M$Md!p#G*(gj(X,?F8&ql}E$rfņup2:.䮭W-ɿLJgVuEr*65_AqƩc!*?JCh5Mm @'}$],$v weSzWlbrsZg*jzYڽ ԄoQDqzYlJEýI#wNdN ˯[P"@1,?6b8FgOȣ!DVO4Ρ*t$ &^ :mĎ*1n?ZBGnM0IXNѯ—J*! {@F? &• _xV{^":j$1-,B3Aj_O Nńmyhag'Qz5\Bo8֤&,[6OVN1uAwl?X:9t#{> `O-zsnu9Af@یLDD^I\ Y=3̪ wr5e1Aw\\/a#1Nf܂{.f5kTہ n s)RGX*ioG YW9l=Eݧ؎02¼[Xǯf'"8vgpEYkҶf$ ʃt@vKI8);7#oh0 GM=QScp2r"g\*l-Lw'TĐmYؤowmE0qV#/)cC\CHmmf-?G'֓L@x)i~L('yXc 9!zo)o K141VXp^"? ˯do(iW!_FF+ Wtts~3 n6n -%/hbDD]J-쇅kiWR^Ҍ&.[r˜&:\/Fّ-p}{LցTDS[;xm ^Ӈnh zABh (CVvrc& n#O}&wXfg]xGNYy*V4p$D|POq)hg2!#b7Ȉ{I_2_b$ڲ3 hHP9X@ۢ a7Co+Q3=bff1%E=D?JܦK[UՔLw&"h +P1Kښuc %mV:@]8'4_@)yo,Slx1t\A% y$Fښ 6|~)mp䓒 Z- SK\}kɦ{{gsIq߼(%z=T|qҳ쉌[.P|?m:HIsh>w7,W ٩e4F"^0!!m-X܍.^y/thJwNvkR>b]6*(XwvOb6x$ sۊg[`!t3lH`1Ѝ@ʗ<"vci ky6m '4mɾ6/1{ڶ*"̊e&B/ eu;D=yQrkƁ=!rѸh ޒf3N@H8DfSQlR"r, yPeC]ڭ\ݔ]4\hh3;M?cIZik8Q̏5.!%)R# 6$M8>)`yn1xuŇ`B|G]Q aCvu(XD原dw"jǡ_h34(LGзb]j_C֩\X#\,I<'zeFppJ"+b;xG& MPՒ~M$:.O_߂h(]Qg`AU076fWQJnYj~|Aiy}n*a2d>R硖|=v)Y\ٽҋY&HWA7 r K7T1Y0yP2 c.;^휏ޗ,Ӕ(&ĕҙ EdgvLxiB9j]APTRO.9)pٴQZ+  =w}c w0gĸ/xbkԛL`W+bU. ksk{B^2is *(Hp#G`k,S]L̘ml,Af"-C|42EbPuBM\ґ}T8q}1Bi"&_PG/-v5+ɚZ6:^e6E϶klt32Q3qS^ 1ZA!k"ژu$Ys}.OaAXD)R $@ۿX1WmPsw㘤Wa Vu Ϊ2Nz5Yɗ{Mp.ɴoѾOXٶ@\/[z_-NhpoIs[LQY"Fӊs[ _CܒHZ2gR af3vDOnEv -iEQr3sZu2A,mr43e#Uz39h}# u2 Lpڄs@`^apl)!I* ?g1HL I{@C5@c%k"{FHQJĦ&. !L{X\a>1eE[z:\kCjT.l6SVI M m05YRqp8p#8ߦs}=q.M6cATa+E*bu2ˋcҁ.>|GdCÑK4:" E1:d:'چ!i>Xp zղv+2lzSMFoɋF@AZ"eذrI$|K4-Ћ%&T ¥U鄑W=$0m~ \m$;)akܠ<\' _9f jŎDQ>9>`5JD# |Q=xb$Aqmf qCG}F&[IcڜCAGNW Io7KP=գn|,v}{?YyjIQ\(2%'Z,,\6:݇xOeۦ!aVYƔ'˗øf!uJzİfBtn2tvx^n#kx.4(1#0&B( bBvFT(]"sDҺA$QNC}g]eCL܏tk>lGŎ} j,7_\|{q4LW_A!IKMIXk@-,u^ diBԊ3h0 #*\o7CL4yT';YhEYvJנ}.H])p#HG#A1PkIG9E9m6oʮy͊\?n8=_O̎7~œ Ju!N!֨ e7Jxʹ9V)eڬVIXMqjAna3,FS-CyQ c*YGR@7LE}wARNHb+mS^q{Ej6{,/ؾbźnxm]ZQn%?f=vtİB*zF4luN''}v4hf9Fۯ:ouFN84Ζ `91TM듼 }qvlTm1Qs֮$Q`6.SfBUꎟenC%6v{Ϫu}[(Dՠo4#5bnO-Z'V[2{Nڟ>Lw6Ը)_|")KSZ.|ɿ-!00TB*n8~[ $;,8 "'kN.Nsyd[b]9Ew0o,i^3 #P&:ˆ7CLcQ. %t٭Km'u"IHztq#|.[n5HûHaABp&>Bei/* BCd|>ӘLg'!A/*{ *7.ܚ6絀 X zatc{*A:ο RlꋫZc3]WQ$f˹#fL 5|Oݹbb6 d߉BjM M1o|+TӞ{M JĂN#xIcy|tz'+[~7;.X"(ASU`% hNLXɨf \*!gM QԀT{:!gKЙ'/osNS e>&7c)]^_!t~thjZnBsT?}K}qgŊSx7׃6( HR0E9:tEGST OE Y>.:T<ĒȧnqF>.M<3t6X#̞U?< cN$vd-j@%(Gw׋B" 7[g{|sM_vF` \7H.-_7J+rwn#<#';WMMAMgc=;ڣ8wUlnFhɥUÉ467~|Zd>\6 N$UGuSg+ރ#*sm+Zk}8ⱽMڕ =KiBF/RM˩ߙ;x>7D=,qt1(ѧݝush}57X LDUv`,x:UJIyf-&J}#NP?wU{ra@ZJ.!gJ184I:Y>tb(` TjuA95zyW> tC W$٘RgblY{-CO뤟UƑ7Nz%:Zަ@߂X2{w l3F7蠋wi!oxt^3kVцK1Jm6F)[ ~OagԼ鶚YVr1} ,'>՟`mBajǁeS!ΫBw+3*$7kd*5^aXs"vBDs,[M󶳘4e~@_B:q}Tp|GhМ$mH7oG꜎(OaGX-=}M^\ +hbu{N垃V1(љqzWB&xrneb4QNU6 {ϻ&BspJj\ 7Š^͚)tzVsC?^ q9cV ɞxQ@rV׌ʴ}x##?9 ǁ@9^hJX9@6$Pf)>]M! iYU 8>M 6?+e?%+`:fKF\_pyK{9/h=iyBT\;6^F`BC"ϒWoOGxj,{CXf8ğVAB2B}[B=˗vDF>\-4ϯ n[|Q.-VM3# O9 g- Ѽm^u_%~ 8eR3;ġ2a_<,ߟȿK/e 3{ỡk3jaJoSJ y4/tHӿK?W ]=7\%ꐬ8>D[}pgCc"_4b+TA662<v]t)ޡP rW<eUX,ߋ.t{8CI,wKyO7h1Kk@oAm%;Cٰ/쎠 )^_!O`]wP(U@ ڳN]%Ãk.A)cٍ,@՜޿V`(bﲎVjTK|41kHFcs?m>ǼNN)r08HPcNWQ(YLG` bqM$AͿ7,@ϩ-~|1dv;ٝp3?'OCQS`Sbq=OPlCF9\nNi5W%Q#Պ +M]<&([g݈LPzZ7ouzxI pOV`ճVb 0i &=d&Ƀ7 G9 =M oګ5dvݒL-c-%S&dk\D\ӆWa|*p-Bíϛ¯K 4T{UM`e.)2n1ydV_n/&7d34|:瑮5͉$Y65⍪ZzĄkXxN쉥IMLTd`"d%s!**_g%.巁1mWP\@ŘRR8!2`٦O/5řV{ Lgl>ka1gbej^ExW|ьqq9aɶdf$ wkzss,>ole2](@n:!BG(JTZӏb3R48dB֛)k2XCqLf}1G0hI MǺl-q#W:i30r')h|\D׭LA8gSA)sےIG9_6B'tz4=,| ~."HY| sH-dH]E"DkJ?|QA0&ýToVpJgVh! X\W{':kC K9;m4aQHWo?ⲯs al:)vUILx74mtVGf1PeIAeW[ g +,KϤ+ JߙV#֗% f?!Ph8<ٴl<-Wlݑ<6ap= daVQ_[l?Amv~KƢXs[e#p a11N]RJTedgzkPwևwmA@㌚iY}/qbkd6ݹOn4,Hs$QDc _g]_hiP_К&%@BehE|`_D)gdoY(Ѣw&{c7#K+ kWAuӐ02g?C !.=yJ[Wb48ߓQHizS,ImϪ\i92x"Jo> Pz Cd, ,f8>õ|1m8)zp5{ :K0Tց=D3%i5c) zKKT'V*y37a&'F&W] #}VK2N] e#B?#2]BEd-ƈyHŷdX:֡}i#a-4w-W'kmY"j8ʭTnLꖉ+%#vnu 'K`1;O2Ϥ.R4 |jГ s<s%x^ՖꑀL 9c^؝ACn>x㬣ӹsub$5l鱤Ojuu S*kfE ^DY`+.26@}n:1Hf2d6ANn7\nc,(ZPaCod Pʯ|9L>U0ٶ"Η]{ǒ Gt?JL^oye^C{}Ae]n.SDGy ȭ1Tk Sta[|,g lɻbb9)H}/",߅O&?O"eR3.KS`{ T ̭17*nl',__W.xMCpCḆEjݳ@;>PWNUL<'&>lƣHOJXY@m'LUdxsdu Ft FQI;OoPSHaB{T0To ˵,]}xd{.f]Ď+Z 3c-DM;TdgF߱a|?yaW?Vz1x_*kEL"^H).jJnLos?L%-rɣ'?jWVI/tߚ؅[ Lc-H+#)#fcljۜ &aR=ԠWwH9u|S҇ڵ$نHzbPLg)޲=?{ok0m9vxqߤ/x>(u$u.Vnnecm82:TY]*mXnۋ ~&*i@AN^8+EM hhтg 1%!VD+u&Sײ%NN2շW͊2B>ʢyҩ<{h"dNJ9}՛ɩmK*[m{ő!Ki80Oxd;;UM/Ck<7&gqz[o220R=hv@|e+&xOkU:_h&[>`N_q׉#UԸ%t o$3y,>\q5 ,U:ڌs_~!u5!KPZW k3G`E ƥ8J@`7 Ԡ1 3@)/@xÀ 2pF6aunClT_4пMlT4o+4n@.0黁iݳ!h|bS瑑 B_z]ES ,ފsTM ėFpu&J`hf+ ٿ0`Tb5CuƌY"Gc؊grMݰ[=]χ'C,Et ~Ъ99/'D6wjB3]fHN\Ú&- ܠm^+%T)hI8?wɩiDEBC*h󸏵𛞢>:%&_Z#TyL@!U錷 @Mޠe҄)°&٘ysS(NоQ_>&NVd04󔇺*"-OPbsM!ȰDޮ<=7P!w{m&G^.u͙j, nQ]1&g mpn_1h%jK_Zv+ (E5+ŔlyKʐgܮZ%v9afoΜ+h7|gnrH4:vX)5s͗O$5UJZ]Pmws->()8 fV\Xls'%8z-<2ѧMԖ⫿nlbE:1~qR\lii-.{tƳMk[TA.+цzI5ޞ-_=Hq/ @ =zkf0XuLT"AەXO| fg"O^U?\jvȖ׹ I8)[%=]tǎ)H})I$㬸'?b'XE M'+9LauGX~4lMK;YZGjpѹ2f8Pl7/ufK `]̬vU#OZY=tIV'HK.hfzk.k=D ɼǖln |n +D՚:&]㕰dCg h13vZ{+ٷB@D6.NSPunCQHb58L5DT.YjNK,N$C!,i}c ,)PyC)^+Qm ۜ{eQm#$?9wTo7duT=e meBiLvm9Ni+ڱW |X]>`Oj0Z& /?L>;i3[lまYjVE~_DSj_ϗ~I!m~ψ)Zqxf $RK2M9Hmus`QSw,ɲ<4Lxd,/GfYI17C)a &lk /ފpLB֎?) j73poCɻ) ag䘾m.UYܮ]U~#sSF~t22ET!(F wTZ -,T w~vKtvJ=9S2u;y=lWy*L}CO)Ӛ" h6k@p@!+_?ih+3J$$9aLJ:zt0=7?UlMmP(J9"uT'Cj PLG:aBD} *5 :t.m3vَ]*Em FP]%|):?ħiC Ow-!#f5CYk3Ջ`yOv>WBQ*{|RC Z'I隥+ك6b2i+}*? hF^FCRcݒd3ܬu\77qP%ːņaK8ғXm m ~ Z_5vl\ 65B`xb3{u3 E_Hr/nRjнG! žLCQi3 @rXQ_`F7Rzҋ `:ō,'{b3GUa "Pk:zv%v(*X"iXK%C;lƷ(:܂,qӈGWk0;WsžOC*dzڔ!֔рg);ʼ6Ϛw=ci 4#"9+41P",o^ɱ.w:HlQIdGn<[7ͪkyܒ0?<Y&5[.ẹ*~]C~p&Nrs5eo{mN\<ll⼣w?rwSdm!! K;Y,B<e okK3;_+ioχ1OrTWuLÍ9a@X%H31+V @PDW;wP0&53%Ot-275EL4C~;s.,5b7@f  $Y)k֚RpGji|Z(n}Ă.Tb|Qzeo(G|fs6=S布XJG08%:iwL:čR]}~AiH^SG>UT;^GQ #kq!!b'‘hB3䃏ui%[2Q=waab?7M^ W,Bsxi}+ 7#ȑK">MIRY#tu&'fXAۓj-L+{b+;:9:~֕6G袺v~ӼTB/;ɮVIքycto#n _!LED%UC0MO/00٫VǸar.{co W3(8&]ثstq,܈c5 }g(`|bLHq;ĊY Dn(|œgF!ـz뮁ΩX K;mD?-Wc4ղ@%`D6݌ߣDKvFv^6v&xS]/-#l#N\WN *@Yg|Hȴ eO%,… ^>K81?pN-Wò {le#2Vk (1gxj {s (\C1aem~=җ;>}DO"2T[JO ޑ " >y .=h0ҹ*"5؀Ar_ḀD=eϪ-NADe;q4~!6QcyfeO{;OMw-=r؋+J嵄KE3}R0Р9K6k[y7E2NQN/iy7tًa<).^3X2zX0iΥhukWlNb~*LpRImGs- |ۘ>@jtf]&TۥNЊ-#u`s i(6zBhT B؁ P^YY|һNa*DlY)N9kX74!f V@`8$#"ťGFիv괜jcJ(b㠾)#b+;B-]ϖDƏ#L.zk߮RCR_Yȝ޵*4ǿ钛VXoz=gZZn$#B'ǀ۲\/'ff?7#̣BNB5PB"zM C\ ?yw Lilͧ[CLȮד7=~X$G|fw씏\Y3cV GPA'R= =1}DL8x?b2^$G (ZҤrH*mہ#)4F,+_*VD?ANCuVBES$ n$XAԫ;1J@ia΂|:b_R'V 1*s9[ʥ eZ([vr7?LTF׶v!7Ԍc^432Ȝu?5yD -f`ҤrT?Y1\n^QFXg )pՄER Bο( "8CGӚ:픑4-Zrs9xG |E?LsB3,HH.aп>roXl>b΢nڤ~8X尲+tM%|MPĆ< {e&˚Q(P8O+G(+IγlKwKy ".|. &_zj2дuЬ; fw1 ʢnY7ĂI;ӿ#ԇq>Rjh<-&VQ£$.vc=|X4t>iG܇ ߪ֘b2O5>>ZNE圷bMl<n7Q41ֶ3*'͇u-l_Q|d[!W}7vZ6|$$djQSVj8Kx O2U,|Uҍ f%0Cn 89^.eߦeU m<_ t-s5{XXlہoSMY)y%?edVwJf4)fo̙qWaB}BўcHND PI3Vi?>U6%'7îf}#|&4Lb Jhxԡ]3c>a٣C X'!wE"żonctOK,K>lc]?X+)L Q0P\"!Le+ɑ{ [uEqTk1ѱ?e?އ~^s!Fk N8&~V9n7P:|t;Q 44=aOnCޖe?ۏ1;2 oMf3ceqEf ABFi!Y꣐\XlѨ]~H|]x [۴6c ӝc[Oba1\=MH: ׃XxnQsE^&3*4+Տ-w&XsA~%)U(#,LG2@%o[3v AFnWV*AgXώ&9]ޢȈ'CQ5xhdz80t )f8>x+k|jrh"4bA H/l5nSX'] |캪N!Yl7**(hŅC`cm5$ڒ/X,@pk19iy~L$qP˟3~B}UtAQzCh>sq8Dq 8m.iҖ3.^y <$>]DI +*La-՗wXiȆ;{գ_txrϹ+YΈ/1svYv Rߩ(OAg$nTOj5̦wi^,A.5 G;KN?/D#_[y2B sϭ"6NWPm|J^ΒR$gS+4=2 [)Iv /*nEB&L$v5Z&>^Svu1-4&3NֹUcE@W/<.zdQi2\12mϒt 5eթU,(ՆzofYևI#iDImoSVӒj@MSdbbV} fPIs\'/>V0|q`(j»F'DW6`13-#MBȅ9jv_}W ^Oֈ?hnu+֡】βrRUKvT~.b~g_鱪;6ȍ^ pwstf76ukd ]6lTM +R5ϛSo @D_j{լMgz2.u#}WNXVM8=D#Kq}sjk_(S'\yGߴ 9y $ȗ, cO w8ኔܜLŔBBݯ:3[՚ƙ6]_;압b p- ^'V _bHӁ|A]J<`S.xG VRs8ygpV.Ơ_C< 'b}Y]endstream endobj 28 0 obj<>endobj 29 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 278 333 474 556 556 889 722 238 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 333 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389 584 600 500 500 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 333 556 556 556 556 280 556 333 737 370 556 584 584 737 333 606 584 351 351 333 611 556 278 333 351 365 556 869 869 869 611 722 722 722 722 722 722 1000 722 667 667 667 667 278 278 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667 667 611 556 556 556 556 556 556 889 556 556 556 556 556 278 278 278 278 611 611 611 611 611 611 611 584 611 611 611 611 611 556 611 556]endobj 30 0 obj<>stream xw4]6GQ]F/!`h5%D]D QD[{{{gks/jhsI[- p {hwOLL29 ɚ#!@:He<P[$HWK F# @a6J!m! k$PPI]Ī R s \ l k8@p 70 A<,!NW.Nuq~A]@6sbBAPn ℀#LtD@ `V Yp"m͑Ws@7n [:B`H U4\@H`, +'07  ؘ# ..@ Uv~zNNކ/(`͍ b\-eruAJ0>tl0`~ 0UH䯐jp`p΃pXX)0e_EzYz_\?a`p-'(2G =A JlA<08`rrEzAܫqq2&`p4_2k\-v Y}@5 x%&1w.;RjiK&1  @`9uw4GZ P;:cFF(7D˵'w;o i?pW@^ A5 P"@ _1T#~ ;!W 8B ȿÄgkk* ߠή_i \/_w k-w , :!aƵ WY@.w-0Z ~ Z'\iF' U5wf~~H4ZnPs51DZ+G V"XӈHu+Q>t \p ϣDsK{}) @ߕ?ܯ~`9B j^2s` p1p|1D>Y^ 0/@ꏂd 0rE5h\ ^*0/h? zY+ `K @SY`{`󯢾q`:6V^`0Wt@;&64]7?j @V+`>U5Z}u,|J8\|fkDO4 1J㮤O5 >AaPӕY;S5VFaq jSB^ Ɓȿ48- J~2g!>[ݯRC+(]5?;*X\ w3O^ +_ %pr#}+8+\?ֿ<6+kN+z8.0Aс];1thB@}n`*zѕrupAmQE"JkDN"+U*y-0?_;,]mpׇRb3a¹CyDjd$i)Sgp|:`Z%@̤G93btVLlQ^rp̘E-2O[Ks=ۡNpTuoِC 7"|9<},L >T [?l=E“-FntA`ۇ'#˔O #$4[(Fa$˱n}8+xɕLrYi ~Fߓ"ASPSB!O߰S=sK\NM+3Ւq6ӯC`hdmDd*C.r"3%TpT'eA\1:R{TK~VF!# jUho?JJW?>}}*z@4K)v:,~͊ +b!ew F}ِ%NEbG@W]R52͑.xvx2^lf Xำom> y6'1߃$f.RnqYy\4GߔAĪ-yX0ZZ?irRNs e9 :nl~qc3bs^md(=@pCiꡀʅO,JݤA~3iYbL8~gCX*pѨQa8tʽmm\A$-Z,*fոQEn[{%XfЂon K;ʁV̳<*8M1.ub/ 0O|^˧pyW&XQ֔%3$~fؚ\-}pk,O[ˍ`1-<:RϪ*RXapL UQ Jחiռ J_Oң6F9c0zC~鎜EˆCR8fcq.QZF|zo,j{{.TYoQh}]{&&mK 2oM(||Zo:LZm\A=6/,@u#ޘ?wg,@~C8HxmUi|xP6#:yz<\޶ pLð!,+tw.bGN bAIP4 |irJtn {35VQ._"n&/5b[JV-u&5h 0"Syؘt="h#ȥΦ7pm@Yv{:GLprJ1\:t`fOP 70GuxB 'o6FNH)ʹ1}Ls_\#f0}=be*hkg~]_~ԙ~D\5w|‘AbN|#62ES~uN3+DYnS],,Qg?~axצ{*62}Cl.чc? c.ubi uޣz3PYݍ%l˥em 7D;o)9~ޞqsMO):z@1:ٴUF.S=jCY2QX/tJQi"MR1.jRդ_:5Tmt d>ݣ۩DB1vdX~g WxOD͸(^&1&;O1h{ZpM:ۆLW ^FH݄!]~]6ЌשZxo+]}6.BOnMIBzO|XOMr"[{Zk|icGkҝɉ{/@ Ui ͚;ѕHOaTÖ?Q7ك빤(٤ {dkIOub']vjifoⲎ!VY.7QCW1G4<`;bFnD"SIQ{SyaRJ_3F?mzmeĘ'HleN2EnsQӝE,E#YS1j(g٧M?erdDxxBmmtB~ ^qr1$A|BY#1%vBu;a߽ϥ6ֺHaTp3A)Z}4Ru4r`ltf1Eak<^~5hQB^Xrmjmp)N5XyGAJQ5vipTz/~t{o%bՎLme_S(bم߱xoA1$+9n۽Bö^[J7#)89ܳ=y-2BIBGԫ]& Kޛ{~v_h䋃 : w^eyxM1is6^ k!ik|AlQ|DmxOg+޲P\zLr4|D'Ė@CAm7]TSYѐ$]P>VbaweRF8Vܢ+KIȌ֙KeIcyumS_i݌%:c?]AbW{X/ΘF £n »'虺UhBR`y|ɐ /Ʒz5DŽj'ϰۼֽ]x{*=*Ƕ´ZP=%<LwNLVF{ȵ }Qs M9t~T`ٰbd;P _G.tL^bnbϲdQyV ߃Zn8Sq( &ILt}.?E ~?7^n=Mhg قwѠ7O;d k-#QKK:δ00QիP)|[|cqzz=ڴv1Xő͐Uh\6LrcDkg}{ol) É'đcWT:Q/SN|"9?y_B-UewHuYy'1w_vBB#.FΗ^'ZDq3t,]XU>yCP*4:ˢnq˵}Z 0B=pqVhxA1dѴ>F͓|kyG YÍ`̳ŕxYAێj?ֵ=Hl6:lI4볺|G#f įhs kϯY[Q>H*˱G^4ym=^iy=-jV\T})ز `X۹lDe-dGY0QQQp]RL$t9g'ݓ,GڌI8ߏK-7seTMze@i^-6h#qSV2^G1~Jjz BM(, +\N°I1lM~ scѻ1ɜ4?|Ydז0n:0)7yM,ضfCm CDɣ?LIOߘL:EPKizela}/]ɦ.IHAb?fJ ~`kJ5&2Ĭ Q1-shMh:Vv=4|XSm+}M?σqÍfwN6h* sE_l &15֬2|_hZA ,>yN8>?+C=BGyYչf GJBUdO"Y\nm(z4f绞i}!b(fɑHZ zTQ;ۉe˃*6;xcTzt_rmGzĖSp.!,o(&;./.zLla>\ˤs#V/m9()cD+}BfM]^{>k 0cF^}Cg5q6s,Zۉ鋜@hd4+ŧ1瘋<Ӛ^x9BZ**-HCAC|)ĝ}yR-687Dc>?(%mq_>Վ)~ Y9Fe$m]-.tC<i>6.h6P~,"f񥝏] A3#V(YP)~׌,F8&F2STx0&q GR3|hVݯf>i+ =/E%vu|5U^~$R=j"BT-jUxKHǏPܗfFfiL0Xz.qXj[e8 SO;|ٖ~lon @u)*l-9e=[E$KѤU "cE13c( `aJ)JBn.Bk4/q3t]9+8~{w4Fm:M%GK;tp|^`ɰ+F2ih|ԚY֊LȍWO6Cx}e ܙ 8adg[ʰ=vԱYe' `޶_f-/)&&w0e2VvP_ U7u#Z|A:||v߲x0WSy]RCr;c!4)4iR![dIxQo0HdyU6-ޮF.oLkVĄ*h]1ޢ] wcsbI5I,'7٦?GfE>\[úoJu_kT2ɷLHkM6K DE6px%YPPjbSyz QbnB[IFOs(ǝ|(Zf"}TLB1΅*Ot΀"Jq^co鹊נ70>zƎyGv3H땚'dqo>čN 3$yOm8S'0#K ҌgqD W$` \s[G8m0ӢjÉwV_gkNi&Z'm (M]b,}4vv6dMmG"V-}Gge>k@Ra᩵j_y`]S4]Ym߫sQ>ʔIӫbڲJ9PAK4c HibZb%(VJ3[|BL5}ˮHXh__}3mWh"-,4P۾x&.Q8@pFkۢ!sb=U2OGZC#zL=6|,ogV{0kmGGz5B0Ji<7|7fG+(=z>1av:QHC7*rX+;"D6HC𐓊8!$  WC(c6NOWhXu"P؅8>$-/yz?Vʠs'IVX{1)~OTʕ9yt# sڲK?ښl&.`4mO0+"Lu_7UmleR&f v^|&e5Eix@&u% UDW0d0gB|4&si|rV;y=pb)a|/_}E8FGgynx+G(f[фxK6{\aU Tm'Нd 7+[.x$g&頯`Dmgę|װ 3rxjٹp pWs 4NO\ v!97) V+ڡ{R0wkoo+-׻w<2rlU5{EnC5e)ҪP6? #gλqdcd2xIS 5>d0=pZ_wڅ&5DYLfF$kr\ U4WlJΩ[Mc%9_} 4 Rl;,zq*9r(Ӯ[ _HғA4F|׮c(vGo4޷Ч޻ܾdܮfmz!lg*1BSI,ٜ&akvڇZaw//OM-6oKeہYG%J`A~8ӗonyb0ˮvn1GyWvz"jCU9KtYs"s,h*%m+&Uo6Y[:\,o Zoa>-y@7P HA.'[%فLc۴n;|ͬwl;UMV>=M{$b&t]G1`&xv*\l"[wǃ=nG0E*壬k$_lpVɻzw^{r'g8sO˪ j+ <=HVz!`Zoq[AY?6@d4>خ6_]$Z?nMWi#z$ZfC_A34|Edi Kx%F,PWf|a i^8gMVۧ1Gc/3;o_*iFpw YP[^?!Wy5Qj͍Ozoݭkr-=%Y~ +m;h֖3v~ʯ QoeCD\%ޞCxխ\B# .W&bJŃHU$I(⌢ ߝjB HSLML}ov͔xD7: 8zbNb, `0׆ǯaPF?+iuw::S } 9RDvw+x.~;\g<cᬬ'Z"MҦuL49QC6璩Gur1нR!\p(>w r |u}/= }pq~Aʷ: W71Ӑ;wٸ gNo4nO~4Ki̺z\ըXUuyma(-0O7yKExG!cmx֚LED[_u EKHSO':Ձ_*k}撝d`SZzݓ Eq[65W%|A+.;Cuw0Rݺ,<`Wkp)J$y_>RT@=bUѢi)E1\|" >S=9swe1˓:!u LXt$Lo-;^̾T<I |*G)*^Ӎ|X5$jv{|>1exVSNjʈ\EoQ%-l 3 l"͂.51IAsT4_,G/h3! VI2 L#t3yO;}. 7Cd$_g\_d) QW˓nwǣ?Ӽ^Vy-]O> Vӷ&ydꓙ uO- ;ޞ$~޵[}CP4:T᱇Sֳ/.C/Nkĥ1G0>RN}{k l>' Yq |a..}ilއ%_X7L eC՞c5͔.`(, gҗE]y7nz̥ bU2Y&L/XFf>Cz;Eòw9,0m'M20e U2JV-|cij02^zɍT34nJ FCI(Oh(~% t1Ýo։XhL+Gu-V?U}|Ι '[r6jKRSP|ICgS_1-HDn&VD(V;iB}bT{wt2_̠n &47EީNϾ+bf[Sc":xج|[$l-'4zZ[m y.⅄o{e[y*Sj槮IC_*6;uo9>|QKozPx;us!i(o:ueL.VKx*|ڦ%d-W'6.ôQf:r hd#Zu:h?6*>Y9^-6:_6{MM=+ - Lێ&aЧy0+6mJ`oxla^81N:6__K \?yZq=,A]'n㦌\쮸<8Nd.^,S6w&i¶SM2= m` Ӆ٩46DĄ$ӄgu_:($)X[…ua~>xҘP,|tT؄Ri(aޮli<̍qu5Ӳ|Ϝ;Ga!C15`rT.7kJ_хƄxU`XOj']zRvSpPrYpGϑn3jZB2_Ǟӹ3L-Q%Ƃ@\[{#{P$<nM"!݉X4iECU ~? W:17yYKcQqO̚!Dr/Oh[NLnVIooJٸx2;D9uvB+Ġ@ hrťK XVPNvF>85,˻QRжG7 sa1qHf~YͲ߇($Fe6IGTf8eBtQ =B)s'NUgʋ=?f{^TpaXVƖ}{]1?C/_-rӎ*OԬ&09oZqyZmrCTJ N'iʼƣbk %U&V o?7A= -ßΠΜcg.֌ fiat %ay|WgMa0WT:?feM-_eƄ:zTe ֈ;< D"I$()љҿN1TV)Bog2GߞH ^ ȡxc_fKg _se#{bK7I7uBk*;1cO`죲Tzc8 IG F3A#ŹM%UƢfw6_Z,-r3ɩXl3#G_5Q1Ln´zbIйtj.H a"vG8mB,-4MD;sOrZ|/g; {p7oJs>diSM6`y0}kӻ8º3,/b.աb,DG,۬OٸqzΧ;7gp_VBKw=ޮ @W:xjGJyj+ӹDdBEFZ)5eBIe}A,ς%MK3 ,s~$ߛs;a>67' ~;.%ȟ71Lx-?\/6q?.߄`h~N߶Qf "w,iu-.I*iFD.# h5hX@Hz!O "~;7ȶby+WI>2C$t}e<1] cz7qzZZ? _)8 G=$iRâЗrmUf"aMaRºW&o0US-=!9T2~ӥ B,4l׍3WbR\ۆ?NqĨ߲  e!S>mVyG/1iv мK[Ѱ} cKIƢ ϫJL/ƈg9sר_*>PJvpNjrQ̮()[(*x MZ촘i2h< FǾ%ѯtf{?n{X\F9c'lߧ=΂wfmV%guMAwꭁEnWފ.Ydm%Hel<3O aV; E8E.8Rщ 3̮h>Kص*zSTXޥqJ("-bbib a`ְ {)٨s\u][Kܪ;엢AΌ-)&޲sT3/fb` )tkc`@ Nsb " $ OT5 ( h3~[K~e--Y[-~;[κihT᜹cmRj| :gg%^O"7N>'IS gR[s3mCtt[K]m}z ~#c1?'4fm|?HӪEe& l:bY/2+J#XC*z#sVM E"<~e—?t,1g+e57Egh"׿_a ~`晇C(3}FfI9sC\f5?boW֨Ub$!k=TFsrY8)U€y8ִxdΏst3j IS ΞiX;_(~`'lcMѮ.*g$&Q8]{4\>Cd`WOnG쪀aXmǫȰriڲvYGIvqpjtЖw+52#o|H3-Y,qMXuc5nhYmmԣ"wDZ0Z(RWbLE#f]ṳtxT3;L(8"''bJ#\rk3S>Vlúrݜ>n*F.,weaLvjY )~u0yz##(Bq|, aK Ld`Tۼ|xMq]FJz#ʈڔԁ{Hic\PHz&U`8[J-r^ǴX=b粸K}#xzt$8%jfžupKpCbhAⲨۮ0K)1oۏ1di7$?+޿ N\~v+ȯDR~}AbFBꙟB E||m[1)&GSQKgϥ}ʷB{.i  mGj+(rYL/mm873 83OL-r;2<.fhJ+T-\G6IC$g; {Svi݇}8.}&~ZD-(3|7[ؘ(Iyy3C#g<_k%Ƨ(Xu^ZH́/!-!F|t\Kg߯yv^2ځУ75"tձ2+ 5o *.IHҊM,Jj#3g'̾Uڬp~Bv!K7j1qg7>E= ?C. ˶m۶m۶m۶vٶm6WUpOI:dQZA ?Z'Mmʌ[#6NF cX栔+".ufR͊}q>i_z,aICM~QpP\CY8ʲdL LDPS Ftn2F@k#iƟ^-h@_?MMT^_v2 yk(mBYeJb6b$f7TcQꞱl0f c! J}YB&ں0s+%CܽbհBی3fDl u E"vuǒdwmzޡ')YPyd7y<6IbrLkF BM4E+a)5WgGO7¿2k'ݴ.iSQ*X7 ր4Tø?mCtBz}4-Ff?O-'Tݏ&r]{k ysZD J5<0d{sCKd1BIx%?YȨ -V&X[z{ܯ6"@r7%9`՟$5="hq9mNft`0B^-w׬1 芍#%Dq1=RN&yk@:71\E^g66Sh D~`D_)V5[(S8ǣisf$'Zԍ;hv&qfZL' :M3D)%·7&$vpͺ/7]1nLܻ2B vyC ͉m&Νm] 失 sAy*bĸr>].P }xU{1ȟRTXgazUYO #ʾ+M@e8!IOa=pg:9[zO=[U%K9x~]6^ԏqH^]&s10Z##ʬ"Dg΄F,]`P'N.4|Cs6kͺ#j-k}M;/j@S_:j/.~D,47s#g١Lbe}6$rGR%Hy]lvM]:q#m fû W.cRk ۃ"cN;cp7y{}G,&:Ɉ¸g|ݪ {`~&:/P1BEWRZJIt^Cƅ Lsa<i'ʣ:Zm],ͧFJ"Y*Xc΂v~Qf9η,P *Xªz;EV8.𥖟]*Is3p cF_ԛGϥVI.: ZPCIC_ Z?ؖQr $탞r譡sfJ}h]*gnD Z"NrGw\J~`@PkfCpD&+RW1?NyyO_W Z4XN7!j#RR7&Zpʸ}̔^jpęLF(*Ծ/UMO,^@esChuG(Yl 2)YsBŭDHJQZf1lO}y1* ;?lh昕ݮ"#UM>+@=<ۖdh%:ն˃Κ腗A EU#-cwkz ko{ͱf()FpDt_$k]E9:<mjQaד)4v3c|U ڽ^LZU_n[_=ΆJ:Z7칚>1L2}Qq.Oոs' 3ɭc!fQW-vB3f ?d:YFnagzkר*xd9aDB{t{J4z 2& { YSZ4psN$>o_]I/{6xm\78Wi3l9HH6 y>d?F!+7˹=u&T!ǰbƩ2@\a A L*H[2\uE5+:rqƠXy 2r+3ۮ"ܙ 3­_*QeߌUk10V-]}:XX+k{}vvMMnuM!ɚyUW3$[ǚx,A8h<[-ERɮ!·kF5@y_`v<+ਗj!ұ8T q|RμipߚxY׏S]B_2ЃA&?kۥ8 ;@JȺ%_.5^.vʰ fR3^@īZ;:~Q5Vw\^UV.F%.܇@3j;X Ʌ0uSrL)2G#XU=QUT.DԷ7,`r`h19ms*h\u"C#j۱hsZƐ9=<6 _gM|bcQ Sihf/8njm"e\M.vAsnMjv_-h) $m,\^q`<4d>>COLC+{pY# R9 RcGG藝"b 3A/pGE yQ%/ F5_"P/tW " , j;$%QQ0l*N lκ{Ij]Tu3@,wkH b82t$~eKV.ZBqY@)Ge~Ep8C###mQ {Bw~B&y^nowч]sy"n_Ubn&q ?(jƪol>QYr.C/U4\}k ŔvE0 d(pQZO{9w.IiwQ>2'Obf|_O>t ȗ1@}Ta7+,6L6Vs{R$XYONWJAὬ0F4t4?0gZsm\'v .[V1~M prXDn)]DV}MI - MyO@~O3~ :dPףnGL_^.+ U*9֨,_SF"G"ѩȸpC7:XqTDjK"%^X8:xSka5fĈO?_ ViA=hL:(q V,ο0:]\ N7~ dQ,qOcΕ޳hhs\ы6{MvyA%`f>h1k 'YgAρʀY79Sk `8I Bp @Tv'1Aѣ{ I,a)M퀓ݑƑꁷfAUe+lڄ!;ƨl}7rƼ)`\ܖ0)/SdӠx׶:v~״-g{1mP0+8Ouٴl '(< ZUrRT]ht}VaGq<@ H'3X]U D]cuw\j~HEh$ PQpZ4gq?5{ހVJi{:{pYAi%Ú)))Ce(Ml %`>CEf(}˗utmg_DQmmkkSKÕ"i KZ-?)U5 :16 |p)챻vN9:®v?Tj:jO_NÖʟMrwADDQ^!*Nb{U0q>'_-^]4ZҊ0s(҃޸lKXKe?# wD\D.4%HP@a-eWFv|'5:JWeׯxd͇q~ea~K9{xGp#>^Ɔ0V|̄ W U⺘ƨ6/Ӫq9)|9YGt+v(Zh!`:+DYƿc0M a0Frv:n:97wE1^||%,C6_)v/O^i MFА:pW DW}ޭ;#fy:s+m_* ڝ޺ 02O!r!r|1sJXi2R)wI'SlyfyowLCb1tW q#K8r T6=Ie 2Q%3yF[gjܭED [ޯ: vtmd#_H,{dfrer sG5dD`Sdp zgld  F M5j&jyZUd4ݻ`cK̸(8?,VFU ;0s-V l)8:$;e 8~A}DNᨮ&+?+.f>[`BGU5KX|c4“e:z9i=U(+ֻJ*ˉr`nWaϯ{Z!~1:Yv-8'6[% qXv})X_lH%YE".aSTHTZn{< ?aq ?)bQ]*lߕg/X~m!`=}bkuE^J2AIpe=Pѿb^F T 6hLU[2q7 @PJյC{yt&AOMfOMZ10LA6g/FB;yx#wYܘޝ1Onwz\g60KJZ`u>*]ӷ>! `S=Wџ?EwgEYXJq9h2!3sXBO#-=p@NMt.@KK4 Ӥ^GM~9jE"?Bs$0#A1_Ox8nqWb_J#Ž{o'4'YpdY f-hmiW4E+noJ8v Н!^8Oê4t z/Ar6ȨWбt)+4nd\r!^,Dnak𒽜f@1}]=amجPÖ7J8މp'QX =̺eys`c(8@p,L\zЊODCcr(lvѵɼm+5SU5iCCgڧz-ϕ(&'BR@(s&PNR`߄STW!lz7=MOAg~%5<k)?3v4wӇoe߃\sAl[)bA酄ǓܠTiG~&+N:mUz"rԄe=H{5Xm3%uȐnlkxo=^cJW\E6cJHc2+'y=Nyr]\9RZ, ccwpA㮌 d CM7N2ဲIbATAo0YJ=%p2ή\P /n)ysOjhn{#!W5iږ2"?Fc!$Ŭ=v8: ޡ P< Vbwbm(H {i[%'xtī&"VzChAS{(=*+8eIl Gk#%k~@M"xsP.5w #7l(ruiI#R|.p# :9>ZrݝN~N5 3jq6A`CoQ[1_Eռ1{ ^-K;dXa H^A6Eԛ8llH6Pg4uЇr@yf.kϋ 36"B6fKC4WߩK&Jg#>t=ffF*L h߈vDCϖu:yWc%vLsL9B}ࡠ9;٭sP|K@75*@(cReN a(?^ g@SN![G1I*GpR/D4CyZ=p7 ܎B.eR*8[e;6g \bUİAf~@7$EH| rؤLL!Qc>mq>x,^rkZ < =xX+I9P"pMEԳaqc蔂ɣ&SL# ڻ@MF\{)Y\ϊbujx{x#Sّ;5tʞYeM#9EI9CU*xH;A(/l %~OKsfcz Fʾgc٥dgɊ"u#LBq blnj{&/ % Imxax5TӴ4,OwchsԂ Nڐ5NEIύ)2/_{i4b(6 ,1D(ר!p+0}й~wzD=bLOXO'7JN|CV"9(/K~$SP  OOWN"KSf<jfy*)dϒ>Otf[><yhVX)9 J` cy!`Yc C0DŽEKv`~ƣ>WΙ/\y(gg5mL/ Srm3S39\ApǨγbmOxn0k<:߲d`j=o,vfĕhpt|1܅>8\Ëtmi͈!~ʜWm:qӛHg0rA+HCO{sTj U7lZ^Wnr=af\V1*@v50۹[uL3> d>mC$Hg,WAtzk.<](nqDOb}au):zCRu}ү"-Fdmʔw̹Cl'f4Gu[weH&oEP17?3iobMGvk.90_!6XQےR_hd/n,x\O0g,y!3S5XvSL8劖(Ql]c"ɍ9ѽ +v.KL)Ya'9퍼/]q=dd e5/On+ uW:6i {V:]U Ը(5FAdk8zU;LwH^pʳ@|tT?t'bk=I3@ٍZA|mMw)s B<^9)a}>pon9(@)uv5WeWhQDrpwO2Ʉ$vGĽ-)SwW[Fa]$CtT>;Gq-,P>:U"e=*7ðJ'}7r7{O NTg]_(uEu\tPLX#ѓc[g'#&l{Wb?+`AoI:Z١-]5jÈ?O$"|% gh]'׵S6'L덢4nYu5T%>t)Zet2Km}GZvTh0މebbg⊮`@IVpߌV077U+UWDp{ D2N`ì Sõ F1U9755+o=kGl+Q&&~N)٬t0lWVFvJ&)y&1Ox;`b&;7gtg#0Iq}a|>4uڝdiUr\hj%ޚ2cزOgx^~ }|B55sH^ wwABQS8=!m*" /I%cQYԩHNRNz9n)9Js>it!w>\XQalcK>\OxVٓń߁ ,m2fʭtmqQo!*IdRʧ=tg0akwa=PF (r <R[PLnc 3'!\}>{;!CO"`1h9>:2U[|exжo֐g Ge_1J =$7&.u;4Bxߞvw,;W${Iq "ހUG;h9 -,#vY}~@ڄt]s~  $:tc&8V_;"Qg8Ͷll$ "^'%F|Kwiqi $XQBUmf:kQe; +D6Rݏq*u]yd " Z'Yτq(rЈ$DOj{횿 /os( F'!x7]/84UՒAFRl]V;{=V¯&%{m29`rYFg Z30` =}Em!,2 p4 `Z|T)T%.큔M Y`C6#tL^VXEOiq^a;*y r%$H$&l-eBJk;>8>K;Vf2\[K߼5<`4P<Ũ£LZ _3WBz%bvȒܯ11H5<&I2ڣë?5Y!AK^ťdKׯ4*i_71 C$-ep^L/*'Wֈt1 ;*On- E?))/ qM%u`gp %/lWiXt a>U;N Bwuq5TޝA⻯.FL%D8Ja(@#rzZ~K̠ny%QE >EY+8ÓG &n`qT`N]a6k7YO}{S-A6/^JF¤{x`OIoҙg+]M j`R~$,R=iLb={zi0Vzev/рG|・~;[ *[Rkx}pi5Hecw|X{e("1NIYDfFpHxJ+)N̨/1J@ZJE0T5Z {l!$\N0"zz {͒DŽvLCs(K`PVjCwyNfvsh7#=,1t b;μ_n[{fj SX6˔UB$znqO\ZPtz8`u2)yWk!g6:J3s>ϞF}I2ys[#\+ctV錗0 Jօ ze'ʸ^ȟlƱ{~(s*JQ/*oqz[C L9S'S ϕNl?Nt@YAB'P`8` 6ӑ|L ˘dު3Kr(Ô5 0~[<e0vvL̦d$.{lu 6WI<=Kmca_2`ymg[aoaendstream endobj 31 0 obj<>endobj 32 0 obj[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 250 333 713 500 549 833 778 439 333 333 500 549 250 549 250 278 500 500 500 500 500 500 500 500 500 500 278 278 549 549 549 444 549 722 667 722 612 611 763 603 722 333 631 722 686 889 722 722 768 741 556 592 611 690 439 768 645 795 611 333 863 333 658 500 500 631 549 549 494 439 521 411 603 329 603 549 549 576 521 549 549 521 549 603 439 576 713 686 493 686 494 480 200 480 549 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 762 620 247 549 167 713 500 753 753 753 753 1042 987 603 987 603 400 549 411 549 549 713 494 460 549 549 549 549 1000 603 1000 658 823 686 795 987 768 768 823 768 768 713 713 713 713 713 713 713 768 713 790 790 890 823 549 250 713 603 603 1042 987 603 987 603 494 329 790 790 786 713 384 384 384 384 384 384 494 494 494 494 600 329 274 686 686 686 384 384 384 384 384 384 494 494 494 600]endobj 33 0 obj<>endobj 34 0 obj<>endobj 35 0 obj<>endobj 36 0 obj<>endobj 37 0 obj<>endobj 38 0 obj<>endobj 39 0 obj<>endobj 40 0 obj<>endobj 41 0 obj<>endobj 42 0 obj<>endobj 43 0 obj<>stream xetUYe{]I!B}g  W"↻kyuU\+ ḇKzf>io4E (07+07M(0KhTh\h9q-4ɛlqiƎ13e_鑲k.}~hO},@CՇbRĤJH;X2ON<1533)8Rxn[Kn/]lewヤbފ +V.8V'n9YLݎ]皾,nWrBۡm/tDōӕ7V:Vq uw.6ܫhWauۃkoW/>_jt. "!%!,C榱 ctJS8Kns+Ktq~FdF-׋C[n&/#Ns_q|cb6Ѥ+wly\RʢV>d Afw4y4=u܄p4fxy4j)}nʌnMu@C VҘ/s 4|dLIg:Ď>p:Oה);*d:#Ѱb8 ܴZHx&uRF-']VVK0+\SWpSB1Kܔo-_?䦸`MI4-N+C&I[6Ҍ6$ JĢoJSϓӡJoqdDN1ySdbNnvQC|+~坾a-Ho+珟n츣M'QJs;)6bj" Ctҫ?HbS7[nr|'7Ed5On#?>0e1[V~wL[i+ 2?k;e岊#FE^Msv$M uR?+|.Y5/OE4E_Ѥ\. B AUк+ lRD:{AOήt{I=(LSto;{10I*'6XTKIC uvZ֡lvK=nJ3nv`KCaAn!lea7u#;iKt "7ʹ $p[qk<jEGÔoM}& s.MZ1()zJ$ލ.XŤ&.EPorz+]Yx4T c5ۉwڨ:B|+EHrW)CId$(2d Xdg)ȂlmxwWb“ K,02M?ӪN>vR+R |PPҸN914.$>&1y9zyFl4ӨTSUzAz6k'lch{q[I4𻑼|5oET}?1ߞ|07)ҟch%>ƊTU+p 2Nu㚢"(f GvceƉn8w7%n[nNI&)Tpq.E~:߈MEnv7nxY)24zIZ4DXfI֎pKQ6N5^KD{&m7|„@ J_nvjdw&Y\BR.~ɯN0HE;N! + Ѣ]4]g#O2ي{ʼn[XDZFc_}24pJ9j`SSb',-:2zڟ|g]~O7Y]z>#dn!K[$VXH@Mə%TyT 1tۘ4նUxW=a P-R=-9QcA I9 \FjN2C>27Ɵ2r#y9nJ|OnsLba :)W7kO3U R|+4M70~I\El:2NW2hv*yMu(3L;dí8tu(ȓ)YK7?ߴ[+eT$H@fw(SvhF 8M4X2agidOԾb[uQۓ/J}{ʧ3NEGe$&G5S3?kح_m'eG7KHNi -:O'Ax#Ứrn aQ6[ S7mhUXŮ3L'T 1"TR\V3o2Kj ;:Dc+/|7n-l$LD^h<p2ٚ&ZƮW;ӡ]u&Өզjl)28 '3̵n˟ )nIljYڣuo.L-kXKvT[R Wd6$mҎ6@MsiB*KP<hw3~g[ b !O-|d+|q,y|MIƗͯ>-m~uߞyx?f TUBX=&q_{4È45 MRf[E *Tk Z1<g˄KodOk]{0hIF,2MhH⌈59C40<4-hԍb4Fb I;*A䒸jZgNXˏ?O+2 ]Gg1 ޸0$Ip\M:Fig憓 /O]}H^y<+n!xeRƪTzL~,'0*:d$[G [5@i,4q?=sպ|A覧bR _ @ ,bM 8DfJvDZMa[r@[ ݆j*id\zo˭Ɖ[n~P (nIܬg2azIig?pZT]Iuw.><_sUII˒7|=:>}Ciz}繧. ^R7|NxOԕJܑhfy0:0q^V V3[rl-7K1]ngB''ejEn@?ˌ\,nefK$x<-0PHő"ϓЙT+7;jts ,[N X˰ c7 b63C~f Y6%+(.qyǗ^n|Z`#! BDE "w6ĭ6;P願NNDo4JWFѴ²u"rGo`ECu!q8^Jf&ZpM4b cpGOWoUkED|`?z%(E99y 8Mjދ0,^ Av1ѨbpS" hIL7NB~iۜf3cؙ]fp)w~.@+D)SN=33윂)o.^te;V~^zgyK{*ذ2`ec5_|ꖓ(ju}-.vRKNT8]ylWo޾Pwbý{-ZV=ƛo?m^xqSCc6y9k.yne{.+ms:kǩG/~ _uePBc/OZ7eibЅSҾ,m}u'ZkwN:a %Ҏ̐) 0xҌSOdUg %nKlzͺ皾>|7Q)n4O@7x~dWP̏lf=-B-"J':He-+ENL&LqkDbI{ш1J܈lZٖE_!]):sx4L (hWiZ?;ՇjGRtiYҖM&L\_|,&lAMJF1S j ӑt 8s([>[$l[HUat x|-@M1 }\PR>nFJȊًT!DEdh2A8=Vh\Jƶa-;2ى8Qشʼn^v4f:IvmBӹフM L` ҭb.ʹk?5*m~Y}mA)z>VL;vz+7_DŽ5z3 }g,)aKw]GōBSOv^3tRLVx\W Ȩ+ʡlZ5#'0SlrB1j".蒴lO[_8eHyWF^9tNnU&+ Vi{+Jޔ5=9Ws3taoCgr>E;hMV?2>o ]DZ^VeB4<W&i,~ˤB xҹ\su&B H_HF͗Tȃwrccg˒v:R99T@Xx &!BOHhtR\,,M]4ه:ui[_pдnХkuƍ6s˲*ZPo8dt܁\='ZNYýK`:i,퀅z!+ Sz*\ ^&ċ ZK2>d8Ǯ:x_y-aVnt}f/4 _NnQtInSBeD:%a\A@`LOzP䡞+ / /@w>u!CGp;}Ha>%sSs O2YUeeBl:V|˛gן/=҆{h_MKo8xLpϙzaxl3_@>y3UĚ|hPaЖ:Vp0 ]2DBR U)ݐ4# R ;yReLpk\F'|Ć =H,7 &$c8j-b22;"F}V-8@"V 77S'pٲ7ǯ܍nP3ϡVCOM>1cms\i֕<4"ZrxM>\뒺;N-CXG wN`Muubzd3Z҈MX{>)Q#*E xҽy_]hx\Rsg_Q@#ކ^?,tu* (1BIeu JGB̷aɰ_oGZf"n=5H2~ _{X|Q E u2{N(Rl #{ ïj]b֊5[+iGgjp.jyxiyҚsL߭]dM ڡkPp2j&n2 ^4yn ݐUva(бN`&>Ʒ6äBn&Kx (nܴTo`2u_7j7>/o{3wGO׿iM!cb=1eƸA^FcBRfY$o`# [^]hsw@3~M؄iN4 Z0.y}BƱ׶^zI~і|_V;}-w0o3q6bsQ 6_ņ:3u\]/;5~ymB1UgZQ/<:>;|۪ pߏ֟5|ףV7m\IN0|ًϋ攼8k?3~6Gx脥WDDnfZBp*"s#yVvӵl;.m69Y,~X UiK7TE󿬸ՙ'0oO^-,-/02}yTBzDxOFpQ`cO_y\q׃W_nx{?rK[_w(bq4j|^R|7% ܣSx2e>dQ>UIiD<ȵs OCv,5;kε|sT מzѷe)bqS ޘjG/ Y L=Ce,i~SzWikt.WN5zu|ȥ^3b:{_i~)*jxvB&DM-6 ^le{}sޜY|CWnD6kv^}k?hH/ 4YiJ^yrmѵoh^n~Y~CKP|uGyd_a "ǰcyrՅMD*x`o 771'&glxCnfYcڲ}} \1iP/6jkʘer:PLJ/^lyr5kx\~㻽WD,²m167x/ŵ_HM\\+_z6|aRUfVl91vQiZ!ub"6Y4=c?s0:mVUfM~Y7>r[*KUT-<نA HžMzNHgS.Y*nDx'gY مOKGL^6M1-z5i8gUb~F@GM*!1p3ma2PJ޽:tpCȁĎ2V}­9C&D2yIvs57_ n>t壼腦-XK-//)Bϑ9_JIZ9sm#z }J_ME;NԿ=E Αu]\b=-p`4٪  X,Fu̠RtvmUx6V,kL틢E}}M3t7?#o47~{so_5-Mm0ptBf3}SSQ*xkQSȹg6O۫ tjٶ-df|i& O5<0>l}Pf>=\.x[b݃,f r0uoϫo}O_7?u\z oV]l~1k=#9Znґ޳ё '%y:9G>:D9t7T=x_Dt@}`3H9 7Hnv7n&f-;PltѲeZ4!bsLƁ-ߞiۉ yDX }g鏟 MO1?ܷޘp<+{\5b!z4gBۊƇŕ7o}TBiѨ .rBW9?UB,qa2td@LJ59 _#ōIdCD˜#o?렉W\awcϾ6} @ VjzVlC9Cg(~ǧo sԈwtS5^1)B:Lfekȍ}l:$[;n,) sT₺D|7M朒ցE&Kܜ*:=M<Ɏ^GU8#(Ljv]8h1E-!.%lX<4EwC<\vC6GOC>!=)_g1ITWv骻8u$nKDy' w 0ņGޟUA]皱gQ5Ξu<:,\b:|Aɭ{y3v/^n~P=AZvoCoB#{$~-C忈`Z҉)(G i)j|lJgj+g[Eu]y1c31`GI݅)w3->V\Ei'D-{|X1C# p7W&hD ,F96v(o9/#uY/trǹk?`/j-f^s6LYp5^3R{4](ыyZ5Z*'B\4м(m6PSCKBLⲨ~7<)"c(]0.ac9OB ^i))-By?nA)ϵ}K#tXAFN ][ 3^@ :~<]:b ƄcphCzۇKMJ.ՇLϵ` F5 ~ԁFU;)6pfgK֬ς d8QMٺyTvJnc?ui>F}2*]M{yiKpM\}s dFgۿ,6@Rݍ (ko^M'ĂcO wS*Y衶}^Cl~|Nb0L{c:v?Q,uz%,'Jk3vPsOz}dOCfDH9G1k=C=!,Qu@]\ue|\D C& ;/7<5>>›9Xզ5[a-GJ\eh;*;v+6 ,҅`tL~NwMX柎G 77RY4Ei ԶU@ #|Ij}fMKkn6"UZc*SZ ,MяXƱe+҃oU0y.S{I2ze]SM{pM9l 5q??F:|7 ~Kr7lWGˎcPuAG>/ xh򪭳6nfg,*nU5p7yd6>M%wwo4sv d<+5(FjY,1 TQЊTBD͵SeU[)߸*wOU+G+U*M?miGNQ"urp8K$k@ˠNq2Ý'qHl56|^nI;O b4eh4e@%M/{j&E$jNIrE/;b*RGkZ^VOkB}mAzѹj>rIߥv>f-L#}ԳWUT0WgQևxN/6܇>X§76<(0_ b6E{W\FM8""[ !ō;'r2jlk"^?!r]qSc\ic41Uc%]4 tRb7rbgt0e/5TC! d8=9PUe3fzn;7>?Yi-B-ý4?S$k>tl2TÓXe<:>zS-tRƆۏ4ިiV[H뒦ט"qkzT3!„|N 3商K`cD3:`w[*MK~ gLtr0MɄu1cb4be{ X3{nQ hŻ_^i~^TqU=*i{{ĭ]((i1)'BcgiS2]C֐"4I=l\2zM J>( (n4 ^2+zFST5 -)sFڑGIذIxE< -1n;Jjna=̆N.ꅳeW;Ɩ ta)":`nG킸%[0Q;_&`HwsͯQȚ1>lHL\Qc.ڶ<θ>TUwL9_{+>8پ֑8ݨsJAc bL"RS6RÇ8e+>jڢuf&/̞`3RwPҶZI7+7#-˲2#W2njҧ&(H?tAx!pV-t[pl]xš9y"BWɢ2 W,YdxH(Z<: 9gzN&!̋6`moM>w8cIśDGӗm eeEӳ59h4Mԣ5ȫh%S6~cd1h4k7Ta²"6\cT Er&ud;-qA 7?(j(pq&.j_QCٙ˭WZ sϋe9ڸl;/3 b=ψwbً_C"2g6扯1DÓ6>8\4q 3ADŽz%-n7JNqWs7&Dm?XJ!#ܦԮY Xl}c^lSZ19i(+'2̭(. 7Rr*nQN᮴#]^:H! n-mͭCM h[ 欒 XxhBr9G*Z\jId{96հHˡs3!>$-"`u@i$TX̾p;!tv18],9Zt֊5:Y9rEJ ,obmJHm27C#_J,)Kj&̵߉ZMe:s"}I-۠aH[jFN'\ƞ vɴAɩbyT OS-5\f=ijv4kcF@ n 2P6ePU ĕL(߅Q@ᦂV 77O55 /n*%ԟ'8(4G=QgU[o1<1h_Yl2.8ٓsÍyW@aU2j}˒֧_ݳB~˺qz5q~"̕4)DI"z甤E>2:x:9,2܏$ ,~Wn$*m^UWYwk*S̖kg. w H$'γYEåm)+B\U#7E2~\^+JG[[oBd2c}\ ~3oc?6tispKV~ˍw7-Ʒ/_Q'f \UY2rMܲ~GD1ua%v(ܦ`Ed)mX2QEv؁)vi[0}ͶP\E{2tBzEPLo舅ō~< }f:>5v[ԓJOYͷG.S=g)Y{n?Sq3_Zo)Vq;H 7?X^(.K@fwX2zC;Jdz팓W(g'bk0*Ү?_]{q-ocx4ϴldЖκ6DLpsz)kGt -:[w8`l㗯[OO|{yc5uW4?NF,.i=*6aa.aJR~!aD'$cLHJncUk#).!t#\lh@v#0H6 ^׾4EįR\|IaWlg 6ncv416x{Ǜi_jZ>$3#M|{X6hLԐ1N19Yr3fL \YvQ<Pv;ytB_\jO-U)^ =M}b7"oY.o+}goBWB{).!^_O@c8`t<3Ar$&,gg(pT[" gF,oo0YSu=']V\5 Yb,øxVӋeI Q2}]ToO rg})PC).y:~6R ܚ6YPއ$jBP6-Bx.׍X'ŪYƑơKu}fH& g4` gE:"|a1 V}tLjc#XL ¤ecTDbOʣECaeƑk VR3~۱z7bN>a.j:{cg*Brȏ0rLo,iT&g '=mT}ㇹO9} *rk:(0;ul 鰣mĀё1x0Zo(ZZ, AY*爵ІLdF~x SUjUp_Sަ=BD.Ah~ S~A죾z:˚E`@ 0YǦAS^3DҽL5j*s@/l cYy3PZR'6Vj簾d,-&jO#Z;*h% oU('^}GN1L /1o?vKag)JDqMTBNqG_-8d͈ksI`h}?3٨CI7E1Z`f4N5 _eJ՗ϳH`Ch#Gcw% V1 .% ,NT6.hf˛R c&?[#p5p&y083`*OH (v܌Sgk_@ q h =;0T3b6VhU& q;W/:)Jq)}-6 ^?@|@a@"4T$516sXQ'pUB;Mea Z]?( [6Y,PBh sT**to/4^=8cB?Aj0'э 9;˂tC7p0lcr "\C9&[/H:b,'m4ՊW&i)i߀ھF-W[W>Ea?j2b@&0d03E.6֡o6n2(펆E+0Zhn zOp+%J($eQIh4l0b 0|/cJЕ<2w0=;1$9FS<  I S VHH@\.9&P@X XM:K$;q<]eM(T`1a+ 5A,uy:ބi,1g4z,4_I*<NقQЉNMI1gN)?94Y"j"i1\7A~pK&oP;hk qKr( p,r<7htX^b$C$4]yR\!+&gMX{ d(DMk/2n(8aӖDכeƁ<@;uS(#yvD[a y.@ M%Q#m7%JF͒Lx_ZxMa]넥b4F.S;%#I&NH 1S0ALfbC|hӷ|e (s \iXmdm͚*ts~`ςKC4;dMټ)]%Da™:Mzp'ȇ 7!7 d8jBMY%}g<~2x;XT0Os\"#:  ƐUBa@Z(*S'#@5,&;E{?%H?,(2HI/#'WHVr.+Ԑeԗ)%zh,ryc6DL cq5Ҩ`i| _+A! ]Rۑp)M(vuᵺ<5Lz+:,UŇt|24;-&1MXnֈE*=N,HHWT)k : tJ_%O&'Pҹ2DF2zKx\1u_tT 2AȾ ]aUoOt-u0U[(8u0{)xwDnD"y:i `ƇloNR`ҍ(aj ͮ|p$pq n ŠJòjQ֤s$gTO-dM**.DƜ~: *HHPЏX3{h pGT OIĔ,G_8= T匱 @%4I+wHpU"VˈT@t4}2W>M[xMc0翰{h:<#uh7CfUeIg(A@ӏ-{h) }յG8%YHR6*8´'n#: yw^ `IH؍4]Xs,hPX*1HAJCa=H$o*baE\:DGRTϗzKwf7TG?CQၕ@Y3S a1/~<i5mg%BèLluZ2gCpLI (nԋad/N,gVdf+sN=UGΒ Úh<vfSQ=|+HEt@F+Vb0չMԉ32q[0:JG4451>Ge֍g08a@v` ?J(X!VLIX#4/1XE:bd"^X8i⚝7 \XP-g ghM!R p7GEY]{D$0 &/U@pSn<7El7FxYll'.@y.Lx7HjY$X'G+I),~0tVe jUX QW~PM۬:&f"WԘWI&D뜐Hswe | Pݸ)雛dT2uR {V2Iʋ|\J8ф^C~iwù_ 4:d9[#L|o 9%(^mՄx#I/N4K#tV^N7}Cu,:^8:$#w/OA[^:":ZF S9' *T*@,2tLQRĈA2:EHÔeNJlC3O*H.vS8L4cǘ2s/H5oݾ ['pɾeB]q r!C1GbR%IZ{,yI'durFygM)<7s­K.Q;w_Snoņ+sWxW)Lݎ]皾,nWrBۡm/S1Dōӕ7VbJʊ^s^EӽʖU^\{aͷ}~/o<|͹@+Fwcipj]'A\I]:w>H[ w.ru}5?k2J]7Tdoehu P.G4K׋w_M$x?~y3**u&** "!a a1YDYEVٗ,[Uݝ!7ʹNuuuխO'ɭ{Lc ~&Nl`aS< +(҄Kb5Z+kȐ!I =κ}tW)+Ay{{Qc#&G&G'g@&fU333*JVk؏v>sd2S713!BDWeI$ ubbe~Ds2U|6lx\ 8څ8kLs]_{pSWw+kxyz/B46"7U Mг]?K8,>< ^"чIy!O"Gb7''´ yl'ggAm< ;J 9:%霽yd \!˙ @ٗKH1uWq`B#M:JqgrO, C?: A 89O , hvg!?ʛDd[z֡x`fQ.X}\ }?:z&1dЪ ;$s83ZaS_Űqv:1%|ۊײވxC?b9ZE!Nߐa(F*s N4,{גyM9=?6a51e8`4΍hlyEM- DCG Da/X5`C20~?{ m+0_ B>79 \F30fg"133gٱ\BZðQϓ\"DB }Z{H=Yk[%vctPPAtG,%_Z}aD(x*i"OS@ aBD_ou2cC_&5z(-R&P\lIf*Ha/!̊)<²/Βi9N>^xfTS )/6<9Tez=FBs:J5ۂa7NG#"@R›ķ`] d"Yv1#s 0+ gqzbVo%me?-`{"Q.R ѓ,NK|T#Er^ {t's|'C֡u ?[ raPL#AV;8r~(c~(?rC9Pr64P.Ed=rcry~(<~(EYP~(  4#?VҮңCC2vtVӪ?~Zn"O S@:vy2=-wü/7v˛u1YyÚ),@p1A![ ϙg+3-͡ ^,F΢\#vFP\\ES2w~_f-\fabN>!jc:gߔl=Es;|AB/e{'H<|%WoމǯM][o+U}x!zBa@,,*G*%/r_$=}\PK7Ӌ:|Sٔ_\X\Y]kY]Uoblhx~oខÓ#S2465<13:~(ojVA@aR("ALNlU2kr7mD+Ħ@VGqY)7!&=`ySvCy;M Pp[iț^7o>2͆e={Ӏ70oT6`Ǽ9x`Kͮ!9 ff›KͅT(E`"Lk~9IeK^u[~M{˷u$^'$^^yEvev𦧤`6o&aެ@Ǜof37[نowc{Ǜ̾ ̛O ixsVwiJP( PlJFUwKm? ۉLNV:D~ZSΒgZv؛Nˉ=]#{xjaߴӏR-<ߴ ̰{i9{iM›>벢>Rx ^Uxj7 o4+j(j&Z&F›= 톼tq>NNO7IdN'/+=M)E` ^03c/7oDYG|o#6bmiJQMb:ǮwAiҟ\cw^}A_=}&K3I'y:m`ÝgB.a?vgo"q›AIEf =bM {M|#&GN w/j[ovm9?47fBE"@3@2`"r@*ZljcjV.f}zFǸmND8\󱿸J\{Q]vr!CL`7ǯ&YVI7v7So;ݹKJwQGdgc館i΍@[򢐔2(*iVUjYvUJދ{O_/}PT,,}kCyZRPV\VԾhx7[zz7ufKgoN98:84:alx񉩉I,SS&1S`SiJP( Uhf6=ljе-nYoyg G-[E;E;v:9|Kľs_ϋFvv丧WOŵK___x盉.Aw]CR.^wExG μ!Q>-I KF+J/_,yP*Ug>O̮HzR)ϩHͩH˭ȫV( _eg=yV[^U󺎊vj:jt4t7w}& z08;4at`pᑱѱ N`i.8on>M)E`Q!ۖ㗷wt m'=~}N+?[x쳾^[Anr}Lѳ! 9vqN^ 7$4w DNQ~ .nH\b/ݒz$xM _D)ũⴠ[1EH",!S%J%? "}Pȗ)'ef?xZ/WVdVfW?)ySZSPQWXY_R𬦩-uͯZk_77t6kijj{mwﻞ޾1GKsbX$V/??Ex=R\BQY"qTw+(R(@9)H G0i`:vd4j)I^Z qС⧤>E"+ wDvr pش"@P$T*ě$ID&9D吃%[̈́N0q8ьj ]V_pB 4 <̰\R-F'3`j(GW"fˡz R$=oL|A8ԁ%t _7i;E"h F?WUe3 jLyS6st)&E"@P(E"@"oxbendstream endobj 44 0 obj<>stream xph>ٛn@HBܥ5.DB ! IH 3n`ؽ_nk:!t|=|d'2N&% 1ㄍY$!x1F#8$BO` DB8a3M"HOa 2RYTXhqZ=gEM5;c+n"BO1J 5jII014F&/5M,%Pa`22DRU\+3E)ĶQ ()&=w9lli 1LQj쳘IaI*-S.*Zp)'fBp00iBd ~?GW(Y[-FUO3aD^󫔳Su& SS:IS0ܔj2q&/3 II-}? *n #,dCSw?00U6ה4)m(w9F1&٤ H0b22q\3Uݳ1|؁U!ƒ8 !wH@+G5"r i5즁C:<5=q+W9Qѝ]7l^,b$ah?K`S9Ω;WXҳB頏H%Z4$+9g[Xu7~.N^r㐆YK~gu.?#nqD5le3C\W#g9?w =7G"@2AAȿ)cĩ 2!N;H /n;8.80z9t4SGsQ ǍzE@ǫ]# vz),rbh▪m~Ie}GhZBD0qsxAjoCzSbx8Sa >J,/%Y4K3uF鶑; *niWu_)0*Q o~gdA4+:B?qmO^轡ȥC2:+bcoo'fxᕰN^eG]ҪF<DUsm)/nʾp ^.L(^i0\xIѻdt I;E)JWq U-;U\24]ӫ#x+?KۗEm3(])ڳFĚŠ[#NO 95UK#pӶ;mg]0 !&=m_QX.%q5I^iHxi)l#/mN-}퓷!F8j!\Qj\tie5 QS56!4L= XSt+,}G>Z*VfN`}bwAUCDApZmpw:34 ;){bcz䭚i<Ќ =m3g\]c"s\bGk;GKPbEh 1,|ak /-I8 exuSۆxxiy7>Mt*~16WJmq#0~#.2vwtO,W꺦빧Xd1|ݓ.fTw&Սέ,='.?l똸ycZ&B\ê$)hBU*O TF'Y]vn)/s)˨orɣ+O.=iw||/|0sdW꾵skxǕsG.-N~6<756:zuo>+UBɂWi钾SLDfI<ψgwisix*{vL6N-MxА[SP/c{uSz#c6; u@L>Xz: 4IʾS&V>>9}g|r?9+J0+,(C"GoV?Ǐ?է?wʩn>_1쇻^“ .n1EE.}^|{Goܺ,expjgwx䧉S\z6 =mlRS=7uBmҶ c+#4횜w@s)HЄ3za#68 GLOlȣնܒ5|8hHs0!B@10%nU^ݽxg=~W?zuܚ>2ۈbׄjrZru]zUܟQ~ocjmtaIxbiҨ}^'6rQto䲞k+0pW3X_:UݷP~{.<-i?s)~::XQbg3ȹH#Fi" u׈j+­ˎXs5'hJ0lcə],=zq٫g?>|rw^|ӫ_^u]񈯱S!;ҀkbK%qe]]2Bʂ.\[~Fޱ7:[?v|H72죋CH4 ΕwOtMwH鵎*UK8I9^/CXs'ta( W.J,qn9[%8Y=rC .F06BI[yt;眘wi< A (ZgQ 2Z, 8p@T\L.} 'q(g?⿼C)Un)\R}I5bШY22_}rɳ;GN/=߷W3>2<0s 00ZFo]c#(u,(a"}|zޫwa4K̽,7u&*RjPN6 -A9-2q%' Q|mlsxg⎚U #/5V[8Xz~c/@q8q6⏞|IÏ/ZlbkS`:&5:&794[Fxy%U$]E'nv/E]TWqTIT4.h3=>~mmm75Ofξ0P)(l웶v(Ɣb򍼒U wq<~ڝTUЂ<Jhm/=6vp/?W硤6 P}jXz5vIbjG4 \ \lNsKJ(ɛ$UߩsfL Q̊Ŷ}72kz۳d$€^ Ȩ ̬KDOR_J[X>zwj.Ɉml-|U)Q&s}GRA07(O@5ֵ7o#lgPs q ح'n AgSkwY{&VUuS4,TDyE(;'G6$㐖i yX%n =*4[c119T}3:ިМPp TX_Wu_ZTKTӣ~)^wr Zu(fMZYeDͅG ٘1cR`_]xB+V.GJ|pnzyWo{vТٮ-#M|0Gq 9I؄=< } 4ܲUTOZ%JG9'ekltK.n|=˫)bfDmLi/º.m;-h#T}tFp!fPIX%#TS]>v5lETYxc橂*G,B%䖟j.kR3=;qgtUF?1%oj@H !vih H5x%QTR5t`]m*N;r!\71 x iĖ-FEbGfV&@ix;>a1o/ðC?{ sL"1MN'D"kM#azha`A`oWYU׬3rI'-d-b^_s{6ʦpʍṆUdkPĜ ɬarbs,mR2l}^R_=%]1=Onۧƈ2#?yh|ERcҏhѹ}ӫ Vg/=x4mjϯFԈӰrKm#fPiEz`UR+ tr=s4\2UO٦g`j}TҏKC7 zeu4*-L/:mpXF t=&'NY;KaT98xce潁+cwA_l46>|N?PG * ,73"!%jfx=RF 4/G&oz&UAZiz-ې꺧˚GzbBRKCAZGIWSxAi';+;JAus{^a :gTAO#0O6[}XKŝsWWٱŇwVfzOy-s! :hJP -?wgWG[>}u1F/uH'6Qܹ6m-9%shK/5%Bw f89Xl=ծH_v)9;n l}6a/=F3i0 t-ׁFN}{O޺tpëSᕣZngD敧M9C59tT=jq<#Lxw\Z1Q|i SK/n(xPz_b[x3GO*X`ΈbFC]Mۿ-ad {-1^Q/+|z"گ-CnX휼H#s=Wo@nf杀tfo?yƭcS]rੱI=3q LG%B ˻{瞠yydFڍެv ?9hy-qIrn}Cѵ02\v~-r37{—0 ">s{  SsϵE]*Kyށ%jk;0K>6Oze,y̪Ȣv-v9á'u*I!fAN FV``~Et>4NchwC^0Rܹls J)K(" 埐?БkRam| 6>o 7CmSW=s/]%׻D a5;>iUA L.$َ"&ч"˽ C,βȱm䑡C7P԰>ay#Pc GAk8XFwd[:eMq偫+[prwrE]^R.>8Wةctր omeo`Z.eu#quZGJߛlAwyT)"mNm"PvN>+Я̬qy;/ò0J([&J%L2@(=$yw^/0u?-kαɢ yucwpZxE%# c#RZˇdT(nZ p똹qS6 1 DLQ 0S,X&n]+hh4X|i 35BtnmxVePjo9n.[:[<5G=4v2qVcث9 ,\s+.N.#gI> W,°9b: VNe~s: "npk8"xdS x< 86.v !YC0uL0,pKҷ'Ciaf(NPۧgQ=2#ӷ{WJ/ĄM{{&+.gT$T%T&qg$ƛ{D|̜vr{Iʨ*Zn(5,k1Vj C s[C7s*Ee܌FC7ؽ 2SȾ$`I8<3O OD.VaٟKCym0P(;0}Άгosݷ ]_50_~gׇN"V/ m22+R.fV6O5JsLӱ(p94r Hj9'>#W%ԩqq8`)VgF}諾{aEy}k~ \HGD&("BFY1SP-2m'~qAETc҇=@w@ϊ,߼0<|&WuOO7.V dbF{IRGL?e[[p!)$$((8;.?)mU+z\A2!B،i燐K;N*W1o*Ja8\RPu鴪Sz6{kcT@d _KN7ڜsɧ3SۧtqDa9`&Tac7J;˺nwzy`KUtmumc(x]GRႦyuM[kZVyDdq{E1zKl`e_Ղ'=Q8mL:&T[K`ē:xŎ*hKk95@q4o!NccF:/,2O7 S 1JyPaF4_quVw._OM6`K+E#9 =5gې+kȭmV "cn?/<Tubaa[s0t3.knK4鏼Ws.bs2H΅QHơ+g2k{3kУVٞV֊@';:,di`Rl*x4I(=RHi= 9mSy= wDk٪e`cfP|"t{cgbJqч(q1t-qi^9kNX".FF0LѲ+lv, #!?E\$ 3RNEhnEbj932`'^ݝVՕRс!ҖĒ.5B:4< 8^PgKhshfSgtGnMEdqTm;aE*&L_sd/\IE=cxv%\22@nSXY2hj[P-mcCJ]G m 4w<Σq.DR 3O7 e6!6 ~I/[smh2?U\{]҇ 4Aw `cwkZ& JSTZR%cO H AmTCNJQr;hɥK6QU]ԣ Fi\`beo|ikF3 5y,Q"rsֆfU1C!} h7Qu"{f 7s  Vlcn|蟷|Qwa[>c㯷/ Ӭ֞TO*niu]4Ѵ,Vߎv2MFI+?CDvI+YwZ[JZ[A`Pc%g/CcJڢ[.G^ƌv-@fׅdeT) 77;Ur ж~q`JSTA3N*FMVC_l}iy}[ 9/6񣃅O9>]O:?mFރg(ƎW}YLE Y@Fga푟`&M1f= mjCY˂f\j^,J g ˿ ڡ9d'$>S!UXX]9h]G&R:1ffϨD=T EQ? f/Tȭ_|Cn[xn )rℶcks7ίn|1ܷ'ꨆf3Oj|Do~Kc856 )2#uISаԞiSM?nٮf0)_VCDм&HPy t2GN*8'fܢs]"b18S!B/1j59h @km&!L9A6,{~8/6jFC7(>0dkL {Ez0653OV Nj.a;?Nn')wZim~6u\q.k?8IXvn=3 !_c{3YlCXz:FJf ׿Y~`A⻥y#7@+~Ӈg F7H _xb{jYK% j pwTv"Q7 iXEVc*}Dc 5òC2mS0 yFBƁ5 XC7;#}#4m$:?lG voȪ$&1)MD~PFwB1`*z~!4 ,0nG8 mg3WPl Ն%VUN !"[/q|ǟ6]1 #lE? 87STHj:mae =tܪFkk ;<`jN G 2EO5?}mk;uk6(G-D6slزc5ۥ8fkyr.5OA9 YíO` !5B 7BT,qz6(Vg֢i;GײO<@?˭OEō§dfMn!L."4tkjkZ6ѬGvG0(P(j%.! 6p?:ü|g8ے =GP1\,xBw9NN()=KePhq:`ݬKE%D%6Pxlظc8Ƿ" sX'̱^%,YQcM!k7K}d#'8v-DZ^N%"\jlС@5_ ,6BuQ4v(9IMv' g*gۉh)-LXg"FUrҷ Dwv +d647 pIXΒ_CQWbhzc2]¿ᗛ?[ѷX<跮mq>Ydz0zY4t1Oӷl;f QD>,@E,3X1f4ڭ^s>?zj qlXϷvuoewo^C8cfn8f|cײd.y {IߧB ðC9)Dhtdf!j*V.~N0X؜4)eyƞSIQ",8E&xw!Hn 62nߺo[aթa)tM0-m _Q?]/IwVFM\V ^)rA]cΫ׉a%IOq}m6_Hp$Alz`*-? No!~#57rl!Wk6*%oOLۤ8vy'`שw+|G}S]2lN7& ؑ>{qLROemW٣@$.e%,EM Rw4p43q 8hꚻZFSY0ԘֈelUiMC+9ǔ |]@7Ӎ\|r#4F] pw֒gHXex°ˆ\{Mzp+:. &wR)~ R-a)haa±]ai1l-AF$a96|-[v|'uc7t\caq^ ?NY .@gAI+# W$`n$0Kd >egAj4fXRMH.cMRA-#ȃ mѝ0*1:&`lٚ t֑E,K=W-~\SE"y6%pwl! nl`iPlt:C'IRw/j#$R%^p47ڗdNY 3"9u;dRBEYV!ֻXzoP,fwXwu` MT{A GM ְ^6lCqriXjDx'ư,`.i6xahݏOǗeUq@@FHDNUWSrTwC9\i G-UpԨ^54̚59Ję~AZo~$Og?𥈴:Qcfb'w$UڊG+n a'=~Fi))"ƈc_Il$l5.$;MDى< ԙ&,h:RQ\%Fz)QhO!m|PV[+ϱ׋q|'wX/Ȃ bDBBm9 > 7?[m_fXuΈ āwZevTu^Se=ǩ;r2P(Hݫ nKKC'l7B1K ~;d̹diGu@bk8F t&X}#G KG{:&1xLQGȩ2gNk5@sEdI`F87 T "Ҫ-P2n)gQpH1"W(YS~EP^D  p|u58ֱd(I(5l |߅/K >Z_h1"p!~6&ۏ\c;O߽4T]z8+PqH(X#qzsonK?Z +}=0#Fi XܑjW4=•!X ǹ}ێSOQN[BtN@̦L@MJ+\=^b5*!a4aN5:qE RHCP < gfhIqͭϬ;HxdN8=bp^z6^[IoD?Vb(Ț86 !ԇI&6hDYW{cAv+o}M_fi$TS|Te%,Y˞^Xp"U%y08tf*,6P6NZhpjcg]foy}&pf QBx_$IŽ`Q^0]uxOE [_ʴtsE]skpl֭#v!uQy%5I\O(}]$d5M4/un|pI}jBHq8q|_ 8?u&(7"lF`YdL@Y@ ؇قo2 &&˖G9 J}(y쵐 A8 pq7{a_]ĉ%'z2vNF3*R}zQQdI C{&ڹaFJUH!XYdWvGz/"@,m&/ίd!-4HZ<~m`==A9]3TKgXr(;M]?W;ةPU wE-*~VQ-[wÅG=nKp<|?O m^o.]/vubpODn DolyGwx}gk[6|K?81͌/Æjvt`u@4=  ۾;CWQ ^bcPe%״'Uteo۟h7]*#y)(~`/lR iik1rQ;b㥙}GYؤdtݶʶXGJqnӎ#Z'aQyl^B<&n]v\؅ǚ?w_};_^1 6^ɪޑӁg?{'udmZpOevk>44[Zuj72ѻ\Z#yEe<yw)gWNMcj#U^YѰqaI4Rݗ\ݿdGE=!F/(Ce PI|(_ؚ@] 2DjKVlbYG۠,஄CNY&8p= 0quQn#v_aͦV4 i;;\߂%Ǯ[+6 :8?wΦoG<6}έyAt Or8yMKRykƦA܏&'+'bOJESZeuxܕTڐR֜Vgu~!imwچGbhς-ԇPOEF-5m#"]K2گ슮i:'Š, X >b`KX-s" #L[c`mL{A5PC،={U\o>pγZuΧ:}ʭVmy~i00=ΧFr[7v0uNfv0/y1幬8wq*'2̨;Eqb,r4>8vJ,;x*wϩԚkؿ9/ȑ ]r#@|=Fn.h wPWEa~؈l}5X윳Q80^+t7 g".+Y/pgݶue$qT^@9Dj`k}+04znqi뺊;_;|>1p6ɚ='r\d棧+3ֵ:S>>`kPf/ 7r~rrp%HAK-.ơmKw>S`;/z7P|Y"JxL4/) ,y7P$k+ȼ9y˙ Tg$i셅EPI.*Ch jd&4mp_ȷM<+iج%58qyXGU̸V, FasEgkb* %1CXJ4 1ᶈn\BDymdUS2X#:LØyG´b!Ṿ<&(#E6UXC^#*i[C~`0/DOh4KqSi_-A{T I\&Sz M<-uPmQ',B.ieDe#c$[`!; eFg!-#-פjGԽRA 5{#0y9knLLEΔ;ܖrb(kZJAŠl&jxǂ򫨋(~ :[]Wv^[gIq䵭YMg0=7 _-ͥg ha7⟊/>XC|ZM"Ef:L:KYnlj9׭lvPU.3)#$&VM-llQu1|/eYQG>FqŞ =?6&,؆uyӡu_\|(gr/c 1Q{_2w]Į!tp|J˅ES % :&-icki,Z:V΢$cT蠘P tWkAYnEСXn87@ÜXygE%E;Wوi=jہ[(l""OLj2u7PK%EOA>48C "6¨dQO"m,_z_P ˫M-ThM8W(윶Zq' Jb= zuKAh\v %X ! L۱/@G$I_!V쌍dGΥHkmX4e,hbm~5 |,HɼL10mPvٗeIB;Sόu,dc=_1ta˨XFa(0¡^C9n>¨aБb'emG)ҞhRi Er{~1+hMSÐcl>ܖn#B mms1&Ċ;x @|:e#>l,/X箟lWw{1xP ̩LҁHaT@PR9m\*j_)lcVPq1b!>XIk^ "Oj At*|,9#љNA2!ҞP5 `51r{3^D{13qQV*opgϥU O}5^P(W6I̤aDV[t*W m2:sY]7IKZ/|8C\ϢXA},A œR,>"Pib7I+kז+CnVYbԎ3@J/\mef(OɸfH'մ;H4J׶E.t!*٩V"*U u̕ت >4@ӴrjO`O.G*<}qsc@8 Rka(W SU#9 6n`DYrdw'6/B=ƎwfH2f`r6 BO"霴@0,pw@ыJ*N ծsu2Ĝ!hz+#P&BS ~ҠM x9\Fgũlj$f43eҤڹuG^?EG  ! (0>@AZȢ.E Mn*F#-7pk;*:l bRy8^=$}YeX*J1IzQؾ6X4*QՂ]tjӉ<7Lg<:L<1$47MT^l yO'|՟# Pﵬsl~0C DGg.b-`r3p[4A,"L-Y0k8:p'43fiYB 3OU9 xLź-bό'Wphnh 7W>'۹Mg8TƷ_鿖 u翖@-Ӝ5d nS1d)6źq [=߭q@kƢ @i%U#jZљKZ.Mm]}cnS:}Oܰ,@a wݳn`-]Rk#~ct/ĩ &'1C͞J0Va]ODʂpS6STy ds!sFsbMmӥ>qdův9s,^S|r#*r;)kĭ{ vmſ]^+Wbj׼q.'@'VYj*Aӽ7>Yח~±kDOu+r,-wp76"$wzOg߭x7N Pi734K}:E/[iߞ-#,}mJ6IXw,rU~D_RHqvc$NEGVgn#n]dgz:k !4z( @Gք[dY9GГcpb}3ʎ+ӶI+~>쏐't8rN.ZzZ:+/ػ9vTD"y{aֺݴ"n{z}3բЍBINo"wu:[@X3voV~nwwmff]ltၵf[hm,v/tÐ ul@횖 }oŊ[bt{37.vܔGhsW5 _wx+DojT;e>stream xsv1Xb`8L G10  endstream endobj 46 0 obj<]/Filter/FlateDecode/Width 28/Height 11/BitsPerComponent 2/Length 76 >>stream x[ Z5uՒLPaK$Eݖ @I"$S0ԑ-liVch۪USCW  xendstream endobj 47 0 obj<]/Filter/FlateDecode/Width 715/Height 279/BitsPerComponent 4/Length 5191 >>stream x흽nJGr` ,m|- Nҗ 's|_tWW7 t10LP /4h~k .pNy{^v{أSރuý Ge=p/;=Q{)A`:Ny{^v{أSރuý Ge=p/;=Q{)A`:Zߏgf>.wq+&?~/Rr7Rn[l՟r5DVl96ʭ֌sMjjH٪OsΨr5ehU(7[3P3lnMl՟nU vk2e^o9ke`V5P6X([0ObMl՟kުy >ߞs)h>#e\V96% |N9M)o5_SylSrp׺ ޳TOnRo9K&uiRf_Y@䚷DB5E ~ˤ Q&=Fu}=,Y(%"DsiQ՟k*#e(eLl5}=,Y(snEe)`2ꃗ9dԢ?'׼UN9MN989&8%8rNoӮc)?Sރue ^0)lca'c2_ԓ;Ħ` 6X@M,Fw2n2I΋%DireI(YSQE9+ty?M7D7)dSћr~d ('7e β3t3Ppu:<ߴyY|Y8-aPĦr2OaG6 +_D9F#e˙.D/ ..X2B~3PWRe'ߧwz"ELfD y6@.68*`WIZe9PҲ=m^1 E 63sPFH?"HQU?DqrG#BW/ H~B!e-@UǮ*I)P(35m8N9& (RFa\4N#2v4Ҏ)#  jmk#"ј!Aw0UcvVDtx/k+ey:UenM1Ҁ5k QVz)eZEFʌ9N7#~|}]7gW1-8eYqL?)'9Pg%_X)cb 0Ve{z~aOP9VʈN0LYrF- %hW7x /p{|q9CB^I=NRF3)r$ysʀ𢣑6}_`p5DbMb f@B"/O Tt5VD |>|Kre9AL{I?8K8fSK|L<k e1 ,Gó $ NG-x(/)'cUm>B[͔9PC+kQJУV&/e< 9 ;GqaxVF,t%!;S˴8VB 4fp(RCH<2 p#ʉmGy9|JBOPv+K;!N9j㛲ڔ)>.72ƧU?B7M-k. "YbHpRpJ$9wc>*e9b&S5q@ ,T]m[rm2ckG1krq)~f'^/(KK0)k22tRTPP聽L1kz0V],Gy֩.rLp֝fQ B٪*uQ~bIu2j};\(Jyn1'fM2oCeaD͞fpBM2$} MjG uYfU1+j%) ^jA3y9.LRe`\2Sw\՟2k5E ˜*1eN Pjng(-2kuƽ>!A$[A?hƠA2\R^xS?]IXrWR(52}ʣǺrro 9i(=irߥX_ǀ.B&RU{PΨi#q9Q{q#`ro2.ҥ%tRT6a)69_Z47Oz78ED_lsQܜHY<'jdͤOW*V8_*vIUTW8$p/ZPKl_wA`kZEo̷".NV28Z,RmꋖD8:N˒Z׆ؿ~eŦFlܩu*p@cR"R9cp%ߐ4RFZgN9Tw+Đ*/~SV2 E_4F^2(HRƇhm2xŇ:Bl),;J?@YE;o ,;MB~t|dʍO}#5S_22*8l:`~x]f^7{ ݈ ƼwF&v`IxX 7Seb?6vkU/1XrWPBǦnMl<2>\f Z)I ^_FҾ8D٪[} %w|QPŚH٪!e4,O<%xW˿!qlկJye> ^F4`>xGwU_4/ORR NY.Ura[Mr2ɽ\VzӪ/ƽ,ƭ.bś/D}e'qq/Xx~=i\Rޤ'0 |5iamq/3V?K 45N씛hey hf<iznsqXJOгlzB-핀vN-a2H/N`,/=A1Q^02H~R3!?ɁC "$\R5ZaeSXaǫE885$;NcZ&)賔H (5Kʸ_Hb[z)Kj#dgFm3R@51Qb 5)׬^D%J32[rN96Y0rf3媕r2s͓[T G{^V|iwVv/ ѓ527j,\?)ƧU {{Uu8ec)oV)+POaSbOC.cs/IZ,^ѭmMʧw\թ|<8Fס=USQNkOW<wMgZigS8$PA}֫TP%uSYNy'SOf:12<4deGGiG绗G |3d deϊf@;Y+ gWg p+@]SE)qvNy U8YD+ gWg p+@]SE)qvNy\lLJr|b~o r\R8S5MNyHlܩ]̪S:4S^pe](s_Fc /׾wY)W(x)gCqo=u eNy-'e|H^^3R^:2cջ ^_FveDd_]]/Filter/FlateDecode/Width 498/Height 239/BitsPerComponent 1/Length 1610 >>stream x훿E-8GԒiH2 !DpV -d֧ .BwvWTa<%kg~_UuǁC^0[o(P-*i)qwkw޴*N9 F;>8|R_ϫ׽}?ubmU4%~b|}cx;.Z8}aU>\4o _YvK;PR/NqCU4CR+n ~tA/x Cu/k&e:x+>^O'm]_0.'_{-.xG m7g]=*(棴ץkݤga.^W-iz&eb7b/>iyqO.T-QLsҭ'^{5 !7>xz<\A <^֗(Gn'=sgEu])ž~{ymӏ3d:QoG%]s8t8Cl{lۏ}=q6^}=f1>+ltyF"8C6NO1_>\4o 8E8j .ք=6lnL,onW$9qGeAk|:۸zqUwq5=rݐg=\wnYau+gj}(G&NhK+=b` K݃, ޭ|.FeW:si6.pk[y%yX ^2ʑ5dvpI,6O<}Lg#O_2[<.≧/)^dwC >Gy#?Ex/ܲJ#~γi6o\%UǨbܞRҽ\!Hs+.y!HW-gv ώ;8!_)}D0/ Y!8a nDhXg+!H76jd4u-.wߺxCHendstream endobj 49 0 obj<]/Filter/FlateDecode/Width 498/Height 239/BitsPerComponent 1/Length 1498 >>stream x훿nG P02 )\461 "J)]Rpa@J> cD(|svn$AB&g~..pu "iξ#/2m.m rp9TÅ#jG1(k_ EྋCYl+WL6X)߇8\< 3:>L~ȻoQmfc~Cv͗C^ϧtGm e9T{4gq]CϮ[DZ#& ' 3S硱J%>7-'-';酓@-cm\r;eu2&/MKg?u'.)QU[id^|q}vR \m&rj/qV_s 2u\Mi&vCZ8orJ$樜=LdW;mTJ+Ti_JPx/F%Nέ؟^,bu&q^rG4~E.x);e9ov)˼@aryYeh9D} eJz36FN8Y< Ջ9BivxVR_.m8Gu7¥xK.e9pR''W'.ށU0>stream x0 EC%҉[ȍ#eA9xۓ rZN[I<4jVǚTbKLx_B>k!Ǝ|D^_jւD&ieK#y,ݵey`.?a%s_XgfeH>w4{X{|u//OZ'U|˄(5{޽_55;ߧAs}|jy);+hM+p6{6W!CKں`͚G1em /OMx"^1? /O$+gcx|쩼^BJwendstream endobj 51 0 obj<]/Filter/FlateDecode/Width 604/Height 183/BitsPerComponent 1/Length 322 >>stream x0 EC%҉[ȍ#eA9xۓ rZN[I<4jVǚTbKLx_B>k!Ǝ|D^_jւD&ieK#y,ݵey`.?a%s_XgfeH>w4{X{|u//OZ'U|˄(5{޽_55;ߧAs}|jy);+hM+p6{6W!CKں`͚G1em /OMx"^1? /O$+gcx|쩼^BJwendstream endobj 52 0 obj<>stream x 0 E#1, `H6]/Filter/FlateDecode/Width 628/Height 183/BitsPerComponent 1/Length 322 >>stream x 0 E#1, `H6>stream x풱 0E 5kCقJfPP2)03P8nY~,ۘ[ ݝOZA+Kg=-g"fveWWG9U5#'ʇ1MpgndFXP^4,tHv@Ҁd@H'````````endstream endobj 55 0 obj<]/Filter/FlateDecode/Width 270/Height 166/BitsPerComponent 1/Length 263 >>stream xPWo@3֣B5 KG(BS;z#ݽ?l!@s_w©Ay7V4Qendstream endobj 56 0 obj<>stream xAkAŞA9ЛKm)5W=sPד$͓vEi"cOdwM#%F)sfݝ@7{oy _x\&E3x 5=^#?pp4pJb91x78j+25#[kwe{Hu=2wއN޵j_{vBll~M6UִoijGvSm׳Qw Pf?[Ϻ՗Wϗ=FU9i Z =g4eYh&͈4`Á@h 4@h 4@h 4>_!K>V̏2P-/gC>gtU?Ά0HeUgT S](hݳ9@tӥY֜EA PLs5:׍z;9>C_E }'`e;<ڄ 'G̃FXħdLšhQoOK_"R۽G Zi{ɮ>Ȩ%"2NBZB"--멜կBgM;&kendstream endobj 57 0 obj<]/Filter/FlateDecode/Width 338/Height 228/BitsPerComponent 1/Length 774 >>stream xkA  zC^jKz衞B(:{D"9zݢ4"cOvM#P#u9Lf0A!dޛ헗ow`YQ 49 c4  { !L#>Qpn4^;p52A9k9odhowj٦6]BV|(k~`vMo+F9 j/B]+87/;w_>=MVe> XFaYbB|C|aCaꈏ(uYL}Nz|0#CdC M*r@9P(:b7DfDU:Rφr@9P(Lrc(Yk4@^n--pYpv^؅4zzݴ/TqyAZ_yT3l\pZ휽i/U-~)OБ؀z9endstream endobj 58 0 obj<>stream x=K@/ -&.E"CۡbHqc>nBTƀ/"tOr{̋rs=ks)Gv[JMxcA rULŽe#D'iЖ.Q4@h 4@h 4@c Aendstream endobj 59 0 obj<]/Filter/FlateDecode/Width 337/Height 168/BitsPerComponent 1/Length 787 >>stream x혿kA/`'&K; F--DR(26B8wXR b!(c=f7^r"9؛Oo|vrD[yHzRHŸ>QoŃDbU: g2$Gu 3hBԮuDa'LtO9s~xᇏ3OBky*@*[|#=z3ܗ%F&rFϯn%mk4 aGgh3>l Tsqm[-λI4/?}VYJFTuHwvJ;fG"h(>U`|F2 |E,ct|A  Dłgvf0 :?N@b \f rh)f!kʼnjWA)*ւf,5@2ÂđAy*fڢ1)9iGAUxQhZ@*:Pbo+*1Vq(1R1GjFU/FUT+9}r-+r2[H@@G H =fo_TU$jQ;}I*cOвk[  yWKl?`kw&aqmBW7ӯlme,xA6ڼY:@ͨSH Y퓫B:W6 cUn&~ s1jT 'uMؓGrն<<`WmQ0LmvdٿX S.VnwQ?."endstream endobj 60 0 obj<>stream x1KPǭЭPC~?NbDC "]R:T_7)󒜗'\tݏ# IEДa܍ *:v'!8T"| }0USV\U1TՏocT *8-C_oV~5:wG pqA.E]n(n%] ]uF3zZ?3Ϧ.e·#!unVݳA/.kfo<ےZrN~JGbP.\魪@IX aƼ&wB毨NILؚoB'S%_?5ȶ2@ d 2@ d 2@_ũendstream endobj 61 0 obj<]/Filter/FlateDecode/Width 337/Height 168/BitsPerComponent 1/Length 1020 >>stream x혱kq[HBtȟPp))Rl(&H.J) Jpn(W)r/qZz˻O^w&Dŷ #~OQ^/rִ܁ ,m.@]0Z*!6ҁuP%;@N` tNz@(?aBY+Z{6'dU15cVi 4 pRE8D}a;?w Lä8gࣵf6Eھo _ k5^[gUڶ,kKCSV uQUQІ-X(+ڂ_43GǎVdUZnmQdfEHЗHkkuk#h6^\u )RQqendstream endobj 62 0 obj<>stream x10Q ]/Filter/FlateDecode/Width 289/Height 125/BitsPerComponent 4/Length 529 >>stream x]r i B/b1$MJxGI lގs;anG@K>stream x}Ti5Nָ q$x! ,HB\'=@;XU{{{?:T]]z= !0A7G  lM>4LNC<r!^<^0>c b.9 b.1y!x< 9@ l5q 9<ǢX,7 V-X!oΗ-jc3L\8y0'.. wpOuHd`<]w<DǰKPo7?׍O"4FB7BZ r NH!ۃ& QL1a pAfL9OⲆ?4 hi DyA =4BehPÁăȣ1$ %WZUנfd?#hCHDOb!#t0p`ߧ!# !#A!4xTaiH'&,O3' dcp]̞&?=0x, 7 " ^@S%682 (5pya_@ rcI3Aaa?㥿?oO;p;4O(+7jŏc7P]Af < IX^:Ca}vW7>dCgà s C̡A@`TfzAnP3o1CrXs|v\7DB #83jc  B(h@7pt?sߋb 65H}TK!&$BGM?{9 # I@C<07uCX<6a{9ޞֶ^}yֺ mVbpL.1@g]]S- ] m-M--M]m^>"j@zFm1: 4oę* 0&$9diD~:H޿s߉5}Cl mHC 6chC jG\ILz.m0 a0}xv]^g8<&snonwnv0uJ[Mv~|PLgt0X=L0=&vz]]S5>yӆ/[kZۙݝ}ށ~@Ib;ÅP%&~W+4x4r XNzFA;^ȽGbbx'G'GMrwqV Z$ހ cnbĒ ̈4>/A-br{X]uu/veY7Jng9Pp`ٽǟ]iKCǚo>r^ͭooy~ËT{㛛u:>7C#TǴ ,߾*g~5? P@3$Ȑ<_ ?ηh3n'푿s߅䑏Y;ׁ@ ŷc3R#LAxMg {Ggwvvw6~}|Ņ×fIZ蘼!ygU#iqsy[='>{Ӈo{֛+_=U:lnʄʞ=8ŗfzGXRX!QZ9|RԌD}lW| g8 |tr `TH4PN?\!؀$&iMw  ^Y A|Q!$Hxˈ`º83&w4y .慔O^b9O/iRhx~<\'+M\wD3n\}ߒpP3a@$@C H {5@œIz/%؊?ATH@v1zYΎ/ou귲ؓ1KUϙ.gp/JHBMi]jJJZsœ$o|icw[@0b@B xuۘvMoev447t6}kzc}{]cw3' z;&,B).xwȖtr]oyɼS ++.̝"|Q*N˙$''?:Ԭx]RFY ]?C=oJSO,'m&GgFzɃkj477tuL&͢dL J@0r>J߆PVd}CcRg`mm <~6Cg;휮VfS}ǧo~yGf[  K,Vj7Ʒ1j oٜnfOGgsc/O?xP^S̓n~pacO- msz Pwyq67ȣu39-||VIĕe|N5;L"óEf U?՚g\w|5Y`w56n?Zk-onz U͔/(&oͿĄUyq뗷/6t~iiuuӛY+־SD[UX_<3+ 8\ea[>lAj d& r=ÌVFǖgz^`xΚ&V7q@]A/89=7<yJߵ\}??qxXޞֺw o>wW^_,K3(spd Rޒ1n.⩾ʻ]BhV(SJq5C6S\K+MO0ϛA]YFu^?MͧMk߽kzzVS+ gơ|pހ1jL`p𣀷`6712kkhQN"Cx`厄A~V7ӷSZAڽ/Op\=i𡽱`hؑ3C͟ BH7_=7W Z+.gnFyEO~>~QW7u w.]:Q3S&]$S`wB!V("i( #SFA[4F5V(JIN*$S>E1ob8M'=X:i#)gJ=q߼o|q6?SYwցf?Tbxd˔[2 \FPW>yzvg{:II.+ r!__:K^־3}ҖϪصRnUnMG}SoGa Nkʿ80 kX\ȅ T/~{}vQմ_oDs~l|j-Ϩ]z*e祢+ ~=}Sn_?Լz/>{/;uws"zԭkT9Ǥt龙F L.0>6 ÓL2*YkXRTU +ffdJfzgx揗/_:2o6mnuKNfRQxp/wTvO}yu~knh8@ d sY=Hlh\ͧ_?ՋǏ)/p؛'m[X d"J  ymo}s~Uv5'e1a*_'Ok|Igr8 .R!0ϒ=cWuSuCI雧@hNf]muobzQ2F{ďyۉ񦤍v q vWbgҚiU^;Yq;Nݾ~ޕO}Iz%Y'cN)&fηSmQF԰޲]mB4VUv) C F;V>Ϗ`Y,Q@Dx*9vG nC* bG=JҢylYVrWX4YU}>w{<'^m]ua5C $-?חN>|aFQTP{c#=~^~jljieO 3WӈI}ˏ|x=O=w*W6f,QA0^ 6?gLmFh$1[x́jq.bF(~:p) !lu86:c۫5^?8z{bt֪qpreeIuMRJ񷗏jvzUĺGS%\*ɸZ#-bO';zYq vbR6(P-Y4L'xC5Ѫq"h(ݚ(^_0P T$&j'h+o-g)k!nȿ~G?ɢTB.];(C7^qLJV jvKUX[4676upޡFp7KWE1;vWԂ)OΝ|v/>7}iCIofֵգW=T}@$ ҧ[ƸR,vP#ljz 3=*v9vU^ܺ͛ϵ _dpY 6p)8be#XC7H~W9„C|`lB?ldIy*vJ@t&hqdet*tO2>2Ÿr~&>_2_ݲ e }tܩYNJI62&bFDrryv:Efپ&U_^-?.=^֞'O?3^V>Lxs׼_y_{v!v/4%go|݇ׯ?y-г=ǗܬH?r'd*ۨ$Y+(GS}LtRЉ_Jso=_ഷta3!D -A ;%L` (t bSv t5BlD6ޯ3}@g dHA@!pE=~^/D@z>FU#@i14@4rTN~;DNDc쿆QnU Iob!B|~#WFo>8mbtHJEI(6F4n[mmP5 ErNFvfdi6QzTQp4<1Bq|i4T{4$x{X{GqX#H](=h]0 `%,ڡ"tbEh Zڋ<ڪ eYKTP|(F:HXA|BQ4G-TP!juK\8WCݻֺ5_>jʸSQ f[cul4j'eU+Rn9t{[OxxsNM 9觉sr'x)GͨM[,4c/ݾ:#ʡ窞8E svv7Pl\_R@~AM س|*O|2KJ.9'o*_BWrj, 1KFN^nn&rqJYJ ? 2nl}!3#MpN2]=]ݭ Mk?߮=uZI-;gXZBB_UHn~ʭߎݺvS9vrGj?W-ʙ*AGSK8`9WJow@ʸu ٻo\S4sdK\XeX:丩%9*Ƹ(Ǐ tS Ջc䢠թ;oTfto7U)cMIVM)Tƕ~{ћ/Z:ZZm 9lY4 sHϠQF32m€N֒s\f-޲!QSxt~#4"1$XVozrcH3[ذS#id:aИ@F t!O_1NUCClV+Kǧo_{zĽ/=KvԨs"֟ ϶iV1øbadÒ +`ˁ&个Z讼ׅg/k/ABRFFƱ&d T {t{j:h;@iZI.* N1vrѶraҁ[4z5E   HȄKIJҗ 5Jut0vMuTUUz亩帩M2əd1(yYdP^!Sݶ*f7T:h3No=ܦlŦGV.4.o= UqLv y&.RӜ5VȻ|k }- ܵ]%*E4"k;ͽ69VV*6*Yv**N*T\C`s6-( YW?qב󕹿|p__ mu qgAZ/cR/wP_H@5$搽SH -#8*~xݦΰ0!-7W]3B+y<@H$_fb7;'Ap15̿C f;p!7,&ZɁƮ:_ęC;+"W+_fb%\IBm:Uؤ6sV@jJ:9IG =!Z Ekh*TEBRGѺ L)121Rqr,UMUIQ3 2 ciWuRSF!:l+^]tUhN# SP+4p0CPJBrzM \O\O= Ҝ4mbUA3nKST-F<)@*0GMBdR#..۝LWR)(Ȣ2h h=!Ṯeh2byERh(AW Зܥ/KO(\?L f1"Mb(VE)i+Rc bC$v[)٩3oiid{K,]scVN,aÅ w?}~Q3Hg ؃ҞT5YdS3Ru!WcF@f$%H0IԯFH!%`"cAr$ *@܀Hs5e@#kcްApĎv7%l7}@@'9؄kHjgWϟK_;#zmZ =|ʗM=f5ӎ,E+`R2 ofZFqDIvElKl ,܌z?׬da~NFjt@ QB;)(@o@`pDdtlTvuMJB`,F @NAt@3ɇ"4@0h!"~BMh+(PCPu`T[L;7l!c P+j^qava-wWiGή^ Ul&Ov5f4pNJ~^I%~Gf;^zbIx()sdI$ FZmD 1ʒ *E˅R$imӒڪ)|q4OI#wa&|N1Ro_]z/:Zw$+kAv$B`7Ph/Hp_ `,Y pfLc| 8 5`"zo~xsH zŃSdtӈD2WxGgj"^$@?yEb&  l\4 č8p\(` $օlHшCܪÄ԰iDZ~jWZ7v6v{1= &؀0POeM^fu1ؽL.y MF<@2'@>8퀟-{'\ .h 'EZcB/b/R?CSiSmNL;0ɶϪۢdxՓj-M,S(e͗f-P@`Xt*L4wj*h닄GJW$V)D3p@`ǃy")rsd݅DSٹflvs/7y/֦6 Jm@'ӈ4tqg - pP>gA,зDL9= tH#d Џ" ,! A5Ѕ4ET4һ[z{DꛚkZ[ &G^چo--<~wnCGw||K͇\)P3շM$hc݌pKcʃ, B(x#[夈X?3pʑa,U䤒b'"9롐.&"*S, f+b+bb0l!f!’b&b)n#`&Ǘd#f$f,goۚi& YKff$YK[$$d3ܔhVr-⬨)4DcC-l7PiUNMqEj*EU0^"-HZ+-&kD3Q Vت)jj%b%h.y8:p ijVG87wQµĶ!%%k o"jISvP̴v@h{\s).4[ttn#~DK$D+3d+t[dsh"(J &XHCX?B,&HIt^d\;9O%<3 3uvj+joIUi>EfEn>Ucuo7_|]S1zY=D$%B 6 /E"9 8~b r ɣCOT@W7d9P18>mǷCtJlgBz&>blzoPe6{ZA˻5/?Uym)Sg?!qI^YK~+-i^ڳٱ2Om_Q/~YN 5A jBǛ,=ӯAwcU4^?ys=^s=N 2pd A*#˷x@]x}t^wg+I9ilm閇}9˃dc!M/V9P2H ,K\;jR 87M0IKWLqP(3K[x\0xf\dDnc)p$@Bo~dIF~9^&9fyV{hŞN|&[N+O?K7Im|lFJ|D!~0e.ff%$%Q(N/^o<X&JEi(\N̍rj ^j4*}5׆щFfa|d:@GW'U%J*X4PԠpceB,㌅<4+,{% vC`%boedcڟmav-5%B$q"0|'`O2h*4&̰XC`T)&j_N^{w^?`ك˩Ǣ&ޗ`{Gwxb7ttvu{M;*a tt4wt}zCFY1oV[EI.Gvk`IEEYQNzJ5L*@ B4Q.SdUmAdQh7Cj/j/ÞJ^G}OMR?;U렷 ĝ+)fxf1̫42!0QjM M( 8]"Z+6m(DY$ZG:X1\)B4A?ޔ.QFϏ|8RvA b^+g ?&@>" g@[atw7gCz,YLxe%=ޡC(Be7.$'3Ä`Ӌ78QaN/`ǝNOo>rׯk=hyUsm-u7~hy[%ٻKN$%L2[E.VBdB!~r~4_ap@mWNVYpv.CիԎ)=6^ S L?<AOFi؁Jʎ*Kl5P 4fib ?z]zޖڮVhFomf˽M/Ѓ: 2Zm-Vh<bwmN!Eoif44~z˛ۗfg,dD}4ڠ%`L߂FqbұV* =0SH X[$7 WȉV+ٽQUA]/w~n{o_<{G*?DՃSOϟtJ׫nj/{?~ W@]_ __BO)Jk'i~XC+0]"l"U6c Ŝ鶧6ͬXW̷to VO^@ =Rfڥ̰Nn>:sMTDoj\\o $G+Ř&[kfeiyd}hM^7,GdkJ|h 48sCA(ȍ0 ˤ7A\`q!7 宴괸/ou5|w ^4F(,[,%(P]y&~xDE·Fm 2Q 8{84Z|j:'jV*z)y)Q mGScaT>g4cL3JbZf~h$Q^QU }^e>Z~:fYg{dɦ% } /BMsVKtPb%(YJULb6>Tn͵AN_A$DM,JS,F_:[2yD R;lw$x AبvF*D*G(l* ʣMڂAq`x94JE{ ɷIҗK3)u0`[+chTjcxQ+5ʽ`6phJೊ6? CvDD)ezseG˶}$nIڭސw6i;iyһ#yos)xseU=s˼pּUφ~~fn'=-hJﵑ뤘 l5h.T Sy\>^T;놉~9"CgO̟dn=_ / 4wGK][5p,@zrlUV/H\.8GyL*@_QHSJSS"1O[Wt&;7M .n? xKB>vN?A1i a(A [ ,H4"#J!O}}]6g/޼gָqiz:)F2ɺRiJ*/s`^lL..|OԪ,9D[@'Ҝael![C:R5iZ:n=*xVzֺo[Oα:|i&'ӯj^q~6+ FKpO`G|ĜPƖDt׬Fghv(mo`2¡&B(X 2gB4%#c d$DIA:(MaqU^GN9:UzڧhI==zaf]CpF#5Ri eef9qP}-DŃEH(Tt$i2 ",bDuQt9udf0k%*zIg;p]"%|~Z'$CBh'E(X?"K?m5d^GB'B'+p7ۃ)2r~OU0TifkC=9SLUϕ#)X^0N #Tv+l6PlZL QV? Ij0BCAR1_Pw?PR?|r~U"+l*0 lJoWި%U0Yg|l 5ZRK~Y,sT2U*A gj2gaFCyH^G"p5qh _.J(Hrhe ͂4QHldnn)z|ڸhPRr#aslp- B@~P⪿St"={vrE4G}nNJZXmۗ=A+G_rw:S{ S^{mmXPẀN OjH$ԀM8W@dsxC"Wa# o\ \jÔ}s4k%N%2.՞ VKW{H;'wdQ?NM;=IT˳U8=IU:^:&ojQDAb\qэbT#4C2%F).? P M Eb/f x| tɓ 1Ew#Q*@E6HMeU5PEi+Ev &)kE7KHo!!/)"FR@I{@Y]g˔;$d:C(*#45FǸ .m8;.q^$T;/|cu 4g91D0N._:@~bǮ>Z/\)ʯ`xo|kGU)c"ܮ[tNi/.≒)Qݫn4񲜩teb*4]Y!7.1QL:BwZ60]af[hD'j4c*m zT;hw8L NK5:vko0HHP3ߛ7Q{KtsŚ݅]e# xZ5S9h\L .](=Xvj+5~vM>תdy&SAyR e&K3%Jh`{y>Y쬬}TIOi>A>I>͞'ip[fwpEUCnH@37O%cQt0W` '-(=Z%}|+_R /"mگj-G-R \zV# yn``q0p/|wi]hEpfIBzq%1> <  t=y6y#rde{v,c,Vؗ ߶_#V#y8" }U+'Vm4sUV]ccOw>KܫB[W#^WM|D'ri}F8Yby;/ُŇtlm>q5gJ]]>RiЉEҙ\a:WxhK-W=zs4FkU_A_}HIWK+r 4bnR>)HqVooux_Ax,1^TB>VGmcple!ݹj♁7! 4_z;OsiWO04t="3h{"־;dZ–=l43.up/1)frIa_gd2PCs%ȰϽ*:x>EREl*T8V~*pU/Ņ,5Jnp].יO^:rv@wv[ 4,ҧm F61joqvz{<=e.xpȆܣe$[g*; 5c9=@QjsIUoDryS(J'd@8rj\B eSM'0>r,~<|辫SWf>T;~W?+/ je9yo߸J54D=;>3^w1:xd}+sJÅቢ\Yd,  M'VN,t<}hbE:r <c9BS˔[>=SbcvJEɍǥ0O%ʍvyS7G3D>y^8y]ѫR0,8NHv$W =߱\coTQ6e|Y6sVF]w枰ïz\(F{CeWh |0&\tZ:f]; tGN,$El>WpưϡE#KG)NT<:LqrUGV\&YXTM<\_ZH鋨ƭc$*]==k&>Тz-d@7 :a"(ٗ:Q"C kL'YeBJ*5!҈N, E (l|R.|2An<, (@SPJ7!-r y*.nrpu5yWvV 19I0OHA|V-@Vlo`0_s6xA}0Ovh(NrTf˴hLaņ ǪjNZ8peljeO\smO>OOΝ;EXug+ ãȊ6vy5_;_?ܯzGn_L.0ÅCž?(gpROT '!Ątz,_6/+?CM{.0.5@eL' |S%ѱXGWc7|/ɵQ=~ ud8=RưưRPoE#,1%]aIOT1' ap" (7YBOD4u6gWVPj3Y6k9=kCM%P. T*:>z"nΡ`8wvU,!M qaP5ULB'+R]m}>s E̖sUa)XgBza=?؇ }VzNôKmgrry-7ݟ([ [Ñzd̒Ӥﳘ1knd2W1Nd"aO|oϯ_jG|WN_Z?Z/ Q씯L6)YIOH e8i LĔx!R7%I_CӶ5m.~ZT^?(o)J7HMRPj$5 q}WTfJfXۧ'i |"R+?2Č  ࢊr2& L޽ˊqP|<ۉ҃dOG;b"ڧ;ivv;d kuk݆fBU#HdOcs8 D Uo5!4 Fc¾|BTB:׎T;u7&O(yv/];:owahWAd 4CN.pM|Z!BJ6xC\{gTWσ C'{ ȡuz%}Ȁ cqhԖ ɧ~ɬ}cZV<ïU 덴3$;2jL8AE'|:0I %л%Kw죯`^NR ?oGwu9F_u.p蘽;o}^?ϟZwؚ aj6%M$4X%@^+@>Z<9H @#"}MЙpgs]eޙBTE=d@I`Խ>غg։ksB\ܳ4N!j$%i jiw1&/1 ',*^YoT7@,@6L: Ö kl̪lq9jjFqJBmjM:|,MwxJrF5DW_VGWYX]J Vd?dh]%cHE 2}a6D `QldFpxC P54zkksFfhh i<"'HP^@$-̤\+]Km y|l r۾ྊW 0;$'#HOӪF˝a+GPGE+D*|HGԼHUp†?BnH"v( {B,wEUo W"d &jA TZ  eR{w:3??O{m re)PۢٗxO}KOu zu]y!ktQiԡ꾠0~@$8 gһʋXRup.((L G޴3Sȱ>VDxe&fQտ5'stGVzÇVO^|ڼ9*˷,=zETiHdB"W{\*~^889XdlCe>uK]"4v\ٔhG=!}m7!lC&ͥc*Ƿ ֟$uKv-طrᾕ fWd+ 'uwB=9\uG.W}9ѕ9}n]D/ms+qDS;ᐳ.8q~gǫ>یR@_/DLDo ?#Hvt r&/.*4Ǜrqd5;duzaNءjBC p )LeD㇗$-NrCFᕙoY;`8o6r~x9|OFkKf,=ʣ OFNwvFf*ӕيh&ٝuD]Pn|pªK..LfR4;žs 4Q,#@юw̷;F39q瑌l0WJiqWkwk+E);uEѥP}Q3jIq 6N]sY(ϐ.u>S3o">\gA}]OuУ錙P0b6rxYТ\izwIfpbϢœՋ;3%t?4*NO *BuG#b|l-#Wyn4o]:N٫*E:‰('A<ͬѡjzpǷ/?#鈋a 79SZt`KwW̔drܗΈ#w2Ca:){/@vYyQ(٭ȓ'8 ŨK?6>ՠjyQ/~Ύ4y}NT}ۊCå]XڃƭNƥ4njPK@KWWIy@;I";}ax&]ir]>:N~&SN+"ߐ]LE#+³>P{xE᱅|]]AZcUgKx=ɂ e2ab, VYPf2gWUz̑Ǯ(=`ECsN\Yx|uhϽ }hB}uQxf,ìٌkRFP5ۭvcӴͪ_Z`_+%3w2lc,"ZOzs^ٞо({'VZ21[UL02y:Ox?& S%|Ap(eޞ¹=UFfnj oZt77k0KW+jT}$0mr5IJ$Ƞ;|ҡneC9"f>tW]^ppqz"Ī|t`n;uZt(%5:%A*9nG: hQ!Xḇ5uZJjyϝ?*|\ lĨD:%ӷΝ&/<]#vty9ψ5䌽n X+FvYVNYcq4zd< .k\o0)qd~f7JjSWvUE{Aq.6͠USQlm "UKnLU(zm($z"y|QˋO4^wpQY^vc-/[\ f} //<ySW, Pj܄uOJۢ k&a&n!իkS]%1ályeWT\ZwQ>ಢC+*"y([vTf*-e|G:5TH36M {w0*uL-=>OC4a]}VU MK1'FKY=_ԭY;o?;ꋨBdk6b%@…~kwn%٘H#*S4NQq+ sڝ. $]&+mqHa5_mjџQJjM2B$f<-GYrluIaj8اjX3&qGapbS`N%N4LSHa›XpO H|'<.|W|r))!jiXb- ŏ C2IrS{ċܖGkz^|lmS虩q\1cKL0͡!lҭ$2%pִ݄~=s9 CaXaS=.gżt%n2GGE2~Y\ޯUʊBJ9Ub(֍dbF a8 ?~c3nIֈg08 ]Fl 1 fbMJƶ ְg煃 ܷtWٵ|ɿ{gοqk6WC[bY("w9o^z_/>ֱw,d I\P~b(G %G?UU3j*y"FV5 .#2Y F2@w 48&Ȯ%Ik⦎$ޑbgR疷q< ldcMm )gFJwi7(^j\ﴁ'o;Dv0lػ@v,#0Z,p#08y= v灚e ?Йp6MMq)PRP졗d̘[%n+ܲG{_Q2_!?Q冿̻Hz̫}M뗏..ֆpD/Pt# 0 C\dl'A#wA; '@KwoYãBZQmW߂RmyG>p5q sg5#qϟ@J4Z!OٵcdEz6Q:D e“ed`A(nT]d[f#{EMa}ҨׯvPb5D?SΙRqzE!ʜEc d F(=8C_IT۞r *.tUZ] 9榔=mgX0vЈ;GlAA!#Vy@%ߠW>W> !!<[zՃJ n /-'^uF3~|\lp7!\ AIGTW"G6ZPPB oC_tYijA5GU-qeG=dQUnvts4MIMGԕ"@:J$ž6ǀu\~di9b$7a(fE ArjWjyYt4OJn n 1IWBI3[/Am~]/ޱBhm;ez{Ռlcf(A1Th80i^݆;>Y9wP^8/pGNm#cjU%eb;tZUP-r拪]1@-30Hz+B൐Yܳ0g߲ƒW2Lm:8R ڕ%>$i2|:s8rEv$\M1OcȻfOA~~L^aؤ1Pk@a]5AT{GSAq!wVgm3f@.kGnl{ʷ$"vO~gH>UC4ϯ؞gݜwVw(N86,Z$ISOXi蔂}IW\x>5.ǥ"} ,2W* ِik|tUd ʗVl?a!~YxHh@% A Оb!0o .܅(qEE9 Txے#M{R#k-::ZY+ 2UbVO/ۭ ZFɤ0h<`To)I]lF/KWC8A.J'y#z(r1lcE^1'Pp6s$cg})SGDP}A1m~?;e:8f>Q ;8;u+Տ~tWa|a.q/~!܄yRAy?bޮ#/uԄ q6"HSA؀vv4ppMyeaꝅސj8mRc#,9yU6]aWiXG '=gMhHXZzbM*goBMd |^~\|ŐI'S+5&t%y 9 9BB@nt;0u~_]}má,\㖭JuBzqvU2ʂ{Su~J@u(u̔brI>E!O]#DY؇F*!} |kkzS"F$89Αq#SeQ7ˇVU\V~xOaj8N&>A0r1h&nYO\.H3M6@3f6|mܵDb68eR M&FzYBM[[m~VrWv$̃y.~#ۮw >@GZfd( KU/Mv)EZx]K3<cH nRit)b,n7Kn܂K1,qo/} ; QAOdžbf~MsQq׉1FJ\%25nuOS;[C|273MC.˥=ˢ{c1>x_%lxG3]wC e |WIdc^h]=Ow[/00r`yqEvꎘʽ^x'w\wun e6qoF >+l@ xE$b 1(նND Βy#~)hBcSD2xyfM)K[Qkn18:)lfLL-4hyVzĮE`yz⁁td0EMn&m"46dw*wUmwۭ7ؤ !!"R!M>qM(:lnL OBw~:R~͢^ov) gt\Β$ С(ΥqLxi| ӛpF&=@ ~R7d"+v\UJA2Ģ%1s8+SpZW~6p8uNYSZM_@/$2k-cMM$uHP"y;^*f*1f|Vާ%"li rBCI/ᔏEMPFGFrU*x)MD4= \ #UOv엍?8?}1Jpz }Ln"hw9` րP< O7$0YO'*א:)Ro [?/kTQ^_RUQUJ-MUGƪRcP!:]JlիkzuZ]+m4)X;y+QK*<٠bҔ x,ZwIsper_2 y3/2 : rhtT229-N5vmO^*"@d$bo&[s7 -9D.;m zL1koWʄł3* faeFy{+ ܒ4'Nl^޶0޹83h|A޼}A ܭtjylI) `;lBtD_>bz(V-[6L]pYzhMJ v-Ź(ˈuu:btZ(o#Azx ,(p<<$wN]E $L(ʕqrrʹb~fpmv29֒ypu#exO~4)dFۊ6c+2@S3X;4e9J? D,^VY|+vĭ"y r."n0?J<"FFMMIΞxN[< nv+ళMv+-,L玖 =&vj^{΃C3ԇ}zBfhRG҈>F1Lx_ϳ?1:6癒j lUXt2a(PC~SQ}yB)N^umTɯE{EɢuX[:|pp0 xΡk('K/ $^чj(vq G)$ "/ѐh*JB QQ!JPϝ&&a,ȶJ5 &t3iHVݗ  V 9>j{҉!v5FaVXBnXlX[rhf>s_7geB h+uW"[!j m$TY7Ƙ[,ufK3d#/dMnY j8w"'Te|ҽeũdh6G②Tb / )f^ w!­)k;,@.m ܦ:*ć4I,5pO+L)5bBe[/+[d'%b#>RgdvN>~ӴcߩޡyQުb'dIvן/P@I0M'QhhxJFsT8Tb,'5;"~DwpDd Ь3K!0pڃ)T]Ay484A˰Цw mCθY[+S|F"D)=%p]!n} e++]RoK; th:_Y4])&o:X &IE<ٮgZgWP[#!B 25ۤ;SݣS1-^߃ιh)ظfGnq`lb |04;H7J5k) q+"eΪjnԨd6I!).#CVM5')y'r#ӬL4~E|xqEiIx@jr(/אmk;UN&~`{rq\v8e8oU<JvrJ"ťQĽ3b `ocƤE2K/eb?_&J7o]djE%3otף^SgpE8Г uړtF2-GV˾ck6+Eo4f!򶐦=@Nj8>qZQ8eG':-A Zghtzd@"وyX!ݭRj1c@{ۓ8jλ 6n#ն%l!ozore@:.k{u}8ܚ 4Eq?LptnO75@ 0m03슁/':o" ~> 莋^mKEZDgLAM5j{֚t&^}''Z[e]՟rJo m:eY kklzzOXoj9d%iIC9"`IxPo `HoX Y}@a'xfDo)8R44#N`|:+\&0[4R:9nY ܫ?UJUv8l#HGb= :WbW=v{vd_&>_:RN4QDp˥[|yÑ1r@0՝c,ueԦj,2aeQ JDX~_zI^oѧe] j3gտj{[ϒE#+5ecH[0,1! dnd 2bU-ȭ7XPZxtŴ4fdF,Ĕ`J0G(< E @PQxn=n@j @QAOyA{A%/PpnXzK#rd8;m1g+Q۸z;pwN/u~k^8}WO\| ޚU¡_?޿F/nHAbv}(_SUJ)iq!1IYlbS>RPbt1]emu(Z~FNܠ3l7*hJ.,ӱKȹH&,Ww-w޳=:L^|[vsSXU%OZI}N&X.Q,X(H#:(ξʜ%=%y7(LDYqs“ၘAJbR*` .Hf_9dSdl.@ϖͳ$ j z"t5Ԉ&TDN&^jp8̟$[n7[jFN-ݍOނG沫G_:M(:Pb` ({?hcEf )ڲ 5̬վ?!h"FBx)Qcu<쑶d,~]!EC4rL{vv)D`*zC^.=Z}yw, BAS QTn[ܲb/'~Ͼ?}Gn{pk§M膈FtO]|/Ob߻oL /==q浝o~קO\|W_;]8x9ʉ~^b]BwLG]!ٮ^|jo?~̫#^7_:38sׯx+Xn)|y=WC>TD5"l%8&)xHd퓯?uu9% gclk>>?cy)92~iZdFXJ$B\(7 K %\c[W?r_8=x _O&GXwFXUHstj$*[2f"ztY; -r별X4uN5DMN]̣ϢyMZlanA/CAI|˂)@=ȥh@H];Fb.KUoFɳ^KX ږst5&VPJֹ!w19#ZTiYXwpA8-TolHU *iZC&`:t6+օ,Wb.|͟z~O7D{fG]8t_ᕑ3gΝyՉxqgv bd7OyUڌ= NΜ| Իg^u_p_m>"y'y_U[}>v8ռ띺"tB",%Cۖob}?~>~:{>sӇ{c7 i0vٯ=TB$ D"JrE'tX n6K:eh+o(HSKzV>\[1_pkx,]S̬OQG&Hi BC&z)fBhPsm>@T:uY "Ŧ@|Д̅HF f$[ eMj6(I o#n ٜ_.7S99cXN[~fCY eEC+<Ν? 76lRݫzQNW׼?$|ª1]~/<ӧO\0u5> Q?{g޽+y};uw$N\gW#`r=e%Ih"J՛m PDN"Yp |R@x@RLUj#~3 G>ەn)m>,7 k|[+SWd͋G^՞*]|ԅ{Ν}ՙ3L}m97}//|nr ݫC_{N>W^+o}_u]:w^_._Xg]xV̞.ٶLsJT.D0*o"$S.jFaG>7&e 8vu[Ȳɩ"b>kc[֮5Ɵs/{o&V_>̹9v;=˓g_tE%r˓SŨvW擏0V$}p>kv9ud`<9=3ma皉gID`5֘[ N) vɃ6p4jjά cdTjjfeƖZ N=_rETv@V֥T,2hsFH^gְ_xg^pD/yJs e"6^if20(:W_>p@Rh<%V t:̈́=a9f,]t~'-ߖ^{;K/I(Ճ)Ѽq.~ܫ/ֵ1޽66(ZcDNbY[Y&+ "gL(v) }H+]cnռG%HcXH}آ4k&t~fyl5O,'῔#o~Ttg=‰ط壷,)sâm=,54"dM,~rmd. 'ƻZșDcA/:@+K˔1 ;/B&&,g>H8ځǑ#`A*֨2[T^dGCxȑq <`b/4΋xFGbQWSZ Gʠ\\?fceJ=<N4*prJ V..۞÷C N\ػ|}'c2-r8I /Pƿ -_V&'M䬉]q*?E]/,JQ9נeƲzrPW+ "y9+Apxi4Qgh0-ő&m~ܼ9X mz/y緭'v{D?A&\}" GqܬZRya<2]Qʁ-Ӂy0@#gQPsw A(Q6%aUE@"Y-W8:U{:V[C!iG@G2~, P r"-(B`R @0:Q; A-- ,5eC!  +6#fq?Bds2I{|f!1a9"D膘9WV&0cA, e.*"dQ'ڃY3 WrVnS$, WoLFm1Pz9`0q I*t7S'3y-OxAs"iPhj33$B6g''Mz>}} @sD,L:NrfW@ @t¸Yy";w%64k ؂8U{ gϊi :eWP ㌿ 2{"K9ïGߖ<2j{pa ̔f) XuICu8Z9m64O5;M}C?|^^p?+0Ytm ]Ӵ | mŴ }X}:B"Zu55)',7"3,]ܗG#|jT ]$uCΓ%$re6b HPDK[Bx~JS`'"#*B]"q_w7EGUb:aNUa4%G tE<4BrP;xS hN_1vp]LHdJ=λ-ڻ#79;>]\ 1h/9')#ַ-jLDWhH C$V@fM&B?3 Q|gZoC,¶:E9h$vw 1y||DoM<kY#@2Fc;p=|1/KiPOE W<@I?*߲r_u=N?@"fq3ÿ5ԐPXW81鷷z漯8& W$D)tS86[BҪVmt/)fr-x*ty0QyyL7I;W6DEkƏ[$ip^q=u<3G,!uR% ByZ@ܣ[mA_Y>чM&c0?TSYJi}*zZ 5&ӏJѰj!;/+'@:9ڵk2bP"jBhThk_s_K_[T@ob赴H  R9!ņO ~8%*΍ȉRQD2%*S9f2fиXsmK-=W+7xuF$L6 "1XwDhb*8ݔԵFՐ XtB!cر,1Ƨ> <@@Bݛ#Z^unMaxxդ.uh:'B}-.frT_\y=9վC@ ~UJTNvハϪDQcIE9FeСh BG A#7rNʷqv7_s+ڣ/ާ3 hsK$u *.E\IQ_vd[Ž?O[ H9$ pTƪ9h(:əYw֗h cwFr[[YM̺z/s=J_ nZte͑ɱ/VՑm18u~Ty_ag.xG$ˣ+cbCBf}M*:Mz*'g +ۚ5ΜmфTKk)d;Xf}?VXcҗu&}%&_j7#6gV2RٙI#õ@אHXIk>y&r9s0(EGMmE5f$F#9h7-<_)/Ļk%ɯ:EW$}$^[,Q =Jr_\9u-@ 3#ÝO ³2#ձU1-)ፉuqAQ~vB [Jix#o+z}Ѕ{|Ԃ휶2ZO&cԢj7Yָ`ԘT4Tő 'f*A7Oꨅ ]tӌi_&h535]-_%\)M4G1zCMb?CF칁R_*!gS;׻;9;1 ;V3=)#2i-wPgg)1 gAzf-&P GU-x)_bxy/M}K,~QT qd JZ4"4 ( 41^*y>D͔*Em .7+]xɲ XIo-+y...39-SF5T (p½WY[2U%LXRC gR[=   J̜bZ-U~b:^`) ,xdۿ"vӨB z@, L {n>˲'dm`16Z/?~P:2?ַ-mdf4ס XoM\{hnE# O  5m 5T2htJpHKۼFTZqj0V1HN\yH 1L?BcO؟ex~c !u؛~ɝ8&!X("0^U}v `&,kɮ-3X#R;TO5Xkkik\~۬ko&k\ͱ?o4 >yPPt]\@\ݘhM`  >#C[(\_PbE>^-=k|u:w)zT&5[eE\70qg? &q^Pw>͡=#` 3ᢂjM` D! |^rnҩRJz.Ha 1ܲrtHe")GUb"Q L %vTcI$U+뗻ni_֣0ɹ<յ"ŭ$D>%^ۈ5ܽ7Ƭ DQSZBS㿂7(0K8Sjs!EݐN1rXV ˾̟nMh41;ӥ5Pi}i=m2l:T  FHb{ĭw`X4Zo%isRo^jSؤ7S r-Nw̘;H-Ch_˙L(t adlt(WZ?+Ǐs֍~JI;n7G 9YyZ7;'HXMUQKug RDe0˨W+l+r&>2S(.5gyʼnâ.Ml.EkD $AijSbgة0#h.ݔy;0P"a<}IH̩T{p9nl$Zï k0PQc^xy <:k|YWg`wLH)lÆN`iK"'…d;܈Ղ.^!w0*k'>L^"sa5uaM1i΍|y (sb$et@WpA<j j@!ق/#L<ȑS#.嘿r CF"ɉE*l?g'5I,3޵KӞRq @J~\|EH?)gV3yWyl9%QΩ0[Y؝k领xn^D5 O"n*|^BoG┇ (t:ӏn띘lj[4KfnbV[I3Iv}y~E69Kr6Zv3wH r“ f_?kh6i@41 Ad!L7!^Q鍡iN "1L-Lp 5 /8QH$(@bS ]w}}dUMyߕ`1*%j$xu(%ƹ؂Я z$S <38р\r!Vٗpazݐ%RDetWA`sgO|O"*6{e{-g? ς.k ]_r{Zuotݻٞlל`ۚhMd[̜xag;σ%Fؑܓҕ"/*0<^\@ e tirDάR%Si.@)vqA6ݞ v{FWFĬ bEff jf9qjJhOilxfs4͊xUQkn5Br(wqM-fE")ijn]$QT=a0dFH/sa2$6#Chh##Ԡ{CgLYɛ?ϟG+]|NjA\c]uYu1F XHiC%QrU UU,ٹ0VZB_",/?;?7W1wZ^ЉtXNP5F#זhJIpzd7D9u'ygIaŕxi,=o85/{H R=0Άя0GP@ c_|)xBP*#xFY+a`$FaX+gS53jՂ`Ũ 4$HjWȫVʪ\ʓQeUo}rxuJdNl蹘J^Xs?[Rrε~:Mr#rpHe xǁtJzrb`-V}+R)dVk<9Ց(Jw$9Q?=;)NpW$5~"rW~53oRʘUBm>;qӰn0|5 XG/ۯ<7a֏<}lܾuSJ0Tӕ1UeЃu9,<'noD CH s-[\vwV9+RIv=1]Qu6@Pvu"?ZM J; f\ '0nNTLU(s̆z̉vk7f?u^'?x;t1LFg@zރwޝsRnwJiwI->t*MޟRw{aZ+Ӧ ,).Pcu-jۧijɩ~r3k/%J]3l+6yHh[  Afiv@ڪwVI0.W7_tgzF5 51@۫Q@oXuIn=7miMoD0 {Vw$QnԆVOKJgCAޣoku1cy{YHWgD g.t_: ڀŐ%fbZUA;BvX0xpl 0<"d(q!TD `@ј+SШAqLW=ɣj'UD+ V5$E͐6]t{4qԵ_jH'<>ewɗYnwHݠyA~&ziw693{mp ]<.ka5Eppx 8ǒ.=MЖ# w J(P"ej6jrwm.zb jjgB%T$02\2=9mthGlOqG&A8mfásg/c-"塜<Y9|D q*h+LqYh!SyLh8_ -4(3XyU82LwSe)ʈ kq];0K<%onB(=p L1G,H5fG]{g`()11|^hK\zq(dpt"c#FBHy mM\" m_U `PwgmaаvЩjL'CB>`Ie&VV ]۳ƫ{7@;9kwj҃nT8e!qђ}Av{?~3Sk~BpS94Qnn;/Q n\چ=N{0ȠocSc,W0V}; _t8cH"?M\$|@`GTY pGj K)0/[RM~ tanvYyf~)xz&~9e#P sPY>20ay@F>wl^ӽ<#&H~eC? DR- cWDRd-媮5gwxn+U-iDQy G- & 5T:qVpMzZ):|0%щ{ֹ~G_5jg:u7B8hB-Up>`{W<kP ֨тa *WX0fϯ8mWXw[ fjƲfCj_=sZK~!cij*G͚7& -vpUXg7졑 D7tog]qkMvnJty6&qk U:CryDސo>*3':ͳ3OkmNFK#bpu`r^k+"D%aI某ģPmf#m;LY\bpoCV Yօ @D0Q!8؜lZn{z7Mf&4Vs*70|9ę9 գ~QpcdD4O3CL޾nхg6V$PaD:H$)Ir̝V̮ JBej+~OH" @\,)_+?OpT~@b+hܑy@.ڢp +"Xe[Fu^;;25#TM%݌懑o$۟N?\"aD <ةޫY{̣ӏu[_7h}1 8YnSGޫ}Hq:,_˄dQr0FeW}Ek ' x9q!qbZPtS}ڃjc<L\Togsy ]\l[ɈPvzAN 4KN׎55 vu=f~jϒ̯Xɬ%5Pw*ژ4W %6*!i^?@3a-s&'{Bz+R p&%qΝm[}*&V7L|CrU%!ף|Jl䌜z#4I @,\?,n#j6\J7bDs6!dѠn~2C>u&>+|-ͷ1 Xx8LBp Td9_gsCEá'k5qMPkK7& +Y9^S`CA!q?֏[_6/%RH>f֕NZz)^ƪ]%+Ie02p#BI @d;:~pg //Tvu3PC%hS %1J@jQ"*bu&(I*ŠtJSKE1ơ7=?a7˒Q-PIZ 5 5'D)12?8g3= =W NU^v~3/^o2KU6cv05!#,$*Fp|P C,~`Ȕjt]{,5('D#ԼbbN' 6yp2:'zh#4LlW8n2[49.PFm~lXtIhsFGjОn[D;>pHխAhN蒯(K|KrSR_ŶVa'v>,qhl^ؼħӠ16SN0h0TE7}_ds|?"_bw L!e#W""IO]o~ ڽg|!!i[M.l/0ccU~87b]&J֖ٱ̫5ɵ)^\+qƪ7ūoQ xu%y)5 Hk Aea.|%'<1%$RUryX=)$gmX*Jƚ Q~0_y2eY0'Gw_+:+yB<@V?eբJ" wq>uc=@4A1ahiG Κ@dx8B,zi~)>9*hQخw$2w lO[WDGk7s񻑾I˫S_6D;K'ЀB4zNx<dnuH&<$>U12M ScG!På!5 )h3TfKڦF-5@c4 ߚSc++Ec_6Xƺt@;SPCI?Pc(jK@\a8rlF7"Ԏ(HbP&&o:b9W! ?jsqqLN^hT.46t\Łmׅwϳ62/6p4ŻOQ EںFz {`yv&L4,ax%,@'uօ71t+w8(FNDP+㗆 :Aq|Y4` F98) 4G{vem٢PCMc|i C_^pޗ@U8yӈ]ڂ?vƝ+WIe ˪P;a<8FKomzm[M7_]՛,|5N) vī%yt],Lh`QRZH6ш4Xш5߼6}vlna~ӂXkm@׬IkiJ`4KNIv⇯F?%*'tCAP@kԎ T0*՜jZ{l =m˼JBE6fSʾԗ_,="mwgj^Wxsu-k"^cm)0 w]&=f-]_D2@OrPu>Eݺzwvפ'ip[l]7H|/?{@fY(&UIB laNQNI⎕u5ʫo )ꪘkۖ%L'U@i]TD\c̙HK8`8v47*Ae5 lhOeQ`os$K_VY=1(Gb3׻G:vuz`uXTLØ{0Va0}p^U4]ƭTB9mk8žvD7":;C ׷F\_3U%ƪ wjH߸`D"-G#;Iū s",%G s)` 0G dd9IRr"̤-R>zGM&S3B ?RPgX <'!;Yj`:1i?y_t5\8v_QHYa(?ׇoP~ DUAN?x-yH%KъE 5ۍ+";/\4GHkH~L2ZIĕASy1" u Ґo5j~R( &t84z7ᡋO,3W 57}a2հ2ǫGX['>.4nv݇:$1Nv YYZY8__r.o򯦾Wo ߆h&]5VҾ.o@]jY,X̩5کySe8&yUf0*#o6ج:eM bv+ЉR [}mx|MV[Jm"SֹB 8KR.5c$,؋}5ꢝW87,sϾ0O2ؤkt Q(de(5rf[ _]Z숒/"W7 U(ˍ8HDRw!5XL &r>KHJ h>| MA03~3J|TnFD[]O\cPNJEdPqҽ)^Y7"AMkצ8U9_j*TZHYZb`#q9i V%9m˕ͪ}7!]u1V6D)Zjd~2v+pj"PxkfnKJjC|\C߈G9zBh A|'WmSAݦ(8z1 $I7Da*n#,_hѦGlW=+Ơ?C^jȪBԼhlplB;CC17ٰ1qgE$x"\oFE0+y,+l tD/:ZTOǂgJ^5̽Sgh%tG \=Rcnf9״{~xl7kP[Ոp"U:8VY'.? pO|j`Ꝇ?|s`@C"iobh< -3xi>aikx[0i|^:F _6DJj+kܽ9Ӂ;][gGo'ssLY$M /Ϯ2U, c]_W-gF+V*Z׹0iy6žB̆H/B]R v*Q'0 VŊ~蝶z~6ħoRݛYK۳'cߴt&Gx7)4|s 8VWE{C3 4goUl_!( cMkJjIr}@(PT5|PV2_\?# iSe2XTPPX \# F3$ shT.|J ToYBr3͟MCOGs%DuK$ep @Z$50I"h7JY~4}XE"_F7@Oo wl58_XҀ㕞wHa;GbF?Vu!L P0*?*_y lceLX!<ʦ6Smr9Axfd@#qQ R `09zaj̣|y^y I}7+ۋMTgX$rBk` ʅ(e_CV'nʯ- ,| 4S9]pL!u-CKBĕm|gzR=9Dl HIK i{5'%֧Wf`iy cv:bX$v/^_._h.+/Xz/}lF@,P 0Y\څh9jxBqEĈd"J:.u5Η_bI8nw k廇]i25îgh)@J@-~x39m ٠̡{m@iw~zL[PjӴBhʮUOO8etOU $N)@I[@ NF3× `;\cRr %h1Jp$g~Qq+amB?6JBys m6$S8-ƗD v}YшJX} MS_S=9" ;E%s|>!h*K9PīeD+- O9$j=ydD0 Bv 8j9̫^t58C|au) Y`g+t4Scֱ{7r6J1 2Uv0D\`Q?9F!jpG^Ӏ+[x5-7/7n]wa_ǺK/o/^\Զʿiw=dbŮ=KB%RWel`A(Z;25 >hL|;64b;O.$x;TbzbуgO;9X.cg7c>m\>t%s_1NܫՃ k"۫_ӛuZ0Dk77{ [fugzZɈL󛏻ηn.ZՅ;_\o_պDwyu@j ˽l6}}{,֮*,]Q@ZGa,yc^ZBqp'Hf>2pn]S#5HڇCH C4߷]G[uWv@',LA}"Ǧj-cca1{co;ho& lR^eo@ PMn:*%PsS%kX3iZ.0RLRN~E# "|/ԍJ.$=$L|l̹W|3H HK\b=2F|Yœ'CP^@2Ƴd;:e3>P ,I)鈘{X+d22SmR(XbgK'sŪ Zb~=C#uTȾƓi`iYs.K=HQvN(l*(%DW(?~'mtiwjjz]~O"ы|DJB%EnC75p[e.~ Ck? F5;æ:1YN94DO*}4 MNivY&G^v G3͎={,:,/>ҠX5wau賑=ya`ZC +9.pqťEm a/m־=R74nX5Qh]J0}ay!LElk%*Ŭm7? ф&dx޲lz ~Wt.w~nZfrpuZ[’= 2tkϯM+djS>whT {'Ì@=rf8@5iy7)\Z |;`.hY*PK[P[ħ<ڷt!?B!94=PU0߫tZ1ζqR? 򳥑ׁ3 N-%p^ 'ܼs>|k^cal 5PA7c=wJMtOaVF-z* YcAf 7;dN! ԥ`LK*"koO- TʁyA4cCYYs K+7֧;儩"ܳB]҃iT?DCvk <ӽ]r=U kd/ūi t!dGdTK 8$md[ޖX$Ҍ{w2 $w&45hg/@4q5  Jyfulٽ_ҁq]#5INIugixG̀{ t4`<KL쑒U>_Fx.HUNxiw +xx Lo_{qmKU~+j< Bl. Q(5!y:u톔͡bVm[_}9kw^Rͧ/_$_2_)K'_*X f^K\1Y%؀-W~sϽy#53Hbh4[7lO5/b'bܙG Ϡ鿿⃆rl3VB"Xxڅgu(6VxZJ0.K,+#&^Bjͳ]ƀ3{>N\'/֞tZNqjBR8Y&!.}տ=\N4nxmh_;g7KV-d Đ2<˕А`iJL}vɮl-0{9E$jpVOHЉ46K@Vo|;.ȸI\ne S%P+-[홮".Y6\ *>er ,_ 4_m^wJv7s4EA^/\'EHka4LX/$S&& 8#uxR6X()z!&)1ۼpdDe I')5apR퟊~J9b5>FPi0(CB2;xs!0S9 Щ2ңy- 3.f:IH;ƫގ:IsZIje}~oGƦG'@}QjP3;E֙Tf*6FM?|åpDx)+$pTFR8=J#=7-V.t,^Zձܳu̍5  ˈ68{n}&jlt0ZPūbCQ%k287iXWȽzG*UV *_۶^e;z-V[ vpywj}KMk}k5U 룵j7_|4eqb揚;j0Orݳ&HVuSi\}ukoINHVd$3IE0GƫpͽV`Ycu(_G, PB_ׅ]YlK Y-Z,z r=ޥysb K]ʣceۅu>-/7_eY[ǿo Z[ch{aK Vz7\ؕ""BJ6ix+L5 2N u5f8dzvgqkX'/o^ 9P, q]T\]^Aq[|φEbi^?8̅zIZ7Ku2T!]^BȩJzw#JG>wpPSԊ ؝2J7n[%aovmc@CvƩ[ոίaoRq{2m\(e:|HH)JB$ݩ4@^C@QbO+]'Um 2C%c",ٵ,'@aejIéƃ>7j铀k1YϿR33?a] 6_uԤG=%t=Ξd帳R- AS;KG^l_&"5Ň$yb=*}ދx V&ǫg bg3遒X?>=^Ϊ#COnZ:GL df@Pٴو`8NL4en'nM_ZL]Io?ʶ>㇈3tY'at+>~*JԲT^̀*eAA1"0Gd*'C ")TR!QUFC\xHl{vFʦx9?zr(/3\|ԍ8܋vNc9irmKt nn?Ǐ w0Tsĉ6jrROMv´jncu]Bm}?W$p}ɅH_&`*5P,N`5S_YbҋH;_G>5]꩷\V # +\ɣTF>qB$R!L)󆿴 0}VζЇ7.0p9TwYeS|4=m\=2s]+!Ao p: TnR[vG{Søȥtk󎀁:j>VY]XдZѺ^ {EE= pa2_VnSS8~RŮ9DRa־ڴpqwBE-B[ _o\ձx5M+%MEU 9NNrOb+w[ :DޞZ2cfrU=!k>?C>?s 7eDvΞ-S](x$ ^)XmvU"fLZ!*|0 ف!]Tj?mm+Z6DyUW;Ww]Vx8@OR2|h  ׈ T=j=|ґ&Du|3gcFPl 5/ЀR /J)ҵnke"كC /Nan#6?L]sK2uSkBH> jCM0E}tVwfVZmp*q@GQVsWSֶ {-@PSK@'@g˖96/UC}co[sj߶>5k.HH:\Tl!f!vF$X:XM! 3Hnnx/]A3}HxzؗRqAd~]?=55SEVK9gTEBj kS6RlcO[ [M.j\İTIgQ)9s 4{&BP۷x'y%;]?#Z+'㜎yއ".J ~ nr,TbX S?ٟ'-}/V?J /fD7hA#Nm0B8=M1!R܈sHcI(,/zkq3k:;b1!ǨGug N_Ĺ?mOWs^&Bc X\=`LF@%18kE.<>{+m 8r@5#YHMCXᘋhoG9)XyZqu4p:U;Cd˕<*=q^ɥ&]ƪǟ}l~p?>:6=j3Ws^|+j,R4TqcA 1`4O~u]h//::45( A.8ڐ!pd CX) *rVb !|DRUYY>XwqOQ_=טcJTg7 >4M6O7 h،pWf?ؠ `rl9[.v?}ؿB$jh;. >e?*!(jQ68@'Gnvٞsd!3I+ vvNQD Ujn" ?_']){郮C>Ιٽ;cˉkSMbň."m0+}Z>%e O;؀ z9i d,%XW[?Ww fMMG+F1ğxf΀ω7^@l@A˙j *NgׂlPW'ɛĕWMWi™jFPߖy!%F/WWgpB[n@yxp3@ 9D%Bx;x, mIx?y'1q(̌99@o5xι,r"6ʦ'/OՍO\P"RJ17~k4j,uVe}YFϔ 3\8+y6#@,6b0~?G0ɶeRFݕ?zwDT׆=s"Q˙9ZiFbCvoTd zfQDNd.e ʨdmҠsf;1GBLg ' MJS+'_+,J >k绔y(6*:ۿdpL92z hӾFQM0ffy烢[Q*x߃Wǩkk+r|]{$~ž}\9b9fO81RQAg=s=mS)g39Q$q.Ԏt]*%6q/,4xf4>]sdwaO1a}_֎}\2Bn| E _$n 7 soǤos}DbQoek tuOwZ,]V;/!^#:v{R7?\:4)#:vZ 00ecuO q FaB^U:fYHb` 'h%YM`7I8ܻ3V9P p|q:uJ.|Ȳ<äwek^.YzU=Oapq殏.M:꼅X-zѧ{rrوyv|tvz zgAAL=_ 69G?|#&a%YIppʒ]TɕrpXggSEI]D}_V>5]$OOs=tȚ}Xac?\:2.kmXG2p~at Ͳ:&Ȩ|0n:b3W3mHkhBC4iHDe\"MDvI^9f\r.=>9|e15z̅DdY` D+~l{ǸEI8Hqbf"n|AmZ,ipl( D^`: [z硓\̑'׆z[:C̃xfj巺։MNC+ͧ|a<:mݣ#3/̷zQj`MFG סAbxQ-]U.^a1~6(_-]83?֗3N&8kj4G16R]$'KMtr8<)> [mn"zsč$R.сƁ:>Vn7b7b0JYsm`Gq;8³t12KE9ͱ,lpp!$/3]u*e.i*A7RʉU|9zA1=cJ` I)WBCo7WG8ՁN4zL˃=5ՠ%hir4d99>,a`玂bbQ bft뀶a79 8L`M5ϛs\ى"j nMrL. xq. ;ls$ퟋ[|q ,Nu*ˡ<+#H柔3?6uj՘MPjzK:)ʟ@`Y,]*cAn`6'p bj,SP P 6'83bN\?ҝx ~0OIx5ϕ*rg(aŲh,z~:˦b^S1mmsCsx C+ؒ` Lܱ>z=7J xVVsJ+u:Z;{(`at=D Vڊ%y@n7Q$Vz{kAEi| ҈}$GTODꈼ/(0tA懥[as,Oݵm(5cCXÇE6@&Nַ{(?*.9uSEmScɐҒ6| nO;i%B0[e:{C(wFoi#`7T|2z䀻57ao$|Cg(RP @wK ar=BAscz}s嬿(rbq$JD) iB N9'XR).i"T?Lv'Y4w*OڼW?s-32mK Dc?O]0RSfvzRӗ?:YXu7˷Z,BRvSa06'xOQ5P`UalBGf. 11 ?# P"bM0f[`Y1G^7wt ^2܉JFCӍ3Xnn$5?.C4ĿR5S$,f] 8g*hi &H}Hհݘ@⤴8\>;ܮ};F͗怚&dvǟnYDT^ 9A_s711CAo3Hͳ =`mj z7|9.T(4%0>fJT$^?'c`^$ IqyN R.@"̉Pд/KpĹ^̣3i1ɛKW4H8}/C]fštZڭw>oؓ;EpD`$JIRlEixx\.ǰ֌[,܆8%MOe)BY23oΜ "z!S*J泰pJw'¤B)ݭݷGebaq͑BB"StD"_\GZkδ -LQy12%!‘0uE 4ۙ_#KQ㥬:VzU4< :|y(N KM!EpgX)`(0;37"L2c\b)s~fC7Aa A03O~ؘR \z,Kʰg Y6(P<٢qA|yM-e`1Fx6FzՅiPdPaq:Ʋҩ5^;=ÒshOg7GM-q*&+&KcuMM7BaKk5͇L(,]P)6e+t$yNT\wB<LI՗*vwysSOH|62 7F0bn>]$R;Zb|d)yh*)lN\n/ч $M3v>$Z9TѴ@W: yBȩP+s`r^+_ODVjH}$d| /bwWMwq^$Np(5d‹R3@%J1L f${%~yjsF{AC&/&ov#͑.^LbԜx C;æ[ qLH73qz^#`?my!Pus&AnlgD9r`cHv,/Y!8RIhFϲk4dFC҇`@EZ^YY^PPNnўX%δSZ! qtUuqe# %9>r([$?N1}e;q ]B%3_NʑPIn&x[~eщB6":_/ >!H "֞͝1vX0IpE"@/et#{؝6pc\{ŀH  B:#| ]zyM,B9_NtҖ8iC{z#S@ ngv nx Wh-+άy9B:UZѨ#Ku;ATE <)VWN8vyJqWƳymnE,=}Cj#$w\g;2]̮TI)""SIM_6Hz$}5ATb>R؆/ `MN7nw?3]j!#Jͤu޿;|Qyկo4V_U^Qs,8 L9T-x.&$2DHu!!~b#6Hu(sY$8)'O)8!߯Ee\<`r{f12L d,8CMs޵p.z 6} !!@pwBu]uu/! B}˙ٙKm]KO}>Wj!y}$ H 54\g`ţʱZl!oQ+;)GH6nbelR^i)u_Р \?$h BW~h(Tg妻ߕ&.(-A3D!UÕ? C! rۡFdv%ag 㾣TR3:T3 v:槼!gJֻ{Fbo"Iz/w]`׳jh@`FdCQnNrA?: )W~=BKGh5*|,!9=BoݶfkMiЗ5l{bpW&)`. ~Վԥ-ؤ "?t;L׺rrJS]/%v/ jݶ0ۮxPߩ)ȵ#̫3bvDvLJu'vƅ4G54Ex`YlU³*b1mt6ףjN-qFңtɇ DןN/&g}QWVzkL]sZ~K*3㬯}9;f:~°5% va"×z!``![}ƌ `! .욑{ sM>~RwWJERgOwW"8t\(:7۵_ܾxhR) 3jC$JbN51|wAG락O<@`.=qc^0NJA?A c5uvC^@@㪛!u yqs4^1ir/v4 Z$Rx"q,PqR(5J 'tF8{`i)GquT.{ ]F~\ڵҥ+ɩ5ѱc ҚkBaTfgUtaw9ٯiHn%0PADH`(Zƴ0kS1=р SVP4FfzE'GfmN,nf7;S`;SF\F!@.:):4 &(l^e橧6iAr9*v߻up=mzh֣C .f1.B]{  4)o?K (klOvBW^]>n$jzY79vD:#=]\[];~c=Z!)  TBUh*PP^@ ^B!˴k3a h**]➷9kv_Y0r{r"؆$LxPVq`ׅxGHzw"8Č aQ+i/\:Zr)5ʚx!>M^ EAi p4B<ý##}p5xՆEp}9Su:a-]CCMY!|\ZiUA(/P-iT |hcjHnŁ\9>gc )0os]3a/XgPٶ&o#!+JWz]GDKqoǮd׮$^[[sAZvkyx`Ɂ1lrkO¢(m]jWE%xBAdC47e31'cGJCK|Gf++p0z[zjTwnKcK (FZ_0]0تè/"AlT Bj,p6 .RJ?{8sgZd~@6p(BR%fLʗIJ'(5BO:2ƽSyKܩ3ObVK !9H1g"c,:ɌZlAP#Ч4J0YR`S k*ͩTv ĸOG6A{%{ԤxDnyӶn}%J`{Yx3F>́@[9x=!TNw7@DyOcLX 0[Ge CQyJͤApQ=~S6~(םgew<ҧD֧/ׯ*YˍԆ(^JBR3JPԐa!Wr0NU {lcO/o<@JҰӀ" _3X:iv45Q=I]Hl8 fS5dē;ѿ,إ(Խ$.pF鑕n?}XVV1؎g ]͕~+mOG뭳Rm3j!Z#1y=gv^ CECB]n?sDV99> Z/Eaw@X"S#J )^e}hU-'o.;gr*/}x)J-(|֫}qy[; _{bԏx0 VU]]הx1>b\H~3ϖpRn vn u kvipDXb αh6X[yvzIp-3 4C*T+kagNJ& Ǝ  fIZ5:#WJdw|ۚ*<io82N XHDk " VvEA@l,%ZZa5 rN2e1]#"9͗ގw8oOԽU*ĝ#QAW 9'j;ꑷzğU~wr ATɮǟɟ4xʢ EW2۠"^Eh!< YmDkF:Dkh{|@CELUm`ì0 !v6WscD=Ǯ+yCE[m VYSi}]<>ԩnF)oX pqL时cBV?~{Vv]M,,+Ȩa㤕nKeAxf\zis1#uLQ yF#M @0R Q]9p?珋Te %y/K_10T1uHSV;^(|rQu[=_OK4ac*Aƒ~< m(U]O#f`7muOXtZᬷ1|]ZbP{[ L@.v;Bw7ˬ/)œ?#ߧw%|B<],/pw>⌅6zZWWx\pY>8"y8!v@3< T ?`-"M6YgXZ@mu{ӳt{\9?rqsXBM tƨc EJiٸ\>*(.ru{X5bCz DRZx X8^Oo ;x].ulkx9y:y6:9 oP1XQ~"JzIXFv"@ -`^"1#omr"8TTɏ SOzG>t4T.S7(#9@_,> `;ɑg@sE)m,!Hk2/; fj&S,(:SRU?ox6]UPO4JS=8k lw̽/(HmWW*5Ҳ=M_'4v:H[ ް[H;QbAtHUF8_?'j@tnD΀(G[/{m>k~^琫nf;6YLG @r?~d]Ԍ`o owD-3kA]F2$4f~hyسc %o6(RO. )'&T.nL=g]3u,hGYL,L sm3 7QT\λc)T6{d3~HU?^<4Q&'@}ITd7M{bubJޒҸ:/sBL i:T6pp<${J=>dut5@dp m>d̉:ge?jU̎bbz7T0魍tW8\AUl禍TAB!E&(5UM"X#8fͦzTo Q$!\ЄU^<ś>?dž1P7cRt+T؏\ܣF dk}Y,< /KZ;AblMrŤ5D[;s'*|vJs*Ɛrϛ͇"i ŵQ=d|N$vujWƢγKw P.;{|hzZ&܇Jp7⻙U:dyhbzNg9"H0o1 wҴ"i55 W9jLK3Br jN-f)Ȼ@1;.!~BK q1^F]scO~}S(HAW R'f oZҶt?6-uo`zgmh{jtak!)2xaՎ[4"#Q8&4A ? ,M4˦\Nk3ӛts.I!fq pv* `qcrc½6'琝>=xp==NҲitV!619Mɉ6lg k8Crnɥg?4 y3;&k%X%e-RE tP\S4+@+׉g!r1+-u0*s1g%\jwsK ˹fNFjv-Z׸[pڕ9e|n~ӥv-ő!D@8иa ;6ʭ u ] P] E!|8^0"Zo/Vhft0@Ă U^[eۘD!=hd }X%xZY&K=\>鹨x8SSp\7ϳ@ *t?߽Zp679.%ֆ ]%$ZׄӫȎ&: Bٹt/sP\q2u͇:-tRZ(ݵ:ifx݋//F0J2oE Mڗ*G~f|;ƥ_#$^V -~%ߟugŲ6Ö3g%0RqU4Ba^iWmgTdwvf@ tb96PB?`xdϮ\Wuk*6>"7 CU:49&f~FBI*0mcݖއCm8ҋ)W]vӑwܻk^NӉZ14jtcZP旗9\ZnO2Zdqi g kQBd ? [{mS!hev>ݸqί`fO 9NcdR'ښ┶7wOsL,Qa4w0>@Xo `a fPj?/ͭ#;1ꪔm3'?B3sbx\Asuh yt'ɉs<0n@뗪Rtio嘕/\{.LV3 ~6oFus00W=[93\TI;pQAI_Cemϥ=ʷq*] sRsjqn6=(fK!iw3(9 Rky])H$yG$r^nKy'0MaH ay\|IsSh( )d:ODpVվ}Mc`nw.CX7}K\[bصfpFSQ'G[wx la`8'/&YÍ-wCgŲA 2[}ՎΆ.&X]65V5K~g{uR8Y\˞'gZށuDlk"QE#ԅ$rw$\]:凕ԀHǍNB9T4J5:Kɉ>_?OTOH |µ DTD "ړ.]Iat-2Ҳ3Ťf Jq#̛ڳ? I{_1Rj&gM/SY)q>&dTD,jK0Xw檍o<r[00B0]I@ŢRHx7o ;5{~hZҜնz< L/$DQMe$ηစm>e|Rcw fz ÕfuLPqvXjQqT~\-b̨b;j9f?bKބYqqaIi3x YTU몁{(5u"S"3l#;K ,&CSeiz47;/7v$ط;4 YtlcEA'Ԡ5ݍ>~J;H¤{j%pT`ofriuÔe,l Q3a̴ f(t7] Z`8,GTj=$]m~OC݀ 8 oʎfS (RqzZVl{v%z L.hPRD!TUkoieGa6kBo߃.|9 VB G2[JR' [@,5<sa6z3LಓƆZeCXq d{jgU`ѹk?=ev57ы\<֑"A9'Γ^^ȑ>&LAm=̯/6i|9޼3LWLB`__]]i^{Cs}C0oV![@S/@!Rhk>#x)tAth֎Zg/pfk8Z[?H7;>N$ 5xA/ׄJ1~%o[ .F;:'Mj!B6Y28Pm$!h{A;ݽڈVpҜtιd |ʃ&X/[is}5jf7V.7b[FߣFjʏ?V0&D&k"(!'c EJM9p8rX@ 歈mFPKwp]ルgM\!AFs" `]>UApfZ!BUEI K~ލHp=`kّ;_q}VcS=;I̎_b$T) S{̭%tqӟFK##VI< _Vl Ҏ"NH h͇xS@$ςrFE(5m?8~ģUnJNVגmZcu1&I̦dfUiS=2ړ!Z,opV ,2ރeiczzi{th0>̷AK7G>p-:ڑ4?2'/2. /53_j R{vR\&~_3 %jo^۸+^u^,vCk~}icZ80/gHȸbɜk+mo~}KW9UnRe< @ȭD"u5fHU+a`.~.u@&Tϙe_όuBj wGZNPҴhNlhZ(RPLYZoW"blpl{E1Z:oB_ tGBlj/O-|uΡmґw"jBzU1-(wuiQ]a[e_F)Һ/suu^ulZt}]iSҋ?x?Z~;'uF2kYpY0Y@ 4"R;)jXmKO$Dj3JLs7ߔm{ɛW@Yrրԃ-xև}%Ɔ- ]ڗڗEBDhX^šq~$Zw1 SQԚƾ%Um{FUS>M*,#M0<F9 >dƕm2ЬiRqc6ڄ)57#Ă01oAes8dM&B[QyI6T#r"怬}1߻tuCZ$Z5Id=3SyceXR?,/A=+;|RR?L* &,dzDWv /ePSSipHt}VjQfp5]00Yˀ/6P` :nƙ BNRbNAEyY&&--V^ZT0!EKqSbb_CP>6ӓʑxO|¢KΦvnXuT$@\pP;A]m=;k7 ?N6dL~nؙnևM{1  N +_}+"g 翕Rm4ftyrZW+}Cr?@&TҀj'Z&FK׵%)N%QM cz~-Ma7z]^ܱЦ1'QǼ69Rԙ?~X&yܥRu`LsC%J MHy> /vtN:@bCUE@ȷiKCe2FHߤY.>l=3<*{pύK37rD4:7%QgkaSS2m&reoʤfM{Vί=)w|W.8XfDHr<M]byZՀ cGͫbr%9-@GP}ةagX sέv}R`RhzcYk5K 70 7|=dL`D'bN;g3NeRYKe6 E,z8LZyE L{+C-%&PaPx!ɵg粂Uq|oka{=Åp4DH=;4|%kGQ~iPA3S)j397ȬZXv }dW3'彃ӡNT:"1罠02Y*]'*HXT0AD< pIUF}hJ q T@DL،emG0N?nYZ`{!С$б,ع&Ƴ:;=w]~z*%Hc'ava8`#U az4xV'0hf`苫(p-۶Pf{r׀ p#BT\,`՞1@xeqOS˨r'ڃrj/ ^HI!$_I v../ 9tdw.35>]%~y֯HJ3;39RF& f('ƧDG_k;Oٚ=٦G &uC~PABQLʹ 52u{]WRjVvٵ^P^(˫!7SO]?V]9FCM$RYή{k{c'79ማ.&Z3UZ;r,Vh1I4̱W?k]/hB!7jATbahpu``Rog@n9dGFsдݹ~0Ю.ߕse &\1(v* |MN&L]7^ 6m.$N!0\^Aj^\PodS!o5JRL!p44{Ph58JE^B/QK+^M-6ݢcT2cކaN'f˨-pł9NC 0c8e=dgoh:D,"S$b& xD#r+MvdàrPR^@-'~>v4pPRhJ <D5\kQR*p9Ϟ HF5]DvRwґhlT>X7PAIzd+`w!f%_q0\MـҌ>'1GOp^rO|d5OeӭpwU <) x+l|QoWu.J(.]@' FFjm&w~Њ4J"(#¹YxHj"|:8IB)ov-WJˤA>dh)Ub2`\ٍxmƀ(ڮPF'9'yuMq/7W]_qmwK8({\ws?tBoy)~~v5x8*Tsfc1DgO~z*ZB73YI噝Π`P1jR:ԟ_5e f%8ƈ -Ӱ_\e\g#ݻnroj::78@Q'4HJ_Pp38*u2=aK8?cu2h/Vx&:e~S<=МgX=`}ԇ]jA geK&EGoJbÚRqn2~4knr?4K bhm_WGr]s̳hYEYbÌ0xyI22ڪ*ԪUn$m >Q} " ds1aLKL<mV&'3*KZQQ[ _5K 5q7c3],Vbxץ-!ف9IjGOeАNb?KKXޖH?2 1U[i\kVoSo:Se^iY,*-qʎeFkB܅u Vv8[vbYٲN1Nؚs r9s>t7vT?.S$Gi+"$p)$e6SR /P)8h2QWE3H,j;~MCܵˬD[|׸.mڑzeOmuI) go$Y B 9wXIG2,W-poq`֖|d 8; zao}O7anhn^+![F)Z ,YMg}{_KT*%ANY [`L ՓoMm~2&P-ޏ0\t>C}M(p8/5x&uk釨"}Ӽ 2ܵLs]2h c'9˃5Iǃ/- w ?0gcŘE 7n04:!8!hC]漢z>>+w qwwO@)$.@p)m:Ԩ BHB܅:ssg%99g_o8 # TBxY~l$6 mÝ0xHq SZ&^-^.+rzSCFש r*7jZ#t*:cXwXtvo;ܾױ{c2UÍkt QL&-VASu,.)ח!J"i2rI7̳]SSQgTyR!\eEq`&b"~"v|R./GNýloy5  @0sczzs}Rk:#K#4r4 Ma:LT9![~*F# ֭g%-N@aQQ%刺V, sp3WHRƥ5r{] ȻAJmF7SKlStM$>$Ȟ$Ɲ$U/Rݟn t!0 7y6v/dRv] Ԭ](Htnfߊ㏛".NJ;x`m{A'Eآs,_ ~, !c`翗>Ξ^ȟ\NY, mWj7u.̟-UnKPo#tK岿 G&=1[Up~lb5-0~0=۬!?XZkFԚ>櫊d3SbMG'`G ۧeRC ] |x yvxF5m@ً+uȄj) _WǙvAP5I@8{a/ sRu^$^9!.0N6tp|9I69=*0ޣ,_Uy$>Awٳ"lz , +ZI9_f%C !P9tم:0#6$*$N0XY.B{4h`NlT%F1aZCA0@}麈kvn0ir (|8 > Em cl  򧕤vvq!ś( Ӄ;JRʅ?PS}@m勧''_.//-5hiռb0Cqp 8<w̻vYR*l0%u`975kxx5yԹ8Ժ7ϷTpųUQ Q&Hujt v2N* 2V`3^},4.-lԣ#vhxћ ď^~ IK4|܉*@g],.Wy ͹#F\APEwD ~S!ꬖSQ 3$EGG.\oX#+V}{o=Mw˃ǃ8]նkHb۽C-:~z݁Junڕ:tK,k /r'{Z t 6+>g.ED[zFSg f _=O.؀BMK"t[BYߓF\G.J)ϙ . yq%$TsC?ȵ(-\C>'rNɑ2ǁxjugOJ^w0?Te! 9'IZC14b4 "& ޴hECCYbct {Tn @N|AcYX7nq^l.sN+퉡_!}OވWnKpvSUs`k8d-f{!Acn-IZ;27аDcᔋe 6 [x>3_w/k#(>+jU0x~NM$]O&g 6=ޣ9cdcZbtDϘ3k,lr-modߪVFkaMM7}~/}ļ4d%#o-Nv&G8EBq mdA 6;.(I&!"_ -LWc]7t›WU{`;h@/#1R9Jc5 TCz]2I'(y 'Ar&HɒP-MT4) {YWyՂX!W(a.fnphzz}=Fm5QYflTIIgx2[rJG3V^ 5an.^gzmH2׸$~ؔ瘥HNU4΢ĊX KhmK&UK87WͿgeY|ѹ Rs1 ?y1 >fWDzc܋ʹeK㥯W[ /iob&XמTDW\Z!N=/ञqQtNl.IC>EZV z鮦Gy-hR3f ʼnd3`rE8]|틗yp@} mݏT; j}4F[u[4tD[{`{[eTk^c\kSn/ /JGB+Z"VoXwఓt:n/6@X(mio4\,` pYXKU**U5@/h[d%.s<Ͼ@،yW{#*^AkzCn$)L90glkp(wtUp+w U R,u)t.sn t*+t+;`'A߿zvewE3鯡-Qԋfan?ny>P$ڤ, AXU.wqvc.I\ؼލ39Q[|Y6G3}릓;ٗ${4 mԋb@s~`x]YqHo펷+53CUb5+bu^EvJgM`.@,X"\:Ry"E%V*Xh(^ryg I?b7TtYEa^dFA`:z'ķ[^~UL7~y{//ۋ˥ UL*/ Xj2C"#J ::',qCpo!j #RSYi:5^fg.wٟ>Ț~R염󩐖eDl~mhqǂDóA \[<& F"ج.T:uﮈ\%Z,c[$U\-W^\&P%\-V!Z[]E"Ne@aJ7I%-~|;v*FiB4@7*4W lC)4x.ffo0/o!i E\|I$وt[4;K[E rٌ*͏canjN}Pi|Iۭ RI"=W9R  /?Hl-(1sw-dHkG gZ3J'O>-vOl+tnmBrwYM}U6L .C R%U!X ~gMrJ\:-K?(FJ`0Vfr 4-V6[IAGa)F|'O(qr.T{ qaS|:OgE:$˄O]a=ӓԼ#ٙzpH$yvi7,譂:}^NiaLrI++߉:q9qA3#u%]rA L8OY=By8^BmAa1FmI9!K;Rx "X ٷϋIeIV=)pX8.<%mGHV76f_|>p6&fk9 ! R&Nvm~mJ ́rx#ȷɷ+tF)ĩ $nӼM?Q?^/AcU{cկlڡ?U{0Q{h8(D/_~ʟYE͟{UjqSz~UA'PEr]ƞauL;cih]j`> E5}-ĴIF:\~{.{iRpߋO_O56nc7h'cs7z\wM2Trׂe^[\gTSt\GjOfWr{\WLo@*@ʕxa,7E(UEj+k+j=I4zY߬| '0_;r>@u!q#Pc,ۃO;>f{Dq{/+tQN$sMDaO]e)Yo's;ʢ?D[%1[N_`om0Oﻟ4p\aMo1ݾ36[3ZlKOirahd3"56uNJMZ0)nrRh0qO[[WG]V]f8A}z]Ru΢9&UWG1C_:HOn]wЬ$N=Y IG墕x);Yy/R.K- ;g"|xP/b(TxaD}%ڃt tؐaDLHɵ"6$ߎ9SH?:c)p E$ϖ۳;sR[*"&A-L!|[jo@WyuwNzɢ9-G)/WW9]8ʼ lJr%kȋ9* 8`*A0$1aDӥV4^/aG˖b@ %$ S^)]]O˪_ۧ̿}hBF˙1h ?I QJ$C~k(5-~I67PoOoݛ<{'#d#N8[[bFkWvb5ϫs%{IdrisjpY]4ge{"\,m(ϡBJ{) `wkt?,y.MPqQQ&I5I!op%O)[.d"7aٰ]EcsRv5gcEt}RdőaqR ݸErPmW_V8+|̉=7L&;P*G:M9r^ ;C;9O3< hnW-_lOu)w(c+%*w WF+R'ȎZ-Ďo!E$ςْFO?FOs|# 4 yR 4' 4v_|3[2f{;)^߼w~ *=v̲d/—oauɐ ND2pvҌ=9oA;w;b#X/hF_C[LEL7'r'xe!'ueDCeDa.KdMjI%+zXRsRe r* Vk 4W?1LT q di4|n䐫LﺓGՉNt_@lM`2tb>:mq#(5t7% _7>bAw]_o~?GA ,E\m$%ixs6&)$Ŏ=ŕ3͋$R(UKI+I%3a5 Hib y!ƙU.쎗ZixLIX'ܐX .1f/0,ShɞkžK.ӗ=j w:hZXe(gIR$ \ %9fDkj>L.c6ěQ#D1Ӎ%)0z/A][VDl [RŠ"sRaC=;-׃;*ӔZ(B ǐ@69؏a D$=;9F*tK{RiJ$&JRKlL=c6Ȳʲɰ,//\V H|ʼn1Ym OLORR 2LݔG` 4Zz,f6Vf&_޺]^6n^2U" aрgtXh5e=e;zÕokڮu{jwoI\-~#Fzĕp&WVG'op_xP{]c6p%ކ_&d< j}5J ,5 `;AHYw,/+ x5LO]ʦm*tZCz"µZԫ䊝% $K\uLTӬr|9rjxTqBS< 6hu( I |` TY{E!EM@iĵq*X%~anlrx>j+Xr5R]\ eqwNXS'@YM77n68AGWC˰+w˺O7N}eV7lg&8ߊ/Ő+OD(d9U Ҥ„TXctdչqu՟?]{>ⷽe]31?_o;rrȘ]q=XXZ ;4Kɷ*4HT8~H1CSB 39m2/np؞x ؒNUM^"ׂ7ךЖ#6D$πJu88r4H PY%ν2,( @c늍)8 ྂ 3Wm"7"xY}~+|~|}|>}Hf][i/\ U(M6L-N:"sSS4yD5e HkʗuzUHC] R(WlĂոIS'P/XG̉)9guZ=|ѭQ d(LM; Fiebjqzzeym'HG;jf 3իũ߿-.Ѧvӂh,I#T%5d>Kd-\%Vlօуœœ݇tx._V?G``N}hA@@JMr" 0"~Af%^%K)z/t0}5,wE.^i5Rٱz@^ĄԠC R)d7!`nBrǫZ:`ûQA;/sgϑFL M8mIitaoŤa(p/HA Lm۪LU<-'Fus;Tb7Lw~4 uxJ*]V,e+v)rɵdH㐙T}=V w_ _-OJ WWH_-O5hdh-=og [%)5%&5F<ՆFFn8}@(V>QR,*&He~M@|`@>Zm||D l>/"Ra*ajaAݾ H!it×dȕ͞ *Eب Ӱ[ XȺ!:g5i: TE$%5t3NZJ(X9nvpGcip:%G$HEm~7|4ld|(fsbzl,a0@1ʫOg菾[o&Y\ Tl ShS V RT PT RB EH1rd$M/u=Zf,E&JM<2eCD"$oߊQIϽx&wkB9L?f%Qϑ}Uft/Rd[NɁD٫ ԯūE˶Hw)GhD &li:䦄 gk'bSԉq3P`)ZMgF fo_szns; 2SWj~X^;qW#Ćb+߉S u{qBw$^ rs3^?A.V夛R?(6D fr0(EJ,:#=h޶1ܼNlUnir اmpR!5|/ :Wy5W499;U!.+R/ ^.7g%.ݼ,fڄLoVO;:G U*s3\q%>L)|;Zn8qcG݋Vw-֠:H 6!Zdn-^9\>5^zG;%5);Zvh$-lz4A7R#H_S`f_P$[MۮݻS3x_jj;)%;!%Ti_qGy[z( pKt޿`4E)bǕG?-~/Q^xbD\ Cz(J77qwhߊU+#ZFH٫aR!@&{{`~?aZ(GrHqdv &Ck-[ZܽD{b;NSU l3(Sc^FMML.ҦĒ~DPYiج<ŧ7>߽mKoZX;H+X `I:Rhkg%mjߵhTB"CEFH%‰Tz7^ 5B:P3៳`@ Rnՠ̎`ֱ- %D6Ɂ#壯r`xRyɝ3'V"5ΉUQUS**\i/Xh/$q^,H؁ to*ZA" dtRc7t5(5+z-3UYvPf2/kwkp%><>hih1|7ℯŊ F t^ES.Qmpz UB1m$۔b8D(]ϯkXڱ ]frFOO}^Z%]+\) f'r\;.ȯ7;pF!fMl:"NB2^k' XSYЊ駥ϊV~ȯLROs>ƞёӋË͋N&:W߈s3^J@__O gpxgz'aw 2N \Z6T?#ŧ:Ub[[lxm81e;r^;bgάj7хɕ.)pocSYq"8y.O__[]EMK[›ڗ!@```pNDeJgEhu;PjfƠb>vwH$q.l9$ۜ›.PƦ)n5@"L8nxI8K,R3WɌ5zWVHVo( brvrzqzy y 5yջ׸V;85p68knqǞك.Af/Iv,7Q6,)N7PAqcpzԃ>[3ꢔ9&_^Gôu煋ܱGqZh'*f]q%{|/3Q6wkGoYdַF_9?:eoNvzI^jPzji?n%?*iAA+''&̋ʶdi$-O^[X|UEֳg9S{ Cfy58(?cj!i:Crd:4ox.=ܤ!aPhmБhkDJ:}{hr+l>}Y#kVNkoĊߊ.x#L`(BBqb$0ࣃ#ذhdplsnWbQcQo%#!\kUe^]Y f-)w&5՞(82$P̏笝B>{?eE2@3TJ_RP^L5gr[.4mFGwW?Tt3#D#vAh;$Rvԃ{-R2q)"B E_ B#~=Jp t`~;Aj⻽9|خx49.ln1lR]k{9>0E["|a;̬.t`{G>ƌ33(5}WD<Ʃ܍չck棚EtWˆߖ.veumK KBl>@3Qp6KM%fٶ 絟p.eI{\fc8ip-T/XlH L *` W%| g<\0[r#|:@13ϑrŒ5l.orSyLtG'm;dٻp'u?|QG[e==o!Gw'wG)n_ AVk:}1}qZ=Q]J}7v^Iܦ4+ĒZk"# | UA'$珲!AZoA֛ƕ\͛owwTz";8wbs(N䇻ہ\K܍e(\~{q*bo )]Wv3Dj`kr}8|ѣ Uvx+2=8Rqbwv)ۦsUi~kGggۧLdNN1MLG6$`r%L?b)U6ڱ}^?neۜqڝ:݄U] *3&ۏ9WÛ;>zGmRlz q/FF0k#nNjߊ+s+Fׇ^to4^{ce+8E:x"^mZwg5ofD ?J RiE6vٚ3՞'_H ܸJ\xs,r,2` C u@8,0#FlGkފ3 սa<fx+-z}yW!┉K|U3qjrWQghWGh ĆZEfxR#E?]ܧruLW3-"m5k9E $.9kxw?cR|2^>EH(bk/efdz+o+ӥS|‰l/¶g̭NY_s'IURE\f]FA5I!ɰ +R,>p+^?l`TRa|K5ƀ=Q8j-6M@ 6 ȘBB_+3% )ީ){ t t.EaU$$DKC܁5t6;$MΝ޽&*I:-?iue[kd !QycV:Z?+ix=?3?<{K-HZr/3F3 ƪ릗':u<U1 qݑJԬxX܊k׳-?T[6,cR(c-Aզ$YI\Le֨w n e8(ʇGߔ >FHMh@{{o>__+w{xߌU.B x8 `f@cB23 zL!\H)BkR,Է5DM%!H  $ۅ|(mƯ}I%Gl4\kNVNO2Ӎ̯%YnĕH*Qy_tya|6|%i0u Q}w!)cɖɔ;b5iFj^TFoSZj'hc40HZ՛jc\_gi&~3T,@挫|ĸn{|`fvizjC,`+ LX^| DKZ쯖q$ ,HGl$ }4İ4Qf4')ؾJ3Q\lXUrǐXJU:)%'9h3Q!-}0;>*lBJTFN`΋gO:ZyUnl:bvIOYAb:ֲڢBXdW=S 9gF5ψ;fW̗Z~̓S:241ic-b!هF+gq]PB7~~/I̗:[>$qL3s0H(5\@ w\'E0ۏ䷘HɁhwG`|8M/&Mϡ  ^G-I+6> W|W7boPVS4kp]f-"[=U}dfxstβ١ d6x@pl˦9 K[+̣|&O5/})p$}5::%-[+9"/L5~O3y$nj׮RoTSiWuݒodxCI?d; Ȯabp-15?vا۽M(f[W#doDc5 =:"^A@dqfA) M`q)).;GؖUh [)0ʀ1be&S.U-WT^R$cU{*{h3(>/G\=3WP $/R2%[V+wRl SWC7B;9_E2 '*g2A([(تV8jm5^ʥhIhKJ Ђ{ ]m:^ע0*zeV_ cS+wP$NrlwG H)T-TX=ƗZ @Vlu D4jCmG\ e ;9Sִ) - -5J 'q/û2]ɛolл{ ^:`Fvp[|Np?׹ aԄaI1!ШPC4-~ll3"ӓ[Yfeu^= 坶?|7? y8j`fYX2e> @VSj*( z=&_L{#,}dS $ ع|?_誝א=4u: X6nI#VݫCо1-o7}@Qm\*oD+ <omS3y3rܠA; OΔԠ!%Cg 4 r&S J/M@|L8dX|j5U(:E>/g 9fPfIdx.YB%ȥN?3 R*5+b_bD15H*e{r!+rҞdU&"OvvZfEv I!'75sH`rWX~whg^(5BJ)Z.J1A\EWs='vZUKWǸ $~Kc,u!\2@|AY%@p}<#7RX!ėKJ+o^4:Z4>Z)kԈҧXKp2TIQzckHfW)]+1 ѪV0MB-HK醁i0lLl\LFo`,Lݎ,]e-3]2(k4/بJfR_gi фC!%)^ˑ}0'T 69Mhb|K }K%ql:݈I3lTHQO.jС?i H 5+RdG6$ۑTpwR5$nO W&{`-M_"AZ(Oң;–&)9)$uC F:Mo 8칩q>3UJkqK(r̶X,$͞e!v f2 eairH %> MaK$!B4[%+ Thabe1#[+]%ᨹ2D+ߎT{SC%f090z6t ɉiV\ɡdBGxt_LZ(LsS϶ʃ]&k8>[hUc) O|ot#T9 \} b[r{jW'BW9D=rԱ6Hn۫篓6.ʧ./LbLAN =HPUX9GBCCT3UC{OB$RhM緙޽|:G'F"0]RIS^˅O>.E 6\͉"L9\|儇6驊c,P@pC…IO2X\JA]z9`g:L!*.tbH*ݪ;}tnԽщ*t0se |kz5dU!9`v8^wRv'qw^.*VUʝ"}r@S&7t$glprtjjfnaqy9KZ&+L"oA#?UOy&#$(#4Ut+n*盭jZ:BVrtȪ bUɗIzjbGmOD;*g[*f[%CK2v:vrmtdB.ZHg >:mE;jqGJN(D"G^>6,V,of% j նL$O+iZ^j]yH ra볯|3\4=ַu Es_+awڃlF:JxvI51olsm 2n\  26xiܿG'\JqOEseuEW!=^7ZSHxaolmH[eo}^p>>ww޻~i ?}p=p}",k>N}kICᕝ.1h9?%.GeZx@,v$_˞}UJ7 7YTD E~O'X1Sml"#l^2Ηuyvg?-Q=hIU}{[rE۸1'U~bC<@}]2As2۸;/aj=cí3sg'ufw\$Fq&ol6xJ(AӺCgkm~c0G]UYyyVVy"b;Z/@~}NSᨄs7ΨkAZ(H(ns Aݰ) 'NP~11.>ԗ8Y4o'="6@ hӶ0z>\u`W-S r,UJ8F@=J͵۫{-VDXAg^K)Rc-fMMXW6\,F[q7I!.έ7\*øs,:3 ֌\/[x>944r~tǣ_j-@ɉ޾Uxd{C6Rgid)}L*N1J(::&2(8a]@p"6{q˾vf #y4BA_ߺ4{v^n;rȂ7ysW59Q.CӾs nOj6'诚{]#EkYfyJyB|V?νU^=o?WP#\X,aRrX-j jfk)t#R'j-f=Ӷ1u`v) GI3a7J$fGMB Oj0XGµiy56'bLr4eO{c@hF,\]Wz1X)]1وȗڲEI 2.n v)-%3 9962eD'XĚ eg[ai1`ݘ<43hioөfM#ք)z`H__{LX%JԜ]UC.VȌ],b׹pͭrQCKnSnc^C.@:@.~bóB3s&봥}HC?C6?Q57QU2iL_r Ƥivl,4rz& lBG27^;$V#\6aٶtKl[98)`\\\T*U`WFjDEi7Fj5h SoVkԪW-PAz&&={x)~Do 7=Wj&s㾥ed ,2K/K2{°{{/?kANlW&ȅDq9G1VHvni/F+ˁ묛fyR+T Yoi6 &9<@,`=f$WvBNI:mb$;rPj@$K C2" \ƺj}SG5׿?rWp:TǓJ)(j|?WR^9GТ/-2K-8Lb#gΙYg@dk7&#gˢ3)pdXZj;;kf;);)'S,ՑsZ:.T8fvDǒ'@vz}zfI`4H#s_iLG-dMV,h~Ѫ275Eos#_cPÖ- HCzRW1#1ȇv|]c%t,>(/YR<9GTPk 7JY`Bv埉w)\?-ii7^{^1?59*ojBz Aqy?!bhd^l)Ӯ6v!p3řt;<. .(E=;c6R=fyT!:`Vֆ7ph:H-38U9747l\+@1@*ӕUR-.M90Hϡz,ga);à Y5 <9 o *4< |2"ʒ.w5[S6@O ٹgI~*g,d̕D۞I^ WXj6D nH$I$K!= .Z'5~$[CPd2:,$pUMuD녺 1#LzяS1!(0C;sNr'dSzqwZmr' ~G>+bF,ʅݨ5y/?ⴜcvsvzfv.FE&yF6:g5OUsdqOyKvHx4L㴡Iy /duV<g84^t)t6 'ݟ/gmrC[?}4ǟֺ䬓d{L!笱 {kq(.&i oƏ t3>ҡh zOL:lp8oz<ޙ:(sQ϶3<ǃtLt\v9yGjH5ŌSX#d#}d X6y)<-ġMF7K?V?o5-DА8S tT z-0Y(΢4 nNP9PmfH; ?ь(Կh&˶.`g@’$cK=CO_?D_=ˆlBy>L~|@F*5ާA($.jڷ#O$ d2B*݄jKY| 9BvSh5jH)Rh­\%%NY6k vL`:[3T!{Cf4/i+CJuO{wnA?L@'Alass]/ƨ8]Z+Ȯ5d+NkIEp,(M/N6I$Y- tԢ .mC6hՈ3V'!KZC0?釅t2uZ&wЅ)oDW\>=7GvZ}GMca,G$kdhp$b%# Ċ"A@Bc"R"1'>eW(6?X0(CgL_(J"&3rZ{7hI2cTQpAad++x31B\ߴA84n# cu+riz5;nqorv7{P ZN&d2 ĺ1 W]Mm#jh$p ̢Y3+.ΐ Dχ8h,+( **G1 v$TDum-s6LtW#[|:f隙Ɓ1BĤFzZ# ? ;ϕn(UvmjgǬ YX!o{ zs~:7ƞFqY_ h`[5-M4WT`a P5\_gQ$J$NlGĬ1ܺ4eQfCMN;A_KOmՑ 1]%O~itxjfrvfT f}p %nqGNK_ȒԜ{H1aACjJ-*ID*ʭUWޢgĽ 2;kbt(}6+t7@欁JM::qz$٦D֪79b!Or6Ȁ3 T6N7aj46xxrYjsjQ9$-R̈)7Z>9X0,kk1|#u0@ $ Px/ue2X,Y7QPkCa:HW?(Pڦ,_S}EؓW)EUvmCz 猍p$$Z" |*%%KϿB G𲃑)vU^\ɪMɑ]d$M6ȓ |-|MqMSi #tp&@:S e,-6Gi} Բ顗ܔjKDKosٯ@娵n=\5Erf+Inp/g^{gF<_=wP7D?\9;Z+Q;\ᬱ8fR鶊vJxqK6J lG#EuxA^l%2nH>a(C߼M<ٱ⠶$ZMj1JO^8Iw(K->>}󷯿..aͿX@ ֙_j :=/@;Cf |__q*BDKӏV~ϫ*[UVˆI~柍 kdQ7੄·M(mF>87y9Zk//;r[|&苻ȁ©aœV RgoTCPҡX3P7b|zRLhp*-]|Y)fW靷V>iKwx1?^eyv%NJyʮLzʃX(kBD$?y]KC6B;"2YE$t#;L铲xas$擛 =mad35C DOR3a4rhPTa޼ - ȽK)l.l8t5xJQZ! +yVxTzk} j.K;˂L+Ln%碩% L^ŬӪۺ"4LK/r_Q[u{M[Msm*H`ö&aP.ttD[z껭-qS|":fQah ̕`h).ԙC2էfz8dZ$ppuqhPC:z9ZTwHRKZYi%sՓtXyB|Sv ;X#@)UG9D(iCx#SZ$ʚ$3PBA3#tP?!J+X0 EJŕx`X 1:>X & Mس! < W8*ǔ\;z^锹DY aea ?͛n\elbrSfHeq$ĐCBo<'~|堏!+#FuԎ및iSW٣MM>R8*5.\g:ȴP75Y3: eL`j1dOg/!yT?΅wCqDJfn%uaÇOT讬H@3\CJA܄uE[? Oޫ{2?ص8E쳲݉`,4?X DsSYg9R;ɓפVT]BvvYÙT4ѽlTDAxX1ed]4j]*:;7:79  jKc|\t<pr:I(+`M6Ct< C WRB+CB#4 V6\(5P?e^t0LW__hbw?4vHT:|{^_If/ni{aBV.ElxM!#Um[ݗ[ݍFd3 \VvB3w+m,"Nx}v/@n혁18$+&FKRo CSgJay &T#혱6yP承Fn5 Q TOR7!QdO571 pe Y*ӌNRW[xV_=xQ-&0{1b^x3Huj^bb 4,j0Ia9pdn3cW[@ڿL#@ ([9xQ%vpYycES5D}tCE8WX!eW*M6Tӣ!1%-ce@/:aY._b#OlK4sT+9@U/I@mM=J\Ա2E`iN K6V)yb6¡]Գh.7RE Br'ts`"I^!(`EbDN_~^ p/{~eFo\s;id 5X*9R+Zz'F'fFG^T͓),֬qk6jp2k1hp׫r, dq냴4j}ky044 a777̫_GCKC_^@t ~!w|~hG Ŏz6m):幰s99^z5٩v)֪jNWm:24.w2UN5ēLF86G]5 Ld Me M$J-dk̕ ץd À8X׻ 30ݠNp.+q69^PG?|쏒[9(\[b^؂oW`+3ʶ៴28ۏ X?Àl/jQs0yCu = DE^R梊UZQꭾTKU<se3$O![G[ s8ٶ&)3z-ju3=MeW2ۆɺ]'~kH/6YB LǠ ;"]gHfE `auy:7A5啻j勤rE (x {}^'~ Z  (0yk.03>>7j ro DJN^?җ[⥗뮓ŽhhvR霩|9+ٌl"pJtcbb'yIU9+vje}͋mF`fҩ7+{T0 }e>Z/X?+afeMѢcvzl ge1]+ HٰwKGo 4<Ȇ؈},$NR;#-^Ӱ;ߵ4y  iwնy"\st#vW%@-QyH},f +zpa,QiǕ p"c܎ﲿoUɠcMVk,^N^ea֧8:ә{}|*x壶x+mX_b9ē:sr]ZA}9)kh̦pÑVp!urO N:eMBDB#+d֬nҽϮ}mE5j~n>XU%NEV:"bSBt3 tF7ϔʓ= zy$IsdwXL@G]_C~ĉ]!TRovz}֪xBx]`gjƫS\`f!jhYK5>T!L.D-JiҼʤ1TXdZd^dQ$*(I3cՊ_a|&fZP/$xpsd̫"`@ "tLB7w#ʴ'L_U(WV݊mj#sSMUQmL2t` &XjЗ_Sm:~?;7yx_6?Z nZs?{|&{+ݒdyM-]@J,k$ xoE',Ip^!AvIR}>)WoŶMKSQM^ZW=κ]ކ#Dcl:7Vǘq,w sF+FƦ*1_`pn*Z:[A^cBAH ݌ ]3h<;efpy2ư4cWek/)|g}}uuӣ0Ժ刋( !.N]:9v~UY-/0C[tG ;~efKyUXZPg^$b!1 }ގc~nЁaaܡCOsL|̦߫AA -2,8xGwӲ>t23= ˃w3& TGz&@19l@90&* 9;'OOiv5YTlUļ{Ka qHOclBSRs +&W !ZBDk"鏯]XrlYggk=j@oHO›NY6 VƬbh`9$H"OKWa'P8xkHaلmIr;?U- +pi"dUDk71!k'd?̾,y{Kl =Mͱ_tո :{l;C,;L9;M^2/85TRůpαP*f(+AO51jm|,d' 29<³/TS󎆑_1#ZԓBGW̢,>}8ǝg{V(4G|'0utSRM5 5ҭFΦ ...!.m6uB7TbZlRf^^botIʰTn*9Ćs 9mM^7X끹HBhSZjgʰPjGXf> 6D7cބf-rґFYPtA'xρPc\n~꥾ק v': N4L͵-̵Qdiž{uϦ7NymO;A;ρeyMX.$:@&dX)~nf633u[Gon䘿n_vӋ^ܳzM{$q%n C,ΰ$%z:c<ԎCmsӝ3p5 HLb+^Fv]|jƠ&6XC("/3W߫:5$O6$fPP 乩U馚I'{g1=>s $S}-0 +Lfsl 5NqYV9|'R GAYyiO`vav: W yl^ ;O>.ǜ=ozьFW؀ܻ${Ų!l6! pe{~ !l߇|d!޹o9|"+(M^214Y "+NT y:Py:F64a0Y8lYCyp:rԪcPɂP Hw. %;b sYegY//?ӚU+-ttJHK3/arAE "]& a(9KKǴ B?b'WC4*^;Uy!Zˡຑ73GUrޯ9ޘ:wc64HbC?ۄ u&ir:wys޵SOؐմ8 Ju050yOel0P`]}2ikt Z'u%/=‘a+c7[\U;x2|3g@L@pf >`-L }T8}'| \ٲ(tG.VHa=[3Wo|ձ-jjidh >;y?T+!r>"rUί.׽4hPU kUlT$znUL[[O\bR iTSoϏ|t@S$Šm0}@NgRh (yT-_1\jzf.Ϊ}]'NuEPojY'}Z^}0|K'л7]~*ih_vW :5t {jב5!/?v1bM\<2[gu(Z}`p+ #LGQb٥ .E z8 ? FQ7{nQS9ڐSCLJ}?>yytK5= _V_Ya;p+B |;=ОmO4 n7c45 q֎H]{u?р1bM 7-T`C_۳3Nq b&'o[ꁰM/¿[zEm2ycbK&(kޅ+ p^݈b j3ڂ$l*0Tarh02kp NRڥZu!<d{>ս427t;]>{0}Y0&*P1n MO}ލOR=aĔcf(YԳl>ŤV0@-"EC!K.όʄ|V:ʢ6Ј+ VlVeֹnA.`nE>VTA+FyCS˛ϗ\;ؕ(C:h2{c*\<ՋݦϾ;~wPSse *\{0Z\]~q+ǿDd8r"˷ocRQ~7kߝc =xvϩ7T/&CV6dKQ$I-\+ U6Pc_=䬢X+ԻuE7:p@KzPGQ8C CMklrbfO<{ɚO|?;w3ӽ'gt|1 #Ӊ6y/ݽ?wƾ8ttihU|=GVh[9K]G!sz}:p?FJz6\ث[:D~~eأo>2/ $O.qM,p%qëM85[qppىuxP@<dt {hT'CCk3<ݿQ~,vM76 ۏJGO2]'JTEB!`lJ9c;]c<{/t2߾.q-"_d}iUkDD{7}Դ%5>LK>)g[$KJe}LLSpAmgf Ky'KXp՛ByQҎ(`M!bj.(C@ d˞evxןO=hxﲈuv /S78yn& 85mu}s~B ͫwn^9s㟾JciGs  y`r)Ouhh .+l*K@ϗ (%0/Plav8ـt<}ŶyDA?^U^'Jvb땼o?$2ڗ^~g>&/GN:y*$P2.#GQ)dR^{p_K_Cm壺5j'pWB-&A[Q$<: ;U>'gE$E[MџXShGL0Z[Xܜs.sAc&jlABX*+Gvo}֓^`_wڋ;9ujSg/5ܘq!ܧ]h_s-ռ,fhqdܠEu(?$* 㿜ؚw @x6jJRNM>Z O} f[=+9D:rk%` .ْ +m1E|=O >{ p|d.!HLKhdo>ey1֩~EA44~}Uw3a+/o\hJ5k#ۂ[*Np IH(~#6dxpȝB #= (qoA}Г1"jgSc3Y{8@n R[h@-B 7 R'c*Y ZtIq(SP2gسذwqratv(Yћ(틗D|h~0E'T.uZa/R'?aF־e!;B룼o]wg0CQ |f45027!y ko\Avˏ#Uyi $аI@c1w(dܝ2~Z\kY^Z g`W(5J#@l­!ŔBrxbn]o7` 1X½8EC>].x:(z@o# (!q IzjӮG#XV"ZĦX/|c'C>1x] @\U΃qs!y~\W=npd&S9IT~"*ª`~e#5Ҳ vDXOJ"T)xeM VhQâaUgYU µty4@2j?;7c}G}X~VvꯝLHݹ\~ql(pїIp/?+up߸ϱ?ڸ;]1>`? {(΂znoHzI=bsb%)jJD(HA^IUi"动J9UTDT y:6Q u=k w:v`I(nUxԈ3]YIoVgDb^#e9nUj=1XKicK/Σ^^F:v!ƫ+Xod杕Wba]yīgug*à}}om„̒<=o02T(f .%m(h[v"W1!)(ul#G < %|+P2wȘ;DL!@+ʥJN-.p^Z 'L,h;#qPF(wWYG+zw #³?=űn:?3IZ[ڹPNH?n@@#a =~ 9̥f I%A@>zVȁCsiW ߻(yk'~f@ V7m/022UnrDۣVPZc@:] dbu5xx`[rBDDv03flI[%iҍ^`(q Eɤy[r;Б:E=8H7^\{E:K}s iTAs7IUW8z#qPkQlRZ:yB\*Vu-FN]SU4zENݮy@F- y"Z a|RCo4l=3'F@yTB۽;f; H7O b|/Ac>hw< :X3`ui[1/8z@/H[ōQ`7[Mf.C<f{Pm"Vy0U}lB+$? :}>ɿLRkL4}a2 {u݁zT<4UnCc% e{;ٝJ}s,suX~[#"$C`M 5BîrrkH A KTFZ#TI  oK6"IP J}N/9&ݡ0Ng3 cD0G)&*y18Th{΁ECK`ne#.c+G G)h?.%`כg.M_} XJYE0„zm]"7W ΍+S~zw34P0#5@C @MYMLSg59e6!SW,RZFժMN]eV(`b4ZٰmA.x0LjԘWbxhn<|0@ǡ\e&u$m.r>4}tc1ߞG}1%1JB9(x[ o[_t<}~sAKSƷ.ڽԍ"&-66q?UZzhį f^'n˛J)* \%y7Fզ٩VwK9T8Y@5[&M>SO^ţ?it6{4\p*= SCwO /G?G uo0pLJA ! WW+Tn.Y~ TUo.K2rRPvy:Q֘J5$k"%>NQϰJ'SdUa[@-ݧh9h78wp|S&4QTiU%^999в~e>zPy2VCT fw",51J| d$Zeh= 5ޞ~|й/.{}f/.M9{CSϞi;s ݀ޔ=pWn]3M/#N |;s=ь5jgXj(+GLpZ{"ȡ꧓Z+}EJ#IyE Ih@,T PoeU9^CPcU9&vQj`jLhU DJ52^S'6hzA[b"Y )< }F3[2(ƓELjG=`+-þ*R٥!S)\TTamH 0PF@_e v @2*ņ}YoGҞ !r] Lji Zdb@ŨF^]nf[2̢9LU\*I6BZ ՠ5(EuR~\Ш# ϋ^"c)ؕj^V0Y1"Z?lspTD+MLQJOOON&I/mT9y䅙'fMA[ myk$fBv`Z@%ow']w''Rj$iq\Vު5 <)\+ZJ-QKEb63F,:$LfR*O堈ɦv2t2rԶ}BIP73jĒʅݰdWL$S8niMj)(> fE͙OOte8wgv߸1t>B_XtEHq԰l![DJz |{j̭^MYTfNK\Sև)BU!2?'7_0Cyo:hu 1ѵ>75_mӨzBgؔvnwt(J5EL$=zCECpx|o"&.qs|2_gfnJށR8@ō+GFϑaU[~HaZFJ.z?˜`WR,&v+"RE#ya"b$vd!z0s%t>}3x^4R=0  vT ,OHw9yH$`%XeZ|w_ $Mӄa3 6B*]g/7=?<APLMJ$DE I6d$1 >UԹ"LÇTg5.uG+̈wB[a7yQA1{N>8gqlujPV>;45/a/^*^[`/oɜ?}ǝgN//u_ eb]_ B8\EΠvp\9PQ1WNǦ؃ 3eJ &s 7B:[|H(Qr O:?[SS٥S7گ>pʙB:}Bop1-^9e/|~ wtMHڨ >`4"T܀-)S2 X=|8)dxlc'O}#wN{ݟozic YCg"ͽWnBЍkhdg zמ=V!tK<`ݧ4ƀ_kz$}Qj !وPb<I!myCc<8l7ʄ3$ddqp"WzFs ΅QةvuDGm v>6sb)ҧԗ]Wǁ0 (ҧ/ ?w4^ɸ^^P(qCdwQp*HI8paCzPMvzDfg_=1' p<C.cȍ^!Ey IJ,pf;OލP{r*v.\'7K:tɋoW?$EQ&+Lt" yv (­*7x @عJNKyB5 7i;c)AS1@t3 y?T`Zj$@;FMk}աPQveb5H#(H6"S8ӷ  fɔ7lҟR+Ԇd_NTbg Ot=m(#{L`k_~/?-KTuwI,Vsr")$ϕ27BDLmDtR1?()diÿn #4ǀ f(m".0FXvh N=c FH :w(4QF5vOpۿ|X  BX(CCT\ZX Nkt"RKB$tbfqNġ?oQUT;#h:b4R5Vu[gB!TaHr :aQaoQlWUrP UKUVoi[@ij'`Rr/*;Y9PUPEuP,0DEAs\\beUmp6@%ۭ?0' 9DGBR5@VLE#\d`TnAsG5)P+2Hu5ZK]"I\WyTAn|'vG; f5n[c~s6|[E OY: o]lCLwtG&!nJh`t(׊kW-،a눰B"䂐*2H`vOm@(pP{O}fvPjz5 5h]w4tlnO_us(; " |lM1ULIIi F-t{AU(DR'>X +TjVy]ʮ* F%B/ {w'Ʌp2# ֛FӶhf=cr父%Q+?Yy{gG?/|?dm4Z8N$qrB<݊  (qQTBDρyc&*/H*fOIyr~ۅ._ܞ;/R|3yel\(^lUB3 Z ?XnO_*kٳU ]J-ɡ v[Clca#!3ehSfQeC@JN#%Dq CpcmI2~K'Pԛ]Y2MX\-XSng JДA nqqp nyțECs)j|aX0Z1X_Tk w5_0]F|o߃_FA]Z+t^:Y`eOh#1a.HwO$A:7A6C[m!]VDka懌]wMӟT =S5:] DbC 04gHJ+tJIJ'FZQgVh:&P6:uz]YSIҷӀdUM=Juhaߝzpi Jɼ$Hj[2URЪ?k~b𩨒Du~$Bݐh79WP6:̍vG]grE): ޗ~aU}G.\РAۄD\?W,(IK4̦v$V%r U"Pk1'{\-^]K)HQa}IO.V>^i02Y.66!!M6YMIHfiJ[}`%N]׈z苋, J"!TWGg`T rB*S(4 *5<RRTp`~.#DO&߯RGSPB>an4E["Q q[±,P3J ' `x֞$݋"/%p@kq0P~z$?m>ta3tFBP"ѯLCQ% V(#k2PcwڿW/߽s4㛦 o'IܹPqg/??wYZx^$&elAA *FkvaCPC&)lG=T Z./4a폴Wh:2P)6\1D_|)З dUDeuK]8FWoxQԁiZ<oD:gY6'GoYzoha},]HU  G#.0X"!}]4Ͳ<@"m|Č?!ʶ=t/qj:Ízt!JbAJ x9:&r1_H=nNt݇yQ7T~5_ mF.K`vQcy EX1ۇ[,1{oy$1E8BiF( ,dIAʵssBU|PxxɯO9? $д@_`d&!CG1&N!Z;`B@$ K'|> C #="`U"5(mpj; g`$ G:TKѴ@`̻`#Zסkl z8h:HF#yUTڕUMA^SڭQ1OZe3W:Lv=T*{FF Ӈ;9"6 I^AJmbP8!{I{t6@:A:XT$x&&B3EqP<Gz,kt)CZ P'&i;" ħ&GF::&&!C>\$pI냬m! {Zzh64 x`lfQR`3`}k8'hdYgwk)>ڕX%j,oŷanP_q^|"H=/Fy^2`*vAPC5G9%X;CS! M:+O7&f#7UP޻z5Hqr: g;S;+cx5F^Tļ=uy>_|0 sFSŚX̅6SCYiuE5%8)lr_5U a߂BY d@_D$SE|# N :PP z)50ՀO4Q|}'e3(}[]Խ]jR{-:Ⱥb?Ou"cΥeW#&Ĝ Xz&%w)D1v*JIVyf}Vⴖ->gC-!#)=.=np[<&@.H)zQ&ba)$_9g&Lde6.J6Id;zifX8=ZVe4;$Nag`UN h\Z@2\6i{J#0 ;ߺ>u}2J)vdBUg9&cÞ8meЖ֔Dos)ƆB@s pBP/5 C2<>998- //lStuTH1f盩j_Ϸ窍mNj-I!-r^" :jqX`?A ;vt% 8p~3 F&l}P16;d\/SOO_+.L͝"3ݙt>gAL>t\:}ħkwή\ެ^0<_BYgo07ku1s >4E&blа  ZrjJ j <(C`VyFj+Hu.KӌZݎBS""W{qf50V(Wct-`)(ր@jUV*op pl%krBqD,ռ*妫Z26 `wH8n ˆB7:yZ% '4J\؍@}L RIRp 3&-#4 n 4,H+v]JX/ d "Mp,pPBT d2˒+@@>X XN,g0_s*Ǻqۡk:zcADC?RN)3]DG")da$fn1UtUn3&0|WllcvpfM#ڡKpX֊%-2V)Btb 9/o-<ghU>b# ! Y]l N \VNKTL-r=yW!]~ 9th"͍"nQ+;#- 6tτ3LJǎLlߺ-ȳN,mY<& Rf)y1>!TŃt 3vK,ɡmv 1ow>|>$pf33Yٜu Z&s,n>!qV`ef^âۂâP3?/UlsdfQF:TXnK XBKY\+_ϗFR=n172x6滖Ĭ9B:bˣ+-&. bm1ˌ: 4xѦj$@.= UBtS/%Pw_~ޙsg/BR=ܺy19ߡ!?sֶ*O05լ[w4|_^y{%i -BB*"U)65BH[jAYbA#p xPa;@;V4L@z\*P%oȗ*%:x e iaS{Y둴EjLxJfPt(=m}v|? MAF ^е"tBU*v2YFab!H`~l T6 2ɵNa\bЊ'[. 0JZ;Ч&&& #nuj+"HU#mlD Ǚw`q0}E/H̓ y Y.8K"S(rY*IbYj<`mC>2*,"Q涒q*mtMMdfeV >^:5*0QTIȠm`!oL7G,|+[օq^*8/%KRa LM pM|nWZm"rpzbXT] DGP!/D<|*4TZ.ٛ>;'s7( z6Fc&ܸqԵS'O?mo?wD](.(y:ȃ mڎ }M ,ۡl`Uo:}Z H}$LW3 P(EV0A| "@ M=,;dJezͤ$N*4vlH/!H PBXPQwuuuu]]ײ6DEj4k}AB}s~e[`; meN[Ϸtŕ;sKYkawIл<"Ub (mZn7VѪ9 9p\/zP %[ý ,JN=3f(1)2rBM#Srb "E||Lz5U46"JT@MB|Y6ߩD=G˹J(Ơ$r|<ϣM5ʽ&8e6F" ( ^s˲c_ϵY9&INM[B2\?[הgLr-r@82BpE[2γhi`5# xS">/j``[Trz>mEq-1 WRm |LJ;Y"9@qr |Vie%#.Q*QLUENqeNiö$!*[.c4̳ki@ph]6霪wCMX;G ZHj T(Uq1,ZB%}z#fu˒\ׯw;tf5G#\h(d,@c"u7 gr~p(ۣ"Q40(}3"πL##s$V.eH8PuТ9}ԅg._AfN5!ԵC@A4$B _8ŕc_L~ah]sfDsq^mfJ]VjuZ"$yMkJRA]8yMnYҧ Xh6ꂱ+::O<HQmQEVAS1E"A x*9ve&ZhnJ#+?}wAƶM9"& աAU@Eך1|KXs p GN|jk )yA…lrமLAdp2UY4M$] (*\W(vF}2(8feOR,< -)6A䦸YInhC1 tǩ:(Ľc3wdm ';@BObjLJA? hqa7?s]dQ+eG+x| Zh&m7D@_-@,*Ґa[7&j (caga׻G@cvJ}ZAt0@z#8 98Qg"@y8TboC :QA_"|*twvp`mwfJbtVfeLgsO3纺!=} "Z'?ٯo©&ԮkKB앓_w7֯^{ unBS4x:3kI">% tćXrYy싓'w5r2T23>M2>aPcH$:`E%p31Dmn2bN azβd/>|@95>驼.LH)zd]L~ܨ$buc(!,HR 6q|⃨dauÄ8` Q1P,Y\ O@%`^쇥k!=*+PG0sYV`͏bIF#vGuz:NSE (Jnc- zLuO4e?̳hl0'&?C. )7Yk el r .|gI> 9ŐSj>k<6&*3pd-~0Jǧ.ݴ4\9">T x WI|ŇG9p|x g*"|"C'2"D@r]`?qP˅@haK]|PxQ0!>is]VݔF$Qp s[K2a\֤ @,HY* 2429׋+C:5p{X p:Y$Qza~Xzǹ{sb?fp?qZbU r׉h ٲu9Ӡ>߾7^laսLoth5ӢYRPLC84LW4V0M_<+DљħPsYu N8~1t %R \Kޢuĕ?8G֔uRDZO쮨~ EţV#L*4C)l|U{9.@kaŵElu8 y!T.s+ "x,9h+`oa\UY|c+,v[ΰ/$gaj``ǚ BAX +lLz=IM:i(s-\/ADZhGKR6\1OhT1:$h9q&ƨq"F?zg6! yE],w-><݈mp 0T"2@)x ?Ϫd"ߏϢdCY@-IB)@)CFZ0-`]4""βcD9MEkRj?Ռ8޲cGe f J7m+{퍏~ uPZn`"hyx=SV" 6# EGtQ0ssoƒH:5"dFB4ϲ*+W2n7V^ O1uUFluv,ʠ ݆Yd< 96XtB0d)w[%Xƙ!n˄  u#n2d@roFjr2 }*"&јUM+8LfX˒1=@ːT9WLJU ګL5o?Ӎ)tYgM.NmSDXÑ hjD5+;Z rsX gf4Um?>Z|gZBKnA9QN@8#A=G(LQ 㨍m+Rˑ=ge(Ԭ6@?YXZ E j2l,T*>vhV>Tg[~Һg_`7@cA㎣PN,`9+~~\sM3) AmhrKe vQP_aȰ. R6~ 6'" 5yH'i{ ,=-Va7iF$;m-v/~/Ր]+B~&\ň$d$Bs!@ UM%:'}gշ^^kW_'퓷oj!wy`&HU ZʫQ+P0;@@Hp|FCu7Ip_J&8L|@L#t@/jC"(G <BGN=ˤ]q`?1]4gq")#ꉘUI8W9pL.L1c%Cُ)8HT2ǦdDZE5I3}9e5{gO).]$b۟-|5Մy()흗cknJ|ąiԖ{biTfPTuU z⃨7)cwHUaQ"O!> op3kI&E v+)HK~XVU;Pq#Udeur.IW_jٜ0 )/(X`ɩE\6 P#\|8xrNŌi^ڴ._t9TIU |`삽.z"G؟}U3둰06/*Y3:_Ad1.4R&j53 wɟh;uWH8"gR g& ;BljXBo,ww\j@9\G;c^Ú%kz'liP u#^!҇A!3X#&܄DG G!0y_Z~.: E+ FnweEVt/% }DiEbM>2 nTQ#d~b+e-ų 6B Qms x^>o*xtE29H+/lD9hrD7eoB%w xCCG1 o0NJSC/i7bL,Ƨc Sp[+‰  Cs=>I z->tͅIMkT*"Z<=aoD{3ICz:|C@4**,zez5Fܙ+r6҈Lqs^aZfn s5*^\;M 7 jTO#:l-8{b<|^{Üث{}?߸ShᑊmûζLBmmc*ROhG,J4ӳBeQUBhX}ߜ(9`?(Ar@@8I@ZQ~l:Ξ:G :ՄI৮j©Fk&LPjpm.R/wùqʹݟ南ެ[]f$ XX]`ˉE/:rl+bhϱGI:(aj qSn_0MsD?CUhYbfQYm+9zw:0Qy%r?;!Vo0&-JwU  W1 3;%. 闺 > NĨ 7$mO}g gxI`ԡCXZz|vK? k>~X^L|v nOZ+dg~dNR}oKڜ!J|,Š DjYbj6;lº (Eշc@VcAG8rfxq@&HR[X8r^ g]x dYmz AkJ+qoO k@ 6<0> DɾY;m d=$vtKv:4R5z%홲8( kM4PI8_R+l 캆RM:&f&dZBmϬ兙sID$O$bk{OC:. kU@RE-s5!8!cNU!ېmِm\|.ssߞ=z{g~oO,_eBQKZ+H<$F\܋6x1 K5ٹ^Llc4+ȉlt$V"7\óy.J3l͏[iiʱlI' osX'/pmw<04gg֞ 8s6y9,Žy ; -Y%'4'nNB]](us =6mɍӿK%PNT*7K˰vIyN% /0g|P| qD-Ipve Oggϖ^] AZ|O{CI5[vH%E1Zjښ3 Fv".l.$8ũEprN&-#9 B6*z)xAl7P?ք 7\:4u9Ԍc7d?ޭz;o* &~ԃ#s^o`sgckO ]'muQʚikKz&Wze:Wf{`zJ8( ͙-Yx3v,($ıH68  ڹd$& t>,G4fzdh1jTAvF>"J&F")#K$)SF%'>6򆽫jm(::2 W5" J8hP?E? P]fT|Ivw8W]+ɡb?ןł C05e^јk0:"eJDƫY&kgCfEΰGR(V k ۤ6m,7wS SogW p[}r\r[{%n,0Ժ0>>'+KR0J4⌀t91ufe,޶?=,拏z7W-yM ]rLC!8&FoDs W+L|օ< ?L|&ԇC-⳩4 >8p ac` "\,0b$Y_#& )ΤuR9ej|-vik47fb0.쐒Քkm.d8nofsy9M-%L V'c;Vs)A%d;e4I?JQЗ5Ѐ91-[uBM-ݤnHw GiF5BՄ>&?SԤ~T⢾5Ǿ\1 (& 15j'C/H[g};k蘙< !溜gܟ1Oծ|Ξ&Ϝ>sLT "\DW,BEOlHajjDMM·Fd. 6hT(2^;})wo]wL~[p>*pCrd)TYto`POPuEA}H6GgU.Sﹽ4gۀ}hvqD]:^ΰrJs+EhSoL"監&1!(qD Q<?-S X % QI(ft[ M:Q d(Rgm%:)*߂yG)rNoΒM=ݜnwビ pMw݊ϪP|BFu I|KD|Pe!> |+0rG4=$&t Qnyx-*Zϧ]dU,4*!,挮PEɢXL|d'm3" gg] {ǮeCc#-56?,GBs.s떄C}.E0aJBc?|fqa  z\~tC 7F $cЪbS [p`BRb"x:C1I|p?U yPBxk E (~Gp- ֣k!Q;dҬkAUKD v$Nfl=Ċ7LmrV 7>@{V=h6#_^!,6L8/a EA{82B'/J}mbGt J&tz>\ 4}rF!%0쇩eu?q`x};[xEYLj~qI{qmnxţqmcm1JGT}codzb/(qƪ%o>~rh ַ Cw3ǔhTCiS r$MtjBI}?Dy[gK$Ϝ9?nNAvrmuy>hl‡̢ l4&Vs-MƍMXq t`srL `(\&uG+! tP׌E8VףrYS  +`t 5ɇvS1ݱGRbb]U.XcB{?jW`hh?hvK[hOw֚ؓݰ V v.Ǿ6 #R$L| !j|$>D||{ 忌-l.-U R M# u@kWpsFaYc3Q|Y  ^F4V{4>B[栴<1!M>MmSacMIaZ0HR Dw~EL+9%\L=`?q&V4aT!_ aibU򣜓{omVPܜl];+c|1ǥxoiVNpg=9Ԙ>ŌxMQBy64P_DdXdk(.v3t}ǽnDlzjLEsдYSI4J I{7~akOn+Ͻoேdk Csݝ])Bhb%8 BST5jB@dW u˵T#ɵ&\0!]#1VT;"Fm3]_~]w"DŽ@".Ͱ1$.a.OTqjT&,ž:SWX{O}]^t=fIb&aCY,ŐQRJQݣv  ʨ 8t1pH>05MŖm}yH;Ȼ{cOu d-s08{Rz&`"h͊tɢfeBŅih®Ǎ@sfZT3ML78[ҦPabuZs~d X>>G>8G:~gOtG:w<zT  g=BIsT($I&MGC|]T{;`!Ok8w?jHvR\l$ -O. 0Vd9w7ĿԹoAb >=dyOB=Mƿ0mkv|۞|,]Cj䚴H^W#R):|EJQ45ڍ&ƭDջ}5n]'vu!ɵg[E٠,&UaTVɈM*ʱ4 1UٲҪ oL}fd>bھ>pE4}Y3 f9tRgXTT$'EETúmx`m;?Lon -5 ʭO I~z7 ̛z6ЬJF4Q֤i8a"-7Gn͆@C}z7*=CZ1ddu]e-<QesJ, ȷ<5X mq GgTMX>$jHҤI$QӣPnPIl(MHuH42Zn՜/qg!TR_}hp+"W%*5K+JGK%Pjrzfě&ic˂ 5V SҽTM Rz߲r:mj˳Ͼiܟ~wl)óꆤVxƭm)2,,IROqFbi~;PAT4\/IC=,|ߠU3{y7l]8q'GfX5 ??[o-_~Si:p9l:yᢀ1b}zs뵯Léj(gD$ jt"g+Z>/WM?>'cbFc[ʛb Ch&H;(P=\U[71pӁ ?0DrOI}TO=Sjؐ!.P-nVsR3},[[R_&YY'kHlH5nI7oN3mN3nN34%jR[]d\b 1 t1%ƨ }d^Z+.KPG<5jEP Tm rM1W:K]D7[? k,uyڼBb9Υٮ%& [M:h}T(A!Su= j PyjrPHã/rGI~}[ uۋs՛{dus9OyM6E§XSnHݑjޜjh pc.KDxi@S1'`\ېd\qiPUZ)z j24Ѿ^i*t!bdUueoQcqg[vU-ٚ- x /*Mkׯ땏q-cb",鶥c:w\Gc#&[fE&h>3׀7WI+˅Yh!"^B'heдIҐd(='R6T>  C)My]#\d6o4>6geGD0"QGh{z@̞=UK -Mi҆m sdu늍[6s5qM5U UM2 \ q\IN=)Th@}DbuBRbVpc=;3!>DkXYB-3NR<џ7-ņ/6Vl.{#|!>T%=5ƾzfwr˦W7ls%& ǏHIK5DOpjE1ʎin`RӀUUyΥee==!nc=ܪEOV]?u‚QіEoNqQ1*Ζ#ǯwNцŮN@_h|sG?|+'yW^^x%c3c|jj4H'GQVsGkgnW~R?M1 ICRSYgSoo|K>k?oS?9w$ \>͖ő $ ?L5kDFh\:r++;:5ܬǥ!7N3?˷-w4xFs7ꟽQ̘#en^־=G9 3odOvM>OSy{릾M}=;'o$ k-FRq}̸7jQ{Tݪ۔*"nGS:f$QfP`%|lԂH~&0#CXb/-`0Ks} s7ISIz95b*0vC[NwaMwDmִ"U:+fcnOl>[ e88Ǹzf}@Rޱ[z7䩛r Tz1Wo,uliuIC^FpTKxtGtJkըߨVܪE96:.1fQ-nQW X.{C~/}g>__|o/> Sw>w|C@}ǧ>=otsO̞[7[4牱#eޞGTk}0];98?ߵ_j`FyqTHsT?ƈ! .+7|_|Co^lr+Ǯ\jpbW;%0'Wgߣ0ѨK54a$H3,΀"\tɓO򎲹UH1T-ͱ,I0n3n*6oyzQXdyVnJ62y@<ͲexUE- F.I*"VdW)jhC,TuY< a|ljԍGB։)6SrPsp vqX$ v%` &T|n\d\`±:(q) ?3*͹ώ5(}@`۠i;fI:(y`ꖁi26O_STg{ @*bʃ=:j2uYN;۞:8Nj7Zv緸;hM# SHr@wA$F+ԃearٍj%iM1 tJ߬GOeԝg>ޝx_~/>?v7_[38G?'9|ѣ'Ouji?y';st˱SL:vvv}_}|ǿW~/8W3[_M˷,8^7ه'knMU)nʆZdC#IGݴl_=g?WG>:tcߴMW_ï#gOm yRfw;6lp((9Lm8\6q3*>}H۩ێq⣮w+{mϷ_r͹7?PaCyRw[]l|`1#mބH|},oC9Qו+]tD~HkSNJ&&;@k©vpajSWN?o^Z{YiM3o`/80$i@>uZ ˳l婖^D0bTG]]|xX(cm DT@ 'tu#paA A4DoS7Ǎn^=.3|gmWlce aΝ#{ow඄Hzꖸ,[vf=jqwE ;z&b$7 vze{VKA}R66n_7eжm,5jzhr,Y^D C3 cn.,4'"$^d)8R<fzS8tMv sDSzg[}c]>>c>xǴ$T䥅=foHm,[o~_9|\ۑ֖.TΟji=׊2.ӺyŖSgϞ>wL;b/ w :N;z엧}Wg>voזCo=^? [gskVBo{8A7׻g_~w<_}ّ/Ovv4B(m'>š}^{׿G[{b.> 4x-Deˤ+߶}{D']8x/N8{㧾WOW?߿zcO(bSj8J4~}g΂>[XB>݁y…nrЖ}. La^|9zU9C1tIO:mN;|?;o>~VlLgmAL7ۋL,d|8 uI/8QkxQ{ :-Q2,b\Ԯ*eP855Z,BthۊӞ.x' 4LOSl'%'ҵ-=iaʋ]׮*66`ik/*zij%H-B%ST3#+0ptm3צ].'$oIQ1. 53m_^-ٱm3nvoVƃS'HrLvK2+reE⊔}_ۿ|^]_+_{B79'mBwf5qJk'Uj=o]|<@n/Bsg[ZZOu;}ㇾǾxO;xvcBW_r:;g~Z[Nhηwsg fgδm=uS-GQ/䩣"#q  TE2L!` BH\jj#Ν9x7_;GZ?} oٲenן{Cq*;*M#D iXo?.Q\3W?_O,4Wj/> ừ"KJO?`7 ۮezܤDhQ1O p}iKCU_fErB)݄2>[$˷aY_hk3qjĴ6'!-EexCs n+#T楸y:?쉽ǬY/IuEu#^w]b#2E?|];VSD=Z1F$K5cq\^Pz50аJސ`9yH Oޅv-ȌLYW̤ <<M<`Zf^XmεyJM]U`Ggm)?ڐk4Y|rx z^RW^Oo~7>|/]5iHHi^v^>66}Qa2)vY42޻{YŇ{Wϟ;}ʷ|{qpg8+ Q p5/Co/a{]Gw "<9`W=w_9%鯿f:s mh,uyȤ2?꬐Q2_Ay3m]g;ϷuoG@IQd]wW?1 k l ;η^h;qxm_ro>x7~CVl9i#]gZUgD;HgS *.}'~b1~CyX01=90(!LfKϲ*Te@ʎ}"Y !υjs#zGɞ){ȔO I߻Ĺؾ~`psC3DSu5(S М KߐLqh{T"Fj[t2xl*sހ:' L̸  eݜS)e&JѬiJޔDKb-+16 KӯSA=Ml[=îlM4F=f~ܦ卝`6m.M#O7& T('L?2oҷOynd#3ܐ0XWq:Y6[KFe^us&|C S's|OG>ɏwU-}H% V*D3LulVu?|73pڸ3T5rKbޅnL0fy#J8"rNjh"йGt΃ts<1yoi9z!WG I P@ģEb ~߿~wA%+@(Ѳjl9vO~'?18%ǨLpu-,E4Q^'W-4v);rД] l.rC߿4-ldGFiS*ްoI-R&}qб0վ,dzlúb:X=b@XTeԦk߰4A T oʚ4z3VU <&]FTS} <^SzCvsq@K7?пO!B7P/_Hͽ ٪5A*);Ri4&Jږ?qLJ֣mG/>q\Mq7>waQ][PaP& 5K4+Q$&Q13DcK@)0P}fF7yr6gNg^﬽ʻ˥9];aEl8~.i߮W?jiDԶ`Z/J&M E;&5~u'4Koa@cY@ I@Cܣx,mhꄸ|X}ᷱI|r1 6Xc=0u/P Xȇr4BD#4J> @ֈ &zTO6^&_xu!AϏ0}9vO;bPCEO"Z_)Sw:uĂd=xElqRn?0vJ.>>FrtQ/N`e !gb-Z"1lzAv8'˛B "A#Y눵)źeL±}_p !HѮYwvvv_ 6fqX- Vʍr:ZuqysdΞ[coGʭ͑ɏvR3wF;-vFY틳{?QbyF#MڏQ $vh ·z,nLȷ1kog*@* pcUv Kn%r@oBs~,8t%%w>׮T FuC>z%Ц%յ N纥{M8%Pe#NO\GS +$-w@ s2k1<܉ېb;a-9SjT4;]GjqyZ"44EM zm%\ Gp(Z.d %l^pA mI~_lX3xY1{긭 owޔd{~:fʹ~_nu(%zw;ΈAܾd)Q 򗈟_"dmǪ[q .;YU {.ENToi6C6if64㳉xs,esor 8 nifLNN Mɞ[S<6;ggY ^ima&zernk8&n6̏5og+jG;f̶YmlNcOp['p.I@QF$D|xLޗ+!hS7X",`f>w'8Mp߆(eEv]KܿtrXEC#y{.|Ӽ - 7XAΟUh.hV16 UJaØxi0LLt3M'@t 6=ah \{F *6 y@t`I[QPk"tfv"A f&G`@&_8 P0.}3II!=~7շRTǢW>`\,6jMCyU맏~vzȌd-%y[``!*'vm}V'g$duΎ̎^c:\$p'zr$_fNnF C.h5DMf "5[aӖ2D1O(jcD Wm_$`W֖8qw4iMK\:. uX&_.Yf0xe8qk"W-8TfQ:/54q ɌgaM^-UV2\[a)NՖ.;YPIژ`oq},*uf*BH셛MC37->ܬ&r(h\,3X)3B ʆ ۩bV\_ޭk 4mNN}C5F`w-/Qt_?EGGzt^ -RZal}T5R ^xȮ=£ yG ~ѵl:j#yl>ǿxe2Z"2(c"b729󿟺S g(KC 0}Kf2MvKv3@2g [SnxcݰjNĀMɲwzM>8ち{v˩E-5jkM=[ǭ&_VXOd֬콢כQAMNj_2#cXl7^,e 1ûy*ʉrE2'Tduso\)*)$d '0A3GFAbb]rOp3U657Tk4^IK*a2M` >jr-4 $y 5_C QI$U@[pCl 1OSkžXc5`GNWRXћgǙK/Jx0'C 83B'ӫb1Ц={.O}pS_yK 5`c ԰98QյZdk>ҩ3}GqCn)7ԘdH.!$ kS` 0Ҋ<{@PhnV撚b?,0t2HL؃q!^x ٚh=f`K uՐ-9 ^r,N8OۏqOp*8J8cAB$'h5_0Sj:]bD8t;m4`'7Ul8œ{Յ!chʆu`āۑӄ?(\˄,h$\pu0:s\?7TN],- p fT⑎{:w3&1Cf8 !/3V43ԭ3N|zv5Y žōhF "j%fpeLH}u#doAX.ݹk7\=x}Jp^>l>1"[9#K9X"ܽ~ttmbp:ή9\8(9k2\*6BRb12+#P&0M a.4oF\(dDsI\/ BA#Ă6'R<-mFp 2ðH7SyXrQ>c}&ϋv[#x[Z>AkDyPlr:zgFvo֮>ng&297ƘKNr-  -cio2!i…}ŅM.w87 ?ٞ8W7d⣽uM$o1tNccF!~'~pkȝ}vO79xJjʿ\z,YJc _)kY;Q7@o /1䭏[k/|v0wʈeCR%xzt\z A.м oDzE{?$ g8+18gDwEr}<M{yڏ*$5_7Nq'~:;]O`ECRFD&B3%Xg,۵ƚS?:..le/حwʐX.2]"2}VhUd d0L3tO7߽خ?|Ǐ9 (VNoo:okVl9&_Ñ|s >Uwr0cƒ<_h0yIB?k0bY5[.`77Bf9$X|bGޕᄐw֐_~ÐmąZֿo#+PK%G׿Ճg/o55e4U+_~ᆬ(7~Wj߻YTpr{߮rOe.}%΁CBSM8v"uY"*0#E[¥~APP-ў\DH]L:7~ŋߊ*/[ŝۊjH7R GyXp͊;V\W^XUpnДV\]VڤB͊[+{˯l>|ںA }9"}s&ykX.j['ivtEA^6B_݂E ː#SQuU%Jme㺚RTxwF}vV&] &X-K1U0n.,OGo_*W!^ IVR[ՂrVDX ;f$T4AU[(xmj45 Xe፪xiIüƄ-amѾX~ut^iowPѱ}[ n*+FZ8 hmPd k3 '@)Y `449ԴU]P?]n=I ZI`!U⣐aBY|R M!REAM(( QIs͘TUW>((,zXPp3|r|玱]EE  *|=6S/g1!RoIˤ}ak-.[Q3&R5E+K**5^߉: ,cQ6JKn9lޑ\<ȍdHȚ=G0Il24&7j< f@]we)X(sq=Êh.ڠ]{^k td!/BjxaBl"iP갉) &2D&Mt!.'FSuA7o=:zNՁ={r?^hF=~"q'7QD:k舏vY\ӈ,[B?+;/ qj}ikb3:ޱ#5kMŠ?ܻe ~O63ofHb2t)A=#! a&uu`2B ϡF! jkPcH,t$>12־K.#Il0 &TD!Q|S05B+88 Q4zknPTw L ui (wGQHMp|w?~ro/ܱnXPz:PfМPE(:)hPjjqU6wĝ4iZՏ5Eׯ|W2%*bК=7&x|7֣r?~JX&gX#YnjtWߗtPC)|ȣe=ԴPfyb9BgR7ZE iy |VJڌޒ+~+[Z]-.V*  raX UAy Q5L fU?P3 ? EV*ʯzk1, WS^gajSYA= uz|aw;Լd\}7F3Z%tĊ*,/{n)wE"܀6a:Nz-D @`QKSCSjim4* UXu 1 (O5:4+#/ZuxDo/!I]}ŽBZ~ϱڞoN5*1C8t@HI=yU}Lgs<[{=S/ `a U ~CQ{3هr0D҇95PPFZA L:æJvapǐ"b0Aw!{;4[D,WI:x LJwS]W(oTVݽvǯ곋ULK xPOPE ;B]׌r]Gߑ/hkowh"1:Cv)Sf"aJ#* @#4%^!UBL@ZP a Jd",Ew>b{G'D:K,͘0oPcӋP蹼2μ':bXPA {H {╊2Rְ΃?ˉ9O t3#_ n~TCi<3/phLta,dh :jxD"Cn4"O"͉<Y44(Rv`Hn F1`s103 m^m$ 5 Zӡ7@ߊ#5IV?`L+ڀsQy=4as#CN ?x_O[kmx{24^7T>stream xA0 ;r0gf ( Kx(c˒J@gP-ٟR: 8D_7]/1du8\wF*Ū0ųaO5`Le%XFü5i܍*owza *;>yiխ&ǎ@Ձ9IFA csyuJlFnM+:VY `:X]ؚW.ہu> b*iPtL%P\u>V u]m+(r|PFt4 V`8:;a 5r?`us^;v3UbFa \[/hϋ<=7[Fг es`:ʰ|||?3 yj?u$;g&?[;6} x[C…J %b?]/Filter/FlateDecode/Width 528/Height 327/BitsPerComponent 4/Length 3528 >>stream x훽$ ۹BGԋ r/&sd]j} 6Љ~#(DXUCnEQRWV .N D;/Qi祵7G!Ԯ(4qjWk[ vRN8O8Ü/t;d7qb'`CJ0{)?/x?KS3mC;/<r~ݾ 3ry) \ O8ÌSM*+d``Osƅhwڢ# i4 |JP qdqqH X>4~OKfZa^{?PңlPH8*Y 0hr\2rlqBs^yiJIDҳb&%QL,84#,,,R) ;,,R) ;,,R) ;,,R) ;,,R)P8r艝jEҳc1zM(TC %^ڏndSu-aHiIϑJsK6=CIAD{'Wr0T%C)Ī1('cCG,,,R) ;鍻KoJO8tX>4'翄Ђ,B>;BҼzJPK6URUA.Ġ$4gLK6P%X+ڻsHRB%RC:TSY~?9i.=z&=HXn컥RȒA^)58Dǒ3>:<㴡y|,\=zɦRJ٪1(ލLݱI=z&s*RC!Hδ0 v=;R_Hӡ$ HδzCUK^:B8x28{Awpi'0!3]b&%QH!ZyLgLK6PB 8x"8{#|fj4꿇b&%Q4%piܱI=z&s*R9c[}Tw#W%u9T}H%}wlyiOrQWj"I٥c1zM(TC{yE{W*C]rPR>٣ I! 9mYrճwb&%QH!TL䡤R}*GAB-0ēsH饔O/j@iIHz/ ճGA%شzұIZ}ֹVB٢i/5j 8qw ;׳R(X ^q8}8aN`F +LI ~{yr?Ǧ6 R/aI`"-t/>fJL vs6X/f*zrs|q B7"9XaU# h@S酖 D a;MaP$0F9(\bB .ZH3܇.\ӝbIqPCsr'PI4 Ut2F#`0[x*: _r~z ;`%bD? 0 Σb@Օ #D7qQ~/(FPF8V,\9!ba8,ZЅa|x㡈p8||H 8d2v¤;C-JaqS1 _C!ޱm8/ުMlTXȏLeH9Ӏ2pxFHCJòIGL܍14tF!E06&@p}<,X>;c{409'+?_$)U@>oc?򯁃8Ȫ;Ì-WkR6 ?xGQ‰?/PpaАEX[)\JusmonYwpF4X9.2rsx#|WF_*o|y" - ;bH8>sR=%]x1 '-RRWHEȇg+TxZY uj@VCC{ȇ4ruCr<;J2Žwa sX'y+!~Æ'pȁoݟCJ59 l>;<?߿A4k;_RgJMs@i>,]{qe‰ے.?F9!(R~_V-fcOC,GQ&|L=R%3;ѳn[0l  ZDh 5;Pk<HhAvb'&+%r`"(-ʒbJ=2cLiV{*fE:!endstream endobj 67 0 obj<]/Filter/FlateDecode/Width 633/Height 333/BitsPerComponent 2/Length 5914 >>stream xniO F9 x`ne.ɈL`WpAs6^E]ɢHy{dwf)S;zb!ϱlѪ o?vހyXR?iɝ3Ysֱ*3=!_S/!3veW[>s:0z^w5k%O^fmƓm` ͤm/ETxud2 Q˺7OEUQ(2I#ޖ4t_{xҏ36$m~o2Ѓh4"~Ժ8lj07p.9/T_oZS2/0>^x-CHtS6%oK.{m!d\g.lWN!>WxǸL<䀧TZfǮ.95Zn]-}W֕4?LᕉB8qr#Kfװ`R!=ܶi{tWb~hZYxE.^Zeչ: ?}o$jUKsnLm]CvV%=Yj^C|pfI h҅k_u+t]Gxe}clas@.1xK+ xj^{4;/kKe3A=Z*MoZO/fuE=w&.,fË mx.hY=1gsYO`Tٹaw Hr3IxYַb6Y3ùcqhǃ[-xJӵ89b/rpKk[^iwĜœ3bo&#Ux]C7N9ZO{W"k=n׵8Y鴴VֻCk9s7hy Z蛚+ڌBeqpqރԃ֌W3]SНpG|Tb<`b p&~r-7s}8/d|WBsi*{%93 :W/o?- ֚ O So#F*gxAs ջ\OWS& 1xҷ .-T\4mLzsҷ컆z5AaqijM5u}nh@ oN `q@<9F4IGAI<oI(6̕hdЉÓ{/ۓ/pY9o{z؉gҴhvkQ޺ ؉;X3 vbw5O. oWyx8t3)yx cM{ YQZj|w.seqxjq0x#9sMd2ɓ|"]鏃G[sy眧w; 3Mo c]VX<:<>|Ydj/[3zq0Qg{0q"$|@rGuoj}<ۚ9A\h|ϸ֭{w{șH?wO㹮ReX1EY7%nM=H򱻟sxwJBoΙ <:F` O`MYGQ÷05е̑_FϨ-b~ȘO&t\g0FœI<"EQg8oh#6<$QC{2 >Kl=w ^)<;@px'w6zfqI|oxO̓8h zryj~?׊}m3ʹ~:װh!W(,Aڌ n^ )<=5N&[0o:£y6l:3Ѩŝx|JxCAD ;w`<9n]B9U]q m#,í6E8w?25~g55xᆀ^/pn΄J57K7[V}/v'7h7 l^<}u.'t; B%ot[ovC:znϻ\aed]xr3 -gOm`ӦM tO᷊E$2L2sG^`j!߯N` "4zilӒ\(N^N4Fe{kv\kpivWP^} {A@.Rowm|pFNIh3$)+nI`xݽ-A7G%8uxFv&,} ^} ?̅ԹܩkxNF^,OOMDy7fVfx;I K~|钲86P|E#?D19'ޞqO짨G>j#A"^$tƹ[$X\BUaf#pל^ʌ:{8uAdX >m7r+ @LS/c쨁诚x[BD7VG_Z]֡ ߶Ƚk|5 bW(y:ҁ*Yx%H R `B\m BQu,B| 0N|6FOyzF d I^G~iBn݊gՄRu^ȁUh//sBhȇӶuj~A/z:*;DOEz$t)VzbOx2mY?Nv޾ςJM.m|5rc&б z-vaaY?p+㥐sؑ.E=>٭r9'8? ^J.$ ^ƹмDc.Ou\G>g559hTӱ >L A+P /vp}L 0592O䭦U8s/m?*t k9:pTscQț01 ^fk g[('O~R>Zv: F ,'@wݙ!έEGYv_կ/][$YoY"8? 2_%'J_E󦦈DXi1-/!NZYq)F-/_c7C{83kvH5s5ݗ:4-6 ɛDC&@"ӾMN0 ϛ37 ޝh2FЂ3*߿lJĻ5BQ"kJx8ҍj^nRC4JklxQYx 㹩a=/nժǿA*822V(GksQc<)eKy +d3d9}]F]w랮jJRxes}v#gûDѐ;fֽT6Z!d]!~M\RRZ VcA㽱dWf[*ou*uEj6ގeB7kr۹td][ݡ0$H-̎LT92qrjhqVw? [-^|֩4u^2{Tn\h! +g~xZŞH<0g=+k2Ne.3:B<\ӈ=icEᡲR x}viK!ćyw W52 e sH#8RbL.Swwiѵ KΨKu4hx&1ODt1z1;JeCg:uev,:sq6[^UǗZDX(::UXHoo_?.^?m:Nd=j~\BO5;u[Hۥ[nƹ> f¹Ų=~H`=(o@ u*%qyS}?$}S+"ŕ4 ^[Plo!ga:??ꫯ^^ibAEcJc r *M0LaS k^\P10zQ7A8u*{J97 >ȾIvI+c? QBqZϽ،ǘ멳[Ʋax{xaxrԁ,XSg^~b5#u69iՃйi(-S@vsas?|,PƎk9./,[O>b]/Filter/FlateDecode/Width 192/Height 194/BitsPerComponent 1/Length 890 >>stream x1O@2dAݍP['#:0v`Hi!K]БH V%ZFrTHxʪ>[%f@ R)ytz{9m@\̹bm21s2`[&I ?pw.П?qA|qE_q]4"7O8\CRۗ4vGZ(#.K*O1I-}7MkЖ.V=dZ;.S>kn@!c'ʏ:^`\P^NugיLr Ӌic9h_9wnM{{m(KBpmN(|x r;s̨>~}$ҿޏy e$ E߉Vݸ~]R YkYcB6y&x8u}~?0ỎUW5w W/~[xJzQ"$U9/$Wq^dgԉψ~˯Qp_8Uy?r:άsGwזO$'9o_~Lr| 9}-༤Dǿ8|2nÎZ5/&z-rCoBc~d\v~^gemNoWendstream endobj 69 0 obj<]/Filter/FlateDecode/Width 519/Height 226/BitsPerComponent 1/Length 2778 >>stream x1qTLm #\qiÅp po@ȫՉ.FRoHJEbD߼y3y#5+Yuk8^ٹn.p\bѤgpX`CPXo\K|ϑ›p?É4\b--w[_@n-ܢ 0kM.0vkG;D!\)R8]\z} }/~Kt&8Ì ۷kokxVkm/V!\gY/! dl?W,K'5WK;7riR|~jNm Ӛ W#w71`9 ;[4{/3\NUmWuX>[9wwq?c>b@Lua0$'#a@={xq-K}d u={xzD)辣3Yza@GzfWKF^ƂIz5 R-<Д;Yxn[mM7(sk;# 8ҺL*t rM4a+ 8s 4u)Jb<<7Jk,ӛ({j0>hX 0Xh @յ`5qP >@}.q^Āy?ӄy"[Y]pBAXt1`&*i vY_uΫ^XP>X?〖|M{4n=Jy@޺^Ɣ ̉c j)ΉkĵΐQuE?-`t5=t w"$X,@*ّFa93B i',țYV"Pu#LVX5IQH'3S504u5]`UWPgy$#@Zĵ\NO2@M[d!`3FtCn)nbN\&K@zYT|W74= xz~OOZZ FLʢGM 7/SU*.5 xz V @)Q?@l [9Q bR?r4&&ThZ[*Ǽ^Y]#^r+1>Y P3X kyr0gCW*Uz)&Go5 D\1[PW󁨳|[7a cJԙ3V;3D?N 9Nyߪ3D\qG2u7Ro!T'ъfuMiN~Hg:%rg>ж }s eڥtL973!wOyF\063v* ;с*m9/E9we$N?[q_Kŵ҄r]q-DŝY=+&:Ǐ TXu^|W q]ā M⹨sΉ3:y-U,@O`o8!Z4f `Ǽ&wfr 隩3|HykμJ+ÊquubQEXZHVXF:;rRE yJ1w"Qdu^sG' bL]c7Wtv 0t2͹&OAX@:c_yv' Itge )dez'B^ee#P||`c,K/l`3i738zAq(gmVgA@q maJ#uAMkA^W|BqJӗ o}5Ĝp4aWeH<&_⏲Q& >v)dL-UzLTw!Sb^p$()֞ш!mM&@zɝ[pVպQrgܭP.| {$˭gvżVvZZT=4[WN c(.f= - (sڔ7,&=ޔ=/9(s xnjU([Jֆ&d9+!7 bW+y#EuN(%޺wEX̝ECl%wz/ΰ?,.D`,rlT砇8pkp"@0.y+V&UF{ȝ`B$ĚO9KD7,t4&T 'Zt"P;?^ {~h~Tiddu-DO`M)y QgקsĂ'Μ;7 x߈Ï' ƪJ|&$%8A6wٱ0`"ڸ= q+ܵ0tv.XJoE:\܄a]@u:$smM\`sTE$(5Uv,qpk'r F`endstream endobj 70 0 obj<]/Filter/FlateDecode/Width 497/Height 226/BitsPerComponent 1/Length 1228 >>stream x홱n0SdG3t,P@! t@ AZ :ttPA <Ȇd^J#<E ϿHSD#>F @XDuBרg5M3{)j .s_)'ZWE]k@?5+E(:l? W@?w@w{B^랷<Yw=vNuj k y+k 5@G¥B5?ƓຜDH l6 ye JHiB0PiBiB(f(%5^55f. 5Mf.j|SkRmkjqj uW0"cƱR1;l|̰1W 0ǙNN HtUim/pAi)`a-p a|p a'?1i*\7G/u3OIM$n+.k}5p;يL[ڌ5ѻ]74,f7M`z[opWƫsB\GV:$cmOLy|uƌM4fX6lyfrĸh&ܮSB,qiX7!։VuZI20 OZ!aKf9Dflsx ["eHNeb8༆m 8g5lױQ8k<őedN끣k_wΏu =6nXKyG_"=v;*}YEν1}հܛF5iX7iX7NhѰg%}@ʹ,37զaEI8<1զaeIo' .3#ZmV.KzE)B낛_l^s̭a%u ^sh J|p{R>cnpġ5(Ϩ<.~vձһx¦z{ʰsXdX<"sXH@3f ayںװ&8\}x k{8a~52|:O}6$ ?FsXy4=T9ss:Vb. k#a7#a!W{5l6^sXa?7Fk̰&vo{2a~]gqJأgv_̺endstream endobj 71 0 obj<]/Filter/FlateDecode/Width 483/Height 196/BitsPerComponent 1/Length 1615 >>stream xoDۮD@B_,N=*u8J=Јh_P{ ME@(mȥ7MO,uNv:E'Ό3}ox~2.Q9\{su]||aL}w J9Da)p]ySP~6 >dN}bL1[4zGS 8@oJLIaK3keYl}YIyRXv ]n~g'^aD~:њ=|P=\=ܤna. oyQK' itbЌM9R^x$s;aXni`=|g7)ˡQAb$YM^+i0VmFimz! `jw!((^UOj"fzʥZsJΟV.cl_|:_9-.V9q#y]?7x[TAb~hDITtӘ0|Pq|Fl͉MOuk<~w)l21N ʬf_x>W>J@ZG{O vk'o\9x_=,mS4gb_x8nvwo}~}i_~jn;,LXaAz۝p~ۓ&Kd<)9\%J~;:=­fK S kxÍ+{$J]/Filter/FlateDecode/Width 187/Height 187/BitsPerComponent 2/Length 716 >>stream xXAn@ 7>= zg}p`WffErEJ[!n#Nj5&w З~ : ^BB254OFoqu8'r щGH'BӛHoHg T^s^3cP sԲBT$AH('ڱp,j\"CT2՞wݸg e}H5A3 =ObR{_{hԔٷ;OowGoEH_J-IA:y̦bVB_(SWp\ Joqp|u51hnb|RNNq2D#}Q5z\O'>tKE俧v?:N yePQ SHw$K=endstream endobj 73 0 obj<>endobj 74 0 obj<>endobj 75 0 obj<>endobj 76 0 obj<>endobj 77 0 obj<>endobj 78 0 obj<>endobj 79 0 obj<>endobj 80 0 obj<>endobj 81 0 obj<>endobj 82 0 obj<>endobj 83 0 obj<>endobj 84 0 obj<>endobj 85 0 obj<>endobj 86 0 obj<>endobj 87 0 obj<>endobj 88 0 obj<>endobj 89 0 obj<>endobj 90 0 obj<>endobj 91 0 obj<>endobj 92 0 obj<>endobj 93 0 obj<>endobj 94 0 obj<>endobj 95 0 obj<>endobj 96 0 obj<>endobj 97 0 obj<>endobj 98 0 obj<>endobj 99 0 obj<>endobj 100 0 obj<>endobj 101 0 obj<>endobj 102 0 obj[74 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R]endobj 103 0 obj<>endobj 104 0 obj<>endobj 105 0 obj<>endobj 106 0 obj<>endobj 107 0 obj<>endobj 108 0 obj<>endobj 109 0 obj<>endobj 110 0 obj<>endobj 111 0 obj<>endobj 112 0 obj<>endobj 113 0 obj<>endobj 114 0 obj<>endobj 115 0 obj<>endobj 116 0 obj<>endobj 117 0 obj<>endobj 118 0 obj<>endobj 119 0 obj<>endobj 120 0 obj<>endobj 121 0 obj<>endobj 122 0 obj<>endobj 123 0 obj<>endobj 124 0 obj<>endobj 125 0 obj<>endobj 126 0 obj<>endobj 127 0 obj<>endobj 128 0 obj<>endobj 129 0 obj[103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R]endobj 130 0 obj<>endobj 131 0 obj<>endobj 132 0 obj<>endobj 133 0 obj<>endobj 134 0 obj<>endobj 135 0 obj<>endobj 136 0 obj[130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R]endobj 137 0 obj<>endobj 138 0 obj<>endobj 139 0 obj<>endobj 140 0 obj<>endobj 141 0 obj[138 0 R 140 0 R]endobj 142 0 obj<>endobj 143 0 obj<>endobj 144 0 obj<>endobj 145 0 obj[143 0 R 144 0 R]endobj 146 0 obj<>endobj 147 0 obj<>endobj 148 0 obj<>endobj 149 0 obj<>endobj 150 0 obj[147 0 R 149 0 R]endobj 151 0 obj<>endobj 152 0 obj<>endobj 153 0 obj[152 0 R]endobj 154 0 obj<>endobj 155 0 obj[154 0 R]endobj 156 0 obj<>endobj 157 0 obj<>endobj 158 0 obj<>endobj 159 0 obj<>endobj 160 0 obj<>endobj 161 0 obj<>endobj 162 0 obj<>endobj 163 0 obj<>endobj 164 0 obj<>endobj 165 0 obj<>endobj 166 0 obj<>endobj 167 0 obj<>endobj 168 0 obj<>endobj 169 0 obj<>endobj 170 0 obj[157 0 R 159 0 R 161 0 R 163 0 R 165 0 R 167 0 R 169 0 R]endobj 171 0 obj<>endobj 172 0 obj<>endobj 173 0 obj<>endobj 174 0 obj<>endobj 175 0 obj<>endobj 176 0 obj<>endobj 177 0 obj<>endobj 178 0 obj<>endobj 179 0 obj<>endobj 180 0 obj<>endobj 181 0 obj<>endobj 182 0 obj<>endobj 183 0 obj[172 0 R 174 0 R 176 0 R 178 0 R 180 0 R 182 0 R]endobj 184 0 obj<>endobj 185 0 obj<>endobj 186 0 obj<>endobj 187 0 obj<>endobj 188 0 obj<>endobj 189 0 obj<>endobj 190 0 obj<>endobj 191 0 obj<>endobj 192 0 obj<>endobj 193 0 obj<>endobj 194 0 obj<>endobj 195 0 obj<>endobj 196 0 obj<>endobj 197 0 obj<>endobj 198 0 obj<>endobj 199 0 obj<>endobj 200 0 obj<>endobj 201 0 obj<>endobj 202 0 obj<>endobj 203 0 obj<>endobj 204 0 obj<>endobj 205 0 obj<>endobj 206 0 obj[185 0 R 187 0 R 189 0 R 191 0 R 193 0 R 195 0 R 197 0 R 199 0 R 201 0 R 203 0 R 205 0 R]endobj 207 0 obj<>endobj 208 0 obj<>endobj 209 0 obj<>endobj 210 0 obj<>endobj 211 0 obj<>endobj 212 0 obj<>endobj 213 0 obj<>endobj 214 0 obj<>endobj 215 0 obj[208 0 R 210 0 R 212 0 R 214 0 R]endobj 216 0 obj<>endobj 217 0 obj<>endobj 218 0 obj<>endobj 219 0 obj<>endobj 220 0 obj[217 0 R 219 0 R]endobj 221 0 obj<>endobj 222 0 obj<>endobj 223 0 obj<>endobj 224 0 obj<>endobj 225 0 obj<>endobj 226 0 obj<>endobj 227 0 obj<>endobj 228 0 obj<>endobj 229 0 obj[222 0 R 224 0 R 226 0 R 228 0 R]endobj 230 0 obj<>endobj 231 0 obj<>endobj 232 0 obj<>endobj 233 0 obj<>endobj 234 0 obj<>endobj 235 0 obj<>endobj 236 0 obj<>endobj 237 0 obj<>endobj 238 0 obj<>endobj 239 0 obj<>endobj 240 0 obj<>endobj 241 0 obj<>endobj 242 0 obj<>endobj 243 0 obj<>endobj 244 0 obj<>endobj 245 0 obj<>endobj 246 0 obj<>endobj 247 0 obj<>endobj 248 0 obj<>endobj 249 0 obj<>endobj 250 0 obj[231 0 R 233 0 R 235 0 R 237 0 R 239 0 R 241 0 R 243 0 R 245 0 R 247 0 R 249 0 R]endobj 251 0 obj<>endobj 252 0 obj<>endobj 253 0 obj<>endobj 254 0 obj<>endobj 255 0 obj<>endobj 256 0 obj<>endobj 257 0 obj<>endobj 258 0 obj<>endobj 259 0 obj<>endobj 260 0 obj<>endobj 261 0 obj<>endobj 262 0 obj<>endobj 263 0 obj[252 0 R 254 0 R 256 0 R 258 0 R 260 0 R 262 0 R]endobj 264 0 obj<>endobj 265 0 obj<>endobj 266 0 obj<>endobj 267 0 obj<>endobj 268 0 obj<>endobj 269 0 obj<>endobj 270 0 obj[265 0 R 267 0 R 269 0 R]endobj 271 0 obj<>endobj 272 0 obj<>endobj 273 0 obj<>endobj 274 0 obj<>endobj 275 0 obj<>endobj 276 0 obj<>endobj 277 0 obj<>endobj 278 0 obj<>endobj 279 0 obj[272 0 R 274 0 R 276 0 R 278 0 R]endobj 280 0 obj<>endobj 281 0 obj<>endobj 282 0 obj<>endobj 283 0 obj<>endobj 284 0 obj<>endobj 285 0 obj<>endobj 286 0 obj<>endobj 287 0 obj<>endobj 288 0 obj[281 0 R 283 0 R 285 0 R 287 0 R]endobj 289 0 obj<>endobj 290 0 obj<>endobj 291 0 obj<>endobj 292 0 obj<>endobj 293 0 obj<>endobj 294 0 obj<>endobj 295 0 obj<>endobj 296 0 obj<>endobj 297 0 obj<>endobj 298 0 obj<>endobj 299 0 obj<>endobj 300 0 obj<>endobj 301 0 obj<>endobj 302 0 obj<>endobj 303 0 obj<>endobj 304 0 obj<>endobj 305 0 obj[290 0 R 292 0 R 294 0 R 296 0 R 298 0 R 300 0 R 302 0 R 304 0 R]endobj 306 0 obj<>endobj 307 0 obj<>endobj 308 0 obj<>endobj 309 0 obj<>endobj 310 0 obj<>endobj 311 0 obj<>endobj 312 0 obj<>endobj 313 0 obj<>endobj 314 0 obj[307 0 R 309 0 R 311 0 R 313 0 R]endobj 315 0 obj<>endobj 316 0 obj<>endobj 317 0 obj<>endobj 318 0 obj<>endobj 319 0 obj<>endobj 320 0 obj<>endobj 321 0 obj<>endobj 322 0 obj<>endobj 323 0 obj[316 0 R 318 0 R 320 0 R 322 0 R]endobj 324 0 obj<>endobj 325 0 obj<>endobj 326 0 obj<>endobj 327 0 obj<>endobj 328 0 obj<>endobj 329 0 obj<>endobj 330 0 obj[325 0 R 327 0 R 329 0 R]endobj 331 0 obj<>endobj 332 0 obj<>endobj 333 0 obj<>endobj 334 0 obj<>endobj 335 0 obj<>endobj 336 0 obj<>endobj 337 0 obj[332 0 R 334 0 R 336 0 R]endobj 338 0 obj<>endobj 339 0 obj<>endobj 340 0 obj<>endobj 341 0 obj<>endobj 342 0 obj<>endobj 343 0 obj<>endobj 344 0 obj[339 0 R 341 0 R 343 0 R]endobj 345 0 obj<>endobj 346 0 obj<>endobj 347 0 obj<>endobj 348 0 obj<>endobj 349 0 obj<>endobj 350 0 obj<>endobj 351 0 obj<>endobj 352 0 obj<>endobj 353 0 obj<>endobj 354 0 obj<>endobj 355 0 obj<>endobj 356 0 obj<>endobj 357 0 obj<>endobj 358 0 obj<>endobj 359 0 obj<>endobj 360 0 obj<>endobj 361 0 obj<>endobj 362 0 obj<>endobj 363 0 obj[346 0 R 348 0 R 350 0 R 352 0 R 354 0 R 356 0 R 358 0 R 360 0 R 362 0 R]endobj 364 0 obj<>endobj 365 0 obj<>endobj 366 0 obj<>endobj 367 0 obj<>endobj 368 0 obj<>endobj 369 0 obj<>endobj 370 0 obj<>endobj 371 0 obj<>endobj 372 0 obj<>endobj 373 0 obj<>endobj 374 0 obj<>endobj 375 0 obj<>endobj 376 0 obj<>endobj 377 0 obj<>endobj 378 0 obj[365 0 R 367 0 R 369 0 R 371 0 R 373 0 R 375 0 R 377 0 R]endobj 379 0 obj<>endobj 380 0 obj<>endobj 381 0 obj<>endobj 382 0 obj<>endobj 383 0 obj<>endobj 384 0 obj<>endobj 385 0 obj[380 0 R 382 0 R 384 0 R]endobj 386 0 obj<>endobj 387 0 obj<>endobj 388 0 obj<>endobj 389 0 obj<>endobj 390 0 obj<>endobj 391 0 obj<>endobj 392 0 obj<>endobj 393 0 obj<>endobj 394 0 obj<>endobj 395 0 obj<>endobj 396 0 obj<>endobj 397 0 obj<>endobj 398 0 obj<>endobj 399 0 obj<>endobj 400 0 obj<>endobj 401 0 obj<>endobj 402 0 obj<>endobj 403 0 obj<>endobj 404 0 obj[387 0 R 389 0 R 391 0 R 393 0 R 395 0 R 397 0 R 399 0 R 401 0 R 403 0 R]endobj 405 0 obj<>endobj 406 0 obj<>endobj 407 0 obj<>endobj 408 0 obj<>endobj 409 0 obj<>endobj 410 0 obj<>endobj 411 0 obj<>endobj 412 0 obj<>endobj 413 0 obj<>endobj 414 0 obj<>endobj 415 0 obj<>endobj 416 0 obj<>endobj 417 0 obj[406 0 R 408 0 R 410 0 R 412 0 R 414 0 R 416 0 R]endobj 418 0 obj<>endobj 419 0 obj<>endobj 420 0 obj[419 0 R]endobj 421 0 obj<>endobj 422 0 obj<>endobj 423 0 obj<>endobj 424 0 obj<>endobj 425 0 obj[422 0 R 424 0 R]endobj 426 0 obj<>endobj 427 0 obj<>endobj 428 0 obj<>endobj 429 0 obj<>endobj 430 0 obj<>endobj 431 0 obj<>endobj 432 0 obj<>endobj 433 0 obj<>endobj 434 0 obj<>endobj 435 0 obj<>endobj 436 0 obj[427 0 R 429 0 R 431 0 R 433 0 R 435 0 R]endobj 437 0 obj<>endobj 438 0 obj<>endobj 439 0 obj<>endobj 440 0 obj<>endobj 441 0 obj<>endobj 442 0 obj<>endobj 443 0 obj<>endobj 444 0 obj<>endobj 445 0 obj<>endobj 446 0 obj<>endobj 447 0 obj<>endobj 448 0 obj<>endobj 449 0 obj<>endobj 450 0 obj<>endobj 451 0 obj<>endobj 452 0 obj<>endobj 453 0 obj<>endobj 454 0 obj<>endobj 455 0 obj<>endobj 456 0 obj<>endobj 457 0 obj<>endobj 458 0 obj<>endobj 459 0 obj<>endobj 460 0 obj<>endobj 461 0 obj[438 0 R 440 0 R 442 0 R 444 0 R 446 0 R 448 0 R 450 0 R 452 0 R 454 0 R 456 0 R 458 0 R 460 0 R]endobj 462 0 obj<>endobj 463 0 obj<>endobj 464 0 obj<>endobj 465 0 obj<>endobj 466 0 obj<>endobj 467 0 obj<>endobj 468 0 obj<>endobj 469 0 obj<>endobj 470 0 obj[463 0 R 465 0 R 467 0 R 469 0 R]endobj 471 0 obj<>endobj 472 0 obj<>endobj 473 0 obj<>endobj 474 0 obj<>endobj 475 0 obj<>endobj 476 0 obj<>endobj 477 0 obj[472 0 R 474 0 R 476 0 R]endobj 478 0 obj<>endobj 479 0 obj<>endobj 480 0 obj<>endobj 481 0 obj<>endobj 482 0 obj<>endobj 483 0 obj<>endobj 484 0 obj<>endobj 485 0 obj<>endobj 486 0 obj<>endobj 487 0 obj<>endobj 488 0 obj<>endobj 489 0 obj<>endobj 490 0 obj<>endobj 491 0 obj<>endobj 492 0 obj<>endobj 493 0 obj<>endobj 494 0 obj<>endobj 495 0 obj<>endobj 496 0 obj<>endobj 497 0 obj<>endobj 498 0 obj<>endobj 499 0 obj<>endobj 500 0 obj<>endobj 501 0 obj<>endobj 502 0 obj[479 0 R 481 0 R 483 0 R 485 0 R 487 0 R 489 0 R 491 0 R 493 0 R 495 0 R 497 0 R 499 0 R 501 0 R]endobj 503 0 obj<>endobj 504 0 obj<>endobj 505 0 obj<>endobj 506 0 obj<>endobj 507 0 obj<>endobj 508 0 obj<>endobj 509 0 obj[504 0 R 506 0 R 508 0 R]endobj 510 0 obj<>endobj 511 0 obj<>endobj 512 0 obj<>endobj 513 0 obj<>endobj 514 0 obj<>endobj 515 0 obj<>endobj 516 0 obj[511 0 R 513 0 R 515 0 R]endobj 517 0 obj<>endobj 518 0 obj<>endobj 519 0 obj<>endobj 520 0 obj<>endobj 521 0 obj<>endobj 522 0 obj<>endobj 523 0 obj<>endobj 524 0 obj<>endobj 525 0 obj<>endobj 526 0 obj<>endobj 527 0 obj<>endobj 528 0 obj<>endobj 529 0 obj<>endobj 530 0 obj<>endobj 531 0 obj<>endobj 532 0 obj<>endobj 533 0 obj<>endobj 534 0 obj<>endobj 535 0 obj<>endobj 536 0 obj<>endobj 537 0 obj<>endobj 538 0 obj<>endobj 539 0 obj<>endobj 540 0 obj<>endobj 541 0 obj<>endobj 542 0 obj<>endobj 543 0 obj<>endobj 544 0 obj<>endobj 545 0 obj[518 0 R 520 0 R 522 0 R 524 0 R 526 0 R 528 0 R 530 0 R 532 0 R 534 0 R 536 0 R 538 0 R 540 0 R 542 0 R 544 0 R]endobj 546 0 obj<>endobj 547 0 obj<>endobj 548 0 obj<>endobj 549 0 obj<>endobj 550 0 obj<>endobj 551 0 obj<>endobj 552 0 obj<>endobj 553 0 obj<>endobj 554 0 obj[547 0 R 549 0 R 551 0 R 553 0 R]endobj 555 0 obj<>endobj 556 0 obj<>endobj 557 0 obj<>endobj 558 0 obj<>endobj 559 0 obj<>endobj 560 0 obj<>endobj 561 0 obj[556 0 R 558 0 R 560 0 R]endobj 562 0 obj<>endobj 563 0 obj<>endobj 564 0 obj<>endobj 565 0 obj<>endobj 566 0 obj<>endobj 567 0 obj<>endobj 568 0 obj<>endobj 569 0 obj<>endobj 570 0 obj<>endobj 571 0 obj<>endobj 572 0 obj<>endobj 573 0 obj<>endobj 574 0 obj<>endobj 575 0 obj<>endobj 576 0 obj<>endobj 577 0 obj<>endobj 578 0 obj<>endobj 579 0 obj<>endobj 580 0 obj<>endobj 581 0 obj<>endobj 582 0 obj[563 0 R 565 0 R 567 0 R 569 0 R 571 0 R 573 0 R 575 0 R 577 0 R 579 0 R 581 0 R]endobj 583 0 obj<>endobj 584 0 obj<>endobj 585 0 obj<>endobj 586 0 obj<>endobj 587 0 obj<>endobj 588 0 obj<>endobj 589 0 obj<>endobj 590 0 obj<>endobj 591 0 obj<>endobj 592 0 obj<>endobj 593 0 obj<>endobj 594 0 obj<>endobj 595 0 obj<>endobj 596 0 obj<>endobj 597 0 obj<>endobj 598 0 obj<>endobj 599 0 obj<>endobj 600 0 obj<>endobj 601 0 obj<>endobj 602 0 obj<>endobj 603 0 obj<>endobj 604 0 obj<>endobj 605 0 obj[584 0 R 586 0 R 588 0 R 590 0 R 592 0 R 594 0 R 596 0 R 598 0 R 600 0 R 602 0 R 604 0 R]endobj 606 0 obj<>endobj 607 0 obj<>endobj 608 0 obj<>endobj 609 0 obj<>endobj 610 0 obj<>endobj 611 0 obj<>endobj 612 0 obj<>endobj 613 0 obj<>endobj 614 0 obj<>endobj 615 0 obj<>endobj 616 0 obj<>endobj 617 0 obj<>endobj 618 0 obj<>endobj 619 0 obj<>endobj 620 0 obj<>endobj 621 0 obj<>endobj 622 0 obj<>endobj 623 0 obj<>endobj 624 0 obj<>endobj 625 0 obj<>endobj 626 0 obj<>endobj 627 0 obj<>endobj 628 0 obj<>endobj 629 0 obj<>endobj 630 0 obj<>endobj 631 0 obj<>endobj 632 0 obj[607 0 R 609 0 R 611 0 R 613 0 R 615 0 R 617 0 R 619 0 R 621 0 R 623 0 R 625 0 R 627 0 R 629 0 R 631 0 R]endobj 633 0 obj<>endobj 634 0 obj<>endobj 635 0 obj<>endobj 636 0 obj<>endobj 637 0 obj<>endobj 638 0 obj<>endobj 639 0 obj<>endobj 640 0 obj<>endobj 641 0 obj<>endobj 642 0 obj<>endobj 643 0 obj<>endobj 644 0 obj<>endobj 645 0 obj[634 0 R 636 0 R 638 0 R 640 0 R 642 0 R 644 0 R]endobj 646 0 obj<>endobj 647 0 obj<>endobj 648 0 obj<>endobj 649 0 obj<>endobj 650 0 obj<>endobj 651 0 obj<>endobj 652 0 obj<>endobj 653 0 obj<>endobj 654 0 obj<>endobj 655 0 obj<>endobj 656 0 obj<>endobj 657 0 obj<>endobj 658 0 obj[647 0 R 649 0 R 651 0 R 653 0 R 655 0 R 657 0 R]endobj 659 0 obj<>endobj 660 0 obj<>endobj 661 0 obj<>endobj 662 0 obj<>endobj 663 0 obj<>endobj 664 0 obj<>endobj 665 0 obj<>endobj 666 0 obj<>endobj 667 0 obj<>endobj 668 0 obj<>endobj 669 0 obj<>endobj 670 0 obj<>endobj 671 0 obj[660 0 R 662 0 R 664 0 R 666 0 R 668 0 R 670 0 R]endobj 672 0 obj<>endobj 673 0 obj<>endobj 674 0 obj<>endobj 675 0 obj<>endobj 676 0 obj<>endobj 677 0 obj<>endobj 678 0 obj<>endobj 679 0 obj<>endobj 680 0 obj<>endobj 681 0 obj<>endobj 682 0 obj<>endobj 683 0 obj<>endobj 684 0 obj<>endobj 685 0 obj<>endobj 686 0 obj<>endobj 687 0 obj<>endobj 688 0 obj<>endobj 689 0 obj<>endobj 690 0 obj<>endobj 691 0 obj<>endobj 692 0 obj<>endobj 693 0 obj<>endobj 694 0 obj<>endobj 695 0 obj<>endobj 696 0 obj<>endobj 697 0 obj<>endobj 698 0 obj<>endobj 699 0 obj<>endobj 700 0 obj<>endobj 701 0 obj<>endobj 702 0 obj[673 0 R 675 0 R 677 0 R 679 0 R 681 0 R 683 0 R 685 0 R 687 0 R 689 0 R 691 0 R 693 0 R 695 0 R 697 0 R 699 0 R 701 0 R]endobj 703 0 obj<>endobj 704 0 obj<>endobj 705 0 obj<>endobj 706 0 obj<>endobj 707 0 obj<>endobj 708 0 obj<>endobj 709 0 obj<>endobj 710 0 obj<>endobj 711 0 obj<>endobj 712 0 obj<>endobj 713 0 obj<>endobj 714 0 obj<>endobj 715 0 obj<>endobj 716 0 obj<>endobj 717 0 obj<>endobj 718 0 obj<>endobj 719 0 obj<>endobj 720 0 obj<>endobj 721 0 obj<>endobj 722 0 obj<>endobj 723 0 obj<>endobj 724 0 obj<>endobj 725 0 obj<>endobj 726 0 obj<>endobj 727 0 obj<>endobj 728 0 obj<>endobj 729 0 obj<>endobj 730 0 obj<>endobj 731 0 obj<>endobj 732 0 obj<>endobj 733 0 obj[704 0 R 706 0 R 708 0 R 710 0 R 712 0 R 714 0 R 716 0 R 718 0 R 720 0 R 722 0 R 724 0 R 726 0 R 728 0 R 730 0 R 732 0 R]endobj 734 0 obj<>endobj 735 0 obj<>endobj 736 0 obj<>endobj 737 0 obj<>endobj 738 0 obj<>endobj 739 0 obj<>endobj 740 0 obj<>endobj 741 0 obj<>endobj 742 0 obj<>endobj 743 0 obj<>endobj 744 0 obj<>endobj 745 0 obj<>endobj 746 0 obj<>endobj 747 0 obj<>endobj 748 0 obj<>endobj 749 0 obj<>endobj 750 0 obj<>endobj 751 0 obj<>endobj 752 0 obj<>endobj 753 0 obj<>endobj 754 0 obj<>endobj 755 0 obj<>endobj 756 0 obj<>endobj 757 0 obj<>endobj 758 0 obj[735 0 R 737 0 R 739 0 R 741 0 R 743 0 R 745 0 R 747 0 R 749 0 R 751 0 R 753 0 R 755 0 R 757 0 R]endobj 759 0 obj<>endobj 760 0 obj<>endobj 761 0 obj<>endobj 762 0 obj<>endobj 763 0 obj<>endobj 764 0 obj<>endobj 765 0 obj<>endobj 766 0 obj<>endobj 767 0 obj<>endobj 768 0 obj<>endobj 769 0 obj[760 0 R 762 0 R 764 0 R 766 0 R 768 0 R]endobj 770 0 obj<>endobj 771 0 obj<>endobj 772 0 obj<>endobj 773 0 obj<>endobj 774 0 obj<>endobj 775 0 obj<>endobj 776 0 obj<>endobj 777 0 obj<>endobj 778 0 obj<>endobj 779 0 obj<>endobj 780 0 obj<>endobj 781 0 obj<>endobj 782 0 obj<>endobj 783 0 obj<>endobj 784 0 obj<>endobj 785 0 obj<>endobj 786 0 obj<>endobj 787 0 obj<>endobj 788 0 obj<>endobj 789 0 obj<>endobj 790 0 obj<>endobj 791 0 obj<>endobj 792 0 obj<>endobj 793 0 obj<>endobj 794 0 obj[771 0 R 773 0 R 775 0 R 777 0 R 779 0 R 781 0 R 783 0 R 785 0 R 787 0 R 789 0 R 791 0 R 793 0 R]endobj 795 0 obj<>endobj 796 0 obj<>endobj 797 0 obj<>endobj 798 0 obj<>endobj 799 0 obj<>endobj 800 0 obj<>endobj 801 0 obj<>endobj 802 0 obj<>endobj 803 0 obj<>endobj 804 0 obj<>endobj 805 0 obj<>endobj 806 0 obj<>endobj 807 0 obj<>endobj 808 0 obj<>endobj 809 0 obj[796 0 R 798 0 R 800 0 R 802 0 R 804 0 R 806 0 R 808 0 R]endobj 810 0 obj<>endobj 811 0 obj<>endobj 812 0 obj<>endobj 813 0 obj<>endobj 814 0 obj<>endobj 815 0 obj<>endobj 816 0 obj<>endobj 817 0 obj<>endobj 818 0 obj<>endobj 819 0 obj<>endobj 820 0 obj<>endobj 821 0 obj<>endobj 822 0 obj<>endobj 823 0 obj<>endobj 824 0 obj<>endobj 825 0 obj<>endobj 826 0 obj<>endobj 827 0 obj<>endobj 828 0 obj<>endobj 829 0 obj<>endobj 830 0 obj<>endobj 831 0 obj<>endobj 832 0 obj[811 0 R 813 0 R 815 0 R 817 0 R 819 0 R 821 0 R 823 0 R 825 0 R 827 0 R 829 0 R 831 0 R]endobj 833 0 obj<>endobj 834 0 obj<>endobj 835 0 obj<>endobj 836 0 obj<>endobj 837 0 obj<>endobj 838 0 obj<>endobj 839 0 obj[834 0 R 836 0 R 838 0 R]endobj 840 0 obj<>endobj 841 0 obj<>endobj 842 0 obj<>endobj 843 0 obj<>endobj 844 0 obj<>endobj 845 0 obj<>endobj 846 0 obj<>endobj 847 0 obj<>endobj 848 0 obj<>endobj 849 0 obj<>endobj 850 0 obj<>endobj 851 0 obj<>endobj 852 0 obj<>endobj 853 0 obj<>endobj 854 0 obj<>endobj 855 0 obj<>endobj 856 0 obj[841 0 R 843 0 R 845 0 R 847 0 R 849 0 R 851 0 R 853 0 R 855 0 R]endobj 857 0 obj<>endobj 858 0 obj<>endobj 859 0 obj<>endobj 860 0 obj<>endobj 861 0 obj<>endobj 862 0 obj<>endobj 863 0 obj<>endobj 864 0 obj<>endobj 865 0 obj<>endobj 866 0 obj<>endobj 867 0 obj<>endobj 868 0 obj<>endobj 869 0 obj<>endobj 870 0 obj<>endobj 871 0 obj<>endobj 872 0 obj<>endobj 873 0 obj<>endobj 874 0 obj<>endobj 875 0 obj<>endobj 876 0 obj<>endobj 877 0 obj<>endobj 878 0 obj<>endobj 879 0 obj<>endobj 880 0 obj<>endobj 881 0 obj[858 0 R 860 0 R 862 0 R 864 0 R 866 0 R 868 0 R 870 0 R 872 0 R 874 0 R 876 0 R 878 0 R 880 0 R]endobj 882 0 obj<>endobj 883 0 obj<>endobj 884 0 obj<>endobj 885 0 obj<>endobj 886 0 obj<>endobj 887 0 obj<>endobj 888 0 obj<>endobj 889 0 obj<>endobj 890 0 obj<>endobj 891 0 obj<>endobj 892 0 obj<>endobj 893 0 obj<>endobj 894 0 obj<>endobj 895 0 obj<>endobj 896 0 obj<>endobj 897 0 obj<>endobj 898 0 obj<>endobj 899 0 obj<>endobj 900 0 obj<>endobj 901 0 obj<>endobj 902 0 obj[883 0 R 885 0 R 887 0 R 889 0 R 891 0 R 893 0 R 895 0 R 897 0 R 899 0 R 901 0 R]endobj 903 0 obj<>endobj 904 0 obj<>endobj 905 0 obj<>endobj 906 0 obj<>endobj 907 0 obj<>endobj 908 0 obj<>endobj 909 0 obj<>endobj 910 0 obj<>endobj 911 0 obj<>endobj 912 0 obj<>endobj 913 0 obj<>endobj 914 0 obj<>endobj 915 0 obj<>endobj 916 0 obj<>endobj 917 0 obj<>endobj 918 0 obj<>endobj 919 0 obj<>endobj 920 0 obj<>endobj 921 0 obj[904 0 R 906 0 R 908 0 R 910 0 R 912 0 R 914 0 R 916 0 R 918 0 R 920 0 R]endobj 922 0 obj<>endobj 923 0 obj<>endobj 924 0 obj<>endobj 925 0 obj<>endobj 926 0 obj<>endobj 927 0 obj<>endobj 928 0 obj<>endobj 929 0 obj<>endobj 930 0 obj<>endobj 931 0 obj<>endobj 932 0 obj<>endobj 933 0 obj<>endobj 934 0 obj[923 0 R 925 0 R 927 0 R 929 0 R 931 0 R 933 0 R]endobj 935 0 obj<>endobj 936 0 obj<>endobj 937 0 obj<>endobj 938 0 obj<>endobj 939 0 obj<>endobj 940 0 obj<>endobj 941 0 obj<>endobj 942 0 obj<>endobj 943 0 obj<>endobj 944 0 obj<>endobj 945 0 obj<>endobj 946 0 obj<>endobj 947 0 obj[936 0 R 938 0 R 940 0 R 942 0 R 944 0 R 946 0 R]endobj 948 0 obj<>endobj 949 0 obj<>endobj 950 0 obj<>endobj 951 0 obj<>endobj 952 0 obj<>endobj 953 0 obj<>endobj 954 0 obj<>endobj 955 0 obj<>endobj 956 0 obj[949 0 R 951 0 R 953 0 R 955 0 R]endobj 957 0 obj<>endobj 958 0 obj<>endobj 959 0 obj<>endobj 960 0 obj<>endobj 961 0 obj<>endobj 962 0 obj<>endobj 963 0 obj<>endobj 964 0 obj<>endobj 965 0 obj<>endobj 966 0 obj<>endobj 967 0 obj<>endobj 968 0 obj<>endobj 969 0 obj<>endobj 970 0 obj<>endobj 971 0 obj<>endobj 972 0 obj<>endobj 973 0 obj<>endobj 974 0 obj<>endobj 975 0 obj<>endobj 976 0 obj<>endobj 977 0 obj[958 0 R 960 0 R 962 0 R 964 0 R 966 0 R 968 0 R 970 0 R 972 0 R 974 0 R 976 0 R]endobj 978 0 obj<>endobj 979 0 obj<>endobj 980 0 obj<>endobj 981 0 obj<>endobj 982 0 obj<>endobj 983 0 obj<>endobj 984 0 obj<>endobj 985 0 obj<>endobj 986 0 obj<>endobj 987 0 obj<>endobj 988 0 obj<>endobj 989 0 obj<>endobj 990 0 obj<>endobj 991 0 obj<>endobj 992 0 obj<>endobj 993 0 obj<>endobj 994 0 obj<>endobj 995 0 obj<>endobj 996 0 obj[979 0 R 981 0 R 983 0 R 985 0 R 987 0 R 989 0 R 991 0 R 993 0 R 995 0 R]endobj 997 0 obj<>endobj 998 0 obj<>endobj 999 0 obj<>endobj 1000 0 obj<>endobj 1001 0 obj<>endobj 1002 0 obj<>endobj 1003 0 obj<>endobj 1004 0 obj<>endobj 1005 0 obj<>endobj 1006 0 obj<>endobj 1007 0 obj<>endobj 1008 0 obj<>endobj 1009 0 obj<>endobj 1010 0 obj<>endobj 1011 0 obj<>endobj 1012 0 obj<>endobj 1013 0 obj<>endobj 1014 0 obj<>endobj 1015 0 obj<>endobj 1016 0 obj<>endobj 1017 0 obj[998 0 R 1000 0 R 1002 0 R 1004 0 R 1006 0 R 1008 0 R 1010 0 R 1012 0 R 1014 0 R 1016 0 R]endobj 1018 0 obj<>endobj 1019 0 obj<>endobj 1020 0 obj<>endobj 1021 0 obj<>endobj 1022 0 obj<>endobj 1023 0 obj<>endobj 1024 0 obj<>endobj 1025 0 obj<>endobj 1026 0 obj<>endobj 1027 0 obj<>endobj 1028 0 obj<>endobj 1029 0 obj<>endobj 1030 0 obj<>endobj 1031 0 obj<>endobj 1032 0 obj<>endobj 1033 0 obj<>endobj 1034 0 obj<>endobj 1035 0 obj<>endobj 1036 0 obj[1019 0 R 1021 0 R 1023 0 R 1025 0 R 1027 0 R 1029 0 R 1031 0 R 1033 0 R 1035 0 R]endobj 1037 0 obj<>endobj 1038 0 obj<>endobj 1039 0 obj<>endobj 1040 0 obj<>endobj 1041 0 obj<>endobj 1042 0 obj<>endobj 1043 0 obj<>endobj 1044 0 obj<>endobj 1045 0 obj<>endobj 1046 0 obj<>endobj 1047 0 obj<>endobj 1048 0 obj<>endobj 1049 0 obj[1038 0 R 1040 0 R 1042 0 R 1044 0 R 1046 0 R 1048 0 R]endobj 1050 0 obj<>endobj 1051 0 obj<>endobj 1052 0 obj[1051 0 R]endobj 1053 0 obj<>endobj 1054 0 obj<>endobj 1055 0 obj<>endobj 1056 0 obj<>endobj 1057 0 obj<>endobj 1058 0 obj<>endobj 1059 0 obj<>endobj 1060 0 obj<>endobj 1061 0 obj[1054 0 R 1056 0 R 1058 0 R 1060 0 R]endobj 1062 0 obj<>endobj 1063 0 obj<>endobj 1064 0 obj<>endobj 1065 0 obj<>endobj 1066 0 obj<>endobj 1067 0 obj<>endobj 1068 0 obj<>endobj 1069 0 obj<>endobj 1070 0 obj<>endobj 1071 0 obj<>endobj 1072 0 obj<>endobj 1073 0 obj<>endobj 1074 0 obj<>endobj 1075 0 obj<>endobj 1076 0 obj<>endobj 1077 0 obj<>endobj 1078 0 obj[1063 0 R 1065 0 R 1067 0 R 1069 0 R 1071 0 R 1073 0 R 1075 0 R 1077 0 R]endobj 1079 0 obj<>endobj 1080 0 obj<>endobj 1081 0 obj<>endobj 1082 0 obj<>endobj 1083 0 obj<>endobj 1084 0 obj<>endobj 1085 0 obj<>endobj 1086 0 obj<>endobj 1087 0 obj<>endobj 1088 0 obj<>endobj 1089 0 obj<>endobj 1090 0 obj<>endobj 1091 0 obj[1080 0 R 1082 0 R 1084 0 R 1086 0 R 1088 0 R 1090 0 R]endobj 1092 0 obj<>endobj 1093 0 obj<>endobj 1094 0 obj<>endobj 1095 0 obj<>endobj 1096 0 obj<>endobj 1097 0 obj<>endobj 1098 0 obj<>endobj 1099 0 obj<>endobj 1100 0 obj<>endobj 1101 0 obj<>endobj 1102 0 obj<>endobj 1103 0 obj<>endobj 1104 0 obj<>endobj 1105 0 obj<>endobj 1106 0 obj<>endobj 1107 0 obj<>endobj 1108 0 obj<>endobj 1109 0 obj<>endobj 1110 0 obj<>endobj 1111 0 obj<>endobj 1112 0 obj[1093 0 R 1095 0 R 1097 0 R 1099 0 R 1101 0 R 1103 0 R 1105 0 R 1107 0 R 1109 0 R 1111 0 R]endobj 1113 0 obj<>endobj 1114 0 obj<>endobj 1115 0 obj<>endobj 1116 0 obj<>endobj 1117 0 obj<>endobj 1118 0 obj<>endobj 1119 0 obj<>endobj 1120 0 obj<>endobj 1121 0 obj<>endobj 1122 0 obj<>endobj 1123 0 obj<>endobj 1124 0 obj<>endobj 1125 0 obj<>endobj 1126 0 obj<>endobj 1127 0 obj<>endobj 1128 0 obj<>endobj 1129 0 obj<>endobj 1130 0 obj<>endobj 1131 0 obj[1114 0 R 1116 0 R 1118 0 R 1120 0 R 1122 0 R 1124 0 R 1126 0 R 1128 0 R 1130 0 R]endobj 1132 0 obj<>endobj 1133 0 obj<>endobj 1134 0 obj<>endobj 1135 0 obj<>endobj 1136 0 obj<>endobj 1137 0 obj<>endobj 1138 0 obj<>endobj 1139 0 obj<>endobj 1140 0 obj<>endobj 1141 0 obj<>endobj 1142 0 obj<>endobj 1143 0 obj<>endobj 1144 0 obj<>endobj 1145 0 obj<>endobj 1146 0 obj<>endobj 1147 0 obj<>endobj 1148 0 obj<>endobj 1149 0 obj<>endobj 1150 0 obj<>endobj 1151 0 obj<>endobj 1152 0 obj<>endobj 1153 0 obj<>endobj 1154 0 obj<>endobj 1155 0 obj<>endobj 1156 0 obj<>endobj 1157 0 obj<>endobj 1158 0 obj<>endobj 1159 0 obj<>endobj 1160 0 obj<>endobj 1161 0 obj<>endobj 1162 0 obj<>endobj 1163 0 obj<>endobj 1164 0 obj<>endobj 1165 0 obj<>endobj 1166 0 obj<>endobj 1167 0 obj<>endobj 1168 0 obj<>endobj 1169 0 obj<>endobj 1170 0 obj<>endobj 1171 0 obj<>endobj 1172 0 obj<>endobj 1173 0 obj<>endobj 1174 0 obj<>endobj 1175 0 obj<>endobj 1176 0 obj<>endobj 1177 0 obj<>endobj 1178 0 obj<>endobj 1179 0 obj<>endobj 1180 0 obj<>endobj 1181 0 obj<>endobj 1182 0 obj<>endobj 1183 0 obj<>endobj 1184 0 obj<>endobj 1185 0 obj<>endobj 1186 0 obj<>endobj 1187 0 obj<>endobj 1188 0 obj<>endobj 1189 0 obj<>endobj 1190 0 obj<>endobj 1191 0 obj<>endobj 1192 0 obj<>endobj 1193 0 obj<>endobj 1194 0 obj<>endobj 1195 0 obj<>endobj 1196 0 obj<>endobj 1197 0 obj<>endobj 1198 0 obj<>endobj 1199 0 obj<>endobj 1200 0 obj<>endobj 1201 0 obj<>endobj 1202 0 obj<>endobj 1203 0 obj<>endobj 1204 0 obj<>endobj 1205 0 obj<>endobj 1206 0 obj<>endobj 1207 0 obj<>endobj 1208 0 obj<>endobj 1209 0 obj<>endobj 1210 0 obj<>endobj 1211 0 obj<>endobj 1212 0 obj<>endobj 1213 0 obj<>endobj 1214 0 obj<>endobj 1215 0 obj<>endobj 1216 0 obj<>endobj 1217 0 obj<>endobj 1218 0 obj<>endobj 1219 0 obj<>endobj 1220 0 obj<>endobj 1221 0 obj<>endobj 1222 0 obj<>endobj 1223 0 obj<>endobj 1224 0 obj<>endobj 1225 0 obj<>endobj 1226 0 obj<>endobj 1227 0 obj<>endobj 1228 0 obj<>endobj 1229 0 obj<>endobj 1230 0 obj<>endobj 1231 0 obj<>endobj 1232 0 obj<>endobj 1233 0 obj<>endobj 1234 0 obj<>endobj 1235 0 obj<>endobj 1236 0 obj<>endobj 1237 0 obj<>endobj 1238 0 obj<>endobj 1239 0 obj<>endobj 1240 0 obj<>endobj 1241 0 obj<>endobj 1242 0 obj<>endobj 1243 0 obj<>/XObject<>>>>>endobj 1244 0 obj<>stream x=N0~9R؎c+($&u~Q=Nh97Wh -N\a.0FiY.vd 8JD ?:h 8BM)׷C_E{f1+3ŵoE~zIwҩMozL.xkLB etC ߌ#1sU;.I@Aendstream endobj 1245 0 obj<>/XObject<<>>>>/Annots 102 0 R>>endobj 1246 0 obj<>stream xZےE }߯7 N_ VYS<;$BznP<%sܠymKBho-Q- E3]fLF>bCL|3M,>c뮟R _.Cd Ǟmr_p..ar.k/]v$.뵭0Kk%i6Y^Os>>^`%f/M{#wb^XBNad-6bqeV:Gu1GҠi~Z z|OS(/r96m\qDLN|&JSn6"dk{NrDakDNШs1+N ~{8{g֛UpÓMŸ,\8汍'PPLiqt]?z=7 i8U:w۱/o.ۋ'׆tjWgGŋS$˛ֶWc?=#v0FqE¯n7W[JtMwf9ȂVҝߓWl}y[·3x\4\ؕ jbS?&뎴Ig j゚ +"؀uO?]HtN@ĝλj!g8{ϐ[{i[r}_JBV!զ_#Gk%_զK)~_r'<+endstream endobj 1247 0 obj<>/XObject<<>>>>/Annots 129 0 R>>endobj 1248 0 obj<>stream xZn6}W1(7ۈ1Y^˶U*o_339Roq\I%De"Zm89Dyn,Di\ Md(7"81/OT 9&>4QMy ˸V.&bʿ^g-s xa=D&2!S2FDY*0$J<(7QUa v%`@2XLPDOAJABAЄTOM 9P;B[F& OYζ(JXن#PIjӸZ:XI!xVĚ,c8c,m'5X8)X"UlXR\j ADLF;yRcZb['daXf5[bB:-͓ߴ܀ >P r8lQp m&S"6sEܲ b!KRcHX m(Z@LDA'5&zVĦ%e:dm'5ؚb!X9YKFҬ,F^ f8ds<)ja14MA 8ikB5TbfKCiIY`\*#E7p +8⨔u \YG\-0w,E `HVl44*)bgR*сb3*)U?RI e^8OT,Y0qdٖM6!#,yA@u4QA$ y8vSI}Fm8 (\Lvc CLRhd+ڕ0Uc5,px0ZrJ-2Me 7I\Z66o~k_XM]")d ݼcz}m8z_<^%#mWCjv]TJxJ:%QCʒĨ(_}1t6 ?O{ˮF-LA܇YMY0+ AF tP+ٹm 錴߅뷋*jEJG8I1~nW͂V )y04HS`+QaҊI4 ;CvjzV'n3ƿ$,Lȟ(Z256ea8K]By?yOѵAIxmfr~JI! LJzü^6 ~^pE{YNoJB+ɷ J2"Ʈ!\hy \pz!w ;1yu9fv$%OGlV;>MY#+_5C3ۜ;̲0n^LOȺ)js<0W+y֝nZ|ޜ-Mh'3_%p18%jVЎ5^_\% f{ka<{┹IԬ*\|\%ذSsSIM0.OE$ cӭk﫰1*ٕK8N $^dܶl9#n s3ϏCAr-nEq3}{e }sjv$S4bmيO:i@=IvNt{OPa1FLJr.ǧ|L4R IRhg4YSUw)wK"{s>S|ґCwص_ij zEj3fI5ldl/E3\{TS,#OKӒxr.}xh~qe5`LUב dbendstream endobj 1249 0 obj<>/XObject<<>>>>/Annots 136 0 R>>endobj 1250 0 obj<>stream x͕n0EY OekFEQ>@eC,%"a"3 A? N`{\42V#~5<,yo錥(Zԣ`/Gs3(KGp`/(5L53\BSMn%JIxӢQ\=)L55m&96.jlZt'#VL!b`i/S_T$nU&q}%U/mcu_=FhE5؂]^<%{XM_6SgqT~]NKgnөx&dk1ug0~ f4:KtD !JA'&eZ#`? :vS uKʢCLI.KyR u)F[4=[jbە\>/XObject<<>>>>>>endobj 1252 0 obj<>stream xmVr8+t+-)'viwS:/LL̯ٚVZ5SQ;nglGZ?vwqsG[άh[,ew)vbs>r]Zެ8:oi]g[>- COދsiwA9#TRx%Rg l>xQUH٣VFҖ".=s +ZSr!u^Mą!#nQcz~hKœvxWMPjC@Q]"y*\I " W!(3z2B)ft: 9me FDVuh`SvO \b]S`BtxTA-~ AGJ=BլJ:TP n{\^KúDW]fp:Y,nfiTX@k-$x& mJemR:z֝{#5jBdK2|Ch6zYi@;pUmTr|/R!wOW a'IeZ";t0yt0ì>= rzqI x.uD5̫=H[E&h:wU4t3mCGgŮb*\^æ@Xu H"Z#>/XObject<<>>>>>>endobj 1254 0 obj<>stream xWn8+l'nMvZln(R%}3l.آ8޼y3q3~洼{*Y1×_aGqjQ,h]ɩ?hJz\wʚtf<:/V 9Z5m典WAWƇ#VG]̸vηhӘbRm)W{G!#!*}Zh&y5p>P7&=AA*ˮJ=mF@ eg*q.[tJ%RفI sHoi7<~0Ή+Qo_u#/9Hr=VSQ䯒tvoBPk:|5)(t,1*&tyUDLﻪڣB nwF36.2X)tؓh*]M;g+YGIS;*:NE;PikR *./ƠvAKLcg OKẋUӠBP;SrjЊZ4K[ФLLl;&iTn< ؄=QdB0/;*tRk J},r hN`sTJ/D-I[[DpUΚ4,cMd`f%_HPb5=L$Rp3'˅NۓU@fWIt8A# ]:7BR0܁S| Hi2!(Ey!W9^> dJX0 lovlK[P?U7l0W ƈ5hȂS.jzc"7):4@No_FcBP^xOT/qGXGV׀|L?޲.L~iO148xr}>1,#+/d pFh3teHeU18eB&{škPt^ұ`؏PO;h@;wLj[Joh) t$whݘj>7s5r iW"ﰷ0Y EtTϴ Nt$ppWz!Y&l xf=ԯJT=c"O9W/t} m[AhtET-rOV/S\&;ӯJ7dv 8P$PFGSK%$ AAOnnf6Ʋ5NSqr,NS #݋zLk,vhc3yzW7A d@9ZN.r G2p%p\}\,b&5oy γw:%kdxa=ioY4- ϛhj'endstream endobj 1255 0 obj<>/XObject<>>>>>endobj 1256 0 obj<>stream xuUMo8W zrX,%YpoP"Jo(U-'1?f޼f>/XObject<<>>>>>>endobj 1258 0 obj<>stream xVKsF+e #`yF6O9$+.#hgFvz[[nU2i{R/+h6qIiJ}ڬy<4SVA7"DNQNmXx \AU $Ka0_Fd=pM||ǛI{R!e DP7Ek'i (30=jiM~':֑$UZpL?TM2L-%tcƢi*-I C0зe$*(Hߡkeh0ц,0ىZͱhugLS&ʝ=@RogtAp*t%200_*9Nq(TJDUj i *y4 4S15 e +З8*husMQ" }BqV*fz,PS_ZT~?lCư-[;!9]%>k@xpyj$Șguamg50$]c@mkɷuM7, Gendstream endobj 1259 0 obj<>/XObject<<>>>>>>endobj 1260 0 obj<>stream xn0 ~ SVرcW=0̽ȴUh"1[x88CK Qו ZTIs6:Q:O)gТ98ӕLڐg3d0J|ջk0h9ir>Vl\<9:f}Empoq)k5ȶanyOن{9hg4Ia.FTm ySlS5H~x4F[ZܮBmuM:{endstream endobj 1261 0 obj<>/XObject<<>>>>/Annots 141 0 R>>endobj 1262 0 obj<>stream xWr6}W2#AUT:#;։UIqP$d3% *`zI3Ş={Dž`jC]LWNo)xAc3G:^<.؁,=6)lVKueBQy^$sxKH+3~01:SNMH;5cnkH=!] N,- hLyrŀh1H4.V?`]ǘp*/Ck+56f7_`K.ٔ ]vd\۬Bi)0!5$1k2.` e&3N;45Y3uβG\Gp;rA*P\6 TLyiB2H1uh!N`H1ECSxjʝ h@fC.h1H4.V?`]ǘ& p*/b|3Ñ-^8ifd7u4|.*ɟpY'i cXyNo(sfWs x =.|6r`3)){XD90n'TYڅD"$/acH(JDN'0hp# Ry,r<` )KCEP ^R ۂQ2QV-"zIY="뎱& d]FO>yIF|l8;y(e?W# 8B%#<ޤX-pkzl2^=ZCXC<'nIUe*^&+P,+dShrS>Һc(~/+-DI9ݗ!~ З Kb]Ծ !'y>U Ssd:Ѯ/K|]$yɋW^(ZS$žTd?1Oa`dnX;8q/0A. 6Hyş޴]J jCX̗ۇCʋֆs_T8@W\T$EG?9B'W7< k=XH՗([صg6 77jޑ2lv 8Ƕ-eRn9v>E6Xh} _$ 7) =$lkߥ?Pxl5LA/oאnM"R#0Jbȝ2ߑ8'?Gk$*(9@x69a4=U[̱g'{K؞#DZl"6}::"TmqO/c6rmا;ѕfo\Qg>GfI|qGUZUx%IyQ]q5dH҇F4*L6cIg)U8ϰԩU &,[_/yendstream endobj 1263 0 obj<>/XObject<<>>>>>>endobj 1264 0 obj<>stream xYOH_1ˉ8SGr`**!U&1*]ۡ忿M=^Ȏ{3v0 N`=c\}T`:Og2 qmJ&)~TKHxU$MtP26|$,$84#lC:Q8&nNE!q|v42I\rm/u.E0wOfLd8F̅qә\!q|vz8ƛC/aPR.Ԕ6Y`2NɌ) Lj4~: 1N>AL$s<\rl/dI"U;'ӦH2#B8Ft.8t>;i=|D~LrM^j&cPa蘭̘"p1Ogr8ơ٩y?U.E* )jL-RAl.~2m$1b.4cN" qC糓gsE( !ݔ6Y`2NɌ) Hi#t&Ac:Ğ\rl/E0wOfLd8F̅qә\!q|vzS% @ʅ& L 6I?1E11Ogr8ơI>" 5e{M-BAl.~2c 1b.4c"qCSGD>& 5e{I&KL 6I?6E11Os8ơI"'+>0\tSd"T;'32#墧qә\!q|vz83s, @ʅ& L 6I?1E11Ogr8ơIмht'GBaHPSd"T;'32#B8FL.8teoO'=@Lb|[5ac|&h P1oME80\!M~)T=jH(H*_Bڲ[1Z heIDn>}.ӟ!DD?;5vNosH5j6<u}s$SKe7"V1#%Y7fWVнt}4»>[jIږMǬJx8:E~ĕq~0S0L*Q9_fsW qZ>]R3LM"uzn]ߌ M*{H+.N揁h˂z۽x=QIhlh7Xu_J ,--.((4l>/XObject<<>>>>/Annots 145 0 R>>endobj 1266 0 obj<>stream xXrH}WS!q:.j $Āf[$~ w6ݧ{ri#&WCg˷+w2t\gCǧ)U|ga:w>N)yxXǁiSA,~JpY8m+K"s\F]g \vQ^k W6BøL@@+?E 8X9sYxa=^, r'Q. VW_W/1_b|-@ЅIH*e|a߾-oV\n?->{|Rf( Ee6-]np/fRWF2&C6shԺDV%j# u?o?Aߗ?yæ}ZU w HTxj/X..Vk6C~tqI]6^3Q\j>Dڢ ;3Mz<7LH?,9?7w;kSv.PH]7]ߺyr稴.z TtvkGE+p Jw ݰ's\#E 27]w({hf Jw%ӡUE -tL? h%'l* {2Gj,2 HC6(O2Q}QGR! s" apApȫ$U<=&Ȉ|ϠOwzιOwiI/(aV#[l0=D<3`@p&Ԡሪij}augG?hg#=K6 Lދ wx8p}/KFA4 ߮^ |endstream endobj 1267 0 obj<>/XObject<<>>>>/Annots 150 0 R>>endobj 1268 0 obj<>stream xW]OF}W\$l$c>,K!j'{ƝG\W+UDQ]@k0K |ޤuЉ`J4?DZr~ܭ>{<\=!a%tqr|bYOM\"4*c+e"kUSm K]&Yf6g!-zjfm>e[EqK!yNIM9skliGjFp_c qs"PB}8ZŽB犞 QJHU)QHz`@pl-[@7#Rb,r:9Ẕ&G~~xH_q`?16^K3ˁGDlG|+, H3s_Ռ>ԝS>[ݛ>ˍUu -u$قs2M:'T JiBaTyY.&!ą2A秞p+CMpQh:vr }[5$޹Zm&e cT0anK9c{1=Y O7V[_0_4Y#܎/^Sj^Օq')DY8) +…s0',,x7gendstream endobj 1269 0 obj<>/XObject<<>>>>/Annots 153 0 R>>endobj 1270 0 obj<>stream xV]o6|{:y?^[q# ^\܋-Q2JQRwI(i,;;;;ܟ| `69}}[FS825n3Hxָ GdxxiGR)|C&X&#Ȼw'(ŐH) )ǐ8eYbOuf$ԩobo;>vA0"CbX~ywحGv+5BGᑗ{X-ph*.pM^J}p SɡHk0 I0dHBj}* 1;0K GL#U~T?'U\?W5 (feZKu8M4g≒YZ0Z0d^Ҩ;7H^1R4ST |NV%SKFoPnX[.Zҡ DڛGTFm:F{)Xdh4F(߽Oqye;U.pn]mak.u%}Sf3 M֎\\3ގ}\Н`F/ܑ:9j":38JĈA)DckE#0Qwd-!Bhs gr`f݌kqэ7s|[,)PAS(0QX^hZ*L$uHx81D_0U~$`dhf8SACK8kԖ+!wHB)T$j9WGj^!})?2,ֹ9e·8sQuFhbc$:7BdUa4zP 1D@}@U 2i!e22X ]R>wjZ= B6mc'C=q*S9h]`'|Vhv97=(X4^n=BcɴdToiy`>ɯx/lWj( /䌽tY} 3)~Ã\Zp/mt9p$]XR9%X3dupmp\fip)pN*߬M-,oJ?Auզ--atUMC_Gvj7NH`2yϬ[WlF`1ox6&i]5v4]zendstream endobj 1271 0 obj<>/XObject<<>>>>/Annots 155 0 R>>endobj 1272 0 obj<>stream xV]o8}ﯸ}YQQilA}۝$d'xHlva^ $s=:o$Yށp>?<4'A*)^gF2G.m⤣^?nOn`dhiS]Nwk&`6U /ܬ!:?@;QbHFV_!xhhP^9(*jMazC @{2 - خXE,.^aCps;_.:,.jJ~PejQ>F \nЊt7_vU4º8TXD֠ PNv؃C:d-$+Y)82Fg@*ETm!/~vMmMm S%Ԝ,M/L|ct>W.f"=ah` 4~hL:?V&atzu%^3r:G1݌8 )7 ap4On˾؞N6K֌nݥȚcu;cƩX#x&RdRp c~>yg CEp5H?nC{m@*SQFv7>Om)lm|Bׂendstream endobj 1273 0 obj<>/XObject<<>>>>>>endobj 1274 0 obj<>stream xV]oF}ϯD況D!mHq 3M;@dj%;sϝg-jE6u.(nf?ƨKE ҿ//;%ަIQ\O2"*d,MJRlLR%XxX4&u*ΣΚ:aktq2zC6O Ѭ]֩?t2;;5ٛTvίEL~J_6FʃP+y" qba)b66>G4% Jl$b2`T%RgC{oߠZ͚R)%j^ mIqn{4A  r[8̜Iʑ69%hIH(WW/i]#q'3"jk+7 hI8_K=a=GzjdkpңsYse"_yF%E33糭絖Z(F/ԲQ>\1"M(^ DG1}T N_EThΧY«݉wsNS+b,Ob~g-vek>9 qnhhRiLlxf!rF_ ' 9$T!Ctd&2\8wTN}c3}V5}ۍn5^fFGW ݳa׫Y'fqxTCq[ D΋%t`?@"X)TДygA.jԙ=fH)ף5ZA5%\]b4þ O3߁OélTn  KRdAQBrZArs2j;1W̱~JޏK;-zꍲFgR%xߏsC,K¦ rҋ#O0򕕐.NB u u~J'xe iOU D<2avp j ,>]YE .?MnނR㖽g9?=z{jRkڀejؖjn6,@HN\hKeSo7 G _"|G{`{8hVt:USڇ>G1N^U`Pm*Aozaų;i}Hi`:zb ]Ay֘9uE\6~;XXendstream endobj 1275 0 obj<>/XObject<<>>>>>>endobj 1276 0 obj<>stream xVmoFίH`H@jKQ E~w];361NڻD읗g晗@ a40^oNw7h !;M[^'ߢ61l"k3M}a:c;柎;y^=,FC%LFI.?/iK,LU& ()BVdJ34G󱉺 Eq2Bƕwp{?& & mS{İ4G h @ JE¾pYKDП/uHL-dSep{LusR16 0}6iWڨKQyp7CVYܭwa`Wf28ı)ѳ,kKS@Lri%s.1Pm 4:y^|Yֿ;-S|V[Kh[Aξr0F( Jt1HvX_ {{ae0okoLu9 ?L-CjP8KJm sTg0UGqu SduAi8W&odfu:јJrcR0(8Ҷ*,o3{!vpԆ$Ԏ Ա1u=x1t5 K)1a>5Uʨ.%rY:S2 lY5v b4B,Ьz_=뀆 H[Q!VP ۹vLH~-ԐU}C[G>1:!T8K M& <;^]l56e*]hbPF89s˰у (wé͒`CEZpRCO#NR&7pR LpVW%O0W]_nxcZf??R;ҪľX N2@P3{a;BEA4[QЊ,y0XܩtUn<[+ۆ?M=taY/f.V]c#~1*zfkoJ8X"0 &7 4윀hɒ &x:uI%ɥ7Ot endstream endobj 1277 0 obj<>/XObject<<>>>>>>endobj 1278 0 obj<>stream xmVr8}W000!<$RNfEF< lCC-tnAzixD'dӃ^˽Pw >Mrz4 2=&- ^Ҽ!=#*Թf%>Z"y^O.ΟzvJ[%QaXċ-vB\<[;{ ϻWKKa(gJ-+XRLby}nї'_23r-3 *c 'L"%hmF.j$U1Awo+e.\'RLQRx%}+)g!UnCBUya~.@º t%JKiU킘N84OsrSxKn念s`˵sv>y[L su?+S+=SگŬ%,梗XR|x#H:*IB__YCPǾgf2Q 6١N _ixBqvͩ& =t@v-]M:0wbGڨ"#}uKv(6+84r!?Vc*/чqQEoC{6t BJ9Zy5vMk>QbȗYG^hD T6~D`JjQqBJ-㓊-B-꣺E LQj5%1j[\vw"vm.x'F^ʿҷp.Oamo ϓۈ뚞fO٤L pwup)UpW9R1})_Y.O<àX-M;W,3)xi4=Cz3#endstream endobj 1279 0 obj<>/XObject<<>>>>>>endobj 1280 0 obj<>stream xV]o8|ϯXlv~$-pJBK͋Dd[f)ɖE,^h-.jNq~>S<>&4Q"f9oo(J|̔8x/\e%[Q!)UL/xJ:gLh]BRU&,d.u)Je4~! KJKF]Li< /C š*QJLܬMv GWw&YƸ^i]-H_FRjMN}DRi@eJҦ"ԕMk,)*4Ē;efSTұ-P:1{G7eH^QRAq^oT ѱ}dq{RhPƾ.Y Io[ִpjHx BxY͵ґSApt2sawR+4d'JMe;@bhahX4ʟN_yi8 ,s'zxz4²TV܄}#;f !ZU*$&< q^iP/Nsh>EN5,ŋo+v^ϹITZ: D;j`bHAɎH^E ڗ7;c ##!B~KZ"cP!գˎ8kmpV#Ar8OcY/kZ ̹q6oe@ 3`2V>r oؕjGΓ><)S9fT X6̅~ [P^eR 0yH_.{d5 A`!;ю.pq~Pxg͏BkQr͠?,rG}Lژvt$gb+u `:U2*'}kD0[*/区rhߏދ{&f7xG;uP*xzK|k;!6--=$+߀9g LX?%k圃?(ƅp>/XObject<<>>>>>>endobj 1282 0 obj<>stream xMoH#A2-3JPVnvB.݆ݞn; ~j vH㮯ުދi1M攖_W\h2[ⳤd!p2<ؾwhx;8ufX.'B(Ea_)e Ykk(/Sn{EkrvdIZDd6}TgB XgnZݰ;+.HB*2HV*=iOEh2E?qIliX,s16yB /i0yѫd">Y@)2 ٜ/tzetI2է@_ ϽmY]Z{YSn!uYF{$ JJuSTui~a-TmVKjCr Ǡ1QPE'>?ЗkR? 0d dvR.jʒk m7P'7h6ӒE:`lzB"*yJ趥whQ7V9V,u_XN9O: v9?ʶRyP#c'<Ƙ(~/8w6% ) Xt$@!JUZw8MdTj3j\q66Q;, OFtPt3Kw/K$#GDy ٽB 4oo & IX2 r:@76IaOFbC܋EaSўc7砢Ot؎t%@.:ݕ~7U2͕ jX 8oKJ9DFnxbBd"p ];,'OO(idI h?[vLE2_Wٜoֽz>endstream endobj 1283 0 obj<>/XObject<<>>>>>>endobj 1284 0 obj<>stream xmTr0{Ċ:viN/#Yr%yO-S`<}$ #P5Tym_68֒l.FHhcIZabU^}aޖ;gNy,o!& GG%`5~P)hCK=bюgv|z%yr74>w(oRyNFl*vj$sXX̗,W!w squR~>:>٩ ;<\t,VWB$bm?Eendstream endobj 1285 0 obj<>/XObject<<>>>>>>endobj 1286 0 obj<>stream xV]S6}ϯ0 I }K f:$[Jr\Ɇm2pq9hL|B"k_jWE~g.hULsbtТD֐0VOWOKSl@ XG[u9%5OV$V#$&($^Uv$jaZ#zڊpoo3.傲4QF |8pN>X|xPB'\ e,ye/qklPz<0U"S*Ak hUբ#U頪*ng]6R1ڝBg.Vt~3rQ(~X'c69Uj8cE)mn+[`˄ٽ>EmF? (GV`M_*a60q 㱈5I'#Zm62M 8zW wi ϻo&} Fce;=c)eUR@ n+]kB랇`@Gpz I3}ÌBBeBŤE&c?.Tį %HCҘ 'Q'!0[MK p BW+c ͮ@6cHEɳx<| 8>Y\h5W%.S< AKH٢fBS*bFճ7e033!tؕԦv(aEфu쵿B0gDÌAímj=:n?r Rɜ(£ᮅT ԛ@|`"hSV +N=vhcB$BW:kz6^r53k@aɠk,\!Bc}nx'mjszk*ãi *~'^;kB?H8`i<ȉЦuCInHCoq̮Q\?2\ ;H,^LDS0&z`m=W]d k :pDG'KzE׈[O֧E;O; Ȕ pm`)=p  =n x-l/z9O[Sn1~P=b$<ũ8Ca{d}3]Gr YBl l5'+חם(_mBDL&#R="RGsEfKWf`?ᾝ&r6b_/l85^pW_GSfendstream endobj 1287 0 obj<>/XObject<<>>>>>>endobj 1288 0 obj<>stream xuWMo7WQd+ܛZ$nFA{0PfInI + |I̛]i_sZ=լnO74foWmxfFr9H{Fx̞ju <K[IʨD Y')02"?lt~Wr边/ "7ξJҮ5ePx7Qx,j_8>0IUeGAr2DĦ[;P7Cťk# Α)s{'tAp{{Td^]1/$zuЉT.˝A_! Ijz C{n=O}AGLE0 G) d'yK'<%hb N<L*D>ejIM牱 z[ j=hS0Vu_ZNu^U0%^+hh+>O"?Qc/*Dh_e+W 1*nPX#c x,!֨27I+E`hg@`:CErHW2(drDJKc|ᚲ.dD#"n?Pg`gy¾umSoub @fwjU/2bQ,C(I &Pb(+~lns{_endstream endobj 1289 0 obj<>/XObject<<>>>>>>endobj 1290 0 obj<>stream xWMo8Wb5NY4 t[([TI*mh66?f޼fbF3 S\bn+E;^V(VZzR!"DV@ŨVZ#/0&q1jy2V scQ:֊}(L30,pL),,;TV4# ![=/-7׽YUm=U{<|y6-b eI6ɪ7iwVy/5|1F('H,bEt-fԓ~NqEO5  Eߚy{!(l@ $"=`PK:"dtj؂S:.Py ʑ6L\:GK""G c'WjbL sal$x Z TdTց8G ljUf8v>-NAV~|ӆh\+sU{ +Bwx\/Yd"Z Dl១hf`ZNxCɁQʰ~i P>EeYb-5RcgPKy51IõtU)O7l4?kK|0S[9O# a 1 )#'9~(M`I^&`Z/q4`Kk+|t~<9fWQ&뇗61&Ym'ϓ`5\ReLzE#l>xM᡹cʖþИA8ia:~\rx./RŪk⯋c-endstream endobj 1291 0 obj<>/XObject<<>>>>/Annots 170 0 R>>endobj 1292 0 obj<>stream xVmo6_q&V-[K}H~ZhDj${m{I{=wR738u,(eɌjLW}$P3v"wt3;fYX`yw'@S\Nlw'NUoz;Ӱ:NKx~؍+}:Ӗ]FiJ ^̒rJ"P1U>l[ ˇ ZƚXW{r[Vii-Α MV[I΋3F䒔#quVj 2b`LtW^钄.߬0 F3MTKpX42V^J}0̒E gpu |"ARz8.%3}cph]Id (gG㈯#̱ VFY'tZill<-eb{ch-k82XP['8`kŞ ExZKwD$ 6$mZ3Ho\2:P|\l!.SN[?XoE̊c] ` dȵkk8O$[^ƽ 9' xẇ`./_A ̯(sҫWX<`O^pͳd>[`Iʗ_ ~-^endstream endobj 1293 0 obj<>/XObject<<>>>>/Annots 183 0 R>>endobj 1294 0 obj<>stream xVn6}WLV,I6m\ LlEKQ~}ϐ,;4PBqgs+~ci0DzQoxGS ѐ4'_2zjqσLqujaDzox2tcHQ7[M,pj'oO|{8Onj1-RNu4GـkmI[8RrJdp䔖Dd7tu5'oZA27˯u; 1#W"uҞmt[Ii'ω~H`CUyU|t\9xFy:+|t* VZjcLiy}/A\n+&W>+7OҾD):# 1 ybJ+6rMn qMeOҟSe Gfu|`֔mCZ JgPX vI~W Q&Ḛ*@@B2k"_ico% AŨ|]p31l/|Q)-S҂%MhtpA6`,gXz7?JdYd>߷juiI? 2LZ ۿw'i2_ vܸEQD?}Ajրu|J{V.#{ sH!Z{Gy:/"+%YJީ5)٨:褂)"C&ݙ*1vg0)mOhSVLb_`D3,vD9bn z9C͎#џmCeBA;%OSC@(9=4H$A#KL.R8-Ghgz6n n:>y-*]#dgVsIu NI/d*x 1ռP3j(,˷۟[pPZrO5YnM\ 0\ qYW5+|]p4{tQ\T|@M~UӏoWj#|bN4KzG:݄~Kqq1XPNz`Ox}V[~k bendstream endobj 1295 0 obj<>/XObject<<>>>>/Annots 206 0 R>>endobj 1296 0 obj<>stream xVK8+H&'TTeÞB&t0x!$[Im[R{\ $x!$Eu\\9>D ?t|(@Y=H]I7pK+E/>Q:zq`Fz[$[(utňu($]Nw9fOzxJ]< 1*ɯ)rًN£.l~0_c8tF#)yҟo5L1(DL ̾,rӞue@R.נj)sa(F'NAL&JX=4z_&$%%iacJZbF@עPW7Ya̢_V=Rx-N^U,d '[e9+w?~x6y͇,x|j$19< 'kQ~Ԥ3oFkHM P3c^TԉQM0saՍVӪh:E s<0 hct|jC?JMpow2D~1z`]a|(OCcsl?,UWtI?5/<g+khFCϛv?}Jmڷ*՛5+[/$ћ Q߽iXۙ݋]d3}mYj6ABȫ'4wvY.d%1 絃nO p'L'o`~B|Vyiy:ʃAnb(;c-r[$~/Ab?/`ީ/TW9wYGa䎾q#߉hUzr{ c*endstream endobj 1297 0 obj<>/XObject<>>>/Annots 215 0 R>>endobj 1298 0 obj<>stream xUM8+rb66_s#Ⰷ$l!F-9< I PTQe~֏NLc )SVv"aiىg1KiٔJN"6>}G#|%4 4|h9,B4Igl&C&1T싧36@QL4}_ߢ69 zf wYWdٻ[Dԏ6DK/_{~|T=ђWBg߿|`cCF;Ҋ89QVw6]HISȷk9UHɆ^{ )Q=Zh ?:0R\f8硜?n{?n{ DSc A4xJ@p+Ɵ!\"xgad&/>i!Z_[Ps,soѷ`wf\7+ؿxa0$Л٬VoȊS ~vJR٘ uF:K(B2IaفE;Zg=Уw+A\| enioto8%on[h=fD^\(7,Qv64;YSRZ PgPV7tP 5qGޜEVcAST]nVI]7( ",\U%jSi+9xjL ^JDC5vDm0lw>/XObject<>>>/Annots 220 0 R>>endobj 1300 0 obj<>stream xVMs6WQH(ʒݛ֮M'z3H$$dIYd:=#zo߾]$c,)YSVOjuvIaAzMB80>z, 6w ,)IxcVѧI,&7ֆ0{^rglp1mZ-Mm(-hM$4 keBk)Y)g7䫨JRJjYF4֋B:!5f23][7^}:Y鄸~ϝx{6$Zo?|ݑ5F}ќyj68?~N>Nlendstream endobj 1301 0 obj<>/XObject<>>>/Annots 229 0 R>>endobj 1302 0 obj<>stream xVr8+hO$$7|Jœ ! h jadWr,6zyE_f!>9\-GQ!L^HY0ۭjx?y4Fd+i)Zi{AR9X^]^. ju6VT!1&QB[C8Xپ{Cp^11cJOqS_>~;IbJmC-R=>;z2N>/XObject<>>>>>endobj 1304 0 obj<>stream xVn6+.f6VeIE YhXȢ_sIʲ5Al&sշrJ7ΧYz44􋡯ϛ~ˋӜ&amd83M~d, ڗf+J֊3/h_)We ERxAR;oT5(IΔ9>mi4Yϲ)ネښ\9)xz[*|,Cʍզړ7]*%! fvbyaϩY6!ɐkG+X6tʹ4\\,Bg+Pa2EM ) rH_*^Fo!IrL'J"("昈ʽ>*2gWtAU>w~Dg|+QKF2t,%Oypi텶k<EB٣pS ~4( =})xSU:2=JFx<0C"g*pR䷰% ąO23z CDMMF&gZ$=` o?[!rhG#z~W:7Mj7_$][uԦzᝨ^?{gtth?;qR# #U.D(]q3%Sj5\^T;osJ 8N`2`$ocR0ЧL^.kjVwD'5FPb !U~( ^^^"Q ߹rS }Oœ!iώt밟KoE} p47܅O@>fw A͞۝kqbgRd42x'0\'N8 qO5Y.jGiݯ1:h樽0Z<[.V0{._viYendstream endobj 1305 0 obj<>/XObject<<>>>>/Annots 250 0 R>>endobj 1306 0 obj<>stream xVMo6Wѻd. ~ %ZV#YRj}C*ID93o"1%" Bvau)jb $m"+ތp8t![ SM=v$X6I7>l_MIqy_MqC6^g~52 qÖd%bD>w]T&(^o`MhW+$axB(Rz+KɿD5/gX*NV;Q]h{`n"ULe!#!}Dؕ %j~WDM#M?ztƔ~1I|^&p݌P̃/w@?NZt΅V }m@'3BN;kRts! r1O+lMF]$91eWʺ"WԽj< uy9o5Yݢ z5XOpMmVtwLJ< l/D7NL{endstream endobj 1307 0 obj<>/XObject<<>>>>/Annots 263 0 R>>endobj 1308 0 obj<>stream xVMs6 WZÖ|LML7-3ZdtH}J=L&<|x߳BA-%~|}QĐ l,YLhwWMavoe~w!I"ۍ`j}8Xw+](J"_ϻiO !J,x&]j].*7ּX tdE!g 8 /*0-EyVN5J(ejTjsc6A?gKX16uW̙ j,q7(Pv3:0 ޙ5Y}1X ENESLL8ˏ>G`w:Z~/L8! $}[xmz2n_'zaL}C.F'Q ɴ<߁+[їn^jUcHL~1݋u="CkgbAw78xfQVƅ4©ՀrlX<^Ea|# ?pfO8=h,8p `89Ͱn 9Z7d>/XObject<<>>>>/Annots 270 0 R>>endobj 1310 0 obj<>stream x͎0>/XObject<<>>>>/Annots 279 0 R>>endobj 1312 0 obj<>stream xVMs6WJ#"E}''}jҦDBP@-KϤ36I.vQH3h$͂\-xD+2#XpBY1+#=cʼn`n.Ln{guveYy9uhhsd!˭2Z{[Yt :xrC+3=sm٧OpFEr-(_-(a5\ȾYќu̫] Q0糫7^}o(vBYfmxP)dR2:B%R'iSfb Cghq>Cw";cKI'atcrB.e2Գ A_:D3UDȲTTTA ,f4 ,YUG]W|F %󱆴ie頎:K#" (IlO5|z =3gDZyL sA̵y!IUOcxܽBs]u]0K*i$]kZ6C\X3x˘YT|%,Q`:PiIH ۔A#h# Nme%yC5g(]*<F".F"6J Xti͠O.;vVQ1R|f|G: 1σx:Մ m^1mvN(X.Ds%!,sy½s%CtrcWsϨ:e+͙4[rN|_{m"sltLjә7*DUi:QTQ!]-:tDz||/l}h\)sQT*)=:h5)^+_l jL˓Lcg+5d`rV6W*cҫ_IO6 TE;K:4!nJyP%fNٺW䶢SNOoæ7hj"yt=7©enc *$N#LJ'Hm'tT{oTI:~FO,H*fW~:@6=;6x?Zty*wOȂ1*l!ӟ֟mQ =|Mf/M|_{}۷pw{{noO .^]d]YPrߢP4mjkQ74p;014cdu'_;y5oI8\l ϋ`Iv3Y;Sd~6?FX;1ꪅ9wG폯ۖs-b~x$WqZ`2߶?G mendstream endobj 1313 0 obj<>/XObject<<>>>>/Annots 288 0 R>>endobj 1314 0 obj<>stream xWKo6W̭JVDYEvEuOE@[@'(;CJx 77!LؔKnҙB,! #?jV|hq$e?Ȯt:fI'emӀt튤ZF!w 'Jd;`  il-`;bsQLZ'Jc |ʉV:)zbJFS+a9S"?>%a? [`Ɖg?Oaٞ `2YHU\Pk^ך?:G k3|ZdP+kaDU[jCRAmP^\-FL.3ϰ>ly gdDRr\ P/aF/KĬB smA)`(1J+dJr((҈աFMIEb31Ϧ-W(ʆJ*!xS-2װ/+  JC+ډR7Am1ŒAL{nBpo+ff5nZaԫ6˪/+W׷M N]]LO֩n<֮`j/ZϺ&(+mtk.# KWȮ ! ˡ B"wL&+nvm { ߉zQ!c:&VW=gA:|) 'g %.^_t?Jf=vʓHDjRެ귶L܆Td?2sobqgYHvuZq KYpǘO _ً>ӞGCF8l67K4YdK]:)Zfę[K7ȍa>,  7PTr-4Qg7f݅8͟J8_?O,8qSkPwObq^w,( o;.e8qcl1[īȱX O,8} OB@N8 {X`4m79z8^ʯ06f/cizw| ^Z/xs C L\fI>=MqKb?@! gAc]EvS/hvg̶ 0q =GR`Ynxup KS?MasҎˡnF{F~\iH-G sendstream endobj 1315 0 obj<>/XObject<<>>>>/Annots 305 0 R>>endobj 1316 0 obj<>stream xWMo6W̭ʮXt{hhH*J 8&AӢ&!3ÙǙ7?G>*l4~Ӏ¹(ix^ әW5]h-in]ljj-:X\fl9X 쯭N[uvWh>!呮6O6s ՌgFQթ$T2CIPQW YJ*M*T%bQ }S(+*JIcYUI+Y%SFXOf4q16x8&P)R5%K9u,xzE EA{߄u(UHv ##P8c"%Qⴻ`[oEN2{I8ISXO2=1>/XObject<<>>>>/Annots 314 0 R>>endobj 1318 0 obj<>stream xUM6+6l0 TIU䄩)-LdT*=ݒmlMUURu9`ρ/8+oߣ#zvO MVߧz wĠhճՋu3#+7 D420[82 C6{δ֩-dp|hj2u$hǥ3e\wCb,2}ʇ6o^(SsM6>q<d5b}@mX̓tTO`wt,VyYTL\z? 1c7^[9j-n 킻2.׿~ʏXEc8jZFzi@W6ew<=CpoDwecчspګ/=qٸ2+ܭp98zp=7}qx=+j-6"|?ִ,r?sy >/XObject<<>>>>/Annots 323 0 R>>endobj 1320 0 obj<>stream xVKsF+h<,TIf (l$5H$pRӣ7R**,c{ 8x \_m3 ;EO81H.Cx]`jc.aQ^E |aQT.F2* !៞4}zjZ7-f*cO]_) nvn6vrLOi. ʡ)C\nf X0rk19܀c~[M`phR[thp|وAwe۬LC_&'PHAN:6^F^)CoBA\[JoeAO|D)ⰎQ ~¿}KȲm[`q0{JtQRnIW@tiwKUWdaƱ(kkX( cDi崇::1)R<җ{n)}?&K1u R8BX]O7PՏp"Bj~J HPu4@B\[rB9E)f$2&2dq_%F*ޘ lLt,Tz/-G\WFpx YԪ/r-_@53^8')s,FY5 ilB%V`s093Й\Nk54BЯTR^H%OL_ 8QeiVdabƕUr^cArDvzxgpRPM3Hwq /+*{Z%U>/XObject<>>>>>endobj 1322 0 obj<>stream x}Tn@|+Jp`lc'oDyԴT÷gswg x{,^X9}-śo8]j8rsendstream endobj 1323 0 obj<>/XObject<>>>>>endobj 1324 0 obj<>stream xUK0W1$ěU*u 86Ĭ4˿߱E٪]5(#y2@Bl.nto @u\8AuM5UW.k5\|/ GHB#Z ?7Ana9 AF@s#n›/W (]YP6\>O%sxގC(u*%ܙ,v/_ /ڥm7#ږxٌ-Dx]z:@NI9IL~:=nR!D~Ts'ӊL{:RuUD8Ir}@7F3T`Є:}*RդJn zh<:2㬀aJt|}&x A{eRIĆHq ƃkKS%;_A8{`kLDH&Bh7~ 3[;OB=9g1_&#ằBFiɪ+zz?0 szendstream endobj 1327 0 obj<>/XObject<>>>/Annots 337 0 R>>endobj 1328 0 obj<>stream xUKo0 W讎bg!떠 횝"pl9X-GJvҸ-ZPh>?nxE`3Cuo;qXH<$]v#WmW>&JQ%EU eY;4g!~\6}.jH&ɏ*~FM!X7 n6ON3̟</sY5U\jSF=ud䥀rzҬmsgnV$*[|I>2zAO@<<ߋ٪Ϯ ($`w[@ J kF:=Az{1SOV/fBrFN"PWš+_Cqo]^*iQ$oX>/XObject<<>>>>>>endobj 1330 0 obj<>stream xUMo@+H$06P)R+{"9ldR7҂lAv{>tSn)zf*㋌&7 RW |FQ8},ITLwU9Y4܄M̐B[C*uH*7FCj[iQ6o7*^iMeZ pNY2.πxQ&e|3茒K,&Z3V_(ILUvLGЈBH$O-YYW*L (gBFe У˔y:L!3Tk|c iRJ'vM{f9\v0^rBЖ<lcBYw/,=* 4?ZZ-3NN2ȴ'ahz˜OKC-48șڝUЩi 37$mTպ zOv~6$=! ݓ45u-[Yh?(endstream endobj 1331 0 obj<>/XObject<>>>/Annots 344 0 R>>endobj 1332 0 obj<>stream xUoF~\؎tm}:hحv$BPT7}ÏA! d8g8c NR*|~@A a8)Kѓaʾtf #JCY쉭,1_lzDo1^C GO&X@zm$R"ZUs-Y #;ѩjmH2QcYDmZ)st  2e}-:WFn*UMU ~ZnGxys";7,u*{906%, 3BkCՕs׼m6qx(+nӐvR8TӢuAc;50F"nNdމ!j5DY y tȇ4])W?hD9b{J`_wWIvZ}kHM.fcp}fZqLmrr%<ҽt7|ﯯ_ &]v &|~1t?pZ)F{V$aGG@7Nw*'fC%mU#[CTfo+sHmA=(b)Ajt{$Q7f/OԮl6t*K'B+R-^//֪4BƊiLI$AAX{L:5 ˋk=ãhv?/LYdP6N@@n:^zG<ҧ{POás^,]w8K}X̃cVR{FHS^t|7M-0J{ǴҏێZ/2i[LχB| mp endstream endobj 1333 0 obj<>/XObject<>>>>>endobj 1334 0 obj<>stream xRn0{ á6U UhTQxvO??loӶ\bY<61RO8+CZ"_E41.讁OY3>`¼t~=܂r"{y:TRIɟx I7ӪdJv(ˢs&sM) (3)tFKP)7>< R(]D->V }=Z\¹&muI A~,VVusw٢۪m7|)\KDPx<"u֡u&=BZ`k(TY1vMH$8N+FRcc$endstream endobj 1335 0 obj<>/XObject<<>>>>>>endobj 1336 0 obj<>stream x엿OGlj(.ٓ\XV*HE)("Ǣ &e'LyH.=exc!Utgo;o0?NIA{w}~{qc q}ѺXv^#nL &q{'_5؈d|,c旍x-! 1~q߁s+7Kg̹b.{[e TC)H_HU0gTql" SO{ o04)@8yt #<*k'38;BG902AG]Rypf`q*V5"dv`ND`#22so+RZ8/LpVTIP|ç럀}PMxJIc6yO"81Z# !őRAQ::ÈeN"d;,Q5ތ>o-RGOۮjDQ U5>KC0۳QG2[ቂQ<].wzTͧo$P Q^s|S@ Nv\18T4n٫{4g~ gpq{7"*z^zTn-*.ꠒּK\GD]2@_s+xAj⏥x@HȼRCL5:v:x{,p4y%o\f#Iun{3J5Wƹ}\]7Z\X:ʨxB֛9t(Wx{|w-# 1 2hu&N._osҦ =:j !ۂC&hDr}Y65^Qy!Cl Of>no{'3n<2woN%{5xobk`{JHP@0NfQx-}DL--ڵ$Z 9"ШHաv (y-*r1R1sm |Z'7TWg9?|'sx-%/r Uێ6}߯G|ټ%E(-/ DJ˺!%FY/5sR,ǝV8Pۉ5wz|݉m>/v[\npO kZ~%vkis&)'ƿ;~EV|}މC۳Ey=*,,c;Q)UE-jeɪF$]m,iaT3αU& +ԵV!m|YlףSߢA0ܱ Z\AYmhtXR6 jU\`!:C5نMue5}CP-˧TQ_!f3d4V:gK噉(IͶkT0m1ݭLs5\gA,1'>TA%!QNMZ+3b{LzmߜQ%ik#oY^$*>:J2Ԍ WFX3=^㤨Sڅ h!Ut cTUu0=d#IQLh (F?)֦ꥍN'ᾩMvX :\Ь砘 N&9FumrI*u-:s CO6,\ʜʦ(#Bٛ^@E4F'$h])A:B=|^KTMˎaO=0Rz nX\ |BTwĺprX9p~c!ڵZD]#å }Wجi-?+y[|`>lFBIJ'ꦉ!/yK%O9y \gBH;GcfX M!@/i↑cț0cb&bfN,+2??涿jM(8/vq|Bw|9v)>?\endstream endobj 1337 0 obj<>/XObject<<>>>>/Annots 363 0 R>>endobj 1338 0 obj<>stream xVnH+("ŝѳ!F2@h-pqnRi0c4t-%?b|A/cvLK*9'AeVDiM[oOxlr؎Z*;g\'Kg 7M/^KpL^跖]i׋p j?׍+6 -'wR?֓ l{r(\ S]TjP&SxR*NIWTKVCjs3%}I*x)VLQo֏,GEle(R!v4 YT,ot=6S<][VysT,xҮґ;oBZRV3K&=/.HYdØԕ>/XObject<<>>>>/Annots 378 0 R>>endobj 1340 0 obj<>stream xUY0~W^qll-]5<5AՇ*2GZ/lIR~vRj `3>c@fCm KEgX  Ȑ15gU]|:O?yFciqVjQgB/ ]ޞ5oZ p[ oN&n2mM&uzOfq`z<4<Ctkqk3^Zp?ؓGİ;̳Qv>/XObject<<>>>>/Annots 385 0 R>>endobj 1342 0 obj<>stream xVn6}Ẉ3,ɗ4[Zmܷ#lv%%4w˦];93 $0+l'&2i",bxjq9? 14t\Myu9?tv %mMMB,9l*)M~ڽ5%:])?mܮ3Hb.LJ!ƼtUU"A)AgTѢCNŀj7Ka%"OB)ߪi d&Bw:ǟE$2wX Ƃ+h5FBD|foe;d'9 ҪNepXr5/L<Ӥq}֨K5Ev7F٣sNmMqrZKLoC֌qd},!A$HkZiԮ#["_l/?94 w5a҂tTEX.2c}xEn.%p4pL__d|ewz{Dh\VñK "C?y&ł~gЁ`D?n&MDmendstream endobj 1343 0 obj<>/XObject<<>>>>/Annots 404 0 R>>endobj 1344 0 obj<>stream xVMs0+Vg0CҖLgCzc&#lJmJrZ}W 6m@Xݕm@ ?Y 1 #ev@&$L a5HƭTDi84qX['m7Y['9mJ+ILr丹6|dB7qӒq"4G\/fSZ%Ni#sNI(٠60:r(VXCY7ghu7s- mUk +  h)LF0/]"L*?vc,Tr ZR>L%wucG:0!!!2xXp/. ^?{>/p=SO`z:mk;.j x}Zs f@3r-MP(F +;7)]D#^ݑJ`s#>PQ>{`A!a-S>MiwS]}5/G,l b%qǰH7m~w#B ?I^I~7 w~ꋗ<ނ8ș"KtꝀ\> /0|q;k~ltES/֏s 9T7xY>_F5['f}Ë l(p,Φڰ 'ipʭlܞI=b@dLhj'Gܞ]*m8SBq.mY/64ح=>iC{7Z!RzŅ' ^Upm\~6 2:DWP:( J ZlX2xWѶ1`@/O=Pw>l#|Dǚ(m%8JѝwT4C: hbӐn#Uh͒, qzhdO]endstream endobj 1345 0 obj<>/XObject<<>>>>/Annots 417 0 R>>endobj 1346 0 obj<>stream xUM0+涠mLѪzh7!!6vvK}Naa rxoy~@BBy7(HCH ݪQmf9e7Em O+Ei>Byf]ݷc j%" !$OlAQ9>OItӈZc=F>xj6|! Fx=YO|e)k bJI8c@йc͛.rmۺ`2 dd6tAzaJq۰pȅbG%K54,n[QC(*) T51ҝYrKkX(EO LQåЏr U=爥<kf#ӑ#K&65alFOi1! X$@@ X_z^Rںz/gn]M8I8ipĹx_>~$0endstream endobj 1347 0 obj<>/XObject<<>>>>/Annots 420 0 R>>endobj 1348 0 obj<>stream xVr0{$3 0΄L=dƖ$үlcC&0`kW}^z@< Ҽ7fc|s~Oo oӄECcј5rnɭ^nZ,`:)2@MXn0(| ˵Ob ˴ORq-ʶya< Q!J%] naō :QG[[a!>Njzd>a0EԖ3\ٍ0ZDJ1bL' gIJҟiѕ \;@3'1y;B݈Bn'\*LAXX&XL-*Ԩ,'%kVb6;Qs8a`Y~s*>JKm  w,۝#\a">knF*4g^ջ~E@7:B9D@#XWԡC}?PRs7G'>{<G+%[9hl4-0HMC~AHh?)_MD>`2>$#RB9:$؟:;k*m$ZUUZD}Z)9ǩF*OCk8Ipڡ2Dl Fk *N_! /: 4;h%"P*TLMr<ǍJ u~lNFwԝ:G@oڜ*m50UnS(g~w6;GxÏ`ׁ..X:]T}[ G<40/u!b6KS UWPa,Da<5 !g W99-{z՚endstream endobj 1349 0 obj<>/XObject<<>>>>/Annots 425 0 R>>endobj 1350 0 obj<>stream xR]O0}WGI\O>0,1a0[6ÿEfmҤ=|ܛ; l#PJy>31X8-cN+}C[;,zA ŪW,6 !òI /G_p׳wiTFi]Dzmsw/ߖ LƼt?m&4V[.u!uM8ƞWTvסrN8()ۋ+Ġd2^gX&ib$lp<$<'1Ȓڧyp>1uendstream endobj 1351 0 obj<>/XObject<<>>>>/Annots 436 0 R>>endobj 1352 0 obj<>stream xVn6}ẈuKoy.E(PhidKZJM8ŹsGL7eTLIϣb&pl[i:ʦs|6;Ī[ vn^1x#giu>X*~\vpsaSSOJWsT6x!ˠGҠAY6n Ȳ:_9Ev+u:qIUuk(:(ϑ%G} vֆ=2*(4jKO5@ *Mn5jE;YBbL+Ud<"TucG:3e} M f4&^^wQWg"#RFc7@cgHLK .fi{#2;R*#+O>O[?GWa'G{┯74Be'9YG;%jO{s_,u1KW[ߔe!UYD{endstream endobj 1353 0 obj<>/XObject<<>>>>/Annots 461 0 R>>endobj 1354 0 obj<>stream xVKs6 W}X+e;lf顇vKf X&U3qL@J<* zI癈O~D{Yb-FW+ʋI'ڕh#bQˆlv-I]10-t[YA2=d.ʁH\TĨNbmzαҨk,eDѳxT_'dP-KTMnA_ԃ:Mao޽=;@g`NT릑OWWR9>H}}z^TM>Z Rkh VqYZsYH}afmPu|PJA.[ A*[01k1 :kKSz4m#{3~Lj Kӵe[IVcqk3c1 5?.R]nŤm EsU'/*}Z8ф5u+\LׅZՐJ=([k8a 6jAL*˺Dz݃!0PxO@:e4e] B5C cy0]94'09R>*|4.;(?_ωbs2/ G;2syTLJq2c݉3SpSSh["PغaCu6 }t\(T54M ? 3d[NG+)-",3Y.lqleΏ5b)kMcTsװo_'F\ՋYSͤz>p8W~ 2,Ϙ/uy~ ^ /8|Fq!"~u. KMI< koMa2 %hf_Iq'endstream endobj 1355 0 obj<>/XObject<>>>/Annots 470 0 R>>endobj 1356 0 obj<>stream xT_o0S#UIHo];6i[TBNlO&NoC E[Gf%PF327/oB2"0"q˜_& %Cu妟i0N1&t )%!lN2gdq\9<& LbDVgC(! Prr:y1&9oQe[05>U#_ "'-9o˵S7ưrٷub]kهÕ+3]#r&(+㼖t+ n`ȳ* P ~' 0Aj. h{ڀ7|antE-XiV4XA7-zaFPb'N&:xW|Hm+mPJ3侺鯻doZ`g a\mDjr!SbUC˿}^:Do6>/XObject<<>>>>/Annots 477 0 R>>endobj 1358 0 obj<>stream xWMoFW z%Y]CUPQ`ȕ R_7-1)~{3fv)4Q덒޴z|NF$OEoRZzLh -bkkUYʔ:*GuJSմٺPQ"*ݐٛVk1߽ 3__+\v7Λj 0`n}0)sKh{Zx;mf87 p=lMύeZ]N˾N6ɉїEP:+8< ƒr!Bwˋu€8_1{U:ЋaJ stj{1L9Wa` Dv邩^/YAPqd pٺP1J V@<[e*hZAUmlV9$+b^׮(܁ecO (!wȇǷG)*IfQW#ͲyT`ŏo;S}( Ow=]O@AWdMQ k;G{8jmelH#Ԟu F벐pfxc+S¬V*pP>S ke SAٵѫCs5sOD`Kqŀ`af?t2ԼjXz6 ? :кJvI*ta?GE3lLϺ=`2x ,jTAz\?Of⦳Z6Cw57eQ<,/F܏bZ._g!_'(y lͻȋG*H6v2i]qry}<]O9FJRsPgq /Χ|v$Xr5W,zoz &iendstream endobj 1359 0 obj<>/XObject<<>>>>/Annots 502 0 R>>endobj 1360 0 obj<>stream xWMs6WI$%ݜmڨӃр$ I%Q}w~U;N2Sk$.i䃇?f1w#ȏ#׃(N JܰmIYMgZ37&A2:gZYueX]PTkfUyl0kP`yBʵBwl ^)WG ~,Ǡ &-Z0L]'wѝRl~X/,)z V]`p<6Rw ͛ ]^,̘ z,TŮ3ȱp7 YF~<RcSi9Zy@ӐĖwL)g q6 e& ǣΙS6=r:Dv'%8L֏'nZ=+OpJ940ͣ\^z>>Zql#Eté+FH噸\06& l+McBqv'RSE6՛%tQh3I)>) C%: C:CFxZ/񢭧?8Ej_橫endstream endobj 1361 0 obj<>/XObject<>>>>>endobj 1362 0 obj<>stream xTMo0W1]V{06mUMdf7~@*ǝ݁:B-=jdHDQ f_)ayA@V!:ft}Ȋy!{4Hhd|9ms@YTçQ\89m*Eϰ-d4LXOb/.l`fPs(aP J1aw}:K= \_ TqW2m] &AJ%*ʜRԎ\ mѮP0<]a,h:3A> ` dOP]^ɂiVhn{n(*t/5rT.o%U7zQEM{2aL"Wj;t9I+T&/F^Yۢcq(΍==ɽIk8JƚF1<j3Ny :) hoyV*+89/<>tT Ou 8oІUafG:WoKa8+"Dũ؃33MOaϲ}F,F޶at!)kJ|Fx=(FFt IH`$Smm␰HI@Ȗh*%Ioi Yv&=u#endstream endobj 1363 0 obj<>/XObject<>>>/Annots 509 0 R>>endobj 1364 0 obj<>stream xUmo0ί.!!}`/*m1K$;2l^ڨ:N|>{9I9#Ü\$ltT>YW$#]Gg8S33Td,t8;. pq&f~fpqAlP)̪{8/jX4֯\A#Wk@-5x˵`̽4J ˥;\\" m{@]pCa/ ipݬJ(c@1 0Hs^"+@:p+^NcYc*%0]Wj/Jm7%B{wboHiX~cUQ0m^(+G8X=؄$/\|]-tXڊ#u%K lO6ak6vKYH+* vR0RLDz5wB)Ԃ[Ds_K9e{̜+L͓(+j"G $e$\WPOGUM57mP;GB`66a:3 {ܗ+l !,iH5.+= Uev2l,{MnC4.nzqWM̭i< (F$U=X0>i^ޝ^woOFVW)w8݁V@56D_`ETITdd(zDxp< I6be :>/XObject<<>>>>/Annots 516 0 R>>endobj 1366 0 obj<>stream xVnF}W73D2y(tU>0HbE{ )JCqڀs h#Po?p( r 3X?eGo>q_|~j?!1Of:S )hl״J !bO$$8>[ݻCF< 1(TH_%o%)Y;>tWQ, $Xd2@TH V [*f+r'Ҳ/8 -OZ䒊}IEd&sY:͡ 1'~Nh_1KmL'z-, HR(IuRh[NwaDK#It};ϫ"ma3`' e&N̘gGP JVlB+~3 E a~C|A|Q#y9GkCg&|{ڎej޿gk}VF"[_,Zy!_91&_E30d[r  FO7~ =syĽlz^=nRhDG3tKV.݃GK47sykʦ28٪ a쯺ZEG|qjUAxX2o7/F]Baa';F}Ύ mGv۱V[WhG6%Htp}>9Y65%Mpq igWFRT3vr}C/Bo6/N:ԫB8]{ 5Im*g I̲ɶIfxC/~o[fKE =l^\:-"{u&젪.-R S8qu7R0ӡ?xYOfkStI{1A0,=Y#اl##e>/XObject<<>>>>/Annots 545 0 R>>endobj 1368 0 obj<>stream xVߏ8~篘R趬*{9Lb UibJ_3v!\VJ |3yf#61pHw#۲q<?tvĶ5R_GoVe7iYpA[#[-ue!!iu0VK\F߾.Z/Xw2==h~VidѺ&_o#uc GK2j:%C~)_30RG|E$%~H:8ONt1Hx~XqBõ!Ix6?xmXQMYT岄 _T/͒?fzy`($#G'U!`_40٫aR'a(_pb$  Yny#UHra~4|L\N%xǾDy}j@a ' Ol\/UO)TBG7Zʮg3SI!erqzHi`,ugL:tEϭӘ=צE oYO#E.>C+#"}wϨ?xy1;9LB;>` F*]^YaS1Y~JFh endstream endobj 1369 0 obj<>/XObject<<>>>>/Annots 554 0 R>>endobj 1370 0 obj<>stream xVn6}Ẉk+ڢi(HU{|E6FJ33s ~1-4[,h/xG ͢)4YF-?Z|=['ъ`M 9/ގ즉^·ycw~2ՎǴ""ZgIC""دL0a<] M:d^[ڂm(nk$}j?pI4e9c0axo+_ XH :lQdvIS?E^fbD'cCycb6κF䝝?1`mԒ`1ԑUS cRνcXX,UgDwim,q0ϧP{3Jv*Np4dDimWvX MNjym*Ғ°z)qYdPRL*TtL#iK }eF JO*l quQr̈6 @+J)y%A[!=kv5iG'ehH<“v, S/_&@wxمEDcc)BrqǶKW}oϤ](^;U7P: X QSϽ.sDQ59vZ L*$(ңgj,WRj Q1СuC{[y}8}R['yPq]y]v2W/ )^Ŋh4RV[~G=請-q_]pY㢶lvQG:2q;a7J W5Q]SI%`G PvOogendstream endobj 1371 0 obj<>/XObject<<>>>>/Annots 561 0 R>>endobj 1372 0 obj<>stream xVmo0ίo$HӨ&^RHqΆPRڕr9nuöl|R /׳\ kp=Z=nUݮ)lIt.yq%OpF]b AJ4K7(C)Jdlfj]h5kBڠ64_2䊵52tz &ʷ-hϒTиJp; 5bCbԆH#F1҈"NM@_Y]T>[{p9_?Z1 jUZEkw5`8L&F$3#Lg5Q&UQ̶4F4ijhPJ9lKcd}N.H7 Y:=)^QyQ=Y;z1 jSelt\.\ԅչ7DB-f[0PR}*[hi :PQ| -NLanWzXqncϚi&j}&,[!\KIطp]"Y1r^cU I`K X%/2}3&gw 'INРh4Y;OX(KA$yRO9tdsq&S$a.F 0eȹMdX#9>/XObject<<>>>>/Annots 582 0 R>>endobj 1374 0 obj<>stream xWn@}+plo4zq_Dhm0265FJ57 6EM{ pL`68}|5Lk:XVWa̲5^H1|i`1$s.*i7lVi @k溸Lч[$sA-#JڮLwj]Fkb&6jՋVJ;fM2%)]T1 rmeMduf\ysk4.89L<FzFK %y8 3xZ'A $S1&i>^<=4cц?"N1#7A?M>:ŏONYp%c*t!,0V&^ wr2\ɸ7 ], ПTʣ²1U׀S%" SA]S܀/ LL ⢱ᅑG? )qdV f062 )%gG i nxQ !I  !e q?֤.Jcpn{) $F|ISߌ._~7S_,?z=:.?2HU%DKv t(R'K E5Qjxɾ%id~K P Mq42L\wW@|]UH"V-&tK6^EI(2qkO21iendstream endobj 1375 0 obj<>/XObject<<>>>>/Annots 605 0 R>>endobj 1376 0 obj<>stream xVrF }WQq$\OvMվ͒\ݥc}]${ 8gׅ.zP4 q/"BsRh c'^.:,ubr90  (-򦙃^fI"gP+Eb,7p\3z6j9645Dz%k=U QEG 0,)0ȉ0xAhyH"9*y!RelJC b G~3 D!OǯݻpX1Ҵ)CtQqꆺC% c/Kz׼V.7XY -vE5F }B#F7b_I_ݎKPZ|\U XA'Ah $%kU)2u=O͕:绝(b ,9Sh¶~ o:lXj3T"!@8Sϡ$ɳ7і^r;p:芵օb)hW`-gV;ޗ5Xj-Z'ҝ% @(P%=l$C1N0"|xD/3L{l01MR Xؖj{.̎_1,/vs'bNpsΓt"FrV_҄^\`5pf2t9ަa?E 刄@Y^F@p嘐Kx!?m~t?OVzi ѧH;]-o,_5k+cU!ϒg~UʲyxY^˲4Y#Ҡv9^D8+iuXOX6ibpխ̼Vbrts2rVV&xxIiQ8ah{S,U(`-Tz X'nv?a:Iڋ#(ɇ4.endstream endobj 1377 0 obj<>/XObject<<>>>>/Annots 632 0 R>>endobj 1378 0 obj<>stream xVKo8WImEhI4Hr*՞ J* w$Nnȏ}qay3=g݄"<'ɒ5pnjD4s'"!*eE-rkEq-FΔfyK#=8] U3N^<њѦH i($S'"IWyl~}~\VBjy* =sd$'I5Jl8 3-8q=f/XZ6v,EĆ5;t,#Aa/Ml1ɬD2qסavde; &~EPIiմ HyfƙUL}с4b]-r  &U-8ǝKw1DQ-uZ["G NvFb|9 j먪=u 8᳋Z*p]G  w),ƣ3, aYV7xGc~)~Jީ9zG>p5ML;I$P;BP- x?v+jҜ[y/iwظ9O3^xu{q`J9I'M .endstream endobj 1379 0 obj<>/XObject<<>>>>/Annots 645 0 R>>endobj 1380 0 obj<>stream xVYo@~W#$1RzRYYj_ߙBTkAÿQKcԟ/aƆn9*,MfZ[,%Z>MUdRUua8QXH8PR߫;h&kCht"]]wZs>K߆$$L/Gi,xxޢ A,a&?u;MK˓mTtJg1yoPQUms)2"eodi} J][..6(GڞH<^2b/`2t~OCvhDPZ;XqP *o AP@!*6B&]F꘮=4F j`!1S&$ȤqzU1Vh!: |F}]7Ay^yUTTSFCFHhnUkjv5tb(04w=5W>Q[5RpS|7ip1Qm3s ف6$$m-oJendstream endobj 1381 0 obj<>/XObject<<>>>>/Annots 658 0 R>>endobj 1382 0 obj<>stream xVYo0 ~cڮo;m;0dǍ]H}-}1a D~H7N:E8\AbIw驌JdٖE[u߲4êk|UP|U5%J9M( a{5DbI,<+ *ALN˂eĪrp`4҃_2]/Ga?ahmbLXg,bc@Z1rdw Y#E88Y1)MŊNl\˄6ʶIz gwi*`2 å>/XObject<<>>>>/Annots 671 0 R>>endobj 1384 0 obj<>stream xVKO@W1IE8T=%YdS{]@E, CA}|c m8˴p|?Lӂ`O&渖1-k8vMh\<ΦXjV^!h; u6&R JJa N2_,YB5FkJ}M!ڧ.)|ogNE=!%dendstream endobj 1385 0 obj<>/XObject<<>>>>/Annots 702 0 R>>endobj 1386 0 obj<>stream xŖMS0{ Ke;7BZK'3cS[?b& L0ɰ^i>J?G \cr,#qIu6@ LJ509ncp=.9=Aac NXbN@acuq73;Xj`zI^ۙ ֲq| o@^cuq9 ZE"\l3Luk>ۖJƍENS_ 21,f5T_ES ί|` [ 8 I p8SPzkX>Ke[8&+7dU57$aɠ I㫲ҕ,7Hr *7:C\w٭^\BLseFF}v?Y ݬ`̀38;Ҕe#?FTcWa 0SqiZ#eYZbʺ4Zn_plE^Q=|8ȁps[1*C4Mӭ`MG$nA+ 3~PK]VpTUn[>mh76+-h%EA^+tvޢ]ikmii=Ch{ճog؜{ȫ6GwNv,fƋOEC0.=*jF,ċjAp#:ԯJgYldNE&hҞǬƻڽ>zCŏFG2}xendstream endobj 1387 0 obj<>/XObject<<>>>>/Annots 733 0 R>>endobj 1388 0 obj<>stream xWn@ +xtQni=@fˊBK%iP)PԐ|C9`㿀Cl'@-rw28"t,H)\EZ/ħ DZc %+=ےҮl˥B`JCiC`>KƮD7R)Fx%kh4i ^i+V>gإ<87Kl:hBJ(KƮO[JZA'ڒAVvEtQi?EHCdEW=N,hn!WeT8~> f37PlH`udZOd>>N[ Fb 2noZ4{z?9:+g:;*|vfRpk2E oZJ`{>(q֐JQ@i0o<&qSVd!]Ӹ̐)݃QxI) J „ DS[PXx ^lQV-:l,l-,:/yIlgY;,P^ V%zQmpm2M*Ś\$ӴOysٰJ!Iԭ9>u ;473O.>SlnP9쿉۫ql7%@@ ;쳲SslWxnf&^c)h:;O$iiBbgT50Yahadc{{@ }K 쇽PgcFD$NVy T÷:F0 g,1#!txE;\!=_!Cendstream endobj 1389 0 obj<>/XObject<<>>>>/Annots 758 0 R>>endobj 1390 0 obj<>stream xWYsH~W#& F[ R M$%:X߯gmW蟑E&-#03u3 B& |z*#4<Gt]f*&E\M17t,Q6{j=#Li:n`,xj_ЯA&IMim*br:yh8PԠײިmM)ށfDs~X 6'?gN#ˢ7T$-bUZSn/<[UfD g\mDqSy4RZOiZT駙]c+bZ0UBPnޯn-Dؼ@_4/UT`RQdo/URFeheHKwx"}nj-u-~]]iUeӢwЄ ~ת&oG:B^晊X DUʲ5tcQ ZJRC'U{&e !aq@Vu.oqbAў */llrI'ڸ,X2Z^胳uG3Py6ܬ )xyͦ==0'4Wrjʃֹ=yr۟k|6y 9m{;ȣ.{N$GdD |7H$X4A? ~HʄR,m)Q>mYLDmk\r@w)V=v<]!g;W~]ۯٻr?'PF{pʇ^Ycloi\m75ٿRWV]suQ]ম A>kf#Edzi7{t7ΉmD]5{Lи5n E/YnY ȚnEى%g{ oNGL1p#c `s?gNM9͐uendstream endobj 1391 0 obj<>/XObject<<>>>>/Annots 769 0 R>>endobj 1392 0 obj<>stream xVMs6Wq,F/N!3i2Hb  R}ԇƮ=n A,v߾^L4Ih8 ~0hDS(aRtכ΢$oшtОt+ ~AMb +D)ܦi4-MJqLMl6yf2yvA+庼K%y+P$~b&E1:Cd6/~}#jStVPkIl? \2WZf钊L0c1Dd Z /$%l!/7լHP#3o,㆑ MKI"e~70)񈠇u GRnJ]ٚ~b}Je!|(SҺziMK- sQmEv{E-ݲŢi_4MxmbT}fu5gjyV%Օ.@N[nq}Pu&KZU |u{:,-{of%AÂ1^G/mB:87 uχ ?s}-_<[6kȕ*&P;Cat5_(\ZfuRlnf/Od1ߵv%2BYX;J,{Nɦm+%ضzGr[:\MrB ]մI,-?# EZn#R(0pAp(.Jᖮ;aZ@i}YRCR\H[Q> 88ڙq%q'|:H OPO:I{&t3a.*2- BGJѽ6H*V]KvPKLHզ!=ĝ"dep*He @áXZ``(mah1 4aJOJZ:c-n'1J'锇Dz夥OBB@2+>tFObvۼGANendstream endobj 1393 0 obj<>/XObject<<>>>>/Annots 794 0 R>>endobj 1394 0 obj<>stream xWmo8ίoGoK@>յRVH$lvh_c; $m괻tgf ;?8M|Ku'^aaya)p 7Az#9k#`gS+YE毨}<(`)'iwdQab$ BG֯줃6*NZ9%-9jm6aavgt,8 GXSfVɔ`<,atJH- ?Yh㚮fÊ,wt]-934`>=K;eo8ǚG`r ŭH BrVz8=qM&׹X|*%O&eA¯UT&1api$X t"qJ$1Q&MWúxS4 ~NQzp!cܳ<^S\=d$B] O1ơHTVΜEjP^7#qdL2E 9790K [٧C yOdz$ɝTTiL>0݂xp MpMwy5زɇ&'1ÒUĴg{A𕿭~&И&`;agx ACuG`U6+Hs(&Ú fAxu/(~3V҄)~ZB1vR14 ACG0ﮱ z`lY~X?j^T2Y7,]'k(h%6ӊhG,;5wW TKq*t~D%Q416WqOAHR"mM4G4% pjĖkQc;X+ʩ$9Hћ~;ݯq G%ms76 /<Gڦ7e <*W`F}?YR vVU!C>^<^^z?6^n0!Ufnqp+2KE1#+jmG^<oqh>Xpendstream endobj 1395 0 obj<>/XObject<<>>>>/Annots 809 0 R>>endobj 1396 0 obj<>stream xVMs6WQI,Z>(Tձ=94um DB4PHeMܙ{F$`v]݊҄zCʪV7ᎿPF U[ FԏQxK ~k<aUf{#SQ2R,'[Nzi40:M`ٟFGay3#uz)OqL1 GǡKӬjrҒ{4V^\楤JT g+ Y~BdN]8^ǻ?Lj]Gi>w4oMUIR[ZR.VNn19=G[z.Jƈ   ;Av1:G5UIkrxQeɋt6Q3穓 A`q0嗻ǰfwkț_Aa6=S5һІ.ל;D TZQ!Ranh? TK悥L4G@w%U-KY J ]QRXOJ4|/q)2% -K(ҏL+BbJ6\rң-D]m2*vDw]fF$8;ї!F4HKek')]䧢+WUe { v5ߵg7\iA$P>}x@>/XObject<<>>>>/Annots 832 0 R>>endobj 1398 0 obj<>stream xW[s~Z(Q79Of'Vϊ\[ʲeŶ9m2c qȩ9M4S\>9z{lJ8SCA{<dMx|Z"%,#X0T쯡bM NY8HDvR i*slř6MQy_ýjr592m`AᘿlhgtMd%TI<٦2 hl3T8Mehӳ1ij?> )`Y%u3Eg"aʭ8%"|#@}=^ [L]j{3Ĥ6 -F71?Nc} xU_~)iN5 i^:Ӽ$G,u%»M4VJ=VFC.WV/W_T伽zr|LE79F66"0r߹s̋o }6+dw22Ѫ9GN_3}54F!vt2nKus.*0ِfӀـ5W{c/% V  @(c#ƳvS/tPn#mr }w;gkd+mA_x,pn0 p{rP|sHf;Cy%5KK# )v`)VcAn`kwnm;0ޑ3%]`X&g4b1J~I;7R%:11vcb$;,& [MWt.j g@B|0}V` "L``FN+Jc{(*[a-5^'˹}2XTQ¡MDָ o1q{# "t&oмpM*v̩-(7<vUeF2q3O{N`<|{gȴ!P1ON8TE ,R z3%C -| CU>̊BzF.Ue9ٲw0M]\?vPΐwOS,In/w'endstream endobj 1399 0 obj<>/XObject<<>>>>/Annots 839 0 R>>endobj 1400 0 obj<>stream xUn0+ "ٲ,MNAF(PKR6ܯ.-?M6`]l"b v!܏xLa&A -Lq+ tr$x% W4tկC6|p}CAV!y  !+B9n`whVsB+Xk+%s B++ʁu2"7@W7#%T.E+]Ndig3K4^7HEeUR,Ac` a:UPQ0n(jo@7"qX}+ L6]ntrٗgjxm6o{֝O:k-},-Jy~8@0f"!VTG_ܫŷ*wc2 57{`b [ԨԎS0Á)ҖAאhԄ*94̢yW(7䖣ܷ6uE8舖]^Nk=A`m9}oWLZ,4NR#9RP c򔒣I6xtVB24Rf=8vz_7ɳ0c\=a? 840K Ng04 SE{4꘤,%ݦE69Z9%MS>n)QELly,Dendstream endobj 1401 0 obj<>/XObject<<>>>>/Annots 856 0 R>>endobj 1402 0 obj<>stream xVn6}W:]Y͒[ -u6h^ITI:v@vD9sxfM|χ$0xo/`Ρ Qt i6\";Yߛj/p} b.i>/XObject<<>>>>/Annots 881 0 R>>endobj 1404 0 obj<>stream xWmoHί o؆o\rD']~*UkȱI3^l驧DBe3=b҇vŞA8 8vV*/M\'dK,6HH}Ð|YiCIPx,,u01# &roR9}|!ivF؍EQFi6cMlx3RO>Y owIcLEo?%1p' kTK Dy'Dq:v19}nendstream endobj 1405 0 obj<>/XObject<<>>>>/Annots 902 0 R>>endobj 1406 0 obj<>stream xWS6~p/x\L{3枎bXԱR!oWv()SjY@4 )S>xuvLFK]Sx9QFֳ1bv4FS~ȳ ʨ1fhke${ É+~$A= 5fHf'S!##aX;`5f#GE=2o'X퐂h:_^F4O$'p\_ 0^I'vq`йEY]]M+Gmݖ&הԢЙVN/DZ.eK;ol"/אfRӥ~z8laM#DGk2^|m%%I!RG| ,K]z k\swX;G%E+@]ijZtIvΩhZ%d@mTYIp9*y:p"kTejEL98%\ce̹&BgGM- CeiD^cV2tQ<;͹U*zj.u%3֛҃5% !LIwEuqw^Y\z^3 JuFq3THFk"med8&=3HR #ӊFz}Ӌ3M uP /!wi7hyVIE9;u9<X KҖ)! !{lludreUɜvVg06kT{ Kթ<9.එ-M[Kw]Hæ,줥?r&{dd/kG?p; f} 9?hޥh7ǷsYEYS.N/*ySnd9$mV56_H2>\>d|`S\e B0T4) ䷇V[QB'#|μ]ň9\~W90v z% lMjċa2ˇNկ?7endstream endobj 1407 0 obj<>/XObject<<>>>>/Annots 921 0 R>>endobj 1408 0 obj<>stream xVK6 W&e;[ Ŷ뢗Vul)+ٓο/)IAF("ԧ#!3XF/ FaJn,H *ajX8%S[̃vCDܮ;9NV֟6֟쥫(BUV$;geDKnEEkQD{j-\TqV$Eh!-mޢg ` #<_-:4wf㋬O0pcZjew韣nNK |6:½:jSqiD' Og p60V@ [54V@vH[̂>-q,E B=IU%T:Ga'}BaAWϝ6B r*ˉ׀4pMzϺ3EӺJ"T߸^Q<SLAuY Eѣ Wp@,:R2i Hm@SJ25֨iS2 cjQ`(ҹ~?{3| Ď{f7^޿e~Ibl6/3d>#(lL,k5`v;i\D(+f7kľYZj2)չiePe?.Ef^#ep>x@eZ\*r8>rk l(rWbfCYB}W\%ͯ=LȻp$S7( bix{ a!!]w #qyrkE847.W:vǿxu. ZBZ}cJ}=o"dl'FW>V-XRPܤ殶dc WxQ"b+rh!Gz>+L d~oُ >t.,='$=ۭ:]o+ANv$Zo_ž"SLGULbך~ qendstream endobj 1409 0 obj<>/XObject<>>>/Annots 934 0 R>>endobj 1410 0 obj<>stream xŕO0W|n#{CBn~g'Cik(|pH#cul=w<c$q`tAk4|;qjaƽU&ᱳ)iLވl[;($NS"QtOnv!t}[){h>Ȗԇ$x 僔qjm# .RZ4Vُ`4O6hLɊAXOZa٪-ȅB@(mFTO RK(]Hf-H2FiaZ(+!ĐT! kucpq\Z{ hzb[EiֺJ6oŻXH(o${شcMcoז (ԊFa%jo-NGN{T6Osܮ;:Fǒh6weo[]5i Aэ> bpsyauȜIY^OeU9T+B|hI0~"Qe![2nO*ѻ:F{ȁxBYֆ#>(?S=.|FT=σ烆[-~CكdEMQo3OMd8XQx^ybeRAB!i8uxڗ3>IG`: endstream endobj 1411 0 obj<>/XObject<<>>>>/Annots 947 0 R>>endobj 1412 0 obj<>stream xUQo0~W#ŵ@XU= 2o!$PjfEcke'Sev5eQG{1t3>#5rXYy^\اom%hS[1=ř%BUY@ހQȴ^t;NQe8 r0串vv}sK*,@_K{7n vQno~S@x+zѡ` Jf;+(̞E0XX?FG]@]FXihhU uPuLWj }]'[Y2"#O+Vsn!ZmQx)R'_ׇ;ad!)QY=ViT LZQSն{1Bz[OoamE?˲E{`EL0~?؋EGqiDУte>endstream endobj 1413 0 obj<>/XObject<>>>/Annots 956 0 R>>endobj 1414 0 obj<>stream xTr0+h&EXr! ^a-:d~}WM줓0Yv}:9FecJͱvjBc>,>m5+q`2 mif7J\kY+urm'13kFo7F!hn9mPȥTZia.&h~uv8UU}Y/ S|aحbK Wgr>o֛}޲pePSK#%k JX.+pmغvP m{zYE@pJ1*Fm#R*J%^vpx({?VT,3ț\ah2>MytVendstream endobj 1415 0 obj<>/XObject<<>>>>/Annots 977 0 R>>endobj 1416 0 obj<>stream xVn8}ẈVn&(F}1`p!)%u3[6&$̙9(?!3(QׇQ~iϠ(V Ga4%;7F:Yc?8F0RyoR|4vZ6$h"j0H,Cx6 j; 7s7YdzQ\:du#kⲴz  r0f~PT常d %CD$1d=0hx(ҭf3F!t`aB|lF=2Q/˫a{x!q7n`W-W;{pw\?kRe+ˤy@^*YC QmAm`d jc!aoY^A7-lVתd䂶JZYm3;ipxJ-D~}WU;J/Nj9  jL NSR5;- d((1^3ApO#>ʫvlˁvpy ە'yr\^`W 㖪ţN3Xn a4B,0R%dISz/BjI)] Iml6:|Ȩ??†3c1'jEűX:JP-SpH fհa*^_R痆O>۳6tϑ\mg'Ύ)` oU. _ dVhD˫hWm|L>OYʊ BXNQ堉!a^m{ߋ2|dř1!{f|ҨHQW]'obUL p^}7h'(Kj:8OC12]נo6]c\" @3Qt'%hlxӤbΰtʆ+?Aj0e"g1W1g%uendstream endobj 1417 0 obj<>/XObject<<>>>>/Annots 996 0 R>>endobj 1418 0 obj<>stream xVQs6~Wۑd ޸dL[I6~lcI6"߷߮h_F3SI& iN3*cY|ɉ͘7Wd8;yMZ )CDpu:jW'$YInձ#U\VA]u,YjW~ |CQ OjG+F:|L29u_IU*^ܬ؞/{OUvVő.7 eJrs湂+e^6 :sx\`Pn,`iϋ8=c z/h'S>H$ī+%9^7rKbȎsKWKNeћ)Y7#(Df|6ܵ>j1^/^F?g%5! gj f7ez`endstream endobj 1419 0 obj<>/XObject<<>>>>/Annots 1017 0 R>>endobj 1420 0 obj<>stream xVn0+,E-M렇&]S]$;*,ʡڜN4 `h8ޣt;b?/9+׋bۅ m pǎk Zoj%^lSE/c:Y*zV"o0zmfcFM樳^>z|lԙ2.â0]xCQwaF[ ) L `N=ԃEJsv`h c]cAƺ!-x^J%00B%U}-Z"\ֹ̖͊e Ҽ8GO6mQ(aM2jm[}8~Z=aAwW)\^>˅~86G3>|,Bꏟ{ݏ:?9fՋb[^화~6~m9rX%-3UK&+NrM \>.R۪4"U^joM.0ߺjFE4|z/Z1PfMX8V/'Vr1jkYY2,bE%ߔoXyaGW4I0,hxHEV\l~4ywg 1߲qyԕ]<">MDŽoϲgn`'˻>/XObject<<>>>>/Annots 1036 0 R>>endobj 1422 0 obj<>stream xVM6+Ԃ37CCN!E [6E$Y$3S&3UVw?u߽|4 i<$/ן^0 &7‰e iMJHc|tYҍ"vn[#vtǞo]k9 kokuànT:R<O7t;+au:/4"BH M'%")( 0#3q@Gqn C rq0G:/2ғ:%phD) t[6L(@ȍl^2iƏ7 w"V{acY Q9L*;-b{69 a&]jf@OBR t* m>Fk"+Ǧ+Y+k"%%ť^"2/41fl3H -maÕOFyX9$0h{-lL~mϐ="H #WjHoN}seW\roHнd[u7)pd.G"X#vv.b$O\DSNP5ȰmmH2'XL+2߁?(*U=( ) VJ6J^t ďpOp98KXlY%X` ⺵g^\7M8ՔmWFen 7@4saęwBE:iE Ɇ2..I. DlG>)Iu()YP]7̖oÛ8ȡ|a{M;^YY4n nnnYљ_?=}+ڈ+ţ_ #jtݢ>dUuׯ͊Ѳ!r0yQ<xM2z{h] eE2a0s{6Ǒhyi"Dj} c.endstream endobj 1423 0 obj<>/XObject<<>>>>/Annots 1049 0 R>>endobj 1424 0 obj<>stream xTM0W̑6!UUՒVB&1I$ Uwl6BB hy"@䁿\ŕ׵EB Dž<࿉XxaaN $!N0F0q6TDAV5d׋L$ xHQ|E8(I| ׅ,Bzgr >uǠ[9- {qɞLC.GRY1{zu z#冉C3o&Q*[km{ }+4<=+ AKPI둚Y=AN;1`u_1ρ xa;&3@G k<:*v~CyۊvE6*=*΀Yj:?;,T iW[{@K@[SQYHg س`)R8/&LeZjIIK=W6վgʝ(bNҺӨヅ/g{iMZ~Z3 $^G Q6 MT6guS(pE/?nőY_?+endstream endobj 1425 0 obj<>/XObject<>>>/Annots 1052 0 R>>endobj 1426 0 obj<>stream xTMs0+ޑ ApsRBs(M{cȖ#}dCZv[}[/?LC&7><Sd Q3>Ix! QׯoK?%F3woֽv:4`&1 1cHsWه4/`<*A^*X Yߥ?zXDB[nO&Q_L9;E0 '$YeZ#ϙxyeӌphy n܁;Eggp `U5% 5\V z":p~aL=DX+AfށIaJ),'rw1"?AL@ˌ8YՖK~PTDGm}Se=>/XObject<<>>>>>>endobj 1428 0 obj<>stream xUn@}+F ki%>TqՇBzۮwzMB{g$mU3;93QhBM赠נ3&3=w ~4%8x)c`a<ЀZ(#x\$4K1ywyROVO%luCsʂcŬ "K 0DR2AB,Sr,1R6wT({GT* 7䖒ݠTqw :VH SV*2S f4N-ٌ*6LeGX t^uZ&v⣉QY{F3-u8|G=[|R83dHFGݝc]Mr JA֩x38RHnYF\LmjC<#A 0Dީ#4 iB۾?Jd˪sBDV%{G,ivR.__N`E9{kqK# sr **sE)5y5BU]?RͿZPS1Wsx!ip!4YYEoDR&bo~3NUdpWo<n]\@=gmd>oN gLw@kۄZ1X/=*tO6L\Pz>REҕ_XN-endstream endobj 1429 0 obj<>/XObject<<>>>>>>endobj 1430 0 obj<>stream xTr0;`b D3I&N䋐(%*R:J!3fى`ΐ rkiB]9:.(l tJf1d;?ϯ3+!i^Ϟ;C1)t4YpNI {hJ@XI 5Pj5vBIP(n%~qXjIKP[{RɐjM-sއR| S3 WJW΅U+}nf ࡚dP*\]jE FM`aG5 ir*Ѵvg귄bI+nq%m68]PoW[s6% ܫnٿֿx')8V\ɼEm\sAy+DJb(aIE <ۻr'0MhǫJXS#Ѣж#q9'퉸(`UT^7MH# G휵Ҍ=ZE^] Xf vJ|p TRmm 5а32B񍣄LԲ.'--a$$N&ÙW1*-ɡFQ.]$&4 -m ޜԅendstream endobj 1431 0 obj<>/XObject<>>>>>endobj 1432 0 obj<>stream x]TMs0W`-&39dL8"$jA$9ݕ% 3}oGQ?,k-@fYj7j5eSz?yZ,3L&kְAX| s,^a#s6bCAIwnȉ3[63LL Zx$UQzV E y. mTm8@h.icR*w)m{ >/XObject<<>>>>/Annots 1061 0 R>>endobj 1434 0 obj<>stream xWnF}WKi]-oN}pcEM]ew)EY^,3ESܝ9g_Φ4)f4:$u6ϒ ͖dA.SIg2b|?|pTNS-O _'v= tq9^^]&sZg1 z=m3R*^ :K#՞:‰MɕÖrXW;2%o=fT`go֟&t>#u6jP̑؏p<)#/.G66FQr QN=Ug |FwD)JTbLlGIR*ड TiSQZr)*VqP-um6^8 AlL:v]Қ}uS8 ůF%8uP<Uޫ1 sq & ,j% F: VLjAYۛa#^ץǎTqF@8D=9%ǔ _B$U+%h QуGj1~4P,ހ6Ϡ>IZ˳Kh h@SVfg!#m(SA[`逻hv>6[Є!qET44Pڹ-l݁]k$(۳BJ?w AEc}@Щۦ ESei( կo1LIC leR#h#U!J!}%P"!>n3GmӛxCTd"``2uFBE7'E2,v$Ik|+cz8F 0:pO_! ,{6Tµ0Šh^܋gTLWcF AH-'n42 !*##ZBkP~(JgK艠=VhEy ѴA~][v&="sR\b[fL)Z#-~Gc}q8s+FgTDB~.z@dh rn9$5bx&kQJʭ^t]o)[}qwIYJo:,Řlz j(k9 _E<=e5`!d#J@jw4iGOwW?oO^Cnn|94U}XƢFλ82m{tz]#e,8N\dɵԱVֶ1e(C3Ų5Q>}!2lXOaj-\8{ϪU%ĸr?HMB߃2*%j,p|5n1PӽX ٟgV7Bendstream endobj 1435 0 obj<>/XObject<<>>>>/Annots 1078 0 R>>endobj 1436 0 obj<>stream xVMs6WQH4$RiI벧(HHDB A%[e{2V5owm9xr̛,{>) /vџ&!)#;{Њnx;q );; r0ˑZa{1n E nwvATitHޮAaq&ik7_2HW 4H_. ʶ bQVXX}ۋ~.b5}TV6;ޫэ,Vc~[Յ3|>Mf7t^]Tz#WW{s}6i8pʐ9n}lU-j3 F mIwԖr]n -INDhcօ4el9V-E[f5ɖYlOc8|ɂcΘD^TՅN-vlB>/XObject<<>>>>>>endobj 1438 0 obj<>stream x}VMs6WљIevԇ6@ Do$z-]-h/vMmw5/8~>?ni݁yqw!|tsN;yT!8O_k߫dy[,7Yogb^,oZ >جڮVŸ08ΙWFsRlJ\Gȶ:h qȹJ9"/R9iK_ش tpƸE#>. RXJm@NB\;)3Bҩ@šʃhMDFy3|%nS]`FXQ5N5Åkiku O}|m+RM{g4I IxE)|-'KH.q؍RsU 5-F,5GqE\,lrrޔ^>9D{` `-"q#8$ RrVM VI3dW"ğ; :D-_U@Q(IIb(C/(CTMAJFƭGv6`ʔLaJꃖ2&I\8_Ջ,;q^KyըV3t60+It])iڬS_*罰 ğ`Ew; >"LH6k~:Vgm'__k6={E>V1ymӌiQkt(#webwsmrFg 1QߏFKR'clRAW`f}3FGZu!I9ȼQVf9ɡ.K 3KJ\@59!:3a$F 8Pi( F178BxA =)x:bCbI~ܬ}o! Xz.(>r.o9G!w 1QXtzQxڈ=zYA=~"uZX&i2c;iAGL+3춪 OۺSr֝=@qݽ M?MtMsx3J6u*sOeH eb] 1M,c,m 6id;:B -cC]$_?G=wy ]O}ʛe}zbwsXXLyItbh-.{ M68ቖ7ङ`GlX=?n$^\'byWlW,=)G_oƅ]s?g4tendstream endobj 1439 0 obj<>/XObject<>>>>>endobj 1440 0 obj<>stream xuUMo6W؊o6Ebf`AIV"~Σd9V #gmQߌ Znh&oH /OɚVbuO~?L$EV, ׻M/PƚԴ v3r8p䮺8[Nn( <.񬰒tު˒!P)O"Ԟ*kB<4ϖ`~(-({SňաDڔEܸOu8wQl[YC9cG%:DJ`HU袰t2nv҂eLf/(VQ/(p֕ R%ɷ FS\h"Ys.m-ږ7 *T\rrL#5Ou.ٮ8"YtzQU7u放YU)l+ )S3J#[K>>o_lU~3n'zzi֋$2(a-g6!AaWmk,or/R..]_?+FȘ´W*t!ew w.z~?ZGskDcojC|a 1}'3v]L[Bn6BS1>Nq:BC1)^pW4t1.5L~.Kƒ`maq6~pv!O#ʯ@Xx0Ά68؅ (AO;onҠU1ggǗT2lz˄x6Tǧ>n.3[k ψ Πo!ڴf?[$-/XE8o|QZVໃycV(em.#(nn/,٭6<(οdRہ6su&}{W*nvݯy endstream endobj 1441 0 obj<>/XObject<<>>>>/Annots 1091 0 R>>endobj 1442 0 obj<>stream xUn0+1}- m90hUȢKRIۯ )۲tACrޛqug>fy|HRE Y2ZϦ6F9&QRH% [(AK3W ڛH,istLs h"ؓ=" ,4,rڔ2@b71 6fdMy^lm [ƾ$XmK|(+/o4J;}Q~]&a yF, tn2H?ވF(X}eZC×;D,tC,.^` YfrCxYzV_9tz2`1$dAAi5TJE F8씬R\[TdoxSFj,]J@1 .JÇGY Qo c(%̠z םXϢv3endstream endobj 1443 0 obj<>/XObject<<>>>>/Annots 1112 0 R>>endobj 1444 0 obj<>stream xUK8 Wjvgbuo$*l)dο_RJlNФ>JWq)d[hU2]9K r Ksx|a*m/MƣhZ*!h㤄}Qm~Q@ǽ5H<w:8$´1+]uopΟj'b%i^ьr ~AGwnFz eoA>p>/XObject<<>>>>/Annots 1131 0 R>>endobj 1446 0 obj<>stream xVn6}ẈP.-ڮ %VKZ!ݽ$9@̜RsaAd1$M2qsȂ Ht$GFo_y=4"A@N8r Ar:{" x=4&A@N^$|dzhcSVeHxg.vEü<.Ͱ 7 bc>KRw,>3Cx!8-|7n1g$+7P'x@Сl9V@YBYm3 ATBCE `$sfpLC#h1Wk@/[a+yR <Z}W a%xxe2m5p&lh+ZqZULk2]*>fqK5k52gV%PCnMvʵB:_`wRX ;\@ыJы~ iĶ,>vVf@XX+0Jv=g%HC$[B|I-Ϗ dqyx c$ YaREB-[O G8zQ=mg߹OĎlKǗF%${_J\z;͎3aJJo2%Ԥj\d$Uul,/ŗ{%S<˯or8rkjnu |/O޸J7\s._+3A٪4 i _Y?Q?_'1~ O (f#U pC[3D$@qysSZ u4L1Q1Իy_PpaR@NXaq; uvR?L"|'~(ȍ[YgT[/V1nNUJ "GRXoS@GqpXD 8* jцI$*O gN>/XObject<<>>>>>>endobj 1448 0 obj<>stream x=0>ō8P[A ur0} `*L|{A/%`bZ!Pٖb RjHx'PUѺx_`>endobj 1450 0 obj<>endobj 1451 0 obj<>endobj 1452 0 obj<>endobj 1453 0 obj<>endobj 1454 0 obj<>endobj 1455 0 obj<>endobj 1456 0 obj<>endobj 1457 0 obj<>endobj 1458 0 obj<>endobj 1459 0 obj<>endobj 1460 0 obj<>endobj 1461 0 obj<>endobj 1462 0 obj<>endobj 1463 0 obj<>endobj 1464 0 obj<>endobj 1465 0 obj<>endobj 1466 0 obj<>endobj 1467 0 obj<>endobj 1468 0 obj<>endobj 1469 0 obj<>endobj 1470 0 obj<>endobj 1471 0 obj<>endobj 1472 0 obj<>endobj 1473 0 obj<>endobj 1474 0 obj<>endobj 1475 0 obj<>endobj 1476 0 obj<>endobj 1477 0 obj<>endobj 1478 0 obj<>endobj 1479 0 obj<>endobj 1480 0 obj<>endobj 1481 0 obj<>endobj 1482 0 obj<>endobj 1483 0 obj<>endobj 1484 0 obj<>endobj 1485 0 obj<>endobj 1486 0 obj<>endobj 1487 0 obj<>endobj 1488 0 obj<>endobj 1489 0 obj<>endobj 1490 0 obj<>endobj 1491 0 obj<>endobj 1492 0 obj<>endobj 1493 0 obj<>endobj 1494 0 obj<>endobj 1495 0 obj<>endobj 1496 0 obj<>endobj 1497 0 obj<>endobj 1498 0 obj<>endobj 1499 0 obj<>endobj 1500 0 obj<>endobj 1501 0 obj<>endobj 1502 0 obj<>endobj 1503 0 obj<>endobj 1504 0 obj<>endobj 1505 0 obj<>endobj 1506 0 obj<>endobj 1507 0 obj<>endobj 1508 0 obj<>1<>4<>9<>21<>34<>49<>54<>79<>91<>94<>97<>]>>>>endobj xref 0 1509 0000000000 65535 f 0000000015 00000 n 0000000371 00000 n 0000001723 00000 n 0000046348 00000 n 0000046528 00000 n 0000047567 00000 n 0000096922 00000 n 0000097107 00000 n 0000098146 00000 n 0000141413 00000 n 0000141604 00000 n 0000142644 00000 n 0000187522 00000 n 0000187710 00000 n 0000188750 00000 n 0000232333 00000 n 0000232520 00000 n 0000233563 00000 n 0000277870 00000 n 0000278061 00000 n 0000279101 00000 n 0000322611 00000 n 0000322805 00000 n 0000323845 00000 n 0000358739 00000 n 0000358925 00000 n 0000359967 00000 n 0000394790 00000 n 0000394981 00000 n 0000396022 00000 n 0000426411 00000 n 0000426594 00000 n 0000427638 00000 n 0000427772 00000 n 0000427911 00000 n 0000428055 00000 n 0000428195 00000 n 0000428334 00000 n 0000428475 00000 n 0000428620 00000 n 0000428758 00000 n 0000428901 00000 n 0000429021 00000 n 0000456863 00000 n 0000483912 00000 n 0000484136 00000 n 0000484415 00000 n 0000489835 00000 n 0000491632 00000 n 0000493317 00000 n 0000493816 00000 n 0000494337 00000 n 0000494836 00000 n 0000495357 00000 n 0000495729 00000 n 0000496191 00000 n 0000496987 00000 n 0000497960 00000 n 0000498507 00000 n 0000499493 00000 n 0000500045 00000 n 0000501264 00000 n 0000501644 00000 n 0000502390 00000 n 0000694918 00000 n 0000696323 00000 n 0000700117 00000 n 0000706230 00000 n 0000707307 00000 n 0000710272 00000 n 0000711687 00000 n 0000713489 00000 n 0000714404 00000 n 0000714440 00000 n 0000714525 00000 n 0000714565 00000 n 0000714650 00000 n 0000714752 00000 n 0000714855 00000 n 0000714958 00000 n 0000715061 00000 n 0000715164 00000 n 0000715266 00000 n 0000715369 00000 n 0000715472 00000 n 0000715575 00000 n 0000715678 00000 n 0000715781 00000 n 0000715883 00000 n 0000715986 00000 n 0000716089 00000 n 0000716192 00000 n 0000716295 00000 n 0000716398 00000 n 0000716501 00000 n 0000716604 00000 n 0000716706 00000 n 0000716809 00000 n 0000716912 00000 n 0000717015 00000 n 0000717119 00000 n 0000717223 00000 n 0000717431 00000 n 0000717534 00000 n 0000717638 00000 n 0000717742 00000 n 0000717846 00000 n 0000717949 00000 n 0000718053 00000 n 0000718157 00000 n 0000718261 00000 n 0000718365 00000 n 0000718469 00000 n 0000718573 00000 n 0000718676 00000 n 0000718780 00000 n 0000718884 00000 n 0000718988 00000 n 0000719092 00000 n 0000719196 00000 n 0000719299 00000 n 0000719403 00000 n 0000719507 00000 n 0000719611 00000 n 0000719715 00000 n 0000719819 00000 n 0000719922 00000 n 0000720026 00000 n 0000720130 00000 n 0000720355 00000 n 0000720458 00000 n 0000720562 00000 n 0000720666 00000 n 0000720770 00000 n 0000720874 00000 n 0000720978 00000 n 0000721043 00000 n 0000721123 00000 n 0000721210 00000 n 0000721255 00000 n 0000721342 00000 n 0000721375 00000 n 0000721449 00000 n 0000721536 00000 n 0000721640 00000 n 0000721673 00000 n 0000721755 00000 n 0000721842 00000 n 0000721917 00000 n 0000722004 00000 n 0000722037 00000 n 0000722094 00000 n 0000722181 00000 n 0000722206 00000 n 0000722308 00000 n 0000722333 00000 n 0000722426 00000 n 0000722513 00000 n 0000722609 00000 n 0000722696 00000 n 0000722784 00000 n 0000722871 00000 n 0000722968 00000 n 0000723055 00000 n 0000723155 00000 n 0000723242 00000 n 0000723330 00000 n 0000723417 00000 n 0000723505 00000 n 0000723592 00000 n 0000723665 00000 n 0000723764 00000 n 0000723851 00000 n 0000723953 00000 n 0000724040 00000 n 0000724137 00000 n 0000724224 00000 n 0000724316 00000 n 0000724403 00000 n 0000724499 00000 n 0000724586 00000 n 0000724674 00000 n 0000724761 00000 n 0000724826 00000 n 0000724914 00000 n 0000725001 00000 n 0000725092 00000 n 0000725179 00000 n 0000725276 00000 n 0000725363 00000 n 0000725452 00000 n 0000725539 00000 n 0000725628 00000 n 0000725715 00000 n 0000725807 00000 n 0000725894 00000 n 0000725990 00000 n 0000726077 00000 n 0000726172 00000 n 0000726259 00000 n 0000726354 00000 n 0000726441 00000 n 0000726539 00000 n 0000726626 00000 n 0000726722 00000 n 0000726809 00000 n 0000726914 00000 n 0000727006 00000 n 0000727093 00000 n 0000727188 00000 n 0000727275 00000 n 0000727372 00000 n 0000727459 00000 n 0000727555 00000 n 0000727642 00000 n 0000727691 00000 n 0000727787 00000 n 0000727874 00000 n 0000727974 00000 n 0000728061 00000 n 0000728094 00000 n 0000728190 00000 n 0000728277 00000 n 0000728379 00000 n 0000728466 00000 n 0000728572 00000 n 0000728659 00000 n 0000728755 00000 n 0000728842 00000 n 0000728891 00000 n 0000728942 00000 n 0000729029 00000 n 0000729079 00000 n 0000729166 00000 n 0000729212 00000 n 0000729299 00000 n 0000729344 00000 n 0000729431 00000 n 0000729483 00000 n 0000729570 00000 n 0000729621 00000 n 0000729708 00000 n 0000729755 00000 n 0000729842 00000 n 0000729888 00000 n 0000729975 00000 n 0000730028 00000 n 0000730115 00000 n 0000730167 00000 n 0000730254 00000 n 0000730351 00000 n 0000730399 00000 n 0000730486 00000 n 0000730533 00000 n 0000730620 00000 n 0000730667 00000 n 0000730754 00000 n 0000730801 00000 n 0000730888 00000 n 0000730933 00000 n 0000731020 00000 n 0000731065 00000 n 0000731152 00000 n 0000731217 00000 n 0000731307 00000 n 0000731394 00000 n 0000731487 00000 n 0000731574 00000 n 0000731672 00000 n 0000731759 00000 n 0000731800 00000 n 0000731886 00000 n 0000731973 00000 n 0000732059 00000 n 0000732146 00000 n 0000732235 00000 n 0000732322 00000 n 0000732420 00000 n 0000732507 00000 n 0000732556 00000 n 0000732642 00000 n 0000732729 00000 n 0000732815 00000 n 0000732902 00000 n 0000732991 00000 n 0000733078 00000 n 0000733176 00000 n 0000733263 00000 n 0000733312 00000 n 0000733398 00000 n 0000733485 00000 n 0000733571 00000 n 0000733658 00000 n 0000733747 00000 n 0000733834 00000 n 0000733931 00000 n 0000734018 00000 n 0000734109 00000 n 0000734196 00000 n 0000734287 00000 n 0000734374 00000 n 0000734468 00000 n 0000734555 00000 n 0000734653 00000 n 0000734740 00000 n 0000734821 00000 n 0000734911 00000 n 0000734998 00000 n 0000735088 00000 n 0000735175 00000 n 0000735268 00000 n 0000735355 00000 n 0000735453 00000 n 0000735540 00000 n 0000735589 00000 n 0000735678 00000 n 0000735765 00000 n 0000735854 00000 n 0000735941 00000 n 0000736033 00000 n 0000736120 00000 n 0000736218 00000 n 0000736305 00000 n 0000736354 00000 n 0000736449 00000 n 0000736536 00000 n 0000736634 00000 n 0000736721 00000 n 0000736819 00000 n 0000736906 00000 n 0000736947 00000 n 0000737042 00000 n 0000737129 00000 n 0000737227 00000 n 0000737314 00000 n 0000737412 00000 n 0000737499 00000 n 0000737540 00000 n 0000737635 00000 n 0000737722 00000 n 0000737820 00000 n 0000737907 00000 n 0000738005 00000 n 0000738092 00000 n 0000738133 00000 n 0000738222 00000 n 0000738309 00000 n 0000738398 00000 n 0000738485 00000 n 0000738574 00000 n 0000738661 00000 n 0000738751 00000 n 0000738838 00000 n 0000738926 00000 n 0000739013 00000 n 0000739101 00000 n 0000739188 00000 n 0000739276 00000 n 0000739363 00000 n 0000739452 00000 n 0000739539 00000 n 0000739630 00000 n 0000739717 00000 n 0000739806 00000 n 0000739897 00000 n 0000739984 00000 n 0000740075 00000 n 0000740162 00000 n 0000740254 00000 n 0000740341 00000 n 0000740439 00000 n 0000740526 00000 n 0000740624 00000 n 0000740711 00000 n 0000740809 00000 n 0000740896 00000 n 0000740988 00000 n 0000741075 00000 n 0000741148 00000 n 0000741243 00000 n 0000741330 00000 n 0000741430 00000 n 0000741517 00000 n 0000741614 00000 n 0000741701 00000 n 0000741742 00000 n 0000741838 00000 n 0000741925 00000 n 0000742026 00000 n 0000742113 00000 n 0000742210 00000 n 0000742297 00000 n 0000742384 00000 n 0000742471 00000 n 0000742560 00000 n 0000742647 00000 n 0000742737 00000 n 0000742824 00000 n 0000742916 00000 n 0000743003 00000 n 0000743100 00000 n 0000743187 00000 n 0000743284 00000 n 0000743371 00000 n 0000743460 00000 n 0000743553 00000 n 0000743640 00000 n 0000743736 00000 n 0000743823 00000 n 0000743920 00000 n 0000744007 00000 n 0000744095 00000 n 0000744182 00000 n 0000744273 00000 n 0000744360 00000 n 0000744457 00000 n 0000744544 00000 n 0000744609 00000 n 0000744696 00000 n 0000744783 00000 n 0000744808 00000 n 0000744898 00000 n 0000744985 00000 n 0000745082 00000 n 0000745169 00000 n 0000745202 00000 n 0000745289 00000 n 0000745376 00000 n 0000745466 00000 n 0000745553 00000 n 0000745651 00000 n 0000745738 00000 n 0000745825 00000 n 0000745912 00000 n 0000746002 00000 n 0000746089 00000 n 0000746146 00000 n 0000746244 00000 n 0000746331 00000 n 0000746419 00000 n 0000746506 00000 n 0000746597 00000 n 0000746684 00000 n 0000746782 00000 n 0000746869 00000 n 0000746956 00000 n 0000747043 00000 n 0000747133 00000 n 0000747220 00000 n 0000747318 00000 n 0000747405 00000 n 0000747492 00000 n 0000747579 00000 n 0000747669 00000 n 0000747756 00000 n 0000747854 00000 n 0000747941 00000 n 0000748037 00000 n 0000748124 00000 n 0000748223 00000 n 0000748310 00000 n 0000748423 00000 n 0000748521 00000 n 0000748608 00000 n 0000748707 00000 n 0000748794 00000 n 0000748897 00000 n 0000748984 00000 n 0000749082 00000 n 0000749169 00000 n 0000749218 00000 n 0000749311 00000 n 0000749398 00000 n 0000749494 00000 n 0000749581 00000 n 0000749679 00000 n 0000749766 00000 n 0000749807 00000 n 0000749900 00000 n 0000749987 00000 n 0000750080 00000 n 0000750167 00000 n 0000750263 00000 n 0000750350 00000 n 0000750448 00000 n 0000750535 00000 n 0000750629 00000 n 0000750716 00000 n 0000750810 00000 n 0000750897 00000 n 0000750994 00000 n 0000751081 00000 n 0000751179 00000 n 0000751266 00000 n 0000751359 00000 n 0000751446 00000 n 0000751539 00000 n 0000751626 00000 n 0000751722 00000 n 0000751809 00000 n 0000751907 00000 n 0000751994 00000 n 0000752107 00000 n 0000752193 00000 n 0000752280 00000 n 0000752369 00000 n 0000752456 00000 n 0000752554 00000 n 0000752641 00000 n 0000752682 00000 n 0000752770 00000 n 0000752857 00000 n 0000752948 00000 n 0000753035 00000 n 0000753133 00000 n 0000753220 00000 n 0000753261 00000 n 0000753348 00000 n 0000753435 00000 n 0000753522 00000 n 0000753609 00000 n 0000753698 00000 n 0000753785 00000 n 0000753874 00000 n 0000753961 00000 n 0000754050 00000 n 0000754137 00000 n 0000754235 00000 n 0000754322 00000 n 0000754420 00000 n 0000754507 00000 n 0000754605 00000 n 0000754692 00000 n 0000754785 00000 n 0000754872 00000 n 0000754968 00000 n 0000755055 00000 n 0000755153 00000 n 0000755240 00000 n 0000755332 00000 n 0000755419 00000 n 0000755514 00000 n 0000755601 00000 n 0000755699 00000 n 0000755786 00000 n 0000755915 00000 n 0000756007 00000 n 0000756094 00000 n 0000756186 00000 n 0000756273 00000 n 0000756368 00000 n 0000756455 00000 n 0000756553 00000 n 0000756640 00000 n 0000756689 00000 n 0000756784 00000 n 0000756871 00000 n 0000756969 00000 n 0000757056 00000 n 0000757154 00000 n 0000757241 00000 n 0000757282 00000 n 0000757375 00000 n 0000757462 00000 n 0000757555 00000 n 0000757642 00000 n 0000757735 00000 n 0000757822 00000 n 0000757915 00000 n 0000758002 00000 n 0000758097 00000 n 0000758184 00000 n 0000758279 00000 n 0000758366 00000 n 0000758461 00000 n 0000758548 00000 n 0000758646 00000 n 0000758733 00000 n 0000758831 00000 n 0000758918 00000 n 0000759016 00000 n 0000759103 00000 n 0000759200 00000 n 0000759292 00000 n 0000759379 00000 n 0000759474 00000 n 0000759561 00000 n 0000759659 00000 n 0000759746 00000 n 0000759844 00000 n 0000759931 00000 n 0000760032 00000 n 0000760119 00000 n 0000760217 00000 n 0000760304 00000 n 0000760399 00000 n 0000760486 00000 n 0000760584 00000 n 0000760671 00000 n 0000760769 00000 n 0000760856 00000 n 0000760957 00000 n 0000761044 00000 n 0000761148 00000 n 0000761235 00000 n 0000761340 00000 n 0000761438 00000 n 0000761525 00000 n 0000761613 00000 n 0000761700 00000 n 0000761791 00000 n 0000761878 00000 n 0000761976 00000 n 0000762063 00000 n 0000762157 00000 n 0000762244 00000 n 0000762341 00000 n 0000762428 00000 n 0000762526 00000 n 0000762613 00000 n 0000762709 00000 n 0000762796 00000 n 0000762895 00000 n 0000762982 00000 n 0000763080 00000 n 0000763167 00000 n 0000763269 00000 n 0000763356 00000 n 0000763461 00000 n 0000763548 00000 n 0000763646 00000 n 0000763733 00000 n 0000763854 00000 n 0000763948 00000 n 0000764035 00000 n 0000764132 00000 n 0000764219 00000 n 0000764317 00000 n 0000764404 00000 n 0000764504 00000 n 0000764591 00000 n 0000764694 00000 n 0000764781 00000 n 0000764879 00000 n 0000764966 00000 n 0000765031 00000 n 0000765126 00000 n 0000765213 00000 n 0000765311 00000 n 0000765398 00000 n 0000765496 00000 n 0000765583 00000 n 0000765684 00000 n 0000765771 00000 n 0000765875 00000 n 0000765962 00000 n 0000766060 00000 n 0000766147 00000 n 0000766212 00000 n 0000766307 00000 n 0000766394 00000 n 0000766492 00000 n 0000766579 00000 n 0000766677 00000 n 0000766764 00000 n 0000766865 00000 n 0000766952 00000 n 0000767056 00000 n 0000767143 00000 n 0000767241 00000 n 0000767328 00000 n 0000767393 00000 n 0000767490 00000 n 0000767577 00000 n 0000767677 00000 n 0000767764 00000 n 0000767862 00000 n 0000767949 00000 n 0000768044 00000 n 0000768131 00000 n 0000768229 00000 n 0000768316 00000 n 0000768414 00000 n 0000768501 00000 n 0000768597 00000 n 0000768684 00000 n 0000768783 00000 n 0000768870 00000 n 0000768968 00000 n 0000769055 00000 n 0000769150 00000 n 0000769237 00000 n 0000769335 00000 n 0000769422 00000 n 0000769520 00000 n 0000769607 00000 n 0000769698 00000 n 0000769785 00000 n 0000769879 00000 n 0000769966 00000 n 0000770064 00000 n 0000770151 00000 n 0000770288 00000 n 0000770381 00000 n 0000770468 00000 n 0000770564 00000 n 0000770651 00000 n 0000770750 00000 n 0000770837 00000 n 0000770930 00000 n 0000771017 00000 n 0000771113 00000 n 0000771200 00000 n 0000771299 00000 n 0000771386 00000 n 0000771474 00000 n 0000771561 00000 n 0000771652 00000 n 0000771739 00000 n 0000771838 00000 n 0000771925 00000 n 0000772021 00000 n 0000772108 00000 n 0000772207 00000 n 0000772294 00000 n 0000772393 00000 n 0000772480 00000 n 0000772569 00000 n 0000772656 00000 n 0000772748 00000 n 0000772835 00000 n 0000772934 00000 n 0000773021 00000 n 0000773158 00000 n 0000773253 00000 n 0000773340 00000 n 0000773438 00000 n 0000773525 00000 n 0000773624 00000 n 0000773711 00000 n 0000773802 00000 n 0000773889 00000 n 0000773983 00000 n 0000774070 00000 n 0000774168 00000 n 0000774255 00000 n 0000774347 00000 n 0000774434 00000 n 0000774529 00000 n 0000774616 00000 n 0000774714 00000 n 0000774801 00000 n 0000774898 00000 n 0000774985 00000 n 0000775085 00000 n 0000775172 00000 n 0000775266 00000 n 0000775353 00000 n 0000775466 00000 n 0000775564 00000 n 0000775651 00000 n 0000775749 00000 n 0000775836 00000 n 0000775937 00000 n 0000776024 00000 n 0000776122 00000 n 0000776209 00000 n 0000776283 00000 n 0000776369 00000 n 0000776426 00000 n 0000776514 00000 n 0000776601 00000 n 0000776692 00000 n 0000776779 00000 n 0000776877 00000 n 0000776964 00000 n 0000777056 00000 n 0000777143 00000 n 0000777238 00000 n 0000777325 00000 n 0000777423 00000 n 0000777510 00000 n 0000777601 00000 n 0000777688 00000 n 0000777782 00000 n 0000777869 00000 n 0000777967 00000 n 0000778054 00000 n 0000778147 00000 n 0000778234 00000 n 0000778330 00000 n 0000778417 00000 n 0000778515 00000 n 0000778602 00000 n 0000778715 00000 n 0000778770 00000 n 0000778856 00000 n 0000778943 00000 n 0000779030 00000 n 0000779120 00000 n 0000779207 00000 n 0000779305 00000 n 0000779392 00000 n 0000779485 00000 n 0000779572 00000 n 0000779668 00000 n 0000779755 00000 n 0000779853 00000 n 0000779940 00000 n 0000780013 00000 n 0000780104 00000 n 0000780191 00000 n 0000780285 00000 n 0000780372 00000 n 0000780470 00000 n 0000780557 00000 n 0000780621 00000 n 0000780707 00000 n 0000780758 00000 n 0000780845 00000 n 0000780896 00000 n 0000780982 00000 n 0000781060 00000 n 0000781146 00000 n 0000781217 00000 n 0000781303 00000 n 0000781355 00000 n 0000781442 00000 n 0000781494 00000 n 0000781580 00000 n 0000781660 00000 n 0000781747 00000 n 0000781852 00000 n 0000781944 00000 n 0000782031 00000 n 0000782126 00000 n 0000782213 00000 n 0000782310 00000 n 0000782397 00000 n 0000782438 00000 n 0000782527 00000 n 0000782614 00000 n 0000782703 00000 n 0000782790 00000 n 0000782882 00000 n 0000782969 00000 n 0000783067 00000 n 0000783154 00000 n 0000783250 00000 n 0000783337 00000 n 0000783433 00000 n 0000783520 00000 n 0000783619 00000 n 0000783706 00000 n 0000783804 00000 n 0000783891 00000 n 0000783972 00000 n 0000784065 00000 n 0000784152 00000 n 0000784245 00000 n 0000784332 00000 n 0000784428 00000 n 0000784515 00000 n 0000784613 00000 n 0000784700 00000 n 0000784789 00000 n 0000784876 00000 n 0000784965 00000 n 0000785052 00000 n 0000785144 00000 n 0000785231 00000 n 0000785329 00000 n 0000785416 00000 n 0000785506 00000 n 0000785593 00000 n 0000785683 00000 n 0000785770 00000 n 0000785863 00000 n 0000785950 00000 n 0000786048 00000 n 0000786135 00000 n 0000786248 00000 n 0000786345 00000 n 0000786432 00000 n 0000786529 00000 n 0000786616 00000 n 0000786716 00000 n 0000786803 00000 n 0000786901 00000 n 0000786988 00000 n 0000787084 00000 n 0000787171 00000 n 0000787270 00000 n 0000787357 00000 n 0000787455 00000 n 0000787542 00000 n 0000787638 00000 n 0000787725 00000 n 0000787825 00000 n 0000787912 00000 n 0000788010 00000 n 0000788097 00000 n 0000788194 00000 n 0000788283 00000 n 0000788370 00000 n 0000788462 00000 n 0000788549 00000 n 0000788646 00000 n 0000788733 00000 n 0000788822 00000 n 0000788909 00000 n 0000789001 00000 n 0000789088 00000 n 0000789185 00000 n 0000789272 00000 n 0000789368 00000 n 0000789455 00000 n 0000789554 00000 n 0000789641 00000 n 0000789739 00000 n 0000789826 00000 n 0000789915 00000 n 0000790012 00000 n 0000790099 00000 n 0000790199 00000 n 0000790286 00000 n 0000790383 00000 n 0000790470 00000 n 0000790567 00000 n 0000790654 00000 n 0000790754 00000 n 0000790841 00000 n 0000790938 00000 n 0000791025 00000 n 0000791090 00000 n 0000791187 00000 n 0000791274 00000 n 0000791374 00000 n 0000791461 00000 n 0000791558 00000 n 0000791645 00000 n 0000791742 00000 n 0000791829 00000 n 0000791929 00000 n 0000792016 00000 n 0000792113 00000 n 0000792200 00000 n 0000792265 00000 n 0000792347 00000 n 0000792434 00000 n 0000792531 00000 n 0000792618 00000 n 0000792718 00000 n 0000792805 00000 n 0000792902 00000 n 0000792989 00000 n 0000793038 00000 n 0000793133 00000 n 0000793220 00000 n 0000793318 00000 n 0000793405 00000 n 0000793502 00000 n 0000793589 00000 n 0000793671 00000 n 0000793757 00000 n 0000793847 00000 n 0000793934 00000 n 0000794027 00000 n 0000794114 00000 n 0000794211 00000 n 0000794298 00000 n 0000794395 00000 n 0000794482 00000 n 0000794582 00000 n 0000794669 00000 n 0000794766 00000 n 0000794853 00000 n 0000794950 00000 n 0000795039 00000 n 0000795126 00000 n 0000795218 00000 n 0000795305 00000 n 0000795401 00000 n 0000795488 00000 n 0000795575 00000 n 0000795662 00000 n 0000795749 00000 n 0000795836 00000 n 0000795926 00000 n 0000796013 00000 n 0000796103 00000 n 0000796190 00000 n 0000796287 00000 n 0000796374 00000 n 0000796471 00000 n 0000796558 00000 n 0000796647 00000 n 0000796737 00000 n 0000796824 00000 n 0000796914 00000 n 0000797002 00000 n 0000797096 00000 n 0000797185 00000 n 0000797284 00000 n 0000797373 00000 n 0000797469 00000 n 0000797558 00000 n 0000797657 00000 n 0000797746 00000 n 0000797845 00000 n 0000797934 00000 n 0000798023 00000 n 0000798112 00000 n 0000798204 00000 n 0000798293 00000 n 0000798392 00000 n 0000798481 00000 n 0000798588 00000 n 0000798683 00000 n 0000798772 00000 n 0000798870 00000 n 0000798959 00000 n 0000799058 00000 n 0000799147 00000 n 0000799242 00000 n 0000799331 00000 n 0000799429 00000 n 0000799518 00000 n 0000799616 00000 n 0000799705 00000 n 0000799807 00000 n 0000799896 00000 n 0000800001 00000 n 0000800090 00000 n 0000800189 00000 n 0000800278 00000 n 0000800377 00000 n 0000800470 00000 n 0000800559 00000 n 0000800655 00000 n 0000800744 00000 n 0000800842 00000 n 0000800931 00000 n 0000801027 00000 n 0000801116 00000 n 0000801215 00000 n 0000801304 00000 n 0000801403 00000 n 0000801492 00000 n 0000801564 00000 n 0000801648 00000 n 0000801736 00000 n 0000801763 00000 n 0000801864 00000 n 0000801953 00000 n 0000802057 00000 n 0000802146 00000 n 0000802245 00000 n 0000802334 00000 n 0000802432 00000 n 0000802521 00000 n 0000802575 00000 n 0000802676 00000 n 0000802765 00000 n 0000802864 00000 n 0000802953 00000 n 0000803054 00000 n 0000803143 00000 n 0000803247 00000 n 0000803336 00000 n 0000803435 00000 n 0000803524 00000 n 0000803619 00000 n 0000803708 00000 n 0000803806 00000 n 0000803895 00000 n 0000803994 00000 n 0000804083 00000 n 0000804173 00000 n 0000804270 00000 n 0000804359 00000 n 0000804459 00000 n 0000804548 00000 n 0000804642 00000 n 0000804731 00000 n 0000804828 00000 n 0000804917 00000 n 0000805019 00000 n 0000805108 00000 n 0000805213 00000 n 0000805302 00000 n 0000805374 00000 n 0000805471 00000 n 0000805560 00000 n 0000805660 00000 n 0000805749 00000 n 0000805846 00000 n 0000805935 00000 n 0000806035 00000 n 0000806124 00000 n 0000806226 00000 n 0000806315 00000 n 0000806420 00000 n 0000806509 00000 n 0000806610 00000 n 0000806699 00000 n 0000806803 00000 n 0000806892 00000 n 0000806992 00000 n 0000807081 00000 n 0000807184 00000 n 0000807273 00000 n 0000807381 00000 n 0000807476 00000 n 0000807565 00000 n 0000807662 00000 n 0000807751 00000 n 0000807846 00000 n 0000807935 00000 n 0000808030 00000 n 0000808119 00000 n 0000808214 00000 n 0000808303 00000 n 0000808401 00000 n 0000808490 00000 n 0000808588 00000 n 0000808677 00000 n 0000808775 00000 n 0000808864 00000 n 0000808962 00000 n 0000809051 00000 n 0000809150 00000 n 0000809186 00000 n 0000809222 00000 n 0000811137 00000 n 0000811182 00000 n 0000811227 00000 n 0000811272 00000 n 0000811317 00000 n 0000811362 00000 n 0000811407 00000 n 0000811452 00000 n 0000811497 00000 n 0000811542 00000 n 0000811587 00000 n 0000811632 00000 n 0000811677 00000 n 0000811722 00000 n 0000811767 00000 n 0000811812 00000 n 0000811857 00000 n 0000811902 00000 n 0000811947 00000 n 0000811992 00000 n 0000812037 00000 n 0000812082 00000 n 0000812127 00000 n 0000812172 00000 n 0000812217 00000 n 0000812262 00000 n 0000812307 00000 n 0000812352 00000 n 0000812397 00000 n 0000812442 00000 n 0000812487 00000 n 0000812532 00000 n 0000812577 00000 n 0000812622 00000 n 0000812667 00000 n 0000812712 00000 n 0000812757 00000 n 0000812802 00000 n 0000812847 00000 n 0000812892 00000 n 0000812937 00000 n 0000812982 00000 n 0000813027 00000 n 0000813072 00000 n 0000813117 00000 n 0000813162 00000 n 0000813207 00000 n 0000813252 00000 n 0000813297 00000 n 0000813342 00000 n 0000813387 00000 n 0000813432 00000 n 0000813477 00000 n 0000813522 00000 n 0000813567 00000 n 0000813612 00000 n 0000813657 00000 n 0000813702 00000 n 0000813747 00000 n 0000813792 00000 n 0000813837 00000 n 0000813882 00000 n 0000813927 00000 n 0000813972 00000 n 0000814017 00000 n 0000814062 00000 n 0000814107 00000 n 0000814152 00000 n 0000814197 00000 n 0000814242 00000 n 0000814287 00000 n 0000814332 00000 n 0000814377 00000 n 0000814422 00000 n 0000814467 00000 n 0000814512 00000 n 0000814557 00000 n 0000814602 00000 n 0000814647 00000 n 0000814692 00000 n 0000814737 00000 n 0000814782 00000 n 0000814827 00000 n 0000814872 00000 n 0000814917 00000 n 0000814962 00000 n 0000815007 00000 n 0000815052 00000 n 0000815097 00000 n 0000815142 00000 n 0000815187 00000 n 0000815232 00000 n 0000815277 00000 n 0000815322 00000 n 0000815367 00000 n 0000815412 00000 n 0000815457 00000 n 0000815502 00000 n 0000815547 00000 n 0000815592 00000 n 0000815637 00000 n 0000815682 00000 n 0000815727 00000 n 0000815772 00000 n 0000815817 00000 n 0000815862 00000 n 0000815907 00000 n 0000815952 00000 n 0000816928 00000 n 0000817131 00000 n 0000817413 00000 n 0000817609 00000 n 0000819771 00000 n 0000819967 00000 n 0000822130 00000 n 0000822326 00000 n 0000823017 00000 n 0000823188 00000 n 0000824556 00000 n 0000824758 00000 n 0000826381 00000 n 0000826604 00000 n 0000827544 00000 n 0000827736 00000 n 0000828808 00000 n 0000828980 00000 n 0000829519 00000 n 0000829736 00000 n 0000831368 00000 n 0000831539 00000 n 0000833397 00000 n 0000833603 00000 n 0000835614 00000 n 0000835831 00000 n 0000837413 00000 n 0000837640 00000 n 0000838943 00000 n 0000839170 00000 n 0000840307 00000 n 0000840509 00000 n 0000841830 00000 n 0000842011 00000 n 0000843199 00000 n 0000843390 00000 n 0000844736 00000 n 0000844938 00000 n 0000846295 00000 n 0000846497 00000 n 0000847591 00000 n 0000847772 00000 n 0000848471 00000 n 0000848663 00000 n 0000850078 00000 n 0000850259 00000 n 0000851773 00000 n 0000851975 00000 n 0000853621 00000 n 0000853837 00000 n 0000855180 00000 n 0000855406 00000 n 0000856614 00000 n 0000856820 00000 n 0000857824 00000 n 0000858062 00000 n 0000859088 00000 n 0000859326 00000 n 0000860579 00000 n 0000860807 00000 n 0000861788 00000 n 0000861991 00000 n 0000863223 00000 n 0000863409 00000 n 0000864502 00000 n 0000864708 00000 n 0000865820 00000 n 0000866016 00000 n 0000866557 00000 n 0000866773 00000 n 0000868290 00000 n 0000868496 00000 n 0000869825 00000 n 0000870051 00000 n 0000871373 00000 n 0000871589 00000 n 0000872591 00000 n 0000872797 00000 n 0000873980 00000 n 0000874203 00000 n 0000874920 00000 n 0000875123 00000 n 0000875885 00000 n 0000876134 00000 n 0000877069 00000 n 0000877307 00000 n 0000878153 00000 n 0000878334 00000 n 0000879186 00000 n 0000879424 00000 n 0000880357 00000 n 0000880570 00000 n 0000881037 00000 n 0000881259 00000 n 0000883459 00000 n 0000883665 00000 n 0000884661 00000 n 0000884857 00000 n 0000885435 00000 n 0000885651 00000 n 0000886707 00000 n 0000886913 00000 n 0000887893 00000 n 0000888109 00000 n 0000888946 00000 n 0000889162 00000 n 0000890106 00000 n 0000890302 00000 n 0000890715 00000 n 0000890942 00000 n 0000892088 00000 n 0000892294 00000 n 0000893328 00000 n 0000893567 00000 n 0000894377 00000 n 0000894583 00000 n 0000896071 00000 n 0000896277 00000 n 0000897402 00000 n 0000897615 00000 n 0000898400 00000 n 0000898648 00000 n 0000899560 00000 n 0000899766 00000 n 0000901011 00000 n 0000901217 00000 n 0000902286 00000 n 0000902502 00000 n 0000903658 00000 n 0000903874 00000 n 0000904843 00000 n 0000905039 00000 n 0000905835 00000 n 0000906041 00000 n 0000907117 00000 n 0000907303 00000 n 0000908324 00000 n 0000908510 00000 n 0000909431 00000 n 0000909617 00000 n 0000910464 00000 n 0000910650 00000 n 0000911545 00000 n 0000911731 00000 n 0000912581 00000 n 0000912767 00000 n 0000913711 00000 n 0000913897 00000 n 0000914972 00000 n 0000915168 00000 n 0000916274 00000 n 0000916480 00000 n 0000917711 00000 n 0000917927 00000 n 0000919121 00000 n 0000919327 00000 n 0000921190 00000 n 0000921386 00000 n 0000922232 00000 n 0000922438 00000 n 0000923549 00000 n 0000923745 00000 n 0000924837 00000 n 0000925033 00000 n 0000926429 00000 n 0000926645 00000 n 0000927751 00000 n 0000927989 00000 n 0000928753 00000 n 0000928959 00000 n 0000929816 00000 n 0000930054 00000 n 0000930886 00000 n 0000931092 00000 n 0000932182 00000 n 0000932408 00000 n 0000933584 00000 n 0000933791 00000 n 0000934734 00000 n 0000934942 00000 n 0000936057 00000 n 0000936264 00000 n 0000936937 00000 n 0000937166 00000 n 0000937949 00000 n 0000938140 00000 n 0000939009 00000 n 0000939201 00000 n 0000939993 00000 n 0000940206 00000 n 0000940958 00000 n 0000941175 00000 n 0000942752 00000 n 0000942949 00000 n 0000943906 00000 n 0000944087 00000 n 0000945480 00000 n 0000945683 00000 n 0000946689 00000 n 0000946886 00000 n 0000947751 00000 n 0000947948 00000 n 0000948848 00000 n 0000949045 00000 n 0000950115 00000 n 0000950276 00000 n 0000950505 00000 n 0000950564 00000 n 0000950667 00000 n 0000950821 00000 n 0000950944 00000 n 0000951054 00000 n 0000951176 00000 n 0000951289 00000 n 0000951472 00000 n 0000951619 00000 n 0000951731 00000 n 0000951855 00000 n 0000951970 00000 n 0000952079 00000 n 0000952250 00000 n 0000952379 00000 n 0000952486 00000 n 0000952607 00000 n 0000952722 00000 n 0000952845 00000 n 0000952969 00000 n 0000953076 00000 n 0000953252 00000 n 0000953374 00000 n 0000953498 00000 n 0000953616 00000 n 0000953739 00000 n 0000953852 00000 n 0000954022 00000 n 0000954151 00000 n 0000954247 00000 n 0000954342 00000 n 0000954510 00000 n 0000954646 00000 n 0000954750 00000 n 0000954868 00000 n 0000954997 00000 n 0000955144 00000 n 0000955282 00000 n 0000955441 00000 n 0000955575 00000 n 0000955686 00000 n 0000955809 00000 n 0000955968 00000 n 0000956064 00000 n 0000956239 00000 n 0000956362 00000 n 0000956465 00000 n 0000956601 00000 n 0000956717 00000 n 0000956821 00000 n 0000956975 00000 n 0000957098 00000 n 0000957200 00000 n 0000957340 00000 n 0000957463 00000 n 0000957573 00000 n 0000957699 00000 n 0000957821 00000 n 0000957944 00000 n trailer <]>> startxref 958347 %%EOF ga-5-3/global/X/0000750005473000001440000000000012275260551012247 5ustar d3n000usersga-5-3/global/X/xregion_dialog.c0000640005473000001440000000420511300316052015371 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* This module contains functions for creating and destroying a simple dialog box. */ #include "xregion.h" void dialog_box(char *dlg_str) { Display *disp; disp = XtDisplay(overview_shell); /* Create top level shell widget */ dlg_top = XtVaAppCreateShell("xregion","XRegion", applicationShellWidgetClass,disp, NULL); /* Create form widget to hold everything else */ dlg_form = XtVaCreateManagedWidget("dialogform", formWidgetClass, dlg_top, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, NULL); dlg_label = XtVaCreateManagedWidget("dialoglabel", labelWidgetClass, dlg_form, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, XtNlabel, dlg_str, XtNvertDistance, 5, XtNhorizDistance, 5, XtNborderWidth, 0, NULL); dlg_btn = XtVaCreateManagedWidget("dialogbutton", commandWidgetClass, dlg_form, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, XtNlabel, "Dismiss", XtNfromVert, dlg_label, XtNvertDistance, 5, XtNhorizDistance, 30, NULL); XtAddCallback(dlg_btn, XtNcallback, dismiss_dialog, NULL); XtRealizeWidget(dlg_top); } /* JJU: void dismiss_dialog(Widget w, caddr_t data, XEvent *event) */ void dismiss_dialog(Widget w, XtPointer data, XtPointer event) { /* remove dialog box */ XtDestroyWidget(dlg_btn); XtDestroyWidget(dlg_label); XtDestroyWidget(dlg_form); XtDestroyWidget(dlg_top); } ga-5-3/global/X/xregion_view.c0000640005473000001440000003237011327661610015124 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDLIB_H # include #endif #include "xregion.h" void create_main_window() { Display *disp; int screen; disp = XtDisplay(overview_shell); screen = DefaultScreen(disp); /* Create top level shell widget */ top_level_widget = XtVaAppCreateShell("xregion","XRegion", applicationShellWidgetClass,disp, NULL); /* Create form widget to hold everything else */ box_widget = XtVaCreateManagedWidget("box", formWidgetClass, top_level_widget, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, NULL); /* Create the label to hold the title */ (void) strcpy(title, "Array Access Display"); title_widget = XtVaCreateManagedWidget("title", labelWidgetClass, box_widget, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, XtNx, 10, XtNy, 5, XtNwidth, 300, XtNlabel, title, XtNborderWidth, 0, NULL); coord_widget = XtVaCreateManagedWidget("coords", labelWidgetClass, box_widget, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, XtNy, 5, XtNhorizDistance, 10, XtNfromHoriz, title_widget, XtNjustify, XtJustifyLeft, XtNlabel, "Coordinates x, y: ", XtNborderWidth, 0, NULL); /* Create the Quit command button */ quit_button = XtVaCreateManagedWidget("quit", commandWidgetClass, box_widget, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, XtNx, 10, XtNvertDistance, 15, XtNfromVert, title_widget, XtNlabel, "Quit", XtNshapeStyle, XmuShapeOval, NULL); XtAddCallback(quit_button, XtNcallback, Quit, NULL); /* Create the Start/Stop command button */ start_stop_button = XtVaCreateManagedWidget("start/stop", commandWidgetClass, box_widget, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, XtNvertDistance, 15, XtNfromVert, title_widget, XtNhorizDistance, 10, XtNfromHoriz, quit_button, XtNlabel, "Start", XtNshapeStyle, XmuShapeOval, NULL); XtAddCallback(start_stop_button, XtNcallback, StartStop, NULL); /* Create the scroll bar for the interval */ interval_label = XtVaCreateManagedWidget("interval_label", labelWidgetClass, box_widget, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, XtNvertDistance, 5, XtNfromVert, title_widget, XtNhorizDistance, 20, XtNfromHoriz, start_stop_button, XtNlabel, "Time Interval", XtNborderWidth, 0, NULL); scroll_widget = XtVaCreateManagedWidget("scroll", scrollbarWidgetClass, box_widget, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, XtNvertDistance, 5, XtNfromVert, interval_label, XtNhorizDistance, 20, XtNfromHoriz, start_stop_button, XtNorientation, XtorientHorizontal, XtNlength, 100, XtNthickness, 15, NULL); XtAddCallback(scroll_widget, XtNscrollProc, ScrollProc, NULL); XtAddCallback(scroll_widget, XtNjumpProc, JumpProc, NULL); /* Create the label widget which displays the interval value associated with the scrollbar. */ (void) sprintf(interval_string, "%4d ms", interval); interval_widget = XtVaCreateManagedWidget("interval", labelWidgetClass, box_widget, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, XtNvertDistance, 5, XtNfromVert, interval_label, XtNhorizDistance, 5, XtNfromHoriz, scroll_widget, XtNjustify, XtJustifyRight, XtNlabel, interval_string, XtNborderWidth, 0, NULL); /* Create the scroll bar for the slowdown */ slowdown_label = XtVaCreateManagedWidget("slowdown_label", labelWidgetClass, box_widget, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, XtNvertDistance, 5, XtNfromVert, title_widget, XtNhorizDistance, 25, XtNfromHoriz, interval_widget, XtNlabel, "Slowdown Factor", XtNborderWidth, 0, NULL); scroll_widget2 = XtVaCreateManagedWidget("scroll2", scrollbarWidgetClass, box_widget, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, XtNvertDistance, 5, XtNfromVert, slowdown_label, XtNhorizDistance, 25, XtNfromHoriz, interval_widget, XtNorientation, XtorientHorizontal, XtNlength, 100, XtNthickness, 15, NULL); XtAddCallback(scroll_widget2, XtNscrollProc, ScrollProc2, NULL); XtAddCallback(scroll_widget2, XtNjumpProc, JumpProc2, NULL); /* Create the label widget which displays the slowdown value associated with the scrollbar 2. */ (void) sprintf(slowdown_string, "%5d times", (long)slowdown); slowdown_widget = XtVaCreateManagedWidget("slowdown", labelWidgetClass, box_widget, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, XtNvertDistance, 5, XtNfromVert, slowdown_label, XtNhorizDistance, 5, XtNfromHoriz, scroll_widget2, XtNjustify, XtJustifyRight, XtNlabel, slowdown_string, XtNborderWidth, 0, NULL); /* Now add the actual canvas ... */ canvas_widget = XtVaCreateManagedWidget("canvas", formWidgetClass, box_widget, XtNheight, pict_height * scale, XtNwidth, pict_width * scale, XtNvertDistance, 20, XtNfromVert, quit_button, XtNbackground, CANVAS_COLOR, XtNborderWidth, 0, NULL); /* Add callback for exposure */ XtAddEventHandler(canvas_widget,ExposureMask,False,Exposed,NULL); XtAddEventHandler(canvas_widget,PointerMotionMask,False,running_coords,NULL); /* Now add the color scale ... */ map_widget = XtVaCreateManagedWidget("colorMap", compositeWidgetClass, box_widget, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, XtNheight, 350, XtNwidth, 80, XtNvertDistance, 20, XtNfromVert, quit_button, XtNhorizDistance, 20, XtNfromHoriz, canvas_widget, XtNborderWidth, 0, NULL); } /* JJU: void running_coords(Widget widget, caddr_t data, XEvent *event) */ void running_coords(Widget widget, XtPointer data, XEvent *event, Boolean *bln) { char loc_str[40]; int x, y; x = event->xmotion.x; y = event->xmotion.y; /* sprintf(loc_str, "Coordinates x, y: %d, %d", (int) (x / scale) + left_edge + 1, (int) (y / scale) + top_edge + 1); */ sprintf(loc_str, "Coordinates x, y: %d, %d", (int) (x / scale) + left_edge, (int) (y / scale) + top_edge); XtVaSetValues(coord_widget, XtNlabel, loc_str, NULL); } void setup_drawing() { int i, x, y; XGCValues gcv; /* Set up the drawing environment */ display = XtDisplay(canvas_widget); window = XtWindow(canvas_widget); window_map = XtWindow(map_widget); screen = DefaultScreen(display); visual = DefaultVisual(display, screen); depth = DisplayPlanes(display, screen); (void) printf("depth = %d\n",depth); gc = XCreateGC(display, window, 0, (XGCValues *) NULL); XSetForeground(display, gc, GRID_COLOR); gcv.font = XLoadFont(display, "8x13"); if(!gcv.font) { printf("error font not loaded\n"); } gc_map = XCreateGC(display, window_map, GCFont, &gcv); Setcmap(); /* Make image to match the size of our canvas */ x = pict_width * scale; y = pict_height * scale; pict = (u_char *) malloc((x + pict_width) * y); image = XCreateImage(display, visual, depth, ZPixmap, 0, pict, x, y, 8, x); /* Make the byte array which will hold the access data */ if (!(grid = (u_char *) malloc((unsigned) (pict_width * pict_height)))) { Error("failed to allocate grid", -1); } bzero((char *) grid, pict_width * pict_height); /* Make the byte array which will hold the access flag */ if (!(flag = (u_char *) malloc((unsigned) (pict_width * pict_height)))) { Error("failed to allocate flag", -1); } bzero((char *) flag, pict_width * pict_height); /* Make the array which will hold the integral */ if (!(integr = (double *) malloc(sizeof(double) * (pict_width * pict_height)))) { Error("failed to allocate integr", -1); } /* Make the array which will hold the last access time */ if (!(ltime = (double *) malloc(sizeof(double) * (pict_width * pict_height)))) { Error("failed to allocate ltime", -1); } for(i = 0; i < pict_width * pict_height; i++, *ltime = 0.0, *integr = 0.0); /* clear the array display */ UpdatePixRegion(0, pict_height - 1, 0, pict_width - 1, 0, 0.0); DisplayPixRegion(0, pict_height - 1, 0, pict_width - 1); } /**/ /* JJU: void Quit(Widget widget, caddr_t data, XEvent *event) */ void Quit(Widget widget, XtPointer data, XtPointer event) { exit(0); } /**/ /* JJU: void StartStop(Widget widget, caddr_t data, XEvent *event) */ void StartStop(Widget widget, XtPointer data, XtPointer event) { /* Toggle propagation of display */ if (working) { XtRemoveTimeOut(timer); working = False; XtSetArg(arg[0], XtNlabel, "Start"); /* Reset button label */ XtSetValues(start_stop_button,arg,1); XFlush(display); } else { XtSetArg(arg[0], XtNlabel, "Stop"); /* Reset button label */ XtSetValues(start_stop_button,arg,1); timer = XtAppAddTimeOut(xregion_app, interval, TimeOutCallback, NULL); working = True; XFlush(display); } } ga-5-3/global/X/xregion_overview.c0000640005473000001440000003122411373305234016013 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #include "xregion.h" XtAppContext create_overview(int argc, char **argv) { XtAppContext app; overview_shell = XtVaAppInitialize(&app,"XRegion", NULL, 0, &argc, argv, NULL, XtNtitle, "select region to view", NULL); set_config(); overview_widget = XtVaCreateManagedWidget("selectCanvas", formWidgetClass, overview_shell, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, NULL); overview_title = XtVaCreateManagedWidget("selectTitle",labelWidgetClass, overview_widget, XtNlabel, "x, y:", XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, XtNx, 10, XtNy, 10, XtNwidth, 350, XtNvertDistance, 10, XtNhorizDistance, 10, XtNborderWidth, 0, NULL); /* Create the Start/Stop command button */ view_button = XtVaCreateManagedWidget("viewbutton", commandWidgetClass, overview_widget, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, XtNhorizDistance, 10, XtNvertDistance, 10, XtNfromHoriz, overview_title, XtNlabel, "View Selection", XtNsensitive, False, XtNshapeStyle, XmuShapeOval, NULL); XtAddCallback(view_button, XtNcallback, start_view, NULL); select_widget = XtVaCreateManagedWidget("areaSelect", formWidgetClass, overview_widget, XtNvertDistance, 50, XtNhorizDistance, 5, XtNheight, overview_height, XtNwidth, overview_width, XtNborderWidth, 0, NULL); XtAddEventHandler(select_widget, PointerMotionMask, False, running_overview, NULL); XtAddEventHandler(select_widget, ButtonPressMask, False, draw_select_box, NULL); XtAddEventHandler(select_widget, ButtonReleaseMask, False, draw_select_box, NULL); XtAddEventHandler(select_widget, Button1MotionMask, False, draw_select_box, NULL); XtAddEventHandler(select_widget, ExposureMask, False, draw_select_box, NULL); return(app); } /* JJU: void start_view(Widget widget, caddr_t data, XEvent *event); */ void start_view(Widget widget, XtPointer data, XtPointer event) { create_main_window(); /* Realize everything */ XtRealizeWidget(top_level_widget); setup_drawing(); XtRemoveEventHandler(select_widget, ButtonPressMask, False, draw_select_box, NULL); XtRemoveEventHandler(select_widget, ButtonReleaseMask, False, draw_select_box, NULL); XtRemoveEventHandler(select_widget, Button1MotionMask, False, draw_select_box, NULL); } /* JJU: void running_overview(Widget widget, caddr_t data, XEvent *event) */ void running_overview(Widget widget, XtPointer data, XEvent *event, Boolean *bln) { char loc_str[40]; int x, y; int scale_x, scale_y; x = event->xmotion.x; y = event->xmotion.y; if (x < 0) x = 0; if (x > overview_width - 1) x = overview_width - 1; if (y < 0) y = 0; if (y > overview_height - 1) y = overview_height - 1; /* scale_x = (int)((x / overview_scale) + 1.5); scale_y = (int)((y / overview_scale) + 1.5); */ scale_x = (int)((x / overview_scale) + .5); scale_y = (int)((y / overview_scale) + .5); if (scale_x > grid_x) scale_x = grid_x; if (scale_y > grid_y) scale_y = grid_y; sprintf(loc_str, "x, y: %d, %d", scale_x, scale_y); XtVaSetValues(overview_title, XtNlabel, loc_str, NULL); } /* JJU: void draw_select_box(Widget widget, caddr_t data, XEvent *event) */ void draw_select_box(Widget widget, XtPointer data, XEvent *event, Boolean *bln) { static int x1, x2, y1, y2; static int first = True; static GC gc_rband, gc_select; static Display *disp; static Pixmap pixmap; /* JJU: static Window *win; */ static Window win; static int screen; static int button_state = 0; static int another_state = False; char err_str[80]; char loc_str[40]; int i, ul_x, ul_y, lr_x, lr_y; if (first) { first = False; x1 = x2 = y1 = y2 = -1; disp = XtDisplay(select_widget); win = XtWindow(select_widget); screen = DefaultScreen(disp); gc_rband = XCreateGC(disp, win, NULL, NULL); gc_select = XCreateGC(disp, win, NULL, NULL); pixmap = XCreatePixmap(disp, RootWindow(disp, screen), overview_width, overview_height, DefaultDepth(disp, screen)); XSetForeground(disp, gc_select, CANVAS_COLOR); XFillRectangle(disp, pixmap, gc_select, 0, 0, overview_width, overview_height); XSetForeground(disp, gc_rband, RBAND_COLOR); XSetForeground(disp, gc_select, SELECT_COLOR); XSetBackground(disp, gc_rband, CANVAS_COLOR); XSetFunction(disp,gc_rband, GXxor); /* XSetLineAttributes(disp, gc_rband, 3, LineSolid, CapRound, JoinRound); XSetLineAttributes(disp, gc_select, 3, LineSolid, CapRound, JoinRound); */ } switch (event->type) { case Expose: if (event->xexpose.count == 0) { XSetForeground(disp, gc_select, GRID_COLOR); for(i = 0; i < rows; i++) { int _x1=0,_x2=overview_width - 1; int _y1,_y2; _y1=_y2=overlay_row[i] * overview_scale; XDrawLine(disp, pixmap, gc_select, _x1, _y1, _x2, _y2); } for(i = 0; i < cols; i++) { int _y1=0,_y2=overview_height - 1; int _x1,_x2; _x1 =_x2 =overlay_col[i] * overview_scale; XDrawLine(disp, pixmap, gc_select, _x1, _y1, _x2, _y2); } XSetForeground(disp, gc_select, SELECT_COLOR); XCopyArea(disp, pixmap, win, gc_select, 0, 0, overview_width, overview_height, 0, 0); } break; case ButtonPress: if (event->xbutton.button == 1) { x1 = x2 = event->xbutton.x; y1 = y2 = event->xbutton.y; button_state = 1; another_state = True; } break; case ButtonRelease: if (event->xbutton.button == 1 && button_state == 1) { /* erase old rubberband box */ XDrawRectangle(disp, win, gc_rband, x1, y1, x2 - x1, y2 - y1); /* get latest corner */ x2 = event->xbutton.x; y2 = event->xbutton.y; if (x2 < 0) x2 = 0; if (x2 > overview_width - 1) x2 = overview_width - 1; if (y2 < 0) y2 = 0; if (y2 > overview_height - 1) y2 = overview_height - 1; if ((abs(x2 - x1) > 4) || (abs(y2 - y1) > 4)) { XtVaSetValues(overview_title, XtNlabel, loc_str, NULL); /* draw final selection box */ XDrawRectangle(disp, win, gc_select, x1, y1, x2 - x1, y2 - y1); XDrawRectangle(disp, pixmap, gc_select, x1, y1, x2 - x1, y2 - y1); XFillRectangle(disp, pixmap, gc_select, x1, y1, x2 - x1, y2 - y1); XSetForeground(disp, gc_select, GRID_COLOR); for(i = 0; i < rows; i++) { int _x1=0,_x2=overview_width - 1; int _y1,_y2; _y1=_y2=overlay_row[i] * overview_scale; XDrawLine(disp, pixmap, gc_select, _x1, _y1, _x2, _y2); } for(i = 0; i < cols; i++) { int _y1=0,_y2=overview_height - 1; int _x1,_x2; _x1 =_x2 =overlay_col[i] * overview_scale; XDrawLine(disp, pixmap, gc_select, _x1, _y1, _x2, _y2); } /* for(i = 0; i < rows; i++) { XDrawLine(disp, pixmap, gc_select, 0, (overlay_row[i] - 1) * overview_scale, overview_width - 1, (overlay_row[i] - 1) * overview_scale); } for(i = 0; i < cols; i++) { XDrawLine(disp, pixmap, gc_select, (overlay_col[i] - 1) * overview_scale, 0, (overlay_col[i] - 1) * overview_scale, overview_height - 1); } */ XSetForeground(disp, gc_select, SELECT_COLOR); XCopyArea(disp, pixmap, win, gc_select, 0, 0, overview_width, overview_height, 0, 0); left_edge = (int)(GA_MIN(x1, x2) / overview_scale + .5); right_edge = (int)(GA_MAX(x1, x2) / overview_scale + .5); top_edge = (int)(GA_MIN(y1, y2) / overview_scale + .5); bottom_edge = (int)(GA_MAX(y1, y2) / overview_scale + .5); if (left_edge < 0) left_edge = 0; if (right_edge > grid_x - 1) right_edge = grid_x - 1; if (top_edge < 0) top_edge = 0; if (bottom_edge > grid_y - 1) bottom_edge = grid_y - 1; pict_width = right_edge - left_edge + 1; pict_height = bottom_edge - top_edge + 1; scale = GA_MIN( ceil((500.0 / pict_width)), ceil((500.0 / pict_height))); if ((pict_width < 501) || (pict_height < 501)) { fprintf(stderr, "pict_width, pict_height, scale: %d, %d, %d\n", pict_width, pict_height, scale); fprintf(stderr, "Left, right, top, bottom: %d, %d, %d, %d\n", left_edge, right_edge, top_edge, bottom_edge); XtVaSetValues(view_button, XtNsensitive, True, NULL); } else { /* select to large a region to view - Error */ XtVaSetValues(view_button, XtNsensitive, False, NULL); sprintf(err_str, "Selection Error: select area 500x500 or smaller"); dialog_box(err_str); XSetForeground(disp, gc_select, CANVAS_COLOR); XDrawRectangle(disp, pixmap, gc_select, x1, y1, x2 - x1, y2 - y1); XSetForeground(disp, gc_select, SELECT_COLOR); button_state = 0; break; } } } break; case MotionNotify: if (button_state == 1) { if (another_state) { XSetForeground(disp, gc_select, CANVAS_COLOR); XFillRectangle(disp, pixmap, gc_select, 0, 0,overview_width, overview_height ); XSetForeground(disp, gc_select, GRID_COLOR); /* for(i = 0; i < rows; i++) { int x1=0,x2=overview_width - 1; int y1=y2=overlay_row[i] * overview_scale; XDrawLine(disp, pixmap, gc_select, x1, y1, x2, y2); } for(i = 0; i < cols; i++) { int y1=0,y2=overview_height - 1; int x1=x2=overlay_col[i] * overview_scale; XDrawLine(disp, pixmap, gc_select, x1, y1, x2, y2); } */ for(i = 0; i < rows; i++) { XDrawLine(disp, pixmap, gc_select, 0, (overlay_row[i] - 0) * overview_scale, overview_width - 1, (overlay_row[i] - 0) * overview_scale); } for(i = 0; i < cols; i++) { XDrawLine(disp, pixmap, gc_select, (overlay_col[i] - 0) * overview_scale, 0, (overlay_col[i] - 0) * overview_scale, overview_height - 1); } XSetForeground(disp, gc_select, SELECT_COLOR); XCopyArea(disp, pixmap, win, gc_select, 0, 0, overview_width, overview_height, 0, 0); XFlush(disp); another_state = False; } /* erase old rubberband box */ XDrawRectangle(disp, win, gc_rband, x1, y1, x2 - x1, y2 - y1); /* get latest corner */ x2 = event->xbutton.x; y2 = event->xbutton.y; if (x2 < 0) x2 = 0; if (x2 > overview_width - 1) x2 = overview_width - 1; if (y2 < 0) y2 = 0; if (y2 > overview_height - 1) y2 = overview_height - 1; /* draw new rubberband box */ XDrawRectangle(disp, win, gc_rband, x1, y1, x2 - x1, y2 - y1); } break; } } ga-5-3/global/X/README0000640005473000001440000000233611423627743013140 0ustar d3n000usersxregion -- GA visualization tool ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ xregion displays transitional access patterns for a two-dimensional array. Both sampling time for the animation and slowdown factor can be specified to animate long- and short- lasting events. At the end of animation, a cumulative time lost due to contention in access to individual array elements is displayed. The color coding (from white to navy) reflect access contention level for the animation, and the access contention integral for the final display. Usage ===== The program was tested on the SUN and SGI platforms only ! It is a 16-bit display version. :: xregion [Xtoolkit options] where: filename - name of the input file (data processed by 'adjust' program) The file must contain: .... .... num_events - the number of events to be read and processed from filename (might be specified larger than teh actual number records) Example ======= xregion adjust.ed ga-5-3/global/X/xregion.h0000640005473000001440000001360711373305234014077 0ustar d3n000users#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* #define DEBUG */ #define INITSLOW 50. #define POW_BASE 100. extern void exit(); /* function prototypes */ extern void Error(char *message, int err_num); extern void UpdatePixRegion(int ilo, int ihi, int jlo, int jhi, int increment, double time); extern void DisplayPixRegion(int ilo, int ihi, int jlo, int jhi); extern void DisplaySlowdownValue(); extern void DisplayIntervalValue(); /* JJU: extern void ScrollProc(Widget scrollbar, caddr_t data, caddr_t position); */ extern void ScrollProc(Widget scrollbar, XtPointer data, XtPointer position); /* JJU: extern void ScrollProc2(Widget scrollbar, caddr_t data, caddr_t position); */ extern void ScrollProc2(Widget scrollbar, XtPointer data, XtPointer position); /* JJU: extern void JumpProc(Widget scrollbar, caddr_t data, caddr_t fraction_ptr); */ extern void JumpProc(Widget scrollbar, XtPointer data, XtPointer fraction_ptr); /* JJU: extern void JumpProc2(Widget scrollbar, caddr_t data, caddr_t fraction_ptr); */ extern void JumpProc2(Widget scrollbar, XtPointer data, XtPointer fraction_ptr); extern void DrawColorMap(); extern void PrintColorMapText(); extern void UpdateDisplay(); /* JJU: extern void TimeOutCallback(caddr_t data); */ extern void TimeOutCallback(XtPointer data, XtIntervalId *xtintervalid); /* JJU: extern void Exposed(Widget widget, caddr_t data, XEvent *event); */ extern void Exposed(Widget widget, XtPointer data, XEvent *event, Boolean *bln); /* JJU: extern void dismiss_dialog(Widget w, caddr_t data, XEvent *event) */ extern void dismiss_dialog(Widget widget, XtPointer data, XtPointer event); /* JJU: extern void Quit(Widget widget, caddr_t data, XEvent *event); */ extern void Quit(Widget widget, XtPointer data, XtPointer event); /* JJU: extern void StartStop(Widget widget, caddr_t data, XEvent *event); */ extern void StartStop(Widget widget, XtPointer data, XtPointer event); /* JJU: extern void start_view(Widget widget, caddr_t data, XEvent *event); */ extern void start_view(Widget widget, XtPointer data, XtPointer event); extern void Setcmap(); extern void ReadEventFile(char *filename); /* JJU: extern void running_coords(Widget widget, caddr_t data, XEvent *event); */ extern void running_coords(Widget widget, XtPointer data, XEvent *event, Boolean *bln); /* JJU: extern void running_overview(Widget widget, caddr_t data, XEvent *event); */ extern void running_overview(Widget widget, XtPointer data, XEvent *event, Boolean *bln); /* JJU: extern void draw_select_box(Widget widget, caddr_t data, XEvent *event); */ extern void draw_select_box(Widget widget, XtPointer data, XEvent *event, Boolean *bln); extern int in_display_region(int ilo, int ihi, int jlo, int jhi); extern XtAppContext create_overview(int argc, char **argv); extern void create_main_window(); extern void setup_drawing(); extern void dialog_box(char *dlg_str); extern void set_config(); /* Globals needed for display etc. */ #ifdef FIRST_TIME #define SCOPE #else #define SCOPE extern #endif /* FIRST_TIME */ SCOPE Widget top_level_widget, box_widget, start_stop_button, scroll_widget, interval_widget, scroll_widget2, slowdown_widget, coord_widget, dlg_top, dlg_btn, dlg_form, dlg_label, view_button, interval_label, slowdown_label, map_widget, quit_button, overview_widget, select_widget, overview_title, overview_shell, canvas_widget, title_widget; SCOPE XtAppContext xregion_app; SCOPE XtIntervalId timer; SCOPE long first_time; /* Used to set scroll bar on first expose */ SCOPE long interval_max; SCOPE long interval; /* 0.5s between exposures by default */ SCOPE double slowdown_max; SCOPE double slowdown_min; SCOPE double slowdown; /* slowdown factor for animation */ SCOPE double oldslowdown; SCOPE unsigned long int cur_time; /* current time */ SCOPE Arg arg[25]; SCOPE Display *display; SCOPE Window window, window_map; SCOPE int screen, depth; SCOPE Visual *visual; SCOPE XImage *image; SCOPE u_char *pict; SCOPE GC gc, gc_map; SCOPE char title[80]; SCOPE char interval_string[10], slowdown_string[11]; SCOPE int top_edge, bottom_edge, left_edge, right_edge; #define GA_MAX(a,b) (((a)>(b)) ? (a) : (b)) #define GA_MIN(a,b) (((a)<(b)) ? (a) : (b)) #define MAX_COL 16 SCOPE u_char cmap[MAX_COL+1]; SCOPE Colormap colormap; SCOPE int grid_x, grid_y; /* The size of the grid */ SCOPE int scale; /* No. of pixels per element */ SCOPE int pict_width; /* The size of the picture = grid_x * scale */ SCOPE int pict_height; /* The size of the picture = grid_y * scale */ SCOPE int overview_height, overview_width; SCOPE double overview_scale; SCOPE int *overlay_row, *overlay_col; SCOPE int rows, cols; SCOPE u_char *grid; SCOPE double *ltime; /* last event time */ SCOPE double *integr; /* access integral */ SCOPE double maxval; /* max value of integral, zero is default */ SCOPE u_char *flag; /* access flag */ SCOPE int working, animation; /*** trace variables and constants ***/ SCOPE long int num_events; SCOPE int *record; /* tracefile data */ SCOPE unsigned long int *ev_times; /* times of events */ SCOPE int cur_event; #define RECLEN 8 /*** end of trace variables and constants ***/ /* color constants */ SCOPE Pixel DEFAULT_FG; SCOPE Pixel DEFAULT_BG; SCOPE Pixel RBAND_COLOR; SCOPE Pixel SELECT_COLOR; SCOPE Pixel GRID_COLOR; SCOPE Pixel CANVAS_COLOR; ga-5-3/global/X/xregion_xcmap.c0000640005473000001440000000300211300316052015234 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "xregion.h" void Setcmap() /* Make the color map ... */ { int i; XColor color, spare; double cscale = 1.0 / ((double) (MAX_COL-1)); double hue, saturation, value; double redvar,red=0xba/255.0, green, blue=0xd2/255.0; redvar = red; colormap = DefaultColormap(display, screen); /* Linear interpolation on green */ for (i=0; i=(MAX_COL-5)) { redvar = .4*red + .6*red*(MAX_COL-i)/5.; } color.red = (short) (redvar * 65535.0); color.blue = (short) (blue * 65535.0); green = cscale * (MAX_COL - i); color.green = (short) (green * 65535.0); } if (XAllocColor(display, colormap, &color) == 0) { Error("couldn't assign color",i); } cmap[i] = color.pixel; /* now set the "accessed" color for regions that were accessed */ color.red = 65535; color.green = 65535; color.blue = 65535 * (220.0/255.0); if (XAllocColor(display, colormap, &color) == 0) { Error("couldn't assign accessed color",99); } cmap[MAX_COL] = color.pixel; /* (void) printf("Colour %d red=%x, green=%x, blue=%x, pixel=%x\n", i, color.red, color.green, color.blue, color.pixel); */ } } ga-5-3/global/X/xregion_pixregion.c0000640005473000001440000000625411373305234016156 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "xregion.h" void UpdatePixRegion(int ilo, int ihi, int jlo, int jhi, int increment, double time) { register int i, j, k, l, index; register u_char *from, *to, *tempk, *tempkl, value, *pflag; register double *pintegr, *pltime, corr; for (i = ilo; i < ihi + 1; i++) { for (j = jlo; j < jhi + 1; j++) { to = pict + (i * pict_width * scale + j) * scale; from = grid + (i * pict_width + j); pflag = flag + (i * pict_width + j); pintegr = integr + (i * pict_width + j); pltime = ltime + (i * pict_width + j); /* increment == 0 means animation is done and displaying integrals */ if (animation) { corr = *from > 1 ? *from - 1 : 0; corr = corr * (time - *pltime); if(corr < 0.0) { fprintf(stderr, "error: time =%f ltime =%f height =%d \n", time,*pltime,*from); } *pintegr += corr; *pltime = time; *from = *from + increment; index = *from; index = GA_MIN(index,MAX_COL-1); if(increment) { *pflag = 1; } /* calculate max value of integrals */ if(*pintegr > maxval) { maxval = *pintegr; } } else /* done with animation display integral */ { index = (int) (((*pintegr) / maxval) * MAX_COL); index = GA_MIN(index, MAX_COL - 1); if(!index && *pflag) { index = MAX_COL; /* sets the "accessed" color */ } } value = cmap[index]; for (k = 0, tempk = to; k < scale; k++, tempk += pict_width * scale) { for (l = 0, tempkl = tempk; l < scale; l++, tempkl++) { *tempkl = value; } } } /* end for j */ } /* end for i */ } void DisplayPixRegion(int ilo, int ihi, int jlo, int jhi) { int count, x, y, height, width; y = ilo * scale; x = jlo * scale; height = (ihi - ilo + 1) * scale; width = (jhi - jlo + 1) * scale; XPutImage(display, window, gc, image, x, y, x, y, width, height); XFlush(display); /* for(count = 0; count < rows; count++) { XDrawLine(display, XtWindow(canvas_widget), gc, 0, (overlay_row[count] - 1 - top_edge) * scale, pict_width * scale - 1, (overlay_row[count] - 1 - top_edge) * scale); } for(count = 0; count < cols; count++) { XDrawLine(display, XtWindow(canvas_widget), gc, (overlay_col[count] - 1 - left_edge) * scale, 0, (overlay_col[count] - 1 - left_edge) * scale, pict_height * scale - 1); } */ for(count = 0; count < rows; count++) { XDrawLine(display, XtWindow(canvas_widget), gc, 0, (overlay_row[count] - top_edge + .5) * scale, pict_width * scale - 1, (overlay_row[count] - top_edge + .5) * scale); } for(count = 0; count < cols; count++) { XDrawLine(display, XtWindow(canvas_widget), gc, (overlay_col[count] - left_edge + .5) * scale, 0, (overlay_col[count] - left_edge + .5) * scale, pict_height * scale - 1); } } ga-5-3/global/X/xregion_scrollbars.c0000640005473000001440000000771611373305234016324 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "xregion.h" #include #define GA_ABS(x) (((x) < 0 )? -(x) : (x)) void DisplayIntervalValue() { (void) sprintf(interval_string, "%4d ms", interval); XtSetArg(arg[0], XtNlabel, interval_string); XtSetValues(interval_widget,arg,1); } void DisplaySlowdownValue() { (void) sprintf(slowdown_string, "%5.1f times", slowdown); XtSetArg(arg[0], XtNlabel, slowdown_string); XtSetValues(slowdown_widget,arg,1); } /**/ /* JJU: void ScrollProc(Widget scrollbar, caddr_t data, caddr_t position) */ void ScrollProc(Widget scrollbar, XtPointer data, XtPointer position) /* Called when the left or right buttons are used to step the scrollbar left or right. We have the responsibility of moving the scrollbar. */ { Dimension length; float fraction; float shown; /* Get the scrollbar length and move the scroll bar */ XtSetArg(arg[0], XtNlength, &length); XtGetValues(scrollbar, arg, 1); fraction = ((int) position)/ (double) length; interval = fraction*0.05*interval_max; interval = GA_MIN(interval, interval_max); interval = GA_MAX(interval, 1); fraction = (float) interval/ (float) interval_max; shown = -1.0; DisplayIntervalValue(); XawScrollbarSetThumb(scrollbar, fraction, shown); } /***** slowdown **********/ /* JJU: void ScrollProc2(Widget scrollbar, caddr_t data, caddr_t position) */ void ScrollProc2(Widget scrollbar, XtPointer data, XtPointer position) /* Called when the left or right buttons are used to step the scrollbar left or right. We have the responsibility of moving the scrollbar. */ { Dimension length; double fraction; float shown; /* Get the scrollbar length and move the scroll bar */ XtSetArg(arg[0], XtNlength, &length); XtGetValues(scrollbar, arg, 1); fraction -= ((int) position)/ (double) length; slowdown = fraction*0.2*slowdown_max; /* need to add small number to avoid domain error in log(0) */ slowdown = GA_MIN(slowdown,slowdown_max); slowdown = GA_MAX(slowdown, slowdown_min); /* scale current time according to the slowdown factor */ #ifdef DEBUG printf("before scaling %lu ( %ld %ld factor=%f) ",cur_time, slowdown,oldslowdown,(1.0*slowdown)/oldslowdown); #endif /* DEBUG */ cur_time = cur_time*slowdown/oldslowdown; #ifdef DEBUG printf("and after %lu\n ",cur_time); #endif /* DEBUG */ oldslowdown = slowdown; fraction = (float) slowdown/ (float) slowdown_max; shown = -1.0; DisplaySlowdownValue(); XawScrollbarSetThumb(scrollbar, (float)fraction, shown); } /**/ /* JJU: void JumpProc(Widget scrollbar, caddr_t data, caddr_t fraction_ptr) */ void JumpProc(Widget scrollbar, XtPointer data, XtPointer fraction_ptr) /* Called when the middle button is used to drag to the scrollbar. The scrollbar is moved for us. */ { float fraction = *(float *) fraction_ptr; interval = fraction*interval_max; interval = GA_MIN(interval, interval_max); interval = GA_MAX(interval, 1); DisplayIntervalValue(); } /**** slowdown ****/ /* JJU: void JumpProc2(Widget scrollbar, caddr_t data, caddr_t fraction_ptr) */ void JumpProc2(Widget scrollbar, XtPointer data, XtPointer fraction_ptr) /* Called when the middle button is used to drag to the scrollbar. The scrollbar is moved for us. */ { double exp_fraction; float fraction = *(float *) fraction_ptr; exp_fraction = pow(POW_BASE,(double)fraction); exp_fraction = (exp_fraction-1.)/ (pow(POW_BASE,1.) -1.); slowdown = exp_fraction*(slowdown_max-slowdown_min) + slowdown_min; slowdown = GA_MIN(slowdown,slowdown_max); slowdown = GA_MAX(slowdown, slowdown_min); /* scale current time according to the slowdown factor */ #ifdef DEBUG printf("before scaling %lu ( %ld %ld factor=%f) ",cur_time, slowdown,oldslowdown,(1.0*slowdown)/oldslowdown); #endif /* DEBUG */ cur_time = cur_time*slowdown/oldslowdown; #ifdef DEBUG printf("and after %lu\n ",cur_time); #endif /* DEBUG */ oldslowdown = slowdown; DisplaySlowdownValue(); } ga-5-3/global/X/adjust.ed.Z0000750005473000001440000041603406072273056014300 0ustar d3n000users1`p` 7rP  3f(aD  H`G1CAȍ!R  5EK4h@cJo)'M2nԸQ)ȁCA F"UV`OWayΐQrY@gИQuɧqkaQm #O+,y=8FCQa%\&6G8T - 5WyQDfQg S-7&[ 1 hRi8TUHN3LWR6HRQ" 8J)]E1au&hUդ Y%|مaH8V\sDrԦ^V)_T eafVbI5x'Ga49D `bVSHzʙg9PXhN v*(TTN[C 01JٕSUّ 2tiP}FP(H1YqvN u **ڸ)UUKX4%írü;AIiAX6 [FB$S D uĭ&,-dv-ʥQ"# qJ4ĔqBǎh2ki&*Q!6H&nXzIMf%s$U)e*PYk[08lWhT%W'6u Ʌ`ȵCUVHD&l/ЫhoFV{5ڃX֭dEb4cC.y} 5CAVf%6FѪ,u`(/P1gάgKK@ k9.󴷜_EPD*Dz@䃙JDň4, _q&CWf^*Rʒ=eI1XEmqwӗA#LFNh&^Six9Ԍe9"Eap xp,qQ0dH]ttn6SqU`@B" #eE풴P"H8  鞱 lLur623ݱI KzB3ao2Khgj$aVFR\eM"jȸ6ބ[C,jD͒diES$"im:^hA8TD8kRhtBL)yI jʦP"MԄ2Ĺt|ʦD$;<.bIʶ0s&[biE]>e!H:qޭQ\%ZY6I,g-o)$[Tg[HDn]_If9Roچz{pMliH$4k2Uz؇$y!.ƻ9l%oɂ)O}5iëThVdO,X$FK̔^I7FMڋ7e+D fF  m̝ؑWuUi"H[od<l[?6ճ4=8h.G [ yƬ=_hU>^ǶXYu@ǘdh˾Ot̶Im)+eVzY(9zzL]T4,vֻhzsf1AlT+Ec1V\̙V$y{.ƷUN asrwW/9S)@N4s5:ͷS4\\_g~WBL,_M:ۨLuB9[7S330=H٨`Fu ]iueJB=Zu=tq7`1N)9wGRTsW^0]s0bA앿&IO!$(hcnKnzusZ(5Jء}T5}7ɧA$ir,y1 Q1~-#b4zv*2Rd֦ *iQZ7LŖ2zIFJ"ms`6@3J!(ȫ]꤆2w 6zW0ͲXITեRM>6 9}xK,AA仆Ar+KQ 3djS=?c,^A'=~1PӨY7#^Mvuc5^_Sd 9ᒱ=\1ʟq=N&nɵO*h aXTjC`{$> 4E$fzlNooeNt-Aw,YA=?u$"Q* B*q! /N*fo/be_c" }G&cawgkHJN۳A{XR^S6ToF8{b۴1(dqA8[U;'Q0JQ#EEO2?Ռw^$r ]6.*Y8n,<϶O13:o?ʒ/ig SNώߒ-JV^"O{qHb!I]lO5s O@cSsv!ex5GEyn?0n+Cv%ӧ&whVĂRHP4%FD.߇f( Ѽ! ŨY{P('8ae"PqT1uuݵz0KP  Bf&X ag5'H' ]Dz$5`7Z /a1Fh "$D4K9rPHH KPme ©%Ԡ.ezXlqB(F(x?˥;]HhxS}L)RQN`\ bUD;?Q61ݳ\C*qEp ś9w ^uGRy1;8~ilᖼ$'S^Bxis哌r ;&(bS5αG!R%!I!FD̃y.Ëi7mJ96ĸ@PT s=BT ,avk с ,lV+`p 6 35(]' m4+'$T!bM9IQst- ~9_<Siߠs?5jN`bS= ōѩZ-V{~B]V8D8VIN#bo)&Op=Ϫni#]GÊ'SİuuN UTG]rB' UKֺWD ɫnuRj?[R !_M<;EEŪ6ʆLϊ31"Q:^)p 0W {^(qehFVGC]Ю6 "Ȗ:ؓ *bJaYE#<+huZk}=彦H5E\iS}N: _k1Ա^sX22$FX>O(FGrבRPb|GjB +ÚKM !vU9q(]" BQeȕa/[]@P~'%Wf!mlpe2YI*Nͯȇ#e)GVVhB9PۍB,W|,?5֊cD쨰+8eWW\TYJDi7-l Lbn+;5;86WuTYK+ipY6*HwhCu+9:R\ h` -)1[j>3J,3h5`FzBMfzs~\[zCrH9h=V(<~VI~ Xim_"7z%F J JrYsC^ "#/KKKmrKK549@]{Ꞌ)ý0i!aҚb䛾42Pb"dĵ)[[-irqs"VVe8E ke5nZjN0g`,6ŕLt2_< m©-XL -\3yHސ>(#Xr(2# Uo7(^$6h &XB/YP` D+ =Mi8#8|bqz )CH dY;D2VDq0 chqȌ?g)Hx" 4}+hNx8K[3$R$dLFrrģϚ|I|#Ǩ>t܄S4!׎L!wLc73@ s._*\3Eq$МQ(+C^bVʹMz¦cCi\(qC}>XEv5 ;ns5xW>-% rbPk!IqFi;RL!=59P`QMfk+b=@As# #b]+fii[q?1aI:cǺ0qJWu[-$Z^ދ#U?7G88J4x Ty܏H'/RW?{^ݒ贺Q:m;5&ny4WE 4mrR:h6|%"7h `"n Nq A*9ڰ&=)C;yHڧE k#B³u @BuL=ˆHqiaA\7%d28|'Ov3kl-mqioEb_=JkIY㮡*LhxH<{{CmۍM1c;_u9v1U~rI+cv8'u!n[tri|^SG AU~c̆3K>. sަ+&vz mybR,c1ŏDk&BYLvn➯nXAԷ!0Eಖ*fX;I؀[v]p!"w=n [o]"OwxFm tI *J=MrK()QfIx%Cو8xѬ-MxW9CIIoJē+1GWDQ?!00VF1hV"<| &cM1af}6ǫx#vXBKu<$e4hB2KzB@<+TM]Yn滑Uw兛-څwK'/֍hTNO2+NpbCZlÉ9]!쑽$ KIp߶z֕CU75s^ìct|Ѿ}~hm tx!m{'Ec<ɚy$G⬅oA(cA~[_ /#̨{S/3Oz~ۿd ֢jW%Е|~V!3>fuC_<4.Aц6Ga X+duɻ'czo_eG>Y YJ@8q4z>?Bga Õ7LG#5FǶ<(7h3w8g{S 'TZu(C3. }uJ'H(GdǍoKe{>?/ .ա2-˙PV%w="~W7p_tToӿc._; t wW%pIY4:d~{@_3 !@~j߷QtJy=ޡ az%# uy7BiBf5#dә~TLy G-|C1쀿r,q TdQuПtaFx|fs(\ 04_!ǬZ;`f|C 5 x}E5b B \'`5\>{d!ן8C[ߣgW z; 0qu^`AD66dwDPVw:P{edW#*zyA ҂`j@e sw`GW%Fās8 ]|1p`5mC4$!3фC%hJ҇d@;ls0q!E@(D,|QfIy 񚄂RA#%iMz mlv෧ D cMM%ML mA u^8:eL( 8 Z{DPSMpqw#lz 3ئvlWDF3~8@ځGS%hZK5vRK'\׭dx WH3;|!JB <6VFJZOY{T'Ղ#K9z8Ņ_QS7h:[D ̀@=M_[!g8ؼ|[H &aY)k+.1N aZmH!!manxap"!@"5!tWeBT-67I/&haw &JMFGOdL"*!z:H+G*h`;{ 0-Hbj(w;\`ns@])]ĵ^5,Qs!͠ W.ABo{Bu6с6aGb+]̷PT?Dmi4⹧ 6lXq#c^c1!0 ]K7#My7RtaΩyrWVw"%+vx :8P˦qg >BR^dij푷q8vD4B0L'K+1X ѡ7ߣ7&~x`_T{Ƞh"g`p.~k¸8 S`˜.ncO@GŵH#N -QJz$ R|0~{Y)N_ I)Q)Aۍa.s(:HnD?w?)0#CUp&fb#hu؇KcgXZ@}-1Om#̘]q^b(3yGc?^5w(߇%q4b^卯&cQߞa-,mm~P}!;6/74*MsCa3}JB5[] c̏K ."z,lՊ@(ΏU6\\Ad.+n  Wj7!HNU#hHB$~A BaF02!|eLD¿H>YCb]bXYbbwH$B9vmP7"8B2A$ O$DC8$䂢$D ğCq&}z,q#d32cЅdGy`Gd&tмl%8qIdD\,0$[e11Z`&dGuE ƼzՁ^52D#/HMdܑU٤<mLſM5bwABa&E!@^=|bnh|n& ߤjaBIs+Z }7Q І&!,ٍ$OPdQnKTQ>i m $@, 9RGȨ?]g`'M/J%*,SU6Pt7eP N7AԤC\7XAiye53 YEhdSP3M,~Cc7pَc=IP^U\XNĄTzCAPA>M'%>adA%١IHv^&)$IR8/hn釰Cˆ`*ΑLd m5;V5*&>:8PVpPzss]1~w p@bP@2Ą-bi_c y @IKCZޖ!5%QLEA$YFue'ؖ[\Hm hp|8NBKA\"B8fBۜ4%VI zko XPΖ[ε g̥!Ґ΁k"\#bwil [P3ked`I\?؈~Q&R$*'FI.df"Eey^ F#}5 qRmh/:v5Efdƛ"TR0/&ڜqe#2IW hI@RK6!|Pv.'Czk;H|ȃ &zjቮo(uu:Er-/{N\hM{X0MYU[a uڀef ^Idf;bRIHY +)JA)#fA%/ IOof:܈h 19>hnZ0ZR'"}`,R~R09rG?!:C\ )J$]AL }+\y<`N9*?sd=EdtmWedZ-UWgB;w< rbdi!P `-0Uqr&{6V'-Y-rQ)hLiebU1X_rh!p(FCSfD x&vA&li hNQ61J%VQsQf4CR(JFt藆TS0'~7[nVHC٣h@'\D㄀x @iz]fp=>$L~TViz1 i4iBI2*Q)$rRa9&9=Uyiovcih>R')GR`񤮥å@X:wdlZit:&ƕZ|Qxŧqo29ՏCLYŃp5{jlvzF5Y* v^P, /" 'EW]ޖݕt"f0ZY8lGpZ-j * oXaWӊJK*`iGS❐Jf0"jRQE^*ʣ:Q*Y j.=0RNɅd1C6clڌD]6NEYN'RZ &(LеkHq(6yZL8^L½,&mgռZk. ٲe{C @g02~\+\r-.tǐkfĶ^\y0lX} mX9Q8 6gąJa T6. jSP+ƳTݢ譽q*S-gnPj&L@JЁm Ąƾnܺ.RҞpbQmYKmcZhD Y~j<+Kؚq7,Q2 qAnCmX[KC +\Q1-;A]^Y=G+s@(+#cKBPfxsu ݯU:DD66uLh|w+Uy;b] ?kJI l80x8pDVfXfl3L̸+b[3t mk|Ea E,L"rd+G?m>kq8άŚ2W+dIUdp^KLf]ĺfK ȭZu.U(ʠK@ko7ͮ 3=0:TAkZW&Lr-n;Buj`@`@A.DnĢƊQ! ##Qdn񓚩ڮ} S^AE䪺a'Yidթ($1g&_jYZI=Zl-i,U7aNڎޞ$Ҽ0}΅!T4F۰Bi]d^cdG -Udi[oKD4uVu"4SS/d2j-BJBoNoњ@Ճr[/]ˢ yU4oP.+8WdQ+fxKoiX ' $h {,;CEnk}ۗ, e+`?TJok6Q50;/0KС+9(Q q#Dw. 6sֺf$O{$SK>pNJ▕AY$*Xx1{;~H\-O\#S-!z`qn?SEx[dXbA,p.bAhxhlO,Oυj ZIҕ7+XmKo]ljV_m& cE J PN0;j5wވ0>J+ oo!zy֫*ө7pM5o fprO,ܞ2\N#\ ) aPz 7JnKaϒ6l"тR̊e?(*,\aca#bt0n!oI;_mkI;M8됙O-PRGpTTo 'Z /SdY$Ʋ$4_ ;5zj鉈 J+$<%:HB*老RgI0խAܽPX2¤MQi'獇boCGib Q-Kjj G}7'!΁2FL$2'e"tBB+BW ~hG0Gu ]D"ƳRZP<Im4繰f~W [U%L$UNT,/V%nYL!+]L2\p[$u@g Ŗr];wLXg((,L7Ƅ<B=K_T |C.):a|3¦l^fTl] Y I_ܰE Dp lmAί`k1<ٺ-9b$roh[.HQDx{D̬LRӹm-ȥʚH mV1{*1+^s򱜌"g@`Lɱk!C F$i^D.~)elsM$] \s<%SiNjg 9o'U!&x(n^ 1IB ˜$˃,xB)ae˃Ύ|˙QT˼fdbBȥkv..?H>-%%w Z |ir<Ӵ `EӑmU20v /K^h-ʨJiU|4υF]"L\}0_~!@4!A8+& =4G=-)F|9< N`ꟼV.O# ͌^EYX'ēEĽ5%A\rLZ4ФDz×KsՃ?u$SW3xkˁQ(ԛGIdDKLesDLc W2lU*97mϾʡ*?{ΦsMDGbxt ȻϡA,iܼ=܍tzۿh;^_׻5B'W3q\]w,mk"l@Ne#cxcw݂zu 9qzxhgFECpC,b|YwoC#>z$&cSv&s:#dp&KO"G:MˢJ&~&#uųD߄h:ߙn4w;_ Rcl =U8x[ddv[o$j-'g-;2AEOKC){$.v/LNGЅd,nl\L o1lcCs;W Tm^2˧ssQ)4Ox}Ƒ)[ B\*5{}(am-Lgǟ9; 8_sM%r)sEְj$h6 v6_U5L^4(/@-ܢ)t8"0JI^$uåRQyJY0,EN*\t) )8 `M}OW;Ph(0.fЭywM ;CR" \&k  7 bczT^/C;C0G?fulfeF$F!瞫 49,B P` 噄7 kލɆ[>@8M+n+#$YI(~. Ϝunc( %G@7镓RΚ ϴ/}uC7S5{h(Pg{^h\*AKe_nTv?09-EK&9HTETC&Ey>EtLFg pc PS7~(y ) ]WFA]1&G]=5rj>/ ΍g (Qi:(AFQo{da.@:)C*Q82y$:-s`1X3R:ͼ9]l2"#邔.ΟJWqӡ.Fe5W ϞDVf.@A\५P8m1Z=~Gդ>(-7:_逭ꢢGmx åMQP};Cl C*{@цA':eYG֗Gj} |/-o k;f.u;ƾY9(q3WUi&%JS.]@X$"w}_VAԬ>;!ǔ33нaŸr^3dL;% F1\n!rtIҎ`_J>mǘͬ#8ncHȕN S?Z^~O/ ED{o{6D؏N(@O} ;~iN7{_͹>:64FpĤ>4GҭW9;bmc$#yCN+},ZjͧyH%D H%:ObǞ#ݩkB)j"/b0k!j}ٟ?%*Ʈ/~{YP3<n`b`"eluixGDK8 {BdڈT1Y|wů[/wu3>_M+umm>=Ϫͧ[P|AQ*k0*meWONS9Bߩgn] '`Ш%-KjhR>#LgQIZ,Yܴz7J;s=Μ^Q4DڢվD{F.Nɔ ?pgSdC{=N*h&pF1: =ӏXt=8c$5c`řO%^pwj] -(d‡/__Y 7|XH>w6|XLhFF^ I^M)̕6@.)~Rʿ$ Y{~ݪ[ROPn6gJE$ I*k뤗qDA{jOjG$wЫx9'_=PtL 2p5#3_5/U9g u=K(D:ղ>#-o+DH:|^'x>v1,~5p8μSޗl@T[;ct/]żRru1?p'{=%3 ݋%>՟ |+ARm E}Y`WnXb/ܗRk}c豚r+OtL=u7#pº-ȸ^obHj;ItBEVGJ9`y06F2m~>i(49R7zIc8?}soȩ@Z ,HVRR^OnT6[ZFOBGt^ HCBܷjJ&Wyo.8yD98^l/yާOitwm0>$$(y{,nTmyMaD4aLkA>baK,~X=*4f?3ܦo=>6!Eö5l#L$y:sF1Ą?"Fir9zs1^%18@1d8CL(GY(0{yFCWeQeC fx\͆QOO#kZ,gy F~UZy?{xs;QRƉ,f[hKh Q-×,H'mmL€EZF#;gd3I.g;]DW]y,|j~NDjj6~[!1$:_?H_7E?k#$*slVpxwsG%c`/T^q É-YlI@^b"t *p~qAnh#Lg˿8Vl+u/ЗkPU$Eh dXx͆bh mh(Iý4/"W'ck.)H@ЮZ[">s%w] bP=sp f =9 0X)/@7 fcXfxk6 eW/ERtKX-ֵR) ;~0}Lr  RN@}]X~Q D;yܐyx] (Oޣ?" _p/(V4 ןBq/(8i1'El  QA( ۋ80;Y?o{@B hU1/q@鏆a`t fAlUT|k,iiJwDg=M)AEL jF)A0dώt\@E$}Qu)A dvĵ@CGk{U}͆G7+H$`TxU **]\_ϿvU<QYAHj #~ų[8+fׁF9KwjAо[iđ7 saTZ K ?lm<  [>Ϡ AB@KT`e?A'jPj ak n(^2w $ j5 o/E⪇,lPI V]0^pI<)BG.Irp`Y 8h{{V)3z%R c/|hڴyAv.qƁ7ڀx0 ,?!p[IG1xK~! !t R ʫ bԳS@@R'M0ӹҌx#|6qjd#CT#i կؒ1#/44]hG\T( [spiA٠bKTn/L.@I'*14"N#68Y = _0WbT5ךRA yT@n0xeA@/q+X>ǗJHPGsljǪ'&|x>RFsC LgEI4Gd%a3KA_n3HkGF+ L=޵+߷R- ^ g?8e&~69oMf-5h- {8hh\ivrkxp+,TGvú] ;I/8 c>.C q »]A#2: }4C6Q!AlfxO3J _Fh5숆!+BZo+6(̰B!V!o0_dim+Њ2GKNjAL&l60aA`$|#{+cCX!Z(\pI :m8 ѯɿL0Ca'c 02j{@~:=8{$҇4W@Ddj<..]D-bdmp bϦ oK A"с86: W)cw ~A o/-"b UQ]{bv'h #k/޴!7qd%zfiAP"_{q@Ag[uyPP-s%w FNlL/:n}( g(ti H q= ͍@Z#"؛8 pI#U G"~"&cG)[c)> ${rCY8^:.~nJQ}~bK!4-dk?ohm Pnt9Ũ(8Q2FDxK={9` llultYEBVV cW5XQ #ʐmb>9I8J onC5LUT,|),c=ˢ4825Kp.'ߕSCt+\8 c+3Jdk;f&\SV^p^Qr\ i@BvƐjI SƢ섢 2uSŖb* tvo3a3 ^\;@zC0Tl^݆~!_ Q=EQn_1@"ŸV'銈 TJ^qx"*AhZ8O=OR Z#8&6̛0[6ȹhοG #0Fb`AH}G^\qacO7ς(]]@8ls xPE@(>~cFpG`͎ $@߇X+ pp.9eFFS={V:Q8+jq_E%c u՟1ZuC;"q){0Z?1Y= `F"٠ 9Bl$(.'DvY *iܓe]l4QT!W8m sO"?x[; \huk,2R'tb0Z1OXdA e}oɸad0HG1nàȄq $NĽQA|*bX2[ϸy#wF)7#$ fP ( H&"_6^ I(GA@Ҁ q/o1cg8mP2!R t!*P.9=~ߌd]!Z/|cmgsM`Lcƛ#EWe] &9 א@c:""{Mǘ\ XoX 8F "iPopsO3NWHG D4XxK 0Dw:0XȢ/>c&H6[E+oD95x܃(G1L r>1x9;&I"/!G{ 1!#|f+t|SN.&}C1|yu ÛN>rGf/Q .:vCj6<}SB,+%1]C,Y#]0B1gЄx2& !u"א !#OЂx08#Ђ >|g$3 C,zD>#TE99LsZDž R| J >K'DOV=*^2-%)0]{.:@0%=4-Fp&lk =ҥt l?Hs^5G 3K1[%e ,ɗNҝS /Ax/#GM ɸDL h.f@Q7/ 2Ça >$^>&|MB&4N . E%r 9R4N'bز\`B1i8 [z#s aN_z 5ws9[Cl)I4z*.}L҇Lɸ48LiLe)$_:&_7f(ad9#~Kl-\93} ',X>:Ǎ]QB|Lz-SM. 'q/30d jf L~5ä2cs4Iod G;J,Byw8X!3N; 4t*˼asTq#~B=Δ4Lfʥ.hU玙дK%Zk Gq( aLIw,ii~CsfфaH+M7 Tx(3MhysjtdM# !?Bh:Оа<9}d״pGxBN9+hn̐epsg%fG]jd d%]ٹK\j^Mc&%uf\٤,hcGĂR:Ա A]L9Ȉ i$waY*xrM JI-d@u}IA$ɖŎޗ،VrNKIt90+Y>_# mj<4ͯ&ʥfmR[5Qy- hRX[ it $oScHwD9@c tH2JRQ,oF 2Ҽ2cu ~ x7YL.R{L)uo6tYRdS`C'5 }(RB8OGG2Yo'/< lpA6_}L:D9<ވȬuH0Mh!)Y(Qf#ԀzGР \EdAW0)#5H̎MT MXu8Q ߤ(ɝA?gN" 3#`&]ր ,k`B%+ZQb`= S7u&@Cq(p<^Eo^CxEI`ag -" ,N`じ,J,f0V[)RmQ(#eVZkz!F,2 v5(PgeSX<% 3VEL~<ա{t8]tB O+~S_@OAqd#) 7y>%GID$pYrA %)2%8il ,Gq~%DĔ 5>75  ]uP3Hʈ: U4JT1r<[ah,5&EFMHEB,K$ uUFkԉ#Y\ExVh OKR/ӝYy8II#xVxOR_f3mMHA%yOlX>jO_4s#fonHtL6i;ILDj0s t$9]A( hQn3ÍV̑VLHi< ̓RYzM+w+zHSRU-9*O"O 6#rgTEA) t[0 tPb0JK#@2:{(J1Ԥ ROɔ:0AhOV{ǎ)cn4)AKM'&fC!p!iS(|PDeulѥjO[ޅ4X|_pztPBMHI%ua:k&%q@SCL%,~ L 7*0yb +DKP*qܖv20DXX 4RQpGTA> QlD*=(Swp8OXSJdN K{M.UٕKhN! uS? q靰0g".:<{)tbt@T `j\_ZI`WP*8bT宕lӹ'SS`& 6LJJ{GnꞬ # hk0$P7zP%Q3TގX2^ Jk6S CKj'CgN ՙ*b5 O܊>pr/T^i4 ]+wFӇ"!}~HmkVa[I'x REIg'u<21OߪyN*HrWQUSOj{*4-Ռ_WZ{1F a\MVQߪͥDҝ̥RLPrO6T9UccB$ @2'!UAv6WU4>U $>ɍ >adè p@ jU%gqp ɪEꙕt'dln!өpu%OM!:/0Vu\SP-N!ȀB֟jtչc=jX abK+rgd'5U 2eM}WVLɜ\F؆ɣdU*˼"JI)xf>ނ檗:^ͱŪфٺG 56WѷQ- Wp堈B(}ѫ'ul!ge<0b+GlԬmO[0h3(. mtN[nkФ QZn #1B!<`LP>=SMtkKdE,R,lOF$: ZP< #y6K[Fjk[[V@U-%Xb$ W\+S\vVI_&[^\'QhiAeM"aj&A:AɺomLںY\!6'JfIuUi-Ҋ-HHmY=Dخ[QOAz{3kz zZ[y"M+t ]K`+\]zsRf`WZ%;;~·A*zNM )fL~N>o@$@B>0^'C]@^8Qw 9 լ^KЇqAZı^U3pW(z^-TH5ӼVG&"w_TVkD@MΛWu :y啴J+98zi6X_ƓЗbS&;*`3hY΢M1v(lK$ b+v!4$?%ÃV|=CU_)4SЇ^jhE)؁QNzEGtF,F[z%^SN$u:Q؂`5Te5! ?L`Pjiz='96J6`@onЏ6Ūy-lq3nL=Plagh:,h"4ym,$_m=J:Xhyiiz5*/{Vi{>%Og*[IO %"سk VΒg JWsEARG,)sh=Y8CK%o̱Qa{}\fٰ`YD}.Z èBMhbd-7腎eU-Ws 1!B *͞ y±2fq0v?a2H& "UD|m"j;dP{ Kg̕&LqCHv]]A6V_YiZs0 &hy ,VЊ>{ h!ƶֲƨH\l!+Y{5N-m4Sxi +yV<~cZCXbA+-5v/%,X[jv tZm[0]َ FWPkl3W˶SӾl1;aaXɒf+˜bkGge [_jWԶ-be "nVEr {bJDrKm\ u1(ڗzؑ-͠rزkFڳdEt*x(c&b6vQAl dy `_0 VVɖ08>m aYF8ّ-=ۢ:SZ4q}(4l[ (N;V5t-veSC h7Evd[LzYm϶nrkVUgϚ*ڑIzK5uӕDR8Ҏʗ-ʣzAu4:AzIfM:5%$`{e?KC ;u[ƛ@&XgDZMLԶ燼 ;l`;` 5\٠xk8R!r(  ֳیf =gnY+QMƲ~Y.labSƢ{tNkɳ۩V߶p#g1xc!,aHƽnq\bf5؎A gǥgA$R@z?@`TU^& \4t-2|mZ&9,#4(a2f)X)ȦgdHXG Ze?h&{Z].-D_vQ簖\DB ]N{UwY:NhUȜ}qk\Z!WdI}k[\֓p=-;s2X[2Dppzׁl6_E[VI,PdܿέA%Y>Io苗E0{c\\T:qc<{޹[õ?@$]{ls=vuizf4mQm7%bVjېZUX0Ҍf]{eNԴJٟ6`-qEuw TnsY NmY9Ś5r\%MWj^tEC_6kBrJE-S)*M;\L! ?B\ل) ]lZJ[ٕi̱ eWPў\ @vnS#ܒg.v0@v8#A8aٺ\qq$v 'e'qAmR۞ܫ&ѿuZ)vCύld%WZ(c =5 8IApۍZKA:ijr'QMnAr!|)6:{`A 0uSf ZL#Dž}Lx {kujɭ) ֗DŽ`k˜eH.GS!jwxpݶ.4aƭUDkмUd\,\ >^5#0r1[:c !n3qJOn6;H:&燈bLt=-iyYZJ}ϪއmDL˻cG(Y|- Ádnx+oWגmlsM4D4Դ60@y/okᦉ xICwAu Ņ7gaHV[ܕNQ+od5@T݁1`Fo2GdHBhO^Ωa|yM<&wB秥ˬw'֥Ko`؁{wŭhvʺb-9+~ ]CG!K5f]֬ _/aUu^/u+b<&T$zZD扯Zs)?Whv  |{ތ׶{qTs,]M tdN/rqh]$/n;G[qv_.͚7y\M;E| Nֻ#h\x}i~L@-^{l~$bz~iH{D r__/dVqTq-Y'l}!%$+#r>BoLH%ϦlϭEDFd+O+6&kd~2wH-l  !xQ!ГiR_7}~cK?b-҅ "]*oҷnAF$H_w[ ":yA B@@q ԂOKnAF3":__ ̤<RdjW칡mI忕PK5l]@E$TQdd,Emo+-&A@ 0lV'Wꁐ42ү3=nd+5@H"w xy XhEﺗp|A~4: 0{`` *{pBDG$;%8\u2r *w*~2΁s7kΌ[LA|Hj@p&n|(A7n嗗Vh66 \2둭fFvR*bVڨBr:ku:iR^x0YU*`tE vf o=kRCxlAWQa 2]z/χ08 KR a!沂9j@b4BM;6MEkCd{` ׂz o A\cX,(ÉNz01B\ `ȼ 7C1lxvy\=0'oȴq)E#IGw>,#t횗KF¸ !G,0⿆aLvH-G0Dϙ /h u'm&: ;5DA 1TivjUcF[oH8!F9Ow psH+q+?̏=ф-2$s| qi@">j-3pu<#05ưRt''9'y6t^/8F,$B"90 '^ -\a"p‡@ΥxKh JLoM=%w!1 |q Qa;/q"j~31=}A!)/qbsqRlf_źUfGOOkBtÿ_bCd & K1)a\1 |/E[ADj%0"!-oxV^wXpS _ 1I3}qK#T5!T7vNxA6oJ#/tda0# /1cn},4݇PRdGn+㤱ըqk`bՅ`)ȿ$>&7l:}WÕc9);n7oCa㻱(c:XXc|p!`9LެqOah(;ؕq G^ϡ strL$ʢ u\#ȢJXޝ`|<Kc-a4g|s!R>VB=F%~ rcsb=vCpeV&a6~ S7Wb-w$uTb"!i9*E  ǏbGD!ǵȠ+-;y<1p.HJ%$Z#Y,uB^!&,&WȁGp؂< Ǎ"8~̬(چ=5~,`hx7_5425U/ ,8Qd b ]%+Cȅ7|b>h2!1,qHFJXmr% ĆB좩L] 1y睐;DZ1Yrq q4%/9UH&07 !~&!/;ưdWOƿ"+aʙlGA V'd0b KcdS[@H(`{}ڀaB7禡|?4\7 A@'S;=9k@18L+P>\#d8c9(Ӄ Q24YtS  ӰJB5兝NxKn(ʅ'C1*!l'.ThT0,J)W# ILɅTwsf ŷٰqF rn1-@2#q9QHjC7D \vBvaX~ge3DL(TCh&ʁr hY-p@ˁa&1;^aخDwUsʏ7I$:Xܖ13SVBHPD-crhyL+ -䗸!CmKBvRHp`_Geߦ%, Hݾe$BQ/ 0lzD-$4BB# ̡2{8 YgƤFA,i-*aC~Gz hi' T%4\tb@Jx2Pd81rwS:vN{ _gg,UT?9LNzVE@ʋd4 uGMMlhh&QB0Ai;}0rmn(fktu~:2(9N\a[dcqK*MmI-pX!љ8{Fi=mLI^U]l"VQe!A3\EC|43W I2|K"bvOo% !MwFcAn6/pJo}_KZ ](: @ Jd*#$AIѽP8$j8="t@,D[΅&Z'&NKC"(uSpXl&/(7|t7=2v :z9Wa|jϡgF^~AdRaeRҗF54'}ICtӡ K/t14?GTMHjK<{z9ALӵJ؎v{&לruPD"4\dRoԲ((;~Jcqdvl0ȿ LK0V)R@/|M3T Nz}GٗwTmt5Jp36h-nQOv8@Go{R#~7,5xj^J+ w2 V<Wn: x )Ht9-}/%P.z~q>"%jLjuH嘵\ևUrOَ+[IuKBKI?y5Eh-Ƌm;]&w fDž4u5 $tсz_kt ufXYgB2㌕>  :Jm 3&Ic|GY;,U3 L(Z * iZnΫRۚf^!Ce5OT+j uh6`g+'F݉=xc/24s>]ӮG5ҧJ[/!V|o0!TVCöؔ#հd0ғ.O#>M7Jp>0ŭ!dM+)a-" EZC]I3-FS_ٙ)W}_&FndYc-bLF)|lMDc Fc U"siV\βk՘s%)l[{&FJ"v2Eii}%FaƯ*6wn.#$uj 9Ӫkix-hcYr=h|tz3>$dGLbpN&jNA;^)AU lL2SFdG)ؠ F1>u >ell Rjfluԗ?CG~5 dJiY-K Qd׽)'1X}L7SرRX5zG bqK6*1;s\]ʵGOk9g)̏dҵ.:; q1m%zġᎰ HPA, 4gqZ9hsWN=4/A&E`͹v0ff m+S{ 1ka5+ lm9l.μSLٙa%Yk ^ 6eh"x E*3_;'9Dݫ6` !&h >jș9MIfCkto#gx\꫶P 98%;=52ִ3*q1[ɮMm@mfdb(DɎm_XW[}Ѧ(REr@lcQ,؞hG1S.x #͡mI,VbPis '}6m.efR6+54J`ۮ6Ԣmk5D]RcVO92|Z5B;R_j 1m6RT%n/;SZͤPnI҅Zp! E i޵ˠ]ʍhX{ltXY Xp4(e99C\d@,pBKI i|5ڪ ۝U*ssk;h6g>!Z8])[W^ivz.dh#Xtiq_0n{k(e_pj!$Ipۤ^Dn5/kA,٢H̀I%P Xݝ\ zl_z4 =n3yw4U `f;:L5p3n\S%e{MBB?mo{3oSь-BDX"#BыwVpZVCn=I'HܧڀD ͍Vp1ۗvl֏Yd]imJH\nB@lqjKW!͍?Y`Ϡ̺kqx5#whDh{JPn`^gi6~d]R]޽x"d_Np=Lݴ_¹\-bk5Ly(V2Jždw%|ɔ寲-ֲFoݝ"4PwR;-?%_##L?fkLa` M ȆJp2dRhsxgfޜmwZGށ-ŲnÙO'Aa&9mg3C5!wb ZNR`d{"$'쾀{$ ᄷ@23?iTVThl|"Co+htp gK7P]6Ml"7J@Dtd;9 O7{#02CėS+dv"G~|Wq,v {XD`@%&zcL[5d l7W"@~Te(*ǃݛ}$XZ;ǦtmxME7{ff Gljcv؟)!r-0մo蛯+!Ґ=5y}K l ס[Fmo^7[V} R{WWFU*p,]ouNVTRkܺ Dly,V~:1 3LNQ SyNx66d N'ǨӌDsc4 \LIn"pp ;Q %1Dl~]'.^)':7 ~ySb!d nzaBBow&@X,8q$WTp 8<s>Q 7a*@2H9/D] ïv9̀NzJ3XJIZq sww%;wFEjGS̤,| < /ؾ|]A#[Yw `¦Wǐ` >Vt?D^ޅɎk&\Xyy5uϪ<5l"y ]CvNkzRe \Ů`c1߷khHz/Wjx%\1abaB x|2|d* wVpr:$h +cF8 Ϋ\4]xyNQ!rEŒ*P m&jߖ[MsgsaѺFN+,m\OD9߈'<-^1M3z >3nlSu&o\u? 9aumk`|ݝoP#) :#ƙ$tLF^Jw q8`+k41ipcw9Hzw: {8ePE=l礥qi#3m!39#uܯ / Xc'FyHb\J1o,E›8yn΀:"w\JD}Ѕhr5W8}t[.#Ǹ#m.g$d[/@NXی~/ ҏ|^ Y=mRCHB៓㡟E|4d1rqoWpBal%H~ /#puQ'Ip qpbզ#(Ab+;%zDDI`I.es5w\ wqf 4fē+mJl ?;9[y^L wJ03FC\9[^<|■j*|(Q=k}mi(ˣt *8. $0srY7COܘ.D@KY@_SG%'If*w40vZ$H}(Mʝs?)\yYEN~8=/cdr_uNAS'^.33_GMهLe'r[4S-2HI<+&x+20skC4S\ڪx# N.= WFg^mc&'剂ّMar[$áG S`)W |ӶSi%:Ǽ(khb|~(ϱV9hxF։ [aF ¾aүK@ +Ӱ#׳I7Eya %B%v߉P@,TXvMۃ >uP^A{ &-~w{v"~2[ tf!uR4䠅,}>u̺b/o:4߻j07WC?ҳI='!$?K8 {Ο3 lT~;%.) @=F iҽqe'BU}@+.(&7i8 c~~PODM@#QnTm:Lw0^d~h-̕80L.|Yx0B뽬~?-0IG]Rt#uJlQdysHo>VP m .cX77UWG;|^'?l/z~@~n u*d+l}C0%5œnu|,!\pJ">k.ѰxI|ܜ|'@ סx{G 3K8$R*Ḻ'Ey>Ws >VxZ)5>_L==xp{/z Hx+1z7VzAQ׊˙Օzy_Q_'Fx\CM?&D˟D_ț*ήpy&:2U.#oW'ߪd.04=ltA&G*I"U lvMvOނ`XEy. r3|ųpa%=h4n <8G{ D kD!L~ iɳW‰̮=n[M<5_bC쫻]9av&UW?WbrSR`v>GVtG JcT Nߋ>PYح q%RwݕƧ&J|oZ%.:aퟗ'67y фL{MyHLA1]} a3paދkwr|[sX<ѠF$`?#D^p|#MF#Ny<=9/?YF:KSA=\Sc&;`^oV:0 W!ߢ;3WK?u~)QӋSb/)e2q @p{&2|K^]/AfKhl|GOWUz 4WN9 ޏ848ʍGOC~,֭o:AKoRCqdL}J~L/.&c1 .Bf`8A75WDؗ,wRk} /^Z~s!=|CrroŞF5=c(iQĻKɱҲ2p?i\LɌDhc gԿP0~ mШ{ Tbk.|Kp~h#Θ*;M/8[З\Ԡz):7&4@mWK&NRZoR/l8tzC ԻƘ!ey ;_W DQp ~2i\/bak1nN@z> 2ߌ 5x(Qez=a8i&Q?䷞#~5\W&6grʼn`g-xc33AaA?@8}yy5fcO{ D9oX GߎvHz=n䛣Cs0>m v:ό0|*Ͼy=C ]|0_H V5I탥0D'ѶΤ!*"՗&f#)'to0S6`{9xၼcirex#=V^ܗ''M8,rr"gvFGqE'@ޒfٌfJQrwf3K7c#Р޵(/({;Bzo߼e_ ֐w) uko@ѽAr0RI;(AdrՃ]JYr5+E)bK-uL߸>w q"ߧfT/|W}?\ q ~y葵 ;?zDw˭^9M 8nG`EM5%(%A [?5g)08.nr婒8̏&Ͳ#~ހk9pi;jH s{u|RHڬOʋ!d*2/O|[~NлOuvCr2~>7NTId~7kN|6}R?=F'L=eM |-Z($s=o-XQ_)ky3tOIEsMk&o v>RX#@U?:J]|_$:Cд%BgHzE?&:+>U)I5u;So{?DEwzrr‡@ӷ;CBԼK\#[|uP@&LZ'G耼ctx@#gOO ͟ˆ*q[#/ iC.߬tޕ6Rx8Cu5}קoNH*R[ܦv?:FF>O#]`с>?ܿFf<]KV!yFg@?N=4t}g#sjgU,Q^߼/ٕc1shX81=4o|mSZ*sY4 !HbJްVsXI[tx v i|Sae0+ wEE/ I|ӒG t~>~@oam N_+:1Q' rʾ>/r-ov$F>rM`o.:פ"%o#:m}L(La/4fD) 5{.lx VJVN*g~i8bw'.g1ٖQ؏ğmty:/UOLo!S@gb̓ggr} D њ}τu"I%n @F} #Oɯ0wT=o 94i1y  mL%aKl*tC~mt ?Fb8qy=D&~T @GN"gZu|Sk~;{zSdm"~l|%dw6z]i{ y= K}gDdj{"jCe ,)B7 GxM<SAF{]*0o!z}Nt{ 88p"Iy"rTzX],lZ{MZ@"n =5 C pG =8!hHs,r@Y_}J $+)}`(%Gp ?C3k?C3)fq; _$pE i Fo_zla' 2~!  m}$E|z4C7c"xk>}X @^ ~~U18aD1_ xN56~ ;P}~aF 8@3%[n +CNje;|Ձ(zk3(ЁB?ԁŁ$hnN~]1ea1}@H4)`%n\?B^NP5 7oyI@dwB~]n /|K|䁗 U)P`s]z; c fw1`u=slQ(ʂ)Ocp1mOu2m%O?4GH4E4 PwjWjRu~b>RoUs)hă~o+m:9Chy1AxrUv4U}CCo D CC~p\sC hR{uv RgMU"[)~2B8HY:gV !pgt{^s4 Dg*n W&hpヨ!]Vll hC}xi~~Mv8'9]7rmh-a7C'E #2ht {W~|lH%#Lc! yO7˃[?n`E^~]#GC6 ~,YۃN7e1iQ HCBp@~+ Q`j'4+mf!5cD&@@v{F%5a xsn @8E85tBs'|ktz{YL/Jc~k & [%G{}Wy.@ %[' ptʄtX 6Ł- K7Qm t$#)3$YgfpP!ӄpÁl5 ؂^ mBʄ}|h)(@ bgփS d l%7slQ2"wg?Hebu{}.~@ .ffC]!U@ %k; . :@^+-d>l8yT:nx'k#?7|K, $6nU5ue Q?($ ht{MtIIe>{Shd?RHl'GgYs7QPL*e'ph\.-BA_̈́H[,{fbaiNkEr@~<! Gd`^i&1]oS} "/ j^u _/F`eBt+'p^ c5 !(|- e@(6 ZK !}Pm}7i4|D P!* v=҅cP jCO H5E>%mw<0\{Q'VD~qpTy::oomu] )Å\jmr)zl !,fDd#q'{{]I샐r rRqJ >ZRr0W49($ES[E A#2]R[_zm GT_ 6TrHpȃ$|}b1q+n 18C%>!7 d! ytE5 s„w߁$J)΃ɄY? :,݂m؆ccHiejOP,gSdo" WL o4YLK"Lp{uE(8ք5 RTu0!I@qwGro .0~kUo R#(*``xJ _^O7f\5p&T}@ L{׆fC*P 8&oX8Kw*TUD vE[C- LJv@}򁴇0 x! 9fXއjpЀ  ^ 0e 6ck1% ^T; #5 m-*M8R*9IۆJ 9h[9hzg*n dkU`i U~,Xw"E&h|@|E]r^8]ׇ&nƅj(- #wSކ.4A(%N1хx lVPYR 3} +kU#e`')`$; %*1c %} @|ևχh=b9": k)j!L.\ErK'C7 Gvy0Px ^7"sDt Zp+ [ˀcfe} v%YU9Gl}q{A, 71"o }mEIw}EY%܁ŁF>w'^Y CY*1} HqXt N@vDDH%EA7 pGU8> n=&n· 8>TƈlLc"]}NPق\d- V^^VR'".W }$t} '3lzAw*e gx;IEكwEEROTEqFN]@x^oY;xN\AREAB,l9h^LLE)|$({]Mth"FBxL;!s |J%<nC d#?"9cz^&9AE/$Aeʼn(0;^HAq1ec}'F7mJk I\5fj>N8"/V jr@XEڄX^Z'4i'`G(H|E %g@/kh<7Ql i5 rF d0-R;%HkHA G>huO\; TJsp GC6N>q CW^MINOI|HAhz ?LwLR|THwim-wS?- JXCJB CJ*}`NPkY@B p FaIP*ӆ^P*Ap xTGU xlUv O8sbNR Cۋ@bNjKc4 bI2~3‹]TIy](̉HA1X9Ni- Z(rG%po^vǀ&Q Q!]_ k l;}eZn Di g#7'9kfN^|^/Z&]["Mj#q0! w#{G#-4+t; Z$q{ LiÃ4C 4 l^ AeWO`& g$? [ e!H n^F6wj@O.h҄ m|-ga`[S ,uUDsZE*HsyI@ ψx8; o{_ *bte7mnrt!?V}|!  э  {(\-d>}RM}ލz֍!([q okzD)0?|8d ?4cXٌoaa,\n&7JvE*G j[X7;I ̉XIvR;*gRCT!=tIxDmeQam 'I^8 iJ[o&;)?TxSJX JNmC Lb@ yiQ*\E?'4]^?i[:\va.h^!nZAMa=S Jc}By;ބ5u,S>*hZƍ*dW*xm=\Uu-I{ 7Jl ʌX-IYs:IN!2gNz`,Սҍ]Yv}[S o.}J̋፜ 5{R(Wπ荴|(Cf 5Zr&f@Uyfg!,u](]sPVc T$HwP^{c cڎ5kn=_zІ wR4]<^r?D kJtXŋ^Qڌ i6KWAZ@uQ CXZxFbZ+2gBZA/6`c+Ċ((y>s+ʎ|~-rԋ H !'7E>~3&gJ4*zCt J8ю7J"{ojPbtRyI(\[CP=‹`BheMOYt?`=O8o=VdĊ.rj7AӏXˏ &o<mjl,"]/q& Jqw  ]#91D>{X3^NȏL1x ^A%~J3c^< 5XJpXOj݌ҎB74! /sg?T=$ [p`",Wf :o`Ő=3Y)\VYoW % )Q/iZ1*уe]&Ȃ2y~;xǍNMtJfn`hyX(0 $ (&{K9G6Nf ʈ Ŋ_{ 9恐@`wĊ9=ÍGr]-]\2\*]̐2STzA.T`h 2xQU ' =Jqt6#03mk7m)YFG?h }-\͈q>X[#-I, ?ʎ("84(7x0 >>K,&w3` i6Ph ːn_ Z}m1@>O|6/0Y2ɉLA9] 36# 8܉Mz"=[i$~7Ol)$_r V$$l~8El$^6Ue]l|}H5,aml `G_* jB? 1 QtYy q,o 5V| @- E]S C z^8'W@/t'7@y$Y}A@2@-5Z3O"9[+ O"Uj ej5}$aPOn$,3xxO LP $0xFˑOhOW$DO"o?Dk Dh%)sO0@ (kO "wHM/g K8Y r0ȆaooЅ_x~t Α 3;CU2S]lNE`w]'NEO_@NE'3 - %= XHWNE)&NE fG"g!P/zm}&Ox% })&OqZtsԒ.V&OJ֒;9d8R&O$_3ޒp_P\z~ dB8_1^ ] & M=YzHYZjJlx.Ow˒ \yS.OOZ;*-ea X<8ɂ L L *V L.Te^Rt0C)OȒ#I#DJ*i6O}ߒF,K i6OŎ=6O6?ay ftu6O_0Qk6O`U6O&A뒶6Oy֌ e,zsas,zr0`o%|C tz$l t},z!s;rI}+ =W?({CD y*rR5l92l9t4W璱}?J .{{8C9)s {*_9S1"IdF 3E$$tspœS8%œƒϓ4$œALt(֓G ^7@ kx gl] GDz 4tBN^ be`WK 8 ؒ$^B{ ( Ok}MCO$ ߊaSGOe:>LČ _#Ñ/PCOlLԓ둡WyoCOCpГkhP `,|)?wld%Ir33/MsѓBZZ%;)Փ?1q @ %sc%*}rRE9>2vȒtV| ` Y#QCV]}tXO?7Vm]XOxv[XO@$r]7V>c_ ȁ hGYR D/-hs$cQ,`)WcpN|s#l-A*%F y `}܋%"ތ+WA cq|dOpHZ/O dO ϔO=zdO") q_ t*,ה>h ߔDea/W ۔s;ϔ  Oؔ{EPu% B { &\.gb蔱L 0o>jd]4!G%ӔܔAUYt甯A8Z!_~AH{} q;:ZnP>0  !@u:%i2/~ 1R0kxt)wtd$#F/_ߋ(/RG%x Q S6Ĕ#lÔ 'uK(, J,V`T4uȒ$u %dR–ctʑ%v"tZ5{%Z' I֌H`ܖL7• 1 xGp)=.xDjR=oDgłD>VbE Ԗ֕/)'=5 yN/ ZVr㒇f.D@5k^ N/d$m`a3 Bv#*K)2 b.{.B ^3= 1yM1 3j$=E8NjMC; d [di 5O1irGY=X"w:g͊ʕ5E %S c> Ǔ%}d)P S7s|]ok%`ylkKyHCK mk7ok&z Ԕp%ؓ+k Xp&xDQX`4hBDQu]ht T+wDQ >K>Z`7p {_(/zHHjXoŗ̒3oƖ я+%>9v ,{o[敲@]48"|֎;P}*q/"?P 0h(?P9 9@sNEAd[r.JP#RE(U`c+r$!k՗:vք | x" TeU->t+?m t+F0R `y`t8D."w `tvZ 6"?Pbm$v4 Cu/Q/_.q,@|bQ=dQ/KňT 5/#…BQ efvKf.G1qeхzp!|^ x]JSfՏ?z;$zGNdnZ:2 yyÓ,> Q ~.2S~T\UPvF|݅^-Kgx Àh@)9@l\v|[їt @:Ԙv>)A!+rbP`򓙒f&D~d8GltOB<Ԙ|ۘHhB 9@QtI;B@镨 B?NGy{f lgh\CaG#iĘu]PfԘJfbuVM:=[e$tDyPA'+h2CW$F~ "Ԙ*P@ ΍G<t$ME4Ę7Ϙ"NG6&v3RqfP/3zԘ yfPyt~zWfPyB"^ԔFqt %,f |BXC9RE$X~Ϙdh,\vDSyGVlW yWPHm3匑zw31- D33uG9g@ ]L ] Hyg)&`nw˘[Ώ G%5yp/u͙.wf̒Hr\C"~wc͙\qCu~A ld噭thu oC Nf ZUG*jYs~}!RHdWusN&i͙-^Kș^יKU Nvچss_ :sTzәÏ4 ,͙eJm Pyz: ]% NL2\BKu Mѕzni=͙7&^>? gYN:+Lu@qLHԙxaO~k "0Q̉J]s$6^ksg Ak[5՛v>t, sZeӐ☣i t .&P/ @A /cs;ۅrKwbs!&* ;4pSK*F7o)Kf F76SR՚Ϙ@~UMpt&E yD$<ns7הؒbI`D~ hoo^zŚ$  cR{g H a˘j0f sӒ9*K}oSFf1h `t "r] k  V#a.2U ?oؙO ]c{f RvKsl6œO͕#*Lo䖍 ? m̜FKrzi~jba Oltqޕœn:Ef!J8L",t%ƕϔav&*vzaY8& ڈdS#'(9rD _0 kKyFy+4)GBCw,kМ6Oo; Af="v i9՛\l^`9HZ{ Vhbi3-_ל 6 I*L} | 2;nٜhYP9 Ix$2Niٖ  .}cœi8Ǔ$?;pI9ʗcIy\yo% yt o=DX.jf ++o$B, v)DI_uy-IH|DѝXDrΛZXcӝu-ٝoҝɜ "햶C sޝp=,A)X{2H^K.9 ctW'АZViq1.: tӝ ߊ@~1ƕ{ 坷%)'H \ Bu !!C2^UQ6Śzk}.Q@$ݝ+J88t/LQNK5Cґ^-a͑=8 0^ven:iٚ˘r(t Y] _|S-9VX[ _ݖ X3k/ܚ$u "dTr} !f >7jvV̂*HOO:.$@H:Mԓo " ьg%Ogٚ7MM rEQՓ Y dyؙ"  ~r~V %('k )ɞ'4\)Жxd.'G ՞G< W K lΝrMDK "y .]昼1_bJBZN r YBGpŚ/$ f E53 W$ę I(O $Z DP3#.2:4O~O4dh2T IdhV@]>qz 'ٚX|{ Ś qt ]Fh*h^[*-P@B ^ DQ׀T F('a8(s^g:Gs+>.rw͇͎ҝ.y/Bs}ZmU|=P |= &𝧟 tzt|`EbE:XCcb\@=z\w:{|V-vP HYzΟE}>@;xq _\k$_cuL%39 ٟ L3I7lc#3L-A7 %yc-w1 Ǔ3(.+ M9kWP  +GHHOKlhO៏rԔkQɗ3w @ ,j2ݟE $.9ҟ55`&$^ ՚0qkD[j {ZȔH yb=։* V i)ib/XΟ(o-S 2.d,=ҟrs|3z w0j[U,)(mvsg i ~[rk4ZdV9M#nEgTfV 9P{y+R TN[3Q { 2m 0w"?0K/k*p6dh'|RN\6_à\Q)ˠ$z&(zh {OwWbP}| k&h T0B P0@|XQ, v\QgZiS~p̟A;'e!CN& 3S kQa+]͞b៸n#ts!WZ/r+Cߛ=SO:$ğS+,ޠS|Hf`TH ܔQ\Qٟ ~<+I/2D HYRbx 2~A!$% 5N& )WzϚ6% d_Ϡ5ݘ͞=+ "Gҟ4h\63: Ud4* 94B sH [&g| t`ӡ&WTgQ$¡gQ yrڡP s0(pGZ5~ҡ5ŝΡDӠ69BFxڡB'Y:m蝣 \Pe:C~ѡ@Dv vv v|=' 0 "g̒Ԟ2[j] ޘ 9b>yTPb։gN ͡ڡ^NkċT0$Ρ~Dk tڡY~R,)A 7u 3|X͟ .z u k dƒHrT0'bs\ @?sjѓ% PbtR/ h:*!Y >ʡ'Wj q?hF? T) g-m} H(R 4jؒzh% R 2}i3^R aL~  qr~3.W 1Q+6/m(|l mQ ND G )  EgKN   ^؜AxWh./ #:$m 8X<,"]H=%74C0xo*Jj, "?m31Gg"BpO}.J+ |h+iw r<ˠehiwKpT #d,IHqnҟIMPݜzqnLk@ ,-+4[Z{M+w/+c;%T<!oi(Cw/XBKH&V\,2 )Kr -p|f<Ɨ Hw@mW}&`$ʣ&[S0ÌKS}~RXsң d$|£֣Fڇt}qɣ YRK 壟LhMã>񣟣 z}٣Q@ڣ| ڒ/YL[QW$zTB[Q Λ $U ! %jQ3ΣAMLRt/zs<|]& )Tn;$}^sl%% 4pCX/៞%=bP(4X  9UȐ?ZPFT!' O m磁Wٟ&w|k l&t0c6% [D u!!n4x'1QFqYT / A{F # @\X*x&J*p(Ur ,O'\<EG]<(+X*'7"!(6&Cҟf"ɤ!("\!( n']3Ҥ &hߤpȤdl !Sy?-"|oPV',fyHP{y֤ (&O5/4K{YC M 41d}Y@('rOӠI(rbOo6.*iϤԈ qߤCZ vf4U  8ʤf J៖+lSx@N |U\^: |,Syפ K>1MUd'e$[% OUV)Vr HS?JtDhZ3m0{}$! - {7z ]tTh2[yOˢ  fQ  ] 8Z$[ejO'E-;)ɦ֦['VZt6\"(IaBr) !jVT+?^ ֦o2 ҟ~bFݞF?nr0t;֦ܦBS.2awQz覯2 Ħ*c磯Xab3Lq;󦢢t >ʘ v@, qU(xw8D~|=1`o^8ئU9b`9[u;OyG: ]T 3FHF[9yOWܥ֢%8kҟ|qj1 WTlx~O GK \5yC ;wc=YKY\,$} V&Z>DZ ݣ3mw/ 9"ȡ ccj> d*x>~ ݤ; 7vXXLHI*Y [N [&D[&Y - L˧+ *֧$4 G I`d Vcm"/ QN z-.xOgZA8 YYFD7ؒ$v4hWE,E] @ zy8{y-9S`̒s$  [|ϧ-_CC`3 Z fA^>ܚZR?y- CqR= z %Jjxz yD< 95#J  R1p( EEY ,ES|-%URק3[+Y3[!tO[^M HBMo1 R 3Q bCmt {Ĩ5{a{g0Q /d]a8"6P a#vl $I(gQ 2] A(Xtk!mi?T -p ^8tpʗ2M ٓȨH--|8vR>wBKğ>嚚vpdՓVPx9n.u )c(Λ,mhI*9*@xgI|Gx%?,:X7q;Rb&P -ji:Ȕi=CoSc4w7D yZobG^R@o&8{,E?z;2Ũe騫'!Z ZŦ}x9^ (˥|ƛy,o^ ,8`TCۊ˜&x1R!(JC_kC8Hԗ1%#vԩ֥ Z[⤭ snjyēANة v X:O-:!V9<ץ̓]Y |4y'sWptS5aT,שZ S5[Z=֩ 5z 5e 1tE-P?p"dItf[i+37\>$Dh f wDltgh )~ FfBXg_%婱8I'P fsw Z l*Û)QQHd5xG'[M Шةj$< o`>R|CF yB}Y YvW;uYpҨk{A4AXgYghyޘJl"lx2;$[ a 2 qARW)0$.4֪-ugZlX7P `}K'Mo%^ ND)z -e2R;kW ȪӪdV ܩBl:]kKE+Ye{J:ӪVySgr[ܨ+ WmC@S[]Ц&v-]*3ZhߟVP S6ߖcEϩHror\.v p{@zѢ\q\m,*d5{c*Rl1u `z=2 Vօ)Et>F?^B K=O r|A]il J ԀQh:>HD B|*ꪆ̪%Q} |ɪ8.&3wR;)Īɪ[ī) ӪV`ǫ䨣'8P H*w&(%;gƑc';- @dB/Nȫz *ӥv\eW’[ϪСE_4RNWm\ =% !"-bY ]_1 ?%pl;|, O2-/)/jY b~;xKwM8MK;]| p^b"?ed[ZM}}Svke@\cҪ JeP>VL~Uaզ)} bfwm Lw$8 g54] 7t@2 [H7gLދ]P NH J \ 8W?iK]Slө ѓūnV_Ɨv | zHiLi|4Y LJ@.gA~[Pedy[{ I5r="o|֬|ߦQnΩpPdI uWoz /vY,v˫ϩ A ' ]DE|t 7)nlH.;쬝n՞ة[$0)(]O+[,/r ɖԔL mK%R6˚w@Cc}L K@C]<T6v4/O pOs}$Vş?MŖ UA謠, ?  ^d?iR;>(xu] iR тZj/8uRwV P!Z- ߚt}\n}ݬqKZJhy Χou`=Ajŭϭ0ܩo6lo^(ӭ #Y R$fڭ߭<4ͭ_e =(̪Vd-(l $Rz $TT%-sXnb%Zgݭ}Q_T)6w5 c-%=- Gʭ}C4J$)^&R,k R} K]m4 %2K@zG 'B'6n­ #B#uw֝˜TZu O 3axO $v;V8ޭlV{o??=b~R6a`- Rtbhv㭰V_xѤ0|lyG4 Iw̬VKDCg R)*/UCn}m%:%}[[L4Uhc|Ȣ!ZVSV l! *S0;ݬҥÊE$.2}٨ʞK! ŪJb:ݮٮ S$ꮎߩc(ۮ(ܩ/ "H<)ċ;IO񮲪;x BX~ήe|A@:^@OG #N͞®Lr4VwuU:SNc.=|(RZ I.LUfz? ΆQ o#|EGD eӭ"Y+yOQ%`M9"sPQ 7(j}f ժ 6Ш/ՕQY 1-wD}Cp7 + r :@&4=hF Aө13rQ*Sfب H(]ɮ)f{I0Wܗ&) @0h9DojR78aH)ګY̫د?Ҡ}]j7qjFiFi $=s3`fE1 sޯDj_ׯuw_Wz4Fis Fr~+s&@.CsP쌊6p_ l̪~:eBQWW(ܩ&G^)_%;ʮίH[ 7ra)I- X!EY "kGZ  }i "EQx ;娓u.xB9(mqk<| ;}vZkk:z d)% BE˟k%[!5^>8 :D W1 E}^]"ҩc $◴B{Zeb>2oq`Gf]tٰJ n 9^H`r̔5cHת o 4^H#jj#؞h DB(Y嚯*_`A}(Wʕf`Aӭ6#d'+Aѱd&&M{p*P qaI6l& ]0M`H;ūNxfrh᱊czׅ2Yp+fA%c`MX @EIܩT  ݢХ& 'r/9"%-u K!=9 pHƱ˯ `Wܙt#_=($HX:,[<05۱QȰe89Ʊ`8*^.REX03XXRh$`sܚ`  7ѓ@z<'<&p 2 Mmwz_tQM$ l|VVЙ?]^^"T3SYl|"Xtwm 3 VvA9g 9G>DzL"A列0\ ѯԦ{ײJβ?aH,C@'B ڲ.*^ = 첾 m3\ J ݲ\V2sz\'H'^La(LaZ>*B Х* qؒJ ƲpHe"-',@c,+ R z9(Λba0Lkga( .FxAb$=[SD/S&So #B,mdyaXO@ӱRm.\a +b˲Jw0nǯk"ATW$brCxG; J" |YֲIϯbCTvҲA^,dO7bm hGsլȔ,[|VsM6'C+ B6/?1 4 lw0m܍r³˲}ڲ! Cq ; (n*$ c?''XBɲYֳEm87 iw|vf賫NFԳ ;*uqkH@ coڱֳ]?γN[ܗ wI\ u@ 7*uYʲ Z "ږ"Ƴ˗ꤚγzۯ,^ 4ՓT;r*'PَBt.(k۳7uP+V ˲w óyZO>[7a dQRhme}BV[kf|5 >*dB />u`M6 vW٢'3H +=!ol/! mH   ⪅^A}+(QW+d.ͮJDB#0Ǵ  SB'C>p4Ĵ4Hpi\J +&  n7AGA`Bwm*ȴm|m\T@d悷'ܰ HBpKn-"͡ qxMR .ER,>BWEg[J }T'γcZ]@n*n0{ĬxZ\R//ƲK˲{A:RlUR -ZpSۢ%V2*HRh-R ` [K߯=m +9aBFx-|C y *΍vC ˉIPô|ffbqX,Kgõ^?]^>T ׵+_{   7ު L {k. = fµ#q~A, Tv#|T_\[Jl }5>m:#۵M \wƵR;< άZ$N%-2赲f\ \&(|*?V+5hb\ɵڲ@L+b.ABm j( gYb*B[Lޙv`eUcNӵwR xM&l!NNc*JU|쪛^d;h. }@d޲GdͳVr qflԔr " x\74ߵĴj.?}7W h;P$cL /zEhϲJSy%iֲ7AdE@|[w"LK}P;}9 ^}.QG 5ڶ˲+M"I5:6,ʶֶKm.< 'yi\Ͷ~$[{]G \sƲahL涃 ^='ö-JKu訶BF0l-hsb ;;d '[;d15`B1+%) T9 ]|x-[ V1+Oof$)(ڴ OIwܶӯ ^wڋ |..zSGQt6a3 $*$bsdn12#6f̵we7  ?ⶸ~ܳ pK.>v²JldE>J%&>7?I H=2 ǎ Zw<Wޱ9%31ۨη-3ZE< 2۳3=W >JF\y`ү󵲳%r[ @Q8wE*)ڲ!W!l {r=D whB#bP۷$S9(cص/SHѶogQq6]"C9]1d|m; >rG*ѸڸXeiU;f"$ FиR3X$ ZvC'$ȴ'? B~] 2=5X޴# q?252 ~/IC (Z] e*t3ƵyƸAPJxʸ%-?2GH)(8Ѹ`3,QIOoFHmU޲nPi;gy ś4٬#YL+i)kO γ):׸ĴJ"Tʊf 1q7 ZxR\~ ruFΰ6 0QzƲs+0~Kb Z<$ku" 7g"bkBnzSi,~h@ؤ}&]5=˲5=yHb-^ Lq-į͹ A*Ҵ;rF ;Xt yc \'U@)tk@ó El=UKp ,ZVSBbw /2w1}nC#vkʹζ= A/T8ު67q0R?8[*[ . ʗ YԹ0ι^#c#(  @XP1[blk ?nɹh?,!3YaĴj/ιsT乄;,^6؉ kcf3i1nuSy* LC  $6x&׵?j]dC`?f!%Ju׵Ȭ* E O Ɨѯ׵I8^8`.Up F,!iT/A fQWf^ͩ "b^̒|h>| "Ҕv ,b Zgt$nK򺡗|M3~j/N=U c S zq ~dnHQ>ѓ/ sfb{/ /367x yؗg 9j j 6 oC qbAkR1c/|8c0J$3 Gp yZMn:1j}W~}3Skm=e)U % c{y軖bjBkBT a;1+duGOk]*81xݻ G]@!EQ軄e"k/V$,e[ mL RX n '?6ԼƼTvܼ.bd^ۺ:mDͷ{aO "bμ$&jmᤆ%-ݼl ̼Svmd c <8[}#Ѽ@i[v[ebȔ;%"߳8\Ñ٦Ǽɠ|١+ mYU䔖ǼƁҒ!ۑWoһH&g2+ɻ|~<YOʻ)Kret6Pŝ6T5p b.qнc 5%ŽǽN?U X%C6 D09}CTlټ6}ԽE ΌڽǞ3 TٽһĖ̽4 fn? aμlyLD  " ½h ,Хo线r8y2Tq=k,bD8轢TfWNǽ"{ ,15n# ܼؒ/E4* ;c蓛Z4 88~Kg0/3u]q$OYf#m~kJ&wmFrlֻK Mp:y 59 |ʗ>9y%_'B20нFSc(nT|DSȐy4(gW,߫?Zzz2 ]д'轧It>cq:hpy *l[u]9<]^ҿ|=տL~*yn $ci+J\i纃D UbY9#`2󿚼 W y ԎZ(W  a#>ֿ{m  qW`i5=ޮp% Z:uSU j` D:[o>g#>~o+9[E H ,Jjy 8;nq9B9>P5>[ O3ޤ7O9SGݏ yn$HirM OZRV$] q zEucWޣZ$OzaT zI]vGn>c$~Pn؁ g 4 l$~Yydl$sw3p$Knen&$ yy,}T/NJ/ nfg[U:$(Bh un$ e{FU32 ?R!оFy`+9 $;8 ic ^cryWD)ٓ^nPZ $^Y c]>c]̂_OgmXc SJf3w1ǚE ME#۽)1 ޽U( H=\|#q7%,u!W/Pῌhُ ghJrdT]d &%=9.Un0%VƣOI-sPl)z>% ~>xZI<~-sG[ZGaX i ) kD0ک[5I"[^R PQ8T.o5]TՓ@sN꽜yjs#1m>v10͵s%Es^}R^<uOgj| N޶6VWRSy J+ n 3Pn9$ TR՟}EU T%tAʗQXo&jQsI%RXdl,~eʚ \䔟65(JOSOX# /:T;NEHb / q!NY) RM<Λx< qsZ#vDQ~ NI7mQbowzb H^ n ҇E`R8?QlM⑥eQ¹W0 [aTETt!Ò 5 ZFmԧt¡$,¾%$ns.sEu} T薮 ؟3XL}XL7V¹# sqV:nPқxj[/r›CZ{Q}$(2FU˸ErZ6 F!(Qk^4F ǪPtA4peJB&7†5Ҷ  5!TZE^‹4mt$ª p-hoOn^yiܗ]p ;¡<%"R!(HD R -=?裺?'l"+‹L[pS|q[ 0d^!K^SftؒJTWDy ''^&oB)#V6duTW&ћcIon:_lA.I8ZQ7h)9R :S";%8&1y:Ge~Î b.Z ÒÀ2(?"ȾF6, p<Ӌň!TgoA]s&$î x6ܚ{†ü ( ג>D{]=‡Q .Û M~ѓ 4{X.J1^̓ +0.CÌ >,5&h÷aT/K†Eh"9ý p/uG,9-kwy[FͦgM;P绱 = ıH@ȔO'nPHhÀK6T Wο['ēGM1X)ĈF!bQęRç<<6ü ';Ĝ7gfto_IV P_nzE$ĭva<p~O e6OA=N8 w"ZĚ!ğ&71ͼb('HwLķt.zS(6s ¯ a!jFB"pRFJHa)L;s|J;tvòt6eu]ǒ_"3)W3K S¡꒞įgk^PjVz y?T,†Rd-^ýki<  r< A2!Z L`ę{ ŏ 1 fD'mr ?Į r?1'm:羙 o;h%^5 A= @CۛSY B&Uݠ V6vϯQ^ q;Kahŋry$_Ũ÷c Dߧ!(NV ~0L >^>CB)b *6o Mӧ~kŪ[K/Iv 0mb]Q-- 1>K˪7{5Z@0dLt%F$^x(創;(5'Ŵ7BFhvŔ@ ~ Nu"M{-L)]E!( 9t7 8Ōt$jYE(${g 9- V'vÚĒ%b ĶI#G:5vP¬!t t^4Z 8Cŀ jYWKŽh* Za.ïTʖlvZ6vx^4†mۧ^4uNc@y 'C^4ŒSF5Ƽj UI@aL!i7 ų[08Ə ,a;ݜ_0k}KƯ_0PvQ Ƭ ػx0DPW/΀Z@¶UC2nŲC&s 1t("y@v-oi/ 4w{Ffƙ {xc(&ZE('V.Â" s͏Xa_[%u8‰-~jHJIH[Sߏ8P  Xq OHcu!uƪ[J #_OƯg Gư]3t-DCƂ˸cz!(&ųƍ[ E ^ƌ%"V oW~X}~ﺏLC Cu,s,gUsƍƉ>re lM2)k`(&be4 ċ NPj,m_yz-hUzvIPpz.vRÐ&w)øWBOb^yL ;^y=pAI HU4vcə} Gz`R6`^$ 95Aɔ z?E*! z*FVףG|ȃ T!*RXH!JrWk;%ȝȴ XW0$V6þ#`|ēuƮ >#Ƿ<+ȁbɒa%*{|1wDt-=ȳ ay 0ɰ/lȇɤ".Ipv^n.2 uɋȳ=Υ#Ý8aXȋɏ{#<ȅ%1^/0*KwC>[K/S =*Ɍr*Й*&JĤ#R>9}2N 4UI`-AL *\(z1sȆd `=LȄQȶD+Ndef ʟǠ <{)G?^ޫD+U{G7D+O}D$ƺʊʨ &y H"6$Iٴ+ؒ.y`Q3YUlKk7IL,C=<oeD[6yN/MPCTl:y ",nTʋ Ɓʷ\ʅqʮJ⻵g1 !ɢ R°+}R+ƑcʡL[\vѓLȻq~ʉ7GʙüSȔ+sޘ+]*S,<ʙ^y!/^y*z E,nʿ+O+c{^5ɴʹ* ΋v6%豖P^gzÌP^+KɲBAyy ʪtDWǔ~+|ʶ8dE1"Í$OʕO8gQ ƚ,:h}ƭMM}Az $ /B8yI1)¥18;,3#ҭ3,cv¡yg$K!ue/JlK!̅H/tdkd Xʝ-O/\z#"=D.b .%M ˣg9ˁ#橽?|A,YCyUxC6jTkWܾ/eƗ1wxMhpk,{ڞc q 2Q }˟ʒKi+X^Kó$ɁxHS(v =?'P[NvS3+%% .2`EA˵D }f(ycʅ0b @#˭t9Ȟˮ,>BIɽaT^˿jzI^ N6Zˠ*ա3gacoDho/8|zV th ozI^α uVe^D2~ ;HrxY@lv Runk`1,>*U!7,8ʝĵ)P<̆*=LP ,C:" A,cPuKy)햿,N.lY,U2[P s?Ӓb:xu=73jB, (֯Inˮ= U nz_$]m̶%Z@WARi7D ]_˹$Y f¯-=7Mo 1P[ :Mƀѭ:m.t3ɩSe:1gʖ#uxj&ħZ7S,Z75̀̊5Fݜo"uK5P}i6wʭYVƑ}) 0n,̷Z >l̕-R̀{0 C̱f̎o\!͖yΛtA,QƔ̒]-G64 x^B Qo5Q˖ɶ [\k-y k-M gʀ&v,) Ovʬ,ےA= uK̺Yȃֹ|r;V ʹWw|f:kȨApCCf:C[_ #9 ͑mK{Q(.f:( ƚ閣-\T˳XeoșV0.͈ Ⱦ]_I=e}Mvz6(}"ϩ AέW}W4R,l)#ȓuY㒟"PPڠj}f{@$f9 #1|9f8'_FЈQ9U7TlYVV!PXʧ\UT_͑Ș|ϡ+6}N/1[DY o>І 1i 4ρƵF4[pIף ʫ"Io}@Bk3N9 (1̗|=?(72~r7*ssQЄe<ʖ]>Lg˿йre/0Q?IsBƧψ=To3LKl>&cztreПK LOm Xʫ<>˾'I'Qɥ`ԓЌFxW-Űuϯ<GA}G )R[87:r@NL<<칍]cʂy_`k̹J2|-/]Ϸv{qϙ{ʥ{0l5[9BA#|Nfø`ΆEA*) ,:S@ѢMLѭĨ |F~ ںQ}g xkY:Bː&[0|ʥ Jsw_2\2A; ;ٍ #OMCϐz@drneW}É2v3BEo|ѱ?kь&hӫ&XhZX%u^M }*ÅZ: wXӷ3#ӧVwLr6L:?,+MPʿXaz"dO_] 0Ѫ\"^""ʜc3?'ZҌ 3F)խ y&+?'BNA޶&3̵d&33WDsWZ V[Dj @7Г:3‡͈4O|nɩD§ 15`-)RznPӪ!L9kX3H . _*-2,D~=y* B'jβP "ZvA%Iԙ^A V]ﺗHEHTZl1tV! :-`D(1tZY-҉'˜!17=t3z԰NCb kS6* d)03 -4E~ӓ2R-"3 Ε>?tzF?ӃJg_6> 3g 0DBŋ2ԊE;V0.ٓ%QMO_O9 }԰+ %Q(EI/COo k ՊP^a1Z$a1>54,} 4B![ r_)IJ  dw/R<)dw&3iTAi Ǎ sԍ ;@AgI :SR Éu՟)\EÉ;`F #ʗBE*Ni #ԩz OծcVVe԰ h༌ϼFElDfԯ-ȒԙPR ȷ9:lep՚մAŲӎK :y|ӤxxՏNTg8tmvZȾ4&Ih(N~AH <k]wհIR."H 0M$xՃo#ggo:#fӜgՒvrGJ;T2+ՔU ϯ44SvqMԍ-KS t1Q ;0 {aVjB CܟM̮pԐ@-$_rw ͻ rw !}ԑb A@0 Mճ΂Plֲ A0֨bԯ8̏ź=K~0ē2ճ\~|l|pTՙh(b\E@Gw &4 Z5(  =2_l VE7eYJ8dԕ+pJs֟0jEm|QXrjvE$SsЁq׵ YWd[iԦCAְ֫uF%U(dΛy`U4:/rbΦeoΨ/J7ֲ4門1R׵4֬Н r$Ј~ k@W}I,U֊L[DRhJ֫wНd|k Ӈ ֒0 CZ+-< r 'V1Ԧ-#]On0^V ʆ빞UzS זFtԢos" gփՂ4ԕ# %I.՝X\ rdkQӕf->% '\RZ?O4׫3և3Ca՘f= 1ŇՀ- 1;כ[֧*Ge('\mց rgTZ$fEkBE=ֻMgZՊ2;h5)טҳeӯZk+1n ןAzׯ;&$܄U g@WmeԙnZԣ#+܄u;Ֆ,֙mX @0>&BՃ sXpWր  G\tׅb !R n/3;۾;Ԙ[N׈1,l 4$ԑ^ժHΓ׷A׼4קm=)NtH םMl>;1|Q^6z!׃e8m΁ y Ż;|=)"sBwh19}!ו6;-$؄O[B,y Ѵ1[/+B_@bVʯԔ Zc~1(ϡD5rZW5x Jɽ$R^5#عg9ap2wβ'G}5؉Ac"˝)T t5ȰVL2͹J˙)# ,˥ 9į 4x_tسkرS$yӸpJER$)2w%p4s!z;0qBOe4K$q=1^=65ӂʷӬ5 (׎oDl$#pC{2T?np}3&/:r58չx؇ h̹+Fد*$c؛{~wxRSEf!%צubԤfؤؐةS׉sEӎjٞ )2؃ǕH+M0gֲgxذ^`yF1ن ٛE>Փ%>&XB%”o%>'۱"=ot[[7\L}Q+ db۞?91iZcZ92qA7ɾhc_V4'ڌx̣Z⥮RV#Gm@F8 p۔~ۗ؄B؀ ۈFWsՇfo TdH*RۿԪՇZۏ`,g\p "ۀ;ۜbw~7yї{=yێeL-a2;)»8n@z ,S8qbx 3ۂ39L<"#)ܩېAܻKm)paד[b:q&Vƀ ˘=%hdſz͌܆HK﻽ lU; &y8y|P$L:K@B7ʋȭh ' QrcP :UP2P :]q&YfF?"K*-eZ1K"z,ۯ Aؽ9x(ªlm8%GԻ :؜7ۯ- Ֆ܊9a”3E_''abQ B:?u!oܲ V!=L zO= q*<Ϻ  6#5܎"부u*( m܍ :'l^?(=_-˕ܝioܴܜn%i+nNtbz g&zS&/SS&R؀ۡ`O;uBBCS& CssĻ>'=am؆qb.\9 :;a44!5) yD" S Q*2$Y34ݐB0W w4ݖ̆ ([;m5ݍ[X;ؔ0ƾ$@$\CnosoUM3k0& >:X1wQrʗUSN V^FPv(2ݯT|#U౎y[pv'by݃ [ [zpy'SA#Xa"g:&ls0y'J)(QՔ*> `IbdDzG݃N^;Ŷ<`oV K+hv'>XH4U 7X8ݙ!T|Ff|F!`_bٷTxLmfms4u˓ 9]3rZ!ǰo;˻ !P, W<Ζ#Ԣݙ* L=]0hsP]PV]4(v6:bڤ?$XK7=a (^CrL޼@Y3pFbܬXmܸV&brJ g( 8%gN/[GTvLFH<֥O) b/!z0-PL݃y r*޶h1Zo]#%~ږ8 3 9(`NbnyV&pƋ]LvAg Tr<=1# diLӓΛeHzeH#|/HۜݨL5\ ϯ!ͼޫ ̧Hqq>ޫ*9tU= Ɨ =RO%4ޟ%kabUqʕitl/9~$Y~,m(8b[^ yPz滕.)8N#D b{wX}ǰ x۞!1R>^ ܚq(Ӂݢ.sܯfW3ߋ\2 YDߴ#qp=ݻ|=p d(k='J7ۚ}1U3*ձ^I-K~T>!1Mީ>,`ƥ둿MȽR b0q3߉ͺqC#fX=.`߳;ٓhjrPdo,|#&-7.os>=Z=ޙ8b{h $[iC>-4 $ŒNZA#ٴzM_K[(_bؾDuݠܱߢA~ m61#މk˦=4,k>V:Fܕ[CW&߭8Eɗ2 U*آC |#gvM:#޶,\t,fv mfIfF4 ?޼8,=(x (x ZܑqMPMa/fV&VAޞNҾXZҀEh27JLm:NmmN|BNMq 5(}3\_q;Q &C݂hH[P:.] <}5ϘޛeB[&ʩ QU6nnb:3{9AKl6#ۙcB΋ر8Z!] 8VŝWSܰm|l(X 'Ȭ:̻ۓ21 Bj+߂UQ6 {[\E m$  ?Wv BR<7ݨ*^EPnHY r7Ԡ#jðF3ޝ>R > E~); w \WFrBӼ3(S*eRɄCf64&ެ:1CˣmʟБmє߿. 7XCf#rOCזҘ7;%  %f90 үR#0]#Qml2ŶXz8)v͍zQkӁ$QTZQnQ"}ᓘjQ$xApܺEq_puWpWSn=p,ٲpej׵όYX٤dFi{UրX5c${.ȱH!NsHX}~?9_~Tdi[O6T-_6#߾_s*1I@FE1S 3.[&+ JMb-@WC0= +D[&G= 0ڵ| uQ yᐺ3 d{!&W1+P8jxLZ RAC's׈W&~J6A݇uSб\]h(a")za⌇}y (twUsc .E[h]lg?Ĉzrj`Pj }!7tXB܁j;3C2jgG kuQ4-W|YRG RK޻']iһr*8g"I~kXߣ5ڔoH$ Bm FXg_X6$ݟk*xX1 X\׊_X-5ye?ax5Ihaʏ.5I'G&QjXݸQ_'zQ%yMZ鯯a 4VAֱ߹ YY'&&xmBHm) %_@sԈK2^нh_s.rh844$Kt(h52SVM$hj^ͫ \ ^^084 pj؈ /cԙtt&`Cw۹QC,t%8+ĉ /Dn j4ފ@zPlw3'묊2 ܎ 0yӊbaeҨ ?⁩ފ/V˩Fo9Pu@QTㄴڻy5pn%(U߫qfzh@v.f&E$tӫxùl"Ლrt@cm\FAZm\*/|߸ Y DhՎ˅]1Pթĝ߼V9G#6Yϧxn.@Up ]YP wQ/4>{ *kD_$LSӽN@+hQb#/gQHRo`jp!$YU[s$Y{m۫Ax۹Ic 6?zKGsڧl{owOq:.j1Yzm?jۑ31Y `BA-Ԙc!EW H6MWԶh'>,lMQ$Ba䳶1g:_:Yk@䃸 t1|ۦ-_rjCg˯䀐e~䑎dBD' dB"جISd5lӡ_ϕI$_Mӡ d jsX..θ^.y] k>J(.EزP8̔W?)?W8IoN`^* *:R"Uj }$̓Q i}$!lq736R#*[H6Rt4D}u_~]T$#0:S(ESM@v$Ba^3`ԋ٤ŢWt2*GUXj$_lģ ",孛-Hs-I! 65AS+oYUYLf-Yk0 9; 156 '1Tz]/sCp ~lx5ΤF6ҹ(Lm%p<~YY;Y tÑ@d#+Lmư*h3959~c]o aυ]d~Ԥ @E{W@^A`,J YN^A2оlkk?^쮰ٞFKU1pnPQmv""C Fx4h n!X8:azxۉs4^w ) ”(Ȋou { p* 揝Cp-֥ព\EQir8ٗ{q:]YNZ$qw @\]YPPemZ<8>l$(i嵖>T~k(n=\eq]&%NV\=@QGr=y V6rC9~Cԡu-Y}o," ,XB<(v*]L{*#A#E/:%chX%ct+NG,\m(PW"REJ` ' ]QjGYRwag@fk9)I$/|?]Jn#IZ1M1I#e}/ J6ati3_IP#{1 \6 j EAeh煞k4r9]iFYTBΪEGr: Pq9jyѿusorOO In0⒘Z nGͤ4 vah/P.Mm X..M+[.M^/>f+k+I4;åRUfY !GLv# boqpZ!y TȾB;MrutPpWS)wf-d (|H;.eo^ϟ r02B;J >p);6.2L X>/G?ba $fp34z_`EL r1t0o2zQ 4W[թ>lAk^g&t*[lSNs)]q7=#(;CqJ*;(䀦\q9J> if!QP"9Jj=T9G-NX? |kd'CV9nqE nay$#+o;cp ^v9}~|0G^ ~'e}jZ_!pG+Iqk2u9\4PCx@ oʁLV A` EǢ6U52tjO0$|ƆEؖG=v|բ遷xŒIj$CB+׆ . QPo!>Ԩ]lx3.]K)@ ?w+Rj)s|^+8O$+ddX" ҉mT|^OdYm5\)Z:i|^G~.M2a?yn7 V։L2։5+YHsܓ4Ia-'yq;xժtY_Èhg։E*N8UR1%<_SuW<TFQ_<+tJF|U{90y̙q,qT2S=YZ pqޑ9ժ1(gCjUu Gڤ$S)i]N]Ѷ!W0[\Z|fAl-0eS^+ \)_CMO~*!`t+p6%D|NČ|aˌ}2 }8t+חgXa3`Q/`_͟fy1VŒ[>ùU2DZ>NhNj>%*07rV=BZ:M] }˦eج]Z ɑq?믏U%+I dH%?'jөq$+T,p_Xqx?)J㑨D^,g!^\3u@r뺓2WrR@ 'g@v6#uy@=,N2@*b 0,NVPAj^P@3e8Ayq&yA>L} 2vA#8GQÛ8G$I`$A˔AzBհXcj-z(ĉ뼵ӡ_E_bB"W :hBÚMFB\5ʞ%89RV9otKWKtWm3v,,<|M=ÀT\.v7f!0D%D6" R.DS>L[.a-u RQ}jY& ˢGfV6[VY8R夨^GDFB"P +0j$^U3Kտ\s9hH}:οko|"n9x@}Ëb LKAg tstRI&7KcFX $~7[\X)keQL<@ŗ*iQ-5'KV{OI`WIn :--cRcfI=igG-+7=YZ$sljHex-tfxzxek`3h:{i\oT\Xo@I&k-=-\ecy ֭ * -.Cg ZE STS_L O8Ud& -o][ 쑫V2MCWD| s kȉ z-+wE %PJ9RQzLS u^3nߧqXH i.ҏ;[Xkq!;<Yv7 *_qrOF*5/ﭱ`k3phYL`Abf"%֭MM#s%t8G'pCwmgjJ*J5|LN N \5'vzH/RV*j- L dǹdu- XQ J]vRX/Л _N2kH/Of^%-r'&w`?Ak$ asAx%>l)!4!ΘyFS)c9.0|к~":bJh1o%F m4um@}2o%b 滽w@}1%'yb>f^mڈ| @31lw/%zAK d̞ya7d;NE0g<̡p# p`x+&[ШqT{p*p$Ǔo lKpUv{CXOmX#o  $3X( XD0:e˴fc%Gsbs%v^s9Ys ʛjI#etv&Gt)fݓnP?)Lys|)2!CX1W x$}v5pGW =$*9/:W (K $B!H 2C9;,(gvucXVHz6h ЀdPZHŅE %!j1;As/  9 >4.AZ(\, Ӎh@$zT8SZ:Mz|eHAmQSg<}\C m$vqL͐Q8S(+ǻ+8NnQ"t->8Vg< ΚeR͈?(a* YLo-Nd4hf74h Mr A7 ]QffB iS}Fry$_NbF2loҡNEU#90yJOlP6O30,z 99IPZ9Al@9@qxH%#luX  TZ;l#xv[y=j5-$.yǖkUOr8,P'p8O3zIkO,y,5Kj$=yCݝXKb' x%P!)PðsZfH0Q[b@`S:h v-;bE.;7P P\*TђJ 21rԑt+UkYt+Bonbh2lwe%WkN2GNGN0MliNXS$͈%;^=bP 9r lB*$]}Ck5iDRcZ{.Y2`tcZ yFb iK;ڟ溙_]љJp' {ZJ[SPEbGs+y6Lku,) k kkzlϱu `9L~P*_GtHs~Ww0HtM3 sm~A=RP Q'o@PJR~ nP݅t? ԓ~ݚKgZ\!gZgZxdљ ,ڠ>!v<9g͍7[| kZrFr:7\`⭛89 aP/TPr* zoZO@=#mkZ/mPI]X2C|kKpS|ﳠhԟ1cdZS*#HE5Vr  [?4,1cxob^ɂt0~%ILH4 $rZ.rZB}X9С^rZ8ؼE[ p&_H K}l1C8' ؠ2$PgؠK/kUb88w "/ 5U` s$essg;Έ)w^@ءM{]F8Ti~^w6kZ@4,qަ(9h0 Hb V0S_0'9XP@#˔NC589 o3tTv\Q x2?㲃 PȺ;'p񤡅=+DNq[{ {_:=ѳTkQyXckQmˑgojjEȒ,UyOM P `UXsI~k,桴o@[ D[F}ϚJQ wx`#7Sc oz= +/2,!svHį ycTﻙ&NU㙡F(9FGω6\ E/CK&:G&-HLUoqi<`Q}0UrXUYLj*AXQצ.d*mXX_d*߿2Z߼/^iH>R>H@[@/E,F[uBE| 7Q:MQ:A |[%V̉Hc|< o< iƒn|]ۯE=}"x^v |,WRD/Ѻކ׉ xI ȅ<6IP^?H[btoA"j%"{}dB|QXXV^N;j-jL0;(U& +Hv 4^dV/1Ryܻ/y.?:noU$%%,*}$5URQhj;o°2* (PH-k EUp}( $5l-%F~ PQHЎ芢mR I'/kq5[cE[czSV- u&%SI$|؄{ u u ?n٥bauL[&j%Z3fe}`q~^*le8r|H߲=xQ$~NRc#5ҫTԑ^Rz =5uo&8_~u}p.cÙsyˋ,[G͐)Pb73˄l&Ė:7 ܋p.D5 ,4Ì1E?!zhB/Ac~07 O ,汓罇6;ʿNZOͷ;CKXkdzKduuHԨrk|j!eLdmEV&h a:Z hp[)AV ~2 z 3;68Ji, MrhYS+Sf?x\8n:\q^ m TNִ!mM)տ6Hkڟ ?3lKu] :l#SUr MXl'$T_mPTvKi5Z1w/=.U4+Rwc]u'Wu>\eӈ C"1V sV Mܦ:$YX׭ؾX 7|^7E9le/YoQ ueWcB7*$\(80!{@-$n|]M ]}M8^ 1/b`WfF~ j?FXؖ^NTt6=4 {biXIY} h 9}3P9GXقs:P'L1w:rjK|Y B%f)͏}.:Bеl]Ƚ:MXU%[ڱP-zM 6%Lqz k P-^=v\-9ԩ.,+"s&¹\,F8pÒ ƼԩtlVUzTmT 4߫|b%((ݴ%q4 e*/4ZO5=%+iCUZ wzekUnS-ʫ1[DH2ƲjY"='kxZhZ)!Z(o#&%qZnGWv+;G6¶4+ܤ,{]ձbڴ#F ,BaLp},X6%ǼyPve䁘_4"}f\ xAf,c.\Qr4-=MO:x0< \*Q iZ6&{1}9DDZ*">VΜVZ)A^!b\}pheȥVR5VHlEA4InjUgڠA)䈶<\?^XYNޔy~4:B.ܹ },@a|69|JH*}V:/-U ~X/-?n/-RN 2?XҎ6)*|]V3|4qT`*VDK-I*?3rJm/0̹و |civi*#g Fz!'NٱxQ*myu<8H/.Z,.AA/]#HK.D 3K&WS?W0٪b֘84Z pjрjXhh98e!2rO/1qq[l@dGBL6ӭK:*st7xbmbFlS[.h ZZV͹Bx/Uo~`m}Zn Z#(h v8N#X#AA ,E4232 ݟ-4ؓ oˎe,w@P%#5tTnGaeFB`z q} G 6O:Y#.ߖ5'j4 @=/.M,Fxjaqx2j"9"nrѴ|^8rQ/щg+dYƊQ݄  Is{^%XrB:jbe.*UJ݄Jl.ߖL^ ڛj|PhE6W  zlتeV{4xk{N-cZg}xaURE@['4T[48 Crj5s d#8bpyv\V T u~;s`EZk(NlNs`ZrayBlbywv urN'[ЃC&rE1 . }z 1 kA2Nl_'[$`+OHRSP9LS[V`Y& :g숯-.T; &;H;:!{o{  U*lpܰEtŦ4OsזϋeV=#aI &5 @# "=-H: d;.vzKp+΋T-6r⊊ 0գBPr[ r*)&e8)X䃬f2 Prqtn5 @]F!$g)20:0T6t2 Xt ?.ي-.]jj ٝ ";E-#&:1=Byt@F#'EиZ!Ue:j46q> o5 4b!k ` =rLf 3!bNT5](yIr->Fp# O|cUِϭj,$njd$[yyjOՂj̅غdnT`MT$k b Y1G:TL[(UcNOW =n/qfn/(/F7ܫ-˨`x]b;K7ܖcDǽKܫlSej"0Gp '`r݋۴Wk - pH.2m`Nc?sb?{C&n.x(?m u A<n"/syO7.RyO?lA K +bϐ`&g&vDg;AEW{]L7ܖ^ ) x4 l ^ɖDܖYtLܲPg!{ssZ쌌j{2]2j.Y, x^wgRwɒ;ҾXʭξ#; ~Ngx2P?29a2wЙcҐM_&IZ4|22jo4.&.Wt5[:/.P?8/.׹ܫI ) p:;x@[7ܖm_Cxܲ@Q: [ |7 WQ:/28l xr`ְ*oSy_=_,hsԸssxhj(=*ʆ;k/ԙѫ6x7e,Aܫ_A4rO,m`p =j_[6J2=ez B L`  qL` 1@܀"`3r̈!#6@o(3d0DQrp sH"Svd91gިxJ sЀQrʧ;*1ġ5u*@iȼj̀l֛9"TjcF 4ԙvn 1`Bj*[I%@g<\&t8حޭ&1I7Z m- c;;sB4f(PRm usު;nosmaZhjސRhk;׈}U4hz0W 9xhTH3Y)߂`aFR(jnԅoAR?Ӄed|ex"n?!r` 5#q "$c6{1PIKd} IFiQTrPp[f1wb iwb.ÛLF8 U%mh>R`l Cwyeae^➉^f yʖ8M)9E|% 9@c-y+7А[ 2(TFk@biҶl>gV)E$N8%A*kӹNˮP* |ok+mc+ $e C0![ [ߺunNnHYqme ;]^'&kQ'c){*Ewρ,[뱥M|dsaVLx2u%L`,~ጴ Qyrr7EvtHtݴ9#(i+nbe{ !QWov8EޝsODZ-fb \;+YyK0;mCtk0>|a?hT+8[;7[?ѶH+(~Fim5F [uW0r ;RtO_1ןiHۖd{:1l>ACMoL)+, G&xotZi{;9k\y HNH2siJ@:a'9Š2qBK?'bc]dh>Xi u5 ,TuQA!RL88[# |$$C2xp&I> ]LɼW^M ])`Fi'YF@)^'[986WAQR9PqEBT5AM.2 0/^K3YD* q6AfDZ4MXbe:Nd(@[ivzREt2!IF T> MdpB0f{\O|10QgNeuS "z%y":2QjI$AS3(rQeu?hҞpu)'`~-V bNjNߢ;E ,;Mh]kڤrr5  '$ѽla'=z&^Q:b)% =i6KHgKח$A45T,l Jby 2+@bEO]ܺU[oX,44\^eW$VR䉡1vX V] 1g%wa܍@7B܆:Tmuۗt&WKX9%{D{pJ'2JFɄ7'2-kT wxv:ҰQ8HƤ^b2J4fO`VR}xbFǰE1h.f-bdG%k)q2QI X{G$^9A6E ׶'e-/ &a2koԒ9bͦB/:Qܥβt'L)h=<+t^51k/.; QSmj,4mB$CXFp卵43qObz>,3-l«3 :d>xTC 񧅝b7Yإ0ksm/g;VB-ݍ$E#0+17f_r/!ɴmqa?'Sb&k*g/EΈ,eaBHlb14+3ΗQzg&hUtBVh!KL7\Ԭ.Ho.@diGGVXe}'X>K|$ltדHCmw眄U/7 /cS?c{\?)[{~{?И &tl֋1~w~^W@oZHRz"؇i2nbn׈H‚Fp_(%DȈkxR;lRH$]Ev8@be^ ATrZWJtWH}(X`RHOn(hksb rkqᘄlWZ82)_s0zvE48(Y5~Վ}gRX,(IZ يl}F#/ YipiւeU,BgIY?zӑ3CUw>j"2Z [h:)MHt=Y")5.Cւ+ُ?WkRG'hh)CYx 6?VV9dY?q'eWrGYV-+9B5T@*Qw7UXnj+qzz\~vpK!2_Bc&yAYGv s6 dd3|a^іYy9rY¡{"k`|nB@$:졂$/WEb /B+8:Oj!@rFxD>ԭ].C L8=Zz;j9DuԫZijKoj2!Zig/%z2Ci24'Hq[j;8Z+Q;8M#K;Hr1 j%t$&K-* bkłVw+;Qb?k/%:D6۴t2)3"9)l{z'ضV7;.B@{'J)T. wK+U(Q%զӺR+u:串j3+ $v$Ze L%2Qc/6qr{봂-kFr|Kb":8 OV[ ܡEBɫi=k K˻ђ){%"Xm[ M8t¿b+2s;zљkBɿ7D Ad2Ab K2K}%l[ǫ1%qEȐr+&~rB!ފ̻" @Wr#q<rvu<ќ˼!ܙKrgʧ% 쬵,s&% +1ϊb3r%j1 6|ʉSb MsD%l 11:&dZͿL]O6Z $ Q1 8s_Qٜ:H\S&5ͫѿX }цW>]K<x3&96Lm9X ]0z T):\\.)Q,b<JNR t~z  yR$aҡDӺS&q4-6}USSD*zMgp?=A- 8yx>۝F4KԼ2E3Ȳhl˵CLUüs1wN 8@)s> s-:0О_:J[i?>ݝrweA=AMdr5>Qiޟ3s[eN), QFw>>nr0,_q A!;{i&ʒ! o5Mn u,.o&m;"bwϙPO҈+_}i^ν$$#⚭`fS6k?a+ZO9-H}%fK~cGg,]?N5%ʄś:4 w11OVoB +vѠ /t]=!$x?ou^b/UY/ۃa~>PaÃޙ7HRl:=l)˞^;]) r_ޔj6_k_-ٟׅQ @,+zx$:ħ:vǯ^;e`[ Ȉ50Qڋka}8φTO;Hw`FSw!d@g#mRu Pv mB1!}9 C 0@Dj2Y@An E:O)({. tr$D =nF zgPCL&zB``|=|8 *ZP% D93F, !d WG^U~ )`9S\!FBds Ix4ZaI+FB vcBh‹N`aBr E .&+\ ~Z K.,>?!)p]==p'-D1P2hX~98pnLh'aTD@8VbzPտ<VZŇȳ8l/@-Md5_g[r| VOx\es!sEGAR2ѸUX߄AB}/vʰS@umfI&nS'OJ>AA&Z(\dEoG;XXɑPHf|ɿ% C[QSt)"i0Q1SziGr8"0^tʳR-kA z䖇F(cxAV~ 3$><K9 sYZH @,Zl PoPEo$+1=+.Vf2NK|;>Fvt7+ \L¬}s (OcCqC] -Y ssE'MtДDV9}m8ɲpZ{ _7oL8̒(V& ņ&G(,WdDamHhэ=ДH*, ܓd L9N MdY(f_P``"*y44mB dq,lNsϰNc{,F=gY EIRE@9S)f;ˎβ!aC#$w} DjpM9ȜpЯsڼ3UΒ̑0njglTmCiFBU}fY SpWp" h!(ChUb]@~P,$ky4 lQw4љԅ?Iax~\0ivNl#'ֹ4cxLE42z0UX?5@ q.Jj:Js-}DG(ʙa L5)2bF(Km]Aï٣rܡŅ*huFj@_#Ov*m&\S>*VԠҸ-ጝO ^x!y ?Hw /DF)7P[%dy_QӼ SZC+PTXHSȣdzJå$U ,NsS?eB3mT`LCdPwV$Rf+]A&kBT.%Re@@J*J\ `h}lYÙʼU~{EMVi.)ݏ*"^bqNKb` Ady8{"Oe[i2/Okku~WU! vvбd+7H.3Z؈j="4C$'M'\Cr?q6!$aHk}8ಉ&$z-G^c íJIǒtMU_O^ͪT>l 7BUUЃX2F/NTi*fMg'l0$Iak)5<9G{sJWIP\^+0#!X#f "SSؑ:KM٣C~ Q B$a'n-~SU1, χG,gQNǪ7>i5 =+;*26+@:ddآxt%Z!V1U\'4i1LY2Mg`>3z%_37]բ]~X+ H\SG܆kKͰ$`>rcħnD-/D3%-n4īC^hv(SxƊk ( J<>#gaZeu1ڥSY7\x_ gq=1D?v1x9@UlP-z6Yiz̈=fx nI'r# Q,ɰNOX*d#Zv ԄB;5Ov[Ŋdcq2U`6E.n4"݄ ?ajQRVadoe.! kp`XKb1C@2F6$%Si?["eǼgL=VPv0l%r x&kI5ݣu Ɠ3v1엻df/&F~ʺ53>X`fZQc͙Te'WX.Y5 f )$nc6C䓒p삿%BPgAmUeA|rC x!Y j)3-M*'ڿ'Dspy8!c 1x7haEO朄 vf.;Y 4DcA+fTv<3_6HD< (TOA~|tT&hiP<ϧsfeU9{F5qوkMK4GՖL$HONJz2gO490,t$4+D++Xk_Gsf6؛1 oPܘ u.K0]Q#/>)T>k`Aږ ݵO6$LreN]ʈ0ՄXs&qF_B˾fݣ/.+a W ԰yP3i9iyX7(瓓Tǁk'd3rRbx1 8lVz o(dᣥUѬrSoSZ;5wuXKtնj9sL!jW>zXP;1ya9_rvC l;.a&[HA Ct&ҟ4V] (Av+d`-u:ׅLMm+M{su&r`m0!=骂Ϭ,YMm 7E$Z(8MպզD^Bی;86 LO`rgly ɺGvYCp'3j{<յ468mٝ5ShSLK͆5ֽ{Yjqй -*(U8sVvkA3gcp{[(aܩ%--^vkbc;g:M8#d,qf׾so A I~ >jN125): אXxom$_ Q}U DYǸ'AZp ){Z -qV~86̔X؏D nL̡6i0@<=8(+]u=DE4xGiP!ƽc=#L^8anUppZ.I3mIup %5w pdrKa]aZBյ /5|өa.zs_᩷Jk"DϘMK.1T Vq~{|1vr Ё9JDz9Tl,r^w12*ءks]CZآks gę>gы栙9?;x$yT1xb_GWm7!UU0tn]f٨/z1y gOGrd Y %: ҝ;:i[1:mq78UΈ&nA12ANe_!@;qhŹ8mP>ϧ,c9ͬ͒v ޫP CR^<=_p=&?yucx'A_y-("W6FvE1 Xf A@@pC7H\ KK_=:J 0 }e=;F}sfV -Ez G+ԣ4 R?5 =U(Q}&Wz6)u Sx"4H"Q~G }6k{U vrp-TڍZdMbΎ#M! |+D㋹!S;$Fuq/s.?(aR~O|e~5Ჽ#]Q} {>HE!Bm k ;̒FR(4` h7y9!ۧ*clwNnScIſï'4;uG<ݧ-p0x<.Od<Й˟`ldOc)~Rq8A>s$dR D[? 6WL  cdA?9Z[5ba+oDoYK~"tyj1(~?8+Rge%6߼6Al_"F = 34 `7- (1cu|Kȁ}},brA؆ 'Ũp AgExY&S>|AF|Rp,ܧ~bUb !F;${S`%9\ x1c$Zp5uFxi _d;L|$x KB &""6$;d# HV7na*Es+T1 9]&EP(҄IܣIyI}/M,hT|N`4!S<!AE! vţ1X:=I.p! # ^e^q4CZpeD=I(QuOj1I&ac<g__ VP`8 xi",҄AϾa f\ ˴hUy͡+3 FsLk4b !sZ`}}#pW7ݗ^*yFa`7#̇@]6b;Sȑ!@2v8~9EШH~H%[hxmC>-MTH+gŁa4Q`ǍQIBLcpaL <߅$)ga-5-3/global/X/xregion_main.c0000640005473000001440000000307011373305234015067 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #define FIRST_TIME #include "xregion.h" #if HAVE_MATH_H # include #endif int main(int argc, char **argv) { int i, argn; char filename[128]; /* initialize global variables */ first_time = True; /* Used to set scroll bar on first expose */ interval_max = 2000; interval = 500; /* 0.5s between exposures by default */ slowdown_max = 100.; slowdown_min = .1; slowdown = INITSLOW; /* slowdown factor for animation */ oldslowdown = INITSLOW; cur_time = 0; /* current time */ maxval = 0.; /* max value of integral, zero is default */ working = False; animation = True; cur_event = 0; /* First read the argument list */ for(i = 1, argn = 0; i < argc; i++) { if (argv[i][0] == '-') { break; } else { argn = i; } } argn ++; if (argn < 2 ) { printf("Usage:\n"); printf("xregion \n"); exit(1); } sscanf(argv[1],"%s", filename); ReadEventFile(filename); scale = 1; overview_scale = 499.0 / GA_MAX((grid_x), (grid_y)); overview_width = ceil( (grid_x) * (500.0 / GA_MAX((grid_x), (grid_y))) ); overview_height = ceil( (grid_y) * (500.0 / GA_MAX((grid_x), (grid_y))) ); printf("overview_scale %lf\n", overview_scale); printf("overview_width %d\n", overview_width); printf("overview_height %d\n", overview_height); /* Realize everything */ xregion_app = create_overview(argc, argv); XtRealizeWidget(overview_shell); /* Enter the event loop */ XtAppMainLoop(xregion_app); } ga-5-3/global/X/xregion_display.c0000640005473000001440000001037211373305234015613 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "xregion.h" void UpdateDisplay() { int n; char string[60]; XFontStruct *labelfont; char *fontname = "8x13bold"; Window W; /* Incorporate the display changes after the animation is over */ /* change the title */ strcpy(title, "Time Lost Due To Contention"); XtVaSetValues(title_widget,XtNlabel, title, NULL); /* delete all irrelevant widgets */ XtDestroyWidget(slowdown_widget); XtDestroyWidget(scroll_widget2); XtDestroyWidget(interval_widget); XtDestroyWidget(scroll_widget); XtDestroyWidget(start_stop_button); XtDestroyWidget(interval_label); XtDestroyWidget(slowdown_label); /* load the label font */ if ((labelfont = XLoadQueryFont(display,fontname)) == NULL) { Error("failed to load label font",-1); } /* Add label widget to display the max value of integrals */ sprintf(string, "max value = %8.5f", maxval); interval_widget = XtVaCreateManagedWidget("maxval", labelWidgetClass, box_widget, XtNbackground, DEFAULT_BG, XtNforeground, DEFAULT_FG, XtNx, 25, XtNwidth, 300, XtNvertDistance, 5, XtNfromVert, title_widget, XtNlabel, string, XtNborderWidth, 0, NULL); XtVaSetValues(interval_widget, XtNfont, labelfont, NULL); /* Raise Quit widget partially obscurred by centered max value string */ W = XtWindow(quit_button); XRaiseWindow(display,W); /* Now, update the ColorMap legend */ XClearWindow(display, window_map); DrawColorMap(); PrintColorMapText(); XFlush(display); } /*****************************************************************/ /* JJU: void TimeOutCallback(caddr_t data) */ void TimeOutCallback(XtPointer data, XtIntervalId *xtintervalid) { #define AMP 1 int ilo, ihi, jlo, jhi, inc; int xlo, xhi, ylo, yhi; /* display coordinates */ int base, stime; /* Do work on time out here */ /* printf("time %lu, event=%d\n",cur_time,cur_event); fflush(stdout); printf("ev_times[cur_event]= "); */ while (slowdown * (ev_times[cur_event] / 1000) < (cur_time + interval) && cur_event < num_events) { base = cur_event*RECLEN; ilo = record[base+2]; ihi = record[base+3]; jlo = record[base+4]; jhi = record[base+5]; inc = AMP*record[base+7]; if (in_display_region(ilo, ihi, jlo, jhi)) { ilo = GA_MAX(ilo - top_edge, 0); ihi = GA_MIN(ihi - top_edge, pict_height - 1); jlo = GA_MAX(jlo - left_edge, 0); jhi = GA_MIN(jhi - left_edge, pict_width - 1); UpdatePixRegion(ilo, ihi, jlo, jhi, inc, (double) 1e-6 * ev_times[cur_event]); DisplayPixRegion(ilo, ihi, jlo, jhi); } cur_event++; } if(cur_event < num_events) { cur_time += interval; } else if(animation) { animation = False; printf("\nEnd of Event Animation ...\n"); UpdatePixRegion(0, pict_height - 1, 0, pict_width - 1, 0, 0.0); DisplayPixRegion( 0, pict_height - 1, 0, pict_width - 1); UpdateDisplay(); #ifdef DEBUG for(inc = 0; inc < pict_width * pict_height; inc++) { printf("%f\n", integr[inc]); } printf("Intialized or computed max integral value = %f\n",maxval); #endif /* DEBUG */ } /* Restore the call back */ timer = XtAppAddTimeOut(xregion_app, interval, TimeOutCallback, NULL); } /**/ /* JJU: void Exposed(Widget widget, caddr_t data, XEvent *event) */ void Exposed(Widget widget, XtPointer data, XEvent *event, Boolean *bln) { /* Now we are exposed so we can draw ... */ if (event->xexpose.count == 0) { if (first_time) { /* Cannot seem to set this before now ? */ ScrollProc(scroll_widget, NULL, 0); ScrollProc2(scroll_widget2, NULL, 0); first_time = False; } DrawColorMap(); PrintColorMapText(); DisplayPixRegion(0, pict_height - 1, 0, pict_width - 1); XFlush(display); } } ga-5-3/global/X/xregion.config0000640005473000001440000000115411300316052015075 0ustar d3n000users# configuration file for xregion # # select colors for the following: # foreground - foreground color of windows # background - background color of windows # selection - color of area selected for viewing # rubberband - color of selection rubberband # grid - color of grid lines # canvas - background color of display area # # colors are X11 named colors (see an X reference for list) # # Only colors you wish to change need to be in the # configuration file. Others will be set to default colors. # foreground navy background light gray selection Green rubberband Green grid red canvas black ga-5-3/global/X/xregion_colormap.c0000640005473000001440000000260711300316052015752 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* This module contains the functions for displaying the access color map that appears on the right side of the display window */ #include "xregion.h" void DrawColorMap() { /* Actually fill in the colors */ int i, black = 1; unsigned width = 20, height = 350 / MAX_COL; int x, y, length,index; XColor color; for (i=0,y=0,x=0;i= 10. || maxval < .001) ? 1 : 0; for (i=0;i #endif #include "xregion.h" void ReadEventFile(char *filename) { FILE *fin; long int i, k, act_events = 0; char errmsg[128]; fin = fopen(filename,"r"); if (!fin) { Error("Input File Not Found",-2); } if (!fscanf(fin, "%d%d%d", &grid_y, &grid_x, &num_events)) { sprintf(errmsg, "Unable to read data from file %s", filename); Error(errmsg, -2); } if (!fscanf(fin, "%d%d", &rows, &cols)) { sprintf(errmsg, "Unable to read data from file %s", filename); Error(errmsg, -2); } if (!(overlay_row = (int*) malloc(rows * sizeof(int)))) { Error("couldn't allocate memory",-1); } if (!(overlay_col = (int*) malloc(cols * sizeof(int)))) { Error("couldn't allocate memory",-1); } for(i = 0; i < rows; i++) { if (!fscanf(fin, "%d", (overlay_row + i))) { sprintf(errmsg, "Unable to read data from file %s", filename); Error(errmsg, -2); } } for(i = 0; i < cols; i++) { if (!fscanf(fin, "%d", (overlay_col + i))) { sprintf(errmsg, "Unable to read data from file %s", filename); Error(errmsg, -2); } } if (!(record = (int*) malloc(RECLEN * num_events * sizeof(int)))) { Error("couldn't allocate memory",-1); } if (!(ev_times = (unsigned long int *) malloc(num_events * sizeof(unsigned long)))) { Error("couldn't allocate memory",-2); } for(i = 0; i < num_events; i++) { for(k = 0; k < RECLEN; k++) { fscanf(fin, "%d", (i * RECLEN + k) + record); } if(fscanf(fin, "%lu", ev_times + i)) { act_events++; } /* Adjust from Fortran to C base addressing */ for (k = 2; k <= 5; k++) { (*((i * RECLEN + k) + record))--; } if (feof(fin)) { break; } } num_events = act_events; printf("File %s has been read. %d events are displayed\n",filename,num_events); fclose(fin); } ga-5-3/global/X/xregion_util.c0000640005473000001440000000603411300316052015111 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "xregion.h" void Error(char *message, int err_num) { (void) fflush(stdout); (void) fprintf(stderr,"\n\nError was called.\n"); (void) fprintf(stderr,message); (void) fprintf(stderr," %d (%#x).\n",err_num,err_num); exit(1); } int in_display_region(int ilo, int ihi, int jlo, int jhi) { return( !((ilo > bottom_edge) || (ihi < top_edge) || (jlo > right_edge) || (jhi < left_edge))); } void set_config() { int found = True; Pixel pix_val; Display *disp; XColor xcolor; XColor spare; Colormap defcmap; char *bufptr, name[40], buf[80]; char path[128]; FILE *fd; disp = XtDisplay(overview_shell); defcmap = DefaultColormapOfScreen(XtScreen(overview_shell)); if (XAllocNamedColor(disp, defcmap, "black", &xcolor, &spare) != 0) { DEFAULT_FG = xcolor.pixel; } else { fprintf(stderr, "unable to allocate color 'black'\n"); } if (XAllocNamedColor(disp, defcmap, "whitesmoke", &xcolor, &spare) != 0) { DEFAULT_BG = xcolor.pixel; } else { fprintf(stderr, "unable to allocate color 'whitesmoke'\n"); } if (XAllocNamedColor(disp, defcmap, "green", &xcolor, &spare) != 0) { SELECT_COLOR = xcolor.pixel; RBAND_COLOR = xcolor.pixel; } else { fprintf(stderr, "unable to allocate color 'green'\n"); } if (XAllocNamedColor(disp, defcmap, "black", &xcolor, &spare) != 0) { CANVAS_COLOR = xcolor.pixel; } else { fprintf(stderr, "unable to allocate color 'black'\n"); } if (XAllocNamedColor(disp, defcmap, "red", &xcolor, &spare) != 0) { GRID_COLOR = xcolor.pixel; } else { fprintf(stderr, "unable to allocate color 'red'\n"); } sprintf(path, "./xregion.config"); if ((fd = fopen(path,"r")) == NULL) { fprintf(stderr,"config file '%s' not found, using default colors\n", path); found = False; } while (found && fgets(buf, sizeof(buf), fd) != NULL) { if (buf[0] == '#') continue; /* a comment */ bufptr = strtok(buf, " "); if (bufptr) { strcpy(name, bufptr); } bufptr = strtok(NULL, "\n"); if (bufptr) { if (XAllocNamedColor(disp, defcmap, bufptr, &xcolor, &spare) == 0) { strcat(name, " Not Allocated"); } else { pix_val = xcolor.pixel; } } if (strstr(name, "Not")) { fprintf(stderr, "%s: check color name '%s'\n", name, bufptr); } else if (strstr(name, "foreground")) { DEFAULT_FG = pix_val; } else if (strstr(name, "background")) { DEFAULT_BG = pix_val; } else if (strstr(name, "selection")) { SELECT_COLOR = pix_val; } else if (strstr(name, "rubberband")) { RBAND_COLOR = pix_val; } else if (strstr(name, "grid")) { GRID_COLOR = pix_val; } else if (strstr(name, "canvas")) { CANVAS_COLOR = pix_val; } else { fprintf(stderr, "Unknown entry: '%s'\n", name); } } fclose(fd); } ga-5-3/global/README0000640005473000001440000000444311423627743012732 0ustar d3n000usersGLOBAL ARRAYS LIBRARY ~~~~~~~~~~~~~~~~~~~~~ DEPENDENCIES ON OTHER SOFTWARE ============================== - ARMCI - one-sided communication library used by GA as its run-time system This s/w is new in release 3.0 - MPI or TCGMSG: more or less extensive run-time support is required. For example, a message-passing library is used on some platforms to fork processes, implement broadcast, ga_dgop; - MA (memory allocator by Greg Thomas) - GA eigensolver, ga_diag, is a wrapper for the eigensolver from PEIGS library; (Please contact George Fann about PEIGS) - BLAS library is required for the eigensolver and ga_dgemm; - LAPACK library is required for the eigensolver; - MPI, SCALAPACK, PBBLAS, and BLACS libraries are required for ga_lu_solve, ga_cholesky, ga_llt_solve, ga_spd_invert, ga_solve. If you do not install these libs, the named operations will not be available. BUILDING GA =========== Please refer to the README in the base distribution directory. TEST PROGRAMS ============= Please refer to the README in the base distribution directory for details on running the GA test suite. TEST PROGRAM NOTES ================== - Program testspd.x should work only with the ScaLAPACK and MPI. - Another example program that uses GA is called jacobi.x. The Jacobi iterative method is used to solve a system of linear equations generated in the solution process of a partial differential equation by the finite differences method. - To run test programs with TCGMSG that creates the GA processes on the shared memory and (network of) workstations; execute them you should use 'parallel' program -- built in tcgmsg/ipcv4.0:: parallel testing/test.x For a single processor execution 'parallel' is not required and the program can be run as:: testing/test.x or under control of your favorite debugger. On MPP like T3D, IBM SP, and Intel machines, use appropriate system command to specify the number of processors, load and run the programs. For example, to run on four processors of the Cray T3D use:: mppexec testing/test.x -npes 4 DOCUMENTATION ============= The documentation is located in doc/ and on the web at: http://www.emsl.pnl.gov/docs/global. CONTACT ======= For suggestions, comments and bug reports: hpctools@pnl.gov ga-5-3/global/testing/0000750005473000001440000000000012275260560013515 5ustar d3n000usersga-5-3/global/testing/testspd.F0000640005473000001440000006370611364420655015330 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c $Id: testspd.F,v 1.8 2004-11-12 22:19:10 edo Exp $ c*********************************************************************** c* Source : testllt c* Scope : test LLT SCALAPACK routines c* c* 04/12/96 GVT First Implementation c* Giuseppe Vitillaro peppe@unipg.it c*********************************************************************** #define SIZE 100 #define UPLO 'L' #define TRESH 3.d0 #define ga_dnormF(g_a) sqrt(ga_ddot(g_a, g_a)) #define BLOCK_CYCLIC 0 c*********************************************************************** c* Program: testllt c*********************************************************************** program testllt implicit none #include "mafdecls.fh" #include "global.fh" c**** integer nproc integer hsize, ssize c c*** Intitialize a message passing library c #include "mp3.fh" c c**** Initialize GA package call ga_initialize() c c**** get number of nodes and calculate memory allocation hsize = 6*SIZE*SIZE + 3*SIZE ssize = 3*SIZE*SIZE + 3*SIZE nproc=ga_nnodes() hsize = (hsize/nproc) + 1 ssize = (ssize/nproc) + 1 + 3*256*256 c**** Initialize MA package if (.not. ma_init(MT_DBL, ssize, hsize)) $ call ga_error("ma init failed",ssize+hsize) c**** Do Core Tests call ctests(UPLO) c**** Exit from the GA package call ga_terminate() c call MP_FINALIZE() end c*********************************************************************** c* subroutine: infos c* print informations about this run c*********************************************************************** subroutine infos(me, nproc, uplo, eps) implicit none #include "mafdecls.fh" #include "global.fh" c**** integer me integer nproc character*1 uplo double precision eps c**** if (me.eq.0) then print *, ' ' print *, 'Number of nodes : ', nproc print *, 'Problem size : ', SIZE print *, 'Uplo : ', uplo print *, 'Epsilon : ', eps call ffflush(6) endif return end c*********************************************************************** c* subroutine: thead c* emit test header output c*********************************************************************** subroutine thead(header) implicit none #include "mafdecls.fh" #include "global.fh" c**** character*(*) header c**** integer me me = ga_nodeid() if (me.eq.0) then print *, ' ' print *, '> ', header, ' ' call ffflush(6) endif return end c*********************************************************************** c* subroutine: dthtest c* test a double precision against the THRESH parameter c*********************************************************************** subroutine dthtest(msg, dval) implicit none #include "mafdecls.fh" #include "global.fh" c**** character*(*) msg double precision dval c**** integer me me = ga_nodeid() if (me.eq.0) then print *, ' ', msg, dval, ' ' if (dval.lt.TRESH) then print *, '> success ' else print *, '> failure ' endif call ffflush(6) endif return end c*********************************************************************** c* subrotine: stest c* test solver result c*********************************************************************** subroutine stest(irc, ierc) implicit none #include "mafdecls.fh" #include "global.fh" c**** integer irc integer ierc c**** integer me me = ga_nodeid() if (me.eq.0) then if (irc.eq.0) then print *, '> LLT ' elseif (irc.gt.0) then print *, '> LU ' endif if (irc.eq.ierc .or. (irc.gt.0 .and. ierc.gt.0)) then print *, '> success: expected factorization' else print *, '> failure: not expected factorization',irc,ierc endif call ffflush(6) endif return end c*********************************************************************** c* subroutine: emsg c* error message c*********************************************************************** subroutine emsg(msg, ival) implicit none #include "mafdecls.fh" #include "global.fh" c**** character*(*) msg integer ival c**** integer me me = ga_nodeid() if (me.eq.0) then print *, ' >>> ', msg, ival, ' ' print *, '> failure ' call ffflush(6) endif return end c*********************************************************************** c* subroutine: ctests c* do coretests for LLT Cholesky factorization, solver c*********************************************************************** subroutine ctests(uplo) implicit none #include "mafdecls.fh" #include "global.fh" integer ga_cholesky external ga_cholesky c**** character*1 uplo c**** integer n parameter (n=SIZE) external ga_llt_f, ga_llt_s, ga_llt_i integer ga_llt_f, ga_llt_i double precision A(n,n), X(n,n) integer g_A, g_B, g_X, g_Y integer g_A1, g_X1, g_Y1, g_Y2 #if BLOCK_CYCLIC integer g_AA, g_BB, g_CC, g_YY, g_ZZ integer dims(2), proc_grid(2), block(2) integer g1, g2 #endif integer hsA integer i, j integer nproc, me double precision buf(n) double precision dnA, dnX, dnX1, dnY1, dnS, dnF, dnI integer irc double precision eps, dlamch eps = dlamch('p') nproc = ga_nnodes() me = ga_nodeid() call infos(me, nproc, uplo, eps) c**************************************** c* Initialize tests variables c* Generate a Lower triangula matrix c* with large positive diagonal elements c* so the LU decomposition will be c* just this matrix c**************************************** c**** Initialize local arrays A, X c**** they are local copies of the corrispondent c**** global arrays do j = 1, n do i = 1, n X(i,j) = dsin(1.d0 * (i * j)) A(i,j) = 0.d0 if (i.gt.j) then A(i,j) = dsin(1.d0 * (i + j)) endif if (i.eq.j) then A(i,j) = SIZE*dabs(dsin(10.d0 * i)) endif end do ! i end do ! j c**** Create global arrays #if BLOCK_CYCLIC if (me.eq.0) then write(6,*) '*' write(6,*) '* Creating Block-Cyclic Arrays' write(6,*) '*' endif dims(1) = n dims(2) = n block(1) = 64 block(2) = 64 call factor(nproc,g1,g2) proc_grid(1) = g1 proc_grid(2) = g2 g_A = ga_create_handle() call ga_set_data(g_A,2,dims,MT_DBL) call ga_set_block_cyclic_proc_grid(g_A,block,proc_grid) if (.not.ga_allocate(g_A)) & call ga_error(' ga_create A failed ', 2) g_B = ga_create_handle() call ga_set_data(g_B,2,dims,MT_DBL) call ga_set_block_cyclic_proc_grid(g_B,block,proc_grid) if (.not.ga_allocate(g_B)) & call ga_error(' ga_create B failed ', 2) g_A1 = ga_create_handle() call ga_set_data(g_A1,2,dims,MT_DBL) call ga_set_block_cyclic_proc_grid(g_A1,block,proc_grid) if (.not.ga_allocate(g_A1)) & call ga_error(' ga_create A1 failed ', 2) g_X = ga_create_handle() call ga_set_data(g_X,2,dims,MT_DBL) call ga_set_block_cyclic_proc_grid(g_X,block,proc_grid) if (.not.ga_allocate(g_X)) & call ga_error(' ga_create X failed ', 2) g_X1 = ga_create_handle() call ga_set_data(g_X1,2,dims,MT_DBL) call ga_set_block_cyclic_proc_grid(g_X1,block,proc_grid) if (.not.ga_allocate(g_X1)) & call ga_error(' ga_create X1 failed ', 2) g_AA = ga_create_handle() call ga_set_data(g_AA,2,dims,MT_DBL) if (.not.ga_allocate(g_AA)) & call ga_error(' ga_create AA failed ', 2) g_BB = ga_create_handle() call ga_set_data(g_BB,2,dims,MT_DBL) if (.not.ga_allocate(g_BB)) & call ga_error(' ga_create BB failed ', 2) g_CC = ga_create_handle() call ga_set_data(g_CC,2,dims,MT_DBL) if (.not.ga_allocate(g_CC)) & call ga_error(' ga_create CC failed ', 2) dims(2) = 1 g_Y = ga_create_handle() call ga_set_data(g_Y,2,dims,MT_DBL) call ga_set_block_cyclic_proc_grid(g_Y,block,proc_grid) if (.not.ga_allocate(g_Y)) & call ga_error(' ga_create Y failed ', 2) g_Y1 = ga_create_handle() call ga_set_data(g_Y1,2,dims,MT_DBL) call ga_set_block_cyclic_proc_grid(g_Y1,block,proc_grid) if (.not.ga_allocate(g_Y1)) & call ga_error(' ga_create Y1 failed ', 2) g_Y2 = ga_create_handle() call ga_set_data(g_Y2,2,dims,MT_DBL) call ga_set_block_cyclic_proc_grid(g_Y2,block,proc_grid) if (.not.ga_allocate(g_Y2)) & call ga_error(' ga_create Y1 failed ', 2) g_YY = ga_create_handle() call ga_set_data(g_YY,2,dims,MT_DBL) if (.not.ga_allocate(g_YY)) & call ga_error(' ga_create YY failed ', 2) g_ZZ = ga_create_handle() call ga_set_data(g_ZZ,2,dims,MT_DBL) if (.not.ga_allocate(g_ZZ)) & call ga_error(' ga_create YY failed ', 2) #else if (.not. ga_create(MT_DBL, n, n, 'A', 1, 1, g_A)) & call ga_error(' ga_create A failed ', 2) if (.not. ga_create(MT_DBL, n, n, 'B', 1, 1, g_B)) & call ga_error(' ga_create B failed ', 2) if (.not. ga_create(MT_DBL, n, n, 'A1', 1, 1, g_A1)) & call ga_error(' ga_create A1 failed ', 2) if (.not. ga_create(MT_DBL, n, n, 'X', 1, 1, g_X)) & call ga_error(' ga_create X failed ', 2) if (.not. ga_create(MT_DBL, n, n, 'X1', 1, 1, g_X1)) & call ga_error(' ga_create X1 failed ', 2) if (.not. ga_create(MT_DBL, n, 1, 'Y', 1, 1, g_Y)) & call ga_error(' ga_create Y failed ', 2) if (.not. ga_create(MT_DBL, n, 1, 'Y1', 1, 1, g_Y1)) & call ga_error(' ga_create Y1 failed ', 2) if (.not. ga_create(MT_DBL, n, 1, 'Y2', 1, 1, g_Y2)) & call ga_error(' ga_create Y2 failed ', 2) #endif c**** Fill in arrays A, X do j = me+1, n, nproc call ga_put(g_A, 1, n, j, j, A(1,j), n) call ga_put(g_X, 1, n, j, j, X(1,j), n) end do ! j c**** Create A, B, Y c**** It is granted that A, B, Y will not change c**** during the execution of the test LLT driver c**** B = A * A^ #if BLOCK_CYCLIC call ga_copy(g_A, g_AA) call ga_dgemm('N', 'T', n, n, n, 1.d0, g_AA, g_AA, 0.d0, g_BB) call ga_copy(g_BB, g_B) #else call ga_dgemm('N', 'T', n, n, n, 1.d0, g_A, g_A, 0.d0, g_B) #endif c**** A = B = A * A^ call ga_copy(g_B, g_A) c**** B = A * X #if BLOCK_CYCLIC call ga_copy(g_A, g_AA) call ga_copy(g_X, g_CC) call ga_dgemm('N', 'N', n, n, n, 1.d0, g_AA, g_CC, 0.d0, g_BB) call ga_copy(g_BB,g_B) #else call ga_dgemm('N', 'N', n, n, n, 1.d0, g_A, g_X, 0.d0, g_B) #endif c**** Copy B(1:n,1:1) to Y(1:n) so Y will X column 1 call ga_copy_patch('N', g_B, 1, n, 1, 1, g_Y, 1, n, 1, 1) c**** dnA = ||A|| dnA = ga_dnormF(g_A) c**************************************************** c Test Cholesky factorization external interface c**************************************************** call thead("Test Cholesky factorization") c**** copy A in X call ga_copy(g_A, g_X) c**** call Cholesky factorization routine in ScaLAPACK PDPOTRF c**** to obtain an LL'/U'U factorization (external interface) irc = ga_cholesky(uplo, g_X) c**** if return code 'zero' is OK if (irc.eq.0) then c**** A1 = X * X^ or A1 = X^ * X if (uplo.eq.'L') then #if BLOCK_CYCLIC call ga_copy(g_X, g_CC) call ga_dgemm('N', 'T', n, n, n, 1.d0, g_CC, g_CC, 0.d0, g_AA) call ga_copy(g_AA, g_A1) #else call ga_dgemm('N', 'T', n, n, n, 1.d0, g_X, g_X, 0.d0, g_A1) #endif else #if BLOCK_CYCLIC call ga_copy(g_X, g_CC) call ga_dgemm('T', 'N', n, n, n, 1.d0, g_CC, g_CC, 0.d0, g_AA) call ga_copy(g_AA, g_A1) #else call ga_dgemm('T', 'N', n, n, n, 1.d0, g_X, g_X, 0.d0, g_A1) #endif endif c**** A1 = A - A1 = A - X * X^ or A1 = A - A1 = A - X^ * X call ga_add(1.0d0, g_A1, -1.0d0, g_A, g_A1) c**** dnF = ||A - A1*A1^|| / (||A|| * N * eps) : SHAPE L c**** dnF = ||A - A1^*A1|| / (||A|| * N * eps) : SHAPE U dnF = ga_dnormF(g_A1) / (dnA * n * eps) if (uplo.eq.'L') then call dthtest("||LL' - A|| / (||A|| * N * eps) =", dnF) else call dthtest("||U'U - A|| / (||A|| * N * eps) =", dnF) endif c**** if return code is > 0 else call emsg('It is not positive definite the minor of order:', & irc) endif c**************************************************** c Test Cholesky factorization and solver c internal interfaces with a NxN RHS array c**************************************************** call thead("Test II Cholesky solver with a NxN RHS array") c**** call Cholesky factorization routine in ScaLAPACK PDPOTRF c**** to obtain an LL'/U'U factorization c**** (internal interface: it will not destroy A) #if BLOCK_CYCLIC call ga_copy(g_A, g_AA) #endif hsA = 0 irc = ga_llt_f(uplo, g_A, hsA) c**** if return code from ga_llt_f is zero if (irc.eq.0) then c**** copy B in X call ga_copy(g_B, g_X) c**** call Cholesky solver routine in ScaLAPACK PDPOTRS c**** internal interface with an NxN RHS GA call ga_llt_s(uplo, g_A, g_X, hsA) c**** A1 = A * X #if BLOCK_CYCLIC call ga_copy(g_X, g_BB) call ga_dgemm('N', 'N', n, n, n, 1.d0, & g_AA, g_BB, 0.d0, g_CC) call ga_copy(g_CC,g_A1) #else call ga_dgemm('N', 'N', n, n, n, 1.d0, & g_A, g_X, 0.d0, g_A1) #endif c**** A1 = A1 - B = A * X - B call ga_add(1.d0, g_A1, -1.d0, g_B, g_A1) c**** dnX = ||X|| dnX = ga_dnormF(g_X) c**** dnS = ||AX - B|| / (||A|| * ||X|| * N * eps) dnS = ga_dnormF(G_A1) / (dnA * dnX * n * eps) call dthtest("||A*X - B||/(||A||*||X||*n*eps) =", dnS) c**** if return code is > 0 else call emsg('It is not positive definite the minor of order:', & irc) endif c**************************************************** c Test Cholesky factorization and solver c internal interfaces with a single vector RHS c**************************************************** call thead("Test II Cholesky solver with a single vector RHS") c**** call Cholesky factorization routine in ScaLAPACK PDPOTRF c**** to obtain an LL'/U'U factorization c**** (internal interface: it will not destroy A) #if BLOCK_CYCLIC call ga_copy(g_AA, g_A) #endif hsA = 0 irc = ga_llt_f(uplo, g_A, hsA) c**** if return code from ga_llt_f is zero if (irc.eq.0) then c**** copy Y in Y1 call ga_copy(g_Y, g_Y1) c**** call Cholesky solver routine in ScaLAPACK PDPOTRS c**** internal interface with a single vector RHS call ga_llt_s(uplo, g_A, g_Y1, hsA) c**** dnY1 = ||Y1|| dnY1 = ga_dnormF(g_Y1) c**** Y1 = A * Y1 #if BLOCK_CYCLIC call ga_copy(g_Y1, g_YY) call ga_dgemm('N', 'N', n, 1, n, 1.d0, & g_AA, g_YY, 0.d0, g_ZZ) call ga_copy(g_ZZ,g_Y2) #else call ga_dgemm('N', 'N', n, 1, n, 1.d0, & g_A, g_Y1, 0.d0, g_Y2) #endif c**** Y1 = Y1 - Y = A * Y1 - Y call ga_add(1.d0, g_Y2, -1.d0, g_Y, g_Y1) c**** dnS = ||AY1 - Y|| / (||A|| * ||Y1|| * N * eps) dnS = ga_dnormF(G_A1) / (dnA * dnY1 * n * eps) call dthtest("||A*X - V||/(||A||*||X||*n*eps) =", dnS) c**** if return code is > 0 else call emsg('It is not positive definite the minor of order:', & irc) endif c**************************************************** c Test Cholesky solver with a NxN RHS array c**************************************************** call thead("Test EI Cholesky solver with a NxN RHS array") c**** copy B in X call ga_copy(g_B, g_X) c**** call Cholesky L/U solver with a NxN RHS #if BLOCK_CYCLIC call ga_copy(g_AA,g_A) #endif irc = ga_llt_solve(g_A, g_X) c**** if return code from ga_llt_solve is zero if (irc.eq.0) then c**** A1 = A * X #if BLOCK_CYCLIC call ga_copy(g_X,g_BB) call ga_dgemm('N', 'N', n, n, n, 1.d0, & g_AA, g_BB, 0.d0, g_CC) call ga_copy(g_CC,g_A1) #else call ga_dgemm('N', 'N', n, n, n, 1.d0, & g_A, g_X, 0.d0, g_A1) #endif c**** A1 = A1 - B = A * X - B call ga_add(1.d0, g_A1, -1.d0, g_B, g_A1) c**** dnX = ||X|| dnX = ga_dnormF(g_X) c**** dnS = ||AX - B|| / (||A|| * ||X|| * N * eps) dnS = ga_dnormF(G_A1) / (dnA * dnX * n * eps) call dthtest("||A*X - B||/(||A||*||X||*n*eps) =", dnS) c**** if return code is > 0 else call emsg('It is not positive definite the minor of order:', & irc) endif c**************************************************** c Test Cholesky solver with a single vector RHS c**************************************************** call thead("Test EI Cholesky solver with a single vector RHS") c**** copy Y in Y1 call ga_copy(g_Y, g_Y1) c**** call Cholesky L/U solver with a single vector RHS #if BLOCK_CYCLIC call ga_copy(g_AA,g_A) #endif irc = ga_llt_solve(g_A, g_Y1) c**** if return code from ga_llt_solve is zero if (irc.eq.0) then c**** dnY1 = ||Y1|| dnY1 = ga_dnormF(g_Y1) c**** Y1 = A * Y1 #if BLOCK_CYCLIC call ga_copy(g_Y1,g_YY) call ga_dgemm('N', 'N', n, 1, n, 1.d0, & g_AA, g_YY, 0.d0, g_ZZ) call ga_copy(g_ZZ,g_Y2) #else call ga_dgemm('N', 'N', n, 1, n, 1.d0, & g_A, g_Y1, 0.d0, g_Y2) #endif c**** Y1 = Y1 - Y = A * Y1 - Y call ga_add(1.d0, g_Y2, -1.d0, g_Y, g_Y1) c**** dnS = ||AY1 - Y|| / (||A|| * ||Y1|| * N * eps) dnS = ga_dnormF(G_A1) / (dnA * dnY1 * n * eps) call dthtest("||A*X - V||/(||A||*||X||*n*eps) =", dnS) c**** if return code is > 0 else call emsg('It is not positive definite the minor of order:', & irc) endif c**************************************************** c Test Cholesky factorization and inversion c internal interfaces c**************************************************** call thead("Test II inversion of an SPD matrix") c**** copy A in X #if BLOCK_CYCLIC call ga_copy(g_AA, g_A) #endif call ga_copy(g_A, g_X) c**** call Cholesky factorization routine in ScaLAPACK PDPOTRF c**** to obtain an LL'/U'U factorization c**** (internal interface: it will not destroy X1) hsA = 0 irc = ga_llt_f(uplo, g_X, hsA) c**** if return code from ga_llt_f is zero if (irc.eq.0) then c**** call Cholesky inversion routine in ScaLAPACK PDPOTRI c**** internal interface irc = ga_llt_i(uplo, g_X, hsA) c**** if the inversion could be done if (irc.eq.0) then c**** dnX = ||X|| = ||invA|| dnX = ga_dnormF(g_X) c**** A1 = A * X = A * invA #if BLOCK_CYCLIC call ga_copy(g_X,g_BB) call ga_dgemm('N', 'N', n, n, n, 1.d0, & g_AA, g_BB, 0.d0, g_CC) call ga_copy(g_CC,g_A1) #else call ga_dgemm('N', 'N', n, n, n, 1.d0, & g_A, g_X, 0.d0, g_A1) #endif c**** A1 = A1 - I = A * invA - I do j = me+1, n, nproc call ga_get(g_A1, j, j, j, j, buf, 1) buf(1) = buf(1) - 1.d0 call ga_put(g_A1, j, j, j, j, buf, 1) end do ! j c**** dnI = ||A*invA - I|| / (||A| * ||invA|| * N * eps) dnI = ga_dnormF(g_A1) / (dnA * dnX * n * eps) call dthtest('||A*invA - I||/(||A||*||invA||*n*eps) =', & dnI) else c**** otherwise if the ga_llt_i return code is > 0 call emsg('there is a zero diagonal element:', irc) endif c**** if return code is > 0 else call emsg('It is not positive definite the minor of order:', & irc) endif c**************************************************** c Test Cholesky inversion c**************************************************** call thead("Test inversion of an SPD matrix") c**** copy A in X #if BLOCK_CYCLIC call ga_copy(g_AA, g_A) #endif call ga_copy(g_A, g_X) c**** call Cholesky L/U inversion irc = ga_spd_invert(g_X) c**** if return code from ga_spd_invert is zero if (irc.eq.0) then c**** dnX = ||X|| = ||invA|| dnX = ga_dnormF(g_X) c**** A1 = A * X = A * invA #if BLOCK_CYCLIC call ga_copy(g_X, g_BB) call ga_dgemm('N', 'N', n, n, n, 1.d0, & g_AA, g_BB, 0.d0, g_CC) call ga_copy(g_CC, g_A1) #else call ga_dgemm('N', 'N', n, n, n, 1.d0, & g_A, g_X, 0.d0, g_A1) #endif c**** A1 = A1 - I = A * invA - I do j = me+1, n, nproc call ga_get(g_A1, j, j, j, j, buf, 1) buf(1) = buf(1) - 1.d0 call ga_put(g_A1, j, j, j, j, buf, 1) end do ! j c**** dnI = ||A*invA - I|| / (||A|| * ||invA|| * N * eps) dnI = ga_dnormF(g_A1) / (dnA * dnX * n * eps) call dthtest('||A*invA - I||/(||A||*||invA||*n*eps) =', & dnI) c**** if return code is < 0 elseif (irc.lt.0) then call emsg('there is a zero diagonal element:', irc) c**** if return code is > 0 elseif (irc.gt.0) then call emsg('It is not positive definite the minor of order:', & irc) endif c**************************************************** c* Test general solver with a NxN RSH c* simmetric positive definite array c**************************************************** call thead( & 'Test solver for a symmetric P.D. matrix and NxN RHS' & ) c**** copy B in X call ga_copy(g_B, g_X) c**** call general solver with a NxN RHS p.d. symmetric array #if BLOCK_CYCLIC call ga_copy(g_AA, g_A) #endif irc = ga_solve(g_A, g_X) c**** A1 = A * X #if BLOCK_CYCLIC call ga_copy(g_X, g_BB) call ga_dgemm('N', 'N', n, n, n, 1.d0, & g_AA, g_BB, 0.d0, g_CC) call ga_copy(g_CC, g_A1) #else call ga_dgemm('N', 'N', n, n, n, 1.d0, & g_A, g_X, 0.d0, g_A1) #endif c**** A1 = A1 - B = A * X - B call ga_add(1.d0, g_A1, -1.d0, g_B, g_A1) c**** dnX = ||X|| dnX = ga_dnormF(g_X) c**** dnS = ||AX - B|| / (||A|| * ||X|| * N * eps) dnS = ga_dnormF(G_A1) / (dnA * dnX * n * eps) call dthtest("||A*X - B||/(||A||*||X||*n*eps) =", dnS) call stest(irc, 0) c**************************************************** c* Test general solver with a NxN RSH c* simmetric non positive definite array c**************************************************** call thead( & 'Test solver for a symmetric NON P.D. matrix and NxN RHS') c**** copy B on X1 call ga_copy(g_B, g_X1) c**** and now symmetrize X1 c**** so we obtain a symmetric matrix in X1 call ga_symmetrize(g_X1) c**** copy B in X call ga_copy(g_B, g_X) c**** call general solver with a NxN RHS symmetric array #if BLOCK_CYCLIC call ga_copy(g_X1, g_BB) irc = ga_solve(g_BB, g_X) #else irc = ga_solve(g_X1, g_X) #endif c**** dnX1 = ||X1|| dnX1 = ga_dnormF(g_X1) c**** dnX = ||X|| dnX = ga_dnormF(g_X) c**** A1 = X1 * X #if BLOCK_CYCLIC call ga_copy(g_X1,g_AA) call ga_copy(g_X,g_BB) call ga_dgemm('N', 'N', n, n, n, 1.d0, & g_AA, g_BB, 0.d0, g_CC) call ga_copy(g_CC,g_A1) #else call ga_dgemm('N', 'N', n, n, n, 1.d0, & g_X1, g_X, 0.d0, g_A1) #endif c**** A1 = A1 - B = X1 * X - B call ga_add(1.d0, g_A1, -1.d0, g_B, g_A1) c**** dnS = ||X1*X - B|| / (||X1|| * ||X|| * N * eps) dnS = ga_dnormF(G_A1) / (dnX1 * dnX * n * eps) call dthtest("||A*X - B||/(||A||*||X||*n*eps) =", dnS) call stest(irc, 1) c**************************************************** c CTESTS exit code c**************************************************** c**** just print a newline and return if (me.eq.0) then print *, ' ' endif return end #if BLOCK_CYCLIC subroutine factor(p,idx,idy) implicit none integer i,j,p,idx,idy,it integer ip,ifac,pmax,prime(1280) integer fac(1280) c i = 1 ip = p c c factor p completely c first, find all prime numbers less than or equal to p c pmax = 0 do i = 2, p do j = 1, pmax if (mod(i,prime(j)).eq.0) go to 100 end do pmax = pmax + 1 prime(pmax) = i 100 continue end do c c find all prime factors of p c ifac = 0 do i = 1, pmax 200 if (mod(ip,prime(i)).eq.0) then ifac = ifac + 1 fac(ifac) = prime(i) ip = ip/prime(i) go to 200 endif end do c c determine two factors of p of approximately the c same size c idx = 1 idy = 1 do i = ifac, 1, -1 if (idx.le.idy) then idx = fac(i)*idx else idy = fac(i)*idy endif end do return end #endif ga-5-3/global/testing/stride.F0000640005473000001440000002267011542456270015127 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c vector boxes lack arithmetic precision #ifdef CRAY_YMP # define THRESH 1d-10 #elif defined(FUJITSU) # define THRESH 1d-12 # define THRESHF 1e-5 #else # define THRESH 1d-13 # define THRESHF 1e-5 #endif #define MISMATCH(x,y) abs(x-y)/max(1d0,abs(x)).gt.THRESH #define MISMATCHF(x,y) abs(x-y)/max(1.0,abs(x)).gt.THRESHF program main implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c#include "tcgmsg.fh" integer heap, stack, fudge, ma_heap, me integer nmax, DIM, nwidth, MAXPROC, nloop, nskip parameter (nmax = 174, DIM = 2, nwidth = 0, MAXPROC = 2000) parameter (nloop = 1, nskip = 2) integer ndim, nproc, pdims(7), type, g_a, maxval integer i, j, ichk, ii, jj, ival, dims(7), width(7) integer lo(7), hi(7), ld(7) integer chunk(7), dim_strided(7), lop(7), hip(7) integer a(nmax, nmax), skip(7) parameter (heap=500*500*4, fudge=100, stack=500*500) logical status integer one c c*** Intitialize a message passing library c #include "mp3.fh" c c*** Initialize GA c c There are 2 choices: ga_initialize or ga_initialize_ltd. c In the first case, there is no explicit limit on memory usage. c In the second, user can set limit (per processor) in bytes. c print* call ga_initialize() nproc = ga_nnodes() me = ga_nodeid() c we can also use GA_set_memory_limit BEFORE first ga_create call c ma_heap = heap + fudge call GA_set_memory_limit(util_mdtob(ma_heap)) c if(ga_nodeid().eq.0)then write(6,'(a)') ' GA initialized ' call ffflush(6) endif c c*** Initialize the MA package c MA must be initialized before any global array is allocated c status = ma_init(MT_DCPL, stack, ma_heap) if (.not. status) call ga_error('ma_init failed',-1) c if(me.eq.0)then write(6,'(a,i8,a)') 'using ', nproc, ' process(es)' call ffflush(6) endif c c Test strided put, get, acc calls c ndim = DIM dims(1) = nmax dims(2) = nmax maxval = 1 do i = 1, ndim maxval = dims(i)*maxval end do maxval = maxval - 1 do j = 1, nmax do i = 1, nmax a(i,j) = 0 end do end do c do i = 1, ndim width(i) = nwidth skip(i) = nskip + (i-1) chunk(i) = 1 ld(i) = nmax end do type = MT_INT status = nga_create_ghosts(type, ndim, dims, width, + "test_array", chunk, g_a) if (status.and.me.eq.0) then write(6,'(a)') '*' write(6,'(a)') '* Global array creation was successful' write(6,'(a)') '*' elseif (.not.status) then write(6,'(a,i8)') 'Global array creation failure on ',me endif call ga_zero(g_a) c c initialize g_a c call ga_sync call nga_distribution(g_a, me, lo, hi) c write(6,'(i4,a,i8,a,i8,a,i8,a,i8)') me, ' (dist) lo(1): ',lo(1), c + ' hi(1): ',hi(1),' lo(2): ',lo(2),' hi(2): ',hi(2) c c fill local array a with unique values for each element c do i = 1, hi(1) - lo(1) + 1 do j = 1, hi(2) - lo(2) + 1 a(i,j) = (j + lo(2) - 2)*dims(1) + (i + lo(1) - 2) + 1 end do end do call nga_put(g_a, lo, hi, a, ld) call ga_sync c c reset all values in local array a to zero c do i = 1, hi(1) - lo(1) + 1 do j = 1, hi(2) - lo(2) + 1 a(i,j) = 0 end do end do do i = 1, ndim lo(i) = 1 hi(i) = dims(i) end do call random_range(lo,hi,lop,hip,ndim) c write(6,'(i4,a,i8,a,i8,a,i8,a,i8)') me, ' lop(1): ',lop(1), c + ' hip(1): ',hip(1),' lop(2): ',lop(2),' hip(2): ',hip(2) call nga_strided_get(g_a, lop, hip, skip, a, ld) c c check results c do i = 1, ndim dim_strided(i) = hip(i) - lop(i) dim_strided(i) = dim_strided(i) - mod(dim_strided(i),skip(i)) dim_strided(i) = dim_strided(i)/skip(i) + 1 end do ichk = 0 do j = 1, dim_strided(2) jj = (j-1)*skip(2) + lop(2) do i = 1, dim_strided(1) ii = (i-1)*skip(1) + lop(1) ival = (ii-1) + (jj-1)*dims(1) + 1 if (a(i,j).ne.ival.and.me.eq.0) then write(6,'(a,i4,a,i4,a,i8,a,i8,a,i8)') 'a(',ii,',',jj,'): ', + a(i,j),' ival: ',ival,' dims(1): ',dims(1) ichk = ichk + 1 endif end do end do if (ichk.eq.0.and.me.eq.0) then write(6,'(a)') '*' write(6,'(a)') '* nga_strided_get is 0K' write(6,'(a)') '*' endif c #if 1 call ga_sync call ga_zero(g_a) if (me.eq.1) then call nga_strided_put(g_a, lop, hip, skip, a, ld) one = 1 call nga_strided_acc(g_a, lop, hip, skip, a, ld, one) endif call ga_sync do i = 1, hi(1) - lo(1) + 1 do j = 1, hi(2) - lo(2) + 1 a(i,j) = 0 end do end do call nga_get(g_a, lop, hip, a, ld) do i = 1, ndim dim_strided(i) = hip(i) - lop(i) end do ichk = 0 do j = 1, dim_strided(2) jj = (j-1) + lop(2) do i = 1, dim_strided(1) ii = (i-1) + lop(1) ival = (ii-1) + (jj-1)*dims(1) + 1 ival = 2*ival if (mod(i-1,skip(1)).eq.0.and.mod(j-1,skip(2)).eq.0) then if (a(i,j).ne.ival.and.me.eq.0) then write(6,'(a,i4,a,i4,a,i8,a,i8,a,i8)') 'a2(',ii,',',jj, + '): ',a(i,j),' ival: ',ival,' dims(1): ',dims(1) ichk = ichk + 1 endif else if (a(i,j).ne.0.0d00) ichk = ichk + 1 endif end do end do if (ichk.eq.0.and.me.eq.0) then write(6,'(a)') '*' write(6,'(a)') '* nga_strided_put and nga_strided_acc is 0K' write(6,'(a)') '*' endif #endif c c print out values of a c c call ga_print(g_a) c c*** Tidy up the GA package c call ga_terminate() c c*** Tidy up after message-passing library c call MP_FINALIZE() c stop end c subroutine aprint(a,nrow,ncol,ld,has_data) #include "global.fh" integer ld integer a(ld,*) integer i, j, k, nproc logical has_data(0:1999) nproc = ga_nnodes() do k = 1, nproc call ga_sync if (k-1.eq.ga_nodeid().and.has_data(k-1)) then write(6,*) '*' write(6,*) '* Data on processor ',k-1 write(6,*) '*' do i = 1, min(nrow,12) write (6,102) (a(i,j), j = 1, min(ncol,12)) 102 format(14i5) end do endif call ffflush(6) enddo c return end c subroutine atest(a,nrow,ncol,ld,b,ld2,has_data) #include "global.fh" integer ld integer a(ld,*), b(ld2,*) integer i, j, k, nproc logical has_data(0:1999), check_data nproc = ga_nnodes() check_data = .true. do k = 1, nproc call ga_sync if (k-1.eq.ga_nodeid().and.has_data(k-1)) then do i = 1, nrow do j = 1, ncol if (a(i,j).ne.b(i,j)) check_data = .false. end do end do if (check_data) then write(6,*) '*' write(6,*) '* Data from nga_access_ghosts and' write(6,*) '* nga_periodic_get is the same on' write(6,*) '* processor ',k-1 write(6,*) '*' else write(6,*) '*' write(6,*) '* Data from nga_access_ghosts and' write(6,*) '* nga_periodic_get is NOT the same on' write(6,*) '* processor ',k-1 write(6,*) '*' endif endif call ffflush(6) enddo c return end c subroutine factor(p,ndim,dims) implicit none integer i,j,p,ndim,dims(7),imin,mdim integer ip,ifac,pmax,prime(1000) integer fac(1000) c i = 1 ip = p do i = 1, ndim dims(i) = 1 end do c c factor p completely c first, find all prime numbers less than or equal to p c pmax = 0 do i = 2, p do j = 1, pmax if (mod(i,prime(j)).eq.0) go to 100 end do pmax = pmax + 1 prime(pmax) = i 100 continue end do c c find all prime factors of p c ifac = 0 do i = 1, pmax 200 if (mod(ip,prime(i)).eq.0) then ifac = ifac + 1 fac(ifac) = prime(i) ip = ip/prime(i) go to 200 endif end do c c determine dimensions of processor grid c do i = ifac, 1, -1 c c find dimension with minimum value c imin = dims(1) mdim = 1 do j = 2, ndim if (dims(j).lt.imin) then imin = dims(j) mdim = j endif end do dims(mdim) = dims(mdim)*fac(i) end do c return end c c create a random patch c subroutine random_range(lo,hi,lop,hip,ndim) implicit none #include "testutil.fh" integer lo(1),hi(1),lop(1),hip(1),ndim integer i, range, swap, val,iran iran(range) = int(drand(0)*dble(range)) + 1 do i = 1, ndim range = hi(i)-lo(i)+1 val = iran(range) lop(i) = lo(i) + val val = iran(range) hip(i) = hi(i) - val if(hip(i) .lt. lop(i))then swap =hip(i) hip(i)=lop(i) lop(i)=swap endif hip(i)=MIN(hip(i),hi(i)) lop(i)=MAX(lop(i),lo(i)) enddo end ga-5-3/global/testing/unit-tests/0000750005473000001440000000000012275260557015642 5ustar d3n000usersga-5-3/global/testing/unit-tests/ga_dgop.c0000640005473000001440000000761111721245236017404 0ustar d3n000users/* * Test Program for GA * This is to test GA_Dgop (is a collective operation) * * */ #include #include #include #include"mpi.h" #include"ga.h" #include"macdecls.h" addition_operator(int rank, int nprocs, int n) { int i; double x[n], temp[n]; for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define ONE_DIM 1 #define TWO_DIM 2 #define SIZE 5 one_dimension_array(int rank, int val_V, int val_scale) { int g_V, *local_V=NULL, dims_V=SIZE; int lo=SIZE-SIZE, hi=SIZE-1, i, ld=SIZE; local_V=(int*)malloc(SIZE*sizeof(int)); g_V = NGA_Create(C_INT, ONE_DIM, &dims_V, "array_A", NULL); GA_Fill(g_V, &val_V); GA_Scale(g_V, &val_scale); GA_Print(g_V); NGA_Get(g_V, &lo, &hi, local_V, &ld); if(rank==1) { for(i=0; i #include #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define NUM 10 #if 0 addition_operator(int rank, int nprocs, int n) { int x[n], i, temp[n]; char op='+'; for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define N 5 #define D 2 main(int argc, char **argv) { int rank, nprocs; int g_A, dims[D]={5,10}, local_A[N], local_G[N], sub_array[N][D], **s_array=NULL; int i, j, value=5; MPI_Init(&argc, &argv); GA_Initialize(); MA_init(C_INT, 1000, 1000); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); s_array=(int**)malloc(N*sizeof(int*)); for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 #define SIZE 5 fillandscale(int rank, int nprocs) { int g_A, val1=5, val2=5, local_A[SIZE][SIZE], i, j; int dims[DIM]={SIZE,SIZE}, alo[DIM]={1,1}, ahi[DIM]={2,2}, ld=5; g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); GA_Zero(g_A); NGA_Fill_patch(g_A, alo, ahi, &val1); GA_Print(g_A); GA_Scale(g_A, &val2); GA_Print(g_A); NGA_Get(g_A, alo, ahi, local_A, &ld); if(rank == 1) { for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 #define SIZ 5 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, local_A[SIZ][SIZ], dims[DIM]={SIZ,SIZ}, val1=5, alpha=3; int alo[DIM]={2,2}, ahi[DIM]={3,3}, ld=SIZ; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); GA_Fill(g_A, &val1); GA_Print(g_A); GA_Add_constant_patch(g_A, alo, ahi, &alpha); GA_Print(g_A); NGA_Get(g_A, alo, ahi, local_A, &ld); if(rank==1) { for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define DIM 2 #define SIZE 5 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, **local_A=NULL, **local_B=NULL; int dims[DIM]={SIZE,SIZE}, dims2[DIM], lo[DIM]={SIZE-SIZE,SIZE-SIZE}, hi[DIM]={SIZE-1,SIZE-1}, ld=5, value=5; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); local_A=(int**)malloc(SIZE*sizeof(int*)); for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 #define GSIZE 10 irregular_array1(int rank) { int g_A, g_B; int dims[DIM]={5,10}, dims2[DIM], ndim, type, value=5, block[DIM]={2,3}, map[5]={0,2,0,4,6}, val=7; int n_block[DIM], block_dims[DIM], i; g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); g_B = NGA_Create_irreg(C_INT, DIM, dims, "array_B", block, map); GA_Fill(g_A, &value); GA_Print(g_A); GA_Fill(g_B, &val); GA_Print(g_B); GA_Sync(); NGA_Inquire(g_A, &type, &ndim, dims2); //printf(" %d -- %d,,\n", type, ndim); /* GA_Get_block_info(g_B, n_block, block_dims); for(i=0; i=GSIZE); block[0]=b1; block[1]=b2; map=(int*)malloc(nprocs*sizeof(int)); for(i=0; i=GSIZE); block[0]=b1; block[1]=b2; map=(int*)malloc(nprocs*sizeof(int)); for(i=0; i #include #include #include #include "mock.h" #include "abstract_ops.h" void Mock_Abs_value(mock_ga_t *g_a) { ITER_DECLARE_VARS(g_a) switch (g_a->type) { #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ ITER_DECLARE_BUFFER(g_a,C_TYPE) \ ITER_INIT(g_a,C_TYPE) \ ITER_BEGIN(g_a,C_TYPE) \ assign_abs_##AT(*g_a_buf,*g_a_buf); \ ITER_NEXT(g_a) \ ITER_END \ break; \ } #include "types.xh" #undef TYPE_CASE } } void Mock_Abs_value_patch(mock_ga_t *g_a, int *lo, int *hi) { ITER_DECLARE_VARS_PATCH(g_a) switch (g_a->type) { #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ ITER_DECLARE_BUFFER(g_a,C_TYPE) \ ITER_INIT_PATCH(g_a,C_TYPE,lo,hi) \ ITER_BEGIN(g_a,C_TYPE) \ assign_abs_##AT(*g_a_buf,*g_a_buf); \ ITER_NEXT_PATCH(g_a) \ ITER_END \ break; \ } #include "types.xh" #undef TYPE_CASE } } void Mock_Access_block_grid(mock_ga_t *g_a, int index[], void *ptr, int ld[]) { } void Mock_Access_block(mock_ga_t *g_a, int idx, void *ptr, int ld[]) { } void Mock_Access_block_segment(mock_ga_t *g_a, int proc, void *ptr, int *len) { } void Mock_Access_ghost_element(mock_ga_t *g_a, void *ptr, int subscript[], int ld[]) { } void Mock_Access_ghosts(mock_ga_t *g_a, int dims[], void *ptr, int ld[]) { } void Mock_Access(mock_ga_t *g_a, int lo[], int hi[], void *ptr, int ld[]) { } void Mock_Acc(mock_ga_t *g_a, int lo[], int hi[],void* buf, int ld[],void* alpha) { } void Mock_Add_constant(mock_ga_t *g_a, void* alpha) { ITER_DECLARE_VARS(g_a) switch (g_a->type) { #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ C_TYPE value = *((C_TYPE*)alpha); \ ITER_DECLARE_BUFFER(g_a,C_TYPE) \ ITER_INIT(g_a,C_TYPE) \ ITER_BEGIN(g_a,C_TYPE) \ add_assign_##AT(*g_a_buf,value); \ ITER_NEXT(g_a) \ ITER_END \ break; \ } #include "types.xh" #undef TYPE_CASE } } void Mock_Add_constant_patch(mock_ga_t *g_a, int *lo, int *hi,void *alpha) { /* ITER_DECLARE_VARS_PATCH(g_a) switch (g_a->type){ #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ C_TYPE value = *((C_TYPE*)alpha); \ ITER_DECLARE_BUFFER(g_a,C_TYPE) \ ITER_INIT(g_a,C_TYPE) \ ITER_BEGIN(g_a,C_TYPE) \ add_assign_##AT(*g_a_buf,value); \ ITIR_NEXT_PATCH(g_a) \ ITER_END \ break; \ } #include "types.xh" #undef TYPE_CASE } */ } void Mock_Add_diagonal(mock_ga_t *g_a, int g_v) { } void Mock_Add_patch(void * alpha, mock_ga_t *g_a, int alo[], int ahi[], void * beta, mock_ga_t *g_b, int blo[], int bhi[], mock_ga_t *g_c, int clo[], int chi[]) { } void Mock_Add(void *alpha, mock_ga_t *g_a, void* beta, mock_ga_t *g_b, mock_ga_t *g_c) { } int Mock_Allocate(mock_ga_t *g_a) { } int Mock_Assemble_duplicate(mock_ga_t *g_a, char *name, void *ptr) { } void Mock_Brdcst(void *buf, int lenbuf, int root) { } SingleComplex Mock_Cdot(mock_ga_t *g_a, mock_ga_t *g_b) { } SingleComplex Mock_Cdot_patch(mock_ga_t *g_a, char t_a, int alo[], int ahi[], mock_ga_t *g_b, char t_b, int blo[], int bhi[]) { } void Mock_Cgemm(char ta, char tb, int m, int n, int k, SingleComplex alpha, mock_ga_t *g_a, mock_ga_t *g_b, SingleComplex beta, mock_ga_t *g_c ) { } void Mock_Cgop(SingleComplex x[], int n, char *op) { } void Mock_Check_handle(mock_ga_t *g_a, char *string) { } int Mock_Cluster_nnodes(void) { } int Mock_Cluster_nodeid(void) { } int Mock_Cluster_nprocs(int x) { } int Mock_Cluster_procid(int x, int y) { } int Mock_Cluster_proc_nodeid(int proc) { } int Mock_Compare_distr(mock_ga_t *g_a, mock_ga_t *g_b) { } void Mock_Copy(mock_ga_t *g_a, mock_ga_t *g_b) { } void Mock_Copy_patch(char trans, mock_ga_t *g_a, int alo[], int ahi[], mock_ga_t *g_b, int blo[], int bhi[]) { } mock_ga_t* Mock_Create_config(int type, int ndim, int dims[], char *name, int chunk[], int p_handle) { return Mock_Create(type, ndim, dims, name, chunk); } mock_ga_t* Mock_Create_ghosts_config(int type, int ndim, int dims[], int width[], char *name, int chunk[], int p_handle) { return Mock_Create(type, ndim, dims, name, chunk); } mock_ga_t* Mock_Create_ghosts(int type, int ndim, int dims[], int width[], char *name, int chunk[]) { return Mock_Create(type, ndim, dims, name, chunk); } mock_ga_t* Mock_Create_ghosts_irreg_config(int type, int ndim, int dims[], int width[], char *name, int map[], int nblock[], int p_handle) { return Mock_Create(type, ndim, dims, name, NULL); } mock_ga_t* Mock_Create_ghosts_irreg(int type, int ndim, int dims[], int width[], char *name, int map[], int nblock[]) { return Mock_Create(type, ndim, dims, name, NULL); } mock_ga_t* Mock_Create_handle(void) { return (mock_ga_t*)malloc(sizeof(mock_ga_t)); } mock_ga_t* Mock_Create(int type, int ndim, int dims[], char *name, int chunk[]) { int i; int nd_m1 = ndim-1; mock_ga_t *g_a = (mock_ga_t*)malloc(sizeof(mock_ga_t)); g_a->type = type; g_a->ndim = ndim; g_a->nd_m1 = nd_m1; g_a->size = 1; g_a->itemsize = (int)type_to_size(type); memset(g_a->dims, 0, sizeof(int)*GA_MAX_DIM); memset(g_a->dims_m1, 0, sizeof(int)*GA_MAX_DIM); memset(g_a->strides, 0, sizeof(int)*GA_MAX_DIM); memset(g_a->backstrides, 0, sizeof(int)*GA_MAX_DIM); for (i=0; idims[i] = dims[i]; g_a->size *= dims[i]; } /* setup important iterator variables */ for (i=nd_m1; i>=0; --i) { g_a->dims_m1[i] = dims[i]-1; g_a->strides[i] = (i == nd_m1) ? 1 : g_a->strides[i+1]*g_a->dims[i+1]; g_a->backstrides[i] = g_a->dims_m1[i]*g_a->strides[i]; } #if 0 /* scale the back/strides based on itemsize */ for (i=0; istrides[i] *= g_a->itemsize; g_a->backstrides[i] *= g_a->itemsize; } #endif g_a->buf = malloc(g_a->size * g_a->itemsize); #if 0 printf("Mock_Create(%d, %d, dims, %s, chunk)\n", type, ndim, name); aprint("dims", g_a->dims, g_a->ndim); aprint("dims_m1", g_a->dims_m1, g_a->ndim); aprint("strides", g_a->strides, g_a->ndim); aprint("backstrides", g_a->backstrides, g_a->ndim); #endif return g_a; } mock_ga_t* Mock_Create_irreg_config(int type, int ndim, int dims[],char *name, int block[], int map[], int p_handle) { return Mock_Create(type, ndim, dims, name, NULL); } mock_ga_t* Mock_Create_irreg(int type, int ndim, int dims[],char *name, int block[], int map[]) { return Mock_Create(type, ndim, dims, name, NULL); } int Mock_Create_mutexes(int number) { } double Mock_Ddot(mock_ga_t *g_a, mock_ga_t *g_b) { } double Mock_Ddot_patch(mock_ga_t *g_a, char t_a, int alo[], int ahi[], mock_ga_t *g_b, char t_b, int blo[], int bhi[]) { } int Mock_Deregister_type(int type) { } void Mock_Destroy(mock_ga_t *g_a) { } int Mock_Destroy_mutexes(void) { } void Mock_Dgemm(char ta, char tb, int m, int n, int k, double alpha, mock_ga_t *g_a, mock_ga_t *g_b, double beta, mock_ga_t *g_c ) { } void Mock_Dgop(double x[], int n, char *op) { } void Mock_Diag(mock_ga_t *g_a, int g_s, int g_v, void *eval) { } void Mock_Diag_reuse(int reuse, mock_ga_t *g_a, int g_s, int g_v, void *eval) { } void Mock_Diag_seq(mock_ga_t *g_a, int g_s, int g_v, void *eval) { } void Mock_Diag_std(mock_ga_t *g_a, int g_v, void *eval) { } void Mock_Diag_std_seq(mock_ga_t *g_a, int g_v, void *eval) { } void Mock_Distribution(mock_ga_t *g_a, int iproc, int lo[], int hi[]) { } mock_ga_t* Mock_Duplicate(mock_ga_t *g_a, char* array_name) { } void Mock_Elem_divide(mock_ga_t *g_a, mock_ga_t *g_b, mock_ga_t *g_c) { /* TODO FIXME: wasn't compiling */ #if 0 ITER_DECLARE_VARS(g_a) ITER_DECLARE_VARS(g_b) ITER_DECLARE_VARS(g_c) switch (g_a->type) { #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ ITER_DECLARE_BUFFER(g_a,C_TYPE) \ ITER_DECLARE_BUFFER(g_b,C_TYPE) \ ITER_DECLARE_BUFFER(g_c,C_TYPE) \ ITER_INIT(g_a,C_TYPE) \ ITER_INIT(g_b,C_TYPE) \ ITER_INIT(g_c,C_TYPE) \ ITER_BEGIN(g_a,C_TYPE) \ assign_div_##AT(*g_c_buf,*g_a_buf,*g_b_buf); \ ITER_NEXT(g_a) \ ITER_NEXT(g_b) \ ITER_NEXT(g_c) \ ITER_END \ break; \ } #include "types.xh" #undef TYPE_CASE } #endif } void Mock_Elem_divide_patch(mock_ga_t *g_a, int *alo, int *ahi, mock_ga_t *g_b, int *blo, int *bhi,mock_ga_t *g_c, int *clo, int *chi) { } void Mock_Elem_maximum(mock_ga_t *g_a, mock_ga_t *g_b, mock_ga_t *g_c) { ITER_DECLARE_VARS(g_a) ITER_DECLARE_VARS(g_b) ITER_DECLARE_VARS(g_c) switch (g_a->type) { #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ ITER_DECLARE_BUFFER(g_a,C_TYPE) \ ITER_DECLARE_BUFFER(g_b,C_TYPE) \ ITER_DECLARE_BUFFER(g_c,C_TYPE) \ ITER_INIT(g_a,C_TYPE) \ ITER_INIT(g_b,C_TYPE) \ ITER_INIT(g_c,C_TYPE) \ ITER_BEGIN(g_a,C_TYPE) \ assign_max_##AT(*g_c_buf,*g_a_buf,*g_b_buf); \ ITER_NEXT(g_a) \ ITER_NEXT(g_b) \ ITER_NEXT(g_c) \ ITER_END \ break; \ } #include "types.xh" #undef TYPE_CASE } } void Mock_Elem_maximum_patch(mock_ga_t *g_a, int *alo, int *ahi, mock_ga_t *g_b, int *blo, int *bhi,mock_ga_t *g_c, int *clo, int *chi) { } void Mock_Elem_minimum(mock_ga_t *g_a, mock_ga_t *g_b, mock_ga_t *g_c) { ITER_DECLARE_VARS(g_a) ITER_DECLARE_VARS(g_b) ITER_DECLARE_VARS(g_c) switch (g_a->type) { #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ ITER_DECLARE_BUFFER(g_a,C_TYPE) \ ITER_DECLARE_BUFFER(g_b,C_TYPE) \ ITER_DECLARE_BUFFER(g_c,C_TYPE) \ ITER_INIT(g_a,C_TYPE) \ ITER_INIT(g_b,C_TYPE) \ ITER_INIT(g_c,C_TYPE) \ ITER_BEGIN(g_a,C_TYPE) \ assign_max_##AT(*g_c_buf,*g_a_buf,*g_b_buf); \ ITER_NEXT(g_a) \ ITER_NEXT(g_b) \ ITER_NEXT(g_c) \ ITER_END \ break; \ } #include "types.xh" #undef TYPE_CASE } } void Mock_Elem_minimum_patch(mock_ga_t *g_a, int *alo, int *ahi, mock_ga_t *g_b, int *blo, int *bhi,mock_ga_t *g_c, int *clo, int *chi) { /* ITER_DECLARE_VARS_PATCH(g_a) ITER_DECLARE_VARS_PATCH(g_b) ITER_DECLARE_VARS_PATCH(g_c) switch (g_a->type) { #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ ITER_DECLARE_BUFFER(g_a,C_TYPE) \ ITER_DECLARE_BUFFER(g_b,C_TYPE) \ ITER_DECLARE_BUFFER(g_c,C_TYPE) \ ITER_BEGIN(g_a,C_TYPE,lo,hi) \ assign_abs_##AT(*g_a_buf,*g_a_buf); \ ITER_NEXT_PATCH(g_a) \ ITER_END \ break; \ } #include "types.xh" #undef TYPE_CASE } */ } void Mock_Elem_multiply(mock_ga_t *g_a, mock_ga_t *g_b, mock_ga_t *g_c) { ITER_DECLARE_VARS(g_a) ITER_DECLARE_VARS(g_b) ITER_DECLARE_VARS(g_c) switch (g_a->type) { #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ ITER_DECLARE_BUFFER(g_a,C_TYPE) \ ITER_DECLARE_BUFFER(g_b,C_TYPE) \ ITER_DECLARE_BUFFER(g_c,C_TYPE) \ ITER_INIT(g_a,C_TYPE) \ ITER_INIT(g_b,C_TYPE) \ ITER_INIT(g_c,C_TYPE) \ ITER_BEGIN(g_a,C_TYPE) \ assign_mul_##AT(*g_c_buf,*g_a_buf,*g_b_buf); \ ITER_NEXT(g_a) \ ITER_NEXT(g_b) \ ITER_NEXT(g_c) \ ITER_END \ break; \ } #include "types.xh" #undef TYPE_CASE } } void Mock_Elem_multiply_patch(mock_ga_t *g_a, int *alo, int *ahi, mock_ga_t *g_b, int *blo, int *bhi,mock_ga_t *g_c, int *clo, int *chi) { } void Mock_Error(char *str, int code) { } float Mock_Fdot(mock_ga_t *g_a, mock_ga_t *g_b) { } float Mock_Fdot_patch(mock_ga_t *g_a, char t_a, int alo[], int ahi[], mock_ga_t *g_b, char t_b, int blo[], int bhi[]) { } void Mock_Fence(void) { } void Mock_Fgop(float x[], int n, char *op) { } void Mock_Fill(mock_ga_t *g_a, void *value) { ITER_DECLARE_VARS(g_a) switch (g_a->type) { #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ ITER_DECLARE_BUFFER(g_a,C_TYPE) \ ITER_INIT(g_a,C_TYPE) \ ITER_BEGIN(g_a,C_TYPE) \ assign_##AT(*g_a_buf,*g_a_buf); \ ITER_NEXT(g_a) \ ITER_END \ break; \ } #include "types.xh" #undef TYPE_CASE } } void Mock_Fill_patch(mock_ga_t *g_a, int lo[], int hi[], void *val) { } void Mock_Freemem(void* ptr) { } void Mock_Gather_flat(mock_ga_t *g_a, void *v, int subsArray[], int n) { } void Mock_Gather(mock_ga_t *g_a, void *v, int* subsArray[], int n) { } void Mock_Get_block_info(mock_ga_t *g_a, int num_blocks[], int block_dims[]) { } int Mock_Get_debug(void) { } void Mock_Get_diag(mock_ga_t *g_a, int g_v) { } int Mock_Get_dimension(mock_ga_t *g_a) { } void Mock_Get_field(mock_ga_t *g_a, int *lo, int *hi, int foff, int fsize, void *buf, int *ld) { } void Mock_Get_ghost_block(mock_ga_t *g_a, int lo[], int hi[], void *buf, int ld[]) { } void Mock_Get(mock_ga_t *g_a, int lo[], int hi[], void* buf, int ld[]) { } void* Mock_Getmem(int type, int nelem, int grp_id) { } int Mock_Get_pgroup(mock_ga_t *g_a) { } int Mock_Get_pgroup_size(int grp_id) { } void Mock_Get_proc_grid(mock_ga_t *g_a, int dims[]) { } void Mock_Get_proc_index(mock_ga_t *g_a, int iproc, int subscript[]) { } void Mock_Gop(int type, void *x, int n, char *op) { } int Mock_Has_ghosts(mock_ga_t *g_a) { } int Mock_Idot(mock_ga_t *g_a, mock_ga_t *g_b) { } int Mock_Idot_patch(mock_ga_t *g_a, char t_a, int alo[], int ahi[], mock_ga_t *g_b, char t_b, int blo[], int bhi[]) { } void Mock_Igop(int x[], int n, char *op) { } void Mock_Init_fence(void) { } void Mock_Initialize_args(int *argc, char ***argv) { } void Mock_Initialize_ltd(size_t limit) { } void Mock_Initialize(void) { } void Mock_Inquire(mock_ga_t *g_a, int *type, int *ndim, int dims[]) { } size_t Mock_Inquire_memory(void) { } char* Mock_Inquire_name(mock_ga_t *g_a) { } int Mock_Is_mirrored(mock_ga_t *g_a) { } long Mock_Ldot(mock_ga_t *g_a, mock_ga_t *g_b) { } long Mock_Ldot_patch(mock_ga_t *g_a, char t_a, int alo[], int ahi[], mock_ga_t *g_b, char t_b, int blo[], int bhi[]) { } void Mock_Lgop(long x[], int n, char *op) { } void Mock_List_nodeid(int *list, int nprocs) { } long long Mock_Lldot(mock_ga_t *g_a, mock_ga_t *g_b) { } long long Mock_Lldot_patch(mock_ga_t *g_a, char t_a, int alo[], int ahi[], mock_ga_t *g_b, char t_b, int blo[], int bhi[]) { } void Mock_Llgop(long long x[], int n, char *op) { } int Mock_Llt_solve(mock_ga_t *g_a, mock_ga_t *g_b) { } int Mock_Locate(mock_ga_t *g_a, int subscript[]) { } int Mock_Locate_nnodes(mock_ga_t *g_a, int lo[], int hi[]) { } int Mock_Locate_num_blocks(mock_ga_t *g_a, int lo[], int hi[]) { } int Mock_Locate_region(mock_ga_t *g_a, int lo[], int hi[], int map[], int procs[]) { } void Mock_Lock(int mutex) { } void Mock_Lu_solve(char tran, mock_ga_t *g_a, mock_ga_t *g_b) { } void Mock_Mask_sync(int first, int last) { } void Mock_Matmul_patch_2d(char transa, char transb, void* alpha, void *beta, mock_ga_t *g_a, int ailo, int aihi, int ajlo, int ajhi, mock_ga_t *g_b, int bilo, int bihi, int bjlo, int bjhi, mock_ga_t *g_c, int cilo, int cihi, int cjlo, int cjhi) { } void Mock_Matmul_patch(char transa, char transb, void* alpha, void *beta, mock_ga_t *g_a, int alo[], int ahi[], mock_ga_t *g_b, int blo[], int bhi[], mock_ga_t *g_c, int clo[], int chi[]) { } void Mock_Median(mock_ga_t *g_a, mock_ga_t *g_b, mock_ga_t *g_c, int g_m) { } void Mock_Median_patch(mock_ga_t *g_a, int *alo, int *ahi, mock_ga_t *g_b, int *blo, int *bhi, mock_ga_t *g_c, int *clo, int *chi, int g_m, int *mlo, int *mhi) { } size_t Mock_Memory_avail(void) { } int Mock_Memory_limited(void) { } void Mock_Merge_distr_patch(mock_ga_t *g_a, int alo[], int ahi[], mock_ga_t *g_b, int blo[], int bhi[]) { } void Mock_Merge_mirrored(mock_ga_t *g_a) { } void Mock_NbAcc(mock_ga_t *g_a, int lo[], int hi[],void* buf, int ld[],void* alpha, ga_nbhdl_t* nbhandle) { } void Mock_Nbget_field(mock_ga_t *g_a, int *lo, int *hi, int foff, int fsize,void *buf, int *ld, ga_nbhdl_t *nbhandle) { } void Mock_NbGet_ghost_dir(mock_ga_t *g_a, int mask[], ga_nbhdl_t* handle) { } void Mock_NbGet(mock_ga_t *g_a, int lo[], int hi[], void* buf, int ld[], ga_nbhdl_t* nbhandle) { } void Mock_Nblock(mock_ga_t *g_a, int *nblock) { } void Mock_Nbput_field(mock_ga_t *g_a, int *lo, int *hi, int foff, int fsize, void *buf, int *ld, ga_nbhdl_t *nbhandle) { } void Mock_NbPut(mock_ga_t *g_a, int lo[], int hi[], void* buf, int ld[], ga_nbhdl_t* nbhandle) { } int Mock_NbTest(ga_nbhdl_t* nbhandle) { } void Mock_NbWait(ga_nbhdl_t* nbhandle) { } int Mock_Ndim(mock_ga_t *g_a) { } int Mock_Nnodes(void) { } int Mock_Nodeid(void) { } void Mock_Norm1(mock_ga_t *g_a, double *nm) { } void Mock_Norm_infinity(mock_ga_t *g_a, double *nm) { } void Mock_Periodic_acc(mock_ga_t *g_a, int lo[], int hi[],void* buf, int ld[],void* alpha) { } void Mock_Periodic_get(mock_ga_t *g_a, int lo[], int hi[], void* buf, int ld[]) { } void Mock_Periodic_put(mock_ga_t *g_a, int lo[], int hi[], void* buf, int ld[]) { } int Mock_Pgroup_absolute_id(int pgroup, int pid) { } void Mock_Pgroup_brdcst(int grp, void *buf, int lenbuf, int root) { } void Mock_Pgroup_cgop(int grp, SingleComplex x[], int n, char *op) { } int Mock_Pgroup_create(int *list, int count) { } int Mock_Pgroup_destroy(int grp) { } void Mock_Pgroup_dgop(int grp, double x[], int n, char *op) { } void Mock_Pgroup_fgop(int grp, float x[], int n, char *op) { } int Mock_Pgroup_get_default(void) { } int Mock_Pgroup_get_mirror(void) { } int Mock_Pgroup_get_world(void) { } void Mock_Pgroup_igop(int grp, int x[], int n, char *op) { } void Mock_Pgroup_lgop(int grp, long x[], int n, char *op) { } void Mock_Pgroup_llgop(int grp, long long x[], int n, char *op) { } int Mock_Pgroup_nnodes(int grp_id) { } int Mock_Pgroup_nodeid(int grp_id) { } void Mock_Pgroup_set_default(int p_handle) { } int Mock_Pgroup_split(int grp_id, int num_group) { } int Mock_Pgroup_split_irreg(int grp_id, int color) { } void Mock_Pgroup_sync(int grp_id) { } void Mock_Pgroup_zgop(int grp, DoubleComplex x[], int n, char *op) { } void Mock_Print_distribution(mock_ga_t *g_a) { } void Mock_Print_file(FILE *file, mock_ga_t *g_a) { } /* just for debugging purposes */ void Mock_Print(mock_ga_t *g_a) { switch (g_a->type) { #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ int i,j; \ int coords[GA_MAX_DIM] = {0}; \ C_TYPE *ptr = (C_TYPE*)(g_a->buf); \ for (i=0; isize; ++i) { \ printf("%d (%d", i, coords[0]); \ for (j=1; jndim; ++j) { \ printf(",%d", coords[j]); \ } \ printf(") " AT "\n", ptr[i]); \ for (j=g_a->nd_m1; j>=0; --j) { \ if (coords[j] < g_a->dims_m1[j]) { \ ++coords[j]; \ break; \ } \ else { \ coords[j] = 0; \ } \ } \ } \ break; \ } TYPE_CASE(C_INT,int,"%d") TYPE_CASE(C_LONG,long,"%ld") TYPE_CASE(C_LONGLONG,long long,"%lld") TYPE_CASE(C_FLOAT,float,"%f") TYPE_CASE(C_DBL,double,"%f") #undef TYPE_CASE #define TYPE_CASE(GA_TYPE,C_TYPE) \ case GA_TYPE: \ { \ int i,j; \ int coords[GA_MAX_DIM] = {0}; \ C_TYPE *ptr = (C_TYPE*)(g_a->buf); \ for (i=0; isize; ++i) { \ printf("%d (%d", i, coords[0]); \ for (j=1; jndim; ++j) { \ printf(",%d", coords[j]); \ } \ printf(") %f+%fi\n", ptr[i].real, ptr[i].imag); \ for (j=g_a->nd_m1; j>=0; --j) { \ if (coords[j] <= g_a->dims_m1[j]) { \ ++coords[j]; \ break; \ } \ else { \ coords[j] = 0; \ } \ } \ } \ break; \ } TYPE_CASE(C_SCPL,SingleComplex) TYPE_CASE(C_DCPL,DoubleComplex) #undef TYPE_CASE } } void Mock_Print_patch_2d(mock_ga_t *g_a, int ilo, int ihi, int jlo, int jhi, int pretty) { } void Mock_Print_patch(mock_ga_t *g_a, int lo[], int hi[], int pretty) { } void Mock_Print_stats(void) { } void Mock_Proc_topology(mock_ga_t *g_a, int proc, int coord[]) { } void Mock_Put_field(mock_ga_t *g_a, int *lo, int *hi, int foff, int fsize, void *buf, int *ld) { } void Mock_Put(mock_ga_t *g_a, int lo[], int hi[], void* buf, int ld[]) { } void Mock_Randomize(mock_ga_t *g_a, void *value) { switch (g_a->type) { #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ int i; \ C_TYPE *ptr = (C_TYPE*)(g_a->buf); \ C_TYPE val = *((C_TYPE*)value); \ for (i=0; isize; ++i) { \ assign_rand_##AT(ptr[i],val); \ } \ break; \ } #include "types.xh" #undef TYPE_CASE } } long Mock_Read_inc(mock_ga_t *g_a, int subscript[], long inc) { } void Mock_Recip(mock_ga_t *g_a) { } void Mock_Recip_patch(mock_ga_t *g_a, int *lo, int *hi) { } void Mock_Register_stack_memory(void * (*ext_alloc)(size_t, int, char *), void (*ext_free)(void *)) { } int Mock_Register_type(size_t bytes) { } void Mock_Release_block_grid(mock_ga_t *g_a, int index[]) { } void Mock_Release_block(mock_ga_t *g_a, int idx) { } void Mock_Release_block_segment(mock_ga_t *g_a, int idx) { } void Mock_Release_ghost_element(mock_ga_t *g_a, int index[]) { } void Mock_Release_ghosts(mock_ga_t *g_a) { } void Mock_Release(mock_ga_t *g_a, int lo[], int hi[]) { } void Mock_Release_update_block_grid(mock_ga_t *g_a, int index[]) { } void Mock_Release_update_block(mock_ga_t *g_a, int idx) { } void Mock_Release_update_block_segment(mock_ga_t *g_a, int idx) { } void Mock_Release_update_ghost_element(mock_ga_t *g_a, int index[]) { } void Mock_Release_update_ghosts(mock_ga_t *g_a) { } void Mock_Release_update(mock_ga_t *g_a, int lo[], int hi[]) { } void Mock_Scale_cols(mock_ga_t *g_a, int g_v) { } void Mock_Scale(mock_ga_t *g_a, void *value) { /* ITER_DECLARE_VARS(g_a) switch (g_a->type) { #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ C_TYPE value = *((C_TYPE*)alpha); \ ITER_DECLARE_BUFFER(g_a,C_TYPE) \ ITER_INIT(g_a,C_TYPE) \ ITER_BEGIN(g_a,C_TYPE) \ add_assign_##AT(*g_a_buf,value); \ ITER_NEXT(g_a) \ ITER_END \ break; \ } #include "types.xh" #undef TYPE_CASE } */ } void Mock_Scale_patch(mock_ga_t *g_a, int lo[], int hi[], void *alpha) { } void Mock_Scale_rows(mock_ga_t *g_a, int g_v) { } void Mock_Scan_add(mock_ga_t *g_a, mock_ga_t *g_b, int g_sbit, int lo, int hi, int excl) { } void Mock_Scan_copy(mock_ga_t *g_a, mock_ga_t *g_b, int g_sbit, int lo, int hi) { } void Mock_Scatter_acc_flat(mock_ga_t *g_a, void *v, int subsArray[], int n, void *alpha) { } void Mock_Scatter_acc(mock_ga_t *g_a, void *v, int* subsArray[], int n, void *alpha) { } void Mock_Scatter_flat(mock_ga_t *g_a, void *v, int subsArray[], int n) { } void Mock_Scatter(mock_ga_t *g_a, void *v, int* subsArray[], int n) { } void Mock_Select_elem(mock_ga_t *g_a, char* op, void* val, int *index) { } void Mock_Set_array_name(mock_ga_t *g_a, char *name) { } void Mock_Set_block_cyclic(mock_ga_t *g_a, int dims[]) { } void Mock_Set_block_cyclic_proc_grid(mock_ga_t *g_a, int block[], int proc_grid[]) { } void Mock_Set_chunk(mock_ga_t *g_a, int chunk[]) { } void Mock_Set_data(mock_ga_t *g_a, int ndim, int dims[], int type) { } void Mock_Set_debug(int flag) { } void Mock_Set_diagonal(mock_ga_t *g_a, int g_v) { } void Mock_Set_ghost_corner_flag(mock_ga_t *g_a, int flag) { } void Mock_Set_ghosts(mock_ga_t *g_a, int width[]) { } void Mock_Set_irreg_distr(mock_ga_t *g_a, int map[], int block[]) { } void Mock_Set_irreg_flag(mock_ga_t *g_a, int flag) { } void Mock_Set_memory_limit(size_t limit) { } void Mock_Set_pgroup(mock_ga_t *g_a, int p_handle) { } void Mock_Set_restricted(mock_ga_t *g_a, int list[], int size) { } void Mock_Set_restricted_range(mock_ga_t *g_a, int lo_proc, int hi_proc) { } void Mock_Sgemm(char ta, char tb, int m, int n, int k, float alpha, mock_ga_t *g_a, mock_ga_t *g_b, float beta, mock_ga_t *g_c ) { } void Mock_Shift_diagonal(mock_ga_t *g_a, void *c) { } int Mock_Solve(mock_ga_t *g_a, mock_ga_t *g_b) { } int Mock_Spd_invert(mock_ga_t *g_a) { } void Mock_Step_bound_info(int g_xx, int g_vv, int g_xxll, int g_xxuu, void *boundmin, void *wolfemin, void *boundmax) { } void Mock_Step_bound_info_patch(int g_xx, int *xxlo, int *xxhi, int g_vv, int *vvlo, int *vvhi, int g_xxll, int *xxlllo, int *xxllhi, int g_xxuu, int *xxuulo, int *xxuuhi, void *boundmin, void *wolfemin, void *boundmax) { } void Mock_Step_max(mock_ga_t *g_a, mock_ga_t *g_b, void *step) { } void Mock_Step_max_patch(mock_ga_t *g_a, int *alo, int *ahi, mock_ga_t *g_b, int *blo, int *bhi, void *step) { } void Mock_Strided_acc(mock_ga_t *g_a, int lo[], int hi[], int skip[], void* buf, int ld[], void *alpha) { } void Mock_Strided_get(mock_ga_t *g_a, int lo[], int hi[], int skip[], void* buf, int ld[]) { } void Mock_Strided_put(mock_ga_t *g_a, int lo[], int hi[], int skip[], void* buf, int ld[]) { } void Mock_Summarize(int verbose) { } void Mock_Symmetrize(mock_ga_t *g_a) { } void Mock_Sync(void) { } void Mock_Terminate(void) { } int Mock_Total_blocks(mock_ga_t *g_a) { } void Mock_Transpose(mock_ga_t *g_a, mock_ga_t *g_b) { } void Mock_Unlock(int mutex) { } int Mock_Update_ghost_dir(mock_ga_t *g_a, int dimension, int idir, int flag) { } void Mock_Update_ghosts(mock_ga_t *g_a) { } int Mock_Uses_fapi(void) { } int Mock_Uses_ma(void) { } int Mock_Uses_proc_grid(mock_ga_t *g_a) { } int Mock_Valid_handle(mock_ga_t *g_a) { return g_a != NULL; } int Mock_Verify_handle(mock_ga_t *g_a) { } double Mock_Wtime(void) { } DoubleComplex Mock_Zdot(mock_ga_t *g_a, mock_ga_t *g_b) { } DoubleComplex Mock_Zdot_patch(mock_ga_t *g_a, char t_a, int alo[], int ahi[], mock_ga_t *g_b, char t_b, int blo[], int bhi[]) { } void Mock_Zero_diagonal(mock_ga_t *g_a) { } void Mock_Zero(mock_ga_t *g_a) { ITER_DECLARE_VARS(g_a) switch (g_a->type) { #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ ITER_DECLARE_BUFFER(g_a,C_TYPE) \ ITER_INIT(g_a,C_TYPE) \ ITER_BEGIN(g_a,C_TYPE) \ assign_zero_##AT(*g_a_buf); \ ITER_NEXT(g_a) \ ITER_END \ break; \ } #include "types.xh" #undef TYPE_CASE } } void Mock_Zero_patch(mock_ga_t *g_a, int lo[], int hi[]) { } void Mock_Zgemm(char ta, char tb, int m, int n, int k, DoubleComplex alpha, mock_ga_t *g_a, mock_ga_t *g_b, DoubleComplex beta, mock_ga_t *g_c ) { } void Mock_Zgop(DoubleComplex x[], int n, char *op) { } ga-5-3/global/testing/unit-tests/ga_solve.c0000640005473000001440000000375211721245236017605 0ustar d3n000users/* * Test Program for GA * This is to test GA_Create (is a collective operation) * * GA_Create -- used to create a global array using handles like 'g_A' * Here used GA_Inquire to verify that g_A hanle returns the right values of created_array */ #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define SIZE 10 #define MAX_DIM 7 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_B; int dims[MAX_DIM], val=4, ndim, re; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); for(i=1; i<=MAX_DIM; i++) { ndim=i; dims[i]=SIZE; // for(j=0; j0) printf("Cholesky Fact couldn't be completed \n"); else printf("An Error occured\n"); if(rank == 0) GA_PRINT_MSG(); GA_Destroy(g_A); GA_Destroy(g_B); GA_Terminate(); MPI_Finalize(); } /* * TO-DO : assign SIZE to a bigger value */ ga-5-3/global/testing/unit-tests/ga_acc.c0000640005473000001440000000252011721245236017173 0ustar d3n000users/* * Test Program for GA * This is to test NGA_Acc (is a collective operation) * GA_Create -- used to create a global array using handles like 'g_A' */ #include #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define DIM 2 #define SIZE 5 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, **local_A=NULL, **local_B=NULL; int dims[DIM]={SIZE,SIZE}, dims2[DIM], lo[DIM]={SIZE-SIZE,SIZE-SIZE}, hi[DIM]={SIZE-1,SIZE-1}, ld=5, value=5; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); local_A=(int**)malloc(SIZE*sizeof(int*)); for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define SIZE 5 #define MAX_DIM 2 create_irreg_ga(int ndim) { int g_A; int dims[ndim], i; int block[ndim], *map=NULL; for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define DIM 2 #define SIZE 5 validate_transpose(int local_A[][SIZE], int local_B[][SIZE]) { int i, j; for(i=1; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" main(int argc, char **argv) { int rank, nprocs, i, j; int p_Geven, p_Godd, p_size, mod, p_size_mod, *list_even=NULL, *list_odd=NULL; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); p_size=nprocs/2; mod=nprocs%2; p_size_mod=p_size+mod; list_even = (int*)malloc(p_size*sizeof(int)); list_odd = (int*)malloc(p_size*sizeof(int)); j=0; for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define DIM 2 #define SIZE 5 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_B, local_A[SIZE][SIZE]; int dims[DIM]={SIZE,SIZE}, alo[DIM]={0,0}, ahi[DIM]={3,3}, blo[DIM]={0,0}, bhi[DIM]={3,3}, ld=5; int value=5, val2=4; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); GA_Fill(g_A, &value); g_B = GA_Duplicate(g_A, "array_B"); GA_Print(g_A); GA_Fill(g_B, &val2); GA_Sync(); NGA_Copy_patch('N', g_A, alo, ahi, g_B, blo, bhi); GA_Print(g_B); NGA_Get(g_B, blo, bhi, local_A, &ld); if(rank==0) { for(i=0; i<3; i++) { for(j=0; j<3; j++) printf("%d ", local_A[i][j]); printf("\n"); } printf("\n"); for(i=0; i<3; i++) { for(j=0; j<3; j++) if( local_A[i][j]!=value) printf("ERROR : \n"); } } // The process is confirmed and verified by printing the array in OP-scr /* if(rank==0) if(content(g_A) != content(g_B))printf("ERROE : \n"); */ if(rank == 0) printf("Test Completed \n"); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_get_blockinfo.c0000640005473000001440000000240511721245236021254 0ustar d3n000users/* * Test Program for GA * This is to test GA_Create_irreg (is a collective operation) * GA_Create -- used to create a global array of regular size * GA_Create_IRREG -- used to create G_array of irregular size -- helps user to define the distribution * * GA_Get_Block_info -- used to obtain info (like number of blocks and block dimension) about the global array */ #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 main(int argc, char **argv) { int rank, nprocs, i; int g_A, g_B; int dims[DIM]={5,10}, dims2[DIM], ndim, type, value=5, block[DIM]={2,3}, map[5]={0,2,0,4,6}, val=7; int n_block[DIM], block_dims[DIM]; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); g_B = NGA_Create_irreg(C_INT, DIM, dims, "array_B", block, map); GA_Fill(g_A, &value); GA_Print(g_A); GA_Fill(g_B, &val); GA_Print(g_B); GA_Sync(); GA_Get_block_info(g_B, n_block, block_dims); for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 #define SIZE 5 main(int argc, char **argv) { int rank, nprocs; int g_A, g_V, val1=5, val2=5, local_A[SIZE][SIZE], dims_V=SIZE; int dims[DIM]={SIZE,SIZE}, dims2[DIM], lo[DIM]={1,1}, hi[DIM]={2,2}, ld=5, i, j; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); g_V = NGA_Create(C_INT, 1, &dims_V, "array_A", NULL); GA_Fill(g_A, &val1); GA_Print(g_A); printf("\n"); GA_Scale(g_A, &val2); GA_Print(g_A); GA_Get_diag(g_A, g_V); GA_Print(g_V); NGA_Get(g_A, lo, hi, local_A, &ld); if(rank==1) { for(i=0; i<2; i++) { for(j=0; j<2; j++) if(local_A[i][j]!=val1*val2)printf(" GA Error: \n"); } } if(rank == 0) printf("Test Completed \n"); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_elem_maximum.c0000640005473000001440000000656111732205741021134 0ustar d3n000users#include "ga.h" #include "mock.h" #include "ga_unit.h" static int test(int shape_idx, int type_idx, int dist_idx) { int type = TYPES[type_idx]; int *dims = SHAPES[shape_idx]; int ndim = SHAPES_NDIM[shape_idx]; mock_ga_t *mock_a, *mock_b, *result_mock, *result_ga; int g_a, g_b, g_c; int buffer[100]; int lo[GA_MAX_DIM], hi[GA_MAX_DIM], ld[GA_MAX_DIM], shape[GA_MAX_DIM]; int result=0, error_index=-1, error_proc=-1; mock_a = Mock_Create(type, ndim, dims, "mock", NULL); mock_b = Mock_Create(type, ndim, dims, "mock", NULL); result_mock = Mock_Create(type, ndim, dims, "mock", NULL); result_ga = Mock_Create(type, ndim, dims, "mock", NULL); g_a = create_function[dist_idx](type, ndim, dims); g_b = create_function[dist_idx](type, ndim, dims); g_c = create_function[dist_idx](type, ndim, dims); mock_data(mock_a, g_a); mock_data(mock_b, g_b); mock_to_global(mock_a, g_a); mock_to_global(mock_b, g_b); Mock_Elem_maximum(mock_a, mock_b, result_mock); GA_Elem_maximum(g_a, g_b, g_c); global_to_mock(g_c, result_ga); result = neq_mock(result_mock, result_ga, &error_index); if (0 != result) { error_proc = GA_Nodeid(); } /* make sure all procs get same result so they can die gracefully */ GA_Igop(&result, 1, "+"); /* if error occured, find the highest failing node ID */ GA_Igop(&error_proc, 1, "max"); /* clear the error index for all but the highest failing node ID */ if (error_proc != GA_Nodeid()) { error_index = 0; } /* make sure all procs get the error index on the highest failing node ID */ GA_Igop(&error_index, 1, "+"); if (0 != result) { if (error_proc == GA_Nodeid()) { printf("ERROR: local result failed to compare to global result\n"); printf("\terror_proc=%d\n", error_proc); printf("\terror_index=%d\n", error_index); printf("***LOCAL RESULT***\n"); Mock_Print(result_mock); printf("***GLOBAL RESULT***\n"); Mock_Print(result_ga); printf("\tprinting array distribution\n"); } GA_Sync(); GA_Print(g_a); GA_Print_distribution(g_a); return 1; } /* clean up */ Mock_Destroy(mock_a); Mock_Destroy(mock_b); Mock_Destroy(result_mock); Mock_Destroy(result_ga); GA_Destroy(g_a); GA_Destroy(g_b); return 0; } int main(int argc, char **argv) { TEST_SETUP; int shape_idx=0, type_idx=0, dist_idx=0; int return_code=0; for (shape_idx=0; shape_idx < NUM_SHAPES; ++shape_idx) { for (type_idx=0; type_idx < NUM_TYPES; ++type_idx) { for (dist_idx=0; dist_idx < NUM_DISTS; ++dist_idx) { if (0 == GA_Nodeid()) { printf("%s\t%s\t%s\n", SHAPE_NAMES[shape_idx], TYPE_NAMES[type_idx], DIST_NAMES[dist_idx] ); } GA_Sync(); return_code = test(shape_idx, type_idx, dist_idx); if (0 != return_code) { break; } } if (0 != return_code) { break; } } if (0 != return_code) { break; } } TEST_TEARDOWN; return return_code; } ga-5-3/global/testing/unit-tests/ga_sync.c0000640005473000001440000000137311721245236017426 0ustar d3n000users/* * Test Program for GA * This is to test GA_Sync (is a collective operation) * */ #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 main(int argc, char **argv) { int rank, nprocs, i; int g_A, value=5; int dims[DIM]={5,5}, dims2[DIM], ndim, type; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); GA_Fill(g_A, &value); GA_Print(g_A); printf(" -----------%d\n", rank); GA_Sync(); printf(" %d-----------\n", rank); GA_Print(g_A); if(rank == 0) printf("Test Completed \n"); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_zeropatch.c0000640005473000001440000000341711721245236020452 0ustar d3n000users/* * Test Program for GA * This is to test GA_Zero_patch (is a collective operation) * GA_Create -- used to create a global array using handles like 'g_A' * GA_Duplicate --used to duplicate and generate one more global array.., handle 'g_A' to 'g_B' * GA_Zero_patch -- is used to pass zero-value only certain patch of an array */ #include #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define DIM 2 #define SIZE 5 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_B, local_A[SIZE][SIZE], local_B[SIZE][SIZE]; int dims[DIM]={5,5}, alo[DIM]={1,1}, ahi[DIM]={3,2}, blo[DIM]={1,1}, bhi[DIM]={2,3}, ld=5; int value=5, val2=4; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); GA_Fill(g_A, &value); g_B = GA_Duplicate(g_A, "array_B"); GA_Print(g_A); GA_Fill(g_B, &val2); GA_Sync(); NGA_Zero_patch(g_B, blo, bhi); GA_Print(g_B); NGA_Get(g_A, alo, ahi, local_A, &ld); NGA_Get(g_B, blo, bhi, local_B, &ld); if(rank==0) { for(i=0; i<3; i++) { for(j=0; j<2; j++) printf("%d ", local_A[i][j]); printf("\n"); } printf("\n"); for(i=0; i<2; i++) { for(j=0; j<3; j++) printf("%d ", local_B[i][j]); printf("\n"); } for(i=0; i<2; i++) { for(j=0; j<3; j++) if( local_A[i][j]!=local_B[i][j]) printf("ERROR : \n"); } } // The process is confirmed and verified by printing the array in OP-scr /* if(rank==0) if(content(g_A) != content(g_B))printf("ERROE : \n"); */ GA_Sync(); if(rank == 1) printf("Test Completed \n"); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_median.c0000640005473000001440000000354211721245236017707 0ustar d3n000users#include #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 #define SIZE 5 main(int argc, char **argv) { int rank, nprocs; int g_A, g_B, g_C, g_M, **local_M=NULL; int dims[DIM]={SIZE, SIZE}, val_A=5, val_B=4, val_C=3; int mlo[DIM]={0,0}, mhi[DIM]={4,4}, ld=SIZE, i, j; int local_T[SIZE][SIZE]; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); g_B = NGA_Create(C_INT, DIM, dims, "array_B", NULL); g_C = NGA_Create(C_INT, DIM, dims, "array_C", NULL); g_M = NGA_Create(C_INT, DIM, dims, "array_M", NULL); GA_Fill(g_A, &val_A); GA_Fill(g_B, &val_B); GA_Fill(g_C, &val_C); GA_Median(g_A,g_B, g_C, g_M); GA_Print(g_M); /* GA_Print(g_A); GA_Print(g_B); GA_Print(g_C); */ if(rank==0) { local_M=(int**)malloc(SIZE*sizeof(int*)); for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define SIZE 10 #define N 5 #define D 2 main(int argc, char **argv) { int rank, nprocs; int g_A, dims[D]={SIZE,SIZE}, *local_A=NULL, *local_G=NULL, **sub_array=NULL, **s_array=NULL; int i, j, value=5; MPI_Init(&argc, &argv); GA_Initialize(); MA_init(C_INT, 1000, 1000); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); s_array=(int**)malloc(N*sizeof(int*)); for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" main(int argc, char **argv) { int rank, nprocs, i, j; int p_Geven, p_Godd, p_size, *list_even=NULL, *list_odd=NULL; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); p_size=nprocs/2; list_even = (int*)malloc(p_size*sizeof(int)); list_odd = (int*)malloc(p_size*sizeof(int)); j=0; for(i=0; i %d --:: -- %d\n", i, list_even[i], list_odd[i]); } printf("\n"); GA_Sync(); printf("%d: My ID is %d :: %d \n", rank, GA_Nodeid(), GA_Nnodes()); p_Geven=GA_Pgroup_create(list_even, p_size); p_Godd=GA_Pgroup_create(list_odd, p_size); GA_Sync(); if(rank==1) printf(" GA: Test Completed \n"); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_create.c0000640005473000001440000000573611721507546017731 0ustar d3n000users/* * Test Program for GA * This is to test GA_Create (is a collective operation) * GA_Create -- used to create a global array using handles like 'g_A' * Here used GA_Inquire to verify that g_A hanle returns the right values of created_array */ #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #define GSIZE 5 one_dimension(int rank, int nprocs) { int g_V; int ndim=1, dims=GSIZE; int dims2, ndim2, type, value=5; g_V = NGA_Create(C_INT, ndim, &dims, "array_V", NULL); GA_Fill(g_V, &value); GA_Print(g_V); GA_Sync(); // NGA_Inquire(g_V, &type, &ndim2, dims2); //printf(" %d -- %d,,\n", type, ndim2); //for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define DIM 2 #define SIZE 5 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_B, local_A[SIZE][SIZE]; int dims[DIM]={SIZE,SIZE}, alo[DIM]={0,0}, ahi[DIM]={3,3}, blo[DIM]={0,0}, bhi[DIM]={3,3}, ld=5; int value=5, val2=4; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); GA_Fill(g_A, &value); g_B = GA_Duplicate(g_A, "array_B"); // GA_Print(g_A); GA_Fill(g_B, &val2); GA_Sync(); NGA_Copy_patch('N', g_A, alo, ahi, g_B, blo, bhi); // GA_Print(g_B); NGA_Get(g_B, blo, bhi, local_A, &ld); if(rank==0) { /* for(i=0; i<3; i++) { for(j=0; j<3; j++)// printf("%d ", local_A[i][j]); printf("\n"); } //printf("\n"); */ for(i=0; i<3; i++) { for(j=0; j<3; j++) if( local_A[i][j]!=value) printf("ERROR : \n"); } } // The process is confirmed and verified by printing the array in OP-scr /* if(rank==0) if(content(g_A) != content(g_B))printf("ERROE : \n"); */ if(rank == 0) printf("Test Completed \n"); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_transpose3.c0000640005473000001440000000362311721245236020553 0ustar d3n000users/* * Test Program for GA * This is to test GA_Transpose (is a collective operation) * GA_Create -- used to create a global array using handles like 'g_A' * _Transpose -- used to transpose the whole array * * not completed --- */ #include #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define DIM 2 #define SIZE 5 validate_transpose(int g_A, int g_B, int* lo, int* hi, int ld) { int i, j; int local_A[SIZE][SIZE], local_B[SIZE][SIZE]; // int **local_A=NULL, **local_B=NULL; /* local_A=(int**)malloc(SIZE*sizeof(int*)); for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define SIZE 5 #define DIM 2 list_by_two(int nprocs) { int i, l_size, mod, l_size_mod, *list_one=NULL, *list_two=NULL; l_size = nprocs / 2; mod = nprocs % 2; l_size_mod = l_size + mod; list_one = (int*)malloc(l_size*sizeof(int)); list_two = (int*)malloc(l_size*sizeof(int)); for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_B, g_C, local_C[DIM][DIM]; int dims[DIM]={5,5}, dims2[DIM], ndim, type; int val_A=5, val_B=3, ld=DIM; int lo[DIM]={2,2}, hi[DIM]={4,4}, blo[DIM]={0,0}, bhi[DIM]={2,2}, clo[DIM]={1,1}, chi[DIM]={3,3}; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); g_B = NGA_Create(C_INT, DIM, dims, "array_B", NULL); g_C = NGA_Create(C_INT, DIM, dims, "array_C", NULL); GA_Fill(g_A, &val_A); GA_Fill(g_B, &val_B); GA_Zero(g_C); GA_Elem_multiply_patch(g_A, lo, hi, g_B, blo, bhi, g_C, clo, chi); GA_Print(g_C); GA_Sync(); NGA_Get(g_C, clo, chi, local_C, &ld); if(rank==1) { for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" main(int argc, char **argv) { int rank, nprocs, i, j; int p_Geven, p_Godd, p_size, mod, p_size_mod, *list_even=NULL, *list_odd=NULL; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); p_size=nprocs/2; mod=nprocs%2; p_size_mod=p_size+mod; list_even = (int*)malloc(p_size*sizeof(int)); list_odd = (int*)malloc(p_size*sizeof(int)); j=0; for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 int main(int argc, char **argv) { int rank, nprocs, i; double g_A; int dims[DIM]={5,5}, dims2[DIM], ndim, type; double value=5; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_DBL, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_DBL, DIM, dims, "array_A", NULL); GA_Fill(g_A, &value); GA_Print(g_A); if(!g_A) printf("ERROR : \n"); NGA_Inquire(g_A, &type, &ndim, dims2); printf(" %d -- %d,,\n", type, ndim); for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define SIZE 10 #define MAX_DIM 7 void create_ga(int ndim, int datatypes) { int g_A; int dims[MAX_DIM], i, val=4; for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define SIZE 5 #define DIM 2 int main(int argc, char **argv) { int rank, nprocs; int g_A; int dims[DIM]={SIZE,SIZE}, ndim; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A=GA_Create_handle(); if(!g_A) GA_ERROR_MSG(); GA_Set_data(g_A, DIM, dims, C_INT); // printf("%d \n", GA_Ndim(g_A)); /* if(rank == 0) { ndim=GA_Ndim(g_A); if(ndim == 2) printf(" An Error \n"); } */ GA_Sync(); if(rank == 0) GA_PRINT_MSG(); GA_Terminate(); MPI_Finalize(); return 0; } ga-5-3/global/testing/unit-tests/ga_pgroup_create5.c0000640005473000001440000000361311721245236021375 0ustar d3n000users/* * Test Program for GA * This is to test GA_PGroup_create (is a collective operation) * _pgroup_create -- helps to create different sized group from the given processes and helps to alocate different job for diffferent group * groups are identified using the group handle */ #include #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" main(int argc, char **argv) { int rank, nprocs, i, j; int p_Geven, p_Godd, p_size, mod, p_size_mod, *list_even=NULL, *list_odd=NULL; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); p_size=nprocs/2; mod=nprocs%2; p_size_mod=p_size+mod; list_even = (int*)malloc(p_size*sizeof(int)); list_odd = (int*)malloc(p_size*sizeof(int)); j=0; for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" main(int argc, char **argv) { int rank, nprocs, i, j; int p_Geven, p_Godd, p_size, mod, p_size_mod, *list_even=NULL, *list_odd=NULL; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); p_size=nprocs/2; mod=nprocs%2; p_size_mod=p_size+mod; list_even = (int*)malloc(p_size*sizeof(int)); list_odd = (int*)malloc(p_size*sizeof(int)); j=0; for(i=0; i %d --:: -- %d\n", i, list_even[i], list_odd[i]); } */ GA_Sync(); printf("%d: My ID is %d :: %d --- nodeid & nnodes for GA \n", rank, GA_Nodeid(), GA_Nnodes()); p_Geven=GA_Pgroup_create(list_even, p_size_mod); p_Godd=GA_Pgroup_create(list_odd, p_size); GA_Sync(); if(rank%2==0) printf("%d: My ID is %d :: %d -- even \n", rank, GA_Pgroup_nodeid(p_Geven), GA_Pgroup_nnodes(p_Geven)); else printf("%d: My ID is %d :: %d --- odd\n", rank, GA_Pgroup_nodeid(p_Godd), GA_Pgroup_nnodes(p_Godd)); GA_Sync(); if(rank==0) GA_PRINT_MSG(); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_dot.c0000640005473000001440000000250511721245236017236 0ustar d3n000users#include #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 #define SIZE 5 integer_dot(int rank, int nprocs) { int g_A, g_B; int dims[DIM]={SIZE,SIZE}, val_A=5, val_B=10, op; MA_init(C_INT, 1000, 1000); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); g_B = NGA_Create(C_INT, DIM, dims, "array_B", NULL); GA_Fill(g_A, &val_A); GA_Fill(g_B, &val_B); if(rank==0) { op=GA_Idot(g_A, g_B); printf("%d \n", op); } } /* when i use int_type is working...have find the reason behind the other datatype and how to use it.., */ /* float_dot(int rank, int nprocs) { int dims[DIM]={SIZE,SIZE}; double g_A, g_B; double val_A=5, val_B=10, op; //MA_init(C_DBL, 1000, 1000); g_A = NGA_Create(C_DBL, DIM, dims, "array_A", NULL); g_B = NGA_Create(C_DBL, DIM, dims, "array_B", NULL); GA_Fill(g_A, &val_A); GA_Fill(g_B, &val_B); if(rank==0) op=GA_Ddot(g_A, g_B); // printf("%d \n", op); } */ main(int argc, char **argv) { int rank, nprocs; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); // MA_init(C_DBL, 1000, 1000); GA_Initialize(); integer_dot(rank, nprocs); //float_dot(rank, nprocs); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_fill.c0000640005473000001440000000623711734174434017411 0ustar d3n000users#include "ga.h" #include "mock.h" #include "ga_unit.h" static int test(int shape_idx, int type_idx, int dist_idx) { int type = TYPES[type_idx]; int *dims = SHAPES[shape_idx]; int ndim = SHAPES_NDIM[shape_idx]; mock_ga_t *mock_a, *result_a; int g_a; void *alpha; int buffer[100]; int lo[GA_MAX_DIM], hi[GA_MAX_DIM], ld[GA_MAX_DIM], shape[GA_MAX_DIM]; int result=0, error_index=-1, error_proc=-1; int ival = 6; long lval = 7; long long llval = 8; float fval = 9; double dval = 10; SingleComplex cval = {11,12}; DoubleComplex zval = {13,14}; mock_a = Mock_Create(type, ndim, dims, "mock", NULL); result_a = Mock_Create(type, ndim, dims, "mock", NULL); g_a = create_function[dist_idx](type, ndim, dims); mock_data(mock_a, g_a); mock_to_global(mock_a, g_a); switch (type) { case C_INT: alpha = &ival; break; case C_LONG: alpha = &lval; break; case C_LONGLONG: alpha = &llval; break; case C_FLOAT: alpha = &fval; break; case C_DBL: alpha = &dval; break; case C_SCPL: alpha = &cval; break; case C_DCPL: alpha = &zval; break; } Mock_Fill(mock_a, alpha); GA_Fill(g_a, alpha); global_to_mock(g_a, result_a); result = neq_mock(mock_a, result_a, &error_index); if (0 != result) { error_proc = GA_Nodeid(); } GA_Igop(&result, 1, "+"); GA_Igop(&error_proc, 1, "max"); if (error_proc != GA_Nodeid()) { error_index = 0; } GA_Igop(&error_index, 1, "+"); if (0 != result) { if (error_proc == GA_Nodeid()) { printf("ERROR: local result failed to compare to global result\n"); printf("\terror_proc=%d\n", error_proc); printf("\terror_index=%d\n", error_index); printf("***LOCAL RESULT***\n"); Mock_Print(mock_a); printf("***GLOBAL RESULT***\n"); Mock_Print(result_a); printf("\tprinting array distribution\n"); } GA_Sync(); GA_Print(g_a); GA_Print_distribution(g_a); return 1; } Mock_Destroy(mock_a); Mock_Destroy(result_a); GA_Destroy(g_a); return 0; } int main(int argc, char **argv) { TEST_SETUP; int shape_idx=0, type_idx=0, dist_idx=0; int return_code=0; for (shape_idx=0; shape_idx < NUM_SHAPES; ++shape_idx) { for (type_idx=0; type_idx < NUM_TYPES; ++type_idx) { for (dist_idx=0; dist_idx < NUM_DISTS; ++dist_idx) { if (0 == GA_Nodeid()) { printf("%s\t%s\t%s\n", SHAPE_NAMES[shape_idx], TYPE_NAMES[type_idx], DIST_NAMES[dist_idx] ); } GA_Sync(); return_code = test(shape_idx, type_idx, dist_idx); if (0 != return_code) { break; } } if (0 != return_code) { break; } } if (0 != return_code) { break; } } TEST_TEARDOWN; return return_code; } ga-5-3/global/testing/unit-tests/ga_create2.c0000640005473000001440000000212111721245236017767 0ustar d3n000users/* * Test Program for GA * This is to test GA_Create (is a collective operation) * * GA_Create -- used to create a global array using handles like 'g_A' * Here used GA_Inquire to verify that g_A hanle returns the right values of created_array */ #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define SIZE 10 #define MAX_DIM 7 void create_ga(int ndim) { int g_A; int dims[MAX_DIM], i, val=4; for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define DIM 2 #define SIZE 5 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_B, local_A[SIZE][SIZE], local_B[SIZE][SIZE]; int dims[DIM]={SIZE,SIZE}, alo[DIM]={0,0}, ahi[DIM]={SIZE-1,SIZE-1}, blo[DIM]={0,0}, bhi[DIM]={4,4}, ld=5; int value=5, val2=4; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); GA_Fill(g_A, &value); g_B = GA_Duplicate(g_A, "array_B"); GA_Print(g_A); GA_Fill(g_B, &val2); GA_Sync(); NGA_Zero_patch(g_B, blo, bhi); GA_Print(g_B); NGA_Get(g_A, alo, ahi, local_A, &ld); NGA_Get(g_B, blo, bhi, local_B, &ld); if(rank==0) { for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" main(int argc, char **argv) { int rank, nprocs; int g_A, g_B; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A=GA_Create_handle(); g_B=GA_Create_handle(); if(!g_A)\ GA_ERROR_MSG(); if(!g_B) GA_ERROR_MSG(); GA_Sync(); if(rank == 0) GA_PRINT_MSG(); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_create3.c0000640005473000001440000000235411725232502017774 0ustar d3n000users/* * Test Program for GA * This is to test GA_Create (is a collective operation) * GA_Create -- used to create a global array using handles like 'g_A' * Here used GA_Inquire to verify that g_A hanle returns the right values of created_array */ #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define SIZE 10 #define MAX_DIM 7 //#define NUM_TYPES 3 void create_ga(int ndim, int datatypes) { int g_A; int dims[MAX_DIM], i, val=4; for(i=0; i #include #include "ga.h" #include "typesf2c.h" #include "abstract_ops.h" typedef struct Mock_GA { int type; int ndim; int dims[GA_MAX_DIM]; int dims_m1[GA_MAX_DIM]; /* for convenience */ int strides[GA_MAX_DIM]; /* for convenience */ int backstrides[GA_MAX_DIM]; /* for convenience */ int size; /* for convenience, total number of elements */ int itemsize; /* for convenience, sizeof(type) */ int nd_m1; /* for convenience, ndim-1 */ void *buf; } mock_ga_t; static size_t type_to_size(int type) { size_t size; switch (type) { case C_INT: size = sizeof(int); break; case C_LONG: size = sizeof(long); break; case C_LONGLONG: size = sizeof(long long); break; case C_FLOAT: size = sizeof(float); break; case C_DBL: size = sizeof(double); break; case C_SCPL: size = sizeof(SingleComplex); break; case C_DCPL: size = sizeof(DoubleComplex); break; default: assert(0); } return size; } /* all the variables we need for the iterator, prefixed with the given name */ #define ITER_DECLARE_VARS(the_ga) \ char *the_ga##_bytebuf = (the_ga)->buf; \ int the_ga##_size = (the_ga)->size; \ int the_ga##_i; /* all the variables we need for the iterator, prefixed with the given name * Note: use this when iterating over a lo/hi patch */ #define ITER_DECLARE_VARS_PATCH(the_ga) \ char *the_ga##_bytebuf = (the_ga)->buf; \ int the_ga##_ndim = (the_ga)->ndim; \ int the_ga##_nd_m1 = (the_ga)->nd_m1; \ int the_ga##_coords[GA_MAX_DIM]; \ int the_ga##_lo[GA_MAX_DIM]; \ int the_ga##_hi[GA_MAX_DIM]; \ int the_ga##_size = 1; \ int the_ga##_i; \ int the_ga##_j; /* to define the user-visible buffer on which to perform the user-defined op */ #define ITER_DECLARE_BUFFER(the_ga,TYPE) TYPE *the_ga##_buf = NULL; /* setup the user-visible buffer and the iterator variables * Note: use this when iterating over the entire array buffer i.e. no lo/hi */ #define ITER_CAST_BUFFER(the_ga,TYPE) the_ga##_buf = (TYPE*)the_ga##_bytebuf; /* setup the user-visible buffer and the iterator variables * Note: use this when iterating over the entire array buffer i.e. no lo/hi */ #define ITER_BEGIN(the_ga,TYPE) \ for (the_ga##_i = 0; the_ga##_istrides[the_ga##_i] * the_ga##_lo[the_ga##_i] * (the_ga)->itemsize; \ } \ ITER_CAST_BUFFER(the_ga,TYPE) /* iterate over the buffer */ #define ITER_NEXT(the_ga) ++the_ga##_buf; /* iterate over the buffer */ #define ITER_NEXT_PATCH(the_ga) \ for (the_ga##_j=the_ga##_nd_m1; the_ga##_j>=0; --the_ga##_j) { \ if (the_ga##_coords[the_ga##_j] <= the_ga##_hi[the_ga##_j]) { \ ++the_ga##_coords[the_ga##_j]; \ the_ga##_buf += (the_ga)->strides[the_ga##_j]; \ break; \ } \ else { \ the_ga##_coords[the_ga##_j] = the_ga##_lo[the_ga##_j]; \ the_ga##_buf -= (the_ga)->backstrides[the_ga##_j]; \ } \ } /* end of loop */ #define ITER_END } static void mock_data(mock_ga_t *mock_a, int g_a) { ITER_DECLARE_VARS(mock_a) switch(mock_a->type) { #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ ITER_DECLARE_BUFFER(mock_a,C_TYPE) \ ITER_INIT(mock_a,C_TYPE) \ ITER_BEGIN(mock_a,C_TYPE) \ if (mock_a_i%2) { \ assign_##AT(*mock_a_buf, mock_a_i); \ } \ else { \ assign_##AT(*mock_a_buf,-mock_a_i); \ } \ ITER_NEXT(mock_a) \ ITER_END \ break; \ } TYPE_CASE(C_INT,int,reg) TYPE_CASE(C_LONG,long,reg) TYPE_CASE(C_LONGLONG,long long,reg) TYPE_CASE(C_FLOAT,float,reg) TYPE_CASE(C_DBL,double,reg) #undef TYPE_CASE #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ ITER_DECLARE_BUFFER(mock_a,C_TYPE) \ ITER_INIT(mock_a,C_TYPE) \ ITER_BEGIN(mock_a,C_TYPE) \ C_TYPE value; \ if (mock_a_i%2) { \ value.real = mock_a_i; \ value.imag = -mock_a_i; \ } \ else { \ value.real = -mock_a_i; \ value.imag = mock_a_i; \ } \ assign_##AT(*mock_a_buf,value); \ ITER_NEXT(mock_a) \ ITER_END \ break; \ } TYPE_CASE(C_SCPL,SingleComplex,cpl) TYPE_CASE(C_DCPL,DoubleComplex,cpl) #undef TYPE_CASE } } static void mock_to_global(mock_ga_t *mock_a, int g_a) { if (0 == GA_Nodeid()) { int i; int lo[GA_MAX_DIM]; int hi[GA_MAX_DIM]; int ld[GA_MAX_DIM]; for (i=0; indim; ++i) { lo[i] = 0; hi[i] = mock_a->dims[i]-1; } for (i=0; indim-1; ++i) { ld[i] = hi[i+1]-lo[i+1]+1; } NGA_Put(g_a, lo, hi, mock_a->buf, ld); } GA_Sync(); } static void global_to_mock(int g_a, mock_ga_t *mock_a) { int i; int lo[GA_MAX_DIM]; int hi[GA_MAX_DIM]; int ld[GA_MAX_DIM]; for (i=0; indim; ++i) { lo[i] = 0; hi[i] = mock_a->dims[i]-1; } for (i=0; indim-1; ++i) { ld[i] = hi[i+1]-lo[i+1]+1; } GA_Sync(); NGA_Get(g_a, lo, hi, mock_a->buf, ld); GA_Sync(); } static void print_val(void *val, int type) { switch(type) { case C_INT: printf("%d", *((int*)val)); break; case C_LONG: printf("%ld", *((long*)val)); break; case C_LONGLONG: printf("%lld", *((long long*)val)); break; case C_FLOAT: printf("%f", *((float*)val)); break; case C_DBL: printf("%f", *((double*)val)); break; case C_SCPL: printf("%f+%fi", ((SingleComplex*)val)->real,((SingleComplex*)val)->imag); break; case C_DCPL: printf("%f+%fi", ((DoubleComplex*)val)->real,((DoubleComplex*)val)->imag); break; default: assert(0); } } static int neq_mock(mock_ga_t *mock_a, mock_ga_t *mock_b, int *idx) { ITER_DECLARE_VARS(mock_a) ITER_DECLARE_VARS(mock_b) *idx=-1; switch(mock_a->type) { #define TYPE_CASE(GA_TYPE,C_TYPE,AT) \ case GA_TYPE: \ { \ ITER_DECLARE_BUFFER(mock_a,C_TYPE) \ ITER_DECLARE_BUFFER(mock_b,C_TYPE) \ ITER_INIT(mock_a,C_TYPE) \ ITER_INIT(mock_b,C_TYPE) \ ITER_BEGIN(mock_a,C_TYPE) \ if (!eq_##AT(*mock_a_buf, *mock_b_buf)) { \ *idx = mock_a_i; \ return 1; \ } \ ITER_NEXT(mock_a) \ ITER_NEXT(mock_b) \ ITER_END \ break; \ } #include "types.xh" #undef TYPE_CASE } return 0; } void Mock_Abs_value(mock_ga_t *g_a); void Mock_Abs_value_patch(mock_ga_t *g_a, int *lo, int *hi); void Mock_Access_block_grid(mock_ga_t *g_a, int index[], void *ptr, int ld[]); void Mock_Access_block(mock_ga_t *g_a, int idx, void *ptr, int ld[]); void Mock_Access_block_segment(mock_ga_t *g_a, int proc, void *ptr, int *len); void Mock_Access_ghost_element(mock_ga_t *g_a, void *ptr, int subscript[], int ld[]); void Mock_Access_ghosts(mock_ga_t *g_a, int dims[], void *ptr, int ld[]); void Mock_Access(mock_ga_t *g_a, int lo[], int hi[], void *ptr, int ld[]); void Mock_Acc(mock_ga_t *g_a, int lo[], int hi[],void* buf,int ld[],void* alpha); void Mock_Add_constant(mock_ga_t *g_a, void* alpha); void Mock_Add_constant_patch(mock_ga_t *g_a,int *lo,int *hi,void *alpha); void Mock_Add_diagonal(mock_ga_t *g_a, int g_v); void Mock_Add_patch(void * alpha, mock_ga_t *g_a, int alo[], int ahi[], void * beta, mock_ga_t *g_b, int blo[], int bhi[], mock_ga_t *g_c, int clo[], int chi[]); void Mock_Add(void *alpha, mock_ga_t *g_a, void* beta, mock_ga_t *g_b, mock_ga_t *g_c); int Mock_Allocate(mock_ga_t *g_a); int Mock_Assemble_duplicate(mock_ga_t *g_a, char *name, void *ptr); void Mock_Brdcst(void *buf, int lenbuf, int root); SingleComplex Mock_Cdot(mock_ga_t *g_a, mock_ga_t *g_b); SingleComplex Mock_Cdot_patch(mock_ga_t *g_a, char t_a, int alo[], int ahi[], mock_ga_t *g_b, char t_b, int blo[], int bhi[]); void Mock_Cgemm(char ta, char tb, int m, int n, int k, SingleComplex alpha, mock_ga_t *g_a, mock_ga_t *g_b, SingleComplex beta, mock_ga_t *g_c ); void Mock_Cgop(SingleComplex x[], int n, char *op); void Mock_Check_handle(mock_ga_t *g_a, char *string); int Mock_Cluster_nnodes(void); int Mock_Cluster_nodeid(void); int Mock_Cluster_nprocs(int x); int Mock_Cluster_procid(int x, int y); int Mock_Cluster_proc_nodeid(int proc); int Mock_Compare_distr(mock_ga_t *g_a, mock_ga_t *g_b); void Mock_Copy(mock_ga_t *g_a, mock_ga_t *g_b); void Mock_Copy_patch(char trans, mock_ga_t *g_a, int alo[], int ahi[], mock_ga_t *g_b, int blo[], int bhi[]); mock_ga_t * Mock_Create_config(int type,int ndim,int dims[], char *name, int chunk[], int p_handle); mock_ga_t * Mock_Create_ghosts_config(int type,int ndim,int dims[], int width[], char *name, int chunk[], int p_handle); mock_ga_t * Mock_Create_ghosts(int type,int ndim,int dims[], int width[], char *name, int chunk[]); mock_ga_t * Mock_Create_ghosts_irreg_config(int type,int ndim,int dims[], int width[], char *name, int map[], int nblock[], int p_handle); mock_ga_t * Mock_Create_ghosts_irreg(int type,int ndim,int dims[], int width[], char *name, int map[], int nblock[]); mock_ga_t * Mock_Create_handle(void); mock_ga_t * Mock_Create(int type,int ndim,int dims[], char *name, int chunk[]); mock_ga_t * Mock_Create_irreg_config(int type,int ndim,int dims[],char *name, int block[], int map[], int p_handle); mock_ga_t * Mock_Create_irreg(int type,int ndim,int dims[],char *name, int block[], int map[]); int Mock_Create_mutexes(int number); double Mock_Ddot(mock_ga_t *g_a, mock_ga_t *g_b); double Mock_Ddot_patch(mock_ga_t *g_a, char t_a, int alo[], int ahi[], mock_ga_t *g_b, char t_b, int blo[], int bhi[]); int Mock_Deregister_type(int type); void Mock_Destroy(mock_ga_t *g_a); int Mock_Destroy_mutexes(void); void Mock_Dgemm(char ta, char tb, int m, int n, int k, double alpha, mock_ga_t *g_a, mock_ga_t *g_b, double beta, mock_ga_t *g_c ); void Mock_Dgop(double x[], int n, char *op); void Mock_Diag(mock_ga_t *g_a, int g_s, int g_v, void *eval); void Mock_Diag_reuse(int reuse, mock_ga_t *g_a, int g_s, int g_v, void *eval); void Mock_Diag_seq(mock_ga_t *g_a, int g_s, int g_v, void *eval); void Mock_Diag_std(mock_ga_t *g_a, int g_v, void *eval); void Mock_Diag_std_seq(mock_ga_t *g_a, int g_v, void *eval); void Mock_Distribution(mock_ga_t *g_a, int iproc, int lo[], int hi[]); mock_ga_t * Mock_Duplicate(mock_ga_t *g_a, char* array_name); void Mock_Elem_divide(mock_ga_t *g_a, mock_ga_t *g_b, mock_ga_t *g_c); void Mock_Elem_divide_patch(mock_ga_t *g_a,int *alo,int *ahi, mock_ga_t *g_b,int *blo,int *bhi,mock_ga_t *g_c,int *clo,int *chi); void Mock_Elem_maximum(mock_ga_t *g_a, mock_ga_t *g_b, mock_ga_t *g_c); void Mock_Elem_maximum_patch(mock_ga_t *g_a,int *alo,int *ahi, mock_ga_t *g_b,int *blo,int *bhi,mock_ga_t *g_c,int *clo,int *chi); void Mock_Elem_minimum(mock_ga_t *g_a, mock_ga_t *g_b, mock_ga_t *g_c); void Mock_Elem_minimum_patch(mock_ga_t *g_a,int *alo,int *ahi, mock_ga_t *g_b,int *blo,int *bhi,mock_ga_t *g_c,int *clo,int *chi); void Mock_Elem_multiply(mock_ga_t *g_a, mock_ga_t *g_b, mock_ga_t *g_c); void Mock_Elem_multiply_patch(mock_ga_t *g_a,int *alo,int *ahi, mock_ga_t *g_b,int *blo,int *bhi,mock_ga_t *g_c,int *clo,int *chi); void Mock_Error(char *str, int code); float Mock_Fdot(mock_ga_t *g_a, mock_ga_t *g_b); float Mock_Fdot_patch(mock_ga_t *g_a, char t_a, int alo[], int ahi[], mock_ga_t *g_b, char t_b, int blo[], int bhi[]); void Mock_Fence(void); void Mock_Fgop(float x[], int n, char *op); void Mock_Fill(mock_ga_t *g_a, void *value); void Mock_Fill_patch(mock_ga_t *g_a, int lo[], int hi[], void *val); void Mock_Freemem(void* ptr); void Mock_Gather_flat(mock_ga_t *g_a, void *v, int subsArray[], int n); void Mock_Gather(mock_ga_t *g_a, void *v, int* subsArray[], int n); void Mock_Get_block_info(mock_ga_t *g_a, int num_blocks[], int block_dims[]); int Mock_Get_debug(void); void Mock_Get_diag(mock_ga_t *g_a, int g_v); int Mock_Get_dimension(mock_ga_t *g_a); void Mock_Get_field(mock_ga_t *g_a, int *lo, int *hi, int foff, int fsize, void *buf, int *ld); void Mock_Get_ghost_block(mock_ga_t *g_a, int lo[], int hi[], void *buf, int ld[]); void Mock_Get(mock_ga_t *g_a, int lo[], int hi[], void* buf, int ld[]); void* Mock_Getmem(int type, int nelem, int grp_id); int Mock_Get_pgroup(mock_ga_t *g_a); int Mock_Get_pgroup_size(int grp_id); void Mock_Get_proc_grid(mock_ga_t *g_a, int dims[]); void Mock_Get_proc_index(mock_ga_t *g_a, int iproc, int subscript[]); void Mock_Gop(int type, void *x, int n, char *op); int Mock_Has_ghosts(mock_ga_t *g_a); int Mock_Idot(mock_ga_t *g_a, mock_ga_t *g_b); int Mock_Idot_patch(mock_ga_t *g_a, char t_a, int alo[], int ahi[], mock_ga_t *g_b, char t_b, int blo[], int bhi[]); void Mock_Igop(int x[], int n, char *op); void Mock_Init_fence(void); void Mock_Initialize_args(int *argc, char ***argv); void Mock_Initialize_ltd(size_t limit); void Mock_Initialize(void); void Mock_Inquire(mock_ga_t *g_a, int *type, int *ndim, int dims[]); size_t Mock_Inquire_memory(void); char* Mock_Inquire_name(mock_ga_t *g_a); int Mock_Is_mirrored(mock_ga_t *g_a); long Mock_Ldot(mock_ga_t *g_a, mock_ga_t *g_b); long Mock_Ldot_patch(mock_ga_t *g_a, char t_a, int alo[], int ahi[], mock_ga_t *g_b, char t_b, int blo[], int bhi[]); void Mock_Lgop(long x[], int n, char *op); void Mock_List_nodeid(int *list, int nprocs); long long Mock_Lldot(mock_ga_t *g_a, mock_ga_t *g_b); long long Mock_Lldot_patch(mock_ga_t *g_a, char t_a, int alo[], int ahi[], mock_ga_t *g_b, char t_b, int blo[], int bhi[]); void Mock_Llgop(long long x[], int n, char *op); int Mock_Llt_solve(mock_ga_t *g_a, mock_ga_t *g_b); int Mock_Locate(mock_ga_t *g_a, int subscript[]); int Mock_Locate_nnodes(mock_ga_t *g_a, int lo[], int hi[]); int Mock_Locate_num_blocks(mock_ga_t *g_a, int lo[], int hi[]); int Mock_Locate_region(mock_ga_t *g_a,int lo[],int hi[],int map[],int procs[]); void Mock_Lock(int mutex); void Mock_Lu_solve(char tran, mock_ga_t *g_a, mock_ga_t *g_b); void Mock_Mask_sync(int first, int last); void Mock_Matmul_patch_2d(char transa, char transb, void* alpha, void *beta, mock_ga_t *g_a, int ailo, int aihi, int ajlo, int ajhi, mock_ga_t *g_b, int bilo, int bihi, int bjlo, int bjhi, mock_ga_t *g_c, int cilo, int cihi, int cjlo, int cjhi); void Mock_Matmul_patch(char transa, char transb, void* alpha, void *beta, mock_ga_t *g_a, int alo[], int ahi[], mock_ga_t *g_b, int blo[], int bhi[], mock_ga_t *g_c, int clo[], int chi[]) ; void Mock_Median(mock_ga_t *g_a, mock_ga_t *g_b, mock_ga_t *g_c, int g_m); void Mock_Median_patch(mock_ga_t *g_a, int *alo, int *ahi, mock_ga_t *g_b, int *blo, int *bhi, mock_ga_t *g_c, int *clo, int *chi, int g_m, int *mlo, int *mhi); size_t Mock_Memory_avail(void); int Mock_Memory_limited(void); void Mock_Merge_distr_patch(mock_ga_t *g_a, int alo[], int ahi[], mock_ga_t *g_b, int blo[], int bhi[]); void Mock_Merge_mirrored(mock_ga_t *g_a); void Mock_NbAcc(mock_ga_t *g_a,int lo[], int hi[],void* buf,int ld[],void* alpha, ga_nbhdl_t* nbhandle); void Mock_Nbget_field(mock_ga_t *g_a, int *lo, int *hi, int foff, int fsize,void *buf, int *ld, ga_nbhdl_t *nbhandle); void Mock_NbGet_ghost_dir(mock_ga_t *g_a, int mask[], ga_nbhdl_t* handle); void Mock_NbGet(mock_ga_t *g_a, int lo[], int hi[], void* buf, int ld[], ga_nbhdl_t* nbhandle); void Mock_Nblock(mock_ga_t *g_a, int *nblock); void Mock_Nbput_field(mock_ga_t *g_a, int *lo, int *hi, int foff, int fsize, void *buf, int *ld, ga_nbhdl_t *nbhandle); void Mock_NbPut(mock_ga_t *g_a, int lo[], int hi[], void* buf, int ld[], ga_nbhdl_t* nbhandle); int Mock_NbTest(ga_nbhdl_t* nbhandle); void Mock_NbWait(ga_nbhdl_t* nbhandle); int Mock_Ndim(mock_ga_t *g_a); int Mock_Nnodes(void); int Mock_Nodeid(void); void Mock_Norm1(mock_ga_t *g_a, double *nm); void Mock_Norm_infinity(mock_ga_t *g_a, double *nm); void Mock_Periodic_acc(mock_ga_t *g_a, int lo[], int hi[],void* buf,int ld[],void* alpha); void Mock_Periodic_get(mock_ga_t *g_a, int lo[], int hi[], void* buf, int ld[]); void Mock_Periodic_put(mock_ga_t *g_a, int lo[], int hi[], void* buf, int ld[]); int Mock_Pgroup_absolute_id(int pgroup, int pid); void Mock_Pgroup_brdcst(int grp, void *buf, int lenbuf, int root); void Mock_Pgroup_cgop(int grp, SingleComplex x[], int n, char *op); int Mock_Pgroup_create(int *list, int count); int Mock_Pgroup_destroy(int grp); void Mock_Pgroup_dgop(int grp, double x[], int n, char *op); void Mock_Pgroup_fgop(int grp, float x[], int n, char *op); int Mock_Pgroup_get_default(void); int Mock_Pgroup_get_mirror(void); int Mock_Pgroup_get_world(void); void Mock_Pgroup_igop(int grp, int x[], int n, char *op); void Mock_Pgroup_lgop(int grp, long x[], int n, char *op); void Mock_Pgroup_llgop(int grp, long long x[], int n, char *op); int Mock_Pgroup_nnodes(int grp_id); int Mock_Pgroup_nodeid(int grp_id); void Mock_Pgroup_set_default(int p_handle); int Mock_Pgroup_split(int grp_id, int num_group); int Mock_Pgroup_split_irreg(int grp_id, int color); void Mock_Pgroup_sync(int grp_id); void Mock_Pgroup_zgop(int grp, DoubleComplex x[], int n, char *op); void Mock_Print_distribution(mock_ga_t *g_a); void Mock_Print_file(FILE *file, mock_ga_t *g_a); void Mock_Print(mock_ga_t *g_a); void Mock_Print_patch_2d(mock_ga_t *g_a,int ilo,int ihi,int jlo,int jhi,int pretty); void Mock_Print_patch(mock_ga_t *g_a, int lo[], int hi[], int pretty); void Mock_Print_stats(void); void Mock_Proc_topology(mock_ga_t *g_a, int proc, int coord[]); void Mock_Put_field(mock_ga_t *g_a, int *lo, int *hi, int foff, int fsize, void *buf, int *ld); void Mock_Put(mock_ga_t *g_a, int lo[], int hi[], void* buf, int ld[]); void Mock_Randomize(mock_ga_t *g_a, void *value); long Mock_Read_inc(mock_ga_t *g_a, int subscript[], long inc); void Mock_Recip(mock_ga_t *g_a); void Mock_Recip_patch(mock_ga_t *g_a,int *lo, int *hi); void Mock_Register_stack_memory(void * (*ext_alloc)(size_t, int, char *), void (*ext_free)(void *)); int Mock_Register_type(size_t bytes); void Mock_Release_block_grid(mock_ga_t *g_a, int index[]); void Mock_Release_block(mock_ga_t *g_a, int idx); void Mock_Release_block_segment(mock_ga_t *g_a, int idx); void Mock_Release_ghost_element(mock_ga_t *g_a, int index[]); void Mock_Release_ghosts(mock_ga_t *g_a); void Mock_Release(mock_ga_t *g_a, int lo[], int hi[]); void Mock_Release_update_block_grid(mock_ga_t *g_a, int index[]); void Mock_Release_update_block(mock_ga_t *g_a, int idx); void Mock_Release_update_block_segment(mock_ga_t *g_a, int idx); void Mock_Release_update_ghost_element(mock_ga_t *g_a, int index[]); void Mock_Release_update_ghosts(mock_ga_t *g_a); void Mock_Release_update(mock_ga_t *g_a, int lo[], int hi[]); void Mock_Scale_cols(mock_ga_t *g_a, int g_v); void Mock_Scale(mock_ga_t *g_a, void *value); void Mock_Scale_patch(mock_ga_t *g_a, int lo[], int hi[], void *alpha); void Mock_Scale_rows(mock_ga_t *g_a, int g_v); void Mock_Scan_add(mock_ga_t *g_a, mock_ga_t *g_b, int g_sbit, int lo, int hi, int excl); void Mock_Scan_copy(mock_ga_t *g_a, mock_ga_t *g_b, int g_sbit, int lo, int hi); void Mock_Scatter_acc_flat(mock_ga_t *g_a, void *v, int subsArray[], int n, void *alpha); void Mock_Scatter_acc(mock_ga_t *g_a, void *v, int* subsArray[], int n, void *alpha); void Mock_Scatter_flat(mock_ga_t *g_a, void *v, int subsArray[], int n); void Mock_Scatter(mock_ga_t *g_a, void *v, int* subsArray[], int n); void Mock_Select_elem(mock_ga_t *g_a, char* op, void* val, int *index); void Mock_Set_array_name(mock_ga_t *g_a, char *name); void Mock_Set_block_cyclic(mock_ga_t *g_a, int dims[]); void Mock_Set_block_cyclic_proc_grid(mock_ga_t *g_a, int block[], int proc_grid[]); void Mock_Set_chunk(mock_ga_t *g_a, int chunk[]); void Mock_Set_data(mock_ga_t *g_a, int ndim, int dims[], int type); void Mock_Set_debug(int flag); void Mock_Set_diagonal(mock_ga_t *g_a, int g_v); void Mock_Set_ghost_corner_flag(mock_ga_t *g_a, int flag); void Mock_Set_ghosts(mock_ga_t *g_a, int width[]); void Mock_Set_irreg_distr(mock_ga_t *g_a, int map[], int block[]); void Mock_Set_irreg_flag(mock_ga_t *g_a, int flag); void Mock_Set_memory_limit(size_t limit); void Mock_Set_pgroup(mock_ga_t *g_a, int p_handle); void Mock_Set_restricted(mock_ga_t *g_a, int list[], int size); void Mock_Set_restricted_range(mock_ga_t *g_a, int lo_proc, int hi_proc); void Mock_Sgemm(char ta, char tb, int m, int n, int k, float alpha, mock_ga_t *g_a, mock_ga_t *g_b, float beta, mock_ga_t *g_c ); void Mock_Shift_diagonal(mock_ga_t *g_a, void *c); int Mock_Solve(mock_ga_t *g_a, mock_ga_t *g_b); int Mock_Spd_invert(mock_ga_t *g_a); void Mock_Step_bound_info(int g_xx, int g_vv, int g_xxll, int g_xxuu, void *boundmin, void *wolfemin, void *boundmax); void Mock_Step_bound_info_patch(int g_xx, int *xxlo, int *xxhi, int g_vv, int *vvlo, int *vvhi, int g_xxll, int *xxlllo, int *xxllhi, int g_xxuu, int *xxuulo, int *xxuuhi, void *boundmin, void *wolfemin, void *boundmax); void Mock_Step_max(mock_ga_t *g_a, mock_ga_t *g_b, void *step); void Mock_Step_max_patch(mock_ga_t *g_a, int *alo, int *ahi, mock_ga_t *g_b, int *blo, int *bhi, void *step); void Mock_Strided_acc(mock_ga_t *g_a, int lo[], int hi[], int skip[], void* buf, int ld[], void *alpha); void Mock_Strided_get(mock_ga_t *g_a, int lo[], int hi[], int skip[], void* buf, int ld[]); void Mock_Strided_put(mock_ga_t *g_a, int lo[], int hi[], int skip[], void* buf, int ld[]); void Mock_Summarize(int verbose); void Mock_Symmetrize(mock_ga_t *g_a); void Mock_Sync(void); void Mock_Terminate(void); int Mock_Total_blocks(mock_ga_t *g_a); void Mock_Transpose(mock_ga_t *g_a, mock_ga_t *g_b); void Mock_Unlock(int mutex); int Mock_Update_ghost_dir(mock_ga_t *g_a, int dimension, int idir, int flag); void Mock_Update_ghosts(mock_ga_t *g_a); int Mock_Uses_fapi(void); int Mock_Uses_ma(void); int Mock_Uses_proc_grid(mock_ga_t *g_a); int Mock_Valid_handle(mock_ga_t *g_a); int Mock_Verify_handle(mock_ga_t *g_a); double Mock_Wtime(void); DoubleComplex Mock_Zdot(mock_ga_t *g_a, mock_ga_t *g_b); DoubleComplex Mock_Zdot_patch(mock_ga_t *g_a, char t_a, int alo[], int ahi[], mock_ga_t *g_b, char t_b, int blo[], int bhi[]); void Mock_Zero_diagonal(mock_ga_t *g_a); void Mock_Zero(mock_ga_t *g_a); void Mock_Zero_patch(mock_ga_t *g_a, int lo[], int hi[]); void Mock_Zgemm(char ta, char tb, int m, int n, int k, DoubleComplex alpha, mock_ga_t *g_a, mock_ga_t *g_b, DoubleComplex beta, mock_ga_t *g_c ); void Mock_Zgop(DoubleComplex x[], int n, char *op); #endif /* GLOBAL_TESTING_UNIT_TEST_MOCK_H */ ga-5-3/global/testing/unit-tests/ga_pgroup_nnodes_nodeid.c0000640005473000001440000000534111721245236022655 0ustar d3n000users/* * Test Program for GA * This is to test GA_PGroup_nnodes and GA_Pgroup_nodeid (is a collective operation) * _pgroup_create -- helps to create different sized group from the given processes and helps to alocate different job for diffferent group * _pgroup_nnodes -- to count number of nodes in particular processor group * _pgroup_nodeid -- to give node-id for nodes present in particular processor group * groups are identified using the group handle */ #include #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" even_odd_pgroup(int rank, int nprocs) { int i, j; int p_Geven, p_Godd, p_size, mod, p_size_mod, *list_even=NULL, *list_odd=NULL; p_size=nprocs/2; mod=nprocs%2; p_size_mod=p_size+mod; list_even = (int*)malloc(p_size*sizeof(int)); list_odd = (int*)malloc(p_size*sizeof(int)); j=0; for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define DIM 2 #define SIZE 20 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, **local_A=NULL, **local_B=NULL; int dims[DIM]={SIZE,SIZE}, dims2[DIM], lo[DIM]={SIZE-SIZE,SIZE-SIZE}, hi[DIM]={SIZE-1,SIZE-1}, ld=5, value=5; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); local_A=(int**)malloc(SIZE*sizeof(int*)); for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 #define GSIZE 5 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_B, g_V, local_A[5][5], local_B[5][5], vsize=GSIZE; int dims[DIM]={GSIZE,GSIZE}, alo[DIM]={1,1}, ahi[DIM]={3,2}, blo[DIM]={1,1}, bhi[DIM]={2,3}, ld=5; int value=5, val2=4; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); g_V = NGA_Create(C_INT, 1, &vsize, "array_V", NULL); GA_Fill(g_A, &value); g_B = GA_Duplicate(g_A, "array_B"); GA_Zero_diagonal(g_A); GA_Print(g_A); GA_Fill(g_B, &val2); GA_Sync(); NGA_Zero_patch(g_B, blo, bhi); GA_Fill(g_V, &val2); GA_Print(g_B); GA_Print(g_V); //------------------------------------------------ /* */ //------------------------------------------------ GA_Sync(); if(rank == 1) printf("Test Completed \n"); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_duplicate.c0000640005473000001440000000267111721245236020426 0ustar d3n000users/* * Test Program for GA * This is to test GA_Duplicate (is a collective operation) * GA_Create -- used to create a global array using handles like 'g_A' * GA_Duplicate --helps to duplicate the content from handle 'g_A' * Here used GA_Inquire to verify that g_A hanle returns the right values of created_array */ #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 main(int argc, char **argv) { int rank, nprocs, i; double g_A, g_B; int dims[DIM]={5,5}, dims2[DIM], ndim2, type2, dims3[DIM], ndim3, type3; double value=5, val2=4; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_DBL, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_DBL, DIM, dims, "array_A", NULL); GA_Fill(g_A, &value); g_B = GA_Duplicate(g_A, "array_B"); GA_Print(g_A); GA_Sync(); GA_Fill(g_B, &val2); GA_Print(g_B); if(rank==0) { NGA_Inquire(g_A, &type2, &ndim2, dims2); NGA_Inquire(g_A, &type3, &ndim3, dims3); printf(" %d -- %d,,\n", type2, ndim2); if(type2!=type3 || ndim2!=ndim3 ) printf("ERROE : \n"); if(type2==type3 || ndim2==ndim3 ) printf("ERROE : Equal \n"); for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_B, g_C, local_C[DIM][DIM]; int dims[DIM]={5,5}, dims2[DIM], ndim, type; int val_A=5, val_B=3, ld=DIM; int lo[DIM]={2,2}, hi[DIM]={4,4}, blo[DIM]={0,0}, bhi[DIM]={2,2}, clo[DIM]={1,1}, chi[DIM]={3,3}; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); g_B = NGA_Create(C_INT, DIM, dims, "array_B", NULL); g_C = NGA_Create(C_INT, DIM, dims, "array_C", NULL); GA_Fill(g_A, &val_A); GA_Fill(g_B, &val_B); GA_Zero(g_C); GA_Elem_divide_patch(g_A, lo, hi, g_B, blo, bhi, g_C, clo, chi); GA_Print(g_C); GA_Sync(); NGA_Get(g_C, clo, chi, local_C, &ld); if(rank==1) { for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define DIM 2 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_B, g_C, local_C[DIM][DIM], dims[DIM]={5,5}, val1=5, val2=4, alpha=3, beta=2, ld=5; int alo[DIM]={2,2}, ahi[DIM]={3,3}, blo[DIM]={2,2}, bhi[DIM]={3,3}, clo[DIM]={1,1}, chi[DIM]={2,2}; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); g_B = GA_Duplicate(g_A, "array_B"); g_C = GA_Duplicate(g_A, "array_C"); GA_Fill(g_A, &val1); GA_Fill(g_B, &val2); GA_Zero(g_C); NGA_Add_patch(&alpha, g_A, clo, chi, &beta, g_B, blo, bhi, g_C, clo, chi); GA_Sync(); GA_Print(g_A); GA_Print(g_B); GA_Print(g_C); NGA_Get(g_C, clo, chi, local_C, &ld); //printf("check 1 \n"); for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define DIM 2 #define SIZE 5 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, **local_A=NULL, **local_B=NULL; int dims[DIM]={SIZE,SIZE}, dims2[DIM], lo[DIM]={SIZE-SIZE,SIZE-SIZE}, hi[DIM]={SIZE-1,SIZE-1}, ld=5, value=5; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); local_A=(int**)malloc(SIZE*sizeof(int*)); for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" main(int argc, char **argv) { int rank, nprocs, i, j; int p_Geven, p_Godd, p_size, mod, p_size_mod, *list_even=NULL, *list_odd=NULL; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); p_size=nprocs/2; mod=nprocs%2; p_size_mod=p_size+mod; list_even = (int*)malloc(p_size*sizeof(int)); list_odd = (int*)malloc(p_size*sizeof(int)); j=0; for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define DIM 2 #define SIZE 5 main(int argc, char **argv) { int rank, nprocs, i, j; double g_A, g_B; int dims[DIM]={SIZE,SIZE}, dims2[DIM], ndim2, type2, dims3[DIM], ndim3, type3, lo[DIM]={0,0}, hi[DIM]={4,4}, ld=SIZE; double value=5, val2=4; double local_A[SIZE][SIZE], local_B[SIZE][SIZE]; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_DBL, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_DBL, DIM, dims, "array_A", NULL); GA_Fill(g_A, &value); g_B = GA_Duplicate(g_A, "array_B"); GA_Print(g_A); GA_Sync(); GA_Copy(g_A, g_B); GA_Print(g_B); // The process is confirmed and verified by printing the array in OP-scr /* if(rank==0) if(content(g_A) != content(g_B))printf("ERROE : \n"); */ if(rank==0) { NGA_Get(g_A, lo, hi, local_A, &ld); NGA_Get(g_B, lo, hi, local_B, &ld); for(i=1; i<3; i++) { for(j=1; j<3; j++) printf("%f ", local_B[i][j]); printf("\n"); } printf("\n"); for(i=1; i<3; i++) { for(j=1; j<3; j++) printf("%f ", local_A[i][j]); printf("\n"); } printf("\n"); for(i=1; i<3; i++) { for(j=1; j<3; j++) { if(local_B[j][i]!=local_A[i][j]) printf("ERROR : in passing values \n"); } } } if(rank == 0) GA_PRINT_MSG(); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_intialize.c0000640005473000001440000000164211721245236020441 0ustar d3n000users/* * Test Program for GA * This is to test GA_initialize * _intitalize and _terminate ---- are function start and end the space space where other GA-Functions are called xcfor manipulation * Using GA_Ndim -- ehich returns dimension of the g_A */ #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 int main(int argc, char **argv) { int rank, nprocs, n=1; int g_A, dims[DIM]={5,5}; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); printf("check %d \n", n); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); if(GA_Ndim(g_A)!=DIM) printf("ERROR: GA_Ndim didnt return nDimension after GA_Initialize\n"); printf("%d : %d \n", rank, GA_Ndim(g_A)); GA_Terminate(); if(rank==0) printf(" GA: Test Completed \n"); MPI_Finalize(); return 0; } ga-5-3/global/testing/unit-tests/ga_scale_rows.c0000640005473000001440000000235011721245236020607 0ustar d3n000users/* * Test Program for GA * This is to test GA_Scale_rows (is a collective operation) * GA_Scale -- used to scale the global array value with constant- it to manipulate the value -- * * GA_scale_rows -- */ #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 #define SIZE 5 main(int argc, char **argv) { int rank, nprocs; int g_A, g_V, val1=5, val2=5, local_A[SIZE][SIZE], dims_V=SIZE, local_V[dims_V]; int dims[DIM]={SIZE,SIZE}, dims2[DIM], lo[DIM]={1,1}, hi[DIM]={2,2}, ld=5, i, j; int loV=0, hiV=dims_V-1; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); g_V = NGA_Create(C_INT, 1, &dims_V, "array_A", NULL); GA_Fill(g_A, &val1); GA_Print(g_A); printf("\n"); GA_Scale(g_A, &val2); GA_Print(g_A); GA_Get_diag(g_A, g_V); GA_Print(g_V); NGA_Get(g_A, lo, hi, local_A, &ld); NGA_Get(g_V, &loV, &hiV, local_V, &ld); if(rank==1) { for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define DIM 2 #define GSIZE 5 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_B, g_V, g_V2; int dims[DIM]={GSIZE,GSIZE}, alo[DIM]={1,1}, ahi[DIM]={3,2}, blo[DIM]={1,1}, bhi[DIM]={2,3}, ld=5; int value=5, val2=4, dims_V=GSIZE; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); g_V = NGA_Create(C_INT, 1, &dims_V, "array_V", NULL); g_V2 = NGA_Create(C_INT, 1, &dims_V, "array_V2", NULL); GA_Fill(g_A, &value); GA_Zero_diagonal(g_A); GA_Print(g_A); g_B = GA_Duplicate(g_A, "array_B"); GA_Fill(g_B, &val2); GA_Sync(); NGA_Zero_patch(g_B, blo, bhi); GA_Print(g_B); GA_Fill(g_V, &val2); GA_Print(g_V); GA_Add_diagonal(g_A, g_V); GA_Add_diagonal(g_B, g_V); GA_Print(g_A); GA_Sync(); GA_Get_diag(g_B, g_V2); GA_Print(g_V2); GA_Print(g_B); if(rank == 1) GA_PRINT_MSG(); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_create_irreg2.c0000640005473000001440000001013011721245236021156 0ustar d3n000users/* * Test Program for GA * This is to test GA_Create_irreg (is a collective operation) * GA_Create -- used to create a global array of regular size * GA_Create_IRREG -- used to create G_array of irregular size -- helps user to define the distribution * Here used GA_Inquire to verify that g_A hanle returns the right values of created_array */ #include #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 #define GSIZE 10 irregular_array1(int rank) { int g_A, g_B; int dims[DIM]={5,10}, dims2[DIM], ndim, type, val_A=5, block[DIM]={2,3}, map[5]={0,2,0,4,6}, val_B=7; int n_block[DIM], block_dims[DIM], i; g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); g_B = NGA_Create_irreg(C_INT, DIM, dims, "array_B", block, map); GA_Fill(g_A, &val_A); GA_Print(g_A); GA_Fill(g_B, &val_B); GA_Print(g_B); GA_Sync(); NGA_Inquire(g_A, &type, &ndim, dims2); //printf(" %d -- %d,,\n", type, ndim); /* GA_Get_block_info(g_B, n_block, block_dims); for(i=0; i=GSIZE); block[0]=b1; block[1]=b2; map=(int*)malloc(nprocs*sizeof(int)); for(i=0; i=GSIZE); block[0]=b1; block[1]=b2; map=(int*)malloc(nprocs*sizeof(int)); for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 #define SIZE 5 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_B, value=5, local_GA[SIZE][SIZE], local_A[SIZE][SIZE], local_B[SIZE][SIZE]; int dims[DIM]={SIZE,SIZE}, dims2[DIM], lo[DIM]={0,0}, hi[DIM]={4,4}, ld=5; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); g_B = NGA_Create(C_INT, DIM, dims, "array_B", NULL); for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" node_check(int nprocs) { if(GA_Nnodes() != nprocs) printf("ERROR: GA_Nnodes didnt return right number of processes \n"); } int main(int argc, char **argv) { int rank, nprocs; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); node_check(nprocs); GA_Sync(); if(rank == 0) printf("Test Completed \n"); GA_Terminate(); MPI_Finalize(); return 0; } ga-5-3/global/testing/unit-tests/ga_lgop.c0000640005473000001440000000740511721507546017422 0ustar d3n000users/* * Test Program for GA * This is to test GA_Igop (is a collective operation) * * */ #include #include #include #include"mpi.h" #include"ga.h" #include"macdecls.h" addition_operator(int rank, int nprocs, int n) { int i; long x[n], temp[n]; char op='+'; for(i=0; i #include #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define NUM 10 addition_operator(int *x, int nprocs) { int i, temp[NUM]; char *op="min"; for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #define SIZE 20 #define NDIM 7 verify_ga_dim(int ndim) { int g_A, dims[ndim], i; for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define N 5 #define D 2 main(int argc, char **argv) { int rank, nprocs; int g_A, dims[D]={5,10}, local_A[N], local_G[N], **sub_array=NULL, **s_array=NULL; int i, j, value=5; MPI_Init(&argc, &argv); GA_Initialize(); MA_init(C_INT, 1000, 1000); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); s_array=(int**)malloc(N*sizeof(int*)); for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define DIM 2 #define SIZE 5 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_B, local_A[SIZE][SIZE], local_B[SIZE][SIZE]; int dims[DIM]={SIZE,SIZE}, dims2[DIM], ndim2, type2, dims3[DIM], ndim3, type3, lo[DIM]={0,0}, hi[DIM]={4,4}; int value=5, val2=4, ld=5; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); GA_Fill(g_A, &value); g_B = GA_Duplicate(g_A, "array_B"); GA_Print(g_A); GA_Sync(); GA_Copy(g_A, g_B); GA_Print(g_B); // The process is confirmed and verified by printing the array in OP-scr /* if(rank==0) if(content(g_A) != content(g_B))printf("ERROE : \n"); */ if(rank==0) { NGA_Get(g_A, lo, hi, local_A, &ld); NGA_Get(g_B, lo, hi, local_B, &ld); for(i=1; i<3; i++) { for(j=1; j<3; j++) printf("%d ", local_B[i][j]); printf("\n"); } printf("\n"); for(i=1; i<3; i++) { for(j=1; j<3; j++) printf("%d ", local_A[i][j]); printf("\n"); } printf("\n"); for(i=1; i<3; i++) { for(j=1; j<3; j++) { if(local_B[i][j]!=local_A[i][j]) printf("ERROR : in passing values \n"); } } } if(rank == 0) GA_PRINT_MSG(); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_pgroup_create4.c0000640005473000001440000000326311721245236021375 0ustar d3n000users/* * Test Program for GA * This is to test GA_PGroup_create (is a collective operation) * _pgroup_create -- helps to create different sized group from the given processes and helps to alocate different job for diffferent group * groups are identified using the group handle */ #include #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" main(int argc, char **argv) { int rank, nprocs, i, j; int p_Geven, p_Godd, p_size, mod, p_size_mod, *list_even=NULL, *list_odd=NULL; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); p_size=nprocs/2; mod=nprocs%2; p_size_mod=p_size+mod; list_even = (int*)malloc(p_size*sizeof(int)); list_odd = (int*)malloc(p_size*sizeof(int)); j=0; for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_B, g_C, local_C[DIM][DIM], dims[DIM]={5,5}; int val_A=5, val_B=3, ld=DIM, max; int lo[DIM]={2,2}, hi[DIM]={4,4}, blo[DIM]={0,0}, bhi[DIM]={2,2}, clo[DIM]={1,1}, chi[DIM]={3,3}; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); g_B = NGA_Create(C_INT, DIM, dims, "array_B", NULL); g_C = NGA_Create(C_INT, DIM, dims, "array_C", NULL); GA_Fill(g_A, &val_A); GA_Fill(g_B, &val_B); GA_Zero(g_C); GA_Elem_maximum_patch(g_A, lo, hi, g_B, blo, bhi, g_C, clo, chi); GA_Print(g_C); GA_Sync(); NGA_Get(g_C, clo, chi, local_C, &ld); if(rank==1) { for(i=0; ival_B) max=val_A; else max=val_B; for(i=0; i #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 #define SIZE 5 main(int argc, char **argv) { int rank, nprocs; int g_A, g_V, val2=3, local_A[SIZE][SIZE], dims_V=SIZE, local_V[dims_V], local_Ar[SIZE][SIZE]; int dims[DIM]={SIZE,SIZE}, dims2[DIM], lo[DIM]={0,0}, hi[DIM]={4,4}, ld=5, i, j; int loV=0, hiV=dims_V-1, arlo[DIM]={0,0}, arhi[DIM]={4,4}; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); for(i=0; i 0) { printf("%d", array[0]); } for (i=1; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 #define GSIZE 5 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_B, g_V, local_A[5][5], local_B[5][5], vsize=GSIZE; int dims[DIM]={GSIZE,GSIZE}, alo[DIM]={1,1}, ahi[DIM]={3,2}, blo[DIM]={1,1}, bhi[DIM]={2,3}, ld=5; int value=5, val2=4; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); g_V = NGA_Create(C_INT, 1, &vsize, "array_V", NULL); GA_Fill(g_A, &value); GA_Zero_diagonal(g_A); GA_Print(g_A); g_B = GA_Duplicate(g_A, "array_B"); GA_Fill(g_B, &val2); GA_Sync(); NGA_Zero_patch(g_B, blo, bhi); GA_Print(g_B); GA_Fill(g_V, &val2); GA_Print(g_V); GA_Add_diagonal(g_A, g_V); GA_Print(g_A); GA_Sync(); if(rank == 0) printf("Test Completed \n"); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_scatter.c0000640005473000001440000000370311721245236020116 0ustar d3n000users/* * Test Program for GA * This is to test GA_Scatter (is a one-sided operation) * GA_Create -- used to create a global array using handles like 'g_A' */ #include #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #define N 5 #define D 2 main(int argc, char **argv) { int rank, nprocs; int g_A, dims[D]={5,10}, local_A[N], sub_array[N][D], **s_array=NULL; int i, j, value=0; MPI_Init(&argc, &argv); GA_Initialize(); MA_init(C_INT, 1000, 1000); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); s_array=(int**)malloc(N*sizeof(int*)); for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 main(int argc, char **argv) { int rank, nprocs, i; int g_A, value=5; int dims[DIM]={5,5}, dims2[DIM], ndim, type; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); GA_Fill(g_A, &value); GA_Print(g_A); //GA_Sync(); printf(" -----------%d\n", rank); GA_Destroy(g_A); printf(" %d-----------\n", rank); GA_Print(g_A); if(rank == 0) printf("Test Completed \n"); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_fillpatch1.c0000640005473000001440000000331611721245236020500 0ustar d3n000users/* * Test Program for GA * This is to test GA_Zero_patch (is a collective operation) * GA_Create -- used to create a global array using handles like 'g_A' * GA_Duplicate --used to duplicate and generate one more global array.., handle 'g_A' to 'g_B' * GA_Zero_patch -- is used to pass zero-value only certain patch of an array */ #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_B, local_A[5][5], local_B[5][5]; int dims[DIM]={5,5}, alo[DIM]={1,1}, ahi[DIM]={3,2}, blo[DIM]={1,1}, bhi[DIM]={2,3}, ld=5; int value=5, val2=4; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); GA_Fill(g_A, &value); g_B = GA_Duplicate(g_A, "array_B"); GA_Print(g_A); GA_Fill(g_B, &val2); GA_Sync(); NGA_Zero_patch(g_B, blo, bhi); GA_Print(g_B); NGA_Get(g_A, alo, ahi, local_A, &ld); NGA_Get(g_B, blo, bhi, local_B, &ld); if(rank==0) { for(i=0; i<3; i++) { for(j=0; j<2; j++) printf("%d ", local_A[i][j]); printf("\n"); } printf("\n"); for(i=0; i<2; i++) { for(j=0; j<3; j++) printf("%d ", local_B[i][j]); printf("\n"); } for(i=0; i<2; i++) { for(j=0; j<3; j++) if( local_A[i][j]==local_B[i][j]) printf("ERROR : \n"); } } // The process is confirmed and verified by printing the array in OP-scr /* if(rank==0) if(content(g_A) != content(g_B))printf("ERROE : \n"); */ GA_Sync(); if(rank == 1) printf("Test Completed \n"); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_add.c0000640005473000001440000000444311721245236017203 0ustar d3n000users/* * Test Program for GA * This is to test GA_Add (is a collective operation) * GA_Create -- used to create a global array using handles like 'g_A' * GA_Duplicate --used to duplicate and generate one more global array.., handle 'g_A' to 'g_B' * * */ #include #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #define DIM 2 #define SIZE 5 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_B, g_C, **local_C=NULL, dims[DIM]={SIZE,SIZE}, val1=5, val2=4, alpha=3, beta=2; int clo[DIM]={SIZE-SIZE,SIZE-SIZE}, chi[DIM]={SIZE-1,SIZE-1}, ld=SIZE; int **local_tm=NULL; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); local_C=(int**)malloc(SIZE*sizeof(int*)); for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define DIM 2 #define GSIZE 5 main(int argc, char **argv) { int rank, nprocs, i, j; int g_A, g_V, g_V2; int dims[DIM]={GSIZE,GSIZE}, ld=5; int val1=5, val2=4, val3=25, dims_V=GSIZE; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); g_A = NGA_Create(C_INT, DIM, dims, "array_A", NULL); g_V = NGA_Create(C_INT, 1, &dims_V, "array_V", NULL); g_V2 = NGA_Create(C_INT, 1, &dims_V, "array_V2", NULL); GA_Fill(g_A, &val1); GA_Fill(g_V, &val2); GA_Set_diagonal(g_A, g_V); GA_Add_diagonal(g_A, g_V); GA_Get_diag(g_A, g_V2); GA_Print(g_A); GA_Print(g_V); GA_Print(g_V2); GA_Sync(); if(rank == 0) GA_PRINT_MSG(); GA_Terminate(); MPI_Finalize(); } ga-5-3/global/testing/unit-tests/ga_zero.c0000640005473000001440000000515611734172527017442 0ustar d3n000users#include "ga.h" #include "mock.h" #include "ga_unit.h" static int test(int shape_idx, int type_idx, int dist_idx) { int type = TYPES[type_idx]; int *dims = SHAPES[shape_idx]; int ndim = SHAPES_NDIM[shape_idx]; mock_ga_t *mock_a, *result_a; int g_a; int buffer[100]; int lo[GA_MAX_DIM], hi[GA_MAX_DIM], ld[GA_MAX_DIM], shape[GA_MAX_DIM]; int result=0, error_index=-1, error_proc=-1; mock_a = Mock_Create(type, ndim, dims, "mock", NULL); result_a = Mock_Create(type, ndim, dims, "mock", NULL); g_a = create_function[dist_idx](type, ndim, dims); mock_data(mock_a, g_a); mock_to_global(mock_a, g_a); Mock_Zero(mock_a); GA_Zero(g_a); global_to_mock(g_a, result_a); result = neq_mock(mock_a, result_a, &error_index); if (0 != result) { error_proc = GA_Nodeid(); } GA_Igop(&result, 1, "+"); GA_Igop(&error_proc, 1, "max"); if (error_proc != GA_Nodeid()) { error_index = 0; } GA_Igop(&error_index, 1, "+"); if (0 != result) { if (error_proc == GA_Nodeid()) { printf("ERROR: local result failed to compare to global result\n"); printf("\terror_proc=%d\n", error_proc); printf("\terror_index=%d\n", error_index); printf("***LOCAL RESULT***\n"); Mock_Print(mock_a); printf("***GLOBAL RESULT***\n"); Mock_Print(result_a); printf("\tprinting array distribution\n"); } GA_Sync(); GA_Print(g_a); GA_Print_distribution(g_a); return 1; } Mock_Destroy(mock_a); Mock_Destroy(result_a); GA_Destroy(g_a); return 0; } int main(int argc, char **argv) { TEST_SETUP; int shape_idx=0, type_idx=0, dist_idx=0; int return_code=0; for (shape_idx=0; shape_idx < NUM_SHAPES; ++shape_idx) { for (type_idx=0; type_idx < NUM_TYPES; ++type_idx) { for (dist_idx=0; dist_idx < NUM_DISTS; ++dist_idx) { if (0 == GA_Nodeid()) { printf("%s\t%s\t%s\n", SHAPE_NAMES[shape_idx], TYPE_NAMES[type_idx], DIST_NAMES[dist_idx] ); } GA_Sync(); return_code = test(shape_idx, type_idx, dist_idx); if (0 != return_code) { break; } } if (0 != return_code) { break; } } if (0 != return_code) { break; } } TEST_TEARDOWN; return return_code; } ga-5-3/global/testing/unit-tests/ga_ndim.c0000640005473000001440000000263611721245236017404 0ustar d3n000users/* * Test Program for GA * This is to test GA_Ndim (is a local operation) * verifing GA_Ndim -- which returns dimension of the g_A */ #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #define SIZE 5 #define ONE_DIM 1 #define TWO_DIM 2 #define THREE_DIM 3 one_dimension() { int g_A, dims[ONE_DIM]={SIZE}; g_A = NGA_Create(C_INT, ONE_DIM, dims, "array_A", NULL); if(GA_Ndim(g_A) != ONE_DIM) printf("ERROR: GA_Ndim didnt return nDimension after GA_Initialize \n"); GA_Destroy(g_A); } two_dimension() { int g_A, dims[TWO_DIM]={SIZE,SIZE}; g_A = NGA_Create(C_INT, TWO_DIM, dims, "array_A", NULL); if(GA_Ndim(g_A) != TWO_DIM) printf("ERROR: GA_Ndim didnt return nDimension after GA_Initialize \n"); GA_Destroy(g_A); } three_dimension() { int g_A, dims[THREE_DIM]={SIZE,SIZE,SIZE}; g_A = NGA_Create(C_INT, THREE_DIM, dims, "array_A", NULL); if(GA_Ndim(g_A) != THREE_DIM) printf("ERROR: GA_Ndim didnt return nDimension after GA_Initialize \n"); GA_Destroy(g_A); } int main(int argc, char **argv) { int rank, nprocs, n=1, temp=0; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); one_dimension(); two_dimension(); three_dimension(); GA_Sync(); if(rank == 0) printf("Test Completed \n"); GA_Terminate(); MPI_Finalize(); return 0; } ga-5-3/global/testing/unit-tests/ga_pgroup_create.c0000640005473000001440000000446611721245236021317 0ustar d3n000users/* * Test Program for GA * This is to test GA_PGroup_create (is a collective operation) * */ #include #include #include"mpi.h" #include"ga.h" #include"macdecls.h" #define PGSIZE 4 main(int argc, char **argv) { int rank, nprocs, i, j; int p_Geven, p_Godd, list[PGSIZE], p_size, *list_even=NULL, *list_odd=NULL, even, odd; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); for(i=0; i #include"mpi.h" #include"ga.h" #include"macdecls.h" #include"ga_unit.h" #define DIM 2 int main(int argc, char **argv) { int rank, nprocs; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MA_init(C_INT, 1000, 1000); GA_Initialize(); if(rank != GA_Nodeid()) GA_ERROR_MSG(); GA_Sync(); if(rank == 0) GA_COMPLETE_MSG(); GA_Terminate(); MPI_Finalize(); return 0; } ga-5-3/global/testing/g3test.F0000640005473000001440000004534412105004737015042 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c vector boxes lack arithmetic precision #ifdef CRAY_YMP # define THRESH 1d-10 #elif defined(FUJITSU) # define THRESH 1d-12 # define THRESHF 1e-5 #else # define THRESH 1d-13 # define THRESHF 1e-5 #endif #define MISMATCH(x,y) abs(x-y)/max(1d0,abs(x)).gt.THRESH #define MISMATCHF(x,y) abs(x-y)/max(1.0,abs(x)).gt.THRESHF c#define MIRROR program main implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" integer heap, stack, fudge, ma_heap, me integer nmax, DIM, nwidth, MAXPROC, nloop parameter (nmax = 20, DIM = 3, nwidth = 2, MAXPROC = 2000) parameter (nloop = 1) integer ndim, nproc, pdims(7), type, dcnt, g_a, g_b, maxval integer i, j, k, dims(7), width(7), map(2*nmax) integer lo(7), hi(7), ld(7) integer lo2(7), hi2(7), ld2(7) integer dims3(7), ld3(7), chunk(7) MA_ACCESS_INDEX_TYPE index3 integer a(nmax, nmax, nmax) integer b(nmax+2*nwidth,nmax+2*nwidth,nmax+2*nwidth) #ifdef MIRROR integer lprocs, iproc, inode, p_mirror #endif double precision start,finish,start1,finish1 double precision t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13 double precision t14,t15,t16,t17,t18,t19,t20,t21,tmp logical status, safe_put, safe_get, has_data(0:MAXPROC-1) parameter (heap=nmax*nmax*nmax*4, fudge=100, stack=100*100) c c*** Intitialize a message passing library c #include "mp3.fh" c c*** Initialize GA c c There are 2 choices: ga_initialize or ga_initialize_ltd. c In the first case, there is no explicit limit on memory usage. c In the second, user can set limit (per processor) in bytes. c print* call ga_initialize() nproc = ga_nnodes() me = ga_nodeid() #ifdef MIRROR inode = ga_cluster_nodeid() lprocs = ga_cluster_nprocs(inode) iproc = mod(me,lprocs) p_mirror = ga_pgroup_get_mirror() #endif c we can also use GA_set_memory_limit BEFORE first ga_create call c ma_heap = heap + fudge call GA_set_memory_limit(util_mdtob(ma_heap)) c if(ga_nodeid().eq.0)then print *,' GA initialized ' call ffflush(6) endif c c*** Initialize the MA package c MA must be initialized before any global array is allocated c status = ma_init(MT_DCPL, stack, ma_heap) if (.not. status) call ga_error('ma_init failed',-1) c if(me.eq.0)then #ifndef MIRROR print *, 'using ', nproc, ' process(es)' #else print *, 'using ', ga_cluster_nnodes(), ' nodes' print *, 'using ',lprocs,' process(es) per node' #endif call ffflush(6) endif c c Test ghost distributions c ndim = DIM c c Create irregular distribution on all nodes c #ifndef MIRROR call factor(nproc,ndim,pdims) #else call factor(lprocs,ndim,pdims) #endif dims(1) = pdims(1) * nmax dims(2) = pdims(2) * nmax dims(3) = pdims(3) * nmax maxval = 1 do i = 1, ndim maxval = dims(i)*maxval end do maxval = maxval - 1 c dcnt = 1 do i = 1, pdims(1) map(dcnt) = (i-1)*nmax + 1 dcnt = dcnt + 1 end do do i = 1, pdims(2) map(dcnt) = (i-1)*nmax + 1 dcnt = dcnt + 1 end do do i = 1, pdims(3) map(dcnt) = (i-1)*nmax + 1 dcnt = dcnt + 1 end do c do i = 1, ndim width(i) = nwidth chunk(i) = 1 if (pdims(i).gt.dims(i)) pdims(i) = dims(i) if (me.eq.0) then write(6,*) 'Value of pdims(',i,') is ',pdims(i) endif ld(i) = nmax call ffflush(6) end do if (me.eq.0) then do i = 1, dcnt - 1 write(6,'("map(",i2,") = ",i5)') i,map(i) call ffflush(6) end do endif type = MT_INT #ifndef MIRROR status = nga_create_ghosts_irreg (type, ndim, dims, width, + "test_array_a", map, pdims, g_a) c status = nga_create_ghosts_irreg (type, ndim, dims, width, c + "test_array_b", map, pdims, g_b) #else status = nga_create_ghosts_irreg_config (type, ndim, dims, width, + "test_array_a", map, pdims, p_mirror, g_a) c status = nga_create_ghosts_irreg_config (type, ndim, dims, width, c + "test_array_b", map, pdims, p_mirror, g_b) #endif if (status.and.me.eq.0) then write(6,*) '*' write(6,*) '* Global array creation was successful' write(6,*) '*' elseif (.not.status) then write(6,*) 'Global array creation failure on ',me endif #ifndef MIRROR status = nga_create_irreg (type, ndim, dims,"test_array_b", + map, pdims, g_b) #else status = nga_create_irreg_config (type, ndim, dims,"test_array_b", + map, pdims, p_mirror, g_b) #endif if (.not.status) then write(6,*) 'Global array creation failure on ',me endif c c Find processors that have data c call ga_sync #ifndef MIRROR do i = 0, nproc-1 #else do i = 0, lprocs-1 #endif call nga_distribution(g_a, i, lo, hi) has_data(i) = .true. do j = 1, ndim if (lo(j).eq.0.and.hi(j).eq.-1) has_data(i) = .false. end do #ifndef MIRROR if (me.eq.i) then write(6,*) '*' write(6,*) '* Distribution on processor ',i write(6,*) '*' write(6,110) lo(1), hi(1) write(6,110) lo(2), hi(2) write(6,110) lo(3), hi(3) 110 format(2i10) endif #endif call ffflush(6) call ga_sync end do c c initialize g_a c call ga_sync call nga_distribution(g_a, me, lo, hi) do i = 1, hi(1) - lo(1) + 1 do j = 1, hi(2) - lo(2) + 1 do k = 1, hi(3) - lo(3) + 1 a(i,j,k) = (i + lo(1) - 2)*dims(1)*dims(2) + + (j + lo(2) - 2)*dims(1) + + (k + lo(3) - 2) end do end do end do safe_put = .true. do i = 1, ndim if (hi(i).lt.lo(i)) safe_put = .false. end do if (has_data(me).and.safe_put) call nga_put(g_a, lo, hi, a, ld) call ga_copy(g_a,g_b) if (has_data(me)) call nga_access_ghosts(g_a, dims3, + index3, ld3) do i = 1, ndim lo2(i) = lo(i) - width(i) hi2(i) = hi(i) + width(i) ld2(i) = ld(i) + 2*width(i) end do call ga_sync safe_get = .true. c if (me.eq.0) write(6,*) '*' if (me.eq.0) write(6,*) '* Starting update 1' if (me.eq.0) write(6,*) '*' t1 = 0.0d00 t2 = 0.0d00 t3 = 0.0d00 call ga_zero(g_a) call ga_copy(g_b,g_a) do i = 1, nloop start = util_timer() call ga_ghost_barrier t1 = t1 + util_timer() - start start = util_timer() call ga_update1_ghosts(g_a) t2 = t2 + util_timer() - start start = util_timer() call ga_ghost_barrier t3 = t3 + util_timer() - start end do t1 = t1/dble(nloop) t2 = t2/dble(nloop) t3 = t3/dble(nloop) if (me.eq.0) then write(6,*) '*' write(6,*) '* Testing results of update 1' write(6,*) '*' call ffflush(6) endif if (has_data(me).and.safe_get) + call nga_periodic_get(g_a, lo2, hi2, b, ld2) call atest(int_mb(index3),dims3,ld3(1),b,nmax+2*nwidth,has_data) if (me.eq.0) write(6,*) '*' if (me.eq.0) write(6,*) '* Starting update 2' if (me.eq.0) write(6,*) '*' t4 = 0.0d00 t5 = 0.0d00 t6 = 0.0d00 call ga_zero(g_a) call ga_copy(g_b,g_a) do i = 1, nloop start = util_timer() call ga_ghost_barrier t4 = t4 + util_timer() - start start = util_timer() status = ga_update2_ghosts(g_a) t5 = t5 + util_timer() - start start = util_timer() call ga_ghost_barrier t6 = t6 + util_timer() - start end do t4 = t4/dble(nloop) t5 = t5/dble(nloop) t6 = t6/dble(nloop) if (me.eq.0) then write(6,*) '*' write(6,*) '* Testing results of update 2' write(6,*) '*' call ffflush(6) endif if (has_data(me).and.safe_get) + call nga_periodic_get(g_a, lo2, hi2, b, ld2) call atest(int_mb(index3),dims3,ld3(1),b,nmax+2*nwidth,has_data) t7 = 0.0d00 t8 = 0.0d00 t9 = 0.0d00 if (me.eq.0) write(6,*) '*' if (me.eq.0) write(6,*) '* Starting update 3' if (me.eq.0) write(6,*) '*' call ga_zero(g_a) call ga_copy(g_b,g_a) do i = 1, nloop start = util_timer() call ga_ghost_barrier t7 = t7 + util_timer() - start start = util_timer() status = ga_update3_ghosts(g_a) t8 = t8 + util_timer() - start start = util_timer() call ga_ghost_barrier t9 = t9 + util_timer() - start end do t7 = t7/dble(nloop) t8 = t8/dble(nloop) t9 = t9/dble(nloop) if (me.eq.0) then write(6,*) '*' write(6,*) '* Testing results of update 3' write(6,*) '*' call ffflush(6) endif if (has_data(me).and.safe_get) + call nga_periodic_get(g_a, lo2, hi2, b, ld2) call atest(int_mb(index3),dims3,ld3(1),b,nmax+2*nwidth,has_data) t10 = 0.0d00 t11 = 0.0d00 t12 = 0.0d00 if (me.eq.0) write(6,*) '*' if (me.eq.0) write(6,*) '* Starting update 4' if (me.eq.0) write(6,*) '*' call ga_zero(g_a) call ga_copy(g_b,g_a) do i = 1, nloop start = util_timer() call ga_ghost_barrier t10 = t10 + util_timer() - start start = util_timer() status = ga_update4_ghosts(g_a) t11 = t11 + util_timer() - start start = util_timer() call ga_ghost_barrier t12 = t12 + util_timer() - start end do t10 = t10/dble(nloop) t11 = t11/dble(nloop) t12 = t12/dble(nloop) if (me.eq.0) then write(6,*) '*' write(6,*) '* Testing results of update 4' write(6,*) '*' call ffflush(6) endif if (has_data(me).and.safe_get) + call nga_periodic_get(g_a, lo2, hi2, b, ld2) call atest(int_mb(index3),dims3,ld3(1),b,nmax+2*nwidth,has_data) c 123 continue #if 0 t13 = 0.0d00 t14 = 0.0d00 t15 = 0.0d00 if (me.eq.0) write(6,*) '*' if (me.eq.0) write(6,*) '* Starting update 5' if (me.eq.0) write(6,*) '*' call ga_zero(g_a) call ga_copy(g_b,g_a) do i = 1, nloop start = util_timer() call ga_ghost_barrier t13 = t13 + util_timer() - start start = util_timer() status = ga_update5_ghosts(g_a) t14 = t14 + util_timer() - start start = util_timer() call ga_ghost_barrier t15 = t15 + util_timer() - start end do t13 = t13/dble(nloop) t14 = t14/dble(nloop) t15 = t15/dble(nloop) if (me.eq.0) then write(6,*) '*' write(6,*) '* Testing results of update 5' write(6,*) '*' call ffflush(6) endif if (has_data(me).and.safe_get) + call nga_periodic_get(g_a, lo2, hi2, b, ld2) call atest(int_mb(index3),dims3,ld3(1),b,nmax+2*nwidth,has_data) #else t13 = 0.0d00 t14 = 0.0d00 t15 = 0.0d00 #endif t16 = 0.0d00 t17 = 0.0d00 t18 = 0.0d00 if (me.eq.0) write(6,*) '*' if (me.eq.0) write(6,*) '* Starting update 6' if (me.eq.0) write(6,*) '*' call ga_zero(g_a) call ga_copy(g_b,g_a) do i = 1, nloop start = util_timer() call ga_ghost_barrier t16 = t16 + util_timer() - start start = util_timer() status = ga_update6_ghosts(g_a) t17 = t17 + util_timer() - start start = util_timer() call ga_ghost_barrier t18 = t18 + util_timer() - start end do t16 = t16/dble(nloop) t17 = t17/dble(nloop) t18 = t18/dble(nloop) if (me.eq.0) then write(6,*) '*' write(6,*) '* Testing results of update 6' write(6,*) '*' call ffflush(6) endif if (has_data(me).and.safe_get) + call nga_periodic_get(g_a, lo2, hi2, b, ld2) call atest(int_mb(index3),dims3,ld3(1),b,nmax+2*nwidth,has_data) write(6,*) 'Update finished on processor ',me if (me.eq.0) then write(6,*) '*' write(6,*) '* Completed updates successfully' write(6,*) '*' call ffflush(6) endif c c get patch with ghost cells c t19 = 0.0d00 t20 = 0.0d00 t21 = 0.0d00 do i = 1, nloop start = util_timer() call ga_ghost_barrier t19 = t19 + util_timer() - start start = util_timer() if (has_data(me).and.safe_get) + call nga_periodic_get(g_a, lo2, hi2, b, ld2) t20 = t20 + util_timer() - start start = util_timer() call ga_ghost_barrier t21 = t21 + util_timer() - start end do t19 = t19/dble(nloop) t20 = t20/dble(nloop) t21 = t21/dble(nloop) c tmp = t2 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) 'Average time for nga_update1_ghosts ', + tmp/dble(nproc) endif tmp = t1 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) ' Average time for prior sync ',tmp/dble(nproc) endif tmp = t3 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) ' Average time for post sync ',tmp/dble(nproc) endif tmp = t5 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) 'Average time for nga_update2_ghosts ', + tmp/dble(nproc) endif tmp = t4 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) ' Average time for prior sync ',tmp/dble(nproc) endif tmp = t6 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) ' Average time for post sync ',tmp/dble(nproc) endif tmp = t8 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) 'Average time for nga_update3_ghosts ', + tmp/dble(nproc) endif tmp = t7 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) ' Average time for prior sync ',tmp/dble(nproc) endif tmp = t9 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) ' Average time for post sync ',tmp/dble(nproc) endif tmp = t11 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) 'Average time for nga_update4_ghosts ', + tmp/dble(nproc) endif tmp = t10 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) ' Average time for prior sync ',tmp/dble(nproc) endif tmp = t12 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) ' Average time for post sync ',tmp/dble(nproc) endif tmp = t14 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) 'Average time for nga_update5_ghosts ', + tmp/dble(nproc) endif tmp = t13 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) ' Average time for prior sync ',tmp/dble(nproc) endif tmp = t15 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) ' Average time for post sync ',tmp/dble(nproc) endif tmp = t17 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) 'Average time for nga_update6_ghosts ', + tmp/dble(nproc) endif tmp = t16 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) ' Average time for prior sync ',tmp/dble(nproc) endif tmp = t18 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) ' Average time for post sync ',tmp/dble(nproc) endif tmp = t20 call ga_dgop(6,tmp,1,'+') if (me.eq.0) then write(6,*) 'Average time for nga_periodic_get ',tmp/dble(nproc) endif tmp = t19 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) ' Average time for prior sync ',tmp/dble(nproc) endif tmp = t21 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) ' Average time for post sync ',tmp/dble(nproc) endif 127 continue c if(ga_nodeid().eq.0) print *,'All tests successful ' c c*** Tidy up the GA package c call ga_terminate() c c*** Tidy up after message-passing library c call MP_FINALIZE() c stop end c subroutine atest(a,dim,ld,b,ld2,has_data) #include "global.fh" integer ld,ld2 integer dim(7) integer a(ld,ld,*), b(ld2,ld2,*) integer i, j, k, l, nproc, lprocs, iproc, inode logical has_data(0:1999), check_data c isok = .true. nproc = ga_nnodes() check_data = .true. do l = 1, nproc call ga_sync if (l-1.eq.ga_nodeid().and.has_data(l-1)) then do i = 1, dim(1) do j = 1, dim(2) do k = 1, dim(3) if (a(i,j,k).ne.b(i,j,k)) check_data = .false. end do end do end do if (check_data) then if (ga_nodeid().eq.0) then write(6,*) '*' write(6,*) '* Data from nga_access_ghosts and' write(6,*) '* nga_periodic_get is the same' write(6,*) '*' endif else write(6,*) '*' write(6,*) '* Data from nga_access_ghosts and' write(6,*) '* nga_periodic_get is NOT the same on' write(6,*) '* processor ',l-1 write(6,*) '*' endif endif call ffflush(6) 101 format(10i5) enddo c return end c subroutine factor(p,ndim,dims) implicit none integer i,j,p,ndim,dims(7),imin,mdim integer ip,ifac,pmax,prime(1000) integer fac(1000) c i = 1 ip = p do i = 1, ndim dims(i) = 1 end do c c factor p completely c first, find all prime numbers less than or equal to p c pmax = 0 do i = 2, p do j = 1, pmax if (mod(i,prime(j)).eq.0) go to 100 end do pmax = pmax + 1 prime(pmax) = i 100 continue end do c c find all prime factors of p c ifac = 0 do i = 1, pmax 200 if (mod(ip,prime(i)).eq.0) then ifac = ifac + 1 fac(ifac) = prime(i) ip = ip/prime(i) go to 200 endif end do c c determine dimensions of processor grid c do i = ifac, 1, -1 c c find dimension with minimum value c imin = dims(1) mdim = 1 do j = 2, ndim if (dims(j).lt.imin) then imin = dims(j) mdim = j endif end do dims(mdim) = dims(mdim)*fac(i) end do c return end ga-5-3/global/testing/test.F0000640005473000001440000030261212115161655014606 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c $Id: test.F,v 1.64.2.11 2007-04-06 22:37:35 d3g293 Exp $ c vector boxes lack arithmetic precision #if defined(FUJITSU) # define THRESH 1d-12 # define THRESHF 1e-5 #else # define THRESH 1d-13 # define THRESHF 2e-5 #endif #define MISMATCH(x,y) abs(x-y)/max(1d0,abs(x)).gt.THRESH #define MISMATCHF(x,y) abs(x-y)/max(1.0,abs(x)).gt.THRESHF c#define NEW_API c#define MIRROR #define GA3 #define NGA_GATSCAT c#define BLOCK_CYCLIC c#define USE_SCALAPACK_DISTR c#define USE_RESTRICTED #ifdef USE_RESTRICTED # define NEW_API #endif #define MEM_INC 1000 #ifdef BLOCK_CYCLIC # define NEW_API # undef MIRROR #else # undef USE_SCALAPAC_DISTR #endif program main implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" integer heap, stack, fudge, ma_heap, me, nproc, map(4096), block integer g_s, ndim, dim1, i logical status parameter (heap=200*200*4, fudge=100, stack=200*200) c c*** Intitialize a message passing library c #include "mp3.fh" c c*** Initialize GA c c There are 2 choices: ga_initialize or ga_initialize_ltd. c In the first case, there is no explicit limit on memory usage. c In the second, user can set limit (per processor) in bytes. c call ga_initialize() nproc = ga_nnodes() me = ga_nodeid() c we can also use GA_set_memory_limit BEFORE first ga_create call c ma_heap = heap/nproc + fudge ma_heap = 2*ma_heap #ifdef USE_RESTRICTED ma_heap = 2*ma_heap #endif print *, 'util_mdtob(', ma_heap, ')=', util_mdtob(ma_heap) call GA_set_memory_limit(util_mdtob(ma_heap)) c if(ga_nodeid().eq.0)then #ifdef MIRROR print *,' Performing tests on Mirrored Arrays' #endif print *,' GA initialized ' call ffflush(6) endif c c*** Initialize the MA package c MA must be initialized before any global array is allocated c status = ma_init(MT_DCPL, stack, ma_heap) if (.not. status) call ga_error('ma_init failed',-1) c c Uncomment the below line to register external memory allocator c for dynamic arrays inside GA routines. c call register_ext_memory() c if(me.eq.(nproc-1))then print *, 'using ', nproc,' process(es) ', ga_cluster_nnodes(), $ ' cluster nodes' print *,'process ', me, ' is on node ',ga_cluster_nodeid(), $ ' with ', ga_cluster_nprocs(-1), ' processes' call ffflush(6) endif c c create array to force staggering of memory and uneven distribution c of pointers c dim1 = MEM_INC map(1) = 1 do i = 2, nproc map(i) = MEM_INC*(i-1)+1 dim1 = dim1 + MEM_INC*i end do g_s = ga_create_handle() ndim = 1 call ga_set_data(g_s,ndim,dim1,MT_INT) call ga_set_array_name(g_s,'s') call ga_set_irreg_distr(g_s,map,nproc) #ifdef MIRROR if (me.eq.0) then write(6,*) write(6,*) ' TESTING MIRRORED ARRAYS ' write(6,*) call ffflush(6) endif #endif call ga_sync() c c*** Check support for double precision arrays c if (me.eq.0) then write(6,*) write(6,*) ' CHECKING DOUBLES ' write(6,*) call ffflush(6) endif call check_dbl() #if 1 c c*** Check support for single precision complex arrays c if (me.eq.0) then write(6,*) write(6,*) ' CHECKING SINGLE COMPLEX ' write(6,*) call ffflush(6) endif call check_complex_float() c c*** Check support for double precision complex arrays c if (me.eq.0) then write(6,*) write(6,*) ' CHECKING DOUBLE COMPLEX ' write(6,*) call ffflush(6) endif call check_complex() c c*** Check support for integer arrays c if (me.eq.0) then write(6,*) write(6,*) ' CHECKING INTEGERS ' write(6,*) call ffflush(6) endif call check_int() c c c*** Check support for single precision c if (me.eq.0) then write(6,*) write(6,*) ' CHECKING SINGLE PRECISION ' write(6,*) call ffflush(6) endif call check_flt() c if (me.eq.0) then write(6,*) write(6,*)'CHECKING Wrappers to Message Passing Collective ops' write(6,*) call ffflush(6) endif call check_wrappers c c*** Check if memory limits are enforced c call check_mem(util_mdtob(ma_heap*ga_nnodes())) c #endif if(me.eq.0) call ga_print_stats() if(me.eq.0) print *,' ' if(me.eq.0) print *,'All tests successful ' status = ga_destroy(g_s) c c*** Tidy up the GA package c call ga_terminate() c c*** Tidy up after message-passing library c call MP_FINALIZE() c end subroutine check_dbl() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n,m parameter (n = 256) parameter (m = 2*n) double precision a(n,n), b(n,n), v(m),w(m) #ifdef MIRROR logical lsame integer g_c, p_mirror integer ndim, dims(2), chunk(2) integer alo(2), blo(2), ahi(2), bhi(2) #else # ifdef NEW_API integer ndim, dims(2), chunk(2) # endif #endif integer iv(m), jv(m) #ifdef NGA_GATSCAT integer ijv(2,m) #endif logical status integer g_a, g_b integer iran, i,j, loop,nloop,maxloop, ilo, ihi, jlo, jhi, itmp integer nproc, me, int, ij, inc, ii, jj parameter (maxloop = 100) integer maxproc parameter (maxproc = 4096) double precision crap, sum1, sum2, x double precision nwords logical found integer lprocs,inode,iproc,nnodes,lproc #ifdef USE_RESTRICTED integer num_rstrctd integer rstrctd_list(maxproc/2) #endif #ifdef BLOCK_CYCLIC integer block_size(2), proc_grid(2) #endif intrinsic int iran(i) = int(drand(0)*real(i)) + 1 c nproc = ga_nnodes() me = ga_nodeid() inode = ga_cluster_nodeid() lprocs = ga_cluster_nprocs(inode) nnodes = ga_cluster_nnodes() iproc = mod(me,lprocs) nloop = Min(maxloop,n) #ifdef USE_RESTRICTED num_rstrctd = nproc/2 if (num_rstrctd.eq.0) num_rstrctd = 1 do i = 1, num_rstrctd rstrctd_list(i) = (num_rstrctd/2) + i-1 end do #endif #ifdef BLOCK_CYCLIC block_size(1) = 32 block_size(2) = 32 #ifdef USE_SCALAPACK_DISTR if (mod(nproc,2).ne.0) + call ga_error("Available procs must be divisible by 2",0) proc_grid(1) = 2 proc_grid(2) = nproc/2 #endif #endif c c a() is a local copy of what the global array should start as c do j = 1, n do i = 1, n #ifndef MIRROR a(i,j) = i-1 + (j-1)*n #else a(i,j) = inode + i-1 + (j-1)*n #endif b(i,j) =-1. enddo enddo * write(6,*) ' correct ' * call output(a, 1, n, 1, n, n, n, 1) * call ffflush(6) c c Create a global array c * print *,ga_nodeid(), ' creating array' * call ffflush(6) c call setdbg(1) #ifdef NEW_API g_a = ga_create_handle() ndim = 2 dims(1) = n dims(2) = n call ga_set_data(g_a,ndim,dims,MT_DBL) call ga_set_array_name(g_a,'a') #ifdef USE_RESTRICTED call ga_set_restricted(g_a, rstrctd_list, num_rstrctd) #endif #ifdef BLOCK_CYCLIC #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_a,block_size,proc_grid) #else call ga_set_block_cyclic(g_a,block_size) #endif #endif # ifdef MIRROR p_mirror = ga_pgroup_get_mirror() call ga_set_pgroup(g_a,p_mirror) # endif status = ga_allocate(g_a) #else # ifndef MIRROR status = ga_create(MT_DBL, n, n, 'a', 0, 0, g_a) # else ndim = 2 dims(1) = n dims(2) = n chunk(1) = 0 chunk(2) = 0 p_mirror = ga_pgroup_get_mirror() status = nga_create_config(MT_DBL, ndim, dims, 'a', chunk, + p_mirror, g_a) # endif #endif if (.not. status) then write(6,*) ' ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c c check if handle is valid. be quiet unless error C if(.not.ga_valid_handle(g_a)) call ga_error("invalid handle",g_a) c #ifndef MIRROR call ga_distribution(g_a,me,ilo, ihi, jlo, jhi) #else lproc = me - ga_cluster_procid(inode,0) call ga_distribution(g_a, lproc, ilo, ihi, jlo, jhi) #endif call ga_sync() c c Zero the array c if (me .eq. 0) then write(6,21) 21 format('> Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c c Check that it is indeed zero c call ga_get(g_a, 1, n, 1, n, b, n) call ga_sync() do i = 1, n do j = 1, n if (b(i,j) .ne. 0.0d0) then write(6,*) me,' zero ', i, j, b(i,j) call ffflush(6) c call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_sync() c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format('> Checking disjoint put ... ') call ffflush(6) endif call ga_sync() c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) * write(6,4) me, ilo, ihi, jlo, jhi * 4 format(' node ',i2,' checking put ',4i4) * call ffflush(6) call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) endif ij = ij + 1 enddo enddo call ga_sync() c c All nodes check all of a c call util_dfill(n*n, 0.0d0, b, 1) * call ga_print(g_a,1) call ga_get(g_a, 1, n, 1, n, b, n) * write(6,*) ' after get' * call output(b, 1, n, 1, n, n, n, 1) c do i = 1, n do j = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' put ', me, i, j, a(i,j),b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif call ga_sync() c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format('> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_sync() c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c call util_dfill(n*n, 0.0d0, b, 1) call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif sum1 = 0.0d0 do j = jlo, jhi do i = ilo, ihi sum1 = sum1 + b(i,j) if (b(i,j) .ne. a(i,j)) then write(6,*) i, j, b(i,j), a(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo c enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) call ffflush(6) endif call ga_sync() c c Each node accumulates into disjoint sections of the array c #if 1 if (me .eq. 0) then write(6,9) 9 format('> Checking accumulate ... ') call ffflush(6) endif call ga_sync() c crap = drand(12345) ! Same seed for each process do j = 1, n do i = 1, n c b(i,j) = drand(0) b(i,j) = i+j enddo enddo c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc c x = drand(0) x = 10. ilo = i ihi = min(i+inc-1, n) if(ihi.eq.n-1)ihi=n c ihi = min(i+inc, n) jlo = j jhi = min(j+inc-1, n) if(jhi.eq.n-1)jhi=n c jhi = min(j+inc-1, n) * call ffflush(6) #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif c print *, me, 'checking accumulate ',ilo,ihi,jlo,jhi,x * 11 format(' node ',i2,' checking accumulate ',4i4) * call ffflush(6) call ga_acc(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n, x) endif ij = ij + 1 c c Each process applies all updates to its local copy c do jj = jlo, jhi do ii = ilo, ihi a(ii,jj) = a(ii,jj) + x * b(ii,jj) enddo enddo enddo enddo call ga_sync() c c All nodes check all of a c call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if(MISMATCH(b(i,j),a(i,j)))then write(6,*) ' acc ', me, i, j, a(i,j), b(i,j) call ffflush(6) c call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' disjoint ga_acc is OK' write(6,*) endif c c overlapping accumulate call ga_sync() #ifdef NEW_API g_b = ga_create_handle() call ga_set_data(g_b,ndim,dims,MT_DBL) call ga_set_array_name(g_b,'b') #ifdef BLOCK_CYCLIC #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_b,block_size,proc_grid) #else call ga_set_block_cyclic(g_b,block_size) #endif #endif # ifdef MIRROR call ga_set_pgroup(g_b,p_mirror) # endif if (.not.ga_allocate(g_b)) then #else # ifndef MIRROR if (.not. ga_create(MT_DBL, n, n, 'b', 0, 0, g_b)) then # else if (.not. nga_create_config(MT_DBL, ndim, dims, 'b', chunk, + p_mirror, g_b)) then # endif #endif call ga_error('ga_create failed for second array ',0) endif c call ga_zero(g_b) call ga_acc(g_b, n/2, n/2, n/2, n/2, 1d0, 1, 1d0) call ga_sync() #ifndef MIRROR if (me.eq.0) then call ga_get(g_b, n/2, n/2, n/2, n/2, b(1,1), 1) x = abs(b(1,1) -1d0*nproc) #else if (iproc.eq.0) then call ga_get(g_b, n/2, n/2, n/2, n/2, b(1,1), 1) x = abs(b(1,1) -1d0*lprocs) #endif if(x.gt. 1d-10)then #ifndef MIRROR write(6,*)'val=',b(1,1),' expected=',nproc, x #else write(6,*)'val=',b(1,1),' expected=',lprocs, x #endif call ga_error('overlapping accumulate failed',0) endif if (me.eq.0) then write(6,*) write(6,*) ' overlapping ga_acc is OK' write(6,*) endif endif #endif c c Check the ga_add function c if (me .eq. 0) then write(6,91) 91 format('> Checking add ...') call ffflush(6) endif c c crap = drand(12345) ! Everyone has same seed do j = 1, n do i = 1, n b(i,j) = drand(0) a(i,j) = 0.1d0*a(i,j) + 0.9d0*b(i,j) enddo enddo #ifndef MIRROR if (me.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) #else if (iproc.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) #endif call ga_add(0.1d0, g_a, 0.9d0, g_b, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if(MISMATCH(b(i,j), a(i,j)))then write(6,*) ' add ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' add is OK ' write(6,*) endif call ga_sync() c c Check the ddot function c if (me .eq. 0) then write(6,19) 19 format('> Checking ddot ...') call ffflush(6) endif crap = drand(12345) ! Everyone has same seed sum1 = 0.0d0 do j = 1, n do i = 1, n b(i,j) = drand(0) sum1 = sum1 + a(i,j)*b(i,j) enddo enddo #ifndef MIRROR if (me.eq.0) then #else if (iproc.eq.0) then #endif call ga_put(g_b, 1, n, 1, n, b, n) call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_sync() sum2 = ga_ddot(g_a,g_b) if(MISMATCH(sum1, sum2))then write(6,*) ' ddot wrong ', sum1, sum2 call ffflush(6) call ga_error('... exiting ',0) else if (me.eq.0) then write(6,*) write(6,*) ' ddot is OK ' write(6,*) endif c c Check the ga_scale function c if (me .eq. 0) then write(6,92) 92 format('> Checking scale ...') call ffflush(6) endif call ga_scale(g_a, 0.123d0) call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n a(i,j) = a(i,j)*0.123d0 if (MISMATCH(b(i,j), a(i,j)))then write(6,*) ' dscal ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' scale is OK ' write(6,*) endif c c Check the ga_copy function c if (me .eq. 0) then write(6,*) write(6,*)'> Checking copy' write(6,*) call ffflush(6) endif if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) call ga_copy(g_a, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' copy ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy is OK ' write(6,*) endif c call ga_sync() if (me .eq. 0) then write(6,*) '> Checking scatter/gather (might be slow)... ' call ffflush(6) endif call ga_sync() c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do j = 1, 10 call ga_sync() #ifndef MIRROR itmp = iran(nproc)-1 if(me.eq.itmp) then #else itmp = iran(lprocs)-1 if(me.eq.itmp) then #endif #ifndef NGA_GATSCAT do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo enddo call ga_gather(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,v(loop),1) if(v(loop) .ne. a(ilo,jlo))then write(6,*)me,' gather ', ilo,',',jlo,',', a(ilo,jlo) & ,' ',v(loop) call ffflush(6) call ga_error('... exiting ',0) endif enddo #else do loop = 1,m ilo = iran(n) jlo = iran(n) ijv(1,loop) = ilo ijv(2,loop) = jlo enddo call nga_gather(g_a, v, ijv, m) do loop = 1,m ilo= ijv(1,loop) jlo= ijv(2,loop) call ga_get(g_a,ilo,ilo,jlo,jlo,v(loop),1) if(v(loop) .ne. a(ilo,jlo))then write(6,*)me,' gather ', ilo,',',jlo,',', a(ilo,jlo) & ,' ',v(loop) call ffflush(6) call ga_error('... exiting ',0) endif enddo #endif endif enddo c if (me.eq.0) then write(6,*) write(6,*) ' gather is OK' write(6,*) call ffflush(6) endif c do j = 1,10 call ga_sync() #ifndef MIRROR if(me.eq.iran(ga_nnodes())-1) then #else if(iproc.eq.iran(lprocs)-1) then #endif #ifndef NGA_GATSCAT do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo c v(loop) = DSIN(a(ilo,jlo)+b(ilo,jlo)) v(loop) = 1d0 *(ilo+jlo) enddo call ga_scatter(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,w(loop),1) c if(v(loop) .ne. w(loop))then if(w(loop) .ne. 1d0 *(ilo+jlo) )then write(6,*)me,' scatter ', ilo,',',jlo,',',w(loop) & ,' ', 1d0 *(ilo+jlo) call ffflush(6) call ga_error('... exiting ',0) endif enddo #else do loop = 1,m ilo = iran(n) jlo = iran(n) ijv(1,loop) = ilo ijv(2,loop) = jlo c v(loop) = DSIN(a(ilo,jlo)+b(ilo,jlo)) v(loop) = 1d0 *(ilo+jlo) enddo call nga_scatter(g_a, v, ijv, m) do loop = 1,m ilo= ijv(1,loop) jlo= ijv(2,loop) call ga_get(g_a,ilo,ilo,jlo,jlo,w(loop),1) c if(v(loop) .ne. w(loop))then if(w(loop) .ne. 1d0 *(ilo+jlo) )then write(6,927)me,ilo,jlo,w(loop),1d0 *(ilo+jlo),loop 927 format(i3,' scatter ',i5,',',i5,',',f7.1,',',f7.1,',',i5) call ffflush(6) call ga_error('... exiting ',0) endif enddo #endif endif call ga_sync() enddo c call ga_sync() c if (me.eq.0) then write(6,*) write(6,*) ' scatter is OK' write(6,*) endif c call ga_sync() c c scatter-acc available in GA ver. 3.0 #ifdef GA3 if (me.eq.0) then write(6,*) write(6,*) ' checking scatter-accumulate' write(6,*) endif c crap = drand(1234) call ga_zero(g_a) c do j = 1, n do i = 1, n b(i,j) =0. enddo enddo c x = .1d0 ii =n do jj = 1,1 call ga_sync() do loop = 1, ii c generate unique i,j pairs 10 continue i = iran(n) j=iran(n) c if (found(i,j, iv, jv, loop-1) ) goto 10 #ifndef NGA_GATSCAT iv(loop) = i jv(loop) = j #else ijv(1,loop) = i ijv(2,loop) = j #endif v(loop) = 1d0 *(i+j) #ifndef MIRROR b(i,j) = b(i,j) + nproc*x*v(loop) ! update local ref. array #else b(i,j) = b(i,j) + lprocs*x*v(loop) ! update local ref. array #endif enddo #ifndef NGA_GATSCAT call ga_scatter_acc(g_a,v,iv,jv, ii,x) #else call nga_scatter_acc(g_a,v,ijv,ii,x) #endif c call ga_sync() c c check the result c call ga_get(g_a, 1, n, 1,n, a, n) do loop = 1,ii #ifndef NGA_GATSCAT i = iv(loop) j = jv(loop) #else i = ijv(1,loop) j = ijv(2,loop) #endif if(MISMATCH(a(i,j),b(i,j)))then print *,'Error',i,j,loop,a(i,j),'expected=',b(i,j) * if(me.eq.0)then * do ii=1,loop * print *,'element',ii, iv(ii),jv(ii) * enddo * endif call ga_error('scatter-acc error in trial ',jj) endif enddo call ga_sync() enddo call ga_sync() if (me.eq.0) then write(6,*) write(6,*) ' scatter-accumulate is OK' write(6,*) endif #endif #ifdef MIRROR c c Check the merge function c do j = 1, n do i = 1, n a(i,j) = inode + i-1 + (j-1)*n enddo enddo if (me .eq. 0) then write(6,23) 23 format('> Checking merge ...') call ffflush(6) endif if (iproc.eq.0) then call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_merge_mirrored(g_a) call ga_get(g_a, 1, n, 1, n, b, n) lsame = .true. ilo = 0 ihi = nnodes*(nnodes-1)/2 do i = 1, n do j = 1, n if ((dble(nnodes)*(a(j,i)-dble(inode)) + + dble(ihi)).ne.b(j,i)) then lsame = .false. ilo = ilo + 1 endif end do end do if(lsame.and.me.eq.0)then write(6,*) write(6,*) ' merge is OK ' write(6,*) else if (.not.lsame) then write(6,*) write(6,*) ' merge is wrong ',ilo write(6,*) call ga_error('... exiting ',0) endif c c Checking copy between different array configurations c if (me .eq. 0) then write(6,20) 20 format('> Checking mixed copy ...') call ffflush(6) endif #ifdef NEW_API g_c = ga_create_handle() call ga_set_data(g_c,ndim,dims,MT_DBL) call ga_set_array_name(g_c,'c') #ifdef BLOCK_CYCLIC #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_c,block_size,proc_grid) #else call ga_set_block_cyclic(g_c,block_size) #endif #endif if (.not.ga_allocate(g_c)) then #else if (.not. nga_create(MT_DBL, ndim, dims, 'c', chunk, g_c)) then #endif call ga_error('ga_create failed for third array ',0) endif call ga_zero(g_c) call ga_copy(g_a,g_c) call ga_get(g_a, 1, n, 1, n, a, n) call ga_get(g_c, 1, n, 1, n, b, n) do i = 1, n do j = 1, n if (a(j,i).ne.b(j,i)) then lsame = .false. endif end do end do if(lsame.and.me.eq.0)then write(6,*) write(6,*) ' Mixed copy (mirrored to normal) is OK ' write(6,*) elseif (me.eq.0) then write(6,*) write(6,*) ' Mixed copy (mirrored to normal) is wrong ',ilo write(6,*) call ga_error('... exiting ',0) endif call ga_zero(g_a) call ga_copy(g_c,g_a) call ga_get(g_a, 1, n, 1, n, a, n) do i = 1, n do j = 1, n if (a(j,i).ne.b(j,i)) then lsame = .false. endif end do end do if(lsame.and.me.eq.0)then write(6,*) write(6,*) ' Mixed copy (normal to mirrored) is OK ' write(6,*) elseif (me.eq.0) then write(6,*) write(6,*) ' Mixed copy (normal to mirrored) is wrong ',ilo write(6,*) call ga_error('... exiting ',0) endif c c Check the merge to distributed patch function c do j = 1, n do i = 1, n a(i,j) = inode + i-1 + (j-1)*n enddo enddo if (me .eq. 0) then write(6,24) 24 format('> Checking merge to distributed patch ...') call ffflush(6) endif c c get low and high indices of patch c ilo = n/4 ihi = ilo + n/2 do i = 1, 2 alo(i) = ilo blo(i) = ilo + 1 ahi(i) = ihi bhi(i) = ihi + 1 end do if (iproc.eq.0) then call ga_put(g_a, 1, n, 1, n, a, n) endif call nga_merge_distr_patch(g_a, alo, ahi, g_c, blo, bhi) call ga_get(g_c, 1, n, 1, n, b, n) lsame = .true. ilo = 0 ihi = nnodes*(nnodes-1)/2 do i = alo(1), ahi(1) ii = i-alo(1) + blo(1) do j = alo(2), ahi(2) jj = j-alo(2) + blo(2) if ((dble(nnodes)*(a(j,i)-dble(inode)) + + dble(ihi)).ne.b(jj,ii)) then c if (me.eq.0) then c write(6,*) i,j,ii,jj, nnodes*a(j,i)+ihi, b(jj,ii) c endif lsame = .false. ilo = ilo + 1 endif end do end do if(lsame.and.me.eq.0)then write(6,*) write(6,*) ' merge to distributed patch is OK ' write(6,*) elseif (.not.lsame) then write(6,*) write(6,*) ' merge to distributed patch is wrong ',ilo write(6,*) call ga_error('... exiting ',0) endif #endif c c Delete the global arrays c status = ga_destroy(g_b) status = ga_destroy(g_a) c end c----------------------------------------------------------------- subroutine check_complex_float() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n,m parameter (n = 60) parameter (m = 2*n) complex a(n,n), b(n,n), v(m),w(m) #ifdef MIRROR integer ndim, dims(2), chunk(2), p_mirror #else # ifdef NEW_API integer ndim, dims(2), chunk(2), p_mirror # endif #endif integer iv(m), jv(m) logical status integer g_a, g_b integer iran, i,j, loop,nloop,maxloop, ilo, ihi, jlo, jhi, itmp integer nproc, me, int, ij, inc, ii, jj, nnodes parameter (maxloop = 100) integer maxproc parameter (maxproc = 4096) double precision crap, real double precision nwords complex x, sum1, sum2, factor integer lprocs, inode, iproc, lproc #ifdef USE_RESTRICTED integer num_rstrctd integer rstrctd_list(maxproc/2) #endif intrinsic int iran(i) = int(drand(0)*real(i)) + 1 c nproc = ga_nnodes() me = ga_nodeid() inode = ga_cluster_nodeid() lprocs = ga_cluster_nprocs(inode) nnodes = ga_cluster_nnodes() iproc = mod(me,lprocs) nloop = Min(maxloop,n) #ifdef USE_RESTRICTED num_rstrctd = nproc/2 if (num_rstrctd.eq.0) num_rstrctd = 1 do i = 1, num_rstrctd rstrctd_list(i) = (num_rstrctd/2) + i-1 end do #endif c c a() is a local copy of what the global array should start as c do j = 1, n do i = 1, n #ifndef MIRROR a(i,j) = cmplx(real(i-1), real((j-1)*n)) #else a(i,j) = cmplx(real(inode),0.0d00) + + cmplx(real(i-1), real((j-1)*n)) #endif b(i,j) = cmplx(-1d0,1d0) enddo enddo c c Create a global array c c print *,ga_nodeid(), ' creating array' call ffflush(6) c call setdbg(1) #ifdef NEW_API ndim = 2 dims(1) = n dims(2) = n g_a = ga_create_handle() call ga_set_data(g_a,ndim,dims,MT_SCPL) call ga_set_array_name(g_a,'a') #ifdef USE_RESTRICTED call ga_set_restricted(g_a, rstrctd_list, num_rstrctd) #endif # ifdef MIRROR p_mirror = ga_pgroup_get_mirror() call ga_set_pgroup(g_a,p_mirror) # endif status = ga_allocate(g_a) #else # ifndef MIRROR status = ga_create(MT_SCPL, n, n, 'a', 0, 0, g_a) # else ndim = 2 dims(1) = n dims(2) = n chunk(1) = 0 chunk(2) = 0 p_mirror = ga_pgroup_get_mirror() status = nga_create_config(MT_SCPL, ndim, dims, 'a', chunk, + p_mirror, g_a) # endif #endif if (.not. status) then write(6,*) ' ga_create failed' call ga_error('... exiting ',0) endif #ifdef NEW_API g_b = ga_create_handle() call ga_set_data(g_b,ndim,dims,MT_SCPL) call ga_set_array_name(g_b,'b') # ifdef MIRROR call ga_set_pgroup(g_b,p_mirror) # endif if (.not.ga_allocate(g_b)) then #else # ifndef MIRROR if (.not. ga_create(MT_SCPL, n, n, 'b', 0, 0, g_b)) then # else if (.not. nga_create_config(MT_SCPL, ndim, dims, 'b', chunk, _ p_mirror, g_b)) then # endif #endif call ga_error('ga_create failed for second array ',0) endif #ifndef MIRROR call ga_distribution(g_a,me,ilo, ihi, jlo, jhi) #else lproc = me - ga_cluster_procid(inode,0) call ga_distribution(g_a, lproc, ilo, ihi, jlo, jhi) #endif call ga_sync() c c Zero the array c if (me .eq. 0) then write(6,21) 21 format(/'> Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c c Check that it is indeed zero c call ga_get(g_a, 1, n, 1, n, b, n) call ga_sync() do i = 1, n do j = 1, n if(b(i,j).ne.(0d0,0d0)) then write(6,*) me,' zero ', i, j, b(i,j) call ffflush(6) c call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_sync() c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format(/'> Checking disjoint put ... ') call ffflush(6) endif call ga_sync() c inc = (n-1)/4 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) endif ij = ij + 1 enddo enddo call ga_sync() c c All nodes check all of a c call ga_get(g_a, 1, n, 1, n, b, n) c do i = 1, n do j = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' put ', me, i, j, a(i,j),b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif call ga_sync() c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format(/'> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_sync() c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif do j = jlo, jhi do i = ilo, ihi if (b(i,j) .ne. a(i,j)) then write(6,*)'error:', i, j, b(i,j), a(i,j) call ga_error('... exiting ',0) endif enddo enddo c enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) call ffflush(6) endif call ga_sync() c c Each node accumulates into disjoint sections of the array c if (me .eq. 0) then write(6,9) 9 format(/'> Checking accumulate ... ') call ffflush(6) endif call ga_sync() c crap = drand(12345) ! Same seed for each process do j = 1, n do i = 1, n b(i,j) = cmplx(drand(0),drand(1)) b(i,j) = cmplx(real(i),real(j)) enddo enddo c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc c x = cmplx(drand(0),0.333d0) c x = cmplx(0.333d0,0) * x = cmplx(0d0,0d0) x = 0 ilo = i ihi = min(i+inc-1, n) if(ihi.eq.n-1)ihi=n jlo = j jhi = min(j+inc-1, n) if(jhi.eq.n-1)jhi=n #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif call ga_acc(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n, x) endif ij = ij + 1 c c Each process applies all updates to its local copy c do jj = jlo, jhi do ii = ilo, ihi a(ii,jj) = a(ii,jj) + x * b(ii,jj) enddo enddo enddo enddo call ga_sync() c c All nodes check all of a c call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (MISMATCHF(b(i,j), a(i,j)))then write(6,*) ' acc ', me, i, j, a(i,j), b(i,j) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' disjoint ga_acc is OK' write(6,*) endif c c overlapping accumulate c call ga_zero(g_b) call ga_acc(g_b, n/2, n/2, n/2, n/2, (1,-1), 1, (1,0)) call ga_sync() #ifndef MIRROR if (me.eq.0) then call ga_get(g_b, n/2, n/2, n/2, n/2, x, 1) if (MISMATCHF(x, ((1d0,-1d0)*nproc)))then #else if (iproc.eq.0) then call ga_get(g_b, n/2, n/2, n/2, n/2, x, 1) if (MISMATCHF(x, ((1d0,-1d0)*lprocs)))then #endif c if(error.gt. (1d-8))then #ifndef MIRROR write(6,*)'val=',x,' expected=(',nproc,',',-nproc,')' #else write(6,*)'val=',x,' expected=(',lprocs,',',-lprocs,')' #endif call ga_error('overlapping accumulate failed',0) endif write(6,*) write(6,*) ' overlapping ga_acc is OK' write(6,*) endif c c Check the ga_copy function c if (me .eq. 0) then write(6,*) write(6,*)'> Checking copy' write(6,*) call ffflush(6) endif call ga_sync() #ifndef MIRROR if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) #else if(iproc.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) #endif call ga_copy(g_a, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' copy ', me, i, j, a(i,j), b(i,j) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy is OK ' write(6,*) endif c c c Check the ga_scale function c if (me .eq. 0) then write(6,92) 92 format(/'> Checking scale ...') call ffflush(6) endif factor = (1d0,-1d0) call ga_scale(g_a, factor) call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n a(i,j) = a(i,j)*factor if (MISMATCHF(b(i,j), a(i,j)))then write(6,*) ' fscal ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' scale is OK ' write(6,*) endif c c Check scatter&gather c call ga_sync() if (me .eq. 0) then write(6,*) '> Checking scatter/gather (might be slow)... ' call ffflush(6) if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_sync() c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do j = 1, 10 call ga_sync() #ifndef MIRROR itmp = iran(nproc)-1 if(me.eq.itmp) then #else itmp = iran(lprocs)-1 if(iproc.eq.itmp) then #endif do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo enddo call ga_gather(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,v(loop),1) if(v(loop) .ne. a(ilo,jlo))then write(6,*)me,' gather ', ilo,',',jlo,',', a(ilo,jlo) & ,' ',v(loop) call ffflush(6) call ga_error('... exiting ',0) endif enddo endif enddo c if (me.eq.0) then write(6,*) write(6,*) ' gather is OK' write(6,*) call ffflush(6) endif c do j = 1,10 call ga_sync() #ifndef MIRROR if(me.eq.iran(ga_nnodes())-1) then #else if(me.eq.iran(lprocs)-1) then #endif do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo v(loop) = (1d0,-1d0) *(ilo+jlo) enddo call ga_scatter(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,w(loop),1) if(w(loop) .ne. (1d0,-1d0) *(ilo+jlo) )then write(6,*)me,' scatter ', ilo,',',jlo,',',w(loop) & ,' ', (1d0,-1d0) *(ilo+jlo) call ffflush(6) endif enddo endif call ga_sync() enddo c if (me.eq.0) then write(6,*) write(6,*) ' scatter is OK' write(6,*) endif c c Check ga_add c if (me .eq. 0) then write(6,91) 91 format(/'> Checking add ...') call ffflush(6) endif call ga_get(g_a, 1, n, 1, n, a, n) crap = drand(12345) ! Everyone has same seed do j = 1, n do i = 1, n b(i,j) = cmplx(drand(0), drand(1)) a(i,j) = (0.1d0,-.1d0)*a(i,j) + (.9d0,-.9d0)*b(i,j) enddo enddo #ifndef MIRROR if (me.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) #else if (iproc.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) #endif call ga_add((0.1,-.1), g_a, (0.9,-.9), g_b, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (MISMATCHF(b(i,j), a(i,j)))then write(6,*) ' add ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' add is OK ' write(6,*) endif call ga_sync() c c Check the cdot function c if (me .eq. 0) then write(6,19) 19 format(/'> Checking cdot ...') call ffflush(6) endif crap = drand(12345) ! Everyone has same seed sum1 = (0.0d0,0.d0) do j = 1, n do i = 1, n b(i,j) = cmplx(drand(0), drand(1)) sum1 = sum1 + a(i,j)*b(i,j) enddo enddo #ifndef MIRROR if (me.eq.0) then #else if (iproc.eq.0) then #endif call ga_put(g_b, 1, n, 1, n, b, n) call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_sync() sum2 = ga_cdot(g_a,g_b) if (MISMATCHF(sum1, sum2))then write(6,*) ' cdot wrong ', sum1, sum2 call ffflush(6) call ga_error('... exiting ',0) else if (me.eq.0) then write(6,*) write(6,*) ' cdot is OK ' write(6,*) endif c c Delete the global arrays c status = ga_destroy(g_b) status = ga_destroy(g_a) c end c----------------------------------------------------------------- subroutine check_complex() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n,m parameter (n = 60) parameter (m = 2*n) double complex a(n,n), b(n,n), v(m),w(m) #ifdef MIRROR integer ndim, dims(2), chunk(2), p_mirror #else # ifdef NEW_API integer ndim, dims(2), chunk(2), p_mirror # endif #endif integer iv(m), jv(m) logical status integer g_a, g_b integer iran, i,j, loop,nloop,maxloop, ilo, ihi, jlo, jhi, itmp integer nproc, me, int, ij, inc, ii, jj, nnodes parameter (maxloop = 100) integer maxproc parameter (maxproc = 4096) double precision crap, real double precision nwords double complex x, sum1, sum2, factor integer lprocs, inode, iproc, lproc #ifdef USE_RESTRICTED integer num_rstrctd integer rstrctd_list(maxproc/2) #endif #ifdef BLOCK_CYCLIC integer block_size(2), proc_grid(2) #endif intrinsic int iran(i) = int(drand(0)*real(i)) + 1 c nproc = ga_nnodes() me = ga_nodeid() inode = ga_cluster_nodeid() lprocs = ga_cluster_nprocs(inode) nnodes = ga_cluster_nnodes() iproc = mod(me,lprocs) nloop = Min(maxloop,n) #ifdef USE_RESTRICTED num_rstrctd = nproc/2 if (num_rstrctd.eq.0) num_rstrctd = 1 do i = 1, num_rstrctd rstrctd_list(i) = (num_rstrctd/2) + i-1 end do #endif #ifdef BLOCK_CYCLIC block_size(1) = 32 block_size(2) = 32 #ifdef USE_SCALAPACK_DISTR if (mod(nproc,2).ne.0) + call ga_error("Available procs must be divisible by 2",0) proc_grid(1) = 2 proc_grid(2) = nproc/2 #endif #endif c c a() is a local copy of what the global array should start as c do j = 1, n do i = 1, n #ifndef MIRROR a(i,j) = cmplx(dble(i-1), dble((j-1)*n)) #else a(i,j) = cmplx(dble(inode),0.0d00) + + cmplx(dble(i-1), dble((j-1)*n)) #endif b(i,j) = cmplx(-1d0,1d0) enddo enddo c c Create a global array c c print *,ga_nodeid(), ' creating array' call ffflush(6) c call setdbg(1) #ifdef NEW_API ndim = 2 dims(1) = n dims(2) = n g_a = ga_create_handle() call ga_set_data(g_a,ndim,dims,MT_DCPL) call ga_set_array_name(g_a,'a') #ifdef USE_RESTRICTED call ga_set_restricted(g_a, rstrctd_list, num_rstrctd) #endif #ifdef BLOCK_CYCLIC #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_a,block_size,proc_grid) #else call ga_set_block_cyclic(g_a,block_size) #endif #endif # ifdef MIRROR p_mirror = ga_pgroup_get_mirror() call ga_set_pgroup(g_a,p_mirror) # endif status = ga_allocate(g_a) #else # ifndef MIRROR status = ga_create(MT_DCPL, n, n, 'a', 0, 0, g_a) # else ndim = 2 dims(1) = n dims(2) = n chunk(1) = 0 chunk(2) = 0 p_mirror = ga_pgroup_get_mirror() status = nga_create_config(MT_DCPL, ndim, dims, 'a', chunk, + p_mirror, g_a) # endif #endif if (.not. status) then write(6,*) ' ga_create failed' call ga_error('... exiting ',0) endif #ifdef NEW_API g_b = ga_create_handle() call ga_set_data(g_b,ndim,dims,MT_DCPL) call ga_set_array_name(g_b,'b') #ifdef BLOCK_CYCLIC #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_b,block_size,proc_grid) #else call ga_set_block_cyclic(g_b,block_size) #endif #endif # ifdef MIRROR call ga_set_pgroup(g_b,p_mirror) # endif if (.not.ga_allocate(g_b)) then #else # ifndef MIRROR if (.not. ga_create(MT_DCPL, n, n, 'b', 0, 0, g_b)) then # else if (.not. nga_create_config(MT_DCPL, ndim, dims, 'b', chunk, _ p_mirror, g_b)) then # endif #endif call ga_error('ga_create failed for second array ',0) endif #ifndef MIRROR call ga_distribution(g_a,me,ilo, ihi, jlo, jhi) #else lproc = me - ga_cluster_procid(inode,0) call ga_distribution(g_a, lproc, ilo, ihi, jlo, jhi) #endif call ga_sync() c c Zero the array c if (me .eq. 0) then write(6,21) 21 format('> Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c c Check that it is indeed zero c call ga_get(g_a, 1, n, 1, n, b, n) call ga_sync() do i = 1, n do j = 1, n if(b(i,j).ne.(0d0,0d0)) then write(6,*) me,' zero ', i, j, b(i,j) call ffflush(6) c call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_sync() c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format('> Checking disjoint put ... ') call ffflush(6) endif call ga_sync() c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) endif ij = ij + 1 enddo enddo call ga_sync() c c All nodes check all of a c call util_qfill(n*n, (0d0,0d0), b, 1) call ga_get(g_a, 1, n, 1, n, b, n) c do i = 1, n do j = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' put ', me, i, j, a(i,j),b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif call ga_sync() c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format('> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_sync() c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c call util_qfill(n*n, (0.0d0,0d0), b, 1) call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif do j = jlo, jhi do i = ilo, ihi if (b(i,j) .ne. a(i,j)) then write(6,*)'error:', i, j, b(i,j), a(i,j) call ga_error('... exiting ',0) endif enddo enddo c enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) call ffflush(6) endif call ga_sync() c c Each node accumulates into disjoint sections of the array c if (me .eq. 0) then write(6,9) 9 format('> Checking accumulate ... ') call ffflush(6) endif call ga_sync() c crap = drand(12345) ! Same seed for each process do j = 1, n do i = 1, n b(i,j) = cmplx(drand(0),drand(1)) b(i,j) = cmplx(dble(i),dble(j)) enddo enddo c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc c x = cmplx(drand(0),0.333d0) c x = cmplx(0.333d0,0) * x = cmplx(0d0,0d0) x = 0 ilo = i ihi = min(i+inc-1, n) if(ihi.eq.n-1)ihi=n jlo = j jhi = min(j+inc-1, n) if(jhi.eq.n-1)jhi=n #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif call ga_acc(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n, x) endif ij = ij + 1 c c Each process applies all updates to its local copy c do jj = jlo, jhi do ii = ilo, ihi a(ii,jj) = a(ii,jj) + x * b(ii,jj) enddo enddo enddo enddo call ga_sync() c c All nodes check all of a c call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (MISMATCH(b(i,j), a(i,j)))then write(6,*) ' acc ', me, i, j, a(i,j), b(i,j) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' disjoint ga_acc is OK' write(6,*) endif c c overlapping accumulate c call ga_zero(g_b) call ga_acc(g_b, n/2, n/2, n/2, n/2, (1d0,-1d0), 1, (1d0,0d0)) call ga_sync() #ifndef MIRROR if (me.eq.0) then call ga_get(g_b, n/2, n/2, n/2, n/2, x, 1) if (MISMATCH(x, ((1d0,-1d0)*nproc)))then #else if (iproc.eq.0) then call ga_get(g_b, n/2, n/2, n/2, n/2, x, 1) if (MISMATCH(x, ((1d0,-1d0)*lprocs)))then #endif c if(error.gt. (1d-8))then #ifndef MIRROR write(6,*)'val=',x,' expected=(',nproc,',',-nproc,')' #else write(6,*)'val=',x,' expected=(',lprocs,',',-lprocs,')' #endif call ga_error('overlapping accumulate failed',0) endif write(6,*) write(6,*) ' overlapping ga_acc is OK' write(6,*) endif c c Check the ga_copy function c if (me .eq. 0) then write(6,*) write(6,*)'> Checking copy' write(6,*) call ffflush(6) endif call ga_sync() #ifndef MIRROR if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) #else if(iproc.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) #endif call ga_copy(g_a, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' copy ', me, i, j, a(i,j), b(i,j) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy is OK ' write(6,*) endif c c c Check the ga_scale function c if (me .eq. 0) then write(6,92) 92 format('> Checking scale ...') call ffflush(6) endif factor = (1d0,-1d0) call ga_scale(g_a, factor) call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n a(i,j) = a(i,j)*factor if (MISMATCH(b(i,j), a(i,j)))then write(6,*) ' dscal ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' scale is OK ' write(6,*) endif c c Check scatter&gather c call ga_sync() if (me .eq. 0) then write(6,*) '> Checking scatter/gather (might be slow)... ' call ffflush(6) if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_sync() c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do j = 1, 10 call ga_sync() #ifndef MIRROR itmp = iran(nproc)-1 if(me.eq.itmp) then #else itmp = iran(lprocs)-1 if(iproc.eq.itmp) then #endif do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo enddo call ga_gather(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,v(loop),1) if(v(loop) .ne. a(ilo,jlo))then write(6,*)me,' gather ', ilo,',',jlo,',', a(ilo,jlo) & ,' ',v(loop) call ffflush(6) call ga_error('... exiting ',0) endif enddo endif enddo c if (me.eq.0) then write(6,*) write(6,*) ' gather is OK' write(6,*) call ffflush(6) endif c do j = 1,10 call ga_sync() #ifndef MIRROR if(me.eq.iran(ga_nnodes())-1) then #else if(me.eq.iran(lprocs)-1) then #endif do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo v(loop) = (1d0,-1d0) *(ilo+jlo) enddo call ga_scatter(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,w(loop),1) if(w(loop) .ne. (1d0,-1d0) *(ilo+jlo) )then write(6,*)me,' scatter ', ilo,',',jlo,',',w(loop) & ,' ', (1d0,-1d0) *(ilo+jlo) call ffflush(6) endif enddo endif call ga_sync() enddo c if (me.eq.0) then write(6,*) write(6,*) ' scatter is OK' write(6,*) endif c c Check ga_add c if (me .eq. 0) then write(6,91) 91 format('> Checking add ...') call ffflush(6) endif call ga_get(g_a, 1, n, 1, n, a, n) crap = drand(12345) ! Everyone has same seed do j = 1, n do i = 1, n b(i,j) = cmplx(drand(0), drand(1)) a(i,j) = (0.1d0,-.1d0)*a(i,j) + (.9d0,-.9d0)*b(i,j) enddo enddo #ifndef MIRROR if (me.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) #else if (iproc.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) #endif call ga_add((0.1d0,-.1d0), g_a, (0.9d0,-.9d0), g_b, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (MISMATCH(b(i,j), a(i,j)))then write(6,*) ' add ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' add is OK ' write(6,*) endif call ga_sync() c c Check the zdot function c if (me .eq. 0) then write(6,19) 19 format('> Checking zdot ...') call ffflush(6) endif crap = drand(12345) ! Everyone has same seed sum1 = (0.0d0,0.d0) do j = 1, n do i = 1, n b(i,j) = cmplx(drand(0), drand(1)) sum1 = sum1 + a(i,j)*b(i,j) enddo enddo #ifndef MIRROR if (me.eq.0) then #else if (iproc.eq.0) then #endif call ga_put(g_b, 1, n, 1, n, b, n) call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_sync() sum2 = ga_zdot(g_a,g_b) if (MISMATCH(sum1, sum2))then write(6,*) ' zdot wrong ', sum1, sum2 call ffflush(6) call ga_error('... exiting ',0) else if (me.eq.0) then write(6,*) write(6,*) ' zdot is OK ' write(6,*) endif c c Delete the global arrays c status = ga_destroy(g_b) status = ga_destroy(g_a) c end c----------------------------------------------------------------- subroutine check_int() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n parameter (n = 128) integer a(n,n), b(n,n) logical status integer g_a integer iran, i, j, loop, nloop, ilo, ihi, jlo, jhi, itmp integer nproc, me, int, ij, inc, dimi, dimj, ii, jj integer ndim, dims(2), chunk(2), p_mirror, nnodes integer lprocs, inode, iproc,lproc double precision nwords parameter (nloop = 100) integer maxproc parameter (maxproc = 4096) double precision crap, sum1, real integer buf #ifdef USE_RESTRICTED integer num_rstrctd integer rstrctd_list(maxproc/2) #endif #ifdef BLOCK_CYCLIC integer block_size(2), proc_grid(2) integer map(4,maxproc), block_list(maxproc), found, np,k integer blo(2),bhi(2) #else integer map(5,maxproc), found, np,k #endif intrinsic int iran(i) = int(drand(0)*real(i)) + 1 c nproc = ga_nnodes() me = ga_nodeid() inode = ga_cluster_nodeid() lprocs = ga_cluster_nprocs(inode) nnodes = ga_cluster_nnodes() iproc = mod(me,lprocs) #ifdef USE_RESTRICTED num_rstrctd = nproc/2 if (num_rstrctd.eq.0) num_rstrctd = 1 do i = 1, num_rstrctd rstrctd_list(i) = (num_rstrctd/2) + i-1 end do #endif #ifdef BLOCK_CYCLIC block_size(1) = 32 block_size(2) = 32 #ifdef USE_SCALAPACK_DISTR if (mod(nproc,2).ne.0) + call ga_error("Available procs must be divisible by 2",0) proc_grid(1) = 2 proc_grid(2) = nproc/2 #endif #endif c c a() is a local copy of what the global array should start as c do j = 1, n do i = 1, n #ifndef MIRROR a(i,j) = i-1 + (j-1)*1000 #else a(i,j) = inode + i-1 + (j-1)*1000 #endif enddo enddo c c Create a global array c ndim = 2 dims(1) = n dims(2) = n chunk(1) = 0 chunk(2) = 0 #ifdef NEW_API g_a = ga_create_handle() call ga_set_data(g_a,ndim,dims,MT_INT) call ga_set_array_name(g_a,'a') #ifdef USE_RESTRICTED call ga_set_restricted(g_a, rstrctd_list, num_rstrctd) #endif #ifdef BLOCK_CYCLIC #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_a,block_size,proc_grid) #else call ga_set_block_cyclic(g_a,block_size) #endif #endif # ifdef MIRROR p_mirror = ga_pgroup_get_mirror() call ga_set_pgroup(g_a,p_mirror) # endif if (.not.ga_allocate(g_a)) then #else # ifndef MIRROR if (.not. ga_create(MT_INT, n, n, 'a', 0, 0, g_a)) then # else p_mirror = ga_pgroup_get_mirror() if (.not. nga_create_config(MT_INT, ndim, dims, 'a', chunk, + p_mirror, g_a)) then # endif #endif write(6,*) ' ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c c Zero the array c if (me .eq. 0) then write(6,21) 21 format('> Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c c Check that it is indeed zero c call ga_get(g_a, 1, n, 1, n, b, n) do i = 1, n do j = 1, n if (b(i,j) .ne. 0) then write(6,*) ' zero ', me, i, j, b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_sync() c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format('> Checking disjoint put ... ') call ffflush(6) endif call ga_sync() c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) c write(6,4) me, ilo, ihi, jlo, jhi c4 format(' node ',i2,' checking put ',4i4) c call ffflush(6) call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) endif ij = ij + 1 enddo enddo call ga_sync() c c All nodes check all of a c #ifndef MIRROR if(me.eq.0)then #else if(iproc.eq.0)then #endif call ga_get(g_a, 1, n, 1, n, b, n) do i = 1, n do j = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' put ', me, i, j, a(i,j),b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo endif call ga_sync() c if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format('> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_sync() c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c call util_ifill(n*n, 0.0d0, b, 1) call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) c if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif c sum1 = 0.0d0 do j = jlo, jhi do i = ilo, ihi sum1 = sum1 + b(i,j) if (b(i,j) .ne. a(i,j)) then write(6,*) 'error ', i, j, b(i,j), a(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) endif c call ga_sync() if (me .eq. 0 .and. n.gt.7) then write(6,*) write(6,*) '> Checking ga_print_patch --- should see ' write(6,*)' [2002 3002 4002 5002 6002]' write(6,*)' [2003 3003 4003 5003 6003]' write(6,*)' [2004 3004 4004 5004 6004]' write(6,*) call ffflush(6) endif if(n.gt.5) call ga_print_patch(g_a,3,5,3,7,0) c call ga_sync() c call ga_sync() if (me .eq. 0) then write(6,*) write(6,*) '> Checking read_inc ... ' write(6,*) call ffflush(6) endif call ga_sync() c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc inc =5 c every processor will be operating on somebody elses data c #ifndef MIRROR lproc = nproc - me - 1 #else lproc = nnodes-iproc-1 lproc = inode*lprocs + lproc lproc = lprocs - me-ga_cluster_procid(inode,0) #endif c #ifndef MIRROR call ga_distribution(g_a,lproc,ilo,ihi,jlo,jhi) #else lproc = me - ga_cluster_procid(inode,0) call ga_distribution(g_a, lproc, ilo, ihi, jlo, jhi) #endif c dimi = ihi-ilo dimj = jhi-jlo c write(6,111) me,ilo,ihi,jlo,jhi,dimi,dimj 111 format(i2,'..',4i8,'.',2i8) call ga_sync() if(ilo .gt.0 .and. jhi .gt. 0)then do loop = 1,nloop ii= IABS(iran(dimi)) - 1 jj= IABS(iran(dimj)) - 1 i=ilo + Mod(ii,dimi) j=jlo + Mod(jj,dimj) c c write(6,*) me,'..',ilo,ihi,jlo,jhi,'.',dimi,dimj,'..',i,j c call ffflush(6) buf = ga_read_inc(g_a,i,j,inc) if(a(i,j).ne. buf)then write(6,114) me,ilo,ihi,jlo,jhi write(6,112) me,i,j,a(i,j),buf,loop c write(6,*)me,'READ_inc ', i,',',j,',', a(i,j),' ',buf,me call ffflush(6) endif 112 format(i3,' READ_inc ',i3,',',i3,',',i8,' ',i8,' loop ',i8) call ga_get(g_a, i,i,j,j, buf,1) a(i,j) = a(i,j)+inc if(a(i,j).ne. buf)then write(6,114) me,ilo,ihi,jlo,jhi write(6,113) me,i,j,a(i,j),buf,loop c write(6,*)me,'read_INC ', i,',',j,',', a(i,j),' ',buf,me call ffflush(6) endif 113 format(i3,' read_INC ',i3,',',i3,',',i8,' ',i8,' loop ',i8) 114 format(i3,' ilo ',i3,' ihi ',i3,' jlo ',i3,' jhi ',i3) enddo endif call ga_sync() c if (me.eq.0) then write(6,*) write(6,*) ' read_inc is OK' write(6,*) endif c c c #ifndef MIRROR if (me.eq.0) then write(6,*) write(6,*) '> checking ga_fence and ga_lock' write(6,*) call ffflush(6) endif c call ga_zero(g_a) c c*** use ga_read_inc and elements g_a(1:2,1) to implement a lock c*** compute g_a(:,n) = sum (1(:)) for P processors c status = ga_create_mutexes(1) if (.not. status) then call ga_error('ga_create_mutexes failed ',0) endif if(n.lt.2)call ga_error('insufficient n to test ga_fence',n) call ga_lock(0) c call my_lock(g_a) c get original values g_a(:,n) call ga_get(g_a, 1,n, n,n, b,n) c add my contribution do i =1,n b(i,1)= b(i,1)+1 enddo c c need to use fence to assure that coms complete before leaving c Critical Section c call ga_init_fence() call ga_put(g_a, 1,n, n,n, b,n) call ga_fence() call ga_unlock(0) c call my_unlock(g_a) c 333 if(.not.ga_destroy_mutexes()) $ call ga_error('mutex not destroyed',0) call ga_sync() if (me.eq.0) then call ga_get(g_a, 1,n, n,n, b,n) do i =1,n if(b(i,1).ne. nproc)then print *, 'mismatch',b(i,1),nproc call ga_error('fence failed',i) endif enddo write(6,*) write(6,*) ' ga_fence and ga_lock are OK' write(6,*) endif #endif c c if (me.eq.0) then write(6,*) write(6,*) '> checking ga_locate_region' write(6,*) call ffflush(6) endif #ifndef BLOCK_CYCLIC status = ga_locate_region(g_a, 1, n, 1, n, map, np) #else blo(1) = 1 bhi(1) = n blo(2) = 1 bhi(2) = n status = nga_locate_region(g_a, blo, bhi, map, block_list, np) #endif found = 0 do j=1,n do i=1,n b(i,j)=-1 enddo enddo #ifndef MIRROR if(me.eq.0)call ga_put(g_a,1,n,1,n,b,n) #else if(iproc.eq.0)call ga_put(g_a,1,n,1,n,b,n) #endif call ga_sync() do k = 1, np #ifndef MIRROR #ifndef BLOCK_CYCLIC if(map(5,k).eq.me)then #else if(mod(block_list(k),nproc).eq.me)then #endif #else if(map(5,k).eq.iproc)then #endif #ifndef BLOCK_CYCLIC if(found.eq.1) then write(6,*)'double entry in map for proc ',me call ffflush(6) endif do j= map(3,k), map(4,k) do i= map(1,k), map(2,k) #else do j= map(2,k), map(4,k) do i= map(1,k), map(3,k) #endif #ifndef MIRROR b(i,j)=1*me #else b(i,j)=1*iproc #endif enddo enddo #ifndef BLOCK_CYCLIC call ga_put(g_a, map(1,k),map(2,k),map(3,k),map(4,k), & b(map(1,k),map(3,k)),n) #else call ga_put(g_a, map(1,k),map(3,k),map(2,k),map(4,k), & b(map(1,k),map(2,k)),n) #endif found = 1 endif enddo call ga_sync() c do k = 1, np #ifndef MIRROR #ifndef BLOCK_CYCLIC if(map(5,k).eq.me)then #else if(mod(block_list(k),nproc).eq.me)then #endif #else if(map(5,k).eq.iproc)then #endif #ifndef BLOCK_CYCLIC call ga_get(g_a, map(1,k),map(2,k),map(3,k),map(4,k), & a(map(1,k),map(3,k)),n) do j= map(3,k), map(4,k) do i= map(1,k), map(2,k) #else call ga_get(g_a, map(1,k),map(3,k),map(2,k),map(4,k), & a(map(1,k),map(2,k)),n) do j= map(2,k), map(4,k) do i= map(1,k), map(3,k) #endif if(b(i,j).ne.a(i,j)) then write(6,*) & 'proc ',me, 'overlap with ',a(i,j) call ffflush(6) endif enddo enddo endif enddo call ga_sync() c #ifndef MIRROR if(me.eq.0)then #else if(iproc.eq.0)then #endif call ga_get(g_a,1,n,1,n,a,n) do j=1,n do i=1,n if(a(i,j).eq.-1)then write(6,*)'i=',i,' j=',j, ' not assigned ' call ga_error('... exiting ',0) endif enddo enddo endif if (me.eq.0) then write(6,*) write(6,*) ' ga_locate_region is OK' write(6,*) call ffflush(6) endif c c Delete the global array c status = ga_destroy(g_a) c end c--------------------------------------------------------------------- subroutine check_flt() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" integer n, m parameter (n =100) parameter (m=2*n) real a(n,n), b(n,n), v(m), w(m) integer iv(m), jv(m) logical status integer g_a, g_b integer iran, i, j, loop, nloop, maxloop, ilo, ihi, jlo, jhi, itmp integer nproc, me, int, ij, inc, ii, jj, nnodes double precision nwords parameter (maxloop = 100) integer maxproc integer ndim, dims(2), chunk(2), p_mirror parameter (maxproc = 4096) double precision crap real x, sum1, sum2 logical found integer lprocs, inode, iproc, lproc #ifdef USE_RESTRICTED integer num_rstrctd integer rstrctd_list(maxproc/2) #endif #ifdef BLOCK_CYCLIC integer block_size(2), proc_grid(2) #endif intrinsic int iran(i) = int(drand(0)*real(i)) + 1 nproc = ga_nnodes() me = ga_nodeid() inode = ga_cluster_nodeid() lprocs = ga_cluster_nprocs(inode) nnodes = ga_cluster_nnodes() iproc = mod(me,lprocs) nloop = Min(maxloop,n) #ifdef USE_RESTRICTED num_rstrctd = nproc/2 if (num_rstrctd.eq.0) num_rstrctd = 1 do i = 1, num_rstrctd rstrctd_list(i) = (num_rstrctd/2) + i-1 end do #endif #ifdef BLOCK_CYCLIC block_size(1) = 32 block_size(2) = 32 #ifdef USE_SCALAPACK_DISTR if (mod(nproc,2).ne.0) + call ga_error("Available procs must be divisible by 2",0) proc_grid(1) = 2 proc_grid(2) = nproc/2 #endif #endif c c a() is a local copy of what the global array should start as c do j = 1, n do i = 1, n #ifndef MIRROR a(i,j) = i-1 + (j-1)*n #else a(i,j) = inode + i-1 + (j-1)*n #endif b(i,j) = -1. enddo enddo c c Create a global array c ndim = 2 dims(1) = n dims(2) = n chunk(1) = 0 chunk(2) = 0 #ifdef NEW_API g_a = ga_create_handle() call ga_set_data(g_a,ndim,dims,MT_REAL) call ga_set_array_name(g_a,'a') #ifdef USE_RESTRICTED call ga_set_restricted(g_a, rstrctd_list, num_rstrctd) #endif #ifdef BLOCK_CYCLIC #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_a,block_size,proc_grid) #else call ga_set_block_cyclic(g_a,block_size) #endif #endif # ifdef MIRROR write(6,*) 'Getting p_mirror' p_mirror = ga_pgroup_get_mirror() write(6,*) 'Setting proc config' call ga_set_pgroup(g_a,p_mirror) # endif if (.not.ga_allocate(g_a)) then #else # ifndef MIRROR if (.not. ga_create(MT_REAL, n, n, 'a', 0, 0, g_a)) then # else cBJP p_mirror = ga_pgroup_get_mirror() if (.not. nga_create_config(MT_REAL, ndim, dims, 'a', chunk, + p_mirror, g_a)) then cBJP write(6,*) 'Created g_a' # endif #endif write(6,*) ' ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c c check if handle is valid. be quiet unless error C if(.not.ga_valid_handle(g_a)) call ga_error("invalid handle",g_a) c #ifndef MIRROR call ga_distribution(g_a,me,ilo, ihi, jlo, jhi) #else lproc = me - ga_cluster_procid(inode,0) call ga_distribution(g_a, lproc, ilo, ihi, jlo, jhi) #endif call ga_sync() c c Zero the array c if (me .eq. 0) then write(6,21) 21 format('> Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c c Check that it is indeed zero c call ga_get(g_a, 1, n, 1, n, b, n) call ga_sync() do i = 1, n do j = 1, n if (b(i,j) .ne. 0.0) then write(6,*) ' zero ', me, i, j, b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_sync() c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format('> Checking disjoint put ... ') call ffflush(6) endif call ga_sync() c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) c write(6,4) me, ilo, ihi, jlo, jhi c 4 format(' node ',i2,' checking put ',4i4) c call ffflush(6) call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) endif ij = ij + 1 enddo enddo call ga_sync() c c All nodes check all of a c call ga_get(g_a, 1, n, 1, n, b, n) do i = 1, n do j = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' put ', me, i, j, a(i,j),b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo call ga_sync() c if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format('> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_sync() c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c call util_rfill(n*n, 0.0, b, 1) call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) c if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif c sum1 = 0.0d0 do j = jlo, jhi do i = ilo, ihi sum1 = sum1 + b(i,j) if (b(i,j) .ne. a(i,j)) then write(6,*) 'error ', i, j, b(i,j), a(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) endif call ga_sync() c c Each node accumulates into disjoint sections of the array c if (me .eq. 0) then write(6,9) 9 format('> Checking accumulate ... ') call ffflush(6) endif call ga_sync() c crap = drand(12345) ! Same seed for each process do j = 1, n do i = 1, n c b(i,j) = real(drand(0)) b(i,j) = i+j enddo enddo c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc c x = real(drand(0)) x = 10. ilo = i ihi = min(i+inc-1, n) if(ihi.eq.n-1)ihi=n c ihi = min(i+inc, n) jlo = j jhi = min(j+inc-1, n) if(jhi.eq.n-1)jhi=n c jhi = min(j+inc-1, n) * call ffflush(6) #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif c print *, me, 'checking accumulate ',ilo,ihi,jlo,jhi,x * 11 format(' node ',i2,' checking accumulate ',4i4) * call ffflush(6) call ga_acc(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n, x) endif ij = ij + 1 c c Each process applies all updates to its local copy c do jj = jlo, jhi do ii = ilo, ihi a(ii,jj) = a(ii,jj) + x * b(ii,jj) enddo enddo enddo enddo call ga_sync() c c All nodes check all of a call ga_get(g_a, 1, n, 1, n, b, n) c do j = 1, n do i = 1, n if(MISMATCHF(b(i,j),a(i,j)))then write(6,*) ' acc ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' disjoint ga_acc is OK' write(6,*) endif c c overlapping accumulate call ga_sync() #ifndef MIRROR if (.not. ga_create(MT_REAL, n, n, 'b', 0, 0, g_b)) then #else if (.not. nga_create_config(MT_REAL, ndim, dims, 'b', chunk, + p_mirror, g_b)) then #endif call ga_error('ga_create failed for second array ',0) endif c call ga_zero(g_b) call ga_acc(g_b, n/2, n/2, n/2, n/2, 1.0, 1, 1.0) call ga_sync() if (me.eq.0) then call ga_get(g_b, n/2, n/2, n/2, n/2, b(1,1), 1) #ifndef MIRROR x = abs(b(1,1) -1*nproc) #else x = abs(b(1,1) -1*lprocs) #endif if(x.gt. 1e-10)then #ifndef MIRROR write(6,*)'val=',b(1,1),' expected=',nproc, x #else write(6,*)'val=',b(1,1),' expected=',lprocs, x #endif call ga_error('overlapping accumulate failed',0) endif write(6,*) write(6,*) ' overlapping ga_acc is OK' write(6,*) endif c c Check the ga_add function c if (me .eq. 0) then write(6,91) 91 format('> Checking add ...') call ffflush(6) endif c crap = drand(12345) ! Everyone has same seed do j = 1, n do i = 1, n b(i,j) = real(drand(0)*real(i)) + 1 a(i,j) = 0.1*a(i,j) + 0.9*b(i,j) enddo enddo #ifndef MIRROR if (me.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) #else if (iproc.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) #endif call ga_add(0.1, g_a, 0.9, g_b, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if(MISMATCHF(b(i,j), a(i,j)))then write(6,*) ' add ', me, i, j, a(i,j), b(i,j) call ffflush(6) CCC call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' add is OK ' write(6,*) endif call ga_sync() c c Check the sdot function c if (me .eq. 0) then write(6,19) 19 format('> Checking sdot ...') call ffflush(6) endif crap = drand(12345) ! Everyone has same seed sum1 = 0.0 do j = 1, n do i = 1, n b(i,j) = drand(0) sum1 = sum1 + a(i,j)*b(i,j) enddo enddo #ifndef MIRROR if (me.eq.0) then #else if (iproc.eq.0) then #endif call ga_put(g_b, 1, n, 1, n, b, n) call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_sync() sum2 = ga_sdot(g_a,g_b) if(MISMATCHF(sum1, sum2))then write(6,*) ' fdot wrong ', sum1, sum2 call ffflush(6) call ga_error('... exiting ',0) else if (me.eq.0) then write(6,*) write(6,*) ' sdot is OK ' write(6,*) endif c c Check the ga_scale function c if (me .eq. 0) then write(6,92) 92 format('> Checking scale ...') call ffflush(6) endif call ga_scale(g_a, 0.123) call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n a(i,j) = a(i,j)*0.123 if (MISMATCHF(b(i,j), a(i,j)))then write(6,*) ' dscal ', me, i, j, a(i,j), b(i,j) call ffflush(6) CCC call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' scale is OK ' write(6,*) endif c c Check the ga_copy function c if (me .eq. 0) then write(6,*) write(6,*)'> Checking copy' write(6,*) call ffflush(6) endif if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) call ga_copy(g_a, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' copy ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy is OK ' write(6,*) endif c call ga_sync() if (me .eq. 0) then write(6,*) '> Checking scatter/gather (might be slow)... ' call ffflush(6) endif call ga_sync() c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do j = 1, 10 call ga_sync() #ifndef MIRROR itmp = iran(nproc)-1 if(me.eq.itmp) then #else itmp = iran(lprocs)-1 if(iproc.eq.itmp) then #endif do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo enddo call ga_gather(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,v(loop),1) if(v(loop) .ne. a(ilo,jlo))then write(6,*)me,' gather ', ilo,',',jlo,',', a(ilo,jlo) & ,' ',v(loop) call ffflush(6) call ga_error('... exiting ',0) endif enddo endif enddo c if (me.eq.0) then write(6,*) write(6,*) ' gather is OK' write(6,*) call ffflush(6) endif c do j = 1,10 call ga_sync() #ifndef MIRROR if(me.eq.iran(ga_nnodes())-1) then #else if(iproc.eq.iran(lprocs)-1) then #endif do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo c v(loop) = DSIN(a(ilo,jlo)+b(ilo,jlo)) v(loop) = 1.0 *(ilo+jlo) enddo call ga_scatter(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,w(loop),1) c if(v(loop) .ne. w(loop))then if(w(loop) .ne. 1.0 *(ilo+jlo) )then write(6,*)me,' scatter ', ilo,',',jlo,',',w(loop) & ,' ', 1.0 *(ilo+jlo) call ffflush(6) call ga_error('... exiting ',0) endif enddo endif call ga_sync() enddo c if (me.eq.0) then write(6,*) write(6,*) ' scatter is OK' write(6,*) endif c call ga_sync() c c scatter-acc available in GA ver. 3.0 #ifdef GA3 if (me.eq.0) then write(6,*) write(6,*) ' checking scatter-accumulate' write(6,*) endif c crap = drand(1234) call ga_zero(g_a) c do j = 1, n do i = 1, n b(i,j) =0. enddo enddo c x = .1d0 ii =n do jj = 1,1 call ga_sync() do loop = 1, ii c generate unique i,j pairs 10 continue i = iran(n) j=iran(n) if (found(i,j, iv, jv, loop-1) ) goto 10 iv(loop) = i jv(loop) = j v(loop) = 1.0 *(i+j) #ifndef MIRROR b(i,j) = b(i,j) + nproc*x*v(loop) ! update local ref. array #else b(i,j) = b(i,j) + lprocs*x*v(loop) ! update local ref. array #endif enddo call ga_scatter_acc(g_a,v,iv,jv, ii,x) c call ga_sync() c c check the result c call ga_get(g_a, 1, n, 1,n, a, n) do loop = 1,ii i = iv(loop) j = jv(loop) if(MISMATCHF(a(i,j),b(i,j)))then print *,'Error',i,j,loop,a(i,j),'expected=',b(i,j) * if(me.eq.0)then * do ii=1,loop * print *,'element',ii, iv(ii),jv(ii) * enddo * endif call ga_error('scatter-acc error in trial ',jj) endif enddo call ga_sync() enddo call ga_sync() if (me.eq.0) then write(6,*) write(6,*) ' scatter-accumulate is OK' write(6,*) endif #endif c c Delete the global array c status = ga_destroy(g_a) c end c_____________________________________________________________ subroutine check_wrappers implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" integer n parameter (n=10000) double precision sum(n) double complex zsum(n), check(n) integer isum(n), ibuf(2) integer me, nproc, i real fsum(n) c nproc = ga_nnodes() me = ga_nodeid() c call ga_sync() if (me .eq. 0) then write(6,*) write(6,*)'> Checking ga_gop (integer)' write(6,*) call ffflush(6) endif do i = 1, n isum(i) = i + me enddo call ga_gop(MT_INT, isum, n, '+') do i = 1, n if(isum(i).ne.(i*nproc + (nproc-1)*nproc/2))then call ga_error('ga_gop error -2',isum(i)) endif enddo call ga_sync() if (me.eq.0) then write(6,*) write(6,*) ' ga_gop (integer) is OK' write(6,*) endif call ga_sync() c call ga_sync() if (me .eq. 0) then write(6,*) write(6,*)'> Checking ga_gop (double)' write(6,*) call ffflush(6) endif do i = 1, n sum(i) = i + 1d0 * me enddo call ga_gop(MT_DBL, sum, n, '+') do i = 1, n if(Int(sum(i)).ne.(i*nproc + (nproc-1)*nproc/2))then call ga_error('ga_gop error',Int(sum(i))) endif enddo call ga_sync() if (me.eq.0) then write(6,*) write(6,*) ' ga_gop (double) is OK' write(6,*) endif c call ga_sync() if (me .eq. 0) then write(6,*) write(6,*)'> Checking ga_gop (real)' write(6,*) call ffflush(6) endif do i = 1, n fsum(i) = i + 1.0 * me enddo call ga_gop(MT_REAL, fsum, n, '+') do i = 1, n if(Int(fsum(i)).ne.(i*nproc + (nproc-1)*nproc/2))then call ga_error('ga_gop error',Int(fsum(i))) endif enddo call ga_sync() if (me.eq.0) then write(6,*) write(6,*) ' ga_gop (real) is OK' write(6,*) endif c call ga_sync() if (me .eq. 0) then write(6,*) write(6,*)'> Checking ga_gop (double complex)' write(6,*) call ffflush(6) endif do i = 1, n zsum(i) = cmplx(i+1d0, i + 1d0 * me) check(i)= cmplx(nproc*i+nproc*1d0, nproc*i+(nproc-1)*nproc/2) enddo call ga_gop(MT_DCPL, zsum, n, '+') do i = 1, n if(zsum(i).ne.check(i)) then call ga_error('ga_gop error', 1) endif enddo call ga_sync() if (me.eq.0) then write(6,*) write(6,*) ' ga_gop (double complex) is OK' write(6,*) endif c call ga_sync() if (me .eq. 0) then write(6,*) write(6,*)'> Checking ga_brdcst' write(6,*) call ffflush(6) endif if(me.eq.nproc-1)then ibuf(1) = me ibuf(2) = nproc endif call ga_brdcst(1000,ibuf,util_mitob(2),nproc-1) if(ibuf(1).ne.nproc-1)call ga_error('ibuf(1) error',ibuf(1)) if(ibuf(2).ne.nproc)call ga_error('ibuf(2) error',ibuf(2)) call ga_sync() if (me .eq. 0) then write(6,*) write(6,*)'> ga_brdcst is OK ' write(6,*) call ffflush(6) endif call ga_sync() end subroutine check_mem(mem_size) implicit none integer mem_size #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n,nmax,left,need, me,procs,g_a, g_b logical status c if(.not. ga_memory_limited())return me = ga_nodeid() procs = ga_nnodes() nmax = int(dsqrt(dble(mem_size/util_mitob(1)))) left = mem_size/procs - ga_inquire_memory() n = nmax/2 need = util_mdtob(n*n)/procs c if(me.eq.0)then write(6,*)' ' if(ga_uses_ma())then write(6,*)' CHECKING GA MEMORY RESTRICTIONS (MA used)' else write(6,*)' CHECKING GA MEMORY RESTRICTIONS (MA not used)' endif write(6,*)' ' write(6,*)' ' call print_mem_info(n,left, need, mem_size/procs) endif c status = ga_create(MT_DBL, n, n, 'a', 0, 0, g_a) c if(me.eq.0) then if(status) then write(6,*) ' success' else write(6,*) ' failure' endif call ffflush(6) endif c n = nmax left = mem_size/procs - ga_inquire_memory() need = util_mdtob(n*n)/procs if(me.eq.0)then call print_mem_info(n,left, need, mem_size/procs) endif c status = ga_create(MT_DBL, n, n, 'b', 0, 0, g_b) c if(me.eq.0) then if(status) then write(6,*) ' success' else write(6,*) ' failure' endif write(6,*)' ' write(6,*)' ' call ffflush(6) endif status = ga_destroy(g_a) end subroutine print_mem_info(n,left, need, total) implicit none integer n,left, need, total c write(6,*)' ' if(left - need .ge. 0) then write(6,1)n,n 1 format('> Creating array ',i4,' by ',i4,' -- should succeed') else write(6,2)n,n 2 format('> Creating array ',i4,' by ',i4,' -- SHOULD FAIL') endif write(6,3) need, left, total 3 format(' (need ',i7,' and ',i7,' out of ',i7,' bytes are left)') write(6,*)' ' call ffflush(6) c end subroutine my_lock(g_b) implicit none #include "global.fh" integer g_b, val, flag, i logical first_time double precision dummy common /lock/ val common /dum/ dummy data first_time /.true./ c c this awkward initialization is to avoid a weird problem C with block data on SUN if(first_time)then first_time = .false. dummy = .0 endif c val = ga_read_inc(g_b,1,1, 1) 10 call ga_get(g_b, 2,2,1,1, flag, 1) if(flag.eq.val) return c c to reduce memory stress, wait a while before retrying do i = 1, 100 dummy = dummy + .1 enddo goto 10 end subroutine my_unlock(g_b) implicit none #include "global.fh" integer g_b, val common /lock/ val c call ga_put(g_b, 2,2,1,1, val+1, 1) end logical function found(i,j, iv, jv, n) integer n integer i,j, iv(n), jv(n) integer loop found = .false. do loop = 1, n if(i .eq. iv(loop) .and. j .eq.jv(loop))then found = .true. goto 99 endif enddo 99 continue return end subroutine proc_remap() implicit none #include "global.fh" integer proc(100),nproc,i nproc = ga_nnodes() if(nproc.gt.100) $ call ga_error("remap requires<=100 processes",nproc) do i = 1, nproc proc(i) = nproc-i enddo c call ga_register_proclist(proc,nproc) end subroutine util_rfill(n,val,a,ia) implicit none real a(*), val integer n, ia, i c c initialise real array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end subroutine util_dfill(n,val,a,ia) implicit none double precision a(*), val integer n, ia, i c c initialise double precision array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end subroutine util_ifill(n,val,a,ia) implicit none integer n, ia, i, a(*),val c c initialise integer array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end subroutine util_qfill(n,val,a,ia) implicit none double complex a(*), val integer n, ia, i c c initialise double complex array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end ga-5-3/global/testing/perform.results0000640005473000001440000004723611300316052016611 0ustar d3n000users Performance of GA Communication Primitives ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Jarek Nieplocha Uniform block distribution of matrix 710x710. Accumulate operation is atomic. Program run on 4 processors. Process 0 holds block [1:355, 1:355], process 3 holds block [356:710, 356:710]. Process 0 first accesses local data and then remote data. To reduce data caching, each time a different section of the matrix is accessed. ................................................................................ machine: Cray T3D name: h4p.nersc.gov options: -O1 -h inline3, readahead on, -DFLUSHCACHE note: lack of cache coherency degrades latency of "local" get date: Thu Dec 28 13:49:40 PST 1995 ACCESS [ 1: 355, 1: 355] bytes loop get put accumulate 8 841 0.336E-04 0.24E+00MB/s 0.154E-04 0.52E+00MB/s 0.451E-04 0.18E+00MB/s 72 1936 0.365E-04 0.20E+01MB/s 0.174E-04 0.41E+01MB/s 0.473E-04 0.15E+01MB/s 128 2500 0.379E-04 0.34E+01MB/s 0.183E-04 0.70E+01MB/s 0.492E-04 0.26E+01MB/s 648 1024 0.471E-04 0.14E+02MB/s 0.253E-04 0.26E+02MB/s 0.638E-04 0.10E+02MB/s 2048 361 0.679E-04 0.30E+02MB/s 0.367E-04 0.56E+02MB/s 0.104E-03 0.20E+02MB/s 7200 121 0.128E-03 0.56E+02MB/s 0.771E-04 0.93E+02MB/s 0.244E-03 0.29E+02MB/s 32768 25 0.386E-03 0.85E+02MB/s 0.355E-03 0.92E+02MB/s 0.513E-03 0.64E+02MB/s 66248 9 0.717E-03 0.92E+02MB/s 0.681E-03 0.97E+02MB/s 0.874E-03 0.76E+02MB/s 131072 4 0.132E-02 0.10E+03MB/s 0.127E-02 0.10E+03MB/s 0.161E-02 0.82E+02MB/s 233928 4 0.225E-02 0.10E+03MB/s 0.220E-02 0.11E+03MB/s 0.258E-02 0.91E+02MB/s 524288 1 0.392E-02 0.13E+03MB/s 0.396E-02 0.13E+03MB/s 0.557E-02 0.94E+02MB/s 996872 1 0.695E-02 0.14E+03MB/s 0.695E-02 0.14E+03MB/s 0.101E-01 0.98E+02MB/s ACCESS [356: 710,356: 710] bytes loop get put accumulate 8 841 0.216E-04 0.37E+00MB/s 0.157E-04 0.51E+00MB/s 0.367E-04 0.22E+00MB/s 72 1936 0.280E-04 0.26E+01MB/s 0.180E-04 0.40E+01MB/s 0.466E-04 0.15E+01MB/s 128 2500 0.308E-04 0.42E+01MB/s 0.192E-04 0.67E+01MB/s 0.520E-04 0.25E+01MB/s 648 1024 0.591E-04 0.11E+02MB/s 0.278E-04 0.23E+02MB/s 0.954E-04 0.68E+01MB/s 2048 361 0.117E-03 0.17E+02MB/s 0.463E-04 0.44E+02MB/s 0.193E-03 0.11E+02MB/s 7200 121 0.315E-03 0.23E+02MB/s 0.108E-03 0.67E+02MB/s 0.533E-03 0.14E+02MB/s 32768 25 0.119E-02 0.28E+02MB/s 0.362E-03 0.90E+02MB/s 0.189E-02 0.17E+02MB/s 66248 9 0.231E-02 0.29E+02MB/s 0.671E-03 0.99E+02MB/s 0.359E-02 0.18E+02MB/s 131072 4 0.425E-02 0.31E+02MB/s 0.125E-02 0.11E+03MB/s 0.732E-02 0.18E+02MB/s 233928 4 0.733E-02 0.32E+02MB/s 0.211E-02 0.11E+03MB/s 0.122E-01 0.19E+02MB/s 524288 1 0.161E-01 0.32E+02MB/s 0.461E-02 0.11E+03MB/s 0.263E-01 0.20E+02MB/s 996872 1 0.296E-01 0.34E+02MB/s 0.843E-02 0.12E+03MB/s 0.485E-01 0.21E+02MB/s machine: Cray T3D name: h4p.nersc.gov options: -O3 -h inline3, readahead on, implicit (automatic) cache invalidation note: lack of cache coherency degrades latency of "local" get date: Mon Mar 25 10:32:42 PST 1996 ACCESS [ 1: 355, 1: 355] bytes loop get put accumulate 8 841 0.223E-04 0.35E+00MB/s 0.170E-04 0.47E+00MB/s 0.270E-04 0.30E+00MB/s 72 1936 0.255E-04 0.28E+01MB/s 0.189E-04 0.38E+01MB/s 0.289E-04 0.25E+01MB/s 128 2500 0.269E-04 0.48E+01MB/s 0.197E-04 0.65E+01MB/s 0.301E-04 0.43E+01MB/s 648 1024 0.361E-04 0.18E+02MB/s 0.261E-04 0.25E+02MB/s 0.426E-04 0.15E+02MB/s 2048 361 0.579E-04 0.35E+02MB/s 0.360E-04 0.57E+02MB/s 0.754E-04 0.27E+02MB/s 7200 121 0.121E-03 0.59E+02MB/s 0.759E-04 0.95E+02MB/s 0.226E-03 0.32E+02MB/s 32768 25 0.371E-03 0.88E+02MB/s 0.347E-03 0.95E+02MB/s 0.573E-03 0.57E+02MB/s 66248 9 0.695E-03 0.95E+02MB/s 0.668E-03 0.99E+02MB/s 0.969E-03 0.68E+02MB/s 131072 4 0.129E-02 0.10E+03MB/s 0.125E-02 0.10E+03MB/s 0.175E-02 0.75E+02MB/s 233928 4 0.220E-02 0.11E+03MB/s 0.216E-02 0.11E+03MB/s 0.277E-02 0.84E+02MB/s 524288 1 0.384E-02 0.14E+03MB/s 0.382E-02 0.14E+03MB/s 0.591E-02 0.89E+02MB/s 996872 1 0.687E-02 0.15E+03MB/s 0.680E-02 0.15E+03MB/s 0.106E-01 0.94E+02MB/s ACCESS [356: 710,356: 710] bytes loop get put accumulate 8 841 0.244E-04 0.33E+00MB/s 0.187E-04 0.43E+00MB/s 0.347E-04 0.23E+00MB/s 72 1936 0.304E-04 0.24E+01MB/s 0.210E-04 0.34E+01MB/s 0.471E-04 0.15E+01MB/s 128 2500 0.333E-04 0.38E+01MB/s 0.221E-04 0.58E+01MB/s 0.542E-04 0.24E+01MB/s 648 1024 0.611E-04 0.11E+02MB/s 0.317E-04 0.20E+02MB/s 0.106E-03 0.61E+01MB/s 2048 361 0.120E-03 0.17E+02MB/s 0.494E-04 0.41E+02MB/s 0.213E-03 0.96E+01MB/s 7200 121 0.321E-03 0.22E+02MB/s 0.111E-03 0.65E+02MB/s 0.579E-03 0.12E+02MB/s 32768 25 0.121E-02 0.27E+02MB/s 0.364E-03 0.90E+02MB/s 0.229E-02 0.14E+02MB/s 66248 9 0.235E-02 0.28E+02MB/s 0.671E-03 0.99E+02MB/s 0.403E-02 0.16E+02MB/s 131072 4 0.443E-02 0.30E+02MB/s 0.125E-02 0.11E+03MB/s 0.847E-02 0.15E+02MB/s 233928 4 0.758E-02 0.31E+02MB/s 0.210E-02 0.11E+03MB/s 0.134E-01 0.17E+02MB/s 524288 1 0.166E-01 0.32E+02MB/s 0.451E-02 0.12E+03MB/s 0.297E-01 0.18E+02MB/s 996872 1 0.303E-01 0.33E+02MB/s 0.838E-02 0.12E+03MB/s 0.509E-01 0.20E+02MB/s ................................................................................ machine: KSR-2 name: circus.pnl.gov options: -O1 -qdiv date: Mon Jan 23 09:22:48 PST 1995 ACCESS [ 1 : 355 , 1 : 355 ] bytes loop get put accumulate 8 841 0.357D-04 0.22D+00MB/s 0.350D-04 0.23D+00MB/s 0.379D-04 0.21D+00MB/s 72 1936 0.415D-04 0.17D+01MB/s 0.419D-04 0.17D+01MB/s 0.444D-04 0.16D+01MB/s 128 2500 0.454D-04 0.28D+01MB/s 0.463D-04 0.28D+01MB/s 0.493D-04 0.26D+01MB/s 648 1024 0.714D-04 0.91D+01MB/s 0.753D-04 0.86D+01MB/s 0.813D-04 0.80D+01MB/s 2048 361 0.119D-03 0.17D+02MB/s 0.129D-03 0.16D+02MB/s 0.147D-03 0.14D+02MB/s 7200 121 0.311D-03 0.23D+02MB/s 0.331D-03 0.22D+02MB/s 0.377D-03 0.19D+02MB/s 32768 25 0.109D-02 0.30D+02MB/s 0.113D-02 0.29D+02MB/s 0.128D-02 0.26D+02MB/s 66248 9 0.234D-02 0.28D+02MB/s 0.229D-02 0.29D+02MB/s 0.260D-02 0.26D+02MB/s 131072 4 0.446D-02 0.29D+02MB/s 0.444D-02 0.29D+02MB/s 0.495D-02 0.26D+02MB/s 233928 4 0.774D-02 0.30D+02MB/s 0.769D-02 0.30D+02MB/s 0.873D-02 0.27D+02MB/s 524288 1 0.171D-01 0.31D+02MB/s 0.171D-01 0.31D+02MB/s 0.191D-01 0.27D+02MB/s 996872 1 0.308D-01 0.32D+02MB/s 0.307D-01 0.32D+02MB/s 0.348D-01 0.29D+02MB/s ACCESS [ 356 : 710 , 356 : 710 ] bytes loop get put accumulate 8 841 0.373D-04 0.21D+00MB/s 0.364D-04 0.22D+00MB/s 0.448D-04 0.18D+00MB/s 72 1936 0.427D-04 0.17D+01MB/s 0.430D-04 0.17D+01MB/s 0.537D-04 0.13D+01MB/s 128 2500 0.469D-04 0.27D+01MB/s 0.479D-04 0.27D+01MB/s 0.604D-04 0.21D+01MB/s 648 1024 0.751D-04 0.86D+01MB/s 0.801D-04 0.81D+01MB/s 0.118D-03 0.55D+01MB/s 2048 361 0.135D-03 0.15D+02MB/s 0.144D-03 0.14D+02MB/s 0.160D-03 0.13D+02MB/s 7200 121 0.365D-03 0.20D+02MB/s 0.376D-03 0.19D+02MB/s 0.410D-03 0.18D+02MB/s 32768 25 0.133D-02 0.25D+02MB/s 0.137D-02 0.24D+02MB/s 0.148D-02 0.22D+02MB/s 66248 9 0.276D-02 0.24D+02MB/s 0.276D-02 0.24D+02MB/s 0.307D-02 0.22D+02MB/s 131072 4 0.543D-02 0.24D+02MB/s 0.541D-02 0.24D+02MB/s 0.588D-02 0.22D+02MB/s 233928 4 0.928D-02 0.25D+02MB/s 0.917D-02 0.26D+02MB/s 0.101D-01 0.23D+02MB/s 524288 1 0.209D-01 0.25D+02MB/s 0.210D-01 0.25D+02MB/s 0.227D-01 0.23D+02MB/s 996872 1 0.353D-01 0.28D+02MB/s 0.347D-01 0.29D+02MB/s 0.387D-01 0.26D+02MB/s ................................................................................ machine: Intel Paragon name: trex.caltech.edu options: -O2 -Msafeptr -Knoieee -Mquad -Mreentrant; run with -plk note:122K message buffer; masktrap responsible for latency of "local" accumulate date: Fri Dec 29 11:28:54 PST 1995 ACCESS [ 1: 355, 1: 355] bytes loop get put accumulate 8 841 0.707D-04 0.11D+00MB/s 0.297D-04 0.27D+00MB/s 0.167D-03 0.48D-01MB/s 72 1936 0.352D-04 0.20D+01MB/s 0.324D-04 0.22D+01MB/s 0.178D-03 0.41D+00MB/s 128 2500 0.379D-04 0.34D+01MB/s 0.341D-04 0.38D+01MB/s 0.183D-03 0.70D+00MB/s 648 1024 0.588D-04 0.11D+02MB/s 0.450D-04 0.14D+02MB/s 0.221D-03 0.29D+01MB/s 2048 361 0.108D-03 0.19D+02MB/s 0.695D-04 0.29D+02MB/s 0.306D-03 0.67D+01MB/s 7200 121 0.277D-03 0.26D+02MB/s 0.151D-03 0.48D+02MB/s 0.468D-03 0.15D+02MB/s 32768 25 0.550D-03 0.60D+02MB/s 0.550D-03 0.60D+02MB/s 0.109D-02 0.30D+02MB/s 66248 9 0.972D-03 0.68D+02MB/s 0.980D-03 0.68D+02MB/s 0.190D-02 0.35D+02MB/s 131072 4 0.170D-02 0.77D+02MB/s 0.174D-02 0.75D+02MB/s 0.321D-02 0.41D+02MB/s 233928 4 0.279D-02 0.84D+02MB/s 0.282D-02 0.83D+02MB/s 0.540D-02 0.43D+02MB/s 524288 1 0.601D-02 0.87D+02MB/s 0.618D-02 0.85D+02MB/s 0.113D-01 0.47D+02MB/s 996872 1 0.109D-01 0.92D+02MB/s 0.108D-01 0.93D+02MB/s 0.216D-01 0.46D+02MB/s ACCESS [356: 710,356: 710] bytes loop get put accumulate 8 841 0.487D-03 0.16D-01MB/s 0.629D-04 0.13D+00MB/s 0.646D-04 0.12D+00MB/s 72 1936 0.507D-03 0.14D+00MB/s 0.656D-04 0.11D+01MB/s 0.688D-04 0.10D+01MB/s 128 2500 0.524D-03 0.24D+00MB/s 0.678D-04 0.19D+01MB/s 0.702D-04 0.18D+01MB/s 648 1024 0.560D-03 0.12D+01MB/s 0.859D-04 0.75D+01MB/s 0.893D-04 0.73D+01MB/s 2048 361 0.726D-03 0.28D+01MB/s 0.162D-03 0.13D+02MB/s 0.161D-03 0.13D+02MB/s 7200 121 0.132D-02 0.55D+01MB/s 0.376D-03 0.19D+02MB/s 0.353D-03 0.20D+02MB/s 32768 25 0.270D-02 0.12D+02MB/s 0.130D-02 0.25D+02MB/s 0.117D-02 0.28D+02MB/s 66248 9 0.499D-02 0.13D+02MB/s 0.250D-02 0.27D+02MB/s 0.211D-02 0.31D+02MB/s 131072 4 0.905D-02 0.14D+02MB/s 0.477D-02 0.27D+02MB/s 0.402D-02 0.33D+02MB/s 233928 4 0.142D-01 0.17D+02MB/s 0.811D-02 0.29D+02MB/s 0.665D-02 0.35D+02MB/s 524288 1 0.323D-01 0.16D+02MB/s 0.181D-01 0.29D+02MB/s 0.147D-01 0.36D+02MB/s 996872 1 0.599D-01 0.17D+02MB/s 0.337D-01 0.30D+02MB/s 0.279D-01 0.36D+02MB/s ................................................................................ machine: IBM SP2 (MPL) name: et{0201,0301,0401,0601}nwmpp1.emsl.pnl.gov options: -O (cc) -O2 (f77) note:122K message buffer; AIX4, TARGET=SP date: Wed Oct 9 12:12:39 PDT 1996 ACCESS [ 1: 355, 1: 355] bytes loop get put accumulate 8 841 .972D-05 .82D+00MB/s .928D-05 .86D+00MB/s .134D-04 .60D+00MB/s 72 1936 .103D-04 .70D+01MB/s .103D-04 .70D+01MB/s .146D-04 .49D+01MB/s 128 2500 .104D-04 .12D+02MB/s .110D-04 .12D+02MB/s .153D-04 .84D+01MB/s 648 1024 .143D-04 .45D+02MB/s .157D-04 .41D+02MB/s .199D-04 .33D+02MB/s 2048 361 .249D-04 .82D+02MB/s .315D-04 .65D+02MB/s .346D-04 .59D+02MB/s 7200 121 .628D-04 .11D+03MB/s .764D-04 .94D+02MB/s .822D-04 .88D+02MB/s 32768 25 .318D-03 .10D+03MB/s .380D-03 .86D+02MB/s .406D-03 .81D+02MB/s 66248 9 .876D-03 .76D+02MB/s .867D-03 .76D+02MB/s .909D-03 .73D+02MB/s 131072 4 .165D-02 .80D+02MB/s .167D-02 .78D+02MB/s .171D-02 .77D+02MB/s 233928 4 .293D-02 .80D+02MB/s .302D-02 .77D+02MB/s .298D-02 .79D+02MB/s 524288 1 .665D-02 .79D+02MB/s .658D-02 .80D+02MB/s .667D-02 .79D+02MB/s 996872 1 .120D-01 .83D+02MB/s .121D-01 .82D+02MB/s .123D-01 .81D+02MB/s ACCESS [356: 710,356: 710] bytes loop get put accumulate 8 841 .256D-03 .31D-01MB/s .981D-04 .82D-01MB/s .904D-04 .88D-01MB/s 72 1936 .253D-03 .28D+00MB/s .115D-03 .63D+00MB/s .943D-04 .76D+00MB/s 128 2500 .255D-03 .50D+00MB/s .105D-03 .12D+01MB/s .947D-04 .14D+01MB/s 648 1024 .299D-03 .22D+01MB/s .139D-03 .47D+01MB/s .121D-03 .53D+01MB/s 2048 361 .394D-03 .52D+01MB/s .181D-03 .11D+02MB/s .192D-03 .11D+02MB/s 7200 121 .679D-03 .11D+02MB/s .392D-03 .18D+02MB/s .366D-03 .20D+02MB/s 32768 25 .251D-02 .13D+02MB/s .191D-02 .17D+02MB/s .192D-02 .17D+02MB/s 66248 9 .448D-02 .15D+02MB/s .333D-02 .20D+02MB/s .347D-02 .19D+02MB/s 131072 4 .791D-02 .17D+02MB/s .619D-02 .21D+02MB/s .635D-02 .21D+02MB/s 233928 4 .134D-01 .17D+02MB/s .105D-01 .22D+02MB/s .103D-01 .23D+02MB/s 524288 1 .330D-01 .16D+02MB/s .241D-01 .22D+02MB/s .241D-01 .22D+02MB/s 996872 1 .580D-01 .17D+02MB/s .466D-01 .21D+02MB/s .436D-01 .23D+02MB/s ................................................................................ machine: IBM SP1 (MPL) name: spnode{022,024,025,026}mcs.anl.gov options: -O (cc) -O2 (f77) note:122K message buffer; latency of rcvncall in MPL is much higher than in EUIH date: Fri Dec 29 15:36:19 CST 199 ACCESS [ 1: 355, 1: 355] bytes loop get put accumulate 8 841 .132D-04 .61D+00MB/s .132D-04 .61D+00MB/s .183D-04 .44D+00MB/s 72 1936 .148D-04 .49D+01MB/s .145D-04 .50D+01MB/s .196D-04 .37D+01MB/s 128 2500 .156D-04 .82D+01MB/s .157D-04 .82D+01MB/s .214D-04 .60D+01MB/s 648 1024 .252D-04 .26D+02MB/s .240D-04 .27D+02MB/s .303D-04 .21D+02MB/s 2048 361 .446D-04 .46D+02MB/s .403D-04 .51D+02MB/s .491D-04 .42D+02MB/s 7200 121 .884D-04 .81D+02MB/s .912D-04 .79D+02MB/s .108D-03 .67D+02MB/s 32768 25 .464D-03 .71D+02MB/s .472D-03 .69D+02MB/s .521D-03 .63D+02MB/s 66248 9 .869D-03 .76D+02MB/s .911D-03 .73D+02MB/s .102D-02 .65D+02MB/s 131072 4 .170D-02 .77D+02MB/s .171D-02 .77D+02MB/s .194D-02 .68D+02MB/s 233928 4 .290D-02 .81D+02MB/s .299D-02 .78D+02MB/s .330D-02 .71D+02MB/s 524288 1 .637D-02 .82D+02MB/s .643D-02 .82D+02MB/s .728D-02 .72D+02MB/s 996872 1 .116D-01 .86D+02MB/s .116D-01 .86D+02MB/s .136D-01 .73D+02MB/s ACCESS [356: 710,356: 710] bytes loop get put accumulate 8 841 .517D-03 .15D-01MB/s .752D-04 .11D+00MB/s .771D-04 .10D+00MB/s 72 1936 .549D-03 .13D+00MB/s .978D-04 .74D+00MB/s .949D-04 .76D+00MB/s 128 2500 .570D-03 .22D+00MB/s .973D-04 .13D+01MB/s .994D-04 .13D+01MB/s 648 1024 .625D-03 .10D+01MB/s .145D-03 .45D+01MB/s .147D-03 .44D+01MB/s 2048 361 .699D-03 .29D+01MB/s .277D-03 .74D+01MB/s .284D-03 .72D+01MB/s 7200 121 .113D-02 .64D+01MB/s .655D-03 .11D+02MB/s .651D-03 .11D+02MB/s 32768 25 .332D-02 .99D+01MB/s .255D-02 .13D+02MB/s .253D-02 .13D+02MB/s 66248 9 .531D-02 .12D+02MB/s .449D-02 .15D+02MB/s .444D-02 .15D+02MB/s 131072 4 .103D-01 .13D+02MB/s .810D-02 .16D+02MB/s .810D-02 .16D+02MB/s 233928 4 .166D-01 .14D+02MB/s .134D-01 .17D+02MB/s .142D-01 .16D+02MB/s 524288 1 .370D-01 .14D+02MB/s .298D-01 .18D+02MB/s .300D-01 .17D+02MB/s 996872 1 .703D-01 .14D+02MB/s .602D-01 .17D+02MB/s .576D-01 .17D+02MB/s ................................................................................ machine: 4-processor 75MHz SGI Power Challenge name: coho.pnl.gov options: -O3 (f77) -O (cc) note: SGI uslocks instead of semaphores used for locking date: Tue Oct 10 15:47:51 PDT 1995 ACCESS [ 1: 355, 1: 355] bytes loop get put accumulate 8 841 0.106D-04 0.76D+00MB/s 0.930D-05 0.86D+00MB/s 0.115D-04 0.70D+00MB/s 72 1936 0.120D-04 0.60D+01MB/s 0.107D-04 0.67D+01MB/s 0.124D-04 0.58D+01MB/s 128 2500 0.136D-04 0.94D+01MB/s 0.121D-04 0.11D+02MB/s 0.129D-04 0.99D+01MB/s 648 1024 0.177D-04 0.37D+02MB/s 0.164D-04 0.40D+02MB/s 0.164D-04 0.40D+02MB/s 2048 361 0.259D-04 0.79D+02MB/s 0.243D-04 0.84D+02MB/s 0.213D-04 0.96D+02MB/s 7200 121 0.461D-04 0.16D+03MB/s 0.440D-04 0.16D+03MB/s 0.396D-04 0.18D+03MB/s 32768 25 0.125D-03 0.26D+03MB/s 0.121D-03 0.27D+03MB/s 0.114D-03 0.29D+03MB/s 66248 9 0.208D-03 0.32D+03MB/s 0.192D-03 0.35D+03MB/s 0.222D-03 0.30D+03MB/s 131072 4 0.390D-03 0.34D+03MB/s 0.370D-03 0.35D+03MB/s 0.389D-03 0.34D+03MB/s 233928 4 0.674D-03 0.35D+03MB/s 0.542D-03 0.43D+03MB/s 0.677D-03 0.35D+03MB/s 524288 1 0.226D-02 0.23D+03MB/s 0.127D-02 0.41D+03MB/s 0.147D-02 0.36D+03MB/s 996872 1 0.331D-02 0.30D+03MB/s 0.211D-02 0.47D+03MB/s 0.276D-02 0.36D+03MB/s ACCESS [356: 710,356: 710] bytes loop get put accumulate 8 841 0.133D-04 0.60D+00MB/s 0.118D-04 0.68D+00MB/s 0.126D-04 0.64D+00MB/s 72 1936 0.146D-04 0.49D+01MB/s 0.132D-04 0.55D+01MB/s 0.151D-04 0.48D+01MB/s 128 2500 0.158D-04 0.81D+01MB/s 0.144D-04 0.89D+01MB/s 0.160D-04 0.80D+01MB/s 648 1024 0.261D-04 0.25D+02MB/s 0.245D-04 0.26D+02MB/s 0.277D-04 0.23D+02MB/s 2048 361 0.510D-04 0.40D+02MB/s 0.490D-04 0.42D+02MB/s 0.569D-04 0.36D+02MB/s 7200 121 0.128D-03 0.56D+02MB/s 0.125D-03 0.58D+02MB/s 0.156D-03 0.46D+02MB/s 32768 25 0.495D-03 0.66D+02MB/s 0.492D-03 0.67D+02MB/s 0.674D-03 0.49D+02MB/s 66248 9 0.103D-02 0.64D+02MB/s 0.954D-03 0.69D+02MB/s 0.128D-02 0.52D+02MB/s 131072 4 0.187D-02 0.70D+02MB/s 0.186D-02 0.71D+02MB/s 0.250D-02 0.52D+02MB/s 233928 4 0.324D-02 0.72D+02MB/s 0.323D-02 0.72D+02MB/s 0.439D-02 0.53D+02MB/s 524288 1 0.802D-02 0.65D+02MB/s 0.719D-02 0.73D+02MB/s 0.990D-02 0.53D+02MB/s 996872 1 0.143D-01 0.70D+02MB/s 0.131D-01 0.76D+02MB/s 0.182D-01 0.55D+02MB/s ................................................................................ machine: 4-processor Fujitsu VX-4 name: kaiousei.fecit.co.uk note: initial port, performance optimizations not completed date: Thu Dec 4 12:04:49 PST 1997 ACCESS [ 1: 710, 1: 355] bytes loop get put accumulate 8 1711 0.131d-04 0.61d+00MB/s 0.267d-04 0.30d+00MB/s 0.474d-04 0.17d+00MB/s 72 3872 0.134d-04 0.54d+01MB/s 0.273d-04 0.26d+01MB/s 0.491d-04 0.15d+01MB/s 128 5050 0.136d-04 0.94d+01MB/s 0.275d-04 0.46d+01MB/s 0.509d-04 0.25d+01MB/s 648 2048 0.148d-04 0.44d+02MB/s 0.287d-04 0.23d+02MB/s 0.655d-04 0.99d+01MB/s 2048 741 0.167d-04 0.12d+03MB/s 0.300d-04 0.68d+02MB/s 0.103d-03 0.20d+02MB/s 7200 242 0.203d-04 0.35d+03MB/s 0.359d-04 0.20d+03MB/s 0.243d-03 0.30d+02MB/s 32768 50 0.317d-04 0.10d+04MB/s 0.429d-04 0.76d+03MB/s 0.302d-03 0.11d+03MB/s 66248 21 0.430d-04 0.15d+04MB/s 0.557d-04 0.12d+04MB/s 0.510d-03 0.13d+03MB/s 131072 10 0.588d-04 0.22d+04MB/s 0.685d-04 0.19d+04MB/s 0.634d-03 0.21d+03MB/s 233928 8 0.828d-04 0.28d+04MB/s 0.948d-04 0.25d+04MB/s 0.106d-02 0.22d+03MB/s 524288 2 0.151d-03 0.35d+04MB/s 0.149d-03 0.35d+04MB/s 0.156d-02 0.34d+03MB/s 996872 2 0.226d-03 0.44d+04MB/s 0.237d-03 0.42d+04MB/s 0.293d-02 0.34d+03MB/s ACCESS [ 1: 710,356: 710] bytes loop get put accumulate 8 1711 0.260d-04 0.31d+00MB/s 0.301d-04 0.27d+00MB/s 0.673d-04 0.12d+00MB/s 72 3872 0.544d-04 0.13d+01MB/s 0.343d-04 0.21d+01MB/s 0.103d-03 0.70d+00MB/s 128 5050 0.629d-04 0.20d+01MB/s 0.358d-04 0.36d+01MB/s 0.121d-03 0.11d+01MB/s 648 2048 0.112d-03 0.58d+01MB/s 0.447d-04 0.14d+02MB/s 0.221d-03 0.29d+01MB/s 2048 741 0.179d-03 0.11d+02MB/s 0.562d-04 0.36d+02MB/s 0.374d-03 0.55d+01MB/s 7200 242 0.315d-03 0.23d+02MB/s 0.864d-04 0.83d+02MB/s 0.768d-03 0.94d+01MB/s 32768 50 0.667d-03 0.49d+02MB/s 0.177d-03 0.18d+03MB/s 0.158d-02 0.21d+02MB/s 66248 21 0.979d-03 0.68d+02MB/s 0.273d-03 0.24d+03MB/s 0.234d-02 0.28d+02MB/s 131072 10 0.149d-02 0.88d+02MB/s 0.212d-01 0.62d+01MB/s 0.334d-02 0.39d+02MB/s 233928 8 0.206d-02 0.11d+03MB/s 0.676d-03 0.35d+03MB/s 0.498d-02 0.47d+02MB/s 524288 2 0.327d-02 0.16d+03MB/s 0.131d-02 0.40d+03MB/s 0.781d-02 0.67d+02MB/s 996872 2 0.509d-02 0.20d+03MB/s 0.228d-02 0.44d+03MB/s 0.128d-01 0.78d+02MB/s ga-5-3/global/testing/packc.c0000640005473000001440000003427511642656560014764 0ustar d3n000users/** * Tests the pack function in GA. * * Each test will locally perform the same functionality, then compare * local buffers against global buffers. */ #if HAVE_CONFIG_H # include "config.h" #endif #define NELEM 200000 /*#define NELEM 20*/ #define HEAP 200*200*4 #define FUDGE 100 #define STACK 200*200 #include #include #include "ga.h" #include "macdecls.h" #include "mp3.h" static int me; static int nproc; #define assign_reg(a,b) (a) = (b) #define assign_cpl(a,b) (a).real = (b).real; (a).imag = (b).imag #define assign_val_reg(a,b,c) (a) = (b) #define assign_val_cpl(a,b,c) (a).real = (b); (a).imag = (c) #define eq_zero_reg(a) (0 == (a)) #define eq_zero_cpl(a) (0 == (a).real && 0 == (a).imag) #define neq_zero_reg(a) (0 != (a)) #define neq_zero_cpl(a) (0 != (a).real || 0 != (a).imag) #define neq_reg(a,b) ((a) != (b)) #define neq_cpl(a,b) ((a).real != (b).real || (a).imag != (b).imag) #define assign_add_reg(a,b,c) (a) = (b) + (c) #define assign_add_cpl(a,b,c) (a).real = (b).real + (c).real; \ (a).imag = (b).imag + (c).imag #define cast_reg(a) ((float)(a)) #define cast_cpl(a) ((float)(a).real) #if 0 # define PRINT(AT,AT_MSK) do { \ int p; \ for (p=0; p #include static int me; static int nproc; #define test_scan_copy_reg1 local_src[i] = i+1 #define test_scan_copy_cpl1 local_src[i].real = i+1; local_src[i].imag = i+2 #define test_scan_copy_reg2 local_msk[i] = rand()%q #define test_scan_copy_cpl2 local_msk[i].real = rand()%q; \ local_msk[i].imag = 0 #define test_scan_copy_reg3 local_msk[i] != 0 #define test_scan_copy_cpl3 local_msk[i].real != 0 #define test_scan_copy_reg4 local_dst[i] != buf_dst[i] #define test_scan_copy_cpl4 local_dst[i].real != buf_dst[i].real || \ local_dst[i].imag != buf_dst[i].imag #define test_scan_copy(MT,T,INNER,MT_MSK,T_MSK,INNER_MSK) \ static void test_scan_copy_##MT##_##MT_MSK(int llo, int lhi, int q) \ { \ int g_src, g_dst, g_msk; \ int ndim = 1; \ int dims[] = {NELEM}; \ int lo[1]; \ int hi[1]; \ int alo[] = {0}; \ int ahi[] = {NELEM-1}; \ int i; \ T *local_src, *local_dst, *buf_dst, last_val; \ T_MSK *local_msk; \ \ lo[0] = llo; \ hi[0] = lhi; \ \ g_src = NGA_Create(MT, ndim, dims, "g_src", NULL); \ g_dst = NGA_Create(MT, ndim, dims, "g_dst", NULL); \ g_msk = NGA_Create(MT_MSK,ndim, dims, "g_msk", NULL); \ local_src = malloc(sizeof(T)*NELEM); \ local_dst = malloc(sizeof(T)*NELEM); \ local_msk = malloc(sizeof(T_MSK)*NELEM); \ buf_dst = malloc(sizeof(T)*NELEM); \ \ (void)memset(&last_val, 0, sizeof(T)); \ (void)memset(local_src, 0, sizeof(T)*NELEM); \ (void)memset(local_dst, 0, sizeof(T)*NELEM); \ (void)memset(local_msk, 0, sizeof(T_MSK)*NELEM); \ (void)memset(buf_dst, 0, sizeof(T)*NELEM); \ \ /* process 0 initializes all buffers */ \ if (0 == me) { \ for (i=0; i #endif #if HAVE_MATH_H # include #endif #include "ga.h" #include "macdecls.h" #include "mp3.h" #define N 4 /* dimension of matrices */ int main( int argc, char **argv ) { int g_a, g_b,i; int n=N, type=MT_F_DBL; int dims[6]={N,N,N,N,N,N}; int lo[6], hi[6]; int heap=30000, stack=20000; int me, nproc; int datatype, elements; double *prealloc_mem; MP_INIT(argc,argv); GA_INIT(argc,argv); /* initialize GA */ me=GA_Nodeid(); nproc=GA_Nnodes(); if(me==0) { if(GA_Uses_fapi())GA_Error("Program runs with C array API only",1); printf("Using %ld processes\n",(long)nproc); fflush(stdout); } heap /= nproc; stack /= nproc; if(! MA_init(MT_F_DBL, stack, heap)) GA_Error("MA_init failed",stack+heap); /* initialize memory allocator*/ /* This is a regular matrix. */ if(me==0)printf("Creating matrix A\n"); g_a = NGA_Create(type, 2, dims, "A", NULL); if(!g_a) GA_Error("create failed: A",n); if(me==0)printf("OK\n"); NGA_Distribution( g_a, me, lo, hi ); #if 1 /* This is just allocating and freeing memory. */ datatype = type; elements = 1; for ( i=0; i<2; i++ ) { elements *= (hi[i] - lo[i] + 1); } prealloc_mem = GA_Getmem(datatype, elements, 0); for ( i=0; i #endif #if HAVE_STDLIB_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include # define sleep(x) Sleep(1000*(x)) #endif #include "ga.h" #include "global.h" #include "macdecls.h" #include "testutil.h" #include "mp3.h" #define BASE 100 /***************************** macros ************************/ #define COPY(src, dst, bytes) memcpy((dst),(src),(bytes)) #define GA_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define GA_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define GA_ABS(a) (((a) <0) ? -(a) : (a)) void *ext_malloc(size_t bytes, int align, char *name) { return malloc(bytes); } void ext_free(void *ptr) { free(ptr); } void FATR register_ext_memory_() { GA_Register_stack_memory(ext_malloc, ext_free); } /*\ generate random range for a section of multidimensional array \*/ void get_range( int ndim, int dims[], int lo[], int hi[]) { int dim; for(dim=0; dim 0)? rand()%range : lo[dim]; new_lo[dim] = toss; new_hi[dim] = toss + diff -1; assert(new_hi[dim] < dims[dim]); assert(diff == (new_hi[dim] -new_lo[dim]+1)); } } /*\ print range of n-dimensional array with two strings before and after \*/ void print_range_internal(char *pre,int ndim, int lo[], int hi[], char* post) { int i; printf("%s[",pre); for(i=0;i #include #include "ga.h" #include "macdecls.h" #include "mp3.h" static int me; static int nproc; #if 0 # define PRINT(AT,AT_MSK) do { \ int p; \ for (p=0; p Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c c Check that it is indeed zero c call ga_get(g_a, 1, n, 1, n, b, n) call ga_pgroup_sync(grp_id) do i = 1, n do j = 1, n if (b(i,j) .ne. 0.0d0) then write(6,*) me,' zero ', i, j, b(i,j) call ffflush(6) c call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_pgroup_sync(grp_id) c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format(/'> Checking disjoint put ... ') call ffflush(6) endif call ga_pgroup_sync(grp_id) c inc = (n-1)/20 + 1 inc = n ij = 0 do j = 1, n, inc do i = 1, n, inc if (mod(ij,nproc) .eq. me) then ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) * write(6,4) me, ilo, ihi, jlo, jhi * 4 format(' node ',i2,' checking put ',4i4) * call ffflush(6) call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) endif ij = ij + 1 enddo enddo call ga_pgroup_sync(grp_id) c c All nodes check all of a c call util_dfill(n*n, 0.0d0, b, 1) * call ga_print(g_a,1) call ga_get(g_a, 1, n, 1, n, b, n) * write(6,*) ' after get' * call output(b, 1, n, 1, n, n, n, 1) c do i = 1, n do j = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' put ', me, i, j, a(i,j),b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif call ga_pgroup_sync(grp_id) c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format(/'> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_pgroup_sync(grp_id) c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c call util_dfill(n*n, 0.0d0, b, 1) call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif sum1 = 0.0d0 do j = jlo, jhi do i = ilo, ihi sum1 = sum1 + b(i,j) if (b(i,j) .ne. a(i,j)) then write(6,*) i, j, b(i,j), a(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo c enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) call ffflush(6) endif call ga_pgroup_sync(grp_id) c c Each node accumulates into disjoint sections of the array c if (me .eq. 0) then write(6,9) 9 format(/'> Checking accumulate ... ') call ffflush(6) endif call ga_pgroup_sync(grp_id) c crap = drand(12345) ! Same seed for each process do j = 1, n do i = 1, n c b(i,j) = drand(0) b(i,j) = i+j enddo enddo c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc c x = drand(0) x = 10. ilo = i ihi = min(i+inc-1, n) if(ihi.eq.n-1)ihi=n c ihi = min(i+inc, n) jlo = j jhi = min(j+inc-1, n) if(jhi.eq.n-1)jhi=n c jhi = min(j+inc-1, n) * call ffflush(6) if (mod(ij,nproc) .eq. me) then c print *, me, 'checking accumulate ',ilo,ihi,jlo,jhi,x * 11 format(' node ',i2,' checking accumulate ',4i4) * call ffflush(6) call ga_acc(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n, x) endif ij = ij + 1 c c Each process applies all updates to its local copy c do jj = jlo, jhi do ii = ilo, ihi a(ii,jj) = a(ii,jj) + x * b(ii,jj) enddo enddo enddo enddo call ga_pgroup_sync(grp_id) c c All nodes check all of a c call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if(MISMATCH(b(i,j),a(i,j)))then write(6,*) ' acc ', me, i, j, a(i,j), b(i,j) call ffflush(6) c call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' disjoint ga_acc is OK' write(6,*) endif c c overlapping accumulate call ga_pgroup_sync(grp_id) g_b = ga_create_handle() call ga_set_data(g_b,ndim,dims,MT_DBL) call ga_set_array_name(g_b,'b') call ga_set_pgroup(g_b,grp_id) if (.not.ga_allocate(g_b)) then call ga_error('ga_create failed for second array ',0) endif c call ga_zero(g_b) call ga_pgroup_sync(grp_id) call ga_acc(g_b, n/2, n/2, n/2, n/2, 1d0, 1, 1d0) call ga_pgroup_sync(grp_id) if (me.eq.0) then call ga_get(g_b, n/2, n/2, n/2, n/2, b(1,1), 1) x = abs(b(1,1) -1d0*nproc) if(x.gt. 1d-10)then write(6,*)'val=',b(1,1),' expected=',nproc, x call ga_error('overlapping accumulate failed',0) endif if (me.eq.0) then write(6,*) write(6,*) ' overlapping ga_acc is OK' write(6,*) endif endif c c Check the ga_add function c if (me .eq. 0) then write(6,91) 91 format(/'> Checking add ...') call ffflush(6) endif c c crap = drand(12345) ! Everyone has same seed do j = 1, n do i = 1, n b(i,j) = drand(0) a(i,j) = 0.1d0*a(i,j) + 0.9d0*b(i,j) enddo enddo if (me.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) call ga_add(0.1d0, g_a, 0.9d0, g_b, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if(MISMATCH(b(i,j), a(i,j)))then write(6,*) ' add ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' add is OK ' write(6,*) endif call ga_pgroup_sync(grp_id) c c Check the ddot function c if (me .eq. 0) then write(6,19) 19 format(/'> Checking ddot ...') call ffflush(6) endif crap = drand(12345) ! Everyone has same seed sum1 = 0.0d0 do j = 1, n do i = 1, n b(i,j) = drand(0) sum1 = sum1 + a(i,j)*b(i,j) enddo enddo if (me.eq.0) then call ga_put(g_b, 1, n, 1, n, b, n) call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_pgroup_sync(grp_id) sum2 = ga_ddot(g_a,g_b) if(MISMATCH(sum1, sum2))then write(6,*) ' ddot wrong ', sum1, sum2 call ffflush(6) call ga_error('... exiting ',0) else if (me.eq.0) then write(6,*) write(6,*) ' ddot is OK ' write(6,*) endif c c Check the ga_scale function c if (me .eq. 0) then write(6,92) 92 format(/'> Checking scale ...') call ffflush(6) endif call ga_scale(g_a, 0.123d0) call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n a(i,j) = a(i,j)*0.123d0 if (MISMATCH(b(i,j), a(i,j)))then write(6,*) ' dscal ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' scale is OK ' write(6,*) endif c c Check the ga_copy function c if (me .eq. 0) then write(6,*) write(6,*)'> Checking copy' write(6,*) call ffflush(6) endif if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) call ga_copy(g_a, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' copy ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy is OK ' write(6,*) endif call ga_pgroup_sync(grp_id) c c Check the ga_copy function between two groups c if (me .eq. 0) then write(6,*) write(6,*)'> Checking copy between groups' write(6,*) call ffflush(6) endif if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) call ga_copy(g_a, g_w) call ga_get(g_w, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' copy ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy is OK from small group to big group' write(6,*) endif call ga_pgroup_sync(grp_id) call ga_zero(g_a) call ga_copy(g_w, g_a) call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' copy ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy is OK from big group to small group' write(6,*) endif c c Test copy_patch c if (me .eq. 0) then write(6,*) write(6,*)'> Checking copy_patch between groups' write(6,*) call ffflush(6) endif c c klugy mechanism for zeroing g_w c call ga_zero(g_a) call ga_copy(g_a,g_w) if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) c ilo = n/4+1 jlo = n/4+1 ihi = ilo + n/2 jhi = jlo + n/2 call ga_copy_patch('n',g_a,ilo,ihi,jlo,jhi,g_w,ilo,ihi,jlo,jhi) call ga_get(g_w, 1, n, 1, n, b, n) do j = jlo, jhi do i = ilo, ihi if (b(i,j) .ne. a(i,j)) then write(6,*) ' copy ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy_patch is OK from small group to big group' write(6,*) endif c call ga_zero(g_a) call ga_copy_patch('n',g_w,ilo,ihi,jlo,jhi,g_a,ilo,ihi,jlo,jhi) call ga_get(g_a, 1, n, 1, n, b, n) do j = jlo, jhi do i = ilo, ihi if (b(i,j) .ne. a(i,j)) then write(6,*) ' copy ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy_patch is OK from big group to small group' write(6,*) endif if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) c call ga_pgroup_sync(grp_id) if (me .eq. 0) then write(6,*) '> Checking scatter/gather (might be slow)... ' call ffflush(6) endif call ga_pgroup_sync(grp_id) c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do j = 1, 10 call ga_pgroup_sync(grp_id) itmp = iran(nproc)-1 if(me.eq.itmp) then #ifndef NGA_GATSCAT do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo enddo write(6,*) 'Calling ga_gather' call ga_gather(g_a, v, iv, jv, m) write(6,*) 'Completed ga_gather' do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,v(loop),1) if(v(loop) .ne. a(ilo,jlo))then write(6,*)me,' gather ', ilo,',',jlo,',', a(ilo,jlo) & ,' ',v(loop) call ffflush(6) call ga_error('... exiting ',0) endif enddo #else do loop = 1,m ilo = iran(n) jlo = iran(n) ijv(1,loop) = ilo ijv(2,loop) = jlo enddo call nga_gather(g_a, v, ijv, m) do loop = 1,m ilo= ijv(1,loop) jlo= ijv(2,loop) call ga_get(g_a,ilo,ilo,jlo,jlo,v(loop),1) if(v(loop) .ne. a(ilo,jlo))then write(6,*)me,' gather ', ilo,',',jlo,',', a(ilo,jlo) & ,' ',v(loop) call ffflush(6) call ga_error('... exiting ',0) endif enddo #endif endif enddo c if (me.eq.0) then write(6,*) write(6,*) ' gather is OK' write(6,*) call ffflush(6) endif c do j = 1,10 call ga_pgroup_sync(grp_id) if(me.eq.iran(ga_pgroup_nnodes(grp_id))-1) then #ifndef NGA_GATSCAT do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo c v(loop) = DSIN(a(ilo,jlo)+b(ilo,jlo)) v(loop) = 1d0 *(ilo+jlo) enddo call ga_scatter(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,w(loop),1) c if(v(loop) .ne. w(loop))then if(w(loop) .ne. 1d0 *(ilo+jlo) )then write(6,*)me,' scatter ', ilo,',',jlo,',',w(loop) & ,' ', 1d0 *(ilo+jlo) call ffflush(6) call ga_error('... exiting ',0) endif enddo #else do loop = 1,m ilo = iran(n) jlo = iran(n) ijv(1,loop) = ilo ijv(2,loop) = jlo c v(loop) = DSIN(a(ilo,jlo)+b(ilo,jlo)) v(loop) = 1d0 *(ilo+jlo) enddo call nga_scatter(g_a, v, ijv, m) do loop = 1,m ilo= ijv(1,loop) jlo= ijv(2,loop) call ga_get(g_a,ilo,ilo,jlo,jlo,w(loop),1) c if(v(loop) .ne. w(loop))then if(w(loop) .ne. 1d0 *(ilo+jlo) )then write(6,*)me,' scatter ', ilo,',',jlo,',',w(loop) & ,' ', 1d0 *(ilo+jlo) call ffflush(6) call ga_error('... exiting ',0) endif enddo #endif endif call ga_pgroup_sync(grp_id) enddo c if (me.eq.0) then write(6,*) write(6,*) ' scatter is OK' write(6,*) endif c call ga_pgroup_sync(grp_id) c c scatter-acc available in GA ver. 3.0 #ifdef GA3 if (me.eq.0) then write(6,*) write(6,*) ' checking scatter-accumulate' write(6,*) endif c crap = drand(1234) call ga_zero(g_a) c do j = 1, n do i = 1, n b(i,j) =0. enddo enddo c x = .1d0 ii =n do jj = 1,1 call ga_pgroup_sync(grp_id) do loop = 1, ii c generate unique i,j pairs 10 continue i = iran(n) j=iran(n) if (found(i,j, iv, jv, loop-1) ) goto 10 #ifndef NGA_GATSCAT iv(loop) = i jv(loop) = j #else ijv(1,loop) = i ijv(2,loop) = j #endif v(loop) = 1d0 *(i+j) b(i,j) = b(i,j) + nproc*x*v(loop) ! update local ref. array enddo #ifndef NGA_GATSCAT call ga_scatter_acc(g_a,v,iv,jv, ii,x) #else call nga_scatter_acc(g_a,v,ijv,ii,x) #endif c call ga_pgroup_sync(grp_id) c c check the result c call ga_get(g_a, 1, n, 1,n, a, n) do loop = 1,ii #ifndef NGA_GATSCAT i = iv(loop) j = jv(loop) #else i = ijv(1,loop) j = ijv(2,loop) #endif if(MISMATCH(a(i,j),b(i,j)))then print *,'Error',i,j,loop,a(i,j),'expected=',b(i,j) * if(me.eq.0)then * do ii=1,loop * print *,'element',ii, iv(ii),jv(ii) * enddo * endif call ga_error('scatter-acc error in trial ',jj) endif enddo call ga_pgroup_sync(grp_id) enddo call ga_pgroup_sync(grp_id) if (me.eq.0) then write(6,*) write(6,*) ' scatter-accumulate is OK' write(6,*) endif #endif c c Delete the global arrays c status = ga_destroy(g_b) status = ga_destroy(g_a) c return end c----------------------------------------------------------------- subroutine check_complex(grp_id) implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n,m,grp_id parameter (n = 60) parameter (m = 2*n) double complex a(n,n), b(n,n), v(m),w(m) integer ndim, dims(2), chunk(2), p_mirror integer iv(m), jv(m) logical status integer g_a, g_b integer iran, i,j, loop,nloop,maxloop, ilo, ihi, jlo, jhi, itmp integer nproc, me, int, ij, inc, ii, jj, nnodes parameter (maxloop = 100) integer maxproc parameter (maxproc = 128) double precision crap, real double precision nwords double complex x, sum1, sum2, factor integer lprocs, inode, iproc intrinsic int iran(i) = int(drand(0)*real(i)) + 1 c nproc = ga_pgroup_nnodes(grp_id) me = ga_pgroup_nodeid(grp_id) inode = ga_cluster_nodeid() lprocs = ga_cluster_nprocs(inode) nnodes = ga_cluster_nnodes() iproc = mod(me,lprocs) nloop = Min(maxloop,n) c c a() is a local copy of what the global array should start as c do j = 1, n do i = 1, n a(i,j) = cmplx(dble(i-1), dble((j-1)*n)) b(i,j) = cmplx(-1d0,1d0) enddo enddo c c Create a global array c c print *,ga_nodeid(), ' creating array' call ffflush(6) c call setdbg(1) ndim = 2 dims(1) = n dims(2) = n g_a = ga_create_handle() call ga_set_data(g_a,ndim,dims,MT_DCPL) call ga_set_array_name(g_a,'a') call ga_set_pgroup(g_a,grp_id) status = ga_allocate(g_a) if (.not. status) then write(6,*) ' ga_create failed' call ga_error('... exiting ',0) endif g_b = ga_create_handle() call ga_set_data(g_b,ndim,dims,MT_DCPL) call ga_set_array_name(g_b,'b') call ga_set_pgroup(g_b,grp_id) if (.not.ga_allocate(g_b)) then call ga_error('ga_create failed for second array ',0) endif call ga_distribution(g_a,me,ilo, ihi, jlo, jhi) call ga_pgroup_sync(grp_id) c c Zero the array c if (me .eq. 0) then write(6,21) 21 format(/'> Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c c Check that it is indeed zero c call ga_get(g_a, 1, n, 1, n, b, n) call ga_pgroup_sync(grp_id) do i = 1, n do j = 1, n if(b(i,j).ne.(0d0,0d0)) then write(6,*) me,' zero ', i, j, b(i,j) call ffflush(6) c call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_pgroup_sync(grp_id) c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format(/'> Checking disjoint put ... ') call ffflush(6) endif call ga_pgroup_sync(grp_id) c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc if (mod(ij,nproc) .eq. me) then ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) endif ij = ij + 1 enddo enddo call ga_pgroup_sync(grp_id) c c All nodes check all of a c call util_qfill(n*n, (0d0,0d0), b, 1) call ga_get(g_a, 1, n, 1, n, b, n) c do i = 1, n do j = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' put ', me, i, j, a(i,j),b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif call ga_pgroup_sync(grp_id) c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format(/'> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_pgroup_sync(grp_id) c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c call util_qfill(n*n, (0.0d0,0d0), b, 1) call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif do j = jlo, jhi do i = ilo, ihi if (b(i,j) .ne. a(i,j)) then write(6,*)'error:', i, j, b(i,j), a(i,j) call ga_error('... exiting ',0) endif enddo enddo c enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) call ffflush(6) endif call ga_pgroup_sync(grp_id) c c Each node accumulates into disjoint sections of the array c if (me .eq. 0) then write(6,9) 9 format(/'> Checking accumulate ... ') call ffflush(6) endif call ga_pgroup_sync(grp_id) c crap = drand(12345) ! Same seed for each process do j = 1, n do i = 1, n b(i,j) = cmplx(drand(0),drand(1)) b(i,j) = cmplx(dble(i),dble(j)) enddo enddo c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc c x = cmplx(drand(0),0.333d0) c x = cmplx(0.333d0,0) * x = cmplx(0d0,0d0) x = 0 ilo = i ihi = min(i+inc-1, n) if(ihi.eq.n-1)ihi=n jlo = j jhi = min(j+inc-1, n) if(jhi.eq.n-1)jhi=n if (mod(ij,nproc) .eq. me) then call ga_acc(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n, x) endif ij = ij + 1 c c Each process applies all updates to its local copy c do jj = jlo, jhi do ii = ilo, ihi a(ii,jj) = a(ii,jj) + x * b(ii,jj) enddo enddo enddo enddo call ga_pgroup_sync(grp_id) c c All nodes check all of a c call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (MISMATCH(b(i,j), a(i,j)))then write(6,*) ' acc ', me, i, j, a(i,j), b(i,j) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' disjoint ga_acc is OK' write(6,*) endif c c overlapping accumulate c call ga_zero(g_b) call ga_acc(g_b, n/2, n/2, n/2, n/2, (1d0,-1d0), 1, (1d0,0d0)) call ga_pgroup_sync(grp_id) if (me.eq.0) then call ga_get(g_b, n/2, n/2, n/2, n/2, x, 1) if (MISMATCH(x, ((1d0,-1d0)*nproc)))then c if(error.gt. (1d-8))then write(6,*)'val=',x,' expected=(',nproc,',',-nproc,')' call ga_error('overlapping accumulate failed',0) endif write(6,*) write(6,*) ' overlapping ga_acc is OK' write(6,*) endif c c Check the ga_copy function c if (me .eq. 0) then write(6,*) write(6,*)'> Checking copy' write(6,*) call ffflush(6) endif call ga_pgroup_sync(grp_id) if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) call ga_copy(g_a, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' copy ', me, i, j, a(i,j), b(i,j) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy is OK ' write(6,*) endif c c c Check the ga_scale function c if (me .eq. 0) then write(6,92) 92 format(/'> Checking scale ...') call ffflush(6) endif factor = (1d0,-1d0) call ga_scale(g_a, factor) call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n a(i,j) = a(i,j)*factor if (MISMATCH(b(i,j), a(i,j)))then write(6,*) ' dscal ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' scale is OK ' write(6,*) endif c c Check scatter&gather c call ga_pgroup_sync(grp_id) if (me .eq. 0) then write(6,*) '> Checking scatter/gather (might be slow)... ' call ffflush(6) if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_pgroup_sync(grp_id) c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do j = 1, 10 call ga_pgroup_sync(grp_id) itmp = iran(nproc)-1 if(me.eq.itmp) then do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo enddo call ga_gather(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,v(loop),1) if(v(loop) .ne. a(ilo,jlo))then write(6,*)me,' gather ', ilo,',',jlo,',', a(ilo,jlo) & ,' ',v(loop) call ffflush(6) call ga_error('... exiting ',0) endif enddo endif enddo c if (me.eq.0) then write(6,*) write(6,*) ' gather is OK' write(6,*) call ffflush(6) endif c do j = 1,10 call ga_pgroup_sync(grp_id) if(me.eq.iran(ga_nnodes())-1) then do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo v(loop) = (1d0,-1d0) *(ilo+jlo) enddo call ga_scatter(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,w(loop),1) if(w(loop) .ne. (1d0,-1d0) *(ilo+jlo) )then write(6,*)me,' scatter ', ilo,',',jlo,',',w(loop) & ,' ', (1d0,-1d0) *(ilo+jlo) call ffflush(6) endif enddo endif call ga_pgroup_sync(grp_id) enddo c if (me.eq.0) then write(6,*) write(6,*) ' scatter is OK' write(6,*) endif c c Check ga_add c if (me .eq. 0) then write(6,91) 91 format(/'> Checking add ...') call ffflush(6) endif call ga_get(g_a, 1, n, 1, n, a, n) crap = drand(12345) ! Everyone has same seed do j = 1, n do i = 1, n b(i,j) = cmplx(drand(0), drand(1)) a(i,j) = (0.1d0,-.1d0)*a(i,j) + (.9d0,-.9d0)*b(i,j) enddo enddo if (me.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) call ga_add((0.1d0,-.1d0), g_a, (0.9d0,-.9d0), g_b, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (MISMATCH(b(i,j), a(i,j)))then write(6,*) ' add ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' add is OK ' write(6,*) endif call ga_pgroup_sync(grp_id) c c Check the zdot function c if (me .eq. 0) then write(6,19) 19 format(/'> Checking zdot ...') call ffflush(6) endif crap = drand(12345) ! Everyone has same seed sum1 = (0.0d0,0.d0) do j = 1, n do i = 1, n b(i,j) = cmplx(drand(0), drand(1)) sum1 = sum1 + a(i,j)*b(i,j) enddo enddo if (me.eq.0) then call ga_put(g_b, 1, n, 1, n, b, n) call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_pgroup_sync(grp_id) sum2 = ga_zdot(g_a,g_b) if (MISMATCH(sum1, sum2))then write(6,*) ' zdot wrong ', sum1, sum2 call ffflush(6) call ga_error('... exiting ',0) else if (me.eq.0) then write(6,*) write(6,*) ' zdot is OK ' write(6,*) endif c c Delete the global arrays c 123 continue status = ga_destroy(g_b) status = ga_destroy(g_a) c return end c----------------------------------------------------------------- subroutine check_int(grp_id) implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n,grp_id parameter (n = 128) integer a(n,n), b(n,n) logical status integer g_a integer iran, i, j, loop, nloop, ilo, ihi, jlo, jhi, itmp integer nproc, me, int, ij, inc, dimi, dimj, ii, jj integer ndim, dims(2), chunk(2), p_mirror, nnodes integer lprocs, inode, iproc,lproc, nprocs double precision nwords parameter (nloop = 100) integer maxproc parameter (maxproc = 128) integer map(5,maxproc), found, np,k double precision crap, sum1, real integer buf, abs_me intrinsic int iran(i) = int(drand(0)*real(i)) + 1 c nproc = ga_pgroup_nnodes(grp_id) me = ga_pgroup_nodeid(grp_id) abs_me = ga_nodeid() inode = ga_cluster_nodeid() lprocs = ga_cluster_nprocs(inode) nnodes = ga_cluster_nnodes() iproc = mod(me,lprocs) c c a() is a local copy of what the global array should start as c do j = 1, n do i = 1, n a(i,j) = i-1 + (j-1)*1000 enddo enddo c c Create a global array c ndim = 2 dims(1) = n dims(2) = n chunk(1) = 0 chunk(2) = 0 g_a = ga_create_handle() call ga_set_data(g_a,ndim,dims,MT_INT) call ga_set_array_name(g_a,'a') call ga_set_pgroup(g_a,grp_id) if (.not.ga_allocate(g_a)) then write(6,*) ' ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c c Zero the array c if (me .eq. 0) then write(6,21) 21 format(/'> Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c c Check that it is indeed zero c call ga_get(g_a, 1, n, 1, n, b, n) do i = 1, n do j = 1, n if (b(i,j) .ne. 0) then write(6,*) ' zero ', me, i, j, b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_pgroup_sync(grp_id) c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format(/'> Checking disjoint put ... ') call ffflush(6) endif call ga_pgroup_sync(grp_id) c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc if (mod(ij,nproc) .eq. me) then ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) c write(6,4) me, ilo, ihi, jlo, jhi c4 format(' node ',i2,' checking put ',4i4) c call ffflush(6) call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) endif ij = ij + 1 enddo enddo call ga_pgroup_sync(grp_id) c c All nodes check all of a c if(me.eq.0)then call ga_get(g_a, 1, n, 1, n, b, n) do i = 1, n do j = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' put ', me, i, j, a(i,j),b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo endif call ga_pgroup_sync(grp_id) c if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format(/'> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_pgroup_sync(grp_id) c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c call util_ifill(n*n, 0.0d0, b, 1) call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) c if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif c sum1 = 0.0d0 do j = jlo, jhi do i = ilo, ihi sum1 = sum1 + b(i,j) if (b(i,j) .ne. a(i,j)) then write(6,*) 'error ', i, j, b(i,j), a(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) endif c call ga_pgroup_sync(grp_id) if (me .eq. 0 .and. n.gt.7) then write(6,*) write(6,*) '> Checking ga_print_patch --- should see ' write(6,*)' [2002 3002 4002 5002 6002]' write(6,*)' [2003 3003 4003 5003 6003]' write(6,*)' [2004 3004 4004 5004 6004]' write(6,*) call ffflush(6) endif if(n.gt.5) call ga_print_patch(g_a,3,5,3,7,0) c call ga_pgroup_sync(grp_id) c call ga_pgroup_sync(grp_id) if (me .eq. 0) then write(6,*) write(6,*) '> Checking read_inc ... ' write(6,*) call ffflush(6) endif call ga_pgroup_sync(grp_id) c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc inc =5 c every processor will be operating on somebody elses data c lproc = nproc - me - 1 c call ga_distribution(g_a,lproc,ilo,ihi,jlo,jhi) c dimi = ihi-ilo dimj = jhi-jlo write(6,111) me,ilo,ihi,jlo,jhi,dimi,dimj 111 format(i2,'..',4i8,'.',2i8) call ga_pgroup_sync(grp_id) if(ilo .gt.0 .and. jhi .gt. 0)then do loop = 1,nloop ii= IABS(iran(dimi)) jj= IABS(iran(dimj)) i=ilo + Mod(ii,dimi) j=jlo + Mod(jj,dimj) c c write(6,*) me,'..',ilo,ihi,jlo,jhi,'.',dimi,dimj,'..',i,j c call ffflush(6) buf = ga_read_inc(g_a,i,j,inc) if(a(i,j).ne. buf)then write(6,*)me,'READ_inc ', i,',',j,',', a(i,j),' ',buf,me call ffflush(6) endif call ga_get(g_a, i,i,j,j, buf,1) a(i,j) = a(i,j)+inc if(a(i,j).ne. buf)then write(6,*)me,'read_INC ', i,',',j,',', a(i,j),' ',buf,me call ffflush(6) endif enddo endif call ga_pgroup_sync(grp_id) c if (me.eq.0) then write(6,*) write(6,*) ' read_inc is OK' write(6,*) endif c c c #if 000 if (me.eq.0) then write(6,*) write(6,*) '> checking ga_fence and ga_lock' write(6,*) call ffflush(6) endif c call ga_zero(g_a) c c*** use ga_read_inc and elements g_a(1:2,1) to implement a lock c*** compute g_a(:,n) = sum (1(:)) for P processors c status = ga_create_mutexes(1) if (.not. status) then call ga_error('ga_create_mutexes failed ',0) endif if(n.lt.2)call ga_error('insufficient n to test ga_fence',n) call ga_lock(0) c call my_lock(g_a) c get original values g_a(:,n) call ga_get(g_a, 1,n, n,n, b,n) c add my contribution do i =1,n b(i,1)= b(i,1)+1 enddo c c need to use fence to assure that coms complete before leaving c Critical Section c call ga_init_fence() call ga_put(g_a, 1,n, n,n, b,n) call ga_fence() call ga_unlock(0) c call my_unlock(g_a) c 333 if(.not.ga_destroy_mutexes()) $ call ga_error('mutex not destroyed',0) call ga_pgroup_sync(grp_id) if (me.eq.0) then call ga_get(g_a, 1,n, n,n, b,n) do i =1,n if(b(i,1).ne. nproc)then print *, 'mismatch',b(i,1),nproc call ga_error('fence failed',i) endif enddo write(6,*) write(6,*) ' ga_fence and ga_lock are OK' write(6,*) endif #endif c c if (me.eq.0) then write(6,*) write(6,*) '> checking ga_locate_region' write(6,*) call ffflush(6) endif status = ga_locate_region(g_a, 1, n, 1,n, map,np) found = 0 do j=1,n do i=1,n b(i,j)=-1 enddo enddo if(me.eq.0)call ga_put(g_a,1,n,1,n,b,n) call ga_pgroup_sync(grp_id) do k = 1, np if(map(5,k).eq.me)then if(found.eq.1) then write(6,*)'double entry in map for proc ',me call ffflush(6) endif do j= map(3,k), map(4,k) do i= map(1,k), map(2,k) b(i,j)=1*me enddo enddo call ga_put(g_a, map(1,k),map(2,k),map(3,k),map(4,k), & b(map(1,k),map(3,k)),n) found = 1 endif enddo call ga_pgroup_sync(grp_id) c do k = 1, np if(map(5,k).eq.me)then call ga_get(g_a, map(1,k),map(2,k),map(3,k),map(4,k), & a(map(1,k),map(3,k)),n) do j= map(3,k), map(4,k) do i= map(1,k), map(2,k) if(b(i,j).ne.a(i,j)) then write(6,*) & 'proc ',me, 'overlap with ',a(i,j) call ffflush(6) endif enddo enddo endif enddo call ga_pgroup_sync(grp_id) c if(me.eq.0)then call ga_get(g_a,1,n,1,n,a,n) do j=1,n do i=1,n if(a(i,j).eq.-1)then write(6,*)'i=',i,' j=',j, ' not assigned ' call ga_error('... exiting ',0) endif enddo enddo endif if (me.eq.0) then write(6,*) write(6,*) ' ga_locate_region is OK' write(6,*) call ffflush(6) endif c c Delete the global array c status = ga_destroy(g_a) c return end c--------------------------------------------------------------------- subroutine check_flt(grp_id) implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" integer n, m, grp_id parameter (n =10) parameter (m=2*n) real a(n,n), b(n,n), v(m), w(m) integer iv(m), jv(m) logical status integer g_a, g_b integer iran, i, j, loop, nloop, maxloop, ilo, ihi, jlo, jhi, itmp integer nproc, me, int, ij, inc, ii, jj, nnodes double precision nwords parameter (maxloop = 100) integer maxproc integer ndim, dims(2), chunk(2), p_mirror parameter (maxproc = 128) double precision crap real x, sum1, sum2 logical found integer lprocs, inode, iproc intrinsic int iran(i) = int(drand(0)*real(i)) + 1 nproc = ga_pgroup_nnodes(grp_id) me = ga_pgroup_nodeid(grp_id) inode = ga_cluster_nodeid() lprocs = ga_cluster_nprocs(inode) nnodes = ga_cluster_nnodes() iproc = mod(me,lprocs) nloop = Min(maxloop,n) c c a() is a local copy of what the global array should start as c do j = 1, n do i = 1, n a(i,j) = i-1 + (j-1)*n b(i,j) = -1. enddo enddo c c Create a global array c ndim = 2 dims(1) = n dims(2) = n chunk(1) = 0 chunk(2) = 0 g_a = ga_create_handle() call ga_set_data(g_a,ndim,dims,MT_REAL) call ga_set_array_name(g_a,'a') call ga_set_pgroup(g_a,grp_id) if (.not.ga_allocate(g_a)) then write(6,*) ' ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c c check if handle is valid. be quiet unless error c if(.not.ga_valid_handle(g_a)) call ga_error("invalid handle",g_a) c call ga_distribution(g_a,me,ilo, ihi, jlo, jhi) call ga_pgroup_sync(grp_id) c c Zero the array c if (me .eq. 0) then write(6,21) 21 format(/'> Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c c Check that it is indeed zero c call ga_get(g_a, 1, n, 1, n, b, n) call ga_pgroup_sync(grp_id) do i = 1, n do j = 1, n if (b(i,j) .ne. 0.0) then write(6,*) ' zero ', me, i, j, b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_pgroup_sync(grp_id) c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format(/'> Checking disjoint put ... ') call ffflush(6) endif call ga_pgroup_sync(grp_id) c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc if (mod(ij,nproc) .eq. me) then ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) c write(6,4) me, ilo, ihi, jlo, jhi c 4 format(' node ',i2,' checking put ',4i4) c call ffflush(6) call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) endif ij = ij + 1 enddo enddo call ga_pgroup_sync(grp_id) c c All nodes check all of a c call ga_get(g_a, 1, n, 1, n, b, n) do i = 1, n do j = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' put ', me, i, j, a(i,j),b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo call ga_pgroup_sync(grp_id) c if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format(/'> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_pgroup_sync(grp_id) c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c call util_rfill(n*n, 0.0, b, 1) call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) c if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif c sum1 = 0.0d0 do j = jlo, jhi do i = ilo, ihi sum1 = sum1 + b(i,j) if (b(i,j) .ne. a(i,j)) then write(6,*) 'error ', i, j, b(i,j), a(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) endif call ga_pgroup_sync(grp_id) c c Each node accumulates into disjoint sections of the array c if (me .eq. 0) then write(6,9) 9 format(/'> Checking accumulate ... ') call ffflush(6) endif call ga_pgroup_sync(grp_id) c crap = drand(12345) ! Same seed for each process do j = 1, n do i = 1, n c b(i,j) = real(drand(0)) b(i,j) = i+j enddo enddo c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc c x = real(drand(0)) x = 10. ilo = i ihi = min(i+inc-1, n) if(ihi.eq.n-1)ihi=n c ihi = min(i+inc, n) jlo = j jhi = min(j+inc-1, n) if(jhi.eq.n-1)jhi=n c jhi = min(j+inc-1, n) * call ffflush(6) if (mod(ij,nproc) .eq. me) then c print *, me, 'checking accumulate ',ilo,ihi,jlo,jhi,x * 11 format(' node ',i2,' checking accumulate ',4i4) * call ffflush(6) call ga_acc(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n, x) endif ij = ij + 1 c c Each process applies all updates to its local copy c do jj = jlo, jhi do ii = ilo, ihi a(ii,jj) = a(ii,jj) + x * b(ii,jj) enddo enddo enddo enddo call ga_pgroup_sync(grp_id) c c All nodes check all of a call ga_get(g_a, 1, n, 1, n, b, n) c do j = 1, n do i = 1, n if(MISMATCHF(b(i,j),a(i,j)))then write(6,*) ' acc ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' disjoint ga_acc is OK' write(6,*) endif c c overlapping accumulate call ga_pgroup_sync(grp_id) g_b = ga_create_handle() call ga_set_data(g_b,ndim,dims,MT_REAL) call ga_set_array_name(g_b,'b') call ga_set_pgroup(g_b,grp_id) if (.not.ga_allocate(g_b)) then call ga_error('ga_create failed for second array ',0) endif c call ga_zero(g_b) call ga_acc(g_b, n/2, n/2, n/2, n/2, 1.0, 1, 1.0) call ga_pgroup_sync(grp_id) if (me.eq.0) then call ga_get(g_b, n/2, n/2, n/2, n/2, b(1,1), 1) x = abs(b(1,1) -1*nproc) if(x.gt. 1e-10)then write(6,*)'val=',b(1,1),' expected=',nproc, x call ga_error('overlapping accumulate failed',0) endif write(6,*) write(6,*) ' overlapping ga_acc is OK' write(6,*) endif c c Check the ga_add function c if (me .eq. 0) then write(6,91) 91 format(/'> Checking add ...') call ffflush(6) endif c crap = drand(12345) ! Everyone has same seed do j = 1, n do i = 1, n b(i,j) = real(drand(0)*real(i)) + 1 a(i,j) = 0.1*a(i,j) + 0.9*b(i,j) enddo enddo if (me.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) call ga_add(0.1, g_a, 0.9, g_b, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if(MISMATCHF(b(i,j), a(i,j)))then write(6,*) ' add ', me, i, j, a(i,j), b(i,j) call ffflush(6) CCC call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' add is OK ' write(6,*) endif call ga_pgroup_sync(grp_id) c c Check the sdot function c if (me .eq. 0) then write(6,19) 19 format(/'> Checking sdot ...') call ffflush(6) endif crap = drand(12345) ! Everyone has same seed sum1 = 0.0 do j = 1, n do i = 1, n b(i,j) = drand(0) sum1 = sum1 + a(i,j)*b(i,j) enddo enddo if (me.eq.0) then call ga_put(g_b, 1, n, 1, n, b, n) call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_pgroup_sync(grp_id) sum2 = ga_sdot(g_a,g_b) if(MISMATCHF(sum1, sum2))then write(6,*) ' fdot wrong ', sum1, sum2 call ffflush(6) call ga_error('... exiting ',0) else if (me.eq.0) then write(6,*) write(6,*) ' sdot is OK ' write(6,*) endif c c Check the ga_scale function c if (me .eq. 0) then write(6,92) 92 format(/'> Checking scale ...') call ffflush(6) endif call ga_scale(g_a, 0.123) call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n a(i,j) = a(i,j)*0.123 if (MISMATCHF(b(i,j), a(i,j)))then write(6,*) ' dscal ', me, i, j, a(i,j), b(i,j) call ffflush(6) CCC call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' scale is OK ' write(6,*) endif c c Check the ga_copy function c if (me .eq. 0) then write(6,*) write(6,*)'> Checking copy' write(6,*) call ffflush(6) endif if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) call ga_copy(g_a, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' copy ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy is OK ' write(6,*) endif c call ga_pgroup_sync(grp_id) if (me .eq. 0) then write(6,*) '> Checking scatter/gather (might be slow)... ' call ffflush(6) endif call ga_pgroup_sync(grp_id) c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do j = 1, 10 call ga_pgroup_sync(grp_id) itmp = iran(nproc)-1 if(me.eq.itmp) then do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo enddo call ga_gather(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,v(loop),1) if(v(loop) .ne. a(ilo,jlo))then write(6,*)me,' gather ', ilo,',',jlo,',', a(ilo,jlo) & ,' ',v(loop) call ffflush(6) call ga_error('... exiting ',0) endif enddo endif enddo c if (me.eq.0) then write(6,*) write(6,*) ' gather is OK' write(6,*) call ffflush(6) endif c do j = 1,10 call ga_pgroup_sync(grp_id) if(me.eq.iran(ga_nnodes())-1) then do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo c v(loop) = DSIN(a(ilo,jlo)+b(ilo,jlo)) v(loop) = 1.0 *(ilo+jlo) enddo call ga_scatter(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,w(loop),1) c if(v(loop) .ne. w(loop))then if(w(loop) .ne. 1.0 *(ilo+jlo) )then write(6,*)me,' scatter ', ilo,',',jlo,',',w(loop) & ,' ', 1.0 *(ilo+jlo) call ffflush(6) call ga_error('... exiting ',0) endif enddo endif call ga_pgroup_sync(grp_id) enddo c if (me.eq.0) then write(6,*) write(6,*) ' scatter is OK' write(6,*) endif c call ga_pgroup_sync(grp_id) c c scatter-acc available in GA ver. 3.0 #ifdef GA3 if (me.eq.0) then write(6,*) write(6,*) ' checking scatter-accumulate' write(6,*) endif c crap = drand(1234) call ga_zero(g_a) c do j = 1, n do i = 1, n b(i,j) =0. enddo enddo c x = .1d0 ii =n do jj = 1,1 call ga_pgroup_sync(grp_id) do loop = 1, ii c generate unique i,j pairs 10 continue i = iran(n) j=iran(n) if (found(i,j, iv, jv, loop-1) ) goto 10 iv(loop) = i jv(loop) = j v(loop) = 1.0 *(i+j) b(i,j) = b(i,j) + nproc*x*v(loop) ! update local ref. array enddo call ga_scatter_acc(g_a,v,iv,jv, ii,x) c call ga_pgroup_sync(grp_id) c c check the result c call ga_get(g_a, 1, n, 1,n, a, n) do loop = 1,ii i = iv(loop) j = jv(loop) if(MISMATCHF(a(i,j),b(i,j)))then print *,'Error',i,j,loop,a(i,j),'expected=',b(i,j) * if(me.eq.0)then * do ii=1,loop * print *,'element',ii, iv(ii),jv(ii) * enddo * endif call ga_error('scatter-acc error in trial ',jj) endif enddo call ga_pgroup_sync(grp_id) enddo call ga_pgroup_sync(grp_id) if (me.eq.0) then write(6,*) write(6,*) ' scatter-accumulate is OK' write(6,*) endif #endif c c Delete the global array c status = ga_destroy(g_a) c return end c_____________________________________________________________ subroutine check_wrappers(grp_id) implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" double precision sum integer isum, ibuf(2) integer me, nproc, grp_id, root real fsum c nproc = ga_pgroup_nnodes(grp_id) me = ga_pgroup_nodeid(grp_id) c call ga_pgroup_sync(grp_id) if (me .eq. 0) then write(6,*) write(6,*)'> Checking ga_igop' write(6,*) call ffflush(6) endif ibuf(1) = 1 ibuf(2) = me call ga_pgroup_igop(grp_id,10000, ibuf, 2, '+') if(ibuf(1).ne.nproc)then call ga_error('ga_igop error',isum) endif if(ibuf(2).ne.((nproc-1)*nproc/2))then call ga_error('ga_igop error -2',isum) endif call ga_pgroup_sync(grp_id) if (me.eq.0) then write(6,*) write(6,*) ' ga_igop is OK' write(6,*) endif call ga_pgroup_sync(grp_id) c call ga_pgroup_sync(grp_id) if (me .eq. 0) then write(6,*) write(6,*)'> Checking ga_dgop' write(6,*) call ffflush(6) endif sum = 1d0 * me call ga_pgroup_dgop(grp_id,10000, sum, 1, '+') if(Int(sum).ne.((nproc-1)*nproc/2))then call ga_error('ga_dgop error',Int(sum)) endif call ga_pgroup_sync(grp_id) if (me.eq.0) then write(6,*) write(6,*) ' ga_dgop is OK' write(6,*) endif c call ga_pgroup_sync(grp_id) if (me .eq. 0) then write(6,*) write(6,*)'> Checking ga_sgop' write(6,*) call ffflush(6) endif fsum = 1.0 * me call ga_pgroup_sgop(grp_id,10000, fsum, 1, '+') if(Int(sum).ne.((nproc-1)*nproc/2))then call ga_error('ga_fgop error',Int(sum)) endif call ga_pgroup_sync(grp_id) if (me.eq.0) then write(6,*) write(6,*) ' ga_sgop is OK' write(6,*) endif c call ga_pgroup_sync(grp_id) if (me .eq. 0) then write(6,*) write(6,*)'> Checking ga_brdcst' write(6,*) call ffflush(6) endif if(me.eq.nproc-1)then ibuf(1) = me ibuf(2) = nproc endif root = 7 call ga_pgroup_brdcst(grp_id,1000,ibuf,util_mitob(2),nproc-1) if(ibuf(1).ne.nproc-1)call ga_error('ibuf(1) error',ibuf(1)) if(ibuf(2).ne.nproc)call ga_error('ibuf(2) error',ibuf(2)) call ga_pgroup_sync(grp_id) if (me .eq. 0) then write(6,*) write(6,*)'> ga_brdcst is OK ' write(6,*) call ffflush(6) endif call ga_pgroup_sync(grp_id) return end subroutine check_mem(mem_size) implicit none integer mem_size #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n,nmax,left,need, me,procs,g_a, g_b logical status c if(.not. ga_memory_limited())return me = ga_nodeid() procs = ga_nnodes() nmax = int(dsqrt(dble(mem_size/util_mitob(1)))) left = mem_size/procs - ga_inquire_memory() n = nmax/2 need = util_mdtob(n*n)/procs c if(me.eq.0)then write(6,*)' ' if(ga_uses_ma())then write(6,*)' CHECKING GA MEMORY RESTRICTIONS (MA used)' else write(6,*)' CHECKING GA MEMORY RESTRICTIONS (MA not used)' endif write(6,*)' ' write(6,*)' ' call print_mem_info(n,left, need, mem_size/procs) endif c status = ga_create(MT_DBL, n, n, 'a', 0, 0, g_a) c if(me.eq.0) then if(status) then write(6,*) ' success' else write(6,*) ' failure' endif call ffflush(6) endif c n = nmax left = mem_size/procs - ga_inquire_memory() need = util_mdtob(n*n)/procs if(me.eq.0)then call print_mem_info(n,left, need, mem_size/procs) endif c status = ga_create(MT_DBL, n, n, 'b', 0, 0, g_b) c if(me.eq.0) then if(status) then write(6,*) ' success' else write(6,*) ' failure' endif write(6,*)' ' write(6,*)' ' call ffflush(6) endif status = ga_destroy(g_a) end subroutine print_mem_info(n,left, need, total) implicit none integer n,left, need, total c write(6,*)' ' if(left - need .ge. 0) then write(6,1)n,n 1 format('> Creating array ',i4,' by ',i4,' -- should succeed') else write(6,2)n,n 2 format('> Creating array ',i4,' by ',i4,' -- SHOULD FAIL') endif write(6,3) need, left, total 3 format(' (need ',i7,' and ',i7,' out of ',i7,' bytes are left)') write(6,*)' ' call ffflush(6) c end subroutine my_lock(g_b) implicit none #include "global.fh" integer g_b, val, flag, i logical first_time double precision dummy common /lock/ val common /dum/ dummy data first_time /.true./ c c this awkward initialization is to avoid a weird problem C with block data on SUN if(first_time)then first_time = .false. dummy = .0 endif c val = ga_read_inc(g_b,1,1, 1) 10 call ga_get(g_b, 2,2,1,1, flag, 1) if(flag.eq.val) return c c to reduce memory stress, wait a while before retrying do i = 1, 100 dummy = dummy + .1 enddo goto 10 end subroutine my_unlock(g_b) implicit none #include "global.fh" integer g_b, val common /lock/ val c call ga_put(g_b, 2,2,1,1, val+1, 1) end logical function found(i,j, iv, jv, n) integer n integer i,j, iv(n), jv(n) integer loop found = .false. do loop = 1, n if(i .eq. iv(loop) .and. j .eq.jv(loop))then found = .true. goto 99 endif enddo 99 continue return end subroutine proc_remap() implicit none #include "global.fh" integer proc(100),nproc,i nproc = ga_nnodes() if(nproc.gt.100) $ call ga_error("remap requires<=100 processes",nproc) do i = 1, nproc proc(i) = nproc-i enddo c call ga_register_proclist(proc,nproc) end subroutine util_rfill(n,val,a,ia) implicit none real a(*), val integer n, ia, i c c initialise real array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end subroutine util_dfill(n,val,a,ia) implicit none double precision a(*), val integer n, ia, i c c initialise double precision array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end subroutine util_ifill(n,val,a,ia) implicit none integer n, ia, i, a(*),val c c initialise integer array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end subroutine util_qfill(n,val,a,ia) implicit none double complex a(*), val integer n, ia, i c c initialise double complex array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end ga-5-3/global/testing/random.F0000640005473000001440000001017011417373344015106 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif program main implicit none #include "mafdecls.fh" #include "global.fh" integer dim, minutes integer heap, stack logical status integer proc, me c c**** You can change dimension of the array and duration of the test here parameter (dim=500, minutes =90) c #include "mp3.fh" c c*** Initialize GA call ga_initialize() c proc = ga_nnodes() heap = dim*dim/proc stack= heap c status = ma_init(MT_DBL, stack, heap) if (.not. status) call ga_error( 'ma_init failed',stack+heap) c me = ga_nodeid() if(me.eq.0)then print *, 'Testing random gets and puts' print *, ' array: ',dim,' x ',dim print *, ' using ',proc, ' process(es)' print *, ' test should run for ',minutes,' minutes' call ffflush(6) endif c call check_dbl(dim, minutes) c if(me.eq.0)then print *, 'Test completed succesfuly' endif c if(ga_nodeid().eq.0)call ga_print_stats() call ga_terminate() call MP_FINALIZE() end subroutine check_dbl(dim, minutes) implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n parameter (n = 10) integer dim, minutes double precision a(n,n) double precision t0, elapsed integer g_a integer index, ld integer iran, i,j, loop, maxloop, ilo, ihi, jlo, jhi, range integer nproc, me logical status c c**** maxloop determines number of puts/gest done before checking the clock c parameter (maxloop = 100000) double precision crap iran(i) = int(drand(0)*real(i-1)) + 1 c nproc = ga_nnodes() me = ga_nodeid() crap = drand(real(me)) !different seed for each process if(n .gt. dim) call ga_error('insufficient dimension',dim) c status = ga_create(MT_DBL, dim, dim, 'a', 0, 0, g_a) if (.not. status) then write(6,*) ' ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c c initialize array in place call ga_distribution(g_a,me,ilo, ihi, jlo, jhi) call ga_access(g_a, ilo,ihi,jlo,jhi, index, ld) * print *, 'DBL_MB=', DBL_MB(1), index call fill_local(DBL_MB(index), ihi-ilo+1, jhi-jlo+1, ilo, jlo, ld) c call ga_sync() t0 = util_timer() c if (me .eq. 0) then write(6,21) 21 format(/'> Start ... ') call ffflush(6) endif c c range = dim - n -1 100 continue do loop = 1, maxloop c c always get 100x100 patches ilo = iran(range) jlo = iran(range) ihi = ilo+n-1 jhi = jlo+n-1 c call ga_get(g_a, ilo, ihi, jlo, jhi, a, n) c c check if data OK call check_data(a,n,n, ilo, jlo, n) c c copy the data back call ga_put(g_a, ilo, ihi, jlo, jhi, a, n) #ifdef DEBUG print *, me, 'OK', ilo, ihi, jlo, jhi call ffflush(6) #endif enddo elapsed = util_timer() -t0 if (me.eq.0)then print *, int(100* elapsed/(minutes*60)),'% done' call ffflush(6) endif if(elapsed .lt. real(minutes * 60)) goto 100 c call ga_sync() c if (me.eq.0) then write(6,*) write(6,*) ' everything looks OK' write(6,*) call ffflush(6) endif call ga_sync() status = ga_destroy(g_a) end subroutine fill_local(a, n,m, x, y , ld) implicit none integer ld, n,m, x,y double precision a(ld,*) integer i,j c do j=1,m do i=1,n a(i,j)= real(x+y+i+j-2) enddo enddo end subroutine check_data(a,n,m, x,y, ld) implicit none #include "global.fh" integer ld, n,m, x,y double precision a(ld,*) integer i,j c do j=1,m do i=1,n if(a(i,j) .ne. real(x+y+i+j-2))then print *, 'error:',i+x-1, j+y-1, a(i,j) call ga_error("failed",1) endif enddo enddo end ga-5-3/global/testing/README0000640005473000001440000000625711423627743014414 0ustar d3n000usersThe GA Test Programs ~~~~~~~~~~~~~~~~~~~~ These programs can be built after the GA library is configure and compiled. To build C and Fortran programs type: "make checkprogs" :test.x: general test program for GA :patch.x: tests GA patch operations :testsolve.x: tests linear equation solver based on LU factorization :testeig.x: tests GA eigensolver, matrix multiply, and symmetrization :ndim.x: Fortran test program for n-dim GA :perf.x: tests performance of GA primitives: get, put, accumulate :testc.x: C test program for GA :ntestc.x: C test program for n-dim GA :ga-mpi.x: C test program for GA that demonstrates the interface to MPI :mtest.x: test program for matrix functions :testmult.x: test program for GEMM functions (Eg:dgemm). :elempatch.x: test program for the element-wise functions M4-based N-dim test program =========================== The following are special steps required to configure and build source file for testing of n-dim global arrays based on the M4 source files. The full functionality test might take several hours to complete. Therefore you might want to limit the test to a subset of functionality supported. The configuration steps are: Edit the file ngatest.m4 (this step is optional if you want to test all): 1. Specify data type: - To test Integer, set "m4_test_int" to "yes", otherwise, "no" - To test Double Precision, set "m4_test_dbl" to "yes", otherwise, "no" - To test Double Complex, set "m4_test_dcpl" to "yes", otherwise, "no" 2. Specify range of dimensions to test (upt 7 supported in GA Fortran API): Example: to test from 2 to 4 dimensions, set "m4_dim_from" to 2 and "m4_dim_to" to 4 3. Specify functions to test: Functions that can be tested include: - ga_fill Set "m4_test_GA_FILL" to "yes" to test - nga_get Set "m4_test_NGA_GET" to "yes" to test - nga_put Set "m4_test_NGA_PUT" to "yes" to test - nga_acc Set "m4_test_NGA_ACC" to "yes" to test - nga_scatter Set "m4_test_NGA_SCATTER" to "yes" to test - nga_gather Set "m4_test_NGA_GATHER" to "yes" to test - nga_fill_patch Set "m4_test_NGA_FILL_PATCH" to "yes" to test - nga_copy_patch Set "m4_test_NGA_COPY_PATCH" to "yes" to test - nga_scale_patch Set "m4_test_NGA_SCALE_PATCH" to "yes" to test - nga_add_patch Set "m4_test_NGA_ADD_PATCH" to "yes" to test - nga_idot_patch Set "m4_test_NGA_DOT_PATCH" to "yes" to test - nga_ddot_patch Set "m4_test_NGA_DOT_PATCH" to "yes" to test - nga_zdot_patch Set "m4_test_NGA_DOT_PATCH" to "yes" to test Setting any variable to "no" will bypass testing the corresponding function To compile, type "make global/testing/ngatest.x" from the top-level. Source files: - ngatest.m4 - ngatest_src/ndim.src - ngatest_src/ndim_main.src - ngatest_src/ndim_GA_FILL.src - ngatest_src/ndim_NGA_GET.src - ngatest_src/ndim_NGA_PUT.src - ngatest_src/ndim_NGA_ACC.src - ngatest_src/ndim_NGA_SCATTER.src - ngatest_src/ndim_NGA_GATHER.src - ngatest_src/ndim_NGA_FILL_PATCH.src - ngatest_src/ndim_NGA_COPY_PATCH.src - ngatest_src/ndim_NGA_SCALE_PATCH.src - ngatest_src/ndim_NGA_ADD_PATCH.src - ngatest_src/ndim_NGA_DOT_PATCH.src ga-5-3/global/testing/scan.F0000640005473000001440000005400111605661612014550 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif C C Test the minval, minloc, maxval, maxloc, and enum functions in GA. C program main implicit none #include "mafdecls.fh" #include "global.fh" integer heap, stack, fudge, ma_heap, me, nproc logical status parameter (heap=200*200*4, fudge=100, stack=200*200) c c*** Intitialize a message passing library c #include "mp3.fh" c c*** Initialize GA c c There are 2 choices: ga_initialize or ga_initialize_ltd. c In the first case, there is no explicit limit on memory usage. c In the second, user can set limit (per processor) in bytes. c call ga_initialize() nproc = ga_nnodes() me = ga_nodeid() c we can also use GA_set_memory_limit BEFORE first ga_create call c if(ga_nodeid().eq.0)then print *,' GA initialized ' call ffflush(6) endif c c*** Initialize the MA package c MA must be initialized before any global array is allocated c ma_heap = heap/nproc + fudge status = ma_init(MT_DCPL, stack, ma_heap) if (.not. status) call ga_error('ma_init failed',-1) c if(me.eq.0)then print *, 'using ', nproc, ' process(es)' call ffflush(6) endif c call test_nga_pack() ! Test PACK/UNPACK call test_nga_scan() ! Test SCAN_COPY/SCAN_ADD c if(me.eq.0) call ga_print_stats() c c*** Tidy up the GA package c call ga_terminate() c c*** Tidy up after message-passing library c call MP_FINALIZE() c end subroutine test_nga_pack() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" C integer g_ielm1, g_result1 ! handles to global arrays integer g_ielm2, g_sbit2, g_src2, g_sink2, g_result2 ! handles to global arrays integer g_irowmat, g_icolmat ! handles to global arrays integer g_velm4, g_velm5 ! handles to global arrays C integer ilo, ihi, num integer ilo4, ihi4, num4 integer i, it, count integer me, nproc ! my processor & number of procs integer ndim,dims(1),chunk(1) C integer nelements_max, nen_max parameter (nelements_max=100000, nen_max=4) integer ipack(nelements_max), * jpack(nelements_max), * kpack(nelements_max), * ielm1(nelements_max), * ielm4(nen_max*nelements_max) double precision velm4(nen_max*nelements_max), * velm5(nen_max*nelements_max) c integer ilocmax, ilocmin integer ilocmax_ga, ilocmin_ga integer imax_ga, imin_ga C integer nelements, nen integer isum, icount, itoff double precision result integer i1, i2 C c c*** check parallel environment me = ga_nodeid() nproc = ga_nnodes() if(me.eq.0)then print *, 'testing pack/unpack' call ffflush(6) endif c nelements=20000 nen=4 c c*** create a global 1-D array ndim=1 dims(1)=nen*nelements chunk(1)=min(1,dims(1)/nproc) if (.not. nga_create(MT_INT, ndim, dims, 'ielm1', chunk, $ g_ielm1)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_INT, ndim, dims, 'result1', chunk, $ g_result1)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_INT, ndim, dims, 'sbit2', chunk, $ g_sbit2)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_INT, ndim, dims, 'src2', chunk, $ g_src2)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_INT, ndim, dims, 'sink2', chunk, $ g_sink2)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_INT, ndim, dims, 'result2', chunk, $ g_result2)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_INT, ndim, dims, 'irowmat', chunk, $ g_irowmat)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_INT, ndim, dims, 'icolmat', chunk, $ g_icolmat)) $ call ga_error(' ga_create failed ',0) C if (.not. nga_create(MT_DBL, ndim, dims, 'velm4', chunk, $ g_velm4)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_DBL, ndim, dims, 'velm5', chunk, $ g_velm5)) $ call ga_error(' ga_create failed ',0) c c Enumerate the sbit arrary to get a sequential vector. call ga_fill(g_ielm1,0) call ga_patch_enum(g_ielm1,1,nelements,1,1) c *** ielm1: 1 2 3 4 5 ... nelements ... 0 0 0 0 0 c c*** compute local ilo, ihi, num for each processor call nga_distribution(g_ielm1,me,ilo,ihi,chunk) do i=0,nproc-1 if(me.eq.i) then write(6,'(a,i4,a,i8,a,i8)') 'me: ',me, + ' lo: ', ilo,' hi: ',ihi call ffflush(6) endif call ga_sync() enddo num=ihi-ilo+1 if(ihi.le.0) num=0 if(ihi.gt.nelements) then ihi=nelements num=max(0,ihi-ilo+1) endif if(num.gt.nelements_max) then print *,"Too many elements " goto 9999 endif cbjp print *, 'me=',me, num,ilo,ihi do i=0,nproc-1 if(me.eq.i) then write(6,'(a,i4,a,i8,a,i8,a,i8)') 'me: ',me, + ' num: ',num, ' lo: ', ilo,' hi: ',ihi call ffflush(6) endif call ga_sync() enddo c c*** scatter some values into the global array call ga_fill(g_sbit2,0) call ga_fill(g_src2,0) if(num.gt.0) call nga_get(g_ielm1,ilo,ihi,ielm1,1) do i=ilo,ihi ipack(i-ilo+1)=1+nen*(ielm1(i-ilo+1)-1) jpack(i-ilo+1)=1 kpack(i-ilo+1)=ielm1(i-ilo+1) enddo if(num.gt.0) call NGA_scatter(g_sbit2,jpack,ipack,num) if(num.gt.0) call NGA_scatter(g_src2 ,kpack,ipack,num) c *** sbit2: 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ..... c *** src2: 1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0 6 ..... c c .................................................................. c TEST THE "PACK" FUNCTION. c itoff=nen*nelements call ga_fill(g_sink2,0) call ga_pack(g_src2, g_sink2,g_sbit2,1,itoff,icount) c *** sbit2: 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ..... c *** src2: 1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0 6 ..... c *** sink2: 1 2 3 4 5 ... icount ... 0 0 0 0 0 0 0 0 0 ..... 0 c [NOTE: icount should equal nelements.] if(icount.ne.nelements) then print *,"Wrong number of elements from PACK operation: ", * "count = ",icount," should be = ",nelements endif call ga_add(1,g_ielm1,-1,g_sink2,g_result1) c *** ielm1: 1 2 3 4 5 ... nelements ... 0 0 0 0 0 0 0 0 c *** sink2: 1 2 3 4 5 ... nelements ... 0 0 0 0 0 0 0 0 c *** result1: 0 0 0 0 0 0 0 ... 0 (result1=ielm1-sink2) c*** Find the maximum value and the index of the maximum value call nga_select_elem(g_result1,'max',imax_ga,ilocmax_ga) c*** Find the minimum value and the index of the minimum value call nga_select_elem(g_result1,'min',imin_ga,ilocmin_ga) if(imax_ga.eq.0.and.imin_ga.eq.0) then if (me.eq.0) then print *,"Pack successful" endif else call ga_error("Pack unsuccessful",0) endif call ga_sync() C C .................................................................. C TEST THE "UNPACK" FUNCTION. C itoff=nen*nelements call ga_fill(g_src2,0) call ga_unpack(g_sink2,g_src2,g_sbit2,1,itoff,count) C *** sink2: 1 2 3 4 5 ... icount ... 0 0 0 0 0 0 0 0 0 ..... 0 C *** sbit2: 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ..... C *** src2: 1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0 6 ..... call ga_fill(g_sink2,0) call ga_pack(g_src2, g_sink2,g_sbit2,1,itoff,icount) C *** src2: 1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0 6 ..... C *** sbit2: 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ..... C *** sink2: 1 2 3 4 5 ... icount ... 0 0 0 0 0 0 0 0 0 ..... 0 C [NOTE: icount should equal nelements.] if(icount.ne.nelements) then print *,"Wrong number of elements from PACK operation: ", * "count = ",icount," should be = ",nelements endif call ga_add(1,g_ielm1,-1,g_sink2,g_result1) C *** ielm1: 1 2 3 4 5 ... nelements ... 0 0 0 0 0 0 0 0 C *** sink2: 1 2 3 4 5 ... nelements ... 0 0 0 0 0 0 0 0 C *** result1: 0 0 0 0 0 0 0 ... 0 (result1=ielm1-sink2) c*** Find the maximum value and the index of the maximum value call nga_select_elem(g_result1,'max',imax_ga,ilocmax_ga) c*** Find the minimum value and the index of the minimum value call nga_select_elem(g_result1,'min',imin_ga,ilocmin_ga) if(imax_ga.eq.0.and.imin_ga.eq.0) then if (me.eq.0) then print *,"Unpack successful" endif else print *,"Unpack unsuccessful", imin_ga,ilocmin_ga print *,"Unpack unsuccessful", imax_ga,ilocmax_ga call ga_error("Unpack unsuccessful", -1) endif call ga_sync() C goto 9999 9999 continue C C .................................................................. C return end subroutine test_nga_scan() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" C integer g_ielm1, g_result1 ! handles to global arrays integer g_ielm2, g_sbit2, g_src2, g_sink2, g_result2 ! handles to global arrays integer g_irowmat, g_icolmat ! handles to global arrays integer g_velm4, g_velm5 ! handles to global arrays C integer ilo, ihi, num integer ilo4, ihi4, num4 integer i, j, it, count integer me, nproc ! my processor & number of procs integer ndim,dims(1),chunk(1) C integer nelements_max, nen_max parameter (nelements_max=10000, nen_max=4) integer ipack(nelements_max), * jpack(nelements_max), * kpack(nelements_max), * ielm1(nelements_max), * ielm2(nen_max*nelements_max), * ielm3(nen_max*nelements_max), * ielm4(nen_max*nelements_max), * ielm5(nen_max*nelements_max) integer itest(nen_max*nelements_max), one double precision velm4(nen_max*nelements_max), * velm5(nen_max*nelements_max) c integer ilocmax, ilocmin integer ilocmax_ga, ilocmin_ga integer imax_ga, imin_ga C integer nelements, nen integer isum, icount, itoff double precision result integer i1, i2, ichk C c c*** check parallel environment me = ga_nodeid() nproc = ga_nnodes() c nelements=20000 nelements=20 nen=4 c c*** create a global 1-D array ndim=1 dims(1)=nen*nelements chunk(1)=min(1,dims(1)/nproc) if (.not. nga_create(MT_INT, ndim, dims, 'ielm1', chunk, $ g_ielm1)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_INT, ndim, dims, 'result1', chunk, $ g_result1)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_INT, ndim, dims, 'sbit2', chunk, $ g_sbit2)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_INT, ndim, dims, 'src2', chunk, $ g_src2)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_INT, ndim, dims, 'sink2', chunk, $ g_sink2)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_INT, ndim, dims, 'result2', chunk, $ g_result2)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_INT, ndim, dims, 'irowmat', chunk, $ g_irowmat)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_INT, ndim, dims, 'icolmat', chunk, $ g_icolmat)) $ call ga_error(' ga_create failed ',0) C if (.not. nga_create(MT_DBL, ndim, dims, 'velm4', chunk, $ g_velm4)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_DBL, ndim, dims, 'velm5', chunk, $ g_velm5)) $ call ga_error(' ga_create failed ',0) c c Enumerate the sbit arrary to get a sequential vector. call ga_fill(g_ielm1,0) call ga_patch_enum(g_ielm1,1,nelements,1,1) c *** ielm1: 1 2 3 4 5 ... nelements ... 0 0 0 0 0 c c*** compute local ilo, ihi, num for each processor call nga_distribution(g_ielm1,me,ilo,ihi,chunk) do i=0,nproc-1 if(me.eq.i) then write(6,'(a,i4,a,i8,a,i8)') 'me: ',me, + ' lo: ', ilo,' hi: ',ihi call ffflush(6) endif call ga_sync() enddo num=ihi-ilo+1 if(ihi.le.0) num=0 if(ihi.gt.nelements) then ihi=nelements num=max(0,ihi-ilo+1) endif if(num.gt.nelements_max) then print *,"Too many elements " goto 9999 endif cbjp print *, 'me=',me, num,ilo,ihi do i=0,nproc-1 if(me.eq.i) then write(6,'(a,i4,a,i8,a,i8,a,i8)') 'me: ',me, + ' num: ',num, ' lo: ', ilo,' hi: ',ihi call ffflush(6) endif call ga_sync() enddo c c*** scatter some values into the global array call ga_fill(g_sbit2,0) call ga_fill(g_src2,0) if(num.gt.0) call nga_get(g_ielm1,ilo,ihi,ielm1,1) do i=ilo,ihi ipack(i-ilo+1)=1+nen*(ielm1(i-ilo+1)-1) jpack(i-ilo+1)=1 kpack(i-ilo+1)=ielm1(i-ilo+1) enddo if(num.gt.0) call NGA_scatter(g_sbit2,jpack,ipack,num) if(num.gt.0) call NGA_scatter(g_src2 ,kpack,ipack,num) c *** sbit2: 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ..... c *** src2: 1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0 6 ..... c c .................................................................. c TEST THE "PACK" FUNCTION. c itoff=nen*nelements call ga_fill(g_sink2,0) call ga_pack(g_src2, g_sink2,g_sbit2,1,itoff,icount) c *** sbit2: 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ..... c *** src2: 1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0 6 ..... c *** sink2: 1 2 3 4 5 ... icount ... 0 0 0 0 0 0 0 0 0 ..... 0 c [NOTE: icount should equal nelements.] if(icount.ne.nelements) then print *,"Wrong number of elements from PACK operation: ", * "count = ",icount," should be = ",nelements endif call ga_add(1,g_ielm1,-1,g_sink2,g_result1) c *** ielm1: 1 2 3 4 5 ... nelements ... 0 0 0 0 0 0 0 0 c *** sink2: 1 2 3 4 5 ... nelements ... 0 0 0 0 0 0 0 0 c *** result1: 0 0 0 0 0 0 0 ... 0 (result1=ielm1-sink2) c*** Find the maximum value and the index of the maximum value call nga_select_elem(g_result1,'max',imax_ga,ilocmax_ga) c*** Find the minimum value and the index of the minimum value call nga_select_elem(g_result1,'min',imin_ga,ilocmin_ga) if(imax_ga.eq.0.and.imin_ga.eq.0) then if (me.eq.0) then print *,"Pack successful" endif else call ga_error("Pack unsuccessful",-1) endif call ga_sync() c c .................................................................. c TEST THE "UNPACK" FUNCTION. c itoff=nen*nelements call ga_fill(g_src2,0) call ga_unpack(g_sink2,g_src2,g_sbit2,1,itoff,count) * call ga_unpack(g_src2,g_sink2,g_sbit2,1,nelements,count) C *** sink2: 1 2 3 4 5 ... icount ... 0 0 0 0 0 0 0 0 0 ..... 0 C *** sbit2: 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ..... C *** src2: 1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0 6 ..... call ga_fill(g_sink2,0) call ga_pack(g_src2, g_sink2,g_sbit2,1,itoff,icount) * call ga_pack(g_sink2,g_src2,g_sbit2,1,itoff,icount) C *** sbit2: 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ..... C *** src2: 1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0 6 ..... C *** sink2: 1 2 3 4 5 ... icount ... 0 0 0 0 0 0 0 0 0 ..... 0 C [NOTE: icount should equal nelements.] if(icount.ne.nelements) then print *,"Wrong number of elements from PACK operation: ", * "count = ",icount," should be = ",nelements endif call ga_add(1,g_ielm1,-1,g_sink2,g_result1) C *** ielm1: 1 2 3 4 5 ... nelements ... 0 0 0 0 0 0 0 0 C *** sink2: 1 2 3 4 5 ... nelements ... 0 0 0 0 0 0 0 0 C *** result1: 0 0 0 0 0 0 0 ... 0 (result1=ielm1-sink2) c*** Find the maximum value and the index of the maximum value call nga_select_elem(g_result1,'max',imax_ga,ilocmax_ga) c*** Find the minimum value and the index of the minimum value call nga_select_elem(g_result1,'min',imin_ga,ilocmin_ga) if(imax_ga.eq.0.and.imin_ga.eq.0) then if (me.eq.0) then print *,"Unpack successful" endif else call ga_error("Unpack unsuccessful",-1) endif call ga_sync() * call ga_print(g_src2) c c .................................................................. c TEST THE SCAN COPY FUNCTION. c c*** compute local ilo, ihi, num for each processor call nga_distribution(g_irowmat,me,ilo4,ihi4,chunk) num4=ihi4-ilo4+1 if(ihi.le.0) num4=0 if(num4.gt.nen*nelements_max) then print *,"Too many elements " goto 9999 endif cbjp print *, 'me=',me, num4,ilo4,ihi4 do i=0,nproc-1 if(me.eq.i) then write(6,'(a,i4,a,i8,a,i8,a,i8)') 'me: ',me, + ' num4: ',num4, ' lo4: ', ilo4,' h4i: ',ihi4 call ffflush(6) endif call ga_sync() enddo call ga_fill(g_irowmat,-1) call GA_scan_copy(g_src2, g_irowmat, g_sbit2,1,itoff) c *** sbit2: 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ..... c *** src2: 1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0 6 ..... c *** irowmat: 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 ..... c call nga_get(g_irowmat,ilo4,ihi4,ielm4,1) do i=ilo4,ihi4 velm4(i-ilo4+1)=1.0d+00 enddo call ga_fill(g_velm4,0.0d+00) cbjp print *, num4, (ielm4(i),i=1,min(4,num4)) do j=0,nproc-1 if(me.eq.j) then write(6,'(a,i4,a,i8,a,i8,a,i8)') 'me: ',me, ' num4: ',num4, + ' ielm4: ', (ielm4(i),i=1,min(4,num4)) call ffflush(6) endif call ga_sync() enddo call nga_scatter_acc(g_velm4,velm4,ielm4,num4,1.0d+00) C *** velm4: 4 4 4 4 4 4 4 4 4 4 ... nelements result=ga_ddot(g_velm4,g_velm4) if(result.eq.nen*nen*nelements) then if (me.eq.0) then print *,"Scan_copy successful." endif else call ga_error("Scan_copy failed.",-1) endif call ga_sync() c c .................................................................. c TEST THE SCAN ADD FUNCTION. c call ga_fill(g_src2,1) call ga_fill(g_icolmat,0) * call ga_print(g_icolmat) * call ga_print(g_src2) * call ga_print(g_sbit2) c if (me.eq.0) then c one = 1 c call nga_get(g_src2,one,dims,itest,one) c write(6,'(25i4)') (itest(i),i=1,dims(1)) c write(6,*) c call nga_get(g_sbit2,one,dims,itest,one) c write(6,'(25i4)') (itest(i),i=1,dims(1)) c endif call ga_sync call GA_scan_add(g_src2, g_icolmat,g_sbit2,1,itoff,0) c if (me.eq.0) then c one = 1 c write(6,*) c call nga_get(g_icolmat,one,dims,itest,one) c write(6,'(25i4)') (itest(i),i=1,dims(1)) c endif c *** sbit2: 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ..... c *** src2: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 c *** icolmat: 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 ..... call ga_fill(g_velm4,1.0d+00) call nga_get(g_icolmat,ilo4,ihi4,ielm4,1) do i=ilo4,ihi4 velm4(i-ilo4+1)=ielm4(i-ilo4+1) velm5(i-ilo4+1)=1.0d+00 enddo call nga_put(g_velm4,ilo4,ihi4,velm4,1) call nga_put(g_velm5,ilo4,ihi4,velm5,1) result=ga_ddot(g_velm4,g_velm5) c *** velm4: 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 ..... c *** velm5: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ..... c *** result = sum(velm4 * velm5) = (1+2+3+4+...+nen)*nelements isum=0 do i=1,nen isum=isum+i enddo if(result.eq.isum*nelements) then if (me.eq.0) then print *,"Scan_add successful." endif else call ga_error("Scan_add failed.",-1) endif call ga_sync() call ga_sync call GA_scan_add(g_src2, g_icolmat,g_sbit2,1,itoff,1) c *** sbit2: 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ..... c *** src2: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 c *** icolmat: 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 ..... c if (me.eq.0) then c one = 1 c write(6,*) c call nga_get(g_icolmat,one,dims,itest,one) c write(6,'(25i4)') (itest(i),i=1,dims(1)) c endif call nga_get(g_src2, 1, itoff, ielm2, one) call nga_get(g_sbit2, 1, itoff, ielm3, one) call nga_get(g_icolmat, 1, itoff, ielm4, one) call nga_get(g_icolmat, 1, itoff, ielm5, one) ichk = 1 do i = 1, itoff if (ielm3(i).eq.1.or.i.eq.1) then ielm4(i) = 0 else ielm4(i) = ielm4(i-1) + ielm2(i-1) endif if (ielm4(i).ne.ielm5(i)) then ichk = 0 endif end do cc ichk=ga_idot(g_src2,g_icolmat) isum = 0 do i=1,nen isum=isum+i-1 enddo cc if (ichk.eq.nelements*isum) then if (ichk.eq.1) then if (me.eq.0) then print *,"Exclusive scan_add successful." endif else call ga_error("Exclusive scan_add failed.",-1) endif c goto 9999 9999 continue c c .................................................................. c return end ga-5-3/global/testing/blktest.F0000640005473000001440000006640411507162115015301 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c vector boxes lack arithmetic precision #ifdef CRAY_YMP # define THRESH 1d-10 #elif defined(FUJITSU) # define THRESH 1d-12 # define THRESHF 1e-5 #else # define THRESH 1d-13 # define THRESHF 1e-5 #endif #define MISMATCH(x,y) abs(x-y)/max(1d0,abs(x)).gt.THRESH #define MISMATCHF(x,y) abs(x-y)/max(1.0,abs(x)).gt.THRESHF #define USE_SCALAPACK 0 #define SMALL_TEST 1 program main implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" integer heap, stack, fudge, ma_heap, me integer nmax, DIM #if SMALL_TEST parameter (nmax = 8, DIM = 2) #else parameter (nmax = 2375, DIM = 2) #endif integer ndim, nprocs, type, length integer g_a, g_b, g_c, g_d, g_e, g_f, g_h, g_i, g_j, inode MA_ACCESS_INDEX_TYPE index integer i, j, k, nb, dims(7) integer lo(7), hi(7), tlo(7), thi(7), t2lo(7), t2hi(7) integer block_list(10000), block_map(10000), nblock integer chunk(7), ld(7), block(7), proc_grid(7) integer a(nmax, nmax),b(nmax,nmax),e(nmax,nmax),f(nmax,nmax) integer skip(7), i_one, ialpha, ibeta, check_int double precision c(nmax,nmax),d(nmax,nmax), one, ddot double precision alpha, beta logical status parameter (heap=400*400*4, fudge=100, stack=400*400*4) c c*** Intitialize a message passing library c #include "mp3.fh" c c*** Initialize GA c call ga_initialize() me = ga_nodeid() c ma_heap = heap + fudge c if(me.eq.0)then write(6,100) call ffflush(6) 100 format(' GA initialized') endif c c*** Initialize the MA package c MA must be initialized before any global array is allocated c status = ma_init(MT_DBL, stack, ma_heap) if (.not. status) call ga_error('ma_init failed',-1) c if(me.eq.0)then write(6,101) ga_nnodes() call ffflush(6) 101 format(' Using ',i3,' process(es)') endif c c Create GA c ndim = DIM do i = 1, ndim dims(i) = nmax ld(i) = nmax lo(i) = 1 hi(i) = nmax chunk(i) = -1 #if SMALL_TEST block(i) = 2 #else block(i) = 87 #endif end do proc_grid(1) = 2 proc_grid(2) = ga_nnodes()/2 c g_a = ga_create_handle() call ga_set_data(g_a, ndim, dims, MT_F_INT) call ga_set_chunk(g_a, chunk) #if USE_SCALAPACK call ga_set_block_cyclic_proc_grid(g_a, block, proc_grid) #else call ga_set_block_cyclic(g_a, block) #endif status = ga_allocate(g_a) call ga_zero(g_a) c g_b = ga_create_handle() call ga_set_data(g_b, ndim, dims, MT_F_DBL) call ga_set_chunk(g_b, chunk) #if USE_SCALAPACK call ga_set_block_cyclic_proc_grid(g_b, block, proc_grid) #else call ga_set_block_cyclic(g_b, block) #endif status = ga_allocate(g_b) call ga_zero(g_b) c g_c = ga_create_handle() call ga_set_data(g_c, ndim, dims, MT_F_INT) call ga_set_chunk(g_c, chunk) status = ga_allocate(g_c) call ga_zero(g_c) c g_d = ga_create_handle() call ga_set_data(g_d, ndim, dims, MT_F_INT) call ga_set_chunk(g_d, chunk) #if USE_SCALAPACK call ga_set_block_cyclic_proc_grid(g_d, block, proc_grid) #else call ga_set_block_cyclic(g_d, block) #endif status = ga_allocate(g_d) call ga_zero(g_d) c g_e = ga_create_handle() call ga_set_data(g_e, ndim, dims, MT_F_DBL) call ga_set_chunk(g_e, chunk) #if USE_SCALAPACK call ga_set_block_cyclic_proc_grid(g_e, block, proc_grid) #else call ga_set_block_cyclic(g_e, block) #endif status = ga_allocate(g_e) call ga_zero(g_e) c g_f = ga_create_handle() call ga_set_data(g_f, ndim, dims, MT_F_DBL) call ga_set_chunk(g_f, chunk) #if USE_SCALAPACK call ga_set_block_cyclic_proc_grid(g_f, block, proc_grid) #else call ga_set_block_cyclic(g_f, block) #endif status = ga_allocate(g_f) call ga_zero(g_f) c g_h = ga_create_handle() call ga_set_data(g_h, ndim, dims, MT_F_DBL) call ga_set_chunk(g_h, chunk) status = ga_allocate(g_h) call ga_zero(g_h) c g_i = ga_create_handle() call ga_set_data(g_i, ndim, dims, MT_F_DBL) call ga_set_chunk(g_i, chunk) status = ga_allocate(g_i) call ga_zero(g_i) c g_j = ga_create_handle() call ga_set_data(g_j, ndim, dims, MT_F_DBL) call ga_set_chunk(g_j, chunk) status = ga_allocate(g_j) call ga_zero(g_j) c if(me.eq.0)then write(6,102) call ffflush(6) 102 format(' Completed allocation of GAs') endif c c Initialize local arrays c #if SMALL_TEST tlo(1) = 3 thi(1) = 4 tlo(2) = 4 thi(2) = 7 t2lo(1) = 4 t2hi(1) = 5 t2lo(2) = 5 t2hi(2) = 8 #else tlo(1) = 3 thi(1) = 2277 tlo(2) = 4 thi(2) = 1832 t2lo(1) = 4 t2hi(1) = 2278 t2lo(2) = 5 t2hi(2) = 1833 #endif c one = 1.0d00 i_one = 1 k = 1 do i = 1, nmax do j = 1, nmax a(i,j) = k b(i,j) = 0 c(i,j) = dble(k) d(i,j) = 0.0d00 e(i,j) = 0 f(i,j) = 0 k = k + 1 end do end do c c Test PUT and GET c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Put and GA_Get...' write(6,*) endif c c Copy data from local array to global array c if (me.eq.0) then call nga_put(g_a,lo,hi,a,ld) endif c c Copy data from global array back to local array c call ga_sync call nga_get(g_a,lo,hi,e,ld) call ga_sync c do j = 1, nmax do i = 1, nmax if (a(i,j).ne.e(i,j)) then write(6,103) me,a(i,j),e(i,j) call ga_error('GA PUT and GET failed',me) endif e(i,j) = 0 end do end do 103 format('proc: ',i4,' a(i,j): ',i8,' e(i,j): ',i8) if (me.eq.0) then write(6,*) write(6,*) 'GA_Put and GA_Get are OK' write(6,*) endif c c Test ga_add c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Add...' write(6,*) endif if (me.eq.0) then call nga_put(g_c,lo,hi,a,ld) endif ialpha = 1 ibeta = -1 call ga_add(ialpha, g_a, ibeta, g_c, g_c) if (ga_idot(g_c,g_c).eq.0) then if(me.eq.0)then write(6,*) write(6,*) 'GA_Add operation for regular and block-cyclic', + ' arrays is OK' write(6,*) call ffflush(6) endif else if(me.eq.0)then write(6,*) write(6,*) 'GA_Add operation for regular and block-cyclic', + ' arrays is not OK' write(6,*) call ga_error('exiting', 1) call ffflush(6) endif endif c c Check add between two block-cyclic arrays c if (me.eq.0) then call nga_put(g_d,lo,hi,a,ld) endif call ga_add(ialpha, g_a, ialpha, g_d, g_d) c c Copy data to local buffer and then back to regular array c call nga_get(g_d,lo,hi,b,ld) if (me.eq.0) then call nga_get(g_c,lo,hi,b,ld) endif call ga_sync if (ga_idot(g_c,g_c).eq.0) then if(me.eq.0)then write(6,*) write(6,*) 'GA_Add operation for two block-cyclic', + ' arrays is OK' write(6,*) call ffflush(6) endif else if(me.eq.0)then write(6,*) write(6,*) 'GA_Add operation for two block-cyclic arrays', + ' is not OK' write(6,*) call ga_error('exiting', 1) call ffflush(6) endif endif c c Check to find which blocks correspond to local patch c #if SMALL_TEST if (me.eq.0) then write(6,*) write(6,*) 'Check nga_locate_region and nga_locate_num_blocks' write(6,*) 'functions' write(6,*) write(6,*) 'Printing original matrix' do i = 1, min(nmax,8) write(6,200) (a(i,j),j=1,min(nmax,8)) end do endif status=nga_locate_region(g_a,tlo,thi,block_map,block_list,nblock) nb = nga_locate_num_blocks(g_a,tlo,thi) if (me.eq.0) then write(6,*) write(6,111) nb do i = 1, nblock write(6,110) i,block_list(i),block_map(4*(i-1)+1), + block_map(4*(i-1)+3),block_map(4*(i-1)+2), + block_map(4*(i-1)+4) end do endif 110 format(i3,' block(',i3,') tlo(1): ',i3,' thi(1): ',i3, + ' tlo(2): ',i3,' thi(2): ',i3) 111 format(' Number of blocks: ',i3) if (me.eq.0) then call nga_access_block_segment(g_a,me,index,length) call print_block(int_mb(index),length) endif #endif c c Check onesided accumulate c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Acc...' write(6,*) endif if (me.eq.0) then call nga_acc(g_b,lo,hi,c,ld,one) endif call ga_sync if (me.eq.0) then call nga_acc(g_b,lo,hi,c,ld,one) endif call ga_sync if (me.eq.0) then call nga_put(g_h,lo,hi,c,ld) endif alpha = 1.0 beta = -2.0 call ga_add(alpha,g_b,beta,g_h,g_h) if (ga_ddot(g_h,g_h).eq.0.0d00) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Acc is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Acc is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c Check copy c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Copy...' write(6,*) endif call ga_copy(g_a, g_c) call ga_copy(g_c, g_d) call ga_add(ialpha,g_a,ibeta,g_d,g_c) if (ga_idot(g_c,g_c).eq.0) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Copy is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Copy is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c Check zero c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Zero...' write(6,*) call nga_get(g_a,lo,hi,a,ld) endif call ga_sync call ga_zero(g_a) call ga_copy(g_a,g_c) if (ga_idot(g_c,g_c).eq.0) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Zero is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Zero is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c Check scale c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Scale...' write(6,*) endif if (me.eq.0) then call nga_put(g_b,lo,hi,c,ld) call nga_put(g_h,lo,hi,c,ld) endif call ga_scale(g_b,2.0d00) call ga_scale(g_h,2.0d00) alpha = 1.0d00 beta = -1.0d00 call ga_add(alpha,g_b,beta,g_h,g_h) if (ga_ddot(g_h,g_h).eq.0.0d00) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Scale is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Scale is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c Check fill c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Fill...' write(6,*) endif call ga_fill(g_a,1) call ga_fill(g_c,1) call ga_add(ialpha,g_a,ibeta,g_c,g_c) if (ga_idot(g_c,g_c).eq.0) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Fill is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Fill is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c Check zero_patch c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Zero_patch...' write(6,*) endif call ga_copy(g_a,g_c) call nga_zero_patch(g_a,tlo,thi) call nga_zero_patch(g_c,tlo,thi) call ga_add(ialpha,g_a,ibeta,g_c,g_c) if (ga_idot(g_c,g_c).eq.0) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Zero_patch is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Zero_patch is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c Check fill_patch c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Fill_patch...' write(6,*) endif call ga_copy(g_a,g_c) call nga_fill_patch(g_a,tlo,thi,2) call nga_fill_patch(g_c,tlo,thi,2) call ga_add(ialpha,g_a,ibeta,g_c,g_c) if (ga_idot(g_c,g_c).eq.0) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Fill_patch is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Fill_patch is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c Check scale_patch c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Scale_patch...' write(6,*) endif call ga_copy(g_a,g_c) call nga_scale_patch(g_a,tlo,thi,2) call nga_scale_patch(g_c,tlo,thi,2) call ga_add(ialpha,g_a,ibeta,g_c,g_c) if (ga_idot(g_c,g_c).eq.0) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Scale_patch is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Scale_patch is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c Check copy_patch c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Copy_patch...' write(6,*) endif call ga_fill(g_a,1) call ga_fill(g_c,1) call nga_fill_patch(g_a,tlo,thi,2) call nga_copy_patch('n',g_a,tlo,thi,g_c,t2lo,t2hi) call ga_fill(g_a,1) call nga_fill_patch(g_a,t2lo,t2hi,2) call ga_add(ialpha,g_a,ibeta,g_c,g_c) if (ga_idot(g_c,g_c).eq.0) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Copy_patch from block-cyclic to regular is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Copy_patch from block-cyclic to regular is', + ' not OK' write(6,*) call ga_error('exiting', 1) endif endif call ga_fill(g_a,1) call ga_fill(g_c,1) call nga_fill_patch(g_c,tlo,thi,2) call nga_copy_patch('n',g_c,tlo,thi,g_a,t2lo,t2hi) call ga_fill(g_c,1) call nga_fill_patch(g_c,t2lo,t2hi,2) call ga_add(ialpha,g_a,ibeta,g_c,g_c) if (ga_idot(g_c,g_c).eq.0) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Copy_patch from regular to block-cyclic is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Copy_patch from regular to block-cyclic is', + ' not OK' write(6,*) call ga_error('exiting', 1) endif endif c c test ga_add_patch c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Add_patch...' write(6,*) endif call ga_zero(g_b) call ga_zero(g_e) call ga_zero(g_f) call ga_zero(g_h) call ga_zero(g_i) call ga_zero(g_j) if (me.eq.0) then call nga_put(g_e,t2lo,t2hi,c,ld) call nga_put(g_f,t2lo,t2hi,c,ld) call nga_put(g_i,t2lo,t2hi,c,ld) call nga_put(g_j,t2lo,t2hi,c,ld) endif call ga_sync call nga_add_patch(one,g_e,t2lo,t2hi,one,g_f,tlo,thi,g_b,tlo,thi) call nga_add_patch(one,g_i,t2lo,t2hi,one,g_j,tlo,thi,g_h,tlo,thi) call ga_add(alpha,g_b,beta,g_h,g_i) if (ga_ddot(g_i,g_i).eq.0.0d00) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Add_patch is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Add_patch is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c test ga_ddot c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Ddot...' write(6,*) endif call ga_fill(g_b, 2.0d00) call ga_fill(g_b, 2.0d00) ddot = ga_ddot(g_b, g_b) if (me.eq.0) then write(6,112) ddot,dble(nmax*nmax*4) endif 112 format(' Value of DDOT: ',f12.2,' Expected value: ',f12.2) if (me.eq.0) write(6,*) c c test ga_ddot_patch c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Ddot_patch...' write(6,*) endif ddot = nga_ddot_patch(g_b, 'n', tlo, thi, g_b, 'n', tlo, thi) if (me.eq.0) then write(6,113) ddot,dble((thi(1)-tlo(1)+1)*(thi(2)-tlo(2)+1)*4) endif 113 format(' Value of DDOT_PATCH: ',f12.2,' Expected value: ',f12.2) c c test ga_abs_value_patch c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Abs_patch...' write(6,*) endif call ga_fill(g_a,-1) call ga_abs_value_patch(g_a, tlo, thi) call ga_fill(g_c,-1) call ga_abs_value_patch(g_c, tlo, thi) call ga_add(ialpha,g_a,ibeta,g_c,g_c) if (ga_idot(g_c,g_c).eq.0) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Abs_value_patch is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Abs_value_patch is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c test ga_elem_multiply c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Elem_multiply...' write(6,*) endif call ga_fill(g_b, 2.0d00) call ga_fill(g_e, 3.0d00) call ga_zero(g_f) call ga_elem_multiply(g_b, g_e, g_f) call ga_fill(g_h, 2.0d00) call ga_fill(g_i, 3.0d00) call ga_zero(g_j) call ga_elem_multiply(g_h, g_i, g_j) call ga_add(alpha,g_f,beta,g_j,g_h) if (ga_ddot(g_h,g_h).eq.0.0d00) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Elem_multiply is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Elem_multiply is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c test ga_elem_divide_patch c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Elem_divide_patch...' write(6,*) endif call ga_fill(g_b, 3.0d00) call ga_elem_divide_patch(g_f,t2lo,t2hi,g_e,tlo,thi,g_b,tlo,thi) call ga_fill(g_h, 3.0d00) call ga_elem_divide_patch(g_j,t2lo,t2hi,g_i,tlo,thi,g_h,tlo,thi) call ga_add(alpha,g_b,beta,g_h,g_h) if (ga_ddot(g_h,g_h).eq.0.0d00) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Elem_divide_patch is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Elem_divide_patch is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c test strided get c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Strided_get...' write(6,*) endif skip(1) = 2 skip(2) = 2 call ga_zero(g_a) call ga_zero(g_c) call nga_get(g_a,lo,hi,a,ld) call nga_get(g_c,lo,hi,b,ld) call ga_fill(g_a, 1) call ga_fill(g_c, 1) if (me.eq.0) then call nga_strided_get(g_a,lo,hi,skip,a,ld) call nga_strided_get(g_c,lo,hi,skip,b,ld) endif call ga_sync nb = 0 if (me.eq.0) then do i = 1, nmax do j = 1, nmax if (a(i,j).ne.b(i,j)) nb = nb + 1 end do end do if (nb.eq.0) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Strided_get is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Strided_get is not OK' write(6,*) call ga_error('exiting', 1) endif endif endif c c test strided put c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Strided_put...' write(6,*) endif call ga_fill(g_a, 1) if (me.eq.0) call nga_get(g_a,lo,hi,a,ld) call ga_zero(g_a) call ga_fill(g_c, 1) if (me.eq.0) call nga_get(g_c,lo,hi,b,ld) call ga_zero(g_c) if (me.eq.0) then call nga_strided_put(g_a,lo,hi,skip,a,ld) call nga_strided_put(g_c,lo,hi,skip,b,ld) endif call ga_sync call ga_add(ialpha,g_a,ibeta,g_c,g_c) if (ga_idot(g_c,g_c).eq.0) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Strided_put is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Strided_put is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c test strided accumulate c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Strided_acc...' write(6,*) endif call ga_fill(g_b, 1.0d00) call nga_get(g_b,lo,hi,c,ld) call ga_fill(g_h, 1.0d00) call nga_get(g_h,lo,hi,d,ld) call ga_sync if (me.eq.0) then call nga_strided_acc(g_b,lo,hi,skip,c,ld,one) call nga_strided_acc(g_h,lo,hi,skip,d,ld,one) endif call ga_sync call ga_add(alpha,g_b,beta,g_h,g_h) if (ga_ddot(g_h,g_h).eq.0.0d00) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Strided_acc is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Strided_acc is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c test transpose c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_transpose...' write(6,*) endif k = 0 do i = 1, nmax do j = 1, nmax k = k+1 c(i,j) = dble(k) end do end do if (me.eq.0) then call nga_put(g_b,lo,hi,c,ld) call nga_put(g_h,lo,hi,c,ld) endif call ga_sync call ga_transpose(g_b,g_i) call ga_transpose(g_h,g_j) call ga_add(alpha,g_i,beta,g_j,g_h) if (ga_ddot(g_h,g_h).eq.0.0d00) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Transpose is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Transpose is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c test symmetrize c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_symmetrize...' write(6,*) endif if (me.eq.0) then call nga_put(g_b,lo,hi,c,ld) call nga_put(g_h,lo,hi,c,ld) endif call ga_sync call ga_symmetrize(g_b) call ga_symmetrize(g_h) call ga_add(alpha,g_b,beta,g_h,g_h) if (ga_ddot(g_h,g_h).eq.0.0d00) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Symmetrize is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Symmetrize is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c test periodic get c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Periodic_get...' write(6,*) endif tlo(1) = lo(1) + 2 thi(1) = hi(1) + 2 tlo(2) = lo(2) + 2 thi(2) = hi(2) + 2 k = 0 do i = 1, nmax do j = 1, nmax k = k + 1 a(i,j) = k end do end do if (me.eq.0) then call nga_put(g_a,lo,hi,a,ld) call nga_put(g_c,lo,hi,a,ld) endif call ga_sync if (me.eq.0) then call nga_periodic_get(g_a,tlo,thi,a,ld) call nga_periodic_get(g_c,tlo,thi,b,ld) endif call ga_sync nb = 0 if (me.eq.0) then do i = 1, nmax do j = 1, nmax if (a(i,j).ne.b(i,j)) nb = nb + 1 end do end do if (nb.eq.0) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Periodic_get is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Periodic_get is not OK' write(6,*) call ga_error('exiting', 1) endif endif endif c c test periodic put c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Periodic_put...' write(6,*) endif k = 0 do i = 1, nmax do j = 1, nmax k = k + 1 a(i,j) = k end do end do if (me.eq.0) then call nga_periodic_put(g_a,tlo,thi,a,ld) call nga_periodic_put(g_c,tlo,thi,a,ld) endif call ga_sync call ga_add(ialpha,g_a,ibeta,g_c,g_c) if (ga_idot(g_c,g_c).eq.0) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Periodic_put is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Periodic_put is not OK' write(6,*) call ga_error('exiting', 1) endif endif c c test periodic accumulate c if (me.eq.0) then write(6,*) write(6,*) 'Testing GA_Periodic_acc...' write(6,*) endif call ga_fill(g_b, 1.0d00) call ga_fill(g_h, 1.0d00) call ga_sync if (me.eq.0) then call nga_periodic_acc(g_b,tlo,thi,c,ld,one) call nga_periodic_acc(g_h,tlo,thi,c,ld,one) endif call ga_sync call ga_add(alpha,g_b,beta,g_h,g_h) if (ga_ddot(g_h,g_h).eq.0.0d00) then if (me.eq.0) then write(6,*) write(6,*) 'GA_Periodic_acc is OK' write(6,*) endif else if (me.eq.0) then write(6,*) write(6,*) 'GA_Periodic_acc is not OK' write(6,*) call ga_error('exiting', 1) endif endif 200 format(8i8) c 300 format(8f8.1) if (me.eq.0) then write(6,302) endif 302 format(' Finished tests: success') status = ga_destroy(g_a) status = ga_destroy(g_b) status = ga_destroy(g_c) status = ga_destroy(g_d) status = ga_destroy(g_e) status = ga_destroy(g_f) call ga_terminate() c c*** Tidy up after message-passing library c call MP_FINALIZE() c stop end c subroutine print_block(a,length) implicit none #include "mafdecls.fh" #include "global.fh" integer length, i, j integer a(length) write(6,*) write(6,200) do i=1, 4 write(6,100) (a(4*(j-1)+i), j=1,4) 100 format(8i8) end do 200 format(' Write contents of processor') return end ga-5-3/global/testing/perfmod.F0000640005473000001440000002153211400012704015244 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c $Id: perfmod.F,v 1.4 2000-05-25 01:09:20 d3h325 Exp $ c------------------------------------------------------------------------ c Program perfmod.x is used to test performance of GA put,get,accumulate | c It has to be executed on four processors. | c remote operations access data on processes 1,2,3 in the round-robin way| c------------------------------------------------------------------------ c #define SLEEP sleep program perfmod implicit none #include "mafdecls.fh" #include "global.fh" integer heap,stack c c*** Intitialize a message passing library c #include "mp3.fh" c c Intitialize the GA package c call ga_initialize() c if(ga_nnodes().ne.4 .and. ga_nodeid().eq.0) $ call ga_error('Must be run with 4 GA processes',ga_nnodes()) c c*** Initialize the MA package heap = 450000 stack =heap if (.not. ma_init(MT_DBL, heap, stack)) $ call ga_error("ma init failed",heap+stack) c call testit() c if(ga_nodeid().eq.0) print *, 'All tests successful' c call ga_terminate() c call MP_FINALIZE() end subroutine testit() implicit none #include "mafdecls.fh" #include "global.fh" c c integer n, nn, num_chunks parameter (n = 710, nn = n*n/4, num_chunks=12) double precision buf(nn) c integer g_a integer ilo, ihi, jlo, jhi integer nproc, me, loop integer chunk(num_chunks) data chunk /1,3,4,9,16,30,64,91,128,171,256,353/ c nproc = ga_nnodes() me = ga_nodeid() c c*** Create global array if (.not. ga_create(MT_DBL, n, n, 'a', 0, 0, g_a)) $ call ga_error(' ga_create failed ',n) c do loop=1,nn buf(loop) = .01d0 enddo call ga_zero(g_a) c if (me .eq. 0) then write(*,*)' ' print *,'> Performance of ga_get, ga_put & ga_acc n = ', n print *,' ' endif c c do loop=1,2 c c*** local ops c call ga_distribution(g_a, me, ilo, ihi, jlo, jhi) call TestPutGetAcc & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo, jhi, .true.) c c*** remote ops c call TestPutGetAcc & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo, jhi,.false.) c enddo end subroutine TestPutGetAcc & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo,jhi, local) implicit none #include "global.fh" #include "testutil.fh" integer num_chunks, chunk(num_chunks) integer n, ilo, ihi, jlo,jhi,g_a double precision buf(*), tg, tp, ta double precision time_acc, time_get, time_put logical local c integer me integer loop, jump, count, bytes c me = ga_nodeid() if (me .eq. 0) then write(6,*)' ' if(local) then write(6,'(21X,8hACCESS [,i3,1h:,i4,1h,,i3,1h:,i4,1h])') & ilo,ihi,jlo,jhi else write(6,'(21X,6hACCESS , 2x, 18Hremote section )') endif write(6,*)'bytes loop get put', & ' accumulate' call flush(6) endif call ga_sync() c do loop = 1, num_chunks bytes = util_mdtob(1)*chunk(loop)*chunk(loop) !how much data is accessed jump = n/(60*loop) ! jump distance between consecutive patches c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, n , 1d0*me*loop) if (me .eq. 0) then tg=time_get(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(2) endif c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, n , 1d0*me*loop) if (me .eq. 0) then tp=time_put(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(2) endif c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, n , 1d0*me*loop) if (me .eq. 0) then ta=time_acc(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(2) endif c if (me .eq. 0) then write(6,77)bytes, count, tg, 1d-6*bytes/tg, & tp, 1d-6*bytes/tp, ta, 1d-6*bytes/ta call flush(6) endif enddo c 77 format(i6, i5, 3(d10.3, d9.2,'MB/s')) end double precision function & time_acc(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je logical local integer rows, cols, indx, shifti(3), shiftj(3) c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 cols = je - js + 1 shifti(1) = rows shifti(2) = 0 shifti(3) = rows shiftj(1) = 0 shiftj(2) = cols shiftj(3) = cols seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 do jlo = js, je -chunk-jump +1, chunk+jump jhi = jlo + chunk -1 count = count + 1 if (local) then call ga_acc(g_a, ilo, ihi, jlo, jhi, buf, chunk, 1d0) else indx = Mod(count,3) + 1 call ga_acc(g_a, ilo+shifti(indx), ihi+shifti(indx), $ jlo+shiftj(indx), jhi+shiftj(indx), $ buf, chunk, 1d0) endif enddo enddo seconds = util_timer() - seconds c time_acc = seconds/count end double precision function & time_get(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je integer rows, cols, indx, shifti(3), shiftj(3) logical local c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 cols = je - js + 1 shifti(1) = rows shifti(2) = 0 shifti(3) = rows shiftj(1) = 0 shiftj(2) = cols shiftj(3) = cols seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 do jlo = js, je -chunk-jump +1, chunk+jump jhi = jlo + chunk -1 count = count + 1 if (local) then call ga_get(g_a, ilo, ihi, jlo, jhi, buf, chunk) else indx = Mod(count,3) + 1 call ga_get(g_a, ilo+shifti(indx), ihi+shifti(indx), $ jlo+shiftj(indx), jhi+shiftj(indx), $ buf, chunk) endif enddo enddo seconds = util_timer() - seconds c time_get = seconds/count end double precision function & time_put(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je integer rows, cols, indx, shifti(3), shiftj(3) logical local c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 cols = je - js + 1 shifti(1) = rows shifti(2) = 0 shifti(3) = rows shiftj(1) = 0 shiftj(2) = cols shiftj(3) = cols seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 do jlo = js, je -chunk-jump +1, chunk+jump jhi = jlo + chunk -1 count = count + 1 if (local) then call ga_put(g_a, ilo, ihi, jlo, jhi, buf, chunk) else indx = Mod(count,3) + 1 call ga_put(g_a, ilo+shifti(indx), ihi+shifti(indx), $ jlo+shiftj(indx), jhi+shiftj(indx), $ buf, chunk) endif enddo enddo seconds = util_timer() - seconds c time_put = seconds/count end subroutine my_sleep(seconds) implicit none #include "global.fh" #include "testutil.fh" c double precision ts, te, work integer seconds, loop common /sleep_block/ work c ts = util_timer() work = 0. 100 continue do loop= 1, 500 work = work + 1. enddo te = util_timer() if(te - ts .lt. real(seconds)) goto 100 * print *, work, ts, te end ga-5-3/global/testing/testmatmultc.c0000640005473000001440000002521411644674007016420 0ustar d3n000users/** * @file testmatmultc.c * @author Jeff Daily, PNNL jeff.daily@pnl.gov * * This is the C version of testmatmul.F. The port was as direct as possible, * hopefully. */ #if HAVE_CONFIG_H # include "config.h" #endif #include #include #include "mp3.h" #include "ga.h" #include "macdecls.h" #include "xgemm.h" void load_ga(int handle, double *f, int dim1, int dim2); void verify_ga_dgemm(char xt1, char xt2, int num_m, int num_n, int num_k, double alpha, int g_a, int g_b, double beta, int g_c, double *tmpa, double *tmpb, double *tmpc); #define dgemm_verify 1 #define nummax 1024 #define howmany 2 #define ntrans 4 /* * test ga_dgemm * Note: - change nummax for large arrays * - turn off "dgemm_verify" for large arrays due to memory * limitations, as dgemm_verify=1 for large arrays produces * segfault, dumps core,or any crap. */ int main(int argc, char **argv) { int num_m; int num_n; int num_k; int i; int ii; double *h0; int g_c; int g_b; int g_a; double a; double t1; double mf; double avg_t[ntrans]; double avg_mf[ntrans]; int itime; int ntimes; int me; int nums_m[/*howmany*/] = {512,1024}; int nums_n[/*howmany*/] = {512,1024}; int nums_k[/*howmany*/] = {512,1024}; char transa[/*ntrans*/] = "ntnt"; char transb[/*ntrans*/] = "nntt"; char ta; char tb; double *tmpa; double *tmpb; double *tmpc; int ndim; int dims[2]; #ifdef BLOCK_CYCLIC int block_size[2]; #endif MP_INIT(argc,argv); if (!MA_init(MT_DBL,1,20000000)) { GA_Error("failed: ma_init(MT_DBL,1,20000000)",10); } GA_INIT(argc,argv); me = GA_Nodeid(); h0 = (double*)malloc(sizeof(double) * nummax*nummax); tmpa = (double*)malloc(sizeof(double) * nummax*nummax); tmpb = (double*)malloc(sizeof(double) * nummax*nummax); tmpc = (double*)malloc(sizeof(double) * nummax*nummax); ii = 0; for (i=0; i nummax) { ii = 0; } h0[i] = ii; } /* Compute times assuming 500 mflops and 5 second target time */ /* ntimes = max(3.0d0,5.0d0/(4.0d-9*num**3)); */ ntimes = 5; for (ii=0; ii nummax || num_n > nummax || num_k > nummax) { GA_Error("Insufficient memory: check nummax", 1); } #ifndef BLOCK_CYCLIC ndim = 2; dims[0] = num_m; dims[1] = num_n; if (!((g_c = NGA_Create(MT_DBL,ndim,dims,"g_c",NULL)))) { GA_Error("failed: create g_c",20); } dims[0] = num_k; dims[1] = num_n; if (!((g_b = NGA_Create(MT_DBL,ndim,dims,"g_b",NULL)))) { GA_Error("failed: create g_b",30); } dims[0] = num_m; dims[1] = num_k; if (!((g_a = NGA_Create(MT_DBL,ndim,dims,"g_a",NULL)))) { GA_Error("failed: create g_a",40); } #else ndim = 2; block_size[0] = 128; block_size[1] = 128; dims[0] = num_m; dims[1] = num_n; g_c = GA_Create_handle(); GA_Set_data(g_c,ndim,dims,MT_DBL); GA_Set_array_name(g_c,"g_c"); GA_Set_block_cyclic(g_c,block_size); if (!GA_Allocate(g_c)) { GA_Error("failed: create g_c",40); } dims[0] = num_k; dims[1] = num_n; g_b = GA_Create_handle(); GA_Set_data(g_b,ndim,dims,MT_DBL); GA_Set_array_name(g_b,"g_b"); GA_Set_block_cyclic(g_b,block_size); if (!ga_allocate(g_b)) { GA_Error("failed: create g_b",40); } dims[0] = num_m; dims[1] = num_k; g_a = GA_Create_handle(); GA_Set_data(g_a,ndim,dims,MT_DBL); GA_Set_array_name(g_a,"g_a"); GA_Set_block_cyclic(g_a,block_size); if (!ga_allocate(g_a)) { GA_Error('failed: create g_a',40); } #endif /* Initialize matrices A and B */ if (me == 0) { load_ga(g_a, h0, num_m, num_k); load_ga(g_b, h0, num_k, num_n); } GA_Zero(g_c); GA_Sync(); if (GA_Nodeid() == 0) { printf("\nMatrix Multiplication on C = A[%ld,%ld]xB[%ld,%ld]\n", (long)num_m, (long)num_k, (long)num_k, (long)num_n); fflush(stdout); } for (i=0; i 1.0 || abs_value < -1.0) { printf("Values are = %f %f\n", tmpc[j+i*num_m], tmpa[j+i*num_m]); printf("Values are = %f %f\n", fabs(tmpc[j+i*num_m]-tmpa[j*i*num_m]), abs_value); fflush(stdout); GA_Error("verify ga_dgemm failed", 1); } } } } /** * called by process '0' (or your master process ) */ void load_ga(int handle, double *f, int dim1, int dim2) { int lo[2], hi[2]; if (dim1 < 0 || dim2 < 0) { return; } lo[0] = 0; lo[1] = 0; hi[0] = dim1-1; hi[1] = dim2-1; NGA_Put(handle, lo, hi, f, &dim1); } /* c c----------------------------------------------------------------------- c must be called by all processors, if you need to fillup the c entire array c subroutine load_ga_from_square(handle,num,f,ndim) implicit none integer handle, memhandle integer num,ndim real*8 f(ndim,ndim) integer ilo, ihi, jlo, jhi, nx, ny, ibuff integer ga_nodeid, i1, i2, i, j, ix, jx #include "mafdecls.fh" call ga_distribution(handle, ga_nodeid(), ilo, ihi, jlo, jhi) if(ihi.le.0)return if(jhi.le.0)return c nx = ihi - ilo + 1 c ny = jhi - jlo + 1 do i = ilo,ihi,ndim do j = jlo,jhi,ndim call ga_put(handle,i,min(ihi,i+ndim),j,min(jhi,j+ndim), & f,ndim) enddo enddo return end */ /* c c----------------------------------------------------------------------- c must be called by all processors, if you need to fillup the c entire array c subroutine load_ga_from_triangle(handle,f,ndim) implicit none integer handle, memhandle real*8 f(*) integer ndim integer ilo, ihi, jlo, jhi, nx, ny, ibuff integer ga_nodeid, i1, i2, i, j, ix, jx #include "mafdecls.fh" call ga_distribution(handle, ga_nodeid(), ilo, ihi, jlo, jhi) if(ihi.le.0)return if(jhi.le.0)return nx = ihi - ilo + 1 ny = jhi - jlo + 1 if (.not.ma_alloc_get(MT_DBL,nx*ny,'flap',memhandle,ibuff)) then call ga_error('failed: allocate triangle',100) endif do i = 1,nx do j = 1,ny ix = i + ilo - 1 jx = j + jlo - 1 i1 = min(ix,jx) i2 = max(ix,jx) dbl_mb(ibuff + nx*(j-1) + (i-1) ) = f(i2*(i2-1)/2 + i1) enddo enddo call ga_put(handle,ilo,ihi,jlo,jhi, & dbl_mb(ibuff),nx) if (.not.ma_free_heap(memhandle)) then call ga_error('failed: free triangle',100) endif return end */ ga-5-3/global/testing/patch.F0000640005473000001440000013564011417373344014737 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif C $iD: PATch.F,v 1.21 2002/10/15 23:35:52 vinod Exp $ #if (defined(CRAY) && !defined(__crayx1)) || defined(KSR) # define xgemm SGEMM # define ygemm CGEMM #else # define xgemm TEST_DGEMM # define ygemm TEST_ZGEMM #endif #if defined(FUJITSU) || defined(CRAY_YMP) # define THRESH 1.0d-10 #else # define THRESH 1.0d-20 #endif #define MISMATCH(x,y) abs(x-y)/max(1,abs(x)).gt.THRESH c c#define BLOCK_CYCLIC c#define USE_SCALAPACK_DISTR #ifdef USE_SCALAPACK_DISTR #define BLOCK_CYCLIC #endif c program test implicit none #include "mafdecls.fh" #include "global.fh" logical status c c*** Initialize a message passing library c #include "mp3.fh" c call ga_initialize() if(ga_nodeid().eq.0)then print *,' GA initialized' call ffflush(6) endif c status = ma_init(MT_DBL, 500000, 900000/ga_nnodes()) if (.not. status)call ga_error( 'ma_init failed', -1) if(ga_nodeid().eq.0)then print *,' ' print *,'CHECKING PATCH OPERATIONS FOR DOUBLES ' print *,' ' endif call dpatch_test() c if(ga_nodeid().eq.0)then print *,' ' print *,'CHECKING PATCH OPERATIONS FOR DOUBLE COMPLEX' print *,' ' endif call zpatch_test() c if(ga_nodeid().eq.0)then print *,' ' print *,'CHECKING PATCH OPERATIONS FOR SINGLE PRECISION' print *,' ' endif call spatch_test() c if(ga_nodeid().eq.0) print *,'All tests successful ' c call ga_terminate() c call MP_FINALIZE() end subroutine dpatch_test() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n,m parameter (n = 128) parameter (m = n*n) double precision a(n,n), b(n,n), c(n,n), buf(m), val double precision alpha, beta integer nproc, me integer i, j, ailo, ajlo, bilo, bjlo, base, iran integer aihi, ajhi, bihi, bjhi integer g_a, g_b, g_c integer rows, cols, loop logical status, dist_same #ifdef BLOCK_CYCLIC integer ndim, dims(2) integer block_size(2), proc_grid(2) #endif iran(i) = int(drand(1)*real(i)) + 1 dist_same = .false. c me = ga_nodeid() nproc = ga_nnodes() #ifdef BLOCK_CYCLIC block_size(1) = 32 block_size(2) = 32 #ifdef USE_SCALAPACK_DISTR if (mod(nproc,2).ne.0) + call ga_error("Available procs must be divisible by 2",0) proc_grid(1) = 2 proc_grid(2) = nproc/2 #endif #endif c do j = 1, n do i = 1, n a(i,j) = i-1 + (j-1)*n b(i,j) = i+j enddo enddo c c*** Create a global array c #ifndef BLOCK_CYCLIC status = ga_create(MT_DBL, n, n, 'a', 0, 0, g_a) #else g_a = ga_create_handle() ndim = 2 dims(1) = n dims(2) = n call ga_set_data(g_a,ndim,dims,MT_DBL) call ga_set_array_name(g_a,'a') #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_a,block_size,proc_grid) #else call ga_set_block_cyclic(g_a,block_size) #endif status = ga_allocate(g_a) #endif if (.not. status) then write(6,*) ' ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c if(dist_same) then status = ga_duplicate(g_a, g_b, 'a_duplicated') if(.not.ga_compare_distr(g_a, g_b)) $ call ga_error("g_b distribution different",0) status = ga_duplicate(g_a, g_c, 'a_duplicated_again') if(.not.ga_compare_distr(g_a, g_c)) $ call ga_error("g_c distribution different",0) else #ifndef BLOCK_CYCLIC status = ga_create(MT_DBL, n, n, 'b', 0, n, g_b) #else g_b = ga_create_handle() ndim = 2 dims(1) = n dims(2) = n call ga_set_data(g_b,ndim,dims,MT_DBL) call ga_set_array_name(g_b,'b') #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_b,block_size,proc_grid) #else call ga_set_block_cyclic(g_b,block_size) #endif status = ga_allocate(g_b) #endif if (.not. status) call ga_error('ga_create failed:b',0) #ifndef BLOCK_CYCLIC status = ga_create(MT_DBL, n, n, 'c', n, 0, g_c) #else g_c = ga_create_handle() ndim = 2 dims(1) = n dims(2) = n call ga_set_data(g_c,ndim,dims,MT_DBL) call ga_set_array_name(g_c,'c') #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_c,block_size,proc_grid) #else call ga_set_block_cyclic(g_c,block_size) #endif status = ga_allocate(g_c) #endif if (.not. status) call ga_error('ga_create failed:c',0) endif c c*** if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_fill_patch ... ' call ffflush(6) endif c val = 1d0 call ga_fill_patch(g_a, 2,n/2, 2,n, val) * call ga_print(g_a, 1) do j = 2+me, n, nproc call ga_get(g_a, 1,n/2, j,j, buf,n/2) do i = 2, n/2 if(buf(i) .ne.val ) then print *,me, ' error ',i,j, buf(i),val call ga_error('exiting ...',0) endif enddo enddo c call ga_sync() if (me .eq. 0) then write(6,*)' OK ' call ffflush(6) endif c do j = 1+me, n, nproc call ga_put(g_a,1,n,j,j,a(1,j),n) enddo c*** if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_copy_patch ... ' call ffflush(6) endif c do loop =1, 10 ailo = iran(n/2) ajlo = iran(n/2) aihi = min(n, -1+ailo+n/2) ajhi = min(n, -1+ajlo+n/4) rows = aihi -ailo+1 cols = ajhi -ajlo +1 c bilo = iran(n/3) bjlo = iran(n/3) bihi = bilo + rows -1 bjhi = bjlo + cols -1 if (me .eq. 0) then write(6,'(2x,1h[,4i4,1h],5h --> ,1h[,4i4,1h])') $ ailo,aihi,ajlo,ajhi, $ bilo,bihi, bjlo, bjhi call ffflush(6) endif c call ga_copy_patch('n', g_a, ailo, aihi, ajlo, ajhi, & g_b, bilo, bihi, bjlo, bjhi) c call ga_print(g_a,1) c call ga_print(g_b,1) call ga_get(g_b,bilo,bihi, bjlo, bjhi, buf, rows) base = 0 do j = ajlo, ajhi if(Mod(j,nproc).eq.me) then do i = ailo, aihi base = base+1 if(buf(base) .ne. a(i,j)) then print *,me, ' error ',i,j, buf(base), a(i,j) call ga_error('exiting ...',0) endif enddo else base = base + rows endif enddo enddo c ailo = iran(n/2) ajlo = iran(n/2) bilo = iran(n/2) bjlo = iran(n/2) c #ifdef BLOCK_CYCLIC if (me .eq. 0) then write(6,*)' without transpose: OK ' call ffflush(6) endif #else if (me .eq. 0) then write(6,'(2x,1h[,4i4,1h],5h --> ,1h[,4i4,1h])') $ ailo,aihi,ajlo,ajhi, $ bilo,bihi, bjlo, bjhi endif call ga_copy_patch('n', g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) * call ga_print_patch(g_a, ailo,ailo+n/2, ajlo, ajlo+n/3,1) * call ga_print(g_b, 1) call ga_get(g_b,bilo,bilo+n/3,bjlo, bjlo+n/2,buf,n/3+1) base = 0 do j = ajlo, ajlo+n/3 if(Mod(j,nproc).eq.me) then do i = ailo, ailo+n/2 base = base+1 if(buf(base) .ne. a(i,j)) then print *,me, ' error ',i,j, buf(base), a(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo call ga_sync() c if (me .eq. 0) then write(6,*)' without transpose: OK ' call ffflush(6) endif c if (me .eq. 0) then write(6,'(2x,1h[,4i4,2h]~,5h --> ,1h[,4i4,1h])') $ ailo,aihi,ajlo,ajhi, $ bilo,bihi, bjlo, bjhi endif call ga_copy_patch('t', g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) * call ga_print_patch(g_a, ailo,ailo+n/2, ajlo, ajlo+n/3,1) * call ga_print(g_b, 1) call ga_get(g_b,bilo,bilo+n/3,bjlo, bjlo+n/2,buf,n/3+1) base = 0 do i = ailo, ailo+n/2 if(Mod(j,nproc).eq.me) then do j = ajlo, ajlo+n/3 base = base+1 if(buf(base) .ne. a(i,j)) then print *,me, ' error ',i,j, buf(base), a(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/3+1 endif enddo call ga_sync() c if (me .eq. 0) then write(6,*)' transposed: OK ' call ffflush(6) endif #endif c c*** if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_scale_patch ... ' call ffflush(6) endif call ga_copy_patch('n', g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/2, bjlo, bjlo+n/3) val = 1.d0 call ga_scale_patch(g_b, bilo,bilo+n/2,bjlo, bjlo+n/3,val) call ga_get(g_b,bilo,bilo+n/2,bjlo, bjlo+n/3,buf,n/2+1) base = 0 do j = ajlo, ajlo+n/3 if(Mod(j,nproc).eq.me) then do i = ailo, ailo+n/2 base = base+1 if(buf(base) .ne. a(i,j)*val) then print *,me, ' error ',i,j, buf(base), a(i,j)*val call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo call ga_sync() c if (me .eq. 0) then write(6,*)' OK ' call ffflush(6) endif c c*** if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_add_patch ... ' call ffflush(6) endif alpha = .1d0 beta = .2d0 call ga_zero(g_c) call ga_add_patch(alpha, g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ beta, g_b, bilo,bilo+n/2, bjlo, bjlo+n/3, $ g_c, bilo,bilo+n/2, bjlo, bjlo+n/3) call ga_get(g_c,bilo,bilo+n/2,bjlo, bjlo+n/3,buf,n/2+1) base = 0 val = val*beta + alpha do j = ajlo, ajlo+n/3 if(Mod(j,nproc).eq.me) then do i = ailo, ailo+n/2 base = base+1 if(ABS(buf(base)- a(i,j)*val).gt.1d-5) then print *,me, ' error ',i,j, buf(base), a(i,j)*val call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo call ga_sync() c if (me .eq. 0) then write(6,*)' OK ' call ffflush(6) endif c c*** if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_ddot_patch ... ' call ffflush(6) endif alpha= ga_ddot_patch(g_a,'n', ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_c,'n', bilo,bilo+n/2, bjlo, bjlo+n/3) beta = 0d0 do j = ajlo, ajlo+n/3 do i = ailo, ailo+n/2 beta = beta + a(i,j)**2 enddo enddo if(ABS(beta*val- alpha).gt.1d-6*alpha) then print *,me, ' error ', beta*val, alpha call ga_error('exiting ...',0) endif call ga_sync() c if (me .eq. 0) then write(6,*)' OK ' call ffflush(6) endif c c...................................................... if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_matmul_patch ... ' call ffflush(6) endif do j = 1+me, n, nproc call ga_put(g_b,1,n,j,j,b(1,j),n) enddo call ga_sync() call ga_matmul_patch('n','n', 1d0, 0d0, $ g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2, $ g_c, bilo,bilo+n/2, bjlo, bjlo+n/2) call xgemm('n','n',n/2+1,n/2+1,n/3+1,1d0,a(ailo,ajlo), n, $ b(bilo,bjlo),n, 0d0, c, n) * call ga_print_patch(g_a, ailo,ailo+n/2, ajlo, ajlo+n/3) * call ga_print_patch(g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) * call ga_print(g_c, 1) call ga_get(g_c,bilo,bilo+n/2,bjlo, bjlo+n/2,buf,n/2+1) base = 0 do j = 1, 1+n/2 if(Mod(j,nproc).eq.me) then do i = 1, 1+n/2 base = base+1 if(ABS(buf(base)- c(i,j)).gt.1d-8) then print *,me, ' error ',i,j, buf(base), c(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo c call ga_sync() if (me .eq. 0) then write(6,*)' a*b: OK ' call ffflush(6) endif c call ga_sync() call ga_matmul_patch('t','n', 1d0, 0d0, $ g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2, $ g_c, bilo,bilo+n/2, bjlo, bjlo+n/2) call xgemm('t','n',n/2+1,n/2+1,n/3+1,1d0,a(ajlo,ailo), n, $ b(bilo,bjlo),n, 0d0, c, n) * call ga_print(g_a,1) * call ga_print_patch(g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) * call ga_print(g_c, 1) call ga_get(g_c,bilo,bilo+n/2,bjlo, bjlo+n/2,buf,n/2+1) base = 0 do j = 1, 1+n/2 if(Mod(j,nproc).eq.me) then do i = 1, 1+n/2 base = base+1 if(ABS(buf(base)- c(i,j)).gt.1d-8) then print *,me, ' error ',i,j, buf(base), c(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo c call ga_sync() if (me .eq. 0) then write(6,*)' trans(a)*b: OK ' call ffflush(6) endif c call ga_sync() call ga_matmul_patch('n','t', 1d0, 0d0, $ g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2, $ g_c, bilo,bilo+n/2, bjlo, bjlo+n/2) call xgemm('n','t',n/2+1,n/2+1,n/3+1,1d0,a(ailo,ajlo), n, $ b(bjlo,bilo),n, 0d0, c, n) * call ga_print(g_a,1) * call ga_print_patch(g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) * call ga_print(g_c, 1) call ga_get(g_c,bilo,bilo+n/2,bjlo, bjlo+n/2,buf,n/2+1) base = 0 do j = 1, 1+n/2 if(Mod(j,nproc).eq.me) then do i = 1, 1+n/2 base = base+1 if(ABS(buf(base)- c(i,j)).gt.1d-8) then print *,me, ' error ',i,j, buf(base), c(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo c call ga_sync() if (me .eq. 0) then write(6,*)' a*trans(b): OK ' call ffflush(6) endif c call ga_sync() call ga_matmul_patch('t','t', 1d0, 0d0, $ g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2, $ g_c, bilo,bilo+n/2, bjlo, bjlo+n/2) call xgemm('t','t',n/2+1,n/2+1,n/3+1,1d0,a(ajlo,ailo), n, $ b(bjlo,bilo),n, 0d0, c, n) * call ga_print(g_a,1) * call ga_print_patch(g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) * call ga_print(g_c, 1) call ga_get(g_c,bilo,bilo+n/2,bjlo, bjlo+n/2,buf,n/2+1) base = 0 do j = 1, 1+n/2 if(Mod(j,nproc).eq.me) then do i = 1, 1+n/2 base = base+1 if(ABS(buf(base)- c(i,j)).gt.1d-8) then print *,me, ' error ',i,j, buf(base), c(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo c call ga_sync() if (me .eq. 0) then write(6,*)' trans(a)*trans(b): OK ' call ffflush(6) endif status = ga_destroy(g_a) status = status .and. ga_destroy(g_b) status = status .and. ga_destroy(g_c) if(.not. status) print *, 'ga_destroy failed' c end subroutine zpatch_test() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n,m parameter (n = 128) parameter (m = n*n) double complex a(n,n), b(n,n), c(n,n), buf(m), val double complex alpha, beta integer nproc, me integer i, j, ailo, ajlo, bilo, bjlo, base, iran integer aihi, ajhi, bihi, bjhi integer g_a, g_b, g_c integer rows, cols, loop logical status, dist_same #ifdef BLOCK_CYCLIC integer ndim, dims(2) integer block_size(2), proc_grid(2) #endif iran(i) = int(drand(1)*real(i)) + 1 dist_same = .false. c me = ga_nodeid() nproc = ga_nnodes() #ifdef BLOCK_CYCLIC block_size(1) = 32 block_size(2) = 32 #ifdef USE_SCALAPACK_DISTR if (mod(nproc,2).ne.0) + call ga_error("Available procs must be divisible by 2",0) proc_grid(1) = 2 proc_grid(2) = nproc/2 #endif #endif c do j = 1, n do i = 1, n a(i,j) = cmplx(dble(i-1), dble((j-1)*n)) b(i,j) = cmplx(dble(i+j),1d0) enddo enddo c c*** Create a global array c #ifndef BLOCK_CYCLIC status = ga_create(MT_DCPL, n, n, 'a', 0, 0, g_a) #else g_a = ga_create_handle() ndim = 2 dims(1) = n dims(2) = n call ga_set_data(g_a,ndim,dims,MT_DCPL) call ga_set_array_name(g_a,'a') #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_a,block_size,proc_grid) #else call ga_set_block_cyclic(g_a,block_size) #endif status = ga_allocate(g_a) #endif if (.not. status) then write(6,*) ' ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c if(dist_same) then status = ga_duplicate(g_a, g_b, 'a_duplicated') if(.not.ga_compare_distr(g_a, g_b)) $ call ga_error("g_b distribution different",0) status = ga_duplicate(g_a, g_c, 'a_duplicated_again') if(.not.ga_compare_distr(g_a, g_c)) $ call ga_error("g_c distribution different",0) else #ifndef BLOCK_CYCLIC status = ga_create(MT_DCPL, n, n, 'b', 0, n, g_b) #else g_b = ga_create_handle() ndim = 2 dims(1) = n dims(2) = n call ga_set_data(g_b,ndim,dims,MT_DCPL) call ga_set_array_name(g_b,'b') #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_b,block_size,proc_grid) #else call ga_set_block_cyclic(g_b,block_size) #endif status = ga_allocate(g_b) #endif if (.not. status) call ga_error('ga_create failed:b',0) #ifndef BLOCK_CYCLIC status = ga_create(MT_DCPL, n, n, 'c', n, 0, g_c) #else g_c = ga_create_handle() ndim = 2 dims(1) = n dims(2) = n call ga_set_data(g_c,ndim,dims,MT_DCPL) call ga_set_array_name(g_c,'c') #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_c,block_size,proc_grid) #else call ga_set_block_cyclic(g_c,block_size) #endif status = ga_allocate(g_c) #endif if (.not. status) call ga_error('ga_create failed:c',0) endif c c*** if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_fill_patch ... ' call ffflush(6) endif c val = (1d0,-1d0) call ga_fill_patch(g_a, 2,n/2, 2,n, val) * call ga_print(g_a, 1) do j = 2+me, n, nproc call ga_get(g_a, 1,n/2, j,j, buf,n/2) do i = 2, n/2 if(buf(i) .ne.val ) then print *,me, ' error ',i,j, buf(i),val call ga_error('exiting ...',0) endif enddo enddo c call ga_sync() if (me .eq. 0) then write(6,*)' OK ' call ffflush(6) endif c do j = 1+me, n, nproc call ga_put(g_a,1,n,j,j,a(1,j),n) enddo c*** if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_copy_patch ... ' call ffflush(6) endif c do loop =1, 10 ailo = iran(n/2) ajlo = iran(n/2) aihi = min(n, -1+ailo+n/2) ajhi = min(n, -1+ajlo+n/4) rows = aihi -ailo+1 cols = ajhi -ajlo +1 c bilo = iran(n/3) bjlo = iran(n/3) bihi = bilo + rows -1 bjhi = bjlo + cols -1 if (me .eq. 0) then write(6,'(2x,1h[,4i4,1h],5h --> ,1h[,4i4,1h])') $ ailo,aihi,ajlo,ajhi, $ bilo,bihi, bjlo, bjhi call ffflush(6) endif c call ga_copy_patch('n', g_a, ailo, aihi, ajlo, ajhi, & g_b, bilo, bihi, bjlo, bjhi) c call ga_print(g_a,1) c call ga_print(g_b,1) call ga_get(g_b,bilo,bihi, bjlo, bjhi, buf, rows) base = 0 do j = ajlo, ajhi if(Mod(j,nproc).eq.me) then do i = ailo, aihi base = base+1 if(buf(base) .ne. a(i,j)) then print *,me, ' error ',i,j, buf(base), a(i,j) call ga_error('exiting ...',0) endif enddo else base = base + rows endif enddo enddo c ailo = iran(n/2) ajlo = iran(n/2) bilo = iran(n/2) bjlo = iran(n/2) c #ifdef BLOCK_CYCLIC if (me .eq. 0) then write(6,*)' without transpose: OK ' call ffflush(6) endif #else if (me .eq. 0) then write(6,'(2x,1h[,4i4,1h],5h --> ,1h[,4i4,1h])') $ ailo,aihi,ajlo,ajhi, $ bilo,bihi, bjlo, bjhi endif call ga_copy_patch('n', g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) * call ga_print_patch(g_a, ailo,ailo+n/2, ajlo, ajlo+n/3,1) * call ga_print(g_b, 1) call ga_get(g_b,bilo,bilo+n/3,bjlo, bjlo+n/2,buf,n/3+1) base = 0 do j = ajlo, ajlo+n/3 if(Mod(j,nproc).eq.me) then do i = ailo, ailo+n/2 base = base+1 if(buf(base) .ne. a(i,j)) then print *,me, ' error ',i,j, buf(base), a(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo call ga_sync() c if (me .eq. 0) then write(6,*)' without transpose: OK ' call ffflush(6) endif c if (me .eq. 0) then write(6,'(2x,1h[,4i4,2h]~,5h --> ,1h[,4i4,1h])') $ ailo,aihi,ajlo,ajhi, $ bilo,bihi, bjlo, bjhi endif call ga_copy_patch('t', g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) * call ga_print_patch(g_a, ailo,ailo+n/2, ajlo, ajlo+n/3,1) * call ga_print(g_b, 1) call ga_get(g_b,bilo,bilo+n/3,bjlo, bjlo+n/2,buf,n/3+1) base = 0 do i = ailo, ailo+n/2 if(Mod(j,nproc).eq.me) then do j = ajlo, ajlo+n/3 base = base+1 if(buf(base) .ne. a(i,j)) then print *,me, ' error ',i,j, buf(base), a(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/3+1 endif enddo call ga_sync() c if (me .eq. 0) then write(6,*)' transposed: OK ' call ffflush(6) endif #endif c c*** if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_scale_patch ... ' call ffflush(6) endif call ga_copy_patch('n', g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/2, bjlo, bjlo+n/3) val = 1.d0 call ga_scale_patch(g_b, bilo,bilo+n/2,bjlo, bjlo+n/3,val) call ga_get(g_b,bilo,bilo+n/2,bjlo, bjlo+n/3,buf,n/2+1) base = 0 do j = ajlo, ajlo+n/3 if(Mod(j,nproc).eq.me) then do i = ailo, ailo+n/2 base = base+1 if(buf(base) .ne. a(i,j)*val) then print *,me, ' error ',i,j, buf(base), a(i,j)*val call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo call ga_sync() c if (me .eq. 0) then write(6,*)' OK ' call ffflush(6) endif c c*** if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_add_patch ... ' call ffflush(6) endif alpha = .1d0 beta = .2d0 call ga_zero(g_c) call ga_add_patch(alpha, g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ beta, g_b, bilo,bilo+n/2, bjlo, bjlo+n/3, $ g_c, bilo,bilo+n/2, bjlo, bjlo+n/3) call ga_get(g_c,bilo,bilo+n/2,bjlo, bjlo+n/3,buf,n/2+1) base = 0 val = val*beta + alpha do j = ajlo, ajlo+n/3 if(Mod(j,nproc).eq.me) then do i = ailo, ailo+n/2 base = base+1 if(ABS(buf(base)- a(i,j)*val).gt.1d-5) then print *,me, ' error ',i,j, buf(base), a(i,j)*val call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo call ga_sync() c if (me .eq. 0) then write(6,*)' OK ' call ffflush(6) endif c c*** if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_zdot_patch ... ' call ffflush(6) endif alpha= ga_zdot_patch(g_a,'n', ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_c,'n', bilo,bilo+n/2, bjlo, bjlo+n/3) beta = (0d0,0d0) do j = ajlo, ajlo+n/3 do i = ailo, ailo+n/2 beta = beta + a(i,j)*a(i,j) enddo enddo if(ABS(beta*val- alpha)/abs(alpha).gt.1d-6) then print *,me, ' error ', beta*val, alpha call ga_error('exiting ...',0) endif call ga_sync() c if (me .eq. 0) then write(6,*)' OK ' call ffflush(6) endif c c...................................................... if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_matmul_patch ... ' call ffflush(6) endif do j = 1+me, n, nproc call ga_put(g_b,1,n,j,j,b(1,j),n) enddo call ga_sync() call ga_matmul_patch('n','n', (1d0,0d0), (0d0,0d0), $ g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2, $ g_c, bilo,bilo+n/2, bjlo, bjlo+n/2) call ygemm('n','n',n/2+1,n/2+1,n/3+1,(1d0,0d0), $ a(ailo,ajlo), n, $ b(bilo,bjlo),n, (0d0,0d0), c, n) * call ga_print_patch(g_a, ailo,ailo+n/2, ajlo, ajlo+n/3) * call ga_print_patch(g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) * call ga_print(g_c, 1) call ga_get(g_c,bilo,bilo+n/2,bjlo, bjlo+n/2,buf,n/2+1) base = 0 do j = 1, 1+n/2 if(Mod(j,nproc).eq.me) then do i = 1, 1+n/2 base = base+1 if(ABS(buf(base)- c(i,j))/abs(c(i,j)).gt.1d-8) then print *,me, ' error ',i,j, buf(base), c(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo c call ga_sync() if (me .eq. 0) then write(6,*)' a*b: OK ' call ffflush(6) endif c call ga_sync() call ga_matmul_patch('t','n', (1d0,0d0), (0d0,0d0), $ g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2, $ g_c, bilo,bilo+n/2, bjlo, bjlo+n/2) call ygemm('t','n',n/2+1,n/2+1,n/3+1,(1d0,0d0), $ a(ajlo,ailo), n, $ b(bilo,bjlo),n, (0d0,0d0), c, n) * call ga_print(g_a,1) * call ga_print_patch(g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) * call ga_print(g_c, 1) call ga_get(g_c,bilo,bilo+n/2,bjlo, bjlo+n/2,buf,n/2+1) base = 0 do j = 1, 1+n/2 if(Mod(j,nproc).eq.me) then do i = 1, 1+n/2 base = base+1 if(ABS(buf(base)- c(i,j))/abs(c(i,j)).gt.1d-8) then print *,me, ' error ',i,j, buf(base), c(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo c call ga_sync() if (me .eq. 0) then write(6,*)' trans(a)*b: OK ' call ffflush(6) endif c call ga_sync() call ga_matmul_patch('n','t', (1d0,0d0), (0d0,0d0), $ g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2, $ g_c, bilo,bilo+n/2, bjlo, bjlo+n/2) call ygemm('n','t',n/2+1,n/2+1,n/3+1,(1d0,0d0), $ a(ailo,ajlo), n, $ b(bjlo,bilo),n, (0d0,0d0), c, n) * call ga_print(g_a,1) * call ga_print_patch(g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) * call ga_print(g_c, 1) call ga_get(g_c,bilo,bilo+n/2,bjlo, bjlo+n/2,buf,n/2+1) base = 0 do j = 1, 1+n/2 if(Mod(j,nproc).eq.me) then do i = 1, 1+n/2 base = base+1 if(ABS(buf(base)- c(i,j))/abs(c(i,j)).gt.1d-8) then print *,me, ' error ',i,j, buf(base), c(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo c call ga_sync() if (me .eq. 0) then write(6,*)' a*trans(b): OK ' call ffflush(6) endif c call ga_sync() call ga_matmul_patch('t','t', (1d0,0d0), (0d0,0d0), $ g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2, $ g_c, bilo,bilo+n/2, bjlo, bjlo+n/2) call ygemm('t','t',n/2+1,n/2+1,n/3+1,(1d0,0d0), $ a(ajlo,ailo), n, $ b(bilo,bjlo),n, (0d0,0d0), c, n) * call ga_print(g_a,1) * call ga_print_patch(g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) * call ga_print(g_c, 1) call ga_get(g_c,bilo,bilo+n/2,bjlo, bjlo+n/2,buf,n/2+1) base = 0 do j = 1, 1+n/2 if(Mod(j,nproc).eq.me) then do i = 1, 1+n/2 base = base+1 if(ABS(buf(base)- c(i,j))/abs(c(i,j)).gt.1d-8) then print *,me, ' error ',i,j, buf(base), c(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo c call ga_sync() if (me .eq. 0) then write(6,*)' trans(a)*trans(b): OK ' call ffflush(6) endif status = ga_destroy(g_a) status = status .and. ga_destroy(g_b) status = status .and. ga_destroy(g_c) if(.not. status) print *, 'ga_destroy failed' c end subroutine spatch_test() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n,m parameter (n = 128) parameter (m = n*n) real a(n,n), b(n,n), c(n,n), buf(m), val real alpha, beta integer nproc, me integer i, j, ailo, ajlo, bilo, bjlo, base, iran integer aihi, ajhi, bihi, bjhi integer g_a, g_b, g_c integer rows, cols, loop logical status, dist_same #ifdef BLOCK_CYCLIC integer ndim, dims(2) integer block_size(2), proc_grid(2) #endif iran(i) = int(drand(1)*real(i)) + 1 dist_same = .false. c me = ga_nodeid() nproc = ga_nnodes() #ifdef BLOCK_CYCLIC block_size(1) = 32 block_size(2) = 32 #ifdef USE_SCALAPACK_DISTR if (mod(nproc,2).ne.0) + call ga_error("Available procs must be divisible by 2",0) proc_grid(1) = 2 proc_grid(2) = nproc/2 #endif #endif c do j = 1, n do i = 1, n a(i,j) = i-1 + (j-1)*n b(i,j) = i+j enddo enddo c c*** Create a global array c #ifndef BLOCK_CYCLIC status = ga_create(MT_REAL, n, n, 'a', 0, 0, g_a) #else g_a = ga_create_handle() ndim = 2 dims(1) = n dims(2) = n call ga_set_data(g_a,ndim,dims,MT_REAL) call ga_set_array_name(g_a,'a') #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_a,block_size,proc_grid) #else call ga_set_block_cyclic(g_a,block_size) #endif status = ga_allocate(g_a) #endif if (.not. status) then write(6,*) ' ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c if(dist_same) then status = ga_duplicate(g_a, g_b, 'a_duplicated') if(.not.ga_compare_distr(g_a, g_b)) $ call ga_error("g_b distribution different",0) status = ga_duplicate(g_a, g_c, 'a_duplicated_again') if(.not.ga_compare_distr(g_a, g_c)) $ call ga_error("g_c distribution different",0) else #ifndef BLOCK_CYCLIC status = ga_create(MT_REAL, n, n, 'b', 0, n, g_b) #else g_b = ga_create_handle() ndim = 2 dims(1) = n dims(2) = n call ga_set_data(g_b,ndim,dims,MT_REAL) call ga_set_array_name(g_b,'b') #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_b,block_size,proc_grid) #else call ga_set_block_cyclic(g_b,block_size) #endif status = ga_allocate(g_b) #endif if (.not. status) call ga_error('ga_create failed:b',0) #ifndef BLOCK_CYCLIC status = ga_create(MT_REAL, n, n, 'c', n, 0, g_c) #else g_c = ga_create_handle() ndim = 2 dims(1) = n dims(2) = n call ga_set_data(g_c,ndim,dims,MT_REAL) call ga_set_array_name(g_c,'c') #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_c,block_size,proc_grid) #else call ga_set_block_cyclic(g_c,block_size) #endif status = ga_allocate(g_c) #endif if (.not. status) call ga_error('ga_create failed:c',0) endif c c*** if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_fill_patch ... ' call ffflush(6) endif c val = 1.0 call ga_fill_patch(g_a, 2,n/2, 2,n, val) * call ga_print(g_a, 1) do j = 2+me, n, nproc call ga_get(g_a, 1,n/2, j,j, buf,n/2) do i = 2, n/2 if(buf(i) .ne.val ) then print *,me, ' error ',i,j, buf(i),val call ga_error('exiting ...',0) endif enddo enddo c call ga_sync() if (me .eq. 0) then write(6,*)' OK ' call ffflush(6) endif c do j = 1+me, n, nproc call ga_put(g_a,1,n,j,j,a(1,j),n) enddo c*** if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_copy_patch ... ' call ffflush(6) endif c do loop =1, 10 ailo = iran(n/2) ajlo = iran(n/2) aihi = min(n, -1+ailo+n/2) ajhi = min(n, -1+ajlo+n/4) rows = aihi -ailo+1 cols = ajhi -ajlo +1 c bilo = iran(n/3) bjlo = iran(n/3) bihi = bilo + rows -1 bjhi = bjlo + cols -1 if (me .eq. 0) then write(6,'(2x,1h[,4i4,1h],5h --> ,1h[,4i4,1h])') $ ailo,aihi,ajlo,ajhi, $ bilo,bihi, bjlo, bjhi call ffflush(6) endif c call ga_copy_patch('n', g_a, ailo, aihi, ajlo, ajhi, & g_b, bilo, bihi, bjlo, bjhi) c call ga_print(g_a,1) c call ga_print(g_b,1) call ga_get(g_b,bilo,bihi, bjlo, bjhi, buf, rows) base = 0 do j = ajlo, ajhi if(Mod(j,nproc).eq.me) then do i = ailo, aihi base = base+1 if(buf(base) .ne. a(i,j)) then print *,me, ' error ',i,j, buf(base), a(i,j) call ga_error('exiting ...',0) endif enddo else base = base + rows endif enddo enddo c ailo = iran(n/2) ajlo = iran(n/2) bilo = iran(n/2) bjlo = iran(n/2) c #ifdef BLOCK_CYCLIC if (me .eq. 0) then write(6,*)' without transpose: OK ' call ffflush(6) endif #else if (me .eq. 0) then write(6,'(2x,1h[,4i4,1h],5h --> ,1h[,4i4,1h])') $ ailo,aihi,ajlo,ajhi, $ bilo,bihi, bjlo, bjhi endif call ga_copy_patch('n', g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) * call ga_print_patch(g_a, ailo,ailo+n/2, ajlo, ajlo+n/3,1) * call ga_print(g_b, 1) call ga_get(g_b,bilo,bilo+n/3,bjlo, bjlo+n/2,buf,n/3+1) base = 0 do j = ajlo, ajlo+n/3 if(Mod(j,nproc).eq.me) then do i = ailo, ailo+n/2 base = base+1 if(buf(base) .ne. a(i,j)) then print *,me, ' error ',i,j, buf(base), a(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo call ga_sync() c if (me .eq. 0) then write(6,*)' without transpose: OK ' call ffflush(6) endif c if (me .eq. 0) then write(6,'(2x,1h[,4i4,2h]~,5h --> ,1h[,4i4,1h])') $ ailo,aihi,ajlo,ajhi, $ bilo,bihi, bjlo, bjhi endif call ga_copy_patch('t', g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) * call ga_print_patch(g_a, ailo,ailo+n/2, ajlo, ajlo+n/3,1) * call ga_print(g_b, 1) call ga_get(g_b,bilo,bilo+n/3,bjlo, bjlo+n/2,buf,n/3+1) base = 0 do i = ailo, ailo+n/2 if(Mod(j,nproc).eq.me) then do j = ajlo, ajlo+n/3 base = base+1 if(buf(base) .ne. a(i,j)) then print *,me, ' error ',i,j, buf(base), a(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/3+1 endif enddo call ga_sync() c if (me .eq. 0) then write(6,*)' transposed: OK ' call ffflush(6) endif #endif c c*** if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_scale_patch ... ' call ffflush(6) endif call ga_copy_patch('n', g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_b, bilo,bilo+n/2, bjlo, bjlo+n/3) val = 1.0 call ga_scale_patch(g_b, bilo,bilo+n/2,bjlo, bjlo+n/3,val) call ga_get(g_b,bilo,bilo+n/2,bjlo, bjlo+n/3,buf,n/2+1) base = 0 do j = ajlo, ajlo+n/3 if(Mod(j,nproc).eq.me) then do i = ailo, ailo+n/2 base = base+1 if(buf(base) .ne. a(i,j)*val) then print *,me, ' error ',i,j, buf(base), a(i,j)*val call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo call ga_sync() c if (me .eq. 0) then write(6,*)' OK ' call ffflush(6) endif c c*** if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_add_patch ... ' call ffflush(6) endif alpha = 0.1 beta = 0.2 call ga_zero(g_c) call ga_add_patch(alpha, g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, $ beta, g_b, bilo,bilo+n/2, bjlo, bjlo+n/3, $ g_c, bilo,bilo+n/2, bjlo, bjlo+n/3) call ga_get(g_c,bilo,bilo+n/2,bjlo, bjlo+n/3,buf,n/2+1) base = 0 val = val*beta + alpha do j = ajlo, ajlo+n/3 if(Mod(j,nproc).eq.me) then do i = ailo, ailo+n/2 base = base+1 if(ABS(buf(base)- a(i,j)*val).gt.1e-3) then print *,me, ' error ',i,j, buf(base), a(i,j)*val call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo call ga_sync() c if (me .eq. 0) then write(6,*)' OK ' call ffflush(6) endif c c*** if (me .eq. 0) then print *, ' ' write(6,*)'> Checking ga_sdot_patch ... ' call ffflush(6) endif alpha= ga_sdot_patch(g_a,'n', ailo,ailo+n/2, ajlo, ajlo+n/3, $ g_c,'n', bilo,bilo+n/2, bjlo, bjlo+n/3) beta = 0.0 do j = ajlo, ajlo+n/3 do i = ailo, ailo+n/2 beta = beta + a(i,j)**2 enddo enddo if(ABS(beta*val- alpha).gt.(1.0e-2*alpha)) then print *,me, ' error ', beta*val, alpha call ga_error('exiting ...',0) endif call ga_sync() c if (me .eq. 0) then write(6,*)' OK ' call ffflush(6) endif c...................................................... ccc if (me .eq. 0) then ccc print *, ' ' ccc write(6,*)'> Checking ga_matmul_patch ... ' ccc call ffflush(6) ccc endif ccc do j = 1+me, n, nproc ccc call ga_put(g_b,1,n,j,j,b(1,j),n) ccc enddo ccc call ga_sync() ccc call ga_matmul_patch('n','n', 1.0, 0.0, ccc $ g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, ccc $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2, ccc $ g_c, bilo,bilo+n/2, bjlo, bjlo+n/2) ccc call xgemm('n','n',n/2+1,n/2+1,n/3+1,1d0,a(ailo,ajlo), n, ccc $ b(bilo,bjlo),n, 0d0, c, n) ccc* call ga_print_patch(g_a, ailo,ailo+n/2, ajlo, ajlo+n/3) ccc* call ga_print_patch(g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) ccc* call ga_print(g_c, 1) ccc call ga_get(g_c,bilo,bilo+n/2,bjlo, bjlo+n/2,buf,n/2+1) ccc base = 0 ccc do j = 1, 1+n/2 ccc if(Mod(j,nproc).eq.me) then ccc do i = 1, 1+n/2 ccc base = base+1 ccc if(ABS(buf(base)- c(i,j)).gt.1e-8) then ccc print *,me, ' error ',i,j, buf(base), c(i,j) ccc call ga_error('exiting ...',0) ccc endif ccc enddo ccc else ccc base = base +n/2+1 ccc endif ccc enddo cccc ccc call ga_sync() ccc if (me .eq. 0) then ccc write(6,*)' a*b: OK ' ccc call ffflush(6) ccc endif cccc ccc call ga_sync() ccc call ga_matmul_patch('t','n', 1d0, 0d0, ccc $ g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, ccc $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2, ccc $ g_c, bilo,bilo+n/2, bjlo, bjlo+n/2) ccc call xgemm('t','n',n/2+1,n/2+1,n/3+1,1.0,a(ajlo,ailo), n, ccc $ b(bilo,bjlo),n, 0.0, c, n) ccc* call ga_print(g_a,1) ccc* call ga_print_patch(g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) ccc* call ga_print(g_c, 1) ccc call ga_get(g_c,bilo,bilo+n/2,bjlo, bjlo+n/2,buf,n/2+1) ccc base = 0 ccc do j = 1, 1+n/2 ccc if(Mod(j,nproc).eq.me) then ccc do i = 1, 1+n/2 ccc base = base+1 ccc if(ABS(buf(base)- c(i,j)).gt.1e-8) then ccc print *,me, ' error ',i,j, buf(base), c(i,j) ccc call ga_error('exiting ...',0) ccc endif ccc enddo ccc else ccc base = base +n/2+1 ccc endif ccc enddo cccc ccc call ga_sync() ccc if (me .eq. 0) then ccc write(6,*)' trans(a)*b: OK ' ccc call ffflush(6) ccc endif cccc ccc call ga_sync() ccc call ga_matmul_patch('n','t', 1.0, 0.0, ccc $ g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, ccc $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2, ccc $ g_c, bilo,bilo+n/2, bjlo, bjlo+n/2) ccc call xgemm('n','t',n/2+1,n/2+1,n/3+1,1.0,a(ailo,ajlo), n, ccc $ b(bjlo,bilo),n, 0.0, c, n) ccc* call ga_print(g_a,1) ccc* call ga_print_patch(g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) ccc* call ga_print(g_c, 1) ccc call ga_get(g_c,bilo,bilo+n/2,bjlo, bjlo+n/2,buf,n/2+1) ccc base = 0 ccc do j = 1, 1+n/2 ccc if(Mod(j,nproc).eq.me) then ccc do i = 1, 1+n/2 ccc base = base+1 ccc if(ABS(buf(base)- c(i,j)).gt.1e-8) then ccc print *,me, ' error ',i,j, buf(base), c(i,j) ccc call ga_error('exiting ...',0) ccc endif ccc enddo ccc else ccc base = base +n/2+1 ccc endif ccc enddo cccc cccc ccc call ga_sync() ccc if (me .eq. 0) then ccc write(6,*)' a*trans(b): OK ' ccc call ffflush(6) ccc endif cccc ccc call ga_sync() ccc call ga_matmul_patch('t','t', 1d0, 0d0, ccc $ g_a, ailo,ailo+n/2, ajlo, ajlo+n/3, ccc $ g_b, bilo,bilo+n/3, bjlo, bjlo+n/2, ccc $ g_c, bilo,bilo+n/2, bjlo, bjlo+n/2) ccc call xgemm('t','t',n/2+1,n/2+1,n/3+1,1.0,a(ajlo,ailo), n, ccc $ b(bjlo,bilo),n, 0.0, c, n) ccc* call ga_print(g_a,1) ccc* call ga_print_patch(g_b, bilo,bilo+n/3, bjlo, bjlo+n/2) ccc* call ga_print(g_c, 1) ccc call ga_get(g_c,bilo,bilo+n/2,bjlo, bjlo+n/2,buf,n/2+1) ccc base = 0 ccc do j = 1, 1+n/2 ccc if(Mod(j,nproc).eq.me) then ccc do i = 1, 1+n/2 ccc base = base+1 ccc if(ABS(buf(base)- c(i,j)).gt.1e-8) then ccc print *,me, ' error ',i,j, buf(base), c(i,j) ccc call ga_error('exiting ...',0) ccc endif ccc enddo ccc else ccc base = base +n/2+1 ccc endif ccc enddo cccc ccc call ga_sync() ccc if (me .eq. 0) then ccc write(6,*)' trans(a)*trans(b): OK ' ccc call ffflush(6) ccc endif ccc status = ga_destroy(g_a) ccc status = status .and. ga_destroy(g_b) ccc status = status .and. ga_destroy(g_c) ccc if(.not. status) print *, 'ga_destroy failed' cccc end ga-5-3/global/testing/lock.c0000640005473000001440000000667611644674007014635 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDLIB_H # include #endif #include "mpi.h" #include "macdecls.h" #include "ga.h" #include "armci.h" #include "mp3.h" #define NDIM 1 int main(int argc, char **argv) { int me; int nproc; int status; int g_a; int dims[NDIM]; int chunk[NDIM]; int pg_world; size_t num = 10; double *p1 = NULL; double *p2 = NULL; size_t i; int num_mutex; int lo[1]; int hi[1]; int ld[1]={1}; MP_INIT(argc,argv); MPI_Comm_rank(MPI_COMM_WORLD,&me); MPI_Comm_size(MPI_COMM_WORLD,&nproc); printf("%d: Hello world!\n",me); if (me==0) printf("%d: GA_Initialize\n",me); GA_INIT(argc,argv); /*if (me==0) printf("%d: ARMCI_Init\n",me);*/ /*ARMCI_Init();*/ /*if (me==0) printf("%d: MA_Init\n",me);*/ /*MA_init(MT_DBL, 8*1024*1024, 2*1024*1024);*/ if (me==0) printf("%d: GA_Create_handle\n",me); g_a = GA_Create_handle(); if (me==0) printf("%d: GA_Set_array_name\n",me); GA_Set_array_name(g_a,"test array A"); dims[0] = 30; if (me==0) printf("%d: GA_Set_data\n",me); GA_Set_data(g_a,NDIM,dims,MT_DBL); chunk[0] = -1; if (me==0) printf("%d: GA_Set_chunk\n",me); GA_Set_chunk(g_a,chunk); if (me==0) printf("%d: GA_Pgroup_get_world\n",me); pg_world = GA_Pgroup_get_world(); if (me==0) printf("%d: GA_Set_pgroup\n",me); GA_Set_pgroup(g_a,pg_world); if (me==0) printf("%d: GA_Allocate\n",me); status = GA_Allocate(g_a); if(0 == status) MPI_Abort(MPI_COMM_WORLD,100); if (me==0) printf("%d: GA_Zero\n",me); GA_Zero(g_a); if (me==0) printf("%d: GA_Sync\n",me); GA_Sync(); num = 10; p1 = malloc(num*sizeof(double)); /*double* p1 = ARMCI_Malloc_local(num*sizeof(double));*/ if (p1==NULL) MPI_Abort(MPI_COMM_WORLD,1000); p2 = malloc(num*sizeof(double)); /*double* p2 = ARMCI_Malloc_local(num*sizeof(double));*/ if (p2==NULL) MPI_Abort(MPI_COMM_WORLD,2000); for ( i=0 ; i #endif #if HAVE_STDLIB_H # include #endif #if HAVE_MATH_H # include #endif #include "macdecls.h" #include "ga.h" #include "mp3.h" /* utilities for GA test programs */ #include "testutil.h" #define N 400 /* first dimension */ #define BASE 0 #define PERMUTE_ #define GA_DATA_TYPE MT_C_FLOAT #define GA_ABS(a) (((a) >= 0) ? (a) : (-(a))) #define TOLERANCE 0.000001 DoublePrecision gTime=0.0, gStart; void test(int data_type, int ndim) { int me=GA_Nodeid(); int g_a, g_b, g_c, g_A, g_B, g_C; int dims[GA_MAX_DIM]={N,N,2,2,2,1,1}; int lo[GA_MAX_DIM]={1,1,1,1,1,0,0}; int hi[GA_MAX_DIM]={N-2,N-2,1,1,1,0,0}; int clo[2], chi[2], m, n, k; double value1_dbl = 2.0, value2_dbl = 2.0; double alpha_dbl = 1.0, beta_dbl = 0.0; float value1_flt = 2.0, value2_flt = 2.0; float alpha_flt = 1.0, beta_flt = 0.0; DoubleComplex value1_dcpl = {2.0, 2.0}, value2_dcpl = {2.0, 2.0}; DoubleComplex alpha_dcpl = {1.0, 0.0} , beta_dcpl = {0.0, 0.0}; SingleComplex value1_scpl = {2.0, 2.0}, value2_scpl = {2.0, 2.0}; SingleComplex alpha_scpl = {1.0, 0.0} , beta_scpl = {0.0, 0.0}; void *value1=NULL, *value2=NULL, *alpha=NULL, *beta=NULL; switch (data_type) { case C_FLOAT: alpha = (void *)&alpha_flt; beta = (void *)&beta_flt; value1 = (void *)&value1_flt; value2 = (void *)&value2_flt; if(me==0) printf("Single Precision: Testing GA_Sgemm,NGA_Matmul_patch for %d-Dimension", ndim); break; case C_DBL: alpha = (void *)&alpha_dbl; beta = (void *)&beta_dbl; value1 = (void *)&value1_dbl; value2 = (void *)&value2_dbl; if(me==0) printf("Double Precision: Testing GA_Dgemm,NGA_Matmul_patch for %d-Dimension", ndim); break; case C_DCPL: alpha = (void *)&alpha_dcpl; beta = (void *)&beta_dcpl; value1 = (void *)&value1_dcpl; value2 = (void *)&value2_dcpl; if(me==0) printf("Double Complex: Testing GA_Zgemm,NGA_Matmul_patch for %d-Dimension", ndim); break; case C_SCPL: alpha = (void *)&alpha_scpl; beta = (void *)&beta_scpl; value1 = (void *)&value1_scpl; value2 = (void *)&value2_scpl; if(me==0) printf("Single Complex: Testing GA_Cgemm,NGA_Matmul_patch for %d-Dimension", ndim); break; default: GA_Error("wrong data type", data_type); } g_a = NGA_Create(data_type, ndim, dims, "array A", NULL); g_b = GA_Duplicate(g_a, "array B"); g_c = GA_Duplicate(g_a, "array C"); if(!g_a || !g_b || !g_c) GA_Error("Create failed: a, b or c",1); GA_Fill(g_a, value1); GA_Fill(g_b, value2); GA_Zero(g_c); NGA_Matmul_patch('N', 'N', alpha, beta, g_a, lo, hi, g_b, lo, hi, g_c, lo, hi); GA_Destroy(g_a); GA_Destroy(g_b); /** * Verifying g_c: * 1. Create g_A(=g_a) and g_B(=g_b) * 2. g_C = g_A*g_B; (Using Gemm routines) * 3. g_A = g_c; (copy the 2-d patch og g_c into g_A) * 4. g_C = g_A - g_C; (Using add() routine by making beta=-1.0) * 5. If all the elements in g_C is zero, implies SUCCESS. */ dims[0] = dims[1] = m = n = k = N-2; g_A = NGA_Create(data_type, 2, dims, "array A_", NULL); g_B = GA_Duplicate(g_A, "array B_"); g_C = GA_Duplicate(g_A, "array C_"); if(!g_A || !g_B || !g_C) GA_Error("Create failed: A, B or C",n); GA_Fill(g_A, value1); GA_Fill(g_B, value2); GA_Zero(g_C); gStart = MP_TIMER(); switch (data_type) { case C_FLOAT: GA_Sgemm('N', 'N', m, n, k, alpha_flt, g_A, g_B, beta_flt, g_C); beta_flt = -1.0; break; case C_DBL: GA_Dgemm('N', 'N', m, n, k, alpha_dbl, g_A, g_B, beta_dbl, g_C); beta_dbl = -1.0; break; case C_DCPL: GA_Zgemm('N', 'N', m, n, k, alpha_dcpl, g_A, g_B, beta_dcpl, g_C); beta_dcpl.real = -1.0; break; case C_SCPL: GA_Cgemm('N', 'N', m, n, k, alpha_scpl, g_A, g_B, beta_scpl, g_C); beta_scpl.real = -1.0; break; default: GA_Error("wrong data type", data_type); } gTime += MP_TIMER()-gStart; GA_Destroy(g_B); clo[0] = clo[1] = 0; chi[0] = chi[1] = N-3; NGA_Copy_patch('N', g_c, lo, hi, g_A, clo, chi) ; GA_Add(alpha, g_A, beta, g_C, g_C); /* NGA_Add_patch (alpha, g_c, lo, hi, beta, g_C, clo, chi, g_C, clo, chi);*/ switch (data_type) { case C_FLOAT: value1_flt = GA_Fdot(g_C, g_C); if(fabsf(value1_flt) > TOLERANCE) { printf("\nabs(result) = %f > %f\n", fabsf(value1_flt), TOLERANCE); GA_Error("GA_Sgemm, NGA_Matmul_patch Failed", 1); } break; case C_DBL: value1_dbl = GA_Ddot(g_C, g_C); if(fabs(value1_dbl) > TOLERANCE) { printf("\nabs(result) = %f > %f\n", fabs(value1_dbl), TOLERANCE); GA_Error("GA_Dgemm, NGA_Matmul_patch Failed", 1); } break; case C_DCPL: value1_dcpl = GA_Zdot(g_C, g_C); if(fabs(value1_dcpl.real) > TOLERANCE || fabs(value1_dcpl.imag) > TOLERANCE) { printf("\nabs(result) = %f+%fi > %f\n", fabs(value1_dcpl.real), fabs(value1_dcpl.imag), TOLERANCE); GA_Error("GA_Zgemm, NGA_Matmul_patch Failed", 1); } break; case C_SCPL: value1_scpl = GA_Cdot(g_C, g_C); if(fabsf(value1_scpl.real) > TOLERANCE || fabsf(value1_scpl.imag) > TOLERANCE) { printf("\nabs(result) = %f+%fi > %f\n", fabsf(value1_scpl.real), fabsf(value1_scpl.imag), TOLERANCE); GA_Error("GA_Sgemm, NGA_Matmul_patch Failed", 1); } break; default: GA_Error("wrong data type", data_type); } if(me==0) printf("....OK\n"); GA_Destroy(g_A); GA_Destroy(g_c); GA_Destroy(g_C); } void do_work() { int i; int me = GA_Nodeid(); for(i=2; i<=GA_MAX_DIM; i++) { test(C_FLOAT, i); test(C_DBL, i); test(C_DCPL, i); test(C_SCPL, i); if(me == 0) printf("\n\n"); GA_Sync(); } } int main(int argc, char **argv) { Integer heap=9000000, stack=9000000; int me, nproc; DoublePrecision time; MP_INIT(argc,argv); GA_INIT(argc,argv); /* initialize GA */ nproc = GA_Nnodes(); me = GA_Nodeid(); if(me==0) printf("Using %d processes\n\n",nproc); if(!MA_init((Integer)MT_F_DBL, stack/nproc, heap/nproc)) GA_Error("MA_init failed bytes= %d",stack+heap); #ifdef PERMUTE { int i, *list = (int*)malloc(nproc*sizeof(int)); if(!list)GA_Error("malloc failed",nproc); for(i=0; i #include #include #include #include "ga.h" #include "macdecls.h" #include "mp3.h" #include "xgemm.h" #if defined(FUJITSU) || defined(CRAY_YMP) # define THRESH 1.0e-10 #else # define THRESH 1.0e-20 #endif #define ABS(x) ((x) >= 0.0 ? (x) : -(x)) #define MAX(x,y) ((x) >= (y) ? (x) : (y)) #define MISMATCH(x,y) (ABS((x)-(y)) / MAX(1.0,ABS((x)))) > THRESH #define NMAX 100 #define POW2(x) ((x)*(x)) #define POW4(x) ((x)*(x)*(x)*(x)) #define SPECIFIC_CASE 0 #define VERBOSE 0 static void dpatch_test( int size, int dist_same, int ampos, int akpos, int bkpos, int bnpos, int cmpos, int cnpos); static void dpatch_test2(); int main(int argc, char **argv) { int bufsize, gasize; time_t t; long seed; int sizes[] = {10, 50, 100}; int s, same_dist, ampos, akpos, bkpos, bnpos, cmpos, cnpos; MP_INIT(argc,argv); GA_Initialize_args(&argc,&argv); if (0 == GA_Nodeid()) { printf(" GA initialized\n"); fflush(stdout); } /* we need srandom seed to be the same on all procs */ t = time(NULL); seed = (long)t; GA_Lgop(&seed, 1, "max"); srandom(seed); #if VERBOSE printf("seed=%ld\n", seed); fflush(stdout); #endif GA_Sync(); /* we want to force distribution of innermost loop in nga_mulmat_patch by providing less buffer memory than needed */ if(GA_Uses_ma()) { gasize = (POW4(NMAX) * 3)/GA_Nnodes(); } else { gasize = 0; } bufsize = (NMAX/2 + 1)*(NMAX/3 + 1)*2 + POW2(NMAX/2 + 1); bufsize = bufsize*6/7; if (!MA_init(MT_DBL, 10, gasize+bufsize+500000)) { GA_Error("MA_init failed", -1); } if (0 == GA_Nodeid()) { printf(" \n"); printf(" CHECKING MATRIX MULTIPLICATION FOR PATCHES \n"); #if VERBOSE printf("gasize and bufsize are %d %d\n", gasize, bufsize); #endif printf(" \n"); fflush(stdout); } #if SPECIFIC_CASE dpatch_test(10, 0, 0, 1, 1, 2, 2, 3); #else for (s=0; s<1; ++s) { for (same_dist=0; same_dist<2; ++same_dist) { for (ampos=0; ampos<4; ++ampos) { for (akpos=ampos+1; akpos<4; ++akpos) { for (bkpos=0; bkpos<4; ++bkpos) { for (bnpos=bkpos+1; bnpos<4; ++bnpos) { for (cmpos=0; cmpos<4; ++cmpos) { for (cnpos=cmpos+1; cnpos<4; ++cnpos) { dpatch_test(sizes[s], same_dist, ampos, akpos, bkpos, bnpos, cmpos, cnpos); } } } } } } } } #endif #if 0 dpatch_test2(); #endif if(0 == GA_Nodeid()) { printf(" All tests successful \n"); fflush(stdout); } GA_Terminate(); MP_FINALIZE(); return 0; } /** * We start with a 4-dimensional array and multiply various 2D patches, * comparing results against a locally computed dgemm. */ static void dpatch_test( int size, int dist_same, int ampos, int akpos, int bkpos, int bnpos, int cmpos, int cnpos) { const int ndim=4; double *a, *b, *c, *r, *v; double alpha, beta; int nproc, me; int i, j; int dims[4], chunk[4], rld[3]; int alo[4], ahi[4], ald[3]; int blo[4], bhi[4], bld[3]; int clo[4], chi[4], cld[3]; int g_a, g_b, g_c; char ta, tb; int m, n, k; me = GA_Nodeid(); nproc = GA_Nnodes(); assert(size <= NMAX); #if SPECIFIC_CASE m = 1; n = 1; k = 4; #else m = random() % (size/2); n = random() % (size/2); k = random() % (size/2); if (m<=0) m = 1; if (n<=0) n = 1; if (k<=0) k = 1; #endif if (0 == me) { printf("size=%d, dist_same=%d ampos=%d akpos=%d bkpos=%d bnpos=%d cmpos=%d cnpos=%d m=%d n=%d k=%d\n", size, dist_same, ampos, akpos, bkpos, bnpos, cmpos, cnpos, m, n, k); fflush(stdout); } a = malloc(sizeof(double)*size*size); b = malloc(sizeof(double)*size*size); c = malloc(sizeof(double)*size*size); r = malloc(sizeof(double)*size*size); memset(a, 0, sizeof(double)*size*size); memset(b, 0, sizeof(double)*size*size); memset(c, 0, sizeof(double)*size*size); memset(r, 0, sizeof(double)*size*size); /* establish the shape and default chunking of the global arrays */ for (i=0; i Checking NGA_Matmul_patch ... \n"); fflush(stdout); } #endif /* fill the g_a and g_b global arrays entirely with data */ for (i=0; i0) ald[ampos-1] = m; if (akpos>0) ald[akpos-1] = k; bhi[bkpos] += k - 1; bhi[bnpos] += n - 1; if (bkpos>0) bld[bkpos-1] = k; if (bnpos>0) bld[bnpos-1] = n; chi[cmpos] += m - 1; chi[cnpos] += n - 1; if (cmpos>0) cld[cmpos-1] = m; if (cnpos>0) cld[cnpos-1] = n; #if 0 printf("a[%d:%d,%d:%d,%d:%d,%d:%d] %dx%dx%dx%d (%dx%d)\n", alo[0], ahi[0], alo[1], ahi[1], alo[2], ahi[2], alo[3], ahi[3], m, 1, k, 1, m, k); printf("ald={%d,%d,%d}\n", ald[0], ald[1], ald[2]); printf("b[%d:%d,%d:%d,%d:%d,%d:%d] %dx%dx%dx%d (%dx%d)\n", blo[0], bhi[0], blo[1], bhi[1], blo[2], bhi[2], blo[3], bhi[3], 1, k, 1, n, k, n); printf("bld={%d,%d,%d}\n", bld[0], bld[1], bld[2]); printf("c[%d:%d,%d:%d,%d:%d,%d:%d] %dx%dx%dx%d (%dx%d)\n", clo[0], chi[0], clo[1], chi[1], clo[2], chi[2], clo[3], chi[3], m, 1, 1, n, m, n); printf("cld={%d,%d,%d}\n", cld[0], cld[1], cld[2]); #endif /* reset our buffers, just in case */ memset(a, 0, sizeof(double)*size*size); memset(b, 0, sizeof(double)*size*size); memset(c, 0, sizeof(double)*size*size); memset(r, 0, sizeof(double)*size*size); /* get patches locally and compute locally */ NGA_Get(g_a, alo, ahi, a, ald); NGA_Get(g_b, blo, bhi, b, bld); GA_Sync(); ta = 'n'; tb = 'n'; alpha = 1e0; beta = 0e0; xb_dgemm(&tb, &ta, &n, &m, &k, &alpha, b, &n, a, &k, &beta, c, &n); /* perform global computation */ NGA_Matmul_patch(ta, tb, &alpha, &beta, g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi); GA_Sync(); /* get global result into local buf and compare results */ NGA_Get(g_c, clo, chi, r, cld); GA_Sync(); for (i=0; i<1; ++i) { if (MISMATCH(c[i],r[i])) { printf("at %d %f != %f\n", i, c[i], r[i]); GA_Error("mismatch", 1); } } free(a); free(b); free(c); free(r); GA_Destroy(g_a); GA_Destroy(g_b); GA_Destroy(g_c); } static void dpatch_test2() { } ga-5-3/global/testing/pgtestmatmult.F0000640005473000001440000002455111633440402016536 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif program ga_test c $Id: pgtestmatmult.F,v 1.2.6.1 2007-04-25 21:49:59 manoj Exp $ c c test ga_dgemm c compile with make FLD_REN="optimized blas" testmatmult.x c Note: - change nummax for large arrays c - turn off "verify" for large arrays due to memory c limitations, as verify=TRUE for large arrays produces c segfault, dumps core,or any crap. c c implicit none integer num_m,num_n,num_k,nummax,howmany,ntrans parameter (nummax=1024,howmany=2,ntrans=4) integer num1 parameter(num1=nummax) integer i,ii real*8 h0(num1*num1) integer g_c,g_b,g_a real*8 a real*8 t1,mf,avg_t(ntrans),avg_mf(ntrans) integer itime,ntimes,me integer nums_m(howmany),nums_n(howmany),nums_k(howmany) character*1 transa(ntrans),transb(ntrans),ta,tb real *8 tmpa(nummax,nummax), tmpb(nummax,nummax) real *8 tmpc(nummax,nummax) logical verify,status integer grp_me, nproc, nprocs, proc_group(0:100), proclist(100) data transa/'n','t','n','t'/ data transb/'n','n','t','t'/ data nums_m/512,1024/ data nums_n/512,1024/ data nums_k/512,1024/ #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" #include "mp3.fh" if (.not.ma_init(MT_DBL,1,20000000)) then call ga_error('failed: ma_init(MT_DBL,1,20000000)',10) endif status = ma_set_auto_verify(.true.) ! status = ma_set_hard_fail(.true.) ! status = ma_set_error_print(.true.) call ga_initialize() me = ga_nodeid() nproc = ga_nnodes() if(nproc .ne. 8) then write(*,*) 'nproc =', nproc call ga_error('failed: need exactly 8 processors',10) endif call ga_sync() proclist(1) = 0 proclist(2) = 1 proclist(3) = 2 proclist(4) = 3 nprocs = 4 proc_group(0) = ga_pgroup_create(proclist, nprocs) proclist(1) = 4 proclist(2) = 5 proclist(3) = 6 proclist(4) = 7 nprocs = 4 proc_group(1) = ga_pgroup_create(proclist, nprocs) if (me.lt.4) then call ga_pgroup_set_default(proc_group(0)) endif if (me.ge.4) then call ga_pgroup_set_default(proc_group(1)) endif c get new proc ids for your default group me = ga_nodeid() nproc = ga_nnodes() ii = 0 do i = 1, num1*num1 ii = ii + 1 if(ii.gt.num1) then ii = 0 endif h0(i) = ii enddo c c Compute times assuming 500 mflops and 5 second target time c c ntimes = max(3.0d0,5.0d0/(4.0d-9*num**3)) ntimes = 5 verify = .TRUE. ! to verify ga_dgemm c verify = .FALSE. ! to verify ga_dgemm #if 1 do ii=1,howmany num_m = nums_m(ii) num_n = nums_n(ii) num_k = nums_k(ii) a = 0.5d0/(num_m*num_n) if(num_m.gt.nummax .OR. num_n.gt.nummax .OR. & num_k.gt.nummax) then call ga_error('Insufficient memory: check nummax', 0) endif c c if (.not.ga_create(MT_DBL,num_m,num_n,'g_c', & 0,0,g_c)) then call ga_error('failed: create g_c',20) endif if (.not.ga_create(MT_DBL,num_k,num_n,'g_b', & 0,0,g_b)) then call ga_error('failed: create g_b',30) endif if (.not.ga_create(MT_DBL,num_m,num_k,'g_a', & 0,0,g_a)) then call ga_error('failed: create g_a',40) endif c c Initialize matrices A and B c call load_ga_from_square(g_a,num_m,h0,num1) c call load_ga_from_square(g_b,num_m,h0,num1) c if(me.eq.0) then call load_ga(g_a, h0, num_m, num_k) call load_ga(g_b, h0, num_k, num_n) endif call ga_zero(g_c) call ga_sync() if (ga_nodeid().eq.0) then write(*,*) ! for new line write(*,*) 'Matrix Multiplication C = A[', num_m, ',', . num_k, '] x B[', num_k, ',', num_n, ']' write(*,*) ! for new line call ffflush(6) endif do i = 1, ntrans avg_t(i) = 0.0d0 avg_mf(i) = 0.0d0 enddo do itime = 1, ntimes do i = 1, ntrans call ga_sync() ta = transa(i) tb = transb(i) t1 = util_timer() call ga_dgemm(ta,tb,num_m,num_n,num_k, & 1.0d0, g_a, g_b, 0.0d0, g_c) t1 = util_timer() - t1 if (me.eq.0) then mf = 2d0*num_m*num_n*num_k/t1*1d-6/ga_nnodes() avg_t(i) = avg_t(i)+t1 avg_mf(i) = avg_mf(i) + mf write(6,200) ' Run#', itime, t1, mf, ta, tb call ffflush(6) if (verify .AND. itime.eq.1) then call verify_ga_dgemm(ta, tb, num_m, num_n, num_k, & 1.0d0, g_a, g_b, 0.0d0, g_c,tmpa,tmpb,tmpc) endif endif enddo enddo if (ga_nodeid().eq.0) then write(*,*) ! for new line do i = 1, ntrans write(6,200) 'Average:',0,avg_t(i)/ntimes, . avg_mf(i)/ntimes,transa(i),transb(i) enddo if(verify) write(*,*) 'All ga_dgemms are verified...O.K.' write(*,*) ! for new line call ffflush(6) endif c c call ga_print(g_a) c call ga_print(g_b) c call ga_print(g_c) c if (.not.ga_destroy(g_c)) then call ga_error('failed: destroy g_c',20) endif if (.not.ga_destroy(g_b)) then call ga_error('failed: destroy g_b',30) endif if (.not.ga_destroy(g_a)) then call ga_error('failed: destroy g_a',40) endif enddo #endif 200 format(a15, i2, ': ', e12.4, ' seconds ',f12.1, . ' mflops/proc ', 3a2) call ga_pgroup_set_default(ga_pgroup_get_world()) call ga_sync() call ga_terminate call MP_FINALIZE() c end c c----------------------------------------------------------------------- c Verify for correctness. Process 0 computes BLAS dgemm c locally. For larger arrays, disbale this test as memory c might not be sufficient c subroutine verify_ga_dgemm(xt1, xt2, num_m, num_n, num_k, $ alpha, g_a, g_b, beta, g_c, tmpa, tmpb, tmpc) implicit none character *1 xt1, xt2 integer num_m, num_n, num_k, g_a, g_b, g_c double precision alpha, beta real *8 tmpa(num_m,num_k), tmpb(num_k,num_n), tmpc(num_m,num_n) integer i,j,type,dim1, dim2 real *8 abs_value #include "mafdecls.fh" #include "testutil.fh" #include "galinalg.fh" do i = 1,num_n do j = 1, num_m tmpc(j,i) = -1.0 tmpa(j,i) = -2.0 enddo enddo call ga_inquire(g_a, type, dim1, dim2) call ga_get(g_a, 1, dim1, 1, dim2, tmpa, dim1) call ga_inquire(g_b, type, dim1, dim2) call ga_get(g_b, 1, dim1, 1, dim2, tmpb, dim1) c compute dgemm sequentially call dgemm(xt1, xt2, num_m, num_n, num_k, alpha, & tmpa, num_m, tmpb, num_k, beta, tmpc, num_m) c after computing c locally, verify it with the values in g_c call ga_inquire(g_c, type, dim1, dim2) call ga_get(g_c, 1, dim1, 1, dim2, tmpa, dim1) do i = 1,num_n do j = 1, num_m abs_value = abs(tmpc(j,i)-tmpa(j,i)) if(abs_value .gt. 1.0 .OR. abs_value .lt. -1.0) then write(*,*) 'Values are = ', tmpc(j,i), tmpa(j,i) write(*,*) 'Values are = ', abs(tmpc(j,i)-tmpa(j,i)), . abs_value call ffflush(6) call ga_error('verify ga_dgemm failed', 0) endif enddo enddo return end c c----------------------------------------------------------------------- c called by process '0' (or your master process ) c subroutine load_ga(handle,f, dim1,dim2) implicit none integer handle integer dim1,dim2,i real*8 f(dim1,dim2) #include "mafdecls.fh" if(dim1.le.0)return if(dim2.le.0)return call ga_put(handle, 1, dim1, 1, dim2, f, dim1) return end c c----------------------------------------------------------------------- c must be called by all processors, if you need to fillup the c entire array c subroutine load_ga_from_square(handle,num,f,ndim) implicit none integer handle, memhandle integer num,ndim real*8 f(ndim,ndim) integer ilo, ihi, jlo, jhi, nx, ny, ibuff integer ga_nodeid, i1, i2, i, j, ix, jx #include "mafdecls.fh" call ga_distribution(handle, ga_nodeid(), ilo, ihi, jlo, jhi) if(ihi.le.0)return if(jhi.le.0)return c nx = ihi - ilo + 1 c ny = jhi - jlo + 1 do i = ilo,ihi,ndim do j = jlo,jhi,ndim call ga_put(handle,i,min(ihi,i+ndim),j,min(jhi,j+ndim), & f,ndim) enddo enddo return end c c----------------------------------------------------------------------- c must be called by all processors, if you need to fillup the c entire array c subroutine load_ga_from_triangle(handle,f,ndim) implicit none integer handle, memhandle real*8 f(*) integer ndim integer ilo, ihi, jlo, jhi, nx, ny, ibuff integer ga_nodeid, i1, i2, i, j, ix, jx #include "mafdecls.fh" call ga_distribution(handle, ga_nodeid(), ilo, ihi, jlo, jhi) if(ihi.le.0)return if(jhi.le.0)return nx = ihi - ilo + 1 ny = jhi - jlo + 1 if (.not.ma_alloc_get(MT_DBL,nx*ny,'flap',memhandle,ibuff)) then call ga_error('failed: allocate triangle',100) endif do i = 1,nx do j = 1,ny ix = i + ilo - 1 jx = j + jlo - 1 i1 = min(ix,jx) i2 = max(ix,jx) dbl_mb(ibuff + nx*(j-1) + (i-1) ) = f(i2*(i2-1)/2 + i1) enddo enddo call ga_put(handle,ilo,ihi,jlo,jhi, & dbl_mb(ibuff),nx) if (.not.ma_free_heap(memhandle)) then call ga_error('failed: free triangle',100) endif return end ga-5-3/global/testing/mir_perf2.F0000640005473000001440000003710211400012704015475 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c $Id: mir_perf2.F,v 1.1 2003-02-26 15:33:38 d3g293 Exp $ c------------------------------------------------------------------------ c Program perf.x is used to test performance of GA put, get, accumulate | c It has to be executed on four processors. | c remote operations access data on processes 1,2,3 in the round-robin way| c------------------------------------------------------------------------ c #define SLEEP sleep program perf implicit none #include "mafdecls.fh" #include "global.fh" integer heap c c*** Intitialize a message passing library c #include "mp3.fh" c c*** Intitialize the GA package call ga_initialize() if(ga_nnodes().ne.4 .and. ga_nodeid().eq.0) $ call ga_error('Program requires 4 GA processes',ga_nnodes()) c c*** Initialize the MA package heap = 900000 if (.not. ma_init(MT_DBL, heap,heap)) $ call ga_error('ma init failed',2*heap) c c call test2D() call test1D() c if(ga_nodeid().eq.0) print *,'All tests successful ' c call ga_terminate() c call MP_FINALIZE() end subroutine test1D() implicit none #include "mafdecls.fh" #include "global.fh" c c integer n, nn, num_chunks parameter (n = 1024*1024, nn = n/4, num_chunks=16) double precision buf(nn) c integer g_a integer ilo, ihi, jlo, jhi integer nproc, me, loop integer chunk(num_chunks) data chunk /1,9,16,81,256,576,900,2304,4096,8281, $ 16384,29241,65536,124609,193600,262144/ c nproc = ga_nnodes() me = ga_nodeid() c c*** Create global array if (.not. ga_create(MT_DBL, n, 1, 'a', 0, 0, g_a)) $ call ga_error(' ga_create failed ',1) c do loop=1,nn buf(loop) = .01d0 enddo call ga_zero(g_a) c if (me .eq. 0) then write(*,*)' ' write(*,*)' ' write(*,*)' ' write(*,55)n 55 format(' Performance of GA get, put & acc', $ ' for 1-dimensional sections of array[',i7,']') print *,' ' endif c c do loop=1,2 c c*** local ops c call ga_distribution(g_a, me, ilo, ihi, jlo, jhi) call TestPutGetAcc1 & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo, jhi, .true.) c c*** remote ops c call TestPutGetAcc1 & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo, jhi,.false.) c enddo end subroutine TestPutGetAcc1 & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo,jhi, local) implicit none #include "global.fh" #include "testutil.fh" c integer num_chunks, chunk(num_chunks) integer n, ilo, ihi, jlo,jhi,g_a double precision buf(*), tg, tp, ta double precision time_acc1, time_get1, time_put1 logical local c integer me integer loop, jump, count, bytes c me = ga_nodeid() if (me .eq. 0) then write(6,*)' ' if(local) then write(6,'(26X, 25HLocal 1-D Array Section )') else write(6,'(26X, 25HRemote 1-D Array Section )') endif write(6,*)' section get put', & ' accumulate' write(6,*)' bytes dim sec MB/s sec MB/s', & ' sec MB/s' call flush(6) endif call ga_sync() c do loop = 1, num_chunks bytes = util_mdtob(1)*chunk(loop) ! how much data is accessed jump = n/(6000*loop) ! jump distance between consecutive patches if(loop.eq.num_chunks)jump=0 c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, 1 , 1d0*me*loop) if (me .eq. 0) then tg=time_get1(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, 1 , 1d0*me*loop) if (me .eq. 0) then tp=time_put1(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, 1 , 1d0*me*loop) if (me .eq. 0) then ta=time_acc1(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c if (me .eq. 0) then write(6,77)bytes, chunk(loop), tg, & 1d-6*bytes/tg,tp, 1d-6*bytes/tp, ta, 1d-6*bytes/ta call flush(6) endif enddo c 77 format(i7, i7,1x, 3(1x,d8.3,1x,d8.3)) end double precision function & time_acc1(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je logical local integer rows, indx, shifti c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 shifti = 2*rows jlo = js jhi = je seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 count = count + 1 if (local) then call ga_acc(g_a, ilo, ihi, jlo, jhi, buf, chunk, 1d0) else call ga_acc(g_a, ilo+shifti, ihi+shifti, $ jlo, jhi, buf, chunk, 1d0) endif enddo seconds = util_timer() - seconds c time_acc1 = seconds/count end double precision function & time_get1(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je integer rows, indx, shifti logical local c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 shifti = 2*rows jlo = js jhi = je seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 count = count + 1 if (local) then call ga_get(g_a, ilo, ihi, jlo, jhi, buf, chunk) else call ga_get(g_a, ilo+shifti, ihi+shifti, $ jlo, jhi, buf, chunk) endif enddo seconds = util_timer() - seconds c time_get1 = seconds/count end double precision function & time_put1(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je integer rows, indx, shifti logical local c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 shifti = 2*rows jlo = js jhi = je seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 count = count + 1 if (local) then call ga_put(g_a, ilo, ihi, jlo, jhi, buf, chunk) else call ga_put(g_a, ilo+shifti, ihi+shifti, $ jlo, jhi, buf, chunk) endif enddo seconds = util_timer() - seconds c time_put1 = seconds/count end c c test for square patches c subroutine test2D() implicit none #include "mafdecls.fh" #include "global.fh" c integer n, nn, num_chunks parameter (n = 1024, nn = n*n/4, num_chunks=16) double precision buf(nn) c integer g_a integer ilo, ihi, jlo, jhi integer nproc, me, loop integer chunk(num_chunks) data chunk /1,3,4,9,16,24,30,48,64,91,128,171,256,353,440,512/ c nproc = ga_nnodes() me = ga_nodeid() c c*** Create global array if (.not. ga_create(MT_DBL, n, n, 'a', 0, 0, g_a)) $ call ga_error(' ga_create failed ',1) c do loop=1,nn buf(loop) = .01d0 enddo call ga_zero(g_a) c if (me .eq. 0) then write(*,*)' ' write(*,55)n,n 55 format(' Performance of GA get, put & acc', $ ' for square sections of array[',i4,',',i4,']') print *,' ' endif c c do loop=1,2 c c*** local ops c call ga_distribution(g_a, me, ilo, ihi, jlo, jhi) call TestPutGetAcc & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo, jhi, .true.) c c*** remote ops c call TestPutGetAcc & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo, jhi,.false.) c enddo end subroutine TestPutGetAcc & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo,jhi, local) implicit none #include "global.fh" #include "testutil.fh" c integer num_chunks, chunk(num_chunks) integer n, ilo, ihi, jlo,jhi,g_a double precision buf(*), tg, tp, ta double precision time_acc, time_get, time_put logical local c integer me integer loop, jump, count, bytes c me = ga_nodeid() if (me .eq. 0) then write(6,*)' ' if(local) then write(6,'(26X, 25HLocal 2-D Array Section )') else write(6,'(26X, 25HRemote 2-D Array Section )') endif write(6,*)' section get put', & ' accumulate' write(6,*)' bytes dim sec MB/s sec MB/s', & ' sec MB/s' call flush(6) endif call ga_sync() c do loop = 1, num_chunks bytes = util_mdtob(1)*chunk(loop)*chunk(loop) !how much data is accessed jump = n/(60*loop) ! jump distance between consecutive patches if(loop.eq.num_chunks)jump=0 c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, n , 1d0*me*loop) if (me .eq. 0) then tg=time_get(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, n , 1d0*me*loop) if (me .eq. 0) then tp=time_put(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, n , 1d0*me*loop) if (me .eq. 0) then ta=time_acc(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c if (me .eq. 0) then write(6,77)bytes, chunk(loop), tg, & 1d-6*bytes/tg,tp, 1d-6*bytes/tp, ta, 1d-6*bytes/ta call flush(6) endif enddo c 77 format(i7, i7,1x, 3(1x,d8.3,1x,d8.3)) end double precision function & time_acc(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je logical local integer rows, cols, indx, shifti(3), shiftj(3) c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 cols = je - js + 1 shifti(1) = rows shifti(2) = 0 shifti(3) = rows shiftj(1) = 0 shiftj(2) = cols shiftj(3) = cols seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 do jlo = js, je -chunk-jump +1, chunk+jump jhi = jlo + chunk -1 count = count + 1 if (local) then call ga_acc(g_a, ilo, ihi, jlo, jhi, buf, chunk, 1d0) else indx = Mod(count,3) + 1 call ga_acc(g_a, ilo+shifti(indx), ihi+shifti(indx), $ jlo+shiftj(indx), jhi+shiftj(indx), $ buf, chunk, 1d0) endif enddo enddo seconds = util_timer() - seconds c time_acc = seconds/count end double precision function & time_get(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je integer rows, cols, indx, shifti(3), shiftj(3) logical local c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 cols = je - js + 1 shifti(1) = rows shifti(2) = 0 shifti(3) = rows shiftj(1) = 0 shiftj(2) = cols shiftj(3) = cols seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 do jlo = js, je -chunk-jump +1, chunk+jump jhi = jlo + chunk -1 count = count + 1 if (local) then call ga_get(g_a, ilo, ihi, jlo, jhi, buf, chunk) else indx = Mod(count,3) + 1 call ga_get(g_a, ilo+shifti(indx), ihi+shifti(indx), $ jlo+shiftj(indx), jhi+shiftj(indx), $ buf, chunk) endif enddo enddo seconds = util_timer() - seconds c time_get = seconds/count end double precision function & time_put(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je integer rows, cols, indx, shifti(3), shiftj(3) logical local c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 cols = je - js + 1 shifti(1) = rows shifti(2) = 0 shifti(3) = rows shiftj(1) = 0 shiftj(2) = cols shiftj(3) = cols seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 do jlo = js, je -chunk-jump +1, chunk+jump jhi = jlo + chunk -1 count = count + 1 if (local) then call ga_put(g_a, ilo, ihi, jlo, jhi, buf, chunk) else indx = Mod(count,3) + 1 call ga_put(g_a, ilo+shifti(indx), ihi+shifti(indx), $ jlo+shiftj(indx), jhi+shiftj(indx), $ buf, chunk) endif enddo enddo seconds = util_timer() - seconds c time_put = seconds/count end subroutine my_sleep(seconds) implicit none #include "global.fh" #include "testutil.fh" c double precision ts, te, work integer seconds, loop common /sleep_block/ work c ts = util_timer() work = 0. 100 continue do loop= 1, 500 work = work + 1. enddo te = util_timer() if(te - ts .lt. real(seconds)) goto 100 * print *, work, ts, te end ga-5-3/global/testing/merge.F0000640005473000001440000000742711364420655014737 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c $Id: merge.F,v 1.4 2000-05-25 01:09:19 d3h325 Exp $ c This program should run only in the network of MPPs (IWAY) environment c c program test #include "mafdecls.fh" #include "global.fh" c#include "tcgmsg.fh" logical status c c*** Intitialize a message passing library c #include "mp3.fh" c c*** Intitialize the GA package call ga_initialize() if(ga_nodeid().eq.0)then print *,' GA initialized' call ffflush(6) endif c status = ma_init(MT_DBL, 50000, 50000/ga_nnodes()) if (.not. status)call ga_error('ma init failed',-1) call merge_test() call ga_terminate() call MP_FINALIZE() end subroutine merge_test() implicit none #include "mafdecls.fh" #include "global.fh" c integer n,m parameter (n = 200) parameter (m = n*n) double precision a(n,n), buf(n) integer nproc, me integer i, j, ilo, ihi, jlo, jhi integer g_a, g_b integer trial, max_trial, cluster, eps logical status c max_trial = 10 me = ga_nodeid() nproc = ga_nnodes() if( me.eq.ga_net_nodeid())then cluster = 0 else cluster = 1 endif eps = n/max_trial c do j = 1, n do i = 1, n a(i,j) = i-1 + (j-1)*n enddo enddo c c*** Create a global arrays c if (me .eq. 0) then print *,ga_nodeid(), ' Creating Arrays' call ffflush(6) endif status = ga_create(MT_DBL, n, n, 'a', 1, 1, g_a) if (.not. status) then write(6,*) ' A: ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif status = ga_create(MT_DBL, n, n, 'b', 1, 1, g_b) if (.not. status) then write(6,*) ' B: ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c call ga_zero(g_a) c c c*** do trial = 1, max_trial ilo = 1 ihi = n jlo = 1 jhi = n c = 1 if(trial .eq.1) then do j = 1+ga_net_nodeid(), n, ga_net_nnodes() call ga_put(g_a,1,n,j,j,a(1,j),n) enddo c if (me .eq. 0) then write(6,100)trial, ilo,ihi,jlo,jhi 100 format(i2,'> column merging [',i3,':',i3,',', $ i3,':',i3,'] ') call ffflush(6) endif else c > 2 ilo = 1 ihi = trial*eps jlo = 1 jhi = trial*eps if(cluster.eq.0)then call ga_dfill_patch(g_a, ilo,ihi,jlo,jhi,0d0) ilo = 1 ihi = n jlo = 1 jhi = n else call ga_zero(g_a) call ga_copy_patch('n', g_b,ilo,ihi,jlo,jhi, $ g_a,ilo,ihi,jlo,jhi) endif c if (me .eq. 0) then write(6,101)trial, ilo,ihi,jlo,jhi 101 format(i2,'> patch merging [',i3,':',i3,',', $ i3,':',i3,'] ') call ffflush(6) endif endif c call ga_net_merge(g_a, ilo, ihi, jlo, jhi) c call ga_print(g_a,1) c c*** check if correct do j = 1+ga_nodeid(), n, ga_nnodes() call ga_get(g_a,1,n,j,j,buf,n) do i = 1, n if(a(i,j) .ne. buf(i)) then print *, me, '(',i,j,')', a(i,j), buf(i) call ga_error("merging failed",j) endif enddo enddo if (me .eq. 0) then write(6,*)' OK ' call ffflush(6) endif c if(trial .eq.1) then c g_b keeps reference data for next trials call ga_copy(g_a,g_b) endif enddo c status = ga_destroy(g_a) c end ga-5-3/global/testing/testmultrect.c0000640005473000001440000000420511633502565016423 0ustar d3n000users/** * testmultrect.c * Test rectangular matrix multiplication. * * Nawab Ali */ #if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include "ga.h" #include "macdecls.h" #include "mp3.h" #define NDIMS 2 /* 2-dimensional matrices */ #define HEAP 4000000 #define STACK 4000000 int m = 2; int k = 3; int n = 4; int g_a, g_b, g_c; /* GA handles for matrices A, B, and C */ int mr_create_matrices(void); int mr_cleanup(void); int main(int argc, char **argv) { int ret, nprocs; int me, heap, stack; /* Initialize message passing and GA */ MP_INIT(argc,argv); GA_INIT(argc,argv); me = GA_Nodeid(); nprocs = GA_Nnodes(); heap = HEAP/nprocs; stack = STACK/nprocs; if (!MA_init(C_DBL, stack, heap)) { GA_Error("MA_init failed", stack+heap); } /* Create the matrices A, B, C */ ret = mr_create_matrices(); GA_Print(g_a); GA_Print(g_b); GA_Print(g_c); /* C = A x B */ GA_Dgemm('N', 'N', m, n, k, 1.0, g_a, g_b, 0.0, g_c); /* Clean up */ ret = mr_cleanup(); GA_Terminate(); MP_FINALIZE(); return 0; } int mr_create_matrices(void) { double val_a = 10.0; double val_b = 20.0; int ret, dims[NDIMS]; /* Create a 2-dimensional matrix A[m][k] */ dims[0] = m; dims[1] = k; g_a = GA_Create_handle(); GA_Set_array_name(g_a, "Matrix A"); GA_Set_data(g_a, NDIMS, dims, C_DBL); ret = GA_Allocate(g_a); GA_Fill(g_a, &val_a); /* Create a 2-dimensional matrix B[k][n] */ dims[0] = k; dims[1] = n; g_b = GA_Create_handle(); GA_Set_array_name(g_b, "Matrix B"); GA_Set_data(g_b, NDIMS, dims, C_DBL); ret = GA_Allocate(g_b); GA_Fill(g_b, &val_b); /* Create a 2-dimensional matrix C[m][n] */ dims[0] = m; dims[1] = n; g_c = GA_Create_handle(); GA_Set_array_name(g_c, "Matrix C"); GA_Set_data(g_c, NDIMS, dims, C_DBL); ret = GA_Allocate(g_c); GA_Zero(g_c); return 0; } int mr_cleanup(void) { GA_Destroy(g_a); GA_Destroy(g_b); GA_Destroy(g_c); return 0; } ga-5-3/global/testing/ghosts.F0000640005473000001440000005641211731677051015147 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c $Id: ghosts.F,v 1.1.2.1 2007-05-07 19:02:02 d3g293 Exp $ c vector boxes lack arithmetic precision #ifdef CRAY_YMP # define THRESH 1d-10 # define THRESHF 1e-5 #elif defined(FUJITSU) # define THRESH 1d-12 # define THRESHF 1e-5 #else # define THRESH 1d-13 # define THRESHF 1e-5 #endif #define MISMATCH(x,y) abs(x-y)/max(1d0,abs(x)).gt.THRESH #define MISMATCHF(x,y) abs(x-y)/max(1.0,abs(x)).gt.THRESHF #define USE_CORNERS #define PRINT_VAL c#define NEW_API c c Add some control over which tests are performed c #define TEST_1 #define TEST_2 #define TEST_3 #define TEST_4 c#define TEST_5 #define TEST_6 #define TEST_7 program main implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" integer heap, stack, fudge, ma_heap, me, nproc integer inode,proclist(100),i,j,nprocs integer proc_group(0:100), my_proc_group, grp, num_grp integer midnode, splitnode, color, key logical status parameter (heap=2000*2000*4, fudge=2000, stack=2000*2000) c c*** Intitialize a message passing library c #include "mp3.fh" c c*** Initialize GA c c There are 2 choices: ga_initialize or ga_initialize_ltd. c In the first case, there is no explicit limit on memory usage. c In the second, user can set limit (per processor) in bytes. c call ga_initialize() nproc = ga_nnodes() me = ga_nodeid() c c*** Initialize the MA package c MA must be initialized before any global array is allocated c ma_heap = heap + fudge status = ma_init(MT_DCPL, stack, ma_heap) if (.not. status) call ga_error('ma_init failed',-1) c c we can also use GA_set_memory_limit BEFORE first ga_create call c call GA_set_memory_limit(util_mdtob(ma_heap)) c c*** Create process groups on SMP nodes c #if 1 midnode = nproc/2 do i = 1, midnode proclist(i) = i-1 end do nprocs = midnode proc_group(0) = ga_pgroup_create(proclist, nprocs) do i = midnode+1, nproc proclist(i-midnode) = i-1 end do nprocs = nproc - midnode proc_group(1) = ga_pgroup_create(proclist, nprocs) c call ga_pgroup_set_default(proc_group(inode)) if (me.lt.midnode) then call ga_pgroup_set_default(proc_group(0)) call runtest endif call ga_pgroup_set_default(ga_pgroup_get_world()) call ga_sync() if (me.ge.midnode) then call ga_pgroup_set_default(proc_group(1)) call runtest endif #else c split into 2 equal groups if(me.eq.0) then print *,' ************* Testing ga_pgroup_split ************ ' call ffflush(6) endif num_grp = 2 grp = ga_pgroup_get_default() my_proc_group = ga_pgroup_split(grp, num_grp) call ga_pgroup_set_default(my_proc_group) call runtest c reset to world group call ga_pgroup_set_default(ga_pgroup_get_world()) call ga_sync() c split into 2 irregular groups (33:67) if(me.eq.0) then print *,' ********* Testing ga_pgroup_split_irreg *********** ' call ffflush(6) endif num_grp = 2 grp = ga_pgroup_get_default() splitnode = nproc/3 if(me.lt.splitnode) then color=0 else color=1 endif my_proc_group = ga_pgroup_split_irreg(grp, color) call ga_pgroup_set_default(my_proc_group) if(me.lt.splitnode) then call runtest endif call ffflush(6) call ga_sync() if(me.ge.splitnode) then call runtest endif #endif call ga_pgroup_set_default(ga_pgroup_get_world()) c c*** Check if memory limits are enforced c c call check_mem(util_mdtob(ma_heap*ga_nnodes())) c c*** Tidy up the GA package c call ga_sync() c if(ga_nodeid().eq.0) print *,'All tests successful ' c write(6,*) 'Calling ga_terminate' call ga_terminate() c*** Tidy up after message-passing library c call MP_FINALIZE() c stop end subroutine runtest implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" integer heap, stack, fudge, ma_heap, me integer nmax, DIM, nwidth, MAXPROC, nloop parameter (nmax = 1000, DIM = 2, nwidth = 2, MAXPROC = 2000) parameter (nloop = 50) integer ndim, nproc, pdims(7), type, dcnt, g_a, maxval integer i, j, dims(7), width(7), map(2*nmax) integer lo(7), hi(7), ld(7) integer lo2(7), hi2(7), ld2(7) integer dims3(7), ld3(7), chunk(7) integer a(nmax, nmax), b(nmax+2*nwidth,nmax+2*nwidth) double precision start,t1,t2,t3,t4,t5,tmp double precision t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18 double precision t19,t20,t21,t22,t23,t24 logical status, safe_put, safe_get, has_data(0:MAXPROC-1) logical corner_flag GA_ACCESS_INDEX_TYPE index3 #ifdef USE_CORNERS corner_flag = .true. #else corner_flag = .false. #endif c c*** Initialize GA c c There are 2 choices: ga_initialize or ga_initialize_ltd. c In the first case, there is no explicit limit on memory usage. c In the second, user can set limit (per processor) in bytes. c nproc = ga_nnodes() me = ga_nodeid() c if(me.eq.0)then print *, 'using ', nproc, ' process(es)' call ffflush(6) endif c c Test ghost distributions c ndim = DIM c c Create irregular distribution on all nodes c call factor(nproc,ndim,pdims) dims(1) = pdims(1) * nmax dims(2) = pdims(2) * nmax maxval = 1 do i = 1, ndim maxval = dims(i)*maxval end do maxval = maxval - 1 c dcnt = 1 do i = 1, pdims(1) map(dcnt) = (i-1)*nmax + 1 dcnt = dcnt + 1 end do do i = 1, pdims(2) map(dcnt) = (i-1)*nmax + 1 dcnt = dcnt + 1 end do c do i = 1, ndim width(i) = nwidth chunk(i) = 1 if (pdims(i).gt.dims(i)) pdims(i) = dims(i) if (me.eq.0) then write(6,*) 'Value of pdims(',i,') is ',pdims(i) endif call ffflush(6) c do j = 1, pdims(i) c if (j.eq.1) then c map(dcnt) = 1 c else c map(dcnt) = ((j-1)*dims(i))/pdims(i) + 1 c endif c dcnt = dcnt + 1 c end do ld(i) = nmax end do if (me.eq.0) then do i = 1, dcnt - 1 write(6,'("map(",i2,") = ",i5)') i,map(i) call ffflush(6) end do endif type = MT_INT #ifdef NEW_API g_a = ga_create_handle(); call ga_set_data(g_a,ndim,dims,type) call ga_set_array_name(g_a,"test_array") call ga_set_irreg_distr(g_a,map,pdims) call ga_set_ghosts(g_a,width) status = ga_allocate(g_a) #else status = nga_create_ghosts_irreg (type, ndim, dims, width, + "test_array", map, pdims, g_a) c status = nga_create_ghosts(type, ndim, dims, width, c + "test_array", chunk, g_a) #endif if (status.and.me.eq.0) then write(6,*) '*' write(6,*) '* Global array creation was successful' write(6,*) '*' elseif (.not.status) then write(6,*) 'Global array creation failure on ',me endif c c Find processors that have data c call ga_sync do i = 0, nproc-1 call nga_distribution(g_a, i, lo, hi) has_data(i) = .true. do j = 1, ndim if (lo(j).eq.0.and.hi(j).eq.-1) has_data(i) = .false. end do call ffflush(6) call ga_sync end do c c initialize g_a c call ga_sync call nga_distribution(g_a, me, lo, hi) do i = 1, hi(1) - lo(1) + 1 do j = 1, hi(2) - lo(2) + 1 a(i,j) = (i + lo(1) - 2)*dims(1) + (j + lo(2) - 2) end do end do safe_put = .true. do i = 1, ndim if (hi(i).lt.lo(i)) safe_put = .false. end do if (has_data(me).and.safe_put) call nga_put(g_a, lo, hi, a, ld) c c get patch with ghost cells c do i = 1, ndim lo2(i) = lo(i) - width(i) hi2(i) = hi(i) + width(i) ld2(i) = ld(i) + 2*width(i) end do call ga_sync call ffflush(6) safe_get = .true. c do i = 1, ndim c if (hi2(i)-lo2(i).ge.dims(i)) safe_get = .false. c end do t19 = 0.0d00 t20 = 0.0d00 t21 = 0.0d00 do i = 1, nloop start = util_timer() call ga_ghost_barrier t19 = t19 + util_timer() - start start = util_timer() if (has_data(me).and.safe_get) + call nga_periodic_get(g_a, lo2, hi2, b, ld2) t20 = t20 + util_timer() - start start = util_timer() call ga_ghost_barrier t21 = t21 + util_timer() - start end do t19 = t19/dble(nloop) t20 = t20/dble(nloop) t21 = t21/dble(nloop) 102 format(14i5) if (me.eq.0) then write(6,*) '*' write(6,*) '* Performing nga_access_ghosts' write(6,*) '*' call ffflush(6) endif if (has_data(me)) call nga_access_ghosts(g_a, dims3, + index3, ld3) call ga_sync #ifdef TEST_1 if (me.eq.0) then write(6,*) write(6,*) 'Testing update 1' write(6,*) endif t1 = 0.0d00 t2 = 0.0d00 t3 = 0.0d00 do i = 1, nloop call zero_ghosts(int_mb(index3),ld3,a,hi(1)-lo(1)+1,width,dims3) start = util_timer() call ga_ghost_barrier t1 = t1 + util_timer() - start start = util_timer() call ga_update1_ghosts(g_a) t2 = t2 + util_timer() - start start = util_timer() call ga_ghost_barrier t3 = t3 + util_timer() - start end do t1 = t1/dble(nloop) t2 = t2/dble(nloop) t3 = t3/dble(nloop) #ifdef PRINT_VAL if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) #endif call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*width(1),has_data,width,corner_flag,1) call ga_sync #endif #ifdef TEST_2 if (me.eq.0) then write(6,*) write(6,*) 'Testing update 2' write(6,*) endif t4 = 0.0d00 t5 = 0.0d00 t6 = 0.0d00 do i = 1, nloop call zero_ghosts(int_mb(index3),ld3,a,hi(1)-lo(1)+1,width,dims3) start = util_timer() call ga_ghost_barrier t4 = t4 + util_timer() - start start = util_timer() status = ga_update2_ghosts(g_a) t5 = t5 + util_timer() - start start = util_timer() call ga_ghost_barrier t6 = t6 + util_timer() - start end do t4 = t4/dble(nloop) t5 = t5/dble(nloop) t6 = t6/dble(nloop) #ifdef PRINT_VAL if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) #endif call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*width(1),has_data,width,corner_flag,2) call ga_sync #endif #ifdef TEST_3 if (me.eq.0) then write(6,*) write(6,*) 'Testing update 3' write(6,*) endif t7 = 0.0d00 t8 = 0.0d00 t9 = 0.0d00 do i = 1, nloop call zero_ghosts(int_mb(index3),ld3,a,hi(1)-lo(1)+1,width,dims3) start = util_timer() call ga_ghost_barrier t7 = t7 + util_timer() - start start = util_timer() status = ga_update3_ghosts(g_a) t8 = t8 + util_timer() - start start = util_timer() call ga_ghost_barrier t9 = t9 + util_timer() - start end do t7 = t7/dble(nloop) t8 = t8/dble(nloop) t9 = t9/dble(nloop) #ifdef PRINT_VAL if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) #endif call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*width(1),has_data,width,corner_flag,3) call ga_sync #endif #ifdef TEST_4 if (me.eq.0) then write(6,*) write(6,*) 'Testing update 4' write(6,*) endif t10 = 0.0d00 t11 = 0.0d00 t12 = 0.0d00 call ga_sync call ga_set_ghost_corner_flag(g_a,corner_flag) c status = ga_set_update4_info(g_a) do i = 1, nloop call zero_ghosts(int_mb(index3),ld3,a,hi(1)-lo(1)+1,width,dims3) start = util_timer() call ga_ghost_barrier t10 = t10 + util_timer() - start start = util_timer() status = ga_update4_ghosts(g_a) t11 = t11 + util_timer() - start start = util_timer() call ga_ghost_barrier t12 = t12 + util_timer() - start end do t10 = t10/dble(nloop) t11 = t11/dble(nloop) t12 = t12/dble(nloop) #ifdef PRINT_VAL if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) #endif call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*width(1),has_data,width,corner_flag,4) call ga_sync #endif #ifdef TEST_5 if (me.eq.0) then write(6,*) write(6,*) 'Testing update 5' write(6,*) endif t13 = 0.0d00 t14 = 0.0d00 t15 = 0.0d00 call ga_sync call ga_set_ghost_corner_flag(g_a,corner_flag) c status = ga_set_update5_info(g_a) do i = 1, nloop call zero_ghosts(int_mb(index3),ld3,a,hi(1)-lo(1)+1,width,dims3) start = util_timer() call ga_ghost_barrier t13 = t13 + util_timer() - start start = util_timer() c write(6,*) 'got to ga_update5_ghosts' status = ga_update5_ghosts(g_a) c write(6,*) 'completed ga_update5_ghosts' t14 = t14 + util_timer() - start start = util_timer() call ga_ghost_barrier t15 = t15 + util_timer() - start end do t13 = t13/dble(nloop) t14 = t14/dble(nloop) t15 = t15/dble(nloop) #ifdef PRINT_VAL if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) #endif call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*width(1),has_data,width,corner_flag,5) call ga_sync #endif #ifdef TEST_6 if (me.eq.0) then write(6,*) write(6,*) 'Testing update 6' write(6,*) endif t16 = 0.0d00 t17 = 0.0d00 t18 = 0.0d00 call ga_sync do i = 1, nloop call zero_ghosts(int_mb(index3),ld3,a,hi(1)-lo(1)+1,width,dims3) start = util_timer() call ga_ghost_barrier t16 = t16 + util_timer() - start start = util_timer() status = ga_update6_ghosts(g_a) t17 = t17 + util_timer() - start start = util_timer() call ga_ghost_barrier t18 = t18 + util_timer() - start end do t16 = t16/dble(nloop) t17 = t17/dble(nloop) t18 = t18/dble(nloop) #ifdef PRINT_VAL if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) #endif call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*width(1),has_data,width,corner_flag,6) call ga_sync #endif #ifdef TEST_7 if (me.eq.0) then write(6,*) write(6,*) 'Testing update 7' write(6,*) endif t22 = 0.0d00 t23 = 0.0d00 t24 = 0.0d00 call ga_sync do i = 1, nloop call zero_ghosts(int_mb(index3),ld3,a,hi(1)-lo(1)+1,width,dims3) start = util_timer() call ga_ghost_barrier t22 = t22 + util_timer() - start start = util_timer() status = ga_update7_ghosts(g_a) t23 = t23 + util_timer() - start start = util_timer() call ga_ghost_barrier t24 = t24 + util_timer() - start end do t22 = t22/dble(nloop) t23 = t23/dble(nloop) t24 = t24/dble(nloop) #ifdef PRINT_VAL if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) #endif call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*width(1),has_data,width,corner_flag,7) call ga_sync #endif if (me.eq.0) then write(6,*) '*' write(6,*) '* Completed updates successfully' write(6,*) '*' call ffflush(6) endif call ga_sync c #ifdef TEST_1 tmp = t2 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,300) 1,tmp/dble(nproc) endif tmp = t1 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t3 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif #endif #ifdef TEST_2 tmp = t5 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,300) 2,tmp/dble(nproc) endif tmp = t4 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t6 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif #endif #ifdef TEST_3 tmp = t8 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,300) 3,tmp/dble(nproc) endif tmp = t7 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t9 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif #endif #ifdef TEST_4 tmp = t11 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,300) 4,tmp/dble(nproc) endif tmp = t10 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t12 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif #endif #ifdef TEST_5 tmp = t14 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,300) 5,tmp/dble(nproc) endif tmp = t13 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t15 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif #endif #ifdef TEST_6 tmp = t17 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,300) 6,tmp/dble(nproc) endif tmp = t16 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t18 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif #endif #ifdef TEST_7 tmp = t23 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,300) 7,tmp/dble(nproc) endif tmp = t22 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t24 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif #endif tmp = t20 call ga_dgop(6,tmp,1,'+') if (me.eq.0) then write(6,310) tmp/dble(nproc) endif tmp = t19 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t21 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif 300 format('Average time for ga_update',i1,'_ghosts ',e12.3) 310 format('Average time for nga_periodic_get ',e12.3) 400 format(' Average time for prior sync ',e12.3) 500 format(' Average time for post sync ',e12.3) 127 continue c if(ga_nodeid().eq.0) print *,'All tests successful ' c return end c subroutine zero_ghosts(a,lda,b,ldb,w,dims) integer lda,ldb,w(*),dims(*) integer a(lda,*),b(ldb,*) integer i, j do j = 1, dims(2) do i = 1, dims(1) if ((i.gt.w(1).and.i.le.dims(1)-w(1)).and. + (j.gt.w(2).and.j.le.dims(2)-w(2))) then a(i,j) = b(i-w(1),j-w(2)) else a(i,j) = 0 endif end do end do return end c subroutine aprint(a,nrow,ncol,ld,has_data) #include "global.fh" integer ld integer a(ld,*) integer i, j, k, nproc logical has_data(0:1999) nproc = ga_nnodes() do k = 1, nproc call ga_sync if (k-1.eq.ga_nodeid().and.has_data(k-1)) then write(6,*) '*' write(6,*) '* Data on processor ',k-1 write(6,*) '*' do i = 1, min(nrow,12) write (6,102) (a(i,j), j = 1, min(ncol,12)) 102 format(14i5) end do endif call ffflush(6) enddo c return end c subroutine atest(a,nrow,ncol,ld,b,ld2,has_data,width, + check_corner, idx) #include "global.fh" integer ld, width(7) integer a(ld,*), b(ld2,*) integer i, j, nproc, me, idx logical has_data(0:1999), check_data logical check_corner nproc = ga_nnodes() me = ga_nodeid() check_data = .true. call ga_sync if (has_data(me)) then do i = 1, nrow do j = 1, ncol if (.not.check_corner.and.(.not. + ((i.le.width(1).and.j.le.width(2)).or. + (i.le.width(1).and.j.gt.ncol-width(2)).or. + (i.gt.nrow-width(1).and.j.le.width(2)).or. + (i.gt.nrow-width(1).and.j.gt.ncol-width(2))))) then if (a(i,j).ne.b(i,j)) check_data = .false. else if (check_corner) then if (a(i,j).ne.b(i,j)) check_data = .false. endif end do end do else check_data = .false. endif if (check_data) then i = 1 else i = 0 endif call ga_igop(1,i,1,'+') if (i.ne.nproc) then check_data = .false. else check_data = .true. endif if (check_data.and.me.eq.0) then write(6,*) '*' write(6,*) '* Data from nga_access_ghosts and' write(6,*) '* nga_periodic_get is the same on' write(6,100) idx 100 format( ' * all processors for update ',i1) write(6,*) '*' else if (.not.check_data) then write(6,*) '*' write(6,*) '* Data from nga_access_ghosts and' write(6,*) '* nga_periodic_get is NOT the same on' write(6,200) me,idx 200 format( ' * processor ',i2,' for update ',i1) write(6,*) '*' endif call ffflush(6) c return end c subroutine factor(p,ndim,dims) implicit none integer i,j,p,ndim,dims(7),imin,mdim integer ip,ifac,pmax,prime(1000) integer fac(1000) c i = 1 ip = p do i = 1, ndim dims(i) = 1 end do c c factor p completely c first, find all prime numbers less than or equal to p c pmax = 0 do i = 2, p do j = 1, pmax if (mod(i,prime(j)).eq.0) go to 100 end do pmax = pmax + 1 prime(pmax) = i 100 continue end do c c find all prime factors of p c ifac = 0 do i = 1, pmax 200 if (mod(ip,prime(i)).eq.0) then ifac = ifac + 1 fac(ifac) = prime(i) ip = ip/prime(i) go to 200 endif end do c c determine dimensions of processor grid c do i = ifac, 1, -1 c c find dimension with minimum value c imin = dims(1) mdim = 1 do j = 2, ndim if (dims(j).lt.imin) then imin = dims(j) mdim = j endif end do dims(mdim) = dims(mdim)*fac(i) end do c return end ga-5-3/global/testing/testutil.h0000640005473000001440000000217511417373344015553 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #define add_range_ F77_FUNC_(add_range,ADD_RANGE) #define compare_patches_ F77_FUNC_(compare_patches,COMPARE_PATCHES) #define copy_range_ F77_FUNC_(copy_range,COPY_RANGE) #define dot_range_ F77_FUNC_(dot_range,DOT_RANGE) #define init_array_ F77_FUNC_(init_array,INIT_ARRAY) #define print_range_ F77_FUNC_(print_range,PRINT_RANGE) #define register_ext_memory_ F77_FUNC_(register_ext_memory,REGISTER_EXT_MEMORY) #define set_ma_use_armci_mem_ F77_FUNC_(set_ma_use_armci_mem,SET_MA_USE_ARMCI_MEM) #define scale_patch_ F77_FUNC_(scale_patch,SCALE_PATCH) #define util_mdtob_ F77_FUNC_(util_mdtob,UTIL_MDTOB) #define util_mitob_ F77_FUNC_(util_mitob,UTIL_MITOB) #define util_timer_ F77_FUNC_(util_timer,UTIL_TIMER) /* extern void get_range( int ndim, int dims[], int lo[], int hi[]); */ /* extern void new_range(int ndim, int dims[], int lo[], int hi[], int new_lo[], int new_hi[]); */ extern void print_subscript(char *pre,int ndim, int subscript[], char* post); /* extern void print_distribution(int g_a); */ ga-5-3/global/testing/ntestc.c0000640005473000001440000001717611642656560015204 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #include "macdecls.h" #include "ga.h" #include "mp3.h" /* utilities for GA test programs */ #include "testutil.h" #define N 10 /* first dimension */ #define NDIM 4 /* number of dimensions */ #define BASE 0 #define PERMUTE_ /*#define NEW_API*/ /*\ fill n-dimensional array section with value \*/ void fill_patch(double *ptr, int dim[], int ld[], int ndim, double val) { int i, j, stride=1; switch (ndim){ case 0: GA_Error("fill_patch: error",ndim); case 1: for(i=0;i adims[d] ){ map[offset] = regions[i].lo[d]; offset++; block[d]++; adims[d]= regions[i].hi[d]; } if(me==0){ printf("Distribution map contains %d elements\n",offset); print_subscript("number of blocks for each dimension",ndim,block,"\n"); print_subscript("distribution map",offset,map,"\n\n"); fflush(stdout); } if(me==0)printf("Creating array B applying distribution of A\n"); # ifdef USE_DUPLICATE g_b = GA_Duplicate(g_a,"array B"); # else g_b = NGA_Create_irreg(MT_F_DBL, NDIM, dims, "array B", block,map); # endif if(!g_b) GA_Error("create failed: B",1); if(me==0)printf("OK\n\n"); free(proclist); free(regions); free(map); GA_Print_distribution(g_b); GA_Sync(); if(me==0){ printf("\nCompare distributions of A and B\n"); if(GA_Compare_distr(g_a,g_b)) printf("Failure: distributions NOT identical\n"); else printf("Success: distributions identical\n"); fflush(stdout); } if(me==0){ printf("\nAccessing local elements of A: set them to the owner process id\n"); fflush(stdout); } GA_Sync(); NGA_Distribution(g_a,me,lo,hi); if(hi[0]>=0){/* -1 means no elements stored on this processor */ double *ptr; int locdim[NDIM]; NGA_Access(g_a, lo,hi, &ptr, ld); for(i=0;i=0){ char msg[100]; sprintf(msg,"%d: leading dimensions",me); print_subscript(msg,ndim-1,ld,"\n"); fflush(stdout); } GA_Sync(); } GA_Sync(); if(me==0)printf("\nRandomly checking the update using ga_get on array sections\n"); GA_Sync(); /* show ga_get working and verify array updates * every process does N random gets * for simplicity get only a single row at a time */ srand(me); /* different seed for every process */ hi[ndim-1]=adims[ndim-1] -1 + BASE; for(i=1;i #include #include "mp3.h" #include "ga.h" #include "macdecls.h" /* create N1 x N2 matrix (double precision) */ #define N1 1024*8 #define N2 1024*256 int main(int argc, char **argv) { int me, nproc, g_a, i, j; int ndim=2, type=MT_F_DBL, dims[2]={N1,N2}; double *buf; int lo[2], hi[2], ld[1]; double alpha = 1.0; MP_INIT(argc,argv); GA_Initialize_ltd(-1); me=GA_Nodeid(); nproc=GA_Nnodes(); if(me==0) printf("Using %ld processes\n",(long)nproc); if(me==0) printf("memory = %ld bytes\n",((long)N1)*((long)N2)*8); g_a = NGA_Create(type, ndim, dims, "A", NULL); GA_Zero(g_a); /* zero the matrix */ GA_Print_distribution(g_a); if(me == 0) { buf = (double*)(malloc(N1*1024*sizeof(double))); for(j = 0; j < N1*1024; ++j) buf[j] = 1.0; for(i = 0; i < N2/1024; ++i) { lo[0] = 0; hi[0] = lo[0] + N1 -1; lo[1] = i*1024; hi[1] = lo[1] + 1024 -1; ld[0] = 1024; printf("NGA_Acc.%d: %d:%d %d:%d\n",i,lo[0],hi[0],lo[1],hi[1]); NGA_Init_fence(); NGA_Acc(g_a, lo, hi, buf, ld, &alpha); NGA_Fence(); } } GA_Sync(); GA_Destroy(g_a); GA_Terminate(); MP_FINALIZE(); return 0; } ga-5-3/global/testing/ngatest.m40000640005473000001440000000211507121220474015416 0ustar d3n000usersdivert(-1) # what kind of data type to test? define(m4_test_int, `yes') define(m4_test_dbl, `yes') define(m4_test_dcpl, `yes') # test dimension from which to which? define(m4_dim_from, 1) define(m4_dim_to, 7) # functions to test define(m4_test_GA_FILL, `yes') define(m4_test_NGA_PUT, `yes') define(m4_test_NGA_GET, `yes') define(m4_test_NGA_ACC, `yes') define(m4_test_NGA_SCATTER, `yes') # define(m4_test_NGA_SCATTER_ACC, `yes') define(m4_test_NGA_GATHER, `yes') # periodic functions # define(m4_test_NGA_PERIODIC_GET, `yes') # define(m4_test_NGA_PERIODIC_PUT, `yes') # define(m4_test_NGA_PERIODIC_ACC, `yes') # patch related define(m4_test_NGA_FILL_PATCH, `yes') define(m4_test_NGA_COPY_PATCH, `yes') define(m4_test_NGA_SCALE_PATCH, `yes') define(m4_test_NGA_ADD_PATCH, `no') # depending on the data type, the functions are NGA_IDOT_PATCH, # NGA_DDOT_PATCH, and NGA_ZDOT_PATCH, corresponding to Integer, # Double, and Double Complex data types, respectively. define(m4_test_NGA_DOT_PATCH, `yes') divert include(`ngatest_src/ngatest.def') ga-5-3/global/testing/testblas.F0000640005473000001440000010413111633440402015436 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif #include "galinalg.fh" SUBROUTINE TEST_DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B, $ LDB,BETA,C,LDC) C .. Parameters .. DOUBLE PRECISION ONE, ZERO PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) INTEGER MB, NB, KB PARAMETER (MB=64,NB=MB,KB=64) C .. Scalar Arguments .. DOUBLE PRECISION ALPHA, BETA INTEGER K, LDA, LDB, LDC, M, N CHARACTER TRANSA, TRANSB C .. Array Arguments .. C C Purpose C ======= C C DGEMM performs one of the matrix-matrix operations C C C := alpha*op( A )*op( B ) + beta*C, C C where op( X ) is one of C C op( X ) = X or op( X ) = X', C C alpha and beta are scalars, and A, B and C are matrices, with op( A ) C an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. C C Parameters C ========== C C TRANSA - CHARACTER*1. C On entry, TRANSA specifies the form of op( A ) to be used in C the matrix multiplication as follows: C C TRANSA = 'N' or 'n', op( A ) = A. C C TRANSA = 'T' or 't', op( A ) = A'. C C TRANSA = 'C' or 'c', op( A ) = A'. C C Unchanged on exit. C C TRANSB - CHARACTER*1. C On entry, TRANSB specifies the form of op( B ) to be used in C the matrix multiplication as follows: C C TRANSB = 'N' or 'n', op( B ) = B. C C TRANSB = 'T' or 't', op( B ) = B'. C C TRANSB = 'C' or 'c', op( B ) = B'. C C Unchanged on exit. C C M - INTEGER. C On entry, M specifies the number of rows of the matrix C op( A ) and of the matrix C. M must be at least zero. C Unchanged on exit. C C N - INTEGER. C On entry, N specifies the number of columns of the matrix C op( B ) and the number of columns of the matrix C. N must be C at least zero. C Unchanged on exit. C C K - INTEGER. C On entry, K specifies the number of columns of the matrix C op( A ) and the number of rows of the matrix op( B ). K must C be at least zero. C Unchanged on exit. C C ALPHA - DOUBLE PRECISION. C On entry, ALPHA specifies the scalar alpha. C Unchanged on exit. C C A - DOUBLE PRECISION array of DIMENSION ( LDA, ka ), where ka is C k when TRANSA = 'N' or 'n', and is m otherwise. C Before entry with TRANSA = 'N' or 'n', the leading m by k C part of the array A must contain the matrix A, otherwise C the leading k by m part of the array A must contain the C matrix A. C Unchanged on exit. C C LDA - INTEGER. C On entry, LDA specifies the first dimension of A as declared C in the calling (sub) program. When TRANSA = 'N' or 'n' then C LDA must be at least max( 1, m ), otherwise LDA must be at C least max( 1, k ). C Unchanged on exit. C C B - DOUBLE PRECISION array of DIMENSION ( LDB, kb ), where kb is C n when TRANSB = 'N' or 'n', and is k otherwise. C Before entry with TRANSB = 'N' or 'n', the leading k by n C part of the array B must contain the matrix B, otherwise C the leading n by k part of the array B must contain the C matrix B. C Unchanged on exit. C C LDB - INTEGER. C On entry, LDB specifies the first dimension of B as declared C in the calling (sub) program. When TRANSB = 'N' or 'n' then C LDB must be at least max( 1, k ), otherwise LDB must be at C least max( 1, n ). C Unchanged on exit. C C BETA - DOUBLE PRECISION. C On entry, BETA specifies the scalar beta. When BETA is C supplied as zero then C need not be set on input. C Unchanged on exit. C C C - DOUBLE PRECISION array of DIMENSION ( LDC, n ). C Before entry, the leading m by n part of the array C must C contain the matrix C, except when beta is zero, in which C case C need not be set on entry. C On exit, the array C is overwritten by the m by n matrix C ( alpha*op( A )*op( B ) + beta*C ). C C LDC - INTEGER. C On entry, LDC specifies the first dimension of C as declared C in the calling (sub) program. LDC must be at least C max( 1, m ). C Unchanged on exit. C C C Level 3 Blas routine. C C -- Written on 8-February-1989. C Jack Dongarra, Argonne National Laboratory. C Iain Duff, AERE Harwell. C Jeremy Du Croz, Numerical Algorithms Group Ltd. C Sven Hammarling, Numerical Algorithms Group Ltd. * * This code comes from a report entitled: * The IBM RISC System/6000 and Linear Algebra Operations, by * Jack J. Dongarra, Peter Mayes, and Giuseppe Radicati di Brozolo, * University of Tennessee Computer Science Tech Report: CS - 90 - 122. C C DOUBLE PRECISION A(LDA,*), B(LDB,*), C(LDC,*) C .. External Functions .. LOGICAL LSAME EXTERNAL LSAME C .. External Subroutines .. EXTERNAL XERBLA C .. Intrinsic Functions .. INTRINSIC MAX, MIN C .. Local Scalars .. DOUBLE PRECISION T11, T12, T21, T22 INTEGER I, IDEPTH, II, ILEN, INFO, ISPAN, J, JDEPTH, JJ, * JLEN, JSPAN, L, LL, LSPAN, NCOLA, NROWA, NROWB LOGICAL NOTA, NOTB C .. Local Arrays .. DOUBLE PRECISION CH(KB,MB), CH1(KB), CH2(KB) C .. Executable Statements .. C C Set NOTA and NOTB as true if A and B respectively are not C transposed and set NROWA, NCOLA and NROWB as the number of rows C and columns of A and the number of rows of B respectively. C NOTA = LSAME(TRANSA,'N') NOTB = LSAME(TRANSB,'N') IF (NOTA) THEN NROWA = M NCOLA = K ELSE NROWA = K NCOLA = M END IF IF (NOTB) THEN NROWB = K ELSE NROWB = N END IF C C Test the input parameters. C INFO = 0 IF (( .NOT. NOTA) .AND. ( .NOT. LSAME(TRANSA,'C')) * .AND. ( .NOT. LSAME(TRANSA,'T'))) THEN INFO = 1 ELSE IF (( .NOT. NOTB) .AND. ( .NOT. LSAME(TRANSB,'C')) * .AND. ( .NOT. LSAME(TRANSB,'T'))) THEN INFO = 2 ELSE IF (M.LT.0) THEN INFO = 3 ELSE IF (N.LT.0) THEN INFO = 4 ELSE IF (K.LT.0) THEN INFO = 5 ELSE IF (LDA.LT.MAX(1,NROWA)) THEN INFO = 8 ELSE IF (LDB.LT.MAX(1,NROWB)) THEN INFO = 10 ELSE IF (LDC.LT.MAX(1,M)) THEN INFO = 13 END IF IF (INFO.NE.0) THEN CALL XERBLA('DGEMM ',INFO) RETURN END IF C C Quick return if possible. C IF ((M.EQ.0) .OR. (N.EQ.0) .OR. (((ALPHA.EQ.ZERO) .OR. (K.EQ.0)) * .AND. (BETA.EQ.ONE))) RETURN IF (BETA.EQ.ZERO) THEN DO 40 J = 1, N DO 20 I = 1, M C(I,J) = ZERO 20 CONTINUE 40 CONTINUE ELSE DO 80 J = 1, N DO 60 I = 1, M C(I,J) = BETA*C(I,J) 60 CONTINUE 80 CONTINUE END IF C C And if alpha.eq.zero. C IF (ALPHA.EQ.ZERO) RETURN C C Start the operations. C IF (NOTB) THEN IF (NOTA) THEN C C Form C := C + alpha*A*B. C DO 380 L = 1, K, KB LSPAN = MIN(KB,K-L+1) DO 360 I = 1, M, MB IDEPTH = 2 ISPAN = MIN(MB,M-I+1) ILEN = IDEPTH*(ISPAN/IDEPTH) DO 120 II = I, I + ISPAN - 1 DO 100 LL = L, L + LSPAN - 1 CH(LL-L+1,II-I+1) = ALPHA*A(II,LL) 100 CONTINUE 120 CONTINUE DO 340 J = 1, N, NB JDEPTH = 2 JSPAN = MIN(NB,N-J+1) JLEN = JDEPTH*(JSPAN/JDEPTH) DO 220 JJ = J, J + JLEN - 1, JDEPTH DO 160 II = I, I + ILEN - 1, IDEPTH T11 = ZERO T21 = ZERO T12 = ZERO T22 = ZERO DO 140 LL = L, L + LSPAN - 1 T11 = T11 + CH(LL-L+1,II-I+1)*B(LL,JJ) T21 = T21 + CH(LL-L+1,II-I+2)*B(LL,JJ) T12 = T12 + CH(LL-L+1,II-I+1)*B(LL,JJ+1) T22 = T22 + CH(LL-L+1,II-I+2)*B(LL,JJ+1) 140 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II+1,JJ) = C(II+1,JJ) + T21 C(II,JJ+1) = C(II,JJ+1) + T12 C(II+1,JJ+1) = C(II+1,JJ+1) + T22 160 CONTINUE IF (ILEN.LT.ISPAN) THEN DO 200 II = I + ILEN, I + ISPAN - 1 T11 = ZERO T12 = ZERO DO 180 LL = L, L + LSPAN - 1 T11 = T11 + CH(LL-L+1,II-I+1)*B(LL,JJ) T12 = T12 + CH(LL-L+1,II-I+1)*B(LL, * JJ+1) 180 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II,JJ+1) = C(II,JJ+1) + T12 200 CONTINUE END IF 220 CONTINUE IF (JLEN.LT.JSPAN) THEN DO 320 JJ = J + JLEN, J + JSPAN - 1 DO 260 II = I, I + ILEN - 1, IDEPTH T11 = ZERO T21 = ZERO DO 240 LL = L, L + LSPAN - 1 T11 = T11 + CH(LL-L+1,II-I+1)*B(LL,JJ) T21 = T21 + CH(LL-L+1,II-I+2)*B(LL,JJ) 240 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II+1,JJ) = C(II+1,JJ) + T21 260 CONTINUE IF (ILEN.LT.ISPAN) THEN DO 300 II = I + ILEN, I + ISPAN - 1 T11 = ZERO DO 280 LL = L, L + LSPAN - 1 T11 = T11 + CH(LL-L+1,II-I+1)*B(LL, * JJ) 280 CONTINUE C(II,JJ) = C(II,JJ) + T11 300 CONTINUE END IF 320 CONTINUE END IF 340 CONTINUE 360 CONTINUE 380 CONTINUE ELSE C C Form C := C + alpha*A'*B C DO 680 I = 1, M, MB IDEPTH = 2 ISPAN = MIN(MB,M-I+1) ILEN = IDEPTH*(ISPAN/IDEPTH) DO 660 L = 1, K, KB LSPAN = MIN(KB,K-L+1) DO 420 II = I, I + ISPAN - 1 DO 400 LL = L, L + LSPAN - 1 CH(LL-L+1,II-I+1) = ALPHA*A(LL,II) 400 CONTINUE 420 CONTINUE DO 640 J = 1, N, NB JDEPTH = 2 JSPAN = MIN(NB,N-J+1) JLEN = JDEPTH*(JSPAN/JDEPTH) DO 520 JJ = J, J + JLEN - 1, JDEPTH DO 460 II = I, I + ILEN - 1, IDEPTH T11 = ZERO T21 = ZERO T12 = ZERO T22 = ZERO DO 440 LL = L, L + LSPAN - 1 T11 = T11 + CH(LL-L+1,II-I+1)*B(LL,JJ) T21 = T21 + CH(LL-L+1,II-I+2)*B(LL,JJ) T12 = T12 + CH(LL-L+1,II-I+1)*B(LL,JJ+1) T22 = T22 + CH(LL-L+1,II-I+2)*B(LL,JJ+1) 440 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II+1,JJ) = C(II+1,JJ) + T21 C(II,JJ+1) = C(II,JJ+1) + T12 C(II+1,JJ+1) = C(II+1,JJ+1) + T22 460 CONTINUE IF (ILEN.LT.ISPAN) THEN DO 500 II = I + ILEN, I + ISPAN - 1 T11 = ZERO T12 = ZERO DO 480 LL = L, L + LSPAN - 1 T11 = T11 + CH(LL-L+1,II-I+1)*B(LL,JJ) T12 = T12 + CH(LL-L+1,II-I+1)*B(LL, * JJ+1) 480 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II,JJ+1) = C(II,JJ+1) + T12 500 CONTINUE END IF 520 CONTINUE IF (JLEN.LT.JSPAN) THEN DO 620 JJ = J + JLEN, J + JSPAN - 1 DO 560 II = I, I + ILEN - 1, IDEPTH T11 = ZERO T21 = ZERO DO 540 LL = L, L + LSPAN - 1 T11 = T11 + CH(LL-L+1,II-I+1)*B(LL,JJ) T21 = T21 + CH(LL-L+1,II-I+2)*B(LL,JJ) 540 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II+1,JJ) = C(II+1,JJ) + T21 560 CONTINUE IF (ILEN.LT.ISPAN) THEN DO 600 II = I + ILEN, I + ISPAN - 1 T11 = ZERO DO 580 LL = L, L + LSPAN - 1 T11 = T11 + CH(LL-L+1,II-I+1)*B(LL, * JJ) 580 CONTINUE C(II,JJ) = C(II,JJ) + T11 600 CONTINUE END IF 620 CONTINUE END IF 640 CONTINUE 660 CONTINUE 680 CONTINUE END IF ELSE IF (NOTA) THEN C C Form C := C + alpha*A*B' C DO 1000 J = 1, N, NB JDEPTH = 2 JSPAN = MIN(NB,N-J+1) JLEN = JDEPTH*(JSPAN/JDEPTH) DO 980 L = 1, K, KB LSPAN = MIN(KB,K-L+1) DO 720 JJ = J, J + JSPAN - 1 DO 700 LL = L, L + LSPAN - 1 CH(LL-L+1,JJ-J+1) = ALPHA*B(JJ,LL) 700 CONTINUE 720 CONTINUE DO 960 I = 1, M, MB IDEPTH = 2 ISPAN = MIN(MB,M-I+1) ILEN = IDEPTH*(ISPAN/IDEPTH) DO 840 II = I, I + ILEN - 1, IDEPTH DO 740 LL = L, L + LSPAN - 1 CH1(LL-L+1) = A(II,LL) CH2(LL-L+1) = A(II+1,LL) 740 CONTINUE DO 780 JJ = J, J + JLEN - 1, JDEPTH T11 = ZERO T21 = ZERO T12 = ZERO T22 = ZERO DO 760 LL = L, L + LSPAN - 1 T11 = T11 + CH1(LL-L+1)*CH(LL-L+1,JJ-J+1) T21 = T21 + CH2(LL-L+1)*CH(LL-L+1,JJ-J+1) T12 = T12 + CH1(LL-L+1)*CH(LL-L+1,JJ-J+2) T22 = T22 + CH2(LL-L+1)*CH(LL-L+1,JJ-J+2) 760 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II+1,JJ) = C(II+1,JJ) + T21 C(II,JJ+1) = C(II,JJ+1) + T12 C(II+1,JJ+1) = C(II+1,JJ+1) + T22 780 CONTINUE IF (JLEN.LT.JSPAN) THEN DO 820 JJ = J + JLEN, J + JSPAN - 1 T11 = ZERO T21 = ZERO DO 800 LL = L, L + LSPAN - 1 T11 = T11 + A(II,LL)*CH(LL-L+1,JJ-J+1) T21 = T21 + A(II+1,LL)*CH(LL-L+1, * JJ-J+1) 800 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II+1,JJ) = C(II+1,JJ) + T21 820 CONTINUE END IF 840 CONTINUE IF (ILEN.LT.ISPAN) THEN DO 940 II = I + ILEN, I + ISPAN - 1 DO 880 JJ = J, J + JLEN - 1, JDEPTH T11 = ZERO T12 = ZERO DO 860 LL = L, L + LSPAN - 1 T11 = T11 + A(II,LL)*CH(LL-L+1,JJ-J+1) T12 = T12 + A(II,LL)*CH(LL-L+1,JJ-J+2) 860 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II,JJ+1) = C(II,JJ+1) + T12 880 CONTINUE IF (JLEN.LT.JSPAN) THEN DO 920 JJ = J + JLEN, J + JSPAN - 1 T11 = ZERO DO 900 LL = L, L + LSPAN - 1 T11 = T11 + A(II,LL)*CH(LL-L+1, * JJ-J+1) 900 CONTINUE C(II,JJ) = C(II,JJ) + T11 920 CONTINUE END IF 940 CONTINUE END IF 960 CONTINUE 980 CONTINUE 1000 CONTINUE ELSE C C Form C := C + alpha*A'*B' C DO 1300 J = 1, N, NB JDEPTH = 2 JSPAN = MIN(NB,N-J+1) JLEN = JDEPTH*(JSPAN/JDEPTH) DO 1280 L = 1, K, KB LSPAN = MIN(KB,K-L+1) DO 1040 JJ = J, J + JSPAN - 1 DO 1020 LL = L, L + LSPAN - 1 CH(LL-L+1,JJ-J+1) = ALPHA*B(JJ,LL) 1020 CONTINUE 1040 CONTINUE DO 1260 I = 1, M, MB IDEPTH = 2 ISPAN = MIN(MB,M-I+1) ILEN = IDEPTH*(ISPAN/IDEPTH) DO 1140 II = I, I + ILEN - 1, IDEPTH DO 1080 JJ = J, J + JLEN - 1, JDEPTH T11 = ZERO T21 = ZERO T12 = ZERO T22 = ZERO DO 1060 LL = L, L + LSPAN - 1 T11 = T11 + A(LL,II)*CH(LL-L+1,JJ-J+1) T21 = T21 + A(LL,II+1)*CH(LL-L+1,JJ-J+1) T12 = T12 + A(LL,II)*CH(LL-L+1,JJ-J+2) T22 = T22 + A(LL,II+1)*CH(LL-L+1,JJ-J+2) 1060 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II+1,JJ) = C(II+1,JJ) + T21 C(II,JJ+1) = C(II,JJ+1) + T12 C(II+1,JJ+1) = C(II+1,JJ+1) + T22 1080 CONTINUE IF (JLEN.LT.JSPAN) THEN DO 1120 JJ = J + JLEN, J + JSPAN - 1 T11 = ZERO T21 = ZERO DO 1100 LL = L, L + LSPAN - 1 T11 = T11 + A(LL,II)*CH(LL-L+1,JJ-J+1) T21 = T21 + A(LL,II+1)*CH(LL-L+1, * JJ-J+1) 1100 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II+1,JJ) = C(II+1,JJ) + T21 1120 CONTINUE END IF 1140 CONTINUE IF (ILEN.LT.ISPAN) THEN DO 1240 II = I + ILEN, I + ISPAN - 1 DO 1180 JJ = J, J + JLEN - 1, JDEPTH T11 = ZERO T12 = ZERO DO 1160 LL = L, L + LSPAN - 1 T11 = T11 + A(LL,II)*CH(LL-L+1,JJ-J+1) T12 = T12 + A(LL,II)*CH(LL-L+1,JJ-J+2) 1160 CONTINUE C(II,JJ) = C(II,JJ) + T11 C(II,JJ+1) = C(II,JJ+1) + T12 1180 CONTINUE IF (JLEN.LT.JSPAN) THEN DO 1220 JJ = J + JLEN, J + JSPAN - 1 T11 = ZERO DO 1200 LL = L, L + LSPAN - 1 T11 = T11 + A(LL,II)*CH(LL-L+1, * JJ-J+1) 1200 CONTINUE C(II,JJ) = C(II,JJ) + T11 1220 CONTINUE END IF 1240 CONTINUE END IF 1260 CONTINUE 1280 CONTINUE 1300 CONTINUE END IF END IF C RETURN C C End of DGEMM . C END SUBROUTINE TEST_ZGEMM ( TRANSA, TRANSB, M, N, K, ALPHA, A, $ LDA, B, LDB, BETA, C, LDC ) * .. Scalar Arguments .. CHARACTER*1 TRANSA, TRANSB INTEGER M, N, K, LDA, LDB, LDC COMPLEX*16 ALPHA, BETA * .. Array Arguments .. COMPLEX*16 A( LDA, * ), B( LDB, * ), C( LDC, * ) * .. * * Purpose * ======= * * ZGEMM performs one of the matrix-matrix operations * * C := alpha*op( A )*op( B ) + beta*C, * * where op( X ) is one of * * op( X ) = X or op( X ) = X' or op( X ) = conjg( X' ), * * alpha and beta are scalars, and A, B and C are matrices, with op( A ) * an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. * * Parameters * ========== * * TRANSA - CHARACTER*1. * On entry, TRANSA specifies the form of op( A ) to be used in * the matrix multiplication as follows: * * TRANSA = 'N' or 'n', op( A ) = A. * * TRANSA = 'T' or 't', op( A ) = A'. * * TRANSA = 'C' or 'c', op( A ) = conjg( A' ). * * Unchanged on exit. * * TRANSB - CHARACTER*1. * On entry, TRANSB specifies the form of op( B ) to be used in * the matrix multiplication as follows: * * TRANSB = 'N' or 'n', op( B ) = B. * * TRANSB = 'T' or 't', op( B ) = B'. * * TRANSB = 'C' or 'c', op( B ) = conjg( B' ). * * Unchanged on exit. * * M - INTEGER. * On entry, M specifies the number of rows of the matrix * op( A ) and of the matrix C. M must be at least zero. * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the number of columns of the matrix * op( B ) and the number of columns of the matrix C. N must be * at least zero. * Unchanged on exit. * * K - INTEGER. * On entry, K specifies the number of columns of the matrix * op( A ) and the number of rows of the matrix op( B ). K must * be at least zero. * Unchanged on exit. * * ALPHA - COMPLEX*16 . * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * A - COMPLEX*16 array of DIMENSION ( LDA, ka ), where ka is * k when TRANSA = 'N' or 'n', and is m otherwise. * Before entry with TRANSA = 'N' or 'n', the leading m by k * part of the array A must contain the matrix A, otherwise * the leading k by m part of the array A must contain the * matrix A. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. When TRANSA = 'N' or 'n' then * LDA must be at least max( 1, m ), otherwise LDA must be at * least max( 1, k ). * Unchanged on exit. * * B - COMPLEX*16 array of DIMENSION ( LDB, kb ), where kb is * n when TRANSB = 'N' or 'n', and is k otherwise. * Before entry with TRANSB = 'N' or 'n', the leading k by n * part of the array B must contain the matrix B, otherwise * the leading n by k part of the array B must contain the * matrix B. * Unchanged on exit. * * LDB - INTEGER. * On entry, LDB specifies the first dimension of B as declared * in the calling (sub) program. When TRANSB = 'N' or 'n' then * LDB must be at least max( 1, k ), otherwise LDB must be at * least max( 1, n ). * Unchanged on exit. * * BETA - COMPLEX*16 . * On entry, BETA specifies the scalar beta. When BETA is * supplied as zero then C need not be set on input. * Unchanged on exit. * * C - COMPLEX*16 array of DIMENSION ( LDC, n ). * Before entry, the leading m by n part of the array C must * contain the matrix C, except when beta is zero, in which * case C need not be set on entry. * On exit, the array C is overwritten by the m by n matrix * ( alpha*op( A )*op( B ) + beta*C ). * * LDC - INTEGER. * On entry, LDC specifies the first dimension of C as declared * in the calling (sub) program. LDC must be at least * max( 1, m ). * Unchanged on exit. * * * Level 3 Blas routine. * * -- Written on 8-February-1989. * Jack Dongarra, Argonne National Laboratory. * Iain Duff, AERE Harwell. * Jeremy Du Croz, Numerical Algorithms Group Ltd. * Sven Hammarling, Numerical Algorithms Group Ltd. * * * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. External Subroutines .. EXTERNAL XERBLA * .. Intrinsic Functions .. INTRINSIC CONJG, MAX * .. Local Scalars .. LOGICAL CONJA, CONJB, NOTA, NOTB INTEGER I, INFO, J, L, NCOLA, NROWA, NROWB COMPLEX*16 TEMP * .. Parameters .. COMPLEX*16 ONE PARAMETER ( ONE = ( 1.0D+0, 0.0D+0 ) ) COMPLEX*16 ZERO PARAMETER ( ZERO = ( 0.0D+0, 0.0D+0 ) ) * .. * .. Executable Statements .. * * Set NOTA and NOTB as true if A and B respectively are not * conjugated or transposed, set CONJA and CONJB as true if A and * B respectively are to be transposed but not conjugated and set * NROWA, NCOLA and NROWB as the number of rows and columns of A * and the number of rows of B respectively. * NOTA = LSAME( TRANSA, 'N' ) NOTB = LSAME( TRANSB, 'N' ) CONJA = LSAME( TRANSA, 'C' ) CONJB = LSAME( TRANSB, 'C' ) IF( NOTA )THEN NROWA = M NCOLA = K ELSE NROWA = K NCOLA = M END IF IF( NOTB )THEN NROWB = K ELSE NROWB = N END IF * * Test the input parameters. * INFO = 0 IF( ( .NOT.NOTA ).AND. $ ( .NOT.CONJA ).AND. $ ( .NOT.LSAME( TRANSA, 'T' ) ) )THEN INFO = 1 ELSE IF( ( .NOT.NOTB ).AND. $ ( .NOT.CONJB ).AND. $ ( .NOT.LSAME( TRANSB, 'T' ) ) )THEN INFO = 2 ELSE IF( M .LT.0 )THEN INFO = 3 ELSE IF( N .LT.0 )THEN INFO = 4 ELSE IF( K .LT.0 )THEN INFO = 5 ELSE IF( LDA.LT.MAX( 1, NROWA ) )THEN INFO = 8 ELSE IF( LDB.LT.MAX( 1, NROWB ) )THEN INFO = 10 ELSE IF( LDC.LT.MAX( 1, M ) )THEN INFO = 13 END IF IF( INFO.NE.0 )THEN CALL XERBLA( 'ZGEMM ', INFO ) RETURN END IF * * Quick return if possible. * IF( ( M.EQ.0 ).OR.( N.EQ.0 ).OR. $ ( ( ( ALPHA.EQ.ZERO ).OR.( K.EQ.0 ) ).AND.( BETA.EQ.ONE ) ) ) $ RETURN * * And when alpha.eq.zero. * IF( ALPHA.EQ.ZERO )THEN IF( BETA.EQ.ZERO )THEN DO 20, J = 1, N DO 10, I = 1, M C( I, J ) = ZERO 10 CONTINUE 20 CONTINUE ELSE DO 40, J = 1, N DO 30, I = 1, M C( I, J ) = BETA*C( I, J ) 30 CONTINUE 40 CONTINUE END IF RETURN END IF * * Start the operations. * IF( NOTB )THEN IF( NOTA )THEN * * Form C := alpha*A*B + beta*C. * DO 90, J = 1, N IF( BETA.EQ.ZERO )THEN DO 50, I = 1, M C( I, J ) = ZERO 50 CONTINUE ELSE IF( BETA.NE.ONE )THEN DO 60, I = 1, M C( I, J ) = BETA*C( I, J ) 60 CONTINUE END IF DO 80, L = 1, K IF( B( L, J ).NE.ZERO )THEN TEMP = ALPHA*B( L, J ) DO 70, I = 1, M C( I, J ) = C( I, J ) + TEMP*A( I, L ) 70 CONTINUE END IF 80 CONTINUE 90 CONTINUE ELSE IF( CONJA )THEN * * Form C := alpha*conjg( A' )*B + beta*C. * DO 120, J = 1, N DO 110, I = 1, M TEMP = ZERO DO 100, L = 1, K TEMP = TEMP + CONJG( A( L, I ) )*B( L, J ) 100 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 110 CONTINUE 120 CONTINUE ELSE * * Form C := alpha*A'*B + beta*C * DO 150, J = 1, N DO 140, I = 1, M TEMP = ZERO DO 130, L = 1, K TEMP = TEMP + A( L, I )*B( L, J ) 130 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 140 CONTINUE 150 CONTINUE END IF ELSE IF( NOTA )THEN IF( CONJB )THEN * * Form C := alpha*A*conjg( B' ) + beta*C. * DO 200, J = 1, N IF( BETA.EQ.ZERO )THEN DO 160, I = 1, M C( I, J ) = ZERO 160 CONTINUE ELSE IF( BETA.NE.ONE )THEN DO 170, I = 1, M C( I, J ) = BETA*C( I, J ) 170 CONTINUE END IF DO 190, L = 1, K IF( B( J, L ).NE.ZERO )THEN TEMP = ALPHA*CONJG( B( J, L ) ) DO 180, I = 1, M C( I, J ) = C( I, J ) + TEMP*A( I, L ) 180 CONTINUE END IF 190 CONTINUE 200 CONTINUE ELSE * * Form C := alpha*A*B' + beta*C * DO 250, J = 1, N IF( BETA.EQ.ZERO )THEN DO 210, I = 1, M C( I, J ) = ZERO 210 CONTINUE ELSE IF( BETA.NE.ONE )THEN DO 220, I = 1, M C( I, J ) = BETA*C( I, J ) 220 CONTINUE END IF DO 240, L = 1, K IF( B( J, L ).NE.ZERO )THEN TEMP = ALPHA*B( J, L ) DO 230, I = 1, M C( I, J ) = C( I, J ) + TEMP*A( I, L ) 230 CONTINUE END IF 240 CONTINUE 250 CONTINUE END IF ELSE IF( CONJA )THEN IF( CONJB )THEN * * Form C := alpha*conjg( A' )*conjg( B' ) + beta*C. * DO 280, J = 1, N DO 270, I = 1, M TEMP = ZERO DO 260, L = 1, K TEMP = TEMP + $ CONJG( A( L, I ) )*CONJG( B( J, L ) ) 260 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 270 CONTINUE 280 CONTINUE ELSE * * Form C := alpha*conjg( A' )*B' + beta*C * DO 310, J = 1, N DO 300, I = 1, M TEMP = ZERO DO 290, L = 1, K TEMP = TEMP + CONJG( A( L, I ) )*B( J, L ) 290 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 300 CONTINUE 310 CONTINUE END IF ELSE IF( CONJB )THEN * * Form C := alpha*A'*conjg( B' ) + beta*C * DO 340, J = 1, N DO 330, I = 1, M TEMP = ZERO DO 320, L = 1, K TEMP = TEMP + A( L, I )*CONJG( B( J, L ) ) 320 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 330 CONTINUE 340 CONTINUE ELSE * * Form C := alpha*A'*B' + beta*C * DO 370, J = 1, N DO 360, I = 1, M TEMP = ZERO DO 350, L = 1, K TEMP = TEMP + A( L, I )*B( J, L ) 350 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 360 CONTINUE 370 CONTINUE END IF END IF * RETURN * * End of ZGEMM . * END ga-5-3/global/testing/ga_lu.c0000640005473000001440000002441011633502565014753 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #include "ga.h" #include "macdecls.h" #include "mp3.h" #include "galinalg.h" #define BLOCK_CYCLIC #define BLOCK_SIZE 500 /*#define USE_SCALAPACK_DISTR*/ #define DEBUG 0 static int nprocs, me; static void init_array(double *a, int n) { int i, j; double max=0.0; /* for pivoting */ for(i=0; i0: if INFO = i, U(i,i) is exactly zero. The factorization\n has been completed, but the factor U is exactly singular, and\n division by zero will occur if it is used to solve a system of\n equations.\n"); exit(0); } free(a_verify); free(a); } void dtrsm_lapack(double *a, double *b, int n, char side, char uplo, char transa, char diag) { int i, j; double *aa=NULL; double *bb=NULL; BlasInt ld = (BlasInt)n; BlasInt N = (BlasInt)n; aa = (double*)malloc(n*n*sizeof(double)); bb = (double*)malloc(n*n*sizeof(double)); /* row-major to column-major (NOTE: dgetrf_ is a fortran function) */ for(i=0; i [matrix_size]\n"); exit(0); } if(matrix_size <= 0) { printf("Error: matrix size (%d) should be > 0\n", matrix_size); GA_Error("matrix size should be >0", 1); } /* ***************************************************************** * Initialize MPI/TCGMSG-MPI, GA and MA * *****************************************************************/ MP_INIT(argc,argv); GA_INIT(argc,argv); /* initialize GA */ me = GA_Nodeid(); nprocs = GA_Nnodes(); heap /= nprocs; stack /= nprocs; if(! MA_init(MT_F_DBL, stack, heap)) /* initialize MA */ { GA_Error("MA_init failed",stack+heap); } /* create/initialize the matrix */ if((A = (double*)malloc(matrix_size*matrix_size*sizeof(double))) == NULL) { GA_Error("malloc failed", matrix_size*matrix_size*sizeof(double)); } for(i=0; i<2; i++) /* 5 runs */ { init_array(A, matrix_size); #if DEBUG if(me==0) print_array(A, matrix_size); #endif /* ***************************************************************** * Perform LU Factorization * *****************************************************************/ ga_lu(A, matrix_size); } free(A); /* ***************************************************************** * Terminate MPI/TCGMSG-MPI, GA and MA * *****************************************************************/ if(me==0)printf("Success\n"); GA_Terminate(); MP_FINALIZE(); return 0; } /** * TODO: * - LU for non-square matrix * */ ga-5-3/global/testing/jacobi.F0000640005473000001440000001656011417415713015063 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c $Id: jacobi.F,v 1.9 2003-06-24 19:01:59 d3h325 Exp $ program jacobi * * Jacobi iterative method for solving Uxx + Uyy = 1 on [0,1]x[0,1] area * Global Arrays are used to store and access U and exact solution vectors * J.N., 06.01.94, works with GA 1.2 * implicit none #include "mafdecls.fh" #include "global.fh" integer heap, stack c c*** Intitialize a message passing library c #include "mp3.fh" c heap = 80000 stack = heap call ga_initialize() ! initialize GAs if (.not. ma_init(MT_DBL, heap, stack)) ! initialize MA $ call ga_error("ma init failed",heap+stack) #ifdef GA_TRACE call trace_init(10000) ! initialize trace #endif call iterate() ! do the work #ifdef GA_TRACE call trace_end(ga_nodeid()) ! end trace #endif c if(ga_nodeid().eq.0) print *,'All tests successful ' c call ga_terminate() ! terminate GAs c call MP_FINALIZE() end subroutine iterate() implicit none #include "mafdecls.fh" #include "global.fh" integer m ! grid size integer g_u, g_ux, g_diff ! handles to global arrays parameter (m = 10) integer ilo, ihi, jlo, jhi, ld, ni, nj integer i, k MA_ACCESS_INDEX_TYPE indexl, index, index_first, indexd ! MA addressing indices integer h_l, h_d ! handles to MA objects integer me, nproc ! my processor & number of procs double precision eps ! stopping number double precision S, W, C, N, E ! coef. of G matrix and d logical have_data ! do I "own" any data ? double precision norm, product, uxnorm data eps /1d-5/ c c*** check parallel environment me = ga_nodeid() nproc = ga_nnodes() c c*** create global arrays: g_u - approx. solution, g_ux - exact solution c g_diff will store g_u - g_ux if (.not. ga_create(MT_DBL, m, m, 'u', 1, 1, g_u)) $ call ga_error(' ga_create failed ',0) if (.not. ga_create(MT_DBL, m, m, 'ux', 1, 1, g_ux)) $ call ga_error(' ga_create failed ',0) if (.not. ga_create(MT_DBL, m, m, 'diff', 1, 1, g_diff)) $ call ga_error(' ga_create failed ',0) c c*** check which piece, if any, of g_ux (and g_u) I own call ga_distribution(g_ux, me, ilo, ihi, jlo, jhi) ni = ihi - ilo + 1 ! number of 'local' rows nj = jhi - jlo + 1 ! number of 'local' columns have_data = ni .gt. 0 .and. nj .gt. 0 c if(have_data)then c c*** allocate memory for D if(.not. ma_push_get(MT_DBL,ni*nj,'d',h_d, indexd)) & call ga_error('memory allocation failed',0) c c*** access local data call ga_access(g_ux, ilo, ihi, jlo, jhi, index, ld) c c*** create coefficients of the jacobi iteration matrix G and exact solution call jacinit(m, S, W, C, N, E, DBL_MB(indexd), ni, & DBL_MB(index), ilo, ihi, jlo, jhi, ld) c c*** release access to the local data (the data were updated !) call ga_release_update(g_ux, ilo, ihi, jlo, jhi) c c*** allocate memory for a copy of my piece of g_u and neighb. grid points if(.not. ma_push_get(MT_DBL,(ni+2)*(nj+2),'loc',h_l, indexl)) & call ga_error('memory allocation failed',0) c c*** zero the allocated memory do i = 1, (ni+2)*(nj+2) DBL_MB(indexl - 1 + i) = 0d0 ! indexl points to first element enddo endif c c*** initial guess for u -- zero call ga_zero(g_u) c c*** the stopping test is ||u-ux||/||ux||, ||.|| - second norm uxnorm = sqrt(ga_ddot(g_ux, g_ux)) ! ||g_ux|| c c*** Now, synchronize and then iterate k = 0 10 call ga_sync() k = k + 1 c if(have_data)then c c... first, get access to the local piece of g_u call ga_access(g_u, ilo, ihi, jlo, jhi, index, ld) c c... compute next approximation of u call nextu(ni, nj, dbl_mb(index), ld, dbl_mb(indexl), & ni+1, S, W, C, N, E, dbl_mb(indexd) ) c c... release access to the local data (the data were updated !) call ga_release_update(g_u, ilo, ihi, jlo, jhi) endif c c... compute the stopping number -- second norm call ga_add(1d0, g_u, -1d0, g_ux, g_diff) ! g_diff = g_u - g_ux product = ga_ddot(g_diff, g_diff) ! norm = sqrt(product)/uxnorm if(me.eq.0 .and. Mod(k,10).eq.1) print *,k,' error= ',norm c if(norm .gt. eps) then if(.not. have_data) goto 10 c c... not done yet, get a copy of my piece of g_u and neighboring grid points c ... determine where from we should copy data -- consider topology index_first = indexl if(jlo.eq.1) index_first = index_first + ni+2 if(ilo.eq.1) index_first = index_first + 1 c call ga_get(g_u, max(1,ilo-1), min(m,ihi+1), & max(1,jlo-1), min(m,jhi+1), & dbl_mb(index_first), ni+2 ) goto 10 endif c if(me.eq.0) then print *,' converged in ',k, ' iterations, error= ',norm endif c c*** deallocate MA memory and destroy global arrays if(have_data)then if(.not. ma_pop_stack(h_l))call ga_error('invalid handle ?',0) if(.not. ma_pop_stack(h_d))call ga_error('invalid handle ?',0) endif if(.not. ga_destroy(g_u)) call ga_error('invalid handle ?',0) if(.not. ga_destroy(g_ux)) call ga_error('invalid handle ?',0) if(.not. ga_destroy(g_diff)) call ga_error('invalid handle ?',0) c call ga_sync() end subroutine nextu(ni, nj, u, ld, u0, ld0, S, W, C, N, E, D ) implicit none integer ni, nj, ld, ld0 double precision u(1:ld,1:nj), u0(0:ld0,0:nj), D(1:ni,1:nj) double precision S, W, C, N, E integer i, j c do j = 1, nj do i = 1, ni u(i,j) = S*u0(i+1,j) + W*u0(i,j-1) + & N*u0(i-1,j) + E*u0(i,j+1) + D(i,j) enddo enddo end subroutine jacinit(m, S, W, C, N, E, D, ldd, ux, & ilo, ihi, jlo, jhi, ldu ) implicit none #include "mafdecls.fh" #include "global.fh" double precision S, W, C, N, E, temp integer ilo, ihi, jlo, jhi, ldu, ldd, i, j integer m, ni, nj, jj, ii double precision h, ux(ldu,m), D(ldd,m) if(m.le.1)call ga_error('jacinit: wrong value of m',0) S = .25 W = .25 N = .25 E = .25 h = 1d0/(m+1) ni = ihi - ilo + 1 ! number of 'local' rows nj = jhi - jlo + 1 ! number of 'local' columns do j = 1, nj jj = jlo + j -1 do i = 1, ni temp = 0d0 ii = ilo + i -1 if(jj .eq. 1) temp = temp + 1 if(ii .eq. 1) temp = temp + 1 if(ii .eq. m) temp = temp + jj*h + 1 if(jj .eq. m) temp = temp + ii*h + 1 D(i,j) = temp/4d0 ux(i,j)= 1d0 + h*h*ii*jj enddo enddo end ga-5-3/global/testing/unpackc.c0000640005473000001440000003442211642656560015321 0ustar d3n000users/** * Tests the unpack function in GA. * * Each test will locally perform the same functionality, then compare * local buffers against global buffers. */ #if HAVE_CONFIG_H # include "config.h" #endif #define NELEM 200000 #define HEAP 200*200*4 #define FUDGE 100 #define STACK 200*200 #include #include #include "ga.h" #include "macdecls.h" #include "mp3.h" static int me; static int nproc; #define assign_reg(a,b) (a) = (b) #define assign_cpl(a,b) (a).real = (b).real; (a).imag = (b).imag #define assign_val_reg(a,b,c) (a) = (b) #define assign_val_cpl(a,b,c) (a).real = (b); (a).imag = (c) #define eq_zero_reg(a) (0 == (a)) #define eq_zero_cpl(a) (0 == (a).real && 0 == (a).imag) #define neq_zero_reg(a) (0 != (a)) #define neq_zero_cpl(a) (0 != (a).real || 0 != (a).imag) #define neq_reg(a,b) ((a) != (b)) #define neq_cpl(a,b) ((a).real != (b).real || (a).imag != (b).imag) #define assign_add_reg(a,b,c) (a) = (b) + (c) #define assign_add_cpl(a,b,c) (a).real = (b).real + (c).real; \ (a).imag = (b).imag + (c).imag #define cast_reg(a) ((float)(a)) #define cast_cpl(a) ((float)(a).real) #if 0 # define PRINT(AT,AT_MSK) do { \ int p; \ for (p=0; p extern void pvm_init(int argc, char *argv[]); extern double armci_timer(); # ifdef CRAY # define MPGROUP (char *)NULL # define MP_INIT(argc,argv) # else # define MPGROUP "mp_working_group" # define MP_INIT(argc,argv) pvm_init(argc, argv) # endif # define MP_FINALIZE() pvm_exit() # define MP_BARRIER() pvm_barrier(MPGROUP,-1) # define MP_MYID(pid) *(pid) = pvm_getinst(MPGROUP,pvm_mytid()) # define MP_PROCS(pproc) *(pproc) = (int)pvm_gsize(MPGROUP) # define MP_TIMER armci_timer # define MP_ASSERT(code) code #elif defined(MSG_COMMS_TCGMSG) || defined(MSG_COMMS_TCGMSG5) || defined(MSG_COMMS_TCGMSGMPI) # include # define MP_BARRIER() tcg_synch(30000) # define MP_INIT(argc,argv) tcg_pbegin((argc),(argv)) # define MP_FINALIZE() tcg_pend() # define MP_MYID(pid) *(pid) = (int)tcg_nodeid() # define MP_PROCS(pproc) *(pproc) = (int)tcg_nnodes() # define MP_TIMER tcg_time # define MP_ASSERT(code) code #elif defined(BGML) extern double armci_timer(); # define MP_BARRIER() armci_msg_barrier() # define MP_FINALIZE() # define MP_INIT(argc,argv) # define MP_MYID(pid) *(pid)=armci_msg_me() # define MP_PROCS(pproc) *(pproc)=armci_msg_nproc() # define MP_TIMER armci_timer # define MP_ASSERT(code) code #else # include # define MP_BARRIER() MPI_Barrier(MPI_COMM_WORLD) # define MP_FINALIZE() MPI_Finalize() # if defined(DCMF) || defined(MPI_MT) static inline int MPI_INIT_THREAD(int *argc, char ***argv) { int status; int provided; status = MPI_Init_thread(argc, argv, MPI_THREAD_MULTIPLE, &provided); return status; } # define MP_INIT(argc,argv) MPI_INIT_THREAD(&(argc),&(argv)) # else # define MP_INIT(argc,argv) MPI_Init(&(argc),&(argv)) # endif # define MP_MYID(pid) MPI_Comm_rank(MPI_COMM_WORLD, (pid)) # define MP_PROCS(pproc) MPI_Comm_size(MPI_COMM_WORLD, (pproc)) # define MP_TIMER MPI_Wtime # define MP_ASSERT(code) do { \ if (MPI_SUCCESS != (code)) { \ MPI_Abort(MPI_COMM_WORLD, (code)); \ } \ } while (0) #endif #ifdef MPI_SPAWN # define GA_INIT(argc,argv) GA_Initialize_args(&(argc),&(argv)) # define ARMCI_INIT(argc,argv) ARMCI_Init_args(&(argc),&(argv)) #else # define GA_INIT(argc,argv) GA_Initialize() # define ARMCI_INIT(argc,argv) ARMCI_Init() #endif ga-5-3/global/testing/ngatest_src/0000750005473000001440000000000012275260555016035 5ustar d3n000usersga-5-3/global/testing/ngatest_src/ndim_NGA_SCATTER.src0000640005473000001440000000510611417351315021342 0ustar d3n000users subroutine m4_func_NGA_SCATTER(m4_test_type, m4_ndim) implicit none #include "mafdecls.fh" #include "global.fh" c integer n,m integer ndim parameter (n = m4_n) parameter (m = (m4_n**m4_ndim)/100) parameter (ndim = m4_ndim) m4_data_type a(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type b(substr(m4_array, 1, eval(m4_ndim*2-1))) integer lo(ndim),dims(ndim),ld(ndim) integer g_a integer chunk(ndim) integer i, j, total, loop m4_data_type v(m) integer d(ndim, m) double precision drand integer unique,unique_index integer nproc, me logical status c nproc = ga_nnodes() me = ga_nodeid() c c---------------------- initialize the GA ----------------------- c initialize the chunk, dims, ld, and calculate the number c of elements total=1 do i = 1,ndim chunk(i) = 0 dims(i) = n ld(i) = n total = total * dims(i) enddo c c*** Create global arrays if (.not. nga_create(m4_MT, ndim, dims, 'a', chunk, g_a)) $ call ga_error(' ga_create failed ',1) c call ga_sync() c c------------------------------- NGA_SCATTER ---------------------------- m4_print_info(nga_scatter) c do loop = 1, MAXLOOP call ga_sync() c initialize the index array and the array containing values do i = 1, m c generate indices unique_index = 0 do while(unique_index.eq.0) do j=1,ndim d(j,i) = int(drand(0)*real(n)) + 1 enddo c unique_index = unique(d,ndim,m,i) enddo c v(i) = m4_rand a(substr(m4_ind_all, 1, eval(m4_ndim*7-1)))=v(i) enddo c c scatter the v to the global array call nga_scatter(g_a, v, d, m) call ga_sync() c c collect each elements and compare do i = 1, m do j=1, ndim lo(j) = d(j,i) enddo call nga_get(g_a,lo,lo, $ b(substr(m4_lo_all, 1, eval(m4_ndim*6-1))),ld) c c compare the results if(a(substr(m4_lo_all, 1, eval(m4_ndim*6-1))) .ne. $ b(substr(m4_lo_all, 1, eval(m4_ndim*6-1)))) then call ga_error('bye', 0) endif enddo enddo c call ga_sync() if(me.eq.0)then print *, 'OK' print *, ' ' call ffflush(6) endif c--------------------------- c status= ga_destroy(g_a) end ga-5-3/global/testing/ngatest_src/ndim_util.src0000640005473000001440000001066711417351315020535 0ustar d3n000usersc fill array with random numbers subroutine m4_util_fill_array(m4_test_type)(a,n,val) implicit none integer n m4_data_type a(n),val integer i do i= 1, n a(i) = val enddo end c initialize the array with random numbers subroutine m4_util_init_array(m4_test_type)(a,n) implicit none integer n m4_data_type a(n) double precision drand integer i do i= 1, n a(i) = m4_rand(i) enddo end c if the elements do match, stop the program subroutine m4_util_compare_patches(m4_test_type)(eps, $ total1,array1,lo1,hi1,ndim1,dims1, $ total2,array2,lo2,hi2,ndim2,dims2) implicit none double precision eps integer ndim1,ndim2,total1,total2 m4_data_type array1(total1),array2(total2) integer lo1(ndim1),hi1(ndim1),lo2(ndim2),hi2(ndim2) integer dims1(ndim1),dims2(ndim2) integer next_index integer index1,index2 double precision diff,maxval c c initialize index1 and index2, searching from zeros index1 = 0 index2 = 0 c compare corresponding elements in each array index1 = next_index(index1,total1,ndim1,lo1,hi1,dims1) index2 = next_index(index2,total2,ndim2,lo2,hi2,dims2) do while((index1.ne.0).and.(index2.ne.0)) diff = abs(array1(index1) - array2(index2)) maxval = max(abs(array1(index1)), abs(array2(index2))) if((maxval.eq.0).or.(maxval.lt.eps)) maxval = 1 if(eps .lt. abs(diff)/maxval) then print *, 'Error: Comparison failed!' print *, array1(index1), array2(index2) call ga_error('bye',0) endif index1 = next_index(index1,total1,ndim1,lo1,hi1,dims1) index2 = next_index(index2,total2,ndim2,lo2,hi2,dims2) enddo c c at this point both index1 and index2 should be 0 if((index1.ne.0).or.(index2.ne.0)) then print *, 'Error: # of elems dont match' call ga_error('bye',0) endif c end c do patch = patch + buf * alpha subroutine m4_util_scale_patch(m4_test_type)(total, $ alpha,arr1,lo1,hi1,ndim1,dims1,beta,arr2,lo2,hi2,ndim2,dims2) implicit none integer ndim1,ndim2,total integer lo1(ndim1),hi1(ndim1),lo2(ndim2),hi2(ndim2) integer dims1(ndim1),dims2(ndim2) m4_data_type arr1(total),arr2(total) m4_data_type alpha, beta integer next_index integer ind1, ind2 c ind1 = 0 ind2 = 0 ind1 = next_index(ind1,total,ndim1,lo1,hi1,dims1) ind2 = next_index(ind2,total,ndim2,lo2,hi2,dims2) c do while(ind1.ne.0) arr1(ind1) = arr1(ind1)*alpha + arr2(ind2)*beta ind1 = next_index(ind1,total,ndim1,lo1,hi1,dims1) ind2 = next_index(ind2,total,ndim2,lo2,hi2,dims2) enddo c end c transpose an array subroutine m4_util_transpose(m4_test_type)(a1,a2,total,ndim,dims) implicit none integer ndim,total integer dims(ndim) m4_data_type a1(total),a2(total) integer i, j integer idx integer bv(m4_max_dim), bunit(m4_max_dim) c bv(1)=0 bunit(1)=1 do i=2, ndim bv(i) = 0 bunit(i) = bunit(i-1) * dims(i-1) enddo c do i=1, total idx = 1 do j=1, ndim idx = idx + bv(j) * bunit(ndim-j+1) if(mod(i,bunit(j)).eq.0) bv(j) = bv(j) + 1 if(bv(j).ge.dims(j)) bv(j) = 0 enddo c print *, 'i = ',i, 'idx = ',idx a2(idx) = a1(i) enddo c do i=1, total a1(i) = a2(i) enddo c end c do patch = patch + buf * alpha m4_data_type function m4_util_dot_patch(m4_test_type)( $ total,arr1,lo1,hi1,ndim1,dims1,arr2,lo2,hi2,ndim2,dims2) implicit none integer ndim1,ndim2,total integer lo1(ndim1),hi1(ndim1),lo2(ndim2),hi2(ndim2) integer dims1(ndim1),dims2(ndim2) m4_data_type arr1(total),arr2(total) integer next_index integer ind1, ind2 m4_data_type res c ind1 = 0 ind2 = 0 res = 0 ind1 = next_index(ind1,total,ndim1,lo1,hi1,dims1) ind2 = next_index(ind2,total,ndim2,lo2,hi2,dims2) c do while(ind1.ne.0) res = res + arr1(ind1)*arr2(ind2) ind1 = next_index(ind1,total,ndim1,lo1,hi1,dims1) ind2 = next_index(ind2,total,ndim2,lo2,hi2,dims2) enddo c m4_util_dot_patch(m4_test_type) = res c end ga-5-3/global/testing/ngatest_src/ndim_NGA_GET.src0000640005473000001440000000405507113076312020655 0ustar d3n000users subroutine m4_func_NGA_GET(m4_test_type, m4_ndim) implicit none #include "mafdecls.fh" #include "global.fh" c integer n,m integer ndim parameter (n = m4_n) parameter (m = (m4_n**m4_ndim)/100) parameter (ndim = m4_ndim) m4_data_type a(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type b(substr(m4_array, 1, eval(m4_ndim*2-1))) integer lo(ndim),hi(ndim),dims(ndim),ld(ndim) integer g_a integer chunk(ndim) integer i, total, loop integer lop(ndim), hip(ndim) m4_data_type val integer nproc, me logical status c nproc = ga_nnodes() me = ga_nodeid() c c---------------------- initialize the GA ----------------------- c initialize the chunk, dims, ld, and calculate the number c of elements total=1 do i = 1,ndim chunk(i) = 0 dims(i) = n ld(i) = n total = total * dims(i) enddo c c*** Create global arrays if (.not. nga_create(m4_MT, ndim, dims, 'a', chunk, g_a)) $ call ga_error(' ga_create failed ',1) c call ga_sync() c c------------------------------- NGA_GET ---------------------------- m4_print_info(nga_get) c val = m4_conv(234) call ga_fill(g_a,val) call ga_sync() c call m4_util_fill_array(m4_test_type)(a,total,val) c call ga_sync() do i = 1,ndim lop(i) = 1 hip(i) = n enddo do loop = 1, MAXLOOP call random_range(lop,hip,lo,hi,ndim) if(me.eq.0 .and. Mod(loop,10).eq.0)then call print_range(loop,lo,hi,ndim) endif c call nga_get(g_a,lo,hi, $ b(substr(m4_lo_all, 1, eval(m4_ndim*6-1))),ld) call m4_util_compare_patches(m4_test_type)(0d0,total, $ a,lo,hi,ndim,dims,total,b,lo,hi,ndim,dims) enddo c call ga_sync() if(me.eq.0)then print *, 'OK' print *, ' ' call ffflush(6) endif c--------------------------- c status= ga_destroy(g_a) end ga-5-3/global/testing/ngatest_src/ndim_NGA_ADD_PATCH.src0000640005473000001440000001705011417351315021545 0ustar d3n000users subroutine m4_func_NGA_ADD_PATCH(m4_test_type, m4_ndim) implicit none #include "mafdecls.fh" #include "global.fh" c integer n,m integer ndim parameter (n = m4_n) parameter (m = (m4_n**m4_ndim)/100) parameter (ndim = m4_ndim) m4_data_type a(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type b(substr(m4_array, 1, eval(m4_ndim*2-1))) integer dims(ndim) integer g_a, g_b,g_c integer chunk(ndim) integer i, total integer elems, count_elems integer loop double precision drand m4_data_type alpha, beta integer lop(ndim), hip(ndim), hipl(ndim) integer alo(ndim), ahi(ndim) integer blo(ndim), bhi(ndim) integer clo(ndim), chi(ndim) c for different array dimensions ifelse(m4_ndim,1,`',` m4_data_type d(substr(m4_array, 1, eval((m4_ndim-1)*2-1))) integer dndim parameter (dndim = m4_ndim-1) integer ddims(dndim),dlo(dndim),dhi(dndim),dtotal ') c integer nproc, me logical status integer repeat c nproc = ga_nnodes() me = ga_nodeid() c c---------------------- initialize the GA ----------------------- c initialize the chunk, dims, ld, and calculate the number c of elements total=1 do i = 1,ndim chunk(i) = 0 dims(i) = n total = total * dims(i) enddo c c*** Create global arrays if (.not. nga_create(m4_MT, ndim, dims, 'a', chunk, g_a)) $ call ga_error(' ga_create failed ',1) c c test the same distribution and different distribution seperately do repeat=1,2 if(repeat.eq.1) then status = ga_duplicate(g_a, g_b, 'a_duplicated') if(.not.ga_compare_distr(g_a, g_b)) $ call ga_error("g_b distribution different",0) c status = ga_duplicate(g_a, g_c, 'a_duplicated_again') if(.not.ga_compare_distr(g_a, g_c)) $ call ga_error("g_c distribution different",0) c else do i = 1,ndim if(mod(i,2).eq.0) chunk(i) = n enddo if (.not. nga_create(m4_MT, ndim, dims, 'b', chunk, g_b)) $ call ga_error(' ga_create failed ',1) do i = 1,ndim if(mod(i,2).eq.0) chunk(i) = 0 if(mod(i,2).eq.1) chunk(i) = n enddo if (.not. nga_create(m4_MT, ndim, dims, 'c', chunk, g_c)) $ call ga_error(' ga_create failed ',1) endif c call ga_sync() c c---------------------------NGA_ADD_PATCH ------------------------- c if(repeat.eq.1) then m4_print_info(nga_add_patch) if(me.eq.0) print *, 'Testing with the same distributions' else if(me.eq.0) print *, 'Testing with different distributions' endif c c initialize GA call m4_util_init_array(m4_test_type)(a,total) call nga_distribution(g_a, me, lop, hip) elems = count_elems(lop, hip, ndim) if(elems.gt.0) call nga_put(g_a,lop,hip, $ a(substr(m4_lop_all, 1, eval(m4_ndim*7-1))),dims) call m4_util_init_array(m4_test_type)(b,total) call nga_distribution(g_b, me, lop, hip) elems = count_elems(lop, hip, ndim) if(elems.gt.0) call nga_put(g_b,lop,hip, $ b(substr(m4_lop_all, 1, eval(m4_ndim*7-1))),dims) c call ga_sync() do i = 1,ndim lop(i) = 1 hipl(i) = n-2 hip(i) = n enddo c c--- do loop=1, 10 call random_range(lop,hipl,alo,ahi,ndim) do i=1, ndim blo(i) = alo(i) + 1 bhi(i) = ahi(i) + 1 clo(i) = alo(i) + 2 chi(i) = ahi(i) + 2 enddo if(me.eq.0)then call add_range(loop,alo,ahi,ndim,blo,bhi,ndim) c$$$ print *, loop,': [',(alo(i),':',ahi(i), i=1,ndim),']', c$$$ $ '+', '[',(blo(i),':',bhi(i), i=1,ndim),']' endif c alpha = m4_rand(1) beta = m4_rand(1) c c keep copies of the origian arrays call nga_get(g_a,alo,ahi, $ a(substr(m4_alo_all, 1, eval(m4_ndim*7-1))),dims) call nga_get(g_b,blo,bhi, $ b(substr(m4_blo_all, 1, eval(m4_ndim*7-1))),dims) c the result should be (in a) call m4_util_scale_patch(m4_test_type)(total, $ alpha,a,alo,ahi,ndim,dims, $ beta,b,blo,bhi,ndim,dims) c call nga_add_patch(alpha, g_a, alo, ahi, beta, g_b, blo, bhi, $ g_c, clo,chi) c call nga_get(g_c,clo,chi, $ b(substr(m4_clo_all, 1, eval(m4_ndim*7-1))),dims) c call m4_util_compare_patches(m4_test_type)(1d-5,total, $ a,alo,ahi,ndim,dims,total,b,clo,chi,ndim,dims) enddo c call ga_sync() if(me.eq.0)then print *, 'OK' print *, ' ' call ffflush(6) endif c--------------------------- c status = ga_destroy(g_b) enddo c----------------------------------------------------------------- changequote({,}) ifelse(m4_ndim,1,{},{ c testing copy on differet dimensions dtotal = 1 do i = 1,dndim ddims(i) = n dtotal = dtotal * ddims(i) enddo c if (.not. nga_create(m4_MT, dndim, ddims, 'd', chunk, g_b)) $ call ga_error(' ga_create failed ',1) c if(me.eq.0) $ print *, 'Testing adding patch on different dimensions' c call ga_sync() c c initialize g_b call m4_util_init_array(m4_test_type)(d,dtotal) call nga_distribution(g_b, me, dlo, dhi) elems = count_elems(dlo, dhi, dndim) if(elems.gt.0) call nga_put(g_b,dlo,dhi, $ d(substr(m4_dlo_all, 1, eval((m4_ndim-1)*7-1))),ddims) c c calculate the maximum range of g_a that can fit into g_b do i = 1,ndim lop(i) = 1 hip(i) = n enddo hip(dndim) = 1 c call ga_sync() c do loop=1, 10 call random_range(lop,hip,alo,ahi,ndim) c do i=1, dndim dlo(i) = alo(dndim-i+1) dhi(i) = ahi(dndim-i+1) enddo dlo(1) = alo(ndim) dhi(1) = ahi(ndim) c if(me.eq.0) then call add_range(loop,alo,ahi,ndim,dlo,dhi,dndim) c$$$ print *, loop,': [',(alo(i),':',ahi(i), i=1,ndim),']', c$$$ $ '+', '[',(dlo(i),':',dhi(i), i=1,dndim),']' endif c alpha = m4_rand(1) beta = m4_rand(1) c c keep copies of the origian arrays call nga_get(g_a,alo,ahi, $ a(substr(m4_alo_all, 1, eval(m4_ndim*7-1))),dims) call nga_get(g_b,dlo,dhi, $ d(substr(m4_dlo_all, 1, eval((m4_ndim-1)*7-1))),ddims) c c the result should be (in a) call m4_util_scale_patch(m4_test_type)(total, $ alpha,a,alo,ahi,ndim,dims, $ beta,d,dlo,dhi,dndim,ddims) c call nga_add_patch(alpha,g_a,alo,ahi,beta,g_b,dlo,dhi, $ g_c,alo,ahi) c call nga_get(g_c,alo,ahi, $ b(substr(m4_alo_all, 1, eval(m4_ndim*7-1))),dims) c call m4_util_compare_patches(m4_test_type)(1d-5,total, $ a,alo,ahi,ndim,dims,total,b,alo,ahi,ndim,dims) enddo c call ga_sync() if(me.eq.0)then print *, ' add patches on different dimensions: OK' print *, ' ' call ffflush(6) endif c status = ga_destroy(g_b) }) changequote(`,') c--- c status = ga_destroy(g_c) status = ga_destroy(g_a) end ga-5-3/global/testing/ngatest_src/ndim_GA_FILL.src0000640005473000001440000000361407113076312020646 0ustar d3n000users subroutine m4_func_GA_FILL(m4_test_type, m4_ndim) implicit none #include "mafdecls.fh" #include "global.fh" c integer n,m integer ndim parameter (n = m4_n) parameter (m = (m4_n**m4_ndim)/100) parameter (ndim = m4_ndim) m4_data_type a(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type b(substr(m4_array, 1, eval(m4_ndim*2-1))) integer lo(ndim),hi(ndim), dims(ndim), ld(ndim) integer g_a integer chunk(ndim) integer i,total integer elems, count_elems m4_data_type val integer nproc, me logical status c nproc = ga_nnodes() me = ga_nodeid() c c---------------------- initialize the GA ----------------------- c initialize the chunk, dims, ld, and calculate the number c of elements total=1 do i = 1,ndim chunk(i) = 0 dims(i) = n ld(i) = n total = total * dims(i) enddo c c*** Create global arrays if (.not. nga_create(m4_MT, ndim, dims, 'a', chunk, g_a)) $ call ga_error(' ga_create failed ',1) c call ga_sync() c c-------------------------------GA_FILL ---------------------------- m4_print_info(ga_fill) c call nga_distribution(g_a, me, lo,hi) elems = count_elems(lo,hi,ndim) c val = m4_conv(456) call ga_fill(g_a,val) call ga_sync() c call m4_util_fill_array(m4_test_type)(a,total,val) c if(elems.gt.0) then call nga_get(g_a,lo,hi, $ b(substr(m4_lo_all, 1, eval(m4_ndim*6-1))),ld) call m4_util_compare_patches(m4_test_type)(0d0,total, $ a,lo,hi,ndim,dims,total,b,lo,hi,ndim,dims) endif call ga_sync() if(me.eq.0)then print *, 'OK' print *, ' ' call ffflush(6) endif c--------------------------- c status= ga_destroy(g_a) end ga-5-3/global/testing/ngatest_src/ndim_NGA_FILL_PATCH.src0000640005473000001440000000350307113076312021700 0ustar d3n000users subroutine m4_func_NGA_FILL_PATCH(m4_test_type, m4_ndim) implicit none #include "mafdecls.fh" #include "global.fh" c integer n,m integer ndim parameter (n = m4_n) parameter (m = (m4_n**m4_ndim)/100) parameter (ndim = m4_ndim) m4_data_type a(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type b(substr(m4_array, 1, eval(m4_ndim*2-1))) integer lo(ndim),hi(ndim),dims(ndim) integer g_a integer chunk(ndim) integer i, total m4_data_type val integer nproc, me logical status c nproc = ga_nnodes() me = ga_nodeid() c c---------------------- initialize the GA ----------------------- c initialize the chunk, dims, ld, and calculate the number c of elements total=1 do i = 1,ndim chunk(i) = 0 dims(i) = n total = total * dims(i) enddo c c*** Create global arrays if (.not. nga_create(m4_MT, ndim, dims, 'a', chunk, g_a)) $ call ga_error(' ga_create failed ',1) c call ga_sync() c c--------------------------- NGA_FILL_PATCH ------------------------- m4_print_info(nga_fill_patch) c val = m4_conv(1234) c initialize the lo and hi do i=1, ndim lo(i) = 2 hi(i) = n - 1 enddo c call nga_fill_patch(g_a, lo, hi, val) c c check the result call m4_util_fill_array(m4_test_type)(a,total,val) call nga_get(g_a,lo,hi, $ b(substr(m4_lo_all, 1, eval(m4_ndim*6-1))),dims) c call m4_util_compare_patches(m4_test_type)(0d0,total, $ a,lo,hi,ndim,dims,total,b,lo,hi,ndim,dims) c call ga_sync() if(me.eq.0)then print *, 'OK' print *, ' ' call ffflush(6) endif c--------------------------- c status= ga_destroy(g_a) end ga-5-3/global/testing/ngatest_src/ndim_NGA_GATHER.src0000640005473000001440000000527011417351315021211 0ustar d3n000users subroutine m4_func_NGA_GATHER(m4_test_type, m4_ndim) implicit none #include "mafdecls.fh" #include "global.fh" c integer n,m integer ndim parameter (n = m4_n) parameter (m = (m4_n**m4_ndim)/100) parameter (ndim = m4_ndim) m4_data_type a(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type b(substr(m4_array, 1, eval(m4_ndim*2-1))) integer lo(ndim),hi(ndim),dims(ndim),ld(ndim) integer g_a integer chunk(ndim) integer i, j, total, loop integer elems, count_elems m4_data_type v(m) integer d(ndim, m) double precision drand integer unique,unique_index integer nproc, me logical status c nproc = ga_nnodes() me = ga_nodeid() c c---------------------- initialize the GA ----------------------- c initialize the chunk, dims, ld, and calculate the number c of elements total=1 do i = 1,ndim chunk(i) = 0 dims(i) = n ld(i) = n total = total * dims(i) enddo c c*** Create global arrays if (.not. nga_create(m4_MT, ndim, dims, 'a', chunk, g_a)) $ call ga_error(' ga_create failed ',1) c call ga_sync() c c------------------------------- NGA_GATHER ---------------------------- m4_print_info(nga_gather) c c initialize GA call m4_util_init_array(m4_test_type)(a,total) call nga_distribution(g_a, me, lo, hi) elems = count_elems(lo, hi, ndim) if(elems.gt.0) call nga_put(g_a,lo,hi, $ a(substr(m4_lo_all, 1, eval(m4_ndim*6-1))),dims) c do loop = 1, MAXLOOP call ga_sync() c initialize the index array do i = 1, m c generate indices unique_index = 0 do while(unique_index.eq.0) do j=1,ndim d(j,i) = int(drand(0)*real(n)) + 1 enddo c unique_index = unique(d,ndim,m,i) enddo enddo c c gather from global array call nga_gather(g_a, v, d, m) c c collect each elements and compare do i = 1, m do j=1, ndim lo(j) = d(j,i) enddo call nga_get(g_a,lo,lo, $ b(substr(m4_lo_all, 1, eval(m4_ndim*6-1))),ld) c c compare the results if(v(i).ne. $ b(substr(m4_lo_all, 1, eval(m4_ndim*6-1)))) then call ga_error('bye', 0) endif enddo enddo c call ga_sync() if(me.eq.0)then print *, 'OK' print *, ' ' call ffflush(6) endif c--------------------------- c status= ga_destroy(g_a) end ga-5-3/global/testing/ngatest_src/ndim_NGA_ACC.src0000640005473000001440000000572411417351315020631 0ustar d3n000users subroutine m4_func_NGA_ACC(m4_test_type, m4_ndim) implicit none #include "mafdecls.fh" #include "global.fh" c integer n,m integer ndim parameter (n = m4_n) parameter (m = (m4_n**m4_ndim)/100) parameter (ndim = m4_ndim) m4_data_type a(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type b(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type c(substr(m4_array, 1, eval(m4_ndim*2-1))) integer lo(ndim),hi(ndim),dims(ndim),ld(ndim) integer g_a integer lop(ndim),hip(ndim) integer chunk(ndim) integer i, total, loop double precision drand m4_data_type val, alpha integer nproc, me, proc logical status c nproc = ga_nnodes() me = ga_nodeid() c c---------------------- initialize the GA ----------------------- c initialize the chunk, dims, ld, and calculate the number c of elements total=1 do i = 1,ndim chunk(i) = 0 dims(i) = n ld(i) = n total = total * dims(i) enddo c c*** Create global arrays if (.not. nga_create(m4_MT, ndim, dims, 'a', chunk, g_a)) $ call ga_error(' ga_create failed ',1) c call ga_sync() c c------------------------------- NGA_ACC ---------------------------- m4_print_info(nga_acc) c call ga_sync() val = m4_rand(me*2+1) call ga_fill(g_a,val) call ga_sync() proc = nproc-1 -me ! access other process memory call nga_distribution(g_a,proc,lop,hip) c call m4_util_init_array(m4_test_type)(b,total) c do loop = 1, MAXLOOP call random_range(lop,hip,lo,hi,ndim) if(Mod(loop,10).eq.0)then if(Mod((loop/10),ndim).eq.me) then call print_range(loop,lo,hi,ndim) endif endif call ga_sync() c keep a copy of the original patch if(hi(1).ne.-1) call nga_get(g_a,lo,hi, $ a(substr(m4_lo_all, 1, eval(m4_ndim*6-1))),ld) c generate the alpha alpha = val c call ga_sync() c keep a copy of the original patch if(hi(1).ne.-1) call nga_acc(g_a,lo,hi, $ b(substr(m4_lo_all, 1, eval(m4_ndim*6-1))),ld,alpha) c call ga_sync() c if(hi(1).ne.-1) then c scale the local copy of array call m4_util_scale_patch(m4_test_type)(total, $ m4_conv(1),a,lo,hi,ndim,dims, $ alpha,b,lo,hi,ndim,dims) c c get the patch from the global array call nga_get(g_a,lo,hi, $ c(substr(m4_lo_all, 1, eval(m4_ndim*6-1))),ld) c call m4_util_compare_patches(m4_test_type)(1d-2,total, $ a,lo,hi,ndim,dims,total,c,lo,hi,ndim,dims) endif enddo c call ga_sync() if(me.eq.0)then print *, 'OK' print *, ' ' call ffflush(6) endif c--------------------------- c status= ga_destroy(g_a) end ga-5-3/global/testing/ngatest_src/ndim_NGA_SCATTER_ACC.src0000640005473000001440000000713611417351315022015 0ustar d3n000users subroutine m4_func_NGA_SCATTER_ACC(m4_test_type, m4_ndim) implicit none #include "mafdecls.fh" #include "global.fh" c integer n,m integer ndim parameter (n = m4_n) parameter (m = (m4_n**m4_ndim)/100) parameter (ndim = m4_ndim) m4_data_type a(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type b(substr(m4_array, 1, eval(m4_ndim*2-1))) integer lo(ndim),dims(ndim),ld(ndim) integer g_a integer chunk(ndim) integer i, j, total, loop, idx m4_data_type v(m) integer d(ndim, m) double precision drand m4_data_type alpha integer unique,unique_index integer nproc, me logical status c nproc = ga_nnodes() me = ga_nodeid() c c---------------------- initialize the GA ----------------------- c initialize the chunk, dims, ld, and calculate the number c of elements total=1 do i = 1,ndim chunk(i) = 0 dims(i) = n ld(i) = n total = total * dims(i) enddo c c*** Create global arrays if (.not. nga_create(m4_MT, ndim, dims, 'a', chunk, g_a)) $ call ga_error(' ga_create failed ',1) c call ga_sync() c c-------------------------- NGA_SCATTER_ACC ----------------------- m4_print_info(nga_scatter_acc) c alpha=m4_rand(me*2+1) c c do loop = 1, MAXLOOP call ga_sync() c initialize the index array and the array containing values do i = 1, m c generate indices unique_index = 0 do while(unique_index.eq.0) c generate random number idx = int(drand(0)*(real(total/nproc))) $ +me*total/nproc if(idx .eq. 0) idx = idx+1 c c convert to ndim call conv_1ton(ndim,dims,idx,lo) c do j=1,ndim d(j,i) = lo(j) enddo c unique_index = unique(d,ndim,m,i) enddo c v(i) = m4_rand a(substr(m4_ind_all, 1, eval(m4_ndim*7-1)))=v(i) enddo c c the result should be do i = 1, m do j=1, ndim lo(j) = d(j,i) enddo call nga_get(g_a,lo,lo, $ b(substr(m4_lo_all, 1, eval(m4_ndim*6-1))),ld) a(substr(m4_ind_all, 1, eval(m4_ndim*7-1)))= $ a(substr(m4_ind_all, 1, eval(m4_ndim*7-1))) $ *alpha $ +b(substr(m4_lo_all, 1, eval(m4_ndim*6-1))) enddo c call ga_sync() c c scatter the v to the global array call nga_scatter_acc(g_a, v, d, m, alpha) call ga_sync() c c collect each elements and compare do i = 1, m do j=1, ndim lo(j) = d(j,i) enddo call nga_get(g_a,lo,lo, $ b(substr(m4_lo_all, 1, eval(m4_ndim*6-1))),ld) c c compare the results if(abs(a(substr(m4_lo_all, 1, eval(m4_ndim*6-1))) - $ b(substr(m4_lo_all, 1, eval(m4_ndim*6-1)))) $ .gt. 1d-5) then print *,'a=', $ a(substr(m4_lo_all, 1, eval(m4_ndim*6-1))), $ 'b=', $ b(substr(m4_lo_all, 1, eval(m4_ndim*6-1))), $ 'i=',i,'alpha=',alpha,'v=',v(i) call ga_error('bye', 0) endif enddo enddo c call ga_sync() if(me.eq.0)then print *, 'OK' print *, ' ' call ffflush(6) endif c--------------------------- c status= ga_destroy(g_a) end ga-5-3/global/testing/ngatest_src/ndim_NGA_PERIODIC_PUT.src0000640005473000001440000000475207113076312022170 0ustar d3n000users subroutine m4_func_NGA_PERIODIC_PUT(m4_test_type, m4_ndim) implicit none #include "mafdecls.fh" #include "global.fh" c integer n integer ndim parameter (n = m4_n) parameter (ndim = m4_ndim) m4_data_type a(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type b(substr(m4_array, 1, eval(m4_ndim*2-1))) integer lo(ndim),hi(ndim),lop(ndim),hip(ndim) integer blo(ndim),bhi(ndim) integer dims(ndim),ld(ndim) integer g_a integer chunk(ndim) integer i,total,loop integer nproc, me logical status c nproc = ga_nnodes() me = ga_nodeid() c c---------------------- initialize the GA ----------------------- c initialize the chunk, dims, ld, and calculate the number c of elements total=1 do i = 1,ndim chunk(i) = 0 dims(i) = n ld(i) = n enddo c c*** Create global arrays if (.not. nga_create(m4_MT, ndim, dims, 'a', chunk, g_a)) $ call ga_error(' ga_create failed ',1) c call ga_sync() c c------------------------ NGA_PERIODIC_PUT ---------------------- m4_print_info(nga_periodic_put) c total = 1 do i = 1,ndim lo(i) = 1 hi(i) = n total = total*dims(i) enddo c call m4_util_init_array(m4_test_type)(a,total) c c initialize array a call ga_zero(g_a) call ga_sync() c do loop = 1, MAXLOOP if(mod(loop,nproc).eq.me) then call random_range_outbound(lo,hi,lop,hip,ndim) if(Mod(loop,10).eq.0) then call print_range(loop,lop,hip,ndim) endif call ga_init_fence() call nga_periodic_put(g_a,lop,hip, $ a(substr(m4_lo_all,1,eval(m4_ndim*6-1))),ld) call ga_fence() call ga_init_fence() call nga_periodic_get(g_a,lop,hip, $ b(substr(m4_lo_all,1,eval(m4_ndim*6-1))),ld) call ga_fence() c c check the result do i=1,ndim blo(i) = 1 bhi(i) = hip(i)-lop(i)+1 enddo call m4_util_compare_patches(m4_test_type)(0d0, $ total,a,blo,bhi,ndim,dims,total,b,blo,bhi,ndim,dims) endif call ga_sync() enddo c call ga_sync() if(me.eq.0)then print *, 'OK' print *, ' ' call ffflush(6) endif c--------------------------- c status= ga_destroy(g_a) end ga-5-3/global/testing/ngatest_src/ndim_NGA_PERIODIC_GET.src0000640005473000001440000000436307113076312022135 0ustar d3n000users subroutine m4_func_NGA_PERIODIC_GET(m4_test_type, m4_ndim) implicit none #include "mafdecls.fh" #include "global.fh" c integer n integer ndim parameter (n = m4_n) parameter (ndim = m4_ndim) m4_data_type a(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type b(substr(m4_array, 1, eval(m4_ndim*2-1))) integer lo(ndim),hi(ndim),lop(ndim),hip(ndim) integer blo(ndim),bhi(ndim) integer dims(ndim),ld(ndim) integer g_a integer chunk(ndim) integer i,total,loop m4_data_type val integer nproc, me logical status c nproc = ga_nnodes() me = ga_nodeid() c c---------------------- initialize the GA ----------------------- c initialize the chunk, dims, ld, and calculate the number c of elements total=1 do i = 1,ndim chunk(i) = 0 dims(i) = n ld(i) = n enddo c c*** Create global arrays if (.not. nga_create(m4_MT, ndim, dims, 'a', chunk, g_a)) $ call ga_error(' ga_create failed ',1) c call ga_sync() c c------------------------ NGA_PERIODIC_GET ---------------------- m4_print_info(nga_periodic_get) c total = 1 do i = 1,ndim lo(i) = 1 hi(i) = n total = total*dims(i) enddo c c initialize array a val = m4_conv(234) call ga_fill(g_a,val) call ga_sync() c call m4_util_fill_array(m4_test_type)(a,total,val) c do loop = 1, MAXLOOP call random_range_outbound(lo,hi,lop,hip,ndim) if(me.eq.0 .and. Mod(loop,10).eq.0) then call print_range(loop,lop,hip,ndim) endif call nga_periodic_get(g_a,lop,hip, $ b(substr(m4_lo_all,1,eval(m4_ndim*6-1))),ld) call ga_sync() c c check the result do i=1,ndim blo(i) = 1 bhi(i) = hip(i)-lop(i)+1 enddo call m4_util_compare_patches(m4_test_type)(0d0, $ total,a,blo,bhi,ndim,dims,total,b,blo,bhi,ndim,dims) enddo c call ga_sync() if(me.eq.0)then print *, 'OK' print *, ' ' call ffflush(6) endif c--------------------------- c status= ga_destroy(g_a) end ga-5-3/global/testing/ngatest_src/ndim_NGA_PERIODIC_ACC.src0000640005473000001440000000616411417351315022106 0ustar d3n000users subroutine m4_func_NGA_PERIODIC_ACC(m4_test_type, m4_ndim) implicit none #include "mafdecls.fh" #include "global.fh" c integer n integer ndim parameter (n = m4_n) parameter (ndim = m4_ndim) m4_data_type a(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type b(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type c(substr(m4_array, 1, eval(m4_ndim*2-1))) integer lo(ndim),hi(ndim),lop(ndim),hip(ndim) integer blo(ndim),bhi(ndim) integer dims(ndim),ld(ndim) integer g_a integer chunk(ndim) integer i,total,loop m4_data_type alpha double precision drand integer nproc, me logical status c nproc = ga_nnodes() me = ga_nodeid() c c---------------------- initialize the GA ----------------------- c initialize the chunk, dims, ld, and calculate the number c of elements total=1 do i = 1,ndim chunk(i) = 0 dims(i) = n ld(i) = n enddo c c*** Create global arrays if (.not. nga_create(m4_MT, ndim, dims, 'a', chunk, g_a)) $ call ga_error(' ga_create failed ',1) c call ga_sync() c c------------------------ NGA_PERIODIC_ACC ---------------------- m4_print_info(nga_periodic_acc) c total = 1 do i = 1,ndim lo(i) = 1 hi(i) = n total = total*dims(i) enddo c call m4_util_init_array(m4_test_type)(a,total) call m4_util_init_array(m4_test_type)(b,total) c c initialize array g_a call ga_fill(g_a,m4_conv(123)) call ga_sync() c alpha = m4_rand(me*2+1) c do loop = 1, MAXLOOP if(mod(loop,nproc).eq.me) then call random_range_outbound(lo,hi,lop,hip,ndim) if(Mod(loop,10).eq.0) then call print_range(loop,lop,hip,ndim) endif call ga_init_fence() c keep a copy of the original patch call nga_periodic_put(g_a,lop,hip, $ b(substr(m4_lo_all,1,eval(m4_ndim*6-1))),ld) call ga_fence() call ga_init_fence() call nga_periodic_acc(g_a,lop,hip, $ a(substr(m4_lo_all,1,eval(m4_ndim*6-1))),ld,alpha) call ga_fence() call ga_init_fence() call nga_periodic_get(g_a,lop,hip, $ c(substr(m4_lo_all,1,eval(m4_ndim*6-1))),ld) call ga_fence() c c check the result do i=1,ndim blo(i) = 1 bhi(i) = hip(i)-lop(i)+1 enddo c scale the local copy of array call m4_util_scale_patch(m4_test_type)(total, $ m4_conv(1),b,blo,bhi,ndim,dims, $ alpha,a,blo,bhi,ndim,dims) call m4_util_compare_patches(m4_test_type)(1d-2, $ total,b,blo,bhi,ndim,dims,total,c,blo,bhi,ndim,dims) endif call ga_sync() enddo c call ga_sync() if(me.eq.0)then print *, 'OK' print *, ' ' call ffflush(6) endif c--------------------------- c status= ga_destroy(g_a) end ga-5-3/global/testing/ngatest_src/ngatest.def0000640005473000001440000002566511417351315020171 0ustar d3n000usersdivert(-1) # ------------------------------------------------------------ # up to 8 dimensions # testing from "m4_from" to "m4_to" dimensions define(m4_from, m4_dim_from) define(m4_to, m4_dim_to) # data type can be integer, double precision, or double complex define(m4_data_type_int, `integer') define(m4_data_type_dbl, `double precision') define(m4_data_type_dcpl, `double complex') define(m4_test_type_int, `int') define(m4_test_type_dbl, `dbl') define(m4_test_type_dcpl, `dcpl') define(m4_max_dim, 8) #-------------------------------------------------------------- # n values for each dimension define(m4_n_1dim, 20000) define(m4_n_2dim, 140) define(m4_n_3dim, 27) define(m4_n_4dim, 11) define(m4_n_5dim, 7) define(m4_n_6dim, 5) define(m4_n_7dim, 4) define(m4_n_8dim, 3) # define(m4_n_1dim, 2000) # define(m4_n_2dim, 100) # define(m4_n_3dim, 20) # define(m4_n_4dim, 10) # define(m4_n_5dim, 5) # define(m4_n_6dim, 4) # define(m4_n_7dim, 3) # define(m4_n_8dim, 2) # to access n value define(m4_n_val, m4_n_$1dim) # common definitions define(m4_array, (n,n,n,n,n,n,n,n,n)) define(m4_lo_all, (lo(1),lo(2),lo(3),lo(4),lo(5),lo(6),lo(7),lo(8))) define(m4_lop_all, (lop(1),lop(2),lop(3),lop(4),lop(5),lop(6),lop(7),lop(8))) define(m4_ind_all, (d(1,i),d(2,i),d(3,i),d(4,i),d(5,i),d(6,i),d(7,i),d(8,i))) define(m4_alo_all, (alo(1),alo(2),alo(3),alo(4),alo(5),alo(6),alo(7),alo(8))) define(m4_ahi_all, (ahi(1),ahi(2),ahi(3),ahi(4),ahi(5),ahi(6),ahi(7),ahi(8))) define(m4_ald_all, (ald(1),ald(2),ald(3),ald(4),ald(5),ald(6),ald(7),ald(8))) define(m4_blo_all, (blo(1),blo(2),blo(3),blo(4),blo(5),blo(6),blo(7),blo(8))) define(m4_bhi_all, (bhi(1),bhi(2),bhi(3),bhi(4),bhi(5),bhi(6),bhi(7),bhi(8))) define(m4_bld_all, (bld(1),bld(2),bld(3),bld(4),bld(5),bld(6),bld(7),bld(8))) define(m4_clo_all, (clo(1),clo(2),clo(3),clo(4),clo(5),clo(6),clo(7),clo(8))) define(m4_chi_all, (chi(1),chi(2),chi(3),chi(4),chi(5),chi(6),chi(7),chi(8))) define(m4_cld_all, (cld(1),cld(2),cld(3),cld(4),cld(5),cld(6),cld(7),cld(8))) define(m4_dlo_all, (dlo(1),dlo(2),dlo(3),dlo(4),dlo(5),dlo(6),dlo(7),dlo(8))) define(m4_func_GA_FILL, testit_GA_FILL_$1$2()) define(m4_func_NGA_PUT, testit_NGA_PUT_$1$2()) define(m4_func_NGA_GET, testit_NGA_GET_$1$2()) define(m4_func_NGA_ACC, testit_NGA_ACC_$1$2()) define(m4_func_NGA_SCATTER, testit_NGA_SCATTER_$1$2()) define(m4_func_NGA_SCATTER_ACC, testit_NGA_SCATTER_ACC_$1$2()) define(m4_func_NGA_GATHER, testit_NGA_GATHER_$1$2()) define(m4_func_NGA_PERIODIC_PUT, testit_NGA_PERIODIC_PUT_$1$2()) define(m4_func_NGA_PERIODIC_GET, testit_NGA_PERIODIC_GET_$1$2()) define(m4_func_NGA_PERIODIC_ACC, testit_NGA_PERIODIC_ACC_$1$2()) define(m4_func_NGA_FILL_PATCH, testit_NGA_FILL_PATCH_$1$2()) define(m4_func_NGA_COPY_PATCH, testit_NGA_COPY_PATCH_$1$2()) define(m4_func_NGA_SCALE_PATCH, testit_NGA_SCALE_PATCH_$1$2()) define(m4_func_NGA_ADD_PATCH, testit_NGA_ADD_PATCH_$1$2()) define(m4_func_NGA_DOT_PATCH, testit_NGA_DOT_PATCH_$1$2()) define(m4_util_fill_array, fill_array_$1) define(m4_util_init_array, init_array_$1) define(m4_util_compare_patches, compare_patches_$1) define(m4_util_scale_patch, scale_patch_$1) define(m4_util_dot_patch, dot_patch_$1) define(m4_util_transpose, transpose_$1) define(m4_nga_dot_patch, `nga_$1_patch') changequote([,]) define(m4_print_info, [if(me.eq.0)then print *, ' ' print *, 'TESTING $1' print *, ' - Data Type: m4_data_type' print *, ' - Dimension: m4_ndim' print *, ' - Running on',nproc,'processes (processors)' call ffflush(6) endif]) changequote(`,') # utility # forloop(i, from, to, stmt) define(`forloop', `pushdef(`$1', `$2')_forloop(`$1', `$2', `$3', `$4')popdef(`$1')') define(`_forloop',`$4`'ifelse($1, `$3', , `define(`$1', incr($1))_forloop(`$1', `$2', `$3', `$4')')') #--------------------------------------------------------------------- # insert the main program divert include(`ngatest_src/ndim_main.src') c----------------- divert(-1) # insert the testing subroutines divert ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_data_type') undefine(`m4_test_type') undefine(`m4_MT') undefine(`m4_conv') undefine(`m4_rand') define(m4_data_type, m4_data_type_int) define(m4_test_type, m4_test_type_int) define(m4_MT, `MT_INT') define(m4_conv, `int($1)') define(m4_rand, `int(drand(0) * $1 * 2)') define(m4_dot, `idot') divert forloop(`m4_i', m4_from, m4_to, `divert(-1) undefine(`m4_n') undefine(`m4_ndim') define(m4_n, m4_n_val(m4_i)) define(m4_ndim, m4_i) divert ifelse(m4_test_GA_FILL, `yes', ` include(`ngatest_src/ndim_GA_FILL.src')') ifelse(m4_test_NGA_PUT, `yes', ` include(`ngatest_src/ndim_NGA_PUT.src')') ifelse(m4_test_NGA_GET, `yes', ` include(`ngatest_src/ndim_NGA_GET.src')') ifelse(m4_test_NGA_ACC, `yes', ` include(`ngatest_src/ndim_NGA_ACC.src')') ifelse(m4_test_NGA_SCATTER, `yes', ` include(`ngatest_src/ndim_NGA_SCATTER.src')') ifelse(m4_test_NGA_SCATTER_ACC, `yes', ` include(`ngatest_src/ndim_NGA_SCATTER_ACC.src')') ifelse(m4_test_NGA_GATHER, `yes', ` include(`ngatest_src/ndim_NGA_GATHER.src')') ifelse(m4_test_NGA_PERIODIC_PUT, `yes', ` include(`ngatest_src/ndim_NGA_PERIODIC_PUT.src')') ifelse(m4_test_NGA_PERIODIC_GET, `yes', ` include(`ngatest_src/ndim_NGA_PERIODIC_GET.src')') ifelse(m4_test_NGA_PERIODIC_ACC, `yes', ` include(`ngatest_src/ndim_NGA_PERIODIC_ACC.src')') ifelse(m4_test_NGA_FILL_PATCH, `yes', ` include(`ngatest_src/ndim_NGA_FILL_PATCH.src')') ifelse(m4_test_NGA_COPY_PATCH, `yes', ` include(`ngatest_src/ndim_NGA_COPY_PATCH.src')') ifelse(m4_test_NGA_SCALE_PATCH, `yes', ` include(`ngatest_src/ndim_NGA_SCALE_PATCH.src')') ifelse(m4_test_NGA_ADD_PATCH, `yes', ` include(`ngatest_src/ndim_NGA_ADD_PATCH.src')') ifelse(m4_test_NGA_DOT_PATCH, `yes', ` include(`ngatest_src/ndim_NGA_DOT_PATCH.src')')')') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_data_type') undefine(`m4_test_type') undefine(`m4_MT') undefine(`m4_conv') undefine(`m4_rand') undefine(`m4_dot') define(m4_data_type, m4_data_type_dbl) define(m4_test_type, m4_test_type_dbl) define(m4_MT, `MT_DBL') define(m4_conv, `dble($1)') define(m4_rand, `drand(0) * $1 * 2') define(m4_dot, `ddot') divert forloop(`m4_i', m4_from, m4_to, `divert(-1) undefine(`m4_n') undefine(`m4_ndim') define(m4_n, m4_n_val(m4_i)) define(m4_ndim, m4_i) divert ifelse(m4_test_GA_FILL, `yes', ` include(`ngatest_src/ndim_GA_FILL.src')') ifelse(m4_test_NGA_PUT, `yes', ` include(`ngatest_src/ndim_NGA_PUT.src')') ifelse(m4_test_NGA_GET, `yes', ` include(`ngatest_src/ndim_NGA_GET.src')') ifelse(m4_test_NGA_ACC, `yes', ` include(`ngatest_src/ndim_NGA_ACC.src')') ifelse(m4_test_NGA_SCATTER, `yes', ` include(`ngatest_src/ndim_NGA_SCATTER.src')') ifelse(m4_test_NGA_SCATTER_ACC, `yes', ` include(`ngatest_src/ndim_NGA_SCATTER_ACC.src')') ifelse(m4_test_NGA_GATHER, `yes', ` include(`ngatest_src/ndim_NGA_GATHER.src')') ifelse(m4_test_NGA_PERIODIC_PUT, `yes', ` include(`ngatest_src/ndim_NGA_PERIODIC_PUT.src')') ifelse(m4_test_NGA_PERIODIC_GET, `yes', ` include(`ngatest_src/ndim_NGA_PERIODIC_GET.src')') ifelse(m4_test_NGA_PERIODIC_ACC, `yes', ` include(`ngatest_src/ndim_NGA_PERIODIC_ACC.src')') ifelse(m4_test_NGA_FILL_PATCH, `yes', ` include(`ngatest_src/ndim_NGA_FILL_PATCH.src')') ifelse(m4_test_NGA_COPY_PATCH, `yes', ` include(`ngatest_src/ndim_NGA_COPY_PATCH.src')') ifelse(m4_test_NGA_SCALE_PATCH, `yes', ` include(`ngatest_src/ndim_NGA_SCALE_PATCH.src')') ifelse(m4_test_NGA_ADD_PATCH, `yes', ` include(`ngatest_src/ndim_NGA_ADD_PATCH.src')') ifelse(m4_test_NGA_DOT_PATCH, `yes', ` include(`ngatest_src/ndim_NGA_DOT_PATCH.src')')')') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_data_type') undefine(`m4_test_type') undefine(`m4_MT') undefine(`m4_conv') undefine(`m4_rand') undefine(`m4_dot') define(m4_data_type, m4_data_type_dcpl) define(m4_test_type, m4_test_type_dcpl) define(m4_MT, `MT_DCPL') define(m4_conv, `dcmplx(dble($1),dble(0))') define(m4_rand, `dcmplx(drand(0) * $1 * 2, $ -drand(0) * $1 * 2)') define(m4_dot, `zdot') divert forloop(`m4_i', m4_from, m4_to, `divert(-1) undefine(`m4_n') undefine(`m4_ndim') define(m4_n, m4_n_val(m4_i)) define(m4_ndim, m4_i) divert ifelse(m4_test_GA_FILL, `yes', ` include(`ngatest_src/ndim_GA_FILL.src')') ifelse(m4_test_NGA_PUT, `yes', ` include(`ngatest_src/ndim_NGA_PUT.src')') ifelse(m4_test_NGA_GET, `yes', ` include(`ngatest_src/ndim_NGA_GET.src')') ifelse(m4_test_NGA_ACC, `yes', ` include(`ngatest_src/ndim_NGA_ACC.src')') ifelse(m4_test_NGA_SCATTER, `yes', ` include(`ngatest_src/ndim_NGA_SCATTER.src')') ifelse(m4_test_NGA_SCATTER_ACC, `yes', ` include(`ngatest_src/ndim_NGA_SCATTER_ACC.src')') ifelse(m4_test_NGA_GATHER, `yes', ` include(`ngatest_src/ndim_NGA_GATHER.src')') ifelse(m4_test_NGA_PERIODIC_PUT, `yes', ` include(`ngatest_src/ndim_NGA_PERIODIC_PUT.src')') ifelse(m4_test_NGA_PERIODIC_GET, `yes', ` include(`ngatest_src/ndim_NGA_PERIODIC_GET.src')') ifelse(m4_test_NGA_PERIODIC_ACC, `yes', ` include(`ngatest_src/ndim_NGA_PERIODIC_ACC.src')') ifelse(m4_test_NGA_FILL_PATCH, `yes', ` include(`ngatest_src/ndim_NGA_FILL_PATCH.src')') ifelse(m4_test_NGA_COPY_PATCH, `yes', ` include(`ngatest_src/ndim_NGA_COPY_PATCH.src')') ifelse(m4_test_NGA_SCALE_PATCH, `yes', ` include(`ngatest_src/ndim_NGA_SCALE_PATCH.src')') ifelse(m4_test_NGA_ADD_PATCH, `yes', ` include(`ngatest_src/ndim_NGA_ADD_PATCH.src')') ifelse(m4_test_NGA_DOT_PATCH, `yes', ` include(`ngatest_src/ndim_NGA_DOT_PATCH.src')')')') c----------------------- c Utility functions divert(-1) # insert the utility program divert include(`ngatest_src/ndim_util_comm.src') ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_data_type') undefine(`m4_test_type') undefine(`m4_rand') define(m4_data_type, m4_data_type_int) define(m4_test_type, m4_test_type_int) define(m4_rand, `int(drand(0) * i * 2)') divert include(`ngatest_src/ndim_util.src')') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_data_type') undefine(`m4_test_type') undefine(`m4_rand') define(m4_data_type, m4_data_type_dbl) define(m4_test_type, m4_test_type_dbl) define(m4_rand, `drand(0) * i * 2') divert include(`ngatest_src/ndim_util.src')') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_data_type') undefine(`m4_test_type') undefine(`m4_rand') define(m4_data_type, m4_data_type_dcpl) define(m4_test_type, m4_test_type_dcpl) define(m4_rand, `dcmplx(drand(0) * i * 2, $ -drand(0) * i * 2)') divert include(`ngatest_src/ndim_util.src')') ga-5-3/global/testing/ngatest_src/ndim_NGA_DOT_PATCH.src0000640005473000001440000001727307113076312021611 0ustar d3n000users subroutine m4_func_NGA_DOT_PATCH(m4_test_type, m4_ndim) implicit none #include "mafdecls.fh" #include "global.fh" c integer n,m integer ndim parameter (n = m4_n) parameter (m = (m4_n**m4_ndim)/100) parameter (ndim = m4_ndim) m4_data_type a(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type b(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type c(substr(m4_array, 1, eval(m4_ndim*2-1))) integer dims(ndim) integer g_a, g_b integer chunk(ndim) integer i, total integer elems, count_elems integer loop integer lop(ndim), hip(ndim), hipl(ndim) integer alo(ndim), ahi(ndim) integer blo(ndim), bhi(ndim) integer tlo(ndim), thi(ndim) m4_data_type alpha, beta m4_data_type m4_util_dot_patch(m4_test_type) c for different array dimensions ifelse(m4_ndim,1,`',` m4_data_type d(substr(m4_array, 1, eval((m4_ndim-1)*2-1))) integer dndim parameter (dndim = m4_ndim-1) integer ddims(dndim),dlo(dndim),dhi(dndim),dtotal ') c integer nproc, me logical status integer repeat c nproc = ga_nnodes() me = ga_nodeid() c c---------------------- initialize the GA ----------------------- c initialize the chunk, dims, ld, and calculate the number c of elements total=1 do i = 1,ndim chunk(i) = 0 dims(i) = n total = total * dims(i) enddo c c*** Create global arrays if (.not. nga_create(m4_MT, ndim, dims, 'a', chunk, g_a)) $ call ga_error(' ga_create failed ',1) c c test the same distribution and different distribution seperately do repeat=1,2 if(repeat.eq.1) then status = ga_duplicate(g_a, g_b, 'a_duplicated') if(.not.ga_compare_distr(g_a, g_b)) $ call ga_error("g_b distribution different",0) c else do i = 1,ndim if(mod(i,2).eq.0) chunk(i) = n enddo if (.not. nga_create(m4_MT, ndim, dims, 'b', chunk, g_b)) $ call ga_error(' ga_create failed ',1) endif c call ga_sync() c c---------------------------NGA_DOT_PATCH ------------------------- c if(repeat.eq.1) then m4_print_info(m4_nga_dot_patch(m4_dot)) if(me.eq.0) print *, 'Testing with the same distributions' else if(me.eq.0) print *, 'Testing with different distributions' endif c c initialize GA call m4_util_init_array(m4_test_type)(a,total) call nga_distribution(g_a, me, lop, hip) elems = count_elems(lop, hip, ndim) if(elems.gt.0) call nga_put(g_a,lop,hip, $ a(substr(m4_lop_all, 1, eval(m4_ndim*7-1))),dims) call m4_util_init_array(m4_test_type)(b,total) call nga_distribution(g_b, me, lop, hip) elems = count_elems(lop, hip, ndim) if(elems.gt.0) call nga_put(g_b,lop,hip, $ b(substr(m4_lop_all, 1, eval(m4_ndim*7-1))),dims) c call ga_sync() do i = 1,ndim lop(i) = 1 hipl(i) = n-1 hip(i) = n enddo c c--- do loop=1, 10 call random_range(lop,hipl,alo,ahi,ndim) do i=1, ndim blo(i) = alo(i) + 1 bhi(i) = ahi(i) + 1 enddo if(me.eq.0)then call dot_range(loop,alo,ahi,ndim,blo,bhi,ndim) c$$$ print *, loop,'dot: [',(alo(i),':',ahi(i), i=1,ndim),']', c$$$ $ ',', '[',(blo(i),':',bhi(i), i=1,ndim),']' endif c alpha=m4_nga_dot_patch(m4_dot)(g_a,'n',alo,ahi,g_b,'n',blo,bhi) c c the result should be beta = m4_util_dot_patch(m4_test_type)(total, $ a,alo,ahi,ndim,dims,b,blo,bhi,ndim,dims) c if(ABS(beta-alpha).gt.1d-6*ABS(alpha)) then print *,me, ' error ', beta, alpha call ga_error('exiting ...',0) endif c enddo c call ga_sync() if(me.eq.0)then print *, ' without transpose OK' print *, ' ' call ffflush(6) endif c--- c prepare array a, make it transposed call m4_util_transpose(m4_test_type)(b,c,total,ndim,dims) c do loop=1, 10 call random_range(lop,hipl,alo,ahi,ndim) do i=1, ndim blo(i) = alo(i) + 1 bhi(i) = ahi(i) + 1 enddo if(me.eq.0)then call dot_range(loop,alo,ahi,ndim,blo,bhi,ndim) c$$$ print *, loop,'dot: [',(alo(i),':',ahi(i), i=1,ndim),']', c$$$ $ ',', '[',(blo(i),':',bhi(i), i=1,ndim),']' endif c alpha=m4_nga_dot_patch(m4_dot)(g_a,'n',alo,ahi,g_b,'t',blo,bhi) c c adjust index of array a do i=1,ndim tlo(i) = blo(ndim-i+1) thi(i) = bhi(ndim-i+1) enddo c c the result should be beta = m4_util_dot_patch(m4_test_type)(total, $ a,alo,ahi,ndim,dims,b,tlo,thi,ndim,dims) c if(ABS(beta-alpha).gt.1d-6*ABS(alpha)) then print *,me, ' error ', beta, alpha call ga_error('exiting ...',0) endif c enddo c call ga_sync() if(me.eq.0)then print *, ' with transpose OK' print *, ' ' call ffflush(6) endif c--------------------------- c status = ga_destroy(g_b) enddo c c----------------------------------------------------------------- changequote({,}) ifelse(m4_ndim,1,{},{ c testing copy on differet dimensions dtotal = 1 do i = 1,dndim ddims(i) = n dtotal = dtotal * ddims(i) enddo c if (.not. nga_create(m4_MT, dndim, ddims, 'd', chunk, g_b)) $ call ga_error(' ga_create failed ',1) c if(me.eq.0) $ print *, 'Testing dot patch on different dimensions' c c initialize GAs call m4_util_init_array(m4_test_type)(a,total) call nga_distribution(g_a, me, lop, hip) elems = count_elems(lop, hip, ndim) if(elems.gt.0) call nga_put(g_a,lop,hip, $ a(substr(m4_lop_all, 1, eval(m4_ndim*7-1))),dims) call m4_util_init_array(m4_test_type)(d,dtotal) call nga_distribution(g_b, me, dlo, dhi) elems = count_elems(dlo, dhi, dndim) if(elems.gt.0) call nga_put(g_b,dlo,dhi, $ d(substr(m4_dlo_all, 1, eval((m4_ndim-1)*7-1))),ddims) c call ga_sync() c c calculate the maximum range of g_a that can fit into g_b do i = 1,ndim lop(i) = 1 hip(i) = n enddo hip(dndim) = 1 c do loop=1, 10 call random_range(lop,hip,alo,ahi,ndim) c do i=1, dndim dlo(i) = alo(dndim-i+1) dhi(i) = ahi(dndim-i+1) enddo dlo(1) = alo(ndim) dhi(1) = ahi(ndim) c if(me.eq.0) then call dot_range(loop,alo,ahi,ndim,dlo,dhi,dndim) c$$$ print *,loop,'dot: [',(alo(i),':',ahi(i), i=1,ndim),']', c$$$ $ ',', '[',(dlo(i),':',dhi(i), i=1,dndim),']' endif c alpha=m4_nga_dot_patch(m4_dot)(g_a,'n',alo,ahi, $ g_b,'n',dlo,dhi) c c the result should be beta = m4_util_dot_patch(m4_test_type)(total, $ a,alo,ahi,ndim,dims,d,dlo,dhi,dndim,ddims) c if(ABS(beta-alpha).gt.1d-6*ABS(alpha)) then print *,me, ' error ', beta, alpha call ga_error('exiting ...',0) endif c enddo c call ga_sync() if(me.eq.0)then print *, ' dot patch on different dimensions: OK' print *, ' ' call ffflush(6) endif c status = ga_destroy(g_b) }) changequote(`,') c--- status = ga_destroy(g_a) end ga-5-3/global/testing/ngatest_src/ndim_NGA_SCALE_PATCH.src0000640005473000001440000000532111417351315022002 0ustar d3n000users subroutine m4_func_NGA_SCALE_PATCH(m4_test_type, m4_ndim) implicit none #include "mafdecls.fh" #include "global.fh" c integer n,m integer ndim parameter (n = m4_n) parameter (m = (m4_n**m4_ndim)/100) parameter (ndim = m4_ndim) m4_data_type a(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type b(substr(m4_array, 1, eval(m4_ndim*2-1))) integer dims(ndim) integer g_a integer chunk(ndim) integer i, total integer elems, count_elems integer loop integer lop(ndim), hip(ndim) integer lo(ndim), hi(ndim) double precision drand m4_data_type val integer nproc, me logical status c nproc = ga_nnodes() me = ga_nodeid() c c---------------------- initialize the GA ----------------------- c initialize the chunk, dims, ld, and calculate the number c of elements total=1 do i = 1,ndim chunk(i) = 0 dims(i) = n total = total * dims(i) enddo c c*** Create global arrays if (.not. nga_create(m4_MT, ndim, dims, 'a', chunk, g_a)) $ call ga_error(' ga_create failed ',1) c call ga_sync() c c--------------------------- NGA_SCALE_PATCH ------------------------- m4_print_info(nga_scale_patch) c c initialize GA call m4_util_init_array(m4_test_type)(a,total) call nga_distribution(g_a, me, lop, hip) elems = count_elems(lop, hip, ndim) if(elems.gt.0) call nga_put(g_a,lop,hip, $ a(substr(m4_lop_all, 1, eval(m4_ndim*7-1))),dims) c call ga_sync() do i = 1,ndim lop(i) = 1 hip(i) = n enddo c do loop=1, 10 call random_range(lop,hip,lo,hi,ndim) if(me.eq.0) $ call print_range(loop,lo,hi,ndim) c$$$ $ print *, loop,': scale [',(lo(i),':',hi(i), i=1,ndim),']' c the random number to scale val = m4_rand(1) c c keep a copy of the origian array call nga_get(g_a,lo,hi, $ a(substr(m4_lo_all, 1, eval(m4_ndim*6-1))),dims) c call nga_scale_patch(g_a,lo,hi,val) c call nga_get(g_a,lo,hi, $ b(substr(m4_lo_all, 1, eval(m4_ndim*6-1))),dims) c c check the result call m4_util_scale_patch(m4_test_type)(total, $ val,a,lo,hi,ndim,dims, $ m4_conv(0),b,lo,hi,ndim,dims) call m4_util_compare_patches(m4_test_type)(1d-10,total, $ a,lo,hi,ndim,dims,total,b,lo,hi,ndim,dims) c enddo c call ga_sync() if(me.eq.0)then print *, 'OK' print *, ' ' call ffflush(6) endif c--------------------------- c status= ga_destroy(g_a) end ga-5-3/global/testing/ngatest_src/ndim_NGA_COPY_PATCH.src0000640005473000001440000001777707113076312021746 0ustar d3n000users subroutine m4_func_NGA_COPY_PATCH(m4_test_type, m4_ndim) implicit none #include "mafdecls.fh" #include "global.fh" c integer n,m integer ndim parameter (n = m4_n) parameter (m = (m4_n**m4_ndim)/100) parameter (ndim = m4_ndim) m4_data_type a(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type b(substr(m4_array, 1, eval(m4_ndim*2-1))) integer dims(ndim) integer g_a, g_b integer chunk(ndim) integer i, total integer elems, count_elems integer loop integer lop(ndim), hip(ndim), hipl(ndim) integer alo(ndim), ahi(ndim) integer blo(ndim), bhi(ndim) integer tlo(ndim), thi(ndim) c for different array dimensions ifelse(m4_ndim,1,`',` m4_data_type d(substr(m4_array, 1, eval((m4_ndim-1)*2-1))) integer dndim parameter (dndim = m4_ndim-1) integer ddims(dndim),dlo(dndim),dhi(dndim),dtotal ') c integer nproc, me logical status integer repeat c nproc = ga_nnodes() me = ga_nodeid() c c---------------------- initialize the GA ----------------------- c initialize the chunk, dims, ld, and calculate the number c of elements total=1 do i = 1,ndim chunk(i) = 0 dims(i) = n total = total * dims(i) enddo c c*** Create global arrays if (.not. nga_create(m4_MT, ndim, dims, 'a', chunk, g_a)) $ call ga_error(' ga_create failed ',1) c c test the same distribution and different distribution seperately do repeat=1,2 if(repeat.eq.1) then status = ga_duplicate(g_a, g_b, 'a_duplicated') if(.not.ga_compare_distr(g_a, g_b)) $ call ga_error("g_b distribution different",0) c else do i = 1,ndim if(mod(i,2).eq.0) chunk(i) = n enddo if (.not. nga_create(m4_MT, ndim, dims, 'b', chunk, g_b)) $ call ga_error(' ga_create failed ',1) endif c call ga_sync() c c---------------------------NGA_COPY_PATCH ------------------------- c if(repeat.eq.1) then m4_print_info(nga_copy_patch) if(me.eq.0) print *, 'Testing with the same distributions' else if(me.eq.0) print *, 'Testing with different distributions' endif c c initialize GA call m4_util_init_array(m4_test_type)(a,total) call nga_distribution(g_a, me, lop, hip) elems = count_elems(lop, hip, ndim) if(elems.gt.0) call nga_put(g_a,lop,hip, $ a(substr(m4_lop_all, 1, eval(m4_ndim*7-1))),dims) c call ga_sync() do i = 1,ndim lop(i) = 1 hipl(i) = n-1 hip(i) = n enddo c c--- do loop=1, 10 call random_range(lop,hipl,alo,ahi,ndim) do i=1, ndim blo(i) = alo(i) + 1 bhi(i) = ahi(i) + 1 enddo if(me.eq.0)then call copy_range(loop,alo,ahi,ndim,blo,bhi,ndim) c$$$ print *, loop,': copy [',(alo(i),':',ahi(i), i=1,ndim),']', c$$$ $ '-->', '[',(blo(i),':',bhi(i), i=1,ndim),']' endif c c keep a copy of the origian array call nga_get(g_a,alo,ahi, $ a(substr(m4_alo_all, 1, eval(m4_ndim*7-1))),dims) c call nga_copy_patch('n', g_a, alo, ahi, g_b, blo, bhi) c call nga_get(g_b,blo,bhi, $ b(substr(m4_blo_all, 1, eval(m4_ndim*7-1))),dims) c call m4_util_compare_patches(m4_test_type)(0d0,total, $ a,alo,ahi,ndim,dims,total,b,blo,bhi,ndim,dims) enddo c call ga_sync() if(me.eq.0)then print *, ' standard copy patch: OK' print *, ' ' call ffflush(6) endif c--- do loop=1, 10 call random_range(lop,hipl,alo,ahi,ndim) do i=1, ndim blo(i) = alo(ndim-i+1) + 1 bhi(i) = ahi(ndim-i+1) + 1 enddo if(me.eq.0)then call copy_range(loop,alo,ahi,ndim,blo,bhi,ndim) c$$$ print *, loop,': copy [',(alo(i),':',ahi(i), i=1,ndim),']', c$$$ $ '-->', '[',(blo(i),':',bhi(i), i=1,ndim),']' endif c call nga_copy_patch('n', g_a, alo, ahi, g_b, blo, bhi) c call nga_get(g_b,blo,bhi, $ b(substr(m4_blo_all, 1, eval(m4_ndim*7-1))),dims) c call m4_util_compare_patches(m4_test_type)(0d0,total, $ a,alo,ahi,ndim,dims,total,b,blo,bhi,ndim,dims) enddo c call ga_sync() if(me.eq.0)then print *, ' reshaping without transpose: OK' print *, ' ' call ffflush(6) endif c--- c prepare array a, make it transposed call m4_util_transpose(m4_test_type)(a,b,total,ndim,dims) c do loop=1, 10 call random_range(lop,hipl,alo,ahi,ndim) do i=1, ndim blo(i) = alo(ndim-i+1) + 1 bhi(i) = ahi(ndim-i+1) + 1 enddo if(me.eq.0)then call copy_range(loop,alo,ahi,ndim,blo,bhi,ndim) c$$$ print *, loop,': copy [',(alo(i),':',ahi(i), i=1,ndim),']', c$$$ $ '-->', '[',(blo(i),':',bhi(i), i=1,ndim),']' endif c call nga_copy_patch('t', g_a, alo, ahi, g_b, blo, bhi) c call nga_get(g_b,blo,bhi, $ b(substr(m4_blo_all, 1, eval(m4_ndim*7-1))),dims) c c adjust index of array a do i=1,ndim tlo(i) = alo(ndim-i+1) thi(i) = ahi(ndim-i+1) enddo call m4_util_compare_patches(m4_test_type)(0d0,total, $ a,tlo,thi,ndim,dims,total,b,blo,bhi,ndim,dims) enddo c call ga_sync() if(me.eq.0)then print *, ' reshaping transposed: OK' print *, ' ' call ffflush(6) endif c--------------------------- c status = ga_destroy(g_b) enddo c c----------------------------------------------------------------- changequote({,}) ifelse(m4_ndim,1,{},{ c testing copy on differet dimensions dtotal = 1 do i = 1,dndim ddims(i) = n dtotal = dtotal * ddims(i) enddo c if (.not. nga_create(m4_MT, dndim, ddims, 'd', chunk, g_b)) $ call ga_error(' ga_create failed ',1) c if(me.eq.0) $ print *, 'Testing copy patch on different dimensions' c call ga_sync() c c initialize g_b call m4_util_init_array(m4_test_type)(d,dtotal) call nga_distribution(g_b, me, dlo, dhi) elems = count_elems(dlo, dhi, dndim) if(elems.gt.0) call nga_put(g_b,dlo,dhi, $ d(substr(m4_dlo_all, 1, eval((m4_ndim-1)*7-1))),ddims) c c c calculate the maximum range of g_a that can fit into g_b do i = 1,ndim lop(i) = 1 hip(i) = n enddo hip(dndim) = 1 c call ga_sync() c do loop=1, 10 call random_range(lop,hip,alo,ahi,ndim) c do i=1, dndim dlo(i) = alo(dndim-i+1) dhi(i) = ahi(dndim-i+1) enddo dlo(1) = alo(ndim) dhi(1) = ahi(ndim) c if(me.eq.0) then call copy_range(loop,alo,ahi,ndim,dlo,dhi,dndim) c$$$ print *, loop,': copy [',(alo(i),':',ahi(i),i=1,ndim), c$$$ $ ']','-->','[',(dlo(i),':',dhi(i), i=1,dndim),']' endif c call nga_copy_patch('n', g_a, alo, ahi, g_b, dlo, dhi) c call nga_get(g_b,dlo,dhi, $ d(substr(m4_dlo_all, 1, eval((m4_ndim-1)*7-1))),ddims) call nga_get(g_a,alo,ahi, $ a(substr(m4_alo_all, 1, eval(m4_ndim*7-1))),dims) c call m4_util_compare_patches(m4_test_type)(0d0,total, $ a,alo,ahi,ndim,dims,total,d,dlo,dhi,dndim,ddims) enddo c call ga_sync() if(me.eq.0)then print *, ' copy patches on different dimensions: OK' print *, ' ' call ffflush(6) endif c status = ga_destroy(g_b) }) changequote(`,') c--- status = ga_destroy(g_a) end ga-5-3/global/testing/ngatest_src/ndim_util_comm.src0000640005473000001440000001050311417351315021535 0ustar d3n000users subroutine random_range(lo,hi,lop,hip,ndim) implicit none integer lo(1),hi(1),lop(1),hip(1),ndim integer i, range, swap, val,iran double precision drand iran(range) = int(drand(0)*dble(range)) + 1 c iran(range) = range/2 do i = 1, ndim range = hi(i)-lo(i)+1 val = iran(range) lop(i) = lo(i) + val val = iran(range) hip(i) = hi(i) - val if(hip(i) .lt. lop(i))then swap =hip(i) hip(i)=lop(i) lop(i)=swap endif hip(i)=MIN(hip(i),hi(i)) lop(i)=MAX(lop(i),lo(i)) enddo end c c subroutine random_range_outbound(lo,hi,lop,hip,ndim) implicit none integer lo(1),hi(1),lop(1),hip(1),ndim integer i, range, val,iran double precision drand iran(range) = int(drand(0)*dble(range)) + 1 c iran(range) = range/2 do i = 1, ndim range = 2*(hi(i)-lo(i)+1) val = iran(range) lop(i) = lo(i) + val range = hi(i)-lo(i)+1 val = iran(range) hip(i) = lop(i) + range - val c hip(i) = hip(i)-hi(i) lop(i) = lop(i)-hi(i) enddo end c c integer function count_elems(lo,hi,ndim) implicit none integer lo(1),hi(1),ndim,elems,i elems=1 do i=1,ndim elems = elems*(hi(i)-lo(i)+1) enddo count_elems = elems end c c get the next available nindex in the range of lo and hi integer function next_index(ind,total,ndim,lo,hi,dims) implicit none integer ind,total,ndim,lo(ndim),hi(ndim),dims(ndim) integer i integer indx(m4_max_dim),nindex c nindex = ind + 1 200 call conv_1ton(ndim,dims,nindex,indx) c c test if indx(i) is in the range of lo(i) and hi(i) do i=1,ndim if((indx(i).lt.lo(i)).or.(indx(i).gt.hi(i))) then nindex = nindex + 1 if(nindex.gt.total) then next_index = 0 goto 300 else goto 200 endif endif enddo c next_index = nindex 300 end c testing if the indices are unique integer function unique(ind,ndim,m,n) implicit none integer ndim,m,n integer ind(ndim,m) integer i,j,marker c unique = 1 do i = 1, n-1 marker = 0 do j = 1, ndim if(ind(j,n).eq.ind(j,i)) marker = marker + 1 enddo c if(marker.eq.ndim) unique = 0 enddo c end c subroutine prnt_rng(me,lo,hi,ndim) implicit none integer me,ndim integer lo(ndim),hi(ndim) integer i c print *, me,': array section [',(lo(i),':',hi(i),i=1,ndim),']' c end c divide the space into equal size patches according to nproc c and calculate my lo and hi subroutine my_space(me,nproc,ndim,total,dims,lo,hi) implicit none integer me,nproc,ndim,total integer dims(ndim),lo(ndim),hi(ndim) integer div,lop,hip,i c div = total/nproc c lop = div * me + 1 c if(me.eq.(nproc-1)) then hip = total else hip = div * (me+1) endif c call conv_1ton(ndim,dims,lop,lo) call conv_1ton(ndim,dims,hip,hi) c c swap the indices if the lo if larger thant hi do i = 1,ndim if(lo(i).gt.hi(i)) then if(i.eq.ndim) call ga_error('bye',0) lo(i) = 1 lo(i+1) = lo(i+1) + 1 endif enddo end c convert the index from one dimension to n dimension subroutine conv_1ton(ndim,dims,ind1,indn) implicit none integer ndim integer dims(ndim) integer ind1,indn(ndim) integer range(m4_max_dim),remainder,i c remainder = ind1 c get the range of each dimension do i=1,ndim if(i.eq.1) then range(i) = dims(i) else range(i) = range(i-1) * dims(i) endif enddo c c get the indices in each dimension do i = ndim,1,-1 if(i.ne.1) then indn(i) = remainder/range(i-1) remainder = remainder - indn(i)*range(i-1) if(remainder.eq.0) then remainder = range(i-1) else indn(i) = indn(i) + 1 endif else indn(i) = remainder endif enddo c end ga-5-3/global/testing/ngatest_src/ndim_main.src0000640005473000001440000002706011400012704020463 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif #define MAXLOOP 100 program test implicit none #include "mafdecls.fh" #include "global.fh" integer stack, heap c c*** Intitialize a message passing library c #include "mp3.fh" c c*** Intitialize the GA package call ga_initialize() c if(ga_nodeid().eq.0)print *,ga_nnodes(),' nodes' c if(ga_uses_ma()) then stack = 200000 c stack = 100000 else stack = 60000 c stack = 20000 endif heap = stack if (.not. ma_init(MT_DBL, heap, stack)) $ call ga_error("ma init failed",heap+stack) c c c test GA_FILL ifelse(m4_test_GA_FILL, `yes', `forloop(`m4_i', m4_from, m4_to, `ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_int) divert call m4_func_GA_FILL(m4_test_type, m4_i)') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dbl) divert call m4_func_GA_FILL(m4_test_type, m4_i)') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dcpl) divert call m4_func_GA_FILL(m4_test_type, m4_i)') ')') c c test NGA_GET ifelse(m4_test_NGA_GET, `yes', `forloop(`m4_i', m4_from, m4_to, `ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_int) divert call m4_func_NGA_GET(m4_test_type, m4_i)') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dbl) divert call m4_func_NGA_GET(m4_test_type, m4_i)') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dcpl) divert call m4_func_NGA_GET(m4_test_type, m4_i)') ')') c c test NGA_PUT ifelse(m4_test_NGA_PUT, `yes', `forloop(`m4_i', m4_from, m4_to, `ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_int) divert call m4_func_NGA_PUT(m4_test_type, m4_i)') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dbl) divert call m4_func_NGA_PUT(m4_test_type, m4_i)') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dcpl) divert call m4_func_NGA_PUT(m4_test_type, m4_i)') ')') c c test NGA_ACC ifelse(m4_test_NGA_ACC, `yes', `forloop(`m4_i', m4_from, m4_to, `ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_int) divert call m4_func_NGA_ACC(m4_test_type, m4_i)') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dbl) divert call m4_func_NGA_ACC(m4_test_type, m4_i)') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dcpl) divert call m4_func_NGA_ACC(m4_test_type, m4_i)') ')') c c test NGA_PERIODIC_GET ifelse(m4_test_NGA_PERIODIC_GET, `yes', `forloop(`m4_i', m4_from, m4_to, `ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_int) divert call m4_func_NGA_PERIODIC_GET(m4_test_type, m4_i)') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dbl) divert call m4_func_NGA_PERIODIC_GET(m4_test_type, m4_i)') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dcpl) divert call m4_func_NGA_PERIODIC_GET(m4_test_type, m4_i)') ')') c c test NGA_PERIODIC_PUT ifelse(m4_test_NGA_PERIODIC_PUT, `yes', `forloop(`m4_i', m4_from, m4_to, `ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_int) divert call m4_func_NGA_PERIODIC_PUT(m4_test_type, m4_i)') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dbl) divert call m4_func_NGA_PERIODIC_PUT(m4_test_type, m4_i)') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dcpl) divert call m4_func_NGA_PERIODIC_PUT(m4_test_type, m4_i)') ')') c c test NGA_PERIODIC_ACC ifelse(m4_test_NGA_PERIODIC_ACC, `yes', `forloop(`m4_i', m4_from, m4_to, `ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_int) divert call m4_func_NGA_PERIODIC_ACC(m4_test_type, m4_i)') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dbl) divert call m4_func_NGA_PERIODIC_ACC(m4_test_type, m4_i)') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dcpl) divert call m4_func_NGA_PERIODIC_ACC(m4_test_type, m4_i)') ')') c c test NGA_FILL_PATCH ifelse(m4_test_NGA_FILL_PATCH, `yes', `forloop(`m4_i', m4_from, m4_to, `ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_int) divert call m4_func_NGA_FILL_PATCH(m4_test_type, m4_i)') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dbl) divert call m4_func_NGA_FILL_PATCH(m4_test_type, m4_i)') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dcpl) divert call m4_func_NGA_FILL_PATCH(m4_test_type, m4_i)') ')') c c test NGA_COPY_PATCH ifelse(m4_test_NGA_COPY_PATCH, `yes', `forloop(`m4_i', m4_from, m4_to, `ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_int) divert call m4_func_NGA_COPY_PATCH(m4_test_type, m4_i)') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dbl) divert call m4_func_NGA_COPY_PATCH(m4_test_type, m4_i)') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dcpl) divert call m4_func_NGA_COPY_PATCH(m4_test_type, m4_i)') ')') c c test NGA_SCALE_PATCH ifelse(m4_test_NGA_SCALE_PATCH, `yes', `forloop(`m4_i', m4_from, m4_to, `ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_int) divert call m4_func_NGA_SCALE_PATCH(m4_test_type, m4_i)') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dbl) divert call m4_func_NGA_SCALE_PATCH(m4_test_type, m4_i)') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dcpl) divert call m4_func_NGA_SCALE_PATCH(m4_test_type, m4_i)') ')') c c test NGA_ADD_PATCH ifelse(m4_test_NGA_ADD_PATCH, `yes', `forloop(`m4_i', m4_from, m4_to, `ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_int) divert call m4_func_NGA_ADD_PATCH(m4_test_type, m4_i)') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dbl) divert call m4_func_NGA_ADD_PATCH(m4_test_type, m4_i)') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dcpl) divert call m4_func_NGA_ADD_PATCH(m4_test_type, m4_i)') ')') c c test NGA_DOT_PATCH ifelse(m4_test_NGA_DOT_PATCH, `yes', `forloop(`m4_i', m4_from, m4_to, `ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_int) divert call m4_func_NGA_DOT_PATCH(m4_test_type, m4_i)') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dbl) divert call m4_func_NGA_DOT_PATCH(m4_test_type, m4_i)') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dcpl) divert call m4_func_NGA_DOT_PATCH(m4_test_type, m4_i)') ')') c c test NGA_SCATTER ifelse(m4_test_NGA_SCATTER, `yes', `forloop(`m4_i', m4_from, m4_to, `ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_int) divert call m4_func_NGA_SCATTER(m4_test_type, m4_i)') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dbl) divert call m4_func_NGA_SCATTER(m4_test_type, m4_i)') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dcpl) divert call m4_func_NGA_SCATTER(m4_test_type, m4_i)') ')') c c test NGA_SCATTER_ACC ifelse(m4_test_NGA_SCATTER_ACC, `yes', `forloop(`m4_i', m4_from, m4_to, `ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_int) divert call m4_func_NGA_SCATTER_ACC(m4_test_type, m4_i)') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dbl) divert call m4_func_NGA_SCATTER_ACC(m4_test_type, m4_i)') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dcpl) divert call m4_func_NGA_SCATTER_ACC(m4_test_type, m4_i)') ')') c c test NGA_GATHER ifelse(m4_test_NGA_GATHER, `yes', `forloop(`m4_i', m4_from, m4_to, `ifelse(m4_test_int, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_int) divert call m4_func_NGA_GATHER(m4_test_type, m4_i)') ifelse(m4_test_dbl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dbl) divert call m4_func_NGA_GATHER(m4_test_type, m4_i)') ifelse(m4_test_dcpl, `yes', `divert(-1) undefine(`m4_test_type') define(m4_test_type, m4_test_type_dcpl) divert call m4_func_NGA_GATHER(m4_test_type, m4_i)') ')') c if(ga_nodeid().eq.0) print *, 'All tests successful' c call ga_terminate() call MP_FINALIZE() end ga-5-3/global/testing/ngatest_src/ndim_NGA_PUT.src0000640005473000001440000000512111417351315020702 0ustar d3n000users subroutine m4_func_NGA_PUT(m4_test_type, m4_ndim) implicit none #include "mafdecls.fh" #include "global.fh" c integer n,m integer ndim parameter (n = m4_n) parameter (m = (m4_n**m4_ndim)/100) parameter (ndim = m4_ndim) m4_data_type a(substr(m4_array, 1, eval(m4_ndim*2-1))) m4_data_type b(substr(m4_array, 1, eval(m4_ndim*2-1))) integer lo(ndim),hi(ndim),dims(ndim),ld(ndim) integer g_a integer chunk(ndim) integer i, total, loop integer lop(ndim),hip(ndim) integer elems, count_elems integer nproc, me integer proc logical status c nproc = ga_nnodes() me = ga_nodeid() c c---------------------- initialize the GA ----------------------- c initialize the chunk, dims, ld, and calculate the number c of elements total=1 do i = 1,ndim chunk(i) = 0 dims(i) = n ld(i) = n total = total * dims(i) enddo c c*** Create global arrays if (.not. nga_create(m4_MT, ndim, dims, 'a', chunk, g_a)) $ call ga_error(' ga_create failed ',1) c call ga_sync() c c------------------------------- NGA_PUT ---------------------------- m4_print_info(nga_put) c proc = nproc-1 -me ! access other process memory call nga_distribution(g_a, proc, lo,hi) elems = count_elems(lo,hi,ndim) call m4_util_init_array(m4_test_type)(a,total) c call ga_sync() if(elems.gt.0) then call nga_put(g_a,lo,hi, $ a(substr(m4_lo_all, 1, eval(m4_ndim*6-1))),ld) do loop = 1, MAXLOOP call random_range(lo,hi,lop,hip,ndim) if(me.eq.0 .and. Mod(loop,10).eq.0)then call print_range(loop,lop,hip,ndim) endif call nga_put(g_a,lop,hip, $ a(substr(m4_lop_all, 1, eval(m4_ndim*7-1))),ld) enddo call nga_get(g_a,lo,hi, $ b(substr(m4_lo_all, 1, eval(m4_ndim*6-1))),ld) c call m4_util_compare_patches(m4_test_type)(0d0,total, $ a,lo,hi,ndim,dims,total,b,lo,hi,ndim,dims) else c so that the random_range can be call the same number of times c in other words, drand can generate the same number for the c collective operations do loop=1, MAXLOOP call random_range(lo,hi,lop,hip,ndim) enddo endif c call ga_sync() if(me.eq.0)then print *, 'OK' print *, ' ' call ffflush(6) endif c--------------------------- c status= ga_destroy(g_a) end ga-5-3/global/testing/g2test.F0000640005473000001440000005405511747606744015061 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c vector boxes lack arithmetic precision #ifdef CRAY_YMP # define THRESH 1d-10 #elif defined(FUJITSU) # define THRESH 1d-12 # define THRESHF 1e-5 #else # define THRESH 1d-13 # define THRESHF 1e-5 #endif #define MISMATCH(x,y) abs(x-y)/max(1d0,abs(x)).gt.THRESH #define MISMATCHF(x,y) abs(x-y)/max(1.0,abs(x)).gt.THRESHF #define USE_CORNERS #define PRINT_VAL c#define NEW_API c c Add some control over which tests are performed c #define TEST_1 #define TEST_2 #define TEST_3 #define TEST_4 c#define TEST_5 #define TEST_6 #define TEST_7 #define TEST_8 program main implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" integer heap, stack, fudge, ma_heap, me integer nmax, DIM, nwidth, MAXPROC, nloop parameter (nmax = 1000, DIM = 2, nwidth = 2, MAXPROC = 2000) parameter (nloop = 50) integer ndim, nproc, pdims(7), type, dcnt, g_a, maxval, nbhandle integer i, j, dims(7), width(7), map(2*nmax) integer lo(7), hi(7), ld(7) integer lo2(7), hi2(7), ld2(7) integer dims3(7), ld3(7), chunk(7) MA_ACCESS_INDEX_TYPE index3 integer a(nmax, nmax), b(nmax+2*nwidth,nmax+2*nwidth) double precision start,t1,t2,t3,t4,t5,tmp double precision t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18 double precision t19,t20,t21,t22,t23,t24,t25,t26,t27 logical status, safe_put, safe_get, has_data(0:MAXPROC-1) parameter (heap=1000*1000*4, fudge=1000, stack=1000*1000) logical corner_flag c c*** Intitialize a message passing library c #include "mp3.fh" #ifdef USE_CORNERS corner_flag = .true. #else corner_flag = .false. #endif c c*** Initialize GA c c There are 2 choices: ga_initialize or ga_initialize_ltd. c In the first case, there is no explicit limit on memory usage. c In the second, user can set limit (per processor) in bytes. c print* call ga_initialize() nproc = ga_nnodes() me = ga_nodeid() c we can also use GA_set_memory_limit BEFORE first ga_create call c ma_heap = heap + fudge call GA_set_memory_limit(util_mdtob(ma_heap)) c if(ga_nodeid().eq.0)then print *,' GA initialized ' call ffflush(6) endif c c*** Initialize the MA package c MA must be initialized before any global array is allocated c status = ma_init(MT_DCPL, stack, ma_heap) if (.not. status) call ga_error('ma_init failed',-1) c if(me.eq.0)then print *, 'using ', nproc, ' process(es)' call ffflush(6) endif c c Test ghost distributions c ndim = DIM c c Create irregular distribution on all nodes c call factor(nproc,ndim,pdims) dims(1) = pdims(1) * nmax dims(2) = pdims(2) * nmax maxval = 1 do i = 1, ndim maxval = dims(i)*maxval end do maxval = maxval - 1 c dcnt = 1 do i = 1, pdims(1) map(dcnt) = (i-1)*nmax + 1 dcnt = dcnt + 1 end do do i = 1, pdims(2) map(dcnt) = (i-1)*nmax + 1 dcnt = dcnt + 1 end do c do i = 1, ndim width(i) = nwidth chunk(i) = 1 if (pdims(i).gt.dims(i)) pdims(i) = dims(i) if (me.eq.0) then write(6,*) 'Value of pdims(',i,') is ',pdims(i) endif call ffflush(6) c do j = 1, pdims(i) c if (j.eq.1) then c map(dcnt) = 1 c else c map(dcnt) = ((j-1)*dims(i))/pdims(i) + 1 c endif c dcnt = dcnt + 1 c end do ld(i) = nmax end do if (me.eq.0) then do i = 1, dcnt - 1 write(6,'("map(",i2,") = ",i5)') i,map(i) call ffflush(6) end do endif type = MT_INT #ifdef NEW_API g_a = ga_create_handle(); call ga_set_data(g_a,ndim,dims,type) call ga_set_array_name(g_a,"test_array") call ga_set_irreg_distr(g_a,map,pdims) call ga_set_ghosts(g_a,width) status = ga_allocate(g_a) #else status = nga_create_ghosts_irreg (type, ndim, dims, width, + "test_array", map, pdims, g_a) c status = nga_create_ghosts(type, ndim, dims, width, c + "test_array", chunk, g_a) #endif if (status.and.me.eq.0) then write(6,*) '*' write(6,*) '* Global array creation was successful' write(6,*) '*' elseif (.not.status) then write(6,*) 'Global array creation failure on ',me endif c c Find processors that have data c call ga_sync do i = 0, nproc-1 call nga_distribution(g_a, i, lo, hi) has_data(i) = .true. do j = 1, ndim if (lo(j).eq.0.and.hi(j).eq.-1) has_data(i) = .false. end do call ffflush(6) call ga_sync end do c c initialize g_a c call ga_sync call nga_distribution(g_a, me, lo, hi) do i = 1, hi(1) - lo(1) + 1 do j = 1, hi(2) - lo(2) + 1 a(i,j) = (i + lo(1) - 2)*dims(1) + (j + lo(2) - 2) end do end do safe_put = .true. do i = 1, ndim if (hi(i).lt.lo(i)) safe_put = .false. end do if (has_data(me).and.safe_put) call nga_put(g_a, lo, hi, a, ld) c c get patch with ghost cells c do i = 1, ndim lo2(i) = lo(i) - width(i) hi2(i) = hi(i) + width(i) ld2(i) = ld(i) + 2*width(i) end do call ga_sync call ffflush(6) safe_get = .true. c do i = 1, ndim c if (hi2(i)-lo2(i).ge.dims(i)) safe_get = .false. c end do t19 = 0.0d00 t20 = 0.0d00 t21 = 0.0d00 do i = 1, nloop start = util_timer() call ga_ghost_barrier t19 = t19 + util_timer() - start start = util_timer() if (has_data(me).and.safe_get) + call nga_periodic_get(g_a, lo2, hi2, b, ld2) t20 = t20 + util_timer() - start start = util_timer() call ga_ghost_barrier t21 = t21 + util_timer() - start end do t19 = t19/dble(nloop) t20 = t20/dble(nloop) t21 = t21/dble(nloop) 102 format(14i5) if (me.eq.0) then write(6,*) '*' write(6,*) '* Performing nga_access_ghosts' write(6,*) '*' call ffflush(6) endif if (has_data(me)) call nga_access_ghosts(g_a, dims3, + index3, ld3) call ga_sync #ifdef TEST_1 if (me.eq.0) then write(6,*) write(6,*) 'Testing update 1' write(6,*) endif t1 = 0.0d00 t2 = 0.0d00 t3 = 0.0d00 do i = 1, nloop call zero_ghosts(int_mb(index3),ld3,a,hi(1)-lo(1)+1,width,dims3) start = util_timer() call ga_ghost_barrier t1 = t1 + util_timer() - start start = util_timer() call ga_update1_ghosts(g_a) t2 = t2 + util_timer() - start start = util_timer() call ga_ghost_barrier t3 = t3 + util_timer() - start end do t1 = t1/dble(nloop) t2 = t2/dble(nloop) t3 = t3/dble(nloop) #ifdef PRINT_VAL if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) #endif call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*width(1),has_data,width,corner_flag,1) call ga_sync #endif #ifdef TEST_2 if (me.eq.0) then write(6,*) write(6,*) 'Testing update 2' write(6,*) endif t4 = 0.0d00 t5 = 0.0d00 t6 = 0.0d00 do i = 1, nloop call zero_ghosts(int_mb(index3),ld3,a,hi(1)-lo(1)+1,width,dims3) start = util_timer() call ga_ghost_barrier t4 = t4 + util_timer() - start start = util_timer() status = ga_update2_ghosts(g_a) t5 = t5 + util_timer() - start start = util_timer() call ga_ghost_barrier t6 = t6 + util_timer() - start end do t4 = t4/dble(nloop) t5 = t5/dble(nloop) t6 = t6/dble(nloop) #ifdef PRINT_VAL if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) #endif call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*width(1),has_data,width,corner_flag,2) call ga_sync #endif #ifdef TEST_3 if (me.eq.0) then write(6,*) write(6,*) 'Testing update 3' write(6,*) endif t7 = 0.0d00 t8 = 0.0d00 t9 = 0.0d00 do i = 1, nloop call zero_ghosts(int_mb(index3),ld3,a,hi(1)-lo(1)+1,width,dims3) start = util_timer() call ga_ghost_barrier t7 = t7 + util_timer() - start start = util_timer() status = ga_update3_ghosts(g_a) t8 = t8 + util_timer() - start start = util_timer() call ga_ghost_barrier t9 = t9 + util_timer() - start end do t7 = t7/dble(nloop) t8 = t8/dble(nloop) t9 = t9/dble(nloop) #ifdef PRINT_VAL if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) #endif call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*width(1),has_data,width,corner_flag,3) call ga_sync #endif #ifdef TEST_4 if (me.eq.0) then write(6,*) write(6,*) 'Testing update 4' write(6,*) endif t10 = 0.0d00 t11 = 0.0d00 t12 = 0.0d00 call ga_sync call ga_set_ghost_corner_flag(g_a,corner_flag) c status = ga_set_update4_info(g_a) do i = 1, nloop call zero_ghosts(int_mb(index3),ld3,a,hi(1)-lo(1)+1,width,dims3) start = util_timer() call ga_ghost_barrier t10 = t10 + util_timer() - start start = util_timer() status = ga_update4_ghosts(g_a) t11 = t11 + util_timer() - start start = util_timer() call ga_ghost_barrier t12 = t12 + util_timer() - start end do t10 = t10/dble(nloop) t11 = t11/dble(nloop) t12 = t12/dble(nloop) #ifdef PRINT_VAL if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) #endif call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*width(1),has_data,width,corner_flag,4) call ga_sync #endif #ifdef TEST_5 if (me.eq.0) then write(6,*) write(6,*) 'Testing update 5' write(6,*) endif t13 = 0.0d00 t14 = 0.0d00 t15 = 0.0d00 call ga_sync call ga_set_ghost_corner_flag(g_a,corner_flag) c status = ga_set_update5_info(g_a) do i = 1, nloop call zero_ghosts(int_mb(index3),ld3,a,hi(1)-lo(1)+1,width,dims3) start = util_timer() call ga_ghost_barrier t13 = t13 + util_timer() - start start = util_timer() c write(6,*) 'got to ga_update5_ghosts' status = ga_update5_ghosts(g_a) c write(6,*) 'completed ga_update5_ghosts' t14 = t14 + util_timer() - start start = util_timer() call ga_ghost_barrier t15 = t15 + util_timer() - start end do t13 = t13/dble(nloop) t14 = t14/dble(nloop) t15 = t15/dble(nloop) #ifdef PRINT_VAL if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) #endif call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*width(1),has_data,width,corner_flag,5) call ga_sync #endif #ifdef TEST_6 if (me.eq.0) then write(6,*) write(6,*) 'Testing update 6' write(6,*) endif t16 = 0.0d00 t17 = 0.0d00 t18 = 0.0d00 call ga_sync do i = 1, nloop call zero_ghosts(int_mb(index3),ld3,a,hi(1)-lo(1)+1,width,dims3) start = util_timer() call ga_ghost_barrier t16 = t16 + util_timer() - start start = util_timer() status = ga_update6_ghosts(g_a) t17 = t17 + util_timer() - start start = util_timer() call ga_ghost_barrier t18 = t18 + util_timer() - start end do t16 = t16/dble(nloop) t17 = t17/dble(nloop) t18 = t18/dble(nloop) #ifdef PRINT_VAL if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) #endif call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*width(1),has_data,width,corner_flag,6) call ga_sync #endif #ifdef TEST_7 if (me.eq.0) then write(6,*) write(6,*) 'Testing update 7' write(6,*) endif t22 = 0.0d00 t23 = 0.0d00 t24 = 0.0d00 call ga_sync do i = 1, nloop call zero_ghosts(int_mb(index3),ld3,a,hi(1)-lo(1)+1,width,dims3) start = util_timer() call ga_ghost_barrier t22 = t22 + util_timer() - start start = util_timer() status = ga_update7_ghosts(g_a) t23 = t23 + util_timer() - start start = util_timer() call ga_ghost_barrier t24 = t24 + util_timer() - start end do t22 = t22/dble(nloop) t23 = t23/dble(nloop) t24 = t24/dble(nloop) #ifdef PRINT_VAL if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) #endif call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*width(1),has_data,width,corner_flag,7) call ga_sync #endif #ifdef TEST_8 if (me.eq.0) then write(6,*) write(6,*) 'Testing non-blocking update' write(6,*) endif t25 = 0.0d00 t26 = 0.0d00 t27 = 0.0d00 call ga_sync do i = 1, nloop call zero_ghosts(int_mb(index3),ld3,a,hi(1)-lo(1)+1,width,dims3) start = util_timer() call ga_ghost_barrier t25 = t25 + util_timer() - start start = util_timer() call nga_update_ghosts_nb(g_a,nbhandle) call ga_nbwait(nbhandle) t26 = t26 + util_timer() - start start = util_timer() call ga_ghost_barrier t27 = t27 + util_timer() - start end do t25 = t25/dble(nloop) t26 = t26/dble(nloop) t27 = t27/dble(nloop) #ifdef PRINT_VAL if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) #endif call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*width(1),has_data,width,corner_flag,8) call ga_sync #endif if (me.eq.0) then write(6,*) '*' write(6,*) '* Completed updates successfully' write(6,*) '*' call ffflush(6) endif call ga_sync c #ifdef TEST_1 tmp = t2 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,300) 1,tmp/dble(nproc) endif tmp = t1 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t3 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif #endif #ifdef TEST_2 tmp = t5 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,300) 2,tmp/dble(nproc) endif tmp = t4 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t6 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif #endif #ifdef TEST_3 tmp = t8 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,300) 3,tmp/dble(nproc) endif tmp = t7 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t9 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif #endif #ifdef TEST_4 tmp = t11 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,300) 4,tmp/dble(nproc) endif tmp = t10 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t12 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif #endif #ifdef TEST_5 tmp = t14 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,300) 5,tmp/dble(nproc) endif tmp = t13 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t15 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif #endif #ifdef TEST_6 tmp = t17 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,300) 6,tmp/dble(nproc) endif tmp = t16 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t18 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif #endif #ifdef TEST_7 tmp = t23 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,300) 7,tmp/dble(nproc) endif tmp = t22 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t24 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif #endif #ifdef TEST_8 tmp = t26 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,300) 8,tmp/dble(nproc) endif tmp = t25 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t27 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif #endif tmp = t20 call ga_dgop(6,tmp,1,'+') if (me.eq.0) then write(6,310) tmp/dble(nproc) endif tmp = t19 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,400) tmp/dble(nproc) endif tmp = t21 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,500) tmp/dble(nproc) endif 300 format('Average time for ga_update',i1,'_ghosts ',e12.3) 310 format('Average time for nga_periodic_get ',e12.3) 400 format(' Average time for prior sync ',e12.3) 500 format(' Average time for post sync ',e12.3) 127 continue c if(ga_nodeid().eq.0) print *,'All tests successful ' c c*** Tidy up the GA package c call ga_terminate() c c*** Tidy up after message-passing library c call MP_FINALIZE() c stop end c subroutine zero_ghosts(a,lda,b,ldb,w,dims) integer lda,ldb,w(*),dims(*) integer a(lda,*),b(ldb,*) integer i, j do j = 1, dims(2) do i = 1, dims(1) if ((i.gt.w(1).and.i.le.dims(1)-w(1)).and. + (j.gt.w(2).and.j.le.dims(2)-w(2))) then a(i,j) = b(i-w(1),j-w(2)) else a(i,j) = 0 endif end do end do return end c subroutine aprint(a,nrow,ncol,ld,has_data) #include "global.fh" integer ld integer a(ld,*) integer i, j, k, nproc logical has_data(0:1999) nproc = ga_nnodes() do k = 1, nproc call ga_sync if (k-1.eq.ga_nodeid().and.has_data(k-1)) then write(6,*) '*' write(6,*) '* Data on processor ',k-1 write(6,*) '*' do i = 1, min(nrow,12) write (6,102) (a(i,j), j = 1, min(ncol,12)) 102 format(14i5) end do endif call ffflush(6) enddo c return end c subroutine atest(a,nrow,ncol,ld,b,ld2,has_data,width, + check_corner, idx) #include "global.fh" integer ld, width(7) integer a(ld,*), b(ld2,*) integer i, j, nproc, me, idx logical has_data(0:1999), check_data logical check_corner nproc = ga_nnodes() me = ga_nodeid() check_data = .true. call ga_sync if (has_data(me)) then do i = 1, nrow do j = 1, ncol if (.not.check_corner.and.(.not. + ((i.le.width(1).and.j.le.width(2)).or. + (i.le.width(1).and.j.gt.ncol-width(2)).or. + (i.gt.nrow-width(1).and.j.le.width(2)).or. + (i.gt.nrow-width(1).and.j.gt.ncol-width(2))))) then if (a(i,j).ne.b(i,j)) check_data = .false. else if (check_corner) then if (a(i,j).ne.b(i,j)) check_data = .false. endif end do end do else check_data = .false. endif if (check_data) then i = 1 else i = 0 endif call ga_igop(1,i,1,'+') if (i.ne.nproc) then check_data = .false. else check_data = .true. endif if (check_data.and.me.eq.0) then write(6,*) '*' write(6,*) '* Data from nga_access_ghosts and' write(6,*) '* nga_periodic_get is the same on' write(6,100) idx 100 format( ' * all processors for update ',i1) write(6,*) '*' else if (.not.check_data) then write(6,*) '*' write(6,*) '* Data from nga_access_ghosts and' write(6,*) '* nga_periodic_get is NOT the same on' write(6,200) me,idx 200 format( ' * processor ',i2,' for update ',i1) write(6,*) '*' endif call ffflush(6) c return end c subroutine factor(p,ndim,dims) implicit none integer i,j,p,ndim,dims(7),imin,mdim integer ip,ifac,pmax,prime(1000) integer fac(1000) c i = 1 ip = p do i = 1, ndim dims(i) = 1 end do c c factor p completely c first, find all prime numbers less than or equal to p c pmax = 0 do i = 2, p do j = 1, pmax if (mod(i,prime(j)).eq.0) go to 100 end do pmax = pmax + 1 prime(pmax) = i 100 continue end do c c find all prime factors of p c ifac = 0 do i = 1, pmax 200 if (mod(ip,prime(i)).eq.0) then ifac = ifac + 1 fac(ifac) = prime(i) ip = ip/prime(i) go to 200 endif end do c c determine dimensions of processor grid c do i = ifac, 1, -1 c c find dimension with minimum value c imin = dims(1) mdim = 1 do j = 2, ndim if (dims(j).lt.imin) then imin = dims(j) mdim = j endif end do dims(mdim) = dims(mdim)*fac(i) end do c return end ga-5-3/global/testing/ffflush.F0000640005473000001440000000051411524546300015255 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c $Id: ffflush.F,v 1.2 2002-10-07 16:50:05 d3h325 Exp $ subroutine ffflush(unit) integer unit c #ifdef CRAY * if(unit.eq.6)then * call flush(101) * else * call flush(unit) * endif #elif HAVE_F77_FLUSH call F77_FLUSH(unit) #endif c end ga-5-3/global/testing/mtest.c0000640005473000001440000016711611642656560015040 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /*File: mtest.c Anthor: Limin Zhang purpose: testing those matrix functions developed for TAO/Global Array project. Date: 2/28/2002 */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_MATH_H # include #endif #include "ga.h" #include "globalp.h" #include "mp3.h" #define N 100 /* dimension of matrices */ #define BLOCK_SIZE 32 /* dimension of blocks (if used) */ #define OP_SHIFT_DIAGONAL 1 #define OP_SET_DIAGONAL 2 #define OP_ADD_DIAGONAL 3 #define OP_GET_DIAGONAL 4 #define OP_NORM1 5 #define OP_NORM_INFINITY 6 #define OP_MEDIAN 7 #define OP_MEDIAN_PATCH 8 #define OP_SCALE_ROWS 9 #define OP_SCALE_COLS 10 #define OP_ZERO_DIAGONAL 11 # define THRESH 1e-5 #define MISMATCHED(x,y) GA_ABS((x)-(y))>=THRESH /*#define BLOCK_CYCLIC*/ /*#define USE_SCALAPACK*/ #ifdef USE_SCALAPACK #define BLOCK_CYCLIC #endif /* Verify that the diagonal values of a matrix have the value val and that the off-diagonal values are off_val */ void check_diag(int g_a, void *val, void *off_val, int *chk) { int ai, bi; long al, bl; float af, bf; double ad, bd; int lo[2], hi[2]; int i, j, ii, jj, me, ld, ioff; int ndim, dims[2], type; void *ptr; DoubleComplex adc, bdc; SingleComplex afc, bfc; me = GA_Nodeid(); NGA_Inquire (g_a, &type, &ndim, dims); NGA_Distribution(g_a, me, lo, hi); NGA_Access(g_a, lo, hi, &ptr, &ld); *chk = 1; switch (type) { case C_INT: ai = *((int*)val); bi = *((int*)off_val); for (j=0; j<=hi[0]-lo[0]; j++) { jj = j + lo[0]; for (i=0; i<=hi[1]-lo[1]; i++) { ii = i + lo[1]; ioff = j*ld + i; if (ii == jj) { if (((int*)ptr)[ioff] != ai) *chk = 0; } else { if (((int*)ptr)[ioff] != bi) *chk = 0; } } } break; case C_DCPL: adc = *((DoubleComplex*)val); bdc = *((DoubleComplex*)off_val); for (j=0; j<=hi[0]-lo[0]; j++) { jj = j + lo[0]; for (i=0; i<=hi[1]-lo[1]; i++) { ii = i + lo[1]; ioff = j*ld + i; if (ii == jj) { if (((DoubleComplex*)ptr)[ioff].real != adc.real) *chk = 0; if (((DoubleComplex*)ptr)[ioff].imag != adc.imag) *chk = 0; } else { if (((DoubleComplex*)ptr)[ioff].real != bdc.real) *chk = 0; if (((DoubleComplex*)ptr)[ioff].imag != bdc.imag) *chk = 0; } } } break; case C_SCPL: afc = *((SingleComplex*)val); bfc = *((SingleComplex*)off_val); for (j=0; j<=hi[0]-lo[0]; j++) { jj = j + lo[0]; for (i=0; i<=hi[1]-lo[1]; i++) { ii = i + lo[1]; ioff = j*ld + i; if (ii == jj) { if (((SingleComplex*)ptr)[ioff].real != afc.real) *chk = 0; if (((SingleComplex*)ptr)[ioff].imag != afc.imag) *chk = 0; } else { if (((SingleComplex*)ptr)[ioff].real != bfc.real) *chk = 0; if (((SingleComplex*)ptr)[ioff].imag != bfc.imag) *chk = 0; } } } break; case C_DBL: ad = *((double*)val); bd = *((double*)off_val); for (j=0; j<=hi[0]-lo[0]; j++) { jj = j + lo[0]; for (i=0; i<=hi[1]-lo[1]; i++) { ii = i + lo[1]; ioff = j*ld + i; if (ii == jj) { if (((double*)ptr)[ioff] != ad) *chk = 0; } else { if (((double*)ptr)[ioff] != bd) *chk = 0; } } } break; case C_FLOAT: af = *((float*)val); bf = *((float*)off_val); for (j=0; j<=hi[0]-lo[0]; j++) { jj = j + lo[0]; for (i=0; i<=hi[1]-lo[1]; i++) { ii = i + lo[1]; ioff = j*ld + i; if (ii == jj) { if (((float*)ptr)[ioff] != af) *chk = 0; } else { if (((float*)ptr)[ioff] != bf) *chk = 0; } } } break; case C_LONG: al = *((long*)val); bl = *((long*)off_val); for (j=0; j<=hi[0]-lo[0]; j++) { jj = j + lo[0]; for (i=0; i<=hi[1]-lo[1]; i++) { ii = i + lo[1]; ioff = j*ld + i; if (ii == jj) { if (((long*)ptr)[ioff] != al) *chk = 0; } else { if (((long*)ptr)[ioff] != bl) *chk = 0; } } } break; default: GA_Error ("check diagonal:unknown data type.", type); } NGA_Release(g_a,lo,hi); GA_Igop(chk, 1, "*"); } /* Verify that values in vector match target value val */ void check_vector(int g_v, void *val, int *chk) { int ai; long al; float af; double ad; int lo, hi; int i, me, ld; int ndim, dims, type; void *ptr; DoubleComplex adc; SingleComplex afc; me = GA_Nodeid(); NGA_Inquire (g_v, &type, &ndim, &dims); if (ndim != 1) GA_Error("Array is wrong dimension in check_vector: ",ndim); NGA_Distribution(g_v, me, &lo, &hi); NGA_Access(g_v, &lo, &hi, &ptr, &ld); *chk = 1; switch (type) { case C_INT: ai = *((int*)val); for (i = 0; i < hi-lo + 1; i++) { if (((int*)ptr)[i] != ai) *chk = 0; } break; case C_DCPL: adc = *((DoubleComplex*)val); for (i = 0; i < hi-lo + 1; i++) { if (((DoubleComplex*)ptr)[i].real != adc.real) *chk = 0; if (((DoubleComplex*)ptr)[i].imag != adc.imag) *chk = 0; } break; case C_SCPL: afc = *((SingleComplex*)val); for (i = 0; i < hi-lo + 1; i++) { if (((SingleComplex*)ptr)[i].real != afc.real) *chk = 0; if (((SingleComplex*)ptr)[i].imag != afc.imag) *chk = 0; } break; case C_DBL: ad = *((double*)val); for (i = 0; i < hi-lo + 1; i++) { if (((double*)ptr)[i] != ad) *chk = 0; } break; case C_FLOAT: af = *((float*)val); for (i = 0; i < hi-lo + 1; i++) { if (((float*)ptr)[i] != af) *chk = 0; } break; case C_LONG: al = *((long*)val); for (i = 0; i < hi-lo + 1; i++) { if (((long*)ptr)[i] != al) *chk = 0; } break; default: GA_Error ("check vector:unknown data type.", type); } NGA_Release(g_v,&lo,&hi); GA_Igop(chk, 1, "*"); } void test_scale_cols (int g_a, int g_v) { int index[MAXDIM]; void *min=NULL, *max=NULL; int imin, imax; float fmin, fmax; long lmin, lmax; double dmin, dmax; DoubleComplex dcmin, dcmax; SingleComplex fcmin, fcmax; void *alpha=NULL, *beta=NULL; int ai = 1, bi = -1; long al = 1, bl = -1; float af = 1.0, bf = -1.0; double ad = 1.0, bd = -1.0; DoubleComplex adc = { 1.0, 0.0 }, bdc = { -1.0, 0.0}; SingleComplex afc = { 1.0, 0.0 }, bfc = { -1.0, 0.0}; int g_b, g_c; int me = GA_Nodeid (); void *val=NULL; int ival = -2; double dval = -2.0; float fval = -2.0; long lval = -2; DoubleComplex dcval = { -2.0, 0.0 }; SingleComplex fcval = { -2.0, 0.0 }; void *val2=NULL; int ival2 = 4; double dval2 = 4.0; float fval2 = 4.0; long lval2 = 4; DoubleComplex dcval2 = { 4.0, 0.0 }; SingleComplex fcval2 = { 4.0, 0.0 }; int type, ndim, dims[MAXDIM]; int vtype, vndim, vdims[MAXDIM]; int n=0; /* int lo[2], hi[2], col, i, size; int vlo, vhi; void *buf; */ NGA_Inquire (g_a, &type, &ndim, dims); NGA_Inquire (g_v, &vtype, &vndim, vdims); switch (type) { case C_INT: alpha = (void *) &ai; beta = (void *) &bi; break; case C_DCPL: alpha = (void *)&adc; beta = (void *)&bdc; break; case C_SCPL: alpha = (void *)&afc; beta = (void *)&bfc; break; case C_DBL: alpha = (void *) &ad; beta = (void *) &bd; break; case C_FLOAT: alpha = (void *) ⁡ beta =(void *) &bf; break; case C_LONG: alpha = (void *) &al; beta = (void *) &bl; break; default: GA_Error ("test_scale_cols:wrong data type.", type); } switch (type) { case C_INT: val = (void *)&ival; val2 = (void *)&ival2; break; case C_DCPL: val = (void *)&dcval; val2 = (void *)&dcval2; break; case C_SCPL: val = (void *)&fcval; val2 = (void *)&fcval2; break; case C_DBL: val = (void *)&dval; val2 = (void *)&dval2; break; case C_FLOAT: val = (void *)&fval; val2 = (void *)&fval2; break; case C_LONG: val = (void *)&lval; val2 = (void *)&lval2; break; default: GA_Error ("test_scale_cols:wrong data type.", type); } if (me == 0) printf ("Testing GA_Scale_cols..."); /* n = vdims[0]; printf("n=%d\n", n); size = GAsizeof (type); buf = malloc(n*size); if(me==0)printf("Initializing matrix A\n"); vlo = 0; vhi = n-1; col = 0; for(i=0; i #endif #if HAVE_STDLIB_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include # define sleep(x) Sleep(1000*(x)) #endif #if HAVE_MATH_H # include #endif #include "ga.h" #include "armci.h" #include "message.h" #include "mp3.h" #define SIZE 640 /**< must be >= biggest chunk + 128 */ #define CHUNK_NUM 28 #define TIMER armci_timer #define MALLOC_LOC 1 /**< use ARMCI_Malloc_local instead of plain malloc */ #ifndef GA_ABS # define GA_ABS(a) ((a)>0? (a): -(a)) #endif #define OP_GET 0 #define OP_PUT 1 #define OP_ACC 2 #define ENABLE_CLEANUP 0 static int CHECK_RESULT = 0; static int chunk[CHUNK_NUM] = { 1, 3, 4, 6, 9, 12, 16, 20, 24, 30, 40, 48, 52, 64, 78, 91, 104, 128, 142, 171, 210, 256, 300, 353, 400, 440, 476, 512 }; static int nproc = -1; static int me = -1; static int warn_accuracy = 0; static void fill_array(double *arr, int count, int which); static double time_op(int g_a, double *buf_, int chunk, int loop, int proc, int ndim, int op); static void test_1D(); static void test_2D(); int main(int argc, char **argv) { /* initialize GA */ MP_INIT(argc,argv); GA_Initialize_args(&argc, &argv); me = GA_Nodeid(); nproc = GA_Nnodes(); if (nproc < 2) { if (me == 0) { fprintf(stderr, "USAGE: 2 <= processes - got %d\n", nproc); } GA_Terminate(); MP_FINALIZE(); exit(0); } if (!me) { printf("\n Performance of Basic Blocking Communication Operations\n"); } GA_Sync(); /* test 1 dimension array */ if (!me) { printf("\n\t\t\tContiguous Data Transfer\n"); } test_1D(); /* test 2 dimension array */ if (!me) { printf("\n\t\t\tStrided Data Transfer\n"); } test_2D(); #if 0 if (me == 0) { if (warn_accuracy) { printf("\nWARNING: Your timer does not have sufficient accuracy for this test (%d)\n", warn_accuracy); } printf("\n\n------------ Now we test the same data transfer for correctness ----------\n"); fflush(stdout); } #endif GA_Terminate(); MP_FINALIZE(); return(0); } double time_op(int g_a, double *buf_, int chunk, int loop, int proc, int ndim, int op) { double start_time = 0; double stop_time = 0; double total_time = 0; int lo[2] = {-1,-1}; int hi[2] = {-1,-1}; int ld = -1; int i = 0; int bal = 0; double *buf = buf_; double alpha = 1; /* get the location within the g_a for the given proc */ NGA_Distribution(g_a, proc, lo, hi); /* determine how much data to grab based on the chunk and dimensionality */ if (ndim == 1) { hi[0] = lo[0] + chunk*chunk - 1; } else if (ndim == 2) { hi[0] = lo[0] + chunk - 1; hi[1] = lo[1] + chunk - 1; ld = chunk; } else { GA_Error("invalid ndim for time_op", ndim); } start_time = TIMER(); for (i=0; i Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c call ga_print(g_a) c c Check that it is indeed zero c lo(1) = 1 lo(2) = 1 hi(1) = n hi(2) = n call nga_get_field(g_a, lo, hi, 0, 4, breal, n) call nga_get_field(g_a, lo, hi, 4, 4, bimg, n) call ga_sync() do i = 1, n do j = 1, n if(breal(i,j).ne.0d0) then write(6,*) me,' real zero ', i, j, breal(i,j) call ffflush(6) c call ga_error('... exiting ',0) endif if(bimg(i,j).ne.0d0) then write(6,*) me,' img zero ', i, j, bimg(i,j) call ffflush(6) c call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_sync() c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format(/'> Checking disjoint put ... ') call ffflush(6) endif call ga_sync() c inc = (n-1)/4 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) c call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) lo(1) = ilo lo(2) = jlo hi(1) = ihi hi(2) = jhi call nga_put_field(g_a, lo, hi, 0, 4, areal(ilo, jlo), n) call nga_put_field(g_a, lo, hi, 4, 4, aimg(ilo, jlo), n) endif ij = ij + 1 enddo enddo call ga_sync() c c All nodes check all of a c c call ga_get(g_a, 1, n, 1, n, b, n) lo(1) = 1 lo(2) = 1 hi(1) = n hi(2) = n call nga_get_field(g_a, lo, hi, 0, 4, breal, n) call nga_get_field(g_a, lo, hi, 4, 4, bimg, n) c do i = 1, n do j = 1, n if (breal(i,j) .ne. areal(i,j)) then write(6,*) ' put(real) ', me, i, j, areal(i,j),breal(i,j) call ffflush(6) c call ga_error('... exiting ',0) endif if (bimg(i,j) .ne. aimg(i,j)) then write(6,*) ' put(img) ', me, i, j, aimg(i,j),bimg(i,j) call ffflush(6) c call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif call ga_sync() c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format(/'> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_sync() c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c c call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) lo(1) = ilo lo(2) = jlo hi(1) = ihi hi(2) = jhi call nga_get_field(g_a, lo, hi, 0, 4, breal(ilo, jlo), n) call nga_get_field(g_a, lo, hi, 4, 4, bimg(ilo, jlo), n) if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif do j = jlo, jhi do i = ilo, ihi if (breal(i,j) .ne. areal(i,j)) then write(6,*)'error:', i, j, breal(i,j), areal(i,j) call ga_error('... exiting ',0) endif if (bimg(i,j) .ne. aimg(i,j)) then write(6,*)'error:', i, j, bimg(i,j), aimg(i,j) call ga_error('... exiting ',0) endif enddo enddo c enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) call ffflush(6) endif call ga_sync() c c Check the ga_copy function c if (me .eq. 0) then write(6,*) write(6,*)'> Checking copy' write(6,*) call ffflush(6) endif call ga_sync() #ifndef MIRROR if(me.eq.0) then c call ga_put(g_a, 1, n, 1, n, a, n) lo(1) = 1 lo(2) = 1 hi(1) = n hi(2) = n call nga_put_field(g_a, lo, hi, 0, 4, areal, n) call nga_put_field(g_a, lo, hi, 4, 4, aimg, n) endif #else if(iproc.eq.0) then c call ga_put(g_a, 1, n, 1, n, a, n) lo(1) = 1 lo(2) = 1 hi(1) = n hi(2) = n call nga_put_field(g_a, lo, hi, 0, 4, areal, n) call nga_put_field(g_a, lo, hi, 4, 4, aimg, n) endif #endif call ga_copy(g_a, g_b) c call ga_get(g_b, 1, n, 1, n, b, n) lo(1) = 1 lo(2) = 1 hi(1) = n hi(2) = n call nga_get_field(g_b, lo, hi, 0, 4, breal, n) call nga_get_field(g_b, lo, hi, 4, 4, bimg, n) do j = 1, n do i = 1, n if (breal(i,j) .ne. areal(i,j)) then write(6,*) ' copy ', me, i, j, areal(i,j), breal(i,j) call ga_error('... exiting ',0) endif if (bimg(i,j) .ne. aimg(i,j)) then write(6,*) ' copy ', me, i, j, aimg(i,j), bimg(i,j) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy is OK ' write(6,*) endif c c Delete the global arrays c status = ga_destroy(g_b) status = ga_destroy(g_a) c end c----------------------------------------------------------------- subroutine check_complex() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n,m parameter (n = 60) parameter (m = 2*n) double precision areal(n,n), breal(n,n) double precision aimg(n,n), bimg(n,n) #ifdef MIRROR integer ndim, dims(2), chunk(2), p_mirror #else # ifdef NEW_API integer ndim, dims(2), chunk(2), p_mirror # endif #endif integer iv(m), jv(m) logical status integer g_a, g_b integer iran, i,j, loop,nloop,maxloop, ilo, ihi, jlo, jhi, itmp integer nproc, me, int, ij, inc, ii, jj, nnodes parameter (maxloop = 100) integer maxproc parameter (maxproc = 4096) double precision crap, real double precision nwords double complex x, sum1, sum2, factor integer lo(2), hi(2) integer lprocs, inode, iproc, lproc #ifdef USE_RESTRICTED integer num_rstrctd integer rstrctd_list(maxproc/2) #endif #ifdef BLOCK_CYCLIC integer block_size(2), proc_grid(2) #endif intrinsic int iran(i) = int(drand(0)*real(i)) + 1 c nproc = ga_nnodes() me = ga_nodeid() inode = ga_cluster_nodeid() lprocs = ga_cluster_nprocs(inode) nnodes = ga_cluster_nnodes() iproc = mod(me,lprocs) nloop = Min(maxloop,n) #ifdef USE_RESTRICTED num_rstrctd = nproc/2 if (num_rstrctd.eq.0) num_rstrctd = 1 do i = 1, num_rstrctd rstrctd_list(i) = (num_rstrctd/2) + i-1 end do #endif #ifdef BLOCK_CYCLIC block_size(1) = 32 block_size(2) = 32 #ifdef USE_SCALAPACK_DISTR if (mod(nproc,2).ne.0) + call ga_error("Available procs must be divisible by 2",0) proc_grid(1) = 2 proc_grid(2) = nproc/2 #endif #endif c c a() is a local copy of what the global array should start as c do j = 1, n do i = 1, n #ifndef MIRROR areal(i,j) = dble(i-1) aimg(i,j) = dble((j-1)*n) #else areal(i,j) = dble(inode) + dble(i-1) aimg(i,j) = 0.0d00 + dble((j-1)*n) #endif breal(i,j) = -1d0 bimg(i,j) = 1d0 enddo enddo c c Create type c c c Create a global array c c print *,ga_nodeid(), ' creating array' call ffflush(6) c call setdbg(1) #ifdef NEW_API ndim = 2 dims(1) = n dims(2) = n g_a = ga_create_handle() call ga_set_data(g_a,ndim,dims,MT_DCPL) call ga_set_array_name(g_a,'a') #ifdef USE_RESTRICTED call ga_set_restricted(g_a, rstrctd_list, num_rstrctd) #endif #ifdef BLOCK_CYCLIC #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_a,block_size,proc_grid) #else call ga_set_block_cyclic(g_a,block_size) #endif #endif # ifdef MIRROR p_mirror = ga_pgroup_get_mirror() call ga_set_pgroup(g_a,p_mirror) # endif status = ga_allocate(g_a) #else # ifndef MIRROR status = ga_create(MT_DCPL, n, n, 'a', 0, 0, g_a) # else ndim = 2 dims(1) = n dims(2) = n chunk(1) = 0 chunk(2) = 0 p_mirror = ga_pgroup_get_mirror() status = nga_create_config(MT_DCPL, ndim, dims, 'a', chunk, + p_mirror, g_a) # endif #endif if (.not. status) then write(6,*) ' ga_create failed' call ga_error('... exiting ',0) endif #ifdef NEW_API g_b = ga_create_handle() call ga_set_data(g_b,ndim,dims,MT_DCPL) call ga_set_array_name(g_b,'b') #ifdef BLOCK_CYCLIC #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_b,block_size,proc_grid) #else call ga_set_block_cyclic(g_b,block_size) #endif #endif # ifdef MIRROR call ga_set_pgroup(g_b,p_mirror) # endif if (.not.ga_allocate(g_b)) then #else # ifndef MIRROR if (.not. ga_create(MT_DCPL, n, n, 'b', 0, 0, g_b)) then # else if (.not. nga_create_config(MT_DCPL, ndim, dims, 'b', chunk, _ p_mirror, g_b)) then # endif #endif call ga_error('ga_create failed for second array ',0) endif #ifndef MIRROR call ga_distribution(g_a,me,ilo, ihi, jlo, jhi) #else lproc = me - ga_cluster_procid(inode,0) call ga_distribution(g_a, lproc, ilo, ihi, jlo, jhi) #endif call ga_sync() c c Zero the array c if (me .eq. 0) then write(6,21) 21 format('> Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c c Check that it is indeed zero c c call ga_get(g_a, 1, n, 1, n, b, n) lo(1) = 1 lo(2) = 1 hi(1) = n hi(2) = n call nga_get_field(g_a, lo, hi, 0, 8, breal, n) call nga_get_field(g_a, lo, hi, 8, 8, bimg, n) call ga_sync() do i = 1, n do j = 1, n if(breal(i,j).ne.(0d0,0d0)) then write(6,*) me,' real zero ', i, j, breal(i,j) call ffflush(6) call ga_error('... exiting ',0) endif if(bimg(i,j).ne.(0d0,0d0)) then write(6,*) me,' img zero ', i, j, bimg(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_sync() c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format('> Checking disjoint put ... ') call ffflush(6) endif call ga_sync() c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) c call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) lo(1) = ilo lo(2) = jlo hi(1) = ihi hi(2) = jhi call nga_put_field(g_a, lo, hi, 0, 8, areal(ilo,jlo),n) call nga_put_field(g_a, lo, hi, 8, 8, aimg(ilo,jlo),n) endif ij = ij + 1 enddo enddo call ga_sync() c call ga_print(g_a) c c All nodes check all of a c call util_qfill(n*n, 0.0d0, breal, 1) call util_qfill(n*n, 0d0, bimg, 1) c call ga_get(g_a, 1, n, 1, n, b, n) lo(1) = 1 lo(2) = 1 hi(1) = n hi(2) = n call nga_get_field(g_a, lo, hi, 0, 8, breal, n) call nga_get_field(g_a, lo, hi, 8, 8, bimg, n) c do i = 1, n do j = 1, n if (breal(i,j) .ne. areal(i,j)) then write(6,*) ' real put ', me, i, j, areal(i,j),breal(i,j) call ffflush(6) call ga_error('... exiting ',0) endif if (bimg(i,j) .ne. aimg(i,j)) then write(6,*) ' img put ', me, i, j, aimg(i,j),bimg(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif call ga_sync() c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format('> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_sync() c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c call util_qfill(n*n, 0.0d0, breal, 1) call util_qfill(n*n, 0d0, bimg, 1) c call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) lo(1) = ilo lo(2) = jlo hi(1) = ihi hi(2) = jhi call nga_get_field(g_a, lo, hi, 0, 8, breal(ilo,jlo),n) call nga_get_field(g_a, lo, hi, 8, 8, bimg(ilo,jlo),n) if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif do j = jlo, jhi do i = ilo, ihi if (breal(i,j) .ne. areal(i,j)) then write(6,*)'real error:', i, j, breal(i,j), areal(i,j) call ga_error('... exiting ',0) endif if (bimg(i,j) .ne. aimg(i,j)) then write(6,*)'img error:', i, j, bimg(i,j), aimg(i,j) call ga_error('... exiting ',0) endif enddo enddo c enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) call ffflush(6) endif call ga_sync() c c Check the ga_copy function c if (me .eq. 0) then write(6,*) write(6,*)'> Checking copy' write(6,*) call ffflush(6) endif call ga_sync() #ifndef MIRROR if(me.eq.0) then c call ga_put(g_a, 1, n, 1, n, a, n) lo(1) = 1 lo(2) = 1 hi(1) = n hi(2) = n call nga_put_field(g_a, lo, hi, 0, 8, areal, n) call nga_put_field(g_a, lo, hi, 8, 8, aimg, n) endif #else if(iproc.eq.0) then c call ga_put(g_a, 1, n, 1, n, a, n) lo(1) = 1 lo(2) = 1 hi(1) = n hi(2) = n call nga_put_field(g_a, lo, hi, 0, 8, areal, n) call nga_put_field(g_a, lo, hi, 8, 8, aimg, n) endif #endif call ga_copy(g_a, g_b) c call ga_get(g_b, 1, n, 1, n, b, n) lo(1) = 1 lo(2) = 1 hi(1) = n hi(2) = n call nga_get_field(g_b, lo, hi, 0, 8, breal, n) call nga_get_field(g_b, lo, hi, 8, 8, bimg, n) do j = 1, n do i = 1, n if (breal(i,j) .ne. areal(i,j)) then write(6,*) ' copy ', me, i, j, areal(i,j), breal(i,j) call ga_error('... exiting ',0) endif if (bimg(i,j) .ne. aimg(i,j)) then write(6,*) ' copy ', me, i, j, aimg(i,j), bimg(i,j) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy is OK ' write(6,*) endif c c Delete the global arrays c status = ga_destroy(g_b) status = ga_destroy(g_a) end subroutine util_qfill(n,val,a,ia) implicit none double precision a(*), val integer n, ia, i c c initialise double complex array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end ga-5-3/global/testing/pg2testmatmult.F0000640005473000001440000002701011364420655016622 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif #if (defined(CRAY) && !defined(__crayx1)) || defined(KSR) # define xgemm SGEMM # define ygemm CGEMM #else # define xgemm TEST_DGEMM # define ygemm TEST_ZGEMM #endif program ga_test c $Id: pg2testmatmult.F,v 1.3.6.1 2007-04-25 21:49:59 manoj Exp $ c c test ga_dgemm c compile with make FLD_REN="optimized blas" testmatmult.x c Note: - change nummax for large arrays c - turn off "verify" for large arrays due to memory c limitations, as verify=TRUE for large arrays produces c segfault, dumps core,or any crap. c c implicit none integer num_m,num_n,num_k,nummax,howmany,ntrans parameter (nummax=1024,howmany=2,ntrans=4) integer num1 parameter(num1=nummax) integer i,ii real*8 h0(num1*num1) integer g_c,g_b,g_a real*8 a real*8 t1,mf,avg_t(ntrans),avg_mf(ntrans) integer itime,ntimes,me integer nums_m(howmany),nums_n(howmany),nums_k(howmany) character*1 transa(ntrans),transb(ntrans),ta,tb real *8 tmpa(nummax,nummax), tmpb(nummax,nummax) real *8 tmpc(nummax,nummax) logical verify, status integer nproc, nprocs, proc_group(0:100), proclist(100) integer grp_id, grp_me, grp_nproc, ndim, dims(2) data transa/'n','t','n','t'/ data transb/'n','n','t','t'/ data nums_m/512,1024/ data nums_n/512,1024/ data nums_k/512,1024/ #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" #include "mp3.fh" if (.not.ma_init(MT_DBL,1,20000000)) then call ga_error('failed: ma_init(MT_DBL,1,20000000)',10) endif call ga_initialize() me = ga_nodeid() nproc = ga_nnodes() if(nproc .ne. 8) then write(*,*) 'nproc =', nproc call ga_error('failed: need exactly 8 processors',10) endif call ga_sync() proclist(1) = 0 proclist(2) = 1 proclist(3) = 2 proclist(4) = 3 nprocs = 4 proc_group(0) = ga_pgroup_create(proclist, nprocs) if (me.lt.4) then c get new proc ids for your default group grp_id = proc_group(0) grp_me = ga_pgroup_nodeid(grp_id) grp_nproc = ga_pgroup_nnodes(grp_id) write(*,*) 'GRP INFO =',me,grp_me,grp_nproc ii = 0 do i = 1, num1*num1 ii = ii + 1 if(ii.gt.num1) then ii = 0 endif h0(i) = ii enddo c c Compute times assuming 500 mflops and 5 second target time c c ntimes = max(3.0d0,5.0d0/(4.0d-9*num**3)) ntimes = 5 verify = .TRUE. ! to verify ga_dgemm c verify = .FALSE. ! to verify ga_dgemm do ii=1,howmany num_m = nums_m(ii) num_n = nums_n(ii) num_k = nums_k(ii) a = 0.5d0/(num_m*num_n) if(num_m.gt.nummax .OR. num_n.gt.nummax .OR. & num_k.gt.nummax) then call ga_error('Insufficient memory: check nummax', 0) endif c c ndim = 2 c Creating C array g_c = ga_create_handle() dims(1) = num_m dims(2) = num_n call ga_set_data(g_c,ndim,dims,MT_DBL) call ga_set_array_name(g_c,'c') call ga_set_pgroup(g_c,grp_id) status = ga_allocate(g_c) if (.not. status) then write(6,*) ' g_c ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c Creating B array g_b = ga_create_handle() dims(1) = num_k dims(2) = num_n call ga_set_data(g_b,ndim,dims,MT_DBL) call ga_set_array_name(g_b,'b') call ga_set_pgroup(g_b,grp_id) status = ga_allocate(g_b) if (.not. status) then write(6,*) ' g_b ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c Creating A array g_a = ga_create_handle() dims(1) = num_m dims(2) = num_k call ga_set_data(g_a,ndim,dims,MT_DBL) call ga_set_array_name(g_a,'a') call ga_set_pgroup(g_a,grp_id) status = ga_allocate(g_a) if (.not. status) then write(6,*) ' g_a ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c c Initialize matrices A and B c call load_ga_from_square(g_a,num_m,h0,num1) c call load_ga_from_square(g_b,num_m,h0,num1) c if(grp_me.eq.0) then call load_ga(g_a, h0, num_m, num_k) call load_ga(g_b, h0, num_k, num_n) endif call ga_zero(g_c) call ga_pgroup_sync(grp_id) if (ga_pgroup_nodeid(grp_id).eq.0) then write(*,*) ! for new line write(*,*) 'Matrix Multiplication C = A[', num_m, ',', . num_k, '] x B[', num_k, ',', num_n, ']' write(*,*) ! for new line call ffflush(6) endif do i = 1, ntrans avg_t(i) = 0.0d0 avg_mf(i) = 0.0d0 enddo do itime = 1, ntimes do i = 1, ntrans call ga_pgroup_sync(grp_id) ta = transa(i) tb = transb(i) t1 = util_timer() call ga_dgemm(ta,tb,num_m,num_n,num_k, & 1.0d0, g_a, g_b, 0.0d0, g_c) t1 = util_timer() - t1 if (grp_me.eq.0) then mf = 2d0*num_m*num_n*num_k/t1*1d-6/grp_nproc avg_t(i) = avg_t(i)+t1 avg_mf(i) = avg_mf(i) + mf write(6,200) ' Run#', itime, t1, mf, ta, tb call ffflush(6) if (verify .AND. itime.eq.1) then call verify_ga_dgemm(ta, tb,num_m, num_n,num_k, & 1.0d0, g_a,g_b,0.0d0,g_c,tmpa,tmpb,tmpc) endif endif enddo enddo if (ga_pgroup_nodeid(grp_id).eq.0) then write(*,*) ! for new line do i = 1, ntrans write(6,200) 'Average:',0,avg_t(i)/ntimes, . avg_mf(i)/ntimes,transa(i),transb(i) enddo if(verify) write(*,*) 'All ga_dgemms are verified...O.K.' write(*,*) ! for new line call ffflush(6) endif c c call ga_print(g_a) c call ga_print(g_b) c call ga_print(g_c) c if (.not.ga_destroy(g_c)) then call ga_error('failed: destroy g_c',20) endif if (.not.ga_destroy(g_b)) then call ga_error('failed: destroy g_b',30) endif if (.not.ga_destroy(g_a)) then call ga_error('failed: destroy g_a',40) endif enddo endif 200 format(a15, i2, ': ', e12.4, ' seconds ',f12.1, . ' mflops/proc ', 3a2) call ga_sync() call ga_terminate call MP_FINALIZE() c end c c----------------------------------------------------------------------- c Verify for correctness. Process 0 computes BLAS dgemm c locally. For larger arrays, disbale this test as memory c might not be sufficient c subroutine verify_ga_dgemm(xt1, xt2, num_m, num_n, num_k, $ alpha, g_a, g_b, beta, g_c, tmpa, tmpb, tmpc) implicit none character *1 xt1, xt2 integer num_m, num_n, num_k, g_a, g_b, g_c double precision alpha, beta real *8 tmpa(num_m,num_k), tmpb(num_k,num_n), tmpc(num_m,num_n) integer i,j,type,dim1, dim2 real *8 abs_value #include "mafdecls.fh" #include "testutil.fh" do i = 1,num_n do j = 1, num_m tmpc(j,i) = -1.0 tmpa(j,i) = -2.0 enddo enddo call ga_inquire(g_a, type, dim1, dim2) call ga_get(g_a, 1, dim1, 1, dim2, tmpa, dim1) call ga_inquire(g_b, type, dim1, dim2) call ga_get(g_b, 1, dim1, 1, dim2, tmpb, dim1) c compute dgemm sequentially call xgemm(xt1, xt2, num_m, num_n, num_k, alpha, & tmpa, num_m, tmpb, num_k, beta, tmpc, num_m) c after computing c locally, verify it with the values in g_c call ga_inquire(g_c, type, dim1, dim2) call ga_get(g_c, 1, dim1, 1, dim2, tmpa, dim1) do i = 1,num_n do j = 1, num_m abs_value = abs(tmpc(j,i)-tmpa(j,i)) if(abs_value .gt. 1.0 .OR. abs_value .lt. -1.0) then write(*,*) 'Values are = ', tmpc(j,i), tmpa(j,i) write(*,*) 'Values are = ', abs(tmpc(j,i)-tmpa(j,i)), . abs_value call ffflush(6) call ga_error('verify ga_dgemm failed', 0) endif enddo enddo return end c c----------------------------------------------------------------------- c called by process '0' (or your master process ) c subroutine load_ga(handle,f, dim1,dim2) implicit none integer handle integer dim1,dim2,i real*8 f(dim1,dim2) #include "mafdecls.fh" if(dim1.le.0)return if(dim2.le.0)return call ga_put(handle, 1, dim1, 1, dim2, f, dim1) return end c c----------------------------------------------------------------------- c must be called by all processors, if you need to fillup the c entire array c subroutine load_ga_from_square(handle,num,f,ndim) implicit none integer handle, memhandle integer num,ndim real*8 f(ndim,ndim) integer ilo, ihi, jlo, jhi, nx, ny, ibuff integer ga_nodeid, i1, i2, i, j, ix, jx #include "mafdecls.fh" call ga_distribution(handle, ga_nodeid(), ilo, ihi, jlo, jhi) if(ihi.le.0)return if(jhi.le.0)return c nx = ihi - ilo + 1 c ny = jhi - jlo + 1 do i = ilo,ihi,ndim do j = jlo,jhi,ndim call ga_put(handle,i,min(ihi,i+ndim),j,min(jhi,j+ndim), & f,ndim) enddo enddo return end c c----------------------------------------------------------------------- c must be called by all processors, if you need to fillup the c entire array c subroutine load_ga_from_triangle(handle,f,ndim) implicit none integer handle, memhandle real*8 f(*) integer ndim integer ilo, ihi, jlo, jhi, nx, ny, ibuff integer ga_nodeid, i1, i2, i, j, ix, jx #include "mafdecls.fh" call ga_distribution(handle, ga_nodeid(), ilo, ihi, jlo, jhi) if(ihi.le.0)return if(jhi.le.0)return nx = ihi - ilo + 1 ny = jhi - jlo + 1 if (.not.ma_alloc_get(MT_DBL,nx*ny,'flap',memhandle,ibuff)) then call ga_error('failed: allocate triangle',100) endif do i = 1,nx do j = 1,ny ix = i + ilo - 1 jx = j + jlo - 1 i1 = min(ix,jx) i2 = max(ix,jx) dbl_mb(ibuff + nx*(j-1) + (i-1) ) = f(i2*(i2-1)/2 + i1) enddo enddo call ga_put(handle,ilo,ihi,jlo,jhi, & dbl_mb(ibuff),nx) if (.not.ma_free_heap(memhandle)) then call ga_error('failed: free triangle',100) endif return end ga-5-3/global/testing/mmatrix.F0000640005473000001440000003307511364420655015317 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c vector boxes lack arithmetic precision #ifdef CRAY_YMP # define THRESH 1d-10 #elif defined(FUJITSU) # define THRESH 1d-12 # define THRESHF 1e-5 #else # define THRESH 1d-13 # define THRESHF 1e-5 #endif #define MISMATCH(x,y) abs(x-y)/max(1d0,abs(x)).gt.THRESH #define MISMATCHF(x,y) abs(x-y)/max(1.0,abs(x)).gt.THRESHF #define USE_FAST_MERGE 0 program main implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" integer heap, stack, fudge, ma_heap, me integer nmax, DIM, nwidth, MAXPROC, nloop parameter (nmax = 1025, DIM = 2, MAXPROC = 2000) parameter (nloop = 50) integer ndim, nprocs, tprocs, pdims(7), type, dcnt, maxval integer g_a, g_b, g_c, g_aa, g_bb, g_cc, iproc integer inode, tnodes, p_m, ix, iy, xinc, yinc integer i, j, k, l, ii, jj, dims(7), mdim, ndims(7) integer lo(7), hi(7), ld(7) integer lo2(7), hi2(7) integer lo3(7), hi3(7) integer lo4(7), hi4(7) integer lo5(7), hi5(7) integer chunk(7), imax, jmax, iloop, afail, bfail, cfail double precision a(nmax, nmax), b(nmax,nmax), c(nmax,nmax) double precision ta(nmax, nmax), tb(nmax,nmax),tc(nmax,nmax) double precision tat(nmax, nmax) double precision start,start1,t1,t2,t3,t4,t5,t6,t7 double precision alpha, beta #if USE_FAST_MERGE integer mblock,iblock #endif logical status, ltest parameter (heap=400*400*4, fudge=100, stack=400*400*4) c c*** Intitialize a message passing library c #include "mp3.fh" mdim = nmax c c*** Initialize GA c c There are 2 choices: ga_initialize or ga_initialize_ltd. c In the first case, there is no explicit limit on memory usage. c In the second, user can set limit (per processor) in bytes. c call ga_initialize() me = ga_nodeid() c we can also use GA_set_memory_limit BEFORE first ga_create call c ma_heap = heap + fudge c call GA_set_memory_limit(util_mdtob(ma_heap)) c if(ga_nodeid().eq.0)then print *,' GA initialized ' call ffflush(6) endif c c*** Initialize the MA package c MA must be initialized before any global array is allocated c status = ma_init(MT_DBL, stack, ma_heap) if (.not. status) call ga_error('ma_init failed',-1) c if(me.eq.0)then print *, 'using ', ga_nnodes(), ' process(es)' call ffflush(6) endif #if USE_FAST_MERGE if(me.eq.0)then print *,'*' print *,'* Using fast merge algorithm' print *,'*' endif #endif c c Test matrix multiply for mirrored arrays c ndim = 2 c c processor distribution on node c inode = ga_cluster_nodeid() nprocs = ga_cluster_nprocs(inode) tnodes = ga_cluster_nnodes() tprocs = ga_nnodes() iproc = mod(me,nprocs) call factor(tnodes,ndim,ndims) call factor(nprocs,ndim,pdims) c if (me.eq.0) then write(6,*) '*' write(6,*) '* Number of processors: ',tprocs write(6,*) '* Number of processors/node : ',nprocs write(6,*) '* Matrix dimension : ',mdim write(6,*) '*' endif c c create global arrays c do i = 1, ndim chunk(i) = 0 dims(i) = mdim lo(i) = 1 hi(i) = mdim ld(i) = nmax end do type = MT_DBL p_m = ga_pgroup_get_mirror() status = nga_create(type, ndim, dims,"aa", chunk, g_aa) if (status.and.me.eq.0) then write(6,*) '*' write(6,*) '* Global array AA creation was successful' write(6,*) '*' elseif (.not.status) then write(6,*) 'Global array creation failure on ',me endif status = nga_create(type, ndim, dims,"bb", chunk, g_bb) if (status.and.me.eq.0) then write(6,*) '*' write(6,*) '* Global array BB creation was successful' write(6,*) '*' elseif (.not.status) then write(6,*) 'Global array creation failure on ',me endif status = nga_create(type, ndim, dims,"cc", chunk, g_cc) if (status.and.me.eq.0) then write(6,*) '*' write(6,*) '* Global array CC creation was successful' write(6,*) '*' elseif (.not.status) then write(6,*) 'Global array creation failure on ',me endif #define MIRROR 1 #if MIRROR status = nga_create_config(type, ndim, dims,"a", chunk, p_m, g_a) if (status.and.me.eq.0) then write(6,*) '*' write(6,*) '* Global array A creation was successful' write(6,*) '*' elseif (.not.status) then write(6,*) 'Global array creation failure on ',me endif status = nga_create_config(type, ndim, dims,"b", chunk, p_m, g_b) if (status.and.me.eq.0) then write(6,*) '*' write(6,*) '* Global array B creation was successful' write(6,*) '*' elseif (.not.status) then write(6,*) 'Global array creation failure on ',me endif status = nga_create_config(type, ndim, dims,"c", chunk, p_m, g_c) if (status.and.me.eq.0) then write(6,*) '*' write(6,*) '* Global array C creation was successful' write(6,*) '*' elseif (.not.status) then write(6,*) 'Global array creation failure on ',me endif #endif c c initialize a and b matrices c k = 0 l = 7 do j = 1, mdim do i = 1, mdim k = k+1 k = mod(k,29) a(i,j) = dble(k) l = l + 1 l = mod(l,37) b(i,j) = dble(l) end do end do c c initialize global arrays c #if MIRROR if (iproc.eq.0) then call nga_put(g_a,lo,hi,a,ld) call nga_put(g_b,lo,hi,b,ld) endif call ga_zero(g_c) #endif if (me.eq.0) then call nga_put(g_aa,lo,hi,a,ld) call nga_put(g_bb,lo,hi,b,ld) endif call ga_zero(g_cc) if (me.eq.0) then write(6,*) '*' write(6,*) '* Initialized global arrays with data' write(6,*) '*' endif call ga_sync() c c work out which chunk of matrix c this node is responsible c for c t1 = 0.0d00 t2 = 0.0d00 t3 = 0.0d00 t4 = 0.0d00 t5 = 0.0d00 t6 = 0.0d00 t7 = 0.0d00 do iloop = 1, nloop call ga_zero(g_cc) #if MIRROR call ga_zero(g_c) start = util_timer() start1 = util_timer() #if !USE_FAST_MERGE ix = mod(inode,ndims(1)) iy = (inode - ix)/ndims(1) xinc = dims(1)/ndims(1) yinc = dims(2)/ndims(2) lo2(1) = ix*xinc+1 lo2(2) = iy*yinc+1 if (ix.ne.ndims(1)-1) then hi2(1) = (ix+1)*xinc else hi2(1) = dims(1) endif if (iy.ne.ndims(2)-1) then hi2(2) = (iy+1)*yinc else hi2(2) = dims(2) endif #else mblock = ga_num_mirrored_seg(g_c) do iblock = 1, mblock call ga_get_mirrored_block(g_c,iblock,lo2,hi2) #endif c c work out which chunk of matrix c this processor is responsible c for c ix = mod(iproc,pdims(1)) iy = (iproc - ix)/(hi2(1)-lo2(1)+1) xinc = (hi2(1)-lo2(1)+1)/pdims(1) yinc = (hi2(2)-lo2(2)+1)/pdims(2) lo3(1) = ix*xinc+lo2(1) lo3(2) = iy*yinc+lo2(2) if (ix.ne.pdims(1)-1) then hi3(1) = (ix+1)*xinc+lo2(1)-1 else hi3(1) = hi2(1) endif if (iy.ne.pdims(2)-1) then hi3(2) = (iy+1)*yinc+lo2(2)-1 else hi3(2) = hi2(2) endif t3 = t3 + util_timer() - start1 c start1 = util_timer() #define DGEMM2 1 #if (DGEMM2 && !USE_FAST_MERGE) lo4(1) = lo2(1) hi4(1) = hi2(1) lo4(2) = 1 hi4(2) = dims(2) lo5(1) = 1 hi5(1) = dims(1) lo5(2) = lo2(2) hi5(2) = hi2(2) c c perform matrix patch multiplies c alpha = 1.0 beta = 0.0 start1 = util_timer() call ga_matmul_patch('n','n',alpha,beta, + g_a,lo4(1),hi4(1),lo4(2),hi4(2), + g_b,lo5(1),hi5(1),lo5(2),hi5(2), + g_c,lo2(1),hi2(1),lo2(2),hi2(2)) t5 = t5 + util_timer() - start1 #else lo4(1) = lo3(1) hi4(1) = hi3(1) lo4(2) = 1 hi4(2) = dims(2) call nga_get(g_a,lo4,hi4,ta,ld) lo4(1) = 1 hi4(1) = dims(1) lo4(2) = lo3(2) hi4(2) = hi3(2) call nga_get(g_b,lo4,hi4,tb,ld) t4 = t4 + util_timer() - start1 start1 = util_timer() imax = hi3(1) - lo3(1) + 1 do i = 1, imax do j = 1, mdim tat(j,i) = ta(i,j) end do end do imax = hi3(1) - lo3(1) + 1 jmax = hi3(2) - lo3(2) + 1 do j = 1, jmax do i = 1, imax tc(i,j) = 0.0d00 do k = 1, mdim tc(i,j) = tc(i,j) + tat(k,i)*tb(k,j) end do end do end do t5 = t5 + util_timer() - start1 start1 = util_timer() call nga_put(g_c,lo3,hi3,tc,ld) t6 = t6 + util_timer() - start1 #endif #if USE_FAST_MERGE end do #endif call ga_mask_sync(.true.,.false.) start1 = util_timer() #if USE_FAST_MERGE call ga_fast_merge_mirrored(g_c) #else call ga_merge_mirrored(g_c) #endif t7 = t7 + util_timer() - start1 t1 = t1 + util_timer() - start #else do i = 1, mdim do j = 1, mdim tat(j,i) = a(i,j) end do end do do i = 1, mdim do j = 1, mdim c(i,j) = 0.0d00 do k = 1, mdim c(i,j) = c(i,j) + tat(k,i)*b(k,j) end do end do end do #endif c c do a conventional ga matrix multiply c alpha = 1.0 beta = 0.0 call ga_sync() start = util_timer() #define DGEMM 1 #if DGEMM call ga_dgemm('n','n',mdim,mdim,mdim,alpha,g_aa,g_bb,beta,g_cc) #else do i = 1, mdim do j = 1, mdim tat(j,i) = a(i,j) end do end do do i = 1, mdim do j = 1, mdim tc(i,j) = 0.0d00 do k = 1, mdim tc(i,j) = tc(i,j) + tat(k,i)*b(k,j) end do end do end do #endif t2 = t2 + util_timer() - start call ga_sync() c c check to see if matrix operations agree c #if MIRROR call nga_get(g_c,lo,hi,c,ld) #endif #if DGEMM call nga_get(g_cc,lo,hi,tc,ld) #endif call ga_sync() ltest = .true. afail = 0 bfail = 0 cfail = 0 do i = 1, mdim do j = 1, mdim if (c(i,j).ne.tc(i,j)) then cfail = cfail+1 ltest = .false. if (c(i,j).eq.0.0d00) then afail = afail + 1 endif if (tc(i,j).eq.0.0d00) then bfail = bfail + 1 endif end if end do end do if (ltest) then if (me.eq.0) write(6,*) 'Matrices agree for iteration ',iloop else if (me.eq.0) then write(6,*) 'Matrices disagree for iteration',iloop write(6,*) ' Total number of disagreements',cfail write(6,*) ' Total number of zeros in mirrored array',afail write(6,*) ' Total number of zeros in dgemm array',bfail endif endif end do c call ga_dgop(MT_DBL,t1,1,'+') call ga_dgop(MT_DBL,t2,1,'+') call ga_dgop(MT_DBL,t3,1,'+') call ga_dgop(MT_DBL,t4,1,'+') call ga_dgop(MT_DBL,t5,1,'+') call ga_dgop(MT_DBL,t6,1,'+') call ga_dgop(MT_DBL,t7,1,'+') t1 = t1/dble(nloop*tprocs) t2 = t2/dble(nloop*tprocs) t3 = t3/dble(nloop*tprocs) t4 = t4/dble(nloop*tprocs) t5 = t5/dble(nloop*tprocs) t6 = t6/dble(nloop*tprocs) t7 = t7/dble(nloop*tprocs) if (me.eq.0) then write(6,*) 'Elapsed time for Mirrored matrix multiply ',t1 write(6,*) ' Elapsed time for initial setup ',t3 write(6,*) ' Elapsed time for copy to buffers ',t4 write(6,*) ' Elapsed time for partial multiply ',t5 write(6,*) ' Elapsed time for copy from buffer',t6 write(6,*) ' Elapsed time for merge',t7 write(6,*) 'Elapsed time for Conventional matrix multiply ',t2 endif c c*** Tidy up the GA package c if(ga_nodeid().eq.0)print *,' All tests successful' c call ga_terminate() c c*** Tidy up after message-passing library c call MP_FINALIZE() c stop end c subroutine factor(p,ndim,dims) implicit none integer i,j,p,ndim,dims(7),imin,mdim integer ip,ifac,pmax,prime(1000) integer fac(1000) c i = 1 ip = p do i = 1, ndim dims(i) = 1 end do c c factor p completely c first, find all prime numbers less than or equal to p c pmax = 0 do i = 2, p do j = 1, pmax if (mod(i,prime(j)).eq.0) go to 100 end do pmax = pmax + 1 prime(pmax) = i 100 continue end do c c find all prime factors of p c ifac = 0 do i = 1, pmax 200 if (mod(ip,prime(i)).eq.0) then ifac = ifac + 1 fac(ifac) = prime(i) ip = ip/prime(i) go to 200 endif end do c c determine dimensions of processor grid c do i = ifac, 1, -1 c c find dimension with minimum value c imin = dims(1) mdim = 1 do j = 2, ndim if (dims(j).lt.imin) then imin = dims(j) mdim = j endif end do dims(mdim) = dims(mdim)*fac(i) end do c return end ga-5-3/global/testing/nb2test.F0000640005473000001440000003002711732114112015174 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c vector boxes lack arithmetic precision #ifdef CRAY_YMP # define THRESH 1d-10 #elif defined(FUJITSU) # define THRESH 1d-12 # define THRESHF 1e-5 #else # define THRESH 1d-13 # define THRESHF 1e-5 #endif #define MISMATCH(x,y) abs(x-y)/max(1d0,abs(x)).gt.THRESH #define MISMATCHF(x,y) abs(x-y)/max(1.0,abs(x)).gt.THRESHF program main implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c#include "tcgmsg.fh" integer heap, stack, fudge, ma_heap, me integer nmax, DIM, nwidth, MAXPROC, nloop parameter (nmax = 4, DIM = 2, nwidth = 2, MAXPROC = 2000) parameter (nloop = 1) integer ndim, nproc, pdims(7), type, dcnt, g_a, maxval integer i, j, k, dims(7), width(7), map(MAXPROC+2) integer lo(7), hi(7), ld(7) integer lo2(7), hi2(7), ld2(7) integer dims3(7), ld3(7), chunk(7) GA_ACCESS_INDEX_TYPE index3 integer a(nmax, nmax), b(nmax+2*nwidth,nmax+2*nwidth) integer handles(8),mask(7) double precision start,finish,start1,finish1,t1,t2,t3,t4,t5,tmp double precision t6,t7 logical status, safe_put, safe_get, has_data(0:MAXPROC-1) parameter (heap=60*60*4, fudge=100, stack=100*100) c c*** Intitialize a message passing library c #include "mp3.fh" c c*** Initialize GA c c There are 2 choices: ga_initialize or ga_initialize_ltd. c In the first case, there is no explicit limit on memory usage. c In the second, user can set limit (per processor) in bytes. c print* call ga_initialize() nproc = ga_nnodes() me = ga_nodeid() c we can also use GA_set_memory_limit BEFORE first ga_create call c ma_heap = heap + fudge call GA_set_memory_limit(util_mdtob(ma_heap)) c if(ga_nodeid().eq.0)then print *,' GA initialized ' call ffflush(6) endif c c*** Initialize the MA package c MA must be initialized before any global array is allocated c status = ma_init(MT_DCPL, stack, ma_heap) if (.not. status) call ga_error('ma_init failed',-1) c if(me.eq.0)then print *, 'using ', nproc, ' process(es)' call ffflush(6) endif c c Test ghost distributions c ndim = DIM c c Create irregular distribution on all nodes c call factor(nproc,ndim,pdims) dims(1) = pdims(1) * nmax dims(2) = pdims(2) * nmax maxval = 1 do i = 1, ndim maxval = dims(i)*maxval end do maxval = maxval - 1 c dcnt = 1 do i = 1, pdims(1) map(dcnt) = (i-1)*nmax + 1 dcnt = dcnt + 1 end do do i = 1, pdims(2) map(dcnt) = (i-1)*nmax + 1 dcnt = dcnt + 1 end do c do i = 1, ndim width(i) = nwidth chunk(i) = 1 if (pdims(i).gt.dims(i)) pdims(i) = dims(i) if (me.eq.0) then write(6,*) 'Value of pdims(',i,') is ',pdims(i) endif call ffflush(6) ld(i) = nmax end do if (me.eq.0) then do i = 1, dcnt - 1 write(6,'("map(",i2,") = ",i5)') i,map(i) call ffflush(6) end do endif type = MT_INT status = nga_create_ghosts_irreg (type, ndim, dims, width, + "test_array", map, pdims, g_a) if (status.and.me.eq.0) then write(6,*) '*' write(6,*) '* Global array creation was successful' write(6,*) '*' elseif (.not.status) then write(6,*) 'Global array creation failure on ',me endif c c Find processors that have data c call ga_sync do i = 0, nproc-1 call nga_distribution(g_a, i, lo, hi) has_data(i) = .true. do j = 1, ndim if (lo(j).eq.0.and.hi(j).eq.-1) has_data(i) = .false. end do if (me.eq.i) then write(6,*) '*' write(6,*) '* Distribution on processor ',i write(6,*) '*' write(6,110) lo(1), hi(1) write(6,110) lo(2), hi(2) 110 format(2i10) endif call ffflush(6) call ga_sync end do c c initialize g_a c call ga_sync call nga_distribution(g_a, me, lo, hi) do i = 1, hi(1) - lo(1) + 1 do j = 1, hi(2) - lo(2) + 1 a(i,j) = (i + lo(1) - 2)*dims(1) + (j + lo(2) - 2) + 1 end do end do safe_put = .true. do i = 1, ndim if (hi(i).lt.lo(i)) safe_put = .false. end do if (has_data(me).and.safe_put) call nga_put(g_a, lo, hi, a, ld) c c print out values of a c do k = 0, nproc-1 call ga_sync if (k.eq.me.and.has_data(me).and.maxval.lt.10000) then write(6,*) write(6,*) 'Initial data on processor ',k write(6,*) do i = 1, min(hi(1)-lo(1)+1,10) write (6,101) (a(i,j),j=1,min(hi(2)-lo(2)+1,10)) end do call ffflush(6) endif end do 101 format(10x,10i5) call ffflush(6) c go to 122 c update array using the non-blocking directional update c t1 = util_timer() k = 0 do i = -1, 1 mask(1) = i do j = -1, 1 mask(2) = j if (i.ne.0.or.j.ne.0) then k = k + 1 call nga_nbget_ghost_dir(g_a,mask,handles(k)) endif end do end do c c Wait c do i = 1, 8 call nga_nbwait(handles(i)) end do call ga_sync t1 = util_timer() - t1 if (me.eq.0) then write(6,*) '*' write(6,*) '* Completed update successfully' write(6,*) '*' call ffflush(6) endif c c get patch with ghost cells c do i = 1, ndim lo2(i) = lo(i) - width(i) hi2(i) = hi(i) + width(i) ld2(i) = ld(i) + 2*width(i) end do call ga_sync call ffflush(6) do i = 0, nproc-1 if (i.eq.me) then write(6,*) '*' write(6,*) 'ghost patch dimensions on processor ',i write(6,*) '*' do j = 1, ndim write(6,*) 'lo(',j,') = ',lo2(j) write(6,*) 'hi(',j,') = ',hi2(j) write(6,*) 'ld(',j,') = ',ld2(j) end do write(6,*) '*' endif call ga_sync call ffflush(6) end do safe_get = .true. t2 = 0.0d00 t3 = 0.0d00 do i = 1, nloop start = util_timer() call ga_sync start1 = util_timer() if (has_data(me).and.safe_get) + call nga_periodic_get(g_a, lo2, hi2, b, ld2) finish1 = util_timer() call ga_sync finish = util_timer() t2 = t2 + finish1 - start1 t3 = t3 + finish - start end do t2 = t2/dble(nloop) t3 = t3/dble(nloop) if (me.eq.0.and.maxval.lt.10000) then write(6,*) '*' write(6,*) '* Write out contents of local patch using' write(6,*) '* nga_periodic_get' write(6,*) '*' call ffflush(6) endif do k = 0, nproc-1 call ga_sync if (me.eq.k.and.has_data(me).and.maxval.lt.10000) then write(6,*) '*' write(6,*) '* Data on processor ',k write(6,*) '*' do i = 1, min(hi2(1)-lo2(1)+1,12) write (6,102) (b(i,j),j=1,min(hi2(2)-lo2(2)+1,12)) end do call ffflush(6) endif end do 102 format(14i5) if (me.eq.0) then write(6,*) '*' write(6,*) '* Performing nga_access_ghosts' write(6,*) '*' call ffflush(6) endif if (has_data(me)) call nga_access_ghosts(g_a, dims3, + index3, ld3) call ga_sync if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*nwidth,has_data) call ga_sync tmp = t1 call ga_dgop(1,tmp,1,'max') if (me.eq.0) then write(6,*) 'Maximum time for nga_update_ghosts ',tmp endif tmp = t1 call ga_dgop(2,tmp,1,'min') if (me.eq.0) then write(6,*) 'Minimum time for nga_update_ghosts ',tmp endif tmp = t1 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) 'Average time for nga_update_ghosts ',tmp/dble(nproc) endif tmp = t2 call ga_dgop(4,tmp,1,'max') if (me.eq.0) then write(6,*) 'Maximum time for nga_periodic_get ',tmp endif tmp = t2 call ga_dgop(5,tmp,1,'min') if (me.eq.0) then write(6,*) 'Minimum time for nga_periodic_get ',tmp endif tmp = t2 call ga_dgop(6,tmp,1,'+') if (me.eq.0) then write(6,*) 'Average time for nga_periodic_get ',tmp/dble(nproc) endif tmp = t3 call ga_dgop(4,tmp,1,'max') if (me.eq.0) then write(6,*) 'Maximum time for (sync)nga_periodic_get ',tmp endif tmp = t3 call ga_dgop(5,tmp,1,'min') if (me.eq.0) then write(6,*) 'Minimum time for (sync)nga_periodic_get ',tmp endif tmp = t3 call ga_dgop(6,tmp,1,'+') if (me.eq.0) then write(6,*) 'Average time for (sync)nga_periodic_get ', + tmp/dble(nproc) endif 127 continue c if(ga_nodeid().eq.0) print *,'All tests successful ' c c*** Tidy up the GA package c call ga_terminate() c c*** Tidy up after message-passing library c call MP_FINALIZE() c stop end c subroutine aprint(a,nrow,ncol,ld,has_data) #include "global.fh" integer ld integer a(ld,*) integer i, j, k, nproc logical has_data(0:1999) nproc = ga_nnodes() do k = 1, nproc call ga_sync if (k-1.eq.ga_nodeid().and.has_data(k-1)) then write(6,*) '*' write(6,*) '* Data on processor ',k-1 write(6,*) '*' do i = 1, min(nrow,12) write (6,102) (a(i,j), j = 1, min(ncol,12)) 102 format(14i5) end do endif call ffflush(6) enddo c return end c subroutine atest(a,nrow,ncol,ld,b,ld2,has_data) #include "global.fh" integer ld integer a(ld,*), b(ld2,*) integer i, j, k, nproc logical has_data(0:1999), check_data nproc = ga_nnodes() check_data = .true. do k = 1, nproc call ga_sync if (k-1.eq.ga_nodeid().and.has_data(k-1)) then do i = 1, nrow do j = 1, ncol if (a(i,j).ne.b(i,j)) check_data = .false. end do end do if (check_data) then write(6,*) '*' write(6,*) '* Data from nga_access_ghosts and' write(6,*) '* nga_periodic_get is the same on' write(6,*) '* processor ',k-1 write(6,*) '*' else write(6,*) '*' write(6,*) '* Data from nga_access_ghosts and' write(6,*) '* nga_periodic_get is NOT the same on' write(6,*) '* processor ',k-1 write(6,*) '*' endif endif call ffflush(6) enddo c return end c subroutine factor(p,ndim,dims) implicit none integer i,j,p,ndim,dims(7),imin,mdim integer ip,ifac,pmax,prime(1000) integer fac(1000) c i = 1 ip = p do i = 1, ndim dims(i) = 1 end do c c factor p completely c first, find all prime numbers less than or equal to p c pmax = 0 do i = 2, p do j = 1, pmax if (mod(i,prime(j)).eq.0) go to 100 end do pmax = pmax + 1 prime(pmax) = i 100 continue end do c c find all prime factors of p c ifac = 0 do i = 1, pmax 200 if (mod(ip,prime(i)).eq.0) then ifac = ifac + 1 fac(ifac) = prime(i) ip = ip/prime(i) go to 200 endif end do c c determine dimensions of processor grid c do i = ifac, 1, -1 c c find dimension with minimum value c imin = dims(1) mdim = 1 do j = 2, ndim if (dims(j).lt.imin) then imin = dims(j) mdim = j endif end do dims(mdim) = dims(mdim)*fac(i) end do c return end ga-5-3/global/testing/ipcreset0000640005473000001440000000104411300316052015240 0ustar d3n000users#!/bin/csh # clean System V IPC resources (semaphores and shared memory) owned by the user # if( `uname` == "Linux") then # Linux has non-standard interface to ipcrm # we use int() to filter out text decorations foreach s ( `ipcs -s | awk '{ if( int($2) != "0") { print $2 } }'` ) ipcrm sem $s >/dev/null end foreach m ( `ipcs -m | awk '{ if( int($2) != "0") { print $2 } }'` ) ipcrm shm $m >/dev/null end else ipcrm `ipcs | awk '{if (($1 == "m") || ($1 == "s")) print sprintf("-%s %s",$1,$2) }'` endif # show what is left ipcs ga-5-3/global/testing/simple_groups_comm.F0000640005473000001440000000477312115442660017537 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif program main implicit none #include "mpif.h" #include "global.fh" #include "ga-mpi.fh" #include "mafdecls.fh" integer me integer g_a logical status integer n,i,j parameter (n=4) integer proc_group(0:100),proclist(100),inode,nprocs integer ierr,comm double precision sbuf(1),rbuf(1) call mpi_init(ierr) call ga_initialize() me = ga_nodeid() status = ma_init(MT_DBL, 100000, 100000) if (.not. status) call ga_error('ma_init failed',-1) status = ma_set_auto_verify(.true.) status = ma_set_hard_fail(.true.) status = ma_set_error_print(.true.) inode = ga_cluster_nodeid() if (me.eq.0) then write(0,'(A,I4,A,I4,A)') 'there are ', ga_cluster_nnodes(), , ' nodes, node 0 has ', ga_cluster_nprocs(0), ' procs' call ffflush(6) endif call ga_sync() do i=0,ga_cluster_nnodes()-1 do j=0,ga_cluster_nprocs(i)-1 proclist(j+1)=ga_cluster_procid(i,j) enddo proc_group(i)=ga_pgroup_create(proclist,ga_cluster_nprocs(i)) enddo call ga_sync() do i = 0, ga_cluster_nnodes()-1 if (i.eq.inode) then write(0,'(I4,A,I4)') me,' joining group', proc_group(inode) call ga_pgroup_set_default(proc_group(inode)) status = ga_create(MT_DBL, n, n, 'a', 1, 1, g_a) if (.not. status) call ga_error('ga_create failed',-1) write(0,'(I4,A,I4,A,I4)') me,' Created array of group ', , proc_group(inode), ' as proc no. ',ga_nodeid() call ga_print_distribution(g_a) call ga_mpi_comm_pgroup_default(comm) if (comm.ne.mpi_comm_null) then sbuf(1) = ga_nodeid() c unless MPI was compiled with the same integer size, we can't c use mpi_allreduce on integer types -- that's why we use double call mpi_allreduce(sbuf, rbuf, 1, mpi_double_precision, , mpi_max, comm, ierr) write(0,'(I4,A,F8.3)') me, ' max nodeid is ', rbuf(1) if ((rbuf(1)+1).ne.ga_cluster_nprocs(i)) then call ga_error('mpi_allreduce failed',1) endif else write(0,'(A)') 'mpi_comm was null!' endif call ga_pgroup_set_default(ga_pgroup_get_world()) endif call ffflush(6) call ga_sync() enddo call ga_terminate() call mpi_finalize(ierr) end ga-5-3/global/testing/nga-util.m40000640005473000001440000000050307113076501015471 0ustar d3n000usersdivert(-1) # what kind of data type to test? define(m4_test_int, `yes') define(m4_test_dbl, `yes') define(m4_test_dcpl, `yes') # test dimension from which to which? define(m4_dim_from, 1) define(m4_dim_to, 7) # functions to test define(m4_test_GA_FILL, `yes') divert include(`ngatest_src/ngatest.def') ga-5-3/global/testing/nga-onesided.m40000640005473000001440000000076607113076501016321 0ustar d3n000usersdivert(-1) # what kind of data type to test? define(m4_test_int, `yes') define(m4_test_dbl, `yes') define(m4_test_dcpl, `yes') # test dimension from which to which? define(m4_dim_from, 1) define(m4_dim_to, 7) # functions to test define(m4_test_NGA_PUT, `yes') define(m4_test_NGA_GET, `yes') define(m4_test_NGA_ACC, `yes') define(m4_test_NGA_SCATTER, `yes') define(m4_test_NGA_SCATTER_ACC, `yes') define(m4_test_NGA_GATHER, `yes') divert include(`ngatest_src/ngatest.def') ga-5-3/global/testing/patch_enumf.F0000640005473000001440000001315611515377105016124 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif #define VERBOSE 0 #define NELEM 20 program main implicit none #include "global.fh" integer nproc, me #include "mp3.fh" call ga_initialize() nproc = ga_nnodes() me = ga_nodeid() #if VERBOSE if (0.eq.me) then write(6,*) 'TESTING INTEGER' endif #endif call test_int() #if VERBOSE if (0.eq.me) then write(6,*) 'TESTING REAL' endif #endif call test_real() #if VERBOSE if (0.eq.me) then write(6,*) 'TESTING DOUBLE PRECISION' endif #endif call test_dbl() #if VERBOSE if (0.eq.me) then write(6,*) 'TESTING COMPLEX' endif #endif call test_scpl() #if VERBOSE if (0.eq.me) then write(6,*) 'TESTING DOUBLE COMPLEX' endif #endif call test_dcpl() call ga_terminate() call MP_FINALIZE() end subroutine test_int() #include "global.fh" #include "mafdecls.fh" integer g_a integer lo(1), dims(1), chunk(1), ld(1) logical rc integer buf(NELEM) integer get(NELEM) integer start integer inc start = 1 inc = 1 lo(1) = 1 dims(1) = NELEM chunk(1) = 0 rc = nga_create(MT_INT, 1, dims, "g_a", chunk, g_a) if (.not. rc) then write(6,*) 'nga_create failed' endif call ga_patch_enum(g_a, 1, NELEM, start, inc) call nga_get(g_a, lo, dims, get, ld) do i = 1, NELEM buf(i) = start + (i-1)*inc end do do i = 1, NELEM if (buf(i).ne.get(i)) then write(6,*) 'at',i,'value mismatch',buf(i),'.ne.',get(i) call ga_error('error', i) endif end do rc = ga_destroy(g_a) if (.not. rc) then write(6,*) 'ga_destroy failed' endif end subroutine test_real() #include "global.fh" #include "mafdecls.fh" integer g_a integer lo(1), dims(1), chunk(1), ld(1) logical rc real buf(NELEM) real get(NELEM) real start real inc start = 1 inc = 1 lo(1) = 1 dims(1) = NELEM chunk(1) = 0 rc = nga_create(MT_REAL, 1, dims, "g_a", chunk, g_a) if (.not. rc) then write(6,*) 'nga_create failed' endif call ga_patch_enum(g_a, 1, NELEM, start, inc) call nga_get(g_a, lo, dims, get, ld) do i = 1, NELEM buf(i) = start + (i-1)*inc end do do i = 1, NELEM if (buf(i).ne.get(i)) then write(6,*) 'at',i,'value mismatch',buf(i),'.ne.',get(i) call ga_error('error', i) endif end do rc = ga_destroy(g_a) if (.not. rc) then write(6,*) 'ga_destroy failed' endif end subroutine test_dbl() #include "global.fh" #include "mafdecls.fh" integer g_a integer lo(1), dims(1), chunk(1), ld(1) logical rc double precision buf(NELEM) double precision get(NELEM) double precision start double precision inc start = 1 inc = 1 lo(1) = 1 dims(1) = NELEM chunk(1) = 0 rc = nga_create(MT_DBL, 1, dims, "g_a", chunk, g_a) if (.not. rc) then write(6,*) 'nga_create failed' endif call ga_patch_enum(g_a, 1, NELEM, start, inc) call nga_get(g_a, lo, dims, get, ld) do i = 1, NELEM buf(i) = start + (i-1)*inc end do do i = 1, NELEM if (buf(i).ne.get(i)) then write(6,*) 'at',i,'value mismatch',buf(i),'.ne.',get(i) call ga_error('error', i) endif end do rc = ga_destroy(g_a) if (.not. rc) then write(6,*) 'ga_destroy failed' endif end subroutine test_scpl() #include "global.fh" #include "mafdecls.fh" integer g_a integer lo(1), dims(1), chunk(1), ld(1) logical rc complex buf(NELEM) complex get(NELEM) complex start complex inc start = cmplx(1,1) inc = cmplx(1,1) lo(1) = 1 dims(1) = NELEM chunk(1) = 0 rc = nga_create(MT_SCPL, 1, dims, "g_a", chunk, g_a) if (.not. rc) then write(6,*) 'nga_create failed' endif call ga_patch_enum(g_a, 1, NELEM, start, inc) call nga_get(g_a, lo, dims, get, ld) do i = 1, NELEM buf(i) = start + (i-1)*inc end do do i = 1, NELEM if (buf(i).ne.get(i)) then write(6,*) 'at',i,'value mismatch',buf(i),'.ne.',get(i) call ga_error('error', i) endif end do rc = ga_destroy(g_a) if (.not. rc) then write(6,*) 'ga_destroy failed' endif end subroutine test_dcpl() #include "global.fh" #include "mafdecls.fh" integer g_a integer lo(1), dims(1), chunk(1), ld(1) logical rc double complex buf(NELEM) double complex get(NELEM) double complex start double complex inc start = dcmplx(1,1) inc = dcmplx(1,1) lo(1) = 1 dims(1) = NELEM chunk(1) = 0 rc = nga_create(MT_DCPL, 1, dims, "g_a", chunk, g_a) if (.not. rc) then write(6,*) 'nga_create failed' endif call ga_patch_enum(g_a, 1, NELEM, start, inc) call nga_get(g_a, lo, dims, get, ld) do i = 1, NELEM buf(i) = start + (i-1)*inc end do do i = 1, NELEM if (buf(i).ne.get(i)) then write(6,*) 'at',i,'value mismatch',buf(i),'.ne.',get(i) call ga_error('error', i) endif end do rc = ga_destroy(g_a) if (.not. rc) then write(6,*) 'ga_destroy failed' endif end ga-5-3/global/testing/mir_perf1.F0000640005473000001440000003767712105004737015527 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c $Id: mir_perf1.F,v 1.1 2003-02-26 15:33:38 d3g293 Exp $ c------------------------------------------------------------------------ c Program perf.x is used to test performance of GA put, get, accumulate | c It has to be executed on four processors. | c remote operations access data on processes 1,2,3 in the round-robin way| c------------------------------------------------------------------------ c #define SLEEP sleep program perf implicit none #include "mafdecls.fh" #include "global.fh" integer heap c c*** Intitialize a message passing library c #include "mp3.fh" c c*** Intitialize the GA package call ga_initialize() if(ga_nnodes().ne.4 .and. ga_nodeid().eq.0) $ call ga_error('Program requires 4 GA processes',ga_nnodes()) c c*** Initialize the MA package heap = 900000 if (.not. ma_init(MT_DBL, heap,heap)) $ call ga_error('ma init failed',2*heap) c c call test2D() call test1D() call ga_terminate() c call MP_FINALIZE() end subroutine test1D() implicit none #include "mafdecls.fh" #include "global.fh" c c integer n, nn, num_chunks parameter (n = 1024*1024, nn = n/4, num_chunks=16) double precision buf(nn) c integer g_a integer ilo, ihi, jlo, jhi integer nproc, me, loop, p_handle integer ndim, dims(2), chunks(2) integer chunk(num_chunks) data chunk /1,9,16,81,256,576,900,2304,4096,8281, $ 16384,29241,65536,124609,193600,262144/ c nproc = ga_nnodes() me = ga_nodeid() p_handle = ga_pgroup_get_mirror() ndim = 2 dims(1) = n dims(2) = 1 chunks(1) = 0 chunks(2) = 0 c c*** Create global array if (.not. nga_create_config(MT_DBL, ndim, dims, 'a', chunks, + p_handle, g_a)) $ call ga_error(' ga_create failed ',1) c do loop=1,nn buf(loop) = .01d0 enddo call ga_zero(g_a) c if (me .eq. 0) then write(*,*)' ' write(*,*)' ' write(*,*)' ' write(*,55)n 55 format(' Performance of GA get, put & acc', $ ' for 1-dimensional sections of array[',i7,']') print *,' ' endif c c do loop=1,2 c c*** local ops c call ga_distribution(g_a, me, ilo, ihi, jlo, jhi) call TestPutGetAcc1 & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo, jhi, .true.) c c*** remote ops c call TestPutGetAcc1 & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo, jhi,.false.) c enddo end subroutine TestPutGetAcc1 & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo,jhi, local) implicit none #include "global.fh" #include "testutil.fh" c integer num_chunks, chunk(num_chunks) integer n, ilo, ihi, jlo,jhi,g_a integer inode, iproc, zero double precision buf(*), tg, tp, ta double precision time_acc1, time_get1, time_put1 logical local c integer me integer loop, jump, count, bytes c zero = 0 me = ga_nodeid() inode = ga_cluster_nodeid() iproc = me - ga_cluster_procid(inode,zero) if (me .eq. 0) then write(6,*)' ' if(local) then write(6,'(26X, 25HLocal 1-D Array Section )') else write(6,'(26X, 25HRemote 1-D Array Section )') endif write(6,*)' section get put', & ' accumulate' write(6,*)' bytes dim sec MB/s sec MB/s', & ' sec MB/s' call flush(6) endif call ga_sync() c do loop = 1, num_chunks bytes = util_mdtob(1)*chunk(loop) ! how much data is accessed jump = n/(6000*loop) ! jump distance between consecutive patches if(loop.eq.num_chunks)jump=0 c c everybody touches own data c this is a kind of klugy way of filling up local data, but it works c call ga_fill_patch(g_a, 1, n, 1, 1 , 1d0*me*loop) if (iproc.eq.0) then tg=time_get1(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, 1 , 1d0*me*loop) if (iproc.eq.0) then tp=time_put1(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, 1 , 1d0*me*loop) if (iproc.eq.0) then ta=time_acc1(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c if (me .eq. 0) then write(6,77)bytes, chunk(loop), tg, & 1d-6*bytes/tg,tp, 1d-6*bytes/tp, ta, 1d-6*bytes/ta call flush(6) endif enddo c 77 format(i7, i7,1x, 3(1x,d8.3,1x,d8.3)) end double precision function & time_acc1(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je logical local integer rows, indx, shifti c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 shifti = rows jlo = js jhi = je seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 count = count + 1 if (local) then call ga_acc(g_a, ilo, ihi, jlo, jhi, buf, chunk, 1d0) else call ga_acc(g_a, ilo+shifti, ihi+shifti, $ jlo, jhi, buf, chunk, 1d0) endif enddo seconds = util_timer() - seconds c time_acc1 = seconds/count end double precision function & time_get1(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je integer rows, indx, shifti logical local c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 shifti = rows jlo = js jhi = je seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 count = count + 1 if (local) then call ga_get(g_a, ilo, ihi, jlo, jhi, buf, chunk) else call ga_get(g_a, ilo+shifti, ihi+shifti, $ jlo, jhi, buf, chunk) endif enddo seconds = util_timer() - seconds c time_get1 = seconds/count end double precision function & time_put1(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je integer rows, indx, shifti logical local c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 shifti = rows jlo = js jhi = je seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 count = count + 1 if (local) then call ga_put(g_a, ilo, ihi, jlo, jhi, buf, chunk) else call ga_put(g_a, ilo+shifti, ihi+shifti, $ jlo, jhi, buf, chunk) endif enddo seconds = util_timer() - seconds c time_put1 = seconds/count end c c test for square patches c subroutine test2D() implicit none #include "mafdecls.fh" #include "global.fh" c integer n, nn, num_chunks parameter (n = 1024, nn = n*n/4, num_chunks=16) double precision buf(nn) c integer g_a integer ilo, ihi, jlo, jhi integer nproc, me, loop integer chunk(num_chunks) data chunk /1,3,4,9,16,24,30,48,64,91,128,171,256,353,440,512/ c nproc = ga_nnodes() me = ga_nodeid() c c*** Create global array if (.not. ga_create(MT_DBL, n, n, 'a', 0, 0, g_a)) $ call ga_error(' ga_create failed ',1) c do loop=1,nn buf(loop) = .01d0 enddo call ga_zero(g_a) c if (me .eq. 0) then write(*,*)' ' write(*,55)n,n 55 format(' Performance of GA get, put & acc', $ ' for square sections of array[',i4,',',i4,']') print *,' ' endif c c do loop=1,2 c c*** local ops c call ga_distribution(g_a, me, ilo, ihi, jlo, jhi) call TestPutGetAcc & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo, jhi, .true.) c c*** remote ops c call TestPutGetAcc & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo, jhi,.false.) c enddo end subroutine TestPutGetAcc & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo,jhi, local) implicit none #include "global.fh" #include "testutil.fh" c integer num_chunks, chunk(num_chunks) integer n, ilo, ihi, jlo,jhi,g_a double precision buf(*), tg, tp, ta double precision time_acc, time_get, time_put logical local c integer me integer loop, jump, count, bytes c me = ga_nodeid() if (me .eq. 0) then write(6,*)' ' if(local) then write(6,'(26X, 25HLocal 2-D Array Section )') else write(6,'(26X, 25HRemote 2-D Array Section )') endif write(6,*)' section get put', & ' accumulate' write(6,*)' bytes dim sec MB/s sec MB/s', & ' sec MB/s' call flush(6) endif call ga_sync() c do loop = 1, num_chunks bytes = util_mdtob(1)*chunk(loop)*chunk(loop) !how much data is accessed jump = n/(60*loop) ! jump distance between consecutive patches if(loop.eq.num_chunks)jump=0 c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, n , 1d0*me*loop) if (me .eq. 0) then tg=time_get(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, n , 1d0*me*loop) if (me .eq. 0) then tp=time_put(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, n , 1d0*me*loop) if (me .eq. 0) then ta=time_acc(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c if (me .eq. 0) then write(6,77)bytes, chunk(loop), tg, & 1d-6*bytes/tg,tp, 1d-6*bytes/tp, ta, 1d-6*bytes/ta call flush(6) endif enddo c 77 format(i7, i7,1x, 3(1x,d8.3,1x,d8.3)) end double precision function & time_acc(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je logical local integer rows, cols, indx, shifti(3), shiftj(3) c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 cols = je - js + 1 shifti(1) = rows shifti(2) = 0 shifti(3) = rows shiftj(1) = 0 shiftj(2) = cols shiftj(3) = cols seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 do jlo = js, je -chunk-jump +1, chunk+jump jhi = jlo + chunk -1 count = count + 1 if (local) then call ga_acc(g_a, ilo, ihi, jlo, jhi, buf, chunk, 1d0) else indx = Mod(count,3) + 1 call ga_acc(g_a, ilo+shifti(indx), ihi+shifti(indx), $ jlo+shiftj(indx), jhi+shiftj(indx), $ buf, chunk, 1d0) endif enddo enddo seconds = util_timer() - seconds c time_acc = seconds/count end double precision function & time_get(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je integer rows, cols, indx, shifti(3), shiftj(3) logical local c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 cols = je - js + 1 shifti(1) = rows shifti(2) = 0 shifti(3) = rows shiftj(1) = 0 shiftj(2) = cols shiftj(3) = cols seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 do jlo = js, je -chunk-jump +1, chunk+jump jhi = jlo + chunk -1 count = count + 1 if (local) then call ga_get(g_a, ilo, ihi, jlo, jhi, buf, chunk) else indx = Mod(count,3) + 1 call ga_get(g_a, ilo+shifti(indx), ihi+shifti(indx), $ jlo+shiftj(indx), jhi+shiftj(indx), $ buf, chunk) endif enddo enddo seconds = util_timer() - seconds c time_get = seconds/count end double precision function & time_put(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je integer rows, cols, indx, shifti(3), shiftj(3) logical local c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 cols = je - js + 1 shifti(1) = rows shifti(2) = 0 shifti(3) = rows shiftj(1) = 0 shiftj(2) = cols shiftj(3) = cols seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 do jlo = js, je -chunk-jump +1, chunk+jump jhi = jlo + chunk -1 count = count + 1 if (local) then call ga_put(g_a, ilo, ihi, jlo, jhi, buf, chunk) else indx = Mod(count,3) + 1 call ga_put(g_a, ilo+shifti(indx), ihi+shifti(indx), $ jlo+shiftj(indx), jhi+shiftj(indx), $ buf, chunk) endif enddo enddo seconds = util_timer() - seconds c time_put = seconds/count end subroutine my_sleep(seconds) implicit none #include "global.fh" #include "testutil.fh" c double precision ts, te, work integer seconds, loop common /sleep_block/ work c ts = util_timer() work = 0. 100 continue do loop= 1, 500 work = work + 1. enddo te = util_timer() if(te - ts .lt. real(seconds)) goto 100 * print *, work, ts, te end ga-5-3/global/testing/nga-periodic.m40000640005473000001440000000064407113076501016320 0ustar d3n000usersdivert(-1) # what kind of data type to test? define(m4_test_int, `yes') define(m4_test_dbl, `yes') define(m4_test_dcpl, `yes') # test dimension from which to which? define(m4_dim_from, 1) define(m4_dim_to, 7) # periodic functions define(m4_test_NGA_PERIODIC_GET, `yes') define(m4_test_NGA_PERIODIC_PUT, `yes') define(m4_test_NGA_PERIODIC_ACC, `yes') divert include(`ngatest_src/ngatest.def') ga-5-3/global/testing/simple_groups.F0000640005473000001440000000315611437102612016512 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif program main implicit none #include "global.fh" #include "mafdecls.fh" integer nproc,me integer g_a,g_b,g_c logical status integer n,i,j parameter (n=4) integer lo(2),hi(2) integer dims(2) double precision buf(n,n) integer proc_group(0:100),proclist(100),inode,nprocs #include "mp3.fh" call ga_initialize() nproc = ga_nnodes() me = ga_nodeid() status = ma_init(MT_DBL, 100000, 100000) if (.not. status) call ga_error('ma_init failed',-1) status = ma_set_auto_verify(.true.) status = ma_set_hard_fail(.true.) status = ma_set_error_print(.true.) inode = ga_cluster_nodeid() do i=0,ga_cluster_nnodes()-1 do j=0,ga_cluster_nprocs(i)-1 proclist(j+1)=ga_cluster_procid(i,j) enddo proc_group(i)=ga_pgroup_create(proclist,ga_cluster_nprocs(i)) enddo call ga_sync() do i = 0, ga_cluster_nnodes()-1 if (i.eq.inode) then write(0,'(I4,A,I4)') me,' joining group', , proc_group(inode) call ga_pgroup_set_default(proc_group(inode)) status = ga_create(MT_DBL, n, n, 'a', 1, 1, g_a) if (.not. status) call ga_error('ga_create failed',-1) write(0,'(I4,A,I4,A,I4)') me,' Created array of group ', , proc_group(inode), ' as proc no. ',ga_nodeid() call ga_print_distribution(g_a) endif enddo call ga_pgroup_set_default(ga_pgroup_get_world()) call ga_terminate() call MP_FINALIZE() end ga-5-3/global/testing/testeig.F0000640005473000001440000002577311364420655015310 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c $Id: testeig.F,v 1.10 2004-11-13 02:49:18 edo Exp $ program test implicit none #include "mafdecls.fh" #include "global.fh" integer heap, stack c#define BLOCK_CYCLIC 0 c#define PAR_DIAG 1 c c c*** Intitialize a message passing library c #include "mp3.fh" c c*** initialize PEIGS #ifdef PAR_DIAG #ifdef HAVE_SCALAPACK c something here? #else call mxinit() ! PEIGS needs mxinit #endif #endif c c Intitialize the GA package c call ga_initialize() c c Initialize the MA package c heap = 190000 stack= 190000 if (.not. ma_init(MT_DBL, heap, stack)) $ call ga_error("ma init failed",heap+stack) c call testit() call ga_terminate() c call MP_FINALIZE() end c----------------- subroutine testit() implicit none #include "mafdecls.fh" #include "global.fh" c integer n parameter (n = 10) double precision a(n,n), b(n,n), c(n,n), evals(n) double precision eva(n), evb(n) integer g_a,g_b,g_c,g_d integer i, j, index(n),ind(n) integer nproc, me double precision dsin, sum logical status #if BLOCK_CYCLIC integer g_aa, g_bb, g_cc, g_dd integer dims(2), proc_grid(2), block(2) integer g1, g2 #endif c nproc = ga_nnodes() me = ga_nodeid() c c*** a() is a local copy of what the global array should start as c do j = 1, n do i = 1, n a(i,j) = 1d0 * (i+j) b(i,j) = DSIN(1d0* (i+j)) if(i.eq.j) then b(i,j) = 2d0 *n a(i,j) = i endif if(i.le.j)then c(i,j) = a(i,j) else c(i,j) = 0d0 endif enddo enddo c c*** Create global arrays c #if BLOCK_CYCLIC if (me.eq.0) then write(6,*) ' ' write(6,*) '> Creating Block-Cyclic Arrays' write(6,*) ' ' endif dims(1) = n dims(2) = n block(1) = 16 block(2) = 16 call factor(nproc,g1,g2) proc_grid(1) = g1 proc_grid(2) = g2 if (me.eq.0) then write(6,'(a,i3,a,i3)') ' Proc grid dimensions: ',g1,' x ',g2 endif g_a = ga_create_handle() call ga_set_data(g_a,2,dims,MT_DBL) call ga_set_block_cyclic_proc_grid(g_a,block,proc_grid) if (.not.ga_allocate(g_a)) & call ga_error(' ga_create a failed ', 2) g_b = ga_create_handle() call ga_set_data(g_b,2,dims,MT_DBL) call ga_set_block_cyclic_proc_grid(g_b,block,proc_grid) if (.not.ga_allocate(g_b)) & call ga_error(' ga_create b failed ', 2) g_c = ga_create_handle() call ga_set_data(g_c,2,dims,MT_DBL) call ga_set_block_cyclic_proc_grid(g_c,block,proc_grid) if (.not.ga_allocate(g_c)) & call ga_error(' ga_create c failed ', 2) g_d = ga_create_handle() call ga_set_data(g_d,2,dims,MT_DBL) call ga_set_block_cyclic_proc_grid(g_d,block,proc_grid) if (.not.ga_allocate(g_d)) & call ga_error(' ga_create d failed ', 2) if (.not. ga_create(MT_DBL, n, n, 'AA', 1, 1, g_aa)) $ call ga_error(' ga_create aa failed ',2) if (.not. ga_create(MT_DBL, n, n, 'BB', 1, 1, g_bb)) $ call ga_error(' ga_create bb failed ',2) if (.not. ga_create(MT_DBL, n, n, 'CC', 1, 1, g_cc)) $ call ga_error(' ga_create cc failed ',2) if (.not. ga_create(MT_DBL, n, n, 'DD', 1, 1, g_dd)) $ call ga_error(' ga_create dd failed ',2) #else if (.not. ga_create(MT_DBL, n, n, 'A', 1, 1, g_a)) $ call ga_error(' ga_create a failed ',2) if (.not. ga_create(MT_DBL, n, n, 'B', 1, 1, g_b)) $ call ga_error(' ga_create b failed ',2) if (.not. ga_create(MT_DBL, n, n, 'C', 1, 1, g_c)) $ call ga_error(' ga_create c failed ',2) if (.not. ga_create(MT_DBL, n, n, 'D', 1, 1, g_d)) $ call ga_error(' ga_create d failed ',2) #endif c c*** Fill in arrays A & B c if (me .eq. 0) then c write(6,21) 21 format(/' filling in ... ') c call ffflush(6) do j = 1, n call ga_put(g_a, 1,n, j,j, a(1,j),n) call ga_put(g_b, 1,n, j,j, b(1,j),n) call ga_put(g_c, 1,n, j,j, c(1,j),n) enddo c print *,'A' do j = 1, n c call GA_GET(g_a, 1,n, j,j, eva,1) c write(6,'(10e8.2)')(eva(i),i=1,n) enddo endif c c*** check symmetrization c if (me .eq. 0) then print *,' ' print *,'>checking ga_symmetrize ' print *,' ' call ffflush(6) endif call ga_symmetrize(g_c) c call GA_GET(g_c, 1,n, 1,n,c,n) do j = ga_nodeid()+1, n, ga_nnodes() do i = j+1, n if(c(i,j).ne.c(j,i))then print *, me, ' symmetrize ',i,j,c(i,j),c(j,i) call ffflush(6) call ga_error('exiting',-1) endif enddo enddo call ga_sync() if (me .eq. 0) then print *,' ' print *,' ga_symmetrize is OK' print *,' ' call ffflush(6) endif c c*** check symmetrization c if (me .eq. 0) then print *,' ' print *,'>checking ga_transpose ' print *,' ' call ffflush(6) endif c call ga_transpose(g_c,g_d) * call ga_print(g_c) * call ga_print(g_d) call GA_GET(g_d, 1,n, 1,n,a,n) do j = ga_nodeid()+1, n, ga_nnodes() call GA_GET(g_d, 1,n, j,j, a,n) do i = 1, n if(a(i,1).ne.c(j,i))then print *, me, ' transpose ',i,j,a(i,1),c(j,i) call ffflush(6) call ga_error('exiting',-1) endif enddo enddo call ga_sync() if (me .eq. 0) then print *,' ' print *,' ga_transpose is OK' print *,' ' call ffflush(6) endif c c c*** solve the eigenproblem if (me .eq. 0)then print *,' ' write(6,*) '>checking the generalized eigensolver ... ' print *,' ' call ffflush(6) endif call ga_sync() #ifndef PAR_DIAG call ga_diag_seq(g_a,g_b,g_c,evals) #else #ifdef HAVE_SCALAPACK #if BLOCK_CYCLIC call ga_copy(g_a, g_aa) call ga_copy(g_b, g_bb) #endif call ga_pdsygv( g_a, g_b, g_c, evals) #if BLOCK_CYCLIC call ga_copy(g_aa, g_a) call ga_copy(g_bb, g_b) #endif #else call ga_diag(g_a,g_b,g_c,evals) #endif #endif if (me .eq. 0) then print *,' ' print *,' checking multiplication' print *,' ' call ffflush(6) endif c call ga_sync() #if BLOCK_CYCLIC call ga_copy(g_a, g_aa) call ga_copy(g_c, g_cc) call ga_dgemm('t','n',n,n,n, 1d0, g_cc, g_aa, 0d0, g_dd) call ga_dgemm('n','n',n,n,n, 1d0, g_dd, g_cc, 0d0, g_aa) call ga_copy(g_aa, g_a) #else call ga_dgemm('t','n',n,n,n, 1d0, g_c, g_a, 0d0, g_d) call ga_dgemm('n','n',n,n,n, 1d0, g_d, g_c, 0d0, g_a) #endif c call ga_sync() if (me .eq. 0) then do j = 1, n call GA_GET(g_a, j,j, j,j, eva(j),1) enddo endif call ga_sync() #if BLOCK_CYCLIC call ga_copy(g_b, g_bb) call ga_dgemm('t','n',n,n,n, 1d0, g_cc, g_bb, 0d0, g_dd) call ga_sync() call ga_dgemm('n','n',n,n,n, 1d0, g_dd, g_cc, 0d0, g_bb) call ga_copy(g_bb, g_b) #else call ga_dgemm('t','n',n,n,n, 1d0, g_c, g_b, 0d0, g_d) call ga_sync() call ga_dgemm('n','n',n,n,n, 1d0, g_d, g_c, 0d0, g_b) #endif c call ga_sync() if (me .eq. 0) then do j = 1, n call GA_GET(g_b, j,j, j,j, evb(j),1) enddo write(6,*)' j lambda eva evb eva/evb' write(6,*)' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^' call ffflush(6) do j = 1, n if(ABS(evals(j) - eva(j)/evb(j)).gt.1d-5) & write(6,'(i4,1h_,6(e10.3,1h,))') @ j,evals(j), eva(j), evb(j),eva(j)/evb(j) enddo write(6,*)' OK OK OK OK' call ffflush(6) endif if (me .eq. 0) then print *,' ' print *,' eigensolver & multiplication are OK' print *,' ' print *,' ' call ffflush(6) endif c c.................................................................. c c*** solve the std eigenproblem if (me .eq. 0)then print *,' ' write(6,*) '>checking the standard eigensolver ... ' print *,' ' call ffflush(6) endif do j =1,n index(j)=j ind(j)=j enddo call ga_sync() #ifdef PAR_DIAG #ifdef HAVE_SCALAPACK #if BLOCK_CYCLIC call ga_copy(g_a, g_aa) #endif call ga_pdsyev( g_a, g_c, evals, 16) #if BLOCK_CYCLIC call ga_copy(g_aa, g_a) #endif #else call ga_diag_std(g_a,g_c,evals) #endif #else call ga_diag_std_seq(g_a,g_c,evals) #endif c call ga_zero(g_b) #if BLOCK_CYCLIC call ga_copy(g_a, g_aa) call ga_copy(g_c, g_cc) call ga_dgemm('n','n',n,n,n, 1d0, g_aa, g_cc, 0d0, g_dd) ! d := a*c call ga_copy(g_dd, g_d) #else call ga_dgemm('n','n',n,n,n, 1d0, g_a, g_c, 0d0, g_d) ! d := a*c #endif c c copy eigenvalues to diagonal of g_b c if (me .eq. 0) call ga_scatter(g_b, evals, index, ind, n) call ga_sync() #if BLOCK_CYCLIC call ga_copy(g_b, g_bb) call ga_dgemm('n','n',n,n,n, 1d0, g_cc, g_bb, 0d0, g_aa) ! a := c*b call ga_copy(g_aa, g_a) #else call ga_dgemm('n','n',n,n,n, 1d0, g_c, g_b, 0d0, g_a) ! a := c*b #endif call ga_sync() call ga_add(1d0, g_d, -1d0, g_a, g_c) sum = ga_ddot(g_c,g_c) if (me .eq. 0) then if(dsqrt(sum)/n.lt.1d-11)then print *, ' std eigensolver is OK ' else print *, ' test failed: norm = ', dsqrt(sum)/n endif print *,' ' call ffflush(6) endif c status = MA_summarize_allocated_blocks() status = ga_destroy(g_d) status = ga_destroy(g_c) status = ga_destroy(g_b) status = ga_destroy(g_a) end #if BLOCK_CYCLIC subroutine factor(p,idx,idy) implicit none integer i,j,p,idx,idy,it integer ip,ifac,pmax,prime(1280) integer fac(1280) c i = 1 ip = p c c factor p completely c first, find all prime numbers less than or equal to p c pmax = 0 do i = 2, p do j = 1, pmax if (mod(i,prime(j)).eq.0) go to 100 end do pmax = pmax + 1 prime(pmax) = i 100 continue end do c c find all prime factors of p c ifac = 0 do i = 1, pmax 200 if (mod(ip,prime(i)).eq.0) then ifac = ifac + 1 fac(ifac) = prime(i) ip = ip/prime(i) go to 200 endif end do c c determine two factors of p of approximately the c same size c idx = 1 idy = 1 do i = ifac, 1, -1 if (idx.le.idy) then idx = fac(i)*idx else idy = fac(i)*idy endif end do return end #endif ga-5-3/global/testing/nga-scatter.m40000640005473000001440000000055711417165547016205 0ustar d3n000usersdivert(-1) # what kind of data type to test? define(m4_test_int, `yes') define(m4_test_dbl, `yes') define(m4_test_dcpl, `yes') # test dimension from which to which? define(m4_dim_from, 1) define(m4_dim_to, 7) # functions to test define(m4_test_NGA_SCATTER, `yes') define(m4_test_NGA_SCATTER_ACC, `yes') divert include(`ngatest_src/ngatest.def') ga-5-3/global/testing/gatscat.c0000640005473000001440000001034712127140616015310 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_MATH_H # include #endif #include "ga.h" #include "macdecls.h" #include "mp3.h" #define N 100 /* dimension of matrices */ int main( int argc, char **argv ) { int g_a, g_b, i, j, size, size_me; int icnt, idx, jdx, ld; int n=N, type=MT_F_INT, one; int *values, *ptr; int **indices; int dims[2]={N,N}; int lo[2], hi[2]; int heap=3000000, stack=2000000; int me, nproc; int datatype, elements; double *prealloc_mem; MP_INIT(argc,argv); GA_INIT(argc,argv); /* initialize GA */ me=GA_Nodeid(); nproc=GA_Nnodes(); if(me==0) { if(GA_Uses_fapi())GA_Error("Program runs with C array API only",1); printf("\nUsing %ld processes\n",(long)nproc); fflush(stdout); } heap /= nproc; stack /= nproc; if(! MA_init(MT_F_DBL, stack, heap)) GA_Error("MA_init failed",stack+heap); /* initialize memory allocator*/ /* Create a regular matrix. */ if(me==0)printf("\nCreating matrix A of size %d x %d\n",N,N); g_a = NGA_Create(type, 2, dims, "A", NULL); if(!g_a) GA_Error("create failed: A",n); /* Fill matrix using scatter routines */ size = N*N; if (size%nproc == 0) { size_me = size/nproc; } else { i = size - size%nproc; size_me = i/nproc; if (me < size%nproc) size_me++; } /* Check that sizes are all okay */ i = size_me; GA_Igop(&i,1,"+"); if (i != size) { GA_Error("Sizes don't add up correctly: ",i); } else if (me==0) { printf("\nSizes add up correctly\n"); } /* Allocate index and value arrays */ indices = (int**)malloc(size_me*sizeof(int*)); values = (int*)malloc(size_me*sizeof(int)); icnt = me; for (i=0; i= N || idx < 0) { printf("p[%d] Bogus index i: %d\n",me,idx); } if (jdx >= N || jdx < 0) { printf("p[%d] Bogus index j: %d\n",me,jdx); } indices[i] = (int*)malloc(2*sizeof(int)); (indices[i])[0] = idx; (indices[i])[1] = jdx; icnt += nproc; } /* Scatter values into g_a */ NGA_Scatter(g_a, values, indices, size_me); GA_Sync(); /* Check to see if contents of g_a are correct */ NGA_Distribution( g_a, me, lo, hi ); NGA_Access(g_a, lo, hi, &ptr, &ld); for (i=lo[0]; i #include "ga.h" #include "macdecls.h" #include "mp3.h" #define VERBOSE 0 #define NELEM 200000 #define test(MT,T,F) \ void test_##MT() \ { \ int g_a, lo[1], hi[1], ld[1], dims[1], chunk[1], i; \ T *buf, *get, start, inc; \ start = 1; \ inc = 1; \ lo[0] = 0; \ hi[0] = NELEM-1; \ dims[0] = NELEM; \ chunk[0] = 0; \ buf = (T*)malloc(sizeof(T) * NELEM); \ get = (T*)malloc(sizeof(T) * NELEM); \ g_a = NGA_Create(MT, 1, dims, "g_a", NULL); \ for (i=0; i<100; i++ ){ \ GA_Patch_enum(g_a, lo[0], hi[0], &start, &inc); \ } \ NGA_Get(g_a, lo, hi, get, ld); \ for (i=0; iTest of the LU-based solver with nxn rhs ' print *,' ' call ffflush(6) endif #ifndef HAVE_SCALAPACK call ga_lu_solve_seq('n', g_a, g_b) #else #if BLOCK_CYCLIC call ga_copy(g_a,g_aa) #endif call ga_lu_solve('n', g_a, g_b) #if BLOCK_CYCLIC call ga_copy(g_aa,g_a) #endif #endif #if BLOCK_CYCLIC c call print_block(g_b) call ga_copy(g_b,g_bb) call ga_copy(g_c,g_cc) call ga_copy(g_d,g_dd) call ga_dgemm('n','n',n,n,n, 1d0, g_aa, g_bb, 0d0, g_dd) ! d := a*b call ga_add(1d0, g_dd, -1d0, g_cc, g_cc) sum = ga_ddot(g_cc,g_cc) #else c call print_rblock(g_b) call ga_dgemm('n','n',n,n,n, 1d0, g_a, g_b, 0d0, g_d) ! d := a*b call ga_add(1d0, g_d, -1d0, g_c, g_c) sum = ga_ddot(g_c,g_c) #endif if (me .eq. 0) then print *,' ' print *, ' dsqrt(sum) = ', dsqrt(sum) print *, ' n = ', n print *, ' norm = ', dsqrt(sum)/n if(dsqrt(sum)/n.lt.1d-10) then print *, ' test passed ' else call ga_error(' test failed ',3) endif print *,' ' call ffflush(6) endif c if (me .eq. 0) then print *,' ' print *,'>Test of the LU-based solver with a single vector rhs' print *,' ' call ffflush(6) endif c #ifndef HAVE_SCALAPACK call ga_lu_solve_seq('n', g_a, g_e) #else #if BLOCK_CYCLIC call ga_copy(g_a,g_aa) #endif call ga_lu_solve('n', g_a, g_e) #endif c #if BLOCK_CYCLIC call ga_copy(g_e,g_ee) call ga_copy(g_f,g_ff) call ga_copy(g_g,g_gg) call ga_dgemm('n','n',n,1,n, 1d0, g_aa, g_ee, 0d0, g_gg) ! g := a*e call ga_add(1d0, g_gg, -1d0, g_ff, g_ff) sum = ga_ddot(g_ff,g_ff) #else call ga_dgemm('n','n',n,1,n, 1d0, g_a, g_e, 0d0, g_g) ! g := a*e call ga_add(1d0, g_g, -1d0, g_f, g_f) sum = ga_ddot(g_f,g_f) #endif if (me .eq. 0) then print *,' ' print *, ' norm = ', dsqrt(sum)/n if(dsqrt(sum)/n.lt.1d-10) then print *, ' test passed ' else call ga_error(' test failed ',4) endif print *,' ' call ffflush(6) endif end c subroutine factor(p,idx,idy) implicit none integer i,j,p,idx,idy,it integer ip,ifac,pmax,prime(1280) integer fac(1280) c i = 1 ip = p c c factor p completely c first, find all prime numbers less than or equal to p c pmax = 0 do i = 2, p do j = 1, pmax if (mod(i,prime(j)).eq.0) go to 100 end do pmax = pmax + 1 prime(pmax) = i 100 continue end do c c find all prime factors of p c ifac = 0 do i = 1, pmax 200 if (mod(ip,prime(i)).eq.0) then ifac = ifac + 1 fac(ifac) = prime(i) ip = ip/prime(i) go to 200 endif end do c c determine two factors of p of approximately the c same size c idx = 1 idy = 1 do i = ifac, 1, -1 if (idx.le.idy) then idx = fac(i)*idx else idy = fac(i)*idy endif end do return end c subroutine print_block(g_a) implicit none #include "mafdecls.fh" #include "global.fh" integer g_a, i, j, istride, jstride integer idx, ld, me me = ga_nodeid() istride = 10 if (me.eq.0) then jstride = 6 else jstride = 4 endif call nga_access_block_segment(g_a,me,idx,ld) do i = 1, istride write(6,733) me,(dbl_mb(idx+(j-1)*istride+i-1),j=1,jstride) end do 733 format(i8,8f12.6) return end c subroutine print_rblock(g_a) implicit none #include "mafdecls.fh" #include "global.fh" integer g_a, i, j, istride, jstride integer idx, ld, me, lo(2), hi(2) me = ga_nodeid() istride = 10 jstride = 5 call nga_distribution(g_a,me,lo,hi) call nga_access(g_a,lo,hi,idx,ld) do i = 1, istride write(6,733) me,(dbl_mb(idx+(j-1)*istride+i-1),j=1,jstride) end do 733 format(i8,8f12.6) return end ga-5-3/global/testing/perform.F0000640005473000001440000001445211400012704015265 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c $Id: perform.F,v 1.9 2000-05-25 01:09:20 d3h325 Exp $ program perform c*** c*** Last modification: Fri Jan 13 12:13:27 PST 1995 c*** implicit none #include "mafdecls.fh" #include "global.fh" integer heap c c*** Intitialize a message passing library c #include "mp3.fh" c c*** Intitialize the GA package call ga_initialize() if(ga_nnodes().ne.4 .and. ga_nodeid().eq.0) $ call ga_error('Program requires 4 GA processes',ga_nnodes()) c c*** Initialize the MA package heap = 450000 if (.not. ma_init(MT_DBL, heap,heap)) $ call ga_error('ma init failed',2*heap) c call testit() c if(ga_nodeid().eq.0) print *, 'All tests successful' c call ga_terminate() c call MP_FINALIZE() end c----------------- subroutine testit() implicit none #include "mafdecls.fh" #include "global.fh" c integer n, nn, num_chunks parameter (n = 710, nn = n*n/4, num_chunks=12) double precision buf(nn) c integer g_a integer ilo, ihi, jlo, jhi integer nproc, me, loop integer chunk(num_chunks) data chunk /1,3,4,9,16,30,64,91,128,171,256,353/ c nproc = ga_nnodes() me = ga_nodeid() c c*** Create global array if (.not. ga_create(MT_DBL, n, n, 'a', 0, 0, g_a)) $ call ga_error(' ga_create failed ',1) c do loop=1,nn buf(loop) = .01d0 enddo call ga_zero(g_a) c if (me .eq. 0) then write(*,*)' ' print *,'> Performance of ga_get, ga_put & ga_acc n = ', n print *,' ' endif c c do loop=1,2 c c*** local ops c call ga_distribution(g_a, me, ilo, ihi, jlo, jhi) call TestPutGetAcc & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo, jhi) c c*** remote ops c call ga_distribution(g_a, nproc-1, ilo, ihi, jlo, jhi) call TestPutGetAcc & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo, jhi) c enddo end subroutine TestPutGetAcc & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo,jhi) implicit none #include "global.fh" #include "testutil.fh" c integer num_chunks, chunk(num_chunks) integer n, ilo, ihi, jlo,jhi,g_a double precision buf(*), tg, tp, ta double precision time_acc, time_get, time_put c integer me integer loop, jump, count, bytes c me = ga_nodeid() if (me .eq. 0) then write(6,*)' ' write(6,'(21X,8hACCESS [,i3,1h:,i4,1h,,i3,1h:,i4,1h])') & ilo,ihi,jlo,jhi write(6,*)'bytes loop get put', & ' accumulate' call flush(6) endif call ga_sync() c do loop = 1, num_chunks bytes = util_mdtob(1)*chunk(loop)*chunk(loop) !how much data is accessed jump = n/(60*loop) ! jump distance between consecutive patches c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, n , 1d0*me*loop) if (me .eq. 0) then tg= time_get(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count) else call sleep(2) endif c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, n , 1d0*me*loop) if (me .eq. 0) then tp= time_put(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count) else call sleep(2) endif c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, n , 1d0*me*loop) if (me .eq. 0) then ta= time_acc(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count) else call sleep(2) endif c if (me .eq. 0) then write(6,77)bytes, count, tg, 1d-6*bytes/tg, & tp, 1d-6*bytes/tp, ta, 1d-6*bytes/ta call flush(6) endif enddo c 77 format(i6, i5, 3(d10.3, d9.2,'MB/s')) end double precision function & time_acc(g_a, is, ie, js, je, buf, chunk, jump, count) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 do jlo = js, je -chunk-jump +1, chunk+jump jhi = jlo + chunk -1 count = count + 1 call ga_acc(g_a, ilo, ihi, jlo, jhi, buf, chunk, 1d0) enddo enddo seconds = util_timer() - seconds c time_acc = seconds/count end double precision function & time_get(g_a, is, ie, js, je, buf, chunk, jump, count) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 do jlo = js, je -chunk-jump +1, chunk+jump jhi = jlo + chunk -1 count = count + 1 call ga_get(g_a, ilo, ihi, jlo, jhi, buf, chunk) enddo enddo seconds = util_timer() - seconds c time_get = seconds/count end double precision function & time_put(g_a, is, ie, js, je, buf, chunk, jump, count) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 do jlo = js, je -chunk-jump +1, chunk+jump jhi = jlo + chunk -1 count = count + 1 call ga_put(g_a, ilo, ihi, jlo, jhi, buf, chunk) enddo enddo seconds = util_timer() - seconds c time_put = seconds/count end ga-5-3/global/testing/sparse.F0000640005473000001440000001473411417373344015135 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif C C Test the minval, minloc, maxval, maxloc, and enum functions in GA. C program main implicit none #include "mafdecls.fh" #include "global.fh" integer heap, stack, fudge, ma_heap, me, nproc logical status parameter (heap=100*100*4, fudge=100, stack=100*100) c c*** Intitialize a message passing library c #include "mp3.fh" c c*** Initialize GA c c There are 2 choices: ga_initialize or ga_initialize_ltd. c In the first case, there is no explicit limit on memory usage. c In the second, user can set limit (per processor) in bytes. c call ga_initialize() nproc = ga_nnodes() me = ga_nodeid() c we can also use GA_set_memory_limit BEFORE first ga_create call c if(ga_nodeid().eq.0)then print *,' GA initialized ', nproc, stack, heap call ffflush(6) endif c c*** Initialize the MA package c MA must be initialized before any global array is allocated c status = ma_init(MT_DCPL, stack, heap) if (.not. status) call ga_error('ma_init failed',-1) c if(me.eq.0)then print *, 'using ', nproc, ' process(es)' call ffflush(6) endif c call test_nga_select_elem() ! Test global max/min call test_ga_patch_enum() ! Test enumerate c if(me.eq.0) call ga_print_stats() c c*** Tidy up the GA package c call ga_terminate() c c*** Tidy up after message-passing library c call MP_FINALIZE() c end subroutine test_nga_select_elem() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" integer m ! grid size parameter (m = 10) integer g_a ! handles to global arrays integer ilo, ihi integer i integer me, nproc ! my processor & number of procs integer ndim,dims(1),chunck(1) integer num ! number of values per proc integer iv(m) ! scatter index array double precision v(m) ! scatter value array integer iran c integer ilocmax, ilocmin integer ilocmax_ga, ilocmin_ga double precision xmax1, xmin1 double precision xmax_ga, xmin_ga c iran(i) = int(drand(1)*real(i)) + 1 c c*** check parallel environment me = ga_nodeid() nproc = ga_nnodes() c c*** create a global 1-D array ndim=1 dims(1)=100 chunck(1)=20 if (.not. nga_create(MT_DBL, ndim, dims, 'array', chunck, g_a)) $ call ga_error(' ga_create failed ',0) c c*** compute local ilo, ihi, num for each processor call nga_distribution(g_a,me,ilo,ihi) num=ihi-ilo+1 if(ihi.le.0)num=0 * print *, 'me=',me, num,ilo c c*** scatter some values into the global array call ga_fill(g_a,0.0d+00) do i=1,Min(num,m) v(i)=real(ilo+i-1) iv(i)=ilo+i-1 * print *,'me=',me,'val=',iv(i) enddo if(num.gt.0)call NGA_scatter(g_a,v,iv,Min(num,m)) call ga_sync() if(me.eq.0)then ilocmax = Mod(iran(50000000),dims(1)) ilocmin = Mod(iran(1000000),dims(1)) C if(ilocmin.eq.ilocmax) ilocmin=Mod(ilocmin+1,dims(1)-1) xmax1 = drand(0)*real(ilo) + dims(1) xmin1= -1 call nga_put(g_a,ilocmin,ilocmin,xmin1,1) call nga_put(g_a,ilocmax,ilocmax,xmax1,1) endif c call ga_print(g_a) c c*** Find the maximum value and the index of the maximum value call nga_select_elem(g_a,'max',xmax_ga,ilocmax_ga) c*** Find the minimum value and the index of the minimum value call nga_select_elem(g_a,'min',xmin_ga,ilocmin_ga) c c if(me.eq.0)then print *," " print *,"Correct Max: value=",xmax1 ," location=",ilocmax print *," GA Max: value=",xmax_ga," location=",ilocmax_ga print *," " print *,"Correct Min: value=",xmin1 ," location=",ilocmin print *," GA Min: value=",xmin_ga," location=",ilocmin_ga endif c if(.not. ga_destroy(g_a)) call ga_error('invalid handle: g_a',0) c return end subroutine test_ga_patch_enum() implicit none #include "mafdecls.fh" #include "global.fh" integer m ! grid size parameter (m = 10) integer g_a, g_b, g_c ! handles to INT global arrays integer ilo, ihi integer i,j,cmin,cmax,nelem integer me, nproc ! my processor & number of procs integer ndim,dims,chunk(1) integer num ! number of values per proc integer iv(m) ! scatter index and value array c c*** check parallel environment me = ga_nodeid() nproc = ga_nnodes() c c*** compute local ilo, ihi, num for each processor c ilo=1+me*m c ihi=(me+1)*m c num=ihi-ilo+1 c c*** create the global 1-D arrays ndim=1 dims=100 chunk(1)=40 if (.not. nga_create(MT_INT, ndim, dims, 'array a', chunk, g_a)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_INT, ndim, dims, 'array b', chunk, g_b)) $ call ga_error(' ga_create failed ',0) if (.not. nga_create(MT_INT, ndim, dims, 'array c', chunk, g_c)) $ call ga_error(' ga_create failed ',0) c c*** Enumerate a each patch to get a sequential vector. call ga_patch_enum(g_b,1,dims,1,1) c call ga_print(g_b) c c*** enumerate manually g_a call nga_distribution(g_a,me,ilo,ihi) if(ilo.gt.0) then do i = ilo,ihi,m nelem = MIN(m, ihi-i+1) do j = 1, nelem iv(j)=i + j-1 enddo call nga_put(g_a,i,i+nelem -1,iv,1) enddo endif c call ga_print(g_a) c c*** g_c = -1 * g_a + 1 * g_b (hopefully all results will be zero) call ga_add(-1,g_a,1,g_b,g_c) c call ga_print(g_c) c c find min and max values call nga_select_elem(g_c,'min',cmin,ilo) call nga_select_elem(g_c,'max',cmax,ihi) if(me.eq.0)then if(cmin.ne.cmax .or. cmin.ne.0)then print *,'Failed',cmin,cmax else print *,"GA_PATCH_ENUM successful" endif endif c if(.not. ga_destroy(g_a)) call ga_error('invalid handle: g_a',0) if(.not. ga_destroy(g_b)) call ga_error('invalid handle: g_b',0) if(.not. ga_destroy(g_c)) call ga_error('invalid handle: g_c',0) c return end ga-5-3/global/testing/elempatch.c0000640005473000001440000016325012073076470015634 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /**\ File: elempatch.c Purpose: test the interfaces: GA_Abs_value_patch(g_a) GA_Add_constant_patch(g_a, alpha) GA_Recip_patch_patch(g_a) GA_Elem_multiply_patch(g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi) GA_Elem_divide_patch(g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi) GA_Elem_maximum_patch(g_a, alo, ahi, g_b, blo, bhi, g_c, clo, ch GA_Elem_minimum_patch(g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi) that are for TAO/Global Array Project Author: Limin Zhang, Ph.D. Mathematics Department Columbia Basin College Pasco, WA 99301 Mentor: Jarek Nieplocha Pacific Northwest National Laboratory Date: Jauary 30, 2002 Revised on February 26, 2002. \**/ #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STDIO_H # include #endif #include "ga.h" #include "macdecls.h" #include "mp3.h" #include "../src/globalp.h" #include "ga-papi.h" #define BLOCK_CYCLIC 0 #if BLOCK_CYCLIC #define USE_SCALAPACK 1 #endif #ifndef GA_HALF_MAX_INT #define GA_HALF_MAX_INT ((((int)1) << ((int)(8*sizeof(int))-2)) - 1) #endif #ifndef GA_INFINITY_I #define GA_INFINITY_I (GA_HALF_MAX_INT + GA_HALF_MAX_INT + 1) /* Original value below. Seemed too small arbitrarily. #define GA_INFINITY_I 100000 */ #endif #ifndef GA_NEGATIVE_INFINITY_I #define GA_NEGATIVE_INFINITY_I (- GA_INFINITY_I) /* Original value below. Seemed too small arbitrarily. #define GA_NEGATIVE_INFINITY_I -100000 */ #endif #ifndef GA_HALF_MAX_LONG #define GA_HALF_MAX_LONG ((((long)1) << ((int)(8*sizeof(long))-2)) - 1) #endif #ifndef GA_INFINITY_L #define GA_INFINITY_L (GA_HALF_MAX_LONG + GA_HALF_MAX_LONG + 1) /* Original value was #define GA_INFINITY_L 100000 */ #endif #ifndef GA_NEGATIVE_INFINITY_L #define GA_NEGATIVE_INFINITY_L (- GA_INFINITY_L) #endif /* Original value was: #define GA_NEGATIVE_INFINITY_L -100000 */ /* Modified by Doug Baxter 01/24/04 to distinguish between Double inifinity and float infinity. #ifndef GA_INFINITY #define GA_INFINITY 1.0e20 #endif #ifndef GA_NEGATIVE_INFINITY #define GA_NEGATIVE_INFINITY -1.0e20 #endif */ #ifndef GA_INFINITY_F #define GA_INFINITY_F 1.0e37 #endif /* Original value below. #define GA_INFINITY_F 1.0e20 */ #ifndef GA_NEGATIVE_INFINITY_F #define GA_NEGATIVE_INFINITY_F -1.0e37 #endif /* Original value below. #define GA_NEGATIVE_INFINITY_F -1.0e20 */ #ifndef GA_INFINITY_D #define GA_INFINITY_D 1.0e307 #endif /* Original value below. #define GA_INFINITY_D 1.0e20 */ #ifndef GA_NEGATIVE_INFINITY_D #define GA_NEGATIVE_INFINITY_D -1.0e307 #endif #define THRESH 1e-5 #define MISMATCHED(x,y) GA_ABS((x)-(y))>=THRESH #define N 100 #define BLOCK_SIZE 20 #define OP_ELEM_MULT 0 #define OP_ELEM_DIV 1 #define OP_ELEM_MAX 2 #define OP_ELEM_MIN 3 #define OP_ABS 4 #define OP_ADD_CONST 5 #define OP_RECIP 6 #define OP_STEP_MAX 7 #define OP_STEP_BOUND_INFO 8 #define MY_TYPE 2002 Integer _ga_lo[MAXDIM], _ga_hi[MAXDIM], _ga_work[MAXDIM]; # define COPYINDEX_C2F(carr, farr, n){\ int i; for(i=0; i< (n); i++)(farr)[n-i-1]=(Integer)(carr)[i]+1;} void nga_vfill_patch(Integer *g_a, Integer *lo, Integer *hi); void nga_pnfill_patch(Integer *g_a, Integer *lo, Integer *hi); void NGA_Vfill_patch(int g_a, int lo[], int hi[]) { Integer a=(Integer)g_a; Integer ndim = pnga_ndim(a); COPYINDEX_C2F(lo,_ga_lo, ndim); COPYINDEX_C2F(hi,_ga_hi, ndim); nga_vfill_patch(&a, _ga_lo, _ga_hi); } void NGA_Pnfill_patch(int g_a, int lo[], int hi[]) { Integer a=(Integer)g_a; Integer ndim = pnga_ndim(a); COPYINDEX_C2F(lo,_ga_lo, ndim); COPYINDEX_C2F(hi,_ga_hi, ndim); nga_pnfill_patch(&a, _ga_lo, _ga_hi); } int ifun (int k) { int result; result = -k - 1; result = -2; return result; } int ifun2 (int k) { int result; result = k + 1; result = -3; return result; } void fill_func (int nelem, int type, void *buf) { int i; switch (type) { case C_FLOAT: for (i = 0; i < nelem; i++) ((float *) buf)[i] = (float) ifun (i); break; case C_LONG: for (i = 0; i < nelem; i++) ((long *) buf)[i] = (long) ifun (i); break; case C_DBL: for (i = 0; i < nelem; i++) ((double *) buf)[i] = (double) ifun (i); break; case C_DCPL: for (i = 0; i < 2 * nelem; i++) ((double *) buf)[i] = (double) ifun (i); break; case C_SCPL: for (i = 0; i < 2 * nelem; i++) ((float *) buf)[i] = (float) ifun (i); break; case C_INT: for (i = 0; i < nelem; i++) ((int *) buf)[i] = ifun (i); break; default: GA_Error (" wrong data type ", type); } } void fill_func2 (int nelem, int type, void *buf) { /* int i,size=MA_sizeof(MT_CHAR,type,1);*/ int i; switch (type) { case C_FLOAT: for (i = 0; i < nelem; i++) ((float *) buf)[i] = (float) ifun2 (i); break; case C_LONG: for (i = 0; i < nelem; i++) ((long *) buf)[i] = (long) ifun2 (i); break; case C_DBL: for (i = 0; i < nelem; i++) ((double *) buf)[i] = (double) ifun2 (i); break; case C_DCPL: for (i = 0; i < 2 * nelem; i++) ((double *) buf)[i] = (double) ifun2 (i); break; case C_SCPL: for (i = 0; i < 2 * nelem; i++) ((float *) buf)[i] = (float) ifun2 (i); break; case C_INT: for (i = 0; i < nelem; i++) ((int *) buf)[i] = ifun2 (i); break; default: GA_Error (" wrong data type ", type); } } void fill_func3 (int nelem, int type, void *buf) /*taking the absolute of the ifun() */ { /*int i,size=MA_sizeof(MT_CHAR,type,1);*/ int i; switch (type) { case C_FLOAT: for (i = 0; i < nelem; i++) ((float *) buf)[i] = (float) GA_ABS (ifun (i)); break; case C_LONG: for (i = 0; i < nelem; i++) ((long *) buf)[i] = (long) GA_ABS (ifun (i)); break; case C_DBL: for (i = 0; i < nelem; i++) ((double *) buf)[i] = (double) GA_ABS (ifun (i)); break; case C_DCPL: for (i = 0; i < 2 * nelem - 1; i = i + 2) { ((double *) buf)[i] = sqrt ((double) (ifun (i) * ifun (i) + ifun (i + 1) * ifun (i + 1))); ((double *) buf)[i + 1] = 0.0; } break; case C_SCPL: for (i = 0; i < 2 * nelem - 1; i = i + 2) { ((float *) buf)[i] = sqrt ((float) (ifun (i) * ifun (i) + ifun (i + 1) * ifun (i + 1))); ((float *) buf)[i + 1] = 0.0; } break; case C_INT: for (i = 0; i < nelem; i++) ((int *) buf)[i] = GA_ABS (ifun (i)); break; default: GA_Error (" wrong data type ", type); } } int test_fun (int type, int dim, int OP) { DoubleComplex *dcptr; int ld[7],locp[7],hicp[7]; void *boundminx=NULL,*boundmaxx=NULL,*wolfeminx=NULL; double boundmind=0,boundmaxd=0,wolfemind=0,aboundmind=0,aboundmaxd=0,awolfemind=0; long boundminl=0,boundmaxl=0,wolfeminl=0,aboundminl=0,aboundmaxl=0,awolfeminl=0; float boundminf=0,boundmaxf=0,wolfeminf=0,aboundminf=0,aboundmaxf=0,awolfeminf=0; int boundmini=0,boundmaxi=0,wolfemini=0,aboundmini=0,aboundmaxi=0,awolfemini=0; int g_a, g_b, g_c, g_d, g_e; int g_f, g_g, g_h, g_i, g_j; int g_k, g_l, g_m, g_n; int n = N; int me = GA_Nodeid (); int i; int dims[MAXDIM]; int lo[MAXDIM], hi[MAXDIM]; int index[MAXDIM]; int index2[MAXDIM]; int index3[MAXDIM]; int block_size[MAXDIM], proc_grid[MAXDIM], proc_cnt; int needs_scaled_result; void *val=NULL; void *val3=NULL; int ival = -2; double dval = -2.0; float fval = -2.0; long lval = -2; DoubleComplex dcval; SingleComplex fcval; void *val2=NULL; void *val4=NULL; int ival2 = -3; double dval2 = -3.0; float fval2 = -3.0; long lval2 = -3; void *val5=NULL; int ival5 = 5; long lval5 = 5; double dval5 = 5.0; float fval5 = 5.0; DoubleComplex dcval2; DoubleComplex dcval3; DoubleComplex dcval4; DoubleComplex dcval5; DoubleComplex dcval6; DoubleComplex dcval7; SingleComplex fcval2; SingleComplex fcval3; SingleComplex fcval4; SingleComplex fcval5; SingleComplex fcval6; SingleComplex fcval7; void *vresult=NULL; int ivresult; double dvresult; float fvresult; long lvresult; DoubleComplex dcvresult; SingleComplex fcvresult; void *bvresult=NULL; DoubleComplex dcbvresult; SingleComplex fcbvresult; int ok = 1; int result=0,result2=0,result3=0; void *max=NULL; int imax; float fmax; long lmax; double dmax; DoubleComplex dcmax; SingleComplex fcmax; void *max2=NULL; DoubleComplex dcmax2; SingleComplex fcmax2; void *max3=NULL; DoubleComplex dcmax3; SingleComplex fcmax3; void *alpha=NULL, *beta=NULL; int ai = 1, bi = -1; long al = 1, bl = -1; float af = 1.0, bf = -1.0; double ad = 1.0, bd = -1.0; DoubleComplex adc, bdc; SingleComplex afc, bfc; double x1, x2, x3, x4; float fx1, fx2, fx3, fx4; void *resultx=NULL; long resultl=0,aresultl=0; double resultd=0,aresultd=0; float resultf=0,aresultf=0; int resulti=0,aresulti=0; adc.real = 1.0; adc.imag = 0.0; bdc.real = -1.0; bdc.imag = 0.0; afc.real = 1.0; afc.imag = 0.0; bfc.real = -1.0; bfc.imag = 0.0; needs_scaled_result = 0; dcval.real = -sin (3.0); dcval.imag = -cos (3.0); dcval2.real = 2 * sin (3.0); dcval2.imag = 2 * cos (3.0); dcval3.real = dcval.real*1.0e2; dcval3.imag = dcval.imag*1.0e2; dcval4.real = dcval2.real*1.0e2; dcval4.imag = dcval2.imag*1.0e2; dcval5.real = 5.0; dcval5.imag = 0.0; dcval6.real = dcval3.imag; dcval6.imag = dcval3.real; dcval7.real = dcval4.imag; dcval7.imag = dcval4.real; fcval.real = -sin (3.0); fcval.imag = -cos (3.0); fcval2.real = 2 * sin (3.0); fcval2.imag = 2 * cos (3.0); fcval3.real = fcval.real*1.0e2; fcval3.imag = fcval.imag*1.0e2; fcval4.real = fcval2.real*1.0e2; fcval4.imag = fcval2.imag*1.0e2; fcval5.real = 5.0; fcval5.imag = 0.0; fcval6.real = fcval3.imag; fcval6.imag = fcval3.real; fcval7.real = fcval4.imag; fcval7.imag = fcval4.real; proc_cnt=1; for (i = 0; i < dim; i++) { dims[i] = N; block_size[i] = BLOCK_SIZE; if (i= GA_Nnodes()) { proc_grid[i] = 1; } else { proc_grid[i] = GA_Nnodes()/proc_cnt; } } for (i = 0; i < dim; i++) { lo[i] = 0; hi[i] = N - 1; } #if BLOCK_CYCLIC g_a = GA_Create_handle(); GA_Set_data(g_a,dim,dims,type); GA_Set_array_name(g_a,"A"); # if USE_SCALAPACK GA_Set_block_cyclic_proc_grid(g_a,block_size,proc_grid); # else GA_Set_block_cyclic(g_a,block_size); # endif GA_Allocate(g_a); #else g_a = NGA_Create (type, dim, dims, "A", NULL); if (!g_a) GA_Error ("create failed: A", n); #endif g_b = GA_Duplicate (g_a, "B"); if (!g_b) GA_Error ("duplicate failed: B", n); g_c = GA_Duplicate (g_a, "C"); if (!g_c) GA_Error ("duplicate failed: C", n); g_d = GA_Duplicate (g_a, "D"); if (!g_d) GA_Error ("duplicate failed: D", n); g_e = GA_Duplicate (g_a, "E"); if (!g_e) GA_Error ("duplicate failed: E", n); g_f = GA_Duplicate (g_a, "F"); if (!g_f) GA_Error ("duplicate failed: F", n); g_g = GA_Duplicate (g_a, "G"); if (!g_g) GA_Error ("duplicate failed: G", n); g_h = GA_Duplicate (g_a, "H"); if (!g_h) GA_Error ("duplicate failed: H", n); g_i = GA_Duplicate (g_a, "I"); if (!g_i) GA_Error ("duplicate failed: I", n); g_j = GA_Duplicate (g_a, "J"); if (!g_j) GA_Error ("duplicate failed: J", n); g_k = GA_Duplicate (g_a, "K"); if (!g_k) GA_Error ("duplicate failed: K", n); g_l = GA_Duplicate (g_a, "L"); if (!g_l) GA_Error ("duplicate failed: L", n); g_m = GA_Duplicate (g_a, "M"); if (!g_m) GA_Error ("duplicate failed: M", n); g_n = GA_Duplicate (g_a, "N"); if (!g_m) GA_Error ("duplicate failed: N", n); /*initialize with zero */ GA_Zero (g_a); GA_Zero (g_b); GA_Zero (g_c); GA_Zero (g_d); GA_Zero (g_e); GA_Zero (g_f); GA_Zero (g_g); GA_Zero (g_h); GA_Zero (g_i); GA_Zero (g_j); GA_Zero (g_k); GA_Zero (g_l); GA_Zero (g_m); GA_Zero (g_n); switch (type) { case C_INT: val = &ival; val2 = &ival2; val5 = &ival5; vresult = &ivresult; resultx = &resulti; boundminx = &boundmini; boundmaxx = &boundmaxi; wolfeminx = &wolfemini; break; case C_DCPL: val = &dcval; val2 = &dcval2; val3 = &dcval3; val4 = &dcval4; val5 = &dcval5; vresult = &dcvresult; bvresult = &dcbvresult; break; case C_SCPL: val = &fcval; val2 = &fcval2; val3 = &fcval3; val4 = &fcval4; val5 = &fcval5; vresult = &fcvresult; bvresult = &fcbvresult; break; case C_DBL: val = &dval; val2 = &dval2; val5 = &dval5; vresult = &dvresult; resultx = &resultd; boundminx = &boundmind; boundmaxx = &boundmaxd; wolfeminx = &wolfemind; break; case C_FLOAT: val = &fval; val2 = &fval2; val5 = &fval5; vresult = &fvresult; resultx = &resultf; boundminx = &boundminf; boundmaxx = &boundmaxf; wolfeminx = &wolfeminf; break; case C_LONG: val = &lval; val2 = &lval2; val5 = &lval5; vresult = &lvresult; resultx = &resultl; boundminx = &boundminl; boundmaxx = &boundmaxl; wolfeminx = &wolfeminl; break; default: GA_Error ("wrong data type.", type); } NGA_Fill_patch (g_a, lo, hi, val); NGA_Fill_patch (g_b, lo, hi, val2); NGA_Pnfill_patch (g_j, lo, hi); switch (OP) { double tmp, tmp2; float tmpf, tmp2f; case OP_ABS: if (me == 0) printf ("Testing GA_Abs_value..."); GA_Abs_value_patch (g_a, lo, hi); ivresult = GA_ABS (ival); dvresult = GA_ABS (dval); fvresult = GA_ABS (fval); lvresult = GA_ABS (lval); #if 0 if (GA_ABS(dcval.real) >= GA_ABS(dcval.imag)) { if (dcval.real == (double)0.0) { dcvresult.real = (double)0.0; } else { x1 = dcval.imag/dcval.real; dcvresult.real = GA_ABS(dcval.real)*sqrt(((double)1.0)+(x1*x1)); } } else { x1 = dcval.real/dcval.imag; dcvresult.real = GA_ABS(dcval.imag)*sqrt(((double)1.0)+(x1*x1)); } #endif dcvresult.real = sqrt(dcval.real*dcval.real+dcval.imag*dcval.imag); dcvresult.imag = 0.0; NGA_Fill_patch (g_d, lo, hi, vresult); if (type == C_DCPL) { needs_scaled_result = 1; NGA_Fill_patch(g_f,lo,hi,val3); GA_Abs_value_patch (g_f, lo, hi); #if 0 if (GA_ABS(dcval3.real) >= GA_ABS(dcval3.imag)) { if (dcval3.real == (double)0.0) { dcbvresult.real = (double)0.0; } else { x1 = dcval3.imag/dcval3.real; dcbvresult.real = GA_ABS(dcval3.real)*sqrt(((double)1.0)+(x1*x1)); } } else { x1 = dcval3.real/dcval3.imag; dcbvresult.real = GA_ABS(dcval3.imag)*sqrt(((double)1.0)+(x1*x1)); } #endif dcbvresult.real = sqrt(dcval3.real*dcval3.real+dcval3.imag*dcval3.imag); dcbvresult.imag = (double)0.0; NGA_Fill_patch (g_i, lo, hi, bvresult); NGA_Fill_patch(g_k,lo,hi,&dcval6); GA_Abs_value_patch (g_k, lo, hi); #if 0 if (GA_ABS(dcval6.real) >= GA_ABS(dcval6.imag)) { if (dcval6.real == (double)0.0) { dcbvresult.real = (double)0.0; } else { x1 = dcval6.imag/dcval6.real; dcbvresult.real = GA_ABS(dcval6.real)*sqrt(((double)1.0)+(x1*x1)); } } else { x1 = dcval6.real/dcval6.imag; dcbvresult.real = GA_ABS(dcval6.imag)*sqrt(((double)1.0)+(x1*x1)); } #endif dcbvresult.real = sqrt(dcval6.real*dcval6.real+dcval6.imag*dcval6.imag); dcbvresult.imag = (double)0.0; NGA_Fill_patch (g_n, lo, hi, bvresult); } if (type == C_SCPL) { needs_scaled_result = 1; NGA_Fill_patch(g_f,lo,hi,val3); GA_Abs_value_patch (g_f, lo, hi); #if 0 if (GA_ABS(fcval3.real) >= GA_ABS(fcval3.imag)) { if (fcval3.real == (float )0.0) { fcbvresult.real = (float )0.0; } else { fx1 = fcval3.imag/fcval3.real; fcbvresult.real = GA_ABS(fcval3.real)*sqrt(((float)1.0)+(fx1*fx1)); } } else { fx1 = fcval3.real/fcval3.imag; fcbvresult.real = GA_ABS(fcval3.imag)*sqrt(((float)1.0)+(fx1*fx1)); } #endif fcbvresult.real = sqrt(fcval3.real*fcval3.real+fcval3.imag*fcval3.imag); fcbvresult.imag = (double)0.0; NGA_Fill_patch (g_i, lo, hi, bvresult); NGA_Fill_patch(g_k,lo,hi,&dcval6); GA_Abs_value_patch (g_k, lo, hi); #if 0 if (GA_ABS(fcval6.real) >= GA_ABS(fcval6.imag)) { if (fcval6.real == (float)0.0) { fcbvresult.real = (float)0.0; } else { fx1 = fcval6.imag/fcval6.real; fcbvresult.real = GA_ABS(fcval6.real)*sqrt(((float)1.0)+(fx1*fx1)); } } else { fx1 = fcval6.real/fcval6.imag; fcbvresult.real = GA_ABS(fcval6.imag)*sqrt(((float)1.0)+(fx1*fx1)); } #endif fcbvresult.real = sqrt(fcval6.real*fcval6.real+fcval6.imag*fcval6.imag); fcbvresult.imag = (double)0.0; NGA_Fill_patch (g_n, lo, hi, bvresult); } break; case OP_ADD_CONST: if (me == 0) printf ("Testing GA_Add_const..."); GA_Add_constant_patch (g_a, lo, hi, val2); ivresult = ival + ival2; dvresult = dval + dval2; fvresult = fval + fval2; lvresult = lval + lval2; dcvresult.real = dcval.real + dcval2.real; dcvresult.imag = dcval.imag + dcval2.imag; fcvresult.real = fcval.real + fcval2.real; fcvresult.imag = fcval.imag + fcval2.imag; NGA_Fill_patch (g_d, lo, hi, vresult); break; case OP_RECIP: if (me == 0) printf ("Testing GA_Recip..."); GA_Recip_patch (g_a, lo, hi); ivresult = ((int)1) / ival; dvresult = ((double)1.0) / dval; fvresult = ((float)1.0) / fval; lvresult = ((long)1) / lval; if (GA_ABS(dcval.real) >= GA_ABS(dcval.imag)) { if (dcval.real != (double)0.0) { tmp = dcval.imag/dcval.real; tmp2 = ((double)1.0)/((((double)1.0)+(tmp*tmp))*dcval.real); dcvresult.real = tmp2; dcvresult.imag = -tmp * tmp2; } else { printf("Error in testing GA_Recip dcval = 0.0\n"); } } else { tmp = dcval.real/dcval.imag; tmp2 = ((double)1.0)/((((double)1.0)+(tmp*tmp))*dcval.imag); dcvresult.real = tmp * tmp2; dcvresult.imag = -tmp2; } NGA_Fill_patch (g_d, lo, hi, vresult); if (type == C_DCPL) { needs_scaled_result = 1; NGA_Fill_patch (g_f, lo, hi, val3); GA_Recip_patch (g_f, lo, hi); if (GA_ABS(dcval3.real) >= GA_ABS(dcval3.imag)) { if (dcval3.real == (double)0.0) { printf("Error testing GA_Recip, dcval3.real = 0.0\n"); } else { tmp = dcval3.imag/dcval3.real; tmp2 = ((double)1.0)/((((double)1.0)+(tmp*tmp))*dcval3.real); dcbvresult.real = tmp2; dcbvresult.imag = -tmp * tmp2; } } else { tmp = dcval3.real/dcval3.imag; tmp2 = ((double)1.0)/((((double)1.0)+(tmp*tmp))*dcval3.imag); dcbvresult.real = tmp * tmp2; dcbvresult.imag = -tmp2; } NGA_Fill_patch (g_i, lo, hi, bvresult); NGA_Fill_patch(g_k,lo,hi,&dcval6); GA_Recip_patch (g_k, lo, hi); if (GA_ABS(dcval6.real) >= GA_ABS(dcval6.imag)) { if (dcval6.real == (double)0.0) { printf("Error testing GA_Recip, dcval6.real = 0.0\n"); } else { tmp = dcval6.imag/dcval6.real; tmp2 = ((double)1.0)/((((double)1.0)+(tmp*tmp))*dcval6.real); dcbvresult.real = tmp2; dcbvresult.imag = -tmp * tmp2; } } else { tmp = dcval6.real/dcval6.imag; tmp2 = ((double)1.0)/((((double)1.0)+(tmp*tmp))*dcval6.imag); dcbvresult.real = tmp * tmp2; dcbvresult.imag = -tmp2; } NGA_Fill_patch (g_n, lo, hi, bvresult); } if (type == C_SCPL) { needs_scaled_result = 1; NGA_Fill_patch (g_f, lo, hi, val3); GA_Recip_patch (g_f, lo, hi); if (GA_ABS(fcval3.real) >= GA_ABS(fcval3.imag)) { if (fcval3.real == (float )0.0) { printf("Error testing GA_Recip, fcval3.real = 0.0\n"); } else { tmpf = fcval3.imag/fcval3.real; tmp2f = ((float)1.0)/((((float)1.0)+(tmpf*tmpf))*fcval3.real); fcbvresult.real = tmp2f; fcbvresult.imag = -tmpf * tmp2f; } } else { tmpf = fcval3.real/fcval3.imag; tmp2f = ((float)1.0)/((((float)1.0)+(tmpf*tmpf))*fcval3.imag); fcbvresult.real = tmpf * tmp2f; fcbvresult.imag = -tmp2f; } NGA_Fill_patch (g_i, lo, hi, bvresult); NGA_Fill_patch(g_k,lo,hi,&dcval6); GA_Recip_patch (g_k, lo, hi); if (GA_ABS(fcval6.real) >= GA_ABS(fcval6.imag)) { if (fcval6.real == (float)0.0) { printf("Error testing GA_Recip, fcval6.real = 0.0\n"); } else { tmpf = fcval6.imag/fcval6.real; tmp2f = ((float)1.0)/((((float)1.0)+(tmpf*tmpf))*fcval6.real); fcbvresult.real = tmp2f; fcbvresult.imag = -tmpf * tmp2f; } } else { tmpf = fcval6.real/fcval6.imag; tmp2f = ((float)1.0)/((((float)1.0)+(tmpf*tmpf))*fcval6.imag); fcbvresult.real = tmpf * tmp2f; fcbvresult.imag = -tmp2f; } NGA_Fill_patch (g_n, lo, hi, bvresult); } break; case OP_ELEM_MULT: if (me == 0) printf ("Testing GA_Elem_multiply..."); NGA_Fill_patch (g_b, lo, hi, val2); /* g_c is different from g_a or g_b*/ GA_Elem_multiply_patch (g_a, lo, hi, g_b, lo, hi, g_c, lo, hi); ivresult = ival * ival2; dvresult = dval * dval2; fvresult = fval * fval2; lvresult = lval * lval2; dcvresult.real = dcval.real * dcval2.real - dcval.imag * dcval2.imag; dcvresult.imag = dcval.real * dcval2.imag + dcval2.real * dcval.imag; NGA_Fill_patch (g_d, lo, hi, vresult); break; case OP_ELEM_DIV: if (me == 0) printf ("Testing GA_Elem_divide..."); NGA_Fill_patch (g_b, lo, hi, val2); GA_Elem_divide_patch (g_a, lo, hi, g_b, lo, hi, g_c, lo, hi); ivresult = ival / ival2; dvresult = dval / dval2; fvresult = fval / fval2; lvresult = lval / lval2; dcvresult.real = 0.0; dcvresult.imag = 0.0; if (GA_ABS(dcval2.real) >= GA_ABS(dcval2.imag)) { if (dcval2.real != (double)0.0) { tmp = dcval2.imag/dcval2.real; tmp2 = ((double)1.0)/(dcval2.real*(((double)1.0)+(tmp*tmp))); dcvresult.real = (dcval.real + dcval.imag*tmp)*tmp2; dcvresult.imag = (dcval.imag - dcval.real*tmp)*tmp2; } else { printf("Error in testing GA_Elem_divide dcval = 0.0\n"); } } else { tmp = dcval2.real/dcval2.imag; tmp2 = 1.0/(dcval2.imag*(1.0+(tmp*tmp))); dcvresult.real = (dcval.real*tmp + dcval.imag)*tmp2; dcvresult.imag = (dcval.imag*tmp - dcval.real)*tmp2; } NGA_Fill_patch (g_d, lo, hi, vresult); if (type == C_DCPL) { needs_scaled_result = 1; NGA_Fill_patch (g_f, lo, hi, val3); NGA_Fill_patch (g_g, lo, hi, val4); GA_Elem_divide_patch (g_f, lo, hi, g_g, lo, hi, g_h, lo, hi); dcbvresult.real = (double)0.0; dcbvresult.imag = (double)0.0; if (GA_ABS(dcval4.real) >= GA_ABS(dcval4.imag)) { if (dcval4.real != (double)0.0) { tmp = dcval4.imag/dcval4.real; tmp2 = ((double)1.0)/(dcval4.real*(((double)1.0)+(tmp*tmp))); dcbvresult.real = (dcval3.real + dcval3.imag*tmp)*tmp2; dcbvresult.imag = (dcval3.imag - dcval3.real*tmp)*tmp2; } else { printf("Error in testing GA_Elem_divide dcval4 = 0.0\n"); } } else { tmp = dcval4.real/dcval4.imag; tmp2 = ((double)1.0)/(dcval4.imag*(((double)1.0)+(tmp*tmp))); dcbvresult.real = (dcval3.real*tmp + dcval3.imag)*tmp2; dcbvresult.imag = (dcval3.imag*tmp - dcval3.real)*tmp2; } NGA_Fill_patch (g_i, lo, hi, bvresult); NGA_Fill_patch (g_k, lo, hi, &dcval6); NGA_Fill_patch (g_l, lo, hi, &dcval7); GA_Elem_divide_patch (g_k, lo, hi, g_l, lo, hi, g_m, lo, hi); dcbvresult.real = (double)0.0; dcbvresult.imag = (double)0.0; if (GA_ABS(dcval7.real) >= GA_ABS(dcval7.imag)) { if (dcval7.real != (double)0.0) { tmp = dcval7.imag/dcval7.real; tmp2 = ((double)1.0)/(dcval7.real*(((double)1.0)+(tmp*tmp))); dcbvresult.real = (dcval6.real + dcval6.imag*tmp)*tmp2; dcbvresult.imag = (dcval6.imag - dcval6.real*tmp)*tmp2; } else { printf("Error in testing GA_Elem_divide dcval7 = 0.0\n"); } } else { tmp = dcval7.real/dcval7.imag; tmp2 = ((double)1.0)/(dcval7.imag*(((double)1.0)+(tmp*tmp))); dcbvresult.real = (dcval6.real*tmp + dcval6.imag)*tmp2; dcbvresult.imag = (dcval6.imag*tmp - dcval6.real)*tmp2; } NGA_Fill_patch (g_n, lo, hi, bvresult); } if (type == C_SCPL) { needs_scaled_result = 1; NGA_Fill_patch (g_f, lo, hi, val3); NGA_Fill_patch (g_g, lo, hi, val4); GA_Elem_divide_patch (g_f, lo, hi, g_g, lo, hi, g_h, lo, hi); fcbvresult.real = (float)0.0; fcbvresult.imag = (float)0.0; if (GA_ABS(fcval4.real) >= GA_ABS(fcval4.imag)) { if (fcval4.real != (float)0.0) { tmpf = fcval4.imag/fcval4.real; tmp2f = ((float)1.0)/(fcval4.real*(((float)1.0)+(tmpf*tmpf))); fcbvresult.real = (fcval3.real + fcval3.imag*tmpf)*tmp2f; fcbvresult.imag = (fcval3.imag - fcval3.real*tmpf)*tmp2f; } else { printf("Error in testing GA_Elem_divide fcval4 = 0.0\n"); } } else { tmpf = fcval4.real/fcval4.imag; tmp2f = ((float)1.0)/(fcval4.imag*(((float)1.0)+(tmpf*tmpf))); fcbvresult.real = (fcval3.real*tmpf + fcval3.imag)*tmp2f; fcbvresult.imag = (fcval3.imag*tmpf - fcval3.real)*tmp2f; } NGA_Fill_patch (g_i, lo, hi, bvresult); NGA_Fill_patch (g_k, lo, hi, &dcval6); NGA_Fill_patch (g_l, lo, hi, &dcval7); GA_Elem_divide_patch (g_k, lo, hi, g_l, lo, hi, g_m, lo, hi); fcbvresult.real = (float)0.0; fcbvresult.imag = (float)0.0; if (GA_ABS(fcval7.real) >= GA_ABS(fcval7.imag)) { if (fcval7.real != (float)0.0) { tmpf = fcval7.imag/fcval7.real; tmp2f = ((float)1.0)/(fcval7.real*(((float)1.0)+(tmpf*tmpf))); fcbvresult.real = (fcval6.real + fcval6.imag*tmpf)*tmp2f; fcbvresult.imag = (fcval6.imag - fcval6.real*tmpf)*tmp2f; } else { printf("Error in testing GA_Elem_divide fcval7 = 0.0\n"); } } else { tmpf = fcval7.real/fcval7.imag; tmp2f = ((float)1.0)/(fcval7.imag*(((float)1.0)+(tmpf*tmpf))); fcbvresult.real = (fcval6.real*tmpf + fcval6.imag)*tmp2f; fcbvresult.imag = (fcval6.imag*tmpf - fcval6.real)*tmp2f; } NGA_Fill_patch (g_n, lo, hi, bvresult); } break; case OP_ELEM_MAX: if (me == 0) printf ("Testing GA_Elem_maximum..."); /*NGA_Fill_patch (g_b, lo, hi, val2);*/ GA_Elem_maximum_patch (g_a, lo, hi, g_b, lo, hi, g_c, lo, hi); ivresult = GA_MAX (ival, ival2); dvresult = GA_MAX (dval, dval2); fvresult = GA_MAX (fval, fval2); lvresult = GA_MAX (lval, lval2); tmp = GA_MAX(GA_ABS(dcval.real),GA_ABS(dcval.imag)); tmp2 = GA_MAX(GA_ABS(dcval2.real),GA_ABS(dcval2.imag)); tmp = GA_MAX(tmp,tmp2); dcvresult.real = dcval.real; dcvresult.imag = dcval.imag; if (tmp != 0.0) { tmp = ((double)1.0)/tmp; x1 = dcval.real*tmp; x2 = dcval.imag*tmp; x3 = dcval2.real*tmp; x4 = dcval2.imag*tmp; tmp = x1*x1 + x2*x2; tmp2 = x3*x3 + x4*x4; if (tmp2 > tmp) { dcvresult.real = dcval2.real; dcvresult.imag = dcval2.imag; } } NGA_Fill_patch (g_d, lo, hi, vresult); if (type == C_DCPL) { needs_scaled_result = 1; NGA_Fill_patch (g_f, lo, hi, val3); NGA_Fill_patch (g_g, lo, hi, val4); GA_Elem_maximum_patch (g_f, lo, hi, g_g, lo, hi, g_h, lo, hi); tmp = GA_MAX(GA_ABS(dcval3.real),GA_ABS(dcval3.imag)); tmp2 = GA_MAX(GA_ABS(dcval4.real),GA_ABS(dcval4.imag)); tmp = GA_MAX(tmp,tmp2); dcvresult.real = dcval3.real; dcvresult.imag = dcval3.imag; if (tmp != 0.0) { tmp = ((double)1.0)/tmp; x1 = dcval3.real*tmp; x2 = dcval3.imag*tmp; x3 = dcval4.real*tmp; x4 = dcval4.imag*tmp; tmp = x1*x1 + x2*x2; tmp2 = x3*x3 + x4*x4; if (tmp2 > tmp) { dcvresult.real = dcval4.real; dcvresult.imag = dcval4.imag; } } NGA_Fill_patch (g_i, lo, hi, vresult); NGA_Fill_patch (g_k, lo, hi, &dcval6); NGA_Fill_patch (g_l, lo, hi, &dcval7); GA_Elem_maximum_patch (g_k, lo, hi, g_l, lo, hi, g_m, lo, hi); tmp = GA_MAX(GA_ABS(dcval6.real),GA_ABS(dcval6.imag)); tmp2 = GA_MAX(GA_ABS(dcval7.real),GA_ABS(dcval7.imag)); tmp = GA_MAX(tmp,tmp2); dcvresult.real = dcval6.real; dcvresult.imag = dcval6.imag; if (tmp != 0.0) { tmp = ((double)1.0)/tmp; x1 = dcval6.real*tmp; x2 = dcval6.imag*tmp; x3 = dcval7.real*tmp; x4 = dcval7.imag*tmp; tmp = x1*x1 + x2*x2; tmp2 = x3*x3 + x4*x4; if (tmp2 > tmp) { dcvresult.real = dcval7.real; dcvresult.imag = dcval7.imag; } } NGA_Fill_patch (g_n, lo, hi, vresult); } break; case OP_ELEM_MIN: if (me == 0) printf ("Testing GA_Elem_minimum..."); NGA_Fill_patch (g_b, lo, hi, val2); GA_Elem_minimum_patch (g_a, lo, hi, g_b, lo, hi, g_c, lo, hi); ivresult = GA_MIN (ival, ival2); dvresult = GA_MIN (dval, dval2); fvresult = GA_MIN (fval, fval2); lvresult = GA_MIN (lval, lval2); tmp = GA_MAX(GA_ABS(dcval.real),GA_ABS(dcval.imag)); tmp2 = GA_MAX(GA_ABS(dcval2.real),GA_ABS(dcval2.imag)); tmp = GA_MAX(tmp,tmp2); dcvresult.real = dcval.real; dcvresult.imag = dcval.imag; if (tmp != 0.0) { tmp = 1.0/tmp; x1 = dcval.real*tmp; x2 = dcval.imag*tmp; x3 = dcval2.real*tmp; x4 = dcval2.imag*tmp; tmp = x1*x1 + x2*x2; tmp2 = x3*x3 + x4*x4; if (tmp2 < tmp) { dcvresult.real = dcval2.real; dcvresult.imag = dcval2.imag; } } NGA_Fill_patch (g_d, lo, hi, vresult); if (type == C_SCPL) { needs_scaled_result = 1; NGA_Fill_patch (g_f, lo, hi, val3); NGA_Fill_patch (g_g, lo, hi, val4); GA_Elem_minimum_patch (g_f, lo, hi, g_g, lo, hi, g_h, lo, hi); tmpf = GA_MAX(GA_ABS(fcval3.real),GA_ABS(fcval3.imag)); tmp2f = GA_MAX(GA_ABS(fcval4.real),GA_ABS(fcval4.imag)); tmpf = GA_MAX(tmpf,tmp2f); fcvresult.real = fcval3.real; fcvresult.imag = fcval3.imag; if (tmpf != 0.0) { tmpf = ((float)1.0)/tmpf; fx1 = fcval3.real*tmpf; fx2 = fcval3.imag*tmpf; fx3 = fcval4.real*tmpf; fx4 = fcval4.imag*tmpf; tmpf = fx1*fx1 + fx2*fx2; tmp2f = fx3*fx3 + fx4*fx4; if (tmp2f < tmpf) { fcvresult.real = fcval4.real; fcvresult.imag = fcval4.imag; } } NGA_Fill_patch (g_i, lo, hi, vresult); NGA_Fill_patch (g_k, lo, hi, &dcval6); NGA_Fill_patch (g_l, lo, hi, &dcval7); GA_Elem_minimum_patch (g_k, lo, hi, g_l, lo, hi, g_m, lo, hi); tmpf = GA_MAX(GA_ABS(fcval6.real),GA_ABS(fcval6.imag)); tmp2f = GA_MAX(GA_ABS(fcval7.real),GA_ABS(fcval7.imag)); tmpf = GA_MAX(tmpf,tmp2f); fcvresult.real = fcval6.real; fcvresult.imag = fcval6.imag; if (tmpf != 0.0) { tmpf = ((float)1.0)/tmpf; fx1 = fcval6.real*tmpf; fx2 = fcval6.imag*tmpf; fx3 = fcval7.real*tmpf; fx4 = fcval7.imag*tmpf; tmpf = fx1*fx1 + fx2*fx2; tmp2f = fx3*fx3 + fx4*fx4; if (tmp2f < tmpf) { fcvresult.real = fcval7.real; fcvresult.imag = fcval7.imag; } } NGA_Fill_patch (g_n, lo, hi, vresult); } break; case OP_STEP_MAX: if (me == 0) printf ("Testing GA_Step_max..."); if (type != C_DCPL || type != C_SCPL) { /*NGA_Fill_patch (g_b, lo, hi, val2);*/ GA_Abs_value_patch (g_b, lo, hi); GA_Step_max_patch (g_b, lo, hi, g_j, lo, hi, resultx); /* printf(" GA_Stepmax_patch type = %d, resultx = %le\n",type,resultx); fflush(stdout); */ /* It would be more robust to use GA_Elem_min_patch here to determine the minimum g_j value, but for now we set it to -2. */ aresulti = ((int)(GA_ABS(ival2)/GA_ABS(ival))) - resulti; aresultd = GA_ABS(dval2/dval) - resultd; aresultf = ((float)GA_ABS(fval2/fval)) - resultf; aresultl = ((long)(GA_ABS(lval2)/GA_ABS(lval))) - resultl; } break; case OP_STEP_BOUND_INFO: if (me == 0) printf ("Testing GA_Step_bound_info..."); if (type != C_DCPL || type != C_SCPL) { /*NGA_Fill_patch (g_b, lo, hi, val2);*/ GA_Abs_value_patch (g_b, lo, hi); GA_Abs_value_patch (g_a, lo, hi); /*GA_Abs_value_patch (g_j, lo, hi);*/ NGA_Fill_patch(g_c, lo, hi, val5); GA_Step_bound_info_patch (g_b,lo,hi, g_j,lo,hi, g_a,lo,hi, g_c,lo,hi, boundminx,wolfeminx,boundmaxx); /* printf(" GA_Stepmax2_patch type = %d, resultx = %le\n",type,resultx); fflush(stdout); */ /* This is currently hardwired. would need to change if val, val2 or val5 change. */ switch (type) { case C_INT: awolfemini = ((int)(((int)1)/((int)2))) - wolfemini; aboundmini = ((int)(((int)1)/((int)2))) - boundmini; aboundmaxi = (int)GA_INFINITY_I - boundmaxi; break; case C_DBL: awolfemind = (((double)1.0)/((double)2.0)) - wolfemind; aboundmind = (((double)1.0)/((double)2.0)) - boundmind; aboundmaxd = (double)GA_INFINITY_D - boundmaxd; break; case C_FLOAT: awolfeminf = (((float)1.0)/((float)2.0)) - wolfeminf; aboundminf = (((float)1.0)/((float)2.0)) - boundminf; aboundmaxf = (float)GA_INFINITY_F - boundmaxf; break; case C_LONG: awolfeminl = ((long)(((long)1)/((long)2))) - wolfeminl; aboundminl = ((long)(((long)1)/((long)2))) - boundminl; aboundmaxl = (long)GA_INFINITY_L - boundmaxl; break; default: GA_Error ("GA_step_bound_info wrong data type.", type); } } break; default: GA_Error ("test_function: wrong operation.", OP); } switch (type) { case C_INT: alpha = &ai; beta = &bi; break; case C_DCPL: alpha = &adc; beta = &bdc; break; case C_SCPL: alpha = &afc; beta = &bfc; break; case C_DBL: alpha = &ad; beta = &bd; break; case C_FLOAT: alpha = ⁡ beta = &bf; break; case C_LONG: alpha = &al; beta = &bl; break; default: GA_Error ("wrong data type.", type); } if (OP < 4) { /* Binary operation. */ NGA_Add_patch (alpha, g_c, lo, hi, beta, g_d, lo, hi, g_e, lo, hi); if (needs_scaled_result == 1) { NGA_Add_patch (alpha, g_h, lo, hi, beta, g_i, lo, hi, g_j, lo, hi); NGA_Add_patch (alpha, g_m, lo, hi, beta, g_n, lo, hi, g_n, lo, hi); } } else { /* Unary operation. */ if (OP < 7) { NGA_Add_patch (alpha, g_a, lo, hi, beta, g_d, lo, hi, g_e, lo, hi); if (needs_scaled_result == 1) { NGA_Add_patch (alpha, g_f, lo, hi, beta, g_i, lo, hi, g_j, lo, hi); NGA_Add_patch (alpha, g_k, lo, hi, beta, g_n, lo, hi, g_n, lo, hi); } } /* Else it was a reduction operation (one of the step_max functions). */ } switch (type) { case C_INT: max = &imax; break; case C_DCPL: max = &dcmax; max2 = &dcmax2; max3 = &dcmax3; break; case C_SCPL: max = &fcmax; max2 = &fcmax2; max3 = &fcmax3; break; case C_DBL: max = &dmax; break; case C_FLOAT: max = &fmax; break; case C_LONG: max = &lmax; break; default: GA_Error ("wrong data type.", type); } /* for unary and binary operators extract the maximum difference between computed and correct solutions. */ if (OP < 7) { NGA_Select_elem (g_e, "max", max, index); if (needs_scaled_result == 1) { NGA_Select_elem (g_j, "max", max2, index2); NGA_Select_elem (g_n, "max", max3, index3); } } /* NGA_Select_elem (g_e, "min", min, index);*/ if (OP < 7) { /* Binary or Unary operators. */ switch (type) { double r, im; float rf, imf; case C_INT: /* result = (int)(imax - imin);*/ result = imax; if (result != (int)0) result = 1; break; case C_DCPL: /* r = dcmax.real - dcmin.real; im = dcmax.imag - dcmin.imag; */ r = dcmax.real; im = dcmax.imag; if ((GA_ABS(r) + GA_ABS(im)) < THRESH) { result = 0; } else { result = 1; } if (needs_scaled_result == 1) { result2 = 0; r = dcmax2.real; im = dcmax2.imag; if ((GA_ABS(r) + GA_ABS(im)) < THRESH) { result2 = 0; } else { result2 = 1; } r = dcmax3.real; im = dcmax3.imag; if ((GA_ABS(r) + GA_ABS(im)) < THRESH) { result3 = 0; } else { result3 = 1; } result = result | result2 | result3; } break; case C_SCPL: /* rf = fcmax.real - fcmin.real; imf = fcmax.imag - fcmin.imag; */ rf = fcmax.real; imf = fcmax.imag; if ((GA_ABS(rf) + GA_ABS(imf)) == (float)0.0) { result = 0; } else { result = 1; } if (needs_scaled_result == 1) { result2 = 0; rf = fcmax2.real; imf = fcmax2.imag; if ((GA_ABS(rf) + GA_ABS(imf)) == (float)0.0) { result2 = 0; } else { result2 = 1; } rf = fcmax3.real; imf = fcmax3.imag; if ((GA_ABS(rf) + GA_ABS(imf)) == (float)0.0) { result3 = 0; } else { result3 = 1; } result = result | result2 | result3; } break; case C_DBL: if (dmax == (double)0.0) { result = 0; } else { result = 1; } break; case C_FLOAT: if (fmax == (float)0.0) { result = 0; } else { result = 1; } break; case C_LONG: if (lmax == (long)0) { result = 0; } else { result = 1; } break; default: GA_Error ("wrong data type.", type); } } else { /* A reduction operation, Step_max or Step_bound_info. */ if (type == C_DCPL || type == C_SCPL) { result = 0; } else { if (OP == OP_STEP_MAX) { /* Step_max */ switch (type) { case C_INT: if (aresulti == 0) { result = 0; } else { result = 1; } break; case C_DBL: if (aresultd == (double)0.0) { result = 0; } else { result = 1; } break; case C_FLOAT: if (aresultf == (float)0.0) { result = 0; } else { result = 1; } break; case C_LONG: if (aresultl == (long)0) { result = 0; } else { result = 1; } break; default: GA_Error ("Stepmax op, wrong data type.", type); } } else { /* OP = 8 so Step_bound_info */ switch (type) { case C_INT: if (awolfemini == 0) { result = 0; } else { result = 1; } if (aboundmini == 0) { result2 = 0; } else { result2 = 1; } if (aboundmaxi == 0) { result3 = 0; } else { result3 = 1; } break; case C_DBL: if (awolfemind == ((double)0.0)) { result = 0; } else { result = 1; } if (aboundmind == ((double)0.0)) { result2 = 0; } else { result2 = 1; } if (aboundmaxd == ((double)0.0)) { result3 = 0; } else { result3 = 1; } break; case C_FLOAT: if (awolfeminf == ((float)0.0)) { result = 0; } else { result = 1; } if (aboundminf == ((float)0.0)) { result2 = 0; } else { result2 = 1; } if (aboundmaxf == ((float)0.0)) { result3 = 0; } else { result3 = 1; } break; case C_LONG: if (awolfeminl == ((long)0)) { result = 0; } else { result = 1; } if (aboundminl == ((long)0)) { result2 = 0; } else { result2 = 1; } if (aboundmaxl == ((long)0)) { result3 = 0; } else { result3 = 1; } break; default: GA_Error ("Stepmax op, wrong data type.", type); } result = result | result2 | result3; } } } if (me == 0) { if (MISMATCHED (result, 0)) { printf ("is not ok\n"); GA_Error("aborting", 1); } else { printf ("is ok.\n"); } } /* NGA_Print_patch(g_a, lo, hi, 1); NGA_Print_patch(g_d, lo, hi, 1); NGA_Print_patch(g_e, lo, hi, 1); */ GA_Destroy (g_a); GA_Destroy (g_b); GA_Destroy (g_c); GA_Destroy (g_d); GA_Destroy (g_e); GA_Destroy (g_f); GA_Destroy (g_g); GA_Destroy (g_h); GA_Destroy (g_i); GA_Destroy (g_j); GA_Destroy (g_k); GA_Destroy (g_l); GA_Destroy (g_m); GA_Destroy (g_n); return ok; } int main (argc, argv) int argc; char **argv; { int heap = 20000, stack = 20000; int me, nproc; int d, op; int ok = 1; MP_INIT(argc,argv); GA_INIT(argc,argv); /* initialize GA */ me = GA_Nodeid (); nproc = GA_Nnodes (); if (me == 0) { if (GA_Uses_fapi ()) GA_Error ("Program runs with C array API only", 1); printf ("Using %ld processes\n", (long) nproc); fflush (stdout); } heap /= nproc; stack /= nproc; if (!MA_init (C_DBL, stack, heap)) GA_Error ("MA_init failed", stack + heap); /* initialize memory allocator */ /* op = 8;*/ for (op = 0; op < 9; op++) { /*for (d = 1; d < 2; d++)*/ for (d = 1; d < 4; d++) { if (me == 0) printf ("\n\ndim =%d\n\n", d); if (me == 0) printf ("\ndata type: INT\t\t"); ok = test_fun (C_INT, d, op); if (me == 0) printf ("\ndata type: double\t"); ok = test_fun (C_DBL, d, op); if (me == 0) printf ("\ndata type: float\t"); ok = test_fun (C_FLOAT, d, op); if (me == 0) printf ("\ndata type: long\t\t"); ok = test_fun (C_LONG, d, op); if (op < 7) { if (me == 0) printf ("\ndata type: double complex\t"); ok = test_fun (C_DCPL, d, op); } } } if (me==0) printf("\nAll tests successful\n"); GA_Terminate(); MP_FINALIZE(); return 0; } /*\ FILL IN ARRAY WITH Varying VALUEs. (from 0 to product of dims-1). For complex arrays make the real and imaginary parts equal. \*/ void nga_vfill_patch(Integer *g_a, Integer *lo, Integer *hi) { Integer i, j; Integer ndim, dims[MAXDIM], type; Integer loA[MAXDIM], hiA[MAXDIM], ld[MAXDIM]; void *data_ptr; Integer idx, n1dim; Integer bvalue[MAXDIM], bunit[MAXDIM], baseld[MAXDIM]; Integer me= pnga_nodeid(); int local_sync_begin,local_sync_end; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)GA_Sync(); GA_PUSH_NAME("nga_vfill_patch"); pnga_inquire(*g_a, &type, &ndim, dims); /* get limits of VISIBLE patch */ pnga_distribution(*g_a, me, loA, hiA); /* determine subset of my local patch to access */ /* Output is in loA and hiA */ if(pnga_patch_intersect(lo, hi, loA, hiA, ndim)){ /* get data_ptr to corner of patch */ /* ld are leading dimensions INCLUDING ghost cells */ pnga_access_ptr(*g_a, loA, hiA, &data_ptr, ld); /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((int *)data_ptr)[idx+j] = (int)(idx+j); } break; case C_DCPL: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) { ((DoubleComplex *)data_ptr)[idx+j].real = (double)(idx+j); ((DoubleComplex *)data_ptr)[idx+j].imag = (double)(idx+j); } } break; case C_SCPL: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) { ((SingleComplex *)data_ptr)[idx+j].real = (float)(idx+j); ((SingleComplex *)data_ptr)[idx+j].imag = (float)(idx+j); } } break; case C_DBL: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((double*)data_ptr)[idx+j] = (double)(idx+j); } break; case C_FLOAT: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((float *)data_ptr)[idx+j] = (float)(idx+j); } break; case C_LONG: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((long *)data_ptr)[idx+j] = (long)(idx+j); } break; default: GA_Error(" wrong data type ",type); } /* release access to the data */ pnga_release_update(*g_a, loA, hiA); } GA_POP_NAME; if(local_sync_end)GA_Sync(); } /*\ Utility function to actually set positive/negative values \*/ void ngai_do_pnfill_patch(Integer type, Integer ndim, Integer *loA, Integer *hiA, Integer *ld, void *data_ptr) { Integer i, j; Integer idx, n1dim; Integer bvalue[MAXDIM], bunit[MAXDIM], baseld[MAXDIM]; /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((int *)data_ptr)[idx+j] = (int)(((idx+j)&3)-2); } break; case C_DCPL: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) { ((DoubleComplex *)data_ptr)[idx+j].real = (double)(((idx+j)&3)-2); ((DoubleComplex *)data_ptr)[idx+j].imag = (double)(((idx+j)&3)-2); } } break; case C_SCPL: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) { ((SingleComplex *)data_ptr)[idx+j].real = (float)(((idx+j)&3)-2); ((SingleComplex *)data_ptr)[idx+j].imag = (float)(((idx+j)&3)-2); } } break; case C_DBL: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((double*)data_ptr)[idx+j] = (double)(((idx+j)&3)-2); } break; case C_FLOAT: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((float *)data_ptr)[idx+j] = (float)(((idx+j)&3)-2); } break; case C_LONG: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((long *)data_ptr)[idx+j] = (long)(((idx+j)&3)-2); } break; default: GA_Error(" wrong data type ",type); } } /*\ FILL IN ARRAY WITH Varying positive and negative VALUEs. (from -2 to 1). For complex arrays make the real and imaginary parts equal. \*/ void nga_pnfill_patch(Integer *g_a, Integer *lo, Integer *hi) { Integer i; Integer ndim, dims[MAXDIM], type; Integer loA[MAXDIM], hiA[MAXDIM], ld[MAXDIM]; void *data_ptr; Integer me= pnga_nodeid(); Integer num_blocks; int local_sync_begin,local_sync_end; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)GA_Sync(); GA_PUSH_NAME("nga_pnfill_patch"); pnga_inquire(*g_a, &type, &ndim, dims); num_blocks = pnga_total_blocks(*g_a); if (num_blocks < 0) { /* get limits of VISIBLE patch */ pnga_distribution(*g_a, me, loA, hiA); /* determine subset of my local patch to access */ /* Output is in loA and hiA */ if(pnga_patch_intersect(lo, hi, loA, hiA, ndim)){ /* get data_ptr to corner of patch */ /* ld are leading dimensions INCLUDING ghost cells */ pnga_access_ptr(*g_a, loA, hiA, &data_ptr, ld); ngai_do_pnfill_patch(type, ndim, loA, hiA, ld, data_ptr); /* release access to the data */ pnga_release_update(*g_a, loA, hiA); } } else { Integer offset, j, jtmp, chk; Integer loS[MAXDIM]; Integer nproc = pnga_nnodes(); /* using simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(*g_a)){ for (i=me; i dims[i]) hiA[i] = dims[i]; if (hiA[i] < loA[i]) chk = 0; } /* loA is changed by pnga_patch_intersect, so save a copy */ for (j=0; j= blocks[i] && i #endif #include #include #include int main(int argc, char **argv) { int size_dst = 15; int g_a = 0; int I_NEG_ONE = -1; long L_NEG_ONE = -1; long long LL_NEG_ONE = -1; int FIVE = 5; int TEN = 10; int lo; int hi; int *ptr; int i; MP_INIT(argc,argv); GA_INIT(argc,argv); for (i=0; i<3; ++i) { if (0 == i) { g_a = NGA_Create(C_INT, 1, &size_dst, "dst", NULL); GA_Fill(g_a, &I_NEG_ONE); } else if (1 == i) { g_a = NGA_Create(C_LONG, 1, &size_dst, "dst", NULL); GA_Fill(g_a, &L_NEG_ONE); } else if (2 == i) { g_a = NGA_Create(C_LONGLONG, 1, &size_dst, "dst", NULL); GA_Fill(g_a, &LL_NEG_ONE); } GA_Sync(); GA_Print(g_a); NGA_Print_patch(g_a, &FIVE, &TEN, 0); NGA_Print_patch(g_a, &FIVE, &TEN, 1); NGA_Distribution(g_a, GA_Nodeid(), &lo, &hi); NGA_Access(g_a, &lo, &hi, &ptr, NULL); printf("[%d] (%d)=%d\n", GA_Nodeid(), lo, *ptr); NGA_Release(g_a, &lo, &hi); } GA_Terminate(); MP_FINALIZE(); exit(EXIT_SUCCESS); } ga-5-3/global/testing/mulmatpatch.F0000640005473000001440000002673211417373344016160 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c $Id: mulmatpatch.F,v 1.6 2005-11-23 10:25:18 manoj Exp $ #if (defined(CRAY) && !defined(__crayx1)) || defined(KSR) # define xgemm SGEMM # define ygemm CGEMM #else # define xgemm TEST_DGEMM # define ygemm TEST_ZGEMM #endif #if defined(FUJITSU) || defined(CRAY_YMP) # define THRESH 1.0d-10 #else # define THRESH 1.0d-20 #endif #define MISMATCH(x,y) abs(x-y)/max(1,abs(x)).gt.THRESH #define NMAX 10 c c program test implicit none #include "mafdecls.fh" #include "global.fh" logical status integer bufsize, gasize c c*** Initialize a message passing library c #include "mp3.fh" c call ga_initialize() if(ga_nodeid().eq.0)then print *,' GA initialized' call ffflush(6) endif c c we want to force distribution of innermost loop in nga_mulmat_patch c by providing less buffer memory than needed c if(ga_uses_ma()) then gasize = (NMAX**4 * 3)/ga_nnodes() else gasize =0 endif bufsize = (NMAX/2 + 1)*(NMAX/3 + 1)*2 + ((NMAX/2 + 1)**2) bufsize = bufsize*6/7 status = ma_init(MT_DBL, 10, gasize+bufsize+500000) if (.not. status)call ga_error( 'ma_init failed', -1) if(ga_nodeid().eq.0)then print *,' ' print *,'CHECKING MATRIX MULTIPLICATION FOR PATCHES ' c print *, 'gasize and bufsize are ', gasize, bufsize print *,' ' endif call dpatch_test() call dpatch_test2() c if(ga_nodeid().eq.0) print *,'All tests successful ' c call ga_terminate() c call MP_FINALIZE() end subroutine dpatch_test() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n,m, dim, dim1 parameter (n = NMAX) parameter (m = n*n) parameter (dim = 4) parameter (dim1 = 3) double precision a(n,n), b(n,n), c(n,n), buf(m), val double precision alpha, beta integer nproc, me integer i, j, ailo, ajlo, bilo, bjlo, base, iran integer alo(dim), ahi(dim), ald(dim1), chunk(dim) integer blo(dim), bhi(dim) integer clo(dim), chi(dim) integer bufld(dim) integer g_a1, g_b1, g_c1 integer rows, cols, loop logical status, dist_same iran(i) = int(drand(0)*real(i)) + 1 dist_same = .false. c me = ga_nodeid() nproc = ga_nnodes() c do j = 1, n do i = 1, n a(i,j) = i-1 + (j-1)*n b(i,j) = i+j enddo enddo c ailo = iran(n/2) ajlo = iran(n/2) bilo = iran(n/2) bjlo = iran(n/2) c do i = 1, dim alo(i) = 1 ahi(i) = n chunk(i) = -1 if (i.ne.dim) ald(i) = n enddo c status = nga_create(MT_DBL, dim, ahi, 'a1', chunk, g_a1) if (.not. status) then write(6,*) ' nga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c if(dist_same) then status = ga_duplicate(g_a1, g_b1, 'a1_duplicated') if(.not.ga_compare_distr(g_a1, g_b1)) $ call ga_error("g_b1 distribution different",0) status = ga_duplicate(g_a1, g_c1, 'a1_duplicated_again') if(.not.ga_compare_distr(g_a1, g_c1)) $ call ga_error("g_c1 distribution different",0) else chunk(dim) = n status = nga_create(MT_DBL, dim, ahi, 'b1', chunk, g_b1) if (.not. status) call ga_error('nga_create failed:b1',0) chunk(dim) = 0 chunk(dim1) = n status = nga_create(MT_DBL, dim, ahi, 'c1', chunk, g_c1) if (.not. status) call ga_error('nga_create failed:c1',0) endif c if (me .eq. 0) then print *, ' ' write(6,*)'> Checking nga_matmul_patch ... ' call ffflush(6) endif c alo(1) = 1 ahi(1) = n blo(1) = 1 bhi(1) = n bufld(1) = n do j = 2, dim-1 alo(j) = j ahi(j) = j blo(j) = j bhi(j) = j clo(j) = j chi(j) = j bufld(j) = 1 enddo do j = 1+me, n, nproc alo(dim) = j ahi(dim) = j blo(dim) = j bhi(dim) = j call nga_put(g_a1,alo,ahi,a(1,j),bufld) call nga_put(g_b1,blo,bhi,b(1,j),bufld) enddo c call ga_sync() alo(1) = ailo ahi(1) = ailo+1 c ahi(1) = ailo+n/2 alo(dim) = ajlo ahi(dim) = ajlo c ahi(dim) = ajlo+n/3 blo(1) = bilo bhi(1) = bilo c bhi(1) = bilo+n/3 blo(dim) = bjlo bhi(dim) = bjlo c bhi(dim) = bjlo+n/2 clo(1) = bilo chi(1) = bilo+1 c chi(1) = bilo+n/2 clo(dim) = bjlo chi(dim) = bjlo c chi(dim) = bjlo+n/2 c call nga_matmul_patch('n','n', 1d0, 0d0, $ g_a1, alo, ahi, $ g_b1, blo, bhi, $ g_c1, clo, chi) call xgemm('n','n',2,2,1,1d0,a(ailo,ajlo), n, $ b(bilo,bjlo),n, 0d0, c, n) c call xgemm('n','n',n/2+1,n/2+1,n/3+1,1d0,a(ailo,ajlo), n, c $ b(bilo,bjlo),n, 0d0, c, n) c bufld(1) = n/2 + 1 call nga_get(g_c1,clo,chi,buf,bufld) base = 0 do j = 1, 1 if(Mod(j,nproc).eq.me) then do i = 1, 2 base = base+1 if(ABS(buf(base)- c(i,j)).gt.1d-8) then print *,me, ' error ',i,j, buf(base), c(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo c call ga_sync() if (me .eq. 0) then write(6,*)' a*b: OK ' call ffflush(6) endif c call ga_sync() alo(1) = ailo ahi(1) = ailo+n/2 alo(dim) = ajlo ahi(dim) = ajlo+n/3 blo(1) = bilo bhi(1) = bilo+n/3 blo(dim) = bjlo bhi(dim) = bjlo+n/2 clo(1) = bilo chi(1) = bilo+n/2 clo(dim) = bjlo chi(dim) = bjlo+n/2 c call nga_matmul_patch('n','n', 1d0, 0d0, $ g_a1, alo, ahi, $ g_b1, blo, bhi, $ g_c1, clo, chi) call xgemm('n','n',n/2+1,n/2+1,n/3+1,1d0,a(ailo,ajlo), n, $ b(bilo,bjlo),n, 0d0, c, n) c bufld(1) = n/2 + 1 call nga_get(g_c1,clo,chi,buf,bufld) base = 0 do j = 1, 1+n/2 if(Mod(j,nproc).eq.me) then do i = 1, 1+n/2 base = base+1 if(ABS(buf(base)- c(i,j)).gt.1d-8) then print *,me, ' error ',i,j, buf(base), c(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo c call ga_sync() if (me .eq. 0) then write(6,*)' a*b: OK ' call ffflush(6) endif c call ga_sync() call nga_matmul_patch('t','n', 1d0, 0d0, $ g_a1, alo, ahi, $ g_b1, blo, bhi, $ g_c1, clo, chi) call xgemm('t','n',n/2+1,n/2+1,n/3+1,1d0,a(ajlo,ailo), n, $ b(bilo,bjlo),n, 0d0, c, n) call nga_get(g_c1,clo,chi,buf,bufld) base = 0 do j = 1, 1+n/2 if(Mod(j,nproc).eq.me) then do i = 1, 1+n/2 base = base+1 if(ABS(buf(base)- c(i,j)).gt.1d-8) then print *,me, ' error ',i,j, buf(base), c(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo c call ga_sync() if (me .eq. 0) then write(6,*)' trans(a)*b: OK ' call ffflush(6) endif c call ga_sync() call nga_matmul_patch('n','t', 1d0, 0d0, $ g_a1, alo, ahi, $ g_b1, blo, bhi, $ g_c1, clo, chi) call xgemm('n','t',n/2+1,n/2+1,n/3+1,1d0,a(ailo,ajlo), n, $ b(bjlo,bilo),n, 0d0, c, n) call nga_get(g_c1,clo,chi,buf,bufld) base = 0 do j = 1, 1+n/2 if(Mod(j,nproc).eq.me) then do i = 1, 1+n/2 base = base+1 if(ABS(buf(base)- c(i,j)).gt.1d-8) then print *,me, ' error ',i,j, buf(base), c(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo c call ga_sync() if (me .eq. 0) then write(6,*)' a*trans(b): OK ' call ffflush(6) endif c call nga_matmul_patch('t','t', 1d0, 0d0, $ g_a1, alo, ahi, $ g_b1, blo, bhi, $ g_c1, clo, chi) call xgemm('t','t',n/2+1,n/2+1,n/3+1,1d0,a(ajlo,ailo), n, $ b(bjlo,bilo),n, 0d0, c, n) call nga_get(g_c1,clo,chi,buf,bufld) base = 0 do j = 1, 1+n/2 if(Mod(j,nproc).eq.me) then do i = 1, 1+n/2 base = base+1 if(ABS(buf(base)- c(i,j)).gt.1d-8) then print *,me, ' error ',i,j, buf(base), c(i,j) call ga_error('exiting ...',0) endif enddo else base = base +n/2+1 endif enddo c call ga_sync() if (me .eq. 0) then write(6,*)' trans(a)*trans(b): OK ' call ffflush(6) endif c status = ga_destroy(g_a1) status = status .and. ga_destroy(g_b1) status = status .and. ga_destroy(g_c1) if(.not. status) print *, 'ga_destroy failed' c end subroutine dpatch_test2() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" integer n,m, dim, dim1 parameter (n = 10) parameter (dim = 3) parameter (dim1 = 2) double precision alpha, beta, dot integer nproc, me integer i, j, ailo, ajlo, bilo, bjlo, base, iran integer alo(dim), ahi(dim), ald(dim1), chunk(dim) integer blo(dim), bhi(dim) integer clo(dim), chi(dim) integer g_a, g_b, g_c logical status c me = ga_nodeid() nproc = ga_nnodes() c do i = 1, dim chunk(i) = -1 chi(i) =n alo(i) =1 blo(i) =1 clo(i) =1 if (i.ne.dim) ald(i) = n enddo c ahi(1)=n ahi(2)=1 status = nga_create(MT_DBL, dim1, ahi, 'a', chunk, g_a) if(.not. status) call ga_error('create 1 failed',0) c status = nga_create(MT_DBL, dim1, ahi, 'b', chunk, g_b) if(.not. status) call ga_error('create 2 failed',0) c status = nga_create(MT_DBL, dim, chi, 'c', chunk, g_c) if(.not. status) call ga_error('create 2 failed',0) c call ga_fill(g_a,1d0) call ga_fill(g_b,1d0) call ga_zero(g_c) if(me.eq.0) print *,' [1:N,1:N,1:1]=[1,N]x[N,1]^t' chi(dim) = 1 bhi(1)=1 bhi(2)=n call nga_matmul_patch('n','t', 1d0, 0d0, $ g_a, alo, ahi, $ g_b, blo, bhi, $ g_c, clo, chi) c c call nga_print_patch(g_c,clo,chi) dot = nga_ddot_patch(g_c,'n', clo, chi, g_c,'n', clo, chi) if(abs(dot- 1d0*n*n) .gt. 0.01) then print *, 'error ', dot, n*n else if(me.eq.0)print *,' OK' endif status = ga_destroy(g_a) status = status .and. ga_destroy(g_b) status = status .and. ga_destroy(g_c) if(.not. status) print *, 'ga_destroy failed' c end ga-5-3/global/testing/ipc.clean.c0000640005473000001440000002331211701667223015517 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_IPC_H # include #endif #if HAVE_SYS_SEM_H # include #endif #if HAVE_STDIO_H # include #endif #if HAVE_ERRNO_H # include #endif #if HAVE_STDLIB_H # include #endif #if !HAVE_UNION_SEMUN union semun { int val; /* value for SETVAL */ struct semid_ds *buf; /* buffer for IPC_STAT, IPC_SET */ unsigned short int *array; /* array for GETALL, SETALL */ struct seminfo *__buf; /* buffer for IPC_INFO */ }; #endif #define MAX_SEM 10 struct sembuf sops; int semaphoreID; int sem_init=0; #define P_ -1 #define V_ 1 #define P(s) \ {\ sops.sem_num = (s);\ sops.sem_op = P_;\ sops.sem_flg = 0; \ semop(semaphoreID,&sops,1);\ } #define V(s) \ {\ sops.sem_num = (s);\ sops.sem_op = V_;\ sops.sem_flg = 0; \ semop(semaphoreID,&sops,1);\ } int SemGet(num_sem) int num_sem; { if(num_sem<1)return(0); if(num_sem>MAX_SEM)return(0); semaphoreID = semget(IPC_PRIVATE,num_sem,0600); if(semaphoreID<0){ fprintf(stderr,"SemGet failed \n"); perror((char*)0); } sem_init = num_sem; return(semaphoreID); } void SemInit(id,value) int id,value; { union semun semctl_arg; fprintf(stderr,"SemInit %d %d\n",id,value); semctl_arg.val = value; if(id >= sem_init || id<0 ) fprintf(stderr,"attempt to intialize invalid semaphore %d %d\n", id,sem_init); else if( semctl(semaphoreID, id,SETVAL,semctl_arg )<0){ fprintf(stderr,"SemInit error\n"); perror((char*)0); } fprintf(stderr,"exiting SemInit \n"); } /* release semaphore(s) */ void SemDel() { semctl(semaphoreID,NULL,IPC_RMID,NULL); } /*\ * (char *) CreateSharedRegion((long *) id, (long *) size) * long DetachSharedRegion((long) id, (long) size, (char *) addr) * long DeleteSharedRegion((long) id) * long DeleteSharedAll() * (char *) AttachSharedRegion((long) id, (long) size)) \*/ void Error( str, code) char *str; int code; { fprintf(stderr,"%s %d\n",str, code); exit(0); } #ifdef ALLIANT #include extern char *valloc(); char *CreateSharedRegion(id, size) long *size, *id; { struct timeval tp; struct timezone tzp; char *temp; int status; /* Have to round up to a multiple of page size before allocating on a page boundary */ *size = ( (*size + (PAGE_SIZE -1)) / PAGE_SIZE ) * PAGE_SIZE; if ( (temp = valloc((unsigned) *size)) == (char *) NULL) Error("CreateSharedRegion: failed in valloc", (long) 0); /* Now have to get a unique id ... try using time of day in centi-sec */ if ( (status = gettimeofday(&tp, &tzp)) != 0) Error("CreateSharedRegion: error from gettimeofday", (long) status); *id = (tp.tv_sec + 10000*tp.tv_usec) & 0xffffff; /* Now make the region */ if ( (status = create_shared_region(*id, temp, *size, 0)) != 0) Error("CreateSharedRegion: error from create_shared_region", (long) status); return temp; } long DetachSharedRegion( id, size, addr) long id, size; char *addr; { return detach_shared_region( id, addr, size); } long DeleteSharedRegion(id) long id; { return delete_shared_region(id); } char *AttachSharedRegion(id, size) long id, size; { char *temp; int status; if (size != (((size + (PAGE_SIZE -1)) / PAGE_SIZE) * PAGE_SIZE)) Error("AttachSharedRegion: input size is not multiple of PAGE_SIZE", (long) size); if ( (temp = valloc((unsigned) size)) == (char *) NULL) Error("AttachSharedRegion: failed in valloc", (long) 0); /* Now try to attach */ if ( (status = attach_shared_region(id, temp, size)) != 0) Error("AttachSharedRegion: error from attach_shared_region", (long) status); return temp; } #endif #if defined(SEQUENT) || defined(ENCORE) #ifdef SEQUENT #define SHMALLOC shmalloc #define SHFREE shfree #endif #ifdef ENCORE #define SHMALLOC share_malloc #define SHFREE share_free #endif extern char *SHMALLOC(); extern int SHFREE(); #define MAX_ADDR 20 static int next_id = 0; /* Keep track of id */ static char *shaddr[MAX_ADDR]; /* Keep track of addresses */ char *CreateSharedRegion(id, size) long *size, *id; { char *temp; if (next_id >= MAX_ADDR) Error("CreateSharedRegion: too many shared regions", (long) next_id); if ( (temp = SHMALLOC((unsigned) *size)) == (char *) NULL) Error("CreateSharedRegion: failed in SHMALLOC", (long) *size); *id = next_id++; shaddr[*id] = temp; return temp; } long DetachSharedRegion( id, size, addr) long id, size; char *addr; { /* This needs improving to make more robust */ return SHFREE(addr); } long DeleteSharedRegion(id) long id; { /* This needs improving to make more robust */ return SHFREE(shaddr[id]); } char *AttachSharedRegion(id, size) long id, size; { Error("AttachSharedRegion: cannot do this on SEQUENT or BALANCE", (long) -1); } #endif /* Bizarre sequent has sysv semaphores but proprietary shmem */ /* Encore has sysv shmem but is limited to total of 16384bytes! */ #if defined(SYSV) && !defined(SEQUENT) && !defined(ENCORE) #include #include #include #include #include #ifdef SUN extern char *shmat(); #endif char *CreateSharedRegion(id, size) long *size, *id; { char *temp; /* Create the region */ if ( (*id = shmget(IPC_PRIVATE, (int) *size, (int) (IPC_CREAT | 00600))) < 0 ){ fprintf(stderr,"id=%d size=%d\n",*id, (int) *size); perror((char*)0); Error("CreateSharedRegion: failed to create shared region", (long) *id); } /* Attach to the region */ if ( (temp = shmat((int) *id, (char *) NULL, 0)) == (char *) NULL){ perror((char*)0); Error("CreateSharedRegion: failed to attach to shared region", (long) 0); } return temp; } long DetachSharedRegion( id, size, addr) long id, size; char *addr; { return shmdt(addr); } long DeleteSharedRegion(id) long id; { return shmctl((int) id, IPC_RMID, (struct shmid_ds *) NULL); } char *AttachSharedRegion(id, size) long id, size; { char *temp; if ( (temp = shmat((int) id, (char *) NULL, 0)) == (char *) NULL) Error("AttachSharedRegion: failed to attach to shared region", (long) 0); return temp; } #endif #if defined(CONVEX) || defined(APOLLO) #include #include #include #include extern char *strdup(); extern char *mktemp(); #define MAX_ID 20 static struct id_list_struct { char *addr; /* pointer to shmem region */ unsigned size; /* size of region */ char *filename; /* associated file name */ int fd; /* file descriptor */ int status; /* = 1 if in use */ } id_list[MAX_ID]; static int next_id = 0; static char template[] = "/tmp/SHMEM.XXXXXX"; char *CreateSharedRegion(id, size) long *size, *id; { char *temp; if (next_id == MAX_ID) Error("CreateSharedRegion: MAX_ID exceeded ", MAX_ID); *id = next_id; #ifdef APOLLO id_list[*id].fd = -1; #else if ( (temp = strdup(template)) == (char *) NULL) Error("CreateSharedRegion: failed to get space for filename", 0); /* Generate scratch file to identify region ... need to know this name to attach to the region so need to establish some policy before AttachtoSharedRegion can work */ id_list[*id].filename = mktemp(temp); if ( (id_list[*id].fd = open(id_list[*id].filename, O_RDWR|O_CREAT, 0666)) < 0) Error("CreateSharedRegion: failed to open temporary file",0); #endif id_list[*id].addr = mmap((caddr_t) 0, (unsigned *) size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, id_list[*id].fd, 0); #ifdef APOLLO if (id_list[*id].addr == (char *) 0) Error("CreateSharedRegion: mmap failed",-1); #else if (id_list[*id].addr == (char *) -1) Error("CreateSharedRegion: mmap failed",-1); #endif id_list[*id].size = *size; id_list[*id].status = 1; next_id++; return id_list[*id].addr; } long DetachSharedRegion( id, size, addr) long id, size; char *addr; { if ( (id < 0) || (id > next_id)) return (long) -1; if (id_list[id].status != 1) return (long) -1; id_list[id].status = 0; return (long) munmap(id_list[id].addr, 0); } long DeleteSharedRegion(id) long id; { if ( (id < 0) || (id > next_id) ) return (long) -1; if (id_list[id].status != 1) return (long) -1; (void) DetachSharedRegion(id, 0, (char *) 0); if (id_list[id].fd >= 0) { (void) close(id_list[id].fd); (void) unlink(id_list[id].filename); } return (long) 0; } char *AttachSharedRegion(id, size) long id, size; { Error("AttachSharedRegion: need mods for this to work on CONVEX", (long) -1); } long DeleteSharedAll() { long id; long status = 0; for (id=0; id] \n single argument is interpreted as with = 0 assumed\n"); return 1; } if(argc=2) sscanf(argv[1],"%d",&to); else { sscanf(argv[1],"%d",&from); sscanf(argv[2],"%d",&to); } if(from>to && to <0){ printf("wrong arguments\n"); return 1; } for(i=from;i<=to;i++){ semaphoreID =i; SemDel(); DeleteSharedRegion((long)i); } return 0; } ga-5-3/global/testing/ga-mpi.c0000640005473000001440000001207411643112123015025 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /**************************************************************************** * program: ga-mpi.c * date: Tue Oct 3 12:31:59 PDT 1995 * author: Jarek Nieplocha * purpose: This program demonstrates interface between GA and MPI. * For a given square matrix, it creates a vector that contains maximum * elements for each matrix row. MPI group communication is used. * * notes: The program can run in two modes: * 1. Using TCGMSG calls available through the TCGMSG-MPI library * and MPI. In this mode initialization must be done with * the TCGMSG PBEGIN call. * 2. Using MPI calls only -- preprocessor symbol MPI must be defined. * ****************************************************************************/ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #include #include "ga.h" #include "globalp.h" #include "macdecls.h" #include "mp3.h" #define N 100 /* dimension of matrices */ void do_work() { int ZERO=0; /* useful constants */ int g_a, g_b; int n=N, ndim=2,type=MT_F_DBL,dims[2]={N,N},coord[2]; int me=GA_Nodeid(), nproc=GA_Nnodes(); int row, i, j; int lo[2], hi[2]; /* Note: on all current platforms DoublePrecision = double */ DoublePrecision buf[N], *max_row=NULL; MPI_Comm ROW_COMM; int ilo,ihi, jlo,jhi, ld, prow, pcol; int root=0, grp_me=-1; if(me==0)printf("Creating matrix A\n"); dims[0]=n; dims[1]=n; g_a = NGA_Create(type, ndim, dims, "A", NULL); if(!g_a) GA_Error("create failed: A",n); if(me==0)printf("OK\n"); if(me==0)printf("Creating matrix B\n"); dims[0]=n; g_b = NGA_Create(type, 1, dims, "B", NULL); if(!g_b) GA_Error("create failed: B",n); if(me==0)printf("OK\n"); GA_Zero(g_a); /* zero the matrix */ if(me==0)printf("Initializing matrix A\n"); /* fill in matrix A with values: A(i,j) = (i+j) */ for(row=me; row0){ max_row=(DoublePrecision*)malloc(sizeof(DoublePrecision)*(ihi-ilo+1)); if (!max_row) GA_Error("malloc 3 failed",(ihi-ilo+1)); for (i=0; i<(ihi-ilo+1); i++) { max_row[i] = 0.0; } } NGA_Proc_topology(g_a, me, coord); /* block coordinates */ prow = coord[0]; pcol = coord[1]; if(me==0)printf("Splitting comm according to distribution of A\n"); /* GA on SP1 requires synchronization before & after message-passing !!*/ GA_Sync(); if(me==0)printf("Computing max row elements\n"); /* create communicator for processes that 'own' A[:,jlo:jhi] */ MPI_Barrier(MPI_COMM_WORLD); if(pcol < 0 || prow <0) MPI_Comm_split(MPI_COMM_WORLD,MPI_UNDEFINED,MPI_UNDEFINED, &ROW_COMM); else MPI_Comm_split(MPI_COMM_WORLD, (int)pcol, (int)prow, &ROW_COMM); if(ROW_COMM != MPI_COMM_NULL){ double *ptr; MPI_Comm_rank(ROW_COMM, &grp_me); /* each process computes max elements in the block it 'owns' */ lo[0]=ilo; hi[0]=ihi; lo[1]=jlo; hi[1]=jhi; NGA_Access(g_a, lo, hi, &ptr, &ld); for(i=0; i Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c c Check that it is indeed zero c call ga_get(g_a, 1, n, 1, n, b, n) call ga_sync() do i = 1, n do j = 1, n if(b(i,j).ne.(0d0,0d0)) then write(6,*) me,' zero ', i, j, b(i,j) call ffflush(6) c call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_sync() c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format(/'> Checking disjoint put ... ') call ffflush(6) endif call ga_sync() c inc = (n-1)/4 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) endif ij = ij + 1 enddo enddo call ga_sync() c c All nodes check all of a c call ga_get(g_a, 1, n, 1, n, b, n) c do i = 1, n do j = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' put ', me, i, j, a(i,j),b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif call ga_sync() c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format(/'> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_sync() c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif do j = jlo, jhi do i = ilo, ihi if (b(i,j) .ne. a(i,j)) then write(6,*)'error:', i, j, b(i,j), a(i,j) call ga_error('... exiting ',0) endif enddo enddo c enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) call ffflush(6) endif call ga_sync() c c Check the ga_copy function c if (me .eq. 0) then write(6,*) write(6,*)'> Checking copy' write(6,*) call ffflush(6) endif call ga_sync() #ifndef MIRROR if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) #else if(iproc.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) #endif call ga_copy(g_a, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' copy ', me, i, j, a(i,j), b(i,j) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy is OK ' write(6,*) endif c c Check scatter&gather c call ga_sync() if (me .eq. 0) then write(6,*) '> Checking scatter/gather (might be slow)... ' call ffflush(6) if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_sync() c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do j = 1, 10 call ga_sync() #ifndef MIRROR itmp = iran(nproc)-1 if(me.eq.itmp) then #else itmp = iran(lprocs)-1 if(iproc.eq.itmp) then #endif do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo enddo call ga_gather(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,v(loop),1) if(v(loop) .ne. a(ilo,jlo))then write(6,*)me,' gather ', ilo,',',jlo,',', a(ilo,jlo) & ,' ',v(loop) call ffflush(6) call ga_error('... exiting ',0) endif enddo endif enddo c if (me.eq.0) then write(6,*) write(6,*) ' gather is OK' write(6,*) call ffflush(6) endif c do j = 1,10 call ga_sync() #ifndef MIRROR if(me.eq.iran(ga_nnodes())-1) then #else if(me.eq.iran(lprocs)-1) then #endif do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo v(loop) = (1d0,-1d0) *(ilo+jlo) enddo call ga_scatter(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,w(loop),1) if(w(loop) .ne. (1d0,-1d0) *(ilo+jlo) )then write(6,*)me,' scatter ', ilo,',',jlo,',',w(loop) & ,' ', (1d0,-1d0) *(ilo+jlo) call ffflush(6) endif enddo endif call ga_sync() enddo c if (me.eq.0) then write(6,*) write(6,*) ' scatter is OK' write(6,*) endif c c Delete the global arrays c status = ga_destroy(g_b) status = ga_destroy(g_a) c istatus = nga_deregister_type(scpl_type) c end c----------------------------------------------------------------- subroutine check_complex() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n,m parameter (n = 60) parameter (m = 2*n) double complex a(n,n), b(n,n), v(m),w(m) #ifdef MIRROR integer ndim, dims(2), chunk(2), p_mirror #else # ifdef NEW_API integer ndim, dims(2), chunk(2), p_mirror # endif #endif integer iv(m), jv(m) logical status integer g_a, g_b integer iran, i,j, loop,nloop,maxloop, ilo, ihi, jlo, jhi, itmp integer nproc, me, int, ij, inc, ii, jj, nnodes parameter (maxloop = 100) integer maxproc parameter (maxproc = 4096) double precision crap, real double precision nwords double complex x, sum1, sum2, factor integer lprocs, inode, iproc, lproc integer dcpl_type, istatus #ifdef USE_RESTRICTED integer num_rstrctd integer rstrctd_list(maxproc/2) #endif #ifdef BLOCK_CYCLIC integer block_size(2), proc_grid(2) #endif intrinsic int iran(i) = int(drand(0)*real(i)) + 1 c nproc = ga_nnodes() me = ga_nodeid() inode = ga_cluster_nodeid() lprocs = ga_cluster_nprocs(inode) nnodes = ga_cluster_nnodes() iproc = mod(me,lprocs) nloop = Min(maxloop,n) #ifdef USE_RESTRICTED num_rstrctd = nproc/2 if (num_rstrctd.eq.0) num_rstrctd = 1 do i = 1, num_rstrctd rstrctd_list(i) = (num_rstrctd/2) + i-1 end do #endif #ifdef BLOCK_CYCLIC block_size(1) = 32 block_size(2) = 32 #ifdef USE_SCALAPACK_DISTR if (mod(nproc,2).ne.0) + call ga_error("Available procs must be divisible by 2",0) proc_grid(1) = 2 proc_grid(2) = nproc/2 #endif #endif c c a() is a local copy of what the global array should start as c do j = 1, n do i = 1, n #ifndef MIRROR a(i,j) = cmplx(dble(i-1), dble((j-1)*n)) #else a(i,j) = cmplx(dble(inode),0.0d00) + + cmplx(dble(i-1), dble((j-1)*n)) #endif b(i,j) = cmplx(-1d0,1d0) enddo enddo c c Create type c dcpl_type = nga_register_type(16) c c Create a global array c c print *,ga_nodeid(), ' creating array' call ffflush(6) c call setdbg(1) #ifdef NEW_API ndim = 2 dims(1) = n dims(2) = n g_a = ga_create_handle() call ga_set_data(g_a,ndim,dims,dcpl_type) call ga_set_array_name(g_a,'a') #ifdef USE_RESTRICTED call ga_set_restricted(g_a, rstrctd_list, num_rstrctd) #endif #ifdef BLOCK_CYCLIC #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_a,block_size,proc_grid) #else call ga_set_block_cyclic(g_a,block_size) #endif #endif # ifdef MIRROR p_mirror = ga_pgroup_get_mirror() call ga_set_pgroup(g_a,p_mirror) # endif status = ga_allocate(g_a) #else # ifndef MIRROR status = ga_create(dcpl_type, n, n, 'a', 0, 0, g_a) # else ndim = 2 dims(1) = n dims(2) = n chunk(1) = 0 chunk(2) = 0 p_mirror = ga_pgroup_get_mirror() status = nga_create_config(dcpl_type, ndim, dims, 'a', chunk, + p_mirror, g_a) # endif #endif if (.not. status) then write(6,*) ' ga_create failed' call ga_error('... exiting ',0) endif #ifdef NEW_API g_b = ga_create_handle() call ga_set_data(g_b,ndim,dims,dcpl_type) call ga_set_array_name(g_b,'b') #ifdef BLOCK_CYCLIC #ifdef USE_SCALAPACK_DISTR call ga_set_block_cyclic_proc_grid(g_b,block_size,proc_grid) #else call ga_set_block_cyclic(g_b,block_size) #endif #endif # ifdef MIRROR call ga_set_pgroup(g_b,p_mirror) # endif if (.not.ga_allocate(g_b)) then #else # ifndef MIRROR if (.not. ga_create(dcpl_type, n, n, 'b', 0, 0, g_b)) then # else if (.not. nga_create_config(dcpl_type, ndim, dims, 'b', chunk, _ p_mirror, g_b)) then # endif #endif call ga_error('ga_create failed for second array ',0) endif #ifndef MIRROR call ga_distribution(g_a,me,ilo, ihi, jlo, jhi) #else lproc = me - ga_cluster_procid(inode,0) call ga_distribution(g_a, lproc, ilo, ihi, jlo, jhi) #endif call ga_sync() c c Zero the array c if (me .eq. 0) then write(6,21) 21 format('> Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c c Check that it is indeed zero c call ga_get(g_a, 1, n, 1, n, b, n) call ga_sync() do i = 1, n do j = 1, n if(b(i,j).ne.(0d0,0d0)) then write(6,*) me,' zero ', i, j, b(i,j) call ffflush(6) c call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_sync() c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format('> Checking disjoint put ... ') call ffflush(6) endif call ga_sync() c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) endif ij = ij + 1 enddo enddo call ga_sync() c c All nodes check all of a c call util_qfill(n*n, (0d0,0d0), b, 1) call ga_get(g_a, 1, n, 1, n, b, n) c do i = 1, n do j = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' put ', me, i, j, a(i,j),b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif call ga_sync() c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format('> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_sync() c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c call util_qfill(n*n, (0.0d0,0d0), b, 1) call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif do j = jlo, jhi do i = ilo, ihi if (b(i,j) .ne. a(i,j)) then write(6,*)'error:', i, j, b(i,j), a(i,j) call ga_error('... exiting ',0) endif enddo enddo c enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) call ffflush(6) endif call ga_sync() c c Check the ga_copy function c if (me .eq. 0) then write(6,*) write(6,*)'> Checking copy' write(6,*) call ffflush(6) endif call ga_sync() #ifndef MIRROR if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) #else if(iproc.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) #endif call ga_copy(g_a, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' copy ', me, i, j, a(i,j), b(i,j) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy is OK ' write(6,*) endif c c Check scatter&gather c call ga_sync() if (me .eq. 0) then write(6,*) '> Checking scatter/gather (might be slow)... ' call ffflush(6) if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_sync() c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do j = 1, 10 call ga_sync() #ifndef MIRROR itmp = iran(nproc)-1 if(me.eq.itmp) then #else itmp = iran(lprocs)-1 if(iproc.eq.itmp) then #endif do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo enddo call ga_gather(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,v(loop),1) if(v(loop) .ne. a(ilo,jlo))then write(6,*)me,' gather ', ilo,',',jlo,',', a(ilo,jlo) & ,' ',v(loop) call ffflush(6) call ga_error('... exiting ',0) endif enddo endif enddo c if (me.eq.0) then write(6,*) write(6,*) ' gather is OK' write(6,*) call ffflush(6) endif c do j = 1,10 call ga_sync() #ifndef MIRROR if(me.eq.iran(ga_nnodes())-1) then #else if(me.eq.iran(lprocs)-1) then #endif do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo v(loop) = (1d0,-1d0) *(ilo+jlo) enddo call ga_scatter(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,w(loop),1) if(w(loop) .ne. (1d0,-1d0) *(ilo+jlo) )then write(6,*)me,' scatter ', ilo,',',jlo,',',w(loop) & ,' ', (1d0,-1d0) *(ilo+jlo) call ffflush(6) endif enddo endif call ga_sync() enddo c if (me.eq.0) then write(6,*) write(6,*) ' scatter is OK' write(6,*) endif c c Delete the global arrays c status = ga_destroy(g_b) status = ga_destroy(g_a) c istatus = nga_deregister_type(dcpl_type) c end subroutine util_qfill(n,val,a,ia) implicit none double complex a(*), val integer n, ia, i c c initialise double complex array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end ga-5-3/global/testing/patch2.F0000640005473000001440000000767411723243564015026 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif # define THRESH 1.0d-10 #define MISMATCH(x,y) abs(x-y)/max(1,abs(x)).gt.THRESH c c#define BLOCK_CYCLIC c#define USE_SCALAPACK_DISTR #ifdef USE_SCALAPACK_DISTR #define BLOCK_CYCLIC #endif c program test implicit none #include "mafdecls.fh" #include "global.fh" integer TESTDIM parameter(TESTDIM = 256) logical status integer g_a, g_b, g_c double precision alpha, beta integer ndim, adims(2), bdims(2), cdims(2), tlo(2), thi(2) integer alo(2), ahi(2), blo(2), bhi(2), clo(2), chi(2) integer ald, bld, cld, i_inc, j_inc double precision val integer me, nproc, i, j, ii, jj GA_ACCESS_INDEX_TYPE idx, inc c c*** Initialize a message passing library c #include "mp3.fh" c call nga_initialize() if(ga_nodeid().eq.0)then write(6,*) write(6,'(a)') ' GA initialized' write(6,*) call ffflush(6) endif c status = ma_init(MT_DBL, 500000, 900000/ga_nnodes()) if (.not. status)call ga_error( 'ma_init failed', -1) c me = ga_nodeid() c c create test arrays c g_a = nga_create_handle() ndim = 2 adims(1) = TESTDIM adims(2) = TESTDIM call nga_set_data(g_a,ndim,adims,MT_DBL) status = ga_allocate(g_a) c g_b = nga_create_handle() ndim = 2 bdims(1) = TESTDIM + 1 bdims(2) = TESTDIM + 1 call nga_set_data(g_b,ndim,bdims,MT_DBL) status = ga_allocate(g_b) c g_c = nga_create_handle() ndim = 2 cdims(1) = TESTDIM + 2 cdims(2) = TESTDIM + 2 call nga_set_data(g_c,ndim,cdims,MT_DBL) status = ga_allocate(g_c) c c initialize a and b c i_inc = TESTDIM/2 j_inc = TESTDIM/2 c call nga_distribution(g_a,me,alo,ahi) call nga_access(g_a,alo,ahi,idx,ald) do j = alo(2), ahi(2) do i = alo(1), ahi(1) dbl_mb(idx) = dble((j-1)*adims(1) + i-1) idx = idx + 1 end do end do call nga_release(g_a, alo, ahi) c call nga_distribution(g_b,me,blo,bhi) call nga_access(g_b,blo,bhi,idx,bld) do j = blo(2), bhi(2) do i = blo(1), bhi(1) dbl_mb(idx) = dble((j-1)*bdims(1) + i-1) idx = idx + 1 end do end do call nga_release(g_b, blo, bhi) c alo(1) = TESTDIM/4 alo(2) = TESTDIM/4 ahi(1) = alo(1) + i_inc ahi(2) = alo(2) + j_inc blo(1) = TESTDIM/4 + 1 blo(2) = TESTDIM/4 + 1 bhi(1) = blo(1) + i_inc bhi(2) = blo(2) + j_inc clo(1) = TESTDIM/4 + 2 clo(2) = TESTDIM/4 + 2 chi(1) = clo(1) + i_inc chi(2) = clo(2) + j_inc alpha = 1.0d00 beta = 1.0d00 c call nga_add_patch(alpha, g_a, alo, ahi, beta, g_b, blo, bhi, + g_c, clo, chi) c call ga_print(g_a) c call ga_print(g_b) c call ga_print(g_c) c c check C for answer c call nga_distribution(g_c,me,tlo,thi) if (tlo(1).lt.clo(1)) tlo(1) = clo(1) if (tlo(2).lt.clo(2)) tlo(2) = clo(2) if (thi(1).gt.chi(1)) thi(1) = chi(1) if (thi(2).gt.chi(2)) thi(2) = chi(2) c if (tlo(1).le.thi(1).and.tlo(2).le.thi(2)) then call nga_access(g_c,tlo,thi,idx,cld) do j = tlo(2), thi(2) jj = j - tlo(2) do i = tlo(1), thi(1) ii = i - tlo(1) val = alpha*dble((j-3)*adims(1)+i-3) + + beta*dble((j-2)*bdims(1)+i-2) if (dbl_mb(idx+jj*cld+ii).ne.val) then write(6,'(i4,a,2i8,2f8.0)') me,' Mismatch for values: ', + i,j,dbl_mb(idx+jj*cld+ii),val endif end do end do call nga_release(g_c, tlo, thi) endif c if (me.eq.0) then write(6,'(a)') 'Successfully completed test of nga_add_patch' endif c status = nga_destroy(g_a) status = nga_destroy(g_b) status = nga_destroy(g_c) call nga_terminate() c call MP_FINALIZE() end ga-5-3/global/testing/pgtest.F0000640005473000001440000023574011417373344015150 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c $Id: pgtest.F,v 1.9 2005-11-23 10:25:18 manoj Exp $ c vector boxes lack arithmetic precision #ifdef CRAY_YMP # define THRESH 1d-10 # define THRESHF 1e-5 #elif defined(FUJITSU) # define THRESH 1d-12 # define THRESHF 1e-5 #else # define THRESH 1d-13 # define THRESHF 1e-5 #endif #define MISMATCH(x,y) abs(x-y)/max(1d0,abs(x)).gt.THRESH #define MISMATCHF(x,y) abs(x-y)/max(1.0,abs(x)).gt.THRESHF #define NEW_API c#define MIRROR c#define GA3 c#define NGA_GATSCAT #define USE_RESTRICTED #ifdef USE_RESTRICTED # define NEW_API #endif program main implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" integer heap, stack, fudge, ma_heap, me, nproc integer inode,proclist(100),i,j,nprocs integer proc_group(0:100), my_proc_group, grp, num_grp integer midnode, splitnode, color, key logical status parameter (heap=200*200*4, fudge=100, stack=200*200) c c*** Intitialize a message passing library c #include "mp3.fh" c c*** Initialize GA c c There are 2 choices: ga_initialize or ga_initialize_ltd. c In the first case, there is no explicit limit on memory usage. c In the second, user can set limit (per processor) in bytes. c call ga_initialize() nproc = ga_nnodes() me = ga_nodeid() c c*** Initialize the MA package c MA must be initialized before any global array is allocated c ma_heap = heap/nproc + fudge ma_heap = 2*ma_heap #ifdef USE_RESTRICTED ma_heap = 2*ma_heap #endif status = ma_init(MT_DCPL, stack, ma_heap) if (.not. status) call ga_error('ma_init failed',-1) c c we can also use GA_set_memory_limit BEFORE first ga_create call c call GA_set_memory_limit(util_mdtob(ma_heap)) c c*** Create process groups on SMP nodes c #if 1 midnode = nproc/2 do i = 1, midnode proclist(i) = i-1 end do nprocs = midnode proc_group(0) = ga_pgroup_create(proclist, nprocs) do i = midnode+1, nproc proclist(i-midnode) = i-1 end do nprocs = nproc - midnode proc_group(1) = ga_pgroup_create(proclist, nprocs) c call ga_pgroup_set_default(proc_group(inode)) if (me.lt.midnode) then call ga_pgroup_set_default(proc_group(0)) call runtest endif call ga_pgroup_set_default(ga_pgroup_get_world()) call ga_sync() if (me.ge.midnode) then call ga_pgroup_set_default(proc_group(1)) call runtest endif #else c split into 2 equal groups if(me.eq.0) then print *,' ************* Testing ga_pgroup_split ************ ' call ffflush(6) endif num_grp = 2 grp = ga_pgroup_get_default() my_proc_group = ga_pgroup_split(grp, num_grp) call ga_pgroup_set_default(my_proc_group) call runtest c reset to world group call ga_pgroup_set_default(ga_pgroup_get_world()) call ga_sync() c split into 2 irregular groups (33:67) if(me.eq.0) then print *,' ********* Testing ga_pgroup_split_irreg *********** ' call ffflush(6) endif num_grp = 2 grp = ga_pgroup_get_default() splitnode = nproc/3 if(me.lt.splitnode) then color=0 else color=1 endif c same key for all processes means automatic control of rank assignment key = 0 my_proc_group = ga_pgroup_split_irreg(grp, color, key) call ga_pgroup_set_default(my_proc_group) if(me.lt.splitnode) then call runtest endif call ffflush(6) call ga_sync() if(me.ge.splitnode) then call runtest endif call ga_sync() #endif call ga_pgroup_set_default(ga_pgroup_get_world()) c c*** Check if memory limits are enforced c c call check_mem(util_mdtob(ma_heap*ga_nnodes())) c c*** Tidy up the GA package c call ga_sync() c if(ga_nodeid().eq.0) print *,'All tests successful ' c write(6,*) 'Calling ga_terminate' call ga_terminate() c c*** Tidy up after message-passing library c call MP_FINALIZE() c stop end c subroutine runtest implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" integer me, nproc logical status me = ga_nodeid() nproc = ga_nnodes() if(me.eq.0)then #ifdef MIRROR print *,' Performing tests on Mirrored Arrays' #endif print *,' GA initialized ' call ffflush(6) endif c c c Uncomment the below line to register external memory allocator c for dynamic arrays inside GA routines. c call register_ext_memory() c if(me.eq.(nproc-1))then print *, 'using ', nproc,' process(es) ', ga_cluster_nnodes(), $ ' cluster nodes' print *,'process ', me, ' is on node ',ga_cluster_nodeid(), $ ' with ', ga_cluster_nprocs(-1), ' processes' call ffflush(6) endif #ifdef MIRROR if (me.eq.0) then write(6,*) write(6,*) ' TESTING MIRRORED ARRAYS ' write(6,*) call ffflush(6) endif #endif call ga_sync() c c*** Check support for double precision arrays c if (me.eq.0) then write(6,*) write(6,*) ' CHECKING DOUBLES ' write(6,*) call ffflush(6) endif call check_dbl() c c*** Check support for double precision complex arrays c if (me.eq.0) then write(6,*) write(6,*) ' CHECKING DOUBLE COMPLEX ' write(6,*) call ffflush(6) endif call check_complex() c c*** Check support for integer arrays c if (me.eq.0) then write(6,*) write(6,*) ' CHECKING INTEGERS ' write(6,*) call ffflush(6) endif call check_int() c c c*** Check support for single precision c if (me.eq.0) then write(6,*) write(6,*) ' CHECKING SINGLE PRECISION ' write(6,*) call ffflush(6) endif call check_flt() c if (me.eq.0) then write(6,*) write(6,*)'CHECKING Wrappers to Message Passing Collective ops' write(6,*) call ffflush(6) endif call check_wrappers c if(me.eq.0) call ga_print_stats() if(me.eq.0) print *,' ' if(me.eq.0) print *,'All tests succesful ' c return end subroutine check_dbl() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n,m parameter (n = 128) parameter (m = 2*n) double precision a(n,n), b(n,n), v(m),w(m) #ifdef MIRROR logical lsame integer g_c, p_mirror integer ndim, dims(2), chunk(2) integer alo(2), blo(2), ahi(2), bhi(2) #else # ifdef NEW_API integer ndim, dims(2), chunk(2) # endif #endif integer iv(m), jv(m) #ifdef NGA_GATSCAT integer ijv(2,m) #endif logical status integer g_a, g_b integer iran, i,j, loop,nloop,maxloop, ilo, ihi, jlo, jhi, itmp integer nproc, me, int, ij, inc, ii, jj parameter (maxloop = 100) integer maxproc parameter (maxproc = 128) double precision crap, sum1, sum2, x double precision nwords logical found integer lprocs,inode,iproc,nnodes intrinsic int integer tlo(2),thi(2),tld(2),index #ifdef USE_RESTRICTED integer num_rstrctd integer rstrctd_list(maxproc/2) #endif iran(i) = int(drand(0)*real(i)) + 1 c nproc = ga_nnodes() me = ga_nodeid() inode = ga_cluster_nodeid() lprocs = ga_cluster_nprocs(inode) nnodes = ga_cluster_nnodes() iproc = mod(me,lprocs) nloop = Min(maxloop,n) #ifdef USE_RESTRICTED num_rstrctd = nproc/2 if (num_rstrctd.eq.0) num_rstrctd = 1 do i = 1, num_rstrctd rstrctd_list(i) = (num_rstrctd/2) + i-1 end do #endif c c a() is a local copy of what the global array should start as c do j = 1, n do i = 1, n #ifndef MIRROR a(i,j) = i-1 + (j-1)*n #else a(i,j) = inode + i-1 + (j-1)*n #endif b(i,j) =-1. enddo enddo * write(6,*) ' correct ' * call output(a, 1, n, 1, n, n, n, 1) * call ffflush(6) c c Create a global array c c print *,ga_nodeid(), ' creating array' * call ffflush(6) c call setdbg(1) #ifdef NEW_API g_a = ga_create_handle() ndim = 2 dims(1) = n dims(2) = n call ga_set_data(g_a,ndim,dims,MT_DBL) call ga_set_array_name(g_a,'a') #ifdef USE_RESTRICTED call ga_set_restricted(g_a, rstrctd_list, num_rstrctd) #endif # ifdef MIRROR p_mirror = ga_pgroup_get_mirror() call ga_set_pgroup(g_a,p_mirror) # endif status = ga_allocate(g_a) #else # ifndef MIRROR status = ga_create(MT_DBL, n, n, 'a', 0, 0, g_a) # else ndim = 2 dims(1) = n dims(2) = n chunk(1) = 0 chunk(2) = 0 p_mirror = ga_pgroup_get_mirror() status = nga_create_config(MT_DBL, ndim, dims, 'a', chunk, + p_mirror, g_a) # endif #endif if (.not. status) then write(6,*) ' ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c c check if handle is valid. be quiet unless error c if(.not.ga_valid_handle(g_a)) call ga_error("invalid handle",g_a) c call ga_distribution(g_a,me,ilo, ihi, jlo, jhi) call ga_sync() c c Zero the array c if (me .eq. 0) then write(6,21) 21 format(/'> Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c c Check that it is indeed zero c call ga_get(g_a, 1, n, 1, n, b, n) call ga_sync() do i = 1, n do j = 1, n if (b(i,j) .ne. 0.0d0) then write(6,*) me,' zero ', i, j, b(i,j) call ffflush(6) c call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_sync() c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format(/'> Checking disjoint put ... ') call ffflush(6) endif call ga_sync() c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) * write(6,4) me, ilo, ihi, jlo, jhi * 4 format(' node ',i2,' checking put ',4i4) * call ffflush(6) call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) endif ij = ij + 1 enddo enddo call ga_sync() c c All nodes check all of a c call util_dfill(n*n, 0.0d0, b, 1) * call ga_print(g_a,1) call ga_get(g_a, 1, n, 1, n, b, n) * write(6,*) ' after get' * call output(b, 1, n, 1, n, n, n, 1) c do i = 1, n do j = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' put ', me, i, j, a(i,j),b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif call ga_sync() c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format(/'> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_sync() c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c call util_dfill(n*n, 0.0d0, b, 1) call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif sum1 = 0.0d0 do j = jlo, jhi do i = ilo, ihi sum1 = sum1 + b(i,j) if (b(i,j) .ne. a(i,j)) then write(6,*) i, j, b(i,j), a(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo c enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) call ffflush(6) endif call ga_sync() c c Each node accumulates into disjoint sections of the array c if (me .eq. 0) then write(6,9) 9 format(/'> Checking accumulate ... ') call ffflush(6) endif call ga_sync() c crap = drand(12345) ! Same seed for each process do j = 1, n do i = 1, n c b(i,j) = drand(0) b(i,j) = i+j enddo enddo c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc c x = drand(0) x = 10. ilo = i ihi = min(i+inc-1, n) if(ihi.eq.n-1)ihi=n c ihi = min(i+inc, n) jlo = j jhi = min(j+inc-1, n) if(jhi.eq.n-1)jhi=n c jhi = min(j+inc-1, n) * call ffflush(6) #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif c print *, me, 'checking accumulate ',ilo,ihi,jlo,jhi,x * 11 format(' node ',i2,' checking accumulate ',4i4) * call ffflush(6) call ga_acc(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n, x) endif ij = ij + 1 c c Each process applies all updates to its local copy c do jj = jlo, jhi do ii = ilo, ihi a(ii,jj) = a(ii,jj) + x * b(ii,jj) enddo enddo enddo enddo call ga_sync() c c All nodes check all of a c call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if(MISMATCH(b(i,j),a(i,j)))then write(6,*) ' acc ', me, i, j, a(i,j), b(i,j) call ffflush(6) c call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' disjoint ga_acc is OK' write(6,*) endif c c overlapping accumulate call ga_sync() #ifdef NEW_API g_b = ga_create_handle() call ga_set_data(g_b,ndim,dims,MT_DBL) call ga_set_array_name(g_b,'b') # ifdef MIRROR call ga_set_pgroup(g_b,p_mirror) # endif if (.not.ga_allocate(g_b)) then #else # ifndef MIRROR if (.not. ga_create(MT_DBL, n, n, 'b', 0, 0, g_b)) then # else if (.not. nga_create_config(MT_DBL, ndim, dims, 'b', chunk, + p_mirror, g_b)) then # endif #endif call ga_error('ga_create failed for second array ',0) endif c call ga_zero(g_b) call ga_sync() call ga_acc(g_b, n/2, n/2, n/2, n/2, 1d0, 1, 1d0) call ga_sync() #ifndef MIRROR if (me.eq.0) then call ga_get(g_b, n/2, n/2, n/2, n/2, b(1,1), 1) x = abs(b(1,1) -1d0*nproc) #else if (iproc.eq.0) then call ga_get(g_b, n/2, n/2, n/2, n/2, b(1,1), 1) x = abs(b(1,1) -1d0*lprocs) #endif if(x.gt. 1d-10)then #ifndef MIRROR write(6,*)'val=',b(1,1),' expected=',nproc, x #else write(6,*)'val=',b(1,1),' expected=',lprocs, x #endif call ga_error('overlapping accumulate failed',0) endif if (me.eq.0) then write(6,*) write(6,*) ' overlapping ga_acc is OK' write(6,*) endif endif c c Check the ga_add function c if (me .eq. 0) then write(6,91) 91 format(/'> Checking add ...') call ffflush(6) endif c c crap = drand(12345) ! Everyone has same seed do j = 1, n do i = 1, n b(i,j) = drand(0) a(i,j) = 0.1d0*a(i,j) + 0.9d0*b(i,j) enddo enddo #ifndef MIRROR if (me.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) #else if (iproc.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) #endif call ga_add(0.1d0, g_a, 0.9d0, g_b, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if(MISMATCH(b(i,j), a(i,j)))then write(6,*) ' add ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' add is OK ' write(6,*) endif call ga_sync() c c Check the ddot function c if (me .eq. 0) then write(6,19) 19 format(/'> Checking ddot ...') call ffflush(6) endif crap = drand(12345) ! Everyone has same seed sum1 = 0.0d0 do j = 1, n do i = 1, n b(i,j) = drand(0) sum1 = sum1 + a(i,j)*b(i,j) enddo enddo #ifndef MIRROR if (me.eq.0) then #else if (iproc.eq.0) then #endif call ga_put(g_b, 1, n, 1, n, b, n) call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_sync() sum2 = ga_ddot(g_a,g_b) if(MISMATCH(sum1, sum2))then write(6,*) ' ddot wrong ', sum1, sum2 call ffflush(6) call ga_error('... exiting ',0) else if (me.eq.0) then write(6,*) write(6,*) ' ddot is OK ' write(6,*) endif c c Check the ga_scale function c if (me .eq. 0) then write(6,92) 92 format(/'> Checking scale ...') call ffflush(6) endif call ga_scale(g_a, 0.123d0) call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n a(i,j) = a(i,j)*0.123d0 if (MISMATCH(b(i,j), a(i,j)))then write(6,*) ' dscal ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' scale is OK ' write(6,*) endif c c Check the ga_copy function c if (me .eq. 0) then write(6,*) write(6,*)'> Checking copy' write(6,*) call ffflush(6) endif if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) call ga_copy(g_a, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' copy ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy is OK ' write(6,*) endif c call ga_sync() if (me .eq. 0) then write(6,*) '> Checking scatter/gather (might be slow)... ' call ffflush(6) endif call ga_sync() c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do j = 1, 10 call ga_sync() #ifndef MIRROR itmp = iran(nproc)-1 if(me.eq.itmp) then #else itmp = iran(lprocs)-1 if(me.eq.itmp) then #endif #ifndef NGA_GATSCAT do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo enddo call ga_gather(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,v(loop),1) if(v(loop) .ne. a(ilo,jlo))then write(6,*)me,' gather ', ilo,',',jlo,',', a(ilo,jlo) & ,' ',v(loop) call ffflush(6) call ga_error('... exiting ',0) endif enddo #else do loop = 1,m ilo = iran(n) jlo = iran(n) ijv(1,loop) = ilo ijv(2,loop) = jlo enddo call nga_gather(g_a, v, ijv, m) do loop = 1,m ilo= ijv(1,loop) jlo= ijv(2,loop) call ga_get(g_a,ilo,ilo,jlo,jlo,v(loop),1) if(v(loop) .ne. a(ilo,jlo))then write(6,*)me,' gather ', ilo,',',jlo,',', a(ilo,jlo) & ,' ',v(loop) call ffflush(6) call ga_error('... exiting ',0) endif enddo #endif endif enddo c if (me.eq.0) then write(6,*) write(6,*) ' gather is OK' write(6,*) call ffflush(6) endif c do j = 1,10 call ga_sync() #ifndef MIRROR if(me.eq.iran(ga_nnodes())-1) then #else if(iproc.eq.iran(lprocs)-1) then #endif #ifndef NGA_GATSCAT do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo c v(loop) = DSIN(a(ilo,jlo)+b(ilo,jlo)) v(loop) = 1d0 *(ilo+jlo) enddo call ga_scatter(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,w(loop),1) c if(v(loop) .ne. w(loop))then if(w(loop) .ne. 1d0 *(ilo+jlo) )then write(6,*)me,' scatter ', ilo,',',jlo,',',w(loop) & ,' ', 1d0 *(ilo+jlo) call ffflush(6) call ga_error('... exiting ',0) endif enddo #else do loop = 1,m ilo = iran(n) jlo = iran(n) ijv(1,loop) = ilo ijv(2,loop) = jlo c v(loop) = DSIN(a(ilo,jlo)+b(ilo,jlo)) v(loop) = 1d0 *(ilo+jlo) enddo call nga_scatter(g_a, v, ijv, m) do loop = 1,m ilo= ijv(1,loop) jlo= ijv(2,loop) call ga_get(g_a,ilo,ilo,jlo,jlo,w(loop),1) c if(v(loop) .ne. w(loop))then if(w(loop) .ne. 1d0 *(ilo+jlo) )then write(6,*)me,' scatter ', ilo,',',jlo,',',w(loop) & ,' ', 1d0 *(ilo+jlo) call ffflush(6) call ga_error('... exiting ',0) endif enddo #endif endif call ga_sync() enddo c if (me.eq.0) then write(6,*) write(6,*) ' scatter is OK' write(6,*) endif c call ga_sync() c c scatter-acc available in GA ver. 3.0 #ifdef GA3 if (me.eq.0) then write(6,*) write(6,*) ' checking scatter-accumulate' write(6,*) endif c crap = drand(1234) call ga_zero(g_a) c do j = 1, n do i = 1, n b(i,j) =0. enddo enddo c x = .1d0 ii =n do jj = 1,1 call ga_sync() do loop = 1, ii c generate unique i,j pairs 10 continue i = iran(n) j=iran(n) if (found(i,j, iv, jv, loop-1) ) goto 10 #ifndef NGA_GATSCAT iv(loop) = i jv(loop) = j #else ijv(1,loop) = i ijv(2,loop) = j #endif v(loop) = 1d0 *(i+j) #ifndef MIRROR b(i,j) = b(i,j) + nproc*x*v(loop) ! update local ref. array #else b(i,j) = b(i,j) + lprocs*x*v(loop) ! update local ref. array #endif enddo #ifndef NGA_GATSCAT call ga_scatter_acc(g_a,v,iv,jv, ii,x) #else call nga_scatter_acc(g_a,v,ijv,ii,x) #endif c call ga_sync() c c check the result c call ga_get(g_a, 1, n, 1,n, a, n) do loop = 1,ii #ifndef NGA_GATSCAT i = iv(loop) j = jv(loop) #else i = ijv(1,loop) j = ijv(2,loop) #endif if(MISMATCH(a(i,j),b(i,j)))then print *,'Error',i,j,loop,a(i,j),'expected=',b(i,j) * if(me.eq.0)then * do ii=1,loop * print *,'element',ii, iv(ii),jv(ii) * enddo * endif call ga_error('scatter-acc error in trial ',jj) endif enddo call ga_sync() enddo call ga_sync() if (me.eq.0) then write(6,*) write(6,*) ' scatter-accumulate is OK' write(6,*) endif #endif #ifdef MIRROR c c Check the merge function c do j = 1, n do i = 1, n a(i,j) = inode + i-1 + (j-1)*n enddo enddo if (me .eq. 0) then write(6,23) 23 format(/'> Checking merge ...') call ffflush(6) endif if (iproc.eq.0) then call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_merge_mirrored(g_a) call ga_get(g_a, 1, n, 1, n, b, n) lsame = .true. ilo = 0 ihi = nnodes*(nnodes-1)/2 do i = 1, n do j = 1, n if ((dble(nnodes)*(a(j,i)-dble(inode)) + + dble(ihi)).ne.b(j,i)) then lsame = .false. ilo = ilo + 1 endif end do end do if(lsame.and.me.eq.0)then write(6,*) write(6,*) ' merge is OK ' write(6,*) else if (.not.lsame) then write(6,*) write(6,*) ' merge is wrong ',ilo write(6,*) call ga_error('... exiting ',0) endif c c Checking copy between different array configurations c if (me .eq. 0) then write(6,20) 20 format(/'> Checking mixed copy ...') call ffflush(6) endif #ifdef NEW_API g_c = ga_create_handle() call ga_set_data(g_c,ndim,dims,MT_DBL) call ga_set_array_name(g_c,'c') if (.not.ga_allocate(g_c)) then #else if (.not. nga_create(MT_DBL, ndim, dims, 'c', chunk, g_c)) then #endif call ga_error('ga_create failed for third array ',0) endif call ga_zero(g_c) call ga_copy(g_a,g_c) call ga_get(g_a, 1, n, 1, n, a, n) call ga_get(g_c, 1, n, 1, n, b, n) do i = 1, n do j = 1, n if (a(j,i).ne.b(j,i)) then lsame = .false. endif end do end do if(lsame.and.me.eq.0)then write(6,*) write(6,*) ' Mixed copy (mirrored to normal) is OK ' write(6,*) elseif (me.eq.0) then write(6,*) write(6,*) ' Mixed copy (mirrored to normal) is wrong ',ilo write(6,*) call ga_error('... exiting ',0) endif call ga_zero(g_a) call ga_copy(g_c,g_a) call ga_get(g_a, 1, n, 1, n, a, n) do i = 1, n do j = 1, n if (a(j,i).ne.b(j,i)) then lsame = .false. endif end do end do if(lsame.and.me.eq.0)then write(6,*) write(6,*) ' Mixed copy (normal to mirrored) is OK ' write(6,*) elseif (me.eq.0) then write(6,*) write(6,*) ' Mixed copy (normal to mirrored) is wrong ',ilo write(6,*) call ga_error('... exiting ',0) endif c c Check the merge to distributed patch function c do j = 1, n do i = 1, n a(i,j) = inode + i-1 + (j-1)*n enddo enddo if (me .eq. 0) then write(6,24) 24 format(/'> Checking merge to distributed patch ...') call ffflush(6) endif c c get low and high indices of patch c ilo = n/4 ihi = ilo + n/2 do i = 1, 2 alo(i) = ilo blo(i) = ilo + 1 ahi(i) = ihi bhi(i) = ihi + 1 end do if (iproc.eq.0) then call ga_put(g_a, 1, n, 1, n, a, n) endif call nga_merge_distr_patch(g_a, alo, ahi, g_c, blo, bhi) call ga_get(g_c, 1, n, 1, n, b, n) lsame = .true. ilo = 0 ihi = nnodes*(nnodes-1)/2 do i = alo(1), ahi(1) ii = i-alo(1) + blo(1) do j = alo(2), ahi(2) jj = j-alo(2) + blo(2) if ((dble(nnodes)*(a(j,i)-dble(inode)) + + dble(ihi)).ne.b(jj,ii)) then c if (me.eq.0) then c write(6,*) i,j,ii,jj, nnodes*a(j,i)+ihi, b(jj,ii) c endif lsame = .false. ilo = ilo + 1 endif end do end do if(lsame.and.me.eq.0)then write(6,*) write(6,*) ' merge to distributed patch is OK ' write(6,*) elseif (.not.lsame) then write(6,*) write(6,*) ' merge to distributed patch is wrong ',ilo write(6,*) call ga_error('... exiting ',0) endif #endif c c Delete the global arrays c status = ga_destroy(g_b) status = ga_destroy(g_a) c return end c----------------------------------------------------------------- subroutine check_complex() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n,m parameter (n = 60) parameter (m = 2*n) double complex a(n,n), b(n,n), v(m),w(m) #ifdef MIRROR integer ndim, dims(2), chunk(2), p_mirror #else # ifdef NEW_API integer ndim, dims(2), chunk(2), p_mirror # endif #endif integer iv(m), jv(m) logical status integer g_a, g_b integer iran, i,j, loop,nloop,maxloop, ilo, ihi, jlo, jhi, itmp integer nproc, me, int, ij, inc, ii, jj, nnodes parameter (maxloop = 100) integer maxproc parameter (maxproc = 128) double precision crap, real double precision nwords double complex x, sum1, sum2, factor integer lprocs, inode, iproc #ifdef USE_RESTRICTED integer num_rstrctd integer rstrctd_list(maxproc/2) #endif intrinsic int iran(i) = int(drand(0)*real(i)) + 1 c nproc = ga_nnodes() me = ga_nodeid() inode = ga_cluster_nodeid() lprocs = ga_cluster_nprocs(inode) nnodes = ga_cluster_nnodes() iproc = mod(me,lprocs) nloop = Min(maxloop,n) #ifdef USE_RESTRICTED num_rstrctd = nproc/2 if (num_rstrctd.eq.0) num_rstrctd = 1 do i = 1, num_rstrctd rstrctd_list(i) = (num_rstrctd/2) + i-1 end do #endif c c a() is a local copy of what the global array should start as c do j = 1, n do i = 1, n #ifndef MIRROR a(i,j) = cmplx(dble(i-1), dble((j-1)*n)) #else a(i,j) = cmplx(dble(inode),0.0d00) + + cmplx(dble(i-1), dble((j-1)*n)) #endif b(i,j) = cmplx(-1d0,1d0) enddo enddo c c Create a global array c c print *,ga_nodeid(), ' creating array' call ffflush(6) c call setdbg(1) #ifdef NEW_API ndim = 2 dims(1) = n dims(2) = n g_a = ga_create_handle() call ga_set_data(g_a,ndim,dims,MT_DCPL) call ga_set_array_name(g_a,'a') #ifdef USE_RESTRICTED call ga_set_restricted(g_a, rstrctd_list, num_rstrctd) #endif # ifdef MIRROR p_mirror = ga_pgroup_get_mirror() call ga_set_pgroup(g_a,p_mirror) # endif status = ga_allocate(g_a) #else # ifndef MIRROR status = ga_create(MT_DCPL, n, n, 'a', 0, 0, g_a) # else ndim = 2 dims(1) = n dims(2) = n chunk(1) = 0 chunk(2) = 0 p_mirror = ga_pgroup_get_mirror() status = nga_create_config(MT_DCPL, ndim, dims, 'a', chunk, + p_mirror, g_a) # endif #endif if (.not. status) then write(6,*) ' ga_create failed' call ga_error('... exiting ',0) endif #ifdef NEW_API g_b = ga_create_handle() call ga_set_data(g_b,ndim,dims,MT_DCPL) call ga_set_array_name(g_b,'b') # ifdef MIRROR call ga_set_pgroup(g_b,p_mirror) # endif if (.not.ga_allocate(g_b)) then #else # ifndef MIRROR if (.not. ga_create(MT_DCPL, n, n, 'b', 0, 0, g_b)) then # else if (.not. nga_create_config(MT_DCPL, ndim, dims, 'b', chunk, _ p_mirror, g_b)) then # endif #endif call ga_error('ga_create failed for second array ',0) endif call ga_distribution(g_a,me,ilo, ihi, jlo, jhi) call ga_sync() c c Zero the array c if (me .eq. 0) then write(6,21) 21 format(/'> Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c c Check that it is indeed zero c call ga_get(g_a, 1, n, 1, n, b, n) call ga_sync() do i = 1, n do j = 1, n if(b(i,j).ne.(0d0,0d0)) then write(6,*) me,' zero ', i, j, b(i,j) call ffflush(6) c call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_sync() c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format(/'> Checking disjoint put ... ') call ffflush(6) endif call ga_sync() c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) endif ij = ij + 1 enddo enddo call ga_sync() c c All nodes check all of a c call util_qfill(n*n, (0d0,0d0), b, 1) call ga_get(g_a, 1, n, 1, n, b, n) c do i = 1, n do j = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' put ', me, i, j, a(i,j),b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif call ga_sync() c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format(/'> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_sync() c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c call util_qfill(n*n, (0.0d0,0d0), b, 1) call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif do j = jlo, jhi do i = ilo, ihi if (b(i,j) .ne. a(i,j)) then write(6,*)'error:', i, j, b(i,j), a(i,j) call ga_error('... exiting ',0) endif enddo enddo c enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) call ffflush(6) endif call ga_sync() c c Each node accumulates into disjoint sections of the array c if (me .eq. 0) then write(6,9) 9 format(/'> Checking accumulate ... ') call ffflush(6) endif call ga_sync() c crap = drand(12345) ! Same seed for each process do j = 1, n do i = 1, n b(i,j) = cmplx(drand(0),drand(1)) b(i,j) = cmplx(dble(i),dble(j)) enddo enddo c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc c x = cmplx(drand(0),0.333d0) c x = cmplx(0.333d0,0) * x = cmplx(0d0,0d0) x = 0 ilo = i ihi = min(i+inc-1, n) if(ihi.eq.n-1)ihi=n jlo = j jhi = min(j+inc-1, n) if(jhi.eq.n-1)jhi=n #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif call ga_acc(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n, x) endif ij = ij + 1 c c Each process applies all updates to its local copy c do jj = jlo, jhi do ii = ilo, ihi a(ii,jj) = a(ii,jj) + x * b(ii,jj) enddo enddo enddo enddo call ga_sync() c c All nodes check all of a c call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (MISMATCH(b(i,j), a(i,j)))then write(6,*) ' acc ', me, i, j, a(i,j), b(i,j) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' disjoint ga_acc is OK' write(6,*) endif c c overlapping accumulate c call ga_zero(g_b) call ga_acc(g_b, n/2, n/2, n/2, n/2, (1d0,-1d0), 1, (1d0,0d0)) call ga_sync() #ifndef MIRROR if (me.eq.0) then call ga_get(g_b, n/2, n/2, n/2, n/2, x, 1) if (MISMATCH(x, ((1d0,-1d0)*nproc)))then #else if (iproc.eq.0) then call ga_get(g_b, n/2, n/2, n/2, n/2, x, 1) if (MISMATCH(x, ((1d0,-1d0)*lprocs)))then #endif c if(error.gt. (1d-8))then #ifndef MIRROR write(6,*)'val=',x,' expected=(',nproc,',',-nproc,')' #else write(6,*)'val=',x,' expected=(',lprocs,',',-lprocs,')' #endif call ga_error('overlapping accumulate failed',0) endif write(6,*) write(6,*) ' overlapping ga_acc is OK' write(6,*) endif c c Check the ga_copy function c if (me .eq. 0) then write(6,*) write(6,*)'> Checking copy' write(6,*) call ffflush(6) endif call ga_sync() #ifndef MIRROR if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) #else if(iproc.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) #endif call ga_copy(g_a, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' copy ', me, i, j, a(i,j), b(i,j) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy is OK ' write(6,*) endif c c c Check the ga_scale function c if (me .eq. 0) then write(6,92) 92 format(/'> Checking scale ...') call ffflush(6) endif factor = (1d0,-1d0) call ga_scale(g_a, factor) call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n a(i,j) = a(i,j)*factor if (MISMATCH(b(i,j), a(i,j)))then write(6,*) ' dscal ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' scale is OK ' write(6,*) endif c c Check scatter&gather c call ga_sync() if (me .eq. 0) then write(6,*) '> Checking scatter/gather (might be slow)... ' call ffflush(6) if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_sync() c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do j = 1, 10 call ga_sync() #ifndef MIRROR itmp = iran(nproc)-1 if(me.eq.itmp) then #else itmp = iran(lprocs)-1 if(iproc.eq.itmp) then #endif do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo enddo call ga_gather(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,v(loop),1) if(v(loop) .ne. a(ilo,jlo))then write(6,*)me,' gather ', ilo,',',jlo,',', a(ilo,jlo) & ,' ',v(loop) call ffflush(6) call ga_error('... exiting ',0) endif enddo endif enddo c if (me.eq.0) then write(6,*) write(6,*) ' gather is OK' write(6,*) call ffflush(6) endif c do j = 1,10 call ga_sync() #ifndef MIRROR if(me.eq.iran(ga_nnodes())-1) then #else if(me.eq.iran(lprocs)-1) then #endif do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo v(loop) = (1d0,-1d0) *(ilo+jlo) enddo call ga_scatter(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,w(loop),1) if(w(loop) .ne. (1d0,-1d0) *(ilo+jlo) )then write(6,*)me,' scatter ', ilo,',',jlo,',',w(loop) & ,' ', (1d0,-1d0) *(ilo+jlo) call ffflush(6) endif enddo endif call ga_sync() enddo c if (me.eq.0) then write(6,*) write(6,*) ' scatter is OK' write(6,*) endif c c Check ga_add c if (me .eq. 0) then write(6,91) 91 format(/'> Checking add ...') call ffflush(6) endif call ga_get(g_a, 1, n, 1, n, a, n) crap = drand(12345) ! Everyone has same seed do j = 1, n do i = 1, n b(i,j) = cmplx(drand(0), drand(1)) a(i,j) = (0.1d0,-.1d0)*a(i,j) + (.9d0,-.9d0)*b(i,j) enddo enddo #ifndef MIRROR if (me.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) #else if (iproc.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) #endif call ga_add((0.1d0,-.1d0), g_a, (0.9d0,-.9d0), g_b, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (MISMATCH(b(i,j), a(i,j)))then write(6,*) ' add ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' add is OK ' write(6,*) endif call ga_sync() c c Check the zdot function c if (me .eq. 0) then write(6,19) 19 format(/'> Checking zdot ...') call ffflush(6) endif crap = drand(12345) ! Everyone has same seed sum1 = (0.0d0,0.d0) do j = 1, n do i = 1, n b(i,j) = cmplx(drand(0), drand(1)) sum1 = sum1 + a(i,j)*b(i,j) enddo enddo #ifndef MIRROR if (me.eq.0) then #else if (iproc.eq.0) then #endif call ga_put(g_b, 1, n, 1, n, b, n) call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_sync() sum2 = ga_zdot(g_a,g_b) if (MISMATCH(sum1, sum2))then write(6,*) ' zdot wrong ', sum1, sum2 call ffflush(6) call ga_error('... exiting ',0) else if (me.eq.0) then write(6,*) write(6,*) ' zdot is OK ' write(6,*) endif c c Delete the global arrays c 123 continue status = ga_destroy(g_b) status = ga_destroy(g_a) c return end c----------------------------------------------------------------- subroutine check_int() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n parameter (n = 128) integer a(n,n), b(n,n) logical status integer g_a integer iran, i, j, loop, nloop, ilo, ihi, jlo, jhi, itmp integer nproc, me, int, ij, inc, dimi, dimj, ii, jj integer ndim, dims(2), chunk(2), p_mirror, nnodes integer lprocs, inode, iproc,lproc, nprocs double precision nwords parameter (nloop = 100) integer maxproc parameter (maxproc = 128) integer map(5,maxproc), found, np,k double precision crap, sum1, real integer buf #ifdef USE_RESTRICTED integer num_rstrctd integer rstrctd_list(maxproc/2) #endif intrinsic int iran(i) = int(drand(0)*real(i)) + 1 c nproc = ga_nnodes() me = ga_nodeid() inode = ga_cluster_nodeid() lprocs = ga_cluster_nprocs(inode) nnodes = ga_cluster_nnodes() iproc = mod(me,lprocs) #ifdef USE_RESTRICTED num_rstrctd = nproc/2 if (num_rstrctd.eq.0) num_rstrctd = 1 do i = 1, num_rstrctd rstrctd_list(i) = (num_rstrctd/2) + i-1 end do #endif c c a() is a local copy of what the global array should start as c do j = 1, n do i = 1, n #ifndef MIRROR a(i,j) = i-1 + (j-1)*1000 #else a(i,j) = inode + i-1 + (j-1)*1000 #endif enddo enddo c c Create a global array c ndim = 2 dims(1) = n dims(2) = n chunk(1) = 0 chunk(2) = 0 #ifdef NEW_API g_a = ga_create_handle() call ga_set_data(g_a,ndim,dims,MT_INT) call ga_set_array_name(g_a,'a') #ifdef USE_RESTRICTED call ga_set_restricted(g_a, rstrctd_list, num_rstrctd) #endif # ifdef MIRROR p_mirror = ga_pgroup_get_mirror() call ga_set_pgroup(g_a,p_mirror) # endif if (.not.ga_allocate(g_a)) then #else # ifndef MIRROR if (.not. ga_create(MT_INT, n, n, 'a', 0, 0, g_a)) then # else p_mirror = ga_pgroup_get_mirror() if (.not. nga_create_config(MT_INT, ndim, dims, 'a', chunk, + p_mirror, g_a)) then # endif #endif write(6,*) ' ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c c Zero the array c if (me .eq. 0) then write(6,21) 21 format(/'> Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c c Check that it is indeed zero c call ga_get(g_a, 1, n, 1, n, b, n) do i = 1, n do j = 1, n if (b(i,j) .ne. 0) then write(6,*) ' zero ', me, i, j, b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_sync() c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format(/'> Checking disjoint put ... ') call ffflush(6) endif call ga_sync() c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) c write(6,4) me, ilo, ihi, jlo, jhi c4 format(' node ',i2,' checking put ',4i4) c call ffflush(6) call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) endif ij = ij + 1 enddo enddo call ga_sync() c c All nodes check all of a c #ifndef MIRROR if(me.eq.0)then #else if(iproc.eq.0)then #endif call ga_get(g_a, 1, n, 1, n, b, n) do i = 1, n do j = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' put ', me, i, j, a(i,j),b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo endif call ga_sync() c if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format(/'> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_sync() c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c call util_ifill(n*n, 0.0d0, b, 1) call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) c if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif c sum1 = 0.0d0 do j = jlo, jhi do i = ilo, ihi sum1 = sum1 + b(i,j) if (b(i,j) .ne. a(i,j)) then write(6,*) 'error ', i, j, b(i,j), a(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) endif c call ga_sync() if (me .eq. 0 .and. n.gt.7) then write(6,*) write(6,*) '> Checking ga_print_patch --- should see ' write(6,*)' [2002 3002 4002 5002 6002]' write(6,*)' [2003 3003 4003 5003 6003]' write(6,*)' [2004 3004 4004 5004 6004]' write(6,*) call ffflush(6) endif if(n.gt.5) call ga_print_patch(g_a,3,5,3,7,0) c call ga_sync() c call ga_sync() if (me .eq. 0) then write(6,*) write(6,*) '> Checking read_inc ... ' write(6,*) call ffflush(6) endif call ga_sync() c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc inc =5 c every processor will be operating on somebody elses data c #ifndef MIRROR lproc = nproc - me - 1 #else lproc = nnodes-iproc-1 lproc = inode*lprocs + lproc #endif c call ga_distribution(g_a,lproc,ilo,ihi,jlo,jhi) c dimi = ihi-ilo dimj = jhi-jlo write(6,111) me,ilo,ihi,jlo,jhi,dimi,dimj 111 format(i2,'..',4i8,'.',2i8) call ga_sync() if(ilo .gt.0 .and. jhi .gt. 0)then do loop = 1,nloop ii= IABS(iran(dimi)) jj= IABS(iran(dimj)) i=ilo + Mod(ii,dimi) j=jlo + Mod(jj,dimj) c c write(6,*) me,'..',ilo,ihi,jlo,jhi,'.',dimi,dimj,'..',i,j c call ffflush(6) buf = ga_read_inc(g_a,i,j,inc) if(a(i,j).ne. buf)then write(6,*)me,'READ_inc ', i,',',j,',', a(i,j),' ',buf,me call ffflush(6) endif call ga_get(g_a, i,i,j,j, buf,1) a(i,j) = a(i,j)+inc if(a(i,j).ne. buf)then write(6,*)me,'read_INC ', i,',',j,',', a(i,j),' ',buf,me call ffflush(6) endif enddo endif call ga_sync() c if (me.eq.0) then write(6,*) write(6,*) ' read_inc is OK' write(6,*) endif c c c #if 000 #ifndef MIRROR if (me.eq.0) then write(6,*) write(6,*) '> checking ga_fence and ga_lock' write(6,*) call ffflush(6) endif c call ga_zero(g_a) c c*** use ga_read_inc and elements g_a(1:2,1) to implement a lock c*** compute g_a(:,n) = sum (1(:)) for P processors c status = ga_create_mutexes(1) if (.not. status) then call ga_error('ga_create_mutexes failed ',0) endif if(n.lt.2)call ga_error('insufficient n to test ga_fence',n) call ga_lock(0) c call my_lock(g_a) c get original values g_a(:,n) call ga_get(g_a, 1,n, n,n, b,n) c add my contribution do i =1,n b(i,1)= b(i,1)+1 enddo c c need to use fence to assure that coms complete before leaving c Critical Section c call ga_init_fence() call ga_put(g_a, 1,n, n,n, b,n) call ga_fence() call ga_unlock(0) c call my_unlock(g_a) c 333 if(.not.ga_destroy_mutexes()) $ call ga_error('mutex not destroyed',0) call ga_sync() if (me.eq.0) then call ga_get(g_a, 1,n, n,n, b,n) do i =1,n if(b(i,1).ne. nproc)then print *, 'mismatch',b(i,1),nproc call ga_error('fence failed',i) endif enddo write(6,*) write(6,*) ' ga_fence and ga_lock are OK' write(6,*) endif #endif #endif c c if (me.eq.0) then write(6,*) write(6,*) '> checking ga_locate_region' write(6,*) call ffflush(6) endif status = ga_locate_region(g_a, 1, n, 1,n, map,np) found = 0 do j=1,n do i=1,n b(i,j)=-1 enddo enddo #ifndef MIRROR if(me.eq.0)call ga_put(g_a,1,n,1,n,b,n) #else if(iproc.eq.0)call ga_put(g_a,1,n,1,n,b,n) #endif call ga_sync() do k = 1, np if(map(5,k).eq.me)then if(found.eq.1) then write(6,*)'double entry in map for proc ',me call ffflush(6) endif do j= map(3,k), map(4,k) do i= map(1,k), map(2,k) #ifndef MIRROR b(i,j)=1*me #else b(i,j)=1*iproc #endif enddo enddo call ga_put(g_a, map(1,k),map(2,k),map(3,k),map(4,k), & b(map(1,k),map(3,k)),n) found = 1 endif enddo call ga_sync() c do k = 1, np #ifndef MIRROR if(map(5,k).eq.me)then #else if(map(5,k).eq.iproc)then #endif call ga_get(g_a, map(1,k),map(2,k),map(3,k),map(4,k), & a(map(1,k),map(3,k)),n) do j= map(3,k), map(4,k) do i= map(1,k), map(2,k) if(b(i,j).ne.a(i,j)) then write(6,*) & 'proc ',me, 'overlap with ',a(i,j) call ffflush(6) endif enddo enddo endif enddo call ga_sync() c #ifndef MIRROR if(me.eq.0)then #else if(iproc.eq.0)then #endif call ga_get(g_a,1,n,1,n,a,n) do j=1,n do i=1,n if(a(i,j).eq.-1)then write(6,*)'i=',i,' j=',j, ' not assigned ' call ga_error('... exiting ',0) endif enddo enddo endif if (me.eq.0) then write(6,*) write(6,*) ' ga_locate_region is OK' write(6,*) call ffflush(6) endif c c Delete the global array c status = ga_destroy(g_a) c return end c--------------------------------------------------------------------- subroutine check_flt() implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" integer n, m parameter (n =10) parameter (m=2*n) real a(n,n), b(n,n), v(m), w(m) integer iv(m), jv(m) logical status integer g_a, g_b integer iran, i, j, loop, nloop, maxloop, ilo, ihi, jlo, jhi, itmp integer nproc, me, int, ij, inc, ii, jj, nnodes double precision nwords parameter (maxloop = 100) integer maxproc integer ndim, dims(2), chunk(2), p_mirror parameter (maxproc = 128) double precision crap real x, sum1, sum2 logical found integer lprocs, inode, iproc #ifdef USE_RESTRICTED integer num_rstrctd integer rstrctd_list(maxproc/2) #endif intrinsic int iran(i) = int(drand(0)*real(i)) + 1 nproc = ga_nnodes() me = ga_nodeid() inode = ga_cluster_nodeid() lprocs = ga_cluster_nprocs(inode) nnodes = ga_cluster_nnodes() iproc = mod(me,lprocs) nloop = Min(maxloop,n) #ifdef USE_RESTRICTED num_rstrctd = nproc/2 if (num_rstrctd.eq.0) num_rstrctd = 1 do i = 1, num_rstrctd rstrctd_list(i) = (num_rstrctd/2) + i-1 end do #endif c c a() is a local copy of what the global array should start as c do j = 1, n do i = 1, n #ifndef MIRROR a(i,j) = i-1 + (j-1)*n #else a(i,j) = inode + i-1 + (j-1)*n #endif b(i,j) = -1. enddo enddo c c Create a global array c ndim = 2 dims(1) = n dims(2) = n chunk(1) = 0 chunk(2) = 0 #ifdef NEW_API g_a = ga_create_handle() call ga_set_data(g_a,ndim,dims,MT_REAL) call ga_set_array_name(g_a,'a') #ifdef USE_RESTRICTED call ga_set_restricted(g_a, rstrctd_list, num_rstrctd) #endif # ifdef MIRROR write(6,*) 'Getting p_mirror' p_mirror = ga_pgroup_get_mirror() write(6,*) 'Setting proc config' call ga_set_pgroup(g_a,p_mirror) # endif if (.not.ga_allocate(g_a)) then #else # ifndef MIRROR if (.not. ga_create(MT_REAL, n, n, 'a', 0, 0, g_a)) then # else cBJP write(6,*) 'Creating g_a' p_mirror = ga_pgroup_get_mirror() if (.not. nga_create_config(MT_REAL, ndim, dims, 'a', chunk, + p_mirror, g_a)) then cBJP write(6,*) 'Created g_a' # endif #endif write(6,*) ' ga_create failed' call ffflush(6) call ga_error('... exiting ',0) endif c c check if handle is valid. be quiet unless error C if(.not.ga_valid_handle(g_a)) call ga_error("invalid handle",g_a) c call ga_distribution(g_a,me,ilo, ihi, jlo, jhi) call ga_sync() c c Zero the array c if (me .eq. 0) then write(6,21) 21 format(/'> Checking zero ... ') call ffflush(6) endif call ga_zero(g_a) c c Check that it is indeed zero c call ga_get(g_a, 1, n, 1, n, b, n) call ga_sync() do i = 1, n do j = 1, n if (b(i,j) .ne. 0.0) then write(6,*) ' zero ', me, i, j, b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_zero is OK' write(6,*) endif call ga_sync() c c Each node fills in disjoint sections of the array c if (me .eq. 0) then write(6,2) 2 format(/'> Checking disjoint put ... ') call ffflush(6) endif call ga_sync() c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif ilo = i ihi = min(i+inc, n) jlo = j jhi = min(j+inc, n) c write(6,4) me, ilo, ihi, jlo, jhi c 4 format(' node ',i2,' checking put ',4i4) c call ffflush(6) call ga_put(g_a, ilo, ihi, jlo, jhi, a(ilo, jlo), n) endif ij = ij + 1 enddo enddo call ga_sync() c c All nodes check all of a c call ga_get(g_a, 1, n, 1, n, b, n) do i = 1, n do j = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' put ', me, i, j, a(i,j),b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo call ga_sync() c if (me.eq.0) then write(6,*) write(6,*) ' ga_put is OK' write(6,*) endif c c Now check nloop random gets from each node c if (me .eq. 0) then write(6,5) nloop 5 format(/'> Checking random get (',i5,' calls)...') call ffflush(6) endif call ga_sync() c nwords = 0 c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do loop = 1, nloop ilo = iran(loop) ihi = iran(loop) if (ihi.lt. ilo) then itmp = ihi ihi = ilo ilo = itmp endif jlo = iran(loop) jhi = iran(loop) if (jhi.lt. jlo) then itmp = jhi jhi = jlo jlo = itmp endif c nwords = nwords + (ihi-ilo+1)*(jhi-jlo+1) c call util_rfill(n*n, 0.0, b, 1) call ga_get(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n) c if (me .eq. 0 .and. mod(loop-1, max(1,nloop/20)).eq.0) then write(6,1) loop, me, ilo, ihi, jlo, jhi, nwords 1 format(' call ',i5, ' node ',i2,' checking get ',4i4, $ ' total ',d9.2) call ffflush(6) endif c sum1 = 0.0d0 do j = jlo, jhi do i = ilo, ihi sum1 = sum1 + b(i,j) if (b(i,j) .ne. a(i,j)) then write(6,*) 'error ', i, j, b(i,j), a(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' ga_get is OK' write(6,*) endif call ga_sync() c c Each node accumulates into disjoint sections of the array c if (me .eq. 0) then write(6,9) 9 format(/'> Checking accumulate ... ') call ffflush(6) endif call ga_sync() c crap = drand(12345) ! Same seed for each process do j = 1, n do i = 1, n c b(i,j) = real(drand(0)) b(i,j) = i+j enddo enddo c inc = (n-1)/20 + 1 ij = 0 do j = 1, n, inc do i = 1, n, inc c x = real(drand(0)) x = 10. ilo = i ihi = min(i+inc-1, n) if(ihi.eq.n-1)ihi=n c ihi = min(i+inc, n) jlo = j jhi = min(j+inc-1, n) if(jhi.eq.n-1)jhi=n c jhi = min(j+inc-1, n) * call ffflush(6) #ifndef MIRROR if (mod(ij,nproc) .eq. me) then #else if (mod(ij,lprocs) .eq. iproc) then #endif c print *, me, 'checking accumulate ',ilo,ihi,jlo,jhi,x * 11 format(' node ',i2,' checking accumulate ',4i4) * call ffflush(6) call ga_acc(g_a, ilo, ihi, jlo, jhi, b(ilo, jlo), n, x) endif ij = ij + 1 c c Each process applies all updates to its local copy c do jj = jlo, jhi do ii = ilo, ihi a(ii,jj) = a(ii,jj) + x * b(ii,jj) enddo enddo enddo enddo call ga_sync() c c All nodes check all of a call ga_get(g_a, 1, n, 1, n, b, n) c do j = 1, n do i = 1, n if(MISMATCHF(b(i,j),a(i,j)))then write(6,*) ' acc ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' disjoint ga_acc is OK' write(6,*) endif c c overlapping accumulate call ga_sync() #ifndef MIRROR if (.not. ga_create(MT_REAL, n, n, 'b', 0, 0, g_b)) then #else if (.not. nga_create_config(MT_REAL, ndim, dims, 'b', chunk, + p_mirror, g_b)) then #endif call ga_error('ga_create failed for second array ',0) endif c call ga_zero(g_b) call ga_acc(g_b, n/2, n/2, n/2, n/2, 1.0, 1, 1.0) call ga_sync() if (me.eq.0) then call ga_get(g_b, n/2, n/2, n/2, n/2, b(1,1), 1) #ifndef MIRROR x = abs(b(1,1) -1*nproc) #else x = abs(b(1,1) -1*lprocs) #endif if(x.gt. 1e-10)then #ifndef MIRROR write(6,*)'val=',b(1,1),' expected=',nproc, x #else write(6,*)'val=',b(1,1),' expected=',lprocs, x #endif call ga_error('overlapping accumulate failed',0) endif write(6,*) write(6,*) ' overlapping ga_acc is OK' write(6,*) endif c c Check the ga_add function c if (me .eq. 0) then write(6,91) 91 format(/'> Checking add ...') call ffflush(6) endif c crap = drand(12345) ! Everyone has same seed do j = 1, n do i = 1, n b(i,j) = real(drand(0)*real(i)) + 1 a(i,j) = 0.1*a(i,j) + 0.9*b(i,j) enddo enddo #ifndef MIRROR if (me.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) #else if (iproc.eq.0) call ga_put(g_b, 1, n, 1, n, b, n) #endif call ga_add(0.1, g_a, 0.9, g_b, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if(MISMATCHF(b(i,j), a(i,j)))then write(6,*) ' add ', me, i, j, a(i,j), b(i,j) call ffflush(6) CCC call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' add is OK ' write(6,*) endif call ga_sync() c c Check the sdot function c if (me .eq. 0) then write(6,19) 19 format(/'> Checking sdot ...') call ffflush(6) endif crap = drand(12345) ! Everyone has same seed sum1 = 0.0 do j = 1, n do i = 1, n b(i,j) = drand(0) sum1 = sum1 + a(i,j)*b(i,j) enddo enddo #ifndef MIRROR if (me.eq.0) then #else if (iproc.eq.0) then #endif call ga_put(g_b, 1, n, 1, n, b, n) call ga_put(g_a, 1, n, 1, n, a, n) endif call ga_sync() sum2 = ga_sdot(g_a,g_b) if(MISMATCHF(sum1, sum2))then write(6,*) ' fdot wrong ', sum1, sum2 call ffflush(6) call ga_error('... exiting ',0) else if (me.eq.0) then write(6,*) write(6,*) ' sdot is OK ' write(6,*) endif c c Check the ga_scale function c if (me .eq. 0) then write(6,92) 92 format(/'> Checking scale ...') call ffflush(6) endif call ga_scale(g_a, 0.123) call ga_get(g_a, 1, n, 1, n, b, n) do j = 1, n do i = 1, n a(i,j) = a(i,j)*0.123 if (MISMATCHF(b(i,j), a(i,j)))then write(6,*) ' dscal ', me, i, j, a(i,j), b(i,j) call ffflush(6) CCC call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' scale is OK ' write(6,*) endif c c Check the ga_copy function c if (me .eq. 0) then write(6,*) write(6,*)'> Checking copy' write(6,*) call ffflush(6) endif if(me.eq.0) call ga_put(g_a, 1, n, 1, n, a, n) call ga_copy(g_a, g_b) call ga_get(g_b, 1, n, 1, n, b, n) do j = 1, n do i = 1, n if (b(i,j) .ne. a(i,j)) then write(6,*) ' copy ', me, i, j, a(i,j), b(i,j) call ffflush(6) call ga_error('... exiting ',0) endif enddo enddo if (me.eq.0) then write(6,*) write(6,*) ' copy is OK ' write(6,*) endif c call ga_sync() if (me .eq. 0) then write(6,*) '> Checking scatter/gather (might be slow)... ' call ffflush(6) endif call ga_sync() c crap = drand(ga_nodeid()*51 +1) !Different seed for each proc do j = 1, 10 call ga_sync() #ifndef MIRROR itmp = iran(nproc)-1 if(me.eq.itmp) then #else itmp = iran(lprocs)-1 if(iproc.eq.itmp) then #endif do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo enddo call ga_gather(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,v(loop),1) if(v(loop) .ne. a(ilo,jlo))then write(6,*)me,' gather ', ilo,',',jlo,',', a(ilo,jlo) & ,' ',v(loop) call ffflush(6) call ga_error('... exiting ',0) endif enddo endif enddo c if (me.eq.0) then write(6,*) write(6,*) ' gather is OK' write(6,*) call ffflush(6) endif c do j = 1,10 call ga_sync() #ifndef MIRROR if(me.eq.iran(ga_nnodes())-1) then #else if(iproc.eq.iran(lprocs)-1) then #endif do loop = 1,m ilo = iran(n) jlo = iran(n) iv(loop) = ilo jv(loop) = jlo c v(loop) = DSIN(a(ilo,jlo)+b(ilo,jlo)) v(loop) = 1.0 *(ilo+jlo) enddo call ga_scatter(g_a, v, iv, jv, m) do loop = 1,m ilo= iv(loop) jlo= jv(loop) call ga_get(g_a,ilo,ilo,jlo,jlo,w(loop),1) c if(v(loop) .ne. w(loop))then if(w(loop) .ne. 1.0 *(ilo+jlo) )then write(6,*)me,' scatter ', ilo,',',jlo,',',w(loop) & ,' ', 1.0 *(ilo+jlo) call ffflush(6) call ga_error('... exiting ',0) endif enddo endif call ga_sync() enddo c if (me.eq.0) then write(6,*) write(6,*) ' scatter is OK' write(6,*) endif c call ga_sync() c c scatter-acc available in GA ver. 3.0 #ifdef GA3 if (me.eq.0) then write(6,*) write(6,*) ' checking scatter-accumulate' write(6,*) endif c crap = drand(1234) call ga_zero(g_a) c do j = 1, n do i = 1, n b(i,j) =0. enddo enddo c x = .1d0 ii =n do jj = 1,1 call ga_sync() do loop = 1, ii c generate unique i,j pairs 10 continue i = iran(n) j=iran(n) if (found(i,j, iv, jv, loop-1) ) goto 10 iv(loop) = i jv(loop) = j v(loop) = 1.0 *(i+j) #ifndef MIRROR b(i,j) = b(i,j) + nproc*x*v(loop) ! update local ref. array #else b(i,j) = b(i,j) + lprocs*x*v(loop) ! update local ref. array #endif enddo call ga_scatter_acc(g_a,v,iv,jv, ii,x) c call ga_sync() c c check the result c call ga_get(g_a, 1, n, 1,n, a, n) do loop = 1,ii i = iv(loop) j = jv(loop) if(MISMATCHF(a(i,j),b(i,j)))then print *,'Error',i,j,loop,a(i,j),'expected=',b(i,j) * if(me.eq.0)then * do ii=1,loop * print *,'element',ii, iv(ii),jv(ii) * enddo * endif call ga_error('scatter-acc error in trial ',jj) endif enddo call ga_sync() enddo call ga_sync() if (me.eq.0) then write(6,*) write(6,*) ' scatter-accumulate is OK' write(6,*) endif #endif c c Delete the global array c status = ga_destroy(g_a) c return end c_____________________________________________________________ subroutine check_wrappers implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" double precision sum integer isum, ibuf(2) integer me, nproc real fsum c nproc = ga_nnodes() me = ga_nodeid() c call ga_sync() if (me .eq. 0) then write(6,*) write(6,*)'> Checking ga_igop' write(6,*) call ffflush(6) endif ibuf(1) = 1 ibuf(2) = me call ga_igop(10000, ibuf, 2, '+') if(ibuf(1).ne.nproc)then call ga_error('ga_igop error',isum) endif if(ibuf(2).ne.((nproc-1)*nproc/2))then call ga_error('ga_igop error -2',isum) endif call ga_sync() if (me.eq.0) then write(6,*) write(6,*) ' ga_igop is OK' write(6,*) endif call ga_sync() c call ga_sync() if (me .eq. 0) then write(6,*) write(6,*)'> Checking ga_dgop' write(6,*) call ffflush(6) endif sum = 1d0 * me call ga_dgop(10000, sum, 1, '+') if(Int(sum).ne.((nproc-1)*nproc/2))then call ga_error('ga_dgop error',Int(sum)) endif call ga_sync() if (me.eq.0) then write(6,*) write(6,*) ' ga_dgop is OK' write(6,*) endif c call ga_sync() if (me .eq. 0) then write(6,*) write(6,*)'> Checking ga_sgop' write(6,*) call ffflush(6) endif fsum = 1.0 * me call ga_sgop(10000, fsum, 1, '+') if(Int(sum).ne.((nproc-1)*nproc/2))then call ga_error('ga_fgop error',Int(sum)) endif call ga_sync() if (me.eq.0) then write(6,*) write(6,*) ' ga_sgop is OK' write(6,*) endif c call ga_sync() if (me .eq. 0) then write(6,*) write(6,*)'> Checking ga_brdcst' write(6,*) call ffflush(6) endif if(me.eq.nproc-1)then ibuf(1) = me ibuf(2) = nproc endif call ga_brdcst(1000,ibuf,util_mitob(2),nproc-1) if(ibuf(1).ne.nproc-1)call ga_error('ibuf(1) error',ibuf(1)) if(ibuf(2).ne.nproc)call ga_error('ibuf(2) error',ibuf(2)) call ga_sync() if (me .eq. 0) then write(6,*) write(6,*)'> ga_brdcst is OK ' write(6,*) call ffflush(6) endif call ga_sync() return end subroutine check_mem(mem_size) implicit none integer mem_size #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" c integer n,nmax,left,need, me,procs,g_a, g_b logical status c if(.not. ga_memory_limited())return me = ga_nodeid() procs = ga_nnodes() nmax = int(dsqrt(dble(mem_size/util_mitob(1)))) left = mem_size/procs - ga_inquire_memory() n = nmax/2 need = util_mdtob(n*n)/procs c if(me.eq.0)then write(6,*)' ' if(ga_uses_ma())then write(6,*)' CHECKING GA MEMORY RESTRICTIONS (MA used)' else write(6,*)' CHECKING GA MEMORY RESTRICTIONS (MA not used)' endif write(6,*)' ' write(6,*)' ' call print_mem_info(n,left, need, mem_size/procs) endif c status = ga_create(MT_DBL, n, n, 'a', 0, 0, g_a) c if(me.eq.0) then if(status) then write(6,*) ' success' else write(6,*) ' failure' endif call ffflush(6) endif c n = nmax left = mem_size/procs - ga_inquire_memory() need = util_mdtob(n*n)/procs if(me.eq.0)then call print_mem_info(n,left, need, mem_size/procs) endif c status = ga_create(MT_DBL, n, n, 'b', 0, 0, g_b) c if(me.eq.0) then if(status) then write(6,*) ' success' else write(6,*) ' failure' endif write(6,*)' ' write(6,*)' ' call ffflush(6) endif status = ga_destroy(g_a) end subroutine print_mem_info(n,left, need, total) implicit none integer n,left, need, total c write(6,*)' ' if(left - need .ge. 0) then write(6,1)n,n 1 format('> Creating array ',i4,' by ',i4,' -- should succeed') else write(6,2)n,n 2 format('> Creating array ',i4,' by ',i4,' -- SHOULD FAIL') endif write(6,3) need, left, total 3 format(' (need ',i7,' and ',i7,' out of ',i7,' bytes are left)') write(6,*)' ' call ffflush(6) c end subroutine my_lock(g_b) implicit none #include "global.fh" integer g_b, val, flag, i logical first_time double precision dummy common /lock/ val common /dum/ dummy data first_time /.true./ c c this awkward initialization is to avoid a weird problem C with block data on SUN if(first_time)then first_time = .false. dummy = .0 endif c val = ga_read_inc(g_b,1,1, 1) 10 call ga_get(g_b, 2,2,1,1, flag, 1) if(flag.eq.val) return c c to reduce memory stress, wait a while before retrying do i = 1, 100 dummy = dummy + .1 enddo goto 10 end subroutine my_unlock(g_b) implicit none #include "global.fh" integer g_b, val common /lock/ val c call ga_put(g_b, 2,2,1,1, val+1, 1) end logical function found(i,j, iv, jv, n) integer n integer i,j, iv(n), jv(n) integer loop found = .false. do loop = 1, n if(i .eq. iv(loop) .and. j .eq.jv(loop))then found = .true. goto 99 endif enddo 99 continue return end subroutine proc_remap() implicit none #include "global.fh" integer proc(100),nproc,i nproc = ga_nnodes() if(nproc.gt.100) $ call ga_error("remap requires<=100 processes",nproc) do i = 1, nproc proc(i) = nproc-i enddo c call ga_register_proclist(proc,nproc) end subroutine util_rfill(n,val,a,ia) implicit none real a(*), val integer n, ia, i c c initialise real array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end subroutine util_dfill(n,val,a,ia) implicit none double precision a(*), val integer n, ia, i c c initialise double precision array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end subroutine util_ifill(n,val,a,ia) implicit none integer n, ia, i, a(*),val c c initialise integer array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end subroutine util_qfill(n,val,a,ia) implicit none double complex a(*), val integer n, ia, i c c initialise double complex array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end ga-5-3/global/testing/perf.F0000640005473000001440000004151311411137303014552 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c $Id: perf.F,v 1.8 2005-01-12 02:07:10 manoj Exp $ c------------------------------------------------------------------------ c Program perf.x is used to test performance of GA put, get, accumulate | c It has to be executed on four processors. | c remote operations access data on processes 1,2,3 in the round-robin way| c------------------------------------------------------------------------ c #ifdef __crayx1 #define SLEEP my_sleep #else #define SLEEP sleep #endif program perf implicit none #include "mafdecls.fh" #include "global.fh" integer heap c c*** Intitialize a message passing library c #include "mp3.fh" c c*** Intitialize the GA package call ga_initialize() if(ga_nnodes().ne.4 .and. ga_nodeid().eq.0) $ call ga_error('Program requires 4 GA processes',ga_nnodes()) c c*** enables MA to use ARMCI memory call set_ma_use_armci_mem() c c*** Initialize the MA package heap = 900000 if (.not. ma_init(MT_DBL, heap,heap)) $ call ga_error('ma init failed',2*heap) c call test2D() call test1D() c if(ga_nodeid().eq.0) print *,'All tests successful ' c call ga_terminate() c call MP_FINALIZE() end subroutine test1D() implicit none #include "mafdecls.fh" #include "global.fh" c c integer n, nn, num_chunks parameter (n = 1024*1024, nn = n/4, num_chunks=16) double precision buf(nn) c integer g_a integer ilo, ihi, jlo, jhi integer nproc, me, h_d MA_ACCESS_INDEX_TYPE loop, indexd integer chunk(num_chunks) data chunk /1,9,16,81,256,576,900,2304,4096,8281, $ 16384,29241,65536,124609,193600,262144/ c nproc = ga_nnodes() me = ga_nodeid() c c*** Create global array if (.not. ga_create(MT_DBL, n, 1, 'a', 0, 0, g_a)) $ call ga_error(' ga_create failed ',1) c c*** allocate memory for D if(.not. ma_push_get(MT_DBL,nn,'d',h_d, indexd)) & call ga_error('memory allocation failed',0) c do loop=1,nn buf(loop) = .01d0 enddo do loop=0,nn-1 DBL_MB(indexd+loop) = .01d0 enddo call ga_zero(g_a) c if (me .eq. 0) then write(*,*)' ' write(*,*)' ' write(*,*)' ' write(*,55)n 55 format(' Performance of GA get, put & acc', $ ' for 1-dimensional sections of array[',i7,']') print *,' ' endif c c do loop=1,2 c c*** local ops c call ga_distribution(g_a, me, ilo, ihi, jlo, jhi) call TestPutGetAcc1 & (g_a, n, chunk, num_chunks, DBL_MB(indexd), ilo, ihi, & jlo, jhi, .true.) c c*** remote ops c call TestPutGetAcc1 & (g_a, n, chunk, num_chunks, DBL_MB(indexd), ilo, ihi, & jlo, jhi,.false.) c enddo if(.not. ma_pop_stack(h_d)) call ga_error('invalid MA handle ?',0) end subroutine TestPutGetAcc1 & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo,jhi, local) implicit none #include "global.fh" #include "testutil.fh" c integer num_chunks, chunk(num_chunks) integer n, ilo, ihi, jlo,jhi,g_a double precision buf(*), tg, tp, ta double precision time_acc1, time_get1, time_put1 logical local c integer me integer loop, jump, count, bytes c me = ga_nodeid() if (me .eq. 0) then write(6,*)' ' if(local) then write(6,'(26X, 25HLocal 1-D Array Section )') else write(6,'(26X, 25HRemote 1-D Array Section )') endif write(6,*)' section get put', & ' accumulate' write(6,*)' bytes dim usec MB/s usec MB/s', & ' usec MB/s' call ffflush(6) endif call ga_sync() c do loop = 1, num_chunks bytes = util_mdtob(1)*chunk(loop) ! how much data is accessed jump = n/(6000*loop)!jump distance between consecutive patches if(loop.eq.num_chunks)jump=0 c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, 1 , 1d0*me*loop) if (me .eq. 0) then tg=time_get1(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, 1 , 1d0*me*loop) if (me .eq. 0) then tp=time_put1(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, 1 , 1d0*me*loop) if (me .eq. 0) then ta=time_acc1(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c if (me .eq. 0) then write(6,77)bytes, chunk(loop), & tg/1d-6, 1d-6*bytes/tg, & tp/1d-6, 1d-6*bytes/tp, & ta/1d-6, 1d-6*bytes/ta call ffflush(6) endif enddo c 77 format(i7, i7,1x, 3(1x,e8.3,1x,e8.3)) end double precision function & time_acc1(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je logical local integer rows, indx, shifti(3) c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 shifti(1) = rows shifti(2) = 2*rows shifti(3) = 3*rows jlo = js jhi = je seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 count = count + 1 if (local) then call ga_acc(g_a, ilo, ihi, jlo, jhi, buf, chunk, 1d0) else indx = Mod(count,3) + 1 call ga_acc(g_a, ilo+shifti(indx), ihi+shifti(indx), $ jlo, jhi, buf, chunk, 1d0) endif enddo seconds = util_timer() - seconds c time_acc1 = seconds/count end double precision function & time_get1(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je integer rows, indx, shifti(3) logical local c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 shifti(1) = 3*rows shifti(2) = 2*rows shifti(3) = rows jlo = js jhi = je seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 count = count + 1 if (local) then call ga_get(g_a, ilo, ihi, jlo, jhi, buf, chunk) else indx = Mod(count,3) + 1 call ga_get(g_a, ilo+shifti(indx), ihi+shifti(indx), $ jlo, jhi, buf, chunk) endif enddo seconds = util_timer() - seconds c time_get1 = seconds/count end double precision function & time_put1(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je integer rows, indx, shifti(3), shiftj(3) logical local c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 shifti(1) = rows shifti(2) = 2*rows shifti(3) = 3*rows jlo = js jhi = je seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 count = count + 1 if (local) then call ga_put(g_a, ilo, ihi, jlo, jhi, buf, chunk) else indx = Mod(count,3) + 1 call ga_put(g_a, ilo+shifti(indx), ihi+shifti(indx), $ jlo, jhi, buf, chunk) endif enddo seconds = util_timer() - seconds c time_put1 = seconds/count end c c test for square patches c subroutine test2D() implicit none #include "mafdecls.fh" #include "global.fh" c integer n, nn, num_chunks parameter (n = 1024, nn = n*n/4, num_chunks=16) double precision buf(nn) c integer g_a integer ilo, ihi, jlo, jhi integer nproc, me, h_d MA_ACCESS_INDEX_TYPE indexd, loop integer chunk(num_chunks) data chunk /1,3,4,9,16,24,30,48,64,91,128,171,256,353,440,512/ c nproc = ga_nnodes() me = ga_nodeid() c c*** Create global array if (.not. ga_create(MT_DBL, n, n, 'a', 0, 0, g_a)) $ call ga_error(' ga_create failed ',1) c c*** allocate memory for D if(.not. ma_push_get(MT_DBL,nn,'d',h_d, indexd)) & call ga_error('memory allocation failed',0) c do loop=1,nn buf(loop) = .01d0 enddo do loop=0,nn-1 DBL_MB(indexd+loop) = .01d0 enddo call ga_zero(g_a) c if (me .eq. 0) then write(*,*)' ' write(*,55)n,n 55 format(' Performance of GA get, put & acc', $ ' for square sections of array[',i4,',',i4,']') print *,' ' endif c c do loop=1,2 c c*** local ops c call ga_distribution(g_a, me, ilo, ihi, jlo, jhi) call TestPutGetAcc & (g_a, n, chunk, num_chunks, DBL_MB(indexd), ilo, ihi, & jlo, jhi, .true.) c c*** remote ops c call TestPutGetAcc & (g_a, n, chunk, num_chunks, DBL_MB(indexd), ilo, ihi, & jlo, jhi,.false.) c enddo if(.not. ma_pop_stack(h_d)) call ga_error('invalid MA handle ?',0) end subroutine TestPutGetAcc & (g_a, n, chunk, num_chunks, buf, ilo, ihi, jlo,jhi, local) implicit none #include "global.fh" #include "testutil.fh" c integer num_chunks, chunk(num_chunks) integer n, ilo, ihi, jlo,jhi,g_a double precision buf(*), tg, tp, ta double precision time_acc, time_get, time_put logical local c integer me integer loop, jump, count, bytes c me = ga_nodeid() if (me .eq. 0) then write(6,*)' ' if(local) then write(6,'(26X, 25HLocal 2-D Array Section )') else write(6,'(26X, 25HRemote 2-D Array Section )') endif write(6,*)' section get put', & ' accumulate' write(6,*)' bytes dim usec MB/s usec MB/s', & ' usec MB/s' call ffflush(6) endif call ga_sync() c do loop = 1, num_chunks bytes = util_mdtob(1)*chunk(loop)*chunk(loop) !how much data jump = n/(60*loop) ! jump distance between consecutive patches if(loop.eq.num_chunks)jump=0 c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, n , 1d0*me*loop) if (me .eq. 0) then tg=time_get(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, n , 1d0*me*loop) if (me .eq. 0) then tp=time_put(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c c everybody touches own data call ga_fill_patch(g_a, 1, n, 1, n , 1d0*me*loop) if (me .eq. 0) then ta=time_acc(g_a,ilo,ihi,jlo,jhi,buf,chunk(loop),jump,count, $ local) else call SLEEP(1) endif c if (me .eq. 0) then write(6,77)bytes, chunk(loop), & tg/1d-6, 1d-6*bytes/tg, & tp/1d-6, 1d-6*bytes/tp, & ta/1d-6, 1d-6*bytes/ta call ffflush(6) endif enddo c 77 format(i7, i7,1x, 3(1x,e8.3,1x,e8.3)) end double precision function & time_acc(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je logical local integer rows, cols, indx, shifti(3), shiftj(3) c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 cols = je - js + 1 shifti(1) = rows shifti(2) = 0 shifti(3) = rows shiftj(1) = 0 shiftj(2) = cols shiftj(3) = cols seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 do jlo = js, je -chunk-jump +1, chunk+jump jhi = jlo + chunk -1 count = count + 1 if (local) then call ga_acc(g_a, ilo, ihi, jlo, jhi, buf, chunk, 1d0) else indx = Mod(count,3) + 1 call ga_acc(g_a, ilo+shifti(indx), ihi+shifti(indx), $ jlo+shiftj(indx), jhi+shiftj(indx), $ buf, chunk, 1d0) endif enddo enddo seconds = util_timer() - seconds c time_acc = seconds/count end double precision function & time_get(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je integer rows, cols, indx, shifti(3), shiftj(3) logical local c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 cols = je - js + 1 shifti(1) = rows shifti(2) = 0 shifti(3) = rows shiftj(1) = 0 shiftj(2) = cols shiftj(3) = cols seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 do jlo = js, je -chunk-jump +1, chunk+jump jhi = jlo + chunk -1 count = count + 1 if (local) then call ga_get(g_a, ilo, ihi, jlo, jhi, buf, chunk) else indx = Mod(count,3) + 1 call ga_get(g_a, ilo+shifti(indx), ihi+shifti(indx), $ jlo+shiftj(indx), jhi+shiftj(indx), $ buf, chunk) endif enddo enddo seconds = util_timer() - seconds c time_get = seconds/count end double precision function & time_put(g_a, is, ie, js, je, buf, chunk, jump, count, local) c implicit none #include "global.fh" #include "testutil.fh" c integer g_a, chunk, jump, count, is, js, ie, je integer rows, cols, indx, shifti(3), shiftj(3) logical local c integer ilo, ihi, jlo, jhi double precision seconds, buf c count = 0 rows = ie - is + 1 cols = je - js + 1 shifti(1) = rows shifti(2) = 0 shifti(3) = rows shiftj(1) = 0 shiftj(2) = cols shiftj(3) = cols seconds = util_timer() c c distance between consecutive patches increased by jump c to destroy locality of reference do ilo = is, ie -chunk-jump +1, chunk+jump ihi = ilo + chunk -1 do jlo = js, je -chunk-jump +1, chunk+jump jhi = jlo + chunk -1 count = count + 1 if (local) then call ga_put(g_a, ilo, ihi, jlo, jhi, buf, chunk) else indx = Mod(count,3) + 1 call ga_put(g_a, ilo+shifti(indx), ihi+shifti(indx), $ jlo+shiftj(indx), jhi+shiftj(indx), $ buf, chunk) endif enddo enddo seconds = util_timer() - seconds c time_put = seconds/count end subroutine my_sleep(seconds) implicit none #include "global.fh" #include "testutil.fh" c double precision ts, te, work integer seconds, loop common /sleep_block/ work c ts = util_timer() work = 0. 100 continue do loop= 1, 500 work = work + 1. enddo te = util_timer() if(te - ts .lt. real(seconds)) goto 100 * print *, work, ts, te end ga-5-3/global/testing/testutil.fh0000640005473000001440000000022511417373344015713 0ustar d3n000users double precision drand, util_timer integer util_mitob, util_mdtob external drand, util_timer external util_mitob, util_mdtob ga-5-3/global/testing/d2test.F0000640005473000001440000002773511731734557015060 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c vector boxes lack arithmetic precision #ifdef CRAY_YMP # define THRESH 1d-10 #elif defined(FUJITSU) # define THRESH 1d-12 # define THRESHF 1e-5 #else # define THRESH 1d-13 # define THRESHF 1e-5 #endif #define MISMATCH(x,y) abs(x-y)/max(1d0,abs(x)).gt.THRESH #define MISMATCHF(x,y) abs(x-y)/max(1.0,abs(x)).gt.THRESHF program main implicit none #include "mafdecls.fh" #include "global.fh" #include "testutil.fh" integer heap, stack, fudge, ma_heap, me integer nmax, DIM, nwidth, MAXPROC, nloop parameter (nmax = 4, DIM = 2, nwidth = 2, MAXPROC = 2000) parameter (nloop = 1) integer ndim, nproc, pdims(7), type, dcnt, g_a, maxval integer i, j, k, dims(7), width(7), map(MAXPROC+1) integer lo(7), hi(7), ld(7) integer lo2(7), hi2(7), ld2(7) integer dims3(7), ld3(7), chunk(7) integer a(nmax, nmax), b(nmax+2*nwidth,nmax+2*nwidth) double precision start,finish,start1,finish1,t1,t2,t3,t4,t5,tmp double precision t6,t7 logical status, safe_put, safe_get, has_data(0:MAXPROC-1) parameter (heap=60*60*4, fudge=100, stack=100*100) GA_ACCESS_INDEX_TYPE index3 c c*** Intitialize a message passing library c #include "mp3.fh" c c*** Initialize GA c c There are 2 choices: ga_initialize or ga_initialize_ltd. c In the first case, there is no explicit limit on memory usage. c In the second, user can set limit (per processor) in bytes. c print* call ga_initialize() nproc = ga_nnodes() me = ga_nodeid() c we can also use GA_set_memory_limit BEFORE first ga_create call c ma_heap = heap + fudge call GA_set_memory_limit(util_mdtob(ma_heap)) c if(ga_nodeid().eq.0)then print *,' GA initialized ' call ffflush(6) endif c c*** Initialize the MA package c MA must be initialized before any global array is allocated c status = ma_init(MT_DCPL, stack, ma_heap) if (.not. status) call ga_error('ma_init failed',-1) c if(me.eq.0)then print *, 'using ', nproc, ' process(es)' call ffflush(6) endif c c Test ghost distributions c ndim = DIM c c Create irregular distribution on all nodes c call factor(nproc,ndim,pdims) dims(1) = pdims(1) * nmax dims(2) = pdims(2) * nmax maxval = 1 do i = 1, ndim maxval = dims(i)*maxval end do maxval = maxval - 1 c dcnt = 1 do i = 1, pdims(1) map(dcnt) = (i-1)*nmax + 1 dcnt = dcnt + 1 end do do i = 1, pdims(2) map(dcnt) = (i-1)*nmax + 1 dcnt = dcnt + 1 end do c do i = 1, ndim width(i) = nwidth chunk(i) = 1 if (pdims(i).gt.dims(i)) pdims(i) = dims(i) if (me.eq.0) then write(6,*) 'Value of pdims(',i,') is ',pdims(i) endif call ffflush(6) ld(i) = nmax end do if (me.eq.0) then do i = 1, dcnt - 1 write(6,'("map(",i2,") = ",i5)') i,map(i) call ffflush(6) end do endif type = MT_INT status = nga_create_ghosts_irreg (type, ndim, dims, width, + "test_array", map, pdims, g_a) if (status.and.me.eq.0) then write(6,*) '*' write(6,*) '* Global array creation was successful' write(6,*) '*' elseif (.not.status) then write(6,*) 'Global array creation failure on ',me endif c c Find processors that have data c call ga_sync do i = 0, nproc-1 call nga_distribution(g_a, i, lo, hi) has_data(i) = .true. do j = 1, ndim if (lo(j).eq.0.and.hi(j).eq.-1) has_data(i) = .false. end do if (me.eq.i) then write(6,*) '*' write(6,*) '* Distribution on processor ',i write(6,*) '*' write(6,110) lo(1), hi(1) write(6,110) lo(2), hi(2) 110 format(2i10) endif call ffflush(6) call ga_sync end do c c initialize g_a c call ga_sync call nga_distribution(g_a, me, lo, hi) do i = 1, hi(1) - lo(1) + 1 do j = 1, hi(2) - lo(2) + 1 a(i,j) = (i + lo(1) - 2)*dims(1) + (j + lo(2) - 2) + 1 end do end do safe_put = .true. do i = 1, ndim if (hi(i).lt.lo(i)) safe_put = .false. end do if (has_data(me).and.safe_put) call nga_put(g_a, lo, hi, a, ld) c c print out values of a c do k = 0, nproc-1 call ga_sync if (k.eq.me.and.has_data(me).and.maxval.lt.10000) then write(6,*) write(6,*) 'Initial data on processor ',k write(6,*) do i = 1, min(hi(1)-lo(1)+1,10) write (6,101) (a(i,j),j=1,min(hi(2)-lo(2)+1,10)) end do call ffflush(6) endif end do 101 format(10x,10i5) call ffflush(6) c go to 122 t1 = 0.0d00 do i = 1, nloop start = util_timer() status = nga_update_ghost_dir(g_a,1,1,.true.) status = nga_update_ghost_dir(g_a,1,-1,.true.) status = nga_update_ghost_dir(g_a,2,1,.true.) status = nga_update_ghost_dir(g_a,2,-1,.true.) finish = util_timer() t1 = t1 + finish - start end do t1 = t1/dble(nloop) if (me.eq.0) then write(6,*) '*' write(6,*) '* Completed update successfully' write(6,*) '*' call ffflush(6) endif c c get patch with ghost cells c do i = 1, ndim lo2(i) = lo(i) - width(i) hi2(i) = hi(i) + width(i) ld2(i) = ld(i) + 2*width(i) end do call ga_sync call ffflush(6) do i = 0, nproc-1 if (i.eq.me) then write(6,*) '*' write(6,*) 'ghost patch dimensions on processor ',i write(6,*) '*' do j = 1, ndim write(6,*) 'lo(',j,') = ',lo2(j) write(6,*) 'hi(',j,') = ',hi2(j) write(6,*) 'ld(',j,') = ',ld2(j) end do write(6,*) '*' endif call ga_sync call ffflush(6) end do safe_get = .true. t2 = 0.0d00 t3 = 0.0d00 do i = 1, nloop start = util_timer() call ga_sync start1 = util_timer() if (has_data(me).and.safe_get) + call nga_periodic_get(g_a, lo2, hi2, b, ld2) finish1 = util_timer() call ga_sync finish = util_timer() t2 = t2 + finish1 - start1 t3 = t3 + finish - start end do t2 = t2/dble(nloop) t3 = t3/dble(nloop) if (me.eq.0.and.maxval.lt.10000) then write(6,*) '*' write(6,*) '* Write out contents of local patch using' write(6,*) '* nga_periodic_get' write(6,*) '*' call ffflush(6) endif do k = 0, nproc-1 call ga_sync if (me.eq.k.and.has_data(me).and.maxval.lt.10000) then write(6,*) '*' write(6,*) '* Data on processor ',k write(6,*) '*' do i = 1, min(hi2(1)-lo2(1)+1,12) write (6,102) (b(i,j),j=1,min(hi2(2)-lo2(2)+1,12)) end do call ffflush(6) endif end do 102 format(14i5) if (me.eq.0) then write(6,*) '*' write(6,*) '* Performing nga_access_ghosts' write(6,*) '*' call ffflush(6) endif if (has_data(me)) call nga_access_ghosts(g_a, dims3, + index3, ld3) call ga_sync if (maxval.lt.10000) + call aprint(int_mb(index3),dims3(1),dims3(2),ld3,has_data) call atest(int_mb(index3),dims3(1),dims3(2),ld3,b, + nmax+2*nwidth,has_data) call ga_sync tmp = t1 call ga_dgop(1,tmp,1,'max') if (me.eq.0) then write(6,*) 'Maximum time for nga_update_ghosts ',tmp endif tmp = t1 call ga_dgop(2,tmp,1,'min') if (me.eq.0) then write(6,*) 'Minimum time for nga_update_ghosts ',tmp endif tmp = t1 call ga_dgop(3,tmp,1,'+') if (me.eq.0) then write(6,*) 'Average time for nga_update_ghosts ',tmp/dble(nproc) endif tmp = t2 call ga_dgop(4,tmp,1,'max') if (me.eq.0) then write(6,*) 'Maximum time for nga_periodic_get ',tmp endif tmp = t2 call ga_dgop(5,tmp,1,'min') if (me.eq.0) then write(6,*) 'Minimum time for nga_periodic_get ',tmp endif tmp = t2 call ga_dgop(6,tmp,1,'+') if (me.eq.0) then write(6,*) 'Average time for nga_periodic_get ',tmp/dble(nproc) endif tmp = t3 call ga_dgop(4,tmp,1,'max') if (me.eq.0) then write(6,*) 'Maximum time for (sync)nga_periodic_get ',tmp endif tmp = t3 call ga_dgop(5,tmp,1,'min') if (me.eq.0) then write(6,*) 'Minimum time for (sync)nga_periodic_get ',tmp endif tmp = t3 call ga_dgop(6,tmp,1,'+') if (me.eq.0) then write(6,*) 'Average time for (sync)nga_periodic_get ', + tmp/dble(nproc) endif 127 continue c c*** Print success c if (me.eq.0) then write(6,*) write(6,*) 'All tests successful' write(6,*) endif c c*** Tidy up the GA package c call ga_terminate() c c*** Tidy up after message-passing library c call MP_FINALIZE() c stop end c subroutine aprint(a,nrow,ncol,ld,has_data) #include "global.fh" integer ld integer a(ld,*) integer i, j, k, nproc logical has_data(0:1999) nproc = ga_nnodes() do k = 1, nproc call ga_sync if (k-1.eq.ga_nodeid().and.has_data(k-1)) then write(6,*) '*' write(6,*) '* Data on processor ',k-1 write(6,*) '*' do i = 1, min(nrow,12) write (6,102) (a(i,j), j = 1, min(ncol,12)) 102 format(14i5) end do endif call ffflush(6) enddo c return end c subroutine atest(a,nrow,ncol,ld,b,ld2,has_data) #include "global.fh" integer ld integer a(ld,*), b(ld2,*) integer i, j, k, nproc logical has_data(0:1999), check_data nproc = ga_nnodes() check_data = .true. do k = 1, nproc call ga_sync if (k-1.eq.ga_nodeid().and.has_data(k-1)) then do i = 1, nrow do j = 1, ncol if (a(i,j).ne.b(i,j)) check_data = .false. end do end do if (check_data) then write(6,*) '*' write(6,*) '* Data from nga_access_ghosts and' write(6,*) '* nga_periodic_get is the same on' write(6,*) '* processor ',k-1 write(6,*) '*' else write(6,*) '*' write(6,*) '* Data from nga_access_ghosts and' write(6,*) '* nga_periodic_get is NOT the same on' write(6,*) '* processor ',k-1 write(6,*) '*' endif endif call ffflush(6) enddo c return end c subroutine factor(p,ndim,dims) implicit none integer i,j,p,ndim,dims(7),imin,mdim integer ip,ifac,pmax,prime(1000) integer fac(1000) c i = 1 ip = p do i = 1, ndim dims(i) = 1 end do c c factor p completely c first, find all prime numbers less than or equal to p c pmax = 0 do i = 2, p do j = 1, pmax if (mod(i,prime(j)).eq.0) go to 100 end do pmax = pmax + 1 prime(pmax) = i 100 continue end do c c find all prime factors of p c ifac = 0 do i = 1, pmax 200 if (mod(ip,prime(i)).eq.0) then ifac = ifac + 1 fac(ifac) = prime(i) ip = ip/prime(i) go to 200 endif end do c c determine dimensions of processor grid c do i = ifac, 1, -1 c c find dimension with minimum value c imin = dims(1) mdim = 1 do j = 2, ndim if (dims(j).lt.imin) then imin = dims(j) mdim = j endif end do dims(mdim) = dims(mdim)*fac(i) end do c return end ga-5-3/global/testing/simple_groups_commc.c0000640005473000001440000000432712115442660017732 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include "ga.h" #include "ga-mpi.h" #include "macdecls.h" #define n 4 #define PROC_LIST_SIZE 100 int main(int argc, char **argv) { int me; int g_a; int status; int i,j; int dims[] = {n,n}; int proc_group[PROC_LIST_SIZE],proclist[PROC_LIST_SIZE],inode; int sbuf[1],rbuf[1]; MPI_Comm comm; MPI_Init(&argc, &argv); GA_Initialize(); me = GA_Nodeid(); status = MA_init(MT_DBL, 100000, 100000); if (!status) GA_Error("ma_init failed",-1); status = MA_set_auto_verify(1); status = MA_set_hard_fail(1); status = MA_set_error_print(1); inode = GA_Cluster_nodeid(); if (me == 0) { printf("there are %d nodes, node 0 has %d procs\n", GA_Cluster_nnodes(), GA_Cluster_nprocs(0)); fflush(stdout); } GA_Sync(); for (i=0; i #endif #if HAVE_STDLIB_H # include #endif #include "macdecls.h" #include "ga.h" #include "mp3.h" /* utilities for GA test programs */ #include "testutil.h" #define N 10 /* first dimension */ #define NDIM 4 /* number of dimensions */ #define PERMUTE_ #ifdef USE_FAPI #define BASE 1 #define GROWS_FIRST 0 #else #define BASE 0 #define GROWS_FIRST (NDIM-1) #endif /*\ fill n-dimensional array section with value \*/ void fill_patch(double *ptr, int dim[], int ld[], int ndim, double val) { int i, j, stride=1; switch (ndim){ case 0: GA_Error("fill_patch: error",ndim); case 1: for(i=0;i adims[d] ){ map[offset] = regions[i].lo[d]; offset++; block[d]++; adims[d]= regions[i].hi[d]; } if(me==0){ printf("Distribution map contains %d elements\n",offset); print_subscript("number of blocks for each dimension",ndim,block,"\n"); print_subscript("distribution map",offset,map,"\n\n"); fflush(stdout); } if(me==0)printf("Creating array B applying distribution of A\n"); # ifdef USE_DUPLICATE g_b = GA_Duplicate(g_a,"array B"); # else g_b = NGA_Create_irreg(MT_F_DBL, NDIM, dims, "array B", block,map); # endif if(!g_b) GA_Error("create failed: B",1); if(me==0)printf("OK\n\n"); free(proclist); free(regions); free(map); GA_Print_distribution(g_b); GA_Sync(); if(me==0){ printf("\nCompare distributions of A and B\n"); if(GA_Compare_distr(g_a,g_b)) printf("Failure: distributions NOT identical\n"); else printf("Success: distributions identical\n"); fflush(stdout); } if(me==0){ printf("\nAccessing local elements of A: set them to the owner process id\n"); fflush(stdout); } GA_Sync(); NGA_Distribution(g_a,me,lo,hi); if(hi[0]>=0){ /* -1 means no array elements stored on this processor */ double *ptr; char msg[100]; int locdim[NDIM]; NGA_Access(g_a, lo,hi, &ptr, ld); sprintf(msg,"%d: leading dimensions",me); print_subscript(msg,ndim-1,ld,"\n"); for(i=0;i #endif #if HAVE_MATH_H # include #endif #include "ga.h" #include "macdecls.h" #include "mp3.h" #define N 100 /* dimension of matrices */ void do_work() { int ONE=1 ; /* useful constants */ int g_a, g_b; int n=N, type=MT_F_DBL; int me=GA_Nodeid(), nproc=GA_Nnodes(); int i, row; int dims[2]={N,N}; int lo[2], hi[2]; /* Note: on all current platforms DoublePrecision == double */ double buf[N], err, alpha, beta; if(me==0)printf("Creating matrix A\n"); g_a = NGA_Create(type, 2, dims, "A", NULL); if(!g_a) GA_Error("create failed: A",n); if(me==0)printf("OK\n"); if(me==0)printf("Creating matrix B\n"); /* create matrix B so that it has dims and distribution of A*/ g_b = GA_Duplicate(g_a, "B"); if(! g_b) GA_Error("duplicate failed",n); if(me==0)printf("OK\n"); GA_Zero(g_a); /* zero the matrix */ if(me==0)printf("Initializing matrix A\n"); /* fill in matrix A with random values in range 0.. 1 */ lo[1]=0; hi[1]=n-1; for(row=me; row 0 : the leading minor of this order c* is not positive definite and the c* factorization could not be completed c* c*********************************************************************** integer function ga_cholesky(uplo, g_a) implicit none character*1 uplo ! (input) 'U' or 'L' integer g_A ! (input/output) integer ga_llt_f ga_cholesky = ga_llt_f(uplo, g_A, -1) end c*********************************************************************** c* function : ga_llt_f c* c* Internal function to compute the Cholesky factorization of c* an NxN double precision symmetric positive definite GA. c* c* Note: applications should use ga_cholesky c* c* On succesful exit A will contain the L/U factor c* on the lower/upper triangular part of the matrix c* c* This if (hsA.eq.-1), otherwise internal state c* is saved for future references. This is c* reserved for internal use. Users should c* not try to set hsA to something c* different from -1 if they do not c* know what they are doing! On exit hsA will c* contain the local A output array in SLS format. c* c* It calls the PDPOTRF ScaLAPACK routine. c* c* It returns c* = 0 : successful exit c* > 0 : the leading minor of this order c* is not positive definite and the c* factorization could not be completed c*********************************************************************** integer function ga_llt_f(uplo, g_A, hsA) implicit none #include "mafdecls.fh" #include "global.fh" #include "scalapack.fh" c**** character*1 uplo ! (input) 'U' or 'L' integer g_A ! (input/output) integer hsA ! (input/output) c**** logical status integer hA, adrA integer dimA18, dimA28, typeA INTGR4 dimA1, dimA2 INTGR4 mpA, nqA INTGR4 info integer me INTGR4 n, ldA integer elemA INTGR4 numroc INTGR4 nb INTGR4 descA(DSCLEN) integer intsize,info8 INTGR4 one4,zero4 parameter(zero4=0,one4=1) logical oactive integer alen,block_dims(2),blocks(2) logical use_direct data nb /NB_/ c**** Check Environment me = ga_nodeid() c**** Check GA info for input array A call ga_check_handle(g_A, 'ga_llt_f: A') call ga_inquire(g_A, typeA, dimA18, dimA28) dima1=dima18 dima2=dima28 c**** if (dimA1.ne.dimA2) then call ga_error('ga_llt_f: g_A must be a square matrix ', 1) endif c c Determine whether or not to use GA data directly c use_direct = ga_uses_proc_grid(g_A) if (use_direct) then call ga_get_block_info(g_A,blocks,block_dims) if (block_dims(1).ne.block_dims(2)) then use_direct = .false. endif endif if (use_direct) then nb = block_dims(1) endif c**** n = dimA1 c**** Initialize SL Interface if (use_direct) then call SLinit3(g_A) else call SLinit() endif c oactive=iam.lt.maxproc oactive=.true. call ga_sync c**** Find SBS format parameters if(oactive) then mpA = numroc(n, nb, myrow, zero4, nprow) nqA = numroc(n, nb, mycol, zero4, npcol) ldA = max(one4,mpA) c**** Allocate A elemA = mpA * nqA status = .true. if (use_direct) then call nga_access_block_segment(g_A,me,adrA,alen) else if (elemA.ne.0) & status = ma_push_get(MT_DBL, elemA, 'A', hA, adrA) if (.not.status) & call ga_error('ga_llt_f: mem alloc failed A ', -1) endif c**** Copy ga to A using SBS ScaLAPACK format if (.not.use_direct) then call ga_to_SL(g_a, n, n, nb, nb, dbl_mb(adrA), ldA, mpA, nqA) endif endif call ga_sync() if(oactive) then c**** Fill ScaLAPACK matrix descriptor call descinit(descA, dimA1, dimA2, nb, nb, zero4, zero4, & iSLctxt, ldA, info) if(info.ne.0) call ga_error('ga_llt_f: descinit A failed', I -info) c**** CALL ScaLAPACK PDPOTRF LLT factorization routine ******* call PDPOTRF(uplo, n, dbl_mb(adrA), one4, one4, descA, info) c************************************************************* if (info.eq.0) then c**** Copy solution matrix back to A if hsA==-1 c**** and zero the L/U triangle part according to uplo if (hsA.eq.-1) then if (.not.use_direct) then call ga_from_SL(g_A, dimA1, dimA2, nb, nb, dbl_mb(adrA), & mpA, ldA, nqA) endif endif c c**** If the SL A array was allocated if (elemA.ne.0) then c**** and hsA==-1 or info>0 (i.e. fact. cannot be completed) c**** then deallocate the SL A MA array if ((hsA.eq.-1).or.(info.gt.0)) then if (.not.use_direct) then status = ma_pop_stack(hA) endif c**** otherwise just save the hA MA handle else hsA = hA endif endif endif endif c call ga_sync() #if 0 info8=info if(maxproc.lt.nnodes) then intsize=ma_sizeof(MT_INT,1,MT_BYTE) call ga_brdcst(1688,info8,intsize,0) endif info=info8 #endif if (info.eq.0) then if (hsA.eq.-1) then call ga_zeroUL(uplo, g_A) endif elseif (info.lt.0) then call ga_error('ga_llt_f: PDPOTRF failed ', -info) endif ga_llt_f = info c if (use_direct) then call slexit3 else call slexit endif end c*********************************************************************** c* subroutine: ga_llt_s c* c* Solves a system of linear equations c* c* A * X = B c* c* where A is the lower triangle L or the upper c* triangular Cholesky factor U of a NxN double precision c* symmetric positive definite global array (LL' or U'U) c* obtained from ga_llt_f routine. c* c* If (hsA.eq.-1) then you "must" give in input c* the lower or upper triangular Cholesky factor. c* For internal use, if (hsA.ne.-1) then hsA is c* the MA handle of the Cholesky L/U factor already c* in SBS SL format. c* c* On successful exit B will contain the solution X. c* c* It calls the PDPOTRS ScaLAPACK routine. c*********************************************************************** subroutine ga_llt_s(uplo, g_A, g_B, hsA) implicit none #include "mafdecls.fh" #include "global.fh" #include "scalapack.fh" c**** character*1 uplo ! (input) 'U' or 'L' integer g_A ! (input) integer g_B ! (input/ouput) integer hsA ! (input) c**** logical status integer hA, adrA integer hB, adrB integer dimA18, dimA28, typeA integer dimB18, dimB28, typeB INTGR4 dimA1, dimA2 INTGR4 dimB1, dimB2 INTGR4 mpA, nqA INTGR4 mpB, nqB INTGR4 info integer me INTGR4 n, ldA, ldB integer elemA, elemB INTGR4 numroc INTGR4 nb INTGR4 descA(DSCLEN), descB(DSCLEN) INTGR4 one4,zero4 parameter(zero4=0,one4=1) c integer block_dims_A(2),block_dims_B(2),blocks(2) integer gridA(2), gridB(2) logical uses_sl_A, uses_sl_B integer alen, blen logical use_direct c data nb /NB_/ c c**** Check the Environment me = ga_nodeid() c**** Check GA info for input array F, B call ga_check_handle(g_A, 'ga_llt_s: A') call ga_check_handle(g_B, 'ga_llt_s: B') call ga_inquire(g_A, typeA, dimA18, dimA28) call ga_inquire(g_B, typeB, dimB18, dimB28) dima1=dima18 dima2=dima28 dimb1=dimb18 dimb2=dimb28 c**** if (dimA1.ne.dimA2) then call ga_error('ga_llt_s: g_A must be a square matrix ', 1) else if (dimA1.ne.dimB1) then call ga_error('ga_llt_s: dims of A and B do not match ', 1) endif c c Determine whether or not to use GA data directly c use_direct = .true. uses_sl_A = ga_uses_proc_grid(g_a) uses_sl_B = .false. if (uses_sl_A) then uses_sl_B = ga_uses_proc_grid(g_b) endif if ((.not.uses_sl_A).or.(.not.uses_sl_B)) then use_direct = .false. endif if (uses_sl_A) then call ga_get_block_info(g_a,blocks,block_dims_A) if (block_dims_A(1).ne.block_dims_A(2)) then use_direct = .false. endif endif if (uses_sl_B) then call ga_get_block_info(g_b,blocks,block_dims_B) if (block_dims_B(1).ne.block_dims_B(2)) then use_direct = .false. endif endif if (use_direct.and.(block_dims_A(1).ne.block_dims_B(1))) then use_direct = .false. endif if (use_direct) then call ga_get_proc_grid(g_a,gridA) call ga_get_proc_grid(g_b,gridB) if (gridA(1).ne.gridB(1).or.gridA(2).ne.gridB(2)) then use_direct = .false. endif endif if (use_direct) then nb = block_dims_A(2) endif c n = dimA1 c**** Initialize SL Interface if (use_direct) then call SLinit3(g_A) else call SLinit() endif #if 1 c**** Find SBS format parameters mpA = numroc(n, nb, myrow, zero4, nprow) nqA = numroc(n, nb, mycol, zero4, npcol) mpB = numroc(n, nb, myrow, zero4, nprow) nqB = numroc(n, nb, mycol, zero4, npcol) ldA = max(one4,mpA) ldB = max(one4,mpB) call ga_sync() c**** Allocate A or retrieve it from the ga_llt_f calls elemA = mpA * nqA status = .true. if (elemA.ne.0) then if (use_direct) then call nga_access_block_segment(g_A,me,adrA,alen) else if (hsA.eq.-1) then status = ma_push_get(MT_DBL, elemA, 'A', hA, adrA) if (.not.status) & call ga_error('ga_llt_s: mem alloc failed A ', -1) c**** copy g_A to A using SBS SL format call ga_to_SL(g_A, n, n, nb, nb, dbl_mb(adrA), & ldA, mpA, nqA) else hA = hsA status = ma_get_index(hA, adrA) if (.not.status) & call ga_error('ga_llt_s: get index failed A ', -1) c**** if hsA was given the SBS SL conversion is avoided endif endif endif c**** Allocate B and copy g_B to B in SBS SL format elemB = mpB * nqB if (use_direct) then call nga_access_block_segment(g_B,me,adrB,blen) else if (elemB.ne.0) status = ma_push_get(MT_DBL,elemB,'B',hB,adrB) if (.not.status) & call ga_error('ga_llt_s: mem alloc failed B ', -1) call ga_to_SL(g_B, n, dimB2, nb, nb, dbl_mb(adrB), ldB, mpB,nqB) endif c c**** Fill ScaLAPACK matrix descriptors for A and B call descinit(descA, dimA1, dimA2, nb, nb, zero4, zero4, & iSLctxt, ldA, info) if(info.ne.0) call ga_error(' ga_llt_s: descinit A failed ', & -info) call descinit(descB, dimB1, dimB2, nb, nb, zero4,zero4, D iSLctxt, ldB, info) if(info.ne.0) call ga_error('ga_llt_s: descinit B failed', -info) c**** CALL ScaLAPACK PDPOTRS solver routine *********************** call ga_sync() call PDPOTRS(uplo, n, dimB2, & dbl_mb(adrA), one4, one4, descA, & dbl_mb(adrB), one4, one4, descB, & info) c****************************************************************** if (info.eq.0) then c**** copy solution matrix back to g_B if (.not.use_direct) then call ga_from_SL(g_B, dimB1, dimB2, nb, nb, dbl_mb(adrB), & mpB, ldB, nqB) endif else call ga_error(' ga_llt_s: PDPOTRS failed: ', -info) endif c**** deallocate work/SL arrays c**** note that should not be others MA allocations c**** between ga_llt_f and ga_llt_s beside A and B if (.not.use_direct) then if (elemB.ne.0) status = ma_pop_stack(hB) if (elemA.ne.0) status = ma_pop_stack(hA) endif c #endif if (use_direct) then call slexit3 else call slexit endif c call ga_sync() end c*********************************************************************** c* function : ga_llt_i c* c* It computes the inverse of a global array c* that is the lower triangle L or the upper c* triangular Cholesky factor U of a NxN double precision c* symmetric positive definite global array (LL' or U'U) c* obtained from the ga_llt_f routine. c* c* If (hsA.eq.-1) then you "must" give in input c* the lower or upper triangular Cholesky factor. c* For internal use, if (hsA.ne.-1) then hsA is c* the MA handle of the Cholesky L/U factor already c* in SBS SL format. c* c* On successful exit A will contain the inverse. c* c* It calls the PDPOTRI ScaLAPACK routine. c* c* It returns c* = 0 : successful exit c* > 0 : it returns the index i of the (i,i) c* element of the factor L/U that is zero and, c* so, the inverse could not be computed c*********************************************************************** integer function ga_llt_i(uplo, g_A, hsA) implicit none #include "mafdecls.fh" #include "global.fh" #include "scalapack.fh" c**** character*1 uplo ! (input) 'U' or 'L' integer g_A ! (input/output) integer hsA ! (input/output) c**** logical status integer hA, adrA integer dimA18, dimA28, typeA INTGR4 dimA1, dimA2 INTGR4 mpA, nqA INTGR4 info integer info8 integer nproc, me INTGR4 n, ldA integer elemA INTGR4 numroc INTGR4 nb INTGR4 descA(DSCLEN) integer intsize logical oactive INTGR4 one4,zero4 parameter(zero4=0,one4=1) integer alen, block_dims(2),blocks(2) logical use_direct c**** data nb /NB_/ c c**** Check Environment nproc = ga_nnodes() me = ga_nodeid() c**** Check GA info for input array A call ga_check_handle(g_A, 'ga_llt_i: A') call ga_inquire(g_A, typeA, dimA18, dimA28) dima1=dima18 dima2=dima28 c**** Check that is actually a square matrix if (dimA1.ne.dimA2) then call ga_error('ga_llt_i: g_A must be a square matrix ', 1) endif c c Determine whether or not to use GA data directly c use_direct = ga_uses_proc_grid(g_A) if (use_direct) then call ga_get_block_info(g_A,blocks,block_dims) if (block_dims(1).ne.block_dims(2)) then use_direct = .false. endif endif if (use_direct) then nb = block_dims(1) endif c n = dimA1 c**** Initialize SL Interface if (use_direct) then call SLinit3(g_A) else call SLinit() endif c oactive=iam.lt.maxproc oactive=.true. call ga_sync() if(oactive) then c**** Find SBS format parameters mpA = numroc(n, nb, myrow, zero4, nprow) nqA = numroc(n, nb, mycol, zero4, npcol) ldA = max(one4, mpA) c**** Allocate A or retrieve it from ga_llt_f call elemA = mpA * nqA if (use_direct) then call nga_access_block_segment(g_A,me,adrA,alen) else if (elemA.ne.0) then status = .true. if (hsA.eq.-1) then status = ma_push_get(MT_DBL, elemA, 'A', hA, adrA) if (.not.status) & call ga_error(' ga_llt_i: mem alloc failed A ', -1) c**** copy g_A to A using SBS SL format call ga_to_SL(g_A, n, n, nb, nb, dbl_mb(adrA), & ldA, mpA, nqA) else hA = hsA status = ma_get_index(hA, adrA) if (.not.status) & call ga_error(' ga_llt_i: get index failed A ', -1) c**** if hsA was given the SBS SL conversion is avoided endif endif endif endif call ga_sync() if(oactive) then c**** Fill ScaLAPACK matrix descriptor for A call descinit(descA, dimA1, dimA2, nb, nb, zero4, zero4, & iSLctxt, ldA, info) if (info.ne.0) call ga_error(' ga_llt_i: descinit A failed ', & -info) c**** CALL ScaLAPACK PDPOTRI matrix inverter ********************** call PDPOTRI(uplo, n, dbl_mb(adrA), one4, one4, descA, info) c****************************************************************** if (.not.use_direct) then if (info.eq.0) then c**** Copy the inverse matrix back to A c**** and symmetrize it call ga_from_SL(g_A, dimA1, dimA2, nb, nb, dbl_mb(adrA), & mpA, ldA, nqA) endif if(elemA.ne.0) status = ma_pop_stack(hA) endif endif call ga_sync() #if 0 info8=info if(maxproc.lt.nnodes) then intsize=ma_sizeof(MT_INT,1,MT_BYTE) call ga_brdcst(1688,info8,intsize,0) endif info=info8 #endif if (info.eq.0) then call ga_symUL(uplo, g_A) elseif (info.lt.0) then call ga_error(' ga_llt_i: PDPOTRI failed ', -info) endif ga_llt_i = info c**** deallocate work/SL arrays c**** note that should not be others MA allocations c**** between ga_llt_f and ga_llt_i c end c*********************************************************************** c* function : gai_llt_solve c* c* Solves a system of linear equations c* c* A * X = B c* c* using the Cholesky factorization of an NxN c* double precision symmetric positive definite c* global array A. c* c* On successful exit B will contain the solution X. c* c* It calls the ga_llt_f and ga_llt_s and so it c* actually refer to PDPORTF/PDPOTRS ScaLAPACK c* routines. c* c* It returns c* = 0 : successful exit c* > 0 : the leading minor of this order c* is not positive definite and the c* factorization could not be completed c*********************************************************************** integer function gai_llt_solve(g_A, g_B) implicit none character*1 uplo ! (internal parameter) 'U' or 'L' integer g_A ! (input) integer g_B ! (input/output) integer hsA integer irc integer ga_llt_f c c**** call the Cholesky factorization routine hsA = 0 uplo = 'L' irc = ga_llt_f(uplo, g_A, hsA) c**** check if the factorization is OK if (irc.eq.0) then c**** if the factorization is OK then solve the system c**** call the ga_llt_s internal interface call ga_llt_s(uplo, g_A, g_B, hsA) gai_llt_solve = 0 else c**** if the factorization is not OK just return the error gai_llt_solve = irc endif end c*********************************************************************** c* function : gai_spd_invert c* c* It computes the inverse of a double precision c* using the Cholesky factorization of a NxN double c* precision symmetric positive definite global array A. c* c* On successful exit A will contain the inverse. c* c* It calls the ga_llt_f and ga_llt_i and so it c* actually refer to PDPORTF/PDPOTRI ScaLAPACK c* routines. c* c* It returns c* = 0 : successful exit c* > 0 : the leading minor of this order c* is not positive definite and the c* factorization could not be completed c* < 0 : it returns the index i of the (i,i) c* element of the factor L/U that is zero and, c* so, the inverse could not be computed c*********************************************************************** integer function gai_spd_invert(g_A) implicit none character*1 uplo ! (internal parameter) 'U' or 'L' integer g_A ! (input) integer hsA integer ircF, ircI integer ga_llt_f integer ga_llt_i c c**** call the Cholesky factorization routine hsA = 0 uplo = 'L' ircF = ga_llt_f(uplo, g_A, hsA) c c**** check if the factorization is OK if (ircF.eq.0) then c**** if the factorization is OK then invert the matrix c**** call the ga_llt_i internal interface ircI = ga_llt_i(uplo, g_A, hsA) if (ircI.eq.0) then gai_spd_invert = 0 else gai_spd_invert = -ircI endif else c**** if the factorization is not OK just return the error gai_spd_invert = ircF endif end c*********************************************************************** c* function: gai_solve c* c* Solves a system of linear equations c* c* A * X = B c* c* It first will call the Cholesky factorization c* routine and, if sucessfully, will solve the system c* with the Cholesky solver. If Cholesky will be not c* be able to factorize A, then it will call the LU c* factorization routine and will solve the system c* with forward/backward substitution. c* c* On B will contain the solution X. c* c* It calls the ga_llt_f and ga_llt_s and gai_lu_solve c* and so it actually refer to PDGETRF/PDGETRS and c* PDPORTF/PDPOTRS ScaLAPACK routines. c* c* It returns c* = 0 : Cholesky factoriztion was succesful c* > 0 : the leading minor of this order c* is not positive definite and Cholesky c* factorization could not be completed c* c* Note: High overhead due to multiple conversions to/from scalapack c* format can be avoided if gai_llt_solve and gai_lu_solve c* were not used as building blocks - possible optimization c* for the future (JN) c*********************************************************************** integer function gai_solve(g_A, g_B) implicit none integer g_A ! (input) integer g_B ! (input/output) integer irc integer gai_llt_solve c c**** Call Cholesky solver as the first try gai_solve = gai_llt_solve(g_A, g_B) if (gai_solve.eq.0) then c**** if Cholesky was succcesully just return else c**** else if Cholesky failed call gai_lu_solve('N', g_A, g_B) endif end c****************************************************************** c c ga_pdsyev c c interface into scalapack's Hermitian eigensolver c c ga interface to scalapack c c g_a .g_b(*,i) = eval(i).g_b(*,i) c c assume equal size blocks ... c c****************************************************************** c subroutine ga_pdsyev(g_a, g_b, eval, nb8) implicit none #include "mafdecls.fh" #include "global.fh" #include "scalapack.fh" c integer g_a ! matrix A integer g_b ! matrix B integer nb8 ! block size c c all eigenvalues are real c double precision eval(*) c c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c logical status c character*1 jobz, uplo c integer ha, adra !A integer hb, adrb !B c c logical oactive ! true iff this process participates integer dimA18, dimA28, typeA integer dimB18, dimB28, typeB INTGR4 dimA1, dimA2 INTGR4 dimB1, dimB2 c INTGR4 mpA, nqA ! rows/cols of A held by the processor INTGR4 mpB, nqB ! rows/cols of B held by the processor c integer me INTGR4 lda, ldb integer elemA,elemB INTGR4 numroc INTGR4 nb ! block size INTGR4 descA(9), descB(9) !descriptor for scalapack c integer lcwork,hcwork, adrcwork INTGR4 lcwork4 c INTGR4 nn,mq0, np0 INTGR4 n INTGR4 info integer info8 integer dblsize,ldc INTGR4 zero4,one4,two4 parameter(zero4=0,one4=1,two4=2) double precision pdlamch,dumm INTGR4 iceil logical uses_sl_A, uses_sl_B integer alen, blen integer block_dims_A(2),block_dims_B(2),blocks(2) integer gridA(2), gridB(2) logical use_direct external pdlamch integer i,j c c processor dependent; machine dependent c if(nb8.eq.0) then nb=16 else nb=nb8 endif c c*** check environment c me = ga_nodeid() c c*** check GA info for input arrays c call ga_check_handle(g_a, 'ga_pdsyev: a') call ga_check_handle(g_b, 'ga_pdsyev: b') c call ga_inquire(g_a, typeA, dimA18, dimA28) call ga_inquire(g_b, typeB, dimB18, dimB28) dima1=dima18 dima2=dima28 dimb1=dimb18 dimb2=dimb28 n=dima1 if(nb.lt.1) nb=1 if(dimA1.ne.dima2) call ga_error( % 'ga_pdsyev: matrix A not square ',0) if(dimb1.ne.dimb2) call ga_error( % 'ga_pdsyev: matrix B not square ',0) if(dimb1.ne.n) call ga_error( % 'ga_pdsyev: size matrix A and B differ ',0) use_direct = .true. uses_sl_A = ga_uses_proc_grid(g_a) uses_sl_B = .false. if (uses_sl_A) then uses_sl_B = ga_uses_proc_grid(g_b) endif if ((.not.uses_sl_A).or.(.not.uses_sl_B)) then use_direct = .false. endif if (uses_sl_A) then call ga_get_block_info(g_a,blocks,block_dims_A) if (block_dims_A(1).ne.block_dims_A(2)) then use_direct = .false. endif endif if (uses_sl_B) then call ga_get_block_info(g_b,blocks,block_dims_B) if (block_dims_B(1).ne.block_dims_B(2)) then use_direct = .false. endif endif if (use_direct.and.(block_dims_A(1).ne.block_dims_B(1))) then use_direct = .false. endif if (use_direct) then call ga_get_proc_grid(g_a,gridA) call ga_get_proc_grid(g_b,gridB) if (gridA(1).ne.gridB(1).or.gridA(2).ne.gridB(2)) then use_direct = .false. endif endif if (use_direct) then nb = block_dims_A(2) endif c c c*** initialize SL interface c if (use_direct) then call SLinit4(g_a) else call SLinit2(n) endif oactive=iam.lt.maxproc if (oactive) then c c*** find SBS format parameters c c mpA = numroc(dimA1, nb, myrow2, zero4, nprow2) nqA = numroc(dimA2, nb, mycol2, zero4, npcol2) c mpB = numroc(dimB1, nb, myrow2, zero4, nprow2) nqB = numroc(dimB2, nb, mycol2, zero4, npcol2) c c lda = max(one4,mpA) ldb = max(one4,mpB) c c c let scalapack check for errors c c should check to see if this is a compute node c check to see how this works in the new data server model c c if (use_direct) then call nga_access_block_segment(g_a,me,adra,alen) call nga_access_block_segment(g_b,me,adrb,blen) else elemA= mpA*nqA status = .true. if (elemA.ne.0)status = $ ma_push_get(MT_DBL,elemA,'a',ha,adra) if (.not.status) & call ga_error('ga_pdsyev: mem alloc failed A ', -1) c elemB= mpB*nqB c if (elemB.ne.0)status = $ ma_push_get(MT_DBL,elemB,'b',hb,adrb) if (.not.status) & call ga_error('ga_pdsyev: mem alloc failed B ', -1) c c c*** copy g_a to A using the block cyclic scalapack format c call ga_to_SL2(g_a, dimA1, dimA2, nb, nb, $ dbl_mb(adrA), lda, mpA, nqA) endif endif call ga_sync() if(oactive) then c c*** fill SCALAPACK matrix descriptors c call descinit(descA, dimA1, dimA2, nb, nb, zero4, zero4, $ islctxt2, lda, info) info8=info if (info8.ne.0) $ call ga_error(' ga_pdsyev: descinit A failed ',-info8) c call descinit(descB, dimB1, dimB2, nb, nb, zero4, zero4, . islctxt2, ldb, info) info8=info if (info8.ne.0) $ call ga_error(' ga_pdsyev: descinit B failed ',-info8) c jobz = 'V' uplo = 'L' c nn = max(n, nb, two4) np0 = numroc(nn, nb, zero4, zero4, nprow2) mq0 = numroc(nn, nb, zero4, zero4, npcol2) c c get lcwork c #if 1 lcwork4=-1 call pdsyev(jobz, uplo, 1 n, dbl_mb(adrA), one4, one4, descA, 2 eval,dbl_mb(adrB), one4, one4, D descB, dumm, lcwork4, 3 info) lcwork=dumm #else lcwork = 5*n +MAX(3*NB,NB*(NP0+1)) c lwmin ldc=numroc(n,nb,myrow2,zero4,nnodes) ldc=max(1,ldc) lcwork=max(lcwork,5*n+n*ldc+1+max(2*n-2,8192)) #endif c if (lcwork.ne.0) $ status = ma_push_get(MT_DBL, lcwork , $ 'cwork',hcwork,adrcwork) if (.not.status) & call ga_error('ga_pdsyev: mem alloc failed cwork ', -1) c c lcwork4=lcwork call pdsyev(jobz, uplo, 1 n, dbl_mb(adrA), one4, one4, descA, 2 eval,dbl_mb(adrB), one4, one4, D descB, dbl_mb(adrcwork), lcwork4, 3 info) c if ( info .ne. 0 ) then if ( info .gt. 0 ) then call ga_error(' ga_pdsyev: argument is illegal ', info) else call ga_error(' ga_pdsyev: eigenvecs not converged ', $ info) endif endif c c*** copy solution matrix back to g_c c if (.not.use_direct) then call ga_from_SL2(g_b, dimA1, dimB2, $ nb, nb, dbl_mb(adrB), & ldb, mpb, nqB) endif c c*** deallocate work/SL arrays c if ( lcwork .ne. 0 ) status = ma_pop_stack(hcwork) if (.not.use_direct) then if ( elemB .ne. 0 ) status = ma_pop_stack(hb) if ( elemA .ne. 0 ) status = ma_pop_stack(ha) endif endif c call ga_sync() if(maxproc.lt.nnodes.or.dima1.le.nb) then c broadcast evals dblsize=ma_sizeof(MT_DBL,1,MT_BYTE)*dima1 call ga_brdcst(1688,eval,dblsize,0) endif if (use_direct) then call SLexit4 else call SLexit2 endif return end c****************************************************************** c c ga_pdsyevx c c****************************************************************** c subroutine ga_pdsyevx(g_a, g_b, eval, nb8) implicit none #include "mafdecls.fh" #include "global.fh" #include "scalapack.fh" c integer g_a ! matrix A integer g_b ! matrix B integer nb8 ! block size c c all eigenvalues are real c double precision eval(*) c c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c logical status c character*1 jobz, range, uplo c integer ha, adra !A integer hb, adrb !B c c logical oactive ! true iff this process participates integer dimA18, dimA28, typeA integer dimB18, dimB28, typeB INTGR4 dimA1, dimA2 INTGR4 dimB1, dimB2 c INTGR4 mpA, nqA ! rows/cols of A held by the processor INTGR4 mpB, nqB ! rows/cols of B held by the processor c integer me INTGR4 lda, ldb integer elemA,elemB INTGR4 numroc INTGR4 nb ! block size INTGR4 descA(9), descB(9) !descriptor for scalapack c integer ngaps, hgap, adrgaps integer iclu, hclustr, adrclustr integer if, hfail, adrfail integer liwork,hiwork, adriwork integer lcwork,hcwork, adrcwork INTGR4 lcwork4 INTGR4 liwork4 c INTGR4 nn,mq0, np0 double precision vl, vu, abstol, orfac INTGR4 il, iu INTGR4 m, nz INTGR4 n INTGR4 info integer info8 integer dblsize INTGR4 zero4,one4,two4,four4 integer two4n parameter(zero4=0,one4=1,two4=2,four4=4) double precision pdlamch,dumm external pdlamch INTGR4 iceil c c processor dependent; machine dependent c if(nb8.eq.0) then nb=16 else nb=nb8 endif c c*** check environment c me = ga_nodeid() c c*** check GA info for input arrays c call ga_check_handle(g_a, 'ga_pdsyevx: a') call ga_check_handle(g_b, 'ga_pdsyevx: b') c call ga_inquire(g_a, typeA, dimA18, dimA28) call ga_inquire(g_b, typeB, dimB18, dimB28) dima1=dima18 dima2=dima28 dimb1=dimb18 dimb2=dimb28 n=dima1 if(nb.lt.1) nb=1 if(dimA1.ne.dima2) call ga_error( % 'ga_pdsyevx: matrix A not square ',0) if(dimb1.ne.dimb2) call ga_error( % 'ga_pdsyevx: matrix B not square ',0) if(dimb1.ne.n) call ga_error( % 'ga_pdsyevx: size matrix A and B differ ',0) c c c*** initialize SL interface c call SLinit2(n) oactive=iam.lt.maxproc call ga_sync if (oactive) then c c*** find SBS format parameters c c mpA = numroc(dimA1, nb, myrow2, zero4, nprow2) nqA = numroc(dimA2, nb, mycol2, zero4, npcol2) c mpB = numroc(dimB1, nb, myrow2, zero4, nprow2) nqB = numroc(dimB2, nb, mycol2, zero4, npcol2) c c lda = max(one4,mpA) ldb = max(one4,mpB) c c c let scalapack check for errors c c should check to see if this is a compute node c check to see how this works in the new data server model c c elemA= mpA*nqA status = .true. if(elemA.ne.0)status = $ ma_push_get(MT_DBL,elemA,'a',ha,adra) if(.not.status) & call ga_error('ga_pdsyevx: mem alloc failed A ', -1) c c*** copy g_a to A using the block cyclic scalapack format c call ga_to_SL2(g_a, dimA1, dimA2, nb, nb, $ dbl_mb(adrA), lda, mpA, nqA) c elemB= mpB*nqB c if(elemB.ne.0)status = $ ma_push_get(MT_DBL,elemB,'b',hb,adrb) if(.not.status) & call ga_error('ga_pdsyevx: mem alloc failed B ', -1) c ngaps = nprow2*npcol2 if(ngaps.ne.0)status = $ ma_push_get(MT_DBL, ngaps ,'gap',hgap,adrgaps) if(.not.status) & call ga_error('ga_pdsyevx: mem alloc failed gaps ', -1) c iclu = 2*nprow2*npcol2 two4n=two4*n iclu = max(two4n,iclu) if(iclu.ne.0)status = $ ma_push_get(MT_INT, iclu ,'iclustr',hclustr,adrclustr) if(.not.status) & call ga_error('ga_pdsyevx: mem alloc failed iclustr',-1) c if = n if(if.ne.0) then status = $ ma_push_get(MT_INT, if ,'ifail',hfail,adrfail) endif if(.not.status) & call ga_error('ga_pdsyevx: mem alloc failed ifail ', -1) endif call ga_sync() if(oactive) then c c*** fill SCALAPACK matrix descriptors c call descinit(descA, dimA1, dimA2, nb, nb, zero4, zero4, $ islctxt2, lda, info) info8=info if(info8.ne.0) call ga_error(' ga_pdsyevx: descinit A failed ', . -info8) c call descinit(descB, dimB1, dimB2, nb, nb, zero4, zero4, . islctxt2, ldb, info) info8=info if(info8.ne.0) call ga_error(' ga_pdsyevx: descinit B failed ', . -info8) c jobz = 'V' range = 'A' range = 'I' uplo = 'L' vl = 0.d0 vu = 0.d0 il = 0 iu = 0 il = 1 ! iu = neigen iu = n nz = 0 c c ability to deal with orthonormality ; let's just c have the regular scalapack stuff for the moment c liwork = 6*max(n, nprow2*npcol2+one4, four4) liwork=liwork if(liwork.ne.0)status = $ ma_push_get(MT_INT, liwork ,'iwork',hiwork,adriwork) if(.not.status) & call ga_error('ga_pdsyevx: mem alloc failed iwork ', -1) c nn = max(n, nb, two4) np0 = numroc(nn, nb, zero4, zero4, nprow2) mq0 = numroc(nn, nb, zero4, zero4, npcol2) c c orfac = 1.d-3 c c #if 0 lcwork4=-1 call pdsyevx(jobz, range, uplo, 1 n, dbl_mb(adrA), one4, one4, descA,vl, 2 vu, il, iu, abstol, m, nz, eval, orfac, dbl_mb(adrB), 4 one4, one4, descB, dumm, lcwork4, 3 int_mb(adriwork), liwork4, int_mb(adrfail), 4 int_mb(adrclustr), dbl_mb(adrgaps), info) lcwork=dumm #else lcwork = 5*n +MAX(5*NN,(NP0*MQ0 + 2*nb*nb))+ + ICEIL( N, NPROW2*NPCOL2)*NN+1 #endif c if(lcwork.ne.0) $ status = ma_push_get(MT_DBL, lcwork , $ 'cwork',hcwork,adrcwork) if(.not.status) & call ga_error('ga_pdsyevx: mem alloc failed cwork ', -1) c c abstol=pdlamch(islctxt2, 'U') c c liwork4=liwork lcwork4=lcwork call pdsyevx(jobz, range, uplo, 1 n, dbl_mb(adrA), one4, one4, descA,vl, 2 vu, il, iu, abstol, m, nz, eval, orfac, dbl_mb(adrB), 4 one4, one4, descB, dbl_mb(adrcwork), lcwork4, 3 int_mb(adriwork), liwork4, int_mb(adrfail), 4 int_mb(adrclustr), dbl_mb(adrgaps), info) c if (nz .ne. n ) then if ( info .ne. 0 ) then if ( info .gt. 0 ) then call ga_error(' ga_pdsyevx: argument is illegal ', info) else call ga_error(' ga_pdsyevx: eigenvectors failed to converge ', $ info) endif endif endif c c c c*** copy solution matrix back to g_c c call ga_from_SL2(g_b, dimA1, dimB2, $ nb, nb, dbl_mb(adrB), & ldb, mpb, nqB) c c c c*** deallocate work/SL arrays c if ( lcwork .ne. 0 ) status = ma_pop_stack(hcwork) if ( liwork .ne. 0 ) status = ma_pop_stack(hiwork) if ( if .ne. 0 ) status = ma_pop_stack(hfail) if ( iclu .ne. 0 ) status = ma_pop_stack(hclustr) if ( ngaps.ne.0 ) status = ma_pop_stack(hgap) if ( elemB .ne. 0 ) status = ma_pop_stack(hb) if ( elemA .ne. 0 ) status = ma_pop_stack(ha) endif c call ga_sync() if(maxproc.lt.nnodes.or.dima1.le.nb) then c broadcast evals dblsize=ma_sizeof(MT_DBL,1,MT_BYTE)*dima1 call ga_brdcst(1688,eval,dblsize,0) endif return end c****************************************************************** c c ga_pdsygv c c interface into scalapack's Hermitian eigensolver c c ga interface to scalapack c c g_a .g_c(*,i) = eval(i).g_s(*,i) g_b(*,i) c c assume equal size blocks ... c c****************************************************************** subroutine ga_pdsygv(g_a, g_s, g_b, eval) implicit none #include "mafdecls.fh" #include "global.fh" #include "scalapack.fh" c integer g_a ! matrix A integer g_b ! matrix B (eigenvectors) integer g_s ! metric c c all eigenvalues are real c double precision eval(*) c c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c logical status c character*1 jobz, range, uplo c integer ha, adra !A (input) integer hb, adrb !B (output) integer hs, adrs !S (input) c c logical oactive ! true if this process participates integer dimA18, dimA28, typeA integer dimB18, dimB28, typeB integer dims18, dims28, types INTGR4 dimA1, dimA2 INTGR4 dimB1, dimB2 INTGR4 dims1, dims2 c INTGR4 mpA, nqA ! rows/cols of A held by the processor INTGR4 mpB, nqB ! rows/cols of B held by the processor INTGR4 mps, nqs ! rows/cols of B held by the processor c integer me INTGR4 lda, ldb, lds integer elemA, elemB, elems INTGR4 numroc INTGR4 nb ! block size INTGR4 descA(9), descB(9) !descriptor for scalapack INTGR4 descs(9) c integer ngaps, hgap, adrgaps integer iclu, hclustr, adrclustr integer if, hfail, adrfail integer liwork, hiwork, adriwork integer lcwork, hcwork, adrcwork INTGR4 lcwork4 INTGR4 liwork4 c INTGR4 nn, mq0, np0 double precision vl, vu, abstol, orfac INTGR4 il, iu INTGR4 m, nz INTGR4 n INTGR4 info integer info8,dblsize INTGR4 zero4,one4,two4,four4 parameter(zero4=0,one4=1,two4=2,four4=4) INTGR4 iceil double precision pdlamch integer i logical use_direct logical uses_sl_A, uses_sl_B, uses_sl_S integer alen, blen, slen integer block_dims_A(2),block_dims_B(2),block_dims_S(2),blocks(2) integer gridA(2), gridB(2), gridS(2) external pdlamch external iceil integer j ! intrinsic max c c processor dependent; machine dependent c data nb/16/ c c*** check environment c me = ga_nodeid() c c*** check GA info for input arrays c call ga_check_handle(g_a, 'ga_pdsygv: a') call ga_check_handle(g_b, 'ga_pdsygv: b') call ga_check_handle(g_s, 'ga_pdsygv: s') c call ga_inquire(g_a, typeA, dimA18, dimA28) call ga_inquire(g_b, typeB, dimB18, dimB28) call ga_inquire(g_s, types, dims18, dims28) dima1=dima18 dima2=dima28 dimb1=dimb18 dimb2=dimb28 dims1=dims18 dims2=dims28 if(dimA1.ne.dima2) call ga_error( % 'ga_pdsygv: matrix A not square ',0) n=dima1 if(nb.lt.1) nb=1 if(dimb1.ne.dimb2) call ga_error( % 'ga_pdsygv: matrix B not square ',0) if(dimb1.ne.n) call ga_error( % 'ga_pdsygv: size matrix B and A differ ',0) if(dims1.ne.dims2) call ga_error( % 'ga_pdsygv: matrix S not square ',0) if(dims1.ne.n) call ga_error( % 'ga_pdsygv: size matrix A and S differ ',0) c use_direct = .true. uses_sl_A = ga_uses_proc_grid(g_a) uses_sl_B = .false. uses_sl_S = .false. if (uses_sl_A) then uses_sl_B = ga_uses_proc_grid(g_b) uses_sl_S = ga_uses_proc_grid(g_s) endif if ((.not.uses_sl_A).or.(.not.uses_sl_B)) then use_direct = .false. endif if (uses_sl_A) then call ga_get_block_info(g_a,blocks,block_dims_A) if (block_dims_A(1).ne.block_dims_A(2)) then use_direct = .false. endif endif if (uses_sl_B) then call ga_get_block_info(g_b,blocks,block_dims_B) if (block_dims_B(1).ne.block_dims_B(2)) then use_direct = .false. endif endif if (uses_sl_S) then call ga_get_block_info(g_s,blocks,block_dims_S) if (block_dims_S(1).ne.block_dims_S(2)) then use_direct = .false. endif endif if (use_direct.and.((block_dims_A(1).ne.block_dims_B(1)).or. % (block_dims_B(1).ne.block_dims_S(1)))) then use_direct = .false. endif if (use_direct) then call ga_get_proc_grid(g_a,gridA) call ga_get_proc_grid(g_b,gridB) call ga_get_proc_grid(g_s,gridS) if ((gridA(1).ne.gridB(1).or.gridA(2).ne.gridB(2)).or. % (gridA(1).ne.gridS(1).or.gridA(2).ne.gridS(2))) then use_direct = .false. endif endif if (use_direct) then nb = block_dims_A(2) endif c c*** initialize SL interface c ! call SLinit() if (use_direct) then call SLinit4(g_a) else call SLinit2(n) endif oactive=iam.lt.maxproc call ga_sync if (oactive) then c c*** find SBS format parameters c c mpA = numroc(dimA1, nb, myrow2, zero4, nprow2) nqA = numroc(dimA2, nb, mycol2, zero4, npcol2) c mpB = numroc(dimB1, nb, myrow2, zero4, nprow2) nqB = numroc(dimB2, nb, mycol2, zero4, npcol2) c mps = numroc(dims1, nb, myrow2, zero4, nprow2) nqs = numroc(dims2, nb, mycol2, zero4, npcol2) c c lda = max(one4,mpA) ldb = max(one4,mpB) lds = max(one4,mps) c c c let scalapack check for errors c if (use_direct) then call nga_access_block_segment(g_a, me, adra, alen) call nga_access_block_segment(g_b, me, adrb, blen) call nga_access_block_segment(g_s, me, adrs, slen) else elemA= mpA*nqA status = .true. if(elemA.ne.0) status = $ ma_push_get(MT_DBL,elemA,'a',ha,adra) if(.not.status) & call ga_error('ga_pdsygv: mem alloc failed A ', elema) c elemB= mpB*nqB if(elemB.ne.0)status = $ ma_push_get(MT_DBL,elemB,'b',hb,adrb) if(.not.status) & call ga_error('ga_pdsygv: mem alloc failed B ', -1) elems= mps*nqs if(elems.ne.0)status = $ ma_push_get(MT_DBL,elems,'s',hs,adrs) if(.not.status) & call ga_error('ga_pdsygv: mem alloc failed S ', -1) endif c ngaps = nprow2*npcol2 if(ngaps.ne.0)status = $ ma_push_get(MT_DBL, ngaps ,'gap',hgap,adrgaps) if(.not.status) & call ga_error('ga_pdsygv: mem alloc failed gaps ', -1) c iclu = 2*nprow2*npcol2 iclu = 2*n if(iclu.ne.0)status = $ ma_push_get(MT_INT, iclu ,'iclustr',hclustr,adrclustr) if(.not.status) & call ga_error('ga_pdsygv: mem alloc failed iclustr ', -1) c if = n if(if.ne.0) then status = $ ma_push_get(MT_INT, if ,'ifail',hfail,adrfail) endif if(.not.status) & call ga_error('ga_pdsygv: mem alloc failed ifail ', -1) c c*** copy g_a to A and g_b to B using the block cyclic scalapack format c if (.not.use_direct) then call ga_to_SL2(g_a, dimA1, dimA2, nb, nb, $ dbl_mb(adrA), lda, mpA, nqA) c call ga_to_SL2(g_b, dimB1, dimB2, nb,nb, $ dbl_mb(adrB), ldb, mpB, nqB) call ga_to_SL2(g_s, dims1, dims2, nb,nb, $ dbl_mb(adrs), ldb, mps, nqs) endif c c c*** fill SCALAPACK matrix descriptors c call descinit(descA, dimA1, dimA2, nb, nb, zero4, zero4, $ islctxt2, lda, info) info8=info if(info8.ne.0) call ga_error(' ga_pdsygv: descinit A failed ', . -info8) c call descinit(descB, dimB1, dimB2, nb, nb, zero4, zero4, . islctxt2, ldb, info) info8=info if(info8.ne.0) call ga_error(' ga_pdsygv: descinit B failed ', . -info8) call descinit(descs, dims1, dims2, nb, nb, zero4, zero4, . islctxt2, lds, info) info8=info if(info8.ne.0) call ga_error(' ga_pdsygv: descinit S failed ', . -info8) c c call scalapack c c jobz = 'V' range = 'A' uplo = 'L' vl = 0.d0 vu = 0.d0 il = 0 iu = 0 nz = 0 c c ability to deal with orthonormality ; let's just c have the regular scalapack stuff for the moment c liwork = 6*max(n, nprow2*npcol2+one4, four4) if(liwork.ne.0)status = $ ma_push_get(MT_INT, liwork ,'iwork',hiwork,adriwork) if(.not.status) & call ga_error('ga_pdsygv: mem alloc failed iwork ', -1) c nn = max(n, nb, two4) np0 = numroc(nn, nb, zero4, zero4, nprow2) mq0 = numroc(nn, nb, zero4, zero4, npcol2) c c orfac = 1.d-3 c c lcwork = 5*n +MAX(5*NN,(NP0*MQ0 + 2*nb*nb))+ + ICEIL( N, NPROW2*NPCOL2)*NN+1 c if(lcwork.ne.0) $ status = ma_push_get(MT_DBL, lcwork , $ 'cwork',hcwork,adrcwork) if(.not.status) & call ga_error('ga_pdsygv: mem alloc failed cwork ', -1) c abstol=pdlamch(islctxt2, 'U') c c c liwork4=liwork lcwork4=lcwork call pdsygvx(one4,jobz, range, uplo, 1 n, dbl_mb(adrA), one4, one4, 2 descA, dbl_mb(adrS), one4, one4,descs, vl,vu, il, iu, 3 abstol, m, nz, eval, orfac, dbl_mb(adrB), 4 one4, one4, descB, 4 dbl_mb(adrcwork), lcwork4,int_mb(adriwork), liwork4, 4 int_mb(adrfail), int_mb(adrclustr), 5 dbl_mb(adrgaps), info) c c c c if (nz .ne. n ) then if ( info .ne. 0 ) then if ( info .gt. 0 ) then call ga_error(' ga_pdsygv: argument is illegal ', info) else call ga_error(' ga_pdsygv: eigenvectors failed to converge ', $ info) endif endif endif c c c c*** copy solution matrix back to g_c c c if (.not.use_direct) then call ga_from_SL2(g_b, dimA1, dimB2, $ nb, nb, dbl_mb(adrB), & ldb, mpb, nqB) endif c c c*** deallocate work/SL arrays c if ( lcwork .ne. 0 ) status = ma_pop_stack(hcwork) if ( liwork .ne. 0 ) status = ma_pop_stack(hiwork) if ( if .ne. 0 ) status = ma_pop_stack(hfail) if ( iclu .ne. 0 ) status = ma_pop_stack(hclustr) if ( ngaps.ne.0 ) status = ma_pop_stack(hgap) if (.not.use_direct) then if ( elemS .ne. 0 ) status = ma_pop_stack(hs) if ( elemB .ne. 0 ) status = ma_pop_stack(hb) if ( elemA .ne. 0 ) status = ma_pop_stack(ha) endif endif c call ga_sync() if(maxproc.lt.nnodes.or.dima1.le.nb) then c broadcast evals dblsize=ma_sizeof(MT_DBL,1,MT_BYTE)*dima1 call ga_brdcst(1688,eval,dblsize,0) endif if (use_direct) then call SLexit4 else call SLexit2 endif return end c c interface to pdsyevd (divide&conquer) c subroutine ga_pdsyevd(g_a, g_b, eval, nb8) implicit none #include "mafdecls.fh" #include "global.fh" #include "scalapack.fh" c integer g_a ! matrix A integer g_b ! matrix B integer nb8 c c all eigenvalues are real c double precision eval(*) c c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c logical status c character*1 jobz, uplo c integer ha, adra !A integer hb, adrb !B c c logical oactive ! true iff this process participates integer dimA18, dimA28, typeA integer dimB18, dimB28, typeB INTGR4 dimA1, dimA2 INTGR4 dimB1, dimB2 c INTGR4 mpA, nqA ! rows/cols of A held by the processor INTGR4 mpB, nqB ! rows/cols of B held by the processor c integer me INTGR4 lda, ldb integer elemA,elemB INTGR4 numroc INTGR4 nb ! block size INTGR4 descA(9), descB(9) !descriptor for scalapack c integer liwork,hiwork, adriwork integer lcwork,hcwork, adrcwork INTGR4 liwork4,lcwork4 c INTGR4 nn,nq, np,trilwmin,iarow,iacol INTGR4 n INTGR4 info,one4,zero4,two4 parameter(zero4=0,one4=1,two4=2) integer info8,dblsize double precision pdlamch,dum INTGR4 iceil,indxg2p logical uses_sl_A, uses_sl_B integer alen, blen integer block_dims_A(2),block_dims_B(2),blocks(2) integer gridA(2), gridB(2) logical use_direct external pdlamch,iceil,indxg2p c c processor dependent; machine dependent c if(nb8.eq.0) then nb=16 else nb=nb8 endif c c*** check environment c me = ga_nodeid() c c*** check GA info for input arrays c call ga_check_handle(g_a, 'ga_pdsyevd: a') call ga_check_handle(g_b, 'ga_pdsyevd: b') c call ga_inquire(g_a, typeA, dimA18, dimA28) call ga_inquire(g_b, typeB, dimB18, dimB28) dima1=dima18 dima2=dima28 dimb1=dimb18 dimb2=dimb28 n=dima1 if(nb.lt.1) nb=1 if(dimA1.ne.dima2) call ga_error( % 'ga_pdsyevd: matrix A not square ',0) if(dimb1.ne.dimb2) call ga_error( % 'ga_pdsyevd: matrix B not square ',0) if(dimb1.ne.n) call ga_error( % 'ga_pdsyevd: size matrix B and B differ ',0) use_direct = .true. uses_sl_A = ga_uses_proc_grid(g_a) uses_sl_B = .false. if (uses_sl_A) then uses_sl_B = ga_uses_proc_grid(g_b) endif if ((.not.uses_sl_A).or.(.not.uses_sl_B)) then use_direct = .false. endif if (uses_sl_A) then call ga_get_block_info(g_a,blocks,block_dims_A) if (block_dims_A(1).ne.block_dims_A(2)) then use_direct = .false. endif endif if (uses_sl_B) then call ga_get_block_info(g_b,blocks,block_dims_B) if (block_dims_B(1).ne.block_dims_B(2)) then use_direct = .false. endif endif if (use_direct.and.(block_dims_A(1).ne.block_dims_B(1))) then use_direct = .false. endif if (use_direct) then call ga_get_proc_grid(g_a,gridA) call ga_get_proc_grid(g_b,gridB) if (gridA(1).ne.gridB(1).or.gridA(2).ne.gridB(2)) then use_direct = .false. endif endif if (use_direct) then nb = block_dims_A(2) endif c c c*** initialize SL interface c ! call SLinit() if (use_direct) then call SLinit4(g_a) else call SLinit2(n) endif oactive=iam.lt.maxproc call ga_sync if (oactive) then c c*** find SBS format parameters c c mpA = numroc(dimA1, nb, myrow2, zero4, nprow2) nqA = numroc(dimA2, nb, mycol2, zero4, npcol2) c mpB = numroc(dimB1, nb, myrow2, zero4, nprow2) nqB = numroc(dimB2, nb, mycol2, zero4, npcol2) c c lda = max(one4,mpA) ldb = max(one4,mpB) c c c let scalapack check for errors c c should check to see if this is a compute node c check to see how this works in the new data server model c c c if (use_direct) then call nga_access_block_segment(g_a,me,adra,alen) call nga_access_block_segment(g_b,me,adrb,blen) else elemA= mpA*nqA status = .true. if(elemA.ne.0)status = $ ma_push_get(MT_DBL,elemA,'a',ha,adra) if(.not.status) & call ga_error('ga_pdsyevd: mem alloc failed A ', -1) c c*** copy g_a to A and g_b to B using the block cyclic scalapack format c call ga_to_SL2(g_a, dimA1, dimA2, nb, nb, $ dbl_mb(adrA), lda, mpA, nqA) c elemB= mpB*nqB c if(elemB.ne.0)status = $ ma_push_get(MT_DBL,elemB,'b',hb,adrb) if(.not.status) & call ga_error('ga_pdsyevd: mem alloc failed B ', -1) endif endif call ga_sync() if(oactive) then c c c c*** fill SCALAPACK matrix descriptors c call descinit(descA, dimA1, dimA2, nb, nb, zero4, zero4, $ islctxt2, lda, info) info8=info if(info8.ne.0) call ga_error(' ga_pdsyevd: descinit A failed ', . -info8) c call descinit(descB, dimB1, dimB2, nb, nb, zero4, zero4, . islctxt2, ldb, info) info8=info if(info8.ne.0) call ga_error(' ga_pdsyevd: descinit B failed ', . -info8) c jobz = 'V' uplo = 'L' c c ability to deal with orthonormality ; let's just c have the regular scalapack stuff for the moment c liwork = 7*n + 8*npcol2 +2 if(liwork.ne.0)status = $ ma_push_get(MT_INT, liwork ,'iwork',hiwork,adriwork) if(.not.status) & call ga_error('ga_pdsyevd: mem alloc failed iwork ', -1) c nn = max(n, nb, two4) IAROW = INDXG2P(one4, nb, MYROW2, DESCA( 7 ), NPROW2 ) IACOL = INDXG2P(one4, nb, MYCOL2, DESCA( 8 ), NPCOL2 ) np = numroc(n, nb, myrow2, iarow, nprow2) nq = numroc(n, nb, mycol2, iacol, npcol2) c c c liwork4=liwork #if 0 lcwork4=-1 call pdsyevd(jobz, uplo, 1 n, dbl_mb(adrA), one4, one4, descA, 1 eval, dbl_mb(adrB), one4, one4, 2 descB, dbl_mb(adrcwork), lcwork4, 2 dum, liwork4, info) lcwork=dum #else lcwork = MAX( 1+6*N+2*NP*NQ, = 3*N + MAX( NB*( NP+1 ), 3*NB ))+ 2*N lcwork=max(lcwork,16384) #endif c if(lcwork.ne.0) $ status = ma_push_get(MT_DBL, lcwork , $ 'cwork',hcwork,adrcwork) if(.not.status) & call ga_error('ga_pdsyevd: mem alloc failed cwork ', -1) c c c lcwork4=lcwork call pdsyevd(jobz, uplo, 1 n, dbl_mb(adrA), one4, one4, descA, 1 eval, dbl_mb(adrB), one4, one4, 2 descB, dbl_mb(adrcwork), lcwork4, 2 int_mb(adriwork), liwork4, info) c if ( info .ne. 0 ) then if ( info .gt. 0 ) then call ga_error(' ga_pdsyevd: argument is illegal ', info) else call ga_error( $ ' ga_pdsyevd: eigenvectors failed to converge ', $ info) endif endif c c c c*** copy solution matrix back to g_b c if (.not.use_direct) then call ga_from_SL2(g_b, dimA1, dimB2, $ nb, nb, dbl_mb(adrB), & ldb, mpb, nqB) endif c c c c*** deallocate work/SL arrays c if ( lcwork .ne. 0 ) status = ma_pop_stack(hcwork) if ( liwork .ne. 0 ) status = ma_pop_stack(hiwork) if (.not.use_direct) then if ( elemB .ne. 0 ) status = ma_pop_stack(hb) if ( elemA .ne. 0 ) status = ma_pop_stack(ha) endif c endif call ga_sync() if(maxproc.lt.nnodes.or.dima1.le.nb) then c broadcast evals dblsize=ma_sizeof(MT_DBL,1,MT_BYTE)*dima1 call ga_brdcst(1688,eval,dblsize,0) endif return end #if HAVE_PDSYEVR subroutine ga_pdsyevr(g_a, g_b, eval, nb8, mout) implicit none #include "mafdecls.fh" #include "global.fh" #include "scalapack.fh" c integer g_a ! matrix A integer g_b ! matrix B integer nb8 integer mout ! no. of evals/evecs to compute c c all eigenvalues are real c double precision eval(*) c c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c logical status c character*1 jobz, range, uplo c integer ha, adra !A integer hb, adrb !B c c logical oactive ! true if this process participates integer dimA18, dimA28, typeA integer dimB18, dimB28, typeB INTGR4 dimA1, dimA2,mout4 INTGR4 dimB1, dimB2 c INTGR4 mpA, nqA ! rows/cols of A held by the processor INTGR4 mpB, nqB ! rows/cols of B held by the processor c integer me INTGR4 lda, ldb integer elemA,elemB INTGR4 numroc INTGR4 nb ! block size INTGR4 descA(9), descB(9) !descriptor for scalapack c integer n8, hfail, adrfail integer liwork,hiwork, adriwork integer lcwork,hcwork, adrcwork INTGR4 liwork4 INTGR4 lcwork4 c INTGR4 nn,mq0, np0 double precision vl, vu INTGR4 il, iu INTGR4 m, nz INTGR4 n INTGR4 info,one4,zero4,two4,four4 parameter(one4=1,zero4=0,two4=4,four4=4) integer info8,dblsize double precision pdlamch,dumm INTGR4 dumm2 external pdlamch INTGR4 iceil c c processor dependent; machine dependent c if(nb8.eq.0) then nb=16 else nb=nb8 endif c c*** check environment c me = ga_nodeid() c c*** check GA info for input arrays c call ga_check_handle(g_a, 'ga_pdsyevr: a') call ga_check_handle(g_b, 'ga_pdsyevr: b') c call ga_inquire(g_a, typeA, dimA18, dimA28) call ga_inquire(g_b, typeB, dimB18, dimB28) dima1=dima18 dima2=dima28 dimb1=dimb18 dimb2=dimb28 if(dimA1.ne.dima2) call ga_error( % 'ga_pdsyevr: matrix A not square ',0) n=dima1 if(dimb1.ne.dimb2) call ga_error( % 'ga_pdsyevr: matrix B not square ',0) if(dimb1.ne.n) call ga_error( % 'ga_pdsyevr: size matrix B and B differ ',0) if(mout.le.0.or.mout.gt.n) mout=n c c c*** initialize SL interface c call SLinit2(n) oactive=iam.lt.maxproc call ga_zero(g_b) if (oactive) then c c*** find SBS format parameters c c mpA = numroc(dimA1, nb, myrow2, zero4, nprow2) nqA = numroc(dimA2, nb, mycol2, zero4, npcol2) c mpB = numroc(dimB1, nb, myrow2, zero4, nprow2) nqB = numroc(dimB2, nb, mycol2, zero4, npcol2) c c lda = max(one4,mpA) ldb = max(one4,mpB) c c c let scalapack check for errors c c should check to see if this is a compute node c check to see how this works in the new data server model c c elemA= mpA*nqA status = .true. if(elemA.ne.0)status = $ ma_push_get(MT_DBL,elemA,'a',ha,adra) if(.not.status) & call ga_error('ga_pdsyevr: mem alloc failed A ', -1) c c*** copy g_a to A and g_b to B using the block cyclic scalapack format c call ga_to_SL2(g_a, dimA1, dimA2, nb, nb, $ dbl_mb(adrA), lda, mpA, nqA) endif call ga_sync() if(oactive) then c elemB= mpB*nqB c if(elemB.ne.0)status = $ ma_push_get(MT_DBL,elemB,'b',hb,adrb) if(.not.status) & call ga_error('ga_pdsyevr: mem alloc failed B ', -1) c n8 = n if(n8.ne.0) then status = $ ma_push_get(MT_INT, n8 ,'ifail',hfail,adrfail) endif if(.not.status) & call ga_error('ga_pdsyevr: mem alloc failed ifail ', n) c c*** fill SCALAPACK matrix descriptors c call descinit(descA, dimA1, dimA2, nb, nb, zero4, zero4, $ islctxt2, lda, info) info8=info if(info.ne.0) call ga_error(' ga_pdsyevr: descinit A failed ', . -info8) c call descinit(descB, dimB1, dimB2, nb, nb, zero4, zero4, . islctxt2, ldb, info) info8=info if(info.ne.0) call ga_error(' ga_pdsyevr: descinit B failed ', . -info8) c jobz = 'V' uplo = 'L' vl = 0.d0 vu = 0.d0 c nn = max(n, nb, two4) np0 = numroc(nn, nb, zero4, zero4, nprow2) mq0 = numroc(nn, nb, zero4, zero4, npcol2) c il=1 iu=mout range='i' lcwork4=-1 liwork4=-1 call pdsyevr(jobz, range, uplo, 1 n, dbl_mb(adrA), one4, one4, descA,vl, 2 vu, il, iu, m, nz, eval, dbl_mb(adrB), one4, 3 one4, descB, dumm, lcwork4, 3 dumm2, liwork4, info) lcwork=dumm liwork=dumm2 c lcwork = 5*n +MAX(18*NN,(NP0*MQ0 + 2*nb*nb))+ c + (2 + ICEIL( N, NPROW2*NPCOL2))*NN+1 c liwork = 12*max(n, nprow2*npcol2+one4, four4) +2 *n c if(liwork.ne.0)status = $ ma_push_get(MT_INT, liwork ,'iwork',hiwork,adriwork) if(.not.status) & call ga_error('ga_pdsyevr: mem alloc failed iwork ', -1) c if(lcwork.ne.0) $ status = ma_push_get(MT_DBL, lcwork , $ 'cwork',hcwork,adrcwork) if(.not.status) & call ga_error('ga_pdsyevr: mem alloc failed cwork ', -1) c liwork4=liwork lcwork4=lcwork call pdsyevr(jobz, range, uplo, 1 n, dbl_mb(adrA), one4, one4, descA,vl, 2 vu, il, iu, m, nz, eval, dbl_mb(adrB), one4, 3 one4, descB, dbl_mb(adrcwork), lcwork4, 3 int_mb(adriwork), liwork4, info) c mout=m if(iam.eq.0.and.mout.ne.n) W write(0,*) ' computed eval ',mout,' out of ', A dima1 if (nz .ne. n ) then if ( info .ne. 0 ) then if ( info .gt. 0 ) then call ga_error(' ga_pdsyevr: argument is illegal ', info) else call ga_error(' ga_pdsyevr: eigenvectors failed to converge ', $ info) endif endif endif c c c c*** copy solution matrix back to g_b c mout4=mout call ga_from_SL2(g_b, dimA1, mout4, $ nb, nb, dbl_mb(adrB), & ldb, mpb, nqB) c c c c*** deallocate work/SL arrays c if ( lcwork .ne. 0 ) status = ma_pop_stack(hcwork) if ( liwork .ne. 0 ) status = ma_pop_stack(hiwork) if ( n8 .ne. 0 ) status = ma_pop_stack(hfail) if ( elemB .ne. 0 ) status = ma_pop_stack(hb) if ( elemA .ne. 0 ) status = ma_pop_stack(ha) c endif call ga_sync() if(maxproc.lt.nnodes.or.dima1.le.nb) then c broadcast evals dblsize=ma_sizeof(MT_DBL,1,MT_BYTE)*dima1 call ga_brdcst(1688,eval,dblsize,0) endif return end #endif #ifdef HAVE_ELPA subroutine ga_evp_real(g_a, g_b, eval, nb8, mout) use ELPA1 implicit none #include "mpif.h" #include "mafdecls.fh" #include "global.fh" #include "scalapack.fh" c integer g_a ! matrix A integer g_b ! matrix B integer nb8 integer mout ! no. of evals/evecs to compute c c all eigenvalues are real c double precision eval(*) c c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c logical status c character*1 jobz, range, uplo c integer ha, adra !A integer hb, adrb !B c c logical oactive ! true iff this process participates integer dimA18, dimA28, typeA integer dimB18, dimB28, typeB INTGR4 dimA1, dimA2,mout4 INTGR4 dimB1, dimB2 c INTGR4 mpA, nqA ! rows/cols of A held by the processor INTGR4 mpB, nqB ! rows/cols of B held by the processor c integer me INTGR4 lda, ldb integer elemA,elemB INTGR4 numroc INTGR4 nb ! block size INTGR4 descA(9), descB(9) !descriptor for scalapack INTGR4 elpa_comm_rows, elpa_comm_cols c integer n8 c INTGR4 m INTGR4 n INTGR4 info,one4,zero4,two4,four4 INTGR4 mpierr,elpa_comm,elpa_group integer mxproc,i parameter(mxproc=100000) INTGR4 group_world, group_members(mxproc) parameter(one4=1,zero4=0,two4=4,four4=4) integer info8,dblsize c c processor dependent; machine dependent c if(maxproc.gt.mxproc) call ga_error( A 'ga-evp_real: increase mxproc to ',maxproc) if(nb8.eq.0) then nb=16 else nb=nb8 endif c c*** check environment c me = ga_nodeid() c c*** check GA info for input arrays c call ga_check_handle(g_a, 'ga_evp_real: a') call ga_check_handle(g_b, 'ga_evp_real: b') c call ga_inquire(g_a, typeA, dimA18, dimA28) call ga_inquire(g_b, typeB, dimB18, dimB28) dima1=dima18 dima2=dima28 dimb1=dimb18 dimb2=dimb28 if(dimA1.ne.dima2) call ga_error( % 'ga_evp_real: matrix A not square ',0) n=dima1 if(dimb1.ne.dimb2) call ga_error( % 'ga_evp_real: matrix B not square ',0) if(dimb1.ne.n) call ga_error( % 'ga_evp_real: size matrix B and B differ ',0) if(mout.le.0.or.mout.gt.n) mout=n mout4=mout c c c*** initialize SL interface c call SLinit2(n) oactive=iam.lt.maxproc call ga_zero(g_b) celpa call MPI_Comm_group(MPI_COMM_WORLD, group_world, mpierr) do i=1,maxproc group_members(i)=i-1 enddo call MPI_Group_incl(group_world, maxproc, group_members, C elpa_group, mpierr) if(mpierr.ne.0) call ga_error( A 'ga-evp_real: mpigroupincl failed ',mpierr) c write(6,'(I3,A,3I12)') ga_nodeid(), 'comms ',elpa_group, c W group_world,MPI_COMM_WORLD call mpi_comm_create(MPI_COMM_WORLD, elpa_group, elpa_comm, W mpierr) call ga_sync() if (oactive) then c c*** find SBS format parameters c c mpA = numroc(dimA1, nb, myrow2, zero4, nprow2) nqA = numroc(dimA2, nb, mycol2, zero4, npcol2) c mpB = numroc(dimB1, nb, myrow2, zero4, nprow2) nqB = numroc(dimB2, nb, mycol2, zero4, npcol2) c c lda = max(one4,mpA) ldb = max(one4,mpB) c c c let scalapack check for errors c c should check to see if this is a compute node c check to see how this works in the new data server model c c elemA= mpA*nqA status = .true. if(elemA.ne.0)status = $ ma_push_get(MT_DBL,elemA,'a',ha,adra) if(.not.status) & call ga_error('ga_evp_real: mem alloc failed A ', -1) c elemB= mpB*nqB c elemb=max(mpb,nqb)**2 c if(elemB.ne.0)status = $ ma_push_get(MT_DBL,elemB,'b',hb,adrb) if(.not.status) & call ga_error('ga_evp_real: mem alloc failed B ', -1) c c n8 = n c c*** copy g_a to A and g_b to B using the block cyclic scalapack format c call ga_to_SL2(g_a, dimA1, dimA2, nb, nb, $ dbl_mb(adrA), lda, mpA, nqA) c c*** fill SCALAPACK matrix descriptors c call descinit(descA, dimA1, dimA2, nb, nb, zero4, zero4, $ islctxt2, lda, info) info8=info if(info.ne.0) call ga_error(' ga_evp_real: descinit A failed ', . -info8) c call descinit(descB, dimB1, dimB2, nb, nb, zero4, zero4, . islctxt2, ldb, info) info8=info if(info.ne.0) call ga_error(' ga_evp_real: descinit B failed ', . -info8) c c call get_elpa_row_col_comms(elpa_comm, V myrow2, mycol2, V elpa_comm_rows, elpa_comm_cols) call solve_evp_real(n, mout4, A dbl_mb(adra), lda, E eval, dbl_mb(adrb), ldb, nb, A elpa_comm_rows, elpa_comm_cols) if(iam.eq.0.and.mout4.ne.n) W write(6,*) ' computed eval ',mout,' out of ', A dima1 c c c c*** copy solution matrix back to g_b c call ga_from_SL2(g_b, dimA1, mout4, $ nb, nb, dbl_mb(adrB), & ldb, mpb, nqB) c c c c*** deallocate work/SL arrays c if ( elemB .ne. 0 ) status = ma_pop_stack(hb) if ( elemA .ne. 0 ) status = ma_pop_stack(ha) call MPI_Group_free( elpa_group, mpierr) if(mpierr.ne.0) call ga_error( A 'ga-evp_real: mpigroupfree failed ',mpierr) call MPI_comm_free( elpa_comm, mpierr) if(mpierr.ne.0) call ga_error( A 'ga-evp_real: mpicommfree failed ',mpierr) c endif if(maxproc.lt.nnodes.or.dima1.le.nb) then c broadcast evals dblsize=ma_sizeof(MT_DBL,1,MT_BYTE)*dima1 call ga_brdcst(1688,eval,dblsize,0) endif return end #endif subroutine ga_pzheevd(g_a, g_b, eval, nb8) implicit none #include "mafdecls.fh" #include "global.fh" #include "scalapack.fh" c integer g_a(2) ! matrix A integer g_b(2) ! matrix B integer nb8 c c real eigenvalues c double precision eval(*) c c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c logical status c character*1 jobz, uplo c integer ha, adra !A integer hb, adrb !B c c logical oactive ! true iff this process participates integer dimA18, dimA28, typeA integer dimB18, dimB28, typeB INTGR4 dimA1, dimA2,mout4 INTGR4 dimB1, dimB2 c INTGR4 mpA, nqA ! rows/cols of A held by the processor INTGR4 mpB, nqB ! rows/cols of B held by the processor c integer me INTGR4 lda, ldb integer elemA,elemB INTGR4 numroc INTGR4 nb ! block size INTGR4 descA(9), descB(9) !descriptor for scalapack c integer n8, hfail, adrfail integer liwork,hiwork, adriwork integer lwork,hwork, adrwork integer lrwork,hrwork, adrrwork INTGR4 liwork4 INTGR4 lwork4 INTGR4 lrwork4 c INTGR4 m, nz INTGR4 n INTGR4 info,one4,zero4,two4,four4 parameter(one4=1,zero4=0,two4=4,four4=4) integer info8,dblsize double precision pdlamch complex*16 dumm double precision dumm1 INTGR4 dumm2 external pdlamch INTGR4 iceil c c processor dependent; machine dependent c if(nb8.eq.0) then nb=16 else nb=nb8 endif c c*** check environment c me = ga_nodeid() c c*** check GA info for input arrays c call ga_check_handle(g_a(1), 'ga_pzheevd: a') call ga_check_handle(g_b(1), 'ga_pzheevd: b') c call ga_inquire(g_a(1), typeA, dimA18, dimA28) call ga_inquire(g_b(1), typeB, dimB18, dimB28) dima1=dima18 dima2=dima28 dimb1=dimb18 dimb2=dimb28 if(dimA1.ne.dima2) call ga_error( % 'ga_pzheevd: matrix A not square ',0) n=dima1 c nb=min(nb,n/2) if(dimb1.ne.dimb2) call ga_error( % 'ga_pzheevd: matrix B not square ',0) if(dimb1.ne.n) call ga_error( % 'ga_pzheevd: size matrix B and B differ ',0) c c*** initialize SL interface c call SLinit2(n) oactive=iam.lt.maxproc call ga_sync if (oactive) then c c*** find SBS format parameters c c mpA = numroc(dimA1, nb, myrow2, zero4, nprow2) nqA = numroc(dimA2, nb, mycol2, zero4, npcol2) c mpB = numroc(dimB1, nb, myrow2, zero4, nprow2) nqB = numroc(dimB2, nb, mycol2, zero4, npcol2) c c lda = max(one4,mpA) ldb = max(one4,mpB) c c c let scalapack check for errors c c should check to see if this is a compute node c check to see how this works in the new data server model c c elemA= mpA*nqA status = .true. if(elemA.ne.0)status = $ ma_push_get(MT_dcpL,elemA,'a',ha,adra) if(.not.status) & call ga_error('ga_pzheevd: mem alloc failed A ', -1) c c*** copy g_a to A and g_b to B using the block cyclic scalapack format c call ga_to_SL2cpl(g_a, dimA1, dimA2, nb, nb, $ dcpl_mb(adrA), lda, mpA, nqA) endif call ga_sync() if(oactive) then c elemB= mpB*nqB c if(elemB.ne.0)status = $ ma_push_get(MT_dcpL,elemB,'b',hb,adrb) if(.not.status) & call ga_error('ga_pzheevd: mem alloc failed B ', -1) c n8 = n if(n8.ne.0) then status = $ ma_push_get(MT_INT, n8 ,'ifail',hfail,adrfail) endif if(.not.status) & call ga_error('ga_pzheevd: mem alloc failed ifail ', n) c c*** fill SCALAPACK matrix descriptors c call descinit(descA, dimA1, dimA2, nb, nb, zero4, zero4, $ islctxt2, lda, info) info8=info if(info.ne.0) call ga_error(' ga_pzheevd: descinit A failed ', . -info8) c call descinit(descB, dimB1, dimB2, nb, nb, zero4, zero4, . islctxt2, ldb, info) info8=info if(info.ne.0) call ga_error(' ga_pzheevd: descinit B failed ', . -info8) c jobz = 'V' uplo = 'L' c c lwork4=-1 lrwork4=-1 liwork4=-1 call pzheevd(jobz, uplo, n, dcpl_mb(adrA), one4, one4, descA, 2 eval, dcpl_mb(adrB), one4, one4, 3 descB, dumm, lwork4, dumm1,lrwork4, dumm2, 4 liwork4, info) lwork=dumm c lwork=max(lwork,n) c lwork=2*max(lwork,mpa*(nb+nqa)) c write(0,*) ga_nodeid(), ' lw orig new ',dumm,lwork lrwork=dumm1 liwork=dumm2 c if(liwork.ne.0)status = $ ma_push_get(MT_INT, liwork ,'iwork',hiwork,adriwork) if(.not.status) & call ga_error('ga_pzheevd: mem alloc failed iwork ', -1) c if(lwork.ne.0) $ status = ma_push_get(MT_DCPL, lwork , $ 'work',hwork,adrwork) if(.not.status) & call ga_error('ga_pzheevd: mem alloc failed work ', -1) if(lrwork.ne.0) $ status = ma_push_get(MT_DBL, lrwork , $ 'rwork',hrwork,adrrwork) if(.not.status) & call ga_error('ga_pzheevd: mem alloc failed rwork ', -1) c liwork4=liwork lwork4=lwork lrwork4=lrwork call pzheevd(jobz, uplo, n, dcpl_mb(adrA),one4,one4, descA, 2 eval, dcpl_mb(adrB), one4, one4, 3 descB, dcpl_mb(adrwork), lwork4, dbl_mb(adrrwork), 4 lrwork4, int_mb(adriwork), liwork4, info) if (nz .ne. n ) then if ( info .ne. 0 ) then if ( info .gt. 0 ) then call ga_error(' ga_pzheevd: argument is illegal ', info) else call ga_error(' ga_pzheevd: eigenvectors failed to converge ', $ info) endif endif endif c c c c*** copy solution matrix back to g_b c call ga_from_SL2cpl(g_b, dimA1, dima1, $ nb, nb, dcpl_mb(adrB), & ldb, mpb, nqB) c c c c*** deallocate work/SL arrays c if ( lrwork .ne. 0 ) status = ma_pop_stack(hrwork) if ( lwork .ne. 0 ) status = ma_pop_stack(hwork) if ( liwork .ne. 0 ) status = ma_pop_stack(hiwork) if ( n8 .ne. 0 ) status = ma_pop_stack(hfail) if ( elemB .ne. 0 ) status = ma_pop_stack(hb) if ( elemA .ne. 0 ) status = ma_pop_stack(ha) c endif call ga_sync() if(maxproc.lt.nnodes.or.dima1.le.nb) then c broadcast evals dblsize=ma_sizeof(MT_DBL,1,MT_BYTE)*dima1 call ga_brdcst(1688,eval,dblsize,0) endif return end #if HAVE_PDSYEVR subroutine ga_pzheevr(g_a, g_b, eval, nb8, mout) implicit none #include "mafdecls.fh" #include "global.fh" #include "scalapack.fh" c integer g_a(2) ! matrix A integer g_b(2) ! matrix B integer nb8 integer mout ! no. of evals/evecs to compute c c real eigenvalues c double precision eval(*) c c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c logical status c character*1 jobz, range, uplo c integer ha, adra !A integer hb, adrb !B c c logical oactive ! true iff this process participates integer dimA18, dimA28, typeA integer dimB18, dimB28, typeB INTGR4 dimA1, dimA2,mout4 INTGR4 dimB1, dimB2 c INTGR4 mpA, nqA ! rows/cols of A held by the processor INTGR4 mpB, nqB ! rows/cols of B held by the processor c integer me INTGR4 lda, ldb integer elemA,elemB INTGR4 numroc INTGR4 nb ! block size INTGR4 descA(9), descB(9) !descriptor for scalapack c integer n8, hfail, adrfail integer liwork,hiwork, adriwork integer lwork,hwork, adrwork integer lrwork,hrwork, adrrwork INTGR4 liwork4 INTGR4 lwork4 INTGR4 lrwork4 c double precision vl, vu INTGR4 il, iu INTGR4 m, nz INTGR4 n INTGR4 info,one4,zero4,two4,four4 parameter(one4=1,zero4=0,two4=4,four4=4) integer info8,dblsize double precision pdlamch complex*16 dumm double precision dumm1 INTGR4 dumm2 external pdlamch INTGR4 iceil c c processor dependent; machine dependent c if(nb8.eq.0) then nb=16 else nb=nb8 endif c c*** check environment c me = ga_nodeid() c c*** check GA info for input arrays c call ga_check_handle(g_a(1), 'ga_pzheevr: a') call ga_check_handle(g_b(1), 'ga_pzheevr: b') c call ga_inquire(g_a(1), typeA, dimA18, dimA28) call ga_inquire(g_b(1), typeB, dimB18, dimB28) dima1=dima18 dima2=dima28 dimb1=dimb18 dimb2=dimb28 if(dimA1.ne.dima2) call ga_error( % 'ga_pzheevr: matrix A not square ',0) n=dima1 c nb=min(nb,n/2) if(dimb1.ne.dimb2) call ga_error( % 'ga_pzheevr: matrix B not square ',0) if(dimb1.ne.n) call ga_error( % 'ga_pzheevr: size matrix B and B differ ',0) if(mout.le.0.or.mout.gt.n) mout=n c c c*** initialize SL interface c call SLinit2(n) oactive=iam.lt.maxproc call ga_zero(g_b(1)) call ga_zero(g_b(2)) if (oactive) then c c*** find SBS format parameters c c mpA = numroc(dimA1, nb, myrow2, zero4, nprow2) nqA = numroc(dimA2, nb, mycol2, zero4, npcol2) c mpB = numroc(dimB1, nb, myrow2, zero4, nprow2) nqB = numroc(dimB2, nb, mycol2, zero4, npcol2) c c lda = max(one4,mpA) ldb = max(one4,mpB) c c c let scalapack check for errors c c should check to see if this is a compute node c check to see how this works in the new data server model c c elemA= mpA*nqA status = .true. if(elemA.ne.0)status = $ ma_push_get(MT_dcpL,elemA,'a',ha,adra) if(.not.status) & call ga_error('ga_pzheevr: mem alloc failed A ', -1) c c*** copy g_a to A and g_b to B using the block cyclic scalapack format c call ga_to_SL2cpl(g_a, dimA1, dimA2, nb, nb, $ dcpl_mb(adrA), lda, mpA, nqA) endif call ga_sync() if(oactive) then c elemB= mpB*nqB c if(elemB.ne.0)status = $ ma_push_get(MT_dcpL,elemB,'b',hb,adrb) if(.not.status) & call ga_error('ga_pzheevr: mem alloc failed B ', -1) c n8 = n if(n8.ne.0) then status = $ ma_push_get(MT_INT, n8 ,'ifail',hfail,adrfail) endif if(.not.status) & call ga_error('ga_pzheevr: mem alloc failed ifail ', n) c c*** fill SCALAPACK matrix descriptors c call descinit(descA, dimA1, dimA2, nb, nb, zero4, zero4, $ islctxt2, lda, info) info8=info if(info.ne.0) call ga_error(' ga_pzheevr: descinit A failed ', . -info8) c call descinit(descB, dimB1, dimB2, nb, nb, zero4, zero4, . islctxt2, ldb, info) info8=info if(info.ne.0) call ga_error(' ga_pzheevr: descinit B failed ', . -info8) c jobz = 'V' uplo = 'L' vl = 0.d0 vu = 0.d0 c il=1 iu=mout range='i' lwork4=-1 lrwork4=-1 liwork4=-1 call pzheevr(jobz, range, uplo, 1 n, dcpl_mb(adrA), one4, one4, D descA,vl,vu, il, iu, m, nz, eval, dcpl_mb(adrB), one4, 3 one4, descB, 4 dumm, lwork4, dumm1,lrwork4, 3 dumm2, liwork4, info) lwork=dumm lrwork=dumm1 liwork=dumm2 c if(liwork.ne.0)status = $ ma_push_get(MT_INT, liwork ,'iwork',hiwork,adriwork) if(.not.status) & call ga_error('ga_pzheevr: mem alloc failed iwork ', -1) c if(lwork.ne.0) $ status = ma_push_get(MT_DCPL, lwork , $ 'work',hwork,adrwork) if(.not.status) & call ga_error('ga_pzheevr: mem alloc failed work ', -1) if(lrwork.ne.0) $ status = ma_push_get(MT_DBL, lrwork , $ 'rwork',hrwork,adrrwork) if(.not.status) & call ga_error('ga_pzheevr: mem alloc failed rwork ', -1) c liwork4=liwork lwork4=lwork lrwork4=lrwork call pzheevr(jobz, range, uplo, 1 n, dcpl_mb(adrA), one4, one4, D descA,vl,vu, il, iu, m, nz, eval, dcpl_mb(adrB), one4, 3 one4, descB, 4 dcpl_mb(adrwork), lwork4, dbl_mb(adrrwork),lrwork4, 3 int_mb(adriwork), liwork4, info) mout=m if(iam.eq.0.and.mout.ne.n) W write(6,*) ' computed eval ',mout,' out of ', A dima1 if (nz .ne. n ) then if ( info .ne. 0 ) then if ( info .gt. 0 ) then call ga_error(' ga_pzheevr: argument is illegal ', info) else call ga_error(' ga_pzheevr: eigenvectors failed to converge ', $ info) endif endif endif c c c c*** copy solution matrix back to g_b c mout4=mout call ga_from_SL2cpl(g_b, dimA1, mout4, $ nb, nb, dcpl_mb(adrB), & ldb, mpb, nqB) c c c c*** deallocate work/SL arrays c if ( lrwork .ne. 0 ) status = ma_pop_stack(hrwork) if ( lwork .ne. 0 ) status = ma_pop_stack(hwork) if ( liwork .ne. 0 ) status = ma_pop_stack(hiwork) if ( n8 .ne. 0 ) status = ma_pop_stack(hfail) if ( elemB .ne. 0 ) status = ma_pop_stack(hb) if ( elemA .ne. 0 ) status = ma_pop_stack(ha) c endif call ga_sync() if(maxproc.lt.nnodes.or.dima1.le.nb) then c broadcast evals dblsize=ma_sizeof(MT_DBL,1,MT_BYTE)*dima1 call ga_brdcst(1688,eval,dblsize,0) endif return end #endif SUBROUTINE PXERBLA( ICTXT, SRNAME, INFO ) * * -- ScaLAPACK auxiliary routine (version 2.0) -- * University of Tennessee, Knoxville, Oak Ridge National Laboratory, * and University of California, Berkeley. * April 1, 1998 * * .. Scalar Arguments .. INTEGER*4 ICTXT, INFO * .. * .. Array Arguments .. CHARACTER*(*) SRNAME * .. * * Purpose * ======= * * PXERBLA is an error handler for the ScaLAPACK routines. It is called * by a ScaLAPACK routine if an input parameter has an invalid value. A * message is printed. Installers may consider modifying this routine in * order to call system-specific exception-handling facilities. * * Arguments * ========= * * ICTXT (local input) INTEGER*4 * On entry, ICTXT specifies the BLACS context handle, indica- * ting the global context of the operation. The context itself * is global, but the value of ICTXT is local. * * SRNAME (global input) CHARACTER*(*) * On entry, SRNAME specifies the name of the routine which cal- * ling PXERBLA. * * INFO (global input) INTEGER*4 * On entry, INFO specifies the position of the invalid parame- * ter in the parameter list of the calling routine. * * -- Written on April 1, 1998 by * Antoine Petitet, University of Tennessee, Knoxville 37996, USA. * * ===================================================================== * * .. Local Scalars .. INTEGER*4 MYCOL, MYROW, NPCOL, NPROW * .. * .. External Subroutines .. EXTERNAL BLACS_GRIDINFO * .. * .. Executable Statements .. * CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL ) * WRITE( *, FMT = 9999 ) MYROW, MYCOL, SRNAME, INFO * 9999 FORMAT( '{', I5, ',', I5, '}: On entry to ', A, $ ' parameter number ', I4, ' had an illegal value' ) * call ga_error(' pxerbla error: info equal ', I info) RETURN * * End of PXERBLA * END ga-5-3/global/src/cnames.h0000640005473000001440000066643512154174257014276 0ustar d3n000users#define ga_allocate_ F77_FUNC_(ga_allocate, GA_ALLOCATE) #define ga_callocate_ F77_FUNC_(ga_callocate,GA_CALLOCATE) #define ga_dallocate_ F77_FUNC_(ga_dallocate,GA_DALLOCATE) #define ga_iallocate_ F77_FUNC_(ga_iallocate,GA_IALLOCATE) #define ga_sallocate_ F77_FUNC_(ga_sallocate,GA_SALLOCATE) #define ga_zallocate_ F77_FUNC_(ga_zallocate,GA_ZALLOCATE) #define nga_allocate_ F77_FUNC_(nga_allocate, NGA_ALLOCATE) #define nga_callocate_ F77_FUNC_(nga_callocate,NGA_CALLOCATE) #define nga_dallocate_ F77_FUNC_(nga_dallocate,NGA_DALLOCATE) #define nga_iallocate_ F77_FUNC_(nga_iallocate,NGA_IALLOCATE) #define nga_sallocate_ F77_FUNC_(nga_sallocate,NGA_SALLOCATE) #define nga_zallocate_ F77_FUNC_(nga_zallocate,NGA_ZALLOCATE) #define ga_compare_distr_ F77_FUNC_(ga_compare_distr, GA_COMPARE_DISTR) #define ga_ccompare_distr_ F77_FUNC_(ga_ccompare_distr,GA_CCOMPARE_DISTR) #define ga_dcompare_distr_ F77_FUNC_(ga_dcompare_distr,GA_DCOMPARE_DISTR) #define ga_icompare_distr_ F77_FUNC_(ga_icompare_distr,GA_ICOMPARE_DISTR) #define ga_scompare_distr_ F77_FUNC_(ga_scompare_distr,GA_SCOMPARE_DISTR) #define ga_zcompare_distr_ F77_FUNC_(ga_zcompare_distr,GA_ZCOMPARE_DISTR) #define nga_compare_distr_ F77_FUNC_(nga_compare_distr, NGA_COMPARE_DISTR) #define nga_ccompare_distr_ F77_FUNC_(nga_ccompare_distr,NGA_CCOMPARE_DISTR) #define nga_dcompare_distr_ F77_FUNC_(nga_dcompare_distr,NGA_DCOMPARE_DISTR) #define nga_icompare_distr_ F77_FUNC_(nga_icompare_distr,NGA_ICOMPARE_DISTR) #define nga_scompare_distr_ F77_FUNC_(nga_scompare_distr,NGA_SCOMPARE_DISTR) #define nga_zcompare_distr_ F77_FUNC_(nga_zcompare_distr,NGA_ZCOMPARE_DISTR) #define ga_create_ F77_FUNC_(ga_create, GA_CREATE) #define ga_ccreate_ F77_FUNC_(ga_ccreate,GA_CCREATE) #define ga_dcreate_ F77_FUNC_(ga_dcreate,GA_DCREATE) #define ga_icreate_ F77_FUNC_(ga_icreate,GA_ICREATE) #define ga_screate_ F77_FUNC_(ga_screate,GA_SCREATE) #define ga_zcreate_ F77_FUNC_(ga_zcreate,GA_ZCREATE) #define nga_create_ F77_FUNC_(nga_create, NGA_CREATE) #define nga_ccreate_ F77_FUNC_(nga_ccreate,NGA_CCREATE) #define nga_dcreate_ F77_FUNC_(nga_dcreate,NGA_DCREATE) #define nga_icreate_ F77_FUNC_(nga_icreate,NGA_ICREATE) #define nga_screate_ F77_FUNC_(nga_screate,NGA_SCREATE) #define nga_zcreate_ F77_FUNC_(nga_zcreate,NGA_ZCREATE) #define ga_create_config_ F77_FUNC_(ga_create_config, GA_CREATE_CONFIG) #define ga_ccreate_config_ F77_FUNC_(ga_ccreate_config,GA_CCREATE_CONFIG) #define ga_dcreate_config_ F77_FUNC_(ga_dcreate_config,GA_DCREATE_CONFIG) #define ga_icreate_config_ F77_FUNC_(ga_icreate_config,GA_ICREATE_CONFIG) #define ga_screate_config_ F77_FUNC_(ga_screate_config,GA_SCREATE_CONFIG) #define ga_zcreate_config_ F77_FUNC_(ga_zcreate_config,GA_ZCREATE_CONFIG) #define nga_create_config_ F77_FUNC_(nga_create_config, NGA_CREATE_CONFIG) #define nga_ccreate_config_ F77_FUNC_(nga_ccreate_config,NGA_CCREATE_CONFIG) #define nga_dcreate_config_ F77_FUNC_(nga_dcreate_config,NGA_DCREATE_CONFIG) #define nga_icreate_config_ F77_FUNC_(nga_icreate_config,NGA_ICREATE_CONFIG) #define nga_screate_config_ F77_FUNC_(nga_screate_config,NGA_SCREATE_CONFIG) #define nga_zcreate_config_ F77_FUNC_(nga_zcreate_config,NGA_ZCREATE_CONFIG) #define ga_create_ghosts_ F77_FUNC_(ga_create_ghosts, GA_CREATE_GHOSTS) #define ga_ccreate_ghosts_ F77_FUNC_(ga_ccreate_ghosts,GA_CCREATE_GHOSTS) #define ga_dcreate_ghosts_ F77_FUNC_(ga_dcreate_ghosts,GA_DCREATE_GHOSTS) #define ga_icreate_ghosts_ F77_FUNC_(ga_icreate_ghosts,GA_ICREATE_GHOSTS) #define ga_screate_ghosts_ F77_FUNC_(ga_screate_ghosts,GA_SCREATE_GHOSTS) #define ga_zcreate_ghosts_ F77_FUNC_(ga_zcreate_ghosts,GA_ZCREATE_GHOSTS) #define nga_create_ghosts_ F77_FUNC_(nga_create_ghosts, NGA_CREATE_GHOSTS) #define nga_ccreate_ghosts_ F77_FUNC_(nga_ccreate_ghosts,NGA_CCREATE_GHOSTS) #define nga_dcreate_ghosts_ F77_FUNC_(nga_dcreate_ghosts,NGA_DCREATE_GHOSTS) #define nga_icreate_ghosts_ F77_FUNC_(nga_icreate_ghosts,NGA_ICREATE_GHOSTS) #define nga_screate_ghosts_ F77_FUNC_(nga_screate_ghosts,NGA_SCREATE_GHOSTS) #define nga_zcreate_ghosts_ F77_FUNC_(nga_zcreate_ghosts,NGA_ZCREATE_GHOSTS) #define ga_create_ghosts_irreg_ F77_FUNC_(ga_create_ghosts_irreg, GA_CREATE_GHOSTS_IRREG) #define ga_ccreate_ghosts_irreg_ F77_FUNC_(ga_ccreate_ghosts_irreg,GA_CCREATE_GHOSTS_IRREG) #define ga_dcreate_ghosts_irreg_ F77_FUNC_(ga_dcreate_ghosts_irreg,GA_DCREATE_GHOSTS_IRREG) #define ga_icreate_ghosts_irreg_ F77_FUNC_(ga_icreate_ghosts_irreg,GA_ICREATE_GHOSTS_IRREG) #define ga_screate_ghosts_irreg_ F77_FUNC_(ga_screate_ghosts_irreg,GA_SCREATE_GHOSTS_IRREG) #define ga_zcreate_ghosts_irreg_ F77_FUNC_(ga_zcreate_ghosts_irreg,GA_ZCREATE_GHOSTS_IRREG) #define nga_create_ghosts_irreg_ F77_FUNC_(nga_create_ghosts_irreg, NGA_CREATE_GHOSTS_IRREG) #define nga_ccreate_ghosts_irreg_ F77_FUNC_(nga_ccreate_ghosts_irreg,NGA_CCREATE_GHOSTS_IRREG) #define nga_dcreate_ghosts_irreg_ F77_FUNC_(nga_dcreate_ghosts_irreg,NGA_DCREATE_GHOSTS_IRREG) #define nga_icreate_ghosts_irreg_ F77_FUNC_(nga_icreate_ghosts_irreg,NGA_ICREATE_GHOSTS_IRREG) #define nga_screate_ghosts_irreg_ F77_FUNC_(nga_screate_ghosts_irreg,NGA_SCREATE_GHOSTS_IRREG) #define nga_zcreate_ghosts_irreg_ F77_FUNC_(nga_zcreate_ghosts_irreg,NGA_ZCREATE_GHOSTS_IRREG) #define ga_create_ghosts_irreg_config_ F77_FUNC_(ga_create_ghosts_irreg_config, GA_CREATE_GHOSTS_IRREG_CONFIG) #define ga_ccreate_ghosts_irreg_config_ F77_FUNC_(ga_ccreate_ghosts_irreg_config,GA_CCREATE_GHOSTS_IRREG_CONFIG) #define ga_dcreate_ghosts_irreg_config_ F77_FUNC_(ga_dcreate_ghosts_irreg_config,GA_DCREATE_GHOSTS_IRREG_CONFIG) #define ga_icreate_ghosts_irreg_config_ F77_FUNC_(ga_icreate_ghosts_irreg_config,GA_ICREATE_GHOSTS_IRREG_CONFIG) #define ga_screate_ghosts_irreg_config_ F77_FUNC_(ga_screate_ghosts_irreg_config,GA_SCREATE_GHOSTS_IRREG_CONFIG) #define ga_zcreate_ghosts_irreg_config_ F77_FUNC_(ga_zcreate_ghosts_irreg_config,GA_ZCREATE_GHOSTS_IRREG_CONFIG) #define nga_create_ghosts_irreg_config_ F77_FUNC_(nga_create_ghosts_irreg_config, NGA_CREATE_GHOSTS_IRREG_CONFIG) #define nga_ccreate_ghosts_irreg_config_ F77_FUNC_(nga_ccreate_ghosts_irreg_config,NGA_CCREATE_GHOSTS_IRREG_CONFIG) #define nga_dcreate_ghosts_irreg_config_ F77_FUNC_(nga_dcreate_ghosts_irreg_config,NGA_DCREATE_GHOSTS_IRREG_CONFIG) #define nga_icreate_ghosts_irreg_config_ F77_FUNC_(nga_icreate_ghosts_irreg_config,NGA_ICREATE_GHOSTS_IRREG_CONFIG) #define nga_screate_ghosts_irreg_config_ F77_FUNC_(nga_screate_ghosts_irreg_config,NGA_SCREATE_GHOSTS_IRREG_CONFIG) #define nga_zcreate_ghosts_irreg_config_ F77_FUNC_(nga_zcreate_ghosts_irreg_config,NGA_ZCREATE_GHOSTS_IRREG_CONFIG) #define ga_create_ghosts_config_ F77_FUNC_(ga_create_ghosts_config, GA_CREATE_GHOSTS_CONFIG) #define ga_ccreate_ghosts_config_ F77_FUNC_(ga_ccreate_ghosts_config,GA_CCREATE_GHOSTS_CONFIG) #define ga_dcreate_ghosts_config_ F77_FUNC_(ga_dcreate_ghosts_config,GA_DCREATE_GHOSTS_CONFIG) #define ga_icreate_ghosts_config_ F77_FUNC_(ga_icreate_ghosts_config,GA_ICREATE_GHOSTS_CONFIG) #define ga_screate_ghosts_config_ F77_FUNC_(ga_screate_ghosts_config,GA_SCREATE_GHOSTS_CONFIG) #define ga_zcreate_ghosts_config_ F77_FUNC_(ga_zcreate_ghosts_config,GA_ZCREATE_GHOSTS_CONFIG) #define nga_create_ghosts_config_ F77_FUNC_(nga_create_ghosts_config, NGA_CREATE_GHOSTS_CONFIG) #define nga_ccreate_ghosts_config_ F77_FUNC_(nga_ccreate_ghosts_config,NGA_CCREATE_GHOSTS_CONFIG) #define nga_dcreate_ghosts_config_ F77_FUNC_(nga_dcreate_ghosts_config,NGA_DCREATE_GHOSTS_CONFIG) #define nga_icreate_ghosts_config_ F77_FUNC_(nga_icreate_ghosts_config,NGA_ICREATE_GHOSTS_CONFIG) #define nga_screate_ghosts_config_ F77_FUNC_(nga_screate_ghosts_config,NGA_SCREATE_GHOSTS_CONFIG) #define nga_zcreate_ghosts_config_ F77_FUNC_(nga_zcreate_ghosts_config,NGA_ZCREATE_GHOSTS_CONFIG) #define ga_create_irreg_ F77_FUNC_(ga_create_irreg, GA_CREATE_IRREG) #define ga_ccreate_irreg_ F77_FUNC_(ga_ccreate_irreg,GA_CCREATE_IRREG) #define ga_dcreate_irreg_ F77_FUNC_(ga_dcreate_irreg,GA_DCREATE_IRREG) #define ga_icreate_irreg_ F77_FUNC_(ga_icreate_irreg,GA_ICREATE_IRREG) #define ga_screate_irreg_ F77_FUNC_(ga_screate_irreg,GA_SCREATE_IRREG) #define ga_zcreate_irreg_ F77_FUNC_(ga_zcreate_irreg,GA_ZCREATE_IRREG) #define nga_create_irreg_ F77_FUNC_(nga_create_irreg, NGA_CREATE_IRREG) #define nga_ccreate_irreg_ F77_FUNC_(nga_ccreate_irreg,NGA_CCREATE_IRREG) #define nga_dcreate_irreg_ F77_FUNC_(nga_dcreate_irreg,NGA_DCREATE_IRREG) #define nga_icreate_irreg_ F77_FUNC_(nga_icreate_irreg,NGA_ICREATE_IRREG) #define nga_screate_irreg_ F77_FUNC_(nga_screate_irreg,NGA_SCREATE_IRREG) #define nga_zcreate_irreg_ F77_FUNC_(nga_zcreate_irreg,NGA_ZCREATE_IRREG) #define ga_create_irreg_config_ F77_FUNC_(ga_create_irreg_config, GA_CREATE_IRREG_CONFIG) #define ga_ccreate_irreg_config_ F77_FUNC_(ga_ccreate_irreg_config,GA_CCREATE_IRREG_CONFIG) #define ga_dcreate_irreg_config_ F77_FUNC_(ga_dcreate_irreg_config,GA_DCREATE_IRREG_CONFIG) #define ga_icreate_irreg_config_ F77_FUNC_(ga_icreate_irreg_config,GA_ICREATE_IRREG_CONFIG) #define ga_screate_irreg_config_ F77_FUNC_(ga_screate_irreg_config,GA_SCREATE_IRREG_CONFIG) #define ga_zcreate_irreg_config_ F77_FUNC_(ga_zcreate_irreg_config,GA_ZCREATE_IRREG_CONFIG) #define nga_create_irreg_config_ F77_FUNC_(nga_create_irreg_config, NGA_CREATE_IRREG_CONFIG) #define nga_ccreate_irreg_config_ F77_FUNC_(nga_ccreate_irreg_config,NGA_CCREATE_IRREG_CONFIG) #define nga_dcreate_irreg_config_ F77_FUNC_(nga_dcreate_irreg_config,NGA_DCREATE_IRREG_CONFIG) #define nga_icreate_irreg_config_ F77_FUNC_(nga_icreate_irreg_config,NGA_ICREATE_IRREG_CONFIG) #define nga_screate_irreg_config_ F77_FUNC_(nga_screate_irreg_config,NGA_SCREATE_IRREG_CONFIG) #define nga_zcreate_irreg_config_ F77_FUNC_(nga_zcreate_irreg_config,NGA_ZCREATE_IRREG_CONFIG) #define ga_create_handle_ F77_FUNC_(ga_create_handle, GA_CREATE_HANDLE) #define ga_ccreate_handle_ F77_FUNC_(ga_ccreate_handle,GA_CCREATE_HANDLE) #define ga_dcreate_handle_ F77_FUNC_(ga_dcreate_handle,GA_DCREATE_HANDLE) #define ga_icreate_handle_ F77_FUNC_(ga_icreate_handle,GA_ICREATE_HANDLE) #define ga_screate_handle_ F77_FUNC_(ga_screate_handle,GA_SCREATE_HANDLE) #define ga_zcreate_handle_ F77_FUNC_(ga_zcreate_handle,GA_ZCREATE_HANDLE) #define nga_create_handle_ F77_FUNC_(nga_create_handle, NGA_CREATE_HANDLE) #define nga_ccreate_handle_ F77_FUNC_(nga_ccreate_handle,NGA_CCREATE_HANDLE) #define nga_dcreate_handle_ F77_FUNC_(nga_dcreate_handle,NGA_DCREATE_HANDLE) #define nga_icreate_handle_ F77_FUNC_(nga_icreate_handle,NGA_ICREATE_HANDLE) #define nga_screate_handle_ F77_FUNC_(nga_screate_handle,NGA_SCREATE_HANDLE) #define nga_zcreate_handle_ F77_FUNC_(nga_zcreate_handle,NGA_ZCREATE_HANDLE) #define ga_create_mutexes_ F77_FUNC_(ga_create_mutexes, GA_CREATE_MUTEXES) #define ga_ccreate_mutexes_ F77_FUNC_(ga_ccreate_mutexes,GA_CCREATE_MUTEXES) #define ga_dcreate_mutexes_ F77_FUNC_(ga_dcreate_mutexes,GA_DCREATE_MUTEXES) #define ga_icreate_mutexes_ F77_FUNC_(ga_icreate_mutexes,GA_ICREATE_MUTEXES) #define ga_screate_mutexes_ F77_FUNC_(ga_screate_mutexes,GA_SCREATE_MUTEXES) #define ga_zcreate_mutexes_ F77_FUNC_(ga_zcreate_mutexes,GA_ZCREATE_MUTEXES) #define nga_create_mutexes_ F77_FUNC_(nga_create_mutexes, NGA_CREATE_MUTEXES) #define nga_ccreate_mutexes_ F77_FUNC_(nga_ccreate_mutexes,NGA_CCREATE_MUTEXES) #define nga_dcreate_mutexes_ F77_FUNC_(nga_dcreate_mutexes,NGA_DCREATE_MUTEXES) #define nga_icreate_mutexes_ F77_FUNC_(nga_icreate_mutexes,NGA_ICREATE_MUTEXES) #define nga_screate_mutexes_ F77_FUNC_(nga_screate_mutexes,NGA_SCREATE_MUTEXES) #define nga_zcreate_mutexes_ F77_FUNC_(nga_zcreate_mutexes,NGA_ZCREATE_MUTEXES) #define ga_destroy_ F77_FUNC_(ga_destroy, GA_DESTROY) #define ga_cdestroy_ F77_FUNC_(ga_cdestroy,GA_CDESTROY) #define ga_ddestroy_ F77_FUNC_(ga_ddestroy,GA_DDESTROY) #define ga_idestroy_ F77_FUNC_(ga_idestroy,GA_IDESTROY) #define ga_sdestroy_ F77_FUNC_(ga_sdestroy,GA_SDESTROY) #define ga_zdestroy_ F77_FUNC_(ga_zdestroy,GA_ZDESTROY) #define nga_destroy_ F77_FUNC_(nga_destroy, NGA_DESTROY) #define nga_cdestroy_ F77_FUNC_(nga_cdestroy,NGA_CDESTROY) #define nga_ddestroy_ F77_FUNC_(nga_ddestroy,NGA_DDESTROY) #define nga_idestroy_ F77_FUNC_(nga_idestroy,NGA_IDESTROY) #define nga_sdestroy_ F77_FUNC_(nga_sdestroy,NGA_SDESTROY) #define nga_zdestroy_ F77_FUNC_(nga_zdestroy,NGA_ZDESTROY) #define ga_destroy_mutexes_ F77_FUNC_(ga_destroy_mutexes, GA_DESTROY_MUTEXES) #define ga_cdestroy_mutexes_ F77_FUNC_(ga_cdestroy_mutexes,GA_CDESTROY_MUTEXES) #define ga_ddestroy_mutexes_ F77_FUNC_(ga_ddestroy_mutexes,GA_DDESTROY_MUTEXES) #define ga_idestroy_mutexes_ F77_FUNC_(ga_idestroy_mutexes,GA_IDESTROY_MUTEXES) #define ga_sdestroy_mutexes_ F77_FUNC_(ga_sdestroy_mutexes,GA_SDESTROY_MUTEXES) #define ga_zdestroy_mutexes_ F77_FUNC_(ga_zdestroy_mutexes,GA_ZDESTROY_MUTEXES) #define nga_destroy_mutexes_ F77_FUNC_(nga_destroy_mutexes, NGA_DESTROY_MUTEXES) #define nga_cdestroy_mutexes_ F77_FUNC_(nga_cdestroy_mutexes,NGA_CDESTROY_MUTEXES) #define nga_ddestroy_mutexes_ F77_FUNC_(nga_ddestroy_mutexes,NGA_DDESTROY_MUTEXES) #define nga_idestroy_mutexes_ F77_FUNC_(nga_idestroy_mutexes,NGA_IDESTROY_MUTEXES) #define nga_sdestroy_mutexes_ F77_FUNC_(nga_sdestroy_mutexes,NGA_SDESTROY_MUTEXES) #define nga_zdestroy_mutexes_ F77_FUNC_(nga_zdestroy_mutexes,NGA_ZDESTROY_MUTEXES) #define ga_distribution_ F77_FUNC_(ga_distribution, GA_DISTRIBUTION) #define ga_cdistribution_ F77_FUNC_(ga_cdistribution,GA_CDISTRIBUTION) #define ga_ddistribution_ F77_FUNC_(ga_ddistribution,GA_DDISTRIBUTION) #define ga_idistribution_ F77_FUNC_(ga_idistribution,GA_IDISTRIBUTION) #define ga_sdistribution_ F77_FUNC_(ga_sdistribution,GA_SDISTRIBUTION) #define ga_zdistribution_ F77_FUNC_(ga_zdistribution,GA_ZDISTRIBUTION) #define nga_distribution_ F77_FUNC_(nga_distribution, NGA_DISTRIBUTION) #define nga_cdistribution_ F77_FUNC_(nga_cdistribution,NGA_CDISTRIBUTION) #define nga_ddistribution_ F77_FUNC_(nga_ddistribution,NGA_DDISTRIBUTION) #define nga_idistribution_ F77_FUNC_(nga_idistribution,NGA_IDISTRIBUTION) #define nga_sdistribution_ F77_FUNC_(nga_sdistribution,NGA_SDISTRIBUTION) #define nga_zdistribution_ F77_FUNC_(nga_zdistribution,NGA_ZDISTRIBUTION) #define ga_duplicate_ F77_FUNC_(ga_duplicate, GA_DUPLICATE) #define ga_cduplicate_ F77_FUNC_(ga_cduplicate,GA_CDUPLICATE) #define ga_dduplicate_ F77_FUNC_(ga_dduplicate,GA_DDUPLICATE) #define ga_iduplicate_ F77_FUNC_(ga_iduplicate,GA_IDUPLICATE) #define ga_sduplicate_ F77_FUNC_(ga_sduplicate,GA_SDUPLICATE) #define ga_zduplicate_ F77_FUNC_(ga_zduplicate,GA_ZDUPLICATE) #define nga_duplicate_ F77_FUNC_(nga_duplicate, NGA_DUPLICATE) #define nga_cduplicate_ F77_FUNC_(nga_cduplicate,NGA_CDUPLICATE) #define nga_dduplicate_ F77_FUNC_(nga_dduplicate,NGA_DDUPLICATE) #define nga_iduplicate_ F77_FUNC_(nga_iduplicate,NGA_IDUPLICATE) #define nga_sduplicate_ F77_FUNC_(nga_sduplicate,NGA_SDUPLICATE) #define nga_zduplicate_ F77_FUNC_(nga_zduplicate,NGA_ZDUPLICATE) #define ga_fill_ F77_FUNC_(ga_fill, GA_FILL) #define ga_cfill_ F77_FUNC_(ga_cfill,GA_CFILL) #define ga_dfill_ F77_FUNC_(ga_dfill,GA_DFILL) #define ga_ifill_ F77_FUNC_(ga_ifill,GA_IFILL) #define ga_sfill_ F77_FUNC_(ga_sfill,GA_SFILL) #define ga_zfill_ F77_FUNC_(ga_zfill,GA_ZFILL) #define nga_fill_ F77_FUNC_(nga_fill, NGA_FILL) #define nga_cfill_ F77_FUNC_(nga_cfill,NGA_CFILL) #define nga_dfill_ F77_FUNC_(nga_dfill,NGA_DFILL) #define nga_ifill_ F77_FUNC_(nga_ifill,NGA_IFILL) #define nga_sfill_ F77_FUNC_(nga_sfill,NGA_SFILL) #define nga_zfill_ F77_FUNC_(nga_zfill,NGA_ZFILL) #define ga_get_block_info_ F77_FUNC_(ga_get_block_info, GA_GET_BLOCK_INFO) #define ga_cget_block_info_ F77_FUNC_(ga_cget_block_info,GA_CGET_BLOCK_INFO) #define ga_dget_block_info_ F77_FUNC_(ga_dget_block_info,GA_DGET_BLOCK_INFO) #define ga_iget_block_info_ F77_FUNC_(ga_iget_block_info,GA_IGET_BLOCK_INFO) #define ga_sget_block_info_ F77_FUNC_(ga_sget_block_info,GA_SGET_BLOCK_INFO) #define ga_zget_block_info_ F77_FUNC_(ga_zget_block_info,GA_ZGET_BLOCK_INFO) #define nga_get_block_info_ F77_FUNC_(nga_get_block_info, NGA_GET_BLOCK_INFO) #define nga_cget_block_info_ F77_FUNC_(nga_cget_block_info,NGA_CGET_BLOCK_INFO) #define nga_dget_block_info_ F77_FUNC_(nga_dget_block_info,NGA_DGET_BLOCK_INFO) #define nga_iget_block_info_ F77_FUNC_(nga_iget_block_info,NGA_IGET_BLOCK_INFO) #define nga_sget_block_info_ F77_FUNC_(nga_sget_block_info,NGA_SGET_BLOCK_INFO) #define nga_zget_block_info_ F77_FUNC_(nga_zget_block_info,NGA_ZGET_BLOCK_INFO) #define ga_get_debug_ F77_FUNC_(ga_get_debug, GA_GET_DEBUG) #define ga_cget_debug_ F77_FUNC_(ga_cget_debug,GA_CGET_DEBUG) #define ga_dget_debug_ F77_FUNC_(ga_dget_debug,GA_DGET_DEBUG) #define ga_iget_debug_ F77_FUNC_(ga_iget_debug,GA_IGET_DEBUG) #define ga_sget_debug_ F77_FUNC_(ga_sget_debug,GA_SGET_DEBUG) #define ga_zget_debug_ F77_FUNC_(ga_zget_debug,GA_ZGET_DEBUG) #define nga_get_debug_ F77_FUNC_(nga_get_debug, NGA_GET_DEBUG) #define nga_cget_debug_ F77_FUNC_(nga_cget_debug,NGA_CGET_DEBUG) #define nga_dget_debug_ F77_FUNC_(nga_dget_debug,NGA_DGET_DEBUG) #define nga_iget_debug_ F77_FUNC_(nga_iget_debug,NGA_IGET_DEBUG) #define nga_sget_debug_ F77_FUNC_(nga_sget_debug,NGA_SGET_DEBUG) #define nga_zget_debug_ F77_FUNC_(nga_zget_debug,NGA_ZGET_DEBUG) #define ga_get_dimension_ F77_FUNC_(ga_get_dimension, GA_GET_DIMENSION) #define ga_cget_dimension_ F77_FUNC_(ga_cget_dimension,GA_CGET_DIMENSION) #define ga_dget_dimension_ F77_FUNC_(ga_dget_dimension,GA_DGET_DIMENSION) #define ga_iget_dimension_ F77_FUNC_(ga_iget_dimension,GA_IGET_DIMENSION) #define ga_sget_dimension_ F77_FUNC_(ga_sget_dimension,GA_SGET_DIMENSION) #define ga_zget_dimension_ F77_FUNC_(ga_zget_dimension,GA_ZGET_DIMENSION) #define nga_get_dimension_ F77_FUNC_(nga_get_dimension, NGA_GET_DIMENSION) #define nga_cget_dimension_ F77_FUNC_(nga_cget_dimension,NGA_CGET_DIMENSION) #define nga_dget_dimension_ F77_FUNC_(nga_dget_dimension,NGA_DGET_DIMENSION) #define nga_iget_dimension_ F77_FUNC_(nga_iget_dimension,NGA_IGET_DIMENSION) #define nga_sget_dimension_ F77_FUNC_(nga_sget_dimension,NGA_SGET_DIMENSION) #define nga_zget_dimension_ F77_FUNC_(nga_zget_dimension,NGA_ZGET_DIMENSION) #define ga_get_proc_grid_ F77_FUNC_(ga_get_proc_grid, GA_GET_PROC_GRID) #define ga_cget_proc_grid_ F77_FUNC_(ga_cget_proc_grid,GA_CGET_PROC_GRID) #define ga_dget_proc_grid_ F77_FUNC_(ga_dget_proc_grid,GA_DGET_PROC_GRID) #define ga_iget_proc_grid_ F77_FUNC_(ga_iget_proc_grid,GA_IGET_PROC_GRID) #define ga_sget_proc_grid_ F77_FUNC_(ga_sget_proc_grid,GA_SGET_PROC_GRID) #define ga_zget_proc_grid_ F77_FUNC_(ga_zget_proc_grid,GA_ZGET_PROC_GRID) #define nga_get_proc_grid_ F77_FUNC_(nga_get_proc_grid, NGA_GET_PROC_GRID) #define nga_cget_proc_grid_ F77_FUNC_(nga_cget_proc_grid,NGA_CGET_PROC_GRID) #define nga_dget_proc_grid_ F77_FUNC_(nga_dget_proc_grid,NGA_DGET_PROC_GRID) #define nga_iget_proc_grid_ F77_FUNC_(nga_iget_proc_grid,NGA_IGET_PROC_GRID) #define nga_sget_proc_grid_ F77_FUNC_(nga_sget_proc_grid,NGA_SGET_PROC_GRID) #define nga_zget_proc_grid_ F77_FUNC_(nga_zget_proc_grid,NGA_ZGET_PROC_GRID) #define ga_get_proc_index_ F77_FUNC_(ga_get_proc_index, GA_GET_PROC_INDEX) #define ga_cget_proc_index_ F77_FUNC_(ga_cget_proc_index,GA_CGET_PROC_INDEX) #define ga_dget_proc_index_ F77_FUNC_(ga_dget_proc_index,GA_DGET_PROC_INDEX) #define ga_iget_proc_index_ F77_FUNC_(ga_iget_proc_index,GA_IGET_PROC_INDEX) #define ga_sget_proc_index_ F77_FUNC_(ga_sget_proc_index,GA_SGET_PROC_INDEX) #define ga_zget_proc_index_ F77_FUNC_(ga_zget_proc_index,GA_ZGET_PROC_INDEX) #define nga_get_proc_index_ F77_FUNC_(nga_get_proc_index, NGA_GET_PROC_INDEX) #define nga_cget_proc_index_ F77_FUNC_(nga_cget_proc_index,NGA_CGET_PROC_INDEX) #define nga_dget_proc_index_ F77_FUNC_(nga_dget_proc_index,NGA_DGET_PROC_INDEX) #define nga_iget_proc_index_ F77_FUNC_(nga_iget_proc_index,NGA_IGET_PROC_INDEX) #define nga_sget_proc_index_ F77_FUNC_(nga_sget_proc_index,NGA_SGET_PROC_INDEX) #define nga_zget_proc_index_ F77_FUNC_(nga_zget_proc_index,NGA_ZGET_PROC_INDEX) #define ga_has_ghosts_ F77_FUNC_(ga_has_ghosts, GA_HAS_GHOSTS) #define ga_chas_ghosts_ F77_FUNC_(ga_chas_ghosts,GA_CHAS_GHOSTS) #define ga_dhas_ghosts_ F77_FUNC_(ga_dhas_ghosts,GA_DHAS_GHOSTS) #define ga_ihas_ghosts_ F77_FUNC_(ga_ihas_ghosts,GA_IHAS_GHOSTS) #define ga_shas_ghosts_ F77_FUNC_(ga_shas_ghosts,GA_SHAS_GHOSTS) #define ga_zhas_ghosts_ F77_FUNC_(ga_zhas_ghosts,GA_ZHAS_GHOSTS) #define nga_has_ghosts_ F77_FUNC_(nga_has_ghosts, NGA_HAS_GHOSTS) #define nga_chas_ghosts_ F77_FUNC_(nga_chas_ghosts,NGA_CHAS_GHOSTS) #define nga_dhas_ghosts_ F77_FUNC_(nga_dhas_ghosts,NGA_DHAS_GHOSTS) #define nga_ihas_ghosts_ F77_FUNC_(nga_ihas_ghosts,NGA_IHAS_GHOSTS) #define nga_shas_ghosts_ F77_FUNC_(nga_shas_ghosts,NGA_SHAS_GHOSTS) #define nga_zhas_ghosts_ F77_FUNC_(nga_zhas_ghosts,NGA_ZHAS_GHOSTS) #define ga_initialize_ F77_FUNC_(ga_initialize, GA_INITIALIZE) #define ga_cinitialize_ F77_FUNC_(ga_cinitialize,GA_CINITIALIZE) #define ga_dinitialize_ F77_FUNC_(ga_dinitialize,GA_DINITIALIZE) #define ga_iinitialize_ F77_FUNC_(ga_iinitialize,GA_IINITIALIZE) #define ga_sinitialize_ F77_FUNC_(ga_sinitialize,GA_SINITIALIZE) #define ga_zinitialize_ F77_FUNC_(ga_zinitialize,GA_ZINITIALIZE) #define nga_initialize_ F77_FUNC_(nga_initialize, NGA_INITIALIZE) #define nga_cinitialize_ F77_FUNC_(nga_cinitialize,NGA_CINITIALIZE) #define nga_dinitialize_ F77_FUNC_(nga_dinitialize,NGA_DINITIALIZE) #define nga_iinitialize_ F77_FUNC_(nga_iinitialize,NGA_IINITIALIZE) #define nga_sinitialize_ F77_FUNC_(nga_sinitialize,NGA_SINITIALIZE) #define nga_zinitialize_ F77_FUNC_(nga_zinitialize,NGA_ZINITIALIZE) #define ga_initialized_ F77_FUNC_(ga_initialized, GA_INITIALIZED) #define ga_cinitialized_ F77_FUNC_(ga_cinitialized,GA_CINITIALIZED) #define ga_dinitialized_ F77_FUNC_(ga_dinitialized,GA_DINITIALIZED) #define ga_iinitialized_ F77_FUNC_(ga_iinitialized,GA_IINITIALIZED) #define ga_sinitialized_ F77_FUNC_(ga_sinitialized,GA_SINITIALIZED) #define ga_zinitialized_ F77_FUNC_(ga_zinitialized,GA_ZINITIALIZED) #define nga_initialized_ F77_FUNC_(nga_initialized, NGA_INITIALIZED) #define nga_cinitialized_ F77_FUNC_(nga_cinitialized,NGA_CINITIALIZED) #define nga_dinitialized_ F77_FUNC_(nga_dinitialized,NGA_DINITIALIZED) #define nga_iinitialized_ F77_FUNC_(nga_iinitialized,NGA_IINITIALIZED) #define nga_sinitialized_ F77_FUNC_(nga_sinitialized,NGA_SINITIALIZED) #define nga_zinitialized_ F77_FUNC_(nga_zinitialized,NGA_ZINITIALIZED) #define ga_initialize_ltd_ F77_FUNC_(ga_initialize_ltd, GA_INITIALIZE_LTD) #define ga_cinitialize_ltd_ F77_FUNC_(ga_cinitialize_ltd,GA_CINITIALIZE_LTD) #define ga_dinitialize_ltd_ F77_FUNC_(ga_dinitialize_ltd,GA_DINITIALIZE_LTD) #define ga_iinitialize_ltd_ F77_FUNC_(ga_iinitialize_ltd,GA_IINITIALIZE_LTD) #define ga_sinitialize_ltd_ F77_FUNC_(ga_sinitialize_ltd,GA_SINITIALIZE_LTD) #define ga_zinitialize_ltd_ F77_FUNC_(ga_zinitialize_ltd,GA_ZINITIALIZE_LTD) #define nga_initialize_ltd_ F77_FUNC_(nga_initialize_ltd, NGA_INITIALIZE_LTD) #define nga_cinitialize_ltd_ F77_FUNC_(nga_cinitialize_ltd,NGA_CINITIALIZE_LTD) #define nga_dinitialize_ltd_ F77_FUNC_(nga_dinitialize_ltd,NGA_DINITIALIZE_LTD) #define nga_iinitialize_ltd_ F77_FUNC_(nga_iinitialize_ltd,NGA_IINITIALIZE_LTD) #define nga_sinitialize_ltd_ F77_FUNC_(nga_sinitialize_ltd,NGA_SINITIALIZE_LTD) #define nga_zinitialize_ltd_ F77_FUNC_(nga_zinitialize_ltd,NGA_ZINITIALIZE_LTD) #define ga_inquire_ F77_FUNC_(ga_inquire, GA_INQUIRE) #define ga_cinquire_ F77_FUNC_(ga_cinquire,GA_CINQUIRE) #define ga_dinquire_ F77_FUNC_(ga_dinquire,GA_DINQUIRE) #define ga_iinquire_ F77_FUNC_(ga_iinquire,GA_IINQUIRE) #define ga_sinquire_ F77_FUNC_(ga_sinquire,GA_SINQUIRE) #define ga_zinquire_ F77_FUNC_(ga_zinquire,GA_ZINQUIRE) #define nga_inquire_ F77_FUNC_(nga_inquire, NGA_INQUIRE) #define nga_cinquire_ F77_FUNC_(nga_cinquire,NGA_CINQUIRE) #define nga_dinquire_ F77_FUNC_(nga_dinquire,NGA_DINQUIRE) #define nga_iinquire_ F77_FUNC_(nga_iinquire,NGA_IINQUIRE) #define nga_sinquire_ F77_FUNC_(nga_sinquire,NGA_SINQUIRE) #define nga_zinquire_ F77_FUNC_(nga_zinquire,NGA_ZINQUIRE) #define ga_inquire_type_ F77_FUNC_(ga_inquire_type, GA_INQUIRE_TYPE) #define ga_cinquire_type_ F77_FUNC_(ga_cinquire_type,GA_CINQUIRE_TYPE) #define ga_dinquire_type_ F77_FUNC_(ga_dinquire_type,GA_DINQUIRE_TYPE) #define ga_iinquire_type_ F77_FUNC_(ga_iinquire_type,GA_IINQUIRE_TYPE) #define ga_sinquire_type_ F77_FUNC_(ga_sinquire_type,GA_SINQUIRE_TYPE) #define ga_zinquire_type_ F77_FUNC_(ga_zinquire_type,GA_ZINQUIRE_TYPE) #define nga_inquire_type_ F77_FUNC_(nga_inquire_type, NGA_INQUIRE_TYPE) #define nga_cinquire_type_ F77_FUNC_(nga_cinquire_type,NGA_CINQUIRE_TYPE) #define nga_dinquire_type_ F77_FUNC_(nga_dinquire_type,NGA_DINQUIRE_TYPE) #define nga_iinquire_type_ F77_FUNC_(nga_iinquire_type,NGA_IINQUIRE_TYPE) #define nga_sinquire_type_ F77_FUNC_(nga_sinquire_type,NGA_SINQUIRE_TYPE) #define nga_zinquire_type_ F77_FUNC_(nga_zinquire_type,NGA_ZINQUIRE_TYPE) #define ga_inquire_memory_ F77_FUNC_(ga_inquire_memory, GA_INQUIRE_MEMORY) #define ga_cinquire_memory_ F77_FUNC_(ga_cinquire_memory,GA_CINQUIRE_MEMORY) #define ga_dinquire_memory_ F77_FUNC_(ga_dinquire_memory,GA_DINQUIRE_MEMORY) #define ga_iinquire_memory_ F77_FUNC_(ga_iinquire_memory,GA_IINQUIRE_MEMORY) #define ga_sinquire_memory_ F77_FUNC_(ga_sinquire_memory,GA_SINQUIRE_MEMORY) #define ga_zinquire_memory_ F77_FUNC_(ga_zinquire_memory,GA_ZINQUIRE_MEMORY) #define nga_inquire_memory_ F77_FUNC_(nga_inquire_memory, NGA_INQUIRE_MEMORY) #define nga_cinquire_memory_ F77_FUNC_(nga_cinquire_memory,NGA_CINQUIRE_MEMORY) #define nga_dinquire_memory_ F77_FUNC_(nga_dinquire_memory,NGA_DINQUIRE_MEMORY) #define nga_iinquire_memory_ F77_FUNC_(nga_iinquire_memory,NGA_IINQUIRE_MEMORY) #define nga_sinquire_memory_ F77_FUNC_(nga_sinquire_memory,NGA_SINQUIRE_MEMORY) #define nga_zinquire_memory_ F77_FUNC_(nga_zinquire_memory,NGA_ZINQUIRE_MEMORY) #define ga_inquire_name_ F77_FUNC_(ga_inquire_name, GA_INQUIRE_NAME) #define ga_cinquire_name_ F77_FUNC_(ga_cinquire_name,GA_CINQUIRE_NAME) #define ga_dinquire_name_ F77_FUNC_(ga_dinquire_name,GA_DINQUIRE_NAME) #define ga_iinquire_name_ F77_FUNC_(ga_iinquire_name,GA_IINQUIRE_NAME) #define ga_sinquire_name_ F77_FUNC_(ga_sinquire_name,GA_SINQUIRE_NAME) #define ga_zinquire_name_ F77_FUNC_(ga_zinquire_name,GA_ZINQUIRE_NAME) #define nga_inquire_name_ F77_FUNC_(nga_inquire_name, NGA_INQUIRE_NAME) #define nga_cinquire_name_ F77_FUNC_(nga_cinquire_name,NGA_CINQUIRE_NAME) #define nga_dinquire_name_ F77_FUNC_(nga_dinquire_name,NGA_DINQUIRE_NAME) #define nga_iinquire_name_ F77_FUNC_(nga_iinquire_name,NGA_IINQUIRE_NAME) #define nga_sinquire_name_ F77_FUNC_(nga_sinquire_name,NGA_SINQUIRE_NAME) #define nga_zinquire_name_ F77_FUNC_(nga_zinquire_name,NGA_ZINQUIRE_NAME) #define ga_is_mirrored_ F77_FUNC_(ga_is_mirrored, GA_IS_MIRRORED) #define ga_cis_mirrored_ F77_FUNC_(ga_cis_mirrored,GA_CIS_MIRRORED) #define ga_dis_mirrored_ F77_FUNC_(ga_dis_mirrored,GA_DIS_MIRRORED) #define ga_iis_mirrored_ F77_FUNC_(ga_iis_mirrored,GA_IIS_MIRRORED) #define ga_sis_mirrored_ F77_FUNC_(ga_sis_mirrored,GA_SIS_MIRRORED) #define ga_zis_mirrored_ F77_FUNC_(ga_zis_mirrored,GA_ZIS_MIRRORED) #define nga_is_mirrored_ F77_FUNC_(nga_is_mirrored, NGA_IS_MIRRORED) #define nga_cis_mirrored_ F77_FUNC_(nga_cis_mirrored,NGA_CIS_MIRRORED) #define nga_dis_mirrored_ F77_FUNC_(nga_dis_mirrored,NGA_DIS_MIRRORED) #define nga_iis_mirrored_ F77_FUNC_(nga_iis_mirrored,NGA_IIS_MIRRORED) #define nga_sis_mirrored_ F77_FUNC_(nga_sis_mirrored,NGA_SIS_MIRRORED) #define nga_zis_mirrored_ F77_FUNC_(nga_zis_mirrored,NGA_ZIS_MIRRORED) #define ga_list_nodeid_ F77_FUNC_(ga_list_nodeid, GA_LIST_NODEID) #define ga_clist_nodeid_ F77_FUNC_(ga_clist_nodeid,GA_CLIST_NODEID) #define ga_dlist_nodeid_ F77_FUNC_(ga_dlist_nodeid,GA_DLIST_NODEID) #define ga_ilist_nodeid_ F77_FUNC_(ga_ilist_nodeid,GA_ILIST_NODEID) #define ga_slist_nodeid_ F77_FUNC_(ga_slist_nodeid,GA_SLIST_NODEID) #define ga_zlist_nodeid_ F77_FUNC_(ga_zlist_nodeid,GA_ZLIST_NODEID) #define nga_list_nodeid_ F77_FUNC_(nga_list_nodeid, NGA_LIST_NODEID) #define nga_clist_nodeid_ F77_FUNC_(nga_clist_nodeid,NGA_CLIST_NODEID) #define nga_dlist_nodeid_ F77_FUNC_(nga_dlist_nodeid,NGA_DLIST_NODEID) #define nga_ilist_nodeid_ F77_FUNC_(nga_ilist_nodeid,NGA_ILIST_NODEID) #define nga_slist_nodeid_ F77_FUNC_(nga_slist_nodeid,NGA_SLIST_NODEID) #define nga_zlist_nodeid_ F77_FUNC_(nga_zlist_nodeid,NGA_ZLIST_NODEID) #define ga_locate_ F77_FUNC_(ga_locate, GA_LOCATE) #define ga_clocate_ F77_FUNC_(ga_clocate,GA_CLOCATE) #define ga_dlocate_ F77_FUNC_(ga_dlocate,GA_DLOCATE) #define ga_ilocate_ F77_FUNC_(ga_ilocate,GA_ILOCATE) #define ga_slocate_ F77_FUNC_(ga_slocate,GA_SLOCATE) #define ga_zlocate_ F77_FUNC_(ga_zlocate,GA_ZLOCATE) #define nga_locate_ F77_FUNC_(nga_locate, NGA_LOCATE) #define nga_clocate_ F77_FUNC_(nga_clocate,NGA_CLOCATE) #define nga_dlocate_ F77_FUNC_(nga_dlocate,NGA_DLOCATE) #define nga_ilocate_ F77_FUNC_(nga_ilocate,NGA_ILOCATE) #define nga_slocate_ F77_FUNC_(nga_slocate,NGA_SLOCATE) #define nga_zlocate_ F77_FUNC_(nga_zlocate,NGA_ZLOCATE) #define ga_locate_num_blocks_ F77_FUNC_(ga_locate_num_blocks, GA_LOCATE_NUM_BLOCKS) #define ga_clocate_num_blocks_ F77_FUNC_(ga_clocate_num_blocks,GA_CLOCATE_NUM_BLOCKS) #define ga_dlocate_num_blocks_ F77_FUNC_(ga_dlocate_num_blocks,GA_DLOCATE_NUM_BLOCKS) #define ga_ilocate_num_blocks_ F77_FUNC_(ga_ilocate_num_blocks,GA_ILOCATE_NUM_BLOCKS) #define ga_slocate_num_blocks_ F77_FUNC_(ga_slocate_num_blocks,GA_SLOCATE_NUM_BLOCKS) #define ga_zlocate_num_blocks_ F77_FUNC_(ga_zlocate_num_blocks,GA_ZLOCATE_NUM_BLOCKS) #define nga_locate_num_blocks_ F77_FUNC_(nga_locate_num_blocks, NGA_LOCATE_NUM_BLOCKS) #define nga_clocate_num_blocks_ F77_FUNC_(nga_clocate_num_blocks,NGA_CLOCATE_NUM_BLOCKS) #define nga_dlocate_num_blocks_ F77_FUNC_(nga_dlocate_num_blocks,NGA_DLOCATE_NUM_BLOCKS) #define nga_ilocate_num_blocks_ F77_FUNC_(nga_ilocate_num_blocks,NGA_ILOCATE_NUM_BLOCKS) #define nga_slocate_num_blocks_ F77_FUNC_(nga_slocate_num_blocks,NGA_SLOCATE_NUM_BLOCKS) #define nga_zlocate_num_blocks_ F77_FUNC_(nga_zlocate_num_blocks,NGA_ZLOCATE_NUM_BLOCKS) #define ga_locate_nnodes_ F77_FUNC_(ga_locate_nnodes, GA_LOCATE_NNODES) #define ga_clocate_nnodes_ F77_FUNC_(ga_clocate_nnodes,GA_CLOCATE_NNODES) #define ga_dlocate_nnodes_ F77_FUNC_(ga_dlocate_nnodes,GA_DLOCATE_NNODES) #define ga_ilocate_nnodes_ F77_FUNC_(ga_ilocate_nnodes,GA_ILOCATE_NNODES) #define ga_slocate_nnodes_ F77_FUNC_(ga_slocate_nnodes,GA_SLOCATE_NNODES) #define ga_zlocate_nnodes_ F77_FUNC_(ga_zlocate_nnodes,GA_ZLOCATE_NNODES) #define nga_locate_nnodes_ F77_FUNC_(nga_locate_nnodes, NGA_LOCATE_NNODES) #define nga_clocate_nnodes_ F77_FUNC_(nga_clocate_nnodes,NGA_CLOCATE_NNODES) #define nga_dlocate_nnodes_ F77_FUNC_(nga_dlocate_nnodes,NGA_DLOCATE_NNODES) #define nga_ilocate_nnodes_ F77_FUNC_(nga_ilocate_nnodes,NGA_ILOCATE_NNODES) #define nga_slocate_nnodes_ F77_FUNC_(nga_slocate_nnodes,NGA_SLOCATE_NNODES) #define nga_zlocate_nnodes_ F77_FUNC_(nga_zlocate_nnodes,NGA_ZLOCATE_NNODES) #define ga_locate_region_ F77_FUNC_(ga_locate_region, GA_LOCATE_REGION) #define ga_clocate_region_ F77_FUNC_(ga_clocate_region,GA_CLOCATE_REGION) #define ga_dlocate_region_ F77_FUNC_(ga_dlocate_region,GA_DLOCATE_REGION) #define ga_ilocate_region_ F77_FUNC_(ga_ilocate_region,GA_ILOCATE_REGION) #define ga_slocate_region_ F77_FUNC_(ga_slocate_region,GA_SLOCATE_REGION) #define ga_zlocate_region_ F77_FUNC_(ga_zlocate_region,GA_ZLOCATE_REGION) #define nga_locate_region_ F77_FUNC_(nga_locate_region, NGA_LOCATE_REGION) #define nga_clocate_region_ F77_FUNC_(nga_clocate_region,NGA_CLOCATE_REGION) #define nga_dlocate_region_ F77_FUNC_(nga_dlocate_region,NGA_DLOCATE_REGION) #define nga_ilocate_region_ F77_FUNC_(nga_ilocate_region,NGA_ILOCATE_REGION) #define nga_slocate_region_ F77_FUNC_(nga_slocate_region,NGA_SLOCATE_REGION) #define nga_zlocate_region_ F77_FUNC_(nga_zlocate_region,NGA_ZLOCATE_REGION) #define ga_lock_ F77_FUNC_(ga_lock, GA_LOCK) #define ga_clock_ F77_FUNC_(ga_clock,GA_CLOCK) #define ga_dlock_ F77_FUNC_(ga_dlock,GA_DLOCK) #define ga_ilock_ F77_FUNC_(ga_ilock,GA_ILOCK) #define ga_slock_ F77_FUNC_(ga_slock,GA_SLOCK) #define ga_zlock_ F77_FUNC_(ga_zlock,GA_ZLOCK) #define nga_lock_ F77_FUNC_(nga_lock, NGA_LOCK) #define nga_clock_ F77_FUNC_(nga_clock,NGA_CLOCK) #define nga_dlock_ F77_FUNC_(nga_dlock,NGA_DLOCK) #define nga_ilock_ F77_FUNC_(nga_ilock,NGA_ILOCK) #define nga_slock_ F77_FUNC_(nga_slock,NGA_SLOCK) #define nga_zlock_ F77_FUNC_(nga_zlock,NGA_ZLOCK) #define ga_ndim_ F77_FUNC_(ga_ndim, GA_NDIM) #define ga_cndim_ F77_FUNC_(ga_cndim,GA_CNDIM) #define ga_dndim_ F77_FUNC_(ga_dndim,GA_DNDIM) #define ga_indim_ F77_FUNC_(ga_indim,GA_INDIM) #define ga_sndim_ F77_FUNC_(ga_sndim,GA_SNDIM) #define ga_zndim_ F77_FUNC_(ga_zndim,GA_ZNDIM) #define nga_ndim_ F77_FUNC_(nga_ndim, NGA_NDIM) #define nga_cndim_ F77_FUNC_(nga_cndim,NGA_CNDIM) #define nga_dndim_ F77_FUNC_(nga_dndim,NGA_DNDIM) #define nga_indim_ F77_FUNC_(nga_indim,NGA_INDIM) #define nga_sndim_ F77_FUNC_(nga_sndim,NGA_SNDIM) #define nga_zndim_ F77_FUNC_(nga_zndim,NGA_ZNDIM) #define ga_mask_sync_ F77_FUNC_(ga_mask_sync, GA_MASK_SYNC) #define ga_cmask_sync_ F77_FUNC_(ga_cmask_sync,GA_CMASK_SYNC) #define ga_dmask_sync_ F77_FUNC_(ga_dmask_sync,GA_DMASK_SYNC) #define ga_imask_sync_ F77_FUNC_(ga_imask_sync,GA_IMASK_SYNC) #define ga_smask_sync_ F77_FUNC_(ga_smask_sync,GA_SMASK_SYNC) #define ga_zmask_sync_ F77_FUNC_(ga_zmask_sync,GA_ZMASK_SYNC) #define nga_mask_sync_ F77_FUNC_(nga_mask_sync, NGA_MASK_SYNC) #define nga_cmask_sync_ F77_FUNC_(nga_cmask_sync,NGA_CMASK_SYNC) #define nga_dmask_sync_ F77_FUNC_(nga_dmask_sync,NGA_DMASK_SYNC) #define nga_imask_sync_ F77_FUNC_(nga_imask_sync,NGA_IMASK_SYNC) #define nga_smask_sync_ F77_FUNC_(nga_smask_sync,NGA_SMASK_SYNC) #define nga_zmask_sync_ F77_FUNC_(nga_zmask_sync,NGA_ZMASK_SYNC) #define ga_memory_avail_ F77_FUNC_(ga_memory_avail, GA_MEMORY_AVAIL) #define ga_cmemory_avail_ F77_FUNC_(ga_cmemory_avail,GA_CMEMORY_AVAIL) #define ga_dmemory_avail_ F77_FUNC_(ga_dmemory_avail,GA_DMEMORY_AVAIL) #define ga_imemory_avail_ F77_FUNC_(ga_imemory_avail,GA_IMEMORY_AVAIL) #define ga_smemory_avail_ F77_FUNC_(ga_smemory_avail,GA_SMEMORY_AVAIL) #define ga_zmemory_avail_ F77_FUNC_(ga_zmemory_avail,GA_ZMEMORY_AVAIL) #define nga_memory_avail_ F77_FUNC_(nga_memory_avail, NGA_MEMORY_AVAIL) #define nga_cmemory_avail_ F77_FUNC_(nga_cmemory_avail,NGA_CMEMORY_AVAIL) #define nga_dmemory_avail_ F77_FUNC_(nga_dmemory_avail,NGA_DMEMORY_AVAIL) #define nga_imemory_avail_ F77_FUNC_(nga_imemory_avail,NGA_IMEMORY_AVAIL) #define nga_smemory_avail_ F77_FUNC_(nga_smemory_avail,NGA_SMEMORY_AVAIL) #define nga_zmemory_avail_ F77_FUNC_(nga_zmemory_avail,NGA_ZMEMORY_AVAIL) #define ga_memory_limited_ F77_FUNC_(ga_memory_limited, GA_MEMORY_LIMITED) #define ga_cmemory_limited_ F77_FUNC_(ga_cmemory_limited,GA_CMEMORY_LIMITED) #define ga_dmemory_limited_ F77_FUNC_(ga_dmemory_limited,GA_DMEMORY_LIMITED) #define ga_imemory_limited_ F77_FUNC_(ga_imemory_limited,GA_IMEMORY_LIMITED) #define ga_smemory_limited_ F77_FUNC_(ga_smemory_limited,GA_SMEMORY_LIMITED) #define ga_zmemory_limited_ F77_FUNC_(ga_zmemory_limited,GA_ZMEMORY_LIMITED) #define nga_memory_limited_ F77_FUNC_(nga_memory_limited, NGA_MEMORY_LIMITED) #define nga_cmemory_limited_ F77_FUNC_(nga_cmemory_limited,NGA_CMEMORY_LIMITED) #define nga_dmemory_limited_ F77_FUNC_(nga_dmemory_limited,NGA_DMEMORY_LIMITED) #define nga_imemory_limited_ F77_FUNC_(nga_imemory_limited,NGA_IMEMORY_LIMITED) #define nga_smemory_limited_ F77_FUNC_(nga_smemory_limited,NGA_SMEMORY_LIMITED) #define nga_zmemory_limited_ F77_FUNC_(nga_zmemory_limited,NGA_ZMEMORY_LIMITED) #define ga_merge_distr_patch_ F77_FUNC_(ga_merge_distr_patch, GA_MERGE_DISTR_PATCH) #define ga_cmerge_distr_patch_ F77_FUNC_(ga_cmerge_distr_patch,GA_CMERGE_DISTR_PATCH) #define ga_dmerge_distr_patch_ F77_FUNC_(ga_dmerge_distr_patch,GA_DMERGE_DISTR_PATCH) #define ga_imerge_distr_patch_ F77_FUNC_(ga_imerge_distr_patch,GA_IMERGE_DISTR_PATCH) #define ga_smerge_distr_patch_ F77_FUNC_(ga_smerge_distr_patch,GA_SMERGE_DISTR_PATCH) #define ga_zmerge_distr_patch_ F77_FUNC_(ga_zmerge_distr_patch,GA_ZMERGE_DISTR_PATCH) #define nga_merge_distr_patch_ F77_FUNC_(nga_merge_distr_patch, NGA_MERGE_DISTR_PATCH) #define nga_cmerge_distr_patch_ F77_FUNC_(nga_cmerge_distr_patch,NGA_CMERGE_DISTR_PATCH) #define nga_dmerge_distr_patch_ F77_FUNC_(nga_dmerge_distr_patch,NGA_DMERGE_DISTR_PATCH) #define nga_imerge_distr_patch_ F77_FUNC_(nga_imerge_distr_patch,NGA_IMERGE_DISTR_PATCH) #define nga_smerge_distr_patch_ F77_FUNC_(nga_smerge_distr_patch,NGA_SMERGE_DISTR_PATCH) #define nga_zmerge_distr_patch_ F77_FUNC_(nga_zmerge_distr_patch,NGA_ZMERGE_DISTR_PATCH) #define ga_merge_mirrored_ F77_FUNC_(ga_merge_mirrored, GA_MERGE_MIRRORED) #define ga_cmerge_mirrored_ F77_FUNC_(ga_cmerge_mirrored,GA_CMERGE_MIRRORED) #define ga_dmerge_mirrored_ F77_FUNC_(ga_dmerge_mirrored,GA_DMERGE_MIRRORED) #define ga_imerge_mirrored_ F77_FUNC_(ga_imerge_mirrored,GA_IMERGE_MIRRORED) #define ga_smerge_mirrored_ F77_FUNC_(ga_smerge_mirrored,GA_SMERGE_MIRRORED) #define ga_zmerge_mirrored_ F77_FUNC_(ga_zmerge_mirrored,GA_ZMERGE_MIRRORED) #define nga_merge_mirrored_ F77_FUNC_(nga_merge_mirrored, NGA_MERGE_MIRRORED) #define nga_cmerge_mirrored_ F77_FUNC_(nga_cmerge_mirrored,NGA_CMERGE_MIRRORED) #define nga_dmerge_mirrored_ F77_FUNC_(nga_dmerge_mirrored,NGA_DMERGE_MIRRORED) #define nga_imerge_mirrored_ F77_FUNC_(nga_imerge_mirrored,NGA_IMERGE_MIRRORED) #define nga_smerge_mirrored_ F77_FUNC_(nga_smerge_mirrored,NGA_SMERGE_MIRRORED) #define nga_zmerge_mirrored_ F77_FUNC_(nga_zmerge_mirrored,NGA_ZMERGE_MIRRORED) #define ga_nblock_ F77_FUNC_(ga_nblock, GA_NBLOCK) #define ga_cnblock_ F77_FUNC_(ga_cnblock,GA_CNBLOCK) #define ga_dnblock_ F77_FUNC_(ga_dnblock,GA_DNBLOCK) #define ga_inblock_ F77_FUNC_(ga_inblock,GA_INBLOCK) #define ga_snblock_ F77_FUNC_(ga_snblock,GA_SNBLOCK) #define ga_znblock_ F77_FUNC_(ga_znblock,GA_ZNBLOCK) #define nga_nblock_ F77_FUNC_(nga_nblock, NGA_NBLOCK) #define nga_cnblock_ F77_FUNC_(nga_cnblock,NGA_CNBLOCK) #define nga_dnblock_ F77_FUNC_(nga_dnblock,NGA_DNBLOCK) #define nga_inblock_ F77_FUNC_(nga_inblock,NGA_INBLOCK) #define nga_snblock_ F77_FUNC_(nga_snblock,NGA_SNBLOCK) #define nga_znblock_ F77_FUNC_(nga_znblock,NGA_ZNBLOCK) #define ga_nnodes_ F77_FUNC_(ga_nnodes, GA_NNODES) #define ga_cnnodes_ F77_FUNC_(ga_cnnodes,GA_CNNODES) #define ga_dnnodes_ F77_FUNC_(ga_dnnodes,GA_DNNODES) #define ga_innodes_ F77_FUNC_(ga_innodes,GA_INNODES) #define ga_snnodes_ F77_FUNC_(ga_snnodes,GA_SNNODES) #define ga_znnodes_ F77_FUNC_(ga_znnodes,GA_ZNNODES) #define nga_nnodes_ F77_FUNC_(nga_nnodes, NGA_NNODES) #define nga_cnnodes_ F77_FUNC_(nga_cnnodes,NGA_CNNODES) #define nga_dnnodes_ F77_FUNC_(nga_dnnodes,NGA_DNNODES) #define nga_innodes_ F77_FUNC_(nga_innodes,NGA_INNODES) #define nga_snnodes_ F77_FUNC_(nga_snnodes,NGA_SNNODES) #define nga_znnodes_ F77_FUNC_(nga_znnodes,NGA_ZNNODES) #define ga_nodeid_ F77_FUNC_(ga_nodeid, GA_NODEID) #define ga_cnodeid_ F77_FUNC_(ga_cnodeid,GA_CNODEID) #define ga_dnodeid_ F77_FUNC_(ga_dnodeid,GA_DNODEID) #define ga_inodeid_ F77_FUNC_(ga_inodeid,GA_INODEID) #define ga_snodeid_ F77_FUNC_(ga_snodeid,GA_SNODEID) #define ga_znodeid_ F77_FUNC_(ga_znodeid,GA_ZNODEID) #define nga_nodeid_ F77_FUNC_(nga_nodeid, NGA_NODEID) #define nga_cnodeid_ F77_FUNC_(nga_cnodeid,NGA_CNODEID) #define nga_dnodeid_ F77_FUNC_(nga_dnodeid,NGA_DNODEID) #define nga_inodeid_ F77_FUNC_(nga_inodeid,NGA_INODEID) #define nga_snodeid_ F77_FUNC_(nga_snodeid,NGA_SNODEID) #define nga_znodeid_ F77_FUNC_(nga_znodeid,NGA_ZNODEID) #define ga_pgroup_absolute_id_ F77_FUNC_(ga_pgroup_absolute_id, GA_PGROUP_ABSOLUTE_ID) #define ga_cpgroup_absolute_id_ F77_FUNC_(ga_cpgroup_absolute_id,GA_CPGROUP_ABSOLUTE_ID) #define ga_dpgroup_absolute_id_ F77_FUNC_(ga_dpgroup_absolute_id,GA_DPGROUP_ABSOLUTE_ID) #define ga_ipgroup_absolute_id_ F77_FUNC_(ga_ipgroup_absolute_id,GA_IPGROUP_ABSOLUTE_ID) #define ga_spgroup_absolute_id_ F77_FUNC_(ga_spgroup_absolute_id,GA_SPGROUP_ABSOLUTE_ID) #define ga_zpgroup_absolute_id_ F77_FUNC_(ga_zpgroup_absolute_id,GA_ZPGROUP_ABSOLUTE_ID) #define nga_pgroup_absolute_id_ F77_FUNC_(nga_pgroup_absolute_id, NGA_PGROUP_ABSOLUTE_ID) #define nga_cpgroup_absolute_id_ F77_FUNC_(nga_cpgroup_absolute_id,NGA_CPGROUP_ABSOLUTE_ID) #define nga_dpgroup_absolute_id_ F77_FUNC_(nga_dpgroup_absolute_id,NGA_DPGROUP_ABSOLUTE_ID) #define nga_ipgroup_absolute_id_ F77_FUNC_(nga_ipgroup_absolute_id,NGA_IPGROUP_ABSOLUTE_ID) #define nga_spgroup_absolute_id_ F77_FUNC_(nga_spgroup_absolute_id,NGA_SPGROUP_ABSOLUTE_ID) #define nga_zpgroup_absolute_id_ F77_FUNC_(nga_zpgroup_absolute_id,NGA_ZPGROUP_ABSOLUTE_ID) #define ga_pgroup_create_ F77_FUNC_(ga_pgroup_create, GA_PGROUP_CREATE) #define ga_cpgroup_create_ F77_FUNC_(ga_cpgroup_create,GA_CPGROUP_CREATE) #define ga_dpgroup_create_ F77_FUNC_(ga_dpgroup_create,GA_DPGROUP_CREATE) #define ga_ipgroup_create_ F77_FUNC_(ga_ipgroup_create,GA_IPGROUP_CREATE) #define ga_spgroup_create_ F77_FUNC_(ga_spgroup_create,GA_SPGROUP_CREATE) #define ga_zpgroup_create_ F77_FUNC_(ga_zpgroup_create,GA_ZPGROUP_CREATE) #define nga_pgroup_create_ F77_FUNC_(nga_pgroup_create, NGA_PGROUP_CREATE) #define nga_cpgroup_create_ F77_FUNC_(nga_cpgroup_create,NGA_CPGROUP_CREATE) #define nga_dpgroup_create_ F77_FUNC_(nga_dpgroup_create,NGA_DPGROUP_CREATE) #define nga_ipgroup_create_ F77_FUNC_(nga_ipgroup_create,NGA_IPGROUP_CREATE) #define nga_spgroup_create_ F77_FUNC_(nga_spgroup_create,NGA_SPGROUP_CREATE) #define nga_zpgroup_create_ F77_FUNC_(nga_zpgroup_create,NGA_ZPGROUP_CREATE) #define ga_pgroup_destroy_ F77_FUNC_(ga_pgroup_destroy, GA_PGROUP_DESTROY) #define ga_cpgroup_destroy_ F77_FUNC_(ga_cpgroup_destroy,GA_CPGROUP_DESTROY) #define ga_dpgroup_destroy_ F77_FUNC_(ga_dpgroup_destroy,GA_DPGROUP_DESTROY) #define ga_ipgroup_destroy_ F77_FUNC_(ga_ipgroup_destroy,GA_IPGROUP_DESTROY) #define ga_spgroup_destroy_ F77_FUNC_(ga_spgroup_destroy,GA_SPGROUP_DESTROY) #define ga_zpgroup_destroy_ F77_FUNC_(ga_zpgroup_destroy,GA_ZPGROUP_DESTROY) #define nga_pgroup_destroy_ F77_FUNC_(nga_pgroup_destroy, NGA_PGROUP_DESTROY) #define nga_cpgroup_destroy_ F77_FUNC_(nga_cpgroup_destroy,NGA_CPGROUP_DESTROY) #define nga_dpgroup_destroy_ F77_FUNC_(nga_dpgroup_destroy,NGA_DPGROUP_DESTROY) #define nga_ipgroup_destroy_ F77_FUNC_(nga_ipgroup_destroy,NGA_IPGROUP_DESTROY) #define nga_spgroup_destroy_ F77_FUNC_(nga_spgroup_destroy,NGA_SPGROUP_DESTROY) #define nga_zpgroup_destroy_ F77_FUNC_(nga_zpgroup_destroy,NGA_ZPGROUP_DESTROY) #define ga_pgroup_get_default_ F77_FUNC_(ga_pgroup_get_default, GA_PGROUP_GET_DEFAULT) #define ga_cpgroup_get_default_ F77_FUNC_(ga_cpgroup_get_default,GA_CPGROUP_GET_DEFAULT) #define ga_dpgroup_get_default_ F77_FUNC_(ga_dpgroup_get_default,GA_DPGROUP_GET_DEFAULT) #define ga_ipgroup_get_default_ F77_FUNC_(ga_ipgroup_get_default,GA_IPGROUP_GET_DEFAULT) #define ga_spgroup_get_default_ F77_FUNC_(ga_spgroup_get_default,GA_SPGROUP_GET_DEFAULT) #define ga_zpgroup_get_default_ F77_FUNC_(ga_zpgroup_get_default,GA_ZPGROUP_GET_DEFAULT) #define nga_pgroup_get_default_ F77_FUNC_(nga_pgroup_get_default, NGA_PGROUP_GET_DEFAULT) #define nga_cpgroup_get_default_ F77_FUNC_(nga_cpgroup_get_default,NGA_CPGROUP_GET_DEFAULT) #define nga_dpgroup_get_default_ F77_FUNC_(nga_dpgroup_get_default,NGA_DPGROUP_GET_DEFAULT) #define nga_ipgroup_get_default_ F77_FUNC_(nga_ipgroup_get_default,NGA_IPGROUP_GET_DEFAULT) #define nga_spgroup_get_default_ F77_FUNC_(nga_spgroup_get_default,NGA_SPGROUP_GET_DEFAULT) #define nga_zpgroup_get_default_ F77_FUNC_(nga_zpgroup_get_default,NGA_ZPGROUP_GET_DEFAULT) #define ga_pgroup_get_mirror_ F77_FUNC_(ga_pgroup_get_mirror, GA_PGROUP_GET_MIRROR) #define ga_cpgroup_get_mirror_ F77_FUNC_(ga_cpgroup_get_mirror,GA_CPGROUP_GET_MIRROR) #define ga_dpgroup_get_mirror_ F77_FUNC_(ga_dpgroup_get_mirror,GA_DPGROUP_GET_MIRROR) #define ga_ipgroup_get_mirror_ F77_FUNC_(ga_ipgroup_get_mirror,GA_IPGROUP_GET_MIRROR) #define ga_spgroup_get_mirror_ F77_FUNC_(ga_spgroup_get_mirror,GA_SPGROUP_GET_MIRROR) #define ga_zpgroup_get_mirror_ F77_FUNC_(ga_zpgroup_get_mirror,GA_ZPGROUP_GET_MIRROR) #define nga_pgroup_get_mirror_ F77_FUNC_(nga_pgroup_get_mirror, NGA_PGROUP_GET_MIRROR) #define nga_cpgroup_get_mirror_ F77_FUNC_(nga_cpgroup_get_mirror,NGA_CPGROUP_GET_MIRROR) #define nga_dpgroup_get_mirror_ F77_FUNC_(nga_dpgroup_get_mirror,NGA_DPGROUP_GET_MIRROR) #define nga_ipgroup_get_mirror_ F77_FUNC_(nga_ipgroup_get_mirror,NGA_IPGROUP_GET_MIRROR) #define nga_spgroup_get_mirror_ F77_FUNC_(nga_spgroup_get_mirror,NGA_SPGROUP_GET_MIRROR) #define nga_zpgroup_get_mirror_ F77_FUNC_(nga_zpgroup_get_mirror,NGA_ZPGROUP_GET_MIRROR) #define ga_pgroup_get_world_ F77_FUNC_(ga_pgroup_get_world, GA_PGROUP_GET_WORLD) #define ga_cpgroup_get_world_ F77_FUNC_(ga_cpgroup_get_world,GA_CPGROUP_GET_WORLD) #define ga_dpgroup_get_world_ F77_FUNC_(ga_dpgroup_get_world,GA_DPGROUP_GET_WORLD) #define ga_ipgroup_get_world_ F77_FUNC_(ga_ipgroup_get_world,GA_IPGROUP_GET_WORLD) #define ga_spgroup_get_world_ F77_FUNC_(ga_spgroup_get_world,GA_SPGROUP_GET_WORLD) #define ga_zpgroup_get_world_ F77_FUNC_(ga_zpgroup_get_world,GA_ZPGROUP_GET_WORLD) #define nga_pgroup_get_world_ F77_FUNC_(nga_pgroup_get_world, NGA_PGROUP_GET_WORLD) #define nga_cpgroup_get_world_ F77_FUNC_(nga_cpgroup_get_world,NGA_CPGROUP_GET_WORLD) #define nga_dpgroup_get_world_ F77_FUNC_(nga_dpgroup_get_world,NGA_DPGROUP_GET_WORLD) #define nga_ipgroup_get_world_ F77_FUNC_(nga_ipgroup_get_world,NGA_IPGROUP_GET_WORLD) #define nga_spgroup_get_world_ F77_FUNC_(nga_spgroup_get_world,NGA_SPGROUP_GET_WORLD) #define nga_zpgroup_get_world_ F77_FUNC_(nga_zpgroup_get_world,NGA_ZPGROUP_GET_WORLD) #define ga_pgroup_set_default_ F77_FUNC_(ga_pgroup_set_default, GA_PGROUP_SET_DEFAULT) #define ga_cpgroup_set_default_ F77_FUNC_(ga_cpgroup_set_default,GA_CPGROUP_SET_DEFAULT) #define ga_dpgroup_set_default_ F77_FUNC_(ga_dpgroup_set_default,GA_DPGROUP_SET_DEFAULT) #define ga_ipgroup_set_default_ F77_FUNC_(ga_ipgroup_set_default,GA_IPGROUP_SET_DEFAULT) #define ga_spgroup_set_default_ F77_FUNC_(ga_spgroup_set_default,GA_SPGROUP_SET_DEFAULT) #define ga_zpgroup_set_default_ F77_FUNC_(ga_zpgroup_set_default,GA_ZPGROUP_SET_DEFAULT) #define nga_pgroup_set_default_ F77_FUNC_(nga_pgroup_set_default, NGA_PGROUP_SET_DEFAULT) #define nga_cpgroup_set_default_ F77_FUNC_(nga_cpgroup_set_default,NGA_CPGROUP_SET_DEFAULT) #define nga_dpgroup_set_default_ F77_FUNC_(nga_dpgroup_set_default,NGA_DPGROUP_SET_DEFAULT) #define nga_ipgroup_set_default_ F77_FUNC_(nga_ipgroup_set_default,NGA_IPGROUP_SET_DEFAULT) #define nga_spgroup_set_default_ F77_FUNC_(nga_spgroup_set_default,NGA_SPGROUP_SET_DEFAULT) #define nga_zpgroup_set_default_ F77_FUNC_(nga_zpgroup_set_default,NGA_ZPGROUP_SET_DEFAULT) #define ga_pgroup_split_ F77_FUNC_(ga_pgroup_split, GA_PGROUP_SPLIT) #define ga_cpgroup_split_ F77_FUNC_(ga_cpgroup_split,GA_CPGROUP_SPLIT) #define ga_dpgroup_split_ F77_FUNC_(ga_dpgroup_split,GA_DPGROUP_SPLIT) #define ga_ipgroup_split_ F77_FUNC_(ga_ipgroup_split,GA_IPGROUP_SPLIT) #define ga_spgroup_split_ F77_FUNC_(ga_spgroup_split,GA_SPGROUP_SPLIT) #define ga_zpgroup_split_ F77_FUNC_(ga_zpgroup_split,GA_ZPGROUP_SPLIT) #define nga_pgroup_split_ F77_FUNC_(nga_pgroup_split, NGA_PGROUP_SPLIT) #define nga_cpgroup_split_ F77_FUNC_(nga_cpgroup_split,NGA_CPGROUP_SPLIT) #define nga_dpgroup_split_ F77_FUNC_(nga_dpgroup_split,NGA_DPGROUP_SPLIT) #define nga_ipgroup_split_ F77_FUNC_(nga_ipgroup_split,NGA_IPGROUP_SPLIT) #define nga_spgroup_split_ F77_FUNC_(nga_spgroup_split,NGA_SPGROUP_SPLIT) #define nga_zpgroup_split_ F77_FUNC_(nga_zpgroup_split,NGA_ZPGROUP_SPLIT) #define ga_pgroup_split_irreg_ F77_FUNC_(ga_pgroup_split_irreg, GA_PGROUP_SPLIT_IRREG) #define ga_cpgroup_split_irreg_ F77_FUNC_(ga_cpgroup_split_irreg,GA_CPGROUP_SPLIT_IRREG) #define ga_dpgroup_split_irreg_ F77_FUNC_(ga_dpgroup_split_irreg,GA_DPGROUP_SPLIT_IRREG) #define ga_ipgroup_split_irreg_ F77_FUNC_(ga_ipgroup_split_irreg,GA_IPGROUP_SPLIT_IRREG) #define ga_spgroup_split_irreg_ F77_FUNC_(ga_spgroup_split_irreg,GA_SPGROUP_SPLIT_IRREG) #define ga_zpgroup_split_irreg_ F77_FUNC_(ga_zpgroup_split_irreg,GA_ZPGROUP_SPLIT_IRREG) #define nga_pgroup_split_irreg_ F77_FUNC_(nga_pgroup_split_irreg, NGA_PGROUP_SPLIT_IRREG) #define nga_cpgroup_split_irreg_ F77_FUNC_(nga_cpgroup_split_irreg,NGA_CPGROUP_SPLIT_IRREG) #define nga_dpgroup_split_irreg_ F77_FUNC_(nga_dpgroup_split_irreg,NGA_DPGROUP_SPLIT_IRREG) #define nga_ipgroup_split_irreg_ F77_FUNC_(nga_ipgroup_split_irreg,NGA_IPGROUP_SPLIT_IRREG) #define nga_spgroup_split_irreg_ F77_FUNC_(nga_spgroup_split_irreg,NGA_SPGROUP_SPLIT_IRREG) #define nga_zpgroup_split_irreg_ F77_FUNC_(nga_zpgroup_split_irreg,NGA_ZPGROUP_SPLIT_IRREG) #define ga_pgroup_nnodes_ F77_FUNC_(ga_pgroup_nnodes, GA_PGROUP_NNODES) #define ga_cpgroup_nnodes_ F77_FUNC_(ga_cpgroup_nnodes,GA_CPGROUP_NNODES) #define ga_dpgroup_nnodes_ F77_FUNC_(ga_dpgroup_nnodes,GA_DPGROUP_NNODES) #define ga_ipgroup_nnodes_ F77_FUNC_(ga_ipgroup_nnodes,GA_IPGROUP_NNODES) #define ga_spgroup_nnodes_ F77_FUNC_(ga_spgroup_nnodes,GA_SPGROUP_NNODES) #define ga_zpgroup_nnodes_ F77_FUNC_(ga_zpgroup_nnodes,GA_ZPGROUP_NNODES) #define nga_pgroup_nnodes_ F77_FUNC_(nga_pgroup_nnodes, NGA_PGROUP_NNODES) #define nga_cpgroup_nnodes_ F77_FUNC_(nga_cpgroup_nnodes,NGA_CPGROUP_NNODES) #define nga_dpgroup_nnodes_ F77_FUNC_(nga_dpgroup_nnodes,NGA_DPGROUP_NNODES) #define nga_ipgroup_nnodes_ F77_FUNC_(nga_ipgroup_nnodes,NGA_IPGROUP_NNODES) #define nga_spgroup_nnodes_ F77_FUNC_(nga_spgroup_nnodes,NGA_SPGROUP_NNODES) #define nga_zpgroup_nnodes_ F77_FUNC_(nga_zpgroup_nnodes,NGA_ZPGROUP_NNODES) #define ga_pgroup_nodeid_ F77_FUNC_(ga_pgroup_nodeid, GA_PGROUP_NODEID) #define ga_cpgroup_nodeid_ F77_FUNC_(ga_cpgroup_nodeid,GA_CPGROUP_NODEID) #define ga_dpgroup_nodeid_ F77_FUNC_(ga_dpgroup_nodeid,GA_DPGROUP_NODEID) #define ga_ipgroup_nodeid_ F77_FUNC_(ga_ipgroup_nodeid,GA_IPGROUP_NODEID) #define ga_spgroup_nodeid_ F77_FUNC_(ga_spgroup_nodeid,GA_SPGROUP_NODEID) #define ga_zpgroup_nodeid_ F77_FUNC_(ga_zpgroup_nodeid,GA_ZPGROUP_NODEID) #define nga_pgroup_nodeid_ F77_FUNC_(nga_pgroup_nodeid, NGA_PGROUP_NODEID) #define nga_cpgroup_nodeid_ F77_FUNC_(nga_cpgroup_nodeid,NGA_CPGROUP_NODEID) #define nga_dpgroup_nodeid_ F77_FUNC_(nga_dpgroup_nodeid,NGA_DPGROUP_NODEID) #define nga_ipgroup_nodeid_ F77_FUNC_(nga_ipgroup_nodeid,NGA_IPGROUP_NODEID) #define nga_spgroup_nodeid_ F77_FUNC_(nga_spgroup_nodeid,NGA_SPGROUP_NODEID) #define nga_zpgroup_nodeid_ F77_FUNC_(nga_zpgroup_nodeid,NGA_ZPGROUP_NODEID) #define ga_proc_topology_ F77_FUNC_(ga_proc_topology, GA_PROC_TOPOLOGY) #define ga_cproc_topology_ F77_FUNC_(ga_cproc_topology,GA_CPROC_TOPOLOGY) #define ga_dproc_topology_ F77_FUNC_(ga_dproc_topology,GA_DPROC_TOPOLOGY) #define ga_iproc_topology_ F77_FUNC_(ga_iproc_topology,GA_IPROC_TOPOLOGY) #define ga_sproc_topology_ F77_FUNC_(ga_sproc_topology,GA_SPROC_TOPOLOGY) #define ga_zproc_topology_ F77_FUNC_(ga_zproc_topology,GA_ZPROC_TOPOLOGY) #define nga_proc_topology_ F77_FUNC_(nga_proc_topology, NGA_PROC_TOPOLOGY) #define nga_cproc_topology_ F77_FUNC_(nga_cproc_topology,NGA_CPROC_TOPOLOGY) #define nga_dproc_topology_ F77_FUNC_(nga_dproc_topology,NGA_DPROC_TOPOLOGY) #define nga_iproc_topology_ F77_FUNC_(nga_iproc_topology,NGA_IPROC_TOPOLOGY) #define nga_sproc_topology_ F77_FUNC_(nga_sproc_topology,NGA_SPROC_TOPOLOGY) #define nga_zproc_topology_ F77_FUNC_(nga_zproc_topology,NGA_ZPROC_TOPOLOGY) #define ga_randomize_ F77_FUNC_(ga_randomize, GA_RANDOMIZE) #define ga_crandomize_ F77_FUNC_(ga_crandomize,GA_CRANDOMIZE) #define ga_drandomize_ F77_FUNC_(ga_drandomize,GA_DRANDOMIZE) #define ga_irandomize_ F77_FUNC_(ga_irandomize,GA_IRANDOMIZE) #define ga_srandomize_ F77_FUNC_(ga_srandomize,GA_SRANDOMIZE) #define ga_zrandomize_ F77_FUNC_(ga_zrandomize,GA_ZRANDOMIZE) #define nga_randomize_ F77_FUNC_(nga_randomize, NGA_RANDOMIZE) #define nga_crandomize_ F77_FUNC_(nga_crandomize,NGA_CRANDOMIZE) #define nga_drandomize_ F77_FUNC_(nga_drandomize,NGA_DRANDOMIZE) #define nga_irandomize_ F77_FUNC_(nga_irandomize,NGA_IRANDOMIZE) #define nga_srandomize_ F77_FUNC_(nga_srandomize,NGA_SRANDOMIZE) #define nga_zrandomize_ F77_FUNC_(nga_zrandomize,NGA_ZRANDOMIZE) #define ga_get_pgroup_ F77_FUNC_(ga_get_pgroup, GA_GET_PGROUP) #define ga_cget_pgroup_ F77_FUNC_(ga_cget_pgroup,GA_CGET_PGROUP) #define ga_dget_pgroup_ F77_FUNC_(ga_dget_pgroup,GA_DGET_PGROUP) #define ga_iget_pgroup_ F77_FUNC_(ga_iget_pgroup,GA_IGET_PGROUP) #define ga_sget_pgroup_ F77_FUNC_(ga_sget_pgroup,GA_SGET_PGROUP) #define ga_zget_pgroup_ F77_FUNC_(ga_zget_pgroup,GA_ZGET_PGROUP) #define nga_get_pgroup_ F77_FUNC_(nga_get_pgroup, NGA_GET_PGROUP) #define nga_cget_pgroup_ F77_FUNC_(nga_cget_pgroup,NGA_CGET_PGROUP) #define nga_dget_pgroup_ F77_FUNC_(nga_dget_pgroup,NGA_DGET_PGROUP) #define nga_iget_pgroup_ F77_FUNC_(nga_iget_pgroup,NGA_IGET_PGROUP) #define nga_sget_pgroup_ F77_FUNC_(nga_sget_pgroup,NGA_SGET_PGROUP) #define nga_zget_pgroup_ F77_FUNC_(nga_zget_pgroup,NGA_ZGET_PGROUP) #define ga_get_pgroup_size_ F77_FUNC_(ga_get_pgroup_size, GA_GET_PGROUP_SIZE) #define ga_cget_pgroup_size_ F77_FUNC_(ga_cget_pgroup_size,GA_CGET_PGROUP_SIZE) #define ga_dget_pgroup_size_ F77_FUNC_(ga_dget_pgroup_size,GA_DGET_PGROUP_SIZE) #define ga_iget_pgroup_size_ F77_FUNC_(ga_iget_pgroup_size,GA_IGET_PGROUP_SIZE) #define ga_sget_pgroup_size_ F77_FUNC_(ga_sget_pgroup_size,GA_SGET_PGROUP_SIZE) #define ga_zget_pgroup_size_ F77_FUNC_(ga_zget_pgroup_size,GA_ZGET_PGROUP_SIZE) #define nga_get_pgroup_size_ F77_FUNC_(nga_get_pgroup_size, NGA_GET_PGROUP_SIZE) #define nga_cget_pgroup_size_ F77_FUNC_(nga_cget_pgroup_size,NGA_CGET_PGROUP_SIZE) #define nga_dget_pgroup_size_ F77_FUNC_(nga_dget_pgroup_size,NGA_DGET_PGROUP_SIZE) #define nga_iget_pgroup_size_ F77_FUNC_(nga_iget_pgroup_size,NGA_IGET_PGROUP_SIZE) #define nga_sget_pgroup_size_ F77_FUNC_(nga_sget_pgroup_size,NGA_SGET_PGROUP_SIZE) #define nga_zget_pgroup_size_ F77_FUNC_(nga_zget_pgroup_size,NGA_ZGET_PGROUP_SIZE) #define ga_set_array_name_ F77_FUNC_(ga_set_array_name, GA_SET_ARRAY_NAME) #define ga_cset_array_name_ F77_FUNC_(ga_cset_array_name,GA_CSET_ARRAY_NAME) #define ga_dset_array_name_ F77_FUNC_(ga_dset_array_name,GA_DSET_ARRAY_NAME) #define ga_iset_array_name_ F77_FUNC_(ga_iset_array_name,GA_ISET_ARRAY_NAME) #define ga_sset_array_name_ F77_FUNC_(ga_sset_array_name,GA_SSET_ARRAY_NAME) #define ga_zset_array_name_ F77_FUNC_(ga_zset_array_name,GA_ZSET_ARRAY_NAME) #define nga_set_array_name_ F77_FUNC_(nga_set_array_name, NGA_SET_ARRAY_NAME) #define nga_cset_array_name_ F77_FUNC_(nga_cset_array_name,NGA_CSET_ARRAY_NAME) #define nga_dset_array_name_ F77_FUNC_(nga_dset_array_name,NGA_DSET_ARRAY_NAME) #define nga_iset_array_name_ F77_FUNC_(nga_iset_array_name,NGA_ISET_ARRAY_NAME) #define nga_sset_array_name_ F77_FUNC_(nga_sset_array_name,NGA_SSET_ARRAY_NAME) #define nga_zset_array_name_ F77_FUNC_(nga_zset_array_name,NGA_ZSET_ARRAY_NAME) #define ga_set_block_cyclic_ F77_FUNC_(ga_set_block_cyclic, GA_SET_BLOCK_CYCLIC) #define ga_cset_block_cyclic_ F77_FUNC_(ga_cset_block_cyclic,GA_CSET_BLOCK_CYCLIC) #define ga_dset_block_cyclic_ F77_FUNC_(ga_dset_block_cyclic,GA_DSET_BLOCK_CYCLIC) #define ga_iset_block_cyclic_ F77_FUNC_(ga_iset_block_cyclic,GA_ISET_BLOCK_CYCLIC) #define ga_sset_block_cyclic_ F77_FUNC_(ga_sset_block_cyclic,GA_SSET_BLOCK_CYCLIC) #define ga_zset_block_cyclic_ F77_FUNC_(ga_zset_block_cyclic,GA_ZSET_BLOCK_CYCLIC) #define nga_set_block_cyclic_ F77_FUNC_(nga_set_block_cyclic, NGA_SET_BLOCK_CYCLIC) #define nga_cset_block_cyclic_ F77_FUNC_(nga_cset_block_cyclic,NGA_CSET_BLOCK_CYCLIC) #define nga_dset_block_cyclic_ F77_FUNC_(nga_dset_block_cyclic,NGA_DSET_BLOCK_CYCLIC) #define nga_iset_block_cyclic_ F77_FUNC_(nga_iset_block_cyclic,NGA_ISET_BLOCK_CYCLIC) #define nga_sset_block_cyclic_ F77_FUNC_(nga_sset_block_cyclic,NGA_SSET_BLOCK_CYCLIC) #define nga_zset_block_cyclic_ F77_FUNC_(nga_zset_block_cyclic,NGA_ZSET_BLOCK_CYCLIC) #define ga_set_block_cyclic_proc_grid_ F77_FUNC_(ga_set_block_cyclic_proc_grid, GA_SET_BLOCK_CYCLIC_PROC_GRID) #define ga_cset_block_cyclic_proc_grid_ F77_FUNC_(ga_cset_block_cyclic_proc_grid,GA_CSET_BLOCK_CYCLIC_PROC_GRID) #define ga_dset_block_cyclic_proc_grid_ F77_FUNC_(ga_dset_block_cyclic_proc_grid,GA_DSET_BLOCK_CYCLIC_PROC_GRID) #define ga_iset_block_cyclic_proc_grid_ F77_FUNC_(ga_iset_block_cyclic_proc_grid,GA_ISET_BLOCK_CYCLIC_PROC_GRID) #define ga_sset_block_cyclic_proc_grid_ F77_FUNC_(ga_sset_block_cyclic_proc_grid,GA_SSET_BLOCK_CYCLIC_PROC_GRID) #define ga_zset_block_cyclic_proc_grid_ F77_FUNC_(ga_zset_block_cyclic_proc_grid,GA_ZSET_BLOCK_CYCLIC_PROC_GRID) #define nga_set_block_cyclic_proc_grid_ F77_FUNC_(nga_set_block_cyclic_proc_grid, NGA_SET_BLOCK_CYCLIC_PROC_GRID) #define nga_cset_block_cyclic_proc_grid_ F77_FUNC_(nga_cset_block_cyclic_proc_grid,NGA_CSET_BLOCK_CYCLIC_PROC_GRID) #define nga_dset_block_cyclic_proc_grid_ F77_FUNC_(nga_dset_block_cyclic_proc_grid,NGA_DSET_BLOCK_CYCLIC_PROC_GRID) #define nga_iset_block_cyclic_proc_grid_ F77_FUNC_(nga_iset_block_cyclic_proc_grid,NGA_ISET_BLOCK_CYCLIC_PROC_GRID) #define nga_sset_block_cyclic_proc_grid_ F77_FUNC_(nga_sset_block_cyclic_proc_grid,NGA_SSET_BLOCK_CYCLIC_PROC_GRID) #define nga_zset_block_cyclic_proc_grid_ F77_FUNC_(nga_zset_block_cyclic_proc_grid,NGA_ZSET_BLOCK_CYCLIC_PROC_GRID) #define ga_set_chunk_ F77_FUNC_(ga_set_chunk, GA_SET_CHUNK) #define ga_cset_chunk_ F77_FUNC_(ga_cset_chunk,GA_CSET_CHUNK) #define ga_dset_chunk_ F77_FUNC_(ga_dset_chunk,GA_DSET_CHUNK) #define ga_iset_chunk_ F77_FUNC_(ga_iset_chunk,GA_ISET_CHUNK) #define ga_sset_chunk_ F77_FUNC_(ga_sset_chunk,GA_SSET_CHUNK) #define ga_zset_chunk_ F77_FUNC_(ga_zset_chunk,GA_ZSET_CHUNK) #define nga_set_chunk_ F77_FUNC_(nga_set_chunk, NGA_SET_CHUNK) #define nga_cset_chunk_ F77_FUNC_(nga_cset_chunk,NGA_CSET_CHUNK) #define nga_dset_chunk_ F77_FUNC_(nga_dset_chunk,NGA_DSET_CHUNK) #define nga_iset_chunk_ F77_FUNC_(nga_iset_chunk,NGA_ISET_CHUNK) #define nga_sset_chunk_ F77_FUNC_(nga_sset_chunk,NGA_SSET_CHUNK) #define nga_zset_chunk_ F77_FUNC_(nga_zset_chunk,NGA_ZSET_CHUNK) #define ga_set_data_ F77_FUNC_(ga_set_data, GA_SET_DATA) #define ga_cset_data_ F77_FUNC_(ga_cset_data,GA_CSET_DATA) #define ga_dset_data_ F77_FUNC_(ga_dset_data,GA_DSET_DATA) #define ga_iset_data_ F77_FUNC_(ga_iset_data,GA_ISET_DATA) #define ga_sset_data_ F77_FUNC_(ga_sset_data,GA_SSET_DATA) #define ga_zset_data_ F77_FUNC_(ga_zset_data,GA_ZSET_DATA) #define nga_set_data_ F77_FUNC_(nga_set_data, NGA_SET_DATA) #define nga_cset_data_ F77_FUNC_(nga_cset_data,NGA_CSET_DATA) #define nga_dset_data_ F77_FUNC_(nga_dset_data,NGA_DSET_DATA) #define nga_iset_data_ F77_FUNC_(nga_iset_data,NGA_ISET_DATA) #define nga_sset_data_ F77_FUNC_(nga_sset_data,NGA_SSET_DATA) #define nga_zset_data_ F77_FUNC_(nga_zset_data,NGA_ZSET_DATA) #define ga_set_debug_ F77_FUNC_(ga_set_debug, GA_SET_DEBUG) #define ga_cset_debug_ F77_FUNC_(ga_cset_debug,GA_CSET_DEBUG) #define ga_dset_debug_ F77_FUNC_(ga_dset_debug,GA_DSET_DEBUG) #define ga_iset_debug_ F77_FUNC_(ga_iset_debug,GA_ISET_DEBUG) #define ga_sset_debug_ F77_FUNC_(ga_sset_debug,GA_SSET_DEBUG) #define ga_zset_debug_ F77_FUNC_(ga_zset_debug,GA_ZSET_DEBUG) #define nga_set_debug_ F77_FUNC_(nga_set_debug, NGA_SET_DEBUG) #define nga_cset_debug_ F77_FUNC_(nga_cset_debug,NGA_CSET_DEBUG) #define nga_dset_debug_ F77_FUNC_(nga_dset_debug,NGA_DSET_DEBUG) #define nga_iset_debug_ F77_FUNC_(nga_iset_debug,NGA_ISET_DEBUG) #define nga_sset_debug_ F77_FUNC_(nga_sset_debug,NGA_SSET_DEBUG) #define nga_zset_debug_ F77_FUNC_(nga_zset_debug,NGA_ZSET_DEBUG) #define ga_set_ghosts_ F77_FUNC_(ga_set_ghosts, GA_SET_GHOSTS) #define ga_cset_ghosts_ F77_FUNC_(ga_cset_ghosts,GA_CSET_GHOSTS) #define ga_dset_ghosts_ F77_FUNC_(ga_dset_ghosts,GA_DSET_GHOSTS) #define ga_iset_ghosts_ F77_FUNC_(ga_iset_ghosts,GA_ISET_GHOSTS) #define ga_sset_ghosts_ F77_FUNC_(ga_sset_ghosts,GA_SSET_GHOSTS) #define ga_zset_ghosts_ F77_FUNC_(ga_zset_ghosts,GA_ZSET_GHOSTS) #define nga_set_ghosts_ F77_FUNC_(nga_set_ghosts, NGA_SET_GHOSTS) #define nga_cset_ghosts_ F77_FUNC_(nga_cset_ghosts,NGA_CSET_GHOSTS) #define nga_dset_ghosts_ F77_FUNC_(nga_dset_ghosts,NGA_DSET_GHOSTS) #define nga_iset_ghosts_ F77_FUNC_(nga_iset_ghosts,NGA_ISET_GHOSTS) #define nga_sset_ghosts_ F77_FUNC_(nga_sset_ghosts,NGA_SSET_GHOSTS) #define nga_zset_ghosts_ F77_FUNC_(nga_zset_ghosts,NGA_ZSET_GHOSTS) #define ga_set_irreg_distr_ F77_FUNC_(ga_set_irreg_distr, GA_SET_IRREG_DISTR) #define ga_cset_irreg_distr_ F77_FUNC_(ga_cset_irreg_distr,GA_CSET_IRREG_DISTR) #define ga_dset_irreg_distr_ F77_FUNC_(ga_dset_irreg_distr,GA_DSET_IRREG_DISTR) #define ga_iset_irreg_distr_ F77_FUNC_(ga_iset_irreg_distr,GA_ISET_IRREG_DISTR) #define ga_sset_irreg_distr_ F77_FUNC_(ga_sset_irreg_distr,GA_SSET_IRREG_DISTR) #define ga_zset_irreg_distr_ F77_FUNC_(ga_zset_irreg_distr,GA_ZSET_IRREG_DISTR) #define nga_set_irreg_distr_ F77_FUNC_(nga_set_irreg_distr, NGA_SET_IRREG_DISTR) #define nga_cset_irreg_distr_ F77_FUNC_(nga_cset_irreg_distr,NGA_CSET_IRREG_DISTR) #define nga_dset_irreg_distr_ F77_FUNC_(nga_dset_irreg_distr,NGA_DSET_IRREG_DISTR) #define nga_iset_irreg_distr_ F77_FUNC_(nga_iset_irreg_distr,NGA_ISET_IRREG_DISTR) #define nga_sset_irreg_distr_ F77_FUNC_(nga_sset_irreg_distr,NGA_SSET_IRREG_DISTR) #define nga_zset_irreg_distr_ F77_FUNC_(nga_zset_irreg_distr,NGA_ZSET_IRREG_DISTR) #define ga_set_irreg_flag_ F77_FUNC_(ga_set_irreg_flag, GA_SET_IRREG_FLAG) #define ga_cset_irreg_flag_ F77_FUNC_(ga_cset_irreg_flag,GA_CSET_IRREG_FLAG) #define ga_dset_irreg_flag_ F77_FUNC_(ga_dset_irreg_flag,GA_DSET_IRREG_FLAG) #define ga_iset_irreg_flag_ F77_FUNC_(ga_iset_irreg_flag,GA_ISET_IRREG_FLAG) #define ga_sset_irreg_flag_ F77_FUNC_(ga_sset_irreg_flag,GA_SSET_IRREG_FLAG) #define ga_zset_irreg_flag_ F77_FUNC_(ga_zset_irreg_flag,GA_ZSET_IRREG_FLAG) #define nga_set_irreg_flag_ F77_FUNC_(nga_set_irreg_flag, NGA_SET_IRREG_FLAG) #define nga_cset_irreg_flag_ F77_FUNC_(nga_cset_irreg_flag,NGA_CSET_IRREG_FLAG) #define nga_dset_irreg_flag_ F77_FUNC_(nga_dset_irreg_flag,NGA_DSET_IRREG_FLAG) #define nga_iset_irreg_flag_ F77_FUNC_(nga_iset_irreg_flag,NGA_ISET_IRREG_FLAG) #define nga_sset_irreg_flag_ F77_FUNC_(nga_sset_irreg_flag,NGA_SSET_IRREG_FLAG) #define nga_zset_irreg_flag_ F77_FUNC_(nga_zset_irreg_flag,NGA_ZSET_IRREG_FLAG) #define ga_set_memory_limit_ F77_FUNC_(ga_set_memory_limit, GA_SET_MEMORY_LIMIT) #define ga_cset_memory_limit_ F77_FUNC_(ga_cset_memory_limit,GA_CSET_MEMORY_LIMIT) #define ga_dset_memory_limit_ F77_FUNC_(ga_dset_memory_limit,GA_DSET_MEMORY_LIMIT) #define ga_iset_memory_limit_ F77_FUNC_(ga_iset_memory_limit,GA_ISET_MEMORY_LIMIT) #define ga_sset_memory_limit_ F77_FUNC_(ga_sset_memory_limit,GA_SSET_MEMORY_LIMIT) #define ga_zset_memory_limit_ F77_FUNC_(ga_zset_memory_limit,GA_ZSET_MEMORY_LIMIT) #define nga_set_memory_limit_ F77_FUNC_(nga_set_memory_limit, NGA_SET_MEMORY_LIMIT) #define nga_cset_memory_limit_ F77_FUNC_(nga_cset_memory_limit,NGA_CSET_MEMORY_LIMIT) #define nga_dset_memory_limit_ F77_FUNC_(nga_dset_memory_limit,NGA_DSET_MEMORY_LIMIT) #define nga_iset_memory_limit_ F77_FUNC_(nga_iset_memory_limit,NGA_ISET_MEMORY_LIMIT) #define nga_sset_memory_limit_ F77_FUNC_(nga_sset_memory_limit,NGA_SSET_MEMORY_LIMIT) #define nga_zset_memory_limit_ F77_FUNC_(nga_zset_memory_limit,NGA_ZSET_MEMORY_LIMIT) #define ga_set_pgroup_ F77_FUNC_(ga_set_pgroup, GA_SET_PGROUP) #define ga_cset_pgroup_ F77_FUNC_(ga_cset_pgroup,GA_CSET_PGROUP) #define ga_dset_pgroup_ F77_FUNC_(ga_dset_pgroup,GA_DSET_PGROUP) #define ga_iset_pgroup_ F77_FUNC_(ga_iset_pgroup,GA_ISET_PGROUP) #define ga_sset_pgroup_ F77_FUNC_(ga_sset_pgroup,GA_SSET_PGROUP) #define ga_zset_pgroup_ F77_FUNC_(ga_zset_pgroup,GA_ZSET_PGROUP) #define nga_set_pgroup_ F77_FUNC_(nga_set_pgroup, NGA_SET_PGROUP) #define nga_cset_pgroup_ F77_FUNC_(nga_cset_pgroup,NGA_CSET_PGROUP) #define nga_dset_pgroup_ F77_FUNC_(nga_dset_pgroup,NGA_DSET_PGROUP) #define nga_iset_pgroup_ F77_FUNC_(nga_iset_pgroup,NGA_ISET_PGROUP) #define nga_sset_pgroup_ F77_FUNC_(nga_sset_pgroup,NGA_SSET_PGROUP) #define nga_zset_pgroup_ F77_FUNC_(nga_zset_pgroup,NGA_ZSET_PGROUP) #define ga_set_restricted_ F77_FUNC_(ga_set_restricted, GA_SET_RESTRICTED) #define ga_cset_restricted_ F77_FUNC_(ga_cset_restricted,GA_CSET_RESTRICTED) #define ga_dset_restricted_ F77_FUNC_(ga_dset_restricted,GA_DSET_RESTRICTED) #define ga_iset_restricted_ F77_FUNC_(ga_iset_restricted,GA_ISET_RESTRICTED) #define ga_sset_restricted_ F77_FUNC_(ga_sset_restricted,GA_SSET_RESTRICTED) #define ga_zset_restricted_ F77_FUNC_(ga_zset_restricted,GA_ZSET_RESTRICTED) #define nga_set_restricted_ F77_FUNC_(nga_set_restricted, NGA_SET_RESTRICTED) #define nga_cset_restricted_ F77_FUNC_(nga_cset_restricted,NGA_CSET_RESTRICTED) #define nga_dset_restricted_ F77_FUNC_(nga_dset_restricted,NGA_DSET_RESTRICTED) #define nga_iset_restricted_ F77_FUNC_(nga_iset_restricted,NGA_ISET_RESTRICTED) #define nga_sset_restricted_ F77_FUNC_(nga_sset_restricted,NGA_SSET_RESTRICTED) #define nga_zset_restricted_ F77_FUNC_(nga_zset_restricted,NGA_ZSET_RESTRICTED) #define ga_set_restricted_range_ F77_FUNC_(ga_set_restricted_range, GA_SET_RESTRICTED_RANGE) #define ga_cset_restricted_range_ F77_FUNC_(ga_cset_restricted_range,GA_CSET_RESTRICTED_RANGE) #define ga_dset_restricted_range_ F77_FUNC_(ga_dset_restricted_range,GA_DSET_RESTRICTED_RANGE) #define ga_iset_restricted_range_ F77_FUNC_(ga_iset_restricted_range,GA_ISET_RESTRICTED_RANGE) #define ga_sset_restricted_range_ F77_FUNC_(ga_sset_restricted_range,GA_SSET_RESTRICTED_RANGE) #define ga_zset_restricted_range_ F77_FUNC_(ga_zset_restricted_range,GA_ZSET_RESTRICTED_RANGE) #define nga_set_restricted_range_ F77_FUNC_(nga_set_restricted_range, NGA_SET_RESTRICTED_RANGE) #define nga_cset_restricted_range_ F77_FUNC_(nga_cset_restricted_range,NGA_CSET_RESTRICTED_RANGE) #define nga_dset_restricted_range_ F77_FUNC_(nga_dset_restricted_range,NGA_DSET_RESTRICTED_RANGE) #define nga_iset_restricted_range_ F77_FUNC_(nga_iset_restricted_range,NGA_ISET_RESTRICTED_RANGE) #define nga_sset_restricted_range_ F77_FUNC_(nga_sset_restricted_range,NGA_SSET_RESTRICTED_RANGE) #define nga_zset_restricted_range_ F77_FUNC_(nga_zset_restricted_range,NGA_ZSET_RESTRICTED_RANGE) #define ga_terminate_ F77_FUNC_(ga_terminate, GA_TERMINATE) #define ga_cterminate_ F77_FUNC_(ga_cterminate,GA_CTERMINATE) #define ga_dterminate_ F77_FUNC_(ga_dterminate,GA_DTERMINATE) #define ga_iterminate_ F77_FUNC_(ga_iterminate,GA_ITERMINATE) #define ga_sterminate_ F77_FUNC_(ga_sterminate,GA_STERMINATE) #define ga_zterminate_ F77_FUNC_(ga_zterminate,GA_ZTERMINATE) #define nga_terminate_ F77_FUNC_(nga_terminate, NGA_TERMINATE) #define nga_cterminate_ F77_FUNC_(nga_cterminate,NGA_CTERMINATE) #define nga_dterminate_ F77_FUNC_(nga_dterminate,NGA_DTERMINATE) #define nga_iterminate_ F77_FUNC_(nga_iterminate,NGA_ITERMINATE) #define nga_sterminate_ F77_FUNC_(nga_sterminate,NGA_STERMINATE) #define nga_zterminate_ F77_FUNC_(nga_zterminate,NGA_ZTERMINATE) #define ga_total_blocks_ F77_FUNC_(ga_total_blocks, GA_TOTAL_BLOCKS) #define ga_ctotal_blocks_ F77_FUNC_(ga_ctotal_blocks,GA_CTOTAL_BLOCKS) #define ga_dtotal_blocks_ F77_FUNC_(ga_dtotal_blocks,GA_DTOTAL_BLOCKS) #define ga_itotal_blocks_ F77_FUNC_(ga_itotal_blocks,GA_ITOTAL_BLOCKS) #define ga_stotal_blocks_ F77_FUNC_(ga_stotal_blocks,GA_STOTAL_BLOCKS) #define ga_ztotal_blocks_ F77_FUNC_(ga_ztotal_blocks,GA_ZTOTAL_BLOCKS) #define nga_total_blocks_ F77_FUNC_(nga_total_blocks, NGA_TOTAL_BLOCKS) #define nga_ctotal_blocks_ F77_FUNC_(nga_ctotal_blocks,NGA_CTOTAL_BLOCKS) #define nga_dtotal_blocks_ F77_FUNC_(nga_dtotal_blocks,NGA_DTOTAL_BLOCKS) #define nga_itotal_blocks_ F77_FUNC_(nga_itotal_blocks,NGA_ITOTAL_BLOCKS) #define nga_stotal_blocks_ F77_FUNC_(nga_stotal_blocks,NGA_STOTAL_BLOCKS) #define nga_ztotal_blocks_ F77_FUNC_(nga_ztotal_blocks,NGA_ZTOTAL_BLOCKS) #define ga_unlock_ F77_FUNC_(ga_unlock, GA_UNLOCK) #define ga_cunlock_ F77_FUNC_(ga_cunlock,GA_CUNLOCK) #define ga_dunlock_ F77_FUNC_(ga_dunlock,GA_DUNLOCK) #define ga_iunlock_ F77_FUNC_(ga_iunlock,GA_IUNLOCK) #define ga_sunlock_ F77_FUNC_(ga_sunlock,GA_SUNLOCK) #define ga_zunlock_ F77_FUNC_(ga_zunlock,GA_ZUNLOCK) #define nga_unlock_ F77_FUNC_(nga_unlock, NGA_UNLOCK) #define nga_cunlock_ F77_FUNC_(nga_cunlock,NGA_CUNLOCK) #define nga_dunlock_ F77_FUNC_(nga_dunlock,NGA_DUNLOCK) #define nga_iunlock_ F77_FUNC_(nga_iunlock,NGA_IUNLOCK) #define nga_sunlock_ F77_FUNC_(nga_sunlock,NGA_SUNLOCK) #define nga_zunlock_ F77_FUNC_(nga_zunlock,NGA_ZUNLOCK) #define ga_uses_ma_ F77_FUNC_(ga_uses_ma, GA_USES_MA) #define ga_cuses_ma_ F77_FUNC_(ga_cuses_ma,GA_CUSES_MA) #define ga_duses_ma_ F77_FUNC_(ga_duses_ma,GA_DUSES_MA) #define ga_iuses_ma_ F77_FUNC_(ga_iuses_ma,GA_IUSES_MA) #define ga_suses_ma_ F77_FUNC_(ga_suses_ma,GA_SUSES_MA) #define ga_zuses_ma_ F77_FUNC_(ga_zuses_ma,GA_ZUSES_MA) #define nga_uses_ma_ F77_FUNC_(nga_uses_ma, NGA_USES_MA) #define nga_cuses_ma_ F77_FUNC_(nga_cuses_ma,NGA_CUSES_MA) #define nga_duses_ma_ F77_FUNC_(nga_duses_ma,NGA_DUSES_MA) #define nga_iuses_ma_ F77_FUNC_(nga_iuses_ma,NGA_IUSES_MA) #define nga_suses_ma_ F77_FUNC_(nga_suses_ma,NGA_SUSES_MA) #define nga_zuses_ma_ F77_FUNC_(nga_zuses_ma,NGA_ZUSES_MA) #define ga_uses_proc_grid_ F77_FUNC_(ga_uses_proc_grid, GA_USES_PROC_GRID) #define ga_cuses_proc_grid_ F77_FUNC_(ga_cuses_proc_grid,GA_CUSES_PROC_GRID) #define ga_duses_proc_grid_ F77_FUNC_(ga_duses_proc_grid,GA_DUSES_PROC_GRID) #define ga_iuses_proc_grid_ F77_FUNC_(ga_iuses_proc_grid,GA_IUSES_PROC_GRID) #define ga_suses_proc_grid_ F77_FUNC_(ga_suses_proc_grid,GA_SUSES_PROC_GRID) #define ga_zuses_proc_grid_ F77_FUNC_(ga_zuses_proc_grid,GA_ZUSES_PROC_GRID) #define nga_uses_proc_grid_ F77_FUNC_(nga_uses_proc_grid, NGA_USES_PROC_GRID) #define nga_cuses_proc_grid_ F77_FUNC_(nga_cuses_proc_grid,NGA_CUSES_PROC_GRID) #define nga_duses_proc_grid_ F77_FUNC_(nga_duses_proc_grid,NGA_DUSES_PROC_GRID) #define nga_iuses_proc_grid_ F77_FUNC_(nga_iuses_proc_grid,NGA_IUSES_PROC_GRID) #define nga_suses_proc_grid_ F77_FUNC_(nga_suses_proc_grid,NGA_SUSES_PROC_GRID) #define nga_zuses_proc_grid_ F77_FUNC_(nga_zuses_proc_grid,NGA_ZUSES_PROC_GRID) #define ga_valid_handle_ F77_FUNC_(ga_valid_handle, GA_VALID_HANDLE) #define ga_cvalid_handle_ F77_FUNC_(ga_cvalid_handle,GA_CVALID_HANDLE) #define ga_dvalid_handle_ F77_FUNC_(ga_dvalid_handle,GA_DVALID_HANDLE) #define ga_ivalid_handle_ F77_FUNC_(ga_ivalid_handle,GA_IVALID_HANDLE) #define ga_svalid_handle_ F77_FUNC_(ga_svalid_handle,GA_SVALID_HANDLE) #define ga_zvalid_handle_ F77_FUNC_(ga_zvalid_handle,GA_ZVALID_HANDLE) #define nga_valid_handle_ F77_FUNC_(nga_valid_handle, NGA_VALID_HANDLE) #define nga_cvalid_handle_ F77_FUNC_(nga_cvalid_handle,NGA_CVALID_HANDLE) #define nga_dvalid_handle_ F77_FUNC_(nga_dvalid_handle,NGA_DVALID_HANDLE) #define nga_ivalid_handle_ F77_FUNC_(nga_ivalid_handle,NGA_IVALID_HANDLE) #define nga_svalid_handle_ F77_FUNC_(nga_svalid_handle,NGA_SVALID_HANDLE) #define nga_zvalid_handle_ F77_FUNC_(nga_zvalid_handle,NGA_ZVALID_HANDLE) #define ga_verify_handle_ F77_FUNC_(ga_verify_handle, GA_VERIFY_HANDLE) #define ga_cverify_handle_ F77_FUNC_(ga_cverify_handle,GA_CVERIFY_HANDLE) #define ga_dverify_handle_ F77_FUNC_(ga_dverify_handle,GA_DVERIFY_HANDLE) #define ga_iverify_handle_ F77_FUNC_(ga_iverify_handle,GA_IVERIFY_HANDLE) #define ga_sverify_handle_ F77_FUNC_(ga_sverify_handle,GA_SVERIFY_HANDLE) #define ga_zverify_handle_ F77_FUNC_(ga_zverify_handle,GA_ZVERIFY_HANDLE) #define nga_verify_handle_ F77_FUNC_(nga_verify_handle, NGA_VERIFY_HANDLE) #define nga_cverify_handle_ F77_FUNC_(nga_cverify_handle,NGA_CVERIFY_HANDLE) #define nga_dverify_handle_ F77_FUNC_(nga_dverify_handle,NGA_DVERIFY_HANDLE) #define nga_iverify_handle_ F77_FUNC_(nga_iverify_handle,NGA_IVERIFY_HANDLE) #define nga_sverify_handle_ F77_FUNC_(nga_sverify_handle,NGA_SVERIFY_HANDLE) #define nga_zverify_handle_ F77_FUNC_(nga_zverify_handle,NGA_ZVERIFY_HANDLE) #define ga_check_handle_ F77_FUNC_(ga_check_handle, GA_CHECK_HANDLE) #define ga_ccheck_handle_ F77_FUNC_(ga_ccheck_handle,GA_CCHECK_HANDLE) #define ga_dcheck_handle_ F77_FUNC_(ga_dcheck_handle,GA_DCHECK_HANDLE) #define ga_icheck_handle_ F77_FUNC_(ga_icheck_handle,GA_ICHECK_HANDLE) #define ga_scheck_handle_ F77_FUNC_(ga_scheck_handle,GA_SCHECK_HANDLE) #define ga_zcheck_handle_ F77_FUNC_(ga_zcheck_handle,GA_ZCHECK_HANDLE) #define nga_check_handle_ F77_FUNC_(nga_check_handle, NGA_CHECK_HANDLE) #define nga_ccheck_handle_ F77_FUNC_(nga_ccheck_handle,NGA_CCHECK_HANDLE) #define nga_dcheck_handle_ F77_FUNC_(nga_dcheck_handle,NGA_DCHECK_HANDLE) #define nga_icheck_handle_ F77_FUNC_(nga_icheck_handle,NGA_ICHECK_HANDLE) #define nga_scheck_handle_ F77_FUNC_(nga_scheck_handle,NGA_SCHECK_HANDLE) #define nga_zcheck_handle_ F77_FUNC_(nga_zcheck_handle,NGA_ZCHECK_HANDLE) #define ga_acc_ F77_FUNC_(ga_acc, GA_ACC) #define ga_cacc_ F77_FUNC_(ga_cacc,GA_CACC) #define ga_dacc_ F77_FUNC_(ga_dacc,GA_DACC) #define ga_iacc_ F77_FUNC_(ga_iacc,GA_IACC) #define ga_sacc_ F77_FUNC_(ga_sacc,GA_SACC) #define ga_zacc_ F77_FUNC_(ga_zacc,GA_ZACC) #define nga_acc_ F77_FUNC_(nga_acc, NGA_ACC) #define nga_cacc_ F77_FUNC_(nga_cacc,NGA_CACC) #define nga_dacc_ F77_FUNC_(nga_dacc,NGA_DACC) #define nga_iacc_ F77_FUNC_(nga_iacc,NGA_IACC) #define nga_sacc_ F77_FUNC_(nga_sacc,NGA_SACC) #define nga_zacc_ F77_FUNC_(nga_zacc,NGA_ZACC) #define ga_access_idx_ F77_FUNC_(ga_access_idx, GA_ACCESS_IDX) #define ga_caccess_idx_ F77_FUNC_(ga_caccess_idx,GA_CACCESS_IDX) #define ga_daccess_idx_ F77_FUNC_(ga_daccess_idx,GA_DACCESS_IDX) #define ga_iaccess_idx_ F77_FUNC_(ga_iaccess_idx,GA_IACCESS_IDX) #define ga_saccess_idx_ F77_FUNC_(ga_saccess_idx,GA_SACCESS_IDX) #define ga_zaccess_idx_ F77_FUNC_(ga_zaccess_idx,GA_ZACCESS_IDX) #define nga_access_idx_ F77_FUNC_(nga_access_idx, NGA_ACCESS_IDX) #define nga_caccess_idx_ F77_FUNC_(nga_caccess_idx,NGA_CACCESS_IDX) #define nga_daccess_idx_ F77_FUNC_(nga_daccess_idx,NGA_DACCESS_IDX) #define nga_iaccess_idx_ F77_FUNC_(nga_iaccess_idx,NGA_IACCESS_IDX) #define nga_saccess_idx_ F77_FUNC_(nga_saccess_idx,NGA_SACCESS_IDX) #define nga_zaccess_idx_ F77_FUNC_(nga_zaccess_idx,NGA_ZACCESS_IDX) #define ga_access_ptr_ F77_FUNC_(ga_access_ptr, GA_ACCESS_PTR) #define ga_caccess_ptr_ F77_FUNC_(ga_caccess_ptr,GA_CACCESS_PTR) #define ga_daccess_ptr_ F77_FUNC_(ga_daccess_ptr,GA_DACCESS_PTR) #define ga_iaccess_ptr_ F77_FUNC_(ga_iaccess_ptr,GA_IACCESS_PTR) #define ga_saccess_ptr_ F77_FUNC_(ga_saccess_ptr,GA_SACCESS_PTR) #define ga_zaccess_ptr_ F77_FUNC_(ga_zaccess_ptr,GA_ZACCESS_PTR) #define nga_access_ptr_ F77_FUNC_(nga_access_ptr, NGA_ACCESS_PTR) #define nga_caccess_ptr_ F77_FUNC_(nga_caccess_ptr,NGA_CACCESS_PTR) #define nga_daccess_ptr_ F77_FUNC_(nga_daccess_ptr,NGA_DACCESS_PTR) #define nga_iaccess_ptr_ F77_FUNC_(nga_iaccess_ptr,NGA_IACCESS_PTR) #define nga_saccess_ptr_ F77_FUNC_(nga_saccess_ptr,NGA_SACCESS_PTR) #define nga_zaccess_ptr_ F77_FUNC_(nga_zaccess_ptr,NGA_ZACCESS_PTR) #define ga_access_block_idx_ F77_FUNC_(ga_access_block_idx, GA_ACCESS_BLOCK_IDX) #define ga_caccess_block_idx_ F77_FUNC_(ga_caccess_block_idx,GA_CACCESS_BLOCK_IDX) #define ga_daccess_block_idx_ F77_FUNC_(ga_daccess_block_idx,GA_DACCESS_BLOCK_IDX) #define ga_iaccess_block_idx_ F77_FUNC_(ga_iaccess_block_idx,GA_IACCESS_BLOCK_IDX) #define ga_saccess_block_idx_ F77_FUNC_(ga_saccess_block_idx,GA_SACCESS_BLOCK_IDX) #define ga_zaccess_block_idx_ F77_FUNC_(ga_zaccess_block_idx,GA_ZACCESS_BLOCK_IDX) #define nga_access_block_idx_ F77_FUNC_(nga_access_block_idx, NGA_ACCESS_BLOCK_IDX) #define nga_caccess_block_idx_ F77_FUNC_(nga_caccess_block_idx,NGA_CACCESS_BLOCK_IDX) #define nga_daccess_block_idx_ F77_FUNC_(nga_daccess_block_idx,NGA_DACCESS_BLOCK_IDX) #define nga_iaccess_block_idx_ F77_FUNC_(nga_iaccess_block_idx,NGA_IACCESS_BLOCK_IDX) #define nga_saccess_block_idx_ F77_FUNC_(nga_saccess_block_idx,NGA_SACCESS_BLOCK_IDX) #define nga_zaccess_block_idx_ F77_FUNC_(nga_zaccess_block_idx,NGA_ZACCESS_BLOCK_IDX) #define ga_access_block_ptr_ F77_FUNC_(ga_access_block_ptr, GA_ACCESS_BLOCK_PTR) #define ga_caccess_block_ptr_ F77_FUNC_(ga_caccess_block_ptr,GA_CACCESS_BLOCK_PTR) #define ga_daccess_block_ptr_ F77_FUNC_(ga_daccess_block_ptr,GA_DACCESS_BLOCK_PTR) #define ga_iaccess_block_ptr_ F77_FUNC_(ga_iaccess_block_ptr,GA_IACCESS_BLOCK_PTR) #define ga_saccess_block_ptr_ F77_FUNC_(ga_saccess_block_ptr,GA_SACCESS_BLOCK_PTR) #define ga_zaccess_block_ptr_ F77_FUNC_(ga_zaccess_block_ptr,GA_ZACCESS_BLOCK_PTR) #define nga_access_block_ptr_ F77_FUNC_(nga_access_block_ptr, NGA_ACCESS_BLOCK_PTR) #define nga_caccess_block_ptr_ F77_FUNC_(nga_caccess_block_ptr,NGA_CACCESS_BLOCK_PTR) #define nga_daccess_block_ptr_ F77_FUNC_(nga_daccess_block_ptr,NGA_DACCESS_BLOCK_PTR) #define nga_iaccess_block_ptr_ F77_FUNC_(nga_iaccess_block_ptr,NGA_IACCESS_BLOCK_PTR) #define nga_saccess_block_ptr_ F77_FUNC_(nga_saccess_block_ptr,NGA_SACCESS_BLOCK_PTR) #define nga_zaccess_block_ptr_ F77_FUNC_(nga_zaccess_block_ptr,NGA_ZACCESS_BLOCK_PTR) #define ga_access_block_grid_idx_ F77_FUNC_(ga_access_block_grid_idx, GA_ACCESS_BLOCK_GRID_IDX) #define ga_caccess_block_grid_idx_ F77_FUNC_(ga_caccess_block_grid_idx,GA_CACCESS_BLOCK_GRID_IDX) #define ga_daccess_block_grid_idx_ F77_FUNC_(ga_daccess_block_grid_idx,GA_DACCESS_BLOCK_GRID_IDX) #define ga_iaccess_block_grid_idx_ F77_FUNC_(ga_iaccess_block_grid_idx,GA_IACCESS_BLOCK_GRID_IDX) #define ga_saccess_block_grid_idx_ F77_FUNC_(ga_saccess_block_grid_idx,GA_SACCESS_BLOCK_GRID_IDX) #define ga_zaccess_block_grid_idx_ F77_FUNC_(ga_zaccess_block_grid_idx,GA_ZACCESS_BLOCK_GRID_IDX) #define nga_access_block_grid_idx_ F77_FUNC_(nga_access_block_grid_idx, NGA_ACCESS_BLOCK_GRID_IDX) #define nga_caccess_block_grid_idx_ F77_FUNC_(nga_caccess_block_grid_idx,NGA_CACCESS_BLOCK_GRID_IDX) #define nga_daccess_block_grid_idx_ F77_FUNC_(nga_daccess_block_grid_idx,NGA_DACCESS_BLOCK_GRID_IDX) #define nga_iaccess_block_grid_idx_ F77_FUNC_(nga_iaccess_block_grid_idx,NGA_IACCESS_BLOCK_GRID_IDX) #define nga_saccess_block_grid_idx_ F77_FUNC_(nga_saccess_block_grid_idx,NGA_SACCESS_BLOCK_GRID_IDX) #define nga_zaccess_block_grid_idx_ F77_FUNC_(nga_zaccess_block_grid_idx,NGA_ZACCESS_BLOCK_GRID_IDX) #define ga_access_block_grid_ptr_ F77_FUNC_(ga_access_block_grid_ptr, GA_ACCESS_BLOCK_GRID_PTR) #define ga_caccess_block_grid_ptr_ F77_FUNC_(ga_caccess_block_grid_ptr,GA_CACCESS_BLOCK_GRID_PTR) #define ga_daccess_block_grid_ptr_ F77_FUNC_(ga_daccess_block_grid_ptr,GA_DACCESS_BLOCK_GRID_PTR) #define ga_iaccess_block_grid_ptr_ F77_FUNC_(ga_iaccess_block_grid_ptr,GA_IACCESS_BLOCK_GRID_PTR) #define ga_saccess_block_grid_ptr_ F77_FUNC_(ga_saccess_block_grid_ptr,GA_SACCESS_BLOCK_GRID_PTR) #define ga_zaccess_block_grid_ptr_ F77_FUNC_(ga_zaccess_block_grid_ptr,GA_ZACCESS_BLOCK_GRID_PTR) #define nga_access_block_grid_ptr_ F77_FUNC_(nga_access_block_grid_ptr, NGA_ACCESS_BLOCK_GRID_PTR) #define nga_caccess_block_grid_ptr_ F77_FUNC_(nga_caccess_block_grid_ptr,NGA_CACCESS_BLOCK_GRID_PTR) #define nga_daccess_block_grid_ptr_ F77_FUNC_(nga_daccess_block_grid_ptr,NGA_DACCESS_BLOCK_GRID_PTR) #define nga_iaccess_block_grid_ptr_ F77_FUNC_(nga_iaccess_block_grid_ptr,NGA_IACCESS_BLOCK_GRID_PTR) #define nga_saccess_block_grid_ptr_ F77_FUNC_(nga_saccess_block_grid_ptr,NGA_SACCESS_BLOCK_GRID_PTR) #define nga_zaccess_block_grid_ptr_ F77_FUNC_(nga_zaccess_block_grid_ptr,NGA_ZACCESS_BLOCK_GRID_PTR) #define ga_access_block_segment_idx_ F77_FUNC_(ga_access_block_segment_idx, GA_ACCESS_BLOCK_SEGMENT_IDX) #define ga_caccess_block_segment_idx_ F77_FUNC_(ga_caccess_block_segment_idx,GA_CACCESS_BLOCK_SEGMENT_IDX) #define ga_daccess_block_segment_idx_ F77_FUNC_(ga_daccess_block_segment_idx,GA_DACCESS_BLOCK_SEGMENT_IDX) #define ga_iaccess_block_segment_idx_ F77_FUNC_(ga_iaccess_block_segment_idx,GA_IACCESS_BLOCK_SEGMENT_IDX) #define ga_saccess_block_segment_idx_ F77_FUNC_(ga_saccess_block_segment_idx,GA_SACCESS_BLOCK_SEGMENT_IDX) #define ga_zaccess_block_segment_idx_ F77_FUNC_(ga_zaccess_block_segment_idx,GA_ZACCESS_BLOCK_SEGMENT_IDX) #define nga_access_block_segment_idx_ F77_FUNC_(nga_access_block_segment_idx, NGA_ACCESS_BLOCK_SEGMENT_IDX) #define nga_caccess_block_segment_idx_ F77_FUNC_(nga_caccess_block_segment_idx,NGA_CACCESS_BLOCK_SEGMENT_IDX) #define nga_daccess_block_segment_idx_ F77_FUNC_(nga_daccess_block_segment_idx,NGA_DACCESS_BLOCK_SEGMENT_IDX) #define nga_iaccess_block_segment_idx_ F77_FUNC_(nga_iaccess_block_segment_idx,NGA_IACCESS_BLOCK_SEGMENT_IDX) #define nga_saccess_block_segment_idx_ F77_FUNC_(nga_saccess_block_segment_idx,NGA_SACCESS_BLOCK_SEGMENT_IDX) #define nga_zaccess_block_segment_idx_ F77_FUNC_(nga_zaccess_block_segment_idx,NGA_ZACCESS_BLOCK_SEGMENT_IDX) #define ga_access_block_segment_ptr_ F77_FUNC_(ga_access_block_segment_ptr, GA_ACCESS_BLOCK_SEGMENT_PTR) #define ga_caccess_block_segment_ptr_ F77_FUNC_(ga_caccess_block_segment_ptr,GA_CACCESS_BLOCK_SEGMENT_PTR) #define ga_daccess_block_segment_ptr_ F77_FUNC_(ga_daccess_block_segment_ptr,GA_DACCESS_BLOCK_SEGMENT_PTR) #define ga_iaccess_block_segment_ptr_ F77_FUNC_(ga_iaccess_block_segment_ptr,GA_IACCESS_BLOCK_SEGMENT_PTR) #define ga_saccess_block_segment_ptr_ F77_FUNC_(ga_saccess_block_segment_ptr,GA_SACCESS_BLOCK_SEGMENT_PTR) #define ga_zaccess_block_segment_ptr_ F77_FUNC_(ga_zaccess_block_segment_ptr,GA_ZACCESS_BLOCK_SEGMENT_PTR) #define nga_access_block_segment_ptr_ F77_FUNC_(nga_access_block_segment_ptr, NGA_ACCESS_BLOCK_SEGMENT_PTR) #define nga_caccess_block_segment_ptr_ F77_FUNC_(nga_caccess_block_segment_ptr,NGA_CACCESS_BLOCK_SEGMENT_PTR) #define nga_daccess_block_segment_ptr_ F77_FUNC_(nga_daccess_block_segment_ptr,NGA_DACCESS_BLOCK_SEGMENT_PTR) #define nga_iaccess_block_segment_ptr_ F77_FUNC_(nga_iaccess_block_segment_ptr,NGA_IACCESS_BLOCK_SEGMENT_PTR) #define nga_saccess_block_segment_ptr_ F77_FUNC_(nga_saccess_block_segment_ptr,NGA_SACCESS_BLOCK_SEGMENT_PTR) #define nga_zaccess_block_segment_ptr_ F77_FUNC_(nga_zaccess_block_segment_ptr,NGA_ZACCESS_BLOCK_SEGMENT_PTR) #define ga_alloc_gatscat_buf_ F77_FUNC_(ga_alloc_gatscat_buf, GA_ALLOC_GATSCAT_BUF) #define ga_fence_ F77_FUNC_(ga_fence, GA_FENCE) #define ga_cfence_ F77_FUNC_(ga_cfence,GA_CFENCE) #define ga_dfence_ F77_FUNC_(ga_dfence,GA_DFENCE) #define ga_ifence_ F77_FUNC_(ga_ifence,GA_IFENCE) #define ga_sfence_ F77_FUNC_(ga_sfence,GA_SFENCE) #define ga_zfence_ F77_FUNC_(ga_zfence,GA_ZFENCE) #define nga_fence_ F77_FUNC_(nga_fence, NGA_FENCE) #define nga_cfence_ F77_FUNC_(nga_cfence,NGA_CFENCE) #define nga_dfence_ F77_FUNC_(nga_dfence,NGA_DFENCE) #define nga_ifence_ F77_FUNC_(nga_ifence,NGA_IFENCE) #define nga_sfence_ F77_FUNC_(nga_sfence,NGA_SFENCE) #define nga_zfence_ F77_FUNC_(nga_zfence,NGA_ZFENCE) #define ga_free_gatscat_buf_ F77_FUNC_(ga_free_gatscat_buf, GA_FREE_GATSCAT_BUF) #define ga_gather2d_ F77_FUNC_(ga_gather2d, GA_GATHER2D) #define ga_cgather2d_ F77_FUNC_(ga_cgather2d,GA_CGATHER2D) #define ga_dgather2d_ F77_FUNC_(ga_dgather2d,GA_DGATHER2D) #define ga_igather2d_ F77_FUNC_(ga_igather2d,GA_IGATHER2D) #define ga_sgather2d_ F77_FUNC_(ga_sgather2d,GA_SGATHER2D) #define ga_zgather2d_ F77_FUNC_(ga_zgather2d,GA_ZGATHER2D) #define nga_gather2d_ F77_FUNC_(nga_gather2d, NGA_GATHER2D) #define nga_cgather2d_ F77_FUNC_(nga_cgather2d,NGA_CGATHER2D) #define nga_dgather2d_ F77_FUNC_(nga_dgather2d,NGA_DGATHER2D) #define nga_igather2d_ F77_FUNC_(nga_igather2d,NGA_IGATHER2D) #define nga_sgather2d_ F77_FUNC_(nga_sgather2d,NGA_SGATHER2D) #define nga_zgather2d_ F77_FUNC_(nga_zgather2d,NGA_ZGATHER2D) #define ga_gather_ F77_FUNC_(ga_gather, GA_GATHER) #define ga_cgather_ F77_FUNC_(ga_cgather,GA_CGATHER) #define ga_dgather_ F77_FUNC_(ga_dgather,GA_DGATHER) #define ga_igather_ F77_FUNC_(ga_igather,GA_IGATHER) #define ga_sgather_ F77_FUNC_(ga_sgather,GA_SGATHER) #define ga_zgather_ F77_FUNC_(ga_zgather,GA_ZGATHER) #define nga_gather_ F77_FUNC_(nga_gather, NGA_GATHER) #define nga_cgather_ F77_FUNC_(nga_cgather,NGA_CGATHER) #define nga_dgather_ F77_FUNC_(nga_dgather,NGA_DGATHER) #define nga_igather_ F77_FUNC_(nga_igather,NGA_IGATHER) #define nga_sgather_ F77_FUNC_(nga_sgather,NGA_SGATHER) #define nga_zgather_ F77_FUNC_(nga_zgather,NGA_ZGATHER) #define ga_get_ F77_FUNC_(ga_get, GA_GET) #define ga_cget_ F77_FUNC_(ga_cget,GA_CGET) #define ga_dget_ F77_FUNC_(ga_dget,GA_DGET) #define ga_iget_ F77_FUNC_(ga_iget,GA_IGET) #define ga_sget_ F77_FUNC_(ga_sget,GA_SGET) #define ga_zget_ F77_FUNC_(ga_zget,GA_ZGET) #define nga_get_ F77_FUNC_(nga_get, NGA_GET) #define nga_cget_ F77_FUNC_(nga_cget,NGA_CGET) #define nga_dget_ F77_FUNC_(nga_dget,NGA_DGET) #define nga_iget_ F77_FUNC_(nga_iget,NGA_IGET) #define nga_sget_ F77_FUNC_(nga_sget,NGA_SGET) #define nga_zget_ F77_FUNC_(nga_zget,NGA_ZGET) #define ga_init_fence_ F77_FUNC_(ga_init_fence, GA_INIT_FENCE) #define ga_cinit_fence_ F77_FUNC_(ga_cinit_fence,GA_CINIT_FENCE) #define ga_dinit_fence_ F77_FUNC_(ga_dinit_fence,GA_DINIT_FENCE) #define ga_iinit_fence_ F77_FUNC_(ga_iinit_fence,GA_IINIT_FENCE) #define ga_sinit_fence_ F77_FUNC_(ga_sinit_fence,GA_SINIT_FENCE) #define ga_zinit_fence_ F77_FUNC_(ga_zinit_fence,GA_ZINIT_FENCE) #define nga_init_fence_ F77_FUNC_(nga_init_fence, NGA_INIT_FENCE) #define nga_cinit_fence_ F77_FUNC_(nga_cinit_fence,NGA_CINIT_FENCE) #define nga_dinit_fence_ F77_FUNC_(nga_dinit_fence,NGA_DINIT_FENCE) #define nga_iinit_fence_ F77_FUNC_(nga_iinit_fence,NGA_IINIT_FENCE) #define nga_sinit_fence_ F77_FUNC_(nga_sinit_fence,NGA_SINIT_FENCE) #define nga_zinit_fence_ F77_FUNC_(nga_zinit_fence,NGA_ZINIT_FENCE) #define ga_nbacc_ F77_FUNC_(ga_nbacc, GA_NBACC) #define ga_cnbacc_ F77_FUNC_(ga_cnbacc,GA_CNBACC) #define ga_dnbacc_ F77_FUNC_(ga_dnbacc,GA_DNBACC) #define ga_inbacc_ F77_FUNC_(ga_inbacc,GA_INBACC) #define ga_snbacc_ F77_FUNC_(ga_snbacc,GA_SNBACC) #define ga_znbacc_ F77_FUNC_(ga_znbacc,GA_ZNBACC) #define nga_nbacc_ F77_FUNC_(nga_nbacc, NGA_NBACC) #define nga_cnbacc_ F77_FUNC_(nga_cnbacc,NGA_CNBACC) #define nga_dnbacc_ F77_FUNC_(nga_dnbacc,NGA_DNBACC) #define nga_inbacc_ F77_FUNC_(nga_inbacc,NGA_INBACC) #define nga_snbacc_ F77_FUNC_(nga_snbacc,NGA_SNBACC) #define nga_znbacc_ F77_FUNC_(nga_znbacc,NGA_ZNBACC) #define ga_nbget_ F77_FUNC_(ga_nbget, GA_NBGET) #define ga_cnbget_ F77_FUNC_(ga_cnbget,GA_CNBGET) #define ga_dnbget_ F77_FUNC_(ga_dnbget,GA_DNBGET) #define ga_inbget_ F77_FUNC_(ga_inbget,GA_INBGET) #define ga_snbget_ F77_FUNC_(ga_snbget,GA_SNBGET) #define ga_znbget_ F77_FUNC_(ga_znbget,GA_ZNBGET) #define nga_nbget_ F77_FUNC_(nga_nbget, NGA_NBGET) #define nga_cnbget_ F77_FUNC_(nga_cnbget,NGA_CNBGET) #define nga_dnbget_ F77_FUNC_(nga_dnbget,NGA_DNBGET) #define nga_inbget_ F77_FUNC_(nga_inbget,NGA_INBGET) #define nga_snbget_ F77_FUNC_(nga_snbget,NGA_SNBGET) #define nga_znbget_ F77_FUNC_(nga_znbget,NGA_ZNBGET) #define ga_nbput_ F77_FUNC_(ga_nbput, GA_NBPUT) #define ga_cnbput_ F77_FUNC_(ga_cnbput,GA_CNBPUT) #define ga_dnbput_ F77_FUNC_(ga_dnbput,GA_DNBPUT) #define ga_inbput_ F77_FUNC_(ga_inbput,GA_INBPUT) #define ga_snbput_ F77_FUNC_(ga_snbput,GA_SNBPUT) #define ga_znbput_ F77_FUNC_(ga_znbput,GA_ZNBPUT) #define nga_nbput_ F77_FUNC_(nga_nbput, NGA_NBPUT) #define nga_cnbput_ F77_FUNC_(nga_cnbput,NGA_CNBPUT) #define nga_dnbput_ F77_FUNC_(nga_dnbput,NGA_DNBPUT) #define nga_inbput_ F77_FUNC_(nga_inbput,NGA_INBPUT) #define nga_snbput_ F77_FUNC_(nga_snbput,NGA_SNBPUT) #define nga_znbput_ F77_FUNC_(nga_znbput,NGA_ZNBPUT) #define ga_nbput_notify_ F77_FUNC_(ga_nbput_notify, GA_NBPUT_NOTIFY) #define ga_cnbput_notify_ F77_FUNC_(ga_cnbput_notify,GA_CNBPUT_NOTIFY) #define ga_dnbput_notify_ F77_FUNC_(ga_dnbput_notify,GA_DNBPUT_NOTIFY) #define ga_inbput_notify_ F77_FUNC_(ga_inbput_notify,GA_INBPUT_NOTIFY) #define ga_snbput_notify_ F77_FUNC_(ga_snbput_notify,GA_SNBPUT_NOTIFY) #define ga_znbput_notify_ F77_FUNC_(ga_znbput_notify,GA_ZNBPUT_NOTIFY) #define nga_nbput_notify_ F77_FUNC_(nga_nbput_notify, NGA_NBPUT_NOTIFY) #define nga_cnbput_notify_ F77_FUNC_(nga_cnbput_notify,NGA_CNBPUT_NOTIFY) #define nga_dnbput_notify_ F77_FUNC_(nga_dnbput_notify,NGA_DNBPUT_NOTIFY) #define nga_inbput_notify_ F77_FUNC_(nga_inbput_notify,NGA_INBPUT_NOTIFY) #define nga_snbput_notify_ F77_FUNC_(nga_snbput_notify,NGA_SNBPUT_NOTIFY) #define nga_znbput_notify_ F77_FUNC_(nga_znbput_notify,NGA_ZNBPUT_NOTIFY) #define ga_nbwait_notify_ F77_FUNC_(ga_nbwait_notify, GA_NBWAIT_NOTIFY) #define ga_cnbwait_notify_ F77_FUNC_(ga_cnbwait_notify,GA_CNBWAIT_NOTIFY) #define ga_dnbwait_notify_ F77_FUNC_(ga_dnbwait_notify,GA_DNBWAIT_NOTIFY) #define ga_inbwait_notify_ F77_FUNC_(ga_inbwait_notify,GA_INBWAIT_NOTIFY) #define ga_snbwait_notify_ F77_FUNC_(ga_snbwait_notify,GA_SNBWAIT_NOTIFY) #define ga_znbwait_notify_ F77_FUNC_(ga_znbwait_notify,GA_ZNBWAIT_NOTIFY) #define nga_nbwait_notify_ F77_FUNC_(nga_nbwait_notify, NGA_NBWAIT_NOTIFY) #define nga_cnbwait_notify_ F77_FUNC_(nga_cnbwait_notify,NGA_CNBWAIT_NOTIFY) #define nga_dnbwait_notify_ F77_FUNC_(nga_dnbwait_notify,NGA_DNBWAIT_NOTIFY) #define nga_inbwait_notify_ F77_FUNC_(nga_inbwait_notify,NGA_INBWAIT_NOTIFY) #define nga_snbwait_notify_ F77_FUNC_(nga_snbwait_notify,NGA_SNBWAIT_NOTIFY) #define nga_znbwait_notify_ F77_FUNC_(nga_znbwait_notify,NGA_ZNBWAIT_NOTIFY) #define ga_nbtest_ F77_FUNC_(ga_nbtest, GA_NBTEST) #define ga_cnbtest_ F77_FUNC_(ga_cnbtest,GA_CNBTEST) #define ga_dnbtest_ F77_FUNC_(ga_dnbtest,GA_DNBTEST) #define ga_inbtest_ F77_FUNC_(ga_inbtest,GA_INBTEST) #define ga_snbtest_ F77_FUNC_(ga_snbtest,GA_SNBTEST) #define ga_znbtest_ F77_FUNC_(ga_znbtest,GA_ZNBTEST) #define nga_nbtest_ F77_FUNC_(nga_nbtest, NGA_NBTEST) #define nga_cnbtest_ F77_FUNC_(nga_cnbtest,NGA_CNBTEST) #define nga_dnbtest_ F77_FUNC_(nga_dnbtest,NGA_DNBTEST) #define nga_inbtest_ F77_FUNC_(nga_inbtest,NGA_INBTEST) #define nga_snbtest_ F77_FUNC_(nga_snbtest,NGA_SNBTEST) #define nga_znbtest_ F77_FUNC_(nga_znbtest,NGA_ZNBTEST) #define ga_nbwait_ F77_FUNC_(ga_nbwait, GA_NBWAIT) #define ga_cnbwait_ F77_FUNC_(ga_cnbwait,GA_CNBWAIT) #define ga_dnbwait_ F77_FUNC_(ga_dnbwait,GA_DNBWAIT) #define ga_inbwait_ F77_FUNC_(ga_inbwait,GA_INBWAIT) #define ga_snbwait_ F77_FUNC_(ga_snbwait,GA_SNBWAIT) #define ga_znbwait_ F77_FUNC_(ga_znbwait,GA_ZNBWAIT) #define nga_nbwait_ F77_FUNC_(nga_nbwait, NGA_NBWAIT) #define nga_cnbwait_ F77_FUNC_(nga_cnbwait,NGA_CNBWAIT) #define nga_dnbwait_ F77_FUNC_(nga_dnbwait,NGA_DNBWAIT) #define nga_inbwait_ F77_FUNC_(nga_inbwait,NGA_INBWAIT) #define nga_snbwait_ F77_FUNC_(nga_snbwait,NGA_SNBWAIT) #define nga_znbwait_ F77_FUNC_(nga_znbwait,NGA_ZNBWAIT) #define ga_put_ F77_FUNC_(ga_put, GA_PUT) #define ga_cput_ F77_FUNC_(ga_cput,GA_CPUT) #define ga_dput_ F77_FUNC_(ga_dput,GA_DPUT) #define ga_iput_ F77_FUNC_(ga_iput,GA_IPUT) #define ga_sput_ F77_FUNC_(ga_sput,GA_SPUT) #define ga_zput_ F77_FUNC_(ga_zput,GA_ZPUT) #define nga_put_ F77_FUNC_(nga_put, NGA_PUT) #define nga_cput_ F77_FUNC_(nga_cput,NGA_CPUT) #define nga_dput_ F77_FUNC_(nga_dput,NGA_DPUT) #define nga_iput_ F77_FUNC_(nga_iput,NGA_IPUT) #define nga_sput_ F77_FUNC_(nga_sput,NGA_SPUT) #define nga_zput_ F77_FUNC_(nga_zput,NGA_ZPUT) #define ga_pgroup_sync_ F77_FUNC_(ga_pgroup_sync, GA_PGROUP_SYNC) #define ga_cpgroup_sync_ F77_FUNC_(ga_cpgroup_sync,GA_CPGROUP_SYNC) #define ga_dpgroup_sync_ F77_FUNC_(ga_dpgroup_sync,GA_DPGROUP_SYNC) #define ga_ipgroup_sync_ F77_FUNC_(ga_ipgroup_sync,GA_IPGROUP_SYNC) #define ga_spgroup_sync_ F77_FUNC_(ga_spgroup_sync,GA_SPGROUP_SYNC) #define ga_zpgroup_sync_ F77_FUNC_(ga_zpgroup_sync,GA_ZPGROUP_SYNC) #define nga_pgroup_sync_ F77_FUNC_(nga_pgroup_sync, NGA_PGROUP_SYNC) #define nga_cpgroup_sync_ F77_FUNC_(nga_cpgroup_sync,NGA_CPGROUP_SYNC) #define nga_dpgroup_sync_ F77_FUNC_(nga_dpgroup_sync,NGA_DPGROUP_SYNC) #define nga_ipgroup_sync_ F77_FUNC_(nga_ipgroup_sync,NGA_IPGROUP_SYNC) #define nga_spgroup_sync_ F77_FUNC_(nga_spgroup_sync,NGA_SPGROUP_SYNC) #define nga_zpgroup_sync_ F77_FUNC_(nga_zpgroup_sync,NGA_ZPGROUP_SYNC) #define ga_read_inc_ F77_FUNC_(ga_read_inc, GA_READ_INC) #define ga_cread_inc_ F77_FUNC_(ga_cread_inc,GA_CREAD_INC) #define ga_dread_inc_ F77_FUNC_(ga_dread_inc,GA_DREAD_INC) #define ga_iread_inc_ F77_FUNC_(ga_iread_inc,GA_IREAD_INC) #define ga_sread_inc_ F77_FUNC_(ga_sread_inc,GA_SREAD_INC) #define ga_zread_inc_ F77_FUNC_(ga_zread_inc,GA_ZREAD_INC) #define nga_read_inc_ F77_FUNC_(nga_read_inc, NGA_READ_INC) #define nga_cread_inc_ F77_FUNC_(nga_cread_inc,NGA_CREAD_INC) #define nga_dread_inc_ F77_FUNC_(nga_dread_inc,NGA_DREAD_INC) #define nga_iread_inc_ F77_FUNC_(nga_iread_inc,NGA_IREAD_INC) #define nga_sread_inc_ F77_FUNC_(nga_sread_inc,NGA_SREAD_INC) #define nga_zread_inc_ F77_FUNC_(nga_zread_inc,NGA_ZREAD_INC) #define ga_release_ F77_FUNC_(ga_release, GA_RELEASE) #define ga_crelease_ F77_FUNC_(ga_crelease,GA_CRELEASE) #define ga_drelease_ F77_FUNC_(ga_drelease,GA_DRELEASE) #define ga_irelease_ F77_FUNC_(ga_irelease,GA_IRELEASE) #define ga_srelease_ F77_FUNC_(ga_srelease,GA_SRELEASE) #define ga_zrelease_ F77_FUNC_(ga_zrelease,GA_ZRELEASE) #define nga_release_ F77_FUNC_(nga_release, NGA_RELEASE) #define nga_crelease_ F77_FUNC_(nga_crelease,NGA_CRELEASE) #define nga_drelease_ F77_FUNC_(nga_drelease,NGA_DRELEASE) #define nga_irelease_ F77_FUNC_(nga_irelease,NGA_IRELEASE) #define nga_srelease_ F77_FUNC_(nga_srelease,NGA_SRELEASE) #define nga_zrelease_ F77_FUNC_(nga_zrelease,NGA_ZRELEASE) #define ga_release_block_ F77_FUNC_(ga_release_block, GA_RELEASE_BLOCK) #define ga_crelease_block_ F77_FUNC_(ga_crelease_block,GA_CRELEASE_BLOCK) #define ga_drelease_block_ F77_FUNC_(ga_drelease_block,GA_DRELEASE_BLOCK) #define ga_irelease_block_ F77_FUNC_(ga_irelease_block,GA_IRELEASE_BLOCK) #define ga_srelease_block_ F77_FUNC_(ga_srelease_block,GA_SRELEASE_BLOCK) #define ga_zrelease_block_ F77_FUNC_(ga_zrelease_block,GA_ZRELEASE_BLOCK) #define nga_release_block_ F77_FUNC_(nga_release_block, NGA_RELEASE_BLOCK) #define nga_crelease_block_ F77_FUNC_(nga_crelease_block,NGA_CRELEASE_BLOCK) #define nga_drelease_block_ F77_FUNC_(nga_drelease_block,NGA_DRELEASE_BLOCK) #define nga_irelease_block_ F77_FUNC_(nga_irelease_block,NGA_IRELEASE_BLOCK) #define nga_srelease_block_ F77_FUNC_(nga_srelease_block,NGA_SRELEASE_BLOCK) #define nga_zrelease_block_ F77_FUNC_(nga_zrelease_block,NGA_ZRELEASE_BLOCK) #define ga_release_block_grid_ F77_FUNC_(ga_release_block_grid, GA_RELEASE_BLOCK_GRID) #define ga_crelease_block_grid_ F77_FUNC_(ga_crelease_block_grid,GA_CRELEASE_BLOCK_GRID) #define ga_drelease_block_grid_ F77_FUNC_(ga_drelease_block_grid,GA_DRELEASE_BLOCK_GRID) #define ga_irelease_block_grid_ F77_FUNC_(ga_irelease_block_grid,GA_IRELEASE_BLOCK_GRID) #define ga_srelease_block_grid_ F77_FUNC_(ga_srelease_block_grid,GA_SRELEASE_BLOCK_GRID) #define ga_zrelease_block_grid_ F77_FUNC_(ga_zrelease_block_grid,GA_ZRELEASE_BLOCK_GRID) #define nga_release_block_grid_ F77_FUNC_(nga_release_block_grid, NGA_RELEASE_BLOCK_GRID) #define nga_crelease_block_grid_ F77_FUNC_(nga_crelease_block_grid,NGA_CRELEASE_BLOCK_GRID) #define nga_drelease_block_grid_ F77_FUNC_(nga_drelease_block_grid,NGA_DRELEASE_BLOCK_GRID) #define nga_irelease_block_grid_ F77_FUNC_(nga_irelease_block_grid,NGA_IRELEASE_BLOCK_GRID) #define nga_srelease_block_grid_ F77_FUNC_(nga_srelease_block_grid,NGA_SRELEASE_BLOCK_GRID) #define nga_zrelease_block_grid_ F77_FUNC_(nga_zrelease_block_grid,NGA_ZRELEASE_BLOCK_GRID) #define ga_release_block_segment_ F77_FUNC_(ga_release_block_segment, GA_RELEASE_BLOCK_SEGMENT) #define ga_crelease_block_segment_ F77_FUNC_(ga_crelease_block_segment,GA_CRELEASE_BLOCK_SEGMENT) #define ga_drelease_block_segment_ F77_FUNC_(ga_drelease_block_segment,GA_DRELEASE_BLOCK_SEGMENT) #define ga_irelease_block_segment_ F77_FUNC_(ga_irelease_block_segment,GA_IRELEASE_BLOCK_SEGMENT) #define ga_srelease_block_segment_ F77_FUNC_(ga_srelease_block_segment,GA_SRELEASE_BLOCK_SEGMENT) #define ga_zrelease_block_segment_ F77_FUNC_(ga_zrelease_block_segment,GA_ZRELEASE_BLOCK_SEGMENT) #define nga_release_block_segment_ F77_FUNC_(nga_release_block_segment, NGA_RELEASE_BLOCK_SEGMENT) #define nga_crelease_block_segment_ F77_FUNC_(nga_crelease_block_segment,NGA_CRELEASE_BLOCK_SEGMENT) #define nga_drelease_block_segment_ F77_FUNC_(nga_drelease_block_segment,NGA_DRELEASE_BLOCK_SEGMENT) #define nga_irelease_block_segment_ F77_FUNC_(nga_irelease_block_segment,NGA_IRELEASE_BLOCK_SEGMENT) #define nga_srelease_block_segment_ F77_FUNC_(nga_srelease_block_segment,NGA_SRELEASE_BLOCK_SEGMENT) #define nga_zrelease_block_segment_ F77_FUNC_(nga_zrelease_block_segment,NGA_ZRELEASE_BLOCK_SEGMENT) #define ga_release_update_ F77_FUNC_(ga_release_update, GA_RELEASE_UPDATE) #define ga_crelease_update_ F77_FUNC_(ga_crelease_update,GA_CRELEASE_UPDATE) #define ga_drelease_update_ F77_FUNC_(ga_drelease_update,GA_DRELEASE_UPDATE) #define ga_irelease_update_ F77_FUNC_(ga_irelease_update,GA_IRELEASE_UPDATE) #define ga_srelease_update_ F77_FUNC_(ga_srelease_update,GA_SRELEASE_UPDATE) #define ga_zrelease_update_ F77_FUNC_(ga_zrelease_update,GA_ZRELEASE_UPDATE) #define nga_release_update_ F77_FUNC_(nga_release_update, NGA_RELEASE_UPDATE) #define nga_crelease_update_ F77_FUNC_(nga_crelease_update,NGA_CRELEASE_UPDATE) #define nga_drelease_update_ F77_FUNC_(nga_drelease_update,NGA_DRELEASE_UPDATE) #define nga_irelease_update_ F77_FUNC_(nga_irelease_update,NGA_IRELEASE_UPDATE) #define nga_srelease_update_ F77_FUNC_(nga_srelease_update,NGA_SRELEASE_UPDATE) #define nga_zrelease_update_ F77_FUNC_(nga_zrelease_update,NGA_ZRELEASE_UPDATE) #define ga_release_update_block_ F77_FUNC_(ga_release_update_block, GA_RELEASE_UPDATE_BLOCK) #define ga_crelease_update_block_ F77_FUNC_(ga_crelease_update_block,GA_CRELEASE_UPDATE_BLOCK) #define ga_drelease_update_block_ F77_FUNC_(ga_drelease_update_block,GA_DRELEASE_UPDATE_BLOCK) #define ga_irelease_update_block_ F77_FUNC_(ga_irelease_update_block,GA_IRELEASE_UPDATE_BLOCK) #define ga_srelease_update_block_ F77_FUNC_(ga_srelease_update_block,GA_SRELEASE_UPDATE_BLOCK) #define ga_zrelease_update_block_ F77_FUNC_(ga_zrelease_update_block,GA_ZRELEASE_UPDATE_BLOCK) #define nga_release_update_block_ F77_FUNC_(nga_release_update_block, NGA_RELEASE_UPDATE_BLOCK) #define nga_crelease_update_block_ F77_FUNC_(nga_crelease_update_block,NGA_CRELEASE_UPDATE_BLOCK) #define nga_drelease_update_block_ F77_FUNC_(nga_drelease_update_block,NGA_DRELEASE_UPDATE_BLOCK) #define nga_irelease_update_block_ F77_FUNC_(nga_irelease_update_block,NGA_IRELEASE_UPDATE_BLOCK) #define nga_srelease_update_block_ F77_FUNC_(nga_srelease_update_block,NGA_SRELEASE_UPDATE_BLOCK) #define nga_zrelease_update_block_ F77_FUNC_(nga_zrelease_update_block,NGA_ZRELEASE_UPDATE_BLOCK) #define ga_release_update_block_grid_ F77_FUNC_(ga_release_update_block_grid, GA_RELEASE_UPDATE_BLOCK_GRID) #define ga_crelease_update_block_grid_ F77_FUNC_(ga_crelease_update_block_grid,GA_CRELEASE_UPDATE_BLOCK_GRID) #define ga_drelease_update_block_grid_ F77_FUNC_(ga_drelease_update_block_grid,GA_DRELEASE_UPDATE_BLOCK_GRID) #define ga_irelease_update_block_grid_ F77_FUNC_(ga_irelease_update_block_grid,GA_IRELEASE_UPDATE_BLOCK_GRID) #define ga_srelease_update_block_grid_ F77_FUNC_(ga_srelease_update_block_grid,GA_SRELEASE_UPDATE_BLOCK_GRID) #define ga_zrelease_update_block_grid_ F77_FUNC_(ga_zrelease_update_block_grid,GA_ZRELEASE_UPDATE_BLOCK_GRID) #define nga_release_update_block_grid_ F77_FUNC_(nga_release_update_block_grid, NGA_RELEASE_UPDATE_BLOCK_GRID) #define nga_crelease_update_block_grid_ F77_FUNC_(nga_crelease_update_block_grid,NGA_CRELEASE_UPDATE_BLOCK_GRID) #define nga_drelease_update_block_grid_ F77_FUNC_(nga_drelease_update_block_grid,NGA_DRELEASE_UPDATE_BLOCK_GRID) #define nga_irelease_update_block_grid_ F77_FUNC_(nga_irelease_update_block_grid,NGA_IRELEASE_UPDATE_BLOCK_GRID) #define nga_srelease_update_block_grid_ F77_FUNC_(nga_srelease_update_block_grid,NGA_SRELEASE_UPDATE_BLOCK_GRID) #define nga_zrelease_update_block_grid_ F77_FUNC_(nga_zrelease_update_block_grid,NGA_ZRELEASE_UPDATE_BLOCK_GRID) #define ga_release_update_block_segment_ F77_FUNC_(ga_release_update_block_segment, GA_RELEASE_UPDATE_BLOCK_SEGMENT) #define ga_crelease_update_block_segment_ F77_FUNC_(ga_crelease_update_block_segment,GA_CRELEASE_UPDATE_BLOCK_SEGMENT) #define ga_drelease_update_block_segment_ F77_FUNC_(ga_drelease_update_block_segment,GA_DRELEASE_UPDATE_BLOCK_SEGMENT) #define ga_irelease_update_block_segment_ F77_FUNC_(ga_irelease_update_block_segment,GA_IRELEASE_UPDATE_BLOCK_SEGMENT) #define ga_srelease_update_block_segment_ F77_FUNC_(ga_srelease_update_block_segment,GA_SRELEASE_UPDATE_BLOCK_SEGMENT) #define ga_zrelease_update_block_segment_ F77_FUNC_(ga_zrelease_update_block_segment,GA_ZRELEASE_UPDATE_BLOCK_SEGMENT) #define nga_release_update_block_segment_ F77_FUNC_(nga_release_update_block_segment, NGA_RELEASE_UPDATE_BLOCK_SEGMENT) #define nga_crelease_update_block_segment_ F77_FUNC_(nga_crelease_update_block_segment,NGA_CRELEASE_UPDATE_BLOCK_SEGMENT) #define nga_drelease_update_block_segment_ F77_FUNC_(nga_drelease_update_block_segment,NGA_DRELEASE_UPDATE_BLOCK_SEGMENT) #define nga_irelease_update_block_segment_ F77_FUNC_(nga_irelease_update_block_segment,NGA_IRELEASE_UPDATE_BLOCK_SEGMENT) #define nga_srelease_update_block_segment_ F77_FUNC_(nga_srelease_update_block_segment,NGA_SRELEASE_UPDATE_BLOCK_SEGMENT) #define nga_zrelease_update_block_segment_ F77_FUNC_(nga_zrelease_update_block_segment,NGA_ZRELEASE_UPDATE_BLOCK_SEGMENT) #define ga_scatter2d_ F77_FUNC_(ga_scatter2d, GA_SCATTER2D) #define ga_cscatter2d_ F77_FUNC_(ga_cscatter2d,GA_CSCATTER2D) #define ga_dscatter2d_ F77_FUNC_(ga_dscatter2d,GA_DSCATTER2D) #define ga_iscatter2d_ F77_FUNC_(ga_iscatter2d,GA_ISCATTER2D) #define ga_sscatter2d_ F77_FUNC_(ga_sscatter2d,GA_SSCATTER2D) #define ga_zscatter2d_ F77_FUNC_(ga_zscatter2d,GA_ZSCATTER2D) #define nga_scatter2d_ F77_FUNC_(nga_scatter2d, NGA_SCATTER2D) #define nga_cscatter2d_ F77_FUNC_(nga_cscatter2d,NGA_CSCATTER2D) #define nga_dscatter2d_ F77_FUNC_(nga_dscatter2d,NGA_DSCATTER2D) #define nga_iscatter2d_ F77_FUNC_(nga_iscatter2d,NGA_ISCATTER2D) #define nga_sscatter2d_ F77_FUNC_(nga_sscatter2d,NGA_SSCATTER2D) #define nga_zscatter2d_ F77_FUNC_(nga_zscatter2d,NGA_ZSCATTER2D) #define ga_scatter_ F77_FUNC_(ga_scatter, GA_SCATTER) #define ga_cscatter_ F77_FUNC_(ga_cscatter,GA_CSCATTER) #define ga_dscatter_ F77_FUNC_(ga_dscatter,GA_DSCATTER) #define ga_iscatter_ F77_FUNC_(ga_iscatter,GA_ISCATTER) #define ga_sscatter_ F77_FUNC_(ga_sscatter,GA_SSCATTER) #define ga_zscatter_ F77_FUNC_(ga_zscatter,GA_ZSCATTER) #define nga_scatter_ F77_FUNC_(nga_scatter, NGA_SCATTER) #define nga_cscatter_ F77_FUNC_(nga_cscatter,NGA_CSCATTER) #define nga_dscatter_ F77_FUNC_(nga_dscatter,NGA_DSCATTER) #define nga_iscatter_ F77_FUNC_(nga_iscatter,NGA_ISCATTER) #define nga_sscatter_ F77_FUNC_(nga_sscatter,NGA_SSCATTER) #define nga_zscatter_ F77_FUNC_(nga_zscatter,NGA_ZSCATTER) #define ga_scatter_acc2d_ F77_FUNC_(ga_scatter_acc2d, GA_SCATTER_ACC2D) #define ga_cscatter_acc2d_ F77_FUNC_(ga_cscatter_acc2d,GA_CSCATTER_ACC2D) #define ga_dscatter_acc2d_ F77_FUNC_(ga_dscatter_acc2d,GA_DSCATTER_ACC2D) #define ga_iscatter_acc2d_ F77_FUNC_(ga_iscatter_acc2d,GA_ISCATTER_ACC2D) #define ga_sscatter_acc2d_ F77_FUNC_(ga_sscatter_acc2d,GA_SSCATTER_ACC2D) #define ga_zscatter_acc2d_ F77_FUNC_(ga_zscatter_acc2d,GA_ZSCATTER_ACC2D) #define nga_scatter_acc2d_ F77_FUNC_(nga_scatter_acc2d, NGA_SCATTER_ACC2D) #define nga_cscatter_acc2d_ F77_FUNC_(nga_cscatter_acc2d,NGA_CSCATTER_ACC2D) #define nga_dscatter_acc2d_ F77_FUNC_(nga_dscatter_acc2d,NGA_DSCATTER_ACC2D) #define nga_iscatter_acc2d_ F77_FUNC_(nga_iscatter_acc2d,NGA_ISCATTER_ACC2D) #define nga_sscatter_acc2d_ F77_FUNC_(nga_sscatter_acc2d,NGA_SSCATTER_ACC2D) #define nga_zscatter_acc2d_ F77_FUNC_(nga_zscatter_acc2d,NGA_ZSCATTER_ACC2D) #define ga_scatter_acc_ F77_FUNC_(ga_scatter_acc, GA_SCATTER_ACC) #define ga_cscatter_acc_ F77_FUNC_(ga_cscatter_acc,GA_CSCATTER_ACC) #define ga_dscatter_acc_ F77_FUNC_(ga_dscatter_acc,GA_DSCATTER_ACC) #define ga_iscatter_acc_ F77_FUNC_(ga_iscatter_acc,GA_ISCATTER_ACC) #define ga_sscatter_acc_ F77_FUNC_(ga_sscatter_acc,GA_SSCATTER_ACC) #define ga_zscatter_acc_ F77_FUNC_(ga_zscatter_acc,GA_ZSCATTER_ACC) #define nga_scatter_acc_ F77_FUNC_(nga_scatter_acc, NGA_SCATTER_ACC) #define nga_cscatter_acc_ F77_FUNC_(nga_cscatter_acc,NGA_CSCATTER_ACC) #define nga_dscatter_acc_ F77_FUNC_(nga_dscatter_acc,NGA_DSCATTER_ACC) #define nga_iscatter_acc_ F77_FUNC_(nga_iscatter_acc,NGA_ISCATTER_ACC) #define nga_sscatter_acc_ F77_FUNC_(nga_sscatter_acc,NGA_SSCATTER_ACC) #define nga_zscatter_acc_ F77_FUNC_(nga_zscatter_acc,NGA_ZSCATTER_ACC) #define ga_strided_acc_ F77_FUNC_(ga_strided_acc, GA_STRIDED_ACC) #define ga_cstrided_acc_ F77_FUNC_(ga_cstrided_acc,GA_CSTRIDED_ACC) #define ga_dstrided_acc_ F77_FUNC_(ga_dstrided_acc,GA_DSTRIDED_ACC) #define ga_istrided_acc_ F77_FUNC_(ga_istrided_acc,GA_ISTRIDED_ACC) #define ga_sstrided_acc_ F77_FUNC_(ga_sstrided_acc,GA_SSTRIDED_ACC) #define ga_zstrided_acc_ F77_FUNC_(ga_zstrided_acc,GA_ZSTRIDED_ACC) #define nga_strided_acc_ F77_FUNC_(nga_strided_acc, NGA_STRIDED_ACC) #define nga_cstrided_acc_ F77_FUNC_(nga_cstrided_acc,NGA_CSTRIDED_ACC) #define nga_dstrided_acc_ F77_FUNC_(nga_dstrided_acc,NGA_DSTRIDED_ACC) #define nga_istrided_acc_ F77_FUNC_(nga_istrided_acc,NGA_ISTRIDED_ACC) #define nga_sstrided_acc_ F77_FUNC_(nga_sstrided_acc,NGA_SSTRIDED_ACC) #define nga_zstrided_acc_ F77_FUNC_(nga_zstrided_acc,NGA_ZSTRIDED_ACC) #define ga_strided_get_ F77_FUNC_(ga_strided_get, GA_STRIDED_GET) #define ga_cstrided_get_ F77_FUNC_(ga_cstrided_get,GA_CSTRIDED_GET) #define ga_dstrided_get_ F77_FUNC_(ga_dstrided_get,GA_DSTRIDED_GET) #define ga_istrided_get_ F77_FUNC_(ga_istrided_get,GA_ISTRIDED_GET) #define ga_sstrided_get_ F77_FUNC_(ga_sstrided_get,GA_SSTRIDED_GET) #define ga_zstrided_get_ F77_FUNC_(ga_zstrided_get,GA_ZSTRIDED_GET) #define nga_strided_get_ F77_FUNC_(nga_strided_get, NGA_STRIDED_GET) #define nga_cstrided_get_ F77_FUNC_(nga_cstrided_get,NGA_CSTRIDED_GET) #define nga_dstrided_get_ F77_FUNC_(nga_dstrided_get,NGA_DSTRIDED_GET) #define nga_istrided_get_ F77_FUNC_(nga_istrided_get,NGA_ISTRIDED_GET) #define nga_sstrided_get_ F77_FUNC_(nga_sstrided_get,NGA_SSTRIDED_GET) #define nga_zstrided_get_ F77_FUNC_(nga_zstrided_get,NGA_ZSTRIDED_GET) #define ga_strided_put_ F77_FUNC_(ga_strided_put, GA_STRIDED_PUT) #define ga_cstrided_put_ F77_FUNC_(ga_cstrided_put,GA_CSTRIDED_PUT) #define ga_dstrided_put_ F77_FUNC_(ga_dstrided_put,GA_DSTRIDED_PUT) #define ga_istrided_put_ F77_FUNC_(ga_istrided_put,GA_ISTRIDED_PUT) #define ga_sstrided_put_ F77_FUNC_(ga_sstrided_put,GA_SSTRIDED_PUT) #define ga_zstrided_put_ F77_FUNC_(ga_zstrided_put,GA_ZSTRIDED_PUT) #define nga_strided_put_ F77_FUNC_(nga_strided_put, NGA_STRIDED_PUT) #define nga_cstrided_put_ F77_FUNC_(nga_cstrided_put,NGA_CSTRIDED_PUT) #define nga_dstrided_put_ F77_FUNC_(nga_dstrided_put,NGA_DSTRIDED_PUT) #define nga_istrided_put_ F77_FUNC_(nga_istrided_put,NGA_ISTRIDED_PUT) #define nga_sstrided_put_ F77_FUNC_(nga_sstrided_put,NGA_SSTRIDED_PUT) #define nga_zstrided_put_ F77_FUNC_(nga_zstrided_put,NGA_ZSTRIDED_PUT) #define ga_sync_ F77_FUNC_(ga_sync, GA_SYNC) #define ga_csync_ F77_FUNC_(ga_csync,GA_CSYNC) #define ga_dsync_ F77_FUNC_(ga_dsync,GA_DSYNC) #define ga_isync_ F77_FUNC_(ga_isync,GA_ISYNC) #define ga_ssync_ F77_FUNC_(ga_ssync,GA_SSYNC) #define ga_zsync_ F77_FUNC_(ga_zsync,GA_ZSYNC) #define nga_sync_ F77_FUNC_(nga_sync, NGA_SYNC) #define nga_csync_ F77_FUNC_(nga_csync,NGA_CSYNC) #define nga_dsync_ F77_FUNC_(nga_dsync,NGA_DSYNC) #define nga_isync_ F77_FUNC_(nga_isync,NGA_ISYNC) #define nga_ssync_ F77_FUNC_(nga_ssync,NGA_SSYNC) #define nga_zsync_ F77_FUNC_(nga_zsync,NGA_ZSYNC) #define ga_wtime_ F77_FUNC_(ga_wtime, GA_WTIME) #define ga_cwtime_ F77_FUNC_(ga_cwtime,GA_CWTIME) #define ga_dwtime_ F77_FUNC_(ga_dwtime,GA_DWTIME) #define ga_iwtime_ F77_FUNC_(ga_iwtime,GA_IWTIME) #define ga_swtime_ F77_FUNC_(ga_swtime,GA_SWTIME) #define ga_zwtime_ F77_FUNC_(ga_zwtime,GA_ZWTIME) #define nga_wtime_ F77_FUNC_(nga_wtime, NGA_WTIME) #define nga_cwtime_ F77_FUNC_(nga_cwtime,NGA_CWTIME) #define nga_dwtime_ F77_FUNC_(nga_dwtime,NGA_DWTIME) #define nga_iwtime_ F77_FUNC_(nga_iwtime,NGA_IWTIME) #define nga_swtime_ F77_FUNC_(nga_swtime,NGA_SWTIME) #define nga_zwtime_ F77_FUNC_(nga_zwtime,NGA_ZWTIME) #define ga_type_f2c_ F77_FUNC_(ga_type_f2c, GA_TYPE_F2C) #define ga_ctype_f2c_ F77_FUNC_(ga_ctype_f2c,GA_CTYPE_F2C) #define ga_dtype_f2c_ F77_FUNC_(ga_dtype_f2c,GA_DTYPE_F2C) #define ga_itype_f2c_ F77_FUNC_(ga_itype_f2c,GA_ITYPE_F2C) #define ga_stype_f2c_ F77_FUNC_(ga_stype_f2c,GA_STYPE_F2C) #define ga_ztype_f2c_ F77_FUNC_(ga_ztype_f2c,GA_ZTYPE_F2C) #define nga_type_f2c_ F77_FUNC_(nga_type_f2c, NGA_TYPE_F2C) #define nga_ctype_f2c_ F77_FUNC_(nga_ctype_f2c,NGA_CTYPE_F2C) #define nga_dtype_f2c_ F77_FUNC_(nga_dtype_f2c,NGA_DTYPE_F2C) #define nga_itype_f2c_ F77_FUNC_(nga_itype_f2c,NGA_ITYPE_F2C) #define nga_stype_f2c_ F77_FUNC_(nga_stype_f2c,NGA_STYPE_F2C) #define nga_ztype_f2c_ F77_FUNC_(nga_ztype_f2c,NGA_ZTYPE_F2C) #define ga_type_c2f_ F77_FUNC_(ga_type_c2f, GA_TYPE_C2F) #define ga_ctype_c2f_ F77_FUNC_(ga_ctype_c2f,GA_CTYPE_C2F) #define ga_dtype_c2f_ F77_FUNC_(ga_dtype_c2f,GA_DTYPE_C2F) #define ga_itype_c2f_ F77_FUNC_(ga_itype_c2f,GA_ITYPE_C2F) #define ga_stype_c2f_ F77_FUNC_(ga_stype_c2f,GA_STYPE_C2F) #define ga_ztype_c2f_ F77_FUNC_(ga_ztype_c2f,GA_ZTYPE_C2F) #define nga_type_c2f_ F77_FUNC_(nga_type_c2f, NGA_TYPE_C2F) #define nga_ctype_c2f_ F77_FUNC_(nga_ctype_c2f,NGA_CTYPE_C2F) #define nga_dtype_c2f_ F77_FUNC_(nga_dtype_c2f,NGA_DTYPE_C2F) #define nga_itype_c2f_ F77_FUNC_(nga_itype_c2f,NGA_ITYPE_C2F) #define nga_stype_c2f_ F77_FUNC_(nga_stype_c2f,NGA_STYPE_C2F) #define nga_ztype_c2f_ F77_FUNC_(nga_ztype_c2f,NGA_ZTYPE_C2F) #define ga_msg_brdcst_ F77_FUNC_(ga_msg_brdcst, GA_MSG_BRDCST) #define ga_cmsg_brdcst_ F77_FUNC_(ga_cmsg_brdcst,GA_CMSG_BRDCST) #define ga_dmsg_brdcst_ F77_FUNC_(ga_dmsg_brdcst,GA_DMSG_BRDCST) #define ga_imsg_brdcst_ F77_FUNC_(ga_imsg_brdcst,GA_IMSG_BRDCST) #define ga_smsg_brdcst_ F77_FUNC_(ga_smsg_brdcst,GA_SMSG_BRDCST) #define ga_zmsg_brdcst_ F77_FUNC_(ga_zmsg_brdcst,GA_ZMSG_BRDCST) #define nga_msg_brdcst_ F77_FUNC_(nga_msg_brdcst, NGA_MSG_BRDCST) #define nga_cmsg_brdcst_ F77_FUNC_(nga_cmsg_brdcst,NGA_CMSG_BRDCST) #define nga_dmsg_brdcst_ F77_FUNC_(nga_dmsg_brdcst,NGA_DMSG_BRDCST) #define nga_imsg_brdcst_ F77_FUNC_(nga_imsg_brdcst,NGA_IMSG_BRDCST) #define nga_smsg_brdcst_ F77_FUNC_(nga_smsg_brdcst,NGA_SMSG_BRDCST) #define nga_zmsg_brdcst_ F77_FUNC_(nga_zmsg_brdcst,NGA_ZMSG_BRDCST) #define ga_brdcst_ F77_FUNC_(ga_brdcst, GA_BRDCST) #define ga_cbrdcst_ F77_FUNC_(ga_cbrdcst,GA_CBRDCST) #define ga_dbrdcst_ F77_FUNC_(ga_dbrdcst,GA_DBRDCST) #define ga_ibrdcst_ F77_FUNC_(ga_ibrdcst,GA_IBRDCST) #define ga_sbrdcst_ F77_FUNC_(ga_sbrdcst,GA_SBRDCST) #define ga_zbrdcst_ F77_FUNC_(ga_zbrdcst,GA_ZBRDCST) #define nga_brdcst_ F77_FUNC_(nga_brdcst, NGA_BRDCST) #define nga_cbrdcst_ F77_FUNC_(nga_cbrdcst,NGA_CBRDCST) #define nga_dbrdcst_ F77_FUNC_(nga_dbrdcst,NGA_DBRDCST) #define nga_ibrdcst_ F77_FUNC_(nga_ibrdcst,NGA_IBRDCST) #define nga_sbrdcst_ F77_FUNC_(nga_sbrdcst,NGA_SBRDCST) #define nga_zbrdcst_ F77_FUNC_(nga_zbrdcst,NGA_ZBRDCST) #define ga_pgroup_brdcst_ F77_FUNC_(ga_pgroup_brdcst, GA_PGROUP_BRDCST) #define ga_cpgroup_brdcst_ F77_FUNC_(ga_cpgroup_brdcst,GA_CPGROUP_BRDCST) #define ga_dpgroup_brdcst_ F77_FUNC_(ga_dpgroup_brdcst,GA_DPGROUP_BRDCST) #define ga_ipgroup_brdcst_ F77_FUNC_(ga_ipgroup_brdcst,GA_IPGROUP_BRDCST) #define ga_spgroup_brdcst_ F77_FUNC_(ga_spgroup_brdcst,GA_SPGROUP_BRDCST) #define ga_zpgroup_brdcst_ F77_FUNC_(ga_zpgroup_brdcst,GA_ZPGROUP_BRDCST) #define nga_pgroup_brdcst_ F77_FUNC_(nga_pgroup_brdcst, NGA_PGROUP_BRDCST) #define nga_cpgroup_brdcst_ F77_FUNC_(nga_cpgroup_brdcst,NGA_CPGROUP_BRDCST) #define nga_dpgroup_brdcst_ F77_FUNC_(nga_dpgroup_brdcst,NGA_DPGROUP_BRDCST) #define nga_ipgroup_brdcst_ F77_FUNC_(nga_ipgroup_brdcst,NGA_IPGROUP_BRDCST) #define nga_spgroup_brdcst_ F77_FUNC_(nga_spgroup_brdcst,NGA_SPGROUP_BRDCST) #define nga_zpgroup_brdcst_ F77_FUNC_(nga_zpgroup_brdcst,NGA_ZPGROUP_BRDCST) #define ga_msg_sync_ F77_FUNC_(ga_msg_sync, GA_MSG_SYNC) #define ga_cmsg_sync_ F77_FUNC_(ga_cmsg_sync,GA_CMSG_SYNC) #define ga_dmsg_sync_ F77_FUNC_(ga_dmsg_sync,GA_DMSG_SYNC) #define ga_imsg_sync_ F77_FUNC_(ga_imsg_sync,GA_IMSG_SYNC) #define ga_smsg_sync_ F77_FUNC_(ga_smsg_sync,GA_SMSG_SYNC) #define ga_zmsg_sync_ F77_FUNC_(ga_zmsg_sync,GA_ZMSG_SYNC) #define nga_msg_sync_ F77_FUNC_(nga_msg_sync, NGA_MSG_SYNC) #define nga_cmsg_sync_ F77_FUNC_(nga_cmsg_sync,NGA_CMSG_SYNC) #define nga_dmsg_sync_ F77_FUNC_(nga_dmsg_sync,NGA_DMSG_SYNC) #define nga_imsg_sync_ F77_FUNC_(nga_imsg_sync,NGA_IMSG_SYNC) #define nga_smsg_sync_ F77_FUNC_(nga_smsg_sync,NGA_SMSG_SYNC) #define nga_zmsg_sync_ F77_FUNC_(nga_zmsg_sync,NGA_ZMSG_SYNC) #define ga_msg_pgroup_sync_ F77_FUNC_(ga_msg_pgroup_sync, GA_MSG_PGROUP_SYNC) #define ga_cmsg_pgroup_sync_ F77_FUNC_(ga_cmsg_pgroup_sync,GA_CMSG_PGROUP_SYNC) #define ga_dmsg_pgroup_sync_ F77_FUNC_(ga_dmsg_pgroup_sync,GA_DMSG_PGROUP_SYNC) #define ga_imsg_pgroup_sync_ F77_FUNC_(ga_imsg_pgroup_sync,GA_IMSG_PGROUP_SYNC) #define ga_smsg_pgroup_sync_ F77_FUNC_(ga_smsg_pgroup_sync,GA_SMSG_PGROUP_SYNC) #define ga_zmsg_pgroup_sync_ F77_FUNC_(ga_zmsg_pgroup_sync,GA_ZMSG_PGROUP_SYNC) #define nga_msg_pgroup_sync_ F77_FUNC_(nga_msg_pgroup_sync, NGA_MSG_PGROUP_SYNC) #define nga_cmsg_pgroup_sync_ F77_FUNC_(nga_cmsg_pgroup_sync,NGA_CMSG_PGROUP_SYNC) #define nga_dmsg_pgroup_sync_ F77_FUNC_(nga_dmsg_pgroup_sync,NGA_DMSG_PGROUP_SYNC) #define nga_imsg_pgroup_sync_ F77_FUNC_(nga_imsg_pgroup_sync,NGA_IMSG_PGROUP_SYNC) #define nga_smsg_pgroup_sync_ F77_FUNC_(nga_smsg_pgroup_sync,NGA_SMSG_PGROUP_SYNC) #define nga_zmsg_pgroup_sync_ F77_FUNC_(nga_zmsg_pgroup_sync,NGA_ZMSG_PGROUP_SYNC) #define ga_pgroup_gop_ F77_FUNC_(ga_pgroup_gop, GA_PGROUP_GOP) #define ga_cpgroup_gop_ F77_FUNC_(ga_cpgroup_gop,GA_CPGROUP_GOP) #define ga_dpgroup_gop_ F77_FUNC_(ga_dpgroup_gop,GA_DPGROUP_GOP) #define ga_ipgroup_gop_ F77_FUNC_(ga_ipgroup_gop,GA_IPGROUP_GOP) #define ga_spgroup_gop_ F77_FUNC_(ga_spgroup_gop,GA_SPGROUP_GOP) #define ga_zpgroup_gop_ F77_FUNC_(ga_zpgroup_gop,GA_ZPGROUP_GOP) #define nga_pgroup_gop_ F77_FUNC_(nga_pgroup_gop, NGA_PGROUP_GOP) #define nga_cpgroup_gop_ F77_FUNC_(nga_cpgroup_gop,NGA_CPGROUP_GOP) #define nga_dpgroup_gop_ F77_FUNC_(nga_dpgroup_gop,NGA_DPGROUP_GOP) #define nga_ipgroup_gop_ F77_FUNC_(nga_ipgroup_gop,NGA_IPGROUP_GOP) #define nga_spgroup_gop_ F77_FUNC_(nga_spgroup_gop,NGA_SPGROUP_GOP) #define nga_zpgroup_gop_ F77_FUNC_(nga_zpgroup_gop,NGA_ZPGROUP_GOP) #define ga_gop_ F77_FUNC_(ga_gop, GA_GOP) #define ga_cgop_ F77_FUNC_(ga_cgop,GA_CGOP) #define ga_dgop_ F77_FUNC_(ga_dgop,GA_DGOP) #define ga_igop_ F77_FUNC_(ga_igop,GA_IGOP) #define ga_sgop_ F77_FUNC_(ga_sgop,GA_SGOP) #define ga_zgop_ F77_FUNC_(ga_zgop,GA_ZGOP) #define nga_gop_ F77_FUNC_(nga_gop, NGA_GOP) #define nga_cgop_ F77_FUNC_(nga_cgop,NGA_CGOP) #define nga_dgop_ F77_FUNC_(nga_dgop,NGA_DGOP) #define nga_igop_ F77_FUNC_(nga_igop,NGA_IGOP) #define nga_sgop_ F77_FUNC_(nga_sgop,NGA_SGOP) #define nga_zgop_ F77_FUNC_(nga_zgop,NGA_ZGOP) #define ga_abs_value_patch_ F77_FUNC_(ga_abs_value_patch, GA_ABS_VALUE_PATCH) #define ga_cabs_value_patch_ F77_FUNC_(ga_cabs_value_patch,GA_CABS_VALUE_PATCH) #define ga_dabs_value_patch_ F77_FUNC_(ga_dabs_value_patch,GA_DABS_VALUE_PATCH) #define ga_iabs_value_patch_ F77_FUNC_(ga_iabs_value_patch,GA_IABS_VALUE_PATCH) #define ga_sabs_value_patch_ F77_FUNC_(ga_sabs_value_patch,GA_SABS_VALUE_PATCH) #define ga_zabs_value_patch_ F77_FUNC_(ga_zabs_value_patch,GA_ZABS_VALUE_PATCH) #define nga_abs_value_patch_ F77_FUNC_(nga_abs_value_patch, NGA_ABS_VALUE_PATCH) #define nga_cabs_value_patch_ F77_FUNC_(nga_cabs_value_patch,NGA_CABS_VALUE_PATCH) #define nga_dabs_value_patch_ F77_FUNC_(nga_dabs_value_patch,NGA_DABS_VALUE_PATCH) #define nga_iabs_value_patch_ F77_FUNC_(nga_iabs_value_patch,NGA_IABS_VALUE_PATCH) #define nga_sabs_value_patch_ F77_FUNC_(nga_sabs_value_patch,NGA_SABS_VALUE_PATCH) #define nga_zabs_value_patch_ F77_FUNC_(nga_zabs_value_patch,NGA_ZABS_VALUE_PATCH) #define ga_recip_patch_ F77_FUNC_(ga_recip_patch, GA_RECIP_PATCH) #define ga_crecip_patch_ F77_FUNC_(ga_crecip_patch,GA_CRECIP_PATCH) #define ga_drecip_patch_ F77_FUNC_(ga_drecip_patch,GA_DRECIP_PATCH) #define ga_irecip_patch_ F77_FUNC_(ga_irecip_patch,GA_IRECIP_PATCH) #define ga_srecip_patch_ F77_FUNC_(ga_srecip_patch,GA_SRECIP_PATCH) #define ga_zrecip_patch_ F77_FUNC_(ga_zrecip_patch,GA_ZRECIP_PATCH) #define nga_recip_patch_ F77_FUNC_(nga_recip_patch, NGA_RECIP_PATCH) #define nga_crecip_patch_ F77_FUNC_(nga_crecip_patch,NGA_CRECIP_PATCH) #define nga_drecip_patch_ F77_FUNC_(nga_drecip_patch,NGA_DRECIP_PATCH) #define nga_irecip_patch_ F77_FUNC_(nga_irecip_patch,NGA_IRECIP_PATCH) #define nga_srecip_patch_ F77_FUNC_(nga_srecip_patch,NGA_SRECIP_PATCH) #define nga_zrecip_patch_ F77_FUNC_(nga_zrecip_patch,NGA_ZRECIP_PATCH) #define ga_add_constant_patch_ F77_FUNC_(ga_add_constant_patch, GA_ADD_CONSTANT_PATCH) #define ga_cadd_constant_patch_ F77_FUNC_(ga_cadd_constant_patch,GA_CADD_CONSTANT_PATCH) #define ga_dadd_constant_patch_ F77_FUNC_(ga_dadd_constant_patch,GA_DADD_CONSTANT_PATCH) #define ga_iadd_constant_patch_ F77_FUNC_(ga_iadd_constant_patch,GA_IADD_CONSTANT_PATCH) #define ga_sadd_constant_patch_ F77_FUNC_(ga_sadd_constant_patch,GA_SADD_CONSTANT_PATCH) #define ga_zadd_constant_patch_ F77_FUNC_(ga_zadd_constant_patch,GA_ZADD_CONSTANT_PATCH) #define nga_add_constant_patch_ F77_FUNC_(nga_add_constant_patch, NGA_ADD_CONSTANT_PATCH) #define nga_cadd_constant_patch_ F77_FUNC_(nga_cadd_constant_patch,NGA_CADD_CONSTANT_PATCH) #define nga_dadd_constant_patch_ F77_FUNC_(nga_dadd_constant_patch,NGA_DADD_CONSTANT_PATCH) #define nga_iadd_constant_patch_ F77_FUNC_(nga_iadd_constant_patch,NGA_IADD_CONSTANT_PATCH) #define nga_sadd_constant_patch_ F77_FUNC_(nga_sadd_constant_patch,NGA_SADD_CONSTANT_PATCH) #define nga_zadd_constant_patch_ F77_FUNC_(nga_zadd_constant_patch,NGA_ZADD_CONSTANT_PATCH) #define ga_abs_value_ F77_FUNC_(ga_abs_value, GA_ABS_VALUE) #define ga_cabs_value_ F77_FUNC_(ga_cabs_value,GA_CABS_VALUE) #define ga_dabs_value_ F77_FUNC_(ga_dabs_value,GA_DABS_VALUE) #define ga_iabs_value_ F77_FUNC_(ga_iabs_value,GA_IABS_VALUE) #define ga_sabs_value_ F77_FUNC_(ga_sabs_value,GA_SABS_VALUE) #define ga_zabs_value_ F77_FUNC_(ga_zabs_value,GA_ZABS_VALUE) #define nga_abs_value_ F77_FUNC_(nga_abs_value, NGA_ABS_VALUE) #define nga_cabs_value_ F77_FUNC_(nga_cabs_value,NGA_CABS_VALUE) #define nga_dabs_value_ F77_FUNC_(nga_dabs_value,NGA_DABS_VALUE) #define nga_iabs_value_ F77_FUNC_(nga_iabs_value,NGA_IABS_VALUE) #define nga_sabs_value_ F77_FUNC_(nga_sabs_value,NGA_SABS_VALUE) #define nga_zabs_value_ F77_FUNC_(nga_zabs_value,NGA_ZABS_VALUE) #define ga_add_constant_ F77_FUNC_(ga_add_constant, GA_ADD_CONSTANT) #define ga_cadd_constant_ F77_FUNC_(ga_cadd_constant,GA_CADD_CONSTANT) #define ga_dadd_constant_ F77_FUNC_(ga_dadd_constant,GA_DADD_CONSTANT) #define ga_iadd_constant_ F77_FUNC_(ga_iadd_constant,GA_IADD_CONSTANT) #define ga_sadd_constant_ F77_FUNC_(ga_sadd_constant,GA_SADD_CONSTANT) #define ga_zadd_constant_ F77_FUNC_(ga_zadd_constant,GA_ZADD_CONSTANT) #define nga_add_constant_ F77_FUNC_(nga_add_constant, NGA_ADD_CONSTANT) #define nga_cadd_constant_ F77_FUNC_(nga_cadd_constant,NGA_CADD_CONSTANT) #define nga_dadd_constant_ F77_FUNC_(nga_dadd_constant,NGA_DADD_CONSTANT) #define nga_iadd_constant_ F77_FUNC_(nga_iadd_constant,NGA_IADD_CONSTANT) #define nga_sadd_constant_ F77_FUNC_(nga_sadd_constant,NGA_SADD_CONSTANT) #define nga_zadd_constant_ F77_FUNC_(nga_zadd_constant,NGA_ZADD_CONSTANT) #define ga_recip_ F77_FUNC_(ga_recip, GA_RECIP) #define ga_crecip_ F77_FUNC_(ga_crecip,GA_CRECIP) #define ga_drecip_ F77_FUNC_(ga_drecip,GA_DRECIP) #define ga_irecip_ F77_FUNC_(ga_irecip,GA_IRECIP) #define ga_srecip_ F77_FUNC_(ga_srecip,GA_SRECIP) #define ga_zrecip_ F77_FUNC_(ga_zrecip,GA_ZRECIP) #define nga_recip_ F77_FUNC_(nga_recip, NGA_RECIP) #define nga_crecip_ F77_FUNC_(nga_crecip,NGA_CRECIP) #define nga_drecip_ F77_FUNC_(nga_drecip,NGA_DRECIP) #define nga_irecip_ F77_FUNC_(nga_irecip,NGA_IRECIP) #define nga_srecip_ F77_FUNC_(nga_srecip,NGA_SRECIP) #define nga_zrecip_ F77_FUNC_(nga_zrecip,NGA_ZRECIP) #define ga_elem_multiply_ F77_FUNC_(ga_elem_multiply, GA_ELEM_MULTIPLY) #define ga_celem_multiply_ F77_FUNC_(ga_celem_multiply,GA_CELEM_MULTIPLY) #define ga_delem_multiply_ F77_FUNC_(ga_delem_multiply,GA_DELEM_MULTIPLY) #define ga_ielem_multiply_ F77_FUNC_(ga_ielem_multiply,GA_IELEM_MULTIPLY) #define ga_selem_multiply_ F77_FUNC_(ga_selem_multiply,GA_SELEM_MULTIPLY) #define ga_zelem_multiply_ F77_FUNC_(ga_zelem_multiply,GA_ZELEM_MULTIPLY) #define nga_elem_multiply_ F77_FUNC_(nga_elem_multiply, NGA_ELEM_MULTIPLY) #define nga_celem_multiply_ F77_FUNC_(nga_celem_multiply,NGA_CELEM_MULTIPLY) #define nga_delem_multiply_ F77_FUNC_(nga_delem_multiply,NGA_DELEM_MULTIPLY) #define nga_ielem_multiply_ F77_FUNC_(nga_ielem_multiply,NGA_IELEM_MULTIPLY) #define nga_selem_multiply_ F77_FUNC_(nga_selem_multiply,NGA_SELEM_MULTIPLY) #define nga_zelem_multiply_ F77_FUNC_(nga_zelem_multiply,NGA_ZELEM_MULTIPLY) #define ga_elem_divide_ F77_FUNC_(ga_elem_divide, GA_ELEM_DIVIDE) #define ga_celem_divide_ F77_FUNC_(ga_celem_divide,GA_CELEM_DIVIDE) #define ga_delem_divide_ F77_FUNC_(ga_delem_divide,GA_DELEM_DIVIDE) #define ga_ielem_divide_ F77_FUNC_(ga_ielem_divide,GA_IELEM_DIVIDE) #define ga_selem_divide_ F77_FUNC_(ga_selem_divide,GA_SELEM_DIVIDE) #define ga_zelem_divide_ F77_FUNC_(ga_zelem_divide,GA_ZELEM_DIVIDE) #define nga_elem_divide_ F77_FUNC_(nga_elem_divide, NGA_ELEM_DIVIDE) #define nga_celem_divide_ F77_FUNC_(nga_celem_divide,NGA_CELEM_DIVIDE) #define nga_delem_divide_ F77_FUNC_(nga_delem_divide,NGA_DELEM_DIVIDE) #define nga_ielem_divide_ F77_FUNC_(nga_ielem_divide,NGA_IELEM_DIVIDE) #define nga_selem_divide_ F77_FUNC_(nga_selem_divide,NGA_SELEM_DIVIDE) #define nga_zelem_divide_ F77_FUNC_(nga_zelem_divide,NGA_ZELEM_DIVIDE) #define ga_elem_maximum_ F77_FUNC_(ga_elem_maximum, GA_ELEM_MAXIMUM) #define ga_celem_maximum_ F77_FUNC_(ga_celem_maximum,GA_CELEM_MAXIMUM) #define ga_delem_maximum_ F77_FUNC_(ga_delem_maximum,GA_DELEM_MAXIMUM) #define ga_ielem_maximum_ F77_FUNC_(ga_ielem_maximum,GA_IELEM_MAXIMUM) #define ga_selem_maximum_ F77_FUNC_(ga_selem_maximum,GA_SELEM_MAXIMUM) #define ga_zelem_maximum_ F77_FUNC_(ga_zelem_maximum,GA_ZELEM_MAXIMUM) #define nga_elem_maximum_ F77_FUNC_(nga_elem_maximum, NGA_ELEM_MAXIMUM) #define nga_celem_maximum_ F77_FUNC_(nga_celem_maximum,NGA_CELEM_MAXIMUM) #define nga_delem_maximum_ F77_FUNC_(nga_delem_maximum,NGA_DELEM_MAXIMUM) #define nga_ielem_maximum_ F77_FUNC_(nga_ielem_maximum,NGA_IELEM_MAXIMUM) #define nga_selem_maximum_ F77_FUNC_(nga_selem_maximum,NGA_SELEM_MAXIMUM) #define nga_zelem_maximum_ F77_FUNC_(nga_zelem_maximum,NGA_ZELEM_MAXIMUM) #define ga_elem_minimum_ F77_FUNC_(ga_elem_minimum, GA_ELEM_MINIMUM) #define ga_celem_minimum_ F77_FUNC_(ga_celem_minimum,GA_CELEM_MINIMUM) #define ga_delem_minimum_ F77_FUNC_(ga_delem_minimum,GA_DELEM_MINIMUM) #define ga_ielem_minimum_ F77_FUNC_(ga_ielem_minimum,GA_IELEM_MINIMUM) #define ga_selem_minimum_ F77_FUNC_(ga_selem_minimum,GA_SELEM_MINIMUM) #define ga_zelem_minimum_ F77_FUNC_(ga_zelem_minimum,GA_ZELEM_MINIMUM) #define nga_elem_minimum_ F77_FUNC_(nga_elem_minimum, NGA_ELEM_MINIMUM) #define nga_celem_minimum_ F77_FUNC_(nga_celem_minimum,NGA_CELEM_MINIMUM) #define nga_delem_minimum_ F77_FUNC_(nga_delem_minimum,NGA_DELEM_MINIMUM) #define nga_ielem_minimum_ F77_FUNC_(nga_ielem_minimum,NGA_IELEM_MINIMUM) #define nga_selem_minimum_ F77_FUNC_(nga_selem_minimum,NGA_SELEM_MINIMUM) #define nga_zelem_minimum_ F77_FUNC_(nga_zelem_minimum,NGA_ZELEM_MINIMUM) #define ga_elem_multiply_patch_ F77_FUNC_(ga_elem_multiply_patch, GA_ELEM_MULTIPLY_PATCH) #define ga_celem_multiply_patch_ F77_FUNC_(ga_celem_multiply_patch,GA_CELEM_MULTIPLY_PATCH) #define ga_delem_multiply_patch_ F77_FUNC_(ga_delem_multiply_patch,GA_DELEM_MULTIPLY_PATCH) #define ga_ielem_multiply_patch_ F77_FUNC_(ga_ielem_multiply_patch,GA_IELEM_MULTIPLY_PATCH) #define ga_selem_multiply_patch_ F77_FUNC_(ga_selem_multiply_patch,GA_SELEM_MULTIPLY_PATCH) #define ga_zelem_multiply_patch_ F77_FUNC_(ga_zelem_multiply_patch,GA_ZELEM_MULTIPLY_PATCH) #define nga_elem_multiply_patch_ F77_FUNC_(nga_elem_multiply_patch, NGA_ELEM_MULTIPLY_PATCH) #define nga_celem_multiply_patch_ F77_FUNC_(nga_celem_multiply_patch,NGA_CELEM_MULTIPLY_PATCH) #define nga_delem_multiply_patch_ F77_FUNC_(nga_delem_multiply_patch,NGA_DELEM_MULTIPLY_PATCH) #define nga_ielem_multiply_patch_ F77_FUNC_(nga_ielem_multiply_patch,NGA_IELEM_MULTIPLY_PATCH) #define nga_selem_multiply_patch_ F77_FUNC_(nga_selem_multiply_patch,NGA_SELEM_MULTIPLY_PATCH) #define nga_zelem_multiply_patch_ F77_FUNC_(nga_zelem_multiply_patch,NGA_ZELEM_MULTIPLY_PATCH) #define ga_elem_divide_patch_ F77_FUNC_(ga_elem_divide_patch, GA_ELEM_DIVIDE_PATCH) #define ga_celem_divide_patch_ F77_FUNC_(ga_celem_divide_patch,GA_CELEM_DIVIDE_PATCH) #define ga_delem_divide_patch_ F77_FUNC_(ga_delem_divide_patch,GA_DELEM_DIVIDE_PATCH) #define ga_ielem_divide_patch_ F77_FUNC_(ga_ielem_divide_patch,GA_IELEM_DIVIDE_PATCH) #define ga_selem_divide_patch_ F77_FUNC_(ga_selem_divide_patch,GA_SELEM_DIVIDE_PATCH) #define ga_zelem_divide_patch_ F77_FUNC_(ga_zelem_divide_patch,GA_ZELEM_DIVIDE_PATCH) #define nga_elem_divide_patch_ F77_FUNC_(nga_elem_divide_patch, NGA_ELEM_DIVIDE_PATCH) #define nga_celem_divide_patch_ F77_FUNC_(nga_celem_divide_patch,NGA_CELEM_DIVIDE_PATCH) #define nga_delem_divide_patch_ F77_FUNC_(nga_delem_divide_patch,NGA_DELEM_DIVIDE_PATCH) #define nga_ielem_divide_patch_ F77_FUNC_(nga_ielem_divide_patch,NGA_IELEM_DIVIDE_PATCH) #define nga_selem_divide_patch_ F77_FUNC_(nga_selem_divide_patch,NGA_SELEM_DIVIDE_PATCH) #define nga_zelem_divide_patch_ F77_FUNC_(nga_zelem_divide_patch,NGA_ZELEM_DIVIDE_PATCH) #define ga_elem_maximum_patch_ F77_FUNC_(ga_elem_maximum_patch, GA_ELEM_MAXIMUM_PATCH) #define ga_celem_maximum_patch_ F77_FUNC_(ga_celem_maximum_patch,GA_CELEM_MAXIMUM_PATCH) #define ga_delem_maximum_patch_ F77_FUNC_(ga_delem_maximum_patch,GA_DELEM_MAXIMUM_PATCH) #define ga_ielem_maximum_patch_ F77_FUNC_(ga_ielem_maximum_patch,GA_IELEM_MAXIMUM_PATCH) #define ga_selem_maximum_patch_ F77_FUNC_(ga_selem_maximum_patch,GA_SELEM_MAXIMUM_PATCH) #define ga_zelem_maximum_patch_ F77_FUNC_(ga_zelem_maximum_patch,GA_ZELEM_MAXIMUM_PATCH) #define nga_elem_maximum_patch_ F77_FUNC_(nga_elem_maximum_patch, NGA_ELEM_MAXIMUM_PATCH) #define nga_celem_maximum_patch_ F77_FUNC_(nga_celem_maximum_patch,NGA_CELEM_MAXIMUM_PATCH) #define nga_delem_maximum_patch_ F77_FUNC_(nga_delem_maximum_patch,NGA_DELEM_MAXIMUM_PATCH) #define nga_ielem_maximum_patch_ F77_FUNC_(nga_ielem_maximum_patch,NGA_IELEM_MAXIMUM_PATCH) #define nga_selem_maximum_patch_ F77_FUNC_(nga_selem_maximum_patch,NGA_SELEM_MAXIMUM_PATCH) #define nga_zelem_maximum_patch_ F77_FUNC_(nga_zelem_maximum_patch,NGA_ZELEM_MAXIMUM_PATCH) #define ga_elem_minimum_patch_ F77_FUNC_(ga_elem_minimum_patch, GA_ELEM_MINIMUM_PATCH) #define ga_celem_minimum_patch_ F77_FUNC_(ga_celem_minimum_patch,GA_CELEM_MINIMUM_PATCH) #define ga_delem_minimum_patch_ F77_FUNC_(ga_delem_minimum_patch,GA_DELEM_MINIMUM_PATCH) #define ga_ielem_minimum_patch_ F77_FUNC_(ga_ielem_minimum_patch,GA_IELEM_MINIMUM_PATCH) #define ga_selem_minimum_patch_ F77_FUNC_(ga_selem_minimum_patch,GA_SELEM_MINIMUM_PATCH) #define ga_zelem_minimum_patch_ F77_FUNC_(ga_zelem_minimum_patch,GA_ZELEM_MINIMUM_PATCH) #define nga_elem_minimum_patch_ F77_FUNC_(nga_elem_minimum_patch, NGA_ELEM_MINIMUM_PATCH) #define nga_celem_minimum_patch_ F77_FUNC_(nga_celem_minimum_patch,NGA_CELEM_MINIMUM_PATCH) #define nga_delem_minimum_patch_ F77_FUNC_(nga_delem_minimum_patch,NGA_DELEM_MINIMUM_PATCH) #define nga_ielem_minimum_patch_ F77_FUNC_(nga_ielem_minimum_patch,NGA_IELEM_MINIMUM_PATCH) #define nga_selem_minimum_patch_ F77_FUNC_(nga_selem_minimum_patch,NGA_SELEM_MINIMUM_PATCH) #define nga_zelem_minimum_patch_ F77_FUNC_(nga_zelem_minimum_patch,NGA_ZELEM_MINIMUM_PATCH) #define ga_elem_step_divide_patch_ F77_FUNC_(ga_elem_step_divide_patch, GA_ELEM_STEP_DIVIDE_PATCH) #define ga_celem_step_divide_patch_ F77_FUNC_(ga_celem_step_divide_patch,GA_CELEM_STEP_DIVIDE_PATCH) #define ga_delem_step_divide_patch_ F77_FUNC_(ga_delem_step_divide_patch,GA_DELEM_STEP_DIVIDE_PATCH) #define ga_ielem_step_divide_patch_ F77_FUNC_(ga_ielem_step_divide_patch,GA_IELEM_STEP_DIVIDE_PATCH) #define ga_selem_step_divide_patch_ F77_FUNC_(ga_selem_step_divide_patch,GA_SELEM_STEP_DIVIDE_PATCH) #define ga_zelem_step_divide_patch_ F77_FUNC_(ga_zelem_step_divide_patch,GA_ZELEM_STEP_DIVIDE_PATCH) #define nga_elem_step_divide_patch_ F77_FUNC_(nga_elem_step_divide_patch, NGA_ELEM_STEP_DIVIDE_PATCH) #define nga_celem_step_divide_patch_ F77_FUNC_(nga_celem_step_divide_patch,NGA_CELEM_STEP_DIVIDE_PATCH) #define nga_delem_step_divide_patch_ F77_FUNC_(nga_delem_step_divide_patch,NGA_DELEM_STEP_DIVIDE_PATCH) #define nga_ielem_step_divide_patch_ F77_FUNC_(nga_ielem_step_divide_patch,NGA_IELEM_STEP_DIVIDE_PATCH) #define nga_selem_step_divide_patch_ F77_FUNC_(nga_selem_step_divide_patch,NGA_SELEM_STEP_DIVIDE_PATCH) #define nga_zelem_step_divide_patch_ F77_FUNC_(nga_zelem_step_divide_patch,NGA_ZELEM_STEP_DIVIDE_PATCH) #define ga_elem_stepb_divide_patch_ F77_FUNC_(ga_elem_stepb_divide_patch, GA_ELEM_STEPB_DIVIDE_PATCH) #define ga_celem_stepb_divide_patch_ F77_FUNC_(ga_celem_stepb_divide_patch,GA_CELEM_STEPB_DIVIDE_PATCH) #define ga_delem_stepb_divide_patch_ F77_FUNC_(ga_delem_stepb_divide_patch,GA_DELEM_STEPB_DIVIDE_PATCH) #define ga_ielem_stepb_divide_patch_ F77_FUNC_(ga_ielem_stepb_divide_patch,GA_IELEM_STEPB_DIVIDE_PATCH) #define ga_selem_stepb_divide_patch_ F77_FUNC_(ga_selem_stepb_divide_patch,GA_SELEM_STEPB_DIVIDE_PATCH) #define ga_zelem_stepb_divide_patch_ F77_FUNC_(ga_zelem_stepb_divide_patch,GA_ZELEM_STEPB_DIVIDE_PATCH) #define nga_elem_stepb_divide_patch_ F77_FUNC_(nga_elem_stepb_divide_patch, NGA_ELEM_STEPB_DIVIDE_PATCH) #define nga_celem_stepb_divide_patch_ F77_FUNC_(nga_celem_stepb_divide_patch,NGA_CELEM_STEPB_DIVIDE_PATCH) #define nga_delem_stepb_divide_patch_ F77_FUNC_(nga_delem_stepb_divide_patch,NGA_DELEM_STEPB_DIVIDE_PATCH) #define nga_ielem_stepb_divide_patch_ F77_FUNC_(nga_ielem_stepb_divide_patch,NGA_IELEM_STEPB_DIVIDE_PATCH) #define nga_selem_stepb_divide_patch_ F77_FUNC_(nga_selem_stepb_divide_patch,NGA_SELEM_STEPB_DIVIDE_PATCH) #define nga_zelem_stepb_divide_patch_ F77_FUNC_(nga_zelem_stepb_divide_patch,NGA_ZELEM_STEPB_DIVIDE_PATCH) #define ga_step_mask_patch_ F77_FUNC_(ga_step_mask_patch, GA_STEP_MASK_PATCH) #define ga_cstep_mask_patch_ F77_FUNC_(ga_cstep_mask_patch,GA_CSTEP_MASK_PATCH) #define ga_dstep_mask_patch_ F77_FUNC_(ga_dstep_mask_patch,GA_DSTEP_MASK_PATCH) #define ga_istep_mask_patch_ F77_FUNC_(ga_istep_mask_patch,GA_ISTEP_MASK_PATCH) #define ga_sstep_mask_patch_ F77_FUNC_(ga_sstep_mask_patch,GA_SSTEP_MASK_PATCH) #define ga_zstep_mask_patch_ F77_FUNC_(ga_zstep_mask_patch,GA_ZSTEP_MASK_PATCH) #define nga_step_mask_patch_ F77_FUNC_(nga_step_mask_patch, NGA_STEP_MASK_PATCH) #define nga_cstep_mask_patch_ F77_FUNC_(nga_cstep_mask_patch,NGA_CSTEP_MASK_PATCH) #define nga_dstep_mask_patch_ F77_FUNC_(nga_dstep_mask_patch,NGA_DSTEP_MASK_PATCH) #define nga_istep_mask_patch_ F77_FUNC_(nga_istep_mask_patch,NGA_ISTEP_MASK_PATCH) #define nga_sstep_mask_patch_ F77_FUNC_(nga_sstep_mask_patch,NGA_SSTEP_MASK_PATCH) #define nga_zstep_mask_patch_ F77_FUNC_(nga_zstep_mask_patch,NGA_ZSTEP_MASK_PATCH) #define ga_step_bound_info_patch_ F77_FUNC_(ga_step_bound_info_patch, GA_STEP_BOUND_INFO_PATCH) #define ga_cstep_bound_info_patch_ F77_FUNC_(ga_cstep_bound_info_patch,GA_CSTEP_BOUND_INFO_PATCH) #define ga_dstep_bound_info_patch_ F77_FUNC_(ga_dstep_bound_info_patch,GA_DSTEP_BOUND_INFO_PATCH) #define ga_istep_bound_info_patch_ F77_FUNC_(ga_istep_bound_info_patch,GA_ISTEP_BOUND_INFO_PATCH) #define ga_sstep_bound_info_patch_ F77_FUNC_(ga_sstep_bound_info_patch,GA_SSTEP_BOUND_INFO_PATCH) #define ga_zstep_bound_info_patch_ F77_FUNC_(ga_zstep_bound_info_patch,GA_ZSTEP_BOUND_INFO_PATCH) #define nga_step_bound_info_patch_ F77_FUNC_(nga_step_bound_info_patch, NGA_STEP_BOUND_INFO_PATCH) #define nga_cstep_bound_info_patch_ F77_FUNC_(nga_cstep_bound_info_patch,NGA_CSTEP_BOUND_INFO_PATCH) #define nga_dstep_bound_info_patch_ F77_FUNC_(nga_dstep_bound_info_patch,NGA_DSTEP_BOUND_INFO_PATCH) #define nga_istep_bound_info_patch_ F77_FUNC_(nga_istep_bound_info_patch,NGA_ISTEP_BOUND_INFO_PATCH) #define nga_sstep_bound_info_patch_ F77_FUNC_(nga_sstep_bound_info_patch,NGA_SSTEP_BOUND_INFO_PATCH) #define nga_zstep_bound_info_patch_ F77_FUNC_(nga_zstep_bound_info_patch,NGA_ZSTEP_BOUND_INFO_PATCH) #define ga_step_max_patch_ F77_FUNC_(ga_step_max_patch, GA_STEP_MAX_PATCH) #define ga_cstep_max_patch_ F77_FUNC_(ga_cstep_max_patch,GA_CSTEP_MAX_PATCH) #define ga_dstep_max_patch_ F77_FUNC_(ga_dstep_max_patch,GA_DSTEP_MAX_PATCH) #define ga_istep_max_patch_ F77_FUNC_(ga_istep_max_patch,GA_ISTEP_MAX_PATCH) #define ga_sstep_max_patch_ F77_FUNC_(ga_sstep_max_patch,GA_SSTEP_MAX_PATCH) #define ga_zstep_max_patch_ F77_FUNC_(ga_zstep_max_patch,GA_ZSTEP_MAX_PATCH) #define nga_step_max_patch_ F77_FUNC_(nga_step_max_patch, NGA_STEP_MAX_PATCH) #define nga_cstep_max_patch_ F77_FUNC_(nga_cstep_max_patch,NGA_CSTEP_MAX_PATCH) #define nga_dstep_max_patch_ F77_FUNC_(nga_dstep_max_patch,NGA_DSTEP_MAX_PATCH) #define nga_istep_max_patch_ F77_FUNC_(nga_istep_max_patch,NGA_ISTEP_MAX_PATCH) #define nga_sstep_max_patch_ F77_FUNC_(nga_sstep_max_patch,NGA_SSTEP_MAX_PATCH) #define nga_zstep_max_patch_ F77_FUNC_(nga_zstep_max_patch,NGA_ZSTEP_MAX_PATCH) #define ga_step_max_ F77_FUNC_(ga_step_max, GA_STEP_MAX) #define ga_cstep_max_ F77_FUNC_(ga_cstep_max,GA_CSTEP_MAX) #define ga_dstep_max_ F77_FUNC_(ga_dstep_max,GA_DSTEP_MAX) #define ga_istep_max_ F77_FUNC_(ga_istep_max,GA_ISTEP_MAX) #define ga_sstep_max_ F77_FUNC_(ga_sstep_max,GA_SSTEP_MAX) #define ga_zstep_max_ F77_FUNC_(ga_zstep_max,GA_ZSTEP_MAX) #define nga_step_max_ F77_FUNC_(nga_step_max, NGA_STEP_MAX) #define nga_cstep_max_ F77_FUNC_(nga_cstep_max,NGA_CSTEP_MAX) #define nga_dstep_max_ F77_FUNC_(nga_dstep_max,NGA_DSTEP_MAX) #define nga_istep_max_ F77_FUNC_(nga_istep_max,NGA_ISTEP_MAX) #define nga_sstep_max_ F77_FUNC_(nga_sstep_max,NGA_SSTEP_MAX) #define nga_zstep_max_ F77_FUNC_(nga_zstep_max,NGA_ZSTEP_MAX) #define ga_step_bound_info_ F77_FUNC_(ga_step_bound_info, GA_STEP_BOUND_INFO) #define ga_cstep_bound_info_ F77_FUNC_(ga_cstep_bound_info,GA_CSTEP_BOUND_INFO) #define ga_dstep_bound_info_ F77_FUNC_(ga_dstep_bound_info,GA_DSTEP_BOUND_INFO) #define ga_istep_bound_info_ F77_FUNC_(ga_istep_bound_info,GA_ISTEP_BOUND_INFO) #define ga_sstep_bound_info_ F77_FUNC_(ga_sstep_bound_info,GA_SSTEP_BOUND_INFO) #define ga_zstep_bound_info_ F77_FUNC_(ga_zstep_bound_info,GA_ZSTEP_BOUND_INFO) #define nga_step_bound_info_ F77_FUNC_(nga_step_bound_info, NGA_STEP_BOUND_INFO) #define nga_cstep_bound_info_ F77_FUNC_(nga_cstep_bound_info,NGA_CSTEP_BOUND_INFO) #define nga_dstep_bound_info_ F77_FUNC_(nga_dstep_bound_info,NGA_DSTEP_BOUND_INFO) #define nga_istep_bound_info_ F77_FUNC_(nga_istep_bound_info,NGA_ISTEP_BOUND_INFO) #define nga_sstep_bound_info_ F77_FUNC_(nga_sstep_bound_info,NGA_SSTEP_BOUND_INFO) #define nga_zstep_bound_info_ F77_FUNC_(nga_zstep_bound_info,NGA_ZSTEP_BOUND_INFO) #define ga_lu_solve_seq_ F77_FUNC_(ga_lu_solve_seq, GA_LU_SOLVE_SEQ) #define ga_clu_solve_seq_ F77_FUNC_(ga_clu_solve_seq,GA_CLU_SOLVE_SEQ) #define ga_dlu_solve_seq_ F77_FUNC_(ga_dlu_solve_seq,GA_DLU_SOLVE_SEQ) #define ga_ilu_solve_seq_ F77_FUNC_(ga_ilu_solve_seq,GA_ILU_SOLVE_SEQ) #define ga_slu_solve_seq_ F77_FUNC_(ga_slu_solve_seq,GA_SLU_SOLVE_SEQ) #define ga_zlu_solve_seq_ F77_FUNC_(ga_zlu_solve_seq,GA_ZLU_SOLVE_SEQ) #define nga_lu_solve_seq_ F77_FUNC_(nga_lu_solve_seq, NGA_LU_SOLVE_SEQ) #define nga_clu_solve_seq_ F77_FUNC_(nga_clu_solve_seq,NGA_CLU_SOLVE_SEQ) #define nga_dlu_solve_seq_ F77_FUNC_(nga_dlu_solve_seq,NGA_DLU_SOLVE_SEQ) #define nga_ilu_solve_seq_ F77_FUNC_(nga_ilu_solve_seq,NGA_ILU_SOLVE_SEQ) #define nga_slu_solve_seq_ F77_FUNC_(nga_slu_solve_seq,NGA_SLU_SOLVE_SEQ) #define nga_zlu_solve_seq_ F77_FUNC_(nga_zlu_solve_seq,NGA_ZLU_SOLVE_SEQ) #define ga_print_stats_ F77_FUNC_(ga_print_stats, GA_PRINT_STATS) #define ga_cprint_stats_ F77_FUNC_(ga_cprint_stats,GA_CPRINT_STATS) #define ga_dprint_stats_ F77_FUNC_(ga_dprint_stats,GA_DPRINT_STATS) #define ga_iprint_stats_ F77_FUNC_(ga_iprint_stats,GA_IPRINT_STATS) #define ga_sprint_stats_ F77_FUNC_(ga_sprint_stats,GA_SPRINT_STATS) #define ga_zprint_stats_ F77_FUNC_(ga_zprint_stats,GA_ZPRINT_STATS) #define nga_print_stats_ F77_FUNC_(nga_print_stats, NGA_PRINT_STATS) #define nga_cprint_stats_ F77_FUNC_(nga_cprint_stats,NGA_CPRINT_STATS) #define nga_dprint_stats_ F77_FUNC_(nga_dprint_stats,NGA_DPRINT_STATS) #define nga_iprint_stats_ F77_FUNC_(nga_iprint_stats,NGA_IPRINT_STATS) #define nga_sprint_stats_ F77_FUNC_(nga_sprint_stats,NGA_SPRINT_STATS) #define nga_zprint_stats_ F77_FUNC_(nga_zprint_stats,NGA_ZPRINT_STATS) #define ga_error_ F77_FUNC_(ga_error, GA_ERROR) #define ga_cerror_ F77_FUNC_(ga_cerror,GA_CERROR) #define ga_derror_ F77_FUNC_(ga_derror,GA_DERROR) #define ga_ierror_ F77_FUNC_(ga_ierror,GA_IERROR) #define ga_serror_ F77_FUNC_(ga_serror,GA_SERROR) #define ga_zerror_ F77_FUNC_(ga_zerror,GA_ZERROR) #define nga_error_ F77_FUNC_(nga_error, NGA_ERROR) #define nga_cerror_ F77_FUNC_(nga_cerror,NGA_CERROR) #define nga_derror_ F77_FUNC_(nga_derror,NGA_DERROR) #define nga_ierror_ F77_FUNC_(nga_ierror,NGA_IERROR) #define nga_serror_ F77_FUNC_(nga_serror,NGA_SERROR) #define nga_zerror_ F77_FUNC_(nga_zerror,NGA_ZERROR) #define ga_cluster_nodeid_ F77_FUNC_(ga_cluster_nodeid, GA_CLUSTER_NODEID) #define ga_ccluster_nodeid_ F77_FUNC_(ga_ccluster_nodeid,GA_CCLUSTER_NODEID) #define ga_dcluster_nodeid_ F77_FUNC_(ga_dcluster_nodeid,GA_DCLUSTER_NODEID) #define ga_icluster_nodeid_ F77_FUNC_(ga_icluster_nodeid,GA_ICLUSTER_NODEID) #define ga_scluster_nodeid_ F77_FUNC_(ga_scluster_nodeid,GA_SCLUSTER_NODEID) #define ga_zcluster_nodeid_ F77_FUNC_(ga_zcluster_nodeid,GA_ZCLUSTER_NODEID) #define nga_cluster_nodeid_ F77_FUNC_(nga_cluster_nodeid, NGA_CLUSTER_NODEID) #define nga_ccluster_nodeid_ F77_FUNC_(nga_ccluster_nodeid,NGA_CCLUSTER_NODEID) #define nga_dcluster_nodeid_ F77_FUNC_(nga_dcluster_nodeid,NGA_DCLUSTER_NODEID) #define nga_icluster_nodeid_ F77_FUNC_(nga_icluster_nodeid,NGA_ICLUSTER_NODEID) #define nga_scluster_nodeid_ F77_FUNC_(nga_scluster_nodeid,NGA_SCLUSTER_NODEID) #define nga_zcluster_nodeid_ F77_FUNC_(nga_zcluster_nodeid,NGA_ZCLUSTER_NODEID) #define ga_cluster_nprocs_ F77_FUNC_(ga_cluster_nprocs, GA_CLUSTER_NPROCS) #define ga_ccluster_nprocs_ F77_FUNC_(ga_ccluster_nprocs,GA_CCLUSTER_NPROCS) #define ga_dcluster_nprocs_ F77_FUNC_(ga_dcluster_nprocs,GA_DCLUSTER_NPROCS) #define ga_icluster_nprocs_ F77_FUNC_(ga_icluster_nprocs,GA_ICLUSTER_NPROCS) #define ga_scluster_nprocs_ F77_FUNC_(ga_scluster_nprocs,GA_SCLUSTER_NPROCS) #define ga_zcluster_nprocs_ F77_FUNC_(ga_zcluster_nprocs,GA_ZCLUSTER_NPROCS) #define nga_cluster_nprocs_ F77_FUNC_(nga_cluster_nprocs, NGA_CLUSTER_NPROCS) #define nga_ccluster_nprocs_ F77_FUNC_(nga_ccluster_nprocs,NGA_CCLUSTER_NPROCS) #define nga_dcluster_nprocs_ F77_FUNC_(nga_dcluster_nprocs,NGA_DCLUSTER_NPROCS) #define nga_icluster_nprocs_ F77_FUNC_(nga_icluster_nprocs,NGA_ICLUSTER_NPROCS) #define nga_scluster_nprocs_ F77_FUNC_(nga_scluster_nprocs,NGA_SCLUSTER_NPROCS) #define nga_zcluster_nprocs_ F77_FUNC_(nga_zcluster_nprocs,NGA_ZCLUSTER_NPROCS) #define ga_cluster_procid_ F77_FUNC_(ga_cluster_procid, GA_CLUSTER_PROCID) #define ga_ccluster_procid_ F77_FUNC_(ga_ccluster_procid,GA_CCLUSTER_PROCID) #define ga_dcluster_procid_ F77_FUNC_(ga_dcluster_procid,GA_DCLUSTER_PROCID) #define ga_icluster_procid_ F77_FUNC_(ga_icluster_procid,GA_ICLUSTER_PROCID) #define ga_scluster_procid_ F77_FUNC_(ga_scluster_procid,GA_SCLUSTER_PROCID) #define ga_zcluster_procid_ F77_FUNC_(ga_zcluster_procid,GA_ZCLUSTER_PROCID) #define nga_cluster_procid_ F77_FUNC_(nga_cluster_procid, NGA_CLUSTER_PROCID) #define nga_ccluster_procid_ F77_FUNC_(nga_ccluster_procid,NGA_CCLUSTER_PROCID) #define nga_dcluster_procid_ F77_FUNC_(nga_dcluster_procid,NGA_DCLUSTER_PROCID) #define nga_icluster_procid_ F77_FUNC_(nga_icluster_procid,NGA_ICLUSTER_PROCID) #define nga_scluster_procid_ F77_FUNC_(nga_scluster_procid,NGA_SCLUSTER_PROCID) #define nga_zcluster_procid_ F77_FUNC_(nga_zcluster_procid,NGA_ZCLUSTER_PROCID) #define ga_cluster_nnodes_ F77_FUNC_(ga_cluster_nnodes, GA_CLUSTER_NNODES) #define ga_ccluster_nnodes_ F77_FUNC_(ga_ccluster_nnodes,GA_CCLUSTER_NNODES) #define ga_dcluster_nnodes_ F77_FUNC_(ga_dcluster_nnodes,GA_DCLUSTER_NNODES) #define ga_icluster_nnodes_ F77_FUNC_(ga_icluster_nnodes,GA_ICLUSTER_NNODES) #define ga_scluster_nnodes_ F77_FUNC_(ga_scluster_nnodes,GA_SCLUSTER_NNODES) #define ga_zcluster_nnodes_ F77_FUNC_(ga_zcluster_nnodes,GA_ZCLUSTER_NNODES) #define nga_cluster_nnodes_ F77_FUNC_(nga_cluster_nnodes, NGA_CLUSTER_NNODES) #define nga_ccluster_nnodes_ F77_FUNC_(nga_ccluster_nnodes,NGA_CCLUSTER_NNODES) #define nga_dcluster_nnodes_ F77_FUNC_(nga_dcluster_nnodes,NGA_DCLUSTER_NNODES) #define nga_icluster_nnodes_ F77_FUNC_(nga_icluster_nnodes,NGA_ICLUSTER_NNODES) #define nga_scluster_nnodes_ F77_FUNC_(nga_scluster_nnodes,NGA_SCLUSTER_NNODES) #define nga_zcluster_nnodes_ F77_FUNC_(nga_zcluster_nnodes,NGA_ZCLUSTER_NNODES) #define ga_cluster_proc_nodeid_ F77_FUNC_(ga_cluster_proc_nodeid, GA_CLUSTER_PROC_NODEID) #define ga_ccluster_proc_nodeid_ F77_FUNC_(ga_ccluster_proc_nodeid,GA_CCLUSTER_PROC_NODEID) #define ga_dcluster_proc_nodeid_ F77_FUNC_(ga_dcluster_proc_nodeid,GA_DCLUSTER_PROC_NODEID) #define ga_icluster_proc_nodeid_ F77_FUNC_(ga_icluster_proc_nodeid,GA_ICLUSTER_PROC_NODEID) #define ga_scluster_proc_nodeid_ F77_FUNC_(ga_scluster_proc_nodeid,GA_SCLUSTER_PROC_NODEID) #define ga_zcluster_proc_nodeid_ F77_FUNC_(ga_zcluster_proc_nodeid,GA_ZCLUSTER_PROC_NODEID) #define nga_cluster_proc_nodeid_ F77_FUNC_(nga_cluster_proc_nodeid, NGA_CLUSTER_PROC_NODEID) #define nga_ccluster_proc_nodeid_ F77_FUNC_(nga_ccluster_proc_nodeid,NGA_CCLUSTER_PROC_NODEID) #define nga_dcluster_proc_nodeid_ F77_FUNC_(nga_dcluster_proc_nodeid,NGA_DCLUSTER_PROC_NODEID) #define nga_icluster_proc_nodeid_ F77_FUNC_(nga_icluster_proc_nodeid,NGA_ICLUSTER_PROC_NODEID) #define nga_scluster_proc_nodeid_ F77_FUNC_(nga_scluster_proc_nodeid,NGA_SCLUSTER_PROC_NODEID) #define nga_zcluster_proc_nodeid_ F77_FUNC_(nga_zcluster_proc_nodeid,NGA_ZCLUSTER_PROC_NODEID) #define ga_print_file_ F77_FUNC_(ga_print_file, GA_PRINT_FILE) #define ga_cprint_file_ F77_FUNC_(ga_cprint_file,GA_CPRINT_FILE) #define ga_dprint_file_ F77_FUNC_(ga_dprint_file,GA_DPRINT_FILE) #define ga_iprint_file_ F77_FUNC_(ga_iprint_file,GA_IPRINT_FILE) #define ga_sprint_file_ F77_FUNC_(ga_sprint_file,GA_SPRINT_FILE) #define ga_zprint_file_ F77_FUNC_(ga_zprint_file,GA_ZPRINT_FILE) #define nga_print_file_ F77_FUNC_(nga_print_file, NGA_PRINT_FILE) #define nga_cprint_file_ F77_FUNC_(nga_cprint_file,NGA_CPRINT_FILE) #define nga_dprint_file_ F77_FUNC_(nga_dprint_file,NGA_DPRINT_FILE) #define nga_iprint_file_ F77_FUNC_(nga_iprint_file,NGA_IPRINT_FILE) #define nga_sprint_file_ F77_FUNC_(nga_sprint_file,NGA_SPRINT_FILE) #define nga_zprint_file_ F77_FUNC_(nga_zprint_file,NGA_ZPRINT_FILE) #define ga_print_ F77_FUNC_(ga_print, GA_PRINT) #define ga_cprint_ F77_FUNC_(ga_cprint,GA_CPRINT) #define ga_dprint_ F77_FUNC_(ga_dprint,GA_DPRINT) #define ga_iprint_ F77_FUNC_(ga_iprint,GA_IPRINT) #define ga_sprint_ F77_FUNC_(ga_sprint,GA_SPRINT) #define ga_zprint_ F77_FUNC_(ga_zprint,GA_ZPRINT) #define nga_print_ F77_FUNC_(nga_print, NGA_PRINT) #define nga_cprint_ F77_FUNC_(nga_cprint,NGA_CPRINT) #define nga_dprint_ F77_FUNC_(nga_dprint,NGA_DPRINT) #define nga_iprint_ F77_FUNC_(nga_iprint,NGA_IPRINT) #define nga_sprint_ F77_FUNC_(nga_sprint,NGA_SPRINT) #define nga_zprint_ F77_FUNC_(nga_zprint,NGA_ZPRINT) #define ga_print_patch_file2d_ F77_FUNC_(ga_print_patch_file2d, GA_PRINT_PATCH_FILE2D) #define ga_cprint_patch_file2d_ F77_FUNC_(ga_cprint_patch_file2d,GA_CPRINT_PATCH_FILE2D) #define ga_dprint_patch_file2d_ F77_FUNC_(ga_dprint_patch_file2d,GA_DPRINT_PATCH_FILE2D) #define ga_iprint_patch_file2d_ F77_FUNC_(ga_iprint_patch_file2d,GA_IPRINT_PATCH_FILE2D) #define ga_sprint_patch_file2d_ F77_FUNC_(ga_sprint_patch_file2d,GA_SPRINT_PATCH_FILE2D) #define ga_zprint_patch_file2d_ F77_FUNC_(ga_zprint_patch_file2d,GA_ZPRINT_PATCH_FILE2D) #define nga_print_patch_file2d_ F77_FUNC_(nga_print_patch_file2d, NGA_PRINT_PATCH_FILE2D) #define nga_cprint_patch_file2d_ F77_FUNC_(nga_cprint_patch_file2d,NGA_CPRINT_PATCH_FILE2D) #define nga_dprint_patch_file2d_ F77_FUNC_(nga_dprint_patch_file2d,NGA_DPRINT_PATCH_FILE2D) #define nga_iprint_patch_file2d_ F77_FUNC_(nga_iprint_patch_file2d,NGA_IPRINT_PATCH_FILE2D) #define nga_sprint_patch_file2d_ F77_FUNC_(nga_sprint_patch_file2d,NGA_SPRINT_PATCH_FILE2D) #define nga_zprint_patch_file2d_ F77_FUNC_(nga_zprint_patch_file2d,NGA_ZPRINT_PATCH_FILE2D) #define ga_print_patch2d_ F77_FUNC_(ga_print_patch2d, GA_PRINT_PATCH2D) #define ga_cprint_patch2d_ F77_FUNC_(ga_cprint_patch2d,GA_CPRINT_PATCH2D) #define ga_dprint_patch2d_ F77_FUNC_(ga_dprint_patch2d,GA_DPRINT_PATCH2D) #define ga_iprint_patch2d_ F77_FUNC_(ga_iprint_patch2d,GA_IPRINT_PATCH2D) #define ga_sprint_patch2d_ F77_FUNC_(ga_sprint_patch2d,GA_SPRINT_PATCH2D) #define ga_zprint_patch2d_ F77_FUNC_(ga_zprint_patch2d,GA_ZPRINT_PATCH2D) #define nga_print_patch2d_ F77_FUNC_(nga_print_patch2d, NGA_PRINT_PATCH2D) #define nga_cprint_patch2d_ F77_FUNC_(nga_cprint_patch2d,NGA_CPRINT_PATCH2D) #define nga_dprint_patch2d_ F77_FUNC_(nga_dprint_patch2d,NGA_DPRINT_PATCH2D) #define nga_iprint_patch2d_ F77_FUNC_(nga_iprint_patch2d,NGA_IPRINT_PATCH2D) #define nga_sprint_patch2d_ F77_FUNC_(nga_sprint_patch2d,NGA_SPRINT_PATCH2D) #define nga_zprint_patch2d_ F77_FUNC_(nga_zprint_patch2d,NGA_ZPRINT_PATCH2D) #define ga_print_patch_file_ F77_FUNC_(ga_print_patch_file, GA_PRINT_PATCH_FILE) #define ga_cprint_patch_file_ F77_FUNC_(ga_cprint_patch_file,GA_CPRINT_PATCH_FILE) #define ga_dprint_patch_file_ F77_FUNC_(ga_dprint_patch_file,GA_DPRINT_PATCH_FILE) #define ga_iprint_patch_file_ F77_FUNC_(ga_iprint_patch_file,GA_IPRINT_PATCH_FILE) #define ga_sprint_patch_file_ F77_FUNC_(ga_sprint_patch_file,GA_SPRINT_PATCH_FILE) #define ga_zprint_patch_file_ F77_FUNC_(ga_zprint_patch_file,GA_ZPRINT_PATCH_FILE) #define nga_print_patch_file_ F77_FUNC_(nga_print_patch_file, NGA_PRINT_PATCH_FILE) #define nga_cprint_patch_file_ F77_FUNC_(nga_cprint_patch_file,NGA_CPRINT_PATCH_FILE) #define nga_dprint_patch_file_ F77_FUNC_(nga_dprint_patch_file,NGA_DPRINT_PATCH_FILE) #define nga_iprint_patch_file_ F77_FUNC_(nga_iprint_patch_file,NGA_IPRINT_PATCH_FILE) #define nga_sprint_patch_file_ F77_FUNC_(nga_sprint_patch_file,NGA_SPRINT_PATCH_FILE) #define nga_zprint_patch_file_ F77_FUNC_(nga_zprint_patch_file,NGA_ZPRINT_PATCH_FILE) #define ga_print_patch_ F77_FUNC_(ga_print_patch, GA_PRINT_PATCH) #define ga_cprint_patch_ F77_FUNC_(ga_cprint_patch,GA_CPRINT_PATCH) #define ga_dprint_patch_ F77_FUNC_(ga_dprint_patch,GA_DPRINT_PATCH) #define ga_iprint_patch_ F77_FUNC_(ga_iprint_patch,GA_IPRINT_PATCH) #define ga_sprint_patch_ F77_FUNC_(ga_sprint_patch,GA_SPRINT_PATCH) #define ga_zprint_patch_ F77_FUNC_(ga_zprint_patch,GA_ZPRINT_PATCH) #define nga_print_patch_ F77_FUNC_(nga_print_patch, NGA_PRINT_PATCH) #define nga_cprint_patch_ F77_FUNC_(nga_cprint_patch,NGA_CPRINT_PATCH) #define nga_dprint_patch_ F77_FUNC_(nga_dprint_patch,NGA_DPRINT_PATCH) #define nga_iprint_patch_ F77_FUNC_(nga_iprint_patch,NGA_IPRINT_PATCH) #define nga_sprint_patch_ F77_FUNC_(nga_sprint_patch,NGA_SPRINT_PATCH) #define nga_zprint_patch_ F77_FUNC_(nga_zprint_patch,NGA_ZPRINT_PATCH) #define ga_print_distribution_ F77_FUNC_(ga_print_distribution, GA_PRINT_DISTRIBUTION) #define ga_cprint_distribution_ F77_FUNC_(ga_cprint_distribution,GA_CPRINT_DISTRIBUTION) #define ga_dprint_distribution_ F77_FUNC_(ga_dprint_distribution,GA_DPRINT_DISTRIBUTION) #define ga_iprint_distribution_ F77_FUNC_(ga_iprint_distribution,GA_IPRINT_DISTRIBUTION) #define ga_sprint_distribution_ F77_FUNC_(ga_sprint_distribution,GA_SPRINT_DISTRIBUTION) #define ga_zprint_distribution_ F77_FUNC_(ga_zprint_distribution,GA_ZPRINT_DISTRIBUTION) #define nga_print_distribution_ F77_FUNC_(nga_print_distribution, NGA_PRINT_DISTRIBUTION) #define nga_cprint_distribution_ F77_FUNC_(nga_cprint_distribution,NGA_CPRINT_DISTRIBUTION) #define nga_dprint_distribution_ F77_FUNC_(nga_dprint_distribution,NGA_DPRINT_DISTRIBUTION) #define nga_iprint_distribution_ F77_FUNC_(nga_iprint_distribution,NGA_IPRINT_DISTRIBUTION) #define nga_sprint_distribution_ F77_FUNC_(nga_sprint_distribution,NGA_SPRINT_DISTRIBUTION) #define nga_zprint_distribution_ F77_FUNC_(nga_zprint_distribution,NGA_ZPRINT_DISTRIBUTION) #define ga_summarize_ F77_FUNC_(ga_summarize, GA_SUMMARIZE) #define ga_csummarize_ F77_FUNC_(ga_csummarize,GA_CSUMMARIZE) #define ga_dsummarize_ F77_FUNC_(ga_dsummarize,GA_DSUMMARIZE) #define ga_isummarize_ F77_FUNC_(ga_isummarize,GA_ISUMMARIZE) #define ga_ssummarize_ F77_FUNC_(ga_ssummarize,GA_SSUMMARIZE) #define ga_zsummarize_ F77_FUNC_(ga_zsummarize,GA_ZSUMMARIZE) #define nga_summarize_ F77_FUNC_(nga_summarize, NGA_SUMMARIZE) #define nga_csummarize_ F77_FUNC_(nga_csummarize,NGA_CSUMMARIZE) #define nga_dsummarize_ F77_FUNC_(nga_dsummarize,NGA_DSUMMARIZE) #define nga_isummarize_ F77_FUNC_(nga_isummarize,NGA_ISUMMARIZE) #define nga_ssummarize_ F77_FUNC_(nga_ssummarize,NGA_SSUMMARIZE) #define nga_zsummarize_ F77_FUNC_(nga_zsummarize,NGA_ZSUMMARIZE) #define ga_access_ghost_ptr_ F77_FUNC_(ga_access_ghost_ptr, GA_ACCESS_GHOST_PTR) #define ga_caccess_ghost_ptr_ F77_FUNC_(ga_caccess_ghost_ptr,GA_CACCESS_GHOST_PTR) #define ga_daccess_ghost_ptr_ F77_FUNC_(ga_daccess_ghost_ptr,GA_DACCESS_GHOST_PTR) #define ga_iaccess_ghost_ptr_ F77_FUNC_(ga_iaccess_ghost_ptr,GA_IACCESS_GHOST_PTR) #define ga_saccess_ghost_ptr_ F77_FUNC_(ga_saccess_ghost_ptr,GA_SACCESS_GHOST_PTR) #define ga_zaccess_ghost_ptr_ F77_FUNC_(ga_zaccess_ghost_ptr,GA_ZACCESS_GHOST_PTR) #define nga_access_ghost_ptr_ F77_FUNC_(nga_access_ghost_ptr, NGA_ACCESS_GHOST_PTR) #define nga_caccess_ghost_ptr_ F77_FUNC_(nga_caccess_ghost_ptr,NGA_CACCESS_GHOST_PTR) #define nga_daccess_ghost_ptr_ F77_FUNC_(nga_daccess_ghost_ptr,NGA_DACCESS_GHOST_PTR) #define nga_iaccess_ghost_ptr_ F77_FUNC_(nga_iaccess_ghost_ptr,NGA_IACCESS_GHOST_PTR) #define nga_saccess_ghost_ptr_ F77_FUNC_(nga_saccess_ghost_ptr,NGA_SACCESS_GHOST_PTR) #define nga_zaccess_ghost_ptr_ F77_FUNC_(nga_zaccess_ghost_ptr,NGA_ZACCESS_GHOST_PTR) #define ga_access_ghost_element_ F77_FUNC_(ga_access_ghost_element, GA_ACCESS_GHOST_ELEMENT) #define ga_caccess_ghost_element_ F77_FUNC_(ga_caccess_ghost_element,GA_CACCESS_GHOST_ELEMENT) #define ga_daccess_ghost_element_ F77_FUNC_(ga_daccess_ghost_element,GA_DACCESS_GHOST_ELEMENT) #define ga_iaccess_ghost_element_ F77_FUNC_(ga_iaccess_ghost_element,GA_IACCESS_GHOST_ELEMENT) #define ga_saccess_ghost_element_ F77_FUNC_(ga_saccess_ghost_element,GA_SACCESS_GHOST_ELEMENT) #define ga_zaccess_ghost_element_ F77_FUNC_(ga_zaccess_ghost_element,GA_ZACCESS_GHOST_ELEMENT) #define nga_access_ghost_element_ F77_FUNC_(nga_access_ghost_element, NGA_ACCESS_GHOST_ELEMENT) #define nga_caccess_ghost_element_ F77_FUNC_(nga_caccess_ghost_element,NGA_CACCESS_GHOST_ELEMENT) #define nga_daccess_ghost_element_ F77_FUNC_(nga_daccess_ghost_element,NGA_DACCESS_GHOST_ELEMENT) #define nga_iaccess_ghost_element_ F77_FUNC_(nga_iaccess_ghost_element,NGA_IACCESS_GHOST_ELEMENT) #define nga_saccess_ghost_element_ F77_FUNC_(nga_saccess_ghost_element,NGA_SACCESS_GHOST_ELEMENT) #define nga_zaccess_ghost_element_ F77_FUNC_(nga_zaccess_ghost_element,NGA_ZACCESS_GHOST_ELEMENT) #define ga_access_ghost_element_ptr_ F77_FUNC_(ga_access_ghost_element_ptr, GA_ACCESS_GHOST_ELEMENT_PTR) #define ga_caccess_ghost_element_ptr_ F77_FUNC_(ga_caccess_ghost_element_ptr,GA_CACCESS_GHOST_ELEMENT_PTR) #define ga_daccess_ghost_element_ptr_ F77_FUNC_(ga_daccess_ghost_element_ptr,GA_DACCESS_GHOST_ELEMENT_PTR) #define ga_iaccess_ghost_element_ptr_ F77_FUNC_(ga_iaccess_ghost_element_ptr,GA_IACCESS_GHOST_ELEMENT_PTR) #define ga_saccess_ghost_element_ptr_ F77_FUNC_(ga_saccess_ghost_element_ptr,GA_SACCESS_GHOST_ELEMENT_PTR) #define ga_zaccess_ghost_element_ptr_ F77_FUNC_(ga_zaccess_ghost_element_ptr,GA_ZACCESS_GHOST_ELEMENT_PTR) #define nga_access_ghost_element_ptr_ F77_FUNC_(nga_access_ghost_element_ptr, NGA_ACCESS_GHOST_ELEMENT_PTR) #define nga_caccess_ghost_element_ptr_ F77_FUNC_(nga_caccess_ghost_element_ptr,NGA_CACCESS_GHOST_ELEMENT_PTR) #define nga_daccess_ghost_element_ptr_ F77_FUNC_(nga_daccess_ghost_element_ptr,NGA_DACCESS_GHOST_ELEMENT_PTR) #define nga_iaccess_ghost_element_ptr_ F77_FUNC_(nga_iaccess_ghost_element_ptr,NGA_IACCESS_GHOST_ELEMENT_PTR) #define nga_saccess_ghost_element_ptr_ F77_FUNC_(nga_saccess_ghost_element_ptr,NGA_SACCESS_GHOST_ELEMENT_PTR) #define nga_zaccess_ghost_element_ptr_ F77_FUNC_(nga_zaccess_ghost_element_ptr,NGA_ZACCESS_GHOST_ELEMENT_PTR) #define ga_access_ghosts_ F77_FUNC_(ga_access_ghosts, GA_ACCESS_GHOSTS) #define ga_caccess_ghosts_ F77_FUNC_(ga_caccess_ghosts,GA_CACCESS_GHOSTS) #define ga_daccess_ghosts_ F77_FUNC_(ga_daccess_ghosts,GA_DACCESS_GHOSTS) #define ga_iaccess_ghosts_ F77_FUNC_(ga_iaccess_ghosts,GA_IACCESS_GHOSTS) #define ga_saccess_ghosts_ F77_FUNC_(ga_saccess_ghosts,GA_SACCESS_GHOSTS) #define ga_zaccess_ghosts_ F77_FUNC_(ga_zaccess_ghosts,GA_ZACCESS_GHOSTS) #define nga_access_ghosts_ F77_FUNC_(nga_access_ghosts, NGA_ACCESS_GHOSTS) #define nga_caccess_ghosts_ F77_FUNC_(nga_caccess_ghosts,NGA_CACCESS_GHOSTS) #define nga_daccess_ghosts_ F77_FUNC_(nga_daccess_ghosts,NGA_DACCESS_GHOSTS) #define nga_iaccess_ghosts_ F77_FUNC_(nga_iaccess_ghosts,NGA_IACCESS_GHOSTS) #define nga_saccess_ghosts_ F77_FUNC_(nga_saccess_ghosts,NGA_SACCESS_GHOSTS) #define nga_zaccess_ghosts_ F77_FUNC_(nga_zaccess_ghosts,NGA_ZACCESS_GHOSTS) #define ga_release_ghost_element_ F77_FUNC_(ga_release_ghost_element, GA_RELEASE_GHOST_ELEMENT) #define ga_crelease_ghost_element_ F77_FUNC_(ga_crelease_ghost_element,GA_CRELEASE_GHOST_ELEMENT) #define ga_drelease_ghost_element_ F77_FUNC_(ga_drelease_ghost_element,GA_DRELEASE_GHOST_ELEMENT) #define ga_irelease_ghost_element_ F77_FUNC_(ga_irelease_ghost_element,GA_IRELEASE_GHOST_ELEMENT) #define ga_srelease_ghost_element_ F77_FUNC_(ga_srelease_ghost_element,GA_SRELEASE_GHOST_ELEMENT) #define ga_zrelease_ghost_element_ F77_FUNC_(ga_zrelease_ghost_element,GA_ZRELEASE_GHOST_ELEMENT) #define nga_release_ghost_element_ F77_FUNC_(nga_release_ghost_element, NGA_RELEASE_GHOST_ELEMENT) #define nga_crelease_ghost_element_ F77_FUNC_(nga_crelease_ghost_element,NGA_CRELEASE_GHOST_ELEMENT) #define nga_drelease_ghost_element_ F77_FUNC_(nga_drelease_ghost_element,NGA_DRELEASE_GHOST_ELEMENT) #define nga_irelease_ghost_element_ F77_FUNC_(nga_irelease_ghost_element,NGA_IRELEASE_GHOST_ELEMENT) #define nga_srelease_ghost_element_ F77_FUNC_(nga_srelease_ghost_element,NGA_SRELEASE_GHOST_ELEMENT) #define nga_zrelease_ghost_element_ F77_FUNC_(nga_zrelease_ghost_element,NGA_ZRELEASE_GHOST_ELEMENT) #define ga_release_update_ghost_element_ F77_FUNC_(ga_release_update_ghost_element, GA_RELEASE_UPDATE_GHOST_ELEMENT) #define ga_crelease_update_ghost_element_ F77_FUNC_(ga_crelease_update_ghost_element,GA_CRELEASE_UPDATE_GHOST_ELEMENT) #define ga_drelease_update_ghost_element_ F77_FUNC_(ga_drelease_update_ghost_element,GA_DRELEASE_UPDATE_GHOST_ELEMENT) #define ga_irelease_update_ghost_element_ F77_FUNC_(ga_irelease_update_ghost_element,GA_IRELEASE_UPDATE_GHOST_ELEMENT) #define ga_srelease_update_ghost_element_ F77_FUNC_(ga_srelease_update_ghost_element,GA_SRELEASE_UPDATE_GHOST_ELEMENT) #define ga_zrelease_update_ghost_element_ F77_FUNC_(ga_zrelease_update_ghost_element,GA_ZRELEASE_UPDATE_GHOST_ELEMENT) #define nga_release_update_ghost_element_ F77_FUNC_(nga_release_update_ghost_element, NGA_RELEASE_UPDATE_GHOST_ELEMENT) #define nga_crelease_update_ghost_element_ F77_FUNC_(nga_crelease_update_ghost_element,NGA_CRELEASE_UPDATE_GHOST_ELEMENT) #define nga_drelease_update_ghost_element_ F77_FUNC_(nga_drelease_update_ghost_element,NGA_DRELEASE_UPDATE_GHOST_ELEMENT) #define nga_irelease_update_ghost_element_ F77_FUNC_(nga_irelease_update_ghost_element,NGA_IRELEASE_UPDATE_GHOST_ELEMENT) #define nga_srelease_update_ghost_element_ F77_FUNC_(nga_srelease_update_ghost_element,NGA_SRELEASE_UPDATE_GHOST_ELEMENT) #define nga_zrelease_update_ghost_element_ F77_FUNC_(nga_zrelease_update_ghost_element,NGA_ZRELEASE_UPDATE_GHOST_ELEMENT) #define ga_release_ghosts_ F77_FUNC_(ga_release_ghosts, GA_RELEASE_GHOSTS) #define ga_crelease_ghosts_ F77_FUNC_(ga_crelease_ghosts,GA_CRELEASE_GHOSTS) #define ga_drelease_ghosts_ F77_FUNC_(ga_drelease_ghosts,GA_DRELEASE_GHOSTS) #define ga_irelease_ghosts_ F77_FUNC_(ga_irelease_ghosts,GA_IRELEASE_GHOSTS) #define ga_srelease_ghosts_ F77_FUNC_(ga_srelease_ghosts,GA_SRELEASE_GHOSTS) #define ga_zrelease_ghosts_ F77_FUNC_(ga_zrelease_ghosts,GA_ZRELEASE_GHOSTS) #define nga_release_ghosts_ F77_FUNC_(nga_release_ghosts, NGA_RELEASE_GHOSTS) #define nga_crelease_ghosts_ F77_FUNC_(nga_crelease_ghosts,NGA_CRELEASE_GHOSTS) #define nga_drelease_ghosts_ F77_FUNC_(nga_drelease_ghosts,NGA_DRELEASE_GHOSTS) #define nga_irelease_ghosts_ F77_FUNC_(nga_irelease_ghosts,NGA_IRELEASE_GHOSTS) #define nga_srelease_ghosts_ F77_FUNC_(nga_srelease_ghosts,NGA_SRELEASE_GHOSTS) #define nga_zrelease_ghosts_ F77_FUNC_(nga_zrelease_ghosts,NGA_ZRELEASE_GHOSTS) #define ga_release_update_ghosts_ F77_FUNC_(ga_release_update_ghosts, GA_RELEASE_UPDATE_GHOSTS) #define ga_crelease_update_ghosts_ F77_FUNC_(ga_crelease_update_ghosts,GA_CRELEASE_UPDATE_GHOSTS) #define ga_drelease_update_ghosts_ F77_FUNC_(ga_drelease_update_ghosts,GA_DRELEASE_UPDATE_GHOSTS) #define ga_irelease_update_ghosts_ F77_FUNC_(ga_irelease_update_ghosts,GA_IRELEASE_UPDATE_GHOSTS) #define ga_srelease_update_ghosts_ F77_FUNC_(ga_srelease_update_ghosts,GA_SRELEASE_UPDATE_GHOSTS) #define ga_zrelease_update_ghosts_ F77_FUNC_(ga_zrelease_update_ghosts,GA_ZRELEASE_UPDATE_GHOSTS) #define nga_release_update_ghosts_ F77_FUNC_(nga_release_update_ghosts, NGA_RELEASE_UPDATE_GHOSTS) #define nga_crelease_update_ghosts_ F77_FUNC_(nga_crelease_update_ghosts,NGA_CRELEASE_UPDATE_GHOSTS) #define nga_drelease_update_ghosts_ F77_FUNC_(nga_drelease_update_ghosts,NGA_DRELEASE_UPDATE_GHOSTS) #define nga_irelease_update_ghosts_ F77_FUNC_(nga_irelease_update_ghosts,NGA_IRELEASE_UPDATE_GHOSTS) #define nga_srelease_update_ghosts_ F77_FUNC_(nga_srelease_update_ghosts,NGA_SRELEASE_UPDATE_GHOSTS) #define nga_zrelease_update_ghosts_ F77_FUNC_(nga_zrelease_update_ghosts,NGA_ZRELEASE_UPDATE_GHOSTS) #define ga_get_ghost_block_ F77_FUNC_(ga_get_ghost_block, GA_GET_GHOST_BLOCK) #define ga_cget_ghost_block_ F77_FUNC_(ga_cget_ghost_block,GA_CGET_GHOST_BLOCK) #define ga_dget_ghost_block_ F77_FUNC_(ga_dget_ghost_block,GA_DGET_GHOST_BLOCK) #define ga_iget_ghost_block_ F77_FUNC_(ga_iget_ghost_block,GA_IGET_GHOST_BLOCK) #define ga_sget_ghost_block_ F77_FUNC_(ga_sget_ghost_block,GA_SGET_GHOST_BLOCK) #define ga_zget_ghost_block_ F77_FUNC_(ga_zget_ghost_block,GA_ZGET_GHOST_BLOCK) #define nga_get_ghost_block_ F77_FUNC_(nga_get_ghost_block, NGA_GET_GHOST_BLOCK) #define nga_cget_ghost_block_ F77_FUNC_(nga_cget_ghost_block,NGA_CGET_GHOST_BLOCK) #define nga_dget_ghost_block_ F77_FUNC_(nga_dget_ghost_block,NGA_DGET_GHOST_BLOCK) #define nga_iget_ghost_block_ F77_FUNC_(nga_iget_ghost_block,NGA_IGET_GHOST_BLOCK) #define nga_sget_ghost_block_ F77_FUNC_(nga_sget_ghost_block,NGA_SGET_GHOST_BLOCK) #define nga_zget_ghost_block_ F77_FUNC_(nga_zget_ghost_block,NGA_ZGET_GHOST_BLOCK) #define ga_update1_ghosts_ F77_FUNC_(ga_update1_ghosts, GA_UPDATE1_GHOSTS) #define ga_cupdate1_ghosts_ F77_FUNC_(ga_cupdate1_ghosts,GA_CUPDATE1_GHOSTS) #define ga_dupdate1_ghosts_ F77_FUNC_(ga_dupdate1_ghosts,GA_DUPDATE1_GHOSTS) #define ga_iupdate1_ghosts_ F77_FUNC_(ga_iupdate1_ghosts,GA_IUPDATE1_GHOSTS) #define ga_supdate1_ghosts_ F77_FUNC_(ga_supdate1_ghosts,GA_SUPDATE1_GHOSTS) #define ga_zupdate1_ghosts_ F77_FUNC_(ga_zupdate1_ghosts,GA_ZUPDATE1_GHOSTS) #define nga_update1_ghosts_ F77_FUNC_(nga_update1_ghosts, NGA_UPDATE1_GHOSTS) #define nga_cupdate1_ghosts_ F77_FUNC_(nga_cupdate1_ghosts,NGA_CUPDATE1_GHOSTS) #define nga_dupdate1_ghosts_ F77_FUNC_(nga_dupdate1_ghosts,NGA_DUPDATE1_GHOSTS) #define nga_iupdate1_ghosts_ F77_FUNC_(nga_iupdate1_ghosts,NGA_IUPDATE1_GHOSTS) #define nga_supdate1_ghosts_ F77_FUNC_(nga_supdate1_ghosts,NGA_SUPDATE1_GHOSTS) #define nga_zupdate1_ghosts_ F77_FUNC_(nga_zupdate1_ghosts,NGA_ZUPDATE1_GHOSTS) #define ga_update2_ghosts_ F77_FUNC_(ga_update2_ghosts, GA_UPDATE2_GHOSTS) #define ga_cupdate2_ghosts_ F77_FUNC_(ga_cupdate2_ghosts,GA_CUPDATE2_GHOSTS) #define ga_dupdate2_ghosts_ F77_FUNC_(ga_dupdate2_ghosts,GA_DUPDATE2_GHOSTS) #define ga_iupdate2_ghosts_ F77_FUNC_(ga_iupdate2_ghosts,GA_IUPDATE2_GHOSTS) #define ga_supdate2_ghosts_ F77_FUNC_(ga_supdate2_ghosts,GA_SUPDATE2_GHOSTS) #define ga_zupdate2_ghosts_ F77_FUNC_(ga_zupdate2_ghosts,GA_ZUPDATE2_GHOSTS) #define nga_update2_ghosts_ F77_FUNC_(nga_update2_ghosts, NGA_UPDATE2_GHOSTS) #define nga_cupdate2_ghosts_ F77_FUNC_(nga_cupdate2_ghosts,NGA_CUPDATE2_GHOSTS) #define nga_dupdate2_ghosts_ F77_FUNC_(nga_dupdate2_ghosts,NGA_DUPDATE2_GHOSTS) #define nga_iupdate2_ghosts_ F77_FUNC_(nga_iupdate2_ghosts,NGA_IUPDATE2_GHOSTS) #define nga_supdate2_ghosts_ F77_FUNC_(nga_supdate2_ghosts,NGA_SUPDATE2_GHOSTS) #define nga_zupdate2_ghosts_ F77_FUNC_(nga_zupdate2_ghosts,NGA_ZUPDATE2_GHOSTS) #define ga_update3_ghosts_ F77_FUNC_(ga_update3_ghosts, GA_UPDATE3_GHOSTS) #define ga_cupdate3_ghosts_ F77_FUNC_(ga_cupdate3_ghosts,GA_CUPDATE3_GHOSTS) #define ga_dupdate3_ghosts_ F77_FUNC_(ga_dupdate3_ghosts,GA_DUPDATE3_GHOSTS) #define ga_iupdate3_ghosts_ F77_FUNC_(ga_iupdate3_ghosts,GA_IUPDATE3_GHOSTS) #define ga_supdate3_ghosts_ F77_FUNC_(ga_supdate3_ghosts,GA_SUPDATE3_GHOSTS) #define ga_zupdate3_ghosts_ F77_FUNC_(ga_zupdate3_ghosts,GA_ZUPDATE3_GHOSTS) #define nga_update3_ghosts_ F77_FUNC_(nga_update3_ghosts, NGA_UPDATE3_GHOSTS) #define nga_cupdate3_ghosts_ F77_FUNC_(nga_cupdate3_ghosts,NGA_CUPDATE3_GHOSTS) #define nga_dupdate3_ghosts_ F77_FUNC_(nga_dupdate3_ghosts,NGA_DUPDATE3_GHOSTS) #define nga_iupdate3_ghosts_ F77_FUNC_(nga_iupdate3_ghosts,NGA_IUPDATE3_GHOSTS) #define nga_supdate3_ghosts_ F77_FUNC_(nga_supdate3_ghosts,NGA_SUPDATE3_GHOSTS) #define nga_zupdate3_ghosts_ F77_FUNC_(nga_zupdate3_ghosts,NGA_ZUPDATE3_GHOSTS) #define ga_set_update4_info_ F77_FUNC_(ga_set_update4_info, GA_SET_UPDATE4_INFO) #define ga_cset_update4_info_ F77_FUNC_(ga_cset_update4_info,GA_CSET_UPDATE4_INFO) #define ga_dset_update4_info_ F77_FUNC_(ga_dset_update4_info,GA_DSET_UPDATE4_INFO) #define ga_iset_update4_info_ F77_FUNC_(ga_iset_update4_info,GA_ISET_UPDATE4_INFO) #define ga_sset_update4_info_ F77_FUNC_(ga_sset_update4_info,GA_SSET_UPDATE4_INFO) #define ga_zset_update4_info_ F77_FUNC_(ga_zset_update4_info,GA_ZSET_UPDATE4_INFO) #define nga_set_update4_info_ F77_FUNC_(nga_set_update4_info, NGA_SET_UPDATE4_INFO) #define nga_cset_update4_info_ F77_FUNC_(nga_cset_update4_info,NGA_CSET_UPDATE4_INFO) #define nga_dset_update4_info_ F77_FUNC_(nga_dset_update4_info,NGA_DSET_UPDATE4_INFO) #define nga_iset_update4_info_ F77_FUNC_(nga_iset_update4_info,NGA_ISET_UPDATE4_INFO) #define nga_sset_update4_info_ F77_FUNC_(nga_sset_update4_info,NGA_SSET_UPDATE4_INFO) #define nga_zset_update4_info_ F77_FUNC_(nga_zset_update4_info,NGA_ZSET_UPDATE4_INFO) #define ga_update4_ghosts_ F77_FUNC_(ga_update4_ghosts, GA_UPDATE4_GHOSTS) #define ga_cupdate4_ghosts_ F77_FUNC_(ga_cupdate4_ghosts,GA_CUPDATE4_GHOSTS) #define ga_dupdate4_ghosts_ F77_FUNC_(ga_dupdate4_ghosts,GA_DUPDATE4_GHOSTS) #define ga_iupdate4_ghosts_ F77_FUNC_(ga_iupdate4_ghosts,GA_IUPDATE4_GHOSTS) #define ga_supdate4_ghosts_ F77_FUNC_(ga_supdate4_ghosts,GA_SUPDATE4_GHOSTS) #define ga_zupdate4_ghosts_ F77_FUNC_(ga_zupdate4_ghosts,GA_ZUPDATE4_GHOSTS) #define nga_update4_ghosts_ F77_FUNC_(nga_update4_ghosts, NGA_UPDATE4_GHOSTS) #define nga_cupdate4_ghosts_ F77_FUNC_(nga_cupdate4_ghosts,NGA_CUPDATE4_GHOSTS) #define nga_dupdate4_ghosts_ F77_FUNC_(nga_dupdate4_ghosts,NGA_DUPDATE4_GHOSTS) #define nga_iupdate4_ghosts_ F77_FUNC_(nga_iupdate4_ghosts,NGA_IUPDATE4_GHOSTS) #define nga_supdate4_ghosts_ F77_FUNC_(nga_supdate4_ghosts,NGA_SUPDATE4_GHOSTS) #define nga_zupdate4_ghosts_ F77_FUNC_(nga_zupdate4_ghosts,NGA_ZUPDATE4_GHOSTS) #define ga_update44_ghosts_ F77_FUNC_(ga_update44_ghosts, GA_UPDATE44_GHOSTS) #define ga_cupdate44_ghosts_ F77_FUNC_(ga_cupdate44_ghosts,GA_CUPDATE44_GHOSTS) #define ga_dupdate44_ghosts_ F77_FUNC_(ga_dupdate44_ghosts,GA_DUPDATE44_GHOSTS) #define ga_iupdate44_ghosts_ F77_FUNC_(ga_iupdate44_ghosts,GA_IUPDATE44_GHOSTS) #define ga_supdate44_ghosts_ F77_FUNC_(ga_supdate44_ghosts,GA_SUPDATE44_GHOSTS) #define ga_zupdate44_ghosts_ F77_FUNC_(ga_zupdate44_ghosts,GA_ZUPDATE44_GHOSTS) #define nga_update44_ghosts_ F77_FUNC_(nga_update44_ghosts, NGA_UPDATE44_GHOSTS) #define nga_cupdate44_ghosts_ F77_FUNC_(nga_cupdate44_ghosts,NGA_CUPDATE44_GHOSTS) #define nga_dupdate44_ghosts_ F77_FUNC_(nga_dupdate44_ghosts,NGA_DUPDATE44_GHOSTS) #define nga_iupdate44_ghosts_ F77_FUNC_(nga_iupdate44_ghosts,NGA_IUPDATE44_GHOSTS) #define nga_supdate44_ghosts_ F77_FUNC_(nga_supdate44_ghosts,NGA_SUPDATE44_GHOSTS) #define nga_zupdate44_ghosts_ F77_FUNC_(nga_zupdate44_ghosts,NGA_ZUPDATE44_GHOSTS) #define ga_update55_ghosts_ F77_FUNC_(ga_update55_ghosts, GA_UPDATE55_GHOSTS) #define ga_cupdate55_ghosts_ F77_FUNC_(ga_cupdate55_ghosts,GA_CUPDATE55_GHOSTS) #define ga_dupdate55_ghosts_ F77_FUNC_(ga_dupdate55_ghosts,GA_DUPDATE55_GHOSTS) #define ga_iupdate55_ghosts_ F77_FUNC_(ga_iupdate55_ghosts,GA_IUPDATE55_GHOSTS) #define ga_supdate55_ghosts_ F77_FUNC_(ga_supdate55_ghosts,GA_SUPDATE55_GHOSTS) #define ga_zupdate55_ghosts_ F77_FUNC_(ga_zupdate55_ghosts,GA_ZUPDATE55_GHOSTS) #define nga_update55_ghosts_ F77_FUNC_(nga_update55_ghosts, NGA_UPDATE55_GHOSTS) #define nga_cupdate55_ghosts_ F77_FUNC_(nga_cupdate55_ghosts,NGA_CUPDATE55_GHOSTS) #define nga_dupdate55_ghosts_ F77_FUNC_(nga_dupdate55_ghosts,NGA_DUPDATE55_GHOSTS) #define nga_iupdate55_ghosts_ F77_FUNC_(nga_iupdate55_ghosts,NGA_IUPDATE55_GHOSTS) #define nga_supdate55_ghosts_ F77_FUNC_(nga_supdate55_ghosts,NGA_SUPDATE55_GHOSTS) #define nga_zupdate55_ghosts_ F77_FUNC_(nga_zupdate55_ghosts,NGA_ZUPDATE55_GHOSTS) #define ga_update_ghost_dir_ F77_FUNC_(ga_update_ghost_dir, GA_UPDATE_GHOST_DIR) #define ga_cupdate_ghost_dir_ F77_FUNC_(ga_cupdate_ghost_dir,GA_CUPDATE_GHOST_DIR) #define ga_dupdate_ghost_dir_ F77_FUNC_(ga_dupdate_ghost_dir,GA_DUPDATE_GHOST_DIR) #define ga_iupdate_ghost_dir_ F77_FUNC_(ga_iupdate_ghost_dir,GA_IUPDATE_GHOST_DIR) #define ga_supdate_ghost_dir_ F77_FUNC_(ga_supdate_ghost_dir,GA_SUPDATE_GHOST_DIR) #define ga_zupdate_ghost_dir_ F77_FUNC_(ga_zupdate_ghost_dir,GA_ZUPDATE_GHOST_DIR) #define nga_update_ghost_dir_ F77_FUNC_(nga_update_ghost_dir, NGA_UPDATE_GHOST_DIR) #define nga_cupdate_ghost_dir_ F77_FUNC_(nga_cupdate_ghost_dir,NGA_CUPDATE_GHOST_DIR) #define nga_dupdate_ghost_dir_ F77_FUNC_(nga_dupdate_ghost_dir,NGA_DUPDATE_GHOST_DIR) #define nga_iupdate_ghost_dir_ F77_FUNC_(nga_iupdate_ghost_dir,NGA_IUPDATE_GHOST_DIR) #define nga_supdate_ghost_dir_ F77_FUNC_(nga_supdate_ghost_dir,NGA_SUPDATE_GHOST_DIR) #define nga_zupdate_ghost_dir_ F77_FUNC_(nga_zupdate_ghost_dir,NGA_ZUPDATE_GHOST_DIR) #define ga_update5_ghosts_ F77_FUNC_(ga_update5_ghosts, GA_UPDATE5_GHOSTS) #define ga_cupdate5_ghosts_ F77_FUNC_(ga_cupdate5_ghosts,GA_CUPDATE5_GHOSTS) #define ga_dupdate5_ghosts_ F77_FUNC_(ga_dupdate5_ghosts,GA_DUPDATE5_GHOSTS) #define ga_iupdate5_ghosts_ F77_FUNC_(ga_iupdate5_ghosts,GA_IUPDATE5_GHOSTS) #define ga_supdate5_ghosts_ F77_FUNC_(ga_supdate5_ghosts,GA_SUPDATE5_GHOSTS) #define ga_zupdate5_ghosts_ F77_FUNC_(ga_zupdate5_ghosts,GA_ZUPDATE5_GHOSTS) #define nga_update5_ghosts_ F77_FUNC_(nga_update5_ghosts, NGA_UPDATE5_GHOSTS) #define nga_cupdate5_ghosts_ F77_FUNC_(nga_cupdate5_ghosts,NGA_CUPDATE5_GHOSTS) #define nga_dupdate5_ghosts_ F77_FUNC_(nga_dupdate5_ghosts,NGA_DUPDATE5_GHOSTS) #define nga_iupdate5_ghosts_ F77_FUNC_(nga_iupdate5_ghosts,NGA_IUPDATE5_GHOSTS) #define nga_supdate5_ghosts_ F77_FUNC_(nga_supdate5_ghosts,NGA_SUPDATE5_GHOSTS) #define nga_zupdate5_ghosts_ F77_FUNC_(nga_zupdate5_ghosts,NGA_ZUPDATE5_GHOSTS) #define ga_set_update5_info_ F77_FUNC_(ga_set_update5_info, GA_SET_UPDATE5_INFO) #define ga_cset_update5_info_ F77_FUNC_(ga_cset_update5_info,GA_CSET_UPDATE5_INFO) #define ga_dset_update5_info_ F77_FUNC_(ga_dset_update5_info,GA_DSET_UPDATE5_INFO) #define ga_iset_update5_info_ F77_FUNC_(ga_iset_update5_info,GA_ISET_UPDATE5_INFO) #define ga_sset_update5_info_ F77_FUNC_(ga_sset_update5_info,GA_SSET_UPDATE5_INFO) #define ga_zset_update5_info_ F77_FUNC_(ga_zset_update5_info,GA_ZSET_UPDATE5_INFO) #define nga_set_update5_info_ F77_FUNC_(nga_set_update5_info, NGA_SET_UPDATE5_INFO) #define nga_cset_update5_info_ F77_FUNC_(nga_cset_update5_info,NGA_CSET_UPDATE5_INFO) #define nga_dset_update5_info_ F77_FUNC_(nga_dset_update5_info,NGA_DSET_UPDATE5_INFO) #define nga_iset_update5_info_ F77_FUNC_(nga_iset_update5_info,NGA_ISET_UPDATE5_INFO) #define nga_sset_update5_info_ F77_FUNC_(nga_sset_update5_info,NGA_SSET_UPDATE5_INFO) #define nga_zset_update5_info_ F77_FUNC_(nga_zset_update5_info,NGA_ZSET_UPDATE5_INFO) #define ga_update_ghosts_ F77_FUNC_(ga_update_ghosts, GA_UPDATE_GHOSTS) #define ga_cupdate_ghosts_ F77_FUNC_(ga_cupdate_ghosts,GA_CUPDATE_GHOSTS) #define ga_dupdate_ghosts_ F77_FUNC_(ga_dupdate_ghosts,GA_DUPDATE_GHOSTS) #define ga_iupdate_ghosts_ F77_FUNC_(ga_iupdate_ghosts,GA_IUPDATE_GHOSTS) #define ga_supdate_ghosts_ F77_FUNC_(ga_supdate_ghosts,GA_SUPDATE_GHOSTS) #define ga_zupdate_ghosts_ F77_FUNC_(ga_zupdate_ghosts,GA_ZUPDATE_GHOSTS) #define nga_update_ghosts_ F77_FUNC_(nga_update_ghosts, NGA_UPDATE_GHOSTS) #define nga_cupdate_ghosts_ F77_FUNC_(nga_cupdate_ghosts,NGA_CUPDATE_GHOSTS) #define nga_dupdate_ghosts_ F77_FUNC_(nga_dupdate_ghosts,NGA_DUPDATE_GHOSTS) #define nga_iupdate_ghosts_ F77_FUNC_(nga_iupdate_ghosts,NGA_IUPDATE_GHOSTS) #define nga_supdate_ghosts_ F77_FUNC_(nga_supdate_ghosts,NGA_SUPDATE_GHOSTS) #define nga_zupdate_ghosts_ F77_FUNC_(nga_zupdate_ghosts,NGA_ZUPDATE_GHOSTS) #define ga_update6_ghosts_ F77_FUNC_(ga_update6_ghosts, GA_UPDATE6_GHOSTS) #define ga_cupdate6_ghosts_ F77_FUNC_(ga_cupdate6_ghosts,GA_CUPDATE6_GHOSTS) #define ga_dupdate6_ghosts_ F77_FUNC_(ga_dupdate6_ghosts,GA_DUPDATE6_GHOSTS) #define ga_iupdate6_ghosts_ F77_FUNC_(ga_iupdate6_ghosts,GA_IUPDATE6_GHOSTS) #define ga_supdate6_ghosts_ F77_FUNC_(ga_supdate6_ghosts,GA_SUPDATE6_GHOSTS) #define ga_zupdate6_ghosts_ F77_FUNC_(ga_zupdate6_ghosts,GA_ZUPDATE6_GHOSTS) #define nga_update6_ghosts_ F77_FUNC_(nga_update6_ghosts, NGA_UPDATE6_GHOSTS) #define nga_cupdate6_ghosts_ F77_FUNC_(nga_cupdate6_ghosts,NGA_CUPDATE6_GHOSTS) #define nga_dupdate6_ghosts_ F77_FUNC_(nga_dupdate6_ghosts,NGA_DUPDATE6_GHOSTS) #define nga_iupdate6_ghosts_ F77_FUNC_(nga_iupdate6_ghosts,NGA_IUPDATE6_GHOSTS) #define nga_supdate6_ghosts_ F77_FUNC_(nga_supdate6_ghosts,NGA_SUPDATE6_GHOSTS) #define nga_zupdate6_ghosts_ F77_FUNC_(nga_zupdate6_ghosts,NGA_ZUPDATE6_GHOSTS) #define ga_update7_ghosts_ F77_FUNC_(ga_update7_ghosts, GA_UPDATE7_GHOSTS) #define ga_cupdate7_ghosts_ F77_FUNC_(ga_cupdate7_ghosts,GA_CUPDATE7_GHOSTS) #define ga_dupdate7_ghosts_ F77_FUNC_(ga_dupdate7_ghosts,GA_DUPDATE7_GHOSTS) #define ga_iupdate7_ghosts_ F77_FUNC_(ga_iupdate7_ghosts,GA_IUPDATE7_GHOSTS) #define ga_supdate7_ghosts_ F77_FUNC_(ga_supdate7_ghosts,GA_SUPDATE7_GHOSTS) #define ga_zupdate7_ghosts_ F77_FUNC_(ga_zupdate7_ghosts,GA_ZUPDATE7_GHOSTS) #define nga_update7_ghosts_ F77_FUNC_(nga_update7_ghosts, NGA_UPDATE7_GHOSTS) #define nga_cupdate7_ghosts_ F77_FUNC_(nga_cupdate7_ghosts,NGA_CUPDATE7_GHOSTS) #define nga_dupdate7_ghosts_ F77_FUNC_(nga_dupdate7_ghosts,NGA_DUPDATE7_GHOSTS) #define nga_iupdate7_ghosts_ F77_FUNC_(nga_iupdate7_ghosts,NGA_IUPDATE7_GHOSTS) #define nga_supdate7_ghosts_ F77_FUNC_(nga_supdate7_ghosts,NGA_SUPDATE7_GHOSTS) #define nga_zupdate7_ghosts_ F77_FUNC_(nga_zupdate7_ghosts,NGA_ZUPDATE7_GHOSTS) #define ga_ghost_barrier_ F77_FUNC_(ga_ghost_barrier, GA_GHOST_BARRIER) #define ga_cghost_barrier_ F77_FUNC_(ga_cghost_barrier,GA_CGHOST_BARRIER) #define ga_dghost_barrier_ F77_FUNC_(ga_dghost_barrier,GA_DGHOST_BARRIER) #define ga_ighost_barrier_ F77_FUNC_(ga_ighost_barrier,GA_IGHOST_BARRIER) #define ga_sghost_barrier_ F77_FUNC_(ga_sghost_barrier,GA_SGHOST_BARRIER) #define ga_zghost_barrier_ F77_FUNC_(ga_zghost_barrier,GA_ZGHOST_BARRIER) #define nga_ghost_barrier_ F77_FUNC_(nga_ghost_barrier, NGA_GHOST_BARRIER) #define nga_cghost_barrier_ F77_FUNC_(nga_cghost_barrier,NGA_CGHOST_BARRIER) #define nga_dghost_barrier_ F77_FUNC_(nga_dghost_barrier,NGA_DGHOST_BARRIER) #define nga_ighost_barrier_ F77_FUNC_(nga_ighost_barrier,NGA_IGHOST_BARRIER) #define nga_sghost_barrier_ F77_FUNC_(nga_sghost_barrier,NGA_SGHOST_BARRIER) #define nga_zghost_barrier_ F77_FUNC_(nga_zghost_barrier,NGA_ZGHOST_BARRIER) #define ga_nbget_ghost_dir_ F77_FUNC_(ga_nbget_ghost_dir, GA_NBGET_GHOST_DIR) #define ga_cnbget_ghost_dir_ F77_FUNC_(ga_cnbget_ghost_dir,GA_CNBGET_GHOST_DIR) #define ga_dnbget_ghost_dir_ F77_FUNC_(ga_dnbget_ghost_dir,GA_DNBGET_GHOST_DIR) #define ga_inbget_ghost_dir_ F77_FUNC_(ga_inbget_ghost_dir,GA_INBGET_GHOST_DIR) #define ga_snbget_ghost_dir_ F77_FUNC_(ga_snbget_ghost_dir,GA_SNBGET_GHOST_DIR) #define ga_znbget_ghost_dir_ F77_FUNC_(ga_znbget_ghost_dir,GA_ZNBGET_GHOST_DIR) #define nga_nbget_ghost_dir_ F77_FUNC_(nga_nbget_ghost_dir, NGA_NBGET_GHOST_DIR) #define nga_cnbget_ghost_dir_ F77_FUNC_(nga_cnbget_ghost_dir,NGA_CNBGET_GHOST_DIR) #define nga_dnbget_ghost_dir_ F77_FUNC_(nga_dnbget_ghost_dir,NGA_DNBGET_GHOST_DIR) #define nga_inbget_ghost_dir_ F77_FUNC_(nga_inbget_ghost_dir,NGA_INBGET_GHOST_DIR) #define nga_snbget_ghost_dir_ F77_FUNC_(nga_snbget_ghost_dir,NGA_SNBGET_GHOST_DIR) #define nga_znbget_ghost_dir_ F77_FUNC_(nga_znbget_ghost_dir,NGA_ZNBGET_GHOST_DIR) #define ga_set_ghost_info_ F77_FUNC_(ga_set_ghost_info, GA_SET_GHOST_INFO) #define ga_cset_ghost_info_ F77_FUNC_(ga_cset_ghost_info,GA_CSET_GHOST_INFO) #define ga_dset_ghost_info_ F77_FUNC_(ga_dset_ghost_info,GA_DSET_GHOST_INFO) #define ga_iset_ghost_info_ F77_FUNC_(ga_iset_ghost_info,GA_ISET_GHOST_INFO) #define ga_sset_ghost_info_ F77_FUNC_(ga_sset_ghost_info,GA_SSET_GHOST_INFO) #define ga_zset_ghost_info_ F77_FUNC_(ga_zset_ghost_info,GA_ZSET_GHOST_INFO) #define nga_set_ghost_info_ F77_FUNC_(nga_set_ghost_info, NGA_SET_GHOST_INFO) #define nga_cset_ghost_info_ F77_FUNC_(nga_cset_ghost_info,NGA_CSET_GHOST_INFO) #define nga_dset_ghost_info_ F77_FUNC_(nga_dset_ghost_info,NGA_DSET_GHOST_INFO) #define nga_iset_ghost_info_ F77_FUNC_(nga_iset_ghost_info,NGA_ISET_GHOST_INFO) #define nga_sset_ghost_info_ F77_FUNC_(nga_sset_ghost_info,NGA_SSET_GHOST_INFO) #define nga_zset_ghost_info_ F77_FUNC_(nga_zset_ghost_info,NGA_ZSET_GHOST_INFO) #define ga_set_ghost_corner_flag_ F77_FUNC_(ga_set_ghost_corner_flag, GA_SET_GHOST_CORNER_FLAG) #define ga_cset_ghost_corner_flag_ F77_FUNC_(ga_cset_ghost_corner_flag,GA_CSET_GHOST_CORNER_FLAG) #define ga_dset_ghost_corner_flag_ F77_FUNC_(ga_dset_ghost_corner_flag,GA_DSET_GHOST_CORNER_FLAG) #define ga_iset_ghost_corner_flag_ F77_FUNC_(ga_iset_ghost_corner_flag,GA_ISET_GHOST_CORNER_FLAG) #define ga_sset_ghost_corner_flag_ F77_FUNC_(ga_sset_ghost_corner_flag,GA_SSET_GHOST_CORNER_FLAG) #define ga_zset_ghost_corner_flag_ F77_FUNC_(ga_zset_ghost_corner_flag,GA_ZSET_GHOST_CORNER_FLAG) #define nga_set_ghost_corner_flag_ F77_FUNC_(nga_set_ghost_corner_flag, NGA_SET_GHOST_CORNER_FLAG) #define nga_cset_ghost_corner_flag_ F77_FUNC_(nga_cset_ghost_corner_flag,NGA_CSET_GHOST_CORNER_FLAG) #define nga_dset_ghost_corner_flag_ F77_FUNC_(nga_dset_ghost_corner_flag,NGA_DSET_GHOST_CORNER_FLAG) #define nga_iset_ghost_corner_flag_ F77_FUNC_(nga_iset_ghost_corner_flag,NGA_ISET_GHOST_CORNER_FLAG) #define nga_sset_ghost_corner_flag_ F77_FUNC_(nga_sset_ghost_corner_flag,NGA_SSET_GHOST_CORNER_FLAG) #define nga_zset_ghost_corner_flag_ F77_FUNC_(nga_zset_ghost_corner_flag,NGA_ZSET_GHOST_CORNER_FLAG) #define ga_zero_ F77_FUNC_(ga_zero, GA_ZERO) #define ga_czero_ F77_FUNC_(ga_czero,GA_CZERO) #define ga_dzero_ F77_FUNC_(ga_dzero,GA_DZERO) #define ga_izero_ F77_FUNC_(ga_izero,GA_IZERO) #define ga_szero_ F77_FUNC_(ga_szero,GA_SZERO) #define ga_zzero_ F77_FUNC_(ga_zzero,GA_ZZERO) #define nga_zero_ F77_FUNC_(nga_zero, NGA_ZERO) #define nga_czero_ F77_FUNC_(nga_czero,NGA_CZERO) #define nga_dzero_ F77_FUNC_(nga_dzero,NGA_DZERO) #define nga_izero_ F77_FUNC_(nga_izero,NGA_IZERO) #define nga_szero_ F77_FUNC_(nga_szero,NGA_SZERO) #define nga_zzero_ F77_FUNC_(nga_zzero,NGA_ZZERO) #define ga_copy_ F77_FUNC_(ga_copy, GA_COPY) #define ga_ccopy_ F77_FUNC_(ga_ccopy,GA_CCOPY) #define ga_dcopy_ F77_FUNC_(ga_dcopy,GA_DCOPY) #define ga_icopy_ F77_FUNC_(ga_icopy,GA_ICOPY) #define ga_scopy_ F77_FUNC_(ga_scopy,GA_SCOPY) #define ga_zcopy_ F77_FUNC_(ga_zcopy,GA_ZCOPY) #define nga_copy_ F77_FUNC_(nga_copy, NGA_COPY) #define nga_ccopy_ F77_FUNC_(nga_ccopy,NGA_CCOPY) #define nga_dcopy_ F77_FUNC_(nga_dcopy,NGA_DCOPY) #define nga_icopy_ F77_FUNC_(nga_icopy,NGA_ICOPY) #define nga_scopy_ F77_FUNC_(nga_scopy,NGA_SCOPY) #define nga_zcopy_ F77_FUNC_(nga_zcopy,NGA_ZCOPY) #define ga_dot_ F77_FUNC_(ga_dot, GA_DOT) #define ga_cdot_ F77_FUNC_(ga_cdot,GA_CDOT) #define ga_ddot_ F77_FUNC_(ga_ddot,GA_DDOT) #define ga_idot_ F77_FUNC_(ga_idot,GA_IDOT) #define ga_sdot_ F77_FUNC_(ga_sdot,GA_SDOT) #define ga_zdot_ F77_FUNC_(ga_zdot,GA_ZDOT) #define nga_dot_ F77_FUNC_(nga_dot, NGA_DOT) #define nga_cdot_ F77_FUNC_(nga_cdot,NGA_CDOT) #define nga_ddot_ F77_FUNC_(nga_ddot,NGA_DDOT) #define nga_idot_ F77_FUNC_(nga_idot,NGA_IDOT) #define nga_sdot_ F77_FUNC_(nga_sdot,NGA_SDOT) #define nga_zdot_ F77_FUNC_(nga_zdot,NGA_ZDOT) #define ga_scale_ F77_FUNC_(ga_scale, GA_SCALE) #define ga_cscale_ F77_FUNC_(ga_cscale,GA_CSCALE) #define ga_dscale_ F77_FUNC_(ga_dscale,GA_DSCALE) #define ga_iscale_ F77_FUNC_(ga_iscale,GA_ISCALE) #define ga_sscale_ F77_FUNC_(ga_sscale,GA_SSCALE) #define ga_zscale_ F77_FUNC_(ga_zscale,GA_ZSCALE) #define nga_scale_ F77_FUNC_(nga_scale, NGA_SCALE) #define nga_cscale_ F77_FUNC_(nga_cscale,NGA_CSCALE) #define nga_dscale_ F77_FUNC_(nga_dscale,NGA_DSCALE) #define nga_iscale_ F77_FUNC_(nga_iscale,NGA_ISCALE) #define nga_sscale_ F77_FUNC_(nga_sscale,NGA_SSCALE) #define nga_zscale_ F77_FUNC_(nga_zscale,NGA_ZSCALE) #define ga_add_ F77_FUNC_(ga_add, GA_ADD) #define ga_cadd_ F77_FUNC_(ga_cadd,GA_CADD) #define ga_dadd_ F77_FUNC_(ga_dadd,GA_DADD) #define ga_iadd_ F77_FUNC_(ga_iadd,GA_IADD) #define ga_sadd_ F77_FUNC_(ga_sadd,GA_SADD) #define ga_zadd_ F77_FUNC_(ga_zadd,GA_ZADD) #define nga_add_ F77_FUNC_(nga_add, NGA_ADD) #define nga_cadd_ F77_FUNC_(nga_cadd,NGA_CADD) #define nga_dadd_ F77_FUNC_(nga_dadd,NGA_DADD) #define nga_iadd_ F77_FUNC_(nga_iadd,NGA_IADD) #define nga_sadd_ F77_FUNC_(nga_sadd,NGA_SADD) #define nga_zadd_ F77_FUNC_(nga_zadd,NGA_ZADD) #define ga_transpose_ F77_FUNC_(ga_transpose, GA_TRANSPOSE) #define ga_ctranspose_ F77_FUNC_(ga_ctranspose,GA_CTRANSPOSE) #define ga_dtranspose_ F77_FUNC_(ga_dtranspose,GA_DTRANSPOSE) #define ga_itranspose_ F77_FUNC_(ga_itranspose,GA_ITRANSPOSE) #define ga_stranspose_ F77_FUNC_(ga_stranspose,GA_STRANSPOSE) #define ga_ztranspose_ F77_FUNC_(ga_ztranspose,GA_ZTRANSPOSE) #define nga_transpose_ F77_FUNC_(nga_transpose, NGA_TRANSPOSE) #define nga_ctranspose_ F77_FUNC_(nga_ctranspose,NGA_CTRANSPOSE) #define nga_dtranspose_ F77_FUNC_(nga_dtranspose,NGA_DTRANSPOSE) #define nga_itranspose_ F77_FUNC_(nga_itranspose,NGA_ITRANSPOSE) #define nga_stranspose_ F77_FUNC_(nga_stranspose,NGA_STRANSPOSE) #define nga_ztranspose_ F77_FUNC_(nga_ztranspose,NGA_ZTRANSPOSE) #define ga_copy_patch_ F77_FUNC_(ga_copy_patch, GA_COPY_PATCH) #define ga_ccopy_patch_ F77_FUNC_(ga_ccopy_patch,GA_CCOPY_PATCH) #define ga_dcopy_patch_ F77_FUNC_(ga_dcopy_patch,GA_DCOPY_PATCH) #define ga_icopy_patch_ F77_FUNC_(ga_icopy_patch,GA_ICOPY_PATCH) #define ga_scopy_patch_ F77_FUNC_(ga_scopy_patch,GA_SCOPY_PATCH) #define ga_zcopy_patch_ F77_FUNC_(ga_zcopy_patch,GA_ZCOPY_PATCH) #define nga_copy_patch_ F77_FUNC_(nga_copy_patch, NGA_COPY_PATCH) #define nga_ccopy_patch_ F77_FUNC_(nga_ccopy_patch,NGA_CCOPY_PATCH) #define nga_dcopy_patch_ F77_FUNC_(nga_dcopy_patch,NGA_DCOPY_PATCH) #define nga_icopy_patch_ F77_FUNC_(nga_icopy_patch,NGA_ICOPY_PATCH) #define nga_scopy_patch_ F77_FUNC_(nga_scopy_patch,NGA_SCOPY_PATCH) #define nga_zcopy_patch_ F77_FUNC_(nga_zcopy_patch,NGA_ZCOPY_PATCH) #define ga_zero_patch_ F77_FUNC_(ga_zero_patch, GA_ZERO_PATCH) #define ga_czero_patch_ F77_FUNC_(ga_czero_patch,GA_CZERO_PATCH) #define ga_dzero_patch_ F77_FUNC_(ga_dzero_patch,GA_DZERO_PATCH) #define ga_izero_patch_ F77_FUNC_(ga_izero_patch,GA_IZERO_PATCH) #define ga_szero_patch_ F77_FUNC_(ga_szero_patch,GA_SZERO_PATCH) #define ga_zzero_patch_ F77_FUNC_(ga_zzero_patch,GA_ZZERO_PATCH) #define nga_zero_patch_ F77_FUNC_(nga_zero_patch, NGA_ZERO_PATCH) #define nga_czero_patch_ F77_FUNC_(nga_czero_patch,NGA_CZERO_PATCH) #define nga_dzero_patch_ F77_FUNC_(nga_dzero_patch,NGA_DZERO_PATCH) #define nga_izero_patch_ F77_FUNC_(nga_izero_patch,NGA_IZERO_PATCH) #define nga_szero_patch_ F77_FUNC_(nga_szero_patch,NGA_SZERO_PATCH) #define nga_zzero_patch_ F77_FUNC_(nga_zzero_patch,NGA_ZZERO_PATCH) #define ga_patch_intersect_ F77_FUNC_(ga_patch_intersect, GA_PATCH_INTERSECT) #define ga_cpatch_intersect_ F77_FUNC_(ga_cpatch_intersect,GA_CPATCH_INTERSECT) #define ga_dpatch_intersect_ F77_FUNC_(ga_dpatch_intersect,GA_DPATCH_INTERSECT) #define ga_ipatch_intersect_ F77_FUNC_(ga_ipatch_intersect,GA_IPATCH_INTERSECT) #define ga_spatch_intersect_ F77_FUNC_(ga_spatch_intersect,GA_SPATCH_INTERSECT) #define ga_zpatch_intersect_ F77_FUNC_(ga_zpatch_intersect,GA_ZPATCH_INTERSECT) #define nga_patch_intersect_ F77_FUNC_(nga_patch_intersect, NGA_PATCH_INTERSECT) #define nga_cpatch_intersect_ F77_FUNC_(nga_cpatch_intersect,NGA_CPATCH_INTERSECT) #define nga_dpatch_intersect_ F77_FUNC_(nga_dpatch_intersect,NGA_DPATCH_INTERSECT) #define nga_ipatch_intersect_ F77_FUNC_(nga_ipatch_intersect,NGA_IPATCH_INTERSECT) #define nga_spatch_intersect_ F77_FUNC_(nga_spatch_intersect,NGA_SPATCH_INTERSECT) #define nga_zpatch_intersect_ F77_FUNC_(nga_zpatch_intersect,NGA_ZPATCH_INTERSECT) #define ga_comp_patch_ F77_FUNC_(ga_comp_patch, GA_COMP_PATCH) #define ga_ccomp_patch_ F77_FUNC_(ga_ccomp_patch,GA_CCOMP_PATCH) #define ga_dcomp_patch_ F77_FUNC_(ga_dcomp_patch,GA_DCOMP_PATCH) #define ga_icomp_patch_ F77_FUNC_(ga_icomp_patch,GA_ICOMP_PATCH) #define ga_scomp_patch_ F77_FUNC_(ga_scomp_patch,GA_SCOMP_PATCH) #define ga_zcomp_patch_ F77_FUNC_(ga_zcomp_patch,GA_ZCOMP_PATCH) #define nga_comp_patch_ F77_FUNC_(nga_comp_patch, NGA_COMP_PATCH) #define nga_ccomp_patch_ F77_FUNC_(nga_ccomp_patch,NGA_CCOMP_PATCH) #define nga_dcomp_patch_ F77_FUNC_(nga_dcomp_patch,NGA_DCOMP_PATCH) #define nga_icomp_patch_ F77_FUNC_(nga_icomp_patch,NGA_ICOMP_PATCH) #define nga_scomp_patch_ F77_FUNC_(nga_scomp_patch,NGA_SCOMP_PATCH) #define nga_zcomp_patch_ F77_FUNC_(nga_zcomp_patch,NGA_ZCOMP_PATCH) #define ga_dot_patch_ F77_FUNC_(ga_dot_patch, GA_DOT_PATCH) #define ga_cdot_patch_ F77_FUNC_(ga_cdot_patch,GA_CDOT_PATCH) #define ga_ddot_patch_ F77_FUNC_(ga_ddot_patch,GA_DDOT_PATCH) #define ga_idot_patch_ F77_FUNC_(ga_idot_patch,GA_IDOT_PATCH) #define ga_sdot_patch_ F77_FUNC_(ga_sdot_patch,GA_SDOT_PATCH) #define ga_zdot_patch_ F77_FUNC_(ga_zdot_patch,GA_ZDOT_PATCH) #define nga_dot_patch_ F77_FUNC_(nga_dot_patch, NGA_DOT_PATCH) #define nga_cdot_patch_ F77_FUNC_(nga_cdot_patch,NGA_CDOT_PATCH) #define nga_ddot_patch_ F77_FUNC_(nga_ddot_patch,NGA_DDOT_PATCH) #define nga_idot_patch_ F77_FUNC_(nga_idot_patch,NGA_IDOT_PATCH) #define nga_sdot_patch_ F77_FUNC_(nga_sdot_patch,NGA_SDOT_PATCH) #define nga_zdot_patch_ F77_FUNC_(nga_zdot_patch,NGA_ZDOT_PATCH) #define ga_fill_patch_ F77_FUNC_(ga_fill_patch, GA_FILL_PATCH) #define ga_cfill_patch_ F77_FUNC_(ga_cfill_patch,GA_CFILL_PATCH) #define ga_dfill_patch_ F77_FUNC_(ga_dfill_patch,GA_DFILL_PATCH) #define ga_ifill_patch_ F77_FUNC_(ga_ifill_patch,GA_IFILL_PATCH) #define ga_sfill_patch_ F77_FUNC_(ga_sfill_patch,GA_SFILL_PATCH) #define ga_zfill_patch_ F77_FUNC_(ga_zfill_patch,GA_ZFILL_PATCH) #define nga_fill_patch_ F77_FUNC_(nga_fill_patch, NGA_FILL_PATCH) #define nga_cfill_patch_ F77_FUNC_(nga_cfill_patch,NGA_CFILL_PATCH) #define nga_dfill_patch_ F77_FUNC_(nga_dfill_patch,NGA_DFILL_PATCH) #define nga_ifill_patch_ F77_FUNC_(nga_ifill_patch,NGA_IFILL_PATCH) #define nga_sfill_patch_ F77_FUNC_(nga_sfill_patch,NGA_SFILL_PATCH) #define nga_zfill_patch_ F77_FUNC_(nga_zfill_patch,NGA_ZFILL_PATCH) #define ga_scale_patch_ F77_FUNC_(ga_scale_patch, GA_SCALE_PATCH) #define ga_cscale_patch_ F77_FUNC_(ga_cscale_patch,GA_CSCALE_PATCH) #define ga_dscale_patch_ F77_FUNC_(ga_dscale_patch,GA_DSCALE_PATCH) #define ga_iscale_patch_ F77_FUNC_(ga_iscale_patch,GA_ISCALE_PATCH) #define ga_sscale_patch_ F77_FUNC_(ga_sscale_patch,GA_SSCALE_PATCH) #define ga_zscale_patch_ F77_FUNC_(ga_zscale_patch,GA_ZSCALE_PATCH) #define nga_scale_patch_ F77_FUNC_(nga_scale_patch, NGA_SCALE_PATCH) #define nga_cscale_patch_ F77_FUNC_(nga_cscale_patch,NGA_CSCALE_PATCH) #define nga_dscale_patch_ F77_FUNC_(nga_dscale_patch,NGA_DSCALE_PATCH) #define nga_iscale_patch_ F77_FUNC_(nga_iscale_patch,NGA_ISCALE_PATCH) #define nga_sscale_patch_ F77_FUNC_(nga_sscale_patch,NGA_SSCALE_PATCH) #define nga_zscale_patch_ F77_FUNC_(nga_zscale_patch,NGA_ZSCALE_PATCH) #define ga_add_patch_ F77_FUNC_(ga_add_patch, GA_ADD_PATCH) #define ga_cadd_patch_ F77_FUNC_(ga_cadd_patch,GA_CADD_PATCH) #define ga_dadd_patch_ F77_FUNC_(ga_dadd_patch,GA_DADD_PATCH) #define ga_iadd_patch_ F77_FUNC_(ga_iadd_patch,GA_IADD_PATCH) #define ga_sadd_patch_ F77_FUNC_(ga_sadd_patch,GA_SADD_PATCH) #define ga_zadd_patch_ F77_FUNC_(ga_zadd_patch,GA_ZADD_PATCH) #define nga_add_patch_ F77_FUNC_(nga_add_patch, NGA_ADD_PATCH) #define nga_cadd_patch_ F77_FUNC_(nga_cadd_patch,NGA_CADD_PATCH) #define nga_dadd_patch_ F77_FUNC_(nga_dadd_patch,NGA_DADD_PATCH) #define nga_iadd_patch_ F77_FUNC_(nga_iadd_patch,NGA_IADD_PATCH) #define nga_sadd_patch_ F77_FUNC_(nga_sadd_patch,NGA_SADD_PATCH) #define nga_zadd_patch_ F77_FUNC_(nga_zadd_patch,NGA_ZADD_PATCH) #define ga_select_elem_ F77_FUNC_(ga_select_elem, GA_SELECT_ELEM) #define ga_cselect_elem_ F77_FUNC_(ga_cselect_elem,GA_CSELECT_ELEM) #define ga_dselect_elem_ F77_FUNC_(ga_dselect_elem,GA_DSELECT_ELEM) #define ga_iselect_elem_ F77_FUNC_(ga_iselect_elem,GA_ISELECT_ELEM) #define ga_sselect_elem_ F77_FUNC_(ga_sselect_elem,GA_SSELECT_ELEM) #define ga_zselect_elem_ F77_FUNC_(ga_zselect_elem,GA_ZSELECT_ELEM) #define nga_select_elem_ F77_FUNC_(nga_select_elem, NGA_SELECT_ELEM) #define nga_cselect_elem_ F77_FUNC_(nga_cselect_elem,NGA_CSELECT_ELEM) #define nga_dselect_elem_ F77_FUNC_(nga_dselect_elem,NGA_DSELECT_ELEM) #define nga_iselect_elem_ F77_FUNC_(nga_iselect_elem,NGA_ISELECT_ELEM) #define nga_sselect_elem_ F77_FUNC_(nga_sselect_elem,NGA_SSELECT_ELEM) #define nga_zselect_elem_ F77_FUNC_(nga_zselect_elem,NGA_ZSELECT_ELEM) #define ga_memory_avail_type_ F77_FUNC_(ga_memory_avail_type, GA_MEMORY_AVAIL_TYPE) #define ga_cmemory_avail_type_ F77_FUNC_(ga_cmemory_avail_type,GA_CMEMORY_AVAIL_TYPE) #define ga_dmemory_avail_type_ F77_FUNC_(ga_dmemory_avail_type,GA_DMEMORY_AVAIL_TYPE) #define ga_imemory_avail_type_ F77_FUNC_(ga_imemory_avail_type,GA_IMEMORY_AVAIL_TYPE) #define ga_smemory_avail_type_ F77_FUNC_(ga_smemory_avail_type,GA_SMEMORY_AVAIL_TYPE) #define ga_zmemory_avail_type_ F77_FUNC_(ga_zmemory_avail_type,GA_ZMEMORY_AVAIL_TYPE) #define nga_memory_avail_type_ F77_FUNC_(nga_memory_avail_type, NGA_MEMORY_AVAIL_TYPE) #define nga_cmemory_avail_type_ F77_FUNC_(nga_cmemory_avail_type,NGA_CMEMORY_AVAIL_TYPE) #define nga_dmemory_avail_type_ F77_FUNC_(nga_dmemory_avail_type,NGA_DMEMORY_AVAIL_TYPE) #define nga_imemory_avail_type_ F77_FUNC_(nga_imemory_avail_type,NGA_IMEMORY_AVAIL_TYPE) #define nga_smemory_avail_type_ F77_FUNC_(nga_smemory_avail_type,NGA_SMEMORY_AVAIL_TYPE) #define nga_zmemory_avail_type_ F77_FUNC_(nga_zmemory_avail_type,NGA_ZMEMORY_AVAIL_TYPE) #define ga_patch_enum_ F77_FUNC_(ga_patch_enum, GA_PATCH_ENUM) #define ga_cpatch_enum_ F77_FUNC_(ga_cpatch_enum,GA_CPATCH_ENUM) #define ga_dpatch_enum_ F77_FUNC_(ga_dpatch_enum,GA_DPATCH_ENUM) #define ga_ipatch_enum_ F77_FUNC_(ga_ipatch_enum,GA_IPATCH_ENUM) #define ga_spatch_enum_ F77_FUNC_(ga_spatch_enum,GA_SPATCH_ENUM) #define ga_zpatch_enum_ F77_FUNC_(ga_zpatch_enum,GA_ZPATCH_ENUM) #define nga_patch_enum_ F77_FUNC_(nga_patch_enum, NGA_PATCH_ENUM) #define nga_cpatch_enum_ F77_FUNC_(nga_cpatch_enum,NGA_CPATCH_ENUM) #define nga_dpatch_enum_ F77_FUNC_(nga_dpatch_enum,NGA_DPATCH_ENUM) #define nga_ipatch_enum_ F77_FUNC_(nga_ipatch_enum,NGA_IPATCH_ENUM) #define nga_spatch_enum_ F77_FUNC_(nga_spatch_enum,NGA_SPATCH_ENUM) #define nga_zpatch_enum_ F77_FUNC_(nga_zpatch_enum,NGA_ZPATCH_ENUM) #define ga_scan_copy_ F77_FUNC_(ga_scan_copy, GA_SCAN_COPY) #define ga_cscan_copy_ F77_FUNC_(ga_cscan_copy,GA_CSCAN_COPY) #define ga_dscan_copy_ F77_FUNC_(ga_dscan_copy,GA_DSCAN_COPY) #define ga_iscan_copy_ F77_FUNC_(ga_iscan_copy,GA_ISCAN_COPY) #define ga_sscan_copy_ F77_FUNC_(ga_sscan_copy,GA_SSCAN_COPY) #define ga_zscan_copy_ F77_FUNC_(ga_zscan_copy,GA_ZSCAN_COPY) #define nga_scan_copy_ F77_FUNC_(nga_scan_copy, NGA_SCAN_COPY) #define nga_cscan_copy_ F77_FUNC_(nga_cscan_copy,NGA_CSCAN_COPY) #define nga_dscan_copy_ F77_FUNC_(nga_dscan_copy,NGA_DSCAN_COPY) #define nga_iscan_copy_ F77_FUNC_(nga_iscan_copy,NGA_ISCAN_COPY) #define nga_sscan_copy_ F77_FUNC_(nga_sscan_copy,NGA_SSCAN_COPY) #define nga_zscan_copy_ F77_FUNC_(nga_zscan_copy,NGA_ZSCAN_COPY) #define ga_scan_add_ F77_FUNC_(ga_scan_add, GA_SCAN_ADD) #define ga_cscan_add_ F77_FUNC_(ga_cscan_add,GA_CSCAN_ADD) #define ga_dscan_add_ F77_FUNC_(ga_dscan_add,GA_DSCAN_ADD) #define ga_iscan_add_ F77_FUNC_(ga_iscan_add,GA_ISCAN_ADD) #define ga_sscan_add_ F77_FUNC_(ga_sscan_add,GA_SSCAN_ADD) #define ga_zscan_add_ F77_FUNC_(ga_zscan_add,GA_ZSCAN_ADD) #define nga_scan_add_ F77_FUNC_(nga_scan_add, NGA_SCAN_ADD) #define nga_cscan_add_ F77_FUNC_(nga_cscan_add,NGA_CSCAN_ADD) #define nga_dscan_add_ F77_FUNC_(nga_dscan_add,NGA_DSCAN_ADD) #define nga_iscan_add_ F77_FUNC_(nga_iscan_add,NGA_ISCAN_ADD) #define nga_sscan_add_ F77_FUNC_(nga_sscan_add,NGA_SSCAN_ADD) #define nga_zscan_add_ F77_FUNC_(nga_zscan_add,NGA_ZSCAN_ADD) #define ga_pack_ F77_FUNC_(ga_pack, GA_PACK) #define ga_cpack_ F77_FUNC_(ga_cpack,GA_CPACK) #define ga_dpack_ F77_FUNC_(ga_dpack,GA_DPACK) #define ga_ipack_ F77_FUNC_(ga_ipack,GA_IPACK) #define ga_spack_ F77_FUNC_(ga_spack,GA_SPACK) #define ga_zpack_ F77_FUNC_(ga_zpack,GA_ZPACK) #define nga_pack_ F77_FUNC_(nga_pack, NGA_PACK) #define nga_cpack_ F77_FUNC_(nga_cpack,NGA_CPACK) #define nga_dpack_ F77_FUNC_(nga_dpack,NGA_DPACK) #define nga_ipack_ F77_FUNC_(nga_ipack,NGA_IPACK) #define nga_spack_ F77_FUNC_(nga_spack,NGA_SPACK) #define nga_zpack_ F77_FUNC_(nga_zpack,NGA_ZPACK) #define ga_unpack_ F77_FUNC_(ga_unpack, GA_UNPACK) #define ga_cunpack_ F77_FUNC_(ga_cunpack,GA_CUNPACK) #define ga_dunpack_ F77_FUNC_(ga_dunpack,GA_DUNPACK) #define ga_iunpack_ F77_FUNC_(ga_iunpack,GA_IUNPACK) #define ga_sunpack_ F77_FUNC_(ga_sunpack,GA_SUNPACK) #define ga_zunpack_ F77_FUNC_(ga_zunpack,GA_ZUNPACK) #define nga_unpack_ F77_FUNC_(nga_unpack, NGA_UNPACK) #define nga_cunpack_ F77_FUNC_(nga_cunpack,NGA_CUNPACK) #define nga_dunpack_ F77_FUNC_(nga_dunpack,NGA_DUNPACK) #define nga_iunpack_ F77_FUNC_(nga_iunpack,NGA_IUNPACK) #define nga_sunpack_ F77_FUNC_(nga_sunpack,NGA_SUNPACK) #define nga_zunpack_ F77_FUNC_(nga_zunpack,NGA_ZUNPACK) #define ga_create_bin_range_ F77_FUNC_(ga_create_bin_range, GA_CREATE_BIN_RANGE) #define ga_ccreate_bin_range_ F77_FUNC_(ga_ccreate_bin_range,GA_CCREATE_BIN_RANGE) #define ga_dcreate_bin_range_ F77_FUNC_(ga_dcreate_bin_range,GA_DCREATE_BIN_RANGE) #define ga_icreate_bin_range_ F77_FUNC_(ga_icreate_bin_range,GA_ICREATE_BIN_RANGE) #define ga_screate_bin_range_ F77_FUNC_(ga_screate_bin_range,GA_SCREATE_BIN_RANGE) #define ga_zcreate_bin_range_ F77_FUNC_(ga_zcreate_bin_range,GA_ZCREATE_BIN_RANGE) #define nga_create_bin_range_ F77_FUNC_(nga_create_bin_range, NGA_CREATE_BIN_RANGE) #define nga_ccreate_bin_range_ F77_FUNC_(nga_ccreate_bin_range,NGA_CCREATE_BIN_RANGE) #define nga_dcreate_bin_range_ F77_FUNC_(nga_dcreate_bin_range,NGA_DCREATE_BIN_RANGE) #define nga_icreate_bin_range_ F77_FUNC_(nga_icreate_bin_range,NGA_ICREATE_BIN_RANGE) #define nga_screate_bin_range_ F77_FUNC_(nga_screate_bin_range,NGA_SCREATE_BIN_RANGE) #define nga_zcreate_bin_range_ F77_FUNC_(nga_zcreate_bin_range,NGA_ZCREATE_BIN_RANGE) #define ga_bin_sorter_ F77_FUNC_(ga_bin_sorter, GA_BIN_SORTER) #define ga_cbin_sorter_ F77_FUNC_(ga_cbin_sorter,GA_CBIN_SORTER) #define ga_dbin_sorter_ F77_FUNC_(ga_dbin_sorter,GA_DBIN_SORTER) #define ga_ibin_sorter_ F77_FUNC_(ga_ibin_sorter,GA_IBIN_SORTER) #define ga_sbin_sorter_ F77_FUNC_(ga_sbin_sorter,GA_SBIN_SORTER) #define ga_zbin_sorter_ F77_FUNC_(ga_zbin_sorter,GA_ZBIN_SORTER) #define nga_bin_sorter_ F77_FUNC_(nga_bin_sorter, NGA_BIN_SORTER) #define nga_cbin_sorter_ F77_FUNC_(nga_cbin_sorter,NGA_CBIN_SORTER) #define nga_dbin_sorter_ F77_FUNC_(nga_dbin_sorter,NGA_DBIN_SORTER) #define nga_ibin_sorter_ F77_FUNC_(nga_ibin_sorter,NGA_IBIN_SORTER) #define nga_sbin_sorter_ F77_FUNC_(nga_sbin_sorter,NGA_SBIN_SORTER) #define nga_zbin_sorter_ F77_FUNC_(nga_zbin_sorter,NGA_ZBIN_SORTER) #define ga_bin_index_ F77_FUNC_(ga_bin_index, GA_BIN_INDEX) #define ga_cbin_index_ F77_FUNC_(ga_cbin_index,GA_CBIN_INDEX) #define ga_dbin_index_ F77_FUNC_(ga_dbin_index,GA_DBIN_INDEX) #define ga_ibin_index_ F77_FUNC_(ga_ibin_index,GA_IBIN_INDEX) #define ga_sbin_index_ F77_FUNC_(ga_sbin_index,GA_SBIN_INDEX) #define ga_zbin_index_ F77_FUNC_(ga_zbin_index,GA_ZBIN_INDEX) #define nga_bin_index_ F77_FUNC_(nga_bin_index, NGA_BIN_INDEX) #define nga_cbin_index_ F77_FUNC_(nga_cbin_index,NGA_CBIN_INDEX) #define nga_dbin_index_ F77_FUNC_(nga_dbin_index,NGA_DBIN_INDEX) #define nga_ibin_index_ F77_FUNC_(nga_ibin_index,NGA_IBIN_INDEX) #define nga_sbin_index_ F77_FUNC_(nga_sbin_index,NGA_SBIN_INDEX) #define nga_zbin_index_ F77_FUNC_(nga_zbin_index,NGA_ZBIN_INDEX) #define ga_median_patch_ F77_FUNC_(ga_median_patch, GA_MEDIAN_PATCH) #define ga_cmedian_patch_ F77_FUNC_(ga_cmedian_patch,GA_CMEDIAN_PATCH) #define ga_dmedian_patch_ F77_FUNC_(ga_dmedian_patch,GA_DMEDIAN_PATCH) #define ga_imedian_patch_ F77_FUNC_(ga_imedian_patch,GA_IMEDIAN_PATCH) #define ga_smedian_patch_ F77_FUNC_(ga_smedian_patch,GA_SMEDIAN_PATCH) #define ga_zmedian_patch_ F77_FUNC_(ga_zmedian_patch,GA_ZMEDIAN_PATCH) #define nga_median_patch_ F77_FUNC_(nga_median_patch, NGA_MEDIAN_PATCH) #define nga_cmedian_patch_ F77_FUNC_(nga_cmedian_patch,NGA_CMEDIAN_PATCH) #define nga_dmedian_patch_ F77_FUNC_(nga_dmedian_patch,NGA_DMEDIAN_PATCH) #define nga_imedian_patch_ F77_FUNC_(nga_imedian_patch,NGA_IMEDIAN_PATCH) #define nga_smedian_patch_ F77_FUNC_(nga_smedian_patch,NGA_SMEDIAN_PATCH) #define nga_zmedian_patch_ F77_FUNC_(nga_zmedian_patch,NGA_ZMEDIAN_PATCH) #define ga_median_ F77_FUNC_(ga_median, GA_MEDIAN) #define ga_cmedian_ F77_FUNC_(ga_cmedian,GA_CMEDIAN) #define ga_dmedian_ F77_FUNC_(ga_dmedian,GA_DMEDIAN) #define ga_imedian_ F77_FUNC_(ga_imedian,GA_IMEDIAN) #define ga_smedian_ F77_FUNC_(ga_smedian,GA_SMEDIAN) #define ga_zmedian_ F77_FUNC_(ga_zmedian,GA_ZMEDIAN) #define nga_median_ F77_FUNC_(nga_median, NGA_MEDIAN) #define nga_cmedian_ F77_FUNC_(nga_cmedian,NGA_CMEDIAN) #define nga_dmedian_ F77_FUNC_(nga_dmedian,NGA_DMEDIAN) #define nga_imedian_ F77_FUNC_(nga_imedian,NGA_IMEDIAN) #define nga_smedian_ F77_FUNC_(nga_smedian,NGA_SMEDIAN) #define nga_zmedian_ F77_FUNC_(nga_zmedian,NGA_ZMEDIAN) #define ga_norm_infinity_ F77_FUNC_(ga_norm_infinity, GA_NORM_INFINITY) #define ga_cnorm_infinity_ F77_FUNC_(ga_cnorm_infinity,GA_CNORM_INFINITY) #define ga_dnorm_infinity_ F77_FUNC_(ga_dnorm_infinity,GA_DNORM_INFINITY) #define ga_inorm_infinity_ F77_FUNC_(ga_inorm_infinity,GA_INORM_INFINITY) #define ga_snorm_infinity_ F77_FUNC_(ga_snorm_infinity,GA_SNORM_INFINITY) #define ga_znorm_infinity_ F77_FUNC_(ga_znorm_infinity,GA_ZNORM_INFINITY) #define nga_norm_infinity_ F77_FUNC_(nga_norm_infinity, NGA_NORM_INFINITY) #define nga_cnorm_infinity_ F77_FUNC_(nga_cnorm_infinity,NGA_CNORM_INFINITY) #define nga_dnorm_infinity_ F77_FUNC_(nga_dnorm_infinity,NGA_DNORM_INFINITY) #define nga_inorm_infinity_ F77_FUNC_(nga_inorm_infinity,NGA_INORM_INFINITY) #define nga_snorm_infinity_ F77_FUNC_(nga_snorm_infinity,NGA_SNORM_INFINITY) #define nga_znorm_infinity_ F77_FUNC_(nga_znorm_infinity,NGA_ZNORM_INFINITY) #define ga_norm1_ F77_FUNC_(ga_norm1, GA_NORM1) #define ga_cnorm1_ F77_FUNC_(ga_cnorm1,GA_CNORM1) #define ga_dnorm1_ F77_FUNC_(ga_dnorm1,GA_DNORM1) #define ga_inorm1_ F77_FUNC_(ga_inorm1,GA_INORM1) #define ga_snorm1_ F77_FUNC_(ga_snorm1,GA_SNORM1) #define ga_znorm1_ F77_FUNC_(ga_znorm1,GA_ZNORM1) #define nga_norm1_ F77_FUNC_(nga_norm1, NGA_NORM1) #define nga_cnorm1_ F77_FUNC_(nga_cnorm1,NGA_CNORM1) #define nga_dnorm1_ F77_FUNC_(nga_dnorm1,NGA_DNORM1) #define nga_inorm1_ F77_FUNC_(nga_inorm1,NGA_INORM1) #define nga_snorm1_ F77_FUNC_(nga_snorm1,NGA_SNORM1) #define nga_znorm1_ F77_FUNC_(nga_znorm1,NGA_ZNORM1) #define ga_get_diag_ F77_FUNC_(ga_get_diag, GA_GET_DIAG) #define ga_cget_diag_ F77_FUNC_(ga_cget_diag,GA_CGET_DIAG) #define ga_dget_diag_ F77_FUNC_(ga_dget_diag,GA_DGET_DIAG) #define ga_iget_diag_ F77_FUNC_(ga_iget_diag,GA_IGET_DIAG) #define ga_sget_diag_ F77_FUNC_(ga_sget_diag,GA_SGET_DIAG) #define ga_zget_diag_ F77_FUNC_(ga_zget_diag,GA_ZGET_DIAG) #define nga_get_diag_ F77_FUNC_(nga_get_diag, NGA_GET_DIAG) #define nga_cget_diag_ F77_FUNC_(nga_cget_diag,NGA_CGET_DIAG) #define nga_dget_diag_ F77_FUNC_(nga_dget_diag,NGA_DGET_DIAG) #define nga_iget_diag_ F77_FUNC_(nga_iget_diag,NGA_IGET_DIAG) #define nga_sget_diag_ F77_FUNC_(nga_sget_diag,NGA_SGET_DIAG) #define nga_zget_diag_ F77_FUNC_(nga_zget_diag,NGA_ZGET_DIAG) #define ga_add_diagonal_ F77_FUNC_(ga_add_diagonal, GA_ADD_DIAGONAL) #define ga_cadd_diagonal_ F77_FUNC_(ga_cadd_diagonal,GA_CADD_DIAGONAL) #define ga_dadd_diagonal_ F77_FUNC_(ga_dadd_diagonal,GA_DADD_DIAGONAL) #define ga_iadd_diagonal_ F77_FUNC_(ga_iadd_diagonal,GA_IADD_DIAGONAL) #define ga_sadd_diagonal_ F77_FUNC_(ga_sadd_diagonal,GA_SADD_DIAGONAL) #define ga_zadd_diagonal_ F77_FUNC_(ga_zadd_diagonal,GA_ZADD_DIAGONAL) #define nga_add_diagonal_ F77_FUNC_(nga_add_diagonal, NGA_ADD_DIAGONAL) #define nga_cadd_diagonal_ F77_FUNC_(nga_cadd_diagonal,NGA_CADD_DIAGONAL) #define nga_dadd_diagonal_ F77_FUNC_(nga_dadd_diagonal,NGA_DADD_DIAGONAL) #define nga_iadd_diagonal_ F77_FUNC_(nga_iadd_diagonal,NGA_IADD_DIAGONAL) #define nga_sadd_diagonal_ F77_FUNC_(nga_sadd_diagonal,NGA_SADD_DIAGONAL) #define nga_zadd_diagonal_ F77_FUNC_(nga_zadd_diagonal,NGA_ZADD_DIAGONAL) #define ga_set_diagonal_ F77_FUNC_(ga_set_diagonal, GA_SET_DIAGONAL) #define ga_cset_diagonal_ F77_FUNC_(ga_cset_diagonal,GA_CSET_DIAGONAL) #define ga_dset_diagonal_ F77_FUNC_(ga_dset_diagonal,GA_DSET_DIAGONAL) #define ga_iset_diagonal_ F77_FUNC_(ga_iset_diagonal,GA_ISET_DIAGONAL) #define ga_sset_diagonal_ F77_FUNC_(ga_sset_diagonal,GA_SSET_DIAGONAL) #define ga_zset_diagonal_ F77_FUNC_(ga_zset_diagonal,GA_ZSET_DIAGONAL) #define nga_set_diagonal_ F77_FUNC_(nga_set_diagonal, NGA_SET_DIAGONAL) #define nga_cset_diagonal_ F77_FUNC_(nga_cset_diagonal,NGA_CSET_DIAGONAL) #define nga_dset_diagonal_ F77_FUNC_(nga_dset_diagonal,NGA_DSET_DIAGONAL) #define nga_iset_diagonal_ F77_FUNC_(nga_iset_diagonal,NGA_ISET_DIAGONAL) #define nga_sset_diagonal_ F77_FUNC_(nga_sset_diagonal,NGA_SSET_DIAGONAL) #define nga_zset_diagonal_ F77_FUNC_(nga_zset_diagonal,NGA_ZSET_DIAGONAL) #define ga_shift_diagonal_ F77_FUNC_(ga_shift_diagonal, GA_SHIFT_DIAGONAL) #define ga_cshift_diagonal_ F77_FUNC_(ga_cshift_diagonal,GA_CSHIFT_DIAGONAL) #define ga_dshift_diagonal_ F77_FUNC_(ga_dshift_diagonal,GA_DSHIFT_DIAGONAL) #define ga_ishift_diagonal_ F77_FUNC_(ga_ishift_diagonal,GA_ISHIFT_DIAGONAL) #define ga_sshift_diagonal_ F77_FUNC_(ga_sshift_diagonal,GA_SSHIFT_DIAGONAL) #define ga_zshift_diagonal_ F77_FUNC_(ga_zshift_diagonal,GA_ZSHIFT_DIAGONAL) #define nga_shift_diagonal_ F77_FUNC_(nga_shift_diagonal, NGA_SHIFT_DIAGONAL) #define nga_cshift_diagonal_ F77_FUNC_(nga_cshift_diagonal,NGA_CSHIFT_DIAGONAL) #define nga_dshift_diagonal_ F77_FUNC_(nga_dshift_diagonal,NGA_DSHIFT_DIAGONAL) #define nga_ishift_diagonal_ F77_FUNC_(nga_ishift_diagonal,NGA_ISHIFT_DIAGONAL) #define nga_sshift_diagonal_ F77_FUNC_(nga_sshift_diagonal,NGA_SSHIFT_DIAGONAL) #define nga_zshift_diagonal_ F77_FUNC_(nga_zshift_diagonal,NGA_ZSHIFT_DIAGONAL) #define ga_zero_diagonal_ F77_FUNC_(ga_zero_diagonal, GA_ZERO_DIAGONAL) #define ga_czero_diagonal_ F77_FUNC_(ga_czero_diagonal,GA_CZERO_DIAGONAL) #define ga_dzero_diagonal_ F77_FUNC_(ga_dzero_diagonal,GA_DZERO_DIAGONAL) #define ga_izero_diagonal_ F77_FUNC_(ga_izero_diagonal,GA_IZERO_DIAGONAL) #define ga_szero_diagonal_ F77_FUNC_(ga_szero_diagonal,GA_SZERO_DIAGONAL) #define ga_zzero_diagonal_ F77_FUNC_(ga_zzero_diagonal,GA_ZZERO_DIAGONAL) #define nga_zero_diagonal_ F77_FUNC_(nga_zero_diagonal, NGA_ZERO_DIAGONAL) #define nga_czero_diagonal_ F77_FUNC_(nga_czero_diagonal,NGA_CZERO_DIAGONAL) #define nga_dzero_diagonal_ F77_FUNC_(nga_dzero_diagonal,NGA_DZERO_DIAGONAL) #define nga_izero_diagonal_ F77_FUNC_(nga_izero_diagonal,NGA_IZERO_DIAGONAL) #define nga_szero_diagonal_ F77_FUNC_(nga_szero_diagonal,NGA_SZERO_DIAGONAL) #define nga_zzero_diagonal_ F77_FUNC_(nga_zzero_diagonal,NGA_ZZERO_DIAGONAL) #define ga_scale_rows_ F77_FUNC_(ga_scale_rows, GA_SCALE_ROWS) #define ga_cscale_rows_ F77_FUNC_(ga_cscale_rows,GA_CSCALE_ROWS) #define ga_dscale_rows_ F77_FUNC_(ga_dscale_rows,GA_DSCALE_ROWS) #define ga_iscale_rows_ F77_FUNC_(ga_iscale_rows,GA_ISCALE_ROWS) #define ga_sscale_rows_ F77_FUNC_(ga_sscale_rows,GA_SSCALE_ROWS) #define ga_zscale_rows_ F77_FUNC_(ga_zscale_rows,GA_ZSCALE_ROWS) #define nga_scale_rows_ F77_FUNC_(nga_scale_rows, NGA_SCALE_ROWS) #define nga_cscale_rows_ F77_FUNC_(nga_cscale_rows,NGA_CSCALE_ROWS) #define nga_dscale_rows_ F77_FUNC_(nga_dscale_rows,NGA_DSCALE_ROWS) #define nga_iscale_rows_ F77_FUNC_(nga_iscale_rows,NGA_ISCALE_ROWS) #define nga_sscale_rows_ F77_FUNC_(nga_sscale_rows,NGA_SSCALE_ROWS) #define nga_zscale_rows_ F77_FUNC_(nga_zscale_rows,NGA_ZSCALE_ROWS) #define ga_scale_cols_ F77_FUNC_(ga_scale_cols, GA_SCALE_COLS) #define ga_cscale_cols_ F77_FUNC_(ga_cscale_cols,GA_CSCALE_COLS) #define ga_dscale_cols_ F77_FUNC_(ga_dscale_cols,GA_DSCALE_COLS) #define ga_iscale_cols_ F77_FUNC_(ga_iscale_cols,GA_ISCALE_COLS) #define ga_sscale_cols_ F77_FUNC_(ga_sscale_cols,GA_SSCALE_COLS) #define ga_zscale_cols_ F77_FUNC_(ga_zscale_cols,GA_ZSCALE_COLS) #define nga_scale_cols_ F77_FUNC_(nga_scale_cols, NGA_SCALE_COLS) #define nga_cscale_cols_ F77_FUNC_(nga_cscale_cols,NGA_CSCALE_COLS) #define nga_dscale_cols_ F77_FUNC_(nga_dscale_cols,NGA_DSCALE_COLS) #define nga_iscale_cols_ F77_FUNC_(nga_iscale_cols,NGA_ISCALE_COLS) #define nga_sscale_cols_ F77_FUNC_(nga_sscale_cols,NGA_SSCALE_COLS) #define nga_zscale_cols_ F77_FUNC_(nga_zscale_cols,NGA_ZSCALE_COLS) #define ga_symmetrize_ F77_FUNC_(ga_symmetrize, GA_SYMMETRIZE) #define ga_csymmetrize_ F77_FUNC_(ga_csymmetrize,GA_CSYMMETRIZE) #define ga_dsymmetrize_ F77_FUNC_(ga_dsymmetrize,GA_DSYMMETRIZE) #define ga_isymmetrize_ F77_FUNC_(ga_isymmetrize,GA_ISYMMETRIZE) #define ga_ssymmetrize_ F77_FUNC_(ga_ssymmetrize,GA_SSYMMETRIZE) #define ga_zsymmetrize_ F77_FUNC_(ga_zsymmetrize,GA_ZSYMMETRIZE) #define nga_symmetrize_ F77_FUNC_(nga_symmetrize, NGA_SYMMETRIZE) #define nga_csymmetrize_ F77_FUNC_(nga_csymmetrize,NGA_CSYMMETRIZE) #define nga_dsymmetrize_ F77_FUNC_(nga_dsymmetrize,NGA_DSYMMETRIZE) #define nga_isymmetrize_ F77_FUNC_(nga_isymmetrize,NGA_ISYMMETRIZE) #define nga_ssymmetrize_ F77_FUNC_(nga_ssymmetrize,NGA_SSYMMETRIZE) #define nga_zsymmetrize_ F77_FUNC_(nga_zsymmetrize,NGA_ZSYMMETRIZE) #define ga_periodic_ F77_FUNC_(ga_periodic, GA_PERIODIC) #define ga_cperiodic_ F77_FUNC_(ga_cperiodic,GA_CPERIODIC) #define ga_dperiodic_ F77_FUNC_(ga_dperiodic,GA_DPERIODIC) #define ga_iperiodic_ F77_FUNC_(ga_iperiodic,GA_IPERIODIC) #define ga_speriodic_ F77_FUNC_(ga_speriodic,GA_SPERIODIC) #define ga_zperiodic_ F77_FUNC_(ga_zperiodic,GA_ZPERIODIC) #define nga_periodic_ F77_FUNC_(nga_periodic, NGA_PERIODIC) #define nga_cperiodic_ F77_FUNC_(nga_cperiodic,NGA_CPERIODIC) #define nga_dperiodic_ F77_FUNC_(nga_dperiodic,NGA_DPERIODIC) #define nga_iperiodic_ F77_FUNC_(nga_iperiodic,NGA_IPERIODIC) #define nga_speriodic_ F77_FUNC_(nga_speriodic,NGA_SPERIODIC) #define nga_zperiodic_ F77_FUNC_(nga_zperiodic,NGA_ZPERIODIC) #define ga_matmul_ F77_FUNC_(ga_matmul, GA_MATMUL) #define ga_cmatmul_ F77_FUNC_(ga_cmatmul,GA_CMATMUL) #define ga_dmatmul_ F77_FUNC_(ga_dmatmul,GA_DMATMUL) #define ga_imatmul_ F77_FUNC_(ga_imatmul,GA_IMATMUL) #define ga_smatmul_ F77_FUNC_(ga_smatmul,GA_SMATMUL) #define ga_zmatmul_ F77_FUNC_(ga_zmatmul,GA_ZMATMUL) #define nga_matmul_ F77_FUNC_(nga_matmul, NGA_MATMUL) #define nga_cmatmul_ F77_FUNC_(nga_cmatmul,NGA_CMATMUL) #define nga_dmatmul_ F77_FUNC_(nga_dmatmul,NGA_DMATMUL) #define nga_imatmul_ F77_FUNC_(nga_imatmul,NGA_IMATMUL) #define nga_smatmul_ F77_FUNC_(nga_smatmul,NGA_SMATMUL) #define nga_zmatmul_ F77_FUNC_(nga_zmatmul,NGA_ZMATMUL) #define ga_matmul_mirrored_ F77_FUNC_(ga_matmul_mirrored, GA_MATMUL_MIRRORED) #define ga_cmatmul_mirrored_ F77_FUNC_(ga_cmatmul_mirrored,GA_CMATMUL_MIRRORED) #define ga_dmatmul_mirrored_ F77_FUNC_(ga_dmatmul_mirrored,GA_DMATMUL_MIRRORED) #define ga_imatmul_mirrored_ F77_FUNC_(ga_imatmul_mirrored,GA_IMATMUL_MIRRORED) #define ga_smatmul_mirrored_ F77_FUNC_(ga_smatmul_mirrored,GA_SMATMUL_MIRRORED) #define ga_zmatmul_mirrored_ F77_FUNC_(ga_zmatmul_mirrored,GA_ZMATMUL_MIRRORED) #define nga_matmul_mirrored_ F77_FUNC_(nga_matmul_mirrored, NGA_MATMUL_MIRRORED) #define nga_cmatmul_mirrored_ F77_FUNC_(nga_cmatmul_mirrored,NGA_CMATMUL_MIRRORED) #define nga_dmatmul_mirrored_ F77_FUNC_(nga_dmatmul_mirrored,NGA_DMATMUL_MIRRORED) #define nga_imatmul_mirrored_ F77_FUNC_(nga_imatmul_mirrored,NGA_IMATMUL_MIRRORED) #define nga_smatmul_mirrored_ F77_FUNC_(nga_smatmul_mirrored,NGA_SMATMUL_MIRRORED) #define nga_zmatmul_mirrored_ F77_FUNC_(nga_zmatmul_mirrored,NGA_ZMATMUL_MIRRORED) #define ga_matmul_patch_ F77_FUNC_(ga_matmul_patch, GA_MATMUL_PATCH) #define ga_cmatmul_patch_ F77_FUNC_(ga_cmatmul_patch,GA_CMATMUL_PATCH) #define ga_dmatmul_patch_ F77_FUNC_(ga_dmatmul_patch,GA_DMATMUL_PATCH) #define ga_imatmul_patch_ F77_FUNC_(ga_imatmul_patch,GA_IMATMUL_PATCH) #define ga_smatmul_patch_ F77_FUNC_(ga_smatmul_patch,GA_SMATMUL_PATCH) #define ga_zmatmul_patch_ F77_FUNC_(ga_zmatmul_patch,GA_ZMATMUL_PATCH) #define nga_matmul_patch_ F77_FUNC_(nga_matmul_patch, NGA_MATMUL_PATCH) #define nga_cmatmul_patch_ F77_FUNC_(nga_cmatmul_patch,NGA_CMATMUL_PATCH) #define nga_dmatmul_patch_ F77_FUNC_(nga_dmatmul_patch,NGA_DMATMUL_PATCH) #define nga_imatmul_patch_ F77_FUNC_(nga_imatmul_patch,NGA_IMATMUL_PATCH) #define nga_smatmul_patch_ F77_FUNC_(nga_smatmul_patch,NGA_SMATMUL_PATCH) #define nga_zmatmul_patch_ F77_FUNC_(nga_zmatmul_patch,NGA_ZMATMUL_PATCH) #define ga_diag_seq_ F77_FUNC_(ga_diag_seq, GA_DIAG_SEQ) #define ga_cdiag_seq_ F77_FUNC_(ga_cdiag_seq,GA_CDIAG_SEQ) #define ga_ddiag_seq_ F77_FUNC_(ga_ddiag_seq,GA_DDIAG_SEQ) #define ga_idiag_seq_ F77_FUNC_(ga_idiag_seq,GA_IDIAG_SEQ) #define ga_sdiag_seq_ F77_FUNC_(ga_sdiag_seq,GA_SDIAG_SEQ) #define ga_zdiag_seq_ F77_FUNC_(ga_zdiag_seq,GA_ZDIAG_SEQ) #define nga_diag_seq_ F77_FUNC_(nga_diag_seq, NGA_DIAG_SEQ) #define nga_cdiag_seq_ F77_FUNC_(nga_cdiag_seq,NGA_CDIAG_SEQ) #define nga_ddiag_seq_ F77_FUNC_(nga_ddiag_seq,NGA_DDIAG_SEQ) #define nga_idiag_seq_ F77_FUNC_(nga_idiag_seq,NGA_IDIAG_SEQ) #define nga_sdiag_seq_ F77_FUNC_(nga_sdiag_seq,NGA_SDIAG_SEQ) #define nga_zdiag_seq_ F77_FUNC_(nga_zdiag_seq,NGA_ZDIAG_SEQ) #define ga_diag_std_seq_ F77_FUNC_(ga_diag_std_seq, GA_DIAG_STD_SEQ) #define ga_cdiag_std_seq_ F77_FUNC_(ga_cdiag_std_seq,GA_CDIAG_STD_SEQ) #define ga_ddiag_std_seq_ F77_FUNC_(ga_ddiag_std_seq,GA_DDIAG_STD_SEQ) #define ga_idiag_std_seq_ F77_FUNC_(ga_idiag_std_seq,GA_IDIAG_STD_SEQ) #define ga_sdiag_std_seq_ F77_FUNC_(ga_sdiag_std_seq,GA_SDIAG_STD_SEQ) #define ga_zdiag_std_seq_ F77_FUNC_(ga_zdiag_std_seq,GA_ZDIAG_STD_SEQ) #define nga_diag_std_seq_ F77_FUNC_(nga_diag_std_seq, NGA_DIAG_STD_SEQ) #define nga_cdiag_std_seq_ F77_FUNC_(nga_cdiag_std_seq,NGA_CDIAG_STD_SEQ) #define nga_ddiag_std_seq_ F77_FUNC_(nga_ddiag_std_seq,NGA_DDIAG_STD_SEQ) #define nga_idiag_std_seq_ F77_FUNC_(nga_idiag_std_seq,NGA_IDIAG_STD_SEQ) #define nga_sdiag_std_seq_ F77_FUNC_(nga_sdiag_std_seq,NGA_SDIAG_STD_SEQ) #define nga_zdiag_std_seq_ F77_FUNC_(nga_zdiag_std_seq,NGA_ZDIAG_STD_SEQ) #define ga_diag_ F77_FUNC_(ga_diag, GA_DIAG) #define ga_cdiag_ F77_FUNC_(ga_cdiag,GA_CDIAG) #define ga_ddiag_ F77_FUNC_(ga_ddiag,GA_DDIAG) #define ga_idiag_ F77_FUNC_(ga_idiag,GA_IDIAG) #define ga_sdiag_ F77_FUNC_(ga_sdiag,GA_SDIAG) #define ga_zdiag_ F77_FUNC_(ga_zdiag,GA_ZDIAG) #define nga_diag_ F77_FUNC_(nga_diag, NGA_DIAG) #define nga_cdiag_ F77_FUNC_(nga_cdiag,NGA_CDIAG) #define nga_ddiag_ F77_FUNC_(nga_ddiag,NGA_DDIAG) #define nga_idiag_ F77_FUNC_(nga_idiag,NGA_IDIAG) #define nga_sdiag_ F77_FUNC_(nga_sdiag,NGA_SDIAG) #define nga_zdiag_ F77_FUNC_(nga_zdiag,NGA_ZDIAG) #define ga_diag_std_ F77_FUNC_(ga_diag_std, GA_DIAG_STD) #define ga_cdiag_std_ F77_FUNC_(ga_cdiag_std,GA_CDIAG_STD) #define ga_ddiag_std_ F77_FUNC_(ga_ddiag_std,GA_DDIAG_STD) #define ga_idiag_std_ F77_FUNC_(ga_idiag_std,GA_IDIAG_STD) #define ga_sdiag_std_ F77_FUNC_(ga_sdiag_std,GA_SDIAG_STD) #define ga_zdiag_std_ F77_FUNC_(ga_zdiag_std,GA_ZDIAG_STD) #define nga_diag_std_ F77_FUNC_(nga_diag_std, NGA_DIAG_STD) #define nga_cdiag_std_ F77_FUNC_(nga_cdiag_std,NGA_CDIAG_STD) #define nga_ddiag_std_ F77_FUNC_(nga_ddiag_std,NGA_DDIAG_STD) #define nga_idiag_std_ F77_FUNC_(nga_idiag_std,NGA_IDIAG_STD) #define nga_sdiag_std_ F77_FUNC_(nga_sdiag_std,NGA_SDIAG_STD) #define nga_zdiag_std_ F77_FUNC_(nga_zdiag_std,NGA_ZDIAG_STD) #define ga_diag_reuse_ F77_FUNC_(ga_diag_reuse, GA_DIAG_REUSE) #define ga_cdiag_reuse_ F77_FUNC_(ga_cdiag_reuse,GA_CDIAG_REUSE) #define ga_ddiag_reuse_ F77_FUNC_(ga_ddiag_reuse,GA_DDIAG_REUSE) #define ga_idiag_reuse_ F77_FUNC_(ga_idiag_reuse,GA_IDIAG_REUSE) #define ga_sdiag_reuse_ F77_FUNC_(ga_sdiag_reuse,GA_SDIAG_REUSE) #define ga_zdiag_reuse_ F77_FUNC_(ga_zdiag_reuse,GA_ZDIAG_REUSE) #define nga_diag_reuse_ F77_FUNC_(nga_diag_reuse, NGA_DIAG_REUSE) #define nga_cdiag_reuse_ F77_FUNC_(nga_cdiag_reuse,NGA_CDIAG_REUSE) #define nga_ddiag_reuse_ F77_FUNC_(nga_ddiag_reuse,NGA_DDIAG_REUSE) #define nga_idiag_reuse_ F77_FUNC_(nga_idiag_reuse,NGA_IDIAG_REUSE) #define nga_sdiag_reuse_ F77_FUNC_(nga_sdiag_reuse,NGA_SDIAG_REUSE) #define nga_zdiag_reuse_ F77_FUNC_(nga_zdiag_reuse,NGA_ZDIAG_REUSE) #define ga_lu_solve_alt_ F77_FUNC_(ga_lu_solve_alt, GA_LU_SOLVE_ALT) #define ga_clu_solve_alt_ F77_FUNC_(ga_clu_solve_alt,GA_CLU_SOLVE_ALT) #define ga_dlu_solve_alt_ F77_FUNC_(ga_dlu_solve_alt,GA_DLU_SOLVE_ALT) #define ga_ilu_solve_alt_ F77_FUNC_(ga_ilu_solve_alt,GA_ILU_SOLVE_ALT) #define ga_slu_solve_alt_ F77_FUNC_(ga_slu_solve_alt,GA_SLU_SOLVE_ALT) #define ga_zlu_solve_alt_ F77_FUNC_(ga_zlu_solve_alt,GA_ZLU_SOLVE_ALT) #define nga_lu_solve_alt_ F77_FUNC_(nga_lu_solve_alt, NGA_LU_SOLVE_ALT) #define nga_clu_solve_alt_ F77_FUNC_(nga_clu_solve_alt,NGA_CLU_SOLVE_ALT) #define nga_dlu_solve_alt_ F77_FUNC_(nga_dlu_solve_alt,NGA_DLU_SOLVE_ALT) #define nga_ilu_solve_alt_ F77_FUNC_(nga_ilu_solve_alt,NGA_ILU_SOLVE_ALT) #define nga_slu_solve_alt_ F77_FUNC_(nga_slu_solve_alt,NGA_SLU_SOLVE_ALT) #define nga_zlu_solve_alt_ F77_FUNC_(nga_zlu_solve_alt,NGA_ZLU_SOLVE_ALT) #define ga_lu_solve_ F77_FUNC_(ga_lu_solve, GA_LU_SOLVE) #define ga_clu_solve_ F77_FUNC_(ga_clu_solve,GA_CLU_SOLVE) #define ga_dlu_solve_ F77_FUNC_(ga_dlu_solve,GA_DLU_SOLVE) #define ga_ilu_solve_ F77_FUNC_(ga_ilu_solve,GA_ILU_SOLVE) #define ga_slu_solve_ F77_FUNC_(ga_slu_solve,GA_SLU_SOLVE) #define ga_zlu_solve_ F77_FUNC_(ga_zlu_solve,GA_ZLU_SOLVE) #define nga_lu_solve_ F77_FUNC_(nga_lu_solve, NGA_LU_SOLVE) #define nga_clu_solve_ F77_FUNC_(nga_clu_solve,NGA_CLU_SOLVE) #define nga_dlu_solve_ F77_FUNC_(nga_dlu_solve,NGA_DLU_SOLVE) #define nga_ilu_solve_ F77_FUNC_(nga_ilu_solve,NGA_ILU_SOLVE) #define nga_slu_solve_ F77_FUNC_(nga_slu_solve,NGA_SLU_SOLVE) #define nga_zlu_solve_ F77_FUNC_(nga_zlu_solve,NGA_ZLU_SOLVE) #define ga_llt_solve_ F77_FUNC_(ga_llt_solve, GA_LLT_SOLVE) #define ga_cllt_solve_ F77_FUNC_(ga_cllt_solve,GA_CLLT_SOLVE) #define ga_dllt_solve_ F77_FUNC_(ga_dllt_solve,GA_DLLT_SOLVE) #define ga_illt_solve_ F77_FUNC_(ga_illt_solve,GA_ILLT_SOLVE) #define ga_sllt_solve_ F77_FUNC_(ga_sllt_solve,GA_SLLT_SOLVE) #define ga_zllt_solve_ F77_FUNC_(ga_zllt_solve,GA_ZLLT_SOLVE) #define nga_llt_solve_ F77_FUNC_(nga_llt_solve, NGA_LLT_SOLVE) #define nga_cllt_solve_ F77_FUNC_(nga_cllt_solve,NGA_CLLT_SOLVE) #define nga_dllt_solve_ F77_FUNC_(nga_dllt_solve,NGA_DLLT_SOLVE) #define nga_illt_solve_ F77_FUNC_(nga_illt_solve,NGA_ILLT_SOLVE) #define nga_sllt_solve_ F77_FUNC_(nga_sllt_solve,NGA_SLLT_SOLVE) #define nga_zllt_solve_ F77_FUNC_(nga_zllt_solve,NGA_ZLLT_SOLVE) #define ga_solve_ F77_FUNC_(ga_solve, GA_SOLVE) #define ga_csolve_ F77_FUNC_(ga_csolve,GA_CSOLVE) #define ga_dsolve_ F77_FUNC_(ga_dsolve,GA_DSOLVE) #define ga_isolve_ F77_FUNC_(ga_isolve,GA_ISOLVE) #define ga_ssolve_ F77_FUNC_(ga_ssolve,GA_SSOLVE) #define ga_zsolve_ F77_FUNC_(ga_zsolve,GA_ZSOLVE) #define nga_solve_ F77_FUNC_(nga_solve, NGA_SOLVE) #define nga_csolve_ F77_FUNC_(nga_csolve,NGA_CSOLVE) #define nga_dsolve_ F77_FUNC_(nga_dsolve,NGA_DSOLVE) #define nga_isolve_ F77_FUNC_(nga_isolve,NGA_ISOLVE) #define nga_ssolve_ F77_FUNC_(nga_ssolve,NGA_SSOLVE) #define nga_zsolve_ F77_FUNC_(nga_zsolve,NGA_ZSOLVE) #define ga_spd_invert_ F77_FUNC_(ga_spd_invert, GA_SPD_INVERT) #define ga_cspd_invert_ F77_FUNC_(ga_cspd_invert,GA_CSPD_INVERT) #define ga_dspd_invert_ F77_FUNC_(ga_dspd_invert,GA_DSPD_INVERT) #define ga_ispd_invert_ F77_FUNC_(ga_ispd_invert,GA_ISPD_INVERT) #define ga_sspd_invert_ F77_FUNC_(ga_sspd_invert,GA_SSPD_INVERT) #define ga_zspd_invert_ F77_FUNC_(ga_zspd_invert,GA_ZSPD_INVERT) #define nga_spd_invert_ F77_FUNC_(nga_spd_invert, NGA_SPD_INVERT) #define nga_cspd_invert_ F77_FUNC_(nga_cspd_invert,NGA_CSPD_INVERT) #define nga_dspd_invert_ F77_FUNC_(nga_dspd_invert,NGA_DSPD_INVERT) #define nga_ispd_invert_ F77_FUNC_(nga_ispd_invert,NGA_ISPD_INVERT) #define nga_sspd_invert_ F77_FUNC_(nga_sspd_invert,NGA_SSPD_INVERT) #define nga_zspd_invert_ F77_FUNC_(nga_zspd_invert,NGA_ZSPD_INVERT) #define ga_copy_patch_dp_ F77_FUNC_(ga_copy_patch_dp, GA_COPY_PATCH_DP) #define ga_ccopy_patch_dp_ F77_FUNC_(ga_ccopy_patch_dp,GA_CCOPY_PATCH_DP) #define ga_dcopy_patch_dp_ F77_FUNC_(ga_dcopy_patch_dp,GA_DCOPY_PATCH_DP) #define ga_icopy_patch_dp_ F77_FUNC_(ga_icopy_patch_dp,GA_ICOPY_PATCH_DP) #define ga_scopy_patch_dp_ F77_FUNC_(ga_scopy_patch_dp,GA_SCOPY_PATCH_DP) #define ga_zcopy_patch_dp_ F77_FUNC_(ga_zcopy_patch_dp,GA_ZCOPY_PATCH_DP) #define nga_copy_patch_dp_ F77_FUNC_(nga_copy_patch_dp, NGA_COPY_PATCH_DP) #define nga_ccopy_patch_dp_ F77_FUNC_(nga_ccopy_patch_dp,NGA_CCOPY_PATCH_DP) #define nga_dcopy_patch_dp_ F77_FUNC_(nga_dcopy_patch_dp,NGA_DCOPY_PATCH_DP) #define nga_icopy_patch_dp_ F77_FUNC_(nga_icopy_patch_dp,NGA_ICOPY_PATCH_DP) #define nga_scopy_patch_dp_ F77_FUNC_(nga_scopy_patch_dp,NGA_SCOPY_PATCH_DP) #define nga_zcopy_patch_dp_ F77_FUNC_(nga_zcopy_patch_dp,NGA_ZCOPY_PATCH_DP) #define ga_ddot_patch_dp_ F77_FUNC_(ga_ddot_patch_dp, GA_DDOT_PATCH_DP) #define ga_cddot_patch_dp_ F77_FUNC_(ga_cddot_patch_dp,GA_CDDOT_PATCH_DP) #define ga_dddot_patch_dp_ F77_FUNC_(ga_dddot_patch_dp,GA_DDDOT_PATCH_DP) #define ga_iddot_patch_dp_ F77_FUNC_(ga_iddot_patch_dp,GA_IDDOT_PATCH_DP) #define ga_sddot_patch_dp_ F77_FUNC_(ga_sddot_patch_dp,GA_SDDOT_PATCH_DP) #define ga_zddot_patch_dp_ F77_FUNC_(ga_zddot_patch_dp,GA_ZDDOT_PATCH_DP) #define nga_ddot_patch_dp_ F77_FUNC_(nga_ddot_patch_dp, NGA_DDOT_PATCH_DP) #define nga_cddot_patch_dp_ F77_FUNC_(nga_cddot_patch_dp,NGA_CDDOT_PATCH_DP) #define nga_dddot_patch_dp_ F77_FUNC_(nga_dddot_patch_dp,NGA_DDDOT_PATCH_DP) #define nga_iddot_patch_dp_ F77_FUNC_(nga_iddot_patch_dp,NGA_IDDOT_PATCH_DP) #define nga_sddot_patch_dp_ F77_FUNC_(nga_sddot_patch_dp,NGA_SDDOT_PATCH_DP) #define nga_zddot_patch_dp_ F77_FUNC_(nga_zddot_patch_dp,NGA_ZDDOT_PATCH_DP) #define ga_timer_ F77_FUNC_(ga_timer, GA_TIMER) #define ga_ctimer_ F77_FUNC_(ga_ctimer,GA_CTIMER) #define ga_dtimer_ F77_FUNC_(ga_dtimer,GA_DTIMER) #define ga_itimer_ F77_FUNC_(ga_itimer,GA_ITIMER) #define ga_stimer_ F77_FUNC_(ga_stimer,GA_STIMER) #define ga_ztimer_ F77_FUNC_(ga_ztimer,GA_ZTIMER) #define nga_timer_ F77_FUNC_(nga_timer, NGA_TIMER) #define nga_ctimer_ F77_FUNC_(nga_ctimer,NGA_CTIMER) #define nga_dtimer_ F77_FUNC_(nga_dtimer,NGA_DTIMER) #define nga_itimer_ F77_FUNC_(nga_itimer,NGA_ITIMER) #define nga_stimer_ F77_FUNC_(nga_stimer,NGA_STIMER) #define nga_ztimer_ F77_FUNC_(nga_ztimer,NGA_ZTIMER) #define ga_register_type_ F77_FUNC_(ga_register_type, GA_REGISTER_TYPE) #define ga_cregister_type_ F77_FUNC_(ga_cregister_type,GA_CREGISTER_TYPE) #define ga_dregister_type_ F77_FUNC_(ga_dregister_type,GA_DREGISTER_TYPE) #define ga_iregister_type_ F77_FUNC_(ga_iregister_type,GA_IREGISTER_TYPE) #define ga_sregister_type_ F77_FUNC_(ga_sregister_type,GA_SREGISTER_TYPE) #define ga_zregister_type_ F77_FUNC_(ga_zregister_type,GA_ZREGISTER_TYPE) #define nga_register_type_ F77_FUNC_(nga_register_type, NGA_REGISTER_TYPE) #define nga_cregister_type_ F77_FUNC_(nga_cregister_type,NGA_CREGISTER_TYPE) #define nga_dregister_type_ F77_FUNC_(nga_dregister_type,NGA_DREGISTER_TYPE) #define nga_iregister_type_ F77_FUNC_(nga_iregister_type,NGA_IREGISTER_TYPE) #define nga_sregister_type_ F77_FUNC_(nga_sregister_type,NGA_SREGISTER_TYPE) #define nga_zregister_type_ F77_FUNC_(nga_zregister_type,NGA_ZREGISTER_TYPE) #define ga_deregister_type_ F77_FUNC_(ga_deregister_type, GA_DEREGISTER_TYPE) #define ga_cderegister_type_ F77_FUNC_(ga_cderegister_type,GA_CDEREGISTER_TYPE) #define ga_dderegister_type_ F77_FUNC_(ga_dderegister_type,GA_DDEREGISTER_TYPE) #define ga_ideregister_type_ F77_FUNC_(ga_ideregister_type,GA_IDEREGISTER_TYPE) #define ga_sderegister_type_ F77_FUNC_(ga_sderegister_type,GA_SDEREGISTER_TYPE) #define ga_zderegister_type_ F77_FUNC_(ga_zderegister_type,GA_ZDEREGISTER_TYPE) #define nga_deregister_type_ F77_FUNC_(nga_deregister_type, NGA_DEREGISTER_TYPE) #define nga_cderegister_type_ F77_FUNC_(nga_cderegister_type,NGA_CDEREGISTER_TYPE) #define nga_dderegister_type_ F77_FUNC_(nga_dderegister_type,NGA_DDEREGISTER_TYPE) #define nga_ideregister_type_ F77_FUNC_(nga_ideregister_type,NGA_IDEREGISTER_TYPE) #define nga_sderegister_type_ F77_FUNC_(nga_sderegister_type,NGA_SDEREGISTER_TYPE) #define nga_zderegister_type_ F77_FUNC_(nga_zderegister_type,NGA_ZDEREGISTER_TYPE) #define ga_get_field_ F77_FUNC_(ga_get_field, GA_GET_FIELD) #define ga_cget_field_ F77_FUNC_(ga_cget_field,GA_CGET_FIELD) #define ga_dget_field_ F77_FUNC_(ga_dget_field,GA_DGET_FIELD) #define ga_iget_field_ F77_FUNC_(ga_iget_field,GA_IGET_FIELD) #define ga_sget_field_ F77_FUNC_(ga_sget_field,GA_SGET_FIELD) #define ga_zget_field_ F77_FUNC_(ga_zget_field,GA_ZGET_FIELD) #define nga_get_field_ F77_FUNC_(nga_get_field, NGA_GET_FIELD) #define nga_cget_field_ F77_FUNC_(nga_cget_field,NGA_CGET_FIELD) #define nga_dget_field_ F77_FUNC_(nga_dget_field,NGA_DGET_FIELD) #define nga_iget_field_ F77_FUNC_(nga_iget_field,NGA_IGET_FIELD) #define nga_sget_field_ F77_FUNC_(nga_sget_field,NGA_SGET_FIELD) #define nga_zget_field_ F77_FUNC_(nga_zget_field,NGA_ZGET_FIELD) #define ga_nbget_field_ F77_FUNC_(ga_nbget_field, GA_NBGET_FIELD) #define ga_cnbget_field_ F77_FUNC_(ga_cnbget_field,GA_CNBGET_FIELD) #define ga_dnbget_field_ F77_FUNC_(ga_dnbget_field,GA_DNBGET_FIELD) #define ga_inbget_field_ F77_FUNC_(ga_inbget_field,GA_INBGET_FIELD) #define ga_snbget_field_ F77_FUNC_(ga_snbget_field,GA_SNBGET_FIELD) #define ga_znbget_field_ F77_FUNC_(ga_znbget_field,GA_ZNBGET_FIELD) #define nga_nbget_field_ F77_FUNC_(nga_nbget_field, NGA_NBGET_FIELD) #define nga_cnbget_field_ F77_FUNC_(nga_cnbget_field,NGA_CNBGET_FIELD) #define nga_dnbget_field_ F77_FUNC_(nga_dnbget_field,NGA_DNBGET_FIELD) #define nga_inbget_field_ F77_FUNC_(nga_inbget_field,NGA_INBGET_FIELD) #define nga_snbget_field_ F77_FUNC_(nga_snbget_field,NGA_SNBGET_FIELD) #define nga_znbget_field_ F77_FUNC_(nga_znbget_field,NGA_ZNBGET_FIELD) #define ga_nbput_field_ F77_FUNC_(ga_nbput_field, GA_NBPUT_FIELD) #define ga_cnbput_field_ F77_FUNC_(ga_cnbput_field,GA_CNBPUT_FIELD) #define ga_dnbput_field_ F77_FUNC_(ga_dnbput_field,GA_DNBPUT_FIELD) #define ga_inbput_field_ F77_FUNC_(ga_inbput_field,GA_INBPUT_FIELD) #define ga_snbput_field_ F77_FUNC_(ga_snbput_field,GA_SNBPUT_FIELD) #define ga_znbput_field_ F77_FUNC_(ga_znbput_field,GA_ZNBPUT_FIELD) #define nga_nbput_field_ F77_FUNC_(nga_nbput_field, NGA_NBPUT_FIELD) #define nga_cnbput_field_ F77_FUNC_(nga_cnbput_field,NGA_CNBPUT_FIELD) #define nga_dnbput_field_ F77_FUNC_(nga_dnbput_field,NGA_DNBPUT_FIELD) #define nga_inbput_field_ F77_FUNC_(nga_inbput_field,NGA_INBPUT_FIELD) #define nga_snbput_field_ F77_FUNC_(nga_snbput_field,NGA_SNBPUT_FIELD) #define nga_znbput_field_ F77_FUNC_(nga_znbput_field,NGA_ZNBPUT_FIELD) #define ga_put_field_ F77_FUNC_(ga_put_field, GA_PUT_FIELD) #define ga_cput_field_ F77_FUNC_(ga_cput_field,GA_CPUT_FIELD) #define ga_dput_field_ F77_FUNC_(ga_dput_field,GA_DPUT_FIELD) #define ga_iput_field_ F77_FUNC_(ga_iput_field,GA_IPUT_FIELD) #define ga_sput_field_ F77_FUNC_(ga_sput_field,GA_SPUT_FIELD) #define ga_zput_field_ F77_FUNC_(ga_zput_field,GA_ZPUT_FIELD) #define nga_put_field_ F77_FUNC_(nga_put_field, NGA_PUT_FIELD) #define nga_cput_field_ F77_FUNC_(nga_cput_field,NGA_CPUT_FIELD) #define nga_dput_field_ F77_FUNC_(nga_dput_field,NGA_DPUT_FIELD) #define nga_iput_field_ F77_FUNC_(nga_iput_field,NGA_IPUT_FIELD) #define nga_sput_field_ F77_FUNC_(nga_sput_field,NGA_SPUT_FIELD) #define nga_zput_field_ F77_FUNC_(nga_zput_field,NGA_ZPUT_FIELD) /* the missing functions are either complex type or strangely named */ #define gai_cdot_patch_ F77_FUNC_(gai_cdot_patch,GAI_CDOT_PATCH) #define gai_zdot_patch_ F77_FUNC_(gai_zdot_patch,GAI_ZDOT_PATCH) #define ngai_cdot_patch_ F77_FUNC_(ngai_cdot_patch,NGAI_CDOT_PATCH) #define ngai_zdot_patch_ F77_FUNC_(ngai_zdot_patch,NGAI_ZDOT_PATCH) #define ga_cscal_patch_ F77_FUNC_(ga_cscal_patch,GA_CSCAL_PATCH) #define ga_dscal_patch_ F77_FUNC_(ga_dscal_patch,GA_DSCAL_PATCH) #define ga_iscal_patch_ F77_FUNC_(ga_iscal_patch,GA_ISCAL_PATCH) #define ga_sscal_patch_ F77_FUNC_(ga_sscal_patch,GA_SSCAL_PATCH) #define ga_zscal_patch_ F77_FUNC_(ga_zscal_patch,GA_ZSCAL_PATCH) #define ga_cscal_ F77_FUNC_(ga_cscal,GA_CSCAL) #define ga_dscal_ F77_FUNC_(ga_dscal,GA_DSCAL) #define ga_iscal_ F77_FUNC_(ga_iscal,GA_ISCAL) #define ga_sscal_ F77_FUNC_(ga_sscal,GA_SSCAL) #define ga_zscal_ F77_FUNC_(ga_zscal,GA_ZSCAL) #define gai_cdot_ F77_FUNC_(gai_cdot,GAI_CDOT) #define gai_zdot_ F77_FUNC_(gai_zdot,GAI_ZDOT) #define ngai_cdot_ F77_FUNC_(ngai_cdot,NGAI_CDOT) #define ngai_zdot_ F77_FUNC_(ngai_zdot,NGAI_ZDOT) #define ga_cgemm_ F77_FUNC_(ga_cgemm,GA_CGEMM) #define ga_dgemm_ F77_FUNC_(ga_dgemm,GA_DGEMM) #define ga_sgemm_ F77_FUNC_(ga_sgemm,GA_SGEMM) #define ga_zgemm_ F77_FUNC_(ga_zgemm,GA_ZGEMM) #define nga_periodic_get_ F77_FUNC_(nga_periodic_get,NGA_PERIODIC_GET) #define nga_periodic_put_ F77_FUNC_(nga_periodic_put,NGA_PERIODIC_PUT) #define nga_periodic_acc_ F77_FUNC_(nga_periodic_acc,NGA_PERIODIC_ACC) #define ga_access_ F77_FUNC_(ga_access,GA_ACCESS) #define nga_access_ F77_FUNC_(nga_access,NGA_ACCESS) #define nga_access_block_ F77_FUNC_(nga_access_block,NGA_ACCESS_BLOCK) #define nga_access_block_grid_ F77_FUNC_(nga_access_block_grid,NGA_ACCESS_BLOCK_GRID) #define nga_access_block_segment_ F77_FUNC_(nga_access_block_segment,NGA_ACCESS_BLOCK_SEGMENT) #define ga_pgroup_cgop_ F77_FUNC_(ga_pgroup_cgop,GA_PGROUP_CGOP) #define ga_pgroup_dgop_ F77_FUNC_(ga_pgroup_dgop,GA_PGROUP_DGOP) #define ga_pgroup_igop_ F77_FUNC_(ga_pgroup_igop,GA_PGROUP_IGOP) #define ga_pgroup_sgop_ F77_FUNC_(ga_pgroup_sgop,GA_PGROUP_SGOP) #define ga_pgroup_zgop_ F77_FUNC_(ga_pgroup_zgop,GA_PGROUP_ZGOP) #define nga_pgroup_cgop_ F77_FUNC_(nga_pgroup_cgop,NGA_PGROUP_CGOP) #define nga_pgroup_dgop_ F77_FUNC_(nga_pgroup_dgop,NGA_PGROUP_DGOP) #define nga_pgroup_igop_ F77_FUNC_(nga_pgroup_igop,NGA_PGROUP_IGOP) #define nga_pgroup_sgop_ F77_FUNC_(nga_pgroup_sgop,NGA_PGROUP_SGOP) #define nga_pgroup_zgop_ F77_FUNC_(nga_pgroup_zgop,NGA_PGROUP_ZGOP) ga-5-3/global/src/global.npatch.c0000640005473000001440000030160011723214651015505 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* * module: global.npatch.c * author: Jialin Ju * description: Implements the n-dimensional patch operations: * - fill patch * - copy patch * - scale patch * - dot patch * - add patch * * DISCLAIMER * * This material was prepared as an account of work sponsored by an * agency of the United States Government. Neither the United States * Government nor the United States Department of Energy, nor Battelle, * nor any of their employees, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR * ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, * COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, * SOFTWARE, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT * INFRINGE PRIVATELY OWNED RIGHTS. * * * ACKNOWLEDGMENT * * This software and its documentation were produced with United States * Government support under Contract Number DE-AC06-76RLO-1830 awarded by * the United States Department of Energy. The United States Government * retains a paid-up non-exclusive, irrevocable worldwide license to * reproduce, prepare derivative works, perform publicly and display * publicly by or for the US Government, including the right to * distribute to other US Government contractors. */ #if HAVE_MATH_H # include #endif #include "message.h" #include "globalp.h" #include "armci.h" #include "ga-papi.h" #include "ga-wapi.h" #ifdef MPI extern ARMCI_Group* ga_get_armci_group_(int); #endif /********************************************************** * n-dimensional utilities * **********************************************************/ /*\ compute Index from subscript and convert it back to subscript * in another array \*/ static void snga_dest_indices(Integer ndims, Integer *los, Integer *blos, Integer *dimss, Integer ndimd, Integer *lod, Integer *blod, Integer *dimsd) { Integer idx = 0, i, factor=1; for(i=0;i bndim) { ndim = bndim; for(i=ndim; i adims[i]) pnga_error("g_a indices out of range ", 0L); for(i=0; i bdims[i]) pnga_error("g_b indices out of range ", 0L); /* check if numbers of elements in two patches match each other */ atotal = 1; btotal = 1; for(i=0; i= 0 || num_blocks_b >= 0) { if (!(*trans == 'n' || *trans == 'N')) { pnga_error("Transpose option not supported for block-cyclic data", 0L); } if (!snga_test_shape(alo, ahi, blo, bhi, andim, bndim)) { pnga_error("Change in shape not supported for block-cyclic data", 0L); } } if (num_blocks_a < 0 && num_blocks_b <0) { /* now find out cordinates of a patch of g_a that I own */ if (use_put) { pnga_distribution(g_a, me_a, los, his); } else { pnga_distribution(g_b, me_b, los, his); } /* copy my share of data */ if (use_put) { has_intersection = pnga_patch_intersect(alo, ahi, los, his, andim); } else { has_intersection = pnga_patch_intersect(blo, bhi, los, his, bndim); } if(has_intersection){ if (use_put) { pnga_access_ptr(g_a, los, his, &src_data_ptr, ld); } else { pnga_access_ptr(g_b, los, his, &src_data_ptr, ld); } /* calculate the number of elements in the patch that I own */ nelem = 1; for(i=0; i destination[lo:hi] */ if (use_put) { snga_dest_indices(andim, los, alo, ald, bndim, lod, blo, bld); snga_dest_indices(andim, his, alo, ald, bndim, hid, blo, bld); pnga_put(g_b, lod, hid, src_data_ptr, ld); pnga_release(g_a, los, his); } else { snga_dest_indices(bndim, los, blo, bld, andim, lod, alo, ald); snga_dest_indices(bndim, his, blo, bld, andim, hid, alo, ald); pnga_get(g_a, lod, hid, src_data_ptr, ld); pnga_release(g_b, los, his); } /*** due to generality of this transformation scatter is required ***/ } else{ if (use_put) { tmp_ptr = ga_malloc(nelem, atype, "v"); src_idx_ptr = (Integer*) ga_malloc((andim*nelem), MT_F_INT, "si"); dst_idx_ptr = (Integer*) ga_malloc((bndim*nelem), MT_F_INT, "di"); /* calculate the destination indices */ /* given los and his, find indices for each elements * bvalue: starting index in each dimension * bunit: stride in each dimension */ for (i=0; i his[j]) bvalue[j] = los[j]; } } /* index factor: reshaping without transpose */ factor_idx1[0] = 1; for (j=1; j=0; j--) factor_idx2[j] = factor_idx2[j+1] * ald[j+1]; /* data factor */ factor_data[0] = 1; for (j=1; j (..., j, i) */ for (j=(andim-1); j>=0; j--) idx += (src_idx_ptr[i*andim+j] - alo[j]) * factor_idx2[j]; /* convert the one dimensional index to n-dimensional * indices of destination */ for (j=0; j his[j]) bvalue[j] = los[j]; } } /* index factor: reshaping without transpose */ factor_idx1[0] = 1; for (j=1; j=0; j--) factor_idx2[j] = factor_idx2[j+1] * bld[j+1]; /* data factor */ factor_data[0] = 1; for (j=1; j (..., j, i) */ for (j=(andim-1); j>=0; j--) idx += (src_idx_ptr[i*bndim+j] - blo[j]) * factor_idx2[j]; /* convert the one dimensional index to n-dimensional * indices of destination */ for (j=0; j= 0) { /* Uses simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(g_a)) { for (i = me_a; i < num_blocks_a; i += anproc) { pnga_distribution(g_a, i, los, his); /* make temporory copies of los, his since ngai_patch_intersection destroys original versions */ for (j=0; j < andim; j++) { lod[j] = los[j]; hid[j] = his[j]; } if (pnga_patch_intersect(alo,ahi,los,his,andim)) { pnga_access_block_ptr(g_a, i, &src_data_ptr, ld); offset = 0; last = andim - 1; jtot = 1; for (j=0; j adims[i]) his[i] = adims[i]; /*if (his[i] < los[i]) chk = 0;*/ } /* make temporory copies of los, his since ngai_patch_intersection destroys original versions */ for (j=0; j < andim; j++) { lod[j] = los[j]; hid[j] = his[j]; } if (pnga_patch_intersect(alo,ahi,los,his,andim)) { pnga_access_block_grid_ptr(g_a, index, &src_data_ptr, ld); offset = 0; last = andim - 1; jtot = 1; for (j=0; j= blocks[i] && i= 0) { /* Uses simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(g_b)) { for (i = me_b; i < num_blocks_b; i += bnproc) { pnga_distribution(g_b, i, los, his); /* make temporory copies of los, his since ngai_patch_intersection destroys original versions */ for (j=0; j < andim; j++) { lod[j] = los[j]; hid[j] = his[j]; } if (pnga_patch_intersect(blo,bhi,los,his,andim)) { pnga_access_block_ptr(g_b, i, &src_data_ptr, ld); offset = 0; last = bndim - 1; jtot = 1; for (j=0; j bdims[i]) his[i] = bdims[i]; /*if (his[i] < los[i]) chk = 0;*/ } /* make temporory copies of los, his since ngai_patch_intersection destroys original versions */ for (j=0; j < andim; j++) { lod[j] = los[j]; hid[j] = his[j]; } if (pnga_patch_intersect(blo,bhi,los,his,andim)) { pnga_access_block_grid_ptr(g_b, index, &src_data_ptr, ld); offset = 0; last = bndim - 1; jtot = 1; for (j=0; j= blocks[i] && i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) isum += ((int *)A_ptr)[idx+j] * ((int *)B_ptr)[idx+j]; } *(int*)retval += isum; break; case C_DCPL: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) { DoubleComplex a = ((DoubleComplex *)A_ptr)[idx+j]; DoubleComplex b = ((DoubleComplex *)B_ptr)[idx+j]; zsum.real += a.real*b.real - b.imag * a.imag; zsum.imag += a.imag*b.real + b.imag * a.real; } } ((double*)retval)[0] += zsum.real; ((double*)retval)[1] += zsum.imag; break; case C_SCPL: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) { SingleComplex a = ((SingleComplex *)A_ptr)[idx+j]; SingleComplex b = ((SingleComplex *)B_ptr)[idx+j]; csum.real += a.real*b.real - b.imag * a.imag; csum.imag += a.imag*b.real + b.imag * a.real; } } ((float*)retval)[0] += csum.real; ((float*)retval)[1] += csum.imag; break; case C_DBL: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) dsum += ((double*)A_ptr)[idx+j] * ((double*)B_ptr)[idx+j]; } *(double*)retval += dsum; break; case C_FLOAT: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) fsum += ((float *)A_ptr)[idx+j] * ((float *)B_ptr)[idx+j]; } *(float*)retval += fsum; break; case C_LONG: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) lsum += ((long *)A_ptr)[idx+j] * ((long *)B_ptr)[idx+j]; } *(long*)retval += lsum; break; case C_LONGLONG: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) llsum += ((long long *)A_ptr)[idx+j] * ((long long *)B_ptr)[idx+j]; } *(long long*)retval += llsum; break; default: pnga_error("snga_dot_local_patch: type not supported",atype); } } /*\ generic dot product routine \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_dot_patch = pnga_dot_patch #endif void pnga_dot_patch(Integer g_a, char *t_a, Integer *alo, Integer *ahi, Integer g_b, char *t_b, Integer *blo, Integer *bhi, void *retval) { Integer i=0, j=0; Integer compatible=0; Integer atype=0, btype=0, andim=0, adims[MAXDIM], bndim=0, bdims[MAXDIM]; Integer loA[MAXDIM], hiA[MAXDIM], ldA[MAXDIM]; Integer loB[MAXDIM], hiB[MAXDIM], ldB[MAXDIM]; Integer g_A = g_a, g_B = g_b; void *A_ptr=NULL, *B_ptr=NULL; Integer ctype=0; Integer atotal=0, btotal=0; int isum=0, alen=0; long lsum=0; long long llsum=0; double dsum=0; DoubleComplex zsum={0,0}; DoubleComplex csum={0,0}; float fsum=0; Integer me= pnga_nodeid(), temp_created=0; Integer nproc = pnga_nnodes(); Integer num_blocks_a=0, num_blocks_b=0; char *tempname = "temp", transp, transp_a, transp_b; int local_sync_begin=0; Integer a_grp=0, b_grp=0; local_sync_begin = _ga_sync_begin; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); GA_PUSH_NAME("pnga_dot_patch"); a_grp = pnga_get_pgroup(g_a); b_grp = pnga_get_pgroup(g_b); if (a_grp != b_grp) pnga_error("Both arrays must be defined on same group",0L); me = pnga_pgroup_nodeid(a_grp); pnga_inquire(g_a, &atype, &andim, adims); pnga_inquire(g_b, &btype, &bndim, bdims); if(atype != btype ) pnga_error(" type mismatch ", 0L); /* check if patch indices and g_a dims match */ for(i=0; i adims[i]) pnga_error("g_a indices out of range ", g_a); for(i=0; i bdims[i]) pnga_error("g_b indices out of range ", g_b); /* check if numbers of elements in two patches match each other */ atotal = 1; for(i=0; i= 0 || num_blocks_b >= 0) { if (transp_a == 't' || transp_b == 't') pnga_error("transpose not supported for block-cyclic data ", 0); } isum = 0; dsum = 0.; zsum.real = 0.; zsum.imag = 0.; fsum = 0;lsum=0;llsum=0; csum.real = 0.; csum.imag = 0.; switch (atype){ case C_INT: *(int*)retval = isum; alen = 1; break; case C_DCPL: ((double*)retval)[0] = zsum.real; ((double*)retval)[1] = zsum.imag; alen = 2; break; case C_SCPL: ((float*)retval)[0] = csum.real; ((float*)retval)[1] = csum.imag; alen = 2; break; case C_DBL: *(double*)retval = dsum; alen = 1; break; case C_FLOAT: *(float*)retval = fsum; alen = 1; break; case C_LONG: *(long*)retval = lsum; alen = 1; break; case C_LONGLONG: *(long long*)retval = llsum; alen = 1; break; default: pnga_error("snga_dot_local_patch: type not supported",atype); } if (num_blocks_a < 0 && num_blocks_b < 0) { /* find out coordinates of patches of g_A and g_B that I own */ pnga_distribution(g_A, me, loA, hiA); pnga_distribution(g_B, me, loB, hiB); if(pnga_comp_patch(andim, loA, hiA, bndim, loB, hiB) && pnga_comp_patch(andim, alo, ahi, bndim, blo, bhi)) compatible = 1; else compatible = 0; pnga_gop(pnga_type_f2c(MT_F_INT), &compatible, 1, "*"); if(!(compatible && (transp=='n'))) { /* either patches or distributions do not match: * - create a temp array that matches distribution of g_a * - copy & reshape patch of g_b into g_B */ if (!pnga_duplicate(g_a, &g_B, tempname)) pnga_error("duplicate failed",0L); pnga_copy_patch(&transp, g_b, blo, bhi, g_B, alo, ahi); bndim = andim; temp_created = 1; pnga_distribution(g_B, me, loB, hiB); } if(!pnga_comp_patch(andim, loA, hiA, bndim, loB, hiB)) pnga_error(" patches mismatch ",0); /* A[83:125,1:1] <==> B[83:125] */ if(andim > bndim) andim = bndim; /* need more work */ /* determine subsets of my patches to access */ if(pnga_patch_intersect(alo, ahi, loA, hiA, andim)){ pnga_access_ptr(g_A, loA, hiA, &A_ptr, ldA); pnga_access_ptr(g_B, loA, hiA, &B_ptr, ldB); snga_dot_local_patch(atype, andim, loA, hiA, ldA, A_ptr, B_ptr, &alen, retval); /* release access to the data */ pnga_release(g_A, loA, hiA); pnga_release(g_B, loA, hiA); } } else { /* Create copy of g_b identical with identical distribution as g_a */ if (!pnga_duplicate(g_a, &g_B, tempname)) pnga_error("duplicate failed",0L); pnga_copy_patch(&transp, g_b, blo, bhi, g_B, alo, ahi); temp_created = 1; /* If g_a regular distribution, then just use normal dot product on patch */ if (num_blocks_a < 0) { /* find out coordinates of patches of g_A and g_B that I own */ pnga_distribution(g_A, me, loA, hiA); pnga_distribution(g_B, me, loB, hiB); if(!pnga_comp_patch(andim, loA, hiA, bndim, loB, hiB)) pnga_error(" patches mismatch ",0); /* A[83:125,1:1] <==> B[83:125] */ if(andim > bndim) andim = bndim; /* need more work */ if(pnga_patch_intersect(alo, ahi, loA, hiA, andim)){ pnga_access_ptr(g_A, loA, hiA, &A_ptr, ldA); pnga_access_ptr(g_B, loA, hiA, &B_ptr, ldB); snga_dot_local_patch(atype, andim, loA, hiA, ldA, A_ptr, B_ptr, &alen, retval); /* release access to the data */ pnga_release(g_A, loA, hiA); pnga_release(g_B, loA, hiA); } } else { Integer lo[MAXDIM]/*, hi[MAXDIM]*/; Integer offset, jtot, last; /* simple block cyclic data distribution */ if (!pnga_uses_proc_grid(g_a)) { for (i=me; i adims[i]) hiA[i] = adims[i]; /*if (hiA[i] < loA[i]) chk = 0;*/ } /* make copies of loA and hiA since pnga_patch_intersect destroys original versions */ for (j=0; j= blocks[i] && i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((int *)data_ptr)[idx+j] = *(int*)val; } break; case C_DCPL: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) { DoubleComplex tmp = *(DoubleComplex *)val; ((DoubleComplex *)data_ptr)[idx+j].real = tmp.real; ((DoubleComplex *)data_ptr)[idx+j].imag = tmp.imag; } } break; case C_SCPL: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) { SingleComplex tmp = *(SingleComplex *)val; ((SingleComplex *)data_ptr)[idx+j].real = tmp.real; ((SingleComplex *)data_ptr)[idx+j].imag = tmp.imag; } } break; case C_DBL: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((double*)data_ptr)[idx+j] = *(double*)val; } break; case C_FLOAT: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((float *)data_ptr)[idx+j] = *(float*)val; } break; case C_LONG: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((long *)data_ptr)[idx+j] = *(long*)val; } break; case C_LONGLONG: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((long long*)data_ptr)[idx+j] = *(long long*)val; } break; default: pnga_error(" wrong data type ",type); } } /*\ FILL IN ARRAY WITH VALUE \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_fill_patch = pnga_fill_patch #endif void pnga_fill_patch(Integer g_a, Integer *lo, Integer *hi, void* val) { Integer i; Integer ndim, dims[MAXDIM], type; Integer loA[MAXDIM], hiA[MAXDIM], ld[MAXDIM]; void *data_ptr; Integer num_blocks, nproc; Integer me= pnga_nodeid(); int local_sync_begin,local_sync_end; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); GA_PUSH_NAME("nga_fill_patch"); pnga_inquire(g_a, &type, &ndim, dims); num_blocks = pnga_total_blocks(g_a); if (num_blocks < 0) { /* get limits of VISIBLE patch */ pnga_distribution(g_a, me, loA, hiA); /* determine subset of my local patch to access */ /* Output is in loA and hiA */ if(pnga_patch_intersect(lo, hi, loA, hiA, ndim)){ /* get data_ptr to corner of patch */ /* ld are leading dimensions INCLUDING ghost cells */ pnga_access_ptr(g_a, loA, hiA, &data_ptr, ld); /* set all values in patch to *val */ snga_set_patch_value(type, ndim, loA, hiA, ld, data_ptr, val); /* release access to the data */ pnga_release_update(g_a, loA, hiA); } } else { Integer offset, j, jtmp, chk; Integer loS[MAXDIM]; nproc = pnga_nnodes(); /* using simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(g_a)){ for (i=me; i dims[i]) hiA[i] = dims[i]; if (hiA[i] < loA[i]) chk = 0; } /* loA is changed by pnga_patch_intersect, so save a copy */ for (j=0; j= blocks[i] && i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((double*)src_data_ptr)[idx+j] *= *(double*)alpha; } break; case C_DCPL: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) { tmp1_real =((DoubleComplex *)src_data_ptr)[idx+j].real; tmp1_imag =((DoubleComplex *)src_data_ptr)[idx+j].imag; tmp2_real = (*(DoubleComplex*)alpha).real; tmp2_imag = (*(DoubleComplex*)alpha).imag; ((DoubleComplex *)src_data_ptr)[idx+j].real = tmp1_real*tmp2_real - tmp1_imag * tmp2_imag; ((DoubleComplex *)src_data_ptr)[idx+j].imag = tmp2_imag*tmp1_real + tmp1_imag * tmp2_real; } } break; case C_SCPL: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) { ftmp1_real =((SingleComplex *)src_data_ptr)[idx+j].real; ftmp1_imag =((SingleComplex *)src_data_ptr)[idx+j].imag; ftmp2_real = (*(SingleComplex*)alpha).real; ftmp2_imag = (*(SingleComplex*)alpha).imag; ((SingleComplex *)src_data_ptr)[idx+j].real = ftmp1_real*ftmp2_real - ftmp1_imag * ftmp2_imag; ((SingleComplex *)src_data_ptr)[idx+j].imag = ftmp2_imag*ftmp1_real + ftmp1_imag * ftmp2_real; } } break; case C_INT: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((int*)src_data_ptr)[idx+j] *= *(int*)alpha; } break; case C_LONG: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((long *)src_data_ptr)[idx+j] *= *(long*)alpha; } break; case C_LONGLONG: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((long long*)src_data_ptr)[idx+j] *= *(long long*)alpha; } break; case C_FLOAT: for(i=0; i (hiA[j]-loA[j])) bvalue[j] = 0; } for(j=0; j<(hiA[0]-loA[0]+1); j++) ((float *)src_data_ptr)[idx+j] *= *(float*)alpha; } break; default: pnga_error(" wrong data type ",type); } } /*\ SCALE ARRAY \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_scale_patch = pnga_scale_patch #endif void pnga_scale_patch(Integer g_a, Integer *lo, Integer *hi, void *alpha) { Integer ndim, dims[MAXDIM], type; Integer loA[MAXDIM], hiA[MAXDIM]; Integer ld[MAXDIM]; void *src_data_ptr; Integer num_blocks, nproc; Integer me= pnga_nodeid(); int local_sync_begin,local_sync_end; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); GA_PUSH_NAME("pnga_scale_patch"); pnga_inquire(g_a, &type, &ndim, dims); num_blocks = pnga_total_blocks(g_a); if (num_blocks < 0) { pnga_distribution(g_a, me, loA, hiA); /* determine subset of my patch to access */ if (pnga_patch_intersect(lo, hi, loA, hiA, ndim)){ pnga_access_ptr(g_a, loA, hiA, &src_data_ptr, ld); snga_scale_patch_value(type, ndim, loA, hiA, ld, src_data_ptr, alpha); /* release access to the data */ pnga_release_update(g_a, loA, hiA); } } else { Integer offset, i, j, jtmp, chk; Integer loS[MAXDIM]; nproc = pnga_nnodes(); /* using simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(g_a)){ for (i=me; i dims[i]) hiA[i] = dims[i]; if (hiA[i] < loA[i]) chk = 0; } /* loA is changed by pnga_patch_intersect, so save a copy */ for (j=0; j= blocks[i] && i (hiC[j]-loC[j])) bvalue[j] = 0; } for(j=0; j<(hiC[0]-loC[0]+1); j++) ((double*)C_ptr)[idx+j] = ((double*)C_ptr)[idx+j] + *(double*)alpha * ((double*)A_ptr)[idx+j]; } break; case C_DCPL: for(i=0; i (hiC[j]-loC[j])) bvalue[j] = 0; } for(j=0; j<(hiC[0]-loC[0]+1); j++) { DoubleComplex a = ((DoubleComplex *)A_ptr)[idx+j]; DoubleComplex x= *(DoubleComplex*)alpha; ((DoubleComplex *)C_ptr)[idx+j].real = ((DoubleComplex *)C_ptr)[idx+j].real + x.real*a.real - x.imag*a.imag; ((DoubleComplex *)C_ptr)[idx+j].imag = ((DoubleComplex *)C_ptr)[idx+j].imag + x.real*a.imag + x.imag*a.real; } } break; case C_SCPL: for(i=0; i (hiC[j]-loC[j])) bvalue[j] = 0; } for(j=0; j<(hiC[0]-loC[0]+1); j++) { SingleComplex a = ((SingleComplex *)A_ptr)[idx+j]; SingleComplex x= *(SingleComplex*)alpha; ((SingleComplex *)C_ptr)[idx+j].real = ((SingleComplex *)C_ptr)[idx+j].real + x.real*a.real - x.imag*a.imag; ((SingleComplex *)C_ptr)[idx+j].imag = ((SingleComplex *)C_ptr)[idx+j].imag + x.real*a.imag + x.imag*a.real; } } break; case C_INT: for(i=0; i (hiC[j]-loC[j])) bvalue[j] = 0; } for(j=0; j<(hiC[0]-loC[0]+1); j++) ((int*)C_ptr)[idx+j] = ((int*)C_ptr)[idx+j] + *(int *)alpha * ((int*)A_ptr)[idx+j]; } break; case C_FLOAT: for(i=0; i (hiC[j]-loC[j])) bvalue[j] = 0; } for(j=0; j<(hiC[0]-loC[0]+1); j++) ((float *)C_ptr)[idx+j] = ((float *)C_ptr)[idx+j] + *(float *)alpha * ((float *)A_ptr)[idx+j]; } break; case C_LONG: for(i=0; i (hiC[j]-loC[j])) bvalue[j] = 0; } for(j=0; j<(hiC[0]-loC[0]+1); j++) ((long *)C_ptr)[idx+j] = ((long *)C_ptr)[idx+j] + *(long *)alpha * ((long *)A_ptr)[idx+j]; } break; case C_LONGLONG: for(i=0; i (hiC[j]-loC[j])) bvalue[j] = 0; } for(j=0; j<(hiC[0]-loC[0]+1); j++) ((long long*)C_ptr)[idx+j] = ((long long*)C_ptr)[idx+j] + *(long long*)alpha * ((long long*)A_ptr)[idx+j]; } break; default: pnga_error(" wrong data type ",type); } } /*\ Utility function to add patch values together \*/ static void snga_add_patch_values(Integer type, void* alpha, void *beta, Integer ndim, Integer *loC, Integer *hiC, Integer *ldC, void *A_ptr, void *B_ptr, void *C_ptr) { Integer bvalue[MAXDIM], bunit[MAXDIM], baseldC[MAXDIM]; Integer idx, n1dim; Integer i, j; /* compute "local" add */ /* number of n-element of the first dimension */ n1dim = 1; for(i=1; i (hiC[j]-loC[j])) bvalue[j] = 0; } for(j=0; j<(hiC[0]-loC[0]+1); j++) ((double*)C_ptr)[idx+j] = *(double*)alpha * ((double*)A_ptr)[idx+j] + *(double*)beta * ((double*)B_ptr)[idx+j]; } break; case C_DCPL: for(i=0; i (hiC[j]-loC[j])) bvalue[j] = 0; } for(j=0; j<(hiC[0]-loC[0]+1); j++) { DoubleComplex a = ((DoubleComplex *)A_ptr)[idx+j]; DoubleComplex b = ((DoubleComplex *)B_ptr)[idx+j]; DoubleComplex x= *(DoubleComplex*)alpha; DoubleComplex y= *(DoubleComplex*)beta; ((DoubleComplex *)C_ptr)[idx+j].real = x.real*a.real - x.imag*a.imag + y.real*b.real - y.imag*b.imag; ((DoubleComplex *)C_ptr)[idx+j].imag = x.real*a.imag + x.imag*a.real + y.real*b.imag + y.imag*b.real; } } break; case C_SCPL: for(i=0; i (hiC[j]-loC[j])) bvalue[j] = 0; } for(j=0; j<(hiC[0]-loC[0]+1); j++) { SingleComplex a = ((SingleComplex *)A_ptr)[idx+j]; SingleComplex b = ((SingleComplex *)B_ptr)[idx+j]; SingleComplex x= *(SingleComplex*)alpha; SingleComplex y= *(SingleComplex*)beta; ((SingleComplex *)C_ptr)[idx+j].real = x.real*a.real - x.imag*a.imag + y.real*b.real - y.imag*b.imag; ((SingleComplex *)C_ptr)[idx+j].imag = x.real*a.imag + x.imag*a.real + y.real*b.imag + y.imag*b.real; } } break; case C_INT: for(i=0; i (hiC[j]-loC[j])) bvalue[j] = 0; } for(j=0; j<(hiC[0]-loC[0]+1); j++) ((int*)C_ptr)[idx+j] = *(int *)alpha * ((int*)A_ptr)[idx+j] + *(int*)beta * ((int*)B_ptr)[idx+j]; } break; case C_FLOAT: for(i=0; i (hiC[j]-loC[j])) bvalue[j] = 0; } for(j=0; j<(hiC[0]-loC[0]+1); j++) ((float *)C_ptr)[idx+j] = *(float *)alpha * ((float *)A_ptr)[idx+j] + *(float *)beta * ((float *)B_ptr)[idx+j]; } break; case C_LONG: for(i=0; i (hiC[j]-loC[j])) bvalue[j] = 0; } for(j=0; j<(hiC[0]-loC[0]+1); j++) ((long *)C_ptr)[idx+j] = *(long *)alpha * ((long *)A_ptr)[idx+j] + *(long *)beta * ((long *)B_ptr)[idx+j]; } break; case C_LONGLONG: for(i=0; i (hiC[j]-loC[j])) bvalue[j] = 0; } for(j=0; j<(hiC[0]-loC[0]+1); j++) ((long long*)C_ptr)[idx+j] = *(long long*)alpha * ((long long*)A_ptr)[idx+j] + *(long long*)beta * ((long long*)B_ptr)[idx+j]; } break; default: pnga_error(" wrong data type ",type); } } /*\ SCALED ADDITION of two patches \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_add_patch = pnga_add_patch #endif void pnga_add_patch(alpha, g_a, alo, ahi, beta, g_b, blo, bhi, g_c, clo, chi) Integer g_a, *alo, *ahi; /* patch of g_a */ Integer g_b, *blo, *bhi; /* patch of g_b */ Integer g_c, *clo, *chi; /* patch of g_c */ void *alpha, *beta; { Integer i, j; Integer compatible_a, compatible_b; Integer atype, btype, ctype; Integer andim, adims[MAXDIM], bndim, bdims[MAXDIM], cndim, cdims[MAXDIM]; Integer loA[MAXDIM], hiA[MAXDIM], ldA[MAXDIM]; Integer loB[MAXDIM], hiB[MAXDIM], ldB[MAXDIM]; Integer loC[MAXDIM], hiC[MAXDIM], ldC[MAXDIM]; void *A_ptr, *B_ptr, *C_ptr; Integer n1dim; Integer atotal, btotal; Integer g_A = g_a, g_B = g_b; Integer me= pnga_nodeid(), A_created=0, B_created=0; Integer nproc = pnga_nnodes(); Integer num_blocks_a, num_blocks_b, num_blocks_c; char *tempname = "temp", notrans='n'; int local_sync_begin,local_sync_end; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); GA_PUSH_NAME("nga_add_patch"); pnga_inquire(g_a, &atype, &andim, adims); pnga_inquire(g_b, &btype, &bndim, bdims); pnga_inquire(g_c, &ctype, &cndim, cdims); if(atype != btype || atype != ctype ) pnga_error(" types mismatch ", 0L); /* check if patch indices and dims match */ for(i=0; i adims[i]) pnga_error("g_a indices out of range ", g_a); for(i=0; i bdims[i]) pnga_error("g_b indices out of range ", g_b); for(i=0; i cdims[i]) pnga_error("g_c indices out of range ", g_c); /* check if numbers of elements in patches match each other */ n1dim = 1; for(i=0; i bndim) cndim = bndim; if(andim < bndim) cndim = andim; if(!pnga_comp_patch(andim, loA, hiA, cndim, loC, hiC)) pnga_error(" A patch mismatch ", g_A); if(!pnga_comp_patch(bndim, loB, hiB, cndim, loC, hiC)) pnga_error(" B patch mismatch ", g_B); /* determine subsets of my patches to access */ if (pnga_patch_intersect(clo, chi, loC, hiC, cndim)){ pnga_access_ptr(g_A, loC, hiC, &A_ptr, ldA); pnga_access_ptr(g_B, loC, hiC, &B_ptr, ldB); pnga_access_ptr(g_c, loC, hiC, &C_ptr, ldC); snga_add_patch_values(atype, alpha, beta, cndim, loC, hiC, ldC, A_ptr, B_ptr, C_ptr); /* release access to the data */ pnga_release (g_A, loC, hiC); pnga_release (g_B, loC, hiC); pnga_release_update(g_c, loC, hiC); } } else if (!compatible_a && compatible_b) { /* either patches or distributions do not match: * - create a temp array that matches distribution of g_c * - do C<= A */ if(g_b != g_c) { pnga_copy_patch(¬rans, g_a, alo, ahi, g_c, clo, chi); andim = cndim; g_A = g_c; pnga_distribution(g_A, me, loA, hiA); } else { if (!pnga_duplicate(g_c, &g_A, tempname)) pnga_error("ga_dadd_patch: dup failed", 0L); pnga_copy_patch(¬rans, g_a, alo, ahi, g_A, clo, chi); andim = cndim; A_created = 1; pnga_distribution(g_A, me, loA, hiA); } if(andim > bndim) cndim = bndim; if(andim < bndim) cndim = andim; if(!pnga_comp_patch(andim, loA, hiA, cndim, loC, hiC)) pnga_error(" A patch mismatch ", g_A); if(!pnga_comp_patch(bndim, loB, hiB, cndim, loC, hiC)) pnga_error(" B patch mismatch ", g_B); /* determine subsets of my patches to access */ if (pnga_patch_intersect(clo, chi, loC, hiC, cndim)){ pnga_access_ptr(g_A, loC, hiC, &A_ptr, ldA); pnga_access_ptr(g_B, loC, hiC, &B_ptr, ldB); pnga_access_ptr(g_c, loC, hiC, &C_ptr, ldC); snga_add_patch_values(atype, alpha, beta, cndim, loC, hiC, ldC, A_ptr, B_ptr, C_ptr); /* release access to the data */ pnga_release (g_A, loC, hiC); pnga_release (g_B, loC, hiC); pnga_release_update(g_c, loC, hiC); } } else if (compatible_a && !compatible_b) { /* either patches or distributions do not match: * - create a temp array that matches distribution of g_c * - copy & reshape patch of g_b into g_B */ if (!pnga_duplicate(g_c, &g_B, tempname)) pnga_error("ga_dadd_patch: dup failed", 0L); pnga_copy_patch(¬rans, g_b, blo, bhi, g_B, clo, chi); bndim = cndim; B_created = 1; pnga_distribution(g_B, me, loB, hiB); if(andim > bndim) cndim = bndim; if(andim < bndim) cndim = andim; if(!pnga_comp_patch(andim, loA, hiA, cndim, loC, hiC)) pnga_error(" A patch mismatch ", g_A); if(!pnga_comp_patch(bndim, loB, hiB, cndim, loC, hiC)) pnga_error(" B patch mismatch ", g_B); /* determine subsets of my patches to access */ if (pnga_patch_intersect(clo, chi, loC, hiC, cndim)){ pnga_access_ptr(g_A, loC, hiC, &A_ptr, ldA); pnga_access_ptr(g_B, loC, hiC, &B_ptr, ldB); pnga_access_ptr(g_c, loC, hiC, &C_ptr, ldC); snga_add_patch_values(atype, alpha, beta, cndim, loC, hiC, ldC, A_ptr, B_ptr, C_ptr); /* release access to the data */ pnga_release (g_A, loC, hiC); pnga_release (g_B, loC, hiC); pnga_release_update(g_c, loC, hiC); } } else if (!compatible_a && !compatible_b) { /* there is no match between any of the global arrays */ if (!pnga_duplicate(g_c, &g_B, tempname)) pnga_error("ga_dadd_patch: dup failed", 0L); pnga_copy_patch(¬rans, g_b, blo, bhi, g_B, clo, chi); bndim = cndim; B_created = 1; if(andim > bndim) cndim = bndim; if(andim < bndim) cndim = andim; cndim = bndim; pnga_copy_patch(¬rans, g_a, alo, ahi, g_c, clo, chi); pnga_scale_patch(g_c, clo, chi, alpha); /* determine subsets of my patches to access */ if (pnga_patch_intersect(clo, chi, loC, hiC, cndim)){ pnga_access_ptr(g_B, loC, hiC, &B_ptr, ldB); pnga_access_ptr(g_c, loC, hiC, &C_ptr, ldC); snga_acc_patch_values(atype, beta, cndim, loC, hiC, ldC, B_ptr, C_ptr); /* release access to the data */ pnga_release (g_B, loC, hiC); pnga_release_update(g_c, loC, hiC); } } } else { /* create copies of arrays A and B that are identically distributed as C*/ if (!pnga_duplicate(g_c, &g_A, tempname)) pnga_error("ga_dadd_patch: dup failed", 0L); pnga_copy_patch(¬rans, g_a, alo, ahi, g_A, clo, chi); andim = cndim; A_created = 1; if (!pnga_duplicate(g_c, &g_B, tempname)) pnga_error("ga_dadd_patch: dup failed", 0L); pnga_copy_patch(¬rans, g_b, blo, bhi, g_B, clo, chi); bndim = cndim; B_created = 1; /* C is normally distributed so just add copies together for regular arrays */ if (num_blocks_c < 0) { pnga_distribution(g_c, me, loC, hiC); if(andim > bndim) cndim = bndim; if(andim < bndim) cndim = andim; if (pnga_patch_intersect(clo, chi, loC, hiC, cndim)){ pnga_access_ptr(g_A, loC, hiC, &A_ptr, ldA); pnga_access_ptr(g_B, loC, hiC, &B_ptr, ldB); pnga_access_ptr(g_c, loC, hiC, &C_ptr, ldC); snga_add_patch_values(atype, alpha, beta, cndim, loC, hiC, ldC, A_ptr, B_ptr, C_ptr); /* release access to the data */ pnga_release (g_A, loC, hiC); pnga_release (g_B, loC, hiC); pnga_release_update(g_c, loC, hiC); } } else { Integer idx, lod[MAXDIM]/*, hid[MAXDIM]*/; Integer offset, jtot, last; /* Simple block-cyclic data disribution */ if (!pnga_uses_proc_grid(g_c)) { for (idx = me; idx < num_blocks_c; idx += nproc) { pnga_distribution(g_c, idx, loC, hiC); /* make temporary copies of loC and hiC since pnga_patch_intersect destroys original versions */ for (j=0; j cdims[i]) hiC[i] = cdims[i]; /*if (hiC[i] < loC[i]) chk = 0;*/ } /* make temporary copies of loC and hiC since pnga_patch_intersect destroys original versions */ for (j=0; j= blocks[i] && i #endif #if HAVE_STRING_H # include #endif #include "globalp.h" #include "message.h" #include "ga-papi.h" #include "ga-wapi.h" #define GET_ELEMS(ndim,lo,hi,ld,pelems){\ int _i;\ for(_i=0, *pelems = hi[ndim-1]-lo[ndim-1]+1; _i< ndim-1;_i++) {\ if(ld[_i] != (hi[_i]-lo[_i]+1)) pnga_error("layout problem",_i);\ *pelems *= hi[_i]-lo[_i]+1;\ }\ } typedef struct { union val_t {double dval; int ival; long lval; long long llval; float fval;}v; Integer subscr[MAXDIM]; DoubleComplex extra; SingleComplex extra2; } elem_info_t; static void snga_select_elem(Integer type, char* op, void *ptr, Integer elems, elem_info_t *info, Integer *ind) { Integer i; switch (type){ int *ia,ival; double *da,dval; DoubleComplex *ca; SingleComplex *cfa; float *fa,fval; long *la,lval; long long *lla,llval; case C_INT: ia = (int*)ptr; ival = *ia; if (strncmp(op,"min",3) == 0) for(i=0;i ia[i]) {ival=ia[i];*ind=i; } } else for(i=0;iv.ival = (int) ival; break; case C_DCPL: ca = (DoubleComplex*)ptr; dval=ca->real*ca->real + ca->imag*ca->imag; if (strncmp(op,"min",3) == 0) for(i=0;ireal*ca->real + ca->imag*ca->imag; if(dval > tmp){dval = tmp; *ind = i;} } else for(i=0;ireal*ca->real + ca->imag*ca->imag; if(dval < tmp){dval = tmp; *ind = i;} } info->v.dval = dval; /* use abs value for comparison*/ info->extra = ((DoubleComplex*)ptr)[*ind]; /* append the actual val */ break; case C_SCPL: cfa = (SingleComplex*)ptr; fval=cfa->real*cfa->real + cfa->imag*cfa->imag; if (strncmp(op,"min",3) == 0) for(i=0;ireal*cfa->real + cfa->imag*cfa->imag; if(fval > tmp){fval = tmp; *ind = i;} } else for(i=0;ireal*cfa->real + cfa->imag*cfa->imag; if(fval < tmp){fval = tmp; *ind = i;} } info->v.fval = fval; /* use abs value for comparison*/ info->extra2 = ((SingleComplex*)ptr)[*ind]; /* append the actual val */ break; case C_DBL: da = (double*)ptr; dval = *da; if (strncmp(op,"min",3) == 0) for(i=0;i da[i]) {dval=da[i];*ind=i; } } else for(i=0;iv.dval = dval; break; case C_FLOAT: fa = (float*)ptr; fval = *fa; if (strncmp(op,"min",3) == 0) for(i=0;i fa[i]) {fval=fa[i];*ind=i; } } else for(i=0;iv.fval = fval; break; case C_LONG: la = (long*)ptr; lval = *la; if (strncmp(op,"min",3) == 0) for(i=0;i la[i]) {lval=la[i];*ind=i; } } else for(i=0;iv.lval = lval; break; case C_LONGLONG: lla = (long long*)ptr; llval = *lla; if (strncmp(op,"min",3) == 0) for(i=0;i lla[i]) {llval=lla[i];*ind=i; } } else for(i=0;iv.llval = llval; break; default: pnga_error(" wrong data type ",type); } } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_select_elem = pnga_select_elem #endif void pnga_select_elem(Integer g_a, char* op, void* val, Integer *subscript) { Integer ndim, type, me, elems, ind=0, i; Integer lo[MAXDIM],hi[MAXDIM],dims[MAXDIM],ld[MAXDIM-1]; elem_info_t info; Integer num_blocks; int participate=0; int local_sync_begin; local_sync_begin = _ga_sync_begin; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); me = pnga_nodeid(); pnga_check_handle(g_a, "ga_select_elem"); GA_PUSH_NAME("ga_elem_op"); if (strncmp(op,"min",3) == 0); else if (strncmp(op,"max",3) == 0); else pnga_error("operator not recognized",0); pnga_inquire(g_a, &type, &ndim, dims); num_blocks = pnga_total_blocks(g_a); if (num_blocks < 0) { pnga_distribution(g_a, me, lo, hi); if ( lo[0]> 0 ){ /* base index is 1: we get 0 if no elements stored on p */ /******************* calculate local result ************************/ void *ptr; pnga_access_ptr(g_a, lo, hi, &ptr, ld); GET_ELEMS(ndim,lo,hi,ld,&elems); participate =1; /* select local element */ snga_select_elem(type, op, ptr, elems, &info, &ind); /* release access to the data */ pnga_release(g_a, lo, hi); /* determine element subscript in the ndim-array */ for(i = 0; i < ndim; i++){ int elems = (int)( hi[i]-lo[i]+1); info.subscr[i] = ind%elems + lo[i] ; ind /= elems; } } } else { void *ptr; Integer j, offset, jtot, upper; Integer nproc = pnga_nnodes(); pnga_access_block_segment_ptr(g_a, me, &ptr, &elems); if (elems > 0) { participate =1; /* select local element */ snga_select_elem(type, op, ptr, elems, &info, &ind); /* release access to the data */ pnga_release_block_segment(g_a, me); /* convert local index back into a global array index */ if (!pnga_uses_proc_grid(g_a)) { offset = 0; for (i=me; i= offset && ind < upper) { break; } else { offset += jtot; } } /* determine element subscript in the ndim-array */ ind -= offset; for(i = 0; i < ndim; i++){ int elems = (int)( hi[i]-lo[i]+1); info.subscr[i] = ind%elems + lo[i] ; ind /= elems; } } else { Integer stride[MAXDIM], index[MAXDIM]; Integer blocks[MAXDIM], block_dims[MAXDIM]; Integer proc_index[MAXDIM], topology[MAXDIM]; Integer l_index[MAXDIM]; Integer min, max; pnga_get_proc_index(g_a, me, proc_index); pnga_get_block_info(g_a, blocks, block_dims); pnga_get_proc_grid(g_a, topology); /* figure out strides for locally held block of data */ for (i=0; i dims[i]) max = dims[i]; stride[i] += (max - min + 1); } } /* use strides to figure out local index */ l_index[0] = ind%stride[0]; for (i=1; i= 2MB * ------------------------------------- * * Note#3: If Stride information needs to be printed, set GA_PRINT_STRIDE. * Stride information is printed in ga_profile_terminate() for a various * selective message ranges and event types. Modify according to your needs. */ #ifdef ENABLE_PROFILE #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_MATH_H # include #endif #include "globalp.h" #include "base.h" #include "ga_profile.h" #include "ga-papi.h" #include "ga-wapi.h" #ifndef MPI # include "tcgmsg.h" # define MP_TIMER tcg_time #else # include "mpi.h" # define MP_TIMER MPI_Wtime #endif #define GA_PRINT_STRIDE 1 #define GA_MAX_MSG_RANGE 21 #if GA_PRINT_STRIDE #define STRIDE_COUNT 1000 typedef struct ga_stride { int ndim; int lo[GA_MAX_DIM]; int hi[GA_MAX_DIM]; char name[FNAM+1]; double time; }ga_stride_t; #endif #define GA_EVENTS 6 /* get, put, acc, Non-Contiguous get, put, acc*/ enum events {GET, /* Contiguous get */ PUT, ACC, NC_GET, /* Non contiguous Get */ NC_PUT, NC_ACC }; char *event_name[GA_EVENTS] = {"GET", "PUT", "ACC", "NON CONTIGUOUS GET", "NON CONTIGUOUS PUT", "NON CONTIGUOUS ACC"}; typedef struct ga_profile { int count; /* number of times called */ double exectime; /* total execution time for "count" calls */ #if GA_PRINT_STRIDE ga_stride_t stride[STRIDE_COUNT]; #endif }ga_profile_t; /* profile get/put/acc for various message ranges (i.e GA_MAX_MSG_RANGE) */ static ga_profile_t GA_PROF[GA_EVENTS][GA_MAX_MSG_RANGE]; /* Current event */ struct event_info { int event_type; int range; int is_set; double start_time; } gCURRENT_EVNT; void ga_profile_init() { int i,j; if(pnga_nodeid()==0) {printf("\nProfiling GA - ON\n");fflush(stdout);} for(i=0; i=GA_MAX_MSG_RANGE) range = GA_MAX_MSG_RANGE; /* check contiguous or non-contiguous */ for(i=0; i1) non_contig=1; /* i.e. non-contiguous */ switch(comm_type) { case ENABLE_PROFILE_PUT: if(non_contig) event_type = NC_PUT; else event_type = PUT; break; case ENABLE_PROFILE_GET: if(non_contig) event_type = NC_GET; else event_type = GET; break; case ENABLE_PROFILE_ACC: if(non_contig) event_type = NC_ACC; else event_type = ACC; break; default: pnga_error("ENABLE_PROFILE: Invalid communication type", 0L); } /* set the curent event for timer */ ga_profile_set_event(event_type, range); /* profile update: i.e. update event count */ GA_PROF[event_type][range].count++; #if GA_PRINT_STRIDE { int idx = GA_PROF[event_type][range].count-1; if(idx%d)\n", pnga_nodeid(), GA_PROF[GET][i].count, GA_PROF[PUT][i].count, GA_PROF[ACC][i].count, 1<%d)\n",pnga_nodeid(), GA_PROF[NC_GET][i].count, GA_PROF[NC_PUT][i].count, GA_PROF[NC_ACC][i].count, 1<%d)\n", pnga_nodeid(), GA_PROF[GET][i].exectime, GA_PROF[PUT][i].exectime, GA_PROF[ACC][i].exectime, 1<%d)\n", pnga_nodeid(), GA_PROF[NC_GET][i].exectime, GA_PROF[NC_PUT][i].exectime, GA_PROF[NC_ACC][i].exectime, 1<=STRIDE_COUNT) break; time += GA_PROF[event][range].stride[i].time; ndim = GA_PROF[event][range].stride[i].ndim; printf("%d\t%d %.2e (",i, ndim, GA_PROF[event][range].stride[i].time); for(j=0;j "); for(j=0;j #endif #if HAVE_STDLIB_H # include #endif #include "globalp.h" #include "ga-papi.h" #include "ga-wapi.h" #define RANGE_NUM 3 #define RANGE_BOUND 6 #define IS_REGULAR_PATCH 100 typedef struct { Integer lo; Integer hi; int isvalid; } Range_bound; typedef struct { Range_bound low; Range_bound mid; Range_bound hig; } Range; static int ngai_peri_get_range_(Integer ndim, Integer *dims, Integer *lo_orig, Integer *hi_orig, Integer range[][RANGE_BOUND], Integer range_num[], Integer offset[][RANGE_BOUND/2], Integer op_code) /* ndim - dimension of array [input] dims[] - dimensions of each array component [input] lo_orig[] - lower bounds of request hi_orig[] - upper bounds of request range[][] - adjusted ranges for requests [output] range_num[] - number of ranges per axis offset[] - offset between original request and shifted request [output] op_code - not used */ { Integer lo[MAXDIM], hi[MAXDIM]; Integer i, rmndr, id; Range range_raw[MAXDIM]; Integer is_regular_patch, no_shift; /* check the patch is valid or not */ for (i=0; i 2*dims[i]) return 0; } /* move request so that it at least partially overlaps the array * (if necessary) */ no_shift = 1; for(i=0; i dims[i]) { rmndr = lo[i]%dims[i]; id = (lo[i]-rmndr)/dims[i]; lo[i] = lo[i] - id*dims[i]; hi[i] = hi[i] - id*dims[i]; if (id != 0) { no_shift = 0; } } if (hi[i] < 1) { rmndr = -hi[i]%dims[i]; id = (hi[i]+rmndr)/dims[i]+1; lo[i] = lo[i] + id*dims[i]; hi[i] = hi[i] + id*dims[i]; if (id != 0) { no_shift = 0; } } } /* break the lo and hi into the corresponding ranges * * lo (if < 1) 1 dims[i] hi (if > dims[i]) * |-------------------|------------------|------------------| * Example: * lo[0] = -3 hi[0] = 5 dims[0] = 10 then * range_raw[0].low.lo = -3 range_raw[0].low.hi = 0 * range_raw[0].low.isvalid = 1 * range_raw[0].mid.lo = 1 range_raw[0].mid.hi = 5 * range_raw[0].mid.isvalid = 1 * range_raw[0].hig.isvalid = 0 */ for(i=0; i= 1) { range_raw[i].mid.lo = lo[i]; range_raw[i].mid.isvalid = 1; } if (lo[i] < 1 && hi[i] > dims[i]) { range_raw[i].mid.isvalid = 1; } if(hi[i] > dims[i]) { range_raw[i].hig.hi = hi[i]; range_raw[i].hig.isvalid = 1; } else if (hi[i] <= dims[i]) { range_raw[i].mid.hi = hi[i]; range_raw[i].mid.isvalid = 1; } } /* check if this is a regular patch, not periodic operation needed */ is_regular_patch = 1; for(i=0; i _MAX_PROB_SIZE_) || (dimB1*dimB2 > _MAX_PROB_SIZE_) ) pnga_error("ga_lu_solve:Array size too large. Use scalapack for optimum performance. configure --with-scalapack or --with-scalapack-i8 for ga_lu_solve to use Scalapack interface",0L); pnga_lu_solve_seq(tran, g_a, g_b); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_llt_solve = pnga_llt_solve #endif Integer pnga_llt_solve(Integer g_a, Integer g_b) { #if HAVE_SCALAPACK # if ENABLE_F77 return gai_llt_solve_(&g_a, &g_b); # else pnga_error("ga_lu_solve:scalapack interfaced, need configure --enable-f77",0L); return FALSE; # endif #else pnga_error("ga_lu_solve:scalapack not interfaced",0L); return FALSE; #endif } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_solve = pnga_solve #endif Integer pnga_solve(Integer g_a, Integer g_b) { #if HAVE_SCALAPACK # if ENABLE_F77 return gai_solve_(&g_a, &g_b); # else pnga_error("ga_lu_solve:scalapack interfaced, need configure --enable-f77",0L); return FALSE; # endif #else pnga_error("ga_lu_solve:scalapack not interfaced",0L); return FALSE; #endif } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_spd_invert = pnga_spd_invert #endif Integer pnga_spd_invert(Integer g_a) { #if HAVE_SCALAPACK # if ENABLE_F77 return gai_spd_invert_(&g_a); # else pnga_error("ga_lu_solve:scalapack interfaced, need configure --enable-f77",0L); return FALSE; # endif #else pnga_error("ga_lu_solve:scalapack not interfaced",0L); return FALSE; #endif } ga-5-3/global/src/onesided.c0000640005473000001440000062645112142275224014600 0ustar d3n000users/* $Id: onesided.c,v 1.80.2.18 2007/12/18 22:22:27 d3g293 Exp $ */ /* * module: onesided.c * author: Jarek Nieplocha * description: implements GA primitive communication operations -- * accumulate, scatter, gather, read&increment & synchronization * * DISCLAIMER * * This material was prepared as an account of work sponsored by an * agency of the United States Government. Neither the United States * Government nor the United States Department of Energy, nor Battelle, * nor any of their employees, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR * ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, * COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, * SOFTWARE, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT * INFRINGE PRIVATELY OWNED RIGHTS. * * * ACKNOWLEDGMENT * * This software and its documentation were produced with United States * Government support under Contract Number DE-AC06-76RLO-1830 awarded by * the United States Department of Energy. The United States Government * retains a paid-up non-exclusive, irrevocable worldwide license to * reproduce, prepare derivative works, perform publicly and display * publicly by or for the US Government, including the right to * distribute to other US Government contractors. */ #if HAVE_CONFIG_H # include "config.h" #endif /*#define PERMUTE_PIDS */ /*#define USE_GATSCAT_NEW 1 */ #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STDINT_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_ASSERT_H # include #endif #if HAVE_STDDEF_H #include #endif #include "global.h" #include "globalp.h" #include "base.h" #include "armci.h" #include "macdecls.h" #include "ga-papi.h" #include "ga-wapi.h" #define DEBUG 0 #define USE_MALLOC 1 #define INVALID_MA_HANDLE -1 #define NEAR_INT(x) (x)< 0.0 ? ceil( (x) - 0.5) : floor((x) + 0.5) #if !defined(CRAY_YMP) #define BYTE_ADDRESSABLE_MEMORY #endif #ifdef PROFILE_OLD #include "ga_profile.h" #endif #define DISABLE_NBOPT /* disables Non-Blocking OPTimization */ /*uncomment line below to verify consistency of MA in every sync */ /*#define CHECK_MA yes */ char *fence_array; static int GA_fence_set=0; Integer *_ga_map; /* used in get/put/acc */ int *ProcListPerm; static int GA_prealloc_gatscat = 0; static Integer *GA_header; static Integer *GA_list; static Integer *GA_elems; extern void armci_read_strided(void*, int, int*, int*, char*); extern void armci_write_strided(void*, int, int*, int*, char*); extern armci_hdl_t* get_armci_nbhandle(Integer *); /***************************************************************************/ /** * Synchronize all processes on group */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_pgroup_sync = pnga_pgroup_sync #endif void pnga_pgroup_sync(Integer grp_id) { #ifdef CHECK_MA Integer status; #endif /* printf("p[%d] calling ga_pgroup_sync on group: %d\n",GAme,*grp_id); */ if (grp_id > 0) { # ifdef MPI /* fence on all processes in this group */ { int p; for(p=0;p GAnproc) pnga_error("permute_proc: error ", (nproc));\ \ /* every process generates different random sequence */\ (void)srand((unsigned)GAme); \ \ /* initialize list */\ for(_i=0; _i< (nproc); _i++) ProcListPerm[_i]=_i;\ \ /* list permutation generated by random swapping */\ for(_i=0; _i< (nproc); _i++){ \ iswap = (int)(rand() % (nproc)); \ temp = ProcListPerm[iswap]; \ ProcListPerm[iswap] = ProcListPerm[_i]; \ ProcListPerm[_i] = temp; \ } \ }\ } /*\ internal malloc that bypasses MA and uses internal buf when possible \*/ #define MBUFLEN 256 #define MBUF_LEN MBUFLEN+2 static double ga_int_malloc_buf[MBUF_LEN]; static int mbuf_used=0; #define MBUF_GUARD -1998.1998 void *gai_malloc(int bytes) { void *ptr; if(!mbuf_used && bytes <= MBUF_LEN){ if(DEBUG){ ga_int_malloc_buf[0]= MBUF_GUARD; ga_int_malloc_buf[MBUFLEN]= MBUF_GUARD; } ptr = ga_int_malloc_buf+1; mbuf_used++; }else{ Integer elems = (bytes+sizeof(double)-1)/sizeof(double)+1; ptr=ga_malloc(elems, MT_DBL, "GA malloc temp"); /* *((Integer*)ptr)= handle; ptr = ((double*)ptr)+ 1;*/ /*needs sizeof(double)>=sizeof(Integer)*/ } return ptr; } void gai_free(void *ptr) { if(ptr == (ga_int_malloc_buf+1)){ if(DEBUG){ assert(ga_int_malloc_buf[0]== MBUF_GUARD); assert(ga_int_malloc_buf[MBUFLEN]== MBUF_GUARD); assert(mbuf_used ==1); } mbuf_used =0; }else{ /* Integer handle= *( (Integer*) (-1 + (double*)ptr)); */ ga_free(ptr); } } #define gaShmemLocation(proc, g_a, _i, _j, ptr_loc, _pld) \ { \ Integer _ilo, _ihi, _jlo, _jhi, offset, proc_place, g_handle=(g_a)+GA_OFFSET;\ Integer _lo[2], _hi[2], _p_handle; \ Integer _iw = GA[g_handle].width[0]; \ Integer _jw = GA[g_handle].width[1]; \ Integer _num_rstrctd = GA[g_handle].num_rstrctd; \ \ ga_ownsM(g_handle, (proc),_lo,_hi); \ _p_handle = GA[g_handle].p_handle; \ if (_p_handle != 0) { \ proc_place = proc; \ if (_num_rstrctd != 0) { \ proc_place = GA[g_handle].rstrctd_list[proc_place]; \ } \ } else { \ proc_place = PGRP_LIST[_p_handle].inv_map_proc_list[proc]; \ } \ _ilo = _lo[0]; _ihi=_hi[0]; \ _jlo = _lo[1]; _jhi=_hi[1]; \ \ if((_i)<_ilo || (_i)>_ihi || (_j)<_jlo || (_j)>_jhi){ \ char err_string[ERR_STR_LEN]; \ sprintf(err_string,"%s:p=%ld invalid i/j (%ld,%ld)><(%ld:%ld,%ld:%ld)", \ "gaShmemLocation", (long)proc, (long)(_i),(long)(_j), \ (long)_ilo, (long)_ihi, (long)_jlo, (long)_jhi); \ pnga_error(err_string, g_a ); \ } \ offset = ((_i)-_ilo+_iw) + (_ihi-_ilo+1+2*_iw)*((_j)-_jlo+_jw); \ \ /* find location of the proc in current cluster pointer array */ \ *(ptr_loc) = GA[g_handle].ptr[proc_place] + \ offset*GAsizeofM(GA[g_handle].type); \ *(_pld) = _ihi-_ilo+1+2*_iw; \ } /*\ Return pointer (ptr_loc) to location in memory of element with subscripts * (subscript). Also return physical dimensions of array in memory in ld. \*/ #define gam_Location(proc, g_handle, subscript, ptr_loc, ld) \ { \ Integer _offset=0, _d, _w, _factor=1, _last=GA[g_handle].ndim-1; \ Integer _lo[MAXDIM], _hi[MAXDIM], _pinv, _p_handle; \ \ ga_ownsM(g_handle, proc, _lo, _hi); \ gaCheckSubscriptM(subscript, _lo, _hi, GA[g_handle].ndim); \ if(_last==0) ld[0]=_hi[0]- _lo[0]+1+2*(Integer)GA[g_handle].width[0]; \ __CRAYX1_PRAGMA("_CRI shortloop"); \ for(_d=0; _d < _last; _d++) { \ _w = (Integer)GA[g_handle].width[_d]; \ _offset += (subscript[_d]-_lo[_d]+_w) * _factor; \ ld[_d] = _hi[_d] - _lo[_d] + 1 + 2*_w; \ _factor *= ld[_d]; \ } \ _offset += (subscript[_last]-_lo[_last] \ + (Integer)GA[g_handle].width[_last]) \ * _factor; \ _p_handle = GA[g_handle].p_handle; \ if (_p_handle != 0) { \ if (GA[g_handle].num_rstrctd == 0) { \ _pinv = proc; \ } else { \ _pinv = GA[g_handle].rstrctd_list[proc]; \ } \ } else { \ _pinv = PGRP_LIST[_p_handle].inv_map_proc_list[proc]; \ } \ *(ptr_loc) = GA[g_handle].ptr[_pinv]+_offset*GA[g_handle].elemsize; \ } #define gam_GetRangeFromMap(p, ndim, plo, phi){\ Integer _mloc = p* ndim *2;\ *plo = (Integer*)_ga_map + _mloc;\ *phi = *plo + ndim;\ } /* compute index of point subscripted by plo relative to point subscripted by lo, for a block with dimensions dims */ #define gam_ComputePatchIndex(ndim, lo, plo, dims, pidx){ \ Integer _d, _factor; \ *pidx = plo[0] -lo[0]; \ __CRAYX1_PRAGMA("_CRI shortloop"); \ for(_d= 0,_factor=1; _d< ndim -1; _d++){ \ _factor *= (dims[_d]); \ *pidx += _factor * (plo[_d+1]-lo[_d+1]); \ } \ } #define gam_GetBlockPatch(plo,phi,lo,hi,blo,bhi,ndim) { \ Integer _d; \ for (_d=0; _d= plo[_d]) blo[_d] = lo[_d]; \ else blo[_d] = plo[_d]; \ if (hi[_d] <= phi[_d] && hi[_d] >= plo[_d]) bhi[_d] = hi[_d]; \ else bhi[_d] = phi[_d]; \ } \ } /** * A routine to test for a non-blocking call */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_nbtest = pnga_nbtest #endif Integer pnga_nbtest(Integer *nbhandle) { return nga_test_internal((Integer *)nbhandle); } /** * A routine to wait for a non-blocking call to complete */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_nbwait = pnga_nbwait #endif void pnga_nbwait(Integer *nbhandle) { nga_wait_internal((Integer *)nbhandle); } static void ngai_puts(char *loc_base_ptr, char *pbuf, int *stride_loc, char *prem, int *stride_rem, int *count, int nstrides, int proc, int field_off, int field_size, int type_size) { if(field_size<0 || field_size == type_size) { ARMCI_PutS(pbuf,stride_loc,prem,stride_rem,count,nstrides,proc); } else { int i; count -= 1; stride_loc -= 1; stride_rem -= 1; nstrides += 1; for(i=1; i= 0) { proc = PGRP_LIST[p_handle].inv_map_proc_list[proc]; } #ifdef PERMUTE_PIDS if(GA_Proc_list) proc = GA_inv_Proc_list[proc]; #endif /* check if it is local to SMP */ #if !defined(__crayx1) && !defined(DISABLE_NBOPT) cond = armci_domain_same_id(ARMCI_DOMAIN_SMP,(int)proc); if(loop==0) cond = !cond; if(cond) { #endif /* Find visible portion of patch held by processor p and return the result in plo and phi. Also get actual processor index corresponding to p and store the result in proc. */ gam_GetRangeFromMap(p, ndim, &plo, &phi); proc = (int)GA_proclist[p]; if (n_rstrctd == 0) { gam_Location(proc,handle, plo, &prem, ldrem); } else { gam_Location(rank_rstrctd[proc],handle, plo, &prem, ldrem); } /* find the right spot in the user buffer */ gam_ComputePatchIndex(ndim, lo, plo, ld, &idx_buf); pbuf = size*idx_buf + (char*)buf; gam_ComputeCount(ndim, plo, phi, count); /* scale number of rows by element size */ count[0] *= size; gam_setstride(ndim, size, ld, ldrem, stride_rem, stride_loc); if (p_handle >= 0) { proc = (int)GA_proclist[p]; /* BJP */ proc = PGRP_LIST[p_handle].inv_map_proc_list[proc]; } if(GA_fence_set)fence_array[proc]=1; #ifdef PERMUTE_PIDS if(GA_Proc_list) proc = GA_inv_Proc_list[proc]; #endif #ifndef NO_GA_STATS if(proc == GAme){ gam_CountElems(ndim, plo, phi, &elems); GAbytes.putloc += (double)size*elems; } #endif /*casting what ganb_get_armci_handle function returns to armci_hdl is very crucial here as on 64 bit platforms, pointer is 64 bits where as temporary is only 32 bits*/ #if defined(__crayx1) || defined(DISABLE_NBOPT) /* ARMCI_PutS(pbuf,stride_loc,prem,stride_rem,count,ndim-1,proc); */ ngai_puts(buf, pbuf,stride_loc,prem,stride_rem,count,ndim-1,proc, field_off, field_size, size); #else if(nbhandle) { /* ARMCI_NbPutS(pbuf, stride_loc, prem, stride_rem, count, ndim -1, */ /* proc,(armci_hdl_t*)get_armci_nbhandle(nbhandle)); */ ngai_nbputs(buf,pbuf, stride_loc, prem, stride_rem, count, ndim -1, proc,field_off, field_size, size, (armci_hdl_t*)get_armci_nbhandle(nbhandle)); } else { /* do blocking put for local processes. If all processes are remote processes then do blocking put for the last one */ if((loop==0 && counter==(int)np-1) || loop==1) { /* ARMCI_PutS(pbuf,stride_loc,prem,stride_rem,count,ndim-1,proc); */ ngai_puts(buf, pbuf,stride_loc,prem,stride_rem,count,ndim-1,proc, field_off, field_size, size); } else { ++counter; /* ARMCI_NbPutS(pbuf,stride_loc,prem,stride_rem,count, ndim-1, */ /* proc,(armci_hdl_t*)get_armci_nbhandle(&ga_nbhandle)); */ ngai_nbputs(buf,pbuf,stride_loc,prem,stride_rem,count, ndim-1, proc, field_off, field_size, size, (armci_hdl_t*)get_armci_nbhandle(&ga_nbhandle)); } } } /* end if(cond) */ } #endif } #if !defined(__crayx1) && !defined(DISABLE_NBOPT) if(!nbhandle) nga_wait_internal(&ga_nbhandle); #endif } else { Integer offset, l_offset, last, pinv; Integer blo[MAXDIM],bhi[MAXDIM]; Integer plo[MAXDIM],phi[MAXDIM]; Integer idx, j, jtot, chk, iproc; Integer idx_buf, ldrem[MAXDIM]; Integer blk_tot = GA[handle].block_total; int check1, check2; char *pbuf, *prem; /* GA uses simple block cyclic data distribution */ if (GA[handle].block_sl_flag == 0) { for(loop=0; loop= lo[j] && blo[j] <= hi[j]) || (bhi[j] >= lo[j] && bhi[j] <= hi[j])); /* check to see if interval represented by lo and hi * falls entirely within interval represented by blo and bhi */ check2 = ((lo[j] >= blo[j] && lo[j] <= bhi[j]) && (hi[j] >= blo[j] && hi[j] <= bhi[j])); if (!check1 && !check2) { chk = 0; } } if (chk) { /* get the patch of block that overlaps requested region */ gam_GetBlockPatch(blo,bhi,lo,hi,plo,phi,ndim); /* evaluate offset within block */ last = ndim - 1; jtot = 1; if (last == 0) ldrem[0] = bhi[0] - blo[0] + 1; l_offset = 0; for (j=0; j 0) { pinv = PGRP_LIST[p_handle].inv_map_proc_list[pinv]; } prem = GA[handle].ptr[pinv]+l_offset*GA[handle].elemsize; gam_ComputePatchIndex(ndim, lo, plo, ld, &idx_buf); pbuf = size*idx_buf + (char*)buf; gam_ComputeCount(ndim, plo, phi, count); /* scale number of rows by element size */ count[0] *= size; gam_setstride(ndim, size, ld, ldrem, stride_rem, stride_loc); proc = pinv; if(GA_fence_set)fence_array[proc]=1; #ifndef NO_GA_STATS if(proc == GAme){ gam_CountElems(ndim, plo, phi, &elems); GAbytes.putloc += (double)size*elems; } #endif /*casting what ganb_get_armci_handle function returns to armci_hdl is very crucial here as on 64 bit platforms, pointer is 64 bits where as temporary is only 32 bits*/ #ifdef __crayx1 /* ARMCI_PutS(pbuf,stride_loc,prem,stride_rem,count,ndim-1,proc); */ ngai_puts(buf,pbuf,stride_loc,prem,stride_rem,count,ndim-1,proc, field_off, field_size, size); #else if(nbhandle) { /* ARMCI_NbPutS(pbuf, stride_loc, prem, stride_rem, count, ndim -1, */ /* proc,(armci_hdl_t*)get_armci_nbhandle(nbhandle)); */ ngai_nbputs(buf,pbuf, stride_loc, prem, stride_rem, count, ndim -1, proc,field_off, field_size, size, (armci_hdl_t*)get_armci_nbhandle(nbhandle)); } else { /* do blocking put for local processes. If all processes are remote processes then do blocking put for the last one */ /* if(loop==1) */ /* ARMCI_PutS(pbuf,stride_loc,prem,stride_rem,count,ndim-1,proc); */ ngai_puts(buf,pbuf,stride_loc,prem,stride_rem,count,ndim-1,proc, field_off, field_size, size); /* else { ARMCI_NbPutS(pbuf,stride_loc,prem,stride_rem,count, ndim-1, proc,(armci_hdl_t*)get_armci_nbhandle(&ga_nbhandle)); } */ } #endif } /* evaluate offset for block idx */ jtot = 1; for (j=0; j GA[handle].dims[idx]) bhi[idx] = GA[handle].dims[idx]; } /* check to see if this block overlaps with requested block * defined by lo and hi */ chk = 1; for (j=0; j= lo[j] && blo[j] <= hi[j]) || (bhi[j] >= lo[j] && bhi[j] <= hi[j])); /* check to see if interval represented by lo and hi * falls entirely within interval represented by blo and bhi */ check2 = ((lo[j] >= blo[j] && lo[j] <= bhi[j]) && (hi[j] >= blo[j] && hi[j] <= bhi[j])); if (!check1 && !check2) { chk = 0; } } if (chk) { /* get the patch of block that overlaps requested region */ gam_GetBlockPatch(blo,bhi,lo,hi,plo,phi,ndim); /* evaluate offset within block */ last = ndim - 1; #if COMPACT_SCALAPACK jtot = 1; if (last == 0) ldrem[0] = bhi[0] - blo[0] + 1; l_offset = 0; for (j=0; j 0) { if (proc_index[j] 0) { pinv = PGRP_LIST[p_handle].inv_map_proc_list[pinv]; } prem = GA[handle].ptr[pinv]+l_offset*GA[handle].elemsize; gam_ComputePatchIndex(ndim, lo, plo, ld, &idx_buf); pbuf = size*idx_buf + (char*)buf; gam_ComputeCount(ndim, plo, phi, count); /* scale number of rows by element size */ count[0] *= size; gam_setstride(ndim, size, ld, ldrem, stride_rem, stride_loc); proc = pinv; if(GA_fence_set)fence_array[proc]=1; #ifndef NO_GA_STATS if(proc == GAme){ gam_CountElems(ndim, plo, phi, &elems); GAbytes.putloc += (double)size*elems; } #endif /*casting what ganb_get_armci_handle function returns to armci_hdl is very crucial here as on 64 bit platforms, pointer is 64 bits where as temporary is only 32 bits*/ #ifdef __crayx1 /* ARMCI_PutS(pbuf,stride_loc,prem,stride_rem,count,ndim-1,proc); */ ngai_puts(buf,pbuf,stride_loc,prem,stride_rem,count,ndim-1,proc, field_off, field_size, size); #else if(nbhandle) { /* ARMCI_NbPutS(pbuf, stride_loc, prem, stride_rem, count, ndim -1, */ /* proc,(armci_hdl_t*)get_armci_nbhandle(nbhandle)); */ ngai_nbputs(buf,pbuf, stride_loc, prem, stride_rem, count, ndim -1, proc,field_off, field_size, size, (armci_hdl_t*)get_armci_nbhandle(nbhandle)); } else { /* do blocking put for local processes. If all processes are remote processes then do blocking put for the last one */ /* if(loop==1) */ /* ARMCI_PutS(pbuf,stride_loc,prem,stride_rem,count,ndim-1,proc); */ ngai_puts(buf,pbuf,stride_loc,prem,stride_rem,count,ndim-1,proc, field_off, field_size, size); /* else { ARMCI_NbPutS(pbuf,stride_loc,prem,stride_rem,count, ndim-1, proc,(armci_hdl_t*)get_armci_nbhandle(&ga_nbhandle)); } */ } #endif } /* increment offset to account for all elements on this block */ itmp = 1; for (idx = 0; idx < ndim; idx++) { itmp *= (bhi[idx] - blo[idx] + 1); } offset += itmp; /* increment block indices to get the next block on processor iproc */ index[0] += GA[handle].nblock[0]; for (idx= 0; idx < ndim; idx++) { if (index[idx] >= GA[handle].num_blocks[idx] && idx < ndim-1) { index[idx] = proc_index[idx]; index[idx+1] += GA[handle].nblock[idx+1]; } } } #ifndef __crayx1 } #endif } } } #if !defined(__crayx1) && !defined(DISABLE_NBOPT) if(!nbhandle) nga_wait_internal(&ga_nbhandle); #endif } GA_POP_NAME; #ifdef PROFILE_OLD ga_profile_stop(); #endif } /** * (Non-blocking) Put an N-dimensional patch of data into a Global Array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_nbput = pnga_nbput #endif void pnga_nbput(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, Integer *nbhandle) { ngai_put_common(g_a,lo,hi,buf,ld,0,-1,nbhandle); } /** * (Non-blocking) Put an N-dimensional patch of data into a Global Array and notify the other side with information on another Global Array */ #define HANDLES_OUTSTANDING 100 /* Maximum number of outstanding put/notify handles */ typedef struct { Integer *orighdl; Integer firsthdl; Integer elementhdl; void *elem_copy; } gai_putn_hdl_t; static int putn_handles_initted = 0; static gai_putn_hdl_t putn_handles[HANDLES_OUTSTANDING]; static int putn_check_single_elem(Integer g_a, Integer *lon, Integer *hin) { int ndims, i; ndims = pnga_ndim(g_a); for (i = 0; i < ndims; i++) if (lon[i] != hin[i]) return 0; return 1; } /* putn_check_single_elem */ static int putn_find_empty_slot(void) { int i; for (i = 0; i < HANDLES_OUTSTANDING; i++) if (!putn_handles[i].orighdl) return i; return -1; } /* putn_find_empty_slot */ static int putn_intersect_coords(Integer g_a, Integer *lo, Integer *hi, Integer *ecoords) { int ndims, i; ndims = pnga_ndim(g_a); for (i = 0; i < ndims; i++) if ((ecoords[i] < lo[i]) || (ecoords[i] > hi[i])) return 0; return 1; } /* putn_intersect_coords */ static int putn_verify_element_in_buf(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, Integer *ecoords, void *bufn, Integer elemSize) { int i, ndims; #ifdef HAVE_STDDEF_H ptrdiff_t off = (char *)bufn - (char *)buf; #else Integer off = (char *)bufn - (char *)buf; #endif Integer eoff = 0; off /= elemSize; /* Offset in terms of elements */ ndims = pnga_ndim(g_a); eoff = ecoords[0] - lo[0]; /* Check in Fortran ordering */ for (i = 1; i < ndims; i++) eoff += (ecoords[i] - lo[i]) * ld[i - 1]; return (eoff == (Integer)off); /* Must be the same for a correct notify buffer */ } /* putn_verify_element_in_buf */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_nbput_notify = pnga_nbput_notify #endif void pnga_nbput_notify(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, Integer g_b, Integer *ecoords, void *bufn, Integer *nbhandle) { Integer ldn[MAXDIM] = { 1 }; int pos, intersect; /* Make sure everything has been initialized */ if (!putn_handles_initted) { memset(putn_handles, 0, sizeof(putn_handles)); putn_handles_initted = 1; } pos = putn_find_empty_slot(); if (pos == -1) /* no empty handles available */ pnga_error("Too many outstanding put/notify operations!", 0); putn_handles[pos].orighdl = nbhandle; /* Store original handle for nbwait_notify */ if (g_a == g_b) intersect = putn_intersect_coords(g_a, lo, hi, ecoords); else intersect = 0; if (!intersect) { /* Simpler case */ ngai_put_common(g_a, lo, hi, buf, ld, 0, -1, &putn_handles[pos].firsthdl); ngai_put_common(g_b, ecoords, ecoords, bufn, ldn, 0, -1, &putn_handles[pos].elementhdl); putn_handles[pos].elem_copy = NULL; } else { int ret, i; Integer handle = GA_OFFSET + g_a, size; void *elem_copy; char *elem; size = GA[handle].elemsize; ret = putn_verify_element_in_buf(g_a, lo, hi, buf, ld, ecoords, bufn, size); if (!ret) pnga_error("Intersecting buffers, but notify element is not in buffer!", 0); elem_copy = malloc(size); memcpy(elem_copy, bufn, size); elem = bufn; for (i = 0; i < size; i++) elem[i] += 1; /* Increment each byte by one, safe? */ putn_handles[pos].elem_copy = elem_copy; ngai_put_common(g_a, lo, hi, buf, ld, 0, -1, &putn_handles[pos].firsthdl); ngai_put_common(g_a, ecoords, ecoords, elem_copy, ldn, 0, -1, &putn_handles[pos].elementhdl); } } /* pnga_nbput_notify */ /** * Wait for a non-blocking put/notify to complete */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_nbwait_notify = pnga_nbwait_notify #endif void pnga_nbwait_notify(Integer *nbhandle) { int i; for (i = 0; i < HANDLES_OUTSTANDING; i++) if (putn_handles[i].orighdl == nbhandle) break; if (i >= HANDLES_OUTSTANDING) return; /* Incorrect handle used or maybe wait was called multiple times? */ nga_wait_internal(&putn_handles[i].firsthdl); nga_wait_internal(&putn_handles[i].elementhdl); if (putn_handles[i].elem_copy) { free(putn_handles[i].elem_copy); putn_handles[i].elem_copy = NULL; } putn_handles[i].orighdl = NULL; } /* pnga_nbwait_notify */ /** * Put an N-dimensional patch of data into a Global Array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_put = pnga_put #endif void pnga_put(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld) { ngai_put_common(g_a,lo,hi,buf,ld,0,-1,NULL); } /** * (Non-blocking) Put a field in a an N-dimensional patch of data into a Global Array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_nbput_field = pnga_nbput_field #endif void pnga_nbput_field(Integer g_a, Integer *lo, Integer *hi, Integer foff, Integer fsize, void *buf, Integer *ld, Integer *nbhandle) { ngai_put_common(g_a,lo,hi,buf,ld,foff, fsize, nbhandle); } /** * Put a field in a an N-dimensional patch of data into a Global Array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_put_field = pnga_put_field #endif void pnga_put_field(Integer g_a, Integer *lo, Integer *hi, Integer foff, Integer fsize, void *buf, Integer *ld) { ngai_put_common(g_a,lo,hi,buf,ld,foff, fsize, NULL); } /*\ A common routine called by both non-blocking and blocking GA Get calls. \*/ void ngai_get_common(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, Integer field_off, Integer field_size, Integer *nbhandle) { /* g_a: Global array handle lo[]: Array of lower indices of patch of global array hi[]: Array of upper indices of patch of global array buf[]: Local buffer that array patch will be copied into ld[]: Array of physical ndim-1 dimensions of local buffer */ Integer p, np, handle=GA_OFFSET + g_a; Integer idx, elems, size, p_handle; int proc, ndim, loop, cond; int num_loops=2; /* 1st loop for remote procs; 2nd loop for local procs */ Integer use_blocks; Integer n_rstrctd; Integer *rank_rstrctd; #if defined(__crayx1) || defined(DISABLE_NBOPT) #else Integer ga_nbhandle; int counter=0; #endif int _stride_rem[MAXDIM+1], _stride_loc[MAXDIM+1], _count[MAXDIM+1]; int *stride_rem=&_stride_rem[1], *stride_loc=&_stride_loc[1], *count=&_count[1]; GA_PUSH_NAME("nga_get_common"); ga_check_handleM(g_a, "nga_get_common"); size = GA[handle].elemsize; ndim = GA[handle].ndim; use_blocks = GA[handle].block_flag; p_handle = (Integer)GA[handle].p_handle; n_rstrctd = (Integer)GA[handle].num_rstrctd; rank_rstrctd = GA[handle].rank_rstrctd; /*initial stride portion for field-wise operations*/ _stride_rem[0] = size; _stride_loc[0] = field_size; _count[0] = field_size; if (!use_blocks) { /* Locate the processors containing some portion of the patch specified by lo and hi and return the results in _ga_map, GA_proclist, and np. GA_proclist contains a list of processors containing some portion of the patch, _ga_map contains the lower and upper indices of the portion of the patch held by a given processor, and np contains the total number of processors that contain some portion of the patch. */ if(!pnga_locate_region(g_a, lo, hi, _ga_map, GA_proclist, &np )) ga_RegionError(pnga_ndim(g_a), lo, hi, g_a); /* get total size of patch */ #ifndef NO_GA_STATS gam_CountElems(ndim, lo, hi, &elems); GAbytes.gettot += (double)size*elems; GAstat.numget++; GAstat.numget_procs += np; #endif if(nbhandle)ga_init_nbhandle(nbhandle); #if !defined(__crayx1) && !defined(DISABLE_NBOPT) else ga_init_nbhandle(&ga_nbhandle); #endif #ifdef PROFILE_OLD ga_profile_start((int)handle, (long)size*elems, ndim, lo, hi, ENABLE_PROFILE_GET); #endif gaPermuteProcList(np); #if !defined(__crayx1) && !defined(DISABLE_NBOPT) for(loop=0; loop= 0) { proc = PGRP_LIST[p_handle].inv_map_proc_list[proc]; } #ifdef PERMUTE_PIDS if(GA_Proc_list) proc = GA_inv_Proc_list[proc]; #endif /* check if it is local to SMP */ #if !defined(__crayx1) && !defined(DISABLE_NBOPT) cond = armci_domain_same_id(ARMCI_DOMAIN_SMP,(int)proc); if(loop==0) cond = !cond; if(cond) { #endif /* Find visible portion of patch held by processor p and return the result in plo and phi. Also get actual processor index corresponding to p and store the result in proc. */ gam_GetRangeFromMap(p, ndim, &plo, &phi); proc = (int)GA_proclist[p]; /* get pointer prem to location indexed by plo. Also get leading physical dimensions in memory in ldrem */ if (n_rstrctd == 0) { gam_Location(proc,handle, plo, &prem, ldrem); } else { gam_Location(rank_rstrctd[proc],handle, plo, &prem, ldrem); } /* find the right spot in the user buffer for the point subscripted by plo given that the corner of the user buffer is subscripted by lo */ gam_ComputePatchIndex(ndim, lo, plo, ld, &idx_buf); pbuf = size*idx_buf + (char*)buf; /* compute number of elements in each dimension and store the result in count */ gam_ComputeCount(ndim, plo, phi, count); /* Scale first element in count by element size. The ARMCI_GetS routine uses this convention to figure out memory sizes.*/ count[0] *= size; /* Return strides for memory containing global array on remote processor indexed by proc (stride_rem) and for local buffer buf (stride_loc) */ gam_setstride(ndim, size, ld, ldrem, stride_rem, stride_loc); if (p_handle >= 0) { proc = (int)GA_proclist[p]; /* BJP */ proc = (int)PGRP_LIST[p_handle].inv_map_proc_list[proc]; } #ifdef PERMUTE_PIDS if(GA_Proc_list) proc = GA_inv_Proc_list[proc]; #endif #ifndef NO_GA_STATS if(proc == GAme){ gam_CountElems(ndim, plo, phi, &elems); GAbytes.getloc += (double)size*elems; } #endif #if defined(__crayx1) || defined(DISABLE_NBOPT) /* ARMCI_GetS(prem,stride_rem,pbuf,stride_loc,count,ndim-1,proc); */ ngai_gets(buf,prem,stride_rem,pbuf,stride_loc,count,ndim-1,proc, field_off, field_size, size); #else if(nbhandle) { /* ARMCI_NbGetS(prem, stride_rem, pbuf, stride_loc, count, ndim -1, */ /* proc,(armci_hdl_t*)get_armci_nbhandle(nbhandle)); */ ngai_nbgets(buf,prem, stride_rem, pbuf, stride_loc, count, ndim -1, proc,field_off, field_size, size, (armci_hdl_t*)get_armci_nbhandle(nbhandle)); } else { if((loop==0 && counter==(int)np-1) || loop==1) { /* ARMCI_GetS(prem,stride_rem,pbuf,stride_loc,count,ndim-1,proc); */ ngai_gets(buf,prem,stride_rem,pbuf,stride_loc,count,ndim-1,proc, field_off, field_size, size); } else { ++counter; /* ARMCI_NbGetS(prem,stride_rem,pbuf,stride_loc,count,ndim-1, */ /* proc,(armci_hdl_t*)get_armci_nbhandle(&ga_nbhandle)); */ ngai_nbgets(buf,prem, stride_rem, pbuf, stride_loc, count, ndim -1, proc,field_off, field_size, size, (armci_hdl_t*)get_armci_nbhandle(nbhandle)); } } } /* end if(cond) */ } #endif } #if !defined(__crayx1) && !defined(DISABLE_NBOPT) if(!nbhandle) nga_wait_internal(&ga_nbhandle); #endif } else { Integer offset, l_offset, last, pinv; Integer blo[MAXDIM],bhi[MAXDIM]; Integer plo[MAXDIM],phi[MAXDIM]; Integer idx, j, jtot, chk, iproc; Integer idx_buf, ldrem[MAXDIM]; Integer blk_tot = GA[handle].block_total; int check1, check2; char *pbuf, *prem; /* GA uses simple block cyclic data distribution */ if (GA[handle].block_sl_flag == 0) { for(loop=0; loop= lo[j] && blo[j] <= hi[j]) || (bhi[j] >= lo[j] && bhi[j] <= hi[j])); /* check to see if interval represented by lo and hi * falls entirely within interval represented by blo and bhi */ check2 = ((lo[j] >= blo[j] && lo[j] <= bhi[j]) && (hi[j] >= blo[j] && hi[j] <= bhi[j])); if (!check1 && !check2) { chk = 0; } } if (chk) { /* get the patch of block that overlaps requested region */ gam_GetBlockPatch(blo,bhi,lo,hi,plo,phi,ndim); /* evaluate offset within block */ last = ndim - 1; jtot = 1; if (last == 0) ldrem[0] = bhi[0] - blo[0] + 1; l_offset = 0; for (j=0; j 0) { pinv = PGRP_LIST[p_handle].inv_map_proc_list[pinv]; } prem = GA[handle].ptr[pinv]+l_offset*GA[handle].elemsize; gam_ComputePatchIndex(ndim, lo, plo, ld, &idx_buf); pbuf = size*idx_buf + (char*)buf; gam_ComputeCount(ndim, plo, phi, count); /* scale number of rows by element size */ count[0] *= size; gam_setstride(ndim, size, ld, ldrem, stride_rem, stride_loc); proc = pinv; if(GA_fence_set)fence_array[proc]=1; #ifndef NO_GA_STATS if(proc == GAme){ gam_CountElems(ndim, plo, phi, &elems); GAbytes.putloc += (double)size*elems; } #endif /*casting what ganb_get_armci_handle function returns to armci_hdl is very crucial here as on 64 bit platforms, pointer is 64 bits where as temporary is only 32 bits*/ #ifdef __crayx1 /* ARMCI_GetS(prem,stride_rem,pbuf,stride_loc,count,ndim-1,proc); */ ngai_gets(buf,prem,stride_rem,pbuf,stride_loc,count,ndim-1,proc, field_off, field_size, size); #else if(nbhandle) { /* ARMCI_NbGetS(prem, stride_rem, pbuf, stride_loc, count, ndim -1, */ /* proc,(armci_hdl_t*)get_armci_nbhandle(nbhandle)); */ ngai_nbgets(buf,prem, stride_rem, pbuf, stride_loc, count, ndim -1, proc,field_off, field_size, size, (armci_hdl_t*)get_armci_nbhandle(nbhandle)); } else { /* do blocking put for local processes. If all processes are remote processes then do blocking put for the last one */ /* if(loop==1) */ /* ARMCI_GetS(prem,stride_rem,pbuf,stride_loc,count,ndim-1,proc); */ ngai_gets(buf,prem,stride_rem,pbuf,stride_loc,count,ndim-1,proc, field_off, field_size, size); /* else { ARMCI_NbGetS(prem,stride_rem,pbuf,stride_loc,count, ndim-1, proc,(armci_hdl_t*)get_armci_nbhandle(&ga_nbhandle)); } */ } #endif } /* evaluate size of block idx and use it to increment offset */ jtot = 1; for (j=0; j GA[handle].dims[idx]) bhi[idx] = GA[handle].dims[idx]; } /* check to see if this block overlaps with requested block * defined by lo and hi */ chk = 1; for (j=0; j= lo[j] && blo[j] <= hi[j]) || (bhi[j] >= lo[j] && bhi[j] <= hi[j])); /* check to see if interval represented by lo and hi * falls entirely within interval represented by blo and bhi */ check2 = ((lo[j] >= blo[j] && lo[j] <= bhi[j]) && (hi[j] >= blo[j] && hi[j] <= bhi[j])); if (!check1 && !check2) { chk = 0; } } if (chk) { /* get the patch of block that overlaps requested region */ gam_GetBlockPatch(blo,bhi,lo,hi,plo,phi,ndim); /* evaluate offset within block */ last = ndim - 1; #if COMPACT_SCALAPACK jtot = 1; if (last == 0) ldrem[0] = bhi[0] - blo[0] + 1; l_offset = 0; for (j=0; j 0) { if (proc_index[j] 0) { pinv = PGRP_LIST[p_handle].inv_map_proc_list[pinv]; } prem = GA[handle].ptr[pinv]+l_offset*GA[handle].elemsize; gam_ComputePatchIndex(ndim, lo, plo, ld, &idx_buf); pbuf = size*idx_buf + (char*)buf; gam_ComputeCount(ndim, plo, phi, count); /* scale number of rows by element size */ count[0] *= size; gam_setstride(ndim, size, ld, ldrem, stride_rem, stride_loc); proc = pinv; if(GA_fence_set)fence_array[proc]=1; #ifndef NO_GA_STATS if(proc == GAme){ gam_CountElems(ndim, plo, phi, &elems); GAbytes.putloc += (double)size*elems; } #endif /*casting what ganb_get_armci_handle function returns to armci_hdl is very crucial here as on 64 bit platforms, pointer is 64 bits where as temporary is only 32 bits*/ #ifdef __crayx1 /* ARMCI_GetS(prem,stride_rem,pbuf,stride_loc,count,ndim-1,proc); */ ngai_gets(buf,prem,stride_rem,pbuf,stride_loc,count,ndim-1,proc, field_off, field_size, size); #else if(nbhandle) { /* ARMCI_NbGetS(prem, stride_rem, pbuf, stride_loc, count, ndim -1, */ /* proc,(armci_hdl_t*)get_armci_nbhandle(nbhandle)); */ ngai_nbgets(buf,prem, stride_rem, pbuf, stride_loc, count, ndim -1, proc,field_off, field_size, size, (armci_hdl_t*)get_armci_nbhandle(nbhandle)); } else { /* do blocking put for local processes. If all processes are remote processes then do blocking put for the last one */ /* if(loop==1) */ /* ARMCI_GetS(prem,stride_rem,pbuf,stride_loc,count,ndim-1,proc); */ ngai_gets(buf,prem,stride_rem,pbuf,stride_loc,count,ndim-1,proc, field_off, field_size, size); /* else { ARMCI_NbGetS(prem,stride_rem,pbuf,stride_loc,count, ndim-1, proc,(armci_hdl_t*)get_armci_nbhandle(&ga_nbhandle)); } */ } #endif } #if COMPACT_SCALAPACK /* increment offset to account for all elements on this block */ itmp = 1; for (idx = 0; idx < ndim; idx++) { itmp *= (bhi[idx] - blo[idx] + 1); } offset += itmp; #endif /* increment block indices to get the next block on processor iproc */ index[0] += GA[handle].nblock[0]; for (idx= 0; idx < ndim; idx++) { if (index[idx] >= GA[handle].num_blocks[idx] && idx < ndim-1) { index[idx] = proc_index[idx]; index[idx+1] += GA[handle].nblock[idx+1]; } } } #ifndef __crayx1 } #endif } } } #if !defined(__crayx1) && !defined(DISABLE_NBOPT) if(!nbhandle) nga_wait_internal(&ga_nbhandle); #endif } GA_POP_NAME; #ifdef PROFILE_OLD ga_profile_stop(); #endif } /** * Get an N-dimensional patch of data from a Global Array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_get = pnga_get #endif void pnga_get(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld) { ngai_get_common(g_a,lo,hi,buf,ld,0,-1,(Integer *)NULL); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_nbget = pnga_nbget #endif void pnga_nbget(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, Integer *nbhandle) { ngai_get_common(g_a,lo,hi,buf,ld,0,-1,nbhandle); } /** * Get a field in an N-dimensional patch of data from a Global Array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_get_field = pnga_get_field #endif void pnga_get_field(Integer g_a, Integer *lo, Integer *hi,Integer foff, Integer fsize, void *buf, Integer *ld) { ngai_get_common(g_a,lo,hi,buf,ld,foff,fsize,(Integer *)NULL); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_nbget_field = pnga_nbget_field #endif void pnga_nbget_field(Integer g_a, Integer *lo, Integer *hi,Integer foff, Integer fsize, void *buf, Integer *ld, Integer *nbhandle) { ngai_get_common(g_a,lo,hi,buf,ld,foff,fsize,nbhandle); } #ifdef __crayx1 # pragma _CRI inline ga_get_ # pragma _CRI inline ngai_get_common #endif /** * A common routine called by both non-blocking and blocking GA acc calls. */ void ngai_acc_common(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, void *alpha, Integer *nbhandle) { Integer p, np, handle=GA_OFFSET + g_a; Integer idx, elems, size, type, p_handle, ga_nbhandle; int optype=-1, proc, loop, ndim, cond; int num_loops=2; /* 1st loop for remote procs; 2nd loop for local procs */ Integer use_blocks; Integer n_rstrctd; Integer *rank_rstrctd; GA_PUSH_NAME("nga_acc_common"); ga_check_handleM(g_a, "nga_acc_common"); size = GA[handle].elemsize; type = GA[handle].type; ndim = GA[handle].ndim; use_blocks = GA[handle].block_flag; p_handle = GA[handle].p_handle; n_rstrctd = (Integer)GA[handle].num_rstrctd; rank_rstrctd = GA[handle].rank_rstrctd; if(type==C_DBL) optype= ARMCI_ACC_DBL; else if(type==C_FLOAT) optype= ARMCI_ACC_FLT; else if(type==C_DCPL)optype= ARMCI_ACC_DCP; else if(type==C_SCPL)optype= ARMCI_ACC_CPL; else if(type==C_INT)optype= ARMCI_ACC_INT; else if(type==C_LONG)optype= ARMCI_ACC_LNG; else pnga_error("type not supported",type); if (!use_blocks) { /* Locate the processors containing some portion of the patch specified by lo and hi and return the results in _ga_map, GA_proclist, and np. GA_proclist contains a list of processors containing some portion of the patch, _ga_map contains the lower and upper indices of the portion of the patch held by a given processor, and np contains the total number of processors that contain some portion of the patch. */ if(!pnga_locate_region(g_a, lo, hi, _ga_map, GA_proclist, &np )) ga_RegionError(pnga_ndim(g_a), lo, hi, g_a); #ifndef NO_GA_STATS gam_CountElems(ndim, lo, hi, &elems); GAbytes.acctot += (double)size*elems; GAstat.numacc++; GAstat.numacc_procs += np; #endif if(nbhandle)ga_init_nbhandle(nbhandle); else ga_init_nbhandle(&ga_nbhandle); #ifdef PROFILE_OLD ga_profile_start((int)handle, (long)size*elems, ndim, lo, hi, ENABLE_PROFILE_ACC); #endif gaPermuteProcList(np); for(loop=0; loop= 0) { proc = PGRP_LIST[p_handle].inv_map_proc_list[proc]; } #ifdef PERMUTE_PIDS if(GA_Proc_list) proc = GA_inv_Proc_list[proc]; #endif /* check if it is local to SMP */ cond = armci_domain_same_id(ARMCI_DOMAIN_SMP,(int)proc); if(loop==0) cond = !cond; if(cond) { /* Find visible portion of patch held by processor p and return the result in plo and phi. Also get actual processor index corresponding to p and store the result in proc. */ gam_GetRangeFromMap(p, ndim, &plo, &phi); proc = (int)GA_proclist[p]; /* get pointer prem to location indexed by plo. Also get leading physical dimensions in memory in ldrem */ if (n_rstrctd == 0) { gam_Location(proc,handle, plo, &prem, ldrem); } else { gam_Location(rank_rstrctd[proc],handle, plo, &prem, ldrem); } /* find the right spot in the user buffer */ gam_ComputePatchIndex(ndim,lo, plo, ld, &idx_buf); pbuf = size*idx_buf + (char*)buf; gam_ComputeCount(ndim, plo, phi, count); /* scale number of rows by element size */ count[0] *= size; gam_setstride(ndim, size, ld, ldrem, stride_rem, stride_loc); if (p_handle >= 0) { proc = (int)GA_proclist[p]; /* BJP */ proc = (int)PGRP_LIST[p_handle].inv_map_proc_list[proc]; } if(GA_fence_set)fence_array[proc]=1; #ifdef PERMUTE_PIDS if(GA_Proc_list) proc = GA_inv_Proc_list[proc]; #endif #ifndef NO_GA_STATS if(proc == GAme){ gam_CountElems(ndim, plo, phi, &elems); GAbytes.accloc += (double)size*elems; } #endif if(nbhandle) ARMCI_NbAccS(optype, alpha, pbuf, stride_loc, prem, stride_rem, count, ndim-1, proc, (armci_hdl_t*)get_armci_nbhandle(nbhandle)); else { # if 0 /* disabled, as nbacc fails in quadrics */ if((loop==0 && counter==(int)np-1) || loop==1) ARMCI_AccS(optype, alpha, pbuf, stride_loc, prem, stride_rem, count, ndim-1, proc); else { ++counter; ARMCI_NbAccS(optype, alpha, pbuf, stride_loc, prem, stride_rem, count, ndim-1, proc, (armci_hdl_t*)get_armci_nbhandle(&ga_nbhandle)); } # else ARMCI_AccS(optype, alpha, pbuf, stride_loc, prem, stride_rem, count, ndim-1, proc); # endif } } /* end if(cond) */ } } #if 0 if(!nbhandle) nga_wait_internal(&ga_nbhandle); #endif } else { Integer offset, l_offset, last, pinv; Integer blo[MAXDIM],bhi[MAXDIM]; Integer plo[MAXDIM],phi[MAXDIM]; Integer idx, j, jtot, chk, iproc; Integer idx_buf, ldrem[MAXDIM]; Integer blk_tot = GA[handle].block_total; int check1, check2; int stride_rem[MAXDIM], stride_loc[MAXDIM], count[MAXDIM]; char *pbuf, *prem; /* GA uses simple block cyclic data distribution */ if (GA[handle].block_sl_flag == 0) { for(loop=0; loop= lo[j] && blo[j] <= hi[j]) || (bhi[j] >= lo[j] && bhi[j] <= hi[j])); /* check to see if interval represented by lo and hi * falls entirely within interval represented by blo and bhi */ check2 = ((lo[j] >= blo[j] && lo[j] <= bhi[j]) && (hi[j] >= blo[j] && hi[j] <= bhi[j])); if (!check1 && !check2) { chk = 0; } } if (chk) { /* get the patch of block that overlaps requested region */ gam_GetBlockPatch(blo,bhi,lo,hi,plo,phi,ndim); /* evaluate offset within block */ last = ndim - 1; jtot = 1; if (last == 0) ldrem[0] = bhi[0] - blo[0] + 1; l_offset = 0; for (j=0; j 0) { pinv = PGRP_LIST[p_handle].inv_map_proc_list[pinv]; } prem = GA[handle].ptr[pinv]+l_offset*GA[handle].elemsize; gam_ComputePatchIndex(ndim, lo, plo, ld, &idx_buf); pbuf = size*idx_buf + (char*)buf; gam_ComputeCount(ndim, plo, phi, count); /* scale number of rows by element size */ count[0] *= size; gam_setstride(ndim, size, ld, ldrem, stride_rem, stride_loc); proc = pinv; if(GA_fence_set)fence_array[proc]=1; #ifndef NO_GA_STATS if(proc == GAme){ gam_CountElems(ndim, plo, phi, &elems); GAbytes.putloc += (double)size*elems; } #endif if(nbhandle) ARMCI_NbAccS(optype, alpha, pbuf, stride_loc, prem, stride_rem, count, ndim-1, proc, (armci_hdl_t*)get_armci_nbhandle(nbhandle)); else { # if 0 /* disabled, as nbacc fails in quadrics */ if((loop==0 && counter==(int)np-1) || loop==1) ARMCI_AccS(optype, alpha, pbuf, stride_loc, prem, stride_rem, count, ndim-1, proc); else { ++counter; ARMCI_NbAccS(optype, alpha, pbuf, stride_loc, prem, stride_rem, count, ndim-1, proc, (armci_hdl_t*)get_armci_nbhandle(&ga_nbhandle)); } # else ARMCI_AccS(optype, alpha, pbuf, stride_loc, prem, stride_rem, count, ndim-1, proc); # endif } } /* evaluate offset for block idx */ jtot = 1; for (j=0; j GA[handle].dims[idx]) bhi[idx] = GA[handle].dims[idx]; } /* check to see if this block overlaps with requested block * defined by lo and hi */ chk = 1; for (j=0; j= lo[j] && blo[j] <= hi[j]) || (bhi[j] >= lo[j] && bhi[j] <= hi[j])); /* check to see if interval represented by lo and hi * falls entirely within interval represented by blo and bhi */ check2 = ((lo[j] >= blo[j] && lo[j] <= bhi[j]) && (hi[j] >= blo[j] && hi[j] <= bhi[j])); if (!check1 && !check2) { chk = 0; } } if (chk) { /* get the patch of block that overlaps requested region */ gam_GetBlockPatch(blo,bhi,lo,hi,plo,phi,ndim); /* evaluate offset within block */ last = ndim - 1; #if COMPACT_SCALAPACK jtot = 1; if (last == 0) ldrem[0] = bhi[0] - blo[0] + 1; l_offset = 0; for (j=0; j 0) { if (proc_index[j] 0) { pinv = PGRP_LIST[p_handle].inv_map_proc_list[pinv]; } prem = GA[handle].ptr[pinv]+l_offset*GA[handle].elemsize; gam_ComputePatchIndex(ndim, lo, plo, ld, &idx_buf); pbuf = size*idx_buf + (char*)buf; gam_ComputeCount(ndim, plo, phi, count); /* scale number of rows by element size */ count[0] *= size; gam_setstride(ndim, size, ld, ldrem, stride_rem, stride_loc); proc = pinv; if(GA_fence_set)fence_array[proc]=1; #ifndef NO_GA_STATS if(proc == GAme){ gam_CountElems(ndim, plo, phi, &elems); GAbytes.putloc += (double)size*elems; } #endif if(nbhandle) ARMCI_NbAccS(optype, alpha, pbuf, stride_loc, prem, stride_rem, count, ndim-1, proc, (armci_hdl_t*)get_armci_nbhandle(nbhandle)); else { # if 0 /* disabled, as nbacc fails in quadrics */ if((loop==0 && counter==(int)np-1) || loop==1) ARMCI_AccS(optype, alpha, pbuf, stride_loc, prem, stride_rem, count, ndim-1, proc); else { ++counter; ARMCI_NbAccS(optype, alpha, pbuf, stride_loc, prem, stride_rem, count, ndim-1, proc, (armci_hdl_t*)get_armci_nbhandle(&ga_nbhandle)); } # else ARMCI_AccS(optype, alpha, pbuf, stride_loc, prem, stride_rem, count, ndim-1, proc); # endif } } /* increment offset to account for all elements on this block */ #if COMPACT_SCALAPACK itmp = 1; for (idx = 0; idx < ndim; idx++) { itmp *= (bhi[idx] - blo[idx] + 1); } offset += itmp; #endif /* increment block indices to get the next block on processor iproc */ index[0] += GA[handle].nblock[0]; for (idx= 0; idx < ndim; idx++) { if (index[idx] >= GA[handle].num_blocks[idx] && idx < ndim-1) { index[idx] = proc_index[idx]; index[idx+1] += GA[handle].nblock[idx+1]; } } } #ifndef __crayx1 } #endif } } } #if 0 if(!nbhandle) nga_wait_internal(&ga_nbhandle); #endif } GA_POP_NAME; #ifdef PROFILE_OLD ga_profile_stop(); #endif } /** * Accumulate operation for an N-dimensional patch of a Global Array * g_a += alpha * patch */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_acc = pnga_acc #endif void pnga_acc(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, void *alpha) { ngai_acc_common(g_a,lo,hi,buf,ld,alpha,NULL); } /** * (Non-blocking) Accumulate operation for an N-dimensional patch of a Global Array * g_a += alpha * patch */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_nbacc = pnga_nbacc #endif void pnga_nbacc(Integer g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, void *alpha, Integer *nbhndl) { ngai_acc_common(g_a,lo,hi,buf,ld,alpha,nbhndl); } /** * Return a pointer to local data in a Global Array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_access_ptr = pnga_access_ptr #endif void pnga_access_ptr(Integer g_a, Integer lo[], Integer hi[], void* ptr, Integer ld[]) { char *lptr; Integer handle = GA_OFFSET + g_a; Integer ow,i,p_handle; GA_PUSH_NAME("nga_access_ptr"); p_handle = GA[handle].p_handle; if (!pnga_locate(g_a,lo,&ow)) pnga_error("locate top failed",0); if (p_handle != -1) ow = PGRP_LIST[p_handle].inv_map_proc_list[ow]; if ((armci_domain_id(ARMCI_DOMAIN_SMP, ow) != armci_domain_my_id(ARMCI_DOMAIN_SMP)) && (ow != GAme)) pnga_error("cannot access top of the patch",ow); if (!pnga_locate(g_a,hi, &ow)) pnga_error("locate bottom failed",0); if (p_handle != -1) ow = PGRP_LIST[p_handle].inv_map_proc_list[ow]; if ((armci_domain_id(ARMCI_DOMAIN_SMP, ow) != armci_domain_my_id(ARMCI_DOMAIN_SMP)) && (ow != GAme)) pnga_error("cannot access bottom of the patch",ow); for (i=0; ihi[i]) { ga_RegionError(GA[handle].ndim, lo, hi, g_a); } if (p_handle >= 0) { ow = PGRP_LIST[p_handle].map_proc_list[ow]; } if (GA[handle].num_rstrctd > 0) { ow = GA[handle].rank_rstrctd[ow]; } gam_Location(ow,handle, lo, &lptr, ld); *(char**)ptr = lptr; GA_POP_NAME; } /*\ RETURN A POINTER TO BEGINNING OF LOCAL DATA BLOCK \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_access_block_grid_ptr = pnga_access_block_grid_ptr #endif void pnga_access_block_grid_ptr(Integer g_a, Integer *index, void* ptr, Integer *ld) /* g_a: array handle [input] * index: subscript of a particular block [input] * ptr: pointer to data in block [output] * ld: array of strides for block data [output] */ { char *lptr; Integer handle = GA_OFFSET + g_a; Integer i/*, p_handle*/, offset, factor, inode; Integer ndim; C_Integer *num_blocks, *block_dims; int *proc_grid; Integer *dims; Integer last; Integer proc_index[MAXDIM]; Integer /*blk_size[MAXDIM],*/ blk_num[MAXDIM], blk_dim[MAXDIM], blk_inc[MAXDIM]; Integer blk_ld[MAXDIM],hlf_blk[MAXDIM],blk_jinc; #if COMPACT_SCALAPACK Integer j, lo, hi; Integer lld[MAXDIM], block_count[MAXDIM], loc_block_dims[MAXDIM]; Integer ldims[MAXDIM]; #endif GA_PUSH_NAME("nga_access_block_grid_ptr"); /*p_handle = GA[handle].p_handle;*/ if (!GA[handle].block_sl_flag) { pnga_error("Array is not using ScaLAPACK data distribution",0); } proc_grid = GA[handle].nblock; num_blocks = GA[handle].num_blocks; block_dims = GA[handle].block_dims; dims = GA[handle].dims; ndim = GA[handle].ndim; for (i=0; i= num_blocks[i]) pnga_error("block index outside allowed values",index[i]); } /* find out what processor block is located on */ gam_find_proc_from_sl_indices(handle, inode, index); /* get proc indices of processor that owns block */ gam_find_proc_indices(handle,inode,proc_index) last = ndim-1; /* Find strides of requested block */ #if COMPACT_SCALAPACK for (i=0; i dims[i]) hi = dims[i]; ld[i] = (hi - lo + 1); } #else for (i=0; i 0) { if (proc_index[i] dims[i]) hi = dims[i]; if (i dims[i]) hi = dims[i]; ldims[i] = hi - lo + 1; } } /* Evaluate offset for requested block. This algorithm has only been tested in 2D and is otherwise completely incomprehensible. */ offset = 0; for (i=0; i= nblocks) pnga_error("block index outside allowed values",index); if (GA[handle].block_sl_flag == 0) { offset = 0; inode = index%GAnproc; for (i=inode; i= GAnproc) pnga_error("processor index outside allowed values",index); if (index != GAme) pnga_error("Only get accurate number of elements for processor making request",0); lptr = GA[handle].ptr[index]; *len = GA[handle].size/GA[handle].elemsize; *(char**)ptr = lptr; GA_POP_NAME; } /** * Provide access to a patch of a Global Array using an index */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_access_idx = pnga_access_idx #endif void pnga_access_idx(Integer g_a, Integer lo[], Integer hi[], AccessIndex* index, Integer ld[]) { char *ptr; Integer handle = GA_OFFSET + g_a; Integer ow,i,p_handle; unsigned long elemsize; unsigned long lref=0, lptr; GA_PUSH_NAME("nga_access"); p_handle = GA[handle].p_handle; if(!pnga_locate(g_a,lo,&ow))pnga_error("locate top failed",0); if (p_handle != -1) ow = PGRP_LIST[p_handle].inv_map_proc_list[ow]; if ((armci_domain_id(ARMCI_DOMAIN_SMP, ow) != armci_domain_my_id(ARMCI_DOMAIN_SMP)) && (ow != GAme)) pnga_error("cannot access top of the patch",ow); if(!pnga_locate(g_a,hi, &ow))pnga_error("locate bottom failed",0); if (p_handle != -1) ow = PGRP_LIST[p_handle].inv_map_proc_list[ow]; if ((armci_domain_id(ARMCI_DOMAIN_SMP, ow) != armci_domain_my_id(ARMCI_DOMAIN_SMP)) && (ow != GAme)) pnga_error("cannot access bottom of the patch",ow); for (i=0; ihi[i]) { ga_RegionError(GA[handle].ndim, lo, hi, g_a); } if (p_handle != -1) ow = PGRP_LIST[p_handle].map_proc_list[ow]; gam_Location(ow,handle, lo, &ptr, ld); /* * return patch address as the distance elements from the reference address * * .in Fortran we need only the index to the type array: dbl_mb or int_mb * that are elements of COMMON in the the mafdecls.h include file * .in C we need both the index and the pointer */ elemsize = (unsigned long)GA[handle].elemsize; /* compute index and check if it is correct */ switch (pnga_type_c2f(GA[handle].type)){ case MT_F_DBL: *index = (AccessIndex) ((DoublePrecision*)ptr - DBL_MB); lref = (unsigned long)DBL_MB; break; case MT_F_DCPL: *index = (AccessIndex) ((DoubleComplex*)ptr - DCPL_MB); lref = (unsigned long)DCPL_MB; break; case MT_F_SCPL: *index = (AccessIndex) ((SingleComplex*)ptr - SCPL_MB); lref = (unsigned long)SCPL_MB; break; case MT_F_INT: *index = (AccessIndex) ((Integer*)ptr - INT_MB); lref = (unsigned long)INT_MB; break; case MT_F_REAL: *index = (AccessIndex) ((float*)ptr - FLT_MB); lref = (unsigned long)FLT_MB; break; } #ifdef BYTE_ADDRESSABLE_MEMORY /* check the allignment */ lptr = (unsigned long)ptr; if( lptr%elemsize != lref%elemsize ){ printf("%d: lptr=%lu(%lu) lref=%lu(%lu)\n",(int)GAme,lptr,lptr%elemsize, lref,lref%elemsize); pnga_error("nga_access: MA addressing problem: base address misallignment", handle); } #endif /* adjust index for Fortran addressing */ (*index) ++ ; FLUSH_CACHE; GA_POP_NAME; } /*\ PROVIDE ACCESS TO AN INDIVIDUAL DATA BLOCK OF A GLOBAL ARRAY \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_access_block_idx = pnga_access_block_idx #endif void pnga_access_block_idx(Integer g_a, Integer idx, AccessIndex* index, Integer *ld) { char *ptr; Integer handle = GA_OFFSET + g_a; Integer /*p_handle,*/ iblock; unsigned long elemsize; unsigned long lref=0, lptr; GA_PUSH_NAME("nga_access_block"); /*p_handle = GA[handle].p_handle;*/ iblock = idx; if (iblock < 0 || iblock >= GA[handle].block_total) pnga_error("block index outside allowed values",iblock); pnga_access_block_ptr(g_a,iblock,&ptr,ld); /* * return patch address as the distance elements from the reference address * * .in Fortran we need only the index to the type array: dbl_mb or int_mb * that are elements of COMMON in the the mafdecls.h include file * .in C we need both the index and the pointer */ elemsize = (unsigned long)GA[handle].elemsize; /* compute index and check if it is correct */ switch (pnga_type_c2f(GA[handle].type)){ case MT_F_DBL: *index = (AccessIndex) ((DoublePrecision*)ptr - DBL_MB); lref = (unsigned long)DBL_MB; break; case MT_F_DCPL: *index = (AccessIndex) ((DoubleComplex*)ptr - DCPL_MB); lref = (unsigned long)DCPL_MB; break; case MT_F_SCPL: *index = (AccessIndex) ((SingleComplex*)ptr - SCPL_MB); lref = (unsigned long)SCPL_MB; break; case MT_F_INT: *index = (AccessIndex) ((Integer*)ptr - INT_MB); lref = (unsigned long)INT_MB; break; case MT_F_REAL: *index = (AccessIndex) ((float*)ptr - FLT_MB); lref = (unsigned long)FLT_MB; break; } #ifdef BYTE_ADDRESSABLE_MEMORY /* check the allignment */ lptr = (unsigned long)ptr; if( lptr%elemsize != lref%elemsize ){ printf("%d: lptr=%lu(%lu) lref=%lu(%lu)\n",(int)GAme,lptr,lptr%elemsize, lref,lref%elemsize); pnga_error("nga_access: MA addressing problem: base address misallignment", handle); } #endif /* adjust index for Fortran addressing */ (*index) ++ ; FLUSH_CACHE; GA_POP_NAME; } /** * Provide access to an individual data block of a Global Array * with a SCALAPACK type block-cyclic data distribution */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_access_block_grid_idx = pnga_access_block_grid_idx #endif void pnga_access_block_grid_idx(Integer g_a, Integer* subscript, AccessIndex *index, Integer *ld) { char *ptr; Integer handle = GA_OFFSET + g_a; Integer i,ndim/*,p_handle*/; unsigned long elemsize; unsigned long lref=0, lptr; GA_PUSH_NAME("nga_access_block_grid"); /*p_handle = GA[handle].p_handle;*/ ndim = GA[handle].ndim; for (i=0; i= GA[handle].num_blocks[i]) pnga_error("index outside allowed values",subscript[i]); pnga_access_block_grid_ptr(g_a,subscript,&ptr,ld); /* * return patch address as the distance elements from the reference address * * .in Fortran we need only the index to the type array: dbl_mb or int_mb * that are elements of COMMON in the the mafdecls.h include file * .in C we need both the index and the pointer */ elemsize = (unsigned long)GA[handle].elemsize; /* compute index and check if it is correct */ switch (pnga_type_c2f(GA[handle].type)){ case MT_F_DBL: *index = (AccessIndex) ((DoublePrecision*)ptr - DBL_MB); lref = (unsigned long)DBL_MB; break; case MT_F_DCPL: *index = (AccessIndex) ((DoubleComplex*)ptr - DCPL_MB); lref = (unsigned long)DCPL_MB; break; case MT_F_SCPL: *index = (AccessIndex) ((SingleComplex*)ptr - SCPL_MB); lref = (unsigned long)SCPL_MB; break; case MT_F_INT: *index = (AccessIndex) ((Integer*)ptr - INT_MB); lref = (unsigned long)INT_MB; break; case MT_F_REAL: *index = (AccessIndex) ((float*)ptr - FLT_MB); lref = (unsigned long)FLT_MB; break; } #ifdef BYTE_ADDRESSABLE_MEMORY /* check the allignment */ lptr = (unsigned long)ptr; if( lptr%elemsize != lref%elemsize ){ printf("%d: lptr=%lu(%lu) lref=%lu(%lu)\n",(int)GAme,lptr,lptr%elemsize, lref,lref%elemsize); pnga_error("nga_access: MA addressing problem: base address misallignment", handle); } #endif /* adjust index for Fortran addressing */ (*index) ++ ; FLUSH_CACHE; GA_POP_NAME; } /*\ PROVIDE ACCESS TO A PATCH OF A GLOBAL ARRAY \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_access_block_segment_idx = pnga_access_block_segment_idx #endif void pnga_access_block_segment_idx(Integer g_a, Integer proc, AccessIndex* index, Integer *len) { char *ptr; Integer handle = GA_OFFSET + g_a; /*Integer p_handle;*/ unsigned long elemsize; unsigned long lref=0, lptr; GA_PUSH_NAME("nga_access_block_segment"); /*p_handle = GA[handle].p_handle;*/ /* * return patch address as the distance elements from the reference address * * .in Fortran we need only the index to the type array: dbl_mb or int_mb * that are elements of COMMON in the the mafdecls.h include file * .in C we need both the index and the pointer */ pnga_access_block_segment_ptr(g_a, proc, &ptr, len); elemsize = (unsigned long)GA[handle].elemsize; /* compute index and check if it is correct */ switch (pnga_type_c2f(GA[handle].type)){ case MT_F_DBL: *index = (AccessIndex) ((DoublePrecision*)ptr - DBL_MB); lref = (unsigned long)DBL_MB; break; case MT_F_DCPL: *index = (AccessIndex) ((DoubleComplex*)ptr - DCPL_MB); lref = (unsigned long)DCPL_MB; break; case MT_F_SCPL: *index = (AccessIndex) ((SingleComplex*)ptr - SCPL_MB); lref = (unsigned long)SCPL_MB; break; case MT_F_INT: *index = (AccessIndex) ((Integer*)ptr - INT_MB); lref = (unsigned long)INT_MB; break; case MT_F_REAL: *index = (AccessIndex) ((float*)ptr - FLT_MB); lref = (unsigned long)FLT_MB; break; } #ifdef BYTE_ADDRESSABLE_MEMORY /* check the allignment */ lptr = (unsigned long)ptr; if( lptr%elemsize != lref%elemsize ){ printf("%d: lptr=%lu(%lu) lref=%lu(%lu)\n",(int)GAme,lptr,lptr%elemsize, lref,lref%elemsize); pnga_error("nga_access_block_segment: MA addressing problem: base address misallignment", handle); } #endif /* adjust index for Fortran addressing */ (*index) ++ ; FLUSH_CACHE; GA_POP_NAME; } /** * Release access to a patch of a Global Array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_release = pnga_release #endif void pnga_release(Integer g_a, Integer *lo, Integer *hi) {} /** * Release access and update a patch of a Global Array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_release_update = pnga_release_update #endif void pnga_release_update(Integer g_a, Integer *lo, Integer *hi) {} /** * Release access to a block in a block-cyclic Global Array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_release_block = pnga_release_block #endif void pnga_release_block(Integer g_a, Integer iblock) { /* Integer i; Integer handle = GA_OFFSET + g_a; for (i=0; i 0) iproc = GA[handle].rank_rstrctd[iproc]; gaShmemLocation(iproc, g_a, ilo, jlo, &ptr_ref, &ldp); } else { /* Integer lo[2]; lo[0] = ilo; lo[1] = jlo; */ pnga_access_block_ptr(g_a, iproc, &ptr_ref, &ldp); pnga_release_block(g_a, iproc); if (GA[handle].block_sl_flag == 0) { proc = proc%pnga_nnodes(); } else { Integer index[2]; gam_find_block_indices(handle, proc, index); index[0] = index[0]%GA[handle].nblock[0]; index[1] = index[1]%GA[handle].nblock[1]; gam_find_proc_from_sl_indices(handle,proc,index); } } type = GA[handle].type; item_size = GAsizeofM(type); ptr_src = gai_malloc((int)nv*2*sizeof(void*)); if(ptr_src==NULL)pnga_error("gai_malloc failed",nv); ptr_dst=ptr_src+ nv; for(k=0; k< nv; k++){ if(i[k] < ilo || i[k] > ihi || j[k] < jlo || j[k] > jhi){ char err_string[ERR_STR_LEN]; sprintf(err_string,"proc=%d invalid i/j=(%ld,%ld)>< [%ld:%ld,%ld:%ld]", (int)proc, (long)i[k], (long)j[k], (long)ilo, (long)ihi, (long)jlo, (long)jhi); pnga_error(err_string,g_a); } offset = (j[k] - jlo)* ldp + i[k] - ilo; ptr_dst[k] = ptr_ref + item_size * offset; ptr_src[k] = ((char*)v) + k*item_size; } desc.bytes = (int)item_size; desc.src_ptr_array = ptr_src; desc.dst_ptr_array = ptr_dst; desc.ptr_array_len = (int)nv; if(GA_fence_set)fence_array[proc]=1; #ifdef PERMUTE_PIDS if(GA_Proc_list) proc = GA_inv_Proc_list[proc]; #endif if (p_handle >= 0) { proc = PGRP_LIST[p_handle].inv_map_proc_list[proc]; } if(alpha != NULL) { int optype=-1; if(type==C_DBL) optype= ARMCI_ACC_DBL; else if(type==C_DCPL)optype= ARMCI_ACC_DCP; else if(type==C_SCPL)optype= ARMCI_ACC_CPL; else if(type==C_INT)optype= ARMCI_ACC_INT; else if(type==C_LONG)optype= ARMCI_ACC_LNG; else if(type==C_FLOAT)optype= ARMCI_ACC_FLT; else pnga_error("type not supported",type); rc= ARMCI_AccV(optype, alpha, &desc, 1, (int)proc); } if(rc) pnga_error("scatter/_acc failed in armci",rc); gai_free(ptr_src); GA_POP_NAME; } /** * Scatter nv elements of v into a Global Array at locations specified * by arrays i and j */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_scatter2d = pnga_scatter2d #endif void pnga_scatter2d(Integer g_a, void *v, Integer *i, Integer *j, Integer nv) { register Integer k; Integer kk; Integer item_size; Integer proc, type=GA[GA_OFFSET + g_a].type; Integer nproc, p_handle, iproc; Integer subscrpt[2]; Integer *aproc, naproc; /* active processes and numbers */ Integer *map; /* map the active processes to allocated space */ char *buf1, *buf2; Integer handle = g_a + GA_OFFSET; Integer *count; /* counters for each process */ Integer *nelem; /* number of elements for each process */ /* source and destination pointers for each process */ void ***ptr_src, ***ptr_dst; void **ptr_org; /* the entire pointer array */ armci_giov_t desc; Integer *ilo, *ihi, *jlo, *jhi, *ldp, *owner; Integer lo[2], hi[2]; char **ptr_ref; int use_blocks; Integer num_blocks=0; if (nv < 1) return; ga_check_handleM(g_a, "ga_scatter"); GA_PUSH_NAME("ga_scatter"); GAstat.numsca++; /* determine how many processors are associated with array */ p_handle = GA[handle].p_handle; if (p_handle < 0) { nproc = GAnproc; if (GA[handle].num_rstrctd > 0) { nproc = GA[handle].num_rstrctd; } } else { nproc = PGRP_LIST[p_handle].map_nproc; } use_blocks = GA[handle].block_flag; /* allocate temp memory */ if (!use_blocks) { buf1 = gai_malloc((int) (nproc *4 +nv)* (sizeof(Integer))); if(buf1 == NULL) pnga_error("gai_malloc failed", 3*nproc); } else { num_blocks = GA[handle].block_total; buf1 = gai_malloc((int) (num_blocks *4 +nv)* (sizeof(Integer))); if(buf1 == NULL) pnga_error("gai_malloc failed", 3*num_blocks); } owner = (Integer *)buf1; count = owner+ nv; if (!use_blocks) { nelem = count + nproc; aproc = count + 2 * nproc; map = count + 3 * nproc; } else { nelem = count + num_blocks; aproc = count + 2 * num_blocks; map = count + 3 * num_blocks; } /* initialize the counters and nelem */ if (!use_blocks) { for(kk=0; kk 0) { aproc[naproc] = k; map[k] = naproc; naproc ++; } } else { for(k=0; k 0) { aproc[naproc] = k; map[k] = naproc; naproc ++; } } GAstat.numsca_procs += naproc; buf2 = gai_malloc((int)(2*naproc*sizeof(void **) + 2*nv*sizeof(void *) + 5*naproc*sizeof(Integer) + naproc*sizeof(char*))); if(buf2 == NULL) pnga_error("gai_malloc failed", naproc); ptr_src = (void ***)buf2; ptr_dst = (void ***)(buf2 + naproc*sizeof(void **)); ptr_org = (void **)(buf2 + 2*naproc*sizeof(void **)); ptr_ref = (char **)(buf2+2*naproc*sizeof(void **)+2*nv*sizeof(void *)); ilo = (Integer *)(((char*)ptr_ref) + naproc*sizeof(char*)); ihi = ilo + naproc; jlo = ihi + naproc; jhi = jlo + naproc; ldp = jhi + naproc; if (!use_blocks) { for(kk=0; kk 0) iproc = GA[handle].rstrctd_list[iproc]; pnga_distribution(g_a, iproc, lo, hi); ilo[kk] = lo[0]; jlo[kk] = lo[1]; ihi[kk] = hi[0]; jhi[kk] = hi[1]; /* get address of the first element owned by proc */ gaShmemLocation(aproc[kk], g_a, ilo[kk], jlo[kk], &(ptr_ref[kk]), &(ldp[kk])); } } else { for(kk=0; kk 0) proc = GA[handle].rank_rstrctd[owner[k]]; this_count = count[proc]; count[proc]++; proc = map[proc]; ptr_src[proc][this_count] = ((char*)v) + k * item_size; if(i[k] < ilo[proc] || i[k] > ihi[proc] || j[k] < jlo[proc] || j[k] > jhi[proc]){ char err_string[ERR_STR_LEN]; sprintf(err_string,"proc=%d invalid i/j=(%ld,%ld)><[%ld:%ld,%ld:%ld]", (int)proc, (long)i[k], (long)j[k], (long)ilo[proc], (long)ihi[proc], (long)jlo[proc], (long)jhi[proc]); pnga_error(err_string, g_a); } ptr_dst[proc][this_count] = ptr_ref[proc] + item_size * ((j[k] - jlo[proc])* ldp[proc] + i[k] - ilo[proc]); } /* source and destination pointers are ready for all processes */ if (!use_blocks) { for(k=0; k 0) iproc = GA[handle].rstrctd_list[iproc]; } else { iproc = PGRP_LIST[p_handle].inv_map_proc_list[aproc[k]]; } rc = ARMCI_PutV(&desc, 1, (int)iproc); if(rc) pnga_error("scatter failed in armci",rc); } } else { if (GA[handle].block_sl_flag == 0) { for(k=0; k= 0) { iproc = PGRP_LIST[p_handle].inv_map_proc_list[iproc]; } rc = ARMCI_PutV(&desc, 1, (int)iproc); if(rc) pnga_error("scatter failed in armci",rc); } } else { Integer index[MAXDIM]; for(k=0; k= 0) { iproc = PGRP_LIST[p_handle].inv_map_proc_list[iproc]; } rc = ARMCI_PutV(&desc, 1, (int)iproc); if(rc) pnga_error("scatter failed in armci",rc); } } } gai_free(buf2); gai_free(buf1); GA_POP_NAME; } /** * Add elements of v to contents at random locations in Global Array * specified by vectors i and j */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_scatter_acc2d = pnga_scatter_acc2d #endif void pnga_scatter_acc2d(g_a, v, i, j, nv, alpha) Integer g_a, nv, *i, *j; void *v, *alpha; { register Integer k; Integer item_size; Integer first, nelem, proc, type=GA[GA_OFFSET + g_a].type; Integer *int_ptr; Integer subscrpt[2]; if (nv < 1) return; ga_check_handleM(g_a, "ga_scatter_acc"); GA_PUSH_NAME("ga_scatter_acc"); GAstat.numsca++; int_ptr = (Integer*) ga_malloc(nv, MT_F_INT, "ga_scatter_acc--p"); /* find proc that owns the (i,j) element; store it in temp: int_ptr */ for(k=0; k< nv; k++) { subscrpt[0] = *(i+k); subscrpt[1] = *(j+k); if(! pnga_locate(g_a, subscrpt, int_ptr+k)){ char err_string[ERR_STR_LEN]; sprintf(err_string,"invalid i/j=(%ld,%ld)", (long)i[k], (long)j[k]); pnga_error(err_string,g_a); } } /* determine limit for message size -- v,i, & j will travel together */ item_size = GAsizeofM(type); GAbytes.scatot += (double)item_size*nv ; /* Sort the entries by processor */ ga_sort_scat(&nv, v, i, j, int_ptr, type ); /* go through the list again executing scatter for each processor */ first = 0; do { proc = int_ptr[first]; nelem = 0; /* count entries for proc from "first" to last */ for(k=first; k< nv; k++){ if(proc == int_ptr[k]) nelem++; else break; } if(proc == GAme){ GAbytes.scaloc += (double)item_size* nelem ; } gai_scatter_acc_local(g_a, ((char*)v)+item_size*first, i+first, j+first, nelem, alpha, proc); first += nelem; }while (first< nv); ga_free(int_ptr); GA_POP_NAME; } #define SCATTER -99 #define GATHER -98 #define SCATTER_ACC -97 /*\ GATHER OPERATION elements from the global array into v \*/ void gai_gatscat(int op, Integer g_a, void* v, Integer subscript[], Integer nv, double *locbytes, double* totbytes, void *alpha) { Integer k, handle=g_a+GA_OFFSET; int ndim, item_size, type; Integer *proc; Integer nproc, p_handle, iproc; Integer *aproc, naproc; /* active processes and numbers */ Integer *map; /* map the active processes to allocated space */ char *buf1, *buf2; Integer *count; /* counters for each process */ Integer *nelem; /* number of elements for each process */ /* source and destination pointers for each process */ void ***ptr_src, ***ptr_dst; void **ptr_org; /* the entire pointer array */ armci_giov_t desc; int use_blocks; Integer num_blocks=0; GA_PUSH_NAME("gai_gatscat"); proc=(Integer *)ga_malloc(nv, MT_F_INT, "ga_gat-p"); ndim = GA[handle].ndim; type = GA[handle].type; item_size = GA[handle].elemsize; *totbytes += (double)item_size*nv; /* determine how many processors are associated with array */ p_handle = GA[handle].p_handle; if (p_handle < 0) { nproc = GAnproc; if (GA[handle].num_rstrctd > 0) nproc = GA[handle].num_rstrctd; } else { nproc = PGRP_LIST[p_handle].map_nproc; } use_blocks = GA[handle].block_flag; /* allocate temp memory */ if (!use_blocks) { buf1 = gai_malloc((int) nproc * 4 * (sizeof(Integer))); if(buf1 == NULL) pnga_error("gai_malloc failed", 3*nproc); } else { num_blocks = GA[handle].block_total; buf1 = gai_malloc((int) num_blocks * 4 * (sizeof(Integer))); if(buf1 == NULL) pnga_error("gai_malloc failed", 3*num_blocks); } count = (Integer *)buf1; if (!use_blocks) { nelem = (Integer *)(buf1 + nproc * sizeof(Integer)); aproc = (Integer *)(buf1 + 2 * nproc * sizeof(Integer)); map = (Integer *)(buf1 + 3 * nproc * sizeof(Integer)); } else { num_blocks = GA[handle].block_total; nelem = (Integer *)(buf1 + num_blocks * sizeof(Integer)); aproc = (Integer *)(buf1 + 2 * num_blocks * sizeof(Integer)); map = (Integer *)(buf1 + 3 * num_blocks * sizeof(Integer)); } /* initialize the counters and nelem */ if (!use_blocks) { for(k=0; k 0) { aproc[naproc] = k; map[k] = naproc; naproc ++; } } else { for(k=0; k 0) { aproc[naproc] = k; map[k] = naproc; naproc ++; } } buf2 = gai_malloc((int)(2*naproc*sizeof(void **) + 2*nv*sizeof(void *))); if(buf2 == NULL) pnga_error("gai_malloc failed", 2*naproc); ptr_src = (void ***)buf2; ptr_dst = (void ***)(buf2 + naproc * sizeof(void **)); ptr_org = (void **)(buf2 + 2 * naproc * sizeof(void **)); /* set the pointers as * P0 P1 P0 P1 * ptr_src[0] ptr_src[1] ... ptr_dst[0] ptr_dst[1] ... * \ \ \ \ * ptr_org |-------------------------------|---------------------------| * | nv | nv | * | nelem[0] | nelem[1] |... | nelem[0] | nelem[1] |... */ ptr_src[0] = ptr_org; ptr_dst[0] = ptr_org + nv; for(k=1; k 0) iproc = GA[handle].rank_rstrctd[iproc]; ptr_dst[map[iproc]][count[iproc]] = ((char*)v) + k * item_size; if (p_handle != 0) { gam_Loc_ptr(iproc, handle, (subscript+k*ndim), ptr_src[map[iproc]]+count[iproc]); } else { gam_Loc_ptr(proc[k], handle, (subscript+k*ndim), ptr_src[map[iproc]]+count[iproc]); } count[iproc]++; } } else { Integer lo[MAXDIM], hi[MAXDIM], ld[MAXDIM]; Integer j, jtot, last, offset; for(k=0; k 0) iproc = GA[handle].rstrctd_list[iproc]; } else { iproc = PGRP_LIST[p_handle].inv_map_proc_list[aproc[k]]; } rc=ARMCI_GetV(&desc, 1, (int)iproc); if(rc) pnga_error("gather failed in armci",rc); } } else { if (GA[handle].block_sl_flag == 0) { for(k=0; k= 0) { iproc = PGRP_LIST[p_handle].inv_map_proc_list[iproc]; } rc=ARMCI_GetV(&desc, 1, (int)iproc); if(rc) pnga_error("gather failed in armci",rc); } } else { Integer j, index[MAXDIM]; for(k=0; k= 0) { iproc = PGRP_LIST[p_handle].inv_map_proc_list[iproc]; } rc=ARMCI_GetV(&desc, 1, (int)iproc); if(rc) pnga_error("gather failed in armci",rc); } } } GAstat.numgat_procs += naproc; break; case SCATTER: /* go through all the elements * for process 0: ptr_src[0][0, 1, ...] = v + offset0... * ptr_dst[0][0, 1, ...] = subscript + offset0... * for process 1: ptr_src[1][...] ... * ptr_dst[1][...] ... */ if (!use_blocks) { for(k=0; k 0) iproc = GA[handle].rank_rstrctd[iproc]; ptr_src[map[iproc]][count[iproc]] = ((char*)v) + k * item_size; if (p_handle != 0) { gam_Loc_ptr(iproc, handle, (subscript+k*ndim), ptr_dst[map[iproc]]+count[iproc]); } else { gam_Loc_ptr(proc[k], handle, (subscript+k*ndim), ptr_dst[map[iproc]]+count[iproc]); } count[iproc]++; } } else { Integer lo[MAXDIM], hi[MAXDIM], ld[MAXDIM]; Integer j, jtot, last, offset; for(k=0; k 0) iproc = GA[handle].rstrctd_list[iproc]; } else { iproc = PGRP_LIST[p_handle].inv_map_proc_list[aproc[k]]; } if(GA_fence_set) fence_array[iproc]=1; rc=ARMCI_PutV(&desc, 1, (int)iproc); if(rc) pnga_error("scatter failed in armci",rc); } } else { if (GA[handle].block_sl_flag == 0) { for(k=0; k= 0) { iproc = PGRP_LIST[p_handle].inv_map_proc_list[iproc]; } if(GA_fence_set) fence_array[iproc]=1; rc=ARMCI_PutV(&desc, 1, (int)iproc); if(rc) pnga_error("scatter failed in armci",rc); } } else { Integer j, index[MAXDIM]; for(k=0; k= 0) { iproc = PGRP_LIST[p_handle].inv_map_proc_list[iproc]; } if(GA_fence_set) fence_array[iproc]=1; rc=ARMCI_PutV(&desc, 1, (int)iproc); if(rc) pnga_error("scatter failed in armci",rc); } } } GAstat.numsca_procs += naproc; break; case SCATTER_ACC: /* go through all the elements * for process 0: ptr_src[0][0, 1, ...] = v + offset0... * ptr_dst[0][0, 1, ...] = subscript + offset0... * for process 1: ptr_src[1][...] ... * ptr_dst[1][...] ... */ if (!use_blocks) { for(k=0; k 0) iproc = GA[handle].rank_rstrctd[iproc]; ptr_src[map[iproc]][count[iproc]] = ((char*)v) + k * item_size; if (p_handle != 0) { gam_Loc_ptr(iproc, handle, (subscript+k*ndim), ptr_dst[map[iproc]]+count[iproc]); } else { gam_Loc_ptr(proc[k], handle, (subscript+k*ndim), ptr_dst[map[iproc]]+count[iproc]); } count[iproc]++; } } else { Integer lo[MAXDIM], hi[MAXDIM], ld[MAXDIM]; Integer j, jtot, last, offset; for(k=0; k 0) iproc = GA[handle].rstrctd_list[iproc]; } else { iproc = PGRP_LIST[p_handle].inv_map_proc_list[aproc[k]]; } if(GA_fence_set) fence_array[iproc]=1; if(alpha != NULL) { int optype=-1; if(type==C_DBL) optype= ARMCI_ACC_DBL; else if(type==C_DCPL)optype= ARMCI_ACC_DCP; else if(type==C_SCPL)optype= ARMCI_ACC_CPL; else if(type==C_INT)optype= ARMCI_ACC_INT; else if(type==C_LONG)optype= ARMCI_ACC_LNG; else if(type==C_FLOAT)optype= ARMCI_ACC_FLT; else pnga_error("type not supported",type); rc= ARMCI_AccV(optype, alpha, &desc, 1, (int)iproc); } if(rc) pnga_error("scatter_acc failed in armci",rc); } } else { if (GA[handle].block_sl_flag == 0) { for(k=0; k= 0) { iproc = PGRP_LIST[p_handle].inv_map_proc_list[iproc]; } if(GA_fence_set) fence_array[iproc]=1; if(alpha != NULL) { int optype=-1; if(type==C_DBL) optype= ARMCI_ACC_DBL; else if(type==C_DCPL)optype= ARMCI_ACC_DCP; else if(type==C_SCPL)optype= ARMCI_ACC_CPL; else if(type==C_INT)optype= ARMCI_ACC_INT; else if(type==C_LONG)optype= ARMCI_ACC_LNG; else if(type==C_FLOAT)optype= ARMCI_ACC_FLT; else pnga_error("type not supported",type); rc= ARMCI_AccV(optype, alpha, &desc, 1, (int)iproc); } if(rc) pnga_error("scatter_acc failed in armci",rc); } } else { Integer j, index[MAXDIM]; for(k=0; k= 0) { iproc = PGRP_LIST[p_handle].inv_map_proc_list[iproc]; } if(GA_fence_set) fence_array[iproc]=1; if(alpha != NULL) { int optype=-1; if(type==C_DBL) optype= ARMCI_ACC_DBL; else if(type==C_DCPL)optype= ARMCI_ACC_DCP; else if(type==C_SCPL)optype= ARMCI_ACC_CPL; else if(type==C_INT)optype= ARMCI_ACC_INT; else if(type==C_LONG)optype= ARMCI_ACC_LNG; else if(type==C_FLOAT)optype= ARMCI_ACC_FLT; else pnga_error("type not supported",type); rc= ARMCI_AccV(optype, alpha, &desc, 1, (int)iproc); } if(rc) pnga_error("scatter_acc failed in armci",rc); } } } break; default: pnga_error("operation not supported",op); } gai_free(buf2); gai_free(buf1); ga_free(proc); GA_POP_NAME; } /** * Preallocate data for internal linked-list arrays for gather/scatter calls. * @param nelems: the maximum number of elements that will be moved in * gather/scatter call using these arrays. */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_alloc_gatscat_buf = pnga_alloc_gatscat_buf #endif void pnga_alloc_gatscat_buf(Integer nelems) { Integer nprocs = pnga_nnodes(); if (GA_prealloc_gatscat) pnga_error("Gather/scatter buffers already allocated",nelems); GA_prealloc_gatscat = nelems; GA_header =(Integer *)ga_malloc(nprocs, MT_F_INT, "ga_gat_header"); GA_list =(Integer *)ga_malloc(nelems, MT_F_INT, "ga_gat_list"); GA_elems =(Integer *)ga_malloc(nprocs, MT_F_INT, "ga_gat_nelems"); } /** * Free up preallocate data for internal linked-list arrays for gather/scatter calls. */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_free_gatscat_buf = pnga_free_gatscat_buf #endif void pnga_free_gatscat_buf() { if (!GA_prealloc_gatscat) pnga_error("Gather/scatter buffers not allocated",0); GA_prealloc_gatscat = 0; ga_free(GA_elems); ga_free(GA_list); ga_free(GA_header); } #define gam_c2f_index(index_c, index_f, ndim) \ { \ Integer _i; \ for (_i = 0; _i < (ndim); _i++) { \ index_f[_i] = (Integer)(index_c[(ndim)-1-_i]+1); \ } \ } /*\ GATHER OPERATION elements from the global array into v \*/ void gai_gatscat_new(int op, Integer g_a, void* v, void *subscript, Integer c_flag, Integer nv, double *locbytes, double* totbytes, void *alpha) { Integer handle=g_a+GA_OFFSET; int ndim, i, j, k, type, item_size; Integer idx, p_handle, num_rstrctd; Integer *proc; Integer nprocs, me, iproc, tproc, index[MAXDIM]; Integer lo[MAXDIM], hi[MAXDIM], ld[MAXDIM-1]; Integer jtot, last, offset; Integer *subscript_ptr; Integer *header, *list, *nelems; char *buf; void **ptr_rem, **ptr_loc; int rc, maxlen, use_blocks, use_sl_blocks; int *nblock; armci_giov_t desc; GA_PUSH_NAME("gai_gatscat_new"); me = pnga_nodeid(); num_rstrctd = GA[handle].num_rstrctd; use_blocks = GA[handle].block_flag; use_sl_blocks = GA[handle].block_sl_flag; nblock = GA[handle].nblock; /* determine how many processors are associated with array */ p_handle = GA[handle].p_handle; if (p_handle < 0) { nprocs = GAnproc; if (num_rstrctd > 0) nprocs = num_rstrctd; } else { nprocs = PGRP_LIST[p_handle].map_nproc; } if (!GA_prealloc_gatscat) { header =(Integer *)ga_malloc(nprocs, MT_F_INT, "ga_gat_header"); list =(Integer *)ga_malloc(nv, MT_F_INT, "ga_gat_list"); nelems =(Integer *)ga_malloc(nprocs, MT_F_INT, "ga_gat_nelems"); } else { if (GA_prealloc_gatscat < nv) pnga_error("Gather/scatter vector exceeds allocation length ", GA_prealloc_gatscat); header = (Integer*)GA_header; list = (Integer*)GA_list; nelems = (Integer*)GA_elems; } ndim = GA[handle].ndim; type = GA[handle].type; item_size = GA[handle].elemsize; *totbytes = item_size * nv; /* Initialize linked list data structures */ for (i=0; i 0) idx = GA[handle].rank_rstrctd[idx]; /* map from block to processor, if necessary */ if (use_blocks) { if (use_sl_blocks == 0) { idx = idx%nprocs; } else { gam_find_block_indices(handle,idx,index); for (j=0; j 0) { /* loop through linked list to find all data elements associated with * the remote processor iproc */ idx = header[iproc]; j = 0; while (idx > -1) { if (c_flag) { gam_c2f_index(((int**)subscript)[idx], index, ndim); subscript_ptr = index; } else { subscript_ptr = ((Integer*)subscript)+idx*ndim; } if (!use_blocks) { /* gam_Loc_ptr modifies the value of the processor variable for * restricted arrays or processor groups, so make a temporary copy */ tproc = iproc; gam_Loc_ptr(tproc, handle, (subscript_ptr), ptr_rem+j); } else { /* TODO: Figure out how to get correct pointers for block cyclic * distributions */ /* find block index from subscript */ if(!pnga_locate(g_a, subscript_ptr, &tproc)) { gai_print_subscript("invalid subscript for block-cyclic array", ndim, subscript_ptr,"\n"); pnga_error("failed -element:",idx); } pnga_distribution(g_a, tproc, lo, hi); pnga_access_block_ptr(g_a, tproc, ptr_rem+j, ld); pnga_release_block(g_a, tproc); offset = 0; last = ndim -1; jtot = 1; for (k=0; k 0) { tproc = GA[handle].rstrctd_list[iproc]; } else { if (p_handle < 0) { tproc = iproc; } else { tproc = PGRP_LIST[p_handle].inv_map_proc_list[iproc]; } } /* perform vector operation */ switch(op) { case GATHER: desc.bytes = (int)item_size; desc.src_ptr_array = ptr_rem; desc.dst_ptr_array = ptr_loc; desc.ptr_array_len = (int)nelems[iproc]; rc=ARMCI_GetV(&desc, 1, (int)tproc); if(rc) pnga_error("gather failed in armci",rc); break; case SCATTER: desc.bytes = (int)item_size; desc.src_ptr_array = ptr_loc; desc.dst_ptr_array = ptr_rem; desc.ptr_array_len = (int)nelems[iproc]; rc=ARMCI_PutV(&desc, 1, (int)tproc); if(rc) pnga_error("scatter failed in armci",rc); break; case SCATTER_ACC: desc.bytes = (int)item_size; desc.src_ptr_array = ptr_loc; desc.dst_ptr_array = ptr_rem; desc.ptr_array_len = (int)nelems[iproc]; if(alpha != NULL) { int optype=-1; if(type==C_DBL) optype= ARMCI_ACC_DBL; else if(type==C_DCPL)optype= ARMCI_ACC_DCP; else if(type==C_SCPL)optype= ARMCI_ACC_CPL; else if(type==C_INT)optype= ARMCI_ACC_INT; else if(type==C_LONG)optype= ARMCI_ACC_LNG; else if(type==C_FLOAT)optype= ARMCI_ACC_FLT; else pnga_error("type not supported",type); rc= ARMCI_AccV(optype, alpha, &desc, 1, (int)tproc); } if(rc) pnga_error("scatter_acc failed in armci",rc); break; default: pnga_error("operation not supported",op); } } } gai_free(buf); if (!GA_prealloc_gatscat) { ga_free(nelems); ga_free(list); ga_free(header); } GA_POP_NAME; } /** * Gather random elements from a global array into local buffer v \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_gather = pnga_gather #endif void pnga_gather(Integer g_a, void* v, void *subscript, Integer c_flag, Integer nv) { if (nv < 1) return; ga_check_handleM(g_a, "nga_gather"); GA_PUSH_NAME("nga_gather"); GAstat.numgat++; #ifdef USE_GATSCAT_NEW gai_gatscat_new(GATHER,g_a,v,subscript,c_flag,nv,&GAbytes.gattot,&GAbytes.gatloc, NULL); #else gai_gatscat(GATHER,g_a,v,subscript,nv,&GAbytes.gattot,&GAbytes.gatloc, NULL); #endif GA_POP_NAME; } /** * Scatter elements from a local buffer v into random locations in a Global * Array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_scatter = pnga_scatter #endif void pnga_scatter(Integer g_a, void* v, void *subscript, Integer c_flag, Integer nv) { if (nv < 1) return; ga_check_handleM(g_a, "nga_scatter"); GA_PUSH_NAME("nga_scatter"); GAstat.numsca++; #ifdef USE_GATSCAT_NEW gai_gatscat_new(SCATTER,g_a,v,subscript,c_flag,nv,&GAbytes.scatot,&GAbytes.scaloc, NULL); #else gai_gatscat(SCATTER,g_a,v,subscript,nv,&GAbytes.scatot,&GAbytes.scaloc, NULL); #endif GA_POP_NAME; } /** * Add elements of v to contents at random locations in Global Array * specified by array subscript */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_scatter_acc = pnga_scatter_acc #endif void pnga_scatter_acc(Integer g_a, void* v, void *subscript, Integer c_flag, Integer nv, void *alpha) { if (nv < 1) return; ga_check_handleM(g_a, "nga_scatter_acc"); GA_PUSH_NAME("nga_scatter_acc"); GAstat.numsca++; #ifdef USE_GATSCAT_NEW gai_gatscat_new(SCATTER_ACC, g_a, v, subscript, c_flag, nv, &GAbytes.scatot, &GAbytes.scaloc, alpha); #else gai_gatscat(SCATTER_ACC, g_a, v, subscript, nv, &GAbytes.scatot, &GAbytes.scaloc, alpha); #endif GA_POP_NAME; } #if 000 void FATR ga_gather000_(g_a, v, i, j, nv) Integer g_a, nv, *i, *j; void *v; { int k; Integer *sbar = (Integer*)malloc(2*sizeof(Integer)* (int)nv); if(!sbar) pnga_error("gather:malloc failed",nv); for(k=0;k 0) { nproc = GA[handle].num_rstrctd; } } else { nproc = PGRP_LIST[p_handle].map_nproc; } use_blocks = GA[handle].block_flag; /* allocate temp memory */ if (!use_blocks) { buf1 = gai_malloc((int)(nproc *4 + nv)* (sizeof(Integer))); if(buf1 == NULL) pnga_error("gai_malloc failed", 3*nproc); } else { num_blocks = GA[handle].block_total; buf1 = gai_malloc((int)(num_blocks *4 + nv)* (sizeof(Integer))); if(buf1 == NULL) pnga_error("gai_malloc failed", 3*num_blocks); } owner = (Integer *)buf1; count = owner+ nv; if (!use_blocks) { nelem = count + nproc; aproc = count + 2 * nproc; map = count + 3 * nproc; } else { nelem = count + num_blocks; aproc = count + 2 * num_blocks; map = count + 3 * num_blocks; } if (!use_blocks) { /* initialize the counters and nelem */ for(kk=0; kk 0) { aproc[naproc] = k; map[k] = naproc; naproc ++; } } else { for(k=0; k 0) { aproc[naproc] = k; map[k] = naproc; naproc ++; } } GAstat.numgat_procs += naproc; buf2 = gai_malloc((int)(2*naproc*sizeof(void **) + 2*nv*sizeof(void *) + 5*naproc*sizeof(Integer) + naproc*sizeof(char*))); if(buf2 == NULL) pnga_error("gai_malloc failed", naproc); ptr_src = (void ***)buf2; ptr_dst = (void ***)(buf2 + naproc*sizeof(void **)); ptr_org = (void **)(buf2 + 2*naproc*sizeof(void **)); ptr_ref = (char **)(buf2+2*naproc*sizeof(void **)+2*nv*sizeof(void *)); ilo = (Integer *)(((char*)ptr_ref) + naproc*sizeof(char*)); ihi = ilo + naproc; jlo = ihi + naproc; jhi = jlo + naproc; ldp = jhi + naproc; if (!use_blocks) { for(kk=0; kk 0) iproc = GA[handle].rstrctd_list[iproc]; pnga_distribution(g_a, iproc, lo, hi); ilo[kk] = lo[0]; jlo[kk] = lo[1]; ihi[kk] = hi[0]; jhi[kk] = hi[1]; /* get address of the first element owned by proc */ gaShmemLocation(aproc[kk], g_a, ilo[kk], jlo[kk], &(ptr_ref[kk]), &(ldp[kk])); } } else { for(kk=0; kk 0) proc = GA[handle].rank_rstrctd[owner[k]]; this_count = count[proc]; count[proc]++; proc = map[proc]; ptr_dst[proc][this_count] = ((char*)v) + k * item_size; if(i[k] < ilo[proc] || i[k] > ihi[proc] || j[k] < jlo[proc] || j[k] > jhi[proc]){ char err_string[ERR_STR_LEN]; sprintf(err_string,"proc=%d invalid i/j=(%ld,%ld)><[%ld:%ld,%ld:%ld]", (int)proc,(long)i[k],(long)j[k], (long)ilo[proc],(long)ihi[proc], (long)jlo[proc], (long)jhi[proc]); pnga_error(err_string, g_a); } ptr_src[proc][this_count] = ptr_ref[proc] + item_size * ((j[k] - jlo[proc])* ldp[proc] + i[k] - ilo[proc]); } /* source and destination pointers are ready for all processes */ if (!use_blocks) { for(k=0; k 0) iproc = GA[handle].rstrctd_list[iproc]; } else { iproc = PGRP_LIST[p_handle].inv_map_proc_list[aproc[k]]; } rc=ARMCI_GetV(&desc, 1, (int)iproc); if(rc) pnga_error("gather failed in armci",rc); } } else { if (GA[handle].block_sl_flag == 0) { for(k=0; k= 0) { iproc = PGRP_LIST[p_handle].inv_map_proc_list[iproc]; } rc=ARMCI_GetV(&desc, 1, (int)iproc); if(rc) pnga_error("gather failed in armci",rc); } } else { Integer index[MAXDIM]; for(k=0; k= 0) { iproc = PGRP_LIST[p_handle].inv_map_proc_list[iproc]; } rc=ARMCI_GetV(&desc, 1, (int)iproc); if(rc) pnga_error("gather failed in armci",rc); } } } gai_free(buf2); gai_free(buf1); GA_POP_NAME; } /** * Read and increment an element of a Global Array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_read_inc = pnga_read_inc #endif Integer pnga_read_inc(Integer g_a, Integer* subscript, Integer inc) { char *ptr; Integer ldp[MAXDIM], proc, handle=GA_OFFSET+g_a, p_handle, ndim; int optype,ivalue; long lvalue; void *pval; ga_check_handleM(g_a, "nga_read_inc"); GA_PUSH_NAME("nga_read_inc"); /* BJP printf("p[%d] g_a: %d subscript: %d inc: %d\n",GAme, g_a, subscript[0], inc); */ if(GA[handle].type!=C_INT && GA[handle].type!=C_LONG && GA[handle].type!=C_LONGLONG) pnga_error("type must be integer",GA[handle].type); GAstat.numrdi++; GAbytes.rditot += (double)sizeof(Integer); p_handle = GA[handle].p_handle; ndim = GA[handle].ndim; /* find out who owns it */ pnga_locate(g_a, subscript, &proc); /* get an address of the g_a(subscript) element */ if (!GA[handle].block_flag) { if (GA[handle].num_rstrctd == 0) { gam_Location(proc, handle, subscript, (char**)&ptr, ldp); } else { gam_Location(GA[handle].rank_rstrctd[proc], handle, subscript, (char**)&ptr, ldp); } } else { Integer lo[MAXDIM], hi[MAXDIM]; Integer j, jtot, last, offset; pnga_distribution(g_a, proc, lo, hi); pnga_access_block_ptr(g_a, proc, (char**)&ptr, ldp); pnga_release_block(g_a, proc); offset = 0; last = ndim - 1; jtot = 1; for (j=0; j 1) { count[istride] = (int)(idx/skip[i]+1); istride++; } else { count[istride] = (int)idx+1; istride++; } } *nstride = istride; return 1; #else Integer idx; int i, istride = 0; /* if (GAme==0) { printf("p[%d] ComputeCount lo[0]: %d hi[0]: %d lo[1]: %d hi[1]: %d\n",GAme, lo[0],hi[0],lo[1],hi[1]); } */ for (i=0; i<(int)ndim; i++) { idx = hi[i] - lo[i]; if (idx < 0) return 0; if (skip[i] > 1) { count[istride] = 1; istride++; count[istride] = (int)(idx/skip[i]+1); istride++; } else { count[istride] = (int)idx+1; istride++; } } *nstride = istride; return 1; #endif } /** * Utility function to calculate stride lengths on local and * remote processors, taking into account the presence of skips */ void gai_SetStrideWithSkip(Integer ndim, Integer size, Integer *ld, Integer *ldrem, int *stride_rem, int *stride_loc, Integer *skip) { #if 1 int i; stride_rem[0] = stride_loc[0] = (int)size; for (i=0; i 1) { stride_rem[istride] *= (int)skip[i]; stride_rem[istride+1] = stride_rem[istride]/((int)skip[i]); stride_loc[istride+1] = stride_loc[istride]; istride++; if (i= lo[j] && blo[j] <= hi[j]) || (bhi[j] >= lo[j] && bhi[j] <= hi[j])); /* check to see if interval represented by lo and hi * falls entirely within interval represented by blo and bhi */ check2 = ((lo[j] >= blo[j] && lo[j] <= bhi[j]) && (hi[j] >= blo[j] && hi[j] <= bhi[j])); if (!check1 && !check2) { chk = 0; } } if (chk) { /* get the patch of block that overlaps requested region */ gam_GetBlockPatch(blo,bhi,lo,hi,plo,phi,ndim); /* Correct ranges to account for skips in original patch. If no data is left in patch jump to next processor in loop. */ if (!gai_correct_strided_patch((Integer)ndim, lo, skip, plo, phi)) continue; /* evaluate offset within block */ last = ndim - 1; jtot = 1; if (last == 0) ldrem[0] = bhi[0] - blo[0] + 1; l_offset = 0; for (j=0; j 0) { pinv = PGRP_LIST[p_handle].inv_map_proc_list[pinv]; } prem = GA[handle].ptr[pinv]+l_offset*GA[handle].elemsize; gai_ComputePatchIndexWithSkip(ndim, lo, plo, skip, ld, &idx_buf); pbuf = size*idx_buf + (char*)buf; /* Compute number of elements in each stride region and compute the number of stride regions. Store the results in count and nstride */ if (!gai_ComputeCountWithSkip(ndim, plo, phi, skip, count, &nstride)) continue; /* scale number of rows by element size */ count[0] *= size; /* Calculate strides in memory for remote processor indexed by proc and local buffer */ gai_SetStrideWithSkip(ndim, size, ld, ldrem, stride_rem, stride_loc, skip); proc = pinv; ARMCI_PutS(pbuf,stride_loc,prem,stride_rem,count,nstride-1,proc); } /* evaluate size of block idx and use it to increment offset */ jtot = 1; for (j=0; j GA[handle].dims[idx]) bhi[idx] = GA[handle].dims[idx]; } /* check to see if this block overlaps with requested block * defined by lo and hi */ chk = 1; for (j=0; j= lo[j] && blo[j] <= hi[j]) || (bhi[j] >= lo[j] && bhi[j] <= hi[j])); /* check to see if interval represented by lo and hi * falls entirely within interval represented by blo and bhi */ check2 = ((lo[j] >= blo[j] && lo[j] <= bhi[j]) && (hi[j] >= blo[j] && hi[j] <= bhi[j])); if (!check1 && !check2) { chk = 0; } } if (chk) { /* get the patch of block that overlaps requested region */ gam_GetBlockPatch(blo,bhi,lo,hi,plo,phi,ndim); /* Correct ranges to account for skips in original patch. If no data is left in patch jump to next processor in loop. */ if (!gai_correct_strided_patch((Integer)ndim, lo, skip, plo, phi)) continue; /* evaluate offset within block */ last = ndim - 1; #if COMPACT_SCALAPACK jtot = 1; if (last == 0) ldrem[0] = bhi[0] - blo[0] + 1; l_offset = 0; for (j=0; j 0) { if (proc_index[j] 0) { pinv = PGRP_LIST[p_handle].inv_map_proc_list[pinv]; } prem = GA[handle].ptr[pinv]+l_offset*GA[handle].elemsize; gai_ComputePatchIndexWithSkip(ndim, lo, plo, skip, ld, &idx_buf); pbuf = size*idx_buf + (char*)buf; /* Compute number of elements in each stride region and compute the number of stride regions. Store the results in count and nstride */ if (!gai_ComputeCountWithSkip(ndim, plo, phi, skip, count, &nstride)) continue; /* scale number of rows by element size */ count[0] *= size; /* Calculate strides in memory for remote processor indexed by proc and local buffer */ gai_SetStrideWithSkip(ndim, size, ld, ldrem, stride_rem, stride_loc, skip); proc = pinv; ARMCI_PutS(pbuf,stride_loc,prem,stride_rem,count,nstride-1,proc); } /* increment offset to account for all elements on this block */ #if COMPACT_SCALAPACK itmp = 1; for (idx = 0; idx < ndim; idx++) { itmp *= (bhi[idx] - blo[idx] + 1); } offset += itmp; #endif /* increment block indices to get the next block on processor iproc */ index[0] += GA[handle].nblock[0]; for (idx= 0; idx < ndim; idx++) { if (index[idx] >= GA[handle].num_blocks[idx] && idx < ndim-1) { index[idx] = proc_index[idx]; index[idx+1] += GA[handle].nblock[idx+1]; } } } } } } GA_POP_NAME; } /** * Get an N-dimensional patch of strided data from a Global Array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_strided_get = pnga_strided_get #endif void pnga_strided_get(Integer g_a, Integer *lo, Integer *hi, Integer *skip, void *buf, Integer *ld) { /* g_a: Global Array handle lo[]: Array of lower indices of patch of global array hi[]: Array of upper indices of patch of global array skip[]: Array of skips for each dimension buf[]: Local buffer that patch will be copied from ld[]: ndim-1 physical dimensions of local buffer */ Integer p, np, handle = GA_OFFSET + g_a; Integer idx, size, nstride, p_handle, nproc; int i, proc, ndim; int use_blocks; size = GA[handle].elemsize; ndim = GA[handle].ndim; use_blocks = GA[handle].block_flag; nproc = pnga_nnodes(); p_handle = GA[handle].p_handle; /* check values of skips to make sure they are legitimate */ for (i = 0; i= lo[j] && blo[j] <= hi[j]) || (bhi[j] >= lo[j] && bhi[j] <= hi[j])); /* check to see if interval represented by lo and hi * falls entirely within interval represented by blo and bhi */ check2 = ((lo[j] >= blo[j] && lo[j] <= bhi[j]) && (hi[j] >= blo[j] && hi[j] <= bhi[j])); if (!check1 && !check2) { chk = 0; } } if (chk) { /* get the patch of block that overlaps requested region */ gam_GetBlockPatch(blo,bhi,lo,hi,plo,phi,ndim); /* Correct ranges to account for skips in original patch. If no data is left in patch jump to next processor in loop. */ if (!gai_correct_strided_patch((Integer)ndim, lo, skip, plo, phi)) continue; /* evaluate offset within block */ last = ndim - 1; jtot = 1; if (last == 0) ldrem[0] = bhi[0] - blo[0] + 1; l_offset = 0; for (j=0; j 0) { pinv = PGRP_LIST[p_handle].inv_map_proc_list[pinv]; } prem = GA[handle].ptr[pinv]+l_offset*GA[handle].elemsize; gai_ComputePatchIndexWithSkip(ndim, lo, plo, skip, ld, &idx_buf); pbuf = size*idx_buf + (char*)buf; /* Compute number of elements in each stride region and compute the number of stride regions. Store the results in count and nstride */ if (!gai_ComputeCountWithSkip(ndim, plo, phi, skip, count, &nstride)) continue; /* scale number of rows by element size */ count[0] *= size; /* Calculate strides in memory for remote processor indexed by proc and local buffer */ gai_SetStrideWithSkip(ndim, size, ld, ldrem, stride_rem, stride_loc, skip); proc = pinv; ARMCI_GetS(prem,stride_rem,pbuf,stride_loc,count,nstride-1,proc); } /* evaluate size of block idx and use it to increment offset */ jtot = 1; for (j=0; j GA[handle].dims[idx]) bhi[idx] = GA[handle].dims[idx]; } /* check to see if this block overlaps with requested block * defined by lo and hi */ chk = 1; for (j=0; j= lo[j] && blo[j] <= hi[j]) || (bhi[j] >= lo[j] && bhi[j] <= hi[j])); /* check to see if interval represented by lo and hi * falls entirely within interval represented by blo and bhi */ check2 = ((lo[j] >= blo[j] && lo[j] <= bhi[j]) && (hi[j] >= blo[j] && hi[j] <= bhi[j])); if (!check1 && !check2) { chk = 0; } } if (chk) { /* get the patch of block that overlaps requested region */ gam_GetBlockPatch(blo,bhi,lo,hi,plo,phi,ndim); /* Correct ranges to account for skips in original patch. If no data is left in patch jump to next processor in loop. */ if (!gai_correct_strided_patch((Integer)ndim, lo, skip, plo, phi)) continue; /* evaluate offset within block */ last = ndim - 1; #if COMPACT_SCALAPACK jtot = 1; if (last == 0) ldrem[0] = bhi[0] - blo[0] + 1; l_offset = 0; for (j=0; j 0) { if (proc_index[j] 0) { pinv = PGRP_LIST[p_handle].inv_map_proc_list[pinv]; } prem = GA[handle].ptr[pinv]+l_offset*GA[handle].elemsize; gai_ComputePatchIndexWithSkip(ndim, lo, plo, skip, ld, &idx_buf); pbuf = size*idx_buf + (char*)buf; /* Compute number of elements in each stride region and compute the number of stride regions. Store the results in count and nstride */ if (!gai_ComputeCountWithSkip(ndim, plo, phi, skip, count, &nstride)) continue; /* scale number of rows by element size */ count[0] *= size; /* Calculate strides in memory for remote processor indexed by proc and local buffer */ gai_SetStrideWithSkip(ndim, size, ld, ldrem, stride_rem, stride_loc, skip); proc = pinv; ARMCI_GetS(prem,stride_rem,pbuf,stride_loc,count,nstride-1,proc); } /* increment offset to account for all elements on this block */ #if COMPACT_SCALAPACK itmp = 1; for (idx = 0; idx < ndim; idx++) { itmp *= (bhi[idx] - blo[idx] + 1); } offset += itmp; #endif /* increment block indices to get the next block on processor iproc */ index[0] += GA[handle].nblock[0]; for (idx= 0; idx < ndim; idx++) { if (index[idx] >= GA[handle].num_blocks[idx] && idx < ndim-1) { index[idx] = proc_index[idx]; index[idx+1] += GA[handle].nblock[idx+1]; } } } } } } GA_POP_NAME; } /** * Accumulate operation for an N-dimensional patch of strided data of * a Global Array * g_a += alpha * patch \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_strided_acc = pnga_strided_acc #endif void pnga_strided_acc(Integer g_a, Integer *lo, Integer *hi, Integer *skip, void *buf, Integer *ld, void *alpha) { /* g_a: Global Array handle lo[]: Array of lower indices of patch of global array hi[]: Array of upper indices of patch of global array skip[]: Array of skips for each dimension buf[]: Local buffer that patch will be copied from ld[]: ndim-1 physical dimensions of local buffer alpha: muliplicative scale factor */ Integer p, np, handle = GA_OFFSET + g_a; Integer idx, size, nstride, type, p_handle, nproc; int i, optype=-1, proc, ndim; int use_blocks; size = GA[handle].elemsize; ndim = GA[handle].ndim; type = GA[handle].type; use_blocks = GA[handle].block_flag; nproc = pnga_nnodes(); p_handle = GA[handle].p_handle; if (type == C_DBL) optype = ARMCI_ACC_DBL; else if (type == C_FLOAT) optype = ARMCI_ACC_FLT; else if (type == C_DCPL) optype = ARMCI_ACC_DCP; else if (type == C_SCPL) optype = ARMCI_ACC_CPL; else if (type == C_INT) optype = ARMCI_ACC_INT; else if (type == C_LONG) optype = ARMCI_ACC_LNG; else pnga_error("nga_strided_acc: type not supported",type); /* check values of skips to make sure they are legitimate */ for (i = 0; i= lo[j] && blo[j] <= hi[j]) || (bhi[j] >= lo[j] && bhi[j] <= hi[j])); /* check to see if interval represented by lo and hi * falls entirely within interval represented by blo and bhi */ check2 = ((lo[j] >= blo[j] && lo[j] <= bhi[j]) && (hi[j] >= blo[j] && hi[j] <= bhi[j])); if (!check1 && !check2) { chk = 0; } } if (chk) { /* get the patch of block that overlaps requested region */ gam_GetBlockPatch(blo,bhi,lo,hi,plo,phi,ndim); /* Correct ranges to account for skips in original patch. If no data is left in patch jump to next processor in loop. */ if (!gai_correct_strided_patch((Integer)ndim, lo, skip, plo, phi)) continue; /* evaluate offset within block */ last = ndim - 1; jtot = 1; if (last == 0) ldrem[0] = bhi[0] - blo[0] + 1; l_offset = 0; for (j=0; j 0) { pinv = PGRP_LIST[p_handle].inv_map_proc_list[pinv]; } prem = GA[handle].ptr[pinv]+l_offset*GA[handle].elemsize; gai_ComputePatchIndexWithSkip(ndim, lo, plo, skip, ld, &idx_buf); pbuf = size*idx_buf + (char*)buf; /* Compute number of elements in each stride region and compute the number of stride regions. Store the results in count and nstride */ if (!gai_ComputeCountWithSkip(ndim, plo, phi, skip, count, &nstride)) continue; /* scale number of rows by element size */ count[0] *= size; /* Calculate strides in memory for remote processor indexed by proc and local buffer */ gai_SetStrideWithSkip(ndim, size, ld, ldrem, stride_rem, stride_loc, skip); proc = pinv; ARMCI_AccS(optype, alpha, pbuf, stride_loc, prem, stride_rem, count, nstride-1, proc); } /* evaluate size of block idx and use it to increment offset */ jtot = 1; for (j=0; j GA[handle].dims[idx]) bhi[idx] = GA[handle].dims[idx]; } /* check to see if this block overlaps with requested block * defined by lo and hi */ chk = 1; for (j=0; j= lo[j] && blo[j] <= hi[j]) || (bhi[j] >= lo[j] && bhi[j] <= hi[j])); /* check to see if interval represented by lo and hi * falls entirely within interval represented by blo and bhi */ check2 = ((lo[j] >= blo[j] && lo[j] <= bhi[j]) && (hi[j] >= blo[j] && hi[j] <= bhi[j])); if (!check1 && !check2) { chk = 0; } } if (chk) { /* get the patch of block that overlaps requested region */ gam_GetBlockPatch(blo,bhi,lo,hi,plo,phi,ndim); /* Correct ranges to account for skips in original patch. If no data is left in patch jump to next processor in loop. */ if (!gai_correct_strided_patch((Integer)ndim, lo, skip, plo, phi)) continue; /* evaluate offset within block */ last = ndim - 1; #if COMPACT_SCALAPACK jtot = 1; if (last == 0) ldrem[0] = bhi[0] - blo[0] + 1; l_offset = 0; for (j=0; j 0) { if (proc_index[j] 0) { pinv = PGRP_LIST[p_handle].inv_map_proc_list[pinv]; } prem = GA[handle].ptr[pinv]+l_offset*GA[handle].elemsize; gai_ComputePatchIndexWithSkip(ndim, lo, plo, skip, ld, &idx_buf); pbuf = size*idx_buf + (char*)buf; /* Compute number of elements in each stride region and compute the number of stride regions. Store the results in count and nstride */ if (!gai_ComputeCountWithSkip(ndim, plo, phi, skip, count, &nstride)) continue; /* scale number of rows by element size */ count[0] *= size; /* Calculate strides in memory for remote processor indexed by proc and local buffer */ gai_SetStrideWithSkip(ndim, size, ld, ldrem, stride_rem, stride_loc, skip); proc = pinv; ARMCI_AccS(optype, alpha, pbuf, stride_loc, prem, stride_rem, count, nstride-1, proc); } /* increment offset to account for all elements on this block */ #if COMPACT_SCALAPACK itmp = 1; for (idx = 0; idx < ndim; idx++) { itmp *= (bhi[idx] - blo[idx] + 1); } offset += itmp; #endif /* increment block indices to get the next block on processor iproc */ index[0] += GA[handle].nblock[0]; for (idx= 0; idx < ndim; idx++) { if (index[idx] >= GA[handle].num_blocks[idx] && idx < ndim-1) { index[idx] = proc_index[idx]; index[idx+1] += GA[handle].nblock[idx+1]; } } } } } } GA_POP_NAME; } ga-5-3/global/src/ga_ckpt.c0000640005473000001440000000424311647111726014410 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /*interfaces for saving and restoring GA's */ #include "globalp.h" #include "message.h" #include "base.h" #include "macdecls.h" #include "ga_ckpt.h" #include "ga-papi.h" #include "ga-wapi.h" #define DEBUG 0 void ga_set_spare_procs(int *spare) { extern int ga_spare_procs; ga_spare_procs=*spare; armci_set_spare_procs(*spare); } int ga_icheckpoint_init(Integer *gas, int num) { int rid,i,hdl; armci_ckpt_ds_t ckptds; extern ARMCI_Group* ga_get_armci_group_(int); /*code needs to be written to check if all the gas have same pgroup*/ (void)ARMCI_Ckpt_create_ds(&ckptds,2*num); for(i=0;i=1) rid = ARMCI_Ckpt_init(NULL,ga_get_armci_group_(GA[hdl].p_handle),0,0,&ckptds); else rid = ARMCI_Ckpt_init(NULL,ARMCI_Get_world_group(),0,0,&ckptds); for(i=0;i #endif #if HAVE_STRING_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_ASSERT_H # include #endif #include "farg.h" #include "globalp.h" #include "message.h" #include "base.h" #include "macdecls.h" #include "armci.h" #include "ga-papi.h" #include "ga-wapi.h" static int calc_maplen(int handle); #ifdef PROFILE_OLD #include "ga_profile.h" #endif /*#define AVOID_MA_STORAGE 1*/ #define DEBUG 0 #define USE_MALLOC 1 #define INVALID_MA_HANDLE -1 #define NEAR_INT(x) (x)< 0.0 ? ceil( (x) - 0.5) : floor((x) + 0.5) #define FLEN 80 /* length of Fortran strings */ /*uncomment line below to verify consistency of MA in every sync */ /*#define CHECK_MA yes */ /*uncomment line below to verify if MA base address is alligned wrt datatype*/ #if !(defined(LINUX) || defined(CRAY) || defined(CYGWIN)) #define CHECK_MA_ALGN 1 #endif /*uncomment line below to initialize arrays in ga_create/duplicate */ /*#define GA_CREATE_INDEF yes */ /*uncomment line below to introduce padding between shared memory regions of a GA when the region spans in more than 1 process within SMP */ #define GA_ELEM_PADDING yes #define OLD_DISTRIBUTION 1 #if OLD_DISTRIBUTION extern void ddb_h2(Integer ndims, Integer dims[], Integer npes, double threshold, Integer bias, Integer blk[], Integer pedims[]); #else extern void ddb(Integer ndims, Integer dims[], Integer npes, Integer blk[], Integer pedims[]); #endif global_array_t *_ga_main_data_structure; global_array_t *GA; proc_list_t *_proc_list_main_data_structure; proc_list_t *PGRP_LIST; static int GAinitialized = 0; static int ARMCIinitialized = 0; int _ga_sync_begin = 1; int _ga_sync_end = 1; int _max_global_array = MAX_ARRAYS; Integer *GA_proclist; int* GA_Proc_list = NULL; int* GA_inv_Proc_list=NULL; int GA_World_Proc_Group = -1; int GA_Default_Proc_Group = -1; int ga_armci_world_group=0; int GA_Init_Proc_Group = -2; Integer GA_Debug_flag = 0; int *ProcPermList = NULL; /* MA addressing */ DoubleComplex *DCPL_MB; /* double precision complex base address */ SingleComplex *SCPL_MB; /* single precision complex base address */ DoublePrecision *DBL_MB; /* double precision base address */ Integer *INT_MB; /* integer base address */ float *FLT_MB; /* float base address */ int** GA_Update_Flags; int* GA_Update_Signal; typedef struct { long id; long type; long size; long dummy; } getmem_t; /* set total limit (bytes) for memory usage per processor to "unlimited" */ static Integer GA_total_memory = -1; static Integer GA_memory_limited = 0; struct ga_stat_t GAstat; struct ga_bytes_t GAbytes ={0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; long *GAstat_arr; static Integer GA_memory_limit=0; Integer GAme, GAnproc; static Integer MPme; Integer *mapALL; #ifdef PERMUTE_PIDS char** ptr_array; #endif char *GA_name_stack[NAME_STACK_LEN]; /* stack for storing names of GA ops */ int GA_stack_size=0; /* Function prototypes */ int gai_getmem(char* name, char **ptr_arr, C_Long bytes, int type, long *id, int grp_id); #ifdef ENABLE_CHECKPOINT static int ga_group_is_for_ft=0; int ga_spare_procs; #endif /*************************************************************************/ /*\ This macro computes index (place in ordered set) for the element * identified by _subscript in ndim- dimensional array of dimensions _dim[] * assume that first subscript component changes first \*/ #define ga_ComputeIndexM(_index, _ndim, _subscript, _dims) \ { \ Integer _i, _factor=1; \ __CRAYX1_PRAGMA("_CRI novector"); \ for(_i=0,*(_index)=0; _i<_ndim; _i++){ \ *(_index) += _subscript[_i]*_factor; \ if(_i<_ndim-1)_factor *= _dims[_i]; \ } \ } /*\ updates subscript corresponding to next element in a patch \*/ #define ga_UpdateSubscriptM(_ndim, _subscript, _lo, _hi, _dims)\ { \ Integer _i; \ __CRAYX1_PRAGMA("_CRI novector"); \ for(_i=0; _i<_ndim; _i++){ \ if(_subscript[_i] < _hi[_i]) { _subscript[_i]++; break;} \ _subscript[_i] = _lo[_i]; \ } \ } /*\ Initialize n-dimensional loop by counting elements and setting subscript=lo \*/ #define ga_InitLoopM(_elems, _ndim, _subscript, _lo, _hi, _dims)\ { \ Integer _i; \ *_elems = 1; \ __CRAYX1_PRAGMA("_CRI novector"); \ for(_i=0; _i<_ndim; _i++){ \ *_elems *= _hi[_i]-_lo[_i] +1; \ _subscript[_i] = _lo[_i]; \ } \ } Integer GAsizeof(Integer type) { switch (type) { case C_DBL : return (sizeof(double)); case C_INT : return (sizeof(int)); case C_SCPL : return (sizeof(SingleComplex)); case C_DCPL : return (sizeof(DoubleComplex)); case C_FLOAT : return (sizeof(float)); case C_LONG : return (sizeof(long)); case C_LONGLONG : return (sizeof(long long)); default : return 0; } } /*\ Register process list * process list can be used to: * 1. permute process ids w.r.t. message-passing ids (set PERMUTE_PIDS), or * 2. change logical mapping of array blocks to processes \*/ void ga_register_proclist_(Integer *list, Integer* np) { int i; GA_PUSH_NAME("ga_register_proclist"); if( *np <0 || *np >GAnproc) pnga_error("invalid number of processors",*np); if( *np = GAnproc) pnga_error("invalid list entry",p); GA_Proc_list[i] = p; GA_inv_Proc_list[p]=i; } GA_POP_NAME; } void GA_Register_proclist(int *list, int np) { int i; GA_PUSH_NAME("ga_register_proclist"); if( np <0 || np >GAnproc) pnga_error("invalid number of processors",np); if( np = GAnproc) pnga_error("invalid list entry",p); GA_Proc_list[i] = p; GA_inv_Proc_list[p]=i; } GA_POP_NAME; } /*\ FINAL CLEANUP of shmem when terminating \*/ void ga_clean_resources() { ARMCI_Cleanup(); } /*\ CHECK GA HANDLE and if it's wrong TERMINATE * C version \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_check_handle = pnga_check_handle #endif void pnga_check_handle(Integer g_a, char * string) { ga_check_handleM(g_a, string); } /*\ Initialize MA-like addressing: * get addressees for the base arrays for double, complex and int types \*/ static int ma_address_init=0; void gai_ma_address_init() { #ifdef CHECK_MA_ALGN Integer off_dbl, off_int, off_dcpl, off_flt,off_scpl; #endif ma_address_init=1; INT_MB = (Integer*)MA_get_mbase(MT_F_INT); DBL_MB = (DoublePrecision*)MA_get_mbase(MT_F_DBL); DCPL_MB= (DoubleComplex*)MA_get_mbase(MT_F_DCPL); SCPL_MB= (SingleComplex*)MA_get_mbase(MT_F_SCPL); FLT_MB = (float*)MA_get_mbase(MT_F_REAL); # ifdef CHECK_MA_ALGN off_dbl = 0 != ((long)DBL_MB)%sizeof(DoublePrecision); off_int = 0 != ((long)INT_MB)%sizeof(Integer); off_dcpl= 0 != ((long)DCPL_MB)%sizeof(DoublePrecision); off_scpl= 0 != ((long)SCPL_MB)%sizeof(float); off_flt = 0 != ((long)FLT_MB)%sizeof(float); if(off_dbl) pnga_error("GA initialize: MA DBL_MB not alligned", (Integer)DBL_MB); if(off_int) pnga_error("GA initialize: INT_MB not alligned", (Integer)INT_MB); if(off_dcpl) pnga_error("GA initialize: DCPL_MB not alligned", (Integer)DCPL_MB); if(off_scpl) pnga_error("GA initialize: SCPL_MB not alligned", (Integer)SCPL_MB); if(off_flt) pnga_error("GA initialize: FLT_MB not alligned", (Integer)FLT_MB); # endif if(DEBUG) printf("%d INT_MB=%p DBL_MB=%p DCPL_MB=%p FLT_MB=%p SCPL_MB=%p\n", (int)GAme, (void*)INT_MB, (void*)DBL_MB, (void*)DCPL_MB, (void*)FLT_MB, (void*)SCPL_MB); } extern int *_ga_argc; extern char ***_ga_argv; extern int _ga_initialize_args; extern int _ga_initialize_c; extern int _ga_initialize_f; /** * Initialize library structures in Global Arrays. * either ga_initialize_ltd or ga_initialize must be the first * GA routine called (except ga_uses_ma) */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_initialize = pnga_initialize #endif void pnga_initialize() { Integer i, j,nproc, nnode, zero; int bytes; if(GAinitialized) return; #if HAVE_ARMCI_INITIALIZED_FUNCTION if (!ARMCI_Initialized()) #else if (!ARMCIinitialized) #endif { /* assure that GA will not alocate more shared memory than specified */ if(GA_memory_limited) ARMCI_Set_shm_limit(GA_total_memory); if (_ga_initialize_c) { if (_ga_initialize_args) { ARMCI_Init_args(_ga_argc, _ga_argv); } else { ARMCI_Init(); } } else if (_ga_initialize_f) { _ga_argc = malloc(sizeof(int)); _ga_argv = malloc(sizeof(char**)); if (!_ga_argc) pnga_error("malloc argc failed",1); ga_f2c_get_cmd_args(_ga_argc, _ga_argv); ARMCI_Init_args(_ga_argc, _ga_argv); } else { pnga_error("pnga_initialize called outside of C or F APIs",1); } ARMCIinitialized = 1; } GA_Default_Proc_Group = -1; /* zero in pointers in GA array */ _ga_main_data_structure = (global_array_t *)malloc(sizeof(global_array_t)*MAX_ARRAYS); _proc_list_main_data_structure = (proc_list_t *)malloc(sizeof(proc_list_t)*MAX_ARRAYS); if(!_ga_main_data_structure) pnga_error("ga_init:malloc ga failed",0); if(!_proc_list_main_data_structure) pnga_error("ga_init:malloc proc_list failed",0); GA = _ga_main_data_structure; PGRP_LIST = _proc_list_main_data_structure; for(i=0;iGAnproc) pnga_error("ga_init:message-passing initialization problem: my ID=",GAme); MPme= (Integer)armci_msg_me(); if(GA_Proc_list) fprintf(stderr,"permutation applied %d now becomes %d\n",(int)MPme,(int)GAme); GA_proclist = (Integer*)malloc((size_t)GAnproc*sizeof(Integer)); if(!GA_proclist) pnga_error("ga_init:malloc failed (proclist)",0); gai_init_onesided(); /* set activity status for all arrays to inactive */ for(i=0;i<_max_global_array;i++)GA[i].actv=0; for(i=0;i<_max_global_array;i++)GA[i].actv_handle=0; /* Create proc list for mirrored arrays */ PGRP_LIST[0].map_proc_list = (int*)malloc(GAnproc*sizeof(int)*2); PGRP_LIST[0].inv_map_proc_list = PGRP_LIST[0].map_proc_list + GAnproc; for (i=0; i=tmpcount) ga_irecover(0); printf("\n%d:here done with initialize\n",GAme); } #endif } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_initialized = pnga_initialized #endif int pnga_initialized() { return GAinitialized; } #if ENABLE_CHECKPOINT void set_ga_group_is_for_ft(int val) { ga_group_is_for_ft = val; } #endif /** * Is MA used for allocation of GA memory? */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_uses_ma = pnga_uses_ma #endif logical pnga_uses_ma() { #ifdef AVOID_MA_STORAGE return FALSE; #else if(!GAinitialized) return FALSE; if(ARMCI_Uses_shm()) return FALSE; else return TRUE; #endif } /** * Is memory limit set */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_memory_limited = pnga_memory_limited #endif logical pnga_memory_limited() { if(GA_memory_limited) return TRUE; else return FALSE; } /** * Returns the amount of memory on each processor used in active Global Arrays */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_inquire_memory = pnga_inquire_memory #endif Integer pnga_inquire_memory() { Integer i, sum=0; for(i=0; i<_max_global_array; i++) if(GA[i].actv) sum += (Integer)GA[i].size; return(sum); } /** * Returns the amount of memory available on the calling processor */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_memory_avail = pnga_memory_avail #endif Integer pnga_memory_avail() { if(!pnga_uses_ma()) return(GA_total_memory); else{ Integer ma_limit = MA_inquire_avail(MT_F_BYTE); if ( GA_memory_limited ) return( GA_MIN(GA_total_memory, ma_limit) ); else return( ma_limit ); } } /** * (re)set limit on GA memory usage */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_set_memory_limit = pnga_set_memory_limit #endif void pnga_set_memory_limit(Integer mem_limit) { if(GA_memory_limited){ /* if we had the limit set we need to adjust the amount available */ if (mem_limit>=0) /* adjust the current value by diff between old and new limit */ GA_total_memory += (mem_limit - GA_memory_limit); else{ /* negative values reset limit to "unlimited" */ GA_memory_limited = 0; GA_total_memory= -1; } }else{ GA_total_memory = GA_memory_limit = mem_limit; if(mem_limit >= 0) GA_memory_limited = 1; } } /** * Initialize Global Array library structures and set a limit on memory * usage by GA. * the byte limit is per processor (even for shared memory) * either ga_initialize_ltd or ga_initialize must be the first * GA routine called (except ga_uses_ma) * ga_initialize is another version of ga_initialize_ltd, except * without memory control * mem_limit < 0 means "memory unlimited" */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_initialize_ltd = pnga_initialize_ltd #endif void pnga_initialize_ltd(Integer mem_limit) { GA_total_memory =GA_memory_limit = mem_limit; if(mem_limit >= 0) GA_memory_limited = 1; pnga_initialize(); } /* #define gam_checktype(_type)\ */ /* if(_type != C_DBL && _type != C_INT && \ */ /* _type != C_DCPL && _type != C_SCPL && _type != C_FLOAT && \ */ /* _type != C_LONG &&_type != C_LONGLONG)\ */ /* pnga_error("ttype not yet supported ", _type) */ #define gam_checktype(_type) if(!GAvalidtypeM(_type))pnga_error("type not yet supported", (_type)) #define gam_checkdim(ndim, dims)\ {\ int _d;\ if(ndim<1||ndim>MAXDIM) pnga_error("unsupported number of dimensions",ndim);\ __CRAYX1_PRAGMA("_CRI novector"); \ for(_d=0; _d= 0) { if (PGRP_LIST[p_handle].mirrored) ret = TRUE; } return ret; } #define findblock(map_ij,n,scale,elem, block)\ {\ int candidate, found, b; \ C_Integer *map= (map_ij);\ \ candidate = (int)(scale*(elem));\ found = 0;\ if(map[candidate] <= (elem)){ /* search downward */\ b= candidate;\ while(b<(n)-1){ \ found = (map[b+1]>(elem));\ if(found)break;\ b++;\ } \ }else{ /* search upward */\ b= candidate-1;\ while(b>=0){\ found = (map[b]<=(elem));\ if(found)break;\ b--;\ }\ }\ if(!found)b=(n)-1;\ *(block) = b;\ } /** * Locate the owner of an element of a Global Array specified by the array * subscript */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_locate = pnga_locate #endif logical pnga_locate(Integer g_a, Integer* subscript, Integer* owner) { Integer d, proc, dpos, ndim, ga_handle = GA_OFFSET + g_a, proc_s[MAXDIM]; int use_blocks; ga_check_handleM(g_a, "nga_locate"); ndim = GA[ga_handle].ndim; use_blocks = GA[ga_handle].block_flag; if (!use_blocks) { for(d=0, *owner=-1; d< ndim; d++) if(subscript[d]< 1 || subscript[d]>GA[ga_handle].dims[d]) return FALSE; for(d = 0, dpos = 0; d< ndim; d++){ findblock(GA[ga_handle].mapc + dpos, GA[ga_handle].nblock[d], GA[ga_handle].scale[d], subscript[d], &proc_s[d]); dpos += GA[ga_handle].nblock[d]; } ga_ComputeIndexM(&proc, ndim, proc_s, GA[ga_handle].nblock); *owner = GA_Proc_list ? GA_Proc_list[proc]: proc; if (GA[ga_handle].num_rstrctd > 0) { *owner = GA[ga_handle].rstrctd_list[*owner]; } } else { if (GA[ga_handle].block_sl_flag == 0) { Integer i, j, chk, lo[MAXDIM], hi[MAXDIM]; Integer num_blocks = GA[ga_handle].block_total; for (i=0; i< num_blocks; i++) { pnga_distribution(g_a, i, lo, hi); chk = 1; for (j=0; j hi[j]) chk = 0; } if (chk) { *owner = i; break; } } } else { Integer index[MAXDIM]; Integer i; for (i=0; i= ifirst && nfirst < 0) { nfirst = i; } if (ilast <= icnt-1 && nfirst >= 0 && nlast < 0) { nlast = i; } } /* Adjust indices corresponding to start and end of block of shared memory so that it can be decomposed into large rectangular blocks of the global array. Start by adusting the lower index */ icnt = 0; for (i = 0; i= lo[j]) { nelems *= (hi[j] - lo[j] + 1); } else { nelems = 0; } } icnt += nelems; } /* calculate offset in local block of memory */ ifirst = ifirst - icnt; /* find dimensions of data on block nfirst */ np = nfirst; pnga_distribution(g_a, np, lo, hi); nelems = 1; for (i=0; i GA[handle].dims[ndim-1]-1) ifirst=GA[handle].dims[ndim-1]-1; /* adjust value of ifirst */ pnga_proc_topology(g_a, nfirst, index); subscript[ndim-1] = ifirst; for (i=0; i nfirst) { icnt = 0; for (i = 0; i= lo[j]) { nelems *= (hi[j] - lo[j] + 1); } else { nelems = 0; } } icnt += nelems; } } ilast = ilast - icnt; /* find dimensions of data on block nlast */ np = nlast; pnga_distribution(g_a, np, lo, hi); nelems = 1; for (i=0; i GA[handle].dims[i]) { GA[handle].last[i] = GA[handle].dims[i]; } } /* find length of shared memory segment owned by this node. Adjust * length, if necessary, to account for gaps in memory between * processors */ type = GA[handle].type; switch(type) { case C_FLOAT: size = sizeof(float); break; case C_DBL: size = sizeof(double); break; case C_LONG: size = sizeof(long); break; case C_LONGLONG: size = sizeof(long long); break; case C_INT: size = sizeof(int); break; case C_SCPL: size = 2*sizeof(float); break; case C_DCPL: size = 2*sizeof(double); break; default: pnga_error("type not supported",type); } for (i=0; i 0) parent_grp = PGRP_LIST[GA_Default_Proc_Group].group; else ARMCI_Group_get_world(&parent_grp); ARMCI_Group_set_default(&parent_grp); } #endif } /** * Create a new processor group containing count processors with * process IDs (in the default group) in list. Return process group * handle. */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_pgroup_create = pnga_pgroup_create #endif Integer pnga_pgroup_create(Integer *list, Integer count) { Integer pgrp_handle, i, j, nprocs, itmp; Integer parent; int tmp_count; Integer *tmp_list; int *tmp2_list; #ifdef MPI ARMCI_Group *tmpgrp; #endif GA_PUSH_NAME("ga_pgroup_create"); /* Allocate temporary arrays */ tmp_list = (Integer*)malloc(GAnproc*sizeof(Integer)); tmp2_list = (int*)malloc(GAnproc*sizeof(int)); /*** Get next free process group handle ***/ pgrp_handle =-1; i=0; do{ if(!PGRP_LIST[i].actv) pgrp_handle=i; i++; }while(i<_max_global_array && pgrp_handle==-1); if( pgrp_handle == -1) pnga_error(" Too many process groups ", (Integer)_max_global_array); /* Check list for validity (no duplicates and no out of range entries) */ nprocs = GAnproc; for (i=0; i= nprocs) pnga_error(" invalid element in list ", list[i]); for (j=i+1; j=0 && tmp2_list[i] > itmp) { tmp2_list[i+1] = tmp2_list[i]; i--; } tmp2_list[i+1] = itmp; } /* Remap elements in list to absolute processor indices (if necessary)*/ if (GA_Default_Proc_Group != -1) { parent = GA_Default_Proc_Group; for (i=0; i grp_size*grp_num) grp_size++; /* Figure out what procs are in my group */ ratio = me/grp_size; start = ratio*grp_size; end = (ratio+1)*grp_size-1; end = GA_MIN(end,nprocs-1); if (end0) { grp_id = pnga_pgroup_create(nodes, grp_size); if (i == end + 1) { ret = grp_id; } icnt = 0; } nodes[icnt] = i; icnt++; } grp_id = pnga_pgroup_create(nodes, icnt); if (end == nprocs-1) { ret = grp_id; } pnga_pgroup_set_default(default_grp); if(ret==-1) pnga_error("ga_pgroup_split failed",ret); /* Free temporary array */ GA_POP_NAME; free(nodes); return ret; } /** * Split grp into multiple groups based on the color in mycolor. All processes * in grp with the same color are assigned to the same group. */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_pgroup_split_irreg = pnga_pgroup_split_irreg #endif Integer pnga_pgroup_split_irreg(Integer grp, Integer mycolor) { Integer nprocs, me, default_grp, grp_id; Integer i, icnt=0; Integer *nodes, *color_arr; GA_PUSH_NAME("ga_pgroup_split_irreg_"); /* Allocate temporary arrays */ nodes = (Integer*)malloc(GAnproc*sizeof(Integer)); color_arr = (Integer*)malloc(GAnproc*sizeof(Integer)); if(mycolor<0) pnga_error("Invalid argument (color < 0)",mycolor); default_grp = pnga_pgroup_get_default(); pnga_pgroup_set_default(grp); nprocs = pnga_nnodes(); me = pnga_nodeid(); /* Figure out what procs are in my group */ for(i=0; i FNAM) pnga_error("Array name exceeds maximum array name length",FNAM); strcpy(GA[ga_handle].name, array_name); GA_POP_NAME; } /** * Set the processor group on a new global array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_set_pgroup = pnga_set_pgroup #endif void pnga_set_pgroup(Integer g_a, Integer p_handle) { Integer ga_handle = g_a + GA_OFFSET; GA_PUSH_NAME("ga_set_pgroup"); if (GA[ga_handle].actv == 1) pnga_error("Cannot set processor configuration on array that has been allocated",0); if (p_handle == GA_World_Proc_Group || PGRP_LIST[p_handle].actv == 1) { GA[ga_handle].p_handle = (int) (p_handle); } else { pnga_error("Processor group does not exist",0); } GA_POP_NAME; } /** * Get the processor group handle associated with g_a */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_get_pgroup = pnga_get_pgroup #endif Integer pnga_get_pgroup(Integer g_a) { Integer ga_handle = g_a + GA_OFFSET; return (Integer)GA[ga_handle].p_handle; } /** * Return the number of processors associated with a processor group */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_get_pgroup_size = pnga_get_pgroup_size #endif Integer pnga_get_pgroup_size(Integer grp_id) { int p_handle = (int)(grp_id); if (p_handle > 0) { return (Integer)PGRP_LIST[p_handle].map_nproc; } else { return GAnproc; } } /** * Add ghost cells to a new global array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_set_ghosts = pnga_set_ghosts #endif void pnga_set_ghosts(Integer g_a, Integer *width) { Integer i; Integer ga_handle = g_a + GA_OFFSET; GA_PUSH_NAME("ga_set_ghosts"); if (GA[ga_handle].actv == 1) pnga_error("Cannot set ghost widths on array that has been allocated",0); if (GA[ga_handle].ndim < 1) pnga_error("Dimensions must be set before array widths are specified",0); for (i=0; i GA[ga_handle].dims[i]) pnga_error("Boundary width must be <= corresponding dimension",i); if ((C_Integer)width[i] < 0) pnga_error("Boundary width must be >= 0",i); } for (i=0; i 0) GA[ga_handle].ghosts = 1; } GA_POP_NAME; } /** * Set irregular distribution in a new global array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_set_irreg_distr = pnga_set_irreg_distr #endif void pnga_set_irreg_distr(Integer g_a, Integer *mapc, Integer *nblock) { Integer i, j, ichk, maplen; Integer ga_handle = g_a + GA_OFFSET; GA_PUSH_NAME("ga_set_irreg_distr"); if (GA[ga_handle].actv == 1) pnga_error("Cannot set irregular data distribution on array that has been allocated",0); if (GA[ga_handle].ndim < 1) pnga_error("Dimensions must be set before irregular distribution is specified",0); for (i=0; i GA[ga_handle].dims[i]) pnga_error("number of blocks must be <= corresponding dimension",i); /* Check to see that mapc array is sensible */ maplen = 0; for (i=0; i GA[ga_handle].dims[i]) pnga_error("Mapc entry outside array dimension limits",ichk); maplen++; for (j=1; j GA[ga_handle].dims[i]) pnga_error("Mapc entry outside array dimension limits",ichk); maplen++; } } maplen = 0; for (i=0; i 0)) pnga_error("Cannot set block-cyclic data distribution if array size not set",0); if (GA[ga_handle].block_flag == 1) pnga_error("Cannot reset block-cyclic data distribution on array that has been set",0); GA[ga_handle].block_flag = 1; GA[ga_handle].block_sl_flag = 0; /* evaluate number of blocks in each dimension */ for (i=0; i 0)) pnga_error("Cannot set block-cyclic data distribution if array size not set",0); if (GA[ga_handle].block_flag == 1) pnga_error("Cannot reset block-cyclic data distribution on array that has been set",0); GA[ga_handle].block_flag = 1; GA[ga_handle].block_sl_flag = 1; /* Check to make sure processor grid is compatible with total number of processors */ tot = 1; for (i=0; i 0) { me = PGRP_LIST[p_handle].map_proc_list[GAme]; nproc = PGRP_LIST[p_handle].map_nproc; } else { me = GAme; nproc = GAnproc; } has_data = 0; for (i=0; i= nproc) pnga_error("Invalid processor in list",list[i]); ig = list[i]; GA[ga_handle].rank_rstrctd[ig] = i; } GA[ga_handle].has_data = has_data; GA[ga_handle].rstrctd_id = id; GA_POP_NAME; } /** * Restrict processors that actually contain data in the global array * by specifying a range of processors */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_set_restricted_range = pnga_set_restricted_range #endif void pnga_set_restricted_range(Integer g_a, Integer lo_proc, Integer hi_proc) { Integer i, ig, id=0, me, p_handle, has_data, icnt, nproc, size; Integer ga_handle = g_a + GA_OFFSET; size = hi_proc - lo_proc + 1; GA_PUSH_NAME("ga_set_restricted_range"); GA[ga_handle].num_rstrctd = size; GA[ga_handle].rstrctd_list = (Integer*)malloc((size)*sizeof(Integer)); GA[ga_handle].rank_rstrctd = (Integer*)malloc((GAnproc)*sizeof(Integer)); p_handle = GA[ga_handle].p_handle; if (p_handle == -2) p_handle = pnga_pgroup_get_default(); if (p_handle > 0) { me = PGRP_LIST[p_handle].map_proc_list[GAme]; nproc = PGRP_LIST[p_handle].map_nproc; } else { me = GAme; nproc = GAnproc; } has_data = 0; for (i=0; i= nproc) pnga_error("Invalid processor in list",i); ig = i; GA[ga_handle].rank_rstrctd[ig] = icnt; icnt++; } GA[ga_handle].has_data = has_data; GA[ga_handle].rstrctd_id = id; GA_POP_NAME; } /** * Allocate memory and complete setup of global array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_allocate = pnga_allocate #endif logical pnga_allocate(Integer g_a) { Integer hi[MAXDIM]; Integer ga_handle = g_a + GA_OFFSET; Integer d, width[MAXDIM], ndim; Integer mem_size, nelem; Integer i, status, maplen=0, p_handle; Integer dims[MAXDIM], chunk[MAXDIM]; Integer pe[MAXDIM], *pmap[MAXDIM], *map; Integer blk[MAXDIM]; Integer grp_me=GAme, grp_nproc=GAnproc; Integer block_size = 0; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous sync masking*/ if (GA[ga_handle].ndim == -1) pnga_error("Insufficient data to create global array",0); p_handle = (Integer)GA[ga_handle].p_handle; if (p_handle == (Integer)GA_Init_Proc_Group) { GA[ga_handle].p_handle = GA_Default_Proc_Group; p_handle = GA_Default_Proc_Group; } pnga_pgroup_sync(p_handle); GA_PUSH_NAME("ga_allocate"); if (p_handle > 0) { grp_nproc = PGRP_LIST[p_handle].map_nproc; grp_me = PGRP_LIST[p_handle].map_proc_list[GAme]; } if(!GAinitialized) pnga_error("GA not initialized ", 0); if(!ma_address_init) gai_ma_address_init(); ndim = GA[ga_handle].ndim; for (i=0; i 1) { Integer ddim = ((dims[d]-1)/GA_MIN(chunk[d],dims[d]) + 1); pcut = (ddim -(blk[d]-1)*pe[d]) ; } else { pcut = (dims[d]-(blk[d]-1)*pe[d]) ; } for (nblock=i=p=0; (p= pcut) b = b-1; map[nblock] = i+1; if (chunk[d]>1) b *= GA_MIN(chunk[d],dims[d]); i += b; } pe[d] = GA_MIN(pe[d],nblock); map += pe[d]; } if(GAme==0&& DEBUG){ gai_print_subscript("pe ",(int)ndim, pe,"\n"); gai_print_subscript("blocks ",(int)ndim, blk,"\n"); printf("decomposition map\n"); for(d=0; d< ndim; d++){ printf("dim=%ld: ",(long)d); for (i=0;i GA[ga_handle].dims[i]) imax = GA[ga_handle].dims[i]; jtot += (imax-imin+1); } block_size *= jtot; } } } GAstat.numcre ++; GA[ga_handle].actv = 1; /* If only one node is being used and array is mirrored, * set proc list to world group */ if (pnga_cluster_nnodes() == 1 && GA[ga_handle].p_handle == 0) { GA[ga_handle].p_handle = pnga_pgroup_get_world(); } /* Set remaining paramters and determine memory size if regular data * distribution is being used */ if (GA[ga_handle].block_flag == 0) { /* set corner flag, if it has not already been set and set up message passing data */ if (GA[ga_handle].corner_flag == -1) { i = 1; } else { i = GA[ga_handle].corner_flag; } for( i = 0; i< ndim; i++){ GA[ga_handle].scale[i] = (double)GA[ga_handle].nblock[i] / (double)GA[ga_handle].dims[i]; } pnga_set_ghost_corner_flag(g_a, i); /*** determine which portion of the array I am supposed to hold ***/ if (p_handle == 0) { /* for mirrored arrays */ Integer me_local = (Integer)PGRP_LIST[p_handle].map_proc_list[GAme]; pnga_distribution(g_a, me_local, GA[ga_handle].lo, hi); } else { pnga_distribution(g_a, grp_me, GA[ga_handle].lo, hi); } if (GA[ga_handle].num_rstrctd == 0 || GA[ga_handle].has_data == 1) { for( i = 0, nelem=1; i< ndim; i++){ GA[ga_handle].chunk[i] = ((C_Integer)hi[i]-GA[ga_handle].lo[i]+1); nelem *= (hi[i]-(Integer)GA[ga_handle].lo[i]+1+2*width[i]); } } else { nelem = 0; } mem_size = nelem * GA[ga_handle].elemsize; } else { mem_size = block_size * GA[ga_handle].elemsize; } GA[ga_handle].id = INVALID_MA_HANDLE; GA[ga_handle].size = (C_Long)mem_size; /* if requested, enforce limits on memory consumption */ if(GA_memory_limited) GA_total_memory -= mem_size; /* check if everybody has enough memory left */ if(GA_memory_limited){ status = (GA_total_memory >= 0) ? 1 : 0; if (p_handle > 0) { pnga_pgroup_gop(p_handle,pnga_type_f2c(MT_F_INT), &status, 1, "*"); } else { pnga_gop(pnga_type_f2c(MT_F_INT), &status, 1, "*"); } }else status = 1; if (status) { status = !gai_getmem(GA[ga_handle].name, GA[ga_handle].ptr,mem_size, GA[ga_handle].type, &GA[ga_handle].id, p_handle); } else { GA[ga_handle].ptr[grp_me]=NULL; } if (GA[ga_handle].block_flag == 0) { /* Finish setting up information for ghost cell updates */ if (GA[ga_handle].ghosts == 1) { if (!pnga_set_ghost_info(g_a)) pnga_error("Could not allocate update information for ghost cells",0); } /* If array is mirrored, evaluate first and last indices */ /* ngai_get_first_last_indices(&g_a); */ } pnga_pgroup_sync(p_handle); if (status) { GAstat.curmem += (long)GA[ga_handle].size; GAstat.maxmem = (long)GA_MAX(GAstat.maxmem, GAstat.curmem); status = TRUE; } else { if(GA_memory_limited) GA_total_memory += mem_size; pnga_destroy(g_a); status = FALSE; } GA_POP_NAME; return status; } /** * Create an N-dimensional Global Array with ghost cells using an * irregular distribution on a user-specified process group. * This is the master routine. All other creation routines are derived * from this one. */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_create_ghosts_irreg_config = pnga_create_ghosts_irreg_config #endif logical pnga_create_ghosts_irreg_config( Integer type, /* MA type */ Integer ndim, /* number of dimensions */ Integer *dims, /* array of dimensions */ Integer *width, /* width of boundary cells for each dimension */ char *array_name, /* array name */ Integer *map, /* decomposition map array */ Integer *nblock, /* number of blocks for each dimension in map */ Integer p_handle, /* processor list handle */ Integer *g_a) /* array handle (output) */ { logical status; Integer g_A; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous sync masking*/ pnga_pgroup_sync(p_handle); GA_PUSH_NAME("pnga_create_ghosts_irreg_config"); g_A = pnga_create_handle(); *g_a = g_A; pnga_set_data(g_A,ndim,dims,type); pnga_set_ghosts(g_A,width); pnga_set_array_name(g_A,array_name); pnga_set_irreg_distr(g_A,map,nblock); pnga_set_pgroup(g_A,p_handle); status = pnga_allocate(g_A); GA_POP_NAME; return status; } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_create_ghosts_irreg = pnga_create_ghosts_irreg #endif logical pnga_create_ghosts_irreg( Integer type, /* MA type */ Integer ndim, /* number of dimensions */ Integer dims[], /* array of dimensions */ Integer width[], /* width of boundary cells for each dimension */ char *array_name, /* array name */ Integer map[], /* decomposition map array */ Integer nblock[], /* number of blocks for each dimension in map */ Integer *g_a) /* array handle (output) */ { Integer p_handle = pnga_pgroup_get_default(); return pnga_create_ghosts_irreg_config(type, ndim, dims, width, array_name, map, nblock, p_handle, g_a); } /** Create an N-dimensional Global Array on user-specified process group. * Allow machine to choose location of array boundaries on individual * processors */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_create_config = pnga_create_config #endif logical pnga_create_config(Integer type, Integer ndim, Integer dims[], char* array_name, Integer *chunk, Integer p_handle, Integer *g_a) { logical status; Integer g_A; GA_PUSH_NAME("pnga_create_config"); g_A = pnga_create_handle(); *g_a = g_A; pnga_set_data(g_A,ndim,dims,type); pnga_set_array_name(g_A,array_name); pnga_set_chunk(g_A,chunk); pnga_set_pgroup(g_A,p_handle); status = pnga_allocate(g_A); GA_POP_NAME; return status; } /** Create an N-dimensional Global Array on default processor group. * Allow machine to choose location of array boundaries on individual * processors */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_create = pnga_create #endif logical pnga_create(Integer type, Integer ndim, Integer dims[], char* array_name, Integer *chunk, Integer *g_a) { Integer p_handle = pnga_pgroup_get_default(); return pnga_create_config(type, ndim, dims, array_name, chunk, p_handle, g_a); } /*\ CREATE AN N-DIMENSIONAL GLOBAL ARRAY WITH GHOST CELLS * Allow machine to choose location of array boundaries on individual * processors. \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_create_ghosts_config = pnga_create_ghosts_config #endif logical pnga_create_ghosts_config(Integer type, Integer ndim, Integer dims[], Integer width[], char* array_name, Integer chunk[], Integer p_handle, Integer *g_a) { logical status; Integer g_A; GA_PUSH_NAME("nga_create_ghosts_config"); g_A = pnga_create_handle(); *g_a = g_A; pnga_set_data(g_A,ndim,dims,type); pnga_set_ghosts(g_A,width); pnga_set_array_name(g_A,array_name); pnga_set_chunk(g_A,chunk); pnga_set_pgroup(g_A,p_handle); status = pnga_allocate(g_A); GA_POP_NAME; return status; } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_create_ghosts = pnga_create_ghosts #endif logical pnga_create_ghosts(Integer type, Integer ndim, Integer dims[], Integer width[], char* array_name, Integer chunk[], Integer *g_a) { Integer p_handle = pnga_pgroup_get_default(); return pnga_create_ghosts_config(type, ndim, dims, width, array_name, chunk, p_handle, g_a); } /** * Create a Global Array with an irregular distribution and a user-specified * process group. The user can specify location of array boundaries on * individual processors. */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_create_irreg_config = pnga_create_irreg_config #endif logical pnga_create_irreg_config( Integer type, /* MA type */ Integer ndim, /* number of dimensions */ Integer dims[], /* array of dimensions */ char *array_name, /* array name */ Integer map[], /* decomposition map array */ Integer nblock[], /* number of blocks for each dimension in map */ Integer p_handle, /* processor list hande */ Integer *g_a) /* array handle (output) */ { Integer d,width[MAXDIM]; logical status; for (d=0; d 0) { nproc = PGRP_LIST[grp_id].map_nproc; grp_me = PGRP_LIST[grp_id].map_proc_list[GAme]; } else nproc = GAnproc; /* need to enforce proper, natural allignment (on size boundary) */ switch (pnga_type_c2f(type)){ case MT_F_DBL: base = (char *) DBL_MB; break; case MT_F_INT: base = (char *) INT_MB; break; case MT_F_DCPL: base = (char *) DCPL_MB; break; case MT_F_SCPL: base = (char *) SCPL_MB; break; case MT_F_REAL: base = (char *) FLT_MB; break; default: base = (char*)0; } item_size = GAsizeofM(type); # ifdef GA_ELEM_PADDING bytes += (C_Long)item_size; # endif #endif *adj = 0; #ifdef PERMUTE_PIDS if(GA_Proc_list){ bzero(ptr_array,nproc*sizeof(char*)); /* use ARMCI_Malloc_group for groups if proc group is not world group or mirror group */ # ifdef MPI if (grp_id > 0) status = ARMCI_Malloc_group((void**)ptr_array, bytes, &PGRP_LIST[grp_id].group); else # endif status = ARMCI_Malloc((void**)ptr_array, bytes); if(bytes!=0 && ptr_array[grp_me]==NULL) pnga_error("gai_get_shmem: ARMCI Malloc failed", GAme); for(i=0;i 0) { status = ARMCI_Malloc_group((void**)ptr_arr, (armci_size_t)bytes, &PGRP_LIST[grp_id].group); } else #endif status = ARMCI_Malloc((void**)ptr_arr, (armci_size_t)bytes); if(bytes!=0 && ptr_arr[grp_me]==NULL) pnga_error("gai_get_shmem: ARMCI Malloc failed", GAme); if(status) return status; #ifndef _CHECK_MA_ALGN /* adjust all addresses if they are not alligned on corresponding nodes*/ /* we need storage for GAnproc*sizeof(Integer) */ /* JAD -- fixed bug where _ga_map was reused before gai_getmem was done * with it. Now malloc/free needed memory. */ adjust = (Integer*)malloc(GAnproc*sizeof(Integer)); diff = (GA_ABS( base - (char *) ptr_arr[grp_me])) % item_size; for(i=0;i 0) ? item_size - diff : 0; *adj = adjust[grp_me]; if (grp_id > 0) pnga_pgroup_gop(grp_id, pnga_type_f2c(MT_F_INT), adjust, nproc, "+"); else pnga_gop(pnga_type_f2c(MT_F_INT), adjust, nproc, "+"); for(i=0;i 0) return ARMCI_Uses_shm_grp(&PGRP_LIST[grp_id].group); else #endif return ARMCI_Uses_shm(); } int gai_getmem(char* name, char **ptr_arr, C_Long bytes, int type, long *id, int grp_id) { #ifdef AVOID_MA_STORAGE return gai_get_shmem(ptr_arr, bytes, type, id, grp_id); #else Integer handle = INVALID_MA_HANDLE, index; Integer nproc=GAnproc, grp_me=GAme, item_size = GAsizeofM(type); C_Long nelem; char *ptr = (char*)0; if (grp_id > 0) { nproc = PGRP_LIST[grp_id].map_nproc; grp_me = PGRP_LIST[grp_id].map_proc_list[GAme]; } if(gai_uses_shm(grp_id)) return gai_get_shmem(ptr_arr, bytes, type, id, grp_id); else{ nelem = bytes/((C_Long)item_size) + 1; if(bytes) if(MA_alloc_get(type, nelem, name, &handle, &index)){ MA_get_pointer(handle, &ptr);} *id = (long)handle; /* printf("bytes=%d ptr=%ld index=%d\n",bytes, ptr,index); fflush(stdout); */ bzero((char*)ptr_arr,(int)nproc*sizeof(char*)); ptr_arr[grp_me] = ptr; # ifndef _CHECK_MA_ALGN /* align */ { long diff, adjust; diff = ((unsigned long)ptr_arr[grp_me]) % item_size; adjust = (diff > 0) ? item_size - diff : 0; ptr_arr[grp_me] = adjust + (char*)ptr_arr[grp_me]; } # endif # ifdef MPI if (grp_id > 0) { armci_exchange_address_grp((void**)ptr_arr,(int)nproc, &PGRP_LIST[grp_id].group); } else # endif armci_exchange_address((void**)ptr_arr,(int)nproc); if(bytes && !ptr) return 1; else return 0; } #endif /* AVOID_MA_STORAGE */ } /*\ externalized version of gai_getmem to facilitate two-step array creation \*/ void *GA_Getmem(int type, int nelem, int grp_id) { char **ptr_arr=(char**)0; int rc,i; long id; int bytes; int extra=sizeof(getmem_t)+GAnproc*sizeof(char*); char *myptr; Integer status; type = pnga_type_f2c(type); bytes = nelem * GAsizeofM(type); if(GA_memory_limited){ GA_total_memory -= bytes+extra; status = (GA_total_memory >= 0) ? 1 : 0; pnga_gop(pnga_type_f2c(MT_F_INT), &status, 1, "*"); if(!status)GA_total_memory +=bytes+extra; }else status = 1; ptr_arr=(char**)_ga_map; /* need memory GAnproc*sizeof(char**) */ rc= gai_getmem("ga_getmem", ptr_arr,(Integer)bytes+extra, type, &id, grp_id); if(rc)pnga_error("ga_getmem: failed to allocate memory",bytes+extra); myptr = ptr_arr[GAme]; /* make sure that remote memory addresses point to user memory */ for(i=0; iid = id; ((getmem_t*)myptr)->type = type; ((getmem_t*)myptr)->size = bytes+extra; /* add ptr info */ memcpy(myptr+sizeof(getmem_t),ptr_arr,(size_t)GAnproc*sizeof(char**)); return (void*)(myptr+extra); } void GA_Freemem(void *ptr) { int extra = sizeof(getmem_t)+GAnproc*sizeof(char*); getmem_t *info = (getmem_t *)((char*)ptr - extra); char **ptr_arr = (char**)(info+1); #ifndef AVOID_MA_STORAGE if(ARMCI_Uses_shm()){ #endif /* make sure that we free original (before address alignment) pointer */ ARMCI_Free(ptr_arr[GAme] - info->id); #ifndef AVOID_MA_STORAGE }else{ if(info->id != INVALID_MA_HANDLE) MA_free_heap(info->id); } #endif if(GA_memory_limited) GA_total_memory += info->size; } /** * Return coordinates of a GA patch associated with processor proc */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_distribution = pnga_distribution #endif void pnga_distribution(Integer g_a, Integer proc, Integer *lo, Integer * hi) { Integer ga_handle, lproc; ga_check_handleM(g_a, "nga_distribution"); ga_handle = (GA_OFFSET + g_a); lproc = proc; if (GA[ga_handle].num_rstrctd > 0) { lproc = GA[ga_handle].rank_rstrctd[lproc]; } if (GA[ga_handle].block_flag == 0) { ga_ownsM(ga_handle, lproc, lo, hi); } else { C_Integer index[MAXDIM]; int ndim = GA[ga_handle].ndim; int i; gam_find_block_indices(ga_handle,lproc,index); for (i=0; i GA[ga_handle].dims[i]) hi[i] = GA[ga_handle].dims[i]; } } } /** * Check to see if array has ghost cells. */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_has_ghosts = pnga_has_ghosts #endif logical pnga_has_ghosts(Integer g_a) { int h_a = (int)g_a + GA_OFFSET; return GA[h_a].ghosts; } /** * Return the dimension of a Global Array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_ndim = pnga_ndim #endif Integer pnga_ndim(Integer g_a) { ga_check_handleM(g_a,"ga_ndim"); return GA[g_a +GA_OFFSET].ndim; } /** * Duplicate an existing global array * -- new array g_b will have properties of g_a * array_name - a character string [input] * g_a - Integer handle for reference array [input] * g_b - Integer handle for new array [output] \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_duplicate = pnga_duplicate #endif logical pnga_duplicate(Integer g_a, Integer *g_b, char* array_name) { char **save_ptr; C_Long mem_size, mem_size_proc; Integer i, ga_handle, status; int local_sync_begin,local_sync_end; Integer grp_id, grp_me=GAme; /* Integer grp_nproc=GAnproc; */ int maplen = calc_maplen(GA_OFFSET + g_a); local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ grp_id = pnga_get_pgroup(g_a); if(local_sync_begin)pnga_pgroup_sync(grp_id); if (grp_id > 0) { /* grp_nproc = PGRP_LIST[grp_id].map_nproc; */ grp_me = PGRP_LIST[grp_id].map_proc_list[GAme]; } GAstat.numcre ++; ga_check_handleM(g_a,"ga_duplicate"); /* find a free global_array handle for g_b */ ga_handle =-1; i=0; do{ if(!GA[i].actv_handle) ga_handle=i; i++; }while(i<_max_global_array && ga_handle==-1); if( ga_handle == -1) pnga_error("ga_duplicate: too many arrays", (Integer)_max_global_array); *g_b = (Integer)ga_handle - GA_OFFSET; GA[ga_handle].actv_handle = 1; gai_init_struct(ga_handle); /*** copy content of the data structure ***/ save_ptr = GA[ga_handle].ptr; GA[ga_handle] = GA[GA_OFFSET + g_a]; /* <--- shallow copy */ strcpy(GA[ga_handle].name, array_name); GA[ga_handle].ptr = save_ptr; if (maplen > 0) { GA[ga_handle].mapc = (C_Integer*)malloc((maplen+1)*sizeof(C_Integer*)); for(i=0;i 0) { GA[ga_handle].num_rstrctd = GA[GA_OFFSET + g_a].num_rstrctd; pnga_set_restricted(*g_b, GA[GA_OFFSET + g_a].rstrctd_list, GA[GA_OFFSET + g_a].num_rstrctd); } /*** Memory Allocation & Initialization of GA Addressing Space ***/ mem_size = mem_size_proc = GA[ga_handle].size; GA[ga_handle].id = INVALID_MA_HANDLE; /* if requested, enforce limits on memory consumption */ if(GA_memory_limited) GA_total_memory -= mem_size_proc; /* check if everybody has enough memory left */ if(GA_memory_limited){ status = (GA_total_memory >= 0) ? 1 : 0; if (grp_id > 0) { pnga_pgroup_gop(grp_id, pnga_type_f2c(MT_F_INT), &status, 1, "*"); status = (Integer)status; } else { pnga_gop(pnga_type_f2c(MT_F_INT), &status, 1, "*"); } }else status = 1; if(status) { status = !gai_getmem(array_name, GA[ga_handle].ptr,mem_size, (int)GA[ga_handle].type, &GA[ga_handle].id, (int)grp_id); } else{ GA[ga_handle].ptr[grp_me]=NULL; } if(local_sync_end)pnga_pgroup_sync(grp_id); # ifdef GA_CREATE_INDEF /* This code is incorrect. It needs to fixed if INDEF is ever used */ if(status){ Integer one = 1; Integer dim1 =(Integer)GA[ga_handle].dims[1], dim2=(Integer)GA[ga_handle].dims[2]; if(GAme==0)fprintf(stderr,"duplicate:initializing GA array%ld\n",g_b); if(GA[ga_handle].type == C_DBL) { double bad = (double) DBL_MAX; ga_fill_patch_(g_b, &one, &dim1, &one, &dim2, &bad); } else if (GA[ga_handle].type == C_INT) { int bad = (int) INT_MAX; ga_fill_patch_(g_b, &one, &dim1, &one, &dim2, &bad); } else if (GA[ga_handle].type == C_LONG) { long bad = LONG_MAX; ga_fill_patch_(g_b, &one, &dim1, &one, &dim2, &bad); } else if (GA[ga_handle].type == C_LONGLONG) { long long bad = LONG_MAX; ga_fill_patch_(g_b, &one, &dim1, &one, &dim2, &bad); } else if (GA[ga_handle].type == C_DCPL) { DoubleComplex bad = {DBL_MAX, DBL_MAX}; ga_fill_patch_(g_b, &one, &dim1, &one, &dim2, &bad); } else if (GA[ga_handle].type == C_SCPL) { SingleComplex bad = {FLT_MAX, FLT_MAX}; ga_fill_patch_(g_b, &one, &dim1, &one, &dim2, &bad); } else if (GA[ga_handle].type == C_FLOAT) { float bad = FLT_MAX; ga_fill_patch_(g_b, &one, &dim1, &one, &dim2, &bad); } else { pnga_error("ga_duplicate: type not supported ",GA[ga_handle].type); } } # endif if(status){ GAstat.curmem += (long)GA[ga_handle].size; GAstat.maxmem = (long)GA_MAX(GAstat.maxmem, GAstat.curmem); return(TRUE); }else{ if (GA_memory_limited) GA_total_memory += mem_size_proc; pnga_destroy(*g_b); return(FALSE); } } /*\ DUPLICATE A GLOBAL ARRAY -- memory comes from user * -- new array g_b will have properties of g_a \*/ int GA_Assemble_duplicate(int g_a, char* array_name, void* ptr) { char **save_ptr; int i, ga_handle; int extra = sizeof(getmem_t)+GAnproc*sizeof(char*); getmem_t *info = (getmem_t *)((char*)ptr - extra); char **ptr_arr = (char**)(info+1); int g_b; int maplen = calc_maplen(GA_OFFSET + g_a); pnga_sync(); GAstat.numcre ++; ga_check_handleM(g_a,"ga_assemble_duplicate"); /* find a free global_array handle for g_b */ ga_handle =-1; i=0; do{ if(!GA[i].actv_handle) ga_handle=i; i++; }while(i<_max_global_array && ga_handle==-1); if( ga_handle == -1) pnga_error("ga_assemble_duplicate: too many arrays ", (Integer)_max_global_array); g_b = ga_handle - GA_OFFSET; gai_init_struct(ga_handle); GA[ga_handle].actv_handle = 1; /*** copy content of the data structure ***/ save_ptr = GA[ga_handle].ptr; GA[ga_handle] = GA[GA_OFFSET + g_a]; strcpy(GA[ga_handle].name, array_name); GA[ga_handle].ptr = save_ptr; if (maplen > 0) { GA[ga_handle].mapc = (C_Integer*)malloc((maplen+1)*sizeof(C_Integer*)); for(i=0;itype)); GA[ga_handle].type = pnga_type_f2c(info->type); GA[ga_handle].size = (C_Long)info->size; GA[ga_handle].id = info->id; memcpy(GA[ga_handle].ptr,ptr_arr,(size_t)GAnproc*sizeof(char**)); GAstat.curmem += (long)GA[ga_handle].size; GAstat.maxmem = (long)GA_MAX(GAstat.maxmem, GAstat.curmem); pnga_sync(); return(g_b); } /** * Destroy a Global Array and clean up memory */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_destroy = pnga_destroy #endif logical pnga_destroy(Integer g_a) { Integer ga_handle = GA_OFFSET + g_a, grp_id, grp_me=GAme; int local_sync_begin,local_sync_end; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ grp_id = (Integer)GA[ga_handle].p_handle; if(local_sync_begin)pnga_pgroup_sync(grp_id); if (grp_id > 0) grp_me = PGRP_LIST[grp_id].map_proc_list[GAme]; else grp_me=GAme; GAstat.numdes ++; /*regardless of array status we count this call */ /* fails if handle is out of range or array not active */ if(ga_handle < 0 || ga_handle >= _max_global_array){ return FALSE; } if(GA[ga_handle].actv==0){ return FALSE; } if (GA[ga_handle].cache) free(GA[ga_handle].cache); GA[ga_handle].cache = NULL; GA[ga_handle].actv = 0; GA[ga_handle].actv_handle = 0; if (GA[ga_handle].num_rstrctd > 0) { GA[ga_handle].num_rstrctd = 0; if (GA[ga_handle].rstrctd_list) free(GA[ga_handle].rstrctd_list); GA[ga_handle].rstrctd_list = NULL; if (GA[ga_handle].rank_rstrctd) free(GA[ga_handle].rank_rstrctd); GA[ga_handle].rank_rstrctd = NULL; } if(GA[ga_handle].mapc != NULL){ free(GA[ga_handle].mapc); GA[ga_handle].mapc = NULL; } if(GA[ga_handle].ptr[grp_me]==NULL){ return TRUE; } #ifndef AVOID_MA_STORAGE if(gai_uses_shm((int)grp_id)){ #endif /* make sure that we free original (before address allignment) pointer */ #ifdef MPI if (grp_id > 0){ ARMCI_Free_group(GA[ga_handle].ptr[grp_me] - GA[ga_handle].id, &PGRP_LIST[grp_id].group); } else #endif ARMCI_Free(GA[ga_handle].ptr[GAme] - GA[ga_handle].id); #ifndef AVOID_MA_STORAGE }else{ if(GA[ga_handle].id != INVALID_MA_HANDLE) MA_free_heap(GA[ga_handle].id); } #endif if(GA_memory_limited) GA_total_memory += GA[ga_handle].size; GAstat.curmem -= GA[ga_handle].size; if(local_sync_end)pnga_pgroup_sync(grp_id); return(TRUE); } /** * Terminate Global Array structures * * All GA arrays are destroyed & shared memory is dealocated * GA routines (except for ga_initialize) should not be called thereafter */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_terminate = pnga_terminate #endif void pnga_terminate() { Integer i, handle; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(!GAinitialized) return; #ifdef PROFILE_OLD ga_profile_terminate(); #endif for (i=0;i<_max_global_array;i++){ handle = i - GA_OFFSET ; if(GA[i].actv) pnga_destroy(handle); if(GA[i].ptr) free(GA[i].ptr); if(GA[i].mapc) free(GA[i].mapc); } /* don't free groups list until all arrays destroyed */ for (i=0;i<_max_global_array;i++){ if(PGRP_LIST[i].actv) free(PGRP_LIST[i].map_proc_list); } pnga_sync(); GA_total_memory = -1; /* restore "unlimited" memory usage status */ GA_memory_limited = 0; gai_finalize_onesided(); free(GA_proclist); free(ProcListPerm); #ifdef PERMUTE_PIDS free(ptr_array); #endif free(mapALL); free(_ga_main_data_structure); free(_proc_list_main_data_structure); ARMCI_Free_local(GA_Update_Signal); pnga_sync(); ARMCI_Finalize(); ARMCIinitialized = 0; GAinitialized = 0; } /** * Is array active or inactive */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_verify_handle = pnga_verify_handle #endif Integer pnga_verify_handle(Integer g_a) { return (Integer) ((g_a + GA_OFFSET>= 0) && (g_a + GA_OFFSET< _max_global_array) && GA[GA_OFFSET + (g_a)].actv); } /** * Fill array with random values in [0,val) */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_randomize = pnga_randomize #endif void pnga_randomize(Integer g_a, void* val) { int i,handle=GA_OFFSET + (int)g_a; char *ptr; int local_sync_begin,local_sync_end; C_Long elems; Integer grp_id; Integer num_blocks; GA_PUSH_NAME("ga_randomize"); local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous sync masking*/ grp_id = pnga_get_pgroup(g_a); if(local_sync_begin)pnga_pgroup_sync(grp_id); ga_check_handleM(g_a, "ga_randomize"); gam_checktype(GA[handle].type); elems = GA[handle].size/((C_Long)GA[handle].elemsize); num_blocks = GA[handle].block_total; if (num_blocks < 0) { /* Bruce..Please CHECK if this is correct */ if (grp_id >= 0){ Integer grp_me = PGRP_LIST[GA[handle].p_handle].map_proc_list[GAme]; ptr = GA[handle].ptr[grp_me]; } else ptr = GA[handle].ptr[GAme]; switch (GA[handle].type){ /* case C_DCPL: for(i=0; i= 0){ Integer grp_me = PGRP_LIST[GA[handle].p_handle].map_proc_list[GAme]; ptr = GA[handle].ptr[grp_me]; } else ptr = GA[handle].ptr[GAme]; switch (GA[handle].type){ case C_DCPL: for(i=0; i= 0; i--) { ld *= block_grid[i]; *proc *= ld; *proc += index[i]; } *proc = *proc%pnga_nnodes(); } } #endif /*\ * RETURN HOW MANY PROCESSORS/OWNERS THERE ARE FOR THE SPECIFIED PATCH OF A * GLOBAL ARRAY \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_locate_nnodes = pnga_locate_nnodes #endif logical pnga_locate_nnodes( Integer g_a, Integer *lo, Integer *hi, Integer *np) /* g_a [input] global array handle lo [input] lower indices of patch in global array hi [input] upper indices of patch in global array np [output] total number of processors containing a portion of the patch For a block cyclic data distribution, this function returns a list of blocks that cover the region along with the lower and upper indices of each block. */ { int procT[MAXDIM], procB[MAXDIM], proc_subscript[MAXDIM]; Integer proc, i, ga_handle; Integer d, dpos, ndim, elems, use_blocks; /* Integer p_handle; */ ga_check_handleM(g_a, "nga_locate_nnodes"); ga_handle = GA_OFFSET + g_a; #ifdef __crayx1 #pragma _CRI novector #endif for(d = 0; d< GA[ga_handle].ndim; d++) if((lo[d]<1 || hi[d]>GA[ga_handle].dims[d]) ||(lo[d]>hi[d]))return FALSE; ndim = GA[ga_handle].ndim; use_blocks = GA[ga_handle].block_flag; if (!use_blocks) { /* find "processor coordinates" for the top left corner and store them * in ProcT */ #ifdef __crayx1 #pragma _CRI novector #endif for(d = 0, dpos = 0; d< GA[ga_handle].ndim; d++){ findblock(GA[ga_handle].mapc + dpos, GA[ga_handle].nblock[d], GA[ga_handle].scale[d], lo[d], &procT[d]); dpos += GA[ga_handle].nblock[d]; } /* find "processor coordinates" for the right bottom corner and store * them in procB */ #ifdef __crayx1 #pragma _CRI novector #endif for(d = 0, dpos = 0; d< GA[ga_handle].ndim; d++){ findblock(GA[ga_handle].mapc + dpos, GA[ga_handle].nblock[d], GA[ga_handle].scale[d], hi[d], &procB[d]); dpos += GA[ga_handle].nblock[d]; } *np = 0; /* Find total number of processors containing data and return the * result in elems. Also find the lowest "processor coordinates" of the * processor block containing data and return these in proc_subscript. */ ga_InitLoopM(&elems, ndim, proc_subscript, procT,procB,GA[ga_handle].nblock); /* p_handle = (Integer)GA[ga_handle].p_handle; */ for(i= 0; i< elems; i++){ Integer _lo[MAXDIM], _hi[MAXDIM]; /* convert i to owner processor id using the current values in proc_subscript */ ga_ComputeIndexM(&proc, ndim, proc_subscript, GA[ga_handle].nblock); /* get range of global array indices that are owned by owner */ ga_ownsM(ga_handle, proc, _lo, _hi); /* Update to proc_subscript so that it corresponds to the next * processor in the block of processors containing the patch */ ga_UpdateSubscriptM(ndim,proc_subscript,procT,procB,GA[ga_handle].nblock); (*np)++; } } else { Integer nblocks = GA[ga_handle].block_total; Integer chk, j, tlo[MAXDIM], thi[MAXDIM], cnt; cnt = 0; for (i=0; i= lo[j] && tlo[j] <= hi[j]) || (thi[j] >= lo[j] && thi[j] <= hi[j]))) { chk = 0; } } /* store blocks that overlap request region in proclist */ if (chk) { cnt++; } } *np = cnt; } return(TRUE); } #ifdef __crayx1 #pragma _CRI inline nga_locate_nnodes_ #endif /** * Locate individual patches and their owner of specified patch of a * Global Array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_locate_region = pnga_locate_region #endif logical pnga_locate_region( Integer g_a, Integer *lo, Integer *hi, Integer *map, Integer *proclist, Integer *np) /* g_a [input] global array handle lo [input] lower indices of patch in global array hi [input] upper indices of patch in global array map [output] list of lower and upper indices for portion of patch that exists on each processor containing a portion of the patch. The map is constructed so that for a D dimensional global array, the first D elements are the lower indices on the first processor in proclist, the next D elements are the upper indices of the first processor in proclist, the next D elements are the lower indices for the second processor in proclist, and so on. proclist [output] list of processors containing some portion of the patch np [output] total number of processors containing a portion of the patch For a block cyclic data distribution, this function returns a list of blocks that cover the region along with the lower and upper indices of each block. */ { int procT[MAXDIM], procB[MAXDIM], proc_subscript[MAXDIM]; Integer proc, owner, i, ga_handle; Integer d, dpos, ndim, elems, use_blocks; /* Integer p_handle; */ ga_check_handleM(g_a, "nga_locate_region"); ga_handle = GA_OFFSET + g_a; #ifdef __crayx1 #pragma _CRI novector #endif for(d = 0; d< GA[ga_handle].ndim; d++) if((lo[d]<1 || hi[d]>GA[ga_handle].dims[d]) ||(lo[d]>hi[d]))return FALSE; ndim = GA[ga_handle].ndim; use_blocks = GA[ga_handle].block_flag; if (!use_blocks) { /* find "processor coordinates" for the top left corner and store them * in ProcT */ #ifdef __crayx1 #pragma _CRI novector #endif for(d = 0, dpos = 0; d< GA[ga_handle].ndim; d++){ findblock(GA[ga_handle].mapc + dpos, GA[ga_handle].nblock[d], GA[ga_handle].scale[d], lo[d], &procT[d]); dpos += GA[ga_handle].nblock[d]; } /* find "processor coordinates" for the right bottom corner and store * them in procB */ #ifdef __crayx1 #pragma _CRI novector #endif for(d = 0, dpos = 0; d< GA[ga_handle].ndim; d++){ findblock(GA[ga_handle].mapc + dpos, GA[ga_handle].nblock[d], GA[ga_handle].scale[d], hi[d], &procB[d]); dpos += GA[ga_handle].nblock[d]; } *np = 0; /* Find total number of processors containing data and return the * result in elems. Also find the lowest "processor coordinates" of the * processor block containing data and return these in proc_subscript. */ ga_InitLoopM(&elems, ndim, proc_subscript, procT,procB,GA[ga_handle].nblock); /* p_handle = (Integer)GA[ga_handle].p_handle; */ for(i= 0; i< elems; i++){ Integer _lo[MAXDIM], _hi[MAXDIM]; Integer offset; /* convert i to owner processor id using the current values in proc_subscript */ ga_ComputeIndexM(&proc, ndim, proc_subscript, GA[ga_handle].nblock); /* get range of global array indices that are owned by owner */ ga_ownsM(ga_handle, proc, _lo, _hi); offset = *np *(ndim*2); /* location in map to put patch range */ #ifdef __crayx1 #pragma _CRI novector #endif for(d = 0; d< ndim; d++) map[d + offset ] = lo[d] < _lo[d] ? _lo[d] : lo[d]; #ifdef __crayx1 #pragma _CRI novector #endif for(d = 0; d< ndim; d++) map[ndim + d + offset ] = hi[d] > _hi[d] ? _hi[d] : hi[d]; owner = proc; if (GA[ga_handle].num_rstrctd == 0) { proclist[i] = owner; } else { proclist[i] = GA[ga_handle].rstrctd_list[owner]; } /* Update to proc_subscript so that it corresponds to the next * processor in the block of processors containing the patch */ ga_UpdateSubscriptM(ndim,proc_subscript,procT,procB,GA[ga_handle].nblock); (*np)++; } } else { Integer nblocks = GA[ga_handle].block_total; Integer chk, j, tlo[MAXDIM], thi[MAXDIM], cnt; Integer offset; cnt = 0; for (i=0; i= lo[j] && tlo[j] <= hi[j]) || (thi[j] >= lo[j] && thi[j] <= hi[j]))) { chk = 0; } } /* store blocks that overlap request region in proclist */ if (chk) { proclist[cnt] = i; cnt++; } } *np = cnt; /* fill map array with block coordinates */ for (i=0; i thi[j] ? thi[j] : hi[j]; } } } return(TRUE); } #ifdef __crayx1 #pragma _CRI inline pnga_locate_region #endif /** * Returns the processor grid for the global array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_nblock = pnga_nblock #endif void pnga_nblock(Integer g_a, Integer *nblock) { Integer ga_handle = GA_OFFSET + g_a; int i, n; ga_check_handleM(g_a, "ga_nblock"); n = GA[ga_handle].ndim; for(i=0; i 0) { return (Integer)PGRP_LIST[GA_Default_Proc_Group].map_proc_list[GAme]; } else { return ((Integer)GAme); } } /** * Return ID of calling process in group grp */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_pgroup_nodeid = pnga_pgroup_nodeid #endif Integer pnga_pgroup_nodeid(Integer grp) { if (grp >= 0) { return (Integer)PGRP_LIST[(int)grp].map_proc_list[GAme]; } else { return GAme; } } /** * Return number of nodes in default group */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_nnodes = pnga_nnodes #endif Integer pnga_nnodes() { if (GA_Default_Proc_Group > 0) { return (Integer)PGRP_LIST[GA_Default_Proc_Group].map_nproc; } else { return ((Integer)GAnproc); } } /** * Return number of nodes in group grp */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_pgroup_nnodes = pnga_pgroup_nnodes #endif Integer pnga_pgroup_nnodes(Integer grp) { if(grp >=0 ) return (Integer)PGRP_LIST[(int)grp].map_nproc; else return ((Integer)GAnproc); } /** * Compare distributions of two global arrays */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_compare_distr = pnga_compare_distr #endif logical pnga_compare_distr(Integer g_a, Integer g_b) { int h_a =(int)g_a + GA_OFFSET; int h_b =(int)g_b + GA_OFFSET; int h_a_maplen = calc_maplen(h_a); int h_b_maplen = calc_maplen(h_b); int i; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ GA_PUSH_NAME("ga_compare_distr"); ga_check_handleM(g_a, "distribution a"); ga_check_handleM(g_b, "distribution b"); GA_POP_NAME; if(GA[h_a].ndim != GA[h_b].ndim) return FALSE; for(i=0; i 0) { for (i=0; i MAX_MUTEXES) return(FALSE); if(num_mutexes) pnga_error("mutexes already created",num_mutexes); num_mutexes= (int)num; if(GAnproc == 1){ return(TRUE); } chunk_mutex = (int)((num + GAnproc-1)/GAnproc); if(GAme * chunk_mutex >= num)myshare =0; else myshare=chunk_mutex; /* need work here to use permutation */ if(ARMCI_Create_mutexes(myshare)){ return FALSE; } return TRUE; } /** * Lock an object defined by the mutex number */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_lock = pnga_lock #endif void pnga_lock(Integer mutex) { int m,p; if(GAnproc == 1) return; if(num_mutexes< mutex)pnga_error("invalid mutex",mutex); p = num_mutexes/chunk_mutex -1; m = num_mutexes%chunk_mutex; #ifdef PERMUTE_PIDS if(GA_Proc_list) p = GA_inv_Proc_list[p]; #endif ARMCI_Lock(m,p); } /** * Unlock a mutex */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_unlock = pnga_unlock #endif void pnga_unlock(Integer mutex) { int m,p; if(GAnproc == 1) return; if(num_mutexes< mutex)pnga_error("invalid mutex",mutex); p = num_mutexes/chunk_mutex -1; m = num_mutexes%chunk_mutex; #ifdef PERMUTE_PIDS if(GA_Proc_list) p = GA_inv_Proc_list[p]; #endif ARMCI_Unlock(m,p); } /** * Destroy mutexes */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_destroy_mutexes = pnga_destroy_mutexes #endif logical pnga_destroy_mutexes() { _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(num_mutexes<1) pnga_error("mutexes destroyed",0); num_mutexes= 0; if(GAnproc == 1){ return TRUE; } if(ARMCI_Destroy_mutexes()){ return FALSE; } return TRUE; } /** * Return a list that maps GA process IDs to message-passing process IDs */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_list_nodeid = pnga_list_nodeid #endif void pnga_list_nodeid(Integer *list, Integer num_procs) { Integer proc; for( proc = 0; proc < num_procs; proc++) #ifdef PERMUTE_PIDS if(GA_Proc_list) list[proc] = GA_inv_Proc_list[proc]; else #endif list[proc]=proc; } /** * Returns true/false depending on validity of the handle */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_valid_handle = pnga_valid_handle #endif logical pnga_valid_handle(Integer g_a) { if(GA_OFFSET+ (g_a) < 0 || GA_OFFSET+(g_a) >= _max_global_array || ! (GA[GA_OFFSET+(g_a)].actv) ) return FALSE; else return TRUE; } /** * A function that helps users avoid syncs inside a collective call * that they think are unnecessary * * Mask flags have to be reset in every collective call. Even if that * collective call doesnt do any sync at all. * If masking only the beginning sync is possible, make sure to * clear even the _sync_end mask to avoid a mask intended for this * collective_function_call to be carried to next collective_function_call * or to a collective function called by this function. * Similarly, make sure to use two copy mask values to local variables * and reset the global mask variables to avoid carring the mask to a * collective call inside the current collective call. */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_mask_sync = pnga_mask_sync #endif void pnga_mask_sync(Integer begin, Integer end) { if (begin) _ga_sync_begin = 1; else _ga_sync_begin = 0; if (end) _ga_sync_end = 1; else _ga_sync_end = 0; } /** * Merge all copies of a mirrored array by adding them together */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_merge_mirrored = pnga_merge_mirrored #endif void pnga_merge_mirrored(Integer g_a) { Integer handle = GA_OFFSET + g_a; Integer inode, nprocs, nnodes, zero, zproc, nblocks; int *blocks; C_Integer *map, *dims, *width; Integer i, j, index[MAXDIM], itmp, ndim; Integer nelem, count, type, atype=ARMCI_INT; char *zptr=NULL, *bptr=NULL, *nptr=NULL; Integer bytes, total; int local_sync_begin, local_sync_end; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end = 1; /*remove any previous masking */ if (local_sync_begin) pnga_sync(); /* don't perform update if node is not mirrored */ if (!pnga_is_mirrored(g_a)) return; GA_PUSH_NAME("ga_merge_mirrored"); inode = pnga_cluster_nodeid(); nnodes = pnga_cluster_nnodes(); nprocs = pnga_cluster_nprocs(inode); zero = 0; zproc = pnga_cluster_procid(inode, zero); zptr = GA[handle].ptr[zproc]; map = GA[handle].mapc; blocks = GA[handle].nblock; dims = GA[handle].dims; width = GA[handle].width; type = GA[handle].type; ndim = GA[handle].ndim; /* Check whether or not all nodes contain the same number of processors. */ if (nnodes*nprocs == pnga_nnodes()) { /* check to see if there is any buffer space between the data associated with each processor that needs to be zeroed out before performing the merge */ if (zproc == GAme) { /* the use of nblocks instead of nprocs is designed to support a peculiar coding style in which the dimensions of the block array are all set to 1 and all the data is restricted to the master processor on the node */ nblocks = 1; for (i=0; i 1) { pnga_error("Handle to a non-mirrored array passed",0); } else { trans[0] = 'N'; trans[1] = '\0'; pnga_copy_patch(trans, g_a, alo, ahi, g_b, blo, bhi); return; } } if (pnga_is_mirrored(g_b) && pnga_cluster_nnodes()) pnga_error("Distributed array is mirrored",0); adim = GA[a_handle].ndim; bdim = GA[b_handle].ndim; p_handle = GA[a_handle].p_handle; if (adim != bdim) pnga_error("Global arrays must have same dimension",0); type = GA[a_handle].type; if (type != GA[b_handle].type) pnga_error("Global arrays must be of same type",0); for (i=0; i= idim || ahi[i] < 0 || ahi[i] >= idim || alo[i] > ahi[i]) pnga_error("Invalid patch index on mirrored GA",0); } for (i=0; i= idim || bhi[i] < 0 || bhi[i] >= idim || blo[i] > bhi[i]) pnga_error("Invalid patch index on distributed GA",0); } for (i=0; i ahi[i]) intersect = 0; } if (intersect) { /* get portion of mirrored array patch that actually resides on this processor */ for (i=0; iGA[ga_handle].dims[d]) ||(lo[d]>hi[d])) pnga_error("Requested region out of bounds",0); if (GA[ga_handle].block_flag) { Integer nblocks = GA[ga_handle].block_total; Integer chk, i, j, tlo[MAXDIM], thi[MAXDIM]; cnt = 0; for (i=0; i= lo[j] && tlo[j] <= hi[j]) || (thi[j] >= lo[j] && thi[j] <= hi[j]))) { chk = 0; } } if (chk) { cnt++; } } ret = cnt; } GA_POP_NAME; return ret; } /** * Return the total number of blocks in a Global Array (if any). Only returns * non-zero values for block-cyclic data distributions. */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_total_blocks = pnga_total_blocks #endif Integer pnga_total_blocks(Integer g_a) { Integer ga_handle = GA_OFFSET + g_a; return GA[ga_handle].block_total; } /** * Return true if GA uses SCALPACK data distribution */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_uses_proc_grid = pnga_uses_proc_grid #endif logical pnga_uses_proc_grid(Integer g_a) { Integer ga_handle = GA_OFFSET + g_a; return (logical)GA[ga_handle].block_sl_flag; } /** * Return the index of a processor based on the block partition associated * with a particular Global Array (assuming GA uses a ScalLAPACK data * distribution) */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_get_proc_index = pnga_get_proc_index #endif void pnga_get_proc_index(Integer g_a, Integer iproc, Integer *index) { Integer ga_handle = GA_OFFSET + g_a; if (!GA[ga_handle].block_sl_flag) pnga_error("Global array does not use ScaLAPACK data distribution",0); gam_find_proc_indices(ga_handle, iproc, index); return; } /** * Return proc grid dimension and block dimension for a particular * Global Array */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_get_block_info = pnga_get_block_info #endif void pnga_get_block_info(Integer g_a, Integer *num_blocks, Integer *block_dims) { Integer ga_handle = GA_OFFSET + g_a; Integer i, ndim; ndim = GA[ga_handle].ndim; if (GA[ga_handle].block_sl_flag) { for (i=0; i 0) { if (dim%bsize == 0) { num_blocks[i] = dim/bsize; } else { num_blocks[i] = dim/bsize+1; } } else { num_blocks[i] = 0; } block_dims[i] = GA[ga_handle].block_dims[i]; } } return; } /** * Set the value of internal debug flag */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_set_debug = pnga_set_debug #endif void pnga_set_debug(logical flag) { GA_Debug_flag = (Integer)(flag); } /** * Get current value of internal debug flag */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_get_debug = pnga_get_debug #endif logical pnga_get_debug() { return (logical)GA_Debug_flag; } #ifdef ENABLE_CHECKPOINT void ga_checkpoint_arrays(Integer *gas,int num) { int ga = *(gas+0); int hdl = GA_OFFSET + ga; printf("\n%d:in checkpoint %d %d %d\n",GAme,ga,*(gas+1),*num);fflush(stdout); if(GA[hdl].record_id==0) ga_icheckpoint_init(gas,num); ga_icheckpoint(gas,num); } int ga_recover_arrays(Integer *gas, int num) { int i; for(i=0;i #endif #if HAVE_STDLIB_H # include #endif #if HAVE_MATH_H # include #endif #include "ga-papi.h" #include "typesf2c.h" /*-- ***************************************************************************** *-- *-- void ddb_h1 and ddb_h2 implement load-balancing heuristics *-- void ddb_ex implements an exhaustive search */ void ddb(Integer ndims, Integer ardims[], Integer npes, Integer blk[], Integer pedims[]); void ddb_ex( long ndims, Integer ardims[], long npes, double threshold, Integer blk[], Integer pedims[]); void ddb_h1( long ndims, Integer ardims[], long npes, double threshold, Integer blk[], Integer pedims[]); void ddb_h2( Integer ndims, Integer ardims[], Integer npes, double threshold, Integer bias, Integer blk[], Integer pedims[]); /*--------------------------------------------------------------------------- *-- Arguments *-- *-- The above three procedures have similar sequences of arguments *-- the only difference is that ddb_h2 takes an additional input argument *-- that induces the heuristic to possibly favor distributing the *-- right or the left axes of the data array. *-- *-- ndims (input): number of dimensions in the data array and the *-- process grid. There is no provision for requesting process *-- with fewer dimensions as the data array. *-- *-- ardims (input): extents of each dimension of the data array. *-- This array is of size ndims. destroyed. *-- *-- npes (input): number of processes onto which the distribution *-- takes place. *-- *-- threshold (input): minimum acceptable value of the load balance *-- ratio returned by ddb_ap(), see below. *-- *-- bias (input to ddb_h2): when set to a positive value positive *-- the rightmost axes of the data array are preferentially *-- distributed, similarly when bias is negative. When bias is zero *-- the heuristic attempts to deal processes equally among the axes *-- of the data array. *-- *-- blk (input/output): granularity of data mapping: The number of *-- consecutive elements along each dimension of the array. Upon output: *-- extents of the local array assigned to the process *-- that is assigned the array element with lowest global indices, e.g. A[0]. *-- The meaning of this array is not the same for ddb than for the underlying *-- load balancing subroutines. For the subroutine ddb, any non-positive value *-- in array blk is taken at face value. For example with ardim=[50,40], *-- blk = [3,-1] and npes = 40 the process grid that will be computed is: *-- pedims=[20,2] with 3x2 processes storing no data. This is compatible *-- with the semantics of the load-balancing subroutine in the 2D GA. *-- *-- pedims(output): number of processes along each dimension of the *-- data array. *-- *-------------------------------------------------------------------------- *-- *-- Other prototypes *-- *-- dd_ev evaluates the load balance ratio for the data distribution *-- specified by its argument list. *-- *-- ddb_ap and dd_lk are specific to ddb_h1. */ void ddb_ap(long ndims, double qedims[], Integer ardims[], Integer pedims[], long npes, long npdivs, long pdivs[]); double dd_ev(long ndims,Integer ardims[], Integer pedims[]); long dd_lk(long * prt, long n, double key); void dd_su(long ndims, Integer ardims[], Integer pedims[], Integer blk[]); /*--------------------------------------------------------------------------- *-- *-- Dependencies: *-- *-- ddb: ddb_h2, ddb_ex *-- ddb_ex: dd_ev, dd_su *-- ddb_h1: ddb_ap, dd_ev, ddb_ex, dd_lk, dd_su & -lm *-- ddb_h2: dd_ev, ddb_ex, dd_su *-- ***************************************************************************/ #define THRESHOLD -0.1 /* The threshold for switching to an exhaustive search*/ /************************************************************************ *-- *-- void ddb is a wrapper ontop of some load balancing heuristics. ddb *-- is called from within GA to compute process grids. *-- The first argument, ndims, is the number of *-- array dimensions. The resulting process grid also has ndims *-- dimensions but some of these can be degenerate. ************************************************************************/ void ddb(Integer ndims, Integer ardims[], Integer npes, Integer blk[], Integer pedims[]) { double ddb_threshold = 0.1; long ddb_bias = 0; long i, j; Integer count = 0; Integer *tardim, *tblk, *tpedim; long tp, sp; tp = (long)npes; /* count how many axes have block values.*/ for(i=ndims-1;i>=0;i--){ if(blk[i]<=0){ pedims[i] = -1; count += 1; } else { sp = (long)(ardims[i]+blk[i]-1)/blk[i]; if(sp>tp) { sp = tp; tp = 1; pedims[i] = (Integer)sp; } else { for(j=sp;j0){ tardim = (Integer *) calloc((size_t)count,sizeof(Integer)); if(tardim==NULL) { fprintf(stderr,"ddb: Memory allocation failed\n"); for(i=0;iblb || (clb==blb && cevthreshold) break; tdims[pc] = 0; pc -= 1; } else { if( tdims[pc] == stack[pc] ) { /*- Backtrack when current array dimension has exhausted *- all remaining processes */ done = (pc==0); tdims[pc] = 0; pc -= 1; } else { /*- Increment the number of processes assigned to the current *- array axis. */ for(tdims[pc]+=1; stack[pc]%tdims[pc]!=0; tdims[pc]+=1); pc += 1; stack[pc] = npes; for(i=0;iq) { h = k; q = t; } } /*- Swap elements of apdims to improve load balance */ j = h; for(k=0;kub) { j = k; ub = cb; } i = apdims[h]; apdims[h] = apdims[k]; apdims[k] = i; } if(j!=h){ i = apdims[h]; apdims[h] = apdims[j]; apdims[j] = i; } } while (ub > blb); for(i=0;i1) { for(k=1,i=g+1;iprt[md]) { lw = md+1; } else { hgh = md; } } while (lw0) { v = key-prt[lw-1]; if(v<0.0) v = -v; if(v1) { k = 1; do { h = k+1; for(j=h;j0) { istep = -1; istart = ndims-1; } /*- Set pedims -*/ for(j=0;j=1;k--){ p0 = pdivs[k]; h = istart; q = (tard[istart]0){ blk[i] = (tard[i]+pedims[i]-1)/pedims[i]; } else { pnga_error("process dimension is zero: ddb_h2",0); } free(tard); return; } /**************************************************************************** *-- *-- double dd_ev evaluates the load balancing ratio as follows: *-- *-- Let n1, n2 ... nd be the extents of the array dimensions *-- Let p1, p2 ... pd be the numbers of processes across *-- the corresponding dimensions of the process grid *-- Let there be npes processes available *-- *-- Load balancing measure = (n1/p1)*...*(nd/pd)*npes *-- ------------------------ *-- n1*n2*...*nd *-- The communication volume measure is the sum of *-- all monomials (ni/pi) of degree d-1. *-- ****************************************************************************/ double dd_ev(long ndims,Integer ardims[], Integer pedims[]) { double q, t; long k; q = 1.0; t = 1.0; for(k=0;k=_max_global_array){ \ char err_string[ERR_STR_LEN]; \ sprintf(err_string, "%s: INVALID ARRAY HANDLE", string); \ pnga_error(err_string, (g_a)); \ } \ if( ! (GA[GA_OFFSET+(g_a)].actv) ){ \ char err_string[ERR_STR_LEN]; \ sprintf(err_string, "%s: ARRAY NOT ACTIVE", string); \ pnga_error(err_string, (g_a)); \ } \ } /* this macro finds cordinates of the chunk of array owned by processor proc */ #define ga_ownsM_no_handle(ndim, dims, nblock, mapc, proc, lo, hi) \ { \ Integer _loc, _nb, _d, _index, _dim=ndim,_dimstart=0, _dimpos; \ for(_nb=1, _d=0; _d<_dim; _d++)_nb *= (Integer)nblock[_d]; \ if((Integer)proc > _nb - 1 || proc<0){ \ __CRAYX1_PRAGMA("_CRI novector"); \ for(_d=0; _d<_dim; _d++){ \ lo[_d] = (Integer)0; \ hi[_d] = (Integer)-1;} \ } \ else{ \ _index = proc; \ if(GA_inv_Proc_list) _index = GA_inv_Proc_list[proc]; \ __CRAYX1_PRAGMA("_CRI novector"); \ for(_d=0; _d<_dim; _d++){ \ _loc = _index% (Integer)nblock[_d]; \ _index /= (Integer)nblock[_d]; \ _dimpos = _loc + _dimstart; /* correction to find place in mapc */\ _dimstart += (Integer)nblock[_d]; \ lo[_d] = (Integer)mapc[_dimpos]; \ if (_loc==nblock[_d]-1) hi[_d]=dims[_d]; \ else hi[_d] = mapc[_dimpos+1]-1; \ } \ } \ } /* this macro finds the block indices for a given block */ #define gam_find_block_indices(ga_handle,nblock,index) { \ int _itmp, _i; \ int _ndim = GA[ga_handle].ndim; \ _itmp = nblock; \ index[0] = _itmp%GA[ga_handle].num_blocks[0]; \ for (_i=1; _i<_ndim; _i++) { \ _itmp = (_itmp-index[_i-1])/GA[ga_handle].num_blocks[_i-1]; \ index[_i] = _itmp%GA[ga_handle].num_blocks[_i]; \ } \ } /* this macro finds the ScaLAPACK indices for a given processor */ #ifdef COMPACT_SCALAPACK #define gam_find_proc_indices(ga_handle,proc,index) { \ Integer _itmp, _i; \ Integer _ndim = GA[ga_handle].ndim; \ _itmp = proc; \ index[0] = _itmp%GA[ga_handle].nblock[0]; \ for (_i=1; _i<_ndim; _i++) { \ _itmp = (_itmp-index[_i-1])/GA[ga_handle].nblock[_i-1]; \ index[_i] = _itmp%GA[ga_handle].nblock[_i]; \ } \ } #else #define gam_find_proc_indices(ga_handle,proc,index) { \ Integer _itmp, _i; \ Integer _ndim = GA[ga_handle].ndim; \ _itmp = proc; \ index[_ndim-1] = _itmp%GA[ga_handle].nblock[_ndim-1]; \ for (_i=_ndim-2; _i>=0; _i--) { \ _itmp = (_itmp-index[_i+1])/GA[ga_handle].nblock[_i+1]; \ index[_i] = _itmp%GA[ga_handle].nblock[_i]; \ } \ } #endif /* this macro finds cordinates of the chunk of array owned by processor proc */ #define ga_ownsM(ga_handle, proc, lo, hi) \ { \ if (GA[ga_handle].block_flag == 0) { \ if (GA[ga_handle].num_rstrctd == 0) { \ ga_ownsM_no_handle(GA[ga_handle].ndim, GA[ga_handle].dims, \ GA[ga_handle].nblock, GA[ga_handle].mapc, \ proc,lo, hi ) \ } else { \ if (proc < GA[ga_handle].num_rstrctd) { \ ga_ownsM_no_handle(GA[ga_handle].ndim, GA[ga_handle].dims, \ GA[ga_handle].nblock, GA[ga_handle].mapc, \ proc,lo, hi ) \ } else { \ int _i; \ int _ndim = GA[ga_handle].ndim; \ for (_i=0; _i<_ndim; _i++) { \ lo[_i] = 0; \ hi[_i] = -1; \ } \ } \ } \ } else { \ int _index[MAXDIM]; \ int _i; \ int _ndim = GA[ga_handle].ndim; \ gam_find_block_indices(ga_handle,proc,_index); \ for (_i=0; _i<_ndim; _i++) { \ lo[_i] = _index[_i]*GA[ga_handle].block_dims[_i]+1; \ hi[_i] = (_index[_i]+1)*GA[ga_handle].block_dims[_i]; \ if (hi[_i] > GA[ga_handle].dims[_i]) hi[_i]=GA[ga_handle].dims[_i]; \ } \ } \ } /* this macro finds the block index corresponding to a given set of indices */ #define gam_find_block_from_indices(ga_handle,nblock,index) { \ int _ndim = GA[ga_handle].ndim; \ int _i; \ nblock = index[_ndim-1]; \ for (_i=_ndim-2; _i >= 0; _i--) { \ nblock = nblock*GA[ga_handle].num_blocks[_i]+index[_i]; \ } \ } /* this macro finds the proc that owns a given set block indices using the ScaLAPACK data distribution */ #ifdef COMPACT_SCALAPACK #define gam_find_proc_from_sl_indices(ga_handle,proc,index) { \ int _ndim = GA[ga_handle].ndim; \ int _i; \ Integer _index2[MAXDIM]; \ for (_i=0; _i<_ndim; _i++) { \ _index2[_i] = index[_i]%GA[ga_handle].nblock[_i]; \ } \ proc = _index2[_ndim-1]; \ for (_i=_ndim-2; _i >= 0; _i--) { \ proc = proc*GA[ga_handle].nblock[_i]+_index2[_i]; \ } \ } #else #define gam_find_proc_from_sl_indices(ga_handle,proc,index) { \ int _ndim = GA[ga_handle].ndim; \ int _i; \ Integer _index2[MAXDIM]; \ for (_i=0; _i<_ndim; _i++) { \ _index2[_i] = index[_i]%GA[ga_handle].nblock[_i]; \ } \ proc = _index2[0]; \ for (_i=1; _i < _ndim; _i++) { \ proc = proc*GA[ga_handle].nblock[_i]+_index2[_i]; \ } \ } #endif /* this macro computes the strides on both the remote and local processors that map out the data. ld and ldrem are the physical dimensions of the memory on both the local and remote processors. */ /* NEEDS C_INT64 CONVERSION */ #define gam_setstride(ndim, size, ld, ldrem, stride_rem, stride_loc){\ int _i; \ stride_rem[0]= stride_loc[0] = (int)size; \ __CRAYX1_PRAGMA("_CRI novector"); \ for(_i=0;_i 0) \ _iproc = GA[g_handle].rstrctd_list[_iproc]; \ *(ptr_loc) = GA[g_handle].ptr[_iproc]+_offset*GA[g_handle].elemsize; \ } #define ga_check_regionM(g_a, ilo, ihi, jlo, jhi, string){ \ if (*(ilo) <= 0 || *(ihi) > GA[GA_OFFSET + *(g_a)].dims[0] || \ *(jlo) <= 0 || *(jhi) > GA[GA_OFFSET + *(g_a)].dims[1] || \ *(ihi) < *(ilo) || *(jhi) < *(jlo)){ \ char err_string[ERR_STR_LEN]; \ sprintf(err_string,"%s:req(%ld:%ld,%ld:%ld) out of range (1:%ld,1:%ld)",\ string, (long)*(ilo), (long)*(ihi), (long)*(jlo), (long)*(jhi), \ (long)GA[GA_OFFSET + *(g_a)].dims[0], \ (long)GA[GA_OFFSET + *(g_a)].dims[1]); \ pnga_error(err_string, *(g_a)); \ } \ } #define gaCheckSubscriptM(subscr, lo, hi, ndim) \ { \ Integer _d; \ __CRAYX1_PRAGMA("_CRI novector"); \ for(_d=0; _d< ndim; _d++) \ if( subscr[_d]< lo[_d] || subscr[_d]> hi[_d]){ \ char err_string[ERR_STR_LEN]; \ sprintf(err_string,"check subscript failed:%ld not in (%ld:%ld) dim=%d", \ (long)subscr[_d], (long)lo[_d], (long)hi[_d], (int)_d); \ pnga_error(err_string, _d); \ }\ } ga-5-3/global/src/ga-mpi.fh0000640005473000001440000000053011646104765014324 0ustar d3n000users#ifndef GA_MPI_H_ #define GA_MPI_H_ ! usage: call ga_mpi_comm(OUT integer comm) ! usage: call ga_mpi_comm_pgroup(OUT integer comm, IN integer grp) ! usage: call ga_mpi_comm_pgroup_default(OUT integer comm) external ga_mpi_comm external ga_mpi_comm_pgroup external ga_mpi_comm_pgroup_default #endif /* GA_MPI_H_ */ ga-5-3/global/src/ga_trace.c0000640005473000001440000001505011647111726014543 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /***********************************************************************\ * Tracing and Timing functions for the GA routines: * * trace_init - initialization * * trace_stime - starts timing * * trace_etime - ends timing * * trace_genrec - generates a trace record for the calling routine * * trace_end - ends tracing & writes report to a file 'proc' * * Note: the usc timer from the ALOG package is used * * Jarek Nieplocha, 10.14.93 * \***********************************************************************/ #include #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #include "ga.h" #ifndef MPI # include "tcgmsg.h" #else # include "mpi.h" #endif #include "ga-papi.h" #include "ga-wapi.h" static double tt0, tt1; static Integer *tlog, thandle; static Integer *indlog, ihandle, gahandle; static int *galog; static unsigned long current, MAX_EVENTS=0; static int ganum = 0; #define MAX_GAS 100 #define min(a,b) ((a)<(b) ? (a) : (b)) #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_timer = pnga_timer #endif double pnga_timer() { #ifdef MPI return MPI_Wtime(); #else return tcg_time(); #endif } /* n is the max number of events to be traced */ void trace_init_(long *n) { MA_AccessIndex index; long err; if(*n<=0){ printf("trace_init>> invalid max number of events: %ld\n",*n); return; } current = 0; err = 0; /* MA_initialize(MT_INT,10000,10000); */ MAX_EVENTS = *n; if(!MA_push_get(MT_LONGINT, *n*2, "timeLog", &thandle, &index)){ printf("trace_init>> failed to allocate memory 1\n"); err ++; } MA_get_pointer(thandle, &tlog); if(!tlog){ printf("trace_init>> null pointer: 1\n"); err ++; } if(!MA_push_get(MT_LONGINT, *n*6, "indexLog", &ihandle, &index)){ printf("trace_init>> failed to allocate memory 2\n"); err ++; } MA_get_pointer(ihandle, &indlog); if(!indlog) { printf("trace_init>> null pointer: 2\n"); err ++; } if(!MA_push_get(MT_INT, MAX_GAS, "gaLog", &gahandle, &index)){ printf("trace_init>> failed to allocate memory 2\n"); err ++; } MA_get_pointer(gahandle, &galog); if(!galog) { printf("trace_init>> null pointer: 2\n"); err ++; } ganum = 0; if(err) MAX_EVENTS = 0; } void trace_stime_() { tt0 = pnga_timer(); } void trace_etime_() { tt1 = pnga_timer(); } void trace_genrec_(Integer *ga, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, Integer *op) { int i, d, has_record, counter; FILE *fout; char fname[15]; typedef struct { int lo[2]; int hi[2]; } patch_t; patch_t *regions; int *proclist; int ndim, dims[2], tmp_dims[2], lo[2], hi[2], type, block[2]; int me=GA_Nodeid(), nproc=GA_Nnodes(), proc; if(current >= MAX_EVENTS) return; /* only node 0 does the bookkeeping */ if(me == 0) { /* test if this ga has been recorded */ has_record = 0; for(i=0; i tmp_dims[d]) { block[d]++; tmp_dims[d] = regions[i].hi[d]; } } /* print the number of processed */ fprintf(fout, "%d\n", nproc); /* print dimensions */ for(d=0; d tmp_dims[d]) { counter++; if(counter == block[d]) break; fprintf(fout, "%d\n", regions[i].hi[d]+1); tmp_dims[d] = regions[i].hi[d]; } } } fclose(fout); free(regions); free(proclist); } } tlog[current*2] = (unsigned long)(tt0 * 1000000); tlog[current*2+1] = (unsigned long)(tt1 * 1000000); indlog[current*6] = *ga; indlog[current*6+1] = *ilo; indlog[current*6+2] = *ihi; indlog[current*6+3] = *jlo; indlog[current*6+4] = *jhi; indlog[current*6+5] = *op; current++; } void trace_end_(long *proc) { FILE *fout; char fname[10]; unsigned long i,k; sprintf(fname,"%03d",(int)*proc); fout=fopen(fname,"w"); for(i=0;i #endif #include "armci.h" #include "galinalg.h" /* min acceptable amount of memory (in elements) and default chunk size */ # define MINMEM 64 # define CHUNK_SIZE 256 # define MAX_CHUNKS 1024 # define BLOCK_SIZE 1024 /* temp buf size for pinning */ # define GA_ASPECT_RATIO 3 # define NUM_MATS 3 # define MINTASKS 10 /* increase this if there is high load imbalance */ # define EXTRA 4 #define MIN_CHUNK_SIZE 256 #define SET 1 #define UNSET 0 extern void gai_matmul_patch_flag(int flag); typedef struct { int lo[2]; /* 2 elements: ilo and klo */ int hi[2]; int dim[2]; int chunkBId; short int do_put; }task_list_t; #define VECTORCHECK(rank,dims,dim1,dim2, ilo, ihi, jlo, jhi) \ if(rank>2) pnga_error("rank is greater than 2",rank); \ else if(rank==2) {dim1=dims[0]; dim2=dims[1];} \ else if(rank==1) {if((ihi-ilo)>0) { dim1=dims[0]; dim2=1;} \ else { dim1=1; dim2=dims[0];}} \ else pnga_error("rank must be atleast 1",rank); #define WAIT_GET_BLOCK(nbhdl) pnga_nbwait(nbhdl) #endif /* _MATMUL_H_ */ ga-5-3/global/src/hsort.scat.c0000640005473000001440000001335211647111726015071 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /**************************************************************************\ Sort routines for scatter and gather. scatter requires sorting of index and value arrays. gather requires sorting of index arrays only. \**************************************************************************/ #include "typesf2c.h" #include "macommon.h" #include "ga-papi.h" #include "ga-wapi.h" #define GT(a,b) (*(a) > *(b)) #define GE(a,b) (*(a) >= *(b)) #define INDEX_SORT(base,pn,SWAP){\ unsigned long gap, g;\ Integer *p, *q, *hi, n=*pn;\ Integer *base0=base - 1;\ \ gap = n >>1;\ hi = base0 + gap + gap;\ if (n & 1) hi ++;\ \ for ( ; gap != 1; gap--) {\ for (p = base0 + (g = gap) ; (q = p + g) <= hi ; p = q) {\ g += g;\ if (q != hi && GT(q+1, q)) {\ q++;\ g++;\ }\ if (GE(p,q)) break;\ SWAP(p , q);\ }\ }\ \ for ( ; hi != base ; hi--) {\ p = base;\ for (g = 1 ; (q = p + g) <= hi ; p = q) {\ g += g;\ if (q != hi && GT(q+1,q)) {\ q++;\ g++;\ }\ if (GE(p,q)) break;\ SWAP(p, q);\ }\ SWAP(base, hi);\ }\ } static void ga_sort_scat_dcpl_(pn, v, i, j, base) Integer *pn; DoubleComplex *v; Integer *i; Integer *j; Integer *base; { if (*pn < 2) return; # undef SWAP # define SWAP(a,b) { \ Integer ltmp; \ DoubleComplex dtmp; \ long ia = a - base; \ long ib = b - base; \ ltmp=*a; *a=*b; *b=ltmp; \ dtmp=v[ia]; v[ia]=v[ib]; v[ib]=dtmp; \ ltmp=i[ia]; i[ia]=i[ib]; i[ib]=ltmp; \ ltmp=j[ia]; j[ia]=j[ib]; j[ib]=ltmp; \ } INDEX_SORT(base,pn,SWAP); } static void ga_sort_scat_scpl_(pn, v, i, j, base) Integer *pn; SingleComplex *v; Integer *i; Integer *j; Integer *base; { if (*pn < 2) return; # undef SWAP # define SWAP(a,b) { \ Integer ltmp; \ SingleComplex dtmp; \ long ia = a - base; \ long ib = b - base; \ ltmp=*a; *a=*b; *b=ltmp; \ dtmp=v[ia]; v[ia]=v[ib]; v[ib]=dtmp; \ ltmp=i[ia]; i[ia]=i[ib]; i[ib]=ltmp; \ ltmp=j[ia]; j[ia]=j[ib]; j[ib]=ltmp; \ } INDEX_SORT(base,pn,SWAP); } void ga_sort_permutation(pn, index, base) Integer *pn; Integer *index; Integer *base; { if (*pn < 2) return; # undef SWAP # define SWAP(a,b) { \ Integer ltmp; \ Integer itmp;\ long ia = a - base; \ long ib = b - base; \ ltmp=*a; *a=*b; *b=ltmp; \ itmp=index[ia]; index[ia]=index[ib]; index[ib] = itmp;\ } INDEX_SORT(base,pn,SWAP); } static void ga_sort_scat_dbl_(pn, v, i, j, base) Integer *pn; DoublePrecision *v; Integer *i; Integer *j; Integer *base; { if (*pn < 2) return; # undef SWAP # define SWAP(a,b) { \ Integer ltmp; \ DoublePrecision dtmp; \ long ia = a - base; \ long ib = b - base; \ ltmp=*a; *a=*b; *b=ltmp; \ dtmp=v[ia]; v[ia]=v[ib]; v[ib]=dtmp; \ ltmp=i[ia]; i[ia]=i[ib]; i[ib]=ltmp; \ ltmp=j[ia]; j[ia]=j[ib]; j[ib]=ltmp; \ } INDEX_SORT(base,pn,SWAP); } static void ga_sort_scat_int_(pn, v, i, j, base) Integer *pn; int *v; Integer *i; Integer *j; Integer *base; { if (*pn < 2) return; # undef SWAP # define SWAP(a,b) { \ int ltmp; \ int dtmp; \ long ia = a - base; \ long ib = b - base; \ ltmp=*a; *a=*b; *b=ltmp; \ dtmp=v[ia]; v[ia]=v[ib]; v[ib]=dtmp; \ ltmp=i[ia]; i[ia]=i[ib]; i[ib]=ltmp; \ ltmp=j[ia]; j[ia]=j[ib]; j[ib]=ltmp; \ } INDEX_SORT(base,pn,SWAP); } static void ga_sort_scat_long_(pn, v, i, j, base) Integer *pn; long *v; Integer *i; Integer *j; Integer *base; { if (*pn < 2) return; # undef SWAP # define SWAP(a,b) { \ long ltmp; \ long dtmp; \ long ia = a - base; \ long ib = b - base; \ ltmp=*a; *a=*b; *b=ltmp; \ dtmp=v[ia]; v[ia]=v[ib]; v[ib]=dtmp; \ ltmp=i[ia]; i[ia]=i[ib]; i[ib]=ltmp; \ ltmp=j[ia]; j[ia]=j[ib]; j[ib]=ltmp; \ } INDEX_SORT(base,pn,SWAP); } static void ga_sort_scat_flt_(pn, v, i, j, base) Integer *pn; float *v; Integer *i; Integer *j; Integer *base; { if (*pn < 2) return; # undef SWAP # define SWAP(a,b) { \ Integer ltmp; \ float dtmp; \ int ia = a - base; \ int ib = b - base; \ ltmp=*a; *a=*b; *b=ltmp; \ dtmp=v[ia]; v[ia]=v[ib]; v[ib]=dtmp; \ ltmp=i[ia]; i[ia]=i[ib]; i[ib]=ltmp; \ ltmp=j[ia]; j[ia]=j[ib]; j[ib]=ltmp; \ } INDEX_SORT(base,pn,SWAP); } void ga_sort_scat(pn, v, i, j, base, type) Integer *pn; void *v; Integer *i; Integer *j; Integer *base; Integer type; { switch (type){ case C_DBL: ga_sort_scat_dbl_(pn, (double*)v, i,j,base);break; case C_DCPL: ga_sort_scat_dcpl_(pn, (DoubleComplex*)v, i,j,base); break; case C_SCPL: ga_sort_scat_scpl_(pn, (SingleComplex*)v, i,j,base); break; case C_INT: ga_sort_scat_int_(pn, (int*)v, i, j, base); break; case C_FLOAT: ga_sort_scat_flt_(pn, (float*)v, i, j, base); break; case C_LONG: ga_sort_scat_long_(pn, (long*)v, i, j, base); break; default: pnga_error("ERROR:ga_sort_scat: wrong type",type); } } void ga_sort_gath(pn, i, j, base) Integer *pn; Integer *i; Integer *j; Integer *base; { if (*pn < 2) return; # undef SWAP # define SWAP(a,b) { \ Integer ltmp; \ long ia = a - base; \ long ib = b - base; \ ltmp=*a; *a=*b; *b=ltmp; \ ltmp=i[ia]; i[ia]=i[ib]; i[ib]=ltmp; \ ltmp=j[ia]; j[ia]=j[ib]; j[ib]=ltmp; \ } INDEX_SORT(base,pn,SWAP); } void gai_hsort(Integer *list, int num) { if(num<2) return; # undef SWAP # define SWAP(a,b) { Integer ltmp; ltmp=*a; *a=*b; *b=ltmp;} INDEX_SORT(list,&num,SWAP); } ga-5-3/global/src/ga-mpi.h0000640005473000001440000000031411646104765014156 0ustar d3n000users#ifndef GA_MPI_H_ #define GA_MPI_H_ #include extern MPI_Comm GA_MPI_Comm(); extern MPI_Comm GA_MPI_Comm_pgroup(int pgroup); extern MPI_Comm GA_MPI_Comm_pgroup_default(); #endif /* GA_MPI_H_ */ ga-5-3/global/src/collect.c0000640005473000001440000001613112207432630014415 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STRING_H # include "string.h" #endif /* $Id: collect.c,v 1.23.2.5 2007-08-03 19:52:28 manoj Exp $ */ #include "typesf2c.h" #include "globalp.h" #include "message.h" #include "base.h" #include "ga-papi.h" #include "ga-wapi.h" /* can handle ga_brdcst/igop/dgop via ARMCI or native message-passing library * uncomment line below to use the ARMCI version */ #ifndef NEC #define ARMCI_COLLECTIVES #endif #ifdef MPI # include extern MPI_Comm ARMCI_COMM_WORLD; # include "ga-mpi.h" # if HAVE_ARMCI_GROUP_COMM extern MPI_Comm armci_group_comm(ARMCI_Group *group); # endif #else # include #endif #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_msg_brdcst = pnga_msg_brdcst #endif void pnga_msg_brdcst(Integer type, void *buffer, Integer len, Integer root) { #ifdef ARMCI_COLLECTIVES int p_grp = (int)pnga_pgroup_get_default(); if (p_grp > 0) { # ifdef MPI int aroot = PGRP_LIST[p_grp].inv_map_proc_list[root]; armci_msg_group_bcast_scope(SCOPE_ALL,buffer, (int)len, aroot,(&(PGRP_LIST[p_grp].group))); # endif } else { armci_msg_bcast(buffer, (int)len, (int)root); } #else # ifdef MPI MPI_Bcast(buffer, (int)len, MPI_CHAR, (int)root, ARMCI_COMM_WORLD); # else tcg_brdcst(type, buffer, len, root); # endif #endif } /*\ BROADCAST \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_brdcst = pnga_brdcst #endif void pnga_brdcst(Integer type, void *buf, Integer len, Integer originator) { _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ pnga_msg_brdcst(type,buf,len,originator); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_pgroup_brdcst = pnga_pgroup_brdcst #endif void pnga_pgroup_brdcst(Integer grp_id, Integer type, void *buf, Integer len, Integer originator) { int p_grp = (int)grp_id; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if (p_grp > 0) { #ifdef MPI int aroot = PGRP_LIST[p_grp].inv_map_proc_list[originator]; armci_msg_group_bcast_scope(SCOPE_ALL,buf,(int)len,aroot,(&(PGRP_LIST[p_grp].group))); #endif } else { int aroot = (int)originator; armci_msg_bcast(buf, (int)len, (int)aroot); } } #ifdef MPI MPI_Comm GA_MPI_Comm() { return GA_MPI_Comm_pgroup(-1); } MPI_Comm GA_MPI_Comm_pgroup_default() { return GA_MPI_Comm_pgroup(pnga_pgroup_get_default()); } MPI_Comm GA_MPI_Comm_pgroup(int p_grp) { ARMCI_Group group; if (p_grp > 0) { group = PGRP_LIST[p_grp].group; } else { ARMCI_Group_get_world(&group); } # if HAVE_ARMCI_GROUP_COMM_MEMBER return group.comm; # else return armci_group_comm(&group); # endif } #endif #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_msg_sync = pnga_msg_sync #endif void pnga_msg_sync() { #ifdef MPI int p_grp = (int)pnga_pgroup_get_default(); if(p_grp>0) armci_msg_group_barrier(&(PGRP_LIST[p_grp].group)); else armci_msg_barrier(); #else # ifdef LAPI armci_msg_barrier(); # else tcg_synch(GA_TYPE_SYN); # endif #endif } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_msg_pgroup_sync = pnga_msg_pgroup_sync #endif void pnga_msg_pgroup_sync(Integer grp_id) { int p_grp = (int)(grp_id); if(p_grp>0) { # ifdef MPI armci_msg_group_barrier(&(PGRP_LIST[p_grp].group)); # else pnga_error("ga_msg_pgroup_sync not implemented",0); # endif } else { # if defined(MPI) || defined(LAPI) armci_msg_barrier(); # else tcg_synch(GA_TYPE_SYN); # endif } } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_pgroup_gop = pnga_pgroup_gop #endif void pnga_pgroup_gop(Integer p_grp, Integer type, void *x, Integer n, char *op) { _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if (p_grp > 0) { #if defined(ARMCI_COLLECTIVES) && defined(MPI) int group = (int)p_grp; switch (type){ case C_INT: armci_msg_group_igop((int*)x, n, op, (&(PGRP_LIST[group].group))); break; case C_LONG: armci_msg_group_lgop((long*)x, n, op, (&(PGRP_LIST[group].group))); break; case C_LONGLONG: armci_msg_group_llgop((long long*)x, n, op, (&(PGRP_LIST[group].group))); break; case C_FLOAT: armci_msg_group_fgop((float*)x, n, op, (&(PGRP_LIST[group].group))); break; case C_DBL: armci_msg_group_dgop((double*)x, n, op, (&(PGRP_LIST[group].group))); break; case C_SCPL: armci_msg_group_fgop((float*)x, 2*n, op, (&(PGRP_LIST[group].group))); break; case C_DCPL: armci_msg_group_dgop((double*)x, 2*n, op, (&(PGRP_LIST[group].group))); break; default: pnga_error(" wrong data type ",type); } #else pnga_error("Groups not implemented for system",0); #endif } else { pnga_gop(type, x, n, op); } } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_gop = pnga_gop #endif void pnga_gop(Integer type, void *x, Integer n, char *op) { Integer p_grp = pnga_pgroup_get_default(); _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if (p_grp > 0) { pnga_pgroup_gop(p_grp, type, x, n, op); } else { #if defined(ARMCI_COLLECTIVES) || defined(MPI) switch (type){ case C_INT: armci_msg_igop((int*)x, n, op); break; case C_LONG: armci_msg_lgop((long*)x, n, op); break; case C_LONGLONG: armci_msg_llgop((long long*)x, n, op); break; case C_FLOAT: armci_msg_fgop((float*)x, n, op); break; case C_DBL: armci_msg_dgop((double*)x, n, op); break; case C_SCPL: armci_msg_fgop((float*)x, 2*n, op); break; case C_DCPL: armci_msg_dgop((double*)x, 2*n, op); break; default: pnga_error(" wrong data type ",type); } #else switch (type){ case C_INT: pnga_error("Operation not defined for system",0); break; case C_LONG: tcg_igop(GA_TYPE_GOP, x, n, op); break; case C_LONGLONG: pnga_error("Operation not defined for system",0); break; case C_FLOAT: pnga_error("Operation not defined for system",0); break; case C_DBL: tcg_dgop(GA_TYPE_GOP, x, n, op); break; case C_SCPL: pnga_error("Operation not defined for system",0); break; case C_DCPL: pnga_error("Operation not defined for system",0); break; default: pnga_error(" wrong data type ",type); } #endif } } ga-5-3/global/src/global.util.c0000640005473000001440000011212711721531704015210 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /*$Id: global.util.c,v 1.48.6.6 2007-05-18 08:19:23 manoj Exp $*/ /* * module: global.util.c * author: Jarek Nieplocha * last modification: Tue Dec 20 09:41:55 PDT 1994 * * DISCLAIMER * * This material was prepared as an account of work sponsored by an * agency of the United States Government. Neither the United States * Government nor the United States Department of Energy, nor Battelle, * nor any of their employees, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR * ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, * COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, * SOFTWARE, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT * INFRINGE PRIVATELY OWNED RIGHTS. * * * ACKNOWLEDGMENT * * This software and its documentation were produced with United States * Government support under Contract Number DE-AC06-76RLO-1830 awarded by * the United States Department of Energy. The United States Government * retains a paid-up non-exclusive, irrevocable worldwide license to * reproduce, prepare derivative works, perform publicly and display * publicly by or for the US Government, including the right to * distribute to other US Government contractors. */ #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_UNISTD_H # include #endif #include "farg.h" #include "globalp.h" #include #include "ga-papi.h" #include "ga-wapi.h" #define ARMCI 1 #if defined(SUN) void fflush(); #endif /*\ PRINT g_a[ilo:ihi, jlo:jhi] \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_print_patch_file2d = pnga_print_patch_file2d #endif void pnga_print_patch_file2d(file, g_a, ilo, ihi, jlo, jhi, pretty) FILE *file; Integer g_a, ilo, ihi, jlo, jhi, pretty; /* Pretty = 0 ... spew output out with no formatting Pretty = 1 ... format output so that it is readable */ { #define BUFSIZE 6 #define FLEN 80 Integer i, j,jj, dim1, dim2, type, jmax, ld=1, bufsize ; Integer a_grp; int ibuf[BUFSIZE]; DoublePrecision dbuf[BUFSIZE]; float fbuf[BUFSIZE]; long lbuf[BUFSIZE]; long long llbuf[BUFSIZE]; char *name; Integer ndim, dims[2]; Integer lo[2], hi[2]; a_grp = pnga_get_pgroup(g_a); pnga_pgroup_sync(a_grp); pnga_check_handle(g_a, "ga_print"); if(pnga_pgroup_nodeid(a_grp) == 0){ pnga_inquire(g_a, &type, &ndim, dims); dim1 = dims[0]; dim2 = dims[1]; /* name[FLEN-1]='\0';*/ pnga_inquire_name(g_a, &name); if (ilo <= 0 || ihi > dim1 || jlo <= 0 || jhi > dim2){ fprintf(stderr,"%ld %ld %ld %ld dims: [%ld,%ld]\n", (long)ilo,(long)ihi, (long)jlo,(long)jhi, (long)dim1, (long)dim2); pnga_error(" ga_print: indices out of range ", g_a); } fprintf(file,"\n global array: %s[%ld:%ld,%ld:%ld], handle: %d \n", name, (long)ilo, (long)ihi, (long)jlo, (long)jhi, (int)g_a); bufsize = (type==C_DCPL)? BUFSIZE/2 : BUFSIZE; bufsize = (type==C_SCPL)? BUFSIZE/2 : BUFSIZE; if (!pretty) { for (i=ilo; i 1) Error(error_buffer, icode); else{ fprintf(FOUT,"%s %ld\n",error_buffer,icode); perror("system message:"); fflush(FOUT); exit(1); } #endif } void ga_debug_suspend() { #ifdef HAVE_PAUSE fprintf(stdout,"ga_debug: process %ld ready for debugging\n", (long)getpid()); fflush(stdout); pause(); #endif } #ifdef ARMCI /********************************************************************* * N-dimensional operations * *********************************************************************/ /*\ print range of n-dimensional array with two strings before and after \*/ static void gai_print_range(char *pre,int ndim, Integer lo[], Integer hi[], char* post) { int i; printf("%s[",pre); for(i=0;i0; i--)printf("%ldx",(long)dims[i]); printf("%ld\n",(long)dims[0]); } /* print array range for every processor */ for(proc = 0; proc < nproc; proc++){ pnga_distribution(g_a,proc,lo,hi); sprintf(msg,"Process=%d\t owns array section: ",(int)proc); /* for C style need to swap and decremenent by 1 both arrays */ if(!fstyle){ for(i=0; i dims[i]) pnga_error("g_a indices out of range ", g_a); /* print the general information */ fprintf(file,"\n global array: %s[", name); for(i=0; i hi[i]) { if(i == (ndim-1)) { done = 0; } else { lop[i] = lo[i]; if(i == 0) hip[i] = GA_MIN(lop[i]+bufsize-1, hi[i]); else hip[i] = lo[i]; lop[i+1]++; hip[i+1]++; } } } } } else { /* pretty print */ done = 1; for(i=0; i 2)) { /* print the patch info */ fprintf(file,"\n -- patch: %s[", name); for(i=0; i 1)) { fprintf(file, "\n"); switch(type) { case C_INT: fprintf(file, " "); for (i=lop[1]; i<=hip[1]; i++) fprintf(file, "%7ld ", (long)i); fprintf(file,"\n "); for (i=lop[1]; i<=hip[1]; i++) fprintf(file," --------"); break; case C_LONG: fprintf(file, " "); for (i=lop[1]; i<=hip[1]; i++) fprintf(file, "%7ld ", (long)i); fprintf(file,"\n "); for (i=lop[1]; i<=hip[1]; i++) fprintf(file," --------"); break; case C_LONGLONG: fprintf(file, " "); for (i=lop[1]; i<=hip[1]; i++) fprintf(file, "%7ld ", (long)i); fprintf(file,"\n "); for (i=lop[1]; i<=hip[1]; i++) fprintf(file," --------"); break; case C_DBL: fprintf(file, " "); for (i=lop[1]; i<=hip[1]; i++) fprintf(file, "%10ld ", (long)i); fprintf(file,"\n "); for (i=lop[1]; i<=hip[1]; i++) fprintf(file," -----------"); break; case C_DCPL: for (i=lop[1]; i<=hip[1]; i++) fprintf(file, "%22ld ", (long)i); fprintf(file,"\n "); for (i=lop[1]; i<=hip[1]; i++) fprintf(file," -----------------------"); break; case C_SCPL: for (i=lop[1]; i<=hip[1]; i++) fprintf(file, "%22ld ", (long)i); fprintf(file,"\n "); for (i=lop[1]; i<=hip[1]; i++) fprintf(file," -----------------------"); break; case C_FLOAT: fprintf(file, " "); for (i=lop[1]; i<=hip[1]; i++) fprintf(file, "%7ld ", (long)i); fprintf(file,"\n "); for (i=lop[1]; i<=hip[1]; i++) fprintf(file," --------"); break; default: pnga_error("ga_print: wrong type", 0); } fprintf(file,"\n"); status_2d = 0; } switch(type) { case C_INT: pnga_get(g_a, lop, hip, ibuf_2d, ld); break; case C_LONG: pnga_get(g_a, lop, hip,lbuf_2d, ld); break; case C_LONGLONG: pnga_get(g_a, lop, hip,llbuf_2d,ld);break; case C_DBL: pnga_get(g_a, lop, hip, dbuf_2d, ld); break; case C_DCPL: pnga_get(g_a, lop, hip, dcbuf_2d, ld);break; case C_FLOAT: pnga_get(g_a, lop, hip, fbuf_2d, ld);break; case C_SCPL: pnga_get(g_a, lop, hip, fcbuf_2d, ld);break; default: pnga_error("ga_print: wrong type",0); } for(i=0; i<(hip[0]-lop[0]+1); i++) { fprintf(file,"%4ld ", (long)(lop[0]+i)); switch(type) { case C_INT: if(ndim > 1) for(j=0; j<(hip[1]-lop[1]+1); j++) fprintf(file," %8d", ibuf_2d[j*bufsize+i]); else fprintf(file," %8d", ibuf_2d[i]); break; case C_LONG: if(ndim > 1) for(j=0; j<(hip[1]-lop[1]+1); j++) fprintf(file," %8ld",lbuf_2d[j*bufsize+i]); else fprintf(file," %8ld",lbuf_2d[i]); break; case C_LONGLONG: if(ndim > 1) for(j=0; j<(hip[1]-lop[1]+1); j++) fprintf(file," %8lld",llbuf_2d[j*bufsize+i]); else fprintf(file," %8lld",llbuf_2d[i]); break; case C_DBL: if(ndim > 1) for(j=0; j<(hip[1]-lop[1]+1); j++) if((double)dbuf_2d[j*bufsize+i]<100000.0) fprintf(file," %11.5f", dbuf_2d[j*bufsize+i]); else fprintf(file," %.5e", dbuf_2d[j*bufsize+i]); else if((double)dbuf_2d[i]<100000.0) fprintf(file," %11.5f",dbuf_2d[i]); else fprintf(file," %.5e",dbuf_2d[i]); break; case C_FLOAT: if(ndim > 1) for(j=0; j<(hip[1]-lop[1]+1); j++) fprintf(file," %11.5f", fbuf_2d[j*bufsize+i]); else fprintf(file," %11.5f", fbuf_2d[i]); break; case C_DCPL: if(ndim > 1) for(j=0; j<(hip[1]-lop[1]+1); j++) if(((double)dcbuf_2d[(j*bufsize+i)*2]<100000.0)&&((double)dcbuf_2d[(j*bufsize+i)*2+1]<100000.0)) fprintf(file," %11.5f,%11.5f", dcbuf_2d[(j*bufsize+i)*2], dcbuf_2d[(j*bufsize+i)*2+1]); else fprintf(file," %.5e,%.5e", dcbuf_2d[(j*bufsize+i)*2], dcbuf_2d[(j*bufsize+i)*2+1]); else if(((double)dcbuf_2d[i*2]<100000.0) && ((double)dcbuf_2d[i*2+1]<100000.0)) fprintf(file," %11.5f,%11.5f", dcbuf_2d[i*2], dcbuf_2d[i*2+1]); else fprintf(file," %.5e,%.5e", dcbuf_2d[i*2], dcbuf_2d[i*2+1]); break; case C_SCPL: if(ndim > 1) for(j=0; j<(hip[1]-lop[1]+1); j++) if(((float)fcbuf_2d[(j*bufsize+i)*2]<100000.0)&&((float)fcbuf_2d[(j*bufsize+i)*2+1]<100000.0)) fprintf(file," %11.5f,%11.5f", fcbuf_2d[(j*bufsize+i)*2], fcbuf_2d[(j*bufsize+i)*2+1]); else fprintf(file," %.5e,%.5e", fcbuf_2d[(j*bufsize+i)*2], fcbuf_2d[(j*bufsize+i)*2+1]); else if(((float)fcbuf_2d[i*2]<100000.0) && ((float)fcbuf_2d[i*2+1]<100000.0)) fprintf(file," %11.5f,%11.5f", fcbuf_2d[i*2], fcbuf_2d[i*2+1]); else fprintf(file," %.5e,%.5e", fcbuf_2d[i*2], fcbuf_2d[i*2+1]); break; default: pnga_error("ga_print: wrong data type", 0); } fprintf(file,"\n"); } lop[0] = hip[0]+1; hip[0] = GA_MIN(lop[0]+bufsize-1, hi[0]); for(i=0; i hi[i]) { if(i == (ndim-1)) { done = 0; } else { lop[i] = lo[i]; if((i == 0) || (i == 1)) { hip[i] = GA_MIN(lop[i]+bufsize-1, hi[i]); } else { hip[i] = lo[i]; } if(i == 0) { lop[i+1] = hip[i+1]+1; hip[i+1] = GA_MIN(lop[i+1]+bufsize-1, hi[i+1]); } else { lop[i+1]++; hip[i+1]++; } if(i == 0) status_2d = 1; if(i == 1) status_3d = 1; } } } } } fflush(file); } pnga_sync(); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_print_patch = pnga_print_patch #endif void pnga_print_patch(Integer g_a, Integer *lo, Integer *hi, Integer pretty) { pnga_print_patch_file(stdout, g_a, lo, hi, pretty); } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_summarize = pnga_summarize #endif void pnga_summarize(Integer verbose) { #define DEV stdout Integer i, j, g_a; Integer printed, arr_no; Integer type, active; char *name; Integer ndim, dims[MAXDIM]; Integer lop[MAXDIM], hip[MAXDIM]; Integer nproc = pnga_nnodes(); fprintf(DEV, " Summary of allocated global arrays\n"); fprintf(DEV, "-----------------------------------\n"); printed = 0; arr_no = 0; for(g_a=-1000; g_a<-900; g_a++) { active = pnga_verify_handle(g_a); if(active == 1) { printed = 1; pnga_inquire(g_a, &type, &ndim, dims); pnga_inquire_name(g_a, &name); switch(type) { case C_INT: fprintf(DEV, " array %d => integer ", (int)arr_no); break; case C_DBL: fprintf(DEV, " array %d => double precision ",(int)arr_no); break; case C_DCPL: fprintf(DEV, " array %d => double complex ", (int)arr_no); break; case C_SCPL: fprintf(DEV, " array %d => float (single) complex ", (int)arr_no); break; case C_FLOAT: fprintf(DEV, " array %d => float ",(int)arr_no); break; case C_LONG: fprintf(DEV, " array %d => long ",(int)arr_no); break; case C_LONGLONG: fprintf(DEV, " array %d => long long",(int)arr_no); break; default: pnga_error("ga_print: wrong type",0); } arr_no++; fprintf(DEV,"%s(", name); for(i=0; i %d \n",(int) i); } } } } if(!printed) fprintf(DEV, " No active global arrays\n"); fprintf(DEV, "\n\n"); fflush(DEV); } #endif #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_print_file = pnga_print_file #endif void pnga_print_file(FILE *file, Integer g_a) { Integer i; Integer type, ndim, dims[MAXDIM]; Integer lo[MAXDIM]; Integer pretty = 1; pnga_inquire(g_a, &type, &ndim, dims); for(i=0; i #else # include "tcgmsg.h" #endif /*\ wrapper for wallclock timer. Returns an alapsed time on calling process \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_wtime = pnga_wtime #endif DoublePrecision pnga_wtime() { double wtime=0.0; #ifdef MPI wtime = MPI_Wtime(); #else wtime = tcg_time(); #endif return (DoublePrecision)wtime; } ga-5-3/global/src/peigstubs.c0000640005473000001440000000342311647111726015004 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "globalp.h" #include "ga-papi.h" #include "ga-wapi.h" #if ENABLE_PEIGS # if ENABLE_F77 # define gai_diag_ F77_FUNC_(gai_diag,GAI_DIAG) # define gai_diag_std_ F77_FUNC_(gai_diag_std,GAI_DIAG_STD) # define gai_diag_reuse_ F77_FUNC_(gai_diag_reuse,GAI_DIAG_REUSE) extern gai_diag_(Integer*,Integer*,Integer*,DoublePrecision*); extern gai_diag_std_(Integer*,Integer*,DoublePrecision*); extern gai_diag_reuse_(Integer*,Integer*,Integer*,Integer*,DoublePrecision*); # else # endif #else #endif #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_diag = pnga_diag #endif void pnga_diag(Integer g_a, Integer g_s, Integer g_v, DoublePrecision *eval) { #if ENABLE_PEIGS # if ENABLE_F77 gai_diag_(&g_a, &g_s, &g_v, eval); # else pnga_error("ga_diag:peigs interfaced, need to configure --enable-f77",0L); # endif #else pnga_error("ga_diag:peigs not interfaced",0L); #endif } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_diag_std = pnga_diag_std #endif void pnga_diag_std(Integer g_a, Integer g_v, DoublePrecision *eval) { #if ENABLE_PEIGS # if ENABLE_F77 gai_diag_std_(&g_a, &g_v, eval); # else pnga_error("ga_diag:peigs interfaced, need to configure --enable-f77",0L); # endif #else pnga_error("ga_diag:peigs not interfaced",0L); #endif } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_diag_reuse = pnga_diag_reuse #endif void pnga_diag_reuse(Integer reuse, Integer g_a, Integer g_s, Integer g_v, DoublePrecision *eval) { #if ENABLE_PEIGS # if ENABLE_F77 gai_diag_reuse_(&reuse, &g_a, &g_s, &g_v, eval); # else pnga_error("ga_diag:peigs interfaced, need to configure --enable-f77",0L); # endif #else pnga_error("ga_diag:peigs not interfaced",0L); #endif } ga-5-3/global/src/ghosts.c0000640005473000001440000047576612144763730014336 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: ghosts.c,v 1.47.4.2 2007-05-02 16:23:39 d3g293 Exp $ */ /* * module: ghosts.c * author: Bruce Palmer * description: implements GA collective communication operations to * update ghost cell regions. * * DISCLAIMER * * This material was prepared as an account of work sponsored by an * agency of the United States Government. Neither the United States * Government nor the United States Department of Energy, nor Battelle, * nor any of their employees, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR * ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, * COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, * SOFTWARE, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT * INFRINGE PRIVATELY OWNED RIGHTS. * * * ACKNOWLEDGMENT * * This software and its documentation were produced with United States * Government support under Contract Number DE-AC06-76RLO-1830 awarded by * the United States Department of Energy. The United States Government * retains a paid-up non-exclusive, irrevocable worldwide license to * reproduce, prepare derivative works, perform publicly and display * publicly by or for the US Government, including the right to * distribute to other US Government contractors. */ /*#define PERMUTE_PIDS */ #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_ASSERT_H # include #endif #include "global.h" #include "globalp.h" #include "base.h" #include "armci.h" #include "message.h" #include "macdecls.h" #include "ga-papi.h" #include "ga-wapi.h" /* from armcip.h, but armcip.h is private so we should not include it */ extern void armci_write_strided(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf); extern void armci_read_strided(void *ptr, int stride_levels, int stride_arr[], int count[], char *buf); extern armci_hdl_t* get_armci_nbhandle(Integer *); #define USE_MALLOC 1 #define INVALID_MA_HANDLE -1 #define NEAR_INT(x) (x)< 0.0 ? ceil( (x) - 0.5) : floor((x) + 0.5) #if !defined(CRAY_YMP) #define BYTE_ADDRESSABLE_MEMORY #endif /*uncomment line below to verify consistency of MA in every sync */ /*#define CHECK_MA yes */ /***************************************************************************/ /*\ Return a pointer to the location indicated by subscript and and an array * of leading dimensions (ld). Assume that subscript refers to a set of local * coordinates relative to the origin of the array and account for the * presence of ghost cells. \*/ #define gam_LocationWithGhosts(proc, handle, subscript, ptr_loc, ld) \ { \ Integer _d, _factor = 1, _last=GA[handle].ndim - 1, _offset=0; \ Integer _lo[MAXDIM], _hi[MAXDIM]; \ ga_ownsM(handle, proc, _lo, _hi); \ if (_last == 0) ld[0] = _hi[0] - _lo[0] + 1 + 2*(Integer)GA[handle].width[0];\ for (_d = 0; _d < _last; _d++) { \ _offset += subscript[_d] * _factor; \ ld[_d] = _hi[_d] - _lo[_d] + 1 + 2*(Integer)GA[handle].width[_d]; \ _factor *= ld[_d]; \ } \ _offset += subscript[_last] * _factor; \ *(ptr_loc) = GA[handle].ptr[proc] + _offset*GA[handle].elemsize; \ } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_access_ghost_ptr = pnga_access_ghost_ptr #endif void pnga_access_ghost_ptr(Integer g_a, Integer dims[], void* ptr, Integer ld[]) { char *lptr; Integer handle = GA_OFFSET + g_a; Integer i, lo[MAXDIM], hi[MAXDIM]; Integer ndim = GA[handle].ndim; Integer me = pnga_nodeid(); GA_PUSH_NAME("pnga_access_ghost_ptr"); pnga_distribution(g_a, me, lo, hi); for (i=0; i < ndim; i++) { dims[i] = 0; } gam_LocationWithGhosts(me, handle, dims, &lptr, ld); *(char**)ptr = lptr; for (i=0; i < ndim; i++) dims[i] = hi[i] - lo[i] + 1 + 2*(Integer)GA[handle].width[i]; GA_POP_NAME; } /*\ PROVIDE INDEX TO LOCALLY HELD DATA, ACCOUNTING FOR * PRESENCE OF GHOST CELLS \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_access_ghost_element = pnga_access_ghost_element #endif void pnga_access_ghost_element(Integer g_a, AccessIndex* index, Integer subscript[], Integer ld[]) { char *ptr=NULL; Integer handle = GA_OFFSET + g_a; Integer i=0; Integer tmp_sub[MAXDIM]; unsigned long elemsize=0; unsigned long lref=0, lptr=0; Integer me = pnga_nodeid(); GA_PUSH_NAME("nga_access_ghost_element"); /* Indices conform to Fortran convention. Shift them down 1 so that gam_LocationWithGhosts works. */ for (i=0; i0) me = PGRP_LIST[grp_id].map_proc_list[me]; ndim = GA[handle].ndim; /* Figure out whether or not lo and hi can be accessed completely from local data */ pnga_distribution(g_a, me, glo, ghi); ichk = 1; for (i=0; i ghi[i]+(Integer)GA[handle].width[i]) ichk = 0; llo[i] = glo[i] - (Integer)GA[handle].width[i]; if (i 0) { imax = 2; } else { imax = 1; } } else { imax = 1; } } else { lo_rem[i] = lo_loc[i]; hi_rem[i] = hi_loc[i]; } } for (inx = 0; inx < imax; inx++) { /* Check to see if boundary is being updated in one patch or two, adjust lower boundary accordingly. */ for (i=0; i= slo_rem[i]) { offset = tlo_rem[i] - lo_rem[i]; slice = thi_rem[i] - tlo_rem[i]; } else { offset = 0; slice = thi_rem[i] - slo_rem[i]; } if (offset < 0) offset = offset + dims[i]; if (offset >= dims[i]) offset = offset - dims[i]; plo_rem[i] = thi_rem[i] - tlo_rem[i] + width[i] - slice; phi_rem[i] = thi_rem[i] - tlo_rem[i] + width[i]; plo_loc[i] = offset; /*phi_loc[i] = offset + slice;*/ } } else { plo_rem[i] = width[i]; phi_rem[i] = thi_rem[i] - tlo_rem[i] + width[i]; plo_loc[i] = width[i]; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + width[i];*/ } } else { plo_rem[i] = 0; phi_rem[i] = thi_rem[i] - tlo_rem[i] + increment[i]; plo_loc[i] = 0; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + increment[i];*/ } } /* Get pointer to local data buffer and remote data buffer as well as lists of leading dimenstions */ gam_LocationWithGhosts(me, handle, plo_loc, &ptr_loc, ld_loc); gam_LocationWithGhosts(proc_rem, handle, plo_rem, &ptr_rem, ld_rem); /* Evaluate strides on local and remote processors */ gam_setstride(ndim, size, ld_loc, ld_rem, stride_rem, stride_loc); /* Compute the number of elements in each dimension and store result in count. Scale the first element in count by the element size. */ gam_ComputeCount(ndim, plo_rem, phi_rem, count); count[0] *= size; /* get remote data */ if (p_handle >= 0) { proc_rem = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem]; } ARMCI_GetS(ptr_rem, stride_rem, ptr_loc, stride_loc, count, (int)(ndim - 1), (int)proc_rem); } } /* Perform update in positive direction. Start by getting rough estimate of block of needed data*/ for (i = 0; i < ndim; i++) { if (i == idx) { lo_rem[i] = hi_loc[i] + 1; hi_rem[i] = hi_loc[i] + nwidth; /* Check to see if we will need to update ghost cells using one or two major patches of the global array. */ if (hi_rem[i] > dims[i]) { if (lo_rem[i] <= dims[i]) { imax = 2; } else { imax = 1; } } else { imax = 1; } } else { lo_rem[i] = lo_loc[i]; hi_rem[i] = hi_loc[i]; } } for (inx = 0; inx < imax; inx++) { /* Check to see if boundary is being updated in one patch or two, adjust lower boundary accordingly. */ for (i=0; i dims[i]) { slo_rem[i] = 1; shi_rem[i] = nwidth; } else { slo_rem[i] = lo_rem[i]; shi_rem[i] = hi_rem[i]; } } else { slo_rem[i] = lo_rem[i]; shi_rem[i] = hi_rem[i]; } } /* locate processor with this data */ if (!pnga_locate_region(g_a, slo_rem, shi_rem, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), slo_rem, shi_rem, g_a); for (ipx = 0; ipx < np; ipx++) { /* Get actual coordinates of desired chunk of remote data as well as the actual coordinates of the local chunk of data that will receive the remote data (these coordinates take into account the presence of ghost cells). Start by finding out what data is actually held by remote processor. */ proc_rem = GA_proclist[ipx]; pnga_distribution(g_a, proc_rem, tlo_rem, thi_rem); for (i = 0; i < ndim; i++) { if (increment[i] == 0) { if (i == idx) { if (np == 1 && imax == 1) { plo_rem[i] = width[i]; phi_rem[i] = 2*width[i] - 1; plo_loc[i] = hi_loc[i] - lo_loc[i] + 1 + width[i]; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + 2*width[i];*/ } else { offset = tlo_rem[i] - hi_loc[i] - 1; if (thi_rem[i] <= shi_rem[i]) { slice = thi_rem[i] - tlo_rem[i]; } else { slice = shi_rem[i] - tlo_rem[i]; } if (offset < 0) offset = offset + dims[i]; if (offset >= dims[i]) offset = offset - dims[i]; plo_rem[i] = width[i]; phi_rem[i] = width[i] + slice; plo_loc[i] = hi_loc[i] - lo_loc[i] + width[i] + 1 + offset; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + width[i] + 1 + offset + slice;*/ } } else { plo_rem[i] = width[i]; phi_rem[i] = thi_rem[i] - tlo_rem[i] + width[i]; plo_loc[i] = width[i]; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + width[i];*/ } } else { plo_rem[i] = 0; phi_rem[i] = thi_rem[i] - tlo_rem[i] + increment[i]; plo_loc[i] = 0; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + increment[i];*/ } } /* Get pointer to local data buffer and remote data buffer as well as lists of leading dimenstions */ gam_LocationWithGhosts(me, handle, plo_loc, &ptr_loc, ld_loc); gam_LocationWithGhosts(proc_rem, handle, plo_rem, &ptr_rem, ld_rem); /* Evaluate strides on local and remote processors */ gam_setstride(ndim, size, ld_loc, ld_rem, stride_rem, stride_loc); /* Compute the number of elements in each dimension and store result in count. Scale the first element in count by the element size. */ gam_ComputeCount(ndim, plo_rem, phi_rem, count); count[0] *= size; /* get remote data */ if (p_handle >= 0) { proc_rem = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem]; } ARMCI_GetS(ptr_rem, stride_rem, ptr_loc, stride_loc, count, (int)(ndim - 1), (int)proc_rem); } } } /* synchronize all processors and update increment array */ if (idx < ndim-1) pnga_pgroup_sync(p_handle); if (corner_flag) increment[idx] = 2*nwidth; } GA_POP_NAME; } /*\ UTILITY FUNCTION TO MAKE SURE GHOST CELLS WIDTHS ARE * LESS THAN VISIBLE DATA WIDTHS \*/ static logical gai_check_ghost_distr(Integer g_a) { Integer handle=GA_OFFSET + g_a; Integer idx, ndim, np, ipx; ndim = GA[handle].ndim; ipx = 0; for (idx = 0; idx < ndim; idx++) { for (np = 0; np < GA[handle].nblock[idx]; np++) { if (np < GA[handle].nblock[idx] - 1) { if (GA[handle].mapc[ipx+1]-GA[handle].mapc[ipx]+1 1) mask0 = TRUE; */ if (mask0) continue; /* Now that mask has been determined, find data that is to be moved * and identify processor to which it is going. Wrap boundaries * around, if necessary */ for (idx = 0; idx < ndim; idx++) { if (mask[idx] == 0) { /*tlo_loc[idx] = lo_loc[idx];*/ /*thi_loc[idx] = hi_loc[idx];*/ tlo_rem[idx] = lo_loc[idx]; thi_rem[idx] = hi_loc[idx]; } else if (mask[idx] == -1) { /*tlo_loc[idx] = lo_loc[idx];*/ /*thi_loc[idx] = lo_loc[idx]+width[idx]-1;*/ if (lo_loc[idx] > 1) { tlo_rem[idx] = lo_loc[idx]-width[idx]; thi_rem[idx] = lo_loc[idx]-1; } else { tlo_rem[idx] = dims[idx]-width[idx]+1; thi_rem[idx] = dims[idx]; } } else if (mask[idx] == 1) { /*tlo_loc[idx] = hi_loc[idx]-width[idx]+1;*/ /*thi_loc[idx] = hi_loc[idx];*/ if (hi_loc[idx] < dims[idx]) { tlo_rem[idx] = hi_loc[idx] + 1; thi_rem[idx] = hi_loc[idx] + width[idx]; } else { tlo_rem[idx] = 1; thi_rem[idx] = width[idx]; } } else { fprintf(stderr,"Illegal mask value found\n"); } } /* Locate remote processor to which data must be sent */ if (!pnga_locate_region(g_a, tlo_rem, thi_rem, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), tlo_rem, thi_rem, g_a); if (np > 1) { fprintf(stderr,"More than one remote processor found\n"); } /* Remote processor has been identified, now get ready to send data to it. Start by getting distribution on remote processor.*/ proc_rem = GA_proclist[0]; pnga_distribution(g_a, proc_rem, tlo_rem, thi_rem); for (idx = 0; idx < ndim; idx++) { if (mask[idx] == 0) { plo_loc[idx] = width[idx]; phi_loc[idx] = hi_loc[idx]-lo_loc[idx]+width[idx]; plo_rem[idx] = plo_loc[idx]; } else if (mask[idx] == -1) { plo_loc[idx] = width[idx]; phi_loc[idx] = 2*width[idx]-1; plo_rem[idx] = thi_rem[idx]-tlo_rem[idx]+width[idx]+1; } else if (mask[idx] == 1) { plo_loc[idx] = hi_loc[idx]-lo_loc[idx]+1; phi_loc[idx] = hi_loc[idx]-lo_loc[idx]+width[idx]; plo_rem[idx] = 0; } } /* Get pointer to local data buffer and remote data buffer as well as lists of leading dimenstions */ gam_LocationWithGhosts(me, handle, plo_loc, &ptr_loc, ld_loc); gam_LocationWithGhosts(proc_rem, handle, plo_rem, &ptr_rem, ld_rem); /* Evaluate strides on local and remote processors */ gam_setstride(ndim, size, ld_loc, ld_rem, stride_rem, stride_loc); /* Compute the number of elements in each dimension and store result in count. Scale the first element in count by the element size. */ gam_ComputeCount(ndim, plo_loc, phi_loc, count); count[0] *= size; /* put data on remote processor */ /*ARMCI_PutS(ptr_loc, stride_loc, ptr_rem, stride_rem, count, (int)(ndim - 1), (int)proc_rem);*/ if (p_handle >= 0) { proc_rem = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem]; } ARMCI_NbPutS(ptr_loc, stride_loc, ptr_rem, stride_rem, count, (int)(ndim - 1), (int)proc_rem, NULL); } ARMCI_WaitAll(); GA_POP_NAME; return TRUE; } /*\ GET INDICES ON REMOTE BLOCK IN NEGATIVE DIRECTION FOR UPDATE \*/ static void get_remote_block_neg(Integer idx, Integer ndim, Integer *lo_loc, Integer *hi_loc, Integer *slo_rem, Integer *shi_rem, Integer *dims, Integer *width) { Integer i, lo_rem[MAXDIM], hi_rem[MAXDIM]; /*Start by getting rough idea of where data needs to go. */ for (i = 0; i < ndim; i++) { if (i == idx) { lo_rem[i] = lo_loc[i] - width[i]; hi_rem[i] = lo_loc[i] - 1; } else { lo_rem[i] = lo_loc[i]; hi_rem[i] = hi_loc[i]; } } /* Account for boundaries, if necessary. */ for (i=0; i dims[i]) { slo_rem[i] = 1; shi_rem[i] = width[i]; } else { slo_rem[i] = lo_rem[i]; shi_rem[i] = hi_rem[i]; } } else { slo_rem[i] = lo_rem[i]; shi_rem[i] = hi_rem[i]; } } } /*\ UPDATE GHOST CELLS OF GLOBAL ARRAY USING SHIFT ALGORITHM AND PUT CALLS \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_update3_ghosts = pnga_update3_ghosts #endif logical pnga_update3_ghosts(Integer g_a) { Integer idx, i, np, handle=GA_OFFSET + g_a, proc_rem; Integer size, ndim, nwidth, increment[MAXDIM]; Integer width[MAXDIM]; Integer dims[MAXDIM]; Integer lo_loc[MAXDIM], hi_loc[MAXDIM]; Integer plo_loc[MAXDIM]/*, phi_loc[MAXDIM]*/; Integer tlo_rem[MAXDIM], thi_rem[MAXDIM]; Integer slo_rem[MAXDIM], shi_rem[MAXDIM]; Integer plo_rem[MAXDIM], phi_rem[MAXDIM]; Integer ld_loc[MAXDIM], ld_rem[MAXDIM]; int stride_loc[MAXDIM], stride_rem[MAXDIM],count[MAXDIM]; char *ptr_loc, *ptr_rem; Integer me = pnga_nodeid(); Integer p_handle; /* This routine makes use of the shift algorithm to update data in the * ghost cells bounding the local block of visible data. The shift * algorithm starts by updating the blocks of data along the first * dimension by grabbing a block of data that is width[0] deep but * otherwise matches the dimensions of the data residing on the * calling processor. The update of the second dimension, however, * grabs a block that is width[1] deep in the second dimension but is * ldim0 + 2*width[0] in the first dimensions where ldim0 is the * size of the visible data along the first dimension. The remaining * dimensions are left the same. For the next update, the width of the * second dimension is also increased by 2*width[1] and so on. This * algorith makes use of the fact that data for the dimensions that * have already been updated is available on each processor and can be * used in the updates of subsequent dimensions. The total number of * separate updates is 2*ndim, an update in the negative and positive * directions for each dimension. This implementation uses simple put * operations to perform the updates along each dimension with an * intervening synchronization call being used to make sure that the * necessary data is available on each processor before starting the * update along the next dimension. * * To perform the update, this routine makes use of several copies of * indices marking the upper and lower limits of data. Indices * beginning with the character "p" are relative indices marking the * location of the data set relative to the origin the local patch of * the global array, all other indices are in absolute coordinates and * mark locations in the total global array. The indices used by this * routine are described below. * * lo_loc[], hi_loc[]: The lower and upper indices of the visible * block of data held by the calling processor. * * lo_rem[], hi_rem[]: The lower and upper indices of the block * of data on a remote processor or processors that is needed to * fill in the calling processors ghost cells. These indices are * NOT corrected for wrap-around (periodic) boundary conditions * so they can be negative or greater than the array dimension * values held in dims[]. * * slo_rem[], shi_rem[]: Similar to lo_rem[] and hi_rem[], except * that these indices have been corrected for wrap-around * boundary conditions. * * thi_rem[], thi_rem[]: The lower and upper indices of the visible * data on a remote processor. * * plo_loc[], phi_loc[]: The indices of the local data patch that * is going to be updated. * * plo_rem[], phi_rem[]: The indices of the data patch on the * remote processor that will be used to update the data on the * calling processor. Note that the dimensions of the patches * represented by plo_loc[], plo_rem[] and plo_loc[], phi_loc[] * must be the same. */ /* if global array has no ghost cells, just return */ if (!pnga_has_ghosts(g_a)) return TRUE; size = GA[handle].elemsize; ndim = GA[handle].ndim; p_handle = GA[handle].p_handle; /* obtain range of data that is held by local processor */ pnga_distribution(g_a,me,lo_loc,hi_loc); /* initialize range increments and get array dimensions */ for (idx=0; idx < ndim; idx++) { increment[idx] = 0; width[idx] = (Integer)GA[handle].width[idx]; dims[idx] = (Integer)GA[handle].dims[idx]; if (lo_loc[idx] == 0 && hi_loc[idx] == -1) return FALSE; } /* Check to make sure that global array is well-behaved (all processors have data and the width of the data in each dimension is greater than the corresponding value in width[]. */ if (!gai_check_ghost_distr(g_a)) return FALSE; GA_PUSH_NAME("ga_update3_ghosts"); /* Get pointer to local memory */ ptr_loc = GA[handle].ptr[me]; /* loop over dimensions for sequential update using shift algorithm */ for (idx=0; idx < ndim; idx++) { nwidth = width[idx]; /* Do not bother with update if nwidth is zero */ if (nwidth != 0) { /* Perform update in negative direction. */ get_remote_block_neg(idx, ndim, lo_loc, hi_loc, slo_rem, shi_rem, dims, width); /* locate processor with this data */ if (!pnga_locate_region(g_a, slo_rem, shi_rem, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), slo_rem, shi_rem, g_a); /* Get actual coordinates of desired location of remote data as well as the actual coordinates of the local chunk of data that will be sent to remote processor (these coordinates take into account the presence of ghost cells). Start by finding out what data is actually held by remote processor. */ proc_rem = GA_proclist[0]; pnga_distribution(g_a, proc_rem, tlo_rem, thi_rem); for (i = 0; i < ndim; i++) { if (increment[i] == 0) { if (i == idx) { plo_rem[i] = thi_rem[i] - tlo_rem[i] + width[i] + 1; phi_rem[i] = thi_rem[i] - tlo_rem[i] + 2*width[i]; plo_loc[i] = width[i]; /*phi_loc[i] = 2*width[i] - 1;*/ } else { plo_rem[i] = width[i]; phi_rem[i] = thi_rem[i] - tlo_rem[i] + width[i]; plo_loc[i] = width[i]; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + width[i];*/ } } else { plo_rem[i] = 0; phi_rem[i] = thi_rem[i] - tlo_rem[i] + increment[i]; plo_loc[i] = 0; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + increment[i];*/ } } /* Get pointer to local data buffer and remote data buffer as well as lists of leading dimenstions */ gam_LocationWithGhosts(me, handle, plo_loc, &ptr_loc, ld_loc); gam_LocationWithGhosts(proc_rem, handle, plo_rem, &ptr_rem, ld_rem); /* Evaluate strides on local and remote processors */ gam_setstride(ndim, size, ld_loc, ld_rem, stride_rem, stride_loc); /* Compute the number of elements in each dimension and store result in count. Scale the first element in count by the element size. */ gam_ComputeCount(ndim, plo_rem, phi_rem, count); count[0] *= size; /* Put local data on remote processor */ if (p_handle >= 0) { proc_rem = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem]; } ARMCI_PutS(ptr_loc, stride_loc, ptr_rem, stride_rem, count, (int)(ndim - 1), (int)proc_rem); /* Perform update in positive direction */ get_remote_block_pos(idx, ndim, lo_loc, hi_loc, slo_rem, shi_rem, dims, width); /* locate processor with this data */ if (!pnga_locate_region(g_a, slo_rem, shi_rem, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), slo_rem, shi_rem, g_a); /* Get actual coordinates of desired chunk of remote data as well as the actual coordinates of the local chunk of data that will receive the remote data (these coordinates take into account the presence of ghost cells). Start by finding out what data is actually held by remote processor. */ proc_rem = GA_proclist[0]; pnga_distribution(g_a, proc_rem, tlo_rem, thi_rem); for (i = 0; i < ndim; i++) { if (increment[i] == 0) { if (i == idx) { plo_rem[i] = 0; phi_rem[i] = width[i] - 1; plo_loc[i] = hi_loc[i] - lo_loc[i] + width[i] - 1; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + 2*width[i] - 1;*/ } else { plo_rem[i] = width[i]; phi_rem[i] = thi_rem[i] - tlo_rem[i] + width[i]; plo_loc[i] = width[i]; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + width[i];*/ } } else { plo_rem[i] = 0; phi_rem[i] = thi_rem[i] - tlo_rem[i] + increment[i]; plo_loc[i] = 0; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + increment[i];*/ } } /* Get pointer to local data buffer and remote data buffer as well as lists of leading dimenstions */ gam_LocationWithGhosts(me, handle, plo_loc, &ptr_loc, ld_loc); gam_LocationWithGhosts(proc_rem, handle, plo_rem, &ptr_rem, ld_rem); /* Evaluate strides on local and remote processors */ gam_setstride(ndim, size, ld_loc, ld_rem, stride_rem, stride_loc); /* Compute the number of elements in each dimension and store result in count. Scale the first element in count by the element size. */ gam_ComputeCount(ndim, plo_rem, phi_rem, count); count[0] *= size; /* get remote data */ if (p_handle >= 0) { proc_rem = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem]; } ARMCI_PutS(ptr_loc, stride_loc, ptr_rem, stride_rem, count, (int)(ndim - 1), (int)proc_rem); } /* synchronize all processors and update increment array */ if (idx < ndim-1) pnga_pgroup_sync(p_handle); increment[idx] = 2*nwidth; } GA_POP_NAME; return TRUE; } #define GHOST_PRINT 0 /*\ UPDATE GHOST CELLS OF GLOBAL ARRAY USING SHIFT ALGORITHM AND * MESSAGE PASSING \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_set_update4_info = pnga_set_update4_info #endif logical pnga_set_update4_info(Integer g_a) { Integer idx, idir, i, np, handle=GA_OFFSET + g_a; Integer size, buflen, buftot, *bufsize, ndim, increment[MAXDIM]; Integer *proc_rem_snd, *proc_rem_rcv; Integer *length; Integer width[MAXDIM], dims[MAXDIM], index[MAXDIM]; Integer lo_loc[MAXDIM], hi_loc[MAXDIM]; Integer plo_snd[MAXDIM], phi_snd[MAXDIM]; Integer lo_rcv[MAXDIM], hi_rcv[MAXDIM]; Integer slo_rcv[MAXDIM], shi_rcv[MAXDIM]; Integer plo_rcv[MAXDIM], phi_rcv[MAXDIM]; Integer ld_loc[MAXDIM]; int *stride_snd, *stride_rcv, *count, cache_size; /*int corner_flag;*/ char **ptr_snd, **ptr_rcv, *cache; char *current; Integer me = pnga_nodeid(); Integer p_handle; /* This routine sets the arrays that are used to transfer data using * the update4. To perform the update, this routine makes use of several * copies of indices marking the upper and lower limits of data. Indices * beginning with the character "p" are relative indices marking the * location of the data set relative to the origin the local patch of * the global array, all other indices are in absolute coordinates and * mark locations in the total global array. The indices used by this * routine are described below. * * lo_loc[], hi_loc[]: The lower and upper indices of the visible * block of data held by the calling processor. * * lo_rcv[], hi_rcv[]: The lower and upper indices of the blocks * of data that will be either sent to or received from a remote * processor. These indices are NOT corrected for wrap-around * (periodic) boundary conditions so they can be negative or greater * than the array dimension values held in dims[]. * * slo_rcv[], shi_rcv[]: Similar to lo_rcv[] and hi_rcv[], except * that these indices have been corrected for wrap-around * boundary conditions. * * plo_rcv[], phi_rcv[]: The local indices of the local data patch * that receive that message from the remote processor. * * plo_snd[], phi_snd[]: The local indices of the data patch * that will be sent to the remote processor. Note that the * dimensions of the patches represented by plo_rec[], plo_rec[] and * plo_snd[], phi_snd[] must be the same. */ /* if global array has no ghost cells, just return */ if (!pnga_has_ghosts(g_a)) return TRUE; /* Check to make sure that global array is well-behaved (all processors have data and the width of the data in each dimension is greater than the corresponding value in width[]. */ if (!gai_check_ghost_distr(g_a)) return FALSE; size = GA[handle].elemsize; ndim = GA[handle].ndim; p_handle = GA[handle].p_handle; cache_size = 2*sizeof(char *)+3*ndim*sizeof(int)+3*sizeof(Integer); cache_size = 2* ndim *((cache_size/8) + 1) + 1; GA[handle].cache = (double *)malloc(sizeof(double)*cache_size); cache = (char *)GA[handle].cache; /*corner_flag = GA[handle].corner_flag;*/ #if GHOST_PRINT printf("p[%d]a cache_size: %d\n",GAme,cache_size); #endif /* initialize range increments and get array dimensions */ pnga_distribution(g_a,me,lo_loc,hi_loc); for (idx=0; idx < ndim; idx++) { increment[idx] = 0; width[idx] = (Integer)GA[handle].width[idx]; dims[idx] = (Integer)GA[handle].dims[idx]; if (lo_loc[idx] == 0 && hi_loc[idx] == -1) { *(char**)cache = NULL; return FALSE; } } /* Get indices of processor in virtual grid */ pnga_proc_topology(g_a, me, index); /* Try to find maximum size of message that will be sent during * update operations and use this to allocate memory for message * passing buffers. */ buftot = 1; for (i=0; i= 0) { *proc_rem_snd = PGRP_LIST[p_handle].inv_map_proc_list[*proc_rem_snd]; } /* Find processor from which data will be recieved */ for (i = 0; i < ndim; i++) { if (i == idx) { lo_rcv[i] = hi_loc[i] + 1; hi_rcv[i] = hi_loc[i] + width[i]; } else { lo_rcv[i] = lo_loc[i]; hi_rcv[i] = hi_loc[i]; } } /* Account for boundaries, if necessary. */ for (i=0; i dims[i]) { slo_rcv[i] = 1; shi_rcv[i] = width[i]; } else { slo_rcv[i] = lo_rcv[i]; shi_rcv[i] = hi_rcv[i]; } } else { slo_rcv[i] = lo_rcv[i]; shi_rcv[i] = hi_rcv[i]; } } /* locate processor with this data */ if (!pnga_locate_region(g_a, slo_rcv, shi_rcv, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), slo_rcv, shi_rcv, g_a); *proc_rem_rcv = GA_proclist[0]; if (p_handle >= 0) { *proc_rem_rcv = PGRP_LIST[p_handle].inv_map_proc_list[*proc_rem_rcv]; } /* Get actual coordinates of chunk of data that will be sent to * remote processor as well as coordinates of the array space that * will receive data from remote processor. */ for (i = 0; i < ndim; i++) { if (increment[i] == 0) { if (i == idx) { plo_snd[i] = width[i]; phi_snd[i] = 2*width[i] - 1; plo_rcv[i] = hi_loc[i] - lo_loc[i] + width[i] + 1; phi_rcv[i] = hi_loc[i] - lo_loc[i] + 2*width[i]; } else { plo_snd[i] = width[i]; phi_snd[i] = hi_loc[i] - lo_loc[i] + width[i]; plo_rcv[i] = width[i]; phi_rcv[i] = hi_loc[i] - lo_loc[i] + width[i]; } } else { plo_rcv[i] = 0; phi_rcv[i] = hi_loc[i] - lo_loc[i] + increment[i]; plo_snd[i] = 0; phi_snd[i] = hi_loc[i] - lo_loc[i] + increment[i]; } } /* Get pointer to local data buffer and remote data buffer as well as lists of leading dimenstions */ gam_LocationWithGhosts(me, handle, plo_snd, ptr_snd, ld_loc); #if GHOST_PRINT printf("p[%d]a 1: plo_snd[0]: %d plo_snd[1]: %d ptr_snd: %d\n", GAme, plo_snd[0], plo_snd[1], (Integer)*ptr_snd); fflush(stdout); #endif gam_LocationWithGhosts(me, handle, plo_rcv, ptr_rcv, ld_loc); #if GHOST_PRINT printf("p[%d]a 1: plo_rcv[0]: %d plo_rcv[1]: %d ptr_rcv: %d\n", GAme, plo_rcv[0], plo_rcv[1], (Integer)*ptr_rcv); fflush(stdout); #endif /* Evaluate strides for send and recieve */ gam_setstride(ndim, size, ld_loc, ld_loc, stride_rcv, stride_snd); /* Compute the number of elements in each dimension and store result in count. Scale the first element in count by the element size. */ gam_ComputeCount(ndim, plo_rcv, phi_rcv, count); gam_CountElems(ndim, plo_snd, phi_snd, length); *length *= size; count[0] *= size; #if GHOST_PRINT printf("p[%d]a 1: length: %d bufsize: %d proc_rem_snd: %d proc_rem_rcv: %d\n", GAme, *length, *bufsize, (int)*proc_rem_snd, (int)*proc_rem_rcv); printf("p[%d]a 1: count[0]: %d stride_rcv[0]: %d stride_rcv[1]: %d\n", GAme, count[0], stride_rcv[0],stride_rcv[1]); printf("p[%d]a 1: count[1]: %d stride_rcv[2]: %d stride_rcv[3]: %d\n", GAme, count[1], stride_rcv[2],stride_rcv[3]); printf("p[%d]a 1: count[2]: %d stride_snd[0]: %d stride_snd[1]: %d\n", GAme, count[2], stride_snd[0],stride_snd[1]); printf("p[%d]a 1: count[3]: %d stride_snd[2]: %d stride_snd[3]: %d\n", GAme, count[3], stride_snd[2],stride_snd[3]); fflush(stdout); #endif ptr_snd = (char**)current; ptr_rcv = (char**)(ptr_snd+1); proc_rem_snd = (Integer*)(ptr_rcv+1); proc_rem_rcv = (Integer*)(proc_rem_snd+1); stride_snd = (int*)(proc_rem_rcv+1); stride_rcv = (int*)(stride_snd+ndim); length = (Integer*)(stride_rcv+ndim); count = (int*)(length+1); current = (char*)(count+ndim); /* Find parameters for message in positive direction. */ get_remote_block_pos(idx, ndim, lo_loc, hi_loc, slo_rcv, shi_rcv, dims, width); /* locate processor with this data */ if (!pnga_locate_region(g_a, slo_rcv, shi_rcv, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), slo_rcv, shi_rcv, g_a); *proc_rem_snd = GA_proclist[0]; if (p_handle >= 0) { *proc_rem_snd = PGRP_LIST[p_handle].inv_map_proc_list[*proc_rem_snd]; } /* Find processor from which data will be recieved */ for (i = 0; i < ndim; i++) { if (i == idx) { lo_rcv[i] = lo_loc[i] - width[i]; hi_rcv[i] = lo_loc[i] - 1; } else { lo_rcv[i] = lo_loc[i]; hi_rcv[i] = hi_loc[i]; } } /* Account for boundaries, if necessary. */ for (i=0; i= 0) { *proc_rem_rcv = PGRP_LIST[p_handle].inv_map_proc_list[*proc_rem_rcv]; } /* Get actual coordinates of chunk of data that will be sent to * remote processor as well as coordinates of the array space that * will receive data from remote processor. */ for (i = 0; i < ndim; i++) { if (increment[i] == 0) { if (i == idx) { plo_snd[i] = hi_loc[i] - lo_loc[i] + 1; phi_snd[i] = hi_loc[i] - lo_loc[i] + width[i]; plo_rcv[i] = 0; phi_rcv[i] = width[i] - 1; } else { plo_snd[i] = width[i]; phi_snd[i] = hi_loc[i] - lo_loc[i] + width[i]; plo_rcv[i] = width[i]; phi_rcv[i] = hi_loc[i] - lo_loc[i] + width[i]; } } else { plo_rcv[i] = 0; phi_rcv[i] = hi_loc[i] - lo_loc[i] + increment[i]; plo_snd[i] = 0; phi_snd[i] = hi_loc[i] - lo_loc[i] + increment[i]; } } /* Get pointer to local data buffer and remote data buffer as well as lists of leading dimenstions */ gam_LocationWithGhosts(me, handle, plo_snd, ptr_snd, ld_loc); #if GHOST_PRINT printf("p[%d]a 2: plo_snd[0]: %d plo_snd[1]: %d ptr_snd: %d\n", GAme, plo_snd[0], plo_snd[1], (Integer)*ptr_snd); fflush(stdout); #endif gam_LocationWithGhosts(me, handle, plo_rcv, ptr_rcv, ld_loc); #if GHOST_PRINT printf("p[%d]a 2: plo_rcv[0]: %d plo_rcv[1]: %d ptr_rcv: %d\n", GAme, plo_rcv[0], plo_rcv[1], (Integer)*ptr_rcv); fflush(stdout); #endif /* Evaluate strides for send and recieve */ gam_setstride(ndim, size, ld_loc, ld_loc, stride_rcv, stride_snd); /* Compute the number of elements in each dimension and store result in count. Scale the first element in count by the element size. */ gam_ComputeCount(ndim, plo_rcv, phi_rcv, count); gam_CountElems(ndim, plo_snd, phi_snd, length); *length *= size; count[0] *= size; #if GHOST_PRINT printf("p[%d]a 2: length: %d bufsize: %d proc_rem_snd: %d proc_rem_rcv: %d\n", GAme, *length, *bufsize, (int)*proc_rem_snd, (int)*proc_rem_rcv); printf("p[%d]a 2: count[0]: %d stride_rcv[0]: %d stride_rcv[1]: %d\n", GAme, count[0], stride_rcv[0],stride_rcv[1]); printf("p[%d]a 2: count[1]: %d stride_rcv[2]: %d stride_rcv[3]: %d\n", GAme, count[1], stride_rcv[2],stride_rcv[3]); printf("p[%d]a 2: count[2]: %d stride_snd[0]: %d stride_snd[1]: %d\n", GAme, count[2], stride_snd[0],stride_snd[1]); printf("p[%d]a 2: count[3]: %d stride_snd[2]: %d stride_snd[3]: %d\n", GAme, count[3], stride_snd[2],stride_snd[3]); fflush(stdout); #endif } if (GA[handle].corner_flag) increment[idx] = 2*width[idx]; } #if GHOST_PRINT printf("p[%d]a final pointer: %d\n",GAme,(Integer)(Integer*)current); fflush(stdout); #endif return TRUE; } /*\ UPDATE GHOST CELLS OF GLOBAL ARRAY USING SHIFT ALGORITHM AND * MESSAGE PASSING \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_update4_ghosts = pnga_update4_ghosts #endif logical pnga_update4_ghosts(Integer g_a) { Integer idx, i, handle=GA_OFFSET + g_a; Integer *size, bufsize, buflen, ndim, elemsize; Integer *proc_rem_snd, *proc_rem_rcv, pmax; Integer msgcnt, *length; Integer index[MAXDIM], width[MAXDIM]; int *stride_snd, *stride_rcv, *count, msglen; char **ptr_snd, **ptr_rcv, *cache, *current; char send_name[32], rcv_name[32]; void *snd_ptr, *rcv_ptr, *snd_ptr_orig, *rcv_ptr_orig; Integer me = pnga_nodeid(); /*Integer p_handle;*/ /* This routine makes use of the shift algorithm to update data in the * ghost cells bounding the local block of visible data. The shift * algorithm starts by updating the blocks of data along the first * dimension by grabbing a block of data that is width[0] deep but * otherwise matches the dimensions of the data residing on the * calling processor. The update of the second dimension, however, * grabs a block that is width[1] deep in the second dimension but is * ldim0 + 2*width[0] in the first dimensions where ldim0 is the * size of the visible data along the first dimension. The remaining * dimensions are left the same. For the next update, the width of the * second dimension is also increased by 2*width[1] and so on. This * algorith makes use of the fact that data for the dimensions that * have already been updated is available on each processor and can be * used in the updates of subsequent dimensions. The total number of * separate updates is 2*ndim, an update in the negative and positive * directions for each dimension. * * This implementation make use of explicit message passing to perform * the update. Separate message types for the updates in each coordinate * direction are used to maintain synchronization locally and to * guarantee that the data is present before the updates in a new * coordinate direction take place. */ /* if global array has no ghost cells, just return */ if (!pnga_has_ghosts(g_a)) return TRUE; ndim = GA[handle].ndim; /*p_handle = GA[handle].p_handle;*/ cache = (char *)GA[handle].cache; elemsize = GA[handle].elemsize; for (i=0; i= 0) { proc_rem_snd = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem_snd]; } /* Find processor from which data will be recieved */ for (i = 0; i < ndim; i++) { if (i == idx) { lo_rcv[i] = hi_loc[i] + 1; hi_rcv[i] = hi_loc[i] + width[i]; } else { lo_rcv[i] = lo_loc[i]; hi_rcv[i] = hi_loc[i]; } } /* Account for boundaries, if necessary. */ for (i=0; i dims[i]) { slo_rcv[i] = 1; shi_rcv[i] = width[i]; } else { slo_rcv[i] = lo_rcv[i]; shi_rcv[i] = hi_rcv[i]; } } else { slo_rcv[i] = lo_rcv[i]; shi_rcv[i] = hi_rcv[i]; } } /* locate processor with this data */ if (!pnga_locate_region(g_a, slo_rcv, shi_rcv, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), slo_rcv, shi_rcv, g_a); proc_rem_rcv = GA_proclist[0]; if (p_handle >= 0) { proc_rem_rcv = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem_rcv]; } /* Get actual coordinates of chunk of data that will be sent to * remote processor as well as coordinates of the array space that * will receive data from remote processor. */ for (i = 0; i < ndim; i++) { if (increment[i] == 0) { if (i == idx) { plo_snd[i] = width[i]; phi_snd[i] = 2*width[i] - 1; plo_rcv[i] = hi_loc[i] - lo_loc[i] + width[i] + 1; phi_rcv[i] = hi_loc[i] - lo_loc[i] + 2*width[i]; } else { plo_snd[i] = width[i]; phi_snd[i] = hi_loc[i] - lo_loc[i] + width[i]; plo_rcv[i] = width[i]; phi_rcv[i] = hi_loc[i] - lo_loc[i] + width[i]; } } else { plo_rcv[i] = 0; phi_rcv[i] = hi_loc[i] - lo_loc[i] + increment[i]; plo_snd[i] = 0; phi_snd[i] = hi_loc[i] - lo_loc[i] + increment[i]; } } /* Get pointer to local data buffer and remote data buffer as well as lists of leading dimenstions */ gam_LocationWithGhosts(me, handle, plo_snd, &ptr_snd, ld_loc); #if GHOST_PRINT printf("p[%d] 1: plo_snd[0]: %d plo_snd[1]: %d ptr_snd: %d\n", GAme, plo_snd[0], plo_snd[1], (Integer)ptr_snd); fflush(stdout); #endif gam_LocationWithGhosts(me, handle, plo_rcv, &ptr_rcv, ld_loc); #if GHOST_PRINT printf("p[%d] 1: plo_rcv[0]: %d plo_rcv[1]: %d ptr_rcv: %d\n", GAme, plo_rcv[0], plo_rcv[1], (Integer)ptr_rcv); fflush(stdout); #endif /* Evaluate strides for send and recieve */ gam_setstride(ndim, size, ld_loc, ld_loc, stride_rcv, stride_snd); /* Compute the number of elements in each dimension and store result in count. Scale the first element in count by the element size. */ gam_ComputeCount(ndim, plo_rcv, phi_rcv, count); gam_CountElems(ndim, plo_snd, phi_snd, &length); length *= size; count[0] *= size; /* Fill send buffer with data. */ #if GHOST_PRINT printf("p[%d]b 1: ptr_snd: %d ptr_rcv: %d\n", GAme, (Integer)ptr_snd, (Integer)ptr_rcv); printf("p[%d]b 1: length: %d proc_rem_snd: %d proc_rem_rcv: %d\n", GAme, (int)length, (int)proc_rem_snd, (int)proc_rem_rcv); printf("p[%d]b 1: count[0]: %d stride_rcv[0]: %d stride_rcv[1]: %d\n", GAme, count[0], stride_rcv[0],stride_rcv[1]); printf("p[%d]b 1: count[1]: %d stride_rcv[2]: %d stride_rcv[3]: %d\n", GAme, count[1], stride_rcv[2],stride_rcv[3]); printf("p[%d]b 1: count[2]: %d stride_snd[0]: %d stride_snd[1]: %d\n", GAme, count[2], stride_snd[0],stride_snd[1]); printf("p[%d]b 1: count[3]: %d stride_snd[2]: %d stride_snd[3]: %d\n", GAme, count[3], stride_snd[2],stride_snd[3]); printf("p[%d]b 1: snd_ptr: %d rcv_ptr: %d\n", GAme, (Integer)snd_ptr, (Integer)rcv_ptr); fflush(stdout); #endif armci_write_strided(ptr_snd, (int)ndim-1, stride_snd, count, snd_ptr); /* Send Messages. If processor has odd index in direction idx, it * sends message first, if processor has even index it receives * message first. Then process is reversed. Also need to account * for whether or not there are an odd number of processors along * update direction. */ #if GHOST_PRINT printf("p[%d] 1: msgcnt: %d length: %d bufsize: %d proc_rem_snd: %d proc_rem_rcv: %d\n", GAme, msgcnt, length, bufsize, (int)proc_rem_snd, (int)proc_rem_rcv); fflush(stdout); #endif snd_ptr = snd_ptr_orig; rcv_ptr = rcv_ptr_orig; if (GAme != proc_rem_snd) { if (GA[handle].nblock[idx]%2 == 0) { if (index[idx]%2 != 0) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } else { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } if (index[idx]%2 != 0) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } else { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } } else { pmax = GA[handle].nblock[idx] - 1; if (index[idx]%2 != 0) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } else if (index[idx] != pmax) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } if (index[idx]%2 != 0) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } else if (index[idx] != 0) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } /* make up for odd processor at end of string */ if (index[idx] == 0) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } if (index[idx] == pmax) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } } } else { rcv_ptr = snd_ptr; } msgcnt++; /* copy data back into global array */ armci_read_strided(ptr_rcv, (int)ndim-1, stride_rcv, count, rcv_ptr); /* Find parameters for message in positive direction. */ get_remote_block_pos(idx, ndim, lo_loc, hi_loc, slo_rcv, shi_rcv, dims, width); /* locate processor with this data */ if (!pnga_locate_region(g_a, slo_rcv, shi_rcv, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), slo_rcv, shi_rcv, g_a); proc_rem_snd = GA_proclist[0]; if (p_handle >= 0) { proc_rem_snd = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem_snd]; } /* Find processor from which data will be recieved */ for (i = 0; i < ndim; i++) { if (i == idx) { lo_rcv[i] = lo_loc[i] - width[i]; hi_rcv[i] = lo_loc[i] - 1; } else { lo_rcv[i] = lo_loc[i]; hi_rcv[i] = hi_loc[i]; } } /* Account for boundaries, if necessary. */ for (i=0; i= 0) { proc_rem_rcv = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem_rcv]; } /* Get actual coordinates of chunk of data that will be sent to * remote processor as well as coordinates of the array space that * will receive data from remote processor. */ for (i = 0; i < ndim; i++) { if (increment[i] == 0) { if (i == idx) { plo_snd[i] = hi_loc[i] - lo_loc[i] + 1; phi_snd[i] = hi_loc[i] - lo_loc[i] + width[i]; plo_rcv[i] = 0; phi_rcv[i] = width[i] - 1; } else { plo_snd[i] = width[i]; phi_snd[i] = hi_loc[i] - lo_loc[i] + width[i]; plo_rcv[i] = width[i]; phi_rcv[i] = hi_loc[i] - lo_loc[i] + width[i]; } } else { plo_rcv[i] = 0; phi_rcv[i] = hi_loc[i] - lo_loc[i] + increment[i]; plo_snd[i] = 0; phi_snd[i] = hi_loc[i] - lo_loc[i] + increment[i]; } } /* Get pointer to local data buffer and remote data buffer as well as lists of leading dimenstions */ gam_LocationWithGhosts(me, handle, plo_snd, &ptr_snd, ld_loc); #if GHOST_PRINT printf("p[%d] 2: plo_snd[0]: %d plo_snd[1]: %d ptr_snd: %d\n", GAme, plo_snd[0], plo_snd[1], (Integer)ptr_snd); fflush(stdout); #endif gam_LocationWithGhosts(me, handle, plo_rcv, &ptr_rcv, ld_loc); #if GHOST_PRINT printf("p[%d] 2: plo_rcv[0]: %d plo_rcv[1]: %d ptr_rcv: %d\n", GAme, plo_rcv[0], plo_rcv[1], (Integer)ptr_rcv); fflush(stdout); #endif /* Evaluate strides for send and recieve */ gam_setstride(ndim, size, ld_loc, ld_loc, stride_rcv, stride_snd); /* Compute the number of elements in each dimension and store result in count. Scale the first element in count by the element size. */ gam_ComputeCount(ndim, plo_rcv, phi_rcv, count); gam_CountElems(ndim, plo_snd, phi_snd, &length); length *= size; count[0] *= size; /* Need to reallocate memory if length > buflen */ /* TO DO */ /* Fill send buffer with data. */ #if GHOST_PRINT printf("p[%d]b 2: ptr_snd: %d ptr_rcv: %d\n", GAme, (Integer)ptr_snd, (Integer)ptr_rcv); printf("p[%d]b 2: length: %d proc_rem_snd: %d proc_rem_rcv: %d\n", GAme, (int)length, (int)proc_rem_snd, (int)proc_rem_rcv); printf("p[%d]b 2: count[0]: %d stride_rcv[0]: %d stride_rcv[1]: %d\n", GAme, count[0], stride_rcv[0],stride_rcv[1]); printf("p[%d]b 2: count[1]: %d stride_rcv[2]: %d stride_rcv[3]: %d\n", GAme, count[1], stride_rcv[2],stride_rcv[3]); printf("p[%d]b 2: count[2]: %d stride_snd[0]: %d stride_snd[1]: %d\n", GAme, count[2], stride_snd[0],stride_snd[1]); printf("p[%d]b 2: count[3]: %d stride_snd[2]: %d stride_snd[3]: %d\n", GAme, count[3], stride_snd[2],stride_snd[3]); printf("p[%d]b 2: snd_ptr: %d rcv_ptr: %d\n", GAme, (Integer)snd_ptr, (Integer)rcv_ptr); fflush(stdout); #endif armci_write_strided(ptr_snd, (int)ndim-1, stride_snd, count, snd_ptr); /* Send Messages. If processor has odd index in direction idx, it * sends message first, if processor has even index it receives * message first. Then process is reversed. Also need to account * for whether or not there are an odd number of processors along * update direction. */ #if GHOST_PRINT printf("p[%d] 2: msgcnt: %d length: %d bufsize: %d proc_rem_snd: %d proc_rem_rcv: %d\n", GAme, msgcnt, length, bufsize, (int)proc_rem_snd, (int)proc_rem_rcv); fflush(stdout); #endif snd_ptr = snd_ptr_orig; rcv_ptr = rcv_ptr_orig; if (GAme != proc_rem_rcv) { if (GA[handle].nblock[idx]%2 == 0) { if (index[idx]%2 != 0) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } else { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } if (index[idx]%2 != 0) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } else { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } } else { pmax = GA[handle].nblock[idx] - 1; if (index[idx]%2 != 0) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } else if (index[idx] != 0) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } if (index[idx]%2 != 0) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } else if (index[idx] != pmax) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } /* make up for odd processor at end of string */ if (index[idx] == pmax) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } if (index[idx] == 0) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } } } else { rcv_ptr = snd_ptr; } /* copy data back into global array */ armci_read_strided(ptr_rcv, (int)ndim-1, stride_rcv, count, rcv_ptr); msgcnt++; } if (GA[handle].corner_flag) increment[idx] = 2*width[idx]; } ga_free(rcv_ptr_orig); ga_free(snd_ptr_orig); GA_POP_NAME; return TRUE; } /* Utility function for ga_update5_ghosts routine */ static inline double waitforflags (int *ptr1, int *ptr2) { int i = 1; double val = 0; while (*ptr1 == 0 || *ptr2 == 0) { val = exp(-(double)i++); } #if 0 printf("%d: flags set at %p and %p\n",GAme,ptr1,ptr2); fflush(stdout); #endif return(val); } #if 0 /* Stub in new ARMCI_PutS_flag call until actual implementation is available */ int ARMCI_PutS_flag__( void* src_ptr, /* pointer to 1st segment at source */ int src_stride_arr[], /* array of strides at source */ void* dst_ptr, /* pointer to 1st segment at destination */ int dst_stride_arr[], /* array of strides at destination */ int count[], /* number of units at each stride level, count[0] = #bytes */ int stride_levels, /* number of stride levels */ int *flag, /* pointer to remote flag */ int *val, /* pointer to value to set flag upon completion of data transfer */ int proc /* remote process(or) ID */ ) { int bytes; /* Put local data on remote processor */ ARMCI_PutS(src_ptr, src_stride_arr, dst_ptr, dst_stride_arr, count, stride_levels, proc); /* Send signal to remote processor that data transfer has * been completed. */ bytes = sizeof(int); ARMCI_Put(val, flag, bytes, proc); return 1; } #endif /*\ UPDATE GHOST CELLS OF GLOBAL ARRAY USING SHIFT ALGORITHM AND PUT CALLS * WITHOUT ANY BARRIERS \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_update55_ghosts = pnga_update55_ghosts #endif logical pnga_update55_ghosts(Integer g_a) { Integer idx, i, np, handle=GA_OFFSET + g_a, proc_rem; Integer size, ndim, nwidth, increment[MAXDIM]; Integer width[MAXDIM]; Integer dims[MAXDIM]; Integer lo_loc[MAXDIM], hi_loc[MAXDIM]; Integer plo_loc[MAXDIM]/*, phi_loc[MAXDIM]*/; Integer tlo_rem[MAXDIM], thi_rem[MAXDIM]; Integer slo_rem[MAXDIM], shi_rem[MAXDIM]; Integer plo_rem[MAXDIM], phi_rem[MAXDIM]; Integer ld_loc[MAXDIM], ld_rem[MAXDIM]; int stride_loc[MAXDIM], stride_rem[MAXDIM],count[MAXDIM]; int msgcnt; char *ptr_loc, *ptr_rem; Integer me = pnga_nodeid(); Integer p_handle; /* This routine makes use of the shift algorithm to update data in the * ghost cells bounding the local block of visible data. The shift * algorithm starts by updating the blocks of data along the first * dimension by grabbing a block of data that is width[0] deep but * otherwise matches the dimensions of the data residing on the * calling processor. The update of the second dimension, however, * grabs a block that is width[1] deep in the second dimension but is * ldim0 + 2*width[0] in the first dimensions where ldim0 is the * size of the visible data along the first dimension. The remaining * dimensions are left the same. For the next update, the width of the * second dimension is also increased by 2*width[1] and so on. This * algorith makes use of the fact that data for the dimensions that * have already been updated is available on each processor and can be * used in the updates of subsequent dimensions. The total number of * separate updates is 2*ndim, an update in the negative and positive * directions for each dimension. * * This operation is implemented using put calls to place the * appropriate data on remote processors. To signal the remote * processor that it has received the data, a second put call * consisting of a single integer is sent after the first put call and * used to update a signal buffer on the remote processor. Each * processor can determine how much data it has received by checking * its signal buffer. * * To perform the update, this routine makes use of several copies of * indices marking the upper and lower limits of data. Indices * beginning with the character "p" are relative indices marking the * location of the data set relative to the origin the local patch of * the global array, all other indices are in absolute coordinates and * mark locations in the total global array. The indices used by this * routine are described below. * * lo_loc[], hi_loc[]: The lower and upper indices of the visible * block of data held by the calling processor. * * lo_rem[], hi_rem[]: The lower and upper indices of the block * of data on a remote processor or processors that is needed to * fill in the calling processors ghost cells. These indices are * NOT corrected for wrap-around (periodic) boundary conditions * so they can be negative or greater than the array dimension * values held in dims[]. * * slo_rem[], shi_rem[]: Similar to lo_rem[] and hi_rem[], except * that these indices have been corrected for wrap-around * boundary conditions. * * thi_rem[], thi_rem[]: The lower and upper indices of the visible * data on a remote processor. * * plo_loc[], phi_loc[]: The indices of the local data patch that * is going to be updated. * * plo_rem[], phi_rem[]: The indices of the data patch on the * remote processor that will be used to update the data on the * calling processor. Note that the dimensions of the patches * represented by plo_loc[], plo_rem[] and plo_loc[], phi_loc[] * must be the same. */ /* if global array has no ghost cells, just return */ if (!pnga_has_ghosts(g_a)) return TRUE; size = GA[handle].elemsize; ndim = GA[handle].ndim; p_handle = GA[handle].p_handle; /* initialize range increments and get array dimensions */ for (idx=0; idx < ndim; idx++) { increment[idx] = 0; width[idx] = (Integer)GA[handle].width[idx]; dims[idx] = (Integer)GA[handle].dims[idx]; if (lo_loc[idx] == 0 && hi_loc[idx] == -1) return FALSE; } /* Check to make sure that global array is well-behaved (all processors have data and the width of the data in each dimension is greater than the corresponding value in width[]. */ if (!gai_check_ghost_distr(g_a)) return FALSE; GA_PUSH_NAME("ga_update55_ghosts"); /* Get pointer to local memory */ ptr_loc = GA[handle].ptr[GAme]; /* obtain range of data that is held by local processor */ pnga_distribution(g_a,me,lo_loc,hi_loc); /* loop over dimensions for sequential update using shift algorithm */ msgcnt = 0; (*GA_Update_Signal) = 1; for (idx=0; idx < ndim; idx++) { nwidth = width[idx]; /* Do not bother with update if nwidth is zero */ if (nwidth != 0) { /* Perform update in negative direction. */ get_remote_block_neg(idx, ndim, lo_loc, hi_loc, slo_rem, shi_rem, dims, width); /* locate processor with this data */ if (!pnga_locate_region(g_a, slo_rem, shi_rem, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), slo_rem, shi_rem, g_a); /* Get actual coordinates of desired location of remote data as well as the actual coordinates of the local chunk of data that will be sent to remote processor (these coordinates take into account the presence of ghost cells). Start by finding out what data is actually held by remote processor. */ proc_rem = GA_proclist[0]; pnga_distribution(g_a, proc_rem, tlo_rem, thi_rem); for (i = 0; i < ndim; i++) { if (increment[i] == 0) { if (i == idx) { plo_rem[i] = thi_rem[i] - tlo_rem[i] + width[i] + 1; phi_rem[i] = thi_rem[i] - tlo_rem[i] + 2*width[i]; plo_loc[i] = width[i]; /*phi_loc[i] = 2*width[i] - 1;*/ } else { plo_rem[i] = width[i]; phi_rem[i] = thi_rem[i] - tlo_rem[i] + width[i]; plo_loc[i] = width[i]; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + width[i];*/ } } else { plo_rem[i] = 0; phi_rem[i] = thi_rem[i] - tlo_rem[i] + increment[i]; plo_loc[i] = 0; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + increment[i];*/ } } /* Get pointer to local data buffer and remote data buffer as well as lists of leading dimenstions */ gam_LocationWithGhosts(me, handle, plo_loc, &ptr_loc, ld_loc); gam_LocationWithGhosts(proc_rem, handle, plo_rem, &ptr_rem, ld_rem); /* Evaluate strides on local and remote processors */ gam_setstride(ndim, size, ld_loc, ld_rem, stride_rem, stride_loc); /* Compute the number of elements in each dimension and store result in count. Scale the first element in count by the element size. */ gam_ComputeCount(ndim, plo_rem, phi_rem, count); count[0] *= size; /* Put local data on remote processor */ if (p_handle >= 0) { proc_rem = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem]; } #if 0 ARMCI_PutS(ptr_loc, stride_loc, ptr_rem, stride_rem, count, ndim- 1, proc_rem); /* Send signal to remote processor that data transfer has been completed. */ bytes = sizeof(int); ARMCI_Put(GA_Update_Signal, GA_Update_Flags[proc_rem]+msgcnt, bytes, proc_rem); #else ARMCI_PutS_flag(ptr_loc, stride_loc, ptr_rem, stride_rem, count, (int)(ndim - 1), GA_Update_Flags[proc_rem]+msgcnt, *GA_Update_Signal, (int)proc_rem); #endif msgcnt++; /* Perform update in positive direction. */ get_remote_block_pos(idx, ndim, lo_loc, hi_loc, slo_rem, shi_rem, dims, width); /* locate processor with this data */ if (!pnga_locate_region(g_a, slo_rem, shi_rem, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), slo_rem, shi_rem, g_a); /* Get actual coordinates of desired chunk of remote data as well as the actual coordinates of the local chunk of data that will receive the remote data (these coordinates take into account the presence of ghost cells). Start by finding out what data is actually held by remote processor. */ proc_rem = GA_proclist[0]; pnga_distribution(g_a, proc_rem, tlo_rem, thi_rem); for (i = 0; i < ndim; i++) { if (increment[i] == 0) { if (i == idx) { plo_rem[i] = 0; phi_rem[i] = width[i] - 1; plo_loc[i] = hi_loc[i] - lo_loc[i] + width[i] - 1; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + 2*width[i] - 1;*/ } else { plo_rem[i] = width[i]; phi_rem[i] = thi_rem[i] - tlo_rem[i] + width[i]; plo_loc[i] = width[i]; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + width[i];*/ } } else { plo_rem[i] = 0; phi_rem[i] = thi_rem[i] - tlo_rem[i] + increment[i]; plo_loc[i] = 0; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + increment[i];*/ } } /* Get pointer to local data buffer and remote data buffer as well as lists of leading dimenstions */ gam_LocationWithGhosts(GAme, handle, plo_loc, &ptr_loc, ld_loc); gam_LocationWithGhosts(proc_rem, handle, plo_rem, &ptr_rem, ld_rem); /* Evaluate strides on local and remote processors */ gam_setstride(ndim, size, ld_loc, ld_rem, stride_rem, stride_loc); /* Compute the number of elements in each dimension and store result in count. Scale the first element in count by the element size. */ gam_ComputeCount(ndim, plo_rem, phi_rem, count); count[0] *= size; /* Put local data on remote processor */ if (p_handle >= 0) { proc_rem = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem]; } #if 0 ARMCI_PutS(ptr_loc, stride_loc, ptr_rem, stride_rem, count, ndim- 1, proc_rem); /* Send signal to remote processor that data transfer has been completed. */ bytes = sizeof(int); ARMCI_Put(GA_Update_Signal, GA_Update_Flags[proc_rem]+msgcnt, bytes, proc_rem); #else ARMCI_PutS_flag(ptr_loc, stride_loc, ptr_rem, stride_rem, count, (int)(ndim - 1), GA_Update_Flags[proc_rem]+msgcnt, *GA_Update_Signal, (int)proc_rem); #endif msgcnt++; } /* check to make sure that all messages have been recieved before starting update along new dimension */ waitforflags((GA_Update_Flags[GAme]+msgcnt-2), (GA_Update_Flags[GAme]+msgcnt-1)); /* update increment array */ increment[idx] = 2*nwidth; } /* set GA_Update_Flags array to zero for next update operation. */ for (idx=0; idx < 2*ndim; idx++) { GA_Update_Flags[GAme][idx] = 0; } GA_POP_NAME; return TRUE; } /*\ UPDATE GHOST CELLS OF GLOBAL ARRAY USING NON-BLOCKING GET CALLS AND RETURN * A NON-BLOCKING HANDLE \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_update_ghosts_nb = pnga_update_ghosts_nb #endif void pnga_update_ghosts_nb(Integer g_a, Integer *nbhandle) { Integer idx, ipx, np, handle=GA_OFFSET + g_a, proc_rem; Integer ntot, mask[MAXDIM]; Integer size, ndim, i, itmp; Integer width[MAXDIM], dims[MAXDIM]; Integer lo_loc[MAXDIM], hi_loc[MAXDIM]; /*Integer tlo_loc[MAXDIM], thi_loc[MAXDIM];*/ Integer plo_loc[MAXDIM], phi_loc[MAXDIM]; Integer tlo_rem[MAXDIM], thi_rem[MAXDIM]; Integer plo_rem[MAXDIM]; Integer ld_loc[MAXDIM], ld_rem[MAXDIM]; logical mask0; int stride_loc[MAXDIM], stride_rem[MAXDIM],count[MAXDIM]; char *ptr_loc, *ptr_rem; Integer me = pnga_nodeid(); Integer p_handle; /* if global array has no ghost cells, just return */ if (!pnga_has_ghosts(g_a)) { return; } size = GA[handle].elemsize; ndim = GA[handle].ndim; p_handle = GA[handle].p_handle; /* initialize ghost cell widths and get array dimensions */ for (idx=0; idx < ndim; idx++) { width[idx] = (Integer)GA[handle].width[idx]; dims[idx] = (Integer)GA[handle].dims[idx]; } /* Check to make sure that global array is well-behaved (all processors have data and the width of the data in each dimension is greater than the corresponding value in width[]). */ if (!gai_check_ghost_distr(g_a)) return; /* Create non-blocking handle */ ga_init_nbhandle(nbhandle); GA_PUSH_NAME("ga_update_ghosts_nb"); /* Get pointer to local memory */ ptr_loc = GA[handle].ptr[me]; /* obtain range of data that is held by local processor */ pnga_distribution(g_a,me,lo_loc,hi_loc); /* evaluate total number of PUT operations that will be required */ ntot = 1; for (idx=0; idx < ndim; idx++) ntot *= 3; /* Loop over all GET operations. The operation corresponding to the mask of all zeros is left out. */ for (ipx=0; ipx < ntot; ipx++) { /* Convert ipx to corresponding mask values */ itmp = ipx; mask0 = TRUE; for (idx = 0; idx < ndim; idx++) { i = itmp%3; mask[idx] = i-1; if (mask[idx] != 0) mask0 = FALSE; itmp = (itmp-i)/3; } if (mask0) continue; /* check to see if ghost cell block has zero elements*/ mask0 = FALSE; itmp = 0; for (idx = 0; idx < ndim; idx++) { if (mask[idx] != 0 && width[idx] == 0) mask0 = TRUE; if (mask[idx] != 0) itmp++; } if (mask0) continue; /* Now that mask has been determined, find data that is to be moved * and identify processor to which it is going. Wrap boundaries * around, if necessary */ for (idx = 0; idx < ndim; idx++) { if (mask[idx] == 0) { tlo_rem[idx] = lo_loc[idx]; thi_rem[idx] = hi_loc[idx]; } else if (mask[idx] == -1) { if (lo_loc[idx] > 1) { tlo_rem[idx] = lo_loc[idx]-width[idx]; thi_rem[idx] = lo_loc[idx]-1; } else { tlo_rem[idx] = dims[idx]-width[idx]+1; thi_rem[idx] = dims[idx]; } } else if (mask[idx] == 1) { if (hi_loc[idx] < dims[idx]) { tlo_rem[idx] = hi_loc[idx] + 1; thi_rem[idx] = hi_loc[idx] + width[idx]; } else { tlo_rem[idx] = 1; thi_rem[idx] = width[idx]; } } else { fprintf(stderr,"Illegal mask value found\n"); } } /* Locate remote processor from which data must be retrieved */ if (!pnga_locate_region(g_a, tlo_rem, thi_rem, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), tlo_rem, thi_rem, g_a); if (np > 1) { fprintf(stderr,"More than one remote processor found\n"); } /* Remote processor has been identified, now get ready to get data from it. Start by getting distribution on remote processor.*/ proc_rem = GA_proclist[0]; pnga_distribution(g_a, proc_rem, tlo_rem, thi_rem); for (idx = 0; idx < ndim; idx++) { if (mask[idx] == 0) { plo_loc[idx] = width[idx]; phi_loc[idx] = hi_loc[idx]-lo_loc[idx]+width[idx]; plo_rem[idx] = plo_loc[idx]; } else if (mask[idx] == -1) { plo_loc[idx] = 0; phi_loc[idx] = width[idx]-1; plo_rem[idx] = thi_rem[idx]-tlo_rem[idx]+1; } else if (mask[idx] == 1) { plo_loc[idx] = hi_loc[idx]-lo_loc[idx]+width[idx]+1; phi_loc[idx] = hi_loc[idx]-lo_loc[idx]+2*width[idx]; plo_rem[idx] = width[idx]; } } /* Get pointer to local data buffer and remote data buffer as well as lists of leading dimenstions */ gam_LocationWithGhosts(me, handle, plo_loc, &ptr_loc, ld_loc); gam_LocationWithGhosts(proc_rem, handle, plo_rem, &ptr_rem, ld_rem); /* Evaluate strides on local and remote processors */ gam_setstride(ndim, size, ld_loc, ld_rem, stride_rem, stride_loc); /* Compute the number of elements in each dimension and store result in count. Scale the first element in count by the element size. */ gam_ComputeCount(ndim, plo_loc, phi_loc, count); count[0] *= size; /* get data from remote processor */ if (p_handle >= 0) { proc_rem = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem]; } ARMCI_NbGetS(ptr_rem, stride_rem, ptr_loc, stride_loc, count, (int)(ndim - 1), (int)proc_rem, (armci_hdl_t*)get_armci_nbhandle(nbhandle)); } GA_POP_NAME; return; } /*\ UPDATE GHOST CELLS OF GLOBAL ARRAY ALONG ONE SIDE OF ARRAY \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_update_ghost_dir = pnga_update_ghost_dir #endif logical pnga_update_ghost_dir(Integer g_a, /* GA handle */ Integer pdim, /* Dimension of update */ Integer pdir, /* Direction of update (+/-1) */ logical pflag) /* include corner cells */ { Integer idx, ipx, inx, np, handle=GA_OFFSET + g_a, proc_rem; Integer ntot, mask[MAXDIM],lmask[MAXDIM]; Integer size, ndim, i, itmp, idim, idir; Integer width[MAXDIM], dims[MAXDIM]; Integer lo_loc[MAXDIM], hi_loc[MAXDIM]; Integer plo_loc[MAXDIM], phi_loc[MAXDIM]; Integer tlo_rem[MAXDIM], thi_rem[MAXDIM]; Integer plo_rem[MAXDIM]/*, phi_rem[MAXDIM]*/; Integer ld_loc[MAXDIM], ld_rem[MAXDIM]; logical flag; int stride_loc[MAXDIM], stride_rem[MAXDIM],count[MAXDIM]; char *ptr_loc, *ptr_rem; Integer me = pnga_nodeid(); Integer p_handle; int local_sync_begin,local_sync_end; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ /* if global array has no ghost cells, just return */ if (!pnga_has_ghosts(g_a)) return TRUE; p_handle = GA[handle].p_handle; if(local_sync_begin)pnga_pgroup_sync(p_handle); idim = pdim; idir = pdir; flag = pflag; size = GA[handle].elemsize; ndim = GA[handle].ndim; /* initialize ghost cell widths and get array dimensions */ for (idx=0; idx < ndim; idx++) { width[idx] = (Integer)GA[handle].width[idx]; dims[idx] = (Integer)GA[handle].dims[idx]; } /* Check to make sure that global array is well-behaved (all processors have data and the width of the data in each dimension is greater than the corresponding value in width[]). */ ipx = 0; for (idx = 0; idx < ndim; idx++) { for (np = 0; np < GA[handle].nblock[idx]; np++) { if (np < GA[handle].nblock[idx] - 1) { if (GA[handle].mapc[ipx+1]-GA[handle].mapc[ipx]+1 1) { tlo_rem[idx] = lo_loc[idx]-width[idx]; thi_rem[idx] = lo_loc[idx]-1; } else { tlo_rem[idx] = dims[idx]-width[idx]+1; thi_rem[idx] = dims[idx]; } } else if (mask[idx] == 1) { if (hi_loc[idx] < dims[idx]) { tlo_rem[idx] = hi_loc[idx] + 1; thi_rem[idx] = hi_loc[idx] + width[idx]; } else { tlo_rem[idx] = 1; thi_rem[idx] = width[idx]; } } else { fprintf(stderr,"Illegal mask value found\n"); } } /* Locate remote processor to which data must be sent */ if (!pnga_locate_region(g_a, tlo_rem, thi_rem, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), tlo_rem, thi_rem, g_a); if (np > 1) { fprintf(stderr,"More than one remote processor found\n"); } /* Remote processor has been identified, now get ready to get data from it. Start by getting distribution on remote processor.*/ proc_rem = GA_proclist[0]; pnga_distribution(g_a, proc_rem, tlo_rem, thi_rem); for (idx = 0; idx < ndim; idx++) { if (mask[idx] == 0) { plo_loc[idx] = width[idx]; phi_loc[idx] = hi_loc[idx]-lo_loc[idx]+width[idx]; plo_rem[idx] = plo_loc[idx]; /*phi_rem[idx] = phi_loc[idx];*/ } else if (mask[idx] == -1) { plo_loc[idx] = 0; phi_loc[idx] = width[idx]-1; plo_rem[idx] = thi_rem[idx]-tlo_rem[idx]+1; /*phi_rem[idx] = thi_rem[idx]-tlo_rem[idx]+width[idx];*/ } else if (mask[idx] == 1) { plo_loc[idx] = hi_loc[idx]-lo_loc[idx]+width[idx]+1; phi_loc[idx] = hi_loc[idx]-lo_loc[idx]+2*width[idx]; plo_rem[idx] = width[idx]; /*phi_rem[idx] = 2*width[idx]-1;*/ } } /* Get pointer to local data buffer and remote data buffer as well as lists of leading dimenstions */ gam_LocationWithGhosts(me, handle, plo_loc, &ptr_loc, ld_loc); gam_LocationWithGhosts(proc_rem, handle, plo_rem, &ptr_rem, ld_rem); /* Evaluate strides on local and remote processors */ gam_setstride(ndim, size, ld_loc, ld_rem, stride_rem, stride_loc); /* Compute the number of elements in each dimension and store result in count. Scale the first element in count by the element size. */ gam_ComputeCount(ndim, plo_loc, phi_loc, count); count[0] *= size; /* get data from remote processor */ if (p_handle >= 0) { proc_rem = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem]; } ARMCI_GetS(ptr_rem, stride_rem, ptr_loc, stride_loc, count, (int)(ndim - 1), (int)proc_rem); } GA_POP_NAME; if(local_sync_end)pnga_pgroup_sync(p_handle); return TRUE; } /*uncomment for using message passing sendrecv in north south direction */ /*#define USE_MP_NORTHSOUTH */ /*\ UPDATE GHOST CELLS OF GLOBAL ARRAY USING PUT CALLS WITHOUT CORNERS AND * WITHOUT ANY BARRIERS \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_update5_ghosts = pnga_update5_ghosts #endif logical pnga_update5_ghosts(Integer g_a) { Integer idx, i, handle=GA_OFFSET + g_a; Integer /*size,*/ ndim, nwidth; Integer width[MAXDIM]; Integer* proc_rem_ptr; int *stride_loc, *stride_rem,*count; int msgcnt, corner_flag, proc_rem; /* int bytes; */ char *ptr_loc, *ptr_rem,*cache; int local_sync_begin,local_sync_end; Integer p_handle; #ifdef USE_MP_NORTHSOUTH char send_name[32], rcv_name[32]; void *snd_ptr, *rcv_ptr; #endif /* This routine makes use of the shift algorithm to update data in the * ghost cells bounding the local block of visible data. The shift * algorithm starts by updating the blocks of data along the first * dimension by grabbing a block of data that is width[0] deep but * otherwise matches the dimensions of the data residing on the * calling processor. The update of the second dimension, however, * grabs a block that is width[1] deep in the second dimension but is * ldim0 + 2*width[0] in the first dimensions where ldim0 is the * size of the visible data along the first dimension. The remaining * dimensions are left the same. For the next update, the width of the * second dimension is also increased by 2*width[1] and so on. This * algorith makes use of the fact that data for the dimensions that * have already been updated is available on each processor and can be * used in the updates of subsequent dimensions. The total number of * separate updates is 2*ndim, an update in the negative and positive * directions for each dimension. * * This operation is implemented using put calls to place the * appropriate data on remote processors. To signal the remote * processor that it has received the data, a second put call * consisting of a single integer is sent after the first put call and * used to update a signal buffer on the remote processor. Each * processor can determine how much data it has received by checking * its signal buffer. */ local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ p_handle = GA[handle].p_handle; if(local_sync_begin)pnga_pgroup_sync(p_handle); #ifdef USE_MP_NORTHSOUTH strcpy(send_name,"send_buffer"); strcpy(rcv_name,"receive_buffer"); snd_ptr = ga_malloc(buflen, GA[handle].type, send_name); rcv_ptr = ga_malloc(buflen, GA[handle].type, rcv_name); #endif cache = (char *)GA[handle].cache; /* if global array has no ghost cells, just return */ if (!pnga_has_ghosts(g_a)) return TRUE; /*size = GA[handle].elemsize;*/ ndim = GA[handle].ndim; for (i=0; i= 0) { proc_rem = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem]; } if(count[0]>1000000){ /*tries to use armci direct put when possible */ ARMCI_PutS_flag(ptr_loc, stride_loc, ptr_rem, stride_rem, count, (int)(ndim - 1), GA_Update_Flags[proc_rem]+msgcnt, *GA_Update_Signal, proc_rem); } else{ #ifndef USE_MP_NORTHSOUTH ARMCI_PutS_flag(ptr_loc, stride_loc, ptr_rem, stride_rem, count, (int)(ndim - 1), GA_Update_Flags[proc_rem]+msgcnt, *GA_Update_Signal, proc_rem); #else #endif } msgcnt++; /* Perform update in positive direction. */ ptr_rem = *(char **)(cache); ptr_loc = *(char **)(cache+sizeof(char *)); stride_loc = (int *)(cache+2*sizeof(char *)); stride_rem = (int *)(stride_loc+ndim); count = (int *)(stride_rem+ndim); proc_rem_ptr = (Integer *)(count+ndim); proc_rem = (int)(*proc_rem_ptr); cache = (char *)(proc_rem_ptr+1); if (p_handle >= 0) { proc_rem = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem]; } if(count[0]>1000000){ /*tries to use armci direct put when possible */ ARMCI_PutS_flag(ptr_loc, stride_loc, ptr_rem, stride_rem, count, (int)(ndim - 1), GA_Update_Flags[proc_rem]+msgcnt, *GA_Update_Signal, proc_rem); } else{ #ifndef USE_MP_NORTHSOUTH ARMCI_PutS_flag(ptr_loc, stride_loc, ptr_rem, stride_rem, count, (int)(ndim - 1), GA_Update_Flags[proc_rem]+msgcnt, *GA_Update_Signal, proc_rem); #else #endif } msgcnt++; if (corner_flag){ /* check to make sure that last two messages have been recieved before starting update along a new dimension */ waitforflags((GA_Update_Flags[GAme]+msgcnt-2), (GA_Update_Flags[GAme]+msgcnt-1)); GA_Update_Flags[GAme][msgcnt-1]=0; GA_Update_Flags[GAme][msgcnt-2]=0; } } } #if 1 if (!corner_flag) { /* check to make sure that all messages have been recieved */ while(msgcnt){ waitforflags((GA_Update_Flags[GAme]+msgcnt-1), (GA_Update_Flags[GAme]+msgcnt-2)); GA_Update_Flags[GAme][msgcnt-1]=0; GA_Update_Flags[GAme][msgcnt-2]=0; msgcnt-=2; } } #endif GA_POP_NAME; if(local_sync_end)pnga_pgroup_sync(p_handle); return TRUE; } /*#define UPDATE_SAMENODE_GHOSTS_FIRST*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_set_update5_info = pnga_set_update5_info #endif logical pnga_set_update5_info(Integer g_a) { int i; Integer *proc_rem; Integer size, ndim, nwidth, increment[MAXDIM],np; Integer width[MAXDIM]; Integer dims[MAXDIM]; Integer lo_loc[MAXDIM], hi_loc[MAXDIM]; Integer plo_loc[MAXDIM]/*, phi_loc[MAXDIM]*/; Integer tlo_rem[MAXDIM], thi_rem[MAXDIM]; Integer slo_rem[MAXDIM], shi_rem[MAXDIM]; Integer plo_rem[MAXDIM], phi_rem[MAXDIM]; Integer ld_loc[MAXDIM], ld_rem[MAXDIM]; int *stride_loc, *stride_rem,*count; int idx, corner_flag; char **ptr_loc, **ptr_rem,*cache; Integer handle = GA_OFFSET + g_a; int cache_size; #ifdef UPDATE_SAMENODE_GHOSTS_FIRST int scope; #endif Integer me = pnga_nodeid(); Integer p_handle; /* This routine sets up the arrays that are used to transfer data * using the update5 algorithm. The arrays begining with the character * "p" represent relative indices marking the location of the data set * relative to the origin the local patch of the global array, all * other indices are in absolute coordinates and mark locations in the * total global array. The indices used by this routine are described * below. * * lo_loc[], hi_loc[]: The lower and upper indices of the visible * block of data held by the calling processor. * * lo_rem[], hi_rem[]: The lower and upper indices of the block * of data on a remote processor or processors that is needed to * fill in the calling processors ghost cells. These indices are * NOT corrected for wrap-around (periodic) boundary conditions * so they can be negative or greater than the array dimension * values held in dims[]. * * slo_rem[], shi_rem[]: Similar to lo_rem[] and hi_rem[], except * that these indices have been corrected for wrap-around * boundary conditions. * * thi_rem[], thi_rem[]: The lower and upper indices of the visible * data on a remote processor. * * plo_loc[], phi_loc[]: The indices of the local data patch that * is going to be updated. * * plo_rem[], phi_rem[]: The indices of the data patch on the * remote processor that will be used to update the data on the * calling processor. Note that the dimensions of the patches * represented by plo_loc[], plo_rem[] and plo_loc[], phi_loc[] * must be the same. */ /* if global array has no ghost cells, just return */ if (!pnga_has_ghosts(g_a)) return TRUE; /* Check to make sure that global array is well-behaved (all processors have data and the width of the data in each dimension is greater than the corresponding value in width[]. */ if (!gai_check_ghost_distr(g_a)) return FALSE; ndim = GA[handle].ndim; p_handle = GA[handle].p_handle; size = GA[handle].elemsize; cache_size = 2*sizeof(char *)+3*sizeof(int)+sizeof(Integer); cache_size = 2*ndim*((cache_size/sizeof(double)) + 1); GA[handle].cache = (double *)malloc(sizeof(double)*cache_size); cache = (char *)GA[handle].cache; corner_flag = GA[handle].corner_flag; pnga_distribution(g_a,me,lo_loc,hi_loc); for (idx=0; idx < ndim; idx++) { increment[idx] = 0; width[idx] = (Integer)GA[handle].width[idx]; dims[idx] = (Integer)GA[handle].dims[idx]; if (lo_loc[idx] == 0 && hi_loc[idx] == -1){ *(char **)cache = NULL; return FALSE; } } #ifdef UPDATE_SAMENODE_GHOSTS_FIRST for(scope=0;scope < 2; scope ++) #endif for (idx=0; idx < ndim; idx++) { nwidth = width[idx]; if (nwidth != 0) { ptr_rem = (char **)cache; ptr_loc = (char **)(cache+sizeof(char *)); stride_loc = (int *)(cache+2*sizeof(char *)); stride_rem = (int *)(stride_loc+ndim); count = (int *)(stride_rem+ndim); proc_rem = (Integer *)(count+ndim); get_remote_block_neg(idx, ndim, lo_loc, hi_loc, slo_rem, shi_rem, dims, width); if (!pnga_locate_region(g_a, slo_rem, shi_rem, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), slo_rem, shi_rem, g_a); *proc_rem = (Integer)GA_proclist[0]; if (p_handle >= 0) { *proc_rem = PGRP_LIST[p_handle].inv_map_proc_list[*proc_rem]; } #ifdef UPDATE_SAMENODE_GHOSTS_FIRST if(scope == 0 && ARMCI_Same_node(*proc_rem)) goto do_negative; #endif cache = (char *)(proc_rem+1); pnga_distribution(g_a, *proc_rem, tlo_rem, thi_rem); for (i = 0; i < ndim; i++) { if (increment[i] == 0) { if (i == idx) { plo_rem[i] = thi_rem[i] - tlo_rem[i] + width[i] + 1; phi_rem[i] = thi_rem[i] - tlo_rem[i] + 2*width[i]; plo_loc[i] = width[i]; /*phi_loc[i] = 2*width[i] - 1;*/ } else { plo_rem[i] = width[i]; phi_rem[i] = thi_rem[i] - tlo_rem[i] + width[i]; plo_loc[i] = width[i]; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + width[i];*/ } } else { plo_rem[i] = 0; phi_rem[i] = thi_rem[i] - tlo_rem[i] + increment[i]; plo_loc[i] = 0; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + increment[i];*/ } } gam_LocationWithGhosts(me, handle, plo_loc, ptr_loc, ld_loc); gam_LocationWithGhosts(*proc_rem, handle, plo_rem, ptr_rem, ld_rem); /* Evaluate strides on local and remote processors */ gam_setstride(ndim, size, ld_loc, ld_rem, stride_rem, stride_loc); gam_ComputeCount(ndim, plo_rem, phi_rem, count); count[0] *= size; if (p_handle >= 0) { *proc_rem = PGRP_LIST[p_handle].inv_map_proc_list[*proc_rem]; } #ifdef UPDATE_SAMENODE_GHOSTS_FIRST do_negative: #endif /*BJP proc_rem++; */ ptr_rem = (char **)cache; ptr_loc = (char **)(cache+sizeof(char *)); stride_loc = (int *)(cache+2*sizeof(char *)); stride_rem = (int *)(stride_loc+ndim); count = (int *)(stride_rem+ndim); proc_rem = (Integer *)(count+ndim); get_remote_block_pos(idx, ndim, lo_loc, hi_loc, slo_rem, shi_rem, dims, width); if (!pnga_locate_region(g_a, slo_rem, shi_rem, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), slo_rem, shi_rem, g_a); *proc_rem = (Integer)GA_proclist[0]; if (p_handle >= 0) { *proc_rem = PGRP_LIST[p_handle].inv_map_proc_list[*proc_rem]; } #ifdef UPDATE_SAMENODE_GHOSTS_FIRST if(scope == 0 && ARMCI_Same_node(*proc_rem)) continue; #endif cache = (char *)(proc_rem+1); pnga_distribution(g_a, *proc_rem, tlo_rem, thi_rem); for (i = 0; i < ndim; i++) { if (increment[i] == 0) { if (i == idx) { plo_rem[i] = 0; phi_rem[i] = width[i] - 1; plo_loc[i] = hi_loc[i] - lo_loc[i] + width[i] - 1; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + 2*width[i] - 1;*/ } else { plo_rem[i] = width[i]; phi_rem[i] = thi_rem[i] - tlo_rem[i] + width[i]; plo_loc[i] = width[i]; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + width[i];*/ } } else { plo_rem[i] = 0; phi_rem[i] = thi_rem[i] - tlo_rem[i] + increment[i]; plo_loc[i] = 0; /*phi_loc[i] = hi_loc[i] - lo_loc[i] + increment[i];*/ } } gam_LocationWithGhosts(GAme, handle, plo_loc, ptr_loc, ld_loc); gam_LocationWithGhosts(*proc_rem, handle, plo_rem, ptr_rem, ld_rem); gam_setstride(ndim, size, ld_loc, ld_rem, stride_rem, stride_loc); gam_ComputeCount(ndim, plo_rem, phi_rem, count); count[0] *= size; if (p_handle >= 0) { *proc_rem = PGRP_LIST[p_handle].inv_map_proc_list[*proc_rem]; } if (corner_flag) increment[idx] = 2*nwidth; } } return TRUE; } /*\ UPDATE GHOST CELLS OF GLOBAL ARRAY USING SHIFT ALGORITHM \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_update_ghosts = pnga_update_ghosts #endif void pnga_update_ghosts(Integer g_a) { /* Wrapper program for ghost cell update operations. If optimized update operation fails then use slow but robust version of update operation */ int local_sync_begin,local_sync_end; Integer handle = GA_OFFSET + g_a; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_pgroup_sync(GA[handle].p_handle); #ifdef CRAY_T3D if (!pnga_update5_ghosts(g_a)) #else if (!pnga_update4_ghosts(g_a)) #endif { pnga_update1_ghosts(g_a); } if(local_sync_end)pnga_pgroup_sync(GA[handle].p_handle); } /* Utility function for ga_update6_ghosts routine */ static double waitformixedflags (int flag1, int flag2, int *ptr1, int *ptr2) { int i = 1; double val = 0; while ((flag1 && *ptr1 == 0) || (flag2 && *ptr2 == 0)) { val = exp(-(double)i++); } return(val); } /*\ UPDATE GHOST CELLS OF GLOBAL ARRAY USING SHIFT ALGORITHM AND * MESSAGE PASSING \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_update6_ghosts = pnga_update6_ghosts #endif logical pnga_update6_ghosts(Integer g_a) { Integer idx, idir, i, np, handle=GA_OFFSET + g_a; Integer size, buflen, buftot, bufsize, ndim, increment[MAXDIM]; Integer proc_rem_snd, proc_rem_rcv, pmax; Integer msgcnt, length; Integer width[MAXDIM], dims[MAXDIM], index[MAXDIM]; Integer lo_loc[MAXDIM], hi_loc[MAXDIM]; Integer plo_rem[MAXDIM]/*, phi_rem[MAXDIM]*/; Integer tlo_rem[MAXDIM], thi_rem[MAXDIM]; Integer plo_snd[MAXDIM], phi_snd[MAXDIM]; Integer lo_rcv[MAXDIM], hi_rcv[MAXDIM]; Integer slo_rcv[MAXDIM], shi_rcv[MAXDIM]; Integer plo_rcv[MAXDIM], phi_rcv[MAXDIM]; Integer ld_loc[MAXDIM], ld_rem[MAXDIM]; int msglen; int stride_snd[MAXDIM], stride_rcv[MAXDIM],count[MAXDIM]; int stride_rem[MAXDIM]; int flag1=0, flag2=0, sprocflag, rprocflag; char *ptr_snd, *ptr_rcv; char /* *ptr_loc,*/ *ptr_rem; char send_name[32], rcv_name[32]; void *snd_ptr, *rcv_ptr, *snd_ptr_orig, *rcv_ptr_orig; Integer me = pnga_nodeid(); Integer p_handle, wproc; /* This routine makes use of the shift algorithm to update data in the * ghost cells bounding the local block of visible data. The shift * algorithm starts by updating the blocks of data along the first * dimension by grabbing a block of data that is width[0] deep but * otherwise matches the dimensions of the data residing on the * calling processor. The update of the second dimension, however, * grabs a block that is width[1] deep in the second dimension but is * ldim0 + 2*width[0] in the first dimensions where ldim0 is the * size of the visible data along the first dimension. The remaining * dimensions are left the same. For the next update, the width of the * second dimension is also increased by 2*width[1] and so on. This * algorith makes use of the fact that data for the dimensions that * have already been updated is available on each processor and can be * used in the updates of subsequent dimensions. The total number of * separate updates is 2*ndim, an update in the negative and positive * directions for each dimension. * * This implementation make use of a combination of explicit message * passing between processors on different nodes and shared memory * copies with an additional flag between processors on the same node * to perform the update. Separate message types for the messages and * the use of the additional flag are for the updates in each * coordinate direction are used to maintain synchronization locally * and to guarantee that the data is present before the updates in a * new coordinate direction take place. * * To perform the update, this routine makes use of several copies of * indices marking the upper and lower limits of data. Indices * beginning with the character "p" are relative indices marking the * location of the data set relative to the origin the local patch of * the global array, all other indices are in absolute coordinates and * mark locations in the total global array. The indices used by this * routine are described below. * * lo_loc[], hi_loc[]: The lower and upper indices of the visible * block of data held by the calling processor. * * lo_rcv[], hi_rcv[]: The lower and upper indices of the blocks * of data that will be either sent to or received from a remote * processor. These indices are NOT corrected for wrap-around * (periodic) boundary conditions so they can be negative or greater * than the array dimension values held in dims[]. * * slo_rcv[], shi_rcv[]: Similar to lo_rcv[] and hi_rcv[], except * that these indices have been corrected for wrap-around * boundary conditions. * * plo_rcv[], phi_rcv[]: The local indices of the local data patch * that receive that message from the remote processor. * * plo_snd[], phi_snd[]: The local indices of the data patch * that will be sent to the remote processor. Note that the * dimensions of the patches represented by plo_rec[], plo_rec[] and * plo_snd[], phi_snd[] must be the same. * * tlo_rem[], thi_rem[]: The indices of the locally held visible * portion of the global array on the remote processor that will be * receiving the data using a shared memory copy. * * plo_rem[], phi_rem[]: The local indices of the coordinate patch * that will be put on the remote processor using a shared memory * copy. */ /* if global array has no ghost cells, just return */ if (!pnga_has_ghosts(g_a)) return TRUE; size = GA[handle].elemsize; ndim = GA[handle].ndim; p_handle = GA[handle].p_handle; /* initialize range increments and get array dimensions */ for (idx=0; idx < ndim; idx++) { increment[idx] = 0; width[idx] = (Integer)GA[handle].width[idx]; dims[idx] = (Integer)GA[handle].dims[idx]; } /* Check to make sure that global array is well-behaved (all processors have data and the width of the data in each dimension is greater than the corresponding value in width[]. */ if (!gai_check_ghost_distr(g_a)) return FALSE; GA_PUSH_NAME("ga_update6_ghosts"); msgcnt = 0; /* Get pointer to local memory */ /*ptr_loc = GA[handle].ptr[me];*/ /* obtain range of data that is held by local processor */ pnga_distribution(g_a,me,lo_loc,hi_loc); /* Get indices of processor in virtual grid */ pnga_proc_topology(g_a, me, index); /* Try to find maximum size of message that will be sent during * update operations and use this to allocate memory for message * passing buffers. */ buftot = 1; for (i=0; i= 0) { wproc = PGRP_LIST[p_handle].inv_map_proc_list[wproc]; } rprocflag = ARMCI_Same_node(wproc); proc_rem_snd = GA_proclist[0]; /* Find processor from which data will be received */ for (i = 0; i < ndim; i++) { if (i == idx) { lo_rcv[i] = hi_loc[i] + 1; hi_rcv[i] = hi_loc[i] + width[i]; } else { lo_rcv[i] = lo_loc[i]; hi_rcv[i] = hi_loc[i]; } } /* Account for boundaries, if necessary. */ for (i=0; i dims[i]) { slo_rcv[i] = 1; shi_rcv[i] = width[i]; } else { slo_rcv[i] = lo_rcv[i]; shi_rcv[i] = hi_rcv[i]; } } else { slo_rcv[i] = lo_rcv[i]; shi_rcv[i] = hi_rcv[i]; } } /* locate processor with this data */ if (!pnga_locate_region(g_a, slo_rcv, shi_rcv, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), slo_rcv, shi_rcv, g_a); wproc = GA_proclist[0]; if (p_handle >= 0) { wproc = PGRP_LIST[p_handle].inv_map_proc_list[wproc]; } sprocflag = ARMCI_Same_node(wproc); proc_rem_rcv = GA_proclist[0]; pnga_distribution(g_a, proc_rem_rcv, tlo_rem, thi_rem); /* Get actual coordinates of chunk of data that will be sent to * remote processor as well as coordinates of the array space that * will receive data from remote processor. */ for (i = 0; i < ndim; i++) { if (increment[i] == 0) { if (i == idx) { plo_snd[i] = width[i]; phi_snd[i] = 2*width[i] - 1; plo_rcv[i] = hi_loc[i] - lo_loc[i] + width[i] + 1; phi_rcv[i] = hi_loc[i] - lo_loc[i] + 2*width[i]; plo_rem[i] = thi_rem[i] - tlo_rem[i] + width[i] + 1; /*phi_rem[i] = thi_rem[i] - tlo_rem[i] + 2*width[i];*/ } else { plo_snd[i] = width[i]; phi_snd[i] = hi_loc[i] - lo_loc[i] + width[i]; plo_rcv[i] = width[i]; phi_rcv[i] = hi_loc[i] - lo_loc[i] + width[i]; plo_rem[i] = width[i]; /*phi_rem[i] = thi_rem[i] - tlo_rem[i] + width[i];*/ } } else { plo_snd[i] = 0; phi_snd[i] = hi_loc[i] - lo_loc[i] + increment[i]; plo_rcv[i] = 0; phi_rcv[i] = hi_loc[i] - lo_loc[i] + increment[i]; plo_rem[i] = 0; /*phi_rem[i] = thi_rem[i] - tlo_rem[i] + increment[i];*/ } } /* Get pointer to local data buffer and remote data buffer as well as lists of leading dimenstions */ gam_LocationWithGhosts(me, handle, plo_snd, &ptr_snd, ld_loc); gam_LocationWithGhosts(me, handle, plo_rcv, &ptr_rcv, ld_loc); gam_LocationWithGhosts(proc_rem_snd, handle, plo_rem, &ptr_rem, ld_rem); /* Evaluate strides for send and receive */ gam_setstride(ndim, size, ld_loc, ld_loc, stride_rcv, stride_snd); gam_setstride(ndim, size, ld_loc, ld_rem, stride_rem, stride_snd); /* Compute the number of elements in each dimension and store result in count. Scale the first element in count by the element size. */ gam_ComputeCount(ndim, plo_rcv, phi_rcv, count); gam_CountElems(ndim, plo_snd, phi_snd, &length); length *= size; count[0] *= size; /* If we are sending data to another node, then use message passing */ if (!rprocflag) { /* Fill send buffer with data. */ armci_write_strided(ptr_snd, (int)ndim-1, stride_snd, count, snd_ptr); } /* Send Messages. If processor has odd index in direction idx, it * sends message first, if processor has even index it receives * message first. Then process is reversed. Also need to account * for whether or not there are an odd number of processors along * update direction. */ if (p_handle >= 0) { proc_rem_snd = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem_snd]; proc_rem_rcv = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem_rcv]; } if (GA[handle].nblock[idx]%2 == 0) { if (index[idx]%2 != 0 && !rprocflag) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } else if (index[idx]%2 == 0 && !sprocflag) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } if (rprocflag) { #if 0 ARMCI_PutS(ptr_snd, stride_snd, ptr_rem, stride_rem, count, ndim- 1, proc_rem_snd); /* Send signal to remote processor that data transfer has been completed. */ bytes = sizeof(int); ARMCI_Put(GA_Update_Signal, GA_Update_Flags[proc_rem_snd]+msgcnt, bytes, proc_rem_snd); #else ARMCI_PutS_flag(ptr_snd, stride_snd, ptr_rem, stride_rem, count, (int)(ndim-1), GA_Update_Flags[proc_rem_snd]+msgcnt, *GA_Update_Signal, (int)proc_rem_snd); #endif } if (index[idx]%2 != 0 && !sprocflag) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } else if (index[idx]%2 == 0 && !rprocflag) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } } else { /* account for wrap-around boundary condition, if necessary */ pmax = GA[handle].nblock[idx] - 1; if (index[idx]%2 != 0 && !rprocflag) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } else if (index[idx]%2 == 0 && index[idx] != pmax && !sprocflag) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } if (rprocflag) { #if 0 ARMCI_PutS(ptr_snd, stride_snd, ptr_rem, stride_rem, count, ndim- 1, proc_rem_snd); /* Send signal to remote processor that data transfer has been completed. */ bytes = sizeof(int); ARMCI_Put(GA_Update_Signal, GA_Update_Flags[proc_rem_snd]+msgcnt, bytes, proc_rem_snd); #else ARMCI_PutS_flag(ptr_snd, stride_snd, ptr_rem, stride_rem, count, (int)(ndim-1), GA_Update_Flags[proc_rem_snd]+msgcnt, *GA_Update_Signal, (int)proc_rem_snd); #endif } if (index[idx]%2 != 0 && !sprocflag) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } else if (index[idx]%2 == 0 && index[idx] != 0 && !rprocflag) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } /* make up for odd processor at end of string */ if (index[idx] == 0 && !rprocflag) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } if (index[idx] == pmax && !sprocflag) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } } if (sprocflag) { flag1 = 1; } else { flag1 = 0; } msgcnt++; /* copy data back into global array */ if (!sprocflag) { armci_read_strided(ptr_rcv, (int)ndim-1, stride_rcv, count, rcv_ptr); } /* Find parameters for message in positive direction. */ get_remote_block_pos(idx, ndim, lo_loc, hi_loc, slo_rcv, shi_rcv, dims, width); /* locate processor with this data */ if (!pnga_locate_region(g_a, slo_rcv, shi_rcv, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), slo_rcv, shi_rcv, g_a); wproc = GA_proclist[0]; if (p_handle >= 0) { wproc = PGRP_LIST[p_handle].inv_map_proc_list[wproc]; } rprocflag = ARMCI_Same_node(wproc); proc_rem_snd = GA_proclist[0]; /* Find processor from which data will be recieved */ for (i = 0; i < ndim; i++) { if (i == idx) { lo_rcv[i] = lo_loc[i] - width[i]; hi_rcv[i] = lo_loc[i] - 1; } else { lo_rcv[i] = lo_loc[i]; hi_rcv[i] = hi_loc[i]; } } /* Account for boundaries, if necessary. */ for (i=0; i= 0) { wproc = PGRP_LIST[p_handle].inv_map_proc_list[wproc]; } sprocflag = ARMCI_Same_node(wproc); proc_rem_rcv = GA_proclist[0]; pnga_distribution(g_a, proc_rem_rcv, tlo_rem, thi_rem); /* Get actual coordinates of chunk of data that will be sent to * remote processor as well as coordinates of the array space that * will receive data from remote processor. */ for (i = 0; i < ndim; i++) { if (increment[i] == 0) { if (i == idx) { plo_snd[i] = hi_loc[i] - lo_loc[i] + 1; phi_snd[i] = hi_loc[i] - lo_loc[i] + width[i]; plo_rcv[i] = 0; phi_rcv[i] = width[i] - 1; plo_rem[i] = 0; /*phi_rem[i] = width[i] - 1;*/ } else { plo_snd[i] = width[i]; phi_snd[i] = hi_loc[i] - lo_loc[i] + width[i]; plo_rcv[i] = width[i]; phi_rcv[i] = hi_loc[i] - lo_loc[i] + width[i]; plo_rem[i] = width[i]; /*phi_rem[i] = thi_rem[i] - tlo_rem[i] + width[i];*/ } } else { plo_snd[i] = 0; phi_snd[i] = hi_loc[i] - lo_loc[i] + increment[i]; plo_rcv[i] = 0; phi_rcv[i] = hi_loc[i] - lo_loc[i] + increment[i]; plo_rem[i] = 0; /*phi_rem[i] = thi_rem[i] - tlo_rem[i] + increment[i];*/ } } /* Get pointer to local data buffer and remote data buffer as well as lists of leading dimenstions */ gam_LocationWithGhosts(me, handle, plo_snd, &ptr_snd, ld_loc); gam_LocationWithGhosts(me, handle, plo_rcv, &ptr_rcv, ld_loc); gam_LocationWithGhosts(proc_rem_snd, handle, plo_rem, &ptr_rem, ld_rem); /* Evaluate strides for send and recieve */ gam_setstride(ndim, size, ld_loc, ld_loc, stride_rcv, stride_snd); gam_setstride(ndim, size, ld_loc, ld_rem, stride_rem, stride_snd); /* Compute the number of elements in each dimension and store result in count. Scale the first element in count by the element size. */ gam_ComputeCount(ndim, plo_rcv, phi_rcv, count); gam_CountElems(ndim, plo_snd, phi_snd, &length); length *= size; count[0] *= size; /* if we are sending data to another node, use message passing */ if (!rprocflag) { /* Fill send buffer with data. */ armci_write_strided(ptr_snd, (int)ndim-1, stride_snd, count, snd_ptr); } /* Send Messages. If processor has odd index in direction idx, it * sends message first, if processor has even index it receives * message first. Then process is reversed. Also need to account * for whether or not there are an odd number of processors along * update direction. */ if (p_handle >= 0) { proc_rem_snd = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem_snd]; proc_rem_rcv = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem_rcv]; } if (GA[handle].nblock[idx]%2 == 0) { if (index[idx]%2 != 0 && !rprocflag) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } else if (index[idx]%2 == 0 && !sprocflag) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } if (rprocflag) { #if 0 ARMCI_PutS(ptr_snd, stride_snd, ptr_rem, stride_rem, count, ndim- 1, proc_rem_snd); /* Send signal to remote processor that data transfer has been completed. */ bytes = sizeof(int); ARMCI_Put(GA_Update_Signal, GA_Update_Flags[proc_rem_snd]+msgcnt, bytes, proc_rem_snd); #else ARMCI_PutS_flag(ptr_snd, stride_snd, ptr_rem, stride_rem, count, (int)(ndim-1), GA_Update_Flags[proc_rem_snd]+msgcnt, *GA_Update_Signal, (int)proc_rem_snd); #endif } if (index[idx]%2 != 0 && !sprocflag) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } else if (index[idx]%2 == 0 && !rprocflag) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } } else { /* account for wrap-around boundary condition, if necessary */ pmax = GA[handle].nblock[idx] - 1; if (index[idx]%2 != 0 && !rprocflag) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } else if (index[idx]%2 == 0 && index[idx] != 0 && !sprocflag) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } if (rprocflag) { #if 0 ARMCI_PutS(ptr_snd, stride_snd, ptr_rem, stride_rem, count, ndim- 1, proc_rem_snd); /* Send signal to remote processor that data transfer has been completed. */ bytes = sizeof(int); ARMCI_Put(GA_Update_Signal, GA_Update_Flags[proc_rem_snd]+msgcnt, bytes, proc_rem_snd); #else ARMCI_PutS_flag(ptr_snd, stride_snd, ptr_rem, stride_rem, count, (int)(ndim-1), GA_Update_Flags[proc_rem_snd]+msgcnt, *GA_Update_Signal, (int)proc_rem_snd); #endif } if (index[idx]%2 != 0 && !sprocflag) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } else if (index[idx]%2 == 0 && index[idx] != pmax && !rprocflag) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } /* make up for odd processor at end of string */ if (index[idx] == pmax && !rprocflag) { armci_msg_snd(msgcnt, snd_ptr, length, proc_rem_snd); } if (index[idx] == 0 && !sprocflag) { armci_msg_rcv(msgcnt, rcv_ptr, bufsize, &msglen, proc_rem_rcv); } } /* copy data back into global array */ if (!sprocflag) { armci_read_strided(ptr_rcv, (int)ndim-1, stride_rcv, count, rcv_ptr); } if (sprocflag) { flag2 = 1; } else { flag2 = 0; } msgcnt++; } /* check to make sure any outstanding puts have showed up */ waitformixedflags(flag1, flag2, GA_Update_Flags[GAme]+msgcnt-2, GA_Update_Flags[GAme]+msgcnt-1); /* update increment array */ increment[idx] = 2*width[idx]; } ga_free(rcv_ptr_orig); ga_free(snd_ptr_orig); /* set update flags to zero for next operation */ for (idx=0; idx < 2*ndim; idx++) { GA_Update_Flags[GAme][idx] = 0; } GA_POP_NAME; return TRUE; } /*\ UPDATE GHOST CELLS OF GLOBAL ARRAY USING GET CALLS \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_update7_ghosts = pnga_update7_ghosts #endif logical pnga_update7_ghosts(Integer g_a) { Integer idx, ipx, np, handle=GA_OFFSET + g_a, proc_rem; Integer ntot, mask[MAXDIM]; Integer size, ndim, i, itmp; Integer width[MAXDIM], dims[MAXDIM]; Integer lo_loc[MAXDIM], hi_loc[MAXDIM]; Integer plo_loc[MAXDIM], phi_loc[MAXDIM]; Integer tlo_rem[MAXDIM], thi_rem[MAXDIM]; Integer plo_rem[MAXDIM]; Integer ld_loc[MAXDIM], ld_rem[MAXDIM]; logical mask0; int stride_loc[MAXDIM], stride_rem[MAXDIM],count[MAXDIM]; char *ptr_loc, *ptr_rem; Integer me = pnga_nodeid(); Integer p_handle; /* if global array has no ghost cells, just return */ if (!pnga_has_ghosts(g_a)) { return TRUE; } size = GA[handle].elemsize; ndim = GA[handle].ndim; p_handle = GA[handle].p_handle; /* initialize ghost cell widths and get array dimensions */ for (idx=0; idx < ndim; idx++) { width[idx] = (Integer)GA[handle].width[idx]; dims[idx] = (Integer)GA[handle].dims[idx]; } /* Check to make sure that global array is well-behaved (all processors have data and the width of the data in each dimension is greater than the corresponding value in width[]). */ if (!gai_check_ghost_distr(g_a)) return FALSE; GA_PUSH_NAME("ga_update7_ghosts"); /* Get pointer to local memory */ ptr_loc = GA[handle].ptr[me]; /* obtain range of data that is held by local processor */ pnga_distribution(g_a,me,lo_loc,hi_loc); /* evaluate total number of GET operations that will be required */ ntot = 1; for (idx=0; idx < ndim; idx++) ntot *= 3; /* Loop over all GET operations. The operation corresponding to the mask of all zeros is left out. */ for (ipx=0; ipx < ntot; ipx++) { /* Convert ipx to corresponding mask values */ itmp = ipx; mask0 = TRUE; for (idx = 0; idx < ndim; idx++) { i = itmp%3; mask[idx] = i-1; if (mask[idx] != 0) mask0 = FALSE; itmp = (itmp-i)/3; } if (mask0) continue; /* check to see if ghost cell block has zero elements*/ mask0 = FALSE; itmp = 0; for (idx = 0; idx < ndim; idx++) { if (mask[idx] != 0 && width[idx] == 0) mask0 = TRUE; if (mask[idx] != 0) itmp++; } /*if (itmp>1) mask0 = TRUE; */ if (mask0) continue; /* Now that mask has been determined, find data that is to be moved * and identify processor from which it is coming. Wrap boundaries * around, if necessary */ for (idx = 0; idx < ndim; idx++) { if (mask[idx] == 0) { tlo_rem[idx] = lo_loc[idx]; thi_rem[idx] = hi_loc[idx]; } else if (mask[idx] == -1) { if (lo_loc[idx] > 1) { tlo_rem[idx] = lo_loc[idx]-width[idx]; thi_rem[idx] = lo_loc[idx]-1; } else { tlo_rem[idx] = dims[idx]-width[idx]+1; thi_rem[idx] = dims[idx]; } } else if (mask[idx] == 1) { if (hi_loc[idx] < dims[idx]) { tlo_rem[idx] = hi_loc[idx] + 1; thi_rem[idx] = hi_loc[idx] + width[idx]; } else { tlo_rem[idx] = 1; thi_rem[idx] = width[idx]; } } else { fprintf(stderr,"Illegal mask value found\n"); } } /* Locate remote processor to which data must be sent */ if (!pnga_locate_region(g_a, tlo_rem, thi_rem, _ga_map, GA_proclist, &np)) ga_RegionError(pnga_ndim(g_a), tlo_rem, thi_rem, g_a); if (np > 1) { fprintf(stderr,"More than one remote processor found\n"); } /* Remote processor has been identified, now get ready to send data to it. Start by getting distribution on remote processor.*/ proc_rem = GA_proclist[0]; pnga_distribution(g_a, proc_rem, tlo_rem, thi_rem); for (idx = 0; idx < ndim; idx++) { if (mask[idx] == 0) { plo_loc[idx] = width[idx]; phi_loc[idx] = hi_loc[idx]-lo_loc[idx]+width[idx]; plo_rem[idx] = plo_loc[idx]; } else if (mask[idx] == -1) { plo_loc[idx] = 0; phi_loc[idx] = width[idx]-1; plo_rem[idx] = thi_rem[idx]-tlo_rem[idx]+1; } else if (mask[idx] == 1) { plo_loc[idx] = hi_loc[idx]-lo_loc[idx]+width[idx]+1; phi_loc[idx] = hi_loc[idx]-lo_loc[idx]+2*width[idx]; plo_rem[idx] = width[idx]; } } /* Get pointer to local data buffer and remote data buffer as well as lists of leading dimenstions */ gam_LocationWithGhosts(me, handle, plo_loc, &ptr_loc, ld_loc); gam_LocationWithGhosts(proc_rem, handle, plo_rem, &ptr_rem, ld_rem); /* Evaluate strides on local and remote processors */ gam_setstride(ndim, size, ld_loc, ld_rem, stride_rem, stride_loc); /* Compute the number of elements in each dimension and store result in count. Scale the first element in count by the element size. */ gam_ComputeCount(ndim, plo_loc, phi_loc, count); count[0] *= size; if (p_handle >= 0) { proc_rem = PGRP_LIST[p_handle].inv_map_proc_list[proc_rem]; } /* put data on remote processor */ /* ARMCI_GetS(ptr_rem, stride_rem, ptr_loc, stride_loc, count, (int)(ndim - 1), (int)proc_rem); */ ARMCI_NbGetS(ptr_rem, stride_rem, ptr_loc, stride_loc, count, (int)(ndim - 1), (int)proc_rem, NULL); } ARMCI_WaitAll(); GA_POP_NAME; return TRUE; } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_ghost_barrier = pnga_ghost_barrier #endif void pnga_ghost_barrier() { #ifdef LAPI int signal = 1, n = 1; int *ptr; ptr = &signal; armci_msg_igop(ptr,n,"+"); #else armci_msg_barrier(); #endif } /*\ UPDATE THE GHOST CELLS ON A PROCESSOR IN A SPECIFIC DIRECTION * USING NON-BLOCKING GET CALLS \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_nbget_ghost_dir = pnga_nbget_ghost_dir #endif void pnga_nbget_ghost_dir(Integer g_a, Integer *mask, Integer *nbhandle) { Integer handle = GA_OFFSET + g_a; Integer lo_loc[MAXDIM], hi_loc[MAXDIM], lo_rem[MAXDIM], hi_rem[MAXDIM]; Integer subscript[MAXDIM], ld[MAXDIM]; Integer i, ndim, dim, width; char *ptr_loc; Integer me = pnga_nodeid(); /*Integer p_handle;*/ GA_PUSH_NAME("nga_nbget_ghost_dir"); ndim = GA[handle].ndim; /*p_handle = GA[handle].p_handle;*/ /* check mask to see that it corresponds to a valid direction */ for (i=0; i #endif #include "globalp.h" #include "macdecls.h" #include "ga-papi.h" #include "ga-wapi.h" #include "galinalg.h" #define REAL double #define ZERO 0.0e0 #define ONE 1.0e0 /*----------------------*/ void LP_daxpy(n,da,dx,incx,dy,incy) /* constant times a vector plus a vector. jack dongarra, linpack, 3/11/78. */ REAL dx[],dy[],da; int incx,incy,n; { int i,ix,iy; if(n <= 0) return; if (da == ZERO) return; if(incx != 1 || incy != 1) { /* code for unequal increments or equal increments not equal to 1 */ ix = 0; iy = 0; if(incx < 0) ix = (-n+1)*incx; if(incy < 0)iy = (-n+1)*incy; for (i = 0;i < n; i++) { dy[iy] = dy[iy] + da*dx[ix]; ix = ix + incx; iy = iy + incy; } return; } /* code for both increments equal to 1 */ #ifdef ROLL for (i = 0;i < n; i++) { dy[i] = dy[i] + da*dx[i]; } #endif #ifdef UNROLL m = n % 4; if ( m != 0) { for (i = 0; i < m; i++) dy[i] = dy[i] + da*dx[i]; if (n < 4) return; } for (i = m; i < n; i = i + 4) { dy[i] = dy[i] + da*dx[i]; dy[i+1] = dy[i+1] + da*dx[i+1]; dy[i+2] = dy[i+2] + da*dx[i+2]; dy[i+3] = dy[i+3] + da*dx[i+3]; } #endif } /*----------------------*/ REAL LP_ddot(n,dx,incx,dy,incy) /* forms the dot product of two vectors. jack dongarra, linpack, 3/11/78. */ REAL dx[],dy[]; int incx,incy,n; { REAL dtemp; int i,ix,iy; dtemp = ZERO; if(n <= 0) return(ZERO); if(incx != 1 || incy != 1) { /* code for unequal increments or equal increments not equal to 1 */ ix = 0; iy = 0; if (incx < 0) ix = (-n+1)*incx; if (incy < 0) iy = (-n+1)*incy; for (i = 0;i < n; i++) { dtemp = dtemp + dx[ix]*dy[iy]; ix = ix + incx; iy = iy + incy; } return(dtemp); } /* code for both increments equal to 1 */ #ifdef ROLL for (i=0;i < n; i++) dtemp = dtemp + dx[i]*dy[i]; #endif #ifdef UNROLL m = n % 5; if (m != 0) { for (i = 0; i < m; i++) dtemp = dtemp + dx[i]*dy[i]; if (n < 5) return(dtemp); } for (i = m; i < n; i = i + 5) { dtemp = dtemp + dx[i]*dy[i] + dx[i+1]*dy[i+1] + dx[i+2]*dy[i+2] + dx[i+3]*dy[i+3] + dx[i+4]*dy[i+4]; } #endif return(dtemp); } /*----------------------*/ void LP_dscal(n,da,dx,incx) /* scales a vector by a constant. jack dongarra, linpack, 3/11/78. */ REAL da,dx[]; int n, incx; { int i,nincx; if(n <= 0)return; if(incx != 1) { /* code for increment not equal to 1 */ nincx = n*incx; for (i = 0; i < nincx; i = i + incx) dx[i] = da*dx[i]; return; } /* code for increment equal to 1 */ #ifdef ROLL for (i = 0; i < n; i++) dx[i] = da*dx[i]; #endif #ifdef UNROLL m = n % 5; if (m != 0) { for (i = 0; i < m; i++) dx[i] = da*dx[i]; if (n < 5) return; } for (i = m; i < n; i = i + 5){ dx[i] = da*dx[i]; dx[i+1] = da*dx[i+1]; dx[i+2] = da*dx[i+2]; dx[i+3] = da*dx[i+3]; dx[i+4] = da*dx[i+4]; } #endif } /*----------------------*/ int LP_idamax(n,dx,incx) /* finds the index of element having max. absolute value. jack dongarra, linpack, 3/11/78. */ REAL dx[]; int incx,n; { REAL dmax; int i, ix, itemp = 0; if( n < 1 ) return(-1); if(n ==1 ) return(0); if(incx != 1) { /* code for increment not equal to 1 */ ix = 1; dmax = fabs((double)dx[0]); ix = ix + incx; for (i = 1; i < n; i++) { if(fabs((double)dx[ix]) > dmax) { itemp = i; dmax = fabs((double)dx[ix]); } ix = ix + incx; } } else { /* code for increment equal to 1 */ itemp = 0; dmax = fabs((double)dx[0]); for (i = 1; i < n; i++) { if(fabs((double)dx[i]) > dmax) { itemp = i; dmax = fabs((double)dx[i]); } } } return (itemp); } /*----------------------*/ void LP_dgefa(a,lda,n,ipvt,info) REAL a[]; int lda,n,ipvt[],*info; /* We would like to declare a[][lda], but c does not allow it. In this function, references to a[i][j] are written a[lda*i+j]. */ /* LP_dgefa factors a double precision matrix by gaussian elimination. LP_dgefa is usually called by dgeco, but it can be called directly with a saving in time if rcond is not needed. (time for dgeco) = (1 + 9/n)*(time for LP_dgefa) . on entry a REAL precision[n][lda] the matrix to be factored. lda integer the leading dimension of the array a . n integer the order of the matrix a . on return a an upper triangular matrix and the multipliers which were used to obtain it. the factorization can be written a = l*u where l is a product of permutation and unit lower triangular matrices and u is upper triangular. ipvt integer[n] an integer vector of pivot indices. info integer = 0 normal value. = k if u[k][k] .eq. 0.0 . this is not an error condition for this subroutine, but it does indicate that LP_dgesl or dgedi will divide by zero if called. use rcond in dgeco for a reliable indication of singularity. linpack. this version dated 08/14/78 . cleve moler, university of new mexico, argonne national lab. functions blas LP_daxpy,LP_dscal,LP_idamax */ { /* internal variables */ REAL t; int j,k,kp1,l,nm1; /* gaussian elimination with partial pivoting */ *info = 0; nm1 = n - 1; if (nm1 >= 0) { for (k = 0; k < nm1; k++) { kp1 = k + 1; /* find l = pivot index */ l = LP_idamax(n-k,&a[lda*k+k],1) + k; ipvt[k] = l; /* zero pivot implies this column already triangularized */ if (a[lda*k+l] != ZERO) { /* interchange if necessary */ if (l != k) { t = a[lda*k+l]; a[lda*k+l] = a[lda*k+k]; a[lda*k+k] = t; } /* compute multipliers */ t = -ONE/a[lda*k+k]; LP_dscal(n-(k+1),t,&a[lda*k+k+1],1); /* row elimination with column indexing */ for (j = kp1; j < n; j++) { t = a[lda*j+l]; if (l != k) { a[lda*j+l] = a[lda*j+k]; a[lda*j+k] = t; } LP_daxpy(n-(k+1),t,&a[lda*k+k+1],1, &a[lda*j+k+1],1); } } else { *info = k; } } } ipvt[n-1] = n-1; if (a[lda*(n-1)+(n-1)] == ZERO) *info = n-1; } /*----------------------*/ void LP_dgesl(a,lda,n,ipvt,b,job) int lda,n,ipvt[],job; REAL a[],b[]; /* We would like to declare a[][lda], but c does not allow it. In this function, references to a[i][j] are written a[lda*i+j]. */ /* LP_dgesl solves the double precision system a * x = b or trans(a) * x = b using the factors computed by dgeco or LP_dgefa. on entry a double precision[n][lda] the output from dgeco or LP_dgefa. lda integer the leading dimension of the array a . n integer the order of the matrix a . ipvt integer[n] the pivot vector from dgeco or LP_dgefa. b double precision[n] the right hand side vector. job integer = 0 to solve a*x = b , = nonzero to solve trans(a)*x = b where trans(a) is the transpose. on return b the solution vector x . error condition a division by zero will occur if the input factor contains a zero on the diagonal. technically this indicates singularity but it is often caused by improper arguments or improper setting of lda . it will not occur if the subroutines are called correctly and if dgeco has set rcond .gt. 0.0 or LP_dgefa has set info .eq. 0 . to compute inverse(a) * c where c is a matrix with p columns dgeco(a,lda,n,ipvt,rcond,z) if (!rcond is too small){ for (j=0,j= 1) { for (k = 0; k < nm1; k++) { l = ipvt[k]; t = b[l]; if (l != k){ b[l] = b[k]; b[k] = t; } LP_daxpy(n-(k+1),t,&a[lda*k+k+1],1,&b[k+1],1); } } /* now solve u*x = y */ for (kb = 0; kb < n; kb++) { k = n - (kb + 1); b[k] = b[k]/a[lda*k+k]; t = -b[k]; LP_daxpy(k,t,&a[lda*k+0],1,&b[0],1); } } else { /* job = nonzero, solve trans(a) * x = b first solve trans(u)*y = b */ for (k = 0; k < n; k++) { t = LP_ddot(k,&a[lda*k+0],1,&b[0],1); b[k] = (b[k] - t)/a[lda*k+k]; } /* now solve trans(l)*x = y */ if (nm1 >= 1) { for (kb = 1; kb < nm1; kb++) { k = n - (kb+1); b[k] = b[k] + LP_ddot(n-(k+1),&a[lda*k+k+1],1,&b[k+1],1); l = ipvt[k]; if (l != k) { t = b[l]; b[l] = b[k]; b[k] = t; } } } } } /** * solve the set of linear equations * * AX = B * * with possibly multiple rhs stored as columns of matrix B * the matrix A is not destroyed */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_lu_solve_seq = pnga_lu_solve_seq #endif void pnga_lu_solve_seq(char *trans, Integer g_a, Integer g_b) { logical oactive; /* true iff this process participates */ Integer dimA1, dimA2, typeA; Integer dimB1, dimB2, typeB; Integer me; #if HAVE_LAPACK || ENABLE_F77 BlasInt blas_dimA1, blas_dimA2, blas_dimB1, blas_dimB2, info=0; #else Integer info=0; #endif Integer dims[2], ndim; Integer lo[2], hi[2]; /** check environment */ me = pnga_nodeid(); /** check GA info for input arrays */ pnga_check_handle(g_a, "ga_lu_solve: a"); pnga_check_handle(g_b, "ga_lu_solve: b"); pnga_inquire(g_a, &typeA, &ndim, dims); dimA1 = dims[0]; dimA2 = dims[1]; pnga_inquire(g_b, &typeB, &ndim, dims); dimB1 = dims[0]; dimB2 = dims[1]; GA_PUSH_NAME("ga_lu_solve_seq"); if (dimA1 != dimA2) pnga_error("ga_lu_solve: g_a must be square matrix ", 1); else if(dimA1 != dimB1) pnga_error("ga_lu_solve: dims of A and B do not match ", 1); else if(typeA != C_DBL || typeB != C_DBL) pnga_error("ga_lu_solve: wrong type(s) of A and/or B ", 1); pnga_sync(); oactive = (me == 0); if (oactive) { DoublePrecision *adra, *adrb; Integer *adri; Integer one=1; /** allocate a,b, and work and ipiv arrays */ adra = (DoublePrecision*) ga_malloc(dimA1*dimA2, F_DBL, "a"); adrb = (DoublePrecision*) ga_malloc(dimB1*dimB2, F_DBL, "b"); adri = (Integer*) ga_malloc(GA_MIN(dimA1,dimA2), F_INT, "ipiv"); /** Fill local arrays from global arrays */ lo[0] = one; hi[0] = dimA1; lo[1] = one; hi[1] = dimA2; pnga_get(g_a, lo, hi, adra, &dimA1); lo[0] = one; hi[0] = dimB1; lo[1] = one; hi[1] = dimB2; pnga_get(g_b, lo, hi, adrb, &dimB1); /** LU factorization */ #if HAVE_LAPACK || ENABLE_F77 blas_dimA1 = dimA1; blas_dimA2 = dimA2; blas_dimB1 = dimB1; blas_dimB2 = dimB2; LAPACK_DGETRF(&blas_dimA1, &blas_dimA2, adra, &blas_dimA1, adri, &info); #else { int info_t; LP_dgefa(adra, (int)dimA1, (int)dimA2, (int*)adri, &info_t); info = info_t; } #endif /** SOLVE */ if(info == 0) { #if HAVE_LAPACK || ENABLE_F77 LAPACK_DGETRS(trans, &blas_dimA1, &blas_dimB2, adra, &blas_dimA1, adri, adrb, &blas_dimB1, &info); #else DoublePrecision *p_b; Integer i; int job=0; if(*trans == 't' || *trans == 'T') job = 1; for(i=0; i= nelem) indexA = j + ++m*offset2; A[indexA] = alpha *(A[indexA] + B[indexB]); } } } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_symmetrize = pnga_symmetrize #endif void pnga_symmetrize(Integer g_a) { DoublePrecision alpha = 0.5; Integer i, me = pnga_nodeid(); Integer alo[GA_MAX_DIM], ahi[GA_MAX_DIM], lda[GA_MAX_DIM], nelem=1; Integer blo[GA_MAX_DIM], bhi[GA_MAX_DIM], ldb[GA_MAX_DIM]; Integer ndim, dims[GA_MAX_DIM], type; Logical have_data; Integer g_b; /* temporary global array (b = A') */ Integer num_blocks_a; void *a_ptr=NULL, *b_ptr=NULL; int local_sync_begin,local_sync_end; char *tempB = "A_transpose"; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); GA_PUSH_NAME("ga_symmetrize"); num_blocks_a = pnga_total_blocks(g_a); pnga_inquire(g_a, &type, &ndim, dims); if (type != C_DBL) pnga_error("ga_symmetrize: only implemented for double precision",0); if (num_blocks_a < 0) { if (dims[ndim-1] != dims[ndim-2]) pnga_error("ga_sym: can only sym square matrix", 0L); /* Find the local distribution */ pnga_distribution(g_a, me, alo, ahi); have_data = ahi[0]>0; for(i=1; i0; if(have_data) { pnga_access_ptr(g_a, alo, ahi, &a_ptr, lda); for(i=0; i #endif #if HAVE_STDLIB_H # include #endif static double __elem_op_var; static double __elem_op_var2; /* assignment e.g. a = b */ #define assign_reg(a,b) (a) = (b) #define assign_cpl(a,b) (a).real = (b).real; \ (a).imag = (b).imag /* assignment of zero e.g. a = 0 */ #define assign_zero_reg(a) (a) = 0 #define assign_zero_cpl(a) (a).real = 0; \ (a).imag = 0 /* assignment of a sum of two values e.g. a = b + c */ #define assign_add_reg(a,b,c) (a) = ((b) + (c)) #define assign_add_cpl(a,b,c) (a).real = ((b).real + (c).real); \ (a).imag = ((b).imag + (c).imag) /* assignment of a product of two values e.g. a = b * c */ #define assign_mul_reg(a,b,c) (a) = ((b) * (c)) #define assign_mul_cpl(a,b,c) (a).real = ((b).real*(c).real-(b).imag*(c).imag);\ (a).imag = ((b).real*(c).imag+(b).imag*(c).real) /* assignment of a product of two valus e.g. a = b * c */ #define assign_mul_constant_reg(a,b,c) (a) = ((b) * (c)) #define assign_mul_constant_cpl(a,b,c) (a).real = ((b) * (c).real); \ (a).imag = ((b) * (c).imag) /* assignment of a product of two valus e.g. a = b * c */ #define assign_mul_reg(a,b,c) (a) = ((b) * (c)) #define assign_mul_cpl(a,b,c) (a).real = ((b).real*(c).real-(b).imag*(c).imag); \ (a).imag = ((b).real*(c).imag+(b).imag*(c).real) /* assignment of a quotient of two valus e.g. a = b / c */ #if 0 #define assign_div_reg(a,b,c) (a) = ((b) / (c)) #define assign_div_cpl(a,b,c) (a).real = (((b).real*(c).real+(b).imag*(c).imag) \ /((c).real*(c).real+(c).imag*(c).imag)); \ (a).imag = (((b).imag*(c).real-(b).real*(c).imag) \ /((c).real*(c).real+(c).imag*(c).imag)) #else #define assign_div_reg(a,b,c) (a) = ((b) / (c)) #define assign_div_cpl(a,b,c) __elem_op_var = ((c).real*(c).real+(c).imag*(c).imag); \ (a).real = (((b).real*(c).real+(b).imag*(c).imag) \ /__elem_op_var; \ (a).imag = (((b).imag*(c).real-(b).real*(c).imag) \ /__elem_op_var #endif /* in-place assignment of a sum e.g. a = a + b written a += b */ #define add_assign_reg(a,b) (a) += (b) #define add_assign_cpl(a,b) (a).real += (b).real; \ (a).imag += (b).imag /* not equal to zero e.g. a != 0 */ #define neq_zero_reg(a) (0 != (a)) #define neq_zero_cpl(a) (0 != (a).real || 0 != (a).imag) /* equal to zero e.g. a == 0 */ #define eq_zero_reg(a) (0 == (a)) #define eq_zero_cpl(a) (0 == (a).real && 0 == (a).imag) /* equality e.g. a == b */ #define eq_reg(a,b) ((a) == (b)) #define eq_cpl(a,b) ((a).real == (b).real && (a).imag == (b).imag) /* absolute value */ #define abs_reg(a) ((a) < 0 ? -(a) : (a)) #define abs_cpl(a) (a) = sqrt((a).real*(a).real+(a).imag*(a).imag) /* assignment of a maximum of two values e.g. if(b > c) a = b else a = c */ #define assign_max_reg(a,b,c) (a) = (b) > (c) ? (b) : (c) #define assign_max_cpl(a,b,c) __elem_op_var = ((b).real*(b).real+(b).imag*(b).imag); \ __elem_op_var2 = ((c).real*(c).real+(c).imag*(c).imag); \ (a).real = __elem_op_var > __elem_op_var2 \ ? (b).real : (c).real; \ (a).imag = __elem_op_var > __elem_op_var2 \ ? (b).imag : (c).imag /* assignment of a miniimum of two values e.g. if(b > c) a = b else a = c */ #define assign_min_reg(a,b,c) (a) = (b) < (c) ? (b) : (c) #define assign_min_cpl(a,b,c) __elem_op_var = ((b).real*(b).real+(b).imag*(b).imag); \ __elem_op_var2 = ((c).real*(c).real+(c).imag*(c).imag); \ (a).real = __elem_op_var < __elem_op_var2 \ ? (b).real : (c).real; \ (a).imag = __elem_op_var < __elem_op_var2 \ ? (b).imag : (c).imag /* assignment of an absolute value e.g. a = |b| */ #define assign_abs_reg(a,b) (a) = abs_reg(b) /* Note: absolute value of a complex number is usually sqrt(x*x + y*y) but this * can lead to overflows and/or underflows. Instead, we use the well-known * hypot solution: * double hypot(double x,double y) * { * double t; * x = abs(x); * y = abs(y); * t = min(x,y); * x = max(x,y); * y = t; * return x*sqrt(1+(y/x)*(y/x)); * } */ #if HAVE_HYPOT #define assign_abs_cpl(a,b) (a).real = hypot((b).real, (b).imag); \ (a).imag = 0.0 #else #define assign_abs_cpl(a,b) \ if (abs_reg((b).real) >= abs_reg((b).imag)) { \ (a).real = abs_reg((b).real) * \ sqrt(1.0 + ((b).imag/(b).real)*((b).imag/(b).real)); \ } else { \ (a).real = abs_reg((b).imag) * \ sqrt(1.0 + ((b).real/(b).imag)*((b).real/(b).imag)); \ } \ (a).imag = 0.0 #endif /* assignment of a random value */ #define sign (1.0 * rand() / RAND_MAX > 1.0 ? 1.0 : -1.0) #define assign_rand_reg(a,val) (a) = 1.0 * (val) * rand() / RAND_MAX * sign #define assign_rand_cpl(a,val) assign_rand_reg((a).real, (val).real); \ assign_rand_reg((a).imag, (val).imag) #endif /* _ABSTRACT_OPS_H_ */ ga-5-3/global/src/ga_ckpt.h0000640005473000001440000000003110263264472014404 0ustar d3n000users#include "armci_chkpt.h" ga-5-3/global/src/complex.F0000640005473000001440000000745711503002164014406 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c All Fortran functions returning a complex or double complex type must c be defined here with a corresponding C subroutine e.g. (Fortran) complex c function ga_cdot --> (C) void gai_cdot(..., SingleComplex *ret). c c from http://www.math.utah.edu/software/c-with-fortran.html c c c Function return types c ... c Unfortunately, returning composite objects that occupy more than a c single register, or an adjacent register pair, is fraught with peril. c Older C and C++ compilers did not support this at all, and newer ones c may do it differently than Fortran compilers do: thus, you should not c expect to use Fortran functions that return types such as COMPLEX or c COMPLEX*16. Write a SUBROUTINE interface to your Fortran function c instead, and then invoke it as a void function from C or C++. c c c We attempted to use various calling conventions, argument order, c hidden first arguments as the return, etc to eliminate the need c for any Fortran source such as this, but portability was an issue. c Intel compilers did not behave similarly to GCC or Pathscale. At a c later date perhaps we will revisit this. c c For the time being, any function returning a complex type must be c defined here following the established convention herein. complex function ga_cdot(g_a,g_b) implicit none integer g_a, g_b external gai_cdot ga_cdot = (0.,0.) call gai_cdot(g_a,g_b,ga_cdot) end complex function nga_cdot(g_a,g_b) implicit none integer g_a, g_b external gai_cdot nga_cdot = (0.,0.) call ngai_cdot(g_a,g_b,nga_cdot) end double complex function ga_zdot(g_a,g_b) implicit none integer g_a, g_b external gai_zdot ga_zdot = (0.,0.) call gai_zdot(g_a,g_b,ga_zdot) end double complex function nga_zdot(g_a,g_b) implicit none integer g_a, g_b external gai_zdot nga_zdot = (0.,0.) call ngai_zdot(g_a,g_b,nga_zdot) end complex function ga_cdot_patch( $ g_a, t_a, ailo, aihi, ajlo, ajhi, $ g_b, t_b, bilo, bihi, bjlo, bjhi) implicit none integer g_a, ailo, aihi, ajlo, ajhi integer g_b, bilo, bihi, bjlo, bjhi character*1 t_a, t_b external gai_cdot_patch ga_cdot_patch = (0.,0.) call gai_cdot_patch( $ g_a, t_a, ailo, aihi, ajlo, ajhi, $ g_b, t_b, bilo, bihi, bjlo, bjhi, ga_cdot_patch) end complex function nga_cdot_patch( $ g_a, t_a, alo, ahi, $ g_b, t_b, blo, bhi) implicit none integer g_a, alo, ahi integer g_b, blo, bhi character*1 t_a, t_b external ngai_cdot_patch nga_cdot_patch = (0.,0.) call ngai_cdot_patch( $ g_a, t_a, alo, ahi, $ g_b, t_b, blo, bhi, nga_cdot_patch) end double complex function ga_zdot_patch( $ g_a, t_a, ailo, aihi, ajlo, ajhi, $ g_b, t_b, bilo, bihi, bjlo, bjhi) implicit none integer g_a, ailo, aihi, ajlo, ajhi integer g_b, bilo, bihi, bjlo, bjhi character*1 t_a, t_b external gai_zdot_patch ga_zdot_patch = (0.,0.) call gai_zdot_patch( $ g_a, t_a, ailo, aihi, ajlo, ajhi, $ g_b, t_b, bilo, bihi, bjlo, bjhi, ga_zdot_patch) end double complex function nga_zdot_patch( $ g_a, t_a, alo, ahi, $ g_b, t_b, blo, bhi) implicit none integer g_a, alo, ahi integer g_b, blo, bhi character*1 t_a, t_b external ngai_zdot_patch nga_zdot_patch = (0.,0.) call ngai_zdot_patch( $ g_a, t_a, alo, ahi, $ g_b, t_b, blo, bhi, nga_zdot_patch) end ga-5-3/global/src/diag.fh0000640005473000001440000000113206761041417014051 0ustar d3n000usersc c limit number of processors active in diagonalization according to c problem size: c - first group are MPPs c - second group are (multiprocessor) workstations c #if defined(KSR)||defined(CRAY_T3D)||defined(NX)||defined(SP1)||defined(SP)||defined(LAPI) # define SIZE1 200 # define SIZE2 400 # define SIZE3 800 # define SIZE4 2000 # define PROC1 4 # define PROC2 16 # define PROC3 64 # define PROC4 256 #else # define SIZE1 400 # define SIZE2 800 # define SIZE3 1200 # define SIZE4 2000 # define PROC1 4 # define PROC2 8 # define PROC3 12 # define PROC4 16 #endif ga-5-3/global/src/scalapack.fh0000640005473000001440000000113211251533550015061 0ustar d3n000users#ifdef SCALAPACK_I8 #define INTGR4 integer*8 #else #define INTGR4 integer*4 #endif INTGR4 iam, nnodes,nprow,npcol, myrow, mycol, iSLctxt, A maxproc, iSLctxt2,nprow2,npcol2, myrow2, mycol2 logical init,init2, init3, init4 common /SLface/ init, init2, init3, init4, * iam, nnodes, nprow,npcol, myrow, mycol, * iSLctxt,iSLctxt2, * maxproc,nprow2,npcol2, myrow2, mycol2 #ifdef LINUX_DBL_UNDERSCORE #define blacs_pinfo blacs_pinfo_ #define blacs_get blacs_get_ #define blacs_gridinit blacs_gridinit_ #define blacs_gridinfo blacs_gridinfo_ #endif ga-5-3/global/src/ga_dgemmf.F0000640005473000001440000002137411274466357014666 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif #define xx_dgemm dgemm subroutine ga_dgemm(transa, transb, m, n, k, alpha, g_a, $ g_b, beta, g_c) C$Id: ga_dgemm.F,v 1.29 2000/11/04 01:46:31 d3h325 Exp $ implicit none Character*1 transa, transb Integer m, n, k Double precision alpha, beta Integer g_a, g_b, g_c #include "mafdecls.fh" #include "global.fh" c c GA_DGEMM performs one of the matrix-matrix operations: c C := alpha*op( A )*op( B ) + beta*C, c where op( X ) is one of c op( X ) = X or op( X ) = X`, c c alpha and beta are scalars, and A, B and C are matrices, with op( A ) c an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. c c On entry, TRANSA specifies the form of op( A ) to be used in c the matrix multiplication as follows: c transa = 'N' or 'n', op( A ) = A. c transa = 'T' or 't', op( A ) = A`. c c M - On entry, M specifies the number of rows of the matrix c op( A ) and of the matrix C. M must be at least zero. c N - On entry, N specifies the number of columns of the matrix c op( B ) and the number of columns of the matrix C. N must be c at least zero. c K - On entry, K specifies the number of columns of the matrix c op( A ) and the number of rows of the matrix op( B ). K must c be at least zero. c integer ilo, ihi, jlo, jhi, klo, khi, ichunk, jchunk, kchunk integer idim, jdim, kdim, adim, bdim, cdim, ijk, me, nproc integer l_a, k_a, l_b, k_b logical status C Logical Get_New_B ! Allow reuse of B patch when possible C Double Precision Chunk_cube Integer Min_Tasks, Max_Chunk, Mem_Avail integer l_mxn,k_mxn,i0,i1,j0,j1,ldc,adrc integer an1, an2, bn1, bn2, cn1, cn2 integer ilor, ihir,jlor,jhir,klor,khir,itipo,ijmax double precision t0,t1,gflop external MPI_Wtime double precision MPI_Wtime Parameter ( Min_Tasks = 10) ! Minimum acceptable tasks per node c C Set defaults -- platform dependent #ifdef GATIME t0=MPI_Wtime() #endif ichunk = 512 jchunk = 512 kchunk = 512 C me = ga_nodeid() nproc = ga_nnodes() c if(me.eq.0) c W write(6,*) ' transa, transb ', transa, transb C C Make an estimate of how large patches can be and still insure C enough tasks per processor that loads will be reasonably balanced. C C Patches per dimension are M/chunk, N/chunk, K/chunk so total tasks C is roughly (K*M*N)/(chunk**3). Assume all chunk sizes are the C same and solve for the one that provides the minimum acceptable C number of tasks. C C Find out how much memory we can grab. It will be used in C three chunks, and the result includes only the first one. C Mem_Avail = MA_Inquire_Avail( MT_DBL ) $ - 2 * MA_SizeOf_Overhead( MT_DBL ) Mem_Avail = 0.9 * Mem_Avail ! Do not use every last drop! c Call GA_IGOp(42, Mem_Avail, 1, 'min') C c if (beta .eq. 0.0d0) then call ga_zero(g_c) else call ga_scale(g_c, beta) endif c call ga_distribution(g_c, . ga_nodeid(), i0, i1, j0, j1) call ga_inquire(g_a, . itipo, an1, an2) call ga_inquire(g_b, . itipo, bn1, bn2) call ga_inquire(g_c, . itipo, cn1, cn2) if (i0.gt.0 .and. i0.le.i1) then ilo=i0 ihi=i1 idim = ihi - ilo + 1 jlo=j0 jhi=j1 jdim = jhi - jlo + 1 #if 0 write(6,'(I4,A,4I6)') ga_nodeid(),' IJ ',i0,i1,j0,j1 if(ga_nodeid().eq.0) call ffflush(6) if(ga_nodeid().eq.0) call ffflush(0) #endif ijmax=max(idim,jdim) KChunk = Int((DBLE(Mem_Avail/(2*ijmax)))) kchunk=min(kchunk,ijmax) status = .true. status = ma_push_get(MT_DBL, idim*kchunk, 'ga_dgemm:a', l_a,k_a) $ .and. status status = ma_push_get(MT_DBL, kchunk*jdim, 'ga_dgemm:b', l_b,k_b) $ .and. status if (.not. status) call ga_error('ga_dgemm: insufficent memory?', A idim*kchunk+kchunk*jdim) call ga_access(g_c, i0, i1, j0, j1, adrc, ldc) ijk = 0 do klo = 1, k, kchunk khi = min(k, klo+kchunk-1) kdim = khi - klo + 1 C C Each pass through the outer two loops means we need a C different patch of B. C Get_New_B = .TRUE. C cdim = idim if (transa.eq.'n' .or. transa.eq.'N') then ilor=min(an1,ilo) ihir=min(an1,ihi) klor=min(an2,klo) khir=min(an2,khi) kdim=khir-klor+1 idim=ihir-ilor+1 adim = idim cdim = idim call ga_get(g_a, ilor, ihir, klor, khir, $ dbl_mb(k_a), adim) else klor=min(an1,klo) khir=min(an1,khi) ilor=min(an2,ilo) ihir=min(an2,ihi) kdim=khir-klor+1 idim=ihir-ilor+1 adim = kdim cdim=idim call ga_get(g_a, klor, khir, ilor, ihir, $ dbl_mb(k_a), adim) endif C C Avoid rereading B if it is the same patch as last time. C If ( Get_New_B ) then if (transb.eq.'n' .or. transb.eq.'N') then klor=min(bn1,klo) khir=min(bn1,khi) jlor=min(bn2,jlo) jhir=min(bn2,jhi) kdim=khir-klor+1 idim=ihir-ilor+1 bdim = kdim call ga_get(g_b, klor, khir, jlor, jhir, $ dbl_mb(k_b), bdim) else jlor=min(bn1,jlo) jhir=min(bn1,jhi) klor=min(bn2,klo) khir=min(bn2,khi) kdim=khir-klor+1 jdim=jhir-jlor+1 bdim = jdim call ga_get(g_b, jlor, jhir, klor, khir, $ dbl_mb(k_b), bdim) endif Get_New_B = .FALSE. ! Until J or K change again EndIf C call xx_dgemm(transa, transb, idim, jdim, kdim, $ alpha, dbl_mb(k_a), adim, dbl_mb(k_b), bdim, $ 1.0d0, dbl_mb(adrc), cdim) enddo status = ma_chop_stack(l_a) if (.not. status)call ga_error('ga_dgemm: pop of stack failed', 1) endif call ga_release_update(g_c, i0, i1, j0, j1) call ga_sync() #ifdef GATIME if(ga_nodeid().eq.0) then call ffflush(6) t1=MPI_Wtime()-t0 gflop=2d0*n*m*k/(t1*1d9) write(6,'(I4,A,3F14.6)') G ga_nodeid(),' dgemm done in ',t1, , gflop,gflop/ga_nnodes() endif #endif c end subroutine lga_acc(out, dim1,dim2, I ilo, ihi, jlo, jhi, buf, $ ld, alpha) implicit none integer dim1,dim2 integer ilo, ihi, jlo, jhi,ld integer i,j double precision alpha double precision out(1:dim1,1:dim2) double precision buf(1:ld, 1:*) do j=jlo,jhi do i=ilo,ihi out(i, j) = out(i, j) + + alpha*buf(i-ilo+1, j-jlo+1) enddo enddo return end subroutine lga_accbrd(g_c,m,n,out) implicit none #include "global.fh" #include "mafdecls.fh" integer m,n double precision out(1:m,1:n) integer g_c c integer ilo,ihi,jlo,jhi,numi,numj,k_in,l_in,i,j logical status c call ga_distribution(g_c, . ga_nodeid(), ilo, ihi, jlo, jhi) if (ilo.gt.0 .and. ilo.le.ihi) then numi = ihi-ilo+1 numj = jhi-jlo+1 if (numi.gt.0 .and. numj.gt.0) then if (.not.MA_Push_Get(MT_Dbl,numi*numj,'MxN',l_in,k_in)) & call ga_error('dft_scf: cannot allocate eval',0) call ga_get(g_c,ilo,ihi,jlo,jhi, . dbl_mb(k_in),numi) do j=jlo,jhi do i=ilo,ihi call daxpy(numi,1d0,dbl_mb(k_in+(j-jlo)*numi),1, 1 out,1) enddo enddo call ga_put(g_c,ilo,ihi,jlo,jhi, . out(ilo,jlo),m) status = ma_pop_stack(l_in) if (.not. status)call ga_error('gad: pop of stack failed', 3 numi*numj) endif endif return end ga-5-3/global/src/rsg.f0000640005473000001440000013162110102133470013560 0ustar d3n000usersc $Id: rsg.f,v 1.7 2004-07-29 08:37:12 manoj Exp $ subroutine rsg(nm,n,a,b,w,matz,z,fv1,fv2,ierr) c integer n,nm,ierr,matz double precision a(nm,n),b(nm,n),w(n),z(nm,n),fv1(n),fv2(n) c c this subroutine calls the recommended sequence of c subroutines from the eigensystem subroutine package (eispack) c to find the eigenvalues and eigenvectors (if desired) c for the real symmetric generalized eigenproblem ax = (lambda)bx. c c on input c c nm must be set to the row dimension of the two-dimensional c array parameters as declared in the calling program c dimension statement. c c n is the order of the matrices a and b. c c a contains a real symmetric matrix. c c b contains a positive definite real symmetric matrix. c c matz is an integer variable set equal to zero if c only eigenvalues are desired. otherwise it is set to c any non-zero integer for both eigenvalues and eigenvectors. c c on output c c w contains the eigenvalues in ascending order. c c z contains the eigenvectors if matz is not zero. c c ierr is an integer output variable set equal to an error c completion code described in the documentation for tqlrat c and tql2. the normal completion code is zero. c c fv1 and fv2 are temporary storage arrays. c c questions and comments should be directed to burton s. garbow, c mathematics and computer science div, argonne national laboratory c c this version dated august 1983. c c ------------------------------------------------------------------ c if (n .le. nm) go to 10 ierr = 10 * n go to 50 c 10 call ga_rrreduc(nm,n,a,b,fv2,ierr) if (ierr .ne. 0) go to 50 if (matz .ne. 0) go to 20 c .......... find eigenvalues only .......... call ga_tttred1(nm,n,a,w,fv1,fv2) call ga_tttqlrat(n,w,fv2,ierr) go to 50 c .......... find both eigenvalues and eigenvectors .......... 20 call ga_tttred2(nm,n,a,w,fv1,z) call ga_tttql2(nm,n,w,fv1,z,ierr) if (ierr .ne. 0) go to 50 call ga_rrrebak(nm,n,b,fv2,n,z) 50 return end subroutine ga_tttql2(nm,n,d,e,z,ierr) c integer i,j,k,l,m,n,ii,l1,l2,nm,mml,ierr double precision d(n),e(n),z(nm,n) double precision c,c2,c3,dl1,el1,f,g,h,p,r,s,s2,tst1,tst2,pythag c c this subroutine is a translation of the algol procedure tttql2, c num. math. 11, 293-306(1968) by bowdler, martin, reinsch, and c wilkinson. c handbook for auto. comp., vol.ii-linear algebra, 227-240(1971). c c this subroutine finds the eigenvalues and eigenvectors c of a symmetric tridiagonal matrix by the ql method. c the eigenvectors of a full symmetric matrix can also c be found if tttred2 has been used to rrreduce this c full matrix to tridiagonal form. c c on input c c nm must be set to the row dimension of two-dimensional c array parameters as declared in the calling program c dimension statement. c c n is the order of the matrix. c c d contains the diagonal elements of the input matrix. c c e contains the subdiagonal elements of the input matrix c in its last n-1 positions. e(1) is arbitrary. c c z contains the transformation matrix produced in the c rrreduction by tttred2, if performed. if the eigenvectors c of the tridiagonal matrix are desired, z must contain c the identity matrix. c c on output c c d contains the eigenvalues in ascending order. if an c error exit is made, the eigenvalues are correct but c unordered for indices 1,2,...,ierr-1. c c e has been destroyed. c c z contains orthonormal eigenvectors of the symmetric c tridiagonal (or full) matrix. if an error exit is made, c z contains the eigenvectors associated with the stored c eigenvalues. c c ierr is set to c zero for normal return, c j if the j-th eigenvalue has not been c determined after 30 iterations. c c calls pythag for dsqrt(a*a + b*b) . c c questions and comments should be directed to burton s. garbow, c mathematics and computer science div, argonne national laboratory c c this version dated august 1983. c c ------------------------------------------------------------------ c ierr = 0 if (n .eq. 1) go to 1001 c do 100 i = 2, n 100 e(i-1) = e(i) c f = 0.0d0 tst1 = 0.0d0 e(n) = 0.0d0 c do 240 l = 1, n j = 0 h = dabs(d(l)) + dabs(e(l)) if (tst1 .lt. h) tst1 = h c .......... look for small sub-diagonal element .......... do 110 m = l, n tst2 = tst1 + dabs(e(m)) if (tst2 .eq. tst1) go to 120 c .......... e(n) is always zero, so there is no exit c through the bottom of the loop .......... 110 continue c 120 if (m .eq. l) go to 220 130 if (j .eq. 30) go to 1000 j = j + 1 c .......... form shift .......... l1 = l + 1 l2 = l1 + 1 g = d(l) p = (d(l1) - g) / (2.0d0 * e(l)) r = pythag(p,1.0d0) d(l) = e(l) / (p + dsign(r,p)) d(l1) = e(l) * (p + dsign(r,p)) dl1 = d(l1) h = g - d(l) if (l2 .gt. n) go to 145 c do 140 i = l2, n 140 d(i) = d(i) - h c 145 f = f + h c .......... ql transformation .......... p = d(m) c = 1.0d0 c2 = c el1 = e(l1) s = 0.0d0 mml = m - l c .......... for i=m-1 step -1 until l do -- .......... do 200 ii = 1, mml c3 = c2 c2 = c s2 = s i = m - ii g = c * e(i) h = c * p r = pythag(p,e(i)) e(i+1) = s * r s = e(i) / r c = p / r p = c * d(i) - s * g d(i+1) = h + s * (c * g + s * d(i)) c .......... form vector .......... do 180 k = 1, n h = z(k,i+1) z(k,i+1) = s * z(k,i) + c * h z(k,i) = c * z(k,i) - s * h 180 continue c 200 continue c p = -s * s2 * c3 * el1 * e(l) / dl1 e(l) = s * p d(l) = c * p tst2 = tst1 + dabs(e(l)) if (tst2 .gt. tst1) go to 130 220 d(l) = d(l) + f 240 continue c .......... order eigenvalues and eigenvectors .......... do 300 ii = 2, n i = ii - 1 k = i p = d(i) c do 260 j = ii, n if (d(j) .ge. p) go to 260 k = j p = d(j) 260 continue c if (k .eq. i) go to 300 d(k) = d(i) d(i) = p c do 280 j = 1, n p = z(j,i) z(j,i) = z(j,k) z(j,k) = p 280 continue c 300 continue c go to 1001 c .......... set error -- no convergence to an c eigenvalue after 30 iterations .......... 1000 ierr = l 1001 return end subroutine ga_tttqlrat(n,d,e2,ierr) c integer i,j,l,m,n,ii,l1,mml,ierr double precision d(n),e2(n) double precision b,c,f,g,h,p,r,s,t,epslon,pythag c c this subroutine is a translation of the algol procedure tttqlrat, c algorithm 464, comm. acm 16, 689(1973) by reinsch. c c this subroutine finds the eigenvalues of a symmetric c tridiagonal matrix by the rational ql method. c c on input c c n is the order of the matrix. c c d contains the diagonal elements of the input matrix. c c e2 contains the squares of the subdiagonal elements of the c input matrix in its last n-1 positions. e2(1) is arbitrary. c c on output c c d contains the eigenvalues in ascending order. if an c error exit is made, the eigenvalues are correct and c ordered for indices 1,2,...ierr-1, but may not be c the smallest eigenvalues. c c e2 has been destroyed. c c ierr is set to c zero for normal return, c j if the j-th eigenvalue has not been c determined after 30 iterations. c c calls pythag for dsqrt(a*a + b*b) . c c questions and comments should be directed to burton s. garbow, c mathematics and computer science div, argonne national laboratory c c this version dated august 1987. c modified by c. moler to fix underflow/overflow difficulties, c especially on the vax and other machines where epslon(1.0d0)**2 c nearly underflows. see the loop involving statement 102 and c the two statements just before statement 200. c c ------------------------------------------------------------------ c ierr = 0 if (n .eq. 1) go to 1001 c do 100 i = 2, n 100 e2(i-1) = e2(i) c f = 0.0d0 t = 0.0d0 e2(n) = 0.0d0 c do 290 l = 1, n j = 0 h = dabs(d(l)) + dsqrt(e2(l)) if (t .gt. h) go to 105 t = h b = epslon(t) c = b * b if (c .ne. 0.0d0) go to 105 c spliting tolerance underflowed. look for larger value. do 102 i = l, n h = dabs(d(i)) + dsqrt(e2(i)) if (h .gt. t) t = h 102 continue b = epslon(t) c = b * b c .......... look for small squared sub-diagonal element .......... 105 do 110 m = l, n if (e2(m) .le. c) go to 120 c .......... e2(n) is always zero, so there is no exit c through the bottom of the loop .......... 110 continue c 120 if (m .eq. l) go to 210 130 if (j .eq. 30) go to 1000 j = j + 1 c .......... form shift .......... l1 = l + 1 s = dsqrt(e2(l)) g = d(l) p = (d(l1) - g) / (2.0d0 * s) r = pythag(p,1.0d0) d(l) = s / (p + dsign(r,p)) h = g - d(l) c do 140 i = l1, n 140 d(i) = d(i) - h c f = f + h c .......... rational ql transformation .......... g = d(m) if (g .eq. 0.0d0) g = b h = g s = 0.0d0 mml = m - l c .......... for i=m-1 step -1 until l do -- .......... do 200 ii = 1, mml i = m - ii p = g * h r = p + e2(i) e2(i+1) = s * r s = e2(i) / r d(i+1) = h + s * (h + d(i)) g = d(i) - e2(i) / g c avoid division by zero on next pass if (g .eq. 0.0d0) g = epslon(d(i)) h = g * (p / r) 200 continue c e2(l) = s * g d(l) = h c .......... guard against underflow in convergence test .......... if (h .eq. 0.0d0) go to 210 if (dabs(e2(l)) .le. dabs(c/h)) go to 210 e2(l) = h * e2(l) if (e2(l) .ne. 0.0d0) go to 130 210 p = d(l) + f c .......... order eigenvalues .......... if (l .eq. 1) go to 250 c .......... for i=l step -1 until 2 do -- .......... do 230 ii = 2, l i = l + 2 - ii if (p .ge. d(i-1)) go to 270 d(i) = d(i-1) 230 continue c 250 i = 1 270 d(i) = p 290 continue c go to 1001 c .......... set error -- no convergence to an c eigenvalue after 30 iterations .......... 1000 ierr = l 1001 return end subroutine ga_tttred1(nm,n,a,d,e,e2) c integer i,j,k,l,n,ii,nm,jp1 double precision a(nm,n),d(n),e(n),e2(n) double precision f,g,h,scale c c this subroutine is a translation of the algol procedure tttred1, c num. math. 11, 181-195(1968) by martin, reinsch, and wilkinson. c handbook for auto. comp., vol.ii-linear algebra, 212-226(1971). c c this subroutine rrreduces a real symmetric matrix c to a symmetric tridiagonal matrix using c orthogonal similarity transformations. c c on input c c nm must be set to the row dimension of two-dimensional c array parameters as declared in the calling program c dimension statement. c c n is the order of the matrix. c c a contains the real symmetric input matrix. only the c lower triangle of the matrix need be supplied. c c on output c c a contains information about the orthogonal trans- c formations used in the rrreduction in its strict lower c triangle. the full upper triangle of a is unaltered. c c d contains the diagonal elements of the tridiagonal matrix. c c e contains the subdiagonal elements of the tridiagonal c matrix in its last n-1 positions. e(1) is set to zero. c c e2 contains the squares of the corresponding elements of e. c e2 may coincide with e if the squares are not needed. c c questions and comments should be directed to burton s. garbow, c mathematics and computer science div, argonne national laboratory c c this version dated august 1983. c c ------------------------------------------------------------------ c do 100 i = 1, n d(i) = a(n,i) a(n,i) = a(i,i) 100 continue c .......... for i=n step -1 until 1 do -- .......... do 300 ii = 1, n i = n + 1 - ii l = i - 1 h = 0.0d0 scale = 0.0d0 if (l .lt. 1) go to 130 c .......... scale row (algol tol then not needed) .......... do 120 k = 1, l 120 scale = scale + dabs(d(k)) c if (scale .ne. 0.0d0) go to 140 c do 125 j = 1, l d(j) = a(l,j) a(l,j) = a(i,j) a(i,j) = 0.0d0 125 continue c 130 e(i) = 0.0d0 e2(i) = 0.0d0 go to 300 c 140 do 150 k = 1, l d(k) = d(k) / scale h = h + d(k) * d(k) 150 continue c e2(i) = scale * scale * h f = d(l) g = -dsign(dsqrt(h),f) e(i) = scale * g h = h - f * g d(l) = f - g if (l .eq. 1) go to 285 c .......... form a*u .......... do 170 j = 1, l 170 e(j) = 0.0d0 c do 240 j = 1, l f = d(j) g = e(j) + a(j,j) * f jp1 = j + 1 if (l .lt. jp1) go to 220 c do 200 k = jp1, l g = g + a(k,j) * d(k) e(k) = e(k) + a(k,j) * f 200 continue c 220 e(j) = g 240 continue c .......... form p .......... f = 0.0d0 c do 245 j = 1, l e(j) = e(j) / h f = f + e(j) * d(j) 245 continue c h = f / (h + h) c .......... form q .......... do 250 j = 1, l 250 e(j) = e(j) - h * d(j) c .......... form rrreduced a .......... do 280 j = 1, l f = d(j) g = e(j) c do 260 k = j, l 260 a(k,j) = a(k,j) - f * e(k) - g * d(k) c 280 continue c 285 do 290 j = 1, l f = d(j) d(j) = a(l,j) a(l,j) = a(i,j) a(i,j) = f * scale 290 continue c 300 continue c return end subroutine ga_tttred2(nm,n,a,d,e,z) c integer i,j,k,l,n,ii,nm,jp1 double precision a(nm,n),d(n),e(n),z(nm,n) double precision f,g,h,hh,scale c c this subroutine is a translation of the algol procedure tttred2, c num. math. 11, 181-195(1968) by martin, reinsch, and wilkinson. c handbook for auto. comp., vol.ii-linear algebra, 212-226(1971). c c this subroutine rrreduces a real symmetric matrix to a c symmetric tridiagonal matrix using and accumulating c orthogonal similarity transformations. c c on input c c nm must be set to the row dimension of two-dimensional c array parameters as declared in the calling program c dimension statement. c c n is the order of the matrix. c c a contains the real symmetric input matrix. only the c lower triangle of the matrix need be supplied. c c on output c c d contains the diagonal elements of the tridiagonal matrix. c c e contains the subdiagonal elements of the tridiagonal c matrix in its last n-1 positions. e(1) is set to zero. c c z contains the orthogonal transformation matrix c produced in the rrreduction. c c a and z may coincide. if distinct, a is unaltered. c c questions and comments should be directed to burton s. garbow, c mathematics and computer science div, argonne national laboratory c c this version dated august 1983. c c ------------------------------------------------------------------ c do 100 i = 1, n c do 80 j = i, n 80 z(j,i) = a(j,i) c d(i) = a(n,i) 100 continue c if (n .eq. 1) go to 510 c .......... for i=n step -1 until 2 do -- .......... do 300 ii = 2, n i = n + 2 - ii l = i - 1 h = 0.0d0 scale = 0.0d0 if (l .lt. 2) go to 130 c .......... scale row (algol tol then not needed) .......... do 120 k = 1, l 120 scale = scale + dabs(d(k)) c if (scale .ne. 0.0d0) go to 140 130 e(i) = d(l) c do 135 j = 1, l d(j) = z(l,j) z(i,j) = 0.0d0 z(j,i) = 0.0d0 135 continue c go to 290 c 140 do 150 k = 1, l d(k) = d(k) / scale h = h + d(k) * d(k) 150 continue c f = d(l) g = -dsign(dsqrt(h),f) e(i) = scale * g h = h - f * g d(l) = f - g c .......... form a*u .......... do 170 j = 1, l 170 e(j) = 0.0d0 c do 240 j = 1, l f = d(j) z(j,i) = f g = e(j) + z(j,j) * f jp1 = j + 1 if (l .lt. jp1) go to 220 c do 200 k = jp1, l g = g + z(k,j) * d(k) e(k) = e(k) + z(k,j) * f 200 continue c 220 e(j) = g 240 continue c .......... form p .......... f = 0.0d0 c do 245 j = 1, l e(j) = e(j) / h f = f + e(j) * d(j) 245 continue c hh = f / (h + h) c .......... form q .......... do 250 j = 1, l 250 e(j) = e(j) - hh * d(j) c .......... form rrreduced a .......... do 280 j = 1, l f = d(j) g = e(j) c do 260 k = j, l 260 z(k,j) = z(k,j) - f * e(k) - g * d(k) c d(j) = z(l,j) z(i,j) = 0.0d0 280 continue c 290 d(i) = h 300 continue c .......... accumulation of transformation matrices .......... do 500 i = 2, n l = i - 1 z(n,l) = z(l,l) z(l,l) = 1.0d0 h = d(i) if (h .eq. 0.0d0) go to 380 c do 330 k = 1, l 330 d(k) = z(k,i) / h c do 360 j = 1, l g = 0.0d0 c do 340 k = 1, l 340 g = g + z(k,i) * z(k,j) c do 360 k = 1, l z(k,j) = z(k,j) - g * d(k) 360 continue c 380 do 400 k = 1, l 400 z(k,i) = 0.0d0 c 500 continue c 510 do 520 i = 1, n d(i) = z(n,i) z(n,i) = 0.0d0 520 continue c z(n,n) = 1.0d0 e(1) = 0.0d0 return end double precision function epslon (x) double precision x c c estimate unit roundoff in quantities of size x. c double precision a,b,c,eps c c this program should function properly on all systems c satisfying the following two assumptions, c 1. the base used in representing floating point c numbers is not a power of three. c 2. the quantity a in statement 10 is represented to c the accuracy used in floating point variables c that are stored in memory. c the statement number 10 and the go to 10 are intended to c force optimizing compilers to generate code satisfying c assumption 2. c under these assumptions, it should be true that, c a is not exactly equal to four-thirds, c b has a zero for its last bit or digit, c c is not exactly equal to one, c eps measures the separation of 1.0 from c the next larger floating point number. c the developers of eispack would appreciate being informed c about any systems where these assumptions do not hold. c c this version dated 4/6/83. c a = 4.0d0/3.0d0 10 b = a - 1.0d0 c = b + b + b eps = dabs(c-1.0d0) if (eps .eq. 0.0d0) go to 10 epslon = eps*dabs(x) return end double precision function pythag(a,b) double precision a,b c c finds dsqrt(a**2+b**2) without overflow or destructive underflow c double precision p,r,s,t,u p = dmax1(dabs(a),dabs(b)) if (p .eq. 0.0d0) go to 20 r = (dmin1(dabs(a),dabs(b))/p)**2 10 continue t = 4.0d0 + r if (t .eq. 4.0d0) go to 20 s = r/t u = 1.0d0 + 2.0d0*s p = u*p r = (s/u)**2 * r go to 10 20 pythag = p return end subroutine ga_rrrebak(nm,n,b,dl,m,z) c integer i,j,k,m,n,i1,ii,nm double precision b(nm,n),dl(n),z(nm,m) double precision x c c this subroutine is a translation of the algol procedure rrrebaka, c num. math. 11, 99-110(1968) by martin and wilkinson. c handbook for auto. comp., vol.ii-linear algebra, 303-314(1971). c c this subroutine forms the eigenvectors of a generalized c symmetric eigensystem by back transforming those of the c derived symmetric matrix determined by rrreduc. c c on input c c nm must be set to the row dimension of two-dimensional c array parameters as declared in the calling program c dimension statement. c c n is the order of the matrix system. c c b contains information about the similarity transformation c (cholesky decomposition) used in the rrreduction by rrreduc c in its strict lower triangle. c c dl contains further information about the transformation. c c m is the number of eigenvectors to be back transformed. c c z contains the eigenvectors to be back transformed c in its first m columns. c c on output c c z contains the transformed eigenvectors c in its first m columns. c c questions and comments should be directed to burton s. garbow, c mathematics and computer science div, argonne national laboratory c c this version dated august 1983. c c ------------------------------------------------------------------ c if (m .eq. 0) go to 200 c do 100 j = 1, m c .......... for i=n step -1 until 1 do -- .......... do 100 ii = 1, n i = n + 1 - ii i1 = i + 1 x = z(i,j) if (i .eq. n) go to 80 c do 60 k = i1, n 60 x = x - b(k,i) * z(k,j) c 80 z(i,j) = x / dl(i) 100 continue c 200 return end subroutine ga_rrreduc(nm,n,a,b,dl,ierr) c integer i,j,k,n,i1,j1,nm,nn,ierr double precision a(nm,n),b(nm,n),dl(n) double precision x,y c c this subroutine is a translation of the algol procedure rrreduc1, c num. math. 11, 99-110(1968) by martin and wilkinson. c handbook for auto. comp., vol.ii-linear algebra, 303-314(1971). c c this subroutine rrreduces the generalized symmetric eigenproblem c ax=(lambda)bx, where b is positive definite, to the standard c symmetric eigenproblem using the cholesky factorization of b. c c on input c c nm must be set to the row dimension of two-dimensional c array parameters as declared in the calling program c dimension statement. c c n is the order of the matrices a and b. if the cholesky c factor l of b is already available, n should be prefixed c with a minus sign. c c a and b contain the real symmetric input matrices. only the c full upper triangles of the matrices need be supplied. if c n is negative, the strict lower triangle of b contains, c instead, the strict lower triangle of its cholesky factor l. c c dl contains, if n is negative, the diagonal elements of l. c c on output c c a contains in its full lower triangle the full lower triangle c of the symmetric matrix derived from the rrreduction to the c standard form. the strict upper triangle of a is unaltered. c c b contains in its strict lower triangle the strict lower c triangle of its cholesky factor l. the full upper c triangle of b is unaltered. c c dl contains the diagonal elements of l. c c ierr is set to c zero for normal return, c 7*n+1 if b is not positive definite. c c questions and comments should be directed to burton s. garbow, c mathematics and computer science div, argonne national laboratory c c this version dated august 1983. c c ------------------------------------------------------------------ c ierr = 0 nn = iabs(n) if (n .lt. 0) go to 100 c .......... form l in the arrays b and dl .......... do 80 i = 1, n i1 = i - 1 c do 80 j = i, n x = b(i,j) if (i .eq. 1) go to 40 c do 20 k = 1, i1 20 x = x - b(i,k) * b(j,k) c 40 if (j .ne. i) go to 60 if (x .le. 0.0d0) go to 1000 y = dsqrt(x) dl(i) = y go to 80 60 b(j,i) = x / y 80 continue c .......... form the transpose of the upper triangle of inv(l)*a c in the lower triangle of the array a .......... 100 do 200 i = 1, nn i1 = i - 1 y = dl(i) c do 200 j = i, nn x = a(i,j) if (i .eq. 1) go to 180 c do 160 k = 1, i1 160 x = x - b(i,k) * a(j,k) c 180 a(j,i) = x / y 200 continue c .......... pre-multiply by inv(l) and overwrite .......... do 300 j = 1, nn j1 = j - 1 c do 300 i = j, nn x = a(i,j) if (i .eq. j) go to 240 i1 = i - 1 c do 220 k = j, i1 220 x = x - a(k,j) * b(i,k) c 240 if (j .eq. 1) go to 280 c do 260 k = 1, j1 260 x = x - a(j,k) * b(i,k) c 280 a(i,j) = x / dl(i) 300 continue c go to 1001 c .......... set error -- b is not positive definite .......... 1000 ierr = 7 * n + 1 1001 return end c $Id: rsg.f,v 1.7 2004-07-29 08:37:12 manoj Exp $ c c JN: the original file has been slightly modified c JN: renamed pythag to pythag000 to avoid multiply defined symbol also in rsg.f c subroutine rs(nm,n,a,w,matz,z,fv1,fv2,ierr) c integer n,nm,ierr,matz double precision a(nm,n),w(n),z(nm,n),fv1(n),fv2(n) c c this subroutine calls the recommended sequence of c subroutines from the eigensystem subroutine package (eispack) c to find the eigenvalues and eigenvectors (if desired) c of a real symmetric matrix. c c on input c c nm must be set to the row dimension of the two-dimensional c array parameters as declared in the calling program c dimension statement. c c n is the order of the matrix a. c c a contains the real symmetric matrix. c c matz is an integer variable set equal to zero if c only eigenvalues are desired. otherwise it is set to c any non-zero integer for both eigenvalues and eigenvectors. c c on output c c w contains the eigenvalues in ascending order. c c z contains the eigenvectors if matz is not zero. c c ierr is an integer output variable set equal to an error c completion code described in the documentation for tqlrat c and tql2. the normal completion code is zero. c c fv1 and fv2 are temporary storage arrays. c c questions and comments should be directed to burton s. garbow, c mathematics and computer science div, argonne national laboratory c c this version dated august 1983. c c ------------------------------------------------------------------ c if (n .le. nm) go to 10 ierr = 10 * n go to 50 c 10 if (matz .ne. 0) go to 20 c .......... find eigenvalues only .......... call ga_tred1(nm,n,a,w,fv1,fv2) * tqlrat encounters catastrophic underflow on the Vax * call tqlrat(n,w,fv2,ierr) call ga_tql1(n,w,fv1,ierr) go to 50 c .......... find both eigenvalues and eigenvectors .......... 20 call ga_tred2(nm,n,a,w,fv1,z) call ga_tql2(nm,n,w,fv1,z,ierr) 50 return end subroutine ga_tql2(nm,n,d,e,z,ierr) c integer i,j,k,l,m,n,ii,l1,l2,nm,mml,ierr double precision d(n),e(n),z(nm,n) double precision c,c2,c3,dl1,el1,f,g,h,p,r,s,s2,tst1,tst2,pythag c c this subroutine is a translation of the algol procedure tql2, c num. math. 11, 293-306(1968) by bowdler, martin, reinsch, and c wilkinson. c handbook for auto. comp., vol.ii-linear algebra, 227-240(1971). c c this subroutine finds the eigenvalues and eigenvectors c of a symmetric tridiagonal matrix by the ql method. c the eigenvectors of a full symmetric matrix can also c be found if tred2 has been used to reduce this c full matrix to tridiagonal form. c c on input c c nm must be set to the row dimension of two-dimensional c array parameters as declared in the calling program c dimension statement. c c n is the order of the matrix. c c d contains the diagonal elements of the input matrix. c c e contains the subdiagonal elements of the input matrix c in its last n-1 positions. e(1) is arbitrary. c c z contains the transformation matrix produced in the c reduction by tred2, if performed. if the eigenvectors c of the tridiagonal matrix are desired, z must contain c the identity matrix. c c on output c c d contains the eigenvalues in ascending order. if an c error exit is made, the eigenvalues are correct but c unordered for indices 1,2,...,ierr-1. c c e has been destroyed. c c z contains orthonormal eigenvectors of the symmetric c tridiagonal (or full) matrix. if an error exit is made, c z contains the eigenvectors associated with the stored c eigenvalues. c c ierr is set to c zero for normal return, c j if the j-th eigenvalue has not been c determined after 30 iterations. c c calls pythag for dsqrt(a*a + b*b) . c c questions and comments should be directed to burton s. garbow, c mathematics and computer science div, argonne national laboratory c c this version dated august 1983. c c ------------------------------------------------------------------ c ierr = 0 if (n .eq. 1) go to 1001 c do 100 i = 2, n 100 e(i-1) = e(i) c f = 0.0d0 tst1 = 0.0d0 e(n) = 0.0d0 c do 240 l = 1, n j = 0 h = dabs(d(l)) + dabs(e(l)) if (tst1 .lt. h) tst1 = h c .......... look for small sub-diagonal element .......... do 110 m = l, n tst2 = tst1 + dabs(e(m)) if (tst2 .eq. tst1) go to 120 c .......... e(n) is always zero, so there is no exit c through the bottom of the loop .......... 110 continue c 120 if (m .eq. l) go to 220 130 if (j .eq. 30) go to 1000 j = j + 1 c .......... form shift .......... l1 = l + 1 l2 = l1 + 1 g = d(l) p = (d(l1) - g) / (2.0d0 * e(l)) r = pythag(p,1.0d0) d(l) = e(l) / (p + dsign(r,p)) d(l1) = e(l) * (p + dsign(r,p)) dl1 = d(l1) h = g - d(l) if (l2 .gt. n) go to 145 c do 140 i = l2, n 140 d(i) = d(i) - h c 145 f = f + h c .......... ql transformation .......... p = d(m) c = 1.0d0 c2 = c el1 = e(l1) s = 0.0d0 mml = m - l c .......... for i=m-1 step -1 until l do -- .......... do 200 ii = 1, mml c3 = c2 c2 = c s2 = s i = m - ii g = c * e(i) h = c * p r = pythag(p,e(i)) e(i+1) = s * r s = e(i) / r c = p / r p = c * d(i) - s * g d(i+1) = h + s * (c * g + s * d(i)) c .......... form vector .......... do 180 k = 1, n h = z(k,i+1) z(k,i+1) = s * z(k,i) + c * h z(k,i) = c * z(k,i) - s * h 180 continue c 200 continue c p = -s * s2 * c3 * el1 * e(l) / dl1 e(l) = s * p d(l) = c * p tst2 = tst1 + dabs(e(l)) if (tst2 .gt. tst1) go to 130 220 d(l) = d(l) + f 240 continue c .......... order eigenvalues and eigenvectors .......... do 300 ii = 2, n i = ii - 1 k = i p = d(i) c do 260 j = ii, n if (d(j) .ge. p) go to 260 k = j p = d(j) 260 continue c if (k .eq. i) go to 300 d(k) = d(i) d(i) = p c do 280 j = 1, n p = z(j,i) z(j,i) = z(j,k) z(j,k) = p 280 continue c 300 continue c go to 1001 c .......... set error -- no convergence to an c eigenvalue after 30 iterations .......... 1000 ierr = l 1001 return end subroutine ga_tred2(nm,n,a,d,e,z) c integer i,j,k,l,n,ii,nm,jp1 double precision a(nm,n),d(n),e(n),z(nm,n) double precision f,g,h,hh,scale c c this subroutine is a translation of the algol procedure tred2, c num. math. 11, 181-195(1968) by martin, reinsch, and wilkinson. c handbook for auto. comp., vol.ii-linear algebra, 212-226(1971). c c this subroutine reduces a real symmetric matrix to a c symmetric tridiagonal matrix using and accumulating c orthogonal similarity transformations. c c on input c c nm must be set to the row dimension of two-dimensional c array parameters as declared in the calling program c dimension statement. c c n is the order of the matrix. c c a contains the real symmetric input matrix. only the c lower triangle of the matrix need be supplied. c c on output c c d contains the diagonal elements of the tridiagonal matrix. c c e contains the subdiagonal elements of the tridiagonal c matrix in its last n-1 positions. e(1) is set to zero. c c z contains the orthogonal transformation matrix c produced in the reduction. c c a and z may coincide. if distinct, a is unaltered. c c questions and comments should be directed to burton s. garbow, c mathematics and computer science div, argonne national laboratory c c this version dated august 1983. c c ------------------------------------------------------------------ c do 100 i = 1, n c do 80 j = i, n 80 z(j,i) = a(j,i) c d(i) = a(n,i) 100 continue c if (n .eq. 1) go to 510 c .......... for i=n step -1 until 2 do -- .......... do 300 ii = 2, n i = n + 2 - ii l = i - 1 h = 0.0d0 scale = 0.0d0 if (l .lt. 2) go to 130 c .......... scale row (algol tol then not needed) .......... do 120 k = 1, l 120 scale = scale + dabs(d(k)) c if (scale .ne. 0.0d0) go to 140 130 e(i) = d(l) c do 135 j = 1, l d(j) = z(l,j) z(i,j) = 0.0d0 z(j,i) = 0.0d0 135 continue c go to 290 c 140 do 150 k = 1, l d(k) = d(k) / scale h = h + d(k) * d(k) 150 continue c f = d(l) g = -dsign(dsqrt(h),f) e(i) = scale * g h = h - f * g d(l) = f - g c .......... form a*u .......... do 170 j = 1, l 170 e(j) = 0.0d0 c do 240 j = 1, l f = d(j) z(j,i) = f g = e(j) + z(j,j) * f jp1 = j + 1 if (l .lt. jp1) go to 220 c do 200 k = jp1, l g = g + z(k,j) * d(k) e(k) = e(k) + z(k,j) * f 200 continue c 220 e(j) = g 240 continue c .......... form p .......... f = 0.0d0 c do 245 j = 1, l e(j) = e(j) / h f = f + e(j) * d(j) 245 continue c hh = f / (h + h) c .......... form q .......... do 250 j = 1, l 250 e(j) = e(j) - hh * d(j) c .......... form reduced a .......... do 280 j = 1, l f = d(j) g = e(j) c do 260 k = j, l 260 z(k,j) = z(k,j) - f * e(k) - g * d(k) c d(j) = z(l,j) z(i,j) = 0.0d0 280 continue c 290 d(i) = h 300 continue c .......... accumulation of transformation matrices .......... do 500 i = 2, n l = i - 1 z(n,l) = z(l,l) z(l,l) = 1.0d0 h = d(i) if (h .eq. 0.0d0) go to 380 c do 330 k = 1, l 330 d(k) = z(k,i) / h c do 360 j = 1, l g = 0.0d0 c do 340 k = 1, l 340 g = g + z(k,i) * z(k,j) c do 360 k = 1, l z(k,j) = z(k,j) - g * d(k) 360 continue c 380 do 400 k = 1, l 400 z(k,i) = 0.0d0 c 500 continue c 510 do 520 i = 1, n d(i) = z(n,i) z(n,i) = 0.0d0 520 continue c z(n,n) = 1.0d0 e(1) = 0.0d0 return end subroutine ga_tql1(n,d,e,ierr) c integer i,j,l,m,n,ii,l1,l2,mml,ierr double precision d(n),e(n) double precision c,c2,c3,dl1,el1,f,g,h,p,r,s,s2,tst1,tst2,pythag c c this subroutine is a translation of the algol procedure tql1, c num. math. 11, 293-306(1968) by bowdler, martin, reinsch, and c wilkinson. c handbook for auto. comp., vol.ii-linear algebra, 227-240(1971). c c this subroutine finds the eigenvalues of a symmetric c tridiagonal matrix by the ql method. c c on input c c n is the order of the matrix. c c d contains the diagonal elements of the input matrix. c c e contains the subdiagonal elements of the input matrix c in its last n-1 positions. e(1) is arbitrary. c c on output c c d contains the eigenvalues in ascending order. if an c error exit is made, the eigenvalues are correct and c ordered for indices 1,2,...ierr-1, but may not be c the smallest eigenvalues. c c e has been destroyed. c c ierr is set to c zero for normal return, c j if the j-th eigenvalue has not been c determined after 30 iterations. c c calls pythag for dsqrt(a*a + b*b) . c c questions and comments should be directed to burton s. garbow, c mathematics and computer science div, argonne national laboratory c c this version dated august 1983. c c ------------------------------------------------------------------ c ierr = 0 if (n .eq. 1) go to 1001 c do 100 i = 2, n 100 e(i-1) = e(i) c f = 0.0d0 tst1 = 0.0d0 e(n) = 0.0d0 c do 290 l = 1, n j = 0 h = dabs(d(l)) + dabs(e(l)) if (tst1 .lt. h) tst1 = h c .......... look for small sub-diagonal element .......... do 110 m = l, n tst2 = tst1 + dabs(e(m)) if (tst2 .eq. tst1) go to 120 c .......... e(n) is always zero, so there is no exit c through the bottom of the loop .......... 110 continue c 120 if (m .eq. l) go to 210 130 if (j .eq. 30) go to 1000 j = j + 1 c .......... form shift .......... l1 = l + 1 l2 = l1 + 1 g = d(l) p = (d(l1) - g) / (2.0d0 * e(l)) r = pythag(p,1.0d0) d(l) = e(l) / (p + dsign(r,p)) d(l1) = e(l) * (p + dsign(r,p)) dl1 = d(l1) h = g - d(l) if (l2 .gt. n) go to 145 c do 140 i = l2, n 140 d(i) = d(i) - h c 145 f = f + h c .......... ql transformation .......... p = d(m) c = 1.0d0 c2 = c el1 = e(l1) s = 0.0d0 mml = m - l c .......... for i=m-1 step -1 until l do -- .......... do 200 ii = 1, mml c3 = c2 c2 = c s2 = s i = m - ii g = c * e(i) h = c * p r = pythag(p,e(i)) e(i+1) = s * r s = e(i) / r c = p / r p = c * d(i) - s * g d(i+1) = h + s * (c * g + s * d(i)) 200 continue c p = -s * s2 * c3 * el1 * e(l) / dl1 e(l) = s * p d(l) = c * p tst2 = tst1 + dabs(e(l)) if (tst2 .gt. tst1) go to 130 210 p = d(l) + f c .......... order eigenvalues .......... if (l .eq. 1) go to 250 c .......... for i=l step -1 until 2 do -- .......... do 230 ii = 2, l i = l + 2 - ii if (p .ge. d(i-1)) go to 270 d(i) = d(i-1) 230 continue c 250 i = 1 270 d(i) = p 290 continue c go to 1001 c .......... set error -- no convergence to an c eigenvalue after 30 iterations .......... 1000 ierr = l 1001 return end c JN: multiply defined in rsg.f double precision function pythag000(a,b) double precision a,b c c finds dsqrt(a**2+b**2) without overflow or destructive underflow c double precision p,r,s,t,u p = dmax1(dabs(a),dabs(b)) if (p .eq. 0.0d0) go to 20 r = (dmin1(dabs(a),dabs(b))/p)**2 10 continue t = 4.0d0 + r if (t .eq. 4.0d0) go to 20 s = r/t u = 1.0d0 + 2.0d0*s p = u*p r = (s/u)**2 * r go to 10 20 pythag000 = p return end subroutine ga_tred1(nm,n,a,d,e,e2) c integer i,j,k,l,n,ii,nm,jp1 double precision a(nm,n),d(n),e(n),e2(n) double precision f,g,h,scale c c this subroutine is a translation of the algol procedure tred1, c num. math. 11, 181-195(1968) by martin, reinsch, and wilkinson. c handbook for auto. comp., vol.ii-linear algebra, 212-226(1971). c c this subroutine reduces a real symmetric matrix c to a symmetric tridiagonal matrix using c orthogonal similarity transformations. c c on input c c nm must be set to the row dimension of two-dimensional c array parameters as declared in the calling program c dimension statement. c c n is the order of the matrix. c c a contains the real symmetric input matrix. only the c lower triangle of the matrix need be supplied. c c on output c c a contains information about the orthogonal trans- c formations used in the reduction in its strict lower c triangle. the full upper triangle of a is unaltered. c c d contains the diagonal elements of the tridiagonal matrix. c c e contains the subdiagonal elements of the tridiagonal c matrix in its last n-1 positions. e(1) is set to zero. c c e2 contains the squares of the corresponding elements of e. c e2 may coincide with e if the squares are not needed. c c questions and comments should be directed to burton s. garbow, c mathematics and computer science div, argonne national laboratory c c this version dated august 1983. c c ------------------------------------------------------------------ c do 100 i = 1, n d(i) = a(n,i) a(n,i) = a(i,i) 100 continue c .......... for i=n step -1 until 1 do -- .......... do 300 ii = 1, n i = n + 1 - ii l = i - 1 h = 0.0d0 scale = 0.0d0 if (l .lt. 1) go to 130 c .......... scale row (algol tol then not needed) .......... do 120 k = 1, l 120 scale = scale + dabs(d(k)) c if (scale .ne. 0.0d0) go to 140 c do 125 j = 1, l d(j) = a(l,j) a(l,j) = a(i,j) a(i,j) = 0.0d0 125 continue c 130 e(i) = 0.0d0 e2(i) = 0.0d0 go to 300 c 140 do 150 k = 1, l d(k) = d(k) / scale h = h + d(k) * d(k) 150 continue c e2(i) = scale * scale * h f = d(l) g = -dsign(dsqrt(h),f) e(i) = scale * g h = h - f * g d(l) = f - g if (l .eq. 1) go to 285 c .......... form a*u .......... do 170 j = 1, l 170 e(j) = 0.0d0 c do 240 j = 1, l f = d(j) g = e(j) + a(j,j) * f jp1 = j + 1 if (l .lt. jp1) go to 220 c do 200 k = jp1, l g = g + a(k,j) * d(k) e(k) = e(k) + a(k,j) * f 200 continue c 220 e(j) = g 240 continue c .......... form p .......... f = 0.0d0 c do 245 j = 1, l e(j) = e(j) / h f = f + e(j) * d(j) 245 continue c h = f / (h + h) c .......... form q .......... do 250 j = 1, l 250 e(j) = e(j) - h * d(j) c .......... form reduced a .......... do 280 j = 1, l f = d(j) g = e(j) c do 260 k = j, l 260 a(k,j) = a(k,j) - f * e(k) - g * d(k) c 280 continue c 285 do 290 j = 1, l f = d(j) d(j) = a(l,j) a(l,j) = a(i,j) a(i,j) = f * scale 290 continue c 300 continue c return end ga-5-3/global/src/sparse.c0000640005473000001440000011575611703062414014301 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRINGS_H # include #endif #include "abstract_ops.h" #include "globalp.h" #include "macdecls.h" #include "message.h" #include "ga-papi.h" #include "ga-wapi.h" /*\ sets values for specified array elements by enumerating with stride \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_patch_enum = pnga_patch_enum #endif void pnga_patch_enum(Integer g_a, Integer lo, Integer hi, void* start, void* stride) { Integer dims[1],lop,hip; Integer ndim, type, me, off; pnga_sync(); me = pnga_nodeid(); pnga_check_handle(g_a, "ga_patch_enum"); ndim = pnga_ndim(g_a); if (ndim > 1) pnga_error("ga_patch_enum:applicable to 1-dim arrays",ndim); pnga_inquire(g_a, &type, &ndim, dims); pnga_distribution(g_a, me, &lop, &hip); if ( lop > 0 ){ /* we get 0 if no elements stored on this process */ /* take product of patch owned and specified by the user */ if(hi hi)hip = hi; nelem = hip-lop+1; off = lop - lo; pnga_access_ptr(g_a, &lop, &hip, &ptr, &ld); switch (type) { #define TYPE_CASE(MT,T,AT) \ case MT: \ { \ T *aptr = (T*)ptr; \ T astart = *((T*)start); \ T astride = *((T*)stride); \ for (i=0; i1)pnga_error("ga_scan_copy: applicable to 1-dim arrays",ndim); if(g_src == g_dst) { pnga_error("ga_scan_copy: src and dst must be different arrays", 0); } if(type_src != type_dst) { pnga_error("ga_scan_copy: src and dst arrays must be same type", 0); } pnga_sync(); pnga_distribution(g_msk, me, &lop, &hip); /* create arrays to hold last bit set on a given process */ lim = (long *) ga_malloc(nproc, MT_C_LONGINT, "ga scan buf"); bzero(lim,sizeof(long)*nproc); lim[me] = -1; /* find last bit set on given process (store as global index) */ if ( lop > 0 ){ /* we get 0 if no elements stored on this process */ elems = hip - lop + 1; pnga_access_ptr(g_msk, &lop, &hip, &ptr_msk, &ld); switch (type_msk) { #define TYPE_CASE(MT,T,AT) \ case MT: \ { \ T * restrict buf = (T*)ptr_msk; \ for(i=0; i= lo && ioff <= hi) { \ lim[me]= ioff; \ } \ } \ } \ break; \ } #include "types.xh" #undef TYPE_CASE } pnga_release(g_msk, &lop, &hip); } pnga_gop(C_LONG,lim,nproc,"+"); if(hi hi) { stop = hi-lop+1; } else { stop = hip-lop+1; } /* If start bit is not first local bit, find last remote bit. * We must scan the entire lim to find the next-highest index. * Otherwise, this algorithm won't work with restricted arrays? */ rmt_idx = -1; for (i=0; i rmt_idx && lim[i] < lop) { rmt_idx = lim[i]; } } pnga_access_ptr(g_src, &lop, &hip, &ptr_src, &ld); pnga_access_ptr(g_dst, &lop, &hip, &ptr_dst, &ld); pnga_access_ptr(g_msk, &lop, &hip, &ptr_msk, &ld); combined_type = MT_NUMTYPES*type_src + type_msk; switch (combined_type) { #define TYPE_CASE(MT,T,AT,MT_MSK,T_MSK,AT_MSK) \ case (MT_NUMTYPES*MT) + MT_MSK: \ { \ T * restrict src = (T*)ptr_src; \ T * restrict dst = (T*)ptr_dst; \ T_MSK * restrict msk = (T_MSK*)ptr_msk; \ T last_val; \ assign_zero_##AT(last_val); \ if (-1 != rmt_idx) { \ pnga_get(g_src, &rmt_idx, &rmt_idx, &last_val, &ld);\ } \ for (i=start; i1)pnga_error("ga_scan_add: applicable to 1-dim arrays",ndim); if(g_src == g_dst) { pnga_error("ga_scan_add: src and dst must be different arrays", 0); } if(type_src != type_dst) { pnga_error("ga_scan_add: src and dst arrays must be same type", 0); } pnga_sync(); pnga_distribution(g_msk, me, &lop, &hip); /* create arrays to hold last bit set on a given process */ lim = (long *) ga_malloc(nproc, MT_C_LONGINT, "ga scan buf"); bzero(lim,sizeof(long)*nproc); lim[me] = -1; /* find last bit set on given process (store as global index) */ if ( lop > 0 ){ /* we get 0 if no elements stored on this process */ elems = hip - lop + 1; pnga_access_ptr(g_msk, &lop, &hip, &ptr_msk, &ld); switch (type_msk) { #define TYPE_CASE(MT,T,AT) \ case MT: \ { \ T * restrict buf = (T*)ptr_msk; \ for(i=0; i= lo && ioff <= hi) { \ lim[me]= ioff; \ } \ } \ } \ break; \ } #include "types.xh" #undef TYPE_CASE } pnga_release(g_msk, &lop, &hip); } pnga_gop(C_LONG,lim,nproc,"+"); #if VERBOSE_DEBUG if (0==me) printf("(%d) lo=%d hi=%d\n", me, lo, hi); for (i=0; i rmt_idx && lim[i] < lop) { rmt_idx = lim[i]; } } #if VERBOSE_DEBUG for (i=0; i hi) { stop = hi-lop+1; } else { stop = hip-lop+1; } /* first, perform local scan add */ pnga_access_ptr(g_src, &lop, &hip, &ptr_src, &ld); pnga_access_ptr(g_dst, &lop, &hip, &ptr_dst, &ld); pnga_access_ptr(g_msk, &lop, &hip, &ptr_msk, &ld); combined_type = MT_NUMTYPES*type_src + type_msk; switch (combined_type) { #define TYPE_CASE(MT,T,AT,MT_MSK,T_MSK,AT_MSK) \ case (MT_NUMTYPES*MT) + MT_MSK: \ { \ T * restrict src = (T*)ptr_src; \ T * restrict dst = (T*)ptr_dst; \ T_MSK * restrict msk = (T_MSK*)ptr_msk; \ int found_bit = 0; \ /* find first set bit on first segment */ \ if (lop <= lo) { \ while (eq_zero_##AT_MSK(msk[start]) && start 0) { \ pnga_get(g_src, &loc, &loc, &dst[i], NULL);\ } \ } else { \ assign_##AT(dst[i], src[i]); \ } \ } \ } \ if (excl != 0) { \ for (i=start+1; i 0 ){ /* we get 0 if no elements stored on this process */ Integer lop_1 = lop-1; /* adjust the range of elements to be within */ if(lop < lo) lop = lo; if(hip > hi) hip = hi; if(hi NWORK)pnga_error("sgai_bin_offset: >NWORK", n); len = sizeof(int)*n; armci_msg_bintree(scope, &root, &up, &left, &right); /* up-tree phase: collect number of elements */ if (left > -1) armci_msg_rcv(tag, workL, len, &lenmes, left); if (right > -1) armci_msg_rcv(tag, workR, len, &lenmes, right); /* add number of elements in each bin */ if((right > -1) && left>-1) for(i=0;i -1) for(i=0;i -1) armci_msg_snd(tag, offset, len, right); if (left > -1) { /* we saved num elems for right subtree to adjust offset for left*/ for(i=0; i0){ /* enter this block when we have data */ Integer first_proc, last_proc, p; Integer first_off, last_off; Integer *myoff, bin; /* get offset values stored on my processor to first and last bin */ pnga_access_ptr(g_off, &lobin, &hibin, &myoff, &crap); first_off = myoff[0]; last_off = myoff[hibin-lobin]; /* pnga_get(g_off,&lobin,&lobin,&first_off,&lo); pnga_get(g_off,&hibin,&hibin,&last_off,&hi); */ /* since offset starts at 0, add 1 to get index to g_bin */ first_off++; last_off++; /* find processors on which these bins are located */ if(!pnga_locate(g_bin, &first_off, &first_proc)) pnga_error("ga_bin_sorter: failed to locate region f",first_off); if(!pnga_locate(g_bin, &last_off, &last_proc)) pnga_error("ga_bin_sorter: failed to locate region l",last_off); /* inspect range of indices to bin elements stored on these processors */ for(p=first_proc, bin=lobin; p<= last_proc; p++){ Integer lo, hi, buf[2], off, cnt; buf[0] =-1; buf[1]=-1; pnga_distribution(g_bin,p,&lo,&hi); for(/* start from current bin */; bin<= hibin; bin++, myoff++){ Integer blo,bhi,stat; blo = *myoff +1; if(bin == hibin){ pnga_get(g_cnt, &hibin, &hibin, &cnt, &hibin); /* local */ bhi = blo + cnt-1; }else bhi = myoff[1]; stat= sgai_match_bin2proc(blo, bhi, lo, hi); switch (stat) { case 0: /* bin in a middle */ break; case 1: /* first bin on that processor */ buf[0] =bin; break; case 2: /* last bin on that processor */ buf[1] =bin; break; case 3: /* first and last bin on that processor */ buf[0] =bin; buf[1] =bin; break; } if(stat>1)break; /* found last bin on that processor */ } /* set range of bins on processor p */ cnt =0; off=1; if(buf[0]!=-1){cnt=1; off=0;} if(buf[1]!=-1)cnt++; if(cnt){ Integer p1 = p+1; lo = 1+off; hi = lo+cnt-1; tlo[0] = lo; tlo[1] = p1; thi[0] = hi; thi[1] = p1; pnga_put(*g_range, tlo, thi, buf+off, &cnt); } } } return TRUE; } extern void gai_hsort(Integer *list, int n); #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_bin_sorter = pnga_bin_sorter #endif void pnga_bin_sorter(Integer g_bin, Integer g_cnt, Integer g_off) { Integer nbin,totbin,type,ndim,lo,hi,me=pnga_nodeid(),crap; Integer g_range; if(FALSE==pnga_create_bin_range(g_bin, g_cnt, g_off, &g_range)) pnga_error("ga_bin_sorter: failed to create temp bin range array",0); pnga_inquire(g_bin, &type, &ndim, &totbin); if(ndim !=1) pnga_error("ga_bin_sorter: 1-dim array required",ndim); pnga_distribution(g_bin, me, &lo, &hi); if (lo > 0 ){ /* we get 0 if no elements stored on this process */ Integer bin_range[2], rlo[2],rhi[2]; Integer *bin_cnt, *ptr, i; /* get and inspect range of bins stored on current processor */ rlo[0] = 1; rlo[1]= me+1; rhi[0]=2; rhi[1]=rlo[1]; pnga_get(g_range, rlo, rhi, bin_range, rhi); /* local */ nbin = bin_range[1]-bin_range[0]+1; if(nbin<1 || nbin> totbin || nbin>(hi-lo+1)) pnga_error("ga_bin_sorter:bad nbin",nbin); /* get count of elements in each bin stored on this task */ if(!(bin_cnt = (Integer*)malloc(nbin*sizeof(Integer)))) pnga_error("ga_bin_sorter:memory allocation failed",nbin); pnga_get(g_cnt,bin_range,bin_range+1,bin_cnt,&nbin); /* get access to local bin elements */ pnga_access_ptr(g_bin, &lo, &hi, &ptr, &crap); for(i=0;i nbin) pnga_error("wrong bin",selected); if(all_bin_contrib[selected-1] ==0) my_nbin++; /* new bin found */ all_bin_contrib[selected-1]++; } /* process bins in chunks to match available buffer space */ for(i=0; i nbin) { printf("Writing off end of bins array: index=%d elems=%d lo=%ld hi=%ld values=%ld nbin=%ld\n", i,elems,(long)lo,(long)hi,(long)values+i,(long)nbin); break; }else{ pnga_put(g_bin, &lo, &hi, values+i, &selected); } i+=elems; } free(offset); free(all_bin_contrib); if(sortit)pnga_bin_sorter(g_bin, g_cnt, g_off); else pnga_sync(); } ga-5-3/global/src/matmul.c0000640005473000001440000023306611647111726014306 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: matmul.c,v 1.60.4.1 2006-12-22 13:05:22 manoj Exp $ */ /*=========================================================== * * GA_Dgemm(): Parallel Matrix Multiplication * (i.e. C = alpha*A*B + beta*C) * *===========================================================*/ #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #include "matmul.h" #include "ga-papi.h" #include "ga-wapi.h" #define DEBUG_ 0 /*set 1, to verify the correctness of parallel matrix mult.*/ /* some optimization macros */ #define KCHUNK_OPTIMIZATION 0 /* This Opt performing well only for m=1000;n=1000'k=2000 kinda cases and not for the opposite*/ /* Optimization flags: Initialized everytime in pnga_matmul() */ static short int CYCLIC_DISTR_OPT_FLAG = SET; static short int CONTIG_CHUNKS_OPT_FLAG = SET; static short int DIRECT_ACCESS_OPT_FLAG = SET; Integer gNbhdlA[2], gNbhdlB[2], gNbhdlC[2];/* for A and B matrix */ static int _gai_matmul_patch_flag = 0; void gai_matmul_patch_flag(int flag) { _gai_matmul_patch_flag = flag; } static inline int max3(int ichunk, int jchunk, int kchunk) { if(ichunk>jchunk) return GA_MAX(ichunk,kchunk); else return GA_MAX(jchunk, kchunk); } static inline void init_task_list(task_list_t *thing) { thing->lo[0] = 0; thing->lo[1] = 0; thing->hi[0] = 0; thing->hi[1] = 0; thing->dim[0] = 0; thing->dim[1] = 0; thing->chunkBId = 0; thing->do_put = 0; } static void GET_BLOCK(Integer g_x, task_list_t *chunk, void *buf, char *trans, Integer xilo, Integer xjlo, Integer *dim_next, Integer *nbhdl) { Integer i0, i1, j0, j1; Integer lo[2], hi[2]; if(*trans == 'n' || *trans == 'N') { *dim_next = chunk->dim[0]; i0= xilo+chunk->lo[0]; i1= xilo+chunk->hi[0]; j0= xjlo+chunk->lo[1]; j1= xjlo+chunk->hi[1]; } else { *dim_next = chunk->dim[1]; i0= xjlo+chunk->lo[1]; i1= xjlo+chunk->hi[1]; j0= xilo+chunk->lo[0]; j1= xilo+chunk->hi[0]; } lo[0] = i0; lo[1] = j0; hi[0] = i1; hi[1] = j1; pnga_nbget(g_x, lo, hi, buf, dim_next, nbhdl); } static short int gai_get_task_list(task_list_t *taskListA, task_list_t *taskListB, task_list_t *state, Integer istart, Integer jstart, Integer kstart, Integer iend, Integer jend, Integer kend, Integer Ichunk, Integer Jchunk, Integer Kchunk, int *max_tasks, Integer g_a) { int ii, jj, nloops=0; short int do_put, more_chunks_left=0, recovery=0; Integer ilo, ihi, jlo, jhi, klo, khi, get_new_B; Integer jstart_=jstart, kstart_=kstart; if(state->lo[0] != -1) recovery = 1; nloops = (iend-istart+1)/Ichunk + ( ((iend-istart+1)%Ichunk)?1:0 ); if(nloops>MAX_CHUNKS) pnga_error("Increase MAX_CHUNKS value in matmul.h",0L); if(recovery) jstart_ = state->lo[0]; /* recovering the previous state */ for(ii=jj=0, jlo = jstart_; jlo <= jend; jlo += Jchunk) { jhi = GA_MIN(jend, jlo+Jchunk-1); if(recovery) { do_put = state->do_put; kstart_ = state->lo[1]; } else do_put = SET; /* for 1st shot we can put, instead of accumulate */ for(klo = kstart_; klo <= kend; klo += Kchunk) { khi = GA_MIN(kend, klo+Kchunk-1); get_new_B = TRUE; /* set it back after the first loop */ recovery = 0; jstart_ = jstart; kstart_ = kstart; /* save CURRENT STATE. Saving state before "i" loop helps to avoid tracking get_new_B, which is hassle in ga_matmul_regular() */ if(ii+nloops >= MAX_CHUNKS) { more_chunks_left = 1; state->lo[0] = jlo; state->lo[1] = klo; state->do_put = do_put; break; } for(ilo = istart; ilo <= iend; ilo += Ichunk){ ihi = GA_MIN(iend, ilo+Ichunk-1); taskListA[ii].dim[0] = ihi - ilo + 1; taskListA[ii].dim[1] = khi - klo + 1; taskListA[ii].lo[0] = ilo; taskListA[ii].hi[0] = ihi; taskListA[ii].lo[1] = klo; taskListA[ii].hi[1] = khi; taskListA[ii].do_put = do_put; if(get_new_B) { /* B matrix */ ihi = GA_MIN(iend, ilo+Ichunk-1); taskListB[jj].dim[0] = khi - klo + 1; taskListB[jj].dim[1] = jhi - jlo + 1; taskListB[jj].lo[0] = klo; taskListB[jj].hi[0] = khi; taskListB[jj].lo[1] = jlo; taskListB[jj].hi[1] = jhi; get_new_B = FALSE; /* Until J or K change again */ taskListA[ii].chunkBId = jj; ++jj; } else taskListA[ii].chunkBId = taskListA[ii-1].chunkBId; ++ii; } if (more_chunks_left) break; do_put = UNSET; } if (more_chunks_left) break; } *max_tasks = ii; /* Optimization disabled if chunks exceeds buffer space */ if(more_chunks_left) CYCLIC_DISTR_OPT_FLAG = UNSET; if(CYCLIC_DISTR_OPT_FLAG) { /* should not be called for irregular matmul */ int prow, pcol, offset, grp_me; Integer a_grp = pnga_get_pgroup(g_a); grp_me = (int)pnga_pgroup_nodeid(a_grp); prow = GA[GA_OFFSET + g_a].nblock[0]; pcol = GA[GA_OFFSET + g_a].nblock[1]; offset = (grp_me/prow + grp_me%prow) % pcol; for(jj=0, ilo = istart; ilo <= iend; jj++, ilo += Ichunk) taskListA[jj].do_put = UNSET; for(jj=0, ilo = istart; ilo <= iend; jj++, ilo += Ichunk) taskListA[jj+offset].do_put = SET; } return more_chunks_left; } static void gai_get_chunk_size(int irregular,Integer *Ichunk,Integer *Jchunk, Integer *Kchunk,Integer *elems,Integer atype, Integer m,Integer n,Integer k, short int nbuf, short int use_armci_memory, Integer a_grp) { double temp; Integer min_tasks = MINTASKS; /* Increase tasks if there is load imbalance. This controls the granularity of chunks */ Integer max_chunk, nproc=pnga_nnodes(), tmpa, tmpb; Integer avail = pnga_memory_avail_type(atype); tmpa = *Ichunk; tmpb = *Jchunk; if(irregular) { temp = (k*(double)(m*(double)n)) / (min_tasks * nproc); max_chunk = (Integer)pow(temp, (1.0/3.0) ); if (max_chunk < MIN_CHUNK_SIZE) max_chunk = MIN_CHUNK_SIZE; } else max_chunk = (Integer) max3(*Ichunk, *Jchunk, *Kchunk); pnga_pgroup_gop(a_grp, pnga_type_f2c(MT_F_INT), &avail, (Integer)1, "min"); if ( max_chunk > CHUNK_SIZE/nbuf) { /*if memory if very limited, performance degrades for large matrices as chunk size is very small, which leads to communication overhead)*/ if(avail max_chunk) { *Kchunk = GA_MIN(*Kchunk,(Integer)(temp/(*Ichunk))); *Jchunk = GA_MIN(*Jchunk,(Integer)(temp/(*Kchunk))); } else if(*Kchunk < max_chunk && *Ichunk > max_chunk) { temp *= 1.0/(*Kchunk); *Ichunk = GA_MIN(*Ichunk,(Integer)temp); *Jchunk = GA_MIN(*Jchunk,(Integer)temp); } else *Ichunk = *Jchunk = *Kchunk = max_chunk; } } else *Ichunk = *Jchunk = *Kchunk = CHUNK_SIZE/nbuf; /* Try to use 1-d data transfer & take advantage of zero-copy protocol */ if(CONTIG_CHUNKS_OPT_FLAG) { /* select a contiguous piece */ if(!irregular) { if(*Ichunk > tmpa && *Jchunk > tmpb) { *Ichunk = tmpa; *Jchunk = tmpb; *Kchunk = GA_MIN(*Ichunk,*Jchunk); } else { int i=1;/* i should be >=1 , to avoid divide by zero error */ temp = max_chunk*max_chunk; if(temp > tmpa) { *Ichunk = tmpa; *Jchunk = (Integer)(temp/(*Ichunk)); if(*Jchunk < tmpb) { while(tmpb/i > *Jchunk) ++i; *Jchunk = tmpb/i; } else *Jchunk = tmpb; *Kchunk = GA_MIN(*Ichunk, *Jchunk); } } } } if(*Ichunk<=0) *Ichunk = 1; /* should be atleast 1 */ if(*Jchunk<=0) *Jchunk = 1; if(*Kchunk<=0) *Kchunk = 1; /* Total elements "NUM_MAT" extra elems for safety - just in case */ *elems = ( nbuf*(*Ichunk)*(*Kchunk) + nbuf*(*Kchunk)*(*Jchunk) + (*Ichunk)*(*Jchunk) ); *elems += nbuf*NUM_MATS*sizeof(DoubleComplex)/GAsizeofM(atype); } static DoubleComplex* gai_get_armci_memory(Integer Ichunk, Integer Jchunk, Integer Kchunk, short int nbuf, Integer atype) { DoubleComplex *tmp = NULL; Integer elems; elems = (Integer) pow((double)BLOCK_SIZE,(double)2); elems = nbuf*elems + nbuf*elems + elems; /* A,B,C temporary buffers */ /* add extra elements for safety */ elems += nbuf*NUM_MATS*sizeof(DoubleComplex)/GAsizeofM(atype); /* allocate temporary storage using ARMCI_Malloc */ if( (Integer) (((double)nbuf)*(Ichunk* Kchunk) + ((double)nbuf)*(Kchunk* Jchunk) + Ichunk* Jchunk ) < elems) { tmp=(DoubleComplex*)ARMCI_Malloc_local(elems*GAsizeofM(atype)); } return tmp; } /************************************ * Sequential DGEMM * i.e. BLAS dgemm Routines ************************************/ static void GAI_DGEMM(Integer atype, char *transa, char *transb, Integer idim, Integer jdim, Integer kdim, void *alpha, DoubleComplex *a, Integer adim, DoubleComplex *b, Integer bdim, DoubleComplex *c, Integer cdim) { BlasInt idim_t, jdim_t, kdim_t, adim_t, bdim_t, cdim_t; DoubleComplex ZERO; SingleComplex ZERO_CF; idim_t=idim; jdim_t=jdim; kdim_t=kdim; adim_t=adim; bdim_t=bdim; cdim_t=cdim; ZERO.real = 0.; ZERO.imag = 0.; ZERO_CF.real = 0.; ZERO_CF.imag = 0.; switch(atype) { case C_FLOAT: BLAS_SGEMM(transa, transb, &idim_t, &jdim_t, &kdim_t, (Real *)alpha, (Real *)a, &adim_t, (Real *)b, &bdim_t, (Real *)&ZERO_CF, (Real *)c, &cdim_t); break; case C_DBL: BLAS_DGEMM(transa, transb, &idim_t, &jdim_t, &kdim_t, (DoublePrecision *)alpha, (DoublePrecision *)a, &adim_t, (DoublePrecision *)b, &bdim_t, (DoublePrecision *)&ZERO, (DoublePrecision *)c, &cdim_t); break; case C_DCPL: BLAS_ZGEMM(transa, transb, &idim_t, &jdim_t, &kdim_t, (DoubleComplex *)alpha, (DoubleComplex *)a, &adim_t, (DoubleComplex *)b, &bdim_t, (DoubleComplex *)&ZERO, (DoubleComplex *)c, &cdim_t); break; case C_SCPL: BLAS_CGEMM(transa, transb, &idim_t, &jdim_t, &kdim_t, (SingleComplex *)alpha, (SingleComplex *)a, &adim_t, (SingleComplex *)b, &bdim_t, (SingleComplex *)&ZERO_CF, (SingleComplex *)c, &cdim_t); break; default: pnga_error("ga_matmul_patch: wrong data type", atype); } } static void gai_matmul_shmem(transa, transb, alpha, beta, atype, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi, Ichunk, Kchunk, Jchunk, a,b,c, need_scaling) Integer g_a, ailo, aihi, ajlo, ajhi; /* patch of g_a */ Integer g_b, bilo, bihi, bjlo, bjhi; /* patch of g_b */ Integer g_c, cilo, cihi, cjlo, cjhi; /* patch of g_c */ Integer Ichunk, Kchunk, Jchunk, atype; void *alpha, *beta; char *transa, *transb; DoubleComplex *a, *b, *c; short int need_scaling; { Integer me = pnga_nodeid(); Integer get_new_B, loC[2]={0,0}, hiC[2]={0,0}, ld[2]; Integer i0, i1, j0, j1; Integer ilo, ihi, idim, jlo, jhi, jdim, klo, khi, kdim, adim, bdim=0, cdim; int istart, jstart, kstart, iend, jend, kend; short int do_put=UNSET, single_task_flag=UNSET; DoubleComplex ONE = {1.,0.}; SingleComplex ONE_CF = {1.,0.}; Integer clo[2], chi[2]; GA_PUSH_NAME("ga_matmul_shmem"); /* to skip accumulate and exploit data locality: get chunks according to "C" matrix distribution*/ pnga_distribution(g_c, me, loC, hiC); istart = loC[0]-1; iend = hiC[0]-1; jstart = loC[1]-1; jend = hiC[1]-1; kstart = 0 ; kend = ajhi-ajlo; if(DIRECT_ACCESS_OPT_FLAG) { /* check if there is only one task. If so, then it is contiguous */ if( (iend-istart+1 <= Ichunk) && (jend-jstart+1 <= Jchunk) && (kend-kstart+1 <= Kchunk) ) { single_task_flag = SET; pnga_access_ptr(g_c, loC, hiC, &c, ld); } } /* loop through columns of g_c patch */ for(jlo = jstart; jlo <= jend; jlo += Jchunk) { jhi = GA_MIN(jend, jlo+Jchunk-1); jdim = jhi - jlo +1; /* if beta=0,then for first shot we can do put,instead of accumulate */ if(need_scaling == UNSET) do_put = SET; /* loop cols of g_a patch : loop rows of g_b patch*/ for(klo = kstart; klo <= kend; klo += Kchunk) { khi = GA_MIN(kend, klo+Kchunk-1); kdim= khi - klo +1; get_new_B = TRUE; /* Each pass thru' outer 2 loops means we need a different patch of B.*/ /*loop through rows of g_c patch */ for(ilo = istart; ilo <= iend; ilo += Ichunk){ ihi = GA_MIN(iend, ilo+Ichunk-1); idim= cdim = ihi - ilo +1; /* STEP1(a): get matrix "A" chunk */ i0= ailo+ilo; i1= ailo+ihi; j0= ajlo+klo; j1= ajlo+khi; if (*transa == 'n' || *transa == 'N'){ clo[0] = i0; clo[1] = j0; chi[0] = i1; chi[1] = j1; adim=idim; pnga_get(g_a, clo, chi, a, &idim); }else{ clo[0] = j0; clo[1] = i0; chi[0] = j1; chi[1] = i1; adim=kdim; pnga_get(g_a, clo, chi, a, &kdim); } /* STEP1(b): get matrix "B" chunk*/ if(get_new_B) {/*Avoid rereading B if same patch as last time*/ i0= bilo+klo; i1= bilo+khi; j0= bjlo+jlo; j1= bjlo+jhi; if (*transb == 'n' || *transb == 'N'){ clo[0] = i0; clo[1] = j0; chi[0] = i1; chi[1] = j1; bdim=kdim; pnga_get(g_b, clo, chi, b, &kdim); }else { clo[0] = j0; clo[1] = i0; chi[0] = j1; chi[1] = i1; bdim=jdim; pnga_get(g_b, clo, chi, b, &jdim); } get_new_B = FALSE; /* Until J or K change again */ } /* STEP2: Do the sequential matrix multiply - i.e.BLAS dgemm */ GAI_DGEMM(atype, transa, transb, idim, jdim, kdim, alpha, a, adim, b, bdim, c, cdim); /* STEP3: put/accumulate into "C" matrix */ i0= cilo+ilo; i1= cilo+ihi; j0= cjlo+jlo; j1= cjlo+jhi; /* if single_task_flag is SET (i.e =1), then there is no need to update "C" matrix, as we use pointer directly in GAI_DGEMM */ if(single_task_flag != SET) { switch(atype) { case C_FLOAT: case C_SCPL: clo[0] = i0; clo[1] = j0; chi[0] = i1; chi[1] = j1; if(do_put==SET) /* i.e.beta == 0.0 */ pnga_put(g_c, clo, chi, (float *)c, &cdim); else { pnga_acc(g_c, clo, chi, (float*)c, &cdim, &ONE_CF); } break; default: clo[0] = i0; clo[1] = j0; chi[0] = i1; chi[1] = j1; if(do_put==SET) /* i.e.beta == 0.0 */ pnga_put(g_c, clo, chi, (DoublePrecision*)c, &cdim); else { pnga_acc(g_c, clo, chi, (DoublePrecision*)c, &cdim, (DoublePrecision*)&ONE); } break; } } } do_put = UNSET; /* In the second loop, accumulate should be done */ } } GA_POP_NAME; } static void init_block_info(Integer g_c, Integer *proc_index, Integer *index, Integer *blocks, Integer *block_dims, Integer *topology, Integer *iblock) { Integer me= pnga_nodeid(); /* Uses simple block-cyclic data distribution */ if(!pnga_uses_proc_grid(g_c)) { *iblock = me; } else /* Uses scalapack block-cyclic data distribution */ { *iblock = 0; pnga_get_proc_index(g_c, me, proc_index); pnga_get_proc_index(g_c, me, index); pnga_get_block_info(g_c, blocks, block_dims); pnga_get_proc_grid(g_c, topology); } } /** * get the lo/hi distribution info of the next block * return 0 indicates no more blocks available * return 1 indicates there is a block available */ static int get_next_block_info(Integer g_c, Integer *proc_index, Integer *index, Integer *blocks, Integer *block_dims, Integer*topology, Integer *iblock, Integer *blo, Integer *bhi) { Integer dims[MAXDIM], ndim, type; int i; /* works only upto 2 dims - i.e vectors/matrices*/ pnga_inquire(g_c, &type, &ndim, dims); if(ndim>2) pnga_error("get_next_block_info() supports upto 2-d only ", 0L); /* Uses simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(g_c)) { if(*iblock < pnga_total_blocks(g_c)) { pnga_distribution(g_c, *iblock, blo, bhi); *iblock += pnga_nnodes(); return 1; } } else /* Uses scalapack block-cyclic data distribution */ { if (index[ndim-1] < blocks[ndim-1]) { /* find bounding coordinates of block */ for (i = 0; i < ndim; i++) { blo[i] = index[i]*block_dims[i]+1; bhi[i] = (index[i] + 1)*block_dims[i]; if (bhi[i] > dims[i]) bhi[i] = dims[i]; } /* increment index to get next block on processor */ index[0] += topology[0]; for (i = 0; i < ndim; i++) { if (index[i] >= blocks[i] && i=0) init_block_info(g_c, proc_index, index, blocks, block_dims, topology, &iblock); has_more_blocks = 1; while(has_more_blocks) { /* if block cyclic distribution and loop accordigly. In case of simple block distribution we process this loop only once */ if(numblocks<0) { /* simple block distribution */ has_more_blocks = 0; pnga_distribution(g_c, me, loC, hiC); } else { /* block cyclic */ if(!get_next_block_info(g_c, proc_index, index, blocks, block_dims, topology, &iblock, loC, hiC)) break; } /* If loC and hiC intersects with current patch region, then they will * be updated accordingly. Else it returns FALSE */ pnga_inquire(g_c, &ctype, &cndim, cdims); if(!pnga_patch_intersect(clo,chi,loC,hiC,cndim)) continue; #if DEBUG_ printf("%d: Processing block #%d [%d,%d] - [%d,%d]\n", GAme, iblock, loC[0], loC[1], hiC[0], hiC[1]); #endif state.lo[0] = -1; /* just for first do-while loop */ do { /* Inital Settings */ a = a_ar[0]; b = b_ar[0]; c = c_ar[0]; do_put = single_task_flag = UNSET; offset = 0; /***************************************************************** * Task list: Collect information of all chunks. Matmul using * Non-blocking call needs this list *****************************************************************/ gTaskId=0; /* to skip accumulate and exploit data locality: get chunks according to "C" matrix distribution*/ /* pnga_distribution(g_c, me, loC, hiC); */ chunks_left=gai_get_task_list(taskListA, taskListB, &state,loC[0]-1, loC[1]-1, 0, hiC[0]-1, hiC[1]-1, k-1, Ichunk,Jchunk,Kchunk, &max_tasks,g_a); currA = nextA = 0; if(chunks_left) { /* then turn OFF this optimization */ if(DIRECT_ACCESS_OPT_FLAG) { /* check if there is only one task.If so,then it is contiguous */ if(max_tasks == 1) { if( !((hiC[0]-loC[0]+1 <= Ichunk) &&(hiC[1]-loC[1]+1 <=Jchunk) && (k <= Kchunk))) pnga_error("Invalid task list", 0L); single_task_flag = SET; pnga_access_ptr(g_c, loC, hiC, &c, ld); } } } if(CYCLIC_DISTR_OPT_FLAG) { int prow,pcol,grp_me; Integer a_grp=pnga_get_pgroup(g_a); grp_me = (int)pnga_pgroup_nodeid(a_grp); prow = GA[GA_OFFSET + g_a].nblock[0]; pcol = GA[GA_OFFSET + g_a].nblock[1]; offset = (grp_me/prow + grp_me%prow) % pcol; currA = nextA = nextA + offset; } /************************************************* * Do the setup & issue non-blocking calls to get * the first block/chunk I'm gonna work *************************************************/ shiftA=0; shiftB=0; if(nextA < max_tasks) { currB = nextB = taskListA[currA].chunkBId; GET_BLOCK(g_a, &taskListA[nextA], a_ar[shiftA], transa, ailo, ajlo, &adim_next, &gNbhdlA[shiftA]); GET_BLOCK(g_b, &taskListB[nextB], b_ar[shiftB], transb, bilo, bjlo, &bdim_next, &gNbhdlB[shiftB]); adim=adim_next; bdim=bdim_next; get_new_B = TRUE; } /************************************************************* * Main Parallel DGEMM Loop. *************************************************************/ while(nextA < max_tasks) { currA = nextA; currB = taskListA[currA].chunkBId; idim = cdim = taskListA[currA].dim[0]; jdim = taskListB[currB].dim[1]; kdim = taskListA[currA].dim[1]; bdim=bdim_next; /* if beta=0.0 (i.e.if need_scaling=UNSET), then for first shot, we can do put, instead of accumulate */ if(need_scaling == UNSET) do_put = taskListA[currA].do_put; nextA = ++gTaskId; /* get the next task id */ if(CYCLIC_DISTR_OPT_FLAG && nextA < max_tasks) nextA = (offset+nextA) % max_tasks; /* ---- WAIT till we get the current A & B block ---- */ a = a_ar[shiftA]; WAIT_GET_BLOCK(&gNbhdlA[shiftA]); if(get_new_B){/*Avoid rereading B if it is same patch as last time*/ get_new_B = FALSE; b = b_ar[shiftB]; WAIT_GET_BLOCK(&gNbhdlB[shiftB]); } /* ---- GET the next A & B block ---- */ if(nextA < max_tasks) { GET_BLOCK(g_a, &taskListA[nextA], a_ar[(shiftA+1)%2], transa, ailo, ajlo, &adim_next, &gNbhdlA[(shiftA+1)%2]); nextB = taskListA[nextA].chunkBId; if(currB != nextB) { shiftB=((shiftB+1)%2); GET_BLOCK(g_b, &taskListB[nextB], b_ar[shiftB], transb, bilo, bjlo, &bdim_next, &gNbhdlB[shiftB]); } } if(currB != nextB) get_new_B = TRUE; /* Do the sequential matrix multiply - i.e.BLAS dgemm */ GAI_DGEMM(atype, transa, transb, idim, jdim, kdim, alpha, a, adim, b, bdim, c, cdim); /* Non-blocking Accumulate Operation. Note: skip wait in 1st loop*/ i0 = cilo + taskListA[currA].lo[0]; i1 = cilo + taskListA[currA].hi[0]; j0 = cjlo + taskListB[currB].lo[1]; j1 = cjlo + taskListB[currB].hi[1]; if(currA < max_tasks) { if (single_task_flag != SET) { switch(atype) { case C_FLOAT: case C_SCPL: clo[0] = i0; clo[1] = j0; chi[0] = i1; chi[1] = j1; if(do_put==SET) /* Note:do_put is UNSET, if beta!=0.0*/ pnga_put(g_c, clo, chi, (float *)c, &cdim); else { pnga_acc(g_c, clo, chi, (float *)c, &cdim, &ONE_CF); } break; default: clo[0] = i0; clo[1] = j0; chi[0] = i1; chi[1] = j1; if(do_put==SET) /* i.e.beta ==0.0 */ pnga_put(g_c, clo, chi, (DoublePrecision*)c, &cdim); else { pnga_acc(g_c, clo, chi, (DoublePrecision*)c, &cdim,(DoublePrecision*)&ONE); } break; } } } /* shift next buffer..toggles between 0 and 1: as we use 2 buffers, one for computation and the other for communication (overlap) */ shiftA = ((shiftA+1)%2); adim = adim_next; } } while(chunks_left); } /* while(has_more_blocks) */ GA_POP_NAME; } static void gai_matmul_irreg(transa, transb, alpha, beta, atype, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi, Ichunk, Kchunk, Jchunk, a_ar,b_ar,c_ar, need_scaling, irregular) Integer g_a, ailo, aihi, ajlo, ajhi; /* patch of g_a */ Integer g_b, bilo, bihi, bjlo, bjhi; /* patch of g_b */ Integer g_c, cilo, cihi, cjlo, cjhi; /* patch of g_c */ Integer Ichunk, Kchunk, Jchunk, atype; void *alpha, *beta; char *transa, *transb; DoubleComplex **a_ar, **b_ar, **c_ar; short int need_scaling, irregular; { #if DEBUG_ Integer me= pnga_nodeid(); #endif Integer nproc=pnga_nnodes(); Integer get_new_B, i, i0, i1, j0, j1; Integer ilo, ihi, idim, jlo, jhi, jdim, klo, khi, kdim, ijk=0; Integer n, m, k, adim, bdim=0, cdim; Integer idim_prev=0, jdim_prev=0, kdim_prev=0; Integer adim_prev=0, bdim_prev=0, cdim_prev=0; task_list_t taskListC; short int compute_flag=0, shiftA=0, shiftB=0; DoubleComplex ONE, *a, *b, *c; SingleComplex ONE_CF; Integer grp_me, a_grp = pnga_get_pgroup(g_a); Integer clo[2], chi[2]; GA_PUSH_NAME("ga_matmul_irreg"); init_task_list(&taskListC); ONE.real =1.; ONE.imag =0.; ONE_CF.real =1.; ONE_CF.imag =0.; #if DEBUG_ if(me==0) { printf("@@ga_matmul_irreg:m,n,k=%ld %ld %ld\n", aihi-ailo+1, bjhi-bjlo+1,ajhi-ajlo+1); fflush(stdout); } #endif m = aihi - ailo +1; n = bjhi - bjlo +1; k = ajhi - ajlo +1; a = a_ar[0]; b = b_ar[0]; c = c_ar[0]; grp_me = pnga_pgroup_nodeid(a_grp); clo[0] = cilo; clo[1] = cjlo; chi[0] = cihi; chi[1] = cjhi; if(!need_scaling) pnga_fill_patch(g_c, clo, chi, beta); compute_flag=0; /* take care of the last chunk */ for(jlo = 0; jlo < n; jlo += Jchunk){ /* loop thru columns of g_c patch */ jhi = GA_MIN(n-1, jlo+Jchunk-1); jdim= jhi - jlo +1; for(klo = 0; klo < k; klo += Kchunk){ /* loop cols of g_a patch */ khi = GA_MIN(k-1, klo+Kchunk-1); /* loop rows of g_b patch */ kdim= khi - klo +1; /** Each pass through the outer two loops means we need a different patch of B.*/ get_new_B = TRUE; for(ilo = 0; ilo < m; ilo+=Ichunk){ /* loop thru rows of g_c patch */ if(ijk%nproc == grp_me){ ihi = GA_MIN(m-1, ilo+Ichunk-1); idim= cdim = ihi - ilo +1; if (*transa == 'n' || *transa == 'N'){ adim = idim; i0= ailo+ilo; i1= ailo+ihi; j0= ajlo+klo; j1= ajlo+khi; clo[0] = i0; clo[1] = j0; chi[0] = i1; chi[1] = j1; pnga_nbget(g_a, clo, chi, a_ar[shiftA], &idim, &gNbhdlA[shiftA]); }else{ adim = kdim; i0= ajlo+klo; i1= ajlo+khi; j0= ailo+ilo; j1= ailo+ihi; clo[0] = i0; clo[1] = j0; chi[0] = i1; chi[1] = j1; pnga_nbget(g_a, clo, chi, a_ar[shiftA], &kdim, &gNbhdlA[shiftA]); } /* Avoid rereading B if it is same patch as last time. */ if(get_new_B) { if (*transb == 'n' || *transb == 'N'){ bdim = kdim; i0= bilo+klo; i1= bilo+khi; j0= bjlo+jlo; j1= bjlo+jhi; clo[0] = i0; clo[1] = j0; chi[0] = i1; chi[1] = j1; pnga_nbget(g_b, clo, chi, b_ar[shiftB], &kdim, &gNbhdlB[shiftB]); }else{ bdim = jdim; i0= bjlo+jlo; i1= bjlo+jhi; j0= bilo+klo; j1= bilo+khi; clo[0] = i0; clo[1] = j0; chi[0] = i1; chi[1] = j1; pnga_nbget(g_b, clo, chi, b_ar[shiftB], &jdim, &gNbhdlB[shiftB]); } } if(compute_flag) { /* compute loop */ if(atype == C_FLOAT) for(i=0;i _GA_TOL_ || abs_value < -(_GA_TOL_)) { printf("Values are = %f : %f\n Alpha=%f Beta=%f\n", ((float*)tmpc_orig)[i], ((float*)tmpc2)[i], *((float*)alpha), *((float*)beta)); pnga_error("Matmul (type:float) check failed", 0); } } } break; case C_DBL: { double abs_value=0.0; for(i=0; i _GA_TOL_ || abs_value < -(_GA_TOL_)) { printf("Values are = %lf : %lf\n Alpha=%lf Beta=%lf\n", ((double*)tmpc_orig)[i+j], ((double*)tmpc2)[i+j], *((double*)alpha),*((double*)beta)); pnga_error("Matmul (type:double) check failed", 0); } } } break; case C_DCPL: { DoubleComplex abs_value; for(i=0; i_GA_TOL_ || abs_value.real<-(_GA_TOL_) || abs_value.imag>_GA_TOL_ || abs_value.imag<-(_GA_TOL_)) { printf("Values= %lf, %lf : %lf, %lf\n", tmpc_orig[i].real, tmpc_orig[i].imag,tmpc2[i].real,tmpc2[i].imag); pnga_error("Matmul (DoubleComplex) check failed", 0); } } } break; case C_SCPL: { SingleComplex abs_value; for(i=0; i_GA_TOL_ || abs_value.real<-(_GA_TOL_) || abs_value.imag>_GA_TOL_ || abs_value.imag<-(_GA_TOL_)) { printf("Values= %lf, %lf : %lf, %lf\n", ((SingleComplex*)tmpc_orig)[i].real, ((SingleComplex*)tmpc_orig)[i].imag,((SingleComplex*)tmpc2)[i].real,((SingleComplex*)tmpc2)[i].imag); pnga_error("Matmul (SingleComplex) check failed", 0); } } } break; default: pnga_error("ga_matmul_patch: wrong data type", atype); } printf("Matrix Multiplication check (m,n,k=%ld %ld %ld)...O.K\n",m,n,k); fflush(stdout); free(tmpc_orig); free(tmpc2); tmpc_orig = NULL; } } #endif /****************************************** * PARALLEL DGEMM * i.e. C = alpha*A*B + beta*C ******************************************/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_matmul = pnga_matmul #endif void pnga_matmul(transa, transb, alpha, beta, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi) Integer g_a, ailo, aihi, ajlo, ajhi; /* patch of g_a */ Integer g_b, bilo, bihi, bjlo, bjhi; /* patch of g_b */ Integer g_c, cilo, cihi, cjlo, cjhi; /* patch of g_c */ void *alpha, *beta; char *transa, *transb; { DoubleComplex *a=NULL, *b, *c, *a_ar[2], *b_ar[2], *c_ar[2]; Integer adim1=0, adim2=0, bdim1=0, bdim2=0, cdim1=0, cdim2=0, dims[2]; Integer atype, btype, ctype, rank, me= pnga_nodeid(); Integer n, m, k, Ichunk, Kchunk, Jchunk; Integer loA[2]={0,0}, hiA[2]={0,0}; Integer loB[2]={0,0}, hiB[2]={0,0}; Integer loC[2]={0,0}, hiC[2]={0,0}; int local_sync_begin,local_sync_end; short int need_scaling=SET,use_NB_matmul=SET; short int irregular=UNSET, use_armci_memory=UNSET; Integer a_grp=pnga_get_pgroup(g_a), b_grp=pnga_get_pgroup(g_b); Integer c_grp=pnga_get_pgroup(g_c); Integer numblocks; Integer clo[2], chi[2]; /* OPTIMIZATIONS FLAGS. To unset an optimization, replace SET by UNSET) */ CYCLIC_DISTR_OPT_FLAG = UNSET; CONTIG_CHUNKS_OPT_FLAG = SET; DIRECT_ACCESS_OPT_FLAG = SET; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_pgroup_sync(a_grp); GA_PUSH_NAME("pnga_matmul"); if (a_grp != b_grp || a_grp != c_grp) pnga_error("Arrays must be defined on same group",0L); # if 0 /* disabled. should not fail if there are non-overlapping patches*/ /* check if C is different from A and B */ if (g_c == g_a || g_c == g_b) pnga_error("Global Array C should be different from A and B", 0); #endif /************************************************** * Do All Sanity Checks **************************************************/ /* Check to make sure all global arrays are of the same type */ if (!(pnga_is_mirrored(g_a) == pnga_is_mirrored(g_b) && pnga_is_mirrored(g_a) == pnga_is_mirrored(g_c))) { pnga_error("Processors do not match for all arrays",pnga_nnodes()); } /* check if ranks are O.K. */ pnga_inquire(g_a, &atype, &rank, dims); VECTORCHECK(rank, dims, adim1, adim2, ailo, aihi, ajlo, ajhi); pnga_inquire(g_b, &btype, &rank, dims); VECTORCHECK(rank, dims, bdim1, bdim2, bilo, bihi, bjlo, bjhi); pnga_inquire(g_c, &ctype, &rank, dims); VECTORCHECK(rank, dims, cdim1, cdim2, cilo, cihi, cjlo, cjhi); /* check for data-types mismatch */ if(atype != btype || atype != ctype ) pnga_error(" types mismatch ", 0L); if(atype != C_DCPL && atype != C_DBL && atype != C_FLOAT && atype!=C_SCPL) pnga_error(" type error",atype); /* check if patch indices and dims match */ if (*transa == 'n' || *transa == 'N'){ if (ailo <= 0 || aihi > adim1 || ajlo <= 0 || ajhi > adim2) pnga_error(" g_a indices out of range ", g_a); }else if (ailo <= 0 || aihi > adim2 || ajlo <= 0 || ajhi > adim1) pnga_error(" g_a indices out of range ", g_a); if (*transb == 'n' || *transb == 'N'){ if (bilo <= 0 || bihi > bdim1 || bjlo <= 0 || bjhi > bdim2) pnga_error(" g_b indices out of range ", g_b); }else if (bilo <= 0 || bihi > bdim2 || bjlo <= 0 || bjhi > bdim1) pnga_error(" g_b indices out of range ", g_b); if (cilo <= 0 || cihi > cdim1 || cjlo <= 0 || cjhi > cdim2) pnga_error(" g_c indices out of range ", g_c); /* verify if patch dimensions are consistent */ m = aihi - ailo +1; n = bjhi - bjlo +1; k = ajhi - ajlo +1; if( (cihi - cilo +1) != m) pnga_error(" a & c dims error",m); if( (cjhi - cjlo +1) != n) pnga_error(" b & c dims error",n); if( (bihi - bilo +1) != k) pnga_error(" a & b dims error",k); #if DEBUG_ if(me==0) check_result(0, transa, transb, alpha, beta, atype, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi); pnga_sync(); #endif /* switch to various matmul algorithms here. more to come */ if( GA[GA_OFFSET + g_c].irreg == 1 || GA[GA_OFFSET + g_b].irreg == 1 || GA[GA_OFFSET + g_a].irreg == 1 || _gai_matmul_patch_flag == SET) irregular = SET; /* even ga_dgemm is called, m,n & k might not match GA dimensions */ pnga_inquire(g_c, &ctype, &rank, dims); if(dims[0] != m || dims[1] != n) irregular = SET; /* C matrix dims */ if(!irregular) { if((adim1=GA_Cluster_nnodes()) > 1) use_NB_matmul = SET; else { use_NB_matmul = UNSET; CONTIG_CHUNKS_OPT_FLAG = UNSET; DIRECT_ACCESS_OPT_FLAG = UNSET; } # if defined(__crayx1) || defined(NEC) use_NB_matmul = UNSET; # endif } /* if block cyclic, then use regular algorithm. This is turned on for now * to test block cyclic */ numblocks = pnga_total_blocks(g_c); if(numblocks>=0) { irregular = UNSET; use_NB_matmul = SET; } /**************************************************************** * Get the memory (i.e.static or dynamic) for temporary buffers ****************************************************************/ /* to skip accumulate and exploit data locality: get chunks according to "C" matrix distribution*/ pnga_distribution(g_a, me, loA, hiA); pnga_distribution(g_b, me, loB, hiB); pnga_distribution(g_c, me, loC, hiC); { Integer elems, factor=sizeof(DoubleComplex)/GAsizeofM(atype); short int nbuf=1; DoubleComplex *tmp = NULL; Ichunk = GA_MIN( (hiC[0]-loC[0]+1), (hiA[0]-loA[0]+1) ); Jchunk = GA_MIN( (hiC[1]-loC[1]+1), (hiB[1]-loB[1]+1) ); Kchunk = GA_MIN( (hiA[1]-loA[1]+1), (hiB[0]-loB[0]+1) ); #if KCHUNK_OPTIMIZATION /*works great for m=1000,n=1000,k=4000 kinda cases*/ pnga_distribution(g_a, me, loC, hiC); Kchunk = hiC[1]-loC[1]+1; pnga_distribution(g_b, me, loC, hiC); Kchunk = GA_MIN(Kchunk, (hiC[0]-loC[0]+1)); #endif /* Just to avoid divide by zero error */ if(Ichunk<=0) Ichunk = 1; if(Jchunk<=0) Jchunk = 1; if(Kchunk<=0) Kchunk = 1; { Integer irreg=0; if(Ichunk/Kchunk > GA_ASPECT_RATIO || Kchunk/Ichunk > GA_ASPECT_RATIO || Jchunk/Kchunk > GA_ASPECT_RATIO || Kchunk/Jchunk > GA_ASPECT_RATIO) { irreg = SET; } pnga_pgroup_gop(a_grp, pnga_type_f2c(MT_F_INT), &irreg, (Integer)1, "max"); if(irreg==SET) irregular = SET; } /* If non-blocking, we need 2 temporary buffers for A and B matrix */ if(use_NB_matmul) nbuf = 2; if(!irregular) { tmp = a_ar[0] =a=gai_get_armci_memory(Ichunk,Jchunk,Kchunk, nbuf, atype); if(tmp != NULL) use_armci_memory = SET; } /* get ChunkSize (i.e.BlockSize), that fits in temporary buffer */ gai_get_chunk_size(irregular, &Ichunk, &Jchunk, &Kchunk, &elems, atype, m, n, k, nbuf, use_armci_memory, a_grp); if(tmp == NULL) { /* try once again from armci for new chunk sizes */ tmp = a_ar[0] =a=gai_get_armci_memory(Ichunk,Jchunk,Kchunk, nbuf, atype); if(tmp != NULL) use_armci_memory = SET; } if(tmp == NULL) { /*if armci malloc fails again, then get from MA */ tmp = a_ar[0] = a =(DoubleComplex*) ga_malloc(elems,atype, "GA mulmat bufs"); } if(use_NB_matmul) tmp = a_ar[1] = a_ar[0] + (Ichunk*Kchunk)/factor+1; tmp = b_ar[0] = b = tmp + (Ichunk*Kchunk)/factor + 1; if(use_NB_matmul) tmp = b_ar[1] = b_ar[0] + (Kchunk*Jchunk)/factor+1; c_ar[0] = c = tmp + (Kchunk*Jchunk)/factor + 1; } /** check if there is a need for scaling the data. Note: if beta=0, then need_scaling=0 */ if(atype==C_DCPL){ if((((DoubleComplex*)beta)->real == 0) && (((DoubleComplex*)beta)->imag ==0)) need_scaling =0;} else if(atype==C_SCPL){ if((((SingleComplex*)beta)->real == 0) && (((SingleComplex*)beta)->imag ==0)) need_scaling =0;} else if((atype==C_DBL)){ if(*(DoublePrecision *)beta == 0) need_scaling =0;} else if( *(float*)beta ==0) need_scaling =0; clo[0] = cilo; clo[1] = cjlo; chi[0] = cihi; chi[1] = cjhi; if(need_scaling) pnga_scale_patch(g_c, clo, chi, beta); /******************************************************************** * Parallel Matrix Multiplication Starts Here. * 3 Steps: * 1. Get a chunk of A and B matrix, and store it in local buffer. * 2. Do sequential dgemm. * 3. Put/accumulate the result into C matrix. *********************************************************************/ /* if only one node, then enable the optimized shmem code */ if(use_NB_matmul==UNSET) { gai_matmul_shmem(transa, transb, alpha, beta, atype, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi, Ichunk, Kchunk, Jchunk, a,b,c, need_scaling); } else { if(irregular) gai_matmul_irreg(transa, transb, alpha, beta, atype, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi, Ichunk, Kchunk, Jchunk, a_ar, b_ar, c_ar, need_scaling, irregular); else gai_matmul_regular(transa, transb, alpha, beta, atype, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi, Ichunk, Kchunk, Jchunk, a_ar, b_ar, c_ar, need_scaling, irregular); } a = a_ar[0]; if(use_armci_memory == SET) ARMCI_Free_local(a); else ga_free(a); #if DEBUG_ Integer grp_me; grp_me = pnga_pgroup_nodeid(a_grp); pnga_pgroup_sync(a_grp); if(me==0) check_result(1, transa, transb, alpha, beta, atype, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi); pnga_pgroup_sync(a_grp); #endif GA_POP_NAME; if(local_sync_end)pnga_pgroup_sync(a_grp); } /* This is the old matmul code. It is enabled now for mirrored matrix multiply. It also work for normal matrix/vector multiply with no changes */ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_matmul_mirrored = pnga_matmul_mirrored #endif void pnga_matmul_mirrored(transa, transb, alpha, beta, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi) Integer g_a, ailo, aihi, ajlo, ajhi; /* patch of g_a */ Integer g_b, bilo, bihi, bjlo, bjhi; /* patch of g_b */ Integer g_c, cilo, cihi, cjlo, cjhi; /* patch of g_c */ void *alpha, *beta; char *transa, *transb; { #ifdef STATBUF /* approx. sqrt(2) ratio in chunk size to use the same buffer space */ DoubleComplex a[ICHUNK*KCHUNK], b[KCHUNK*JCHUNK], c[ICHUNK*JCHUNK]; #else DoubleComplex *a, *b, *c; #endif Integer atype, btype, ctype, adim1=0, adim2=0, bdim1=0, bdim2=0, cdim1=0, cdim2=0, dims[2], rank; Integer me= pnga_nodeid(), nproc; Integer i, ijk = 0, i0, i1, j0, j1; Integer ilo, ihi, idim, jlo, jhi, jdim, klo, khi, kdim; Integer n, m, k, adim, bdim=0, cdim; Integer Ichunk, Kchunk, Jchunk; DoubleComplex ONE; SingleComplex ONE_CF; DoublePrecision chunk_cube; Integer min_tasks = 10, max_chunk; int need_scaling=1; Integer ZERO_I = 0, inode, iproc; Integer get_new_B; int local_sync_begin,local_sync_end; BlasInt idim_t, jdim_t, kdim_t, adim_t, bdim_t, cdim_t; Integer clo[2], chi[2]; ONE.real =1.; ONE.imag =0.; ONE_CF.real =1.; ONE_CF.imag =0.; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); GA_PUSH_NAME("ga_matmul_patch"); /* Check to make sure all global arrays are of the same type */ if (!(pnga_is_mirrored(g_a) == pnga_is_mirrored(g_b) && pnga_is_mirrored(g_a) == pnga_is_mirrored(g_c))) { pnga_error("Processors do not match for all arrays",pnga_nnodes()); } if (pnga_is_mirrored(g_a)) { inode = pnga_cluster_nodeid(); nproc = pnga_cluster_nprocs(inode); iproc = me - pnga_cluster_procid(inode, ZERO_I); } else { nproc = pnga_nnodes(); iproc = me; } pnga_inquire(g_a, &atype, &rank, dims); VECTORCHECK(rank, dims, adim1, adim2, ailo, aihi, ajlo, ajhi); pnga_inquire(g_b, &btype, &rank, dims); VECTORCHECK(rank, dims, bdim1, bdim2, bilo, bihi, bjlo, bjhi); pnga_inquire(g_c, &ctype, &rank, dims); VECTORCHECK(rank, dims, cdim1, cdim2, cilo, cihi, cjlo, cjhi); if(atype != btype || atype != ctype ) pnga_error(" types mismatch ", 0L); if(atype != C_DCPL && atype != C_DBL && atype != C_FLOAT && atype != C_SCPL) pnga_error(" type error",atype); /* check if patch indices and dims match */ if (*transa == 'n' || *transa == 'N'){ if (ailo <= 0 || aihi > adim1 || ajlo <= 0 || ajhi > adim2) pnga_error(" g_a indices out of range ", g_a); }else if (ailo <= 0 || aihi > adim2 || ajlo <= 0 || ajhi > adim1) pnga_error(" g_a indices out of range ", g_a); if (*transb == 'n' || *transb == 'N'){ if (bilo <= 0 || bihi > bdim1 || bjlo <= 0 || bjhi > bdim2) pnga_error(" g_b indices out of range ", g_b); }else if (bilo <= 0 || bihi > bdim2 || bjlo <= 0 || bjhi > bdim1) pnga_error(" g_b indices out of range ", g_b); if (cilo <= 0 || cihi > cdim1 || cjlo <= 0 || cjhi > cdim2) pnga_error(" g_c indices out of range ", g_c); /* verify if patch dimensions are consistent */ m = aihi - ailo +1; n = bjhi - bjlo +1; k = ajhi - ajlo +1; if( (cihi - cilo +1) != m) pnga_error(" a & c dims error",m); if( (cjhi - cjlo +1) != n) pnga_error(" b & c dims error",n); if( (bihi - bilo +1) != k) pnga_error(" a & b dims error",k); /* In 32-bit platforms, k*m*n might exceed the "long" range(2^31), eg:k=m=n=1600. So casting the temporary value to "double" helps */ chunk_cube = (k*(double)(m*n)) / (min_tasks * nproc); max_chunk = (Integer)pow(chunk_cube, (DoublePrecision)(1.0/3.0) ); if (max_chunk < 32) max_chunk = 32; #ifdef STATBUF if(atype == C_DBL || atype == C_FLOAT){ Ichunk=D_CHUNK, Kchunk=D_CHUNK, Jchunk=D_CHUNK; }else{ Ichunk=ICHUNK; Kchunk=KCHUNK; Jchunk=JCHUNK; } #else { /** * Find out how much memory we can grab. It will be used in * three chunks, and the result includes only the first one. */ Integer elems, factor = sizeof(DoubleComplex)/GAsizeofM(atype); Ichunk = Jchunk = Kchunk = CHUNK_SIZE; if ( max_chunk > Ichunk) { /*if memory if very limited, performance degrades for large matrices as chunk size is very small, which leads to communication overhead)*/ Integer avail = pnga_memory_avail_type(atype); if (pnga_is_mirrored(g_a)) { fflush(stdout); if (sizeof(Integer)/sizeof(int) > 1) armci_msg_gop_scope(SCOPE_NODE, &avail, 1, "min", ARMCI_LONG); else armci_msg_gop_scope(SCOPE_NODE, &avail, 1, "min", ARMCI_INT); fflush(stdout); } else { fflush(stdout); pnga_gop(pnga_type_f2c(MT_F_INT), &avail, (Integer)1, "min"); } if(availreal == 0) && (((DoubleComplex*)beta)->imag ==0)) need_scaling =0;} else if(atype==C_SCPL){if((((SingleComplex*)beta)->real == 0) && (((SingleComplex*)beta)->imag ==0)) need_scaling =0;} else if((atype==C_DBL)){if(*(DoublePrecision *)beta == 0) need_scaling =0;} else if( *(float*)beta ==0) need_scaling =0; pnga_mask_sync(ZERO_I, ZERO_I); clo[0] = cilo; clo[1] = cjlo; chi[0] = cihi; chi[1] = cjhi; if(need_scaling) pnga_scale_patch(g_c, clo, chi, beta); else pnga_fill_patch(g_c, clo, chi, beta); for(jlo = 0; jlo < n; jlo += Jchunk){ /* loop through columns of g_c patch */ jhi = GA_MIN(n-1, jlo+Jchunk-1); jdim= jhi - jlo +1; for(klo = 0; klo < k; klo += Kchunk){ /* loop cols of g_a patch */ khi = GA_MIN(k-1, klo+Kchunk-1); /* loop rows of g_b patch */ kdim= khi - klo +1; /** Each pass through the outer two loops means we need a different patch of B.*/ get_new_B = TRUE; for(ilo = 0; ilo < m; ilo += Ichunk){ /*loop through rows of g_c patch */ if(ijk%nproc == iproc){ ihi = GA_MIN(m-1, ilo+Ichunk-1); idim= cdim = ihi - ilo +1; if(atype == C_FLOAT) for (i = 0; i < idim*jdim; i++) *(((float*)c)+i)=0; else if(atype == C_DBL) for (i = 0; i < idim*jdim; i++) *(((double*)c)+i)=0; else if(atype == C_SCPL) for (i = 0; i < idim*jdim; i++){ ((SingleComplex*)c)[i].real=0; ((SingleComplex*)c)[i].imag=0; } else for (i = 0; i < idim*jdim; i++){ c[i].real=0;c[i].imag=0;} if (*transa == 'n' || *transa == 'N'){ adim = idim; i0= ailo+ilo; i1= ailo+ihi; j0= ajlo+klo; j1= ajlo+khi; clo[0] = i0; clo[1] = j0; chi[0] = i1; chi[1] = j1; pnga_get(g_a, clo, chi, a, &idim); }else{ adim = kdim; i0= ajlo+klo; i1= ajlo+khi; j0= ailo+ilo; j1= ailo+ihi; clo[0] = i0; clo[1] = j0; chi[0] = i1; chi[1] = j1; pnga_get(g_a, clo, chi, a, &kdim); } /* Avoid rereading B if it is the same patch as last time. */ if(get_new_B) { if (*transb == 'n' || *transb == 'N'){ bdim = kdim; i0= bilo+klo; i1= bilo+khi; j0= bjlo+jlo; j1= bjlo+jhi; clo[0] = i0; clo[1] = j0; chi[0] = i1; chi[1] = j1; pnga_get(g_b, clo, chi, b, &kdim); }else{ bdim = jdim; i0= bjlo+jlo; i1= bjlo+jhi; j0= bilo+klo; j1= bilo+khi; clo[0] = i0; clo[1] = j0; chi[0] = i1; chi[1] = j1; pnga_get(g_b, clo, chi, b, &jdim); } get_new_B = FALSE; /* Until J or K change again */ } idim_t=idim; jdim_t=jdim; kdim_t=kdim; adim_t=adim; bdim_t=bdim; cdim_t=cdim; switch(atype) { case C_FLOAT: BLAS_SGEMM(transa, transb, &idim_t, &jdim_t, &kdim_t, (Real *)alpha, (Real *)a, &adim_t, (Real *)b, &bdim_t, (Real *)&ONE_CF, (Real *)c, &cdim_t); break; case C_DBL: BLAS_DGEMM(transa, transb, &idim_t, &jdim_t, &kdim_t, (DoublePrecision *)alpha, (DoublePrecision *)a, &adim_t, (DoublePrecision *)b, &bdim_t, (DoublePrecision *)&ONE, (DoublePrecision *)c, &cdim_t); break; case C_DCPL: BLAS_ZGEMM(transa, transb, &idim_t, &jdim_t, &kdim_t, (DoubleComplex *)alpha, (DoubleComplex *)a, &adim_t, (DoubleComplex *)b, &bdim_t, (DoubleComplex *)&ONE, (DoubleComplex *)c, &cdim_t); break; case C_SCPL: BLAS_CGEMM(transa, transb, &idim_t, &jdim_t, &kdim_t, (SingleComplex *)alpha, (SingleComplex *)a, &adim_t, (SingleComplex *)b, &bdim_t, (SingleComplex *)&ONE_CF, (SingleComplex *)c, &cdim_t); break; default: pnga_error("ga_matmul_patch: wrong data type", atype); } i0= cilo+ilo; i1= cilo+ihi; j0= cjlo+jlo; j1= cjlo+jhi; if(atype == C_FLOAT || atype == C_SCPL) { clo[0] = i0; clo[1] = j0; chi[0] = i1; chi[1] = j1; pnga_acc(g_c, clo, chi, (float *)c, &cdim, &ONE_CF); } else { clo[0] = i0; clo[1] = j0; chi[0] = i1; chi[1] = j1; pnga_acc(g_c, clo, chi, (DoublePrecision*)c, &cdim, (DoublePrecision*)&ONE); } } ++ijk; } } } #ifndef STATBUF ga_free(a); #endif GA_POP_NAME; if(local_sync_end)pnga_sync(); } #if 0 void gai_matmul_patch(char *transa, char *transb, void *alpha, void *beta, Integer g_a,Integer ailo,Integer aihi,Integer ajlo,Integer ajhi, Integer g_b,Integer bilo,Integer bihi,Integer bjlo,Integer bjhi, Integer g_c,Integer cilo,Integer cihi,Integer cjlo,Integer cjhi) { if(pnga_is_mirrored(g_a)) pnga_matmul_mirrored(transa, transb, alpha, beta, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi); else { _gai_matmul_patch_flag = SET; pnga_matmul(transa, transb, alpha, beta, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi); _gai_matmul_patch_flag = UNSET; } } #endif /*\ select the 2d plane to be used in matrix multiplication \*/ static void gai_setup_2d_patch(Integer rank, char *trans, Integer dims[], Integer lo[], Integer hi[], Integer* ilo, Integer* ihi, Integer* jlo, Integer* jhi, Integer* dim1, Integer* dim2, int* ipos, int* jpos, int *vpos) { int d,e=0; char t='n'; for(d=0; d0 && ++e>2 ) pnga_error("3-D Patch Detected", 0L); *ipos = *jpos = *vpos = -1; for(d=0; dlo[d]) ) { *ipos =d; continue; } if( (*ipos >=0) && (hi[d]>lo[d])) { *jpos =d; break; } } /* we have an ambiguous vector; mark its location */ if (1 == e && *ipos != 0 && *ipos != rank-1) { *vpos = *ipos; } /* if(*ipos >*jpos){Integer t=*ipos; *ipos=*jpos; *jpos=t;} */ /* single element case (trivial) */ if((*ipos <0) && (*jpos <0)){ *ipos =0; *jpos=1; } else{ /* handle almost trivial case of only one dimension with >1 elements */ if(trans == NULL) trans = &t; if(*trans == 'n' || *trans == 'N') { if(*ipos == rank-1) (*ipos)--; /* i cannot be the last dimension */ if(*ipos <0) *ipos = *jpos-1; /* select i dimension based on j */ if(*jpos <0) *jpos = *ipos+1; /* select j dimenison based on i */ } else { if(*ipos <0) *ipos = *jpos-1; if(*jpos <0) { if(*ipos==0) *jpos = *ipos + 1; else *jpos = (*ipos)--; } } } *ilo = lo[*ipos]; *ihi = hi[*ipos]; *jlo = lo[*jpos]; *jhi = hi[*jpos]; *dim1 = dims[*ipos]; *dim2 = dims[*jpos]; #if 0 printf("lo/hi=[%ld:%ld", lo[0], hi[0]); for (d=1; d adim1 || ajlo <= 0 || ajhi > adim2) pnga_error(" g_a indices out of range ", g_a); }else if (ailo <= 0 || aihi > adim2 || ajlo <= 0 || ajhi > adim1) pnga_error(" g_a indices out of range ", g_a); if (*transb == 'n' || *transb == 'N'){ if (bilo <= 0 || bihi > bdim1 || bjlo <= 0 || bjhi > bdim2) pnga_error(" g_b indices out of range ", g_b); }else if (bilo <= 0 || bihi > bdim2 || bjlo <= 0 || bjhi > bdim1) pnga_error(" g_b indices out of range ", g_b); if (cilo <= 0 || cihi > cdim1 || cjlo <= 0 || cjhi > cdim2) pnga_error(" g_c indices out of range ", g_c); /* verify if patch dimensions are consistent */ #define RESET() do { \ m = aihi - ailo +1; \ k = ajhi - ajlo +1; \ k2= bihi - bilo +1; \ n = bjhi - bjlo +1; \ cm= cihi - cilo +1; \ cn= cjhi - cjlo +1; \ } while (0) RESET(); #define SHIFT(L,INC) do { \ L##ipos+=INC; \ L##jpos+=INC; \ L##ilo = L##lo[L##ipos]; \ L##ihi = L##hi[L##ipos]; \ L##jlo = L##lo[L##jpos]; \ L##jhi = L##hi[L##jpos]; \ L##dim1 = L##dims[L##ipos]; \ L##dim2 = L##dims[L##jpos]; \ RESET(); \ } while (0) /* gai_setup_2d_patch may produce ambiguous vectors */ if (!(m==cm && k==k2 && n==cn)) { /* patches don't agree */ if (avpos>=0 && bvpos<0 && cvpos<0) { /* only A is an ambiguous vector */ SHIFT(a,-1); } else if (avpos<0 && bvpos>=0 && cvpos<0) { /* only B is an ambiguous vector */ SHIFT(b,-1); } else if (avpos<0 && bvpos<0 && cvpos>=0) { /* only C is an ambiguous vector */ SHIFT(c,-1); } else if (avpos>=0 && bvpos>=0 && cvpos<0) { /* A and B are ambiguous vectors */ if (m != cm) { SHIFT(a,-1); } if (n != cn) { SHIFT(b,-1); } } else if (avpos>=0 && bvpos<0 && cvpos>=0) { /* A and C are ambiguous vectors */ if (k != k2) { SHIFT(a,-1); } if (n != cn) { SHIFT(c,-1); } } else if (avpos<0 && bvpos>=0 && cvpos>=0) { /* B and C are ambiguous vectors */ if (k != k2) { SHIFT(b,-1); } if (m != cm) { SHIFT(c,-1); } } else if (avpos>=0 && bvpos>=0 && cvpos>=0) { /* A and B and C are ambiguous vectors */ pnga_error("a and b and c ambiguous", 1); } } if( (cihi - cilo +1) != m) pnga_error(" a & c dims error",m); if( (cjhi - cjlo +1) != n) pnga_error(" b & c dims error",n); if( (bihi - bilo +1) != k) pnga_error(" a & b dims error",k); chunk_cube = (k*(double)(m*n)) / (min_tasks * nproc); max_chunk = (Integer)pow(chunk_cube, (DoublePrecision)(1.0/3.0) ); if (max_chunk < 32) max_chunk = 32; #ifdef STATBUF if(atype == C_DBL || atype == C_FLOAT){ Ichunk=D_CHUNK, Kchunk=D_CHUNK, Jchunk=D_CHUNK; }else{ Ichunk=ICHUNK; Kchunk=KCHUNK; Jchunk=JCHUNK; } #else { Integer elems, factor = sizeof(DoubleComplex)/GAsizeofM(atype); Ichunk = Jchunk = Kchunk = CHUNK_SIZE; if ( max_chunk > Ichunk) { /*if memory if very limited, performance degrades for large matrices as chunk size is very small, which leads to communication overhead)*/ Integer avail = pnga_memory_avail_type(atype); pnga_gop(pnga_type_f2c(MT_F_INT), &avail, (Integer)1, "min"); if(availreal == 0) && (((DoubleComplex*)beta)->imag ==0)) need_scaling =0;} else if(atype==C_SCPL){if((((SingleComplex*)beta)->real == 0) && (((SingleComplex*)beta)->imag ==0)) need_scaling =0;} else if((atype==C_DBL)){if(*(DoublePrecision *)beta == 0)need_scaling =0;} else if( *(float*)beta ==0) need_scaling =0; if(need_scaling) pnga_scale_patch(g_c, clo, chi, beta); else pnga_fill_patch(g_c, clo, chi, beta); for(jlo = 0; jlo < n; jlo += Jchunk){ /* loop through columns of g_c patch */ jhi = GA_MIN(n-1, jlo+Jchunk-1); jdim= jhi - jlo +1; for(klo = 0; klo < k; klo += Kchunk){ /* loop cols of g_a patch */ khi = GA_MIN(k-1, klo+Kchunk-1); /* loop rows of g_b patch */ kdim= khi - klo +1; get_new_B = TRUE; for(ilo = 0; ilo < m; ilo += Ichunk){ /*loop through rows of g_c patch */ if(ijk%nproc == iproc){ ihi = GA_MIN(m-1, ilo+Ichunk-1); idim= cdim = ihi - ilo +1; if(atype == C_FLOAT) for (i = 0; i < idim*jdim; i++) *(((float*)c)+i)=0; else if(atype == C_DBL) for (i = 0; i < idim*jdim; i++) *(((double*)c)+i)=0; else if(atype == C_SCPL) for (i = 0; i < idim*jdim; i++){ ((SingleComplex*)c)[i].real=0; ((SingleComplex*)c)[i].imag=0; } else for (i = 0; i < idim*jdim; i++){ c[i].real=0;c[i].imag=0;} if (*transa == 'n' || *transa == 'N'){ adim = idim; i0= ailo+ilo; i1= ailo+ihi; j0= ajlo+klo; j1= ajlo+khi; }else{ adim = kdim; i0= ajlo+klo; i1= ajlo+khi; j0= ailo+ilo; j1= ailo+ihi; } /* ga_get_(g_a, &i0, &i1, &j0, &j1, a, &adim); */ memcpy(tmplo,alo,arank*sizeof(Integer)); memcpy(tmphi,ahi,arank*sizeof(Integer)); SETINT(tmpld,1,arank-1); tmplo[aipos]=i0; tmphi[aipos]=i1; tmplo[ajpos]=j0; tmphi[ajpos]=j1; tmpld[aipos]=i1-i0+1; pnga_get(g_a,tmplo,tmphi,a,tmpld); if(get_new_B) { if (*transb == 'n' || *transb == 'N'){ bdim = kdim; i0= bilo+klo; i1= bilo+khi; j0= bjlo+jlo; j1= bjlo+jhi; }else{ bdim = jdim; i0= bjlo+jlo; i1= bjlo+jhi; j0= bilo+klo; j1= bilo+khi; } /* ga_get_(g_b, &i0, &i1, &j0, &j1, b, &bdim); */ memcpy(tmplo,blo,brank*sizeof(Integer)); memcpy(tmphi,bhi,brank*sizeof(Integer)); SETINT(tmpld,1,brank-1); tmplo[bipos]=i0; tmphi[bipos]=i1; tmplo[bjpos]=j0; tmphi[bjpos]=j1; tmpld[bipos]=i1-i0+1; pnga_get(g_b,tmplo,tmphi,b,tmpld); get_new_B = FALSE; } idim_t=idim; jdim_t=jdim; kdim_t=kdim; adim_t=adim; bdim_t=bdim; cdim_t=cdim; switch(atype) { case C_FLOAT: BLAS_SGEMM(transa, transb, &idim_t, &jdim_t, &kdim_t, (Real *)alpha, (Real *)a, &adim_t, (Real *)b, &bdim_t, (Real *)&ONE_CF, (Real *)c, &cdim_t); break; case C_DBL: BLAS_DGEMM(transa, transb, &idim_t, &jdim_t, &kdim_t, (DoublePrecision *)alpha, (DoublePrecision *)a, &adim_t, (DoublePrecision *)b, &bdim_t, (DoublePrecision *)&ONE, (DoublePrecision *)c, &cdim_t); break; case C_DCPL: BLAS_ZGEMM(transa, transb, &idim_t, &jdim_t, &kdim_t, (DoubleComplex *)alpha, (DoubleComplex *)a, &adim_t, (DoubleComplex *)b, &bdim_t, (DoubleComplex *)&ONE, (DoubleComplex *)c, &cdim_t); break; case C_SCPL: BLAS_CGEMM(transa, transb, &idim_t, &jdim_t, &kdim_t, (SingleComplex *)alpha, (SingleComplex *)a, &adim_t, (SingleComplex *)b, &bdim_t, (SingleComplex *)&ONE_CF, (SingleComplex *)c, &cdim_t); break; default: pnga_error("ga_matmul_patch: wrong data type", atype); } i0= cilo+ilo; i1= cilo+ihi; j0= cjlo+jlo; j1= cjlo+jhi; /* ga_acc_(g_c, &i0, &i1, &j0, &j1, (DoublePrecision*)c, &cdim, (DoublePrecision*)&ONE); */ memcpy(tmplo,clo,crank*sizeof(Integer)); memcpy(tmphi,chi,crank*sizeof(Integer)); SETINT(tmpld,1,crank-1); tmplo[cipos]=i0; tmphi[cipos]=i1; tmplo[cjpos]=j0; tmphi[cjpos]=j1; tmpld[cipos]=i1-i0+1; if(atype == C_FLOAT || atype == C_SCPL) pnga_acc(g_c,tmplo,tmphi,(float *)c,tmpld, &ONE_CF); else pnga_acc(g_c,tmplo,tmphi,c,tmpld,(DoublePrecision*)&ONE); } ++ijk; } } } #ifndef STATBUF ga_free(a); #endif GA_POP_NAME; if(local_sync_end)pnga_sync(); } /** * 1. remove STATBUF * 2. */ ga-5-3/global/src/globalp.h0000640005473000001440000001231311645642252014423 0ustar d3n000users#ifndef _GLOBALP_H_ #define _GLOBALP_H_ #include #include "gaconfig.h" #ifdef __crayx1 #undef CRAY #endif #ifdef FALSE #undef FALSE #endif #ifdef TRUE #undef TRUE #endif #ifdef CRAY_YMP #define FALSE _btol(0) #define TRUE _btol(1) #else #define FALSE (logical) 0 #define TRUE (logical) 1 #endif #if HAVE_WINDOWS_H # include # define sleep(x) Sleep(1000*(x)) #endif #include "macdecls.h" #define GA_OFFSET 1000 /* offset for handle numbering */ /* types/tags of messages used internally by GA */ #define GA_TYPE_SYN GA_MSG_OFFSET + 1 #define GA_TYPE_GSM GA_MSG_OFFSET + 5 #define GA_TYPE_GOP GA_MSG_OFFSET + 15 #define GA_TYPE_BRD GA_MSG_OFFSET + 16 /* GA operation ids */ #define GA_OP_GET 1 /* Get */ #define GA_OP_END 2 /* Terminate */ #define GA_OP_CRE 3 /* Create */ #define GA_OP_PUT 4 /* Put */ #define GA_OP_ACC 5 /* Accumulate */ #define GA_OP_DES 6 /* Destroy */ #define GA_OP_DUP 7 /* Duplicate */ #define GA_OP_ZER 8 /* Zero */ #define GA_OP_DDT 9 /* dot product */ #define GA_OP_SCT 10 /* scatter */ #define GA_OP_GAT 11 /* gather */ #define GA_OP_RDI 15 /* Integer read and increment */ #define GA_OP_ACK 16 /* acknowledgment */ #define GA_OP_LCK 17 /* acquire lock */ #define GA_OP_UNL 18 /* release lock */ #ifdef ENABLE_TRACE static Integer op_code; #endif #define GA_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define GA_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define GA_ABS(a) (((a) >= 0) ? (a) : (-(a))) typedef struct ga_typeinfo_t { int active; size_t size; } ga_typeinfo_t; extern ga_typeinfo_t ga_types[]; #define GA_TYPES_MAX 256 #define GA_TYPES_RESERVED 17 /**Should match num lines initialized in ga_types struct*/ #define GAtypebuiltinM(_type) ((_type)>=MT_BASE && (_type)<(MT_BASE+GA_TYPES_RESERVED)) #define GAsizeofM(_type) ga_types[(_type)-MT_BASE].size #define GAvalidtypeM(_type) ((_type)>=MT_BASE && (_type)<(MT_BASE+GA_TYPES_MAX) && ga_types[(_type)-MT_BASE].active!=0) #define NAME_STACK_LEN 10 #define PAGE_SIZE 4096 struct ga_stat_t { long numcre; long numdes; long numget; long numput; long numacc; long numsca; long numgat; long numrdi; long numser; long curmem; long maxmem; long numget_procs; long numput_procs; long numacc_procs; long numsca_procs; long numgat_procs; }; struct ga_bytes_t{ double acctot; double accloc; double gettot; double getloc; double puttot; double putloc; double rditot; double rdiloc; double gattot; double gatloc; double scatot; double scaloc; }; #define STAT_AR_SZ sizeof(ga_stat_t)/sizeof(long) extern long *GAstat_arr; extern struct ga_stat_t GAstat; extern struct ga_bytes_t GAbytes; extern char *GA_name_stack[NAME_STACK_LEN]; /* stack for names of GA ops */ extern int GA_stack_size; extern int _ga_sync_begin; extern int _ga_sync_end; extern int *_ga_argc; extern char ***_ga_argv; #define GA_PUSH_NAME(name) (GA_name_stack[GA_stack_size++] = (name)) #define GA_POP_NAME (GA_stack_size--) /* periodic operations */ #define PERIODIC_GET 1 #define PERIODIC_PUT 2 #define PERIODIC_ACC 3 #define FLUSH_CACHE #ifdef CRAY_T3D # define ALLIGN_SIZE 32 #else # define ALLIGN_SIZE 128 #endif #define allign__(n, SIZE) (((n)%SIZE) ? (n)+SIZE - (n)%SIZE: (n)) #define allign_size(n) allign__((long)(n), ALLIGN_SIZE) #define allign_page(n) allign__((long)(n), PAGE_SIZE) extern void ga_free(void *ptr); extern void* ga_malloc(Integer nelem, int type, char *name); extern void gai_init_onesided(); extern void gai_finalize_onesided(); extern void gai_print_subscript(char *pre,int ndim, Integer subscript[], char* post); extern Integer GAsizeof(Integer type); extern void ga_sort_gath(Integer *pn, Integer *i, Integer *j, Integer *base); extern void ga_sort_permutation(Integer *pn, Integer *index, Integer *base); extern void ga_sort_scat(Integer *pn, void *v, Integer *i, Integer *j, Integer *base, Integer type); extern void gai_hsort(Integer *list, int num); extern void ga_init_nbhandle(Integer *nbhandle); extern int nga_test_internal(Integer *nbhandle); extern int nga_wait_internal(Integer *nbhandle); extern int ga_icheckpoint_init(Integer *gas, int num); extern int ga_icheckpoint(Integer *gas, int num); extern int ga_irecover(int rid); extern int ga_icheckpoint_finalize(int g_a); extern void ga_checkpoint_arrays(Integer *gas,int num); extern int ga_recover_arrays(Integer *gas, int num); extern void set_ga_group_is_for_ft(int val); extern void ga_set_spare_procs(int *spare); #endif /* _GLOBALP_H_ */ ga-5-3/global/src/elem_alg.c0000640005473000001440000031463112073076423014550 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /************************************************************** File: elem.alg.c Elementwise operations on patches and whole arrays Author: Limin Zhang, Ph.D. Mathematics Department Columbia Basin College Pasco, WA 99301 Limin.Zhang@cbc2.org Mentor: Jarek Nieplocha. Environmental Molecular Science Laboratory Pacific Northwest National Laboratory Richland, WA 99352 Date: 1/18/2002 Purpose: to design and implement some interfaces between TAO and global arrays. Modified 3/2004 By Doug Baxter to increase robustness. **************************************************************/ #include "globalp.h" #if HAVE_MATH_H # include #endif #include "abstract_ops.h" #include "ga-papi.h" #include "ga-wapi.h" #ifndef GA_HALF_MAX_INT #define GA_HALF_MAX_INT ((((int)1) << ((int)(8*sizeof(int))-2)) - 1) #endif #ifndef GA_INFINITY_I #define GA_INFINITY_I (GA_HALF_MAX_INT + GA_HALF_MAX_INT + 1) /* Original value below. Seemed too small arbitrarily. #define GA_INFINITY_I 100000 */ #endif #ifndef GA_NEGATIVE_INFINITY_I #define GA_NEGATIVE_INFINITY_I (- GA_INFINITY_I) /* Original value below. Seemed too small arbitrarily. #define GA_NEGATIVE_INFINITY_I -100000 */ #endif #ifndef GA_HALF_MAX_LONG #define GA_HALF_MAX_LONG ((((long)1) << ((int)(8*sizeof(long))-2)) - 1) #endif #ifndef GA_INFINITY_L #define GA_INFINITY_L (GA_HALF_MAX_LONG + GA_HALF_MAX_LONG + 1) /* Original value was #define GA_INFINITY_L 100000 */ #endif #ifndef GA_NEGATIVE_INFINITY_L #define GA_NEGATIVE_INFINITY_L (- GA_INFINITY_L) #endif /* Original value was: #define GA_NEGATIVE_INFINITY_L -100000 */ /* Modified by Doug Baxter 01/24/04 to distinguish between Double inifinity and float infinity. #ifndef GA_INFINITY #define GA_INFINITY 1.0e20 #endif #ifndef GA_NEGATIVE_INFINITY #define GA_NEGATIVE_INFINITY -1.0e20 #endif */ #ifndef GA_INFINITY_F #define GA_INFINITY_F 1.0e37 #endif /* Original value below. #define GA_INFINITY_F 1.0e20 */ #ifndef GA_NEGATIVE_INFINITY_F #define GA_NEGATIVE_INFINITY_F -1.0e37 #endif /* Original value below. #define GA_NEGATIVE_INFINITY_F -1.0e20 */ #ifndef GA_INFINITY_D #define GA_INFINITY_D 1.0e307 #endif /* Original value below. #define GA_INFINITY_D 1.0e20 */ #ifndef GA_NEGATIVE_INFINITY_D #define GA_NEGATIVE_INFINITY_D -1.0e307 #endif /* Original value below. #define GA_NEGATIVE_INFINITY_D -1.0e20 */ /* End of 01/24/04 Modification. Perhaps it would be more appropriate to have GA_INFINITY_D BE 1.0e307 These ranges make assumptions about the data. */ #define OP_ABS 0 #define OP_ADD_CONST 1 #define OP_RECIP 2 #define OP_ELEM_MULT 3 #define OP_ELEM_DIV 4 #define OP_ELEM_MAX 5 #define OP_ELEM_MIN 6 #define OP_STEPMAX 7 #define OP_STEPBOUNDINFO 8 #define OP_ELEM_SDIV 9 #define OP_ELEM_SDIV2 10 #define OP_STEP_MASK 11 #define OP_FILL 100 /*The OP_FILL is not currently in use */ int debug_gai_oper_elem = 1; static void do_stepboundinfo(void *ptr, int nelem, int type) /*look at elements one by one and replace the positive infinity with negative infinity */ { int i; switch (type){ int *ia; double *da; float *fa; long *la; case C_DBL: /*Only double data type will be handled for TAO/GA project*/ da = (double *) ptr; for(i=0;i=GA_INFINITY_D) da[i]=-GA_INFINITY_D; break; case C_INT: /* This block added 01/24/04 */ ia = (int *) ptr; for (i=0;i= GA_INFINITY_I) ia[i] = GA_NEGATIVE_INFINITY_I; break; case C_DCPL: case C_SCPL: /* This operation is not well defined for complex numbers . This statement added when drop through behavior changed by adding code for C_FLOAT and C_LONG cases below. 01/24/04 */ pnga_error("do_stepboundinfo:wrong data type",type); case C_FLOAT: /* This case added 01/24/04 */ fa = (float *) ptr; for (i=0;i= GA_INFINITY_F) fa[i] = GA_NEGATIVE_INFINITY_F; break; case C_LONG: /* This case added 01/24/04 */ la = (long *) ptr; for (i=0;i= GA_INFINITY_L) la[i] = GA_NEGATIVE_INFINITY_L; break; default: pnga_error("do_stepboundinfo:wrong data type",type); } } static void do_stepmax(void *ptr, int nelem, int type) /* Look at elements one by one and replace the positive with negative infinity. */ { int i; switch (type){ int *ia,i_0; double *da,d_0; float *fa,f_0; long *la,l_0; case C_DBL: /*Only double data type will be handled for TAO/GA project*/ da = (double *) ptr; d_0 = (double) 0.0; /* Modified 01/24/04 to use _D ending. */ for(i=0;id_0) da[i]=-GA_INFINITY_D; break; case C_INT: /* Thix case added 01/24/04*/ ia = (int *) ptr; i_0 = (int)0; for(i=0;ii_0)ia[i]=-GA_INFINITY_I; break; case C_DCPL: case C_SCPL: /* This operation is not well defined for complex numbers . This statement added when drop through behavior changed by adding code for C_FLOAT and C_LONG cases below. 01/24/04 */ pnga_error("do_stepmax:wrong data type",type); case C_FLOAT: /* Thix case added 01/24/04*/ fa = (float *) ptr; f_0 = (float) 0.0; for(i=0;if_0) fa[i]=-GA_INFINITY_F; break; case C_LONG: /* Thix case added 01/24/04*/ la = (long *) ptr; l_0 = (long)0; for(i=0;il_0) la[i]=-GA_INFINITY_L; break; default: pnga_error("do_stepmax:wrong data type",type); } } static void do_abs(void *ptr, int nelem, int type) { int i; double x2; float sx2; switch (type){ int *ia; double *da; float *fa; DoubleComplex *ca,val; SingleComplex *cfa,cval; long *la; case C_INT: ia = (int *)ptr; for(i=0;i= GA_ABS(val.imag)) { if (val.real == (double)0.0) { ca[i].real = (double)0.0; } else { x2 = val.imag/val.real; ca[i].real = GA_ABS(val.real)*sqrt(1.0+(x2*x2)); } } else { x2 = val.real/val.imag; ca[i].real = GA_ABS(val.imag)*sqrt(1.0+(x2*x2)); } #endif ca[i].imag=(double)0.0; } break; case C_SCPL: cfa = (SingleComplex *) ptr; for(i=0;i= GA_ABS(cval.imag)) { if (cval.real == 0.0f) { cfa[i].real = 0.0f; } else { sx2 = cval.imag/cval.real; cfa[i].real = GA_ABS(cval.real)*sqrt(1.0f+(sx2*sx2)); } } else { sx2 = cval.real/cval.imag; cfa[i].real = GA_ABS(cval.imag)*sqrt(1.0f+(sx2*sx2)); } #endif cfa[i].imag=0.0f; } break; case C_DBL: da = (double *) ptr; for(i=0;i= magi) { if (magr != ((double)0.0)) { c = x2/x1; d = ((double)1.0)/((((double)1.0) + (c*c))*x1); ca[i].real = d; ca[i].imag = -c*d; } else { pnga_error("zero value at index",i); } } else { c = x1/x2; d = ((double)1.0)/((((double)1.0) + (c*c))*x2); ca[i].real = c*d; ca[i].imag = -d; } /* printf(" do_recip ca[%d].real = %le, ca[%d].imag = %le\n", i,ca[i].real,i,ca[i].imag); */ } break; case C_SCPL: cfa = (SingleComplex *) ptr; for(i=0;i= smagi) { if (smagr != ((float)0.0)) { sc = sx2/sx1; sd = ((float)1.0)/((((float)1.0) + (sc*sc))*sx1); cfa[i].real = sd; cfa[i].imag = -sc*sd; } else { pnga_error("zero value at index",i); } } else { sc = sx1/sx2; sd = ((float)1.0)/((((float)1.0) + (sc*sc))*sx2); cfa[i].real = sc*sd; cfa[i].imag = -sd; } /* printf(" do_recip ca[%d].real = %le, ca[%d].imag = %le\n", i,ca[i].real,i,ca[i].imag); */ } break; case C_DBL: da = (double *) ptr; for(i=0;i (hiA[j]-loA[j])) bvalue[j] = 0; } switch(type){ case C_INT: temp=((int*)data_ptr)+idx; break; case C_DCPL: temp=((DoubleComplex*)data_ptr)+idx; break; case C_SCPL: temp=((SingleComplex*)data_ptr)+idx; break; case C_DBL: temp=((double*)data_ptr)+idx; break; case C_FLOAT: temp=((float*)data_ptr)+idx; break; case C_LONG: temp=((long *)data_ptr)+idx; break; default: pnga_error("wrong data type.",type); } switch(op){ case OP_ABS: do_abs(temp ,hiA[0] -loA[0] +1, type); break; break; case OP_ADD_CONST: do_add_const(temp ,hiA[0] -loA[0] +1, type, scalar); break; case OP_RECIP: do_recip(temp ,hiA[0] -loA[0] +1, type); break; break; default: pnga_error("bad operation",op); } } } static void gai_oper_elem(Integer g_a, Integer *lo, Integer *hi, void *scalar, Integer op) { Integer ndim, dims[MAXDIM], type; Integer loA[MAXDIM], hiA[MAXDIM], ld[MAXDIM]; void /* *temp,*/ *data_ptr; Integer me= pnga_nodeid(); Integer num_blocks; int local_sync_begin,local_sync_end; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); pnga_check_handle(g_a, "gai_oper_elem"); GA_PUSH_NAME("gai_oper_elem"); pnga_inquire(g_a, &type, &ndim, dims); num_blocks = pnga_total_blocks(g_a); if (num_blocks < 0) { /* get limits of VISIBLE patch */ pnga_distribution(g_a, me, loA, hiA); /* determine subset of my local patch to access */ /* Output is in loA and hiA */ if(pnga_patch_intersect(lo, hi, loA, hiA, ndim)){ /* get data_ptr to corner of patch */ /* ld are leading dimensions INCLUDING ghost cells */ pnga_access_ptr(g_a, loA, hiA, &data_ptr, ld); /* perform operation on all elements in local patch */ ngai_do_oper_elem(type, ndim, loA, hiA, ld, data_ptr, scalar, op); /* release access to the data */ pnga_release_update(g_a, loA, hiA); } } else { Integer offset, i, j, jtmp, chk; Integer loS[MAXDIM]; Integer nproc = pnga_nnodes(); /* using simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(g_a)){ for (i=me; i dims[i]) hiA[i] = dims[i]; if (hiA[i] < loA[i]) chk = 0; } /* loA is changed by pnga_patch_intersect, so save a copy */ for (j=0; j= blocks[i] && i= GA_ABS(bImag)) { if (bReal != (double)0.0) { x1 = bImag/bReal; /* So x1 <= 1 */ x2 = ((double)1.0)/(bReal*(((double)1.0)+(x1*x1))); ((DoubleComplex*)pC)[i].real = (aReal + aImag*x1)*x2; ((DoubleComplex*)pC)[i].imag = (aImag - aReal*x1)*x2; } else{ pnga_error("zero divisor ",bReal); } } else { x1 = bReal/bImag; /* So x1 <= 1 */ x2 = ((double)1.0)/(bImag*(((double)1.0)+(x1*x1))); ((DoubleComplex*)pC)[i].real = (aReal*x1 + aImag)*x2; ((DoubleComplex*)pC)[i].imag = (aImag*x1 - aReal)*x2; } } break; case C_SCPL: for(i = 0; i= GA_ABS(bImag)) { if (bReal != (float)0.0) { x1 = bImag/bReal; /* So x1 <= 1 */ x2 = ((float)1.0)/(bReal*(((float)1.0)+(x1*x1))); ((SingleComplex*)pC)[i].real = (aReal + aImag*x1)*x2; ((SingleComplex*)pC)[i].imag = (aImag - aReal*x1)*x2; } else{ pnga_error("zero divisor ",bReal); } } else { x1 = bReal/bImag; /* So x1 <= 1 */ x2 = ((float)1.0)/(bImag*(((float)1.0)+(x1*x1))); ((SingleComplex*)pC)[i].real = (aReal*x1 + aImag)*x2; ((SingleComplex*)pC)[i].imag = (aImag*x1 - aReal)*x2; } } break; case C_INT: for(i = 0; i=d_0) { ((double*)pC)[i]= GA_INFINITY_D; } else { ((double*)pC)[i]= d_0; } } else { if(((double*)pB)[i]!=d_0) ((double*)pC)[i]= ((double*)pA)[i]/((double*)pB)[i]; else{ /* if b is zero an infinite number could be added without changing the sign of a. */ ((double*)pC)[i]= GA_INFINITY_D; } } } break; case C_DCPL: pnga_error(" do_step_divide called with type C_DCPL",C_DCPL); break; case C_SCPL: pnga_error(" do_step_divide called with type C_SCPL",C_SCPL); break; case C_INT: i_0 = (int)0; for(i = 0; i=i_0) { ((int*)pC)[i]=GA_INFINITY_I; } else { ((int*)pC)[i]=i_0; } } else { if(((int*)pB)[i]!=i_0) ((int*)pC)[i] = ((int*)pA)[i]/((int*)pB)[i]; else{ ((int*)pC)[i]=GA_INFINITY_I; } } } break; case C_FLOAT: f_0 = (float)0.0; for(i = 0; i=f_0) { ((float*)pC)[i]= GA_INFINITY_F; } else { ((float*)pC)[i]= f_0; } } else { if(((float*)pB)[i]!=f_0) { ((float*)pC)[i]= ((float*)pA)[i]/((float*)pB)[i]; } else { /* _F added 01/24/04 */ ((float*)pC)[i]= GA_INFINITY_F; } } } break; case C_LONG: l_0 = (long)0; for(i = 0; i=l_0) { ((long *)pC)[i] = GA_INFINITY_L; } else { ((long *)pC)[i] = l_0; } } else { if(((long *)pB)[i]!=l_0) ((long *)pC)[i]= ((long *)pA)[i]/((long *)pB)[i]; else{ ((long *)pC)[i] = GA_INFINITY_L; } } } break; default: pnga_error(" wrong data type ",type); } } static void do_stepb_divide(void *pA, void *pB, void *pC, Integer nelems, Integer type){ /* Elementwise divide, not aborting on a zero denominator, but returning an infinity. If an element in the numerator vector (PA) is zero, then infinity is returned if the corresponding denominator element is non-negative, else zero is returned for that element. DJB 4/02/04 */ Integer i; double d_0; long l_0; float f_0; Integer i_0; d_0 = (double)0.0; l_0 = (long)0; f_0 = (float)0.0; i_0 = (int)0; switch(type){ case C_DBL: for(i = 0; id_0) { ((double*)pC)[i]= d_0; } else { ((double*)pC)[i]= GA_INFINITY_D; } } else { if(((double*)pB)[i]!=d_0) ((double*)pC)[i]= ((double*)pA)[i]/((double*)pB)[i]; else{ /* if b is zero an infinite number could be added without changing the sign of a. */ ((double*)pC)[i]= GA_INFINITY_D; } } } break; case C_DCPL: pnga_error(" do_stepb_divide called with type C_DCPL",C_DCPL); break; case C_SCPL: pnga_error(" do_stepb_divide called with type C_SCPL",C_SCPL); break; case C_INT: i_0 = (int)0; for(i = 0; ii_0) { ((int*)pC)[i]=i_0; } else { ((int*)pC)[i]=GA_INFINITY_I; } } else { if(((int*)pB)[i]!=i_0) ((int*)pC)[i] = ((int*)pA)[i]/((int*)pB)[i]; else{ ((int*)pC)[i]=GA_INFINITY_I; } } } break; case C_FLOAT: f_0 = (float)0.0; for(i = 0; if_0) { ((float*)pC)[i]= f_0; } else { ((float*)pC)[i]= GA_INFINITY_F; } } else { if(((float*)pB)[i]!=f_0) { ((float*)pC)[i]= ((float*)pA)[i]/((float*)pB)[i]; } else { /* _F added 01/24/04 */ ((float*)pC)[i]= GA_INFINITY_F; } } } break; case C_LONG: l_0 = (long)0; for(i = 0; il_0) { ((long *)pC)[i] = l_0; } else { ((long *)pC)[i] = GA_INFINITY_L; } } else { if(((long *)pB)[i]!=l_0) ((long *)pC)[i]= ((long *)pA)[i]/((long *)pB)[i]; else{ ((long *)pC)[i] = GA_INFINITY_L; } } } break; default: pnga_error(" do_stepb_divide: wrong data type ",type); } } static void do_step_mask(void *pA, void *pB, void *pC, Integer nelems, Integer type){ /* Set vector C to vector B wherever vector A is nonzero, and to zero wherever vector A is zero. */ Integer i; switch(type){ case C_DBL: for(i = 0; itemp2){ ((DoubleComplex*)pC)[i].real=((DoubleComplex*)pA)[i].real; ((DoubleComplex*)pC)[i].imag=((DoubleComplex*)pA)[i].imag; } else{ ((DoubleComplex*)pC)[i].real=((DoubleComplex*)pB)[i].real; ((DoubleComplex*)pC)[i].imag=((DoubleComplex*)pB)[i].imag; } } } break; case C_SCPL: for(i = 0; itemp2){ ((SingleComplex*)pC)[i].real=((SingleComplex*)pA)[i].real; ((SingleComplex*)pC)[i].imag=((SingleComplex*)pA)[i].imag; } else{ ((SingleComplex*)pC)[i].real=((SingleComplex*)pB)[i].real; ((SingleComplex*)pC)[i].imag=((SingleComplex*)pB)[i].imag; } } } break; case C_INT: for(i = 0; i (hiC[j]-loC[j])) bvalue[j] = 0; } switch(atype){ case C_DBL: tempA=((double*)A_ptr)+idx; tempB=((double*)B_ptr)+idx; tempC=((double*)C_ptr)+idx; break; case C_DCPL: tempA=((DoubleComplex*)A_ptr)+idx; tempB=((DoubleComplex*)B_ptr)+idx; tempC=((DoubleComplex*)C_ptr)+idx; break; case C_SCPL: tempA=((SingleComplex*)A_ptr)+idx; tempB=((SingleComplex*)B_ptr)+idx; tempC=((SingleComplex*)C_ptr)+idx; break; case C_INT: tempA=((int*)A_ptr)+idx; tempB=((int*)B_ptr)+idx; tempC=((int*)C_ptr)+idx; break; case C_FLOAT: tempA=((float*)A_ptr)+idx; tempB=((float*)B_ptr)+idx; tempC=((float*)C_ptr)+idx; break; case C_LONG: tempA=((long *)A_ptr)+idx; tempB=((long *)B_ptr)+idx; tempC=((long *)C_ptr)+idx; break; default: pnga_error(" wrong data type ",atype); } switch((int)op) { case OP_ELEM_MULT: do_multiply(tempA,tempB,tempC,hiC[0]-loC[0]+1,atype); break; case OP_ELEM_DIV: do_divide(tempA,tempB,tempC,hiC[0]-loC[0]+1,atype); break; case OP_ELEM_SDIV: do_step_divide(tempA,tempB,tempC,hiC[0]-loC[0]+1,atype); break; case OP_ELEM_SDIV2: do_stepb_divide(tempA,tempB,tempC,hiC[0]-loC[0]+1,atype); break; case OP_STEP_MASK: do_step_mask(tempA,tempB,tempC,hiC[0]-loC[0]+1,atype); break; case OP_ELEM_MAX: do_maximum(tempA,tempB,tempC,hiC[0]-loC[0]+1,atype); break; case OP_ELEM_MIN: do_minimum(tempA,tempB,tempC,hiC[0]-loC[0]+1,atype); break; default: printf("op : OP_ELEM_MULT = %d:%d\n", op, OP_ELEM_MULT); pnga_error(" wrong operation ",op); } } } /*\ generic operation of two patches \*/ static void ngai_elem2_patch_(g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi, op) Integer g_a, *alo, *ahi; /* patch of g_a */ Integer g_b, *blo, *bhi; /* patch of g_b */ Integer g_c, *clo, *chi; /* patch of g_c */ int op; /* operation to be perform between g_a and g_b */ { Integer i, j; Integer compatible; Integer atype, btype, ctype; Integer andim, adims[MAXDIM], bndim, bdims[MAXDIM], cndim, cdims[MAXDIM]; Integer loA[MAXDIM], hiA[MAXDIM], ldA[MAXDIM]; Integer loB[MAXDIM], hiB[MAXDIM], ldB[MAXDIM]; Integer loC[MAXDIM], hiC[MAXDIM], ldC[MAXDIM]; void *A_ptr, *B_ptr, *C_ptr; Integer idx, n1dim; Integer atotal, btotal; Integer g_A = g_a, g_B = g_b; Integer num_blocks_a, num_blocks_b, num_blocks_c; Integer me= pnga_nodeid(), A_created=0, B_created=0; char *tempname = "temp", notrans='n'; int local_sync_begin,local_sync_end; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); pnga_check_handle(g_a, "gai_elem2_patch_"); GA_PUSH_NAME("ngai_elem2_patch_"); pnga_inquire(g_a, &atype, &andim, adims); pnga_inquire(g_b, &btype, &bndim, bdims); pnga_inquire(g_c, &ctype, &cndim, cdims); if(atype != btype || atype != ctype ) pnga_error(" types mismatch ", 0L); /* check if patch indices and dims match */ for(i=0; i adims[i]) pnga_error("g_a indices out of range ", g_a); for(i=0; i bdims[i]) pnga_error("g_b indices out of range ", g_b); for(i=0; i cdims[i]) pnga_error("g_c indices out of range ", g_c); /* check if numbers of elements in patches match each other */ n1dim = 1; for(i=0; i bndim) cndim = bndim; if(andim < bndim) cndim = andim; if(!pnga_comp_patch(andim, loA, hiA, cndim, loC, hiC)) pnga_error(" A patch mismatch ", g_A); if(!pnga_comp_patch(bndim, loB, hiB, cndim, loC, hiC)) pnga_error(" B patch mismatch ", g_B); /* determine subsets of my patches to access */ if (pnga_patch_intersect(clo, chi, loC, hiC, cndim)){ pnga_access_ptr(g_A, loC, hiC, &A_ptr, ldA); pnga_access_ptr(g_B, loC, hiC, &B_ptr, ldB); pnga_access_ptr(g_c, loC, hiC, &C_ptr, ldC); /* compute "local" operation accoording to op */ ngai_do_elem2_oper(atype, cndim, loC, hiC, ldC, A_ptr, B_ptr, C_ptr, op); /* release access to the data */ pnga_release (g_A, loC, hiC); pnga_release (g_B, loC, hiC); pnga_release_update(g_c, loC, hiC); } } else { /* create copies of arrays A and B that are identically distributed as C*/ if (!pnga_duplicate(g_c, &g_A, tempname)) pnga_error("ga_dadd_patch: dup failed", 0L); pnga_copy_patch(¬rans, g_a, alo, ahi, g_A, clo, chi); andim = cndim; A_created = 1; if (!pnga_duplicate(g_c, &g_B, tempname)) pnga_error("ga_dadd_patch: dup failed", 0L); pnga_copy_patch(¬rans, g_b, blo, bhi, g_B, clo, chi); bndim = cndim; B_created = 1; /* C is normally distributed so just add copies together for regular arrays */ if (num_blocks_c < 0) { pnga_distribution(g_c, me, loC, hiC); if(andim > bndim) cndim = bndim; if(andim < bndim) cndim = andim; if (pnga_patch_intersect(clo, chi, loC, hiC, cndim)){ pnga_access_ptr(g_A, loC, hiC, &A_ptr, ldA); pnga_access_ptr(g_B, loC, hiC, &B_ptr, ldB); pnga_access_ptr(g_c, loC, hiC, &C_ptr, ldC); /* compute "local" operation accoording to op */ ngai_do_elem2_oper(atype, cndim, loC, hiC, ldC, A_ptr, B_ptr, C_ptr, op); /* release access to the data */ pnga_release (g_A, loC, hiC); pnga_release (g_B, loC, hiC); pnga_release_update(g_c, loC, hiC); } } else { Integer lod[MAXDIM]; /* Integer hid[MAXDIM]; */ /* Integer chk; */ Integer offset, last, jtot; if (!pnga_uses_proc_grid(g_c)) { Integer nproc = pnga_nnodes(); for (idx = me; idx < num_blocks_c; idx += nproc) { pnga_distribution(g_c, idx, loC, hiC); /* make temporary copies of loC and hiC since pnga_patch_intersect destroys original versions */ for (j=0; j cdims[i]) hiC[i] = cdims[i]; /* if (hiC[i] < loC[i]) chk = 0; */ } /* make temporary copies of loC and hiC since pnga_patch_intersect destroys original versions */ for (j=0; j= blocks[i] && i (hiA[j]-loA[j])) bvalue[j] = 0; } switch(atype){ case C_DBL: tempA=((double*)A_ptr)+idx; break; case C_DCPL: case C_SCPL: pnga_error(" ngai_elem3_patch_: wrong data type ",atype); break; case C_INT: tempA=((int*)A_ptr)+idx; break; case C_FLOAT: tempA=((float*)A_ptr)+idx; break; case C_LONG: tempA=((long *)A_ptr)+idx; break; default: pnga_error(" ngai_elem3_patch_: wrong data type ",atype); } switch(op){ case OP_STEPMAX: do_stepmax(tempA,hiA[0]-loA[0]+1, atype); break; case OP_STEPBOUNDINFO: do_stepboundinfo(tempA,hiA[0]-loA[0]+1, atype); break; default: pnga_error(" wrong operation ",op); } } } static void ngai_elem3_patch_(Integer g_a, Integer *alo, Integer *ahi, int op) /*do some preprocess jobs for stepMax and stepMax2*/ { Integer i; Integer atype; Integer andim, adims[MAXDIM]; Integer loA[MAXDIM], hiA[MAXDIM], ldA[MAXDIM]; void *A_ptr; Integer me= pnga_nodeid(); Integer num_blocks; int local_sync_begin,local_sync_end; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); pnga_check_handle(g_a, "gai_elem3_patch_"); GA_PUSH_NAME("ngai_elem3_patch_"); pnga_inquire(g_a, &atype, &andim, adims); num_blocks = pnga_total_blocks(g_a); /* check if patch indices and dims match */ for(i=0; i adims[i]) pnga_error("g_a indices out of range ", g_a); if (num_blocks < 0) { /* find out coordinates of patches of g_a, g_b and g_c that I own */ pnga_distribution(g_a, me, loA, hiA); /* determine subsets of my patches to access */ if (pnga_patch_intersect(alo, ahi, loA, hiA, andim)){ pnga_access_ptr(g_a, loA, hiA, &A_ptr, ldA); /* compute "local" operation accoording to op */ ngai_do_elem3_patch(atype, andim, loA, hiA, ldA, A_ptr, op); /* release access to the data */ pnga_release (g_a, loA, hiA); } } else { Integer offset, j, jtmp, chk; Integer loS[MAXDIM], nproc; nproc = pnga_nnodes(); /* using simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(g_a)){ for (i=me; i adims[i]) hiA[i] = adims[i]; } /* loA is changed by pnga_patch_intersect, so * save a copy */ for (j=0; j= blocks[i] && i (hiA[j]-loA[j])) bvalue[j] = 0; } switch(atype){ case C_DBL: /*double is the only type that is handled for Tao/GA project*/ /* DJB modification to add types int, float and long. This operation does not make sense for complex. */ tempA=((double*)A_ptr)+idx; for(j=0;j adims[i]) pnga_error("g_a indices out of range ", g_a); if (num_blocks < 0) { /* find out coordinates of patches of g_a, g_b and g_c that I own */ pnga_distribution(g_a, me, loA, hiA); iretval = 0; /* determine subsets of my patches to access */ if (pnga_patch_intersect(alo, ahi, loA, hiA, andim)){ pnga_access_ptr(g_a, loA, hiA, &A_ptr, ldA); ngai_has_negative_element(atype, andim, loA, hiA, ldA, A_ptr, &iretval); /* release access to the data */ pnga_release (g_a, loA, hiA); } } else { Integer offset, j, jtmp, chk; Integer loS[MAXDIM], nproc; nproc = pnga_nnodes(); /* using simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(g_a)){ for (i=me; i adims[i]) hiA[i] = adims[i]; } /* loA is changed by pnga_patch_intersect, so * save a copy */ for (j=0; j= blocks[i] && i xxdims[i]) pnga_error("ga_elem_step_bound_info_patch: g_a indices out of range ", g_xx); for(i=0; i vvdims[i]) pnga_error("ga_elem_step_bound_info_patch: g_a indices out of range ", g_vv); for(i=0; i xldims[i]) pnga_error("ga_elem_step_bound_info_patch: g_a indices out of range ", g_xxll); for(i=0; i xudims[i]) pnga_error("ga_elem_step_bound_info_patch: g_a indices out of range ", g_xxuu); /* check if numbers of elements in patches match each other */ xxtotal = 1; for(i=0; i xx.", -1); /* Then compute t = positve elements of vv */ pnga_zero(g_T); pnga_elem_maximum(g_vv,g_T,g_T); /* Then, compute (xu-xx)/vv */ pnga_elem_stepb_divide_patch(g_S, xxlo, xxhi, g_T, vvlo, vvhi, g_T, xxlo, xxhi); /* Then, we will select the minimum of the array g_t*/ pnga_select_elem(g_T, "min", sresult, &index[0]); switch (xxtype) { case C_INT: /* This should be iresult but is lresult because of the strange implementation of nga_select_elem. */ /* result1 = (double)(iresult); */ break; case C_DCPL: case C_SCPL: pnga_error("Ga_step_bound_info_patch_: unavalable for complex datatype.", xxtype); break; case C_DBL: /* result1 = dresult; */ break; case C_FLOAT: /* result1 = (double)fresult; */ break; case C_LONG: /* result1 = (double)lresult; */ break; default: pnga_error("Ga_step_bound_info_patch_: result set: wrong data type.", xxtype); } /*Now doing the same thing to get (xx-xxll)/dv */ /*First, compute xl - xx */ pnga_add_patch(alpha, g_xx, xxlo, xxhi, beta, g_xxll, xxlllo, xxllhi, g_Q, xxlo, xxhi); /*Check for negative elements in g_s, if it has any then xxll was not a lower bound, exit with error message. */ if(has_negative_elem(g_Q, xxlo, xxhi) == 1) pnga_error("pnga_step_bound_info_patch: Lower bound is not < xx.", -1); /* Then compute r = negative elements of vv */ pnga_zero(g_R); pnga_elem_minimum(g_vv,g_R,g_R); pnga_abs_value(g_R); /* Then, compute (xx-xl)/vv */ pnga_elem_stepb_divide_patch(g_Q, xxlo, xxhi, g_R, vvlo, vvhi, g_R, xxlo, xxhi); /* Then, we will select the minimum of the array g_t*/ pnga_select_elem(g_R, "min", sresult2, &index[0]); switch (xxtype) { case C_INT: *(int*)wolfemin = GA_ABS(GA_MIN(iresult,iresult2)); break; case C_DCPL: case C_SCPL: pnga_error("Ga_step_bound_info_patch_: unavalable for complex datatype.", xxtype); break; case C_DBL: *(double*)wolfemin = GA_ABS(GA_MIN(dresult,dresult2)); break; case C_FLOAT: *(float*)wolfemin = GA_ABS(GA_MIN(fresult,fresult2)); break; case C_LONG: *(long*)wolfemin = GA_ABS(GA_MIN(lresult,lresult2)); break; default: pnga_error("Ga_step_bound_info_patch_: result2 set: wrong data type.", xxtype); } /* Now set T to be the elementwise minimum of R and T. So, T is infinity only where ever g_vv is zero. */ pnga_elem_minimum(g_R,g_T,g_T); /* Now we want to set T to be zero whenever g_vv was zero and gxx coincides with either boundary vector. Set S to be the element-wise product of S and Q. It will be zero when either of them is zero. */ pnga_elem_multiply(g_Q,g_S,g_S); /* Set Q to the |vv|. */ pnga_copy(g_vv,g_Q); pnga_abs_value(g_Q); /* Now add q and s to get a vector that is zero only where g_vv was zero and g_xx meets one of the boundary vectors. */ pnga_add_patch(alpha, g_Q, xxlo, xxhi, alpha, g_S, xxlo, xxhi, g_S, xxlo, xxhi); /* Then use that vector as a mask to set certain elements of T to be zero (so we have a collection of the a_i and c_i elements as per the TAO StepBoundInfo function). */ pnga_step_mask_patch(g_S,xxlo,xxhi,g_T,xxlo,xxhi,g_T,xxlo,xxhi); /* Then, we will select the minimum of the array g_t, that will be boundmin . */ pnga_select_elem(g_T, "min", sresult, &index[0]); switch (xxtype) { case C_INT: /* This should be iresult but is lresult because of the strange implementation of nga_select_elem. */ *(int*)boundmin = iresult; break; case C_DCPL: case C_SCPL: pnga_error("Ga_step_bound_info_patch_: unavalable for complex datatype.", xxtype); break; case C_DBL: *(double*)boundmin = dresult; break; case C_FLOAT: *(float*)boundmin = fresult; break; case C_LONG: *(long*)boundmin = lresult; break; default: pnga_error("Ga_step_bound_info_patch_: result set: wrong data type.", xxtype); } /* Then, we will select the maximum of the array g_t, that will be boundmax . */ pnga_select_elem(g_T, "max", sresult, &index[0]); switch (xxtype) { case C_INT: /* This should be iresult but is lresult because of the strange implementation of nga_select_elem. */ *(int*)boundmax = iresult; break; case C_DCPL: case C_SCPL: pnga_error("Ga_step_bound_info_patch_: unavalable for complex datatype.", xxtype); break; case C_DBL: *(double*)boundmax = dresult; break; case C_FLOAT: *(float*)boundmax = fresult; break; case C_LONG: *(long*)boundmax = lresult; break; default: pnga_error("Ga_step_bound_info_patch_: result set: wrong data type.", xxtype); } pnga_destroy(g_Q); pnga_destroy(g_R); pnga_destroy(g_S); pnga_destroy(g_T); GA_POP_NAME; if(local_sync_end)pnga_sync(); } /*\ generic routine for element wise operation between two array \*/ #if 0 /* I want to delete op parameter */ void ga_step_max_patch_(g_a, alo, ahi, g_b, blo, bhi, result, op) #else #endif #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_step_max_patch = pnga_step_max_patch #endif void pnga_step_max_patch(g_a, alo, ahi, g_b, blo, bhi, result) Integer g_a, *alo, *ahi; /* patch of g_a */ Integer g_b, *blo, *bhi; /* patch of g_b */ void *result; #if 0 Integer op; /* operations */ #endif { double dresult; long lresult; Integer atype; Integer andim, adims[MAXDIM]; Integer btype; Integer bndim, bdims[MAXDIM]; Integer index[MAXDIM]; /* Integer num_blocks_a, num_blocks_b; */ /* double result = -1; */ Integer g_c; int iresult; Integer atotal,btotal; float fresult; int local_sync_begin,local_sync_end; int i; Integer compatible; void *sresult = NULL; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); /* Check for valid ga handles. */ pnga_check_handle(g_a, "ga_step_max_patch_"); pnga_check_handle(g_b, "ga_step_max_patch_"); GA_PUSH_NAME("ga_step_max_patch_"); /* get chacteristics of the input ga patches */ pnga_inquire(g_a, &atype, &andim, adims); pnga_inquire(g_b, &btype, &bndim, bdims); /* num_blocks_a = pnga_total_blocks(g_a); */ /* num_blocks_b = pnga_total_blocks(g_b); */ /* Check for matching types. */ if(atype != btype) pnga_error(" ga_step_max_patch_: types mismatch ", 0L); /* check if patch indices and dims match */ for(i=0; i adims[i]) pnga_error("g_a indices out of range ", g_a); for(i=0; i bdims[i]) pnga_error("g_b indices out of range ", g_b); /* check if numbers of elements in patches match each other */ atotal = 1; for(i=0; i #endif #define DEBUG 0 /*The structure of gai_nbhdl_t is (this is our internal handle)*/ #define NUM_HDLS 20 typedef struct { unsigned int ihdl_index:8; unsigned int ga_nbtag:24; }gai_nbhdl_t; /*Each element in the armci handle linked list is of type ga_armcihdl_t*/ typedef struct struct_armcihdl_t{ armci_hdl_t* handle; struct struct_armcihdl_t *next; struct struct_armcihdl_t *previous; int index; int ga_hdlarr_index; }ga_armcihdl_t; /*We create an array of type ga_nbhdl_array_t. Each of the elements in this array is the head of the armcihandle linked list that is associated with each GA call. */ typedef struct{ ga_armcihdl_t *ahandle; int count; int ga_nbtag; } ga_nbhdl_array_t; /*fills up the armci_hdl_t entries in ga_armcihdl_t */ static armci_hdl_t hdl_array[NUM_HDLS]; /*index of the following array goes into ihdl_index. while waiting for a *non-bloking ga call, we first check if *(list_element_array[inbhandle->ihdl_index].ga_nbtag == inbhandle->ga_nbtag) *if it is, then we complete all the armci handles in the linked list this *points to. */ static ga_nbhdl_array_t ga_ihdl_array[NUM_HDLS]; /*this is the array of linked list elements. */ static ga_armcihdl_t list_element_array[NUM_HDLS] = { {&(hdl_array[0]), NULL,NULL,0, -1 },{&(hdl_array[1]), NULL,NULL, 1,-1 }, {&(hdl_array[2]), NULL,NULL,2, -1 },{&(hdl_array[3]), NULL,NULL, 3,-1 }, {&(hdl_array[4]), NULL,NULL,4, -1 },{&(hdl_array[5]), NULL,NULL, 5,-1 }, {&(hdl_array[6]), NULL,NULL,6, -1 },{&(hdl_array[7]), NULL,NULL, 7,-1 }, {&(hdl_array[8]), NULL,NULL,8, -1 },{&(hdl_array[9]), NULL,NULL, 9,-1 }, {&(hdl_array[10]),NULL,NULL,10,-1 },{&(hdl_array[11]),NULL,NULL,11,-1 }, {&(hdl_array[12]),NULL,NULL,12,-1 },{&(hdl_array[13]),NULL,NULL,13,-1 }, {&(hdl_array[14]),NULL,NULL,14,-1 },{&(hdl_array[15]),NULL,NULL,15,-1 }, {&(hdl_array[16]),NULL,NULL,16,-1 },{&(hdl_array[17]),NULL,NULL,17,-1 }, {&(hdl_array[18]),NULL,NULL,18,-1 },{&(hdl_array[19]),NULL,NULL,19,-1 }}; static int nextIHAelement=-1; /*oldest ga_ihdl_array element*/ static int nextLEAelement=-1; /*oldest list_element_array element*/ static int ihdl_array_avail[NUM_HDLS]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; static int list_ele_avail[NUM_HDLS]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; /*\ a unique tag everytime \*/ static unsigned int ga_nb_tag; unsigned int get_next_tag(){ return((++ga_nb_tag)); } /*\ the only way to complete a list element! * does the basic list operation: remove element, update previous and next * links of the previous and next elements in the linked list * prev==null => this was the element pointed by the head(ie, first element). \*/ static void clear_list_element(int index){ ga_armcihdl_t *listele,*prev,*next; if(DEBUG){ printf("\n%ld:clearing handle %d\n",(long)GAme,index);fflush(stdout); } listele = &(list_element_array[index]); /*first wait for the armci handle */ ARMCI_Wait(listele->handle); /*set prev and next links of my prev element and my next element*/ prev=listele->previous; next = listele->next; if(prev) prev->next = next; else ga_ihdl_array[listele->ga_hdlarr_index].ahandle=next; if(next) next->previous = prev; /*since one element from the linked list is completed, update the count*/ ga_ihdl_array[listele->ga_hdlarr_index].count--; /*reset the prev and next pointers and initialize the handle*/ listele->next=NULL; listele->previous=NULL; ARMCI_INIT_HANDLE(listele->handle); list_ele_avail[index]=1; } /*\ Get the next available list element from the list element array, if * nothing is available, free element with index nextLEAelement \*/ ga_armcihdl_t* get_armcihdl(){ int i; ga_armcihdl_t *ret_handle; /*first see if an element from the list_ele_arr is already available */ for(i=0;inext; clear_list_element(first->index); first=next; } /*reset the head of the list for reuse*/ ga_ihdl_array[elementtofree].count=0; ga_ihdl_array[elementtofree].ga_nbtag=0; ga_ihdl_array[elementtofree].ahandle=NULL; ihdl_array_avail[elementtofree]=1; } /*\ Add the armci handle list element to the end of the list. \*/ static void add_armcihdl_to_list(ga_armcihdl_t *listelement, int headindex){ ga_armcihdl_t *first=ga_ihdl_array[headindex].ahandle; ga_ihdl_array[headindex].count++; listelement->ga_hdlarr_index = headindex; if(ga_ihdl_array[headindex].ahandle==NULL){ ga_ihdl_array[headindex].ahandle=listelement; listelement->previous= NULL; return; } while(first->next!=NULL){ first=first->next; } first->next=listelement; listelement->previous=first; } /*\ Complete the list of armci handles associated with a particular GA request. * specific=-1 means free the next available one. other values complete the * armci handle list pointed to by head at that "specific" element. \*/ static int get_GAnbhdl_element(int specific){ int elementtofree,i; if(specific!=-1)elementtofree=specific; else { for(i=0;iihdl_index == (NUM_HDLS+1)){ inbhandle->ihdl_index = get_GAnbhdl_element(-1); inbhandle->ga_nbtag = get_next_tag(); ga_ihdl_array[(inbhandle->ihdl_index)].ga_nbtag=inbhandle->ga_nbtag; } ret_handle = get_armcihdl(); add_armcihdl_to_list(ret_handle,inbhandle->ihdl_index); return(ret_handle->handle); } /*\ the wait routine which is called inside nga_nbwait and ga_nbwait \*/ int nga_wait_internal(Integer *nbhandle){ gai_nbhdl_t *inbhandle = (gai_nbhdl_t *)nbhandle; int retval = 0; if(inbhandle->ihdl_index==(NUM_HDLS+1))retval=0; else if(inbhandle->ga_nbtag !=ga_ihdl_array[inbhandle->ihdl_index].ga_nbtag) retval=0; else free_armci_handle_list(inbhandle->ihdl_index); return(retval); } static int test_list_element(int index){ ga_armcihdl_t *listele; if(DEBUG){ printf("\n%ld:clearing handle %d\n",(long)GAme,index);fflush(stdout); } listele = &(list_element_array[index]); return (ARMCI_Test(listele->handle)); } static int test_armci_handle_list(int elementtofree){ ga_armcihdl_t *first = ga_ihdl_array[elementtofree].ahandle,*next; int done = 1; /*call clear_list_element for every element in the list*/ while(first!=NULL){ next=first->next; if (test_list_element(first->index) == 0) { done = 0; break; } first=next; } return (done); } /*\ the test routine which is called inside nga_nbtest \*/ int nga_test_internal(Integer *nbhandle){ gai_nbhdl_t *inbhandle = (gai_nbhdl_t *)nbhandle; int retval = 0; if(inbhandle->ihdl_index==(NUM_HDLS+1))retval=0; else if(inbhandle->ga_nbtag !=ga_ihdl_array[inbhandle->ihdl_index].ga_nbtag) retval=0; else return (test_armci_handle_list(inbhandle->ihdl_index)); return(retval); } /*\ unlike in ARMCI, user doesnt have to initialize handle in GA. * it is done by the get/put call instead. \*/ void ga_init_nbhandle(Integer *nbhandle) { gai_nbhdl_t *inbhandle = (gai_nbhdl_t *)nbhandle; inbhandle->ihdl_index=(NUM_HDLS+1); } ga-5-3/global/src/types2.xh0000640005473000001440000000527011534213423014414 0ustar d3n000usersTYPE_CASE(C_INT,int,reg, C_INT,int,reg) TYPE_CASE(C_LONG,long,reg, C_INT,int,reg) TYPE_CASE(C_LONGLONG,long long,reg,C_INT,int,reg) TYPE_CASE(C_FLOAT,float,reg, C_INT,int,reg) TYPE_CASE(C_DBL,double,reg, C_INT,int,reg) TYPE_CASE(C_SCPL,SingleComplex,cpl,C_INT,int,reg) TYPE_CASE(C_DCPL,DoubleComplex,cpl,C_INT,int,reg) TYPE_CASE(C_INT,int,reg, C_LONG,long,reg) TYPE_CASE(C_LONG,long,reg, C_LONG,long,reg) TYPE_CASE(C_LONGLONG,long long,reg,C_LONG,long,reg) TYPE_CASE(C_FLOAT,float,reg, C_LONG,long,reg) TYPE_CASE(C_DBL,double,reg, C_LONG,long,reg) TYPE_CASE(C_SCPL,SingleComplex,cpl,C_LONG,long,reg) TYPE_CASE(C_DCPL,DoubleComplex,cpl,C_LONG,long,reg) TYPE_CASE(C_INT,int,reg, C_LONGLONG,long long,reg) TYPE_CASE(C_LONG,long,reg, C_LONGLONG,long long,reg) TYPE_CASE(C_LONGLONG,long long,reg,C_LONGLONG,long long,reg) TYPE_CASE(C_FLOAT,float,reg, C_LONGLONG,long long,reg) TYPE_CASE(C_DBL,double,reg, C_LONGLONG,long long,reg) TYPE_CASE(C_SCPL,SingleComplex,cpl,C_LONGLONG,long long,reg) TYPE_CASE(C_DCPL,DoubleComplex,cpl,C_LONGLONG,long long,reg) TYPE_CASE(C_INT,int,reg, C_FLOAT,float,reg) TYPE_CASE(C_LONG,long,reg, C_FLOAT,float,reg) TYPE_CASE(C_LONGLONG,long long,reg,C_FLOAT,float,reg) TYPE_CASE(C_FLOAT,float,reg, C_FLOAT,float,reg) TYPE_CASE(C_DBL,double,reg, C_FLOAT,float,reg) TYPE_CASE(C_SCPL,SingleComplex,cpl,C_FLOAT,float,reg) TYPE_CASE(C_DCPL,DoubleComplex,cpl,C_FLOAT,float,reg) TYPE_CASE(C_INT,int,reg, C_DBL,double,reg) TYPE_CASE(C_LONG,long,reg, C_DBL,double,reg) TYPE_CASE(C_LONGLONG,long long,reg,C_DBL,double,reg) TYPE_CASE(C_FLOAT,float,reg, C_DBL,double,reg) TYPE_CASE(C_DBL,double,reg, C_DBL,double,reg) TYPE_CASE(C_SCPL,SingleComplex,cpl,C_DBL,double,reg) TYPE_CASE(C_DCPL,DoubleComplex,cpl,C_DBL,double,reg) TYPE_CASE(C_INT,int,reg, C_SCPL,SingleComplex,cpl) TYPE_CASE(C_LONG,long,reg, C_SCPL,SingleComplex,cpl) TYPE_CASE(C_LONGLONG,long long,reg,C_SCPL,SingleComplex,cpl) TYPE_CASE(C_FLOAT,float,reg, C_SCPL,SingleComplex,cpl) TYPE_CASE(C_DBL,double,reg, C_SCPL,SingleComplex,cpl) TYPE_CASE(C_SCPL,SingleComplex,cpl,C_SCPL,SingleComplex,cpl) TYPE_CASE(C_DCPL,DoubleComplex,cpl,C_SCPL,SingleComplex,cpl) TYPE_CASE(C_INT,int,reg, C_DCPL,DoubleComplex,cpl) TYPE_CASE(C_LONG,long,reg, C_DCPL,DoubleComplex,cpl) TYPE_CASE(C_LONGLONG,long long,reg,C_DCPL,DoubleComplex,cpl) TYPE_CASE(C_FLOAT,float,reg, C_DCPL,DoubleComplex,cpl) TYPE_CASE(C_DBL,double,reg, C_DCPL,DoubleComplex,cpl) TYPE_CASE(C_SCPL,SingleComplex,cpl,C_DCPL,DoubleComplex,cpl) TYPE_CASE(C_DCPL,DoubleComplex,cpl,C_DCPL,DoubleComplex,cpl) ga-5-3/global/src/global.h0000640005473000001440000000063311507150361014235 0ustar d3n000users/** @file global.h * * This is a private header file which defines all Fortran functions. * The names of these functions should mirror those found in global.h. */ #ifndef GLOBAL_H #define GLOBAL_H #include "typesf2c.h" extern DoubleComplex *DCPL_MB; extern SingleComplex *SCPL_MB; extern DoublePrecision *DBL_MB; extern float *FLT_MB; extern Integer *INT_MB; #endif /* GLOBAL_H */ ga-5-3/global/src/capi.c0000640005473000001440000037605012160664226013723 0ustar d3n000users/** * @file capi.c * * Implements the C interface. * These calls forward to the (possibly) weak symbols of the internal * implementations. */ #if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #include #include "armci.h" #include "ga.h" #include "globalp.h" #include "ga-papi.h" #include "matmul.h" #if ENABLE_PROFILING # include "ga-wapi.h" #else # include "ga-wapidefs.h" #endif int *_ga_argc=NULL; char ***_ga_argv=NULL; int _ga_initialize_args=0; int _ga_initialize_c=0; short int _ga_irreg_flag = 0; static Integer* copy_map(int block[], int block_ndim, int map[]); static Integer* copy_map64(int64_t block[], int block_ndim, int64_t map[]); #ifdef USE_FAPI # define COPYC2F(carr, farr, n){\ int i; for(i=0; i< (n); i++)(farr)[i]=(Integer)(carr)[i];} # define COPYF2C(farr, carr, n){\ int i; for(i=0; i< (n); i++)(carr)[i]=(int)(farr)[i];} # define COPYF2C_64(farr, carr, n){\ int i; for(i=0; i< (n); i++)(carr)[i]=(int64_t)(farr)[i];} # define COPYINDEX_F2C COPYF2C # define COPYINDEX_F2C_64 COPYF2C_64 #else # define COPYC2F(carr, farr, n){\ int i; for(i=0; i< (n); i++)(farr)[n-i-1]=(Integer)(carr)[i];} # define COPYF2C(farr, carr, n){\ int i; for(i=0; i< (n); i++)(carr)[n-i-1]=(int)(farr)[i];} # define COPYF2C_64(farr, carr, n){\ int i; for(i=0; i< (n); i++)(carr)[n-i-1]=(int64_t)(farr)[i];} # define COPYINDEX_C2F(carr, farr, n){\ int i; for(i=0; i< (n); i++)(farr)[n-i-1]=(Integer)(carr)[i]+1;} # define COPYINDEX_F2C(farr, carr, n){\ int i; for(i=0; i< (n); i++)(carr)[n-i-1]=(int)(farr)[i] -1;} # define COPYINDEX_F2C_64(farr, carr, n){\ int i; for(i=0; i< (n); i++)(carr)[n-i-1]=(int64_t)(farr)[i] -1;} #define BASE_0 #endif #define COPY(CAST,src,dst,n) {\ int i; for(i=0; i< (n); i++)(dst)[i]=(CAST)(src)[i];} #define COPY_INC(CAST,src,dst,n) {\ int i; for(i=0; i< (n); i++)(dst)[i]=(CAST)(src)[i]+1;} #define COPY_DEC(CAST,src,dst,n) {\ int i; for(i=0; i< (n); i++)(dst)[i]=(CAST)(src)[i]-1;} int GA_Uses_fapi(void) { #ifdef USE_FAPI return 1; #else return 0; #endif } void GA_Initialize_ltd(size_t limit) { Integer lim = (Integer)limit; _ga_initialize_c = 1; wnga_initialize_ltd(lim); } void NGA_Initialize_ltd(size_t limit) { Integer lim = (Integer)limit; _ga_initialize_c = 1; wnga_initialize_ltd(lim); } void GA_Initialize_args(int *argc, char ***argv) { _ga_argc = argc; _ga_argv = argv; _ga_initialize_c = 1; _ga_initialize_args = 1; wnga_initialize(); } void GA_Initialize() { _ga_initialize_c = 1; wnga_initialize(); } void NGA_Initialize() { _ga_initialize_c = 1; wnga_initialize(); } int GA_Initialized() { return wnga_initialized(); } int NGA_Initialized() { return wnga_initialized(); } void GA_Terminate() { wnga_terminate(); _ga_argc = NULL; _ga_argv = NULL; _ga_initialize_args = 0; _ga_initialize_c = 0; } void NGA_Terminate() { wnga_terminate(); _ga_argc = NULL; _ga_argv = NULL; _ga_initialize_args = 0; _ga_initialize_c = 0; } int NGA_Create(int type, int ndim, int dims[], char *name, int *chunk) { Integer *ptr, g_a; logical st; Integer _ga_work[MAXDIM]; Integer _ga_dims[MAXDIM]; if(ndim>MAXDIM)return 0; COPYC2F(dims,_ga_dims, ndim); if(!chunk)ptr=(Integer*)0; else { COPYC2F(chunk,_ga_work, ndim); ptr = _ga_work; } st = wnga_create((Integer)type, (Integer)ndim, _ga_dims, name, ptr, &g_a); if(st==TRUE) return (int) g_a; else return 0; } int NGA_Create64(int type, int ndim, int64_t dims[], char *name, int64_t *chunk) { Integer *ptr, g_a; logical st; Integer _ga_dims[MAXDIM]; Integer _ga_work[MAXDIM]; if(ndim>MAXDIM)return 0; COPYC2F(dims,_ga_dims, ndim); if(!chunk)ptr=(Integer*)0; else { COPYC2F(chunk,_ga_work, ndim); ptr = _ga_work; } st = wnga_create((Integer)type, (Integer)ndim, _ga_dims, name, ptr, &g_a); if(st==TRUE) return (int) g_a; else return 0; } int NGA_Create_config(int type, int ndim, int dims[], char *name, int chunk[], int p_handle) { Integer *ptr, g_a; logical st; Integer _ga_dims[MAXDIM]; Integer _ga_work[MAXDIM]; if(ndim>MAXDIM)return 0; COPYC2F(dims,_ga_dims, ndim); if(!chunk)ptr=(Integer*)0; else { COPYC2F(chunk,_ga_work, ndim); ptr = _ga_work; } st = wnga_create_config((Integer)type, (Integer)ndim, _ga_dims, name, ptr, (Integer)p_handle, &g_a); if(st==TRUE) return (int) g_a; else return 0; } int NGA_Create_config64(int type, int ndim, int64_t dims[], char *name, int64_t chunk[], int p_handle) { Integer *ptr, g_a; logical st; Integer _ga_dims[MAXDIM]; Integer _ga_work[MAXDIM]; if(ndim>MAXDIM)return 0; COPYC2F(dims,_ga_dims, ndim); if(!chunk)ptr=(Integer*)0; else { COPYC2F(chunk,_ga_work, ndim); ptr = _ga_work; } st = wnga_create_config((Integer)type, (Integer)ndim, _ga_dims, name, ptr, (Integer)p_handle, &g_a); if(st==TRUE) return (int) g_a; else return 0; } int NGA_Create_irreg(int type,int ndim,int dims[],char *name,int block[],int map[]) { Integer g_a; logical st; Integer _ga_dims[MAXDIM]; Integer _ga_work[MAXDIM]; Integer *_ga_map_capi; if(ndim>MAXDIM)return 0; COPYC2F(dims,_ga_dims, ndim); COPYC2F(block,_ga_work, ndim); _ga_map_capi = copy_map(block, ndim, map); _ga_irreg_flag = 1; /* set this flag=1, to indicate array is irregular */ st = wnga_create_irreg(type, (Integer)ndim, _ga_dims, name, _ga_map_capi, _ga_work, &g_a); _ga_irreg_flag = 0; /* unset it after creating the array */ free(_ga_map_capi); if(st==TRUE) return (int) g_a; else return 0; } int NGA_Create_irreg64(int type,int ndim,int64_t dims[],char *name,int64_t block[],int64_t map[]) { Integer g_a; logical st; Integer _ga_dims[MAXDIM]; Integer _ga_work[MAXDIM]; Integer *_ga_map_capi; if(ndim>MAXDIM)return 0; COPYC2F(dims,_ga_dims, ndim); COPYC2F(block,_ga_work, ndim); _ga_map_capi = copy_map64(block, ndim, map); _ga_irreg_flag = 1; /* set this flag=1, to indicate array is irregular */ st = wnga_create_irreg(type, (Integer)ndim, _ga_dims, name, _ga_map_capi, _ga_work, &g_a); _ga_irreg_flag = 0; /* unset it after creating the array */ free(_ga_map_capi); if(st==TRUE) return (int) g_a; else return 0; } int NGA_Create_irreg_config(int type,int ndim,int dims[],char *name,int block[], int map[], int p_handle) { Integer g_a; logical st; Integer _ga_dims[MAXDIM]; Integer _ga_work[MAXDIM]; Integer *_ga_map_capi; if(ndim>MAXDIM)return 0; COPYC2F(dims,_ga_dims, ndim); COPYC2F(block,_ga_work, ndim); _ga_map_capi = copy_map(block, ndim, map); _ga_irreg_flag = 1; /* set this flag=1, to indicate array is irregular */ st = wnga_create_irreg_config(type, (Integer)ndim, _ga_dims, name, _ga_map_capi, _ga_work, (Integer)p_handle, &g_a); _ga_irreg_flag = 0; /* unset it, after creating array */ free(_ga_map_capi); if(st==TRUE) return (int) g_a; else return 0; } int NGA_Create_irreg_config64(int type,int ndim,int64_t dims[],char *name,int64_t block[], int64_t map[], int p_handle) { Integer g_a; logical st; Integer _ga_dims[MAXDIM]; Integer _ga_work[MAXDIM]; Integer *_ga_map_capi; if(ndim>MAXDIM)return 0; COPYC2F(dims,_ga_dims, ndim); COPYC2F(block,_ga_work, ndim); _ga_map_capi = copy_map64(block, ndim, map); _ga_irreg_flag = 1; /* set this flag=1, to indicate array is irregular */ st = wnga_create_irreg_config(type, (Integer)ndim, _ga_dims, name, _ga_map_capi, _ga_work, (Integer)p_handle, &g_a); _ga_irreg_flag = 0; /* unset it, after creating array */ free(_ga_map_capi); if(st==TRUE) return (int) g_a; else return 0; } int NGA_Create_ghosts_irreg(int type,int ndim,int dims[],int width[],char *name, int block[],int map[]) { Integer g_a; logical st; Integer _ga_dims[MAXDIM]; Integer _ga_work[MAXDIM]; Integer _ga_width[MAXDIM]; Integer *_ga_map_capi; if(ndim>MAXDIM)return 0; COPYC2F(dims,_ga_dims, ndim); COPYC2F(block,_ga_work, ndim); COPYC2F(width,_ga_width, ndim); _ga_map_capi = copy_map(block, ndim, map); _ga_irreg_flag = 1; /* set this flag=1, to indicate array is irregular */ st = wnga_create_ghosts_irreg(type, (Integer)ndim, _ga_dims, _ga_width, name, _ga_map_capi, _ga_work, &g_a); _ga_irreg_flag = 0; /* unset it, after creating array */ free(_ga_map_capi); if(st==TRUE) return (int) g_a; else return 0; } int NGA_Create_ghosts_irreg64(int type,int ndim,int64_t dims[],int64_t width[],char *name, int64_t block[],int64_t map[]) { Integer g_a; logical st; Integer _ga_dims[MAXDIM]; Integer _ga_work[MAXDIM]; Integer _ga_width[MAXDIM]; Integer *_ga_map_capi; if(ndim>MAXDIM)return 0; COPYC2F(dims,_ga_dims, ndim); COPYC2F(block,_ga_work, ndim); COPYC2F(width,_ga_width, ndim); _ga_map_capi = copy_map64(block, ndim, map); _ga_irreg_flag = 1; /* set this flag=1, to indicate array is irregular */ st = wnga_create_ghosts_irreg(type, (Integer)ndim, _ga_dims, _ga_width, name, _ga_map_capi, _ga_work, &g_a); _ga_irreg_flag = 0; /* unset it, after creating array */ free(_ga_map_capi); if(st==TRUE) return (int) g_a; else return 0; } int NGA_Create_ghosts_irreg_config(int type, int ndim, int dims[], int width[], char *name, int block[], int map[], int p_handle) { Integer g_a; logical st; Integer _ga_dims[MAXDIM]; Integer _ga_work[MAXDIM]; Integer _ga_width[MAXDIM]; Integer *_ga_map_capi; if(ndim>MAXDIM)return 0; COPYC2F(dims,_ga_dims, ndim); COPYC2F(block,_ga_work, ndim); COPYC2F(width,_ga_width, ndim); _ga_map_capi = copy_map(block, ndim, map); _ga_irreg_flag = 1; /* set this flag=1, to indicate array is irregular */ st = wnga_create_ghosts_irreg_config(type, (Integer)ndim, _ga_dims, _ga_width, name, _ga_map_capi, _ga_work, (Integer)p_handle, &g_a); _ga_irreg_flag = 0; /* unset it, after creating array */ free(_ga_map_capi); if(st==TRUE) return (int) g_a; else return 0; } int NGA_Create_ghosts_irreg_config64(int type, int ndim, int64_t dims[], int64_t width[], char *name, int64_t block[], int64_t map[], int p_handle) { Integer g_a; logical st; Integer _ga_dims[MAXDIM]; Integer _ga_work[MAXDIM]; Integer _ga_width[MAXDIM]; Integer *_ga_map_capi; if(ndim>MAXDIM)return 0; COPYC2F(dims,_ga_dims, ndim); COPYC2F(block,_ga_work, ndim); COPYC2F(width,_ga_width, ndim); _ga_map_capi = copy_map64(block, ndim, map); _ga_irreg_flag = 1; /* set this flag=1, to indicate array is irregular */ st = wnga_create_ghosts_irreg_config(type, (Integer)ndim, _ga_dims, _ga_width, name, _ga_map_capi, _ga_work, (Integer)p_handle, &g_a); _ga_irreg_flag = 0; /* unset it, after creating array */ free(_ga_map_capi); if(st==TRUE) return (int) g_a; else return 0; } int NGA_Create_ghosts(int type, int ndim,int dims[], int width[], char *name, int chunk[]) { Integer *ptr, g_a; logical st; Integer _ga_dims[MAXDIM]; Integer _ga_work[MAXDIM]; Integer _ga_width[MAXDIM]; if(ndim>MAXDIM)return 0; COPYC2F(dims,_ga_dims, ndim); COPYC2F(width,_ga_width, ndim); if(!chunk)ptr=(Integer*)0; else { COPYC2F(chunk,_ga_work, ndim); ptr = _ga_work; } st = wnga_create_ghosts((Integer)type, (Integer)ndim, _ga_dims, _ga_width, name, ptr, &g_a); if(st==TRUE) return (int) g_a; else return 0; } int NGA_Create_ghosts64(int type, int ndim, int64_t dims[], int64_t width[], char *name, int64_t chunk[]) { Integer *ptr, g_a; logical st; Integer _ga_dims[MAXDIM]; Integer _ga_work[MAXDIM]; Integer _ga_width[MAXDIM]; if(ndim>MAXDIM)return 0; COPYC2F(dims,_ga_dims, ndim); COPYC2F(width,_ga_width, ndim); if(!chunk)ptr=(Integer*)0; else { COPYC2F(chunk,_ga_work, ndim); ptr = _ga_work; } st = wnga_create_ghosts((Integer)type, (Integer)ndim, _ga_dims, _ga_width, name, ptr, &g_a); if(st==TRUE) return (int) g_a; else return 0; } int NGA_Create_ghosts_config(int type, int ndim,int dims[], int width[], char *name, int chunk[], int p_handle) { Integer *ptr, g_a; logical st; Integer _ga_dims[MAXDIM]; Integer _ga_work[MAXDIM]; Integer _ga_width[MAXDIM]; if(ndim>MAXDIM)return 0; COPYC2F(dims,_ga_dims, ndim); COPYC2F(width,_ga_width, ndim); if(!chunk)ptr=(Integer*)0; else { COPYC2F(chunk,_ga_work, ndim); ptr = _ga_work; } st = wnga_create_ghosts_config((Integer)type, (Integer)ndim, _ga_dims, _ga_width, name, ptr, (Integer)p_handle, &g_a); if(st==TRUE) return (int) g_a; else return 0; } int NGA_Create_ghosts_config64(int type, int ndim,int64_t dims[], int64_t width[], char *name, int64_t chunk[], int p_handle) { Integer *ptr, g_a; logical st; Integer _ga_dims[MAXDIM]; Integer _ga_work[MAXDIM]; Integer _ga_width[MAXDIM]; if(ndim>MAXDIM)return 0; COPYC2F(dims,_ga_dims, ndim); COPYC2F(width,_ga_width, ndim); if(!chunk)ptr=(Integer*)0; else { COPYC2F(chunk,_ga_work, ndim); ptr = _ga_work; } st = wnga_create_ghosts_config((Integer)type, (Integer)ndim, _ga_dims, _ga_width, name, ptr, (Integer)p_handle, &g_a); if(st==TRUE) return (int) g_a; else return 0; } int GA_Create_handle() { Integer g_a; g_a = wnga_create_handle(); return (int)g_a; } int NGA_Create_handle() { Integer g_a; g_a = wnga_create_handle(); return (int)g_a; } void GA_Set_data(int g_a, int ndim, int dims[], int type) { Integer aa, nndim, ttype; Integer _ga_dims[MAXDIM]; COPYC2F(dims,_ga_dims, ndim); aa = (Integer)g_a; nndim = (Integer)ndim; ttype = (Integer)type; wnga_set_data(aa, nndim, _ga_dims, ttype); } void GA_Set_data64(int g_a, int ndim, int64_t dims[], int type) { Integer aa, nndim, ttype; Integer _ga_dims[MAXDIM]; COPYC2F(dims,_ga_dims, ndim); aa = (Integer)g_a; nndim = (Integer)ndim; ttype = (Integer)type; wnga_set_data(aa, nndim, _ga_dims, ttype); } void NGA_Set_data(int g_a, int ndim, int dims[], int type) { Integer aa, nndim, ttype; Integer _ga_dims[MAXDIM]; COPYC2F(dims,_ga_dims, ndim); aa = (Integer)g_a; nndim = (Integer)ndim; ttype = (Integer)type; wnga_set_data(aa, nndim, _ga_dims, ttype); } void NGA_Set_data64(int g_a, int ndim, int64_t dims[], int type) { Integer aa, nndim, ttype; Integer _ga_dims[MAXDIM]; COPYC2F(dims,_ga_dims, ndim); aa = (Integer)g_a; nndim = (Integer)ndim; ttype = (Integer)type; wnga_set_data(aa, nndim, _ga_dims, ttype); } void GA_Set_chunk(int g_a, int chunk[]) { Integer aa, *ptr, ndim; Integer _ga_work[MAXDIM]; aa = (Integer)g_a; ndim = wnga_get_dimension(aa); if(!chunk)ptr=(Integer*)0; else { COPYC2F(chunk,_ga_work, ndim); ptr = _ga_work; } wnga_set_chunk(aa, ptr); } void GA_Set_chunk64(int g_a, int64_t chunk[]) { Integer aa, *ptr, ndim; Integer _ga_work[MAXDIM]; aa = (Integer)g_a; ndim = wnga_get_dimension(aa); if(!chunk)ptr=(Integer*)0; else { COPYC2F(chunk,_ga_work, ndim); ptr = _ga_work; } wnga_set_chunk(aa, ptr); } void NGA_Set_chunk(int g_a, int chunk[]) { Integer aa, *ptr, ndim; Integer _ga_work[MAXDIM]; aa = (Integer)g_a; ndim = wnga_get_dimension(aa); if(!chunk)ptr=(Integer*)0; else { COPYC2F(chunk,_ga_work, ndim); ptr = _ga_work; } wnga_set_chunk(aa, ptr); } void NGA_Set_chunk64(int g_a, int64_t chunk[]) { Integer aa, *ptr, ndim; Integer _ga_work[MAXDIM]; aa = (Integer)g_a; ndim = wnga_get_dimension(aa); if(!chunk)ptr=(Integer*)0; else { COPYC2F(chunk,_ga_work, ndim); ptr = _ga_work; } wnga_set_chunk(aa, ptr); } void GA_Set_array_name(int g_a, char *name) { Integer aa; aa = (Integer)g_a; wnga_set_array_name(aa, name); } void NGA_Set_array_name(int g_a, char *name) { Integer aa; aa = (Integer)g_a; wnga_set_array_name(aa, name); } void GA_Set_pgroup(int g_a, int p_handle) { Integer aa, pp; aa = (Integer)g_a; pp = (Integer)p_handle; wnga_set_pgroup(aa, pp); } void NGA_Set_pgroup(int g_a, int p_handle) { Integer aa, pp; aa = (Integer)g_a; pp = (Integer)p_handle; wnga_set_pgroup(aa, pp); } void GA_Set_block_cyclic(int g_a, int dims[]) { Integer aa, ndim; Integer _ga_dims[MAXDIM]; aa = (Integer)g_a; ndim = wnga_get_dimension(aa); COPYC2F(dims,_ga_dims, ndim); wnga_set_block_cyclic(aa, _ga_dims); } void NGA_Set_block_cyclic(int g_a, int dims[]) { Integer aa, ndim; Integer _ga_dims[MAXDIM]; aa = (Integer)g_a; ndim = wnga_get_dimension(aa); COPYC2F(dims,_ga_dims, ndim); wnga_set_block_cyclic(aa, _ga_dims); } void GA_Set_restricted(int g_a, int list[], int size) { Integer aa; Integer asize = (Integer)size; int i; Integer *_ga_map_capi; aa = (Integer)g_a; _ga_map_capi = (Integer*)malloc(size * sizeof(Integer)); for (i=0; i adim1 || ajlo <= 0 || ajhi > adim2) pnga_error(" pnga_copy_patch_dp: g_a indices out of range ", 0L); if (bilo <= 0 || bihi > bdim1 || bjlo <= 0 || bjhi > bdim2) pnga_error(" pnga_copy_patch_dp: g_b indices out of range ", 0L); /* check if numbers of elements in two patches match each other */ if (((bihi - bilo + 1) != (aihi - ailo + 1)) || ( (bjhi - bjlo + 1) != (ajhi - ajlo + 1)) ) pnga_error(" pnga_copy_patch_dp: shapes two of patches do not match ", 0L); /* is transpose operation required ? */ transp = (*t_a == 'n' || *t_a =='N')? 'n' : 't'; /* now find out cordinates of a patch of g_a that I own */ pnga_distribution(g_a, me, lo, hi); ilos = lo[0]; jlos = lo[1]; ihis = hi[0]; jhis = hi[1]; if(patch_intersect(ailo, aihi, ajlo, ajhi, &ilos, &ihis, &jlos, &jhis)){ pnga_access_ptr(g_a, lo, hi, &dbl_ptrA, &ld); nelem = (ihis-ilos+1)*(jhis-jlos+1); if ( transp == 'n' ) { corr = bilo - ailo; ilod = ilos + corr; ihid = ihis + corr; corr = bjlo - ajlo; jlod = jlos + corr; jhid = jhis + corr; } else { /* If this is a transpose copy, we need local scratch space */ dbl_ptrB = (DoublePrecision*) ga_malloc(nelem,MT_F_DBL,"copypatch_dp"); /* Copy from the source into this local array, transposed */ ldT = jhis-jlos+1; for(j=0; j< jhis-jlos+1; j++) for(i=0; i< ihis-ilos+1; i++) *(dbl_ptrB + i*ldT + j) = *(dbl_ptrA + j*ld + i); /* Now we can reset index to point to the transposed stuff */ pnga_release(g_a, lo, hi); dbl_ptrA = dbl_ptrB; ld = ldT; /* And finally, figure out what the destination indices are */ corr = bilo - ajlo; ilod = jlos + corr; ihid = jhis + corr; corr = bjlo - ailo; jlod = ilos + corr; jhid = ihis + corr; } /* Put it where it belongs */ lo[0] = ilod; lo[1] = jlod; hi[0] = ihid; hi[1] = jhid; pnga_put(g_b, lo, hi, dbl_ptrA, &ld); /* Get rid of local memory if we used it */ if( transp == 't') ga_free(dbl_ptrB); } } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_ddot_patch_dp = pnga_ddot_patch_dp #endif DoublePrecision pnga_ddot_patch_dp(g_a, t_a, ailo, aihi, ajlo, ajhi, g_b, t_b, bilo, bihi, bjlo, bjhi) Integer g_a, ailo, aihi, ajlo, ajhi; /* patch of g_a */ Integer g_b, bilo, bihi, bjlo, bjhi; /* patch of g_b */ char *t_a, *t_b; /* transpose operators */ { Integer atype, btype, adim1, adim2, bdim1, bdim2; Integer iloA, ihiA, jloA, jhiA, ldA; Integer iloB, ihiB, jloB, jhiB, ldB; Integer alo[2], ahi[2]; Integer blo[2], bhi[2]; Integer g_A = g_a; Integer me= pnga_nodeid(), i, j, temp_created=0; Integer corr, nelem; char transp, transp_a, transp_b; DoublePrecision sum = 0.; DoublePrecision *dbl_ptrA; DoublePrecision *dbl_ptrB; Integer ndim, dims[2]; pnga_check_handle(g_a, "pnga_ddot_patch_dp"); pnga_check_handle(g_b, "pnga_ddot_patch_dp"); pnga_inquire(g_a, &atype, &ndim, dims); adim1 = dims[0]; adim2 = dims[1]; pnga_inquire(g_b, &btype, &ndim, dims); bdim1 = dims[0]; bdim2 = dims[1]; if(atype != btype || (atype != C_DBL )) pnga_error("pnga_ddot_patch_dp: wrong types ", 0L); /* check if patch indices and g_a dims match */ if (ailo <= 0 || aihi > adim1 || ajlo <= 0 || ajhi > adim2) pnga_error(" pnga_ddot_patch_dp: g_a indices out of range ", 0L); /* check if patch indices and g_b dims match */ if (bilo <= 0 || bihi > bdim1 || bjlo <= 0 || bjhi > bdim2) pnga_error(" pnga_ddot_patch_dp: g_b indices out of range ", 0L); /* is transpose operation required ? */ /* -- only if for one array transpose operation requested*/ transp_a = (*t_a == 'n' || *t_a =='N')? 'n' : 't'; transp_b = (*t_b == 'n' || *t_b =='N')? 'n' : 't'; transp = (transp_a == transp_b)? 'n' : 't'; if(transp == 't') pnga_error(" pnga_ddot_patch_dp: transpose operators don't match: ", me); /* find out coordinates of patches of g_A and g_B that I own */ pnga_distribution(g_A, me, alo, ahi); iloA = alo[0]; jloA = alo[1]; ihiA = ahi[0]; jhiA = ahi[1]; if (patch_intersect(ailo, aihi, ajlo, ajhi, &iloA, &ihiA, &jloA, &jhiA)){ pnga_access_ptr(g_A, alo, ahi, &dbl_ptrA, &ldA); nelem = (ihiA-iloA+1)*(jhiA-jloA+1); corr = bilo - ailo; iloB = iloA + corr; ihiB = ihiA + corr; corr = bjlo - ajlo; jloB = jloA + corr; jhiB = jhiA + corr; blo[0] = iloB; blo[1] = jloB; bhi[0] = ihiB; bhi[1] = jhiB; if(own_patch(g_b, iloB, ihiB, jloB, jhiB)){ /* all the data is local */ pnga_access_ptr(g_b, blo, bhi, &dbl_ptrB, &ldB); }else{ /* data is remote -- get it to temp storage*/ temp_created =1; dbl_ptrB = (DoublePrecision*)ga_malloc(nelem, MT_F_DBL, "ddot_dp_b"); ldB = ihiB-iloB+1; pnga_get(g_b, blo, bhi, dbl_ptrB, &ldB); } sum = 0.; for(j=0; j< jhiA-jloA+1; j++) for(i=0; i< ihiA-iloA+1; i++) sum += *(dbl_ptrA + j*ldA + i) * *(dbl_ptrB + j*ldB + i); pnga_release(g_A, alo, ahi); if(temp_created) ga_free(dbl_ptrB); else pnga_release(g_b, blo, bhi); } return sum; } ga-5-3/global/src/types.xh0000640005473000001440000000033111534213423014323 0ustar d3n000usersTYPE_CASE(C_INT,int,reg) TYPE_CASE(C_LONG,long,reg) TYPE_CASE(C_LONGLONG,long long,reg) TYPE_CASE(C_FLOAT,float,reg) TYPE_CASE(C_DBL,double,reg) TYPE_CASE(C_SCPL,SingleComplex,cpl) TYPE_CASE(C_DCPL,DoubleComplex,cpl) ga-5-3/global/src/ga_diag.F0000640005473000001440000007236011621001436014307 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif subroutine gai_diag_std(g_a, g_v, eval) C$Id: ga_diag.F,v 1.26 2004-10-19 22:39:20 edo Exp $ implicit none #include "mafdecls.fh" #include "global.fh" #include "diag.fh" integer g_a ! matrix to diagonalize integer g_v ! global matrix to return evecs double precision eval(*) ! local array to return evals c c c solve the standard symmetric eigenvalue problem returning c all eigenvectors and values in ascending order c c the input matrix is not destroyed c c proc - # of processors c pans - panel size in columns c n - problem size c c c c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c integer iproc, pan, istart, iend, k, n, npan, proc, myproc integer mypanel, myelem, mycol, elemz, ipan, ik, info logical status c integer hma, adrma !mapa integer hmz, adrmz !mapz integer ga_diag_type c integer ha, adra !a integer hz, adrz !z c integer isize, rsize, ptr_size integer his, adris integer hsc, adrsc integer hip, adrip c external pdspev c logical oactive ! true iff this process participates integer dimA1, dimA2, typeA integer dimV1, dimV2, typeV c integer hls, adrls ! list of TCG nodes c integer Elem Elem(istart,iend,n)=((iend-istart+1)*(2*n-istart-iend+2))/2 c c c*** check environment c myproc = ga_nodeid() proc = ga_nnodes() c c*** check GA info c call ga_check_handle(g_a, 'gai_diag: a') call ga_check_handle(g_v, 'gai_diag: v') call ga_inquire(g_a, typeA, dimA1, dimA2) call ga_inquire(g_v, typeV, dimV1, dimV2) c c if (dimA1 .ne. dimA2) then call ga_error('gai_diag_std: can only diag square matrix ',1) else if (dimV1 .ne. dimV2) then call ga_error('gai_diag_std: can only diag square matrix ',3) else if(dimA1.ne.dimV1 )then call ga_error('gai_diag_std: A & V dimension mismatch ', 4) endif c n = dimA1 if (n .lt. 64) then call ga_diag_std_seq(g_a, g_v, eval) return endif c call ga_sync() c pan = 1 !panel size npan = n/pan c proc = min(n/30, ga_nnodes()) c oactive = myproc .lt. proc if (oactive) then * print *,myproc,' participate in eig: ',proc * call ffflush(6) c c allocate map arrays c status = .true. status = status .and. ma_push_get(mt_int,n,'mapa',hma,adrma) status = status .and. ma_push_get(mt_int,n,'mapz',hmz,adrmz) if (.not. status) $ call ga_error('gai_diag_std: insufficient memory 1', n) c c allocate and setup list of TCG nodes if( .not. ma_push_get(mt_int, proc,'list',hls,adrls)) $ call ga_error('gai_diag_std: insufficient memory 1b', n) call ga_list_nodeid(int_mb(adrls), proc) * print *,myproc,'list ', (int_mb(adrls+k),k=0,proc-1) * call ffflush(6) c c determine distribution of a,b, and z c mypanel = 0 ! number of panels at given processor mycol = 0 ! number of columns at given processor myelem = 0 ! number of elements at given processor c c allocate first half of the panels - forwards c do ipan = 1, npan/2 iproc = mod(ipan -1, proc) istart = (ipan - 1)*pan + 1 iend = istart + pan - 1 do k = istart, iend int_mb(-1+adrma+k) = int_mb(adrls+iproc) int_mb(-1+adrmz+k) = int_mb(adrls+iproc) enddo if(iproc .eq. myproc)then myelem = myelem + elem(istart,iend,n) mypanel = mypanel+1 endif enddo c c allocate second half of the panels - backwards c ik = 1 !ik is used to forward number processors do ipan = npan-1, npan/2 +1 , -1 ik = ik+1 iproc = mod(ik -1, proc) istart = (ipan - 1)*pan + 1 iend = istart + pan - 1 do k = istart, iend int_mb(-1+adrma+k) = int_mb(adrls+iproc) int_mb(-1+adrmz+k) = int_mb(adrls+iproc) enddo if(iproc .eq. myproc)then myelem = myelem + elem(istart,iend,n) mypanel = mypanel+1 endif enddo c c*** actually, there is one more panel left for the mismatch c iproc = 0 !processor 0 gets the mismatch panel istart = (npan - 1)*pan + 1 iend = n do k = istart, iend int_mb(-1+adrma+k) = int_mb(adrls+iproc) int_mb(-1+adrmz+k) = int_mb(adrls+iproc) enddo mycol = mypanel * pan if(iproc .eq. myproc)then myelem = myelem + elem(istart,iend,n) mycol = mycol + iend - istart + 1 endif elemz = mycol * n c c*** allocate a,b, and z arrays c status = .true. status = status .and. $ ma_push_get(mt_dbl,myelem,'gai_diag_std:a',ha,adra) status = status .and. $ ma_push_get(mt_dbl,elemz,'gai_diag_std:z',hz,adrz) if (.not. status) $ call ga_error('gai_diag_std: insufficient mem 2', $ myelem+elemz) c c*** load matrix A c istart = 0 do k = 1, n if( int_mb(-1+adrma+k) .eq. int_mb(adrls + myproc))then myelem = n-k+1 call ga_get(g_a,k,n,k,k,dbl_mb(adra+istart),1) istart = istart + myelem endif enddo c c*** allocate some memory for std eigensolver c * * temporary patch following george reccomendation to use 6n * if (.not. ma_push_get(mt_int,6*n,'iscratch',his,adris)) $ call ga_error('gai_diag_std: insufficient mem 3', 6*n) call fmemreq(1,n,int_mb(adrma),int_mb(adrma),int_mb(adrmz), & isize, rsize, ptr_size,int_mb(adris)) status = ma_pop_stack(his) if(.not. ma_push_get(mt_int,isize,'iscratch',his,adris)) & call ga_error('gai_diag_std allocator',1) if(.not. ma_push_get(mt_dbl,rsize,'scratch',hsc,adrsc)) & call ga_error('gai_diag_std allocator',2) if(.not. ma_push_get(mt_dbl,ptr_size,'iptr',hip,adrip)) & call ga_error('gai_diag_std allocator',3) c endif c c call ga_sync() ! To reduce message buffering problems c c*** calling PEIGS parallel eigensolver c if (oactive) then * print *,myproc,' participate in eig: ',proc * call ffflush(6) * if(myproc.eq.0)then * print *,myproc,'map a ', (int_mb(adrma +k),k=0,n-1) * print *,myproc,'a ', (dbl_mb(adra +k),k=0,5) * print *,myproc,'map z ', (int_mb(adrmz +k),k=0,n-1) * print *, ' ' * call ffflush(6) * endif * call ga_sync() * if(myproc.eq.1)then * print *,myproc,'map a ', (int_mb(adrma +k),k=0,n-1) * print *,myproc,'a ', (dbl_mb(adra +k),k=0,3) * print *,myproc,'map z ', (int_mb(adrmz +k),k=0,n-1) * call ffflush(6) * endif call pdspev( n, dbl_mb(adra), int_mb(adrma), & dbl_mb(adrz), int_mb(adrmz), & eval, & int_mb(adris), isize, & dbl_mb(adrip), ptr_size, & dbl_mb(adrsc), rsize, info) * print *,myproc,'out: participate in eig: ',proc * call ffflush(6) if (info .ne. 0) $ call ga_error('gai_diag_std: ... info non-zero ', myproc) endif c call ga_sync() ! To reduce message buffering problems c c*** store the eigenvector matrix in global array g_v c if (oactive) then istart = 0 do k = 1, n if( int_mb(-1+adrmz+k) .eq. int_mb(adrls + myproc))then call ga_put(g_v,1,n,k,k,dbl_mb(adrz+istart),1) istart = istart + n endif enddo c c*** deallocate work arrays c status = .true. status = status .and. ma_pop_stack(hip) status = status .and. ma_pop_stack(hsc) status = status .and. ma_pop_stack(his) status = status .and. ma_pop_stack(hz) status = status .and. ma_pop_stack(ha) status = status .and. ma_pop_stack(hls) status = status .and. ma_pop_stack(hmz) status = status .and. ma_pop_stack(hma) if (.not. status) call ga_error('gai_diag_std: ma_pop',0) endif c c c Make sure that even processes that did not participate in the c diagonalization have the eigen vectors c ga_diag_type = 32760 - 30 call ga_brdcst(ga_diag_type, eval, $ ma_sizeof(MT_DBL,n,MT_BYTE), 0) c if(myproc.eq.0)then c print *, 'evals after brdcast' c print *, (eval(k),k=1,n) c call ffflush(6) c endif c call ga_sync() c end subroutine gai_diag(g_a, g_s, g_v, eval) implicit none #include "mafdecls.fh" #include "global.fh" #include "diag.fh" integer g_a ! matrix to diagonalize integer g_s ! metric integer g_v ! global matrix to return evecs double precision eval(*) ! local array to return evals c c c solve the generalized eigen-value problem returning c all eigen-vectors and values in ascending order c c the input matrices are not destroyed c c proc - # of processors c pans - panel size in columns c n - problem size c c j. nieplocha 08.22.93 c c upgraded for shared memory: 01.14.94 c c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c integer iproc, pan, istart, iend, k, n, npan, proc, myproc integer mypanel, myelem, mycol, elemz, ipan, ik, info logical status c integer hma, adrma !mapa integer hmb, adrmb !mapb integer hmz, adrmz !mapz integer ga_diag_type c integer ha, adra !a integer hb, adrb !b integer hz, adrz !z c integer isize, rsize, ptr_size integer his, adris integer hsc, adrsc integer hip, adrip c double precision drand external pdspgv, drand intrinsic mod c logical oactive ! true iff this process participates integer dimA1, dimA2, typeA integer dimS1, dimS2, typeS integer dimV1, dimV2, typeV c integer hls, adrls ! list of TCG nodes c c integer Elem Elem(istart,iend,n)=((iend-istart+1)*(2*n-istart-iend+2))/2 c c c*** check environment c myproc = ga_nodeid() proc = ga_nnodes() c c*** check GA info c call ga_check_handle(g_a, 'gai_diag: a') call ga_check_handle(g_s, 'gai_diag: s') call ga_check_handle(g_v, 'gai_diag: v') call ga_inquire(g_a, typeA, dimA1, dimA2) call ga_inquire(g_s, typeS, dimS1, dimS2) call ga_inquire(g_v, typeV, dimV1, dimV2) c c if (dimA1 .ne. dimA2) then call ga_error('gai_diag: can only diag square matrix ', 1) else if (dimS1 .ne. dimS2) then call ga_error('gai_diag: can only diag square matrix ', 2) else if (dimV1 .ne. dimV2) then call ga_error('gai_diag: can only diag square matrix ', 3) else if(dimA1.ne.dimS1 .or. dimS1 .ne. dimV1)then call ga_error('gai_diag: A, S, V dimension mismatch ', 4) endif c n = dimA1 if (n .lt. 64) then call ga_diag_seq(g_a, g_s, g_v, eval) return endif c call ga_sync() c pan = 1 !panel size npan = n/pan c proc = min(ga_nnodes(), n/30) c c print *,myproc,' participate in eig: ',proc c call ffflush(6) oactive = myproc .lt. proc if (oactive) then c c allocate map arrays c status = .true. status = status .and. ma_push_get(mt_int,n,'mapa',hma,adrma) status = status .and. ma_push_get(mt_int,n,'mapb',hmb,adrmb) status = status .and. ma_push_get(mt_int,n,'mapz',hmz,adrmz) if (.not. status) $ call ga_error('gai_diag: insufficient memory 1', n) c c allocate and setup list of TCG nodes if( .not. ma_push_get(mt_int, proc,'list',hls,adrls)) $ call ga_error('gai_diag: insufficient memory 1b', n) call ga_list_nodeid(int_mb(adrls), proc) * print *,myproc,'list ', (int_mb(adrls+k),k=0,proc-1) * call ffflush(6) c c c determine distribution of a,b, and z c mypanel = 0 ! number of panels at given processor mycol = 0 ! number of columns at given processor myelem = 0 ! number of elements at given processor c c allocate first half of the panels - forwards c do ipan = 1, npan/2 iproc = mod(ipan -1, proc) istart = (ipan - 1)*pan + 1 iend = istart + pan - 1 do k = istart, iend int_mb(-1+adrma+k) = int_mb(adrls+iproc) int_mb(-1+adrmb+k) = int_mb(adrls+iproc) int_mb(-1+adrmz+k) = int_mb(adrls+iproc) enddo if(iproc .eq. myproc)then myelem = myelem + elem(istart,iend,n) mypanel = mypanel+1 endif enddo c c allocate second half of the panels - backwards c ik = 1 !ik is used to forward number processors do ipan = npan-1, npan/2 +1 , -1 ik = ik+1 iproc = mod(ik -1, proc) istart = (ipan - 1)*pan + 1 iend = istart + pan - 1 do k = istart, iend int_mb(-1+adrma+k) = int_mb(adrls+iproc) int_mb(-1+adrmb+k) = int_mb(adrls+iproc) int_mb(-1+adrmz+k) = int_mb(adrls+iproc) enddo if(iproc .eq. myproc)then myelem = myelem + elem(istart,iend,n) mypanel = mypanel+1 endif enddo c c actually, there is one more panel left for the mismatch c iproc = 0 !processor 0 gets the mismatch panel istart = (npan - 1)*pan + 1 iend = n do k = istart, iend int_mb(-1+adrma+k) = int_mb(adrls+iproc) int_mb(-1+adrmb+k) = int_mb(adrls+iproc) int_mb(-1+adrmz+k) = int_mb(adrls+iproc) enddo mycol = mypanel * pan if(iproc .eq. myproc)then myelem = myelem + elem(istart,iend,n) mycol = mycol + iend - istart + 1 endif elemz = mycol * n c c allocate a,b, and z arrays c status = .true. status = status .and. $ ma_push_get(mt_dbl,myelem,'gai_diag:a',ha,adra) status = status .and. $ ma_push_get(mt_dbl,myelem,'gai_diag:b',hb,adrb) status = status .and. $ ma_push_get(mt_dbl,elemz,'gai_diag:z',hz,adrz) if (.not. status) call ga_error('gai_diag: memory?', myelem) c c load A and S matrices c istart = 0 do k = 1, n if( int_mb(-1+adrma+k) .eq. int_mb(adrls + myproc))then myelem = n-k+1 call ga_get(g_a,k,n,k,k,dbl_mb(adra+istart),1) call ga_get(g_s,k,n,k,k,dbl_mb(adrb+istart),1) istart = istart + myelem endif enddo c c allocate some memory for eigensolver c * * temporary patch following george reccomendation to use 6n * if (.not. ma_push_get(mt_int,6*n,'iscratch',his,adris)) $ call ga_error('gai_diag: memory 2?', 6*n) call fmemreq(0,n,int_mb(adrma),int_mb(adrmb),int_mb(adrmz), & isize, rsize, ptr_size,int_mb(adris)) if (.not. ma_pop_stack(his)) $ call ga_error('gai_diag: ma pop his', 0) if(.not. ma_push_get(mt_int,isize,'iscratch',his,adris)) & call ga_error('eig allocator',1) if(.not. ma_push_get(mt_dbl,rsize,'scratch',hsc,adrsc)) & call ga_error('eig allocator',2) if(.not. ma_push_get(mt_dbl,ptr_size,'iptr',hip,adrip)) & call ga_error('eig allocator',3) c endif c c call ga_sync() ! To reduce message buffering problems c c*** calling PEIGS parallel eigensolver c if (oactive) then * print *,myproc,' participate in eig: ',proc * call ffflush(6) call pdspgv( 1, n, dbl_mb(adra), int_mb(adrma), & dbl_mb(adrb), int_mb(adrmb), & dbl_mb(adrz), int_mb(adrmz), & eval, & int_mb(adris), isize, & dbl_mb(adrip), ptr_size, & dbl_mb(adrsc), rsize, info) * print *,myproc,'out: participate in eig: ',proc * call ffflush(6) if (info .ne. 0) $ call ga_error('gai_diag: info non-zero ', info) endif c call ga_sync() ! To reduce message buffering problems c c*** store the eigenvector matrix in global array g_v c if (oactive) then istart = 0 do k = 1, n if( int_mb(-1+adrmz+k) .eq. int_mb(adrls + myproc))then call ga_put(g_v,1,n,k,k,dbl_mb(adrz+istart),1) istart = istart + n endif enddo c c*** deallocate work arrays c status = .true. status = status .and. ma_pop_stack(hip) status = status .and. ma_pop_stack(hsc) status = status .and. ma_pop_stack(his) status = status .and. ma_pop_stack(hz) status = status .and. ma_pop_stack(hb) status = status .and. ma_pop_stack(ha) status = status .and. ma_pop_stack(hls) status = status .and. ma_pop_stack(hmz) status = status .and. ma_pop_stack(hmb) status = status .and. ma_pop_stack(hma) if (.not. status) call ga_error('gai_diag: ma_pop?', 0) endif c c c Make sure that even processes that did not participate in the c diagonalization have the eigen vectors c c if(myproc.eq.proc-1)then c print *, 'evals P-1' c print *, (eval(k),k=1,n) c call ffflush(6) c endif ga_diag_type = 32760 - 30 call ga_brdcst(ga_diag_type, eval, $ ma_sizeof(MT_DBL,n,MT_BYTE), 0) c call ga_sync() c end c subroutine gai_diag_reuse(reuse,g_a, g_s, g_v, eval) implicit none #include "mafdecls.fh" #include "global.fh" #include "diag.fh" integer reuse ! allows to reuse factorized g_s ! 0 first time, ! >0 following calls ! <0 only deletes factorized g_s integer g_a ! matrix to diagonalize integer g_s ! metric integer g_v ! global matrix to return evecs double precision eval(*) ! local array to return evals c c c solve the generalized eigen-value problem returning c all eigen-vectors and values in ascending order c c the input matrices are not destroyed c c proc - # of processors c pans - panel size in columns c n - problem size c c j. nieplocha 02.08.94 c c c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c integer iproc, pan, istart, iend, k, n, npan, proc, myproc integer mypanel, myelem, mycol, elemz, ipan, ik, info logical status, first_time integer g_ps, eig_flag, thr_seq save g_ps, first_time c integer hma, adrma !mapa integer hmb, adrmb !mapb integer hmz, adrmz !mapz integer ga_diag_type c integer ha, adra !a integer hb, adrb !b integer hz, adrz !z c integer isize, rsize, ptr_size integer his, adris integer hsc, adrsc integer hip, adrip c double precision drand external pdspgv, drand intrinsic mod c logical oactive ! true iff this process participates integer dimA1, dimA2, typeA integer dimS1, dimS2, typeS integer dimV1, dimV2, typeV c integer hls, adrls ! list of TCG nodes c c integer Elem Elem(istart,iend,n)=((iend-istart+1)*(2*n-istart-iend+2))/2 data first_time /.true./ data thr_seq /64/ !min problem size to be run in parallel c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c*** check the environment c myproc = ga_nodeid() proc = ga_nnodes() c c*** check GA handles, types and dimensions c call ga_check_handle(g_a, 'gai_diag: a') call ga_check_handle(g_s, 'gai_diag: s') call ga_check_handle(g_v, 'gai_diag: v') c c... unless it is the first call, check if g_s has not changed c if(first_time)then g_ps = g_s else if(g_ps .ne. g_s) $ call ga_error('gai_diag:attempt to reuse invalid data ',g_ps) endif c call ga_inquire(g_a, typeA, dimA1, dimA2) call ga_inquire(g_s, typeS, dimS1, dimS2) call ga_inquire(g_v, typeV, dimV1, dimV2) c c... verify if the dimensions match c if (dimA1 .ne. dimA2) then call ga_error(' gai_diag: can only diag square matrix ', 1) else if (dimS1 .ne. dimS2) then call ga_error(' gai_diag: can only diag square matrix ', 2) else if (dimV1 .ne. dimV2) then call ga_error(' gai_diag: can only diag square matrix ', 3) else if(dimA1.ne.dimS1 .or. dimS1 .ne. dimV1)then call ga_error(' gai_diag: A, S, V dimension mismatch ', 4) endif c c*** for smallest problems use sequential eigensolver c n = dimA1 if (n .lt. thr_seq) then call ga_diag_seq(g_a, g_s, g_v, eval) return endif c call ga_sync() c c*** test the reuse value and take the proper action c if((reuse .ne. 0) .and. first_time) $ call ga_error(' gai_diag: cannot reuse uninitialized data',reuse) c c... detect repeated "first-time" calls -- they are allowed if c... storage allocated for B is deallocated first c if((reuse .eq. 0) .and. .not. first_time) $ call ga_error(' gai_diag_reuse: repeated call, memory problem',0) c c... case for < 0 is just a cleanup of storage for B c if(reuse .lt. 0) then if(.not. first_time) then if (.not. ma_free_heap(hb)) $ call ga_error('ga_reuse: ma_free hb', 0) if (.not. ma_free_heap(hmb)) $ call ga_error('ga_reuse: ma_free hmb', 0) first_time = .true. endif return endif c c... set the flag for George eigensolver (orthogonal to reuse) c if(reuse.eq.0) then eig_flag = 1 else eig_flag = 0 endif c c*** for smaller problems use fewer processors (performance reasons) c pan = 1 !panel size npan = n/pan c proc = min( ga_nnodes(), n/30) c oactive = myproc .lt. proc if (oactive) then c c*** allocate storage for map arrays: A & Z from stack and B from heap c status = ma_push_get(mt_int,n,'mapa',hma,adrma) if(.not.status)call ga_error('gai_diag: mapa not allocated ',0) if(first_time)status = ma_alloc_get(mt_int,n,'mapb',hmb,adrmb) if(.not.status)call ga_error('gai_diag: mapb not allocated ',0) status = ma_push_get(mt_int,n,'mapz',hmz,adrmz) if(.not.status)call ga_error('gai_diag: mapc not allocated ',0) c c allocate and setup list of TCG nodes if( .not. ma_push_get(mt_int, proc,'list',hls,adrls)) $ call ga_error('gai_diag_std: insufficient memory 1b', n) call ga_list_nodeid(int_mb(adrls), proc) c c c*** determine distribution of a,b, and z c mypanel = 0 ! number of panels at given processor mycol = 0 ! number of columns at given processor myelem = 0 ! number of elements at given processor c c... allocate first half of the panels - forwards c do ipan = 1, npan/2 iproc = mod(ipan -1, proc) istart = (ipan - 1)*pan + 1 iend = istart + pan - 1 do k = istart, iend int_mb(-1+adrma+k) = int_mb(adrls+iproc) if(first_time)int_mb(-1+adrmb+k) = int_mb(adrls+iproc) int_mb(-1+adrmz+k) = int_mb(adrls+iproc) enddo if(iproc .eq. myproc)then myelem = myelem + elem(istart,iend,n) mypanel = mypanel+1 endif enddo c c... allocate second half of the panels - backwards c ik = 1 !ik is used to forward number processors do ipan = npan-1, npan/2 +1 , -1 ik = ik+1 iproc = mod(ik -1, proc) istart = (ipan - 1)*pan + 1 iend = istart + pan - 1 do k = istart, iend int_mb(-1+adrma+k) = int_mb(adrls+iproc) if(first_time)int_mb(-1+adrmb+k) = int_mb(adrls+iproc) int_mb(-1+adrmz+k) = int_mb(adrls+iproc) enddo if(iproc .eq. myproc)then myelem = myelem + elem(istart,iend,n) mypanel = mypanel+1 endif enddo c c... actually, there is one more panel left for the mismatch c iproc = 0 !processor 0 gets the mismatch panel istart = (npan - 1)*pan + 1 iend = n do k = istart, iend int_mb(-1+adrma+k) = int_mb(adrls+iproc) if(first_time)int_mb(-1+adrmb+k) = int_mb(adrls+iproc) int_mb(-1+adrmz+k) = int_mb(adrls+iproc) enddo mycol = mypanel * pan if(iproc .eq. myproc)then myelem = myelem + elem(istart,iend,n) mycol = mycol + iend - istart + 1 endif elemz = mycol * n c c*** allocate arrays: A & Z from stack and B from heap c status = ma_push_get(mt_dbl,myelem,'a',ha,adra) if(.not. status)call ga_error('gai_diag: a not allocated ',0) if(first_time)status = ma_alloc_get(mt_dbl,myelem,'b',hb,adrb) if(.not. status)call ga_error('gai_diag: b not allocated ',0) status = ma_push_get(mt_dbl,elemz,'z',hz,adrz) if(.not. status)call ga_error('gai_diag: c not allocated ',0) c c*** load A and S matrices c istart = 0 do k = 1, n if( int_mb(-1+adrma+k) .eq. int_mb(adrls + myproc))then myelem = n-k+1 call ga_get(g_a,k,n,k,k,dbl_mb(adra+istart),1) if(first_time) % call ga_get(g_s,k,n,k,k,dbl_mb(adrb+istart),1) istart = istart + myelem endif enddo c c*** allocate some scratch memory for eigensolver c * * temporary patch following george reccomendation to use 6n * status = ma_push_get(mt_int,6*n,'iscratch',his,adris) if (.not. status) call ga_error('ga_reuse: 6*n', 6*n) call fmemreq(0,n,int_mb(adrma),int_mb(adrmb),int_mb(adrmz), & isize, rsize, ptr_size,int_mb(adris)) status = ma_pop_stack(his) if (.not. status) call ga_error('ga_reuse: ma pop his', 0) if(.not. ma_push_get(mt_int,isize,'iscratch',his,adris)) & call ga_error('eig allocator',1) if(.not. ma_push_get(mt_dbl,rsize,'scratch',hsc,adrsc)) & call ga_error('eig allocator',2) if(.not. ma_push_get(mt_dbl,ptr_size,'iptr',hip,adrip)) & call ga_error('eig allocator',3) c endif c c call ga_sync() ! To reduce message buffering problems c c*** calling PEIGS parallel eigensolver c if (oactive) then call pdspgv( eig_flag, n, dbl_mb(adra), int_mb(adrma), & dbl_mb(adrb), int_mb(adrmb), & dbl_mb(adrz), int_mb(adrmz), & eval, & int_mb(adris), isize, & dbl_mb(adrip), ptr_size, & dbl_mb(adrsc), rsize, info) if (info .ne. 0) $ call ga_error('gai_diag: info non-zero ', info) endif c call ga_sync() ! To reduce message buffering problems c c*** store the eigenvector matrix in global array g_v c if (oactive) then istart = 0 do k = 1, n if( int_mb(-1+adrmz+k) .eq. int_mb(adrls + myproc))then call ga_put(g_v,1,n,k,k,dbl_mb(adrz+istart),1) istart = istart + n endif enddo c c*** deallocate storage for temporary arrays c status = .true. status = status .and. ma_pop_stack(hip) status = status .and. ma_pop_stack(hsc) status = status .and. ma_pop_stack(his) status = status .and. ma_pop_stack(hz) status = status .and. ma_pop_stack(ha) status = status .and. ma_pop_stack(hls) status = status .and. ma_pop_stack(hmz) status = status .and. ma_pop_stack(hma) if (.not. status) call ga_error('ga_reuse: ma_pop?', 0) endif c c c*** Make sure that even processes that did not participate in the c*** diagonalization have the eigen vectors c ga_diag_type = 32760 - 30 call ga_brdcst(ga_diag_type, eval, $ ma_sizeof(MT_DBL,n,MT_BYTE), 0) c if(reuse.eq.0) first_time = .false. c call ga_sync() end ga-5-3/global/src/fapi.c0000640005473000001440000027336312207426413013725 0ustar d3n000users/** * @file fapi.c * * Implements the Fortran interface. * These calls forward to the (possibly) weak symbols of the internal * implementations. */ #if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDLIB_H # include #endif #include "cnames.h" #include "farg.h" #include "globalp.h" #include "macommon.h" #include "matmul.h" int _ga_initialize_f=0; #include "ga-papi.h" #if ENABLE_PROFILING # include "ga-wapi.h" #else # include "ga-wapidefs.h" #endif #define FNAM 31 #define FMSG 256 /* Routines from base.c */ logical FATR ga_allocate_(Integer *g_a) { return wnga_allocate(*g_a); } logical FATR nga_allocate_(Integer *g_a) { return wnga_allocate(*g_a); } logical FATR ga_compare_distr_(Integer *g_a, Integer *g_b) { return wnga_compare_distr(*g_a, *g_b); } logical FATR nga_compare_distr_(Integer *g_a, Integer *g_b) { return wnga_compare_distr(*g_a, *g_b); } logical FATR ga_create_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS type, dim1, dim2, array_name, chunk1, chunk2, g_a, slen #else type, dim1, dim2, array_name, slen, chunk1, chunk2, g_a #endif ) Integer *type, *dim1, *dim2, *chunk1, *chunk2, *g_a; int slen; char* array_name; { char buf[FNAM]; Integer ndim, dims[2], chunk[2]; ga_f2cstring(array_name ,slen, buf, FNAM); dims[0] = *dim1; dims[1] = *dim2; ndim = 2; chunk[0] = (*chunk1==0)? -1 : *chunk1; chunk[1] = (*chunk2==0)? -1 : *chunk2; return(wnga_create(*type, ndim, dims, buf, chunk, g_a)); } logical FATR nga_create_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer *type, Integer *ndim, Integer *dims, char* array_name, Integer *chunk, Integer *g_a, int slen #else Integer *type, Integer *ndim, Integer *dims, char* array_name, int slen, Integer *p_handle, Integer *g_a #endif ) { char buf[FNAM]; ga_f2cstring(array_name ,slen, buf, FNAM); return (wnga_create(*type, *ndim, dims, buf, chunk, g_a)); } logical FATR nga_create_config_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer *type, Integer *ndim, Integer *dims, char* array_name, Integer *chunk, Integer *p_handle, Integer *g_a, int slen #else Integer *type, Integer *ndim, Integer *dims, char* array_name, int slen, Integer *chunk, Integer *p_handle, Integer *g_a #endif ) { char buf[FNAM]; ga_f2cstring(array_name ,slen, buf, FNAM); return (wnga_create_config(*type, *ndim, dims, buf, chunk, *p_handle, g_a)); } logical FATR nga_create_ghosts_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer *type, Integer *ndim, Integer *dims, Integer *width, char* array_name, Integer *chunk, Integer *g_a, int slen #else Integer *type, Integer *ndim, Integer *dims, Integer *width, char* array_name, int slen, Integer *chunk, Integer *g_a #endif ) { char buf[FNAM]; ga_f2cstring(array_name ,slen, buf, FNAM); return (wnga_create_ghosts(*type, *ndim, dims, width, buf, chunk, g_a)); } logical FATR nga_create_ghosts_config_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer *type, Integer *ndim, Integer *dims, Integer *width, char* array_name, Integer *chunk, Integer *p_handle, Integer *g_a, int slen #else Integer *type, Integer *ndim, Integer *dims, Integer *width, char* array_name, int slen, Integer *chunk, Integer *p_handle, Integer *g_a #endif ) { char buf[FNAM]; ga_f2cstring(array_name ,slen, buf, FNAM); return (wnga_create_ghosts_config(*type, *ndim, dims, width, buf, chunk, *p_handle, g_a)); } logical FATR nga_create_ghosts_irreg_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer *type, Integer *ndim, Integer *dims, Integer width[], char* array_name, Integer map[], Integer block[], Integer *g_a, int slen #else Integer *type, Integer *ndim, Integer *dims, Integer width[], char* array_name, int slen, Integer map[], Integer block[], Integer *g_a #endif ) { char buf[FNAM]; Integer st; ga_f2cstring(array_name ,slen, buf, FNAM); st = wnga_create_ghosts_irreg(*type, *ndim, dims, width, buf, map, block, g_a); return st; } logical FATR nga_create_ghosts_irreg_config_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer *type, Integer *ndim, Integer *dims, Integer width[], char* array_name, Integer map[], Integer block[], Integer *p_handle, Integer *g_a, int slen #else Integer *type, Integer *ndim, Integer *dims, Integer width[], char* array_name, int slen, Integer map[], Integer block[], Integer *p_handle, Integer *g_a #endif ) { char buf[FNAM]; Integer st; ga_f2cstring(array_name ,slen, buf, FNAM); st = wnga_create_ghosts_irreg_config(*type, *ndim, dims, width, buf, map, block, *p_handle, g_a); return st; } logical FATR ga_create_irreg_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer *type, Integer *dim1, Integer *dim2, char *array_name, Integer *map1, Integer *nblock1, Integer *map2, Integer *nblock2, Integer *g_a, int slen #else Integer *type, Integer *dim1, Integer *dim2, char *array_name, int slen, Integer *map1, Integer *nblock1, Integer *map2, Integer *nblock2, Integer *g_a #endif ) { char buf[FNAM]; Integer i, ndim, dims[2], block[2], *map; Integer status; ga_f2cstring(array_name ,slen, buf, FNAM); dims[0] = *dim1; dims[1] = *dim2; block[0] = *nblock1; block[1] = *nblock2; ndim = 2; map = (Integer*)malloc((wnga_nnodes()+1)*sizeof(Integer)); for(i=0; i<*nblock1; i++) map[i] = map1[i]; for(i=0; i<*nblock2; i++) map[i+ *nblock1] = map2[i]; status = wnga_create_irreg(*type, ndim, dims, buf, map, block, g_a); free(map); return status; } logical FATR nga_create_irreg_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer *type, Integer *ndim, Integer *dims, char* array_name, Integer map[], Integer block[], Integer *g_a, int slen #else Integer *type, Integer *ndim, Integer *dims, char* array_name, int slen, Integer map[], Integer block[], Integer *g_a #endif ) { char buf[FNAM]; Integer st; ga_f2cstring(array_name ,slen, buf, FNAM); st = wnga_create_irreg(*type, *ndim, dims, buf, map, block, g_a); return st; } logical FATR nga_create_irreg_config_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer *type, Integer *ndim, Integer *dims, char* array_name, Integer map[], Integer block[], Integer *p_handle, Integer *g_a, int slen #else Integer *type, Integer *ndim, Integer *dims, char* array_name, int slen, Integer map[], Integer block[], Integer *p_handle, Integer *g_a #endif ) { char buf[FNAM]; Integer st; ga_f2cstring(array_name ,slen, buf, FNAM); st = wnga_create_irreg_config(*type, *ndim, dims, buf, map, block, *p_handle, g_a); return st; } Integer FATR ga_create_handle_() { return wnga_create_handle(); } Integer FATR nga_create_handle_() { return wnga_create_handle(); } logical FATR ga_create_mutexes_(Integer *num) { return wnga_create_mutexes(*num); } logical FATR nga_create_mutexes_(Integer *num) { return wnga_create_mutexes(*num); } logical FATR ga_destroy_(Integer *g_a) { return wnga_destroy(*g_a); } logical FATR nga_destroy_(Integer *g_a) { return wnga_destroy(*g_a); } logical FATR ga_destroy_mutexes_() { return wnga_destroy_mutexes(); } logical FATR nga_destroy_mutexes_() { return wnga_destroy_mutexes(); } void FATR ga_distribution_(Integer *g_a, Integer *proc, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi) { Integer lo[2], hi[2]; wnga_distribution(*g_a, *proc, lo, hi); *ilo = lo[0]; *jlo = lo[1]; *ihi = hi[0]; *jhi = hi[1]; } void FATR nga_distribution_(Integer *g_a, Integer *proc, Integer *lo, Integer *hi) { wnga_distribution(*g_a, *proc, lo, hi); } logical FATR ga_duplicate_( Integer *g_a, Integer *g_b, char *array_name, int slen) { char buf[FNAM]; ga_f2cstring(array_name ,slen, buf, FNAM); return(wnga_duplicate(*g_a, g_b, buf)); } logical FATR nga_duplicate_( Integer *g_a, Integer *g_b, char *array_name, int slen) { char buf[FNAM]; ga_f2cstring(array_name ,slen, buf, FNAM); return(wnga_duplicate(*g_a, g_b, buf)); } void FATR ga_fill_(Integer *g_a, void* val) { wnga_fill(*g_a, val); } void FATR nga_fill_(Integer *g_a, void* val) { wnga_fill(*g_a, val); } void FATR ga_get_block_info_(Integer *g_a, Integer *num_blocks, Integer *block_dims) { wnga_get_block_info(*g_a, num_blocks, block_dims); } void FATR nga_get_block_info_(Integer *g_a, Integer *num_blocks, Integer *block_dims) { wnga_get_block_info(*g_a, num_blocks, block_dims); } logical FATR ga_get_debug_() { return wnga_get_debug(); } logical FATR nga_get_debug_() { return wnga_get_debug(); } Integer FATR ga_get_dimension_(Integer *g_a) { return wnga_get_dimension(*g_a); } Integer FATR nga_get_dimension_(Integer *g_a) { return wnga_get_dimension(*g_a); } Integer FATR ga_get_pgroup_(Integer *g_a) { return wnga_get_pgroup(*g_a); } Integer FATR nga_get_pgroup_(Integer *g_a) { return wnga_get_pgroup(*g_a); } Integer FATR ga_get_pgroup_size_(Integer *grp_id) { return wnga_get_pgroup_size(*grp_id); } Integer FATR nga_get_pgroup_size_(Integer *grp_id) { return wnga_get_pgroup_size(*grp_id); } void FATR ga_get_proc_grid_(Integer *g_a, Integer *dims) { wnga_get_proc_grid(*g_a, dims); } void FATR ga_get_proc_index_(Integer *g_a, Integer *iproc, Integer *index) { wnga_get_proc_index(*g_a, *iproc, index); } void FATR nga_get_proc_index_(Integer *g_a, Integer *iproc, Integer *index) { wnga_get_proc_index(*g_a, *iproc, index); } void FATR nga_get_proc_grid_(Integer *g_a, Integer *dims) { wnga_get_proc_grid(*g_a, dims); } logical FATR ga_has_ghosts_(Integer *g_a) { return wnga_has_ghosts(*g_a); } logical FATR nga_has_ghosts_(Integer *g_a) { return wnga_has_ghosts(*g_a); } void FATR ga_initialize_() { _ga_initialize_f=1; wnga_initialize(); } void FATR nga_initialize_() { _ga_initialize_f=1; wnga_initialize(); } void FATR ga_initialize_ltd_(Integer *limit) { _ga_initialize_f=1; wnga_initialize_ltd(*limit); } void FATR nga_initialize_ltd_(Integer *limit) { _ga_initialize_f=1; wnga_initialize_ltd(*limit); } logical FATR ga_initialized_() { return wnga_initialized(); } logical FATR nga_initialized_() { return wnga_initialized(); } void FATR ga_inquire_(Integer *g_a, Integer *type, Integer *dim1, Integer *dim2) { Integer dims[2], ndim; wnga_inquire(*g_a, type, &ndim, dims); if (ndim != 2) wnga_error("Wrong array dimension in ga_inquire",ndim); *type = pnga_type_c2f(*type); *dim1 = dims[0]; *dim2 = dims[1]; } void FATR nga_inquire_(Integer *g_a, Integer *type, Integer *ndim, Integer *dims) { wnga_inquire(*g_a, type, ndim, dims); *type = pnga_type_c2f(*type); } Integer FATR ga_inquire_memory_() { return wnga_inquire_memory(); } Integer FATR nga_inquire_memory_() { return wnga_inquire_memory(); } void FATR ga_inquire_name_(Integer *g_a, char *array_name, int len) { char *c_name; wnga_inquire_name(*g_a, &c_name); ga_c2fstring(c_name, array_name, len); } void FATR nga_inquire_name_(Integer *g_a, char *array_name, int len) { char *c_name; wnga_inquire_name(*g_a, &c_name); ga_c2fstring(c_name, array_name, len); } logical FATR ga_is_mirrored_(Integer *g_a) { return wnga_is_mirrored(*g_a); } logical FATR nga_is_mirrored_(Integer *g_a) { return wnga_is_mirrored(*g_a); } void FATR ga_list_nodeid_(Integer *list, Integer *nprocs) { wnga_list_nodeid(list, *nprocs); } void FATR nga_list_nodeid_(Integer *list, Integer *nprocs) { wnga_list_nodeid(list, *nprocs); } Integer FATR nga_locate_num_blocks_(Integer *g_a, Integer *lo, Integer *hi) { return wnga_locate_num_blocks(*g_a,lo,hi); } logical FATR ga_locate_nnodes_( Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, Integer *np) { Integer lo[2], hi[2]; lo[0] = *ilo; lo[1] = *jlo; hi[0] = *ihi; hi[1] = *jhi; return wnga_locate_nnodes(*g_a, lo, hi, np); } logical FATR nga_locate_nnodes_(Integer *g_a, Integer *lo, Integer *hi, Integer *np) { return wnga_locate_nnodes(*g_a, lo, hi, np); } logical FATR ga_locate_region_( Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, Integer map[][5], Integer *np) { logical status = FALSE; Integer lo[2], hi[2], p; Integer *mapl, *proclist; proclist = (Integer*)malloc(wnga_nnodes()*sizeof(Integer)); mapl = (Integer*)malloc(5*wnga_nnodes()*sizeof(Integer)); lo[0] = *ilo; lo[1] = *jlo; hi[0] = *ihi; hi[1] = *jhi; if (wnga_locate_num_blocks(*g_a, lo, hi) == -1) { status = wnga_locate_region(*g_a, lo, hi, mapl, proclist, np); /* need to swap elements (ilo,jlo,ihi,jhi) -> (ilo,ihi,jlo,jhi) */ for(p = 0; p< *np; p++){ map[p][0] = mapl[4*p]; map[p][1] = mapl[4*p + 2]; map[p][2] = mapl[4*p + 1]; map[p][3] = mapl[4*p + 3]; map[p][4] = proclist[p]; } } else { wnga_error("Must call nga_locate_region on block-cyclic data distribution",0); } free(proclist); free(mapl); return status; } logical FATR nga_locate_region_( Integer *g_a, Integer *lo, Integer *hi, Integer *map, Integer *proclist, Integer *np) { return wnga_locate_region(*g_a, lo, hi, map, proclist, np); } void FATR ga_lock_(Integer *mutex) { wnga_lock(*mutex); } void FATR nga_lock_(Integer *mutex) { wnga_lock(*mutex); } logical FATR ga_locate_(Integer *g_a, Integer *i, Integer *j, Integer *owner) { Integer subscript[2]; subscript[0] = *i; subscript[1] = *j; return wnga_locate(*g_a, subscript, owner); } logical FATR nga_locate_(Integer *g_a, Integer *subscript, Integer *owner) { return wnga_locate(*g_a, subscript, owner); } void FATR ga_mask_sync_(Integer *begin, Integer *end) { wnga_mask_sync(*begin, *end); } void FATR nga_mask_sync_(Integer *begin, Integer *end) { wnga_mask_sync(*begin, *end); } Integer FATR ga_memory_avail_() { return wnga_memory_avail(); } Integer FATR nga_memory_avail_() { return wnga_memory_avail(); } logical FATR ga_memory_limited_() { return wnga_memory_limited(); } logical FATR nga_memory_limited_() { return wnga_memory_limited(); } void FATR nga_merge_distr_patch_(Integer *g_a, Integer *alo, Integer *ahi, Integer *g_b, Integer *blo, Integer *bhi) { wnga_merge_distr_patch(*g_a, alo, ahi, *g_b, blo, bhi); } void FATR ga_merge_mirrored_(Integer *g_a) { wnga_merge_mirrored(*g_a); } void FATR nga_merge_mirrored_(Integer *g_a) { wnga_merge_mirrored(*g_a); } void FATR ga_nblock_(Integer *g_a, Integer *nblock) { wnga_nblock(*g_a, nblock); } void FATR nga_nblock_(Integer *g_a, Integer *nblock) { wnga_nblock(*g_a, nblock); } Integer FATR ga_ndim_(Integer *g_a) { return wnga_ndim(*g_a); } Integer FATR nga_ndim_(Integer *g_a) { return wnga_ndim(*g_a); } Integer FATR ga_nnodes_() { return wnga_nnodes(); } Integer FATR nga_nnodes_() { return wnga_nnodes(); } Integer FATR ga_nodeid_() { return wnga_nodeid(); } Integer FATR nga_nodeid_() { return wnga_nodeid(); } Integer FATR ga_pgroup_absolute_id_(Integer *grp, Integer *pid) { return wnga_pgroup_absolute_id(*grp, *pid); } Integer FATR nga_pgroup_absolute_id_(Integer *grp, Integer *pid) { return wnga_pgroup_absolute_id(*grp, *pid); } Integer FATR ga_pgroup_create_(Integer *list, Integer *count) { return wnga_pgroup_create(list, *count); } Integer FATR nga_pgroup_create_(Integer *list, Integer *count) { return wnga_pgroup_create(list, *count); } logical FATR ga_pgroup_destroy_(Integer *grp) { return wnga_pgroup_destroy(*grp); } logical FATR nga_pgroup_destroy_(Integer *grp) { return wnga_pgroup_destroy(*grp); } Integer FATR ga_pgroup_get_default_() { return wnga_pgroup_get_default(); } Integer FATR nga_pgroup_get_default_() { return wnga_pgroup_get_default(); } Integer FATR ga_pgroup_get_mirror_() { return wnga_pgroup_get_mirror(); } Integer FATR nga_pgroup_get_mirror_() { return wnga_pgroup_get_mirror(); } Integer FATR ga_pgroup_get_world_() { return wnga_pgroup_get_world(); } Integer FATR nga_pgroup_get_world_() { return wnga_pgroup_get_world(); } void FATR ga_pgroup_set_default_(Integer *grp) { wnga_pgroup_set_default(*grp); } void FATR nga_pgroup_set_default_(Integer *grp) { wnga_pgroup_set_default(*grp); } Integer FATR ga_pgroup_split_(Integer *grp, Integer *grp_num) { return wnga_pgroup_split(*grp, *grp_num); } Integer FATR nga_pgroup_split_(Integer *grp, Integer *grp_num) { return wnga_pgroup_split(*grp, *grp_num); } Integer FATR ga_pgroup_split_irreg_(Integer *grp, Integer *mycolor) { return wnga_pgroup_split_irreg(*grp, *mycolor); } Integer FATR nga_pgroup_split_irreg_(Integer *grp, Integer *mycolor) { return wnga_pgroup_split_irreg(*grp, *mycolor); } Integer FATR ga_pgroup_nnodes_(Integer *grp) { return wnga_pgroup_nnodes(*grp); } Integer FATR nga_pgroup_nnodes_(Integer *grp) { return wnga_pgroup_nnodes(*grp); } Integer FATR ga_pgroup_nodeid_(Integer *grp) { return wnga_pgroup_nodeid(*grp); } Integer FATR nga_pgroup_nodeid_(Integer *grp) { return wnga_pgroup_nodeid(*grp); } void FATR ga_proc_topology_(Integer* g_a, Integer* proc, Integer* pr, Integer *pc) { Integer subscript[2]; wnga_proc_topology(*g_a, *proc, subscript); *pr = subscript[0]; *pc = subscript[1]; } void FATR nga_proc_topology_(Integer* g_a, Integer* proc, Integer* subscript) { wnga_proc_topology(*g_a, *proc, subscript); } void FATR ga_randomize_(Integer *g_a, void* val) { wnga_randomize(*g_a, val); } void FATR nga_randomize_(Integer *g_a, void* val) { wnga_randomize(*g_a, val); } void FATR ga_set_array_name_(Integer *g_a, char *array_name, int slen) { char buf[FNAM]; ga_f2cstring(array_name ,slen, buf, FNAM); wnga_set_array_name(*g_a, buf); } void FATR nga_set_array_name_(Integer *g_a, char *array_name, int slen) { char buf[FNAM]; ga_f2cstring(array_name ,slen, buf, FNAM); wnga_set_array_name(*g_a, buf); } void FATR ga_set_block_cyclic_(Integer *g_a, Integer *dims) { wnga_set_block_cyclic(*g_a, dims); } void FATR nga_set_block_cyclic_(Integer *g_a, Integer *dims) { wnga_set_block_cyclic(*g_a, dims); } void FATR ga_set_block_cyclic_proc_grid_(Integer *g_a, Integer *dims, Integer *proc_grid) { wnga_set_block_cyclic_proc_grid(*g_a, dims, proc_grid); } void FATR nga_set_block_cyclic_proc_grid_(Integer *g_a, Integer *dims, Integer *proc_grid) { wnga_set_block_cyclic_proc_grid(*g_a, dims, proc_grid); } void FATR ga_set_chunk_(Integer *g_a, Integer *chunk) { wnga_set_chunk(*g_a, chunk); } void FATR nga_set_chunk_(Integer *g_a, Integer *chunk) { wnga_set_chunk(*g_a, chunk); } void FATR ga_set_data_(Integer *g_a, Integer *ndim, Integer *dims, Integer *type) { wnga_set_data(*g_a, *ndim, dims, *type); } void FATR nga_set_data_(Integer *g_a, Integer *ndim, Integer *dims, Integer *type) { wnga_set_data(*g_a, *ndim, dims, *type); } void FATR ga_set_debug_(logical *flag) { wnga_set_debug(*flag); } void FATR nga_set_debug_(logical *flag) { wnga_set_debug(*flag); } void FATR ga_set_ghosts_(Integer *g_a, Integer *width) { wnga_set_ghosts(*g_a,width); } void FATR nga_set_ghosts_(Integer *g_a, Integer *width) { wnga_set_ghosts(*g_a,width); } void FATR ga_set_irreg_distr_(Integer *g_a, Integer *mapc, Integer *nblock) { wnga_set_irreg_distr(*g_a, mapc, nblock); } void FATR nga_set_irreg_distr_(Integer *g_a, Integer *mapc, Integer *nblock) { wnga_set_irreg_distr(*g_a, mapc, nblock); } void FATR ga_set_irreg_flag_(Integer *g_a, logical *flag) { wnga_set_irreg_flag(*g_a, *flag); } void FATR nga_set_irreg_flag_(Integer *g_a, logical *flag) { wnga_set_irreg_flag(*g_a, *flag); } void FATR ga_set_memory_limit_(Integer *mem_limit) { wnga_set_memory_limit(*mem_limit); } void FATR nga_set_memory_limit_(Integer *mem_limit) { wnga_set_memory_limit(*mem_limit); } void FATR ga_set_pgroup_(Integer *g_a, Integer *p_handle) { wnga_set_pgroup(*g_a, *p_handle); } void FATR nga_set_pgroup_(Integer *g_a, Integer *p_handle) { wnga_set_pgroup(*g_a, *p_handle); } void FATR ga_set_restricted_(Integer *g_a, Integer *list, Integer *size) { wnga_set_restricted(*g_a, list, *size); } void FATR nga_set_restricted_(Integer *g_a, Integer *list, Integer *size) { wnga_set_restricted(*g_a, list, *size); } void FATR ga_set_restricted_range_(Integer *g_a, Integer *lo_proc, Integer *hi_proc) { wnga_set_restricted_range(*g_a, *lo_proc, *hi_proc); } void FATR nga_set_restricted_range_(Integer *g_a, Integer *lo_proc, Integer *hi_proc) { wnga_set_restricted_range(*g_a, *lo_proc, *hi_proc); } void FATR ga_terminate_() { wnga_terminate(); _ga_initialize_f=0; } void FATR nga_terminate_() { wnga_terminate(); _ga_initialize_f=0; } Integer FATR ga_total_blocks_(Integer *g_a) { return wnga_total_blocks(*g_a); } Integer FATR nga_total_blocks_(Integer *g_a) { return wnga_total_blocks(*g_a); } void FATR ga_unlock_(Integer *mutex) { wnga_unlock(*mutex); } void FATR nga_unlock_(Integer *mutex) { wnga_unlock(*mutex); } logical FATR ga_uses_ma_() { return wnga_uses_ma(); } logical FATR nga_uses_ma_() { return wnga_uses_ma(); } logical FATR ga_uses_proc_grid_(Integer *g_a) { return wnga_uses_proc_grid(*g_a); } logical FATR nga_uses_proc_grid_(Integer *g_a) { return wnga_uses_proc_grid(*g_a); } logical FATR ga_valid_handle_(Integer *g_a) { return wnga_valid_handle(*g_a); } logical FATR nga_valid_handle_(Integer *g_a) { return wnga_valid_handle(*g_a); } Integer FATR ga_verify_handle_(Integer *g_a) { return wnga_verify_handle(*g_a); } Integer FATR nga_verify_handle_(Integer *g_a) { return wnga_verify_handle(*g_a); } void FATR ga_check_handle_(Integer *g_a, char *fstring, int slen) { char buf[FMSG]; ga_f2cstring(fstring , slen, buf, FMSG); wnga_check_handle(*g_a, buf); } void FATR nga_check_handle_(Integer *g_a, char *fstring, int slen) { char buf[FMSG]; ga_f2cstring(fstring , slen, buf, FMSG); wnga_check_handle(*g_a, buf); } /* Routines from onesided.c */ void FATR ga_acc_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, void *buf, Integer *ld, void *alpha) { Integer lo[2], hi[2]; lo[0]=*ilo; lo[1]=*jlo; hi[0]=*ihi; hi[1]=*jhi; wnga_acc(*g_a, lo, hi, buf, ld, alpha); } void FATR nga_acc_(Integer *g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, void *alpha) { wnga_acc(*g_a, lo, hi, buf, ld, alpha); } void FATR ga_access_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, AccessIndex* index, Integer *ld) { Integer lo[2], hi[2]; lo[0]=*ilo; lo[1]=*jlo; hi[0]=*ihi; hi[1]=*jhi; wnga_access_idx(*g_a, lo, hi, index, ld); } void FATR nga_access_(Integer* g_a, Integer lo[], Integer hi[], AccessIndex* index, Integer ld[]) { wnga_access_idx(*g_a, lo, hi, index, ld); } void FATR nga_access_block_(Integer* g_a, Integer* idx, AccessIndex* index, Integer *ld) { wnga_access_block_idx(*g_a, *idx, index, ld); } void FATR nga_access_block_grid_(Integer* g_a, Integer* subscript, AccessIndex *index, Integer *ld) { wnga_access_block_grid_idx(*g_a, subscript, index, ld); } void FATR nga_access_block_segment_(Integer* g_a, Integer *proc, AccessIndex* index, Integer *len) { wnga_access_block_segment_idx(*g_a, *proc, index, len); } void FATR nga_alloc_gatscat_buf_(Integer *nelems) { wnga_alloc_gatscat_buf(*nelems); } void FATR ga_fence_() { wnga_fence(); } void FATR nga_fence_() { wnga_fence(); } void FATR nga_free_gatscat_buf_() { wnga_free_gatscat_buf(); } void FATR ga_gather_(Integer *g_a, void *v, Integer *i, Integer *j, Integer *nv) { wnga_gather2d(*g_a, v, i, j, *nv); } void FATR nga_gather_(Integer *g_a, void* v, Integer subscript[], Integer *nv) { wnga_gather(*g_a, v, subscript, 0, *nv); } void FATR ga_get_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, void *buf, Integer *ld) { Integer lo[2], hi[2]; lo[0] = *ilo; lo[1] = *jlo; hi[0] = *ihi; hi[1] = *jhi; wnga_get(*g_a, lo, hi, buf, ld); } void FATR nga_get_(Integer *g_a, Integer *lo, Integer *hi, void *buf, Integer *ld) { wnga_get(*g_a, lo, hi, buf, ld); } void FATR ga_init_fence_() { wnga_init_fence(); } void FATR nga_init_fence_() { wnga_init_fence(); } void FATR ga_nbacc_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, void *buf, Integer *ld, void *alpha, Integer *nbhandle) { Integer lo[2], hi[2]; lo[0]=*ilo; lo[1]=*jlo; hi[0]=*ihi; hi[1]=*jhi; wnga_nbacc(*g_a, lo, hi, buf, ld, alpha, nbhandle); } void FATR nga_nbacc_(Integer *g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, void *alpha, Integer *nbhandle) { wnga_nbacc(*g_a, lo, hi, buf, ld, alpha, nbhandle); } void FATR ga_nbget_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, void *buf, Integer *ld, Integer *nbhandle) { Integer lo[2], hi[2]; lo[0]=*ilo; lo[1]=*jlo; hi[0]=*ihi; hi[1]=*jhi; wnga_nbget(*g_a, lo, hi, buf, ld, nbhandle); } void FATR nga_nbget_(Integer *g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, Integer *nbhandle) { wnga_nbget(*g_a, lo, hi, buf, ld, nbhandle); } void FATR ga_nbput_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, void *buf, Integer *ld, Integer *nbhandle) { Integer lo[2], hi[2]; lo[0]=*ilo; lo[1]=*jlo; hi[0]=*ihi; hi[1]=*jhi; wnga_nbput(*g_a, lo, hi, buf, ld, nbhandle); } void FATR nga_nbput_(Integer *g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, Integer *nbhandle) { wnga_nbput(*g_a, lo, hi, buf, ld, nbhandle); } void FATR nga_nbput_notify_(Integer *g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, Integer *g_b, Integer *ecoords, void *bufn, Integer *nbhandle) { wnga_nbput_notify(*g_a, lo, hi, buf, ld, *g_b, ecoords, bufn, nbhandle); } /* nga_nbput_notify_ */ void FATR nga_nbwait_notify_(Integer *nbhandle) { wnga_nbwait_notify(nbhandle); } /* nga_nbwait_notify_ */ Integer FATR ga_nbtest_(Integer *nbhandle) { return wnga_nbtest(nbhandle); } Integer FATR nga_nbtest_(Integer *nbhandle) { return wnga_nbtest(nbhandle); } void FATR ga_nbwait_(Integer *nbhandle) { wnga_nbwait(nbhandle); } void FATR nga_nbwait_(Integer *nbhandle) { wnga_nbwait(nbhandle); } void FATR ga_pgroup_sync_(Integer *grp_id) { wnga_pgroup_sync(*grp_id); } void FATR nga_pgroup_sync_(Integer *grp_id) { wnga_pgroup_sync(*grp_id); } void FATR ga_put_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, void *buf, Integer *ld) { Integer lo[2], hi[2]; lo[0]=*ilo; lo[1]=*jlo; hi[0]=*ihi; hi[1]=*jhi; wnga_put(*g_a, lo, hi, buf, ld); } void FATR nga_put_(Integer *g_a, Integer *lo, Integer *hi, void *buf, Integer *ld) { wnga_put(*g_a, lo, hi, buf, ld); } Integer FATR ga_read_inc_(Integer *g_a, Integer *i, Integer *j, Integer *inc) { Integer subscript[2]; subscript[0] = *i; subscript[1] = *j; return wnga_read_inc(*g_a, subscript, *inc); } Integer FATR nga_read_inc_(Integer *g_a, Integer *subscript, Integer *inc) { return wnga_read_inc(*g_a, subscript, *inc); } void FATR ga_release_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi) { Integer lo[2], hi[2]; lo[0]=*ilo; lo[1]=*jlo; hi[0]=*ihi; hi[1]=*jhi; wnga_release(*g_a, lo, hi); } void FATR nga_release_(Integer *g_a, Integer *lo, Integer *hi) { wnga_release(*g_a, lo, hi); } void FATR nga_release_block_(Integer *g_a, Integer *iblock) { wnga_release_block(*g_a, *iblock); } void FATR nga_release_block_grid_(Integer *g_a, Integer *index) { wnga_release_block_grid(*g_a, index); } void FATR nga_release_block_segment_(Integer *g_a, Integer *iproc) { wnga_release_block_segment(*g_a, *iproc); } void FATR ga_release_update_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi) { Integer lo[2], hi[2]; lo[0]=*ilo; lo[1]=*jlo; hi[0]=*ihi; hi[1]=*jhi; wnga_release_update(*g_a, lo, hi); } void FATR nga_release_update_(Integer *g_a, Integer *lo, Integer *hi) { wnga_release_update(*g_a, lo, hi); } void FATR nga_release_update_block_(Integer *g_a, Integer *iblock) { wnga_release_update_block(*g_a, *iblock); } void FATR nga_release_update_block_grid_(Integer *g_a, Integer *index) { wnga_release_update_block_grid(*g_a, index); } void FATR nga_release_update_block_segment_(Integer *g_a, Integer *iproc) { wnga_release_update_block_segment(*g_a, *iproc); } void FATR ga_scatter_(Integer *g_a, void *v, Integer *i, Integer *j, Integer *nv) { wnga_scatter2d(*g_a, v, i, j, *nv); } void FATR nga_scatter_(Integer *g_a, void* v, Integer subscript[], Integer *nv) { wnga_scatter(*g_a, v, subscript, 0, *nv); } void FATR ga_scatter_acc_(Integer *g_a, void *v, Integer *i, Integer *j, Integer *nv, void *alpha) { wnga_scatter_acc2d(*g_a, v, i, j, *nv, alpha); } void FATR nga_scatter_acc_(Integer *g_a, void* v, Integer subscript[], Integer *nv, void *alpha) { wnga_scatter_acc(*g_a, v, subscript, 0, *nv, alpha); } void FATR nga_strided_acc_(Integer *g_a, Integer *lo, Integer *hi, Integer *skip, void *buf, Integer *ld, void *alpha) { wnga_strided_acc(*g_a, lo, hi, skip, buf, ld, alpha); } void FATR nga_strided_get_(Integer *g_a, Integer *lo, Integer *hi, Integer *skip, void *buf, Integer *ld) { wnga_strided_get(*g_a, lo, hi, skip, buf, ld); } void FATR nga_strided_put_(Integer *g_a, Integer *lo, Integer *hi, Integer *skip, void *buf, Integer *ld) { wnga_strided_put(*g_a, lo, hi, skip, buf, ld); } void FATR ga_sync_() { wnga_sync(); } void FATR nga_sync_() { wnga_sync(); } /* Routines from global.util.c */ void FATR ga_print_stats_() { wnga_print_stats(); } void FATR nga_print_stats_() { wnga_print_stats(); } void FATR ga_error_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *string, Integer *icode, int slen #else char *string, int slen, Integer *icode #endif ) { char buf[FMSG]; ga_f2cstring(string,slen, buf, FMSG); wnga_error(buf,*icode); } void FATR nga_error_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *string, Integer *icode, int slen #else char *string, int slen, Integer *icode #endif ) { char buf[FMSG]; ga_f2cstring(string,slen, buf, FMSG); wnga_error(buf,*icode); } Integer FATR ga_cluster_nodeid_() { return wnga_cluster_nodeid(); } Integer FATR nga_cluster_nodeid_() { return wnga_cluster_nodeid(); } Integer FATR ga_cluster_nprocs_(Integer *node) { return wnga_cluster_nprocs(*node); } Integer FATR nga_cluster_nprocs_(Integer *node) { return wnga_cluster_nprocs(*node); } Integer FATR ga_cluster_procid_(Integer *node, Integer *loc_proc_id) { return wnga_cluster_procid(*node, *loc_proc_id); } Integer FATR nga_cluster_procid_(Integer *node, Integer *loc_proc_id) { return wnga_cluster_procid(*node, *loc_proc_id); } Integer FATR ga_cluster_nnodes_() { return wnga_cluster_nnodes(); } Integer FATR nga_cluster_nnodes_() { return wnga_cluster_nnodes(); } Integer FATR ga_cluster_proc_nodeid_(Integer *proc) { return wnga_cluster_proc_nodeid(*proc); } Integer FATR nga_cluster_proc_nodeid_(Integer *proc) { return wnga_cluster_proc_nodeid(*proc); } void FATR ga_print_distribution_(Integer* g_a) { wnga_print_distribution(1, *g_a); } void FATR nga_print_distribution_(Integer* g_a) { wnga_print_distribution(1, *g_a); } DoublePrecision FATR ga_wtime_() { return wnga_wtime(); } DoublePrecision FATR nga_wtime_() { return wnga_wtime(); } /* Routines from collect.c */ void FATR ga_brdcst_( Integer *type, void *buf, Integer *len, Integer *originator) { wnga_brdcst(*type, buf, *len, *originator); } void FATR nga_brdcst_( Integer *type, void *buf, Integer *len, Integer *originator) { wnga_brdcst(*type, buf, *len, *originator); } void FATR ga_pgroup_brdcst_(Integer *grp_id, Integer *type, void *buf, Integer *len, Integer *originator) { wnga_pgroup_brdcst(*grp_id, *type, buf, *len, *originator); } void FATR ga_pgroup_gop_(Integer *grp, Integer *type, void *x, Integer *n, char *op, int len) { wnga_pgroup_gop(*grp, pnga_type_f2c(*type), x, *n, op); } void FATR nga_pgroup_gop_(Integer *grp, Integer *type, void *x, Integer *n, char *op, int len) { wnga_pgroup_gop(*grp, pnga_type_f2c(*type), x, *n, op); } void FATR ga_pgroup_igop_(Integer *grp, Integer *type, Integer *x, Integer *n, char *op, int len) { wnga_pgroup_gop(*grp, pnga_type_f2c(MT_F_INT), x, *n, op); } void FATR nga_pgroup_igop_(Integer *grp, Integer *type, Integer *x, Integer *n, char *op, int len) { wnga_pgroup_gop(*grp, pnga_type_f2c(MT_F_INT), x, *n, op); } void FATR ga_pgroup_sgop_(Integer *grp, Integer *type, Real *x, Integer *n, char *op, int len) { wnga_pgroup_gop(*grp, pnga_type_f2c(MT_F_REAL), x, *n, op); } void FATR nga_pgroup_sgop_(Integer *grp, Integer *type, Real *x, Integer *n, char *op, int len) { wnga_pgroup_gop(*grp, pnga_type_f2c(MT_F_REAL), x, *n, op); } void FATR ga_pgroup_dgop_(Integer *grp, Integer *type, DoublePrecision *x, Integer *n, char *op, int len) { wnga_pgroup_gop(*grp, pnga_type_f2c(MT_F_DBL), x, *n, op); } void FATR nga_pgroup_dgop_(Integer *grp, Integer *type, DoublePrecision *x, Integer *n, char *op, int len) { wnga_pgroup_gop(*grp, pnga_type_f2c(MT_F_DBL), x, *n, op); } void FATR ga_pgroup_cgop_(Integer *grp, Integer *type, SingleComplex *x, Integer *n, char *op, int len) { wnga_pgroup_gop(*grp, pnga_type_f2c(MT_F_SCPL), x, *n, op); } void FATR nga_pgroup_cgop_(Integer *grp, Integer *type, SingleComplex *x, Integer *n, char *op, int len) { wnga_pgroup_gop(*grp, pnga_type_f2c(MT_F_SCPL), x, *n, op); } void FATR ga_pgroup_zgop_(Integer *grp, Integer *type, DoubleComplex *x, Integer *n, char *op, int len) { wnga_pgroup_gop(*grp, pnga_type_f2c(MT_F_DCPL), x, *n, op); } void FATR nga_pgroup_zgop_(Integer *grp, Integer *type, DoubleComplex *x, Integer *n, char *op, int len) { wnga_pgroup_gop(*grp, pnga_type_f2c(MT_F_DCPL), x, *n, op); } void FATR ga_gop_(Integer *type, void *x, Integer *n, char *op, int len) { wnga_gop(pnga_type_f2c(*type), x, *n, op); } void FATR nga_gop_(Integer *type, void *x, Integer *n, char *op, int len) { wnga_gop(pnga_type_f2c(*type), x, *n, op); } void FATR ga_igop_(Integer *type, Integer *x, Integer *n, char *op, int len) { wnga_gop(pnga_type_f2c(MT_F_INT), x, *n, op); } void FATR nga_igop_(Integer *type, Integer *x, Integer *n, char *op, int len) { wnga_gop(pnga_type_f2c(MT_F_INT), x, *n, op); } void FATR ga_sgop_(Integer *type, Real *x, Integer *n, char *op, int len) { wnga_gop(pnga_type_f2c(MT_F_REAL), x, *n, op); } void FATR nga_sgop_(Integer *type, Real *x, Integer *n, char *op, int len) { wnga_gop(pnga_type_f2c(MT_F_REAL), x, *n, op); } void FATR ga_dgop_(Integer *type, DoublePrecision *x, Integer *n, char *op, int len) { wnga_gop(pnga_type_f2c(MT_F_DBL), x, *n, op); } void FATR nga_dgop_(Integer *type, DoublePrecision *x, Integer *n, char *op, int len) { wnga_gop(pnga_type_f2c(MT_F_DBL), x, *n, op); } void FATR ga_cgop_(Integer *type, SingleComplex *x, Integer *n, char *op, int len) { wnga_gop(pnga_type_f2c(MT_F_SCPL), x, *n, op); } void FATR nga_cgop_(Integer *type, SingleComplex *x, Integer *n, char *op, int len) { wnga_gop(pnga_type_f2c(MT_F_SCPL), x, *n, op); } void FATR ga_zgop_(Integer *type, DoubleComplex *x, Integer *n, char *op, int len) { wnga_gop(pnga_type_f2c(MT_F_DCPL), x, *n, op); } void FATR nga_zgop_(Integer *type, DoubleComplex *x, Integer *n, char *op, int len) { wnga_gop(pnga_type_f2c(MT_F_DCPL), x, *n, op); } #ifdef MPI # include "ga-mpi.h" # define ga_mpi_comm_ F77_FUNC_(ga_mpi_comm,GA_MPI_COMM) void FATR ga_mpi_comm_(Integer *fcomm) { MPI_Comm ccomm; GA_MPI_Comm(&ccomm); *fcomm = (Integer)(MPI_Comm_c2f(ccomm)); } #define ga_mpi_comm_pgroup_ F77_FUNC_(ga_mpi_comm_pgroup,GA_MPI_COMM_PGROUP) void FATR ga_mpi_comm_pgroup_(Integer *fcomm, Integer *pgroup) { MPI_Comm ccomm; ccomm = GA_MPI_Comm_pgroup((int)(*pgroup)); *fcomm = (Integer)(MPI_Comm_c2f(ccomm)); } #define ga_mpi_comm_pgroup_default_ F77_FUNC_(ga_mpi_comm_pgroup_default,GA_MPI_COMM_PGROUP_DEFAULT) void FATR ga_mpi_comm_pgroup_default_(Integer *fcomm) { MPI_Comm ccomm; ccomm = GA_MPI_Comm_pgroup_default(); *fcomm = (Integer)(MPI_Comm_c2f(ccomm)); } #endif /* Routines from elem_alg.c */ void FATR ga_abs_value_patch_(Integer *g_a, Integer *lo, Integer *hi) { wnga_abs_value_patch(*g_a, lo, hi); } void FATR nga_abs_value_patch_(Integer *g_a, Integer *lo, Integer *hi) { wnga_abs_value_patch(*g_a, lo, hi); } void FATR ga_recip_patch_(Integer *g_a, Integer *lo, Integer *hi) { wnga_recip_patch(*g_a, lo, hi); } void FATR nga_recip_patch_(Integer *g_a, Integer *lo, Integer *hi) { wnga_recip_patch(*g_a, lo, hi); } void FATR ga_add_constant_patch_(Integer *g_a, Integer *lo, Integer *hi, void *alpha) { wnga_add_constant_patch(*g_a, lo, hi, alpha); } void FATR nga_add_constant_patch_(Integer *g_a, Integer *lo, Integer *hi, void *alpha) { wnga_add_constant_patch(*g_a, lo, hi, alpha); } void FATR ga_abs_value_(Integer *g_a) { wnga_abs_value(*g_a); } void FATR nga_abs_value_(Integer *g_a) { wnga_abs_value(*g_a); } void FATR ga_add_constant_(Integer *g_a, void *alpha) { wnga_add_constant(*g_a, alpha); } void FATR nga_add_constant_(Integer *g_a, void *alpha) { wnga_add_constant(*g_a, alpha); } void FATR ga_recip_(Integer *g_a) { wnga_recip(*g_a); } void FATR ga_elem_multiply_(Integer *g_a, Integer *g_b, Integer *g_c) { wnga_elem_multiply(*g_a, *g_b, *g_c); } void FATR nga_elem_multiply_(Integer *g_a, Integer *g_b, Integer *g_c) { wnga_elem_multiply(*g_a, *g_b, *g_c); } void FATR ga_elem_divide_(Integer *g_a, Integer *g_b, Integer *g_c) { wnga_elem_divide(*g_a, *g_b, *g_c); } void FATR nga_elem_divide_(Integer *g_a, Integer *g_b, Integer *g_c) { wnga_elem_divide(*g_a, *g_b, *g_c); } void FATR ga_elem_maximum_(Integer *g_a, Integer *g_b, Integer *g_c) { wnga_elem_maximum(*g_a, *g_b, *g_c); } void FATR nga_elem_maximum_(Integer *g_a, Integer *g_b, Integer *g_c) { wnga_elem_maximum(*g_a, *g_b, *g_c); } void FATR ga_elem_minimum_(Integer *g_a, Integer *g_b, Integer *g_c) { wnga_elem_minimum(*g_a, *g_b, *g_c); } void FATR nga_elem_minimum_(Integer *g_a, Integer *g_b, Integer *g_c) { wnga_elem_minimum(*g_a, *g_b, *g_c); } void FATR ga_elem_multiply_patch_(Integer *g_a,Integer *alo,Integer *ahi,Integer *g_b,Integer *blo,Integer *bhi,Integer *g_c,Integer *clo,Integer *chi) { wnga_elem_multiply_patch(*g_a,alo,ahi,*g_b,blo,bhi,*g_c,clo,chi); } void FATR nga_elem_multiply_patch_(Integer *g_a,Integer *alo,Integer *ahi,Integer *g_b,Integer *blo,Integer *bhi,Integer *g_c,Integer *clo,Integer *chi) { wnga_elem_multiply_patch(*g_a,alo,ahi,*g_b,blo,bhi,*g_c,clo,chi); } void FATR ga_elem_divide_patch_(Integer *g_a,Integer *alo,Integer *ahi, Integer *g_b,Integer *blo,Integer *bhi,Integer *g_c, Integer *clo,Integer *chi) { wnga_elem_divide_patch(*g_a,alo,ahi, *g_b,blo,bhi,*g_c, clo,chi); } void FATR nga_elem_divide_patch_(Integer *g_a,Integer *alo,Integer *ahi, Integer *g_b,Integer *blo,Integer *bhi,Integer *g_c, Integer *clo,Integer *chi) { wnga_elem_divide_patch(*g_a,alo,ahi, *g_b,blo,bhi,*g_c, clo,chi); } void FATR ga_elem_step_divide_patch_(Integer *g_a,Integer *alo,Integer *ahi, Integer *g_b,Integer *blo,Integer *bhi,Integer *g_c, Integer *clo,Integer *chi) { wnga_elem_step_divide_patch(*g_a,alo,ahi, *g_b,blo,bhi,*g_c, clo,chi); } void FATR nga_elem_step_divide_patch_(Integer *g_a,Integer *alo,Integer *ahi, Integer *g_b,Integer *blo,Integer *bhi,Integer *g_c, Integer *clo,Integer *chi) { wnga_elem_step_divide_patch(*g_a,alo,ahi, *g_b,blo,bhi,*g_c, clo,chi); } void FATR ga_elem_stepb_divide_patch_(Integer *g_a,Integer *alo,Integer *ahi, Integer *g_b,Integer *blo,Integer *bhi,Integer *g_c, Integer *clo,Integer *chi) { wnga_elem_stepb_divide_patch(*g_a,alo,ahi, *g_b,blo,bhi,*g_c, clo,chi); } void FATR nga_elem_stepb_divide_patch_(Integer *g_a,Integer *alo,Integer *ahi, Integer *g_b,Integer *blo,Integer *bhi,Integer *g_c, Integer *clo,Integer *chi) { wnga_elem_stepb_divide_patch(*g_a,alo,ahi, *g_b,blo,bhi,*g_c, clo,chi); } void FATR ga_elem_maximum_patch_(Integer *g_a,Integer *alo,Integer *ahi, Integer *g_b,Integer *blo,Integer *bhi,Integer *g_c,Integer *clo,Integer *chi) { wnga_elem_maximum_patch(*g_a,alo,ahi, *g_b,blo,bhi,*g_c,clo,chi); } void FATR nga_elem_maximum_patch_(Integer *g_a,Integer *alo,Integer *ahi, Integer *g_b,Integer *blo,Integer *bhi,Integer *g_c,Integer *clo,Integer *chi) { wnga_elem_maximum_patch(*g_a,alo,ahi, *g_b,blo,bhi,*g_c,clo,chi); } void FATR ga_elem_minimum_patch_(Integer *g_a,Integer *alo,Integer *ahi, Integer *g_b,Integer *blo,Integer *bhi,Integer *g_c,Integer *clo,Integer *chi) { wnga_elem_minimum_patch(*g_a,alo,ahi, *g_b,blo,bhi,*g_c,clo,chi); } void FATR nga_elem_minimum_patch_(Integer *g_a,Integer *alo,Integer *ahi, Integer *g_b,Integer *blo,Integer *bhi,Integer *g_c,Integer *clo,Integer *chi) { wnga_elem_minimum_patch(*g_a,alo,ahi, *g_b,blo,bhi,*g_c,clo,chi); } void FATR ga_step_bound_info_patch_(Integer *g_xx, Integer *xxlo, Integer *xxhi, Integer *g_vv, Integer *vvlo, Integer *vvhi, Integer *g_xxll, Integer *xxlllo, Integer *xxllhi, Integer *g_xxuu, Integer *xxuulo, Integer *xxuuhi, void *boundmin, void* wolfemin, void *boundmax) { wnga_step_bound_info_patch(*g_xx, xxlo, xxhi, *g_vv, vvlo, vvhi, *g_xxll, xxlllo, xxllhi, *g_xxuu, xxuulo, xxuuhi, boundmin, wolfemin, boundmax); } void FATR nga_step_bound_info_patch_(Integer *g_xx, Integer *xxlo, Integer *xxhi, Integer *g_vv, Integer *vvlo, Integer *vvhi, Integer *g_xxll, Integer *xxlllo, Integer *xxllhi, Integer *g_xxuu, Integer *xxuulo, Integer *xxuuhi, void *boundmin, void* wolfemin, void *boundmax) { wnga_step_bound_info_patch(*g_xx, xxlo, xxhi, *g_vv, vvlo, vvhi, *g_xxll, xxlllo, xxllhi, *g_xxuu, xxuulo, xxuuhi, boundmin, wolfemin, boundmax); } void FATR ga_step_max_patch_(Integer *g_a, Integer *alo, Integer *ahi, Integer *g_b, Integer *blo, Integer *bhi, void *result) { wnga_step_max_patch(*g_a, alo, ahi, *g_b, blo, bhi, result); } void FATR nga_step_max_patch_(Integer *g_a, Integer *alo, Integer *ahi, Integer *g_b, Integer *blo, Integer *bhi, void *result) { wnga_step_max_patch(*g_a, alo, ahi, *g_b, blo, bhi, result); } void FATR ga_step_max_(Integer *g_a, Integer *g_b, void *retval) { wnga_step_max(*g_a, *g_b, retval); } void FATR nga_step_max_(Integer *g_a, Integer *g_b, void *retval) { wnga_step_max(*g_a, *g_b, retval); } void FATR ga_step_bound_info_(Integer *g_xx, Integer *g_vv, Integer *g_xxll, Integer *g_xxuu, void *boundmin, void *wolfemin, void *boundmax) { wnga_step_bound_info(*g_xx, *g_vv, *g_xxll, *g_xxuu, boundmin, wolfemin, boundmax); } void FATR nga_step_bound_info_(Integer *g_xx, Integer *g_vv, Integer *g_xxll, Integer *g_xxuu, void *boundmin, void *wolfemin, void *boundmax) { wnga_step_bound_info(*g_xx, *g_vv, *g_xxll, *g_xxuu, boundmin, wolfemin, boundmax); } /* Routines from ga_solve_seq.c */ void FATR ga_lu_solve_seq_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *trans, Integer *g_a, Integer *g_b, int len #else char *trans, int len, Integer *g_a, Integer *g_b #endif ) { char buf[FNAM]; ga_f2cstring(trans, len, buf, FNAM); wnga_lu_solve_seq(buf, *g_a, *g_b); } /* Routines from global.util.c */ void FATR ga_print_(Integer *g_a) { wnga_print(*g_a); } void FATR nga_print_(Integer *g_a) { wnga_print(*g_a); } void FATR ga_print_patch_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, Integer *pretty) { wnga_print_patch2d(*g_a, *ilo, *ihi, *jlo, *jhi, *pretty); } void FATR nga_print_patch_(Integer *g_a, Integer *lo, Integer *hi, Integer *pretty) { wnga_print_patch(*g_a, lo, hi, *pretty); } void FATR ga_summarize_(Integer *verbose) { wnga_summarize(*verbose); } void FATR nga_summarize_(Integer *verbose) { wnga_summarize(*verbose); } /* Routines from ghosts.c */ void FATR nga_access_ghost_element_(Integer* g_a, AccessIndex* index, Integer subscript[], Integer ld[]) { wnga_access_ghost_element(*g_a, index, subscript, ld); } void FATR nga_access_ghosts_(Integer* g_a, Integer dims[], AccessIndex* index, Integer ld[]) { wnga_access_ghosts(*g_a, dims, index, ld); } void FATR nga_release_ghost_element_(Integer* g_a, Integer subscript[]) { wnga_release_ghost_element(*g_a, subscript); } void FATR nga_release_update_ghost_element_(Integer* g_a, Integer subscript[]) { wnga_release_update_ghost_element(*g_a, subscript); } void FATR nga_release_ghosts_(Integer* g_a) { wnga_release_ghosts(*g_a); } void FATR nga_release_update_ghosts_(Integer* g_a) { wnga_release_update_ghosts(*g_a); } void FATR nga_get_ghost_block_(Integer *g_a, Integer *lo, Integer *hi, void *buf, Integer *ld) { wnga_get_ghost_block(*g_a, lo, hi, buf, ld); } void FATR ga_update1_ghosts_(Integer *g_a) { wnga_update1_ghosts(*g_a); } void FATR nga_update1_ghosts_(Integer *g_a) { wnga_update1_ghosts(*g_a); } logical FATR ga_update2_ghosts_(Integer *g_a) { return wnga_update2_ghosts(*g_a); } logical FATR nga_update2_ghosts_(Integer *g_a) { return wnga_update2_ghosts(*g_a); } logical FATR ga_update3_ghosts_(Integer *g_a) { return wnga_update3_ghosts(*g_a); } logical FATR nga_update3_ghosts_(Integer *g_a) { return wnga_update3_ghosts(*g_a); } logical FATR ga_set_update4_info_(Integer *g_a) { return wnga_set_update4_info(*g_a); } logical FATR nga_set_update4_info_(Integer *g_a) { return wnga_set_update4_info(*g_a); } logical FATR ga_update4_ghosts_(Integer *g_a) { return wnga_update4_ghosts(*g_a); } logical FATR nga_update4_ghosts_(Integer *g_a) { return wnga_update4_ghosts(*g_a); } logical FATR ga_update44_ghosts_(Integer *g_a) { return wnga_update44_ghosts(*g_a); } logical FATR nga_update44_ghosts_(Integer *g_a) { return wnga_update44_ghosts(*g_a); } logical FATR ga_update55_ghosts_(Integer *g_a) { return wnga_update55_ghosts(*g_a); } logical FATR nga_update55_ghosts_(Integer *g_a) { return wnga_update55_ghosts(*g_a); } logical FATR nga_update_ghost_dir_(Integer *g_a, Integer *pdim, Integer *pdir, logical *pflag) { return wnga_update_ghost_dir(*g_a, *pdim, *pdir, *pflag); } logical FATR ga_update5_ghosts_(Integer *g_a) { return wnga_update5_ghosts(*g_a); } logical FATR nga_update5_ghosts_(Integer *g_a) { return wnga_update5_ghosts(*g_a); } logical FATR ga_set_update5_info_(Integer *g_a) { return wnga_set_update5_info(*g_a); } logical FATR nga_set_update5_info_(Integer *g_a) { return wnga_set_update5_info(*g_a); } void FATR ga_update_ghosts_(Integer *g_a) { wnga_update_ghosts(*g_a); } void FATR nga_update_ghosts_(Integer *g_a) { wnga_update_ghosts(*g_a); } void FATR nga_update_ghosts_nb_(Integer *g_a, Integer *nb) { wnga_update_ghosts_nb(*g_a, nb); } logical FATR ga_update6_ghosts_(Integer *g_a) { return wnga_update6_ghosts(*g_a); } logical FATR nga_update6_ghosts_(Integer *g_a) { return wnga_update6_ghosts(*g_a); } logical FATR ga_update7_ghosts_(Integer *g_a) { return wnga_update7_ghosts(*g_a); } logical FATR nga_update7_ghosts_(Integer *g_a) { return wnga_update7_ghosts(*g_a); } void FATR ga_ghost_barrier_() { wnga_ghost_barrier(); } void FATR nga_ghost_barrier_() { wnga_ghost_barrier(); } void FATR nga_nbget_ghost_dir_(Integer *g_a, Integer *mask, Integer *nbhandle) { wnga_nbget_ghost_dir(*g_a, mask, nbhandle); } void FATR ga_set_ghost_corner_flag_(Integer *g_a, logical *flag) { wnga_set_ghost_corner_flag(*g_a, *flag); } void FATR nga_set_ghost_corner_flag_(Integer *g_a, logical *flag) { wnga_set_ghost_corner_flag(*g_a, *flag); } logical FATR ga_set_ghost_info_(Integer *g_a) { return wnga_set_ghost_info(*g_a); } logical FATR nga_set_ghost_info_(Integer *g_a) { return wnga_set_ghost_info(*g_a); } /* Routines from global.nalg.c */ void FATR ga_zero_(Integer *g_a) { wnga_zero(*g_a); } void FATR nga_zero_(Integer *g_a) { wnga_zero(*g_a); } void FATR ga_copy_(Integer *g_a, Integer *g_b) { wnga_copy(*g_a, *g_b); } void FATR nga_copy_(Integer *g_a, Integer *g_b) { wnga_copy(*g_a, *g_b); } Integer FATR ga_idot_(Integer *g_a, Integer *g_b) { Integer sum; wnga_dot(pnga_type_f2c(MT_F_INT), *g_a, *g_b, &sum); return sum; } Integer FATR nga_idot_(Integer *g_a, Integer *g_b) { Integer sum; wnga_dot(pnga_type_f2c(MT_F_INT), *g_a, *g_b, &sum); return sum; } DoublePrecision FATR ga_ddot_(Integer *g_a, Integer *g_b) { DoublePrecision sum; wnga_dot(pnga_type_f2c(MT_F_DBL), *g_a, *g_b, &sum); return sum; } DoublePrecision FATR nga_ddot_(Integer *g_a, Integer *g_b) { DoublePrecision sum; wnga_dot(pnga_type_f2c(MT_F_DBL), *g_a, *g_b, &sum); return sum; } Real FATR ga_sdot_(Integer *g_a, Integer *g_b) { Real sum; wnga_dot(pnga_type_f2c(MT_F_REAL), *g_a, *g_b, &sum); return sum; } Real FATR nga_sdot_(Integer *g_a, Integer *g_b) { Real sum; wnga_dot(pnga_type_f2c(MT_F_REAL), *g_a, *g_b, &sum); return sum; } void FATR gai_zdot_(Integer *g_a, Integer *g_b, DoubleComplex *sum) { wnga_dot(pnga_type_f2c(MT_F_DCPL), *g_a, *g_b, sum); } void FATR ngai_zdot_(Integer *g_a, Integer *g_b, DoubleComplex *sum) { wnga_dot(pnga_type_f2c(MT_F_DCPL), *g_a, *g_b, sum); } void gai_cdot_(Integer *g_a, Integer *g_b, SingleComplex *sum) { wnga_dot(pnga_type_f2c(MT_F_SCPL), *g_a, *g_b, sum); } void ngai_cdot_(Integer *g_a, Integer *g_b, SingleComplex *sum) { wnga_dot(pnga_type_f2c(MT_F_SCPL), *g_a, *g_b, sum); } void FATR ga_scale_(Integer *g_a, void* alpha) { wnga_scale(*g_a, alpha); } void FATR ga_cscale_(Integer *g_a, SingleComplex* alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_SCPL) pnga_error(" wrong type ", 0L); wnga_scale(*g_a, alpha); } void FATR ga_cscal_(Integer *g_a, SingleComplex* alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_SCPL) pnga_error(" wrong type ", 0L); wnga_scale(*g_a, alpha); } void FATR ga_dscale_(Integer *g_a, DoublePrecision* alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_DBL) pnga_error(" wrong type ", 0L); wnga_scale(*g_a, alpha); } void FATR ga_dscal_(Integer *g_a, DoublePrecision* alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_DBL) pnga_error(" wrong type ", 0L); wnga_scale(*g_a, alpha); } void FATR ga_iscale_(Integer *g_a, Integer* alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_INT || atype != C_LONG || atype != C_LONGLONG) pnga_error(" wrong type ", 0L); wnga_scale(*g_a, alpha); } void FATR ga_iscal_(Integer *g_a, Integer* alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_INT || atype != C_LONG || atype != C_LONGLONG) pnga_error(" wrong type ", 0L); wnga_scale(*g_a, alpha); } void FATR ga_sscale_(Integer *g_a, Real* alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_FLOAT) pnga_error(" wrong type ", 0L); wnga_scale(*g_a, alpha); } void FATR ga_sscal_(Integer *g_a, Real* alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_FLOAT) pnga_error(" wrong type ", 0L); wnga_scale(*g_a, alpha); } void FATR ga_zscale_(Integer *g_a, DoubleComplex* alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_DCPL) pnga_error(" wrong type ", 0L); wnga_scale(*g_a, alpha); } void FATR ga_zscal_(Integer *g_a, DoubleComplex* alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_DCPL) pnga_error(" wrong type ", 0L); wnga_scale(*g_a, alpha); } void FATR nga_scale_(Integer *g_a, void* alpha) { wnga_scale(*g_a, alpha); } void FATR nga_cscale_(Integer *g_a, SingleComplex* alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_SCPL) pnga_error(" wrong type ", 0L); wnga_scale(*g_a, alpha); } void FATR nga_dscale_(Integer *g_a, DoublePrecision* alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_DBL) pnga_error(" wrong type ", 0L); wnga_scale(*g_a, alpha); } void FATR nga_iscale_(Integer *g_a, Integer* alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_INT || atype != C_LONG || atype != C_LONGLONG) pnga_error(" wrong type ", 0L); wnga_scale(*g_a, alpha); } void FATR nga_sscale_(Integer *g_a, Real* alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_FLOAT) pnga_error(" wrong type ", 0L); wnga_scale(*g_a, alpha); } void FATR nga_zscale_(Integer *g_a, DoubleComplex* alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_DCPL) pnga_error(" wrong type ", 0L); wnga_scale(*g_a, alpha); } void FATR ga_add_(void *alpha, Integer* g_a, void* beta, Integer* g_b, Integer* g_c) { wnga_add(alpha, *g_a, beta, *g_b, *g_c); } void FATR ga_cadd_(SingleComplex *alpha, Integer *g_a, SingleComplex *beta, Integer *g_b, Integer *g_c) { wnga_add(alpha, *g_a, beta, *g_b, *g_c); } void FATR ga_dadd_(DoublePrecision *alpha, Integer *g_a, DoublePrecision *beta, Integer *g_b, Integer *g_c) { wnga_add(alpha, *g_a, beta, *g_b, *g_c); } void FATR ga_iadd_(Integer *alpha, Integer *g_a, Integer *beta, Integer *g_b, Integer *g_c) { wnga_add(alpha, *g_a, beta, *g_b, *g_c); } void FATR ga_sadd_(Real *alpha, Integer *g_a, Real *beta, Integer *g_b, Integer *g_c) { wnga_add(alpha, *g_a, beta, *g_b, *g_c); } void FATR ga_zadd_(DoubleComplex *alpha, Integer *g_a, DoubleComplex *beta, Integer *g_b, Integer *g_c) { wnga_add(alpha, *g_a, beta, *g_b, *g_c); } void FATR nga_add_(void *alpha, Integer* g_a, void* beta, Integer* g_b, Integer* g_c) { wnga_add(alpha, *g_a, beta, *g_b, *g_c); } void FATR nga_cadd_(SingleComplex *alpha, Integer *g_a, SingleComplex *beta, Integer *g_b, Integer *g_c) { wnga_add(alpha, *g_a, beta, *g_b, *g_c); } void FATR nga_dadd_(DoublePrecision *alpha, Integer *g_a, DoublePrecision *beta, Integer *g_b, Integer *g_c) { wnga_add(alpha, *g_a, beta, *g_b, *g_c); } void FATR nga_iadd_(Integer *alpha, Integer *g_a, Integer *beta, Integer *g_b, Integer *g_c) { wnga_add(alpha, *g_a, beta, *g_b, *g_c); } void FATR nga_sadd_(Real *alpha, Integer *g_a, Real *beta, Integer *g_b, Integer *g_c) { wnga_add(alpha, *g_a, beta, *g_b, *g_c); } void FATR nga_zadd_(DoubleComplex *alpha, Integer *g_a, DoubleComplex *beta, Integer *g_b, Integer *g_c) { wnga_add(alpha, *g_a, beta, *g_b, *g_c); } void FATR ga_transpose_(Integer *g_a, Integer *g_b) { wnga_transpose(*g_a, *g_b); } void FATR nga_transpose_(Integer *g_a, Integer *g_b) { wnga_transpose(*g_a, *g_b); } /* Routines from global.npatch.c */ void FATR ga_copy_patch_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *trans, Integer *g_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Integer *g_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, int len #else char *trans, int len, Integer *g_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Integer *g_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi #endif ) { Integer alo[2], ahi[2], blo[2], bhi[2]; alo[0] = *ailo; alo[1] = *ajlo; ahi[0] = *aihi; ahi[1] = *ajhi; blo[0] = *bilo; blo[1] = *bjlo; bhi[0] = *bihi; bhi[1] = *bjhi; wnga_copy_patch(trans, *g_a, alo, ahi, *g_b, blo, bhi); } void FATR nga_copy_patch_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *trans, Integer *g_a, Integer *alo, Integer *ahi, Integer *g_b, Integer *blo, Integer *bhi, int len #else char *trans, int len, Integer *g_a, Integer *alo, Integer *ahi, Integer *g_b, Integer *blo, Integer *bhi #endif ) { wnga_copy_patch(trans,*g_a,alo,ahi,*g_b,blo,bhi); } void FATR ga_zero_patch_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi) { Integer lo[2], hi[2]; lo[0] = *ilo; lo[1] = *jlo; hi[0] = *ihi; lo[1] = *jhi; wnga_zero_patch(*g_a, lo, hi); } void FATR nga_zero_patch_(Integer *g_a, Integer *lo, Integer *hi) { wnga_zero_patch(*g_a, lo, hi); } static void sga_dot_patch(Integer g_a, char *t_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Integer g_b, char *t_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, void *retval) { Integer alo[2], ahi[2], blo[2], bhi[2]; alo[0] = *ailo; alo[1] = *ajlo; ahi[0] = *aihi; ahi[1] = *ajhi; blo[0] = *bilo; blo[1] = *bjlo; bhi[0] = *bihi; bhi[1] = *bjhi; wnga_dot_patch(g_a, t_a, alo, ahi, g_b, t_b, blo, bhi, retval); } #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS DoublePrecision ga_ddot_patch_(Integer *g_a, char *t_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Integer *g_b, char *t_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, int alen, int blen) #else DoublePrecision ga_ddot_patch_(Integer *g_a, char *t_a, int alen, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Integer *g_b, char *t_b, int blen, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi) #endif { DoublePrecision retval; Integer atype, btype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); if (atype != btype || atype != C_DBL) pnga_error(" wrong types ", 0L); sga_dot_patch(*g_a, t_a, ailo, aihi, ajlo, ajhi, *g_b, t_b, bilo, bihi, bjlo, bjhi, &retval); return retval; } #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer ga_idot_patch_(Integer *g_a, char *t_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Integer *g_b, char *t_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, int alen, int blen) #else Integer ga_idot_patch_(Integer *g_a, char *t_a, int alen, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Integer *g_b, char *t_b, int blen, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi) #endif { Integer retval; Integer atype, btype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); if (atype != btype || (atype != C_INT && atype != C_LONG && atype != C_LONGLONG)) pnga_error(" wrong types ", 0L); sga_dot_patch(*g_a, t_a, ailo, aihi, ajlo, ajhi, *g_b, t_b, bilo, bihi, bjlo, bjhi, &retval); return retval; } #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Real ga_sdot_patch_(Integer *g_a, char *t_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Integer *g_b, char *t_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, int alen, int blen) #else Real ga_sdot_patch_(Integer *g_a, char *t_a, int alen, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Integer *g_b, char *t_b, int blen, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi) #endif { Real retval; Integer atype, btype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); if (atype != btype || atype != C_FLOAT) pnga_error(" wrong types ", 0L); sga_dot_patch(*g_a, t_a, ailo, aihi, ajlo, ajhi, *g_b, t_b, bilo, bihi, bjlo, bjhi, &retval); return retval; } #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS void gai_zdot_patch_(Integer *g_a, char *t_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Integer *g_b, char *t_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, DoubleComplex *retval, int alen, int blen) #else void gai_zdot_patch_(Integer *g_a, char *t_a, int alen, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Integer *g_b, char *t_b, int blen, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, DoubleComplex *retval) #endif { Integer atype, btype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); if (atype != btype || atype != C_DCPL) pnga_error(" wrong types ", 0L); sga_dot_patch(*g_a, t_a, ailo, aihi, ajlo, ajhi, *g_b, t_b, bilo, bihi, bjlo, bjhi, retval); } #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS void gai_cdot_patch_(Integer *g_a, char *t_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Integer *g_b, char *t_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, SingleComplex *retval, int alen, int blen) #else void gai_cdot_patch_(Integer *g_a, char *t_a, int alen, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Integer *g_b, char *t_b, int blen, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, SingleComplex *retval) #endif { Integer atype, btype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); if (atype != btype || atype != C_SCPL) pnga_error(" wrong types ", 0L); sga_dot_patch(*g_a, t_a, ailo, aihi, ajlo, ajhi, *g_b, t_b, bilo, bihi, bjlo, bjhi, retval); } #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS DoublePrecision nga_ddot_patch_(Integer *g_a, char *t_a, Integer *alo, Integer *ahi, Integer *g_b, char *t_b, Integer *blo, Integer *bhi, int alen, int blen) #else DoublePrecision nga_ddot_patch_(Integer *g_a, char *t_a, int alen, Integer *alo, Integer *ahi, Integer *g_b, char *t_b, int blen, Integer *blo, Integer *bhi) #endif { DoublePrecision retval; Integer atype, btype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); if (atype != btype || atype != C_DBL) pnga_error(" wrong types ", 0L); wnga_dot_patch(*g_a, t_a, alo, ahi, *g_b, t_b, blo, bhi, &retval); return retval; } #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer nga_idot_patch_(Integer *g_a, char *t_a, Integer *alo, Integer *ahi, Integer *g_b, char *t_b, Integer *blo, Integer *bhi, int alen, int blen) #else Integer nga_idot_patch_(Integer *g_a, char *t_a, int alen, Integer *alo, Integer *ahi, Integer *g_b, char *t_b, int blen, Integer *blo, Integer *bhi) #endif { Integer retval; Integer atype, btype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); if (atype != btype || (atype != C_INT && atype != C_LONG && atype != C_LONGLONG)) pnga_error(" wrong types ", 0L); wnga_dot_patch(*g_a, t_a, alo, ahi, *g_b, t_b, blo, bhi, &retval); return retval; } #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Real nga_sdot_patch_(Integer *g_a, char *t_a, Integer *alo, Integer *ahi, Integer *g_b, char *t_b, Integer *blo, Integer *bhi, int alen, int blen) #else Real nga_sdot_patch_(Integer *g_a, char *t_a, int alen, Integer *alo, Integer *ahi, Integer *g_b, char *t_b, int blen, Integer *blo, Integer *bhi) #endif { Real retval; Integer atype, btype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); if (atype != btype || atype != C_FLOAT) pnga_error(" wrong types ", 0L); wnga_dot_patch(*g_a, t_a, alo, ahi, *g_b, t_b, blo, bhi, &retval); return retval; } #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS void ngai_cdot_patch_(Integer *g_a, char *t_a, Integer *alo, Integer *ahi, Integer *g_b, char *t_b, Integer *blo, Integer *bhi, SingleComplex *retval, int alen, int blen) #else void ngai_cdot_patch_(Integer *g_a, char *t_a, int alen, Integer *alo, Integer *ahi, Integer *g_b, char *t_b, int blen, Integer *blo, Integer *bhi, SingleComplex *retval) #endif { Integer atype, btype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); if (atype != btype || atype != C_SCPL) pnga_error(" wrong types ", 0L); wnga_dot_patch(*g_a, t_a, alo, ahi, *g_b, t_b, blo, bhi, retval); } #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS void ngai_zdot_patch_(Integer *g_a, char *t_a, Integer *alo, Integer *ahi, Integer *g_b, char *t_b, Integer *blo, Integer *bhi, DoubleComplex *retval, int alen, int blen) #else void ngai_zdot_patch_(Integer *g_a, char *t_a, int alen, Integer *alo, Integer *ahi, Integer *g_b, char *t_b, int blen, Integer *blo, Integer *bhi, DoubleComplex *retval) #endif { Integer atype, btype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); if (atype != btype || atype != C_DCPL) pnga_error(" wrong types ", 0L); wnga_dot_patch(*g_a, t_a, alo, ahi, *g_b, t_b, blo, bhi, retval); } static void sga_fill_patch(Integer g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, void* val) { Integer lo[2], hi[2]; lo[0] = *ilo; lo[1] = *jlo; hi[0] = *ihi; hi[1] = *jhi; wnga_fill_patch(g_a, lo, hi, val); } void FATR ga_fill_patch_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, void* val) { sga_fill_patch(*g_a, ilo, ihi, jlo, jhi, val); } void FATR ga_cfill_patch_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, SingleComplex *val) { sga_fill_patch(*g_a, ilo, ihi, jlo, jhi, val); } void FATR ga_dfill_patch_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, DoublePrecision *val) { sga_fill_patch(*g_a, ilo, ihi, jlo, jhi, val); } void FATR ga_ifill_patch_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, Integer *val) { sga_fill_patch(*g_a, ilo, ihi, jlo, jhi, val); } void FATR ga_sfill_patch_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, Real *val) { sga_fill_patch(*g_a, ilo, ihi, jlo, jhi, val); } void FATR ga_zfill_patch_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, DoubleComplex *val) { sga_fill_patch(*g_a, ilo, ihi, jlo, jhi, val); } void FATR nga_fill_patch_(Integer *g_a, Integer *lo, Integer *hi, void* val) { wnga_fill_patch(*g_a, lo, hi, val); } void FATR nga_cfill_patch_(Integer *g_a, Integer *lo, Integer *hi, SingleComplex* val) { wnga_fill_patch(*g_a, lo, hi, val); } void FATR nga_dfill_patch_(Integer *g_a, Integer *lo, Integer *hi, DoublePrecision* val) { wnga_fill_patch(*g_a, lo, hi, val); } void FATR nga_ifill_patch_(Integer *g_a, Integer *lo, Integer *hi, Integer* val) { wnga_fill_patch(*g_a, lo, hi, val); } void FATR nga_sfill_patch_(Integer *g_a, Integer *lo, Integer *hi, SingleComplex* val) { wnga_fill_patch(*g_a, lo, hi, val); } void FATR nga_zfill_patch_(Integer *g_a, Integer *lo, Integer *hi, DoubleComplex* val) { wnga_fill_patch(*g_a, lo, hi, val); } static void sga_scale_patch(Integer g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, void *alpha) { Integer lo[2], hi[2]; lo[0] = *ilo; lo[1] = *jlo; hi[0] = *ihi; hi[1] = *jhi; wnga_scale_patch(g_a, lo, hi, alpha); } void FATR ga_scale_patch_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, void *alpha) { sga_scale_patch(*g_a, ilo, ihi, jlo, jhi, alpha); } void FATR ga_cscal_patch_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, SingleComplex *alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_SCPL) pnga_error(" wrong types ", 0L); sga_scale_patch(*g_a, ilo, ihi, jlo, jhi, alpha); } void FATR ga_dscal_patch_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, DoublePrecision *alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_DBL) pnga_error(" wrong types ", 0L); sga_scale_patch(*g_a, ilo, ihi, jlo, jhi, alpha); } void FATR ga_iscal_patch_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, Integer *alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_INT || atype != C_LONG || atype != C_LONGLONG) pnga_error(" wrong types ", 0L); sga_scale_patch(*g_a, ilo, ihi, jlo, jhi, alpha); } void FATR ga_sscal_patch_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, Real *alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_FLOAT) pnga_error(" wrong types ", 0L); sga_scale_patch(*g_a, ilo, ihi, jlo, jhi, alpha); } void FATR ga_zscal_patch_(Integer *g_a, Integer *ilo, Integer *ihi, Integer *jlo, Integer *jhi, DoubleComplex *alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_DCPL) pnga_error(" wrong types ", 0L); sga_scale_patch(*g_a, ilo, ihi, jlo, jhi, alpha); } void FATR nga_scale_patch_(Integer *g_a, Integer *lo, Integer *hi, void *alpha) { wnga_scale_patch(*g_a, lo, hi, alpha); } void FATR nga_cscale_patch_(Integer *g_a, Integer *lo, Integer *hi, SingleComplex *alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_SCPL) pnga_error(" wrong types ", 0L); wnga_scale_patch(*g_a, lo, hi, alpha); } void FATR nga_dscale_patch_(Integer *g_a, Integer *lo, Integer *hi, DoublePrecision *alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_DBL) pnga_error(" wrong types ", 0L); wnga_scale_patch(*g_a, lo, hi, alpha); } void FATR nga_iscale_patch_(Integer *g_a, Integer *lo, Integer *hi, Integer *alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_INT || atype != C_LONG || atype != C_LONGLONG) pnga_error(" wrong types ", 0L); wnga_scale_patch(*g_a, lo, hi, alpha); } void FATR nga_sscale_patch_(Integer *g_a, Integer *lo, Integer *hi, Real *alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_FLOAT) pnga_error(" wrong types ", 0L); wnga_scale_patch(*g_a, lo, hi, alpha); } void FATR nga_zscale_patch_(Integer *g_a, Integer *lo, Integer *hi, DoubleComplex *alpha) { Integer atype; pnga_inquire_type(*g_a, &atype); if (atype != C_DCPL) pnga_error(" wrong types ", 0L); wnga_scale_patch(*g_a, lo, hi, alpha); } static void sga_add_patch(void *alpha, Integer g_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, void *beta, Integer g_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, Integer g_c, Integer *cilo, Integer *cihi, Integer *cjlo, Integer *cjhi) { Integer alo[2], ahi[2], blo[2], bhi[2], clo[2], chi[2]; alo[0] = *ailo; alo[1] = *ajlo; ahi[0] = *aihi; ahi[1] = *ajhi; blo[0] = *bilo; blo[1] = *bjlo; bhi[0] = *bihi; bhi[1] = *bjhi; clo[0] = *cilo; clo[1] = *cjlo; chi[0] = *cihi; chi[1] = *cjhi; wnga_add_patch(alpha, g_a, alo, ahi, beta, g_b, blo, bhi, g_c, clo, chi); } void FATR ga_add_patch_(void *alpha, Integer *g_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, void *beta, Integer *g_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, Integer *g_c, Integer *cilo, Integer *cihi, Integer *cjlo, Integer *cjhi) { sga_add_patch(alpha, *g_a, ailo, aihi, ajlo, ajhi, beta, *g_b, bilo, bihi, bjlo, bjhi, *g_c, cilo, cihi, cjlo, cjhi); } void FATR ga_cadd_patch_(SingleComplex *alpha, Integer *g_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, SingleComplex *beta, Integer *g_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, Integer *g_c, Integer *cilo, Integer *cihi, Integer *cjlo, Integer *cjhi) { Integer atype, btype, ctype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); pnga_inquire_type(*g_c, &ctype); if (atype != btype || atype != ctype || atype != C_SCPL) pnga_error(" wrong types ", 0L); sga_add_patch(alpha, *g_a, ailo, aihi, ajlo, ajhi, beta, *g_b, bilo, bihi, bjlo, bjhi, *g_c, cilo, cihi, cjlo, cjhi); } void FATR ga_dadd_patch_(DoublePrecision *alpha, Integer *g_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, DoublePrecision *beta, Integer *g_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, Integer *g_c, Integer *cilo, Integer *cihi, Integer *cjlo, Integer *cjhi) { Integer atype, btype, ctype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); pnga_inquire_type(*g_c, &ctype); if (atype != btype || atype != ctype || atype != C_DBL) pnga_error(" wrong types ", 0L); sga_add_patch(alpha, *g_a, ailo, aihi, ajlo, ajhi, beta, *g_b, bilo, bihi, bjlo, bjhi, *g_c, cilo, cihi, cjlo, cjhi); } void FATR ga_iadd_patch_(Integer *alpha, Integer *g_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Integer *beta, Integer *g_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, Integer *g_c, Integer *cilo, Integer *cihi, Integer *cjlo, Integer *cjhi) { Integer atype, btype, ctype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); pnga_inquire_type(*g_c, &ctype); if (atype != btype || atype != ctype || (atype != C_INT && atype != C_LONG && atype != C_LONGLONG)) pnga_error(" wrong types ", 0L); sga_add_patch(alpha, *g_a, ailo, aihi, ajlo, ajhi, beta, *g_b, bilo, bihi, bjlo, bjhi, *g_c, cilo, cihi, cjlo, cjhi); } void FATR ga_sadd_patch_(Real *alpha, Integer *g_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Real *beta, Integer *g_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, Integer *g_c, Integer *cilo, Integer *cihi, Integer *cjlo, Integer *cjhi) { Integer atype, btype, ctype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); pnga_inquire_type(*g_c, &ctype); if (atype != btype || atype != ctype || atype != C_FLOAT) pnga_error(" wrong types ", 0L); sga_add_patch(alpha, *g_a, ailo, aihi, ajlo, ajhi, beta, *g_b, bilo, bihi, bjlo, bjhi, *g_c, cilo, cihi, cjlo, cjhi); } void FATR ga_zadd_patch_(DoubleComplex *alpha, Integer *g_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, DoubleComplex *beta, Integer *g_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, Integer *g_c, Integer *cilo, Integer *cihi, Integer *cjlo, Integer *cjhi) { Integer atype, btype, ctype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); pnga_inquire_type(*g_c, &ctype); if (atype != btype || atype != ctype || atype != C_DCPL) pnga_error(" wrong types ", 0L); sga_add_patch(alpha, *g_a, ailo, aihi, ajlo, ajhi, beta, *g_b, bilo, bihi, bjlo, bjhi, *g_c, cilo, cihi, cjlo, cjhi); } void FATR nga_add_patch_(void *alpha, Integer *g_a, Integer *alo, Integer *ahi, void *beta, Integer *g_b, Integer *blo, Integer *bhi, Integer *g_c, Integer *clo, Integer *chi) { wnga_add_patch(alpha, *g_a, alo, ahi, beta, *g_b, blo, bhi, *g_c, clo, chi); } void FATR nga_cadd_patch_(SingleComplex *alpha, Integer *g_a, Integer *alo, Integer *ahi, SingleComplex *beta, Integer *g_b, Integer *blo, Integer *bhi, Integer *g_c, Integer *clo, Integer *chi) { Integer atype, btype, ctype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); pnga_inquire_type(*g_c, &ctype); if (atype != btype || atype != ctype || atype != C_SCPL) pnga_error(" wrong types ", 0L); wnga_add_patch(alpha, *g_a, alo, ahi, beta, *g_b, blo, bhi, *g_c, clo, chi); } void FATR nga_dadd_patch_(DoublePrecision *alpha, Integer *g_a, Integer *alo, Integer *ahi, DoublePrecision *beta, Integer *g_b, Integer *blo, Integer *bhi, Integer *g_c, Integer *clo, Integer *chi) { Integer atype, btype, ctype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); pnga_inquire_type(*g_c, &ctype); if (atype != btype || atype != ctype || atype != C_DBL) pnga_error(" wrong types ", 0L); wnga_add_patch(alpha, *g_a, alo, ahi, beta, *g_b, blo, bhi, *g_c, clo, chi); } void FATR nga_iadd_patch_(Integer *alpha, Integer *g_a, Integer *alo, Integer *ahi, Integer *beta, Integer *g_b, Integer *blo, Integer *bhi, Integer *g_c, Integer *clo, Integer *chi) { Integer atype, btype, ctype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); pnga_inquire_type(*g_c, &ctype); if (atype != btype || atype != ctype || (atype != C_INT && atype != C_LONG && atype != C_LONGLONG)) pnga_error(" wrong types ", 0L); wnga_add_patch(alpha, *g_a, alo, ahi, beta, *g_b, blo, bhi, *g_c, clo, chi); } void FATR nga_sadd_patch_(Real *alpha, Integer *g_a, Integer *alo, Integer *ahi, Real *beta, Integer *g_b, Integer *blo, Integer *bhi, Integer *g_c, Integer *clo, Integer *chi) { Integer atype, btype, ctype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); pnga_inquire_type(*g_c, &ctype); if (atype != btype || atype != ctype || atype != C_FLOAT) pnga_error(" wrong types ", 0L); wnga_add_patch(alpha, *g_a, alo, ahi, beta, *g_b, blo, bhi, *g_c, clo, chi); } void FATR nga_zadd_patch_(DoubleComplex *alpha, Integer *g_a, Integer *alo, Integer *ahi, DoubleComplex *beta, Integer *g_b, Integer *blo, Integer *bhi, Integer *g_c, Integer *clo, Integer *chi) { Integer atype, btype, ctype; pnga_inquire_type(*g_a, &atype); pnga_inquire_type(*g_b, &btype); pnga_inquire_type(*g_c, &ctype); if (atype != btype || atype != ctype || atype != C_DCPL) pnga_error(" wrong types ", 0L); wnga_add_patch(alpha, *g_a, alo, ahi, beta, *g_b, blo, bhi, *g_c, clo, chi); } /* Routines from select.c */ void FATR nga_select_elem_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer *g_a, char* op, void* val, Integer *subscript, int oplen #else Integer *g_a, char* op, int oplen, void* val, Integer *subscript #endif ) { wnga_select_elem(*g_a, op, val, subscript); } /* Routines from sparse.c */ void FATR ga_patch_enum_(Integer* g_a, Integer* lo, Integer* hi, void* start, void* stride) { wnga_patch_enum(*g_a, *lo, *hi, start, stride); } void FATR nga_patch_enum_(Integer* g_a, Integer* lo, Integer* hi, void* start, void* stride) { wnga_patch_enum(*g_a, *lo, *hi, start, stride); } void FATR ga_scan_copy_(Integer* g_a, Integer* g_b, Integer* g_sbit, Integer* lo, Integer* hi) { wnga_scan_copy(*g_a, *g_b, *g_sbit, *lo, *hi); } void FATR nga_scan_copy_(Integer* g_a, Integer* g_b, Integer* g_sbit, Integer* lo, Integer* hi) { wnga_scan_copy(*g_a, *g_b, *g_sbit, *lo, *hi); } void FATR ga_scan_add_(Integer* g_a, Integer* g_b, Integer* g_sbit, Integer* lo, Integer* hi, Integer* excl) { wnga_scan_add(*g_a, *g_b, *g_sbit, *lo, *hi, *excl); } void FATR nga_scan_add_(Integer* g_a, Integer* g_b, Integer* g_sbit, Integer* lo, Integer* hi, Integer* excl) { wnga_scan_add(*g_a, *g_b, *g_sbit, *lo, *hi, *excl); } void FATR ga_pack_(Integer* g_a, Integer* g_b, Integer* g_sbit, Integer* lo, Integer* hi, Integer* icount) { wnga_pack(*g_a, *g_b, *g_sbit, *lo, *hi, icount); } void FATR nga_pack_(Integer* g_a, Integer* g_b, Integer* g_sbit, Integer* lo, Integer* hi, Integer* icount) { wnga_pack(*g_a, *g_b, *g_sbit, *lo, *hi, icount); } void FATR ga_unpack_(Integer* g_a, Integer* g_b, Integer* g_sbit, Integer* lo, Integer* hi, Integer* icount) { wnga_unpack(*g_a, *g_b, *g_sbit, *lo, *hi, icount); } void FATR nga_unpack_(Integer* g_a, Integer* g_b, Integer* g_sbit, Integer* lo, Integer* hi, Integer* icount) { wnga_unpack(*g_a, *g_b, *g_sbit, *lo, *hi, icount); } logical FATR ga_create_bin_range_(Integer *g_bin, Integer *g_cnt, Integer *g_off, Integer *g_range) { return wnga_create_bin_range(*g_bin, *g_cnt, *g_off, g_range); } logical FATR nga_create_bin_range_(Integer *g_bin, Integer *g_cnt, Integer *g_off, Integer *g_range) { return wnga_create_bin_range(*g_bin, *g_cnt, *g_off, g_range); } void FATR ga_bin_sorter_(Integer *g_bin, Integer *g_cnt, Integer *g_off) { wnga_bin_sorter(*g_bin, *g_cnt, *g_off); } void FATR nga_bin_sorter_(Integer *g_bin, Integer *g_cnt, Integer *g_off) { wnga_bin_sorter(*g_bin, *g_cnt, *g_off); } void FATR ga_bin_index_(Integer *g_bin, Integer *g_cnt, Integer *g_off, Integer *values, Integer *subs, Integer *n, Integer *sortit) { wnga_bin_index(*g_bin, *g_cnt, *g_off, values, subs, *n, *sortit); } void FATR nga_bin_index_(Integer *g_bin, Integer *g_cnt, Integer *g_off, Integer *values, Integer *subs, Integer *n, Integer *sortit) { wnga_bin_index(*g_bin, *g_cnt, *g_off, values, subs, *n, *sortit); } /* Routines from matrix.c */ void FATR ga_median_patch_(Integer *g_a, Integer *alo, Integer *ahi, Integer *g_b, Integer *blo, Integer *bhi, Integer *g_c, Integer *clo, Integer *chi, Integer *g_m, Integer *mlo, Integer *mhi) { wnga_median_patch(*g_a, alo, ahi, *g_b, blo, bhi, *g_c, clo, chi, *g_m, mlo, mhi); } void FATR nga_median_patch_(Integer *g_a, Integer *alo, Integer *ahi, Integer *g_b, Integer *blo, Integer *bhi, Integer *g_c, Integer *clo, Integer *chi, Integer *g_m, Integer *mlo, Integer *mhi) { wnga_median_patch(*g_a, alo, ahi, *g_b, blo, bhi, *g_c, clo, chi, *g_m, mlo, mhi); } void FATR ga_median_(Integer * g_a, Integer * g_b, Integer * g_c, Integer * g_m){ wnga_median(*g_a, *g_b, *g_c, *g_m); } void FATR nga_median_(Integer * g_a, Integer * g_b, Integer * g_c, Integer * g_m){ wnga_median(*g_a, *g_b, *g_c, *g_m); } void FATR ga_norm_infinity_(Integer * g_a, double *nm) { wnga_norm_infinity(*g_a, nm); } void FATR nga_norm_infinity_(Integer * g_a, double *nm) { wnga_norm_infinity(*g_a, nm); } void FATR ga_norm1_(Integer * g_a, double *nm) { wnga_norm1(*g_a, nm); } void FATR nga_norm1_(Integer * g_a, double *nm) { wnga_norm1(*g_a, nm); } void FATR ga_get_diag_(Integer * g_a, Integer * g_v) { wnga_get_diag(*g_a, *g_v); } void FATR nga_get_diag_(Integer * g_a, Integer * g_v) { wnga_get_diag(*g_a, *g_v); } void FATR ga_add_diagonal_(Integer * g_a, Integer * g_v) { wnga_add_diagonal(*g_a, *g_v); } void FATR nga_add_diagonal_(Integer * g_a, Integer * g_v) { wnga_add_diagonal(*g_a, *g_v); } void FATR ga_set_diagonal_(Integer * g_a, Integer * g_v) { wnga_set_diagonal(*g_a, *g_v); } void FATR nga_set_diagonal_(Integer * g_a, Integer * g_v) { wnga_set_diagonal(*g_a, *g_v); } void FATR ga_shift_diagonal_(Integer * g_a, void *c) { wnga_shift_diagonal(*g_a, c); } void FATR nga_shift_diagonal_(Integer * g_a, void *c) { wnga_shift_diagonal(*g_a, c); } void FATR ga_zero_diagonal_(Integer * g_a) { wnga_zero_diagonal(*g_a); } void FATR nga_zero_diagonal_(Integer * g_a) { wnga_zero_diagonal(*g_a); } void FATR ga_scale_rows_(Integer *g_a, Integer *g_v) { wnga_scale_rows(*g_a, *g_v); } void FATR nga_scale_rows_(Integer *g_a, Integer *g_v) { wnga_scale_rows(*g_a, *g_v); } void FATR ga_scale_cols_(Integer *g_a, Integer *g_v) { wnga_scale_cols(*g_a, *g_v); } void FATR nga_scale_cols_(Integer *g_a, Integer *g_v) { wnga_scale_cols(*g_a, *g_v); } /* Routines from ga_symmetr.c */ void FATR ga_symmetrize_(Integer *g_a) { wnga_symmetrize(*g_a); } void FATR nga_symmetrize_(Integer *g_a) { wnga_symmetrize(*g_a); } /* Routines from global.periodic.c */ void FATR nga_periodic_get_(Integer *g_a, Integer *lo, Integer *hi, void *buf, Integer *ld) { wnga_periodic(*g_a, lo, hi, buf, ld, NULL, PERIODIC_GET); } void FATR nga_periodic_put_(Integer *g_a, Integer *lo, Integer *hi, void *buf, Integer *ld) { wnga_periodic(*g_a, lo, hi, buf, ld, NULL, PERIODIC_PUT); } void FATR nga_periodic_acc_(Integer *g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, void *alpha) { wnga_periodic(*g_a, lo, hi, buf, ld, alpha, PERIODIC_ACC); } /* Routines from matmul.c */ void FATR ga_matmul_mirrored_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS transa, transb, alpha, beta, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi, alen, blen #else transa, alen, transb, blen, alpha, beta, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi #endif ) Integer *g_a, *ailo, *aihi, *ajlo, *ajhi; /* patch of g_a */ Integer *g_b, *bilo, *bihi, *bjlo, *bjhi; /* patch of g_b */ Integer *g_c, *cilo, *cihi, *cjlo, *cjhi; /* patch of g_c */ void *alpha, *beta; char *transa, *transb; int alen, blen; { wnga_matmul_mirrored(transa, transb, alpha, beta, *g_a, *ailo, *aihi, *ajlo, *ajhi, *g_b, *bilo, *bihi, *bjlo, *bjhi, *g_c, *cilo, *cihi, *cjlo, *cjhi); } void FATR nga_matmul_patch_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *transa, char *transb, void *alpha, void *beta, Integer *g_a, Integer alo[], Integer ahi[], Integer *g_b, Integer blo[], Integer bhi[], Integer *g_c, Integer clo[], Integer chi[], int alen, int blen #else char *transa, int alen, char *transb, int blen, void *alpha, void *beta, Integer *g_a, Integer alo[], Integer ahi[], Integer *g_b, Integer blo[], Integer bhi[], Integer *g_c, Integer clo[], Integer chi[] #endif ) { wnga_matmul_patch(transa, transb, alpha, beta, *g_a, alo, ahi, *g_b, blo, bhi, *g_c, clo, chi); } void FATR ga_matmul_patch_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *transa, char *transb, DoublePrecision *alpha, DoublePrecision *beta, Integer *g_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Integer *g_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, Integer *g_c, Integer *cilo, Integer *cihi, Integer *cjlo, Integer *cjhi, int alen, int blen #else char *transa, int alen, char *transb, int blen, DoublePrecision *alpha, DoublePrecision *beta, Integer *g_a, Integer *ailo, Integer *aihi, Integer *ajlo, Integer *ajhi, Integer *g_b, Integer *bilo, Integer *bihi, Integer *bjlo, Integer *bjhi, Integer *g_c, Integer *cilo, Integer *cihi, Integer *cjlo, Integer *cjhi #endif ) { #if 0 Integer alo[2], ahi[2]; Integer blo[2], bhi[2]; Integer clo[2], chi[2]; alo[0]=*ailo; ahi[0]=*aihi; alo[1]=*ajlo; ahi[1]=*ajhi; blo[0]=*bilo; bhi[0]=*bihi; blo[1]=*bjlo; bhi[1]=*bjhi; clo[0]=*cilo; chi[0]=*cihi; clo[1]=*cjlo; chi[1]=*cjhi; pnga_matmul_patch(transa, transb, alpha, beta, g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi); #else if(pnga_is_mirrored(*g_a)) wnga_matmul_mirrored(transa, transb, (void*)alpha, (void*)beta, *g_a, *ailo, *aihi, *ajlo, *ajhi, *g_b, *bilo, *bihi, *bjlo, *bjhi, *g_c, *cilo, *cihi, *cjlo, *cjhi); else { gai_matmul_patch_flag(SET); wnga_matmul(transa, transb, (void*)alpha, (void*)beta, *g_a, *ailo, *aihi, *ajlo, *ajhi, *g_b, *bilo, *bihi, *bjlo, *bjhi, *g_c, *cilo, *cihi, *cjlo, *cjhi); gai_matmul_patch_flag(UNSET); } #endif } void FATR ga_matmul_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS transa, transb, alpha, beta, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi, alen, blen #else transa, alen, transb, blen, alpha, beta, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, g_c, cilo, cihi, cjlo, cjhi #endif ) Integer *g_a, *ailo, *aihi, *ajlo, *ajhi; /* patch of g_a */ Integer *g_b, *bilo, *bihi, *bjlo, *bjhi; /* patch of g_b */ Integer *g_c, *cilo, *cihi, *cjlo, *cjhi; /* patch of g_c */ void *alpha, *beta; char *transa, *transb; int alen, blen; { wnga_matmul(transa, transb, alpha, beta, *g_a, *ailo, *aihi, *ajlo, *ajhi, *g_b, *bilo, *bihi, *bjlo, *bjhi, *g_c, *cilo, *cihi, *cjlo, *cjhi); } /* use ga_dgemm in ga_dgemmf.F as accumulate is sloooow in CRAY_XT */ #ifdef CRAY_XT # define GA_DGEMM ga_dgemm_DISABLE #else # define GA_DGEMM ga_dgemm_ #endif #define SET_GEMM_INDICES\ Integer ailo = 1;\ Integer aihi = *m;\ Integer ajlo = 1;\ Integer ajhi = *k;\ \ Integer bilo = 1;\ Integer bihi = *k;\ Integer bjlo = 1;\ Integer bjhi = *n;\ \ Integer cilo = 1;\ Integer cihi = *m;\ Integer cjlo = 1;\ Integer cjhi = *n void FATR GA_DGEMM( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *transa, char *transb, Integer *m, Integer *n, Integer *k, void *alpha, Integer *g_a, Integer *g_b, void *beta, Integer *g_c, int talen, int tblen #else char *transa, int talen, char *transb, int tblen, Integer *m, Integer *n, Integer *k, void *alpha, Integer *g_a, Integer *g_b, void *beta, Integer *g_c #endif ) { SET_GEMM_INDICES; wnga_matmul(transa, transb, alpha, beta, *g_a, ailo, aihi, ajlo, ajhi, *g_b, bilo, bihi, bjlo, bjhi, *g_c, cilo, cihi, cjlo, cjhi); } void FATR ga_cgemm_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *transa, char *transb, Integer *m, Integer *n, Integer *k, void *alpha, Integer *g_a, Integer *g_b, void *beta, Integer *g_c, int talen, int tblen #else char *transa, int talen, char *transb, int tblen, Integer *m, Integer *n, Integer *k, void *alpha, Integer *g_a, Integer *g_b, void *beta, Integer *g_c #endif ) { SET_GEMM_INDICES; wnga_matmul (transa, transb, alpha, beta, *g_a, ailo, aihi, ajlo, ajhi, *g_b, bilo, bihi, bjlo, bjhi, *g_c, cilo, cihi, cjlo, cjhi); } void FATR ga_sgemm_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *transa, char *transb, Integer *m, Integer *n, Integer *k, void *alpha, Integer *g_a, Integer *g_b, void *beta, Integer *g_c, int talen, int tblen #else char *transa, int talen, char *transb, int tblen, Integer *m, Integer *n, Integer *k, void *alpha, Integer *g_a, Integer *g_b, void *beta, Integer *g_c #endif ) { SET_GEMM_INDICES; wnga_matmul (transa, transb, alpha, beta, *g_a, ailo, aihi, ajlo, ajhi, *g_b, bilo, bihi, bjlo, bjhi, *g_c, cilo, cihi, cjlo, cjhi); } void FATR ga_zgemm_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *transa, char *transb, Integer *m, Integer *n, Integer *k, void *alpha, Integer *g_a, Integer *g_b, void *beta, Integer *g_c, int talen, int tblen #else char *transa, int talen, char *transb, int tblen, Integer *m, Integer *n, Integer *k, void *alpha, Integer *g_a, Integer *g_b, void *beta, Integer *g_c #endif ) { SET_GEMM_INDICES; wnga_matmul (transa, transb, alpha, beta, *g_a, ailo, aihi, ajlo, ajhi, *g_b, bilo, bihi, bjlo, bjhi, *g_c, cilo, cihi, cjlo, cjhi); } /* Routines from ga_diag_seqc.c */ void FATR ga_diag_seq_(Integer *g_a, Integer *g_s, Integer *g_v, DoublePrecision *eval) { wnga_diag_seq(*g_a, *g_s, *g_v, eval); } void FATR ga_diag_std_seq_(Integer * g_a, Integer * g_v, DoublePrecision *eval) { wnga_diag_std_seq(*g_a, *g_v, eval); } /* Routines from peigstubs.c */ void FATR ga_diag_(Integer * g_a, Integer * g_s, Integer * g_v, DoublePrecision *eval) { wnga_diag(*g_a, *g_s, *g_v, eval); } void FATR ga_diag_std_(Integer * g_a, Integer * g_v, DoublePrecision *eval) { wnga_diag_std(*g_a, *g_v, eval); } void FATR ga_diag_reuse_(Integer * reuse, Integer * g_a, Integer * g_s, Integer * g_v, DoublePrecision *eval) { wnga_diag_reuse(*reuse, *g_a, *g_s, *g_v, eval); } /* Routines from sclstubs.c */ void FATR ga_lu_solve_alt_(Integer *tran, Integer * g_a, Integer * g_b) { wnga_lu_solve_alt(*tran, *g_a, *g_b); } void FATR ga_lu_solve_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *tran, Integer * g_a, Integer * g_b, int len #else char *tran, int len, Integer * g_a, Integer * g_b #endif ) { wnga_lu_solve(tran, *g_a, *g_b); } Integer FATR ga_llt_solve_(Integer * g_a, Integer * g_b) { return wnga_llt_solve(*g_a, *g_b); } Integer FATR nga_llt_solve_(Integer * g_a, Integer * g_b) { return wnga_llt_solve(*g_a, *g_b); } Integer FATR ga_solve_(Integer * g_a, Integer * g_b) { return wnga_solve(*g_a, *g_b); } Integer FATR nga_solve_(Integer * g_a, Integer * g_b) { return wnga_solve(*g_a, *g_b); } Integer FATR ga_spd_invert_(Integer * g_a) { return wnga_spd_invert(*g_a); } Integer FATR nga_spd_invert_(Integer * g_a) { return wnga_spd_invert(*g_a); } /* Routines from DP.c */ void FATR ga_copy_patch_dp_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS trans, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi, translen #else trans, translen, g_a, ailo, aihi, ajlo, ajhi, g_b, bilo, bihi, bjlo, bjhi #endif ) Integer *g_a, *ailo, *aihi, *ajlo, *ajhi; Integer *g_b, *bilo, *bihi, *bjlo, *bjhi; char *trans; int translen; { wnga_copy_patch_dp(trans,*g_a,*ailo,*aihi,*ajlo,*ajhi,*g_b,*bilo,*bihi,*bjlo,*bjhi); } DoublePrecision FATR ga_ddot_patch_dp_( #if F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS g_a, t_a, ailo, aihi, ajlo, ajhi, g_b, t_b, bilo, bihi, bjlo, bjhi, alen, blen #else g_a, t_a, alen, ailo, aihi, ajlo, ajhi, g_b, t_b, blen, bilo, bihi, bjlo, bjhi #endif ) Integer *g_a, *ailo, *aihi, *ajlo, *ajhi; /* patch of g_a */ Integer *g_b, *bilo, *bihi, *bjlo, *bjhi; /* patch of g_b */ char *t_a, *t_b; /* transpose operators */ int alen, blen; { return wnga_ddot_patch_dp(*g_a, t_a, *ailo, *aihi, *ajlo, *ajhi, *g_b, t_b, *bilo, *bihi, *bjlo, *bjhi); } /* Routines from ga_trace.c */ double FATR ga_timer_() { return wnga_timer(); } double FATR nga_timer_() { return wnga_timer(); } Integer nga_register_type_(Integer *size) { return wnga_register_type((size_t)*size); } Integer nga_deregister_type_(Integer *type) { return wnga_deregister_type((int)*type); } void nga_get_field_(Integer *g_a, Integer *lo, Integer *hi, Integer *foff, Integer *fsize, void *buf, Integer *ld) { wnga_get_field(*g_a, lo, hi, *foff, *fsize, buf, ld); } void nga_nbget_field_(Integer *g_a, Integer *lo, Integer *hi, Integer *foff, Integer *fsize, void *buf, Integer *ld, Integer *nbhandle) { wnga_nbget_field(*g_a, lo, hi, *foff, *fsize, buf, ld, nbhandle); } void nga_nbput_field_(Integer *g_a, Integer *lo, Integer *hi, Integer *foff, Integer *fsize, void *buf, Integer *ld, Integer *nbhandle) { wnga_nbput_field(*g_a, lo, hi, *foff, *fsize, buf, ld, nbhandle); } void nga_put_field_(Integer *g_a, Integer *lo, Integer *hi, Integer *foff, Integer *fsize, void *buf, Integer *ld) { wnga_put_field(*g_a, lo, hi, *foff, *fsize, buf, ld); } ga-5-3/global/src/global.nalg.c0000640005473000001440000010453511647111726015165 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /*************************************************************************\ Purpose: File global.nalg.c contains a set of linear algebra routines that operate on n-dim global arrays in the SPMD mode. Date: 10.22.98 Author: Jarek Nieplocha \************************************************************************/ #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #include "message.h" #include "globalp.h" #include "armci.h" #include "ga-papi.h" #include "ga-wapi.h" #ifdef MPI extern ARMCI_Group* ga_get_armci_group_(int); #endif /* work arrays used in all routines */ static Integer dims[MAXDIM], ld[MAXDIM-1]; static Integer lo[MAXDIM],hi[MAXDIM]; static Integer one_arr[MAXDIM]={1,1,1,1,1,1,1}; #define GET_ELEMS(ndim,lo,hi,ld,pelems){\ int _i;\ for(_i=0, *pelems = hi[ndim-1]-lo[ndim-1]+1; _i< ndim-1;_i++) {\ if(ld[_i] != (hi[_i]-lo[_i]+1)) pnga_error("layout problem",_i);\ *pelems *= hi[_i]-lo[_i]+1;\ }\ } #define GET_ELEMS_W_GHOSTS(ndim,lo,hi,ld,pelems){\ int _i;\ for(_i=0, *pelems = hi[ndim-1]-lo[ndim-1]+1; _i< ndim-1;_i++) {\ if(ld[_i] < (hi[_i]-lo[_i]+1))\ pnga_error("layout problem with ghosts",_i);\ *pelems *= hi[_i]-lo[_i]+1;\ }\ } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_zero = pnga_zero #endif void pnga_zero(Integer g_a) { Integer ndim, type, me, elems, p_handle; Integer num_blocks; void *ptr; /*register Integer i;*/ int local_sync_begin,local_sync_end; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ p_handle = pnga_get_pgroup(g_a); if(local_sync_begin) pnga_pgroup_sync(p_handle); me = pnga_pgroup_nodeid(p_handle); pnga_check_handle(g_a, "ga_zero"); GA_PUSH_NAME("ga_zero"); num_blocks = pnga_total_blocks(g_a); pnga_inquire(g_a, &type, &ndim, dims); if (num_blocks < 0) { pnga_distribution(g_a, me, lo, hi); if ( lo[0]> 0 ){ /* base index is 1: we get 0 if no elements stored on p */ if (pnga_has_ghosts(g_a)) { pnga_zero_patch(g_a,lo,hi); return; } pnga_access_ptr(g_a, lo, hi, &ptr, ld); GET_ELEMS(ndim,lo,hi,ld,&elems); /* switch (type){ */ /* int *ia; */ /* double *da; */ /* float *fa; */ /* long *la; */ /* long long *lla; */ /* case C_INT: */ /* ia = (int*)ptr; */ /* for(i=0;i0){ pnga_access_ptr(g_a, lo, hi, &ptr_a, ld); if (pnga_has_ghosts(g_a)) { GET_ELEMS_W_GHOSTS(ndim,lo,hi,ld,&elems); } else { GET_ELEMS(ndim,lo,hi,ld,&elems); } } pnga_distribution(g_b, me, lo, hi); if(lo[0]>0){ pnga_access_ptr(g_b, lo, hi, &ptr_b, ld); if (pnga_has_ghosts(g_b)) { GET_ELEMS_W_GHOSTS(ndim,lo,hi,ld,&elems); } else { GET_ELEMS(ndim,lo,hi,ld,&elems); } } if(elems!= elemsb)pnga_error("inconsistent number of elements",elems-elemsb); if(elems>0){ ARMCI_Copy(ptr_a, ptr_b, (int)elems*GAsizeofM(type)); pnga_release(g_a,lo,hi); pnga_release(g_b,lo,hi); } pnga_sync(); } GA_POP_NAME; } #endif /*\ COPY ONE GLOBAL ARRAY INTO ANOTHER \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_copy = pnga_copy #endif void pnga_copy(Integer g_a, Integer g_b) { Integer ndim, ndimb, type, typeb, me_a, me_b; Integer dimsb[MAXDIM],i; Integer a_grp, b_grp, anproc, bnproc; Integer num_blocks_a, num_blocks_b; Integer blocks[MAXDIM], block_dims[MAXDIM]; void *ptr_a, *ptr_b; int local_sync_begin,local_sync_end,use_put; GA_PUSH_NAME("ga_copy"); local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ a_grp = pnga_get_pgroup(g_a); b_grp = pnga_get_pgroup(g_b); me_a = pnga_pgroup_nodeid(a_grp); me_b = pnga_pgroup_nodeid(b_grp); anproc = pnga_get_pgroup_size(a_grp); bnproc = pnga_get_pgroup_size(b_grp); num_blocks_a = pnga_total_blocks(g_a); num_blocks_b = pnga_total_blocks(g_b); if (anproc <= bnproc) { use_put = 1; } else { use_put = 0; } /*if (a_grp != b_grp) pnga_error("Both arrays must be defined on same group",0L); */ if(local_sync_begin) { if (anproc <= bnproc) { pnga_pgroup_sync(a_grp); } else if (a_grp == pnga_pgroup_get_world() && b_grp == pnga_pgroup_get_world()) { pnga_sync(); } else { pnga_pgroup_sync(b_grp); } } if(g_a == g_b) pnga_error("arrays have to be different ", 0L); pnga_inquire(g_a, &type, &ndim, dims); pnga_inquire(g_b, &typeb, &ndimb, dimsb); if(type != typeb) pnga_error("types not the same", g_b); if(ndim != ndimb) pnga_error("dimensions not the same", ndimb); for(i=0; i< ndim; i++)if(dims[i]!=dimsb[i]) pnga_error("dimensions not the same",i); if ((pnga_is_mirrored(g_a) && pnga_is_mirrored(g_b)) || (!pnga_is_mirrored(g_a) && !pnga_is_mirrored(g_b))) { /* Both global arrays are mirrored or both global arrays are not mirrored. Copy operation is straightforward */ if (use_put) { if (num_blocks_a < 0) { pnga_distribution(g_a, me_a, lo, hi); if(lo[0]>0){ pnga_access_ptr(g_a, lo, hi, &ptr_a, ld); pnga_put(g_b, lo, hi, ptr_a, ld); } } else { if (!pnga_uses_proc_grid(g_a)) { for (i=me_a; i0) { pnga_access_block_ptr(g_a, i, &ptr_a, ld); pnga_put(g_b, lo, hi, ptr_a, ld); } } } else { Integer proc_index[MAXDIM], index[MAXDIM]; Integer topology[MAXDIM], chk; pnga_get_proc_index(g_a, me_a, proc_index); pnga_get_proc_index(g_a, me_a, index); pnga_get_block_info(g_a, blocks, block_dims); pnga_get_proc_grid(g_a, topology); while (index[ndim-1] < blocks[ndim-1]) { /* find bounding coordinates of block */ chk = 1; for (i = 0; i < ndim; i++) { lo[i] = index[i]*block_dims[i]+1; hi[i] = (index[i] + 1)*block_dims[i]; if (hi[i] > dims[i]) hi[i] = dims[i]; if (hi[i] < lo[i]) chk = 0; } if (chk) { pnga_access_block_grid_ptr(g_a, index, &ptr_a, ld); pnga_put(g_b, lo, hi, ptr_a, ld); } /* increment index to get next block on processor */ index[0] += topology[0]; for (i = 0; i < ndim; i++) { if (index[i] >= blocks[i] && i0){ pnga_access_ptr(g_b, lo, hi, &ptr_b, ld); pnga_get(g_a, lo, hi, ptr_b, ld); } } else { if (!pnga_uses_proc_grid(g_a)) { for (i=me_b; i0) { pnga_access_block_ptr(g_b, i, &ptr_b, ld); pnga_get(g_a, lo, hi, ptr_b, ld); } } } else { Integer proc_index[MAXDIM], index[MAXDIM]; Integer topology[MAXDIM], chk; pnga_get_proc_index(g_b, me_b, proc_index); pnga_get_proc_index(g_b, me_b, index); pnga_get_block_info(g_b, blocks, block_dims); pnga_get_proc_grid(g_b, topology); while (index[ndim-1] < blocks[ndim-1]) { /* find bounding coordinates of block */ chk = 1; for (i = 0; i < ndim; i++) { lo[i] = index[i]*block_dims[i]+1; hi[i] = (index[i] + 1)*block_dims[i]; if (hi[i] > dims[i]) hi[i] = dims[i]; if (hi[i] < lo[i]) chk = 0; } if (chk) { pnga_access_block_grid_ptr(g_b, index, &ptr_b, ld); pnga_get(g_a, lo, hi, ptr_b, ld); } /* increment index to get next block on processor */ index[0] += topology[0]; for (i = 0; i < ndim; i++) { if (index[i] >= blocks[i] && i0) { pnga_access_ptr(g_b, lo, hi, &ptr_b, ld); pnga_get(g_a, lo, hi, ptr_b, ld); } } else { /* source array is distributed and destination array is mirrored */ pnga_zero(g_b); pnga_distribution(g_a, me_a, lo, hi); if (lo[0] > 0) { pnga_access_ptr(g_a, lo, hi, &ptr_a, ld); pnga_put(g_b, lo, hi, ptr_a, ld); } pnga_merge_mirrored(g_b); } } if(local_sync_end) { if (anproc <= bnproc) { pnga_pgroup_sync(a_grp); } else if (a_grp == pnga_pgroup_get_world() && b_grp == pnga_pgroup_get_world()) { pnga_sync(); } else { pnga_pgroup_sync(b_grp); } } GA_POP_NAME; } /*\ internal version of dot product \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_dot = pnga_dot #endif void pnga_dot(int Type, Integer g_a, Integer g_b, void *value) { Integer ndim=0, type=0, atype=0, me=0, elems=0, elemsb=0; register Integer i=0; int isum=0; long lsum=0; long long llsum=0; DoubleComplex zsum ={0.,0.}; SingleComplex csum ={0.,0.}; float fsum=0.0; void *ptr_a=NULL, *ptr_b=NULL; int alen=0; Integer a_grp=0, b_grp=0; Integer num_blocks_a=0, num_blocks_b=0; Integer andim, adims[MAXDIM]; Integer bndim, bdims[MAXDIM]; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ GA_PUSH_NAME("ga_dot"); a_grp = pnga_get_pgroup(g_a); b_grp = pnga_get_pgroup(g_b); if (a_grp != b_grp) pnga_error("Both arrays must be defined on same group",0L); me = pnga_pgroup_nodeid(a_grp); /* Check to see if either GA is block cyclic distributed */ num_blocks_a = pnga_total_blocks(g_a); num_blocks_b = pnga_total_blocks(g_b); if (num_blocks_a >= 0 || num_blocks_b >= 0) { pnga_inquire(g_a, &type, &andim, adims); pnga_inquire(g_b, &type, &bndim, bdims); pnga_dot_patch(g_a, "n", one_arr, adims, g_b, "n", one_arr, bdims, value); GA_POP_NAME; return; } if(pnga_compare_distr(g_a,g_b) == FALSE || pnga_has_ghosts(g_a) || pnga_has_ghosts(g_b)) { /* distributions not identical */ pnga_inquire(g_a, &type, &andim, adims); pnga_inquire(g_b, &type, &bndim, bdims); pnga_dot_patch(g_a, "n", one_arr, adims, g_b, "n", one_arr, bdims, value); GA_POP_NAME; return; } pnga_pgroup_sync(a_grp); pnga_inquire(g_a, &type, &ndim, dims); if(type != Type) pnga_error("type not correct", g_a); pnga_distribution(g_a, me, lo, hi); if(lo[0]>0){ pnga_access_ptr(g_a, lo, hi, &ptr_a, ld); if (pnga_has_ghosts(g_a)) { GET_ELEMS_W_GHOSTS(ndim,lo,hi,ld,&elems); } else { GET_ELEMS(ndim,lo,hi,ld,&elems); } } if(g_a == g_b){ elemsb = elems; ptr_b = ptr_a; }else { pnga_inquire(g_b, &type, &ndim, dims); if(type != Type) pnga_error("type not correct", g_b); pnga_distribution(g_b, me, lo, hi); if(lo[0]>0){ pnga_access_ptr(g_b, lo, hi, &ptr_b, ld); if (pnga_has_ghosts(g_b)) { GET_ELEMS_W_GHOSTS(ndim,lo,hi,ld,&elemsb); } else { GET_ELEMS(ndim,lo,hi,ld,&elemsb); } } } if(elems!= elemsb)pnga_error("inconsistent number of elements",elems-elemsb); /* compute "local" contribution to the dot product */ switch (type){ int *ia, *ib; double *da,*db; float *fa, *fb; long *la,*lb; long long *lla,*llb; case C_INT: ia = (int*)ptr_a; ib = (int*)ptr_b; for(i=0;i0){ pnga_release(g_a, lo, hi); if(g_a != g_b)pnga_release(g_b, lo, hi); } /*convert from C data type to ARMCI type */ switch(type) { case C_FLOAT: atype=ARMCI_FLOAT; break; case C_DBL: atype=ARMCI_DOUBLE; break; case C_INT: atype=ARMCI_INT; break; case C_LONG: atype=ARMCI_LONG; break; case C_LONGLONG: atype=ARMCI_LONG_LONG; break; case C_DCPL: atype=ARMCI_DOUBLE; break; case C_SCPL: atype=ARMCI_FLOAT; break; default: pnga_error("pnga_dot: type not supported",type); } if (pnga_is_mirrored(g_a) && pnga_is_mirrored(g_b)) { armci_msg_gop_scope(SCOPE_NODE,value,alen,"+",atype); } else { if (a_grp == -1) { armci_msg_gop_scope(SCOPE_ALL,value,alen,"+",atype); #ifdef MPI } else { armci_msg_group_gop_scope(SCOPE_ALL,value,alen,"+",atype, ga_get_armci_group_((int)a_grp)); #endif } } GA_POP_NAME; } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_scale = pnga_scale #endif void pnga_scale(Integer g_a, void* alpha) { Integer ndim, type, me, elems, grp_id; register Integer i; Integer num_blocks; void *ptr; int local_sync_begin,local_sync_end; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ grp_id = pnga_get_pgroup(g_a); if(local_sync_begin)pnga_pgroup_sync(grp_id); me = pnga_pgroup_nodeid(grp_id); pnga_check_handle(g_a, "ga_scale"); GA_PUSH_NAME("ga_scale"); num_blocks = pnga_total_blocks(g_a); pnga_inquire(g_a, &type, &ndim, dims); if (num_blocks < 0) { pnga_distribution(g_a, me, lo, hi); if (pnga_has_ghosts(g_a)) { pnga_scale_patch(g_a, lo, hi, alpha); return; } if ( lo[0]> 0 ){ /* base index is 1: we get 0 if no elements stored on p */ pnga_access_ptr(g_a, lo, hi, &ptr, ld); GET_ELEMS(ndim,lo,hi,ld,&elems); switch (type){ int *ia; double *da; DoubleComplex *ca, scale; SingleComplex *cfa, cfscale; long *la; long long *lla; float *fa; case C_INT: ia = (int*)ptr; for(i=0;i 0 || pnga_total_blocks(g_b) > 0 || pnga_total_blocks(g_c) > 0) { /* distributions not identical */ pnga_inquire(g_a, &type, &andim, adims); pnga_inquire(g_b, &type, &bndim, bdims); pnga_inquire(g_b, &type, &cndim, cdims); pnga_add_patch(alpha, g_a, one_arr, adims, beta, g_b, one_arr, bdims, g_c, one_arr, cdims); GA_POP_NAME; return; } pnga_pgroup_sync(a_grp); pnga_inquire(g_c, &typeC, &ndim, dims); pnga_distribution(g_c, me, lo, hi); if ( lo[0]>0 ){ pnga_access_ptr(g_c, lo, hi, &ptr_c, ld); GET_ELEMS(ndim,lo,hi,ld,&elems); } if(g_a == g_c){ ptr_a = ptr_c; elemsa = elems; }else { pnga_inquire(g_a, &type, &ndim, dims); if(type != typeC) pnga_error("types not consistent", g_a); pnga_distribution(g_a, me, lo, hi); if ( lo[0]>0 ){ pnga_access_ptr(g_a, lo, hi, &ptr_a, ld); GET_ELEMS(ndim,lo,hi,ld,&elemsa); } } if(g_b == g_c){ ptr_b = ptr_c; elemsb = elems; }else { pnga_inquire(g_b, &type, &ndim, dims); if(type != typeC) pnga_error("types not consistent", g_b); pnga_distribution(g_b, me, lo, hi); if ( lo[0]>0 ){ pnga_access_ptr(g_b, lo, hi, &ptr_b, ld); GET_ELEMS(ndim,lo,hi,ld,&elemsb); } } if(elems!= elemsb)pnga_error("inconsistent number of elements a",elems-elemsb); if(elems!= elemsa)pnga_error("inconsistent number of elements b",elems-elemsa); if ( lo[0]>0 ){ /* operation on the "local" piece of data */ switch(type){ int *ia, *ib, *ic; double *da,*db,*dc; float *fa, *fb, *fc; long *la,*lb,*lc; long long *lla,*llb,*llc; case C_DBL: da = (double*)ptr_a; db = (double*)ptr_b; dc = (double*)ptr_c; for(i=0; i0){ Integer nelem, lob[2], hib[2], nrow, ncol; int i, size=GAsizeofM(atype); nrow = hi[0] -lo[0]+1; ncol = hi[1] -lo[1]+1; nelem = nrow*ncol; lob[0] = lo[1]; lob[1] = lo[0]; hib[0] = hi[1]; hib[1] = hi[0]; /* allocate memory for transposing elements locally */ ptr_tmp = (char *) ga_malloc(nelem, atype, "transpose_tmp"); /* get access to local data */ pnga_access_ptr(g_a, lo, hi, &ptr_a, ld); for(i = 0; i < ncol; i++){ char *ptr = ptr_tmp + i*size; snga_local_transpose(atype, ptr_a, nrow, ncol*size, ptr); ptr_a += ld[0]*size; } pnga_release(g_a, lo, hi); pnga_put(g_b, lob, hib, ptr_tmp ,&ncol); ga_free(ptr_tmp); } } else { Integer idx; Integer blocks[MAXDIM], block_dims[MAXDIM]; Integer nelem, lob[2], hib[2], nrow, ncol; int i, size=GAsizeofM(atype); /* allocate memory for transposing elements locally */ pnga_get_block_info(g_a, blocks, block_dims); /* Simple block-cyclic data distribution */ nelem = block_dims[0]*block_dims[1]; ptr_tmp = (char *) ga_malloc(nelem, atype, "transpose_tmp"); if (!pnga_uses_proc_grid(g_a)) { for (idx = me; idx < num_blocks_a; idx += nproc) { pnga_distribution(g_a, idx, lo, hi); pnga_access_block_ptr(g_a, idx, &ptr_a, ld); nrow = hi[0] -lo[0]+1; ncol = hi[1] -lo[1]+1; nelem = nrow*ncol; lob[0] = lo[1]; lob[1] = lo[0]; hib[0] = hi[1]; hib[1] = hi[0]; for(i = 0; i < ncol; i++){ char *ptr = ptr_tmp + i*size; snga_local_transpose(atype, ptr_a, nrow, ncol*size, ptr); ptr_a += ld[0]*size; } pnga_put(g_b, lob, hib, ptr_tmp ,&ncol); pnga_release_update_block(g_a, idx); } } else { /* Uses scalapack block-cyclic data distribution */ Integer chk; Integer proc_index[MAXDIM], index[MAXDIM]; Integer topology[MAXDIM], ichk; pnga_get_proc_index(g_a, me, proc_index); pnga_get_proc_index(g_a, me, index); pnga_get_block_info(g_a, blocks, block_dims); pnga_get_proc_grid(g_a, topology); /* Verify that processor has data */ ichk = 1; for (i=0; i= blocks[i]) { ichk = 0; } } if (ichk) { pnga_access_block_grid_ptr(g_a, index, &ptr_a, ld); while (index[andim-1] < blocks[andim-1]) { /* find bounding coordinates of block */ chk = 1; for (i = 0; i < andim; i++) { lo[i] = index[i]*block_dims[i]+1; hi[i] = (index[i] + 1)*block_dims[i]; if (hi[i] > adims[i]) hi[i] = adims[i]; if (hi[i] < lo[i]) chk = 0; } if (chk) { pnga_access_block_grid_ptr(g_a, index, &ptr_a, ld); nrow = hi[0] -lo[0]+1; ncol = hi[1] -lo[1]+1; nelem = nrow*ncol; lob[0] = lo[1]; lob[1] = lo[0]; hib[0] = hi[1]; hib[1] = hi[0]; for(i = 0; i < ncol; i++){ char *ptr = ptr_tmp + i*size; snga_local_transpose(atype, ptr_a, nrow, block_dims[0]*size, ptr); ptr_a += ld[0]*size; } pnga_put(g_b, lob, hib, ptr_tmp ,&block_dims[0]); pnga_release_update_block_grid(g_a, index); } /* increment index to get next block on processor */ index[0] += topology[0]; for (i = 0; i < andim; i++) { if (index[i] >= blocks[i] && i #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #include "message.h" #include "ga-papi.h" #include "ga-wapi.h" #define auxi_median(a,b,c,m) \ { \ if ((c < a) && (a < b)) m = a; \ else if ((a <= c) && (c <= b)) m = c; \ else m = b; \ } #define median(a,b,c,m) \ { \ if(a == b) m = a; \ else if(a < b) auxi_median(a, b, c, m) \ else auxi_median(b, a, c, m) \ } #define auxi_median_dcpl(na, nb, nc, za, zb, zc, zm) \ { \ if ((nc < na) && (na < nb)) zm = za; \ else if ((na <= nc) && (nc <= nb)) zm = zc; \ else zm = zb; \ } #define median_dcpl(na, nb, nc, za, zb, zc, zm) \ { \ if (na == nb) zm = za; \ else if (na < nb) auxi_median_dcpl (na, nb, nc, za, zb, zc, zm) \ else auxi_median_dcpl (nb, na, nc, zb, za, zc, zm) \ } #define auxi_median_scpl(na, nb, nc, ca, cb, cc, cm) \ { \ if ((nc < na) && (na < nb)) cm = ca; \ else if ((na <= nc) && (nc <= nb)) cm = cc; \ else cm = cb; \ } #define median_scpl(na, nb, nc, ca, cb, cc, cm) \ { \ if (na == nb) cm = ca; \ else if (na < nb) auxi_median_scpl (na, nb, nc, ca, cb, cc, cm) \ else auxi_median_scpl (nb, na, nc, cb, ca, cc, cm) \ } /*\ Utility function to find median values of patch \*/ static void sgai_median_patch_values(Integer type, Integer ndim, Integer *loA, Integer *hiA, Integer *ldA, void *A_ptr, void *B_ptr, void *C_ptr, void *M_ptr, Integer offset) { Integer bvalue[MAXDIM], bunit[MAXDIM], baseldA[MAXDIM]; Integer idx, n1dim; Integer i, j; double na, nb, nc; /*norm of a, norm of b, norm of c */ int ia, ib, ic, im; float fa, fb, fc, fm; double da, db, dc, dm; long la, lb, lc, lm; DoubleComplex za, zb, zc, zm; SingleComplex ca, cb, cc, cm; /* number of n-element of the first dimension */ n1dim = 1; for (i = 1; i < ndim; i++) n1dim *= (hiA[i] - loA[i] + 1); /* calculate the destination indices */ bvalue[0] = 0; bvalue[1] = 0; bunit[0] = 1; bunit[1] = 1; /* baseldA[0] = ldA[0] * baseldA[1] = ldA[0] * ldA[1] * baseldA[2] = ldA[0] * ldA[1] * ldA[2] ..... */ baseldA[0] = ldA[0]; baseldA[1] = baseldA[0] * ldA[1]; for (i = 2; i < ndim; i++) { bvalue[i] = 0; bunit[i] = bunit[i - 1] * (hiA[i - 1] - loA[i - 1] + 1); baseldA[i] = baseldA[i - 1] * ldA[i]; } switch(type) { case C_DBL: A_ptr = (void*)((double*)(A_ptr) + offset); B_ptr = (void*)((double*)(B_ptr) + offset); C_ptr = (void*)((double*)(C_ptr) + offset); M_ptr = (void*)((double*)(M_ptr) + offset); break; case C_INT: A_ptr = (void*)((int*)(A_ptr) + offset); B_ptr = (void*)((int*)(B_ptr) + offset); C_ptr = (void*)((int*)(C_ptr) + offset); M_ptr = (void*)((int*)(M_ptr) + offset); break; case C_DCPL: A_ptr = (void*)((DoubleComplex*)(A_ptr) + offset); B_ptr = (void*)((DoubleComplex*)(B_ptr) + offset); C_ptr = (void*)((DoubleComplex*)(C_ptr) + offset); M_ptr = (void*)((DoubleComplex*)(M_ptr) + offset); break; case C_SCPL: A_ptr = (void*)((SingleComplex*)(A_ptr) + offset); B_ptr = (void*)((SingleComplex*)(B_ptr) + offset); C_ptr = (void*)((SingleComplex*)(C_ptr) + offset); M_ptr = (void*)((SingleComplex*)(M_ptr) + offset); break; case C_FLOAT: A_ptr = (void*)((float*)(A_ptr) + offset); B_ptr = (void*)((float*)(B_ptr) + offset); C_ptr = (void*)((float*)(C_ptr) + offset); M_ptr = (void*)((float*)(M_ptr) + offset); break; case C_LONG: A_ptr = (void*)((long*)(A_ptr) + offset); B_ptr = (void*)((long*)(B_ptr) + offset); C_ptr = (void*)((long*)(C_ptr) + offset); M_ptr = (void*)((long*)(M_ptr) + offset); break; case C_LONGLONG: A_ptr = (void*)((long long*)(A_ptr) + offset); B_ptr = (void*)((long long*)(B_ptr) + offset); C_ptr = (void*)((long long*)(C_ptr) + offset); M_ptr = (void*)((long long*)(M_ptr) + offset); break; default: break; } /*compute elementwise median */ switch (type) { case C_INT: for (i = 0; i < n1dim; i++) { idx = 0; for (j = 1; j < ndim; j++) { idx += bvalue[j] * baseldA[j - 1]; if (((i + 1) % bunit[j]) == 0) bvalue[j]++; if (bvalue[j] > (hiA[j] - loA[j])) bvalue[j] = 0; } for (j = 0; j < (hiA[0] - loA[0] + 1); j++) { ia = ((int *) A_ptr)[idx + j]; ib = ((int *) B_ptr)[idx + j]; ic = ((int *) C_ptr)[idx + j]; median(ia, ib, ic, im); ((int *) M_ptr)[idx + j] = im; } } break; case C_LONG: for (i = 0; i < n1dim; i++) { idx = 0; for (j = 1; j < ndim; j++) { idx += bvalue[j] * baseldA[j - 1]; if (((i + 1) % bunit[j]) == 0) bvalue[j]++; if (bvalue[j] > (hiA[j] - loA[j])) bvalue[j] = 0; } for (j = 0; j < (hiA[0] - loA[0] + 1); j++) { la = ((long *) A_ptr)[idx + j]; lb = ((long *) B_ptr)[idx + j]; lc = ((long *) C_ptr)[idx + j]; median(la, lb, lc, lm); ((long *) M_ptr)[idx + j] = lm; } } break; case C_FLOAT: for (i = 0; i < n1dim; i++) { idx = 0; for (j = 1; j < ndim; j++) { idx += bvalue[j] * baseldA[j - 1]; if (((i + 1) % bunit[j]) == 0) bvalue[j]++; if (bvalue[j] > (hiA[j] - loA[j])) bvalue[j] = 0; } for (j = 0; j < (hiA[0] - loA[0] + 1); j++) { fa = ((float *) A_ptr)[idx + j]; fb = ((float *) B_ptr)[idx + j]; fc = ((float *) C_ptr)[idx + j]; median(fa, fb, fc, fm); ((float *) M_ptr)[idx + j] = fm; } } break; case C_DBL: for (i = 0; i < n1dim; i++) { idx = 0; for (j = 1; j < ndim; j++) { idx += bvalue[j] * baseldA[j - 1]; if (((i + 1) % bunit[j]) == 0) bvalue[j]++; if (bvalue[j] > (hiA[j] - loA[j])) bvalue[j] = 0; } for (j = 0; j < (hiA[0] - loA[0] + 1); j++) { da = ((double *) A_ptr)[idx + j]; db = ((double *) B_ptr)[idx + j]; dc = ((double *) C_ptr)[idx + j]; median(da, db, dc, dm); ((double *) M_ptr)[idx + j] = dm; } } break; case C_DCPL: for (i = 0; i < n1dim; i++) { idx = 0; for (j = 1; j < ndim; j++) { idx += bvalue[j] * baseldA[j - 1]; if (((i + 1) % bunit[j]) == 0) bvalue[j]++; if (bvalue[j] > (hiA[j] - loA[j])) bvalue[j] = 0; } for (j = 0; j < (hiA[0] - loA[0] + 1); j++) { za = ((DoubleComplex *) A_ptr)[idx + j]; zb = ((DoubleComplex *) B_ptr)[idx + j]; zc = ((DoubleComplex *) C_ptr)[idx + j]; na = sqrt ((za.real) * (za.real) + (za.imag) * (za.imag)); nb = sqrt ((zb.real) * (zb.real) + (zb.imag) * (zb.imag)); nc = sqrt ((zc.real) * (zc.real) + (zc.imag) * (zc.imag)); median_dcpl(na, nb, nc, za, zb, zc, zm); ((DoubleComplex *) M_ptr)[idx + j] = zm; } } break; case C_SCPL: for (i = 0; i < n1dim; i++) { idx = 0; for (j = 1; j < ndim; j++) { idx += bvalue[j] * baseldA[j - 1]; if (((i + 1) % bunit[j]) == 0) bvalue[j]++; if (bvalue[j] > (hiA[j] - loA[j])) bvalue[j] = 0; } for (j = 0; j < (hiA[0] - loA[0] + 1); j++) { ca = ((SingleComplex *) A_ptr)[idx + j]; cb = ((SingleComplex *) B_ptr)[idx + j]; cc = ((SingleComplex *) C_ptr)[idx + j]; na = sqrt ((ca.real) * (ca.real) + (ca.imag) * (ca.imag)); nb = sqrt ((cb.real) * (cb.real) + (cb.imag) * (cb.imag)); nc = sqrt ((cc.real) * (cc.real) + (cc.imag) * (cc.imag)); median_scpl(na, nb, nc, ca, cb, cc, cm); ((SingleComplex *) M_ptr)[idx + j] = cm; } } break; default: pnga_error("median: wrong data type", type); } } /*\ median routine \*/ #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_median_patch = pnga_median_patch #endif void pnga_median_patch( g_a, alo, ahi, g_b, blo, bhi, g_c, clo, chi, g_m, mlo, mhi) Integer g_a, *alo, *ahi; /* patch of g_a */ Integer g_b, *blo, *bhi; /* patch of g_b */ Integer g_c, *clo, *chi; /* patch of g_c */ Integer g_m, *mlo, *mhi; /* patch of g_m */ { Integer i, j; Integer atype, btype, andim, adims[MAXDIM], bndim, bdims[MAXDIM]; Integer ctype, mtype, cndim, cdims[MAXDIM], mndim, mdims[MAXDIM]; Integer loA[MAXDIM], hiA[MAXDIM], ldA[MAXDIM]; Integer loB[MAXDIM], hiB[MAXDIM], ldB[MAXDIM]; Integer loC[MAXDIM], hiC[MAXDIM], ldC[MAXDIM]; Integer loM[MAXDIM], hiM[MAXDIM], ldM[MAXDIM]; Integer g_A = g_a, g_B = g_b; Integer g_C = g_c, g_M = g_m; void *A_ptr, *B_ptr; void *C_ptr, *M_ptr; Integer offset; Integer atotal, btotal; Integer ctotal, mtotal; Integer me = pnga_nodeid (), a_temp_created = 0, b_temp_created = 0, c_temp_created = 0; Integer type = GA_TYPE_GSM, compatible; char *tempname = "temp", transp = 'n'; /*no transpose */ Integer num_blocks_a, num_blocks_b, num_blocks_c, num_blocks_m; int local_sync_begin,local_sync_end; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); GA_PUSH_NAME ("pnga_median_patch"); pnga_inquire (g_a, &atype, &andim, adims); pnga_inquire (g_b, &btype, &bndim, bdims); pnga_inquire (g_c, &ctype, &cndim, cdims); pnga_inquire (g_m, &mtype, &mndim, mdims); /* I have to inquire the data type again since nga_inquire and * nga_inquire_internal_ treat data type differently */ pnga_inquire(g_m, &type, &mndim, mdims); if (mtype != atype) pnga_error(" pnga_median_patch:type mismatch ", 0L); if (mtype != btype) pnga_error(" pnga_median_patch:type mismatch ", 0L); if (mtype != ctype) pnga_error(" pnga_median_patch:type mismatch ", 0L); /* check if patch indices and g_a dims match */ for (i = 0; i < andim; i++) if (alo[i] <= 0 || ahi[i] > adims[i]) { pnga_error("pnga_median_patch: g_a indices out of range ", g_a); } for (i = 0; i < bndim; i++) if (blo[i] <= 0 || bhi[i] > bdims[i]) { pnga_error("pnga_median_patch:g_b indices out of range ", g_b); } for (i = 0; i < cndim; i++) if (clo[i] <= 0 || chi[i] > cdims[i]) { pnga_error("pnga_median_patch:g_c indices out of range ", g_c); } for (i = 0; i < mndim; i++) if (mlo[i] <= 0 || mhi[i] > mdims[i]) { pnga_error("pnga_median_patch:g_m indices out of range ", g_m); } /* check if numbers of elements in two patches match each other */ atotal = 1; for (i = 0; i < andim; i++) atotal *= (ahi[i] - alo[i] + 1); btotal = 1; for (i = 0; i < bndim; i++) btotal *= (bhi[i] - blo[i] + 1); ctotal = 1; for (i = 0; i < cndim; i++) ctotal *= (chi[i] - clo[i] + 1); mtotal = 1; for (i = 0; i < mndim; i++) mtotal *= (mhi[i] - mlo[i] + 1); if (mtotal != atotal) pnga_error("pnga_median_patch: capacities of patches do not match ", 0L); if (mtotal != btotal) pnga_error("pnga_median_patch: capacities of patches do not match ", 0L); if (mtotal != ctotal) pnga_error("pnga_median_patch: capacities of patches do not match ", 0L); num_blocks_a = pnga_total_blocks(g_a); num_blocks_b = pnga_total_blocks(g_b); num_blocks_c = pnga_total_blocks(g_c); num_blocks_m = pnga_total_blocks(g_m); if (num_blocks_a < 0 && num_blocks_b < 0 && num_blocks_c < 0 && num_blocks_m < 0) { /* find out coordinates of patches of g_A, g_B, g_C, and g_M that I own */ pnga_distribution (g_A, me, loA, hiA); pnga_distribution (g_B, me, loB, hiB); pnga_distribution (g_C, me, loC, hiC); pnga_distribution (g_M, me, loM, hiM); if (!pnga_comp_patch (andim, loA, hiA, mndim, loM, hiM)) compatible = 1; else compatible = 0; pnga_gop(pnga_type_f2c(MT_F_INT), &compatible, 1, "*"); if (!compatible) { /* either patches or distributions do not match: * - create a temp array that matches distribution of g_a * - copy & reshape patch of g_b into g_B */ if (!pnga_duplicate(g_m, &g_A, tempname)) pnga_error("pnga_median_patch:duplicate failed", 0L); pnga_copy_patch(&transp, g_a, alo, ahi, g_A, mlo, mhi); andim = mndim; a_temp_created = 1; pnga_distribution (g_A, me, loA, hiA); } if (!pnga_comp_patch (bndim, loB, hiB, mndim, loM, hiM)) compatible = 1; else compatible = 0; pnga_gop(pnga_type_f2c(MT_F_INT), &compatible, 1, "*"); if (!compatible) { /* either patches or distributions do not match: * - create a temp array that matches distribution of g_a * - copy & reshape patch of g_c into g_C */ if (!pnga_duplicate(g_m, &g_B, tempname)) pnga_error("pnga_median_patch:duplicate failed", 0L); pnga_copy_patch(&transp, g_b, blo, bhi, g_B, mlo, mhi); bndim = mndim; b_temp_created = 1; pnga_distribution (g_B, me, loB, hiB); } if (!pnga_comp_patch (cndim, loC, hiC, mndim, loM, hiM)) compatible = 1; else compatible = 0; pnga_gop(pnga_type_f2c(MT_F_INT), &compatible, 1, "*"); if (!compatible) { /* either patches or distributions do not match: * - create a temp array that matches distribution of g_a * - copy & reshape patch of g_m into g_M */ if (!pnga_duplicate(g_m, &g_C, tempname)) pnga_error("pnga_median_patch:duplicate failed", 0L); /*no need to copy g_m since it is the output matrix. */ cndim = mndim; c_temp_created = 1; pnga_copy_patch(&transp, g_c, clo, chi, g_C, mlo, mhi); pnga_distribution (g_C, me, loC, hiC); } if (!pnga_comp_patch (mndim, loM, hiM, andim, loA, hiA)) pnga_error(" patches mismatch ", 0); if (!pnga_comp_patch (mndim, loM, hiM, bndim, loB, hiB)) pnga_error(" patches mismatch ", 0); if (!pnga_comp_patch (mndim, loM, hiM, cndim, loC, hiC)) pnga_error(" patches mismatch ", 0); /* A[83:125,1:1] <==> B[83:125] */ if (mndim > andim) mndim = andim; /* need more work */ if (mndim > bndim) mndim = bndim; /* need more work */ if (mndim > cndim) mndim = cndim; /* need more work */ /* determine subsets of my patches to access */ if (pnga_patch_intersect (mlo, mhi, loM, hiM, mndim)) { offset = 0; pnga_access_ptr (g_A, loM, hiM, &A_ptr, ldA); pnga_access_ptr (g_B, loM, hiM, &B_ptr, ldB); pnga_access_ptr (g_C, loM, hiM, &C_ptr, ldC); pnga_access_ptr (g_M, loM, hiM, &M_ptr, ldM); sgai_median_patch_values(type, mndim, loM, hiM, ldM, A_ptr, B_ptr, C_ptr, M_ptr, offset); /* release access to the data */ pnga_release (g_A, loM, hiM); pnga_release (g_B, loM, hiM); pnga_release (g_C, loM, hiM); pnga_release_update (g_M, loM, hiM); } } else { /* create copies of A, B, and C that are identically distributed as M */ if (!pnga_duplicate(g_m, &g_A, tempname)) pnga_error("ga_add_patch: dup failed", 0L); pnga_copy_patch(&transp, g_a, alo, ahi, g_A, mlo, mhi); andim = mndim; a_temp_created = 1; if (!pnga_duplicate(g_m, &g_B, tempname)) pnga_error("ga_add_patch: dup failed", 0L); pnga_copy_patch(&transp, g_b, blo, bhi, g_B, mlo, mhi); bndim = mndim; b_temp_created = 1; if (!pnga_duplicate(g_m, &g_C, tempname)) pnga_error("ga_add_patch: dup failed", 0L); pnga_copy_patch(&transp, g_c, clo, chi, g_C, mlo, mhi); cndim = mndim; c_temp_created = 1; /* M is normally distributed so just get the mean using standard approach */ if (num_blocks_m < 0) { offset = 0; pnga_distribution(g_m, me, loM, hiM); if (pnga_patch_intersect (mlo, mhi, loM, hiM, mndim)) { pnga_access_ptr (g_A, loM, hiM, &A_ptr, ldA); pnga_access_ptr (g_B, loM, hiM, &B_ptr, ldB); pnga_access_ptr (g_C, loM, hiM, &C_ptr, ldC); pnga_access_ptr (g_M, loM, hiM, &M_ptr, ldM); sgai_median_patch_values(type, mndim, loM, hiM, ldM, A_ptr, B_ptr, C_ptr, M_ptr, offset); /* release access to the data */ pnga_release (g_A, loM, hiM); pnga_release (g_B, loM, hiM); pnga_release (g_C, loM, hiM); pnga_release_update (g_M, loM, hiM); } } else { Integer idx, lod[MAXDIM]/*, hid[MAXDIM]*/; Integer jtot, last, nproc; /* Simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(g_m)) { nproc = pnga_nnodes(); for (idx = me; idx < num_blocks_m; idx += nproc) { pnga_distribution(g_m, idx, loM, hiM); /* make temporary copies of loM and hiM since pnga_patch_intersect destroys original versions */ for (j=0; j mdims[i]) hiM[i] = mdims[i]; /*if (hiM[i] < loM[i]) chk = 0;*/ } /* make temporary copies of loC and hiC since pnga_patch_intersect destroys original versions */ for (j=0; j= blocks[i] && i 0 && jhiA > 0) { /* lo[0] = iloA; */ /* lo[1] = jloA; */ /* hi[0] = ihiA; */ /* hi[1] = jhiA; */ switch (type) { int *pi; double *pd; long *pl; float *pf; DoubleComplex *pz; SingleComplex *pc; case C_INT: pi = (int *) ptr; for (i = 0; i < ihiA - iloA + 1; i++) for (j = 0; j < jhiA - jloA + 1; j++) isum[iloA + i - 1] += GA_ABS (pi[j * ld + i]); break; case C_LONG: pl = (long *) ptr; for (i = 0; i < ihiA - iloA + 1; i++) for (j = 0; j < jhiA - jloA + 1; j++) lsum[iloA + i - 1] += GA_ABS (pl[j * ld + i]); break; case C_DCPL: pz = (DoubleComplex *) ptr; for (i = 0; i < ihiA - iloA + 1; i++) for (j = 0; j < jhiA - jloA + 1; j++) { DoubleComplex zval = pz[j * ld + i]; double temp = sqrt (zval.real * zval.real + zval.imag * zval.imag); (zsum[iloA + i - 1]).real += temp; } break; case C_SCPL: pc = (SingleComplex *) ptr; for (i = 0; i < ihiA - iloA + 1; i++) for (j = 0; j < jhiA - jloA + 1; j++) { SingleComplex cval = pc[j * ld + i]; float temp = sqrt (cval.real * cval.real + cval.imag * cval.imag); (csum[iloA + i - 1]).real += temp; } break; case C_FLOAT: pf = (float *) ptr; for (i = 0; i < ihiA - iloA + 1; i++) for (j = 0; j < jhiA - jloA + 1; j++) fsum[iloA + i - 1] += GA_ABS (pf[j * ld + i]); break; case C_DBL: pd = (double *) ptr; for (i = 0; i < ihiA - iloA + 1; i++) for (j = 0; j < jhiA - jloA + 1; j++) dsum[iloA + i - 1] += GA_ABS (pd[j * ld + i]); break; default: pnga_error("sgai_norm_infinity_block: wrong data type ", type); } } } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_norm_infinity = pnga_norm_infinity #endif void pnga_norm_infinity(Integer g_a, double *nm) { Integer dim1/*, dim2*/, type, size, nelem; Integer me = pnga_nodeid (), i, j, nproc = pnga_nnodes(); Integer ndim, dims[MAXDIM], lo[2], hi[2], ld; Integer num_blocks_a; int local_sync_begin,local_sync_end; int imax, *isum = NULL; long lmax, *lsum = NULL; double dmax, zmax, *dsum = NULL; float fmax, cmax,*fsum = NULL; DoubleComplex *zsum = NULL; SingleComplex *csum = NULL; void *buf = NULL; /*temporary buffer */ void *ptr = NULL; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); pnga_check_handle (g_a, "ga_norm_infinity_"); GA_PUSH_NAME ("ga_norm_infinity_"); /* pnga_inquire (g_a, &type, &dim1, &dim2); */ pnga_inquire (g_a, &type, &ndim, dims); dim1 = dims[0]; if(ndim<=0) pnga_error("ga_norm_infinity: wrong dimension", ndim); /* else if(ndim == 1) dim2 = 1; else if(ndim==2) dim2 = dims[1]; */ else if (ndim >= 3) pnga_error("ga_norm_infinity: wrong dimension", ndim); /*allocate a temporary buffer of size equal to the number of rows */ size = GAsizeof (type); nelem = dim1; buf = malloc (nelem * size); if (buf == NULL) pnga_error("ga_norm_infinity_: no more memory for the buffer.\n", 0); /*zero the buffer */ memset (buf, 0, nelem * size); switch (type) { case C_INT: isum = (int *) buf; break; case C_LONG: lsum = (long *) buf; break; case C_FLOAT: fsum = (float *) buf; break; case C_DBL: dsum = (double *) buf; break; case C_DCPL: zsum = (DoubleComplex *) buf; break; case C_SCPL: csum = (SingleComplex *) buf; break; default: pnga_error("ga_norm_infinity_: wrong data type:", type); } num_blocks_a = pnga_total_blocks(g_a); if (num_blocks_a < 0) { pnga_distribution(g_a, me, lo, hi); pnga_access_ptr(g_a, lo, hi, &ptr, &ld); sgai_norm_infinity_block(g_a, ptr, lo, hi, ld, type, ndim, dims, buf); pnga_release_update(g_a, lo, hi); } else { Integer idx; /* Simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(g_a)) { for (idx = me; idx < num_blocks_a; idx += nproc) { pnga_distribution(g_a, idx, lo, hi); pnga_access_block_ptr(g_a, idx, &ptr, &ld); sgai_norm_infinity_block(g_a, ptr, lo, hi, ld, type, ndim, dims, buf); pnga_release_update_block(g_a, idx); } } else { /* Uses scalapack block-cyclic data distribution */ Integer chk; Integer proc_index[MAXDIM], index[MAXDIM]; Integer topology[MAXDIM]; Integer blocks[MAXDIM], block_dims[MAXDIM]; pnga_get_proc_index(g_a, me, proc_index); pnga_get_proc_index(g_a, me, index); pnga_get_block_info(g_a, blocks, block_dims); pnga_get_proc_grid(g_a, topology); while (index[ndim-1] < blocks[ndim-1]) { /* find bounding coordinates of block */ chk = 1; for (i = 0; i < ndim; i++) { lo[i] = index[i]*block_dims[i]+1; hi[i] = (index[i] + 1)*block_dims[i]; if (hi[i] > dims[i]) hi[i] = dims[i]; if (hi[i] < lo[i]) chk = 0; } if (chk) { pnga_access_block_grid_ptr(g_a, index, &ptr, &ld); sgai_norm_infinity_block(g_a, ptr, lo, hi, ld, type, ndim, dims, buf); pnga_release_update_block_grid(g_a, index); } /* increment index to get next block on processor */ index[0] += topology[0]; for (i = 0; i < ndim; i++) { if (index[i] >= blocks[i] && i 0 && jhiA > 0) { /* lo[0] = iloA; */ /* lo[1] = jloA; */ /* hi[0] = ihiA; */ hi[1] = jhiA; switch (type) { int *pi; double *pd; long *pl; float *pf; DoubleComplex *pz; SingleComplex *pc; case C_INT: pi = (int *) ptr; for (j = 0; j < jhiA - jloA + 1; j++) for (i = 0; i < ihiA - iloA + 1; i++) isum[jloA + j - 1 ] += GA_ABS (pi[j * ld + i]); break; case C_LONG: pl = (long *) ptr; for (j = 0; j < jhiA - jloA + 1; j++) for (i = 0; i < ihiA - iloA + 1; i++) lsum[jloA + j - 1] += GA_ABS (pl[j * ld + i]); break; case C_DCPL: pz = (DoubleComplex *) ptr; for (j = 0; j < jhiA - jloA + 1; j++) for (i = 0; i < ihiA - iloA + 1; i++) { DoubleComplex zval = pz[j * ld + i]; double temp = sqrt (zval.real * zval.real + zval.imag * zval.imag); (zsum[jloA + j - 1 ]).real += temp; } break; case C_SCPL: pc = (SingleComplex *) ptr; for (j = 0; j < jhiA - jloA + 1; j++) for (i = 0; i < ihiA - iloA + 1; i++) { SingleComplex cval = pc[j * ld + i]; float temp = sqrt (cval.real * cval.real + cval.imag * cval.imag); (csum[jloA + j - 1 ]).real += temp; } break; case C_FLOAT: pf = (float *) ptr; for (j = 0; j < jhiA - jloA + 1; j++) for (i = 0; i < ihiA - iloA + 1; i++) fsum[jloA + j - 1 ] += GA_ABS (pf[j * ld + i]); break; case C_DBL: pd = (double *) ptr; for (j = 0; j < jhiA - jloA + 1; j++) for (i = 0; i < ihiA - iloA + 1; i++) dsum[jloA + j - 1 ] += GA_ABS (pd[j * ld + i]); break; default: pnga_error("sgai_norm1_block: wrong data type ", type); } } } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_norm1 = pnga_norm1 #endif void pnga_norm1(Integer g_a, double *nm) { Integer /*dim1=0,*/ dim2=0, type=0, size=0, nelem=0; Integer me = pnga_nodeid (), i, j, nproc = pnga_nnodes(); Integer ndim, dims[MAXDIM], lo[2], hi[2], ld; Integer num_blocks_a; int local_sync_begin,local_sync_end; int imax, *isum = NULL; long lmax, *lsum = NULL; double dmax, zmax, *dsum = NULL; float fmax, cmax, *fsum = NULL; DoubleComplex *zsum = NULL; SingleComplex *csum = NULL; void *buf = NULL; /*temporary buffer */ void *ptr = NULL; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); pnga_check_handle (g_a, "ga_norm1_"); GA_PUSH_NAME ("ga_norm1_"); pnga_inquire (g_a, &type, &ndim, dims); /*dim1 = dims[0];*/ if(ndim<=0) pnga_error("ga_norm1: wrong dimension", ndim); else if(ndim == 1) dim2 = 1; else if(ndim == 2) dim2 = dims[1]; else pnga_error("ga_norm1: wrong dimension", ndim); /*allocate a temporary buffer of size equal to the number of columns */ size = GAsizeof (type); nelem = dim2; buf = malloc (nelem * size); if (buf == NULL) pnga_error("ga_norm1: no more memory for the buffer.\n", 0); /*zero the buffer */ memset (buf, 0, nelem * size); switch (type) { case C_INT: isum = (int *) buf; break; case C_LONG: lsum = (long *) buf; break; case C_FLOAT: fsum = (float *) buf; break; case C_DBL: dsum = (double *) buf; break; case C_DCPL: zsum = (DoubleComplex *) buf; break; case C_SCPL: csum = (SingleComplex *) buf; break; default: pnga_error("ga_norm1_: wrong data type:", type); } num_blocks_a = pnga_total_blocks(g_a); if (num_blocks_a < 0) { pnga_distribution(g_a, me, lo, hi); pnga_access_ptr(g_a, lo, hi, &ptr, &ld); sgai_norm1_block(g_a, ptr, lo, hi, ld, type, ndim, dims, buf); pnga_release_update(g_a, lo, hi); } else { Integer idx; /* Simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(g_a)) { for (idx = me; idx < num_blocks_a; idx += nproc) { pnga_distribution(g_a, idx, lo, hi); pnga_access_block_ptr(g_a, idx, &ptr, &ld); sgai_norm1_block(g_a, ptr, lo, hi, ld, type, ndim, dims, buf); pnga_release_update_block(g_a, idx); } } else { /* Uses scalapack block-cyclic data distribution */ Integer chk; Integer proc_index[MAXDIM], index[MAXDIM]; Integer topology[MAXDIM]; Integer blocks[MAXDIM], block_dims[MAXDIM]; pnga_get_proc_index(g_a, me, proc_index); pnga_get_proc_index(g_a, me, index); pnga_get_block_info(g_a, blocks, block_dims); pnga_get_proc_grid(g_a, topology); while (index[ndim-1] < blocks[ndim-1]) { /* find bounding coordinates of block */ chk = 1; for (i = 0; i < ndim; i++) { lo[i] = index[i]*block_dims[i]+1; hi[i] = (index[i] + 1)*block_dims[i]; if (hi[i] > dims[i]) hi[i] = dims[i]; if (hi[i] < lo[i]) chk = 0; } if (chk) { pnga_access_block_grid_ptr(g_a, index, &ptr, &ld); sgai_norm1_block(g_a, ptr, lo, hi, ld, type, ndim, dims, buf); pnga_release_update_block_grid(g_a, index); } /* increment index to get next block on processor */ index[0] += topology[0]; for (i = 0; i < ndim; i++) { if (index[i] >= blocks[i] && i 0) { lo[0] = GA_MAX (iloA, jloA); lo[1] = GA_MAX (iloA, jloA); hi[0] = GA_MIN (ihiA, jhiA); hi[1] = GA_MIN (ihiA, jhiA); if (hi[0] >= lo[0]) /*make sure the equality symbol is there!!! */ { /* we got a block containing diagonal elements */ /*allocate a buffer for the given vector g_v */ size = GAsizeof (type); vlo = GA_MAX (iloA, jloA); vhi = GA_MIN (ihiA, jhiA); nelem = vhi - vlo + 1; buf = malloc (nelem * size); if (buf == NULL) pnga_error ("ga_get_diag_:failed to allocate memory for the local buffer.", 9999); /* get the vector from the global array g_a, put that in the the local memory buffer buf */ switch (type) { case C_INT: ia = (int *) ptr; ia += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { ((int *) buf)[i] = *ia; ia += ld + 1; } break; case C_LONG: la = (long *) ptr; la += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { ((long *) buf)[i] = *la; la += ld + 1; } break; case C_FLOAT: fa = (float *) ptr; fa += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { ((float *) buf)[i] = *fa; fa += ld + 1; } break; case C_DBL: da = (double *) ptr; da += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { ((double *) buf)[i] = *da; da += ld + 1; } break; case C_DCPL: dca = (DoubleComplex *) ptr; dca += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { (((DoubleComplex *) buf)[i]).real = (*dca).real; (((DoubleComplex *) buf)[i]).imag = (*dca).imag; dca += ld + 1; } break; case C_SCPL: fca = (SingleComplex *) ptr; fca += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { (((SingleComplex *) buf)[i]).real = (*fca).real; (((SingleComplex *) buf)[i]).imag = (*fca).imag; fca += ld + 1; } break; default: pnga_error("get_diagonal_zero: wrong data type:", type); } /* copy the local memory buffer buf to g_v */ pnga_put(g_v, &vlo, &vhi, buf, &vhi); /*free the memory */ free (buf); } } } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_get_diag = pnga_get_diag #endif void pnga_get_diag(Integer g_a, Integer g_v) { Integer vndim, vdims, dim1, dim2, vtype, atype, type; Integer me = pnga_nodeid (), i, nproc = pnga_nnodes(); Integer andim, adims[2]; Integer loA[2], hiA[2], ld; Integer num_blocks_a; int local_sync_begin,local_sync_end; void *ptr; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); pnga_check_handle (g_a, "ga_get_diag_"); pnga_check_handle (g_v, "ga_get_diag_"); GA_PUSH_NAME ("ga_get_diag_"); pnga_inquire (g_a, &atype, &andim, adims); dim1 = adims[0]; dim2 = adims[1]; type = atype; pnga_inquire (g_v, &vtype, &vndim, &vdims); /* Perform some error checking */ if (andim != 2) pnga_error("ga_get_diag: wrong dimension for g_a.", andim); if (vndim != 1) pnga_error("ga_get_diag: wrong dimension for g_v.", vndim); if (vdims != GA_MIN (dim1, dim2)) pnga_error ("ga_get_diag: The size of the first array's diagonal is greater than the size of the second array.", type); if (vtype != atype) { pnga_error ("ga_get_diag: input global arrays do not have the same data type. Global array type =", atype); } num_blocks_a = pnga_total_blocks(g_a); if (num_blocks_a < 0) { pnga_distribution(g_a, me, loA, hiA); pnga_access_ptr(g_a, loA, hiA, &ptr, &ld); sgai_get_diagonal_block(g_a, ptr, g_v, loA, hiA, ld, type); pnga_release_update(g_a, loA, hiA); } else { Integer idx; /* Simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(g_a)) { for (idx = me; idx < num_blocks_a; idx += nproc) { pnga_distribution(g_a, idx, loA, hiA); pnga_access_block_ptr(g_a, idx, &ptr, &ld); sgai_get_diagonal_block(g_a, ptr, g_v, loA, hiA, ld, type); pnga_release_update_block(g_a, idx); } } else { /* Uses scalapack block-cyclic data distribution */ Integer chk; Integer proc_index[MAXDIM], index[MAXDIM]; Integer topology[MAXDIM]; Integer blocks[MAXDIM], block_dims[MAXDIM]; pnga_get_proc_index(g_a, me, proc_index); pnga_get_proc_index(g_a, me, index); pnga_get_block_info(g_a, blocks, block_dims); pnga_get_proc_grid(g_a, topology); while (index[andim-1] < blocks[andim-1]) { /* find bounding coordinates of block */ chk = 1; for (i = 0; i < andim; i++) { loA[i] = index[i]*block_dims[i]+1; hiA[i] = (index[i] + 1)*block_dims[i]; if (hiA[i] > adims[i]) hiA[i] = adims[i]; if (hiA[i] < loA[i]) chk = 0; } if (chk) { pnga_access_block_grid_ptr(g_a, index, &ptr, &ld); sgai_get_diagonal_block(g_a, ptr, g_v, loA, hiA, ld, type); pnga_release_update_block_grid(g_a, index); } /* increment index to get next block on processor */ index[0] += topology[0]; for (i = 0; i < andim; i++) { if (index[i] >= blocks[i] && i 0) { lo[0] = GA_MAX (iloA, jloA); lo[1] = GA_MAX (iloA, jloA); hi[0] = GA_MIN (ihiA, jhiA); hi[1] = GA_MIN (ihiA, jhiA); if (hi[0] >= lo[0]) /*make sure the equality symbol is there!!! */ { /* we got a block containing diagonal elements */ /*allocate a buffer for the given vector g_v */ size = GAsizeof (type); vlo = GA_MAX (iloA, jloA); vhi = GA_MIN (ihiA, jhiA); nelem = vhi - vlo + 1; buf = malloc (nelem * size); if (buf == NULL) pnga_error ("ga_add_diagonal_:failed to allocate memory for the local buffer.", 0); /* get the vector from the global array to the local memory buffer */ pnga_get (g_v, &vlo, &vhi, buf, &vhi); switch (type) { case C_INT: ia = (int *) ptr; ia += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { *ia += ((int *) buf)[i]; ia += ld + 1; } break; case C_LONG: la = (long *) ptr; la += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { *la += ((long *) buf)[i]; la += ld + 1; } break; case C_FLOAT: fa = (float *) ptr; fa += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { *fa += ((float *) buf)[i]; fa += ld + 1; } break; case C_DBL: da = (double *) ptr; da += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { *da += ((double *) buf)[i]; da += ld + 1; } break; case C_DCPL: dca = (DoubleComplex *) ptr; dca += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { (*dca).real += (((DoubleComplex *) buf)[i]).real; (*dca).imag += (((DoubleComplex *) buf)[i]).imag; dca += ld + 1; } break; case C_SCPL: fca = (SingleComplex *) ptr; fca += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { (*fca).real += (((SingleComplex *) buf)[i]).real; (*fca).imag += (((SingleComplex *) buf)[i]).imag; fca += ld + 1; } break; default: pnga_error("ga_add_diagonal_: wrong data type:", type); } /*free the memory */ free (buf); } } } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_add_diagonal = pnga_add_diagonal #endif void pnga_add_diagonal(Integer g_a, Integer g_v) { Integer vndim, vdims, dim1, dim2, vtype, atype, type; Integer me = pnga_nodeid (), i, nproc = pnga_nnodes(); Integer andim, adims[2]; Integer loA[2], hiA[2], ld; Integer num_blocks_a; int local_sync_begin,local_sync_end; void *ptr; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); pnga_check_handle (g_a, "ga_add_diagonal_"); pnga_check_handle (g_v, "ga_add_diagonal_"); GA_PUSH_NAME ("ga_add_diagonal_"); pnga_inquire(g_a, &atype, &andim, adims); dim1 = adims[0]; dim2 = adims[1]; type = atype; pnga_inquire(g_v, &vtype, &vndim, &vdims); /* Perform some error checking */ if (andim != 2) pnga_error("ga_add_diagonal: wrong dimension for g_a.", andim); if (vndim != 1) pnga_error("ga_add_diagonal: wrong dimension for g_v.", vndim); if (vdims != GA_MIN (dim1, dim2)) pnga_error ("ga_add_diagonal: The size of the first array's diagonal is greater than the size of the second array.", type); if (vtype != atype) { pnga_error ("ga_add_diagonal: input global arrays do not have the same data type. Global array type =", atype); } num_blocks_a = pnga_total_blocks(g_a); if (num_blocks_a < 0) { pnga_distribution(g_a, me, loA, hiA); pnga_access_ptr(g_a, loA, hiA, &ptr, &ld); sgai_add_diagonal_block(g_a, ptr, g_v, loA, hiA, ld, type); } else { Integer idx; /* Simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(g_a)) { for (idx = me; idx < num_blocks_a; idx += nproc) { pnga_distribution(g_a, idx, loA, hiA); pnga_access_block_ptr(g_a, idx, &ptr, &ld); sgai_add_diagonal_block(g_a, ptr, g_v, loA, hiA, ld, type); pnga_release_update_block(g_a, idx); } } else { /* Uses scalapack block-cyclic data distribution */ Integer chk; Integer proc_index[MAXDIM], index[MAXDIM]; Integer topology[MAXDIM]; Integer blocks[MAXDIM], block_dims[MAXDIM]; pnga_get_proc_index(g_a, me, proc_index); pnga_get_proc_index(g_a, me, index); pnga_get_block_info(g_a, blocks, block_dims); pnga_get_proc_grid(g_a, topology); while (index[andim-1] < blocks[andim-1]) { /* find bounding coordinates of block */ chk = 1; for (i = 0; i < andim; i++) { loA[i] = index[i]*block_dims[i]+1; hiA[i] = (index[i] + 1)*block_dims[i]; if (hiA[i] > adims[i]) hiA[i] = adims[i]; if (hiA[i] < loA[i]) chk = 0; } if (chk) { pnga_access_block_grid_ptr(g_a, index, &ptr, &ld); sgai_add_diagonal_block(g_a, ptr, g_v, loA, hiA, ld, type); pnga_release_update_block_grid(g_a, index); } /* increment index to get next block on processor */ index[0] += topology[0]; for (i = 0; i < andim; i++) { if (index[i] >= blocks[i] && i 0) { lo[0] = GA_MAX (iloA, jloA); lo[1] = GA_MAX (iloA, jloA); hi[0] = GA_MIN (ihiA, jhiA); hi[1] = GA_MIN (ihiA, jhiA); if (hi[0] >= lo[0]) /*make sure the equality symbol is there!!! */ { /* we got a block containing diagonal elements*/ /*allocate a buffer for the given vector g_v */ size = GAsizeof (type); vlo = GA_MAX (iloA, jloA); vhi = GA_MIN (ihiA, jhiA); nelem = vhi - vlo + 1; buf = malloc (nelem * size); if (buf == NULL) pnga_error ("ga_set_diagonal_:failed to allocate memory for local buffer",0); /* get the vector from the global array to the local memory buffer */ pnga_get (g_v, &vlo, &vhi, buf, &vhi); switch (type) { case C_INT: ia = (int *) ptr; ia += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { *ia = ((int *) buf)[i]; ia += ld + 1; } break; case C_LONG: la = (long *) ptr; la += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { *la = ((long *) buf)[i]; la += ld + 1; } break; case C_FLOAT: fa = (float *) ptr; fa += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { *fa = ((float *) buf)[i]; fa += ld + 1; } break; case C_DBL: da = (double *) ptr; da += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { *da = ((double *) buf)[i]; da += ld + 1; } break; case C_DCPL: dca = (DoubleComplex *) ptr; dca += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { (*dca).real = (((DoubleComplex *) buf)[i]).real; (*dca).imag = (((DoubleComplex *) buf)[i]).imag; dca += ld + 1; } break; case C_SCPL: fca = (SingleComplex *) ptr; fca += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { (*fca).real = (((SingleComplex *) buf)[i]).real; (*fca).imag = (((SingleComplex *) buf)[i]).imag; fca += ld + 1; } break; default: pnga_error("ga_set_diagonal_: wrong data type:", type); } /*free the memory */ free (buf); /* release access to the data */ lo[0] = iloA; lo[1] = jloA; hi[0] = ihiA; hi[1] = jhiA; pnga_release_update (g_a, lo, hi); } } } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_set_diagonal = pnga_set_diagonal #endif void pnga_set_diagonal(Integer g_a, Integer g_v) { Integer vndim, vdims, dim1, dim2, vtype, atype, type; Integer me = pnga_nodeid (), i, nproc = pnga_nnodes(); Integer andim, adims[2]; Integer loA[2], hiA[2], ld; Integer num_blocks_a; int local_sync_begin,local_sync_end; void *ptr; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); pnga_check_handle (g_a, "ga_set_diagonal_"); pnga_check_handle (g_v, "ga_set_diagonal_"); GA_PUSH_NAME ("ga_set_diagonal_"); pnga_inquire (g_a, &atype, &andim, adims); dim1 = adims[0]; dim2 = adims[1]; type = atype; pnga_inquire (g_v, &vtype, &vndim, &vdims); /* Perform some error checking */ if (andim != 2) pnga_error("ga_set_diagonal: wrong dimension for g_a.", andim); if (vndim != 1) pnga_error("ga_set_diagonal: wrong dimension for g_v.", vndim); if (vdims != GA_MIN (dim1, dim2)) pnga_error ("ga_set_diagonal: The size of the first array's diagonal is greater than the size of the second array.", type); if (vtype != atype) { pnga_error ("ga_set_diagonal: input global arrays do not have the same data type. Global array type =", atype); } num_blocks_a = pnga_total_blocks(g_a); if (num_blocks_a < 0) { pnga_distribution(g_a, me, loA, hiA); pnga_access_ptr(g_a, loA, hiA, &ptr, &ld); sgai_set_diagonal_block(g_a, ptr, g_v, loA, hiA, ld, type); pnga_release_update(g_a, loA, hiA); } else { Integer idx; /* Simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(g_a)) { for (idx = me; idx < num_blocks_a; idx += nproc) { pnga_distribution(g_a, idx, loA, hiA); pnga_access_block_ptr(g_a, idx, &ptr, &ld); sgai_set_diagonal_block(g_a, ptr, g_v, loA, hiA, ld, type); pnga_release_update_block(g_a, idx); } } else { /* Uses scalapack block-cyclic data distribution */ Integer chk; Integer proc_index[MAXDIM], index[MAXDIM]; Integer topology[MAXDIM]; Integer blocks[MAXDIM], block_dims[MAXDIM]; pnga_get_proc_index(g_a, me, proc_index); pnga_get_proc_index(g_a, me, index); pnga_get_block_info(g_a, blocks, block_dims); pnga_get_proc_grid(g_a, topology); while (index[andim-1] < blocks[andim-1]) { /* find bounding coordinates of block */ chk = 1; for (i = 0; i < andim; i++) { loA[i] = index[i]*block_dims[i]+1; hiA[i] = (index[i] + 1)*block_dims[i]; if (hiA[i] > adims[i]) hiA[i] = adims[i]; if (hiA[i] < loA[i]) chk = 0; } if (chk) { pnga_access_block_grid_ptr(g_a, index, &ptr, &ld); sgai_set_diagonal_block(g_a, ptr, g_v, loA, hiA, ld, type); pnga_release_update_block_grid(g_a, index); } /* increment index to get next block on processor */ index[0] += topology[0]; for (i = 0; i < andim; i++) { if (index[i] >= blocks[i] && i 0) { lo[0] = GA_MAX (iloA, jloA); lo[1] = GA_MAX (iloA, jloA); hi[0] = GA_MIN (ihiA, jhiA); hi[1] = GA_MIN (ihiA, jhiA); if (hi[0] >= lo[0]) /*make sure the equality sign is there since it is the singleton case */ { /* we got a block containing diagonal elements */ switch (type) { case C_INT: ia = (int *) ptr; ia += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { *ia += *((int *) c); ia += ld + 1; } break; case C_LONG: la = (long *) ptr; la += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { *la += *((long *) c); la += ld + 1; } break; case C_FLOAT: fa = (float *) ptr; fa += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { *fa += *((float *) c); fa += ld + 1; } break; case C_DBL: da = (double *) ptr; da += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { *da += *((double *) c); da += ld + 1; } break; case C_DCPL: dca = (DoubleComplex *) ptr; dca += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { (*dca).real += (*((DoubleComplex *) c)).real; (*dca).imag += (*((DoubleComplex *) c)).imag; dca += ld + 1; } break; case C_SCPL: fca = (SingleComplex *) ptr; fca += ld*(lo[1]-jloA) + lo[0]-iloA; for (i = 0; i < hi[0] - lo[0] + 1; i++) { (*fca).real += (*((SingleComplex *) c)).real; (*fca).imag += (*((SingleComplex *) c)).imag; fca += ld + 1; } break; default: pnga_error("ga_shift_diagonal_: wrong data type:", type); } } } } #if HAVE_SYS_WEAK_ALIAS_PRAGMA # pragma weak wnga_shift_diagonal = pnga_shift_diagonal #endif void pnga_shift_diagonal(Integer g_a, void *c) { Integer loA[2], hiA[2]/*, dim1, dim2*/, ld; Integer andim, adims[2], type, atype; Integer me = pnga_nodeid (), i, nproc = pnga_nnodes(); void *ptr; Integer num_blocks_a; int local_sync_begin,local_sync_end; local_sync_begin = _ga_sync_begin; local_sync_end = _ga_sync_end; _ga_sync_begin = 1; _ga_sync_end=1; /*remove any previous masking*/ if(local_sync_begin)pnga_sync(); pnga_check_handle (g_a, "ga_shift_diagonal_"); GA_PUSH_NAME ("ga_shift_diagonal_"); pnga_inquire (g_a, &atype, &andim, adims); /*dim1 = adims[0];*/ /*dim2 = adims[1];*/ type = atype; if (andim != 2) pnga_error("Dimension must be 2 for shift diagonal operation",andim); num_blocks_a = pnga_total_blocks(g_a); if (num_blocks_a < 0) { pnga_distribution(g_a, me, loA, hiA); pnga_access_ptr(g_a, loA, hiA, &ptr, &ld); sgai_shift_diagonal_block(g_a, ptr, loA, hiA, ld, c, type); pnga_release_update(g_a, loA, hiA); } else { Integer idx; /* Simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(g_a)) { for (idx = me; idx < num_blocks_a; idx += nproc) { pnga_distribution(g_a, idx, loA, hiA); pnga_access_block_ptr(g_a, idx, &ptr, &ld); sgai_shift_diagonal_block(g_a, ptr, loA, hiA, ld, c, type); pnga_release_update_block(g_a, idx); } } else { /* Uses scalapack block-cyclic data distribution */ Integer chk; Integer proc_index[MAXDIM], index[MAXDIM]; Integer topology[MAXDIM]; Integer blocks[MAXDIM], block_dims[MAXDIM]; pnga_get_proc_index(g_a, me, proc_index); pnga_get_proc_index(g_a, me, index); pnga_get_block_info(g_a, blocks, block_dims); pnga_get_proc_grid(g_a, topology); while (index[andim-1] < blocks[andim-1]) { /* find bounding coordinates of block */ chk = 1; for (i = 0; i < andim; i++) { loA[i] = index[i]*block_dims[i]+1; hiA[i] = (index[i] + 1)*block_dims[i]; if (hiA[i] > adims[i]) hiA[i] = adims[i]; if (hiA[i] < loA[i]) chk = 0; } if (chk) { pnga_access_block_grid_ptr(g_a, index, &ptr, &ld); sgai_shift_diagonal_block(g_a, ptr, loA, hiA, ld, c, type); pnga_release_update_block_grid(g_a, index); } /* increment index to get next block on processor */ index[0] += topology[0]; for (i = 0; i < andim; i++) { if (index[i] >= blocks[i] && i 0) { lo[0] = GA_MAX (loA[0], loA[1]); lo[1] = GA_MAX (loA[0], loA[1]); hi[0] = GA_MIN (hiA[0], hiA[1]); hi[1] = GA_MIN (hiA[0], hiA[1]); if (hi[0] >= lo[0]) { /* we got a block containing diagonal elements */ pnga_access_ptr (g_a, lo, hi, &ptr, &ld); sgai_zero_diagonal_block(g_a, ptr, lo, hi, ld, offset, type); /* release access to the data */ pnga_release_update (g_a, lo, hi); } } } else { Integer idx, lld[MAXDIM], offset; Integer jtot, last, j; Integer nproc = pnga_nnodes(); /* Simple block-cyclic data distribution */ if (!pnga_uses_proc_grid(g_a)) { for (idx = me; idx < num_blocks_a; idx += nproc) { pnga_distribution(g_a, idx, loA, hiA); lo[0] = GA_MAX (loA[0], loA[1]); lo[1] = GA_MAX (loA[0], loA[1]); hi[0] = GA_MIN (hiA[0], hiA[1]); hi[1] = GA_MIN (hiA[0], hiA[1]); if (hi[0] >= lo[0]) { pnga_access_block_ptr(g_a, idx, &ptr, lld); /* evaluate offsets for system */ offset = 0; last = andim - 1; jtot = 1; for (j=0; j adims[i]) hiA[i] = adims[i]; /*if (hiA[i] < loA[i]) chk = 0;*/ } lo[0] = GA_MAX (loA[0], loA[1]); lo[1] = GA_MAX (loA[0], loA[1]); hi[0] = GA_MIN (hiA[0], hiA[1]); hi[1] = GA_MIN (hiA[0], hiA[1]); if (hi[0] >= lo[0]) { pnga_access_block_grid_ptr(g_a, index, &ptr, lld); /* evaluate offsets for system */ offset = 0; last = andim - 1; jtot = 1; for (j=0; j= blocks[i] && i 0) { if (hi[0] >= lo[0]) { /*make sure the equality symbol is there!!! */ /* we got a block containing diagonal elements */ Integer myrows = hi[0] - lo[0] + 1; Integer i, j; /*number of rows on the patch is jhiA - jloA + 1 */ vlo =lo[0] ; vhi = hi[0]; /*allocate a buffer for the given vector g_v */ size = GAsizeof (type); buf = malloc (myrows * size); if (buf == NULL) pnga_error ("ga_scale_rows_:failed to allocate memory for the local buffer.", 0); /* get the vector from the global array to the local memory buffer */ pnga_get (g_v, &vlo, &vhi, buf, &vhi); switch (type) { case C_INT: ia = (int *) ptr; for (i = 0; i < hi[0]-lo[0]+1; i++) /*for each row */ for(j=0;j #include #include "gacommon.h" #include "typesf2c.h" #ifdef __cplusplus extern "C" { #endif typedef Integer ga_nbhdl_t; extern void GA_Abs_value(int g_a); extern void GA_Abs_value_patch(int g_a, int *lo, int *hi); extern void GA_Add_constant(int g_a, void* alpha); extern void GA_Add_constant_patch(int g,int *lo,int *hi,void *alpha); extern void GA_Add_diagonal(int g_a, int g_v); extern void GA_Add(void *alpha, int g_a, void* beta, int g_b, int g_c); extern int GA_Allocate(int g_a); extern int GA_Assemble_duplicate(int g_a, char *name, void *ptr); extern void GA_Brdcst(void *buf, int lenbuf, int root); extern SingleComplex GA_Cdot(int g_a, int g_b); extern void GA_Cgop(SingleComplex x[], int n, char *op); extern void GA_Cgemm(char ta, char tb, int m, int n, int k, SingleComplex alpha, int g_a, int g_b, SingleComplex beta, int g_c ); extern void GA_Check_handle(int g_a, char *string); extern int GA_Cluster_nnodes(void); extern int GA_Cluster_nodeid(void); extern int GA_Cluster_nprocs(int x); extern int GA_Cluster_procid(int x, int y); extern int GA_Cluster_proc_nodeid(int proc); extern int GA_Compare_distr(int g_a, int g_b); extern void GA_Copy(int g_a, int g_b); extern int GA_Create_handle(void); extern int GA_Create_mutexes(int number); extern double GA_Ddot(int g_a, int g_b); extern void GA_Destroy(int g_a); extern int GA_Destroy_mutexes(void); extern void GA_Dgemm(char ta, char tb, int m, int n, int k, double alpha, int g_a, int g_b, double beta, int g_c ); extern void GA_Dgop(double x[], int n, char *op); extern void GA_Diag(int g_a, int g_s, int g_v, void *eval); extern void GA_Diag_reuse(int reuse, int g_a, int g_s, int g_v, void *eval); extern void GA_Diag_seq(int g_a, int g_s, int g_v, void *eval); extern void GA_Diag_std(int g_a, int g_v, void *eval); extern void GA_Diag_std_seq(int g_a, int g_v, void *eval); extern int GA_Duplicate(int g_a, char* array_name); extern void GA_Elem_divide(int g_a, int g_b, int g_c); extern void GA_Elem_divide_patch(int g_a,int *alo,int *ahi, int g_b,int *blo,int *bhi,int g_c,int *clo,int *chi); extern void GA_Elem_maximum(int g_a, int g_b, int g_c); extern void GA_Elem_maximum_patch(int g_a,int *alo,int *ahi, int g_b,int *blo,int *bhi,int g_c,int *clo,int *chi); extern void GA_Elem_minimum(int g_a, int g_b, int g_c); extern void GA_Elem_minimum_patch(int g_a,int *alo,int *ahi, int g_b,int *blo,int *bhi,int g_c,int *clo,int *chi); extern void GA_Elem_multiply(int g_a, int g_b, int g_c); extern void GA_Elem_multiply_patch(int g_a,int *alo,int *ahi, int g_b,int *blo,int *bhi,int g_c,int *clo,int *chi); extern void GA_Error(char *str, int code); extern float GA_Fdot(int g_a, int g_b); extern void GA_Fence(void); extern void GA_Fgop(float x[], int n, char *op); extern void GA_Fill(int g_a, void *value); extern void GA_Freemem(void* ptr); extern void GA_Get_block_info(int g_a, int num_blocks[], int block_dims[]); extern int GA_Get_debug(void); extern void GA_Get_diag(int g_a, int g_v); extern int GA_Get_dimension(int g_a); extern void* GA_Getmem(int type, int nelem, int grp_id); extern int GA_Get_pgroup(int g_a); extern int GA_Get_pgroup_size(int grp_id); extern void GA_Get_proc_grid(int g_a, int dims[]); extern void GA_Get_proc_index(int g_a, int iproc, int subscript[]); extern void GA_Gop(int type, void *x, int n, char *op); extern int GA_Has_ghosts(int g_a); extern int GA_Idot(int g_a, int g_b); extern void GA_Igop(int x[], int n, char *op); extern void GA_Init_fence(void); extern void GA_Initialize_args(int *argc, char ***argv); extern void GA_Initialize_ltd(size_t limit); extern void GA_Initialize(void); extern size_t GA_Inquire_memory(void); extern char* GA_Inquire_name(int g_a); extern int GA_Is_mirrored(int g_a); extern void GA_List_nodeid(int *list, int nprocs); extern long GA_Ldot(int g_a, int g_b); extern void GA_Lgop(long x[], int n, char *op); extern long long GA_Lldot(int g_a, int g_b); extern void GA_Llgop(long long x[], int n, char *op); extern int GA_Llt_solve(int g_a, int g_b); extern void GA_Lock(int mutex); extern void GA_Lu_solve(char tran, int g_a, int g_b); extern void GA_Mask_sync(int first, int last); extern void GA_Matmul_patch(char transa, char transb, void* alpha, void *beta, int g_a, int ailo, int aihi, int ajlo, int ajhi, int g_b, int bilo, int bihi, int bjlo, int bjhi, int g_c, int cilo, int cihi, int cjlo, int cjhi); extern void GA_Median(int g_a, int g_b, int g_c, int g_m); extern void GA_Median_patch(int g_a, int *alo, int *ahi, int g_b, int *blo, int *bhi, int g_c, int *clo, int *chi, int g_m, int *mlo, int *mhi); extern size_t GA_Memory_avail(void); extern int GA_Memory_limited(void); extern void GA_Merge_mirrored(int g_a); extern void GA_Nblock(int g_a, int *nblock); extern int GA_Ndim(int g_a); extern int GA_Nnodes(void); extern int GA_Nodeid(void); extern void GA_Norm1(int g_a, double *nm); extern void GA_Norm_infinity(int g_a, double *nm); extern int GA_Pgroup_absolute_id(int pgroup, int pid); extern void GA_Pgroup_brdcst(int grp, void *buf, int lenbuf, int root); extern void GA_Pgroup_cgop(int grp, SingleComplex x[], int n, char *op); extern int GA_Pgroup_create(int *list, int count); extern int GA_Pgroup_destroy(int grp); extern void GA_Pgroup_dgop(int grp, double x[], int n, char *op); extern void GA_Pgroup_fgop(int grp, float x[], int n, char *op); extern int GA_Pgroup_get_default(void); extern int GA_Pgroup_get_mirror(void); extern int GA_Pgroup_get_world(void); extern void GA_Pgroup_igop(int grp, int x[], int n, char *op); extern void GA_Pgroup_lgop(int grp, long x[], int n, char *op); extern void GA_Pgroup_llgop(int grp, long long x[], int n, char *op); extern int GA_Pgroup_nnodes(int grp_id); extern int GA_Pgroup_nodeid(int grp_id); extern void GA_Pgroup_set_default(int p_handle); extern int GA_Pgroup_split(int grp_id, int num_group); extern int GA_Pgroup_split_irreg(int grp_id, int color); extern void GA_Pgroup_sync(int grp_id); extern void GA_Pgroup_zgop(int grp, DoubleComplex x[], int n, char *op); extern void GA_Print_distribution(int g_a); extern void GA_Print_file(FILE *file, int g_a); extern void GA_Print(int g_a); extern void GA_Print_patch(int g_a,int ilo,int ihi,int jlo,int jhi,int pretty); extern void GA_Print_stats(void); extern void GA_Randomize(int g_a, void *value); extern void GA_Recip(int g_a); extern void GA_Recip_patch(int g_a,int *lo, int *hi); extern void GA_Register_stack_memory(void * (*ext_alloc)(size_t, int, char *), void (*ext_free)(void *)); extern void GA_Scale_cols(int g_a, int g_v); extern void GA_Scale(int g_a, void *value); extern void GA_Scale_rows(int g_a, int g_v); extern void GA_Scan_add(int g_a, int g_b, int g_sbit, int lo, int hi, int excl); extern void GA_Scan_copy(int g_a, int g_b, int g_sbit, int lo, int hi); extern void GA_Set_array_name(int g_a, char *name); extern void GA_Set_block_cyclic(int g_a, int dims[]); extern void GA_Set_block_cyclic_proc_grid(int g_a, int block[], int proc_grid[]); extern void GA_Set_chunk(int g_a, int chunk[]); extern void GA_Set_data(int g_a, int ndim, int dims[], int type); extern void GA_Set_debug(int flag); extern void GA_Set_diagonal(int g_a, int g_v); extern void GA_Set_ghost_corner_flag(int g_a, int flag); extern void GA_Set_ghosts(int g_a, int width[]); extern void GA_Set_irreg_distr(int g_a, int map[], int block[]); extern void GA_Set_irreg_flag(int g_a, int flag); extern void GA_Set_memory_limit(size_t limit); extern void GA_Set_pgroup(int g_a, int p_handle); extern void GA_Set_restricted(int g_a, int list[], int size); extern void GA_Set_restricted_range(int g_a, int lo_proc, int hi_proc); extern void GA_Sgemm(char ta, char tb, int m, int n, int k, float alpha, int g_a, int g_b, float beta, int g_c ); extern void GA_Shift_diagonal(int g_a, void *c); extern int GA_Solve(int g_a, int g_b); extern int GA_Spd_invert(int g_a); extern void GA_Step_bound_info(int g_xx, int g_vv, int g_xxll, int g_xxuu, void *boundmin, void *wolfemin, void *boundmax); extern void GA_Step_bound_info_patch(int g_xx, int *xxlo, int *xxhi, int g_vv, int *vvlo, int *vvhi, int g_xxll, int *xxlllo, int *xxllhi, int g_xxuu, int *xxuulo, int *xxuuhi, void *boundmin, void *wolfemin, void *boundmax); extern void GA_Step_max(int g_a, int g_b, void *step); extern void GA_Step_max_patch(int g_a, int *alo, int *ahi, int g_b, int *blo, int *bhi, void *step); extern void GA_Summarize(int verbose); extern void GA_Symmetrize(int g_a); extern void GA_Sync(void); extern void GA_Terminate(void); extern int GA_Total_blocks(int g_a); extern void GA_Transpose(int g_a, int g_b); extern void GA_Unlock(int mutex); extern void GA_Update_ghosts(int g_a); extern int GA_Uses_fapi(void); extern int GA_Uses_ma(void); extern int GA_Uses_proc_grid(int g_a); extern int GA_Valid_handle(int g_a); extern int GA_Verify_handle(int g_a); extern double GA_Wtime(void); extern DoubleComplex GA_Zdot(int g_a, int g_b); extern void GA_Zgop(DoubleComplex x[], int n, char *op); extern void GA_Zero_diagonal(int g_a); extern void GA_Zero(int g_a); extern void GA_Zgemm(char ta, char tb, int m, int n, int k, DoubleComplex alpha, int g_a, int g_b, DoubleComplex beta, int g_c ); extern void NGA_Access_block_grid(int g_a, int index[], void *ptr, int ld[]); extern void NGA_Access_block(int g_a, int idx, void *ptr, int ld[]); extern void NGA_Access_block_segment(int g_a, int proc, void *ptr, int *len); extern void NGA_Access_ghost_element(int g_a, void *ptr, int subscript[], int ld[]); extern void NGA_Access_ghosts(int g_a, int dims[], void *ptr, int ld[]); extern void NGA_Access(int g_a, int lo[], int hi[], void *ptr, int ld[]); extern void NGA_Acc(int g_a, int lo[], int hi[],void* buf,int ld[],void* alpha); extern void NGA_Add_patch(void * alpha, int g_a, int alo[], int ahi[], void * beta, int g_b, int blo[], int bhi[], int g_c, int clo[], int chi[]); extern int NGA_Allocate(int g_a); extern void NGA_Alloc_gatscat_buf(int nelems); extern SingleComplex NGA_Cdot_patch(int g_a, char t_a, int alo[], int ahi[], int g_b, char t_b, int blo[], int bhi[]); extern int NGA_Compare_distr(int g_a, int g_b); extern void NGA_Copy_patch(char trans, int g_a, int alo[], int ahi[], int g_b, int blo[], int bhi[]); extern int NGA_Create_config(int type,int ndim,int dims[], char *name, int chunk[], int p_handle); extern int NGA_Create_ghosts_config(int type,int ndim,int dims[], int width[], char *name, int chunk[], int p_handle); extern int NGA_Create_ghosts(int type,int ndim,int dims[], int width[], char *name, int chunk[]); extern int NGA_Create_ghosts_irreg_config(int type,int ndim,int dims[], int width[], char *name, int nblock[], int map[], int p_handle); extern int NGA_Create_ghosts_irreg(int type,int ndim,int dims[], int width[], char *name, int nblock[], int map[]); extern int NGA_Create(int type,int ndim,int dims[], char *name, int chunk[]); extern int NGA_Create(int type,int ndim,int dims[], char *name, int chunk[]); extern int NGA_Create_irreg_config(int type,int ndim,int dims[],char *name, int block[], int map[], int p_handle); extern int NGA_Create_irreg(int type,int ndim,int dims[],char *name, int block[], int map[]); extern int NGA_Create_handle(void); extern int NGA_Deregister_type(int type); extern void NGA_Destroy(int g_a); extern int NGA_Destroy_mutexes(void); extern double NGA_Ddot_patch(int g_a, char t_a, int alo[], int ahi[], int g_b, char t_b, int blo[], int bhi[]); extern void NGA_Dgop(double x[], int n, char *op); extern void NGA_Distribution(int g_a, int iproc, int lo[], int hi[]); extern int NGA_Duplicate(int g_a, char* array_name); extern void NGA_Error(char *str, int code); extern float NGA_Fdot_patch(int g_a, char t_a, int alo[], int ahi[], int g_b, char t_b, int blo[], int bhi[]); extern void NGA_Fence(void); extern void NGA_Free_gatscat_buf(); extern void NGA_Fill(int g_a, void *value); extern void NGA_Fill_patch(int g_a, int lo[], int hi[], void *val); extern void NGA_Gather(int g_a, void *v, int* subsArray[], int n); extern void NGA_Gather_flat(int g_a, void *v, int subsArray[], int n); extern void NGA_Get(int g_a, int lo[], int hi[], void* buf, int ld[]); extern void NGA_Get_block_info(int g_a, int num_blocks[], int block_dims[]); extern int NGA_Get_debug(void); extern int NGA_Get_dimension(int g_a); extern void NGA_Get_field(int g_a, int *lo, int *hi, int foff, int fsize, void *buf, int *ld); extern void NGA_Get_ghost_block(int g_a, int lo[], int hi[], void *buf, int ld[]); extern int NGA_Get_pgroup(int g_a); extern int NGA_Get_pgroup_size(int grp_id); extern void NGA_Get_proc_grid(int g_a, int dims[]); extern void NGA_Get_proc_index(int g_a, int iproc, int subscript[]); extern int NGA_Has_ghosts(int g_a); extern int NGA_Idot_patch(int g_a, char t_a, int alo[], int ahi[], int g_b, char t_b, int blo[], int bhi[]); extern void NGA_Igop(int x[], int n, char *op); extern void NGA_Init_fence(void); extern void NGA_Initialize(void); extern void NGA_Initialize_ltd(size_t limit); extern void NGA_Inquire(int g_a, int *type, int *ndim, int dims[]); extern size_t NGA_Inquire_memory(void); extern char* NGA_Inquire_name(int g_a); extern int NGA_Is_mirrored(int g_a); extern void NGA_List_nodeid(int *list, int nprocs); extern long NGA_Ldot_patch(int g_a, char t_a, int alo[], int ahi[], int g_b, char t_b, int blo[], int bhi[]); extern long long NGA_Lldot_patch(int g_a, char t_a, int alo[], int ahi[], int g_b, char t_b, int blo[], int bhi[]); extern int NGA_Locate(int g_a, int subscript[]); extern int NGA_Locate_num_blocks(int g_a, int lo[], int hi[]); extern int NGA_Locate_nnodes(int g_a, int lo[], int hi[]); extern int NGA_Locate_region(int g_a,int lo[],int hi[],int map[],int procs[]); extern void NGA_Lock(int mutex); extern void NGA_Mask_sync(int first, int last); extern void NGA_Matmul_patch(char transa, char transb, void* alpha, void *beta, int g_a, int alo[], int ahi[], int g_b, int blo[], int bhi[], int g_c, int clo[], int chi[]) ; extern size_t NGA_Memory_avail(void); extern int NGA_Memory_limited(void); extern void NGA_Merge_distr_patch(int g_a, int alo[], int ahi[], int g_b, int blo[], int bhi[]); extern void NGA_Merge_mirrored(int g_a); extern void NGA_Nblock(int g_a, int *nblock); extern void NGA_NbAcc(int g_a,int lo[], int hi[],void* buf,int ld[],void* alpha, ga_nbhdl_t* nbhandle); extern void NGA_NbGet_ghost_dir(int g_a, int mask[], ga_nbhdl_t* handle); extern void NGA_NbGet(int g_a, int lo[], int hi[], void* buf, int ld[], ga_nbhdl_t* nbhandle); extern void NGA_Nbget_field(int g_a, int *lo, int *hi, int foff, int fsize,void *buf, int *ld, ga_nbhdl_t *nbhandle); extern void NGA_Nbput_field(int g_a, int *lo, int *hi, int foff, int fsize, void *buf, int *ld, ga_nbhdl_t *nbhandle); extern void NGA_NbPut(int g_a, int lo[], int hi[], void* buf, int ld[], ga_nbhdl_t* nbhandle); extern int NGA_NbTest(ga_nbhdl_t* nbhandle); extern void NGA_NbWait(ga_nbhdl_t* nbhandle); extern int NGA_Ndim(int g_a); extern int NGA_Nnodes(void); extern int NGA_Nodeid(void); extern void NGA_Periodic_acc(int g_a, int lo[], int hi[],void* buf,int ld[],void* alpha); extern void NGA_Periodic_get(int g_a, int lo[], int hi[], void* buf, int ld[]); extern void NGA_Periodic_put(int g_a, int lo[], int hi[], void* buf, int ld[]); extern int NGA_Pgroup_absolute_id(int pgroup, int pid); extern int NGA_Pgroup_create(int *list, int count); extern int NGA_Pgroup_destroy(int grp); extern int NGA_Pgroup_get_default(void); extern int NGA_Pgroup_get_mirror(void); extern int NGA_Pgroup_get_world(void); extern int NGA_Pgroup_nnodes(int grp_id); extern int NGA_Pgroup_nodeid(int grp_id); extern void NGA_Pgroup_set_default(int p_handle); extern int NGA_Pgroup_split(int grp_id, int num_group); extern int NGA_Pgroup_split_irreg(int grp_id, int color); extern void NGA_Pgroup_sync(int grp_id); extern void NGA_Print_patch(int g_a, int lo[], int hi[], int pretty); extern void NGA_Proc_topology(int g_a, int proc, int coord[]); extern void NGA_Put(int g_a, int lo[], int hi[], void* buf, int ld[]); extern void NGA_Put_field(int g_a, int *lo, int *hi, int foff, int fsize, void *buf, int *ld); extern void NGA_Randomize(int g_a, void *value); extern long NGA_Read_inc(int g_a, int subscript[], long inc); extern int NGA_Register_type(size_t bytes); extern void NGA_Release_block_grid(int g_a, int index[]); extern void NGA_Release_block(int g_a, int idx); extern void NGA_Release_block_segment(int g_a, int idx); extern void NGA_Release_ghost_element(int g_a, int index[]); extern void NGA_Release_ghosts(int g_a); extern void NGA_Release(int g_a, int lo[], int hi[]); extern void NGA_Release_update_block_grid(int g_a, int index[]); extern void NGA_Release_update_block(int g_a, int idx); extern void NGA_Release_update_block_segment(int g_a, int idx); extern void NGA_Release_update_ghost_element(int g_a, int index[]); extern void NGA_Release_update_ghosts(int g_a); extern void NGA_Release_update(int g_a, int lo[], int hi[]); extern void NGA_Scale_patch(int g_a, int lo[], int hi[], void *alpha); extern void NGA_Scatter_acc(int g_a, void *v, int* subsArray[], int n, void *alpha); extern void NGA_Scatter_acc_flat(int g_a, void *v, int subsArray[], int n, void *alpha); extern void NGA_Scatter(int g_a, void *v, int* subsArray[], int n); extern void NGA_Scatter_flat(int g_a, void *v, int subsArray[], int n); extern void NGA_Select_elem(int g_a, char* op, void* val, int *index); extern void NGA_Set_array_name(int g_a, char *name); extern void NGA_Set_block_cyclic(int g_a, int dims[]); extern void NGA_Set_block_cyclic_proc_grid(int g_a, int block[], int proc_grid[]); extern void NGA_Set_chunk(int g_a, int chunk[]); extern void NGA_Set_data(int g_a, int ndim, int dims[], int type); extern void NGA_Set_debug(int flag); extern void NGA_Set_ghosts(int g_a, int width[]); extern void NGA_Set_irreg_distr(int g_a, int map[], int block[]); extern void NGA_Set_irreg_flag(int g_a, int flag); extern void NGA_Set_memory_limit(size_t limit); extern void NGA_Set_pgroup(int g_a, int p_handle); extern void NGA_Set_restricted(int g_a, int list[], int size); extern void NGA_Set_restricted_range(int g_a, int lo_proc, int hi_proc); extern void NGA_Strided_acc(int g_a, int lo[], int hi[], int skip[], void* buf, int ld[], void *alpha); extern void NGA_Strided_get(int g_a, int lo[], int hi[], int skip[], void* buf, int ld[]); extern void NGA_Strided_put(int g_a, int lo[], int hi[], int skip[], void* buf, int ld[]); extern void NGA_Sync(void); extern void NGA_Terminate(void); extern int NGA_Total_blocks(int g_a); extern void NGA_Unlock(int mutex); extern void NGA_Update_ghosts(int g_a); extern int NGA_Update_ghost_dir(int g_a, int dimension, int idir, int flag); extern void NGA_Update_ghosts_nb(int g_a, ga_nbhdl_t *nbhandle); extern int NGA_Uses_ma(void); extern int NGA_Uses_proc_grid(int g_a); extern int NGA_Valid_handle(int g_a); extern int NGA_Verify_handle(int g_a); extern double NGA_Wtime(void); extern DoubleComplex NGA_Zdot_patch(int g_a, char t_a, int alo[], int ahi[], int g_b, char t_b, int blo[], int bhi[]); extern void NGA_Zero(int g_a); extern void NGA_Zero_patch(int g_a, int lo[], int hi[]); /* 64 bit APIs */ extern void GA_Abs_value_patch64(int g_a, int64_t *lo, int64_t *hi); extern void GA_Add_constant_patch64(int g,int64_t *lo,int64_t *hi,void *alpha); extern void GA_Cgemm64(char ta, char tb, int64_t m, int64_t n, int64_t k, SingleComplex alpha, int g_a, int g_b, SingleComplex beta, int g_c ); extern void GA_Dgemm64(char ta, char tb, int64_t m, int64_t n, int64_t k, double alpha, int g_a, int g_b, double beta, int g_c ); extern void GA_Elem_divide_patch64(int g_a, int64_t alo[], int64_t ahi[], int g_b, int64_t blo[], int64_t bhi[], int g_c, int64_t clo[], int64_t chi[]); extern void GA_Elem_maximum_patch64(int g_a,int64_t *alo,int64_t *ahi, int g_b,int64_t *blo,int64_t *bhi, int g_c,int64_t *clo,int64_t *chi); extern void GA_Elem_minimum_patch64(int g_a,int64_t *alo,int64_t *ahi, int g_b,int64_t *blo,int64_t *bhi, int g_c,int64_t *clo,int64_t *chi); extern void GA_Elem_multiply_patch64(int g_a, int64_t alo[], int64_t ahi[], int g_b, int64_t blo[], int64_t bhi[], int g_c, int64_t clo[], int64_t chi[]); extern void GA_Matmul_patch64(char transa, char transb, void* alpha, void *beta, int g_a, int64_t ailo, int64_t aihi, int64_t ajlo, int64_t ajhi, int g_b, int64_t bilo, int64_t bihi, int64_t bjlo, int64_t bjhi, int g_c, int64_t cilo, int64_t cihi, int64_t cjlo, int64_t cjhi); extern void GA_Median_patch64(int g_a, int64_t *alo, int64_t *ahi, int g_b, int64_t *blo, int64_t *bhi, int g_c, int64_t *clo, int64_t *chi, int g_m, int64_t *mlo, int64_t *mhi); extern void GA_Pack64(int g_src, int g_dest, int g_mask, int64_t lo, int64_t hi, int64_t *icount); extern void GA_Pack(int g_src, int g_dest, int g_mask, int lo, int hi, int *icount); extern void GA_Patch_enum64(int g_a, int64_t lo, int64_t hi, void *start, void *inc); extern void GA_Patch_enum(int g_a, int lo, int hi, void *start, void *inc); extern void GA_Recip_patch64(int g_a,int64_t *lo, int64_t *hi); extern void GA_Scan_add64(int g_a, int g_b, int g_sbit, int64_t lo, int64_t hi, int excl); extern void GA_Scan_copy64(int g_a, int g_b, int g_sbit, int64_t lo, int64_t hi); extern void GA_Set_chunk64(int g_a, int64_t chunk[]); extern void GA_Set_data64(int g_a, int ndim, int64_t dims[], int type); extern void GA_Set_ghosts64(int g_a, int64_t width[]); extern void GA_Set_irreg_distr64(int g_a, int64_t map[], int64_t block[]); extern void GA_Sgemm64(char ta, char tb, int64_t m, int64_t n, int64_t k, float alpha, int g_a, int g_b, float beta, int g_c ); extern void GA_Step_bound_info_patch64(int g_xx, int64_t xxlo[], int64_t xxhi[], int g_vv, int64_t vvlo[], int64_t vvhi[], int g_xxll, int64_t xxlllo[], int64_t xxllhi[], int64_t g_xxuu, int64_t xxuulo[], int64_t xxuuhi[], void *boundmin, void *wolfemin, void *boundmax); extern void GA_Step_max_patch64(int g_a, int64_t alo[], int64_t ahi[], int g_b, int64_t blo[], int64_t bhi[], void *step); extern void GA_Unpack64(int g_src, int g_dest, int g_mask, int64_t lo, int64_t hi, int64_t *icount); extern void GA_Unpack(int g_src, int g_dest, int g_mask, int lo, int hi, int *icount); extern void GA_Zgemm64(char ta, char tb, int64_t m, int64_t n, int64_t k, DoubleComplex alpha, int g_a, int g_b, DoubleComplex beta, int g_c ); extern void NGA_Acc64(int g_a, int64_t lo[], int64_t hi[],void* buf,int64_t ld[],void* alpha); extern void NGA_Access64(int g_a, int64_t lo[], int64_t hi[], void *ptr, int64_t ld[]); extern void NGA_Access_block64(int g_a, int64_t idx, void *ptr, int64_t ld[]); extern void NGA_Access_block_grid64(int g_a, int64_t index[], void *ptr, int64_t ld[]); extern void NGA_Access_block_segment64(int g_a, int proc, void *ptr, int64_t *len); extern void NGA_Access_ghost_element64(int g_a, void *ptr, int64_t subscript[], int64_t ld[]); extern void NGA_Access_ghosts64(int g_a, int64_t dims[], void *ptr, int64_t ld[]); extern void NGA_Add_patch64(void * alpha, int g_a, int64_t alo[], int64_t ahi[], void * beta, int g_b, int64_t blo[], int64_t bhi[], int g_c, int64_t clo[], int64_t chi[]); extern SingleComplex NGA_Cdot_patch64(int g_a, char t_a, int64_t alo[], int64_t ahi[], int g_b, char t_b, int64_t blo[], int64_t bhi[]); extern void NGA_Copy_patch64(char trans, int g_a, int64_t alo[], int64_t ahi[], int g_b, int64_t blo[], int64_t bhi[]); extern int NGA_Create64(int type,int ndim,int64_t dims[], char *name, int64_t chunk[]); extern int NGA_Create_config64(int type,int ndim,int64_t dims[], char *name, int64_t chunk[], int p_handle); extern int NGA_Create_ghosts64(int type,int ndim,int64_t dims[], int64_t width[], char *name, int64_t chunk[]); extern int NGA_Create_ghosts_config64(int type,int ndim,int64_t dims[], int64_t width[], char *name, int64_t chunk[], int p_handle); extern int NGA_Create_ghosts_irreg64(int type,int ndim,int64_t dims[], int64_t width[], char *name, int64_t nblock[], int64_t map[]); extern int NGA_Create_ghosts_irreg_config64(int type,int ndim,int64_t dims[], int64_t width[], char *name, int64_t nblock[], int64_t map[], int p_handle); extern int NGA_Create_irreg64(int type,int ndim,int64_t dims[],char *name, int64_t block[], int64_t map[]); extern int NGA_Create_irreg_config64(int type,int ndim,int64_t dims[],char *name, int64_t block[], int64_t map[], int p_handle); extern double NGA_Ddot_patch64(int g_a, char t_a, int64_t alo[], int64_t ahi[], int g_b, char t_b, int64_t blo[], int64_t bhi[]); extern void NGA_Distribution64(int g_a, int iproc, int64_t lo[], int64_t hi[]); extern float NGA_Fdot_patch64(int g_a, char t_a, int64_t alo[], int64_t ahi[], int g_b, char t_b, int64_t blo[], int64_t bhi[]); extern void NGA_Fill_patch64(int g_a, int64_t lo[], int64_t hi[], void *val); extern void NGA_Gather64(int g_a, void *v, int64_t* subsArray[], int64_t n); extern void NGA_Gather_flat64(int g_a, void *v, int64_t subsArray[], int64_t n); extern void NGA_Get64(int g_a, int64_t lo[], int64_t hi[], void* buf, int64_t ld[]); extern void NGA_Get_ghost_block64(int g_a, int64_t lo[], int64_t hi[], void* buf, int64_t ld[]); extern int NGA_Idot_patch64(int g_a, char t_a, int64_t alo[], int64_t ahi[], int g_b, char t_b, int64_t blo[], int64_t bhi[]); extern void NGA_Inquire64(int g_a, int *type, int *ndim, int64_t dims[]); extern long NGA_Ldot_patch64(int g_a, char t_a, int64_t alo[], int64_t ahi[], int g_b, char t_b, int64_t blo[], int64_t bhi[]); extern long long NGA_Lldot_patch64(int g_a, char t_a, int64_t alo[], int64_t ahi[], int g_b, char t_b, int64_t blo[], int64_t bhi[]); extern int NGA_Locate64(int g_a, int64_t subscript[]); extern int NGA_Locate_nnodes64(int g_a, int64_t lo[], int64_t hi[]); extern int NGA_Locate_region64(int g_a,int64_t lo[],int64_t hi[],int64_t map[],int procs[]); extern void NGA_Matmul_patch64(char transa, char transb, void* alpha, void *beta, int g_a, int64_t alo[], int64_t ahi[], int g_b, int64_t blo[], int64_t bhi[], int g_c, int64_t clo[], int64_t chi[]) ; extern void NGA_Merge_distr_patch64(int g_a, int64_t alo[], int64_t ahi[], int g_b, int64_t blo[], int64_t bhi[]); extern void NGA_NbAcc64(int g_a,int64_t lo[],int64_t hi[],void* buf,int64_t ld[],void* alpha, ga_nbhdl_t* nbhandle); extern void NGA_NbGet64(int g_a, int64_t lo[], int64_t hi[], void* buf, int64_t ld[], ga_nbhdl_t* nbhandle); extern void NGA_NbGet_ghost_dir64(int g_a, int64_t mask[], ga_nbhdl_t* handle); extern void NGA_NbPut64(int g_a, int64_t lo[], int64_t hi[], void* buf, int64_t ld[], ga_nbhdl_t* nbhandle); extern void NGA_Periodic_acc64(int g_a, int64_t lo[], int64_t hi[],void* buf,int64_t ld[],void* alpha); extern void NGA_Periodic_get64(int g_a, int64_t lo[], int64_t hi[], void* buf, int64_t ld[]); extern void NGA_Periodic_put64(int g_a, int64_t lo[], int64_t hi[], void* buf, int64_t ld[]); extern void NGA_Print_patch64(int g_a, int64_t lo[], int64_t hi[], int pretty); extern void NGA_Put64(int g_a, int64_t lo[], int64_t hi[], void* buf, int64_t ld[]); extern long NGA_Read_inc64(int g_a, int64_t subscript[], long inc); extern void NGA_Release64(int g_a, int64_t lo[], int64_t hi[]); extern void NGA_Release_ghost_element64(int g_a, int64_t index[]); extern void NGA_Release_update64(int g_a, int64_t lo[], int64_t hi[]); extern void NGA_Release_update_ghost_element64(int g_a, int64_t index[]); extern void NGA_Scale_patch64(int g_a, int64_t lo[], int64_t hi[], void *alpha); extern void NGA_Scatter64(int g_a, void *v, int64_t* subsArray[], int64_t n); extern void NGA_Scatter_flat64(int g_a, void *v, int64_t subsArray[], int64_t n); extern void NGA_Scatter_acc64(int g_a, void *v, int64_t* subsArray[], int64_t n, void *alpha); extern void NGA_Scatter_acc_flat64(int g_a, void *v, int64_t subsArray[], int64_t n, void *alpha); extern void NGA_Select_elem64(int g_a, char* op, void* val, int64_t* index); extern void NGA_Set_data64(int g_a, int ndim, int64_t dims[], int type); extern void NGA_Set_ghosts64(int g_a, int64_t width[]); extern void NGA_Set_irreg_distr64(int g_a, int64_t map[], int64_t block[]); extern void NGA_Strided_acc64(int g_a, int64_t lo[], int64_t hi[], int64_t skip[], void* buf, int64_t ld[], void *alpha); extern void NGA_Strided_get64(int g_a, int64_t lo[], int64_t hi[], int64_t skip[], void* buf, int64_t ld[]); extern void NGA_Strided_put64(int g_a, int64_t lo[], int64_t hi[], int64_t skip[], void* buf, int64_t ld[]); extern DoubleComplex NGA_Zdot_patch64(int g_a, char t_a, int64_t alo[], int64_t ahi[], int g_b, char t_b, int64_t blo[], int64_t bhi[]); extern void NGA_Zero_patch64(int g_a, int64_t lo[], int64_t hi[]); #ifdef __cplusplus } #endif #endif ga-5-3/global/trace/0000750005473000001440000000000012275260561013137 5ustar d3n000usersga-5-3/global/trace/adjust.c0000640005473000001440000001706011721302651014572 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /*$Id: adjust.c,v 1.10 2003-06-22 07:19:31 d3h325 Exp $*/ /***********************************************************************\ * Purpose: adjusts timers in tracefiles generated by ga_trace, * * sorts events, combines tracefiles, and reformats the data * * Jarek Nieplocha, 10.15.1993 * * 11.09.99 - updated for GA_OFFSET + error diagnostics * \***********************************************************************/ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #define MAX_EVENTS 1000000 #define MAX_ARRAYS 8 #define MAX_EVENT_TYPES 32 #define MAX_PROC 512 /* this value must be exactly like in the GA package source */ #define GA_OFFSET 1000 #define GA_ABS(x) ((x)>0 ? (x) :(-x)) #define GA_MAX(a,b) (((a) >= (b)) ? (a) : (b)) /* if enabled, program prints GA usage statistics & requires EXTRA MEMORY * NOT recommended for large number of arrays/processes and/or event types */ #define PRINT_STATS 1 #ifdef PRINT_STATS double stat[MAX_PROC][MAX_ARRAYS][MAX_EVENT_TYPES]; unsigned int acc[MAX_PROC][MAX_ARRAYS][MAX_EVENT_TYPES]; void printstat(int proc, unsigned tlast); void update(long int proc, int *record, unsigned long t0, unsigned long t1); #endif int proc=0, arrays=0, event_types=0; static int tcomp(const void *t1, const void *t2); int main(argc,argv) int argc; char **argv; { long int p,i,j,MR,events=0; unsigned long int k, *clock_base, *times, base=0, *tbase, maxtime=0; int *record; int ga=-GA_OFFSET; int flag; FILE *fin,*fout, *fdistr; char *foutname="adjust.ed", fdstrname[15], finname[8]; int distrdata; if(argc < 2){ printf("Usage: adjust [] \n"); exit(1); } sscanf(argv[1],"%d",&ga); ga += GA_OFFSET; /* find the distribution file name and open it */ sprintf(fdstrname, "distrib.%d", ga-GA_OFFSET); if((fdistr = fopen(fdstrname,"r")) == NULL) { fprintf(stderr, "This array handle %d is invalid!\n", ga-GA_OFFSET); exit(3); } fscanf(fdistr, "%ld", &p); if(argc>2) sscanf(argv[3],"%ld",&MR); else MR = MAX_EVENTS; if(p>MAX_PROC){ fprintf(stderr,"Only %d procs allowed - you must modify this program\n",MAX_PROC); exit(1); } if(p<1){ fprintf(stderr,"number of processes must be > 0: %ld\n",p); exit(2); } printf("Processing tracefiles for %ld processes\n",p); #ifdef PRINT_STATS for(i=0;i= MAX_ARRAYS){ fprintf(stderr, "array handle beyond range we can deal with %d > %d\n", record[base+1], MAX_ARRAYS-1); exit(4); } times[0] -= clock_base[i]; times[1] = base+1; fscanf(fin,"%lu",times+2); times[2] -= clock_base[i]; #ifdef PRINT_STATS update(i,record+base,times[0],times[2]); #endif times[3] = -base-1; if(maxtime *(unsigned long int*)t2 ? 1 : -1); return (flag); } #ifdef PRINT_STATS void update(proc,record, t0, t1) long int proc; int *record; unsigned long t0,t1; { int ar=record[1], et=record[6]; if(arrays < ar){ arrays = ar; if(arrays>= MAX_ARRAYS){ fprintf(stderr,"The program can handle only %d arrays\n",MAX_ARRAYS); exit(1); } } if(event_types < et){ event_types = et; if (event_types >= MAX_EVENT_TYPES){ fprintf(stderr,"The program can handle only %d event types%d\n",MAX_EVENT_TYPES,et); exit(1); } } stat[proc][ar][et] += 1e-6 * (double)(t1-t0); acc[proc][ar][et] ++; } void printstat(proc,tlast) int proc; unsigned tlast; { int p,e,a; double t,ta,te, tl= 1e-6 * tlast; double total_cm=0., total_cp=0.; long int ia, ie; printf("\t\t\tActivity Statistics\n"); for(p=0;p #endif #if HAVE_STDLIB_H # include #endif int **Patches, *Col, *lastCol; int p; #define hash(ilo,ihi,p) (((ilo)+(ihi))%(p)) #define hash2(ilo,ihi,jlo,jhi,p) ( ((ilo)+(ihi) + (jlo)+(jhi))%(p) ) int LocFound(int *patch); int **idim2(row,col) int row,col; { register int **prow, *pdata, i; pdata = (int*) calloc(row*col, sizeof(int)); if(pdata == (int*) NULL){ printf("Memory allocation failed - data: %dx%d\n",row,col); exit(1); } prow = (int **)calloc(row,sizeof(int *)); if(prow == (int**) NULL){ printf("memory allocation failed for prow"); exit(1); } for(i=0;i \n"); printf("(from,to) specifies the range of collision numbers to be printed\n"); exit(1); } sscanf(argv[1],"%d",&p); if(p>1000||p<1){ printf("%d processors ? Please be reasonable ...\n",p); exit(1); } fin = fopen(argv[2],"r"); if(!fin){ printf("%s: File Not Found, Exiting ...\n",argv[2]); exit(1); } sscanf(argv[3],"%d",&from); sscanf(argv[4],"%d",&to); if(from<0||from>p||to>p||to and \n"); exit(1); } if(!(Col = (int*)calloc(p,sizeof(int)))){ printf("couldn't allocate memory 2\n"); exit(2); } Patches = idim2(p,5); for(i=0;isscanf(ln,"%d%d%d%d%d%d%d%d%lu", &i,&k,patch+1,patch+2,patch+3,patch+4,&i,&flag,&time))continue; loc = LocFound(patch); if(!Patches[loc][0])for(i=1;i<5;i++)Patches[loc][i]=patch[i]; last_col = Patches[loc][0]; if(flag == 1){ cur_col = ++Patches[loc][0]; if(cur_col>p){ printf("%d -- Error in collision number. Record: %d\n",cur_col,j); exit(3); } Col[cur_col-1]++; if(max_col=from && last_col<=to) || (cur_col>=from && cur_col<=to)){ printf("%f ",1e-6*time); for(i=from-1;i #endif #if HAVE_STDLIB_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_MATH_H # include #endif #include "ga.h" #include "macdecls.h" #include "mp3.h" #define NATOMS 256 #define BLOCK_SIZE 64 #define DENSITY 1.05 #define TEMPERATURE 2.0 #define TIMESTEP 0.004 #define RESCALE_STEPS 10 #define EQUILIBRIUM_TIME 10.0 #define SIMULATION_TIME 20.0 #define STOP_ITERATING 0 #define DEBUG 0 #define PRINT_LEVEL_1 1 /**< dumps result: level 1 */ #define PRINT_LEVEL_2 1 /**< dumps result: level 2..more results */ #define WRITE_TO_FILE 0 /**< dumps the coordinates in molden viz format */ #define NDIM 3 /**< always 3-d */ #define MAX_PROC 256 #define MAX_BLOCKS 256 #define SAFELIMIT 3 #ifdef MPI # define CLOCK_ MPI_Wtime #else # define CLOCK_ tcg_time #endif /* #define GA_ABS(a) ( ((a) > 0) ? (a) : -(a) ) */ typedef struct { int x; int y; } topo_t; /* box specifications */ typedef struct { double length; double width; double height; } boxSpec_t; int gMemHandle; static int gMe, gNproc; static int g_X; /* Coordinate array */ static int g_G; /* Gradient Array */ static int g_V; /* Velocity Array */ static int g_T; /* Atomic Task: 1-d array whose size = 1 */ static int gBlockSize, gNblocks; static double gDensity, gDesiredTemperature, gTimeStep, gComputeTime=0.0; static topo_t btopo[MAX_BLOCKS]; static boxSpec_t box; static int measurementStep; static double temperature, temperatureSum, temperatureSqdSum; static double pressure, pressureSum, pressureSqdSum; static double potentialEnergySum, potentialEnergySqdSum; static double kineticEnergySum, totalEnergySum, totalEnergySqdSum; /** * To get the next task id. It is an atomic operation. */ static int nxtask(void) { int subscript = 0; return NGA_Read_inc(g_T, &subscript, 1); } /** * Block Topology (of Force Matrix): * Say for example: If there are 4 block and 100 atoms, the size of * the force matrix is 100x100 and each block size is 50x50. * * ----------- * | | | * | 0,0 | 0,1 | * ----------- * | 1,0 | 1,1 | * | | | * ----------- */ void LJ_Setup(int natoms, double **x_i, double **x_j, double **grad) { int i, j, k=0, n; MA_AccessIndex maindex; n = natoms/gBlockSize; /* block topology */ for(i=0; i MAX_BLOCKS) GA_Error("Number of blocks is greater than MAX_BLOCKS(512): Solution is either increase the defined MAX_BLOCKS or increase your block size", 0L); if(gNblocks < gNproc) GA_Error("Number of blocks should be greater than number of processors",0L); } /** * The entire Force matrix is sub-divided into many blocks. * This function gets the next block to be computed by a * process. Once a process finishes a block it gets a new * block to be computed. */ void getBlock(int taskId, int size, double *x_i, double *x_j) { int lo, hi; #if DEBUG printf("%d: new task = %d: topo: %d,%d\n", gMe, taskId, btopo[taskId].x, btopo[taskId].y); #endif /** get the coordinates of the atoms in the corresponding rows in the block */ lo = btopo[taskId].x * size; hi = lo + size -1; NGA_Get(g_X, &lo, &hi, x_i, &hi); /** get the coordinates of the atoms in the corresponding columns in the block */ lo = btopo[taskId].y * size; hi = lo + size -1; NGA_Get(g_X, &lo, &hi, x_j, &hi); } /** * LJ Function Gradient Computation. */ void LJ_FG(int taskId, double *x_i, double *x_j, double *f, double *grad) { int b_x, b_y; /* block topology */ int i, j, start_x, start_y, tempA, tempB; int start_i=0, end_i=0, start_j=0, *end_j=NULL; int sign_x, sign_y, sign_z; double xx, yy, zz, rij, temp,r2,r6,r12, xtmp, ytmp, ztmp; b_x = btopo[taskId].x; b_y = btopo[taskId].y; start_x = gBlockSize * NDIM * btopo[taskId].x; start_y = gBlockSize * NDIM * btopo[taskId].y; if(b_x == b_y) { /* computer lower triagular matrix only */ start_i = 1; end_i = gBlockSize; start_j = 0; end_j = &i; } else if(b_x > b_y) { /* compute right half of the block */ start_i = 0; end_i = gBlockSize; start_j = gBlockSize/2; end_j = &gBlockSize; } else if(b_x < b_y) { /* compute upper half of the block */ start_i = 0; end_i = gBlockSize/2; start_j = 0; end_j = &gBlockSize; } /* Calculating Force exerted on 'i' by 'j' */ for(i=start_i; i< end_i; i++) { xtmp = x_i[NDIM*i]; ytmp = x_i[NDIM*i+1]; ztmp = x_i[NDIM*i+2]; for(j=start_j; j< *end_j; j++) { xx = xtmp - x_j[NDIM*j]; yy = ytmp - x_j[NDIM*j+1]; zz = ztmp - x_j[NDIM*j+2]; sign_x = xx > 0.0 ? 1 : -1; sign_y = yy > 0.0 ? 1 : -1; sign_z = zz > 0.0 ? 1 : -1; /** * Using Nearest Image Approximation in computing the distance between * any 2 atoms: If any component of (Ri-Rj) is greater than L/2, then * there is an image particle located closer which exerts a larger force * (because we use periodic boundary conditions). */ if(xx*sign_x > box.length/2) xx -= sign_x*box.length; if(yy*sign_y > box.width/2) yy -= sign_y*box.width ; if(zz*sign_z > box.height/2) zz -= sign_z*box.height; rij = xx*xx + yy*yy + zz*zz; #if DEBUG if(rij <= 0.0) GA_Error("Divide by Zero Error\n", 0L); #endif r2 = 1.0/rij; r6 = r2*r2*r2; r12 = r6*r6; *f = *f + 4.0*(r12-r6); /* function */ temp = r2 * (48.0 * r12 - 24.0 * r6); tempA = start_x + NDIM*i; tempB = start_y + NDIM*j; grad[tempA] += xx*temp; /* gradient */ grad[tempA+1] += yy*temp; grad[tempA+2] += zz*temp; grad[tempB] -= xx*temp; grad[tempB+1] -= yy*temp; grad[tempB+2] -= zz*temp; } } } /** * Compute Function and Gradient */ void computeFG(double *force, int natoms, double *x_i, double *x_j, double *grad) { int taskId, size, lo, hi, i; double tt; taskId = gMe; size = gBlockSize * NDIM; for(i=0; i 5) { printf("Argc = %d\n", argc); while((n = getopt(argc, argv, "b:")) != EOF) switch (n) { case 'b': gBlockSize = atoi(optarg); } } #endif } void rescaleVelocities (int totalAtoms) { int i, p, lo, hi, ld, natms; double vSqdSum = 0.0, scale; double *v; GA_Sync(); NGA_Distribution(g_V, gMe, &lo, &hi); NGA_Access(g_V, &lo, &hi, &v, &ld); natms = (hi-lo+1)/NDIM; for (p = 0; p < natms; p++) for (i = 0; i < NDIM; i++) vSqdSum += v[p*NDIM + i] * v[p*NDIM + i]; GA_Dgop(&vSqdSum, 1, "+"); scale = NDIM * (totalAtoms) * gDesiredTemperature / vSqdSum; scale = sqrt(scale); for (p = 0; p < natms; p++) for (i = 0; i < NDIM; i++) v[p*NDIM + i] *= scale; GA_Sync(); } double gaussianDistribution() { static int available = 0; static double savedDeviate; double r[2], rSqd, factor; int i; if (available) { available = 0; return savedDeviate; } do { rSqd = 0.0; for (i = 0; i < 2; i++) { r[i] = (2.0 * (double) rand()) / RAND_MAX - 1.0; rSqd += r[i] * r[i]; } } while (rSqd >= 1.0 || rSqd == 0.0); factor = sqrt(-2.0 * log(rSqd) / rSqd); savedDeviate = r[0] * factor; available = 1; return r[1] * factor; } void LJ_Initialize(int natoms) { double L; /* compute the length, width and height of the box */ L = pow(natoms/gDensity, 1.0/3.0); box.length = box.width = box.height = L; #if PRINT_LEVEL_1 if(gMe == 0) { printf("\n"); printf(" =========================================================\n\n"); printf(" Molecular Dynamics Simulation \n\n"); printf(" of \n\n"); printf(" Lennard Jones System \n\n"); printf(" =========================================================\n\n\n"); printf(" Number of Atoms/Particles = %d\n", natoms); printf(" Block Size = %d\n", gBlockSize); printf(" Number of Blocks = %d\n", gNblocks); printf(" Density = %f\n", gDensity); printf(" Temperature = %f\n", gDesiredTemperature); printf(" Time Step = %f\n\n", gTimeStep); printf(" Box Specifications:\n"); printf(" Size of the Cube (Box) = %f\n", box.length); printf(" System Volume = %f\n\n\n", pow(L, 3.0)); } #endif if(gMe == 0) { int c, i, j, k, m, n, p; double b, xSum[3] = {0.0, 0.0, 0.0}; double rFCC[4][3] = {{0.0, 0.0, 0.0}, {0.0, 0.5, 0.5}, {0.5, 0.0, 0.5}, {0.5, 0.5, 0.0}}; double rCell[3]; double *x; int lo, hi, handle; MA_AccessIndex maindex; n = NDIM * natoms + 1; if(MA_push_get(C_DBL, n, "GA LJ_Init bufs", (void *)&handle, &maindex)) MA_get_pointer(handle, &x); else GA_Error("ma_alloc_get failed",n); /* Use face centered cubic (FCC) lattice for initial positions. Find number of unit cells (c) needed to place all atoms */ for (c = 1; ; c++) if (4*c*c*c >= natoms) break; b = L / c; /* side of unit cell */ p = 0; /* atoms placed so far */ for (i = 0; i < c; i++) { rCell[0] = i * b; for (j = 0; j < c; j++) { rCell[1] = j * b; for (k = 0; k < c; k++) { rCell[2] = k * b; for (m = 0; m < 4; m++) /* 4 particles in cell */ if (p < natoms) { for (n = 0; n < NDIM; n++) /* 3-dimensions - x, y, z */ x[p*NDIM + n] = rCell[n] + b * rFCC[m][n]; ++p; } } } } lo = 0; hi = natoms*NDIM-1; NGA_Put (g_X, &lo, &hi, x, &hi); /* Random Gaussian distribution of initial velocities */ for(i=0; i= b[i]) x[p*NDIM+i] -= b[i]; v[p*NDIM+i] += 0.5 * a[p*NDIM+i] * gTimeStep; } GA_Sync(); } /** * Using Velocity-Verlet Algorithm. */ void LJ_Update_Velocity() { int i, p, lo, hi, ld, natms; double *a, *v; GA_Sync(); NGA_Distribution(g_V, gMe, &lo, &hi); NGA_Access(g_V, &lo, &hi, &v, &ld); NGA_Access(g_G, &lo, &hi, &a, &ld); natms = (hi-lo+1)/NDIM; for (p = 0; p < natms; p++) for (i = 0; i < NDIM; i++) v[p*NDIM+i] += 0.5 * a[p*NDIM+i] * gTimeStep; GA_Sync(); } void initializeTaskArray() { int lo, hi, n; if(gMe ==0) { /* Initialize the task array */ lo = 0; hi = 0; /* only one element */ n = gNproc; /* initial value of the task counter/id */ NGA_Put (g_T, &lo, &hi, &n, &hi); } GA_Sync(); } void solveOneTimeStep(double *potentialEnergy, int natoms, double *x_i, double *x_j, double *grad) { *potentialEnergy = 0.0; LJ_Update(); /* Update the coordinates */ initializeTaskArray(); computeFG(potentialEnergy, natoms, x_i, x_j, grad); LJ_Update_Velocity(); } void writeToFile(int natoms) { static int first_time = 1; static FILE *gOutfile; int n=0, i=0, lo, hi; double *p_data; if(gMe == 0) { if(first_time) { gOutfile = fopen("output.dat", "w"); first_time = 0; } else if(natoms == -1) { fclose(gOutfile); return; } p_data = (double *) malloc(sizeof(double) * natoms * NDIM); lo = 0; hi = natoms * NDIM -1; NGA_Get(g_X, &lo, &hi, p_data, &hi); /* in molden format */ fprintf(gOutfile, "%d\n\n", natoms) ; /* 2 new lines needed */ do { fprintf(gOutfile, "%s %f %f %f\n", "XX", p_data[i], p_data[i+1], p_data[i+2]); i+=NDIM; }while(++n < natoms); free(p_data); } } /** * Lennard Jones Molecular Dynamics: starts here... */ void LJ_Solve(int natoms) { double execTime, potentialEnergy, totalEnergy = 0.0, time=0.0; double *x_i, *x_j, *grad, ip; int s=0; /* Initial Setup */ LJ_Setup(natoms, &x_i, &x_j, &grad); initializeTaskArray(); #if WRITE_TO_FILE writeToFile(natoms); #endif execTime = CLOCK_(); potentialEnergy = 0.0; computeFG(&potentialEnergy, natoms, x_i, x_j, grad); initializeProperties(); computeProperties(natoms, potentialEnergy, &totalEnergy); #if WRITE_TO_FILE writeToFile(natoms); #endif if(gMe == 0) printf("Equilibrium Steps:\n"); if(gMe == 0) printf("Time = %.3f \tEnergy = %f\n", time, totalEnergy); /* Equilibrium Steps */ while(time < EQUILIBRIUM_TIME) { solveOneTimeStep(&potentialEnergy, natoms, x_i, x_j, grad); computeProperties(natoms, potentialEnergy, &totalEnergy); #if WRITE_TO_FILE writeToFile(natoms); #endif time += gTimeStep; if(gMe == 0 && modf(time,&ip) < gTimeStep) printf("Time = %.2f \tEnergy = %f\n", ip, totalEnergy); if(++s >= RESCALE_STEPS) { rescaleVelocities(natoms); s = 0; } } /* Actual Production Steps */ if(gMe == 0) printf("Production Steps:\n"); initializeProperties(); while(time < EQUILIBRIUM_TIME + SIMULATION_TIME) { solveOneTimeStep(&potentialEnergy, natoms, x_i, x_j, grad); computeProperties(natoms, potentialEnergy, &totalEnergy); #if WRITE_TO_FILE writeToFile(natoms); #endif time += gTimeStep; if(gMe == 0 && modf(time,&ip) < gTimeStep) printf("Time = %.2f \tEnergy = %f\n", ip, totalEnergy); } #if WRITE_TO_FILE writeToFile(-1); #endif if(gMe == 0) printProperties(natoms); #if PRINT_LEVEL_2 if(gMe == 0) { execTime = CLOCK_()-execTime; printf("%d: Total Elapsed Time = %f\n", gMe, execTime); printf("%d: Computation Time = %f\n", gMe, gComputeTime); printf("%d: Percentage Overhead = %f\n\n", gMe, 100*(execTime-gComputeTime)/execTime); } #endif if(!MA_pop_stack(gMemHandle)) GA_Error("LJ_Init:MA_pop_stack failed",0); } /** * main(int argc, char **argv) */ int main(int argc, char **argv) { int heap=4000000, stack=4000000; int natoms=NATOMS; int dims[NDIM]; MP_INIT(argc, argv); /** * Initialize Global Arrays. */ GA_Initialize_args(&argc, &argv); gMe = GA_Nodeid(); gNproc = GA_Nnodes(); heap /= gNproc; stack /= gNproc; if(! MA_init(C_DBL, stack, heap)) GA_Error("MA_init failed",stack+heap); /* initialize memory allocator*/ /** * Parse the command line and check the initial conditions (and assumptions) */ commandLine(argc, argv); check(natoms); /** * Create coordinate(x), gradient(g) and velocity(v) vectors */ dims[0] = natoms*NDIM; g_X = NGA_Create(C_DBL, 1, dims, "Coordinate Array - X", NULL); g_G = GA_Duplicate (g_X, "Gradient"); g_V = GA_Duplicate (g_X, "Velocity"); /** * Molecular Dynamics of the Lennard Jones(lj) clusters. * (molecular conformation problem). */ LJ_Initialize(natoms); LJ_Solve(natoms); /** * Deaalocate the arrays and free the resources */ GA_Destroy(g_X); GA_Destroy(g_G); GA_Destroy(g_V); GA_Destroy(g_T); /** * Termination signal to release the resources, etc. */ GA_Terminate(); #ifdef MPI MPI_Finalize(); #else tcg_pend(); #endif return 0; } ga-5-3/global/examples/petsc.F0000640005473000001440000001442411274466357015123 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif program petsc implicit none #include "mafdecls.fh" #include "global.fh" integer heap, stack data heap,stack /2*40000/ c c*** Intitialize a message passing library c #ifdef MPI call mpi_init #else call pbeginf #endif c call ga_initialize() ! initialize GAs if (.not. ma_init(MT_DBL, heap, stack)) ! initialize MA $ call ga_error("ma init failed",heap+stack) #ifdef ENABLE_TRACE call trace_init(10000) ! initialize trace #endif call iterate() ! do the work #ifdef ENABLE_TRACE call trace_end(ga_nodeid()) ! end trace #endif call ga_terminate() ! terminate GAs c #ifdef MPI call mpi_finalize() #else call pend() #endif end subroutine iterate() implicit none #include "include/finclude/petsc.h" #include "include/finclude/vec.h" #include "include/finclude/mat.h" #include "include/finclude/pc.h" #include "include/finclude/ksp.h" #include "include/finclude/sles.h" #include "include/finclude/sys.h" #include "mafdecls.fh" #include "global.fh" double precision norm integer i, j, II, JJ, ierr, m, n parameter (m = 3) parameter (n = 3) integer its, Istart, Iend, flg integer me, nproc Scalar v, one, neg_one Vec x, b, u Mat A SLES sles KSP ksp PetscRandom rctx integer g_x integer ld double precision buf_v(1) PetscOffset idx c$$$ PC pc c$$$ PCType ptype c$$$ double precision tol ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! Beginning of program ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - c*** check parallel environment me = ga_nodeid() nproc = ga_nnodes() one = 1.0 neg_one = -1.0 ld = m*n c*** Global Array c*** create global arrays: g_x - approx. solution if (.not. ga_create(MT_DBL, m*n, 1, 'x', 1, 1, g_x)) $ call ga_error(' ga_create failed ',0) c c*** initial guess for x -- zero call ga_zero(g_x) c c$$$ do i=1,m*n c$$$ buf(i) = i c$$$ enddo c$$$ call ga_put(g_x,1,m*n,1,1,buf,ld) c c*** PETSC call PetscInitialize(PETSC_NULL_CHARACTER,ierr) ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! Compute the matrix and right-hand-side vector that define ! the linear system, Ax = b. ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - c*** Matrix A call MatCreate(PETSC_COMM_WORLD,m*n,m*n,A,ierr) call MatGetOwnershipRange(A,Istart,Iend,ierr) do II=Istart,Iend-1 v = -1.0 i = II/n j = II - i*n if ( i.gt.0 ) then JJ = II - n call MatSetValues(A,1,II,1,JJ,v,ADD_VALUES,ierr) endif if ( i.lt.m-1 ) then JJ = II + n call MatSetValues(A,1,II,1,JJ,v,ADD_VALUES,ierr) endif if ( j.gt.0 ) then JJ = II - 1 call MatSetValues(A,1,II,1,JJ,v,ADD_VALUES,ierr) endif if ( j.lt.n-1 ) then JJ = II + 1 call MatSetValues(A,1,II,1,JJ,v,ADD_VALUES,ierr) endif v = 4.0 call MatSetValues(A,1,II,1,II,v,ADD_VALUES,ierr) enddo call MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY,ierr) call MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY,ierr) c*** Vector b call VecCreateMPI(PETSC_COMM_WORLD,PETSC_DECIDE,m*n,u,ierr) call VecSetFromOptions(u,ierr) call VecDuplicate(u,b,ierr) call VecDuplicate(b,x,ierr) c*** u is the exact solution call VecSet(one,u,ierr) if (me .eq. 0) print *, 'Exact solution:' call VecView(u, VIEWER_STDOUT_WORLD, ierr) c*** b is the right hand side call MatMult(A,u,b,ierr) c*** Manage to make connection of ga to petsc: g_x -> x call VecGetOwnershipRange(x,Istart,Iend,ierr) call VecGetArray(x,buf_v,idx,ierr) call ga_get(g_x,Istart+1,Iend,1,1,buf_v(idx+1),ld) call VecRestoreArray(x,buf_v,idx,ierr) ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! Create the linear solver and set various options ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - call SLESCreate(PETSC_COMM_WORLD,sles,ierr) call SLESSetOperators(sles,A,A,DIFFERENT_NONZERO_PATTERN, & ierr) c$$$ call SLESGetPC(sles,pc,ierr) c$$$ ptype = PCJACOBI c$$$ call PCSetType(pc,ptype,ierr) c$$$ call SLESGetKSP(sles,ksp,ierr) c$$$ tol = 1.e-7 c$$$ call KSPSetTolerances(ksp,tol,PETSC_DEFAULT_DOUBLE_PRECISION, c$$$ & PETSC_DEFAULT_DOUBLE_PRECISION,PETSC_DEFAULT_INTEGER,ierr) call SLESSetFromOptions(sles,ierr) ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! Solve the linear system ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - call SLESSolve(sles,b,x,its,ierr) call ga_sync() c*** write the approx solution back to ga call VecGetArray(x,buf_v,idx,ierr) call ga_put(g_x,Istart+1,Iend,1,1,buf_v(idx+1),ld) call VecRestoreArray(x,buf_v,idx,ierr) if (me .eq. 0) print *, 'Approx solution:' call ga_print(g_x) ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! Check solution and clean up ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! Check the error call VecAXPY(neg_one,u,x,ierr) call VecNorm(x,NORM_2,norm,ierr) if (me .eq. 0) then if (norm .gt. 1.e-12) then write(6,100) norm, its else write(6,110) its endif endif 100 format('Norm of error ',e10.4,' iterations ',i5) 110 format('Norm of error < 1.e-12, iterations ',i5) c*** clean up call SLESDestroy(sles,ierr) call VecDestroy(u,ierr) call VecDestroy(x,ierr) call VecDestroy(b,ierr) call MatDestroy(A,ierr) call PetscFinalize(ierr) if(.not. ga_destroy(g_x)) call ga_error('invalid handle ?',0) c call ga_sync() end ga-5-3/global/examples/conjugate_gradient/0000750005473000001440000000000012275260561017513 5ustar d3n000usersga-5-3/global/examples/conjugate_gradient/computeloops.F0000640005473000001440000000650011274466357022366 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif subroutine f_matvecmul(a_mat, > mult_vec, > resultvec, > isresultmirrored, > firstrow, > lastrow, > myrowlist, > mycollist) implicit none integer*4 isresultmirrored double precision mult_vec(*) double precision resultvec(*) double precision a_mat(*) integer*4 myrowlist(*),mycollist(*) integer*4 firstrow,lastrow integer*4 i,j,k,l double precision tmprowsum k=0 l=1 do i=firstrow, lastrow-1 k=k+1 write(6,*) k,myrowlist(k),myrowlist(k+1) do j=myrowlist(k), myrowlist(k+1)-1 write(6,*) i,j,k,myrowlist(k+1),l tmprowsum=tmprowsum+a_mat(l)*mult_vec(mycollist(l)+1) l=l+1 enddo resultvec(k)=tmprowsum tmprowsum=0 enddo end subroutine f_computeminverse(minv, > a_mat, > myrowlist, > mycollist, > firstrow, > lastrow) double precision a_mat(*) double precision minv(*) integer*4 myrowlist(*),mycollist(*) integer*4 firstrow,lastrow integer*4 i,j,k,l k=0 l=1 do i=firstrow, lastrow-1 k=k+1 do j=myrowlist(k), myrowlist(k+1)-1 if(mycollist(l) .ge. i) then if(mycollist(l) .eq. i) then minv(k)=10.0/a_mat(l) if(minv(k) .le. 0) minv(k)=1.0/10.0 endif if(mycollist(l)>i) minv(k)=1.0/10.0 l= l+(myrowlist(k+1)-j) go to 100 endif l=l+1 enddo 100 continue enddo end subroutine f_computeminverser(minv, > r, > minvr, > firstrow, > lastrow) double precision minv(*) double precision r(*), minvr(*) integer*4 firstrow,lastrow integer*4 i,k k=1 do i=firstrow, lastrow-1 minvr(k)=minv(k)*r(k) k=k+1 enddo end subroutine f_addvec(scale1, > srcvec1, > scale2, > srcvec2, > dstvec, > firstrow, > lastrow) integer*4 firstrow,lastrow double precision scale1,scale2 double precision srcvec1(*),srcvec2(*) double precision dstvec(*) integer*4 i,k k=1 do i=firstrow, lastrow-1 dstvec(k)=srcvec1(k)*scale1+ srcvec2(k)*scale2 k=k+1 enddo end subroutine f_2addvec(scale1a, > srcvec1a, > scale2a, > srcvec2a, > dstveca, > scale1b, > srcvec1b, > scale2b, > srcvec2b, > dstvecb, > firstrow, > lastrow) integer*4 firstrow,lastrow double precision scale1a,scale2a double precision srcvec1a(*),srcvec2a(*) double precision dstveca(*) double precision scale1b,scale2b double precision srcvec1b(*),srcvec2b(*) double precision dstvecb(*) integer*4 i,k k=1 do i=firstrow, lastrow-1 dstveca(k)=srcvec1a(k)*scale1a+ srcvec2a(k)*scale2a dstvecb(k)=srcvec1b(k)*scale1b+ srcvec2b(k)*scale2b k=k+1 enddo end ga-5-3/global/examples/conjugate_gradient/read_input.c0000640005473000001440000001653411437102612022012 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if HAVE_FCNTL_H # include #endif #if HAVE_STRING_H # include #endif #include "ga.h" #include "macdecls.h" #include "mp3.h" extern int na; extern int nz; extern int dmvec,svec,bvec,dvec,m_dvec,amat,xvec,axvec,rvec,qvec,ridx,cidx; extern int me, nproc; extern int myfirstrow,mylastrow; static int *columnmap,*allfirstrow,*alllastrow; extern double *ga_vecptr; extern int isvectormirrored; static FILE *fd; void generate_random_file(int naa,int nnz){ fd = fopen("randominput.dat", "w"); } void read_and_create(int argc, char **argv) { int ri,i; int ph; double d_one=1.0; double *a,*x; int *icol, *irow; #if 0 int dims[2]; #endif int tmp1,idealelementsperproc; int lo,hi; na = atoi(argv[1]); nz = atoi(argv[2]); if(strncmp("random",argv[3],6)){ if(me==0){ fd = fopen(argv[3], "r"); if(fd==NULL)GA_Error("unable to open given file",0); } } else{ if(na==0 || nz==0){ printf("\nERROR:exiting-no input file given and na or nz is 0"); fflush(stdout); GA_Terminate(); MP_FINALIZE(); return; } if(me==0){ generate_random_file(na,nz); fd = fopen("randominput.dat", "r"); } } if(me==0){ if(na==0) fread(&na, sizeof(na), 1, fd); if(nz==0) fread(&nz, sizeof(nz), 1, fd); printf("\nReading CG input\n"); printf("Number of rows: %d\n", na); printf("Number of non-zeros: %d\n", nz); a = (double *)malloc(sizeof(double)*nz); icol = (int *)malloc(sizeof(int)*(nz+1)); x = (double *)malloc(sizeof(double)*(na+1)); irow = (int *)malloc(sizeof(int)*(na+1)); for (i = 0; i < na + 1; i++) x[i] = 1.0; fread(a, sizeof(double), nz, fd); fread(irow, sizeof(int), na + 1, fd); fread(icol, sizeof(int), nz + 1, fd); fread(x, sizeof(double), na + 1, fd); /* the c adjustment */ for (i = 0; i < na + 1; i++) irow[i] -= 1; for (i = 0; i < nz + 1; i++) icol[i] -= 1; /* MPI_Bcast(&nz,1,MPI_INT,0,MPI_COMM_WORLD); */ GA_Brdcst(&nz, sizeof(int), 0); /* MPI_Bcast(&na,1,MPI_INT,0,MPI_COMM_WORLD); */ GA_Brdcst(&na, sizeof(int), 0); } else { /* MPI_Bcast(&nz,1,MPI_INT,0,MPI_COMM_WORLD); */ GA_Brdcst(&nz, sizeof(int), 0); /* MPI_Bcast(&na,1,MPI_INT,0,MPI_COMM_WORLD); */ GA_Brdcst(&na, sizeof(int), 0); /*for now, others dont need to malloc really*/ a = (double *)malloc(sizeof(double)*nz); icol = (int *)malloc(sizeof(int)*(nz+1)); x = (double *)malloc(sizeof(double)*(na+1)); irow = (int *)malloc(sizeof(int)*(na+1)); if(!a || !icol || !x || !irow)GA_Error("malloc failed in ga_cg",0); } allfirstrow = (int *)malloc(sizeof(int)*nproc); alllastrow = (int *)malloc(sizeof(int)*nproc); columnmap = (int *)malloc(sizeof(int)*nproc); if(!allfirstrow || !alllastrow || !columnmap)GA_Error("malloc failed in ga_cg",0); /* * next decide who works on which rows, this will decide the * distribution of a,d,r,q,x,and ax */ /*create the mapping for all vectors, row matrix and column matrix*/ if(me==0){ idealelementsperproc = nz/nproc; tmp1=0; for(i=0;i=idealelementsperproc){ if((elementsperproc-idealelementsperproc) > idealelementsperproc-(elementsperproc-(irow[ri+1]-irow[ri]))){ alllastrow[i] = ri-1; if((ri-1)<0)GA_Error("run on a smaller processor count",0); tmp1--; } else{ alllastrow[i] = ri; if(ri<0)GA_Error("run on a smaller processor count",0); } elementsperproc=0; break; } } } alllastrow[nproc-1]=na-1; for(i=0;i #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H #include #endif #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_STAT_H #include #endif #if HAVE_FCNTL_H #include #endif #include "armci.h" #include "ga.h" #include "macdecls.h" #include "finclude.h" #include "mp3.h" #define VERIFY_RESULT 1 int na,nz; int bvec,dvec,svec,dmvec,m_dvec,amat,xvec,axvec,rvec,qvec,ridx,cidx; int me, nproc; int myfirstrow=0,mylastrow=0; double epsilon=1e-4; double time_get=0; double *entirexvecptr,*xvecptr,*entiredvecptr,*dvecptr; int isvectormirrored=0; static int niter; void read_and_create(int,char **); void computeminverser(double *,double *, double *); void computeminverse(double *,double *, int *,int *); void finalize_arrays(int); extern void matvecmul(double *,int,double *,int,int *,int *); extern double *ga_vecptr; void conjugate_gradient(int nit,int dopreconditioning) { int i,zero=0; int lo,hi; double d_one=1.0,d_negone=-1.0; double delta0=0.0,deltaold=0.0,deltanew=0.0,alpha=0.0,negalpha,beta,dtransposeq; double *axvecptr,*qvecptr,*aptr,*dmvecptr,*rvecptr,*svecptr,*bvecptr; double time0; int *mycp,*myrp; int j; double sum; NGA_Distribution(cidx,me,&lo,&hi); NGA_Access(cidx,&lo,&hi,&mycp,&zero); NGA_Access(amat,&lo,&hi,&aptr,&zero); NGA_Distribution(ridx,me,&lo,&hi); NGA_Access(ridx,&lo,&hi,&myrp,&zero); NGA_Access(axvec,&lo,&hi,&axvecptr,&zero); NGA_Access(qvec,&lo,&hi,&qvecptr,&zero); NGA_Access(rvec,&lo,&hi,&rvecptr,&zero); NGA_Access(bvec,&lo,&hi,&bvecptr,&zero); if(dopreconditioning){ NGA_Access(dmvec,&lo,&hi,&dmvecptr,&zero); NGA_Access(svec,&lo,&hi,&svecptr,&zero); /* NGA_Distribution(dvec, 0, &lo, &hi); NGA_Access(dvec, &lo, &hi, &entiredvecptr, &zero); */ } printf("\n%d:before matvecmul\n",me);fflush(stdout); /* compute Ax */ f_matvecmul(aptr,entirexvecptr,axvecptr,&zero,&myfirstrow,&mylastrow,myrp,mycp); /* r=b-Ax */ f_addvec(&d_one,bvecptr,&d_negone,axvecptr,rvecptr,&myfirstrow,&mylastrow); if(dopreconditioning){ f_computeminverse(dmvecptr,aptr,myrp,mycp,&myfirstrow,&mylastrow); f_computeminverser(dmvecptr,rvecptr,dvecptr,&myfirstrow,&mylastrow); NGA_Put(dvec,&lo,&hi,dvecptr,&hi); if (me == 0) printf("Doing preconditioning!\n"); } else{ if(me==0){ na--; NGA_Get(rvec,&zero,&na,entiredvecptr,&na); NGA_Put(dvec,&zero,&na,entiredvecptr,&na); na++; } } deltanew = GA_Ddot(dvec,rvec); /* deltanew = r.r_tranpose */ delta0 = deltanew; /* delta0 = deltanew */ if(me==0)printf("\n\tdelta0 is %f\n",delta0); /*if(me==0)printf("\n\titer\tbeta\tdelta");*/ for(i=0;i(1e-8*delta0);i++){ na--; NGA_Get(dvec, &zero, &na, entiredvecptr, &na); na++; if(isvectormirrored) matvecmul(aptr,m_dvec,qvecptr,1,myrp,mycp);/* q = Ad */ else{ f_matvecmul(aptr,entiredvecptr,qvecptr,&zero,&myfirstrow,&mylastrow,myrp,mycp); sum = 0.0; for (j = 0; j < na; j++) if (entiredvecptr[j] != 0.0) sum += entiredvecptr[j]; /* if (me == 0) printf("me: %d, sum: %g\n", me, sum); */ } NGA_Put(dvec,&lo,&hi,dvecptr,&hi); dtransposeq=GA_Ddot(dvec,qvec); /* compute d_transpose.q */ alpha = deltanew/dtransposeq; /* deltanew/(d_transpose.q) */ if(i>10000 && i%25==0){ /* compute Ax*/ f_matvecmul(aptr,entirexvecptr,axvecptr,&zero,&myfirstrow,&mylastrow,myrp,mycp); /* x = x+ alpha.d*/ /* r=b-Ax*/ f_2addvec(&d_one,xvecptr,&alpha,dvecptr,xvecptr,&d_one,bvecptr, &d_negone,axvecptr,rvecptr,&myfirstrow,&mylastrow); } else{ negalpha = 0.0-alpha; /* x = x+ alpha.d*/ /* r=r-alpha.q*/ f_2addvec(&d_one,xvecptr,&alpha,dvecptr,xvecptr,&d_one,rvecptr, &negalpha,qvecptr,rvecptr,&myfirstrow,&mylastrow); } if(dopreconditioning) computeminverser(dmvecptr,rvecptr,svecptr); deltaold = deltanew; /* deltaold = deltanew*/ if(dopreconditioning) deltanew = GA_Ddot(svec,rvec); /* deltanew = r_transpose.r*/ else deltanew = GA_Ddot(rvec,rvec); /* deltanew = r_transpose.r*/ beta = deltanew/deltaold; /* beta = deltanew/deltaold*/ if(dopreconditioning) f_addvec(&d_one,svecptr,&beta,dvecptr,dvecptr,&myfirstrow,&mylastrow); /* d = s + beta.d */ else f_addvec(&d_one,rvecptr,&beta,dvecptr,dvecptr,&myfirstrow,&mylastrow); /* d = r + beta.d */ if(isvectormirrored) GA_Copy(dvec,m_dvec); /*copy from distributed */ /* if(me==0)printf("\n\t%d\t%0.4f\t%f",(i+1),beta,deltanew); */ } if(i < nit && me == 0) printf("\n Done with CG before reaching max iter %f",sqrt(deltanew/delta0)); niter = i; #if VERIFY_RESULT GA_Zero(qvec); GA_Zero(rvec); matvecmul(aptr,xvec,qvecptr,0,myrp,mycp); GA_Add(&d_one,qvec,&d_negone,bvec,rvec); time0=GA_Ddot(rvec,rvec); if(me==0)printf("\n%d:error is %f",me,time0); #endif } void initialize_arrays(int dpc) { double d_one=1.0; int i; GA_Zero(dvec); GA_Fill(xvec,&d_one); GA_Zero(axvec); GA_Zero(rvec); GA_Zero(qvec); if(dpc){ GA_Zero(dmvec); GA_Zero(svec); } for(i=0;i ga_cg.x na nz file"); printf("\n\n where:"); printf("\n\tna is array dimention (only square arrays supported)"); printf("\n\tnz is number of non-zeros"); printf("\n\tfile is either the input file or the word random"); printf("\n\t use the word random if you to use random input"); printf("\n\t input should be in row compressed format"); printf("\n\t file should have matrix a followed by row, col & b (Ax=b)"); printf("\n\t if file also has na and nz, pass them as 0's and the"); printf("\n\t program will read them from the file"); printf("\n\nexample usages are:"); printf("\n\tmpirun -np 4 ./ga_cg.x 5000 80000 /home/me/myinput.dat"); printf("\n\tor"); printf("\n\tmpirun -np 4 ./ga_cg.x 5000 80000 random\n\n"); fflush(stdout); } GA_Terminate(); MP_FINALIZE(); return 0; } heap /= nproc; stack /= nproc; if(! MA_init(MT_F_DBL, stack, heap)) GA_Error("MA_init failed",stack+heap); /* initialize memory allocator*/ read_and_create(argc,argv); create_entire_vecs(); if(me==0)printf("\nWarmup and initialization run"); initialize_arrays(dopreconditioning); conjugate_gradient(1,dopreconditioning); time_get =0.0; if(me==0)printf("\n\nStarting Conjugate Gradient ...."); initialize_arrays(dopreconditioning); time0=MP_TIMER(); conjugate_gradient(30000/*2*/,dopreconditioning); time1=MP_TIMER(); /* GA_Print(xvec); */ /* GA_Print(dvec); */ if(me==0)printf("\n%d:in %d iterations time to solution=%f-%f\n",me,niter,(time1-time0),time_get); finalize_arrays(dopreconditioning); MP_BARRIER(); if(me==0)printf("Terminating ..\n"); GA_Terminate(); MP_FINALIZE(); return 0; } void finalize_arrays(int dpc) { GA_Destroy(bvec); GA_Destroy(dvec); if(isvectormirrored) GA_Destroy(m_dvec); GA_Destroy(amat); GA_Destroy(xvec); GA_Destroy(axvec); GA_Destroy(rvec); GA_Destroy(qvec); GA_Destroy(ridx); GA_Destroy(cidx); if(dpc){ GA_Destroy(svec); GA_Destroy(dmvec); } ARMCI_Free(myptrarrx[me]); ARMCI_Free(myptrarrd[me]); } ga-5-3/global/examples/conjugate_gradient/matvecmul.c0000640005473000001440000000406611437102612021652 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STDIO_H # include #endif #if HAVE_MATH_H # include #endif #include "ga.h" #include "macdecls.h" #include "mp3.h" extern int na,nz; extern int me, nproc; extern int myfirstrow,mylastrow; double *ga_vecptr; extern double time_get; void computeminverse(double *minvptr,double *aptr,int *myrowptr,int *mycolptr) { int i,j,k,l=0; for(k=0,i=myfirstrow;i=i){ if(mycolptr[l]==i){ /*printf("\n%d:i=%d j=%d aptr=%d",me,i,j,aptr[l]);*/ minvptr[k]=10.0/aptr[l]; if(minvptr[k]<0)minvptr[k]=1.0; } if(mycolptr[l]>i) minvptr[k]=1.0; /*printf("\n%d:l=%d i=%d mycolptr[l]=%d",me,l,i,mycolptr[l]);*/ l+=(myrowptr[k+1]-j); break; } } } } void computeminverser(double *minvptr,double *rvecptr,double *minvrptr) { int i,k; for(k=0,i=myfirstrow;i= istep >= beg c if ((istep.ge.isc(i,1)).and.(istep.le.isc(i,2))) then c c is mod(istep-beg,inc) = 0 c if (mod(istep,isc(i,3)).eq.0) then c c get next configuration using the appropriate algorithm c if (isc(i,4).eq.1) then call estep newcfg = .true. elseif (isc(i,4).eq.2) then prssr = rsc(i,2) pmass = rsc(i,4) call pstep newcfg = .true. elseif (isc(i,4).eq.3) then tmprtr = rsc(i,1) prssr = rsc(i,2) pmass = rsc(i,4) call sstep newcfg = .true. elseif (isc(i,4).eq.4) then tmprtr = rsc(i,1) tmass = rsc(i,3) call tstep newcfg = .true. elseif (isc(i,4).eq.5) then tmprtr = rsc(i,1) prssr = rsc(i,2) tmass = rsc(i,3) pmass = rsc(i,4) call ptstep newcfg = .true. elseif (isc(i,4).eq.6) then tmprtr = rsc(i,1) call mbstep newcfg = .true. elseif (isc(i,4).eq.7) then itarg = isc(i,2) tmprtr = rsc(i,1) tvol = rsc(i,2) tmass = rsc(i,3) call vlstep newcfg = .true. elseif (isc(i,4).eq.8) then tmprtr = rsc(i,1) call kstep newcfg = .true. elseif (isc(i,4).eq.9) then tmprtr = rsc(i,1) prssr = rsc(i,2) tmass = rsc(i,3) pmass = rsc(i,4) ipmode = 1 call ptstep newcfg = .true. elseif (isc(i,4).eq.10) then tmprtr = rsc(i,1) prssr = rsc(i,2) tmass = rsc(i,3) pmass = rsc(i,4) ipmode = 2 call ptstep newcfg = .true. endif endif endif 100 continue c c get next configuration if no special step is taken c if (.not.newcfg) then if (dflalg.eq.1) then call estep elseif (dflalg.eq.2) then prssr = dfprs pmass = dfpm call pstep elseif (dflalg.eq.3) then tmprtr = dftmp prssr = dfprs pmass = dfpm call sstep elseif (dflalg.eq.4) then tmprtr = dftmp tmass = dftm call tstep elseif (dflalg.eq.5) then tmprtr = dftmp prssr = dfprs tmass = dftm pmass = dfpm call ptstep elseif (dflalg.eq.6) then tmprtr = dftmp call mbstep elseif (dflalg.eq.9) then tmprtr = dftmp prssr = dfprs tmass = dftm pmass = dfpm ipmode = 1 call ptstep elseif (dflalg.eq.10) then tmprtr = dftmp prssr = dfprs tmass = dftm pmass = dfpm ipmode = 2 call ptstep endif endif if (debug) then write(6,*) ga_nodeid(),' Got to 1 at step ',istep endif c c Update remaining energy quantities c nrg(3) = nrg(4) + nrg(6) vbox = xbox*ybox*zbox nrg(7) = nrg(5) * dble(atot-1) / vbox + nrg(15) if (istep.eq.equil_1) then call fixper do i = 1, antot do j = 1, 3 ra(i,j,6) = ra(i,j,1) end do end do call cluster_com call cluster_center rmax = cluster_check_radius() if (rmax.gt.r_cluster) r_cluster = rmax + 0.01 endif if (mod(istep,mcfreq).eq.0.and.istep.gt.equil_1) then call cluster_mc if (me.eq.0.and.l_rad) write(7,7100) dble(istep)*tau,r_cluster endif if (debug) then write(6,*) ga_nodeid(),' Got to 2 at step ',istep endif if (istep.gt.equil_2.and.r_cluster.le.cl_upper) + call cluster_binr if (debug) then write(6,*) ga_nodeid(),' Got to 3 at step ',istep endif if (istep.eq.window_1) call cluster_reset_binr(1) if (istep.eq.window_2) call cluster_reset_binr(2) c c Perform all statistical operations c on the new configuration. c c print pressure c if (mod(istep,istat).eq.0.and.l_stdio) then call header(istep) if (me.eq.0) write(6,6000) nrg(7) if (me.eq.0) write(6,6300) nrg(3) if (me.eq.0) write(6,6700) nrg(6),nrg(4),nrg(5) if (me.eq.0) write(6,6800) xbox,ybox,zbox,scal1 if (me.eq.0) write(6,6100) nrg(13),nrg(14), + nrg(17),nrg(21) if (me.eq.0) write(6,6900) nrg(9) endif c c accumulate energy statistics c if (istep.gt.equil_2) call estat c if (me.eq.0.and.l_step.and.mod(istep,1000).eq.0) then open(unit=2,file='step.cnt',status='unknown') write(2,*) 'proc : ',ga_pgroup_nodeid(ga_pgroup_get_world()) write(2,*) 'istep : ',istep write(2,6900) nrg(9) write(2,6100) nrg(13),nrg(14),nrg(17),nrg(21) write(2,6000) nrg(7) write(2,6300) nrg(3) write(2,6700) nrg(6),nrg(4),nrg(5) write(2,6800) xbox,ybox,zbox,scal1 write(2,7000) r_cluster write(2,7200) cl_lower write(2,7300) cl_upper close(2) endif 5000 continue return 6000 format(1x,'The instantaneous pressure is ',f12.4) 6100 format(1x,'Current energy statistics'/ + ' repulsion: ',f16.4,/ + ' dispersion: ',f16.4,/ + ' bonds: ',f16.4,/ + ' angles: ',f16.4) 6200 format(1x,'Statistics at time ',i6,' ps') 6300 format(1x,'The total energy is ',f12.4) 6700 format(' potential kinetic'/ + ' energy energy temperature'/, + 1x,3f13.3) 6800 format(1x,'The current simulation cell dimensions:'/ + ' x: ',f16.4,/ + ' y: ',f16.4,/ + ' z: ',f16.4,/ + ' s: ',f16.4) 6820 format(1x,'The current simulation cell dimensions:'/ + ' x: ',f16.4,/ + ' y: ',f16.4,/ + ' s: ',f16.4) 6900 format(1x,'The instantaneous value of the Hamiltonian is ',f12.4) 7000 format(1x,'The current value of confining sphere is ',f12.4) 7100 format(2f16.8) 7200 format(1x,'Lower bound of confining sphere ',f12.4) 7300 format(1x,'Upper bound of confining sphere ',f12.4) end ga-5-3/global/examples/md_cluster/mdinit.F0000640005473000001440000000577611274466357017444 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c c NOTICE c c This software is being made available for internal testing and c evaluation purposes only. This software is a pre-release test version c which has not yet been authenticated and cleared for publication. Adherence c to this notice may be necessary for the author, Battelle Memorial c Institute, to successfully assert copyright in and commercialize this c software. This software is not intended for duplication or distribution c to third parties without the permission of the Manager of Software c Products at Pacific Northwest Laboratory, Richland, Washington, 99352. c subroutine mdinit #include "common.fh" c double precision six,twelve,ac integer i,j c c turn of all cluster related functions c nocluster = .false. c c This subroutine sets up the potentials, assigns atomic masses c and finishes initializing the calculation c six = 6.0d00 twelve = 12.0d00 c c initialize timing and energy statistics arrays c do i = 1, MAXNRG nrg(i) = 0.0d00 anrg(i) = 0.0d00 anrg2(i) = 0.0d00 end do nrgcnt = 0 nrg2ct = 0 do i = 1, MAXTIM tmstat(i) = 0.0d00 end do failcount = 0 c c assign atom masses c do i = 1, antot mass(i) = amass(at(i)) end do c c Initialize cutoffs for potential arrays. c rcmax = 0.0d00 do i = 1, atnum do j = 1, atnum ac = acut(i,j) if (ac.gt.rcmax) rcmax = ac rcorr(i,j) = e12(i,j) / ac**12 dcorr(i,j) = -e6(i,j) / ac**6 if (icut.eq.1) then frcorr(i,j) = - twelve * e12(i,j) / ac**13 fdcorr(i,j) = six * e6(i,j) / ac**7 else frcorr(i,j) = 0.0d00 fdcorr(i,j) = 0.0d00 endif end do end do rcmax = rcmax + 1.0d00 c c calculate total number of degrees of freedom c nrg(1) = dble(3*atot-3) nrg(2) = nrg(1) / 2.0 c c Convert algorithm parameters into system units c istep = 0 tavg = 0.0d00 itavg = 0 tmstrt = 0 t_done = 0.0d00 t_rmndr = tau c c Initialize parameters for mass and temperature degrees of freedom c vol1 = xbox * ybox * zbox alen1(1) = xbox alen1(2) = ybox alen1(3) = zbox vol2 = 0.0d00 vol3 = 0.0d00 do j = 1, 3 alen2(j) = 0.0d00 alen3(j) = 0.0d00 end do scal1 = 1.0d00 scal2 = 0.0d00 scal3 = 0.0d00 c c Initialize bins accumulating r_cluster values c do j = 1, 10 do i = 1, mcbins r_distr(i,j) = 0 end do end do c c Initialize absolute coordinates c call cluster_center call update call force mbflg = .true. call cluster_com c tavg = 0.0d00 do j = 1, 3 do i = 1, antot ra(i,j,7) = ra(i,j,8) ra(i,j,3) = ra(i,j,4)/mass(i) end do end do c return end ga-5-3/global/examples/md_cluster/rdpar.F0000640005473000001440000003771111274466357017262 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c c NOTICE c c This software is being made available for internal testing and c evaluation purposes only. This software is a pre-release test version c which has not yet been authenticated and cleared for publication. Adherence c to this notice may be necessary for the author, Battelle Memorial c Institute, to successfully assert copyright in and commercialize this c software. This software is not intended for duplication or distribution c to third parties without the permission of the Manager of Software c Products at Pacific Northwest Laboratory, Richland, Washington, 99352. c subroutine rdpar #include "common.fh" double precision x,ran1 integer i,j integer me c c This subroutine reads in the molecular simulation parameters c me = ga_nodeid() if (me.eq.0) open (unit=5,file='md_lj.in',status='old') c c Line 1 c c nstep: total number of steps in simulation c c tau: time step increment c c nsc: number of special control steps c c iseed: random number seed (this should be a NEGATIVE c integer) c nstep = 0 tau = 0.0d00 nsc = 0 iseed = 0 if (me.eq.0) then read(5,*) nstep,tau,nsc,iseed endif call ga_igop(2,nstep,1,'+') call ga_dgop(3,tau,1,'+') call ga_igop(4,nsc,1,'+') call ga_igop(5,iseed,1,'+') c c Line 2 c c rcut: cutoff for use in neighbor list calculation c c ilist: number of steps taken before updating c neighbor list c c icut: cutoff parameter for potential c c (0) only potential set to zero at cutoff c c (1) potential and forces set to zero at cutoff c rcut = 0.0d00 ilist = 0 icut = 0 if (me.eq.0) then read(5,*) rcut,ilist,icut endif call ga_dgop(6,rcut,1,'+') call ga_igop(7,ilist,1,'+') call ga_igop(8,icut,1,'+') c c Line 3 c c dflalg: default algorithm c c 1: constant energy 3 point Gear algorithm c 2: constant pressure algorithm c 3: constant temperature algorithm (velocity scaling) c 4: constant temperature algorithm (Nose' dynmamics) c 5: constant pressure and temperature algorithm c 6: Boltzmann velocity step c 7: adjust volume to specified target volume c (available only as a special step) c 8: adjust kinetic energy based on average temperature c since last call to this step so that temperature c matches target temperature. c (available only as a special step) c 9: constant pressure and temperature algorithm with c independent box adjustments c 10: constant pressure and temperature algorithm with c independent box adjustments in only the x and y c dimensions c c dftmp: default temperature c c dfprs: default pressure c c dftm: default mass for temperature c c dfpm: default mass for pressure c dflalg = 0 dftmp = 0.0d00 dfprs = 0.0d00 dftm = 0.0d00 dfpm = 0.0d00 if (me.eq.0) then read(5,*) dflalg,dftmp,dfprs,dftm,dfpm endif call ga_igop(9,dflalg,1,'+') call ga_dgop(1,dftmp,1,'+') call ga_dgop(2,dfprs,1,'+') call ga_dgop(3,dftm,1,'+') call ga_dgop(4,dfpm,1,'+') c c Line 4.1 - 4.nsc c c special step control instructions c c isc(i,1): begining step for special instruction c c isc(i,2): final step for special instruction c c isc(i,3): increment for special instruction c c isc(i,4): stepping algorithm for special instruction c (see documentation on dflalg) c c rsc(i,1): temperature (in K) if temperature scaling or c Boltzmann algorithm is specified c c rsc(i,2): pressure if constant pressure c algorithms are specified. If volume adjustment c algorithm is specified then this is the target c volume in A**3. c c rsc(i,3): mass (in g A**2 /mole) for Nose temperature c algorithm c c rsc(i,4): mass (in g/(mole A**4)) for constant pressure c algorithm c do 100 i=1,nsc do j=1,4 isc(i,j) = 0.0d00 rsc(i,j) = 0.0d00 end do if (me.eq.0) then read(5,*) (isc(i,j),j=1,4),(rsc(i,j),j=1,4) endif do j=1,4 call ga_igop(4,isc(i,j),1,'+') call ga_dgop(5,rsc(i,j),1,'+') end do 100 continue c c Line 5 c c istart: startup format c 1: start from single configuration c 2: start from configuration plus velocity c c istop: write-out format c 1: single configuration c 2: configuration plus velocity c istart = 0 istop = 0 if (me.eq.0) then read(5,*) istart,istop endif call ga_igop(6,istart,1,'+') call ga_igop(7,istop,1,'+') c c Line 6 c c istat: frequency to print out simulation information c istat = 0 if (me.eq.0) then read(5,*) istat endif call ga_igop(8,istat,1,'+') c c Line 7 c c equil_1: number of steps in first equilibration regime c c equil_2: number of steps in second equilibration regime c c equil_3: number of steps in third equilibration regime c equil_1 = 0 equil_2 = 0 equil_3 = 0 if (me.eq.0) then read(5,*) equil_1, equil_2, equil_3 endif call ga_igop(9,equil_1,1,'+') call ga_igop(1,equil_2,1,'+') call ga_igop(2,equil_3,1,'+') window_1 = int(0.2d00*dble(equil_3-equil_2)) window_1 = equil_2 + window_1 window_2 = int(0.4d00*dble(equil_3-equil_2)) window_2 = window_1 + window_2 c c Line 7 c c cl_prssr: pressure that is applied to cluster c c mc_tmprtr: temperature used in Monte Carlo steps c cl_prssr = 0.0d00 mc_tmprtr = 0.0d00 if (me.eq.0) then read(5,*) cl_prssr, mc_tmprtr endif call ga_dgop(3,cl_prssr,1,'+') call ga_dgop(4,mc_tmprtr,1,'+') c c Line 8 c c mcfreq: frequency to apply Monte Carlo step on radius c c mcbins: number of bins to accumulate radius in c mcfreq = 0 mcbins = 0 if (me.eq.0) then read(5,*) mcfreq, mcbins endif call ga_igop(7,mcfreq,1,'+') call ga_igop(8,mcbins,1,'+') c if (me.eq.0) close(5) c c Write out simulation information to output file c if (me.eq.0.and.l_stdio) then write(6,1300) nstep write(6,1400) 1000.0 * tau write(6,4325) rcut write(6,4350) ilist if (icut.eq.0) then write(6,4400) else write(6,4420) endif write(6,1500) dflalg write(6,1600) write(6,1700) dftmp write(6,1800) dfprs write(6,1900) dftm write(6,2000) dfpm write(6,2100) do 300 i = 1, nsc if (i.eq.1) then write(6,2200) else if (isc(i-1,4).eq.7) write(6,2200) endif if (isc(i,4).ne.7) then write(6,2300) (isc(i,j),j=1,4),(rsc(i,j),j=1,4) else write(6,2400) write(6,2500) (isc(i,j),j=1,4) write(6,2600) rsc(i,1) write(6,2700) rsc(i,2) endif 300 continue write(6,3400) istat write(6,3800) mcfreq write(6,3500) equil_1 write(6,3600) equil_2 write(6,3700) equil_3 if (istart.eq.1) then write(6,2800) else write(6,2900) endif if (istop.eq.1) then write(6,3000) else write(6,3100) endif write(6,3200) iseed write(6,4500) ga_pgroup_nodeid(ga_pgroup_get_world()) endif iseed = iseed - 10*me x = ran1(iseed) r_cluster = 0.0d00 mc_cnt = 0 c return 1300 format('Total number of steps in simulation :',i9) 1400 format('Time step interval :' + ,f16.6) 1500 format('Default algorithm :',i9) 1600 format(' Default algorithm parameters ') 1700 format(' Default temperature :' + ,f16.6) 1800 format(' Default pressure :' + ,f16.6) 1900 format(' Default temperature mass :' + ,f16.6) 2000 format(' Default pressure mass :' + ,f16.6) 2100 format('Special step instructions:') 2200 format(' begin end incrmt algrthm T P ', +'T mass P mass ') 2300 format(4i8,2f8.3,1pe9.2,1pe9.2) 2400 format(' begin end incrmt algrthm') 2500 format(4i8) 2600 format(' Temperature for volume adjustment :' + ,f16.6) 2700 format(' Target volume for volume adjustment :' + ,f16.6) 2800 format('Initial configuration is coordinates only') 2900 format('Initial configuration is coordinates and velocities') 3000 format('Final configuration is coordinates only') 3100 format('Final configuration is coordinates and velocities') 3200 format('Random number seed :',i9) 3400 format('Frequency to print out simulation information :',i9) 3500 format('Number of steps in first equilibration regime :',i9) 3600 format('Number of steps in second equilibration regime :',i9) 3700 format('Number of steps in third equilibration regime :',i9) 3800 format('Frequency to take Monte Carlo step :',i9) 4325 format('Cutoff distance :', + f16.6) 4350 format('Neighbor list update frequency :',i9) 4400 format('Potential set to zero at cutoff distance') 4420 format('Potential and forces set to zero at cutoff distance') 4500 format('Writing from node :',i9) end c subroutine rdcfg #include "common.fh" c double precision scl,gasdev integer inode,icnt,i,j,k,pnum,ilast,ifirst,me character*32 filename c c This subroutine reads in the initial coordinates of all atoms in c the system. First determine which coordinates each processor c should read. c me = ga_nodeid() pnum = ga_nnodes() c c clean up everything c atot = 0 ctot = 0 antot = 0 do k = 1, 8 do j = 1, 3 do i = 1, MAXAT ra(i,j,k) = 0.0d00 end do end do end do do i = 1, MAXAT mass(i) = 0.0d00 at(i) = 0 aidx(i) = 0 c xcrd(i) = 0.0d00 ycrd(i) = 0.0d00 zcrd(i) = 0.0d00 xfrc(i) = 0.0d00 yfrc(i) = 0.0d00 zfrc(i) = 0.0d00 xacc(i) = 0.0d00 yacc(i) = 0.0d00 zacc(i) = 0.0d00 mbuf(i) = 0.0d00 bat(i) = 0 bidx(i) = 0 end do btot = 0 c if (task_id.lt.10) then write(filename,100) task_id else if (task_id.ge.10.and.task_id.lt.100) then write(filename,101) task_id else if (task_id.ge.100.and.task_id.lt.1000) then write(filename,102) task_id else if (task_id.ge.1000.and.task_id.lt.10000) then write(filename,103) task_id endif 100 format('md.cfg',i1) 101 format('md.cfg',i2) 102 format('md.cfg',i3) 103 format('md.cfg',i4) atot = 0 if (me.eq.0) then open (unit=2,file=filename,status='old') read(2,*) atot close(2) endif call ga_igop(5,atot,1,'+') ilast = nint(dble((me+1)*atot)/dble(pnum)) ifirst = nint(dble(me*atot)/dble(pnum)) ifirst = ifirst + 1 c c read in portions of MD configuration on each node c do inode = 0, pnum - 1 call ga_sync() if (me.eq.inode) then open (unit=2,file=filename,status='old') c read(2,*) atot read(2,*) xbox,ybox,zbox xbox2 = xbox/2.0d00 ybox2 = ybox/2.0d00 zbox2 = zbox/2.0d00 c cl_lower = 0.0d00 if (xbox.lt.ybox.and.xbox.lt.zbox) then cl_upper = xbox2 else if (ybox.lt.xbox.and.ybox.lt.zbox) then cl_upper = ybox2 else cl_upper = zbox2 endif mc_step = (cl_upper-cl_lower)/dble(mcbins) c icnt = 0 if (istart.eq.1.or.(.not.l_oldcfg)) then do i = 1, ilast if (i.lt.ifirst) then read(2,*) else icnt = icnt + 1 read(2,*) at(icnt),(ra(icnt,j,1),j=1,3) if (at(icnt).eq.2) ctot = ctot + 1 c c generate atomic velocities from a Maxwell-Boltzmann distribution c do j = 1, 3 scl = sqrt(dftmp / amass(at(icnt))) ra(icnt,j,2) = scl * gasdev(0) end do aidx(icnt) = i endif end do else do i = 1, ilast if (i.lt.ifirst) then read(2,*) else icnt = icnt + 1 read(2,*) at(icnt),(ra(icnt,j,1),j=1,3), + (ra(icnt,j,2),j=1,3) if (at(icnt).eq.2) ctot = ctot + 1 aidx(icnt) = i endif end do endif close(2) endif end do antot = icnt call ga_igop(9,ctot,1,'+') c if (me.eq.0.and.l_stdio) then write(6,1100) atot write(6,1000) xbox,ybox,zbox endif c c initialize absolute coordinates c do j = 1, 3 do i = 1, antot ra(i,j,6) = ra(i,j,1) end do end do c call fixper c return 1000 format('The initial box size parameters are '/ + ' x dimension = ',f9.4,' A'/ + ' y dimension = ',f9.4,' A'/ + ' z dimension = ',f9.4,' A') 1100 format('The total number of atoms in simulation :',i9) end c subroutine atomin #include "common.fh" c double precision epsln,sigma integer i,j,ipairs,ip,ktrnc integer me logical ichk(50,50) c c This subroutine reads in atomic parameters from a parameter c file. These parameters will be used to construct the c system potential function. c me = ga_nodeid() do i = 1, 50 do j = 1, 50 ichk(i,j) = .false. end do end do c if (me.eq.0) then open(unit=2,file='atom.inp',status='old') endif c if (me.eq.0) then read (2,*) amass(1) read (2,*) amass(2) read (2,*) amass(3) read (2,*) amass(4) atnum = 4 else amass(1) = 0.0d00 amass(2) = 0.0d00 amass(3) = 0.0d00 amass(4) = 0.0d00 atnum = 0 endif call ga_dgop(1,amass(1),4,'+') call ga_igop(2,atnum,1,'+') c c read in atomic parameters c if (me.eq.0) then read(2,*) ipairs else ipairs = 0 endif call ga_igop(3,ipairs,1,'+') c do 100 ip = 1, ipairs i = 0 j = 0 ktrnc = 0 epsln = 0.0d00 sigma = 0.0d00 if (me.eq.0) then read (2,*) i,j,ktrnc,epsln,sigma endif call ga_igop(1,i,1,'+') call ga_igop(2,j,1,'+') call ga_igop(3,ktrnc,1,'+') call ga_dgop(4,epsln,1,'+') call ga_dgop(5,sigma,1,'+') ichk(i,j) = .true. if (i.ne.j) ichk(j,i) = .true. e12(i,j) = 4.0d00*epsln*sigma**12 e6(i,j) = 4.0d00*epsln*sigma**6 if (i.ne.j) e12(j,i) = e12(i,j) if (i.ne.j) e6(j,i) = e6(i,j) if (ktrnc.eq.1) then acut(i,j) = exp(log(2.0d00)/6.0d00)*sigma acut(j,i) = exp(log(2.0d00)/6.0d00)*sigma else acut(i,j) = rcut * sigma acut(j,i) = rcut * sigma endif acut2(i,j) = acut(i,j)**2 acut2(j,i) = acut(j,i)**2 100 continue c if (me.eq.0) close(2) return end ga-5-3/global/examples/md_cluster/gather.F0000640005473000001440000004346111274466357017423 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif subroutine gather #include "common.fh" c double precision xmax,ymax,zmax,xmin,ymin,zmin double precision tbeg,wraptime integer snode,rnode,pnum,idx,idy,idz,ipx,ipy,ipz integer i,is,ig,inx,iny,inz,stot,inode logical nolist c c This subroutine gathers the coordinates of all particles on c neighboring processors that lie within an interaction distance c of the domain boundaries corresponding to the local processor c tbeg = wraptime() c if (istep.eq.0.or.(mod(istep,ilist).eq.0.and. + t_rmndr.eq.0.0d00)) then nolist = .true. else nolist = .false. endif c pnum = ga_nnodes() call factor(pnum,idx,idy,idz) inode = ga_nodeid() call i_proc_to_xyz(inode,ipx,ipy,ipz,idx,idy,idz) c if (task_id.gt.3) then c write(6,*) ga_pgroup_nodeid(ga_pgroup_get_world()), c + 'Nolist is ',nolist c write(6,157) ga_pgroup_nodeid(ga_pgroup_get_world()), c + idx,idy,idz c 157 format(i3,' Proc dimensions are ',3i6) c endif c c determine local boundaries c xmax = xbox*dble(ipx+1)/dble(idx) ymax = ybox*dble(ipy+1)/dble(idy) zmax = zbox*dble(ipz+1)/dble(idz) xmin = xbox*dble(ipx)/dble(idx) ymin = ybox*dble(ipy)/dble(idy) zmin = zbox*dble(ipz)/dble(idz) xmax = xmax - xbox2 ymax = ymax - ybox2 zmax = zmax - zbox2 xmin = xmin - xbox2 ymin = ymin - ybox2 zmin = zmin - zbox2 c btot = 0 c c Send particles along x-axis. Gather all particles that are within c an interaction distance of the x-boundaries and send them to the c adjacent processors c if (idx.eq.2) then c c both boundaries are adjacent to boundaries on next processor c stot = 0 if (nolist) then ixgru = 0 do i = 1, antot if (xmax-ra(i,1,1).lt.rcmax.or. + (ra(i,1,1)-xmin).lt.rcmax) then ixgru = ixgru + 1 xgru(ixgru) = i stot = stot + 1 is = btot+stot xcrd(is) = ra(i,1,1) ycrd(is) = ra(i,2,1) zcrd(is) = ra(i,3,1) bidx(is) = aidx(i) bat(is) = at(i) endif end do else do i = 1, ixgru ig = xgru(i) stot = stot + 1 is = btot+stot xcrd(is) = ra(ig,1,1) ycrd(is) = ra(ig,2,1) zcrd(is) = ra(ig,3,1) bidx(is) = aidx(ig) bat(is) = at(ig) end do endif c c send boundary layer particles to next buffer c inx = ipx - 1 if (inx.eq.-1) inx = idx - 1 call i_xyz_to_proc(rnode,inx,ipy,ipz,idx,idy,idz) call gather_buf(rnode,stot) elseif (idx.gt.2) then c c each boundary is adjacent to a different processor c stot = 0 if (nolist) then ixgru = 0 do i = 1, antot if (xmax-ra(i,1,1).lt.rcmax) then ixgru = ixgru + 1 xgru(ixgru) = i stot = stot + 1 is = btot+stot xcrd(is) = ra(i,1,1) ycrd(is) = ra(i,2,1) zcrd(is) = ra(i,3,1) bidx(is) = aidx(i) bat(is) = at(i) endif end do else do i = 1, ixgru ig = xgru(i) stot = stot + 1 is = btot+stot xcrd(is) = ra(ig,1,1) ycrd(is) = ra(ig,2,1) zcrd(is) = ra(ig,3,1) bidx(is) = aidx(ig) bat(is) = at(ig) end do endif c c send boundary layer particles to next buffer c inx = ipx - 1 if (inx.eq.-1) inx = idx - 1 call i_xyz_to_proc(rnode,inx,ipy,ipz,idx,idy,idz) call gather_buf(rnode,stot) c stot = 0 if (nolist) then ixgrd = 0 do i = 1, antot if (ra(i,1,1)-xmin.lt.rcmax) then ixgrd = ixgrd + 1 xgrd(ixgrd) = i stot = stot + 1 is = btot+stot xcrd(is) = ra(i,1,1) ycrd(is) = ra(i,2,1) zcrd(is) = ra(i,3,1) bidx(is) = aidx(i) bat(is) = at(i) endif end do else do i = 1, ixgrd ig = xgrd(i) stot = stot + 1 is = btot+stot xcrd(is) = ra(ig,1,1) ycrd(is) = ra(ig,2,1) zcrd(is) = ra(ig,3,1) bidx(is) = aidx(ig) bat(is) = at(ig) end do endif c c send boundary layer particles to next buffer c inx = ipx + 1 if (inx.eq.idx) inx = 0 call i_xyz_to_proc(rnode,inx,ipy,ipz,idx,idy,idz) call gather_buf(rnode,stot) endif c c repeat for y axis c if (idy.eq.2) then c c both boundaries are adjacent to boundaries on next processor c stot = 0 if (nolist) then iygru = 0 do i = 1, antot if ((ymax-ra(i,2,1).lt.rcmax.or. + (ra(i,2,1)-ymin).lt.rcmax)) then iygru = iygru + 1 ygru(iygru) = i stot = stot + 1 is = btot+stot xcrd(is) = ra(i,1,1) ycrd(is) = ra(i,2,1) zcrd(is) = ra(i,3,1) bidx(is) = aidx(i) bat(is) = at(i) endif end do else do i = 1, iygru ig = ygru(i) stot = stot + 1 is = btot+stot xcrd(is) = ra(ig,1,1) ycrd(is) = ra(ig,2,1) zcrd(is) = ra(ig,3,1) bidx(is) = aidx(ig) bat(is) = at(ig) end do endif c if (nolist) then iygbu = 0 do i = 1, btot if ((ymax-ycrd(i).lt.rcmax.or. + (ycrd(i)-ymin).lt.rcmax)) then iygbu = iygbu + 1 ygbu(iygbu) = i stot = stot + 1 is = btot+stot xcrd(is) = xcrd(i) ycrd(is) = ycrd(i) zcrd(is) = zcrd(i) bidx(is) = bidx(i) bat(is) = bat(i) endif end do else do i = 1, iygbu ig = ygbu(i) stot = stot + 1 is = btot+stot xcrd(is) = xcrd(ig) ycrd(is) = ycrd(ig) zcrd(is) = zcrd(ig) bidx(is) = bidx(ig) bat(is) = bat(ig) end do endif c c send boundary layer particles to next buffer c iny = ipy - 1 if (iny.eq.-1) iny = idy - 1 call i_xyz_to_proc(rnode,ipx,iny,ipz,idx,idy,idz) call gather_buf(rnode,stot) elseif (idy.gt.2) then c c each boundary is adjacent to a different processor c stot = 0 if (nolist) then iygru = 0 do i = 1, antot if (ymax-ra(i,2,1).lt.rcmax) then iygru = iygru + 1 ygru(iygru) = i stot = stot + 1 is = btot+stot xcrd(is) = ra(i,1,1) ycrd(is) = ra(i,2,1) zcrd(is) = ra(i,3,1) bidx(is) = aidx(i) bat(is) = at(i) endif end do else do i = 1, iygru ig = ygru(i) stot = stot + 1 is = btot+stot xcrd(is) = ra(ig,1,1) ycrd(is) = ra(ig,2,1) zcrd(is) = ra(ig,3,1) bidx(is) = aidx(ig) bat(is) = at(ig) end do endif c if (nolist) then iygbu = 0 do i = 1, btot if (ymax-ycrd(i).lt.rcmax) then iygbu = iygbu + 1 ygbu(iygbu) = i stot = stot + 1 is = btot+stot xcrd(is) = xcrd(i) ycrd(is) = ycrd(i) zcrd(is) = zcrd(i) bidx(is) = bidx(i) bat(is) = bat(i) endif end do else do i = 1, iygbu ig = ygbu(i) stot = stot + 1 is = btot+stot xcrd(is) = xcrd(ig) ycrd(is) = ycrd(ig) zcrd(is) = zcrd(ig) bidx(is) = bidx(ig) bat(is) = bat(ig) end do endif c c send boundary layer particles to next buffer c iny = ipy - 1 if (iny.eq.-1) iny = idy - 1 call i_xyz_to_proc(rnode,ipx,iny,ipz,idx,idy,idz) call gather_buf(rnode,stot) c stot = 0 if (nolist) then iygrd = 0 do i = 1, antot if (ra(i,2,1)-ymin.lt.rcmax) then iygrd = iygrd + 1 ygrd(iygrd) = i stot = stot + 1 is = btot+stot xcrd(is) = ra(i,1,1) ycrd(is) = ra(i,2,1) zcrd(is) = ra(i,3,1) bidx(is) = aidx(i) bat(is) = at(i) endif end do else do i = 1, iygrd ig = ygrd(i) stot = stot + 1 is = btot+stot xcrd(is) = ra(ig,1,1) ycrd(is) = ra(ig,2,1) zcrd(is) = ra(ig,3,1) bidx(is) = aidx(ig) bat(is) = at(ig) end do endif c if (nolist) then iygbd = 0 do i = 1, btot if (ycrd(i)-ymin.lt.rcmax.and.ycrd(i).gt.ymin) then iygbd = iygbd + 1 ygbd(iygbd) = i stot = stot + 1 is = btot+stot xcrd(is) = xcrd(i) ycrd(is) = ycrd(i) zcrd(is) = zcrd(i) bidx(is) = bidx(i) bat(is) = bat(i) endif end do else do i = 1, iygbd ig = ygbd(i) stot = stot + 1 is = btot+stot xcrd(is) = xcrd(ig) ycrd(is) = ycrd(ig) zcrd(is) = zcrd(ig) bidx(is) = bidx(ig) bat(is) = bat(ig) end do endif c c send boundary layer particles to next buffer c iny = ipy + 1 if (iny.eq.idy) iny = 0 call i_xyz_to_proc(rnode,ipx,iny,ipz,idx,idy,idz) call gather_buf(rnode,stot) endif c c repeat for z axis c if (idz.eq.2) then c c both boundaries are adjacent to boundaries on next processor c stot = 0 if (nolist) then izgru = 0 do i = 1, antot if ((zmax-ra(i,3,1).lt.rcmax.or. + ra(i,3,1)-zmin.lt.rcmax)) then izgru = izgru + 1 zgru(izgru) = i stot = stot + 1 is = btot+stot xcrd(is) = ra(i,1,1) ycrd(is) = ra(i,2,1) zcrd(is) = ra(i,3,1) bidx(is) = aidx(i) bat(is) = at(i) endif end do else do i = 1, izgru ig = zgru(i) stot = stot + 1 is = btot+stot xcrd(is) = ra(ig,1,1) ycrd(is) = ra(ig,2,1) zcrd(is) = ra(ig,3,1) bidx(is) = aidx(ig) bat(is) = at(ig) end do endif c if (nolist) then izgbu = 0 do i = 1, btot if ((zmax-zcrd(i).lt.rcmax.or. + zcrd(i)-zmin.lt.rcmax)) then izgbu = izgbu + 1 zgbu(izgbu) = i stot = stot + 1 is = btot+stot xcrd(is) = xcrd(i) ycrd(is) = ycrd(i) zcrd(is) = zcrd(i) bidx(is) = bidx(i) bat(is) = bat(i) bidx(is) = bidx(i) bat(is) = bat(i) endif end do else do i = 1, izgbu ig = zgbu(i) stot = stot + 1 is = btot+stot xcrd(is) = xcrd(ig) ycrd(is) = ycrd(ig) zcrd(is) = zcrd(ig) bidx(is) = bidx(ig) bat(is) = bat(ig) end do endif c c send boundary layer particles to next buffer c inz = ipz - 1 if (inz.eq.-1) inz = idz - 1 call i_xyz_to_proc(rnode,ipx,ipy,inz,idx,idy,idz) call gather_buf(rnode,stot) elseif (idz.gt.2) then c c each boundary is adjacent to a different processor c stot = 0 if (nolist) then izgru = 0 do i = 1, antot if (zmax-ra(i,3,1).lt.rcmax) then izgru = izgru + 1 zgru(izgru) = i stot = stot + 1 is = btot+stot xcrd(is) = ra(i,1,1) ycrd(is) = ra(i,2,1) zcrd(is) = ra(i,3,1) bidx(is) = aidx(i) bat(is) = at(i) endif end do else do i = 1, izgru ig = zgru(i) stot = stot + 1 is = btot+stot xcrd(is) = ra(ig,1,1) ycrd(is) = ra(ig,2,1) zcrd(is) = ra(ig,3,1) bidx(is) = aidx(ig) bat(is) = at(ig) end do endif c if (nolist) then izgbu = 0 do i = 1, btot if (zmax-zcrd(i).lt.rcmax) then izgbu = izgbu + 1 zgbu(izgbu) = i stot = stot + 1 is = btot+stot xcrd(is) = xcrd(i) ycrd(is) = ycrd(i) zcrd(is) = zcrd(i) bidx(is) = bidx(i) bat(is) = bat(i) endif end do else do i = 1, izgbu ig = zgbu(i) stot = stot + 1 is = btot+stot xcrd(is) = xcrd(ig) ycrd(is) = ycrd(ig) zcrd(is) = zcrd(ig) bidx(is) = bidx(ig) bat(is) = bat(ig) end do endif c c send boundary layer particles to next buffer c inz = ipz - 1 if (inz.eq.-1) inz = idz - 1 call i_xyz_to_proc(rnode,ipx,ipy,inz,idx,idy,idz) call gather_buf(rnode,stot) c stot = 0 if (nolist) then izgrd = 0 do i = 1, antot if (ra(i,3,1)-zmin.lt.rcmax) then izgrd = izgrd + 1 zgrd(izgrd) = i stot = stot + 1 is = btot+stot xcrd(is) = ra(i,1,1) ycrd(is) = ra(i,2,1) zcrd(is) = ra(i,3,1) bidx(is) = aidx(i) bat(is) = at(i) endif end do else do i = 1, izgrd ig = zgrd(i) stot = stot + 1 is = btot+stot xcrd(is) = ra(ig,1,1) ycrd(is) = ra(ig,2,1) zcrd(is) = ra(ig,3,1) bidx(is) = aidx(ig) bat(is) = at(ig) end do endif c if (nolist) then izgbd = 0 do i = 1, btot if (zcrd(i)-zmin.lt.rcmax.and.zcrd(i).gt.zmin) then izgbd = izgbd + 1 zgbd(izgbd) = i stot = stot + 1 is = btot+stot xcrd(is) = xcrd(i) ycrd(is) = ycrd(i) zcrd(is) = zcrd(i) bidx(is) = bidx(i) bat(is) = bat(i) endif end do else do i = 1, izgbd ig = zgbd(i) stot = stot + 1 is = btot+stot xcrd(is) = xcrd(ig) ycrd(is) = ycrd(ig) zcrd(is) = zcrd(ig) bidx(is) = bidx(ig) bat(is) = bat(ig) end do endif c c send boundary layer particles to next buffer c inz = ipz + 1 if (inz.eq.idz) inz = 0 call i_xyz_to_proc(rnode,ipx,ipy,inz,idx,idy,idz) call gather_buf(rnode,stot) endif c call heapsort(1) cdbg do i = 1, antot cdbg write(6,178) inode,i,aidx(i) cdbg end do cdbg 178 format(i3,' Gather aidx(',i3,'): ',i8) cdbg do i = 1, btot cdbg write(6,179) inode,i,bidx(i) cdbg end do cdbg 179 format(i3,' Gather bidx(',i3,'): ',i8) c tmstat(6) = tmstat(6) + wraptime() - tbeg c return end c subroutine gather_buf(rnode,stot) #include "common.fh" c double precision buf(3,MAXAT) integer ibuf(2,MAXAT) double precision tbeg,wraptime integer rnode,i integer me,one,ld2,ld3,is,rtot,stot c c Get data from processor rnode. The amount of data on the c current processor that actually needs to be accessed c represents stot particles. c me = ga_nodeid() one = 1 ld2 = 2 ld3 = 3 c c exchange the size of lists c tbeg = wraptime() c do i = btot+1, btot+stot is = i - btot buf(1,is) = xcrd(i) buf(2,is) = ycrd(i) buf(3,is) = zcrd(i) ibuf(1,is) = bidx(i) ibuf(2,is) = bat(i) end do c gsize_hi = gsize_lo(me) call nga_put(g_size,gsize_lo(me),gsize_hi,stot,one) gcoords_hi(1) = 3 gcoords_hi(2) = gcoords_lo(2,me) + stot - 1 if (stot.gt.0) call nga_put(g_coords,gcoords_lo(1,me), + gcoords_hi,buf,ld3) giat_hi(1) = 2 giat_hi(2) = giat_lo(2,me) + stot - 1 if (stot.gt.0) call nga_put(g_iat,giat_lo(1,me),giat_hi,ibuf,ld2) call ga_sync() gsize_hi = gsize_lo(rnode) call nga_get(g_size,gsize_lo(rnode),gsize_hi,rtot,one) gcoords_hi(2) = gcoords_lo(2,rnode) + rtot - 1 if (rtot.gt.0) call nga_get(g_coords,gcoords_lo(1,rnode), + gcoords_hi,buf,ld3) giat_hi(2) = giat_lo(2,rnode) + rtot - 1 if (rtot.gt.0) call nga_get(g_iat,giat_lo(1,rnode), + giat_hi,ibuf,ld2) c do i = btot+1, btot+rtot is = i - btot xcrd(i) = buf(1,is) ycrd(i) = buf(2,is) zcrd(i) = buf(3,is) bidx(i) = ibuf(1,is) bat(i) = ibuf(2,is) end do c call ga_sync() btot = btot+rtot c tmstat(11) = tmstat(11) + wraptime() - tbeg c return end ga-5-3/global/examples/md_cluster/tstats.F0000640005473000001440000001043311323151343017441 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c c NOTICE c c This software is being made available for internal testing and c evaluation purposes only. This software is a pre-release test version c which has not yet been authenticated and cleared for publication. Adherence c to this notice may be necessary for the author, Battelle Memorial c Institute, to successfully assert copyright in and commercialize this c software. This software is not intended for duplication or distribution c to third parties without the permission of the Manager of Software c Products at Pacific Northwest Laboratory, Richland, Washington, 99352. c function wraptime() double precision wraptime #if HAVE_ETIME real*4 etime,tarray(2) external etime c c This function returns the UNIX clock time in seconds. c It is designed to minimize the effort required to c convert the timing statistics in going from one c machine to another. c c SGI c wraptime = dble(etime(tarray)) #else c c NO TIME STATISTICS c wraptime = 0.0d00 #endif c return end c subroutine tmout #include "common.fh" double precision tmax(MAXTIM),tmin(MAXTIM) integer i,pnum c c This routine writes out the timekeeping statistics to c the output file 'md.out' c do i = 1, MAXTIM tmin(i) = tmstat(i) tmax(i) = tmstat(i) end do call ga_dgop(5,tmstat,MAXTIM,'+') call ga_dgop(5,tmax,MAXTIM,'max') call ga_dgop(5,tmin,MAXTIM,'min') pnum = ga_nnodes() do i = 1, MAXTIM tmstat(i) = tmstat(i)/dble(pnum) end do if (ga_nodeid().ne.0) return c if (l_stdio) then write(6,100) tmstat(1),tmin(1),tmax(1) write(6,200) tmstat(2),tmin(2),tmax(2) write(6,300) tmstat(3),tmin(3),tmax(3) write(6,400) tmstat(4),tmin(4),tmax(4) write(6,500) tmstat(5),tmin(5),tmax(5) write(6,2300) tmstat(23),tmin(23),tmax(23) write(6,550) tmstat(6)+tmstat(7)+tmstat(8) write(6,600) tmstat(6),tmin(6),tmax(6) write(6,700) tmstat(7),tmin(7),tmax(7) write(6,750) write(6,800) tmstat(8),tmin(8),tmax(8) write(6,2800) tmstat(28),tmin(28),tmax(28) write(6,1400) tmstat(14),tmin(14),tmax(14) write(6,850) tmstat(9)+tmstat(10) write(6,900) tmstat(9),tmin(9),tmax(9) write(6,1000) tmstat(10),tmin(10),tmax(10) write(6,1050) tmstat(11)+tmstat(12)+tmstat(13) write(6,1100) tmstat(11),tmin(11),tmax(11) write(6,1200) tmstat(12),tmin(12),tmax(12) write(6,1300) tmstat(13),tmin(13),tmax(13) write(6,1500) tmstat(15),tmin(15),tmax(15) write(6,1600) tmstat(16),tmin(16),tmax(16) endif c 100 format('Total elapsed time for calculation ',3f8.1,' (sec)') 200 format('Total time in force calculation ',3f8.1,' (sec)') 300 format(' Pairwise interactions ',3f8.1,' (sec)') 400 format(' Bending interactions ',3f8.1,' (sec)') 500 format(' Stretching interactions ',3f8.1,' (sec)') 550 format('Total time exchanging particle lists ',f8.1,' (sec)') 600 format(' Gathering list ',3f8.1,' (sec)') 700 format(' Scattering list ',3f8.1,' (sec)') 750 format(' Updating lists ',3f8.1,' (sec)') 800 format(' Coordinates ',3f8.1,' (sec)') 850 format('Total time sorting lists ',f8.1,' (sec)') 900 format(' Sorting local list ',3f8.1,' (sec)') 1000 format(' Sorting buffer list ',3f8.1,' (sec)') 1050 format('Total time sending messages ',f8.1,' (sec)') 1100 format(' Gather ',3f8.1,' (sec)') 1200 format(' Scatter ',3f8.1,' (sec)') 1300 format(' Update ',3f8.1,' (sec)') 1400 format(' Angles ',3f8.1,' (sec)') 1500 format('Total time calculating stress tensor ',3f8.1,' (sec)') 1600 format('Total time in scatter synchronization ',3f8.1,' (sec)') 2300 format('Total time constructing neighbor list ',3f8.1,' (sec)') 2800 format(' Bonds ',3f8.1,' (sec)') c return end ga-5-3/global/examples/md_cluster/hash.F0000640005473000001440000000250311274466357017064 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif subroutine clear_hash #include "common.fh" integer i c c Clear all information from hash tables prior to setting new tables c do i = 1, MAXAT link_a(i) = 0 top_a(i) = 0 hash_key_a(i) = 0 hash_value_a(i) = 0 end do a_cnt = 0 return end c subroutine add_hash_a(igx, idx) #include "common.fh" integer igx, idx, ifunc, itmp c c Add an element to hash table A, which tracks local particles. c Start by computing hash function value of idx. c ifunc = mod(igx,MAXAT) + 1 c c Store value in a linked list c a_cnt = a_cnt+1 itmp = top_a(ifunc) top_a(ifunc) = a_cnt link_a(a_cnt) = itmp hash_key_a(a_cnt) = igx hash_value_a(a_cnt) = idx return end c integer function get_hash_a(igx) #include "common.fh" integer igx, ifunc, itmp, jtmp c c Return the local index of a locally held particle from the global c index. Start by computing the hash function value of idx. c ifunc = mod(igx,MAXAT) + 1 get_hash_a = 0 itmp = top_a(ifunc) do while (hash_key_a(itmp).ne.igx.and.itmp.gt.0) itmp = link_a(itmp) end do if (itmp.gt.0) then get_hash_a = hash_value_a(itmp) endif return end ga-5-3/global/examples/md_cluster/ran3.F0000640005473000001440000000305211274466357017004 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c c This is really ran3 c function ran1(idum) c c Random number generator from Numerical Recipes c c implicit real*4(m) c parameter (mbig=4000000.,mseed=1618033.,mz=0.,fac=2.5e-7) implicit real*8 (a-h,o-z) parameter (mbig=1000000000,mseed=161803398,mz=0,fac=1.e-9) dimension ma(55) data iff /0/ save iff, mj, ma, mk, inext, inextp if(idum.lt.0.or.iff.eq.0)then iff=1 mj=mseed-iabs(idum) mj=mod(mj,mbig) ma(55)=mj mk=1 do 11 i=1,54 ii=mod(21*i,55) ma(ii)=mk mk=mj-mk if(mk.lt.mz)mk=mk+mbig mj=ma(ii) 11 continue do 13 k=1,4 do 12 i=1,55 ma(i)=ma(i)-ma(1+mod(i+30,55)) if(ma(i).lt.mz)ma(i)=ma(i)+mbig 12 continue 13 continue inext=0 inextp=31 idum=1 endif inext=inext+1 if(inext.eq.56)inext=1 inextp=inextp+1 if(inextp.eq.56)inextp=1 mj=ma(inext)-ma(inextp) if(mj.lt.mz)mj=mj+mbig ma(inext)=mj ran1=mj*fac return end c function gasdev(idum) implicit real*8 (a-h,o-z) data iset/0/ save iset, gset if (iset.eq.0) then 1 v1=2.*ran1(idum)-1. v2=2.*ran1(idum)-1. r=v1**2+v2**2 if(r.ge.1.)go to 1 fac=sqrt(-2.*log(r)/r) gset=v1*fac gasdev=v2*fac iset=1 else gasdev=gset iset=0 endif return end ga-5-3/global/examples/md_cluster/newcfg.F0000640005473000001440000001435211274466357017417 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif subroutine newcfg(natom1,natom2,itask,rcluster,rcut) implicit none integer natom1, natom2, itask integer n, nc, nx, ny, nz, ntot parameter ( nc = 50, n = 2*nc ** 3) double precision lj(3,2) double precision cell,cell2,mult,xadd,yadd,zadd double precision multx,multy,multz,cmx,cmy,cmz double precision x,y,z,dx,dy,dz,rcluster,r,rx,ry,rz,rmax double precision volume, radius, pi, rcut double precision coords(n, 3) integer i, j, ix, iy, iz, iref, m, mp, mp1, mp4 integer one,two,nside, irad, ixcent, iycent, izcent integer ixmin,ixmax,iymin,iymax,izmin,izmax integer fill(nc,nc,nc,2), icnt character*32 filename c c ******************************************************* c mult = 1.5d00 lj(1,1) = 0.0d00 lj(2,1) = 0.0d00 lj(3,1) = 0.0d00 lj(1,2) = mult/2.0d00 lj(2,2) = mult/2.0d00 lj(3,2) = mult/2.0d00 c one = 1 two = 2 c if (itask.lt.10) then write(filename,100) itask else if (itask.ge.10.and.itask.lt.100) then write(filename,101) itask else if (itask.ge.100.and.itask.lt.1000) then write(filename,102) itask else if (itask.ge.1000.and.itask.lt.10000) then write(filename,103) itask endif 100 format('md.cfg',i1) 101 format('md.cfg',i2) 102 format('md.cfg',i3) 103 format('md.cfg',i4) open (unit=2,file=filename,status='unknown',form='formatted') c nside = nint((0.5d00*dble(natom1+natom2))**(1.0d00/3.0d00)) if (2*nside**3.lt.natom1+natom2) nside = nside+1 pi = 4.0d00*atan(1.0d00) volume = 0.5d00*dble(natom2)*mult**3 radius = 3.0d00*volume/(4.0d00*pi) radius = radius**(1.0d00/3.0d00) irad = int(radius/mult) + 1 if (2*irad.ge.nside) nside = 2*irad+2 do ix = 1, nside do iy = 1, nside do iz = 1, nside fill(ix,iy,iz,1) = 0 fill(ix,iy,iz,2) = 0 end do end do end do multx = mult * float(nside) multy = mult * float(nside) multz = mult * float(nside) cell = mult cell2 = 0.5d00 * cell dx = multx/float(nside) dy = multy/float(nside) dz = multz/float(nside) volume = 0.5d00*dble(natom2)*mult**3 radius = 3.0d00*volume/(4.0d00*pi) radius = radius**(1.0d00/3.0d00) irad = int(radius/mult) + 1 ixcent = nside/2 iycent = nside/2 izcent = nside/2 ixmin = ixcent - irad ixmax = ixcent + irad 300 icnt = 0 do ix = ixmin, ixmax iy = int(sqrt(dble(irad)**2-dble(ix-ixcent)**2)) iymin = iycent - iy iymax = iycent + iy do iy = iymin, iymax iz = int(sqrt(dble(irad)**2-dble(ix-ixcent)**2 + -dble(iy-iycent)**2)) izmin = izcent - iz izmax = izcent + iz do iz = izmin, izmax xadd = dx*float(ix-1) - multx/2.0d00 yadd = dy*float(iy-1) - multy/2.0d00 zadd = dz*float(iz-1) - multz/2.0d00 if (fill(ix,iy,iz,1).eq.0.and.icnt.lt.natom2) then icnt = icnt + 1 coords(natom1+icnt,1) = xadd + lj(1,1) coords(natom1+icnt,2) = yadd + lj(2,1) coords(natom1+icnt,3) = zadd + lj(3,1) fill(ix,iy,iz,1) = 1 endif if (fill(ix,iy,iz,2).eq.0.and.icnt.lt.natom2) then icnt = icnt + 1 coords(natom1+icnt,1) = xadd + lj(1,2) coords(natom1+icnt,2) = yadd + lj(2,2) coords(natom1+icnt,3) = zadd + lj(3,2) fill(ix,iy,iz,2) = 1 endif end do end do end do if (icnt.lt.natom2) then irad = irad+1 go to 300 endif c c Find center of mass of cluster c rx = 0.0d00 ry = 0.0d00 rz = 0.0d00 do icnt = 1, natom2 rx = rx + coords(natom1+icnt,1) ry = ry + coords(natom1+icnt,2) rz = rz + coords(natom1+icnt,3) end do cmx = rx/dble(natom2) cmy = ry/dble(natom2) cmz = rz/dble(natom2) rmax = rmax + sqrt(dx**2+dy**2+dz**2) c c Find radius of cluster c rmax = 0.0d00 do icnt = 1, natom2 rx = coords(natom1+icnt,1) - cmx ry = coords(natom1+icnt,2) - cmy rz = coords(natom1+icnt,3) - cmz r = sqrt(rx**2 + ry**2 + rz**2) if (r.gt.rmax) rmax = r end do rmax = rmax + 0.1 c icnt = 0 do ix = 1, nside do iy = 1, nside do iz = 1, nside xadd = dx*float(ix-1) - multx/2.0d00 yadd = dy*float(iy-1) - multy/2.0d00 zadd = dz*float(iz-1) - multz/2.0d00 if (fill(ix,iy,iz,1).eq.0.and.icnt.lt.natom1) then icnt = icnt + 1 coords(icnt,1) = xadd + lj(1,1) coords(icnt,2) = yadd + lj(2,1) coords(icnt,3) = zadd + lj(3,1) fill(ix,iy,iz,1) = 1 endif if (fill(ix,iy,iz,2).eq.0.and.icnt.lt.natom1) then icnt = icnt + 1 coords(icnt,1) = xadd + lj(1,2) coords(icnt,2) = yadd + lj(2,2) coords(icnt,3) = zadd + lj(3,2) fill(ix,iy,iz,2) = 1 endif end do end do end do c rcluster = rmax c c If there are no atoms of type 1, then assume cluster is c isolated and set size to 100 LJ units c if (natom1.eq.0) then multx = 25.0 multy = 25.0 multz = 25.0 endif if (rcluster.lt.rcut) then rcluster = rcut endif write(2,2100) natom1+natom2 write(2,2000) multx,multy,multz,rcluster do i = 1, natom1 coords(i,1) = coords(i,1) - cmx coords(i,2) = coords(i,2) - cmy coords(i,3) = coords(i,3) - cmz write(2,200) one,(coords(i,j),j=1,3) end do do i = natom1+1, natom1+natom2 coords(i,1) = coords(i,1) - cmx coords(i,2) = coords(i,2) - cmy coords(i,3) = coords(i,3) - cmz write(2,200) two,(coords(i,j),j=1,3) end do c 200 format (i5,3f12.5) 2000 format (4f16.8) 2100 format (i8) close(2) return end ga-5-3/global/examples/md_cluster/mdout.F0000640005473000001440000001343111274466357017273 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c c NOTICE c c This software is being made available for internal testing and c evaluation purposes only. This software is a pre-release test version c which has not yet been authenticated and cleared for publication. Adherence c to this notice may be necessary for the author, Battelle Memorial c Institute, to successfully assert copyright in and commercialize this c software. This software is not intended for duplication or distribution c to third parties without the permission of the Manager of Software c Products at Pacific Northwest Laboratory, Richland, Washington, 99352. c subroutine mdout #include "common.fh" c integer pnum,idx,idy,idz,me c c This routine finishes off the calculation by writing c out accumulated information, final configurations etc. c pnum = ga_nnodes() me = ga_nodeid() call factor(pnum,idx,idy,idz) if (ga_nodeid().eq.0.and.l_stdio) then write(6,100) pnum write(6,200) idx,idy,idz write(6,300) failcount endif c call prtnrg call tmout call cluster_print_binr if (l_rst) call mdrst c return 100 format('Total number of processors used in simulation :',i9) 200 format('Processors configured as ',i2,' X ',i2,' X ',i2,' grid') 300 format('Total number of collision failures :',i9) end c subroutine header #include "common.fh" c integer oldstp save oldstp data oldstp /0/ c c this prints out the current MD time if time has c changed since the last call to this subroutine c if (ga_nodeid().ne.0) return if (istep.ne.oldstp.and.l_stdio) then write(6,1000) float(istep) * tau oldstp = istep endif return 1000 format(1x,'Statistics for MD time ',f16.4) end c subroutine mdrst #include "common.fh" c double precision x,y,z,rx,ry,rz double precision rbuf(3,MAXAT) integer i,inode,pnum,me,one,ld2,ld3 integer rptr,rnode,rtot,ibuf(2,MAXAT) character*32 filename c c This routine finishes off the calculation by writing c out accumulated information, final configurations etc. c c c Write out final configuration to file 'md.rst' c pnum = ga_nnodes() me = ga_nodeid() call sort c c write all coordinates and velocities to buffers c do i = 1, antot xcrd(i) = ra(i,1,1) ycrd(i) = ra(i,2,1) zcrd(i) = ra(i,3,1) xfrc(i) = ra(i,1,2) yfrc(i) = ra(i,2,2) zfrc(i) = ra(i,3,2) bidx(i) = aidx(i) bat(i) = at(i) end do btot = antot c c open file from node 0 and write out box size c if (task_id.lt.10) then write(filename,100) task_id else if (task_id.ge.10.and.task_id.lt.100) then write(filename,101) task_id else if (task_id.ge.100.and.task_id.lt.1000) then write(filename,102) task_id else if (task_id.ge.1000.and.task_id.lt.10000) then write(filename,103) task_id endif 100 format('md.rst',i1) 101 format('md.rst',i2) 102 format('md.rst',i3) 103 format('md.rst',i4) if (me.eq.0) then open(unit=10,file=filename,status='unknown') write(10,5400) atot write(10,5300) xbox,ybox,zbox,r_cluster endif c c get data from other nodes and write to md.rst c one = 1 ld2 = 2 ld3 = 3 c c exchange the size of lists and put coordinate data in c global arrays c rptr = gsize_lo(me) call nga_put(g_size,rptr,rptr,btot,one) c gcoords_hi(1) = 3 gcoords_hi(2) = gcoords_lo(2,me) + btot - 1 giat_hi(1) = 2 giat_hi(2) = giat_lo(2,me) + btot - 1 do i = 1, btot rbuf(1,i) = xcrd(i) rbuf(2,i) = ycrd(i) rbuf(3,i) = zcrd(i) ibuf(1,i) = bidx(i) ibuf(2,i) = bat(i) end do if (btot.gt.0) call nga_put(g_coords,gcoords_lo(1,me), + gcoords_hi,rbuf,ld3) if (btot.gt.0) call nga_put(g_iat,giat_lo(1,me), + giat_hi,ibuf,ld2) c gfrc_hi(1) = 3 gfrc_hi(2) = gfrc_lo(2,me) + btot - 1 do i = 1, btot rbuf(1,i) = xfrc(i) rbuf(2,i) = yfrc(i) rbuf(3,i) = zfrc(i) end do if (btot.gt.0) call nga_put(g_frc,gfrc_lo(1,me),gfrc_hi,rbuf,ld3) call ga_sync() c do inode = 0, pnum - 1 if (me.eq.0) then rptr = gsize_lo(inode) call nga_get(g_size,rptr,rptr,rtot,one) gcoords_hi(2) = gcoords_lo(2,inode) + rtot - 1 giat_hi(2) = giat_lo(2,inode) + rtot - 1 if (rtot.gt.0) call nga_get(g_coords,gcoords_lo(1,inode), + gcoords_hi,rbuf,ld3) if (rtot.gt.0) call nga_get(g_iat,giat_lo(1,inode), + giat_hi,ibuf,ld2) do i = 1, rtot xcrd(i) = rbuf(1,i) ycrd(i) = rbuf(2,i) zcrd(i) = rbuf(3,i) bidx(i) = ibuf(1,i) bat(i) = ibuf(2,i) end do gfrc_hi(2) = gfrc_lo(2,inode) + rtot - 1 if (rtot.gt.0) call nga_get(g_frc,gfrc_lo(1,inode), + gfrc_hi,rbuf,ld3) do i = 1, rtot xfrc(i) = rbuf(1,i) yfrc(i) = rbuf(2,i) zfrc(i) = rbuf(3,i) end do c do i = 1, rtot if (istop.eq.1) then write(10,5000) bat(i),xcrd(i),ycrd(i),zcrd(i) else write(10,5100) bat(i),xcrd(i),ycrd(i),zcrd(i), + xfrc(i),yfrc(i),zfrc(i) endif end do endif end do if (me.eq.0) close(10) c 5000 format (i8,3(1pe13.5)) 5100 format (i8,6(1pe13.5)) 5300 format (4(1pe16.8)) 5400 format (i8) c return end ga-5-3/global/examples/md_cluster/estats.F0000640005473000001440000002444311274466357017453 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c c NOTICE c c This software is being made available for internal testing and c evaluation purposes only. This software is a pre-release test version c which has not yet been authenticated and cleared for publication. Adherence c to this notice may be necessary for the author, Battelle Memorial c Institute, to successfully assert copyright in and commercialize this c software. This software is not intended for duplication or distribution c to third parties without the permission of the Manager of Software c Products at Pacific Northwest Laboratory, Richland, Washington, 99352. c subroutine estat #include "common.fh" c c This subroutine accumulates energy statistics for the simulation. c The averages are stored in the array anrg(). The contents of nrg() c and anrg() are listed below. Temporary values for the averages are c stored in tmpnrg() and the uncertainties are stored anrg2(). c Corresponding entries in anrg(), tmpnrg(), and anrg2() are all indexed c by the same variable. c c Contents of nrg() c c nrg(1): the total number of degrees of freedom in the system c c nrg(2): the total number of degrees of freedom in the system c times Rgas/2 c c nrg(3): the total energy of the system c c nrg(4): the total kinetic energy of the system c c nrg(5): temperature (in Kelvin) of the system c c nrg(6): potential energy of the system c c nrg(7): current pressure (in atmospheres) c c nrg(8): the total translational kinetic energy of the system c c nrg(9): the instantaneous value of the Hamiltonian c c nrg(10): the instantaneous value of the virial c c nrg(11): the instantaneous value of the Enthalpy c c nrg(12): the instantaneous coulomb energy of the system c c nrg(13): the instantaneous repulsion energy of the system c c nrg(14): the instantaneous dispersion energy of the system c c nrg(15): the virial contribution to the pressure (in atmospheres) c c nrg(16): the instantaneous torsional energy of the system c c nrg(17): instantaneous energy from harmonic oscillators c c nrg(18): x component of virial c c nrg(19): y component of virial c c nrg(20): z component of virial c c nrg(21): instantaneous energy from bond angle bends c c nrg(22): x component of total momentum c c nrg(23): y component of total momentum c c nrg(24): z component of total momentum c c nrg(25): total mass c c Contents of anrg(), tmpnrg(), and anrg2() c c anrg(1): the average total energy of the system c c anrg(2): the average total kinetic energy of the system c c anrg(3): the average temperature (in Kelvin) of the system c c anrg(4): the average potential energy of the system c c anrg(5): the average pressure (in atmospheres) c c anrg(6): the average total translational kinetic energy of the system c c anrg(7): the average value of the Hamiltonian c c anrg(8): the average value of the Enthalpy c c anrg(9): the average coulomb energy of the system c c anrg(10): the average repulsion energy of the system c c anrg(11): the average dispersion energy of the system c c anrg(12): the average x dimension of the system c c anrg(13): the average y dimension of the system c c anrg(14): the average z dimension of the system c c anrg(15): the average value of the time scaling parameter c c anrg(16): the average volume of the system c c anrg(17): mean square total energy c c anrg(18): mean square Hamiltonian c c anrg(19): mean square kinetic energy c c anrg(20): mean square potential energy c c anrg(21): mean square pressure (in atmospheres**2) c c anrg(22): mean square x dimension c c anrg(23): mean square y dimension c c anrg(24): mean square z dimension c c anrg(25): mean square scaling parameter c c anrg(26): mean square temperature c c anrg(27): mean square Enthalpy c c arng(28): the average torsional energy c c arng(29): the average harmonic oscillator energy c c arng(30): the average bond angle bend energy c nrgcnt = nrgcnt + 1 c anrg(1) = anrg(1) + nrg(3) anrg(2) = anrg(2) + nrg(4) anrg(3) = anrg(3) + nrg(5) anrg(4) = anrg(4) + nrg(6) anrg(5) = anrg(5) + nrg(7) anrg(6) = anrg(6) + nrg(8) anrg(7) = anrg(7) + nrg(9) anrg(8) = anrg(8) + nrg(11) anrg(9) = anrg(9) + nrg(12) anrg(10) = anrg(10) + nrg(13) anrg(11) = anrg(11) + nrg(14) anrg(12) = anrg(12) + xbox anrg(13) = anrg(13) + ybox anrg(14) = anrg(14) + zbox anrg(15) = anrg(15) + scal1 anrg(16) = anrg(16) + vol1 anrg(17) = anrg(17) + nrg(3)**2 anrg(18) = anrg(18) + nrg(9)**2 anrg(19) = anrg(19) + nrg(4)**2 anrg(20) = anrg(20) + nrg(6)**2 anrg(21) = anrg(21) + nrg(7)**2 anrg(22) = anrg(22) + xbox**2 anrg(23) = anrg(23) + ybox**2 anrg(24) = anrg(24) + zbox**2 anrg(25) = anrg(25) + scal1**2 anrg(26) = anrg(26) + nrg(5)**2 anrg(27) = anrg(27) + nrg(11)**2 anrg(28) = anrg(28) + nrg(16) anrg(29) = anrg(29) + nrg(17) anrg(30) = anrg(30) + nrg(21) c return end c subroutine prtnrg #include "common.fh" c double precision bstat,b2stat integer i,ibstat c if (nrgcnt.eq.0) return c do 25 i = 1, MAXNRG anrg(i) = anrg(i) / dble(nrgcnt) 25 continue c c call ga_dgop(3,bstat,1,'+') c call ga_dgop(3,b2stat,1,'+') c call ga_igop(3,ibstat,1,'+') c if (ga_nodeid().eq.0.and.l_stdio) then c if (ibstat.gt.0) bstat = bstat/dble(ibstat) c if (ibstat.gt.0) b2stat = b2stat/dble(ibstat) c b2stat = sqrt(abs(b2stat-bstat**2)) c write(6,50) write(6,100) anrg(1) write(6,200) anrg(2) write(6,300) anrg(3) c write(6,600) anrg(6) write(6,400) anrg(4) c write(6,900) anrg(9) write(6,1000) anrg(10) write(6,1100) anrg(11) c write(6,2800) anrg(28) write(6,2900) anrg(29) write(6,3000) anrg(30) write(6,500) anrg(5) write(6,700) anrg(7) write(6,800) anrg(8) c write(6,850) bstat write(6,1150) write(6,1200) anrg(12) write(6,1300) anrg(13) write(6,1400) anrg(14) write(6,1500) anrg(15) write(6,1600) anrg(16) write(6,1650) write(6,1700) sqrt(abs(anrg(17)-anrg(1)**2)) write(6,1800) sqrt(abs(anrg(18)-anrg(7)**2)) write(6,1900) sqrt(abs(anrg(19)-anrg(2)**2)) write(6,2000) sqrt(abs(anrg(20)-anrg(4)**2)) write(6,2600) sqrt(abs(anrg(26)-anrg(3)**2)) write(6,2700) sqrt(abs(anrg(27)-anrg(8)**2)) write(6,2100) sqrt(abs(anrg(21)-anrg(5)**2)) write(6,2200) sqrt(abs(anrg(22)-anrg(12)**2)) write(6,2300) sqrt(abs(anrg(23)-anrg(13)**2)) write(6,2400) + sqrt(abs(anrg(24)-anrg(14)**2)) write(6,2500) sqrt(abs(anrg(25)-anrg(15)**2)) write(6,2550) b2stat endif c 50 format('Average Energy statistics for simulation:') 100 format(' :',f16.4) 200 format(' :',f16.4) 300 format(' :',f16.4) 400 format(' :',f16.4) 500 format(' :',f16.4) 600 format(' :',f16.4) 700 format(' :',f16.4) 800 format(' :',f16.4) 850 format(' :',f16.4) 900 format(' :',f16.4) 1000 format(' :',f16.4) 1100 format(' :',f16.4) 1150 format('Average system parameters for simulation :') 1200 format(' :',f16.4) 1300 format(' :',f16.4) 1400 format(' :',f16.4) 1500 format(' :',f16.4) 1600 format(' :',f16.4) 1650 format('Root mean square fluctuations:') 1700 format(' Energy :',f16.4) 1800 format(' Hamiltonian :',f16.4) 1900 format(' Kinetic Energy :',f16.4) 2000 format(' Potential Energy :',f16.4) 2100 format(' Pressure :',f16.4) 2200 format(' X :',f16.4) 2300 format(' Y :',f16.4) 2400 format(' Z :',f16.4) 2500 format(' S :',f16.4) 2550 format(' Bond Length :',f16.4) 2600 format(' Temperature :',f16.4) 2700 format(' Enthalpy :',f16.4) 2800 format(' :',f16.4) 2900 format(' :',f16.4) 3000 format(' :',f16.4) return end c subroutine nrgsum #include "common.fh" c double precision rbuf(50) c c this subroutine does a global add on some of the quantities stored c in the array nrg() c rbuf(1) = nrg(3) rbuf(2) = nrg(4) rbuf(3) = nrg(6) rbuf(4) = nrg(8) rbuf(5) = nrg(9) rbuf(6) = nrg(10) rbuf(7) = nrg(11) rbuf(8) = nrg(12) rbuf(9) = nrg(13) rbuf(10) = nrg(14) rbuf(11) = nrg(17) rbuf(12) = nrg(21) rbuf(13) = nrg(22) rbuf(14) = nrg(23) rbuf(15) = nrg(24) rbuf(16) = nrg(25) rbuf(17) = nrg(15) c call ga_dgop(3,rbuf,20,'+') c nrg(3) = rbuf(1) nrg(4) = rbuf(2) nrg(6) = rbuf(3) nrg(8) = rbuf(4) nrg(9) = rbuf(5) nrg(10) = rbuf(6) nrg(11) = rbuf(7) nrg(12) = rbuf(8) nrg(13) = rbuf(9) nrg(14) = rbuf(10) nrg(17) = rbuf(11) nrg(21) = rbuf(12) nrg(22) = rbuf(13) nrg(23) = rbuf(14) nrg(24) = rbuf(15) nrg(25) = rbuf(16) nrg(15) = rbuf(17) c return end ga-5-3/global/examples/md_cluster/pairs.F0000640005473000001440000001612311274466357017262 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif subroutine pairs #include "common.fh" c integer MAXCL,MSKIN parameter (MAXCL=50,MSKIN=5) double precision savd(MAXAT),savr(MAXAT),ft(MAXAT,3) double precision rsqi,r6i,dedr,dedrd,dedrr,phid,phir double precision xu,yu,zu,xl,yl,zl,rcut2 double precision tprssr(MAXAT,3),a12(MAXAT),a6(MAXAT) double precision rct2sd,rsqcrt,rsq,b12(MAXAT),b6(MAXAT) double precision r2(MAXAT),dx(MAXAT),dy(MAXAT),dz(MAXAT) double precision br2(MAXAT),bdx(MAXAT),bdy(MAXAT),bdz(MAXAT) double precision xcl,ycl,zcl,xmax,ymax,zmax,xmin,ymin,zmin double precision rcp(MAXAT),dcp(MAXAT),brcp(MAXAT),bdcp(MAXAT) double precision one,six,twelve double precision rix,riy,riz double precision tbeg,wraptime integer acml(MAXAT),bacml(MAXAT) integer i,j,l,fat,lat,jp,jtmp,jat,ltot,bltot c if (istep.eq.0.or.(mod(istep,ilist).eq.0.and. + t_rmndr.eq.0.0d00)) call cell_list tbeg = wraptime() c c this subroutine calculates the forces on individual particles c due to the Van der Waals interactions c c calculate some parameters c one = 1.0d00 six = 6.0d00 twelve = 12.0d00 c c Primary loop over all local atoms c do i = 1, antot c c evaluate forces for both local and buffer atoms c fat = nafirst(i) lat = nalast(i) c c initialize temporary storage arrays c l = 0 do j = fat, lat l = l + 1 savr(l) = 0.0d00 savd(l) = 0.0d00 ft(l,1) = 0.0d00 ft(l,2) = 0.0d00 ft(l,3) = 0.0d00 tprssr(l,1) = 0.0d00 tprssr(l,2) = 0.0d00 tprssr(l,3) = 0.0d00 end do c jp = 0 do jat = fat, lat j = nblist(jat) jp = jp + 1 c acml(jp) = j c c calculate interatomic distances c dx(jp) = ra(i,1,6) - ra(j,1,6) dx(jp) = dx(jp) - xbox * anint(dx(jp) / xbox) dy(jp) = ra(i,2,6) - ra(j,2,6) dy(jp) = dy(jp) - ybox * anint(dy(jp) / ybox) dz(jp) = ra(i,3,6) - ra(j,3,6) dz(jp) = dz(jp) - zbox * anint(dz(jp) / zbox) c r2(jp) = dx(jp)**2 + dy(jp)**2 + dz(jp)**2 end do ltot = jp c c check displacements against cutoff c jp = 0 do 1200 j = 1, ltot rcut2 = acut2(at(i),at(acml(j))) if (r2(j).ge.rcut2) go to 1200 jp = jp + 1 jtmp = acml(j) acml(jp) = jtmp c r2(jp) = r2(j) c a12(jp) = e12(at(jtmp),at(i)) a6(jp) = e6(at(jtmp),at(i)) c dcp(jp) = -dcorr(at(jtmp),at(i)) rcp(jp) = -rcorr(at(jtmp),at(i)) c dx(jp) = dx(j) dy(jp) = dy(j) dz(jp) = dz(j) 1200 continue ltot = jp c c evaluate interaction between all local pairs c c do j = 1, ltot rsq = r2(j) rsqi = one / rsq r6i = rsqi * rsqi * rsqi c phir = a12(j) * r6i * r6i phid = -a6(j) * r6i savr(j) = savr(j) + phir + rcp(j) savd(j) = savd(j) + phid + dcp(j) dedrr = twelve * phir dedrd = six * phid dedr = (dedrr + dedrd) * rsqi ft(j,1) = dedr * dx(j) ft(j,2) = dedr * dy(j) ft(j,3) = dedr * dz(j) tprssr(j,1) = dedr*dx(j)**2 tprssr(j,2) = dedr*dy(j)**2 tprssr(j,3) = dedr*dz(j)**2 end do c c sum forces on atom i and contributions to the energy and c pressure c do j = 1, ltot ra(i,1,4) = ra(i,1,4) + ft(j,1) ra(i,2,4) = ra(i,2,4) + ft(j,2) ra(i,3,4) = ra(i,3,4) + ft(j,3) esvr = esvr + savr(j) esvd = esvd + savd(j) presf = presf + tprssr(j,1) + tprssr(j,2) + tprssr(j,3) presfx = presfx + tprssr(j,1) presfy = presfy + tprssr(j,2) presfz = presfz + tprssr(j,3) end do c c scatter forces to atoms j c do jp = 1, ltot j = acml(jp) ra(j,1,4) = ra(j,1,4) - ft(jp,1) ra(j,2,4) = ra(j,2,4) - ft(jp,2) ra(j,3,4) = ra(j,3,4) - ft(jp,3) end do c c Calculate interactions between locally held atoms and remote c atoms. Start by re-initializing temporary storage arrays. c fat = nbfirst(i) lat = nblast(i) c l = 0 do j = fat, lat l = l + 1 savr(l) = 0.0d00 savd(l) = 0.0d00 ft(l,1) = 0.0d00 ft(l,2) = 0.0d00 ft(l,3) = 0.0d00 tprssr(l,1) = 0.0d00 tprssr(l,2) = 0.0d00 tprssr(l,3) = 0.0d00 end do c jp = 0 do jat = fat, lat j = nblist(jat) jp = jp + 1 c bacml(jp) = j c c calculate interatomic distances c bdx(jp) = ra(i,1,6) - xcrd(j) bdx(jp) = bdx(jp) - xbox * anint(bdx(jp) / xbox) bdy(jp) = ra(i,2,6) - ycrd(j) bdy(jp) = bdy(jp) - ybox * anint(bdy(jp) / ybox) bdz(jp) = ra(i,3,6) - zcrd(j) bdz(jp) = bdz(jp) - zbox * anint(bdz(jp) / zbox) c br2(jp) = bdx(jp)**2 + bdy(jp)**2 + bdz(jp)**2 end do bltot = jp c c check displacements against cutoff c jp = 0 do 1250 j = 1, bltot rcut2 = acut2(at(i),bat(bacml(j))) if (br2(j).ge.rcut2) go to 1250 jp = jp + 1 jtmp = bacml(j) bacml(jp) = jtmp c br2(jp) = br2(j) c b12(jp) = e12(bat(jtmp),at(i)) b6(jp) = e6(bat(jtmp),at(i)) c bdcp(jp) = -dcorr(bat(jtmp),at(i)) brcp(jp) = -rcorr(bat(jtmp),at(i)) c bdx(jp) = bdx(j) bdy(jp) = bdy(j) bdz(jp) = bdz(j) 1250 continue bltot = jp c c evaluate interaction between all local pairs c do j = 1, bltot rsq = br2(j) rsqi = one / rsq r6i = rsqi * rsqi * rsqi c phir = b12(j) * r6i * r6i phid = -b6(j) * r6i savr(j) = savr(j) + phir + brcp(j) savd(j) = savd(j) + phid + bdcp(j) dedrr = twelve * phir dedrd = six * phid dedr = (dedrr + dedrd) * rsqi ft(j,1) = dedr * bdx(j) ft(j,2) = dedr * bdy(j) ft(j,3) = dedr * bdz(j) tprssr(j,1) = dedr*bdx(j)**2 tprssr(j,2) = dedr*bdy(j)**2 tprssr(j,3) = dedr*bdz(j)**2 end do c c sum forces on atom i and contributions to the energy and c pressure c do j = 1, bltot ra(i,1,4) = ra(i,1,4) + ft(j,1) ra(i,2,4) = ra(i,2,4) + ft(j,2) ra(i,3,4) = ra(i,3,4) + ft(j,3) esvr = esvr + savr(j) esvd = esvd + savd(j) presf = presf + tprssr(j,1) + tprssr(j,2) + tprssr(j,3) presfx = presfx + tprssr(j,1) presfy = presfy + tprssr(j,2) presfz = presfz + tprssr(j,3) end do c c scatter forces to atoms j c do jp = 1, bltot j = bacml(jp) xfrc(j) = xfrc(j) - ft(jp,1) yfrc(j) = yfrc(j) - ft(jp,2) zfrc(j) = zfrc(j) - ft(jp,3) end do end do c tmstat(3) = tmstat(3) + wraptime() - tbeg c return end ga-5-3/global/examples/md_cluster/kin.F0000640005473000001440000000655611274466357016736 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c c NOTICE c c This software is being made available for internal testing and c evaluation purposes only. This software is a pre-release test version c which has not yet been authenticated and cleared for publication. Adherence c to this notice may be necessary for the author, Battelle Memorial c Institute, to successfully assert copyright in and commercialize this c software. This software is not intended for duplication or distribution c to third parties without the permission of the Manager of Software c Products at Pacific Northwest Laboratory, Richland, Washington, 99352. c subroutine kin #include "common.fh" c integer i,j c c This subroutine calculates the kinetic energy of the current c configuration. It assumes that the center of mass motion in c the xy plane has already been subtracted out. c nrg(4) = 0.0d00 nrg(8) = 0.0d00 do 200 j = 1, 3 do 100 i = 1, antot nrg(4) = nrg(4) + 0.5d00 * ra(i,j,5)**2 / mass(i) c nrg(4) = nrg(4) + 0.5d00 * mass(i) * ra(i,j,2)**2 100 continue 200 continue c return end c subroutine com #include "common.fh" c double precision px,py,pz,vx,vy,vz,tcmass double precision comm(4) integer i c c This subroutine calculates the contributions to the center of mass c and the center of mass momentum from each processor c c Calculate center of mass motion momentum c px = 0.0d00 py = 0.0d00 pz = 0.0d00 tcmass = 0.0d00 do 100 i = 1, antot px = px + ra(i,1,5) py = py + ra(i,2,5) pz = pz + ra(i,3,5) tcmass = tcmass + mass(i) 100 continue c comm(1) = px comm(2) = py comm(3) = pz comm(4) = tcmass call ga_dgop(7,comm,4,'+') px = comm(1) py = comm(2) pz = comm(3) tcmass = comm(4) c nrg(22) = px nrg(23) = py nrg(24) = pz c nrg(25) = tcmass c return end c subroutine com_rmv #include "common.fh" c double precision px,py,pz,vx,vy,vz,tcmass integer i c c This subroutine subtracts out the center of mass motion c Calculate center of mass motion momentum c px = nrg(22) py = nrg(23) pz = nrg(24) tcmass = nrg(25) c c Calculate center of mass velocity c vx = px / tcmass vy = py / tcmass vz = pz / tcmass c c Subtract out center of mass velocity c do 200 i = 1, antot ra(i,1,2) = ra(i,1,2) - vx ra(i,2,2) = ra(i,2,2) - vy ra(i,3,2) = ra(i,3,2) - vz ra(i,1,5) = ra(i,1,5) - mass(i) * vx ra(i,2,5) = ra(i,2,5) - mass(i) * vy ra(i,3,5) = ra(i,3,5) - mass(i) * vz 200 continue c return end c subroutine fixper #include "common.fh" c integer i c c This subroutine fixes up the periodic boundary conditions c in the xy plane after the particle positions have been updated c do 100 i = 1, antot ra(i,1,1) = ra(i,1,6) - xbox * anint(ra(i,1,6)/xbox) if (ra(i,1,1).eq.xbox2) ra(i,1,1) = -xbox2 ra(i,2,1) = ra(i,2,6) - ybox * anint(ra(i,2,6)/ybox) if (ra(i,2,1).eq.ybox2) ra(i,2,1) = -ybox2 ra(i,3,1) = ra(i,3,6) - zbox * anint(ra(i,3,6)/zbox) if (ra(i,3,1).eq.zbox2) ra(i,3,1) = -zbox2 100 continue return end ga-5-3/global/examples/md_cluster/scatter.F0000640005473000001440000005325511274466357017620 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif subroutine scatter #include "common.fh" c double precision xmax,xmin,ymax,ymin,zmax,zmin double precision xcell,ycell,zcell double precision tbeg,wraptime integer snode,rnode,pnum,inode,idx,idy,idz,ipx,ipy,ipz integer stot,i,inx,iny,inz logical nolist c c This subroutine scatters the forces of all particles on c neighboring processors back to their home processors after the c forces have been calculated. c tbeg = wraptime() pnum = ga_nnodes() call factor(pnum,idx,idy,idz) inode = ga_nodeid() call i_proc_to_xyz(inode,ipx,ipy,ipz,idx,idy,idz) c if (istep.eq.0.or.(mod(istep,ilist).eq.0.and. + t_rmndr.eq.0.0d00)) then nolist = .true. else nolist = .false. endif c c determine local boundaries c xmax = xbox*dble(ipx+1)/dble(idx) ymax = ybox*dble(ipy+1)/dble(idy) zmax = zbox*dble(ipz+1)/dble(idz) xmin = xbox*dble(ipx)/dble(idx) ymin = ybox*dble(ipy)/dble(idy) zmin = zbox*dble(ipz)/dble(idz) xmax = xmax - xbox2 ymax = ymax - ybox2 zmax = zmax - zbox2 xmin = xmin - xbox2 ymin = ymin - ybox2 zmin = zmin - zbox2 xcell = xbox/dble(idx) ycell = ybox/dble(idy) zcell = zbox/dble(idz) c c Send particles along x-axis. c c if (idx.gt.1) then if (idx.eq.2) then stot = 0 savtot = 0 if (nolist) then do i = 1, btot if (xcrd(i).lt.xmin.or.xcrd(i).ge.xmax) then xsbu(i) = .true. stot = stot + 1 xcrd(btot+stot) = xcrd(i) ycrd(btot+stot) = ycrd(i) zcrd(btot+stot) = zcrd(i) xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else xsbu(i) = .false. savtot = savtot + 1 xcrd(savtot) = xcrd(i) ycrd(savtot) = ycrd(i) zcrd(savtot) = zcrd(i) xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do else do i = 1, btot if (xsbu(i)) then stot = stot + 1 xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else savtot = savtot + 1 xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do endif else stot = 0 savtot = 0 if (nolist) then do i = 1, btot if ((xcrd(i).ge.xmax.and.xcrd(i)-xmax.lt.xcell).or. + (xcrd(i).lt.xmin.and.xmin-xcrd(i).gt.xcell)) then xsbu(i) = .true. stot = stot + 1 xcrd(btot+stot) = xcrd(i) ycrd(btot+stot) = ycrd(i) zcrd(btot+stot) = zcrd(i) xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else xsbu(i) = .false. savtot = savtot + 1 xcrd(savtot) = xcrd(i) ycrd(savtot) = ycrd(i) zcrd(savtot) = zcrd(i) xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do else do i = 1, btot if (xsbu(i)) then stot = stot + 1 xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else savtot = savtot + 1 xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do endif endif c inx = ipx - 1 if (inx.eq.-1) inx = idx - 1 call i_xyz_to_proc(rnode,inx,ipy,ipz,idx,idy,idz) call scatter_buf(rnode,stot) c call heapsort(1) call fcull(1) endif c if (idx.gt.2) then c stot = 0 savtot = 0 if (nolist) then do i = 1, btot if ((xcrd(i).lt.xmin.and.xmin-xcrd(i).lt.xcell).or. + (xcrd(i).gt.xmax.and.xcrd(i)-xmax.gt.xcell)) then xsbd(i) = .true. stot = stot + 1 xcrd(btot+stot) = xcrd(i) ycrd(btot+stot) = ycrd(i) zcrd(btot+stot) = zcrd(i) xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else xsbd(i) = .false. savtot = savtot + 1 xcrd(savtot) = xcrd(i) ycrd(savtot) = ycrd(i) zcrd(savtot) = zcrd(i) xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do else do i = 1, btot if (xsbd(i)) then stot = stot + 1 xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else savtot = savtot + 1 xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do endif c inx = ipx + 1 if (inx.eq.idx) inx = 0 call i_xyz_to_proc(rnode,inx,ipy,ipz,idx,idy,idz) call scatter_buf(rnode,stot) c call heapsort(1) call fcull(2) c endif c c Send particles along y-axis. c if (idy.gt.1) then c if (idy.eq.2) then stot = 0 savtot = 0 if (nolist) then do i = 1, btot if (ycrd(i).lt.ymin.or.ycrd(i).ge.ymax) then ysbu(i) = .true. stot = stot + 1 xcrd(btot+stot) = xcrd(i) ycrd(btot+stot) = ycrd(i) zcrd(btot+stot) = zcrd(i) xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else ysbu(i) = .false. savtot = savtot + 1 xcrd(savtot) = xcrd(i) ycrd(savtot) = ycrd(i) zcrd(savtot) = zcrd(i) xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do else do i = 1, btot if (ysbu(i)) then stot = stot + 1 xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else savtot = savtot + 1 xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do endif else stot = 0 savtot = 0 if (nolist) then do i = 1, btot if ((ycrd(i).ge.ymax.and.ycrd(i)-ymax.lt.ycell).or. + (ycrd(i).lt.ymin.and.ymin-ycrd(i).gt.ycell)) then ysbu(i) = .true. stot = stot + 1 xcrd(btot+stot) = xcrd(i) ycrd(btot+stot) = ycrd(i) zcrd(btot+stot) = zcrd(i) xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else ysbu(i) = .false. savtot = savtot + 1 xcrd(savtot) = xcrd(i) ycrd(savtot) = ycrd(i) zcrd(savtot) = zcrd(i) xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do else do i = 1, btot if (ysbu(i)) then stot = stot + 1 xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else savtot = savtot + 1 xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do endif endif c iny = ipy - 1 if (iny.eq.-1) iny = idy - 1 call i_xyz_to_proc(rnode,ipx,iny,ipz,idx,idy,idz) call scatter_buf(rnode,stot) c call heapsort(1) call fcull(3) c endif c if (idy.gt.2) then c stot = 0 savtot = 0 if (nolist) then do i = 1, btot if ((ycrd(i).lt.ymin.and.ymin-ycrd(i).lt.ycell).or. + (ycrd(i).gt.ymax.and.ycrd(i)-ymax.gt.ycell)) then ysbd(i) = .true. stot = stot + 1 xcrd(btot+stot) = xcrd(i) ycrd(btot+stot) = ycrd(i) zcrd(btot+stot) = zcrd(i) xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else ysbd(i) = .false. savtot = savtot + 1 xcrd(savtot) = xcrd(i) ycrd(savtot) = ycrd(i) zcrd(savtot) = zcrd(i) xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do else do i = 1, btot if (ysbd(i)) then stot = stot + 1 xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else savtot = savtot + 1 xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do endif c iny = ipy + 1 if (iny.eq.idy) iny = 0 call i_xyz_to_proc(rnode,ipx,iny,ipz,idx,idy,idz) call scatter_buf(rnode,stot) c call heapsort(1) call fcull(4) c endif c c send particles along z-axis c if (idz.gt.1) then c if (idz.eq.2) then stot = 0 savtot = 0 if (nolist) then do i = 1, btot if (zcrd(i).lt.zmin.or.zcrd(i).ge.zmax) then zsbu(i) = .true. stot = stot + 1 xcrd(btot+stot) = xcrd(i) ycrd(btot+stot) = ycrd(i) zcrd(btot+stot) = zcrd(i) xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else zsbu(i) = .false. savtot = savtot + 1 xcrd(savtot) = xcrd(i) ycrd(savtot) = ycrd(i) zcrd(savtot) = zcrd(i) xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do else do i = 1, btot if (zsbu(i)) then stot = stot + 1 xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else savtot = savtot + 1 xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do endif else stot = 0 savtot = 0 if (nolist) then do i = 1, btot if ((zcrd(i).ge.zmax.and.zcrd(i)-zmax.lt.zcell).or. + (zcrd(i).lt.zmin.and.zmin-zcrd(i).gt.zcell)) then zsbu(i) = .true. stot = stot + 1 xcrd(btot+stot) = xcrd(i) ycrd(btot+stot) = ycrd(i) zcrd(btot+stot) = zcrd(i) xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else zsbu(i) = .false. savtot = savtot + 1 xcrd(savtot) = xcrd(i) ycrd(savtot) = ycrd(i) zcrd(savtot) = zcrd(i) xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do else do i = 1, btot if (zsbu(i)) then stot = stot + 1 xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else savtot = savtot + 1 xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do endif endif c inz = ipz - 1 if (inz.eq.-1) inz = idz - 1 call i_xyz_to_proc(rnode,ipx,ipy,inz,idx,idy,idz) call scatter_buf(rnode,stot) c call heapsort(1) call fcull(5) c endif c if (idz.gt.2) then c stot = 0 savtot = 0 if (nolist) then do i = 1, btot if ((zcrd(i).lt.zmin.and.zmin-zcrd(i).lt.zcell).or. + (zcrd(i).gt.zmax.and.zcrd(i)-zmax.gt.zcell)) then zsbd(i) = .true. stot = stot + 1 xcrd(btot+stot) = xcrd(i) ycrd(btot+stot) = ycrd(i) zcrd(btot+stot) = zcrd(i) xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else zsbd(i) = .false. savtot = savtot + 1 xcrd(savtot) = xcrd(i) ycrd(savtot) = ycrd(i) zcrd(savtot) = zcrd(i) xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do else do i = 1, btot if (zsbd(i)) then stot = stot + 1 xfrc(btot+stot) = xfrc(i) yfrc(btot+stot) = yfrc(i) zfrc(btot+stot) = zfrc(i) bidx(btot+stot) = bidx(i) else savtot = savtot + 1 xfrc(savtot) = xfrc(i) yfrc(savtot) = yfrc(i) zfrc(savtot) = zfrc(i) bidx(savtot) = bidx(i) endif end do endif c inz = ipz + 1 if (inz.eq.idz) inz = 0 call i_xyz_to_proc(rnode,ipx,ipy,inz,idx,idy,idz) call scatter_buf(rnode,stot) c call heapsort(1) call fcull(6) c endif c tmstat(7) = tmstat(7) + wraptime() - tbeg c return end c subroutine scatter_buf(rnode,stot) #include "common.fh" c double precision cbuf(3,MAXAT),fbuf(3,MAXAT) integer ibuf(MAXAT) double precision tbeg, tbeg1, wraptime integer i,rnode integer me,one,ld,is,rtot,stot logical crdflag c c Get the forces from processor rnode. The amount of data c on the current processor that actually needs to be c accessed represents stot particles c me = ga_nodeid() one = 1 ld = 3 c c exchange the size of lists c tbeg = wraptime() c if (istep.eq.0.or.(mod(istep,ilist).eq.0.and. + t_rmndr.eq.0.0d00)) then crdflag = .true. else crdflag = .false. endif c if (crdflag) then do i = btot + 1, btot + stot is = i - btot cbuf(1,is) = xcrd(i) cbuf(2,is) = ycrd(i) cbuf(3,is) = zcrd(i) end do endif do i = btot + 1, btot + stot is = i - btot fbuf(1,is) = xfrc(i) fbuf(2,is) = yfrc(i) fbuf(3,is) = zfrc(i) ibuf(is) = bidx(i) end do c gsize_hi = gsize_lo(me) call nga_put(g_size,gsize_lo(me),gsize_hi,stot,one) if (crdflag) then gcoords_hi(1) = 3 gcoords_hi(2) = gcoords_lo(2,me) + stot - 1 if (stot.gt.0) call nga_put(g_coords,gcoords_lo(1,me), + gcoords_hi,cbuf,ld) endif gfrc_hi(1) = 3 gfrc_hi(2) = gfrc_lo(2,me) + stot - 1 if (stot.gt.0) call nga_put(g_frc,gfrc_lo(1,me),gfrc_hi,fbuf,ld) gindex_hi = gindex_lo(me) + stot - 1 if (stot.gt.0) call nga_put(g_index,gindex_lo(me), + gindex_hi,ibuf,ld) tbeg1 = wraptime() call ga_sync() tmstat(16) = tmstat(16) + wraptime() - tbeg1 btot = savtot gsize_hi = gsize_lo(rnode) call nga_get(g_size,gsize_lo(rnode),gsize_hi,rtot,one) if (crdflag) then gcoords_hi(2) = gcoords_lo(2,rnode) + rtot - 1 if (rtot.gt.0) call nga_get(g_coords,gcoords_lo(1,rnode), + gcoords_hi,cbuf,ld) endif gfrc_hi(2) = gfrc_lo(2,rnode) + rtot - 1 if (rtot.gt.0) call nga_get(g_frc,gfrc_lo(1,rnode), + gfrc_hi,fbuf,ld) gindex_hi = gindex_lo(rnode) + rtot - 1 if (rtot.gt.0) call nga_get(g_index,gindex_lo(rnode), + gindex_hi,ibuf,ld) c if (crdflag) then do i = btot+1, btot+rtot is = i - btot xcrd(i) = cbuf(1,is) ycrd(i) = cbuf(2,is) zcrd(i) = cbuf(3,is) end do endif do i = btot+1, btot+rtot is = i - btot xfrc(i) = fbuf(1,is) yfrc(i) = fbuf(2,is) zfrc(i) = fbuf(3,is) bidx(i) = ibuf(is) end do c call ga_sync() btot = btot+rtot if (btot.gt.MAXAT) then call ga_error("Array overflow in scatter_buf",btot) endif c tmstat(12) = tmstat(12) + wraptime() - tbeg c return end c subroutine fcull(iflg) #include "common.fh" c double precision xmax,xmin,ymax,ymin,zmax,zmin integer pnum,inode,idx,idy,idz,ipx,ipy,ipz integer i,is,icnt,iflg,get_hash_a logical nolist c c This subroutine culls the forces of particles in the buffers c back on to the particles on the home processor c pnum = ga_nnodes() call factor(pnum,idx,idy,idz) inode = ga_nodeid() call i_proc_to_xyz(inode,ipx,ipy,ipz,idx,idy,idz) c if (istep.eq.0.or.(mod(istep,ilist).eq.0.and. + t_rmndr.eq.0.0d00)) then nolist = .true. else nolist = .false. endif c c determine local boundaries c xmax = xbox*dble(ipx+1)/dble(idx) ymax = ybox*dble(ipy+1)/dble(idy) zmax = zbox*dble(ipz+1)/dble(idz) xmin = xbox*dble(ipx)/dble(idx) ymin = ybox*dble(ipy)/dble(idy) zmin = zbox*dble(ipz)/dble(idz) xmax = xmax - xbox2 ymax = ymax - ybox2 zmax = zmax - zbox2 xmin = xmin - xbox2 ymin = ymin - ybox2 zmin = zmin - zbox2 c icnt = 0 is = 1 if (nolist) then do i = 1, btot if ((xcrd(i).lt.xmax.and.xcrd(i).ge.xmin).and. + (ycrd(i).lt.ymax.and.ycrd(i).ge.ymin).and. + (zcrd(i).lt.zmax.and.zcrd(i).ge.zmin)) then clist(iflg,i) = .true. is = get_hash_a(bidx(i)) if (is.gt.0) then ra(is,1,4) = ra(is,1,4) + xfrc(i) ra(is,2,4) = ra(is,2,4) + yfrc(i) ra(is,3,4) = ra(is,3,4) + zfrc(i) else call ga_error("Unknown atom index: ",i) endif else clist(iflg,i) = .false. icnt = icnt + 1 xcrd(icnt) = xcrd(i) ycrd(icnt) = ycrd(i) zcrd(icnt) = zcrd(i) xfrc(icnt) = xfrc(i) yfrc(icnt) = yfrc(i) zfrc(icnt) = zfrc(i) bidx(icnt) = bidx(i) endif end do else do i = 1, btot if (clist(iflg,i)) then is = get_hash_a(bidx(i)) if (is.gt.0) then ra(is,1,4) = ra(is,1,4) + xfrc(i) ra(is,2,4) = ra(is,2,4) + yfrc(i) ra(is,3,4) = ra(is,3,4) + zfrc(i) else call ga_error("Unknown atom index: ",i) endif else icnt = icnt + 1 xfrc(icnt) = xfrc(i) yfrc(icnt) = yfrc(i) zfrc(icnt) = zfrc(i) bidx(icnt) = bidx(i) endif end do endif btot = icnt if (btot.gt.MAXAT) then call ga_error("Array overflow in fcull",btot) endif c return end ga-5-3/global/examples/md_cluster/common.fh0000640005473000001440000002212211437102612017616 0ustar d3n000usersc c NOTICE c c This software is being made available for internal testing and c evaluation purposes only. This software is a pre-release test version c which has not yet been authenticated and cleared for publication. Adherence c to this notice may be necessary for the author, Battelle Memorial c Institute, to successfully assert copyright in and commercialize this c software. This software is not intended for duplication or distribution c to third parties without the permission of the Manager of Software c Products at Pacific Northwest Laboratory, Richland, Washington, 99352. c implicit none #include "mafdecls.fh" #include "global.fh" #ifdef MPI # include "mpif.h" #else # include "tcgmsg.fh" #endif integer MAXNRG,MAXNB,MAXAT,MAXTIM integer NSTES,NSTDF integer MD_MAXPROC,MAXBINS parameter (MAXNRG=50, MAXNB=100) parameter (MAXAT = 40000) parameter (MAXTIM=50) parameter (NSTES=1000) parameter (MAXBINS = 2000) parameter (MD_MAXPROC=1024) c c Arrays containing locally held atoms and their properties. atot is c the total number of atoms and antot is the number of locally held c atoms. aidx is an array containing the absolute atomic index of c each locally held atom. at is an array containing an index to the c atom type, and ra is an array containing the coordinates, velocities, c and forces of each locally held atom. The array ra contains c ra(i,j,1): periodic coordinates that all are within the c simulation cell c ra(i,j,2): velocities c ra(i,j,3): accelerations c ra(i,j,4): forces (not including constraint forces) c ra(i,j,5): momentum c ra(i,j,6): absolute coordinates c ra(i,j,7): complete forces from previous timestep c ra(i,j,8): temporary storage to construct accelations with c constraints c common /syspar/ ra(MAXAT,3,8),mass(MAXAT),at(MAXAT),aidx(MAXAT), + atot,antot double precision ra,mass integer at,aidx,atot,antot c c Global array handles and utility arrays for moving data around c common /ga_data/ g_size, gsize_lo(0:MD_MAXPROC), gsize_hi, + g_coords, gcoords_lo(2,0:MD_MAXPROC), + gcoords_hi(2), + g_frc, gfrc_lo(2,0:MD_MAXPROC), gfrc_hi(2), + g_acc, gacc_lo(2,0:MD_MAXPROC), gacc_hi(2), + g_index, gindex_lo(0:MD_MAXPROC), gindex_hi, + g_iat, giat_lo(2,0:MD_MAXPROC), giat_hi(2), + g_rvec, grvec_lo(0:MD_MAXPROC), grvec_hi integer g_size, gsize_lo, gsize_hi, g_coords,gcoords_lo, + gcoords_hi, g_frc, gfrc_hi, gfrc_lo, g_acc, gacc_lo, + gacc_hi, g_index, gindex_lo, gindex_hi, g_iat, giat_hi, + giat_lo, g_rvec, grvec_lo, grvec_hi common /md_par/ tau,dftmp,dfprs,dftm,dfpm,rsc(20,4), + tmprtr,prssr,tmass,pmass,tvol,tavg,tmstrt, + nsc,nstep,istep,ilist,dflalg,isc(20,4),istart, + istop,tmpflg,prsflg,ptflg,istat,itarg,itavg, + ipmode,iseed,mbflg,cmflg double precision tau,dftmp,dfprs,dftm,dfpm,rsc, + tmprtr,prssr,tmass,pmass,tvol,tavg integer tmstrt,nsc,nstep,istep,ilist,dflalg,isc integer istart,istop,istat,itarg integer itavg,ipmode,iseed logical tmpflg,prsflg,ptflg,mbflg,cmflg common /simpar/ xbox,ybox,zbox,xbox2,ybox2,zbox2, + vol1,vol2,vol3,scal1,scal2,scal3, + alen1(3),alen2(3),alen3(3) double precision xbox,ybox,zbox,xbox2,ybox2,zbox2, + vol1,vol2,vol3,scal1,scal2,scal3,alen1,alen2,alen3 common /nrgpar/ nrg(MAXNRG),anrg(MAXNRG),anrg2(MAXNRG), + presf,presfx,presfy,presfz,esvr,esvd,esvoh, + esva,asev(MAXAT),nrgcnt,nrg2ct double precision nrg,anrg,anrg2,presf,esvr,esvd,esvoh,esva,asev, + presfx,presfy,presfz integer nrgcnt,nrg2ct common /apars/ amass(50),e12(50,50),e6(50,50), + dcorr(50,50),rcorr(50,50), + frcorr(50,50),fdcorr(50,50), + rcut,acut(50,50),acut2(50,50),rcmax,icut,atnum double precision amass,e12,e6,dcorr,rcorr,frcorr,fdcorr,acut,rcut, + acut2,rcmax integer icut,atnum common /md_timer/ tmstat(MAXTIM) double precision tmstat common /espar/ pmvac(NSTES),tmvac(NSTES),ipmvac(NSTES), + itmvac(NSTES),esinc,esstps,esflg double precision pmvac,tmvac integer ipmvac,itmvac,esinc,esstps logical esflg c c coordinates of atoms that are not held locally are stored in xcrc, c ycrd, zcrd, similarly, forces for atoms not held locally are stored c in xfrc, yfrc, zfrc c common /md_buffer/xcrd(MAXAT),ycrd(MAXAT),zcrd(MAXAT),xfrc(MAXAT), + yfrc(MAXAT),zfrc(MAXAT),xacc(MAXAT),yacc(MAXAT), + zacc(MAXAT),mbuf(MAXAT),bidx(MAXAT),bat(MAXAT), + btot,savtot double precision xcrd,ycrd,zcrd,xfrc,yfrc,zfrc,xacc,yacc,zacc,mbuf integer bidx,bat,btot,savtot c common /md_cell/rcell,kcmax,nix(2000),niy(2000),niz(2000) double precision rcell integer kcmax,nix,niy,niz c c the xgru, xgrd etc. buffers keep track of which atoms are within a c cutoff distance of the upper (u) and lower (d) boundaries of the c cell. The ygbu, ygbd etc. buffers keep track of which buffer atoms c are within a cutoff distance of the boundaries (these buffers are c not needed for the x-direction updates). The ygbu, etc. buffers are c used in the gather routine. The ysbu, etc. buffers are used in a c similar way in the scatter routine. c common /svlist/ xgru(MAXAT),xgrd(MAXAT),ygru(MAXAT),ygrd(MAXAT), + zgru(MAXAT),zgrd(MAXAT), + ygbu(MAXAT),ygbd(MAXAT),zgbu(MAXAT),zgbd(MAXAT), + xsbu(MAXAT),xsbd(MAXAT),ysbu(MAXAT),ysbd(MAXAT), + zsbu(MAXAT),zsbd(MAXAT), + clist(6,MAXAT), + ixgru,ixgrd,iygru,iygrd,izgru,izgrd, + iygbu,iygbd,izgbu,izgbd integer xgru,xgrd,ygru,ygrd,zgru,zgrd, + ygbu,ygbd,zgbu,zgbd, + ixgru,ixgrd,iygru,iygrd,izgru,izgrd, + iygbu,iygbd,izgbu,izgbd,ixsbu,ixsbd,iysbu,iysbd, + izsbu,izsbd logical xsbu,xsbd,ysbu,ysbd,zsbu,zsbd logical clist c common /neighbors/ nblist(MAXAT*MAXNB),nalast(MAXAT), + nblast(MAXAT),nafirst(MAXAT),nbfirst(MAXAT), + blist(3*MAXAT),balast(MAXAT), + bblast(MAXAT),bafirst(MAXAT),bbfirst(MAXAT) integer nblist,nalast,nblast,nafirst,nbfirst integer blist,balast,bblast,bafirst,bbfirst c common /clusterpar/ cl_cmx, cl_cmy, cl_cmz, r_cluster, cl_sep, + cl_vcmx, cl_vcmy, cl_vcmz, + cl_acmx, cl_acmy, cl_acmz, + cl_prssr, cl_mass, r_cluster_old, + cl_old(MAXAT,3,3), cl_cm_old(3), + cl_vcm_old(3), cl_vol1_old, cl_vol2_old, + cl_box_old(3), cl_alen1_old(3), + cl_alen2_old(3), cl_scal1_old, cl_scal2_old, + cl_at(MAXAT), cl_tot, ctot, nocluster double precision cl_cmx, cl_cmy, cl_cmz, r_cluster, cl_sep, + cl_vcmx, cl_vcmy, cl_vcmz, + cl_acmx, cl_acmy, cl_acmz, + cl_prssr, cl_mass, cl_old, r_cluster_old, + cl_cm_old, cl_vcm_old, cl_vol1_old, cl_vol2_old, + cl_box_old, cl_alen1_old, cl_alen2_old, + cl_scal1_old, cl_scal2_old integer cl_at, ctot, cl_tot logical nocluster common /solventpar/ sl_old(MAXAT,3,3),sl_at(MAXAT),sl_tot double precision sl_old integer sl_at, sl_tot common /equil_protocol/ r_confine, equil_1, equil_2, equil_3, + window_1, window_2 double precision r_confine integer equil_1, equil_2, equil_3, window_1, window_2 common /cllsnpar/ mmass, cllsn_idx, l_cllsn, cllsn_cnt, + cllsn_isav, failcount double precision mmass integer cllsn_idx, cllsn_cnt, cllsn_isav, failcount logical l_cllsn common /mcpar/ cl_lower, cl_upper, mc_step, mc_tmprtr, mc_dr, + r_distr(0:MAXBINS,10), r_cnt(10), mcbins, mcfreq, + mc_cnt, mc_start double precision cl_lower, cl_upper, mc_step, mc_tmprtr, mc_dr integer r_distr, r_cnt, mcbins, mcfreq, mc_cnt, mc_start common /taskpar/ task_id, g_counter integer task_id, g_counter common /iopar/ l_stdio, l_rad, l_rst, l_step, l_oldcfg logical l_stdio, l_rad, l_rst, l_step, l_oldcfg common /adapt/ t_done, t_rmndr double precision t_done, t_rmndr common /hashpar/ link_a(MAXAT), top_a(MAXAT), hash_key_a(MAXAT), + hash_value_a(MAXAT), a_cnt integer link_a, top_a, hash_key_a, hash_value_a, a_cnt ga-5-3/global/examples/md_cluster/force.F0000640005473000001440000000341211274466357017237 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c c NOTICE c c This software is being made available for internal testing and c evaluation purposes only. This software is a pre-release test version c which has not yet been authenticated and cleared for publication. Adherence c to this notice may be necessary for the author, Battelle Memorial c Institute, to successfully assert copyright in and commercialize this c software. This software is not intended for duplication or distribution c to third parties without the permission of the Manager of Software c Products at Pacific Northwest Laboratory, Richland, Washington, 99352. c subroutine force #include "common.fh" c double precision tbeg,wraptime integer i,j integer inode c tbeg = wraptime() c c clear forces c do 100 j = 1, 3 do 200 i = 1, antot ra(i,j,4) = 0.0d00 200 continue 100 continue c do 300 i = 1, antot asev(i) = 0.0d00 300 continue c esvr = 0.0d00 esvd = 0.0d00 esvoh = 0.0d00 esva = 0.0d00 presf = 0.0d00 presfx = 0.0d00 presfy = 0.0d00 presfz = 0.0d00 c call gather c c clear buffers c do i = 1, btot xfrc(i) = 0.0d00 yfrc(i) = 0.0d00 zfrc(i) = 0.0d00 end do c c assign atoms to individual molecules c call pairs call scatter c nrg(6) =esvr + esvd + esvoh + esva nrg(13) = esvr nrg(14) = esvd nrg(17) = esvoh nrg(21) = esva nrg(10) = presf nrg(18) = presfx nrg(19) = presfy nrg(20) = presfz presf = presf / (xbox * ybox * zbox) nrg(15) = presf/ 3.0d00 c tmstat(2) = tmstat(2) + wraptime() - tbeg c return end ga-5-3/global/examples/md_cluster/cluster.F0000640005473000001440000012473211274466357017633 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c c NOTICE c c This software is being made available for internal testing and c evaluation purposes only. This software is a pre-release test version c which has not yet been authenticated and cleared for publication. Adherence c to this notice may be necessary for the author, Battelle Memorial c Institute, to successfully assert copyright in and commercialize this c software. This software is not intended for duplication or distribution c to third parties without the permission of the Manager of Software c Products at Pacific Northwest Laboratory, Richland, Washington, 99352. c subroutine cluster_com #include "common.fh" c integer i double precision masstot, dx, dy, dz double precision r,rdot,com(10) c c This subroutine calculates the center of mass (COM) of the cluster of c particles of type 2, excluding the lone particle. c if (nocluster) return cl_cmx = 0.0d00 cl_cmy = 0.0d00 cl_cmz = 0.0d00 cl_acmx = 0.0d00 cl_acmy = 0.0d00 cl_acmz = 0.0d00 cl_vcmx = 0.0d00 cl_vcmy = 0.0d00 cl_vcmz = 0.0d00 masstot = 0.0d00 c do i = 1, antot c if (at(i).eq.2.and.aidx(i).ne.cl_lone_particle) then if (at(i).eq.2) then cl_cmx = cl_cmx + mass(i)*ra(i,1,6) cl_cmy = cl_cmy + mass(i)*ra(i,2,6) cl_cmz = cl_cmz + mass(i)*ra(i,3,6) cl_acmx = cl_acmx + ra(i,1,4) cl_acmy = cl_acmy + ra(i,2,4) cl_acmz = cl_acmz + ra(i,3,4) cl_vcmx = cl_vcmx + mass(i)*ra(i,1,2) cl_vcmy = cl_vcmy + mass(i)*ra(i,2,2) cl_vcmz = cl_vcmz + mass(i)*ra(i,3,2) masstot = masstot + mass(i) endif end do com(1) = cl_cmx com(2) = cl_cmy com(3) = cl_cmz com(4) = cl_vcmx com(5) = cl_vcmy com(6) = cl_vcmz com(7) = cl_acmx com(8) = cl_acmy com(9) = cl_acmz com(10) = masstot call ga_dgop(3,com,10,'+') cl_cmx = com(1) cl_cmy = com(2) cl_cmz = com(3) cl_acmx = com(7) cl_acmy = com(8) cl_acmz = com(9) cl_vcmx = com(4) cl_vcmy = com(5) cl_vcmz = com(6) masstot = com(10) if (masstot.gt.0.0d00) then cl_cmx = cl_cmx / masstot cl_cmy = cl_cmy / masstot cl_cmz = cl_cmz / masstot cl_acmx = cl_acmx / masstot cl_acmy = cl_acmy / masstot cl_acmz = cl_acmz / masstot cl_vcmx = cl_vcmx / masstot cl_vcmy = cl_vcmy / masstot cl_vcmz = cl_vcmz / masstot endif cl_mass = masstot c return end c subroutine cluster_therm #include "common.fh" c integer i double precision dx, dy, dz double precision r,rdot c c remove component of velocity that lies along the vector from COM c to the particle, if particle is outside cluster radius. This gradually c forces particles to form a drop. c if (nocluster) return if (istep.ge.equil_1) return call cluster_com do i = 1, antot c if (at(i).eq.2.and.aidx(i).ne.cl_lone_particle) then if (at(i).eq.2) then dx = ra(i,1,1) - cl_cmx dy = ra(i,2,1) - cl_cmy dz = ra(i,3,1) - cl_cmz r = sqrt(dx**2 + dy**2 + dz**2) dx = dx/r dy = dy/r dz = dz/r if (r.gt.r_cluster) then rdot = ra(i,1,2)*dx+ra(i,2,2)*dy+ra(i,3,2)*dz if (rdot.gt.0.0d00) then ra(i,1,2) = ra(i,1,2) - 2.0d00*rdot*dx ra(i,2,2) = ra(i,2,2) - 2.0d00*rdot*dy ra(i,3,2) = ra(i,3,2) - 2.0d00*rdot*dz endif endif endif end do c return end c subroutine cluster_center #include "common.fh" c c move center of mass to origin (only perform this if it is immediately c followed by a call to update subroutine) c integer i,me logical debug if (nocluster) return if (istep.eq.0.or.(mod(istep,ilist).eq.0.and. + t_rmndr.eq.0.0d00)) then me = ga_nodeid() if (istep.ge.6932366) then debug = .false. else debug = .false. endif if (debug) then write(6,*) me,' mod(istep,ilist) = ',mod(istep,ilist) write(6,*) me,' ilist = ',ilist endif call cluster_com if (debug) write(6,*) me,'cl_cmx (a) = ',cl_cmx,istep if (debug) write(6,*) me,'cl_cmy (a) = ',cl_cmy,istep if (debug) write(6,*) me,'cl_cmz (a) = ',cl_cmz,istep do i = 1, antot ra(i,1,6) = ra(i,1,6) - cl_cmx ra(i,2,6) = ra(i,2,6) - cl_cmy ra(i,3,6) = ra(i,3,6) - cl_cmz end do call fixper call cluster_com if (debug) write(6,*) me,'cl_cmx (b) = ',cl_cmx,istep if (debug) write(6,*) me,'cl_cmy (b) = ',cl_cmy,istep if (debug) write(6,*) me,'cl_cmz (b) = ',cl_cmz,istep endif return end c subroutine cluster_old_at #include "common.fh" c c store original coordinates of cluster atoms c integer i, icnt, jcnt if (nocluster) return icnt = 0 jcnt = 0 do i = 1, antot if (at(i).eq.2) then icnt = icnt + 1 cl_at(icnt) = i cl_old(icnt,1,1) = ra(i,1,1) cl_old(icnt,2,1) = ra(i,2,1) cl_old(icnt,3,1) = ra(i,3,1) cl_old(icnt,1,2) = ra(i,1,6) cl_old(icnt,2,2) = ra(i,2,6) cl_old(icnt,3,2) = ra(i,3,6) cl_old(icnt,1,3) = ra(i,1,2) cl_old(icnt,2,3) = ra(i,2,2) cl_old(icnt,3,3) = ra(i,3,2) endif if (at(i).eq.1) then jcnt = jcnt + 1 sl_at(jcnt) = i sl_old(jcnt,1,1) = ra(i,1,1) sl_old(jcnt,2,1) = ra(i,2,1) sl_old(jcnt,3,1) = ra(i,3,1) sl_old(jcnt,1,2) = ra(i,1,6) sl_old(jcnt,2,2) = ra(i,2,6) sl_old(jcnt,3,2) = ra(i,3,6) sl_old(jcnt,1,3) = ra(i,1,2) sl_old(jcnt,2,3) = ra(i,2,2) sl_old(jcnt,3,3) = ra(i,3,2) endif end do c cl_cm_old(1) = cl_cmx cl_cm_old(2) = cl_cmy cl_cm_old(3) = cl_cmz cl_vcm_old(1) = cl_vcmx cl_vcm_old(2) = cl_vcmy cl_vcm_old(3) = cl_vcmz c do i = 1, 3 cl_alen1_old(i) = alen1(i) cl_alen2_old(i) = alen2(i) end do cl_vol1_old = vol1 cl_vol2_old = vol2 cl_box_old(1) = xbox cl_box_old(2) = ybox cl_box_old(3) = zbox cl_scal1_old = scal1 cl_scal2_old = scal2 c cl_tot = icnt sl_tot = jcnt return end c subroutine cluster_check_cllsn #include "common.fh" c c This subroutine checks to see if any of the cluster particles have moved c beyond the cutoff radius from the center of mass of the cluster. If they c have, then the initial guess for the particle coordinates and velocities c is modified to reflect the collision with the restraining sphere. c integer icnt, iat, i, j, ii, jj, iloc, imin, scndat, reset double precision r, r2, rx, ry, rz, dtmax, tsav double precision rrx, rry, rrz, vvx, vvy, vvz double precision vn, vx, vy, vz, fx, fy, fz, mu, v2, f2 double precision vrdot, frdot, vfdot, a, b, c double precision t1, t2, tcut, comm(4), tmax, htausq double precision rnx, rny, rnz, vpx, vpy, vpz, vllx, vlly, vllz double precision t3, t4, ax, ay, az, tchk, tmin, t_est double precision r1x, r1y, r1z, r2x, r2y, r2z, rmax, rskin, rn double precision cluster_find_tau integer failsafe, ibuf(MD_MAXPROC), me, nproc, twohit logical debug integer iter c iter = 0 l_cllsn = .false. if (nocluster) then t_rmndr = 0.0d00 t_done = tau return endif me = ga_nodeid() nproc = ga_nnodes() if (istep.ge.68365721.and.istep.le.68365723) then debug = .false. else debug = .false. endif rskin = 0.02d00 tmax = t_rmndr if (t_rmndr.eq.tau) cllsn_isav = 0 100 dtmax = 2.0d00*t_rmndr twohit = 0 failsafe = 0 iat = 0 iloc = 0 tsav = 0.0d00 rmax = r_cluster if (debug) write(6,*) me,' atot = ',atot,istep if (debug) write(6,*) me,' antot = ',antot,istep if (debug) write(6,*) me, ' r_cluster = ',r_cluster,istep if (debug) write(6,*) me,' t_rmndr = ',tmax,istep if (debug) write(6,*) me,' cl_cmx(1) = ',cl_cmx,istep if (debug) write(6,*) me,' cl_cmy(1) = ',cl_cmy,istep if (debug) write(6,*) me,' cl_cmz(1) = ',cl_cmz,istep do i = 1, cl_tot ii = cl_at(i) rx = ra(ii,1,6) - cl_cmx ry = ra(ii,2,6) - cl_cmy rz = ra(ii,3,6) - cl_cmz r2 = rx**2 + ry**2 + rz**2 r = sqrt(r2) c if (debug) write(6,*) me, 'ra(ii,1,6) ',ra(ii,1,6),istep c if (debug) write(6,*) me, 'ra(ii,2,6) ',ra(ii,2,6),istep c if (debug) write(6,*) me, 'ra(ii,3,6) ',ra(ii,3,6),istep if (r.gt.r_cluster) then if (r.gt.rmax) rmax = r if (debug) write(6,*) me,' tmax = ',tmax,istep if (debug) write(6,*) me,' dtmax = ',dtmax,istep if (debug) write(6,*) me,' ii = ',ii,istep if (debug) write(6,*) me,' antot = ',antot,istep if (debug) write(6,*) me,' r-r_cluster ',r-r_cluster,istep if (debug) write(6,*) me,' r_cluster = ',r_cluster,istep if (debug) write(6,*) me,' sqrt(r2) = ',sqrt(r2),istep if (debug) write(6,*) me,' ra(1) = ',ra(ii,1,6),istep if (debug) write(6,*) me,' ra(2) = ',ra(ii,2,6),istep if (debug) write(6,*) me,' ra(3) = ',ra(ii,3,6),istep if (debug) write(6,*) me,' cl_cmx = ',cl_cmx,istep if (debug) write(6,*) me,' cl_cmy = ',cl_cmy,istep if (debug) write(6,*) me,' cl_cmz = ',cl_cmz,istep if (debug) write(6,*) me,' r_cluster_old = ',r_cluster_old, + istep if (debug) write(6,*) me,' cl_old(1) = ',cl_old(i,1,2),istep if (debug) write(6,*) me,' cl_old(2) = ',cl_old(i,2,2),istep if (debug) write(6,*) me,' cl_old(3) = ',cl_old(i,3,2),istep if (debug) write(6,*) me,' cl_cm_old(1) = ',cl_cm_old(1),istep if (debug) write(6,*) me,' cl_cm_old(2) = ',cl_cm_old(2),istep if (debug) write(6,*) me,' cl_cm_old(3) = ',cl_cm_old(3),istep if (debug) write(6,*) me,' r_old = ', sqrt( + + (cl_old(i,1,2)-cl_cm_old(1))**2 + + (cl_old(i,2,2)-cl_cm_old(2))**2 + + (cl_old(i,3,2)-cl_cm_old(3))**2) rn = sqrt(rx**2+ry**2+rz**2) vn = ra(ii,1,2)*rx+ra(ii,2,2)*ry+ra(ii,3,2)*rz vn = vn/rn t_est = vn*(rn-r_cluster) tcut = cluster_find_tau(ii,i,cllsn_isav,tmax,.false.) if (debug) write(6,*) me,' tcut = ',tcut,istep if (debug) write(6,*) me,' t_est = ',t_est,istep if (debug) write(6,155) me,1,tcut,istep 155 format(i3,' tcut at ',i1,': ',f12.4,' step: ',i8) c c Check to see if collision is earlier than previously found collisions c and that it is also greater than zero. c if (tcut.lt.dtmax.and.tcut.gt.0.0d00) then c c Try to protect against numerical roundoff by checking that different c particle collides with sphere or that collision time is significantly c greater than zero if it is the same particle c if (.not.(ii.eq.cllsn_isav.and.tcut.lt.1.0d-03)) then dtmax = tcut tsav = tcut iat = ii iloc = i else write(6,101) ii, tcut, istep 101 format('Rejected collision of atom ',i8,' at time ', + f16.8,' at step ',i8) failsafe = 1 endif else if (tcut.lt.0.0d00) then write(6,*) ga_nodeid(),' vn ',vn,istep write(6,*) ga_nodeid(),' t_est ',t_est,istep write(6,*) ga_nodeid(),' r-r_cluster ',r-r_cluster,istep write(6,*) ga_nodeid(),' Returned negative value at 1',istep failsafe = 1 endif #if 0 c c Check for trajectories that may have gone out and then back into c confining sphere c else if (r_cluster-r.lt.rskin.and.r_cluster-r.gt.0.0d00) then vn = rx*ra(ii,1,2)+ry*ra(ii,2,2)+rz*ra(ii,3,2) if (vn.le.0.0d00) then tcut = cluster_find_tau(ii,i,cllsn_isav,tmax,.true.) if (tcut.lt.dtmax.and.tcut.gt.0.0d00) then write(6,*) 'Found looping trajectory',istep write(6,*) 'dtmax = ',dtmax,istep write(6,*) 'tcut = ',tcut,istep write(6,*) 'ii = ',ii,istep write(6,*) 'cllsn_isav = ',cllsn_isav,istep write(6,*) 'r = ',r,istep write(6,*) 'r_cluster = ',r_cluster,istep if (.not.(ii.eq.cllsn_isav.and.tcut.lt.1.0d-10)) then write(6,*) 'Resetting trajectory',istep dtmax = tcut tsav = tcut iat = ii iloc = i else write(6,*)'Not resetting trajectory (loop is too short)' endif endif endif #endif endif end do c c Check to see if a collision occured on another processor c ibuf(1) = iat ibuf(2) = failsafe if (debug) write(6,*) me,' iat = ',iat,istep if (debug) write(6,*) me,' failsafe = ',failsafe,istep if (debug) write(6,*) me,' ibuf(1) = ',ibuf(1),istep if (debug) write(6,*) me,' ibuf(2) = ',ibuf(2),istep call ga_igop(5,ibuf,2,'+') if (debug) write(6,*) me,' ibuf(1) = ',ibuf(1),istep if (debug) write(6,*) me,' ibuf(2) = ',ibuf(2),istep c c No collisions detected. Step is complete so just return. c if (ibuf(1).eq.0.and.ibuf(2).eq.0) then t_rmndr = 0.0d00 t_done = tau if (debug) write(6,*) me,' Returning with no hits ',istep return endif c c If no solution found for atom outside confining sphere, then bail c completely and increase diameter of confining sphere so that all c atoms are enclosed. c if (ibuf(2).gt.0) then call ga_dgop(4,rmax,1,'max') if (debug) write(6,*) me,' r_cluster (a) = ',r_cluster r_cluster = r_cluster + (rmax - r_cluster)*1.1d00 if (debug) write(6,*) me,' r_cluster (b) = ',r_cluster if (ga_nodeid().eq.0) then write(6,*) ga_nodeid(),' Returned negative value at 2',istep endif failcount = failcount + 1 t_rmndr = 0.0d00 t_done = tau return endif c c At this point, a collision has been detected on at least on c processor. Check to find minimum time if collisions occur on more c than one processor. c if (iat.eq.0) then tsav = tau endif a = tsav call ga_dgop(6,a,1,'min') c c Find mass of particle that has first collision with confining sphere c if (a.eq.tsav) then b = mass(iat) else b = 0.0d00 endif call ga_dgop(7,b,1,'max') 1000 mmass = cl_mass - b tcut = a if (debug) write(6,155) me,2,tcut,istep if (tsav.ne.a) then iat = 0 iloc = 0 cllsn_isav = 0 if (debug) write(6,*) me,' cllsn_isav(1): ',cllsn_isav else cllsn_isav = iat if (debug) write(6,*) me,' cllsn_isav(2): ',cllsn_isav endif c c Handle degenerate case of only two atoms in cluster, which will c generally have two simultaneous collisions c if (ctot.eq.2) then do i = 1, nproc if (i-1.eq.me) then ibuf(i) = iat else ibuf(i) = 0 endif end do call ga_igop(3,ibuf,nproc,'+') j = 0 iat = 0 cllsn_isav = 0 do i = 1, nproc if (ibuf(i).gt.0.and.i-1.eq.me.and.j.eq.0) then iat = ibuf(i) cllsn_isav = ibuf(i) j = 1 else if (ibuf(i).gt.0) then j = 1 endif end do c c Make sure that correct mass is being used for collision c if (iat.ne.0) then b = mass(iat) else b = 0.0d00 endif call ga_dgop(6,b,1,'max') mmass = cl_mass - b endif c c Now recalculate coordinates of all particles in the cluster c call cluster_reset(tcut) call cluster_com !CHECK c c Check to see if there were any trajectories that pass through confining c sphere twice (i.e. goes out and then comes back in). Don't bother with c check if there are only 2 particles in system. c if (ctot.eq.2) then go to 2000 endif reset = 0 tchk = 0.0d00 scndat = 0 tmin = tcut tsav = tcut failsafe = 0 do i = 1, cl_tot ii = cl_at(i) rx = ra(ii,1,6) - cl_cmx ry = ra(ii,2,6) - cl_cmy rz = ra(ii,3,6) - cl_cmz r = sqrt(rx**2+ry**2+rz**2) if (r.ge.r_cluster.and.ii.ne.cllsn_isav) then tchk = cluster_find_tau(ii,i,cllsn_isav,tcut,.false.) if (debug) write(6,155) me,7,tchk,istep if (debug) write(6,*) me, 'ii: ',ii if (debug) write(6,*) me, 'cllsn_isav: ',cllsn_isav reset = 1 if (tchk.lt.tmin.and.tchk.gt.0.0d00) then if (debug) write(6,*) me,' Shorter collision found' tmin = tchk imin = ii if (debug) write(6,155) me,4,tchk,istep if (debug) write(6,155) me,5,tmin,istep else if (tchk.lt.0.0d00) then write(6,*) ga_nodeid(),' Returned negative value at 3',istep failsafe = 1 else c c This case should theoretically be impossible, but it may occur because of c roundoff c write(6,*) me,' tchk greater than or equal to tmin',istep write(6,*) me,' tchk = ',tchk,istep write(6,*) me,' tmin = ',tmin,istep failsafe = 1 endif endif end do ibuf(1) = reset ibuf(2) = failsafe call ga_igop(2,ibuf,2,'+') c c No solution for tau found, so increase confining sphere and then bail c if (ibuf(2).gt.0) then if (debug) write(6,*) me,' rmax (c) = ',rmax call ga_dgop(4,rmax,1,'max') if (debug) write(6,*) me,' rmax (d) = ',rmax if (debug) write(6,*) me,' r_cluster (c) = ',r_cluster r_cluster = r_cluster + (rmax - r_cluster)*1.1d00 if (debug) write(6,*) me,' r_cluster (d) = ',r_cluster if (ga_nodeid().eq.0) then write(6,*) 'Bogus value of collision time at 2' endif call cluster_reset(t_rmndr) t_rmndr = 0.0d00 t_done = tau return endif reset = ibuf(1) c c Shorter collision found so recalculate positions c if (reset.gt.0) then if (tmin.le.tsav) then if (debug) write(6,*) 'tmin = ',tmin,istep if (debug) write(6,*) 'tsav = ',tsav,istep a = tmin else a = tau endif call ga_dgop(2,a,1,'min') c if (a.le.tsav) then if (a.ne.tmin) then iat = 0 iloc = 0 cllsn_isav = 0 if (debug) write(6,*) me,'cllsn_isav(3): ',cllsn_isav else cllsn_isav = imin if (debug) write(6,*) me,'cllsn_isav(4): ',cllsn_isav endif tcut = a tsav = a !BJP is this correct? if (debug) write(6,155) me,3,tcut,istep if (iat.gt.0) then b = mass(iat) else b = 0.0d00 endif call ga_dgop(7,b,1,'+') call cluster_reset(0.0d00) iter = iter + 1 if (iter.gt.100) debug = .true. if (iter.gt.1000) call ga_error('Too many iterations',0) go to 1000 endif endif c 2000 l_cllsn = .true. cllsn_idx = cllsn_isav c t_rmndr = tmax - tcut t_done = tau - t_rmndr if (debug) write(6,*) me, 't_rmndr = ',t_rmndr if (debug) write(6,*) me, 't_done = ',t_done c return end c double precision function cluster_find_tau(iat,iloc,isav,tmax, + forward) #include "common.fh" c c This function calculates the time at which a particle outside the confining c sphere would have collided with the sphere. c integer iat, iloc, isav double precision r, r2, rx, ry, rz, dr double precision rrx, rry, rrz, vvx, vvy, vvz double precision vx, vy, vz, fx, fy, fz, v2, f2 double precision clcut, frdot, vrdot, vfdot, a, b, c double precision t, t1, t2, tcut, tmax, thi, tlo, tmid double precision ttmin,ttmax integer i,j,me,iter logical forward, debug c c A particle lies outside the cutoff. Find particle that crosses c cutoff first. c if (istep.ge.68365721.and.istep.le.68365723) then debug = .false. else debug = .false. endif me = ga_nodeid() mmass = cl_mass - mass(iat) c c Calculate center of mass and velocity of center of mass of remaining c particles in cluster (these are the rr and vv vectors) c rrx = (cl_mass*cl_cm_old(1) - mass(iat)*cl_old(iloc,1,2))/mmass rry = (cl_mass*cl_cm_old(2) - mass(iat)*cl_old(iloc,2,2))/mmass rrz = (cl_mass*cl_cm_old(3) - mass(iat)*cl_old(iloc,3,2))/mmass vvx = (cl_mass*cl_vcm_old(1) - mass(iat)*cl_old(iloc,1,3))/mmass vvy = (cl_mass*cl_vcm_old(2) - mass(iat)*cl_old(iloc,2,3))/mmass vvz = (cl_mass*cl_vcm_old(3) - mass(iat)*cl_old(iloc,3,3))/mmass c c The r and v vectors are the relative coordinates and velocities of c particle iat and the center of mass vectors. The vector f is the c force along this relative coordinate. c rx = cl_old(iloc,1,2) - cl_cm_old(1) ry = cl_old(iloc,2,2) - cl_cm_old(2) rz = cl_old(iloc,3,2) - cl_cm_old(3) vx = cl_old(iloc,1,3) - cl_vcm_old(1) vy = cl_old(iloc,2,3) - cl_vcm_old(2) vz = cl_old(iloc,3,3) - cl_vcm_old(3) fx = ra(iat,1,3) - cl_acmx fy = ra(iat,2,3) - cl_acmy fz = ra(iat,3,3) - cl_acmz c r = sqrt(rx**2 + ry**2 + rz**2) c c Note that we are using acceleration instead of force, c so factors of reduced mass disappear c vrdot = vx*rx + vy*ry + vz*rz frdot = fx*rx + fy*ry + fz*rz vfdot = vx*fx + vy*fy + vz*fz clcut = r_cluster v2 = vx**2 + vy**2 + vz**2 a = v2+frdot b = 2.0d00*vrdot c c c = rx**2 + ry**2 + rz**2 - clcut**2 c c Calculate c to minimize roundoff error from subtracting large numbers c dr = r - clcut c = 2.0d00*r*dr+dr**2 f2 = fx**2 + fy**2 + fz**2 c c Scan forwards from 0 to find a final value of t2. If no final c value found, then return with value of -1. c if (debug) write(6,*) me, 'iat: ',iat if (debug) write(6,*) me, 'a: ',a if (debug) write(6,*) me, 'b: ',b if (debug) write(6,*) me, 'c: ',c if (debug) write(6,*) me, 'f2: ',f2 if (debug) write(6,*) me, 'vfdot: ',vfdot if (forward) then t = tmax t1 = 0.0d00 ttmin = t1 ttmax = t c tlo = c + t1*(b + t1*(a+t1*(vfdot+t1*0.25d00*f2))) tlo = (-c-t1**2*(a+t1*(vfdot+t1*0.25d00*f2)))/b - t1 do i = 1, 1000 if (t.eq.tmax) then t2= tmax*dble(i)/1000.0d00 c thi = c + t2*(b + t2*(a+t2*(vfdot+t2*0.25d00*f2))) thi = (-c-t2**2*(a+t2*(vfdot+t2*0.25d00*f2)))/b - t2 if ((thi.ge.0.0d00.and.tlo.le.0.0d00).or. + (thi.le.0.0d00.and.tlo.ge.0.0d00)) then t = t2 write(6,*) ga_nodeid(),' tmin = ',ttmin,istep write(6,*) ga_nodeid(),' tmax = ',ttmax,istep write(6,*) ga_nodeid(),' tlo = ',tlo,istep write(6,*) ga_nodeid(),' thi = ',thi,istep write(6,*) ga_nodeid(),' t = ',t,istep go to 500 endif endif end do cluster_find_tau = -1.0d00 return c c scan backwards from tmax to find an initial value of t1 c else t = 0.0d00 t2 = tmax c thi = c + t2*(b + t2*(a+t2*(vfdot+t2*0.25d00*f2))) thi = (-c-t2**2*(a+t2*(vfdot+t2*0.25d00*f2)))/b - t2 do i = 1, 1000 if (t.eq.0.0d00) then t1= tmax - tmax*dble(i)/1000.0d00 c tlo = c + t1*(b + t1*(a+t1*(vfdot+t1*0.25d00*f2))) tlo = (-c-t1**2*(a+t1*(vfdot+t1*0.25d00*f2)))/b - t1 if ((thi.ge.0.0d00.and.tlo.le.0.0d00).or. + (thi.le.0.0d00.and.tlo.ge.0.0d00)) then t = t1 if (debug) write(6,*) me, 'tlo: ',tlo if (debug) write(6,*) me, 'thi: ',thi if (debug) write(6,*) me, 't: ',t go to 500 endif endif end do endif c c Use bisections to find accurate solution c 500 if (forward) then t1 = 0.0d00 t2 = t else t1 = t t2 = tmax if (debug) write(6,*) me, 't1: ',t1 if (debug) write(6,*) me, 't2: ',t2 endif iter = 0 c 600 tlo = c + t1*(b + t1*(a+t1*(vfdot+t1*0.25d00*f2))) c thi = c + t2*(b + t2*(a+t2*(vfdot+t2*0.25d00*f2))) 600 tlo = (-c-t1**2*(a+t1*(vfdot+t1*0.25d00*f2)))/b - t1 thi = (-c-t2**2*(a+t2*(vfdot+t2*0.25d00*f2)))/b - t2 if ((thi.ge.0.0d00.and.tlo.le.0.0d00).or. + (thi.le.0.0d00.and.tlo.ge.0.0d00)) then t = 0.5d00*(t1+t2) c tmid = c + t*(b + t*(a+t*(vfdot+t*0.25d00*f2))) tmid = (-c-t**2*(a+t*(vfdot+t*0.25d00*f2)))/b - t if ((tmid.ge.0.0d00.and.thi.le.0.0d00).or. + (tmid.le.0.0d00.and.thi.ge.0.0d00)) then t1 = t else if ((tmid.ge.0.0d00.and.tlo.le.0.0d00).or. + (tmid.le.0.0d00.and.tlo.ge.0.0d00)) then t2 = t endif tcut = 0.5d00*(t1+t2) iter = iter + 1 if (abs(t1-t2)/tau.gt.1.0d-14.and.iter.lt.1000) go to 600 c c Protect against numerical roundoff errors c if (iter.ge.1000) then write(6,*) ga_nodeid(),' Maxed out on iterations' endif if (forward.and.(tcut.lt.1.0d-10.or. + abs(tcut-tmax).lt.1.0d-10)) then cluster_find_tau = -1.0d00 return endif else open(unit=2,file='tau.dat',status='unknown') do j = 0, 1000 t = tmax*dble(j)/1000.0d00 t1 = (-c-t**2*(a+t*(vfdot+t*0.25d00*f2)))/b - t tmid = c + t*(b + t*(a+t*(vfdot+t*0.25d00*f2))) write(2,300) t,t1, tmid 300 format(3(' ',f16.8)) end do close(2) if (iat.ne.isav) then if (abs(thi).lt.0.000001d00) then tcut = tmax else if (abs(tlo).lt.0.000001d00) then if (vrdot.gt.0.0d00) then tcut = 0.0d00 else tcut = tmax endif else if (forward) write(6,*) 'Searching forward' write(6,*) 'Collision time does not converge at step ',istep tcut = -1.0d00 endif else tcut = 4.0d00*tau endif endif c if (forward) write(6,*) ga_nodeid(),' tcut = ',tcut cluster_find_tau = tcut return end c double precision function cluster_check_radius() #include "common.fh" double precision rx, ry, rz, r2, cl2 integer i c c check to make sure that all cluster particles are within cluster c radius c cl2 = 0.0d00 do i = 1, antot if (at(i).eq.2) then rx = ra(i,1,6) - cl_cmx ry = ra(i,2,6) - cl_cmy rz = ra(i,3,6) - cl_cmz r2 = rx**2 + ry**2 + rz**2 if (r2.gt.cl2) cl2 = r2 endif end do call ga_dgop(4,cl2,1,'max') c cluster_check_radius = sqrt(cl2) return end c subroutine cluster_mc #include "common.fh" c c Perform Monte Carlo adjustment of volume on confining volume c double precision r_old, delta_r, r2, cl2, rx, ry, rz, pi double precision vol_new, vol_old, x, ran1, ratio integer i, icnt, iat, me logical force_move,debug c if (nocluster) return if (istep.ge.6932366) then debug = .false. else debug = .false. endif call cluster_com me = ga_nodeid() r_cluster_old = r_cluster r_old = r_cluster force_move = .false. delta_r = 0.2 if (debug) write(6,*)me,' (1) r_cluster ',r_cluster,istep if (me.eq.0) then r_cluster = r_cluster + delta_r*(ran1(0)-0.5d00) else r_cluster = 0.0d00 endif if (debug) write(6,*)me,' (2) r_cluster ',r_cluster,istep call ga_dgop(1,r_cluster,1,'+') if (debug) write(6,*)me,' (3) r_cluster ',r_cluster,istep c c If new value of r_cluster falls outside of allowed interval then c it is rejected, unless old value was aready outside interval. c if (r_cluster.ge.cl_upper.or.r_cluster.le.cl_lower) then c c If new values move cluster radius closer to cutoffs from the outside, c then accept them, reject them otherwise. Before accepting move, make c sure that there are no illegal overlaps. c force_move = .true. if (r_cluster.gt.r_old.and.r_cluster.gt.cl_upper) then r_cluster = r_old else if (r_cluster.lt.r_old.and.r_cluster.lt.cl_lower) then r_cluster = r_old endif if (r_cluster.eq.r_old) return endif if (debug) write(6,*)me,' (4) r_cluster ',r_cluster,istep c c Check to see if any particles are outside new value of r_cluster. c If so, then new value is rejected. c if (r_cluster.lt.r_old) then icnt = 0 cl2 = r_cluster**2 do i = 1, antot if (at(i).eq.2) then rx = ra(i,1,6) - cl_cmx ry = ra(i,2,6) - cl_cmy rz = ra(i,3,6) - cl_cmz r2 = rx**2 + ry**2 + rz**2 if (r2.gt.cl2) then icnt = icnt + 1 endif endif end do call ga_igop(9,icnt,1,'+') if (icnt.gt.0) then r_cluster = r_old return endif endif if (debug) write(6,*)me,' (5) r_cluster ',r_cluster,istep if (force_move) return c c Accept with Monte Carlo probability. c pi = 4.0d00*atan(1.0d00) vol_new = 4.0d00*pi*r_cluster**3/3.0d00 vol_old = 4.0d00*pi*r_old**3/3.0d00 ratio = (r_cluster/r_old)**2 c x = ratio*exp(-cl_prssr*(vol_new-vol_old)/mc_tmprtr) if (me.eq.0) then if (x.ge.1.0d00) then icnt = 1 else if (ran1(0).lt.x) then icnt = 1 else icnt = 0 endif endif else icnt = 0 endif call ga_igop(1,icnt,1,'+') if (icnt.eq.0) then r_cluster = r_old endif if (debug) write(6,*)me,' (6) r_cluster ',r_cluster,istep return end c subroutine cluster_binr #include "common.fh" c c Bin the current value of r_cluster c double precision dr integer ir, isample if (nocluster) return c c Find bin c dr = r_cluster - cl_lower ir = int(dr/mc_step) + 1 if (ir.le.0) ir = 1 if (ir.gt.mcbins) ir = mcbins mc_cnt = mc_cnt + 1 c c Find slice for statistics c if (istep.gt.mc_start) then isample = int(10.0d00*(dble(istep-mc_start)-0.5d00) + / dble(nstep-mc_start)) + 1 if (isample.gt.10) isample = 10 else isample = 1 endif r_cnt(isample) = r_cnt(isample) + 1 r_distr(ir,isample) = r_distr(ir,isample) + 1 return end c subroutine cluster_print_binr #include "common.fh" c c Print out the distribution of r_cluster c double precision rdist(MAXBINS), norm, r, normi double precision rdist2(MAXBINS), sum double precision sigr(MAXBINS),sigr2(MAXBINS) double precision sig2(MAXBINS),sig2_2(MAXBINS) double precision rdisti(MAXBINS,10),rdisti2(MAXBINS,10) integer itot, i, j, isample character*32 filename c if (nocluster) return if (task_id.lt.10) then write(filename,100) task_id else if (task_id.ge.10.and.task_id.lt.100) then write(filename,101) task_id else if (task_id.ge.100.and.task_id.lt.1000) then write(filename,102) task_id else if (task_id.ge.1000.and.task_id.lt.10000) then write(filename,103) task_id endif 100 format('cl.distr.',i1) 101 format('cl.distr.',i2) 102 format('cl.distr.',i3) 103 format('cl.distr.',i4) c c Evaluate normalized distribution and uncertainty for P(r) c if (mc_cnt.lt.0) return norm = dble(mc_cnt) do i = 1, mcbins rdist(i) = 0.0d00 rdist2(i) = 0.0d00 sig2(i) = 0.0d00 sig2_2(i) = 0.0d00 sigr(i) = 0.0d00 sigr2(i) = 0.0d00 do j = 1, 10 rdisti(i,j) = 0.0d00 rdisti2(i,j) = 0.0d00 end do end do do j = 1, 10 normi = dble(r_cnt(j)) do i = 1, mcbins rdist(i) = rdist(i) + dble(r_distr(i,j))/norm rdisti(i,j) = dble(r_distr(i,j))/normi end do end do do j = 1, 10 do i = 1, mcbins sig2(i) = sig2(i) + rdisti(i,j)**2 end do end do do i = 1, mcbins sigr(i) = (sig2(i)-10.0d00*rdist(i)**2)/9.0d00 end do c c Uncertainty at the 95% confidence level c do i = 1, mcbins sigr(i) = 2.23d00*sqrt(sigr(i)/10.d00) end do sum = 0.0d00 do i = 1, mcbins sum = sum + rdist(i) end do do i = 1, mcbins rdist(i) = rdist(i)/(sum*mc_step) sigr(i) = sigr(i)/(sum*mc_step) end do c c Evaluate normalized distribution and uncertainty for P(V) c do j = 1, 10 normi = dble(r_cnt(j)) do i = 1, mcbins r = cl_lower + (dble(i)-0.5d00)*mc_step rdist2(i) = rdist2(i) + dble(r_distr(i,j))/(r**2*norm) rdisti2(i,j) = dble(r_distr(i,j))/(r**2*normi) end do end do do j = 1, 10 do i = 1, mcbins sig2_2(i) = sig2_2(i) + rdisti2(i,j)**2 end do end do do i = 1, mcbins sigr2(i) = (sig2_2(i)-10.0d00*rdist2(i)**2)/9.0d00 end do c c Uncertainty at the 95% confidence level c do i = 1, mcbins sigr2(i) = 2.23d00*sqrt(sigr2(i)/10.d00) end do sum = 0.0d00 do i = 1, mcbins sum = sum + rdist2(i) end do do i = 1, mcbins rdist2(i) = rdist2(i)/(sum*mc_step) sigr2(i) = sigr2(i)/(sum*mc_step) end do c if (ga_nodeid().eq.0) then open(unit=2,file=filename,status='unknown') do i = 1, mcbins r = cl_lower + (dble(i)-0.5d00)*mc_step write(2,200) r, rdist(i), rdist2(i),sigr(i),sigr2(i) 200 format(f12.4,' ',f16.8,' ',f16.8,' ', + f16.8,' 'f16.8) end do close(2) endif c return end c subroutine cluster_clear_binr #include "common.fh" c c clear the distribution of r_cluster c integer itot, i, j c if (nocluster) return do j = 1, 10 do i = 1, MAXBINS r_distr(i,j) = 0 end do r_cnt(j) = 0 end do mc_cnt = 0 mc_start = istep c return end c subroutine cluster_reset_binr(iflg) #include "common.fh" c c recalculate bounds for confining sphere c integer iflg,ilow,ihi,imax,i if (nocluster) return if (iflg.eq.1) then c c find minimum and maximum values of distribution and reset c windows to just bound these values c if (ga_nodeid().eq.0.and.l_rad) then open(unit=3,file="win1.dat",status='unknown') do i = 1, mcbins write(3,*) i, r_distr(i,1) end do endif ilow = 0 ihi = 0 do i = 1, mcbins if (r_distr(i,1).gt.0.and.ilow.eq.0) then ilow = i-1 if (ilow.lt.1) ilow = 1 endif if (ilow.gt.0.and.ihi.eq.0.and.r_distr(i,1).eq.0) then ihi = i endif end do if (ihi.eq.0) ihi = mcbins if (ihi.lt.mcbins) then cl_upper = cl_lower + mc_step*dble(ihi) endif if (ihi.gt.1) then cl_lower = cl_lower + mc_step*dble(ilow-1) endif else if (iflg.eq.2) then c c reset bounds so that maximum is set at radius value that c is the maximum value of distribution c ilow = 1 ihi = 0 imax = 0 do i = 1, mcbins c if (r_distr(i,1).gt.0.and.ilow.eq.0) then c ilow = i-1 c if (ilow.lt.1) ilow = 1 c endif if (r_distr(i,1).gt.imax) then ihi = i imax = r_distr(i,1) endif end do if (ihi.eq.0) ihi = mcbins if (ihi.lt.mcbins) then cl_upper = cl_lower + mc_step*dble(ihi) endif if (ilow.gt.1) then cl_lower = cl_lower + mc_step*dble(ilow-1) endif endif cl_upper = 3.5d00 cl_lower = 0.5d00 cl_upper = 4.5d00 cl_lower = 0.5d00 mc_step = (cl_upper-cl_lower)/dble(mcbins) call cluster_clear_binr return end c subroutine cluster_do_cllsn #include "common.fh" integer iat, i, j, ii, jj, iloc, isav, scndat double precision r, r2, rc2, rx, ry, rz double precision rrx, rry, rrz, vvx, vvy, vvz double precision vx, vy, vz, fx, fy, fz, mu, v2, f2 double precision comm(4), tmax, tcut, vrdot double precision rnx, rny, rnz, vpx, vpy, vpz, vllx, vlly, vllz c c Re-evaluate all particle velocities. First, recalculate center of c mass and center of mass velocity of cluster at new coordinates c and velocities. c if (nocluster) return cllsn_cnt = cllsn_cnt + 1 iat = cllsn_idx call cluster_com if (iat.gt.0) then rrx = (cl_mass*cl_cmx - mass(iat)*ra(iat,1,6))/mmass rry = (cl_mass*cl_cmy - mass(iat)*ra(iat,2,6))/mmass rrz = (cl_mass*cl_cmz - mass(iat)*ra(iat,3,6))/mmass vvx = (cl_mass*cl_vcmx - mass(iat)*ra(iat,1,2))/mmass vvy = (cl_mass*cl_vcmy - mass(iat)*ra(iat,2,2))/mmass vvz = (cl_mass*cl_vcmz - mass(iat)*ra(iat,3,2))/mmass c c The r and v vectors are the relative coordinates and velocities of c particle iat and the center of mass vectors. The vector f is the c force along this relative coordinate. c rx = ra(iat,1,6) - rrx ry = ra(iat,2,6) - rry rz = ra(iat,3,6) - rrz vx = ra(iat,1,2) - vvx vy = ra(iat,2,2) - vvy vz = ra(iat,3,2) - vvz c c Decompose velocity v into components that are parallel and perpendicular c to r. Save this information for computing post-collision velocities. c r = sqrt(rx**2 + ry**2 + rz**2) rnx = rx/r rny = ry/r rnz = rz/r vrdot = vx*rnx + vy*rny + vz*rnz vllx = vrdot * rnx vlly = vrdot * rny vllz = vrdot * rnz vpx = vx - vllx vpy = vy - vlly vpz = vz - vllz comm(1) = (vpx-vllx-vx)/cl_mass comm(2) = (vpy-vlly-vy)/cl_mass comm(3) = (vpz-vllz-vz)/cl_mass comm(4) = mmass else comm(1) = 0.0d00 comm(2) = 0.0d00 comm(3) = 0.0d00 comm(4) = 0.0d00 endif call ga_dgop(8,comm,4,'+') vvx = comm(1) vvy = comm(2) vvz = comm(3) mmass = comm(4) c do i = 1, cl_tot ii = cl_at(i) if (ii.eq.iat) then ra(ii,1,2) = ra(ii,1,2) + mmass*vvx ra(ii,2,2) = ra(ii,2,2) + mmass*vvy ra(ii,3,2) = ra(ii,3,2) + mmass*vvz else ra(ii,1,2) = ra(ii,1,2) - mass(ii)*vvx ra(ii,2,2) = ra(ii,2,2) - mass(ii)*vvy ra(ii,3,2) = ra(ii,3,2) - mass(ii)*vvz endif end do call cluster_old_at c return end c subroutine cluster_reset(dt) #include "common.fh" double precision dt, htausq, scale integer i, ii c c Reset coordinates and velocities using old values from beginning of c step. c htausq = 0.5d00*dt**2 do i = 1, cl_tot ii = cl_at(i) ra(ii,1,1) = cl_old(i,1,1)+dt*cl_old(i,1,3)+htausq*ra(ii,1,3) ra(ii,2,1) = cl_old(i,2,1)+dt*cl_old(i,2,3)+htausq*ra(ii,2,3) ra(ii,3,1) = cl_old(i,3,1)+dt*cl_old(i,3,3)+htausq*ra(ii,3,3) ra(ii,1,6) = cl_old(i,1,2)+dt*cl_old(i,1,3)+htausq*ra(ii,1,3) ra(ii,2,6) = cl_old(i,2,2)+dt*cl_old(i,2,3)+htausq*ra(ii,2,3) ra(ii,3,6) = cl_old(i,3,2)+dt*cl_old(i,3,3)+htausq*ra(ii,3,3) ra(ii,1,2) = cl_old(i,1,3)+dt*ra(ii,1,3) ra(ii,2,2) = cl_old(i,2,3)+dt*ra(ii,2,3) ra(ii,3,2) = cl_old(i,3,3)+dt*ra(ii,3,3) end do #if 1 do i = 1, sl_tot ii = sl_at(i) ra(ii,1,1) = sl_old(i,1,1)+dt*sl_old(i,1,3)+htausq*ra(ii,1,3) ra(ii,2,1) = sl_old(i,2,1)+dt*sl_old(i,2,3)+htausq*ra(ii,2,3) ra(ii,3,1) = sl_old(i,3,1)+dt*sl_old(i,3,3)+htausq*ra(ii,3,3) ra(ii,1,6) = sl_old(i,1,2)+dt*sl_old(i,1,3)+htausq*ra(ii,1,3) ra(ii,2,6) = sl_old(i,2,2)+dt*sl_old(i,2,3)+htausq*ra(ii,2,3) ra(ii,3,6) = sl_old(i,3,2)+dt*sl_old(i,3,3)+htausq*ra(ii,3,3) ra(ii,1,2) = sl_old(i,1,3)+dt*ra(ii,1,3) ra(ii,2,2) = sl_old(i,2,3)+dt*ra(ii,2,3) ra(ii,3,2) = sl_old(i,3,3)+dt*ra(ii,3,3) end do #endif #if 1 c c resete extended Hamiltonian parameters c if ((prsflg.or.ptflg).and.ipmode.eq.0) then vol1 = cl_vol1_old + dt * cl_vol2_old + htausq * vol3 vol2 = cl_vol2_old + dt * vol3 scale = vol1 / (cl_box_old(1) * cl_box_old(2) * cl_box_old(3)) scale = exp(log(scale)/3.0d00) xbox = scale * cl_box_old(1) ybox = scale * cl_box_old(2) zbox = scale * cl_box_old(3) xbox2 = 0.5d00 * xbox ybox2 = 0.5d00 * ybox zbox2 = 0.5d00 * zbox endif c if ((prsflg.or.ptflg).and.ipmode.eq.1) then do 500 i = 1, 3 alen1(i) = cl_alen1_old(i) + dt * cl_alen2_old(i) + + htausq * alen3(i) alen2(i) = cl_alen2_old(i) + dt * alen3(i) 500 continue xbox = alen1(1) ybox = alen1(2) zbox = alen1(3) xbox2 = 0.5d00 * xbox ybox2 = 0.5d00 * ybox zbox2 = 0.5d00 * zbox endif c if ((prsflg.or.ptflg).and.ipmode.eq.2) then do 600 i = 1, 2 alen1(i) = cl_alen1_old(i) + dt * cl_alen2_old(i) + + htausq * alen3(i) alen2(i) = cl_alen2_old(i) + dt * alen3(i) 600 continue xbox = alen1(1) ybox = alen1(2) xbox2 = 0.5d00 * xbox ybox2 = 0.5d00 * ybox endif c c predictor step for time scale c if (tmpflg.or.ptflg) then scal1 = cl_scal1_old + dt * cl_scal2_old + htausq * scal3 scal2 = cl_scal2_old + dt * scal3 endif c c center of mass parameters c cl_cmx = cl_cm_old(1) cl_cmy = cl_cm_old(2) cl_cmz = cl_cm_old(3) cl_vcmx = cl_vcm_old(1) cl_vcmy = cl_vcm_old(2) cl_vcmz = cl_vcm_old(3) #endif return end ga-5-3/global/examples/md_cluster/md_lj.in0000640005473000001440000000034110432111045017415 0ustar d3n000users1000000000, 0.01, 2, -44933 2.5,20,0 1, 0.5, 0.05, 1000.0, 0.005 1, 1000, 100, 6, 0.5, 0.05, 1000.0, 0.005 1001, 1000000000, 100, 6, 0.5, 0.05, 1000.0, 0.005 2,2 10000000 50000,1000000,2000000 0.0076, 0.5, 0.0, 2.349 20, 100 ga-5-3/global/examples/scf/0000750005473000001440000000000012275260561014432 5ustar d3n000usersga-5-3/global/examples/scf/output.F0000640005473000001440000000520411457136773016113 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif subroutine output (z,rowlow,rowhi,collow,colhi,rowdim,coldim, $ nctl) c....................................................................... c output prints a real*8 matrix in formatted form with numbered rows c and columns. the input is as follows; c matrix(*,*).........matrix to be output c rowlow..............row number at which output is to begin c rowhi...............row number at which output is to end c collow..............column number at which output is to begin c colhi...............column number at which output is to end c rowdim..............row dimension of matrix(*,*) c coldim..............column dimension of matrix(*,*) c nctl................carriage control flag; 1 for single space c 2 for double space c 3 for triple space c the parameters that follow matrix are all of type integer*4. the c program is set up to handle 5 columns/page with a 1p5d24.15 format for c the columns. if a different number of columns is required, change c formats 1000 and 2000, and initialize kcol with the new number of c columns. c author; nelson h.f. beebe, quantum theory project, university of c florida, gainesville c....................................................................... C$Id: output.F,v 1.1 2005/03/08 23:58:03 d3g293 Exp $ implicit double precision (a-h,o-z) #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" integer rowlow,rowhi,collow,colhi,rowdim,coldim,begin,kcol dimension z(rowdim,coldim) dimension asa(3) data column/8hcolumn /,asa/8h ,8h00000000 , 1 8h-------- /,blank/8h / data kcol/8/ data zero/0.d00/ if (ga_nodeid().ne.0) return do 11 i=rowlow,rowhi do 10 j=collow,colhi if (z(i,j).ne.zero) go to 15 10 continue 11 continue write (6,3000) 3000 format (/' zero matrix'/) go to 3 15 continue if (rowhi.lt.rowlow) go to 3 if (colhi.lt.collow) go to 3 last = min0(colhi,collow+kcol-1) do 2 begin = collow,colhi,kcol write (6,1000) (column,i,i = begin,last) do 1 k = rowlow,rowhi do 4 i=begin,last if (z(k,i).ne.zero) go to 5 4 continue go to 1 c 5 write (6,2000) k,(z(k,i), i = begin,last) 1 continue last = min0(last+kcol,colhi) 2 continue 3 return 1000 format (/11x,7(a3,i3,3x),(a3,i3)) 2000 format ('row',i4,1x,8f9.4) end ga-5-3/global/examples/scf/be16.inpt0000640005473000001440000000054410243415365016064 0ustar d3n000users16 4 0.000 0.000 0.000 4 4.000 0.000 0.000 4 8.000 0.000 0.000 4 12.000 0.000 0.000 4 16.000 0.000 0.000 4 20.000 0.000 0.000 4 24.000 0.000 0.000 4 28.000 0.000 0.000 4 32.000 0.000 0.000 4 36.000 0.000 0.000 4 40.000 0.000 0.000 4 44.000 0.000 0.000 4 48.000 0.000 0.000 4 52.000 0.000 0.000 4 56.000 0.000 0.000 4 60.000 0.000 0.000 ga-5-3/global/examples/scf/integ.F0000640005473000001440000000571611274466357015672 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif double precision function exprjh(x) C$Id: integ.F,v 1.1 2005-03-08 23:58:03 d3g293 Exp $ double precision x c c dumb solution to underflow problems on sun c if (x.lt.-37.0d0) then exprjh = 0.0d0 else exprjh = exp(x) endif end subroutine setfm implicit double precision (a-h,o-z) common/values/fm(2001,5),rdelta,delta,delo2 dimension t(2001),et(2001) c c initalize common block for computation of f0 by recursion down c from f200 c delta=28.0d0/2000.0d0 delo2=delta*0.5d0 rdelta=1.0d0/delta maxm=4 do 10 i=1,2001 tt=delta*dble(i-1) et(i)=exprjh(-tt) t(i)=2.0d0*tt fm(i,maxm+1)=0.0d0 10 continue do 20 i=200,maxm,-1 rr=1.0d0/dble(2*i+1) do 30 ii=1,2001 fm(ii,maxm+1)=(et(ii)+t(ii)*fm(ii,maxm+1))*rr 30 continue 20 continue do 40 i=maxm,1,-1 rr=1.0d0/dble(2*i-1) do 50 ii=1,2001 fm(ii,i)=(et(ii)+t(ii)*fm(ii,i+1))*rr 50 continue 40 continue c end subroutine f0(value, t) implicit real*8 (a-h,o-z) common/values/fm(2001,5),rdelta,delta,delo2 parameter(fac0=0.88622692545276d0, $ rhalf=0.5d0,rthird=0.3333333333333333d0,rquart=0.25d0) data t0/28.d0/ c c computes f0 to a relative accuracy of better than 4.e-13 for all t. c uses 4th order taylor expansion on grid out to t=28.0 c asymptotic expansion accurate for t greater than 28 c if(t.ge.t0) then value = fac0 / sqrt(t) else n = idint((t+delo2)*rdelta) x = delta*dble(n)-t n = n+1 value = fm(n,1)+x*(fm(n,2)+rhalf*x*(fm(n,3)+ $ rthird*x*(fm(n,4)+rquart*x*fm(n,5)))) endif c end subroutine addin(g, i, j, k, l, fock, dens, iky) implicit double precision (a-h, o-z) dimension fock(*), dens(*), iky(*) c c add (ij|kl) into the fock matrix c gg = g g2 = gg+gg g4 = g2+g2 ik = iky(i) + k il = iky(i) + l ij = iky(i) + j jk = iky(max(j,k)) + min(j,k) jl = iky(max(j,l)) + min(j,l) kl = iky(k) + l aij = g4*dens(kl)+fock(ij) fock(kl) = g4*dens(ij)+fock(kl) fock(ij) = aij gil=gg if(i.eq.k.or.j.eq.l) gg = g2 if(j.eq.k) gil = g2 ajk = fock(jk) - gil*dens(il) ail = fock(il) - gil*dens(jk) aik = fock(ik) - gg*dens(jl) fock(jl) = fock(jl) - gg*dens(ik) fock(jk) = ajk fock(il) = ail fock(ik) = aik c end subroutine dfill(n,val,a,ia) implicit real*8 (a-h,o-z) dimension a(*) c c initialise double precision array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end ga-5-3/global/examples/scf/README0000640005473000001440000000206411423627743015320 0ustar d3n000usersThis is a converted version of the scf test code in the tcgmsg directory that solves the Hartree-Fock equations for a cluster of beryllium atoms. The main modifications are that this code is uses distributed data instead of replicated data and is based on the GA function calls instead of TCGMSG. The input is a simple XYZ format file of the form:: 1 Number of beryllium atoms 2 Blank line 3 4 x y z 4 4 x y z . . . Other parameters that control convergence etc. can be found in the cscf.h file. The two-electron Fock build does not make use of the 8-fold symmetry of the two-electron integrals. The default diagonalization routine makes use of a similarity transform so that only a standard eigenvalue problem needs to be solved. A direct solution using a generalized eigenvalue solver can be had by setting the USE_TRANSFORM compiler directive to 0 in the top of the scf.F file. A larger system containing 16 atoms has also been included in this directory. To run the larger problem, just copy the file be16.inpt to be.inpt and run the code. ga-5-3/global/examples/scf/timer.F0000640005473000001440000000117311457136773015674 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif double precision function timer() c c return the time since the last call to timer. c c must be initialized by calling once and throwing away the c value c ... use cpu time on multi-user machines c ... use elapsed time on dedicated or single user machines. c *mdc*if unix * real*4 dtime, tt(2) * timer = dble(dtime(tt)) *mdc*elseif tcgmsg C$Id: timer.F,v 1.1 2005-03-08 23:58:03 d3g293 Exp $ #include "mp3def.fh" save mlast data mlast/0/ m = MP_TIMER() timer = dble(m - mlast) * 0.01d0 mlast = m *mdc*endif c end ga-5-3/global/examples/scf/cscf.h0000640005473000001440000000603711251533550015522 0ustar d3n000usersc c include file defining common /cscf/ c c constant parameters are set in cscf, parameters are set c after reading input. c c maxatom = maximum no. of atoms (constant parameter) c maxnbfn = maximum no. of bas. fnct.(constant parameter) c maxnnbfn = maxnbfn*(maxnbfn+1)/2 (constant parameter) c natom = no. of atoms (parameter) c nbfn = no. of basis functions (parameter) c nnbfn = nbfn*(nbfn+1)/2 (parameter) c nocc = no. of occupied orbitals (parameter) c mxiter = maximim no. of iterations(constant parameter) c tol = convergence criterion (constant parameter) c pi = a familiar constant (constant parameter) c tol2e = 2-e integral screening (constant parameter) c c the remainder is initialized in block data or in the c routine ininrm (rnorm and iky) c c enrep = nuclear repulsion energy c q(1:natom) = nuclear charge of atom c ax(1:natom) = x co-ordinate of atom c ay(1:natom) = y ... c az(1:natom) = z ... c x(1:nbfn) = x co-ordinate of basis function c y(1:nbfn) = y ... c z(1:nbfn) = z ... c expnt(1:nbfn)= exponent of gaussian c rnorm(1:nbfn)= normalization constant of gaussian c iky(1:nbfn) = iky(i) = i*(i-1)/2 to speed up fock build c icut1 = no. of successful ij 2-e screening tests c icut2 = no. of successful ijkl 2-e screening tests c icut3 = no. of 2-e integrals computed c parameter (maxatom = 286) !cste original value 50 parameter (maxnbfn =15*maxatom, mxiter = 30) parameter (maxnnbfn = maxnbfn*(maxnbfn+1)/2) parameter (pi = 3.141592653589793d0) parameter (tol= 0.5d-3) parameter (tol2e=1.0d-6) c common /cscf/ $ enrep, q(maxatom), ax(maxatom), ay(maxatom), az(maxatom), $ x(maxnbfn), y(maxnbfn), z(maxnbfn), expnt(maxnbfn), $ rnorm(maxnbfn),iky(maxnbfn), icut1, icut2, icut3, icut4, $ natom, nocc, nbfn, nnbfn double precision enrep, q, ax, ay, az, x, y, z, expnt, rnorm integer*8 iky, icut1, icut2, icut3, icut4, natom, nocc, nbfn, $ nnbfn c c Global array parameters used in calculations: c c ichunk: chunk size for distributing workload c c g_counter: global array used to assign next task c g_dens: global array used to store density matrix c g_fock: global array used to store fock matrix c g_tfock: global array used to store transformed fock matrix c g_schwarz: global array used to store schwarz matrix c g_work: global array used to store work matrix c g_ident: global array used to store identity matrix c g_orbs: global array used to store orbital vectors c parameter (ichunk = 20) !cste original value 10 common /g_arrays/ eigv(maxnbfn), $ g_counter, g_dens, g_fock, g_tfock, g_schwarz, g_work, $ g_ident, g_orbs double precision eigv integer g_counter, g_dens, g_fock, g_tfock, g_schwarz, g_work, $ g_ident, g_orbs ga-5-3/global/examples/scf/be.inpt0000640005473000001440000000013310213660151015677 0ustar d3n000users4 4 0.000 0.000 0.000 4 4.000 0.000 0.000 4 8.000 0.000 0.000 4 12.000 0.000 0.000 ga-5-3/global/examples/scf/scf.F0000640005473000001440000011306111754533633015323 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif program scf C$Id: scf.F,v 1.18 2007/03/23 19:24:36 d3g293 Exp $ implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" c integer*8 nints, maxint !cste c c CAUTION: integer precision requirements c nints, maxint, etc. are proportional to the number of basis functions c to the fourth power! 216**4 is greater than the largest number c that can be represented as a 32-bit signed interger, so 64-bit c arithmetic is needed to count integrals when calculating more than c 14 Be atoms with 15 basis functions each. Since integrals are counted c over all iterations, 18 iterations with 7 atoms can result in precision c problems. Note that the wave function could be calculated correctly c for much larger basis sets without 64-bit integers because the required c indexing is usually proportional to nbfn**2, which is good to 46,340 c basis functions, except that the task counter runs as (nbfn/ichunk)**4, c so with ichunk = 10, 32-bit integers yield correct wavefunctions out to c 2145 basis functions (maxatom=143), or 4290 (maxatom=286) with ichunk = 20, ... c c This warning applies to the Global Arrays implementation as well! c functions of special concern are ga_igop and nga_read_inc. c #define USE_TRANSFORM 1 integer heap, stack data tinit, tonel, ttwoel, tdiag, tdens, tprint /6*0.0d0/ data eone, etwo, energy, deltad /4*0.0d0/ c c initalize the parallel message passing environment c #include "mp3.fh" call ga_initialize() c c Allocate memory c heap = 32000000 stack = 32000000 if (.not.ma_init(MT_DBL, stack, heap)) + call ga_error("ma_init failed",-1) call flush(6) me = ga_nodeid() nproc = ga_nnodes() c c initialize a bunch of stuff and initial density matrix c rjunk = timer() c c get input from file be.inpt c call input c c create and allocate global arrays c call setarrays if (ga_nodeid().eq.0) write(6,*) 'bytes of memory used by node 0:' + ,ga_inquire_memory() call ininrm c c create initial guess for density matrix by using single atom c densities c call denges tinit = timer() #if USE_TRANSFORM c c make initial orthogonal orbital set for solution method using c similarity transform c call makeob #endif c c make info for sparsity test c call makesz(schwmax) c c print preliminary data before any long compute segments start if (ga_nodeid().eq.0) call flush(6) c c *** iterate *** c do 10 iter = 1, mxiter c c make the one particle contribution to the fock matrix c and get the partial contribution to the energy c call oneel(schwmax, eone) tonel = tonel + timer() c c compute the two particle contributions to the fock matrix and c get the total energy. c call twoel(schwmax, etwo) ttwoel = ttwoel + timer() c c Diagonalize the fock matrix. The diagonalizers used in this c subroutine are actually sequential, not parallel. c call diagon(tester,iter) tdiag = tdiag + timer() c c make the new density matrix in g_work from orbitals in g_orbs, c compute the norm of the change in the density matrix and c then update the density matrix in g_dens with damping. c call makden deltad = dendif() if (iter.eq.1) then scale = 0.0d0 else if (iter .le. 5) then if (nbfn .gt. 60) then scale = 0.5d0 else scale = 0.0d0 endif else scale = 0.0d0 endif call damp(scale) tdens = tdens + timer() c c add up energy and print out convergence information c if (me.eq.0) then energy = enrep + eone + etwo call prnout(iter, energy, deltad, tester) tprint = tprint + timer() endif c c if converged then exit iteration loop c if (deltad .lt. tol) goto 20 call ga_igop(9, icut4, 1, '+') !cste if(icut4 .eq. 0) then !cste c something has gone wrong--print what you know and quit. write(6,*) 'no two-electron integrals computed!' !cste goto 20 !cste endif !cste 10 continue iter = iter - 1 !cste if(me.eq.0) $ write(6,*) ' SCF failed to converge in ', iter, ' iters' c...v....1....v....2....v....3....v....4....v....5....v....6....v....7.. c c finished ... print out eigenvalues and occupied orbitals c 20 continue call ga_igop(6, icut1, 1, '+') call ga_igop(7, icut2, 1, '+') call ga_igop(8, icut3, 1, '+') if (me.eq.0) then c c print out timing information c call prnfin(energy) write(6,1) tinit, tonel, ttwoel, tdiag, tdens, tprint, $ nproc 1 format(/5x,' init ',4x,' onel ',4x,' twoel ',4x,' diag ',4x, $ ' dens print ncpu'/ $ 5x,'------',4x,'------',4x,'-------',4x,'------',4x, $ '------ ------ ------'/ $ 2f10.2,f11.2,3f10.2, i7/) totsec = tinit+tonel+ttwoel+tdiag+tdens+tprint write(6,*)'elapsed time in seconds ',totsec c c print out information on # integrals evaluated each iteration c nints = icut1+icut2+icut3 frac = dble(icut3)/dble(nints) write(6,2) icut1, icut2, icut3, nints, frac 2 format(/'No. of integrals screened or computed (all iters) ' $ /'-------------------------------------'/ $ /1x,' failed #ij test failed #kl test', $ ' #compute #total', $ ' fraction', $ /1x,' --------------- ---------------', $ ' --------------- ---------------', $ ' --------', $ /1x,4(1x,i15),f9.6) maxint = nbfn !cste maxint = maxint**4 * iter !cste if(nints .ne. maxint) then !cste write(6,*)'Inconsistent number of integrals, should be ', !cste $ maxint !cste write(6,*)'Note: largest 32-bit integer is 2,147,483,647' !cste write(6,*)'Probably due to insufficient integer precision in GA.'!cste endif !cste #ifdef MPI call ga_print_stats() #else call stats #endif endif c call closearrays call ga_terminate #ifdef MPI call mpi_finalize #else call pend #endif c end c subroutine makesz(schwmax) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" dimension work(ichunk,ichunk) integer lo(2),hi(2),i,j,iloc,jloc,ld logical dotask, next_chunk c c schwarz(ij) = (ij|ij) for sparsity test c icut1 = 0 icut2 = 0 icut3 = 0 c call ga_zero(g_schwarz) call ga_zero(g_counter) schwmax = 0.0d0 dotask = next_chunk(lo,hi) ld = ichunk do while (dotask) do i = lo(1), hi(1) iloc = i - lo(1) + 1 do j = lo(2), hi(2) jloc = j - lo(2) + 1 call g(gg,i,j,i,j) work(iloc,jloc) = sqrt(gg) schwmax = max(schwmax, work(iloc,jloc)) end do end do call nga_put(g_schwarz,lo,hi,work,ld) dotask = next_chunk(lo,hi) end do call ga_dgop(11,schwmax,1,'max') c return end c subroutine ininrm implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" integer*8 maxint c c write a little welcome message c maxint = nbfn maxint = maxint**4 if (ga_nodeid().eq.0) then write(6,1) natom, nocc, nbfn, maxint, tol, ichunk 1 format(/' Example Direct Self Consistent Field Program '/ $ ' -------------------------------------------- '// $ ' no. of atoms .............. ',i5/ $ ' no. of occupied orbitals .. ',i5/ $ ' no. of basis functions .... ',i5/ $ ' basis functions^4 ' ,i15/ $ ' convergence threshold ..... ',1pd9.2/ $ ' chunk size .................',i5) write(6,*) !cste call flush(6) !cste endif !cste c c generate normalisation coefficients for the basis functions c and the index array iky c do 10 i = 1, nbfn iky(i) = i*(i-1)/2 10 continue c do 20 i = 1, nbfn rnorm(i) = (expnt(i)*2.0d0/pi)**0.75d0 20 continue c c initialize common for computing f0 c call setfm c end double precision function h(i,j) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" cvd$r novector cvd$r noconcur c c generate the one particle hamiltonian matrix element c over the normalized primitive 1s functions i and j c f0val = 0.0d0 sum = 0.0d0 rab2 = (x(i)-x(j))**2 + (y(i)-y(j))**2 + (z(i)-z(j))**2 facij = expnt(i)*expnt(j)/(expnt(i)+expnt(j)) expij = exprjh(-facij*rab2) repij = (2.0d0*pi/(expnt(i)+expnt(j))) * expij c c first do the nuclear attraction integrals c do 10 iat = 1, natom xp = (x(i)*expnt(i) + x(j)*expnt(j))/(expnt(i)+expnt(j)) yp = (y(i)*expnt(i) + y(j)*expnt(j))/(expnt(i)+expnt(j)) zp = (z(i)*expnt(i) + z(j)*expnt(j))/(expnt(i)+expnt(j)) rpc2 = (xp-ax(iat))**2 + (yp-ay(iat))**2 + (zp-az(iat))**2 c call f0(f0val, (expnt(i)+expnt(j))*rpc2) sum = sum - repij * q(iat) * f0val 10 continue c c add on the kinetic energy term c sum = sum + facij*(3.0d0-2.0d0*facij*rab2) * $ (pi/(expnt(i)+expnt(j)))**1.5d0 * expij c c finally multiply by the normalization constants c h = sum * rnorm(i) * rnorm(j) c end double precision function s(i,j) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" c c generate the overlap matrix element between the normalized c primitve gaussian 1s functions i and j c rab2 = (x(i)-x(j))**2 + (y(i)-y(j))**2 + (z(i)-z(j))**2 facij = expnt(i)*expnt(j)/(expnt(i)+expnt(j)) s = (pi/(expnt(i)+expnt(j)))**1.5d0 * exprjh(-facij*rab2) * $ rnorm(i)*rnorm(j) c end subroutine makden implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" c dimension work(maxnbfn,maxnbfn), torbs(maxnbfn,maxnbfn) dimension work(ichunk,ichunk), orbsi(ichunk,maxnbfn) dimension orbsj(ichunk,maxnbfn) integer lo(2), hi(2), tlo(2), thi(2), i, j, iloc, jloc, ld logical dotask, next_chunk c c generate density matrix from orbitals in g_orbs. the first c nocc orbitals are doubly occupied. c call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while (dotask) tlo(1) = lo(1) thi(1) = hi(1) tlo(2) = 1 thi(2) = nocc call nga_get(g_orbs,tlo,thi,orbsi,ld) tlo(1) = lo(2) thi(1) = hi(2) call nga_get(g_orbs,tlo,thi,orbsj,ld) do i = lo(1), hi(1) iloc = i - lo(1) + 1 do j = lo(2), hi(2) jloc = j - lo(2) + 1 p = 0.0d00 do k = 1, nocc p = p + orbsi(iloc,k)*orbsj(jloc,k) end do work(iloc,jloc) = 2.0d00*p end do end do call nga_put(g_work,lo,hi,work,ld) dotask = next_chunk(lo,hi) end do return end c subroutine oneel(schwmax, eone) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" integer lo(2), hi(2), i, j, iloc, jloc, ld dimension work(ichunk,ichunk),tfock(ichunk,ichunk) logical dotask, next_chunk c c fill in the one-electron part of the fock matrix and c compute the one-electron energy contribution c me = ga_nodeid() nproc = ga_nnodes() c call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while (dotask) call nga_get(g_schwarz,lo,hi,work,ld) do j = lo(2), hi(2) jloc = j - lo(2) + 1 do i = lo(1), hi(1) iloc = i - lo(1) + 1 tfock(iloc,jloc) = 0.0d00 if (work(iloc,jloc)*schwmax.gt.tol2e) + tfock(iloc,jloc) = h(i,j) end do end do call nga_put(g_fock,lo,hi,tfock,ld) dotask = next_chunk(lo,hi) end do eone = 0.5d00*contract_matrices(g_fock,g_dens) c end #if 0 integer function nxtask(nproc) parameter (ichunk = 10) save icount, nleft data nleft, icount /0, 0/ c c wrapper round nxtval() to increase granularity c and thus reduce no. of requests to shared counter c if(nproc.gt.0) then if(nleft.eq.0) then #ifdef MPI icount = nxtval_ga(nproc) * ichunk #else icount = nxtval(nproc) * ichunk #endif nleft = ichunk endif nxtask = icount icount = icount + 1 nleft = nleft -1 else nleft = 0 nxtask = 0 #ifdef MPI junk = nxtval_ga(nproc) #else junk = nxtval(nproc) #endif endif c c following does dumb static load balancing c c$$$ if(nproc.gt.0) then c$$$ if (nleft .eq. 0) then c$$$ icount = ga_nodeid() c$$$ nleft = 1 c$$$ endif c$$$ nxtask = icount c$$$ icount = icount + ga_nnodes() c$$$ else c$$$ nleft = 0 c$$$ nxtask = 0 c$$$ endif end #endif c logical function next_chunk(lo,hi) #include "cscf.h" integer one parameter (one = 1) integer imax, lo(2), hi(2), ilo, jlo itask = nga_read_inc(g_counter,one,one) imax = nbfn/ichunk if (nbfn - ichunk*imax.gt.0) imax = imax + 1 if (itask.lt.imax*imax) then ilo = mod(itask,imax) jlo = (itask-ilo)/imax lo(1) = ilo*ichunk + 1 lo(2) = jlo*ichunk + 1 hi(1) = min((ilo+1)*ichunk,nbfn) hi(2) = min((jlo+1)*ichunk,nbfn) next_chunk = .true. else next_chunk = .false. endif return end c logical function next_4chunk(lo,hi,ilo,jlo,klo,llo) #include "cscf.h" integer one parameter (one = 1) integer*8 imax, itask, itmp !cste integer lo(4), hi(4), ilo, jlo, klo, llo !cste c itask = nga_read_inc(g_counter,one,one) imax = nbfn/ichunk if (nbfn - ichunk*imax.gt.0) imax = imax + 1 if (itask. lt. 0) then !cste write(6,*) 'next_4chunk: itask negative:',itask, !cste * ' imax:',imax,' nbfn:',nbfn,' ichunk:',ichunk!cste write(6,*) 'probable GA integer precision problem if ' !cste * ,'imax^4 > 2^31' !cste call flush(6) !cste stop 'next_4chunk' !cste end if !cste if (itask.lt.imax**4) then ilo = mod(itask,imax) itmp = (itask - ilo)/imax jlo = mod(itmp,imax) itmp = (itmp - jlo)/imax klo = mod(itmp,imax) llo = (itmp - klo)/imax lo(1) = ilo*ichunk + 1 lo(2) = jlo*ichunk + 1 lo(3) = klo*ichunk + 1 lo(4) = llo*ichunk + 1 hi(1) = min((ilo+1)*ichunk,nbfn) hi(2) = min((jlo+1)*ichunk,nbfn) hi(3) = min((klo+1)*ichunk,nbfn) hi(4) = min((llo+1)*ichunk,nbfn) next_4chunk = .true. else next_4chunk = .false. endif return end c subroutine clean_chunk(chunk) #include "cscf.h" double precision chunk(ichunk,ichunk) integer i,j do j = 1, ichunk do i = 1, ichunk chunk(i,j) = 0.0d00 end do end do return end c subroutine twoel(schwmax, etwo) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" double precision f_ij(ichunk,ichunk),d_kl(ichunk,ichunk) double precision f_ik(ichunk,ichunk),d_jl(ichunk,ichunk) double precision s_ij(ichunk,ichunk),s_kl(ichunk,ichunk) double precision schwmax, one cste integer nproc !cste integer*8 ijkls, ijcnt,klcnt,ijklcnt !cste integer lo(4),hi(4),lo_ik(2),hi_ik(2),lo_jl(2),hi_jl(2) !cste integer i,j,k,l,iloc,jloc,kloc,lloc,ld,ich,it,jt,kt,lt !cste logical dotask, next_4chunk c c add in the two-electron contribution to the fock matrix c cste nproc = ga_nnodes() one = 1.0d00 ijcnt = icut1 !cste klcnt = icut2 !cste ijklcnt = icut3 !cste c call ga_zero(g_counter) ld = maxnbfn ich = ichunk dotask = next_4chunk(lo,hi,it,jt,kt,lt) itask = 0 cste ijkls = 0 !cste do while (dotask) cste ijkl=(hi(1)-lo(1)+1)*(hi(2)-lo(2)+1)* !cste cste * (hi(3)-lo(3)+1)*(hi(4)-lo(4)+1) !cste cste ijkls = ijkls + ijkl !cste cste write(6,*)itask,lo,hi,ijkl,ijkls !cste lo_ik(1) = lo(1) lo_ik(2) = lo(3) hi_ik(1) = hi(1) hi_ik(2) = hi(3) lo_jl(1) = lo(2) lo_jl(2) = lo(4) hi_jl(1) = hi(2) hi_jl(2) = hi(4) call nga_get(g_schwarz,lo,hi,s_ij,ich) call nga_get(g_schwarz,lo(3),hi(3),s_kl,ich) call nga_get(g_dens,lo(3),hi(3),d_kl,ich) call nga_get(g_dens,lo_jl,hi_jl,d_jl,ich) itask = itask + 1 call clean_chunk(f_ij) call clean_chunk(f_ik) do i = lo(1), hi(1) iloc = i-lo(1) + 1 do j = lo(2), hi(2) jloc = j-lo(2) + 1 if (s_ij(iloc,jloc)*schwmax .lt. tol2e) then icut1 = icut1 + (hi(3)-lo(3)+1)*(hi(4)-lo(4)+1) !cste else do k = lo(3), hi(3) kloc = k-lo(3) + 1 do l = lo(4), hi(4) lloc = l-lo(4) + 1 if (s_ij(iloc,jloc)*s_kl(kloc,lloc).lt.tol2e) then icut2 = icut2 + 1 else call g(gg, i, j, k, l) f_ij(iloc,jloc) = f_ij(iloc,jloc) + + gg*d_kl(kloc,lloc) f_ik(iloc,kloc) = f_ik(iloc,kloc) + - 0.5d00*gg*d_jl(jloc,lloc) icut3 = icut3 + 1 endif end do end do endif end do end do call nga_acc(g_fock,lo,hi,f_ij,ich,one) call nga_acc(g_fock,lo_ik,hi_ik,f_ik,ich,one) dotask = next_4chunk(lo,hi,it,jt,kt,lt) end do etwo = 0.5d00*contract_matrices(g_fock,g_dens) ijcnt = icut1 - ijcnt klcnt = icut2 - klcnt ijklcnt = icut3 - ijklcnt cste write(6,*) 'node ', ga_nodeid(), ijcnt, klcnt, ijklcnt !cste cste * ,icut1,icut2,icut3 !cste cste call flush(6) !cste icut4 = icut3 !cste if (icut3 .gt. 0) return !cste c c no integrals may be calculated if there is no work for c this node (ichunk too big), or, something is wrong c write(6,*) 'no two-electron integrals computed by node', !cste * ga_nodeid() !cste call flush(6) !cste return cste stop 'twoel computed no integrals' !cste end c subroutine damp(fac) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" c c create damped density matrix as a linear combination of c old density matrix and density matrix formed from new orbitals c ofac = 1.0d0 - fac call ga_add(fac,g_dens,ofac,g_work,g_dens) return end c subroutine prnout(iter, energy, deltad, tester) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" c c printout results of each iteration c if (ga_nodeid().ne.0) return write(6,1) iter, energy, deltad, tester call flush(6) 1 format(' iter=',i3,', energy=',f15.8,', deltad=',1pd9.2, $ ', deltaf=',d9.2) return end c double precision function dendif() implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" double precision xdiff dimension dens_c(ichunk,ichunk),work_c(ichunk,ichunk) integer lo(2), hi(2), i, j, ld logical dotask, next_chunk c c compute largest change in density matrix elements c denmax = 0.0d0 call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while(dotask) call nga_get(g_dens,lo,hi,dens_c,ld) call nga_get(g_work,lo,hi,work_c,ld) do j = 1, hi(2)-lo(2)+1 do i = 1, hi(1)-lo(1)+1 xdiff = abs(dens_c(i,j)-work_c(i,j)) if (xdiff.gt.denmax) denmax = xdiff end do end do dotask = next_chunk(lo,hi) end do call ga_dgop(1,denmax,1,'max') dendif = denmax return end c double precision function testfock() implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" double precision xmax, xtmp dimension work(ichunk,ichunk) integer lo(2), hi(2), i, j, iloc, jloc, ld logical dotask, next_chunk c c compute largest change in density matrix elements c xmax = 0.0d0 call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while(dotask) call nga_get(g_fock,lo,hi,work,ld) do j = lo(2), hi(2) jloc = j - lo(2) + 1 do i = lo(1), hi(1) iloc = i - lo(1) + 1 if (i.ne.j) then xtmp = abs(work(iloc,jloc)) if (xtmp.gt.xmax) xmax = xtmp endif end do end do dotask = next_chunk(lo,hi) end do call ga_dgop(1,xmax,1,'max') testfock = xmax return end c subroutine shiftfock(shift) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" double precision shift dimension work(ichunk,ichunk) integer lo(2), hi(2), i, j, iloc, jloc, ld, icnt logical dotask, next_chunk c c compute largest change in density matrix elements c call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while(dotask) call nga_get(g_fock,lo,hi,work,ld) icnt = 0 do j = lo(2), hi(2) jloc = j - lo(2) + 1 do i = lo(1), hi(1) iloc = i - lo(1) + 1 if (i.eq.j.and.i.gt.nocc) then work(iloc,jloc) = work(iloc,jloc) + shift icnt = icnt + 1 endif end do end do if (icnt.gt.0) call nga_put(g_fock,lo,hi,work,ld) dotask = next_chunk(lo,hi) end do return end c subroutine prnfin(energy) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" dimension orbs(maxnbfn, maxnbfn) integer lo(2),hi(2),ld c c printout final results c if (ga_nodeid().ne.0) return write(6,1) energy 1 format(//' final energy = ',f18.11//' eigenvalues') call output(eigv, 1, min(nbfn,nocc+5), 1, 1, nbfn, 1, 1) c return end subroutine g(value,i,j,k,l) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" c c compute the two electon integral (ij|kl) over normalized c primitive 1s gaussians c f0val = 0.0d0 rab2 = (x(i)-x(j))**2 + (y(i)-y(j))**2 + (z(i)-z(j))**2 rcd2 = (x(k)-x(l))**2 + (y(k)-y(l))**2 + (z(k)-z(l))**2 facij = expnt(i)*expnt(j)/(expnt(i)+expnt(j)) fackl = expnt(k)*expnt(l)/(expnt(k)+expnt(l)) exijkl = exprjh(- facij*rab2 - fackl*rcd2) denom = (expnt(i)+expnt(j))*(expnt(k)+expnt(l)) * $ sqrt(expnt(i)+expnt(j)+expnt(k)+expnt(l)) fac = (expnt(i)+expnt(j))*(expnt(k)+expnt(l)) / $ (expnt(i)+expnt(j)+expnt(k)+expnt(l)) c xp = (x(i)*expnt(i) + x(j)*expnt(j))/(expnt(i)+expnt(j)) yp = (y(i)*expnt(i) + y(j)*expnt(j))/(expnt(i)+expnt(j)) zp = (z(i)*expnt(i) + z(j)*expnt(j))/(expnt(i)+expnt(j)) xq = (x(k)*expnt(k) + x(l)*expnt(l))/(expnt(k)+expnt(l)) yq = (y(k)*expnt(k) + y(l)*expnt(l))/(expnt(k)+expnt(l)) zq = (z(k)*expnt(k) + z(l)*expnt(l))/(expnt(k)+expnt(l)) rpq2 = (xp-xq)**2 + (yp-yq)**2 + (zp-zq)**2 c call f0(f0val, fac*rpq2) value = (2.0d0 * pi**2.5d0 / denom) * exijkl * f0val * $ rnorm(i)*rnorm(j)*rnorm(k)*rnorm(l) return end c subroutine diagon(tester, iter) c subroutine diagon(fock, orbs, evals, work, tester, iter) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" double precision r_zero, r_one, shift, tester c #if USE_TRANSFORM c c use similarity transform to solve standard eigenvalue problem c (overlap matrix has been transformed out of the problem) c r_one = 1.0d00 r_zero = 0.0d00 call ga_dgemm('n','n',nbfn,nbfn,nbfn,r_one,g_fock,g_orbs, + r_zero,g_tfock) call ga_dgemm('t','n',nbfn,nbfn,nbfn,r_one,g_orbs,g_tfock, + r_zero,g_fock) tester = testfock() shift = 0.0d00 if (tester.gt.0.3d0) then shift = 0.3d0 else if (nbfn .gt. 60) then shift = 0.1d0 else shift = 0.0d0 endif endif if (iter.ge.2.and.shift.ne.0.0d00) then call shiftfock(shift) endif call ga_copy(g_orbs,g_tfock) call ga_diag_std_seq(g_fock, g_work, eigv) c c Back transform eigenvectors c call ga_dgemm('n','n',nbfn,nbfn,nbfn,r_one,g_tfock,g_work, + r_zero,g_orbs) if (iter.ge.2.and.shift.ne.0.0d00) then do 50 i = nocc+1, nbfn eigv(i) = eigv(i) - shift 50 continue endif #else c c Keep remaking overlap matrix since ga_diag_seq does not c guarantee that g_ident is preserved. c call makoverlap call ga_diag_seq(g_fock, g_ident, g_orbs, eigv) tester = 0.0d00 #endif return end c subroutine makeob implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" double precision work(ichunk,ichunk),orbs(ichunk,ichunk) double precision eval(maxnbfn) integer lo(2),hi(2),ld,me,i,j,iloc,jloc logical dotask, next_chunk c c generate set of orthonormal vectors by creating a random c symmetric matrix and solving associated generalized eigenvalue c problem using the correct overlap matrix. c me = ga_nodeid() call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while (dotask) do j = lo(2), hi(2) jloc = j - lo(2) + 1 do i = lo(1), hi(1) iloc = i - lo(1) + 1 work(iloc,jloc) = s(i,j) orbs(iloc,jloc) = drand(0) end do end do call nga_put(g_ident,lo,hi,work,ld) call nga_put(g_fock,lo,hi,orbs,ld) dotask = next_chunk(lo,hi) end do call ga_symmetrize(g_fock) call ga_diag_seq(g_fock, g_ident, g_orbs, eval) c return end c subroutine denges implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" c c Form guess density from superposition of atomic densities in the AO c basis set ... instead of doing the atomic SCF hardwire for this c small basis set for the Be atom. c integer one, itask, lo(2), hi(2), ld dimension atdens(15,15) data atdens/ $ 0.000002,0.000027,0.000129,0.000428,0.000950,0.001180, $ 0.000457,-0.000270,-0.000271,0.000004,0.000004,0.000004, $ 0.000004,0.000004,0.000004,0.000027,0.000102,0.000987, $ 0.003269,0.007254,0.009007,0.003492,-0.002099,-0.002108, $ 0.000035,0.000035,0.000035,0.000035,0.000035,0.000035, $ 0.000129,0.000987,0.002381,0.015766,0.034988,0.043433, $ 0.016835,-0.010038,-0.010082,0.000166,0.000166,0.000166, $ 0.000166,0.000166,0.000166,0.000428,0.003269,0.015766, $ 0.026100,0.115858,0.144064,0.055967,-0.035878,-0.035990, $ 0.000584,0.000584,0.000584,0.000584,0.000584,0.000584, $ 0.000950,0.007254,0.034988,0.115858,0.128586,0.320120, $ 0.124539,-0.083334,-0.083536,0.001346,0.001346,0.001346, $ 0.001346,0.001346,0.001346,0.001180,0.009007,0.043433, $ 0.144064,0.320120,0.201952,0.159935,-0.162762,-0.162267, $ 0.002471,0.002471,0.002471,0.002471,0.002471,0.002471, $ 0.000457,0.003492,0.016835,0.055967,0.124539,0.159935, $ 0.032378,-0.093780,-0.093202,0.001372,0.001372,0.001372, $ 0.001372,0.001372,0.001372,-0.000270,-0.002099,-0.010038, $ -0.035878,-0.083334,-0.162762,-0.093780,0.334488,0.660918, $ -0.009090,-0.009090,-0.009090,-0.009090,-0.009090,-0.009090, $ -0.000271,-0.002108,-0.010082,-0.035990,-0.083536,-0.162267, $ -0.093202,0.660918,0.326482,-0.008982,-0.008982,-0.008981, $ -0.008981,-0.008981,-0.008982,0.000004,0.000035,0.000166, $ 0.000584,0.001346,0.002471,0.001372,-0.009090,-0.008982, $ 0.000062,0.000124,0.000124,0.000124,0.000124,0.000124, $ 0.000004,0.000035,0.000166,0.000584,0.001346,0.002471, $ 0.001372,-0.009090,-0.008982,0.000124,0.000062,0.000124, $ 0.000124,0.000124,0.000124,0.000004,0.000035,0.000166, $ 0.000584,0.001346,0.002471,0.001372,-0.009090,-0.008981, $ 0.000124,0.000124,0.000062,0.000124,0.000124,0.000124, $ 0.000004,0.000035,0.000166,0.000584,0.001346,0.002471, $ 0.001372,-0.009090,-0.008981,0.000124,0.000124,0.000124, $ 0.000062,0.000124,0.000124,0.000004,0.000035,0.000166, $ 0.000584,0.001346,0.002471,0.001372,-0.009090,-0.008981, $ 0.000124,0.000124,0.000124,0.000124,0.000062,0.000124, $ 0.000004,0.000035,0.000166,0.000584,0.001346,0.002471, $ 0.001372,-0.009090,-0.008982,0.000124,0.000124,0.000124, $ 0.000124,0.000124,0.000062/ c c Create initial guess for density matrix in global array c call ga_zero(g_dens) call ga_zero(g_counter) one = 1 ld = 15 c c Correct for a factor of two along the diagonal c do i = 1, ld atdens(i,i) = 2.0d00*atdens(i,i) end do itask = nga_read_inc(g_counter,one,one) do while(itask.lt.natom) ioff = itask*15 lo(1) = ioff+1 lo(2) = ioff+1 hi(1) = ioff+15 hi(2) = ioff+15 call nga_put(g_dens,lo,hi,atdens,ld) itask = nga_read_inc(g_counter,one,one) end do call ga_sync return end c subroutine setarrays implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" integer one, two, dims(2) logical status one = 1 two = 2 g_counter = ga_create_handle() call ga_set_data(g_counter,one,one,MT_INT) status = ga_allocate(g_counter) call ga_zero(g_counter) dims(1) = nbfn dims(2) = nbfn g_dens = ga_create_handle() call ga_set_data(g_dens, two, dims, MT_DBL) status = ga_allocate(g_dens) call ga_zero(g_dens) g_schwarz = ga_create_handle() call ga_set_data(g_schwarz, two, dims, MT_DBL) status = ga_allocate(g_schwarz) call ga_zero(g_schwarz) g_fock = ga_create_handle() call ga_set_data(g_fock, two, dims, MT_DBL) status = ga_allocate(g_fock) call ga_zero(g_fock) g_tfock = ga_create_handle() call ga_set_data(g_tfock, two, dims, MT_DBL) status = ga_allocate(g_tfock) call ga_zero(g_tfock) g_work = ga_create_handle() call ga_set_data(g_work, two, dims, MT_DBL) status = ga_allocate(g_work) call ga_zero(g_work) g_ident = ga_create_handle() call ga_set_data(g_ident, two, dims, MT_DBL) status = ga_allocate(g_ident) call ga_zero(g_ident) g_orbs = ga_create_handle() call ga_set_data(g_orbs, two, dims, MT_DBL) status = ga_allocate(g_orbs) call ga_zero(g_orbs) return end subroutine closearrays implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" logical status c status = ga_destroy(g_counter) status = ga_destroy(g_dens) status = ga_destroy(g_schwarz) status = ga_destroy(g_fock) status = ga_destroy(g_tfock) status = ga_destroy(g_work) status = ga_destroy(g_ident) status = ga_destroy(g_orbs) c return end c subroutine makoverlap implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" integer me, lo(2), hi(2), ptr, ld(2) integer ld1, ld2 me = ga_nodeid() call nga_distribution(g_ident, me, lo, hi) call nga_access(g_ident, lo, hi, ptr, ld) ld1 = hi(1) - lo(1) + 1 ld2 = hi(2) - lo(2) + 1 call setoverlap(dbl_mb(ptr),lo,hi,ld1,ld2) call nga_release(g_ident) return end c subroutine setoverlap(a,lo,hi,ld1,ld2) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" integer lo(2), hi(2) integer ld1, ld2, ii, jj double precision a(ld1,ld2) do i = 1, ld1 ii = i + lo(1) - 1 do j = 1, ld2 jj = j + lo(2) - 1 #if USE_TRANSFORM if (ii.eq.jj) then a(i,j) = 1.0d00 else a(i,j) = 0.0d00 endif #else a(i,j) = s(ii,jj) #endif end do end do return end c subroutine print_ga_block(g_a) implicit double precision(a-h,o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" integer lo(2), hi(2), ptr, ld1, ld2 c me = ga_nodeid() call nga_distribution(g_a, me, lo, hi) ld1 = hi(1) - lo(1) + 1 ld2 = hi(2) - lo(2) + 1 call nga_access(g_a, lo, hi, ptr, ld) call dump_chunk(dbl_mb(ptr),ld1,ld2) call nga_release(g_a) c return end c subroutine print_ga_block_ij(g_a,tlo) implicit double precision(a-h,o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" integer lo(2), hi(2), ptr, ld1, ld2 c me = ga_nodeid() call nga_distribution(g_a, me, lo, hi) ld1 = hi(1) - lo(1) + 1 ld2 = hi(2) - lo(2) + 1 call nga_access(g_a, tlo, hi, ptr, ld) call dump_chunk(dbl_mb(ptr),ld1,ld2) call nga_release(g_a) c return end c subroutine dump_chunk(a,ld1,ld2) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" integer ld1, ld2 double precision a(ld1, ld2) do i = 1, min(10,ld1) write(6,100) (a(i,j), j = 1, min(10,ld2)) end do write(6,*) trace = 0.0d0 do i=1,ld2 trace = trace +a(i,i) end do write(6,*) 'trace=',trace 100 format(10f10.4) return end c double precision function contract_matrices(g_a,g_b) implicit double precision(a-h,o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" integer lo(2), hi(2), ptr_a, ptr_b, ld, ld1, ld2 double precision a(ichunk,ichunk),b(ichunk,ichunk) double precision value logical dotask, next_chunk c c evalute sum_ij a_ij*b_ij c value = 0.0d00 call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while (dotask) call nga_get(g_a,lo,hi,a,ld) call nga_get(g_b,lo,hi,b,ld) do j = 1, hi(2)-lo(2)+1 do i = 1, hi(1)-lo(1)+1 value = value + a(i,j)*b(i,j) end do end do dotask = next_chunk(lo,hi) end do call ga_dgop(3,value,1,'+') contract_matrices=value c return end ga-5-3/global/examples/scf/ft-scf.F0000640005473000001440000010115311471657746015741 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif program scf C$Id: ft-scf.F,v 1.1 2005-07-07 17:41:07 vinod Exp $ implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" #define USE_TRANSFORM 1 integer heap, stack data tinit, tonel, ttwoel, tdiag, tdens, tprint /6*0.0d0/ data eone, etwo, energy, deltad /4*0.0d0/ c c initalize the parallel message passing environment c #ifdef MPI integer ierr call mpi_init(ierr) #else call pbeginf #endif call ga_set_spare_procs(2); call ga_initialize() c c Allocate memory c heap = 2000000 stack = 2000000 if (.not.ma_init(MT_DBL, stack, heap)) + call ga_error("ma_init failed",-1) me = ga_nodeid() nproc = ga_nnodes() c c initialize a bunch of stuff and initial density matrix c rjunk = timer() c c get input from file be.inpt c call input c c create and allocate global arrays c call setarrays write(6,*) 'done with setarrays' call ininrm write(6,*) '1-done with setarrays' c c create initial guess for density matrix by using single atom c densities c call denges tinit = timer() #if USE_TRANSFORM c c make initial orthogonal orbital set for solution method using c similarity transform c call makeob #endif c c make info for sparsity test c call makesz(schwmax) c c iterate call iterate(10) c call ga_igop(6, icut1, 1, '+') call ga_igop(7, icut2, 1, '+') call ga_igop(8, icut3, 1, '+') if (me.eq.0) then c c print out timing information c call prnfin(energy) write(6,1) tinit, tonel, ttwoel, tdiag, tdens, tprint, $ nproc 1 format(/' init onel twoel diag dens print ncpu'/ $ ' ------ ------ ------ ------ ------ ------ ------'/ $ 1x, 6f7.2, i7/) c c print out information on # integrals evaulated each iteration c nints = nnbfn*(nnbfn+1)/2 nints = nbfn**4 frac = dble(icut3)/dble(nints) write(6,2) icut1, icut2, icut3, nints, frac 2 format(/' No. of integrals screened or computed ' $ /' -------------------------------------'/ $ /1x,' #ij test #kl test #compute #total', $ ' fraction', $ /1x,' --------- --------- --------- ---------', $ ' --------', $ /1x,4(2x,i9),f9.3) call stats endif c call closearrays call ga_terminate #ifdef MPI call mpi_finalize #else call pend #endif c end c subroutine iterate(niter) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" do 10 iter = 1, niter #ifdef CHECKPOINT_SCF call ga_checkpoint_arrays(arraylist,numarrays) #endif c c make the one particle contribution to the fock matrix c and get the partial contribution to the energy c call oneel(schwmax, eone) tonel = tonel + timer() c c compute the two particle contributions to the fock matrix and c get the total energy. c call twoel(schwmax, etwo) ttwoel = ttwoel + timer() c c Diagonalize the fock matrix. The diagonalizers used in this c subroutine are actually sequential, not parallel. c call diagon(tester,iter) tdiag = tdiag + timer() c c make the new density matrix in g_work from orbitals in g_orbs, c compute the norm of the change in the density matrix and c then update the density matrix in g_dens with damping. c call makden deltad = dendif() if (iter.eq.1) then scale = 0.0d0 else if (iter .le. 5) then if (nbfn .gt. 60) then scale = 0.5d0 else scale = 0.0d0 endif else scale = 0.0d0 endif call damp(scale) tdens = tdens + timer() c c add up energy and print out convergence information c if (me.eq.0) then energy = enrep + eone + etwo call prnout(iter, energy, deltad, tester) tprint = tprint + timer() endif c c if converged then exit iteration loop c if (deltad .lt. tol) goto 20 10 continue if(me.eq.0) $ write(6,*) ' SCF failed to converge in ', niter, ' iters' c c finished ... print out eigenvalues and occupied orbitals c 20 continue end subroutine makesz(schwmax) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" dimension work(ichunk,ichunk) integer lo(2),hi(2),i,j,iloc,jloc,ld logical dotask c c schwarz(ij) = (ij|ij) for sparsity test c icut1 = 0 icut2 = 0 icut3 = 0 c call ga_zero(g_schwarz) call ga_zero(g_counter) schwmax = 0.0d0 dotask = next_chunk(lo,hi) ld = ichunk do while (dotask) do i = lo(1), hi(1) iloc = i - lo(1) + 1 do j = lo(2), hi(2) jloc = j - lo(2) + 1 call g(gg,i,j,i,j) work(iloc,jloc) = sqrt(gg) schwmax = max(schwmax, work(iloc,jloc)) end do end do call nga_put(g_schwarz,lo,hi,work,ld) dotask = next_chunk(lo,hi) end do call ga_dgop(11,schwmax,1,'max') c return end c subroutine ininrm implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" c c write a little welcome message c if (ga_nodeid().eq.0) write(6,1) natom, nocc, nbfn, tol 1 format(/' Example Direct Self Consistent Field Program '/ $ ' -------------------------------------------- '// $ ' no. of atoms ............... ',i3/ $ ' no. of occupied orbitals ... ',i3/ $ ' no. of basis functions ..... ',i3/ $ ' convergence threshold ...... ',d9.2//) c c generate normalisation coefficients for the basis functions c and the index array iky c do 10 i = 1, nbfn iky(i) = i*(i-1)/2 10 continue c do 20 i = 1, nbfn rnorm(i) = (expnt(i)*2.0d0/pi)**0.75d0 20 continue c c initialize common for computing f0 c call setfm c end double precision function h(i,j) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" cvd$r novector cvd$r noconcur c c generate the one particle hamiltonian matrix element c over the normalized primitive 1s functions i and j c f0val = 0.0d0 sum = 0.0d0 rab2 = (x(i)-x(j))**2 + (y(i)-y(j))**2 + (z(i)-z(j))**2 facij = expnt(i)*expnt(j)/(expnt(i)+expnt(j)) expij = exprjh(-facij*rab2) repij = (2.0d0*pi/(expnt(i)+expnt(j))) * expij c c first do the nuclear attraction integrals c do 10 iat = 1, natom xp = (x(i)*expnt(i) + x(j)*expnt(j))/(expnt(i)+expnt(j)) yp = (y(i)*expnt(i) + y(j)*expnt(j))/(expnt(i)+expnt(j)) zp = (z(i)*expnt(i) + z(j)*expnt(j))/(expnt(i)+expnt(j)) rpc2 = (xp-ax(iat))**2 + (yp-ay(iat))**2 + (zp-az(iat))**2 c call f0(f0val, (expnt(i)+expnt(j))*rpc2) sum = sum - repij * q(iat) * f0val 10 continue c c add on the kinetic energy term c sum = sum + facij*(3.0d0-2.0d0*facij*rab2) * $ (pi/(expnt(i)+expnt(j)))**1.5d0 * expij c c finally multiply by the normalization constants c h = sum * rnorm(i) * rnorm(j) c end double precision function s(i,j) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" c c generate the overlap matrix element between the normalized c primitve gaussian 1s functions i and j c rab2 = (x(i)-x(j))**2 + (y(i)-y(j))**2 + (z(i)-z(j))**2 facij = expnt(i)*expnt(j)/(expnt(i)+expnt(j)) s = (pi/(expnt(i)+expnt(j)))**1.5d0 * exprjh(-facij*rab2) * $ rnorm(i)*rnorm(j) c end subroutine makden implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" c dimension work(maxnbfn,maxnbfn), torbs(maxnbfn,maxnbfn) dimension work(ichunk,ichunk), orbsi(ichunk,maxnbfn) dimension orbsj(ichunk,maxnbfn) integer lo(2), hi(2), tlo(2), thi(2), i, j, iloc, jloc, ld logical dotask c c generate density matrix from orbitals in g_orbs. the first c nocc orbitals are doubly occupied. c call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while (dotask) tlo(1) = lo(1) thi(1) = hi(1) tlo(2) = 1 thi(2) = nocc call nga_get(g_orbs,tlo,thi,orbsi,ld) tlo(1) = lo(2) thi(1) = hi(2) call nga_get(g_orbs,tlo,thi,orbsj,ld) do i = lo(1), hi(1) iloc = i - lo(1) + 1 do j = lo(2), hi(2) jloc = j - lo(2) + 1 p = 0.0d00 do k = 1, nocc p = p + orbsi(iloc,k)*orbsj(jloc,k) end do work(iloc,jloc) = 2.0d00*p end do end do call nga_put(g_work,lo,hi,work,ld) dotask = next_chunk(lo,hi) end do return end c subroutine oneel(schwmax, eone) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" integer lo(2), hi(2), i, j, iloc, jloc, ld dimension dens(nnbfn), fock(nnbfn), schwarz(nnbfn) dimension work(ichunk,ichunk),tfock(ichunk,ichunk) logical dotask c c fill in the one-electron part of the fock matrix and c compute the one-electron energy contribution c me = ga_nodeid() nproc = ga_nnodes() c call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while (dotask) call nga_get(g_schwarz,lo,hi,work,ld) do j = lo(2), hi(2) jloc = j - lo(2) + 1 do i = lo(1), hi(1) iloc = i - lo(1) + 1 tfock(iloc,jloc) = 0.0d00 if (work(iloc,jloc)*schwmax.gt.tol2e) + tfock(iloc,jloc) = h(i,j) end do end do call nga_put(g_fock,lo,hi,tfock,ld) dotask = next_chunk(lo,hi) end do eone = 0.5d00*contract_matrices(g_fock,g_dens) c end integer function nxtask(nproc) parameter (ichunk = 10) save icount, nleft data nleft, icount /0, 0/ c c wrapper round nxtval() to increase granularity c and thus reduce no. of requests to shared counter c if(nproc.gt.0) then if(nleft.eq.0) then icount = nxtval(nproc) * ichunk nleft = ichunk endif nxtask = icount icount = icount + 1 nleft = nleft -1 else nleft = 0 nxtask = 0 junk = nxtval(nproc) endif c c following does dumb static load balancing c c$$$ if(nproc.gt.0) then c$$$ if (nleft .eq. 0) then c$$$ icount = ga_nodeid() c$$$ nleft = 1 c$$$ endif c$$$ nxtask = icount c$$$ icount = icount + ga_nnodes() c$$$ else c$$$ nleft = 0 c$$$ nxtask = 0 c$$$ endif end c logical function next_chunk(lo,hi) #include "cscf.h" integer one parameter (one = 1) integer imax, lo(2), hi(2), ilo, jlo itask = nga_read_inc(g_counter,one,one) imax = nbfn/ichunk if (itask.lt.imax*imax) then if (nbfn - ichunk*imax.gt.0) imax = imax + 1 ilo = mod(itask,imax) jlo = (itask-ilo)/imax lo(1) = ilo*ichunk + 1 lo(2) = jlo*ichunk + 1 hi(1) = min((ilo+1)*ichunk,nbfn) hi(2) = min((jlo+1)*ichunk,nbfn) next_chunk = .true. else next_chunk = .false. endif return end c logical function next_4chunk(lo,hi,ilo,jlo,klo,llo) #include "cscf.h" integer one parameter (one = 1) integer imax, lo(4), hi(4), ilo, jlo, klo, llo, itmp itask = nga_read_inc(g_counter,one,one) imax = nbfn/ichunk if (nbfn - ichunk*imax.gt.0) imax = imax + 1 if (itask.lt.imax**4) then ilo = mod(itask,imax) itmp = (itask - ilo)/imax jlo = mod(itmp,imax) itmp = (itmp - jlo)/imax klo = mod(itmp,imax) llo = (itmp - klo)/imax lo(1) = ilo*ichunk + 1 lo(2) = jlo*ichunk + 1 lo(3) = klo*ichunk + 1 lo(4) = llo*ichunk + 1 hi(1) = min((ilo+1)*ichunk,nbfn) hi(2) = min((jlo+1)*ichunk,nbfn) hi(3) = min((klo+1)*ichunk,nbfn) hi(4) = min((llo+1)*ichunk,nbfn) next_4chunk = .true. else next_4chunk = .false. endif return end c subroutine clean_chunk(chunk) #include "cscf.h" double precision chunk(ichunk,ichunk) integer i,j do j = 1, ichunk do i = 1, ichunk chunk(i,j) = 0.0d00 end do end do return end c subroutine twoel(schwmax, etwo) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" double precision f_ij(ichunk,ichunk),d_kl(ichunk,ichunk) double precision f_ik(ichunk,ichunk),d_jl(ichunk,ichunk) double precision s_ij(ichunk,ichunk),s_kl(ichunk,ichunk) double precision schwmax, one integer nproc,lo(4),hi(4),ld,ich integer lo_ik(2),hi_ik(2),lo_jl(2),hi_jl(2) integer i,j,k,l,iloc,jloc,kloc,lloc,it,jt,kt,lt logical dotask, next_4chunk c c add in the two-electron contribution to the fock matrix c nproc = ga_nnodes() one = 1.0d00 c call ga_zero(g_counter) ld = maxnbfn ich = ichunk dotask = next_4chunk(lo,hi,it,jt,kt,lt) itask = 0 do while (dotask) lo_ik(1) = lo(1) lo_ik(2) = lo(3) hi_ik(1) = hi(1) hi_ik(2) = hi(3) lo_jl(1) = lo(2) lo_jl(2) = lo(4) hi_jl(1) = hi(2) hi_jl(2) = hi(4) call nga_get(g_schwarz,lo,hi,s_ij,ich) call nga_get(g_schwarz,lo(3),hi(3),s_kl,ich) call nga_get(g_dens,lo(3),hi(3),d_kl,ich) call nga_get(g_dens,lo_jl,hi_jl,d_jl,ich) itask = itask + 1 call clean_chunk(f_ij) call clean_chunk(f_ik) do i = lo(1), hi(1) iloc = i-lo(1) + 1 do j = lo(2), hi(2) jloc = j-lo(2) + 1 if (s_ij(iloc,jloc)*schwmax .lt. tol2e) then icut1 = icut1 + (hi(1)-lo(1)+1)*(hi(2)-lo(2)+1) else do k = lo(3), hi(3) kloc = k-lo(3) + 1 do l = lo(4), hi(4) lloc = l-lo(4) + 1 if (s_ij(iloc,jloc)*s_kl(kloc,lloc).lt.tol2e) then icut2 = icut2 + 1 else call g(gg, i, j, k, l) f_ij(iloc,jloc) = f_ij(iloc,jloc) + + gg*d_kl(kloc,lloc) f_ik(iloc,kloc) = f_ik(iloc,kloc) + - 0.5d00*gg*d_jl(jloc,lloc) icut3 = icut3 + 1 endif end do end do endif end do end do call nga_acc(g_fock,lo,hi,f_ij,ich,one) call nga_acc(g_fock,lo_ik,hi_ik,f_ik,ich,one) dotask = next_4chunk(lo,hi,it,jt,kt,lt) end do etwo = 0.5d00*contract_matrices(g_fock,g_dens) return end c subroutine damp(fac) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" c c create damped density matrix as a linear combination of c old density matrix and density matrix formed from new orbitals c ofac = 1.0d0 - fac call ga_add(fac,g_dens,ofac,g_work,g_dens) return end c subroutine prnout(iter, energy, deltad, tester) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" c c printout results of each iteration c if (ga_nodeid().ne.0) return write(6,1) iter, energy, deltad, tester call flush(6) 1 format(' iter=',i3,', energy=',f13.8,', deltad=',d9.2, $ ', deltaf=',d9.2) return end c double precision function dendif() implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" double precision xdiff dimension dens_c(ichunk,ichunk),work_c(ichunk,ichunk) integer lo(2), hi(2), i, j, ld logical dotask c c compute largest change in density matrix elements c denmax = 0.0d0 call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while(dotask) call nga_get(g_dens,lo,hi,dens_c,ld) call nga_get(g_work,lo,hi,work_c,ld) do j = 1, hi(2)-lo(2)+1 do i = 1, hi(1)-lo(1)+1 xdiff = abs(dens_c(i,j)-work_c(i,j)) if (xdiff.gt.denmax) denmax = xdiff end do end do dotask = next_chunk(lo,hi) end do call ga_dgop(1,denmax,1,'max') dendif = denmax return end c double precision function testfock() implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" double precision xmax, xtmp dimension work(ichunk,ichunk) integer lo(2), hi(2), i, j, iloc, jloc, ld logical dotask c c compute largest change in density matrix elements c xmax = 0.0d0 call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while(dotask) call nga_get(g_fock,lo,hi,work,ld) do j = lo(2), hi(2) jloc = j - lo(2) + 1 do i = lo(1), hi(1) iloc = i - lo(1) + 1 if (i.ne.j) then xtmp = abs(work(iloc,jloc)) if (xtmp.gt.xmax) xmax = xtmp endif end do end do dotask = next_chunk(lo,hi) end do call ga_dgop(1,xmax,1,'max') testfock = xmax return end c subroutine shiftfock(shift) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" double precision shift dimension work(ichunk,ichunk) integer lo(2), hi(2), i, j, iloc, jloc, ld, icnt logical dotask c c compute largest change in density matrix elements c call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while(dotask) call nga_get(g_fock,lo,hi,work,ld) icnt = 0 do j = lo(2), hi(2) jloc = j - lo(2) + 1 do i = lo(1), hi(1) iloc = i - lo(1) + 1 if (i.eq.j.and.i.gt.nocc) then work(iloc,jloc) = work(iloc,jloc) + shift icnt = icnt + 1 endif end do end do if (icnt.gt.0) call nga_put(g_fock,lo,hi,work,ld) dotask = next_chunk(lo,hi) end do return end c subroutine prnfin(energy) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" dimension orbs(maxnbfn, maxnbfn) integer lo(2),hi(2),ld c c printout final results c if (ga_nodeid().ne.0) return write(6,1) energy 1 format(//' final energy = ',f16.11//' eigenvalues') call output(eigv, 1, min(nbfn,nocc+5), 1, 1, nbfn, 1, 1) write(6,2) 2 format(//' eigenvectors ') lo(1) = 1 lo(2) = 1 hi(1) = nbfn hi(2) = nbfn ld = nbfn call nga_get(g_orbs,lo,hi,orbs,ld) call output(orbs, 1, nbfn, 1, nocc, nbfn, nbfn, 1) c return end subroutine g(value,i,j,k,l) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" c c compute the two electon integral (ij|kl) over normalized c primitive 1s gaussians c f0val = 0.0d0 rab2 = (x(i)-x(j))**2 + (y(i)-y(j))**2 + (z(i)-z(j))**2 rcd2 = (x(k)-x(l))**2 + (y(k)-y(l))**2 + (z(k)-z(l))**2 facij = expnt(i)*expnt(j)/(expnt(i)+expnt(j)) fackl = expnt(k)*expnt(l)/(expnt(k)+expnt(l)) exijkl = exprjh(- facij*rab2 - fackl*rcd2) denom = (expnt(i)+expnt(j))*(expnt(k)+expnt(l)) * $ sqrt(expnt(i)+expnt(j)+expnt(k)+expnt(l)) fac = (expnt(i)+expnt(j))*(expnt(k)+expnt(l)) / $ (expnt(i)+expnt(j)+expnt(k)+expnt(l)) c xp = (x(i)*expnt(i) + x(j)*expnt(j))/(expnt(i)+expnt(j)) yp = (y(i)*expnt(i) + y(j)*expnt(j))/(expnt(i)+expnt(j)) zp = (z(i)*expnt(i) + z(j)*expnt(j))/(expnt(i)+expnt(j)) xq = (x(k)*expnt(k) + x(l)*expnt(l))/(expnt(k)+expnt(l)) yq = (y(k)*expnt(k) + y(l)*expnt(l))/(expnt(k)+expnt(l)) zq = (z(k)*expnt(k) + z(l)*expnt(l))/(expnt(k)+expnt(l)) rpq2 = (xp-xq)**2 + (yp-yq)**2 + (zp-zq)**2 c call f0(f0val, fac*rpq2) value = (2.0d0 * pi**2.5d0 / denom) * exijkl * f0val * $ rnorm(i)*rnorm(j)*rnorm(k)*rnorm(l) return end c subroutine diagon(tester, iter) c subroutine diagon(fock, orbs, evals, work, tester, iter) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" double precision r_zero, r_one, shift, tester c #if USE_TRANSFORM c c use similarity transform to solve standard eigenvalue problem c (overlap matrix has been transformed out of the problem) c r_one = 1.0d00 r_zero = 0.0d00 call ga_dgemm('n','n',nbfn,nbfn,nbfn,r_one,g_fock,g_orbs, + r_zero,g_tfock) call ga_dgemm('t','n',nbfn,nbfn,nbfn,r_one,g_orbs,g_tfock, + r_zero,g_fock) tester = testfock() shift = 0.0d00 if (tester.gt.0.3d0) then shift = 0.3d0 endif if (iter.ge.2.and.shift.ne.0.0d00) then call shiftfock(shift) endif call ga_copy(g_orbs,g_tfock) call ga_diag_std_seq(g_fock, g_work, eigv) c c Back transform eigenvectors c call ga_dgemm('n','n',nbfn,nbfn,nbfn,r_one,g_tfock,g_work, + r_zero,g_orbs) if (iter.ge.2.and.shift.ne.0.0d00) then do 50 i = nocc+1, nbfn eigv(i) = eigv(i) - shift 50 continue endif #else c c Keep remaking overlap matrix since ga_diag_seq does not c guarantee that g_ident is preserved. c call makoverlap call ga_diag_seq(g_fock, g_ident, g_orbs, eigv) tester = 0.0d00 #endif return end c subroutine makeob implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" double precision work(ichunk,ichunk),orbs(ichunk,ichunk) double precision eval(maxnbfn) integer lo(2),hi(2),ld,me,i,j,iloc,jloc logical dotask c c generate set of orthonormal vectors by creating a random c symmetric matrix and solving associated generalized eigenvalue c problem using the correct overlap matrix. c me = ga_nodeid() call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while (dotask) do j = lo(2), hi(2) jloc = j - lo(2) + 1 do i = lo(1), hi(1) iloc = i - lo(1) + 1 work(iloc,jloc) = s(i,j) orbs(iloc,jloc) = drand48(0) end do end do call nga_put(g_ident,lo,hi,work,ld) call nga_put(g_fock,lo,hi,orbs,ld) dotask = next_chunk(lo,hi) end do call ga_symmetrize(g_fock) call ga_diag_seq(g_fock, g_ident, g_orbs, eval) c return end c subroutine denges implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" c c Form guess density from superposition of atomic densities in the AO c basis set ... instead of doing the atomic SCF hardwire for this c small basis set for the Be atom. c integer one, itask, lo(2), hi(2), ld dimension atdens(15,15) data atdens/ $ 0.000002,0.000027,0.000129,0.000428,0.000950,0.001180, $ 0.000457,-0.000270,-0.000271,0.000004,0.000004,0.000004, $ 0.000004,0.000004,0.000004,0.000027,0.000102,0.000987, $ 0.003269,0.007254,0.009007,0.003492,-0.002099,-0.002108, $ 0.000035,0.000035,0.000035,0.000035,0.000035,0.000035, $ 0.000129,0.000987,0.002381,0.015766,0.034988,0.043433, $ 0.016835,-0.010038,-0.010082,0.000166,0.000166,0.000166, $ 0.000166,0.000166,0.000166,0.000428,0.003269,0.015766, $ 0.026100,0.115858,0.144064,0.055967,-0.035878,-0.035990, $ 0.000584,0.000584,0.000584,0.000584,0.000584,0.000584, $ 0.000950,0.007254,0.034988,0.115858,0.128586,0.320120, $ 0.124539,-0.083334,-0.083536,0.001346,0.001346,0.001346, $ 0.001346,0.001346,0.001346,0.001180,0.009007,0.043433, $ 0.144064,0.320120,0.201952,0.159935,-0.162762,-0.162267, $ 0.002471,0.002471,0.002471,0.002471,0.002471,0.002471, $ 0.000457,0.003492,0.016835,0.055967,0.124539,0.159935, $ 0.032378,-0.093780,-0.093202,0.001372,0.001372,0.001372, $ 0.001372,0.001372,0.001372,-0.000270,-0.002099,-0.010038, $ -0.035878,-0.083334,-0.162762,-0.093780,0.334488,0.660918, $ -0.009090,-0.009090,-0.009090,-0.009090,-0.009090,-0.009090, $ -0.000271,-0.002108,-0.010082,-0.035990,-0.083536,-0.162267, $ -0.093202,0.660918,0.326482,-0.008982,-0.008982,-0.008981, $ -0.008981,-0.008981,-0.008982,0.000004,0.000035,0.000166, $ 0.000584,0.001346,0.002471,0.001372,-0.009090,-0.008982, $ 0.000062,0.000124,0.000124,0.000124,0.000124,0.000124, $ 0.000004,0.000035,0.000166,0.000584,0.001346,0.002471, $ 0.001372,-0.009090,-0.008982,0.000124,0.000062,0.000124, $ 0.000124,0.000124,0.000124,0.000004,0.000035,0.000166, $ 0.000584,0.001346,0.002471,0.001372,-0.009090,-0.008981, $ 0.000124,0.000124,0.000062,0.000124,0.000124,0.000124, $ 0.000004,0.000035,0.000166,0.000584,0.001346,0.002471, $ 0.001372,-0.009090,-0.008981,0.000124,0.000124,0.000124, $ 0.000062,0.000124,0.000124,0.000004,0.000035,0.000166, $ 0.000584,0.001346,0.002471,0.001372,-0.009090,-0.008981, $ 0.000124,0.000124,0.000124,0.000124,0.000062,0.000124, $ 0.000004,0.000035,0.000166,0.000584,0.001346,0.002471, $ 0.001372,-0.009090,-0.008982,0.000124,0.000124,0.000124, $ 0.000124,0.000124,0.000062/ c c Create initial guess for density matrix in global array c call ga_zero(g_dens) call ga_zero(g_counter) one = 1 ld = 15 c c Correct for a factor of two along the diagonal c do i = 1, ld atdens(i,i) = 2.0d00*atdens(i,i) end do itask = nga_read_inc(g_counter,one,one) do while(itask.lt.natom) ioff = itask*15 lo(1) = ioff+1 lo(2) = ioff+1 hi(1) = ioff+15 hi(2) = ioff+15 call nga_put(g_dens,lo,hi,atdens,ld) itask = nga_read_inc(g_counter,one,one) end do call ga_sync return end c subroutine setarrays implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" integer one, two, dims(2) logical status one = 1 two = 2 g_counter = ga_create_handle() call ga_set_data(g_counter,one,one,MT_INT) status = ga_allocate(g_counter) call ga_zero(g_counter) dims(1) = nbfn dims(2) = nbfn g_dens = ga_create_handle() call ga_set_data(g_dens, two, dims, MT_DBL) status = ga_allocate(g_dens) call ga_zero(g_dens) g_schwarz = ga_create_handle() call ga_set_data(g_schwarz, two, dims, MT_DBL) status = ga_allocate(g_schwarz) call ga_zero(g_schwarz) g_fock = ga_create_handle() call ga_set_data(g_fock, two, dims, MT_DBL) status = ga_allocate(g_fock) call ga_zero(g_fock) g_tfock = ga_create_handle() call ga_set_data(g_tfock, two, dims, MT_DBL) status = ga_allocate(g_tfock) call ga_zero(g_tfock) g_work = ga_create_handle() call ga_set_data(g_work, two, dims, MT_DBL) status = ga_allocate(g_work) call ga_zero(g_work) #ifdef CHECKPOINT_SCF arraylist(1) = g_counter arraylist(2) = g_dens arraylist(3) = g_schwarz arraylist(4) = g_fock arraylist(5) = g_work write (6,*) arraylist(1),arraylist(2),arraylist(3) call ga_checkpoint_arrays(arraylist,numarrays) #endif g_ident = ga_create_handle() call ga_set_data(g_ident, two, dims, MT_DBL) status = ga_allocate(g_ident) call ga_zero(g_ident) g_orbs = ga_create_handle() call ga_set_data(g_orbs, two, dims, MT_DBL) status = ga_allocate(g_orbs) call ga_zero(g_orbs) return end subroutine closearrays implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" logical status c status = ga_destroy(g_counter) status = ga_destroy(g_dens) status = ga_destroy(g_schwarz) status = ga_destroy(g_fock) status = ga_destroy(g_tfock) status = ga_destroy(g_work) status = ga_destroy(g_ident) status = ga_destroy(g_orbs) c return end c subroutine makoverlap implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" integer me, lo(2), hi(2), ptr, ld(2) integer ld1, ld2 me = ga_nodeid() call nga_distribution(g_ident, me, lo, hi) call nga_access(g_ident, lo, hi, ptr, ld) ld1 = hi(1) - lo(1) + 1 ld2 = hi(2) - lo(2) + 1 call setoverlap(dbl_mb(ptr),lo,hi,ld1,ld2) call nga_release(g_ident) return end c subroutine setoverlap(a,lo,hi,ld1,ld2) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" integer lo(2), hi(2) integer ld1, ld2, ii, jj double precision a(ld1,ld2) do i = 1, ld1 ii = i + lo(1) - 1 do j = 1, ld2 jj = j + lo(2) - 1 #if USE_TRANSFORM if (ii.eq.jj) then a(i,j) = 1.0d00 else a(i,j) = 0.0d00 endif #else a(i,j) = s(ii,jj) #endif end do end do return end c subroutine print_ga_block(g_a) implicit double precision(a-h,o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" integer lo(2), hi(2), ptr, ld1, ld2 c me = ga_nodeid() call nga_distribution(g_a, me, lo, hi) ld1 = hi(1) - lo(1) + 1 ld2 = hi(2) - lo(2) + 1 call nga_access(g_a, lo, hi, ptr, ld) call dump_chunk(dbl_mb(ptr),ld1,ld2) call nga_release(g_a) c return end c subroutine print_ga_block_ij(g_a,tlo) implicit double precision(a-h,o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" integer lo(2), hi(2), ptr, ld1, ld2 c me = ga_nodeid() call nga_distribution(g_a, me, lo, hi) ld1 = hi(1) - lo(1) + 1 ld2 = hi(2) - lo(2) + 1 call nga_access(g_a, tlo, hi, ptr, ld) call dump_chunk(dbl_mb(ptr),ld1,ld2) call nga_release(g_a) c return end c subroutine dump_chunk(a,ld1,ld2) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" integer ld1, ld2 double precision a(ld1, ld2) do i = 1, min(10,ld1) write(6,100) (a(i,j), j = 1, min(10,ld2)) end do write(6,*) 100 format(10f10.4) return end c double precision function contract_matrices(g_a,g_b) implicit double precision(a-h,o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "tcgmsg.fh" integer lo(2), hi(2), ptr_a, ptr_b, ld, ld1, ld2 double precision a(ichunk,ichunk),b(ichunk,ichunk) double precision value logical dotask c c evalute sum_ij a_ij*b_ij c value = 0.0d00 call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while (dotask) call nga_get(g_a,lo,hi,a,ld) call nga_get(g_b,lo,hi,b,ld) do j = 1, hi(2)-lo(2)+1 do i = 1, hi(1)-lo(1)+1 value = value + a(i,j)*b(i,j) end do end do dotask = next_chunk(lo,hi) end do call ga_dgop(3,value,1,'+') contract_matrices=value c return end ga-5-3/global/examples/scf/input.F0000640005473000001440000000517211471657746015722 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif subroutine input #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mp3def.fh" c....................................................................... c Input configuration from an XYZ format file call be.inpt and set up c initial data structures. Atomic numbers from XYZ file are ignored and c an atomic number of 4 (Beryllium) is used instead. c....................................................................... c c initialize variables c natom = 0 do i = 1, maxatom ax(i) = 0.0d00 ay(i) = 0.0d00 az(i) = 0.0d00 end do c if (ga_nodeid().eq.0) then open(2,file='be.inpt',status='old') read(2,*) natom read(2,*) c c Read in coordinates c do i = 1, natom read(2,*) j,ax(i),ay(i),az(i) end do close(2) endif call ga_igop(1,natom,1,'+') call ga_dgop(2,ax,natom,'+') call ga_dgop(3,ay,natom,'+') call ga_dgop(4,az,natom,'+') c c Set up s-function centers and nuclear charges c ifcnt = 1 do i = 1, natom q(i) = 4.0d00 c expnt(ifcnt) = 1741.0d00 expnt(ifcnt+1) = 262.1d00 expnt(ifcnt+2) = 60.33d00 expnt(ifcnt+3) = 17.62d00 expnt(ifcnt+4) = 5.933d00 expnt(ifcnt+5) = 2.185d00 expnt(ifcnt+6) = 0.859d00 expnt(ifcnt+7) = 0.1806d00 expnt(ifcnt+8) = 0.05835d00 expnt(ifcnt+9) = 0.3d00 expnt(ifcnt+10) = 0.3d00 expnt(ifcnt+11) = 0.3d00 expnt(ifcnt+12) = 0.3d00 expnt(ifcnt+13) = 0.3d00 expnt(ifcnt+14) = 0.3d00 c do j = 1, 15 x(ifcnt) = ax(i) y(ifcnt) = ay(i) z(ifcnt) = az(i) if (j.eq.10) then x(ifcnt) = x(ifcnt) + 1.6d00 endif if (j.eq.11) then x(ifcnt) = x(ifcnt) - 1.6d00 endif if (j.eq.12) then y(ifcnt) = y(ifcnt) + 1.6d00 endif if (j.eq.13) then y(ifcnt) = y(ifcnt) - 1.6d00 endif if (j.eq.14) then z(ifcnt) = z(ifcnt) + 1.6d00 endif if (j.eq.15) then z(ifcnt) = z(ifcnt) - 1.6d00 endif ifcnt = ifcnt + 1 end do end do c c evaluate repulsion energy c enrep = 0.0d00 do i = 1, natom do j = i+1, natom r = sqrt((ax(i)-ax(j))**2 + (ay(i)-ay(j))**2 + + (az(i)-az(j))**2) enrep = enrep + q(i)*q(j)/r end do end do nocc = 2*natom nbfn = 15*natom nnbfn = nbfn*(nbfn+1)/2 return end ga-5-3/INSTALL0000640005473000001440000003633211327433303011633 0ustar d3n000usersInstallation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. ga-5-3/pario/0000750005473000001440000000000012275260566011720 5ustar d3n000usersga-5-3/pario/doc/0000750005473000001440000000000012275260565012464 5ustar d3n000usersga-5-3/pario/doc/index.html0000640005473000001440000000117211300316052014440 0ustar d3n000users Documentation List There are three parallel I/O models supported:

Exclusive Access File Library

An exclusive access file is a file which is generated and/or read by a single process of a distributed parallel application. Files are not shared between different processes. The  library is an abstract high-performance file system which provides a common interface for a variety of architecture specific parallel storage systems.  The library also makes available features like asynchronous input and output to Fortran.  EAF's syntax is similar to the standard Unix C file operations, differences indicate new semantics or extended features available through EAF.

EAF_Open

Description:

    Open a file.
Prototype:
    integer EAF_Open(fname, type, fh)
      character *(*) fname
      integer type
      integer fd
Parameters:
    fname
      Character string of a globally unique filename (path may be fully qualified)
    type
      Read write permissions. Legal values are EAF_W, EAF_R, and EAF_RW
    fh
      File descriptor (handle).
Returns:
    0 or error code

EAF_Write

Description:

    Synchronously write to the file specified by the file handle
Prototype:
    integer EAF_Write(fh, offset, buf, bytes)
      integer fh
      double offset
      _______ buf
      double bytes
Parameters:
    fh
      File Handle offset Absolute offset, in bytes, to start writing at
    buf
      Scalar or array of data
    bytes
      Size of buffer in bytes
Returns:
    0 or error code if an error occured

EAF_AWrite

Description:

    Asynchronously write to the file specified by the file handle, and return a handle to the asynchronous operation.

    If there are more than MAX_AIO_REQ asynchronous requests (reading and/or writing) pending, the operation is handled in a synchronous fashion and returns a CHEMIO_DONE handle.

    On architectures where asynchronous I/O operations are not supported, all requests are handled synchronously, returning a CHEMIO_DONE handle.

Prototype:
    integer EAF_AWrite(fh, offset, buf, bytes, req_id)
      integer fh
      double offset
      _______
          buf
      double bytes
      integer req_id
Parameters:
    fh
      File Handle
    offset
      Absolute offset, in bytes, to start writing at
    buf
      Scalar or array of data
    bytes
      Size of buffer, in bytes
    req_id
      Handle of asynchronous operation
Returns:
    0 or error code if an error occured

EAF_Read

Description:

    Synchronously read from the file specified by the file handle
Prototype:
    integer EAF_Read(fh, offset, buf, bytes)
      integer fh
      double offset
      _______
          buf
      double bytes
      integer req_id
Parameters:
    fh
      File Handle
    offset
      Absolute offset, in bytes, to start writing at
    buf
      Scalar or array of data
    bytes
      Size of buffer, in bytes
    Returns:
      0, or error code if an error occured

EAF_ARead

Description:

    Asynchronously read from the file specified by the file handle, and return a handle to the asynchronous operation.

    If there are more than MAX_AIO_REQ asynchronous requests (reading and/or writing) pending, the operation is handled in a synchronous fashion and returns a EAF_DONE handle.

    On architectures where asynchronous I/O operations are not supported, all requests are handled synchronously, returning a EAF_DONE handle.

Prototype:
    integer EAF_ARead(fh, offset, buf,bytes, req_id)
      integer fh
      double offset
      _______
          buf
      double bytes
      integer req_id
Parameters:
    fh
      File Handle
    offset
      Absolute offset, in bytes, to start reading from
    buf
      Scalar or array of data
    bytes
      Size of buffer, in bytes
    req_id
      Handle of asynchronous operation
Returns:
    0 if succeeded, or error code if an error occured

EAF_Probe

Description:

    Determine if an asynchronous request has completed or is pending.
Prototype:
    integer EAF_Probe(id, status)
      integer id
      integer status
Parameters:
    id
      Handle of asynchronous request
    status Pending or completed status argument
Returns:
    0 if probe succeeded, else returns error code .

    status returns 0 if the asynchronous operation is complete, or 1 otherwise.

    If the asynchronous request is complete, id is invalidated.


EAF_Wait

Description:

    Wait for the completion of the asynchronous request associated with id
Prototype:
    integer EAF_Wait(id)
      integer id
Parameters:
    id
      Handle of asynchronous request
Returns:
    0 if EAF is able to wait for completion, else returns error code.

    id is invalidated.


EAF_Close

Description:

    Close a file
Prototype:
    integer EAF_Close(fh)
      integer fh
Parameters:
    fh
      File Handle
Returns:
    0 if the file was closed, else returns error code.

EAF_Delete

Description:

    Delete a file
Prototype:
    integer EAF_Delete(fname)
      character*(*) fname
Parameters:
    fname
      File name
Returns:
    0 if the file was deleted, else returns error code.

EAF_Length

Description:

    Determine the length of a file
Prototype:
    double EAF_Length(fh)
      integer fh
Parameters:
    fh
      File Handle
Returns:
    file length in bytes

EAF_Eof

Description:

    Determines if the enod of file was reached
Prototype:
    logical EAF_Eof(ierr)
      integer ierr
Parameters:
    ierr
      error code
Returns:
    true if the end of file was reached, else returns false.

    ierr=0 means success, otherwise an error.


EAF_Truncate

Description:

    Truncate a file at specified offset
Prototype:
    integer EAF_Close(fh, offset)
      integer fh
      double offset
Parameters:
    fh
      File Handle
    offset
      offset in bytes
Returns:
    0 if the file was truncated, else returns error code.

EAF_Stat

Description:

    Determine available disk space and type for a filesystem
Prototype:
    integer EAF_Stat(fname, avail, fstype)
      character*(*) fname
      integer avail
      integer fstype
Parameters:
    fname
      File/directory name
    avail
      amount of available disk space in kilobytes
    fstype
      filesystem type (Unix/PIOFS/PFS/...)
Returns:
    0 if success, else returns error code.

EAF_Errmsg

Description:

    Prints to stdout an error message associated with error code
Prototype:
    subroutine EAF_Errmsg(ierr)
      integer ierr
Parameters:
    ierr
      error code returned from other EAF routines
Returns:
    nothing
ga-5-3/pario/doc/dra_ops.html0000640005473000001440000005706711300316052014776 0ustar d3n000users Disk Resident Arrays Operations

Disk Resident Arrays

Disk Resident Arrays (DRA) extend the Global Arrays (GA) programming model to disk. The library encapsulates the details of data layout, addressing and I/O transfer in disk arrays objects. Disk resident arrays resemble global arrays except that they reside on the disk instead of the main memory. The main features of this model are:
  • Data can be transfered (copied) between disk and global memory.
  • I/O operations have nonblocking interface to allow overlapping of I/O with computations.
  • All I/O operations are collective.
  • Either whole or sections of global arrays can be transferred between GA memory and the disk.
  • Reshaping and transpose operation are allowed during the transfer.
  • Disk resident arrays might be temporary or persistent (saved after program termination and available in next runs).
  • Persistent disk arrays can be accessed by any program executing on arbitrary number of processors.
  • Distribution and internal data layout on the disk is optimized for large data transfer.
  • Hints provided by the user are utilized to guide optimization of the library performance for the specific I/O patterns.
DRA can take advantage of a shared file system of a collection of independent filesystems accessible from individual computing nodes.

dra_init

status = dra_init(max_arrays, max_array_size, total_disk_space, max_memory)
         integer max_arrays [input]
         double precision max_array_size [input]
         double precision total_disk_space [input]
         double precision max_memory [input]
Initializes Disk Resident Array I/O subsystem.

max_array_size , total_disk_space and max_memory are given in bytes.

max_memory specifies how much local memory per processor the application is willing to provide to the DRA I/O subsystem for buffering.

The value of -1 for any of input arguments means: "don't care ", "don't know" , or "use defaults ".


dra_terminate

  status=dra_terminate()
Close all open disk resident arrays and shut down DRA I/O subsystem.


dra_create

     status = dra_create(type, dim1, dim2, name, filename, mode,rdim1,rdim2,d_a)
              integer type                      [input]   ! MA type identifier
              integer dim1                      [input]
              integer dim2                      [input]
              character*(*) name                [input]
              character*(*) filename            [input]
              integer mode                      [input]
              integer rdim1                     [input] 
              integer rdim2                     [input]
              integer d_a                       [output]  ! DRA handle
Creates a new disk resident array with specified dimensions and data type (represented by MA type handle).

The string filename specifies name of an abstract meta-file that will store the data on the disk. The meta-file might be implemented as multiple files that will contain parts of the disk resident array. The component files will have names derived from the string filename according to some established scheme(s). Only one DRA object can be stored in DRA meta-file identified by filename .

DRA objects persist on the disk after calling dra_close. dra_delete should be used instead of dra_close to delete disk array and associated meta-file on the disk.

String name can be used for more informative (longer)names.

The data in disk resident array is implicitly initialized to 0 .

Access permissions (read, write, read& write) are set in mode . These are set using defined in the header files DRA.fh (Fortran) and DRA.h (C) preprocessor constants: DRA_R, DRA_W, DRA_RW.

The pair [rdim1, rdim2] specifies dimensions of a typical request. The value of -1 for either of them means "unspecified". The layout of the data on the disk(s) is determined based on the values of these arguments. Performance of the DRA operations depends on the dimensions (section shape) of the requests. If data layout is optimized for column-like sections, performance of DRA operations for row-like sections might be seriously degraded. This is analogous to the effect of wrong loop ordering iyielding frequent cache misses in the following example .

              double precision a(1000, 1000)
              do i = 1, 1000
                 do j = 1, 1000
                    a(i,j) = dfloat(i+j)
                 enddo
              enddo

instead of
              do j = 1, 1000
                 do i = 1, 1000
                    a(i,j) = dfloat(i+j) 
                 enddo
              enddo

dra_open

    status = dra_open(filename, mode, d_a)
              character*(*) filename            [input]
              integer mode                      [input]
              integer d_a                       [output]  ! DRA handle
Open and assign DRA handle to disk resident array stored in DRA meta-file filename. Disk resident arrays that are created with dra_create and saved by calling dra_close can be later opened and accessed by the same or different application.

Attributes of the disk resident array can be found by calling dra_inquire.


dra_write

     status = dra_write(g_a, d_a, request)
              integer g_a                       [input]  ! GA handle
              integer d_a                       [input]  ! DRA handle
              integer request                   [output] ! request id
Write asynchronously specified global array to specified disk resident array.

The dimensions and type of arrays represented by handles g_a and d_a must match. If dimensions don't match, dra_write_section should be used instead.

The operation is by definition asynchronous but it might be implemented as synchronous i.e., it would return only when the I/O is completed.

request can be used to dra_probe or dra_wait for completion of the associated operation.


dra_write_section

     status = dra_write_section(transp, g_a, gilo, gihi, gjlo, gjhi, 
                                        d_a, dilo, dihi, djlo, djhi, request)
              logical transp                    [input] ! transpose operator 
              integer g_a                       [input] ! GA handle 
              integer d_a                       [input] ! DRA handle 
              integer gilo                      [input] 
              integer gihi                      [input] 
              integer gjlo                      [input] 
              integer gjhi                      [input] 
              integer dilo                      [input] 
              integer dihi                      [input] 
              integer djlo                      [input] 
              integer djhi                      [input] 
              integer request                   [output] ! request id
Write asynchronously specified global array section to specified disk resident array section:
                OP(g_a[ gilo:gihi, gjlo:gjhi]) -->  d_a[ dilo:dihi, djlo:djhi]
where OP is the transpose operator (.true./.false.). Return error if the two section's types or sizes mismatch. See dra_write specs for discussion of request .


dra_read

     status = dra_read(g_a, d_a, request)
              integer g_a                       [input]  ! GA handle
              integer d_a                       [input]  ! DRA handle
              integer request                   [output] ! request id
Read asynchronously the specified global array from the specified disk resident array.

Dimensions and type of arrays referred to by handles g_a and d_a must match. If dimensions don't match, dra_read_section could be used instead.

See dra_write specs for discussion of request .


dra_read_section

     status = dra_read_section(transp, g_a, gilo, gihi, gjlo, gjhi,
                                       d_a, dilo, dihi, djlo, djhi, request)
              logical transp                    [input] ! transpose operator
              integer g_a                       [input] ! GA handle
              integer d_a                       [input] ! DRA handle
              integer gilo                      [input]
              integer gihi                      [input]
              integer gjlo                      [input]
              integer gjhi                      [input]
              integer dilo                      [input]
              integer dihi                      [input]
              integer djlo                      [input]
              integer djhi                      [input]
              integer request                   [output] ! request id
Read asynchronously specified global array section from specified disk resident array section:
                OP(d_a[ dilo:dihi, djlo:djhi]) -->  g_a[ gilo:gihi, gjlo:gjhi]
where OP is the transpose operator (.true./.false.).

See dra_write specs for discussion of request .


dra_probe

     status = dra_probe(request, compl_status)
              integer request                   [input]  ! request id
              integer compl_status              [output] ! completion status
Tests for completion of dra_write/read or dra_write/read_section operation which set the value passed in request argument.

compl_status .eq. 0 means the operation has been completed.

compl_status .ne. 0 means "not done yet ".


dra_wait

     status = dra_wait(request)
              integer request                   [input]  ! request id
Blocks until completion of dra_write/read or dra_write/read_section operation which set the value passed in request argument.


dra_inquire

     status = dra_inquire(d_a, type, dim1, dim2, name, filename)
              integer d_a                       [input]  ! DRA handle
              integer type                      [output]
              integer dim1                      [output]
              integer dim2                      [output]
              character*(*) name                [output]
              character*(*) filename            [output]
Return dimensions, type , name of disk resident array, and filename of DRA meta-file associated with d_a handle.


dra_delete

     status = dra_delete(d_a)
              integer d_a                       [input]  ! DRA handle
Delete a disk resident array associated with d_a handle. Invalidate handle. The corresponding DRA meta-file is destroyed.


dra_close

     status = dra_close(d_a)
              integer d_a                       [input]  ! DRA handle
Close DRA meta-file associated with d_a handle and deallocate data structures corresponding to this disk array. Invalidate d_a handle. The array on the disk is persistent.


dra_flick

     subroutine dra_flick()
Returns control to DRA for a VERY short time to improve progress of pending asynchronous operations. ga-5-3/pario/doc/list.html0000640005473000001440000000142711300316052014307 0ustar d3n000users Untitled Document

Shared Files Library

sf_create

sf_destroy

sf_read

sf_wait

sf_waitall

sf_write

 

 

 

  ga-5-3/pario/doc/sf.html0000640005473000001440000001566411300316052013754 0ustar d3n000users sf gowno

Shared Files Library

The Shared Files (SF) library implements logically-shared temporary files for parallel SPMD (single-program-multiple-data) applications. Any process can read and write at arbitrary location in a file independently of other processes. Shared files must be created and destroyed collectively. To optimize performance of the library, user can provide hints on:

  • soft limit, and
  • hard limit for the file size.

The SF read and write operations are asynchronous/nonblocking and require a wait operation to complete.

Due to the FORTRAN data type limitations, in order to facilitate access to files >2GB the file size, request size and offset arguments use double precision data types.

All SF routines return an error code. The "0" value means success, other values correspond to error codes.


sf_create

integer sf_create(fname, size_hard_limit, size_soft_limit, req_size, handle)
        fname            -- meta-file name
        size_hard_limit  -- max file size in bytes not to be exceeded (a hint)
        size_soft_limit  -- estimated file size (a hint)
        req_size         -- size of  a typical request (a hint)
        handle           -- returned handle to the created file

Creates shared file using name and path specified in fname as a template.
req_size specifies size of a typical request (-1. means "don't know").

Creates shared file using name and path specified in fname as a template.
req_size specifies size of a typical request (-1. means "don't know").

It is a collective operation.


sf_write

 

integer sf_write(handle, offset, bytes, buffer, request_id)
        handle           -- file handle returned from sf_create   [in]
        offset           -- location in file (from the beginning)
                            where data should be written to       [in]
        buffer           -- local array to put the data           [in]
        bytes            -- number of bytes to read               [in]
        request_id       -- id identifying asynchronous operation [out]

Asynchronous write operation. Writes number of bytes to the file identified by handle at location offset.Operation is guaranteed to be complete when sf_wait called with request_id argument returns.


sf_read

integer sf_read(handle, offset, bytes, buffer, request_id)
        handle           -- file handle returned from sf_create   [in]
        offset           -- location in file (from the beginning)
                            where data should be read from        [in]
        buffer           -- local array to put the data           [in]
        bytes            -- number of bytes to read               [in]
        request_id       -- id identifying asynchronous operation [out]

Asynchronous read operation. Reads number of bytes to the file identified by handle at location offset.Operation is guaranteed to be complete when sf_wait called with request_id argument returns.


sf_wait

integer sf_wait(request_id)
        request_id       -- id identifying asynchronous operation [in/out]

Blocks the calling process until I/O operation associated with request_id completes.
Invalidates request_id.
 
 



sf_waitall

integer sf_waitall(list, num)
        list(num)        -- array of ids for asynchronous operations [in/out]
        num              -- number of entries in list                [in]

Blocks the calling process until all of the num I/O operations associated with ids
specified in list complete. Invalidates (modifies) ids on the list.


sf_destroy

integer sf_destroy(handle)
        handle           -- file handle returned from sf_create      [in]

Destroys the shared file associated with handle. It is a collective operation. ga-5-3/pario/doc/commands_eaf.html0000640005473000001440000000276111300316052015752 0ustar d3n000users

Commands
EAF_Open
EAF_Write
EAF_AWrite
EAF_Read
EAF_ARead
EAF_Probe
EAF_Wait
EAF_Close
EAF_Length
EAF_Delete
EAF_Eof
EAF_Errmsg
EAF_Stat
EAF_Truncate

Permissions
EAF_RW
EAF_W
EAF_R
ga-5-3/pario/doc/dra_index.html0000640005473000001440000000343011300316052015265 0ustar d3n000users GA Index

DRA_CLOSE
DRA_CREATE
DRA_DELETE
DRA_FLICK
DRA_INIT
DRA_INQUIRE
DRA_OPEN
DRA_PROBE
DRA_READ
DRA_READ_SECTION
DRA_TERMINATE
DRA_WAIT
DRA_WRITE
DRA_WRITE_SECTION
ga-5-3/pario/doc/SFapi.html0000640005473000001440000000063606746150706014363 0ustar d3n000users Shared Files Library <BODY> Viewing this page requires a browser capable of displaying frames. </BODY> ga-5-3/pario/doc/DRAapi.html0000640005473000001440000000073006746150706014454 0ustar d3n000users Disk Resident Arrays Operations <body> Viewing this page requires browser capable of displaying frames </body> ga-5-3/pario/sf/0000750005473000001440000000000012275260566012330 5ustar d3n000usersga-5-3/pario/sf/test.F0000640005473000001440000000641411751012325013406 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c c FNAME - filename for test program c #define BASE_NAME 'shared.file' #ifdef HPIODIR # define FNAME HPIODIR//BASE_NAME #else # define FNAME BASE_NAME #endif #define SYNCH ga_sync program sftest c implicit none #include "global.fh" #include "sf.fh" c integer size integer dimnsn integer maxid parameter(maxid=5) ! max number of outstanding I/O requests parameter(dimnsn=8192) real*8 buffer(dimnsn,maxid) ! need buffering for all maxid requests double precision tt0,ttw, ttr c integer stack, heap integer idlist(maxid), curid character*80 errmsg c integer me,nproc,handle,i,start,end,j, rc, chunk c #include "mp3.fh" call ga_initialize() c curid = 0 me = ga_nodeid() nproc = ga_nnodes() size = maxid*dimnsn*nproc c rc = sf_create(FNAME, $ dble(16*size),dble(8*size),dble(8*dimnsn),handle) c call SYNCH chunk = (size+nproc-1)/nproc start = me*chunk+1 end = min((start+chunk-1),size) tt0 = MP_TIMER() c print *,'me=',me,'writing:', start, end c everybody writes chunk of data if(start.le.end) then do i = start, end,dimnsn do j = 1, min(dimnsn,(end-i+1)) buffer(j,curid+1) = dble(i+j-1) enddo if(curid .eq. maxid)then rc=sf_waitall(idlist,maxid) curid = 0 endif curid = curid+1 rc = sf_write(handle, 8*dble(i-1), & 8*dble(min(dimnsn,(end-i+1))), buffer(1,curid), & idlist(curid)) if (rc.ne.0)call ga_error('write failed',rc) enddo endif c call sf_fsync(handle) rc=sf_waitall(idlist,curid) if(rc.ne.0)call ga_error('waitall failed',rc) curid = 0 ttw = MP_TIMER() -tt0 c call ga_dgop(88,ttw,1,'max') call SYNCH c c c everybody reads different chunk of data start = (nproc-me-1)*chunk+1 end = min((start+chunk-1),size) print *,'me=',me,'reading:', start, end tt0 = MP_TIMER() do i = start,end,dimnsn c read and test data chunk by chunk rc = sf_read(handle, 8*dble(i-1), . 8*dble(min(dimnsn,(end-i+1))), buffer, idlist(1)) if (rc.ne.0)then call sf_errmsg(rc,errmsg) print *,'read at offset ',8*dble(i-1),' failed:',errmsg call ga_error('read failed',rc) endif rc=sf_wait(idlist(1)) if (rc.ne.0)call ga_error('wait failed',rc) c do j = 1,min(dimnsn,(end-i+1)) if(buffer(j,1).ne.dble(i+j-1)) then print *, me,buffer(j,1), i+j-1,i stop 'test failed' endif enddo enddo ttr = MP_TIMER() -tt0 c call ga_dgop(88,ttr,1,'max') call SYNCH c rc = sf_destroy(handle) if(me.eq.0)then write(*,*)' ' write(*,*)'test passed ', 8*maxid*dimnsn,' bytes' write(*,*) 8.0e-6*maxid*dimnsn/ttw,' MB/s write rate' write(*,*) 8.0e-6*maxid*dimnsn/ttr,' MB/s read rate' write(*,*)' ' endif c call SYNCH call ga_terminate call MP_FINALIZE() end ga-5-3/pario/sf/sf_fortran.c0000640005473000001440000000312511502432445014626 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STRING_H # include #endif #include "sf.h" #include "sff2c.h" #include "farg.h" #define MAX_NAME 256 static char cname[MAX_NAME+1]; Integer FATR sf_create_( #ifdef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *fname, SFsize_t *size_hard_limit, SFsize_t *size_soft_limit, SFsize_t *req_size, Integer *handle, int len #else char *fname, int len, SFsize_t *size_hard_limit, SFsize_t *size_soft_limit, SFsize_t *req_size, Integer *handle #endif ) { ga_f2cstring(fname, len, cname, MAX_NAME); return sfi_create(cname, size_hard_limit, size_soft_limit, req_size, handle); } Integer FATR sf_create_suffix_( #ifdef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *fname, SFsize_t *size_hard_limit, SFsize_t *size_soft_limit, SFsize_t *req_size, Integer *handle, Integer *suffix, int len #else char *fname, int len, SFsize_t *size_hard_limit, SFsize_t *size_soft_limit, SFsize_t *req_size, Integer *handle, Integer *suffix #endif ) { ga_f2cstring(fname, len, cname, MAX_NAME); return sfi_create_suffix(cname, size_hard_limit, size_soft_limit, req_size, handle, suffix); } /*****************************************************************************/ void FATR sf_errmsg_(Integer *code, char *msg, int msglen) { char buf[80]; sfi_errmsg((int) *code, buf); (void) ga_c2fstring(buf, msg, msglen); } ga-5-3/pario/sf/sf_capi.c0000640005473000001440000000440111751012325014062 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_MALLOC_H # include #endif #if HAVE_STDLIB_H # include #endif #include "typesf2c.h" #include "sf.h" #include "sff2c.h" int SF_Create(char* fname, SFsize_t size_hard_limit, SFsize_t size_soft_limit, SFsize_t req_size, int *handle) { Integer s_a; int retcode = sfi_create(fname, &size_hard_limit, &size_soft_limit, &req_size, &s_a); *handle = s_a; return retcode; } int SF_Create_suffix(char* fname, SFsize_t size_hard_limit, SFsize_t size_soft_limit, SFsize_t req_size, int *handle, int suffix) { Integer s_a; Integer isuffix = suffix; int retcode = sfi_create_suffix(fname, &size_hard_limit, &size_soft_limit, &req_size, &s_a, &isuffix); *handle = s_a; return retcode; } int SF_Destroy(int handle) { Integer s_a = handle; return sf_destroy_(&s_a); } int SF_Rwtor(int handle) { Integer s_a = handle; return sf_rwtor_(&s_a); } int SF_Open(int handle) { Integer s_a = handle; return sf_open_(&s_a); } int SF_Close(int handle) { Integer s_a = handle; return sf_close_(&s_a); } int SF_Fsync(int handle) { Integer s_a = handle; return sf_fsync_(&s_a); } int SF_Write(int handle, SFsize_t offset, SFsize_t bytes, char *buffer, int *req_id) { Integer s_a = handle; Integer id; int retcode = sf_write_(&s_a, &offset, &bytes, buffer, &id); *req_id = id; return retcode; } int SF_Read(int handle, SFsize_t offset, SFsize_t bytes, char *buffer, int *req_id) { Integer s_a = handle; Integer id; int retcode = sf_read_(&s_a, &offset, &bytes, buffer, &id); *req_id = id; return retcode; } int SF_Wait(int *req_id) { Integer id = (Integer)*req_id; int retcode = sf_wait_(&id); *req_id = id; return retcode; } int SF_Waitall(int *list, int num) { Integer *copy = (Integer*)malloc(num * sizeof(Integer)); Integer inum = num; int retcode; int i; for (i=0; i #endif #include "ga.h" #include "elio.h" #include "sf.h" #include "sff2c.h" #define _max_shared_files 100 #define SF_OFFSET 3000 #define SF_FAIL (Integer)1 typedef struct{ Integer handle; Integer actv; SFsize_t soft_size; SFsize_t hard_size; Fd_t fd; char fname[200]; } SF_t; SF_t SF[_max_shared_files]; #include "coms.h" /******************** internal macros ********************************/ #define sfi_check_handleM(_handle, msg)\ {\ if(_handle+SF_OFFSET >=_max_shared_files||_handle+SF_OFFSET<0) { \ fprintf(stderr,"%s, %ld --",msg,(long) _max_shared_files); \ ERROR("invalid SF handle",(int)_handle); \ } \ if( SF[(_handle+SF_OFFSET)].actv == 0) { \ fprintf(stderr,"%s:",msg); \ ERROR("disk array not active",(int)_handle); \ } \ } /*********************************************************************/ Integer sfi_get_handle() { Integer sf_handle =-1, candidate = 0; do{ if(!SF[candidate].actv){ sf_handle=candidate; SF[candidate].actv =1; } candidate++; }while(candidate < _max_shared_files && sf_handle == -1); return(sf_handle); } void sfi_release_handle(Integer *handle) { SF[*handle+SF_OFFSET].actv =0; *handle = 0; } Integer sfi_create(char *fname, SFsize_t *size_hard_limit, SFsize_t *size_soft_limit, SFsize_t *req_size, Integer *handle) { Integer hndl; SYNC(); /*** Get next free SF handle ***/ if( (hndl = sfi_get_handle()) == -1) ERROR("sf_create: too many shared files ",(int)_max_shared_files); *handle = hndl - SF_OFFSET; /*generate file name(s) */ sprintf(SF[hndl].fname,"%s.%d",fname, (int)hndl); if (ME() == 0) SF[hndl].fd = elio_open(SF[hndl].fname,ELIO_RW, ELIO_SHARED); SYNC(); if (ME() != 0) SF[hndl].fd = elio_open(SF[hndl].fname,ELIO_RW, ELIO_SHARED); if(SF[hndl].fd==NULL) ERROR("sf_create: could not open file",0); if(SF[hndl].fd->fd==-1) ERROR("sf_create: descriptor -1",0); SF[hndl].soft_size = *size_soft_limit; SF[hndl].hard_size = *size_hard_limit; SYNC(); return(ELIO_OK); } /** * takes an additional input suffix which is appended to the filename instead * of the handle. This will give users complete control over the filename as it * is written to and read from disk. */ Integer sfi_create_suffix(char *fname, SFsize_t *size_hard_limit, SFsize_t *size_soft_limit, SFsize_t *req_size, Integer *handle, Integer *suffix) { Integer hndl; SYNC(); /*** Get next free SF handle ***/ if( (hndl = sfi_get_handle()) == -1) { ERROR("sf_create_suffix: too many shared files ", (int)_max_shared_files); } *handle = hndl - SF_OFFSET; /*generate file name(s) */ sprintf(SF[hndl].fname,"%s.%d",fname, (int) *suffix); if (ME() == 0) SF[hndl].fd = elio_open(SF[hndl].fname,ELIO_RW, ELIO_SHARED); SYNC(); if (ME() != 0) SF[hndl].fd = elio_open(SF[hndl].fname,ELIO_RW, ELIO_SHARED); if(SF[hndl].fd==NULL) ERROR("sf_create_suffix: could not open file",0); if(SF[hndl].fd->fd==-1) ERROR("sf_create_suffix: descriptor -1",0); SF[hndl].soft_size = *size_soft_limit; SF[hndl].hard_size = *size_hard_limit; SYNC(); return(ELIO_OK); } /*****************************************************************************/ Integer FATR sf_destroy_(Integer *s_a /**< [in] SF handle */) { Integer handle = *s_a+SF_OFFSET; SYNC(); sfi_check_handleM(*s_a,"sf_delete"); elio_close(SF[handle].fd); /* fix from Peter Knowles */ SYNC(); /* this sync is unnecessary under Unix */ if(ME() == 0)elio_delete(SF[handle].fname); sfi_release_handle(s_a); SYNC(); return(ELIO_OK); } /** * close rw file and open as read only */ Integer FATR sf_rwtor_(Integer *s_a /**< [in] SF handle */) { Integer handle = *s_a+SF_OFFSET; elio_close(SF[handle].fd); SF[handle].fd = elio_open(SF[handle].fname,ELIO_R, ELIO_SHARED); if(SF[handle].fd==NULL) ERROR("sf_open: could not open file",0); if(SF[handle].fd->fd==-1) ERROR("sf_open: descriptor -1",0); return(ELIO_OK); } /** * open */ Integer FATR sf_open_(Integer *s_a /**< [in] SF handle */) { Integer handle = *s_a+SF_OFFSET; SF[handle].fd = elio_open(SF[handle].fname,ELIO_RW, ELIO_SHARED); if(SF[handle].fd==NULL) ERROR("sf_open: could not open file",0); if(SF[handle].fd->fd==-1) ERROR("sf_open: descriptor -1",0); return(ELIO_OK); } /** * close */ Integer FATR sf_close_(Integer *s_a) { Integer handle = *s_a+SF_OFFSET; elio_close(SF[handle].fd); return(ELIO_OK); } /** * fsync */ Integer FATR sf_fsync_(Integer *s_a) { Integer handle = *s_a+SF_OFFSET; elio_fsync(SF[handle].fd); return(ELIO_OK); } /** * asynchronous write to shared file */ Integer FATR sf_write_(Integer *s_a, SFsize_t *offset, SFsize_t *bytes, char *buffer, Integer *req_id) { Integer handle = *s_a+SF_OFFSET; int status; io_request_t id; sfi_check_handleM(*s_a,"sf_write"); status = elio_awrite(SF[handle].fd, (Off_t)*offset, buffer, (Size_t)*bytes, &id); *req_id = (Integer)id; return((Integer)status); /* status = elio_write(SF[handle].fd, (Off_t)*offset, buffer,(Size_t)*bytes); *req_id = (Integer)ELIO_DONE; if(status != (int)*bytes) return((Integer)SF_FAIL); else return((Integer)ELIO_OK); */ } /** * asynchronous read from shared file */ Integer FATR sf_read_(Integer *s_a, SFsize_t *offset, SFsize_t *bytes, char *buffer, Integer *req_id) { Integer handle = *s_a+SF_OFFSET; int status; io_request_t id; sfi_check_handleM(*s_a,"sf_read"); status = elio_aread(SF[handle].fd, (Off_t)*offset, buffer, (Size_t)*bytes, &id); *req_id = (Integer)id; return((Integer)status); } /** * block calling process until I/O operation completes */ Integer FATR sf_wait_(Integer *req_id) { int status; io_request_t id = (io_request_t) *req_id; status = elio_wait(&id); *req_id = (Integer)id; return((Integer)status); } /** * block calling process until all I/O operations associated * with id in the list complete */ Integer FATR sf_waitall_(Integer *list, Integer *num) { int i; int status, fail=0; for(i=0;i<*num;i++){ io_request_t id = (io_request_t) list[i]; status = elio_wait(&id); if(status != ELIO_OK) fail++; list[i] = (Integer)id; } if (fail)return((Integer)SF_FAIL); else return((Integer)ELIO_OK); } /** * retrieve message associated with error code */ void sfi_errmsg(int code, char *msg) { if(code==SF_FAIL) (void) strcpy(msg, "SF operation failed"); else elio_errmsg(code, msg); } ga-5-3/pario/sf/coms.h0000640005473000001440000000032511300316052013417 0ustar d3n000users/*************** interface to a parallel communication system ********/ # include "ga.h" # define SYNC GA_Sync # define NPROC GA_Nnodes # define ME GA_Nodeid # define ERROR GA_Error ga-5-3/pario/sf/SF.doc0000640005473000001440000000640507072732535013334 0ustar d3n000users Shared Files Model . Shared files are non-persistent (temporary) . Shared files resemble one-dimensional arrays in main memory . Each process can independently read/write to any location in the file . The file size has a hard limit specified when it is created . User can also specify (or use "don't know" flag) the estimated approximate file size -- might be exceeded at run-time (a hint) . sf_flush flushes the buffers so that previously written data goes to the disk before the routine returns. . All routines return error code: "0" means success. . sf_create and sf_destroy are collective . file, request sizes, and offset (all in bytes) are DOUBLE PRECISION arguments, all the other arguments are INTEGERS . read/writes are asynchronous integer sf_create(fname, size_hard_limit, size_soft_limit, req_size, handle) fname -- meta-file name size_hard_limit -- max file size in bytes not to be exceeded (a hint) size_soft_limit -- estimated file size (a hint) req_size -- size of a typical request (a hint) handle -- returned handle to the created file Creates shared file using name and path specified in fname as a template. req_size specifies size of a typical request (-1 = "don't know") integer sf_write(handle, offset, bytes, buffer, request_id) handle -- file handle returned from sf_create [in] offset -- location in file (from the beginning) where data should be written to [in] buffer -- local array to put the data [in] bytes -- number of bytes to read [in] request_id -- id identifying asynchronous operation [out] asynchronous write operation integer sf_read(handle, offset, bytes, buffer, request_it) handle -- file handle returned from sf_create [in] offset -- location in file (from the beginning) where data should be read from [in] buffer -- local array to put the data [in] bytes -- number of bytes to read [in] request_id -- id identifying asynchronous operation [out] asynchronous read operation integer sf_wait(request_id) request_id -- id identifying asynchronous operation [in/out] blocks calling process until I/O operation associated with id completed, invalidates request_id integer sf_waitall(list, num) list(num) -- array of ids for asynchronous operations [in/o] num -- number of entries in list [in] blocks calling process until all "num" I/O operations associated with ids specified in list completed, invalidates ids on the list integer sf_destroy(handle) handle -- file handle returned from sf_create [in] subroutine sf_errmsg(ierr,message) ierr -- error code returned by a previous call to SF [in] message -- character string where the corresponding message is written returns a string interpretation of the error code, or an empty string (Fortran all blanks, C null first character) if the error code is not recognized. ga-5-3/pario/sf/sf.h0000640005473000001440000000154611751012325013102 0ustar d3n000users#ifndef SF_H_ #define SF_H_ typedef double SFsize_t; #include "typesf2c.h" extern int SF_Create(char* fname, SFsize_t size_hard_limit, SFsize_t size_soft_limit, SFsize_t req_size, int *handle); extern int SF_Create_suffix(char* fname, SFsize_t size_hard_limit, SFsize_t size_soft_limit, SFsize_t req_size, int *handle, int suffix); extern int SF_Destroy(int handle); extern int SF_Rwtor(int handle); extern int SF_Open(int handle); extern int SF_Close(int handle); extern int SF_Fsync(int handle); extern int SF_Write(int handle, SFsize_t offset, SFsize_t bytes, char *buffer, int *req_id); extern int SF_Read(int handle, SFsize_t offset, SFsize_t bytes, char *buffer, int *req_id); extern int SF_Wait(int *req_id); extern int SF_Waitall(int *list, int num); extern void SF_Errmsg(int code, char *msg); #endif /* SF_H_ */ ga-5-3/pario/sf/sf.fh0000640005473000001440000000044711032500573013246 0ustar d3n000users integer sf_create,sf_write,sf_read,sf_wait, sf_destroy integer sf_waitall, sf_open, sf_close, sf_rwtor integer sf_create_suffix external sf_create,sf_write,sf_read,sf_wait, sf_destroy external sf_waitall, sf_open, sf_close, sf_rwtor external sf_create_suffix ga-5-3/pario/eaf/0000750005473000001440000000000012275260566012453 5ustar d3n000usersga-5-3/pario/eaf/eaf.c0000640005473000001440000005174711721302651013354 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * DISCLAIMER * * This material was prepared as an account of work sponsored by an * agency of the United States Government. Neither the United States * Government nor the United States Department of Energy, nor Battelle, * nor any of their employees, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR * ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, * COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, * SOFTWARE, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT * INFRINGE PRIVATELY OWNED RIGHTS. * * * ACKNOWLEDGMENT * * This software and its documentation were produced with United States * Government support under Contract Number DE-AC06-76RLO-1830 awarded by * the United States Department of Energy. The United States Government * retains a paid-up non-exclusive, irrevocable worldwide license to * reproduce, prepare derivative works, perform publicly and display * publicly by or for the US Government, including the right to * distribute to other US Government contractors. */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_LINUX_LIMITS_H # include #endif #if HAVE_LIMITS_H # include #endif #ifdef WIN32 # define PATH_MAX _MAX_PATH # define F_OK 2 #else # include #endif #ifdef EAF_STATS # include # include #endif #include "elio.h" #include "eaf.h" #include "eafP.h" #include "macdecls.h" #ifdef OPEN_MAX # define EAF_MAX_FILES OPEN_MAX #else # define EAF_MAX_FILES 1024 #endif static struct { char *fname; /**< Filename --- if non-null is active*/ Fd_t elio_fd; /**< ELIO file descriptor */ int type; /**< file type */ int nwait; /**< #waits */ int nwrite; /**< #synchronous writes */ int nread; /**< #synchronous reads */ int nawrite; /**< #asynchronous writes */ int naread; /**< #asynchronous reads */ double nb_write; /**< #synchronous bytes written */ double nb_read; /**< #synchronous bytes read */ double nb_awrite; /**< #asynchronous bytes written */ double nb_aread; /**< #asynchronous bytes read */ double t_write; /**< Wall seconds synchronous writing */ double t_read; /**< Wall seconds synchronous reading */ double t_awrite; /**< Wall seconds asynchronous writing */ double t_aread; /**< Wall seconds asynchronous reading */ double t_wait; /**< Wall seconds waiting */ long size; /**< size for MA hack */ long handle; /**< handle for MA hack */ char *pointer; /**< pointer for MA */ long openma; /**< open yes or no for MA to simulate file behavoir */ } file[EAF_MAX_FILES]; int eaf_flushbuf(int , eaf_off_t , const void *, size_t ); static int valid_fd(int fd) { return ( (fd >= 0) && (fd < EAF_MAX_FILES) && (file[fd].fname) ); } /** * Return wall_time in seconds as cheaply and as accurately as possible */ static double wall_time(void) { #ifdef EAF_STATS static int firstcall = 1; static unsigned firstsec, firstusec; double low, high; struct timeval tp; struct timezone tzp; if (firstcall) { (void) gettimeofday(&tp,&tzp); firstusec = tp.tv_usec; firstsec = tp.tv_sec; firstcall = 0; } (void) gettimeofday(&tp,&tzp); low = (double) (tp.tv_usec>>1) - (double) (firstusec>>1); high = (double) (tp.tv_sec - firstsec); return high + 1.0e-6*(low+low); #else /* EAF_STATS */ return 0.0; #endif /* EAF_STATS */ } /** * Open the named file returning the EAF file descriptor in fd. * Return 0 on success, non-zero on failure */ int EAF_Open(const char *fname, int type, int *fd) { int i=0, j=0, found=0; char *ptr; long handle, index; #ifdef CRAY_XT int myid; # include #endif while ((i0) { found=1; break; } } if(type > 0) { /* check if this file aka MA region labeled by fname is already open with size >=0*/ #ifdef DEBUG printf(" JJJ %d III %d fname %s filejfname %s found %d \n", j, i, fname, file[j].fname, found); #endif if(found == 0 ) { /* if arg gt 1M then use remainder as size */ /* we grab 3/4 of avail mem */ if(type > 1000000) { file[i].size=type-1000000; }else{ file[i].size=MA_inquire_avail(MT_CHAR)*8/10; } if (!MA_alloc_get(MT_CHAR, file[i].size, fname, &handle, &index)) return EAF_ERR_OPEN; /* MA hack: we pass type = sizeof MA alloc in megabytes */ MA_get_pointer(handle, &ptr); if (!(file[i].fname = strdup(fname))) return EAF_ERR_MEMORY; file[i].pointer=ptr; file[i].handle=handle; file[i].openma=1; }else{ #ifdef DEBUG printf(" found old fileMA %d size %ld \n", j, file[j].size); #endif /* need check if new size is <= old size*/ i=j; file[i].openma=1; } type=0; #ifdef DEBUG printf(" size %ld ptr %p \n", file[i].size, file[i].pointer); #endif }else{ if (!(file[i].fname = strdup(fname))) return EAF_ERR_MEMORY; if(type > 0) type = EAF_RW; #ifdef DEBUG printf(" opening regular %d eaf %s \n", i, fname); #endif if (!(file[i].elio_fd = elio_open(fname, type, ELIO_PRIVATE))) { #ifdef CRAY_XT MPI_Comm_rank(MPI_COMM_WORLD,&myid); /* printf(" %d sleeping for %d usec \n", myid, (myid+1)/4); */ usleep((myid+1)/4); if (!(file[i].elio_fd = elio_open(fname, type, ELIO_PRIVATE))) { #endif free(file[i].fname); file[i].fname = 0; return ELIO_PENDING_ERR; #ifdef CRAY_XT } #endif } } file[i].nwait = file[i].nread = file[i].nwrite = file[i].naread = file[i].nawrite = 0; file[i].nb_read = file[i].nb_write = file[i].nb_aread = file[i].nb_awrite = file[i].t_read = file[i].t_write = file[i].t_wait = 0.0; file[i].type = type; *fd = i; return EAF_OK; } /** * Close the EAF file and return 0 on success, non-zero on failure */ int EAF_Close(int fd) { if (!valid_fd(fd)) return EAF_ERR_INVALID_FD; if (file[fd].size > 0) { #ifdef DEBUG printf(" maclosing %d %s \n", fd, file[fd].fname); #endif file[fd].openma=0; return 0; }else{ #ifdef DEBUG printf(" closing regular file %s fd %d \n", file[fd].fname, fd); #endif free(file[fd].fname); file[fd].fname = 0; return elio_close(file[fd].elio_fd); } } /** * Write the buffer to the file at the specified offset. * Return 0 on success, non-zero on failure */ int EAF_Write(int fd, eaf_off_t offset, const void *buf, size_t bytes) { double start = wall_time(); Size_t rc; if (!valid_fd(fd)) return EAF_ERR_INVALID_FD; if (file[fd].size > 0) { if((offset+bytes)>file[fd].size){ #if 1 printf("eaf_write failure: increase MA stack memory \n "); return EAF_ERR_WRITE; #else rc=0; printf("eaf_write: offset %ld larger than MA size %ld ptr %p \n", (long)(offset+bytes), file[fd].size, file[fd].pointer); rc=eaf_flushbuf(fd, offset, buf, bytes); printf("eaf_write: from flushbug rc %d bytes %d\n ", rc, bytes); #endif }else{ memcpy(((char*)file[fd].pointer)+(long)offset, buf, bytes); rc=bytes; } }else{ rc = elio_write(file[fd].elio_fd, (Off_t) offset, buf, (Size_t) bytes); } if (rc != ((Size_t)bytes)){ printf("eaf_write: rc ne bytes %ld bytes %ld\n ", rc, (long)bytes); if(rc < 0) return((int)rc); /* rc<0 means ELIO detected error */ else return EAF_ERR_WRITE; }else { file[fd].nwrite++; file[fd].nb_write += bytes; file[fd].t_write += wall_time() - start; return EAF_OK; } } /** * Initiate an asynchronous write of the buffer to the file at the * specified offset. Return in *req_id the ID of the request for * subsequent use in EAF_Wait/probe. The buffer may not be reused until * the operation has completed. * Return 0 on success, non-zero on failure */ int EAF_Awrite( int fd, eaf_off_t offset, const void *buf, size_t bytes, int *req_id) { double start = wall_time(); io_request_t req; int rc; if (!valid_fd(fd)) return EAF_ERR_INVALID_FD; if (file[fd].size > 0) { if(offset>file[fd].size){ rc=0; printf("eaf_awrite: offset %f larger than MA size %ld \n", offset, file[fd].size); return EAF_ERR_WRITE; }else{ memcpy(((char*)file[fd].pointer)+(long)offset, buf, bytes); rc=bytes; } }else{ rc = elio_awrite(file[fd].elio_fd, (Off_t)offset, buf, (Size_t)bytes, &req); } if(!rc){ *req_id = req; file[fd].nawrite++; file[fd].nb_awrite += bytes; } file[fd].t_awrite += wall_time() - start; return rc; } /** * Read the buffer from the specified offset in the file. * Return 0 on success, non-zero on failure */ int EAF_Read(int fd, eaf_off_t offset, void *buf, size_t bytes) { double start = wall_time(); Size_t rc; if (!valid_fd(fd)) return EAF_ERR_INVALID_FD; if (file[fd].size > 0) { if(offset>file[fd].size){ rc=0; printf("eaf_read: offset %f larger than MA size %ld \n", offset, file[fd].size); }else{ memcpy(buf, ((char*)file[fd].pointer)+(long)offset, bytes); rc=bytes; } }else{ rc = elio_read(file[fd].elio_fd, (Off_t) offset, buf, (Size_t) bytes); } if (rc != ((Size_t)bytes)){ if(rc < 0) return((int)rc); /* rc<0 means ELIO detected error */ else return EAF_ERR_READ; } else { file[fd].nread++; file[fd].nb_read += bytes; file[fd].t_read += wall_time() - start; return EAF_OK; } } /** * Initiate an asynchronous read of the buffer from the file at the * specified offset. Return in *req_id the ID of the request for * subsequent use in EAF_Wait/probe. The buffer may not be reused until * the operation has completed. * Return 0 on success, non-zero on failure */ int EAF_Aread(int fd, eaf_off_t offset, void *buf, size_t bytes, int *req_id) { double start = wall_time(); io_request_t req; int rc; if (!valid_fd(fd)) return EAF_ERR_INVALID_FD; if (file[fd].size > 0) { if(offset>file[fd].size){ rc=0; printf("eaf_aread: offset %f larger than MA size %ld \n", offset, file[fd].size); return EAF_ERR_READ; }else{ memcpy(file[fd].pointer, buf, bytes); rc=0; } }else{ rc = elio_aread(file[fd].elio_fd, (Off_t) offset, buf, (Size_t)bytes, &req); } if(!rc){ *req_id = req; file[fd].naread++; file[fd].nb_aread += bytes; } file[fd].t_aread += wall_time() - start; return rc; } /** * Wait for the I/O operation referred to by req_id to complete. * Return 0 on success, non-zero on failure */ int EAF_Wait(int fd, int req_id) { double start = wall_time(); int code; io_request_t req = req_id; if (file[fd].size > 0) { /* got nothin' to do */ }else{ code = elio_wait(&req); } file[fd].t_wait += wall_time() - start; file[fd].nwait++; return code; } /** * status returns 0 if the I/O operation reffered to by req_id * is complete, 1 otherwise. * Return 0 on success, non-zero on failure. */ int EAF_Probe(int req_id, int *status) { io_request_t req = req_id; int rc; #if 0 if (file[fd].size > 0) { /* got nothin' to do */ rc=0; }else{ rc = elio_probe(&req, status); } #else rc=0; #endif if(!rc) *status = !(*status == ELIO_DONE); return rc; } /** * Delete the named file. If the delete succeeds, or the file * does not exist, return 0. Otherwise return non-zero. */ int EAF_Delete(const char *fname) { /* if (access(fname, F_OK) == 0) if (unlink(fname)) return EAF_ERR_UNLINK; return EAF_OK; */ int j, found=0; /* get fd from fname */ for (j=0; (j< EAF_MAX_FILES) && file[j].fname; j++){ if(strcmp(file[j].fname,fname) == 0 && file[j].size >0) { found=1; break; } } #ifdef DEBUG printf("eaf_delete: fname %s found %d \n", fname, found); if (found ==1) printf("eaf_delete: j %d filej.fname %s \n", j, file[j].fname); #endif if (found > 0) { if(!MA_free_heap(file[j].handle)) { MA_summarize_allocated_blocks(); return EAF_ERR_UNLINK; } else file[j].fname= NULL; return EAF_OK; }else{ /* Now that ELIO files can have extents must call its routine to delete files */ if (elio_delete(fname) == ELIO_OK) return EAF_OK; else return EAF_ERR_UNLINK; } } /** * Return in *avail_mb and *fstype the amount of free space (in Mb) * and filesystem type (currenly UFS, PFS, or PIOFS) of the filesystem * associated with path. Path should be either a filename, or a directory * name ending in a slash (/). fslen should specify the size of the * buffer pointed to by fstype. * * Return 0 on success, non-zero on failure. */ int EAF_Stat(const char *path, int *avail_mb, char *fstype, int fslen) { char dirname[PATH_MAX]; stat_t statinfo; int rc; if ((rc = elio_dirname(path, dirname, sizeof(dirname)))) return rc; if ((rc = elio_stat(dirname, &statinfo))) return rc; if (fslen < 8) return EAF_ERR_TOO_SHORT; *avail_mb = (int)(statinfo.avail>>10); if (statinfo.fs == ELIO_UFS) strcpy(fstype, "UFS"); else if (statinfo.fs == ELIO_PFS) strcpy(fstype, "PFS"); else if (statinfo.fs == ELIO_PIOFS) strcpy(fstype, "PIOFS"); else strcpy(fstype, "UNKNOWN"); return EAF_OK; } /** * Return 0 if code corresponds to EOF, or non-zero. */ int EAF_Eof(int code) { return !(code == EAF_ERR_EOF); } /** * Return in msg (assumed to hold up to 80 characters) * a description of the error code obtained from an EAF call, * or an empty string if there is no such code */ void EAF_Errmsg(int code, char *msg) { if (code == EAF_OK) (void) strcpy(msg, "OK"); else if (code == EAF_ERR_EOF) (void) strcpy(msg, "end of file"); else if (code == EAF_ERR_MAX_OPEN) (void) strcpy(msg, "too many open files"); else if (code == EAF_ERR_MEMORY) (void) strcpy(msg, "memory allocation failed"); else if (code == EAF_ERR_OPEN) (void) strcpy(msg, "failed opening file"); else if (code == EAF_ERR_CLOSE) (void) strcpy(msg, "failed closing file"); else if (code == EAF_ERR_INVALID_FD) (void) strcpy(msg, "invalid file descriptor"); else if (code == EAF_ERR_WRITE) (void) strcpy(msg, "write failed"); else if (code == EAF_ERR_AWRITE) (void) strcpy(msg, "asynchronous write failed"); else if (code == EAF_ERR_READ) (void) strcpy(msg, "read failed"); else if (code == EAF_ERR_AREAD) (void) strcpy(msg, "asynchronous read failed"); else if (code == EAF_ERR_WAIT) (void) strcpy(msg, "wait failed"); else if (code == EAF_ERR_PROBE) (void) strcpy(msg, "probe failed"); else if (code == EAF_ERR_UNLINK) (void) strcpy(msg, "unlink failed"); else if (code == EAF_ERR_UNIMPLEMENTED) (void) strcpy(msg, "unimplemented operation"); else if (code == EAF_ERR_STAT) (void) strcpy(msg, "stat failed"); else if (code == EAF_ERR_TOO_SHORT) (void) strcpy(msg, "an argument string/buffer is too short"); else if (code == EAF_ERR_TOO_LONG) (void) strcpy(msg, "an argument string/buffer is too long"); else if (code == EAF_ERR_NONINTEGER_OFFSET) (void) strcpy(msg, "offset is not an integer"); else if (code == EAF_ERR_TRUNCATE) (void) strcpy(msg, "truncate failed"); else elio_errmsg(code, msg); } /** * Truncate the file to the specified length. * Return 0 on success, non-zero otherwise. */ int EAF_Truncate(int fd, eaf_off_t length) { #ifdef CRAY int rc; #endif if (!valid_fd(fd)) return EAF_ERR_INVALID_FD; #ifdef CRAY /* ftruncate does not work with Cray FFIO, we need to implement it * as a sequence of generic close, truncate, open calls */ rc = elio_close(file[fd].elio_fd); if(rc) return rc; if(truncate(file[fd].fname, (off_t) length)) return EAF_ERR_TRUNCATE; if (!(file[fd].elio_fd = elio_open(file[fd].fname, file[fd].type, ELIO_PRIVATE))) { free(file[fd].fname); file[fd].fname = 0; return ELIO_PENDING_ERR; } #else if(elio_truncate(file[fd].elio_fd, (Off_t)length)) return EAF_ERR_TRUNCATE; #endif return EAF_OK; /* return elio_truncate(file[fd].elio_fd, (Off_t) length);*/ } /** * Return in length the length of the file. * Return 0 on success, nonzero on failure. */ int EAF_Length(int fd, eaf_off_t *length) { Off_t len; int rc; if (!valid_fd(fd)) return EAF_ERR_INVALID_FD; if (file[fd].size > 0) { // should be in MB??? if(file[fd].openma == 0) return EAF_ERR_INVALID_FD; len=file[fd].size; rc=0; }else{ rc = elio_length(file[fd].elio_fd, &len); } if(!rc) *length = (eaf_off_t) len; return rc; } /** * Print performance statistics for this file to standard output */ void EAF_Print_stats(int fd) { eaf_off_t len; double mbr, mbw, mbra, mbwa; if (!valid_fd(fd)) return; if (EAF_Length(fd, &len)) len = -1; printf("\n"); printf("------------------------------------------------------------\n"); #if HAVE_UNSIGNED_LONG_LONG_INT printf("EAF file %d: \"%s\" size=%llu bytes\n", fd, file[fd].fname, (unsigned long long) len); #else printf("EAF file %d: \"%s\" size=%lu bytes\n", fd, file[fd].fname, (unsigned long) len); #endif printf("------------------------------------------------------------\n"); printf(" write read awrite aread wait\n"); printf(" ----- ---- ------ ----- ----\n"); printf(" calls: %8d %8d %8d %8d %8d\n", file[fd].nwrite, file[fd].nread, file[fd].nawrite, file[fd].naread, file[fd].nwait); printf(" data(b): %.2e %.2e %.2e %.2e\n", file[fd].nb_write, file[fd].nb_read, file[fd].nb_awrite, file[fd].nb_aread); printf(" time(s): %.2e %.2e %.2e %.2e %.2e\n", file[fd].t_write, file[fd].t_read, file[fd].t_awrite, file[fd].t_aread, file[fd].t_wait); mbr = 0.0; mbw = 0.0; mbwa= 0.0; mbra= 0.0; if (file[fd].t_write > 0.0) mbw = file[fd].nb_write/(1e6*file[fd].t_write); if (file[fd].t_read > 0.0) mbr = file[fd].nb_read/(1e6*file[fd].t_read); if ((file[fd].t_wait + file[fd].t_aread) > 0.0) mbra = 1e-6*file[fd].nb_aread / (file[fd].t_wait + file[fd].t_aread); if ((file[fd].t_wait + file[fd].t_awrite) > 0.0) mbwa = 1e-6*file[fd].nb_awrite / (file[fd].t_wait + file[fd].t_awrite); /* Note that wait time does not distinguish between read/write completion so that entire wait time is counted in computing effective speed for async read & write */ if (mbwa+mbra) { printf("rate(mb/s): %.2e %.2e %.2e* %.2e*\n", mbw, mbr, mbwa, mbra); printf("------------------------------------------------------------\n"); printf("* = Effective rate. Full wait time used for read and write.\n\n"); } else { printf("rate(mb/s): %.2e %.2e\n", mbw, mbr); printf("------------------------------------------------------------\n\n"); } fflush(stdout); } int eaf_flushbuf(int fd, eaf_off_t offset, const void *buf, size_t bytes) /* once we run out of MA memory, let's open a real eaf file, flush the whole MA allocation to the file, plus the last bytes */ { int rc, fd_new; long masize, mahandle; char *mapointer, *oldfname; double start = wall_time(); /* invalidate old FD but do not deallocate MA */ masize=file[fd].size; mahandle=file[fd].handle; mapointer=file[fd].pointer; oldfname = malloc((unsigned) (strlen(file[fd].fname))); strcpy(oldfname, file[fd].fname); file[fd].fname= NULL; rc=EAF_Open(oldfname, EAF_RW, &fd_new); (void) free(oldfname); if (rc !=0 ) { printf(" flushbuf: open failure \n"); return rc; } /* flush MA */ rc = elio_write(file[fd_new].elio_fd, 0., (char*)mapointer, (Size_t) masize); /* write last bytes */ rc = elio_write(file[fd_new].elio_fd, (Off_t) file[fd].size , buf, (Size_t) bytes); if (rc != bytes){ printf(" flushbuf: write failure \n"); if(rc < 0) return((int)rc); /* rc<0 means ELIO detected error */ else return EAF_ERR_WRITE; }else { file[fd_new].nwrite++; file[fd_new].nb_write += file[fd].size; file[fd_new].nwrite++; file[fd_new].nb_write += bytes; file[fd_new].t_write += wall_time() - start; } if(!MA_free_heap(mahandle)) { MA_summarize_allocated_blocks(); return EAF_ERR_UNLINK; } /* swap fd with fd_new, is this too little?? */ fd = fd_new; return rc; } ga-5-3/pario/eaf/test.F0000640005473000001440000002523011274466357013550 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif #define IO_TEST_SZ (1024*1024/8) #define IO_NUM_FILES 4 #define MAX_ITER 4 #define DMAP(x) dble(IO_TEST_SZ*((x-1)*eaf_util_szint())) #define MAX_FILE_SZ 48.0d9 #define BASE_NAME 'EAFfile' #ifdef HPIODIR # define FNAME HPIODIR//BASE_NAME #else # define FNAME BASE_NAME #endif program eaftest c c call test1 c call test2 c call test3 call test4 c print *,' ' print *,'All tests completed' end subroutine test2 implicit none #include "eaf.fh" c integer buf(IO_TEST_SZ, MAX_ITER), buf2(IO_TEST_SZ) character fname*200 integer fnum, iter integer i, nap real dummy integer fd(IO_NUM_FILES) integer buf_sz integer aio(IO_NUM_FILES, MAX_ITER) integer stat2 c buf_sz = (IO_TEST_SZ*eaf_util_szint()) c write(6,*) write(6,*) ' TEST 2 ... asynchronous read/write of multiple files' write(6,*) ' ----------------------------------------------------' write(6,*) c 10 format (A,'.', I1) c do fnum = 1, IO_NUM_FILES write (fname, 10) FNAME, fnum c call testerr(eaf_open(fname, eaf_rw, fd(fnum))) c print *,'testing EAF_AWrite', ' file= ',fname do iter = 1, MAX_ITER do i = 1, IO_TEST_SZ buf(i,iter) = i + fnum + (iter*10000) enddo call testerr(eaf_awrite(fd(fnum), $ DMAP(iter), $ buf(1,iter), buf_sz, aio(fnum, iter))) write(0,*) 'Submitted EAF_AWriteF fnum=', fnum, $ ' iter=',iter, ' aio=',aio(fnum, iter) enddo enddo do fnum = 1, IO_NUM_FILES do iter = 1, MAX_ITER write(0,*) 'Waiting to close fnum=', fnum, $ ' iter=',iter call testerr(eaf_wait(fd(fnum), aio(fnum, iter))) enddo call eaf_print_stats(fd(fnum)) call testerr(eaf_close(fd(fnum))) enddo c................................. print *,'testing EAF_ARead' do fnum = 1, IO_NUM_FILES write (fname, 10) FNAME, fnum call testerr(eaf_open(fname, eaf_r, fd(fnum))) do iter = 1, MAX_ITER do i = 1, IO_TEST_SZ buf(i,iter) = i + fnum + (iter*10000) enddo call testerr(eaf_aread(fd(fnum), $ DMAP(iter), $ buf2, buf_sz, $ aio(fnum,iter))) 1000 call testerr(eaf_probe(aio(fnum, iter), stat2)) write(0,999) stat2 999 format(i5,i8) if(stat2 .ne. 0) then do nap=1, 2000000 dummy = 2.0**2.0+nap enddo goto 1000 endif #ifndef __crayx1 call sleep(10) #endif write(0,*) 'Finished reading file=',fnum, $ ' fd=',fd(fnum), $ ' iter=',iter do i = 1, IO_TEST_SZ if(buf(i,iter) .ne. buf2(i)) then write(6,*) 'Bad read of file=',fnum, $ ' fd=',fd(fnum), $ ' iter=',iter,' offset=',i,' buf1=', $ buf(i,iter),' buf2=',buf2(i) stop 1 endif enddo enddo enddo c do fnum = 1, IO_NUM_FILES call eaf_print_stats(fd(fnum)) call testerr(eaf_close(fd(fnum))) write (fname, 10) FNAME, fnum call testerr(eaf_delete(fname)) enddo c end subroutine test1 implicit none #include "eaf.fh" integer buf(IO_TEST_SZ), buf2(IO_TEST_SZ) character fname*200 integer fnum, iter integer i integer fd(IO_NUM_FILES) integer buf_sz c buf_sz = (IO_TEST_SZ*eaf_util_szint()) c write(6,*) write(6,*) ' TEST 1 ... synchronous read/write of multiple files' write(6,*) ' ---------------------------------------------------' write(6,*) c do fnum = 1, IO_NUM_FILES write (fname, 10) FNAME, fnum 10 format (A,'.', I1) call testerr(eaf_open(fname, eaf_rw, fd(fnum))) print *, 'testing EAF_Write' do iter = 1, MAX_ITER do i = 1, IO_TEST_SZ buf(i) = i + fnum + (iter*10000) enddo call testerr(eaf_write(fd(fnum), $ DMAP(iter), $ buf(1), buf_sz)) enddo enddo c do fnum = 1, IO_NUM_FILES call eaf_print_stats(fd(fnum)) call testerr(eaf_close(fd(fnum))) enddo c c................................. c do fnum = 1, IO_NUM_FILES write (fname, 10) FNAME, fnum c call testerr(eaf_open(fname, eaf_r, fd(fnum))) c print *, 'testing EAF_Read' do iter = 1, MAX_ITER do i = 1, IO_TEST_SZ buf(i) = i + fnum + (iter*10000) enddo c call testerr(eaf_read(fd(fnum), $ DMAP(iter), $ buf2(1), buf_sz)) do i = 1, IO_TEST_SZ if(buf(i) .ne. buf2(i)) then write(6,*) 'Bad read of file=',fnum, $ ' iter=',iter,' offset=',i,' buf1=', $ buf(i),' buf2=',buf2(i) stop 1 endif enddo enddo enddo c do fnum = 1, IO_NUM_FILES call eaf_print_stats(fd(fnum)) call testerr(eaf_close(fd(fnum))) write (fname, 10) FNAME, fnum call testerr(eaf_delete(fname)) enddo c end subroutine testerr(code) implicit none #include "eaf.fh" integer code character*80 msg integer fstrlen external fstrlen c call eaf_errmsg(code, msg) write(6,*) ' code ', code, ' = ', msg(1:fstrlen(msg)) *** stop 1 c end integer function fstrlen(a) implicit none character*(*) a integer i intrinsic len c do i = len(a),1,-1 if (a(i:i) .ne. ' ') goto 10 enddo c 10 fstrlen = i c end subroutine test3 implicit none #include "eaf.fh" character fname*200 character*8 fstype integer avail, fd double precision length c write(6,*) write(6,*) ' TEST 3 ... misc. functions' write(6,*) ' --------------------------' write(6,*) c write (fname, 10) FNAME, 1 10 format (A,'.', I1) c call testerr(eaf_stat(fname, avail, fstype)) write(6,*) ' avail = ', avail, ' fstype = ', fstype c call testerr(eaf_open(fname, eaf_rw, fd)) call testerr(eaf_length(fd,length)) write(6,*) ' file length = ', length call testerr(eaf_truncate(fd,129.0d0)) call testerr(eaf_length(fd,length)) write(6,*) ' file length (should be 129) = ', length call testerr(eaf_close(fd)) c write(6,*) ' This delete should succeed' call testerr(eaf_delete(fname)) c call testerr(eaf_open(fname, eaf_rw, fd)) call testerr(eaf_length(fd,length)) write(6,*) ' should be zero file length = ', length call testerr(eaf_close(fd)) call testerr(eaf_delete(fname)) c end subroutine test4 implicit none #include "eaf.fh" character*200 fname character*255 fstype integer avail, fd, i, nwrite, ierr, iolen4, iolen, loop double precision length, offset, ofw double precision buf(IO_TEST_SZ) c write(6,*) write(6,*) ' TEST 4 ... fill the file system ' write(6,*) ' ------------------------------- ' write(6,*) c fname = ' ' write (fname, 10) FNAME, 1 10 format (A,'.', I1) c call testerr(eaf_stat(fname, avail, fstype)) write(6,*) ' avail = ', avail, ' fstype = ', fstype avail = 0.95*avail length = 1024*1024.0d0*avail call testerr(eaf_open(fname, eaf_rw, fd)) if(length.gt. MAX_FILE_SZ) then length = MAX_FILE_SZ write(6,*) ' trying max file length ', length,' bytes' else write(6,*) ' 95% available length ', length,' bytes' endif c ofw = 0 do offset = 0, length, (IO_TEST_SZ)*8 nwrite = nint(min(length-offset+1.0d0,(IO_TEST_SZ)*8.0d0)) call util_dfill(nwrite/8, offset, buf, 1) if (ofw .le. offset) then write(6,*) ' writing at ',offset, nwrite ofw = ofw + 100000000.0d0 endif ierr = eaf_write(fd, offset, buf, nwrite) if (ierr .ne. 0) then call testerr(ierr) call ga_error('bad write',ierr) endif enddo c call eaf_print_stats(fd) c ofw = 0 do offset = 0, length, (IO_TEST_SZ)*8 nwrite = nint(min(length-offset+1.0d0,(IO_TEST_SZ)*8.0d0)) if (ofw .le. offset) then write(6,*) ' reading at ', offset, nwrite ofw = ofw + 100000000.0d0 endif ierr = eaf_read(fd, offset, buf, nwrite) if (ierr .ne. 0) then call testerr(ierr) call ga_error('bad read',ierr) endif do i = 1, nwrite/8 if (buf(i).ne.offset) call ga_error('bad ', i) enddo enddo c call eaf_print_stats(fd) c call testerr(eaf_close(fd)) c c random read and write c buf(1) = eaf_util_random(35321) do iolen4 = 0,2 iolen = 8*1024 * (4**iolen4) ! 1024,4096,16384 doubles write(6,*) ' Random write: len=',iolen call testerr(eaf_open(fname, eaf_rw, fd)) do loop = 1, int(length/iolen)/4 offset = aint((length-iolen)*eaf_util_random(0)) ierr = eaf_write(fd, offset, buf, iolen) if (ierr .ne. 0) then call testerr(ierr) call ga_error('bad write',ierr) endif enddo call eaf_print_stats(fd) write(6,*) ' Random read : len=',iolen call testerr(eaf_open(fname, eaf_rw, fd)) do loop = 1, int(length/iolen)/4 offset = aint((length-iolen)*eaf_util_random(0)) ierr = eaf_read(fd, offset, buf, iolen) if (ierr .ne. 0) then call testerr(ierr) call ga_error('bad write',ierr) endif enddo call eaf_print_stats(fd) call testerr(eaf_close(fd)) enddo c call testerr(eaf_delete(fname)) c end subroutine util_dfill(n,val,a,ia) implicit none double precision a(*), val integer n, ia, i c c initialise double precision array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif end ga-5-3/pario/eaf/eaf_f2c.c0000640005473000001440000001262411502432445014077 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_MATH_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_STDLIB_H # include #endif #include "eaf.h" #include "eafP.h" #include "typesf2c.h" #include "farg.h" #if defined(CRAY) && defined(__crayx1) #undef CRAY #endif #define eaf_aread_ F77_FUNC_(eaf_aread,EAF_AREAD) #define eaf_awrite_ F77_FUNC_(eaf_awrite,EAF_AWRITE) #define eaf_close_ F77_FUNC_(eaf_close,EAF_CLOSE) #define eaf_delete_ F77_FUNC_(eaf_delete,EAF_DELETE) #define eaf_eof_ F77_FUNC_(eaf_eof,EAF_EOF) #define eaf_errmsg_ F77_FUNC_(eaf_errmsg,EAF_ERRMSG) #define eaf_error_ F77_FUNC_(eaf_error,EAF_ERROR) #define eaf_length_ F77_FUNC_(eaf_length,EAF_LENGTH) #define eaf_open_ F77_FUNC_(eaf_open,EAF_OPEN) #define eaf_print_stats_ F77_FUNC_(eaf_print_stats,EAF_PRINT_STATS) #define eaf_probe_ F77_FUNC_(eaf_probe,EAF_PROBE) #define eaf_read_ F77_FUNC_(eaf_read,EAF_READ) #define eaf_stat_ F77_FUNC_(eaf_stat,EAF_STAT) #define eaf_truncate_ F77_FUNC_(eaf_truncate,EAF_TRUNCATE) #define eaf_util_random_ F77_FUNC_(eaf_util_random,EAF_UTIL_RANDOM) #define eaf_util_szint_ F77_FUNC_(eaf_util_szint,EAF_UTIL_SZINT) #define eaf_wait_ F77_FUNC_(eaf_wait,EAF_WAIT) #define eaf_write_ F77_FUNC_(eaf_write,EAF_WRITE) static int valid_offset(double offset) { return ((offset - ((double) ((eaf_off_t) offset))) == 0.0); } Integer FATR eaf_write_(Integer *fd, double *offset, const void *buf, Integer *bytes) { if (!valid_offset(*offset)) return EAF_ERR_NONINTEGER_OFFSET; return (Integer) EAF_Write((int) *fd, (eaf_off_t) *offset, buf, (size_t) *bytes); } Integer FATR eaf_awrite_(Integer *fd, double *offset, const void *buf, Integer *bytes, Integer *req_id) { int req, status; if (!valid_offset(*offset)) return EAF_ERR_NONINTEGER_OFFSET; status = EAF_Awrite((int) *fd, (eaf_off_t) *offset, buf, (size_t) *bytes, &req); *req_id = (Integer) req; return (Integer) status; } Integer FATR eaf_read_(Integer *fd, double *offset, void *buf, Integer *bytes) { if (!valid_offset(*offset)) return EAF_ERR_NONINTEGER_OFFSET; return (Integer) EAF_Read((int) *fd, (eaf_off_t) *offset, buf, (size_t) *bytes); } Integer FATR eaf_aread_(Integer *fd, double *offset, void *buf, Integer *bytes, Integer *req_id) { int req, status; if (!valid_offset(*offset)) return EAF_ERR_NONINTEGER_OFFSET; status = EAF_Aread((int) *fd, (eaf_off_t) *offset, buf, (size_t) *bytes, &req); *req_id = (Integer) req; return (Integer) status; } Integer FATR eaf_wait_(Integer *fd, Integer *id) { return (Integer) EAF_Wait((int) *fd, (int) *id); } void FATR eaf_print_stats_(Integer *fd) { EAF_Print_stats((int) *fd); } Integer FATR eaf_truncate_(Integer *fd, double *length) { return (Integer) EAF_Truncate((int) *fd, (eaf_off_t) *length); } Integer FATR eaf_probe_(Integer *id, Integer *status) { int s, code; code = EAF_Probe((int) *id, &s); *status = (Integer) s; return (Integer) code; } Integer FATR eaf_close_(Integer *fd) { return (Integer) EAF_Close((int) *fd); } Integer FATR eaf_length_(Integer *fd, double *length) { eaf_off_t len; int code; code = EAF_Length((int) *fd, &len); if (!code) *length = (double) len; return code; } logical eaf_eof_(Integer *code) { return (logical) EAF_Eof((int) *code); } Integer FATR eaf_open_( #ifdef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *fname, Integer *type, Integer *fd, int flen #else char *fname, int flen, Integer *type, Integer *fd #endif ) { char buf[1024]; int code, tmp; ga_f2cstring(fname, flen, buf, sizeof(buf)); /* return (Integer) EAF_ERR_TOO_LONG; TODO errcheck? */ code = EAF_Open(buf, (int) *type, &tmp); *fd = (Integer) tmp; return (Integer)code; } Integer FATR eaf_delete_(char *fname, int flen) { char buf[1024]; ga_f2cstring(fname, flen, buf, sizeof(buf)); /* return (Integer) EAF_ERR_TOO_LONG; TODO errcheck? */ return (Integer) EAF_Delete(buf); } Integer FATR eaf_stat_( #ifdef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *path, Integer *avail_kb, char *fstype, int pathlen, int fslen #else char *path, int pathlen, Integer *avail_kb, char *fstype, int fslen #endif ) { char pbuf[1024]; char fbuf[32]; int code, kb; ga_f2cstring(path, pathlen, pbuf, sizeof(pbuf)); /* return (Integer) EAF_ERR_TOO_LONG; TODO errcheck? */ code = EAF_Stat(pbuf, &kb, fbuf, sizeof(fbuf)); if (!code) { ga_c2fstring(fbuf, fstype, fslen); /* return (Integer) EAF_ERR_TOO_SHORT; TODO errcheck? */ *avail_kb = (double) kb; } return code; } void FATR eaf_errmsg_(Integer *code, char *msg, int msglen) { char buf[80]; EAF_Errmsg((int) *code, buf); (void) ga_c2fstring(buf, msg, msglen); } double FATR eaf_util_random_(Integer* seed) { #ifdef NEC if(*seed) srand((unsigned) *seed); return ((double) rand())*4.6566128752458e-10; #else if(*seed) srandom((unsigned) *seed); return ((double) random())*4.6566128752458e-10; #endif } Integer FATR eaf_util_szint_() { return (Integer)sizeof(Integer); } ga-5-3/pario/eaf/eafP.h0000640005473000001440000000161606231234750013473 0ustar d3n000users#ifndef EAFP_H #define EAFP_H /* These macros are for EAF internal use only. EOF_OK must be 0. */ #define EAF_OK 0 #define EAF_ERR_EOF -10001 #define EAF_ERR_MAX_OPEN -10002 #define EAF_ERR_MEMORY -10003 #define EAF_ERR_OPEN -10004 #define EAF_ERR_CLOSE -10005 #define EAF_ERR_INVALID_FD -10006 #define EAF_ERR_WRITE -10007 #define EAF_ERR_AWRITE -10008 #define EAF_ERR_READ -10009 #define EAF_ERR_AREAD -10010 #define EAF_ERR_WAIT -10011 #define EAF_ERR_PROBE -10012 #define EAF_ERR_UNLINK -10013 #define EAF_ERR_UNIMPLEMENTED -10014 #define EAF_ERR_STAT -10015 #define EAF_ERR_TOO_SHORT -10016 #define EAF_ERR_TOO_LONG -10017 #define EAF_ERR_NONINTEGER_OFFSET -10018 #define EAF_ERR_TRUNCATE -10019 #define EAF_ERR_LENGTH -10020 #endif ga-5-3/pario/eaf/eaf.h0000640005473000001440000000213411314441742013346 0ustar d3n000users#ifndef EAF_H #define EAH_H #if 0 /* This section used by both C and Fortran */ #endif #define EAF_RW -1 #define EAF_W -2 #define EAF_R -3 #ifndef EAF_FORTRAN /* This section used by only C */ /* This to ensure size_t is defined */ #include #include typedef double eaf_off_t; int EAF_Aread(int fd, eaf_off_t offset, void *buf, size_t bytes, int *req_id); int EAF_Awrite(int fd, eaf_off_t offset, const void *buf, size_t bytes, int *req_id); int EAF_Close(int fd); int EAF_Delete(const char *fname); int EAF_Eof(int code); void EAF_Errmsg(int code, char *msg); int EAF_Length(int fd, eaf_off_t *length); int EAF_Length(int fd, eaf_off_t *length); int EAF_Open(const char *fname, int type, int *fd); void EAF_Print_stats(int fd); int EAF_Probe(int id, int *status); int EAF_Read(int fd, eaf_off_t offset, void *buf, size_t bytes); int EAF_Stat(const char *path, int *avail_kb, char *fstype, int fslen); int EAF_Truncate(int fd, eaf_off_t length); int EAF_Wait(int fd, int id); int EAF_Write(int fd, eaf_off_t offset, const void *buf, size_t bytes); #endif #endif ga-5-3/pario/eaf/eaf.fh0000640005473000001440000000123107025300452013505 0ustar d3n000users#ifndef EAF_FORTRAN #define EAF_FORTRAN #endif #include "eaf.h" integer eaf_write, eaf_awrite, eaf_read, eaf_aread integer eaf_wait, eaf_probe, eaf_close, eaf_open integer eaf_delete, eaf_stat, eaf_length, eaf_truncate logical eaf_eof integer eaf_util_szint double precision eaf_util_random external eaf_write, eaf_awrite, eaf_read, eaf_aread external eaf_wait, eaf_probe, eaf_close, eaf_open external eaf_delete, eaf_stat, eaf_length, eaf_truncate external eaf_eof external eaf_util_random,eaf_util_szint integer eaf_rw, eaf_r, eaf_w parameter (eaf_rw=EAF_RW, eaf_r=EAF_R, eaf_w=EAF_W) ga-5-3/pario/eaf/eaf.doc0000640005473000001440000001020206222340740013655 0ustar d3n000usersHere is the Fortran interface. Below this is the C interface with a full description of each parameter. FORTRAN interface ----------------- All functions return an integer error code with the value zero implying success, non-zero implying some error condition. Offsets are doubles and an offset with a fractional component generates an error. The include file "eaf.fh" defines all of the functions along with EAF_R, EAF_W and EAF_rw. integer function eaf_write(fd, offset, buf, bytes) integer function eaf_read (fd, offset, buf, bytes) integer function eaf_awrite(fd, offset, buf, bytes, req_id) integer function eaf_aread (fd, offset, buf, bytes, req_id) integer function eaf_wait(fd, req_id) integer function eaf_probe(req_id, status) integer function eaf_open(fname, type, fd) [type can be one of EAF_R, EAF_RW, and EAF_W] integer function eaf_close(fd) integer function eaf_delete(fname) integer function eaf_length(fd) integer function eaf_truncate(fd, offset) logical function eaf_eof(ierr) Returns true if ierr corresponds to EOF subroutine eaf_errmsg(ierr,message) Returns a string interpretation of the error code, or an empty string (Fortran all blanks, C null first character) if the error code is not recognized. integer function eaf_stat(fname, avail, fstype) subroutine eaf_print_stats(fd) C interface ----------- int eaf_open(const char *fname, int type, int *fd) /* Open the named file returning the EAF file descriptor in fd. Return 0 on success, non-zero on failure */ void eaf_print_stats(int fd) /* Print performance statistics for this file to standard output */ int eaf_close(int fd) /* Close the EAF file and return 0 on success, non-zero on failure */ int eaf_write(int fd, eaf_off_t offset, const void *buf, size_t bytes) /* Write the buffer to the file at the specified offset. Return 0 on success, non-zero on failure */ int eaf_awrite(int fd, eaf_off_t offset, const void *buf, size_t bytes, int *req_id) /* Initiate an asynchronous write of the buffer to the file at the specified offset. Return in *req_id the ID of the request for subsequent use in eaf_wait/probe. The buffer may not be reused until the operation has completed. Return 0 on success, non-zero on failure */ int eaf_read(int fd, eaf_off_t offset, void *buf, size_t bytes) /* Read the buffer from the specified offset in the file. Return 0 on success, non-zero on failure */ int eaf_aread(int fd, eaf_off_t offset, void *buf, size_t bytes, int *req_id) /* Initiate an asynchronous read of the buffer from the file at the specified offset. Return in *req_id the ID of the request for subsequent use in eaf_wait/probe. The buffer may not be reused until the operation has completed. Return 0 on success, non-zero on failure */ int eaf_wait(int fd, int req_id) /* Wait for the I/O operation referred to by req_id to complete. Return 0 on success, non-zero on failure */ int eaf_probe(int req_id, int *status) /* *status returns 0 if the I/O operation reffered to by req_id is complete, 1 otherwise. Return 0 on success, non-zero on failure. */ int eaf_delete(const char *fname) /* Delete the named file. If the delete succeeds, or the file does not exist, return 0. Otherwise return non-zero. */ int eaf_length(int fd, eaf_off_t *length) /* Return in *length the length of the given file. Reutrn 0 on success, non-zero on failure */ int eaf_stat(const char *path, int *avail_kb, char *fstype, int fslen) /* Return in *avail_kb and *fstype the amount of free space (in Kb) and filesystem type (currenly UFS, PFS, or PIOFS) of the filesystem associated with path. Path should be either a filename, or a directory name ending in a slash (/). fslen should specify the size of the buffer pointed to by fstype. Return 0 on success, non-zero on failure. */ int eaf_eof(int code) /* Return 0 if code corresponds to EOF, or non-zero. */ void eaf_errmsg(int code, char *msg) /* Return in msg (assumed to hold up to 80 characters) a description of the error code obtained from an EAF call, or an empty string if there is no such code */ ga-5-3/pario/pabody0000750005473000001440000000455006173210375013121 0ustar d3n000users#!/usr/local/bin/perl print "Enter ascii SDDF file: "; #$file = ; $file = "pab.ascii"; open(infile,"$file") || (chop($file) && (die "can't open \"$file\": $!\n")); print "Enter output Upshot file: "; #$file = ; $file = "pab.out"; open(outfile,">$file"); print "\n"; $generic_trace_first = 0; $open_flag = 0; $close_flag = 0; $write_flag = 0; $first{'"Open"'} = 0; $first{'"Close"'} = 0; $first{'"Write"'} = 0; $first{'"Read"'} = 0; $first{'"Seek"'} = 0; while () { if (/"Generic Interval"/) { if ($generic_trace_first == 0) { $generic_trace_first = 1; print "Skipping first: ", $0, "\n"; next; }; $junk = ; $junk = ; $junk = ; $useful = ; $useful =~ /\}, (.+), (.+), (.+), (.+),/; $useful =~ /\}, ([0-9].[0-9]+), ([0-9]+), ([0-9].[0-9]+),/; # print $1," | ", $2," | ", $3," | ", $4," |\n"; $endtime = $1; $eventid = $2; $procid = $3; $duration = $4; $starttime = $endtime - $duration; $starttime = $starttime * 1000000.0; $starttime = int($starttime); # print $starttime, "\n"; $endtime = $endtime * 1000000.0; $endtime = int($endtime); # $endevent = $eventid + 1000; $endevent = $eventid + 1; print outfile $eventid, " ", $procid, " ", 0, " ", 0, " ", 0, " ", $starttime, "\n"; print outfile $endevent, " ", $procid, " ", 0, " ", 0, " ", 0, " ", $endtime, "\n"; } if (/"Open"/ || /"Close"/ || /"Write"/ || /"Read"/ || /"Seek"/) { if( $first_time{ $_ } == 0 ) { $first_time{ $_ } = 1; next; }; $junk = ; $junk = ; $junk = ; $useful = ; $useful =~ /\}, (.+), (\d+), (\d+), (.+), (\d+)/; # print $1, " ", $2, " ", $3, " ", $4, "\n"; $starttime = $1; $eventid = $2; $procid = $3; $duration = $4; $endtime = $starttime + $duration; $starttime = $starttime * 1000000.0; $starttime = int($starttime); # print $starttime, "\n"; $endtime = $endtime * 1000000.0; $endtime = int($endtime); $endevent = $eventid + 1000; print outfile $eventid, " ", $procid, " ", 0, " ", 0, " ", 0, " ", $starttime, "\n"; print outfile $endevent, " ", $procid, " ", 0, " ", 0, " ", 0, " ", $endtime, "\n"; } } close outfile; close infile; ga-5-3/pario/makefile.h0000640005473000001440000000466412030367076013652 0ustar d3n000users OSNAME = $(shell uname | awk '{ print $1}') #under AIX, AIX52 is defined to use POSIX API in AIX 5.2.0.0 or greater ifeq ($(OSNAME),AIX) LIB_DEFINES += $(shell /usr/bin/oslevel | awk -F. \ '{ if ($$1 > 5 || ($$1 == 5 && $$2 > 1))\ print "-DAIX52" }') #lsdev -C -l aio0 #aio0 Defined Asynchronous I/O (Legacy) ifdef USE_OLDAIO USE_OLDAIO=Y else USE_OLDAIO= $(shell /usr/sbin/lsdev -C -l aio0 2>&1|grep Lega|awk ' /Legacy/ {print "Y"}') endif ifeq ($(USE_OLDAIO),Y) LIB_DEFINES += -D_AIO_AIX_SOURCE endif endif #under AIX, there can be problems with AIO and large files ifdef LARGE_FILES ifeq ($(OSNAME),AIX) LIB_DEFINES += $(shell /usr/bin/oslevel | awk -F. \ '{ if ($$1 > 4 || ($$1 == 4 && $$2 > 1))\ print "-D_LARGE_FILES -D_LARGE_FILE_API" }') # asynchronous I/O with large files supported starting with 4.2.1 # However, there is a bug in IBM libs on PNNL system that prevents us # from using AIO under 4.2.1 :-) # AIO_LARGE_FILES = $(shell /usr/bin/oslevel | awk -F. \ '{ if ($$1 == 4 && $$2 == 2 && $$3 <= 0 ) \ print "NO"}') endif ifeq ($(TARGET), SOLARIS) LIB_DEFINES += -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 CC += $(shell getconf LFS_CFLAGS) endif # # LINUX: kernel 2.4 is needed # ifeq ($(TARGET), LINUX) LIB_DEFINES += -D_LARGEFILE64_SOURCE LIB_DEFINES += $(shell getconf LFS_CFLAGS) endif ifeq ($(TARGET), BGL) LIB_DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE endif ifeq ($(TARGET), BGP) LIB_DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE endif ifeq ($(TARGET), BGQ) LIB_DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE endif # # HP targets tested on HPUX 11.0 # ifeq ($(TARGET), HPUX) LIB_DEFINES += -D_LARGEFILE64_SOURCE LIB_DEFINES += $(shell getconf XBS5_ILP32_OFFBIG_CFLAGS) endif ifeq ($(TARGET), HPUX64) LIB_DEFINES += -D_LARGEFILE64_SOURCE LIB_DEFINES += $(shell getconf XBS5_LP64_OFF64_CFLAGS) endif LIB_DEFINES += -DLARGE_FILES endif ifdef LIB_TARGETS # HPIODIR is used as a filename prefix in test programs ifdef HPIODIR LIB_DEFINES += -DHPIODIR=\'$(HPIODIR)/\' endif ifeq ($(TARGET), DECOSF) LOC_LIBS += -laio -lpthreads endif endif ifdef USE_LINUXAIO LIB_DEFINES += -DLINUXAIO COMM_LIBS += -lrt endif ga-5-3/pario/pablo2upshot0000750005473000001440000000302411652267425014266 0ustar d3n000users#!/bin/csh -f /home/aydt/pablo/bin/SDDFconverter << CONV_END Pablo.bin a pab.ascii n CONV_END ./pabody /bin/rm -f pab.sort pab.upshot sort -n +5 pab.out > pab.sort set nevents=`wc pab.sort | awk '{print $1}'` set tfirst=`head -1 pab.sort | awk '{print $6}'` set tlast=`tail -1 pab.sort | awk '{print $6}'` cat > pab.upshot << END_HEADER -1 0 0 0 0 0 sddf -2 0 0 $nevents 0 0 -3 0 0 1 0 0 -4 0 0 1 0 0 -5 0 0 10 0 0 -6 0 0 0 0 $tfirst -7 0 0 0 0 $tlast -8 0 0 1 0 0 -11 0 0 0 0 4294967295 -13 0 700001 701001 0 0 blue: Native Open -13 0 700003 701003 0 0 blue: Native fopen -13 0 700005 701005 0 0 red: Native close -13 0 700007 701007 0 0 red: Native fclose -13 0 700009 701009 0 0 green: Native read -13 0 700011 701011 0 0 green: Native fread -13 0 700013 701013 0 0 yellow: Native lseek -13 0 700015 701015 0 0 yellow: Native fseek -13 0 700017 701017 0 0 magenta: Native write -13 0 700019 701019 0 0 magenta: Native fwrite -13 0 710000 711000 0 0 chocolate1: elio_write -13 0 710001 711001 0 0 chocolate4: elio_awrite -13 0 710002 711002 0 0 brown1: elio_read -13 0 710003 711003 0 0 brown4: elio_aread -13 0 710004 711004 0 0 LightSalmon1: elio_probe -13 0 710005 711005 0 0 LightSalmon4: elio_wait -13 0 710006 711006 0 0 coral1: elio_stat -13 0 710007 711007 0 0 coral4: elio_open -13 0 710009 711009 0 0 DeepPink1: elio_close -13 0 710010 711010 0 0 DeepPink4: elio_set_cb -13 0 710011 711011 0 0 HotPink1: elio_delete -13 0 710012 711012 0 0 HotPink4: elio_init END_HEADER cat pab.sort >> pab.upshot #/bin/rm -f pab.sort pab.out pab.ascii ga-5-3/pario/dra/0000750005473000001440000000000012275260566012466 5ustar d3n000usersga-5-3/pario/dra/dra2arviz.c0000640005473000001440000000574111503767531014543 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #include "dra.h" #include "ga.h" #include "macommon.h" #include "macdecls.h" #include "mp3.h" #define ERROR(msg,code){printf("ERROR:%s\n",(msg)); fflush(stdout); exit(1);} #define BUFSIZE 8000000 int main(int argc, char **argv) { int heap=400000, stack=400000; int me, nproc; int max_arrays=2; double max_sz=1e8, max_disk=2e8, max_mem=1e6; int d_a, mode=DRA_R; int g_a,rows,cols; char name[1024], fname[1024]; logical transp=0; int reqid; int i,ilo,ihi,jlo,jhi,type,ndim,glo[2],ghi[2],gld[1],gdims[2]; dra_size_t dlo[2],dhi[2],ddims[2]; size_t size, nitems; void *ptr; if(argc!=6){ printf("Usage: dra2arviz \n"); printf(" dra_filename is the meta-file name for disk resident array\n"); printf(" [ilo:ihi, jlo:jhi] array section to read\n\n\n"); return(1); } MP_INIT(argc,argv); MP_MYID(&me); MP_PROCS(&nproc); heap /= nproc; stack /= nproc; if(! MA_init((Integer)MT_F_DBL, stack, heap)) GA_Error("MA_init failed",stack+heap); /* initialize memory allocator*/ GA_Initialize(); /* initialize GA */ if(nproc != 1)ERROR("Error: does not run in parallel",nproc); if(DRA_Init(max_arrays, max_sz, max_disk, max_mem)) ERROR("initialization failed",0); if(DRA_Open(argv[1], mode, &d_a)) ERROR("dra_open failed",0); ilo = atoi(argv[2]); ihi = atoi(argv[3]); jlo = atoi(argv[4]); jhi = atoi(argv[5]); dlo[0] = ilo; dlo[1] = jlo; dhi[0] = ihi; dhi[1] = jhi; rows = ihi - ilo +1; cols = jhi - jlo +1; glo[0] = 0; glo[1] = 0; ghi[0] = rows-1; ghi[1] = cols-1; gdims[0] = rows; gdims[1] = cols; if(NDRA_Inquire(d_a, &type, &ndim, ddims, name, fname)) ERROR("dra_inquire failed",0); switch (type) { case MT_F_INT: size = sizeof(Integer); break; case MT_F_DBL: size = sizeof(DoublePrecision); break; case MT_F_DCPL: size = sizeof(DoubleComplex); break; default: ERROR("type not supported",type); } g_a = NGA_Create(type, 2, gdims, "temp", NULL); if(NDRA_Read_section(transp, g_a, glo, ghi, d_a, dlo, dhi, &reqid)) ERROR("dra_read_section failed",0); if(DRA_Wait(reqid)) ERROR("dra_wait failed",0); NGA_Access(g_a, glo, ghi, &ptr, gld); if(gld[0] != rows) ERROR("ld != rows",gld[0]); fwrite("OK\n",1,3,stdout); nitems = (size_t)rows; /* write data by columns */ for(i=0; i= (b)) ? (a) : (b)) #define PARIO_MIN(a,b) (((a) <= (b)) ? (a) : (b)) /** * check if two patches are conforming (dimensions are divisible) */ logical dai_patches_conforming( Integer* ailo, Integer* aihi, Integer* ajlo, Integer* ajhi, Integer* bilo, Integer* bihi, Integer* bjlo, Integer* bjhi) { Integer mismatch; Integer adim1, bdim1, adim2, bdim2; adim1 = *aihi - *ailo +1; adim2 = *ajhi - *ajlo +1; bdim1 = *bihi - *bilo +1; bdim2 = *bjhi - *bjlo +1; mismatch = (adim1ndim) isconsistent = FALSE; /* check consistency of patch coordinates */ if (isconsistent) { for (i=0; ihi[i] < sadj->lo[i]) isconsistent = FALSE; } } /* check to see if there is an intersection */ if (isconsistent) { for (i=0; ilo[i]) isconsistent = FALSE; if (sadj->hi[i] < sref.lo[i]) isconsistent = FALSE; } } /* if there is an intersection then return it in sadj */ if (isconsistent) { for (i=0; ilo[i] = PARIO_MAX(sref.lo[i],sadj->lo[i]); sadj->hi[i] = PARIO_MIN(sref.hi[i],sadj->hi[i]); } } return (isconsistent); } ga-5-3/pario/dra/util.c0000640005473000001440000000115511476251130013577 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "ga.h" #include "typesf2c.h" /* Return the no. of bytes that n doubles occupy */ #define util_mdtob_ F77_FUNC_(util_mdtob,UTIL_MDTOB) Integer FATR util_mdtob_(Integer *n) { if (*n < 0) GA_Error("util_MDTOB_: negative argument",*n); return (Integer) (*n * sizeof(double)); } /* Return the no. of bytes that n ints=Integers occupy */ #define util_mitob_ F77_FUNC_(util_mitob,UTIL_MITOB) Integer FATR util_mitob_(Integer *n) { if (*n < 0) GA_Error("util_MITOB_: negative argument",*n); return (Integer) (*n * sizeof(Integer)); } ga-5-3/pario/dra/rate.c0000640005473000001440000002242511633461607013567 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #define FNAME "/scratch/da.try" #define FNAME_ALT "/tmp/da.try" #include "dra.h" #include "eaf.h" #include "ga.h" #include "macdecls.h" #include "mp3.h" #ifndef MAXDIM # define MAXDIM GA_MAX_DIM #endif #ifndef TRUE # define TRUE (Logical)1 #endif #ifndef FALSE # define FALSE (Logical)0 #endif /* If USER_CONFIG set to: * 0: Use default configuration * 1: Number of files is 1, number of I/O procs equals * the number of nodes * 2: Number of files and number of I/O procs equals * the number of nodes * 3: Number of files and number of I/O procs equals 1 * These configurations only apply if files are not located * on local scratch disk. For local scratch, system defaults * to 1 I/O proc per node and 1 file per node. Note that * USER_CONFIG=1 will only work if system has parallel I/O. * * Memory and Disk Usage: * The aggregate memory required to run this test is approximately * 2*SIZE**NDIM*sizeof(double) bytes. The amount of disk space * required is approximately NFACTOR**NDIM times this amount. */ #define USER_CONFIG 0 #define NDIM 3 #define SIZE 250 #define NFACTOR 7 /* #define NDIM 2 #define SIZE 4000 #define NFACTOR 3 #define NDIM 1 #define SIZE 12500000 #define NFACTOR 640 */ /*#define MAXDIM 7*/ /*#define TRUE (logical)1*/ /*#define FALSE (logical)0*/ #define MULTFILES 0 #ifdef SOLARIS # if MULTFILES # define USEMULTFILES 1 # endif #else # define USEMULTFILES 0 #endif #define IA 16807 #define IM 2147483647 #define AM (1.0/IM) #define IQ 127773 #define IR 2836 #define MASK 123459876 float ran0(long *idum) { long k; float ans; *idum ^= MASK; k=(*idum)/IQ; *idum = IA*(*idum-k*IQ)-IR*k; if (*idum < 0) *idum += IM; ans=AM*(*idum); *idum ^= MASK; return ans; } void fill_random(double *a, int isize) { long *idum; long i, j; j = 38282; idum = &j; a[0] = (double)ran0(idum); for (i=0; i<(long)isize; i++) { a[i] = (double)(10000.0*ran0(idum)); } } void test_io_dbl() { int n, ndim = NDIM; double err, tt0, tt1, mbytes; int g_a, g_b, d_a; int i, itmp, j, req, loop; int glo[MAXDIM],ghi[MAXDIM]; dra_size_t dlo[MAXDIM],dhi[MAXDIM]; dra_size_t ddims[MAXDIM],reqdims[MAXDIM]; dra_size_t m; int index[MAXDIM], dims[MAXDIM]; int me, nproc, isize; double *ptr; double plus, minus; int ld[MAXDIM], chunk[MAXDIM]; char filename[80]; FILE *fd; n = SIZE; m = ((dra_size_t)NFACTOR)*((dra_size_t)SIZE); loop = 1; for (i=0; i 3.68) to build this software. To build test program, from the top-level type: make pario/dra/test.x Documentation is located in disk_arrays.doc and implementation notes in Notes.doc. Bug report, comments, questions: hpctools@pnl.gov ga-5-3/pario/dra/perf3.F0000640005473000001440000002275311476251130013613 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c c FNAME - filename for test program c #define BASE_NAME '/scratch/da.try' #define BASE_NAME1 '/scratch/da1.try' #ifdef HPIODIR # define FNAME HPIODIR//BASE_NAME # define FNAME1 HPIODIR//BASE_NAME1 #else # define FNAME BASE_NAME # define FNAME1 BASE_NAME1 #endif c#define MULTFILES 1 #ifdef SOLARIS # if MULTFILES # define USEMULTFILES 1 # endif #else # define USEMULTFILES 1 #endif program io #include "mafdecls.fh" #include "global.fh" #include "dra.fh" integer status, me integer max_arrays integer stack, heap double precision max_sz, max_disk, max_mem data max_arrays, max_sz, max_disk, max_mem /10,1d8,1d10, 1d6/ #if defined(IBM)|| defined(CRAY_T3E) data stack, heap /70000000, 4000000/ #else data stack, heap /1200000, 800000/ #endif c #include "mp3.fh" call ga_initialize() if(.not. ga_uses_ma())then stack = 100000 heap = 100000 endif c if(ma_init(MT_F_DBL, stack, heap) ) then me = ga_nodeid() if(dra_init(max_arrays, max_sz, max_disk, max_mem).ne.0)then call ga_error('dra_init failed: ',0) endif if (me.eq.0) print *,' ' if(me.eq.0)print *, 'TESTING PERFORMANCE OF DISK ARRAYS' if (me.eq.0) print *,' ' call test_io_dbl() status = dra_terminate() call ga_terminate() else print *,'ma_init failed' endif if(me.eq.0)print *, 'all done ...' call MP_FINALIZE() end subroutine test_io_dbl implicit none #include "mafdecls.fh" #include "global.fh" #include "dra.fh" #include "mp3def.fh" integer n,m,ndim parameter (n=250, ndim=3) parameter (m = 2*n) double precision err, tt0, tt1, mbytes, rmax, ravg integer g_a, g_b, d_a, d_b double precision drand integer i, req, loop integer dlo(ndim),dhi(ndim),glo(ndim),ghi(ndim) integer dims(ndim),reqdims(ndim) integer me, nproc integer index, ld(ndim), chunk(ndim) integer iran #if USEMULTFILES integer ilen character*80 filename, filename1 #endif integer util_mdtob logical status external drand external util_mdtob intrinsic int, dble iran(i) = int(drand(0)*dble(i-1)) + 1 c loop = 30 req = -1 nproc = ga_nnodes() me = ga_nodeid() c if (me.eq.0) print *, 'Creating global arrays ',n,' x',n,' x',n if (me.eq.0)call ffflush(6) call ga_sync() do i = 1, ndim dims(i) = n chunk(i) = 1 end do if(.not. nga_create(MT_DBL, ndim, dims, 'a', chunk, g_a)) & call ga_error('nga_create failed: a', 0) if(.not. nga_create(MT_DBL, ndim, dims, 'b', chunk, g_b)) & call ga_error('nga_create failed: b', 0) if (me.eq.0) print *,'done ' if (me.eq.0)call ffflush(6) c c initialize g_a, g_b with random values c ... use ga_access to avoid allocating local buffers for ga_put c call ga_sync() call nga_distribution(g_a, me, glo, ghi) call nga_access(g_a, glo, ghi, index, ld) call fill_random(DBL_MB(index), glo, ghi, ld(1), ld(2)) call ga_sync() * if (me.eq.0) print *,'done ' * if (me.eq.0)call ffflush(6) c call ga_zero(g_b) c c c....................................................................... if (me.eq.0) print *, 'creating disk array ',n,' x',n,' x',n if (me.eq.0)call ffflush(6) do i = 1, ndim reqdims(i) = n end do #if USEMULTFILES ilen = len(FNAME) filename(1:ilen) = FNAME write(filename(ilen+1:ilen+1),200) me 200 format(i1) if(ndra_create(MT_DBL, ndim, dims, 'A', & filename, & DRA_RW, reqdims, d_a).ne.0) $ CALL ga_error('ndra_create failed: ',0) #else if(ndra_create(MT_DBL, ndim, dims, 'A', & FNAME, & DRA_RW, reqdims, d_a).ne.0) $ CALL ga_error('ndra_create failed: ',0) #endif c if(me.eq.0) print *, 'alligned blocking write' if (me.eq.0)call ffflush(6) tt0 = MP_TIMER() if(ndra_write(g_a, d_a,req).ne.0) $ CALL ga_error('ndra_write failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) tt1 = MP_TIMER() -tt0 rmax = tt1 call ga_dgop(1,rmax,1,'max') mbytes = 1e-6*util_mdtob(n*n*n) if (me.eq.0)then write(6,100)mbytes,rmax,mbytes/rmax endif c if(dra_close(d_a).ne.0)call ga_error('dra_close failed: ',d_a) tt1 = MP_TIMER() -tt0 rmax = tt1 call ga_dgop(1,rmax,1,'max') if (me.eq.0)then write(6,100)mbytes,rmax,mbytes/rmax endif c if (me.eq.0) print *,' ' if (me.eq.0) print *,'disk array closed ' if (me.eq.0)call ffflush(6) c....................................................................... c c if (me.eq.0) print *, 'creating disk array ',m,' x',m,' x',m if (me.eq.0)call ffflush(6) do i = 1, ndim dims(i) = m reqdims(i) = n end do #ifdef USEMULTFILES ilen = len(FNAME1) filename1(1:ilen) = FNAME1 write(filename1(ilen+1:ilen+1),200) me if(ndra_create(MT_DBL, ndim, dims, 'B', & filename1, & DRA_RW, reqdims, d_b).ne.0) $ CALL ga_error('ndra_create failed: ',0) #else if(ndra_create(MT_DBL, ndim, dims, 'B', & FNAME1, & DRA_RW, reqdims, d_b).ne.0) $ CALL ga_error('ndra_create failed: ',0) #endif c if(me.eq.0) print *, 'non alligned blocking write' if (me.eq.0)call ffflush(6) c do i = 1, ndim glo(i) = 1 ghi(i) = n dlo(i) = 2 dhi(i) = n+1 end do tt0 = MP_TIMER() if(ndra_write_section(.false., g_a, glo, ghi, & d_b, dlo, dhi, req).ne.0) & call ga_error('ndra_write_section failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) tt1 = MP_TIMER() -tt0 rmax = tt1 call ga_dgop(1,rmax,1,'max') mbytes = 1e-6*util_mdtob(n*n*n) if (me.eq.0)then write(6,100)mbytes,rmax,mbytes/rmax endif c if(dra_close(d_b).ne.0)call ga_error('dra_close failed: ',d_b) tt1 = MP_TIMER() -tt0 rmax = tt1 call ga_dgop(1,rmax,1,'max') mbytes = 1e-6*util_mdtob(n*n*n) if (me.eq.0)then write(6,100)mbytes,rmax,mbytes/rmax endif c if (me.eq.0) print *,' ' if (me.eq.0) print *,'disk array closed ' if (me.eq.0)call ffflush(6) c....................................................................... c c if (me.eq.0) print *,' ' if (me.eq.0) print *,'opening disk array' #ifdef USEMULTFILES if(dra_open(filename, & DRA_R, d_a).ne.0) & call ga_error('dra_open failed',0) #else if(dra_open(FNAME, & DRA_R, d_a).ne.0) & call ga_error('dra_open failed',0) #endif if(me.eq.0) print *, 'alligned blocking read' if (me.eq.0)call ffflush(6) tt0 = MP_TIMER() if(ndra_read(g_b, d_a, req).ne.0) $ CALL ga_error('ndra_read failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) tt1 = MP_TIMER() -tt0 rmax = tt1 call ga_dgop(1,rmax,1,'max') if (me.eq.0)then write(6,100)mbytes,rmax,mbytes/rmax endif call ga_dadd(1d0, g_a, -1d0, g_b, g_b) err = ga_ddot(g_b, g_b) if(err.ne.0) then if (me.eq.0) print *,'BTW, we have error =', err cbjp call ga_print(g_b) else if (me.eq.0) print *,'OK' endif if(dra_delete(d_a).ne.0) & call ga_error('dra_delete failed',0) c....................................................................... c if (me.eq.0) print *,' ' if (me.eq.0) print *,'opening disk array' #ifdef USEMULTFILES if(dra_open(filename1, & DRA_R, d_b).ne.0) & call ga_error('dra_open failed',0) #else if(dra_open(FNAME1, & DRA_R, d_b).ne.0) & call ga_error('dra_open failed',0) #endif if(me.eq.0) print *, 'non alligned blocking read' if (me.eq.0)call ffflush(6) tt0 = MP_TIMER() if(ndra_read_section(.false., g_b, glo, ghi, & d_b, dlo, dhi, req).ne.0) & call ga_error('ndra_read_section failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) tt1 = MP_TIMER() -tt0 rmax = tt1 call ga_dgop(1,rmax,1,'max') if (me.eq.0)then write(6,100)mbytes,rmax,mbytes/rmax endif call ga_dadd(1d0, g_a, -1d0, g_b, g_b) err = ga_ddot(g_b, g_b) if(err.ne.0) then if (me.eq.0) print *,'BTW, we have error =', err else if (me.eq.0) print *,'OK' endif if(dra_delete(d_b).ne.0) & call ga_error('dra_delete failed',0) c....................................................................... status = ga_destroy(g_a) status = ga_destroy(g_b) 100 format(g11.2,' MB time=',g11.2,' rate=',g11.3,'MB/s') end subroutine fill_random(a, lo, hi, ld1, ld2) parameter (ndim = 3) integer lo(ndim), hi(ndim), ld1, ld2 double precision a(ld1,ld2,*), drand, seed1, seed2 integer i,j,k external drand c do k=1, hi(3)-lo(3) + 1 seed1 = drand(k) do j = 1, hi(2) - lo(2) + 1 seed2 = seed1*j do i = 1, hi(1) - lo(1) + 1 a(i,j,k)=seed2*i end do enddo enddo end ga-5-3/pario/dra/dra.h0000640005473000001440000000524111565254156013407 0ustar d3n000users/******************* header file for Disk Arrays *****************/ #ifndef _DRA_H_ #define _DRA_H_ #include "chemio.h" #include "typesf2c.h" typedef long dra_size_t; #define DRA_RW ELIO_RW #define DRA_R ELIO_R #define DRA_W ELIO_W #define DRA_REQ_INVALID -333 #ifdef __cplusplus extern "C" { #endif /* C-interface prototypes */ extern int NDRA_Create( int type, int ndim, dra_size_t dims[], char *name, char* filename, int mode, dra_size_t reqdims[], int *d_a); extern int NDRA_Inquire( int d_a, int *type, int *ndim, dra_size_t dims[], char *name, char* filename); extern int NDRA_Write( int g_a, int d_a, int *request); extern int NDRA_Read( int g_a, int d_a, int *request); extern int NDRA_Write_section(logical transp, int g_a, int glo[], int ghi[], int d_a, dra_size_t dlo[], dra_size_t dhi[], int *request); extern int NDRA_Read_section( logical transp, int g_a, int glo[], int ghi[], int d_a, dra_size_t dlo[], dra_size_t dhi[], int *request); extern int DRA_Init( int max_arrays, double max_array_size, double total_disk_space, double max_memory); extern int DRA_Terminate(); extern int DRA_Open( char* filename, int mode, int *d_a); extern int DRA_Probe( int request, int *compl_status); extern void DRA_Set_debug( logical flag); extern void DRA_Print_internals( int d_a); extern void DRA_Set_default_config( int numfiles, int numioprocs); extern int DRA_Wait( int request); extern int DRA_Delete( int d_a); extern int DRA_Close( int d_a); extern void DRA_Flick(); #ifdef __cplusplus } #endif #endif /* _DRA_H_ */ ga-5-3/pario/dra/time_mxm.F0000640005473000001440000002324511633462535014420 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c#define USE_SUMMA*/ #ifdef USE_SUMMA # define GA_CREATE ga_create2 # define GA_DGEMM ga_summa___ #else # define GA_CREATE ga_create # define GA_DGEMM ga_dgemm #endif #define BASE_NAME 'matrixA.da' #define BASE_NAME1 'matrixB.da' #define BASE_NAME2 'matrixC.da' #ifdef HPIODIR # define FNAME HPIODIR//BASE_NAME # define FNAME1 HPIODIR//BASE_NAME1 # define FNAME2 HPIODIR//BASE_NAME2 #else # define FNAME BASE_NAME # define FNAME1 BASE_NAME1 # define FNAME2 BASE_NAME2 #endif program test implicit none #include "mafdecls.fh" #include "global.fh" #include "dra.fh" integer max_arrays double precision max_sz, max_disk, max_mem data max_arrays, max_sz, max_disk, max_mem /4,1d8,1d10, 1d6/ integer status logical ga_create2 #include "mp3.fh" if (.not. ma_init(MT_DBL, 800000, 800000)) $ call ga_error('ma_init failed', 1) call ga_initialize() if(dra_init(max_arrays, max_sz, max_disk, max_mem).ne.0) $ call ga_error('dra_init failed: ',0) c call testit() c status = dra_terminate() call ga_terminate() call MP_FINALIZE() end subroutine testit() implicit none #include "mafdecls.fh" #include "global.fh" #include "dra.fh" #include "mp3def.fh" c integer n, nb integer g_temp integer d_a, d_b, d_c integer i, j, req integer nproc, me logical ga_create2 c parameter (n = 10000) parameter (nb = n/5) c double precision temp(n), mbytes double precision tt0, tt1 c logical status integer util_mdtob external util_mdtob c ................................................... c nproc = ga_nnodes() me = ga_nodeid() c c*** Create global arrays c if (.not. GA_CREATE(MT_DBL, n, n, 'temp', 1, 1, g_temp)) $ call ga_error(' GA_CREATE failed: temp ',0) c c*** creating disk arrays c if (me.eq.0) print*, 'Creating Disk Array A:',n,' x',n if(dra_create(MT_DBL, n, n, 'A', & FNAME, & DRA_RW, nb, n, d_a).ne.0) $ CALL ga_error('dra_create failed: ',0) if (me.eq.0) print*, 'Creating Disk Array B:',n,' x',n if(dra_create(MT_DBL, n, n, 'B', & FNAME1, & DRA_RW, n, nb, d_b).ne.0) $ CALL ga_error('dra_create failed: ',0) if (me.eq.0) print*, 'Creating Disk Array C:',n,' x',n if(dra_create(MT_DBL, n, n, 'C', & FNAME2, & DRA_RW, nb, nb, d_c).ne.0) $ CALL ga_error('dra_create failed: ',0) c c************************* Fill in arrays A & B ************************ c do j = 1+me, n, nproc ! static load balancing do i = 1, n temp(i) = 1d0/(i +j) enddo call ga_put(g_temp, 1,n, j,j, temp,n) enddo * call ga_print(g_temp, 1) call ga_sync() c c... writing to disk arrays c if(me.eq.0) print *, 'writing global array to disk' if (me.eq.0)call ffflush(6) tt0 = MP_TIMER() if(dra_write(g_temp,d_a,req).ne.0) $ CALL ga_error('write failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) if(dra_close(d_a).ne.0)call ga_error('dra_close failed: ',d_a) tt1 = MP_TIMER() -tt0 mbytes = 1e-6*util_mdtob(n*n) if (me.eq.0)then write(6,100)mbytes,tt1,mbytes/tt1 endif c c Now, array B c do j = 1+me, n, nproc ! static load balancing do i = 1, n temp(i) = 1d0*(i +j) enddo call ga_put(g_temp, 1,n, j,j, temp,n) enddo * call ga_print(g_temp, 1) call ga_sync() c c... writing to disk arrays c if(me.eq.0) print *, 'writing global array to disk' if (me.eq.0)call ffflush(6) tt0 = MP_TIMER() if(dra_write(g_temp,d_b,req).ne.0) $ CALL ga_error('write failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) if(dra_close(d_b).ne.0)call ga_error('dra_close failed: ',d_b) tt1 = MP_TIMER() -tt0 mbytes = 1e-6*util_mdtob(n*n) if (me.eq.0)then write(6,100)mbytes,tt1,mbytes/tt1 endif c c********************************************************************** c c*** delete temp GA array status = ga_destroy(g_temp) c*** opening disk arrays c if(dra_open(FNAME,DRA_R, d_a).ne.0) & call ga_error('dra_open failed',0) if(dra_open(FNAME1,DRA_R, d_b).ne.0) & call ga_error('dra_open failed',0) c c if (me .eq. 0) then print *,' ' print *,' Checking out-of-core matrix multiplication' print *,' ' call ffflush(6) endif c call ga_sync() tt0 = MP_TIMER() call chunk_mxm(n, nb, d_a, d_b, d_c) tt1 = MP_TIMER() -tt0 if(me.eq.0)print *,'time=',tt1,' MFLOPS=', 2d-6*n*n*n/tt1 c c*** clean-up c if(dra_delete(d_a).ne.0) & call ga_error('dra_delete failed',0) if(dra_delete(d_b).ne.0) & call ga_error('dra_delete failed',0) if(dra_delete(d_c).ne.0) & call ga_error('dra_delete failed',0) c c to help linker when summa is used if(ga_nnodes().le.0) call ga_dgemm() 100 format(g11.2,' MB time=',g11.2,' rate=',g11.3,'MB/s') end c given current (i,j) compute (ni, nj) - next loop index c i - outermost loop, j- innermost loop c logical function next2d(i, imin, imax, j, jmin, jmax, ni, nj) implicit none integer i, imin, imax, j, jmin, jmax, ni, nj c if(i .lt. imin .or. j.lt.jmin)then c to handle initial (0,0) indices ni = imin nj = jmin else ni = i nj = j+1 endif if(nj.gt.jmax)then nj = jmin ni = ni + 1 endif next2d = ni.le.imax return end integer function prefetch_next(g_a, d_a, i, j, nb, n) implicit none #include "global.fh" #include "dra.fh" integer g_a, d_a, i, j, nb, n integer jlo, jhi, ni, nj, chunks, nc logical next2d integer LO, HI LO(i) = (i-1)*nb +1 HI(i) = MIN(LO(i) + nb -1, n) c chunks = (n+nb-1)/nb if( next2d(i, 1, chunks, j, 1, chunks, ni, nj)) then jlo = LO(nj) jhi = HI(nj) nc = jhi -jlo+1 if(ELIO_OK.ne.dra_read_section(.false., g_a, 1, n, 1, nc, & d_a, 1, n, jlo, jhi, prefetch_next)) & call ga_error('dra_read failed:',0) else prefetch_next = DRA_REQ_INVALID endif return end subroutine chunk_mxm(n, nb, d_a, d_b, d_c) implicit none #include "mafdecls.fh" #include "global.fh" #include "dra.fh" #include "mp3def.fh" integer n, nb, d_a, d_b, d_c integer i, j, chunks integer ilo, ihi, jlo, jhi, nr, nc integer g_a_chunk, g_b_chunk(2), g_c_chunk logical status integer req, req_b, req_c, prefetch_next integer nxt_idx, cur_idx double precision tot, t0 logical ga_create2 integer LO, HI, NEXT LO(i) = (i-1)*nb +1 HI(i) = MIN(LO(i) + nb -1, n) NEXT(i)= Mod(i+2,2)+1 ! generates series: 1, 2, 1, 2, 1, ... c chunks = (n+nb-1)/nb c c*** create temporary "chunk" GA arrays c if (.not. GA_CREATE(MT_DBL, nb, n, 'a', 1, 1, g_a_chunk)) $ call ga_error('chunk_mxm: GA_CREATE failed: g_a ',0) if (.not. GA_CREATE(MT_DBL, n, nb, 'b(1)', 1, 1, g_b_chunk(1))) $ call ga_error('chunk_mxm: GA_CREATE failed: g_b(1) ',0) if (.not. GA_CREATE(MT_DBL, n, nb, 'b(2)', 1, 1, g_b_chunk(2))) $ call ga_error('chunk_mxm: GA_CREATE failed: g_b(2) ',0) if (.not. GA_CREATE(MT_DBL, nb, nb, 'c', 1, 1, g_c_chunk)) $ call ga_error('chunk_mxm: GA_CREATE failed: g_c ',0) c c cur_idx = 1 req_b = prefetch_next(g_b_chunk(cur_idx), d_b, 0, 0, nb, n) if(dra_wait(req_b).ne.0) call ga_error('dra_wait failed:',req) do i = 1, chunks c ilo = LO(i) ihi = HI(i) nr = ihi-ilo+1 if(ELIO_OK.ne.dra_read_section(.false., g_a_chunk, 1, nr, 1, n, & d_a, ilo, ihi, 1, n, req)) & call ga_error('dra_read failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed:',req) c * call ga_print_patch(g_a_chunk, 1, nr, 1, n) do j = 1, chunks c jlo = LO(j) jhi = HI(j) nc = jhi-jlo+1 if(dra_wait(req_b).ne.0) $ call ga_error('dra_wait failed:',req_b) nxt_idx = NEXT(cur_idx) req_b = prefetch_next(g_b_chunk(nxt_idx), d_b, i, j, nb, n) c * call ga_print_patch(g_b_chunk(cur_idx), 1, n, 1, nc) t0 =MP_TIMER() call GA_DGEMM('n','n', nr, nc, n, 1d0, $ g_a_chunk, g_b_chunk(cur_idx), 0d0,g_c_chunk) tot = MP_TIMER() -t0 * call ga_print(g_c_chunk, 1) cur_idx = nxt_idx if(ELIO_OK.ne.dra_write_section(.false., g_c_chunk, 1, nr, 1 & , nc, & d_c, ilo, ihi, jlo, jhi, req_c)) & call ga_error('dra_write failed for C:',0) if(dra_wait(req_c).ne.0)call ga_error('wait failed:',req_c) if(ga_nodeid().eq.0) & write(6,'(2i5,5x,2e15.4)')i,j,tot, MP_TIMER() enddo enddo c * call ga_print(g_c, 1) status = ga_destroy(g_c_chunk) status = ga_destroy(g_b_chunk(2)) .and. status status = ga_destroy(g_b_chunk(1)) .and. status status = ga_destroy(g_a_chunk) .and. status if(dra_wait(req_b).ne.0) call ga_error('dra_wait failed:',req_b) end ga-5-3/pario/dra/dbg_write.c0000640005473000001440000000361611503767531014604 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include "macommon.h" #include "global.h" #include "dra.h" #include "drap.h" #define LEN 10 int main(int argc, char **argv) { int from, to, type; Integer idata[LEN]; #if 0 int fd; #endif Integer i, ii, imax, offset, status; DoublePrecision ddata[LEN]; if(argc < 2){ printf("program writes test data to a binary file\n"); printf("usage: dbg_write.x \n"); printf("type: 1 - integer 2 - double \n -range of elements (0, ...)\n"); return(1); } type = atoi(argv[2]); from = atoi(argv[3]); to = atoi(argv[4]); if(from < 0 || to < from) {printf("range error\n"); return 1;} #if 0 if(!(fd = dra_el_open(argv[1],DRA_W))){printf("not found\n"); return 1;} #else /* TODO This must be an old test program using an old API... * consider removing this program. */ return 1; #endif switch (type){ case 1: for(i=from; i<= to; i+= LEN){ imax = PARIO_MIN(i+LEN-1,to); offset = sizeof(Integer)*i; for(ii=0;ii #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #define FNAME "/scratch/da.try" #define FNAME_ALT "/tmp/da.try" #define FNAME1 "/scratch/da1.try" #define FNAME1_ALT "/tmp/da1.try" #define FNAME2 "/scratch/da2.try" #define FNAME2_ALT "/tmp/da2.try" #include "dra.h" #include "ga.h" #include "macdecls.h" #include "mp3.h" #ifndef MAXDIM # define MAXDIM GA_MAX_DIM #endif #ifndef TRUE # define TRUE (Logical)1 #endif #ifndef FALSE # define FALSE (Logical)0 #endif /* If USER_CONFIG set to: * 0: Use default configuration * 1: Number of files is 1, number of I/O procs equals * the number of nodes * 2: Number of files and number of I/O procs equals * the number of nodes * 3: Number of files and number of I/O procs equals 1 * These configurations only apply if files are not located * on local scratch disk. For local scratch, system defaults * to 1 I/O proc per node and 1 file per node. Note that * USER_CONFIG=1 will only work if system has parallel I/O. * * Memory and Disk Usage: * The aggregate memory required to run this test is approximately * 2*SIZE**NDIM*sizeof(double) bytes. The amount of disk space * required is approximately 1+2**NDIM times this amount. */ #define USER_CONFIG 0 #define TEST_TRANSPOSE 0 #define NDIM 3 #define SIZE 250 /* #define NDIM 2 #define SIZE 4000 #define NDIM 1 #define SIZE 16000000 */ #define SWITCH 0 /*#define MAXDIM 7*/ /*#define TRUE (logical)1*/ /*#define FALSE (logical)0*/ #define MULTFILES 0 #ifdef SOLARIS # if MULTFILES # define USEMULTFILES 1 # endif #else # define USEMULTFILES 0 #endif #define IA 16807 #define IM 2147483647 #define AM (1.0/IM) #define IQ 127773 #define IR 2836 #define MASK 123459876 void filename_check(char *result, const char *fname, const char *fname_alt) { FILE *fd; strcpy(result, fname); if (! (fd = fopen(result, "w"))) { strcpy(result, fname_alt); if (! (fd = fopen(result, "w"))) { GA_Error("Could not open file", 0); } } fclose(fd); } float ran0(long *idum) { long k; float ans; *idum ^= MASK; k=(*idum)/IQ; *idum = IA*(*idum-k*IQ)-IR*k; if (*idum < 0) *idum += IM; ans=AM*(*idum); *idum ^= MASK; return ans; } void fill_random(double *a, int isize) { long *idum; long i, j; j = 38282; idum = &j; a[0] = (double)ran0(idum); for (i=0; i<(long)isize; i++) { a[i] = (double)(10000.0*ran0(idum)); } } void test_io_dbl() { int ndim = NDIM; double err, tt0, tt1, mbytes; int g_a, g_b, d_a, d_b; #if TEST_TRANSPOSE int g_c, g_d, d_c; #endif int i, req, loop; dra_size_t dlo[MAXDIM],dhi[MAXDIM]; dra_size_t n, m; dra_size_t ddims[MAXDIM], reqdims[MAXDIM]; int glo[MAXDIM],ghi[MAXDIM]; int dims[MAXDIM]; int me, nproc, isize, numfiles, nioprocs; double plus, minus; double *index; int ld[MAXDIM], chunk[MAXDIM]; #if USEMULTFILES int ilen; #endif char filename[80], filename1[80]; n = SIZE; m = 2*SIZE; loop = 30; req = -1; nproc = GA_Nnodes(); me = GA_Nodeid(); nioprocs = GA_Cluster_nnodes(); numfiles = nioprocs; if (me == 0) { printf("Creating temporary global arrays %ld",(long)n); for (i=1; i #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #define BASE_NAME "dra.file" #ifdef HPIODIR # define FNAME HPIODIR/*BASE_NAME*/ #else # define FNAME BASE_NAME #endif #define NDIM 3 #define SIZE 20 #define NSIZE 8000 #define LSIZE 216000 #define TRUE (logical)1 #define FALSE (logical)0 #define IA 16807 #define IM 2147483647 #define AM (1.0/IM) #define IQ 127773 #define IR 2836 #define MASK 123459876 #include "dra.h" #include "ga.h" #include "macdecls.h" #include "mp3.h" #define MAXDIM GA_MAX_DIM #define COPY_INT_DRAT(src,dst) {\ int i; \ for (i=0; i dhi[i]) swap(&dlo[i],&dhi[i]); elem = dhi[i] - dlo[i] + 1; glo[i] = iran(n-elem,&idum); ghi[i] = glo[i] + elem - 1; } if (me == 0) { printf(" read global["); printf("%4d:%4d",glo[0],ghi[0]); for (i=1; i ghi[i]) swap(&glo[i],&ghi[i]); elem = ghi[i] - glo[i] +1; dlo[i] = iran(m-elem,&idum); dhi[i] = dlo[i]+elem-1; } if (me == 0) { printf(" writing global["); printf("%4d:%4d",glo[0],ghi[0]); for (i=1; i #endif #include "global.h" #include "macommon.h" #define ga_idot_ F77_FUNC_(ga_idot,GA_IDOT) #define DRA_TYPE_GSM 32760 - 6 /** * Integer version of ga_ddot */ Integer ga_idot_(Integer *g_a, Integer *g_b) { Integer atype, adim1, adim2, btype, bdim1, bdim2, ald, bld; Integer ailo,aihi, ajlo, ajhi, bilo, bihi, bjlo, bjhi; register Integer i,j; Integer me, sum; Integer index_a, index_b; pnga_sync(); me = ga_nodeid_(); ga_check_handle(g_a, "ga_idot"); ga_check_handle(g_b, "ga_idot"); ga_inquire_(g_a, &atype, &adim1, &adim2); ga_inquire_(g_b, &btype, &bdim1, &bdim2); if(atype != btype || atype != MT_F_INT) ga_error("ga_idot: types not correct", 0L); if (adim1!=bdim1 || adim2 != bdim2) ga_error("ga_idot: arrays not conformant", 0L); if (DBL_MB == (DoublePrecision*)0 || INT_MB == (Integer*)0) ga_error("ga_idot: null pointer for base array",0L); ga_distribution_(g_a, &me, &ailo, &aihi, &ajlo, &ajhi); ga_distribution_(g_b, &me, &bilo, &bihi, &bjlo, &bjhi); if (ailo!=bilo || aihi != bihi || ajlo!=bjlo || ajhi != bjhi){ /* fprintf(stderr,"\nme =%d: %d-%d %d-%d vs %d-%d %d-%d dim:%dx%d\n",me, ailo,aihi, ajlo, ajhi, bilo, bihi, bjlo, bjhi,adim1,adim2); */ ga_error("ga_idot: distributions not identical",0L); } sum = 0.; if ( aihi>0 && ajhi>0 ){ ga_access_(g_a, &ailo, &aihi, &ajlo, &ajhi, &index_a, &ald); if(g_a == g_b){ index_b = index_a; bld =ald; }else ga_access_(g_b, &bilo, &bihi, &bjlo, &bjhi, &index_b, &bld); index_a --; /* Fortran to C correction of starting address */ index_b --; /* Fortran to C correction of starting address */ /* compute "local" contribution to the dot product */ for(j=0; j #endif #if HAVE_MATH_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #include "dra.h" #include "ga.h" #include "macdecls.h" #include "mp3.h" #define FNAME "/scratch/da.try" #define FNAME_ALT "/tmp/da.try" #define NDIM 3 #define SIZE 300 #define NFAC 3 /* #define NDIM 3 #define SIZE 1800 #define NDIM 2 #define SIZE 4000 #define NDIM 1 #define SIZE 16000000 */ #ifndef MAXDIM # define MAXDIM GA_MAX_DIM #endif #ifndef TRUE # define TRUE (Logical)1 #endif #ifndef FALSE # define FALSE (Logical)0 #endif #define IA 16807 #define IM 2147483647 #define AM (1.0/IM) #define IQ 127773 #define IR 2836 #define MASK 123459876 float ran0(long *idum) { long k; float ans; *idum ^= MASK; k=(*idum)/IQ; *idum = IA*(*idum-k*IQ)-IR*k; if (*idum < 0) *idum += IM; ans=AM*(*idum); *idum ^= MASK; return ans; } void fill_random(double *a, int isize) { long *idum; long i, j; j = 38282; idum = &j; a[0] = (double)ran0(idum); for (i=0; i<(long)isize; i++) { a[i] = (double)(10000.0*ran0(idum)); } } void array_int_to_dra_size_t(int *in, dra_size_t *out, size_t size) { size_t i; for (i=0; i= nfac || icoord[j] < 0) printf("Invalid icoord[%d]: %d\n",j,icoord[j]); for (j=1; j= nfac || icoord[j] < 0) printf("Invalid icoord[%d]: %d\n",j,icoord[j]); } for (j=0; j= nfac || icoord[j] < 0) printf("Invalid icoord[%d]: %d\n",j,icoord[j]); for (j=1; j= nfac || icoord[j] < 0) printf("Invalid icoord[%d]: %d\n",j,icoord[j]); } for (j=0; j #endif #if HAVE_UNISTD_H # include #endif #include "drap.h" #include "ga-papi.h" #define MAX_HD_NAME_LEN 512 #define HD_NAME_EXT_LEN 10 #define HDLEN 80 #define HD_EXT ".info" /** * check file configuration: shared or independent files are used * we'll verify if every process can access DRA metafile * if yes, then we have shared file, otherwise independent files */ int dai_file_config(char* filename) { char param_filename[MAX_HD_NAME_LEN]; Integer len; char sum='+'; Integer me=pnga_nodeid(); Integer nproc = pnga_nnodes(); Integer status; stat_t info; if(nproc==1) return 0; /* build param file name */ len = strlen(filename); if(len+HD_NAME_EXT_LEN >= MAX_HD_NAME_LEN) dai_error("dai_file_config: filename too long:",len); strcpy(param_filename,filename); strcat(param_filename,HD_EXT); /* printf("checking file: %s\n",param_filename);fflush(stdout);*/ status = (Integer) elio_stat(param_filename, &info); /* processor 0 created the file => it must be able to stat it */ if(me==0 && status!= ELIO_OK) dai_error("dai_file_config: no access from 0",status); status = (status==ELIO_OK) ? 1 : 0; /* normalize status */ /* combine status accross all processors */ pnga_gop(pnga_type_f2c(MT_F_INT), &status, 1, &sum); /* 1 - only 0 can access the file => independent files * nproc - all can access it => shared file * otherwise - same processors can access it => something is wrong!!! */ if(status == 1) return(1); else if(status == nproc) return 0; #ifdef NO_SMP_NODES else dai_error("dai_file_config: confusing file configuration",status); #endif return 1; } /** * Retrive metadata for a disk array from the disk */ int dai_read_param(char* filename,Integer d_a) { FILE *fd; char param_filename[MAX_HD_NAME_LEN]; Integer len, i, ndim; Integer me=pnga_nodeid(); Integer brd_type=DRA_BRD_TYPE, orig, dra_hndl=d_a+DRA_OFFSET; long input; int rc=0; char dummy[HDLEN]; pnga_sync(); if(!me){ /* only process 0 reads metafile */ /* build param file name */ len = strlen(filename); if(len+HD_NAME_EXT_LEN >= MAX_HD_NAME_LEN) dai_error("dai_read_param: filename too long:",len); strcpy(param_filename,filename); strcat(param_filename,HD_EXT); if((fd=fopen(param_filename,"r"))){ if(!fscanf(fd,"%ld", &input)) dai_error("dai_read_param:ndim",0); DRA[dra_hndl].ndim = (Integer) input; ndim = (Integer) input; for (i=0; i= MAX_HD_NAME_LEN) dai_error("dai_write_param: filename too long:",len); strcpy(param_filename,filename); strcat(param_filename,HD_EXT); if(! (fd = fopen(param_filename,"w")) ) { char message[MAX_HD_NAME_LEN*2]; strcpy(message,"dai_write_param:open failed :: "); strcpy(message,param_filename); dai_error(message,0); } if(!fprintf(fd,"%ld ",(long)DRA[dra_hndl].ndim)) dai_error("dai_write_param:ndim",0); for (i=0; i= MAX_HD_NAME_LEN) dai_error("dai_read_param: filename too long:",len); strcpy(param_filename,filename); strcat(param_filename,HD_EXT); if(unlink(param_filename)) dai_error("dai_delete_param failed",d_a); } } ga-5-3/pario/dra/ffflush.F0000640005473000001440000000051411524546300014220 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c $Id: ffflush.F,v 1.2 2002-10-07 16:51:51 d3h325 Exp $ subroutine ffflush(unit) integer unit c #ifdef CRAY * if(unit.eq.6)then * call flush(101) * else * call flush(unit) * endif #elif HAVE_F77_FLUSH call F77_FLUSH(unit) #endif c end ga-5-3/pario/dra/ntest.F0000640005473000001440000003031411476251130013721 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c c FNAME - filename for test program c #define BASE_NAME 'dra.file' #ifdef HPIODIR # define FNAME HPIODIR//BASE_NAME #else # define FNAME BASE_NAME #endif program io #include "mafdecls.fh" #include "global.fh" #include "dra.fh" integer status, me integer max_arrays integer stack, heap double precision max_sz, max_disk, max_mem data max_arrays, max_sz, max_disk, max_mem /10,1d8,1d10, 1d6/ data stack, heap /80000, 80000/ c #include "mp3.fh" if(ma_init(MT_F_DBL, stack, heap) ) then call ga_initialize() me = ga_nodeid() if(dra_init(max_arrays, max_sz, max_disk, max_mem).ne.0)then call ga_error('dra_init failed: ',0) endif if (me.eq.0) print*,' ' if(me.eq.0)print *, 'TESTING INTEGERS' if (me.eq.0) print*,' ' call test_io_int() if (me.eq.0) print*,' ' if(me.eq.0)print *, 'TESTING DOUBLES' if (me.eq.0) print*,' ' call test_io_dbl() status = dra_terminate() call ga_terminate() else print *,'ma_init failed' endif c if(me.eq.0)print *, 'all done ...' call MP_FINALIZE() end subroutine test_io_int implicit none #include "mafdecls.fh" #include "global.fh" #include "dra.fh" integer n,m parameter (n = 20) parameter (m = 2*n) integer a(n,n,n) integer g_a, g_b, d_a integer i,j,k, err, type integer me, nproc, dims(3), req(3), ndim integer chunk(3), lo(3), hi(3), ld(3) logical status character*1 filename(200) character*80 name c nproc = ga_nnodes() me = ga_nodeid() call init_char(name,100, ' ') call init_char(filename,200, ' ') c c a() is a local copy of what the l array should start as c do k = 1, n do j = 1, n do i = 1, n a(i,j,k) = i-1 + (j-1)*n + (k-1)*n*n enddo enddo enddo c if (me.eq.0) print *, 'Creating global arrays' call ga_sync() do i = 1, 3 dims(i) = n chunk(i) = 1 ld(i) = n end do if(.not. nga_create(MT_INT, 3, dims, 'a', chunk, g_a)) & call ga_error('nga_create failed: a', 0) if(.not. nga_create(MT_INT, 3, dims, 'b', chunk, g_b)) & call ga_error('nga_create failed: b', 0) c * call nga_zero(g_a) * call nga_zero(g_b) c write(6,*) 'Imediately before nga_put' do j = 1+me, n, nproc lo(1) = 1 lo(2) = 1 lo(3) = j hi(1) = n hi(2) = n hi(3) = j call nga_put(g_a, lo, hi, a(1,1,j), ld) enddo c if(me.eq.0) print *, 'Creating Disk Array ',n,' x',n,' x',n dims(1) = n dims(2) = n dims(3) = n req(1) = n req(2) = n req(3) = 1 ndim = 3 if(ndra_create(MT_INT, ndim, dims, 'array A', & FNAME, & DRA_RW, req, d_a).ne.0) $ CALL ga_error('ndra_create failed: ',0) if (me.eq.0) print *,'OK' if (me.eq.0) print*,' ' c if(me.eq.0) print *, 'Writing Global Array to Disk Array' if(ndra_write(g_a, d_a,req).ne.0) $ CALL ga_error('ndra_write failed:',0) if(dra_wait(req).ne.0)call ga_error('dra_wait failed: ' ,req) if (me.eq.0) print *,'OK' if (me.eq.0) print*,' ' if(me.eq.0) print *, 'Closing Disk Array' if(dra_close(d_a).ne.0)call ga_error('dra_close failed: ',d_a) if (me.eq.0) print *,'OK' if (me.eq.0) print*,' ' c if(me.eq.0) print *, 'Opening Existing Disk Array' if(dra_open(FNAME ,DRA_R, d_a).ne.0) & call ga_error('dra_open failed',0) c if(ndra_inquire(d_a, type, ndim, dims, name, filename).ne.0) & call ga_error('ndra_inquire failed',0) if(dims(1).ne.n) call ga_error('dim1 error',dims(1)) if(dims(2).ne.n) call ga_error('dim2 error',dims(2)) if(dims(3).ne.n) call ga_error('dim3 error',dims(3)) if(type.ne.MT_INT) call ga_error('type error',type) if(me.eq.0) print *, 'array name read from disk is:',name call ga_sync() if (me.eq.0) print *,'OK' if (me.eq.0) print*,' ' c if(me.eq.0) print *, 'Checking ndra_read' c call dra_set_mode(1) write(6,*) 'About to perform ndra_read' if(ndra_read(g_b, d_a, req).ne.0) $ CALL ga_error('ndra_read failed:',0) write(6,*) 'Finished performing ndra_read' call ffflush(6) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) c c error checking: (g_a - g_b)^2 c c call ga_print(g_a) c call ga_print(g_b) call ga_add(1, g_a, -1, g_b, g_b) err = ga_idot(g_b, g_b) c if(err.ne.0 )then if( me.eq.0) call ga_error('failed', err) else if (me.eq.0) print *,'OK' endif if (me.eq.0) print*,' ' c if(me.eq.0) print *, 'Checking dra_delete' if(dra_delete(d_a).ne.0) & call ga_error('dra_delete failed',0) if (me.eq.0) print *,'OK' if (me.eq.0) print*,' ' status = ga_destroy(g_a) status = ga_destroy(g_b) end subroutine test_io_dbl implicit none #include "mafdecls.fh" #include "global.fh" #include "dra.fh" integer n,m parameter (n = 20) parameter (m = 2*n) double precision a(n,n,n), err integer g_a, g_b, d_a double precision drand integer i,j,k, loop integer dlo(3),dhi(3) integer glo(3),ghi(3) integer elem integer me, nproc integer iran, ndim, dims(3), req(3), chunk(3), ld(3) logical status external drand intrinsic int, dble iran(i) = int(drand(0)*dble(i-1)) + 1 c loop = 30 nproc = ga_nnodes() me = ga_nodeid() c c a() is a local copy of what the l array should start as c do k = 1, n do j = 1, n do i = 1, n a(i,j,k) = dble(i-1 + (j-1)*n + (k-1)*n*n) enddo enddo end do c call ga_sync() ndim = 3 do i = 1, ndim dims(i) = n chunk(i) = 1 ld(i) = n end do write(6,*) 'Creating global arrays' write(6,*) if(.not. nga_create(MT_DBL, ndim, dims, 'a', chunk, g_a)) & call ga_error('ga_create failed: a', 0) if(.not. nga_create(MT_DBL, ndim, dims, 'b', chunk, g_b)) & call ga_error('ga_create failed: b', 0) c write(6,*) 'Zeroing global arrays' write(6,*) call ga_zero(g_a) call ga_zero(g_b) c do j = 1+me, n, nproc dlo(1) = 1 dlo(2) = 1 dlo(3) = j dhi(1) = n dhi(2) = n dhi(3) = j call nga_put(g_a, dlo, dhi, a(1, 1, j), ld) enddo c if (me.eq.0) print*, 'Creating Disk Array ',n,' x',n,' x',n req(1) = n req(2) = n req(3) = 3 if(ndra_create(MT_DBL, ndim, dims, 'A', & FNAME, & DRA_RW, req, d_a).ne.0) $ CALL ga_error('ndra_create failed: ',0) c if(me.eq.0) print *, 'Writing Global Array to Disk Array' if(ndra_write(g_a, d_a,req).ne.0) $ CALL ga_error('ndra_write failed:',0) if (me.eq.0) print*,' ' if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) c if(dra_close(d_a).ne.0)call ga_error('dra_close failed: ',d_a) c if(me.eq.0) print *, 'Checking ndra_read' if(dra_open(FNAME,DRA_R, d_a).ne.0) & call ga_error('dra_open failed',0) if(ndra_read(g_b, d_a, req).ne.0) $ CALL ga_error('ndra_read failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) c c error checking: (g_a - g_b)^2 c c call ga_print(g_a) c call ga_print(g_b) call ga_add(1d0, g_a, -1d0, g_b, g_b) err = ga_ddot(g_b, g_b) if(err.ne.0) then if (me.eq.0) print *,'error =', err else if (me.eq.0) print *,'OK' endif if (me.eq.0) print*,' ' c if(me.eq.0) print *, 'Checking ndra_read_section' c call ga_zero(g_b) do j = 1, loop do i = 1, ndim dlo(i) = iran(n) dhi(i) = iran(n) if (dlo(i).gt.dhi(i)) call swap(dlo(i),dhi(i)) elem = dhi(i) - dlo(i) + 1 glo(i) = iran(n-elem) + 1 ghi(i) = glo(i) + elem - 1 end do c if(me.eq.0) then write(6,100) (glo(i),ghi(i),i=1,3),(dlo(i),dhi(i),i=1,3) 100 format(1x,'reading global[',3(i4,':',i4), & '] from disk[',3(i4,':',i4),']') call ffflush(6) endif c * call ga_print(g_b,1) if(ndra_read_section(.false., g_b, glo, ghi, & d_a, dlo, dhi, req).ne.0) & call ga_error('ndra_read failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed:',req) * call ga_print(g_b,1) * call ga_print_patch(g_a, dilo, dihi, djlo, djhi,1) * call ga_print_patch(g_b, gilo, gihi, gjlo, gjhi,1) c call nga_add_patch(1d0, g_a, dlo, dhi, -1d0, g_b, glo, ghi, & g_b, glo, ghi) err = nga_ddot_patch(g_b,'n', glo, ghi, g_b,'n', glo, ghi) if(err.ne.0 .and. me.eq.0)then print *,'error =', err call ga_error('failed',0) endif enddo if (me.eq.0) print*,' OK' if (me.eq.0) print*,' ' if(dra_delete(d_a).ne.0) & call ga_error('dra_delete failed',0) c c*** now d_a is 4 times larger than g_a c if (me.eq.0) print*, 'Creating New Disk Array ',m,' x',m,' x',m dims(1) = m dims(2) = m dims(3) = m req(1) = n req(2) = n req(3) = 2 if(ndra_create(MT_DBL, ndim, dims, 'A', & FNAME, & DRA_RW, req, d_a).ne.0) $ CALL ga_error('dra_create failed: ',0) if (me.eq.0) print*,' OK' if (me.eq.0) print*,' ' c c c call ga_print(g_a) c call ga_zero(g_b) if (me.eq.0) print*,'Testing ndra_write_section' do j = 1, loop do i = 1, ndim glo(i) = iran(n) if(glo(i).gt.ghi(i)) call swap(glo(i),ghi(i)) elem = ghi(i) - glo(i) +1 dlo(i) = iran(m-elem)+1 dhi(i) = dlo(i)+elem-1 end do c if(me.eq.0) then write(6,200) (glo(i),ghi(i),i=1,3),(dlo(i),dhi(i),i=1,3) 200 format(1x,'writing global[',3(i4,':',i4), & '] to disk[',3(i4,':',i4),']') call ffflush(6) endif c c call dra_set_mode(0) c if(dra_write_section(.false., g_a, gilo, gihi, gjlo, gjhi, c & d_a, dilo, dihi, djlo, djhi, req).ne.0) if(ndra_write_section(.false., g_a, glo, ghi, & d_a, dlo, dhi, req).ne.0) & call ga_error('dra_write failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed:',req) c c*** dra_read was tested already and we use it for testing ndra_write_section c c call dra_set_mode(1) if(ndra_read_section(.false., g_b, glo, ghi, & d_a, dlo, dhi, req).ne.0) & call ga_error('ndra_read failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed:',req) c call nga_add_patch(1d0, g_a, glo, ghi, -1d0, g_b, glo, ghi, & g_b, glo, ghi) err = nga_ddot_patch(g_b,'n', glo, ghi, g_b,'n', glo, ghi) cbjp if(err.ne.0d0 )then cbjp call ga_print_patch(g_a, gilo, gihi,gjlo,gjhi,1) cbjp call ga_print_patch(g_b, gilo, gihi,gjlo,gjhi,1) cbjp endif if(err.ne.0d0 .and. me.eq.0)then print *,'error =', err call ga_error('error in ndra_write_section',0) endif enddo if (me.eq.0) print*,' OK' c if(dra_delete(d_a).ne.0) & call ga_error('dra_delete failed',0) status = ga_destroy(g_a) status = ga_destroy(g_b) end subroutine swap(a,b) integer a, b, temp temp = a a = b b = temp end subroutine init_char(str, len, char) integer len, i #if defined(CRAY_T3D) || defined(CRAY_T3E) character*1 str(len) #else character*(*) str #endif character*1 char do i = 1, len -1 str(i:i+1) = char enddo end ga-5-3/pario/dra/env.c0000640005473000001440000000112611272474200013407 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * $Id: env.c,v 1.1 1997-12-07 11:14:18 d3e129 Exp $ */ #if HAVE_STDLIB_H # include #endif #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #define MAX_NUM_SERV 64 /** * get number of I/O servers from optional environmental variable DRA_NUM_SERV */ int drai_get_num_serv() { int val=-1; char *str; str = getenv("DRA_NUM_SERV"); if(str==NULL)val = 0; else{ val = atoi(str); if(val<1 || val >MAX_NUM_SERV)val =0; } return val; } ga-5-3/pario/dra/Notes.doc0000640005473000001440000000235306177523544014253 0ustar d3n000users Disk Resident Arrays Implementation Notes Assumptions: . ANSI C compiler is not required; . interface to C programs is minimal (most users program in Fortran) . low level I/O operations defined in ELIO library . upper layer knows if they are called collectively or not C Interface: . C programs must use Integer and DoublePrecision data types, defined in "global.h" (GA package) for both the GA and DRA, and include file "dra.h"; . all arguments passed by address; . names of DRA operations have capitalized DRA prefix i.e., C version of Fortran dra_init is DRA_init. Note that the names are converted by cpp as specified in "dra.h" so that in most cases, C and Fortran programs call the same function. Internal convention is that there is a separate Fortran wrapper to a DRA operation iff it has a character string argument(s). Implementation Status: . prototyping used for DRA functions if ANSI C compiler available . indexing arguments are currently implemented as integers . reshaping and transposing in dra_[write,read]_section not implemented yet Problems to Resolve: . do we need explicit dra_flush or we should handle it implicitly after each write when file is create in 'read+write' in mode ? ga-5-3/pario/dra/buffers.h0000640005473000001440000000340311265174525014271 0ustar d3n000users#ifndef BUFFERS_H_ /* so that this file is not included twice */ #define BUFFERS_H_ /** buffer size --- adjust to be a multiplicity of the striping factor in a parallel filesystem */ #define DBL_BUF_SIZE 131072 #define BUF_SIZE (DBL_BUF_SIZE*sizeof(double)) #define INT_BUF_SIZE (BUF_SIZE/sizeof(int)) /* alignment factor for the internal buffer */ #define ALIGN 16 #define MAXBUF 16 /* max # of buffers that can be used */ #define DEFBUF 4 /* default # of buffers */ /** internal buffer structure */ typedef struct { char *buffer; int align_off; /**< caching alignment offset */ int buf_hdl; /**< buffer handle; index of the buffer in the ctxt */ int group_id; /**< identify callback function to use to release buffer */ int call_id; /**< id to be used to complete an entire call */ int active; /**< if the buffer active or not */ } _buffer_t; /** structure to create application context */ typedef struct { int ctxt_id; _buffer_t *buf; /**< will be allocated nbuf buffers*/ int nbuf; int size; /**< in bytes */ void (*fptr)(char*); /**< array of pointers to functions provided by the application */ int last_buf; /* utility variable; contains the last buf assigned in this ctxt */ } buf_context_t; void buffer_init(buf_context_t *ctxt, int nbuf, int buf_size, void (*fptr)(char*)); char *get_buf(buf_context_t *ctxt, int call_id); void buf_terminate(buf_context_t *ctxt); void buf_complete_call(buf_context_t *ctxt, int call_id); int buf_get_call_id(buf_context_t *ctxt, char *buf); int get_bufs_of_call_id(buf_context_t *ctxt, int call_id, int *n_buf, char *bufs[]); void free_buf(buf_context_t *ctxt, char *buf); #endif /* BUFFERS_H_ */ ga-5-3/pario/dra/capi.c0000640005473000001440000001615411647111726013551 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #include "dra.h" #include "draf2c.h" #include "drap.h" #include "global.h" #include "ga-papi.h" static Integer _da_lo[MAXDIM], _da_hi[MAXDIM]; static Integer _da_dims[MAXDIM]; static Integer _da_reqdims[MAXDIM]; static Integer _ga_lo[MAXDIM], _ga_hi[MAXDIM]; #ifdef USE_FAPI # define COPYC2F(carr, farr, n){\ int i; for(i=0; i< (n); i++)(farr)[i]=(Integer)(carr)[i];} # define COPYF2C(farr, carr, n){\ int i; for(i=0; i< (n); i++)(carr)[i]=(int)(farr)[i];} # define COPYF2C_DRA(farr, carr, n){\ int i; for(i=0; i< (n); i++)(carr)[i]=(dra_size_t)(farr)[i];} #else # define COPYC2F(carr, farr, n){\ int i; for(i=0; i< (n); i++)(farr)[n-i-1]=(Integer)(carr)[i];} # define COPYF2C(farr, carr, n){\ int i; for(i=0; i< (n); i++)(carr)[n-i-1]=(int)(farr)[i];} # define COPYF2C_DRA(farr, carr, n){\ int i; for(i=0; i< (n); i++)(carr)[n-i-1]=(dra_size_t)(farr)[i];} #define BASE_0 #endif #define COPY(CAST,src,dst,n) {\ int i; for(i=0; i< (n); i++)(dst)[i]=(CAST)(src)[i];} #ifdef BASE_0 # define COPYINDEX_C2F(carr, farr, n){\ int i; for(i=0; i< (n); i++)(farr)[n-i-1]=(Integer)(carr)[i]+1;} # define COPYINDEX_F2C(farr, carr, n){\ int i; for(i=0; i< (n); i++)(carr)[n-i-1]=(int)(farr)[i] -1;} # define COPYINDEX_F2C_DRA(farr, carr, n){\ int i; for(i=0; i< (n); i++)(carr)[n-i-1]=(dra_size_t)(farr)[i] -1;} #else # define COPYINDEX_F2C COPYF2C # define COPYINDEX_F2C_DRA COPYF2C_DRA # define COPYINDEX_C2F COPYC2F #endif int DRA_uses_fapi(void) { #ifdef USE_FAPI return 1; #else return 0; #endif } int NDRA_Create(int type, int ndim, dra_size_t dims[], char *name, char* filename, int mode, dra_size_t reqdims[], int *d_a) { Integer ttype, nndim, dd_a, mmode; logical st; if (ndim>MAXDIM) return 0; COPYC2F(dims, _da_dims, ndim); COPYC2F(reqdims, _da_reqdims, ndim); ttype = (Integer)type; nndim = (Integer)ndim; mmode = (Integer)mode; st = ndrai_create(&ttype, &nndim, _da_dims, name, filename, &mmode, _da_reqdims, &dd_a); *d_a = (int)dd_a; if(st==TRUE) return 1; else return 0; } int NDRA_Create_config(int type, int ndim, dra_size_t dims[], char *name, char* filename, int mode, dra_size_t reqdims[], int numfiles, int ioprocs, int *d_a) { Integer ttype, nndim, dd_a, mmode; Integer nnumfiles, iioprocs; logical st; if (ndim>MAXDIM) return 0; COPYC2F(dims, _da_dims, ndim); COPYC2F(reqdims, _da_reqdims, ndim); ttype = (Integer)type; nndim = (Integer)ndim; mmode = (Integer)mode; nnumfiles = (Integer)numfiles; iioprocs = (Integer)ioprocs; st = ndrai_create_config(&ttype, &nndim, _da_dims, name, filename, &mmode, _da_reqdims, &nnumfiles, &iioprocs, &dd_a); *d_a = (int)dd_a; if(st==TRUE) return 1; else return 0; } int NDRA_Inquire(int d_a, int *type, int *ndim, dra_size_t dims[], char *name, char* filename) { Integer dd_a, ttype, nndim, status; dd_a = (Integer)d_a; status = ndrai_inquire(&dd_a, &ttype, &nndim, _da_dims, name, filename); COPYF2C_DRA(_da_dims, dims, nndim); *type = (int)ttype; *ndim = (int)nndim; return (int)status; } int NDRA_Write(int g_a, int d_a, int *request) { Integer status, gg_a, dd_a, rrequest; gg_a = (Integer)g_a; dd_a = (Integer)d_a; rrequest = (Integer)*request; status = ndra_write_(&gg_a, &dd_a, &rrequest); *request = (int)rrequest; return (int)status; } int NDRA_Read(int g_a, int d_a, int *request) { Integer status, gg_a, dd_a, rrequest; gg_a = (Integer)g_a; dd_a = (Integer)d_a; rrequest = (Integer)*request; status = ndra_read_(&gg_a, &dd_a, &rrequest); *request = (int)rrequest; return (int)status; } int NDRA_Write_section(logical transp, int g_a, int glo[], int ghi[], int d_a, dra_size_t dlo[], dra_size_t dhi[], int *request) { Integer status; Integer ttransp, gg_a, dd_a, rrequest; Integer ndim; ttransp = (Integer)transp; gg_a = (Integer)g_a; ndim = pnga_ndim(gg_a); dd_a = (Integer)d_a; rrequest = (Integer)*request; COPYINDEX_C2F(glo, _ga_lo, ndim); COPYINDEX_C2F(ghi, _ga_hi, ndim); COPYINDEX_C2F(dlo, _da_lo, ndim); COPYINDEX_C2F(dhi, _da_hi, ndim); status = ndra_write_section_(&ttransp, &gg_a, _ga_lo, _ga_hi, &dd_a, _da_lo, _da_hi, &rrequest); *request = (int)rrequest; return (int)status; } int NDRA_Read_section(logical transp, int g_a, int glo[], int ghi[], int d_a, dra_size_t dlo[], dra_size_t dhi[], int *request) { Integer status; Integer ttransp, gg_a, dd_a, rrequest; Integer ndim; ttransp = (Integer)transp; gg_a = (Integer)g_a; ndim = pnga_ndim(gg_a); dd_a = (Integer)d_a; rrequest = (Integer)*request; COPYINDEX_C2F(glo, _ga_lo, ndim); COPYINDEX_C2F(ghi, _ga_hi, ndim); COPYINDEX_C2F(dlo, _da_lo, ndim); COPYINDEX_C2F(dhi, _da_hi, ndim); status = ndra_read_section_(&ttransp, &gg_a, _ga_lo, _ga_hi, &dd_a, _da_lo, _da_hi, &rrequest); *request = (int)rrequest; return (int)status; } int DRA_Init(int max_arrays, double max_array_size, double total_disk_space, double max_memory) { Integer mmax_arrays, status; DoublePrecision mmax_array_size, ttotal_disk_space, mmax_memory; mmax_arrays = (Integer)max_arrays; mmax_array_size = (DoublePrecision)max_array_size; ttotal_disk_space = (DoublePrecision)total_disk_space; mmax_memory = (DoublePrecision)max_memory; status = dra_init_(&mmax_arrays, &mmax_array_size, &ttotal_disk_space, &mmax_memory); return (int)status; } int DRA_Terminate() { Integer status; status = dra_terminate_(); return (int)status; } int DRA_Open(char* filename, int mode, int *d_a) { Integer mmode, dd_a, status; mmode = (Integer)mode; status = drai_open(filename, &mmode, &dd_a); *d_a = (int)dd_a; return (int)status; } int DRA_Probe(int request, int *compl_status) { Integer rrequest, ccompl_status, status; rrequest = (Integer)request; status = dra_probe_(&rrequest, &ccompl_status); *compl_status = (int)ccompl_status; return (int)status; } void DRA_Set_debug(logical flag) { dra_set_debug_(&flag); return; } void DRA_Print_internals(int d_a) { Integer dd_a; dd_a = (Integer)d_a; dra_print_internals_(&dd_a); return; } void DRA_Set_default_config(int numfiles, int numioprocs) { Integer nfiles, nprocs; nfiles = (Integer)numfiles; nprocs = (Integer)numioprocs; dra_set_default_config_(&nfiles, &nprocs); return; } int DRA_Wait(int request) { Integer rrequest, status; rrequest = (Integer)request; status = dra_wait_(&rrequest); return (int)status; } int DRA_Delete(int d_a) { Integer dd_a, status; dd_a = (Integer)d_a; status = dra_delete_(&dd_a); return (int)status; } int DRA_Close(int d_a) { Integer dd_a, status; dd_a = (Integer)d_a; status = dra_close_(&dd_a); return (int)status; } void DRA_Flick() { dra_flick_(); } ga-5-3/pario/dra/dbg_read.c0000640005473000001440000000374411633461607014366 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include "macommon.h" #include "global.h" #include "dra.h" #include "drap.h" #define LEN 10 int main(int argc, char **argv) { int from, to, type; Integer idata[LEN]; #if 0 int fd; #endif Integer i, ii, imax, offset, status; DoublePrecision ddata[LEN]; if(argc < 2){ printf("program prints data from a binary file to screen\n"); printf("usage: dbg_read.x \n"); printf("type: 1 - integer 2 - double \n -range of elements (0, ...)\n"); return(1); } type = atoi(argv[2]); from = atoi(argv[3]); to = atoi(argv[4]); if(from < 0 || to < from) {printf("range error\n"); return 1;} #if 0 if(!(fd = dra_el_open(argv[1],DRA_R))){printf("not found\n"); return 1;} #else /* TODO This must be an old test program using an old API... * consider removing this program. */ return 1; #endif switch (type){ case 1: for(i=from; i<= to; i+= LEN){ imax = PARIO_MIN(i+LEN-1,to); offset = sizeof(Integer)*i; #if 0 status=dra_el_read(idata, sizeof(Integer), imax -i+1, fd, offset); #else status = 1; #endif if(!status)printf("error read failed\n"); for(ii=0;ii #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STDIO_H # include #endif #include "buffers.h" #include "dra.h" #include "draf2c.h" #include "drap.h" #include "global.h" #include "ga-papi.h" #include "macdecls.h" #define WALLTIME 0 #if WALLTIME # include "walltime.c" #endif /************************** constants ****************************************/ #define DRA_FAIL (Integer)1 #define COLUMN 1 #define ROW 0 #define ON 1 #define OFF 0 #define ILO 0 #define IHI 1 #define JLO 2 #define JHI 3 #define DRA_OP_WRITE 777 #define DRA_OP_READ 888 #define PROBE 111 #define WAIT 222 #define MAX_REQ 5 /** message type/tag used by DRA */ #define DRA_TYPE_GSM 32760 - 6 #define DRA_TYPE_GOP 32760 - 7 #define INFINITE_NUM_PROCS 8094 #define CLIENT_TO_SERVER 2 /* #define DRA_DBLE_BUFFER */ #if defined(SP1)|| defined(SP) || defined(LAPI) # define DRA_NUM_IOPROCS 8 #else # define DRA_NUM_IOPROCS 1 #endif #ifndef DRA_NUM_FILE_MGR # define DRA_NUM_FILE_MGR DRA_NUM_IOPROCS #endif #define DRA_BUF_SIZE BUF_SIZE #define DEF_MAX_ARRAYS 16 #define DRA_MAX_ARRAYS 1024 #define EPS_SEARCH 100 #define LOAD 1 #define STORE 2 #define TRANS 1 #define NOTRANS 0 /*#define DEBUG 1*/ /*#define CLEAR_BUF 1*/ /***************************** Global Data ***********************************/ /** Default number of IO procs */ Integer _dra_io_procs; /** Default number of files to use on open file systems */ Integer _dra_number_of_files; /** array of struct for basic info about DRA arrays*/ disk_array_t *DRA; buf_context_t buf_ctxt; /**< buffer context handle */ int nbuf = 4; /**< number of buffers to be used */ Integer _max_disk_array; /**< max number of disk arrays open at a time */ logical dra_debug_flag; /**< globally defined debug parameter */ request_t Requests[MAX_REQ]; int num_pending_requests=0; Integer _dra_turn=0; int Dra_num_serv=DRA_NUM_IOPROCS; /****************************** Macros ***************************************/ #define dai_sizeofM(_type) MA_sizeof(_type, 1, MT_C_CHAR) #define dai_check_typeM(_type) if (_type != C_DBL && _type != C_INT \ && _type != C_LONG && _type != C_DCPL && _type != C_FLOAT && _type != C_SCPL) \ dai_error("invalid type ",_type) #define dai_check_handleM(_handle, msg) \ {\ if((_handle+DRA_OFFSET)>=_max_disk_array || (_handle+DRA_OFFSET)<0) \ {fprintf(stderr,"%s, %ld --",msg, (long)_max_disk_array);\ dai_error("invalid DRA handle",_handle);} \ if( DRA[(_handle+DRA_OFFSET)].actv == 0) \ {fprintf(stderr,"%s:",msg);\ dai_error("disk array not active",_handle);} \ } #define dai_check_rangeM(_lo, _hi, _dim, _err_msg) \ if(_lo < (Integer)1 || _lo > _dim ||_hi < _lo || _hi > _dim) \ dai_error(_err_msg, _dim) #define ga_get_sectM(sect, _buf, _ld)\ pnga_get(sect.handle, sect.lo, sect.hi, _buf, &_ld) #define ga_put_sectM(sect, _buf, _ld)\ pnga_put(sect.handle, sect.lo, sect.hi, _buf, &_ld) #define fill_sectionM(sect, _hndl, _ilo, _ihi, _jlo, _jhi) \ { \ sect.handle = _hndl;\ sect.ndim = 2; \ sect.lo[0] = _ilo;\ sect.hi[0] = _ihi;\ sect.lo[1] = _jlo;\ sect.hi[1] = _jhi;\ } #define sect_to_blockM(ds_a, CR)\ {\ Integer hndl = (ds_a).handle+DRA_OFFSET;\ Integer br = ((ds_a).lo[0]-1)/DRA[hndl].chunk[0];\ Integer bc = ((ds_a).lo[1]-1)/DRA[hndl].chunk[1];\ Integer R = (DRA[hndl].dims[0] + DRA[hndl].chunk[0] -1)/DRA[hndl].chunk[0];\ *(CR) = bc * R + br;\ } #define block_to_sectM(ds_a, CR)\ {\ Integer hndl = (ds_a)->handle+DRA_OFFSET;\ Integer R = (DRA[hndl].dims[0] + DRA[hndl].chunk[0]-1)/DRA[hndl].chunk[0];\ Integer br = (CR)%R;\ Integer bc = ((CR) - br)/R;\ (ds_a)-> lo[0]= br * DRA[hndl].chunk[0] +1;\ (ds_a)-> lo[1]= bc * DRA[hndl].chunk[1] +1;\ (ds_a)-> hi[0]= (ds_a)->lo[0] + DRA[hndl].chunk[0];\ (ds_a)-> hi[1]= (ds_a)->lo[1] + DRA[hndl].chunk[1];\ if( (ds_a)->hi[0] > DRA[hndl].dims[0]) (ds_a)->hi[0] = DRA[hndl].dims[0];\ if( (ds_a)->hi[1] > DRA[hndl].dims[1]) (ds_a)->hi[1] = DRA[hndl].dims[1];\ } #define INDEPFILES(x) (DRA[(x)+DRA_OFFSET].indep) #define ITERATOR_2D(i,j, base, ds_chunk)\ for(j = ds_chunk.lo[1], base=0, jj=0; j<= ds_chunk.hi[1]; j++,jj++)\ for(i = ds_chunk.lo[0], ii=0; i<= ds_chunk.hi[0]; i++,ii++,base++) #define COPY_SCATTER(ADDR_BASE, TYPE, ds_chunk)\ ITERATOR_2D(i,j, base, ds_chunk) \ ADDR_BASE[base+vindex] = ((TYPE*)buffer)[ldb*jj + ii] #define COPY_GATHER(ADDR_BASE, TYPE, ds_chunk)\ for(i=0; i< nelem; i++){\ Integer ldc = ds_chunk.hi[0] - ds_chunk.lo[0]+1;\ base = INT_MB[pindex+i]; jj = base/ldc; ii = base%ldc;\ ((TYPE*)buffer)[ldb*jj + ii] = ADDR_BASE[i+vindex];\ } #define COPY_TYPE(OPERATION, MATYPE, ds_chunk)\ switch(MATYPE){\ case C_DBL: COPY_ ## OPERATION(DBL_MB,double,ds_chunk);break;\ case C_INT: COPY_ ## OPERATION(INT_MB,int,ds_chunk);break;\ case C_DCPL: COPY_ ## OPERATION(DCPL_MB,DoubleComplex,ds_chunk);break;\ case C_SCPL: COPY_ ## OPERATION(SCPL_MB,SingleComplex,ds_chunk);break;\ case C_FLOAT: COPY_ ## OPERATION(FLT_MB,float,ds_chunk);\ } #define nsect_to_blockM(ds_a, CR) \ { \ Integer hndl = (ds_a).handle+DRA_OFFSET;\ Integer _i, _ndim = DRA[hndl].ndim; \ Integer _R, _b; \ *(CR) = 0; \ _R = 0; \ for (_i=_ndim-1; _i >= 0; _i--) { \ _b = ((ds_a).lo[_i]-1)/DRA[hndl].chunk[_i]; \ _R = (DRA[hndl].dims[_i]+DRA[hndl].chunk[_i]-1)/DRA[hndl].chunk[_i];\ *(CR) = *(CR) * _R + _b; \ } \ } #define dai_dest_indices_1d_M(index, id, jd, ilod, jlod, ldd) \ { \ Integer _index_;\ _index_ = (is)-(ilos);\ *(id) = (_index_)%(ldd) + (ilod);\ *(jd) = (_index_)/(ldd) + (jlod);\ } #define dai_dest_indicesM(is, js, ilos, jlos, lds, id, jd, ilod, jlod, ldd)\ { \ Integer _index_;\ _index_ = (lds)*((js)-(jlos)) + (is)-(ilos);\ *(id) = (_index_)%(ldd) + (ilod);\ *(jd) = (_index_)/(ldd) + (jlod);\ } #define nga_get_sectM(sect, _buf, _ld, hdl)\ if (hdl != NULL)\ pnga_nbget(sect.handle, sect.lo, sect.hi, _buf, _ld, hdl);\ else\ pnga_get(sect.handle, sect.lo, sect.hi, _buf, _ld); #define nga_put_sectM(sect, _buf, _ld, hdl)\ if (hdl != NULL)\ pnga_nbput(sect.handle, sect.lo, sect.hi, _buf, _ld, hdl);\ else\ pnga_put(sect.handle, sect.lo, sect.hi, _buf, _ld); #define ndai_dest_indicesM(ds_chunk, ds_a, gs_chunk, gs_a) \ {\ Integer _i; \ Integer _ndim = ds_a.ndim; \ for (_i=0; _i<_ndim; _i++) { \ gs_chunk.lo[_i] = gs_a.lo[_i] + ds_chunk.lo[_i]- ds_a.lo[_i]; \ gs_chunk.hi[_i] = gs_a.lo[_i] + ds_chunk.hi[_i]- ds_a.lo[_i]; \ } \ } #define ndai_trnsp_dest_indicesM(ds_chunk, ds_a, gs_chunk, gs_a) \ {\ Integer _i; \ Integer _ndim = ds_a.ndim; \ for (_i=0; _i<_ndim; _i++) { \ gs_chunk.lo[_ndim-1-_i] = gs_a.lo[_ndim-1-_i] \ + ds_chunk.lo[_i]- ds_a.lo[_i]; \ gs_chunk.hi[_ndim-1-_i] = gs_a.lo[_ndim-1-_i] \ + ds_chunk.hi[_i]- ds_a.lo[_i]; \ } \ } /** Simple sort using straight insertion */ #define block_sortM(_ndim, _block_orig, _block_map) \ {\ Integer _i,_j,_it,_bt; \ Integer _block_tmp[MAXDIM]; \ for (_i=0; _i < (_ndim); _i++) { \ _block_map[_i] = _i; \ _block_tmp[_i] = _block_orig[_i]; \ } \ for (_j=(_ndim)-2; _j >= 0; _j--) { \ _i = _j + 1; \ _bt = _block_tmp[_j]; \ _it = _block_map[_j]; \ while (_i < (_ndim) && _bt < _block_tmp[_i]) { \ _block_tmp[_i-1] = _block_tmp[_i]; \ _block_map[_i-1] = _block_map[_i]; \ _i++; \ }\ _block_tmp[_i-1] = _bt; \ _block_map[_i-1] = _it; \ }\ } #define nfill_sectionM(sect, _hndl, _ndim, _lo, _hi) \ { \ Integer _i; \ sect.handle = _hndl; \ sect.ndim = _ndim; \ for (_i=0; _i<_ndim; _i++) { \ sect.lo[_i] = _lo[_i]; \ sect.hi[_i] = _hi[_i]; \ } \ } #define nblock_to_sectM(ds_a, _CR) \ {\ Integer _i, _b[MAXDIM], _C = (_CR); \ Integer _hndl = (ds_a)->handle+DRA_OFFSET; \ Integer _R = (DRA[_hndl].dims[0]+DRA[_hndl].chunk[0]-1)/DRA[_hndl].chunk[0]; \ (ds_a)->ndim = DRA[_hndl].ndim; \ _b[0] = _C%_R; \ for (_i=1; _ilo[_i] = _b[_i]*DRA[_hndl].chunk[_i] + 1; \ (ds_a)->hi[_i] = (ds_a)->lo[_i] + DRA[_hndl].chunk[_i] - 1; \ if ((ds_a)->hi[_i] > DRA[_hndl].dims[_i]) \ (ds_a)->hi[_i] = DRA[_hndl].dims[_i]; \ } \ } #define nblock_to_indicesM(_index,_ndim,_block_dims,_CC) \ { \ Integer _i, _C=(_CC); \ _index[0] = _C%_block_dims[0]; \ for (_i=1; _i<(_ndim); _i++) { \ _C = (_C - _index[_i-1])/_block_dims[_i-1]; \ _index[_i] = _C%_block_dims[_i]; \ } \ } #define ndai_check_rangeM(_lo, _hi, _ndim, _dims, _err_msg) \ { \ int _range_ok = 1, _i; \ for (_i=0; _i < (_ndim); _i++) { \ if (_lo[_i] < 1 || _lo[_i] > _dims[_i] || _hi[_i] < _lo[_i] \ || _hi[_i] > _dims[_i] ) _range_ok = 0; \ } \ if(!_range_ok) dai_error(_err_msg, _dim); \ } char dummy_fname[DRA_MAX_FNAME]; /*****************************************************************************/ /** * determines if write operation to a disk array is allowed */ int dai_write_allowed(Integer d_a) { Integer handle = d_a+DRA_OFFSET; if(DRA[handle].mode == DRA_W || DRA[handle].mode == DRA_RW) return 1; else return 0; } /** * determines if read operation from a disk array is allowed */ int dai_read_allowed(Integer d_a) { Integer handle = d_a+DRA_OFFSET; if(DRA[handle].mode == DRA_R || DRA[handle].mode == DRA_RW) return 1; else return 0; } /** * number of processes that could perform I/O */ Integer dai_io_procs(Integer d_a) { Integer handle = d_a+DRA_OFFSET; Integer num; /* this one of many possibilities -- depends on the system */ /* #ifdef _CRAYMPP num = DRA_NUM_IOPROCS; #else num = (INDEPFILES(d_a)) ? INFINITE_NUM_PROCS: DRA_NUM_IOPROCS; #endif */ if (INDEPFILES(d_a)) { num = pnga_cluster_nnodes(); } else { num = DRA[handle].ioprocs; } return( PARIO_MIN( pnga_nnodes(), num)); } /** * Translation of DRA create/opening modes to ELIO create/open * mode. DRA modes map directly to ELIO modes, except that write-only * DRAs are backed by read-write ELIO files. */ int dai_elio_mode(int dra_mode) { int emode = dra_mode; /* dra modes map to elio mode*/ if(dra_mode == DRA_W) { /*except W, which translate to read-write files*/ emode = ELIO_RW; } return emode; } /** * rank of calling process in group of processes that could perform I/O * a negative value means that this process doesn't do I/O */ Integer dai_io_nodeid(Integer d_a) { Integer handle = d_a+DRA_OFFSET; Integer me = pnga_nodeid(); Integer pid, id, nid, nnodes,nprocs; Integer nodeid = pnga_cluster_nodeid(); Integer zero = 0; /* again, one of many possibilities: * if proc id beyond I/O procs number, negate it */ if (INDEPFILES(d_a)) { if(me == pnga_cluster_procid(nodeid, zero)) me = nodeid; else me = -1; } else { if (DRA[handle].ioprocs == 1) { if (me == 0) return me; else return -1; } else { nnodes = pnga_cluster_nnodes(); nprocs = pnga_cluster_nprocs(nodeid); pid = me % nprocs; nid = (me - pid)/nprocs; id = pid * nnodes + nid; if (id < DRA[handle].ioprocs) return id; else return -1; } } /* if (me >= dai_io_procs(d_a)) me = -me;*/ return (me); } /** * determines if I/O process participates in file management (create/delete) */ Integer dai_io_manage(Integer d_a) { Integer me = dai_io_nodeid(d_a); if(me >= 0 ) return (1); else return (0); } /** * select one master process for each file associated with d_a */ Integer dai_file_master(Integer d_a) { Integer handle = d_a+DRA_OFFSET; if(dai_io_nodeid(d_a)<0)return 0; /* for indep files each I/O process has its own file * for shared file 0 is the master */ if(INDEPFILES(d_a) || DRA[handle].numfiles > 1 || dai_io_nodeid(d_a) == 0 ) return 1; else return 0; } void dai_callback(int op, int transp, section_t gs_a, section_t ds_a, section_t ds_chunk, Integer ld[], char *buf, Integer req) { int i; buf_info *bi; bi = (buf_info*) buf; if (bi->callback==ON) dai_error("DRA: callback not cleared for a buffer",0); bi->callback = ON; bi->args.op = op; bi->args.transp = transp; bi->args.gs_a = gs_a; bi->args.ds_a = ds_a; bi->args.ds_chunk = ds_chunk; for (i=0; iargs.ld[i] = ld[i]; } /** * function to release buffers by completing the transfers * this function will be passed on as a parameter to a buffer management layer */ void wait_buf(char *buf); /** * INITIALIZE DISK ARRAY DATA STRUCTURES * * @param max_arrays[in] * @param max_array_size[in] * @param tot_disk_space[in] * @param max_memory[in] */ Integer FATR dra_init_( Integer *max_arrays, DoublePrecision *max_array_size, DoublePrecision *tot_disk_space, DoublePrecision *max_memory) { int i, buf_size; pnga_sync(); if(*max_arrays<-1 || *max_arrays> DRA_MAX_ARRAYS) dai_error("dra_init: incorrect max number of arrays",*max_arrays); _max_disk_array = (*max_arrays==-1) ? DEF_MAX_ARRAYS: *max_arrays; Dra_num_serv = drai_get_num_serv(); DRA = (disk_array_t*)malloc(sizeof(disk_array_t)* (int)*max_arrays); if(!DRA) dai_error("dra_init: memory alocation failed\n",0); for(i=0; i<_max_disk_array ; i++)DRA[i].actv=0; for(i=0; i PARIO_MIN(1,trial-EPS_SEARCH); bt--){ eps1 = prod%bt; if(eps1 < eps0){ /* better solution found */ b0 = bt; eps0 = eps1; } } *a = prod/b0; *b = b0; } /** * compute chunk parameters for layout of arrays on the disk * ---- a very simple algorithm to be refined later ---- * @param elem_size[in] Size of stored data * @param block1[in] Estimated size of request in dimension 1 * @param block2[in] Estimated size of request in dimension 2 * @param dim1[in] Size of DRA in dimension 1 * @param dim2[in] Size of DRA in dimension 2 * @param chunk1[out] Data block size in dimension 1? * @param chunk2[out] Data block size in dimension 2? */ void dai_chunking(Integer elem_size, Integer block1, Integer block2, Integer dim1, Integer dim2, Integer *chunk1, Integer *chunk2) { Integer patch_size; *chunk1 = *chunk2 =0; if(block1 <= 0 && block2 <= 0){ *chunk1 = dim1; *chunk2 = dim2; }else if(block1 <= 0){ *chunk2 = block2; *chunk1 = PARIO_MAX(1, DRA_BUF_SIZE/(elem_size* (*chunk2))); }else if(block2 <= 0){ *chunk1 = block1; *chunk2 = PARIO_MAX(1, DRA_BUF_SIZE/(elem_size* (*chunk1))); }else{ *chunk1 = block1; *chunk2 = block2; } /* need to correct chunk size to fit chunk1 x chunk2 request in buffer*/ patch_size = (*chunk1)* (*chunk2)*elem_size; if (patch_size > ((Integer)DRA_BUF_SIZE)){ if( *chunk1 == 1) *chunk2 = DRA_BUF_SIZE/elem_size; else if( *chunk2 == 1) *chunk1 = DRA_BUF_SIZE/elem_size; else { double ratio = ((double)patch_size)/((double)DRA_BUF_SIZE); /* smaller chunk to be scaled first */ if(*chunk1 < *chunk2){ dai_correct_chunking(chunk2,chunk1,DRA_BUF_SIZE/elem_size,ratio); }else{ dai_correct_chunking(chunk1,chunk2,DRA_BUF_SIZE/elem_size,ratio); } } } #ifdef DEBUG printf("\n%d:CREATE chunk=(%d,%d) elem_size=%d req=(%d,%d) buf=%d\n", pnga_nodeid(),*chunk1, *chunk2, elem_size, block1, block2, DRA_DBL_BUF_SIZE); fflush(stdout); #endif } /** * get a new handle for disk array */ Integer dai_get_handle(void) { Integer dra_handle =-1, candidate = 0; do{ if(!DRA[candidate].actv){ dra_handle=candidate; DRA[candidate].actv =1; } candidate++; }while(candidate < _max_disk_array && dra_handle == -1); return(dra_handle); } /** * release handle -- makes array inactive */ void dai_release_handle(Integer *handle) { DRA[*handle+DRA_OFFSET].actv =0; *handle = 0; } /** * find offset in file for (ilo,ihi) element */ void dai_file_location(section_t ds_a, Off_t* offset) { Integer row_blocks, handle=ds_a.handle+DRA_OFFSET, offelem, cur_ld, part_chunk1; if((ds_a.lo[0]-1)%DRA[handle].chunk[0]) dai_error("dai_file_location: not alligned ??",ds_a.lo[0]); row_blocks = (ds_a.lo[0]-1)/DRA[handle].chunk[0];/* # row blocks from top*/ part_chunk1 = DRA[handle].dims[0]%DRA[handle].chunk[0];/*dim1 in part block*/ cur_ld = (row_blocks == DRA[handle].dims[0] / DRA[handle].chunk[0]) ? part_chunk1: DRA[handle].chunk[0]; /* compute offset (in elements) */ if(INDEPFILES(ds_a.handle) || DRA[handle].numfiles > 1) { Integer CR, R; Integer i, num_part_block = 0; Integer ioprocs=dai_io_procs(ds_a.handle); Integer iome = dai_io_nodeid(ds_a.handle); sect_to_blockM(ds_a, &CR); R = (DRA[handle].dims[0] + DRA[handle].chunk[0]-1)/DRA[handle].chunk[0]; for(i = R -1; i< CR; i+=R) if(i%ioprocs == iome)num_part_block++; if(!part_chunk1) part_chunk1=DRA[handle].chunk[0]; offelem = ((CR/ioprocs - num_part_block)*DRA[handle].chunk[0] + num_part_block * part_chunk1 ) * DRA[handle].chunk[1]; /* add offset within block */ offelem += ((ds_a.lo[1]-1) %DRA[handle].chunk[1])*cur_ld; } else { offelem = row_blocks * DRA[handle].dims[1] * DRA[handle].chunk[0]; offelem += (ds_a.lo[1]-1)*cur_ld; } *offset = offelem* dai_sizeofM(DRA[handle].type); } /** * write aligned block of data from memory buffer to d_a */ void dai_put( section_t ds_a, void *buf, Integer ld, io_request_t *id) { Integer handle = ds_a.handle + DRA_OFFSET, elem; Off_t offset; Size_t bytes; /* find location in a file where data should be written */ dai_file_location(ds_a, &offset); if((ds_a.hi[0] - ds_a.lo[0] + 1) != ld) dai_error("dai_put: bad ld",ld); /* since everything is aligned, write data to disk */ elem = (ds_a.hi[0] - ds_a.lo[0] + 1) * (ds_a.hi[1] - ds_a.lo[1] + 1); bytes= (Size_t) elem * dai_sizeofM(DRA[handle].type); if( ELIO_OK != elio_awrite(DRA[handle].fd, offset, buf, bytes, id )) dai_error("dai_put failed", ds_a.handle); } /** * write zero at EOF */ void dai_zero_eof(Integer d_a) { Integer handle = d_a+DRA_OFFSET, nelem; char byte; Off_t offset; byte = (char)0; if(INDEPFILES(d_a) || DRA[handle].numfiles > 1) { Integer CR=0, i=0, nblocks=0; section_t ds_a; /* number of processors that do io */ Integer ioprocs=dai_io_procs(d_a); /* node id of current process (if it does io) */ Integer iome = dai_io_nodeid(d_a); /* total number of blocks in the disk resident array */ nblocks = ((DRA[handle].dims[0] + DRA[handle].chunk[0]-1)/DRA[handle].chunk[0]) * ((DRA[handle].dims[1] + DRA[handle].chunk[1]-1)/DRA[handle].chunk[1]); fill_sectionM(ds_a, d_a, 0, 0, 0, 0); /* search for the last block for each I/O processor */ for(i = 0; i 1) { sprintf(dummy_fname,"%s.%ld",DRA[handle].fname,(long)dai_io_nodeid(*d_a)); DRA[handle].fd = elio_open(dummy_fname,emode, ELIO_PRIVATE); }else{ DRA[handle].fd = elio_open(DRA[handle].fname,emode, ELIO_SHARED); } if(DRA[handle].fd ==NULL)dai_error("dra_open failed (null)", pnga_nodeid()); if(DRA[handle].fd->fd ==-1)dai_error("dra_open failed (-1)", pnga_nodeid()); } #ifdef DEBUG printf("\n%d:OPEN chunking=(%d,%d) type=%d buf=%d\n", pnga_nodeid(),DRA[handle].chunk[0], DRA[handle].chunk[1], DRA[handle].type, DRA_DBL_BUF_SIZE); fflush(stdout); #endif pnga_sync(); /* printf("FILE OPENED!!\n"); */ return(ELIO_OK); } /** * CLOSE AN ARRAY AND SAVE IT ON THE DISK */ Integer FATR dra_close_(Integer* d_a) /* input:DRA handle*/ { Integer handle = *d_a+DRA_OFFSET; int rc; pnga_sync(); dai_check_handleM(*d_a, "dra_close"); if(dai_io_manage(*d_a)) if(ELIO_OK != (rc=elio_close(DRA[handle].fd))) dai_error("dra_close: close failed",rc); dai_release_handle(d_a); pnga_sync(); return(ELIO_OK); } /** * decompose [ilo:ihi, jlo:jhi] into aligned and unaligned DRA subsections * * * section [ilo:ihi, jlo:jhi] is decomposed into a number of * 'aligned' and 'unaligned' (on chunk1/chunk2 bounday) subsections * depending on the layout of the 2D array on the disk; * * 'cover' subsections correspond to 'unaligned' subsections and * extend them to aligned on chunk1/chunk2 boundaries; * * disk I/O will be actually performed on 'aligned' and * 'cover' instead of 'unaligned' subsections */ void dai_decomp_section( section_t ds_a, Integer aligned[][2*MAXDIM], int *na, Integer cover[][2*MAXDIM], Integer unaligned[][2*MAXDIM], int *nu) { Integer a=0, u=0, handle = ds_a.handle+DRA_OFFSET, off, chunk_units, algn_flag; aligned[a][ ILO ] = ds_a.lo[0]; aligned[a][ IHI ] = ds_a.hi[0]; aligned[a][ JLO ] = ds_a.lo[1]; aligned[a][ JHI ] = ds_a.hi[1]; switch (DRA[handle].layout){ case COLUMN : /* need to check row alignment only */ algn_flag = ON; /* has at least one aligned subsection */ /* top of section */ off = (ds_a.lo[0] -1) % DRA[handle].chunk[0]; if(off){ if(MAX_UNLG<= u) dai_error("dai_decomp_sect:insufficient nu",u); chunk_units = (ds_a.lo[0] -1) / DRA[handle].chunk[0]; cover[u][ ILO ] = chunk_units*DRA[handle].chunk[0] + 1; cover[u][ IHI ] = PARIO_MIN(cover[u][ ILO ] + DRA[handle].chunk[0]-1, DRA[handle].dims[0]); unaligned[u][ ILO ] = ds_a.lo[0]; unaligned[u][ IHI ] = PARIO_MIN(ds_a.hi[0],cover[u][ IHI ]); unaligned[u][ JLO ] = cover[u][ JLO ] = ds_a.lo[1]; unaligned[u][ JHI ] = cover[u][ JHI ] = ds_a.hi[1]; if(cover[u][ IHI ] < ds_a.hi[0]){ /* cover subsection ends above ihi */ if(MAX_ALGN<=a) dai_error("dai_decomp_sect: na too small",a); aligned[a][ ILO ] = cover[u][ IHI ]+1; }else{ /* cover subsection includes ihi */ algn_flag = OFF; } u++; } /* bottom of section */ off = ds_a.hi[0] % DRA[handle].chunk[0]; if(off && (ds_a.hi[0] != DRA[handle].dims[0]) && (algn_flag == ON)){ if(MAX_UNLG<=u) dai_error("dai_decomp_sect:insufficient nu",u); chunk_units = ds_a.hi[0] / DRA[handle].chunk[0]; cover[u][ ILO ] = chunk_units*DRA[handle].chunk[0] + 1; cover[u][ IHI ] = PARIO_MIN(cover[u][ ILO ] + DRA[handle].chunk[0]-1, DRA[handle].dims[0]); unaligned[u][ ILO ] = cover[u][ ILO ]; unaligned[u][ IHI ] = ds_a.hi[0]; unaligned[u][ JLO ] = cover[u][ JLO ] = ds_a.lo[1]; unaligned[u][ JHI ] = cover[u][ JHI ] = ds_a.hi[1]; aligned[a][ IHI ] = PARIO_MAX(1,unaligned[u][ ILO ]-1); algn_flag=(DRA[handle].chunk[0] == DRA[handle].dims[0])?OFF:ON; u++; } *nu = (int)u; if(aligned[0][ IHI ]-aligned[0][ ILO ] < 0) algn_flag= OFF; *na = (algn_flag== OFF)? 0: 1; break; case ROW : /* we need to check column alignment only */ default: dai_error("dai_decomp_sect: ROW layout not yet implemented", DRA[handle].layout); } } /** * given current (i,j) compute (ni, nj) - next loop index * o - outermost loop, i- innermost loop * iinc increment for i * oinc increment for o */ int dai_next2d(Integer* i, Integer imin, Integer imax, Integer iinc, Integer* o, Integer omin, Integer omax, Integer oinc) { int retval; if (*o == 0 || *i == 0) { /* to handle initial out-of range indices */ *o = omin; *i = imin; } else { *i = *i + iinc; } if (*i > imax) { *i = imin; *o += oinc; } retval = (*o <= omax); return retval; } /** * compute next chunk of array to process */ int dai_next_chunk(Integer req, Integer* list, section_t* ds_chunk) { Integer handle = ds_chunk->handle+DRA_OFFSET; int retval; if(INDEPFILES(ds_chunk->handle) || DRA[handle].numfiles > 1) if(ds_chunk->lo[1] && DRA[handle].chunk[1]>1) ds_chunk->lo[1] -= (ds_chunk->lo[1] -1) % DRA[handle].chunk[1]; retval = dai_next2d(&ds_chunk->lo[0], list[ ILO ], list[ IHI ], DRA[handle].chunk[0], &ds_chunk->lo[1], list[ JLO ], list[ JHI ], DRA[handle].chunk[1]); if(!retval) return(retval); ds_chunk->hi[0] = PARIO_MIN(list[ IHI ], ds_chunk->lo[0] + DRA[handle].chunk[0] -1); ds_chunk->hi[1] = PARIO_MIN(list[ JHI ], ds_chunk->lo[1] + DRA[handle].chunk[1] -1); if(INDEPFILES(ds_chunk->handle) || DRA[handle].numfiles > 1) { Integer jhi_temp = ds_chunk->lo[1] + DRA[handle].chunk[1] -1; jhi_temp -= jhi_temp % DRA[handle].chunk[1]; ds_chunk->hi[1] = PARIO_MIN(ds_chunk->hi[1], jhi_temp); /*this line was absent from older version on bonnie that worked */ if(ds_chunk->lo[1] < list[ JLO ]) ds_chunk->lo[1] = list[ JLO ]; } return 1; } int dai_myturn(section_t ds_chunk) { /* Integer handle = ds_chunk.handle+DRA_OFFSET; */ Integer ioprocs = dai_io_procs(ds_chunk.handle); Integer iome = dai_io_nodeid(ds_chunk.handle); /* if(INDEPFILES(ds_chunk.handle) || DRA[handle].numfiles > 1){ */ /* compute cardinal number for the current chunk */ nsect_to_blockM(ds_chunk, &_dra_turn); /* }else{ _dra_turn++; } */ return ((_dra_turn%ioprocs) == iome); } /** * print routine for debugging purposes only (double) */ void dai_print_buf(double *buf, Integer ld, Integer rows, Integer cols) { int i,j; printf("\n ld=%ld rows=%ld cols=%ld\n",(long)ld,(long)rows,(long)cols); for (i=0; i 1) { itmp = i; index[1] = itmp%ldg[1]; for (j=2; j 1) { itmp = i; index[1] = itmp%ldg[1]; for (j=2; jcallback==OFF) return; bi->callback = OFF; arg = &(bi->args); /* bail if there is no valid global array handle */ if (arg->gs_a.handle == 0) return; buffer = (char*) (buf + sizeof(buf_info)); if (caller == WAIT) {/* call blocking nga_move() */ nga_move(arg->op, arg->transp, arg->gs_a, arg->ds_a, arg->ds_chunk, buffer, arg->ld, NULL); free_buf(&buf_ctxt, buf); } else if (caller == PROBE) /* call non-blocking nga_move() */ nga_move(arg->op, arg->transp, arg->gs_a, arg->ds_a, arg->ds_chunk, buffer, arg->ld, &(bi->ga_movhdl)); } /** * wait until buffer space associated with request is avilable */ void dai_wait(Integer req0) { /* Integer req; int ibuf; */ /* wait for all requests to complete on buffer Requests[req].ibuf */ /* ibuf = Requests[req0].ibuf; for(req=0; reqop; io_req = &(bi->io_req); ga_movhdl = &(bi->ga_movhdl); if (op_code == DRA_OP_WRITE) { /* last op is a disk write */ if(elio_probe(io_req, &stat) != ELIO_OK) { ret = DRA_FAIL; k = 0; break; } if (stat != ELIO_DONE) { k = 0; } else { free_buf(&buf_ctxt, bufs[i]); } } else if (op_code == DRA_OP_READ) { /* last op depends on aligned or unaligned transfer */ if (bi->align == 0) { /* unaligned read */ /* last op is a ga move */ if (NGA_NbTest(ga_movhdl) == 0) { /* ga op not complete */ k = 0; } else { /* ga op complete, free this buf */ free_buf(&buf_ctxt, bufs[i]); } } else { /* if aligned read, last op is a disk read */ if(elio_probe(io_req, &stat) != ELIO_OK) { ret = DRA_FAIL; k = 0; break; } if (stat != ELIO_DONE) k = 0; else { /* disk read done, initiate/test ga move */ /* callback=OFF means ga move done/being done */ if (bi->callback == OFF && NGA_NbTest(ga_movhdl) == 0) k = 0; else if (bi->callback == OFF && NGA_NbTest(ga_movhdl) ==1) { free_buf(&buf_ctxt, bufs[i]); } else if (bi->callback == ON) {/* need to call callback */ k = 0; cb[i] = 1; /* mark for a ga move */ } } } } } done = (Integer) k; /* determine global status */ pnga_gop(pnga_type_f2c(MT_F_INT), &done, (Integer)1, op); if(done){ *status = ELIO_DONE; Requests[*request].num_pending = 0; } else { *status = 0; for (i = 0; i < n_buf; i++) if (cb[i]) dai_exec_callback(bufs[i], PROBE); } if (ret == DRA_FAIL) *status = 0; /* basically value of status is irrelevant/undetermined in this case */ return ((Integer) ret); } /** * Returns control to DRA for a VERY short time to improve progress */ void dra_flick_() { Integer req, stat; for (req = 0; req < MAX_REQ; req++) { if (Requests[req].num_pending) { dra_probe_(&req, &stat); } } } /** * INQUIRE PARAMETERS OF EXISTING DISK ARRAY * @param d_a[in] DRA handle * @param type[out] * @param dim1[out] * @param dim2[out] * @param name[out] * @param filename[out] */ Integer drai_inquire(Integer *d_a, Integer *type, Integer *dim1, Integer *dim2, char *name, char *filename) { Integer handle=*d_a+DRA_OFFSET; dai_check_handleM(*d_a,"dra_inquire"); *type = (Integer)DRA[handle].type; *dim1 = DRA[handle].dims[0]; *dim2 = DRA[handle].dims[1]; strcpy(name, DRA[handle].name); strcpy(filename, DRA[handle].fname); return(ELIO_OK); } /** * DELETE DISK ARRAY -- relevant file(s) gone * * @param d_a[in] DRA handle */ Integer FATR dra_delete_(Integer* d_a) { Integer handle = *d_a+DRA_OFFSET; int rc; pnga_sync(); dai_check_handleM(*d_a,"dra_delete"); dai_delete_param(DRA[handle].fname,*d_a); if(dai_io_manage(*d_a)) if(ELIO_OK != (rc=elio_close(DRA[handle].fd))) dai_error("dra_close: close failed",rc); if(dai_file_master(*d_a)) { if(INDEPFILES(*d_a) || DRA[handle].numfiles > 1){ sprintf(dummy_fname,"%s.%ld",DRA[handle].fname,(long)dai_io_nodeid(*d_a)); elio_delete(dummy_fname); } else { elio_delete(DRA[handle].fname); } } dai_release_handle(d_a); pnga_sync(); return(ELIO_OK); } /** * TERMINATE DRA DRATA STRUCTURES */ Integer FATR dra_terminate_() { free(DRA); buf_terminate(&buf_ctxt); pnga_sync(); return(ELIO_OK); } /** * compute chunk parameters for layout of arrays on the disk * ---- a very simple algorithm to be refined later ---- * * @param elem_size[in] Size of individual data element in bytes * @param ndim[in] Dimension of DRA * @param block_orig[in] Estimated size of request in each coordinate * direction. If size is unknown then use -1. * @param dims[in] Size of DRA in each coordinate direction * @param chunk[out] Size of data block size (in elements) in each * coordinate direction */ void ndai_chunking(Integer elem_size, Integer ndim, Integer block_orig[], Integer dims[], Integer chunk[]) { long patch_size, tmp_patch; Integer i, j, block[MAXDIM], block_map[MAXDIM]; double ratio; logical full_buf, some_neg, overfull_buf; /* copy block_orig so that original guesses are not destroyed */ for (i=0; i dims[i]) block[i] = dims[i]; } /* do additional adjustments to see if initial guesses are near some perfect factors of DRA dimensions */ for (i=0; i 0 && block[i] 0) patch_size *= (long)block[i]; else some_neg = TRUE; } if (patch_size*((long)elem_size) > ((long)DRA_BUF_SIZE)) overfull_buf = TRUE; /* map dimension sizes from highest to lowest */ block_sortM(ndim, dims, block_map); /* IO buffer is not full and there are some unspecied chunk dimensions. Set unspecified dimensions equal to block dimensions until buffer is filled. */ if (!full_buf && !overfull_buf && some_neg) { for (i=ndim-1; i>=0; i--) { if (block[block_map[i]] < 0) { tmp_patch = patch_size * ((long)dims[block_map[i]]); if (tmp_patch*elem_size < ((long)DRA_BUF_SIZE)) { patch_size *= (long)dims[block_map[i]]; block[block_map[i]] = dims[block_map[i]]; } else { block[block_map[i]] = (Integer)(DRA_BUF_SIZE/(patch_size*((long)elem_size))); patch_size *= ((long)block[block_map[i]]); full_buf = TRUE; } } } } /* copy block array to chunk array */ for (i=0; i 0) chunk[i] = block[i]; else chunk[i] = 1; } /* If patch overfills buffer, scale patch down until it fits */ if (overfull_buf) { ratio = ((double)DRA_BUF_SIZE) / ((double)(patch_size*((long)elem_size))); ratio = pow(ratio,1.0/((double)ndim)); patch_size = 1; for (i=0; i ((long)DRA_BUF_SIZE)) { /* map chunks from highest to lowest */ block_sortM(ndim, chunk, block_map); for (i=0; i < ndim; i++) { while (chunk[block_map[i]] > 1 && ((long)elem_size)*patch_size > ((long)DRA_BUF_SIZE)) { patch_size /= ((long)chunk[block_map[i]]); chunk[block_map[i]]--; patch_size *= ((long)chunk[block_map[i]]); } } } } /** * find offset in file for (lo,hi) element */ void ndai_file_location(section_t ds_a, Off_t* offset) { Integer handle=ds_a.handle+DRA_OFFSET, ndim, i, j; Integer blocks[MAXDIM], part_chunk[MAXDIM], cur_ld[MAXDIM]; long par_block[MAXDIM]; long offelem=0; ndim = DRA[handle].ndim; for (i=0; i 1) { Integer CR, block_dims[MAXDIM]; Integer index[MAXDIM]; long nelem; Integer i, j; Integer ioprocs = dai_io_procs(ds_a.handle); Integer iome = dai_io_nodeid(ds_a.handle); /* Find index of current block and find number of chunks in each dimension of DRA */ nsect_to_blockM(ds_a, &CR); for (i=0; i= 0) { offelem = 0; for (i=iome; i 1) { Integer CR=0, i=0, nblocks=0; section_t ds_a; /* number of processors that do io */ Integer ioprocs=dai_io_procs(d_a); /* node id of current process (if it does io) */ Integer iome = dai_io_nodeid(d_a); /* total number of blocks in the disk resident array */ nblocks = 1; for (i=0; i 0) { numfiles = numioprocs; } else { numfiles = pnga_cluster_nnodes(); } } if (numioprocs < 1) { numioprocs = numfiles; } *number_of_files = numfiles; *io_procs = numioprocs; if (*number_of_files > pnga_nnodes()) { if (pnga_nodeid() == 0) { printf("WARNING: Number of files requested exceeds number of\n"); printf("processors. Value is reset to number of processors: %ld\n", (long)pnga_nnodes()); } *number_of_files = pnga_nnodes(); } if (*io_procs > 1 && *number_of_files > 1) { if (*io_procs != *number_of_files) { if (pnga_nodeid() == 0) { printf("WARNING: Number of IO processors is not equal to the\n"); printf("number of files requested. Number of IO processors\n"); printf("is reset to number of files: %ld\n",(long)*number_of_files); } *io_procs = *number_of_files; } } if (*number_of_files == 1) { if (*io_procs > pnga_nnodes()) { if (pnga_nodeid() == 0) { printf("WARNING: Number of requested IO processors\n"); printf("exceeds number of available processors. Number of IO\n"); printf("processors reset to the number of available processors %ld\n", (long)pnga_nnodes()); } *io_procs = pnga_nnodes(); } } if (*number_of_files > *io_procs) { if (pnga_nodeid() == 0) { printf("WARNING: Number of files is greater than\n"); printf("number of IO processors. Number of files reset to number of\n"); printf("IO processors: %ld",(long)*io_procs); } *number_of_files = *io_procs; } } /** * CREATE AN N-DIMENSIONAL DISK ARRAY WITH USER SPECIFIED IO CONFIGURATION * * @param type[in] * @param ndim[in] dimension of DRA * @param dims[in] dimensions of DRA * @param name[in] * @param filename[in] * @param mode[in] * @param reqdims[in] dimension of typical request * @param numfiles[in] number of files for DRA * @param numioprocs[in] number of IO procs to use * @param d_a[out] DRA handle */ Integer ndrai_create_config(Integer *type, Integer *ndim, Integer dims[], char *name, char *filename, Integer *mode, Integer reqdims[], Integer *numfiles, Integer *numioprocs, Integer *d_a) { Integer handle, elem_size, ctype, i; int emode; /* convert Fortran to C data type */ ctype = pnga_type_f2c(*type); pnga_sync(); /* if we have an error here, it is fatal */ dai_check_typeM(ctype); for (i=0; i<*ndim; i++) if (dims[i] <=0) dai_error("ndra_create: disk array dimension invalid ", dims[i]); if(strlen(filename)>DRA_MAX_FNAME) dai_error("ndra_create: filename too long", DRA_MAX_FNAME); /*** Get next free DRA handle ***/ if( (handle = dai_get_handle()) == -1) dai_error("ndra_create: too many disk arrays ", _max_disk_array); *d_a = handle - DRA_OFFSET; /*translate DRA mode into ELIO mode*/ emode = dai_elio_mode((int)*mode); /* Determine array configuration */ dai_set_config(*numfiles, *numioprocs, &DRA[handle].numfiles, &DRA[handle].ioprocs); /* determine disk array decomposition */ elem_size = dai_sizeofM(ctype); ndai_chunking( elem_size, *ndim, reqdims, dims, DRA[handle].chunk); /* determine layout -- by row or column */ DRA[handle].layout = COLUMN; /* complete initialization */ for (i=0; i<*ndim; i++) DRA[handle].dims[i] = dims[i]; DRA[handle].ndim = *ndim; DRA[handle].type = ctype; DRA[handle].mode = (int)*mode; strncpy (DRA[handle].fname, filename, DRA_MAX_FNAME); strncpy(DRA[handle].name, name, DRA_MAX_NAME ); dai_write_param(DRA[handle].fname, *d_a); /* create param file */ DRA[handle].indep = dai_file_config(filename); /*check file configuration*/ /* create file */ if(dai_io_manage(*d_a)){ if (INDEPFILES(*d_a) || DRA[handle].numfiles > 1) { sprintf(dummy_fname,"%s.%ld",DRA[handle].fname,(long)dai_io_nodeid(*d_a)); DRA[handle].fd = elio_open(dummy_fname,emode, ELIO_PRIVATE); } else{ DRA[handle].fd = elio_open(DRA[handle].fname,emode, ELIO_SHARED); } if(DRA[handle].fd==NULL)dai_error("ndra_create:failed to open file",0); if(DRA[handle].fd->fd==-1)dai_error("ndra_create:failed to open file",-1); } /* * Need to zero the last element in the array on the disk so that * we never read beyond EOF. * * For multiple component files will stamp every one of them. * */ pnga_sync(); if(dai_file_master(*d_a) && dai_write_allowed(*d_a)) ndai_zero_eof(*d_a); pnga_sync(); return(ELIO_OK); } /** * CREATE AN N-DIMENSIONAL DISK ARRAY * * @param type[in] * @param ndim[in] dimension of DRA * @param dims[][in] dimensions of DRA * @param name[in] * @param filename[in] * @param mode[in] * @param reqdims[in] dimension of typical request * @param d_a[out] DRA handle */ Integer ndrai_create(Integer *type, Integer *ndim, Integer dims[], char *name, char *filename, Integer *mode, Integer reqdims[], Integer *d_a) { Integer ret; Integer files = _dra_number_of_files; Integer procs = _dra_io_procs; ret = ndrai_create_config(type, ndim, dims, name, filename, mode, reqdims, &files, &procs, d_a); return ret; } /** * CREATE A 2-D DISK ARRAY * * @param type[in] * @param dim1[in] * @param dim2[in] * @param name[in] * @param filename[in] * @param mode[in] * @param reqdim1[in] dim1 of typical request * @param reqdim2[in] dim2 of typical request * @param d_a[out] DRA handle */ Integer drai_create(Integer *type, Integer *dim1, Integer *dim2, char *name, char *filename, Integer *mode, Integer *reqdim1, Integer *reqdim2, Integer *d_a) { Integer ndim = 2; Integer dims[2], reqdims[2]; dims[0] = *dim1; dims[1] = *dim2; reqdims[0] = *reqdim1; reqdims[1] = *reqdim2; return ndrai_create(type, &ndim, dims, name, filename, mode, reqdims, d_a); #if 0 Integer handle, elem_size, ctype; int emode; /* convert Fortran to C data type */ ctype = pnga_type_f2c(*type); pnga_sync(); /* if we have an error here, it is fatal */ dai_check_typeM(ctype); if( *dim1 <= 0 ) dai_error("dra_create: disk array dimension1 invalid ", *dim1); else if( *dim2 <= 0) dai_error("dra_create: disk array dimension2 invalid ", *dim2); if(strlen(filename)>DRA_MAX_FNAME) dai_error("dra_create: filename too long", DRA_MAX_FNAME); /* Get next free DRA handle */ if( (handle = dai_get_handle()) == -1) dai_error("dai_create: too many disk arrays ", _max_disk_array); *d_a = handle - DRA_OFFSET; /*translate DRA mode into ELIO mode*/ emode = dai_elio_mode((int)*mode); /* determine disk array decomposition */ elem_size = dai_sizeofM(ctype); dai_chunking( elem_size, *reqdim1, *reqdim2, *dim1, *dim2, &DRA[handle].chunk[0], &DRA[handle].chunk[1]); /* determine layout -- by row or column */ DRA[handle].layout = COLUMN; /* complete initialization */ DRA[handle].dims[0] = *dim1; DRA[handle].dims[1] = *dim2; DRA[handle].ndim = 2; DRA[handle].type = ctype; DRA[handle].mode = (int)*mode; strncpy (DRA[handle].fname, filename, DRA_MAX_FNAME); strncpy(DRA[handle].name, name, DRA_MAX_NAME ); DRA[handle].ioprocs = _dra_io_procs; DRA[handle].numfiles = _dra_number_of_files; dai_write_param(DRA[handle].fname, *d_a); DRA[handle].indep = dai_file_config(filename); /* create file */ if(dai_io_manage(*d_a)){ if (INDEPFILES(*d_a) || DRA[handle].numfiles > 1) { sprintf(dummy_fname,"%s.%ld",DRA[handle].fname,(long)dai_io_nodeid(*d_a)); DRA[handle].fd = elio_open(dummy_fname,emode, ELIO_PRIVATE); } else { DRA[handle].fd = elio_open(DRA[handle].fname,emode, ELIO_SHARED); } if(DRA[handle].fd==NULL)dai_error("dra_create:failed to open file",0); if(DRA[handle].fd->fd==-1)dai_error("dra_create:failed to open file",0); } pnga_sync(); if(dai_file_master(*d_a) && dai_write_allowed(*d_a)) dai_zero_eof(*d_a); pnga_sync(); return(ELIO_OK); #endif } /** * write N-dimensional aligned block of data from memory buffer to d_a * * @param ds_a[in] section of DRA written to disk * @param buf[in] pointer to io buffer * @param ld[in] array of strides * @param id */ void ndai_put(section_t ds_a, void *buf, Integer ld[], io_request_t *id) { Integer handle = ds_a.handle + DRA_OFFSET, elem, i; Integer ndim = ds_a.ndim; Off_t offset; Size_t bytes; #if WALLTIME double ss0,tt0,tt1; #endif /* find location in a file where data should be written */ ndai_file_location(ds_a, &offset); for (i=0; i DRA[handle].dims[i]) cover_hi[i] = DRA[handle].dims[i]; } } /* Find coordinates of aligned chunk (if there is one) */ j = 0; check = 1; for (i=0; i= ds_a.hi[idir]) check = 0; } else { check = 1; } /* handle cover over upper end of patch */ if (off_hi[idir] != 0 && check == 1) { for (i=0, j=0; i cover[2*i+1]) { if (ihandle+DRA_OFFSET; int retval, ndim = DRA[handle].ndim, i; /* If we are writing out to multiple files then we need to consider chunk boundaries along last dimension */ /* if(INDEPFILES(ds_chunk->handle) || DRA[handle].numfiles > 1) */ if(ds_chunk->lo[ndim-1] && DRA[handle].chunk[ndim-1]>1) ds_chunk->lo[ndim-1] -= (ds_chunk->lo[ndim-1] -1) % DRA[handle].chunk[ndim-1]; /* ds_chunk->lo is getting set in this call. list contains the the lower and upper indices of the cover section. */ retval = ndai_next(ds_chunk->lo, list, DRA[handle].chunk, ndim); /* printf("Request %d\n",req); for (i=0; ilo[i], i, list[2*i], i, list[2*i+1]); } */ if(!retval) { return(retval); } for (i=0; ihi[i] = PARIO_MIN(list[2*i+1], ds_chunk->lo[i]+DRA[handle].chunk[i]-1); } /* Again, if we are writing out to multiple files then we need to consider chunk boundaries along last dimension */ /* if(INDEPFILES(ds_chunk->handle) || DRA[handle].numfiles > 1) { */ if (1) { Integer nlo; Integer hi_temp = ds_chunk->lo[ndim-1] + DRA[handle].chunk[ndim-1] -1; hi_temp -= hi_temp % DRA[handle].chunk[ndim-1]; ds_chunk->hi[ndim-1] = PARIO_MIN(ds_chunk->hi[ndim-1], hi_temp); /*this line was absent from older version on bonnie that worked */ nlo = 2*(ndim-1); if(ds_chunk->lo[ndim-1] < list[nlo]) ds_chunk->lo[ndim-1] = list[nlo]; } /* for (i=0; ihi[i]); } */ return 1; } /** * function to complete an operation and release the buffer associated * with a buffer id */ void wait_buf(char *buf) { Integer *ga_movhdl; io_request_t *io_req; int op_code; /* int buf_id = nbuf; */ buf_info *bi; if (buf == NULL) return; bi = (buf_info*) buf; op_code = bi->op; io_req = &(bi->io_req); ga_movhdl = &(bi->ga_movhdl); /*if (buf_id >= nbuf) { printf("Wait_buf Error: No operation is associated with this buffer\n"); return; }*/ switch(op_code) { case DRA_OP_WRITE: elio_wait(io_req); break; case DRA_OP_READ: if (bi->align == 0) pnga_nbwait(ga_movhdl); else { elio_wait(io_req); dai_exec_callback(buf, WAIT); } break; default: return; } #ifdef BUF_DEBUG printf("Released a buffer\n"); #endif } /** * Write or Read Unaligned Subsections to/from disk: * always read an aligned extension of a section from disk to local buffer then * for read : copy requested data from buffer to global array; * for write: overwrite part of buffer with data from g_a and write * complete buffer to disk * * @param opcode[in] signal for read or write * @param transp[in] should data be transposed * @param ds_a[in] section of DRA that is to be read from or written to * @param gs_a[in] section of GA that is to be read from or written to * @param req[in] request number */ void ndai_transfer_unlgn( int opcode, int transp, section_t ds_a, section_t gs_a, Integer req) { Integer chunk_ld[MAXDIM], next, offset, i, j; int type = DRA[ds_a.handle+DRA_OFFSET].type; Integer ndim = DRA[ds_a.handle+DRA_OFFSET].ndim; section_t ds_chunk, ds_unlg; char *buf, *buffer; Integer *ga_movhdl; io_request_t *io_req; buf_info *bi; ds_chunk = ds_unlg = ds_a; if (dra_debug_flag && 0) { for (i=0; iio_req); ga_movhdl = &(bi->ga_movhdl); bi->align = 0; buf = (char*) (buf + sizeof(buf_info)); ndai_get(ds_chunk, buf, chunk_ld, io_req); elio_wait(io_req); /* determine location in the buffer where GA data should be */ offset = ds_unlg.lo[ndim-1]-ds_chunk.lo[ndim-1]; for (i=ndim-2; i>=0; i--) { offset = offset*chunk_ld[i]; offset += ds_unlg.lo[i] - ds_chunk.lo[i]; } buffer = (char*)buf; buffer += offset * dai_sizeofM(type); switch (opcode){ case DRA_OP_WRITE: bi->op = DRA_OP_WRITE; /* overwrite a part of buffer with data from g_a */ nga_move(LOAD, transp, gs_a, ds_a, ds_unlg, buffer, chunk_ld, ga_movhdl); pnga_nbwait(ga_movhdl); /* write ENTIRE updated buffer back to disk */ ndai_put(ds_chunk, buf, chunk_ld, io_req); break; case DRA_OP_READ: bi->op = DRA_OP_READ; /* copy requested data from buffer to g_a */ nga_move(STORE, transp, gs_a, ds_a, ds_unlg, buffer, chunk_ld, ga_movhdl); break; default: dai_error("dai_transfer_unlg: invalid opcode",(Integer)opcode); } # ifdef DEBUG fprintf(stderr,"%d transf unlg g[%d:%d,%d:%d]-d[%d:%d,%d:%d]\n", dai_io_nodeid(), gs_chunk.lo[0], gs_chunk.hi[0], gs_chunk.lo[1], gs_chunk.hi[1], ds_unlg.lo[0], ds_unlg.hi[0], ds_unlg.lo[1], ds_unlg.hi[1]); # endif } } } /* returning from this function leaving some outstanding operations, so that dra_read()/write() can be non-blocking to some extent. we will have to call dra_wait() to make sure these operations are complete. */ } /** * write or read aligned subsections to disk */ void ndai_transfer_algn( int opcode, int transp, section_t ds_a, section_t gs_a, Integer req) { Integer next, chunk_ld[MAXDIM], ndim = ds_a.ndim; Integer i; section_t ds_chunk = ds_a; char *buf, *buffer; Integer *ga_movhdl; io_request_t *io_req; buf_info *bi; for(next = 0; next < Requests[req].na; next++){ for (i=0; iio_req); ga_movhdl = &(bi->ga_movhdl); bi->align = 1; bi->callback = OFF; buffer = buf; buf = buf + sizeof(buf_info); switch (opcode){ case DRA_OP_WRITE: bi->op = DRA_OP_WRITE; /* copy data from g_a to DRA buffer */ nga_move(LOAD, transp, gs_a, ds_a, ds_chunk, buf, chunk_ld, ga_movhdl); pnga_nbwait(ga_movhdl); /* copy data from DRA buffer to disk */ ndai_put(ds_chunk, buf, chunk_ld, io_req); break; case DRA_OP_READ: bi->op = DRA_OP_READ; /* copy data from disk to DRA buffer */ ndai_get(ds_chunk, buf, chunk_ld, io_req); /* copy data from DRA buffer to g_a */ /* nga_move(STORE, transp, gs_a, ds_a, ds_chunk, buf, chunk_ld, ga_movhdl); */ dai_callback(STORE, transp, gs_a, ds_a, ds_chunk, chunk_ld, buffer, req); break; default: dai_error("dai_transfer_algn: invalid opcode",(Integer)opcode); } # ifdef DEBUG fprintf(stderr,"%d transf algn g[%d:%d,%d:%d]-d[%d:%d,%d:%d]\n", dai_io_nodeid(), gs_chunk.lo[0], gs_chunk.hi[0], gs_chunk.lo[1], gs_chunk.hi[1], ds_chunk.lo[0], ds_chunk.hi[0], ds_chunk.lo[1], ds_chunk.hi[1]); # endif } } } /* returning from this function leaving some outstanding operations, so that dra_read()/write() can be non-blocking to some extent. we will have to call dra_wait() to make sure these operations are complete. */ } /** * WRITE SECTION g_a[glo:ghi] TO d_a[dlo:dhi] * * @param transp[in] transpose operator * @param g_a[in] GA handle * @param glo[in] * @param ghi[in] * @param d_a[in] DRA handle * @param dlo[in] * @param dhi[in] * @param request[out] async. request id */ Integer FATR ndra_write_section_(logical *transp, Integer *g_a, Integer glo[], Integer ghi[], Integer *d_a, Integer dlo[], Integer dhi[], Integer *request) { Integer gdims[MAXDIM], gtype, handle=*d_a+DRA_OFFSET; Integer i, gelem, delem, ndim; section_t d_sect, g_sect; pnga_sync(); /* usual argument/type/range checking stuff */ dai_check_handleM(*d_a,"ndra_write_sect"); pnga_inquire(*g_a, >ype, &ndim, gdims); if(!dai_write_allowed(*d_a))dai_error("ndra_write_sect: write not allowed",*d_a); if(DRA[handle].type != (int)gtype)dai_error("ndra_write_sect: type mismatch",gtype); if(DRA[handle].ndim != ndim)dai_error("ndra_write_sect: dimension mismatch", ndim); for (i=0; i #endif #include "gacommon.h" #include "draf2c.h" #include "elio.h" #include "macdecls.h" #define MAXDIM GA_MAX_DIM #ifdef FALSE #undef FALSE #endif #ifdef TRUE #undef TRUE #endif #define FALSE (logical) 0 #define TRUE (logical) 1 /************************* common constants **********************************/ #define DRA_OFFSET 5000 /**< DRA handle offset */ #define DRA_BRD_TYPE 30000 /**< msg type for DRA broadcast */ #define DRA_GOP_TYPE 30001 /**< msg type for DRA sum */ #define DRA_MAX_NAME 72 /**< max length of array name */ #define DRA_MAX_FNAME 248 /**< max length of metafile name */ /************************* common data structures **************************/ typedef struct { /**< stores basic DRA info */ Integer ndim; /**< dimension of array */ Integer dims[MAXDIM]; /**< array dimensions */ Integer chunk[MAXDIM]; /**< data layout chunking */ Integer layout; /**< date layout type */ int type; /**< data type */ int mode; /**< file/array access permissions */ char name[DRA_MAX_NAME+8]; /**< array name */ char fname[DRA_MAX_FNAME+8]; /**< metafile name */ Integer actv; /**< is array active ? */ Integer indep; /**< shared/independent files ? */ Fd_t fd; /**< ELIO meta-file descriptor */ Integer numfiles; /**< # files on open file system */ Integer ioprocs; /**< number of IO procs per node */ } disk_array_t; #define MAX_ALGN 1 /**< max # aligned subsections */ #define MAX_UNLG (2*(MAXDIM-1)) /**< max # unaligned subsections */ typedef struct { /**< object describing DRA/GA section */ Integer handle; Integer ndim; Integer lo[MAXDIM]; Integer hi[MAXDIM]; } section_t; typedef struct { /**< structure stores arguments for callback f */ int op; int transp; Integer ld[MAXDIM]; section_t gs_a; section_t ds_a; section_t ds_chunk; } args_t; typedef struct { /**< stores info associated with DRA request */ Integer d_a; /**< disk array handle */ int num_pending; /**< number of pending asynch. I/O ops */ Integer list_algn[MAX_ALGN][2*MAXDIM]; /**< coordinates of aligned subsection */ Integer list_unlgn[MAX_UNLG][2*MAXDIM]; /**< coordinates of unaligned subsections*/ Integer list_cover[MAX_UNLG][2*MAXDIM]; /**< coordinates of "cover" subsections */ int nu; int na; int call_id; /**< id of this request */ } request_t; typedef struct { char *buf; int op; io_request_t io_req; Integer ga_movhdl; args_t args; int align; int callback; } buf_info; extern disk_array_t *DRA; extern logical dra_debug_flag; /**************************** common macros ********************************/ #define PARIO_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define PARIO_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define dai_error pnga_error extern int dai_read_param(char* filename, Integer d_a); extern void dai_write_param(char* filename, Integer d_a); extern void dai_delete_param(char* filename, Integer d_a); extern int dai_file_config(char* filename); extern logical dai_section_intersect(section_t sref, section_t* sadj); extern int drai_get_num_serv(void); /* internal fortran calls */ extern Integer drai_create(Integer *type, Integer *dim1, Integer *dim2, char *name, char *filename, Integer *mode, Integer *reqdim1, Integer *reqdim2, Integer *d_a); extern Integer ndrai_create(Integer *type, Integer *ndim, Integer dims[], char *name, char *filename, Integer *mode, Integer reqdims[], Integer *d_a); extern Integer drai_open(char *filename, Integer *mode, Integer *d_a); extern Integer drai_inquire(Integer *d_a, Integer *type, Integer *dim1, Integer *dim2, char *name, char *filename); extern Integer ndrai_inquire(Integer *d_a, Integer *type, Integer *ndim, Integer dims[],char *name,char *filename); extern Integer ndrai_create_config(Integer *type, Integer *ndim, Integer dims[], char *name, char *filename, Integer *mode, Integer reqdims[], Integer *numfiles, Integer *numioprocs, Integer *d_a); /* external fortran calls */ #ifdef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS extern Integer FATR dra_create_(Integer *type, Integer *dim1, Integer *dim2, char *name, char *filename, Integer *mode, Integer *reqdim1, Integer *reqdim2, Integer *d_a, int nlen, int flen); extern Integer FATR ndra_create_(Integer *type, Integer *ndim, Integer dims[], char *name, char *filename, Integer *mode, Integer reqdims[], Integer *d_a, int nlen, int flen); extern Integer FATR dra_open_(char *filename, Integer *mode, Integer *d_a, int flen); extern Integer FATR dra_inquire_(Integer *d_a, Integer *type, Integer *dim1, Integer *dim2, char *name, char *filename, int nlen, int flen); extern Integer FATR ndra_inquire_(Integer *d_a, Integer *type, Integer *ndim, Integer dims[], char *name, char *filename, int nlen, int flen); extern Integer ndra_create_config_(Integer *type, Integer *ndim, Integer dims[], char *name, char *filename, Integer *mode, Integer reqdims[], Integer *numfiles, Integer *numioprocs, Integer *d_a, int nlen, int flen); #else /* F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS */ extern Integer FATR dra_create_(Integer *type, Integer *dim1, Integer *dim2, char *name, int nlen, char *filename, int flen, Integer *mode, Integer *reqdim1, Integer *reqdim2, Integer *d_a); extern Integer FATR ndra_create_(Integer *type, Integer *ndim, Integer dims[], char *name, int nlen, char *filename, int flen, Integer *mode, Integer reqdims[], Integer *d_a); extern Integer FATR dra_open_(char *filename, int flen, Integer *mode, Integer *d_a); extern Integer FATR dra_inquire_(Integer *d_a, Integer *type, Integer *dim1, Integer *dim2, char *name, int nlen, char *filename, int flen); extern Integer FATR ndra_inquire_(Integer *d_a, Integer *type, Integer *ndim, Integer dims[], char *name, int nlen, char *filename, int flen); extern Integer ndra_create_config_(Integer *type, Integer *ndim, Integer dims[], char *name, int nlen, char *filename, int flen, Integer *mode, Integer reqdims[], Integer *numfiles, Integer *numioprocs, Integer *d_a); #endif /* F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS */ extern Integer FATR dra_terminate_(); extern Integer FATR dra_init_( Integer *max_arrays, /* input */ DoublePrecision *max_array_size, /* input */ DoublePrecision *tot_disk_space, /* input */ DoublePrecision *max_memory); /* input */ extern Integer FATR dra_probe_( Integer *request, /*input*/ Integer *status); /*output*/ extern Integer FATR ndra_write_( Integer *g_a, /*input:GA handle*/ Integer *d_a, /*input:DRA handle*/ Integer *request); /*output: handle to async oper.*/ extern Integer FATR ndra_write_section_( logical *transp, /*input:transpose operator*/ Integer *g_a, /*input:GA handle*/ Integer glo[], /*input*/ Integer ghi[], /*input*/ Integer *d_a, /*input:DRA handle*/ Integer dlo[], /*input*/ Integer dhi[], /*input*/ Integer *request); /*output: async. request id*/ extern Integer FATR ndra_read_(Integer* g_a, Integer* d_a, Integer* request); extern Integer FATR ndra_read_section_( logical *transp, /*input:transpose operator*/ Integer *g_a, /*input:GA handle*/ Integer glo[], /*input*/ Integer ghi[], /*input*/ Integer *d_a, /*input:DRA handle*/ Integer dlo[], /*input*/ Integer dhi[], /*input*/ Integer *request); /*output: request id*/ extern void FATR dra_print_internals_(Integer *d_a); extern void FATR dra_set_debug_(logical *flag); extern void FATR dra_set_default_config_(Integer *numfiles, Integer *numioprocs); extern Integer FATR dra_delete_(Integer* d_a); extern Integer FATR dra_close_(Integer* d_a); extern void dra_flick_(); extern Integer FATR dra_wait_(Integer* request); ga-5-3/pario/dra/buffers.c0000640005473000001440000001205211366121521014252 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * Buffer Manager for managing buffers in any application */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_STRINGS_H # include #endif #include "buffers.h" /*#define STATBUF 1 */ /* set if static buffers will be used */ /*#define DEBUG 1 */ #define MAX_CTXT 5 int ctxt_count = 0; /** buffer management initialization routine */ void buffer_init( buf_context_t *ctxt, int nbuf, int buf_size, void (*fptr)(char*)) { int i; long diff; if (nbuf < 1 || nbuf > MAXBUF) { printf("Too many (or too few) buffers requested, using default number (%d) of buffers", DEFBUF); nbuf = DEFBUF; } /* create a context */ ctxt->ctxt_id = ctxt_count++; if (ctxt->ctxt_id > MAX_CTXT) { printf("Max number of contexts reached!\n"); return; } ctxt->nbuf = nbuf; ctxt->size = buf_size; ctxt->buf = (_buffer_t *)malloc(sizeof(_buffer_t) * nbuf); ctxt->fptr = fptr; #ifdef STATBUF double buffers[MAXBUF][DBL_BUF_SIZE]; for (i = 0; i < nbuf; i++) { ctxt->buf[i].buffer = (char *) buffers[i]; bzero(buffers[i], sizeof(buffers[i])); } #else /* STATBUF */ /* get buffer memory */ for (i = 0; i < nbuf; i++) { ctxt->buf[i].buffer = (char*) malloc((buf_size + ALIGN-1) *sizeof(double)); if (ctxt->buf[i].buffer == NULL) { printf("Could not allocate memory for buffers!\n"); return; } bzero(ctxt->buf[i].buffer, sizeof(ctxt->buf[i].buffer)); /* align buffer address */ diff = ((long)(ctxt->buf[i].buffer)) % (sizeof(double)*ALIGN); if(diff) { ctxt->buf[i].align_off = (int) (sizeof(double)*ALIGN - diff); } else { ctxt->buf[i].align_off = (int) 0; } ctxt->buf[i].buffer += ctxt->buf[i].align_off; } #endif /* STATBUF */ for (i = 0; i < nbuf; i++) { ctxt->buf[i].active = 0; ctxt->buf[i].group_id = 0; } #ifdef DEBUG printf("Created a context\n\n"); #endif } /** internal function to return empty buffer handle */ int get_buf_hdl(buf_context_t *ctxt) { int i; for (i = 0; i < ctxt->nbuf; i++) { if (ctxt->buf[i].active == 0) { ctxt->buf[i].active = 1; return i; } } return -1; } char* get_buf(buf_context_t *ctxt, int call_id) { int hdl; char *buf; hdl = get_buf_hdl(ctxt); if (hdl == -1) { int cur_buf; /* no buffer is available, wait for the oldest buffer to become free */ cur_buf = (ctxt->last_buf + 1) % ctxt->nbuf; /* free this buffer by calling the callback function provided by the application */ ctxt->fptr(ctxt->buf[cur_buf].buffer); hdl = cur_buf; } buf = ctxt->buf[hdl].buffer; ctxt->buf[hdl].buf_hdl = hdl; ctxt->buf[hdl].call_id = call_id; ctxt->buf[hdl].active = 1; ctxt->last_buf = hdl; #ifdef DEBUG printf("Giving a buffer with internal handle: %d\n", hdl); #endif return (buf); } /** function to free a buffer */ void free_buf(buf_context_t *ctxt, char *buf) { int i; for (i = 0; i < ctxt->nbuf; i++) { if (ctxt->buf[i].buffer == buf) { ctxt->buf[i].active = 0; break; } } } /** function to complete an entire call */ void buf_complete_call(buf_context_t *ctxt, int call_id) { int i; #ifdef DEBUG printf("Completing call with call id: %d\n", call_id); #endif for (i = 0; i < ctxt->nbuf; i++) { if (ctxt->buf[i].call_id == call_id && ctxt->buf[i].active == 1) { /* force completion by calling user function */ ctxt->fptr(ctxt->buf[i].buffer); ctxt->buf[i].active = 0; } } } /** function to return the call_id associated with a particular buffer */ int buf_get_call_id(buf_context_t *ctxt, char *buf) { int i; for (i = 0; i < ctxt->nbuf; i++) if (ctxt->buf[i].buffer == buf) return(ctxt->buf[i].call_id); printf("Buf_man error: Cannot find call_id for this buffer\n"); return -1; } /** * Function to return an array of buffers associated with a call_id * the last two parameters are output */ int get_bufs_of_call_id( buf_context_t *ctxt, int call_id, int *n_buf, char *bufs[]) { int i, count = 0; for (i = 0; i < ctxt->nbuf; i++) if (ctxt->buf[i].call_id == call_id) { bufs[count++] = ctxt->buf[i].buffer; } *n_buf = count; if (*n_buf == 0) { #ifdef DEBUG printf("Buf_man: No active buffer found for call_id %d\n", call_id); #endif return -1; /* no buffer found */ } return 0; /* success */ } /** terminates an application context */ void buf_terminate(buf_context_t *ctxt) { #ifndef STATBUF int i; for (i = 0; i < ctxt->nbuf; i++) { ctxt->buf[i].buffer -= ctxt->buf[i].align_off; free(ctxt->buf[i].buffer); } #endif free(ctxt->buf); ctxt_count--; /* this context can be reallocated */ } ga-5-3/pario/dra/dra_mxm.F0000640005473000001440000002333111672230603014214 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif #if 0 #define USE_SUMMA 1 #endif #ifdef USE_SUMMA # define GA_CREATE ga_create2 # define GA_DGEMM ga_summa___ #else # define GA_CREATE ga_create # define GA_DGEMM ga_dgemm #endif #define BASE_NAME 'matrixA.da' #define BASE_NAME1 'matrixB.da' #define BASE_NAME2 'matrixC.da' #ifdef HPIODIR # define FNAME HPIODIR//BASE_NAME # define FNAME1 HPIODIR//BASE_NAME1 # define FNAME2 HPIODIR//BASE_NAME2 #else # define FNAME BASE_NAME # define FNAME1 BASE_NAME1 # define FNAME2 BASE_NAME2 #endif program test implicit none #include "mafdecls.fh" #include "global.fh" #include "dra.fh" integer max_arrays double precision max_sz, max_disk, max_mem data max_arrays, max_sz, max_disk, max_mem /4,1d8,1d10, 1d6/ integer status logical ga_create2 #include "mp3.fh" if (.not. ma_init(MT_DBL, 800000, 800000)) $ call ga_error('ma_init failed', 1) call ga_initialize() if(dra_init(max_arrays, max_sz, max_disk, max_mem).ne.0) $ call ga_error('dra_init failed: ',0) c call testit() c status = dra_terminate() call ga_terminate() call MP_FINALIZE() end subroutine testit() implicit none #include "mafdecls.fh" #include "global.fh" #include "dra.fh" #include "mp3def.fh" c integer n, nb integer g_temp integer d_a, d_b, d_c integer i, j, req integer nproc, me integer util_mdtob logical ga_create2 c parameter (n = 10000) parameter (nb = n/5) c double precision temp(n), mbytes double precision dsin, sum, tt0, tt1 c logical status external util_mdtob c ................................................... c nproc = ga_nnodes() me = ga_nodeid() c c*** Create global arrays c if (.not. GA_CREATE(MT_DBL, n, n, 'temp', 1, 1, g_temp)) $ call ga_error(' GA_CREATE failed: temp ',0) c c*** creating disk arrays c if (me.eq.0) print*, 'Creating Disk Array A:',n,' x',n if(dra_create(MT_DBL, n, n, 'A', & FNAME, & DRA_RW, nb, n, d_a).ne.0) $ CALL ga_error('dra_create failed: ',0) if (me.eq.0) print*, 'Creating Disk Array B:',n,' x',n if(dra_create(MT_DBL, n, n, 'B', & FNAME1, & DRA_RW, n, nb, d_b).ne.0) $ CALL ga_error('dra_create failed: ',0) if (me.eq.0) print*, 'Creating Disk Array C:',n,' x',n if(dra_create(MT_DBL, n, n, 'C', & FNAME2, & DRA_RW, nb, nb, d_c).ne.0) $ CALL ga_error('dra_create failed: ',0) c c************************* Fill in arrays A & B ************************ c do j = 1+me, n, nproc ! static load balancing do i = 1, n temp(i) = 1d0/(i +j) enddo call ga_put(g_temp, 1,n, j,j, temp,n) enddo * call ga_print(g_temp, 1) call ga_sync() c c... writing to disk arrays c if(me.eq.0) print *, 'writing global array to disk' if (me.eq.0)call ffflush(6) tt0 = MP_TIMER() if(dra_write(g_temp,d_a,req).ne.0) $ CALL ga_error('write failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) if(dra_close(d_a).ne.0)call ga_error('dra_close failed: ',d_a) tt1 = MP_TIMER() -tt0 mbytes = 1e-6*util_mdtob(n*n) if (me.eq.0)then write(6,100)mbytes,tt1,mbytes/tt1 endif c c Now, array B c do j = 1+me, n, nproc ! static load balancing do i = 1, n temp(i) = 1d0*(i +j) enddo call ga_put(g_temp, 1,n, j,j, temp,n) enddo * call ga_print(g_temp, 1) call ga_sync() c c... writing to disk arrays c if(me.eq.0) print *, 'writing global array to disk' if (me.eq.0)call ffflush(6) tt0 = MP_TIMER() if(dra_write(g_temp,d_b,req).ne.0) $ CALL ga_error('write failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) if(dra_close(d_b).ne.0)call ga_error('dra_close failed: ',d_b) tt1 = MP_TIMER() -tt0 mbytes = 1e-6*util_mdtob(n*n) if (me.eq.0)then write(6,100)mbytes,tt1,mbytes/tt1 endif c c********************************************************************** c c*** delete temp GA array status = ga_destroy(g_temp) c*** opening disk arrays c if(dra_open(FNAME,DRA_R, d_a).ne.0) & call ga_error('dra_open failed',0) if(dra_open(FNAME1,DRA_R, d_b).ne.0) & call ga_error('dra_open failed',0) c c if (me .eq. 0) then print *,' ' print *,' Checking out-of-core matrix multiplication' print *,' ' call ffflush(6) endif c call ga_sync() tt0 = MP_TIMER() call chunk_mxm(n, nb, d_a, d_b, d_c) tt1 = MP_TIMER() -tt0 if(me.eq.0)print *,'time=',tt1,' MFLOPS=', 2d-6*n*n*n/tt1 c c*** clean-up c if(dra_delete(d_a).ne.0) & call ga_error('dra_delete failed',0) if(dra_delete(d_b).ne.0) & call ga_error('dra_delete failed',0) if(dra_delete(d_c).ne.0) & call ga_error('dra_delete failed',0) c c to help linker when summa is used if(ga_nnodes().le.0) call ga_dgemm() 100 format(g11.2,' MB time=',g11.2,' rate=',g11.3,'MB/s') end c given current (i,j) compute (ni, nj) - next loop index c i - outermost loop, j- innermost loop c logical function next2d(i, imin, imax, j, jmin, jmax, ni, nj) implicit none integer i, imin, imax, j, jmin, jmax, ni, nj c if(i .lt. imin .or. j.lt.jmin)then c to handle initial (0,0) indices ni = imin nj = jmin else ni = i nj = j+1 endif if(nj.gt.jmax)then nj = jmin ni = ni + 1 endif next2d = ni.le.imax return end integer function prefetch_next(g_a, d_a, i, j, nb, n) implicit none #include "global.fh" #include "dra.fh" #include "chemio.h" integer g_a, d_a, i, j, nb, n integer jlo, jhi, ni, nj, chunks, nc logical next2d integer LO, HI integer retval LO(i) = (i-1)*nb +1 HI(i) = MIN(LO(i) + nb -1, n) c chunks = (n+nb-1)/nb if(next2d(i, 1, chunks, j, 1, chunks, ni, nj)) then jlo = LO(nj) jhi = HI(nj) nc = jhi -jlo+1 if(ELIO_OK.eq.dra_read_section(.false., g_a, 1, n, 1, nc, & d_a, 1, n, jlo, jhi, retval)) then prefetch_next = retval else call ga_error('dra_read failed:',0) endif else prefetch_next = DRA_REQ_INVALID endif return end subroutine chunk_mxm(n, nb, d_a, d_b, d_c) implicit none #include "mafdecls.fh" #include "global.fh" #include "dra.fh" #include "mp3def.fh" integer n, nb, d_a, d_b, d_c integer i, j, chunks integer ilo, ihi, jlo, jhi, nr, nc integer g_a_chunk, g_b_chunk(2), g_c_chunk logical status integer req, req_b, req_c, prefetch_next integer nxt_idx, cur_idx double precision tot, t0 logical ga_create2 integer LO, HI, NEXT LO(i) = (i-1)*nb +1 HI(i) = MIN(LO(i) + nb -1, n) NEXT(i)= Mod(i+2,2)+1 ! generates series: 1, 2, 1, 2, 1, ... c chunks = (n+nb-1)/nb c c*** create temporary "chunk" GA arrays c if (.not. GA_CREATE(MT_DBL, nb, n, 'a', 1, 1, g_a_chunk)) $ call ga_error('chunk_mxm: GA_CREATE failed: g_a ',0) if (.not. GA_CREATE(MT_DBL, n, nb, 'b(1)', 1, 1, g_b_chunk(1))) $ call ga_error('chunk_mxm: GA_CREATE failed: g_b(1) ',0) if (.not. GA_CREATE(MT_DBL, n, nb, 'b(2)', 1, 1, g_b_chunk(2))) $ call ga_error('chunk_mxm: GA_CREATE failed: g_b(2) ',0) if (.not. GA_CREATE(MT_DBL, nb, nb, 'c', 1, 1, g_c_chunk)) $ call ga_error('chunk_mxm: GA_CREATE failed: g_c ',0) c c cur_idx = 1 req_b = prefetch_next(g_b_chunk(cur_idx), d_b, 0, 0, nb, n) if(dra_wait(req_b).ne.0) call ga_error('dra_wait failed:',req) do i = 1, chunks c ilo = LO(i) ihi = HI(i) nr = ihi-ilo+1 if(ELIO_OK.ne.dra_read_section(.false., g_a_chunk, 1, nr, 1, n, & d_a, ilo, ihi, 1, n, req)) & call ga_error('dra_read failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed:',req) c * call ga_print_patch(g_a_chunk, 1, nr, 1, n) do j = 1, chunks c jlo = LO(j) jhi = HI(j) nc = jhi-jlo+1 if(dra_wait(req_b).ne.0) $ call ga_error('dra_wait failed:',req_b) nxt_idx = NEXT(cur_idx) req_b = prefetch_next(g_b_chunk(nxt_idx), d_b, i, j, nb, n) c * call ga_print_patch(g_b_chunk(cur_idx), 1, n, 1, nc) t0 =MP_TIMER() call GA_DGEMM('n','n', nr, nc, n, 1d0, $ g_a_chunk, g_b_chunk(cur_idx), 0d0,g_c_chunk) tot = MP_TIMER() -t0 * call ga_print(g_c_chunk, 1) cur_idx = nxt_idx if(ELIO_OK.ne.dra_write_section( & .false., g_c_chunk, 1, nr, 1, nc, & d_c, ilo, ihi, jlo, jhi, req_c)) & call ga_error('dra_write failed for C:',0) if(dra_wait(req_c).ne.0)call ga_error('wait failed:',req_c) if(ga_nodeid().eq.0) & write(6,'(2i5,5x,2e15.4)')i,j,tot, MP_TIMER() enddo enddo c * call ga_print(g_c, 1) status = ga_destroy(g_c_chunk) status = ga_destroy(g_b_chunk(2)) .and. status status = ga_destroy(g_b_chunk(1)) .and. status status = ga_destroy(g_a_chunk) .and. status if(dra_wait(req_b).ne.0) call ga_error('dra_wait failed:',req_b) end ga-5-3/pario/dra/fortran.c0000640005473000001440000001073711647111726014311 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /*************************** fortran DRA interface **************************/ #include "dra.h" #include "drap.h" #include "draf2c.h" #include "farg.h" #include "typesf2c.h" #include "ga-papi.h" #include "global.h" static char cname[DRA_MAX_NAME+1], cfilename[DRA_MAX_FNAME+1]; Integer FATR dra_create_( #ifdef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer *type, Integer *dim1, Integer *dim2, char *name, char *filename, Integer *mode, Integer *reqdim1, Integer *reqdim2, Integer *d_a, int nlen, int flen #else Integer *type, Integer *dim1, Integer *dim2, char *name, int nlen, char *filename, int flen, Integer *mode, Integer *reqdim1, Integer *reqdim2, Integer *d_a #endif ) { ga_f2cstring(name, nlen, cname, DRA_MAX_NAME); ga_f2cstring(filename, flen, cfilename, DRA_MAX_FNAME); return drai_create(type, dim1, dim2, cname, cfilename, mode, reqdim1, reqdim2,d_a); } Integer FATR ndra_create_( #ifdef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer *type, Integer *ndim, Integer dims[], char *name, char *filename, Integer *mode, Integer reqdims[], Integer *d_a, int nlen, int flen #else Integer *type, Integer *ndim, Integer dims[], char *name, int nlen, char *filename, int flen, Integer *mode, Integer reqdims[], Integer *d_a #endif ) { ga_f2cstring(name, nlen, cname, DRA_MAX_NAME); ga_f2cstring(filename, flen, cfilename, DRA_MAX_FNAME); return ndrai_create(type, ndim, dims, cname, cfilename, mode, reqdims, d_a); } Integer FATR dra_open_( #ifdef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS char *filename, Integer *mode, Integer *d_a, int flen #else char *filename, int flen, Integer *mode, Integer *d_a #endif ) { ga_f2cstring(filename, flen, cfilename, DRA_MAX_FNAME); return drai_open(cfilename, mode, d_a); } Integer FATR dra_inquire_( #ifdef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer *d_a, Integer *type, Integer *dim1, Integer *dim2, char *name, char *filename, int nlen, int flen #else Integer *d_a, Integer *type, Integer *dim1, Integer *dim2, char *name, int nlen, char *filename, int flen #endif ) { Integer stat = drai_inquire(d_a, type, dim1, dim2, cname, cfilename); *type = pnga_type_c2f(*type); ga_c2fstring(cname, name, nlen); ga_c2fstring(cfilename, filename, flen); return stat; } Integer FATR ndra_inquire_( #ifdef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer *d_a, Integer *type, Integer *ndim, Integer dims[], char *name, char *filename, int nlen, int flen #else Integer *d_a, Integer *type, Integer *ndim, Integer dims[], char *name, int nlen, char *filename, int flen #endif ) { Integer stat = ndrai_inquire(d_a, type, ndim, dims, cname, cfilename); *type = pnga_type_c2f(*type); ga_c2fstring(cname, name, nlen); ga_c2fstring(cfilename, filename, flen); return stat; } Integer ndra_create_config_( #ifdef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS Integer *type, Integer *ndim, Integer dims[], char *name, char *filename, Integer *mode, Integer reqdims[], Integer *numfiles, Integer *numioprocs, Integer *d_a, int nlen, int flen #else Integer *type, Integer *ndim, Integer dims[], char *name, int nlen, char *filename, int flen, Integer *mode, Integer reqdims[], Integer *numfiles, Integer *numioprocs, Integer *d_a #endif ) { ga_f2cstring(name, nlen, cname, DRA_MAX_NAME); ga_f2cstring(filename, flen, cfilename, DRA_MAX_FNAME); return ndrai_create_config(type, ndim, dims, cname, cfilename, mode, reqdims, numfiles, numioprocs, d_a); } ga-5-3/pario/dra/perf.F0000640005473000001440000002103211476251130013515 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c c FNAME - filename for test program c c Only use the INTEGER4_TEST if you are compiling c with USE_INTEGER4 and you are using an F90 c fortran compiler c c#define INTEGER4_TEST c #define BASE_NAME 'da.try' #define BASE_NAME1 'da1.try' #ifdef HPIODIR # define FNAME HPIODIR//BASE_NAME # define FNAME1 HPIODIR//BASE_NAME1 #else # define FNAME BASE_NAME # define FNAME1 BASE_NAME1 #endif program io #include "mafdecls.fh" #include "global.fh" #include "dra.fh" integer status, me integer max_arrays integer stack, heap double precision max_sz, max_disk, max_mem data max_arrays, max_sz, max_disk, max_mem /10,1d8,1d10, 1d6/ #if defined(IBM)|| defined(CRAY_T3E) data stack, heap /9000000, 4000000/ #else data stack, heap /1200000, 800000/ #endif c #include "mp3.fh" call ga_initialize() if(.not. ga_uses_ma())then stack = 10000 heap = 10000 endif c if(ma_init(MT_F_DBL, stack, heap) ) then me = ga_nodeid() if(dra_init(max_arrays, max_sz, max_disk, max_mem).ne.0)then call ga_error('dra_init failed: ',0) endif if (me.eq.0) print *,' ' if(me.eq.0)print *, 'TESTING PERFORMANCE OF DISK ARRAYS' if (me.eq.0) print *,' ' call test_io_dbl() status = dra_terminate() call ga_terminate() else print *,'ma_init failed' endif if(me.eq.0)print *, 'all done ...' call MP_FINALIZE() end subroutine test_io_dbl implicit none #include "mafdecls.fh" #include "global.fh" #include "dra.fh" #include "mp3def.fh" integer n,m parameter (n=5000) parameter (m = 2*n) double precision err, tt0, tt1, mbytes integer g_a, g_b, d_a, d_b double precision drand integer i,j, req, loop integer dilo,dihi,djlo,djhi integer gilo,gihi,gjlo,gjhi integer ielem, jelem integer me, nproc integer index, ld integer iran logical status integer util_mdtob external drand external util_mdtob intrinsic int, dble #ifdef INTEGER4_TEST double precision, allocatable :: buffer(:,:) #endif iran(i) = int(drand(0)*dble(i-1)) + 1 c loop = 30 req = -1 nproc = ga_nnodes() me = ga_nodeid() c if (me.eq.0) print *, 'creating global arrays ',n,' x',n if (me.eq.0)call ffflush(6) call ga_sync() if(.not. ga_create(MT_DBL, n, n, 'a', 1, 1, g_a)) & call ga_error('ga_create failed: a', 0) if(.not. ga_create(MT_DBL, n, n, 'b', 1, 1, g_b)) & call ga_error('ga_create failed: b', 0) if (me.eq.0) print *,'done ' if (me.eq.0)call ffflush(6) c c initialize g_a, g_b with random values c ... use ga_access to avoid allocating local buffers for ga_put c call ga_sync() call ga_distribution(g_a, me, gilo,gihi,gjlo,gjhi) #ifdef INTEGER4_TEST allocate(buffer(gihi-gilo+1,gjhi-gjlo+1)) ld = gihi-gilo+1 call ga_get(g_a, gilo, gihi, gjlo, gjhi, buffer, ld) call fill_random(buffer, gihi-gilo+1, gjhi-gjlo+1, ld) call ga_put(g_a, gilo, gihi, gjlo, gjhi, buffer, ld) deallocate(buffer) #else call ga_access(g_a, gilo,gihi,gjlo,gjhi, index, ld) call fill_random(DBL_MB(index), gihi-gilo+1, gjhi-gjlo+1, ld) #endif call ga_sync() * if (me.eq.0) print *,'done ' * if (me.eq.0)call ffflush(6) c call ga_zero(g_b) c c c....................................................................... if (me.eq.0) print *, 'creating disk array ',n,' x',n if (me.eq.0)call ffflush(6) if(dra_create(MT_DBL, n, n, 'A', FNAME, & DRA_RW, n, n, d_a).ne.0) $ CALL ga_error('dra_create failed: ',0) c if(me.eq.0) print *, 'alligned blocking write' if (me.eq.0)call ffflush(6) tt0 = MP_TIMER() if(dra_write(g_a, d_a, req).ne.0) $ CALL ga_error('dra_write failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) tt1 = MP_TIMER() -tt0 mbytes = 1e-6*util_mdtob(n*n) if (me.eq.0)then write(6,100)mbytes,tt1,mbytes/tt1 endif c if(dra_close(d_a).ne.0) & call ga_error('dra_close(d_a) failed: ',d_a) tt1 = MP_TIMER() -tt0 if (me.eq.0)then write(6,100)mbytes,tt1,mbytes/tt1 endif c if (me.eq.0) print *,' ' if (me.eq.0) print *,'disk array closed ' if (me.eq.0)call ffflush(6) c....................................................................... c c if (me.eq.0) print *, 'creating disk array ',m,' x',m if (me.eq.0)call ffflush(6) if(dra_create(MT_DBL, m, m, 'B', FNAME1, & DRA_RW, n, n, d_b).ne.0) $ CALL ga_error('dra_create failed: ',0) c if(me.eq.0) print *, 'non alligned blocking write' if (me.eq.0)call ffflush(6) c gilo =1 gjlo =1 gihi =n gjhi =n tt0 = MP_TIMER() if(dra_write_section(.false., g_a, gilo, gihi, gjlo, gjhi, & d_b, gilo+1, gihi+1, gjlo+1, gjhi+1, req).ne.0) & call ga_error('dra_write_section failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) tt1 = MP_TIMER() -tt0 mbytes = 1e-6*util_mdtob(n*n) if (me.eq.0)then write(6,100)mbytes,tt1,mbytes/tt1 endif c if(dra_close(d_b).ne.0) & call ga_error('dra_close(d_b) failed: ',d_b) tt1 = MP_TIMER() -tt0 if (me.eq.0)then write(6,100)mbytes,tt1,mbytes/tt1 endif c if (me.eq.0) print *,' ' if (me.eq.0) print *,'disk array closed ' if (me.eq.0)call ffflush(6) c....................................................................... c c if (me.eq.0) print *,' ' if (me.eq.0) print *,'opening disk array' if(dra_open(FNAME, DRA_R, d_a).ne.0) & call ga_error('dra_open failed',0) if(me.eq.0) print *, 'alligned blocking read' if (me.eq.0)call ffflush(6) tt0 = MP_TIMER() if(dra_read(g_b, d_a, req).ne.0) $ CALL ga_error('dra_read failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) tt1 = MP_TIMER() -tt0 if (me.eq.0)then write(6,100)mbytes,tt1,mbytes/tt1 endif call ga_dadd(1d0, g_a, -1d0, g_b, g_b) err = ga_ddot(g_b, g_b) if(err.ne.0) then if (me.eq.0) print *,'BTW, we have error =', err, & ' for dra_read' c call ga_print(g_b) else if (me.eq.0) print *,'OK' endif if(dra_delete(d_a).ne.0) & call ga_error('dra_delete failed',0) c....................................................................... c if (me.eq.0) print *,' ' if (me.eq.0) print *,'opening disk array' if(dra_open(FNAME1,DRA_R, d_b).ne.0) & call ga_error('dra_open failed',0) if(me.eq.0) print *, 'non alligned blocking read' if (me.eq.0)call ffflush(6) gilo =1 gjlo =1 gihi =n gjhi =n tt0 = MP_TIMER() if(dra_read_section(.false., g_b, gilo, gihi, gjlo, gjhi, & d_b, gilo+1, gihi+1, gjlo+1, gjhi+1, req).ne.0) & call ga_error('dra_read_section failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) tt1 = MP_TIMER() -tt0 if (me.eq.0)then write(6,100)mbytes,tt1,mbytes/tt1 endif call ga_dadd(1d0, g_a, -1d0, g_b, g_b) err = ga_ddot(g_b, g_b) if(err.ne.0) then if (me.eq.0) print *,'BTW, we have error =', err, + ' for dra_read_section' else if (me.eq.0) print *,'OK' endif if(dra_delete(d_b).ne.0) & call ga_error('dra_delete failed',0) c....................................................................... status = ga_destroy(g_a) status = ga_destroy(g_b) 100 format(g11.2,' MB time=',g11.2,' rate=',g11.3,'MB/s') end subroutine swap(a,b) integer a, b, temp temp = a a = b b = temp end subroutine init_char(str, len, char) character*(*) str character*1 char integer i do i = 1, len -1 str(i:i+1) = char enddo end subroutine fill_random(a, n,m, ld) integer ld, n,m double precision a(ld,*), drand, seed integer i,j external drand c do j=1,m seed = drand(j) do i=1,n a(i,j)=seed*i enddo enddo end ga-5-3/pario/dra/perf2.F0000640005473000001440000001776711476251130013623 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif c c FNAME - filename for test program c #define BASE_NAME 'da.try' #define BASE_NAME1 'da1.try' #ifdef HPIODIR # define FNAME HPIODIR//BASE_NAME # define FNAME1 HPIODIR//BASE_NAME1 #else # define FNAME BASE_NAME # define FNAME1 BASE_NAME1 #endif program io #include "mafdecls.fh" #include "global.fh" #include "dra.fh" integer status, me integer max_arrays integer stack, heap double precision max_sz, max_disk, max_mem data max_arrays, max_sz, max_disk, max_mem /10,1d8,1d10, 1d6/ #if defined(IBM)|| defined(CRAY_T3E) data stack, heap /9000000, 4000000/ #else data stack, heap /1200000, 800000/ #endif c #include "mp3.fh" call ga_initialize() if(.not. ga_uses_ma())then stack = 10000 heap = 10000 endif c if(ma_init(MT_F_DBL, stack, heap) ) then me = ga_nodeid() if(dra_init(max_arrays, max_sz, max_disk, max_mem).ne.0)then call ga_error('dra_init failed: ',0) endif if (me.eq.0) print *,' ' if(me.eq.0)print *, 'TESTING PERFORMANCE OF DISK ARRAYS' if (me.eq.0) print *,' ' call test_io_dbl() status = dra_terminate() call ga_terminate() else print *,'ma_init failed' endif if(me.eq.0)print *, 'all done ...' call MP_FINALIZE() end subroutine test_io_dbl implicit none #include "mafdecls.fh" #include "global.fh" #include "dra.fh" #include "mp3def.fh" integer n,m parameter (n=5000) parameter (m = 2*n) double precision err, tt0, tt1, mbytes integer g_a, g_b, d_a, d_b double precision drand integer i,j, req, loop integer dlo(2),dhi(2) integer glo(2),ghi(2) integer me, nproc integer index, dims(2), reqdims(2), ld(2) integer iran integer util_mdtob logical status external drand external util_mdtob intrinsic int, dble iran(i) = int(drand(0)*dble(i-1)) + 1 c loop = 30 req = -1 nproc = ga_nnodes() me = ga_nodeid() c if (me.eq.0) print *, 'creating global arrays ',n,' x',n if (me.eq.0)call ffflush(6) call ga_sync() if(.not. ga_create(MT_DBL, n, n, 'a', 1, 1, g_a)) & call ga_error('ga_create failed: a', 0) if(.not. ga_create(MT_DBL, n, n, 'b', 1, 1, g_b)) & call ga_error('ga_create failed: b', 0) if (me.eq.0) print *,'done ' if (me.eq.0)call ffflush(6) c c initialize g_a, g_b with random values c ... use ga_access to avoid allocating local buffers for ga_put c call ga_sync() call nga_distribution(g_a, me, glo, ghi) call nga_access(g_a, glo, ghi, index, ld) call fill_random(DBL_MB(index), ghi(1)-glo(1)+1, & ghi(2)-glo(2)+1, ld(1)) call ga_sync() * if (me.eq.0) print *,'done ' * if (me.eq.0)call ffflush(6) c call ga_zero(g_b) c c c....................................................................... if (me.eq.0) print *, 'creating disk array ',n,' x',n if (me.eq.0)call ffflush(6) dims(1) = n dims(2) = n reqdims(1) = n reqdims(2) = n if(ndra_create(MT_DBL, 2, dims, 'A', & FNAME, & DRA_RW, reqdims, d_a).ne.0) $ CALL ga_error('ndra_create failed: ',0) c if(me.eq.0) print *, 'alligned blocking write' if (me.eq.0)call ffflush(6) tt0 = MP_TIMER() if(ndra_write(g_a, d_a, req).ne.0) $ CALL ga_error('ndra_write failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) tt1 = MP_TIMER() -tt0 mbytes = 1e-6*util_mdtob(n*n) if (me.eq.0)then write(6,100)mbytes,tt1,mbytes/tt1 endif c if(dra_close(d_a).ne.0)call ga_error('dra_close failed: ',d_a) tt1 = MP_TIMER() -tt0 if (me.eq.0)then write(6,100)mbytes,tt1,mbytes/tt1 endif c if (me.eq.0) print *,' ' if (me.eq.0) print *,'disk array closed ' if (me.eq.0)call ffflush(6) c....................................................................... c c if (me.eq.0) print *, 'creating disk array ',m,' x',m if (me.eq.0)call ffflush(6) dims(1) = m dims(2) = m reqdims(1) = n reqdims(2) = n if(ndra_create(MT_DBL, 2, dims, 'B', & FNAME1, & DRA_RW, reqdims, d_b).ne.0) $ CALL ga_error('ndra_create failed: ',0) c if(me.eq.0) print *, 'non alligned blocking write' if (me.eq.0)call ffflush(6) c glo(1) = 1 glo(2) = 1 ghi(1) = n ghi(2) = n dlo(1) = 2 dlo(2) = 2 dhi(1) = n+1 dhi(2) = n+1 tt0 = MP_TIMER() if(ndra_write_section(.false., g_a, glo, ghi, & d_b, dlo, dhi, req).ne.0) & call ga_error('ndra_write_section failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) tt1 = MP_TIMER() -tt0 mbytes = 1e-6*util_mdtob(n*n) if (me.eq.0)then write(6,100)mbytes,tt1,mbytes/tt1 endif c if(dra_close(d_b).ne.0)call ga_error('dra_close failed: ',d_b) tt1 = MP_TIMER() -tt0 if (me.eq.0)then write(6,100)mbytes,tt1,mbytes/tt1 endif c if (me.eq.0) print *,' ' if (me.eq.0) print *,'disk array closed ' if (me.eq.0)call ffflush(6) c....................................................................... c c if (me.eq.0) print *,' ' if (me.eq.0) print *,'opening disk array' if(dra_open(FNAME,DRA_R, d_a).ne.0) & call ga_error('dra_open failed',0) if(me.eq.0) print *, 'alligned blocking read' if (me.eq.0)call ffflush(6) tt0 = MP_TIMER() if(ndra_read(g_b, d_a, req).ne.0) $ CALL ga_error('ndra_read failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) tt1 = MP_TIMER() -tt0 if (me.eq.0)then write(6,100)mbytes,tt1,mbytes/tt1 endif call ga_dadd(1d0, g_a, -1d0, g_b, g_b) err = ga_ddot(g_b, g_b) if(err.ne.0) then if (me.eq.0) print *,'BTW, we have error =', err else if (me.eq.0) print *,'OK' endif if(dra_delete(d_a).ne.0) & call ga_error('dra_delete failed',0) c....................................................................... c if (me.eq.0) print *,' ' if (me.eq.0) print *,'opening disk array' if(dra_open(FNAME1,DRA_R, d_b).ne.0) & call ga_error('dra_open failed',0) if(me.eq.0) print *, 'non alligned blocking read' if (me.eq.0)call ffflush(6) tt0 = MP_TIMER() if(ndra_read_section(.false., g_b, glo, ghi, & d_b, dlo, dhi, req).ne.0) & call ga_error('ndra_read_section failed:',0) if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req) tt1 = MP_TIMER() -tt0 if (me.eq.0)then write(6,100)mbytes,tt1,mbytes/tt1 endif call ga_dadd(1d0, g_a, -1d0, g_b, g_b) err = ga_ddot(g_b, g_b) if(err.ne.0) then if (me.eq.0) print *,'BTW, we have error =', err else if (me.eq.0) print *,'OK' endif if(dra_delete(d_b).ne.0) & call ga_error('dra_delete failed',0) c....................................................................... status = ga_destroy(g_a) status = ga_destroy(g_b) 100 format(g11.2,' MB time=',g11.2,' rate=',g11.3,'MB/s') end subroutine swap(a,b) integer a, b, temp temp = a a = b b = temp end subroutine init_char(str, len, char) character*(*) str character*1 char integer i do i = 1, len -1 str(i:i+1) = char enddo end subroutine fill_random(a, n,m, ld) integer ld, n,m double precision a(ld,*), drand, seed integer i,j external drand c do j=1,m seed = drand(j) do i=1,n a(i,j)=seed*i enddo enddo end ga-5-3/pario/dra/DRA.doc0000640005473000001440000002725006220153407013556 0ustar d3n000users DISK RESIDENT ARRAYS PRELIMINARY DOCUMENTATION Jarek Nieplocha, 05.10.95 Disk Resident Arrays extend Global Arrays NUMA programming model with disk I/O operations. Either whole or sections of global arrays can be transferred between GA memory and the disk. At present time, all operations are declared to be collective. This simplifies implementation on machines where only some processors are connected to I/O devices. Except where stated otherwise, all operations are synchronous (blocking) which means that control is returned to the calling process only after the requested operation completes. All operations return error code. Return values: 0 - OK >0 - failure A program that uses Disk Resident Arrays should look like: program foo #include "mafdecls.h" #include "global.fh" #include "dra.fh" c call pbeginf() ! initialize TCGMSG if(.not. ma_init(...)) ERROR ! initialize MA call ga_initialize() ! initialize Global Arrays if(dra_init(....).ne.0) ERROR ! initialize Disk Arrays c do work if(dra_terminate().ne.0)ERROR ! destroy DRA internal data structures call ga_terminate ! terminate Global Arrays call pend() ! terminate TCGMSG end List of DRA operations: status = dra_init(max_arrays, max_array_size, total_disk_space, max_memory) integer max_arrays [input] double precision max_array_size [input] double precision total_disk_space [input] double precision max_memory [input] discussion: Initializes disk resident array I/O subsystem. "max_array_size", "total_disk_space" and "max_memory" are given in bytes. "max_memory" specifies how much local memory per processor the application is willing to provide to the DRA I/O subsystem for buffering. The value of "-1" for any of input arguments means: "don't care", "don't know", or "use defaults" status = dra_terminate() discussion: Close all open disk resident arrays and shut down DRA I/O subsystem. status = dra_create(type, dim1, dim2, name, filename, mode,rdim1,rdim2,d_a) integer type [input] ! MA type identifier integer dim1 [input] integer dim2 [input] character*(*) name [input] character*(*) filename [input] integer mode [input] integer rdim1 [input] integer rdim2 [input] integer d_a [output] ! DRA handle discussion: Creates new disk resident array with specified dimensions and "type". String "filename" specifies name of an abstract meta-file that will store the data on the disk. The meta-file might be implemented as multiple disk files that will contain parts of the disk resident array. The component files will have names derived from the string "filename" according to some established scheme(s). Only one DRA object can be stored in DRA meta-file identified by "filename". DRA objects persist on the disk after calling dra_close(). dra_delete() should be used instead of dra_close() to delete disk array and associated meta-file on the disk. A set of UNIX commands that understand "filename" identifier will be provided to copy, rename, move, change access attributes, and delete DRA meta-files. String "name" can be used for more informative (longer)names. Disk array is implicitly initialized to "0". Access permissions (read, write, read&write) are set in "mode". These are set using defined in DRA.fh (Fortran) and DRA.h (C) preprocessor constants: DRA_R, DRA_W, DRA_RW. The pair [rdim1, rdim2] specifies dimensions of a "typical" request. The value of "-1" for either of them means "unspecified". The layout of the data on the disk(s) is determined based on the values of these arguments. Performance of the DRA operations will depend on the dimensions (section shape) of the requests. If data layout is optimized for "column-like" sections, performance of DRA operations for "row-like" sections might be seriously degraded. This is analogous to the effect of wrong loop order yielding frequent cache misses on RISC processors in the example below. double precision a(1000, 1000) do i = 1, 1000 do j = 1, 1000 a(i,j) = dfloat(i+j) enddo enddo instead of do j = 1, 1000 do i = 1, 1000 a(i,j) = dfloat(i+j) enddo enddo status = dra_open(filename, mode, d_a) character*(*) filename [input] integer mode [input] integer d_a [output] ! DRA handle discussion: Open and assign DRA handle to disk resident array stored in DRA meta-file "filename". Disk arrays that are created with 'dra_create' and saved by calling 'dra_close' can be later opened and accessed by the same or different application. Attributes of disk resident array can be found by calling 'dra_inquire'. status = dra_write(g_a, d_a, request) integer g_a [input] ! GA handle integer d_a [input] ! DRA handle integer request [output] ! request id discussion: Write asynchronously specified global array to specified disk resident array. Dimensions and type of g_a and d_a must match. If dimensions don't match, 'dra_write_section' should be used instead. The operation is by definition asynchronous but it might be implemented as synchronous i.e., it would return only when I/O is done. "request" can be used to 'dra_probe' or 'dra_wait' for completion. status = dra_write_section(transp, g_a, gilo, gihi, gjlo, gjhi, d_a, dilo, dihi, djlo, djhi, request) logical transp [input] ! transpose operator integer g_a [input] ! GA handle integer d_a [input] ! DRA handle integer gilo [input] integer gihi [input] integer gjlo [input] integer gjhi [input] integer dilo [input] integer dihi [input] integer djlo [input] integer djhi [input] integer request [output] ! request id discussion: Write asynchronously specified global array section to specified disk resident array section: OP(g_a[ gilo:gihi, gjlo:gjhi]) --> d_a[ dilo:dihi, djlo:djhi] where OP is the transpose operator (.true./.false.). Return error if the two section's types or sizes mismatch. See 'dra_write' specs for discussion of "request". Note: Section reshaping and transpose operation not implemented yet. status = dra_read(g_a, d_a, request) integer g_a [input] ! GA handle integer d_a [input] ! DRA handle integer request [output] ! request id discussion: Read asynchronously specified global array from specified disk resident array. Dimensions and type of g_a and d_a must match. If dimensions don't match, 'dra_read_section' could be used instead. See 'dra_write' specs for discussion of "request". status = dra_read_section(transp, g_a, gilo, gihi, gjlo, gjhi, d_a, dilo, dihi, djlo, djhi, request) logical transp [input] ! transpose operator integer g_a [input] ! GA handle integer d_a [input] ! DRA handle integer gilo [input] integer gihi [input] integer gjlo [input] integer gjhi [input] integer dilo [input] integer dihi [input] integer djlo [input] integer djhi [input] integer request [output] ! request id discussion: Read asynchronously specified global array section from specified disk resident array section: OP(d_a[ dilo:dihi, djlo:djhi]) --> g_a[ gilo:gihi, gjlo:gjhi] where OP is the transpose operator (.true./.false.). See 'dra_write' specs for discussion of "request". Note: Section reshaping and transpose operation not implemented yet. status = dra_probe(request, compl_status) integer request [input] ! request id integer compl_status [output] ! completion status discussion: Tests for completion of 'dra_write/read' or 'dra_write/read_section' operation which set the value passed in "request" argument. compl_status = 0 the operation has been completed compl_status <> 0 not done yet status = dra_wait(request) integer request [input] ! request id discussion: Blocks until completion of 'dra_write/read' or 'dra_write/read_section' operation which set the value passed in "request" argument. status = dra_inquire(d_a, type, dim1, dim2, name, filename) integer d_a [input] ! DRA handle integer type [output] integer dim1 [output] integer dim2 [output] character*(*) name [output] character*(*) filename [output] discussion: Return dimensions, "type", "name" of disk resident array, and "filename" of DRA meta-file associated with "d_a" handle. status = dra_delete(d_a) integer d_a [input] ! DRA handle discussion: Delete a disk resident array associated with "d_a" handle. Invalidate handle. The corresponding DRA meta-file is destroyed. status = dra_close(d_a) integer d_a [input] ! DRA handle discussion: Close DRA meta-file associated with "d_a" handle and deallocate data structures corresponding to this disk array. Invalidate "d_a" handle. The array on the disk is persistent. subroutine dra_flick() discussion: Returns control to DRA for a VERY short time to improve progress of pending asynchronous operations. ga-5-3/pario/elio/0000750005473000001440000000000012275260566012650 5ustar d3n000usersga-5-3/pario/elio/elio.c0000640005473000001440000006453411751031432013743 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file **********************************************************************\ ELementary I/O (ELIO) disk operations for parallel I/O libraries Authors: Jarek Nieplocha (PNNL) and Jace Mogill (ANL) * * DISCLAIMER * * This material was prepared as an account of work sponsored by an * agency of the United States Government. Neither the United States * Government nor the United States Department of Energy, nor Battelle, * nor any of their employees, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR * ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, * COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, * SOFTWARE, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT * INFRINGE PRIVATELY OWNED RIGHTS. * * ACKNOWLEDGMENT * * This software and its documentation were produced with United States * Government support under Contract Number DE-AC06-76RLO-1830 awarded by * the United States Department of Energy. The United States Government * retains a paid-up non-exclusive, irrevocable worldwide license to * reproduce, prepare derivative works, perform publicly and display * publicly by or for the US Government, including the right to * distribute to other US Government contractors. */ #ifdef USE_LUSTRE #include /* for O_LOV_DELAY_CREATE, LL_IOC_LOV_SETSTRIPE */ #include /* for struct lov_mds_md, LOV_MAGIC */ #include /* for ioctl */ #endif #include "eliop.h" #include "../sf/coms.h" #if defined(CRAY) && defined(__crayx1) #undef CRAY #endif #if defined(AIX) || defined(DECOSF) || defined(SGITFP) || defined(SGI64) || defined(SGI_N32) || defined(CRAY) || defined(LINUXAIO) /* systems with Asynchronous I/O */ #else # ifndef NOAIO # define NOAIO # endif #endif /****************** Internal Constants and Parameters **********************/ #define MAX_AIO_REQ 4 #define NULL_AIO -123456 #define FOPEN_MODE 0644 #define MAX_ATTEMPTS 10 #ifndef NOAIO # define AIO 1 #endif #ifdef FFIO # define WRITE ffwrite # define WRITEA ffwritea # define READ ffread # define READA ffreada # define CLOSE ffclose # define SEEK ffseek # define OPEN ffopens # define DEFARG FULL #else # define WRITE write # define WRITEA writea # define READ read # define READA reada # define CLOSE close # define SEEK lseek # define OPEN open # define DEFARG 0 #endif #ifdef WIN32 #define ELIO_FSYNC _commit #else #include #define ELIO_FSYNC fsync #endif /* structure to emulate control block in Posix AIO */ #if defined (CRAY) # if defined(FFIO) typedef struct { struct ffsw stat; int filedes; }io_status_t; # else # include typedef struct { struct iosw stat; int filedes; }io_status_t; # endif io_status_t cb_fout[MAX_AIO_REQ]; io_status_t *cb_fout_arr[MAX_AIO_REQ]; #elif defined(AIO) # include # if defined(AIX) # define INPROGRESS EINPROG # else # define INPROGRESS EINPROGRESS # endif struct aiocb cb_fout[MAX_AIO_REQ]; #ifndef AIX const #endif struct aiocb *cb_fout_arr[MAX_AIO_REQ]; #endif #ifndef INPROGRESS # define INPROGRESS 1 #endif static long aio_req[MAX_AIO_REQ]; /* array for AIO requests */ static int first_elio_init = 1; /* intialization status */ int _elio_Errors_Fatal=0; /* sets mode of handling errors */ /****************************** Internal Macros *****************************/ #if defined(AIO) # define AIO_LOOKUP(aio_i) {\ aio_i = 0;\ while(aio_req[aio_i] != NULL_AIO && aio_i < MAX_AIO_REQ) aio_i++;\ } #else # define AIO_LOOKUP(aio_i) aio_i = MAX_AIO_REQ #endif #define SYNC_EMULATE(op) *req_id = ELIO_DONE; \ if((stat= elio_ ## op (fd, offset, buf, bytes)) != bytes ){ \ ELIO_ERROR(stat,0); \ }else \ stat = 0; #ifndef MIN #define PARIO_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #endif /* * Offsets bigger than ABSURDLY_LARGE generate a SEEKFAIL. * The maximum no. of extents permitted for a file is MAX_EXTENT. */ #if defined(_LARGE_FILES) || defined(_LARGEFILE_SOURCE) || defined(_LARGEFILE64_SOURCE) || _FILE_OFFSET_BITS+0 == 64 || SIZEOF_VOIDP == 8 # define LARGE_FILES #endif #define MAX_EXTENT 127 #ifdef LARGE_FILES #define ABSURDLY_LARGE 1e14 #else #define ABSURDLY_LARGE (MAX_EXTENT*2147483648.0) #endif /*****************************************************************************/ static Off_t elio_max_file_size(Fd_t fd) /* * Return the maximum size permitted for this PHYSICAL file. * Presently not file dependent. */ { #ifdef LARGE_FILES return ABSURDLY_LARGE; #else return (2047.0*1024.0*1024.0); /* 2 GB - 1 MB */ #endif } static Fd_t elio_get_next_extent(Fd_t fd) /* * Return a pointer to the file descriptor that forms * the next extent of this file. If the extension file * does not exist then it is opened. If the open fails * then the usual error condition of elio_open is returned. */ { Fd_t next_fd = (Fd_t) fd->next; if (!next_fd) { /* Eventually need to replace this with user controllable naming * and combine with similar logic in delete routine. */ char fname[ELIO_FILENAME_MAX]; int len; if (fd->extent >= MAX_EXTENT) return 0; strcpy(fname, fd->name); len = strlen(fname); if (fd->extent) len -= 4; sprintf(fname+len,"x%3.3d",fd->extent+1); /*printf("Opening extent %d with name '%s'\n",fd->extent+1,fname);*/ if ((next_fd = elio_open(fname, fd->type, fd->mode))) { next_fd->extent = fd->extent + 1; fd->next = (struct fd_struct *) next_fd; } } return next_fd; } void elio_errors_fatal(int onoff) { _elio_Errors_Fatal = onoff; } /*\ Blocking Write * - returns number of bytes written or error code (<0) if failed \*/ Size_t elio_write(Fd_t fd, Off_t doffset, const void* buf, Size_t bytes) { off_t offset; Size_t stat, bytes_to_write = bytes; Size_t nextbytes; if (doffset >= ABSURDLY_LARGE) ELIO_ERROR(SEEKFAIL,0); /* Follow the linked list of extents down until we hit the file that contains the offset */ if (doffset >= elio_max_file_size(fd)) { Fd_t next_fd = elio_get_next_extent(fd); if (!next_fd) ELIO_ERROR(OPENFAIL,0); doffset -= elio_max_file_size(fd); return elio_write(next_fd, doffset, buf, bytes); } /* Figure out if the write continues onto the next extent */ offset = (off_t) doffset; nextbytes = 0; if ((doffset+bytes_to_write) >= elio_max_file_size(fd)) { nextbytes = bytes_to_write; bytes_to_write = (Size_t) (elio_max_file_size(fd)-doffset); nextbytes -= bytes_to_write; } /*printf("TRYING TO WRITE AT doffset=%f offset=%lu bw=%lu nb=%lu\n", doffset, offset, bytes_to_write, nextbytes);*/ /* Write to this extent */ #ifdef PABLO int pablo_code = PABLO_elio_write; PABLO_start( pablo_code ); #endif if(offset != SEEK(fd->fd,offset,SEEK_SET)) ELIO_ERROR(SEEKFAIL,0); while (bytes_to_write) { stat = WRITE(fd->fd, buf, bytes_to_write); if ((stat == -1) && ((errno == EINTR) || (errno == EAGAIN))) { ; /* interrupted write should be restarted */ } else if (stat > 0) { bytes_to_write -= stat; buf = stat + (char*)buf; /*advance pointer by # bytes written*/ } else { ELIO_ERROR(WRITFAIL, stat); } } /* Only get here if all has gone OK */ #ifdef PABLO PABLO_end(pablo_code); #endif /* Write to next extent(s) ... relies on incrementing of buf */ if (nextbytes) { Fd_t next_fd = elio_get_next_extent(fd); if (!next_fd) ELIO_ERROR(OPENFAIL,0); stat = elio_write(next_fd, (Off_t) 0, buf, nextbytes); if (stat != nextbytes) ELIO_ERROR(WRITFAIL, stat); } return bytes; } int elio_set_cb(Fd_t fd, Off_t doffset, int reqn, void *buf, Size_t bytes) { #if defined(AIO) off_t offset = (off_t) doffset; # if defined(CRAY) if(offset != SEEK(fd->fd, offset, SEEK_SET))return (SEEKFAIL); cb_fout_arr[reqn] = cb_fout+reqn; cb_fout[reqn].filedes = fd->fd; # else cb_fout[reqn].aio_offset = offset; cb_fout_arr[reqn] = cb_fout+reqn; cb_fout[reqn].aio_buf = buf; cb_fout[reqn].aio_nbytes = bytes; # if defined(AIX) cb_fout[reqn].aio_whence = SEEK_SET; # else cb_fout[reqn].aio_sigevent.sigev_notify = SIGEV_NONE; cb_fout[reqn].aio_fildes = fd->fd; # endif # endif #endif return ELIO_OK; } /*\ Asynchronous Write: returns 0 if succeded or err code if failed \*/ int elio_awrite(Fd_t fd, Off_t doffset, const void* buf, Size_t bytes, io_request_t * req_id) { off_t offset; Size_t stat; #ifdef AIO int aio_i; #endif if (doffset >= ABSURDLY_LARGE) ELIO_ERROR(SEEKFAIL,0); /* Follow the linked list of extents down until we hit the file that contains the offset */ if (doffset >= elio_max_file_size(fd)) { Fd_t next_fd = elio_get_next_extent(fd); if (!next_fd) ELIO_ERROR(OPENFAIL,0); doffset -= elio_max_file_size(fd); return elio_awrite(next_fd, doffset, buf, bytes, req_id); } /* Figure out if the write continues onto the next extent * ... if so then force the entire request to be done synchronously * so that we don't have to manage multiple async requests */ if ((doffset+((Off_t) bytes)) >= elio_max_file_size(fd)) { *req_id = ELIO_DONE; if (elio_write(fd, doffset, buf, bytes) != bytes) return -1; else return 0; } offset = (off_t) doffset; #ifdef PABLO int pablo_code = PABLO_elio_awrite; PABLO_start( pablo_code ); #endif *req_id = ELIO_DONE; #ifdef AIO AIO_LOOKUP(aio_i); /* blocking io when request table is full */ if(aio_i >= MAX_AIO_REQ){ # if defined(DEBUG) && defined(ASYNC) fprintf(stderr, "elio_awrite: Warning- asynch overflow\n"); # endif SYNC_EMULATE(write); } else { int rc; *req_id = (io_request_t) aio_i; if((rc=elio_set_cb(fd, offset, aio_i, (void*) buf, bytes))) ELIO_ERROR(rc,0); # if defined(CRAY) rc = WRITEA(fd->fd, (char*)buf, bytes, &cb_fout[aio_i].stat, DEFARG); stat = (rc < 0)? -1 : 0; # elif defined(AIX) # if !defined(AIX52) && !defined(_AIO_AIX_SOURCE) stat = aio_write(fd->fd, cb_fout + aio_i); # endif # else stat = aio_write(cb_fout+aio_i); # endif aio_req[aio_i] = *req_id; } #else /* call blocking write when AIO not available */ SYNC_EMULATE(write); #endif if(stat ==-1) ELIO_ERROR(AWRITFAIL, 0); #ifdef PABLO PABLO_end(pablo_code); #endif return((int)stat); } /*\ Truncate the file at the specified length. \*/ int elio_truncate(Fd_t fd, Off_t dlength) { off_t length = (off_t) dlength; #ifdef WIN32 # define ftruncate _chsize #endif #ifdef PABLO int pablo_code = PABLO_elio_truncate; PABLO_start( pablo_code ); #endif if(dlength >= elio_max_file_size(fd)){ Fd_t next_fd = elio_get_next_extent(fd); dlength -= elio_max_file_size(fd); # if defined(DEBUG) printf(stderr," calling ftruncate with length = %f \n", dlength); #endif return elio_truncate(next_fd, dlength); } (void) SEEK(fd->fd, 0L, SEEK_SET); if (ftruncate(fd->fd, length)) return TRUNFAIL; else { return ELIO_OK; } #ifdef PABLO PABLO_end(pablo_code); #endif } /*\ Return in length the length of the file \*/ int elio_length(Fd_t fd, Off_t *dlength) { off_t length; int status; /* Add up the lengths of any extents */ if (fd->next) { status = elio_length((Fd_t) fd->next, dlength); *dlength += elio_max_file_size(fd); return status; } else { #ifdef PABLO int pablo_code = PABLO_elio_length; PABLO_start( pablo_code ); #endif if ((length = SEEK(fd->fd, (off_t) 0, SEEK_END)) != -1) status = ELIO_OK; else status = SEEKFAIL; #ifdef PABLO PABLO_end(pablo_code); #endif *dlength = (Off_t) length; return status; } } /*\ Blocking Read * - returns number of bytes read or error code (<0) if failed \*/ Size_t elio_read(Fd_t fd, Off_t doffset, void* buf, Size_t bytes) { off_t offset; Size_t stat, bytes_to_read = bytes; Size_t nextbytes; int attempt=0; if (doffset >= ABSURDLY_LARGE) ELIO_ERROR(SEEKFAIL,0); /* Follow the linked list of extents down until we hit the file that contains the offset */ if (doffset >= elio_max_file_size(fd)) { Fd_t next_fd = elio_get_next_extent(fd); if (!next_fd) ELIO_ERROR(OPENFAIL,0); doffset -= elio_max_file_size(fd); return elio_read(next_fd, doffset, buf, bytes); } /* Figure out if the read continues onto the next extent */ offset = (off_t) doffset; nextbytes = 0; if ((doffset+bytes_to_read) >= elio_max_file_size(fd)) { nextbytes = bytes_to_read; bytes_to_read = (Size_t) (elio_max_file_size(fd)-doffset); nextbytes -= bytes_to_read; } /* Read from this physical file */ #ifdef PABLO int pablo_code = PABLO_elio_read; PABLO_start( pablo_code ); #endif if(offset != SEEK(fd->fd,offset,SEEK_SET)) ELIO_ERROR(SEEKFAIL,0); while (bytes_to_read) { stat = READ(fd->fd, buf, bytes_to_read); if(stat==0){ ELIO_ERROR(EOFFAIL, stat); } else if ((stat == -1) && ((errno == EINTR) || (errno == EAGAIN))) { ; /* interrupted read should be restarted */ } else if (stat > 0) { bytes_to_read -= stat; buf = stat + (char*)buf; /*advance pointer by # bytes read*/ } else { ELIO_ERROR(READFAIL, stat); } attempt++; } /* Only get here if all went OK */ #ifdef PABLO PABLO_end(pablo_code); #endif /* Read from next extent(s) ... relies on incrementing of buf */ if (nextbytes) { Fd_t next_fd = elio_get_next_extent(fd); if (!next_fd) ELIO_ERROR(OPENFAIL,0); stat = elio_read(next_fd, (Off_t) 0, buf, nextbytes); if (stat != nextbytes) ELIO_ERROR(READFAIL, stat); } return bytes; } /*\ Asynchronous Read: returns 0 if succeded or -1 if failed \*/ int elio_aread(Fd_t fd, Off_t doffset, void* buf, Size_t bytes, io_request_t * req_id) { off_t offset = (off_t) doffset; Size_t stat; #ifdef AIO int aio_i; #endif #ifdef CRAY int rc; #endif if (doffset >= ABSURDLY_LARGE) ELIO_ERROR(SEEKFAIL,0); /* Follow the linked list of extents down until we hit the file that contains the offset */ if (doffset >= elio_max_file_size(fd)) { Fd_t next_fd = elio_get_next_extent(fd); if (!next_fd) ELIO_ERROR(OPENFAIL,0); doffset -= elio_max_file_size(fd); return elio_aread(next_fd, doffset, buf, bytes, req_id); } /* Figure out if the read continues onto the next extent * ... if so then force the entire request to be done synchronously * so that we don't have to manage multiple async requests */ if ((doffset+((Off_t) bytes)) >= elio_max_file_size(fd)) { *req_id = ELIO_DONE; if (elio_read(fd, doffset, buf, bytes) != bytes) return -1; else return 0; } offset = (off_t) doffset; #ifdef PABLO int pablo_code = PABLO_elio_aread; PABLO_start( pablo_code ); #endif *req_id = ELIO_DONE; #ifdef AIO AIO_LOOKUP(aio_i); /* blocking io when request table is full */ if(aio_i >= MAX_AIO_REQ){ # if defined(DEBUG) fprintf(stderr, "elio_read: Warning- asynch overflow\n"); # endif SYNC_EMULATE(read); } else { *req_id = (io_request_t) aio_i; if((stat=elio_set_cb(fd, offset, aio_i, (void*) buf, bytes))) ELIO_ERROR((int)stat,0); # if defined(CRAY) rc = READA(fd->fd, buf, bytes, &cb_fout[aio_i].stat, DEFARG); stat = (rc < 0)? -1 : 0; # elif defined(AIX) #if !defined(AIX52) && !defined(_AIO_AIX_SOURCE) stat = aio_read(fd->fd, cb_fout+aio_i); #endif # else stat = aio_read(cb_fout+aio_i); # endif aio_req[aio_i] = *req_id; } #else /* call blocking write when AIO not available */ SYNC_EMULATE(read); #endif if(stat ==-1) ELIO_ERROR(AWRITFAIL, 0); #ifdef PABLO PABLO_end(pablo_code); #endif return((int)stat); } /*\ Wait for asynchronous I/O operation to complete. Invalidate id. \*/ int elio_wait(io_request_t *req_id) { int aio_i=0; int rc; rc=0; /* just to remove the compiler warning */ #ifdef PABLO int pablo_code = PABLO_elio_wait; PABLO_start( pablo_code ); #endif if(*req_id != ELIO_DONE ) { # ifdef AIO # if defined(CRAY) # if defined(FFIO) { struct ffsw dumstat, *prdstat=&(cb_fout[*req_id].stat); fffcntl(cb_fout[*req_id].filedes, FC_RECALL, prdstat, &dumstat); if (FFSTAT(*prdstat) == FFERR) ELIO_ERROR(SUSPFAIL,0); } # else { struct iosw *statlist[1]; statlist[0] = &(cb_fout[*req_id].stat); recall(cb_fout[*req_id].filedes, 1, statlist); } # endif # elif defined(AIX) # if !defined(AIX52) && !defined(_AIO_AIX_SOURCE) do { /* I/O can be interrupted on SP through rcvncall ! */ rc =(int)aio_suspend(1, cb_fout_arr+(int)*req_id); } while(rc == -1 && errno == EINTR); # endif # else if((int)aio_suspend((const struct aiocb *const*)(cb_fout_arr+(int)*req_id), 1, NULL) != 0) rc =-1; # endif if(rc ==-1) ELIO_ERROR(SUSPFAIL,0); # if defined(DECOSF) /* on DEC aio_return is required to clean internal data structures */ if(aio_return(cb_fout+(int)*req_id) == -1) ELIO_ERROR(RETUFAIL,0); # endif #endif while(aio_req[aio_i] != *req_id && aio_i < MAX_AIO_REQ) aio_i++; if(aio_i >= MAX_AIO_REQ) ELIO_ERROR(HANDFAIL, aio_i); aio_req[aio_i] = NULL_AIO; *req_id = ELIO_DONE; } #ifdef PABLO PABLO_end(pablo_code); #endif return ELIO_OK; } /*\ Check if asynchronous I/O operation completed. If yes, invalidate id. \*/ int elio_probe(io_request_t *req_id, int* status) { int errval=-1; int aio_i = 0; #ifdef PABLO int pablo_code = PABLO_elio_probe; PABLO_start( pablo_code ); #endif if(*req_id == ELIO_DONE){ *status = ELIO_DONE; } else { #ifdef AIO # if defined(CRAY) # if defined(FFIO) { struct ffsw dumstat, *prdstat=&(cb_fout[*req_id].stat); fffcntl(cb_fout[*req_id].filedes, FC_ASPOLL, prdstat, &dumstat); errval = (FFSTAT(*prdstat) == 0) ? INPROGRESS: 0; } # else errval = ( IO_DONE(cb_fout[*req_id].stat) == 0)? INPROGRESS: 0; # endif # elif defined(AIX) errval = aio_error(cb_fout[(int)*req_id].aio_handle); # else errval = aio_error(cb_fout+(int)*req_id); # endif #endif switch (errval) { case 0: while(aio_req[aio_i] != *req_id && aio_i < MAX_AIO_REQ) aio_i++; if(aio_i >= MAX_AIO_REQ) ELIO_ERROR(HANDFAIL, aio_i); *req_id = ELIO_DONE; *status = ELIO_DONE; aio_req[aio_i] = NULL_AIO; break; case INPROGRESS: *status = ELIO_PENDING; break; default: return PROBFAIL; } } #ifdef PABLO PABLO_end(pablo_code); #endif return ELIO_OK; } #if defined(CRAY) && defined(FFIO) static int cray_part_info(char *dirname,long *pparts,long *sparts) { struct statfs stats; long temp,count=0; if(statfs(dirname, &stats, sizeof(struct statfs), 0) == -1) return -1; temp = stats.f_priparts; while(temp != 0){ count++; temp <<= 1; } *pparts = count; if(stats.f_secparts != 0){ temp = (stats.f_secparts << count); count = 0; while(temp != 0){ count++; temp <<= 1; } *sparts = count; } return ELIO_OK; } #endif /*\ Noncollective File Open \*/ Fd_t elio_open(const char* fname, int type, int mode) { Fd_t fd=NULL; stat_t statinfo; int ptype=0, rc; char dirname[ELIO_FILENAME_MAX]; /* Create a file for writing to in lustre with a specified pagesize and stripe. pagesize = 1048576; lustre_stripe_count = 32; are good choices. */ #ifdef USE_LUSTRE struct lov_mds_md stripecfg; int lustre_file; int lustre_stripe_count; int pagesize; pagesize = 1048576; lustre_stripe_count = 32; #endif #ifdef PABLO int pablo_code = PABLO_elio_open; PABLO_start( pablo_code ); #endif if(first_elio_init) elio_init(); switch(type){ case ELIO_W: ptype = O_CREAT | O_TRUNC | O_WRONLY; break; case ELIO_R: ptype = O_RDONLY; break; case ELIO_RW: ptype = O_CREAT | O_RDWR; break; default: ELIO_ERROR_NULL(MODEFAIL, type); } #if defined(WIN32) || defined(CYGNUS) ptype |= O_BINARY; #endif if((fd = (Fd_t ) malloc(sizeof(fd_struct)) ) == NULL) ELIO_ERROR_NULL(ALOCFAIL, 0); if( (rc = elio_dirname(fname, dirname, ELIO_FILENAME_MAX)) != ELIO_OK) { free(fd); ELIO_ERROR_NULL(rc, 0); } if( (rc = elio_stat(dirname, &statinfo)) != ELIO_OK) { free(fd); ELIO_ERROR_NULL(rc, 0); } fd->fs = statinfo.fs; fd->mode = mode; fd->type = type; fd->extent = 0; fd->next = NULL; #ifdef USE_LUSTRE lustre_file = (strncmp(fname,"/dtemp",6) == 0) && (access(fname, F_OK) != 0) && (ME() == 0); if (lustre_file) { ptype = ptype | O_LOV_DELAY_CREATE ; } #endif #if defined(CRAY) && defined(FFIO) { struct ffsw ffstat; long pparts, sparts, cbits, cblocks; extern long _MPP_MY_PE; char *ffio_str="cache:256"; /* intern I/O buffer/cache 256*4096 bytes */ /* JN: we do not want read-ahead write-behind*/ if(cray_part_info(dirname,&pparts,&sparts) != ELIO_OK){ free(fd); ELIO_ERROR_NULL(STATFAIL, 0); } ptype |= ( O_BIG | O_PLACE | O_RAW ); cbits = (sparts != 0) ? 1 : 0; if( sparts != 0) { /* stripe is set so we only select secondary partitions with cbits */ if(mode == ELIO_SHARED){ cbits = ~((~0L)<fd = OPEN(fname, ptype, FOPEN_MODE, cbits, cblocks, &ffstat, NULL); else fd->fd = OPEN(fname, ptype, FOPEN_MODE, 0L , 0 , &ffstat, ffio_str); } #else fd->fd = OPEN(fname, ptype, FOPEN_MODE ); #endif if( (int)fd->fd == -1) { free(fd); ELIO_ERROR_NULL(OPENFAIL, 0); } fd->name = strdup(fname); #ifdef USE_LUSTRE if (lustre_file) { stripecfg.lmm_magic = LOV_MAGIC; stripecfg.lmm_pattern = 0; /* Only available option for now. */ stripecfg.lmm_stripe_size = pagesize; /* Stripe size in bytes. */ stripecfg.lmm_stripe_count = lustre_stripe_count; if (ioctl((int)fd->fd, LL_IOC_LOV_SETSTRIPE, &stripecfg) < 0) { fprintf(stderr, "fp_create_out_filefp: Error: unable to stripe %s file.\n" "error was %s\n", fname,strerror(errno)); fflush(stderr); free(fd); ELIO_ERROR_NULL(OPENFAIL, 0); } } /* end if (luster_file) (is in /dtemp) */ #endif #ifdef PABLO PABLO_end(pablo_code); #endif return(fd); } /*\ Close File \*/ int elio_close(Fd_t fd) { int status = ELIO_OK; #ifdef PABLO pablo_code = PABLO_elio_close; PABLO_start( pablo_code ); #endif if (fd->next) status = elio_close((Fd_t) fd->next); /*printf("Closing extent %d name %s\n", fd->extent, fd->name);*/ if(CLOSE(fd->fd)==-1 || (status != ELIO_OK)) ELIO_ERROR(CLOSFAIL, 0); free(fd->name); free(fd); #ifdef PABLO PABLO_end(pablo_code); #endif return ELIO_OK; } /*\ Close File \*/ int elio_fsync(Fd_t fd) { int status = ELIO_OK; #ifdef ELIO_FSYNC if (fd->next) status = elio_fsync((Fd_t) fd->next); /* printf("syncing extent %d name %s\n", fd->extent, fd->name); */ /* if(ELIO_FSYNC(fd->fd)==-1 || (status != ELIO_OK)) */ #ifndef WIN32 #if !defined(__INTERIX) #ifdef CATAMOUNT status = fsync((Fd_t) fd->next); #else sync(); #endif #endif #endif if(ELIO_FSYNC(fd->fd)==-1 ) ELIO_ERROR(FSYNCFAIL, 0); #endif return ELIO_OK; } /*\ Delete File \*/ int elio_delete(const char* filename) { int rc; if (access(filename, F_OK) != 0) /* Succeed if the file does not exist */ return ELIO_OK; #ifdef PABLO int pablo_code = PABLO_elio_delete; PABLO_start( pablo_code ); #endif rc = unlink(filename); /* Remeber the first rc ... now delete possible extents until one fails */ { int extent; for (extent=1; extentOK"); return; } else if(code == ELIO_PENDING_ERR) code = elio_pending_error; if(codeOFFSET+ERRLEN) *msg=(char)0; else (void) strcpy(msg, errtable[-OFFSET + code]); } int elio_pending_error=UNKNFAIL; char *errtable[ERRLEN] ={ ">Unable to Seek", ">Write Failed", ">Asynchronous Write Failed", ">Read Failed", ">Asynchronous Read Failed", ">Suspend Failed", ">I/O Request Handle not in Table", ">Incorrect File Mode", ">Unable to Determine Directory", ">Stat For Specified File or Directory Failed", ">Open Failed", ">Unable To Allocate Internal Data Structure", ">Unsupported Feature", ">Unlink Failed", ">Close Failed", ">Operation Interrupted Too Many Times", ">AIO Return Failed", ">Name String too Long", ">Unable to Determine Filesystem Type", ">Numeric Conversion Error", ">Incorrect Filesystem/Device Type", ">Error in Probe", ">Unable to Truncate", ">End of File", ">Fsync Failed", ""}; ga-5-3/pario/elio/eliop.h0000640005473000001440000000715212030366252014123 0ustar d3n000users#ifndef ELIOP_H #define ELIOP_H #ifdef WIN32 #include #include "winutil.h" #define F_OK 00 #endif #include #include #include #include #include #include "typesf2c.h" #define PRINT_AND_ABORT(msg, val) GA_Error(msg, (int)val) #ifndef GLOBAL_H extern void GA_Error(char*, int); #endif #if (defined(SP) || defined(SP1)) #define PIOFS 1 #endif #if (defined(CRAY) && !defined(__crayx1)) || defined(NEC) # include # define STATVFS statfs #elif defined(__FreeBSD__) || defined(MACX) # include # include # define STATVFS statfs # define NO_F_FRSIZE #elif defined(WIN32) # define STATVFS _stat # define S_ISDIR(mode) ((mode&S_IFMT) == S_IFDIR) # define S_ISREG(mode) ((mode&S_IFMT) == S_IFREG) #elif defined(CYGNUS) || defined(LINUX) || defined(CYGWIN) || defined(BGL) || defined(BGP) || defined(BGQ) || defined(HPUX) # include # define STATVFS statfs # define NO_F_FRSIZE #else # include # define STATVFS statvfs #endif #ifdef WIN32 #include #else #include #endif #include #if (defined(CRAY) && defined(FFIO)) # include # include # include #endif #include "elio.h" #include "pablo.h" extern int _elio_Errors_Fatal; extern void elio_init(void); extern int elio_pending_error; #if !defined(PRINT_AND_ABORT) # if defined(SUN) && !defined(SOLARIS) extern int fprintf(); extern void fflush(); # endif # define PRINT_AND_ABORT(msg, val){\ fprintf(stderr, "ELIO fatal error: %s %ld\n", msg, val);\ fprintf(stdout, "ELIO fatal error: %s %ld\n", msg, val);\ fflush(stdout);\ exit(val);\ } #endif /**************************** Error Macro ******************************/ /* ELIO defines error macro called in case of error * the macro can also use user-provided error routine PRINT_AND_ABORT * defined as macro to do some cleanup in the application before * aborting * The requirement is that PRINT_AND_ABORT is defined before * including ELIO header file - this file */ #define ELIO_ERROR_NULL(code, val){\ PABLO_end(pablo_code);\ if(! _elio_Errors_Fatal){\ elio_pending_error= code;\ return NULL;\ }\ if( _elio_Errors_Fatal)\ PRINT_AND_ABORT(errtable[code-OFFSET], val);\ } #define ELIO_ERROR(code, val) { \ PABLO_end(pablo_code);\ if(! _elio_Errors_Fatal) return(code);\ else PRINT_AND_ABORT(errtable[code-OFFSET], val);\ } /* error codes and messages */ #define ERRLEN 26 #define OFFSET (-2000) #define SEEKFAIL (OFFSET + 0) #define WRITFAIL (OFFSET + 1) #define AWRITFAIL (OFFSET + 2) #define READFAIL (OFFSET + 3) #define AREADFAIL (OFFSET + 4) #define SUSPFAIL (OFFSET + 5) #define HANDFAIL (OFFSET + 6) #define MODEFAIL (OFFSET + 7) #define DIRFAIL (OFFSET + 8) #define STATFAIL (OFFSET + 9) #define OPENFAIL (OFFSET + 10) #define ALOCFAIL (OFFSET + 11) #define UNSUPFAIL (OFFSET + 12) #define DELFAIL (OFFSET + 13) #define CLOSFAIL (OFFSET + 14) #define INTRFAIL (OFFSET + 15) #define RETUFAIL (OFFSET + 16) #define LONGFAIL (OFFSET + 17) #define FTYPFAIL (OFFSET + 18) #define CONVFAIL (OFFSET + 19) #define TYPEFAIL (OFFSET + 20) #define PROBFAIL (OFFSET + 21) #define TRUNFAIL (OFFSET + 22) #define EOFFAIL (OFFSET + 23) #define FSYNCFAIL (OFFSET + 24) #define UNKNFAIL (OFFSET + 25) extern char *errtable[ERRLEN]; #define ELIO_FILENAME_MAX 1024 #define SDIRS_INIT_SIZE 1024 #endif ga-5-3/pario/elio/pablo.h0000640005473000001440000000171411652267425014121 0ustar d3n000users/* Header file for PABLO instrumentation */ #if defined(PABLO) # define IOTRACE # include "IOTrace.h" #endif /* Pablo profiler definitions */ # define PABLO_elio_write 710000 # define PABLO_elio_awrite 710001 # define PABLO_elio_read 710002 # define PABLO_elio_aread 710003 # define PABLO_elio_wait 710004 # define PABLO_elio_probe 710005 # define PABLO_elio_stat 710006 # define PABLO_elio_open 710007 # define PABLO_elio_close 710009 # define PABLO_elio_set_cb 710010 # define PABLO_elio_delete 710011 # define PABLO_elio_truncate 710012 # define PABLO_elio_length 710014 #if defined(PABLO) # define PABLO_init initIOTrace # define PABLO_start(_id) startTimeEvent( _id ) # define PABLO_end(_id) endTimeEvent( _id ) # define PABLO_terminate {endIOTrace(); endTracing();} #else # define PABLO_init # define PABLO_start(_id) # define PABLO_end( _id ) # define PABLO_terminate #endif ga-5-3/pario/elio/stat.c0000640005473000001440000001021311652267425013764 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Id: stat.c,v 1.20.10.3 2007-08-30 18:19:44 manoj Exp $ */ #include "eliop.h" #include "chemio.h" #if defined(CRAY) && defined(__crayx1) #undef CRAY #endif #define DEBUG_ 0 /** * determines directory path for a given file */ int elio_dirname(const char *fname, char *dirname, int len) { size_t flen = strlen(fname); if(len<=((int)flen)) ELIO_ERROR(LONGFAIL,flen); #ifdef WIN32 while(fname[flen] != '/' && fname[flen] != '\\' && flen >0 ) flen--; #else while(fname[flen] != '/' && flen >0 ) flen--; #endif if(flen==0)strcpy(dirname,"."); else {strncpy(dirname, fname, flen); dirname[flen]=(char)0;} return(ELIO_OK); } #ifdef WIN32 #include #include /** * determine drive name given the file path name */ char* elio_drivename(const char* fname) { static char path[_MAX_PATH]; static char drive[_MAX_DRIVE]; if( _fullpath(path,fname,_MAX_PATH) == NULL) return NULL; _splitpath(path, drive, NULL, NULL, NULL); return(drive); } void get_avail_space(int dev, avail_t *avail, int* bsize) { static char drive[4]="A:\\"; int sectors, cfree, ctotal; drive[0]= dev + 'A'; GetDiskFreeSpace(drive, §ors, bsize, &cfree, &ctotal); *avail = sectors*(avail_t)cfree; } #endif /* WIN32 */ /** * Stat a file (or path) to determine it's filesystem info */ int elio_stat(char *fname, stat_t *statinfo) { struct stat ufs_stat; int bsize; struct STATVFS ufs_statfs; PABLO_start(PABLO_elio_stat); if(stat(fname, &ufs_stat) != 0) ELIO_ERROR(STATFAIL, 1); # if defined(PIOFS) /* fprintf(stderr,"filesystem %d\n",ufs_stat.st_vfstype);*/ /* according to /etc/vfs, "9" means piofs */ if(ufs_stat.st_vfstype == 9) statinfo->fs = ELIO_PIOFS; else # endif statinfo->fs = ELIO_UFS; /* only regular or directory files are OK */ if(!S_ISREG(ufs_stat.st_mode) && !S_ISDIR(ufs_stat.st_mode)) ELIO_ERROR(TYPEFAIL, 1); # if defined(CRAY) || defined(NEC) if(statfs(fname, &ufs_statfs, sizeof(ufs_statfs), 0) != 0) # elif defined (CATAMOUNT) statinfo->avail =2*1024*1024*128; return(ELIO_OK); # else if(STATVFS(fname, &ufs_statfs) != 0) # endif ELIO_ERROR(STATFAIL,1); # if defined(WIN32) get_avail_space(ufs_statfs.st_dev, &(statinfo->avail), &bsize); # else /* get number of available blocks */ # if defined(CRAY) || defined(NEC) /* f_bfree == f_bavail -- naming changes */ # ifdef CRAY if(ufs_statfs.f_secnfree != 0) /* check for secondary partition */ statinfo->avail = (avail_t) ufs_statfs.f_secnfree; else # endif statinfo->avail = (avail_t) ufs_statfs.f_bfree; # else statinfo->avail = (avail_t) ufs_statfs.f_bavail; # endif # ifdef NO_F_FRSIZE /* on some older systems it was f_bsize */ bsize = (int) ufs_statfs.f_bsize; # else /* get block size, fail if bszie is still 0 */ bsize = (int) ufs_statfs.f_frsize; if(bsize==0)bsize =(int) ufs_statfs.f_bsize; if(bsize==0) ELIO_ERROR(STATFAIL, 1); if(DEBUG_) printf("stat: f_frsize=%d f_bsize=%d bsize=%d free blocks=%ld\n", (int) ufs_statfs.f_frsize,(int) ufs_statfs.f_bsize, bsize, statinfo->avail ); # endif # endif /* translate number of available blocks into kilobytes */ switch (bsize) { case 512: statinfo->avail /=2; break; case 1024: break; case 2048: statinfo->avail *=2; break; case 4096: statinfo->avail *=4; break; case 8192: statinfo->avail *=8; break; case 16384: statinfo->avail *=16; break; case 32768: statinfo->avail *=32; break; default: { double avail; double factor = ((double)bsize)/1024.0; avail = factor * (double)statinfo->avail; statinfo->avail = (avail_t) avail; } } PABLO_end(PABLO_elio_stat); return(ELIO_OK); } ga-5-3/pario/elio/elio.h0000640005473000001440000000473511652267425013762 0ustar d3n000users/* file name: elio.h to be included by all apps that use ELIO */ /*include file that contains some common constants, also included by fortran */ #include "chemio.h" #include #include #define ELIO_UFS 0 /* Unix filesystem type */ #define ELIO_PFS 1 /* PFS Intel parallel filesystem type */ #define ELIO_PIOFS 2 /* IBM SP parallel filesystem type */ #define ELIO_PENDING_ERR -44 /* error code for failing elio_(g)open */ #define ELIO_SHARED 77 #define ELIO_PRIVATE 88 /*********************** type definitions for ELIO interface *****************/ typedef long Size_t; /* size of I/O request type */ typedef double Off_t; /* size of offset type - double = 56 bit integer*/ typedef struct { int fd; /* OS handle */ int fs; /* ??? */ int mode; /* ??? */ int type; /* ??? */ char *name; /* Name of physical file */ int extent; /* Counts extents of logical files */ struct fd_struct *next; /* Next extent */ } fd_struct; /* file descriptor type definition */ typedef fd_struct* Fd_t; #if defined(IBM) || defined(SOLARIS) || defined(HPUX) typedef unsigned long long avail_t; #else typedef unsigned long avail_t; #endif typedef struct{ int fs; avail_t avail; } stat_t; typedef long io_request_t; /* asynchronous I/O request type */ /********************** prototypes for elio functions ***********************/ extern Size_t elio_read(Fd_t fd, Off_t offset, void *buf, Size_t bytes); extern int elio_aread(Fd_t fd, Off_t offset, void *buf, Size_t bytes, io_request_t *req_id); extern Size_t elio_write(Fd_t fd, Off_t offset, const void *buf, Size_t bytes); extern int elio_awrite(Fd_t fd, Off_t offset, const void *buf, Size_t bytes, io_request_t *req_id); extern int elio_wait(io_request_t *id); extern int elio_probe(io_request_t *id, int* status); extern int elio_delete(const char *filename); extern Fd_t elio_open(const char *fname, int type, int mode); extern int elio_close(Fd_t fd); extern int elio_stat(char *fname, stat_t *statinfo); extern int elio_dirname(const char *fname, char *statinfo, int len); extern int elio_truncate(Fd_t fd, Off_t length); extern int elio_length(Fd_t fd, Off_t *length); extern void elio_errmsg(int code, char *msg); extern int elio_fsync(Fd_t fd); ga-5-3/pario/elio/chemio.h0000640005473000001440000000062506226562155014267 0ustar d3n000users#if !defined(CHEMIO_H) #define CHEMIO_H #define ELIO_RW -1 #define ELIO_W -2 #define ELIO_R -3 #define ELIO_DONE -1 #define ELIO_PENDING 1 #define ELIO_OK 0 #define CHEMIO_RW ELIO_RW #define CHEMIO_W ELIO_W #define CHEMIO_R ELIO_R #define CHEMIO_DONE ELIO_DONE #define CHEMIO_PENDING ELIO_PENDING #define CHEMIO_OK ELIO_OK #endif ga-5-3/NEWS0000640005473000001440000001444611470303441011301 0ustar d3n000users5.0 November 2010 * Now built using GNU autotools (autoconf,automake,libtool) * Restricted arrays (see user manual) * ARMCI runtime enhancements + On-demand connection management + Improved scalability for fence * New Python interface * Task Scheduling Library (tascel) 5.0b July 2010 * Now built using GNU autotools (autoconf,automake,libtool) 4.3 May 2010 * Optimized portals port to scale upto 200K procs * Optimized OpenIB port * BlueGene/P * Support for Sparse Data Operations + (See GA user manual - Chapter 11 for more details) 4.2 July 2009 * Support for several new platforms * Optimized portals port for Cray XT5 * BlueGene/P * Optimized OpenIB port * Support for Sparse Data Operations + (See GA user manual - Chapter 11 for more details) 4.1 May 2008 * Support for several new platforms + Cray XT4 + BlueGene/L, BlueGene/P + OpenIB network * Optimized one-sided non-blocking operations * New networks. i.e. ARMCI_NETWORK + OPENIB + PORTALS + MPI-SPAWN (one-sided communication thru' MPI2 Dynamic Process management and Send/Recv) 4.0 April 2006 * Support for multilevel parallelism: processor group awareness * GA_Dgemm matrix multiplication based on SRUMMA * Support for large arrays (a terabyte Global Array now possible) * Optimized one-sided non-blocking operations * Supports various platforms (Crays, IBM SPs, SGI Altix, ...) and interconnects (Myrinet, Quadrics, Infiniband, ...) 3.4 2004 (beta) * Initial support for multilevel parallelism * processor group awareness * nonblocking one-sided interfaces * optimized port to Cray X1, SGI Altix 3.3 July, 2003 * nonblocking one-sided interfaces * optimized matrix multiplication (ga_dgemm) * mirrored arrays * unoptimized port to Cray X1 * support for infiniband network (Mellanox VAPI) * GA CCA component 3.2 October, 2002 * support for ghost cells * port to Linux64/Itanium, Hitachi, Cray SV1, MAC X, and Cygwin * support two underscores in fortran names on Linux/Cygwin (enabled by setting F2C_TWO_UNDERSCORES) * C++ bindings to Global Arrays * element-wise and matrix operations * synchronization control in collective operations * additional datatypes: float & long in C, real in Fortran * cluster information calls * n-dim DRA 3.1 November 6th, 2000 * ports to 64-bit IBM, HP, Sun, Fujitsu, Linux/Alpha platforms * new operations: + periodic version of put,get,accumulate + nga_scatter_acc + nga_select_elem + ga_nblock + nga_select_elem * restructured makefiles to simplify changes and enable export of make definitions to application makefiles * new platforms supported by ARMCI (and thus GA) + Myrinet on Linux (Intel, Sparc) and Solaris/Sparc + Giganet on Linux/Intel + Compaq/Quadrics clusters + clusters of Windows NT under TCP/IP 3.0 November 15th, 1999 * This is the most significant update of the GA package to date: all source code for the core functionality of the library has been rewritten, ~90% of the library code is new/changed; * added support for n-dimensional arrays (n<=7); * added several n-dimensional test programs; * updated utility tools: ga_print, ga_summarize, which support n-dimensional operations; * improved interoperability with MPI on clusters of workstations * ports to Cray J90 and Windows NT (single machine) * ga_create uses default distribution for block size <1 rather than <2 (the old scheme can be restored see OLD_DEFAULT_BLK in src/GNUmakefile) * added a new, easier-to-use C interface (see ntestc.c) * added User's Manual 2.4 * port to IBM SP running LAPI active messages (significant performance improvement). Version >=2.3 of the IBM PSSP parallel environment and threaded version of MPI are required to run with LAPI. * port to Fujitsu VX-4 and VPP-700. * minor platform specific updates. 2.3 * added lock operations: ga_lock, ga_unlock, ga_create_mutex, ga_destroy_mutex * ga_acc works for integer data type * port to the CRAY T3E (with streams disabled) * environment variable TARGET_CPU can be use to guide compilation for particular CPU (R10000 and R8000 are currently recognized on the SGI systems) * a new TARGET, SGI_N32 used for the 64-bit SGI systems 2.2 * added support for double complex datatype; * port to HP and Convex SPP; * latency optimizations for IBM SP running AIX 4.X; * relaxed restriction on data types in ga_dscal, ga_dscal_patch, ga_dadd, ga_dadd_patch, ga_ifill_patch, ga_dfill_patch - these functions has been renamed to: ga_scale, ga_scale_patch, ga_add, ga_add_patch, ga_fill_patch; * new functions: ga_fence and ga_init_fence, ga_zdot, and ga_zdot_patch, ga_print_stats; * new interface functions to ScaLAPACK: ga_cholesky, ga_llt_solve, ga_spd_invert, ga_solve * several configuration parameters are exposed to the user in global/src/config.h to allow customization of the package. 2.1 * selection of message-passing (TCGMSG or MPI) library * new operations: ga_mpi_communicator and ga_proc_topology; * performance optimizations; * alternative C interface and C test programs; * port to Sun Solaris and PC running Linux. 2.0 * support for networks of multiprocessors (SMP); * (tightly) integrated shared and distributed memory versions; * ability to restrict memory usage in global arrays; * ga_scatter/gather supports integers; * a program to test performance of GA primitives; * different numbering of global array handles (< 0); * and other internal improvements, like randomized order of remote operations, prototypes of C-callable ops, etc. 1.3.1 * port to CRAY-T3D; * new operation ga_summarize; * improved ga_dgemm. 1.3 * introduced patch versions of ga_ddot, ga_dscal, ga_dadd; * also ga_matmul_patch, ga_ifill_patch, ga_dfill_patch, and ga_duplicate. * ga_copy_patch now has a transpose argument. 1.2 * (loosely) integrated shared and distributed memory versions ga-5-3/compat/0000750005473000001440000000000012275260525012064 5ustar d3n000usersga-5-3/compat/random.c0000640005473000001440000003320211633465620013511 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* * Copyright (c) 1983 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that the above copyright notice and this paragraph are * duplicated in all such forms and that any documentation, * advertising materials, and other materials related to such * distribution and use acknowledge that the software was developed * by the University of California, Berkeley. The name of the * University may not be used to endorse or promote products derived * from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)random.c 5.5 (Berkeley) 7/6/88"; #endif /* LIBC_SCCS and not lint */ #include /* * random.c: * An improved random number generation package. In addition to the standard * rand()/srand() like interface, this package also has a special state info * interface. The initstate() routine is called with a seed, an array of * bytes, and a count of how many bytes are being passed in; this array is then * initialized to contain information for random number generation with that * much state information. Good sizes for the amount of state information are * 32, 64, 128, and 256 bytes. The state can be switched by calling the * setstate() routine with the same array as was initiallized with initstate(). * By default, the package runs with 128 bytes of state information and * generates far better random numbers than a linear congruential generator. * If the amount of state information is less than 32 bytes, a simple linear * congruential R.N.G. is used. * Internally, the state information is treated as an array of longs; the * zeroeth element of the array is the type of R.N.G. being used (small * integer); the remainder of the array is the state information for the * R.N.G. Thus, 32 bytes of state information will give 7 longs worth of * state information, which will allow a degree seven polynomial. (Note: the * zeroeth word of state information also has some other information stored * in it -- see setstate() for details). * The random number generation technique is a linear feedback shift register * approach, employing trinomials (since there are fewer terms to sum up that * way). In this approach, the least significant bit of all the numbers in * the state table will act as a linear feedback shift register, and will have * period 2^deg - 1 (where deg is the degree of the polynomial being used, * assuming that the polynomial is irreducible and primitive). The higher * order bits will have longer periods, since their values are also influenced * by pseudo-random carries out of the lower bits. The total period of the * generator is approximately deg*(2**deg - 1); thus doubling the amount of * state information has a vast influence on the period of the generator. * Note: the deg*(2**deg - 1) is an approximation only good for large deg, * when the period of the shift register is the dominant factor. With deg * equal to seven, the period is actually much longer than the 7*(2**7 - 1) * predicted by this formula. */ /* * For each of the currently supported random number generators, we have a * break value on the amount of state information (you need at least this * many bytes of state info to support this random number generator), a degree * for the polynomial (actually a trinomial) that the R.N.G. is based on, and * the separation between the two lower order coefficients of the trinomial. */ #define TYPE_0 0 /* linear congruential */ #define BREAK_0 8 #define DEG_0 0 #define SEP_0 0 #define TYPE_1 1 /* x**7 + x**3 + 1 */ #define BREAK_1 32 #define DEG_1 7 #define SEP_1 3 #define TYPE_2 2 /* x**15 + x + 1 */ #define BREAK_2 64 #define DEG_2 15 #define SEP_2 1 #define TYPE_3 3 /* x**31 + x**3 + 1 */ #define BREAK_3 128 #define DEG_3 31 #define SEP_3 3 #define TYPE_4 4 /* x**63 + x + 1 */ #define BREAK_4 256 #define DEG_4 63 #define SEP_4 1 /* * Array versions of the above information to make code run faster -- relies * on fact that TYPE_i == i. */ #define MAX_TYPES 5 /* max number of types above */ static int degrees[ MAX_TYPES ] = { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 }; static int seps[ MAX_TYPES ] = { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 }; /* * Initially, everything is set up as if from : * initstate( 1, &randtbl, 128 ); * Note that this initialization takes advantage of the fact that srandom() * advances the front and rear pointers 10*rand_deg times, and hence the * rear pointer which starts at 0 will also end up at zero; thus the zeroeth * element of the state information, which contains info about the current * position of the rear pointer is just * MAX_TYPES*(rptr - state) + TYPE_3 == TYPE_3. */ static unsigned long randtbl[ DEG_3 + 1 ] = { TYPE_3, 0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342, 0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb, 0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd, 0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86, 0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7, 0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc, 0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b, 0xf5ad9d0e, 0x8999220b, 0x27fb47b9 }; /* * fptr and rptr are two pointers into the state info, a front and a rear * pointer. These two pointers are always rand_sep places aparts, as they cycle * cyclically through the state information. (Yes, this does mean we could get * away with just one pointer, but the code for random() is more efficient this * way). The pointers are left positioned as they would be from the call * initstate( 1, randtbl, 128 ) * (The position of the rear pointer, rptr, is really 0 (as explained above * in the initialization of randtbl) because the state table pointer is set * to point to randtbl[1] (as explained below). */ static long *fptr = (long*) &randtbl[ SEP_3 + 1 ]; static long *rptr = (long*) &randtbl[ 1 ]; /* * The following things are the pointer to the state information table, * the type of the current generator, the degree of the current polynomial * being used, and the separation between the two pointers. * Note that for efficiency of random(), we remember the first location of * the state information, not the zeroeth. Hence it is valid to access * state[-1], which is used to store the type of the R.N.G. * Also, we remember the last location, since this is more efficient than * indexing every time to find the address of the last element to see if * the front and rear pointers have wrapped. */ static long *state = (long*) &randtbl[ 1 ]; static int rand_type = TYPE_3; static int rand_deg = DEG_3; static int rand_sep = SEP_3; static long *end_ptr = (long*) &randtbl[ DEG_3 + 1 ]; /* * random: * If we are using the trivial TYPE_0 R.N.G., just do the old linear * congruential bit. Otherwise, we do our fancy trinomial stuff, which is the * same in all ther other cases due to all the global variables that have been * set up. The basic operation is to add the number at the rear pointer into * the one at the front pointer. Then both pointers are advanced to the next * location cyclically in the table. The value returned is the sum generated, * reduced to 31 bits by throwing away the "least random" low bit. * Note: the code takes advantage of the fact that both the front and * rear pointers can't wrap on the same call by not testing the rear * pointer if the front one has wrapped. * Returns a 31-bit random number. */ long random() { long i; if( rand_type == TYPE_0 ) { i = state[0] = ( state[0]*1103515245 + 12345 )&0x7fffffff; } else { *fptr += *rptr; i = (*fptr >> 1)&0x7fffffff; /* chucking least random bit */ if( ++fptr >= end_ptr ) { fptr = state; ++rptr; } else { if( ++rptr >= end_ptr ) rptr = state; } } return( i ); } /* * srandom: * Initialize the random number generator based on the given seed. If the * type is the trivial no-state-information type, just remember the seed. * Otherwise, initializes state[] based on the given "seed" via a linear * congruential generator. Then, the pointers are set to known locations * that are exactly rand_sep places apart. Lastly, it cycles the state * information a given number of times to get rid of any initial dependencies * introduced by the L.C.R.N.G. * Note that the initialization of randtbl[] for default usage relies on * values produced by this routine. */ void srandom( x ) unsigned x; { register int i; if( rand_type == TYPE_0 ) { state[ 0 ] = x; } else { state[ 0 ] = x; for( i = 1; i < rand_deg; i++ ) { state[i] = 1103515245*state[i - 1] + 12345; } fptr = &state[ rand_sep ]; rptr = &state[ 0 ]; for( i = 0; i < 10*rand_deg; i++ ) random(); } } /* * initstate: * Initialize the state information in the given array of n bytes for * future random number generation. Based on the number of bytes we * are given, and the break values for the different R.N.G.'s, we choose * the best (largest) one we can and set things up for it. srandom() is * then called to initialize the state information. * Note that on return from srandom(), we set state[-1] to be the type * multiplexed with the current value of the rear pointer; this is so * successive calls to initstate() won't lose this information and will * be able to restart with setstate(). * Note: the first thing we do is save the current state, if any, just like * setstate() so that it doesn't matter when initstate is called. * Returns a pointer to the old state. */ char * initstate( seed, arg_state, n ) unsigned seed; /* seed for R. N. G. */ char *arg_state; /* pointer to state array */ int n; /* # bytes of state info */ { register char *ostate = (char *)( &state[ -1 ] ); if( rand_type == TYPE_0 ) state[ -1 ] = rand_type; else state[ -1 ] = MAX_TYPES*(rptr - state) + rand_type; if( n < BREAK_1 ) { if( n < BREAK_0 ) { fprintf( stderr, "initstate: not enough state (%d bytes) with which to do jack; ignored.\n", n ); return 0; } rand_type = TYPE_0; rand_deg = DEG_0; rand_sep = SEP_0; } else { if( n < BREAK_2 ) { rand_type = TYPE_1; rand_deg = DEG_1; rand_sep = SEP_1; } else { if( n < BREAK_3 ) { rand_type = TYPE_2; rand_deg = DEG_2; rand_sep = SEP_2; } else { if( n < BREAK_4 ) { rand_type = TYPE_3; rand_deg = DEG_3; rand_sep = SEP_3; } else { rand_type = TYPE_4; rand_deg = DEG_4; rand_sep = SEP_4; } } } } state = &( ( (long *)arg_state )[1] ); /* first location */ end_ptr = &state[ rand_deg ]; /* must set end_ptr before srandom */ srandom( seed ); if( rand_type == TYPE_0 ) state[ -1 ] = rand_type; else state[ -1 ] = MAX_TYPES*(rptr - state) + rand_type; return( ostate ); } /* * setstate: * Restore the state from the given state array. * Note: it is important that we also remember the locations of the pointers * in the current state information, and restore the locations of the pointers * from the old state information. This is done by multiplexing the pointer * location into the zeroeth word of the state information. * Note that due to the order in which things are done, it is OK to call * setstate() with the same state as the current state. * Returns a pointer to the old state information. */ char * setstate( arg_state ) char *arg_state; { register long *new_state = (long *)arg_state; register int type = new_state[0]%MAX_TYPES; register int rear = new_state[0]/MAX_TYPES; char *ostate = (char *)( &state[ -1 ] ); if( rand_type == TYPE_0 ) state[ -1 ] = rand_type; else state[ -1 ] = MAX_TYPES*(rptr - state) + rand_type; switch( type ) { case TYPE_0: case TYPE_1: case TYPE_2: case TYPE_3: case TYPE_4: rand_type = type; rand_deg = degrees[ type ]; rand_sep = seps[ type ]; break; default: fprintf( stderr, "setstate: state info has been munged; not changed.\n" ); } state = &new_state[ 1 ]; if( rand_type != TYPE_0 ) { rptr = &state[ rear ]; fptr = &state[ (rear + rand_sep)%rand_deg ]; } end_ptr = &state[ rand_deg ]; /* set end_ptr too */ return( ostate ); } ga-5-3/compat/malloc.c0000640005473000001440000000041411256001653013470 0ustar d3n000users#include #undef malloc #include void *malloc(); /* Allocate an N-byte block of memory from the heap. If N is zero, allocate a 1-byte block. */ void *rpl_malloc(size_t n) { if (n == 0) { n = 1; } return malloc(n); } ga-5-3/compat/strdup.c0000640005473000001440000000037611272474200013551 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include extern char *strcpy(); extern size_t strlen(); char *strdup(char *s) { char *new; if ((new = malloc((size_t) (strlen(s)+1)))) (void) strcpy(new,s); return new; } ga-5-3/compat/strtok.c0000640005473000001440000000365111272474200013555 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * Primitive version of strtok for alliant etc who don't have it. * I think it works .... ? */ #undef NULL #define NULL 0 /** * Return 1 if in set, 0 otherwise. */ static int InSet(char *a, char *set) { register char test; register char b = (*a); while ( (test = *set++) ) { if (test == b) { return 1; } } return 0; } /* * Return pointer to next character in string not in set or * return NULL pointer if no such character. */ static char *NextNotInSet(char *string, char *set) { /* Return NULL if given NULL */ if (string == (char *) NULL) { return (char *) NULL; } while (*string) { if (InSet(string, set)) { string++; } else { break; } } if (*string) { return string; } else { return (char *) NULL; } } /** * Return pointer to next character in string in set or * return NULL pointer if no such character. */ static char *NextInSet(char *string, char *set) { /* Return NULL if given NULL */ if (string == (char *) NULL) { return (char *) NULL; } while (*string) { if (InSet(string, set)) { break; } else { string++; } } if (*string) { return string; } else { return (char *) NULL; } } /** * Naive version of strtok for the alliant. */ char *strtok(char *s1, char *s2) { static char *string = (char *) NULL; char *start, *end; /* Initialize on first call */ if (s1 != (char *) NULL) { string = s1; } start = NextNotInSet(string, s2); /* Find start of next token */ end = NextInSet(start, s2); /* Find end of this token */ if (end == (char *) NULL) { string = (char *) NULL; } else { string = end + 1; *end = '\0'; } return start; } ga-5-3/compat/memalign.c0000640005473000001440000000200511272474200014010 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file */ /** * Cut from SUN man-page. * * memalign() allocates size bytes on a specified alignment * boundary, and returns a pointer to the allocated block. The * value of the returned address is guaranteed to be an even * multiple of alignment. Note: the value of alignment must be * a power of two, and must be greater than or equal to the * size of a word. * * No checking is done on the value of alignment ... should really. */ char *memalign(unsigned alignment, unsigned size) { union screwup { unsigned long integer; char *address; } fiddle; unsigned long offset; alignment += alignment; /* Actually align on twice requested boundary */ fiddle.address = malloc((unsigned) (alignment+size)); if (fiddle.address != (char *) 0) { offset = fiddle.integer & (alignment-1); if (offset != 0) { fiddle.address += alignment - offset; } } return fiddle.address; } ga-5-3/compat/dummy.c0000640005473000001440000000026011324122542013350 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif int dummy_func_for_nonempty_libcompat_ga(int dummy) { int dont_optimize_away = 4; return dont_optimize_away + dummy; } ga-5-3/tascel/0000750005473000001440000000000012275260573012057 5ustar d3n000usersga-5-3/tascel/doc/0000750005473000001440000000000012275260572012623 5ustar d3n000usersga-5-3/tascel/doc/Doxyfile0000640005473000001440000020724711467703133014343 0ustar d3n000users# Doxyfile 1.7.2 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" "). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = "Task Scheduling Library (tascel)" # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful if your file system # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this # tag. The format is ext=language, where ext is a file extension, and language # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also makes the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will roughly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespaces are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or macro consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and macros in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. The create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # The WARN_NO_PARAMDOC option can be enabled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ../src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py # *.f90 *.f *.vhd *.vhdl FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the stylesheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = YES # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [0,1..20]) # that doxygen will group on one line in the generated HTML documentation. # Note that a value of 0 will completely suppress the enum values from appearing in the overview section. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are # not supported properly for IE 6.0, but are supported on all modern browsers. # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax # (see http://www.mathjax.org) which uses client side Javascript for the # rendering instead of using prerendered bitmaps. Use this if you do not # have LaTeX installed or if you want to formulas look prettier in the HTML # output. When enabled you also need to install MathJax separately and # configure the path to it using the MATHJAX_RELPATH option. USE_MATHJAX = NO # When MathJax is enabled you need to specify the location relative to the # HTML output directory using the MATHJAX_RELPATH option. The destination # directory should contain the MathJax.js script. For instance, if the mathjax # directory is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the mathjax.org site, so you can quickly see the result without installing # MathJax, but it is strongly recommended to install a local copy of MathJax # before deployment. MATHJAX_RELPATH = http://www.mathjax.org/mathjax # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client # using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server # based approach is that it scales better to large projects and allows # full text search. The disadvantages are that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option also works with HAVE_DOT disabled, but it is recommended to # install and use dot, since it yields more powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans.ttf # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will generate a graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif. # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the # \mscfile command). MSCFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES ga-5-3/tascel/doc/style0000640005473000001440000005130511467703133013710 0ustar d3n000users############################################################################## # This is the Artistic Style (astyle) options file used by tascel. ############################################################################## # # The command line options have precedence. If there is a conflict between # a command line option and an option in the default options file, the # command line option will be used. # # Lines within this options file that begin with '#' are considered # line-comments. # # astyle looks for this file in the following locations (in order): # 1. the file indicated by the --options= command line option; # 2. the file and directory indicated by the environment variable # ARTISTIC_STYLE_OPTIONS (if it exists); # 3. the file named .astylerc in the directory pointed to by the HOME # environment variable (e.g. "$HOME/.astylerc" on Linux); # 4. the file named astylerc in the directory pointed to by the # USERPROFILE environment variable (e.g. "%USERPROFILE%\astylerc" on # Windows). # ############################################################################## ### tascel Style Options ##################################################### ############################################################################## # --indent=spaces=2 --brackets=attach --indent-classes --indent-switches --indent-namespaces --indent-col1-comments --max-instatement-indent=40 --pad-oper --pad-header --unpad-paren --break-closing-brackets --add-brackets --convert-tabs --align-pointer=name # ############################################################################## ### Tab and Bracket Options ################################################## ############################################################################## # ## default indent option ## If no indentation option is set, the default option of 4 spaces will be ## used (e.g. -s4 --indent=spaces=4). # # ---------------------------------------------------------------------------- # --indent=spaces / --indent=spaces=# / -s# # Indent using # spaces per indent (e.g. -s6 --indent=spaces=6). # must be # between 2 and 20. Not specifying # will result in a default of 4 spaces per # indent. # # ---------------------------------------------------------------------------- # --indent=tab / --indent=tab=# / -t / -t# # Indent using tab characters. Treat each tab as # spaces # (e.g. -t6 / --indent=tab=6). # must be between 2 and 20. If no # is set, # treats tabs as 4 spaces. # # ---------------------------------------------------------------------------- # --indent=force-tab / --indent=force-tab=# / -T / -T# # Indent using tab characters. Treat each tab as # spaces # (e.g. -T6 / --indent=force-tab=6). Uses tabs as indents where ‑‑indent=tab # prefers to use spaces, such as inside multi-line statements. # must be # between 2 and 20. If no # is set, treats tabs as 4 spaces. # # ---------------------------------------------------------------------------- ## default brackets option ## If no brackets option is set, the brackets will not be changed. # # ---------------------------------------------------------------------------- # --brackets=break / -b # Break brackets from their pre-block statements ( e.g. Allman / ANSI style ). # # void Foo(bool isFoo) # { # if (isFoo) # { # bar(); # } # else # { # anotherBar(); # } # } # # ---------------------------------------------------------------------------- # --brackets=attach / -a # Attach brackets to their pre-block statements ( e.g. Java style ). # # void Foo(bool isFoo) { # if (isFoo) { # bar(); # } else { # anotherBar(); # } # } # # ---------------------------------------------------------------------------- # --brackets=linux / -l # Break brackets from namespace, class, and function definitions, but attach # brackets to statements within a function ( e.g. K&R / Linux style ). # # With C++ files brackets are attached for function definitions within a class # (inline class functions). The brackets are also attached for arrays, structs, # enums, and other top level objects that are not classes or functions. This # option is effective for C/C++ files only. # # void Foo(bool isFoo) # { # if (isFoo) { # bar(); # } else { # anotherBar; # } # } # # ---------------------------------------------------------------------------- # --brackets=stroustrup / -u # Break brackets from function definitions only. Attach brackets to # namespaces, classes, and statements within a function ( e.g. Stroustrup # style ). # # With C++ files brackets are attached for function definitions within a class # (inline class functions). The brackets are also attached for arrays, structs, # enums, and other top level objects that are not classes or functions. This # option is effective for C/C++ files only. # # void Foo(bool isFoo) # { # if (isFoo) { # bar(); # } else { # anotherBar; # } # } # # ---------------------------------------------------------------------------- # --brackets=horstmann / -g # Break brackets from their pre-block statements but allow run-in statements # on the same line as an opening bracket ( e.g. Horstmann style ). # # void Foo(bool isFoo) # { if (isFoo()) # { bar1(); # bar2(); # } # else # { anotherBar(); # } # } # ############################################################################## ### Indentation Options ###################################################### ############################################################################## # # --indent-classes / -C # Indent 'class' and 'struct' blocks so that the blocks 'public:', # 'protected:' and 'private:' are indented. The struct blocks are indented # only if an access modifier is declared somewhere in the struct. The entire # block is indented. This option is effective for C++ files only. # # class Foo # { # public: # Foo(); # virtual ~Foo(); # }; # # becomes: # # class Foo # { # public: # Foo(); # virtual ~Foo(); # }; # # ---------------------------------------------------------------------------- # --indent-switches / -S # Indent 'switch' blocks so that the 'case X:' statements are indented in the # switch block. The entire case block is indented. # # switch (foo) # { # case 1: # a += 1; # break; # # case 2: # { # a += 2; # break; # } # } # # becomes: # # switch (foo) # { # case 1: # a += 1; # break; # # case 2: # { # a += 2; # break; # } # } # # ---------------------------------------------------------------------------- # --indent-cases / -K # Indent 'case X:' blocks from the 'case X:' headers. Case statements not # enclosed in blocks are NOT indented. # # switch (foo) # { # case 1: # a += 1; # break; # # case 2: # { # a += 2; # break; # } # } # # becomes: # # switch (foo) # { # case 1: # a += 1; # break; # # case 2: # { # a += 2; # break; # } # } # # ---------------------------------------------------------------------------- # --indent-brackets / -B # Add extra indentation to brackets. This is the option used for Whitesmith # and Banner style formatting/indenting. If both ‑‑indent‑brackets and # ‑‑indent‑blocks are used the result will be ‑‑indent‑blocks. This option # will be ignored if used with a predefined style. # # if (isFoo) # { # bar(); # } # else # anotherBar(); # # becomes: # # if (isFoo) # { # bar(); # } # else # anotherBar(); # # ---------------------------------------------------------------------------- # --indent-blocks / -G # Add extra indentation to blocks within a function. The opening bracket for # namespaces, classes, and functions is not indented. This is the option used # for GNU style formatting/indenting. This option will be ignored if used with # a predefined style. # # if (isFoo) # { # bar(); # } # else # anotherBar(); # # becomes: # # if (isFoo) # { # bar(); # } # else # anotherBar(); # # ---------------------------------------------------------------------------- # --indent-namespaces / -N # Add extra indentation to namespace blocks. This option has no effect on Java # files. # # namespace foospace # { # class Foo # { # public: # Foo(); # virtual ~Foo(); # }; # } # # becomes: # # namespace foospace # { # class Foo # { # public: # Foo(); # virtual ~Foo(); # }; # } # # ---------------------------------------------------------------------------- # --indent-labels / -L # Add extra indentation to labels so they appear 1 indent less than the # current indentation, rather than being flushed to the left (the default). # # void Foo() { # while (isFoo) { # if (isFoo) # goto error; # ... # error: # ... # } # } # # becomes (with indented 'error:'): # # void Foo() { # while (isFoo) { # if (isFoo) # goto error; # ... # error: # ... # } # } # # ---------------------------------------------------------------------------- # --indent-preprocessor / -w # Indent multi-line preprocessor definitions ending with a backslash. Should # be used with --convert-tabs for proper results. Does a pretty good job, but # can not perform miracles in obfuscated preprocessor definitions. Without # this option the preprocessor statements remain unchanged. # # #define Is_Bar(arg,a,b) \ # (Is_Foo((arg), (a)) \ # || Is_Foo((arg), (b))) # # becomes: # # #define Is_Bar(arg,a,b) \ # (Is_Foo((arg), (a)) \ # || Is_Foo((arg), (b))) # # ---------------------------------------------------------------------------- # --indent-col1-comments / -Y # Indent C++ comments beginning in column one. By default C++ comments # beginning in column one are not indented. This option will allow the # comments to be indented with the code. # # void Foo()\n" # { # // comment # if (isFoo) # bar(); # } # # becomes: # # void Foo()\n" # { # // comment # if (isFoo) # bar(); # } # # ---------------------------------------------------------------------------- # --max-instatement-indent=# / -M# # Indent a maximum of # spaces in a continuous statement, relative to the # previous line (e.g. ‑‑max‑instatement‑indent=40). # must be less than 80. If # no # is set, the default value of 40 will be used. A maximum of less than # two indent lengths will be ignored. # # fooArray[] = { red, # green, # blue }; # # fooFunction(barArg1, # barArg2, # barArg3); # # becomes (with larger value): # # fooArray[] = { red, # green, # blue }; # # fooFunction(barArg1, # barArg2, # barArg3); # # ---------------------------------------------------------------------------- # --min-conditional-indent=# / -m# # Set the minimal indent that is added when a header is built of # multiple-lines. This indent makes helps to easily separate the header from # the command statements that follow. The value for # must be less than 40. # The default setting for this option is twice the current indent # (e.g. --min-conditional-indent=8). # # // default setting makes this non-bracketed code clear # if (a < b # || c > d) # foo++; # # // but creates an exaggerated indent in this bracketed code # if (a < b # || c > d) # { # foo++; # } # # becomes (when setting --min-conditional-indent=0): # # // setting makes this non-bracketed code less clear # if (a < b # || c > d) # foo++; # # // but makes this bracketed code clearer # if (a < b # || c > d) # { # foo++; # } # ############################################################################## ### Padding Options ########################################################## ############################################################################## # # --break-blocks / -f # Pad empty lines around header blocks (e.g. 'if', 'for', 'while'...). # # isFoo = true; # if (isFoo) { # bar(); # } else { # anotherBar(); # } # isBar = false; # # becomes: # # isFoo = true; # # if (isFoo) { # bar(); # } else { # anotherBar(); # } # # isBar = false; # # ---------------------------------------------------------------------------- # --break-blocks=all / -F # Pad empty lines around header blocks (e.g. 'if', 'for', 'while'...). Treat # closing header blocks (e.g. 'else', 'catch') as stand-alone blocks. # # isFoo = true; # if (isFoo) { # bar(); # } else { # anotherBar(); # } # isBar = false; # # becomes: # # isFoo = true; # # if (isFoo) { # bar(); # # } else { # anotherBar(); # } # # isBar = false; # # ---------------------------------------------------------------------------- # --pad-oper / -p # Insert space padding around operators. Operators inside block parens [] are # not padded. Any end of line comments will remain in the original column, if # possible. Note that there is no option to unpad. Once padded, they stay # padded. # # if (foo==2) # a=bar((b-c)*a,*d--); # # becomes: # # if (foo == 2) # a = bar((b - c) * a, * d--); # # ---------------------------------------------------------------------------- # --pad-paren / -P # Insert space padding around parenthesis on both the outside and the inside. # Any end of line comments will remain in the original column, if possible. # # if (isFoo(a, b)) # bar(a, b); # # becomes: # # if ( isFoo ( a, b ) ) # bar ( a, b ); # # ---------------------------------------------------------------------------- # --pad-paren-out / -d # Insert space padding around parenthesis on the outside only. Any end of line # comments will remain in the original column, if possible. This can be used # with unpad-paren below to remove unwanted spaces. # # if (isFoo(a, b)) # bar(a, b); # # becomes: # # if (isFoo (a, b) ) # bar (a, b); # # ---------------------------------------------------------------------------- # --pad-paren-in / -D # Insert space padding around parenthesis on the inside only. Any end of line # comments will remain in the original column, if possible. This can be used # with unpad-paren below to remove unwanted spaces. # # if (isFoo(a, b)) # bar(a, b); # # becomes: # # if ( isFoo( a, b ) ) # bar( a, b ); # # ---------------------------------------------------------------------------- # --pad-header / -H # Insert space padding after paren headers only (e.g. 'if', 'for', 'while'...). # Any end of line comments will remain in the original column, if possible. # This can be used with unpad-paren to remove unwanted spaces. # # if(isFoo(a, b)) # bar(a, b); # # becomes: # # if (isFoo(a, b)) # bar(a, b); # # ---------------------------------------------------------------------------- # --unpad-paren / -U # Remove extra space padding around parenthesis on the inside and outside. # Any end of line comments will remain in the original column, if possible. # This option can be used in combination with the paren padding options # pad‑paren, pad‑paren‑out, pad‑paren‑in, and pad‑header above. Only padding # that has not been requested by other options will be removed. # # For example, if a source has parens padded on both the inside and outside, # and you want inside only. You need to use unpad-paren to remove the outside # padding, and pad‑paren‑in to retain the inside padding. Using only # pad‑paren‑in would not remove the outside padding. # # if ( isFoo( a, b ) ) # bar ( a, b ); # # becomes (with no padding option requested): # # if (isFoo(a, b)) # bar(a, b); # # ---------------------------------------------------------------------------- # --delete-empty-lines / -x # Delete empty lines within a function or method. Empty lines outside of # functions or methods are NOT deleted. If used with break-blocks or # break-blocks=all it will delete all lines EXCEPT the lines added by the # break-blocks options. # # void Foo() # { # # foo1 = 1; # # foo2 = 2; # # } # # becomes: # # void Foo() # { # foo1 = 1; # foo2 = 2; # } # # ---------------------------------------------------------------------------- # --fill-empty-lines / -E # Fill empty lines with the white space of the previous line. # ############################################################################## ### Formatting Options ####################################################### ############################################################################## # # --break-closing-brackets / -y # When used with --brackets=attach, --brackets=linux, or --brackets=stroustrup, # this breaks closing headers (e.g. 'else', 'catch', ...) from their # immediately preceding closing brackets. Closing header brackets are always # broken with broken brackets, horstmann brackets, indented blocks, and # indented brackets. # # void Foo(bool isFoo) { # if (isFoo) { # bar(); # } else { # anotherBar(); # } # } # # becomes (with a broken 'else'): # # void Foo(bool isFoo) { # if (isFoo) { # bar(); # } # else { # anotherBar(); # } # } # # ---------------------------------------------------------------------------- # --break-elseifs / -e # Break "else if" header combinations into separate lines. This option has no # effect if keep-one-line-statements is used, the "else if" statements will # remain as they are. # # If this option is NOT used, "else if" header combinations will be placed on # a single line. # # if (isFoo) { # bar(); # } # else if (isFoo1()) { # bar1(); # } # else if (isFoo2()) } # bar2; # } # # becomes: # # if (isFoo) { # bar(); # } # else # if (isFoo1()) { # bar1(); # } # else # if (isFoo2()) { # bar2(); # } # # ---------------------------------------------------------------------------- # --add-brackets / -j # Add brackets to unbracketed one line conditional statements (e.g. 'if', # 'for', 'while'...). The statement must be on a single line. The brackets # will be added according to the currently requested predefined style or # bracket type. If no style or bracket type is requested the brackets will be # attached. If --add-one-line-brackets is also used the result will be one # line brackets. # # if (isFoo) # isFoo = false; # # becomes: # # if (isFoo) { # isFoo = false; # } # # ---------------------------------------------------------------------------- # --add-one-line-brackets / -J # Add one line brackets to unbracketed one line conditional statements (e.g. # 'if', 'for', 'while'...). The statement must be on a single line. The option # implies --keep-one-line-blocks and will not break the one line blocks. # # if (isFoo) # isFoo = false; # # becomes: # # if (isFoo) # { isFoo = false; } # # ---------------------------------------------------------------------------- # --keep-one-line-blocks / -O # Don't break one-line blocks. # # if (isFoo) # { isFoo = false; cout << isFoo << endl; } # # remains unchanged. # # ---------------------------------------------------------------------------- # --keep-one-line-statements / -o # Don't break complex statements and multiple statements residing on a single # line. # # if (isFoo) # { # isFoo = false; cout << isFoo << endl; # } # # remains unchanged. # # if (isFoo) DoBar(); # # remains unchanged. # # ---------------------------------------------------------------------------- # --convert-tabs / -c # Converts tabs into spaces in the non-indentation part of the line. The # number of spaces inserted will maintain the spacing of the tab. The current # setting for spaces per tab is used. It may not produce the expected results # if convert-tabs is used when changing spaces per tab. Tabs are not replaced # in quotes. # # ---------------------------------------------------------------------------- # --align-pointer=type / -k1 # --align-pointer=middle / -k2 # --align-pointer=name / -k3 # Attach a pointer or reference operator (* or &) to either the variable type # (left) or variable name (right), or place it between the type and name. The # spacing between the type and name will be preserved, if possible. This # option is effective for C/C++ files only. # # char *foo1; # # becomes (with align-pointer=type): # # char* foo1; # # char* foo2; # # becomes (with align-pointer=middle): # # char * foo2; # # char& foo3; # # becomes (with align-pointer=name): # # char &foo3; # # ---------------------------------------------------------------------------- # --mode=c # --mode=cs # --mode=java # Indent a C/C++, C#, or Java file. The option is usually set from the file # extension for each file. You can override the setting with this entry. It # will be used for all files regardless of the file extension. It allows the # formatter to identify language specific syntax such as C++ classes, # templates, and keywords. # ga-5-3/tascel/Makefile.am0000640005473000001440000001020311577714402014107 0ustar d3n000usersACLOCAL_AMFLAGS = -I m4 -I ../m4 BUILT_SOURCES = EXTRA_DIST = AM_FFLAGS = AM_FFLAGS += $(FFLAG_INT) AM_CFLAGS = AM_CXXFLAGS = AM_CPPFLAGS = AM_CPPFLAGS += -I$(top_srcdir)/src AM_CPPFLAGS += $(GA_CPPFLAGS) AM_CPPFLAGS += $(LAPACK_CPPFLAGS) AM_CPPFLAGS += $(BLAS_CPPFLAGS) AM_CPPFLAGS += $(GA_MP_CPPFLAGS) LDADD = LDADD += libtascel.la LDADD += $(GA_LIBS) LDADD += $(LAPACK_LIBS) LDADD += $(BLAS_LIBS) LDADD += $(GA_MP_LIBS) LDADD += $(FLIBS) AM_LDFLAGS = AM_LDFLAGS += $(GA_LDFLAGS) AM_LDFLAGS += $(LAPACK_LDFLAGS) AM_LDFLAGS += $(BLAS_LDFLAGS) AM_LDFLAGS += $(GA_MP_LDFLAGS) clean-local: clean-config include_HEADERS = include_HEADERS += src/AccessMode.h include_HEADERS += src/Comm.h include_HEADERS += src/Counter.h include_HEADERS += src/DataColl.h include_HEADERS += src/DenseArray.h include_HEADERS += src/FuncReg.h include_HEADERS += src/massert.h include_HEADERS += src/SharedQueue.h include_HEADERS += src/Sleep.h include_HEADERS += src/SplitQueue.h include_HEADERS += src/SplitQueueOpt.h include_HEADERS += src/StealingStats.h include_HEADERS += src/TaskCollProps.h include_HEADERS += src/Timer.h include_HEADERS += src/TerminationDetector.h include_HEADERS += src/UniformTaskCollection.h include_HEADERS += src/UniformTaskCollectionShared.h include_HEADERS += src/UniformTaskCollectionSplit.h include_HEADERS += src/UniformTaskCollSplitData.h lib_LTLIBRARIES = lib_LTLIBRARIES += libtascel.la nodist_libtascel_la_SOURCES = libtascel_la_SOURCES = libtascel_la_SOURCES += src/Comm.cc libtascel_la_SOURCES += src/DenseArray.cc libtascel_la_SOURCES += src/FuncReg.cc libtascel_la_SOURCES += src/SharedQueue.cc libtascel_la_SOURCES += src/Sleep.cc libtascel_la_SOURCES += src/SplitQueue.cc libtascel_la_SOURCES += src/SplitQueueOpt.cc libtascel_la_SOURCES += src/StealingStats.cc libtascel_la_SOURCES += src/TaskCollProps.cc libtascel_la_SOURCES += src/TerminationDetector.cc libtascel_la_SOURCES += src/UniformTaskCollection.cc libtascel_la_SOURCES += src/UniformTaskCollectionShared.cc libtascel_la_SOURCES += src/UniformTaskCollectionSplit.cc libtascel_la_SOURCES += src/UniformTaskCollSplitData.cc BUILT_SOURCES += config.fh nodist_libtascel_la_SOURCES += config.fh config.fh: $(top_build_prefix)config.h @-rm -f config.fh $(AM_V_SED) \ $(SED) "/^#/!d" $(top_build_prefix)config.h > config.fh clean-config: -rm -f config.fh check_PROGRAMS = check_PROGRAMS += test/TestSharedQueue check_PROGRAMS += test/TestSplitQueue if HAVE_BLAS check_PROGRAMS += examples/scf/scf endif test_TestSharedQueue_SOURCES = test/TestQueue.cc test_TestSharedQueue_CPPFLAGS = $(AM_CPPFLAGS) -DSHARED_QUEUE test_TestSplitQueue_SOURCES = test/TestQueue.cc test_TestSplitQueue_CPPFLAGS = $(AM_CPPFLAGS) -DSPLIT_QUEUE examples_scf_scf_SOURCES = examples_scf_scf_SOURCES += examples/scf/cscf.h examples_scf_scf_SOURCES += examples/scf/input.F examples_scf_scf_SOURCES += examples/scf/integ.F examples_scf_scf_SOURCES += examples/scf/main.c examples_scf_scf_SOURCES += examples/scf/output.F examples_scf_scf_SOURCES += examples/scf/scf.F examples_scf_scf_SOURCES += examples/scf/timer.F examples_scf_scf_SOURCES += examples/scf/twoelcpp.cc EXTRA_DIST += examples/scf/README EXTRA_DIST += examples/scf/be.inpt EXTRA_DIST += examples/scf/be16.inpt .PHONY: checkprogs checkprogs: $(check_PROGRAMS) TESTS = $(SERIAL_TESTS) $(PARALLEL_TESTS) SERIAL_TESTS = PARALLEL_TESTS = PARALLEL_TESTS += test/TestSharedQueue$(EXEEXT) PARALLEL_TESTS += test/TestSplitQueue$(EXEEXT) if HAVE_BLAS PARALLEL_TESTS += examples/scf/scf$(EXEEXT) endif if CROSS_COMPILING LOG_COMPILER = \ maybe_mpiexec=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo "$(MPIEXEC)" | $(SED) 's/%NP%/1/'; else echo "$(MPIEXEC)" | $(SED) 's/%NP%/$(NPROCS)/'; fi`; $$maybe_mpiexec else LOG_COMPILER = \ maybe_mpiexec=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo ""; else if echo "$(MPIEXEC)" | $(GREP) "%NP%" > /dev/null; then echo "$(MPIEXEC)" | $(SED) 's/%NP%/$(NPROCS)/'; else echo "$(MPIEXEC)"; fi; fi`; $$maybe_mpiexec endif # CROSS_COMPILING # support verbose/silent make rules for additional programs # sed AM_V_SED = $(am__v_SED_$(V)) am__v_SED_ = $(am__v_SED_$(AM_DEFAULT_VERBOSITY)) am__v_SED_0 = @echo " SED " $@; ga-5-3/tascel/configure0000750005473000001440000352226612247166641014006 0ustar d3n000users#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Task Scheduling Library (tascel) 0.0.1. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and hpctools@pnl.gov $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Task Scheduling Library (tascel)' PACKAGE_TARNAME='tascel' PACKAGE_VERSION='0.0.1' PACKAGE_STRING='Task Scheduling Library (tascel) 0.0.1' PACKAGE_BUGREPORT='hpctools@pnl.gov' PACKAGE_URL='http://www.emsl.pnl.gov/docs/global/' ac_unique_file="src/Comm.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL ac_ct_AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED LIBTOOL RANLIB AR_FLAGS AR HAVE_SCALAPACK_FALSE HAVE_SCALAPACK_TRUE SCALAPACK_CPPFLAGS SCALAPACK_LDFLAGS SCALAPACK_LIBS HAVE_LAPACK_FALSE HAVE_LAPACK_TRUE LAPACK_CPPFLAGS LAPACK_LDFLAGS LAPACK_LIBS HAVE_BLAS_FALSE HAVE_BLAS_TRUE BLAS_CPPFLAGS BLAS_LDFLAGS BLAS_LIBS GA_FLIBS GA_LIBS GA_LDFLAGS GA_CPPFLAGS CPP GA_CONFIG F2C_DOUBLE_PRECISION_C_TYPE F2C_REAL_C_TYPE F2C_INTEGER_C_TYPE F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS F2C_IARGC F2C_GETARG FLD_NOMAIN FFLAG_INT FLIBS ENABLE_F77_FALSE ENABLE_F77_TRUE NOFORT_FALSE NOFORT_TRUE ac_ct_F77 FFLAGS F77 MPIF77 EGREP GREP CXXCPP am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX MPICXX PERL am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MPICC GA_MP_CPPFLAGS GA_MP_LDFLAGS GA_MP_LIBS MSG_COMMS_TCGMSG5_FALSE MSG_COMMS_TCGMSG5_TRUE MSG_COMMS_TCGMSG4_FALSE MSG_COMMS_TCGMSG4_TRUE MSG_COMMS_MPI_FALSE MSG_COMMS_MPI_TRUE TASCEL_STANDALONE_FALSE TASCEL_STANDALONE_TRUE MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM CROSS_COMPILING_FALSE CROSS_COMPILING_TRUE SOLARIS_FALSE SOLARIS_TRUE SGITFP_FALSE SGITFP_TRUE SGI_N32_FALSE SGI_N32_TRUE SGI_FALSE SGI_TRUE NEC_FALSE NEC_TRUE MACX_FALSE MACX_TRUE LINUX_FALSE LINUX_TRUE LAPI_FALSE LAPI_TRUE INTERIX_FALSE INTERIX_TRUE IBM_FALSE IBM_TRUE HPUX_FALSE HPUX_TRUE HITACHI_FALSE HITACHI_TRUE FUJITSU_VPP_FALSE FUJITSU_VPP_TRUE DECOSF_FALSE DECOSF_TRUE CYGWIN_FALSE CYGWIN_TRUE CYGNUS_FALSE CYGNUS_TRUE CRAY_YMP_FALSE CRAY_YMP_TRUE CRAY_XT_FALSE CRAY_XT_TRUE CRAY_T3E_FALSE CRAY_T3E_TRUE CRAY_SV2_FALSE CRAY_SV2_TRUE CRAY_SV1_FALSE CRAY_SV1_TRUE CATAMOUNT_FALSE CATAMOUNT_TRUE BGP_FALSE BGP_TRUE BGL_FALSE BGL_TRUE host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode with_PACKAGE with_mpi enable_mpi_tests enable_dependency_tracking enable_underscoring enable_i4 enable_i8 with_ga with_blas with_blas4 with_blas8 with_lapack with_scalapack with_scalapack8 enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock ' ac_precious_vars='build_alias host_alias target_alias MPICC CC CFLAGS LDFLAGS LIBS CPPFLAGS MPICXX CXX CXXFLAGS CCC CXXCPP MPIF77 F77 FFLAGS FFLAG_INT F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS CPP AR AR_FLAGS RANLIB' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Task Scheduling Library (tascel) 0.0.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/tascel] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Task Scheduling Library (tascel) 0.0.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-mpi-tests disable MPI linker tests --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-underscoring force single underscore for all external Fortran symbols [default: use compiler defaults for external Fortran symbols] --enable-i4 enable 4-byte integers [default: sizeof(void*)] --enable-i8 enable 8-byte integers [default: sizeof(void*)] --enable-shared[=PKGS] build shared libraries [default=no] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-PACKAGE[=ARG] for most of the external software packages, ARG can be one or more whitespace-separated directories, linker or preprocessor directives; for example, --with-PACKAGE="/path/to/PACKAGE -lmylib -I/mydir" --with-mpi[=ARG] select MPI as the messaging library (default); leave ARG blank to use MPI compiler wrappers --with-ga[=ARG] specify location of ga install and/or other flags --with-blas[=ARG] use external BLAS library; attempt to detect sizeof(INTEGER) --with-blas4[=ARG] use external BLAS library compiled with sizeof(INTEGER)==4 --with-blas8[=ARG] use external BLAS library compiled with sizeof(INTEGER)==8 --with-lapack=[ARG] use external LAPACK library --with-scalapack=[ARG] use ScaLAPACK library compiled with sizeof(INTEGER)==4 --with-scalapack8=[ARG] use ScaLAPACK library compiled with sizeof(INTEGER)==8 --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). Some influential environment variables: MPICC MPI C compiler CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory MPICXX MPI C++ compiler CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor MPIF77 MPI Fortran 77 compiler F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags FFLAG_INT Fortran 77 compiler flag to set desired integer size F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS if cross compiling, set to either "yes" (default) or "no" (after string) CPP C preprocessor AR archiver used by libtool (default: ar) AR_FLAGS archiver flags used by libtool (default: cru) RANLIB generates index to archive (default: ranlib) Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . Task Scheduling Library (tascel) home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Task Scheduling Library (tascel) configure 0.0.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_run LINENO # ------------------------ # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_cxx_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_run # ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_cxx_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_compile # ac_fn_c_find_intX_t LINENO BITS VAR # ----------------------------------- # Finds a signed integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 $as_echo_n "checking for int$2_t... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in int$2_t 'int' 'long int' \ 'long long int' 'short int' 'signed char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main () { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main () { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if eval test \"x\$"$3"\" = x"no"; then : else break fi done fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_intX_t # ac_fn_cxx_check_type LINENO TYPE VAR INCLUDES # --------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_cxx_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_type # ac_fn_cxx_compute_int LINENO EXPR VAR INCLUDES # ---------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_cxx_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_f77_try_compile # ac_fn_f77_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_f77_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_f77_try_link # ac_fn_f77_try_run LINENO # ------------------------ # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_f77_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_f77_try_run # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------- ## ## Report this to hpctools@pnl.gov ## ## ------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Task Scheduling Library (tascel) $as_me 0.0.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in build-aux "$srcdir"/build-aux; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers config.h" ############################################################################### # Must occur before automake init ############################################################################### # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # AH_TEMPLATE for all known TARGETs { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TARGET base (64bit-ness checked later)" >&5 $as_echo_n "checking for TARGET base (64bit-ness checked later)... " >&6; } if ${ga_cv_target_base+:} false; then : $as_echo_n "(cached) " >&6 else ga_cv_target_base=UNKNOWN if test "x$ga_cv_target_base" = xUNKNOWN; then : if test -f /bgsys/drivers/ppcfloor/arch/include/common/bgp_personality.h; then : ga_cv_target_base=BGP fi fi if test "x$ga_cv_target_base" = xUNKNOWN; then : if test -d /bgl/BlueLight/ppcfloor/bglsys/include; then : ga_cv_target_base=BGL fi fi if test "x$ga_cv_target_base" = xUNKNOWN; then : case $host in #( *bgl*) : ga_cv_target_base=BGL ;; #( *bgp*) : ga_cv_target_base=BGP ;; #( #[TODO], [ga_cv_target_base=CATAMOUNT], #[TODO], [ga_cv_target_base=CRAY_XT], *cygwin*) : ga_cv_target_base=CYGWIN ;; #( *fujitsu*) : ga_cv_target_base=FUJITSU_VPP ;; #( *hpux*) : ga_cv_target_base=HPUX ;; #( *ibm*) : ga_cv_target_base=IBM ;; #( #[TODO], [ga_cv_target_base=LAPI], *linux*) : ga_cv_target_base=LINUX ;; #( *darwin*) : ga_cv_target_base=MACX ;; #( *apple*) : ga_cv_target_base=MACX ;; #( *superux*) : ga_cv_target_base=NEC ;; #( *solaris*) : ga_cv_target_base=SOLARIS ;; #( *) : ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_target_base" >&5 $as_echo "$ga_cv_target_base" >&6; } cat >>confdefs.h <<_ACEOF #define $ga_cv_target_base 1 _ACEOF # A horrible hack that should go away somehow... { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we think this system is what we call SYSV" >&5 $as_echo_n "checking whether we think this system is what we call SYSV... " >&6; } if ${ga_cv_sysv+:} false; then : $as_echo_n "(cached) " >&6 else case $ga_cv_target_base in #( SUN|SOLARIS|SGI|SGI_N32|SGITFP|HPUX|IBM|DECOSF|LINUX|INTERIX|NEC|LAPI) : ga_cv_sysv=yes ;; #( *) : ga_cv_sysv=no ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_sysv" >&5 $as_echo "$ga_cv_sysv" >&6; } if test x$ga_cv_sysv = xyes; then : $as_echo "#define SYSV 1" >>confdefs.h fi # Hopefully these will never be used and we can remove them soon. if test "$ga_cv_target_base" = BGL; then BGL_TRUE= BGL_FALSE='#' else BGL_TRUE='#' BGL_FALSE= fi if test "$ga_cv_target_base" = BGP; then BGP_TRUE= BGP_FALSE='#' else BGP_TRUE='#' BGP_FALSE= fi if test "$ga_cv_target_base" = CATAMOUNT; then CATAMOUNT_TRUE= CATAMOUNT_FALSE='#' else CATAMOUNT_TRUE='#' CATAMOUNT_FALSE= fi if test "$ga_cv_target_base" = CRAY_SV1; then CRAY_SV1_TRUE= CRAY_SV1_FALSE='#' else CRAY_SV1_TRUE='#' CRAY_SV1_FALSE= fi if test "$ga_cv_target_base" = CRAY_SV2; then CRAY_SV2_TRUE= CRAY_SV2_FALSE='#' else CRAY_SV2_TRUE='#' CRAY_SV2_FALSE= fi if test "$ga_cv_target_base" = CRAY_T3E; then CRAY_T3E_TRUE= CRAY_T3E_FALSE='#' else CRAY_T3E_TRUE='#' CRAY_T3E_FALSE= fi if test "$ga_cv_target_base" = CRAY_XT; then CRAY_XT_TRUE= CRAY_XT_FALSE='#' else CRAY_XT_TRUE='#' CRAY_XT_FALSE= fi if test "$ga_cv_target_base" = CRAY_YMP; then CRAY_YMP_TRUE= CRAY_YMP_FALSE='#' else CRAY_YMP_TRUE='#' CRAY_YMP_FALSE= fi if test "$ga_cv_target_base" = CYGNUS; then CYGNUS_TRUE= CYGNUS_FALSE='#' else CYGNUS_TRUE='#' CYGNUS_FALSE= fi if test "$ga_cv_target_base" = CYGWIN; then CYGWIN_TRUE= CYGWIN_FALSE='#' else CYGWIN_TRUE='#' CYGWIN_FALSE= fi if test "$ga_cv_target_base" = DECOSF; then DECOSF_TRUE= DECOSF_FALSE='#' else DECOSF_TRUE='#' DECOSF_FALSE= fi if test "$ga_cv_target_base" = FUJITSU_VPP; then FUJITSU_VPP_TRUE= FUJITSU_VPP_FALSE='#' else FUJITSU_VPP_TRUE='#' FUJITSU_VPP_FALSE= fi if test "$ga_cv_target_base" = HITACHI; then HITACHI_TRUE= HITACHI_FALSE='#' else HITACHI_TRUE='#' HITACHI_FALSE= fi if test "$ga_cv_target_base" = HPUX; then HPUX_TRUE= HPUX_FALSE='#' else HPUX_TRUE='#' HPUX_FALSE= fi if test "$ga_cv_target_base" = IBM; then IBM_TRUE= IBM_FALSE='#' else IBM_TRUE='#' IBM_FALSE= fi if test "$ga_cv_target_base" = INTERIX; then INTERIX_TRUE= INTERIX_FALSE='#' else INTERIX_TRUE='#' INTERIX_FALSE= fi if test "$ga_cv_target_base" = LAPI; then LAPI_TRUE= LAPI_FALSE='#' else LAPI_TRUE='#' LAPI_FALSE= fi if test "$ga_cv_target_base" = LINUX; then LINUX_TRUE= LINUX_FALSE='#' else LINUX_TRUE='#' LINUX_FALSE= fi if test "$ga_cv_target_base" = MACX; then MACX_TRUE= MACX_FALSE='#' else MACX_TRUE='#' MACX_FALSE= fi if test "$ga_cv_target_base" = NEC; then NEC_TRUE= NEC_FALSE='#' else NEC_TRUE='#' NEC_FALSE= fi if test "$ga_cv_target_base" = SGI; then SGI_TRUE= SGI_FALSE='#' else SGI_TRUE='#' SGI_FALSE= fi if test "$ga_cv_target_base" = SGI_N32; then SGI_N32_TRUE= SGI_N32_FALSE='#' else SGI_N32_TRUE='#' SGI_N32_FALSE= fi if test "$ga_cv_target_base" = SGITFP; then SGITFP_TRUE= SGITFP_FALSE='#' else SGITFP_TRUE='#' SGITFP_FALSE= fi if test "$ga_cv_target_base" = SOLARIS; then SOLARIS_TRUE= SOLARIS_FALSE='#' else SOLARIS_TRUE='#' SOLARIS_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if ${ga_cv_cross_compiling+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$ga_cv_target_base" = xBGP; then : cross_compiling=yes fi ga_cv_cross_compiling=$cross_compiling fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_cross_compiling" >&5 $as_echo "$ga_cv_cross_compiling" >&6; } if test "x$cross_compiling" = xyes; then CROSS_COMPILING_TRUE= CROSS_COMPILING_FALSE='#' else CROSS_COMPILING_TRUE='#' CROSS_COMPILING_FALSE= fi ############################################################################### # Init automake ############################################################################### am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='tascel' VERSION='0.0.1' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Don't emit "rebuild rules" for configure, Makefile.ins, etc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE ############################################################################### # Misc. information and package setup. ############################################################################### # Check whether --with-PACKAGE was given. if test "${with_PACKAGE+set}" = set; then : withval=$with_PACKAGE; fi TASCEL_TOP_BUILDDIR="`pwd`" cd "$srcdir" TASCEL_TOP_SRCDIR="`pwd`" cd "$TASCEL_TOP_BUILDDIR" if test "$TASCEL_TOP_BUILDDIR" != "TASCEL_TOP_SRCDIR"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: Detected VPATH build" >&5 $as_echo "$as_me: Detected VPATH build" >&6;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether tascel is built outside of GA" >&5 $as_echo_n "checking whether tascel is built outside of GA... " >&6; } if ${tascel_cv_standalone+:} false; then : $as_echo_n "(cached) " >&6 else if test -f "$TASCEL_TOP_BUILDDIR/../armci/config.status"; then : tascel_cv_standalone=no else tascel_cv_standalone=yes fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tascel_cv_standalone" >&5 $as_echo "$tascel_cv_standalone" >&6; } if test x$tascel_cv_standalone = xyes; then TASCEL_STANDALONE_TRUE= TASCEL_STANDALONE_FALSE='#' else TASCEL_STANDALONE_TRUE='#' TASCEL_STANDALONE_FALSE= fi # If MPI is desired we use the MPI compiler wrappers instead of the standard # compilers. # GA_MP_* vars might exist in environment, but they are really internal. # Reset them. GA_MP_LIBS= GA_MP_LDFLAGS= GA_MP_CPPFLAGS= # Check whether --with-mpi was given. if test "${with_mpi+set}" = set; then : withval=$with_mpi; else with_mpi=yes fi with_mpi_need_parse=no case $with_mpi in #( yes) : with_mpi_wrappers=yes; ga_msg_comms=MPI ;; #( no) : case $ga_cv_target_base in #( MACX|LAPI|CYGNUS|CYGWIN|INTERIX) : ga_msg_comms=TCGMSG5 ;; #( *) : ga_msg_comms=TCGMSG ;; esac ;; #( *) : with_mpi_need_parse=yes; ga_msg_comms=MPI ;; #( *) : ;; esac if test "x$ga_msg_comms" = xMPI; then MSG_COMMS_MPI_TRUE= MSG_COMMS_MPI_FALSE='#' else MSG_COMMS_MPI_TRUE='#' MSG_COMMS_MPI_FALSE= fi if test "x$ga_msg_comms" = xTCGMSG; then MSG_COMMS_TCGMSG4_TRUE= MSG_COMMS_TCGMSG4_FALSE='#' else MSG_COMMS_TCGMSG4_TRUE='#' MSG_COMMS_TCGMSG4_FALSE= fi if test "x$ga_msg_comms" = xTCGMSG5; then MSG_COMMS_TCGMSG5_TRUE= MSG_COMMS_TCGMSG5_FALSE='#' else MSG_COMMS_TCGMSG5_TRUE='#' MSG_COMMS_TCGMSG5_FALSE= fi case $ga_msg_comms in #( MPI) : $as_echo "#define MSG_COMMS_MPI 1" >>confdefs.h ;; #( TCGMSG) : $as_echo "#define MSG_COMMS_TCGMSG4 1" >>confdefs.h $as_echo "#define MSG_COMMS_TCGMSG 1" >>confdefs.h $as_echo "#define TCGMSG 1" >>confdefs.h ;; #( TCGMSG5) : $as_echo "#define MSG_COMMS_TCGMSG5 1" >>confdefs.h $as_echo "#define MSG_COMMS_TCGMSG 1" >>confdefs.h $as_echo "#define TCGMSG 1" >>confdefs.h ;; #( *) : ;; esac # F77 and C++ are always enabled for tascel enable_f77=yes enable_cxx=yes # Check whether --enable-mpi-tests was given. if test "${enable_mpi_tests+set}" = set; then : enableval=$enable_mpi_tests; else enable_mpi_tests=yes fi ############################################################################### # C compiler ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: C compiler" >&5 $as_echo "$as_me: C compiler" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} tascel_save_CFLAGS="$CFLAGS" DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi case $ga_cv_target_base in #( BGP) : ga_mpicc_pref=mpixlc_r; ga_cc_pref=bgxlc_r ;; #( *) : ;; esac # In the case of using MPI wrappers, set CC=MPICC since CC will override # absolutely everything in our list of compilers. # Save CC, just in case. if test x$with_mpi_wrappers = xyes; then : if test "x$CC" != "x$MPICC"; then : ga_orig_CC="$CC" fi case x$CC:x$MPICC in #( x:x) : ;; #( x:x*) : CC="$MPICC" ;; #( x*:x) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired but CC is set while MPICC is unset." >&5 $as_echo "$as_me: WARNING: MPI compilers desired but CC is set while MPICC is unset." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CC will be ignored during compiler selection, but will be" >&5 $as_echo "$as_me: WARNING: CC will be ignored during compiler selection, but will be" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&5 $as_echo "$as_me: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: meant to set MPICC instead of or in addition to CC?" >&5 $as_echo "$as_me: WARNING: meant to set MPICC instead of or in addition to CC?" >&2;} CC= ;; #( x*:x*) : if test "x$CC" != "x$MPICC"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired, MPICC and CC are set, and MPICC!=CC." >&5 $as_echo "$as_me: WARNING: MPI compilers desired, MPICC and CC are set, and MPICC!=CC." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Choosing MPICC over CC." >&5 $as_echo "$as_me: WARNING: Choosing MPICC over CC." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CC will be tested first during MPI compiler unwrapping." >&5 $as_echo "$as_me: WARNING: CC will be tested first during MPI compiler unwrapping." >&2;} fi CC="$MPICC" ;; #( *) : as_fn_error $? "CC/MPICC case failure" "$LINENO" 5 ;; esac fi ga_cc="bgxlc_r bgxlc xlc_r xlc pgcc pathcc icc sxcc fcc opencc suncc craycc gcc cc ecc cl ccc" ga_mpicc="mpicc mpixlc_r mpixlc hcc mpxlc_r mpxlc sxmpicc mpifcc mpgcc mpcc cmpicc cc" if test x$with_mpi_wrappers = xyes; then : CC_TO_TEST="$ga_mpicc_pref $ga_mpicc" else CC_TO_TEST="$ga_cc_pref $ga_cc" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CC_TO_TEST do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in $CC_TO_TEST do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi CFLAGS="$tascel_save_CFLAGS" if test x$with_mpi_wrappers = xyes; then : # Find perl. # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Create inside.pl. rm -f inside.pl cat >inside.pl <<"EOF" #!/usr/bin/perl use strict; use warnings; my $numargs = $#ARGV + 1; if ($numargs != 2) { print "Usage: wrapped.txt naked.txt\n"; exit 1; } # Read each input file as a string (rather than a list). local $/=undef; open WRAPPED, "$ARGV[0]" or die "Could not open wrapped text file: $!"; my $wrapped_lines = ; close WRAPPED; open NAKED, "$ARGV[1]" or die "Could not open naked text file: $!"; my $naked_lines = ; close NAKED; # Replace newlines, + from wrapped and naked lines. $wrapped_lines =~ tr/\n+/ /; $naked_lines =~ tr/\n+/ /; # Remove whitespace from beginning of wrapped and naked lines. $wrapped_lines =~ s/^\s+//; $naked_lines =~ s/^\s+//; # Remove whitespace from end of wrapped and naked lines. $wrapped_lines =~ s/\s+$//; $naked_lines =~ s/\s+$//; # If either wrapped_lines or naked_lines are empty, this is an error. # It is assumed that the particular version string which created the input # files should generate SOMETHING. unless ($wrapped_lines) { exit 1; } unless ($naked_lines) { exit 1; } # Cray compilers append a timestamp into their version string. Remove it. if ($wrapped_lines =~ /\QCray\E/) { $wrapped_lines = substr $wrapped_lines, 0, -28; $naked_lines = substr $naked_lines, 0, -28; } # Can the naked lines be found within the wrapped lines? if ($wrapped_lines =~ /\Q$naked_lines\E/) { #print "Found as substring\n"; exit 0; } # Are the naked lines exactly the same as the wrapped lines? elsif ($wrapped_lines eq $naked_lines) { #print "Found equal\n"; exit 0; } else { #print "Not found\n"; exit 1; } EOF inside="$PERL inside.pl" wrapped="$CC" case $wrapped in #( *_r) : compilers="bgxlc_r xlc_r" ;; #( *) : compilers="bgxlc xlc pgcc pathcc icc sxcc fcc opencc suncc craycc gcc ecc cl ccc cc" ;; #( *) : ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for base $wrapped compiler" >&5 $as_echo_n "checking for base $wrapped compiler... " >&6; } if ${ga_cv_mpic_naked+:} false; then : $as_echo_n "(cached) " >&6 else base="`$wrapped -show 2>/dev/null | sed 's/[ ].*$//' | head -1`" ga_save_CC="$CC" CC="$base" # if -m32 or -m64 is present in the -show params, or separately, add it unwrapped_args="`$wrapped -show 2>/dev/null`" extra_arg="" for arg in $unwrapped_args $wrapped do case $arg in #( *-m32*) : extra_arg="-m32" ;; #( *-m64*) : extra_arg="-m64" ;; #( *) : ;; esac done if test "x$extra_arg" != x; then : base="$base $extra_arg" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_cv_mpic_naked="$base" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CC="$ga_save_CC" versions="--version -v -V -qversion" found_wrapped_version=0 # Try separating stdout and stderr. Only compare stdout. if test "x$ga_cv_mpic_naked" = x; then : # prepend any CC/CXX/F77 the user may have specified compilers="$ga_orig_CC $compilers" echo "only comparing stdout" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err naked.txt naked.err if $wrapped $version 1>mpi.txt 2>mpi.err; then : found_wrapped_version=1 for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpic_naked" != x; then : break fi done fi # Perhaps none of the MPI compilers had a zero exit status (this is bad). # In this case we have to do a brute force match regardless of exit status. if test "x$found_wrapped_version" = x0; then : if test "x$ga_cv_mpic_naked" = x; then : echo "no zero exit status found for MPI compilers" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpic_naked" != x; then : break fi done fi fi # Try by combining stdout/err into one file. if test "x$ga_cv_mpic_naked" = x; then : echo "try combining stdout and stderr into one file" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt naked.txt if $wrapped $version 1>mpi.txt 2>&1; then : for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>&1; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpic_naked" != x; then : break fi done fi # If we got this far, then it's likely that the MPI compiler had a zero exit # status when it shouldn't have for one version flag, but later had a non-zero # exit status for a flag it shouldn't have. One false positive hid a false # negative. In this case, brute force compare all MPI compiler output against # all compiler output. if test "x$ga_cv_mpic_naked" = x; then : echo "we have a very badly behaving MPI compiler" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpic_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpic_naked" != x; then : break fi done fi rm -f mpi.txt mpi.err naked.txt naked.err fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_mpic_naked" >&5 $as_echo "$ga_cv_mpic_naked" >&6; } if test "x$ga_cv_mpic_naked" = x; then : as_fn_error $? "Could not determine the C compiler wrapped by MPI" "$LINENO" 5 else if test "x$ga_orig_CC" != x && test "x$ga_orig_CC" != "x$ga_cv_mpic_naked"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unwrapped $wrapped ($ga_cv_mpic_naked) does not match user-specified $ga_orig_CC" >&5 $as_echo "$as_me: WARNING: unwrapped $wrapped ($ga_cv_mpic_naked) does not match user-specified $ga_orig_CC" >&2;} fi fi rm -f inside.pl else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_mpi ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : GA_MP_LIBS="$GA_MP_LIBS $arg" ;; #( -L*) : GA_MP_LDFLAGS="$GA_MP_LDFLAGS $arg" ;; #( -WL*) : GA_MP_LDFLAGS="$GA_MP_LDFLAGS $arg" ;; #( -Wl*) : GA_MP_LDFLAGS="$GA_MP_LDFLAGS $arg" ;; #( -I*) : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS $arg" ;; #( *.a) : GA_MP_LIBS="$GA_MP_LIBS $arg" ;; #( *.so) : GA_MP_LIBS="$GA_MP_LIBS $arg" ;; #( *lib) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi ;; #( -mkl*) : GA_MP_LIBS="$GA_MP_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : GA_MP_LDFLAGS="$GA_MP_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : GA_MP_CPPFLAGS="$GA_MP_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_mpi not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_mpi not parsed" >&2;} fi done fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a simple C MPI program compiles" >&5 $as_echo_n "checking whether a simple C MPI program compiles... " >&6; } if ${ga_cv_c_mpi_test_compile+:} false; then : $as_echo_n "(cached) " >&6 else ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" if ac_fn_c_try_compile "$LINENO"; then : ga_cv_c_mpi_test_compile=yes else ga_cv_c_mpi_test_compile=no fi rm -f core conftest.err conftest.$ac_objext CPPFLAGS="$ga_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_c_mpi_test_compile" >&5 $as_echo "$ga_cv_c_mpi_test_compile" >&6; } rm -f conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "x$ga_cv_c_mpi_test_compile" = xno; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "could not compile simple C MPI program See \`config.log' for more details" "$LINENO" 5; } fi # Hack to append .x to executables. EXEEXT=.x$EXEEXT if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_target64_sizeof_voidp" ""; then : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TARGET 64bit-ness" >&5 $as_echo_n "checking for TARGET 64bit-ness... " >&6; } if ${ga_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else if test x$ga_target64_sizeof_voidp = x8; then : ga_cv_target=${ga_cv_target_base}64 else ga_cv_target=$ga_cv_target_base fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_target" >&5 $as_echo "$ga_cv_target" >&6; } cat >>confdefs.h <<_ACEOF #define $ga_cv_target 1 _ACEOF # Checks for C header files. # Checks for C typedefs, structures, and compiler characteristics. # Checks for C library functions. ############################################################################### # C++ compiler ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: C++ compiler" >&5 $as_echo "$as_me: C++ compiler" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu tascel_save_CXXFLAGS="$CXXFLAGS" case $ga_cv_target_base in #( BGP) : ga_mpicxx_pref=mpixlcxx_r; ga_cxx_pref=bgxlC_r ;; #( *) : ;; esac # In the case of using MPI wrappers, set CXX=MPICXX since CXX will override # absolutely everything in our list of compilers. if test x$with_mpi_wrappers = xyes; then : if test "x$CXX" != "x$MPICXX"; then : ga_orig_CXX="$CXX" fi case x$CXX:x$MPICXX in #( x:x) : ;; #( x:x*) : CXX="$MPICXX" ;; #( x*:x) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired but CXX is set while MPICXX is unset." >&5 $as_echo "$as_me: WARNING: MPI compilers desired but CXX is set while MPICXX is unset." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CXX will be ignored during compiler selection, but will be" >&5 $as_echo "$as_me: WARNING: CXX will be ignored during compiler selection, but will be" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&5 $as_echo "$as_me: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: meant to set MPICXX instead of or in addition to CXX?" >&5 $as_echo "$as_me: WARNING: meant to set MPICXX instead of or in addition to CXX?" >&2;} CXX= ;; #( x*:x*) : if test "x$CXX" != "x$MPICXX"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired, MPICXX and CXX are set, and MPICXX!=CXX." >&5 $as_echo "$as_me: WARNING: MPI compilers desired, MPICXX and CXX are set, and MPICXX!=CXX." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Choosing MPICXX over CXX." >&5 $as_echo "$as_me: WARNING: Choosing MPICXX over CXX." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CXX will be tested first during MPI compiler unwrapping." >&5 $as_echo "$as_me: WARNING: CXX will be tested first during MPI compiler unwrapping." >&2;} fi CXX="$MPICXX" ;; #( *) : as_fn_error $? "CXX/MPICXX case failure" "$LINENO" 5 ;; esac fi ga_cxx="icpc pgCC pathCC sxc++ xlC_r xlC bgxlC_r bgxlC openCC sunCC crayc++ g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC" ga_mpicxx="mpic++ mpicxx mpiCC sxmpic++ hcp mpxlC_r mpxlC mpixlcxx_r mpixlcxx mpg++ mpc++ mpCC cmpic++ mpiFCC CC" if test x$with_mpi_wrappers = xyes; then : CXX_TO_TEST="$ga_mpicxx_pref $ga_mpicxx" else CXX_TO_TEST="$ga_cxx_pref $ga_cxx" fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in $CXX_TO_TEST do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CXX_TO_TEST do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi CXXFLAGS="$tascel_save_CXXFLAGS" if test x$with_mpi_wrappers = xyes; then : # Find perl. # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Create inside.pl. rm -f inside.pl cat >inside.pl <<"EOF" #!/usr/bin/perl use strict; use warnings; my $numargs = $#ARGV + 1; if ($numargs != 2) { print "Usage: wrapped.txt naked.txt\n"; exit 1; } # Read each input file as a string (rather than a list). local $/=undef; open WRAPPED, "$ARGV[0]" or die "Could not open wrapped text file: $!"; my $wrapped_lines = ; close WRAPPED; open NAKED, "$ARGV[1]" or die "Could not open naked text file: $!"; my $naked_lines = ; close NAKED; # Replace newlines, + from wrapped and naked lines. $wrapped_lines =~ tr/\n+/ /; $naked_lines =~ tr/\n+/ /; # Remove whitespace from beginning of wrapped and naked lines. $wrapped_lines =~ s/^\s+//; $naked_lines =~ s/^\s+//; # Remove whitespace from end of wrapped and naked lines. $wrapped_lines =~ s/\s+$//; $naked_lines =~ s/\s+$//; # If either wrapped_lines or naked_lines are empty, this is an error. # It is assumed that the particular version string which created the input # files should generate SOMETHING. unless ($wrapped_lines) { exit 1; } unless ($naked_lines) { exit 1; } # Cray compilers append a timestamp into their version string. Remove it. if ($wrapped_lines =~ /\QCray\E/) { $wrapped_lines = substr $wrapped_lines, 0, -28; $naked_lines = substr $naked_lines, 0, -28; } # Can the naked lines be found within the wrapped lines? if ($wrapped_lines =~ /\Q$naked_lines\E/) { #print "Found as substring\n"; exit 0; } # Are the naked lines exactly the same as the wrapped lines? elsif ($wrapped_lines eq $naked_lines) { #print "Found equal\n"; exit 0; } else { #print "Not found\n"; exit 1; } EOF inside="$PERL inside.pl" wrapped="$CXX" case $wrapped in #( *_r) : compilers="bgxlC_r xlC_r" ;; #( *) : compilers="icpc pgCC pathCC sxc++ xlC bgxlC openCC sunCC crayc++ g++ c++ gpp aCC cxx cc++ cl.exe FCC KCC RCC CC" ;; #( *) : ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for base $wrapped compiler" >&5 $as_echo_n "checking for base $wrapped compiler... " >&6; } if ${ga_cv_mpicxx_naked+:} false; then : $as_echo_n "(cached) " >&6 else base="`$wrapped -show 2>/dev/null | sed 's/[ ].*$//' | head -1`" ga_save_CXX="$CXX" CXX="$base" # if -m32 or -m64 is present in the -show params, or separately, add it unwrapped_args="`$wrapped -show 2>/dev/null`" extra_arg="" for arg in $unwrapped_args $wrapped do case $arg in #( *-m32*) : extra_arg="-m32" ;; #( *-m64*) : extra_arg="-m64" ;; #( *) : ;; esac done if test "x$extra_arg" != x; then : base="$base $extra_arg" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ga_cv_mpicxx_naked="$base" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CXX="$ga_save_CXX" versions="--version -v -V -qversion" found_wrapped_version=0 # Try separating stdout and stderr. Only compare stdout. if test "x$ga_cv_mpicxx_naked" = x; then : # prepend any CC/CXX/F77 the user may have specified compilers="$ga_orig_CXX $compilers" echo "only comparing stdout" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err naked.txt naked.err if $wrapped $version 1>mpi.txt 2>mpi.err; then : found_wrapped_version=1 for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpicxx_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpicxx_naked" != x; then : break fi done fi # Perhaps none of the MPI compilers had a zero exit status (this is bad). # In this case we have to do a brute force match regardless of exit status. if test "x$found_wrapped_version" = x0; then : if test "x$ga_cv_mpicxx_naked" = x; then : echo "no zero exit status found for MPI compilers" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpicxx_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpicxx_naked" != x; then : break fi done fi fi # Try by combining stdout/err into one file. if test "x$ga_cv_mpicxx_naked" = x; then : echo "try combining stdout and stderr into one file" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt naked.txt if $wrapped $version 1>mpi.txt 2>&1; then : for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>&1; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpicxx_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpicxx_naked" != x; then : break fi done fi # If we got this far, then it's likely that the MPI compiler had a zero exit # status when it shouldn't have for one version flag, but later had a non-zero # exit status for a flag it shouldn't have. One false positive hid a false # negative. In this case, brute force compare all MPI compiler output against # all compiler output. if test "x$ga_cv_mpicxx_naked" = x; then : echo "we have a very badly behaving MPI compiler" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpicxx_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpicxx_naked" != x; then : break fi done fi rm -f mpi.txt mpi.err naked.txt naked.err fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_mpicxx_naked" >&5 $as_echo "$ga_cv_mpicxx_naked" >&6; } if test "x$ga_cv_mpicxx_naked" = x; then : as_fn_error $? "Could not determine the C++ compiler wrapped by MPI" "$LINENO" 5 else if test "x$ga_orig_CXX" != x && test "x$ga_orig_CXX" != "x$ga_cv_mpicxx_naked"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unwrapped $wrapped ($ga_cv_mpicxx_naked) does not match user-specified $ga_orig_CXX" >&5 $as_echo "$as_me: WARNING: unwrapped $wrapped ($ga_cv_mpicxx_naked) does not match user-specified $ga_orig_CXX" >&2;} fi fi rm -f inside.pl fi if test "x$with_mpi" != xno; then : ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a simple C++ MPI program works" >&5 $as_echo_n "checking whether a simple C++ MPI program works... " >&6; } if ${ga_cv_cxx_mpi_test+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ga_cv_cxx_mpi_test=yes else ga_cv_cxx_mpi_test=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext # That didn't work, so now let's try with our GA_MP_* flags. if test "x$ga_cv_cxx_mpi_test" = xno; then : ga_save_LIBS="$LIBS"; LIBS="$LIBS $GA_MP_LIBS" ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ga_cv_cxx_mpi_test=yes else ga_cv_cxx_mpi_test=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ga_save_LIBS" CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" fi # That didn't work, so now let's try with our GA_MP_* flags and various libs. if test "x$ga_cv_cxx_mpi_test" = xno; then : for lib in -lmpi -lmpich; do ga_save_LIBS="$LIBS"; LIBS="$LIBS $GA_MP_LIBS $lib" ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ga_cv_cxx_mpi_test=$lib; break else ga_cv_cxx_mpi_test=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ga_save_LIBS" CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" done LIBS="$ga_save_LIBS" CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_cxx_mpi_test" >&5 $as_echo "$ga_cv_cxx_mpi_test" >&6; } ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu case $ga_cv_cxx_mpi_test in #( yes) : ;; #( no) : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "could not link simple C++ MPI program See \`config.log' for more details" "$LINENO" 5; } ;; #( *) : GA_MP_LIBS="$ga_cv_cxx_mpi_test" ;; #( *) : ;; esac fi # Checks for C++ header files. # Checks for C++ typedefs, structures, and compiler characteristics. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" case $ac_cv_c_int64_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int64_t $ac_cv_c_int64_t _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double" >&5 $as_echo_n "checking for long double... " >&6; } if ${ac_cv_type_long_double+:} false; then : $as_echo_n "(cached) " >&6 else if test "$GCC" = yes; then ac_cv_type_long_double=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* The Stardent Vistra knows sizeof (long double), but does not support it. */ long double foo = 0.0L; int main () { static int test_array [1 - 2 * !(/* On Ultrix 4.3 cc, long double is 4 and double is 8. */ sizeof (double) <= sizeof (long double))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_type_long_double=yes else ac_cv_type_long_double=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double" >&5 $as_echo "$ac_cv_type_long_double" >&6; } if test $ac_cv_type_long_double = yes; then $as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5 $as_echo_n "checking for unsigned long long int... " >&6; } if ${ac_cv_type_unsigned_long_long_int+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_type_unsigned_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For now, do not test the preprocessor; as of 2007 there are too many implementations with broken preprocessors. Perhaps this can be revisited in 2012. In the meantime, code should not expect #if to work with literals wider than 32 bits. */ /* Test literals. */ long long int ll = 9223372036854775807ll; long long int nll = -9223372036854775807LL; unsigned long long int ull = 18446744073709551615ULL; /* Test constant expressions. */ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) ? 1 : -1)]; typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63; int main () { /* Test availability of runtime routines for shift and division. */ long long int llmax = 9223372036854775807ll; unsigned long long int ullmax = 18446744073709551615ull; return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | (llmax / ll) | (llmax % ll) | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) | (ullmax / ull) | (ullmax % ull)); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : else ac_cv_type_unsigned_long_long_int=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 $as_echo "$ac_cv_type_unsigned_long_long_int" >&6; } if test $ac_cv_type_unsigned_long_long_int = yes; then $as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 $as_echo_n "checking for long long int... " >&6; } if ${ac_cv_type_long_long_int+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_type_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int if test $ac_cv_type_long_long_int = yes; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef LLONG_MAX # define HALF \ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) # define LLONG_MAX (HALF - 1 + HALF) #endif int main () { long long int n = 1; int i; for (i = 0; ; i++) { long long int m = n << i; if (m >> i != n) return 1; if (LLONG_MAX / 2 < m) break; } return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO"; then : else ac_cv_type_long_long_int=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 $as_echo "$ac_cv_type_long_long_int" >&6; } if test $ac_cv_type_long_long_int = yes; then $as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h fi ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5 $as_echo_n "checking for unsigned long long int... " >&6; } if ${ac_cv_type_unsigned_long_long_int+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_type_unsigned_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* For now, do not test the preprocessor; as of 2007 there are too many implementations with broken preprocessors. Perhaps this can be revisited in 2012. In the meantime, code should not expect #if to work with literals wider than 32 bits. */ /* Test literals. */ long long int ll = 9223372036854775807ll; long long int nll = -9223372036854775807LL; unsigned long long int ull = 18446744073709551615ULL; /* Test constant expressions. */ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) ? 1 : -1)]; typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63; int main () { /* Test availability of runtime routines for shift and division. */ long long int llmax = 9223372036854775807ll; unsigned long long int ullmax = 18446744073709551615ull; return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | (llmax / ll) | (llmax % ll) | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) | (ullmax / ull) | (ullmax % ull)); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : else ac_cv_type_unsigned_long_long_int=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 $as_echo "$ac_cv_type_unsigned_long_long_int" >&6; } if test $ac_cv_type_unsigned_long_long_int = yes; then $as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h fi # Checks for C++ type sizes. # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5 $as_echo_n "checking size of void*... " >&6; } if ${ac_cv_sizeof_voidp+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default"; then : else if test "$ac_cv_type_voidp" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void*) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_voidp=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_voidp" >&5 $as_echo "$ac_cv_sizeof_voidp" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_VOIDP $ac_cv_sizeof_voidp _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 $as_echo_n "checking size of char... " >&6; } if ${ac_cv_sizeof_char+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then : else if test "$ac_cv_type_char" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (char) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_char=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 $as_echo "$ac_cv_sizeof_char" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_CHAR $ac_cv_sizeof_char _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 $as_echo_n "checking size of short... " >&6; } if ${ac_cv_sizeof_short+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : else if test "$ac_cv_type_short" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (short) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_short=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 $as_echo "$ac_cv_sizeof_short" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 $as_echo_n "checking size of int... " >&6; } if ${ac_cv_sizeof_int+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : else if test "$ac_cv_type_int" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_int=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 $as_echo "$ac_cv_sizeof_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 $as_echo_n "checking size of long... " >&6; } if ${ac_cv_sizeof_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 $as_echo "$ac_cv_sizeof_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF if test x$ac_cv_type_long_long_int = xyes; then : # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 $as_echo_n "checking size of long long... " >&6; } if ${ac_cv_sizeof_long_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 $as_echo "$ac_cv_sizeof_long_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float" >&5 $as_echo_n "checking size of float... " >&6; } if ${ac_cv_sizeof_float+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float" "$ac_includes_default"; then : else if test "$ac_cv_type_float" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (float) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_float=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5 $as_echo "$ac_cv_sizeof_float" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_FLOAT $ac_cv_sizeof_float _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 $as_echo_n "checking size of double... " >&6; } if ${ac_cv_sizeof_double+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then : else if test "$ac_cv_type_double" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (double) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_double=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 $as_echo "$ac_cv_sizeof_double" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_DOUBLE $ac_cv_sizeof_double _ACEOF if test x$ac_cv_type_long_double = xyes; then : # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5 $as_echo_n "checking size of long double... " >&6; } if ${ac_cv_sizeof_long_double+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double" "$ac_includes_default"; then : else if test "$ac_cv_type_long_double" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long double) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long_double=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5 $as_echo "$ac_cv_sizeof_long_double" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double _ACEOF fi # Checks for C++ library functions. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ############################################################################### # Fortran compiler ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Fortran compiler" >&5 $as_echo "$as_me: Fortran compiler" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu tascel_save_FFLAGS="$FFLAGS" case $ga_cv_target_base in #( BGP) : ga_mpif77_pref=mpixlf77_r;ga_f77_pref=bgxlf_r ;; #( BGL) : ga_mpif77_pref=mpxlf95; ga_f77_pref=blrts_xlf95 ;; #( *) : ;; esac # If FC is set, override F77. Similarly for MPIFC/MPIF77 and FCFLAGS/FFLAGS. if test "x$FC" != x; then : F77="$FC" fi if test "x$MPIFC" != x; then : MPIF77="$MPIFC" fi if test "x$FCFLAGS" != x; then : FFLAGS="$FCFLAGS" fi # In the case of using MPI wrappers, set F77=MPIF77 since F77 will override # absolutely everything in our list of compilers. # Save F77, just in case. if test x$with_mpi_wrappers = xyes; then : if test "x$F77" != "x$MPIF77"; then : ga_orig_F77="$F77" fi case x$F77:x$MPIF77 in #( x:x) : ;; #( x:x*) : F77="$MPIF77" ;; #( x*:x) : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired but F77 is set while MPIF77 is unset." >&5 $as_echo "$as_me: WARNING: MPI compilers desired but F77 is set while MPIF77 is unset." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: F77 will be ignored during compiler selection, but will be" >&5 $as_echo "$as_me: WARNING: F77 will be ignored during compiler selection, but will be" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&5 $as_echo "$as_me: WARNING: tested first during MPI compiler unwrapping. Perhaps you" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: meant to set MPIF77 instead of or in addition to F77?" >&5 $as_echo "$as_me: WARNING: meant to set MPIF77 instead of or in addition to F77?" >&2;} F77= ;; #( x*:x*) : if test "x$F77" != "x$MPIF77"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI compilers desired, MPIF77 and F77 are set, and MPIF77!=F77." >&5 $as_echo "$as_me: WARNING: MPI compilers desired, MPIF77 and F77 are set, and MPIF77!=F77." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Choosing MPIF77 over F77." >&5 $as_echo "$as_me: WARNING: Choosing MPIF77 over F77." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: F77 will be tested first during MPI compiler unwrapping." >&5 $as_echo "$as_me: WARNING: F77 will be tested first during MPI compiler unwrapping." >&2;} fi F77="$MPIF77" ;; #( *) : as_fn_error $? "F77/MPIF77 case failure" "$LINENO" 5 ;; esac fi ga_mpif95="mpif95 mpxlf95_r mpxlf95 ftn" ga_mpif90="mpif90 mpxlf90_r mpxlf90 mpf90 cmpif90c sxmpif90" ga_mpif77="mpif77 hf77 mpxlf_r mpxlf mpifrt mpf77 cmpifc" ga_f95="xlf95 pgf95 pathf95 ifort g95 f95 fort ifc efc openf95 sunf95 crayftn gfortran lf95 ftn" ga_f90="xlf90 f90 pgf90 pghpf pathf90 epcf90 sxf90 openf90 sunf90" ga_f77="xlf f77 frt pgf77 pathf77 g77 cf77 fort77 fl32 af77" if test x$with_mpi_wrappers = xyes; then : F77_TO_TEST="$ga_mpif77_pref $ga_mpif95 $ga_mpif90 $ga_mpif77" else F77_TO_TEST="$ga_f77_pref $ga_f95 $ga_f90 $ga_f77" fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $F77_TO_TEST do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_F77+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $F77" >&5 $as_echo "$F77" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in $F77_TO_TEST do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_F77+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_F77" >&5 $as_echo "$ac_ct_F77" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_F77" && break done if test "x$ac_ct_F77" = x; then F77="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac F77=$ac_ct_F77 fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran 77 compiler" >&5 $as_echo_n "checking whether we are using the GNU Fortran 77 compiler... " >&6; } if ${ac_cv_f77_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_compiler_gnu" >&5 $as_echo "$ac_cv_f77_compiler_gnu" >&6; } ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts -g" >&5 $as_echo_n "checking whether $F77 accepts -g... " >&6; } if ${ac_cv_prog_f77_g+:} false; then : $as_echo_n "(cached) " >&6 else FFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ac_cv_prog_f77_g=yes else ac_cv_prog_f77_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_g" >&5 $as_echo "$ac_cv_prog_f77_g" >&6; } if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi if test $ac_compiler_gnu = yes; then G77=yes else G77= fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu FFLAGS="$tascel_save_FFLAGS" # If Fortran 77 compiler was not found, we disable support for it. if test "x$F77" = x; then : enable_f77=no fi # If Fortran 77 compiler does not work, we disable support for it. cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Fortran compiler does not work, disabling" >&5 $as_echo "$as_me: WARNING: Fortran compiler does not work, disabling" >&2;} enable_f77=no F77= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "x$enable_f77" = xyes; then : $as_echo "#define NOFORT 0" >>confdefs.h $as_echo "#define ENABLE_F77 1" >>confdefs.h else $as_echo "#define NOFORT 1" >>confdefs.h $as_echo "#define ENABLE_F77 0" >>confdefs.h fi if test "x$enable_f77" = xno; then NOFORT_TRUE= NOFORT_FALSE='#' else NOFORT_TRUE='#' NOFORT_FALSE= fi if test "x$enable_f77" = xyes; then ENABLE_F77_TRUE= ENABLE_F77_FALSE='#' else ENABLE_F77_TRUE='#' ENABLE_F77_FALSE= fi # Perform Fortran 77 tests only if enabled. if test "x$enable_f77" = xyes; then : if test x$with_mpi_wrappers = xyes; then : # Find perl. # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Create inside.pl. rm -f inside.pl cat >inside.pl <<"EOF" #!/usr/bin/perl use strict; use warnings; my $numargs = $#ARGV + 1; if ($numargs != 2) { print "Usage: wrapped.txt naked.txt\n"; exit 1; } # Read each input file as a string (rather than a list). local $/=undef; open WRAPPED, "$ARGV[0]" or die "Could not open wrapped text file: $!"; my $wrapped_lines = ; close WRAPPED; open NAKED, "$ARGV[1]" or die "Could not open naked text file: $!"; my $naked_lines = ; close NAKED; # Replace newlines, + from wrapped and naked lines. $wrapped_lines =~ tr/\n+/ /; $naked_lines =~ tr/\n+/ /; # Remove whitespace from beginning of wrapped and naked lines. $wrapped_lines =~ s/^\s+//; $naked_lines =~ s/^\s+//; # Remove whitespace from end of wrapped and naked lines. $wrapped_lines =~ s/\s+$//; $naked_lines =~ s/\s+$//; # If either wrapped_lines or naked_lines are empty, this is an error. # It is assumed that the particular version string which created the input # files should generate SOMETHING. unless ($wrapped_lines) { exit 1; } unless ($naked_lines) { exit 1; } # Cray compilers append a timestamp into their version string. Remove it. if ($wrapped_lines =~ /\QCray\E/) { $wrapped_lines = substr $wrapped_lines, 0, -28; $naked_lines = substr $naked_lines, 0, -28; } # Can the naked lines be found within the wrapped lines? if ($wrapped_lines =~ /\Q$naked_lines\E/) { #print "Found as substring\n"; exit 0; } # Are the naked lines exactly the same as the wrapped lines? elsif ($wrapped_lines eq $naked_lines) { #print "Found equal\n"; exit 0; } else { #print "Not found\n"; exit 1; } EOF inside="$PERL inside.pl" wrapped="$F77" case $wrapped in #( *_r) : compilers="bgxlf95_r xlf95_r bgxlf90_r xlf90_r bgxlf_r xlf_r" ;; #( *) : compilers="gfortran g95 bgxlf95 xlf95 f95 fort ifort ifc efc pgf95 pathf95 lf95 openf95 sunf95 crayftn bgxlf90 xlf90 f90 pgf90 pathf90 pghpf epcf90 sxf90 openf90 sunf90 g77 bgxlf xlf f77 frt pgf77 pathf77 cf77 fort77 fl32 af77" ;; #( *) : ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for base $wrapped compiler" >&5 $as_echo_n "checking for base $wrapped compiler... " >&6; } if ${ga_cv_mpif77_naked+:} false; then : $as_echo_n "(cached) " >&6 else base="`$wrapped -show 2>/dev/null | sed 's/[ ].*$//' | head -1`" ga_save_F77="$F77" F77="$base" # if -m32 or -m64 is present in the -show params, or separately, add it unwrapped_args="`$wrapped -show 2>/dev/null`" extra_arg="" for arg in $unwrapped_args $wrapped do case $arg in #( *-m32*) : extra_arg="-m32" ;; #( *-m64*) : extra_arg="-m64" ;; #( *) : ;; esac done if test "x$extra_arg" != x; then : base="$base $extra_arg" fi cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_cv_mpif77_naked="$base" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext F77="$ga_save_F77" versions="--version -v -V -qversion" found_wrapped_version=0 # Try separating stdout and stderr. Only compare stdout. if test "x$ga_cv_mpif77_naked" = x; then : # prepend any CC/CXX/F77 the user may have specified compilers="$ga_orig_F77 $compilers" echo "only comparing stdout" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err naked.txt naked.err if $wrapped $version 1>mpi.txt 2>mpi.err; then : found_wrapped_version=1 for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpif77_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpif77_naked" != x; then : break fi done fi # Perhaps none of the MPI compilers had a zero exit status (this is bad). # In this case we have to do a brute force match regardless of exit status. if test "x$found_wrapped_version" = x0; then : if test "x$ga_cv_mpif77_naked" = x; then : echo "no zero exit status found for MPI compilers" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpif77_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpif77_naked" != x; then : break fi done fi fi # Try by combining stdout/err into one file. if test "x$ga_cv_mpif77_naked" = x; then : echo "try combining stdout and stderr into one file" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt naked.txt if $wrapped $version 1>mpi.txt 2>&1; then : for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : if $naked_compiler $version 1>naked.txt 2>&1; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpif77_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done else echo "$wrapped $version failed, skipping" >&5 fi if test "x$ga_cv_mpif77_naked" != x; then : break fi done fi # If we got this far, then it's likely that the MPI compiler had a zero exit # status when it shouldn't have for one version flag, but later had a non-zero # exit status for a flag it shouldn't have. One false positive hid a false # negative. In this case, brute force compare all MPI compiler output against # all compiler output. if test "x$ga_cv_mpif77_naked" = x; then : echo "we have a very badly behaving MPI compiler" >&5 for version in $versions do echo "trying version=$version" >&5 rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do if test "x$naked_compiler" != "x$wrapped"; then : rm -f naked.txt naked.err if $naked_compiler $version 1>naked.txt 2>naked.err; then : if $inside mpi.txt naked.txt >/dev/null; then : ga_cv_mpif77_naked=$naked_compiler; break else echo "inside.pl $wrapped $naked_compiler failed, skipping" >&5 fi else echo "$naked_compiler $version failed, skipping" >&5 fi fi done if test "x$ga_cv_mpif77_naked" != x; then : break fi done fi rm -f mpi.txt mpi.err naked.txt naked.err fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_mpif77_naked" >&5 $as_echo "$ga_cv_mpif77_naked" >&6; } if test "x$ga_cv_mpif77_naked" = x; then : as_fn_error $? "Could not determine the Fortran 77 compiler wrapped by MPI" "$LINENO" 5 else if test "x$ga_orig_F77" != x && test "x$ga_orig_F77" != "x$ga_cv_mpif77_naked"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unwrapped $wrapped ($ga_cv_mpif77_naked) does not match user-specified $ga_orig_F77" >&5 $as_echo "$as_me: WARNING: unwrapped $wrapped ($ga_cv_mpif77_naked) does not match user-specified $ga_orig_F77" >&2;} fi fi rm -f inside.pl fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main include 'mpif.h' integer ierr call MPI_Init( ierr ) call MPI_Finalize( ierr ) end _ACEOF ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a simple Fortran MPI program compiles" >&5 $as_echo_n "checking whether a simple Fortran MPI program compiles... " >&6; } if ${ga_cv_f77_mpi_test_compile+:} false; then : $as_echo_n "(cached) " >&6 else ga_save_FFLAGS="$FFLAGS"; FFLAGS="$FFLAGS $GA_MP_CPPFLAGS" if ac_fn_f77_try_compile "$LINENO"; then : ga_cv_f77_mpi_test_compile=yes else ga_cv_f77_mpi_test_compile=no fi rm -f core conftest.err conftest.$ac_objext FFLAGS="$ga_save_FFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_mpi_test_compile" >&5 $as_echo "$ga_cv_f77_mpi_test_compile" >&6; } rm -f conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "x$ga_cv_f77_mpi_test_compile" = xno; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "could not compile simple Fortran MPI program See \`config.log' for more details" "$LINENO" 5; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 flag to suppress info messages" >&5 $as_echo_n "checking for Fortran 77 flag to suppress info messages... " >&6; } if ${ga_cv_f77_suppress+:} false; then : $as_echo_n "(cached) " >&6 else ga_save_FFLAGS="$FFLAGS" ga_save_werror_flag=$ac_f77_werror_flag ac_f77_werror_flag=yes for flag in none -qsuppress=cmpmsg ; do FFLAGS=$ga_save_FFLAGS if test "x$flag" != xnone; then : FFLAGS="$FFLAGS $flag" fi cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_cv_f77_suppress="$flag"; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done FFLAGS=$ga_save_FFLAGS ac_f77_werror_flag=$ga_save_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_suppress" >&5 $as_echo "$ga_cv_f77_suppress" >&6; } ga_mpi_unwrap_push_save_CC="$CC" ga_mpi_unwrap_push_save_CXX="$CXX" ga_mpi_unwrap_push_save_F77="$F77" ga_mpi_unwrap_push_save_FC="$FC" if test "x$ga_cv_mpic_naked" != x; then : CC="$ga_cv_mpic_naked" fi if test "x$ga_cv_mpicxx_naked" != x; then : CXX="$ga_cv_mpicxx_naked" fi if test "x$ga_cv_mpif77_naked" != x; then : F77="$ga_cv_mpif77_naked" fi if test "x$ga_cv_mpifc_naked" != x; then : FC="$ga_cv_mpifc_naked" fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $F77" >&5 $as_echo_n "checking how to get verbose linking output from $F77... " >&6; } if ${ac_cv_prog_f77_v+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ac_cv_prog_f77_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_verb" eval "set x $ac_link" shift $as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` $as_echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_f77_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_f77_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_f77_v"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $F77" >&5 $as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 $as_echo "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_v" >&5 $as_echo "$ac_cv_prog_f77_v" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 libraries of $F77" >&5 $as_echo_n "checking for Fortran 77 libraries of $F77... " >&6; } if ${ac_cv_f77_libs+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$FLIBS" != "x"; then ac_cv_f77_libs="$FLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_cv_prog_f77_v" eval "set x $ac_link" shift $as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` $as_echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac ac_cv_f77_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_f77_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) case $host_os in *cygwin*) ;; *) ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_arg="$ac_arg $ac_j" ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`$as_echo "$ac_f77_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_libs" >&5 $as_echo "$ac_cv_f77_libs" >&6; } FLIBS="$ac_cv_f77_libs" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu CC="$ga_mpi_unwrap_push_save_CC" CXX="$ga_mpi_unwrap_push_save_CXX" F77="$ga_mpi_unwrap_push_save_F77" FC="$ga_mpi_unwrap_push_save_FC" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether FLIBS needs -lgcc_s" >&5 $as_echo_n "checking whether FLIBS needs -lgcc_s... " >&6; } if ${ga_cv_flibs_gcc_s+:} false; then : $as_echo_n "(cached) " >&6 else happy=yes ga_save_LIBS="$LIBS"; LIBS="$LIBS $FLIBS" ga_save_FLIBS="$FLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_cv_flibs_gcc_s=no else LIBS="$LIBS -lgcc_s" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : FLIBS="$FLIBS -lgcc_s" ga_cv_flibs_gcc_s=yes else happy=no FLIBS="$ga_save_FLIBS" ga_cv_flibs_gcc_s=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ga_save_LIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_flibs_gcc_s" >&5 $as_echo "$ga_cv_flibs_gcc_s" >&6; } if test "x$happy" = xno; then : { ac_cv_f77_libs=; unset ac_cv_f77_libs;} { FLIBS=; unset FLIBS;} { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $F77" >&5 $as_echo_n "checking how to get verbose linking output from $F77... " >&6; } if ${ac_cv_prog_f77_v+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ac_cv_prog_f77_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_verb" eval "set x $ac_link" shift $as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` $as_echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_f77_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_f77_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_f77_v"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $F77" >&5 $as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 $as_echo "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_v" >&5 $as_echo "$ac_cv_prog_f77_v" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 libraries of $F77" >&5 $as_echo_n "checking for Fortran 77 libraries of $F77... " >&6; } if ${ac_cv_f77_libs+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$FLIBS" != "x"; then ac_cv_f77_libs="$FLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_cv_prog_f77_v" eval "set x $ac_link" shift $as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` $as_echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac ac_cv_f77_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_f77_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) test x"$CYGWIN" != xyes && ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_arg="$ac_arg $ac_j" ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" fi done ;; -Y*) for ac_j in `$as_echo "$ac_arg" | sed -e 's/-Y/-L/;s/"//g;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_arg="$ac_arg $ac_j" ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`$as_echo "$ac_f77_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_libs" >&5 $as_echo "$ac_cv_f77_libs" >&6; } FLIBS="$ac_cv_f77_libs" ga_save_LIBS="$LIBS"; LIBS="$LIBS $FLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : happy=yes else happy=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ga_save_LIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu fi if test "x$happy" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: FLIBS does not work" >&5 $as_echo "$as_me: WARNING: FLIBS does not work" >&2;} fi # Check whether --enable-underscoring was given. if test "${enable_underscoring+set}" = set; then : enableval=$enable_underscoring; fi if test "x$enable_underscoring" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $F77 flag to add single underscore to external names" >&5 $as_echo_n "checking for $F77 flag to add single underscore to external names... " >&6; } if ${ga_cv_f77_underscore_flag+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ void my_sub_() {} _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS="$LIBS" LIBS="cfortran_test.$ac_objext $LIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu for ga_flag in none -qextname -qEXTNAME -funderscoring -fno-second-underscore -f +ppu ; do ga_save_FFLAGS="$FFLAGS" if test "x$ga_flag" != xnone; then : FFLAGS="$FFLAGS $ga_flag" fi cat > conftest.$ac_ext <<_ACEOF program main call my_sub end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_cv_f77_underscore_flag="$ga_flag" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext FFLAGS="$ga_save_FFLAGS" if test "x$ga_cv_f77_underscore_flag" != x; then : break fi done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$ga_save_LIBS" rm -f cfortran_test.$ac_objext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_underscore_flag" >&5 $as_echo "$ga_cv_f77_underscore_flag" >&6; } if test "x$ga_cv_f77_underscore_flag" != xnone; then : if test "x$ga_cv_f77_underscore_flag" != x; then : FFLAGS="$FFLAGS $ga_cv_f77_underscore_flag" fi fi fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran 77 libraries" >&5 $as_echo_n "checking for dummy main to link with Fortran 77 libraries... " >&6; } if ${ac_cv_f77_dummy_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_f77_dm_save_LIBS=$LIBS LIBS="$LIBS $FLIBS" ac_fortran_dm_var=F77_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_fortran_dummy_main=none else ac_cv_fortran_dummy_main=unknown fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define $ac_fortran_dm_var $ac_func #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_cv_f77_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_f77_dm_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_dummy_main" >&5 $as_echo "$ac_cv_f77_dummy_main" >&6; } F77_DUMMY_MAIN=$ac_cv_f77_dummy_main if test "$F77_DUMMY_MAIN" != unknown; then : if test $F77_DUMMY_MAIN != none; then cat >>confdefs.h <<_ACEOF #define F77_DUMMY_MAIN $F77_DUMMY_MAIN _ACEOF if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then $as_echo "#define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 name-mangling scheme" >&5 $as_echo_n "checking for Fortran 77 name-mangling scheme... " >&6; } if ${ac_cv_f77_mangling+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_f77_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_f77_mangling="$ac_cv_f77_mangling, no underscore" else ac_cv_f77_mangling="$ac_cv_f77_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_f77_mangling="$ac_cv_f77_mangling, no extra underscore" else ac_cv_f77_mangling="$ac_cv_f77_mangling, extra underscore" fi else ac_cv_f77_mangling="unknown" fi else ac_cv_f77_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See \`config.log' for more details" "$LINENO" 5; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_mangling" >&5 $as_echo "$ac_cv_f77_mangling" >&6; } ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in "lower case, no underscore, no extra underscore") $as_echo "#define F77_FUNC(name,NAME) name" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") $as_echo "#define F77_FUNC(name,NAME) name" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") $as_echo "#define F77_FUNC(name,NAME) name ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") $as_echo "#define F77_FUNC(name,NAME) name ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") $as_echo "#define F77_FUNC(name,NAME) NAME" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") $as_echo "#define F77_FUNC(name,NAME) NAME" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") $as_echo "#define F77_FUNC(name,NAME) NAME ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") $as_echo "#define F77_FUNC(name,NAME) NAME ## _" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 $as_echo "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to pass symbols to preprocessed $F77" >&5 $as_echo_n "checking how to pass symbols to preprocessed $F77... " >&6; } if ${ga_cv_f77_cpp_symbol+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=F for symbol in -D -WF,-D -Wp,-D do ga_save_CPPFLAGS="$CPPFLAGS" ga_save_FFLAGS="$FFLAGS" CPPFLAGS="$CPPFLAGS ${symbol}GABLAHBLAH" FFLAGS="$CPPFLAGS $FFLAGS" cat > conftest.$ac_ext <<_ACEOF #ifndef GABLAHBLAH this is an error #endif end program _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ga_cv_f77_cpp_symbol="$symbol" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ga_save_CPPFLAGS" FFLAGS="$ga_save_FFLAGS" if test "x$ga_cv_f77_cpp_symbol" != x; then : break fi done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_cpp_symbol" >&5 $as_echo "$ga_cv_f77_cpp_symbol" >&6; } if test "x$ga_cv_f77_cpp_symbol" = x; then : as_fn_error $? "don't know how to pass symbols to preprocessed Fortran" "$LINENO" 5 fi case $ga_cv_f77_cpp_symbol in #( -D) : ;; #( *) : FFLAGS="$FFLAGS ${ga_cv_f77_cpp_symbol}HAVE_CONFIG_H" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 needs a flag to compile fixed format source" >&5 $as_echo_n "checking whether $F77 needs a flag to compile fixed format source... " >&6; } if ${ga_cv_f77_fixed_flag+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu for testflag in none -ffixed-form -qfixed -Mfixed -fixedform "-f fixed" +source=fixed -fix ; do ga_save_FFLAGS=$FFLAGS if test "x$testflag" != xnone; then : FFLAGS="$FFLAGS $testflag" fi cat > conftest.$ac_ext <<_ACEOF c some comment end program _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ga_cv_f77_fixed_flag=$testflag fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext FFLAGS=$ga_save_FFLAGS if test "x$ga_cv_f77_fixed_flag" != x; then : break fi done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_fixed_flag" >&5 $as_echo "$ga_cv_f77_fixed_flag" >&6; } if test "x$ga_cv_f77_fixed_flag" != xnone; then : if test "x$ga_cv_f77_fixed_flag" != x; then : FFLAGS="$FFLAGS $ga_cv_f77_fixed_flag" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 needs a flag to compile inconsistent types" >&5 $as_echo_n "checking whether $F77 needs a flag to compile inconsistent types... " >&6; } if ${ga_cv_f77_mismatch_type_flag+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu for testflag in none "-mismatch_all -dusty" do ga_save_FFLAGS="$FFLAGS" if test "x$testflag" != xnone; then : FFLAGS="$FFLAGS $testflag" fi cat > conftest.$ac_ext <<_ACEOF integer function the_test () implicit none logical foo external foo character*1 byte_mb integer int_mb the_test = 0 if (foo(byte_mb)) return if (foo( int_mb)) return the_test = 1 return end _ACEOF if ac_fn_f77_try_compile "$LINENO"; then : ga_cv_f77_mismatch_type_flag="$testflag" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext FFLAGS="$ga_save_FFLAGS" if test "x$ga_cv_f77_mismatch_type_flag" != x; then : break fi done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_mismatch_type_flag" >&5 $as_echo "$ga_cv_f77_mismatch_type_flag" >&6; } if test "x$ga_cv_f77_mismatch_type_flag" != xnone; then : if test "x$ga_cv_f77_mismatch_type_flag" != x; then : FFLAGS="$FFLAGS $ga_cv_f77_mismatch_type_flag" fi fi # Check whether --enable-i4 was given. if test "${enable_i4+set}" = set; then : enableval=$enable_i4; enable_i4=yes fi # Check whether --enable-i8 was given. if test "${enable_i8+set}" = set; then : enableval=$enable_i8; enable_i8=yes fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_f77_integer_size" "$ac_includes_default"; then : else ga_f77_integer_size=0 fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for desired Fortran INTEGER size" >&5 $as_echo_n "checking for desired Fortran INTEGER size... " >&6; } if ${ga_cv_f77_integer_size+:} false; then : $as_echo_n "(cached) " >&6 else if test x$enable_i4 = xyes; then : if test x$enable_i8 = xyes; then : as_fn_error $? "Cannot enable both i4 and i8" "$LINENO" 5 else ga_cv_f77_integer_size=4 fi else if test x$enable_i8 = xyes; then : ga_cv_f77_integer_size=8 else ga_cv_f77_integer_size=$ga_f77_integer_size fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_integer_size" >&5 $as_echo "$ga_cv_f77_integer_size" >&6; } # Now determine the correct compiler flag to adjust the integer size. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for INTEGER size compile flag" >&5 $as_echo_n "checking for INTEGER size compile flag... " >&6; } if ${ga_cv_f77_integer_size_flag+:} false; then : $as_echo_n "(cached) " >&6 else case $cross_compiling:$ga_cv_f77_integer_size in #( yes:4) : ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ga_result= ga_save_FFLAGS="$FFLAGS" ga_save_suppress_FFLAGS="$FFLAGS" ga_save_werror_flag=$ac_f77_werror_flag ac_f77_werror_flag=yes if test "x$ga_cv_f77_suppress" != xnone; then : ga_save_suppress_FFLAGS="$FFLAGS $ga_cv_f77_suppress" fi if test "x$FFLAG_INT" != x; then : FFLAGS="$ga_save_suppress_FFLAGS $FFLAG_INT" cat > conftest.$ac_ext <<_ACEOF program main integer i end program _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_result=$flag fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test "x$ga_result" = x; then : for flag in -fdefault-integer-4 -qintsize=4 "-integer-size 32" -CcdII4 "-s integer32" -xtypemap=integer:32 -i4 +i4 do FFLAGS="$ga_save_suppress_FFLAGS $flag" cat > conftest.$ac_ext <<_ACEOF program main integer i end program _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ac_ext=F cat > conftest.$ac_ext <<_ACEOF program main integer i end program _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_result=$flag; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=f fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi ac_f77_werror_flag=$ga_save_werror_flag FFLAGS="$ga_save_FFLAGS" ga_cv_f77_integer_size_flag="$ga_result" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ;; #( yes:8) : ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ga_result= ga_save_FFLAGS="$FFLAGS" ga_save_suppress_FFLAGS="$FFLAGS" ga_save_werror_flag=$ac_f77_werror_flag ac_f77_werror_flag=yes if test "x$ga_cv_f77_suppress" != xnone; then : ga_save_suppress_FFLAGS="$FFLAGS $ga_cv_f77_suppress" fi if test "x$FFLAG_INT" != x; then : FFLAGS="$ga_save_suppress_FFLAGS $FFLAG_INT" cat > conftest.$ac_ext <<_ACEOF program main integer i end program _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_result=$flag fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test "x$ga_result" = x; then : for flag in -fdefault-integer-8 -qintsize=8 "-integer-size 64" -CcdII8 "-s integer64" -xtypemap=integer:64 -i8 +i8 do FFLAGS="$ga_save_suppress_FFLAGS $flag" cat > conftest.$ac_ext <<_ACEOF program main integer i end program _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ac_ext=F cat > conftest.$ac_ext <<_ACEOF program main integer i end program _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_result=$flag; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=f fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi ac_f77_werror_flag=$ga_save_werror_flag FFLAGS="$ga_save_FFLAGS" ga_cv_f77_integer_size_flag="$ga_result" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ;; #( *:4) : for flag in none $FFLAG_INT -fdefault-integer-4 -qintsize=4 "-integer-size 32" -CcdII4 "-s integer32" -xtypemap=integer:32 -i4 +i4 do ga_save_FFLAGS="$FFLAGS" if test "x$flag" != xnone; then : FFLAGS="$flag $FFLAGS" fi sizeof_integer=0 ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SIZE" ;; lower*) ac_val="size" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac size="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef __cplusplus extern "C" { #endif void $size(char *a, char *b) { long diff = (long) (b - a); FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%ld\n", diff); fclose(f); } #ifdef __cplusplus } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $CLIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat > conftest.$ac_ext <<_ACEOF program main external size INTEGER x(2) call size(x(1),x(2)) end _ACEOF if ac_fn_f77_try_run "$LINENO"; then : sizeof_integer=`cat conftestval` else sizeof_integer=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$ga_save_LIBS rm -f cfortran_test* else sizeof_integer=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu rm -rf conftest* FFLAGS="$ga_save_FFLAGS" if test x$sizeof_integer = x4; then : ga_cv_f77_integer_size_flag=$flag; break fi done ;; #( *:8) : for flag in none $FFLAG_INT -fdefault-integer-8 -qintsize=8 "-integer-size 64" -CcdII8 "-s integer64" -xtypemap=integer:64 -i8 +i8 do ga_save_FFLAGS="$FFLAGS" if test "x$flag" != xnone; then : FFLAGS="$flag $FFLAGS" fi sizeof_integer=0 ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SIZE" ;; lower*) ac_val="size" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac size="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef __cplusplus extern "C" { #endif void $size(char *a, char *b) { long diff = (long) (b - a); FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%ld\n", diff); fclose(f); } #ifdef __cplusplus } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $CLIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat > conftest.$ac_ext <<_ACEOF program main external size INTEGER x(2) call size(x(1),x(2)) end _ACEOF if ac_fn_f77_try_run "$LINENO"; then : sizeof_integer=`cat conftestval` else sizeof_integer=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$ga_save_LIBS rm -f cfortran_test* else sizeof_integer=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu rm -rf conftest* FFLAGS="$ga_save_FFLAGS" if test x$sizeof_integer = x8; then : ga_cv_f77_integer_size_flag=$flag; break fi done ;; #( *) : ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_integer_size_flag" >&5 $as_echo "$ga_cv_f77_integer_size_flag" >&6; } if test "x$ga_cv_f77_integer_size_flag" != x; then : if test "x$ga_cv_f77_integer_size_flag" != xnone; then : FFLAG_INT=$ga_cv_f77_integer_size_flag fi fi if test "x$ga_cv_f77_integer_size" = x8; then : if test "x$ga_cv_f77_integer_size_flag" = x; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >&5 $as_echo "$as_me: WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to find a flag to promote Fortran integers" >&5 $as_echo "$as_me: WARNING: Unable to find a flag to promote Fortran integers" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: INTEGER*8 promotion is not supported" >&5 $as_echo "$as_me: WARNING: INTEGER*8 promotion is not supported" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >&5 $as_echo "$as_me: WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >&2;} fi fi #Checks for Fortran typedefs, structures, and compiler characteristics. #Checks for Fortran type sizes. tascel_save_FFLAGS="$FFLAGS"; FFLAGS="$FFLAGS $FFLAG_INT" { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of Fortran INTEGER" >&5 $as_echo_n "checking size of Fortran INTEGER... " >&6; } if ${ga_cv_f77_sizeof_INTEGER+:} false; then : $as_echo_n "(cached) " >&6 else if test x$cross_compiling = xyes; then : ga_cv_f77_sizeof_INTEGER=$ga_cv_f77_integer_size else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SIZE" ;; lower*) ac_val="size" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac size="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef __cplusplus extern "C" { #endif void $size(char *a, char *b) { long diff = (long) (b - a); FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%ld\n", diff); fclose(f); } #ifdef __cplusplus } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $CLIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat > conftest.$ac_ext <<_ACEOF program main external size INTEGER x(2) call size(x(1),x(2)) end _ACEOF if ac_fn_f77_try_run "$LINENO"; then : ga_cv_f77_sizeof_INTEGER=`cat conftestval` else ga_cv_f77_sizeof_INTEGER=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$ga_save_LIBS rm -f cfortran_test* else ga_cv_f77_sizeof_INTEGER=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu rm -rf conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_sizeof_INTEGER" >&5 $as_echo "$ga_cv_f77_sizeof_INTEGER" >&6; } if test x$cross_compiling = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot determine size of INTEGER when cross-compiling." >&5 $as_echo "$as_me: WARNING: Cannot determine size of INTEGER when cross-compiling." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Defaulting to $ga_cv_f77_integer_size" >&5 $as_echo "$as_me: WARNING: Defaulting to $ga_cv_f77_integer_size" >&2;} fi cat >>confdefs.h <<_ACEOF #define SIZEOF_F77_INTEGER $ga_cv_f77_sizeof_INTEGER _ACEOF FFLAGS="$tascel_save_FFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of Fortran REAL" >&5 $as_echo_n "checking size of Fortran REAL... " >&6; } if ${ga_cv_f77_sizeof_REAL+:} false; then : $as_echo_n "(cached) " >&6 else if test x$cross_compiling = xyes; then : ga_cv_f77_sizeof_REAL=4 else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SIZE" ;; lower*) ac_val="size" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac size="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef __cplusplus extern "C" { #endif void $size(char *a, char *b) { long diff = (long) (b - a); FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%ld\n", diff); fclose(f); } #ifdef __cplusplus } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $CLIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat > conftest.$ac_ext <<_ACEOF program main external size REAL x(2) call size(x(1),x(2)) end _ACEOF if ac_fn_f77_try_run "$LINENO"; then : ga_cv_f77_sizeof_REAL=`cat conftestval` else ga_cv_f77_sizeof_REAL=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$ga_save_LIBS rm -f cfortran_test* else ga_cv_f77_sizeof_REAL=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu rm -rf conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_sizeof_REAL" >&5 $as_echo "$ga_cv_f77_sizeof_REAL" >&6; } if test x$cross_compiling = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot determine size of REAL when cross-compiling." >&5 $as_echo "$as_me: WARNING: Cannot determine size of REAL when cross-compiling." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Defaulting to 4" >&5 $as_echo "$as_me: WARNING: Defaulting to 4" >&2;} fi cat >>confdefs.h <<_ACEOF #define SIZEOF_F77_REAL $ga_cv_f77_sizeof_REAL _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of Fortran DOUBLE PRECISION" >&5 $as_echo_n "checking size of Fortran DOUBLE PRECISION... " >&6; } if ${ga_cv_f77_sizeof_DOUBLE_PRECISION+:} false; then : $as_echo_n "(cached) " >&6 else if test x$cross_compiling = xyes; then : ga_cv_f77_sizeof_DOUBLE_PRECISION=8 else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SIZE" ;; lower*) ac_val="size" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac size="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef __cplusplus extern "C" { #endif void $size(char *a, char *b) { long diff = (long) (b - a); FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%ld\n", diff); fclose(f); } #ifdef __cplusplus } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $CLIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat > conftest.$ac_ext <<_ACEOF program main external size DOUBLE PRECISION x(2) call size(x(1),x(2)) end _ACEOF if ac_fn_f77_try_run "$LINENO"; then : ga_cv_f77_sizeof_DOUBLE_PRECISION=`cat conftestval` else ga_cv_f77_sizeof_DOUBLE_PRECISION=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$ga_save_LIBS rm -f cfortran_test* else ga_cv_f77_sizeof_DOUBLE_PRECISION=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu rm -rf conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f77_sizeof_DOUBLE_PRECISION" >&5 $as_echo "$ga_cv_f77_sizeof_DOUBLE_PRECISION" >&6; } if test x$cross_compiling = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot determine size of DOUBLE PRECISION when cross-compiling." >&5 $as_echo "$as_me: WARNING: Cannot determine size of DOUBLE PRECISION when cross-compiling." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Defaulting to 8" >&5 $as_echo "$as_me: WARNING: Defaulting to 8" >&2;} fi cat >>confdefs.h <<_ACEOF #define SIZEOF_F77_DOUBLE_PRECISION $ga_cv_f77_sizeof_DOUBLE_PRECISION _ACEOF # The rest of the Fortran 77 to C compatibility checks. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for flag to disable $F77 main when linking with C main" >&5 $as_echo_n "checking for flag to disable $F77 main when linking with C main... " >&6; } if ${ga_cv_fld_nomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu for flag in none -nofor-main -nofor_main -Mnomain -mlcmain=main; do ga_save_FFLAGS=$FFLAGS if test "x$flag" != xnone; then : FFLAGS="$FFLAGS $flag" fi cat > conftest.$ac_ext <<_ACEOF subroutine donothing() end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_cv_fld_nomain=$flag fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext FFLAGS=$ga_save_FFLAGS if test "x$ga_cv_fld_nomain" != x; then : break fi done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$ga_save_LIBS rm -f cfortran_test.$ac_objext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_fld_nomain" >&5 $as_echo "$ga_cv_fld_nomain" >&6; } if test "x$ga_cv_fld_nomain" != xnone; then : FLD_NOMAIN=$ga_cv_fld_nomain fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for routines to access the command line from Fortran" >&5 $as_echo_n "checking for routines to access the command line from Fortran... " >&6; } # User-specified values # Standard practice, uppercase if test "x$ga_f77_getarg" = x; then : ga_fxx_module= ga_f77_getarg_decl="external GETARG" ga_f77_getarg=GETARG ga_f77_getarg_args="i,s" ga_f77_iargc=IARGC cat > conftest.$ac_ext <<_ACEOF program main $ga_fxx_module integer i, j, l, ier character*20 s $ga_f77_getarg_decl i = 0 call $ga_f77_getarg($ga_f77_getarg_args) i=$ga_f77_iargc() if (i .gt. 1) then j = i - $ga_f77_iargc() j = 1.0 / j endif end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : else ga_f77_getarg= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # Standard practice, lowercase if test "x$ga_f77_getarg" = x; then : ga_fxx_module= ga_f77_getarg_decl="external getarg" ga_f77_getarg=getarg ga_f77_getarg_args="i,s" ga_f77_iargc=iargc cat > conftest.$ac_ext <<_ACEOF program main $ga_fxx_module integer i, j, l, ier character*20 s $ga_f77_getarg_decl i = 0 call $ga_f77_getarg($ga_f77_getarg_args) i=$ga_f77_iargc() if (i .gt. 1) then j = i - $ga_f77_iargc() j = 1.0 / j endif end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : else ga_f77_getarg= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # Posix alternative if test "x$ga_f77_getarg" = x; then : ga_fxx_module= ga_f77_getarg_decl="external pxfgetarg" ga_f77_getarg=pxfgetarg ga_f77_getarg_args="i,s,l,ier" ga_f77_iargc=ipxfargc cat > conftest.$ac_ext <<_ACEOF program main $ga_fxx_module integer i, j, l, ier character*20 s $ga_f77_getarg_decl i = 0 call $ga_f77_getarg($ga_f77_getarg_args) i=$ga_f77_iargc() if (i .gt. 1) then j = i - $ga_f77_iargc() j = 1.0 / j endif end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : else ga_f77_getarg= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # Nag f90_unix_env module if test "x$ga_f77_getarg" = x; then : ga_fxx_module=" use f90_unix_env" ga_f77_getarg_decl= ga_f77_getarg=getarg ga_f77_getarg_args="i,s" ga_f77_iargc=iargc cat > conftest.$ac_ext <<_ACEOF program main $ga_fxx_module integer i, j, l, ier character*20 s $ga_f77_getarg_decl i = 0 call $ga_f77_getarg($ga_f77_getarg_args) i=$ga_f77_iargc() if (i .gt. 1) then j = i - $ga_f77_iargc() j = 1.0 / j endif end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : else ga_f77_getarg= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # Nag f90_unix module if test "x$ga_f77_getarg" = x; then : ga_fxx_module=" use f90_unix" ga_f77_getarg_decl= ga_f77_getarg=getarg ga_f77_getarg_args="i,s" ga_f77_iargc=iargc cat > conftest.$ac_ext <<_ACEOF program main $ga_fxx_module integer i, j, l, ier character*20 s $ga_f77_getarg_decl i = 0 call $ga_f77_getarg($ga_f77_getarg_args) i=$ga_f77_iargc() if (i .gt. 1) then j = i - $ga_f77_iargc() j = 1.0 / j endif end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : else ga_f77_getarg= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # gfortran won't find getarg if it is marked as external if test "x$ga_f77_getarg" = x; then : ga_fxx_module= ga_f77_getarg_decl="intrinsic GETARG" ga_f77_getarg=GETARG ga_f77_getarg_args="i,s" ga_f77_iargc=IARGC cat > conftest.$ac_ext <<_ACEOF program main $ga_fxx_module integer i, j, l, ier character*20 s $ga_f77_getarg_decl i = 0 call $ga_f77_getarg($ga_f77_getarg_args) i=$ga_f77_iargc() if (i .gt. 1) then j = i - $ga_f77_iargc() j = 1.0 / j endif end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : else ga_f77_getarg= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test "x$ga_f77_getarg" = x; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Could not find way to access Fortran cmd line from C" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } cat >>confdefs.h <<_ACEOF #define F77_GETARG_DECL $ga_f77_getarg_decl _ACEOF cat >>confdefs.h <<_ACEOF #define F77_GETARG $ga_f77_getarg _ACEOF cat >>confdefs.h <<_ACEOF #define F77_GETARG_ARGS $ga_f77_getarg_args _ACEOF cat >>confdefs.h <<_ACEOF #define F77_IARGC $ga_f77_iargc _ACEOF cat >>confdefs.h <<_ACEOF #define FXX_MODULE $ga_fxx_module _ACEOF ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="F2C_GETARG" ;; lower*) ac_val="f2c_getarg" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac case $ac_cv_f77_mangling in *," extra underscore"*) ac_val="$ac_val"_ ;; esac F2C_GETARG="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="F2C_IARGC" ;; lower*) ac_val="f2c_iargc" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac case $ac_cv_f77_mangling in *," extra underscore"*) ac_val="$ac_val"_ ;; esac F2C_IARGC="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Fortran hidden string length convention is after args" >&5 $as_echo_n "checking whether Fortran hidden string length convention is after args... " >&6; } if ${ga_cv_f2c_string_after_args+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS" != x; then : ga_cv_f2c_string_after_args="$F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS" fi if test "x$ga_cv_f2c_string_after_args" = x; then : if test x$cross_compiling = xyes; then : if test "x" != x; then : ga_cv_f2c_string_after_args="" else ga_cv_f2c_string_after_args="yes" fi fi fi if test "x$ga_cv_f2c_string_after_args" = x; then : ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SUB" ;; lower*) ac_val="sub" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac SUB="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #define LEN 80 void fix_c_string_for_f(char *s, int len); void fix_f_string_for_c(char *s, int len); void $SUB(char *fname, char *lname, int fname_len, int lname_len) { char result[LEN]; fix_f_string_for_c(fname, fname_len); fix_f_string_for_c(lname, lname_len); snprintf(result, LEN, "The names passed to C: %s %s\n", fname, lname); fix_c_string_for_f(fname, fname_len); fix_c_string_for_f(lname, lname_len); } void fix_c_string_for_f(char *s, int len) { int i; for (i=strlen(s); i < len; i++) { s[i] = ' '; } } void fix_f_string_for_c(char *s, int len) { int i; for (i=len-1; s[i] == ' ' && i>=0; i--) { s[i] = '\0'; } } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $CLIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat > conftest.$ac_ext <<_ACEOF program main character(LEN=10) :: first_name character(LEN=15) :: last_name first_name = "John" last_name = "Doe" call sub(first_name, last_name) end _ACEOF if ac_fn_f77_try_run "$LINENO"; then : ga_cv_f2c_string_after_args="yes" else : fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$ga_save_LIBS rm -f cfortran_test* else : fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu rm -rf conftest* fi if test "x$ga_cv_f2c_string_after_args" = x; then : ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SUB" ;; lower*) ac_val="sub" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac SUB="$ac_val" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #define LEN 80 void fix_c_string_for_f(char *s, int len); void fix_f_string_for_c(char *s, int len); void $SUB(char *fname, int fname_len, char *lname, int lname_len) { char result[LEN]; fix_f_string_for_c(fname, fname_len); fix_f_string_for_c(lname, lname_len); snprintf(result, LEN, "The names passed to C: %s %s\n", fname, lname); fix_c_string_for_f(fname, fname_len); fix_c_string_for_f(lname, lname_len); } void fix_c_string_for_f(char *s, int len) { int i; for (i=strlen(s); i < len; i++) { s[i] = ' '; } } void fix_f_string_for_c(char *s, int len) { int i; for (i=len-1; s[i] == ' ' && i>=0; i--) { s[i] = '\0'; } } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $CLIBS" ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat > conftest.$ac_ext <<_ACEOF program main character(LEN=10) :: first_name character(LEN=15) :: last_name first_name = "John" last_name = "Doe" call sub(first_name, last_name) end _ACEOF if ac_fn_f77_try_run "$LINENO"; then : ga_cv_f2c_string_after_args="no" else : fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$ga_save_LIBS rm -f cfortran_test* else : fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu rm -rf conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f2c_string_after_args" >&5 $as_echo "$ga_cv_f2c_string_after_args" >&6; } if test x$cross_compiling = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cross compiling: cannot determine f2c string convention" >&5 $as_echo "$as_me: WARNING: cross compiling: cannot determine f2c string convention" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: default is after args (=yes) but can be changed using" >&5 $as_echo "$as_me: WARNING: default is after args (=yes) but can be changed using" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS=no" >&5 $as_echo "$as_me: WARNING: F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS=no" >&2;} fi if test "x$ga_cv_f2c_string_after_args" = "xyes"; then : $as_echo "#define F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS 1" >>confdefs.h fi if test "x$ga_cv_f2c_string_after_args" != x; then : : else as_fn_error $? "f2c string convention is neither after args nor after string" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C type corresponding to INTEGER" >&5 $as_echo_n "checking for C type corresponding to INTEGER... " >&6; } if ${ga_cv_f2c_INTEGER+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$ga_cv_f2c_INTEGER"; then : if test "$ac_cv_sizeof_short" = "$ga_cv_f77_sizeof_INTEGER"; then : ga_cv_f2c_INTEGER="short" fi fi if test -z "$ga_cv_f2c_INTEGER"; then : if test "$ac_cv_sizeof_int" = "$ga_cv_f77_sizeof_INTEGER"; then : ga_cv_f2c_INTEGER="int" fi fi if test -z "$ga_cv_f2c_INTEGER"; then : if test "$ac_cv_sizeof_long" = "$ga_cv_f77_sizeof_INTEGER"; then : ga_cv_f2c_INTEGER="long" fi fi if test -z "$ga_cv_f2c_INTEGER"; then : if test "$ac_cv_sizeof_long_long" = "$ga_cv_f77_sizeof_INTEGER"; then : ga_cv_f2c_INTEGER="long long" fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f2c_INTEGER" >&5 $as_echo "$ga_cv_f2c_INTEGER" >&6; } if test "x$ga_cv_f2c_INTEGER" = x; then : as_fn_error $? "Could not determine C type matching Fortran INTEGER" "$LINENO" 5 fi F2C_INTEGER_C_TYPE=$ga_cv_f2c_INTEGER { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C type corresponding to REAL" >&5 $as_echo_n "checking for C type corresponding to REAL... " >&6; } if ${ga_cv_f2c_REAL+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$ga_cv_f2c_REAL"; then : if test "$ac_cv_sizeof_float" = "$ga_cv_f77_sizeof_REAL"; then : ga_cv_f2c_REAL="float" fi fi if test -z "$ga_cv_f2c_REAL"; then : if test "$ac_cv_sizeof_double" = "$ga_cv_f77_sizeof_REAL"; then : ga_cv_f2c_REAL="double" fi fi if test -z "$ga_cv_f2c_REAL"; then : if test "$ac_cv_sizeof_long_double" = "$ga_cv_f77_sizeof_REAL"; then : ga_cv_f2c_REAL="long double" fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f2c_REAL" >&5 $as_echo "$ga_cv_f2c_REAL" >&6; } if test "x$ga_cv_f2c_REAL" = x; then : as_fn_error $? "Could not determine C type matching Fortran REAL" "$LINENO" 5 fi F2C_REAL_C_TYPE=$ga_cv_f2c_REAL { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C type corresponding to DOUBLE PRECISION" >&5 $as_echo_n "checking for C type corresponding to DOUBLE PRECISION... " >&6; } if ${ga_cv_f2c_DOUBLE_PRECISION+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$ga_cv_f2c_DOUBLE_PRECISION"; then : if test "$ac_cv_sizeof_float" = "$ga_cv_f77_sizeof_DOUBLE_PRECISION"; then : ga_cv_f2c_DOUBLE_PRECISION="float" fi fi if test -z "$ga_cv_f2c_DOUBLE_PRECISION"; then : if test "$ac_cv_sizeof_double" = "$ga_cv_f77_sizeof_DOUBLE_PRECISION"; then : ga_cv_f2c_DOUBLE_PRECISION="double" fi fi if test -z "$ga_cv_f2c_DOUBLE_PRECISION"; then : if test "$ac_cv_sizeof_long_double" = "$ga_cv_f77_sizeof_DOUBLE_PRECISION"; then : ga_cv_f2c_DOUBLE_PRECISION="long double" fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_f2c_DOUBLE_PRECISION" >&5 $as_echo "$ga_cv_f2c_DOUBLE_PRECISION" >&6; } if test "x$ga_cv_f2c_DOUBLE_PRECISION" = x; then : as_fn_error $? "Could not determine C type matching Fortran DOUBLE PRECISION" "$LINENO" 5 fi F2C_DOUBLE_PRECISION_C_TYPE=$ga_cv_f2c_DOUBLE_PRECISION else # enable_f77=no version of AC_F77_WRAPPERS $as_echo "#define F77_FUNC(name,NAME) name" >>confdefs.h $as_echo "#define F77_FUNC_(name,NAME) name ## _" >>confdefs.h # enable_f77=no version of GA_F77_CHECK_SIZEOF cat >>confdefs.h <<_ACEOF #define SIZEOF_F77_INTEGER $ac_cv_sizeof_voidp _ACEOF cat >>confdefs.h <<_ACEOF #define SIZEOF_F77_REAL 4 _ACEOF cat >>confdefs.h <<_ACEOF #define SIZEOF_F77_DOUBLE_PRECISION 8 _ACEOF # enable_f77=no version of GA_F2C_NOMAIN # enable_f77=no version of GA_F2C_CMDARGS F2C_GETARG="F2C_GETARG" F2C_IARGC="F2C_IARGC" # enable_f77=no version of GA_F2C_HIDDEN_STRING_LENGTH_CONVENTION $as_echo "#define F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS 1" >>confdefs.h # enable_f77=no version of GA_F2C_MATCH_TYPES F2C_INTEGER_C_TYPE=long F2C_REAL_C_TYPE=float F2C_DOUBLE_PRECISION_C_TYPE=double fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ############################################################################### # Look for Global Arrays ############################################################################### ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether this package is part of GA distribution" >&5 $as_echo_n "checking whether this package is part of GA distribution... " >&6; } if ${ga_cv_libga_la_found+:} false; then : $as_echo_n "(cached) " >&6 else if test -f "../libga.la"; then : ga_cv_libga_la_found=yes else ga_cv_libga_la_found=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_cv_libga_la_found" >&5 $as_echo "$ga_cv_libga_la_found" >&6; } if test "x$ga_cv_libga_la_found" = xyes; then : GA_LIBS="../libga.la" GA_CPPFLAGS="-I$srcdir/../global/src -I../global/src -I$srcdir/../ma -I../ma -I../gaf2c -I../armci/gaf2c -I$srcdir/../armci/src/include" GA_FLIBS=`echo '@FLIBS@' | ../config.status --file=-` else ga_save_PATH="$PATH" if test -d $with_ga; then : PATH="$with_ga:$PATH" fi if test -d $with_ga/bin; then : PATH="$with_ga/bin:$PATH" fi # Extract the first word of "ga-config", so it can be a program name with args. set dummy ga-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GA_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $GA_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GA_CONFIG="$GA_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GA_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GA_CONFIG=$ac_cv_path_GA_CONFIG if test -n "$GA_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GA_CONFIG" >&5 $as_echo "$GA_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi PATH="$ga_save_PATH" if test "x$GA_CONFIG" != x; then : GA_CPPFLAGS=`$GA_CONFIG --cppflags` GA_LDFLAGS=`$GA_CONFIG --ldflags` GA_LIBS=`$GA_CONFIG --libs` GA_FLIBS=`$GA_CONFIG --flibs` else GA_LIBS= GA_LDFLAGS= GA_CPPFLAGS= # Check whether --with-ga was given. if test "${with_ga+set}" = set; then : withval=$with_ga; else with_ga=yes fi case $with_ga in #( yes) : ;; #( no) : ;; #( *) : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_ga ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : GA_LIBS="$GA_LIBS $arg" ;; #( -L*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -WL*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -Wl*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -I*) : GA_CPPFLAGS="$GA_CPPFLAGS $arg" ;; #( *.a) : GA_LIBS="$GA_LIBS $arg" ;; #( *.so) : GA_LIBS="$GA_LIBS $arg" ;; #( *lib) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( -mkl*) : GA_LIBS="$GA_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi done ;; esac # Check for header. ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_CPPFLAGS" ac_fn_c_check_header_mongrel "$LINENO" "ga.h" "ac_cv_header_ga_h" "$ac_includes_default" if test "x$ac_cv_header_ga_h" = xyes; then : else { ac_cv_search_GA_Initialize=; unset ac_cv_search_GA_Initialize;} GA_LIBS= GA_LDFLAGS= GA_CPPFLAGS= # Check whether --with-ga was given. if test "${with_ga+set}" = set; then : withval=$with_ga; else with_ga=yes fi case $with_ga in #( yes) : ;; #( no) : ;; #( *) : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_ga ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : GA_LIBS="$GA_LIBS $arg" ;; #( -L*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -WL*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -Wl*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -I*) : GA_CPPFLAGS="$GA_CPPFLAGS $arg" ;; #( *.a) : GA_LIBS="$GA_LIBS $arg" ;; #( *.so) : GA_LIBS="$GA_LIBS $arg" ;; #( *lib) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( -mkl*) : GA_LIBS="$GA_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi done ;; esac # Check for header. ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_CPPFLAGS" ac_fn_c_check_header_mongrel "$LINENO" "ga.h" "ac_cv_header_ga_h" "$ac_includes_default" if test "x$ac_cv_header_ga_h" = xyes; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Could not locate Global Arrays 5.x nor 4.x See \`config.log' for more details" "$LINENO" 5; } fi CPPFLAGS="$ga_save_CPPFLAGS" # Check for library. ga_save_LIBS="$LIBS"; LIBS="$GA_LIBS $LIBS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing GA_Initialize" >&5 $as_echo_n "checking for library containing GA_Initialize... " >&6; } if ${ac_cv_search_GA_Initialize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char GA_Initialize (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return GA_Initialize (); ; return 0; } _ACEOF for ac_lib in '' global; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib -lma -larmci -llinalg $FLIBS $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_GA_Initialize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_GA_Initialize+:} false; then : break fi done if ${ac_cv_search_GA_Initialize+:} false; then : else ac_cv_search_GA_Initialize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_GA_Initialize" >&5 $as_echo "$ac_cv_search_GA_Initialize" >&6; } ac_res=$ac_cv_search_GA_Initialize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi LIBS="$ga_save_LIBS" LDFLAGS="$ga_save_LDFLAGS" if test "x$ac_cv_search_GA_Initialize" != xno; then : GA_LIBS="-lglobal -lma -larmci -llinalg" $as_echo "#define HAVE_GA 1" >>confdefs.h else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Could not locate Global Arrays 5.x nor 4.x See \`config.log' for more details" "$LINENO" 5; } fi fi CPPFLAGS="$ga_save_CPPFLAGS" # Check for library. ga_save_LIBS="$LIBS"; LIBS="$GA_LIBS $LIBS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing GA_Initialize" >&5 $as_echo_n "checking for library containing GA_Initialize... " >&6; } if ${ac_cv_search_GA_Initialize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char GA_Initialize (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return GA_Initialize (); ; return 0; } _ACEOF for ac_lib in '' ga; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $FLIBS $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_GA_Initialize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_GA_Initialize+:} false; then : break fi done if ${ac_cv_search_GA_Initialize+:} false; then : else ac_cv_search_GA_Initialize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_GA_Initialize" >&5 $as_echo "$ac_cv_search_GA_Initialize" >&6; } ac_res=$ac_cv_search_GA_Initialize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi LIBS="$ga_save_LIBS" LDFLAGS="$ga_save_LDFLAGS" if test "x$ac_cv_search_GA_Initialize" != xno; then : GA_LIBS="-lga" $as_echo "#define HAVE_GA 1" >>confdefs.h else { ac_cv_search_GA_Initialize=; unset ac_cv_search_GA_Initialize;} GA_LIBS= GA_LDFLAGS= GA_CPPFLAGS= # Check whether --with-ga was given. if test "${with_ga+set}" = set; then : withval=$with_ga; else with_ga=yes fi case $with_ga in #( yes) : ;; #( no) : ;; #( *) : if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_ga ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : GA_LIBS="$GA_LIBS $arg" ;; #( -L*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -WL*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -Wl*) : GA_LDFLAGS="$GA_LDFLAGS $arg" ;; #( -I*) : GA_CPPFLAGS="$GA_CPPFLAGS $arg" ;; #( *.a) : GA_LIBS="$GA_LIBS $arg" ;; #( *.so) : GA_LIBS="$GA_LIBS $arg" ;; #( *lib) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi ;; #( -mkl*) : GA_LIBS="$GA_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : GA_LDFLAGS="$GA_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : GA_CPPFLAGS="$GA_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_ga not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_ga not parsed" >&2;} fi done ;; esac # Check for header. ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_CPPFLAGS" ac_fn_c_check_header_mongrel "$LINENO" "ga.h" "ac_cv_header_ga_h" "$ac_includes_default" if test "x$ac_cv_header_ga_h" = xyes; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Could not locate Global Arrays 5.x nor 4.x See \`config.log' for more details" "$LINENO" 5; } fi CPPFLAGS="$ga_save_CPPFLAGS" # Check for library. ga_save_LIBS="$LIBS"; LIBS="$GA_LIBS $LIBS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing GA_Initialize" >&5 $as_echo_n "checking for library containing GA_Initialize... " >&6; } if ${ac_cv_search_GA_Initialize+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char GA_Initialize (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return GA_Initialize (); ; return 0; } _ACEOF for ac_lib in '' global; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib -lma -larmci -llinalg $FLIBS $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_GA_Initialize=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_GA_Initialize+:} false; then : break fi done if ${ac_cv_search_GA_Initialize+:} false; then : else ac_cv_search_GA_Initialize=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_GA_Initialize" >&5 $as_echo "$ac_cv_search_GA_Initialize" >&6; } ac_res=$ac_cv_search_GA_Initialize if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi LIBS="$ga_save_LIBS" LDFLAGS="$ga_save_LDFLAGS" if test "x$ac_cv_search_GA_Initialize" != xno; then : GA_LIBS="-lglobal -lma -larmci -llinalg" $as_echo "#define HAVE_GA 1" >>confdefs.h else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Could not locate Global Arrays 5.x nor 4.x See \`config.log' for more details" "$LINENO" 5; } fi fi fi fi ############################################################################### # Checks for BLAS/LAPACK/SCALAPACK require both C and Fortran features to # have been detected. Further, they assume the current AC_LANG is C. # NOTE: We only look for BLAS and LAPACK because GA does. We will get linker # errors if GA was built with an external BLAS and LAPACK. ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Checks for BLAS,LAPACK,ScaLAPACK" >&5 $as_echo "$as_me: Checks for BLAS,LAPACK,ScaLAPACK" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} blas_size=4 blas_size_hack=no # Check whether --with-blas was given. if test "${with_blas+set}" = set; then : withval=$with_blas; blas_size_hack=yes fi # Check whether --with-blas4 was given. if test "${with_blas4+set}" = set; then : withval=$with_blas4; blas_size=4; with_blas="$with_blas4" fi # Check whether --with-blas8 was given. if test "${with_blas8+set}" = set; then : withval=$with_blas8; blas_size=8; with_blas="$with_blas8" fi ga_blas_ok=no if test "x$with_blas" = xno; then : ga_blas_ok=skip fi # Parse --with-blas argument. Clear previous values first. BLAS_LIBS= BLAS_LDFLAGS= BLAS_CPPFLAGS= if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_blas ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : BLAS_LIBS="$BLAS_LIBS $arg" ;; #( -L*) : BLAS_LDFLAGS="$BLAS_LDFLAGS $arg" ;; #( -WL*) : BLAS_LDFLAGS="$BLAS_LDFLAGS $arg" ;; #( -Wl*) : BLAS_LDFLAGS="$BLAS_LDFLAGS $arg" ;; #( -I*) : BLAS_CPPFLAGS="$BLAS_CPPFLAGS $arg" ;; #( *.a) : BLAS_LIBS="$BLAS_LIBS $arg" ;; #( *.so) : BLAS_LIBS="$BLAS_LIBS $arg" ;; #( *lib) : if test -d $arg; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi ;; #( -mkl*) : BLAS_LIBS="$BLAS_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : BLAS_LDFLAGS="$BLAS_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : BLAS_CPPFLAGS="$BLAS_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_blas not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_blas not parsed" >&2;} fi done # Get fortran linker names of BLAS functions to check for. ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="CGEMM" ;; lower*) ac_val="cgemm" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cgemm="$ac_val" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DGEMM" ;; lower*) ac_val="dgemm" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac dgemm="$ac_val" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="SGEMM" ;; lower*) ac_val="sgemm" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac sgemm="$ac_val" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="ZGEMM" ;; lower*) ac_val="zgemm" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac zgemm="$ac_val" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ga_save_LIBS="$LIBS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$BLAS_LDFLAGS $LDFLAGS" ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$BLAS_CPPFLAGS $CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: Attempting to locate BLAS library" >&5 $as_echo "$as_me: Attempting to locate BLAS library" >&6;} # First, check environment/command-line variables. # If failed, erase BLAS_LIBS but maintain BLAS_LDFLAGS and BLAS_CPPFLAGS. if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS with user-supplied flags" >&5 $as_echo_n "checking for BLAS with user-supplied flags... " >&6; } LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" if test $ga_blas_ok = yes; then : if test $blas_size_hack = yes; then : case "$BLAS_LIBS $LIBS $LDFLAGS $CPPFLAGS" in #( *ilp64*) : blas_size=8 ;; #( # Intel MKL *_int64*) : blas_size=8 ;; #( *) : ;; esac fi fi # AMD ACML { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # AMD Core Math Library (ACML) if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in AMD Core Math Library" >&5 $as_echo_n "checking for BLAS in AMD Core Math Library... " >&6; } # add -lacml to BLAS_LIBS if missing from LIBS case $LIBS in #( *acml*) : ;; #( *) : BLAS_LIBS="-lacml" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" if test "x$ga_blas_ok" = xyes; then : if test $blas_size_hack = yes; then : case "$BLAS_LIBS $LIBS $LDFLAGS $CPPFLAGS" in #( *_int64*) : blas_size=8 ;; #( *) : ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # Intel MKL library if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in Intel Math Kernel Library" >&5 $as_echo_n "checking for BLAS in Intel Math Kernel Library... " >&6; } # add -lmkl to BLAS_LIBS if missing from LIBS case $LIBS in #( *mkl*) : ;; #( *) : BLAS_LIBS="-lmkl" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" if test "x$ga_blas_ok" = xyes; then : if test $blas_size_hack = yes; then : case "$BLAS_LIBS $LIBS $LDFLAGS $CPPFLAGS" in #( *ilp64*) : blas_size=8 ;; #( *) : ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # ATLAS library (http://math-atlas.sourceforge.net/) if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in ATLAS" >&5 $as_echo_n "checking for BLAS in ATLAS... " >&6; } if test "x$enable_f77" = xno; then : # add -lcblas if needed but missing from LIBS case $LIBS in #( *cblas*) : ;; #( *) : BLAS_LIBS="-lcblas" ;; esac else # add -lf77blas if needed but missing from LIBS case $LIBS in #( *f77blas*) : ;; #( *) : BLAS_LIBS="-lf77blas" ;; esac fi # add -latlas if needed but missing from LIBS case $LIBS in #( *atlas*) : ;; #( *) : BLAS_LIBS="$BLAS_LIBS -latlas" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # PhiPACK libraries (requires generic BLAS lib, too) if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in PhiPACK libraries" >&5 $as_echo_n "checking for BLAS in PhiPACK libraries... " >&6; } # add -lblas to BLAS_LIBS if missing from LIBS case $LIBS in #( *blas*) : ;; #( *) : BLAS_LIBS="-lblas" ;; esac # add -ldgemm to BLAS_LIBS if missing from LIBS case $LIBS in #( *dgemm*) : ;; #( *) : BLAS_LIBS="-ldgemm $BLAS_LIBS" ;; esac # add -lsgemm to BLAS_LIBS if missing from LIBS case $LIBS in #( *sgemm*) : ;; #( *) : BLAS_LIBS="-lsgemm $BLAS_LIBS" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # Apple Accelerate.framework if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in Apple Accelerate.framework" >&5 $as_echo_n "checking for BLAS in Apple Accelerate.framework... " >&6; } # add -framework Accelerate to BLAS_LIBS if missing from LIBS case $LIBS in #( *Accelerate*) : ;; #( *) : BLAS_LIBS="-framework Accelerate" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # Apple vecLib.framework if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in Apple vecLib.framework" >&5 $as_echo_n "checking for BLAS in Apple vecLib.framework... " >&6; } # add -framework vecLib to BLAS_LIBS if missing from LIBS case $LIBS in #( *vecLib*) : ;; #( *) : BLAS_LIBS="-framework vecLib" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # Alpha CXML library (CXML stands for Compaq Extended Math Library) if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in Alpha CXML library" >&5 $as_echo_n "checking for BLAS in Alpha CXML library... " >&6; } # add -lcxml to BLAS_LIBS if missing from LIBS case $LIBS in #( *cxml*) : ;; #( *) : BLAS_LIBS="-lcxml" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" if test $ga_blas_ok = no; then : # add -lcxml to BLAS_LIBS if missing from LIBS case $LIBS in #( *cxml*) : ;; #( *) : BLAS_LIBS="-lcxml" ;; esac # add -lcpml to BLAS_LIBS if missing from LIBS case $LIBS in #( *cpml*) : ;; #( *) : BLAS_LIBS="$BLAS_LIBS -lcpml" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # Alpha DXML library (now called CXML, see above) # Sun Performance library if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in Sun Performance Library" >&5 $as_echo_n "checking for BLAS in Sun Performance Library... " >&6; } # add -xlic_lib=sunperf to BLAS_LIBS if missing from LIBS case $LIBS in #( *sunperf*) : ;; #( *) : BLAS_LIBS="-xlic_lib=sunperf" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" if test $ga_blas_ok = no; then : # add -xlic_lib=sunperf to BLAS_LIBS if missing from LIBS case $LIBS in #( *sunperf*) : ;; #( *) : BLAS_LIBS="-xlic_lib=sunperf" ;; esac # add -lsunmath to BLAS_LIBS if missing from LIBS case $LIBS in #( *sunmath*) : ;; #( *) : BLAS_LIBS="$BLAS_LIBS -lsunmath" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # SCSL library (SCSL stands for SGI/Cray Scientific Library) if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in SGI/Cray Scientific Library" >&5 $as_echo_n "checking for BLAS in SGI/Cray Scientific Library... " >&6; } # add -lscs to BLAS_LIBS if missing from LIBS case $LIBS in #( *scs*) : ;; #( *) : BLAS_LIBS="-lscs" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # SGIMATH library if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in SGIMATH library" >&5 $as_echo_n "checking for BLAS in SGIMATH library... " >&6; } # add -lcomplib.sgimath to BLAS_LIBS if missing from LIBS case $LIBS in #( *complib.sgimath*) : ;; #( *) : BLAS_LIBS="-lcomplib.sgimath" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # IBM ESSL library (requires generic BLAS lib, too) if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in IBM ESSL library" >&5 $as_echo_n "checking for BLAS in IBM ESSL library... " >&6; } # add -lessl to BLAS_LIBS if missing from LIBS case $LIBS in #( *essl*) : ;; #( *) : BLAS_LIBS="-lessl" ;; esac # add -lblas to BLAS_LIBS if missing from LIBS case $LIBS in #( *blas*) : ;; #( *) : BLAS_LIBS="$BLAS_LIBS -lblas" ;; esac LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi # Generic BLAS library if test $ga_blas_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLAS in generic library" >&5 $as_echo_n "checking for BLAS in generic library... " >&6; } BLAS_LIBS="-lblas" LIBS="$BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC) end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_blas_ok=yes else BLAS_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_blas_ok" >&5 $as_echo "$ga_blas_ok" >&6; } fi CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" # Tests are complete. Execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test $ga_blas_ok = yes; then : have_blas=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: BLAS library not found, using internal BLAS" >&5 $as_echo "$as_me: WARNING: BLAS library not found, using internal BLAS" >&2;} blas_size=$ga_cv_f77_integer_size # reset blas integer size to desired have_blas=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_BLAS $have_blas _ACEOF cat >>confdefs.h <<_ACEOF #define BLAS_SIZE $blas_size _ACEOF if test $ga_blas_ok = yes; then HAVE_BLAS_TRUE= HAVE_BLAS_FALSE='#' else HAVE_BLAS_TRUE='#' HAVE_BLAS_FALSE= fi # Check whether --with-lapack was given. if test "${with_lapack+set}" = set; then : withval=$with_lapack; fi ga_lapack_ok=no if test "x$with_lapack" = xno; then : ga_lapack_ok=skip fi # Parse --with-lapack argument. Clear previous values first. LAPACK_LIBS= LAPACK_LDFLAGS= LAPACK_CPPFLAGS= if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_lapack ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : LAPACK_LIBS="$LAPACK_LIBS $arg" ;; #( -L*) : LAPACK_LDFLAGS="$LAPACK_LDFLAGS $arg" ;; #( -WL*) : LAPACK_LDFLAGS="$LAPACK_LDFLAGS $arg" ;; #( -Wl*) : LAPACK_LDFLAGS="$LAPACK_LDFLAGS $arg" ;; #( -I*) : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS $arg" ;; #( *.a) : LAPACK_LIBS="$LAPACK_LIBS $arg" ;; #( *.so) : LAPACK_LIBS="$LAPACK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : LAPACK_LDFLAGS="$LAPACK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : LAPACK_LDFLAGS="$LAPACK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : LAPACK_LDFLAGS="$LAPACK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : LAPACK_LDFLAGS="$LAPACK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi ;; #( -mkl*) : LAPACK_LIBS="$LAPACK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : LAPACK_LDFLAGS="$LAPACK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : LAPACK_LDFLAGS="$LAPACK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : LAPACK_LDFLAGS="$LAPACK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : LAPACK_LDFLAGS="$LAPACK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : LAPACK_CPPFLAGS="$LAPACK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_lapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_lapack not parsed" >&2;} fi done # Get fortran linker name of LAPACK function to check for. ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DGETRS" ;; lower*) ac_val="dgetrs" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac dgetrs="$ac_val" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ga_save_LIBS="$LIBS" ga_save_LDFLAGS="$LDFLAGS" ga_save_CPPFLAGS="$CPPFLAGS" LDFLAGS="$LAPACK_LDFLAGS $BLAS_LDFLAGS $LDFLAGS" CPPFLAGS="$LAPACK_CPPFLAGS $BLAS_CPPFLAGS $CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: Attempting to locate LAPACK library" >&5 $as_echo "$as_me: Attempting to locate LAPACK library" >&6;} # We cannot use LAPACK if BLAS is not found if test $ga_blas_ok != yes; then : ga_lapack_ok=noblas fi # First, check environment/command-line variables. # If failed, erase LAPACK_LIBS but maintain LAPACK_LDFLAGS and LAPACK_CPPFLAGS. if test $ga_lapack_ok = no; then : LIBS="$LAPACK_LIBS $BLAS_LIBS $LIBS" if test "x$enable_f77" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C LAPACK with user-supplied flags" >&5 $as_echo_n "checking for C LAPACK with user-supplied flags... " >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char dgetrs (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char result = dgetrs (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_lapack_ok=yes else LAPACK_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 LAPACK with user-supplied flags" >&5 $as_echo_n "checking for Fortran 77 LAPACK with user-supplied flags... " >&6; } ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none external DGETRS CALL DGETRS () end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_lapack_ok=yes else LAPACK_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_lapack_ok" >&5 $as_echo "$ga_lapack_ok" >&6; } LIBS="$ga_save_LIBS" fi # Generic LAPACK library? for lib in lapack lapack_rs6k; do if test $ga_lapack_ok = no; then : ga_save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" as_ac_Lib=`$as_echo "ac_cv_lib_$lib''_$dgetrs" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dgetrs in -l$lib" >&5 $as_echo_n "checking for $dgetrs in -l$lib... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$lib $FLIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $dgetrs (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $dgetrs (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : ga_lapack_ok=yes; LAPACK_LIBS="-l$lib" fi LIBS="$ga_save_LIBS" fi done CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test $ga_lapack_ok = yes; then : have_lapack=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: LAPACK library not found, using internal LAPACK" >&5 $as_echo "$as_me: WARNING: LAPACK library not found, using internal LAPACK" >&2;} have_lapack=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_LAPACK $have_lapack _ACEOF if test $ga_lapack_ok = yes; then HAVE_LAPACK_TRUE= HAVE_LAPACK_FALSE='#' else HAVE_LAPACK_TRUE='#' HAVE_LAPACK_FALSE= fi scalapack_size=4 # Check whether --with-scalapack was given. if test "${with_scalapack+set}" = set; then : withval=$with_scalapack; scalapack_size=4 fi # Check whether --with-scalapack8 was given. if test "${with_scalapack8+set}" = set; then : withval=$with_scalapack8; scalapack_size=8; with_scalapack="$with_scalapack8" fi ga_scalapack_ok=no if test "x$with_scalapack" = xno; then : ga_scalapack_ok=skip fi # Parse --with-scalapack argument. Clear previous values first. SCALAPACK_LIBS= SCALAPACK_LDFLAGS= SCALAPACK_CPPFLAGS= if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ga_arg_parse_sizeof_voidp" ""; then : fi for arg in $with_scalapack ; do case $arg in #( yes) : ;; #( no) : ;; #( -l*) : SCALAPACK_LIBS="$SCALAPACK_LIBS $arg" ;; #( -L*) : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS $arg" ;; #( -WL*) : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS $arg" ;; #( -Wl*) : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS $arg" ;; #( -I*) : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS $arg" ;; #( *.a) : SCALAPACK_LIBS="$SCALAPACK_LIBS $arg" ;; #( *.so) : SCALAPACK_LIBS="$SCALAPACK_LIBS $arg" ;; #( *lib) : if test -d $arg; then : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi ;; #( *lib/) : if test -d $arg; then : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi ;; #( *lib64) : if test -d $arg; then : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi ;; #( *lib64/) : if test -d $arg; then : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS -L$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi ;; #( *include) : if test -d $arg; then : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi ;; #( *include/) : if test -d $arg; then : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi ;; #( *include64) : if test -d $arg; then : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi ;; #( *include64/) : if test -d $arg; then : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS -I$arg" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi ;; #( -mkl*) : SCALAPACK_LIBS="$SCALAPACK_LIBS $arg" ;; #( *) : ga_arg_parse_ok=no ;; esac # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include if test "x$ga_arg_parse_ok" = xno; then : if test "x$ga_arg_parse_sizeof_voidp" = x8; then : if test -d $arg/lib64; then : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS -L$arg/lib64"; ga_arg_parse_ok=yes elif test -d $arg/lib; then : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include64; then : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS -I$arg/include64"; ga_arg_parse_ok=yes elif test -d $arg/include; then : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi else if test -d $arg/lib; then : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS -L$arg/lib"; ga_arg_parse_ok=yes fi if test -d $arg/include; then : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS -I$arg/include"; ga_arg_parse_ok=yes fi fi fi # $arg still unknown, look for "lib" and "include" anywhere... if test "x$ga_arg_parse_ok" = xno; then : case $arg in #( *lib*) : if test -d $arg; then : SCALAPACK_LDFLAGS="$SCALAPACK_LDFLAGS -L$arg"; ga_arg_parse_ok=yes fi ;; #( *include*) : if test -d $arg; then : SCALAPACK_CPPFLAGS="$SCALAPACK_CPPFLAGS -I$arg"; ga_arg_parse_ok=yes fi ;; #( *) : ;; esac fi # warn user that $arg fell through if test "x$ga_arg_parse_ok" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $arg of with_scalapack not parsed" >&5 $as_echo "$as_me: WARNING: $arg of with_scalapack not parsed" >&2;} fi done ga_save_LIBS="$LIBS" ga_save_LDFLAGS="$LDFLAGS" ga_save_CPPFLAGS="$CPPFLAGS" LDFLAGS="$SCALAPACK_LDFLAGS $LAPACK_LDFLAGS $BLAS_LDFLAGS $GA_MP_LDFLAGS $LDFLAGS" CPPFLAGS="$SCALAPACK_CPPFLAGS $LAPACK_CPPFLAGS $BLAS_CPPFLAGS $GA_MP_CPPFLAGS $CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: Attempting to locate SCALAPACK library" >&5 $as_echo "$as_me: Attempting to locate SCALAPACK library" >&6;} # First, check environment/command-line variables. # If failed, erase SCALAPACK_LIBS but maintain SCALAPACK_LDFLAGS and # SCALAPACK_CPPFLAGS. if test $ga_scalapack_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SCALAPACK with user-supplied flags" >&5 $as_echo_n "checking for SCALAPACK with user-supplied flags... " >&6; } LIBS="$SCALAPACK_LIBS $LAPACK_LIBS $BLAS_LIBS $GA_MP_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char pdgetrs (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char result = pdgetrs (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_scalapack_ok=yes else SCALAPACK_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none external PDGETRS CALL PDGETRS () end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_scalapack_ok=yes else SCALAPACK_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_scalapack_ok" >&5 $as_echo "$ga_scalapack_ok" >&6; } fi # Generic ScaLAPACK library? if test $ga_scalapack_ok = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SCALAPACK in generic library" >&5 $as_echo_n "checking for SCALAPACK in generic library... " >&6; } SCALAPACK_LIBS="-lscalapack" LIBS="$SCALAPACK_LIBS $LAPACK_LIBS $BLAS_LIBS $GA_MP_LIBS $LIBS" if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char pdgetrs (); #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { char result = pdgetrs (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ga_scalapack_ok=yes else SCALAPACK_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main implicit none external PDGETRS CALL PDGETRS () end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : ga_scalapack_ok=yes else SCALAPACK_LIBS= fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi LIBS="$ga_save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ga_scalapack_ok" >&5 $as_echo "$ga_scalapack_ok" >&6; } fi CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" if test "x$scalapack_size" = x8; then : $as_echo "#define SCALAPACK_I8 1" >>confdefs.h fi # test for pdsyevr which some implementations may not have if test $ga_scalapack_ok = yes; then : ga_save_LIBS="$LIBS" ga_save_LDFLAGS="$LDFLAGS" ga_save_CPPFLAGS="$CPPFLAGS" LIBS="$SCALAPACK_LIBS $LAPACK_LIBS $BLAS_LIBS $GA_MP_LIBS $LIBS" LDFLAGS="$SCALAPACK_LDFLAGS $LAPACK_LDFLAGS $BLAS_LDFLAGS $GA_MP_LDFLAGS $LDFLAGS" CPPFLAGS="$SCALAPACK_CPPFLAGS $LAPACK_CPPFLAGS $BLAS_CPPFLAGS $GA_MP_CPPFLAGS $CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether SCALAPACK implements pdsyevr" >&5 $as_echo_n "checking whether SCALAPACK implements pdsyevr... " >&6; } if test "x$enable_f77" = xno; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pdsyevr (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return pdsyevr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : have_pdsyevr=1; have_pdsyevr_msg=yes else have_pdsyevr=0; have_pdsyevr_msg=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu cat > conftest.$ac_ext <<_ACEOF program main call pdsyevr end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : have_pdsyevr=1; have_pdsyevr_msg=yes else have_pdsyevr=0; have_pdsyevr_msg=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_pdsyevr_msg" >&5 $as_echo "$have_pdsyevr_msg" >&6; } cat >>confdefs.h <<_ACEOF #define HAVE_PDSYEVR $have_pdsyevr _ACEOF LIBS="$ga_save_LIBS" LDFLAGS="$ga_save_LDFLAGS" CPPFLAGS="$ga_save_CPPFLAGS" fi # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test $ga_scalapack_ok = yes; then : have_scalapack=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ScaLAPACK library not found, interfaces won't be defined" >&5 $as_echo "$as_me: WARNING: ScaLAPACK library not found, interfaces won't be defined" >&2;} have_scalapack=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_SCALAPACK $have_scalapack _ACEOF if test $ga_scalapack_ok = yes; then HAVE_SCALAPACK_TRUE= HAVE_SCALAPACK_FALSE='#' else HAVE_SCALAPACK_TRUE='#' HAVE_SCALAPACK_FALSE= fi ############################################################################### # Libtool setup -- no compiler/linker tests after this ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Libtool setup" >&5 $as_echo "$as_me: Libtool setup" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} # temporarily restore unwrapped compilers # this works around a bug where libtool sadly relies on matching compiler # names in order to determine features (Fortran only, I think) # libtool doesn't recognize MPI compiler names, nor should it if test x$with_mpi_wrappers = xyes; then : ga_mpi_unwrap_push_save_CC="$CC" ga_mpi_unwrap_push_save_CXX="$CXX" ga_mpi_unwrap_push_save_F77="$F77" ga_mpi_unwrap_push_save_FC="$FC" if test "x$ga_cv_mpic_naked" != x; then : CC="$ga_cv_mpic_naked" fi if test "x$ga_cv_mpicxx_naked" != x; then : CXX="$ga_cv_mpicxx_naked" fi if test "x$ga_cv_mpif77_naked" != x; then : F77="$ga_cv_mpif77_naked" fi if test "x$ga_cv_mpifc_naked" != x; then : FC="$ga_cv_mpifc_naked" fi fi if test "x$AR" = x; then : case $ga_cv_target in #( NEC|NEC64) : AR=sxar ;; #( *) : ;; esac fi if test "x$RANLIB" = x; then : case $ga_cv_target in #( NEC|NEC64) : RANLIB=true ;; #( *) : ;; esac fi case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf # Set options # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=no fi enable_dlopen=no enable_win32_dll=no # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_direct_absolute_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no inherit_rpath_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds reload_flag_F77=$reload_flag reload_cmds_F77=$reload_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC compiler_F77=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` GCC=$G77 if test -n "$compiler"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } GCC_F77="$G77" LD_F77="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_F77='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_F77= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_F77=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_F77='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl_F77='-Xlinker ' if test -n "$lt_prog_compiler_pic_F77"; then lt_prog_compiler_pic_F77="-Xcompiler $lt_prog_compiler_pic_F77" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='--shared' lt_prog_compiler_static_F77='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl_F77='-Wl,-Wl,,' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-qpic' lt_prog_compiler_static_F77='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fPIC' lt_prog_compiler_static_F77='-static' ;; *Portland\ Group*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_F77='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; rdos*) lt_prog_compiler_static_F77='-non_shared' ;; solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl_F77='-Qoption ld ';; *) lt_prog_compiler_wl_F77='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; unicos*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_can_build_shared_F77=no ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_F77=$lt_prog_compiler_pic_F77 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_F77" >&5 $as_echo "$lt_cv_prog_compiler_pic_F77" >&6; } lt_prog_compiler_pic_F77=$lt_cv_prog_compiler_pic_F77 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... " >&6; } if ${lt_cv_prog_compiler_pic_works_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_F77=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_F77" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_F77" >&6; } if test x"$lt_cv_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_F77=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_F77=yes fi else lt_cv_prog_compiler_static_works_F77=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_F77" >&5 $as_echo "$lt_cv_prog_compiler_static_works_F77" >&6; } if test x"$lt_cv_prog_compiler_static_works_F77" = xyes; then : else lt_prog_compiler_static_F77= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_F77=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_F77" >&5 $as_echo "$lt_cv_prog_compiler_c_o_F77" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_F77+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_F77=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_F77" >&5 $as_echo "$lt_cv_prog_compiler_c_o_F77" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag_F77= always_export_symbols_F77=no archive_cmds_F77= archive_expsym_cmds_F77= compiler_needs_object_F77=no enable_shared_with_static_runtimes_F77=no export_dynamic_flag_spec_F77= export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic_F77=no hardcode_direct_F77=no hardcode_direct_absolute_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported inherit_rpath_F77=no link_all_deplibs_F77=unknown module_cmds_F77= module_expsym_cmds_F77= old_archive_from_new_cmds_F77= old_archive_from_expsyms_cmds_F77= thread_safe_flag_spec_F77= whole_archive_flag_spec_F77= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_F77='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_F77=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='' ;; m68k) archive_cmds_F77='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' export_dynamic_flag_spec_F77='${wl}--export-all-symbols' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_F77='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_F77=no fi ;; haiku*) archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_F77=yes ;; interix[3-9]*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec_F77= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_F77=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec_F77='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_F77=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_F77='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec_F77='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_F77='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs_F77=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = no; then runpath_var= hardcode_libdir_flag_spec_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_F77=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_F77=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_F77='' hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes file_list_spec_F77='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_F77=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_F77='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_F77=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_F77='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__F77+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__F77=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__F77 fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__F77+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__F77=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__F77"; then lt_cv_aix_libpath__F77="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__F77 fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_F77='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77='$convenience' fi archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='' ;; m68k) archive_cmds_F77='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes file_list_spec_F77='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, F77)='true' enable_shared_with_static_runtimes_F77=yes exclude_expsyms_F77='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds_F77='chmod 644 $oldlib' postlink_cmds_F77='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes_F77=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_F77=no hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_F77='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' compiler_needs_object_F77=yes else whole_archive_flag_spec_F77='' fi link_all_deplibs_F77=yes allow_undefined_flag_F77="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_F77="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_F77="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_F77="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_F77="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs_F77=no fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_F77='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds_F77='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: case $host_cpu in hppa*64*|ia64*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; *) hardcode_direct_F77=yes hardcode_direct_absolute_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat > conftest.$ac_ext <<_ACEOF subroutine foo end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc_F77='no' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: inherit_rpath_F77=yes link_all_deplibs_F77=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no hardcode_direct_absolute_F77=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs_F77=no fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc_F77='no' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_F77='-rpath $libdir' fi archive_cmds_need_lc_F77='no' hardcode_libdir_separator_F77=: ;; solaris*) no_undefined_flag_F77=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_F77='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds_F77='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec_F77='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs_F77=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_F77='${wl}-z,text' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_F77='${wl}-z,text' allow_undefined_flag_F77='${wl}-z,nodefs' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-R,$libdir' hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec_F77='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_F77" >&5 $as_echo "$ld_shlibs_F77" >&6; } test "$ld_shlibs_F77" = no && can_build_shared=no with_gnu_ld_F77=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_F77+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 pic_flag=$lt_prog_compiler_pic_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_F77=no else lt_cv_archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_F77" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_F77" >&6; } archive_cmds_need_lc_F77=$lt_cv_archive_cmds_need_lc_F77 ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_F77\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_F77\"" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_f77_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || test -n "$runpath_var_F77" || test "X$hardcode_automatic_F77" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_F77" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_F77" >&5 $as_echo "$hardcode_action_F77" >&6; } if test "$hardcode_action_F77" = relink || test "$inherit_rpath_F77" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: # and now that that's over, put the MPI compilers back # also, the above hack incorrectly sets the base compiler as the linker if test x$with_mpi_wrappers = xyes; then : CC="$ga_mpi_unwrap_push_save_CC" CXX="$ga_mpi_unwrap_push_save_CXX" F77="$ga_mpi_unwrap_push_save_F77" FC="$ga_mpi_unwrap_push_save_FC" compiler="$CC" LTCC="$CC" lt_save_CC="$CC" compiler_DEFAULT="$CC" compiler_CXX="$CXX" compiler_F77="$F77" fi ############################################################################### # The End ############################################################################### ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${BGL_TRUE}" && test -z "${BGL_FALSE}"; then as_fn_error $? "conditional \"BGL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BGP_TRUE}" && test -z "${BGP_FALSE}"; then as_fn_error $? "conditional \"BGP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CATAMOUNT_TRUE}" && test -z "${CATAMOUNT_FALSE}"; then as_fn_error $? "conditional \"CATAMOUNT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_SV1_TRUE}" && test -z "${CRAY_SV1_FALSE}"; then as_fn_error $? "conditional \"CRAY_SV1\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_SV2_TRUE}" && test -z "${CRAY_SV2_FALSE}"; then as_fn_error $? "conditional \"CRAY_SV2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_T3E_TRUE}" && test -z "${CRAY_T3E_FALSE}"; then as_fn_error $? "conditional \"CRAY_T3E\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_XT_TRUE}" && test -z "${CRAY_XT_FALSE}"; then as_fn_error $? "conditional \"CRAY_XT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRAY_YMP_TRUE}" && test -z "${CRAY_YMP_FALSE}"; then as_fn_error $? "conditional \"CRAY_YMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CYGNUS_TRUE}" && test -z "${CYGNUS_FALSE}"; then as_fn_error $? "conditional \"CYGNUS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CYGWIN_TRUE}" && test -z "${CYGWIN_FALSE}"; then as_fn_error $? "conditional \"CYGWIN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DECOSF_TRUE}" && test -z "${DECOSF_FALSE}"; then as_fn_error $? "conditional \"DECOSF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FUJITSU_VPP_TRUE}" && test -z "${FUJITSU_VPP_FALSE}"; then as_fn_error $? "conditional \"FUJITSU_VPP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HITACHI_TRUE}" && test -z "${HITACHI_FALSE}"; then as_fn_error $? "conditional \"HITACHI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HPUX_TRUE}" && test -z "${HPUX_FALSE}"; then as_fn_error $? "conditional \"HPUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${IBM_TRUE}" && test -z "${IBM_FALSE}"; then as_fn_error $? "conditional \"IBM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${INTERIX_TRUE}" && test -z "${INTERIX_FALSE}"; then as_fn_error $? "conditional \"INTERIX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LAPI_TRUE}" && test -z "${LAPI_FALSE}"; then as_fn_error $? "conditional \"LAPI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LINUX_TRUE}" && test -z "${LINUX_FALSE}"; then as_fn_error $? "conditional \"LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MACX_TRUE}" && test -z "${MACX_FALSE}"; then as_fn_error $? "conditional \"MACX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NEC_TRUE}" && test -z "${NEC_FALSE}"; then as_fn_error $? "conditional \"NEC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SGI_TRUE}" && test -z "${SGI_FALSE}"; then as_fn_error $? "conditional \"SGI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SGI_N32_TRUE}" && test -z "${SGI_N32_FALSE}"; then as_fn_error $? "conditional \"SGI_N32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SGITFP_TRUE}" && test -z "${SGITFP_FALSE}"; then as_fn_error $? "conditional \"SGITFP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SOLARIS_TRUE}" && test -z "${SOLARIS_FALSE}"; then as_fn_error $? "conditional \"SOLARIS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CROSS_COMPILING_TRUE}" && test -z "${CROSS_COMPILING_FALSE}"; then as_fn_error $? "conditional \"CROSS_COMPILING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TASCEL_STANDALONE_TRUE}" && test -z "${TASCEL_STANDALONE_FALSE}"; then as_fn_error $? "conditional \"TASCEL_STANDALONE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MSG_COMMS_MPI_TRUE}" && test -z "${MSG_COMMS_MPI_FALSE}"; then as_fn_error $? "conditional \"MSG_COMMS_MPI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MSG_COMMS_TCGMSG4_TRUE}" && test -z "${MSG_COMMS_TCGMSG4_FALSE}"; then as_fn_error $? "conditional \"MSG_COMMS_TCGMSG4\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MSG_COMMS_TCGMSG5_TRUE}" && test -z "${MSG_COMMS_TCGMSG5_FALSE}"; then as_fn_error $? "conditional \"MSG_COMMS_TCGMSG5\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NOFORT_TRUE}" && test -z "${NOFORT_FALSE}"; then as_fn_error $? "conditional \"NOFORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_F77_TRUE}" && test -z "${ENABLE_F77_FALSE}"; then as_fn_error $? "conditional \"ENABLE_F77\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_BLAS_TRUE}" && test -z "${HAVE_BLAS_FALSE}"; then as_fn_error $? "conditional \"HAVE_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LAPACK_TRUE}" && test -z "${HAVE_LAPACK_FALSE}"; then as_fn_error $? "conditional \"HAVE_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SCALAPACK_TRUE}" && test -z "${HAVE_SCALAPACK_FALSE}"; then as_fn_error $? "conditional \"HAVE_SCALAPACK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Task Scheduling Library (tascel) $as_me 0.0.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . Task Scheduling Library (tascel) home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ Task Scheduling Library (tascel) config.status 0.0.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' LD_F77='`$ECHO "$LD_F77" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_F77='`$ECHO "$reload_flag_F77" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_F77='`$ECHO "$reload_cmds_F77" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_F77='`$ECHO "$old_archive_cmds_F77" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' compiler_F77='`$ECHO "$compiler_F77" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' GCC_F77='`$ECHO "$GCC_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_F77='`$ECHO "$lt_prog_compiler_no_builtin_flag_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_F77='`$ECHO "$lt_prog_compiler_pic_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_F77='`$ECHO "$lt_prog_compiler_wl_F77" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_F77='`$ECHO "$lt_prog_compiler_static_F77" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_F77='`$ECHO "$lt_cv_prog_compiler_c_o_F77" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_F77='`$ECHO "$archive_cmds_need_lc_F77" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_F77='`$ECHO "$enable_shared_with_static_runtimes_F77" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_F77='`$ECHO "$export_dynamic_flag_spec_F77" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_F77='`$ECHO "$whole_archive_flag_spec_F77" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_F77='`$ECHO "$compiler_needs_object_F77" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_F77='`$ECHO "$old_archive_from_new_cmds_F77" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_F77='`$ECHO "$old_archive_from_expsyms_cmds_F77" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_F77='`$ECHO "$archive_cmds_F77" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_F77='`$ECHO "$archive_expsym_cmds_F77" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_F77='`$ECHO "$module_cmds_F77" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_F77='`$ECHO "$module_expsym_cmds_F77" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_F77='`$ECHO "$with_gnu_ld_F77" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_F77='`$ECHO "$allow_undefined_flag_F77" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_F77='`$ECHO "$no_undefined_flag_F77" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_F77='`$ECHO "$hardcode_libdir_flag_spec_F77" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_F77='`$ECHO "$hardcode_libdir_separator_F77" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_F77='`$ECHO "$hardcode_direct_F77" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_F77='`$ECHO "$hardcode_direct_absolute_F77" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_F77='`$ECHO "$hardcode_minus_L_F77" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_F77='`$ECHO "$hardcode_shlibpath_var_F77" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_F77='`$ECHO "$hardcode_automatic_F77" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_F77='`$ECHO "$inherit_rpath_F77" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_F77='`$ECHO "$link_all_deplibs_F77" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_F77='`$ECHO "$always_export_symbols_F77" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_F77='`$ECHO "$export_symbols_cmds_F77" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_F77='`$ECHO "$exclude_expsyms_F77" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_F77='`$ECHO "$include_expsyms_F77" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_F77='`$ECHO "$prelink_cmds_F77" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_F77='`$ECHO "$postlink_cmds_F77" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_F77='`$ECHO "$file_list_spec_F77" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_F77='`$ECHO "$hardcode_action_F77" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_F77='`$ECHO "$compiler_lib_search_dirs_F77" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_F77='`$ECHO "$predep_objects_F77" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_F77='`$ECHO "$postdep_objects_F77" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' predeps_F77='`$ECHO "$predeps_F77" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_F77='`$ECHO "$postdeps_F77" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_F77='`$ECHO "$compiler_lib_search_path_F77" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ LD_F77 \ reload_flag_CXX \ reload_flag_F77 \ compiler_CXX \ compiler_F77 \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_no_builtin_flag_F77 \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_static_CXX \ lt_prog_compiler_static_F77 \ lt_cv_prog_compiler_c_o_CXX \ lt_cv_prog_compiler_c_o_F77 \ export_dynamic_flag_spec_CXX \ export_dynamic_flag_spec_F77 \ whole_archive_flag_spec_CXX \ whole_archive_flag_spec_F77 \ compiler_needs_object_CXX \ compiler_needs_object_F77 \ with_gnu_ld_CXX \ with_gnu_ld_F77 \ allow_undefined_flag_CXX \ allow_undefined_flag_F77 \ no_undefined_flag_CXX \ no_undefined_flag_F77 \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_separator_CXX \ hardcode_libdir_separator_F77 \ exclude_expsyms_CXX \ exclude_expsyms_F77 \ include_expsyms_CXX \ include_expsyms_F77 \ file_list_spec_CXX \ file_list_spec_F77 \ compiler_lib_search_dirs_CXX \ compiler_lib_search_dirs_F77 \ predep_objects_CXX \ predep_objects_F77 \ postdep_objects_CXX \ postdep_objects_F77 \ predeps_CXX \ predeps_F77 \ postdeps_CXX \ postdeps_F77 \ compiler_lib_search_path_CXX \ compiler_lib_search_path_F77; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ reload_cmds_F77 \ old_archive_cmds_CXX \ old_archive_cmds_F77 \ old_archive_from_new_cmds_CXX \ old_archive_from_new_cmds_F77 \ old_archive_from_expsyms_cmds_CXX \ old_archive_from_expsyms_cmds_F77 \ archive_cmds_CXX \ archive_cmds_F77 \ archive_expsym_cmds_CXX \ archive_expsym_cmds_F77 \ module_cmds_CXX \ module_cmds_F77 \ module_expsym_cmds_CXX \ module_expsym_cmds_F77 \ export_symbols_cmds_CXX \ export_symbols_cmds_F77 \ prelink_cmds_CXX \ prelink_cmds_F77 \ postlink_cmds_CXX \ postlink_cmds_F77; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX F77 " # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: F77 # The linker used to build libraries. LD=$lt_LD_F77 # How to create reloadable object files. reload_flag=$lt_reload_flag_F77 reload_cmds=$lt_reload_cmds_F77 # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_F77 # A language specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU compiler? with_gcc=$GCC_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_F77 # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_F77 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_F77 # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_F77 # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_F77 # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_F77 # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_F77 # Specify filename containing input files. file_list_spec=$lt_file_list_spec_F77 # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_F77 # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_F77 postdep_objects=$lt_postdep_objects_F77 predeps=$lt_predeps_F77 postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # ### END LIBTOOL TAG CONFIG: F77 _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi # Report on what we found. { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: **************************************************************" >&5 $as_echo "$as_me: **************************************************************" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: $PACKAGE_NAME configured as follows:" >&5 $as_echo "$as_me: $PACKAGE_NAME configured as follows:" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: **************************************************************" >&5 $as_echo "$as_me: **************************************************************" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_MP_LIBS=$GA_MP_LIBS" >&5 $as_echo "$as_me: GA_MP_LIBS=$GA_MP_LIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_MP_LDFLAGS=$GA_MP_LDFLAGS" >&5 $as_echo "$as_me: GA_MP_LDFLAGS=$GA_MP_LDFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GA_MP_CPPFLAGS=$GA_MP_CPPFLAGS" >&5 $as_echo "$as_me: GA_MP_CPPFLAGS=$GA_MP_CPPFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: F77=$F77" >&5 $as_echo "$as_me: F77=$F77" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: FFLAGS=$FFLAGS" >&5 $as_echo "$as_me: FFLAGS=$FFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: FFLAG_INT=$FFLAG_INT" >&5 $as_echo "$as_me: FFLAG_INT=$FFLAG_INT" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CC=$CC" >&5 $as_echo "$as_me: CC=$CC" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CFLAGS=$CFLAGS" >&5 $as_echo "$as_me: CFLAGS=$CFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CXX=$CXX" >&5 $as_echo "$as_me: CXX=$CXX" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CXXFLAGS=$CXXFLAGS" >&5 $as_echo "$as_me: CXXFLAGS=$CXXFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CPP=$CPP" >&5 $as_echo "$as_me: CPP=$CPP" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: CPPFLAGS=$CPPFLAGS" >&5 $as_echo "$as_me: CPPFLAGS=$CPPFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: LDFLAGS=$LDFLAGS" >&5 $as_echo "$as_me: LDFLAGS=$LDFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: LIBS=$LIBS" >&5 $as_echo "$as_me: LIBS=$LIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: FLIBS=$FLIBS" >&5 $as_echo "$as_me: FLIBS=$FLIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: AR=$AR" >&5 $as_echo "$as_me: AR=$AR" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: AR_FLAGS=$AR_FLAGS" >&5 $as_echo "$as_me: AR_FLAGS=$AR_FLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: DEFS=$DEFS" >&5 $as_echo "$as_me: DEFS=$DEFS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: SHELL=$SHELL" >&5 $as_echo "$as_me: SHELL=$SHELL" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} ga-5-3/tascel/test/0000750005473000001440000000000012275260571013034 5ustar d3n000usersga-5-3/tascel/test/TestQueue.cc0000640005473000001440000000260211476032113015257 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #if SPLIT_QUEUE # include "UniformTaskCollectionSplit.h" #elif SHARED_QUEUE # include "UniformTaskCollectionShared.h" #else # error one of SPLIT_QUEUE or SHARED_QUEUE must be defined #endif using namespace std; using namespace tascel; #define MAX_TASKS 100 static int me; struct TskDscr { int v; TskDscr(int _v): v(_v) {} }; void fn(UniformTaskCollection *coll, void *desc, int dscr_len, void *pldata, int pldata_len, std::vector data_bufs) { TskDscr *dsc = (TskDscr*)desc; printf("%d: val=%d\n", me, dsc->v); if(dsc->v>0) { TskDscr dsc2(dsc->v-1); coll->addTask(&dsc2, sizeof(dsc2)); } } void the_test() { TslFuncRegTbl frt; TslFunc tf = frt.add(fn); TaskCollProps props; props.functions(tf,frt).taskSize(sizeof(TskDscr)).maxTasks(MAX_TASKS); #if SPLIT_QUEUE if(me==0) { printf("SplitQueue version\n"); } UniformTaskCollectionSplit utc(props); #elif SHARED_QUEUE if(me==0) { printf("SharedQueue version\n"); } UniformTaskCollectionShared utc(props); #endif if(me==0) { TskDscr dsc(10); utc.addTask(&dsc, sizeof(dsc)); } utc.process(); } int main(int argc, char *argv[]) { MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &me); GA_Initialize(); the_test(); GA_Terminate(); MPI_Finalize(); return 0; } ga-5-3/tascel/README0000640005473000001440000000546711473312715012747 0ustar d3n000usersTask Scheduling Library (tascel -- pronounced tassel) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DISCLAIMER ========== This material was prepared as an account of work sponsored by an agency of the United States Government. Neither the United States Government nor the United States Department of Energy, nor Battelle, nor any of their employees, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT, SOFTWARE, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS. ACKNOWLEDGMENT ============== This software and its documentation were produced with United States Government support under Contract Number DE-AC06-76RLO-1830 awarded by the United States Department of Energy. The United States Government retains a paid-up non-exclusive, irrevocable worldwide license to reproduce, prepare derivative works, perform publicly and display publicly by or for the US Government, including the right to distribute to other US Government contractors. FOR THE IMPATIENT ================= The command:: ./configure && make && make install should compile the static tascel library (libtascel.a) and install headers and libraries to /usr/local/include and /usr/local/lib, respectively. Please refer to the INSTALL file for generic build instructions. That is a good place to start if you are new to using "configure; make; make install" types of builds. Detailed instructions are covered later in this file. QUESTIONS/HELP/SUPPORT/BUG-REPORT ================================= email: hpctools@pnl.gov Please don't hesitate to send us an email. An archive of emails is available at: http://groups.google.com/group/hpctools WHERE IS THE DOCUMENTATION? =========================== The documentation, based on doxygen source code comments, is available in doc/ sub-directory. ABOUT THIS SOFTWARE =================== Tascel is a task scheduling library, compatible with MPI and ARMCI, that implements algorithms for dynamic load balancing. It builds upon the algorithms developed in the implementation of the SCIOTO library for dynamic load balancing. DIRECTORY STRUCTURE (ALPHABETICALLY) ==================================== - src (implementation of tascel algorithms) - examples (example programs using tascel) + scf (SCF algorithm implemented with tascel) - test (small test programs) - doc (documentation) - m4 (autoconf macros) - build-aux (autotools support scripts) HOW TO BUILD THE PACKAGE? ========================= Please refer to the INSTALL file for generic build instructions. That is a good place to start if you are new to using "configure; make; make install" types of builds. ga-5-3/tascel/config.h.in0000640005473000001440000001452712140267645014112 0ustar d3n000users/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 on BlueGene/L systems */ #undef BGL /* Define to 1 on BlueGene/P systems */ #undef BGP /* Define to sizeof(INTEGER) used to compile BLAS */ #undef BLAS_SIZE /* Define to 1 on Cray XT systems using Catamount */ #undef CATAMOUNT /* Define to 1 on Cray SV1 systems */ #undef CRAY_SV1 /* Define to 1 on Cray SV2 systems */ #undef CRAY_SV2 /* Define to 1 on Cray T3E systems */ #undef CRAY_T3E /* Define to 1 on Cray XT systems */ #undef CRAY_XT /* Define to 1 on Cray YMP systems */ #undef CRAY_YMP /* Define to 1 on Cygnus systems */ #undef CYGNUS /* Define to 1 on Cygwin systems */ #undef CYGWIN /* Define to 1 on DEC OSF */ #undef DECOSF /* Define to 1 if using Fortran */ #undef ENABLE_F77 /* whether the hidden string length comes after all other args */ #undef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS /* Define to dummy `main' function (if any) required to link to the Fortran libraries. */ #undef F77_DUMMY_MAIN /* F77 name mangling */ #undef F77_FUNC /* F77 name mangling */ #undef F77_FUNC_ /* Name of routine e.g. getarg, pxfgetarg */ #undef F77_GETARG /* Arguments to getarg e.g. i,s or i,s,l,ier */ #undef F77_GETARG_ARGS /* Declaration of routine e.g. external GETARG */ #undef F77_GETARG_DECL /* Name of routine e.g. iargc, ipxfargc */ #undef F77_IARGC /* Define if F77 and FC dummy `main' functions are identical. */ #undef FC_DUMMY_MAIN_EQ_F77 /* Define to 1 on fujitsu systems */ #undef FUJITSU_VPP /* Define to 1 on fujitsu systems */ #undef FUJITSU_VPP64 /* Module command when using Fortran 90 compiler e.g. use f90_unix */ #undef FXX_MODULE /* Define to 1 if using external BLAS library */ #undef HAVE_BLAS /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* set to 1 if we have the indicated package */ #undef HAVE_GA /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if using external LAPACK library */ #undef HAVE_LAPACK /* Define to 1 if the system has the type `long double'. */ #undef HAVE_LONG_DOUBLE /* Define to 1 if the system has the type `long long int'. */ #undef HAVE_LONG_LONG_INT /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* whether the ScaLAPACK library implements pdsyevr */ #undef HAVE_PDSYEVR /* Define to 1 if you have ScaLAPACK library. */ #undef HAVE_SCALAPACK /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if the system has the type `unsigned long long int'. */ #undef HAVE_UNSIGNED_LONG_LONG_INT /* Define to 1 on hitachi systems */ #undef HITACHI /* Define to 1 on HP-UX systems */ #undef HPUX /* Define to 1 on 64bit HP-UX systems */ #undef HPUX64 /* Define to 1 on IBM SP systems */ #undef IBM /* Define to 1 on 64bit IBM SP systems */ #undef IBM64 /* Define to 1 on ??? systems */ #undef INTERIX /* Define to 1 on IBM systems with LAPI */ #undef LAPI /* Define to 1 on 64bit IBM systems with LAPI */ #undef LAPI64 /* Define to 1 on generic Linux systems */ #undef LINUX /* Define to 1 on generic 64bit Linux systems */ #undef LINUX64 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define to 1 on OSX systems */ #undef MACX /* Define to 1 on 64bit OSX systems */ #undef MACX64 /* Use MPI for messaging */ #undef MSG_COMMS_MPI /* Use TCGMSG for messaging */ #undef MSG_COMMS_TCGMSG /* Use TCGMSG (ipcv4.0) for messaging */ #undef MSG_COMMS_TCGMSG4 /* Use TCGMSG (ipcv5.0) for messaing */ #undef MSG_COMMS_TCGMSG5 /* Define to 1 on NEC systems */ #undef NEC /* Define to 1 on 64bit NEC systems */ #undef NEC64 /* Define to 1 if not using Fortran */ #undef NOFORT /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* ScaLAPACK is using 8-byte integers */ #undef SCALAPACK_I8 /* Define to 1 on ??? systems */ #undef SGI /* Define to 1 on ??? systems */ #undef SGITFP /* Define to 1 on ??? systems */ #undef SGI_N32 /* The size of `char', as computed by sizeof. */ #undef SIZEOF_CHAR /* The size of `double', as computed by sizeof. */ #undef SIZEOF_DOUBLE /* The size of 'DOUBLE PRECISION' as computed by C's sizeof. */ #undef SIZEOF_F77_DOUBLE_PRECISION /* The size of 'INTEGER' as computed by C's sizeof. */ #undef SIZEOF_F77_INTEGER /* The size of 'REAL' as computed by C's sizeof. */ #undef SIZEOF_F77_REAL /* The size of `float', as computed by sizeof. */ #undef SIZEOF_FLOAT /* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of `long double', as computed by sizeof. */ #undef SIZEOF_LONG_DOUBLE /* The size of `long long', as computed by sizeof. */ #undef SIZEOF_LONG_LONG /* The size of `short', as computed by sizeof. */ #undef SIZEOF_SHORT /* The size of `void*', as computed by sizeof. */ #undef SIZEOF_VOIDP /* Define to 1 on Solaris systems */ #undef SOLARIS /* Define to 1 on 64bit Solaris systems */ #undef SOLARIS64 /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define if we want this system to use SYSV shared memory */ #undef SYSV /* deprecated, use MSG_COMMS_TCGMSG */ #undef TCGMSG /* Version number of package */ #undef VERSION /* Define to the type of a signed integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ #undef int64_t /* Define to `unsigned int' if does not define. */ #undef size_t ga-5-3/tascel/build-aux/0000750005473000001440000000000012275260573013751 5ustar d3n000usersga-5-3/tascel/build-aux/depcomp0000750005473000001440000005064312247162412015326 0ustar d3n000users#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-03-27.16; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # A tabulation character. tab=' ' # A newline character. nl=' ' if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form 'foo.o: dependent.h', # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ga-5-3/tascel/build-aux/ltmain.sh0000750005473000001440000105154412247166641015606 0ustar d3n000users # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mkl*|-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -mkl*|-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mkl*|-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 ga-5-3/tascel/build-aux/install-sh0000750005473000001440000003325611650323546015762 0ustar d3n000users#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ga-5-3/tascel/build-aux/missing0000750005473000001440000002415212247162412015344 0ustar d3n000users#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ga-5-3/tascel/build-aux/config.guess0000750005473000001440000012743212247162412016272 0ustar d3n000users#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ga-5-3/tascel/build-aux/config.sub0000750005473000001440000010517612247162412015736 0ustar d3n000users#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ga-5-3/tascel/configure.ac0000640005473000001440000002233611661512673014353 0ustar d3n000users# Process this file with autoconf to produce a configure script. ############################################################################### AC_PREREQ([2.67]) AC_INIT([Task Scheduling Library (tascel)], [0.0.1], [hpctools@pnl.gov], [tascel], [http://www.emsl.pnl.gov/docs/global/]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_HEADER([config.h]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR([src/Comm.h]) ############################################################################### # Must occur before automake init ############################################################################### GA_TARGET GA_CROSS_COMPILING ############################################################################### # Init automake ############################################################################### AM_INIT_AUTOMAKE([color-tests foreign parallel-tests silent-rules subdir-objects]) # Don't emit "rebuild rules" for configure, Makefile.ins, etc. AM_MAINTAINER_MODE ############################################################################### # Misc. information and package setup. ############################################################################### GA_WITH_HELP TASCEL_TOP_BUILDDIR="`pwd`" cd "$srcdir" TASCEL_TOP_SRCDIR="`pwd`" cd "$TASCEL_TOP_BUILDDIR" AS_IF([test "$TASCEL_TOP_BUILDDIR" != "TASCEL_TOP_SRCDIR"], [AC_MSG_NOTICE([Detected VPATH build])]) AC_CACHE_CHECK([whether tascel is built outside of GA], [tascel_cv_standalone], [AS_IF([test -f "$TASCEL_TOP_BUILDDIR/../armci/config.status"], [tascel_cv_standalone=no], [tascel_cv_standalone=yes])]) AM_CONDITIONAL([TASCEL_STANDALONE], [test x$tascel_cv_standalone = xyes]) # If MPI is desired we use the MPI compiler wrappers instead of the standard # compilers. GA_MSG_COMMS([no-tcgmsg]) # F77 and C++ are always enabled for tascel enable_f77=yes enable_cxx=yes GA_DISABLE_MPI_TESTS ############################################################################### # C compiler ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([C compiler]) AC_MSG_NOTICE tascel_save_CFLAGS="$CFLAGS" GA_PROG_MPICC CFLAGS="$tascel_save_CFLAGS" AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP], [GA_ARG_PARSE([with_mpi], [GA_MP_LIBS], [GA_MP_LDFLAGS], [GA_MP_CPPFLAGS])]) GA_MPICC_TEST_COMPILE # Hack to append .x to executables. AC_SUBST([EXEEXT], [.x$EXEEXT]) GA_TARGET64 # Checks for C header files. # Checks for C typedefs, structures, and compiler characteristics. # Checks for C library functions. ############################################################################### # C++ compiler ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([C++ compiler]) AC_MSG_NOTICE AC_LANG_PUSH([C++]) tascel_save_CXXFLAGS="$CXXFLAGS" GA_PROG_MPICXX CXXFLAGS="$tascel_save_CXXFLAGS" AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP]) GA_MPICXX_TEST # Checks for C++ header files. # Checks for C++ typedefs, structures, and compiler characteristics. AC_TYPE_INT64_T AC_TYPE_LONG_DOUBLE AC_TYPE_LONG_LONG_INT AC_TYPE_SIZE_T AC_TYPE_UNSIGNED_LONG_LONG_INT # Checks for C++ type sizes. AC_CHECK_SIZEOF([void*]) AC_CHECK_SIZEOF([char]) AC_CHECK_SIZEOF([short]) AC_CHECK_SIZEOF([int]) AC_CHECK_SIZEOF([long]) AS_IF([test x$ac_cv_type_long_long_int = xyes], [AC_CHECK_SIZEOF([long long])]) AC_CHECK_SIZEOF([float]) AC_CHECK_SIZEOF([double]) AS_IF([test x$ac_cv_type_long_double = xyes], [AC_CHECK_SIZEOF([long double])]) # Checks for C++ library functions. AC_LANG_POP([C++]) ############################################################################### # Fortran compiler ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([Fortran compiler]) AC_MSG_NOTICE AC_LANG_PUSH([Fortran 77]) tascel_save_FFLAGS="$FFLAGS" GA_PROG_MPIF77 FFLAGS="$tascel_save_FFLAGS" # If Fortran 77 compiler was not found, we disable support for it. AS_IF([test "x$F77" = x], [enable_f77=no]) # If Fortran 77 compiler does not work, we disable support for it. AC_LINK_IFELSE( [AC_LANG_PROGRAM([],[])], [], [AC_MSG_WARN([Fortran compiler does not work, disabling]) enable_f77=no F77=]) GA_F77_DISABLE_RESULTS # Perform Fortran 77 tests only if enabled. if test "x$enable_f77" = xyes; then : AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP]) GA_MPIF77_TEST_COMPILE GA_SUPPRESS_MESSAGE GA_F77_LIBRARY_LDFLAGS GA_F77_MAYBE_UNDERSCORING AC_F77_DUMMY_MAIN AC_F77_WRAPPERS GA_F77_CPP_SYMBOL GA_F77_FIXED GA_F77_MISMATCH_TYPE GA_F77_INTEGER_SIZE #Checks for Fortran typedefs, structures, and compiler characteristics. #Checks for Fortran type sizes. tascel_save_FFLAGS="$FFLAGS"; FFLAGS="$FFLAGS $FFLAG_INT" GA_F77_CHECK_SIZEOF([INTEGER], [$ga_cv_f77_integer_size]) FFLAGS="$tascel_save_FFLAGS" GA_F77_CHECK_SIZEOF([REAL], [4]) GA_F77_CHECK_SIZEOF([DOUBLE PRECISION], [8]) # The rest of the Fortran 77 to C compatibility checks. GA_F2C_NOMAIN GA_F2C_CMDARGS GA_F2C_HIDDEN_STRING_LENGTH_CONVENTION GA_F2C_MATCH_TYPES([INTEGER], [short, int, long, long long]) GA_F2C_MATCH_TYPES([REAL], [float, double, long double]) GA_F2C_MATCH_TYPES([DOUBLE PRECISION], [float, double, long double]) else # enable_f77=no version of AC_F77_WRAPPERS AC_DEFINE([F77_FUNC(name,NAME)], [name], [F77 name mangling]) AC_DEFINE([F77_FUNC_(name,NAME)],[name @%:@@%:@ _], [F77 name mangling]) # enable_f77=no version of GA_F77_CHECK_SIZEOF AC_DEFINE_UNQUOTED(AS_TR_CPP(sizeof_f77_INTEGER), [$ac_cv_sizeof_voidp], [The size of 'INTEGER' as computed by C's sizeof.]) AC_DEFINE_UNQUOTED(AS_TR_CPP(sizeof_f77_REAL), [4], [The size of 'REAL' as computed by C's sizeof.]) AC_DEFINE_UNQUOTED(AS_TR_CPP(sizeof_f77_DOUBLE PRECISION), [8], [The size of 'DOUBLE PRECISION' as computed by C's sizeof.]) # enable_f77=no version of GA_F2C_NOMAIN AC_SUBST([FLD_NOMAIN], []) # enable_f77=no version of GA_F2C_CMDARGS F2C_GETARG="F2C_GETARG" F2C_IARGC="F2C_IARGC" AC_SUBST([F2C_GETARG]) AC_SUBST([F2C_IARGC]) # enable_f77=no version of GA_F2C_HIDDEN_STRING_LENGTH_CONVENTION AC_DEFINE([F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS], [1], [whether the hidden string length comes after all other args]) # enable_f77=no version of GA_F2C_MATCH_TYPES AC_SUBST([F2C_INTEGER_C_TYPE], [long]) AC_SUBST([F2C_REAL_C_TYPE], [float]) AC_SUBST([F2C_DOUBLE_PRECISION_C_TYPE], [double]) fi AC_LANG_POP([Fortran 77]) ############################################################################### # Look for Global Arrays ############################################################################### GA_REQUIRE ############################################################################### # Checks for BLAS/LAPACK/SCALAPACK require both C and Fortran features to # have been detected. Further, they assume the current AC_LANG is C. # NOTE: We only look for BLAS and LAPACK because GA does. We will get linker # errors if GA was built with an external BLAS and LAPACK. ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([Checks for BLAS,LAPACK,ScaLAPACK]) AC_MSG_NOTICE GA_BLAS GA_LAPACK GA_SCALAPACK ############################################################################### # Libtool setup -- no compiler/linker tests after this ############################################################################### AC_MSG_NOTICE AC_MSG_NOTICE([Libtool setup]) AC_MSG_NOTICE # temporarily restore unwrapped compilers # this works around a bug where libtool sadly relies on matching compiler # names in order to determine features (Fortran only, I think) # libtool doesn't recognize MPI compiler names, nor should it AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP_PUSH]) GA_AR LT_INIT([disable-shared]) # and now that that's over, put the MPI compilers back # also, the above hack incorrectly sets the base compiler as the linker AS_IF([test x$with_mpi_wrappers = xyes], [GA_MPI_UNWRAP_POP compiler="$CC" LTCC="$CC" lt_save_CC="$CC" compiler_DEFAULT="$CC" compiler_CXX="$CXX" compiler_F77="$F77"]) ############################################################################### # The End ############################################################################### AC_CONFIG_FILES([Makefile]) AC_OUTPUT # Report on what we found. AC_MSG_NOTICE([]) AC_MSG_NOTICE([**************************************************************]) AC_MSG_NOTICE([ $PACKAGE_NAME configured as follows:]) AC_MSG_NOTICE([**************************************************************]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([ GA_MP_LIBS=$GA_MP_LIBS]) AC_MSG_NOTICE([ GA_MP_LDFLAGS=$GA_MP_LDFLAGS]) AC_MSG_NOTICE([GA_MP_CPPFLAGS=$GA_MP_CPPFLAGS]) AC_MSG_NOTICE([ F77=$F77]) AC_MSG_NOTICE([ FFLAGS=$FFLAGS]) AC_MSG_NOTICE([ FFLAG_INT=$FFLAG_INT]) AC_MSG_NOTICE([ CC=$CC]) AC_MSG_NOTICE([ CFLAGS=$CFLAGS]) AC_MSG_NOTICE([ CXX=$CXX]) AC_MSG_NOTICE([ CXXFLAGS=$CXXFLAGS]) AC_MSG_NOTICE([ CPP=$CPP]) AC_MSG_NOTICE([ CPPFLAGS=$CPPFLAGS]) AC_MSG_NOTICE([ LDFLAGS=$LDFLAGS]) AC_MSG_NOTICE([ LIBS=$LIBS]) AC_MSG_NOTICE([ FLIBS=$FLIBS]) AC_MSG_NOTICE([ AR=$AR]) AC_MSG_NOTICE([ AR_FLAGS=$AR_FLAGS]) AC_MSG_NOTICE([ DEFS=$DEFS]) AC_MSG_NOTICE([ SHELL=$SHELL]) AC_MSG_NOTICE([]) ga-5-3/tascel/Makefile.in0000640005473000001440000015771612140267645014144 0ustar d3n000users# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test/TestSharedQueue$(EXEEXT) \ test/TestSplitQueue$(EXEEXT) $(am__EXEEXT_1) @HAVE_BLAS_TRUE@am__append_1 = examples/scf/scf TESTS = $(am__EXEEXT_2) $(PARALLEL_TESTS) @HAVE_BLAS_TRUE@am__append_2 = examples/scf/scf$(EXEEXT) subdir = . DIST_COMMON = README $(am__configure_deps) $(include_HEADERS) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/config.h.in $(top_srcdir)/configure NEWS \ build-aux/config.guess build-aux/config.sub build-aux/depcomp \ build-aux/install-sh build-aux/ltmain.sh build-aux/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../m4/ga.m4 \ $(top_srcdir)/../m4/ga_ar.m4 \ $(top_srcdir)/../m4/ga_arg_parse.m4 \ $(top_srcdir)/../m4/ga_blas.m4 \ $(top_srcdir)/../m4/ga_check_package.m4 \ $(top_srcdir)/../m4/ga_cross_compiling.m4 \ $(top_srcdir)/../m4/ga_f2c_cmdargs.m4 \ $(top_srcdir)/../m4/ga_f2c_match_types.m4 \ $(top_srcdir)/../m4/ga_f2c_nomain.m4 \ $(top_srcdir)/../m4/ga_f2c_string.m4 \ $(top_srcdir)/../m4/ga_f77_check_sizeof.m4 \ $(top_srcdir)/../m4/ga_f77_cpp_symbols.m4 \ $(top_srcdir)/../m4/ga_f77_disable.m4 \ $(top_srcdir)/../m4/ga_f77_fixed.m4 \ $(top_srcdir)/../m4/ga_f77_integer_size.m4 \ $(top_srcdir)/../m4/ga_f77_library_ldflags.m4 \ $(top_srcdir)/../m4/ga_f77_mismatch_type.m4 \ $(top_srcdir)/../m4/ga_f77_underscore.m4 \ $(top_srcdir)/../m4/ga_lapack.m4 \ $(top_srcdir)/../m4/ga_mpi_test_disable.m4 \ $(top_srcdir)/../m4/ga_mpi_unwrap.m4 \ $(top_srcdir)/../m4/ga_mpicc.m4 \ $(top_srcdir)/../m4/ga_mpicc_test.m4 \ $(top_srcdir)/../m4/ga_mpicxx.m4 \ $(top_srcdir)/../m4/ga_mpicxx_test.m4 \ $(top_srcdir)/../m4/ga_mpif77.m4 \ $(top_srcdir)/../m4/ga_mpif77_test.m4 \ $(top_srcdir)/../m4/ga_msg_comms.m4 \ $(top_srcdir)/../m4/ga_scalapack.m4 \ $(top_srcdir)/../m4/ga_suppress_msg.m4 \ $(top_srcdir)/../m4/ga_target.m4 \ $(top_srcdir)/../m4/ga_with_help.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/lt_obsolete.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libtascel_la_LIBADD = am__dirstamp = $(am__leading_dot)dirstamp am_libtascel_la_OBJECTS = src/Comm.lo src/DenseArray.lo src/FuncReg.lo \ src/SharedQueue.lo src/Sleep.lo src/SplitQueue.lo \ src/SplitQueueOpt.lo src/StealingStats.lo src/TaskCollProps.lo \ src/TerminationDetector.lo src/UniformTaskCollection.lo \ src/UniformTaskCollectionShared.lo \ src/UniformTaskCollectionSplit.lo \ src/UniformTaskCollSplitData.lo nodist_libtascel_la_OBJECTS = libtascel_la_OBJECTS = $(am_libtascel_la_OBJECTS) \ $(nodist_libtascel_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent @HAVE_BLAS_TRUE@am__EXEEXT_1 = examples/scf/scf$(EXEEXT) am_examples_scf_scf_OBJECTS = examples/scf/input.$(OBJEXT) \ examples/scf/integ.$(OBJEXT) examples/scf/main.$(OBJEXT) \ examples/scf/output.$(OBJEXT) examples/scf/scf.$(OBJEXT) \ examples/scf/timer.$(OBJEXT) examples/scf/twoelcpp.$(OBJEXT) examples_scf_scf_OBJECTS = $(am_examples_scf_scf_OBJECTS) examples_scf_scf_LDADD = $(LDADD) am__DEPENDENCIES_1 = examples_scf_scf_DEPENDENCIES = libtascel.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_test_TestSharedQueue_OBJECTS = \ test/test_TestSharedQueue-TestQueue.$(OBJEXT) test_TestSharedQueue_OBJECTS = $(am_test_TestSharedQueue_OBJECTS) test_TestSharedQueue_LDADD = $(LDADD) test_TestSharedQueue_DEPENDENCIES = libtascel.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_test_TestSplitQueue_OBJECTS = \ test/test_TestSplitQueue-TestQueue.$(OBJEXT) test_TestSplitQueue_OBJECTS = $(am_test_TestSplitQueue_OBJECTS) test_TestSplitQueue_LDADD = $(LDADD) test_TestSplitQueue_DEPENDENCIES = libtascel.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f PPF77COMPILE = $(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS) LTPPF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(F77) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_FFLAGS) $(FFLAGS) AM_V_PPF77 = $(am__v_PPF77_@AM_V@) am__v_PPF77_ = $(am__v_PPF77_@AM_DEFAULT_V@) am__v_PPF77_0 = @echo " PPF77 " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ F77LD = $(F77) F77LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_F77LD = $(am__v_F77LD_@AM_V@) am__v_F77LD_ = $(am__v_F77LD_@AM_DEFAULT_V@) am__v_F77LD_0 = @echo " F77LD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libtascel_la_SOURCES) $(nodist_libtascel_la_SOURCES) \ $(examples_scf_scf_SOURCES) $(test_TestSharedQueue_SOURCES) \ $(test_TestSplitQueue_SOURCES) DIST_SOURCES = $(libtascel_la_SOURCES) $(examples_scf_scf_SOURCES) \ $(test_TestSharedQueue_SOURCES) $(test_TestSplitQueue_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(include_HEADERS) ETAGS = etags CTAGS = ctags # If stdout is a non-dumb tty, use colors. If test -t is not supported, # then this fails; a conservative approach. Of course do not redirect # stdout here, just stderr. am__tty_colors = \ red=; grn=; lgn=; blu=; std=; \ test "X$(AM_COLOR_TESTS)" != Xno \ && test "X$$TERM" != Xdumb \ && { test "X$(AM_COLOR_TESTS)" = Xalways || test -t 1 2>/dev/null; } \ && { \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ std=''; \ } # Restructured Text title and section. am__rst_title = sed 's/.*/ & /;h;s/./=/g;p;x;p;g;p;s/.*//' am__rst_section = sed 'p;s/./=/g;p;g' # Put stdin (possibly several lines separated by ". ") in a box. # Prefix each line by 'col' and terminate each with 'std', for coloring. # Multi line coloring is problematic with "less -R", so we really need # to color each line individually. am__text_box = $(AWK) '{ \ n = split($$0, lines, "\\. "); max = 0; \ for (i = 1; i <= n; ++i) \ if (max < length(lines[i])) \ max = length(lines[i]); \ for (i = 0; i < max; ++i) \ line = line "="; \ print col line std; \ for (i = 1; i <= n; ++i) \ if (lines[i]) \ print col lines[i] std; \ print col line std; \ }' # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log, and passes # TESTS_ENVIRONMENT. Save and restore TERM around use of # TESTS_ENVIRONMENT, in case that unsets it. am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ srcdir=$(srcdir); export srcdir; \ rm -f $@-t; \ am__trap='rm -f '\''$(abs_builddir)/$@-t'\''; (exit $$st); exit $$st'; \ trap "st=129; $$am__trap" 1; trap "st=130; $$am__trap" 2; \ trap "st=141; $$am__trap" 13; trap "st=143; $$am__trap" 15; \ am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`; \ test "x$$am__odir" = x. || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; __SAVED_TERM=$$TERM; \ $(TESTS_ENVIRONMENT) # To be appended to the command running the test. Handle the stdout # and stderr redirection, and catch the exit status. am__check_post = \ >$@-t 2>&1; \ estatus=$$?; \ if test -n '$(DISABLE_HARD_ERRORS)' \ && test $$estatus -eq 99; then \ estatus=1; \ fi; \ TERM=$$__SAVED_TERM; export TERM; \ $(am__tty_colors); \ xfailed=PASS; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ xfailed=XFAIL;; \ esac; \ case $$estatus.$$xfailed in \ 0.XFAIL) col=$$red; res=XPASS;; \ 0.*) col=$$grn; res=PASS ;; \ 77.*) col=$$blu; res=SKIP ;; \ 99.*) col=$$red; res=FAIL ;; \ *.XFAIL) col=$$lgn; res=XFAIL;; \ *.*) col=$$red; res=FAIL ;; \ esac; \ echo "$${col}$$res$${std}: $$f"; \ echo "$$res: $$f (exit: $$estatus)" | \ $(am__rst_section) >$@; \ cat $@-t >>$@; \ rm -f $@-t RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck check-html recheck-html TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html) am__EXEEXT_2 = TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) TEST_LOGS_TMP = $(TEST_LOGS:.log=.log-t) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AR_FLAGS = @AR_FLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLAS_CPPFLAGS = @BLAS_CPPFLAGS@ BLAS_LDFLAGS = @BLAS_LDFLAGS@ BLAS_LIBS = @BLAS_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F2C_DOUBLE_PRECISION_C_TYPE = @F2C_DOUBLE_PRECISION_C_TYPE@ F2C_GETARG = @F2C_GETARG@ F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS = @F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS@ F2C_IARGC = @F2C_IARGC@ F2C_INTEGER_C_TYPE = @F2C_INTEGER_C_TYPE@ F2C_REAL_C_TYPE = @F2C_REAL_C_TYPE@ F77 = @F77@ FFLAGS = @FFLAGS@ FFLAG_INT = @FFLAG_INT@ FGREP = @FGREP@ FLD_NOMAIN = @FLD_NOMAIN@ FLIBS = @FLIBS@ GA_CONFIG = @GA_CONFIG@ GA_CPPFLAGS = @GA_CPPFLAGS@ GA_FLIBS = @GA_FLIBS@ GA_LDFLAGS = @GA_LDFLAGS@ GA_LIBS = @GA_LIBS@ GA_MP_CPPFLAGS = @GA_MP_CPPFLAGS@ GA_MP_LDFLAGS = @GA_MP_LDFLAGS@ GA_MP_LIBS = @GA_MP_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LAPACK_CPPFLAGS = @LAPACK_CPPFLAGS@ LAPACK_LDFLAGS = @LAPACK_LDFLAGS@ LAPACK_LIBS = @LAPACK_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MPICC = @MPICC@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ SCALAPACK_CPPFLAGS = @SCALAPACK_CPPFLAGS@ SCALAPACK_LDFLAGS = @SCALAPACK_LDFLAGS@ SCALAPACK_LIBS = @SCALAPACK_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 -I ../m4 BUILT_SOURCES = config.fh EXTRA_DIST = examples/scf/README examples/scf/be.inpt \ examples/scf/be16.inpt AM_FFLAGS = $(FFLAG_INT) AM_CFLAGS = AM_CXXFLAGS = AM_CPPFLAGS = -I$(top_srcdir)/src $(GA_CPPFLAGS) $(LAPACK_CPPFLAGS) \ $(BLAS_CPPFLAGS) $(GA_MP_CPPFLAGS) LDADD = libtascel.la $(GA_LIBS) $(LAPACK_LIBS) $(BLAS_LIBS) \ $(GA_MP_LIBS) $(FLIBS) AM_LDFLAGS = $(GA_LDFLAGS) $(LAPACK_LDFLAGS) $(BLAS_LDFLAGS) \ $(GA_MP_LDFLAGS) include_HEADERS = src/AccessMode.h src/Comm.h src/Counter.h \ src/DataColl.h src/DenseArray.h src/FuncReg.h src/massert.h \ src/SharedQueue.h src/Sleep.h src/SplitQueue.h \ src/SplitQueueOpt.h src/StealingStats.h src/TaskCollProps.h \ src/Timer.h src/TerminationDetector.h \ src/UniformTaskCollection.h src/UniformTaskCollectionShared.h \ src/UniformTaskCollectionSplit.h \ src/UniformTaskCollSplitData.h lib_LTLIBRARIES = libtascel.la nodist_libtascel_la_SOURCES = config.fh libtascel_la_SOURCES = src/Comm.cc src/DenseArray.cc src/FuncReg.cc \ src/SharedQueue.cc src/Sleep.cc src/SplitQueue.cc \ src/SplitQueueOpt.cc src/StealingStats.cc src/TaskCollProps.cc \ src/TerminationDetector.cc src/UniformTaskCollection.cc \ src/UniformTaskCollectionShared.cc \ src/UniformTaskCollectionSplit.cc \ src/UniformTaskCollSplitData.cc test_TestSharedQueue_SOURCES = test/TestQueue.cc test_TestSharedQueue_CPPFLAGS = $(AM_CPPFLAGS) -DSHARED_QUEUE test_TestSplitQueue_SOURCES = test/TestQueue.cc test_TestSplitQueue_CPPFLAGS = $(AM_CPPFLAGS) -DSPLIT_QUEUE examples_scf_scf_SOURCES = examples/scf/cscf.h examples/scf/input.F \ examples/scf/integ.F examples/scf/main.c examples/scf/output.F \ examples/scf/scf.F examples/scf/timer.F \ examples/scf/twoelcpp.cc SERIAL_TESTS = PARALLEL_TESTS = test/TestSharedQueue$(EXEEXT) \ test/TestSplitQueue$(EXEEXT) $(am__append_2) @CROSS_COMPILING_FALSE@LOG_COMPILER = \ @CROSS_COMPILING_FALSE@maybe_mpiexec=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo ""; else if echo "$(MPIEXEC)" | $(GREP) "%NP%" > /dev/null; then echo "$(MPIEXEC)" | $(SED) 's/%NP%/$(NPROCS)/'; else echo "$(MPIEXEC)"; fi; fi`; $$maybe_mpiexec @CROSS_COMPILING_TRUE@LOG_COMPILER = \ @CROSS_COMPILING_TRUE@maybe_mpiexec=`if echo "$(SERIAL_TESTS)" | $(GREP) "$$p" > /dev/null; then echo "$(MPIEXEC)" | $(SED) 's/%NP%/1/'; else echo "$(MPIEXEC)" | $(SED) 's/%NP%/$(NPROCS)/'; fi`; $$maybe_mpiexec # support verbose/silent make rules for additional programs # sed AM_V_SED = $(am__v_SED_$(V)) am__v_SED_ = $(am__v_SED_$(AM_DEFAULT_VERBOSITY)) am__v_SED_0 = @echo " SED " $@; all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .F .c .cc .f .html .lo .log .o .obj .test .test$(EXEEXT) am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done src/$(am__dirstamp): @$(MKDIR_P) src @: > src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/$(DEPDIR) @: > src/$(DEPDIR)/$(am__dirstamp) src/Comm.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/DenseArray.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/FuncReg.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/SharedQueue.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/Sleep.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/SplitQueue.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/SplitQueueOpt.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/StealingStats.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/TaskCollProps.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/TerminationDetector.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/UniformTaskCollection.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/UniformTaskCollectionShared.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/UniformTaskCollectionSplit.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/UniformTaskCollSplitData.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) libtascel.la: $(libtascel_la_OBJECTS) $(libtascel_la_DEPENDENCIES) $(EXTRA_libtascel_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(libtascel_la_OBJECTS) $(libtascel_la_LIBADD) $(LIBS) clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list examples/scf/$(am__dirstamp): @$(MKDIR_P) examples/scf @: > examples/scf/$(am__dirstamp) examples/scf/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) examples/scf/$(DEPDIR) @: > examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/input.$(OBJEXT): examples/scf/$(am__dirstamp) \ examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/integ.$(OBJEXT): examples/scf/$(am__dirstamp) \ examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/main.$(OBJEXT): examples/scf/$(am__dirstamp) \ examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/output.$(OBJEXT): examples/scf/$(am__dirstamp) \ examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/scf.$(OBJEXT): examples/scf/$(am__dirstamp) \ examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/timer.$(OBJEXT): examples/scf/$(am__dirstamp) \ examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/twoelcpp.$(OBJEXT): examples/scf/$(am__dirstamp) \ examples/scf/$(DEPDIR)/$(am__dirstamp) examples/scf/scf$(EXEEXT): $(examples_scf_scf_OBJECTS) $(examples_scf_scf_DEPENDENCIES) $(EXTRA_examples_scf_scf_DEPENDENCIES) examples/scf/$(am__dirstamp) @rm -f examples/scf/scf$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(examples_scf_scf_OBJECTS) $(examples_scf_scf_LDADD) $(LIBS) test/$(am__dirstamp): @$(MKDIR_P) test @: > test/$(am__dirstamp) test/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) test/$(DEPDIR) @: > test/$(DEPDIR)/$(am__dirstamp) test/test_TestSharedQueue-TestQueue.$(OBJEXT): test/$(am__dirstamp) \ test/$(DEPDIR)/$(am__dirstamp) test/TestSharedQueue$(EXEEXT): $(test_TestSharedQueue_OBJECTS) $(test_TestSharedQueue_DEPENDENCIES) $(EXTRA_test_TestSharedQueue_DEPENDENCIES) test/$(am__dirstamp) @rm -f test/TestSharedQueue$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(test_TestSharedQueue_OBJECTS) $(test_TestSharedQueue_LDADD) $(LIBS) test/test_TestSplitQueue-TestQueue.$(OBJEXT): test/$(am__dirstamp) \ test/$(DEPDIR)/$(am__dirstamp) test/TestSplitQueue$(EXEEXT): $(test_TestSplitQueue_OBJECTS) $(test_TestSplitQueue_DEPENDENCIES) $(EXTRA_test_TestSplitQueue_DEPENDENCIES) test/$(am__dirstamp) @rm -f test/TestSplitQueue$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(test_TestSplitQueue_OBJECTS) $(test_TestSplitQueue_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f examples/scf/input.$(OBJEXT) -rm -f examples/scf/integ.$(OBJEXT) -rm -f examples/scf/main.$(OBJEXT) -rm -f examples/scf/output.$(OBJEXT) -rm -f examples/scf/scf.$(OBJEXT) -rm -f examples/scf/timer.$(OBJEXT) -rm -f examples/scf/twoelcpp.$(OBJEXT) -rm -f src/Comm.$(OBJEXT) -rm -f src/Comm.lo -rm -f src/DenseArray.$(OBJEXT) -rm -f src/DenseArray.lo -rm -f src/FuncReg.$(OBJEXT) -rm -f src/FuncReg.lo -rm -f src/SharedQueue.$(OBJEXT) -rm -f src/SharedQueue.lo -rm -f src/Sleep.$(OBJEXT) -rm -f src/Sleep.lo -rm -f src/SplitQueue.$(OBJEXT) -rm -f src/SplitQueue.lo -rm -f src/SplitQueueOpt.$(OBJEXT) -rm -f src/SplitQueueOpt.lo -rm -f src/StealingStats.$(OBJEXT) -rm -f src/StealingStats.lo -rm -f src/TaskCollProps.$(OBJEXT) -rm -f src/TaskCollProps.lo -rm -f src/TerminationDetector.$(OBJEXT) -rm -f src/TerminationDetector.lo -rm -f src/UniformTaskCollSplitData.$(OBJEXT) -rm -f src/UniformTaskCollSplitData.lo -rm -f src/UniformTaskCollection.$(OBJEXT) -rm -f src/UniformTaskCollection.lo -rm -f src/UniformTaskCollectionShared.$(OBJEXT) -rm -f src/UniformTaskCollectionShared.lo -rm -f src/UniformTaskCollectionSplit.$(OBJEXT) -rm -f src/UniformTaskCollectionSplit.lo -rm -f test/test_TestSharedQueue-TestQueue.$(OBJEXT) -rm -f test/test_TestSplitQueue-TestQueue.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@examples/scf/$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@examples/scf/$(DEPDIR)/twoelcpp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/Comm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/DenseArray.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/FuncReg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/SharedQueue.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/Sleep.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/SplitQueue.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/SplitQueueOpt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/StealingStats.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/TaskCollProps.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/TerminationDetector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/UniformTaskCollSplitData.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/UniformTaskCollection.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/UniformTaskCollectionShared.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/UniformTaskCollectionSplit.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/test_TestSharedQueue-TestQueue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/test_TestSplitQueue-TestQueue.Po@am__quote@ .F.o: $(AM_V_PPF77)$(PPF77COMPILE) -c -o $@ $< .F.obj: $(AM_V_PPF77)$(PPF77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .F.lo: $(AM_V_PPF77)$(LTPPF77COMPILE) -c -o $@ $< .F.f: $(F77COMPILE) -F $< .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< test/test_TestSharedQueue-TestQueue.o: test/TestQueue.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_TestSharedQueue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test/test_TestSharedQueue-TestQueue.o -MD -MP -MF test/$(DEPDIR)/test_TestSharedQueue-TestQueue.Tpo -c -o test/test_TestSharedQueue-TestQueue.o `test -f 'test/TestQueue.cc' || echo '$(srcdir)/'`test/TestQueue.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/test_TestSharedQueue-TestQueue.Tpo test/$(DEPDIR)/test_TestSharedQueue-TestQueue.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='test/TestQueue.cc' object='test/test_TestSharedQueue-TestQueue.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_TestSharedQueue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test/test_TestSharedQueue-TestQueue.o `test -f 'test/TestQueue.cc' || echo '$(srcdir)/'`test/TestQueue.cc test/test_TestSharedQueue-TestQueue.obj: test/TestQueue.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_TestSharedQueue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test/test_TestSharedQueue-TestQueue.obj -MD -MP -MF test/$(DEPDIR)/test_TestSharedQueue-TestQueue.Tpo -c -o test/test_TestSharedQueue-TestQueue.obj `if test -f 'test/TestQueue.cc'; then $(CYGPATH_W) 'test/TestQueue.cc'; else $(CYGPATH_W) '$(srcdir)/test/TestQueue.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/test_TestSharedQueue-TestQueue.Tpo test/$(DEPDIR)/test_TestSharedQueue-TestQueue.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='test/TestQueue.cc' object='test/test_TestSharedQueue-TestQueue.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_TestSharedQueue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test/test_TestSharedQueue-TestQueue.obj `if test -f 'test/TestQueue.cc'; then $(CYGPATH_W) 'test/TestQueue.cc'; else $(CYGPATH_W) '$(srcdir)/test/TestQueue.cc'; fi` test/test_TestSplitQueue-TestQueue.o: test/TestQueue.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_TestSplitQueue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test/test_TestSplitQueue-TestQueue.o -MD -MP -MF test/$(DEPDIR)/test_TestSplitQueue-TestQueue.Tpo -c -o test/test_TestSplitQueue-TestQueue.o `test -f 'test/TestQueue.cc' || echo '$(srcdir)/'`test/TestQueue.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/test_TestSplitQueue-TestQueue.Tpo test/$(DEPDIR)/test_TestSplitQueue-TestQueue.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='test/TestQueue.cc' object='test/test_TestSplitQueue-TestQueue.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_TestSplitQueue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test/test_TestSplitQueue-TestQueue.o `test -f 'test/TestQueue.cc' || echo '$(srcdir)/'`test/TestQueue.cc test/test_TestSplitQueue-TestQueue.obj: test/TestQueue.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_TestSplitQueue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test/test_TestSplitQueue-TestQueue.obj -MD -MP -MF test/$(DEPDIR)/test_TestSplitQueue-TestQueue.Tpo -c -o test/test_TestSplitQueue-TestQueue.obj `if test -f 'test/TestQueue.cc'; then $(CYGPATH_W) 'test/TestQueue.cc'; else $(CYGPATH_W) '$(srcdir)/test/TestQueue.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/test_TestSplitQueue-TestQueue.Tpo test/$(DEPDIR)/test_TestSplitQueue-TestQueue.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='test/TestQueue.cc' object='test/test_TestSplitQueue-TestQueue.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_TestSplitQueue_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test/test_TestSplitQueue-TestQueue.obj `if test -f 'test/TestQueue.cc'; then $(CYGPATH_W) 'test/TestQueue.cc'; else $(CYGPATH_W) '$(srcdir)/test/TestQueue.cc'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf examples/scf/.libs examples/scf/_libs -rm -rf src/.libs src/_libs -rm -rf test/.libs test/_libs distclean-libtool: -rm -f libtool config.lt install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__sh_e_setup); \ list='$(TEST_LOGS)'; \ results=`for f in $$list; do \ test -r $$f && read line < $$f && echo "$$line" \ || echo FAIL; \ done`; \ all=`echo "$$results" | sed '/^$$/d' | wc -l | sed -e 's/^[ ]*//'`; \ fail=`echo "$$results" | grep -c '^FAIL'`; \ pass=`echo "$$results" | grep -c '^PASS'`; \ skip=`echo "$$results" | grep -c '^SKIP'`; \ xfail=`echo "$$results" | grep -c '^XFAIL'`; \ xpass=`echo "$$results" | grep -c '^XPASS'`; \ failures=`expr $$fail + $$xpass`; \ all=`expr $$all - $$skip`; \ if test "$$all" -eq 1; then tests=test; All=; \ else tests=tests; All="All "; fi; \ case fail=$$fail:xpass=$$xpass:xfail=$$xfail in \ fail=0:xpass=0:xfail=0) \ msg="$$All$$all $$tests passed. "; \ exit=true;; \ fail=0:xpass=0:xfail=*) \ msg="$$All$$all $$tests behaved as expected"; \ if test "$$xfail" -eq 1; then xfailures=failure; \ else xfailures=failures; fi; \ msg="$$msg ($$xfail expected $$xfailures). "; \ exit=true;; \ fail=*:xpass=0:xfail=*) \ msg="$$fail of $$all $$tests failed. "; \ exit=false;; \ fail=*:xpass=*:xfail=*) \ msg="$$failures of $$all $$tests did not behave as expected"; \ if test "$$xpass" -eq 1; then xpasses=pass; \ else xpasses=passes; fi; \ msg="$$msg ($$xpass unexpected $$xpasses). "; \ exit=false;; \ *) \ echo >&2 "incorrect case"; exit 4;; \ esac; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ msg="$$msg($$skip test was not run). "; \ else \ msg="$$msg($$skip tests were not run). "; \ fi; \ fi; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ echo "$$msg"; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for f in $$list; do \ test -r $$f && read line < $$f || line=; \ case $$line in \ PASS:*|XFAIL:*);; \ *) echo; cat $$f;; \ esac; \ done; \ } >$(TEST_SUITE_LOG).tmp; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if test "$$failures" -ne 0; then \ msg="$${msg}See $(subdir)/$(TEST_SUITE_LOG). "; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ msg="$${msg}Please report to $(PACKAGE_BUGREPORT). "; \ fi; \ fi; \ test x"$$VERBOSE" = x || $$exit || cat $(TEST_SUITE_LOG); \ $(am__tty_colors); \ if $$exit; then \ col="$$grn"; \ else \ col="$$red"; \ fi; \ echo "$$msg" | $(am__text_box) "col=$$col" "std=$$std"; \ $$exit || exit 1 check-TESTS recheck: @if test $@ != recheck; then \ list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list; \ fi @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @list='' list2='$(TEST_LOGS)'; for f in $$list2; do \ test .log = $$f && continue; \ if test $@ = recheck; then \ test -f $$f || continue; \ if test -r $$f && read line < $$f; then \ case $$line in FAIL*|XPASS*) : ;; *) continue;; esac; \ fi; \ fi; \ if test -z "$$list"; then list=$$f; else list="$$list $$f"; fi; \ done; \ if test $@ = recheck && test -n "$$list"; then \ $(am__make_dryrun) || rm -f $$list || exit 1; \ fi; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$list" recheck: $(check_PROGRAMS) am--mostlyclean-test-html: list='$(TEST_LOGS:.log=.html)'; test -z "$$list" || rm -f $$list rm -f $(TEST_SUITE_HTML) .log.html: @list='$(RST2HTML) $$RST2HTML rst2html rst2html.py'; \ for r2h in $$list; do \ if ($$r2h --version) >/dev/null 2>&1; then \ R2H=$$r2h; \ fi; \ done; \ if test -z "$$R2H"; then \ echo >&2 "cannot find rst2html, cannot create $@"; \ exit 2; \ fi; \ $$R2H $< >$@.tmp @mv $@.tmp $@ # Be sure to run check first, and then to convert the result. # Beware of concurrent executions. Run "check" not "check-TESTS", as # check-SCRIPTS and other dependencies are rebuilt by the former only. # And expect check to fail. check-html recheck-html: @target=`echo $@ | sed 's/-html$$//'`; \ rv=0; $(MAKE) $(AM_MAKEFLAGS) $$target || rv=$$?; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML) TEST_LOGS= || exit 4; \ exit $$rv test/TestSharedQueue.log: test/TestSharedQueue$(EXEEXT) @p='test/TestSharedQueue$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) test/TestSplitQueue.log: test/TestSplitQueue$(EXEEXT) @p='test/TestSplitQueue$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) examples/scf/scf.log: examples/scf/scf$(EXEEXT) @p='examples/scf/scf$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) .test.log: @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) config.h installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS_TMP)" || rm -f $(TEST_LOGS_TMP) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f examples/scf/$(DEPDIR)/$(am__dirstamp) -rm -f examples/scf/$(am__dirstamp) -rm -f src/$(DEPDIR)/$(am__dirstamp) -rm -f src/$(am__dirstamp) -rm -f test/$(DEPDIR)/$(am__dirstamp) -rm -f test/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf examples/scf/$(DEPDIR) src/$(DEPDIR) test/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf examples/scf/$(DEPDIR) src/$(DEPDIR) test/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: am--mostlyclean-test-html mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES .MAKE: all check check-am check-html install install-am install-strip \ recheck-html .PHONY: CTAGS GTAGS all all-am am--mostlyclean-test-html am--refresh \ check check-TESTS check-am check-html clean \ clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool clean-local ctags dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-lzma dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-includeHEADERS install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck recheck-html tags uninstall uninstall-am \ uninstall-includeHEADERS uninstall-libLTLIBRARIES clean-local: clean-config config.fh: $(top_build_prefix)config.h @-rm -f config.fh $(AM_V_SED) \ $(SED) "/^#/!d" $(top_build_prefix)config.h > config.fh clean-config: -rm -f config.fh .PHONY: checkprogs checkprogs: $(check_PROGRAMS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ga-5-3/tascel/NEWS0000640005473000001440000000021011467703133012544 0ustar d3n000users0.1 November 2010 * initial implementation of dynamic load balancing capability * both API and implementation not stable yet ga-5-3/tascel/src/0000750005473000001440000000000012275260572012645 5ustar d3n000usersga-5-3/tascel/src/SharedQueue.h0000640005473000001440000000645211467703133015236 0ustar d3n000users#ifndef __tascel_SharedQueue_h__ #define __tascel_SharedQueue_h__ #include "TerminationDetector.h" namespace tascel { /** * A set of task queues shared among processes. * * Each process has a local queue with a maximum number of possible tasks. * A process can steal tasks from any other process's queue and have * tasks stolen from its own queue. * * This implementation forces the entire queue on a given proc to be locked * during any modification by itself or by any other proc. */ class SharedQueue { private: /** * The local queue state which other procs can modify. */ struct sq_state_t { int dirty; /**< whether a steal has occurred */ int head; /**< the head of the queue */ int tail; /**< the tail of the queue */ int size; /**< the number of tasks in the queue */ }; const int max_ntsks; /**< max number of tasks allowed in queue */ const int tsk_size; /**< size of a single task */ char **q; /**< addresses of queue data on all procs */ sq_state_t **sq_state; /**< addresses of queue state on all procs */ int *head; /**< pointer to this procs head state */ int *tail; /**< pointer to this procs tail state */ int *size; /**< pointer to this procs size state */ int *dirty; /**< pointer to this procs dirty state */ TerminationDetector td; /**< the TerminationDetector */ public: /** * Constructs the SharedQueue instance. * * @param[in] tsk_size size of a single task * @param[in] max_ntsks max number of tasks in a queue * * @pre tsk_size must be the same value on all procs * @pre max_ntsks must be the same value on all procs */ SharedQueue(int tsk_size, int max_ntsks); /** * Destroys the SharedQueue instance. */ ~SharedQueue(); /** * Returns true if the local queue is empty. * * @return true if the local queue is empty. */ bool empty() const; /** * Retrieves a task from the local queue. * * @param[out] dscr the retrieved task * @param[in] dlen size of the retrieved task * * @pre dscr is not NULL * @pre dlen == tsk_size * * @return true if task was successfully retrieved */ bool getTask(void *dscr, int dlen); /** * Adds a task to the local queue. * * @param[in] dscr the task to add * @param[in] dlen size of the added task * * @pre dscr is not NULL * @pre dlen == tsk_size * * @return true if task was successfully added */ void addTask(void *dscr, int dlen); /** * Steals one or more tasks from the given proc. * * @param[in] proc to steal from */ bool steal(int proc); /** * Returns true if all of the tasks have been processed. * * @return true if all of the tasks have been processed. */ bool hasTerminated(); /** * Runs the termination detector. */ void td_progress(); }; /* SharedQueue */ }; /* tascel */ #endif /*__tascel_SharedQueue_h__*/ ga-5-3/tascel/src/Counter.h0000640005473000001440000000107111556622013014426 0ustar d3n000users#ifndef __tascel_Counter_h__ #define __tascel_Counter_h__ namespace tascel { class Counter { private: int num; /**< Current value of counter */ public: /** * Constructor */ Counter(): num(0) {} /** * Increment counter by argument * * @param[in] n Value to increment counter by */ inline void inc(int n=1) { num += n; } /** * Returns current count */ inline int count() const { return num; } }; /* Counter */ }; /* tascel */ #endif /* __tascel_Counter_h__ */ ga-5-3/tascel/src/SplitQueueOpt.cc0000640005473000001440000002062111467703133015736 0ustar d3n000users/** @file SplitQueueOpt.cc * This is an optimized implementation of SplitQueue, based on the * algorithm presented in: * "Scalable work stealing", SC'09. * * This to be done in terms of further functionality and performance: * - Translate mutexes into non-blocking locks based on ARMCI_Rmw * - Back-off, etc. to handle contention in steals * - Steal, release, and acquire more than one task. This also needs * to handle wrap-around in the case of steal. * - In general, avoid locks where possible (say in releaseToShared) */ #if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #include "Comm.h" #include "massert.h" #include "SplitQueueOpt.h" #include using namespace std; using namespace tascel; using namespace tascel::comm; static const int token=1, koten=0; static const int trylock_max_attempts = 10; bool SplitQueueOpt::lock(int proc, int num_tries) { // ARMCI_Lock(0, proc); int val = koten, dummy=-1; int trial=0; while(val != token && trial!=num_tries) { assert(val == koten); // should be token or koten ARMCI_Rmw(ARMCI_SWAP, &val, locks[proc], dummy, proc); trial += 1; } if(val == token) { return true; } return false; } void SplitQueueOpt::unlock(int proc) { // ARMCI_Unlock(0, proc); int val = token, dummy=-1; ARMCI_Rmw(ARMCI_SWAP, &val, locks[proc], dummy, proc); massert(val == koten); return; error: throw TSL_ERR; } SplitQueueOpt::SplitQueueOpt(int _tsk_size, int _max_ntsks) : max_ntsks(_max_ntsks) , tsk_size(_tsk_size) , q(NULL) , sq_state(NULL) , head(NULL) , size_local(NULL) , vtail1(NULL) , tail(NULL) , vtail2(NULL) , size_shared(NULL) , split(NULL) , dirty(NULL) , size_local_val(0) , head_val(0) , vtail1_val(0) , td() { q = new char *[nproc()]; massert(q); ARMCI_Malloc((void **)q, max_ntsks * tsk_size); massertl(q[me()], error1); ARMCI_Create_mutexes(1); sq_state = new sq_state_t*[nproc()]; massertl(sq_state, error1); ARMCI_Malloc((void **)sq_state, nproc()*sizeof(sq_state_t)); massertl(sq_state[me()], error2); locks = new int *[nproc()]; massertl(locks, error3); ARMCI_Malloc((void **)locks, sizeof(int)); massertl(locks[me()], error4); tail = &sq_state[me()]->ps.tail; split = &sq_state[me()]->ps.split; size_shared = &sq_state[me()]->ps.size_shared; dirty = &sq_state[me()]->ps.dirty; vtail2 = &sq_state[me()]->vtail2; head = &head_val; size_local = &size_local_val; vtail1 = &vtail1_val; *head = *tail = *vtail1 = *vtail2 = *split = *size_local = *size_shared = *dirty = 0; *locks[me()] = token; ARMCI_Barrier(); //for the mem fence. we don't want steals before this is init-ed // printf("(cons) %d: *head=%p *tail=%p *size=%p\n", me(), head, tail, size); return; error4: printf("Error4 in SplitQueueOpt constructor\n"); delete [] locks; error3: printf("Error3 in SplitQueueOpt constructor\n"); ARMCI_Free(sq_state[me()]); error2: printf("Error2 in SplitQueueOpt constructor\n"); delete [] sq_state; error1: printf("Error1 in SplitQueueOpt constructor\n"); delete [] q; error: printf("Error in SplitQueueOpt constructor\n"); /*FIXME: cannot throw exception in constructor!*/ } SplitQueueOpt::~SplitQueueOpt() { barrier(); assert(*locks[me()] == token); //SK: the token should be released ARMCI_Free(locks[me()]); ARMCI_Free(sq_state[me()]); ARMCI_Destroy_mutexes(); ARMCI_Free(q[me()]); delete [] locks; delete [] sq_state; delete [] q; } bool SplitQueueOpt::empty() const { /*SK: speculative implementation. It could become empty while this operation is ongoing. However, the converse is not true, since only the host process call empty() or can add tasks (thus incrementing size) */ massert(*size_local >= 0 && *size_shared >= 0); if (*size_local == 0 && *size_shared == 0) { massert(*split == *head); massert(*split == *tail); } return (*size_local == 0 && *size_shared == 0); error: throw TSL_ERR; } bool SplitQueueOpt::full() const { if (*head == *tail && (*split != *head || *split != *tail)) { return true; } return false; } bool SplitQueueOpt::spaceAvailable() const { if (*head == *vtail1 && (*split != *head || *split != *vtail1)) { return false; } return true; } /** * If local portion has tasks, get one. If not, lock and try to find * work in the shared portion. If no work in shared portion as well, * return empty handed. */ bool SplitQueueOpt::getTask(void *dscr, int dlen) { massert(dscr); massert(dlen == tsk_size); if (*size_local > 0) { if (*size_shared == 0) { releaseToShared(*size_local / 2); } *head = (*head - 1 + max_ntsks) % max_ntsks; memcpy(dscr, &q[me()][*head*tsk_size], tsk_size); *size_local -= 1; return true; } if (acquireFromShared((*size_shared + 1) / 2)) { //SK: note that this breaks with a push-based model. We assert //that when this condition is true, we will not recurse to get //work from shared again. massert(getTask(dscr, dlen) == true); return true; } return false; error: throw TSL_ERR; } int SplitQueueOpt::acquireFromShared(int _nacquire) { int nacquire; if(_nacquire==0) return 0; lock(me()); //SK: is it needed? if (*size_shared == 0) { unlock(me()); return 0; } massert(*split != *tail); massert(*head == *split); nacquire = min(_nacquire, *size_shared); *split = (*split - nacquire + max_ntsks) % max_ntsks; massert((*split <= *head) || (*split > *tail)); *size_shared -= nacquire; *size_local += nacquire; unlock(me()); return nacquire; error: throw TSL_ERR; } void SplitQueueOpt::releaseToShared(int ndonate) { massert(ndonate <= *size_local); if(ndonate==0) return; lock(me()); *split = (*split + ndonate) % max_ntsks; massert((*split <= *head) || (*split > *tail)); //mem-fence *size_shared += ndonate; *size_local -= ndonate; unlock(me()); return; error: throw TSL_ERR; } void SplitQueueOpt::updateVtail1() { if (*vtail2 == *tail) { *vtail1 = *tail; } } /** * Check is there is space. If not, wait. If there is, add at head. */ void SplitQueueOpt::addTask(void *dscr, int dlen) { massert(dscr); massert(dlen == tsk_size); while (!spaceAvailable()) { updateVtail1(); } memcpy(&q[me()][*head*tsk_size], dscr, tsk_size); *head = (*head + 1) % max_ntsks; *size_local += 1; if (*size_shared == 0) { releaseToShared(*size_local / 2); } return; error: throw TSL_ERR; } bool SplitQueueOpt::steal(int proc) { char *buf; int newtail, nshift, oldtail, nsteal; massert(*size_local == 0); massert(!full()); //FIXME: might need a lock+unlock to ensure both size and dirty are //updated atomically by any thief (say through RDMA) td.progress(*dirty == 0); *dirty = 0; if (td.hasTerminated()) { return false; } if(!lock(proc, trylock_max_attempts)) { return false; } sq_state_t sq; ARMCI_Get(sq_state[proc], &sq, sizeof(sq), proc); // printf("%d: Locked %d for steal. size=%d\n", me(), proc, sq.size); if (sq.ps.size_shared == 0) { //nothing to steal unlock(proc); return false; } //massert(sq.ps.tail < max_ntsks); nsteal = min((sq.ps.size_shared + 1) / 2, max_ntsks - sq.ps.tail); sq.ps.size_shared = sq.ps.size_shared - nsteal; sq.ps.dirty = 1; //mark dirty for termination detection newtail = (sq.ps.tail + nsteal) % max_ntsks; oldtail = sq.ps.tail; nshift = newtail - oldtail; massert(nshift > 0 || nshift == -oldtail); sq.ps.tail = newtail; ARMCI_Put(&sq.ps, sq_state[proc], sizeof(sq), proc); //FIXME: does unlock imply an ARMCI_Fence. If not, add one unlock(proc); buf = new char[tsk_size*nsteal]; massert(buf); ARMCI_Get(&q[proc][oldtail*tsk_size], buf, tsk_size * nsteal, proc); // int dummy; // ARMCI_Rmw(ARMCI_FETCH_AND_ADD, &dummy, &sq_state[proc]->vtail2, nshift, proc); int scale = 1; int src_stride[1]= {0}, dst_stride[1]= {0}; /*unusued since stride_levels==0*/ int *src = &nshift, *dst = &sq_state[proc]->vtail2; int count[1] = { sizeof(int) }; ARMCI_AccS(ARMCI_ACC_INT, &scale, src, src_stride, dst, dst_stride, count, 0, proc); for (int i = 0; i < nsteal; i++) { addTask(buf + i * tsk_size, tsk_size); } delete [] buf; return true; error: throw TSL_ERR; } bool SplitQueueOpt::hasTerminated() { return td.hasTerminated(); } void SplitQueueOpt::td_progress() { td.progress(*dirty == 0); *dirty = 0; } ga-5-3/tascel/src/DataColl.h0000640005473000001440000001155111500266271014475 0ustar d3n000users#ifndef __DataColl_h__ #define __DataColl_h__ namespace tascel { /** * Abstract data collection. * * The tasking library deals with data collections that inherit this * base class (a.k.a. implement this interface). The data structure * is treated as a collection of blocks with opaque indices. */ class DataColl { public: /** * Size of a data block. * * Return the size (in bytes) of data block referred to by the * index. * @param[in] idx Pointer to index * @param[in] idxlen Length of index (in bytes) * @return Size of data block (in bytes) */ virtual int getSize(const void *idx, int idxlen) = 0; /** * Process holding the data block. * * This is a hint for locality optimizations. The return value does * not affect correctmess. * @param[in] idx Pointer to index * @param[in] idxlen Length of index (in bytes) * @return Process holding the data block */ virtual int getProc(const void *idx, int idxlen) = 0; /** * Get the data block. * * Gets the data block pointed to by the index. The buffer is * expected to be of length sufficient to fit the block. * @param[in] idx Pointer to index * @param[in] idxlen Length of index (in bytes) * @param[out] buf Pointer to place the data * @param[in] buflen Length of buffer * @return none */ virtual void get(const void *idx, int idxlen, void *buf, int buflen) = 0; /** * Put the data block. * * Puts the data block in buffer at location pointed to by the * index. The buffer is expected to be of length sufficient to fit * the block. * @param[in] idx Pointer to index * @param[in] idxlen Length of index (in bytes) * @param[in] buf Pointer to place the data * @param[in] buflen Length of buffer * @return none */ virtual void put(const void *idx, int idxlen, const void *buf, int buflen) = 0; /** * Add the data block. * * Adds the data block in buffer at location pointed to by the * index. Adds are atomic w.r.t. other add operations. The buffer * is expected to be of length sufficient to fit the block. * @param[in] idx Pointer to index * @param[in] idxlen Length of index (in bytes) * @param[in] buf Pointer to place the data * @param[in] buflen Length of buffer * @return none */ virtual void add(const void *idx, int idxlen, const void *buf, int buflen) = 0; /** * Opaque non-blocking wait handle. */ typedef void *nbh_t; /** * Get the data block. * * Gets the data block pointed to by the index. The buffer is * expected to be of length sufficient to fit the block. * @param[in] idx Pointer to index * @param[in] idxlen Length of index (in bytes) * @param[out] buf Pointer to place the data * @param[in] buflen Length of buffer * @param[inout] nbh A specific handle to be used (if possible). * @return Handle to initiated communication. */ virtual nbh_t nbGet(const void *idx, int idxlen, void *buf, int buflen, nbh_t nbh=0) = 0; /** * Put the data block. * * Puts the data block in buffer at location pointed to by the * index. The buffer is expected to be of length sufficient to fit * the block. * @param[in] idx Pointer to index * @param[in] idxlen Length of index (in bytes) * @param[in] buf Pointer to place the data * @param[in] buflen Length of buffer * @param[inout] nbh A specific handle to be used (if possible). * @return Handle to initiated communication. */ virtual nbh_t nbPut(const void *idx, int idxlen, const void *buf, int buflen, nbh_t nbh=0) = 0; /** * Add the data block. * * Adds the data block in buffer at location pointed to by the * index. Adds are atomic w.r.t. other add operations. The buffer * is expected to be of length sufficient to fit the block. * @param[in] idx Pointer to index * @param[in] idxlen Length of index (in bytes) * @param[in] buf Pointer to place the data * @param[in] buflen Length of buffer * @param[inout] nbh A specific handle to be used (if possible). * @return Handle to initiated communication. */ virtual void *nbAdd(const void *idx, int idxlen, const void *buf, int buflen, nbh_t nbh=0) = 0; /** * Wait for communication. * * Blocks till communication corresponding to the handle is * complete. The use of the handle after the call's return results * in undefined behavior. * @param[in] nbh Non-blocking handle * @return None */ virtual void waitHandle(nbh_t nbh)=0; }; /* DataColl*/ }; /**tascel*/ #endif /*__DataColl_h__*/ ga-5-3/tascel/src/Comm.h0000640005473000001440000000135311467703133013711 0ustar d3n000users#ifndef __tascel_Comm_h__ #define __tascel_Comm_h__ namespace tascel { /** * Encapsulation of common communication functions. * * Much of the communication operations will be abstracted here. At * this point, the operations are not group-aware. */ namespace comm { /** * barrier (collective). * * Equivalent of MPI's MPI_Barrier(MPI_COMM_WORLD) */ void barrier(); /** * Number of processes. * * Equivalent of nproc in MPI_Comm_size(MPI_COMM_WORLD, &nproc) */ int nproc(); /** * Rank of invoking process. * * Equivalent of me in MPI_Comm_rank(MPI_COMM_WORLD, &me) */ int me(); }; /*comm*/ }; /*tascel*/ #endif /*__tascel_Comm_h__*/ ga-5-3/tascel/src/UniformTaskCollection.cc0000640005473000001440000000141011556622013017420 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include "Comm.h" #include "FuncReg.h" #include "massert.h" #include "TaskCollProps.h" #include "UniformTaskCollection.h" using namespace std; using namespace tascel; using namespace comm; UniformTaskCollection::UniformTaskCollection(const TaskCollProps &props) : max_ntsks(props.max_tasks) , tsk_size(props.task_size) , frt(props.frt) , tfn(props.tfn) , pldata(new char[props.pldata_len]) , pldata_len(props.pldata_len) { memcpy(pldata, props.pldata, pldata_len); } /* virtual */ UniformTaskCollection::~UniformTaskCollection() { delete [] pldata; } /* virtual */ void UniformTaskCollection::printStats() const { stt.print(); } ga-5-3/tascel/src/Comm.cc0000640005473000001440000000063711467703133014053 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include "Comm.h" using namespace std; using namespace tascel; using namespace tascel::comm; void comm::barrier() { MPI_Barrier(MPI_COMM_WORLD); } int comm::nproc() { int rval; MPI_Comm_size(MPI_COMM_WORLD, &rval); return rval; } int comm::me() { int rval; MPI_Comm_rank(MPI_COMM_WORLD, &rval); return rval; } ga-5-3/tascel/src/FuncReg.cc0000640005473000001440000000125111477237005014503 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include "Comm.h" #include "FuncReg.h" using namespace std; using namespace tascel; using namespace tascel::comm; TslFuncRegTbl::TslFuncRegTbl() : ftbl() {} TslFuncRegTbl::TslFuncRegTbl(const TslFuncRegTbl &that) : ftbl(that.ftbl) {} TslFuncRegTbl& TslFuncRegTbl::operator = (const TslFuncRegTbl &that) { if (this == &that) { return *this; } ftbl = that.ftbl; return *this; } TslFuncRegTbl::~TslFuncRegTbl() {} TslFunc TslFuncRegTbl::add(TslFunc_t f) { barrier(); ftbl.push_back(f); return ftbl.size() - 1; } TslFunc_t TslFuncRegTbl::get(TslFunc fn) const { return ftbl.at(fn); } ga-5-3/tascel/src/TerminationDetector.cc0000640005473000001440000000534011467703133017137 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include "Comm.h" #include "TerminationDetector.h" using namespace std; using namespace tascel; using namespace tascel::comm; void TerminationDetector::resetUpPhase() { if (child[0] >= 0) { MPI_Irecv(&cvote[0], 1, MPI_INT, child[0], child[0], MPI_COMM_WORLD, &creq[0]); } if (child[1] >= 0) { MPI_Irecv(&cvote[1], 1, MPI_INT, child[1], child[1], MPI_COMM_WORLD, &creq[1]); } myvote = 1; //yes dirUp = false; } void TerminationDetector::resetDownPhase() { if (parent >= 0) { MPI_Irecv(&pdecision, 1, MPI_INT, parent, parent, MPI_COMM_WORLD, &preq); } dirUp = true; } TerminationDetector::TerminationDetector() { child[0] = (2 * me() + 1 < nproc()) ? 2 * me() + 1 : -1; child[1] = (2 * me() + 2 < nproc()) ? 2 * me() + 2 : -1; parent = (me != 0) ? (me() - 1) / 2 : -1; pdecision = 0; resetUpPhase(); resetDownPhase(); //this should after up. we start with the up phase } TerminationDetector::~TerminationDetector() { if (child[0] >= 0) { MPI_Cancel(&creq[0]); } if (child[1] >= 0) { MPI_Cancel(&creq[1]); } if (parent >= 0) { MPI_Cancel(&preq); } } void TerminationDetector::vote(bool _myvote) { myvote = (_myvote == false) ? 0 : myvote; } void TerminationDetector::propogateUp() { int decision = myvote; if (child[0] >= 0 && cvote[0] == 0) { decision = 0; } if (child[1] >= 0 && cvote[1] == 0) { decision = 0; } if (me() == 0) { pdecision = decision; } if (parent >= 0) { MPI_Send(&decision, 1, MPI_INT, parent, me(), MPI_COMM_WORLD); } resetUpPhase(); } void TerminationDetector::propogateDown() { if (child[0] >= 0) { MPI_Send(&pdecision, 1, MPI_INT, child[0], me(), MPI_COMM_WORLD); } if (child[1] >= 0) { MPI_Send(&pdecision, 1, MPI_INT, child[1], me(), MPI_COMM_WORLD); } resetDownPhase(); } void TerminationDetector::progress(bool _myvote) { vote(_myvote); if (pdecision == 1 || (me() == 0 && nproc() == 0 && myvote == 1)) { return; //termination detected. nothing more to do } if (dirUp) { int flag[2] = {1, 1}; MPI_Status status[2]; if (child[0] >= 0) { MPI_Test(&creq[0], &flag[0], &status[0]); } if (child[1] >= 1) { MPI_Test(&creq[1], &flag[1], &status[1]); } if (flag[0] && flag[1]) { propogateUp(); } } /*Tiny optimization: propogate inverts dirUp. So both dirUp and !dirUp could be executed consecutively, especially for me()==0*/ if (!dirUp) { int flag = 1; MPI_Status status; if (parent >= 0) { MPI_Test(&preq, &flag, &status); } if (flag) { propogateDown(); } } } bool TerminationDetector::hasTerminated() { // progress(myvote); return pdecision == 1; } ga-5-3/tascel/src/SharedQueue.cc0000640005473000001440000000723411467703133015373 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include "Comm.h" #include "massert.h" #include "SharedQueue.h" using namespace std; using namespace tascel; using namespace tascel::comm; SharedQueue::SharedQueue(int _tsk_size, int _max_ntsks) : max_ntsks(_max_ntsks) , tsk_size(_tsk_size) , q(NULL) , sq_state(NULL) , head(NULL) , tail(NULL) , size(NULL) , dirty(NULL) , td() { q = new char *[nproc()]; massert(q); ARMCI_Malloc((void **)q, max_ntsks * tsk_size); massertl(q[me()], error1); ARMCI_Create_mutexes(1); sq_state = new sq_state_t*[nproc()]; massertl(sq_state, error1); ARMCI_Malloc((void **)sq_state, nproc()*sizeof(sq_state_t)); massertl(sq_state[me()], error2); head = &sq_state[me()]->head; tail = &sq_state[me()]->tail; size = &sq_state[me()]->size; dirty = &sq_state[me()]->dirty; *head = *tail = *size = *dirty = 0; //printf("(cons) %d: *head=%p *tail=%p *size=%p\n", me(), head, tail, size); return; error2: printf("Error2 in SharedQueue constructor\n"); delete [] sq_state; error1: printf("Error1 in SharedQueue constructor\n"); delete [] q; error: printf("Error in SharedQueue constructor\n"); throw TSL_ERR; } SharedQueue::~SharedQueue() { barrier(); ARMCI_Free(sq_state[me()]); ARMCI_Destroy_mutexes(); ARMCI_Free(q[me()]); delete [] sq_state; delete [] q; } bool SharedQueue::empty() const { /*SK: speculative implementation. It could become empty while this operation is ongoing. However, the converse is not true, since only the host process call empty() or can add tasks (thus incrementing size) */ massert(*size >= 0); return (*size == 0); error: throw TSL_ERR; } bool SharedQueue::getTask(void *dscr, int dlen) { massert(dscr); massert(dlen == tsk_size); ARMCI_Lock(0, me()); if (*size == 0) { ARMCI_Unlock(0, me()); return false; } *head = (*head - 1 + max_ntsks) % max_ntsks; memcpy(dscr, &q[me()][*head*tsk_size], tsk_size); *size -= 1; ARMCI_Unlock(0, me()); return true; // return false; error: throw TSL_ERR; } void SharedQueue::addTask(void *dscr, int dlen) { massert(dscr); massert(dlen == tsk_size); ARMCI_Lock(0, me()); // printf("addTask. %d: *head=%p *tail=%p *size=%p\n", me(), head, tail, size); massertl(*size != max_ntsks, error2); memcpy(&q[me()][*head*tsk_size], dscr, tsk_size); *head = (*head + 1) % max_ntsks; *size += 1; ARMCI_Unlock(0, me()); return; error2: ARMCI_Unlock(0, me()); error: throw TSL_ERR; } bool SharedQueue::steal(int proc) { char *buf; massert(*size == 0); buf = new char[tsk_size]; massert(buf); //FIXME: might need a lock+unlock to ensure both size and dirty are //updated atomically by any thief (say through RDMA) td.progress(*dirty == 0); *dirty = 0; if (td.hasTerminated()) { return false; } ARMCI_Lock(0, proc); sq_state_t sq; ARMCI_Get(sq_state[proc], &sq, sizeof(sq), proc); // printf("%d: Locked %d for steal. size=%d\n", me(), proc, sq.size); if (sq.size == 0) { //nothing to steal ARMCI_Unlock(0, proc); return false; } sq.size = sq.size - 1; sq.dirty = 1; //mark dirty for termination detection sq.head = (sq.head - 1 + max_ntsks) % max_ntsks; ARMCI_Get(&q[proc][sq.head*tsk_size], buf, tsk_size, proc); ARMCI_Put(&sq, sq_state[proc], sizeof(sq), proc); //FIXME: does unlock imply an ARMCI_Fence. If not, add one ARMCI_Unlock(0, proc); addTask(buf, tsk_size); delete [] buf; return true; error: throw TSL_ERR; } bool SharedQueue::hasTerminated() { return td.hasTerminated(); } void SharedQueue::td_progress() { td.progress(*dirty == 0); *dirty = 0; } ga-5-3/tascel/src/AccessMode.h0000640005473000001440000000073011467703133015022 0ustar d3n000users#ifndef __AccessMode_h__ #define __AccessMode_h__ namespace tascel { /** * Data access modes. * * The enumeration lists mode of access for data collections. This * information is used by the runtime to schedule communication. */ enum AccessMode { MODE_RONLY, /**< Read-only accessmode*/ MODE_RDWR , /**< Read at start and write at end*/ MODE_ACC /**< Accumulate result*/ }; /* AccessMode*/ }; /*tascel*/ #endif /*__AccessMode_h__*/ ga-5-3/tascel/src/UniformTaskCollSplitData.h0000640005473000001440000000467411476032113017702 0ustar d3n000users#ifndef __tascel_UniformTaskCollSplitData_h__ #define __tascel_UniformTaskCollSplitData_h__ #include "AccessMode.h" #include "Comm.h" #include "FuncReg.h" #include "SplitQueueOpt.h" #include "TaskCollProps.h" #include "UniformTaskCollectionSplit.h" namespace tascel { class DataColl; /** * TODO */ typedef void (*compute_index_t)(void *dscr, int dscr_len, void *pldata, int pldata_len, int collid, void *idx, int idxlen); /** * Implementation of the UniformTaskCollection using a SplitQueue and data * movement. */ class UniformTaskCollSplitData : public UniformTaskCollectionSplit { private: std::vector colls; /**< TODO */ const std::vector modes; /**< TODO */ const std::vector idxlens; /**< TODO */ compute_index_t ci_fn; /**< TODO */ /** * TODO * * @param[in,out] data_bufs TODO * @param[in,out] data_lens TODO * @param[in] idxs TODO */ void setupDataBufs(std::vector &data_bufs, std::vector &data_lens, const std::vector &idxs); /** * TODO * * @param[in,out] data_bufs TODO * @param[in,out] data_lens TODO * @param[in] idxs TODO */ void cleanupDataBufs(std::vector &data_bufs, std::vector &data_lens, const std::vector &idxs); public: /** * Constructs the UniformTaskCollSplitData. * * @copydetails UniformTaskCollection::UniformTaskCollection(TslFunc,const TslFuncRegTbl&,int,int,void*,int) * * @param[in] colls TODO * @param[in] modes TODO * @param[in] idxlens TODO * @param[in] ci_fn TODO */ UniformTaskCollSplitData(const TaskCollProps &props, const std::vector& colls, const std::vector& modes, const std::vector& idxlens, compute_index_t ci_fn); /** * Destroys the UniformTaskCollSplitData. */ virtual ~UniformTaskCollSplitData(); /** * @copybrief UniformTaskCollection::process() * @copydetails UniformTaskCollection::process() */ void process(); }; /*UniformTaskCollSplitData*/ }; /*tascel*/ #endif /*__tascel_UniformTaskCollSplitData_h__*/ ga-5-3/tascel/src/SplitQueue.cc0000640005473000001440000001275611467703133015265 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include "Comm.h" #include "massert.h" #include "SplitQueue.h" using namespace std; using namespace tascel; using namespace tascel::comm; SplitQueue::SplitQueue(int _tsk_size, int _max_ntsks) : max_ntsks(_max_ntsks) , tsk_size(_tsk_size) , q(NULL) , sq_state(NULL) , head(NULL) , tail(NULL) , size_local(NULL) , size_shared(NULL) , split(NULL) , dirty(NULL) , size_local_val(0) , head_val(0) , td() { q = new char *[nproc()]; massert(q); ARMCI_Malloc((void **)q, max_ntsks * tsk_size); massertl(q[me()], error1); ARMCI_Create_mutexes(1); sq_state = new sq_state_t*[nproc()]; massertl(sq_state, error1); ARMCI_Malloc((void **)sq_state, nproc()*sizeof(sq_state_t)); massertl(sq_state[me()], error2); tail = &sq_state[me()]->tail; split = &sq_state[me()]->split; head = &head_val; size_local = &size_local_val; size_shared = &sq_state[me()]->size_shared; dirty = &sq_state[me()]->dirty; *head = *tail = *split = *size_local = *size_shared = *dirty = 0; //printf("(cons) %d: *head=%p *tail=%p *size=%p\n", me(), head, tail, size); return; error2: printf("Error2 in SplitQueue constructor\n"); delete [] sq_state; error1: printf("Error1 in SplitQueue constructor\n"); delete [] q; error: printf("Error in SplitQueue constructor\n"); /*FIXME: cannot throw exception in constructor!*/ } SplitQueue::~SplitQueue() { barrier(); ARMCI_Free(sq_state[me()]); ARMCI_Destroy_mutexes(); ARMCI_Free(q[me()]); delete [] sq_state; delete [] q; } bool SplitQueue::empty() const { /*SK: speculative implementation. It could become empty while this operation is ongoing. However, the converse is not true, since only the host process call empty() or can add tasks (thus incrementing size) */ massert(*size_local >= 0 && *size_shared >= 0); if (*size_local == 0 && *size_shared == 0) { massert(*split == *head); massert(*split == *tail); } return (*size_local == 0 && *size_shared == 0); error: throw TSL_ERR; } bool SplitQueue::full() const { if (*head == *tail && (*split != *head || *split != *tail)) { return true; } return false; } /** * If local portion has tasks, get one. If not, lock and try to find * work in the shared portion. If no work in shared portion as well, * return empty handed. */ bool SplitQueue::getTask(void *dscr, int dlen) { massert(dscr); massert(dlen == tsk_size); if (*size_local > 0) { if (*size_shared == 0) { releaseToShared(*size_local / 2); } *head = (*head - 1 + max_ntsks) % max_ntsks; memcpy(dscr, &q[me()][*head*tsk_size], tsk_size); *size_local -= 1; return true; } if (acquireFromShared(1)) { //SK: note that this breaks with a push-based model. We assert //that when this condition is true, we will not recurse to get //work from shared again. massert(getTask(dscr, dlen) == true); return true; } return false; error: throw TSL_ERR; } int SplitQueue::acquireFromShared(int _nacquire) { int nacquire; if (_nacquire == 0) { return 0; } ARMCI_Lock(0, me()); //SK: is it needed? if (*size_shared == 0) { ARMCI_Unlock(0, me()); return 0; } massert(*split != *tail); massert(*head == *split); nacquire = min(_nacquire, *size_shared); *split = (*split - nacquire + max_ntsks) % max_ntsks; massert((*split <= *head) || (*split > *tail)); *size_shared -= nacquire; *size_local += nacquire; ARMCI_Unlock(0, me()); return nacquire; error: throw TSL_ERR; } void SplitQueue::releaseToShared(int ndonate) { massert(ndonate <= *size_local); if (ndonate == 0) { return; } ARMCI_Lock(0, me()); *split = (*split + ndonate) % max_ntsks; massert((*split <= *head) || (*split > *tail)); //mem-fence *size_shared += ndonate; *size_local -= ndonate; ARMCI_Unlock(0, me()); return; error: throw TSL_ERR; } /** * Check is there is space. If not, wait. If there is, add at head. */ void SplitQueue::addTask(void *dscr, int dlen) { massert(dscr); massert(dlen == tsk_size); while (full()) {} memcpy(&q[me()][*head*tsk_size], dscr, tsk_size); *head = (*head + 1) % max_ntsks; *size_local += 1; if (*size_shared == 0) { releaseToShared(*size_local / 2); } return; error: throw TSL_ERR; } bool SplitQueue::steal(int proc) { char *buf; massert(*size_local == 0); massert(!full()); buf = new char[tsk_size]; massert(buf); //FIXME: might need a lock+unlock to ensure both size and dirty are //updated atomically by any thief (say through RDMA) td.progress(*dirty == 0); *dirty = 0; if (td.hasTerminated()) { return false; } ARMCI_Lock(0, proc); sq_state_t sq; ARMCI_Get(sq_state[proc], &sq, sizeof(sq), proc); // printf("%d: Locked %d for steal. size=%d\n", me(), proc, sq.size); if (sq.size_shared == 0) { //nothing to steal ARMCI_Unlock(0, proc); return false; } sq.size_shared = sq.size_shared - 1; sq.dirty = 1; //mark dirty for termination detection ARMCI_Get(&q[proc][sq.tail*tsk_size], buf, tsk_size, proc); sq.tail = (sq.tail + 1) % max_ntsks; ARMCI_Put(&sq, sq_state[proc], sizeof(sq), proc); //FIXME: does unlock imply an ARMCI_Fence. If not, add one ARMCI_Unlock(0, proc); addTask(buf, tsk_size); delete [] buf; return true; error: throw TSL_ERR; } bool SplitQueue::hasTerminated() { return td.hasTerminated(); } void SplitQueue::td_progress() { td.progress(*dirty == 0); *dirty = 0; } ga-5-3/tascel/src/DataCollCache.h0000640005473000001440000000130311476012672015421 0ustar d3n000users#ifndef __DataCollCache_h__ #define __DataCollCache_h__ #include "AccessMode.h" namespae tascel { class DataColl; /** * Cache of data blocks in an abstract data collection. */ class DataCollCache { private: const int idxlen; const int size; DataColl *coll; AccessMode mode; public: DataCollCache(int idxlen, int size, DataColl *coll, AccessMode mode); ~DataCollCache(); void *get(void *idx, int idxlen); void *allocate(void *idx, int idxlen); void put(void *idx, int idxlen, void *buf); void add(void *idx, int idxlen, void *buf); void flush(); }; /*DataCollCache*/ }; /*tascel*/ #endif /*__DataCollCache_h__*/ ga-5-3/tascel/src/SplitQueueOpt.h0000640005473000001440000001320011467703133015573 0ustar d3n000users#ifndef __tascel_SplitQueueOpt_h__ #define __tascel_SplitQueueOpt_h__ #include "TerminationDetector.h" namespace tascel { /** * A set of task queues shared among processes. * * Each process has a local queue with a maximum number of possible tasks. * A process can steal tasks from any other process's queue and have * tasks stolen from its own queue. * * This implementation splits the queue into a local and shared portion. * This allows the local process to modify its queue without locking. * * Compared to the original SplitQueue, this SplitQueueOpt is further * optimized by allowing a stealing process to steal without locking all of * the queue state, as described in "Scalable Work Stealing", SC'09. */ class SplitQueueOpt { private: /** * The local queue state which other procs can modify. * * Queue state is further split into two pieces. The vtail2 is separated * so that it can be updated independent of the rest of the queue state. */ struct sq_state_t { /** * The local queue state which other procs can modify. */ struct { int dirty; /**< whether a steal has occurred */ int split; /**< the split between head and tail */ int tail; /**< the tail of the queue */ int size_shared;/**< the number of shared tasks in the queue */ } ps; int vtail2; /**< incremented after a steal completes */ }; const int max_ntsks; /**< max number of tasks allowed in queue */ const int tsk_size; /**< size of a single task */ char **q; /**< addresses of queue data on all procs */ sq_state_t **sq_state; /**< addresses of queue state on all procs */ int *head; /**< pointer to this procs head_val */ int *size_local; /**< pointer to this procs size_local_val */ int *vtail1; /**< pointer to this procs vtail1_val */ int *tail; /**< pointer to this procs tail state */ int *vtail2; /**< pointer to this procs vtail2 state */ int *size_shared; /**< pointer to this procs size_shared state */ int *split; /**< pointer to this procs split state */ int *dirty; /**< pointer to this procs dirty state */ int size_local_val; /**< size of local portion of local queue */ int head_val; /**< index of the local queue's head */ int vtail1_val; /**< the true end index of the queue */ TerminationDetector td; /**< the termination detector */ int **locks; /**< Locks for mutual exclusion */ /** * Moves tasks from the shared portion to the local portion. * * @param[in] _nacquire number of tasks to move */ int acquireFromShared(int _nacquire); /** * Moves tasks from the local portion to the shared portion. * * @param[in] ndonate number of tasks to move */ void releaseToShared(int ndonate); /** * If all steal operations have completed, update vtail1. */ void updateVtail1(); /** * Returns true if the local queue is empty. */ bool empty() const; /** * Returns true if the local queue is full. */ bool full() const; /** * Returns true if this proc can add tasks to its local private portion. */ bool spaceAvailable() const; /** * Obtain the lock (locks[proc]) * @param[in] proc Process whose lock needs to be obainted * @param[in] num_tries If non-blocking lock, number of * attempts. Negative number results in a blocking call. * @return true if locking succeeded */ bool lock(int proc, int num_tries=-1); /** * Release the lock (locks[proc]) * @param[in] proc Process whose lock needs to be released */ void unlock(int proc); public: /** * Constructs the SplitQueueOpt instance. * * @param[in] tsk_size size of a single task * @param[in] max_ntsks max number of tasks allowed in a queue * * @pre tsk_size must be the same value on all procs * @pre max_ntsks must be the same value on all procs */ SplitQueueOpt(int tsk_size, int max_ntsks); /** * Destroys the SplitQueue instance. */ ~SplitQueueOpt(); /** * Retrieves a task from the private portion of the local queue. * * @param[out] dscr the retrieved task * @param[in] dlen size of the retrieved task * * @pre dscr is not NULL * @pre dlen == tsk_size */ bool getTask(void *dscr, int dlen); /** * Adds a task to the private portion of the local queue. * * @param[in] dscr the task to add * @param[in] dlen size of the added task * * @pre dscr is not NULL * @pre dlen == tsk_size */ void addTask(void *dscr, int dlen); /** * Steals one or more tasks from the given proc's shared portion. * * @param[in] proc to steal from */ bool steal(int proc); /** * Returns true if all of the tasks have been processed. */ bool hasTerminated(); /** * Returns the number of tasks in the entire local queue. */ int numTasks() const { return *size_local + *size_shared; } /** * Runs the termination detector. */ void td_progress(); }; /* SplitQueueOpt */ }; /* tascel */ #endif /*__tascel_SplitQueueOpt_h__*/ ga-5-3/tascel/src/TaskCollProps.cc0000640005473000001440000000135711556622013015714 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include "TaskCollProps.h" using namespace tascel; TaskCollProps::TaskCollProps() : max_tasks(0) , task_size(0) , frt() , tfn() , pldata(0) , pldata_len(0) { } TaskCollProps& TaskCollProps::functions( const TslFunc &fn, const TslFuncRegTbl &frt) { this->frt = frt; this->tfn = fn; return *this; } TaskCollProps& TaskCollProps::taskSize(long tsk_size) { this->task_size = tsk_size; return *this; } TaskCollProps& TaskCollProps::maxTasks(long ntsks) { this->max_tasks = ntsks; return *this; } TaskCollProps& TaskCollProps::localData(void *pldata, long pldata_len) { this->pldata = static_cast(pldata); this->pldata_len = pldata_len; return *this; } ga-5-3/tascel/src/TaskCollProps.h0000640005473000001440000000151211556622013015547 0ustar d3n000users#ifndef __tascel_TaskCollProps_h__ #define __tascel_TaskCollProps_h__ #include "FuncReg.h" #include "TaskCollProps.h" namespace tascel { /** * TODO */ class TaskCollProps { public: TaskCollProps(); TaskCollProps& functions(const TslFunc &fn, const TslFuncRegTbl &frt); TaskCollProps& taskSize(long tsk_size); TaskCollProps& maxTasks(long ntsks); TaskCollProps& localData(void *pldata, long pldata_len); private: friend class UniformTaskCollection; friend class UniformTaskCollectionShared; friend class UniformTaskCollectionSplit; friend class UniformTaskCollSplitData; long max_tasks; long task_size; TslFuncRegTbl frt; TslFunc tfn; char *pldata; long pldata_len; }; }; /* tascel */ #endif /* __tascel_TaskCollProps_h__ */ ga-5-3/tascel/src/Sleep.cc0000640005473000001440000000114511467703133014223 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #ifdef _POSIX_C_SOURCE # undef _POSIX_C_SOURCE # define _POSIX_C_SOURCE 199309 #endif #ifdef _XOPEN_SOURCE # undef _XOPEN_SOURCE # define _XOPEN_SOURCE 500 #endif #include #include #include "Sleep.h" void tascel::sleep(long seconds) { unsigned int s = static_cast(seconds); (void)sleep(s); } void tascel::microsleep(long microseconds) { (void)usleep(microseconds); } void tascel::nanosleep(long nanoseconds) { int ret; struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = nanoseconds; ret = nanosleep(&ts, NULL); } ga-5-3/tascel/src/Timer.h0000640005473000001440000000203211556621755014101 0ustar d3n000users#ifndef __tascel_Timer_h__ #define __tascel_Timer_h__ #include namespace tascel { class Timer { private: double ttime; /**< Total time so far */ double stime; /**< Time at last start */ /** * Current time. A simple (portable) implementation for now. * * @return Current time stamps (in seconds) */ inline double timestamp() { return MPI_Wtime(); } public: /** * Constructor */ Timer() : ttime(0) {} /** * Start the timer. Overwrites previous start */ inline void startTimer() { stime = timestamp(); } /** * Stop timer. Adds time since previous start to internal state. */ inline void stopTimer() { double etime_ = timestamp(); ttime += etime_ - stime; } /** * Returns sum of all times in intervals between start and stop of * times. */ inline double time() const { return ttime; } }; /* Timer */ }; /* tascel */ #endif /*__tascel_Timer_h__*/ ga-5-3/tascel/src/UniformTaskCollectionShared.h0000640005473000001440000000243511476032113020416 0ustar d3n000users#ifndef __tascel_UniformTaskCollectionShared_h__ #define __tascel_UniformTaskCollectionShared_h__ #include "Comm.h" #include "FuncReg.h" #include "SharedQueue.h" #include "UniformTaskCollection.h" namespace tascel { /** * Implementation of the UniformTaskCollection using a SharedQueue. * * This is a thin wrapper around the SharedQueue. */ class UniformTaskCollectionShared : public UniformTaskCollection { private: SharedQueue sq; /**< the SharedQueue instance */ public: /** * Constructs the UniformTaskCollectionShared. * * @copydetails UniformTaskCollection::UniformTaskCollection(const TaskCollProps&) */ UniformTaskCollectionShared(const TaskCollProps &props); /** * Destroys the UniformTaskCollectionShared. */ virtual ~UniformTaskCollectionShared(); /** * @copybrief UniformTaskCollection::process() * @copydetails UniformTaskCollection::process() */ virtual void process(); /** * @copybrief UniformTaskCollection::addTask() * @copydetails UniformTaskCollection::addTask() */ virtual void addTask(void *data, int dlen); }; /*UniformTaskCollectionShared*/ }; /*tascel*/ #endif /*__tascel_UniformTaskCollectionShared_h__*/ ga-5-3/tascel/src/StealingStats.h0000640005473000001440000000131211556622013015572 0ustar d3n000users#ifndef __tascel_StealingStats_h__ #define __tascel_StealingStats_h__ #include "Counter.h" #include "Timer.h" namespace tascel { class StealingStats { public: Counter numStealAttempts; /**< Num. steal attempts */ Counter numSteals; /**< Num steals that got work */ Counter numTasks; /**< Num. tasks executed by this proc*/ Timer stealTime; /**< Time spent stealing */ Timer taskTime; /**< Time spend executing tasks */ Timer tdTime; /**< Time spent in termination detection */ /** * Print all stats */ void print() const; }; /* StealingStats */ }; /* tascel */ #endif /* __tascel_StealingStats_h__ */ ga-5-3/tascel/src/DenseArray.cc0000640005473000001440000001276611500266271015216 0ustar d3n000users#include "DenseArray.h" #include "massert.h" #include "ga.h" #include #include #include using namespace std; using namespace tascel; int DenseArray::getProc(const void *idx, int idxlen) { int lo[ndim], hi[ndim], ld[ndim], proc; massert(idxlen == ndim * sizeof(int)); computeBounds(idx, idxlen, lo, hi, ld); #define OWNER_LOWER_LEFT 1 #if OWNER_LOWER_LEFT // Oversimplification. The owner of the block is considered to be the proc // which owns the lowest index. proc = NGA_Locate(ga, lo); massert(proc >= 0); #else // The owner is the proc which owns most of the data, if more than one proc // is found to own the data. { const int nnodes = GA_Nnodes(); // not optimal since nnodes could be huge int nown, map[nnodes*2*ndim], procs[nnodes]; nown = NGA_Locate_region(ga, lo, hi, map, procs); if (1 == nown) { proc = procs[0]; } else { long biggest_size = 0; for (int i=0; i 0); } if (current_size > biggest_size) { biggest_size = current_size; proc = procs[i]; } } assert(biggest_size > 0); } } #endif return proc; error: throw TSL_ERR; } void DenseArray::computeLo(const void *idx, int idxlen, int *lo) { int *iidx = (int *)idx; massert(idxlen = ndim * sizeof(int)); for (int i = 0; i < ndim; i++) { lo[i] = iidx[i] * block[i]; } return; error: throw TSL_ERR; } void DenseArray::computeHi(const void *idx, int idxlen, int *hi) { int *iidx = (int *)idx; massert(idxlen = ndim * sizeof(int)); for (int i = 0; i < ndim; i++) { hi[i] = min((iidx[i] + 1) * block[i], dims[i]) - 1; } return; error: throw TSL_ERR; } void DenseArray::computeLd(const void *idx, int idxlen, int *ld) { int lo[ndim], hi[ndim]; massert(idxlen == ndim * sizeof(int)); computeLo(idx, idxlen, lo); computeHi(idx, idxlen, hi); for (int i = 0; i < ndim; i++) { ld[i] = hi[i] - lo[i] + 1; } return; error: throw TSL_ERR; } void DenseArray::computeBounds(const void *idx, int idxlen, int *lo, int *hi, int *ld) { int *iidx = (int *)idx; massert(idxlen = ndim * sizeof(int)); for (int i = 0; i < ndim; i++) { lo[i] = iidx[i] * block[i]; hi[i] = min((iidx[i] + 1) * block[i], dims[i]) - 1; ld[i] = hi[i] - lo[i] + 1; } return; error: throw TSL_ERR; } DenseArray::DenseArray(int _ga, const int *_block, int len) : ga(_ga), ndim(GA_Ndim(_ga)) { int _dims[ndim], tmp, type; //ndim = GA_Ndim(ga); assert(len == ndim); NGA_Inquire(ga, &type, &tmp, _dims); assert(tmp == ndim); for (int i = 0; i < ndim; i++) { block.push_back(_block[i]); dims.push_back(_dims[i]); } } int DenseArray::getSize(const void *idx, int idxlen) { int lo[ndim], hi[ndim], ld[ndim], sz; massert(idxlen == ndim * sizeof(int)); computeBounds(idx, idxlen, lo, hi, ld); sz = sizeof(double); for (int i = 0; i < ndim; i++) { sz *= hi[i] - lo[i] + 1; } return sz; error: throw TSL_ERR; } void DenseArray::get(const void *idx, int idxlen, void *buf, int buflen) { int lo[ndim], hi[ndim], ld[ndim]; massert(idxlen == ndim * sizeof(int)); computeBounds(idx, idxlen, lo, hi, ld); massert(getSize(idx, idxlen) == buflen); NGA_Get(ga, lo, hi, buf, ld); return; error: throw TSL_ERR; } void DenseArray::put(const void *idx, int idxlen, const void *buf, int buflen) { int lo[ndim], hi[ndim], ld[ndim]; massert(idxlen == ndim * sizeof(int)); computeBounds(idx, idxlen, lo, hi, ld); massert(getSize(idx, idxlen) == buflen); NGA_Put(ga, lo, hi, (void *)buf, ld); return; error: throw TSL_ERR; } void DenseArray::add(const void *idx, int idxlen, const void *buf, int buflen) { int lo[ndim], hi[ndim], ld[ndim]; double alpha = 1.0; massert(idxlen == ndim * sizeof(int)); computeBounds(idx, idxlen, lo, hi, ld); massert(getSize(idx, idxlen) == buflen); NGA_Acc(ga, lo, hi, (void *)buf, ld, &alpha); return; error: throw TSL_ERR; } DenseArray::nbh_t DenseArray::nbGet(const void *idx, int idxlen, void *buf, int buflen, nbh_t nbh) { int lo[ndim], hi[ndim], ld[ndim]; ga_nbhdl_t *rnbh; massert(idxlen == ndim * sizeof(int)); rnbh = new ga_nbhdl_t(); massert(rnbh!=NULL); computeBounds(idx, idxlen, lo, hi, ld); massert(getSize(idx, idxlen) == buflen); NGA_NbGet(ga, lo, hi, buf, ld, rnbh); return rnbh; error: throw TSL_ERR; } DenseArray::nbh_t DenseArray::nbPut(const void *idx, int idxlen, const void *buf, int buflen, nbh_t nbh) { int lo[ndim], hi[ndim], ld[ndim]; ga_nbhdl_t *rnbh; massert(idxlen == ndim * sizeof(int)); rnbh = new ga_nbhdl_t(); massert(rnbh!=NULL); computeBounds(idx, idxlen, lo, hi, ld); massert(getSize(idx, idxlen) == buflen); NGA_NbPut(ga, lo, hi, (void *)buf, ld, rnbh); return rnbh; error: throw TSL_ERR; } DenseArray::nbh_t DenseArray::nbAdd(const void *idx, int idxlen, const void *buf, int buflen, nbh_t nbh) { int lo[ndim], hi[ndim], ld[ndim]; ga_nbhdl_t *rnbh; double alpha = 1.0; massert(idxlen == ndim * sizeof(int)); rnbh = new ga_nbhdl_t(); massert(rnbh!=NULL); computeBounds(idx, idxlen, lo, hi, ld); massert(getSize(idx, idxlen) == buflen); NGA_NbAcc(ga, lo, hi, (void *)buf, ld, &alpha, rnbh); return rnbh; error: throw TSL_ERR; } void DenseArray::waitHandle(nbh_t nbh) { ga_nbhdl_t *rnbh = (ga_nbhdl_t*)nbh; NGA_NbWait(rnbh); delete rnbh; } ga-5-3/tascel/src/UniformTaskCollectionShared.cc0000640005473000001440000000235311476032113020553 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #include "Comm.h" #include "FuncReg.h" #include "massert.h" #include "Sleep.h" #include "UniformTaskCollectionShared.h" using namespace std; using namespace tascel; using namespace tascel::comm; UniformTaskCollectionShared::UniformTaskCollectionShared( const TaskCollProps &props) : UniformTaskCollection(props) , sq(tsk_size, max_ntsks) { } /* virtual */ UniformTaskCollectionShared::~UniformTaskCollectionShared() { } void UniformTaskCollectionShared::process() { int p; bool got_work; barrier(); TslFunc_t fn = frt.get(tfn); char buf[tsk_size]; while (!sq.hasTerminated()) { while (sq.getTask(buf, tsk_size)) { fn(this, buf, tsk_size, NULL, 0, vector()); } sq.td_progress(); got_work = false; while(got_work == false && !sq.hasTerminated()) { do { p = rand() % nproc(); } while (p == me()); got_work = sq.steal(p); } } barrier(); } void UniformTaskCollectionShared::addTask(void *data, int dlen) { massert(dlen == tsk_size); sq.addTask(data, dlen); return; error: throw TSL_ERR; } ga-5-3/tascel/src/SplitQueueData.cc0000640005473000001440000001365711467703133016060 0ustar d3n000users/** * This is an optimized implementation of SplitQueue, based on the * algorithm presented in: * "Scalable work stealing", SC'09. * * This version includes support for tasks with data movement. * */ #include "SplitQueueOpt.h" #include #include "Comm.h" #include #include #include #include using namespace std; using namespace tascel; using namespace comm; SplitQueueOpt::SplitQueueOpt(int _tsk_size, int _max_ntsks) : tsk_size(_tsk_size), max_ntsks(_max_ntsks) { q = new char *[nproc()]; massert(q); ARMCI_Malloc((void **)q, max_ntsks * tsk_size); massertl(q[me()], error1); ARMCI_Create_mutexes(1); sq_state = new sq_state_t*[nproc()]; massertl(sq_state, error1); ARMCI_Malloc((void **)sq_state, nproc()*sizeof(sq_state_t)); massertl(sq_state[me()], error2); tail = &sq_state[me()]->ps.tail; split = &sq_state[me()]->ps.split; size_shared = &sq_state[me()]->ps.size_shared; dirty = &sq_state[me()]->ps.dirty; vtail2 = &sq_state[me()]->vtail2; head = &head_val; size_local = &size_local_val; vtail1 = &vtail1_val; *head = *tail = *vtail1 = *vtail2 = *split = *size_local = *size_shared = *dirty = 0; ARMCI_Barrier(); //for the mem fence. we don't want steals before this is init-ed // printf("(cons) %d: *head=%p *tail=%p *size=%p\n", me(), head, tail, size); return; error2: printf("Error2 in SplitQueueOpt constructor\n"); delete [] sq_state; error1: printf("Error1 in SplitQueueOpt constructor\n"); delete [] q; error: printf("Error in SplitQueueOpt constructor\n"); /*FIXME: cannot throw exception in constructor!*/ } SplitQueueOpt::~SplitQueueOpt() { barrier(); ARMCI_Free(sq_state[me()]); ARMCI_Destroy_mutexes(); ARMCI_Free(q[me()]); delete [] sq_state; delete [] q; } bool SplitQueueOpt::empty() const { /*SK: speculative implementation. It could become empty while this operation is ongoing. However, the converse is not true, since only the host process call empty() or can add tasks (thus incrementing size) */ massert(*size_local >= 0 && *size_shared >= 0); if (*size_local == 0 && *size_shared == 0) { massert(*split == *head); massert(*split == *tail); } return (*size_local == 0 && *size_shared == 0); error: throw TSL_ERR; } bool SplitQueueOpt::full() const { if (*head == *tail && (*split != *head || *split != *tail)) { return true; } return false; } bool SplitQueueOpt::spaceAvailable() const { if (*head == *vtail1 && (*split != *head || *split != *vtail1)) { return false; } return true; } /** * If local portion has tasks, get one. If not, lock and try to find * work in the shared portion. If no work in shared portion as well, * return empty handed. */ bool SplitQueueOpt::getTask(void *dscr, int dlen) { massert(dscr); massert(dlen == tsk_size); if (*size_local > 0) { *head = (*head - 1 + max_ntsks) % max_ntsks; memcpy(dscr, &q[me()][*head*tsk_size], tsk_size); *size_local -= 1; return true; } if (acquireFromShared(1)) { //SK: note that this breaks with a push-based model. We assert //that when this condition is true, we will not recurse to get //work from shared again. massert(getTask(dscr, dlen) == true); return true; } return false; error: throw TSL_ERR; } int SplitQueueOpt::acquireFromShared(int _nacquire) { int nacquire; ARMCI_Lock(0, me()); //SK: is it needed? if (*size_shared == 0) { ARMCI_Unlock(0, me()); return 0; } massert(*split != *tail); massert(*head == *split); nacquire = min(_nacquire, *size_shared); *split = (*split - nacquire + max_ntsks) % max_ntsks; massert((*split <= *head) || (*split > *tail)); *size_shared -= nacquire; *size_local += nacquire; ARMCI_Unlock(0, me()); return nacquire; error: throw TSL_ERR; } void SplitQueueOpt::releaseToShared(int ndonate) { massert(ndonate <= *size_local); ARMCI_Lock(0, me()); *split = (*split + ndonate) % max_ntsks; massert((*split <= *head) || (*split > *tail)); //mem-fence *size_shared += ndonate; *size_local -= ndonate; ARMCI_Unlock(0, me()); return; error: throw TSL_ERR; } void SplitQueueOpt::updateVtail1() { if (*vtail2 == *tail) { *vtail1 = *tail; } } /** * Check is there is space. If not, wait. If there is, add at head. */ void SplitQueueOpt::addTask(void *dscr, int dlen) { massert(dscr); massert(dlen == tsk_size); while (!spaceAvailable()) { updateVtail1(); } memcpy(&q[me()][*head*tsk_size], dscr, tsk_size); *head = (*head + 1) % max_ntsks; *size_local += 1; if (*size_shared == 0) { releaseToShared(1); } return; error: throw TSL_ERR; } bool SplitQueueOpt::steal(int proc) { char *buf; int newtail, nshift, oldtail; massert(*size_local == 0); massert(!full()); buf = new char[tsk_size]; massert(buf); //FIXME: might need a lock+unlock to ensure both size and dirty are //updated atomically by any thief (say through RDMA) td.progress(*dirty == 0); *dirty = 0; if (td.hasTerminated()) { return false; } ARMCI_Lock(0, proc); sq_state_t sq; ARMCI_Get(sq_state[proc], &sq, sizeof(sq), proc); // printf("%d: Locked %d for steal. size=%d\n", me(), proc, sq.size); if (sq.ps.size_shared == 0) { //nothing to steal ARMCI_Unlock(0, proc); return false; } sq.ps.size_shared = sq.ps.size_shared - 1; sq.ps.dirty = 1; //mark dirty for termination detection newtail = (sq.ps.tail + 1) % max_ntsks; oldtail = sq.ps.tail; nshift = newtail - sq.ps.tail; sq.ps.tail = newtail; ARMCI_Put(&sq.ps, sq_state[proc], sizeof(sq), proc); //FIXME: does unlock imply an ARMCI_Fence. If not, add one ARMCI_Unlock(0, proc); ARMCI_Get(&q[proc][oldtail*tsk_size], buf, tsk_size, proc); int dummy; ARMCI_Rmw(ARMCI_FETCH_AND_ADD, &dummy, &sq_state[proc]->vtail2, nshift, proc); addTask(buf, tsk_size); delete [] buf; return true; error: throw TSL_ERR; } bool SplitQueueOpt::hasTerminated() { return td.hasTerminated(); } ga-5-3/tascel/src/UniformTaskCollection.h0000640005473000001440000000441311556622013017270 0ustar d3n000users#ifndef __tascel_UniformTaskCollection_h__ #define __tascel_UniformTaskCollection_h__ #include "FuncReg.h" #include "TaskCollProps.h" #include "StealingStats.h" namespace tascel { /** * Abstract base class representing a collection of uniform tasks. * * Here, uniform means that each task descriptor is the same size. The * function table is allowed to have as many functions as needed, however * the entry function must be indicated. */ class UniformTaskCollection { protected: const int max_ntsks; /**< max number of tasks in collection */ const int tsk_size; /**< size of any one task */ const TslFuncRegTbl &frt; /**< function registration table */ TslFunc tfn; /**< task function */ char *pldata; /**< Process local data shared across tasks*/ const int pldata_len; /**< length of pldata buffer */ StealingStats stt; /**< Stealing statistics*/ public: /** * Constructs the task collection. * * @param[in] _fn entry function representing the task * @param[in] frt function registration table of which _fn is a member * @param[in] tsk_size size of any one task * @param[in] ntsks maximum number of tasks allowed in collection * @param[in] pldata Pointer to process-local data * @param[in] pldata_len Length of buffer pointed by pldata * * @pre _fn is a valid handle to a function in frt */ UniformTaskCollection(const TaskCollProps &props); /** * Destroys the task collection. */ virtual ~UniformTaskCollection(); /** * Begins processing the tasks in this collection. * * This is a collective operation. */ virtual void process() = 0; /** * Adds a task to this collection. * * @param[in] data task descriptor * @param[in] dlen size of the task descriptor * * @pre dlen == tsk_size */ virtual void addTask(void *data, int dlen) = 0; /** * Print stealing statistics */ virtual void printStats() const; }; /*UniformTaskCollection*/ }; /*tascel*/ #endif /*__tascel_UniformTaskCollection_h__*/ ga-5-3/tascel/src/Sleep.h0000640005473000001440000000070511467703133014066 0ustar d3n000usersnamespace tascel { /** * Sleep for the specified number of seconds. * * @param[in] seconds to sleep */ void sleep(long seconds); /** * Sleep for the specified number of microseconds. * * @param[in] microseconds to sleep */ void microsleep(long microseconds); /** * Sleep for the specified number of nanoseconds. * * @param[in] nanoseconds to sleep */ void nanosleep(long nanoseconds); }; /* tascel */ ga-5-3/tascel/src/massert.h0000640005473000001440000000055411467703133014476 0ustar d3n000users#ifndef __massert_h__ #define __massert_h__ #include /* #define massertl(cond,label) do { \ */ /* if(!(cond)) { goto label;} \ */ /* } while(0) */ #define massertl(cond,label) do { \ if(!(cond)) { assert(0);} \ } while(0) #define massert(cond) massertl(cond,error) enum TslError { TSL_OK = 0, TSL_ERR }; #endif /*__massert_h__*/ ga-5-3/tascel/src/TerminationDetector.h0000640005473000001440000000341011467703133016775 0ustar d3n000users#ifndef __tascel_TerminationDetector_h__ #define __tascel_TerminationDetector_h__ #include namespace tascel { /** * Termination Detector. */ class TerminationDetector { private: int parent; /**< id of this proc's parent */ int child[2]; /**< id of this proc's children */ int cvote[2]; /**< children's votes */ MPI_Request creq[2]; /**< children's request handles */ MPI_Request preq; /**< parent's request handle */ int myvote; /**< value of this proc's vote */ int pdecision; /**< cumulative decision (myvote and vote of parent/children) */ bool dirUp; /**< voting direction */ /** * Initiates receive of messages from children and resets vote to 'yes'. */ void resetUpPhase(); /** * Initiates recieve of message from parent. */ void resetDownPhase(); /** * Integrates votes from children and sends to parent. */ void propogateUp(); /** * Sends decision to children. */ void propogateDown(); public: /** * Constructs the TerminationDetector. */ TerminationDetector(); /** * Destroys the TerminationDetector. */ ~TerminationDetector(); /** * Assigns the value of myvote. */ void vote(bool val); /** * Propogates votes up or down depending on the current mode. */ void progress(bool vote); /** * Returns true if termination has been decided. * * @return true if termination has been decided. */ bool hasTerminated(); }; /*TerminationDetector*/ }; /*tascel*/ #endif /*__tascel_TerminationDetector_h__*/ ga-5-3/tascel/src/DenseArray.h0000640005473000001440000001117111500244055015041 0ustar d3n000users#ifndef __DenseArray_h__ #define __DenseArray_h__ #include #include "DataColl.h" namespace tascel { /** * DataColl abstraction for a GlobalArray. * * A limited abstraction for GA data movement to be managed by the * tascel runtime. Note that the same GA could be wrapped by many * DenseArray objects, each providing a potentially different block * view of the same array. */ class DenseArray : public DataColl { private: const int ga; /**< GA being wrapped */ const int ndim; /**< Number of dimensions of GA */ std::vector block; /**< The blocking for this wrapper*/ std::vector dims; /**< The dimensions of the GA */ /** * Compute low index for use in GA call. * * Low index for the block pointed to by idx. * @param[in] idx Pointer to index * @param[in] idxlen Length of index (in bytes) * @param[out] lo Lower bound for the block * @return none */ void computeLo(const void *idx, int idxlen, int *lo); /** * Compute high index for use in GA call. * * High index for the block pointed to by idx. * @param[in] idx Pointer to index * @param[in] idxlen Length of index (in bytes) * @param[out] hi Upper bound for the block * @return none */ void computeHi(const void *idx, int idxlen, int *hi); /** * Compute stride (ld) for use in GA call. * * High index for the block pointed to by idx. * @param[in] idx Pointer to index * @param[in] idxlen Length of index (in bytes) * @param[out] ld ld values for the block * @return none */ void computeLd(const void *idx, int idxlen, int *ld); /** * Combimes computation of lo, hi, and ld arguments of a GA call. * * @param[in] idx Pointer to index * @param[in] idxlen Length of index (in bytes) * @param[out] lo lo values for the block * @param[out] hi hi values for the block * @param[out] ld ld values for the block * @return none */ void computeBounds(const void *idx, int idxlen, int *lo, int *hi, int *ld); public: /** * Construct a dense array object to wrap a GA * * A GA itself it not created. The user is still responsible to * pass a valid GA, and destroy the GA after this object if * destroyed. * @param[in] ga Handle to ga to be wrapped * @param[in] block The size of each block being put of get. * @param[in] len Number of integers pointed to by block. This * should match the number of dimensions of ga. */ DenseArray(int ga, const int *block, int len); /** * @copybrief DataColl::getSize(const void*,int) * @copydetails DataColl::getSize(const void*,int) */ int getSize(const void *idx, int idxlen); /** * @copybrief DataColl::getProc(const void*,int) * @copydetails DataColl::getProc(const void*,int) */ int getProc(const void *idx, int idxlen); /** * @copybrief DataColl::get(const void*,int,void*,int) * @copydetails DataColl::get(const void*,int,void*,int) */ void get(const void *idx, int idxlen, void *buf, int buflen); /** * @copybrief DataColl::put(const void*,int,const void*,int) * @copydetails DataColl::put(const void*,int,const void*,int) */ void put(const void *idx, int idxlen, const void *buf, int buflen); /** * @copybrief DataColl::add(const void*,int,const void*,int) * @copydetails DataColl::add(const void*,int,const void*,int) */ void add(const void *idx, int idxlen, const void *buf, int buflen); /** * @copybrief DataColl::nbGet(const void*,int,void*,int,nbh_t) * @copydetails DataColl::nbGet(const void*,int,void*,int,nbh_t) */ virtual nbh_t nbGet(const void *idx, int idxlen, void *buf, int buflen, nbh_t nbh=0); /** * @copybrief DataColl::nbPut(const void*,int,const void*,int,nbh_t) * @copydetails DataColl::nbPut(const void*,int,const void*,int,nbh_t) */ virtual nbh_t nbPut(const void *idx, int idxlen, const void *buf, int buflen, nbh_t nbh=0); /** * @copybrief DataColl::nbAdd(const void*,int,const void*,int,nbh_t) * @copydetails DataColl::nbAdd(const void*,int,const void*,int,nbh_t) */ virtual void *nbAdd(const void *idx, int idxlen, const void *buf, int buflen, nbh_t nbh=0); /** * @copybrief DataColl::waitHandle(nbh_t) * @copydetails DataColl::waitHandle(nbh_t) */ virtual void waitHandle(nbh_t nbh); }; }; #endif /*__DenseArray_h__*/ ga-5-3/tascel/src/UniformTaskCollSplitData.cc0000640005473000001440000000616711476032113020037 0ustar d3n000users#include "Comm.h" #include "DataColl.h" #include "FuncReg.h" #include "UniformTaskCollSplitData.h" #include "massert.h" #include #include #include #include #include #include #include using namespace std; using namespace tascel; using namespace comm; UniformTaskCollSplitData::UniformTaskCollSplitData(const TaskCollProps &props, const std::vector& _colls, const std::vector& _modes, const std::vector& _idxlens, compute_index_t _ci_fn) : UniformTaskCollectionSplit(props) , ci_fn(_ci_fn) , colls(_colls.begin(), _colls.end()) , modes(_modes.begin(), _modes.end()) , idxlens(_idxlens.begin(), _idxlens.end()) { assert(colls.size() == modes.size()); assert(colls.size() == idxlens.size()); } /*virtual */ UniformTaskCollSplitData::~UniformTaskCollSplitData() { } void UniformTaskCollSplitData::setupDataBufs(vector &data_bufs, vector &data_lens, const vector &idxs) { for(int i=0; igetSize(idxs[i],idxlens[i]); char *dbuf = new char[sz]; data_bufs.push_back(dbuf); data_lens.push_back(sz); switch(modes[i]) { case MODE_RONLY: colls[i]->get(idxs[i], idxlens[i], dbuf, sz); break; case MODE_RDWR: colls[i]->get(idxs[i], idxlens[i], dbuf, sz); break; case MODE_ACC: memset(dbuf, 0, sz); break; } } } void UniformTaskCollSplitData::cleanupDataBufs(vector &data_bufs, vector &data_lens, const vector &idxs) { for(int i=0; iput(idxs[i], idxlens[i], dbuf, sz); break; case MODE_ACC: colls[i]->add(idxs[i], idxlens[i], dbuf, sz); break; } delete [] dbuf; } data_bufs.clear(); data_lens.clear(); } void UniformTaskCollSplitData::process() { int p; bool got_work; barrier(); TslFunc_t fn = frt.get(tfn); char buf[tsk_size]; int tasksDone=0, stealAttempts=0, steals=0; vector idxs; for(int i=0; i data_lens; vector data_bufs; for(int i=0; i #include #include #include #include #include #include "Comm.h" #include "FuncReg.h" #include "massert.h" #include "Sleep.h" #include "UniformTaskCollectionSplit.h" using namespace std; using namespace tascel; using namespace tascel::comm; UniformTaskCollectionSplit::UniformTaskCollectionSplit( const TaskCollProps &props) : UniformTaskCollection(props) , sq(tsk_size, max_ntsks) { } /*virtual */ UniformTaskCollectionSplit::~UniformTaskCollectionSplit() { } void UniformTaskCollectionSplit::process() { int p; bool got_work; barrier(); TslFunc_t fn = frt.get(tfn); char buf[tsk_size]; while (!sq.hasTerminated()) { while (sq.getTask(buf, tsk_size)) { stt.taskTime.startTimer(); fn(this, buf, tsk_size, pldata, pldata_len, vector()); stt.taskTime.stopTimer(); stt.numTasks.inc(); } stt.tdTime.startTimer(); sq.td_progress(); got_work = false; while(got_work == false && !sq.hasTerminated()) { do { p = rand() % nproc(); } while (p == me()); stt.stealTime.startTimer(); got_work = sq.steal(p); stt.stealTime.stopTimer(); stt.numStealAttempts.inc(); } if(got_work) { stt.numSteals.inc(); } if(sq.hasTerminated()) { stt.tdTime.stopTimer(); } } barrier(); } void UniformTaskCollectionSplit::addTask(void *data, int dlen) { massert(dlen == tsk_size); sq.addTask(data, dlen); return; error: throw TSL_ERR; } ga-5-3/tascel/src/StealingStats.cc0000640005473000001440000000133211556622013015732 0ustar d3n000users#include "StealingStats.h" #include "Comm.h" #include #include using namespace tascel; using namespace tascel::comm; void StealingStats::print() const { const int np = nproc(); const int myid = me(); if(myid==0) { printf(" pid #stealattempts #steals #tasks Steal-time Task-time td-time\n"); printf("================================================================\n"); } for(int i=0; i namespace tascel { class UniformTaskCollection; /** * Handle for a registered tascel function. */ typedef int TslFunc; /** * Tascel function type. * * Takes a pointer to a task collection and a user-defined data structure. * The function is expected to cast the given data to an appropriate * type. Some of the arguments depend on the task collection that is * invoking the function and may be unitialized. * * @param[in] coll Task collection * @param[in] dscr User-defined task descriptor * @param[in] dscr_len Length of the task descriptor * @param[in] pldata Pointer to process-local data * @param[in] pldata_len Length of process-local data * @param[in,out] data_bufs Vector of buffers for use by the task */ typedef void (*TslFunc_t)(UniformTaskCollection *coll, void *dscr, int dscr_len, void *pldata, int pldata_len, std::vector data_bufs); /** * Function Registration Table for tascel functions. * * A function registration table is necessary because the addresses of the * functions are specific to the address space of each process. For this * table to work correctly, the table must be constructed collectively and * functions added to the table collectively. Retrieving a function need * not be (and will most often not be) collective. * * The table is required to live as long as it is being used in a task * collection. */ class TslFuncRegTbl { private: std::vector ftbl; /**< the function lookup 'table' */ public: /** * Constructs the function lookup table. */ TslFuncRegTbl(); /** * Copy constructor. */ TslFuncRegTbl(const TslFuncRegTbl &that); /** * Destroys the function lookup table. */ ~TslFuncRegTbl(); /** * Registers a function within the table and returns a handle to the * function. * * This is a collective operation. * * @return handle to the registered function */ TslFunc add(TslFunc_t f); /** * Retrieves the actual function within the address space of the caller. * * @param[in] fn handle to the function to retrieve * @return the tascel function */ TslFunc_t get(TslFunc fn) const; /** * Assignment operator. */ TslFuncRegTbl& operator = (const TslFuncRegTbl &that); }; /*TslFuncRegTbl*/ }; /*tascel*/ #endif /*__tascel_TslFuncReg_h__*/ ga-5-3/tascel/src/SplitQueue.h0000640005473000001440000001005611467703133015116 0ustar d3n000users#ifndef __tascel_SplitQueue_h__ #define __tascel_SplitQueue_h__ #include "TerminationDetector.h" namespace tascel { /** * A set of task queues shared among processes. * * Each process has a local queue with a maximum number of possible tasks. * A process can steal tasks from any other process's queue and have * tasks stolen from its own queue. * * This implementation splits the queue into a local and shared portion. * This allows the local process to modify its queue without locking. */ class SplitQueue { private: /** * The local queue state which other procs can modify. */ struct sq_state_t { int dirty; /**< whether a steal has occurred */ int split; /**< the split between head and tail */ int tail; /**< the tail of the queue */ int size_shared;/**< the number of shared tasks in the queue */ }; const int max_ntsks; /**< max number of tasks allowed in queue */ const int tsk_size; /**< size of a single task */ char **q; /**< addresses of queue data on all procs */ sq_state_t **sq_state; /**< addresses of queue state on all procs */ int *head; /**< pointer to this procs head_val */ int *tail; /**< pointer to this procs tail state */ int *size_local; /**< pointer to this procs size_local_val */ int *size_shared; /**< pointer to this procs size_shared state */ int *split; /**< pointer to this procs split state */ int *dirty; /**< pointer to this procs dirt state */ int size_local_val; /**< size of local portion of local queue */ int head_val; /**< index of the local queue's head */ TerminationDetector td; /**< the termination detector */ /** * Moves tasks from the shared portion to the local portion. * * @param[in] _nacquire number of tasks to move */ int acquireFromShared(int _nacquire); /** * Moves tasks from the local portion to the shared portion. * * @param[in] ndonate number of tasks to move */ void releaseToShared(int ndonate); public: /** * Constructs the SplitQueue instance. * * @param[in] tsk_size size of a single task * @param[in] max_ntsks max number of tasks allowed in a queue * * @pre tsk_size must be the same value on all procs * @pre max_ntsks must be the same value on all procs */ SplitQueue(int tsk_size, int max_ntsks); /** * Destroys the SplitQueue instance. */ ~SplitQueue(); /** * Returns true if the local queue is empty. */ bool empty() const; /** * Returns true if the local queue is full. */ bool full() const; /** * Retrieves a task from the private portion of the local queue. * * @param[out] dscr the retrieved task * @param[in] dlen size of the retrieved task * * @pre dscr is not NULL * @pre dlen == tsk_size */ bool getTask(void *dscr, int dlen); /** * Adds a task to the private portion of the local queue. * * @param[in] dscr the task to add * @param[in] dlen size of the added task * * @pre dscr is not NULL * @pre dlen == tsk_size */ void addTask(void *dscr, int dlen); /** * Steals one or more tasks from the given proc's shared portion. * * @param[in] proc to steal from */ bool steal(int proc); /** * Returns true if all of the tasks have been processed. */ bool hasTerminated(); /** * Returns the number of tasks in the entire local queue. */ int numTasks() const { return *size_local + *size_shared; } /** * Runs the termination detector. */ void td_progress(); }; /* SplitQueue */ }; /* tascel */ #endif /*__tascel_SplitQueue_h__*/ ga-5-3/tascel/NOTES0000640005473000001440000000341311467703133012670 0ustar d3n000users * op: Process a task pool until all tasks have been executed * op: Insert task into task pool Assertions to optimize for: * All tasks are of the same size (or differebt) * All tasks have been inserted before any task is processed * All tasks are sequential (or parallel) * Tasks perform no communication and require no data * Task perform communication, data required specified * Tasks can create other tasks * Data is in memory or disk Features: * Choices of termination detection and signalling -- GA_Sync() style global termination detection -- Wait for global termination of a specific taskpool -- ala split-phase barriers API list (more rough notes to be structured into a specification later): ------------------------------------------------------------------------ 1. Single global counter. Supports atomic read increment (and that is it) -- Identifying the task from the counter done by user -- Termination detection done by user (typically GA_Sync) 2. Single global counter with known bound on number of tasks. API would support increment and check whether more tasks exist. -- Identifying the task from the counter done by user -- Termination detection supported by API 3. Single global counter backing a task iterator. -- Task created by the API from the iterator -- Termination detection by API 4. Single global counter backing a global list of tasks 5. 2-3 with global counters in multiple processes. 1 does not make sense without allowing repeated task execution. When backing an iterator, the iterator can be sliced appropriately. 6. Distributed tasks queues with work stealing. tasks are integers. 7. Distributed task queues with work stealing. all tasks of the same size 8. Distributed task queues with work stealing. tasks of different sizes. ga-5-3/tascel/aclocal.m40000640005473000001440000011562412140267645013727 0ustar d3n000users# generated automatically by aclocal 1.11.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, # 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless `enable' is passed literally. # For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2009, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few `make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using `$V' instead of `$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../m4/ga.m4]) m4_include([../m4/ga_ar.m4]) m4_include([../m4/ga_arg_parse.m4]) m4_include([../m4/ga_blas.m4]) m4_include([../m4/ga_check_package.m4]) m4_include([../m4/ga_cross_compiling.m4]) m4_include([../m4/ga_f2c_cmdargs.m4]) m4_include([../m4/ga_f2c_match_types.m4]) m4_include([../m4/ga_f2c_nomain.m4]) m4_include([../m4/ga_f2c_string.m4]) m4_include([../m4/ga_f77_check_sizeof.m4]) m4_include([../m4/ga_f77_cpp_symbols.m4]) m4_include([../m4/ga_f77_disable.m4]) m4_include([../m4/ga_f77_fixed.m4]) m4_include([../m4/ga_f77_integer_size.m4]) m4_include([../m4/ga_f77_library_ldflags.m4]) m4_include([../m4/ga_f77_mismatch_type.m4]) m4_include([../m4/ga_f77_underscore.m4]) m4_include([../m4/ga_lapack.m4]) m4_include([../m4/ga_mpi_test_disable.m4]) m4_include([../m4/ga_mpi_unwrap.m4]) m4_include([../m4/ga_mpicc.m4]) m4_include([../m4/ga_mpicc_test.m4]) m4_include([../m4/ga_mpicxx.m4]) m4_include([../m4/ga_mpicxx_test.m4]) m4_include([../m4/ga_mpif77.m4]) m4_include([../m4/ga_mpif77_test.m4]) m4_include([../m4/ga_msg_comms.m4]) m4_include([../m4/ga_scalapack.m4]) m4_include([../m4/ga_suppress_msg.m4]) m4_include([../m4/ga_target.m4]) m4_include([../m4/ga_with_help.m4]) m4_include([m4/libtool.m4]) m4_include([m4/lt_obsolete.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) ga-5-3/tascel/m4/0000750005473000001440000000000012275260571012375 5ustar d3n000usersga-5-3/tascel/m4/ltoptions.m40000640005473000001440000003007311650323546014674 0ustar d3n000users# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) ga-5-3/tascel/m4/ltversion.m40000640005473000001440000000126211650323546014664 0ustar d3n000users# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) ga-5-3/tascel/m4/lt_obsolete.m40000640005473000001440000001375611467703133015165 0ustar d3n000users# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) ga-5-3/tascel/m4/libtool.m40000640005473000001440000105721611650323546014316 0ustar d3n000users# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS ga-5-3/tascel/m4/ltsugar.m40000640005473000001440000001042411467703133014320 0ustar d3n000users# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) ga-5-3/tascel/examples/0000750005473000001440000000000012275260573013675 5ustar d3n000usersga-5-3/tascel/examples/scf/0000750005473000001440000000000012275260573014450 5ustar d3n000usersga-5-3/tascel/examples/scf/twoelcpp.cc0000640005473000001440000002716211561045771016623 0ustar d3n000users#include "ga.h" #include "macdecls.h" #include #include #include #include // #define min(x,y) (((x)<=(y))?(x):(y)) #define maxatom 286 #define maxnbfn (15*maxatom) #define mxiter 30 #define maxnnbfn ((maxnbfn)*(maxnbfn+1)/2) #define pi 3.141592653589793d0) #define tol (0.5e-3) #define tol2e (1.0e-6) #define ichunk 20 #ifdef __cplusplus extern "C" { #endif extern int armci_me; void nga_get_(Integer *g_a, Integer *lo, Integer *hi, void *buf, Integer *ld); void g_(double *gg, Integer *i, Integer *j, Integer *k, Integer *l); double contract_matrices_(Integer *g_a, Integer *g_b); void new_nga_acc_(Integer *g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, void *alpha); void nga_acc_(Integer *g_a, Integer *lo, Integer *hi, void *buf, Integer *ld, void *alpha); void ctwoel_(Integer *g_schwarz, Integer *g_dens, Integer *g_fock, double *schwmax, double *etwo, long long *pnbfn, long long *icut1, long long *icut2, long long *icut3, long long *icut4); #ifdef __cplusplus } #endif static void cpptwoel(Integer g_schwarz, Integer g_dens, Integer g_fock, double schwmax, Integer nbfn, long long *icut1, long long *icut2, long long *icut3, long long *icut4); void ctwoel_(Integer *g_schwarz, Integer *g_dens, Integer *g_fock, double *schwmax, double *etwo, long long *pnbfn, long long *icut1, long long *icut2, long long *icut3, long long *icut4) { const Integer nbfn = (Integer)*pnbfn; long long ijcnt,klcnt,ijklcnt; ijcnt = *icut1; klcnt = *icut2; ijklcnt = *icut3; cpptwoel(*g_schwarz, *g_dens, *g_fock, *schwmax, nbfn, icut1, icut2, icut3, icut4); *etwo = 0.5*contract_matrices_(g_fock,g_dens); ijcnt = *icut1 - ijcnt; klcnt = *icut2 - klcnt; ijklcnt = (*icut3) - ijklcnt; *icut4 = *icut3; if (*icut3 <= 0L) { /* no integrals may be calculated if there is no work for */ /* this node (ichunk too big), or, something is wrong */ printf("no two-electron integrals computed by node %d\n", GA_Nodeid()); fflush(stdout); } return; } /************************************************************************* * * the code involving task pool stuff follows * *************************************************************************/ //#include #include #include #include using namespace std; using namespace tascel; static int next_4chunk(int g_counter, Integer nbfn, Integer lo[4], Integer hi[4], Integer *ilo, Integer *jlo, Integer *klo, Integer *llo) { const long one=1; const int zero=0; long imax, itask; Integer itmp; long long total_ntsks; imax = nbfn/ichunk; if (nbfn - ichunk*imax > 0) { imax = imax + 1; } total_ntsks = imax*imax*imax*imax; itask = NGA_Read_inc(g_counter, (int *)&zero, one); /* printf("%d: itask=%d total_ntsks=%lf\n", armci_me, (int)itask, (double)total_ntsks); */ if (itask < 0) { printf("next_4chunk: itask negative: %d imax:%d nbfn:%d ichunk:%d\n", (int) itask, (int)imax, (int)nbfn, (int)ichunk); printf("probable GA integer precision problem if %lf > 2^31\n", pow(imax*1.0, 4)); fflush(stdout); assert(0); } if (itask < total_ntsks) { itmp = itask; *ilo = itmp % imax; itmp /= imax; *jlo = itmp %imax; itmp /= imax; *klo = itmp % imax; itmp /= imax; assert(itmp < imax); *llo = itmp; lo[0] = *ilo*ichunk; lo[1] = *jlo*ichunk; lo[2] = *klo*ichunk; lo[3] = *llo*ichunk; hi[0] = min((*ilo+1)*ichunk,nbfn) - 1; hi[1] = min((*jlo+1)*ichunk,nbfn) - 1; hi[2] = min((*klo+1)*ichunk,nbfn) - 1; hi[3] = min((*llo+1)*ichunk,nbfn) - 1; return 1; } else { return 0; } } static void clean_chunk(double *chunk) { int i; for(i=0; i 0) { imax = imax + 1; } total_ntsks = imax*imax*imax*imax; if (itask < 0) { printf("next_4chunk: itask negative: %d imax:%d nbfn:%d ichunk:%d\n", (int) itask, (int)imax, (int)nbfn, (int)ichunk); printf("probable GA integer precision problem if %lf > 2^31\n", pow(imax*1.0, 4)); fflush(stdout); assert(0); } assert(itask < total_ntsks); itmp = itask; *ilo = itmp % imax; itmp /= imax; *jlo = itmp %imax; itmp /= imax; *klo = itmp % imax; itmp /= imax; assert(itmp < imax); *llo = itmp; lo[0] = *ilo*ichunk; lo[1] = *jlo*ichunk; lo[2] = *klo*ichunk; lo[3] = *llo*ichunk; hi[0] = min((*ilo+1)*ichunk,nbfn) - 1; hi[1] = min((*jlo+1)*ichunk,nbfn) - 1; hi[2] = min((*klo+1)*ichunk,nbfn) - 1; hi[3] = min((*llo+1)*ichunk,nbfn) - 1; } static int compute_owner(long itask, const vector &colls, int arrid, long nbfn) { const int size = 2*sizeof(int); char idx[size]; long int ilo, jlo, klo, llo, lo[4], hi[4], tmp; int *iidx = (int *)idx; compute_lo_hi(itask, nbfn, lo, hi, &ilo, &jlo, &klo, &llo); switch(arrid) { case 0: iidx[0] = lo[1]/ichunk; iidx[1] = lo[0]/ichunk; break; case 1: iidx[0] = lo[3]/ichunk; iidx[1] = lo[2]/ichunk; break; case 2: iidx[0] = lo[3]/ichunk; iidx[1] = lo[2]/ichunk; break; case 3: iidx[0] = lo[3]/ichunk; iidx[1] = lo[1]/ichunk; break; case 4: iidx[0] = lo[1]/ichunk; iidx[1] = lo[0]/ichunk; break; case 5: iidx[0] = lo[2]/ichunk; iidx[1] = lo[0]/ichunk; break; default: assert(0); } return colls.at(arrid)->getProc(idx,size); } static void compute_index(void *dscr, int dscr_len, void *pldata, int pldata_len, int arrid, void *idx, int idxlen) { assert(dscr_len == sizeof(task_dscr_t)); assert(arrid >=0 && arrid<6); assert(idxlen == 2*sizeof(int)); const long itask = ((task_dscr_t*)dscr)->id; int *iidx = (int *)idx; task_plo_t *ptplo = (task_plo_t*)pldata; assert(pldata_len == sizeof(task_plo_t)); const long int nbfn = ptplo->nbfn; long int ilo, jlo, klo, llo, lo[4], hi[4], tmp; compute_lo_hi(itask, nbfn, lo, hi, &ilo, &jlo, &klo, &llo); switch(arrid) { case 0: iidx[0] = lo[1]/ichunk; iidx[1] = lo[0]/ichunk; break; case 1: iidx[0] = lo[3]/ichunk; iidx[1] = lo[2]/ichunk; break; case 2: iidx[0] = lo[3]/ichunk; iidx[1] = lo[2]/ichunk; break; case 3: iidx[0] = lo[3]/ichunk; iidx[1] = lo[1]/ichunk; break; case 4: iidx[0] = lo[1]/ichunk; iidx[1] = lo[0]/ichunk; break; case 5: iidx[0] = lo[2]/ichunk; iidx[1] = lo[0]/ichunk; break; default: assert(0); } } static void twoel_task(UniformTaskCollection *utc, void *bigd, int bigd_len, void *pldata, int pldata_len, vector data_bufs); static void cpptwoel(Integer g_schwarz, Integer g_dens, Integer g_fock, double schwmax, Integer nbfn, long long *icut1, long long *icut2, long long *icut3, long long *icut4) { int dotask; int g_counter, ione = 1; task_dscr_t tdscr; task_plo_t tplo; { tplo.nbfn = nbfn; tplo.schwmax = schwmax; tplo.icut1 = icut1; tplo.icut2 = icut2; tplo.icut3 = icut3; tplo.icut4 = icut4; tplo.g_schwarz = g_schwarz; tplo.g_dens = g_dens; tplo.g_fock = g_fock; TslFuncRegTbl frt; TslFunc tf = frt.add(twoel_task); vector colls; int block[2] = {ichunk, ichunk}; DenseArray coll_schwarz(g_schwarz, block, 2); DenseArray coll_dens(g_dens, block, 2); DenseArray coll_fock(g_fock, block, 2); /**FIXME: modes are associated with arrays and not specific data movement operation*/ colls.push_back(&coll_schwarz); colls.push_back(&coll_schwarz); colls.push_back(&coll_dens); colls.push_back(&coll_dens); colls.push_back(&coll_fock); colls.push_back(&coll_fock); vector modes(4, MODE_RONLY); vector idxlens(6, 2*sizeof(int)); modes.push_back(MODE_ACC); modes.push_back(MODE_ACC); const long me = GA_Nodeid(); const long nproc = GA_Nnodes(); const long imax = nbfn/ichunk + ((nbfn%ichunk) ? 1 : 0); const long total_ntasks = imax*imax*imax*imax; const long ntasks_per_proc = (long)ceil(1.0*total_ntasks/nproc); const long tasklo = ntasks_per_proc * me; const long taskhi = min(tasklo+ntasks_per_proc,total_ntasks)-1; TaskCollProps props; props.functions(tf,frt).taskSize(sizeof(task_dscr_t)) #define EVEN_DISTRIBUTION 0 #if EVEN_DISTRIBUTION .maxTasks(ntasks_per_proc) #else .maxTasks(total_ntasks) #endif .localData(&tplo,sizeof(tplo)); UniformTaskCollSplitData utc(props, colls, modes, idxlens, compute_index); #if EVEN_DISTRIBUTION for(long i=tasklo; i<=taskhi; i++) #else for (long i=0; i data_bufs) { assert(_bigd!=NULL); assert(bigd_len == sizeof(task_dscr_t)); assert(pldata!=NULL); assert(pldata_len == sizeof(task_plo_t)); assert(data_bufs.size()==6); task_dscr_t *ptdscr = (task_dscr_t*)_bigd; task_plo_t *ptplo = (task_plo_t*)pldata; tbuf_t *s_ij = (tbuf_t*)data_bufs[0]; tbuf_t *s_kl = (tbuf_t*)data_bufs[1]; tbuf_t *d_kl = (tbuf_t*)data_bufs[2]; tbuf_t *d_jl = (tbuf_t*)data_bufs[3]; tbuf_t *f_ij = (tbuf_t*)data_bufs[4]; tbuf_t *f_ik = (tbuf_t*)data_bufs[5]; int ich; Integer lch; Integer lo_ik[2],hi_ik[2],lo_jl[2],hi_jl[2]; Integer i,j,k,l,iloc,jloc,kloc,lloc,ld; double gg; Integer ione = 1; double one = 1.0; Integer nbfn; long lo[4], hi[4]; long it, jt, kt, lt; long long *icut1, *icut2, *icut3, *icut4; Integer g_schwarz, g_dens, g_fock; double schwmax; long itask = ptdscr->id; nbfn = ptplo->nbfn; schwmax = ptplo->schwmax; icut1 = ptplo->icut1; icut2 = ptplo->icut2; icut3 = ptplo->icut3; icut4 = ptplo->icut4; g_schwarz = ptplo->g_schwarz; g_dens = ptplo->g_dens; g_fock = ptplo->g_fock; ld = maxnbfn; ich = lch = ichunk; compute_lo_hi(itask, nbfn, lo, hi, &it, &jt, &kt, <); assert(ich == hi[0]-lo[0]+1); assert(ich == hi[2]-lo[2]+1); clean_chunk((double*)f_ij->buf); clean_chunk((double *)f_ik->buf); for(i = lo[0]; i<=hi[0]; i++) { iloc = i-lo[0]; for(j = lo[1]; j<= hi[1]; j++) { jloc = j-lo[1]; if (s_ij->buf[jloc][iloc]*(schwmax) < tol2e) { *icut1 = *icut1 + (hi[2]-lo[2]+1)*(hi[3]-lo[3]+1); } else { /* *cnt1+=1;*/ for(k = lo[2]; k<=hi[2]; k++) { kloc = k-lo[2]; for(l = lo[3]; l<=hi[3]; l++) { lloc = l-lo[3]; if (s_ij->buf[jloc][iloc] * s_kl->buf[lloc][kloc] < tol2e) { *icut2 = *icut2 + 1; } else { Integer _i=i+1, _j=j+1, _k=k+1, _l=l+1; g_(&gg, &_i, &_j, &_k, &_l); /* *cnt2 += 1;*/ f_ij->buf[jloc][iloc] = f_ij->buf[jloc][iloc] + gg*d_kl->buf[lloc][kloc]; f_ik->buf[kloc][iloc] = f_ik->buf[kloc][iloc] - 0.5*gg*d_jl->buf[lloc][jloc]; *icut3 = *icut3 + 1; } } } } } } } ga-5-3/tascel/examples/scf/main.c0000640005473000001440000000172211467703133015537 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include "ga.h" #define SCF F77_FUNC(scf,SCF) #define TIMER F77_FUNC_(timer,TIMER) #define UTIL_TIME F77_FUNC_(util_time,UTIL_TIME) #define UTIL_MTIME F77_FUNC_(util_mtime,UTIL_MTIME) double UTIL_TIME() { static int first_call = 1; static double first_time, last_time, cur_time; double diff; if (first_call) { first_time = MPI_Wtime(); first_call = 0; last_time = -1e-9; } cur_time = MPI_Wtime(); diff = cur_time - first_time; /* address crappy MPI_Wtime: consectutive calls must be at least 1ns apart */ if(diff - last_time < 1e-9) { diff +=1e-9; } last_time = diff; return diff; /* Add logic here for clock wrap */ } double TIMER() { return UTIL_TIME()*0.01; } int main(int argc, char **argv) { MPI_Init(&argc, &argv); GA_Initialize(); SCF(); GA_Terminate(); MPI_Finalize(); return 0; } ga-5-3/tascel/examples/scf/output.F0000640005473000001440000000515711467703133016124 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif subroutine output (z,rowlow,rowhi,collow,colhi,rowdim,coldim, $ nctl) c....................................................................... c output prints a real*8 matrix in formatted form with numbered rows c and columns. the input is as follows; c matrix(*,*).........matrix to be output c rowlow..............row number at which output is to begin c rowhi...............row number at which output is to end c collow..............column number at which output is to begin c colhi...............column number at which output is to end c rowdim..............row dimension of matrix(*,*) c coldim..............column dimension of matrix(*,*) c nctl................carriage control flag; 1 for single space c 2 for double space c 3 for triple space c the parameters that follow matrix are all of type integer*4. the c program is set up to handle 5 columns/page with a 1p5d24.15 format for c the columns. if a different number of columns is required, change c formats 1000 and 2000, and initialize kcol with the new number of c columns. c author; nelson h.f. beebe, quantum theory project, university of c florida, gainesville c....................................................................... C$Id: output.F,v 1.1 2005/03/08 23:58:03 d3g293 Exp $ implicit double precision (a-h,o-z) #include "mafdecls.fh" #include "global.fh" integer rowlow,rowhi,collow,colhi,rowdim,coldim,begin,kcol dimension z(rowdim,coldim) dimension asa(3) data column/8hcolumn /,asa/8h ,8h00000000 , 1 8h-------- /,blank/8h / data kcol/8/ data zero/0.d00/ if (ga_nodeid().ne.0) return do 11 i=rowlow,rowhi do 10 j=collow,colhi if (z(i,j).ne.zero) go to 15 10 continue 11 continue write (6,3000) 3000 format (/' zero matrix'/) go to 3 15 continue if (rowhi.lt.rowlow) go to 3 if (colhi.lt.collow) go to 3 last = min0(colhi,collow+kcol-1) do 2 begin = collow,colhi,kcol write (6,1000) (column,i,i = begin,last) do 1 k = rowlow,rowhi do 4 i=begin,last if (z(k,i).ne.zero) go to 5 4 continue go to 1 c 5 write (6,2000) k,(z(k,i), i = begin,last) 1 continue last = min0(last+kcol,colhi) 2 continue 3 return 1000 format (/11x,7(a3,i3,3x),(a3,i3)) 2000 format ('row',i4,1x,8f9.4) end ga-5-3/tascel/examples/scf/be16.inpt0000640005473000001440000000054411467703133016101 0ustar d3n000users16 4 0.000 0.000 0.000 4 4.000 0.000 0.000 4 8.000 0.000 0.000 4 12.000 0.000 0.000 4 16.000 0.000 0.000 4 20.000 0.000 0.000 4 24.000 0.000 0.000 4 28.000 0.000 0.000 4 32.000 0.000 0.000 4 36.000 0.000 0.000 4 40.000 0.000 0.000 4 44.000 0.000 0.000 4 48.000 0.000 0.000 4 52.000 0.000 0.000 4 56.000 0.000 0.000 4 60.000 0.000 0.000 ga-5-3/tascel/examples/scf/integ.F0000640005473000001440000000571611467703133015673 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif double precision function exprjh(x) C$Id: integ.F,v 1.1 2005-03-08 23:58:03 d3g293 Exp $ double precision x c c dumb solution to underflow problems on sun c if (x.lt.-37.0d0) then exprjh = 0.0d0 else exprjh = exp(x) endif end subroutine setfm implicit double precision (a-h,o-z) common/values/fm(2001,5),rdelta,delta,delo2 dimension t(2001),et(2001) c c initalize common block for computation of f0 by recursion down c from f200 c delta=28.0d0/2000.0d0 delo2=delta*0.5d0 rdelta=1.0d0/delta maxm=4 do 10 i=1,2001 tt=delta*dble(i-1) et(i)=exprjh(-tt) t(i)=2.0d0*tt fm(i,maxm+1)=0.0d0 10 continue do 20 i=200,maxm,-1 rr=1.0d0/dble(2*i+1) do 30 ii=1,2001 fm(ii,maxm+1)=(et(ii)+t(ii)*fm(ii,maxm+1))*rr 30 continue 20 continue do 40 i=maxm,1,-1 rr=1.0d0/dble(2*i-1) do 50 ii=1,2001 fm(ii,i)=(et(ii)+t(ii)*fm(ii,i+1))*rr 50 continue 40 continue c end subroutine f0(value, t) implicit real*8 (a-h,o-z) common/values/fm(2001,5),rdelta,delta,delo2 parameter(fac0=0.88622692545276d0, $ rhalf=0.5d0,rthird=0.3333333333333333d0,rquart=0.25d0) data t0/28.d0/ c c computes f0 to a relative accuracy of better than 4.e-13 for all t. c uses 4th order taylor expansion on grid out to t=28.0 c asymptotic expansion accurate for t greater than 28 c if(t.ge.t0) then value = fac0 / sqrt(t) else n = idint((t+delo2)*rdelta) x = delta*dble(n)-t n = n+1 value = fm(n,1)+x*(fm(n,2)+rhalf*x*(fm(n,3)+ $ rthird*x*(fm(n,4)+rquart*x*fm(n,5)))) endif c end subroutine addin(g, i, j, k, l, fock, dens, iky) implicit double precision (a-h, o-z) dimension fock(*), dens(*), iky(*) c c add (ij|kl) into the fock matrix c gg = g g2 = gg+gg g4 = g2+g2 ik = iky(i) + k il = iky(i) + l ij = iky(i) + j jk = iky(max(j,k)) + min(j,k) jl = iky(max(j,l)) + min(j,l) kl = iky(k) + l aij = g4*dens(kl)+fock(ij) fock(kl) = g4*dens(ij)+fock(kl) fock(ij) = aij gil=gg if(i.eq.k.or.j.eq.l) gg = g2 if(j.eq.k) gil = g2 ajk = fock(jk) - gil*dens(il) ail = fock(il) - gil*dens(jk) aik = fock(ik) - gg*dens(jl) fock(jl) = fock(jl) - gg*dens(ik) fock(jk) = ajk fock(il) = ail fock(ik) = aik c end subroutine dfill(n,val,a,ia) implicit real*8 (a-h,o-z) dimension a(*) c c initialise double precision array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end ga-5-3/tascel/examples/scf/README0000640005473000001440000000206411467703133015327 0ustar d3n000usersThis is a converted version of the scf test code in the tcgmsg directory that solves the Hartree-Fock equations for a cluster of beryllium atoms. The main modifications are that this code is uses distributed data instead of replicated data and is based on the GA function calls instead of TCGMSG. The input is a simple XYZ format file of the form:: 1 Number of beryllium atoms 2 Blank line 3 4 x y z 4 4 x y z . . . Other parameters that control convergence etc. can be found in the cscf.h file. The two-electron Fock build does not make use of the 8-fold symmetry of the two-electron integrals. The default diagonalization routine makes use of a similarity transform so that only a standard eigenvalue problem needs to be solved. A direct solution using a generalized eigenvalue solver can be had by setting the USE_TRANSFORM compiler directive to 0 in the top of the scf.F file. A larger system containing 16 atoms has also been included in this directory. To run the larger problem, just copy the file be16.inpt to be.inpt and run the code. ga-5-3/tascel/examples/scf/timer.F0000640005473000001440000000125211467703133015674 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif double precision function timer_dontuse() c c return the time since the last call to timer. c c must be initialized by calling once and throwing away the c value c ... use cpu time on multi-user machines c ... use elapsed time on dedicated or single user machines. c *mdc*if unix * real*4 dtime, tt(2) * timer = dble(dtime(tt)) *mdc*elseif tcgmsg C$Id: timer.F,v 1.1 2005-03-08 23:58:03 d3g293 Exp $ #if 0 #include "mpif.h" save mlast data mlast/0/ m = MPI_WTIME() timer = dble(m - mlast) * 0.01d0 mlast = m *mdc*endif c #endif timer_dontuse = 0.0d0 end ga-5-3/tascel/examples/scf/cscf.h0000640005473000001440000000603711467703133015542 0ustar d3n000usersc c include file defining common /cscf/ c c constant parameters are set in cscf, parameters are set c after reading input. c c maxatom = maximum no. of atoms (constant parameter) c maxnbfn = maximum no. of bas. fnct.(constant parameter) c maxnnbfn = maxnbfn*(maxnbfn+1)/2 (constant parameter) c natom = no. of atoms (parameter) c nbfn = no. of basis functions (parameter) c nnbfn = nbfn*(nbfn+1)/2 (parameter) c nocc = no. of occupied orbitals (parameter) c mxiter = maximim no. of iterations(constant parameter) c tol = convergence criterion (constant parameter) c pi = a familiar constant (constant parameter) c tol2e = 2-e integral screening (constant parameter) c c the remainder is initialized in block data or in the c routine ininrm (rnorm and iky) c c enrep = nuclear repulsion energy c q(1:natom) = nuclear charge of atom c ax(1:natom) = x co-ordinate of atom c ay(1:natom) = y ... c az(1:natom) = z ... c x(1:nbfn) = x co-ordinate of basis function c y(1:nbfn) = y ... c z(1:nbfn) = z ... c expnt(1:nbfn)= exponent of gaussian c rnorm(1:nbfn)= normalization constant of gaussian c iky(1:nbfn) = iky(i) = i*(i-1)/2 to speed up fock build c icut1 = no. of successful ij 2-e screening tests c icut2 = no. of successful ijkl 2-e screening tests c icut3 = no. of 2-e integrals computed c parameter (maxatom = 286) !cste original value 50 parameter (maxnbfn =15*maxatom, mxiter = 30) parameter (maxnnbfn = maxnbfn*(maxnbfn+1)/2) parameter (pi = 3.141592653589793d0) parameter (tol= 0.5d-3) parameter (tol2e=1.0d-6) c common /cscf/ $ enrep, q(maxatom), ax(maxatom), ay(maxatom), az(maxatom), $ x(maxnbfn), y(maxnbfn), z(maxnbfn), expnt(maxnbfn), $ rnorm(maxnbfn),iky(maxnbfn), icut1, icut2, icut3, icut4, $ natom, nocc, nbfn, nnbfn double precision enrep, q, ax, ay, az, x, y, z, expnt, rnorm integer*8 iky, icut1, icut2, icut3, icut4, natom, nocc, nbfn, $ nnbfn c c Global array parameters used in calculations: c c ichunk: chunk size for distributing workload c c g_counter: global array used to assign next task c g_dens: global array used to store density matrix c g_fock: global array used to store fock matrix c g_tfock: global array used to store transformed fock matrix c g_schwarz: global array used to store schwarz matrix c g_work: global array used to store work matrix c g_ident: global array used to store identity matrix c g_orbs: global array used to store orbital vectors c parameter (ichunk = 20) !cste original value 10 common /g_arrays/ eigv(maxnbfn), $ g_counter, g_dens, g_fock, g_tfock, g_schwarz, g_work, $ g_ident, g_orbs double precision eigv integer g_counter, g_dens, g_fock, g_tfock, g_schwarz, g_work, $ g_ident, g_orbs ga-5-3/tascel/examples/scf/be.inpt0000640005473000001440000000013311467703133015724 0ustar d3n000users4 4 0.000 0.000 0.000 4 4.000 0.000 0.000 4 8.000 0.000 0.000 4 12.000 0.000 0.000 ga-5-3/tascel/examples/scf/scf.F0000640005473000001440000011250411471662043015331 0ustar d3n000users#define CTWOEL 1 #if HAVE_CONFIG_H # include "config.fh" #endif subroutine scf C$Id: scf.F,v 1.18 2007/03/23 19:24:36 d3g293 Exp $ implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mpif.h" c integer*8 nints, maxint !cste c c CAUTION: integer precision requirements c nints, maxint, etc. are proportional to the number of basis functions c to the fourth power! 216**4 is greater than the largest number c that can be represented as a 32-bit signed interger, so 64-bit c arithmetic is needed to count integrals when calculating more than c 14 Be atoms with 15 basis functions each. Since integrals are counted c over all iterations, 18 iterations with 7 atoms can result in precision c problems. Note that the wave function could be calculated correctly c for much larger basis sets without 64-bit integers because the required c indexing is usually proportional to nbfn**2, which is good to 46,340 c basis functions, except that the task counter runs as (nbfn/ichunk)**4, c so with ichunk = 10, 32-bit integers yield correct wavefunctions out to c 2145 basis functions (maxatom=143), or 4290 (maxatom=286) with ichunk = 20, ... c c This warning applies to the Global Arrays implementation as well! c functions of special concern are ga_igop and nga_read_inc. c #define USE_TRANSFORM 1 integer heap, stack data tinit, tonel, ttwoel, tdiag, tdens, tprint /6*0.0d0/ data eone, etwo, energy, deltad /4*0.0d0/ c c initalize the parallel message passing environment c #if 0 integer ierr call mpi_init(ierr) call ga_initialize() #endif c c Allocate memory c heap = 32000000 stack = 32000000 if (.not.ma_init(MT_DBL, stack, heap)) + call ga_error("ma_init failed",-1) call flush(6) me = ga_nodeid() nproc = ga_nnodes() c c initialize a bunch of stuff and initial density matrix c rjunk = timer() c c get input from file be.inpt c call input c c create and allocate global arrays c call setarrays if (ga_nodeid().eq.0) write(6,*) 'bytes of memory used by node 0:' + ,ga_inquire_memory() call ininrm c c create initial guess for density matrix by using single atom c densities c call denges tinit = timer() #if USE_TRANSFORM c c make initial orthogonal orbital set for solution method using c similarity transform c call makeob #endif c c make info for sparsity test c call makesz(schwmax) c c print preliminary data before any long compute segments start if (ga_nodeid().eq.0) call flush(6) c c *** iterate *** c do 10 iter = 1, mxiter c c make the one particle contribution to the fock matrix c and get the partial contribution to the energy c call oneel(schwmax, eone) tonel = tonel + timer() c c compute the two particle contributions to the fock matrix and c get the total energy. c #if CTWOEL call ctwoel(g_schwarz, g_dens, g_fock, schwmax, etwo, * nbfn, icut1, icut2, icut3, icut4) #else call twoel(schwmax, etwo) #endif ttwoel = ttwoel + timer() c c Diagonalize the fock matrix. The diagonalizers used in this c subroutine are actually sequential, not parallel. c call diagon(tester,iter) tdiag = tdiag + timer() c c make the new density matrix in g_work from orbitals in g_orbs, c compute the norm of the change in the density matrix and c then update the density matrix in g_dens with damping. c call makden deltad = dendif() if (iter.eq.1) then scale = 0.0d0 else if (iter .le. 5) then if (nbfn .gt. 60) then scale = 0.5d0 else scale = 0.0d0 endif else scale = 0.0d0 endif call damp(scale) tdens = tdens + timer() c c add up energy and print out convergence information c if (me.eq.0) then energy = enrep + eone + etwo call prnout(iter, energy, deltad, tester) tprint = tprint + timer() endif c c if converged then exit iteration loop c if (deltad .lt. tol) goto 20 call ga_igop(9, icut4, 1, '+') !cste if(icut4 .eq. 0) then !cste c something has gone wrong--print what you know and quit. write(6,*) 'no two-electron integrals computed!' !cste goto 20 !cste endif !cste 10 continue iter = iter - 1 !cste if(me.eq.0) $ write(6,*) ' SCF failed to converge in ', iter, ' iters' c...v....1....v....2....v....3....v....4....v....5....v....6....v....7.. c c finished ... print out eigenvalues and occupied orbitals c 20 continue call ga_igop(6, icut1, 1, '+') call ga_igop(7, icut2, 1, '+') call ga_igop(8, icut3, 1, '+') if (me.eq.0) then c c print out timing information c call prnfin(energy) write(6,1) tinit, tonel, ttwoel, tdiag, tdens, tprint, $ nproc 1 format(/5x,' init ',4x,' onel ',4x,' twoel ',4x,' diag ',4x, $ ' dens print ncpu'/ $ 5x,'------',4x,'------',4x,'-------',4x,'------',4x, $ '------ ------ ------'/ $ 2f10.2,f11.2,3f10.2, i7/) totsec = tinit+tonel+ttwoel+tdiag+tdens+tprint write(6,*)'elapsed time in seconds ',totsec c c print out information on # integrals evaluated each iteration c nints = icut1+icut2+icut3 frac = dble(icut3)/dble(nints) write(6,2) icut1, icut2, icut3, nints, frac 2 format(/'No. of integrals screened or computed (all iters) ' $ /'-------------------------------------'/ $ /1x,' failed #ij test failed #kl test', $ ' #compute #total', $ ' fraction', $ /1x,' --------------- ---------------', $ ' --------------- ---------------', $ ' --------', $ /1x,4(1x,i15),f9.6) maxint = nbfn !cste maxint = maxint**4 * iter !cste if(nints .ne. maxint) then !cste write(6,*)'Inconsistent number of integrals, should be ', !cste $ maxint !cste write(6,*)'Note: largest 32-bit integer is 2,147,483,647' !cste write(6,*)'Probably due to insufficient integer precision in GA.'!cste endif !cste #if 0 call stats #endif endif c call closearrays #if 0 call ga_terminate call mpi_finalize #endif c end c subroutine makesz(schwmax) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mpif.h" dimension work(ichunk,ichunk) integer lo(2),hi(2),i,j,iloc,jloc,ld logical dotask, next_chunk c c schwarz(ij) = (ij|ij) for sparsity test c icut1 = 0 icut2 = 0 icut3 = 0 c call ga_zero(g_schwarz) call ga_zero(g_counter) schwmax = 0.0d0 dotask = next_chunk(lo,hi) ld = ichunk do while (dotask) do i = lo(1), hi(1) iloc = i - lo(1) + 1 do j = lo(2), hi(2) jloc = j - lo(2) + 1 call g(gg,i,j,i,j) work(iloc,jloc) = sqrt(gg) schwmax = max(schwmax, work(iloc,jloc)) end do end do call nga_put(g_schwarz,lo,hi,work,ld) dotask = next_chunk(lo,hi) end do call ga_dgop(11,schwmax,1,'max') c return end c subroutine ininrm implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mpif.h" integer*8 maxint c c write a little welcome message c maxint = nbfn maxint = maxint**4 if (ga_nodeid().eq.0) then write(6,1) natom, nocc, nbfn, maxint, tol, ichunk 1 format(/' Example Direct Self Consistent Field Program '/ $ ' -------------------------------------------- '// $ ' no. of atoms .............. ',i5/ $ ' no. of occupied orbitals .. ',i5/ $ ' no. of basis functions .... ',i5/ $ ' basis functions^4 ' ,i15/ $ ' convergence threshold ..... ',1pd9.2/ $ ' chunk size .................',i5) write(6,*) !cste call flush(6) !cste endif !cste c c generate normalisation coefficients for the basis functions c and the index array iky c do 10 i = 1, nbfn iky(i) = i*(i-1)/2 10 continue c do 20 i = 1, nbfn rnorm(i) = (expnt(i)*2.0d0/pi)**0.75d0 20 continue c c initialize common for computing f0 c call setfm c end double precision function h(i,j) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mpif.h" cvd$r novector cvd$r noconcur c c generate the one particle hamiltonian matrix element c over the normalized primitive 1s functions i and j c f0val = 0.0d0 sum = 0.0d0 rab2 = (x(i)-x(j))**2 + (y(i)-y(j))**2 + (z(i)-z(j))**2 facij = expnt(i)*expnt(j)/(expnt(i)+expnt(j)) expij = exprjh(-facij*rab2) repij = (2.0d0*pi/(expnt(i)+expnt(j))) * expij c c first do the nuclear attraction integrals c do 10 iat = 1, natom xp = (x(i)*expnt(i) + x(j)*expnt(j))/(expnt(i)+expnt(j)) yp = (y(i)*expnt(i) + y(j)*expnt(j))/(expnt(i)+expnt(j)) zp = (z(i)*expnt(i) + z(j)*expnt(j))/(expnt(i)+expnt(j)) rpc2 = (xp-ax(iat))**2 + (yp-ay(iat))**2 + (zp-az(iat))**2 c call f0(f0val, (expnt(i)+expnt(j))*rpc2) sum = sum - repij * q(iat) * f0val 10 continue c c add on the kinetic energy term c sum = sum + facij*(3.0d0-2.0d0*facij*rab2) * $ (pi/(expnt(i)+expnt(j)))**1.5d0 * expij c c finally multiply by the normalization constants c h = sum * rnorm(i) * rnorm(j) c end double precision function s(i,j) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mpif.h" c c generate the overlap matrix element between the normalized c primitve gaussian 1s functions i and j c rab2 = (x(i)-x(j))**2 + (y(i)-y(j))**2 + (z(i)-z(j))**2 facij = expnt(i)*expnt(j)/(expnt(i)+expnt(j)) s = (pi/(expnt(i)+expnt(j)))**1.5d0 * exprjh(-facij*rab2) * $ rnorm(i)*rnorm(j) c end subroutine makden implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mpif.h" c dimension work(maxnbfn,maxnbfn), torbs(maxnbfn,maxnbfn) dimension work(ichunk,ichunk), orbsi(ichunk,maxnbfn) dimension orbsj(ichunk,maxnbfn) integer lo(2), hi(2), tlo(2), thi(2), i, j, iloc, jloc, ld logical dotask, next_chunk c c generate density matrix from orbitals in g_orbs. the first c nocc orbitals are doubly occupied. c call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while (dotask) tlo(1) = lo(1) thi(1) = hi(1) tlo(2) = 1 thi(2) = nocc call nga_get(g_orbs,tlo,thi,orbsi,ld) tlo(1) = lo(2) thi(1) = hi(2) call nga_get(g_orbs,tlo,thi,orbsj,ld) do i = lo(1), hi(1) iloc = i - lo(1) + 1 do j = lo(2), hi(2) jloc = j - lo(2) + 1 p = 0.0d00 do k = 1, nocc p = p + orbsi(iloc,k)*orbsj(jloc,k) end do work(iloc,jloc) = 2.0d00*p end do end do call nga_put(g_work,lo,hi,work,ld) dotask = next_chunk(lo,hi) end do return end c subroutine oneel(schwmax, eone) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mpif.h" integer lo(2), hi(2), i, j, iloc, jloc, ld dimension work(ichunk,ichunk),tfock(ichunk,ichunk) logical dotask, next_chunk c c fill in the one-electron part of the fock matrix and c compute the one-electron energy contribution c me = ga_nodeid() nproc = ga_nnodes() c call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while (dotask) call nga_get(g_schwarz,lo,hi,work,ld) do j = lo(2), hi(2) jloc = j - lo(2) + 1 do i = lo(1), hi(1) iloc = i - lo(1) + 1 tfock(iloc,jloc) = 0.0d00 if (work(iloc,jloc)*schwmax.gt.tol2e) + tfock(iloc,jloc) = h(i,j) end do end do call nga_put(g_fock,lo,hi,tfock,ld) dotask = next_chunk(lo,hi) end do eone = 0.5d00*contract_matrices(g_fock,g_dens) c end #if 0 integer function nxtask(nproc) parameter (ichunk = 10) save icount, nleft data nleft, icount /0, 0/ c c wrapper round nxtval() to increase granularity c and thus reduce no. of requests to shared counter c if(nproc.gt.0) then if(nleft.eq.0) then icount = nxtval(nproc) * ichunk nleft = ichunk endif nxtask = icount icount = icount + 1 nleft = nleft -1 else nleft = 0 nxtask = 0 junk = nxtval(nproc) endif c c following does dumb static load balancing c c$$$ if(nproc.gt.0) then c$$$ if (nleft .eq. 0) then c$$$ icount = ga_nodeid() c$$$ nleft = 1 c$$$ endif c$$$ nxtask = icount c$$$ icount = icount + ga_nnodes() c$$$ else c$$$ nleft = 0 c$$$ nxtask = 0 c$$$ endif end #endif c logical function next_chunk(lo,hi) #include "cscf.h" integer one parameter (one = 1) integer imax, lo(2), hi(2), ilo, jlo itask = nga_read_inc(g_counter,one,one) imax = nbfn/ichunk if (nbfn - ichunk*imax.gt.0) imax = imax + 1 if (itask.lt.imax*imax) then ilo = mod(itask,imax) jlo = (itask-ilo)/imax lo(1) = ilo*ichunk + 1 lo(2) = jlo*ichunk + 1 hi(1) = min((ilo+1)*ichunk,nbfn) hi(2) = min((jlo+1)*ichunk,nbfn) next_chunk = .true. else next_chunk = .false. endif return end c logical function next_4chunk(lo,hi,ilo,jlo,klo,llo) #include "cscf.h" integer one parameter (one = 1) integer*8 imax, itask !cste integer lo(4), hi(4), ilo, jlo, klo, llo, itmp !cste c itask = nga_read_inc(g_counter,one,one) imax = nbfn/ichunk if (nbfn - ichunk*imax.gt.0) imax = imax + 1 if (itask. lt. 0) then !cste write(6,*) 'next_4chunk: itask negative:',itask, !cste * ' imax:',imax,' nbfn:',nbfn,' ichunk:',ichunk!cste write(6,*) 'probable GA integer precision problem if ' !cste * ,'imax^4 > 2^31' !cste call flush(6) !cste stop 'next_4chunk' !cste end if !cste if (itask.lt.imax**4) then ilo = mod(itask,imax) itmp = (itask - ilo)/imax jlo = mod(itmp,imax) itmp = (itmp - jlo)/imax klo = mod(itmp,imax) llo = (itmp - klo)/imax lo(1) = ilo*ichunk + 1 lo(2) = jlo*ichunk + 1 lo(3) = klo*ichunk + 1 lo(4) = llo*ichunk + 1 hi(1) = min((ilo+1)*ichunk,nbfn) hi(2) = min((jlo+1)*ichunk,nbfn) hi(3) = min((klo+1)*ichunk,nbfn) hi(4) = min((llo+1)*ichunk,nbfn) next_4chunk = .true. else next_4chunk = .false. endif return end c subroutine clean_chunk(chunk) #include "cscf.h" double precision chunk(ichunk,ichunk) integer i,j do j = 1, ichunk do i = 1, ichunk chunk(i,j) = 0.0d00 end do end do return end c subroutine twoel(schwmax, etwo) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mpif.h" double precision f_ij(ichunk,ichunk),d_kl(ichunk,ichunk) double precision f_ik(ichunk,ichunk),d_jl(ichunk,ichunk) double precision s_ij(ichunk,ichunk),s_kl(ichunk,ichunk) double precision schwmax, one cste integer nproc !cste integer*8 ijkls, ijcnt,klcnt,ijklcnt !cste integer lo(4),hi(4),lo_ik(2),hi_ik(2),lo_jl(2),hi_jl(2) !cste integer i,j,k,l,iloc,jloc,kloc,lloc,ld,ich,it,jt,kt,lt !cste logical dotask, next_4chunk c c add in the two-electron contribution to the fock matrix c cste nproc = ga_nnodes() one = 1.0d00 ijcnt = icut1 !cste klcnt = icut2 !cste ijklcnt = icut3 !cste c call ga_zero(g_counter) ld = maxnbfn ich = ichunk dotask = next_4chunk(lo,hi,it,jt,kt,lt) itask = 0 cste ijkls = 0 !cste do while (dotask) cste ijkl=(hi(1)-lo(1)+1)*(hi(2)-lo(2)+1)* !cste cste * (hi(3)-lo(3)+1)*(hi(4)-lo(4)+1) !cste cste ijkls = ijkls + ijkl !cste cste write(6,*)itask,lo,hi,ijkl,ijkls !cste lo_ik(1) = lo(1) lo_ik(2) = lo(3) hi_ik(1) = hi(1) hi_ik(2) = hi(3) lo_jl(1) = lo(2) lo_jl(2) = lo(4) hi_jl(1) = hi(2) hi_jl(2) = hi(4) call nga_get(g_schwarz,lo,hi,s_ij,ich) call nga_get(g_schwarz,lo(3),hi(3),s_kl,ich) call nga_get(g_dens,lo(3),hi(3),d_kl,ich) call nga_get(g_dens,lo_jl,hi_jl,d_jl,ich) itask = itask + 1 call clean_chunk(f_ij) call clean_chunk(f_ik) do i = lo(1), hi(1) iloc = i-lo(1) + 1 do j = lo(2), hi(2) jloc = j-lo(2) + 1 if (s_ij(iloc,jloc)*schwmax .lt. tol2e) then icut1 = icut1 + (hi(3)-lo(3)+1)*(hi(4)-lo(4)+1) !cste else do k = lo(3), hi(3) kloc = k-lo(3) + 1 do l = lo(4), hi(4) lloc = l-lo(4) + 1 if (s_ij(iloc,jloc)*s_kl(kloc,lloc).lt.tol2e) then icut2 = icut2 + 1 else call g(gg, i, j, k, l) f_ij(iloc,jloc) = f_ij(iloc,jloc) + + gg*d_kl(kloc,lloc) f_ik(iloc,kloc) = f_ik(iloc,kloc) + - 0.5d00*gg*d_jl(jloc,lloc) icut3 = icut3 + 1 endif end do end do endif end do end do call nga_acc(g_fock,lo,hi,f_ij,ich,one) call nga_acc(g_fock,lo_ik,hi_ik,f_ik,ich,one) dotask = next_4chunk(lo,hi,it,jt,kt,lt) end do etwo = 0.5d00*contract_matrices(g_fock,g_dens) ijcnt = icut1 - ijcnt klcnt = icut2 - klcnt ijklcnt = icut3 - ijklcnt cste write(6,*) 'node ', ga_nodeid(), ijcnt, klcnt, ijklcnt !cste cste * ,icut1,icut2,icut3 !cste cste call flush(6) !cste icut4 = icut3 !cste if (icut3 .gt. 0) return !cste c c no integrals may be calculated if there is no work for c this node (ichunk too big), or, something is wrong c write(6,*) 'no two-electron integrals computed by node', !cste * ga_nodeid() !cste call flush(6) !cste return cste stop 'twoel computed no integrals' !cste end c subroutine damp(fac) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mpif.h" c c create damped density matrix as a linear combination of c old density matrix and density matrix formed from new orbitals c ofac = 1.0d0 - fac call ga_add(fac,g_dens,ofac,g_work,g_dens) return end c subroutine prnout(iter, energy, deltad, tester) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mpif.h" c c printout results of each iteration c if (ga_nodeid().ne.0) return write(6,1) iter, energy, deltad, tester call flush(6) 1 format(' iter=',i3,', energy=',f15.8,', deltad=',1pd9.2, $ ', deltaf=',d9.2) return end c double precision function dendif() implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mpif.h" double precision xdiff dimension dens_c(ichunk,ichunk),work_c(ichunk,ichunk) integer lo(2), hi(2), i, j, ld logical dotask, next_chunk c c compute largest change in density matrix elements c denmax = 0.0d0 call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while(dotask) call nga_get(g_dens,lo,hi,dens_c,ld) call nga_get(g_work,lo,hi,work_c,ld) do j = 1, hi(2)-lo(2)+1 do i = 1, hi(1)-lo(1)+1 xdiff = abs(dens_c(i,j)-work_c(i,j)) if (xdiff.gt.denmax) denmax = xdiff end do end do dotask = next_chunk(lo,hi) end do call ga_dgop(1,denmax,1,'max') dendif = denmax return end c double precision function testfock() implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mpif.h" double precision xmax, xtmp dimension work(ichunk,ichunk) integer lo(2), hi(2), i, j, iloc, jloc, ld logical dotask, next_chunk c c compute largest change in density matrix elements c xmax = 0.0d0 call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while(dotask) call nga_get(g_fock,lo,hi,work,ld) do j = lo(2), hi(2) jloc = j - lo(2) + 1 do i = lo(1), hi(1) iloc = i - lo(1) + 1 if (i.ne.j) then xtmp = abs(work(iloc,jloc)) if (xtmp.gt.xmax) xmax = xtmp endif end do end do dotask = next_chunk(lo,hi) end do call ga_dgop(1,xmax,1,'max') testfock = xmax return end c subroutine shiftfock(shift) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mpif.h" double precision shift dimension work(ichunk,ichunk) integer lo(2), hi(2), i, j, iloc, jloc, ld, icnt logical dotask, next_chunk c c compute largest change in density matrix elements c call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while(dotask) call nga_get(g_fock,lo,hi,work,ld) icnt = 0 do j = lo(2), hi(2) jloc = j - lo(2) + 1 do i = lo(1), hi(1) iloc = i - lo(1) + 1 if (i.eq.j.and.i.gt.nocc) then work(iloc,jloc) = work(iloc,jloc) + shift icnt = icnt + 1 endif end do end do if (icnt.gt.0) call nga_put(g_fock,lo,hi,work,ld) dotask = next_chunk(lo,hi) end do return end c subroutine prnfin(energy) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" dimension orbs(maxnbfn, maxnbfn) integer lo(2),hi(2),ld c c printout final results c if (ga_nodeid().ne.0) return write(6,1) energy 1 format(//' final energy = ',f18.11//' eigenvalues') call output(eigv, 1, min(nbfn,nocc+5), 1, 1, nbfn, 1, 1) c return end subroutine g(value,i,j,k,l) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" c c compute the two electon integral (ij|kl) over normalized c primitive 1s gaussians c f0val = 0.0d0 rab2 = (x(i)-x(j))**2 + (y(i)-y(j))**2 + (z(i)-z(j))**2 rcd2 = (x(k)-x(l))**2 + (y(k)-y(l))**2 + (z(k)-z(l))**2 facij = expnt(i)*expnt(j)/(expnt(i)+expnt(j)) fackl = expnt(k)*expnt(l)/(expnt(k)+expnt(l)) exijkl = exprjh(- facij*rab2 - fackl*rcd2) denom = (expnt(i)+expnt(j))*(expnt(k)+expnt(l)) * $ sqrt(expnt(i)+expnt(j)+expnt(k)+expnt(l)) fac = (expnt(i)+expnt(j))*(expnt(k)+expnt(l)) / $ (expnt(i)+expnt(j)+expnt(k)+expnt(l)) c xp = (x(i)*expnt(i) + x(j)*expnt(j))/(expnt(i)+expnt(j)) yp = (y(i)*expnt(i) + y(j)*expnt(j))/(expnt(i)+expnt(j)) zp = (z(i)*expnt(i) + z(j)*expnt(j))/(expnt(i)+expnt(j)) xq = (x(k)*expnt(k) + x(l)*expnt(l))/(expnt(k)+expnt(l)) yq = (y(k)*expnt(k) + y(l)*expnt(l))/(expnt(k)+expnt(l)) zq = (z(k)*expnt(k) + z(l)*expnt(l))/(expnt(k)+expnt(l)) rpq2 = (xp-xq)**2 + (yp-yq)**2 + (zp-zq)**2 c call f0(f0val, fac*rpq2) value = (2.0d0 * pi**2.5d0 / denom) * exijkl * f0val * $ rnorm(i)*rnorm(j)*rnorm(k)*rnorm(l) return end c subroutine diagon(tester, iter) c subroutine diagon(fock, orbs, evals, work, tester, iter) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" double precision r_zero, r_one, shift, tester c #if USE_TRANSFORM c c use similarity transform to solve standard eigenvalue problem c (overlap matrix has been transformed out of the problem) c r_one = 1.0d00 r_zero = 0.0d00 call ga_dgemm('n','n',nbfn,nbfn,nbfn,r_one,g_fock,g_orbs, + r_zero,g_tfock) call ga_dgemm('t','n',nbfn,nbfn,nbfn,r_one,g_orbs,g_tfock, + r_zero,g_fock) tester = testfock() shift = 0.0d00 if (tester.gt.0.3d0) then shift = 0.3d0 else if (nbfn .gt. 60) then shift = 0.1d0 else shift = 0.0d0 endif endif if (iter.ge.2.and.shift.ne.0.0d00) then call shiftfock(shift) endif call ga_copy(g_orbs,g_tfock) call ga_diag_std_seq(g_fock, g_work, eigv) c c Back transform eigenvectors c call ga_dgemm('n','n',nbfn,nbfn,nbfn,r_one,g_tfock,g_work, + r_zero,g_orbs) if (iter.ge.2.and.shift.ne.0.0d00) then do 50 i = nocc+1, nbfn eigv(i) = eigv(i) - shift 50 continue endif #else c c Keep remaking overlap matrix since ga_diag_seq does not c guarantee that g_ident is preserved. c call makoverlap call ga_diag_seq(g_fock, g_ident, g_orbs, eigv) tester = 0.0d00 #endif return end c subroutine makeob implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" double precision work(ichunk,ichunk),orbs(ichunk,ichunk) double precision eval(maxnbfn) integer lo(2),hi(2),ld,me,i,j,iloc,jloc logical dotask, next_chunk double precision drand external drand c c generate set of orthonormal vectors by creating a random c symmetric matrix and solving associated generalized eigenvalue c problem using the correct overlap matrix. c me = ga_nodeid() call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while (dotask) do j = lo(2), hi(2) jloc = j - lo(2) + 1 do i = lo(1), hi(1) iloc = i - lo(1) + 1 work(iloc,jloc) = s(i,j) orbs(iloc,jloc) = drand(0) end do end do call nga_put(g_ident,lo,hi,work,ld) call nga_put(g_fock,lo,hi,orbs,ld) dotask = next_chunk(lo,hi) end do call ga_symmetrize(g_fock) call ga_diag_seq(g_fock, g_ident, g_orbs, eval) c return end c subroutine denges implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" c c Form guess density from superposition of atomic densities in the AO c basis set ... instead of doing the atomic SCF hardwire for this c small basis set for the Be atom. c integer one, itask, lo(2), hi(2), ld dimension atdens(15,15) data atdens/ $ 0.000002,0.000027,0.000129,0.000428,0.000950,0.001180, $ 0.000457,-0.000270,-0.000271,0.000004,0.000004,0.000004, $ 0.000004,0.000004,0.000004,0.000027,0.000102,0.000987, $ 0.003269,0.007254,0.009007,0.003492,-0.002099,-0.002108, $ 0.000035,0.000035,0.000035,0.000035,0.000035,0.000035, $ 0.000129,0.000987,0.002381,0.015766,0.034988,0.043433, $ 0.016835,-0.010038,-0.010082,0.000166,0.000166,0.000166, $ 0.000166,0.000166,0.000166,0.000428,0.003269,0.015766, $ 0.026100,0.115858,0.144064,0.055967,-0.035878,-0.035990, $ 0.000584,0.000584,0.000584,0.000584,0.000584,0.000584, $ 0.000950,0.007254,0.034988,0.115858,0.128586,0.320120, $ 0.124539,-0.083334,-0.083536,0.001346,0.001346,0.001346, $ 0.001346,0.001346,0.001346,0.001180,0.009007,0.043433, $ 0.144064,0.320120,0.201952,0.159935,-0.162762,-0.162267, $ 0.002471,0.002471,0.002471,0.002471,0.002471,0.002471, $ 0.000457,0.003492,0.016835,0.055967,0.124539,0.159935, $ 0.032378,-0.093780,-0.093202,0.001372,0.001372,0.001372, $ 0.001372,0.001372,0.001372,-0.000270,-0.002099,-0.010038, $ -0.035878,-0.083334,-0.162762,-0.093780,0.334488,0.660918, $ -0.009090,-0.009090,-0.009090,-0.009090,-0.009090,-0.009090, $ -0.000271,-0.002108,-0.010082,-0.035990,-0.083536,-0.162267, $ -0.093202,0.660918,0.326482,-0.008982,-0.008982,-0.008981, $ -0.008981,-0.008981,-0.008982,0.000004,0.000035,0.000166, $ 0.000584,0.001346,0.002471,0.001372,-0.009090,-0.008982, $ 0.000062,0.000124,0.000124,0.000124,0.000124,0.000124, $ 0.000004,0.000035,0.000166,0.000584,0.001346,0.002471, $ 0.001372,-0.009090,-0.008982,0.000124,0.000062,0.000124, $ 0.000124,0.000124,0.000124,0.000004,0.000035,0.000166, $ 0.000584,0.001346,0.002471,0.001372,-0.009090,-0.008981, $ 0.000124,0.000124,0.000062,0.000124,0.000124,0.000124, $ 0.000004,0.000035,0.000166,0.000584,0.001346,0.002471, $ 0.001372,-0.009090,-0.008981,0.000124,0.000124,0.000124, $ 0.000062,0.000124,0.000124,0.000004,0.000035,0.000166, $ 0.000584,0.001346,0.002471,0.001372,-0.009090,-0.008981, $ 0.000124,0.000124,0.000124,0.000124,0.000062,0.000124, $ 0.000004,0.000035,0.000166,0.000584,0.001346,0.002471, $ 0.001372,-0.009090,-0.008982,0.000124,0.000124,0.000124, $ 0.000124,0.000124,0.000062/ c c Create initial guess for density matrix in global array c call ga_zero(g_dens) call ga_zero(g_counter) one = 1 ld = 15 c c Correct for a factor of two along the diagonal c do i = 1, ld atdens(i,i) = 2.0d00*atdens(i,i) end do itask = nga_read_inc(g_counter,one,one) do while(itask.lt.natom) ioff = itask*15 lo(1) = ioff+1 lo(2) = ioff+1 hi(1) = ioff+15 hi(2) = ioff+15 call nga_put(g_dens,lo,hi,atdens,ld) itask = nga_read_inc(g_counter,one,one) end do call ga_sync return end c subroutine setarrays implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" integer one, two, dims(2) logical status one = 1 two = 2 g_counter = ga_create_handle() call ga_set_data(g_counter,one,one,MT_INT) status = ga_allocate(g_counter) call ga_zero(g_counter) dims(1) = nbfn dims(2) = nbfn g_dens = ga_create_handle() call ga_set_data(g_dens, two, dims, MT_DBL) status = ga_allocate(g_dens) call ga_zero(g_dens) g_schwarz = ga_create_handle() call ga_set_data(g_schwarz, two, dims, MT_DBL) status = ga_allocate(g_schwarz) call ga_zero(g_schwarz) g_fock = ga_create_handle() call ga_set_data(g_fock, two, dims, MT_DBL) status = ga_allocate(g_fock) call ga_zero(g_fock) g_tfock = ga_create_handle() call ga_set_data(g_tfock, two, dims, MT_DBL) status = ga_allocate(g_tfock) call ga_zero(g_tfock) g_work = ga_create_handle() call ga_set_data(g_work, two, dims, MT_DBL) status = ga_allocate(g_work) call ga_zero(g_work) g_ident = ga_create_handle() call ga_set_data(g_ident, two, dims, MT_DBL) status = ga_allocate(g_ident) call ga_zero(g_ident) g_orbs = ga_create_handle() call ga_set_data(g_orbs, two, dims, MT_DBL) status = ga_allocate(g_orbs) call ga_zero(g_orbs) return end subroutine closearrays implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" logical status c status = ga_destroy(g_counter) status = ga_destroy(g_dens) status = ga_destroy(g_schwarz) status = ga_destroy(g_fock) status = ga_destroy(g_tfock) status = ga_destroy(g_work) status = ga_destroy(g_ident) status = ga_destroy(g_orbs) c return end c subroutine makoverlap implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" integer me, lo(2), hi(2), ptr, ld(2) integer ld1, ld2 me = ga_nodeid() call nga_distribution(g_ident, me, lo, hi) call nga_access(g_ident, lo, hi, ptr, ld) ld1 = hi(1) - lo(1) + 1 ld2 = hi(2) - lo(2) + 1 call setoverlap(dbl_mb(ptr),lo,hi,ld1,ld2) call nga_release(g_ident) return end c subroutine setoverlap(a,lo,hi,ld1,ld2) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" integer lo(2), hi(2) integer ld1, ld2, ii, jj double precision a(ld1,ld2) do i = 1, ld1 ii = i + lo(1) - 1 do j = 1, ld2 jj = j + lo(2) - 1 #if USE_TRANSFORM if (ii.eq.jj) then a(i,j) = 1.0d00 else a(i,j) = 0.0d00 endif #else a(i,j) = s(ii,jj) #endif end do end do return end c subroutine print_ga_block(g_a) implicit double precision(a-h,o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" integer lo(2), hi(2), ptr, ld1, ld2 c me = ga_nodeid() call nga_distribution(g_a, me, lo, hi) ld1 = hi(1) - lo(1) + 1 ld2 = hi(2) - lo(2) + 1 call nga_access(g_a, lo, hi, ptr, ld) call dump_chunk(dbl_mb(ptr),ld1,ld2) call nga_release(g_a) c return end c subroutine print_ga_block_ij(g_a,tlo) implicit double precision(a-h,o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" integer lo(2), hi(2), ptr, ld1, ld2 c me = ga_nodeid() call nga_distribution(g_a, me, lo, hi) ld1 = hi(1) - lo(1) + 1 ld2 = hi(2) - lo(2) + 1 call nga_access(g_a, tlo, hi, ptr, ld) call dump_chunk(dbl_mb(ptr),ld1,ld2) call nga_release(g_a) c return end c subroutine dump_chunk(a,ld1,ld2) implicit double precision (a-h, o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" integer ld1, ld2 double precision a(ld1, ld2) do i = 1, min(10,ld1) write(6,100) (a(i,j), j = 1, min(10,ld2)) end do write(6,*) trace = 0.0d0 do i=1,ld2 trace = trace +a(i,i) end do write(6,*) 'trace=',trace 100 format(10f10.4) return end c double precision function contract_matrices(g_a,g_b) implicit double precision(a-h,o-z) #include "cscf.h" #include "mafdecls.fh" #include "global.fh" integer lo(2), hi(2), ptr_a, ptr_b, ld, ld1, ld2 double precision a(ichunk,ichunk),b(ichunk,ichunk) double precision value logical dotask, next_chunk c c evalute sum_ij a_ij*b_ij c value = 0.0d00 call ga_zero(g_counter) dotask = next_chunk(lo,hi) ld = ichunk do while (dotask) call nga_get(g_a,lo,hi,a,ld) call nga_get(g_b,lo,hi,b,ld) do j = 1, hi(2)-lo(2)+1 do i = 1, hi(1)-lo(1)+1 value = value + a(i,j)*b(i,j) end do end do dotask = next_chunk(lo,hi) end do call ga_dgop(3,value,1,'+') contract_matrices=value c return end ga-5-3/tascel/examples/scf/input.F0000640005473000001440000000516711471662043015723 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif subroutine input #include "cscf.h" #include "mafdecls.fh" #include "global.fh" #include "mpif.h" c....................................................................... c Input configuration from an XYZ format file call be.inpt and set up c initial data structures. Atomic numbers from XYZ file are ignored and c an atomic number of 4 (Beryllium) is used instead. c....................................................................... c c initialize variables c natom = 0 do i = 1, maxatom ax(i) = 0.0d00 ay(i) = 0.0d00 az(i) = 0.0d00 end do c if (ga_nodeid().eq.0) then open(2,file='be.inpt',status='old') read(2,*) natom read(2,*) c c Read in coordinates c do i = 1, natom read(2,*) j,ax(i),ay(i),az(i) end do close(2) endif call ga_igop(1,natom,1,'+') call ga_dgop(2,ax,natom,'+') call ga_dgop(3,ay,natom,'+') call ga_dgop(4,az,natom,'+') c c Set up s-function centers and nuclear charges c ifcnt = 1 do i = 1, natom q(i) = 4.0d00 c expnt(ifcnt) = 1741.0d00 expnt(ifcnt+1) = 262.1d00 expnt(ifcnt+2) = 60.33d00 expnt(ifcnt+3) = 17.62d00 expnt(ifcnt+4) = 5.933d00 expnt(ifcnt+5) = 2.185d00 expnt(ifcnt+6) = 0.859d00 expnt(ifcnt+7) = 0.1806d00 expnt(ifcnt+8) = 0.05835d00 expnt(ifcnt+9) = 0.3d00 expnt(ifcnt+10) = 0.3d00 expnt(ifcnt+11) = 0.3d00 expnt(ifcnt+12) = 0.3d00 expnt(ifcnt+13) = 0.3d00 expnt(ifcnt+14) = 0.3d00 c do j = 1, 15 x(ifcnt) = ax(i) y(ifcnt) = ay(i) z(ifcnt) = az(i) if (j.eq.10) then x(ifcnt) = x(ifcnt) + 1.6d00 endif if (j.eq.11) then x(ifcnt) = x(ifcnt) - 1.6d00 endif if (j.eq.12) then y(ifcnt) = y(ifcnt) + 1.6d00 endif if (j.eq.13) then y(ifcnt) = y(ifcnt) - 1.6d00 endif if (j.eq.14) then z(ifcnt) = z(ifcnt) + 1.6d00 endif if (j.eq.15) then z(ifcnt) = z(ifcnt) - 1.6d00 endif ifcnt = ifcnt + 1 end do end do c c evaluate repulsion energy c enrep = 0.0d00 do i = 1, natom do j = i+1, natom r = sqrt((ax(i)-ax(j))**2 + (ay(i)-ay(j))**2 + + (az(i)-az(j))**2) enrep = enrep + q(i)*q(j)/r end do end do nocc = 2*natom nbfn = 15*natom nnbfn = nbfn*(nbfn+1)/2 return end ga-5-3/NOTES0000640005473000001440000002121311423627743011417 0ustar d3n000usersBRIEF TOUBLESHOOTING NOTES ~~~~~~~~~~~~~~~~~~~~~~~~~~ NON-PLATFORM SPECIFIC PROBLEMS ============================== 1. Your make is not GNU make. Symptoms: Make: makefile: Must be a separator on line 2. Stop. Fix: use GNU make. To verify if make is a GNU make, type make -v. The output should look like:: % make -v GNU Make version 3.74, by Richard Stallman and Roland McGrath. Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 95 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 2. Limited IPC resources on shared memory machines Symptoms: GA programs fail in initialization when trying to allocate semaphores or shared memory. Fix: Most often semaphore/shared memory IDs are used by processes that terminated and left them unallocated. Run UNIX commands "ipcs" and then "ipcrm" to remove any IDs that belong to your dead processes or contact your sys admin for help. Related: On some platforms, insufficient amount of swap space might cause shmget/shmat fail. In this case, either swap space has to be increased or constant _SHMMAX in file global/src/shmem.c decreased. The current values of _SHMMAX might be too optimistic. For example, on the PNNL IBM laptops running Linux, kernel was rebuilt to allow 24 MB of shared memory. PLATFORM SPECIFIC PROBLEMS ========================== PLEASE NOTE: ------------ For up-to-date information regarding platform specific problems, go to Global Arrays support page: http://www.emsl.pnl.gov/docs/global/support.html Systems with QSnet interconnects -------------------------------- Due to a bug in elan library (old versions between and including 1.3 and 1.4.1), programs using the elan library can crash when transmiting 4-byte C Floats. Please contact Quadrics support for further information about this problem. Since ARMCI uses the elan library on the QSnet interconnect, this elan library bug can cause a problem if your system is using the above mentioned version of the elan library. This problem does not occur with the new 1.4.2 version of the elan library. Linux ----- The release 3.1 of GA supports Intel (x86), PowerPC, Alpha, and Sparc Ultra processors. A kernel patch helps to cut down latency in the TCP/IP socket based communication on the Linux clusters connected with Ethernet networks. We strongly recommend people who use Global Arrays extensively in this environment to apply the patch to avoid communication performance problems. The Linux kernel has traditionally fairly small limit for the shared memory segment size (SHMMAX). In kernels 2.2.x it is 32MB on Intel, 16MB on Sun Ultra, and 4MB on Alpha processors. There are two ways to increase this limit: * rebuild the kernel after changing SHMMAX in /usr/src/linux/include/asm-i386/shmparam.h, for example, setting SHMMAX as 0x8000000 (128MB) * a system admin can increase the limit without rebuilding the kernel, for example: echo "134217728" >/proc/sys/kernel/shmmax More info on this subject: * http://ps-ax.com/shared-mem.html and on the Linux SMP discussion list. * Setting very large values of SHMMAX is not recommended. In particular, it should not be bigger than the swap space or even the amount of physical memory in the system. For most applications, 128-256MB values should work fine. Issues related to Myrinet : * On Linux/x86 clusters with Myrinet, the release of GM 1.4 leads to hangs in ARMCI and GA. This problem has been solved in GM 1.4.1pre6 which is available on the Myricom ftp site. Versions 1.2, 1.3, 1.4pre48 of GM do not have that problem. * With MPICH/GM versions >1.2.3, the GM version 1.4.1pre14 or higher must be used. IBM SP ------ POE environment variable settings for the parallel environment PSSP 3.1 (Troutbeck): Global Arrays applications like any other LAPI-based codes must define MP_MSG_API=lapior MP_MSG_API=mpi,lapi(when using GA and MPI) The LAPI-based implementation of GA cannot be used on the very old (made 5-7 years ago) SP-2 systems because LAPI does not support the TB2 switch used in these models. If in doubt which switch you got use odmget command: odmget -q name=css0 CuDv Under AIX 4.3.1 and later one must set environment variable AIXTHREAD_SCOPE=S to assure correct operation of LAPI (IBM should do it in PSSP by default). under AIX 4.3.3 and later an additional environment variable is required RT_GRQ=ON to restore the original thread scheduling LAPI relies upon. SGI --- In older versions of GA (<3.1) there is a possibility of conflict between the SGI implementation of MPI (but not others, MPICH for example) and ARMCI in their use of the SGI specific interprocessor communication facility called arena.The release 3.1 does not use arenas to avoid the problem. If processors are oversubscribed (you are using more processes than processors), the SGI spin locks used for synchronization in GA are a very bad idea. In such a case Sys V semaphores work much better. Sun --- Solaris by default provides only 1MB limit for the largest shared memory segment. You need to increase this value to do any useful work with GA. For example to make SHMMAX= 2GB, add either of the lines to /etc/system:: set shmsys:shminfo_shmmax=0x80000000 /* hexidecimal */ set shmsys:shminfo_shmmax=2147483648 /* decimal */ After rebooting, you should be able to take advantage of the increased shared memory limits. For more info, please refer to the article in SunWorld: http://www.itworld.com/Comp/2378/UnixInsider/ Also see Note below. Compaq/DEC ---------- Tru64 is another example of an OS with a pityfully small size of the shared memory region limit. Here are instruction on how to modify shared memory max segment size to 256MB on the Tru64 UNIX Version 4.0F: 1. create a file called /etc/sysconfig.shmmax cat > /etc/sysconfig.shmmax << EOF ipc: shm-max = 268435456 EOF You can check if the file created is OK by typing: /sbin/sysconfigdb -l -t /etc/sysconfig.shmmax 2. Modify kernel values: sysconfigdb -a -f /etc/sysconfig.shmmax ipc 3. Reboot 4. To check new values: /sbin/sysconfig -q ipc|egrep shm-max For more info: http://www.tru64unix.compaq.com/docs/base_doc/DOCUMENTATION/V40F_HTML/AQ0R3GTE/CHLMTSXX.HTM Also see Note below. HP-UX ----- In most HP-UX/11 installations, the default limit for the largest shared memory segment is 64MB. A system administrator should be able to easily increment this value to better suit the applications needs: 1. Start sam (HP System Administration Manager). 2. Go to Kernel Configuration, select Configurable Parameters. Click on the shmmax entry on the list. 3. From Actions menu select Modify Configurable Parameter. Click on the radio button Specify New Formula/Value and fill in a desired value for SHMMAX in the hexadecimal format e.g., 0X8000000 (128MB). 4. Finally, select Process New Kernel from the Actions menu. It will apply the new value of SHHMAX into the kernel after rebooting the system. The C compiler (commercial version) under HP-UX 10.2 performs incorrect address calculations for shared memory references. GNU gcc works fine. This problem manifests itself in global/testing/test.x failing. If it happens, GA has to recompiled with gcc. Fujitsu VX/VPP -------------- The code will not complile because of the missing header file. This file references MPlib library, a trade secret of Fujitsu. The GA/ARMCI binaries can be obtained from nobes@fecit.com. Cray systems ------------- J90 and SV1 - MPI related issues ................................ * Only MPI message-passing library is supported (TCGMSG-MPI also). * Must use "mpirun -nt" rather than "mpirun -np" command to run GA based codes. * The Cray MPI_Abort implementation is broken(hangs). GA aborts using _exit(). * MPI_Initialized() is also broken - we cannot detect if some other library already initialized MPI. FreeBSD ------- To increase the shared memory segments on FreeBSD the following two sysctl's should be added to the startup scripts (e.g. /etc/rc.local): sysctl -w kern.ipc.shmmax=67108864 sysctl -w kern.ipc.shmall=16384 the first sysctl allocates 64Mbytes of memory, the second does the same thing in 4k pages (4k * 16384 = 64M), you must set both sysctl. Note on SHMMAX: --------------- Setting very large values of SHMMAX is not recommended. In particular, it should not be bigger than the swap space or even the amount of physical memory in the system. For most applications, 128-256MB values should work fine. ga-5-3/tcgmsg/0000750005473000001440000000000012275260526012066 5ustar d3n000usersga-5-3/tcgmsg/tests/0000750005473000001440000000000012275260526013230 5ustar d3n000usersga-5-3/tcgmsg/tests/mxv_fortran.f0000640005473000001440000000123012115161655015735 0ustar d3n000users subroutine mxv(a,ncol,b,nrow,c) implicit double precision (a-h, o-z) dimension a(ncol, nrow), b(nrow), c(ncol) parameter (nchunk = 127) c c matrix vector product stripmined to optimize cache usage c when inner loop is replaced with a daxpy that uses pipelined c loads for a to avoid writing over c in the cache. c do 10 ilo = 1, ncol, nchunk ihi = min(ncol, ilo+nchunk-1) do 20 i = ilo, ihi c(i) = 0.0d0 20 continue do 30 j = 1, nrow do 40 i = ilo, ihi c(i) = c(i) + a(i,j)*b(j) 40 continue 30 continue 10 continue c end ga-5-3/tcgmsg/tests/brdcst_delta.c0000640005473000001440000001064412115161655016030 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #include "sndrcv.h" /* Given the col and row no. return the actual process no. */ #define MAP(Row,Col) (ncols*(Row) + (Col)) /* Given the node return the row no. */ #define ROW(Node) ((Node) / ncols) /* Given the node return the column no. */ #define COL(Node) ((Node) - ncols*((Node)/ncols)) static Integer ncols; static Integer nrows; /** * broadcast buffer to all other processes from process originator * ... all processes call this routine specifying the same * orginating process * * Modified for grid nrows * ncols. * * Always send message to process 0. Then proceed from there. * * Algorithm ... recursively bisect the grid horizontally * and then vertically * * Need to modify to include pipelining. * * 4 x 6 grid is numbered (nrows=4, ncols=6) * * 0 1 2 3 4 5 * 6 7 8 9 10 11 * 12 13 14 15 16 17 * 18 19 20 21 22 23 */ void brdcst_delta_(Integer *type, char *buf, Integer *lenbuf, Integer *originator) { Integer me = NODEID_(); Integer mycol = COL(me); Integer myrow = ROW(me); Integer sync = 1; Integer from, id, left, middle, right, lenmes; /* First try implementation ... always send data to process 0 */ if (*originator != 0) { if (me == 0) { (void) printf("a %d receiving from %d %d\n",me,*originator); (void) fflush(stdout); RCV_(type, buf, lenbuf, &lenmes, originator, &from, &sync); } else if (me == *originator) { id = 0; (void) printf("a %d sending to %d type %d\n",me,*originator,*type); (void) fflush(stdout); SND_(type, buf, lenbuf, &id, &sync); } } /* Now broadcast from process 0 */ /* Bisect aInteger top horizonal edge of mesh */ if (myrow == 0) { (void) printf("%d myrow == 0\n",NODEID_()); left = 0; right = ncols-1; while (left != right) { middle = (left + right + 1) / 2; if (mycol == left) { id = MAP((Integer) 0,middle); (void) printf("b %d sending to %d type %d\n",me,id,*type); (void) fflush(stdout); SND_(type, buf, lenbuf, &id, &sync); } else if (mycol == middle) { id = MAP((Integer) 0,left); (void) printf("b %d receiving from %d\n",me,id); (void) fflush(stdout); RCV_(type, buf, lenbuf, &lenmes, &id, &from, &sync); } if (mycol < middle) { right = middle-1; } else { left = middle; } } } /* Bisect down vertical columns of mesh */ left = 0; right = nrows-1; while (left != right) { middle = (left + right + 1) / 2; if (myrow == left) { id = MAP(middle,mycol); (void) printf("c %d sending to %d type %d\n",me,id,*type); (void) fflush(stdout); SND_(type, buf, lenbuf, &id, &sync); } else if (myrow == middle) { id = MAP(left,mycol); (void) printf("c %d receiving from %d %d\n",me,id); (void) fflush(stdout); RCV_(type, buf, lenbuf, &lenmes, &id, &from, &sync); } if (myrow < middle) { right = middle-1; } else { left = middle; } } (void) fflush(stdout); } int main(int argc, char **argv) { Integer row, col, node, data, type, len, me; pbegin(argc, argv); LLOG_(); if (NODEID_() == 0) { (void) printf("Input nrows, ncols "); (void) scanf("%d %d",&nrows, &ncols); } node = 0; type = 1; len = 4; BRDCST_(&type, &nrows, &len, &node); BRDCST_(&type, &ncols, &len, &node); me = NODEID_(); (void) printf(" me=%d row=%d col=%d map=%d\n",me, ROW(me),COL(me),MAP(ROW(me),COL(me))); /* SETDBG_(&type); */ for (node=0; node #if HAVE_STDIO_H # include #endif int main(int argc, char **argv) { int numprocs, myid; int ierr; char req=0, ack=0; int atag=999, rtag=555, to; MPI_Status status; MPI_Request request; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_Comm_rank(MPI_COMM_WORLD, &myid); if(myid==0){ to = numprocs-1; printf("Testing nonblocking receive\n\n"); fflush(stdout); ierr = MPI_Irecv(&ack, 1, MPI_CHAR, to, atag ,MPI_COMM_WORLD, &request); printf(":after nonblocking receive\n"); fflush(stdout); ierr = MPI_Send(&req, 1, MPI_CHAR, to, rtag, MPI_COMM_WORLD); printf(":sent request\n"); fflush(stdout); ierr = MPI_Wait(&request, &status); printf(":received response\n"); fflush(stdout); printf("\nnonblocking receive is working\n"); fflush(stdout); } if(myid==numprocs-1){ to = 0; ierr = MPI_Recv(&req, 1, MPI_CHAR, to, rtag, MPI_COMM_WORLD, &status); printf("::request received\n"); fflush(stdout); ierr = MPI_Send(&ack, 1, MPI_CHAR, to, atag, MPI_COMM_WORLD); } MPI_Finalize(); return 0; } ga-5-3/tcgmsg/tests/testf.F0000640005473000001440000001120012115161655014453 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif program main implicit double precision (a-h,o-z) c c FORTRAN program to test message passing routines c c LOG is the FORTRAN unit number for standard output. c parameter (LOG = 6) parameter (MAXLEN = 262144 ) #include "msgtypesf.h" dimension buf(MAXLEN) integer ibuf(MAXLEN) character*80 fname integer dtype c c Always the first thing to do is call pbeginf c call pbeginf call setdbg(0) call evon c c who am i and how many processes c nproc = nnodes() me = nodeid() c c now try broadcasting messages from all nodes to every other node c send each process my id as a message c call evbgin('Hello test') itype = 1 + MSGINT do 10 iproc = 0,nproc-1 itest = me call brdcst(itype, itest, mitob(1),iproc) if (iproc.ne.me) then write(LOG,1) me, itest 1 format(' me=',i3,', itest=',i3) endif 10 continue call evend('Hello test') call evbgin('Counter test') c c now try using the shared counter c mproc = nproc do 20 i = 1,10 write(LOG,*) ' process ',me,' got ',nxtval(mproc) 20 continue junk = nxtval(-mproc) call evend('Counter test') c c now time sending a message round a ring c if (nproc.gt.1) then call evbgin('Ring test') itype = 3 left = mod(me + nproc - 1, nproc) iright = mod(me + 1, nproc) c lenbuf = 1 30 if (me .eq. 0) then start = tcgtime() call snd(itype, buf, lenbuf, left, 1) call rcv(itype, buf, lenbuf, lenmes, iright, node, 1) used = tcgtime() - start if (used.gt.0d0) then rate = 1.0d-6 * dble(nproc * lenbuf) / used else rate = 0.0d0 endif write(LOG,31) lenbuf, used, rate else call rcv(itype, buf, lenbuf, lenmes, iright, node, 1) call snd(itype, buf, lenbuf, left, 1) endif lenbuf = lenbuf * 2 if (lenbuf .le. mdtob(MAXLEN)) goto 30 31 format(' len=',i7,' bytes, used=',f8.2,' cs, rate=',f10.6,' Mb/s') call evend('Ring test') endif c c global sums c do i=1,MAXLEN ibuf(i) = i*me buf(i) = dble(ibuf(i)) enddo dtype=1+MSGDBL call igop(itype, ibuf, MAXLEN, "+") call dgop(dtype, buf, MAXLEN, "+") do i=1,MAXLEN iresult = i*nproc*(nproc-1)/2 if (ibuf(i).ne.iresult.or.buf(i).ne.dble(iresult)) . call error('TestGlobals: global sum failed', i) enddo if (me.eq.0) write(LOG,*) 'global sums OK' c c c Check that everyone can open, write, read and close c a binary FORTRAN file c call pfname('junk',fname) open(9,file=fname,form='unformatted',status='unknown', & err=1000) write(9,err=1001) buf rewind 9 read(9,err=1002) buf close(9,status='delete') call event('Read file OK') c if (me.eq.0) call stats c c Always the last thing to do is call pend c call pend c c check that everyone makes it thru after pend .. NODEID c is not actually guaranteed to work outside of pbegin/pend c section ... it may return junk. All you should do is exit c is some FORTRAN supported fashion c write(LOG,32) nodeid() 32 format(' Process ',i4,' after pend') stop c c error returns for FORTRAN I/O c 1000 call error('failed to open fortran binary file',-1) 1001 call error('failed to write fortran binary file',-1) 1002 call error('failed to read fortran binary file',-1) c end subroutine pfname(name, fname) character*(*) name, fname c c construct a unique filename by appending the process c number after the stub name c i.e. = . c c find last non-blank character in name c do 10 i = len(name),1,-1 if (name(i:i).ne.' ') goto 20 10 continue call error('pfname: name is all blanks!',i) c c check that have room to store result and then write result c 20 if (i+4.gt.len(fname)) & call error('pfname: fname too short for name.id',len(fname)) fname = name write(fname(i+1:i+4),1) nodeid() 1 format('.',i3.3) c end subroutine error(s,i) parameter (LOG = 6) character*(*) s integer i c write(LOG,1) s,i 1 format(// $ ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'/ $ 1x,a,1x,i8/ $ ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'/) c $ 1x,a,1x,i8/ c call parerr(i) c end ga-5-3/tcgmsg/tests/hello2.c0000640005473000001440000000047512115161655014564 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #include "tcgmsg.h" /** * Traditional first parallel program */ int main(int argc, char **argv) { tcg_pbegin(argc, argv); (void) printf("Hello from node %ld\n",tcg_nodeid()); tcg_pend(); return 0; } ga-5-3/tcgmsg/tests/waitcom.f0000640005473000001440000000204512115161655015040 0ustar d3n000users program main implicit none integer maxloop parameter (maxloop = 67 ) integer buf,me,nproc,loop,lenmes,node, received integer nnodes, nodeid c call pbeginf c nproc = nnodes() me = nodeid() if(nproc.lt.3)then print *,'min 3 processes required ',nproc call parerr(0) endif received =0 do loop = 1, maxloop node = Mod(loop,2)+1 if(me.eq.0) then call snd(loop, buf, 1, node, 0) endif if(me.eq.node) then received = received +1 call rcv(loop, buf, 1, lenmes, 0, node, 1) endif enddo if(me.eq.0)print *,'0: waiting for coms to node 1 to complete' call waitcom(1) if(me.eq.0)print *,'0: waiting for remaining coms to complete' call waitcom(-1) if(me.eq.0) then print *,'node=',me, maxloop,' messages sent asynchronously' else print *, 'node=',me, received,' messages received' endif c call pend end ga-5-3/tcgmsg/tests/jacobi.F0000640005473000001440000001465612115161655014577 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif program main implicit double precision (a-h, o-z) dimension q(1) #include "msgtypesf.h" parameter (niter = 30, maxp = 2047) dimension jlo(0:maxp), nj(0:maxp) data iqoff, iqaddr/0, 0/ c c Simple iterative (Jacobi) linear equation solver (Ax = b) c c Initialize the message passing environment c call pbeginf c call evon c c Read in the dimension of the matrix on process 0 and c broadcast its value to everyone else c if (nodeid() .eq. 0) then write(6,1) 1 format(' Input dimension of matrix: '$) read(5,*) n endif call brdcst(1+MSGINT, n, mitob(1), 0) c c makjlo assigns a range of columns to each process. c ncolp is the number that this process is to do. c call makjlo(n, jlo, nj) ncolp = nj(nodeid()) c c allocate memory c need = n*ncolp + 2*n + 2*ncolp call getmem(need, q, iqaddr, iqoff) if (iqaddr.eq.0) call parerr(999) ia = iqoff + 1 ib = ia + n*ncolp ix = ib + ncolp is = ix + ncolp iw = is + n c c Make matrix (a), rhs vector (b) and initial guess (x) c call makabx(n, jlo(nodeid()), ncolp, q(ia), q(ib), q(ix)) c c Do niter iterations of the Jacobi algorithm. c Synchronize first for accurate timings. c call synch(13) rjunk = timer() call jacobi(n, jlo, nj, q(ia), q(ib), q(ix), q(is), q(iw), niter) used = timer() c c Print out results c rmflop = dble(niter*2*n)*dble(n) / (used*1.0d6) if (nodeid() .eq. 0) write(6,2) n, used, nnodes(), rmflop 2 format(' N=',i4,' used ',f6.2,' secs with ',i3,' processes', $ ', mflop=', f8.2) c call pend call fexit end subroutine jacobi(n, jlo, nj, a, b, x, s, work, niter) implicit double precision (a-h, o-z) dimension a(n, *), b(*), x(*), s(n), work(n), $ jlo(0:*), nj(0:*) c c Apply niter iterations of the Jacobi algorithm. c me = nodeid() do 10 iter = 1, niter c c Compute matrix vector product Ax ... this is the real work c c Do the part that we have c call mxv(a, n, x, nj(me), s) c c Now we have to add up the result over all the processors c Call dgop for simple but inefficient version. Call mxvadd c for a much more efficient version c c call dgop(2, s, n, '+') c call mxvadd(s, work, jlo, nj) c c Compute our part of the update vector and compute c the residual error (the error requires a global sum) c err = 0.0d0 do 20 j = jlo(me), jlo(me) + nj(me) - 1 jj = j - jlo(me) + 1 x(jj) = x(jj) + (b(jj)-s(j))/a(j,jj) err = err + abs((b(jj)-s(j))) 20 continue c c Write out results every now and again c if (mod(iter,10).eq.0) then call dgop(3, err, 1, '+') if (nodeid().eq.0) write(6,1) iter, err 1 format(' Iteration',i3,', Error',d9.2) endif 10 continue c end subroutine makabx(n, jlo, nj, a, b, x) implicit double precision (a-h, o-z) dimension a(n, nj), b(nj), x(nj) c jhi = jlo + nj - 1 do 10 j = jlo, jhi jj = j - jlo + 1 cvd$ novector do 20 i = 1, n a(i,jj) = dble(i+j) / dble(abs(i-j)*n+n/50+1) 20 continue b(jj) = dble(mod(j,3)) x(jj) = b(jj) / a(j,jj) 10 continue c end subroutine makjlo(n, jlo, nj) dimension jlo(0:*), nj(0:*) c ncolp = n / nnodes() next = n - (ncolp*nnodes()) jjlo = 1 do 10 iproc = 0, nnodes()-1 jlo(iproc) = jjlo jjlo = jjlo + ncolp if (iproc.lt.next) jjlo = jjlo + 1 nj(iproc) = jjlo - jlo(iproc) 10 continue c end subroutine mxvadd(s, work, jlo, nj) implicit real*8 (a-h, o-z) #include "msgtypesf.h" dimension s(*), work(*), jlo(0:*), nj(0:*) logical synch parameter (synch=.true.) c c We have in s(1:n) this process's contribution to the c matrix vector product A*x where we had nj(me) elements c of x starting at element jlo(me). Each process needs c to end up with the same elements of the full result c vector s. c c Thus we need to send to each process (ip) the elements c s(jlo(ip)+k-1), k=1,nj(ip). And we need to receive from c each process our piece of s which we add onto our result c vector. c c If communication is synchronous then we must explictly pair up c send/receive requests on this process with the matching c receive/send operations on other processes. c c There is potential for much more asynch stuff but the damned c iPSC-i860 hangs (irreproducibly) if we send off too many c unresolved asynchronous messages (how many is too much?). c me = nodeid() nproc = nnodes() nn = nproc + mod(nproc,2) c if (synch) then do 10 iter = 1, nn-1 call pairup(nn, me, iter, ip) if (ip.lt.nproc) then if (me. lt. ip) then call snd(3+MSGDBL, s(jlo(ip)), mdtob(nj(ip)), ip, 1) call rcv(3+MSGDBL, work, mdtob(nj(me)), lenmes, ip, & node, 1) else if (me.gt.ip) then call rcv(3+MSGDBL, work, mdtob(nj(me)), lenmes, ip, & node, 1) call snd(3+MSGDBL, s(jlo(ip)), mdtob(nj(ip)), ip, 1) endif call vvadd(nj(me), s(jlo(me)), work) endif 10 continue else do 20 iter = 1, nn-1 call pairup(nn, me, iter, ip) if (ip.lt.nproc) then call snd(3+MSGDBL, s(jlo(ip)), mdtob(nj(ip)), ip, 0) call rcv(3+MSGDBL, work, mdtob(nj(me)), lenmes, ip, node, 1) call vvadd(nj(me), s(jlo(me)), work) endif 20 continue call waitcom(-1) endif c end subroutine pairup(n, me, iter, ipair) c c one of many ways of generating maximally overlapped pairs c (not all that good on a hypercube though!) c if (iter.eq.1) then ipair = mod(n+1-me,n) else if (me.eq.0) then ipair = iter else if (me.eq.iter) then ipair = 0 else if (ipair.eq.0) ipair = me ipair = ipair + 2 if (ipair.ge.n) ipair = ipair + 1 - n endif end subroutine vvadd(n, a, b) implicit real*8 (a-h, o-z) dimension a(*), b(*) c do 10 i = 1,n a(i) = a(i) + b(i) 10 continue c end ga-5-3/tcgmsg/tests/fexit.f0000640005473000001440000000004112115161655014506 0ustar d3n000users subroutine fexit end ga-5-3/tcgmsg/tests/hpuxargs.f0000640005473000001440000000044312115161655015236 0ustar d3n000usersc c $Header: /tmp/hpctools/ga/tcgmsg-mpi/hpuxargs.f,v 1.2 1999-06-08 21:08:29 d3h325 Exp $ c integer function hpargc() hpargc = iargc() + 1 end integer function hpargv(index, arg, maxlen) character*256 arg hpargv = igetarg(index,arg,maxlen) end ga-5-3/tcgmsg/tests/testargf.f0000640005473000001440000000017312115161655015214 0ustar d3n000usersc $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/testargf.f,v 1.4 1995-02-24 02:17:59 d3h325 Exp $ call parg end ga-5-3/tcgmsg/tests/test3.c0000640005473000001440000004532212115161655014441 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_MALLOC_H # include #endif #if HAVE_MEMORY_H # include #endif #if HAVE_UNISTD_H # include #elif HAVE_WINDOWS_H # include # define sleep(x) Sleep(1000*(x)) #endif #define MAXLENG 256*1024 #define N_LEN 11 #include "typesf2c.h" #include #include extern unsigned char CheckByte(); extern void Error(const char *, Integer); /** * Process 0 sleeps for 20 seconds and then sends each * process a message. The other processes sleep for periods * of 2 seconds and probes until it gets a message. All processes * respond to process 0 which recieves using a wildcard probe. */ static void TestProbe() { long type_syn = 32; long type_msg = 33; long type_ack = 34; long me = tcg_nodeid(); char buf; long lenbuf = sizeof buf; long sync = 1; if (me == 0) { (void) printf("Probe test ... processes should sleep for 20s only\n"); (void) printf("----------\n\n"); (void) fflush(stdout); } tcg_synch(type_syn); if (me == 0) { long nproc = tcg_nnodes(); long anyone = -1; long ngot = 0; long node; (void) sleep((unsigned) 20); for (node=1; node hi) { ran = hi; } list[i] = ran; } } /** * Stress the system by passing messages between a ranomly selected * list of nodes */ void Stress() { long me = tcg_nodeid(); long nproc = tcg_nnodes(); long type, lenbuf, node, lenmes, nodefrom, i, j, from, to; long *list_i, *list_j, *list_n; static long len[N_LEN] = {0,1,2,4,8,4095,4096,4097,16367,16368,16369}; char *buf1, *buf2; long n_stress, mod; long sync = 1; from = 0; lenbuf = sizeof(long); if (me == 0) { (void) printf("Stress test ... randomly exchange messages\n---------"); (void) printf("\n\nInput no. of messages: "); (void) fflush(stdout); if (scanf("%ld",&n_stress) != 1) { Error("Stress: error reading n_stress",(long) -1); } if ( (n_stress <= 0) || (n_stress > 100000) ) { n_stress = 100; } } type = 13 | MSGINT; tcg_brdcst(type, (void *) &n_stress, lenbuf, from); type++; lenbuf = n_stress * sizeof(long); #if HAVE_MEMALIGN list_i = (long *) memalign(sizeof(long), (unsigned) lenbuf); #else list_i = (long *) malloc((unsigned) lenbuf); #endif if ( list_i == (long *) NULL ) { Error("Stress: failed to allocate list_i",n_stress); } #if HAVE_MEMALIGN list_j = (long *) memalign(sizeof(long), (unsigned) lenbuf); #else list_j = (long *) malloc((unsigned) lenbuf); #endif if ( list_j == (long *) NULL ) { Error("Stress: failed to allocate list_j",n_stress); } #if HAVE_MEMALIGN list_n = (long *) memalign(sizeof(long), (unsigned) lenbuf); #else list_n = (long *) malloc((unsigned) lenbuf); #endif if ( list_n == (long *) NULL ) { Error("Stress: failed to allocate list_n",n_stress); } if ( (buf1 = malloc((unsigned) 16376)) == (char *) NULL ) { Error("Stress: failed to allocate buf1", (long) 16376); } if ( (buf2 = malloc((unsigned) 16376)) == (char *) NULL ) { Error("Stress: failed to allocate buf2", (long) 16376); } if (me == 0) { /* Make random list of node pairs and message lengths */ RandList((long) 0, (long) (tcg_nnodes()-1), list_i, n_stress); RandList((long) 0, (long) (tcg_nnodes()-1), list_j, n_stress); RandList((long) 0, (long) (N_LEN-1), list_n, n_stress); for (i=0; i= nproc) ) { Error("Stress: from is out of range", from); } if ( (to < 0) || (to >= nproc) ) { Error("Stress: to is out of range", to); } if (from == to) { continue; } if ( (me == 0) && (j%mod == 0) ) { (void) printf("Stress: test=%ld: from=%ld, to=%ld, len=%ld\n", i, from, to, lenbuf); (void) fflush(stdout); } j++; if (from == me) { tcg_snd(type, buf1, lenbuf, to, sync); } else if (to == me) { (void) bzero(buf2, (int) lenbuf); /* Initialize the rcv buffer */ buf2[lenbuf] = '+'; tcg_rcv(type, buf2, lenbuf, &lenmes, from, &nodefrom, sync); if (buf2[lenbuf] != '+') { Error("Stress: overran buffer on receive",lenbuf); } if (CheckByte((unsigned char *) buf1, lenbuf) != CheckByte((unsigned char *) buf2, lenbuf)) { Error("Stress: invalid checksum on receive",lenbuf); } if (lenmes != lenbuf) { Error("Stress: invalid message length on receive",lenbuf); } } } (void) free(buf2); (void) free(buf1); (void) free((char *) list_n); (void) free((char *) list_j); (void) free((char *) list_i); } /** Time passing a message round a ring */ void RingTest() { long me = tcg_nodeid(); long type = 4; long left = (me + tcg_nnodes() - 1) % tcg_nnodes(); long right = (me + 1) % tcg_nnodes(); char *buf=NULL, *buf2=NULL; unsigned char sum, sum2; long lenbuf, lenmes, nodefrom; double start, used, rate; long max_len; long i; long sync = 1; i = 0; lenbuf = sizeof(long); if (me == 0) { (void) printf("Ring test ... time network performance\n---------\n\n"); (void) printf("Input maximum message size: "); (void) fflush(stdout); if (scanf("%ld", &max_len) != 1) { Error("RingTest: error reading max_len",(long) -1); } if ( (max_len <= 0) || (max_len >= 4*1024*1024) ) { max_len = 256*1024; } } type = 4 | MSGINT; tcg_brdcst(type, (void *) &max_len, lenbuf, i); if ( (buf = malloc((unsigned) max_len)) == (char *) NULL) { Error("failed to allocate buf",max_len); } if (me == 0) { if ( (buf2 = malloc((unsigned) max_len)) == (char *) NULL) { Error("failed to allocate buf2",max_len); } for (i=0; i 0) { rate = 1.0e-6 * (double) (tcg_nnodes() * lenbuf) / (double) used; } else { rate = 0.0; } rate = rate * nloops; printf("len=%ld bytes, nloop=%d, used=%8.4f s, rate=%8.4f Mb/s (0x%x, 0x%x)\n", lenbuf, nloops, used, rate, sum, sum2); (void) fflush(stdout); } else { while (loop--) { tcg_rcv(type, buf, lenbuf, &lenmes, right, &nodefrom, sync); tcg_snd(type, buf, lenbuf, left, sync); } } lenbuf *= 2; } if (me == 0) { (void) free(buf2); } (void) free(buf); } /** Test receiveing a message from any node */ void RcvAnyTest() { long me = tcg_nodeid(); long type = 337 | MSGINT; char buf[8]; long i, j, node, lenbuf, lenmes, nodefrom, receiver, n_msg; long sync = 1; lenbuf = sizeof(long); if (me == 0) { (void) printf("RCV any test ... check is working!\n-----------\n\n"); (void) printf("Input node to receive : "); (void) fflush(stdout); if (scanf("%ld", &receiver) != 1) { Error("RcvAnyTest: error reading receiver",(long) -1); } if ( (receiver < 0) || (receiver >= tcg_nnodes()) ) { receiver = tcg_nnodes()-1; } (void) printf("Input number of messages : "); (void) fflush(stdout); if (scanf("%ld", &n_msg) != 1) { Error("RcvAnyTest: error reading n_msg",(long) -1); } if ( (n_msg <= 0) || (n_msg > 10) ) { n_msg = 5; } } node = 0; tcg_brdcst(type, (void *) &receiver, lenbuf, node); type++; tcg_brdcst(type, (void *) &n_msg, lenbuf, node); type++; lenbuf = 0; type = 321; for (i=0; i= 10000) ) { n_val = 100; } } node = 0; tcg_brdcst(type, (void *) &n_val, lenbuf, node); /* Loop thru a few values to visually show it is working */ next = -1; for (i=0; i<10; i++) { if (i > next) { next = tcg_nxtval(nproc); } sleep(1); if (i == next) { (void) printf("node %ld got value %ld\n", me, i); (void) fflush(stdout); } } nproc = -nproc; next = tcg_nxtval(nproc); nproc = -nproc; /* Now time it for real .. twice*/ for (ntimes=0; ntimes<2; ntimes++) { if (me == 0) { start = tcg_time(); } next = -1; ngot = 0; for (i=0; i next) { next = tcg_nxtval(nproc); } if (i == next) { ngot++; } } nproc = -nproc; next = tcg_nxtval(nproc); nproc = -nproc; if (me == 0) { used = tcg_time() - start; rate = ngot ? used / ngot: 0.; printf("node 0: From %ld busy iters did %ld, used=%lfs per call\n", n_val, ngot, rate); fflush(stdout); } type++; tcg_synch(type); } } void ToggleDebug() { static long on = 0; long me = tcg_nodeid(); long type = 666 | MSGINT; long lenbuf = sizeof(long); long from=0; long node; if (me == 0) { (void) printf("\nInput node to debug (-1 = all) : "); (void) fflush(stdout); if (scanf("%ld", &node) != 1) { Error("ToggleDebug: error reading node",(long) -1); } } tcg_brdcst(type, (void *) &node, lenbuf, from); if ((node < 0) || (node == me)) { on = (on + 1)%2; tcg_setdbg(on); } } int main(int argc, char **argv) { long type; long lenbuf; long node, opt; tcg_alt_pbegin(&argc, &argv); (void) printf("In process %ld\n", tcg_nodeid()); (void) fflush(stdout); /* Read user input for action */ lenbuf = sizeof(long); node = 0; while (1) { (void) fflush(stdout); if (tcg_nodeid() == 0) { (void) sleep(1); } type = 999; tcg_synch(type); (void) sleep(1); if (tcg_nodeid() == 0) { again: (void) printf("\n\ 0=quit\n\ 1=Ring 5=NxtVal\n\ 2=Stress 6=Global\n\ 3=Hello 7=Debug\n\ 4=RcvAny 8=Probe\n\n\ Enter test number : "); (void) fflush(stdout); if (scanf("%ld", &opt) != 1) { Error("test: input of option failed",(long) -1); } (void) printf("\n"); (void) fflush(stdout); if ( (opt < 0) || (opt > 8) ) { goto again; } } type = 2 | MSGINT; tcg_brdcst(type, (void *) &opt, lenbuf, node); switch (opt) { case 0: if (tcg_nodeid() == 0) { tcg_stats(); } tcg_pend(); return 0; case 1: RingTest(); break; case 2: Stress(); break; case 3: Hello(); break; case 4: RcvAnyTest(); break; case 5: NextValueTest(); break; case 6: TestGlobals(); break; case 7: ToggleDebug(); break; case 8: TestProbe(); break; default: Error("test: invalid option", opt); break; } } } ga-5-3/tcgmsg/tests/pvm.c0000640005473000001440000001047512115161655014202 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #include #define MAX_PROC 128 #define TCGTIME_ TCGTIME double TCGTIME_(); #define ENCODING PvmDataRaw long NODEID_() { return((long) pvm_get_PE(pvm_mytid())); } long NNODES_() { return((long)pvm_gsize(0)); } /** * Error handler */ void Error(string, code) char *string; long code; { (void) fflush(stdout); (void) fflush(stderr); (void) fprintf(stderr, "%3d:%s %ld(%x)\n", NODEID_(), string, code, code); (void) perror("system message"); (void) fflush(stdout); (void) fflush(stderr); globalexit(1); } void SND_(type, buf, lenbuf, node, sync) long *type; char *buf; long *lenbuf; long *node; long *sync; { long tid=pvm_gettid("", *node); pvm_psend(tid, *type, buf, *lenbuf, PVM_BYTE); } void RCV_(type, buf, lenbuf, lenmes, nodeselect, nodefrom, sync) long *type; char *buf; long *lenbuf; long *lenmes; long *nodeselect; long *nodefrom; long *sync; { int tid=*nodeselect, tidfrom; if(tid >-1) tid=pvm_gettid("", *nodeselect); pvm_precv(tid, *type, buf, *lenbuf, PVM_BYTE, &tidfrom, 0, 0); *nodefrom = pvm_get_PE(tidfrom); } /** * Time passing a message round a ring */ void RingTest() { long me = NODEID_(); long type = 4; long left = (me + NNODES_() - 1) % NNODES_(); long right = (me + 1) % NNODES_(); char *buf, *buf2; unsigned char sum, sum2; long lenbuf, lenmes, nodefrom; double start, used, rate; long max_len; long i; long sync = 1; char *malloc(); i = 0; lenbuf = sizeof(long); if (me == 0) { (void) printf("Ring test ... time network performance\n---------\n\n"); /* (void) printf("Input maximum message size: "); (void) fflush(stdout); if (scanf("%ld", &max_len) != 1) Error("RingTest: error reading max_len",(long) -1); if ( (max_len <= 0) || (max_len >= 4*1024*1024) ) max_len = 256*1024; */ } max_len = 512*1024; /* type = 4 | MSGINT;*/ /* BRDCST_(&type, (char *) &max_len, &lenbuf, &i);*/ if ( (buf = malloc((unsigned) max_len)) == (char *) NULL) Error("failed to allocate buf",max_len); if (me == 0) { if ( (buf2 = malloc((unsigned) max_len)) == (char *) NULL) Error("failed to allocate buf2",max_len); for (i=0; i 0) rate = 1.0e-6 * (double) (NNODES_() * lenbuf) / (double) used; else rate = 0.0; rate = rate * nloops; printf("len=%6ld bytes, nloop=%4ld, used=%8.4f s, rate=%8.4f Mb/s (0x%x, 0x%x)\n", lenbuf, nloops, used, rate, sum, sum2); (void) fflush(stdout); } else { while (loop--) { RCV_(&type, buf, &lenbuf, &lenmes, &right, &nodefrom, &sync); SND_(&type, buf, &lenbuf, &left, &sync); } } lenbuf *= 2; } if (me == 0) (void) free(buf2); (void) free(buf); } int main(int argc, char **argv) { long me, nproc; long buf[10]; long type=1, len=sizeof(buf), node, sync=1, i; me = NODEID_(); nproc = NNODES_(); /* if(me==0){ for(i=0;i<10;i++)buf[i]=i; node=1; SND_(&type, buf, &len, &node, &sync); printf("me=%d nproc = %d\n", me, nproc); fflush(stdout); }else{ node=0; RCV_(&type, buf, &len, &len, &node, &node, &sync); printf("me=%d nproc = %d\n", me, nproc); fflush(stdout); for(i=0;i<10;i++)printf("%d ",buf[i]);; } */ RingTest(); } ga-5-3/tcgmsg/tests/test2.c0000640005473000001440000004432112115161655014436 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv5.0/test.c,v 1.4 2002-01-28 19:42:04 d3h325 Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_MEMORY_H # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_MALLOC_H # include #endif #include "evlog.h" #include "msgtypesc.h" #include "typesf2c.h" #include "tcgmsg.h" extern unsigned char CheckByte(); extern void Error(const char *, Integer); /** * Process 0 sleeps for 20 seconds and then sends each * process a message. The other processes sleep for periods * of 2 seconds and probes until it gets a message. All processes * respond to process 0 which recieves using a wildcard probe. */ static void TestProbe() { long type_syn = 32; long type_msg = 33; long type_ack = 34; long me = tcg_nodeid(); char buf; long lenbuf = sizeof buf; long sync = 1; if (me == 0) { (void) printf("Probe test ... processes should sleep for 20s only\n"); (void) printf("----------\n\n"); (void) fflush(stdout); } tcg_synch(type_syn); if (me == 0) { long nproc = tcg_nnodes(); long anyone = -1; long ngot = 0; long node; (void) sleep((unsigned) 20); for (node=1; node hi) ran = hi; list[i] = ran; } } /** * Stress the system by passing messages between a ranomly selected * list of nodes */ void Stress() { long me = tcg_nodeid(); long nproc = tcg_nnodes(); long type, lenbuf, node, lenmes, nodefrom, i, j, from, to; long *list_i, *list_j, *list_n; #define N_LEN 11 static long len[N_LEN] = {0,1,2,4,8,4063,4064,4065,4072,8127,8129}; char *buf1, *buf2; long n_stress, mod; long sync = 1; from = 0; lenbuf = sizeof(long); if (me == 0) { (void) printf("Stress test ... randomly exchange messages\n-----------"); (void) printf("\n\nInput no. of messages: "); (void) fflush(stdout); if (scanf("%ld",&n_stress) != 1) Error("Stress: error reading n_stress",(long) -1); if ( (n_stress <= 0) || (n_stress > 100000) ) n_stress = 100; } type = 13 | MSGINT; tcg_brdcst(type, (void *) &n_stress, lenbuf, from); type++; lenbuf = n_stress * sizeof(long); #if HAVE_MEMALIGN list_i = (long *) memalign(sizeof(long), (unsigned) lenbuf); #else list_i = (long *) malloc((unsigned) lenbuf); #endif if ( list_i == (long *) NULL ) { Error("Stress: failed to allocate list_i",n_stress); } #if HAVE_MEMALIGN list_j = (long *) memalign(sizeof(long), (unsigned) lenbuf); #else list_j = (long *) malloc((unsigned) lenbuf); #endif if ( list_j == (long *) NULL ) { Error("Stress: failed to allocate list_j",n_stress); } #if HAVE_MEMALIGN list_n = (long *) memalign(sizeof(long), (unsigned) lenbuf); #else list_n = (long *) malloc((unsigned) lenbuf); #endif if ( list_n == (long *) NULL ) { Error("Stress: failed to allocate list_n",n_stress); } if ( (buf1 = malloc((unsigned) 16376)) == (char *) NULL ) Error("Stress: failed to allocate buf1", (long) 16376); if ( (buf2 = malloc((unsigned) 16376)) == (char *) NULL ) Error("Stress: failed to allocate buf2", (long) 16376); if (me == 0) { /* Make random list of node pairs and message lengths */ RandList((long) 0, (long) (tcg_nnodes()-1), list_i, n_stress); RandList((long) 0, (long) (tcg_nnodes()-1), list_j, n_stress); RandList((long) 0, (long) (N_LEN-1), list_n, n_stress); for (i=0; i= nproc) ) Error("Stress: from is out of range", from); if ( (to < 0) || (to >= nproc) ) Error("Stress: to is out of range", to); if (from == to) continue; if ( (me == 0) && (j%mod == 0) ) { (void) printf("Stress: test=%ld: from=%ld, to=%ld, len=%ld\n", i, from, to, lenbuf); (void) fflush(stdout); } j++; if (from == me) tcg_snd(type, buf1, lenbuf, to, sync); else if (to == me) { (void) bzero(buf2, (int) lenbuf); /* Initialize the receive buffer */ buf2[lenbuf] = '+'; tcg_rcv(type, buf2, lenbuf, &lenmes, from, &nodefrom, sync); if (buf2[lenbuf] != '+') Error("Stress: overran buffer on receive",lenbuf); if (CheckByte((unsigned char *) buf1, lenbuf) != CheckByte((unsigned char *) buf2, lenbuf)) Error("Stress: invalid checksum on receive",lenbuf); if (lenmes != lenbuf) Error("Stress: invalid message length on receive",lenbuf); } } (void) free(buf2); (void) free(buf1); (void) free((char *) list_n); (void) free((char *) list_j); (void) free((char *) list_i); } /** * Time passing a message round a ring * */ void RingTest() { long me = tcg_nodeid(); long type = 4; long left = (me + tcg_nnodes() - 1) % tcg_nnodes(); long right = (me + 1) % tcg_nnodes(); char *buf, *buf2; unsigned char sum, sum2; long lenbuf, lenmes, nodefrom; double start, used, rate; long max_len; long i; long sync = 1; i = 0; lenbuf = sizeof(long); if (me == 0) { (void) printf("Ring test ... time network performance\n---------\n\n"); (void) printf("Input maximum message size: "); (void) fflush(stdout); if (scanf("%ld", &max_len) != 1) Error("RingTest: error reading max_len",(long) -1); if ( (max_len <= 0) || (max_len >= 4*1024*1024) ) max_len = 256*1024; } type = 4 | MSGINT; tcg_brdcst(type, (void *) &max_len, lenbuf, i); if ( (buf = malloc((unsigned) max_len)) == (char *) NULL) Error("failed to allocate buf",max_len); if (me == 0) { if ( (buf2 = malloc((unsigned) max_len)) == (char *) NULL) Error("failed to allocate buf2",max_len); for (i=0; i 0) rate = 1.0e-6 * (double) (tcg_nnodes() * lenbuf) / (double) used; else rate = 0.0; rate = rate * nloops; printf("len=%6ld bytes, nloop=%4d, used=%8.4f s, rate=%8.4f Mb/s (0x%x, 0x%x)\n", lenbuf, nloops, used, rate, sum, sum2); (void) fflush(stdout); } else { while (loop--) { tcg_rcv(type, buf, lenbuf, &lenmes, right, &nodefrom, sync); tcg_snd(type, buf, lenbuf, left, sync); } } lenbuf *= 2; } if (me == 0) (void) free(buf2); (void) free(buf); } /** * Test receiveing a message from any node */ void RcvAnyTest() { long me = tcg_nodeid(); long type = 337 | MSGINT; char buf[8]; long i, j, node, lenbuf, lenmes, nodefrom, receiver, n_msg; long sync = 1; lenbuf = sizeof(long); if (me == 0) { (void) printf("RCV any test ... check is working!\n-----------\n\n"); (void) printf("Input node to receive : "); (void) fflush(stdout); if (scanf("%ld", &receiver) != 1) Error("RcvAnyTest: error reading receiver",(long) -1); if ( (receiver < 0) || (receiver >= tcg_nnodes()) ) receiver = tcg_nnodes()-1; (void) printf("Input number of messages : "); (void) fflush(stdout); if (scanf("%ld", &n_msg) != 1) Error("RcvAnyTest: error reading n_msg",(long) -1); if ( (n_msg <= 0) || (n_msg > 10) ) n_msg = 5; } node = 0; tcg_brdcst(type, (void *) &receiver, lenbuf, node); type++; tcg_brdcst(type, (void *) &n_msg, lenbuf, node); type++; lenbuf = 0; type = 321; for (i=0; i= 10000) ) n_val = 100; } node = 0; tcg_brdcst(type, (void *) &n_val, lenbuf, node); /* Loop thru a few values to visually show it is working */ next = -1; for (i=0; i<10; i++) { if (i > next) next = tcg_nxtval(nproc); if (i == next) { (void) printf("node %ld got value %ld\n",me, i); (void) fflush(stdout); } } nproc = -nproc; next = tcg_nxtval(nproc); nproc = -nproc; /* Now time it for real .. twice*/ for (ntimes=0; ntimes<2; ntimes++) { if (me == 0) start = tcg_time(); next = -1; ngot = 0; for (i=0; i next) next = tcg_nxtval(nproc); if (i == next) ngot++; } nproc = -nproc; next = tcg_nxtval(nproc); nproc = -nproc; if (me == 0) { used = tcg_time() - start; if(ngot){ rate = used / ngot; (void) printf("node 0: From %ld busy iters did %ld, used=%fs per call\n", n_val, ngot, rate); }else printf("node 0: From %ld busy iters did 0\n",n_val); (void) fflush(stdout); } type++; tcg_synch(type); } } void ToggleDebug() { static long on = 0; long me = tcg_nodeid(); long type = 666 | MSGINT; long lenbuf = sizeof(long); long from=0; long node; if (me == 0) { (void) printf("\nInput node to debug (-1 = all) : "); (void) fflush(stdout); if (scanf("%ld", &node) != 1) Error("ToggleDebug: error reading node",(long) -1); } tcg_brdcst(type, (void *) &node, lenbuf, from); if ((node < 0) || (node == me)) { on = (on + 1)%2; tcg_setdbg(on); } } int main(int argc, char **argv) { long type; long lenbuf; long node, opt; tcg_alt_pbegin(&argc, &argv); (void) printf("In process %ld\n", tcg_nodeid()); (void) fflush(stdout); /* Read user input for action */ lenbuf = sizeof(long); node = 0; while (1) { (void) fflush(stdout); if (tcg_nodeid() == 0) (void) sleep(1); type = 999; tcg_synch(type); (void) sleep(1); if (tcg_nodeid() == 0) { again: (void) printf("\n\ 0=quit\n\ 1=Ring 5=NxtVal\n\ 2=Stress 6=Global\n\ 3=Hello 7=Debug\n\ 4=RcvAny 8=Probe\n\n\ Enter test number : "); (void) fflush(stdout); if (scanf("%ld", &opt) != 1) Error("test: input of option failed",(long) -1); (void) printf("\n"); (void) fflush(stdout); if ( (opt < 0) || (opt > 8) ) goto again; } type = 2 | MSGINT; tcg_brdcst(type, (void *) &opt, lenbuf, node); switch (opt) { case 0: if (tcg_nodeid() == 0) tcg_stats(); tcg_pend(); return 0; case 1: RingTest(); break; case 2: Stress(); break; case 3: Hello(); break; case 4: RcvAnyTest(); break; case 5: NextValueTest(); break; case 6: TestGlobals(); break; case 7: ToggleDebug(); break; case 8: TestProbe(); break; default: Error("test: invalid option", opt); break; } } return 0; } ga-5-3/tcgmsg/tests/hello.c0000640005473000001440000000047612115161655014503 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #include "tcgmsg.h" /** * Traditional first parallel program. */ int main(int argc, char **argv) { tcg_pbegin(argc, argv); (void) printf("Hello from node %ld\n",tcg_nodeid()); tcg_pend(); return 0; } ga-5-3/tcgmsg/tests/testmap.c0000640005473000001440000000142712115161655015052 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #include "typesf2c.h" int ncols; int nrows; /* Given the col and row no. return the actual process no. */ #define MAP(Row,Col) (ncols*(Row) + (Col)) /* Given the node return the row no. */ #define ROW(Node) ((Node) / ncols) /* Given the node return the column no. */ #define COL(Node) ((Node) - ncols*((Node)/ncols)) int main(int argc, char **argv) { int node, type, len, me; (void) printf("Input nrows, ncols "); (void) scanf("%d %d",&nrows, &ncols); node = 0; type = 1; len = 4; for (me=0; me<(nrows*ncols); me++) { (void) printf(" me=%d row=%d col=%d map=%d\n",me, ROW(me),COL(me),MAP(ROW(me),COL(me))); } return 0; } ga-5-3/tcgmsg/tests/testpf.f0000640005473000001440000000042012115161655014675 0ustar d3n000usersc $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/testpf.f,v 1.3 1995-02-24 02:18:01 d3h325 Exp $ character*60 fname call pbeginf fname = ' ' write(fname,'(a,i3.3)') '/tmp/pfcopy.test',nodeid() call pfcopy(5, 0, fname) call pend end ga-5-3/tcgmsg/tests/testf2.F0000640005473000001440000001114012115161655014540 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif program main implicit double precision (a-h,o-z) c c $Header: /tmp/hpctools/ga/tcgmsg/ipcv5.0/testf.f,v 1.2 2001-05-08 17:30:39 edo Exp $ c c FORTRAN program to test message passing routines c c LOG is the FORTRAN unit number for standard output. c parameter (LOG = 6) parameter (MAXLEN = 262144 / 8) #include "msgtypesf.h" dimension buf(MAXLEN) integer ibuf(MAXLEN) character*80 fortnn character*80 fname c c Always the first thing to do is call pbeginf c call pbeginf call setdbg(0) c c who am i and how many processes c nproc = nnodes() me = nodeid() c c now try broadcasting messages from all nodes to every other node c send each process my id as a message c itype = 1 + MSGINT do 10 iproc = 0,nproc-1 itest = me call brdcst(itype, itest, mitob(1),iproc) if (iproc.ne.me) then write(LOG,1) me, itest 1 format(' me=',i3,', itest=',i3) endif 10 continue c c now try using the shared counter c mproc = nproc do 20 i = 1,40 write(LOG,*) ' process ',me,' got ',nxtval(mproc) 20 continue junk = nxtval(-mproc) c c now time sending a message round a ring c if (nproc.gt.1) then itype = 3 left = mod(me + nproc - 1, nproc) iright = mod(me + 1, nproc) c lenbuf = 1 30 if (me .eq. 0) then istart = mtime() call snd(itype, buf, lenbuf, left, 1) call rcv(itype, buf, lenbuf, lenmes, iright, node, 1) iused = mtime() - istart if (iused.gt.0) then rate = 1.0d-4 * dble(nproc * lenbuf) / dble(iused) else rate = 0.0d0 endif write(LOG,31) lenbuf, iused, rate else call rcv(itype, buf, lenbuf, lenmes, iright, node, 1) call snd(itype, buf, lenbuf, left, 1) endif lenbuf = lenbuf * 2 if (lenbuf .le. mdtob(MAXLEN)) goto 30 31 format(' len=',i7,' bytes, used=',i4,' cs, rate=',f10.6,' Mb/s') endif c c global sums c do i=1,MAXLEN ibuf(i) = i*me buf(i) = dble(ibuf(i)) enddo dtype=1+MSGDBL call igop(itype, ibuf, MAXLEN, "+") call dgop(dtype, buf, MAXLEN, "+") do i=1,MAXLEN iresult = i*nproc*(nproc-1)/2 if (ibuf(i).ne.iresult.or.buf(i).ne.dble(iresult)) . call error('TestGlobals: global sum failed', i) enddo if (me.eq.0) write(LOG,*) 'global sums OK' c c c Check that everyone can open, write, read and close c a binary FORTRAN file c do ii=29,45 write(fortnn,1234) ii 1234 format('fort',i2) call pfname(fortnn,fname) open(ii,file=fname,form='unformatted',status='unknown', & err=1000) enddo do ii=11,19 write(ii,err=1001) buf rewind ii read(ii,err=1002) buf close(ii,status='delete') enddo c if (me.eq.0) call stats c c Always the last thing to do is call pend c call pend c c check that everyone makes it thru after pend .. NODEID c is not actually guaranteed to work outside of pbegin/pend c section ... it may return junk. All you should do is exit c is some FORTRAN supported fashion c write(LOG,32) nodeid() 32 format(' Process ',i4,' after pend') stop c c error returns for FORTRAN I/O c 1000 call error('failed to open fortran binary file',-1) 1001 call error('failed to write fortran binary file',-1) 1002 call error('failed to read fortran binary file',-1) c end subroutine pfname(name, fname) character*(*) name, fname c c construct a unique filename by appending the process c number after the stub name c i.e. = . c c find last non-blank character in name c do 10 i = len(name),1,-1 if (name(i:i).ne.' ') goto 20 10 continue call error('pfname: name is all blanks!',i) c c check that have room to store result and then write result c 20 if (i+4.gt.len(fname)) & call error('pfname: fname too short for name.id',len(fname)) fname = name write(fname(i+1:i+4),1) nodeid() 1 format('.',i3.3) c end subroutine error(s,i) parameter (LOG = 6) character*(*) s integer i c write(LOG,1) s,i 1 format(// $ ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'/ $ 1x,a,1x,i8/ $ ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'/) c $ 1x,a,1x,i8/ c call parerr(i) c end ga-5-3/tcgmsg/tests/test.isend.c0000640005473000001440000004753212115161655015464 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv5.0/test.isend.c,v 1.2 1994-12-30 20:56:23 d3h325 Exp $ */ #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_MEMORY_H # include #endif #include "evlog.h" #include "tcgmsg.h" extern unsigned char CheckByte(); /** * Process 0 sleeps for 20 seconds and then sends each * process a message. The other processes sleep for periods * of 2 seconds and probes until it gets a message. All processes * respond to process 0 which recieves using a wildcard probe. */ static void TestProbe() { long type_syn = 32; long type_msg = 33; long type_ack = 34; long me = NODEID_(); char buf; long lenbuf = sizeof buf; long sync = 1; if (me == 0) { (void) printf("Probe test ... processes should sleep for 20s only\n"); (void) printf("----------\n\n"); (void) fflush(stdout); } SYNCH_(&type_syn); if (me == 0) { long nproc = NNODES_(); long anyone = -1; long ngot = 0; long node; (void) sleep((unsigned) 20); for (node=1; node hi) ran = hi; list[i] = ran; } } /** * Stress the system by passing messages between a ranomly selected * list of nodes */ void Stress() { long me = NODEID_(); long nproc = NNODES_(); long type, lenbuf, node, lenmes, nodefrom, i, j, from, to; long *list_i, *list_j, *list_n; #define N_LEN 11 static long len[N_LEN] = {0,1,2,4,8,4095,4096,4097,16367,16368,16369}; char *buf1, *buf2; long n_stress, mod; long sync = 1; from = 0; lenbuf = sizeof(long); if (me == 0) { (void) printf("Stress test ... randomly exchange messages\n-----------"); (void) printf("\n\nInput no. of messages: "); (void) fflush(stdout); if (scanf("%ld",&n_stress) != 1) Error("Stress: error reading n_stress",(long) -1); if ( (n_stress <= 0) || (n_stress > 100000) ) n_stress = 100; } type = 13 | MSGINT; BRDCST_(&type, (char *) &n_stress, &lenbuf, &from); type++; lenbuf = n_stress * sizeof(long); #if HAVE_MEMALIGN list_i = (long *) memalign(sizeof(long), (unsigned) lenbuf); #else list_i = (long *) malloc((unsigned) lenbuf); #endif if ( list_i == (long *) NULL ) { Error("Stress: failed to allocate list_i",n_stress); } #if HAVE_MEMALIGN list_j = (long *) memalign(sizeof(long), (unsigned) lenbuf); #else list_j = (long *) malloc((unsigned) lenbuf); #endif if ( list_j == (long *) NULL ) { Error("Stress: failed to allocate list_j",n_stress); } #if HAVE_MEMALIGN list_n = (long *) memalign(sizeof(long), (unsigned) lenbuf); #else list_n = (long *) malloc((unsigned) lenbuf); #endif if ( list_n == (long *) NULL ) { Error("Stress: failed to allocate list_n",n_stress); } if ( (buf1 = malloc((unsigned) 16376)) == (char *) NULL ) Error("Stress: failed to allocate buf1", (long) 16376); if ( (buf2 = malloc((unsigned) 16376)) == (char *) NULL ) Error("Stress: failed to allocate buf2", (long) 16376); if (me == 0) { /* Make random list of node pairs and message lengths */ RandList((long) 0, (long) (NNODES_()-1), list_i, n_stress); RandList((long) 0, (long) (NNODES_()-1), list_j, n_stress); RandList((long) 0, (long) (N_LEN-1), list_n, n_stress); for (i=0; i= nproc) ) Error("Stress: from is out of range", from); if ( (to < 0) || (to >= nproc) ) Error("Stress: to is out of range", to); if (from == to) continue; if ( (me == 0) && (j%mod == 0) ) { (void) printf("Stress: test=%ld: from=%ld, to=%ld, len=%ld\n", i, from, to, lenbuf); (void) fflush(stdout); } j++; if (from == me) SND_(&type, buf1, &lenbuf, &to, &sync); else if (to == me) { (void) bzero(buf2, (int) lenbuf); /* Initialize the receive buffer */ buf2[lenbuf] = '+'; RCV_(&type, buf2, &lenbuf, &lenmes, &from, &nodefrom, &sync); if (buf2[lenbuf] != '+') Error("Stress: overran buffer on receive",lenbuf); if (CheckByte((unsigned char *) buf1, lenbuf) != CheckByte((unsigned char *) buf2, lenbuf)) Error("Stress: invalid checksum on receive",lenbuf); if (lenmes != lenbuf) Error("Stress: invalid message length on receive",lenbuf); } } (void) free(buf2); (void) free(buf1); (void) free((char *) list_n); (void) free((char *) list_j); (void) free((char *) list_i); } void IsendTest() { #define N_ISEND_MSG 5 long me = NODEID_(); long type = 4; long left = (me + NNODES_() - 1) % NNODES_(); long right = (me + 1) % NNODES_(); char *source[N_ISEND_MSG], *dest[N_ISEND_MSG]; long lenbuf, lenmes, from; long sync = 1; long max_len; long ids[N_ISEND_MSG]; long i; if (me == 0) { (void) printf("Isend test ... test async. comms\n---------\n\n"); (void) printf("Input maximum message size: "); (void) fflush(stdout); if (scanf("%ld", &max_len) != 1) Error("IsendTest: error reading max_len", (long) -1); if ( (max_len <= 0) || (max_len >= 4*1024*1024) ) max_len = 256*1024; } type = 4 | MSGINT; lenbuf = sizeof(long); i = 0; BRDCST_(&type, (char *) &max_len, &lenbuf, &i); for (i=0; i= 4*1024*1024) ) max_len = 256*1024; } type = 4 | MSGINT; BRDCST_(&type, (char *) &max_len, &lenbuf, &i); if ( (buf = malloc((unsigned) max_len)) == (char *) NULL) Error("failed to allocate buf",max_len); if (me == 0) { if ( (buf2 = malloc((unsigned) max_len)) == (char *) NULL) Error("failed to allocate buf2",max_len); for (i=0; i 0) rate = 1.0e-6 * (double) (NNODES_() * lenbuf) / (double) used; else rate = 0.0; rate = rate * nloops; printf("len=%6ld bytes, nloop=%4ld, used=%8.4f s, rate=%8.4f Mb/s (0x%x, 0x%x)\n", lenbuf, nloops, used, rate, sum, sum2); (void) fflush(stdout); } else { while (loop--) { RCV_(&type, buf, &lenbuf, &lenmes, &right, &nodefrom, &sync); SND_(&type, buf, &lenbuf, &left, &sync); } } lenbuf *= 2; } if (me == 0) (void) free(buf2); (void) free(buf); } /** * Test receiveing a message from any node */ void RcvAnyTest() { long me = NODEID_(); long type = 337 | MSGINT; char buf[8]; long i, j, node, lenbuf, lenmes, nodefrom, receiver, n_msg; long sync = 1; lenbuf = sizeof(long); if (me == 0) { (void) printf("RCV any test ... check is working!\n-----------\n\n"); (void) printf("Input node to receive : "); (void) fflush(stdout); if (scanf("%ld", &receiver) != 1) Error("RcvAnyTest: error reading receiver",(long) -1); if ( (receiver < 0) || (receiver >= NNODES_()) ) receiver = NNODES_()-1; (void) printf("Input number of messages : "); (void) fflush(stdout); if (scanf("%ld", &n_msg) != 1) Error("RcvAnyTest: error reading n_msg",(long) -1); if ( (n_msg <= 0) || (n_msg > 10) ) n_msg = 5; } node = 0; BRDCST_(&type, (char *) &receiver, &lenbuf, &node); type++; BRDCST_(&type, (char *) &n_msg, &lenbuf, &node); type++; lenbuf = 0; type = 321; for (i=0; i= 10000) ) n_val = 100; } node = 0; BRDCST_(&type, (char *) &n_val, &lenbuf, &node); /* Loop thru a few values to visually show it is working */ next = -1; for (i=0; i<10; i++) { if (i > next) next = NXTVAL_(&nproc); if (i == next) { (void) printf("node %ld got value %ld\n",me, i); (void) fflush(stdout); } } nproc = -nproc; next = NXTVAL_(&nproc); nproc = -nproc; /* Now time it for real .. twice*/ for (ntimes=0; ntimes<2; ntimes++) { if (me == 0) start = TCGTIME_(); next = -1; ngot = 0; for (i=0; i next) next = NXTVAL_(&nproc); if (i == next) ngot++; } nproc = -nproc; next = NXTVAL_(&nproc); nproc = -nproc; if (me == 0) { used = TCGTIME_() - start; if(ngot){ rate = used / ngot; (void) printf("node 0: From %ld busy iters did %ld, used=%fs per call\n", n_val, ngot, rate); }else printf("node 0: From %ld busy iters did 0\n",n_val); (void) fflush(stdout); } type++; SYNCH_(&type); } } void ToggleDebug() { static long on = 0; long me = NODEID_(); long type = 666 | MSGINT; long lenbuf = sizeof(long); long from=0; long node; if (me == 0) { (void) printf("\nInput node to debug (-1 = all) : "); (void) fflush(stdout); if (scanf("%ld", &node) != 1) Error("ToggleDebug: error reading node",(long) -1); } BRDCST_(&type, (char *) &node, &lenbuf, &from); if ((node < 0) || (node == me)) { on = (on + 1)%2; SETDBG_(&on); } } int main(int argc, char **argv) { long type; long lenbuf; long node, opt; tcg_pbegin(argc, argv); (void) printf("In process %ld\n", NODEID_()); (void) fflush(stdout); /* Read user input for action */ lenbuf = sizeof(long); node = 0; while (1) { (void) fflush(stdout); if (NODEID_() == 0) (void) sleep(1); type = 999; SYNCH_(&type); (void) sleep(1); if (NODEID_() == 0) { again: (void) printf("\n\ 0=quit\n\ 1=Ring 5=NxtVal\n\ 2=Stress 6=Global\n\ 3=Hello 7=Debug\n\ 4=RcvAny 8=Probe\n\ 9=Isend\n\n\ Enter test number : "); (void) fflush(stdout); if (scanf("%ld", &opt) != 1) Error("test: input of option failed",(long) -1); (void) printf("\n"); (void) fflush(stdout); if ( (opt < 0) || (opt > 9) ) goto again; } type = 2 | MSGINT; BRDCST_(&type, (char *) &opt, &lenbuf, &node); switch (opt) { case 0: if (NODEID_() == 0) STATS_(); PEND_(); return 0; case 1: RingTest(); break; case 2: Stress(); break; case 3: Hello(); break; case 4: RcvAnyTest(); break; case 5: NextValueTest(); break; case 6: TestGlobals(); break; case 7: ToggleDebug(); break; case 8: TestProbe(); break; case 9: IsendTest(); break; default: Error("test: invalid option", opt); break; } } } ga-5-3/tcgmsg/tests/xdrtest.c0000640005473000001440000000405112115161655015066 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H #include #endif #if HAVE_RPC_TYPES_H #include #endif #if HAVE_RPC_XDR_H #include #endif #if HAVE_STRING_H #include #endif static char *xdrbuf; static XDR xdrs; int main(int argc, char **argv) { long data[4]; u_int len; long *temp=data; if (argc != 2) { return 1; } xdrbuf = malloc(4096); if (strcmp(argv[1], "encode") == 0) { xdrmem_create(&xdrs, xdrbuf, 4096, XDR_ENCODE); (void) fprintf(stderr," encode xdr_setpos=%d\n", xdr_setpos(&xdrs, (u_int) 0)); (void) scanf("%ld %ld %ld %ld", data, data+1, data+2, data+3); (void) fprintf(stderr,"encode Input longs %ld, %ld, %ld, %ld\n", data[0], data[1], data[2], data[3]); len = 4; (void) fprintf(stderr,"encode xdr_array=%d\n", xdr_array(&xdrs, (char **) &temp, &len, (u_int) 4096, (u_int) sizeof(long), (xdrproc_t)xdr_long)); len = 4*4 + 4; (void) fprintf(stderr,"encode len=%lu\n", (long unsigned)len); (void) fwrite(&len, 4, 1, stdout); (void) fwrite(xdrbuf, 1, len, stdout); (void) fprintf(stderr,"encode data written\n"); return 0; } else { xdrmem_create(&xdrs, xdrbuf, 4096, XDR_DECODE); (void) fprintf(stderr," decode xdr_setpos=%d\n", xdr_setpos(&xdrs, (u_int) 0)); (void) fread(&len, 4, 1, stdin); (void) fprintf(stderr,"decode len=%lu\n", (long unsigned)len); (void) fread(xdrbuf, 1, len, stdin); (void) fprintf(stderr,"decode data read\n"); (void) fprintf(stderr,"decode xdr_array=%d\n", xdr_array(&xdrs, (char **) &temp, &len, (u_int) 4096, (u_int) sizeof(long), (xdrproc_t)xdr_long)); (void) fprintf(stderr,"decode Input longs %ld, %ld, %ld, %ld\n", data[0], data[1], data[2], data[3]); return 0; } } ga-5-3/tcgmsg/tests/toplot.c0000640005473000001440000001001412115161655014706 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_LIBPLOT #if HAVE_STDIO_H # include #endif #if HAVE_CTYPE_H # include #endif extern void openpl(); extern void erase(); extern void label(); extern void line(); extern void circle(); extern void arc(); extern void move(); extern void cont(); extern void point(); extern void linemod(); extern void space(); extern void closepl(); void Error(char *string, int integer) { (void) fflush(stdout); (void) fprintf(stderr,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); (void) fprintf(stderr,"%s %d (0x%x)\n",string, integer, integer); (void) fprintf(stderr,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); (void) fflush(stderr); (void) exit(1); } static int xmin = 0; static int ymin = 0; #define SCALE(X, XMIN, XSCALE) \ 2048 + (int) (XSCALE * (DoublePrecision) ( (X) - (XMIN) ) ) /** * Crude ascii interface into UNIX binary plot file format. * * All co-ordinates are integer values. * * s xmin ymin xmax ymax ... defines user co-ordinates * * f 1 ... solid lines * f 2 ... dotted * f 3 ... shortdashed * f 4 ... longdashed * * t x y text_string_with_no_spaces_in_it ... draw text at coords x,y * * l x1 y1 x2 y2 ... draw line from (x1,y1)->(x2,y2) */ int main(int argc, char **argv) { int test, i1,i2,i3,i4,nline=0,x1,x2,y1,y2; char string[1024]; DoublePrecision scalex, scaley; openpl(); space(0, 0, 32767, 32767); /* open as large as possible */ while ( (test = getchar()) != EOF ) { if ( !isspace(test) ) { nline++; switch (test) { case 's': if (scanf("%d %d %d %d",&i1,&i2,&i3,&i4) != 4) Error("plot: scanning space arguments, line=",nline); else { xmin = i1; ymin = i2; scalex = (32767.0-4096.0) / (DoublePrecision) (i3 - i1); scaley = (32767.0-4096.0) / (DoublePrecision) (i4 - i2); } break; case 'l': if (scanf("%d %d %d %d",&i1,&i2,&i3,&i4) != 4) Error("plot: scanning line arguments, line=",nline); x1 = SCALE(i1, xmin, scalex); x2 = SCALE(i3, xmin, scalex); y1 = SCALE(i2, ymin, scaley); y2 = SCALE(i4, ymin, scaley); line(x1, y1, x2, y2); break; case 'f': if (scanf("%d",&i1) != 1) Error("plot: scanning linemode arguments",-1); switch (i1) { case 1: linemod("solid"); break; case 2: linemod("dotted"); break; case 3: linemod("shortdashed"); break; case 4: linemod("longdashed"); break; default: Error("plot: unknown linemode",i1); } break; case 't': if (scanf("%d %d %s",&i1, &i2, string) != 3) Error("plot: scanning text arguments", -1); x1 = SCALE(i1, xmin, scalex); y1 = SCALE(i2, ymin, scaley); move(x1, y1); label(string); break; default: Error("plot: unknown directive, line=",nline); break; } } } closepl(); (void) fflush(stdout); return 0; } #else /* HAVE_LIBPLOT */ #if HAVE_STDIO_H # include #endif int main(int argc, char **argv) { printf("no plot utility on this system\n"); return 0; } #endif /* HAVE_LIBPLOT */ ga-5-3/tcgmsg/tests/test.c0000640005473000001440000004563212115161655014362 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_MEMORY_H # include #endif #if HAVE_STDLIB_H # include #endif #if HAVE_MALLOC_H # include #endif #include "evlog.h" #include "typesf2c.h" #include "msgtypesc.h" #include "tcgmsg.h" extern unsigned char CheckByte(); extern void Error(const char *, Integer); /** * Process 0 sleeps for 20 seconds and then sends each * process a message. The other processes sleep for periods * of 2 seconds and probes until it gets a message. All processes * respond to process 0 which recieves using a wildcard probe. */ static void TestProbe() { long type_syn = 32; long type_msg = 33; long type_ack = 34; long me = tcg_nodeid(); char buf; long lenbuf = sizeof buf; long sync = 1; if (me == 0) { (void) printf("Probe test ... processes should sleep for 20s only\n"); (void) printf("----------\n\n"); (void) fflush(stdout); } tcg_synch(type_syn); if (me == 0) { long nproc = tcg_nnodes(); long anyone = -1; long ngot = 0; long node; (void) sleep((unsigned) 20); for (node=1; node hi) { ran = hi; } list[i] = ran; } } /** * Stress the system by passing messages between a ranomly selected * list of nodes */ void Stress() { long me = tcg_nodeid(); long nproc = tcg_nnodes(); long type, lenbuf, node, lenmes, nodefrom, i, j, from, to; long *list_i, *list_j, *list_n; #define N_LEN 11 static long len[N_LEN] = {0,1,2,4,8,4095,4096,4097,16367,16368,16369}; char *buf1, *buf2; long n_stress, mod; long sync = 1; from = 0; lenbuf = sizeof(long); if (me == 0) { (void) printf("Stress test ... randomly exchange messages\n-----------"); (void) printf("\n\nInput no. of messages: "); (void) fflush(stdout); if (scanf("%ld",&n_stress) != 1) { Error("Stress: error reading n_stress",(long) -1); } if ( (n_stress <= 0) || (n_stress > 100000) ) { n_stress = 100; } } type = 13 | MSGINT; tcg_brdcst(type, (void *) &n_stress, lenbuf, from); type++; lenbuf = n_stress * sizeof(long); #if HAVE_MEMALIGN list_i = (long *) memalign(sizeof(long), (unsigned) lenbuf); #else list_i = (long *) malloc((unsigned) lenbuf); #endif if ( list_i == (long *) NULL ) { Error("Stress: failed to allocate list_i",n_stress); } #if HAVE_MEMALIGN list_j = (long *) memalign(sizeof(long), (unsigned) lenbuf); #else list_j = (long *) malloc((unsigned) lenbuf); #endif if ( list_j == (long *) NULL ) { Error("Stress: failed to allocate list_j",n_stress); } #if HAVE_MEMALIGN list_n = (long *) memalign(sizeof(long), (unsigned) lenbuf); #else list_n = (long *) malloc((unsigned) lenbuf); #endif if ( list_n == (long *) NULL ) { Error("Stress: failed to allocate list_n",n_stress); } if ( (buf1 = malloc((unsigned) 16376)) == (char *) NULL ) { Error("Stress: failed to allocate buf1", (long) 16376); } if ( (buf2 = malloc((unsigned) 16376)) == (char *) NULL ) { Error("Stress: failed to allocate buf2", (long) 16376); } if (me == 0) { /* Make random list of node pairs and message lengths */ RandList((long) 0, (long) (tcg_nnodes()-1), list_i, n_stress); RandList((long) 0, (long) (tcg_nnodes()-1), list_j, n_stress); RandList((long) 0, (long) (N_LEN-1), list_n, n_stress); for (i=0; i= nproc) ) { Error("Stress: from is out of range", from); } if ( (to < 0) || (to >= nproc) ) { Error("Stress: to is out of range", to); } if (from == to) { continue; } if ( (me == 0) && (j%mod == 0) ) { (void) printf("Stress: test=%ld: from=%ld, to=%ld, len=%ld\n", i, from, to, lenbuf); (void) fflush(stdout); } j++; if (from == me) { tcg_snd(type, buf1, lenbuf, to, sync); } else if (to == me) { (void) bzero(buf2, (int) lenbuf); /* Initialize the receive buffer */ buf2[lenbuf] = '+'; tcg_rcv(type, buf2, lenbuf, &lenmes, from, &nodefrom, sync); if (buf2[lenbuf] != '+') { Error("Stress: overran buffer on receive",lenbuf); } if (CheckByte((unsigned char *) buf1, lenbuf) != CheckByte((unsigned char *) buf2, lenbuf)) { Error("Stress: invalid checksum on receive",lenbuf); } if (lenmes != lenbuf) { Error("Stress: invalid message length on receive",lenbuf); } } } (void) free(buf2); (void) free(buf1); (void) free((char *) list_n); (void) free((char *) list_j); (void) free((char *) list_i); #undef N_LEN } /** Time passing a message round a ring. */ void RingTest() { long me = tcg_nodeid(); long type = 4; long left = (me + tcg_nnodes() - 1) % tcg_nnodes(); long right = (me + 1) % tcg_nnodes(); char *buf, *buf2=NULL; unsigned char sum, sum2; long lenbuf, lenmes, nodefrom; DoublePrecision start, used, rate; long max_len; long i; long sync = 1; i = 0; lenbuf = sizeof(long); if (me == 0) { (void) printf("Ring test ... time network performance\n---------\n\n"); (void) printf("Input maximum message size: "); (void) fflush(stdout); if (scanf("%ld", &max_len) != 1) { Error("RingTest: error reading max_len",(long) -1); } if ( (max_len <= 0) || (max_len >= 4*1024*1024) ) { max_len = 256*1024; } } type = 4 | MSGINT; tcg_brdcst(type, (void *) &max_len, lenbuf, i); if ( (buf = malloc((unsigned) max_len)) == (char *) NULL) { Error("failed to allocate buf",max_len); } if (me == 0) { if ( (buf2 = malloc((unsigned) max_len)) == (char *) NULL) { Error("failed to allocate buf2",max_len); } for (i=0; i0)?lenbuf:1); int loop = nloops; if (me == 0) { sum = CheckByte((unsigned char *) buf, lenbuf); if (lenbuf) (void) bzero(buf2, (int) lenbuf); start = tcg_time(); while (loop--) { tcg_snd(type, buf, lenbuf, left, sync); tcg_rcv(type, buf2, lenbuf, &lenmes, right, &nodefrom, sync); } used = tcg_time() - start; sum2 = CheckByte((unsigned char *) buf2, lenbuf); sum2 = 0; if (used > 0) { rate = 1.0e-6 * (DoublePrecision) (tcg_nnodes() * lenbuf) / (DoublePrecision) used; } else { rate = 0.0; } rate = rate * nloops; printf("len=%6ld bytes, nloop=%4d, used=%8.4f s, rate=%8.4f Mb/s (0x%x, 0x%x)\n", lenbuf, nloops, used, rate, sum, sum2); (void) fflush(stdout); } else { while (loop--) { tcg_rcv(type, buf, lenbuf, &lenmes, right, &nodefrom, sync); tcg_snd(type, buf, lenbuf, left, sync); } } if (lenbuf) { lenbuf *= 2; } else { lenbuf = 1; } (void) fflush(stdout); } if (me == 0) { (void) free(buf2); } (void) free(buf); } /** Test receiveing a message from any node. */ void RcvAnyTest() { long me = tcg_nodeid(); long type = 337 | MSGINT; char buf[8]; long i, j, node, lenbuf, lenmes, nodefrom, receiver, n_msg; long sync = 1; lenbuf = sizeof(long); if (me == 0) { (void) printf("RCV any test ... check is working!\n-----------\n\n"); (void) printf("Input node to receive : "); (void) fflush(stdout); if (scanf("%ld", &receiver) != 1) { Error("RcvAnyTest: error reading receiver",(long) -1); } if ( (receiver < 0) || (receiver >= tcg_nnodes()) ) { receiver = tcg_nnodes()-1; } (void) printf("Input number of messages : "); (void) fflush(stdout); if (scanf("%ld", &n_msg) != 1) { Error("RcvAnyTest: error reading n_msg",(long) -1); } if ( (n_msg <= 0) || (n_msg > 10) ) { n_msg = 5; } } node = 0; tcg_brdcst(type, (void *) &receiver, lenbuf, node); type++; tcg_brdcst(type, (void *) &n_msg, lenbuf, node); type++; lenbuf = 0; type = 321; for (i=0; i= 10000) ) { n_val = 100; } } node = 0; tcg_brdcst(type, (void *) &n_val, lenbuf, node); /* Loop thru a few values to visually show it is working */ next = -1; for (i=0; i<10; i++) { if (i > next) { next = tcg_nxtval(nproc); } if (i == next) { (void) printf("node %ld got value %ld\n",me, i); (void) fflush(stdout); } } nproc = -nproc; next = tcg_nxtval(nproc); nproc = -nproc; /* Now time it for real .. twice*/ for (ntimes=0; ntimes<2; ntimes++) { if (me == 0) { start = tcg_time(); } next = -1; ngot = 0; for (i=0; i next) { next = tcg_nxtval(nproc); } if (i == next) { ngot++; } } nproc = -nproc; next = tcg_nxtval(nproc); nproc = -nproc; if (me == 0) { used = tcg_time() - start; rate = used / ngot; (void) printf("node 0: From %ld busy iters did %ld, used=%fs per call\n", n_val, ngot, rate); (void) fflush(stdout); } type++; tcg_synch(type); } } void ToggleDebug() { static long on = 0; long me = tcg_nodeid(); long type = 666 | MSGINT; long lenbuf = sizeof(long); long from=0; long node; if (me == 0) { (void) printf("\nInput node to debug (-1 = all) : "); (void) fflush(stdout); if (scanf("%ld", &node) != 1) { Error("ToggleDebug: error reading node",(long) -1); } } tcg_brdcst(type, (void*) &node, lenbuf, from); if ((node < 0) || (node == me)) { on = (on + 1)%2; tcg_setdbg(on); } } int main(int argc, char **argv) { long type; long lenbuf; long node, opt; #if TEST_OLD_PBEGIN tcg_pbegin(argc, argv); #else tcg_alt_pbegin(&argc, &argv); #endif (void) printf("In process %ld\n", tcg_nodeid()); (void) fflush(stdout); /* Read user input for action */ lenbuf = sizeof(long); node = 0; while (1) { (void) fflush(stdout); if (tcg_nodeid() == 0) { (void) sleep(1); } type = 999; tcg_synch(type); (void) sleep(1); if (tcg_nodeid() == 0) { again: (void) printf("\n\ 0=quit\n\ 1=Ring 5=NxtVal\n\ 2=Stress 6=Global\n\ 3=Hello 7=Debug\n\ 4=RcvAny 8=Probe\n\n\ Enter test number : "); (void) fflush(stdout); if (scanf("%ld", &opt) != 1) { Error("test: input of option failed",(long) -1); } (void) printf("\n"); (void) fflush(stdout); if ( (opt < 0) || (opt > 8) ) { goto again; } } type = 2 | MSGINT; tcg_brdcst(type, (void*) &opt, lenbuf, node); switch (opt) { case 0: if (tcg_nodeid() == 0) { tcg_stats(); } tcg_pend(); return 0; case 1: RingTest(); break; case 2: Stress(); break; case 3: Hello(); break; case 4: RcvAnyTest(); break; case 5: NextValueTest(); break; case 6: TestGlobals(); break; case 7: ToggleDebug(); break; case 8: TestProbe(); break; default: Error("test: invalid option", opt); break; } } } ga-5-3/tcgmsg/tests/nxtsrv.c0000640005473000001440000000434112115161655014737 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/nxtsrv.c,v 1.4 1995-02-24 02:17:33 d3h325 Exp $ */ #include #include "sndrcv.h" #define DEBUG_ 0 #define TYPE_NXTVAL 32767 int main() /* This runs as highest no. process(es) */ { long cnt = 0; /* actual counter */ long lencnt = sizeof cnt; /* length of cnt */ long ndone = 0; /* no. finished for this loop */ long ntermin = 0; /* no. terminated so far (pend) */ long node = -1; /* select any node */ long type = TYPE_NXTVAL; /* message type */ long buf[2]; /* buffer to get values */ long lenbuf = sizeof buf; /* length of buffer */ long mproc; /* no. of processes running loop */ long nval; /* no. of values requested */ long done_list[16384]; /* list of processes finished with this loop */ long sync = 1; /* all info goes synchronously */ long on=0; long lenmes, nodefrom; PBEGIN_(); SETDBG_(&on); while (1) { /* Wait for input from any node */ RCV_(&type, (char *) buf, &lenbuf, &lenmes, &node, &nodefrom, &sync); if (lenmes != lenbuf) Error("NextValueServer: lenmes != lenbuf", lenmes); mproc = buf[0]; nval = buf[1]; if (DEBUG_) (void) printf("NVS: from=%d, mproc=%d, ndone=%d, ntermin=%d\n", nodefrom, mproc, ndone, ntermin); if (mproc == 0) { /* Sending process is about to terminate. Send reply and disable sending to him. If all processes have finished return. */ SND_(&type, (char *) &cnt, &lencnt, &nodefrom, &sync); if (++ntermin == NNODES_()) return 0; } else if (mproc > 0) { /* This is what we are here for */ SND_(&type, (char *) &cnt, &lencnt, &nodefrom, &sync); cnt += nval; } else if (mproc < 0) { /* This process has finished the loop. Wait until all mproc processes have finished before releasing it */ done_list[ndone++] = nodefrom; if (ndone == -mproc) { while (ndone--) { nodefrom = done_list[ndone]; SND_(&type, (char *) &cnt, &lencnt, &nodefrom, &sync); } cnt = 0; ndone = 0; } } } return 0; } ga-5-3/tcgmsg/tests/timer.f0000640005473000001440000000077512115161655014525 0ustar d3n000users double precision function timer() c c return the time since the last call to timer. c c must be initialized by calling once and throwing away the c value c ... use cpu time on multi-user machines c ... use elapsed time on dedicated or single user machines. c *mdc*if unix * real*4 dtime, tt(2) * timer = dble(dtime(tt)) *mdc*elseif tcgmsg save mlast data mlast/0/ m = mtime() timer = dble(m - mlast) * 0.01d0 mlast = m *mdc*endif c end ga-5-3/tcgmsg/tests/parse.c0000640005473000001440000001413712115161655014511 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STDLIB_H # include #endif #define MAX_TOKEN 2048 /** * Read next token from file. Tokens are separated by the character * delimeter. * Tokens are returned as NUL terminated character strings which * almost certainly should always be freed with free() after use. * * There is an internally imposed maximum token size of MAX_TOKEN bytes. * * All errors are handled by returning a NULL pointer. */ char *ReadToken(FILE *file, char delimiter) { char *buf = malloc((unsigned) MAX_TOKEN); char *temp; int input, used=0; if (!buf) { return (char *) NULL; } temp = buf; while ( (input = getc(file)) != EOF ) { used++; if (input == delimiter) { *temp = '\0'; break; } else { *temp++ = (char) input; if (used == MAX_TOKEN) { used = 0; break; } } } /* duplicate string to minimize problems if string is not freed in calling program */ if (used) { temp = strdup(buf); } else { temp = (char *) NULL; } (void) free(buf); return temp; } int FindToken(char *token, FILE *file, char delimiter) { char *input; while (input = ReadToken(file, delimiter)) { if (strcmp(input, token) == 0) { return 1; } else { (void) free(input); } } return 0; } /** * Return the starting time and duration of the events file. */ void GetTimeSpan(FILE *file, DoublePrecision *start, DoublePrecision *duration) { char *input; DoublePrecision end; end = *start = 0.0; if (FindToken("TIME", file, ':')) { end = *start = atof(input = ReadToken(file, ':')); (void) free(input); } while (FindToken("TIME", file, ':')) { end = atof(input = ReadToken(file, ':')); (void) free(input); } *duration = end - *start; (void) fseek(file, 0L, 0); } int main(int argc, char **argv) { char filename[11]; FILE *file, *plot; char *token; char *event; DoublePrecision time, start, duration=0.0, otim, span, margin, comms, useful; int newstate, state, i, nproc, lo, hi; if (argc == 1) { lo = 0; hi = 127; } else if (argc == 3) { lo = atoi(argv[1]); hi = atoi(argv[2]); } else { (void) fprintf(stderr, "usage: %s [lo hi]\n", argv[0]); (void) fprintf(stderr, "... with no arguments parse all event files\n"); (void) fprintf(stderr, "... or with lo & hi only files in this range\n"); (void) fprintf(stderr, "... e.g. parse 16 31\n"); return 1; } /* open the file that will have the plot stuff in it */ /* change of heart here ... just write to stdout */ /* if (!(plot = fopen("plot", "w"))) { perror("failed to open plot file"); return 1; } */ plot = stdout; /* Determine how many processes there are and maximum time span */ nproc = 0; for (i=lo; i<=hi; i++) { (void) sprintf(filename, "events.%03d", nproc); if ( !(file = fopen(filename, "r")) ) { break; } GetTimeSpan(file, &start, &span); (void) fclose(file); if (span > duration) { duration = span; } nproc++; } margin = duration * 0.1; (void) fprintf(plot, "s %d %d %d %d\n",0,0, (int) ((margin*2.0+duration)*100.0), 5*nproc); /* (void) fprintf(stderr, "nproc=%d, duration=%4.2f\n", nproc, duration); */ /* Now go thru the files and actually parse the contents */ for (i=lo; i<=hi; i++) { (void) sprintf(filename, "events.%03d", i); if ( !(file = fopen(filename, "r")) ) { break; } GetTimeSpan(file, &start, &span); comms = 0.0; state = 5*(i-lo); otim = 0.0 + margin; (void) fprintf(plot, "t %d %d %d\n", 0, state, i); while ( token = ReadToken(file, ':') ) { if (strcmp(token, "BEGIN") == 0) { newstate = 5*(i-lo) + 1; } else if (strcmp(token, "END") == 0) { newstate = 5*(i-lo); } else { continue; } /* Have a BEGIN or END ... only process Snd/Rcv at moment */ event = ReadToken(file, ':'); if ((strcmp(event, "Snd") == 0) || (strcmp(event,"Rcv") == 0) || (strcmp(event,"Waitcom") == 0)) { if (FindToken("TIME", file, ':')) { time = atof(ReadToken(file, ':')) - start + margin; (void) fprintf(plot, "l %d %d %d %d\n", (int) (otim*100.0), state, (int) (time*100.0), state); (void) fprintf(plot, "l %d %d %d %d\n", (int) (time*100.0), state, (int) (time*100.0), newstate); /* Accumulate the time spent in communication */ if (newstate == (5*(i-lo))) { comms = comms + time - otim; } otim = time; state = newstate; } } else if (strcmp(event, "Process") == 0) { if (FindToken("TIME", file, ':')) { time = atof(ReadToken(file, ':')) - start + margin; (void) fprintf(plot, "l %d %d %d %d\n", (int) (otim*100.0), state, (int) (time*100.0), state); otim = time; } } } /* Assume that non-communication time is useful */ useful = 100.0 * (span - comms) / duration; (void) fprintf(plot, "t %d %d %4.1f%%\n", (int) (100.0*duration+150.0*margin), 5*(i-lo), useful); (void) fflush(plot); (void) fclose(file); } return 0; } ga-5-3/tcgmsg/tests/test_arcv.f0000640005473000001440000000153712115161655015374 0ustar d3n000users program async integer nodeid, nnodes integer me, proc integer req, ack, len,node, to c call pbeginf proc = nnodes() me = nodeid() print *,'proc=',proc,' node=',me if(proc.lt.2) then call pend() return endif c call setdbg(1) if(me.eq.0)then print *, 'Checking non-blocking receive' call rcv(33, req,1, len, 1, node, 1) !blocking print *, 'received request ',me call snd(34, ack,1, 1, 1) endif c if(me.eq.1)then call rcv(34, ack, 1, len, 0, node, 0)!nonblocking print *,'after nonblocking receive =',me call snd(33, req,1, 0, 0) print *,'after nonblocking send =',me call waitcom(0) print *, 'OK' endif call pend() end ga-5-3/tcgmsg/tests/testf3.F0000640005473000001440000001207112115161655014545 0ustar d3n000users#if HAVE_CONFIG_H # include "config.fh" #endif program main implicit double precision (a-h,o-z) c c $Header: /tmp/hpctools/ga/tcgmsg-mpi/testf.F,v 1.1.12.1 2006-12-14 13:24:56 manoj Exp $ c c FORTRAN program to test message passing routines c c LOG is the FORTRAN unit number for standard output. c parameter (LOG = 6) parameter (MAXLEN = 262144 / 8) #include "msgtypesf.h" dimension buf(MAXLEN) integer ibuf(MAXLEN) character*80 fname integer IUNIT double precision tcgtime, start,used c c Always the first thing to do is call pbeginf c call pbeginf call setdbg(0) call evon c c who am i and how many processes c nproc = nnodes() me = nodeid() c c now try broadcasting messages from all nodes to every other node c send each process my id as a message c call evbgin('Hello test') itype = 1 + MSGINT do 10 iproc = 0,nproc-1 itest = me call brdcst(itype, itest, mitob(1),iproc) if (iproc.ne.me) then write(LOG,1) me, itest 1 format(' me=',i3,', itest=',i3) endif 10 continue call evend('Hello test') call evbgin('Counter test') c c now try using the shared counter c mproc = nproc do 20 i = 1,10 write(LOG,*) ' process ',me,' got ',nxtval(mproc) 20 continue junk = nxtval(-mproc) call evend('Counter test') c c now time sending a message round a ring c if (nproc.gt.1) then call evbgin('Ring test') itype = 3 left = mod(me + nproc - 1, nproc) iright = mod(me + 1, nproc) c lenbuf = 1 30 if (me .eq. 0) then start = tcgtime() call snd(itype, buf, lenbuf, left, 1) call rcv(itype, buf, lenbuf, lenmes, iright, node, 1) used = tcgtime() - start if (used.gt.0) then c rate = 1.0d-4 * dble(nproc * lenbuf) / dble(iused) rate = 1.0d-6 * dble(nproc * lenbuf) / used else rate = 0.0d0 endif write(LOG,31) lenbuf, used, rate else call rcv(itype, buf, lenbuf, lenmes, iright, node, 1) call snd(itype, buf, lenbuf, left, 1) endif lenbuf = lenbuf * 2 if (lenbuf .le. mdtob(MAXLEN)) goto 30 31 format(' len=',i7,'bytes, used=',f10.6,'s, rate=',f10.6,'Mb/s') call evend('Ring test') endif c c global sums c do i=1,MAXLEN ibuf(i) = i*me buf(i) = dble(ibuf(i)) enddo dtype=1+MSGDBL call igop(itype, ibuf, MAXLEN, "+") call dgop(dtype, buf, MAXLEN, "+") do i=1,MAXLEN iresult = i*nproc*(nproc-1)/2 if (ibuf(i).ne.iresult) then print *,'error',i,ibuf(i),iresult call error('TestGlobals: global sum (igop) failed', i) endif if (buf(i).ne.dble(iresult)) then print *,'error',i,buf(i),iresult call error('TestGlobals: global sum (dgop) failed', i) endif enddo if (me.eq.0) write(LOG,*) 'global sums OK' c c c Check that everyone can open, write, read and close c a binary FORTRAN file c IUNIT = 9+me call pfname('junk',fname) open(IUNIT,file=fname,form='unformatted',status='unknown', & err=1000) write(IUNIT,err=1001) buf rewind IUNIT read(IUNIT,err=1002) buf close(IUNIT,status='delete') call event('Read file OK') c if (me.eq.0) call stats c c Always the last thing to do is call pend c call pend c c check that everyone makes it thru after pend .. NODEID c is not actually guaranteed to work outside of pbegin/pend c section ... it may return junk. All you should do is exit c is some FORTRAN supported fashion c write(LOG,32) me 32 format(' Process ',i4,' after pend') stop c c error returns for FORTRAN I/O c 1000 call error('failed to open fortran binary file',-1) 1001 call error('failed to write fortran binary file',-1) 1002 call error('failed to read fortran binary file',-1) c end subroutine pfname(name, fname) character*(*) name, fname c c construct a unique filename by appending the process c number after the stub name c i.e. = . c c find last non-blank character in name c do 10 i = len(name),1,-1 if (name(i:i).ne.' ') goto 20 10 continue call error('pfname: name is all blanks!',i) c c check that have room to store result and then write result c 20 if (i+4.gt.len(fname)) & call error('pfname: fname too short for name.id',len(fname)) fname = name write(fname(i+1:i+4),1) nodeid() 1 format('.',i3.3) c end subroutine error(s,i) parameter (LOG = 6) character*(*) s integer i c write(LOG,1) s,i 1 format(// $ ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'/ $ 1x,a,1x,i8/ $ ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'/) c $ 1x,a,1x,i8/ c call parerr(i) c end ga-5-3/tcgmsg/tcgmsg.fh0000640005473000001440000000023512115161655013666 0ustar d3n000users double precision tcgtime integer nodeid, nnodes, mitob, mdtob, nxtval external nodeid, nnodes, mitob, mdtob, nxtval external tcgtime ga-5-3/tcgmsg/tcgmsg-mpi/0000750005473000001440000000000012275260526014135 5ustar d3n000usersga-5-3/tcgmsg/tcgmsg-mpi/evon.c0000640005473000001440000000401112115161655015241 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * Crude FORTRAN interface to C event logging routines. * See evlog.c for more details. * * FORTRAN character variables are so unportable that guaranteeing * that U can parse a variable length argument list is next to impossible. * * This provides very basic event logging functionality. * * CALL EVON() * enable logging. * * CALL EVOFF() * disable logging. * * CALL EVBGIN("event description") * push event onto state stack * * CALL EVEND("event description") * pop event off state stack * * CALL EVENT("event description") * log occurence of event that doesn't change state stack */ #include "evlog.h" /* These to get portable FORTRAN interface ... these routines * will not be called from C which has the superior evlog interface */ #define evon_ F77_FUNC(evon,EVON) #define evoff_ F77_FUNC(evoff,EVOFF) #define evbgin_ F77_FUNC(evbgin,EVBGIN) #define evend_ F77_FUNC(evend,EVEND) #define event_ F77_FUNC(event,EVENT) void evon_() { #ifdef EVENTLOG evlog(EVKEY_ENABLE, EVKEY_LAST_ARG); #endif } void evoff_() { #ifdef EVENTLOG evlog(EVKEY_DISABLE, EVKEY_LAST_ARG); #endif } void evbgin_(char *string, long len) { #ifdef EVENTLOG char *value = malloc( (unsigned) (len+1) ); if (value) { (void) bcopy(string, value, len); value[len] = '\0'; evlog(EVKEY_BEGIN, value, EVKEY_LAST_ARG); (void) free(value); } #endif } void evend_(char *string, long len) { #ifdef EVENTLOG char *value = malloc( (unsigned) (len+1) ); if (value) { (void) bcopy(string, value, len); value[len] = '\0'; evlog(EVKEY_END, value, EVKEY_LAST_ARG); (void) free(value); } #endif } void event_(char *string, long len) { #ifdef EVENTLOG char *value = malloc( (unsigned) (len+1) ); if (value) { (void) bcopy(string, value, len); value[len] = '\0'; evlog(EVKEY_EVENT, value, EVKEY_LAST_ARG); (void) free(value); } #endif } ga-5-3/tcgmsg/tcgmsg-mpi/README0000640005473000001440000000034712115161655015016 0ustar d3n000usersThis is an implementation of the TCGMSG interface on top of MPI. Heteregenous platforms are currently not supported. The TCGSMG nxtval operation is implemented by using ARMCI. Questions/comments/problems: hpctools@pnl.gov ga-5-3/tcgmsg/tcgmsg-mpi/srftoc.h0000640005473000001440000000320212115161655015600 0ustar d3n000users/** @file This header file provides definitions for c for the names of the c message passing routines accessible from FORTRAN. It need not be included directly in user c code, assuming that sndrcv.h has already. It is needed as the FORTRAN naming convention varies between machines and it is the FORTRAN interface that is portable, not the c interface. However by coding with the macro defnition names c portability is ensured. */ #ifndef SRFTOC_H_ #define SRFTOC_H_ #define BRDCST_ armci_tcgmsg_brdcst #define DGOP_ armci_tcgmsg_dgop #define DRAND48_ armci_tcgmsg_drand48 #define IGOP_ armci_tcgmsg_igop #define LLOG_ armci_tcgmsg_llog #define MDTOB_ armci_tcgmsg_mdtob #define MDTOI_ armci_tcgmsg_mdtoi #define MITOB_ armci_tcgmsg_mitob #define MITOD_ armci_tcgmsg_mitod #define MTIME_ armci_tcgmsg_mtime #define NICEFTN_ armci_tcgmsg_niceftn #define NNODES_ armci_tcgmsg_nnodes #define NODEID_ armci_tcgmsg_nodeid #define NXTVAL_ armci_tcgmsg_nxtval #define PARERR_ armci_tcgmsg_parerr #define PBEGINF_ armci_tcgmsg_pbeginf #define PBGINF_ armci_tcgmsg_pbginf #define PEND_ armci_tcgmsg_pend #define PFCOPY_ armci_tcgmsg_pfcopy #define PFILECOPY_ armci_tcgmsg_pfilecopy #define PROBE_ armci_tcgmsg_probe #define RCV_ armci_tcgmsg_rcv #define SETDBG_ armci_tcgmsg_setdbg #define SND_ armci_tcgmsg_snd #define SRAND48_ armci_tcgmsg_srand48 #define STATS_ armci_tcgmsg_stats #define SYNCH_ armci_tcgmsg_synch #define TCGREADY_ armci_tcgmsg_tcgready #define TCGTIME_ armci_tcgmsg_tcgtime #define WAITCOM_ armci_tcgmsg_waitcom #endif /* SRFTOC_H_ */ ga-5-3/tcgmsg/tcgmsg-mpi/sizeof.c0000640005473000001440000000215312115161655015576 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * These routines use C's knowledge of the sizes of data types * to generate a portable mechanism for FORTRAN to translate * between bytes, integers and doubles. */ #include "sndrcv.h" /** * Return the no. of bytes that n doubles occupy */ long MDTOB_(long *n) { if (*n < 0) { Error("MDTOB_: negative argument",*n); } return (long) (*n * sizeof(double)); } /** * Return the minimum no. of integers which will hold n doubles. */ long MDTOI_(long *n) { if (*n < 0) { Error("MDTOI_: negative argument",*n); } return (long) ( (MDTOB_(n) + sizeof(long) - 1) / sizeof(long) ); } /** * Return the no. of bytes that n ints=longs occupy */ long MITOB_(long *n) { if (*n < 0) { Error("MITOB_: negative argument",*n); } return (long) (*n * sizeof(long)); } /** * Return the minimum no. of doubles in which we can store n longs */ long MITOD_(long *n) { if (*n < 0) { Error("MITOD_: negative argument",*n); } return (long) ( (MITOB_(n) + sizeof(double) - 1) / sizeof(double) ); } ga-5-3/tcgmsg/tcgmsg-mpi/evlog.h0000640005473000001440000000273512115161655015426 0ustar d3n000users/** @file * Define EVENT and KEY values used when calling evlog. */ #ifndef EVLOG_H_ #define EVLOG_H_ extern void evlog(int farg_key, ...); /* Values of keys in key value pairs */ #define EVKEY_LAST_ARG 0 /**< Terminates list ... takes no value */ #define EVKEY_BEGIN 1 /**< Push (char *) value onto state stack */ #define EVKEY_END 2 /**< Pop (char *) value off state stack */ #define EVKEY_EVENT 3 /**< Record (char *) value, no stack change */ #define EVKEY_MSG_LEN 4 /**< Value is (int) mesage length SND/RCV only */ #define EVKEY_MSG_TO 5 /**< Value is (int) to process id SND/RCV only */ #define EVKEY_MSG_FROM 6 /**< Value is (int) from process SND/RCV only */ #define EVKEY_MSG_TYPE 7 /**< Value is (int) message type SND/RCV only */ #define EVKEY_MSG_SYNC 8 /**< Value is (int) message sync SND/RCV only */ #define EVKEY_STR_INT 9 /**< User data value pair (char *), (int) */ #define EVKEY_STR_DBL 10 /**< User data value pair (char *), (double) */ #define EVKEY_STR 11 /**< User data value (char *) */ #define EVKEY_ENABLE 12 /**< Enable logging ... takes no value */ #define EVKEY_DISABLE 13 /**< Disable logging ... takes no value */ #define EVKEY_DUMP 14 /**< Dump out the current buffer to disk */ #define EVKEY_FILENAME 15 /**< Set the name of the events file */ #define EVENT_SND "Snd" /**< Predefined strings for internal events */ #define EVENT_RCV "Rcv" #define EVENT_PROCESS "Process" #endif /* EVLOG_H_ */ ga-5-3/tcgmsg/tcgmsg-mpi/collect.c0000640005473000001440000001023112122377670015724 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include "tcgmsgP.h" /* size of internal buffer for global ops */ #define DGOP_BUF_SIZE 65536 #define IGOP_BUF_SIZE 65536 /*#define IGOP_BUF_SIZE (sizeof(double)/sizeof(long))*DGOP_BUF_SIZE */ static double dgop_work[DGOP_BUF_SIZE]; /**< global ops buffer */ static long igop_work[IGOP_BUF_SIZE]; /**< global ops buffer */ /** * global operations -- integer version */ void IGOP_(long *ptype, long *x, long *pn, char *op, int oplen) { long *work = (long *) igop_work; long nleft = *pn; long buflen = TCG_MIN(nleft,IGOP_BUF_SIZE); /**< Try to get even sized buffers */ long nbuf = (nleft-1) / buflen + 1; long n; /* #ifdef ARMCI */ if(!_tcg_initialized){ PBEGINF_(); } /* #endif */ buflen = (nleft-1) / nbuf + 1; if (strncmp(op,"abs",3) == 0) { n = *pn; while(n--) { x[n] = TCG_ABS(x[n]); } } while (nleft) { int root = 0; int ierr = MPI_SUCCESS; int ndo = TCG_MIN(nleft, buflen); if (strncmp(op,"+",1) == 0) { ierr = MPI_Reduce(x, work, ndo, TCG_INT, MPI_SUM, root, TCGMSG_Comm); } else if (strncmp(op,"*",1) == 0) { ierr = MPI_Reduce(x, work, ndo, TCG_INT, MPI_PROD, root, TCGMSG_Comm); } else if (strncmp(op,"max",3) == 0 || strncmp(op,"absmax",6) == 0) { ierr = MPI_Reduce(x, work, ndo, TCG_INT, MPI_MAX, root, TCGMSG_Comm); } else if (strncmp(op,"min",3) == 0 || strncmp(op,"absmin",6) == 0) { ierr = MPI_Reduce(x, work, ndo, TCG_INT, MPI_MIN, root, TCGMSG_Comm); } else if (strncmp(op,"or",2) == 0) { ierr = MPI_Reduce(x, work, ndo, TCG_INT, MPI_BOR, root, TCGMSG_Comm); } else { Error("IGOP: unknown operation requested", (long) *pn); } tcgmsg_test_statusM("IGOP: MPI_Reduce:", ierr ); ierr = MPI_Bcast(work, ndo, TCG_INT, root, TCGMSG_Comm); tcgmsg_test_statusM("IGOP: MPI_Bcast:", ierr); n = ndo; while(n--) { x[n] = work[n]; } nleft -= ndo; x+= ndo; } } /** * global operations -- double version */ void DGOP_(long *ptype, double *x, long *pn, char *op, int oplen) { double *work= dgop_work; long nleft = *pn; long buflen = TCG_MIN(nleft,DGOP_BUF_SIZE); /**< Try to get even sized buffers */ long nbuf = (nleft-1) / buflen + 1; long n; buflen = (nleft-1) / nbuf + 1; if (strncmp(op,"abs",3) == 0) { n = *pn; while(n--) { x[n] = TCG_ABS(x[n]); } } while (nleft) { int root = 0; int ierr = MPI_SUCCESS; int ndo = TCG_MIN(nleft, buflen); if (strncmp(op,"+",1) == 0) { ierr = MPI_Reduce(x, work, ndo, TCG_DBL, MPI_SUM, root, TCGMSG_Comm); } else if (strncmp(op,"*",1) == 0) { ierr = MPI_Reduce(x, work, ndo, TCG_DBL, MPI_PROD, root, TCGMSG_Comm); } else if (strncmp(op,"max",3) == 0 || strncmp(op,"absmax",6) == 0) { ierr = MPI_Reduce(x, work, ndo, TCG_DBL, MPI_MAX, root, TCGMSG_Comm); } else if (strncmp(op,"min",3) == 0 || strncmp(op,"absmin",6) == 0) { ierr = MPI_Reduce(x, work, ndo, TCG_DBL, MPI_MIN, root, TCGMSG_Comm); } else { Error("DGOP: unknown operation requested", (long) *pn); } tcgmsg_test_statusM("DGOP: MPI_Reduce:", ierr ); ierr = MPI_Bcast(work, ndo, TCG_DBL, root, TCGMSG_Comm); tcgmsg_test_statusM("DGOP: MPI_Bcast:", ierr ); n = ndo; while(n--) { x[n] = work[n]; } nleft -= ndo; x+= ndo; } } /** * Synchronize processes */ void SYNCH_(long *type) { /* #ifdef ARMCI */ if(!_tcg_initialized){ PBEGINF_(); } /* #endif */ MPI_Barrier(TCGMSG_Comm); } /** * broadcast buffer to all other processes from process originator */ void BRDCST_(long *type, void *buf, long *lenbuf, long *originator) { /* hope that MPI int is large enough to store value in lenbuf */ int count = (int)*lenbuf, root = (int)*originator; MPI_Bcast(buf, count, MPI_CHAR, root, TCGMSG_Comm); } ga-5-3/tcgmsg/tcgmsg-mpi/llog.c0000640005473000001440000000163612115161655015241 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_SYS_TYPES_H # include #endif #if HAVE_TIME_H # include #endif #if HAVE_SYS_TIME_H # include #endif #include "sndrcv.h" extern void Error(); /** * close and open stdin and stdout to append to a local logfile * with the name log. in the current directory */ void LLOG_() { char name[12]; time_t t; (void) sprintf(name, "log.%03ld",NODEID_()); (void) fflush(stdout); (void) fflush(stderr); if (freopen(name, "a", stdout) == (FILE *) NULL) { Error("LLOG_: error re-opening stdout", (long) -1); } if (freopen(name, "a", stderr) == (FILE *) NULL) { Error("LLOG_: error re-opening stderr", (long) -1); } (void) time(&t); (void) printf("\n\nLog file opened : %s\n\n",ctime(&t)); (void) fflush(stdout); } ga-5-3/tcgmsg/tcgmsg-mpi/pfilecopy.c0000640005473000001440000001032412115161655016270 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_MEMORY_H # include #endif #if HAVE_STDLIB_H # include #endif extern void free(void *ptr); #include "msgtypesc.h" #include "sndrcv.h" #include "tcgmsgP.h" /** * Process node0 has a file (assumed unopened) named fname. * This file will be copied to all other processes which must * simultaneously invoke pfilecopy. Since the processes may be * using the same directory one probably ought to make sure * that each process uses a different name in the call. * * e.g. * * on node 0 pfilecopy(99, 0, 'argosin') * on node 1 pfilecopy(99, 0, 'argosin_001') * on node 2 pfilecopy(99, 0, 'argosin_002') */ void tcgi_pfilecopy(long *type, long *node0, char *filename) { char *buffer; FILE *file; long length, nread=32768, len_nread=sizeof(long); long typenr = (*type & 32767) | MSGINT; /* Force user type integer */ long typebuf =(*type & 32767) | MSGCHR; if (!(buffer = malloc((unsigned) nread))) { Error("pfilecopy: failed to allocate the I/O buffer",nread); } if (*node0 == NODEID_()) { /* I have the original file ... open and check its size */ if ((file = fopen(filename,"r")) == (FILE *) NULL) { (void) fprintf(stderr, "me=" FMT_INT ", filename = %s.\n", NODEID_(), filename); Error("pfilecopy: node0 failed to open original file", *node0); } /* Quick sanity check on the length */ (void) fseek(file, 0L, (int) 2); /* Seek to end of file */ length = ftell(file); /* Find the length of file */ (void) fseek(file, 0L, (int) 0); /* Seek to beginning of file */ if ( (length<0) || (length>1e12) ) { Error("pfilecopy: the file length is -ve or very big", length); } /* Send the file in chunks of nread bytes */ while (nread) { nread = fread(buffer, 1, (int) nread, file); BRDCST_(&typenr, (char *) &nread, &len_nread, node0); typenr++; if (nread) { BRDCST_(&typebuf, buffer, &nread, node0); typebuf++; } } } else { /* Open the file for the duplicate */ if ((file = fopen(filename,"w+")) == (FILE *) NULL) { (void) fprintf(stderr,"me=" FMT_INT ", filename = %s.\n", NODEID_(), filename); Error("pfilecopy: failed to open duplicate file", *node0); } /* Receive data and write to file */ while (nread) { BRDCST_(&typenr, (char *) &nread, &len_nread, node0); typenr++; if (nread) { BRDCST_(&typebuf, buffer, &nread, node0); typebuf++; if (nread != (long)fwrite(buffer, 1, (int) nread, file)) { Error("pfilecopy: error data to duplicate file", nread); } } } } /* Tidy up the stuff we have been using */ (void) fflush(file); (void) fclose(file); (void) free(buffer); } /** The original C interface to PFCOPY_. */ void PFILECOPY_(long *type, long *node0, char *filename) { tcgi_pfilecopy(type, node0, filename); } /** Fortran wrapper around pfilecopy */ void PFCOPY_(long *type, long *node0, char *fname, int len) { char *filename; #ifdef DEBUG (void) printf("me=%d, type=%d, node0=%d, fname=%x, fname=%.8s, len=%d\n", NODEID_(), *type, *node0, fname, fname, len); #endif /* Strip trailing blanks off the file name */ while ((len > 0) && (fname[len-1] == ' ')) { len--; } if (len <= 0) { Error("pfcopy_: file name length is toast", (long) len); } /* Generate a NULL terminated string */ filename = malloc( (unsigned) (len+1) ); if (filename) { (void) bcopy(fname, filename, len); filename[len] = '\0'; } else { Error("PFCOPY_: failed to malloc space for filename", (long) len); } /* Now call the C routine to do the work */ tcgi_pfilecopy(type, node0, filename); (void) free(filename); } ga-5-3/tcgmsg/tcgmsg-mpi/nxtval.c0000640005473000001440000001131212115161655015610 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include "tcgmsgP.h" #define LEN 2 long nxtval_counter=0; #define INCR 1 /**< increment for NXTVAL */ #define BUSY -1L /**< indicates somebody else updating counter*/ void NextValueServer() { long cnt = 0; /**< actual counter */ long ndone = 0; /**< no. finished for this loop */ int type = TYPE_NXTVAL; /**< message type */ long buf[LEN]; /**< buffer to get values */ long mproc; /**< no. of processes running loop */ long nval; /**< no. of values requested */ int done_list[MAX_PROCESS];/**< list of processes finished with this loop */ int lenmes, nodefrom; int node; long ntermin=0; MPI_Status status; while (1) { /* Wait for input from any node */ MPI_Recv(buf, LEN, MPI_LONG, MPI_ANY_SOURCE, type, MPI_COMM_WORLD, &status); MPI_Get_count(&status, MPI_LONG, &lenmes); nodefrom = status.MPI_SOURCE; if (lenmes != LEN) { Error("NextValueServer: lenmes != LEN", (long) lenmes); return; /* Never actually gets here as does long jump */ } mproc = buf[0]; nval = buf[1]; if (DEBUG_) { (void) printf("NVS: from=%ld, mproc=%ld, ndone=%ld\n", nodefrom, mproc, ndone); } if (mproc == 0) { /* Sending process is about to terminate. Send reply and disable * sending to him. If all processes have finished return. * * All processes block on waiting for message * from nxtval server before terminating. nxtval only lets * everyone go when all have registered termination. */ if (++ntermin == NNODES_()) { for (node=0; node 0) { /* This is what we are here for */ MPI_Send(&cnt, 1, MPI_LONG, nodefrom, type, MPI_COMM_WORLD); cnt += nval; } else if (mproc < 0) { /* This process has finished the loop. Wait until all mproc processes have finished before releasing it */ done_list[ndone++] = nodefrom; if (ndone == -mproc) { while (ndone--) { nodefrom = done_list[ndone]; MPI_Send(&cnt, 1, MPI_LONG, nodefrom, type, MPI_COMM_WORLD); } cnt = 0; ndone = 0; } } } } /** * Get next value of shared counter. * mproc > 0 ... returns requested value * mproc < 0 ... server blocks until abs(mproc) processes are queued * and returns junk * mproc = 0 ... indicates to server that I am about to terminate */ long NXTVAL_(long *mproc) { long buf[2]; MPI_Status status; int type = TYPE_NXTVAL; long local; #ifdef NXTVAL_SERVER int server = (int)NNODES_(); /**< id of server process */ #else int server = (int)NNODES_() -1; /**< id of server process */ #endif if (SR_parallel) { buf[0] = *mproc; buf[1] = INCR; if (DEBUG_) { (void) printf("%2ld: nxtval: mproc=%ld\n",NODEID_(), *mproc); (void) fflush(stdout); } #ifdef NXTVAL_SERVER MPI_Send(buf, LEN, MPI_LONG, server, type, MPI_COMM_WORLD); MPI_Recv(buf, 1, MPI_LONG, server, type, MPI_COMM_WORLD, &status); return buf[0]; #endif } else { /* Not running in parallel ... just do a simulation */ static int count = 0; if (*mproc == 1) { local = count++; } else if (*mproc == -1) { count = 0; local = 0; } else { Error("nxtval: sequential version with silly mproc ", (long) *mproc); } } return local; } /** * initialization for nxtval -- called in PBEGIN */ void install_nxtval(int *argc, char **argv[]) { int numprocs, myid; MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_Comm_rank(MPI_COMM_WORLD, &myid); #ifdef NXTVAL_SERVER /* in this mode one process is hidden from the application */ if(SR_parallel && myid == numprocs -1) { # ifndef QUIET printf("TCGMSG-MPI info: excluding one process for nxtval server\n"); fflush(stdout); # endif /* QUIET */ NextValueServer(); } #else # error Do not know how to implement nxtval ! #endif } void finalize_nxtval() { } ga-5-3/tcgmsg/tcgmsg-mpi/niceftn.c0000640005473000001440000000046412115161655015730 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_UNISTD_H # include #endif #include "srftoc.h" /** * Wrapper around nice for FORTRAN users courtesy of Rick Kendall * ... C has the system interface. */ long NICEFTN_(long *ival) { int val = (int)(*ival); return nice(val); } ga-5-3/tcgmsg/tcgmsg-mpi/p2p.c0000640005473000001440000000733112115161655015003 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include "tcgmsgP.h" /************************ nonblocking message list ********************/ #define MAX_Q_LEN 1024 /* Maximum no. of outstanding messages */ static struct msg_q_struct{ MPI_Request request; long node; long type; long lenbuf; long snd; long from; } msg_q[MAX_Q_LEN]; static int n_in_msg_q=0; /**********************************************************************/ void SND_(long *type, void *buf, long *lenbuf, long *node, long *sync) { int ierr; int ttype = (int)*type; if (DEBUG_) { printf("SND_: node " FMT_INT " sending to " FMT_INT ", len=" FMT_INT ", type=" FMT_INT ", sync=" FMT_INT "\n", NODEID_(), *node, *lenbuf, *type, *sync); fflush(stdout); } if (*sync){ ierr = MPI_Send(buf, (int)*lenbuf, MPI_CHAR, (int)*node, ttype, TCGMSG_Comm); tcgmsg_test_statusM("SND_:", ierr); }else{ if (n_in_msg_q >= MAX_Q_LEN) { Error("SND:overflowing async Q limit", n_in_msg_q); } ierr = MPI_Isend(buf, (int)*lenbuf, MPI_CHAR,(int)*node, ttype, TCGMSG_Comm, &msg_q[n_in_msg_q].request); tcgmsg_test_statusM("nonblocking SND_:", ierr); msg_q[n_in_msg_q].node = *node; msg_q[n_in_msg_q].type = *type; msg_q[n_in_msg_q].lenbuf = *lenbuf; msg_q[n_in_msg_q].snd = 1; } } void RCV_(long *type, void *buf, long *lenbuf, long *lenmes, long *nodeselect, long *nodefrom, long *sync) { int ierr; int node, count = (int)*lenbuf; MPI_Status status; MPI_Request request; if (*nodeselect == -1) { node = MPI_ANY_SOURCE; } else { node = (int)*nodeselect; } if (DEBUG_) { printf("RCV_: node " FMT_INT " receiving from " FMT_INT ", len=" FMT_INT ", type=" FMT_INT ", sync=" FMT_INT "\n", NODEID_(), *nodeselect, *lenbuf, *type, *sync); fflush(stdout); } if(*sync==0){ if (n_in_msg_q >= MAX_Q_LEN) { Error("nonblocking RCV_: overflowing async Q limit", n_in_msg_q); } ierr = MPI_Irecv(buf, count, MPI_CHAR, node, (int)*type, TCGMSG_Comm, &request); tcgmsg_test_statusM("nonblocking RCV_:", ierr); *nodefrom = node; /* Get source node */ *lenmes = -1L; msg_q[n_in_msg_q].request = request; msg_q[n_in_msg_q].node = *nodeselect; msg_q[n_in_msg_q].type = *type; msg_q[n_in_msg_q].lenbuf = *lenbuf; msg_q[n_in_msg_q].snd = 0; n_in_msg_q++; } else { ierr = MPI_Recv(buf, count, MPI_CHAR, node, (int)*type, TCGMSG_Comm, &status); tcgmsg_test_statusM("RCV_:", ierr); ierr = MPI_Get_count(&status, MPI_CHAR, &count); tcgmsg_test_statusM("RCV:Get_count:", ierr); *nodefrom = (long)status.MPI_SOURCE; *lenmes = (long)count; } } void WAITCOM_(long *nodesel) { int ierr, i; MPI_Status status; for (i=0; i extern void exit(int status); #include "tcgmsgP.h" #include "srftoc.h" #include "armci.h" char tcgmsg_err_string[ERR_STR_LEN]; MPI_Comm TCGMSG_Comm=MPI_COMM_WORLD; int _tcg_initialized=0; long DEBUG_; int SR_parallel; int SR_single_cluster =1; int tcgi_argc=0; char **tcgi_argv=NULL; static int SR_initialized=0; extern int nxtval_installed; extern MPI_Comm armci_group_comm(ARMCI_Group *group); long TCGREADY_() { return (long)SR_initialized; } /** * number of processes */ long NNODES_() { int numprocs; MPI_Comm_size(TCGMSG_Comm, &numprocs); #ifdef NXTVAL_SERVER if(SR_parallel) { return((long)numprocs-1); } #endif return((long)numprocs); } /** * Get calling process id */ long NODEID_() { int myid; MPI_Comm_rank(TCGMSG_Comm,&myid); return((long)myid); } void Error(char *string, long code) { fprintf(stdout, FMT_INT ": %s " FMT_INT " (%#lx).\n", NODEID_(), string, code, (long unsigned int)code); fflush(stdout); fprintf(stderr, FMT_INT ": %s " FMT_INT " (%#lx).\n", NODEID_(), string, code, (long unsigned int)code); finalize_nxtval(); /* clean nxtval resources */ MPI_Abort(TCGMSG_Comm,(int)code); } /** * this is based on the MPI Forum decision that MPI_COMM_WORLD is a C constant */ void make_tcgmsg_comm() { extern int single_cluster(); #ifdef NXTVAL_SERVER if( SR_parallel ){ /* data server for a single process */ int server; MPI_Group MPI_GROUP_WORLD, tcgmsg_grp; MPI_Comm_size(MPI_COMM_WORLD, &server); server --; /* the highest numbered process will be excluded */ MPI_Comm_group(MPI_COMM_WORLD, &MPI_GROUP_WORLD); MPI_Group_excl(MPI_GROUP_WORLD, 1, &server, &tcgmsg_grp); MPI_Comm_create(MPI_COMM_WORLD, tcgmsg_grp, &TCGMSG_Comm); }else #endif { #if HAVE_ARMCI_INITIALIZED if (ARMCI_Initialized()) #else if (nxtval_installed) #endif { ARMCI_Group group; ARMCI_Group_get_world(&group); # if HAVE_ARMCI_GROUP_COMM_MEMBER TCGMSG_Comm = group.comm; # else TCGMSG_Comm = armci_group_comm(&group); # endif } else { TCGMSG_Comm = MPI_COMM_WORLD; } } } /** * Alternative initialization for C programs * used to address argv/argc manipulation in MPI */ void tcgi_alt_pbegin(int *argc, char **argv[]) { int numprocs, myid; int init=0; if(SR_initialized) { Error("TCGMSG initialized already???",-1); } else { SR_initialized=1; _tcg_initialized=1; } /* check if another library initialized MPI already */ MPI_Initialized(&init); if(!init){ /* nope */ #if defined(DCMF) || defined(MPI_MT) int provided; MPI_Init_thread(argc, argv, MPI_THREAD_MULTIPLE, &provided); #else MPI_Init(argc, argv); #endif MPI_Errhandler_set(TCGMSG_Comm, MPI_ERRORS_RETURN); } MPI_Comm_size(TCGMSG_Comm, &numprocs); MPI_Comm_rank(TCGMSG_Comm, &myid); SR_parallel = numprocs > 1 ? 1 : 0; #if NEED_DELAY_TCGMSG_MPI_STARTUP /* printf("%d:ready to go\n",NODEID_()); */ /* wait until the last possible moment to call install_nxtval * it could be called by ARMCI_Init * or is called the first time nxtval is invoked (yuck) */ /*install_nxtval(argc, argv);*/ #else install_nxtval(argc, argv); /* which calls ARMCI_Init(), if needed */ #endif make_tcgmsg_comm(); MPI_Barrier(TCGMSG_Comm); } /** * Initialization for C programs */ void tcgi_pbegin(int argc, char* argv[]) { tcgi_argc = argc; tcgi_argv = argv; tcgi_alt_pbegin(&argc, &argv); } /** * shut down message-passing library */ void PEND_() { #ifdef NXTVAL_SERVER long zero=0; if( SR_parallel ) { (void) NXTVAL_(&zero); } MPI_Barrier(TCGMSG_Comm); #endif finalize_nxtval(); MPI_Finalize(); exit(0); } double TCGTIME_() { static int first_call = 1; static double first_time, last_time, cur_time; double diff; if (first_call) { first_time = MPI_Wtime(); first_call = 0; last_time = -1e-9; } cur_time = MPI_Wtime(); diff = cur_time - first_time; /* address crappy MPI_Wtime: consectutive calls must be at least 1ns apart */ if(diff - last_time < 1e-9) { diff +=1e-9; } last_time = diff; return diff; /* Add logic here for clock wrap */ } long MTIME_() { return (long) (TCGTIME_()*100.0); /* time in centiseconds */ } /** * longerface from Fortran to C error routine */ void PARERR_(long *code) { Error("User detected error in FORTRAN", *code); } void SETDBG_(long *onoff) { DEBUG_ = *onoff; } void STATS_() { printf("STATS not implemented\n"); } ga-5-3/tcgmsg/tcgmsg-mpi/pbeginf.c0000640005473000001440000000122612115161655015711 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #include "farg.h" #include "sndrcv.h" #include "srftoc.h" #define LEN 255 extern int tcgi_argc; extern char **tcgi_argv; /** * Hewlett Packard Risc box, SparcWorks F77 2.* and Paragon compilers. * Have to construct the argument list by calling FORTRAN. */ void PBEGINF_() { ga_f2c_get_cmd_args(&tcgi_argc, &tcgi_argv); tcgi_pbegin(tcgi_argc, tcgi_argv); } /** * Alternative entry for those senstive to FORTRAN making reference * to 7 character external names */ void PBGINF_() { PBEGINF_(); } ga-5-3/tcgmsg/tcgmsg-mpi/drand48.c0000640005473000001440000000041312115161655015540 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #include #include "sndrcv.h" double DRAND48_() { double val=((double) random() ) * 4.6566128752458e-10; return val; } void SRAND48_(long *seed) { (void) srandom(*seed); } ga-5-3/tcgmsg/tcgmsg-mpi/sndrcv.h0000640005473000001440000000360612115161655015607 0ustar d3n000users/** @file * This header file declares stubs and show prototypes of the * public sndrcv calls * * srftoc.h contains macros which define the names of c routines * accessible from FORTRAN and vice versa */ #ifndef SNDRCV_H_ #define SNDRCV_H_ #include "msgtypesc.h" #include "srftoc.h" #ifdef __cplusplus extern "C" { #endif extern void BRDCST_(long *type, void *buf, long *lenbuf, long *originator); extern void DGOP_(long *type, double *x, long *n, char *op, int oplen); extern double DRAND48_(); extern void IGOP_(long *type, long *x, long *n, char *op, int oplen); extern void LLOG_(); extern long MDTOB_(long *n); extern long MDTOI_(long *n); extern long MITOB_(long *n); extern long MITOD_(long *n); extern long MTIME_(); extern long NICEFTN_(long *ival); extern long NNODES_(); extern long NODEID_(); extern long NXTVAL_(long *mproc); extern void PARERR_(long *code); extern void PBEGINF_(); extern void PBGINF_(); extern void PEND_(); extern void PFCOPY_(long *type, long *node0, char *filename, int flen); extern void PFILECOPY_(long *type, long *node0, char *filename); extern long PROBE_(long *type, long *node); extern void RCV_(long *type, void *buf, long *lenbuf, long *lenmes, long *nodeselect, long *nodefrom, long *sync); extern void SETDBG_(long *value); extern void SND_(long *type, void *buf, long *lenbuf, long *node, long *sync); extern void SRAND48_(long *seed); extern void STATS_(); extern void SYNCH_(long *type); extern long TCGREADY_(); extern double TCGTIME_(); extern void WAITCOM_(long *node); /* Miscellaneous routines for internal use only? */ extern void Error(char *string, long integer); extern void MtimeReset(); extern void PrintProcInfo(); extern void RemoteConnect(long a, long b, long c); extern void tcgi_pbegin(int argc, char **argv); extern void USleep(long us); #ifdef __cplusplus } #endif #endif /* SNDRCV_H_ */ ga-5-3/tcgmsg/tcgmsg-mpi/clustercheck.c0000640005473000001440000000257612115161655016767 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #if HAVE_STDLIB_H # include #endif #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_WINSOCK_H # include #endif #if HAVE_UNISTD_H # include #endif #define HOSTNAME_LEN 128 static char myname[HOSTNAME_LEN], rootname[HOSTNAME_LEN]; /** * return 1 if all processes are running on the same machine, 0 otherwise */ int single_cluster() { int rc,me,root=0,stat,global_stat,len; gethostname(myname, HOSTNAME_LEN-1); rc = MPI_Comm_rank(MPI_COMM_WORLD, &me); if(me==root) { rc = MPI_Bcast(myname,HOSTNAME_LEN,MPI_CHAR,root,MPI_COMM_WORLD); } else { rc = MPI_Bcast(rootname, HOSTNAME_LEN,MPI_CHAR,root,MPI_COMM_WORLD); } if(rc != MPI_SUCCESS){ fprintf(stderr,"single_cluster:MPI_Bcast failed rc=%d\n",rc); MPI_Abort(MPI_COMM_WORLD,rc); } len = strlen(myname); stat = (me==root) ? 0 : strncmp(rootname, myname, len); if(stat != 0) { stat = 1; } rc = MPI_Allreduce(&stat, &global_stat, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); if(rc != MPI_SUCCESS){ fprintf(stderr,"single_cluster:MPI_MPI_Allreduce failed rc=%d\n",rc); MPI_Abort(MPI_COMM_WORLD,rc); } if(global_stat) { return 0; } else { return 1; } } ga-5-3/tcgmsg/tcgmsg-mpi/checkbyte.c0000640005473000001440000000067212115161655016244 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif unsigned char CheckByte(unsigned char *c, long n) { /* unsigned char sum = (char) 0; while (n-- > 0) { sum = sum ^ *c++; } return sum; */ unsigned int sum = 0; unsigned int mask = 0xff; while (n-- > 0) { sum += (int) *c++; } sum = (sum + (sum>>8) + (sum>>16) + (sum>>24)) & mask; return (unsigned char) sum; } ga-5-3/tcgmsg/tcgmsg-mpi/msgtypesc.h0000640005473000001440000000043612115161655016324 0ustar d3n000users/** @file * This defines bit masks that can be OR'ed with user types (1-32767) * to indicate the nature of the data to the message passing system */ #ifndef MSGTYPES_H_ #define MSGTYPES_H_ #define MSGDBL 65536 #define MSGINT 131072 #define MSGCHR 262144 #endif /* MSGTYPES_H_ */ ga-5-3/tcgmsg/tcgmsg-mpi/tcgmsgP.h0000640005473000001440000000353112115161655015711 0ustar d3n000users#ifndef TCGMSGP_H_ #define TCGMSGP_H_ #include #if HAVE_STDIO_H # include #endif #if HAVE_STRING_H # include #endif #include "sndrcv.h" #if SIZEOF_F77_INTEGER == SIZEOF_SHORT # define TCG_INT MPI_SHORT # define FMT_INT "%hd" #elif SIZEOF_F77_INTEGER == SIZEOF_INT # define TCG_INT MPI_INT # define FMT_INT "%d" #elif SIZEOF_F77_INTEGER == SIZEOF_LONG # define TCG_INT MPI_LONG # define FMT_INT "%ld" #elif SIZEOF_F77_INTEGER == SIZEOF_LONG_LONG # define TCG_INT MPI_LONG_LONG_INT # define FMT_INT "%lld" #else # error Cannot determine TCG_INT #endif #if SIZEOF_F77_DOUBLE_PRECISION == SIZEOF_FLOAT # define TCG_DBL MPI_FLOAT # define FMT_DBL "%f" #elif SIZEOF_F77_DOUBLE_PRECISION == SIZEOF_DOUBLE # define TCG_DBL MPI_DOUBLE # define FMT_DBL "%f" #elif SIZEOF_F77_DOUBLE_PRECISION == SIZEOF_LONG_DOUBLE # define TCG_DBL MPI_LONG_DOUBLE # define FMT_DBL "%Lf" #else # error Cannot determine TCG_DBL #endif #define MAX_PROCESS 100000 #define TYPE_NXTVAL 33333 extern MPI_Comm TCGMSG_Comm; extern int SR_parallel; extern int SR_single_cluster; extern long DEBUG_; extern int _tcg_initialized; #define TCG_MAX(a,b) (((a) >= (b)) ? (a) : (b)) #define TCG_MIN(a,b) (((a) <= (b)) ? (a) : (b)) #define TCG_ABS(a) (((a) >= 0) ? (a) : (-(a))) #define TCG_ERR_LEN 80 #define ERR_STR_LEN TCG_ERR_LEN + MPI_MAX_ERROR_STRING extern char tcgmsg_err_string[ERR_STR_LEN]; #define tcgmsg_test_statusM(_str, _status)\ {\ if( _status != MPI_SUCCESS){\ int _tot_len, _len = TCG_MIN(ERR_STR_LEN, strlen(_str));\ strncpy(tcgmsg_err_string, _str, _len);\ MPI_Error_string( _status, tcgmsg_err_string + _len, &_tot_len);\ Error(tcgmsg_err_string, (int)_status);\ }\ } extern void finalize_nxtval(); extern void install_nxtval(int *argc, char **argv[]); #endif /* TCGMSGP_H_ */ ga-5-3/tcgmsg/tcgmsg-mpi/nxtval-armci.c0000640005473000001440000000723512122377670016716 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif #include #if HAVE_MALLOC_H # include #endif #include "armci.h" #include "message.h" #include "tcgmsgP.h" #define LEN 2 static long pnxtval_counter_val; static long *pnxtval_counter=&pnxtval_counter_val; int nxtval_installed=0; extern int *tcgi_argc; extern char ***tcgi_argv; #define INCR 1 /**< increment for NXTVAL */ #define BUSY -1L /**< indicates somebody else updating counter*/ #define NXTV_SERVER ((int)NNODES_() -1) static int ARMCIinitialized = 0; extern void make_tcgmsg_comm(void); /** * Get next value of shared counter. * mproc > 0 ... returns requested value * mproc < 0 ... server blocks until abs(mproc) processes are queued * and returns junk * mproc = 0 ... indicates to server that I am about to terminate */ long NXTVAL_(long *mproc) { long local; int rc; int server = NXTV_SERVER; /* id of server process */ install_nxtval(tcgi_argc, tcgi_argv); if (SR_parallel) { if (DEBUG_) { (void) printf(FMT_INT ": nxtval: mproc=" FMT_INT "\n", NODEID_(), *mproc); (void) fflush(stdout); } if (*mproc < 0) { rc=MPI_Barrier(TCGMSG_Comm); if(rc!=MPI_SUCCESS) { Error("nxtval: barrier failed",0); } /* reset the counter value to zero */ if( NODEID_() == server) { *pnxtval_counter = 0; } rc=MPI_Barrier(TCGMSG_Comm); if(rc!=MPI_SUCCESS) { Error("nxtval: barrier failed",0); } } if (*mproc > 0) { #if SIZEOF_F77_INTEGER == SIZEOF_INT int op = ARMCI_FETCH_AND_ADD; #elif SIZEOF_F77_INTEGER == SIZEOF_LONG int op = ARMCI_FETCH_AND_ADD_LONG; #else # error #endif rc = ARMCI_Rmw(op,(void*)&local,(void*)pnxtval_counter,1,server); } } else { /* Not running in parallel ... just do a simulation */ static int count = 0; if (*mproc == 1) { local = count++; } else if (*mproc == -1) { count = 0; local = 0; } else { Error("nxtval: sequential version with silly mproc ", (long) *mproc); } } return local; } /** * initialization for nxtval */ void install_nxtval(int *argc, char **argv[]) { int rc; int me = (int)NODEID_(), bytes, server; void **ptr_ar; if (nxtval_installed) { return; } nxtval_installed = 1; #if HAVE_ARMCI_INITIALIZED_FUNCTION if (!ARMCI_Initialized()) #else if (!ARMCIinitialized) #endif { ARMCI_Init_args(argc, argv); ARMCIinitialized = 1; make_tcgmsg_comm(); } ptr_ar = (void **)malloc(sizeof(void *)*(int)NNODES_()); if(!ptr_ar) { Error("malloc failed in install_nxtval", (long)NNODES_()); } server = NXTV_SERVER; if(me== server) { bytes = sizeof(long); } else { bytes =0; } rc = ARMCI_Malloc(ptr_ar,bytes); if(rc) { Error("nxtv: armci_malloc failed",rc); } pnxtval_counter = (long*) ptr_ar[server]; if(me==server) { *pnxtval_counter = (long)0; } free(ptr_ar); rc=MPI_Barrier(TCGMSG_Comm); if(rc!=MPI_SUCCESS) { Error("init_nxtval: barrier failed",0); } } void finalize_nxtval() { /* * Cannot call ARMCI functions here as ARMCI might have been terminated * by now. NOTE: finalize_nxtval is called in pend(), which is called after * GA_Terminate/ARMCI_Finalize. */ #if 0 if(NODEID_() == NXTV_SERVER)ARMCI_Free(pnxtval_counter); #endif ARMCI_Finalize(); } ga-5-3/tcgmsg/tcgmsg-mpi/msgtypesf.h0000640005473000001440000000035712115161655016331 0ustar d3n000usersC C This defines bit masks that can be ORed with user types (1-32767) C to indicate the nature of the data to the message passing system C integer msgdbl, msgint, msgchr parameter (msgdbl=65536, msgint=131072, msgchr=262144) ga-5-3/tcgmsg/tcgmsg-mpi/evlog.c0000640005473000001440000002660712115161655015425 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** * Event logging routine with key driven varargs interface */ #include #include #include #include #include #include "evlog.h" #include "sndrcv.h" #define BUFLEN 262144 /**< Size allocated for buffer ... biggish */ #define MAX_EV_LEN 1000 /**< Assumed maximum size of single event record */ #define ERROR_RETURN() \ do { \ error = 1; \ return; \ } while (0) #define DUMPBUF() \ do { \ (void) fputs(buffer, file); \ (void) fflush(file); \ if (ferror(file)) { \ ERROR_RETURN(); \ } \ bufpt = buffer; \ left = BUFLEN; \ } while (0) #define RECORD(A) \ do { \ A; \ nchars = strlen(bufpt); \ bufpt += nchars; \ left -= nchars; \ } while (0) static double walltime(); /** * The format of the argument list is as follows: * * evlog([(int) key, [values, ...]], ..., EVKEY_LAST_ARG) * * Arguments are read as keys with corresponding values. Recognised keys * are defined in evlog.h and are described in detail below. * * Logging is enabled/disabled by calling evlog with one of EVKEY_ENABLE * or EVKEY_DISABLE specified. Note that EVKEY_ENABLE must be the * first key specified for it to be recognized and that all keys * in the argument list after EVKEY_DISABLE are ignored. By default * events are logged in the file events. This can be overridden with * the key EVKEY_FILENAME, which takes the filename as its value. * * The model for logging events assumed by the post-analysis routines * assumes that upon logging an event: * * a) no state chage occurs (EVKEY_EVENT). The event is just recorded. * * b) the process changes state by pushing the event onto the state stack * (EVKEY_BEGIN). * * c) the process changes state by popping an event off the state stack * (EVKEY_END). If the event or state popped off the stack does not * match the specified event then the post-analysis may get confused * but this does not interfere with the actual logging. * * EVKEY_EVENT, EVKEY_BEGIN or EVKEY_END must be the first key specified other * than a possible EVKEY_ENABLE. * * Internally an event is stored as a large character string to simplify * post-analysis. Users specify data for storage in addition to * that which is automatically stored (only the time and process) with * key, value combinations (EVKEY_STR_INT, EVKEY_STR_DBL, EVKEY_STR). * Many such key-value combinations as required may be specified. * Since the internal data format uses colons ':', double quotation * marks '"' and carriage returns users should avoid these in their * string data. * * ---------------------------- * Sample calling sequence: * * evlog(EVKEY_ENABLE, EVKEY_FILENAME, "events.log", EVKEY_LAST_ARG); * * * evlog(EVKEY_EVENT, "Finished startup code", * EVKEY_STR, "Now do some real work", * EVKEY_LAST_ARG); * * evlog(EVKEY_BEGIN, "Get Matrix", EVKEY_LAST_ARG); * * * evlog(EVKEY_END, "Get matrix", * EVKEY_STR_INT, "Size of matrix", (int) N, * EVKEY_STR_DBL, "Norm of matrix", (double) matrix_norm, * EVKEY_LAST_ARG); * * evlog(EVKEY_BEGIN, "Transform matrix", * EVKEY_STR_DBL, "Recomputed norm", (double) matrix_norm, * EVKEY_LAST_ARG); * * * evlog(EVKEY_END, "Transform matrix", * EVKEY_STR_INT, "No. of iterations", (int) niters, * EVKEY_LAST_ARG); * * evlog(EVKEY_DUMP, EVKEY_DISABLE, EVKEY_LAST_ARG); * * evlog(EVKEY_EVENT, "Logging is disabled ... this should not print", * EVKEY_DUMP, EVKEY_LAST_ARG); * * ---------------------------- * * EVKEY_LAST_ARG * Terminates list ... takes no value and must be present * * EVKEY_EVENT, (char *) event * Simply log occurence of the event * * EVKEY_BEGIN, (char *) event * Push event onto process state stack * * EVKEY_END, (char *) event * Pop event off process state stack * * EVKEY_MSG_LEN, (int) length * Value is (int) mesage length SND/RCV only * * EVKEY_MSG_TO, (int) to * Value is (int) to process id SND/RCV only * * EVKEY_MSG_FROM, (int) from * Value is (int) from process SND/RCV only * * EVKEY_MSG_TYPE, (int) type * Value is (int) message type SND/RCV only * * EVKEY_STR_INT, (char *) string, (int) data * User data value pair * * EVKEY_STR_DBL, (char *) string, (double) data * User data value pair (char *), (double) * * EVKEY_STR, (char *) string * User data value (char *) * * EVKEY_ENABLE * Enable logging * * EVKEY_DISABLE * Disable logging * * EVKEY_DUMP * Dump out the current buffer to disk * * EVKEY_FILE, (char *) filename * Use specified file to capture events. Default is "events". */ void evlog(int farg_key, ...) { static int logging=0;/**< Boolean flag for login enabled/disabled */ static int error=0; /**< Boolean flag for error detected */ static int ncall=0; /**< Need to do stuff on first entry */ static char *buffer; /**< Logging buffer ... null terminated */ static char *bufpt; /**< Pointer to next free char in buffer */ static int left; /**< Amount of free space in buffer */ static FILE *file; /**< File where events will be dumped */ static char *filename = "events"; /**< Default name of events file */ va_list ap; /**< For variable argument list */ int key; /**< Hold key being processed */ int nchars; /**< No. of chars printed by sprintf call */ char *temp; /**< Temporary copy of bufpt */ char *string; /**< Temporary */ int integer; /**< Temporary */ double dbl; /**< Temporary */ int valid; /**< Temporary */ /* If an error was detected on a previous call don't even try to do anything */ if (error) { ERROR_RETURN(); } /* First time in need to allocate the buffer, open the file etc */ if (ncall == 0) { ncall = 1; if (!(bufpt = buffer = malloc((unsigned) BUFLEN))) { ERROR_RETURN(); } left = BUFLEN; if (!(file = fopen(filename, "w"))) { ERROR_RETURN(); } } /* Parse the arguments */ temp = bufpt; /**< Save to check if anything has been logged */ valid = 0; /**< One of BEGIN, END or EVENT must preceed most keys */ va_start(ap, farg_key); key = farg_key; while (key != EVKEY_LAST_ARG) { if ( (!logging) && (key != EVKEY_ENABLE) ) { return; } switch (key) { case EVKEY_ENABLE: logging = 1; break; case EVKEY_DISABLE: logging = 0; goto done; /* break; */ case EVKEY_FILENAME: if (!(filename = strdup(va_arg(ap, char *)))) { ERROR_RETURN(); } if (!(file = freopen(filename, "w", file))) { ERROR_RETURN(); } break; case EVKEY_BEGIN: valid = 1; RECORD(sprintf(bufpt, ":BEGIN:%s", va_arg(ap, char *))); RECORD(sprintf(bufpt, ":TIME:%.2f", walltime())); break; case EVKEY_END: valid = 1; RECORD(sprintf(bufpt, ":END:%s", va_arg(ap, char *))); RECORD(sprintf(bufpt, ":TIME:%.2f", walltime())); break; case EVKEY_EVENT: valid = 1; RECORD(sprintf(bufpt, ":EVENT:%s", va_arg(ap, char *))); RECORD(sprintf(bufpt, ":TIME:%.2f", walltime())); break; case EVKEY_MSG_LEN: if (!valid) { ERROR_RETURN(); } RECORD(sprintf(bufpt, ":MSG_LEN:%d", va_arg(ap, int))); break; case EVKEY_MSG_TO: if (!valid) { ERROR_RETURN(); } RECORD(sprintf(bufpt, ":MSG_TO:%d", va_arg(ap, int))); break; case EVKEY_MSG_FROM: if (!valid) { ERROR_RETURN(); } RECORD(sprintf(bufpt, ":MSG_FROM:%d", va_arg(ap, int))); break; case EVKEY_MSG_TYPE: if (!valid) { ERROR_RETURN(); } RECORD(sprintf(bufpt, ":MSG_TYPE:%d", va_arg(ap, int))); break; case EVKEY_MSG_SYNC: if (!valid) { ERROR_RETURN(); } RECORD(sprintf(bufpt, ":MSG_SYNC:%d", va_arg(ap, int))); break; case EVKEY_STR_INT: if (!valid) { ERROR_RETURN(); } string = va_arg(ap, char *); integer = va_arg(ap, int); RECORD(sprintf(bufpt, ":STR_INT:%s:%d", string, integer)); break; case EVKEY_STR_DBL: if (!valid) { ERROR_RETURN(); } string = va_arg(ap, char *); dbl = va_arg(ap, double); RECORD(sprintf(bufpt, ":STR_DBL:%s:%g", string, dbl)); break; case EVKEY_STR: if (!valid) { ERROR_RETURN(); } RECORD(sprintf(bufpt, ":STR:%s", va_arg(ap, char *))); break; case EVKEY_DUMP: DUMPBUF(); if (temp != bufpt) { RECORD(sprintf(bufpt, "\n")); temp = bufpt; } break; default: DUMPBUF(); ERROR_RETURN(); } key = va_arg(ap, int); } done: va_end(ap); /* Put a linefeed on the end of the record if something is written */ if (temp != bufpt) { RECORD(sprintf(bufpt, "\n")); temp = bufpt; } /* Should really check on every access to the buffer that there is enough space ... however just assume a very large maximum size for a single event log entry and check here */ if (left <= 0) { ERROR_RETURN(); } if (left < MAX_EV_LEN) { DUMPBUF(); } } /** * return the wall time in seconds as a double */ static double walltime() { return ((double) MTIME_()) * 0.01; } /* int main(int argc, char **argv) { int N = 19; double matrix_norm = 99.1; int niters = 5; evlog(EVKEY_ENABLE, EVKEY_FILENAME, "events.log", EVKEY_LAST_ARG); evlog(EVKEY_EVENT, "Finished startup code", EVKEY_STR, "Now do some real work", EVKEY_LAST_ARG); evlog(EVKEY_BEGIN, "Get Matrix", EVKEY_LAST_ARG); evlog(EVKEY_END, "Get matrix", EVKEY_STR_INT, "Size of matrix", (int) N, EVKEY_STR_DBL, "Norm of matrix", (double) matrix_norm, EVKEY_LAST_ARG); evlog(EVKEY_BEGIN, "Transform matrix", EVKEY_STR_DBL, "Recomputed norm", (double) matrix_norm, EVKEY_LAST_ARG); evlog(EVKEY_END, "Transform matrix", EVKEY_STR_INT, "No. of iterations", (int) niters, EVKEY_LAST_ARG); evlog(EVKEY_DUMP, EVKEY_LAST_ARG); evlog(EVKEY_EVENT, "Logging is disabled ... this should not print", EVKEY_DUMP, EVKEY_LAST_ARG); return 0; } */ ga-5-3/tcgmsg/capi.c0000640005473000001440000000671412115161655013153 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /** @file * This header file declares the public C API to tcgmsg. */ #include #include #include "sndrcv.h" void tcg_alt_pbegin(int *argc, char **argv[]) { tcgi_pbegin(*argc, *argv); } void tcg_brdcst(long type, void *buf, long lenbuf, long originator) { long atype = type; long alenbuf = lenbuf; long aoriginator = originator; BRDCST_(&atype, buf, &alenbuf, &aoriginator); } void tcg_dgop(long type, double *x, long n, char *op) { long atype = type; long an = n; double *ax; int i; ax = (double*)malloc(n * sizeof(double)); for (i=0; i #include #include "farg.h" #include "typesf2c.h" #include "srftoc.h" #include "sndrcv.h" #define LEN 255 #define _BRDCST_ F77_FUNC(brdcst, BRDCST) #define _DGOP_ F77_FUNC(dgop, DGOP) #define _DRAND48_ F77_FUNC(drand48, DRAND48) #define _IGOP_ F77_FUNC(igop, IGOP) #define _LLOG_ F77_FUNC(llog, LLOG) #define _MDTOB_ F77_FUNC(mdtob, MDTOB) #define _MDTOI_ F77_FUNC(mdtoi, MDTOI) #define _MITOB_ F77_FUNC(mitob, MITOB) #define _MITOD_ F77_FUNC(mitod, MITOD) #define _MTIME_ F77_FUNC(mtime, MTIME) #define _NICEFTN_ F77_FUNC(niceftn, NICEFTN) #define _NNODES_ F77_FUNC(nnodes, NNODES) #define _NODEID_ F77_FUNC(nodeid, NODEID) #define _NXTVAL_ F77_FUNC(nxtval, NXTVAL) #define _PARERR_ F77_FUNC(parerr, PARERR) #define _PBEGINF_ F77_FUNC(pbeginf, PBEGINF) #define _PBGINF_ F77_FUNC(pbginf, PBGINF) #define _PEND_ F77_FUNC(pend, PEND) #define _PFCOPY_ F77_FUNC(pfcopy, PFCOPY) #define _PFILECOPY_ F77_FUNC(pfilecopy, PFILECOPY) #define _PROBE_ F77_FUNC(probe, PROBE) #define _RCV_ F77_FUNC(rcv, RCV) #define _SETDBG_ F77_FUNC(setdbg, SETDBG) #define _SND_ F77_FUNC(snd, SND) #define _SRAND48_ F77_FUNC(srand48, SRAND48) #define _STATS_ F77_FUNC(stats, STATS) #define _SYNCH_ F77_FUNC(synch, SYNCH) #define _TCGREADY_ F77_FUNC(tcgready, TCGREADY) #define _TCGTIME_ F77_FUNC(tcgtime, TCGTIME) #define _WAITCOM_ F77_FUNC(waitcom, WAITCOM) void FATR _BRDCST_(Integer *type, void *buf, Integer *lenbuf, Integer *originator) { long atype = *type; long alenbuf = *lenbuf; long aoriginator = *originator; BRDCST_(&atype, buf, &alenbuf, &aoriginator); } void FATR _DGOP_(Integer *type, DoublePrecision *x, Integer *n, char *op, int oplen) { long atype = *type; long an = *n; double *ax; int i; ax = (double*)malloc(an * sizeof(double)); for (i=0; i {$PROGRAM}.p IF IPSC echo "time parallel $cube $PROGRAM" time parallel $cube $PROGRAM ELSE echo "" echo 'The following hosts/processes will be used:' echo ' ' awk 'NF==5 {printf("%25s ... %d processes\n",$2,$3)}' < {$PROGRAM}.p echo "" echo time parallel $PROGRAM $ARGS echo "" time parallel $PROGRAM $ARGS ENDIF ENDIF ga-5-3/tcgmsg/examples/mxv_daxpy1.f0000640005473000001440000000144112115161655016150 0ustar d3n000users subroutine mxv(a,ncol,b,nrow,c) C$Id: mxv_daxpy1.f,v 1.2 1995-02-02 23:24:19 d3g681 Exp $ implicit double precision (a-h, o-z) dimension a(ncol, nrow), b(nrow), c(ncol) parameter (nchunk = 800) c c matrix vector product stripmined to optimize cache usage c when inner loop is replaced with a daxpy that uses pipelined c loads for a to avoid writing over c in the cache. c do 10 ilo = 1, ncol, nchunk ihi = min(ncol, ilo+nchunk-1) ndo = ihi - ilo + 1 do 20 i = ilo, ihi c(i) = 0.0d0 20 continue do 30 j = 1, nrow c do 40 i = ilo, ihi c c(i) = c(i) + a(i,j)*b(j) c40 continue call daxpy1(ndo, b(j), a(ilo, j), c(ilo)) 30 continue 10 continue c end ga-5-3/tcgmsg/examples/cscf120lin.h0000640005473000001440000000330212115161655015714 0ustar d3n000users/*$Id: cscf120lin.h,v 1.2 1995-02-02 23:23:55 d3g681 Exp $*/ c c include file defining common /cscf/ c c natom = no. of atoms (constant parameter) c nbfn = no. of basis functions (constant parameter) c nnbfn = nbfn*(nbfn+1)/2 (constant parameter) c nocc = no. of occupied orbitals (constant parameter) c mxiter = maximim no. of iterations(constant parameter) c tol = convergence criterion (constant parameter) c pi = a familiar constant (constant parameter) c tol2e = 2-e integral screening (constant parameter) c c the remainder is initialized in block data or in the c routine ininrm (rnorm and iky) c c enrep = nuclear repulsion energy c q(1:natom) = nuclear charge of atom c ax(1:natom) = x co-ordinate of atom c ay(1:natom) = y ... c az(1:natom) = z ... c x(1:nbfn) = x co-ordinate of basis function c y(1:nbfn) = y ... c z(1:nbfn) = z ... c expnt(1:nbfn)= exponent of gaussian c rnorm(1:nbfn)= normalization constant of gaussian c iky(1:nbfn) = iky(i) = i*(i-1)/2 to speed up fock build c icut1 = no. of successful ij 2-e screening tests c icut2 = no. of successful ijkl 2-e screening tests c icut3 = no. of 2-e integrals computed c parameter (natom = 8, nbfn =120, nocc =16, mxiter = 30) parameter (nnbfn = nbfn*(nbfn+1)/2, pi = 3.141592653589793d0) parameter (tol= 1.0d-4) parameter (tol2e=1.0d-6) c common /cscf/ $ enrep, q(natom), ax(natom), ay(natom), az(natom), $ x(nbfn), y(nbfn), z(nbfn), expnt(nbfn), rnorm(nbfn), $ iky(nbfn), icut1, icut2, icut3 c ga-5-3/tcgmsg/examples/trace.out0000640005473000001440000000046512115161655015535 0ustar d3n000users#*********** PROGRAM STACKTRACE ************** # text address function cp func start # ------------ ----------- ---------- 0x1176840 0x81b8858 0x1175fd0 0x1174ea8 0x81b8498 0x1174900 0x119a208 0x81bdd10 0x119a000 #*************** END STACKTRACE ************** ga-5-3/tcgmsg/examples/blkdat120lin.f0000640005473000001440000000612612115161655016244 0ustar d3n000users block data C$Id: blkdat120lin.f,v 1.2 1995-02-02 23:23:46 d3g681 Exp $ implicit double precision (a-h, o-z) include 'cscf.h' c c initalize data in common ... clumsy but avoids code to read in data c c line of eight be atoms 4.0 a.u. apart with 120 orbitals c c have 9s functions on each center and simulate p's by having c s function at +- 1 in each of x, y, z c data ax / 0.0d0, 4.0d0, 8.0d0, 12.0d0, 16.0d0, $ 20.0d0, 24.0d0, 28.0d0/ data ay / 8*0.0d0/ data az / 8*0.0d0/ data q /8*4.0d0/, enrep/54.9714285664/ c data x /9*0.0d0, 1.6d0, -1.6d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, $ 9*4.0d0, 5.6d0, 2.4d0, 4.0d0, 4.0d0, 4.0d0, 4.0d0, $ 9*8.0d0, 9.6d0, 6.4d0, 8.0d0, 8.0d0, 8.0d0, 8.0d0, $ 9*12.0d0,13.6d0, 10.4d0,12.0d0,12.0d0,12.0d0,12.0d0, $ 9*16.0d0,17.6d0, 14.4d0,16.0d0,16.0d0,16.0d0,16.0d0, $ 9*20.0d0,21.6d0, 18.4d0,20.0d0,20.0d0,20.0d0,20.0d0, $ 9*24.0d0,25.6d0, 22.4d0,24.0d0,24.0d0,24.0d0,24.0d0, $ 9*28.0d0,29.6d0, 26.4d0,28.0d0,28.0d0,28.0d0,28.0d0/ data y /9*0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, 0.0d0, 0.0d0, $ 9*0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, 0.0d0, 0.0d0, $ 9*0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, 0.0d0, 0.0d0, $ 9*0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, 0.0d0, 0.0d0, $ 9*0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, 0.0d0, 0.0d0, $ 9*0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, 0.0d0, 0.0d0, $ 9*0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, 0.0d0, 0.0d0, $ 9*0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, 0.0d0, 0.0d0/ data z /9*0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, $ 9*0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, $ 9*0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, $ 9*0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, $ 9*0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, $ 9*0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, $ 9*0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, $ 9*0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0/ data expnt /1741.0d0, 262.1d0, 60.33d0, 17.62d0, 5.933d0, 2.185d0, $ 0.859, 0.1806d0, 0.05835d0, 6*0.3d0, $ 1741.0d0, 262.1d0, 60.33d0, 17.62d0, 5.933d0, 2.185d0, $ 0.859, 0.1806d0, 0.05835d0, 6*0.3d0, $ 1741.0d0, 262.1d0, 60.33d0, 17.62d0, 5.933d0, 2.185d0, $ 0.859, 0.1806d0, 0.05835d0, 6*0.3d0, $ 1741.0d0, 262.1d0, 60.33d0, 17.62d0, 5.933d0, 2.185d0, $ 0.859, 0.1806d0, 0.05835d0, 6*0.3d0, $ 1741.0d0, 262.1d0, 60.33d0, 17.62d0, 5.933d0, 2.185d0, $ 0.859, 0.1806d0, 0.05835d0, 6*0.3d0, $ 1741.0d0, 262.1d0, 60.33d0, 17.62d0, 5.933d0, 2.185d0, $ 0.859, 0.1806d0, 0.05835d0, 6*0.3d0, $ 1741.0d0, 262.1d0, 60.33d0, 17.62d0, 5.933d0, 2.185d0, $ 0.859, 0.1806d0, 0.05835d0, 6*0.3d0, $ 1741.0d0, 262.1d0, 60.33d0, 17.62d0, 5.933d0, 2.185d0, $ 0.859, 0.1806d0, 0.05835d0, 6*0.3d0/ end ga-5-3/tcgmsg/examples/integ.f0000640005473000001440000000563512115161655015167 0ustar d3n000users double precision function exprjh(x) C$Id: integ.f,v 1.2 1995-02-02 23:24:14 d3g681 Exp $ double precision x c c dumb solution to underflow problems on sun c if (x.lt.-37.0d0) then exprjh = 0.0d0 else exprjh = exp(x) endif end subroutine setfm implicit double precision (a-h,o-z) common/values/fm(2001,5),rdelta,delta,delo2 dimension t(2001),et(2001) c c initalize common block for computation of f0 by recursion down c from f200 c delta=28.0d0/2000.0d0 delo2=delta*0.5d0 rdelta=1.0d0/delta maxm=4 do 10 i=1,2001 tt=delta*dble(i-1) et(i)=exprjh(-tt) t(i)=2.0d0*tt fm(i,maxm+1)=0.0d0 10 continue do 20 i=200,maxm,-1 rr=1.0d0/dble(2*i+1) do 30 ii=1,2001 fm(ii,maxm+1)=(et(ii)+t(ii)*fm(ii,maxm+1))*rr 30 continue 20 continue do 40 i=maxm,1,-1 rr=1.0d0/dble(2*i-1) do 50 ii=1,2001 fm(ii,i)=(et(ii)+t(ii)*fm(ii,i+1))*rr 50 continue 40 continue c end subroutine f0(value, t) implicit real*8 (a-h,o-z) common/values/fm(2001,5),rdelta,delta,delo2 parameter(fac0=0.88622692545276d0, $ rhalf=0.5d0,rthird=0.3333333333333333d0,rquart=0.25d0) data t0/28.d0/ c c computes f0 to a relative accuracy of better than 4.e-13 for all t. c uses 4th order taylor expansion on grid out to t=28.0 c asymptotic expansion accurate for t greater than 28 c if(t.ge.t0) then value = fac0 / sqrt(t) else n = idint((t+delo2)*rdelta) x = delta*dble(n)-t n = n+1 value = fm(n,1)+x*(fm(n,2)+rhalf*x*(fm(n,3)+ $ rthird*x*(fm(n,4)+rquart*x*fm(n,5)))) endif c end subroutine addin(g, i, j, k, l, fock, dens, iky) implicit double precision (a-h, o-z) dimension fock(*), dens(*), iky(*) c c add (ij|kl) into the fock matrix c gg = g g2 = gg+gg g4 = g2+g2 ik = iky(i) + k il = iky(i) + l ij = iky(i) + j jk = iky(max(j,k)) + min(j,k) jl = iky(max(j,l)) + min(j,l) kl = iky(k) + l aij = g4*dens(kl)+fock(ij) fock(kl) = g4*dens(ij)+fock(kl) fock(ij) = aij gil=gg if(i.eq.k.or.j.eq.l) gg = g2 if(j.eq.k) gil = g2 ajk = fock(jk) - gil*dens(il) ail = fock(il) - gil*dens(jk) aik = fock(ik) - gg*dens(jl) fock(jl) = fock(jl) - gg*dens(ik) fock(jk) = ajk fock(il) = ail fock(ik) = aik c end subroutine dfill(n,val,a,ia) implicit real*8 (a-h,o-z) dimension a(*) c c initialise double precision array to scalar value c if (ia.eq.1) then do 10 i = 1, n a(i) = val 10 continue else do 20 i = 1,(n-1)*ia+1,ia a(i) = val 20 continue endif c end ga-5-3/tcgmsg/examples/blkdat60lin.f0000640005473000001440000000352212115161655016164 0ustar d3n000users block data C$Id: blkdat60lin.f,v 1.2 1995-02-02 23:23:52 d3g681 Exp $ implicit double precision (a-h, o-z) include 'cscf.h' c c initalize data in common ... clumsy but avoids code to read in data c c line of four be atoms 4.0 a.u. apart with 60 orbitals c c have 9s functions on each center and simulate p's by having c s function at +- 1 in each of x, y, z c data ax / 0.0d0, 4.0d0, 8.0d0, 12.0d0/ data ay / 0.0d0, 0.0d0, 0.0d0, 0.0d0/ data az / 0.0d0, 0.0d0, 0.0d0, 0.0d0/ data q /4*4.0d0/, enrep/17.3333333333333d0/ c data x /9*0.0d0, 1.6d0, -1.6d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, $ 9*4.0d0, 5.6d0, 2.4d0, 4.0d0, 4.0d0, 4.0d0, 4.0d0, $ 9*8.0d0, 9.6d0, 6.4d0, 8.0d0, 8.0d0, 8.0d0, 8.0d0, $ 9*12.0d0,13.6d0, 10.4d0,12.0d0,12.0d0,12.0d0,12.0d0/ data y /9*0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, 0.0d0, 0.0d0, $ 9*0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, 0.0d0, 0.0d0, $ 9*0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, 0.0d0, 0.0d0, $ 9*0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, 0.0d0, 0.0d0/ data z /9*0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, $ 9*0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, $ 9*0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, $ 9*0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0/ data expnt /1741.0d0, 262.1d0, 60.33d0, 17.62d0, 5.933d0, 2.185d0, $ 0.859, 0.1806d0, 0.05835d0, 6*0.3d0, $ 1741.0d0, 262.1d0, 60.33d0, 17.62d0, 5.933d0, 2.185d0, $ 0.859, 0.1806d0, 0.05835d0, 6*0.3d0, $ 1741.0d0, 262.1d0, 60.33d0, 17.62d0, 5.933d0, 2.185d0, $ 0.859, 0.1806d0, 0.05835d0, 6*0.3d0, $ 1741.0d0, 262.1d0, 60.33d0, 17.62d0, 5.933d0, 2.185d0, $ 0.859, 0.1806d0, 0.05835d0, 6*0.3d0/ end ga-5-3/tcgmsg/examples/diagon.f0000640005473000001440000001460412115161655015316 0ustar d3n000users subroutine orthv2(n, v, s, work1, work2) C$Id: diagon.f,v 1.2 1995-02-02 23:24:07 d3g681 Exp $ implicit none integer n double precision v(n,n), s(n,n), work1(n), work2(n) c integer i double precision a, ddot c c orthonormalize vectors (v) in place over metric (s) c c v = matrix of column vectors c s = full square metric matrix c c note ... is not suitable for high precision or if the c input vectors are close to linear dependence c c ... assumes that the metric is symmetric c c normalize vector one c call dgemv('n',n,n,1.0d0,s,n,v(1,1),1,0.0d0,work1,1) a = ddot(n, work1, 1, v(1,1), 1) call dscal(n, 1.0d0/dsqrt(a), v(1,1), 1) c do 10 i = 2, n c c orthog vector i to vectors j=1,...,i-1 c call dgemv('n',n,n,1.0d0,s,n,v(1,i),1,0.0d0,work1,1) call dgemv('t',n,i-1,1.0d0,v,n,work1,1,0.0d0,work2,1) call dgemv('n',n,i-1,-1.0d0,v,n,work2,1,1.0d0,v(1,i),1) c c normalize vector i c call dgemv('n',n,n,1.0d0,s,n,v(1,i),1,0.0d0,work1,1) a = ddot(n, work1, 1, v(1,i), 1) call dscal(n, 1.0d0/dsqrt(a), v(1,i), 1) 10 continue c end subroutine jacobi(a,iky,newbas,q,ilifq,nrow,e,iop1, *iop2,thresh) implicit real*8 (a-h,p-w),integer (i-n),logical (o) implicit character *8 (z),character *1 (x) implicit character *4 (y) dimension a(*),q(*),e(*),iky(*),ilifq(*) common/blkin/ppp(2048),omask(1024),iipt(1024),ipt(1024) if(iop1.eq.1) go to 88 do 44 i=1,newbas ilifi=ilifq(i) call vclr(q(ilifi+1),1,nrow) 44 q(ilifi+i)=1.0d0 88 if(newbas.eq.1)goto 66 86 te=0.0d0 do 1 i=2,newbas i1=i-1 ikyi=iky(i) do 1 j=1,i1 temp= dabs(a(j+ikyi)) if(te.lt.temp)te=temp 1 continue if(te.lt.thresh)goto 99 te=te*0.1d0 do 22 i=2,newbas i1=i-1 ip1=i+1 ikyi=iky(i) itest=newbas-ip1 ii=i+ikyi ilifi=ilifq(i) do 22 j=1,i1 ij=j+ikyi vij=a(ij) if( dabs(vij) .lt. te) go to 22 vii=a(ii)*0.5d0 j1=j-1 jp1=j+1 ikyj=iky(j) jj=j+ikyj vjj=a(jj)*0.5d0 temp=vii-vjj tem=dsqrt(temp*temp+vij*vij) if(temp)78,77,77 78 tem=-tem 77 cost=(temp+tem)/vij sint=dsqrt(1.0d0/(1.0d0+cost*cost)) cost=cost*sint temp=vii+vjj a(ii)=temp+tem a(jj)=temp-tem a(ij)=0.0d0 if(j1.le.0)go to 3 call drot(j1,a(ikyi+1),1,a(ikyj+1),1,cost,sint) 3 if(i1 .lt. jp1) go to 5 do 6 k=jp1,i1 jj=iky(k)+j vij=a(k+ikyi) a(k+ikyi)=vij*cost+a(jj)*sint 6 a(jj)=a(jj)*cost-vij*sint 5 if(itest)7,79,79 79 do 8 k=ip1,newbas ij=iky(k)+i jj=j+iky(k) vij=a(ij) a(ij)=vij*cost+a(jj)*sint 8 a(jj)=a(jj)*cost-vij*sint 7 continue call drot(nrow,q(ilifi+1),1,q(ilifq(j)+1),1,cost,sint) 22 continue goto 86 99 do 11 i=1,newbas omask(i)=.false. e(i)=a(iky(i)+i) 11 iipt(i)=i/2 goto (67,55,55,43),iop2 c... binary sort of e.values to increasing value sequence 55 ipt(1)=1 do 19 j=2,newbas ia=1 ib=j-1 test=e(j) 53 irm1=ib-ia if(irm1)58,50,51 51 ibp=ia+iipt(irm1) if(test.lt.e(ipt(ibp)))goto 52 c... insert into high half ia=ibp+1 goto 53 c... insert into low half 52 jj=ib do 54 i=ibp,ib ipt(jj+1)=ipt(jj) 54 jj=jj-1 ib=ibp-1 goto 53 c... end point of search 50 jj=ipt(ia) if(test.ge.e(jj))goto 57 ipt(ia+1)=jj 58 ipt(ia)=j goto 19 57 ipt(ia+1)=j 19 continue goto (67,68,69,43),iop2 c... sort by decreasing e.value(invert order) 69 itest=newbas+1 ip1=iipt(newbas) do 41 i=1,ip1 j=itest-i k=ipt(i) ipt(i)=ipt(j) 41 ipt(j)=k 68 do 20 i=1,newbas k=ipt(i) iipt(k)=i 20 ppp(i)=e(k) 59 continue call dcopy(newbas,ppp(1),1,e(1),1) c... iipt(i)=k means column i is to move to posn k c... ipt(i)=k means column k is to move to posn i call sortq(q,ilifq,iipt,newbas,nrow) go to 67 c ... locking requested 43 do 31 j=1,newbas m=ilifq(j) temp=0.0d0 do 32 i=1,newbas vij= dabs(q(i+m)) if(vij.lt.temp.or.omask(i))goto 32 temp=vij k=i 32 continue iipt(j)=k omask(k)=.true. 31 ppp(k)=e(j) goto 59 66 e(1)=a(1) 67 return end subroutine sortq(q,ilifq,iipt,newbas,nrow) implicit real*8 (a-h,p-w),integer (i-n),logical (o) implicit character *8 (z),character *1 (x) implicit character *4 (y) dimension q(*),ilifq(*),iipt(*) common/blkin/ppp(2048),omask(1024) juse=1 jnext=1025 do 10 i = 1, newbas omask(i) = .false. 10 continue do 21 i=1,newbas if(omask(i))goto 21 j=i call dcopy(nrow,q(ilifq(j)+1),1,ppp(juse),1) c... start a permutation cycle 23 m=iipt(j) ilifi=ilifq(m) call dcopy(nrow,q(ilifi+1),1,ppp(jnext),1) call dcopy(nrow,ppp(juse),1,q(ilifi+1),1) if(m.eq.i)goto 21 juse=jnext jnext=1026-jnext omask(m)=.true. j=m goto 23 21 continue return end subroutine vclr(a,incr,n) implicit real*8 (a-h,o-z) dimension a(*) if(incr.eq.1) then do 10 loop=1,n 10 a(loop) = 0.0d0 else loopi=1 do 20 loop=1,n a(loopi)=0.0d0 loopi=loopi+incr 20 continue endif return end subroutine zsqua(n, h, s) implicit double precision (a-h, o-z) c dimension h(*), s(n,n) c c put lower triangular array h into square matrix s c and halve the diagonal c do 10 i = 1,n-1 do 20 j = i+1,n s(j,i) = 0.0d0 20 continue 10 continue c ij = 0 do 30 i = 1,n do 40 j = 1,i-1 s(j,i) = h(ij+j) 40 continue ij = ij + i s(i,i) = h(ij) * 0.5d0 30 continue c end subroutine zfold(n, h, s) implicit double precision (a-h, o-z) c dimension h(*), s(n,n) c c fold square matrix s into lower triangular array h c ... note that the diagonal gets doubled. c ij = 0 do 10 i = 1,n do 20 j = 1,i h(ij+j) = s(i,j) + s(j,i) 20 continue ij = ij + i 10 continue c end ga-5-3/tcgmsg/examples/mxv_dgemv.f0000640005473000001440000000136112115161655016045 0ustar d3n000users subroutine mxv(a,ncol,b,nrow,c) C$Id: mxv_dgemv.f,v 1.2 1995-02-02 23:24:20 d3g681 Exp $ implicit double precision (a-h, o-z) double precision a(ncol, nrow), b(nrow), c(ncol) parameter (ilen=500, jlen=60) c call dgemv('n', ncol, nrow, 1.0d0, a, ncol, b, 1, 0.0d0, c, 1) c$$$ do 10 i = 1, ncol c$$$ c(i) = 0.0d0 c$$$ 10 continue c$$$c c$$$ do 40 jlo = 1, nrow, jlen c$$$ jhi = min(jlo+jlen-1, nrow) c$$$ do 30 ilo = 1, ncol, ilen c$$$ ihi = min(ilo+ilen-1, ncol) c$$$ ndo = ihi - ilo + 1 c$$$ do 20 j = jlo, jhi c$$$ call daxpy2(ndo, b(j), a(ilo,j), c(ilo)) c$$$ 20 continue c$$$ 30 continue c$$$ 40 continue c end ga-5-3/tcgmsg/examples/getmem.c0000640005473000001440000000155112115161655015325 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /*$Id: getmem.c,v 1.2 1995-02-02 23:24:10 d3g681 Exp $*/ extern char * memalign(); #if (defined(AIX) || defined(NEXT) || defined(HPUX)) && !defined(EXTNAME) #define getmem_ getmem #endif #if defined(CRAY) || defined(ARDENT) #define getmem_ GETMEM #endif /* getmem gets n real*8 storage locations and returns its address (iaddr) and offset (ioff) within the real*8 array work so that the usable memory is (work(i+ioff),i=1,n). e.g. call getmem(n,work,iaddr,ioff) if (iaddr.eq.0) call error Mods are needed to release this later. */ void getmem_(pn,pwork,paddr,pioff) unsigned long *pn,*paddr,*pioff; double *pwork; { double *ptemp; unsigned int size = 8; ptemp = (double *) memalign(size, (unsigned) size* *pn); *paddr = (unsigned long) ptemp; *pioff = ptemp - pwork; } ga-5-3/tcgmsg/examples/fexit.f.proto0000640005473000001440000000045112115161655016331 0ustar d3n000users subroutine fexit IF ARDENT c Fortran returns a non-zero status unless we STOP, which c produces the irritating FORTRAN STOP message, or we c explicitly call exit call exit(0) ELSE ENDIF end IF HPUX HPUXNOEXT IBM IBMNOEXT subroutine flush(iunit) end ENDIF ga-5-3/tcgmsg/examples/README0000640005473000001440000001256612115161655014573 0ustar d3n000usersTCGMSG Examples =============== These example programs are realisitic (?) models of actual applications or algorithms from chemical-physics. They should make cleanly once the Makefile has been appropriately modified (which is done automatically for all supported machines). Serial and shared-memory parallel (and possibly CM and Linda) versions are also available but not included here. The programs may be run using the csh script demo in this directory The script takes a single argument which is the name of the desired demo (scf, md, mc, jacobi, grid). The script uses a template PROCGRP file (template.p) to generate the actual PROCGRP file used ... its makes a default file if one does not exist ... look in that for details. Self Consistent Field (scf) --------------------------- This SCF code is a cleaned up and much enhanced version of the one in Szabo and Ostlund. It uses distributed primitive 1s gaussian functions as a basis (thus emulating use of s,p,... functions) and computes integrals to essentially full accuracy. It is a direct SCF (integrals are computed each iteration using the Schwarz inequality for screeing). An atomic denisty is used for a starting guess. Damping and level shifting are used to aid convergence. Rather than complicate the program with code for parsing input the include file 'cscf.h' and block data file 'blkdata.f' contain all the data and thus there are three versions, one for each of the available problem sizes. The three sizes correpsond to 15 basis functions (Be), 30 basis functions (Be2) and 60 basis functions (tetrahedral Be4). [In addition to these three cases there are files for 60, 120 and 240 functions, which are not built by default (type 'make extra' for these). These are 4, 8 and 16 Be atoms, respectively, arranged in a line.] The O(N**4) step has been parallelized with the assumption that each process can hold all of the density and fock matrices which is reasonable for up to O(1000) basis functions on most workstations networks and many MIMD machines (e.g. iPSC-i860). The work is dynamically load-balanced, with tasks comprising 10 sets of integrals (ij|**) (see TWOEL() and NXTASK() in scf.f). The work of O(N**3) has not been parallelized, but has been optimized to use BLAS and a tweaked Jacobi diagonalizer with dynamic threshold selection. Molecular Dynamics (md) ----------------------- This program bounces a few thousand argon atoms around in a box with periodic boundary conditions. Pairwise interactions (Leonard-Jones) are used with a simple integration of the Newtonian equations of motion. This program is derived from the serial code of Deiter Heerman, but many modifications have been made. Prof. Frank Harris has a related FORTRAN 9X Connection Machine version. The O(N) work constructing the forces has been parallelized, as has the computation of the pair distribution function. The neighbour list is computed in parallel every 20 steps with a simple static decomposition. This then drives the parallelization of the forces computation. To make the simulation bigger increase the value of mm in the parameter statement at the top of md.f (mm=8 gives 2048 particles, mm=13 gives 8878). Each particle interacts with about 80 others, and the neighbor list is computed for about 130 neighbors to allow for movement before it is updated. Monte Carlo (mc) ---------------- This code evaluates the energy of the simplest explicitly correlated electronic wavefunction for the He atom ground state using a variational monte-carlo method without importance sampling. It is completely boringly parallel and for realistic problem sizes gives completely linear speed-ups for several hunderd processes. You have to give it the no. of moves to equilibrate the system for (neq) and the no. of moves to compute averages over (nstep). Apropriate values for a very short run are 200 and 500 respectively. Jacobi iterative linear equation solver (jacobi) ------------------------------------------------ Uses a naive jacobi iterative algorithm to solve a linear equation. This algorithm is not applicable to real linear equations (sic) and neither is it the most parallel algorithm available. The code as implemented here gets 780+ MFLOP on a 128 node iPSC-i860 ... a paltry 30% efficiency, but it is not hard to improve upon either. All the time is spent in a large matrix vector product which is statically distributed across the processes. You need to give it the matrix dimension (pick as big as will fit in memory). Solution of Laplace's equation on a 2-D grid (grid) --------------------------------------------------- Solve Laplace's eqn. on a 2-D square grid subject to b.c.s on the boundary. Use 5 point discretization of the operator and a heirarchy of grids with red/black gauss seidel w-relaxation. This is not the most efficient means of solving this equation (probably should use a fast-poisson solver) but it provides a 'real-world' example of spatial decomposition determining the parallel decomposition. It is also the only example of a full application in C that is included here. If the code is compiled with -DPLOT and run with the option '-plot XXX', where XXX is one of 'value', 'residual' or 'error', then grids are dumped at intervals to the file 'plot' (in the directory of process zero). This file may be displayed with the X11-R4/5 program xpix. Xpix is not built automatically and must be extracted and built from the shar file in this directory. ga-5-3/tcgmsg/examples/xpix.shar0000640005473000001440000004070412115161655015555 0ustar d3n000users # This is a shell archive. Remove anything before this line, then # unpack it by saving it in a file and typing "sh file". (Files # unpacked will be owned by you and have default permissions.) # # This archive contains: # check.bitmap makefile xpix.c echo x - check.bitmap sed -e 's/^X//' > "check.bitmap" << '//E*O*F check.bitmap//' X#define check_width 8 X#define check_height 8 Xstatic char check_bits[] = { X 0x40, 0x20, 0x20, 0x10, 0x10, 0x09, 0x0a, 0x04}; //E*O*F check.bitmap// echo x - makefile sed -e 's/^X//' > "makefile" << '//E*O*F makefile//' X# X CFLAGS = -O4 -DSUN -dalign -I/msrc/apps/X11R5/include X XLIBS = -L/msrc/apps/X11R5/lib -lXaw -lXmu -lXt -lX11 -lXau -lXdmcp -lXext X X#SUN R4 X# XLIBS = -lXaw -lXmu -lXt -lX11 -lXau -lXdmcp -lXext -lXinput X Xxpix: xpix.o X cc $(CFLAGS) -o xpix xpix.o $(XLIBS) -lm //E*O*F makefile// echo x - xpix.c sed -e 's/^X//' > "xpix.c" << '//E*O*F xpix.c//' X#include X#include X#include X#include X X#include "check.bitmap" X X#include X#include X#include X#include X#include X#include X#include X#include X#include X#include X#include X#include X#include X#include X#include X Xextern char *malloc(); X X/* Globals needed for display etc. */ X Xstatic Widget top_level_widget, box_widget, file_menu_button, start_button, X canvas_widget, title_widget, grid_data_widget, X scroll_widget, interval_widget, file_menu; X#define n_file_menu_entries 3 Xstatic String file_menu_entries[] = {"Tail ","Cycle ","Quit"}; Xstatic Widget file_menu_widgets[n_file_menu_entries]; Xstatic Pixmap check_mark; Xstatic Arg arg[25]; Xstatic Display *display; Xstatic Window window; Xstatic int screen, depth; Xstatic Visual *visual; Xstatic XtIntervalId timer; Xstatic XImage *image; Xstatic u_char *pict; Xstatic GC gc; Xstatic char title[80]; Xstatic char grid_data[80]; Xstatic char interval_string[10]; X Xstatic long first_time = True; /* Used to set scroll bar on first expose */ Xstatic long interval_max = 2000; Xstatic long interval = 500; /* 0.5s between exposures by default */ X Xstatic int tail_mode = False; /* By default cycle thru frames X instead of tailing a file */ X X#define TCG_MAX(a,b) (((a)>(b)) ? (a) : (b)) X#define TCG_MIN(a,b) (((a)<(b)) ? (a) : (b)) X X#define MAX_COL 64 Xstatic u_char cmap[MAX_COL]; X X Xstatic int n_grid = 0; /* The number of the current grid */ Xstatic int grid_size; /* The size of the current grid */ Xstatic int max_grid_size=-1; /* Size of the largest grid */ X X#define PICT_SIZE max_grid_size X Xstatic u_char *grid; Xstatic int working = False; X Xvoid Error(string, integer) X char *string; X int integer; X{ X (void) fflush(stdout); X (void) fprintf(stderr,"\n\nError was called.\n"); X (void) fprintf(stderr,string); X (void) fprintf(stderr," %d (%#x).\n",integer,integer); X exit(1); X} X X/*ARGSUSED*/ Xvoid FileMenuCallback(w, pane_num, data) X Widget w; X int pane_num; X caddr_t data; X{ X switch (pane_num) { X case 0: /* Tail mode */ X tail_mode = True; X XtSetArg(arg[0], XtNrightBitmap, check_mark); /* Check tail */ X XtSetValues(file_menu_widgets[0], arg, 1); X XtSetArg(arg[0], XtNrightBitmap, NULL); /* Un-check cycle */ X XtSetValues(file_menu_widgets[1], arg, 1); X break; X X case 1: /* Cycle mode */ X tail_mode = False; X XtSetArg(arg[0], XtNrightBitmap, check_mark); /* Check cycle */ X XtSetValues(file_menu_widgets[1], arg, 1); X XtSetArg(arg[0], XtNrightBitmap, NULL); /* Un-check tail */ X XtSetValues(file_menu_widgets[0], arg, 1); X break; X X case 2: /* Quit */ X exit(0); X break; X X default: X Error("Unknown menu item", pane_num); X } X} X Xint GetNextGrid(grid) X u_char *grid; X{ X int n, junk, nread; X u_char *temp; X X if (fread(&grid_size, sizeof(int), 1, stdin) != 1) { X clearerr(stdin); X X if (tail_mode) { X /* In this mode just wait for next time out and try again then */ X return False; X } X else { X /* Cycling ... retry at the front of the file */ X n_grid = 0; X fseek(stdin, 0, 0); X (void) fread(&junk, sizeof(int), 1, stdin); /* Ignore first word */ X X if (fread(&grid_size, sizeof(int), 1, stdin) != 1) { X (void) fprintf(stderr, X "GetNextGrid: Failed to read first grid size\n"); X return False; X } X } X } X X grid_size = ntohl(grid_size); /* Convert to machine format */ X X /* Have read the grid size so there must be a grid on the way */ X X n = grid_size*grid_size; X temp = grid; X X while(n) { X nread = fread(temp, 1, n, stdin); X if (!nread) { X clearerr(stdin); X sleep(1); /* Don't be too agressive */ X } X temp += nread; X n -= nread; X } X n_grid++; X return True; X} X Xvoid DrawGrid(grid) X u_char *grid; X{ X register int scale = max_grid_size/grid_size; X register int i,j,k,l,npix,index; X register u_char *from, *to, *tempk, *tempkl, value; X X from = grid; to = pict; /* For clarity and convenience */ X X if (scale > 1) { X for (i=0; iwidth, image->height); X (void) sprintf(grid_data, "Grid %d (%d x %d)", X n_grid, grid_size, grid_size); X X XtSetArg(arg[0], XtNlabel, grid_data); /* Reset the grid data */ X XtSetValues(grid_data_widget,arg,1); X XFlush(display); X} X Xvoid DisplayIntervalValue() X{ X (void) sprintf(interval_string, "%4d ms", interval); X XtSetArg(arg[0], XtNlabel, interval_string); X XtSetValues(interval_widget,arg,1); X} X X/*ARGSUSED*/ Xvoid ScrollProc(scrollbar, data, position) X Widget scrollbar; X caddr_t data; X caddr_t position; X/* X Called when the left or right buttons are used to step the X scrollbar left or right. We have the responsibility of X moving the scrollbar. X*/ X{ X Dimension length; X float fraction, shown; X X /* Get the scrollbar length and move the scroll bar */ X X XtSetArg(arg[0], XtNlength, &length); X XtGetValues(scrollbar, arg, 1); X fraction = ((int) position)/ (double) length; X X interval -= fraction*0.05*interval_max; X interval = TCG_MIN(interval, interval_max); X interval = TCG_MAX(interval, 1); X X fraction = (float) interval/ (float) interval_max; X shown = -1.0; X X DisplayIntervalValue(); X XawScrollbarSetThumb(scrollbar, fraction, shown); X} X X/*ARGSUSED*/ Xvoid JumpProc(scrollbar, data, fraction_ptr) X Widget scrollbar; X caddr_t data; X caddr_t fraction_ptr; X/* X Called when the middle button is used to drag to X the scrollbar. The scrollbar is moved for us. X*/ X{ X float fraction = *(float *) fraction_ptr; X X interval = fraction*interval_max; X interval = TCG_MIN(interval, interval_max); X interval = TCG_MAX(interval, 1); X X DisplayIntervalValue(); X} X X/*ARGSUSED*/ Xvoid Exposed(widget, data, event) X Widget widget; X caddr_t data; X XEvent *event; X{ X /* Now we are exposed we can draw ... only if we have a grid! */ X X if (first_time) { X /* Cannot seem to set this before now ? */ X ScrollProc(scroll_widget, NULL, 0); X first_time = False; X } X X if (n_grid) X DrawGrid(grid); X} X X/*ARGSUSED*/ Xvoid TimeOutCallback(data) X caddr_t data; X{ X /* If there's another grid available draw it */ X X if (GetNextGrid(grid)) X DrawGrid(grid); X X /* Always restore the call back */ X X timer = XtAddTimeOut(interval, TimeOutCallback, NULL); X X} X X/*ARGSUSED*/ Xvoid StartStop(widget, data, event) X Widget widget; X caddr_t data; X XEvent *event; X{ X /* Toggle propagation of display */ X X if (working) { X XtRemoveTimeOut(timer); X working = False; X XtSetArg(arg[0], XtNlabel, "Start"); /* Reset button label */ X XtSetValues(start_button,arg,1); X XFlush(display); X } X else { X XtSetArg(arg[0], XtNlabel, "Stop"); /* Reset button label */ X XtSetValues(start_button,arg,1); X timer = XtAddTimeOut(interval, TimeOutCallback, NULL); X working = True; X XFlush(display); X } X} X Xvoid HSVtoRGB(h, s, v, r, g, b) X double h, s, v, *r, *g, *b; X/* X hue (0-360), s&v (0-1), r&g&b (0-1) X*/ X{ X int ih; X double rh, x, y, z; X X /* Zero saturation means gray */ X X if (s < 0.0001) { X *r = v; *g = v; *b = v; X return; X } X X /* Put hue in [0,6) */ X X if (h > 359.999) X h = 0.0; X else X h = h/60.0; X X ih = h; rh = h - ih; /* Integer and fractional parts */ X X x = v*(1.0 - s); X y = v*(1.0-s*rh); X z = v*(1.0-s*(1.0-rh)); X X switch (ih) { X case 0: X *r = v; *g = z; *b = x; break; X case 1: X *r = y; *g = v; *b = x; break; X case 2: X *r = x; *g = v; *b = z; break; X case 3: X *r = x; *g = y; *b = v; break; X case 4: X *r = z; *g = x; *b = v; break; X case 5: X *r = v; *g = x; *b = y; break; X default: X Error("HLStoRGB: invalid hue", ih); X } X} X Xvoid Setcmap() X/* X Make the color map ... scheme base on linear interpolation of hsv. X*/ X{ X int i; X XColor color; X Colormap colormap; X double scale = 1.0 / ((double) (MAX_COL-1)); X double hue, saturation, value, red, green, blue; X X colormap = DefaultColormap(display, screen); X X for (i=0; i ${demo}.p (time ../ipcv4.0/parallel $demo -ngrid 1024) >& ${demo}.log.${nproc} end end ga-5-3/tcgmsg/examples/prtri.f0000640005473000001440000000136512115161655015215 0ustar d3n000users subroutine prtri(d,n) c c ----- print out a real triangular matrix ----- c C$Id: prtri.f,v 1.2 1995-02-02 23:24:24 d3g681 Exp $ implicit double precision (a-h, o-z) dimension d(*),dd(6) iw = 6 c max = 6 imax = 0 100 imin = imax+1 imax = imax+max if (imax .gt. n) imax = n write (iw,9008) write (iw,8028) (i,i = imin,imax) do 160 j = 1,n k = 0 do 140 i = imin,imax k = k+1 m = max0(i,j)*(max0(i,j)-1)/2 + min0(i,j) dd(k) = d(m) 140 continue write (iw,8048) j,(dd(i),i = 1,k) 160 continue if (imax .lt. n) go to 100 return 9008 format(/) 8028 format(6x,6(4x,i4,4x)) 8048 format(i5,1x,6f12.6) end ga-5-3/tcgmsg/examples/dscal.f0000640005473000001440000000165312115161655015143 0ustar d3n000users subroutine dscal(n,da,dx,incx) c c scales a vector by a constant. c uses unrolled loops for increment equal to one. c jack dongarra, linpack, 3/11/78. c C$Id: dscal.f,v 1.2 1995-02-02 23:24:08 d3g681 Exp $ double precision da,dx(1) integer i,incx,m,mp1,n,nincx c if(n.le.0)return if(incx.eq.1)go to 20 c c code for increment not equal to 1 c nincx = n*incx do 10 i = 1,nincx,incx dx(i) = da*dx(i) 10 continue return c c code for increment equal to 1 c c c clean-up loop c 20 m = mod(n,5) if( m .eq. 0 ) go to 40 do 30 i = 1,m dx(i) = da*dx(i) 30 continue if( n .lt. 5 ) return 40 mp1 = m + 1 do 50 i = mp1,n,5 dx(i) = da*dx(i) dx(i + 1) = da*dx(i + 1) dx(i + 2) = da*dx(i + 2) dx(i + 3) = da*dx(i + 3) dx(i + 4) = da*dx(i + 4) 50 continue return end ga-5-3/tcgmsg/examples/cscf240lin.h0000640005473000001440000000330212115161655015717 0ustar d3n000users/*$Id: cscf240lin.h,v 1.2 1995-02-02 23:23:57 d3g681 Exp $*/ c c include file defining common /cscf/ c c natom = no. of atoms (constant parameter) c nbfn = no. of basis functions (constant parameter) c nnbfn = nbfn*(nbfn+1)/2 (constant parameter) c nocc = no. of occupied orbitals (constant parameter) c mxiter = maximim no. of iterations(constant parameter) c tol = convergence criterion (constant parameter) c pi = a familiar constant (constant parameter) c tol2e = 2-e integral screening (constant parameter) c c the remainder is initialized in block data or in the c routine ininrm (rnorm and iky) c c enrep = nuclear repulsion energy c q(1:natom) = nuclear charge of atom c ax(1:natom) = x co-ordinate of atom c ay(1:natom) = y ... c az(1:natom) = z ... c x(1:nbfn) = x co-ordinate of basis function c y(1:nbfn) = y ... c z(1:nbfn) = z ... c expnt(1:nbfn)= exponent of gaussian c rnorm(1:nbfn)= normalization constant of gaussian c iky(1:nbfn) = iky(i) = i*(i-1)/2 to speed up fock build c icut1 = no. of successful ij 2-e screening tests c icut2 = no. of successful ijkl 2-e screening tests c icut3 = no. of 2-e integrals computed c parameter (natom =16, nbfn =240, nocc =32, mxiter = 30) parameter (nnbfn = nbfn*(nbfn+1)/2, pi = 3.141592653589793d0) parameter (tol= 0.5d-3) parameter (tol2e=1.0d-6) c common /cscf/ $ enrep, q(natom), ax(natom), ay(natom), az(natom), $ x(nbfn), y(nbfn), z(nbfn), expnt(nbfn), rnorm(nbfn), $ iky(nbfn), icut1, icut2, icut3 c ga-5-3/tcgmsg/examples/Makefile.proto0000640005473000001440000001706412115161655016513 0ustar d3n000users TOPDIR = TOP_LEVEL_DIRECTORY LIBDIR = $(TOPDIR)/ipcv4.0 TCGMSG = $(LIBDIR)/libtcgmsg.a INSTALL = echo "$@" is built IF CRAY #CRAY ... note that ranf is much faster than dran48 being used FC = cf77 CC = cc #older UNICOS # LIBS = -lbsd -lnet -lrpc LIBS = FFLAGS = -Zv -Wf"-dp" CFLAGS = -I$(LIBDIR) -DCRAY SCFBLAS = scfblas.o ENDIF CRAY IF SGI FC = f77 FFLAGS = -O2 CC = cc CFLAGS = -O -I$(LIBDIR) -I/usr/include/bsd -I/usr/include/sun -DSGI LIBS = -lmalloc -lbsd -lrpcsvc -lsun SCFBLAS = scfblas.o ENDIF SGI IF SGITFP #SGI IRIX ... note that need -lmalloc ... default break in Stress FC = f77 FFLAGS = -O2 -d8 -i8 CC = cc DEFINES = -DSGI -DSGITFP CFLAGS = -O $(DEFINES) LIBS = -lmalloc -lbsd -lrpcsvc SCFBLAS = scfblas.o ENDIF SGI IF KSR FC = f77 FFLAGS = -para -g -r8 CC = cc CFLAGS = -para -g -I$(LIBDIR) LIBS = -lrpc SCFBLAS = scfblas.o ENDIF KSR IF APOLLO #APOLLO GN10000 ... Apollo PRISM Domain/OS FC = f77 FFLAGS = -O CC = cc CFLAGS = -O -DAPOLLO -DCONVEX -I$(LIBDIR) \ -A nansi -A sys,bsd4.3 -A run,bsd4.3 LIBS = SCFBLAS = scfblas.o ENDIF IF CONVEX FC = fc FFLAGS = -O2 CC = cc CFLAGS = -O -DCONVEX -I$(LIBDIR) LIBS = SCFBLAS = ENDIF CONVEX IF HPUX FC = f77 CC = cc LIBS = FFLAGS = -O +ppu CFLAGS = -O -DHPUX -DEXTNAME -DPLOT -I$(LIBDIR) SCFBLAS = scfblas.o ENDIF HPUX IF HPUXNOEXT FC = f77 CC = cc LIBS = FFLAGS = -O CFLAGS = -O -DHPUX -DPLOT -I$(LIBDIR) SCFBLAS = scfblas.o ENDIF HPUXNOEXT IF SUN FC = f77 CC = cc LIBS = FFLAGS = -O3 -dalign -Nl99 CFLAGS = -O -dalign -DSUN -DPLOT -I$(LIBDIR) SCFBLAS = scfblas.o ENDIF SUN IF DEC FC = f77 CC = cc LIBS = FFLAGS = -O2 CFLAGS = -O -DULTRIX -DPLOT -I$(LIBDIR) SCFBLAS = scfblas.o ENDIF DEC IF DECOSF FC = f77 CC = cc LIBS = FFLAGS = -O -integer_size 64 -align dcommons -align records CFLAGS = -O -DDECOSF -I$(LIBDIR) SCFBLAS = scfblas.o ENDIF DEC IF LINUX FC = f77 CC = cc LIBS = -lf2c -lipc FFLAGS = -O CFLAGS = -O -I$(LIBDIR) SCFBLAS = scfblas.o ENDIF LINUX IF IPSC DELTA PARAGON AS = as860 FC = if77 CC = icc LIBS = -node -lkmath IF DELTA DEFINES = -DIPSC -DDELTA -DPLOT INSTALL = rcp "$@" delta1: & CFLAGS = -i860 -O $(DEFINES) -I$(LIBDIR) -Knoieee FFLAGS = -O2 -i860 -Knoieee ELSEIF PARAGON DEFINES = -DIPSC -DPARAGON -DPLOT INSTALL = echo "$@" is built CFLAGS = -nx -g -Knoieee $(DEFINES) FFLAGS = -nx -O2 -Knoieee ELSE DEFINES = -DIPSC -DPLOT INSTALL = rcp "$@" micron: & CFLAGS = -i860 -O $(DEFINES) -I$(LIBDIR) -Knoieee FFLAGS = -O2 -i860 -Knoieee ENDIF SCFBLAS = ENDIF IPSC DELTA PARAGON IF NEXT FC = f77 CC = cc FFLAGS = -g -f -N9 CFLAGS = -g -DNEXT -DEXTNAME -DPLOT -I$(LIBDIR) LIBS = SCFBLAS = scfblas.o ENDIF NEXT IF NEXTNOEXT FC = f77 CC = cc FFLAGS = -g -f CFLAGS = -g -DNEXT -DPLOT -I$(LIBDIR) LIBS = SCFBLAS = scfblas.o ENDIF NEXT IF IBM #IBM RISC 6000 ... AIX 3.1 ... -qEXTNAME # ... see the comments in the Makefile for the toolkit. FC = xlf LIBS = -lc FFLAGS = -O -g -qEXTNAME CFLAGS = -O -DPLOT -DAIX -DEXTNAME -I$(LIBDIR) SCFBLAS = scfblas.o ENDIF IBM IF IBMNOEXT #IBM RISC 6000 ... AIX 3.1 # ... see the comments in the Makefile for the toolkit. FC = xlf LIBS = -lblas -lc FFLAGS = -O -g CFLAGS = -O -DPLOT -DAIX -I$(LIBDIR) SCFBLAS = ENDIF IBMNOEXT IF ARDENT FC = fc CC = cc LIBS = FFLAGS = -43 -O2 CFLAGS = -O2 -43 -DARDENT -DPLOT -I$(LIBDIR) SCFBLAS = scfblas.o ENDIF ARDENT IF ALLIANT ALLIANTMPP FC = fortran CC = fxc IF ALLIANT LIBS = -lalgebra -lsignal -lcommon ELSE LIBS = -lalgebra -lsignal -lcommon -lsw ENDIF FFLAGS = -g -Ogv -AS -uniproc -OM CFLAGS = -Ogv -uniproc -DALLIANT -I$(LIBDIR) SCFBLAS = ENDIF ALLIANT ###################################### # Should not need to modify below here ###################################### .SUFFIXES: .SUFFIXES: .o .f .c .s .s.o: $(AS) $*.s .f.o: $(FC) $(FFLAGS) -c $*.f .c.o: $(CC) $(CFLAGS) -c $*.c all everything: scf15 scf30 scf60 md mc jacobi grid template.p extra: scf60lin scf120lin scf240lin clean: /bin/rm -f *.o *.p core event* /bin/rm -f scf15 scf30 scf60 scf60lin scf120lin scf240lin /bin/rm -f md mc jacobi grid realclean: clean /bin/rm -f Makefile fexit.f *~ *.trace *.V demo TAGS msgtypesf.h #*# msgtypesf.h: $(LIBDIR)/msgtypesf.h cp $(LIBDIR)/msgtypesf.h . ############ #SCF example ############ # Note rather messy use of same fortran source but different # include/block data files and copy in make rule. # This screws up normal simple dependency of object on include files # and makes targets scf15/30/60 etc. unable to be made in parallel. SOBJ = $(SCFBLAS) integ.o output.o timer.o fexit.o diagon.o scf15: cscf15.h blkdat15.f scf.f $(SOBJ) cp cscf15.h cscf.h $(FC) $(FFLAGS) -o $@ scf.f blkdat15.f $(SOBJ) $(TCGMSG) $(LIBS) $(INSTALL) scf30: cscf30.h blkdat30.f scf.f $(SOBJ) cp cscf30.h cscf.h $(FC) $(FFLAGS) -o $@ scf.f blkdat30.f $(SOBJ) $(TCGMSG) $(LIBS) $(INSTALL) scf60: cscf60.h blkdat60.f scf.f $(SOBJ) cp cscf60.h cscf.h $(FC) $(FFLAGS) -o $@ scf.f blkdat60.f $(SOBJ) $(TCGMSG) $(LIBS) $(INSTALL) scf60lin: cscf60lin.h blkdat60lin.f scf.f $(SOBJ) cp cscf60lin.h cscf.h $(FC) $(FFLAGS) -o $@ scf.f blkdat60lin.f $(SOBJ) $(TCGMSG) $(LIBS) $(INSTALL) scf120lin: cscf120lin.h blkdat120lin.f scf.f $(SOBJ) cp cscf120lin.h cscf.h $(FC) $(FFLAGS) -o $@ scf.f blkdat120lin.f $(SOBJ) $(TCGMSG) $(LIBS) $(INSTALL) scf240lin: cscf240lin.h blkdat240lin.f scf.f $(SOBJ) cp cscf240lin.h cscf.h $(FC) $(FFLAGS) -o $@ scf.f blkdat240lin.f $(SOBJ) $(TCGMSG) $(LIBS) $(INSTALL) $(SOBJ) scf15 scf30 scf60 scf60lin scf120lin scf240lin: msgtypesf.h ########### #MD example ########### md: md.o dscal.o timer.o fexit.o $(FC) $(FFLAGS) -o $@ md.o dscal.o timer.o fexit.o \ $(TCGMSG) $(LIBS) $(INSTALL) md.o: msgtypesf.h ########### #MC example ########### mc: mc.o timer.o fexit.o $(FC) $(FFLAGS) -o $@ mc.o timer.o fexit.o $(TCGMSG) $(LIBS) $(INSTALL) mc.o: msgtypesf.h ################ # Jacobi example ################ IF CRAY JOBJ = fexit.o timer.o getmem.o ELSEIF IBMNOEXT ALLIANT JOBJ = fexit.o timer.o getmem.o mxv_dgemv.o ELSEIF IPSC DELTA JOBJ = fexit.o timer.o getmem.o mxv_daxpy1.o daxpy1.o ELSE JOBJ = fexit.o timer.o getmem.o mxv_fortran.o ENDIF jacobi: jacobi.o $(JOBJ) $(FC) $(FFLAGS) -o $@ jacobi.o $(JOBJ) $(TCGMSG) $(LIBS) $(INSTALL) jacobi.o: msgtypesf.h ############# #Grid example ############# grid: grid.o $(CC) $(CFLAGS) -o $@ grid.o $(TCGMSG) -lm $(LIBS) $(INSTALL) grid.o: $(LIBDIR)/msgtypesc.h ########### #template.p ########### template.p: echo "# This template is piped thru sed to replace" > template.p echo "# PROGRAM with the name of the program." >> template.p echo "# Add other hosts and processes as desired." >> template.p IF CRAY NEXT NEXTNOEXT echo "$$LOGNAME `hostname` 1 `pwd`/PROGRAM /tmp" >> template.p echo "$$LOGNAME `hostname` 1 `pwd`/PROGRAM /tmp" >> template.p echo "$$LOGNAME `hostname` 1 `pwd`/PROGRAM /tmp" >> template.p echo "$$LOGNAME `hostname` 1 `pwd`/PROGRAM /tmp" >> template.p ELSEIF IPSC echo '0 $$ ' PROGRAM . >> template.p ELSE echo "`whoami` `hostname` 4 `pwd`/PROGRAM /tmp" >> template.p ENDIF ga-5-3/tcgmsg/examples/cscf60lin.h0000640005473000001440000000330112115161655015636 0ustar d3n000users/*$Id: cscf60lin.h,v 1.2 1995-02-02 23:24:04 d3g681 Exp $*/ c c include file defining common /cscf/ c c natom = no. of atoms (constant parameter) c nbfn = no. of basis functions (constant parameter) c nnbfn = nbfn*(nbfn+1)/2 (constant parameter) c nocc = no. of occupied orbitals (constant parameter) c mxiter = maximim no. of iterations(constant parameter) c tol = convergence criterion (constant parameter) c pi = a familiar constant (constant parameter) c tol2e = 2-e integral screening (constant parameter) c c the remainder is initialized in block data or in the c routine ininrm (rnorm and iky) c c enrep = nuclear repulsion energy c q(1:natom) = nuclear charge of atom c ax(1:natom) = x co-ordinate of atom c ay(1:natom) = y ... c az(1:natom) = z ... c x(1:nbfn) = x co-ordinate of basis function c y(1:nbfn) = y ... c z(1:nbfn) = z ... c expnt(1:nbfn)= exponent of gaussian c rnorm(1:nbfn)= normalization constant of gaussian c iky(1:nbfn) = iky(i) = i*(i-1)/2 to speed up fock build c icut1 = no. of successful ij 2-e screening tests c icut2 = no. of successful ijkl 2-e screening tests c icut3 = no. of 2-e integrals computed c parameter (natom = 4, nbfn = 60, nocc = 8, mxiter = 20) parameter (nnbfn = nbfn*(nbfn+1)/2, pi = 3.141592653589793d0) parameter (tol= 1.0d-4) parameter (tol2e=1.0d-6) c common /cscf/ $ enrep, q(natom), ax(natom), ay(natom), az(natom), $ x(nbfn), y(nbfn), z(nbfn), expnt(nbfn), rnorm(nbfn), $ iky(nbfn), icut1, icut2, icut3 c ga-5-3/tcgmsg/examples/cscf.h0000640005473000001440000000327412115161655014776 0ustar d3n000users/*$Id: cscf.h,v 1.3 1995-02-02 23:23:54 d3g681 Exp $*/ c c include file defining common /cscf/ c c natom = no. of atoms (constant parameter) c nbfn = no. of basis functions (constant parameter) c nnbfn = nbfn*(nbfn+1)/2 (constant parameter) c nocc = no. of occupied orbitals (constant parameter) c mxiter = maximim no. of iterations(constant parameter) c tol = convergence criterion (constant parameter) c pi = a familiar constant (constant parameter) c tol2e = 2-e integral screening (constant parameter) c c the remainder is initialized in block data or in the c routine ininrm (rnorm and iky) c c enrep = nuclear repulsion energy c q(1:natom) = nuclear charge of atom c ax(1:natom) = x co-ordinate of atom c ay(1:natom) = y ... c az(1:natom) = z ... c x(1:nbfn) = x co-ordinate of basis function c y(1:nbfn) = y ... c z(1:nbfn) = z ... c expnt(1:nbfn)= exponent of gaussian c rnorm(1:nbfn)= normalization constant of gaussian c iky(1:nbfn) = iky(i) = i*(i-1)/2 to speed up fock build c icut1 = no. of successful ij 2-e screening tests c icut2 = no. of successful ijkl 2-e screening tests c icut3 = no. of 2-e integrals computed c parameter (natom = 1, nbfn = 15, nocc = 2, mxiter = 20) parameter (nnbfn = nbfn*(nbfn+1)/2, pi = 3.141592653589793d0) parameter (tol= 1.0d-4) parameter (tol2e=1.0d-7) c common /cscf/ $ enrep, q(natom), ax(natom), ay(natom), az(natom), $ x(nbfn), y(nbfn), z(nbfn), expnt(nbfn), rnorm(nbfn), $ iky(nbfn), icut1, icut2, icut3 c ga-5-3/tcgmsg/examples/cscf15.h0000640005473000001440000000327612115161655015146 0ustar d3n000users/*$Id: cscf15.h,v 1.2 1995-02-02 23:23:56 d3g681 Exp $*/ c c include file defining common /cscf/ c c natom = no. of atoms (constant parameter) c nbfn = no. of basis functions (constant parameter) c nnbfn = nbfn*(nbfn+1)/2 (constant parameter) c nocc = no. of occupied orbitals (constant parameter) c mxiter = maximim no. of iterations(constant parameter) c tol = convergence criterion (constant parameter) c pi = a familiar constant (constant parameter) c tol2e = 2-e integral screening (constant parameter) c c the remainder is initialized in block data or in the c routine ininrm (rnorm and iky) c c enrep = nuclear repulsion energy c q(1:natom) = nuclear charge of atom c ax(1:natom) = x co-ordinate of atom c ay(1:natom) = y ... c az(1:natom) = z ... c x(1:nbfn) = x co-ordinate of basis function c y(1:nbfn) = y ... c z(1:nbfn) = z ... c expnt(1:nbfn)= exponent of gaussian c rnorm(1:nbfn)= normalization constant of gaussian c iky(1:nbfn) = iky(i) = i*(i-1)/2 to speed up fock build c icut1 = no. of successful ij 2-e screening tests c icut2 = no. of successful ijkl 2-e screening tests c icut3 = no. of 2-e integrals computed c parameter (natom = 1, nbfn = 15, nocc = 2, mxiter = 20) parameter (nnbfn = nbfn*(nbfn+1)/2, pi = 3.141592653589793d0) parameter (tol= 1.0d-4) parameter (tol2e=1.0d-7) c common /cscf/ $ enrep, q(natom), ax(natom), ay(natom), az(natom), $ x(nbfn), y(nbfn), z(nbfn), expnt(nbfn), rnorm(nbfn), $ iky(nbfn), icut1, icut2, icut3 c ga-5-3/tcgmsg/examples/cscf60.h0000640005473000001440000000327612115161655015146 0ustar d3n000users/*$Id: cscf60.h,v 1.2 1995-02-02 23:24:02 d3g681 Exp $*/ c c include file defining common /cscf/ c c natom = no. of atoms (constant parameter) c nbfn = no. of basis functions (constant parameter) c nnbfn = nbfn*(nbfn+1)/2 (constant parameter) c nocc = no. of occupied orbitals (constant parameter) c mxiter = maximim no. of iterations(constant parameter) c tol = convergence criterion (constant parameter) c pi = a familiar constant (constant parameter) c tol2e = 2-e integral screening (constant parameter) c c the remainder is initialized in block data or in the c routine ininrm (rnorm and iky) c c enrep = nuclear repulsion energy c q(1:natom) = nuclear charge of atom c ax(1:natom) = x co-ordinate of atom c ay(1:natom) = y ... c az(1:natom) = z ... c x(1:nbfn) = x co-ordinate of basis function c y(1:nbfn) = y ... c z(1:nbfn) = z ... c expnt(1:nbfn)= exponent of gaussian c rnorm(1:nbfn)= normalization constant of gaussian c iky(1:nbfn) = iky(i) = i*(i-1)/2 to speed up fock build c icut1 = no. of successful ij 2-e screening tests c icut2 = no. of successful ijkl 2-e screening tests c icut3 = no. of 2-e integrals computed c parameter (natom = 4, nbfn = 60, nocc = 8, mxiter = 20) parameter (nnbfn = nbfn*(nbfn+1)/2, pi = 3.141592653589793d0) parameter (tol= 1.0d-4) parameter (tol2e=1.0d-6) c common /cscf/ $ enrep, q(natom), ax(natom), ay(natom), az(natom), $ x(nbfn), y(nbfn), z(nbfn), expnt(nbfn), rnorm(nbfn), $ iky(nbfn), icut1, icut2, icut3 c ga-5-3/tcgmsg/examples/ddot.f0000640005473000001440000000232712115161655015006 0ustar d3n000users double precision function ddot(n,dx,incx,dy,incy) c c forms the dot product of two vectors. c uses unrolled loops for increments equal to one. c jack dongarra, linpack, 3/11/78. c C$Id: ddot.f,v 1.2 1995-02-02 23:24:06 d3g681 Exp $ double precision dx(1),dy(1),dtemp integer i,incx,incy,ix,iy,m,mp1,n c ddot = 0.0d0 dtemp = 0.0d0 if(n.le.0)return if(incx.eq.1.and.incy.eq.1)go to 20 c c code for unequal increments or equal increments c not equal to 1 c ix = 1 iy = 1 if(incx.lt.0)ix = (-n+1)*incx + 1 if(incy.lt.0)iy = (-n+1)*incy + 1 do 10 i = 1,n dtemp = dtemp + dx(ix)*dy(iy) ix = ix + incx iy = iy + incy 10 continue ddot = dtemp return c c code for both increments equal to 1 c c c clean-up loop c 20 m = mod(n,5) if( m .eq. 0 ) go to 40 do 30 i = 1,m dtemp = dtemp + dx(i)*dy(i) 30 continue if( n .lt. 5 ) go to 60 40 mp1 = m + 1 do 50 i = mp1,n,5 dtemp = dtemp + dx(i)*dy(i) + dx(i + 1)*dy(i + 1) + * dx(i + 2)*dy(i + 2) + dx(i + 3)*dy(i + 3) + dx(i + 4)*dy(i + 4) 50 continue 60 ddot = dtemp return end ga-5-3/tcgmsg/examples/md.f0000640005473000001440000003670712115161655014465 0ustar d3n000usersc c md example program due to dieter heermann c restructured and pdf added by rjh december 1990 c c the message passing version distributes the computation c of the forces (order npart**2) over the processes, assuming c that each process has all of the co-ordinates. c A global add then gives each process all the information c needed to compute the next update. c None of the order npart work has been parallelized so that c will begin to dominate on many processors. c implicit double precision (a-h, o-z) c parameter (mm = 13, lenpdf = 256) c parameter (mm = 8, lenpdf = 256) c parameter (mm = 6, lenpdf = 256) C$Id: md.f,v 1.2 1995-02-02 23:24:18 d3g681 Exp $ parameter (mm = 4, lenpdf = 256) c parameter (mm = 3, lenpdf = 256) parameter (npart = 4*mm*mm*mm) parameter (maxint = npart*150) include 'msgtypesf.h' c dimension x(1:npart,1:3), vh(1:npart,1:3),f(1:npart,1:3), & pdf(1:lenpdf+1), times(8), inter(2,maxint) data times/8*0.0d0/ c c initalize message passing environment c call pbeginf me = nodeid() c c parameter definition (density, volume, temperature ...) c den = 0.83134d0 side = (dble(npart) / den)**0.3333333d0 tref = 0.722d0 rcoff = min(3.5d0, side/2.0d0) c islow = 1 to match the rather large original timestep islow = 4 h = 0.064d0 / islow irep = 50 istop = 400 iprint = 10 ineigh = 10 * (1 + islow/4) movemx = 800 delpdf = 0.5d0*side/lenpdf rdelp = 1.0d0 / delpdf c if (me.eq.0)write(6,1) npart,side,rcoff,tref,h,delpdf,irep,istop, & iprint,ineigh,movemx 1 format(' molecular dynamics simulation example program'/ & ' ---------------------------------------------'// & ' number of particles is ............ ',i6/ & ' side length of the box is ......... ',f13.6/ & ' cut off is ........................ ',f13.6/ & ' reduced temperature is ............ ',f13.6/ & ' basic time step is ................ ',f13.6/ & ' pdf sampling interval ............. ',f13.6/ & ' temperature scale interval ........ ',i6/ & ' stop scaling at move .............. ',i6/ & ' print interval .................... ',i6/ & ' update neighbor list every ........ ',i6, ' steps'/ & ' total no. of steps ................ ',i6) c call flush(6) c a = side / dble(mm) sideh = side * 0.5d0 hsq = h * h hsq2 = hsq * 0.5d0 npartm = npart - 1 rcoffs = rcoff * rcoff tscale = 16.0d0 / (1.0d0 * npart - 1.0d0) vaver = 1.13d0 * sqrt(tref / 24.0d0) ekinavg = 0.0d0 c c generate fcc lattice for atoms inside box c rjunk = timer() call fcc(x, npart, mm, a) times(1) = times(1) + timer() c c initialise velocites and forces (which are zero in fcc positions) c call mxwell(vh,3*npart,h,tref) call dfill(3*npart, 0.0d0, f, 1) times(2) = times(2) + timer() c c start of md. c if (me.eq.0) write(6,3) 3 format(//1x,' i ',' ke ',' pe ',' e ', & ' temp ',' pres ',' vel ',' rp'/ & 1x,' -----',' ----------',' ----------',' ----------', & ' --------',' --------',' --------',' ----') c call flush(6) c do 200 move = 1,movemx if (move.eq.1 .or. move.eq.(istop+1)) $ call dfill(lenpdf, 0.0d0, pdf, 1) c c move the particles and partially update velocities c call domove(3*npart,x,vh,f,side) times(3) = times(3) + timer() c c compute forces in the new positions and accumulate the pdf c virial and potential energy. Have to get the full forces c on each node, hence the dgop (global add). c if (mod(move-1,ineigh).eq.0) then call neigh(npart, x, side, rcoff, ninter, inter, maxint, $ pdf, rdelp, lenpdf) times(8) = times(8) + timer() endif call forces(npart, x, f, vir, epot, side, rcoff, ninter, inter) call dgop(1+MSGDBL, f, 3*npart, '+') times(4) = times(4) + timer() c c scale forces, complete update of velocites and compute k.e. c call mkekin(npart,f,vh,hsq2,hsq,ekin) ekinavg = ekinavg + ekin times(5) = times(5) + timer() c c average the velocity and temperature scale if desired c if ((move.le.istop) .and. (mod(move, irep).eq.0)) then call velavg(npart, vh, vaver, count, vel, h) sc = sqrt( tref / (tscale * ekinavg / irep) ) call dscal(3*npart, sc, vh, 1) ekinavg = 0.0d0 endif times(6) = times(6) + timer() c c printout information if desired ... have to do global c sum to get full potential energy and virial c if (mod(move, iprint) .eq. 0) then call velavg(npart, vh, vaver, count, vel, h) call dgop(2+MSGDBL, epot, 1, '+') call dgop(2+MSGDBL, vir, 1, '+') if (me.eq.0) $ call prnout(move, ekin, epot, tscale, vir, vel, count, $ npart, den) times(7) = times(7) + timer() endif c 200 continue c c print out the pdf at the end of the calculation c have first to get contribution from everyone with global add c call dgop(2+MSGDBL, pdf, lenpdf, '+') if (me.eq.0) $ call prnpdf(lenpdf, pdf, side, delpdf, npart, movemx-istop, $ ineigh) times(7) = times(7) + timer() if (me.eq.0) write(6,431) nnodes(),(times(i),i=1,8) 431 format(' nproc geom mxwell domove forces ekin velscl', & ' print neigh' & /1x,i6,8f8.2) c if (me.eq.0) call stats call pend call fexit end subroutine mxwell(vh,n3,h,tref) implicit double precision (a-h, o-z) dimension vh(1:n3) c c sample maxwell distribution at temperature tref c c alliant 3 iseed = 4711 ujunk = drand48(iseed) iseed = 0 npart = n3/3 iof1 = npart iof2 = npart*2 tscale = 16.0d0 / (1.0d0 * npart - 1.0d0) do 10 i = 1,n3,2 c c cray 2 c1 u1 = ranf() c u2 = ranf() c alliant 2 1 u1 = drand48(iseed) u2 = drand48(iseed) v1 = 2.0d0 * u1 - 1.0d0 v2 = 2.0d0 * u2 - 1.0d0 s = v1*v1 + v2*v2 if (s.ge.1.0) goto 1 c r = sqrt(-2.0d0*dlog(s)/s) vh(i) = v1 * r vh(i+1) = v2 * r 10 continue c ekin = 0.0d0 sp = 0.0d0 do 20 i = 1,npart sp = sp + vh(i) 20 continue sp = sp / npart do 21 i = 1,npart vh(i) = vh(i) - sp ekin = ekin + vh(i)*vh(i) 21 continue sp = 0.0d0 do 22 i = iof1 + 1,iof2 sp = sp + vh(i) 22 continue sp = sp / npart do 23 i = iof1 + 1,iof2 vh(i) = vh(i) - sp ekin = ekin + vh(i)*vh(i) 23 continue sp = 0.0d0 do 24 i = iof2 + 1,n3 sp = sp + vh(i) 24 continue sp = sp / npart do 25 i = iof2 + 1,n3 vh(i) = vh(i) - sp ekin = ekin + vh(i)*vh(i) 25 continue ts = tscale * ekin sc = h * sqrt(tref/ts) do 30 i = 1,n3 vh(i) = vh(i) * sc 30 continue c end subroutine domove(n3,x,vh,f,side) implicit double precision (a-h, o-z) dimension x(n3),vh(n3),f(n3) c c move particles c do 10 i = 1,n3 x(i) = x(i) + vh(i) + f(i) c periodic boundary conditions if (x(i).lt.0.0d0) x(i) = x(i) + side if (x(i).gt.side) x(i) = x(i) - side c partial velocity updates vh(i) = vh(i) + f(i) c initialise forces for next iteration f(i) = 0.0d0 10 continue c end subroutine mkekin(npart,f,vh,hsq2,hsq,ekin) implicit double precision (a-h, o-z) dimension f(1:npart,3),vh(1:npart,3) c c scale forces, update velocites and compute k.e. c sum = 0.0d0 do 10 ix = 1,3 do 20 i = 1,npart f(i,ix) = f(i,ix) * hsq2 vold = vh(i,ix) vh(i,ix) = vh(i,ix) + f(i,ix) sum = sum + vh(i,ix) * vh(i,ix) 20 continue 10 continue ekin = sum / hsq c end subroutine fcc(x, npart, mm, a) implicit double precision (a-h, o-z) dimension x(1:npart, 3) c c generate fcc lattice for atoms inside box c ijk = 0 do 10 lg = 0,1 do 11 i = 0,mm-1 do 12 j = 0,mm-1 do 13 k = 0,mm-1 ijk = ijk + 1 x(ijk,1) = i * a + lg * a * 0.5d0 x(ijk,2) = j * a + lg * a * 0.5d0 x(ijk,3) = k * a 13 continue 12 continue 11 continue 10 continue do 20 lg = 1,2 do 21 i = 0,mm-1 do 22 j = 0,mm-1 do 23 k = 0,mm-1 ijk = ijk + 1 x(ijk,1) = i * a + (2-lg) * a * 0.5d0 x(ijk,2) = j * a + (lg-1) * a * 0.5d0 x(ijk,3) = k * a + a * 0.5d0 23 continue 22 continue 21 continue 20 continue c end subroutine dfill(n,val,a,ia) implicit double precision (a-h, o-z) dimension a(*) c c initialise double precision array to scalar value c do 10 i = 1,(n-1)*ia+1,ia a(i) = val 10 continue c end subroutine prnout(move, ekin, epot, tscale, vir, vel, count, $ npart, den) implicit double precision (a-h, o-z) c c printout interesting (?) information at current timestep c ek = 24.0d0 * ekin epot = 4.0d0 * epot etot = ek + epot temp = tscale * ekin pres = den * 16.0d0 * (ekin - vir) / npart vel = vel / npart rp = (count / dble(npart)) * 100.0d0 write(6,2) move,ek,epot,etot,temp,pres,vel,rp 2 format(1x,i6,3f12.4,f10.4,f10.4,f10.4,f6.1) c call flush(6) c end subroutine velavg(npart, vh, vaver, count, vel, h) implicit double precision (a-h, o-z) dimension vh(npart, 3) c c compute average velocity c vaverh = vaver*h vel = 0.0d0 count = 0.0d0 do 10 i = 1,npart sq = sqrt(vh(i,1)**2 + vh(i,2)**2 + vh(i,3)**2) if (sq.gt.vaverh) count = count + 1.0d0 vel = vel + sq 10 continue vel = vel / h c end subroutine prnpdf(lenpdf, pdf, side, delpdf, npart, nmove, ineigh) implicit double precision (a-h, o-z) dimension pdf(lenpdf) c c final scaling and printout of the pdf c write(6,1) 1 format(/' pair distribution function written to file pdf.dat'/) open(1, file='pdf.dat', form='formatted', status='unknown', $ err=999) c coord = 0.0d0 volfac = side*side*side / (4.0d0*delpdf*delpdf*delpdf*3.141593d0) facnn = 2.0d0 / dble(npart*nmove/ineigh) facn = 1.0d0 / dble(npart) do 10 i = 1,lenpdf ri = dble(i) grfac = volfac / (ri*ri) func = pdf(i) * facnn coord = coord + func pdf(i) = func * grfac * facn write(1,2) dble(i)*delpdf,pdf(i),coord 10 continue 2 format(1x,f7.3,f13.6,4x,f9.2) close(1) return c 999 write(6,*) ' error opening pdf.dat' call parerr(999) c end subroutine neigh(npart, x, side, rcoff, ninter, inter, maxint, $ pdf, rdelp, lenpdf) implicit double precision (a-h, o-z) dimension x(npart, 3), inter(2,maxint), pdf(lenpdf) c c Form my part of the neighbour list and also compute the pair c distribution function. c c npart = no. of particles c x(,) = coords c side = side of box c rcoff = cutoff for force c ninter= returns no. of interactions c inter(,) = returns interactions c maxint = size of inter c me = nodeid() nproc = nnodes() c sideh = 0.5d0*side rcoffs = (rcoff*1.2d0)**2 ninter = 0 c c Get better work distribution by having the same c processor handle particles (i) and (npart-i) c Note that assume that npart is even. c do 270 ii = me+1, npart/2, nproc do 275 icase = 1, 2 if (icase .eq. 1) then i = ii else i = npart - ii endif xi = x(i,1) yi = x(i,2) zi = x(i,3) do 280 j = i+1,npart ij = ij + 1 xx = xi - x(j,1) yy = yi - x(j,2) zz = zi - x(j,3) if (xx .lt. -sideh) xx = xx + side if (xx .gt. sideh) xx = xx - side if (yy .lt. -sideh) yy = yy + side if (yy .gt. sideh) yy = yy - side if (zz .lt. -sideh) zz = zz + side if (zz .gt. sideh) zz = zz - side rd = xx*xx + yy*yy + zz*zz ipdf = min(sqrt(rd),sideh) * rdelp + 1 pdf(ipdf) = pdf(ipdf) + 1.0d0 if (rd .le. rcoffs) then ninter = ninter + 1 if (ninter.gt.maxint) then write(6,*) ' too many interactions ', ninter call parerr(1) endif inter(1,ninter) = i inter(2,ninter) = j endif 280 continue 275 continue 270 continue c c$$$ ij = ninter c$$$ call igop(99, ij, 1, '+') c$$$ if (me .eq. 0) then c$$$ write(6,*) ' No. of interactions per particle = ', c$$$ $ ij/npart c$$$ endif c end subroutine forces(npart, x, f, vir, epot, side, rcoff, $ ninter, inter) implicit double precision (a-h, o-z) logical oshift parameter (oshift = .true.) dimension x(npart, 3), f(npart, 3), inter(2, ninter) c c compute forces driven by the neighbour list c vir = 0.0d0 epot = 0.0d0 sideh = 0.5d0*side rcoffs = rcoff*rcoff c c for shifted potential ... set oshift true to enable c if (oshift) then rc6 = 1.0d0 / rcoff**6 rc12 = 1.0d0 / rcoff**12 ecut = rc12 - rc6 fcut = (rc12 - 0.5d0*rc6)/rcoff efcut = 12.0d0 * fcut endif c do 10 ij = 1, ninter i = inter(1,ij) j = inter(2,ij) xx = x(i,1) - x(j,1) yy = x(i,2) - x(j,2) zz = x(i,3) - x(j,3) if (xx .lt. -sideh) xx = xx + side if (xx .gt. sideh) xx = xx - side if (yy .lt. -sideh) yy = yy + side if (yy .gt. sideh) yy = yy - side if (zz .lt. -sideh) zz = zz + side if (zz .gt. sideh) zz = zz - side rd = xx*xx + yy*yy + zz*zz if (rd .le. rcoffs) then rrd = 1.0d0/rd rrd2 = rrd*rrd rrd3 = rrd2*rrd rrd4 = rrd2*rrd2 rrd6 = rrd2*rrd4 rrd7 = rrd6*rrd epot = epot + (rrd6 - rrd3) r148 = rrd7 - 0.5d0*rrd4 if (oshift) then r = sqrt(rd) epot = epot - ecut + efcut*(r-rcoff) r148 = r148 - fcut / r endif vir = vir - rd*r148 forcex = xx * r148 f(i,1) = f(i,1) + forcex f(j,1) = f(j,1) - forcex forcey = yy * r148 f(i,2) = f(i,2) + forcey f(j,2) = f(j,2) - forcey forcez = zz * r148 f(i,3) = f(i,3) + forcez f(j,3) = f(j,3) - forcez endif 10 continue c end ga-5-3/tcgmsg/examples/blkdat15.f0000640005473000001440000000140012115161655015452 0ustar d3n000users block data C$Id: blkdat15.f,v 1.2 1995-02-02 23:23:47 d3g681 Exp $ implicit double precision (a-h, o-z) include 'cscf.h' c c initalize data in common ... clumsy but avoids code to read in data c c one be atom with 15 orbitals c c have 9s functions on each center and simulate p's by having c s function at +- 1 in each of x, y, z c data ax /0.0d0/, ay /0.0d0/, az /0.0d0/, q /4.0d0/, enrep/0.0d0/ data x /9*0.0d0, 1.6d0, -1.6d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0/ data y /9*0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0, 0.0d0, 0.0d0/ data z /9*0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, 1.6d0, -1.6d0/ data expnt /1741.0d0, 262.1d0, 60.33d0, 17.62d0, 5.933d0, 2.185d0, $ 0.859, 0.1806d0, 0.05835d0, 6*0.3d0/ c end ga-5-3/tcgmsg/examples/daxpy.f0000640005473000001440000000227212115161655015200 0ustar d3n000users subroutine daxpy(n,da,dx,incx,dy,incy) c c constant times a vector plus a vector. c uses unrolled loops for increments equal to one. c jack dongarra, linpack, 3/11/78. c C$Id: daxpy.f,v 1.2 1995-02-02 23:24:05 d3g681 Exp $ double precision dx(1),dy(1),da integer i,incx,incy,ix,iy,m,mp1,n c if(n.le.0)return if (da .eq. 0.0d0) return if(incx.eq.1.and.incy.eq.1)go to 20 c c code for unequal increments or equal increments c not equal to 1 c ix = 1 iy = 1 if(incx.lt.0)ix = (-n+1)*incx + 1 if(incy.lt.0)iy = (-n+1)*incy + 1 do 10 i = 1,n dy(iy) = dy(iy) + da*dx(ix) ix = ix + incx iy = iy + incy 10 continue return c c code for both increments equal to 1 c c c clean-up loop c 20 m = mod(n,4) if( m .eq. 0 ) go to 40 do 30 i = 1,m dy(i) = dy(i) + da*dx(i) 30 continue if( n .lt. 4 ) return 40 mp1 = m + 1 do 50 i = mp1,n,4 dy(i) = dy(i) + da*dx(i) dy(i + 1) = dy(i + 1) + da*dx(i + 1) dy(i + 2) = dy(i + 2) + da*dx(i + 2) dy(i + 3) = dy(i + 3) + da*dx(i + 3) 50 continue return end ga-5-3/tcgmsg/examples/grid.c0000640005473000001440000005455712115161655015012 0ustar d3n000users#if HAVE_CONFIG_H # include "config.h" #endif /*$Id: grid.c,v 1.2 1995-02-02 23:24:11 d3g681 Exp $*/ #include #include #ifdef PLOT #include #include FILE *plot_file; #define PLOT_VALUE 1 #define PLOT_ERROR 2 #define PLOT_RESIDUAL 3 static long plot_type = 0; /* 0 means no plot */ #endif #include "sndrcv.h" #if defined(DELTA) || defined(IPSC) #define htonl(a) (a) #endif #if !defined(AIX) && !defined(DECOSF) extern char *malloc(); #endif extern void exit(); #define TCG_MAX(a,b) (((a)>(b)) ? (a) : (b)) #define TCG_MIN(a,b) (((a)<(b)) ? (a) : (b)) #define TCG_ABS(a) (((a)>=0 ) ? (a) : -(a)) #define LO -3.1415926535 /* Phsyical dimensions */ #define HI 3.1415926535 double scale; /* Physical mesh grain */ long P, ncol_P, nrow_P; /* P = No. of processes = ncol_P * nrow_P */ long my_col_P, my_row_P; /* Co-ords of this proc. in grid of processes*/ double *buffer; /* Buffer used for exchanging rows */ long north, south, east, west; /* No. of process in that direction on process grid or -1 if no-one there */ long col_low = 0; /* Grid co-ords of top left corner */ long row_low = 0; /* Mapping from GLOBAL grid index to physical coordinates */ #define MAPCOL(I) (scale*((double) (I+col_low)) + LO) #define MAPROW(J) (scale*((double) (J+row_low)) + LO) long cs_exchange = 0; /* Timing information */ long cs_global = 0; long cs_interpolate = 0; long cs_plot = 0; long cs_total = 0; /* void ZeroGrid(grid, ncols, nrows) double **grid; long ncols, nrows; { long i,j; for (i=0; i<=ncols; i++) for (j=0; j<=nrows; j++) grid[i][j] = 0.0; } */ double Solution(x,y) double x,y; /* Model potential that defines solution and boundary conditions. This particular choice makes the discretization error quite apparent. */ { /* return cos(x)*exp(-y) + 0.1*sin(2.*x)*exp(-2.*y) + 0.1*cos(3.*x)*exp(-3.*y); */ return 0.5 * (cos(x)*exp(-y) + cos(y)*exp(-x) + 0.1*(sin(2.*x)*exp(-2.*y) + sin(2.*y)*exp(-2.*x)) + 0.1*(cos(3.*x)*exp(-3.*y) + cos(3.*y)*exp(-3.*x))); } double GridError(grid, ncols, nrows, ngrid) long ncols, nrows, ngrid; double **grid; /* Compute mean absolute error at grid points relative to the analytic solution ... error is due to either lack of convergence or discretization error. */ { long i,j, type=9, length=1; long start; double error = 0.0; for (i=1; i= 0) { SND_(&type1, (char *) grid[1], &bnrows, &west, &synch); RCV_(&type2, (char *) grid[0], &bnrows, &lenmes, &west, &nodefrom, &synch); } if (east >= 0) { SND_(&type3, (char *) grid[ncols-1], &bnrows, &east, &synch); RCV_(&type4, (char *) grid[ncols], &bnrows, &lenmes, &east, &nodefrom, &synch); } } else { if (east >= 0) { RCV_(&type1, (char *) grid[ncols], &bnrows, &lenmes, &east, &nodefrom, &synch); SND_(&type2, (char *) grid[ncols-1], &bnrows, &east, &synch); } if (west >= 0) { RCV_(&type3, (char *) grid[0], &bnrows, &lenmes, &west, &nodefrom, &synch); SND_(&type4, (char *) grid[1], &bnrows, &west, &synch); } } if (my_row_P%2) { if (north >= 0) { GATHER(1); SND_(&type5, (char *) buffer, &bncols, &north, &synch); RCV_(&type6, (char *) buffer, &bncols, &lenmes, &north, &nodefrom, &synch); SCATTER(0); } if (south >= 0) { GATHER(nrows-1); SND_(&type7, (char *) buffer, &bncols, &south, &synch); RCV_(&type8, (char *) buffer, &bncols, &lenmes, &south, &nodefrom, &synch); SCATTER(nrows); } } else { if (south >= 0) { RCV_(&type5, (char *) buffer, &bncols, &lenmes, &south, &nodefrom, &synch); SCATTER(nrows); GATHER(nrows-1); SND_(&type6, (char *) buffer, &bncols, &south, &synch); } if (north >= 0) { RCV_(&type7, (char *) buffer, &bncols, &lenmes, &north, &nodefrom, &synch); SCATTER(0); GATHER(1); SND_(&type8, (char *) buffer, &bncols, &north, &synch); } } cs_exchange += MTIME_() - start; } #ifdef PLOT void ClosePlotFile() { if (!plot_type) return; if (NODEID_() == 0) (void) fclose(plot_file); } void OpenPlotFile(maxgrid) long maxgrid; { if (!plot_type) return; if (NODEID_()) return; /* Only node 0 needs to do this */ if (!(plot_file = fopen("plot","w+"))) Error("OpenPlotFile: failed to open plot file", (long) -1); maxgrid = htonl((long) maxgrid); /* For portability */ if (fwrite((char *) &maxgrid, sizeof(int), 1, plot_file) != 1) Error("OpenPlotFile: failed to write maxgrid", (long) -1); (void) fflush(plot_file); } void InsertPlot(plot_full, ngrid, plot_grid, nrows, ncols, col_low, row_low) unsigned char *plot_full, *plot_grid; long ngrid, nrows, ncols, col_low, row_low; { long i, j; long i_lo = (col_low == 0) ? 0 : 1; long j_lo = (row_low == 0) ? 0 : 1; unsigned char *temp; /* Dink around with i_lo, j_lo so that the interior edges in the parallel case are not overwritten with incorrect values */ if (i_lo) plot_grid += nrows; for (i=i_lo; i update red then update black using new reds (gauss-seidel red-black w-relaxation). Return the mean abs. error (value of the laplacian) on the old grid. */ { double residual = 0.0; double omega = 0.94; /* Over relaxation parameter */ long i,j, type=10, length=1, jlo; double *gg, *ggm, *ggp; Exchange(grid, ncols, nrows); /* Update red */ for (i=1; i=0) && (i1<=new_ncols) && (j1>=0) && (j1<=new_nrows) ) new_grid[i1][j1] = old_grid[i][j]; } for (i=1; i<=old_ncols; i++) for (j=1; j<=old_nrows; j++) { i2 = 2*i-1+col_shift; j2 = 2*j-1+row_shift; if ( (i2>=0) && (i2<=new_ncols) && (j2>=0) && (j2<=new_nrows) ) new_grid[i2][j2] = 0.25 * (old_grid[i ][j ] + old_grid[i-1][j-1] + old_grid[i-1][j ] + old_grid[i ][j-1]); } BoundaryConditions(new_grid, new_ncols, new_nrows); Exchange(new_grid, new_ncols, new_nrows); for (i=1; i 0) ? NODEID_()-1 : -1; south = (my_row_P < (nrow_P-1)) ? NODEID_()+1 : -1; east = (my_col_P < (ncol_P-1)) ? NODEID_()+nrow_P : -1; west = (my_col_P > 0) ? NODEID_()-nrow_P : -1; ParseArguments(argc, argv, &maxgrid, &niter, &nprint, &nlevel, &thresh); ngrid1 = TCG_MAX(ncol_P,maxgrid>>(nlevel-1)); ngrid1 = TCG_MAX(nrow_P,ngrid1); /* Size of first grid */ maxgrid = ngrid1<<(nlevel-1); /* Actual size of final grid */ if (!(buffer = (double *) malloc((unsigned) (sizeof(double)*(maxgrid+1))))) Error("failed to allocate comms buffer", (long) (maxgrid+1)); #ifdef PLOT OpenPlotFile(maxgrid); #endif /* Loop from coarse to fine grids */ for (level=0; level sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, # 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless `enable' is passed literally. # For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009, # 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------------------- # Adds support for distributing Python modules and packages. To # install modules, copy them to $(pythondir), using the python_PYTHON # automake variable. To install a package with the same name as the # automake package, install to $(pkgpythondir), or use the # pkgpython_PYTHON automake variable. # # The variables $(pyexecdir) and $(pkgpyexecdir) are provided as # locations to install python extension modules (shared libraries). # Another macro is required to find the appropriate flags to compile # extension modules. # # If your package is configured with a different prefix to python, # users will have to add the install directory to the PYTHONPATH # environment variable, or create a .pth file (see the python # documentation for details). # # If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will # cause an error if the version of python installed on the system # doesn't meet the requirement. MINIMUM-VERSION should consist of # numbers and dots only. AC_DEFUN([AM_PATH_PYTHON], [ dnl Find a Python interpreter. Python versions prior to 2.0 are not dnl supported. (2.0 was released on October 16, 2000). m4_define_default([_AM_PYTHON_INTERPRETER_LIST], [python python2 python3 python3.2 python3.1 python3.0 python2.7 dnl python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0]) AC_ARG_VAR([PYTHON], [the Python interpreter]) m4_if([$1],[],[ dnl No version check is needed. # Find any Python interpreter. if test -z "$PYTHON"; then AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) fi am_display_PYTHON=python ], [ dnl A version check is needed. if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. AC_MSG_CHECKING([whether $PYTHON version >= $1]) AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], [AC_MSG_RESULT(yes)], [AC_MSG_ERROR(too old)]) am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. AC_CACHE_CHECK([for a Python interpreter with version >= $1], [am_cv_pathless_PYTHON],[ for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do test "$am_cv_pathless_PYTHON" = none && break AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) done]) # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. if test "$am_cv_pathless_PYTHON" = none; then PYTHON=: else AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) fi am_display_PYTHON=$am_cv_pathless_PYTHON fi ]) if test "$PYTHON" = :; then dnl Run any user-specified action, or abort. m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) else dnl Query Python for its version number. Getting [:3] seems to be dnl the best way to do this; it's what "site.py" does in the standard dnl library. AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) dnl Use the values of $prefix and $exec_prefix for the corresponding dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made dnl distinct variables so they can be overridden if need be. However, dnl general consensus is that you shouldn't need this ability. AC_SUBST([PYTHON_PREFIX], ['${prefix}']) AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) dnl At times (like when building shared libraries) you may want dnl to know which OS platform Python thinks this is. AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) dnl Set up 4 directories: dnl pythondir -- where to install python scripts. This is the dnl site-packages directory, not the python standard library dnl directory like in previous automake betas. This behavior dnl is more consistent with lispdir.m4 for example. dnl Query distutils for this directory. AC_CACHE_CHECK([for $am_display_PYTHON script directory], [am_cv_python_pythondir], [if test "x$prefix" = xNONE then am_py_prefix=$ac_default_prefix else am_py_prefix=$prefix fi am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null` case $am_cv_python_pythondir in $am_py_prefix*) am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` ;; *) case $am_py_prefix in /usr|/System*) ;; *) am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac ]) AC_SUBST([pythondir], [$am_cv_python_pythondir]) dnl pkgpythondir -- $PACKAGE directory under pythondir. Was dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is dnl more consistent with the rest of automake. AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) dnl pyexecdir -- directory for installing python extension modules dnl (shared libraries) dnl Query distutils for this directory. AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], [am_cv_python_pyexecdir], [if test "x$exec_prefix" = xNONE then am_py_exec_prefix=$am_py_prefix else am_py_exec_prefix=$exec_prefix fi am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null` case $am_cv_python_pyexecdir in $am_py_exec_prefix*) am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` ;; *) case $am_py_exec_prefix in /usr|/System*) ;; *) am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac ]) AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) dnl Run any user-specified action. $2 fi ]) # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # --------------------------------------------------------------------------- # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. # Run ACTION-IF-FALSE otherwise. # This test uses sys.hexversion instead of the string equivalent (first # word of sys.version), in order to cope with versions such as 2.2c1. # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). AC_DEFUN([AM_PYTHON_CHECK_VERSION], [prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] sys.exit(sys.hexversion < minverhex)" AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2009, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few `make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using `$V' instead of `$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/armci_setup.m4]) m4_include([m4/ax_sys_weak_alias.m4]) m4_include([m4/ga_ar.m4]) m4_include([m4/ga_arg_parse.m4]) m4_include([m4/ga_armci_network.m4]) m4_include([m4/ga_as.m4]) m4_include([m4/ga_blas.m4]) m4_include([m4/ga_c_match_types.m4]) m4_include([m4/ga_c_opt.m4]) m4_include([m4/ga_check_func.m4]) m4_include([m4/ga_check_header.m4]) m4_include([m4/ga_check_libplot.m4]) m4_include([m4/ga_compiler_vendor.m4]) m4_include([m4/ga_cross_compiling.m4]) m4_include([m4/ga_cxx.m4]) m4_include([m4/ga_cxx_namespaces.m4]) m4_include([m4/ga_cxx_opt.m4]) m4_include([m4/ga_enable_checkpoint.m4]) m4_include([m4/ga_enable_opt.m4]) m4_include([m4/ga_enable_peigs.m4]) m4_include([m4/ga_enable_profile.m4]) m4_include([m4/ga_enable_trace.m4]) m4_include([m4/ga_f2c_cmdargs.m4]) m4_include([m4/ga_f2c_match_types.m4]) m4_include([m4/ga_f2c_nomain.m4]) m4_include([m4/ga_f2c_string.m4]) m4_include([m4/ga_f77_check_sizeof.m4]) m4_include([m4/ga_f77_cpp_symbols.m4]) m4_include([m4/ga_f77_disable.m4]) m4_include([m4/ga_f77_fixed.m4]) m4_include([m4/ga_f77_flush.m4]) m4_include([m4/ga_f77_integer_size.m4]) m4_include([m4/ga_f77_ld_override.m4]) m4_include([m4/ga_f77_library_ldflags.m4]) m4_include([m4/ga_f77_mismatch_type.m4]) m4_include([m4/ga_f77_opt.m4]) m4_include([m4/ga_f77_underscore.m4]) m4_include([m4/ga_function.m4]) m4_include([m4/ga_lapack.m4]) m4_include([m4/ga_mpi_test_disable.m4]) m4_include([m4/ga_mpi_unwrap.m4]) m4_include([m4/ga_mpicc.m4]) m4_include([m4/ga_mpicc_test.m4]) m4_include([m4/ga_mpicxx.m4]) m4_include([m4/ga_mpicxx_test.m4]) m4_include([m4/ga_mpif77.m4]) m4_include([m4/ga_mpif77_test.m4]) m4_include([m4/ga_msg_comms.m4]) m4_include([m4/ga_progname.m4]) m4_include([m4/ga_scalapack.m4]) m4_include([m4/ga_suppress_msg.m4]) m4_include([m4/ga_sys_weak_alias.m4]) m4_include([m4/ga_target.m4]) m4_include([m4/ga_thread_safe.m4]) m4_include([m4/ga_union_semun.m4]) m4_include([m4/ga_warn_flags.m4]) m4_include([m4/ga_with_help.m4]) m4_include([m4/libtool.m4]) m4_include([m4/lt_obsolete.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/ma_enable_armci_mem.m4]) m4_include([m4/ma_long_double.m4]) m4_include([m4/ma_stats.m4]) m4_include([m4/ma_verify.m4]) ga-5-3/m4/0000750005473000001440000000000012275260520011114 5ustar d3n000usersga-5-3/m4/ax_sys_weak_alias.m40000640005473000001440000002724711424055231015055 0ustar d3n000users# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_sys_weak_alias.html # =========================================================================== # # SYNOPSIS # # AX_SYS_WEAK_ALIAS # # DESCRIPTION # # Determines whether weak aliases are supported on the system, and if so, # what scheme is used to declare them. Also checks to see if aliases can # cross object file boundaries, as some systems don't permit them to. # # Most systems permit something called a "weak alias" or "weak symbol." # These aliases permit a library to provide a stub form of a routine # defined in another library, thus allowing the first library to operate # even if the other library is not linked. This macro will check for # support of weak aliases, figure out what schemes are available, and # determine some characteristics of the weak alias support -- primarily, # whether a weak alias declared in one object file may be referenced from # another object file. # # There are four known schemes of declaring weak symbols; each scheme is # checked in turn, and the first one found is prefered. Note that only one # of the mentioned preprocessor macros will be defined! # # 1. Function attributes # # This scheme was first introduced by the GNU C compiler, and attaches # attributes to particular functions. It is among the easiest to use, and # so is the first one checked. If this scheme is detected, the # preprocessor macro HAVE_SYS_WEAK_ALIAS_ATTRIBUTE will be defined to 1. # This scheme is used as in the following code fragment: # # void __weakf(int c) # { # /* Function definition... */ # } # # void weakf(int c) __attribute__((weak, alias("__weakf"))); # # 2. #pragma weak # # This scheme is in use by many compilers other than the GNU C compiler. # It is also particularly easy to use, and fairly portable -- well, as # portable as these things get. If this scheme is detected first, the # preprocessor macro HAVE_SYS_WEAK_ALIAS_PRAGMA will be defined to 1. This # scheme is used as in the following code fragment: # # extern void weakf(int c); # #pragma weak weakf = __weakf # void __weakf(int c) # { # /* Function definition... */ # } # # 3. #pragma _HP_SECONDARY_DEF # # This scheme appears to be in use by the HP compiler. As it is rather # specialized, this is one of the last schemes checked. If it is the first # one detected, the preprocessor macro HAVE_SYS_WEAK_ALIAS_HPSECONDARY # will be defined to 1. This scheme is used as in the following code # fragment: # # extern void weakf(int c); # #pragma _HP_SECONDARY_DEF __weakf weakf # void __weakf(int c) # { # /* Function definition... */ # } # # 4. #pragma _CRI duplicate # # This scheme appears to be in use by the Cray compiler. As it is rather # specialized, it too is one of the last schemes checked. If it is the # first one detected, the preprocessor macro # HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE will be defined to 1. This scheme is # used as in the following code fragment: # # extern void weakf(int c); # #pragma _CRI duplicate weakf as __weakf # void __weakf(int c) # { # /* Function definition... */ # } # # In addition to the preprocessor macros listed above, if any scheme is # found, the preprocessor macro HAVE_SYS_WEAK_ALIAS will also be defined # to 1. # # Once a weak aliasing scheme has been found, a check will be performed to # see if weak aliases are honored across object file boundaries. If they # are, the HAVE_SYS_WEAK_ALIAS_CROSSFILE preprocessor macro is defined to # 1. # # This Autoconf macro also makes two substitutions. The first, WEAK_ALIAS, # contains the name of the scheme found (one of "attribute", "pragma", # "hpsecondary", or "criduplicate"), or "no" if no weak aliasing scheme # was found. The second, WEAK_ALIAS_CROSSFILE, is set to "yes" or "no" # depending on whether or not weak aliases may cross object file # boundaries. # # LICENSE # # Copyright (c) 2008 Kevin L. Mitchell # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 6 AU_ALIAS([KLM_SYS_WEAK_ALIAS], [AX_SYS_WEAK_ALIAS]) AC_DEFUN([AX_SYS_WEAK_ALIAS], [ # starting point: no aliasing scheme yet... ax_sys_weak_alias=no # Figure out what kind of aliasing may be supported... _AX_SYS_WEAK_ALIAS_ATTRIBUTE _AX_SYS_WEAK_ALIAS_PRAGMA _AX_SYS_WEAK_ALIAS_HPSECONDARY _AX_SYS_WEAK_ALIAS_CRIDUPLICATE # Do we actually support aliasing? AC_CACHE_CHECK([how to create weak aliases with $CC], [ax_cv_sys_weak_alias], [ax_cv_sys_weak_alias=$ax_sys_weak_alias]) # OK, set a #define AS_IF([test $ax_cv_sys_weak_alias != no], [ AC_DEFINE([HAVE_SYS_WEAK_ALIAS], 1, [Define this if your system can create weak aliases]) ]) # Can aliases cross object file boundaries? _AX_SYS_WEAK_ALIAS_CROSSFILE # OK, remember the results AC_SUBST([WEAK_ALIAS], [$ax_cv_sys_weak_alias]) AC_SUBST([WEAK_ALIAS_CROSSFILE], [$ax_cv_sys_weak_alias_crossfile]) ]) AC_DEFUN([_AX_SYS_WEAK_ALIAS_ATTRIBUTE], [ # Test whether compiler accepts __attribute__ form of weak aliasing AC_CACHE_CHECK([whether $CC accepts function __attribute__((weak,alias()))], [ax_cv_sys_weak_alias_attribute], [ # We add -Werror if it's gcc to force an error exit if the weak attribute # isn't understood AS_IF([test $GCC = yes], [ save_CFLAGS=$CFLAGS CFLAGS=-Werror]) # Try linking with a weak alias... AC_LINK_IFELSE([ AC_LANG_PROGRAM([ void __weakf(int c) {} void weakf(int c) __attribute__((weak, alias("__weakf")));], [weakf(0)])], [ax_cv_sys_weak_alias_attribute=yes], [ax_cv_sys_weak_alias_attribute=no]) # Restore original CFLAGS AS_IF([test $GCC = yes], [ CFLAGS=$save_CFLAGS]) ]) # What was the result of the test? AS_IF([test $ax_sys_weak_alias = no && test $ax_cv_sys_weak_alias_attribute = yes], [ ax_sys_weak_alias=attribute AC_DEFINE([HAVE_SYS_WEAK_ALIAS_ATTRIBUTE], 1, [Define this if weak aliases may be created with __attribute__]) ]) ]) AC_DEFUN([_AX_SYS_WEAK_ALIAS_PRAGMA], [ # Test whether compiler accepts #pragma form of weak aliasing AC_CACHE_CHECK([whether $CC supports @%:@pragma weak], [ax_cv_sys_weak_alias_pragma], [ # Try linking with a weak alias... AC_LINK_IFELSE([ AC_LANG_PROGRAM([ extern void weakf(int c); @%:@pragma weak weakf = __weakf void __weakf(int c) {}], [weakf(0)])], [ax_cv_sys_weak_alias_pragma=yes], [ax_cv_sys_weak_alias_pragma=no]) ]) # What was the result of the test? AS_IF([test $ax_sys_weak_alias = no && test $ax_cv_sys_weak_alias_pragma = yes], [ ax_sys_weak_alias=pragma AC_DEFINE([HAVE_SYS_WEAK_ALIAS_PRAGMA], 1, [Define this if weak aliases may be created with @%:@pragma weak]) ]) ]) AC_DEFUN([_AX_SYS_WEAK_ALIAS_HPSECONDARY], [ # Test whether compiler accepts _HP_SECONDARY_DEF pragma from HP... AC_CACHE_CHECK([whether $CC supports @%:@pragma _HP_SECONDARY_DEF], [ax_cv_sys_weak_alias_hpsecondary], [ # Try linking with a weak alias... AC_LINK_IFELSE([ AC_LANG_PROGRAM([ extern void weakf(int c); @%:@pragma _HP_SECONDARY_DEF __weakf weakf void __weakf(int c) {}], [weakf(0)])], [ax_cv_sys_weak_alias_hpsecondary=yes], [ax_cv_sys_weak_alias_hpsecondary=no]) ]) # What was the result of the test? AS_IF([test $ax_sys_weak_alias = no && test $ax_cv_sys_weak_alias_hpsecondary = yes], [ ax_sys_weak_alias=hpsecondary AC_DEFINE([HAVE_SYS_WEAK_ALIAS_HPSECONDARY], 1, [Define this if weak aliases may be created with @%:@pragma _HP_SECONDARY_DEF]) ]) ]) AC_DEFUN([_AX_SYS_WEAK_ALIAS_CRIDUPLICATE], [ # Test whether compiler accepts "_CRI duplicate" pragma from Cray AC_CACHE_CHECK([whether $CC supports @%:@pragma _CRI duplicate], [ax_cv_sys_weak_alias_criduplicate], [ # Try linking with a weak alias... AC_LINK_IFELSE([ AC_LANG_PROGRAM([ extern void weakf(int c); @%:@pragma _CRI duplicate weakf as __weakf void __weakf(int c) {}], [weakf(0)])], [ax_cv_sys_weak_alias_criduplicate=yes], [ax_cv_sys_weak_alias_criduplicate=no]) ]) # What was the result of the test? AS_IF([test $ax_sys_weak_alias = no && test $ax_cv_sys_weak_alias_criduplicate = yes], [ ax_sys_weak_alias=criduplicate AC_DEFINE([HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE], 1, [Define this if weak aliases may be created with @%:@pragma _CRI duplicate]) ]) ]) dnl Note: This macro is modeled closely on AC_LINK_IFELSE, and in fact dnl depends on some implementation details of that macro, particularly dnl its use of _AC_MSG_LOG_CONFTEST to log the failed test program and dnl its use of ac_link for running the linker. AC_DEFUN([_AX_SYS_WEAK_ALIAS_CROSSFILE], [ # Check to see if weak aliases can cross object file boundaries AC_CACHE_CHECK([whether $CC supports weak aliases across object file boundaries], [ax_cv_sys_weak_alias_crossfile], [ AS_IF([test $ax_cv_sys_weak_alias = no], [ax_cv_sys_weak_alias_crossfile=no], [ dnl Must build our own test files... # conftest1 contains our weak alias definition... cat >conftest1.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest1.$ac_ext cat >>conftest1.$ac_ext <<_ACEOF /* end confdefs.h. */ @%:@ifndef HAVE_SYS_WEAK_ALIAS_ATTRIBUTE extern void weakf(int c); @%:@endif @%:@if defined(HAVE_SYS_WEAK_ALIAS_PRAGMA) @%:@pragma weak weakf = __weakf @%:@elif defined(HAVE_SYS_WEAK_ALIAS_HPSECONDARY) @%:@pragma _HP_SECONDARY_DEF __weakf weakf @%:@elif defined(HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE) @%:@pragma _CRI duplicate weakf as __weakf @%:@endif void __weakf(int c) {} @%:@ifdef HAVE_SYS_WEAK_ALIAS_ATTRIBUTE void weakf(int c) __attribute((weak, alias("__weakf"))); @%:@endif _ACEOF # And conftest2 contains our main routine that calls it cat >conftest2.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >> conftest2.$ac_ext cat >>conftest2.$ac_ext <<_ACEOF /* end confdefs.h. */ extern void weakf(int c); int main () { weakf(0); return 0; } _ACEOF # We must remove the object files (if any) ourselves... rm -f conftest2.$ac_objext conftest$ac_exeext # Change ac_link to compile *2* files together save_aclink=$ac_link ac_link=`echo "$ac_link" | \ sed -e 's/conftest\(\.\$ac_ext\)/conftest1\1 conftest2\1/'` dnl Substitute our own routine for logging the conftest m4_pushdef([_AC_MSG_LOG_CONFTEST], [echo "$as_me: failed program was:" >&AS_MESSAGE_LOG_FD echo ">>> conftest1.$ac_ext" >&AS_MESSAGE_LOG_FD sed "s/^/| /" conftest1.$ac_ext >&AS_MESSAGE_LOG_FD echo ">>> conftest2.$ac_ext" >&AS_MESSAGE_LOG_FD sed "s/^/| /" conftest2.$ac_ext >&AS_MESSAGE_LOG_FD ])dnl # Since we created the files ourselves, don't use SOURCE argument AC_LINK_IFELSE(, [ax_cv_sys_weak_alias_crossfile=yes], [ax_cv_sys_weak_alias_crossfile=no]) dnl Restore _AC_MSG_LOG_CONFTEST m4_popdef([_AC_MSG_LOG_CONFTEST])dnl # Restore ac_link ac_link=$save_aclink # We must remove the object files (if any) and C files ourselves... rm -f conftest1.$ac_ext conftest2.$ac_ext \ conftest1.$ac_objext conftest2.$ac_objext ]) ]) # What were the results of the test? AS_IF([test $ax_cv_sys_weak_alias_crossfile = yes], [ AC_DEFINE([HAVE_SYS_WEAK_ALIAS_CROSSFILE], 1, [Define this if weak aliases in other files are honored]) ]) ]) ga-5-3/m4/ga_msg_comms.m40000640005473000001440000000436312115161655014022 0ustar d3n000users# GA_MSG_COMMS() # -------------- # Establishes all things related to messageing libraries. # This includes the compilers to use (either standard or MPI wrappers) # or the proper linker flags (-L), libs (-l) or preprocessor directives (-I). # Yes, it's a beefy AC macro, but because when MPI is desired it replaces the # usual compiler the order here is necessary and it is all interdependent. AC_DEFUN([GA_MSG_COMMS], [ # GA_MP_* vars might exist in environment, but they are really internal. # Reset them. GA_MP_LIBS= GA_MP_LDFLAGS= GA_MP_CPPFLAGS= AC_ARG_WITH([mpi], [AS_HELP_STRING([--with-mpi[[=ARG]]], [select MPI as the messaging library (default); leave ARG blank to use MPI compiler wrappers])], [], [with_mpi=yes]) with_mpi_need_parse=no AS_CASE([$with_mpi], [yes], [with_mpi_wrappers=yes; ga_msg_comms=MPI], [no], [AS_CASE([$ga_cv_target_base], [MACX|LAPI|CYGNUS|CYGWIN|INTERIX], [ga_msg_comms=TCGMSG5], [ga_msg_comms=TCGMSG])], [*], [with_mpi_need_parse=yes; ga_msg_comms=MPI]) dnl postpone parsing with_mpi until we know sizeof(void*) dnl AS_IF([test x$with_mpi_need_parse = xyes], dnl [GA_ARG_PARSE([with_mpi], [GA_MP_LIBS], [GA_MP_LDFLAGS], [GA_MP_CPPFLAGS])]) AM_CONDITIONAL([MSG_COMMS_MPI], [test "x$ga_msg_comms" = xMPI]) AM_CONDITIONAL([MSG_COMMS_TCGMSG4], [test "x$ga_msg_comms" = xTCGMSG]) AM_CONDITIONAL([MSG_COMMS_TCGMSG5], [test "x$ga_msg_comms" = xTCGMSG5]) AS_CASE([$ga_msg_comms], [MPI], [AC_DEFINE([MSG_COMMS_MPI], [1], [Use MPI for messaging])], [TCGMSG], [AC_DEFINE([MSG_COMMS_TCGMSG4], [1], [Use TCGMSG (ipcv4.0) for messaging]) AC_DEFINE([MSG_COMMS_TCGMSG], [1], [Use TCGMSG for messaging]) AC_DEFINE([TCGMSG], [1], [deprecated, use MSG_COMMS_TCGMSG])], [TCGMSG5], [AC_DEFINE([MSG_COMMS_TCGMSG5], [1], [Use TCGMSG (ipcv5.0) for messaing]) AC_DEFINE([MSG_COMMS_TCGMSG], [1], [Use TCGMSG for messaging]) AC_DEFINE([TCGMSG], [1], [deprecated, use MSG_COMMS_TCGMSG])]) AC_SUBST([GA_MP_LIBS]) AC_SUBST([GA_MP_LDFLAGS]) AC_SUBST([GA_MP_CPPFLAGS]) ])dnl ga-5-3/m4/ltoptions.m40000640005473000001440000003007311650323546013421 0ustar d3n000users# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) ga-5-3/m4/ga.m40000640005473000001440000000312711705615560011756 0ustar d3n000users############################################################################### # Look for Global Arrays ############################################################################### AC_DEFUN([GA_REQUIRE], [ AC_CACHE_CHECK([whether this package is part of GA distribution], [ga_cv_libga_la_found], [AS_IF([test -f "../libga.la"], [ga_cv_libga_la_found=yes], [ga_cv_libga_la_found=no])]) AS_IF([test "x$ga_cv_libga_la_found" = xyes], [GA_LIBS="../libga.la" GA_CPPFLAGS="-I$srcdir/../global/src -I../global/src -I$srcdir/../ma -I../ma -I../gaf2c -I../armci/gaf2c -I$srcdir/../armci/src/include" GA_FLIBS=`echo '@FLIBS@' | ../config.status --file=-`], [ga_save_PATH="$PATH" AS_IF([test -d $with_ga], [PATH="$with_ga:$PATH"]) AS_IF([test -d $with_ga/bin], [PATH="$with_ga/bin:$PATH"]) AC_PATH_PROG([GA_CONFIG], [ga-config]) PATH="$ga_save_PATH" AS_IF([test "x$GA_CONFIG" != x], [GA_CPPFLAGS=`$GA_CONFIG --cppflags` GA_LDFLAGS=`$GA_CONFIG --ldflags` GA_LIBS=`$GA_CONFIG --libs` GA_FLIBS=`$GA_CONFIG --flibs`], [GA_CHECK_PACKAGE([ga], [ga.h], [ga], [GA_Initialize], [$FLIBS], [GA_LIBS="-lga"], [AS_UNSET([ac_cv_search_GA_Initialize]) GA_CHECK_PACKAGE([ga], [ga.h], [global], [GA_Initialize], [-lma -larmci -llinalg $FLIBS], [GA_LIBS="-lglobal -lma -larmci -llinalg"], [AC_MSG_FAILURE([Could not locate Global Arrays 5.x nor 4.x])])])])]) AC_SUBST([GA_CPPFLAGS]) AC_SUBST([GA_LDFLAGS]) AC_SUBST([GA_LIBS]) AC_SUBST([GA_FLIBS]) ])dnl ga-5-3/m4/ga_enable_profile.m40000640005473000001440000000103011470552224014767 0ustar d3n000users# GA_ENABLE_PROFILING # ------------------- # Whether to enable profiling. AC_DEFINEs ENABLE_PROFILING. AC_DEFUN([GA_ENABLE_PROFILING], [AC_ARG_ENABLE([profiling], [AS_HELP_STRING([--enable-profiling], [enable profiling])], [], [enable_profiling=no]) AM_CONDITIONAL([ENABLE_PROFILING], [test x$enable_profiling = xyes]) AS_IF([test "x$enable_profiling" = xyes], [AC_DEFINE([ENABLE_PROFILING], [1], [set to 1 if profiling is enabled])], [AC_DEFINE([ENABLE_PROFILING], [0], [set to 1 if profiling is enabled])]) ])dnl ga-5-3/m4/ga_f77_underscore.m40000640005473000001440000000432211650371744014672 0ustar d3n000users# GA_F77_UNDERSCORE # ----------------- # If F77 requires a flag to add an underscore to external names, find it. # Only add a single underscore regardless of whether there are already # underscores in the name. # # Known flags: # -qextname IBM xl # -qEXTNAME IBM xl # -funderscoring GNU # -fno-second-underscore GNU # -f absoft compiler (OSX?) # +ppu HPUX some compiler? # AC_DEFUN([GA_F77_UNDERSCORE], [AC_CACHE_CHECK([for $F77 flag to add single underscore to external names], [ga_cv_f77_underscore_flag], [AC_LANG_PUSH([C]) AC_COMPILE_IFELSE( [AC_LANG_SOURCE([[void my_sub_() {}]])], [mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS="$LIBS" LIBS="cfortran_test.$ac_objext $LIBS" AC_LANG_PUSH([Fortran 77]) for ga_flag in none -qextname -qEXTNAME -funderscoring -fno-second-underscore -f +ppu ; do ga_save_FFLAGS="$FFLAGS" AS_IF([test "x$ga_flag" != xnone], [FFLAGS="$FFLAGS $ga_flag"]) AC_LINK_IFELSE( [AC_LANG_CALL([], [my_sub])], [ga_cv_f77_underscore_flag="$ga_flag"]) FFLAGS="$ga_save_FFLAGS" AS_IF([test "x$ga_cv_f77_underscore_flag" != x], [break]) done AC_LANG_POP([Fortran 77]) LIBS="$ga_save_LIBS" rm -f cfortran_test.$ac_objext]) AC_LANG_POP([C])]) AS_IF([test "x$ga_cv_f77_underscore_flag" != xnone], [AS_IF([test "x$ga_cv_f77_underscore_flag" != x], [FFLAGS="$FFLAGS $ga_cv_f77_underscore_flag"])]) ]) # GA_F77_UNDERSCORE # GA_F77_MAYBE_UNDERSCORING # ------------------------- # Allow user to override the underscoring policy of their compiler. # # The default is to use whatever is 'natural' for the compiler, however # GA used to be built assuming a single underscore was appended to all # external Fortran symbols. This allows the old behavior to be turned # on (off by default). # AC_DEFUN([GA_F77_MAYBE_UNDERSCORING], [AC_ARG_ENABLE([underscoring], [AS_HELP_STRING([--enable-underscoring], [force single underscore for all external Fortran symbols [default: use compiler defaults for external Fortran symbols]])]) AS_IF([test "x$enable_underscoring" = xyes], [GA_F77_UNDERSCORE]) ]) # GA_F77_MAYBE_UNDERSCORING ga-5-3/m4/tcgmsg_rsh.m40000640005473000001440000000064411423601267013524 0ustar d3n000users# TCGMSG_REMOTE_SHELL # ------------------- # tcgmsg requires a remote shell. AC_DEFUN([TCGMSG_REMOTE_SHELL], [AC_MSG_NOTICE([checking for remote shell]) AC_PATH_PROGS([ga_cv_path_rsh], [rsh remsh ssh], [not found]) AS_IF([test "x$ga_cv_path_rsh" = "xnot found"], [AC_MSG_ERROR([Could not find remote shell for use by TCGMSG])]) AC_DEFINE_UNQUOTED([TCGMSG_RSH], ["$ga_cv_path_rsh"], [remote shell for TCGMSG]) ])dnl ga-5-3/m4/tcgmsg_timings.m40000640005473000001440000000040411410510454014365 0ustar d3n000users# TCGMSG_ENABLE_TIMINGS # --------------------- # This was only defined for LINUX[64] previously. Does it do any harm to # define it permanently? AC_DEFUN([TCGMSG_ENABLE_TIMINGS], [AC_DEFINE([TCGMSG_TIMINGS], [1], [Gather timing information for TCGMSG]) ])dnl ga-5-3/m4/ga_mpi_test_disable.m40000640005473000001440000000043711410510454015333 0ustar d3n000users# GA_DISABLE_MPI_TESTS() # --------------------- # Whether to disable all MPI linker tests. AC_DEFUN([GA_DISABLE_MPI_TESTS], [AC_ARG_ENABLE([mpi-tests], [AS_HELP_STRING([--disable-mpi-tests], [disable MPI linker tests])], [], [enable_mpi_tests=yes]) ])# GA_DISABLE_MPI_TESTS ga-5-3/m4/ga_f2c_cmdargs.m40000640005473000001440000001062011476275673014220 0ustar d3n000users# _GA_F2C_CMDARGS_CONFTEST # ------------------------ # Link a Fortran 77 program that uses the intrinsics GETARG and IARGC. AC_DEFUN([_GA_F2C_CMDARGS_CONFTEST], [AC_LINK_IFELSE([[ program main $ga_fxx_module integer i, j, l, ier character*20 s $ga_f77_getarg_decl i = 0 call $ga_f77_getarg($ga_f77_getarg_args) i=$ga_f77_iargc() if (i .gt. 1) then j = i - $ga_f77_iargc() j = 1.0 / j endif end]], [], [ga_f77_getarg=]) ])dnl # _GA_F2C_CMDARGS # -------------- # Determine how to access the Fortran 77 command line from C. # # Output Effects: # The following variables are set: # ga_f77_getarg - Statement to get an argument i into string s # ga_f77_getarg_args - Arguments to getarg # ga_f77_iargc - Routine to return the number of arguments # ga_fxx_module - Module command when using Fortran 90 compiler # ga_f77_getarg_decl - Declaration of routine used for ga_f77_getarg # If 'ga_f77_getarg' has a value, then that value and the values for these # other symbols will be tested first. If no approach is found, all of these # variables will have empty values. # 'AC_SUBST' is called for all seven variables. AC_DEFUN([_GA_F2C_CMDARGS], [AC_LANG_PUSH([Fortran 77]) dnl AC_ARG_VAR([F77_GETARG_DECL], [Declaration of routine e.g. external GETARG]) dnl AC_ARG_VAR([F77_GETARG], [Name of routine e.g. getarg, pxfgetarg]) dnl AC_ARG_VAR([F77_GETARG_ARGS], [Arguments to getarg e.g. i,s or i,s,l,ier]) dnl AC_ARG_VAR([F77_IARGC], [Name of routine e.g. iargc, ipxfargc]) dnl AC_ARG_VAR([FXX_MODULE], dnl [Module command when using Fortran 90 compiler e.g. use f90_unix]) AC_MSG_CHECKING([for routines to access the command line from Fortran]) # User-specified values dnl AS_IF([test "x$ga_f77_getarg" = x], dnl [ga_fxx_module=$FXX_MODULE dnl ga_f77_getarg_decl=$F77_GETARG_DECL dnl ga_f77_getarg=$F77_GETARG dnl ga_f77_getarg_args=$F77_GETARG_ARGS dnl ga_f77_iargc=$F77_IARGC dnl _GA_F2C_CMDARGS_CONFTEST()]) # Standard practice, uppercase AS_IF([test "x$ga_f77_getarg" = x], [ga_fxx_module= ga_f77_getarg_decl="external GETARG" ga_f77_getarg=GETARG ga_f77_getarg_args="i,s" ga_f77_iargc=IARGC _GA_F2C_CMDARGS_CONFTEST()]) # Standard practice, lowercase AS_IF([test "x$ga_f77_getarg" = x], [ga_fxx_module= ga_f77_getarg_decl="external getarg" ga_f77_getarg=getarg ga_f77_getarg_args="i,s" ga_f77_iargc=iargc _GA_F2C_CMDARGS_CONFTEST()]) # Posix alternative AS_IF([test "x$ga_f77_getarg" = x], [ga_fxx_module= ga_f77_getarg_decl="external pxfgetarg" ga_f77_getarg=pxfgetarg ga_f77_getarg_args="i,s,l,ier" ga_f77_iargc=ipxfargc _GA_F2C_CMDARGS_CONFTEST()]) # Nag f90_unix_env module AS_IF([test "x$ga_f77_getarg" = x], [ga_fxx_module=" use f90_unix_env" ga_f77_getarg_decl= ga_f77_getarg=getarg ga_f77_getarg_args="i,s" ga_f77_iargc=iargc _GA_F2C_CMDARGS_CONFTEST()]) # Nag f90_unix module AS_IF([test "x$ga_f77_getarg" = x], [ga_fxx_module=" use f90_unix" ga_f77_getarg_decl= ga_f77_getarg=getarg ga_f77_getarg_args="i,s" ga_f77_iargc=iargc _GA_F2C_CMDARGS_CONFTEST()]) # gfortran won't find getarg if it is marked as external AS_IF([test "x$ga_f77_getarg" = x], [ga_fxx_module= ga_f77_getarg_decl="intrinsic GETARG" ga_f77_getarg=GETARG ga_f77_getarg_args="i,s" ga_f77_iargc=IARGC _GA_F2C_CMDARGS_CONFTEST()]) AS_IF([test "x$ga_f77_getarg" = x], [AC_MSG_RESULT([no]) AC_MSG_ERROR([Could not find way to access Fortran cmd line from C])]) AC_MSG_RESULT([yes]) AC_DEFINE_UNQUOTED([F77_GETARG_DECL], [$ga_f77_getarg_decl], [Declaration of routine e.g. external GETARG]) AC_DEFINE_UNQUOTED([F77_GETARG], [$ga_f77_getarg], [Name of routine e.g. getarg, pxfgetarg]) AC_DEFINE_UNQUOTED([F77_GETARG_ARGS], [$ga_f77_getarg_args], [Arguments to getarg e.g. i,s or i,s,l,ier]) AC_DEFINE_UNQUOTED([F77_IARGC], [$ga_f77_iargc], [Name of routine e.g. iargc, ipxfargc]) AC_DEFINE_UNQUOTED([FXX_MODULE], [$ga_fxx_module], [Module command when using Fortran 90 compiler e.g. use f90_unix]) AC_F77_FUNC([F2C_GETARG]) AC_F77_FUNC([F2C_IARGC]) AC_LANG_POP([Fortran 77]) ])dnl # GA_F2C_CMDARGS # -------------- # Determine how to access the Fortran 77 command line from C. AC_DEFUN([GA_F2C_CMDARGS], [ _GA_F2C_CMDARGS AC_SUBST([F2C_GETARG]) AC_SUBST([F2C_IARGC]) ])dnl ga-5-3/m4/ga_lapack.m40000640005473000001440000000574711633720576013307 0ustar d3n000users# GA_F77_LAPACK_TEST # ------------------ # Generate Fortran 77 conftest for LAPACK. AC_DEFUN([GA_F77_LAPACK_TEST], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([], [[ implicit none external DGETRS CALL DGETRS ()]])]) ]) # GA_C_LAPACK_TEST # ---------------- # Generate C conftest for LAPACK. AC_DEFUN([GA_C_LAPACK_TEST], [AC_LANG_CONFTEST([AC_LANG_PROGRAM( [#ifdef __cplusplus extern "C" { #endif char dgetrs (); #ifdef __cplusplus } #endif ], [[char result = dgetrs (); ]])]) ]) # GA_LAPACK([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # --------------------------------------------------- # Test for LAPACK. Modelled after GA_BLAS macro. AC_DEFUN([GA_LAPACK], [AC_REQUIRE([GA_BLAS]) AC_ARG_WITH([lapack], [AS_HELP_STRING([--with-lapack=[[ARG]]], [use external LAPACK library])]) ga_lapack_ok=no AS_IF([test "x$with_lapack" = xno], [ga_lapack_ok=skip]) # Parse --with-lapack argument. Clear previous values first. LAPACK_LIBS= LAPACK_LDFLAGS= LAPACK_CPPFLAGS= GA_ARG_PARSE([with_lapack], [LAPACK_LIBS], [LAPACK_LDFLAGS], [LAPACK_CPPFLAGS]) # Get fortran linker name of LAPACK function to check for. AC_F77_FUNC(dgetrs) ga_save_LIBS="$LIBS" ga_save_LDFLAGS="$LDFLAGS" ga_save_CPPFLAGS="$CPPFLAGS" LDFLAGS="$LAPACK_LDFLAGS $BLAS_LDFLAGS $LDFLAGS" CPPFLAGS="$LAPACK_CPPFLAGS $BLAS_CPPFLAGS $CPPFLAGS" AC_MSG_NOTICE([Attempting to locate LAPACK library]) # We cannot use LAPACK if BLAS is not found AS_IF([test $ga_blas_ok != yes], [ga_lapack_ok=noblas]) # First, check environment/command-line variables. # If failed, erase LAPACK_LIBS but maintain LAPACK_LDFLAGS and LAPACK_CPPFLAGS. AS_IF([test $ga_lapack_ok = no], [LIBS="$LAPACK_LIBS $BLAS_LIBS $LIBS" AS_IF([test "x$enable_f77" = xno], [AC_MSG_CHECKING([for C LAPACK with user-supplied flags]) AC_LANG_PUSH([C]) GA_C_LAPACK_TEST() AC_LINK_IFELSE([], [ga_lapack_ok=yes], [LAPACK_LIBS=]) AC_LANG_POP([C])], [AC_MSG_CHECKING([for Fortran 77 LAPACK with user-supplied flags]) AC_LANG_PUSH([Fortran 77]) GA_F77_LAPACK_TEST() AC_LINK_IFELSE([], [ga_lapack_ok=yes], [LAPACK_LIBS=]) AC_LANG_POP([Fortran 77])]) AC_MSG_RESULT([$ga_lapack_ok]) LIBS="$ga_save_LIBS"]) # Generic LAPACK library? for lib in lapack lapack_rs6k; do AS_IF([test $ga_lapack_ok = no], [ga_save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" AC_CHECK_LIB([$lib], [$dgetrs], [ga_lapack_ok=yes; LAPACK_LIBS="-l$lib"], [], [$FLIBS]) LIBS="$ga_save_LIBS"]) done CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" AC_SUBST([LAPACK_LIBS]) AC_SUBST([LAPACK_LDFLAGS]) AC_SUBST([LAPACK_CPPFLAGS]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: AS_IF([test $ga_lapack_ok = yes], [have_lapack=1 $1], [AC_MSG_WARN([LAPACK library not found, using internal LAPACK]) have_lapack=0 $2]) AC_DEFINE_UNQUOTED([HAVE_LAPACK], [$have_lapack], [Define to 1 if using external LAPACK library]) AM_CONDITIONAL([HAVE_LAPACK], [test $ga_lapack_ok = yes]) ])dnl GA_LAPACK ga-5-3/m4/ga_ar.m40000640005473000001440000000127111504211421012417 0ustar d3n000users# GA_AR # ----- # Libtool doesn't advertise AR nor AR_FLAGS in case the user wishes to # override them. Further, certain systems require a different archiver. # RANLIB may also be affected. # Use this prior to LT_INIT. # # Known archivers: # ar - all known systems # sxar - special to NEC/NEC64 # AC_DEFUN([GA_AR], [ AC_ARG_VAR([AR], [archiver used by libtool (default: ar)]) AC_ARG_VAR([AR_FLAGS], [archiver flags used by libtool (default: cru)]) AC_ARG_VAR([RANLIB], [generates index to archive (default: ranlib)]) AS_IF([test "x$AR" = x], [AS_CASE([$ga_cv_target], [NEC|NEC64], [AR=sxar])]) AS_IF([test "x$RANLIB" = x], [AS_CASE([$ga_cv_target], [NEC|NEC64], [RANLIB=true])]) ])dnl ga-5-3/m4/ga_warn_flags.m40000640005473000001440000000312511643421570014154 0ustar d3n000users# GA_WARN_FLAGS # ------------- # Add all known warning flags to the language-specific FLAGS variable. AC_DEFUN([GA_WARN_FLAGS], [ AS_IF([test "x$enable_warnings" = xyes], [ AC_REQUIRE([GA_COMPILER_VENDOR]) AS_VAR_PUSHDEF([vendor], [ga_cv_[]_AC_LANG_ABBREV[]_compiler_vendor]) AS_VAR_PUSHDEF([result], [ga_cv_[]_AC_LANG_ABBREV[]_warning_flags]) AC_CACHE_CHECK([for _AC_LANG warning flags], [result], [ AC_LANG_CASE( [C], [ AS_CASE([$vendor], [amd], [result="-Wall -W -Wdeclaration-after-statement"], [borland], [result=], [comeau], [result=], [cray], [result=], [dec], [result=], [fujitsu], [result="-Xc -pvctl,fullmsg"], [gnu], [result="-Wall -Wextra -Wdeclaration-after-statement -Wno-unused-parameter -pedantic -Wno-long-long -Wnested-externs -ansi"], [hp], [result=], [ibm], [result=], [intel], [result="-Wall"], [kai], [result=], [lcc], [result=], [metrowerks],[result=], [microsoft], [result=], [pathscale], [result="-Wall -fullwarn -Wno-unused-parameter -pedantic -Wno-long-long -Wnested-externs"], [portland], [result="-Xc"], [sgi], [result=], [sun], [result=], [watcom], [result=]) ], [Fortran 77], [ result= ], [Fortran], [ result= ], [C++], [ result= ]) ]) AC_SUBST(GA_[]_AC_LANG_PREFIX[]_WARN, [$result]) AS_VAR_POPDEF([result]) AS_VAR_POPDEF([vendor]) ]) ])dnl # GA_ENABLE_WARNINGS # ------------------ # Adds --enable-warnings. AC_DEFUN([GA_ENABLE_WARNINGS], [ AC_ARG_ENABLE([warnings], [AS_HELP_STRING([--enable-warnings], [use compiler-specific warnings])], [enable_warnings=yes], [enable_warnings=no]) ])dnl ga-5-3/m4/ltversion.m40000640005473000001440000000126211650323546013411 0ustar d3n000users# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) ga-5-3/m4/ga_64bit_flag.m40000640005473000001440000000214311410510454013741 0ustar d3n000users# GA_64BIT_FLAG # ------------- # Figure out whether the compiler needs a special flag to generate 64bit code. # We verify by testing the size of void*. We can't use AC_CHECK_SIZEOF # directly since it uses the cache. Instead we copied code from autoconf... # # Known flags: # -m64 GNU # -q64 IBM # +DD64 HPUX # +DA2.0W HPUX (obsolete form of +DD64) # -64 SGI TFP, not sure, others might be -mips64, -align64? # AC_DEFUN([GA_64BIT_FLAG], [AC_CACHE_CHECK([for flag to indicate 64-bits], [ga_cv_64bit_flag], [AC_LANG_PUSH([C]) for flag in none -m64 -q64 +DD64 +DA2.0W -64 ; do ga_save_CFLAGS=$CFLAGS AS_IF([test "x$flag" != xnone], [CFLAGS="$CFLAGS $flag"]) ga_sizeof_voidp=0 AC_COMPUTE_INT([ga_sizeof_voidp], [(long int) (sizeof (void*))], [AC_INCLUDES_DEFAULT()], [ga_sizeof_voidp=0]) CFLAGS=$ga_save_CFLAGS AS_IF([test x$ga_sizeof_voidp = x8], [ga_cv_64bit_flag=$flag; break]) done AC_LANG_POP([C])]) AS_IF([test x$ga_cv_64bit_flag != xnone], [CFLAGS="$CFLAGS $ga_cv_64bit_flag" FFLAGS="$FFLAGS $ga_cv_64bit_flag"]) ]) # GA_64BIT_FLAG ga-5-3/m4/ga_f77_cpp_symbols.m40000640005473000001440000000213011515121641015033 0ustar d3n000users# GA_F77_CPP_SYMBOL([ACTION-WHEN-FOUND]) # -------------------------------------- # Detect how to pass CPP symbols to preprocessed Fortran 77. # # Known: # -D the usual # -WF,-D IBM xlf # -Wp,-D Fujitsu # AC_DEFUN([GA_F77_CPP_SYMBOL], [AC_CACHE_CHECK([how to pass symbols to preprocessed $F77], [ga_cv_f77_cpp_symbol], [AC_LANG_PUSH([Fortran 77]) ac_ext=F for symbol in -D -WF,-D -Wp,-D do ga_save_CPPFLAGS="$CPPFLAGS" ga_save_FFLAGS="$FFLAGS" CPPFLAGS="$CPPFLAGS ${symbol}GABLAHBLAH" FFLAGS="$CPPFLAGS $FFLAGS" AC_COMPILE_IFELSE( [[#ifndef GABLAHBLAH this is an error #endif end program]], [ga_cv_f77_cpp_symbol="$symbol"]) CPPFLAGS="$ga_save_CPPFLAGS" FFLAGS="$ga_save_FFLAGS" AS_IF([test "x$ga_cv_f77_cpp_symbol" != x], [break]) done AC_LANG_POP([Fortran 77]) ]) AS_IF([test "x$ga_cv_f77_cpp_symbol" = x], [AC_MSG_ERROR([don't know how to pass symbols to preprocessed Fortran])]) m4_default([$1], [AS_CASE([$ga_cv_f77_cpp_symbol], [-D], [], [FFLAGS="$FFLAGS ${ga_cv_f77_cpp_symbol}HAVE_CONFIG_H"])]) ]) # GA_F77_CPP_SYMBOL ga-5-3/m4/ga_union_semun.m40000640005473000001440000000107211410510454014357 0ustar d3n000users# GA_UNION_SEMUN # -------------- # Not all packages define union semun, even those that require it. AC_DEFUN([GA_UNION_SEMUN], [AC_CACHE_CHECK([for union semun in sys/sem.h], [ga_cv_union_semun], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include #include #include ]], [[union semun arg; semctl(0, 0, 0, arg);]])], [ga_cv_union_semun=yes], [ga_cv_union_semun=no])]) AS_IF([test x$ga_cv_union_semun = xyes], [AC_DEFINE([HAVE_UNION_SEMUN], [1], [define if sys/sem.h has union semun])]) ])# GA_UNION_SEMUN ga-5-3/m4/ga_f77_integer_size.m40000640005473000001440000001535211506207061015203 0ustar d3n000users# _GA_F77_INTEGER_4_KNOWN_FLAGS # ----------------------------- # These are the known flags for promoting INTEGERs to 8 bytes. AC_DEFUN([_GA_F77_INTEGER_4_KNOWN_FLAGS], [-fdefault-integer-4 -qintsize=4 "-integer-size 32" -CcdII4 "-s integer32" -xtypemap=integer:32 -i4 +i4])dnl # _GA_F77_INTEGER_8_KNOWN_FLAGS # ----------------------------- # These are the known flags for promoting INTEGERs to 8 bytes. AC_DEFUN([_GA_F77_INTEGER_8_KNOWN_FLAGS], [-fdefault-integer-8 -qintsize=8 "-integer-size 64" -CcdII8 "-s integer64" -xtypemap=integer:64 -i8 +i8])dnl # _GA_F77_INTEGER_4_FLAG(VARIABLE) # -------------------------------- # What FFLAG, if any, forces INTEGER size to be 4 bytes? # Assign result to VARIABLE. AC_DEFUN([_GA_F77_INTEGER_4_FLAG], [for flag in none $FFLAG_INT _GA_F77_INTEGER_4_KNOWN_FLAGS do ga_save_FFLAGS="$FFLAGS" AS_IF([test "x$flag" != xnone], [FFLAGS="$flag $FFLAGS"]) sizeof_integer=0 GA_F77_COMPUTE_SIZEOF([INTEGER], [sizeof_integer]) FFLAGS="$ga_save_FFLAGS" AS_IF([test x$sizeof_integer = x4], [AS_TR_SH([$1])=$flag; break]) done ]) # _GA_F77_INTEGER_4_FLAG # _GA_F77_INTEGER_8_FLAG(VARIABLE) # -------------------------------- # What FFLAG, if any, forces INTEGER size to be 8 bytes? # Assign result to VARIABLE. AC_DEFUN([_GA_F77_INTEGER_8_FLAG], [for flag in none $FFLAG_INT _GA_F77_INTEGER_8_KNOWN_FLAGS do ga_save_FFLAGS="$FFLAGS" AS_IF([test "x$flag" != xnone], [FFLAGS="$flag $FFLAGS"]) sizeof_integer=0 GA_F77_COMPUTE_SIZEOF([INTEGER], [sizeof_integer]) FFLAGS="$ga_save_FFLAGS" AS_IF([test x$sizeof_integer = x8], [AS_TR_SH([$1])=$flag; break]) done ]) # _GA_F77_INTEGER_8_FLAG # _GA_F77_INTEGER_4_FLAG_CROSS(VARIABLE) # -------------------------------------- # What FFLAG, if any, forces INTEGER size to be 4 bytes? # This is safe for cross-compiling, although less accurate. # Some compilers don't have the capability to change warnings to errors, so # in some cases an inccorect size flag will still succeed during # compilation. Unfortunately, there's no alternative when cross compiling. AC_DEFUN([_GA_F77_INTEGER_4_FLAG_CROSS], [AC_LANG_PUSH([Fortran 77]) ga_result= ga_save_FFLAGS="$FFLAGS" ga_save_suppress_FFLAGS="$FFLAGS" ga_save_werror_flag=$ac_f77_werror_flag ac_f77_werror_flag=yes AS_IF([test "x$ga_cv_f77_suppress" != xnone], [ga_save_suppress_FFLAGS="$FFLAGS $ga_cv_f77_suppress"]) AS_IF([test "x$FFLAG_INT" != x], [FFLAGS="$ga_save_suppress_FFLAGS $FFLAG_INT" AC_LINK_IFELSE( [[ program main integer i end program]], [ga_result=$flag])]) AS_IF([test "x$ga_result" = x], [for flag in _GA_F77_INTEGER_4_KNOWN_FLAGS do FFLAGS="$ga_save_suppress_FFLAGS $flag" AC_LINK_IFELSE( [[ program main integer i end program]], [ac_ext=F AC_LINK_IFELSE( [[ program main integer i end program]], [ga_result=$flag; break]) ac_ext=f]) done]) ac_f77_werror_flag=$ga_save_werror_flag FFLAGS="$ga_save_FFLAGS" AS_TR_SH([$1])="$ga_result" AC_LANG_POP([Fortran 77]) ]) # _GA_F77_INTEGER_4_FLAG_CROSS # _GA_F77_INTEGER_8_FLAG_CROSS(VARIABLE) # -------------------------------------- # What FFLAG, if any, forces INTEGER size to be 8 bytes? # This is safe for cross-compiling, although less accurate. # Some compilers don't have the capability to change warnings to errors, so # in some cases an inccorect size flag will still succeed during # compilation. Unfortunately, there's no alternative when cross compiling. AC_DEFUN([_GA_F77_INTEGER_8_FLAG_CROSS], [AC_LANG_PUSH([Fortran 77]) ga_result= ga_save_FFLAGS="$FFLAGS" ga_save_suppress_FFLAGS="$FFLAGS" ga_save_werror_flag=$ac_f77_werror_flag ac_f77_werror_flag=yes AS_IF([test "x$ga_cv_f77_suppress" != xnone], [ga_save_suppress_FFLAGS="$FFLAGS $ga_cv_f77_suppress"]) AS_IF([test "x$FFLAG_INT" != x], [FFLAGS="$ga_save_suppress_FFLAGS $FFLAG_INT" AC_LINK_IFELSE( [[ program main integer i end program]], [ga_result=$flag])]) AS_IF([test "x$ga_result" = x], [for flag in _GA_F77_INTEGER_8_KNOWN_FLAGS do FFLAGS="$ga_save_suppress_FFLAGS $flag" AC_LINK_IFELSE( [[ program main integer i end program]], [ac_ext=F AC_LINK_IFELSE( [[ program main integer i end program]], [ga_result=$flag; break]) ac_ext=f]) done]) ac_f77_werror_flag=$ga_save_werror_flag FFLAGS="$ga_save_FFLAGS" AS_TR_SH([$1])="$ga_result" AC_LANG_POP([Fortran 77]) ]) # _GA_F77_INTEGER_8_FLAG_CROSS # GA_F77_INTEGER_SIZE # ------------------- # Allow the user to pick whether to use 4- or 8-byte integers. If not # specified, the default integer size is equivalent to sizeof(void*). # Adds the appropriate flag to FFLAGS, if needed. AC_DEFUN([GA_F77_INTEGER_SIZE], [AC_ARG_VAR([FFLAG_INT], [Fortran 77 compiler flag to set desired integer size]) AC_ARG_ENABLE([i4], [AS_HELP_STRING([--enable-i4], [enable 4-byte integers [default: sizeof(void*)]])], [enable_i4=yes]) AC_ARG_ENABLE([i8], [AS_HELP_STRING([--enable-i8], [enable 8-byte integers [default: sizeof(void*)]])], [enable_i8=yes]) AC_LANG_PUSH([C]) AC_COMPUTE_INT([ga_f77_integer_size], [(long int) (sizeof (void*))], [AC_INCLUDES_DEFAULT()], [ga_f77_integer_size=0]) AC_LANG_POP([C]) AC_CACHE_CHECK([for desired Fortran INTEGER size], [ga_cv_f77_integer_size], [AS_IF([test x$enable_i4 = xyes], [AS_IF([test x$enable_i8 = xyes], [AC_MSG_ERROR([Cannot enable both i4 and i8])], [ga_cv_f77_integer_size=4])], [AS_IF([test x$enable_i8 = xyes], [ga_cv_f77_integer_size=8], [ga_cv_f77_integer_size=$ga_f77_integer_size])])]) # Now determine the correct compiler flag to adjust the integer size. AC_CACHE_CHECK([for INTEGER size compile flag], [ga_cv_f77_integer_size_flag], [AS_CASE([$cross_compiling:$ga_cv_f77_integer_size], [yes:4],[_GA_F77_INTEGER_4_FLAG_CROSS([ga_cv_f77_integer_size_flag])], [yes:8],[_GA_F77_INTEGER_8_FLAG_CROSS([ga_cv_f77_integer_size_flag])], [*:4], [_GA_F77_INTEGER_4_FLAG([ga_cv_f77_integer_size_flag])], [*:8], [_GA_F77_INTEGER_8_FLAG([ga_cv_f77_integer_size_flag])])]) AS_IF([test "x$ga_cv_f77_integer_size_flag" != x], [AS_IF([test "x$ga_cv_f77_integer_size_flag" != xnone], [AC_SUBST([FFLAG_INT], [$ga_cv_f77_integer_size_flag])])]) AS_IF([test "x$ga_cv_f77_integer_size" = x8], [AS_IF([test "x$ga_cv_f77_integer_size_flag" = x], [AC_MSG_WARN([!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!]) AC_MSG_WARN([Unable to find a flag to promote Fortran integers]) AC_MSG_WARN([INTEGER*8 promotion is not supported]) AC_MSG_WARN([!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!])])]) ])dnl ga-5-3/m4/ga_f77_fixed.m40000640005473000001440000000246511417126064013620 0ustar d3n000users# GA_F77_FIXED # ------------ # Similar to AC_FC_FREEFORM, ensure that the Fortran compiler can compile # fixed format source code as opposed to newer free form formats. # If necessary it will add flags to FFLAGS. # The known flags are: # -ffixed-form: GNU g77, gfortran # -fixed: Intel compiler (ifort), Sun compiler (f95) # -qfixed: IBM compiler (xlf*) # -Mfixed: Portland Group compiler # -fixedform: SGI compiler # -f fixed: Absoft Fortran # +source=fixed: HP Fortran # -fix: Lahey/Fujitsu Fortran # AC_DEFUN([GA_F77_FIXED], [ AC_CACHE_CHECK([whether $F77 needs a flag to compile fixed format source], [ga_cv_f77_fixed_flag], [AC_LANG_PUSH([Fortran 77]) for testflag in none -ffixed-form -qfixed -Mfixed -fixedform "-f fixed" +source=fixed -fix ; do ga_save_FFLAGS=$FFLAGS AS_IF([test "x$testflag" != xnone], [FFLAGS="$FFLAGS $testflag"]) AC_COMPILE_IFELSE([AC_LANG_SOURCE( [[c some comment end program]])], [ga_cv_f77_fixed_flag=$testflag]) FFLAGS=$ga_save_FFLAGS AS_IF([test "x$ga_cv_f77_fixed_flag" != x], [break]) done AC_LANG_POP([Fortran 77])]) AS_IF([test "x$ga_cv_f77_fixed_flag" != xnone], [AS_IF([test "x$ga_cv_f77_fixed_flag" != x], [FFLAGS="$FFLAGS $ga_cv_f77_fixed_flag"])]) ]) # GA_F77_FIXED ga-5-3/m4/ga_mpi_unwrap.m40000640005473000001440000002237512036055134014216 0ustar d3n000users# GA_MPI_UNWRAP() # --------------- # Attempt to unwrap the MPI compiler for the current language and determine # the underlying compiler. # # The strategy is to first compare the stdout of the version flags using # a custom perl script. Next we combine stdout and sterr for the comparison. # Occasionally, the MPI compiler will always report a non-zero exit status. # That is the last case checked for. AC_DEFUN([GA_MPI_UNWRAP], [ # Find perl. AC_PATH_PROG([PERL], [perl]) # Create inside.pl. rm -f inside.pl [cat >inside.pl <<"EOF" #!/usr/bin/perl use strict; use warnings; my $numargs = @S|@#ARGV + 1; if ($numargs != 2) { print "Usage: wrapped.txt naked.txt\n"; exit 1; } # Read each input file as a string (rather than a list). local $/=undef; open WRAPPED, "$ARGV[0]" or die "Could not open wrapped text file: $!"; my $wrapped_lines = ; close WRAPPED; open NAKED, "$ARGV[1]" or die "Could not open naked text file: $!"; my $naked_lines = ; close NAKED; # Replace newlines, + from wrapped and naked lines. $wrapped_lines =~ tr/\n+/ /; $naked_lines =~ tr/\n+/ /; # Remove whitespace from beginning of wrapped and naked lines. $wrapped_lines =~ s/^\s+//; $naked_lines =~ s/^\s+//; # Remove whitespace from end of wrapped and naked lines. $wrapped_lines =~ s/\s+$//; $naked_lines =~ s/\s+$//; # If either wrapped_lines or naked_lines are empty, this is an error. # It is assumed that the particular version string which created the input # files should generate SOMETHING. unless ($wrapped_lines) { exit 1; } unless ($naked_lines) { exit 1; } # Cray compilers append a timestamp into their version string. Remove it. if ($wrapped_lines =~ /\QCray\E/) { $wrapped_lines = substr $wrapped_lines, 0, -28; $naked_lines = substr $naked_lines, 0, -28; } # Can the naked lines be found within the wrapped lines? if ($wrapped_lines =~ /\Q$naked_lines\E/) { #print "Found as substring\n"; exit 0; } # Are the naked lines exactly the same as the wrapped lines? elsif ($wrapped_lines eq $naked_lines) { #print "Found equal\n"; exit 0; } else { #print "Not found\n"; exit 1; } EOF] inside="$PERL inside.pl" wrapped="$_AC_CC" AC_LANG_CASE( [C], [AS_CASE([$wrapped], [*_r], [compilers="bgxlc_r xlc_r"], [*], [compilers="bgxlc xlc pgcc pathcc icc sxcc fcc opencc suncc craycc gcc ecc cl ccc cc"]) ], [C++], [AS_CASE([$wrapped], [*_r], [compilers="bgxlC_r xlC_r"], [*], [compilers="icpc pgCC pathCC sxc++ xlC bgxlC openCC sunCC crayc++ g++ c++ gpp aCC cxx cc++ cl.exe FCC KCC RCC CC"]) ], [Fortran 77], [AS_CASE([$wrapped], [*_r], [compilers="bgxlf95_r xlf95_r bgxlf90_r xlf90_r bgxlf_r xlf_r"], [*], [compilers="gfortran g95 bgxlf95 xlf95 f95 fort ifort ifc efc pgf95 pathf95 lf95 openf95 sunf95 crayftn bgxlf90 xlf90 f90 pgf90 pathf90 pghpf epcf90 sxf90 openf90 sunf90 g77 bgxlf xlf f77 frt pgf77 pathf77 cf77 fort77 fl32 af77"]) ], [Fortran], [ ]) AS_VAR_PUSHDEF([ga_save_comp], [ga_save_[]_AC_CC[]]) AS_VAR_PUSHDEF([ga_orig_comp], [ga_orig_[]_AC_CC[]]) AS_VAR_PUSHDEF([ga_cv_mpi_naked], [ga_cv_mpi[]_AC_LANG_ABBREV[]_naked]) AC_CACHE_CHECK([for base $wrapped compiler], [ga_cv_mpi_naked], [ base="`$wrapped -show 2>/dev/null | sed 's/@<:@ @:>@.*@S|@//' | head -1`" ga_save_comp="$_AC_CC" _AC_CC="$base" # if -m32 or -m64 is present in the -show params, or separately, add it unwrapped_args="`$wrapped -show 2>/dev/null`" extra_arg="" for arg in $unwrapped_args $wrapped do AS_CASE([$arg], [*-m32*], [extra_arg="-m32"], [*-m64*], [extra_arg="-m64"]) done AS_IF([test "x$extra_arg" != x], [base="$base $extra_arg"]) AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [ga_cv_mpi_naked="$base"]) _AC_CC="$ga_save_comp" versions="--version -v -V -qversion" found_wrapped_version=0 # Try separating stdout and stderr. Only compare stdout. AS_IF([test "x$ga_cv_mpi_naked" = x], [ # prepend any CC/CXX/F77 the user may have specified compilers="$ga_orig_comp $compilers" echo "only comparing stdout" >&AS_MESSAGE_LOG_FD for version in $versions do echo "trying version=$version" >&AS_MESSAGE_LOG_FD rm -f mpi.txt mpi.err naked.txt naked.err AS_IF([$wrapped $version 1>mpi.txt 2>mpi.err], [found_wrapped_version=1 for naked_compiler in $compilers do AS_IF([test "x$naked_compiler" != "x$wrapped"], [AS_IF([$naked_compiler $version 1>naked.txt 2>naked.err], [AS_IF([$inside mpi.txt naked.txt >/dev/null], [ga_cv_mpi_naked=$naked_compiler; break], [echo "inside.pl $wrapped $naked_compiler failed, skipping" >&AS_MESSAGE_LOG_FD])], [echo "$naked_compiler $version failed, skipping" >&AS_MESSAGE_LOG_FD])]) done], [echo "$wrapped $version failed, skipping" >&AS_MESSAGE_LOG_FD]) AS_IF([test "x$ga_cv_mpi_naked" != x], [break]) done ]) # Perhaps none of the MPI compilers had a zero exit status (this is bad). # In this case we have to do a brute force match regardless of exit status. AS_IF([test "x$found_wrapped_version" = x0], [ AS_IF([test "x$ga_cv_mpi_naked" = x], [ echo "no zero exit status found for MPI compilers" >&AS_MESSAGE_LOG_FD for version in $versions do echo "trying version=$version" >&AS_MESSAGE_LOG_FD rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do AS_IF([test "x$naked_compiler" != "x$wrapped"], [rm -f naked.txt naked.err AS_IF([$naked_compiler $version 1>naked.txt 2>naked.err], [AS_IF([$inside mpi.txt naked.txt >/dev/null], [ga_cv_mpi_naked=$naked_compiler; break], [echo "inside.pl $wrapped $naked_compiler failed, skipping" >&AS_MESSAGE_LOG_FD])], [echo "$naked_compiler $version failed, skipping" >&AS_MESSAGE_LOG_FD])]) done AS_IF([test "x$ga_cv_mpi_naked" != x], [break]) done ]) ]) # Try by combining stdout/err into one file. AS_IF([test "x$ga_cv_mpi_naked" = x], [ echo "try combining stdout and stderr into one file" >&AS_MESSAGE_LOG_FD for version in $versions do echo "trying version=$version" >&AS_MESSAGE_LOG_FD rm -f mpi.txt naked.txt AS_IF([$wrapped $version 1>mpi.txt 2>&1], [for naked_compiler in $compilers do AS_IF([test "x$naked_compiler" != "x$wrapped"], [AS_IF([$naked_compiler $version 1>naked.txt 2>&1], [AS_IF([$inside mpi.txt naked.txt >/dev/null], [ga_cv_mpi_naked=$naked_compiler; break], [echo "inside.pl $wrapped $naked_compiler failed, skipping" >&AS_MESSAGE_LOG_FD])], [echo "$naked_compiler $version failed, skipping" >&AS_MESSAGE_LOG_FD])]) done], [echo "$wrapped $version failed, skipping" >&AS_MESSAGE_LOG_FD]) AS_IF([test "x$ga_cv_mpi_naked" != x], [break]) done ]) # If we got this far, then it's likely that the MPI compiler had a zero exit # status when it shouldn't have for one version flag, but later had a non-zero # exit status for a flag it shouldn't have. One false positive hid a false # negative. In this case, brute force compare all MPI compiler output against # all compiler output. AS_IF([test "x$ga_cv_mpi_naked" = x], [ echo "we have a very badly behaving MPI compiler" >&AS_MESSAGE_LOG_FD for version in $versions do echo "trying version=$version" >&AS_MESSAGE_LOG_FD rm -f mpi.txt mpi.err $wrapped $version 1>mpi.txt 2>mpi.err for naked_compiler in $compilers do AS_IF([test "x$naked_compiler" != "x$wrapped"], [rm -f naked.txt naked.err AS_IF([$naked_compiler $version 1>naked.txt 2>naked.err], [AS_IF([$inside mpi.txt naked.txt >/dev/null], [ga_cv_mpi_naked=$naked_compiler; break], [echo "inside.pl $wrapped $naked_compiler failed, skipping" >&AS_MESSAGE_LOG_FD])], [echo "$naked_compiler $version failed, skipping" >&AS_MESSAGE_LOG_FD])]) done AS_IF([test "x$ga_cv_mpi_naked" != x], [break]) done ]) rm -f mpi.txt mpi.err naked.txt naked.err ]) AS_IF([test "x$ga_cv_mpi_naked" = x], [AC_MSG_ERROR([Could not determine the ]_AC_LANG[ compiler wrapped by MPI])], [AS_IF([test "x$ga_orig_comp" != x && test "x$ga_orig_comp" != "x$ga_cv_mpi_naked"], [AC_MSG_WARN([unwrapped $wrapped ($ga_cv_mpi_naked) does not match user-specified $ga_orig_comp])])]) AS_VAR_POPDEF([ga_save_comp]) AS_VAR_POPDEF([ga_cv_mpi_naked]) rm -f inside.pl ])dnl # GA_MPI_UNWRAP_PUSH() # -------------------- # Set CC/CXX/F77/FC to their unwrapped MPI counterparts. # Save their old values for restoring later. AC_DEFUN([GA_MPI_UNWRAP_PUSH], [ ga_mpi_unwrap_push_save_CC="$CC" ga_mpi_unwrap_push_save_CXX="$CXX" ga_mpi_unwrap_push_save_F77="$F77" ga_mpi_unwrap_push_save_FC="$FC" AS_IF([test "x$ga_cv_mpic_naked" != x], [ CC="$ga_cv_mpic_naked"]) AS_IF([test "x$ga_cv_mpicxx_naked" != x], [CXX="$ga_cv_mpicxx_naked"]) AS_IF([test "x$ga_cv_mpif77_naked" != x], [F77="$ga_cv_mpif77_naked"]) AS_IF([test "x$ga_cv_mpifc_naked" != x], [ FC="$ga_cv_mpifc_naked"]) ])dnl # GA_MPI_UNWRAP_POP() # ------------------- # Restore CC/CXX/F77/FC to their MPI counterparts. AC_DEFUN([GA_MPI_UNWRAP_POP], [ CC="$ga_mpi_unwrap_push_save_CC" CXX="$ga_mpi_unwrap_push_save_CXX" F77="$ga_mpi_unwrap_push_save_F77" FC="$ga_mpi_unwrap_push_save_FC" ])dnl ga-5-3/m4/ga_f2c_match_types.m40000640005473000001440000000145211410510454015074 0ustar d3n000users# GA_F2C_MATCH_TYPES([FTYPE], [CTYPES]) # ------------------------------------- # Size-based match between Fortran and C types. AC_DEFUN([GA_F2C_MATCH_TYPES], [AS_VAR_PUSHDEF([ftype_size], [ga_cv_f77_sizeof_$1]) AS_VAR_PUSHDEF([ftype_cache], [ga_cv_f2c_$1]) AC_CACHE_CHECK([for C type corresponding to $1], ftype_cache, [m4_foreach(ctype, [$2], [AS_VAR_PUSHDEF([ctype_size], [ac_cv_sizeof_[]ctype]) AS_IF([test -z "$ftype_cache"], [AS_IF([test "$ctype_size" = "$ftype_size"], [ftype_cache="ctype"])]) AS_VAR_POPDEF([ctype_size])])]) AS_IF([test "x$ftype_cache" = x], [AC_MSG_ERROR([Could not determine C type matching Fortran $1])]) AC_SUBST(AS_TR_SH([F2C_$1_C_TYPE]), [$ftype_cache]) AS_VAR_POPDEF([ftype_cache]) AS_VAR_POPDEF([ftype_size]) ])dnl ga-5-3/m4/ga_check_header.m40000640005473000001440000000142312122367322014412 0ustar d3n000users# GA_CHECK_HEADERS(HEADER-FILE..., # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], [INCLUDES]) # ---------------------------------------------------------------------- # Inspired by # http://pdh11.blogspot.com/2009/04/standard-macros-available-in-gnu.html # but really a modified version of AC_CHECK_HEADERS. AC_DEFUN([GA_CHECK_HEADERS], [m4_map_args_w([$1], [_AH_CHECK_HEADER(], [)])]dnl [AS_FOR([AC_header], [ac_header], [$1], [AC_CHECK_HEADER(AC_header, [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_]AC_header), 1, [Define to 1 if you have the <]AC_header[> header file, 0 if you don't]) $2], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_]AC_header), 0, [Define to 1 if you have the <]AC_header[> header file, 0 if you don't]) $3], [$4])dnl]) ])# GA_CHECK_HEADERS ga-5-3/m4/ga_f77_mismatch_type.m40000640005473000001440000000252712140045175015363 0ustar d3n000users# GA_F77_MISMATCH_TYPE # -------------------- # Determine F77 compiler flags, if any, that are required for compiling code # which uses inconsistent data types for certain function calls. Nearly all # of our Fortran routines are written in C and some are not type safe. # The known flags are: # -mismatch_all: nagfor # -dusty: nagfor # AC_DEFUN([GA_F77_MISMATCH_TYPE], [ AC_CACHE_CHECK([whether $F77 needs a flag to compile inconsistent types], [ga_cv_f77_mismatch_type_flag], [AC_LANG_PUSH([Fortran 77]) for testflag in none "-mismatch_all -dusty" do ga_save_FFLAGS="$FFLAGS" AS_IF([test "x$testflag" != xnone], [FFLAGS="$FFLAGS $testflag"]) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[ integer function the_test () implicit none logical foo external foo character*1 byte_mb integer int_mb the_test = 0 if (foo(byte_mb)) return if (foo( int_mb)) return the_test = 1 return end]])], [ga_cv_f77_mismatch_type_flag="$testflag"]) FFLAGS="$ga_save_FFLAGS" AS_IF([test "x$ga_cv_f77_mismatch_type_flag" != x], [break]) done AC_LANG_POP([Fortran 77])]) AS_IF([test "x$ga_cv_f77_mismatch_type_flag" != xnone], [AS_IF([test "x$ga_cv_f77_mismatch_type_flag" != x], [FFLAGS="$FFLAGS $ga_cv_f77_mismatch_type_flag"])]) ]) # GA_F77_MISMATCH_TYPE ga-5-3/m4/armci_group.m40000640005473000001440000000054711410510454013666 0ustar d3n000users# ARMCI_ENABLE_GROUP # ------------------ # Not sure what this is for. AC_DEFUN([ARMCI_ENABLE_GROUP], [AC_ARG_ENABLE([armci_group], [AS_HELP_STRING([--enable-armci-group], [TODO])], [enable_armci_group=yes AC_DEFINE([ARMCI_GROUP], [1], [TODO])], [enable_armci_group=no]) AM_CONDITIONAL([ARMCI_GROUP], [test x$enable_armci_group = xyes]) ])dnl ga-5-3/m4/ga_cxx.m40000640005473000001440000000045111410510454012622 0ustar d3n000users# GA_CXX_ENABLE() # --------------- # Whether to enable C++ bindings. AC_DEFUN([GA_CXX_ENABLE], [AC_ARG_ENABLE([cxx], [AS_HELP_STRING([--enable-cxx],[build C++ interface])], [enable_cxx=yes], [enable_cxx=no]) AM_CONDITIONAL([CXX_BINDINGS],[test x$enable_cxx = xyes]) ])# GA_CXX_ENABLE ga-5-3/m4/ga_enable_opt.m40000640005473000001440000000034011410510454014125 0ustar d3n000users# GA_ENABLE_OPT() # --------------- AC_DEFUN([GA_ENABLE_OPT], [ AC_ARG_ENABLE([opt], [AS_HELP_STRING([--disable-opt], [don't use hard-coded optimization flags])], [enable_opt=no], [enable_opt=yes]) ])dnl ga-5-3/m4/ga_enable_trace.m40000640005473000001440000000057511410510454014433 0ustar d3n000users# GA_ENABLE_TRACE # --------------- # Whether to enable tracing. AC_DEFINEs ENABLE_TRACE. AC_DEFUN([GA_ENABLE_TRACE], [AC_ARG_ENABLE([trace], [AS_HELP_STRING([--enable-trace], [enable tracing])], [enable_trace=yes AC_DEFINE([ENABLE_TRACE], [1], [Define if tracing is enabled])], [enable_trace=no]) AM_CONDITIONAL([ENABLE_TRACE], [test x$enable_trace = xyes]) ])dnl ga-5-3/m4/ga_target.m40000640005473000001440000001521211577714402013324 0ustar d3n000users# GA_TARGET() # ----------- # Attempt to determine the old TARGET variable automatically. # Deprecated TARGETs: # CRAY-SV1 # cray-sv2 # CRAY-T3E # CRAY-YMP # CYGNUS # DECOSF # HITACHI # INTERIX # SGI # SGI64 # SGI_N32 # SGITFP AC_DEFUN([GA_TARGET], [# AH_TEMPLATE for all known TARGETs AH_TEMPLATE([BGL], [Define to 1 on BlueGene/L systems]) AH_TEMPLATE([BGP], [Define to 1 on BlueGene/P systems]) AH_TEMPLATE([CATAMOUNT], [Define to 1 on Cray XT systems using Catamount]) AH_TEMPLATE([CRAY_SV1], [Define to 1 on Cray SV1 systems]) AH_TEMPLATE([CRAY_SV2], [Define to 1 on Cray SV2 systems]) AH_TEMPLATE([CRAY_T3E], [Define to 1 on Cray T3E systems]) AH_TEMPLATE([CRAY_XT], [Define to 1 on Cray XT systems]) AH_TEMPLATE([CRAY_YMP], [Define to 1 on Cray YMP systems]) AH_TEMPLATE([CYGNUS], [Define to 1 on Cygnus systems]) AH_TEMPLATE([CYGWIN], [Define to 1 on Cygwin systems]) AH_TEMPLATE([DECOSF], [Define to 1 on DEC OSF]) AH_TEMPLATE([FUJITSU_VPP], [Define to 1 on fujitsu systems]) AH_TEMPLATE([FUJITSU_VPP64],[Define to 1 on fujitsu systems]) AH_TEMPLATE([HITACHI], [Define to 1 on hitachi systems]) AH_TEMPLATE([HPUX], [Define to 1 on HP-UX systems]) AH_TEMPLATE([HPUX64], [Define to 1 on 64bit HP-UX systems]) AH_TEMPLATE([IBM], [Define to 1 on IBM SP systems]) AH_TEMPLATE([IBM64], [Define to 1 on 64bit IBM SP systems]) AH_TEMPLATE([INTERIX], [Define to 1 on ??? systems]) AH_TEMPLATE([LAPI], [Define to 1 on IBM systems with LAPI]) AH_TEMPLATE([LAPI64], [Define to 1 on 64bit IBM systems with LAPI]) AH_TEMPLATE([LINUX], [Define to 1 on generic Linux systems]) AH_TEMPLATE([LINUX64], [Define to 1 on generic 64bit Linux systems]) AH_TEMPLATE([MACX], [Define to 1 on OSX systems]) AH_TEMPLATE([MACX64], [Define to 1 on 64bit OSX systems]) AH_TEMPLATE([NEC], [Define to 1 on NEC systems]) AH_TEMPLATE([NEC64], [Define to 1 on 64bit NEC systems]) AH_TEMPLATE([SGI], [Define to 1 on ??? systems]) AH_TEMPLATE([SGI_N32], [Define to 1 on ??? systems]) AH_TEMPLATE([SGITFP], [Define to 1 on ??? systems]) AH_TEMPLATE([SOLARIS], [Define to 1 on Solaris systems]) AH_TEMPLATE([SOLARIS64], [Define to 1 on 64bit Solaris systems]) AC_REQUIRE([AC_CANONICAL_BUILD]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([for TARGET base (64bit-ness checked later)], [ga_cv_target_base], [ga_cv_target_base=UNKNOWN AS_IF([test "x$ga_cv_target_base" = xUNKNOWN], [AS_IF([test -f /bgsys/drivers/ppcfloor/arch/include/common/bgp_personality.h], [ga_cv_target_base=BGP])]) AS_IF([test "x$ga_cv_target_base" = xUNKNOWN], [AS_IF([test -d /bgl/BlueLight/ppcfloor/bglsys/include], [ga_cv_target_base=BGL])]) AS_IF([test "x$ga_cv_target_base" = xUNKNOWN], [AS_CASE([$host], [*bgl*], [ga_cv_target_base=BGL], [*bgp*], [ga_cv_target_base=BGP], #[TODO], [ga_cv_target_base=CATAMOUNT], #[TODO], [ga_cv_target_base=CRAY_XT], [*cygwin*], [ga_cv_target_base=CYGWIN], [*fujitsu*], [ga_cv_target_base=FUJITSU_VPP], [*hpux*], [ga_cv_target_base=HPUX], [*ibm*], [ga_cv_target_base=IBM], #[TODO], [ga_cv_target_base=LAPI], [*linux*], [ga_cv_target_base=LINUX], [*darwin*], [ga_cv_target_base=MACX], [*apple*], [ga_cv_target_base=MACX], [*superux*], [ga_cv_target_base=NEC], [*solaris*], [ga_cv_target_base=SOLARIS])]) ])dnl AC_DEFINE_UNQUOTED([$ga_cv_target_base], [1], [define if this is the TARGET irregardless of whether it is 32/64 bits]) # A horrible hack that should go away somehow... dnl # Only perform this hack for ARMCI build. dnl AS_IF([test "x$ARMCI_TOP_BUILDDIR" != x], [ AC_CACHE_CHECK([whether we think this system is what we call SYSV], [ga_cv_sysv], [AS_CASE([$ga_cv_target_base], [SUN|SOLARIS|SGI|SGI_N32|SGITFP|HPUX|IBM|DECOSF|LINUX|INTERIX|NEC|LAPI], [ga_cv_sysv=yes], [ga_cv_sysv=no]) ]) AS_IF([test x$ga_cv_sysv = xyes], [AC_DEFINE([SYSV], [1], [Define if we want this system to use SYSV shared memory])]) dnl ]) # Hopefully these will never be used and we can remove them soon. AM_CONDITIONAL([BGL], [test "$ga_cv_target_base" = BGL]) AM_CONDITIONAL([BGP], [test "$ga_cv_target_base" = BGP]) AM_CONDITIONAL([CATAMOUNT], [test "$ga_cv_target_base" = CATAMOUNT]) AM_CONDITIONAL([CRAY_SV1], [test "$ga_cv_target_base" = CRAY_SV1]) AM_CONDITIONAL([CRAY_SV2], [test "$ga_cv_target_base" = CRAY_SV2]) AM_CONDITIONAL([CRAY_T3E], [test "$ga_cv_target_base" = CRAY_T3E]) AM_CONDITIONAL([CRAY_XT], [test "$ga_cv_target_base" = CRAY_XT]) AM_CONDITIONAL([CRAY_YMP], [test "$ga_cv_target_base" = CRAY_YMP]) AM_CONDITIONAL([CYGNUS], [test "$ga_cv_target_base" = CYGNUS]) AM_CONDITIONAL([CYGWIN], [test "$ga_cv_target_base" = CYGWIN]) AM_CONDITIONAL([DECOSF], [test "$ga_cv_target_base" = DECOSF]) AM_CONDITIONAL([FUJITSU_VPP], [test "$ga_cv_target_base" = FUJITSU_VPP]) AM_CONDITIONAL([HITACHI], [test "$ga_cv_target_base" = HITACHI]) AM_CONDITIONAL([HPUX], [test "$ga_cv_target_base" = HPUX]) AM_CONDITIONAL([IBM], [test "$ga_cv_target_base" = IBM]) AM_CONDITIONAL([INTERIX], [test "$ga_cv_target_base" = INTERIX]) AM_CONDITIONAL([LAPI], [test "$ga_cv_target_base" = LAPI]) AM_CONDITIONAL([LINUX], [test "$ga_cv_target_base" = LINUX]) AM_CONDITIONAL([MACX], [test "$ga_cv_target_base" = MACX]) AM_CONDITIONAL([NEC], [test "$ga_cv_target_base" = NEC]) AM_CONDITIONAL([SGI], [test "$ga_cv_target_base" = SGI]) AM_CONDITIONAL([SGI_N32], [test "$ga_cv_target_base" = SGI_N32]) AM_CONDITIONAL([SGITFP], [test "$ga_cv_target_base" = SGITFP]) AM_CONDITIONAL([SOLARIS], [test "$ga_cv_target_base" = SOLARIS]) ])dnl # GA_TARGET64() # ------------- # Checking for 64bit platforms requires checking sizeof void*. # That's easy, but doing it too soon causes AC_PROG_F77/C/CXX to get expanded # too soon, and we want to expand those with a better list of compilers # based on our current TARGET. Therefore, we must do this 64bit test later. AC_DEFUN([GA_TARGET64], [AC_REQUIRE([GA_TARGET]) AC_COMPUTE_INT([ga_target64_sizeof_voidp], [(long int) (sizeof (void*))]) AC_CACHE_CHECK([for TARGET 64bit-ness], [ga_cv_target], [AS_IF([test x$ga_target64_sizeof_voidp = x8], [ga_cv_target=${ga_cv_target_base}64], [ga_cv_target=$ga_cv_target_base])]) AC_DEFINE_UNQUOTED([$ga_cv_target], [1], [define if this is the TARGET, 64bit-specific]) ])dnl ga-5-3/m4/ga_progname.m40000640005473000001440000000161711532037770013647 0ustar d3n000users# GA_PROGNAME # ----------- # Look for special global variables containing the name of the program. AC_DEFUN([GA_PROGNAME], [AC_CACHE_CHECK([for C global variable containing the name of the program], [ga_cv_progname], [AC_LANG_PUSH([C]) ga_cv_progname=none for name in __progname program_invocation_short_name __progname_full program_invocation_name do AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include #include extern const char * $name;]], [[printf("%s\n", $name);]])], [ga_cv_progname=$name break]) done AC_LANG_POP([C])]) AS_IF([test x$ga_cv_progname != xnone], [val=1], [val=0]) AC_DEFINE_UNQUOTED([HAVE_PROGNAME], [$val], [define to 1 if the C compiler has a program name global varaible]) AC_DEFINE_UNQUOTED([PROGNAME], [$ga_cv_progname], [define to the name of the program name global variable]) ])dnl ga-5-3/m4/ma_verify.m40000640005473000001440000000021111410510454013324 0ustar d3n000users# MA_VERIFY # --------- # Simply AC_DEFINEd. AC_DEFUN([MA_VERIFY], [AC_DEFINE([VERIFY], [1], [This is always defined. Dunno why.]) ])dnl ga-5-3/m4/ga_f77_opt.m40000640005473000001440000000647711633714777013350 0ustar d3n000users# GA_F77_OPT() # ------------ # Determine TARGET-/compiler-specific FFLAGS for optimization. AC_DEFUN([GA_F77_OPT], [ AC_REQUIRE([GA_TARGET64]) AC_REQUIRE([GA_ENABLE_OPT]) AC_ARG_VAR([GA_FOPT], [GA Fortran 77 optimization flags]) AC_CACHE_CHECK([for specific Fortran optimizations], [ga_cv_f77_opt], [ AS_IF([test "x$GA_FOPT" != x], [ga_cv_f77_opt="$GA_FOPT"], [ga_cv_f77_opt=]) AS_IF([test "x$ga_cv_f77_opt" = x && test "x$enable_opt" = xyes], [ AS_CASE([$ga_cv_target:$ga_cv_f77_compiler_vendor:$host_cpu], [BGL:*:*], [ga_cv_f77_opt="-O0"], [BGP:ibm:*], [ga_cv_f77_opt="-O3 -qstrict -qarch=450 -qtune=450"], [BGP:gnu:*], [ga_cv_f77_opt="-O2"], [CATAMOUNT:*:*], [ga_cv_f77_opt="-O3"], [CRAY_XT:*:*], [ga_cv_f77_opt=], [CYGWIN:*:*], [ga_cv_f77_opt=], [FUJITSU_VPP64:*:*], [ga_cv_f77_opt="-Sw"], [FUJITSU_VPP:*:*], [ga_cv_f77_opt="-Sw -KA32"], [HPUX64:*:*], [ga_cv_f77_opt="-O1"], [HPUX64:*:ia64], [ga_cv_f77_opt="-O1"], [HPUX:*:*], [ga_cv_f77_opt="-O1"], [IBM64:*:*], [ga_cv_f77_opt="-qarch=auto"], [IBM:*:*], [ga_cv_f77_opt="-qarch=auto"], [LAPI64:*:*], [ga_cv_f77_opt="-qarch=auto"], [LAPI:*:*], [ga_cv_f77_opt="-qarch=auto"], [LINUX64:*:alpha], [ga_cv_f77_opt="-align_dcommons -fpe3 -check nooverflow -assume accuracy_sensitive -check nopower -check nounderflow"], [LINUX64:fujitsu:ia64], [ga_cv_f77_opt="-Kfast -X9 -Am -fw"], [LINUX64:fujitsu:x86_64], [ga_cv_f77_opt="-Kfast -X9 -Am -fw"], [LINUX64:gnu:x86_64], [ga_cv_f77_opt="-O"], [LINUX64:ibm:x86_64], [ga_cv_f77_opt=], [LINUX64:intel:ia64], [ga_cv_f77_opt="-cm -w90 -w95 -align"], [LINUX64:intel:powerpc64], [ga_cv_f77_opt=], [LINUX64:intel:ppc64], [ga_cv_f77_opt=], [LINUX64:intel:x86_64], [ga_cv_f77_opt="-O3 -w -cm -xW -tpp7"], [LINUX64:portland:x86_64], [ga_cv_f77_opt="-Mdalign"], [LINUX:fujitsu:*], [ga_cv_f77_opt="-Kfast -X9 -Am -fw"], [LINUX:gnu:786], [ga_cv_f77_opt="-O2 -funroll-loops -malign-double"], [LINUX:gnu:*], [ga_cv_f77_opt="-O2 -funroll-loops"], [LINUX:gnu:x86], [ga_cv_f77_opt="-O2 -funroll-loops -malign-double"], [LINUX:ibm:*], [ga_cv_f77_opt="-q32"], [LINUX:intel:*], [ga_cv_f77_opt="-O3 -prefetch -w -cm"], [LINUX:portland:*], [ga_cv_f77_opt="-Mdalign -Minform,warn -Mnolist -Minfo=loop -Munixlogical"], [MACX64:ibm:*], [ga_cv_f77_opt=], [MACX64:intel:*], [ga_cv_f77_opt="-O3 -prefetch -w -cm"], [MACX:gnu:*], [ga_cv_f77_opt="-O3 -funroll-loops"], [MACX:intel:*], [ga_cv_f77_opt="-O3 -prefetch -w -cm"], [NEC64:*:*], [ga_cv_f77_opt="-Cvsafe -size_t64"], [NEC:*:*], [ga_cv_f77_opt="-Cvsafe"], [SOLARIS64:fujitsu:*], [ga_cv_f77_opt="-fw -Kfast -KV9FMADD"], [SOLARIS64:gnu:*], [ga_cv_f77_opt="-xs -dalign -xarch=v9"], [SOLARIS64:gnu:i386], [ga_cv_f77_opt="-xs -dalign -xarch=amd64"], [SOLARIS:fujitsu:*], [ga_cv_f77_opt="-fw -Kfast -KV8PFMADD"], [SOLARIS:gnu:*], [ga_cv_f77_opt="-xs -dalign"], [SOLARIS:gnu:i386], [ga_cv_f77_opt="-xs -dalign -xarch=sse2"], [ga_cv_f77_opt=]) ])]) AC_SUBST([GA_FOPT], [$ga_cv_f77_opt]) ])dnl ga-5-3/m4/ga_mpicxx_test.m40000640005473000001440000000431611410510454014373 0ustar d3n000users# GA_MPICXX_TEST # -------------- # Attempt to compile a simple MPI program in C++. # AC_DEFUN([GA_MPICXX_TEST], [ AS_IF([test "x$with_mpi" != xno], [ AC_LANG_PUSH([C++]) AC_CACHE_CHECK([whether a simple C++ MPI program works], [ga_cv_cxx_mpi_test], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize();]])], [ga_cv_cxx_mpi_test=yes], [ga_cv_cxx_mpi_test=no]) # That didn't work, so now let's try with our GA_MP_* flags. AS_IF([test "x$ga_cv_cxx_mpi_test" = xno], [ ga_save_LIBS="$LIBS"; LIBS="$LIBS $GA_MP_LIBS" ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize();]])], [ga_cv_cxx_mpi_test=yes], [ga_cv_cxx_mpi_test=no]) LIBS="$ga_save_LIBS" CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" ]) # That didn't work, so now let's try with our GA_MP_* flags and various libs. AS_IF([test "x$ga_cv_cxx_mpi_test" = xno], [ for lib in -lmpi -lmpich; do ga_save_LIBS="$LIBS"; LIBS="$LIBS $GA_MP_LIBS $lib" ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize();]])], [ga_cv_cxx_mpi_test=$lib; break], [ga_cv_cxx_mpi_test=no]) LIBS="$ga_save_LIBS" CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" done LIBS="$ga_save_LIBS" CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" ]) ]) AC_LANG_POP([C++]) AS_CASE([$ga_cv_cxx_mpi_test], [yes], [], [no], [AC_MSG_FAILURE([could not link simple C++ MPI program])], [*], [GA_MP_LIBS="$ga_cv_cxx_mpi_test"], []) ]) ])dnl ga-5-3/m4/ga_enable_peigs.m40000640005473000001440000000076511503767531014462 0ustar d3n000users# GA_ENABLE_PEIGS # --------------- # Whether to enable PeIGS routines. AC_DEFUN([GA_ENABLE_PEIGS], [AC_ARG_ENABLE([peigs], [AS_HELP_STRING([--enable-peigs], [enable Parallel Eigensystem Solver interface])], [], [enable_peigs=no]) AS_IF([test "x$enable_peigs" = xno], [AC_DEFINE([ENABLE_PEIGS], [0], [Define to 1 if PeIGS is enabled])], [AC_DEFINE([ENABLE_PEIGS], [1], [Define to 1 if PeIGS is enabled])]) AM_CONDITIONAL([ENABLE_PEIGS], [test x$enable_peigs = xyes]) ])dnl ga-5-3/m4/ga_f77_check_sizeof.m40000640005473000001440000000316311476275673015171 0ustar d3n000users# GA_F77_COMPUTE_SIZEOF(TYPE, VARIABLE) # ------------------------------------- AC_DEFUN([GA_F77_COMPUTE_SIZEOF], [AC_F77_FUNC([size]) AC_LANG_PUSH([C]) AC_COMPILE_IFELSE([AC_LANG_SOURCE( [[#include #include #ifdef __cplusplus extern "C" { #endif void $size(char *a, char *b) { long diff = (long) (b - a); FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%ld\n", diff); fclose(f); } #ifdef __cplusplus } #endif]])], [mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $[]_AC_LANG_PREFIX[]LIBS" AC_LANG_PUSH([Fortran 77]) AC_RUN_IFELSE( [[ program main external size $1 x(2) call size(x(1),x(2)) end]], [AS_TR_SH([$2])=`cat conftestval`], [AS_TR_SH([$2])=no]) AC_LANG_POP([Fortran 77]) LIBS=$ga_save_LIBS rm -f cfortran_test*], [AS_TR_SH([$2])=no]) AC_LANG_POP([C]) rm -rf conftest* ]) # GA_F77_COMPUTE_SIZEOF # GA_F77_CHECK_SIZEOF(TYPE, CROSS-SIZE) # ------------------------------------- AC_DEFUN([GA_F77_CHECK_SIZEOF], [AS_VAR_PUSHDEF([type_var], [ga_cv_f77_sizeof_$1]) AC_CACHE_CHECK([size of Fortran $1], type_var, [AS_IF([test x$cross_compiling = xyes], [AS_VAR_SET(type_var, [$2])], [GA_F77_COMPUTE_SIZEOF([$1], type_var)])]) AS_IF([test x$cross_compiling = xyes], [AC_MSG_WARN([Cannot determine size of $1 when cross-compiling.]) AC_MSG_WARN([Defaulting to $2])]) AC_DEFINE_UNQUOTED(AS_TR_CPP(sizeof_f77_$1), $type_var, [The size of '$1' as computed by C's sizeof.]) AS_VAR_POPDEF([type_var]) ])# GA_F77_SIZEOF ga-5-3/m4/armci_f77_opt.m40000640005473000001440000001160311633714777014037 0ustar d3n000users# ARMCI_F77_OPT() # --------------- # Determine TARGET-/compiler-specific FFLAGS for optimization. AC_DEFUN([ARMCI_F77_OPT], [ AC_REQUIRE([GA_TARGET64]) AC_REQUIRE([GA_ENABLE_OPT]) AC_REQUIRE([GA_ARMCI_NETWORK]) AC_ARG_VAR([ARMCI_FOPT], [ARMCI Fortran 77 optimization flags]) AC_CACHE_CHECK([for specific Fortran optimizations], [armci_cv_f77_opt], [ AS_IF([test "x$ARMCI_FOPT" != x], [armci_cv_f77_opt="$ARMCI_FOPT"], [armci_cv_f77_opt=]) AS_IF([test "x$armci_cv_f77_opt" = x && test "x$enable_opt" = xyes], [ AS_CASE([$ga_cv_target:$ga_cv_f77_compiler_vendor:$host_cpu:$ga_armci_network], [BGL:*:*:*], [armci_cv_f77_opt="-O0"], [BGP:ibm:*:*], [armci_cv_f77_opt="-O3 -qstrict -qarch=450 -qtune=450"], [BGP:gnu:*:*], [armci_cv_f77_opt="-O2"], [CATAMOUNT:*:*:*], [armci_cv_f77_opt="-O3"], [CRAY_XT:*:*:*], [armci_cv_f77_opt=], [CYGWIN:*:*:*], [armci_cv_f77_opt=], [FUJITSU_VPP64:*:*:*], [armci_cv_f77_opt="-Sw"], [FUJITSU_VPP:*:*:*], [armci_cv_f77_opt="-Sw -KA32"], [HPUX64:*:*:*], [armci_cv_f77_opt="-O3 +Odataprefetch +Ofastaccess"], [HPUX64:*:ia64:*], [armci_cv_f77_opt=], [HPUX:*:*:*], [armci_cv_f77_opt="-O3 +Odataprefetch"], [IBM64:*:*:*], [armci_cv_f77_opt=], [IBM:*:*:*], [armci_cv_f77_opt="-O4 -qarch=auto -qstrict"], [LAPI64:*:*:*], [armci_cv_f77_opt=], [LAPI:*:*:*], [armci_cv_f77_opt=], [LINUX64:fujitsu:ia64:OPENIB], [armci_cv_f77_opt="-Kfast -X9 -Am -fw -Kthreadsafe"], [LINUX64:fujitsu:ia64:*], [armci_cv_f77_opt="-Kfast -X9 -Am -fw"], [LINUX64:fujitsu:x86_64:OPENIB],[armci_cv_f77_opt="-Kfast -X9 -Am -fw -Kthreadsafe"], [LINUX64:fujitsu:x86_64:*], [armci_cv_f77_opt="-Kfast -X9 -Am -fw"], [LINUX64:gnu:x86_64:*], [armci_cv_f77_opt="-fstrength-reduce -mfpmath=sse"], [LINUX64:ibm:powerpc64:*], [armci_cv_f77_opt="-O4 -qarch=auto -qstrict"], [LINUX64:ibm:ppc64:*], [armci_cv_f77_opt="-O4 -qarch=auto -qstrict"], [LINUX64:intel:ia64:*], [armci_cv_f77_opt="-O3 -hlo -ftz -pad -w -cm -w90"], [LINUX64:intel:x86_64:*], [armci_cv_f77_opt="-O3 -w -cm -xW -tpp7"], [LINUX64:pathscale:x86_64:*], [armci_cv_f77_opt="-O3 -OPT:Ofast"], [LINUX64:portland:x86_64:*], [armci_cv_f77_opt="-fast -Mdalign -O3"], [LINUX64:sgi:ia64:*], [armci_cv_f77_opt="-macro-expand"], [LINUX64:unknown:ia64:*], [armci_cv_f77_opt="-assume no2underscore -fpe3 -check nooverflow -assume accuracy_sensitive -check nopower -check nounderflow"], [LINUX:fujitsu:*:OPENIB], [armci_cv_f77_opt="-Kfast -X9 -Am -fw -Kthreadsafe"], [LINUX:fujitsu:*:*], [armci_cv_f77_opt="-Kfast -X9 -Am -fw"], [LINUX:gnu:686:*], [armci_cv_f77_opt="-O3 -funroll-loops -march=pentiumpro -malign-double"], [LINUX:gnu:686:MELLANOX], [armci_cv_f77_opt="-O3 -funroll-loops -march=pentiumpro"], [LINUX:gnu:686:OPENIB], [armci_cv_f77_opt="-O3 -funroll-loops -march=pentiumpro"], [LINUX:gnu:786:*], [armci_cv_f77_opt="-O3 -funroll-loops -march=pentiumpro -malign-double"], [LINUX:gnu:786:MELLANOX], [armci_cv_f77_opt="-O3 -funroll-loops -march=pentiumpro"], [LINUX:gnu:786:OPENIB], [armci_cv_f77_opt="-O3 -funroll-loops -march=pentiumpro"], [LINUX:gnu:x86:*], [armci_cv_f77_opt="-O3 -funroll-loops -malign-double"], [LINUX:gnu:x86:MELLANOX], [armci_cv_f77_opt="-O3 -funroll-loops"], [LINUX:gnu:x86:OPENIB], [armci_cv_f77_opt="-O3 -funroll-loops"], [LINUX:intel:686:*], [armci_cv_f77_opt="-O4 -prefetch -unroll -ip -xK -tpp6"], [LINUX:intel:786:*], [armci_cv_f77_opt="-O4 -prefetch -unroll -ip -xW -tpp7"], [LINUX:intel:*:*], [armci_cv_f77_opt="-O4 -prefetch -unroll -ip"], [LINUX:intel:k7:*], [armci_cv_f77_opt="-O4 -prefetch -unroll -ip -xM"], [LINUX:portland:686:*], [armci_cv_f77_opt="-Mvect -Munroll -Mdalign -Minform,warn -Mnolist -Minfo=loop -Munixlogical -tp p6"], [LINUX:portland:*:*], [armci_cv_f77_opt="-Mvect -Munroll -Mdalign -Minform,warn -Mnolist -Minfo=loop -Munixlogical"], [MACX64:intel:*:*], [armci_cv_f77_opt="-O3 -prefetch -w -cm"], [MACX:*:*:*], [armci_cv_f77_opt=], [NEC64:*:*:*], [armci_cv_f77_opt="-Cvsafe -size_t64"], [NEC:*:*:*], [armci_cv_f77_opt="-Cvsafe"], [SOLARIS64:fujitsu:*:*], [armci_cv_f77_opt="-fw -Kfast -KV8PFMADD"], [SOLARIS64:gnu:*:*], [armci_cv_f77_opt="-dalign"], [SOLARIS64:gnu:i386:*], [armci_cv_f77_opt="-dalign -xarch=sse2"], [SOLARIS:fujitsu:*:*], [armci_cv_f77_opt="-fw -Kfast -KV8PFMADD"], [SOLARIS:gnu:*:*], [armci_cv_f77_opt="-dalign"], [SOLARIS:gnu:i386:*], [armci_cv_f77_opt="-dalign -xarch=sse2"], [armci_cv_f77_opt=]) ])]) AC_SUBST([ARMCI_FOPT], [$armci_cv_f77_opt]) ])dnl ga-5-3/m4/ga_as.m40000640005473000001440000000061311504211742012425 0ustar d3n000users# GA_AS # ----- # Certain systems may require specific assemblers (instead of $CC). # # Known assemblers: # sxas - special to NEC/NEC64 # AC_DEFUN([GA_AS], [ AS_IF([test "x$CCAS" = x], [AS_CASE([$ga_cv_target], [NEC|NEC64], [CCAS=sxas])]) AS_IF([test "x$CCASFLAGS" = x], [AS_CASE([$ga_cv_target], [NEC], [CCASFLAGS=], [NEC64], [CCASFLAGS="-h size_t64"])]) ])dnl ga-5-3/m4/ga_f77_flush.m40000640005473000001440000000311011524546300013624 0ustar d3n000users# GA_F77_FLUSH # ------------ # Check whether the function "flush" is available. If not, try various flags # in order to link to it successfully. Otherwise look for the "forflush" # function. Add any appropriate flags to FFLAGS as needed and define # F77_FLUSH to the name of the appropriate function. # If flush routine is available set HAVE_F77_FLUSH to 1, otherwise 0. AC_DEFUN([GA_F77_FLUSH], [ AC_CACHE_CHECK([for $F77 flush routine], [ga_cv_f77_flush], [AC_LANG_PUSH([Fortran 77]) for testflag in none -qextname=flush ; do ga_save_FFLAGS=$FFLAGS AS_IF([test "x$testflag" != xnone], [FFLAGS="$FFLAGS $testflag"]) AC_LINK_IFELSE([AC_LANG_SOURCE( [[ call flush(13) end program]])], [ga_cv_f77_flush_flag=$testflag]) FFLAGS=$ga_save_FFLAGS AS_IF([test "x$ga_cv_f77_flush_flag" != x], [break]) done AS_IF([test "x$ga_cv_f77_flush_flag" != x], [ga_cv_f77_flush=flush], [AC_LINK_IFELSE([AC_LANG_SOURCE( [[ call forflush(13) end program]])], [ga_cv_f77_flush=forflush])]) AC_LANG_POP([Fortran 77])]) AS_IF([test "x$ga_cv_f77_flush" != x], [AC_DEFINE_UNQUOTED([F77_FLUSH], [$ga_cv_f77_flush], [Name of F77 flush routine]) AC_DEFINE([HAVE_F77_FLUSH], [1], [whether F77 flush routine is available])], [AC_MSG_WARN([Could not determine name of $F77 flush routine]) AC_DEFINE([HAVE_F77_FLUSH], [0], [whether F77 flush routine is available])]) AS_IF([test "x$ga_cv_f77_flush" = xflush], [AS_IF([test "x$ga_cv_f77_flush_flag" != xnone], [FFLAGS="$FFLAGS $ga_cv_f77_flush_flag"])]) ]) # GA_F77_FLUSH ga-5-3/m4/ga_check_libplot.m40000640005473000001440000000055611410510454014630 0ustar d3n000users# GA_CHECK_LIBPLOT([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ---------------------------------------------------------- # Check for libplot. Thus far it's only used by tcgmsg. AC_DEFUN([GA_CHECK_LIBPLOT], [AC_CHECK_LIB([plot], [openpl], [PLOTLIB=-lplot AC_SUBST([PLOTLIB]) AC_DEFINE([HAVE_LIBPLOT], [1], [Defined if plot library is available])]) ])dnl ga-5-3/m4/ga_cross_compiling.m40000640005473000001440000000117611577714402015234 0ustar d3n000users# GA_CROSS_COMPILING # ------------------ # The standard check for whether we are cross compiling is not sufficient. # We know certain platforms are only cross compiled. Make the fix here. # This could be expanded later to avoid using GA_TARGET and instead perform # a more rigorous cross compiling test case. AC_DEFUN([GA_CROSS_COMPILING], [ AC_REQUIRE([GA_TARGET]) AC_CACHE_CHECK([whether we are cross compiling], [ga_cv_cross_compiling], [AS_IF([test "x$ga_cv_target_base" = xBGP], [cross_compiling=yes]) ga_cv_cross_compiling=$cross_compiling]) AM_CONDITIONAL([CROSS_COMPILING], [test "x$cross_compiling" = xyes]) ])dnl ga-5-3/m4/ga_cxx_namespaces.m40000640005473000001440000000105111430612245015021 0ustar d3n000users# GA_CXX_NAMESPACES AC_DEFUN([GA_CXX_NAMESPACES], [AC_CACHE_CHECK([whether the compiler implements namespaces], [ga_cv_cxx_namespaces], [AC_LANG_PUSH([C++]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[namespace Outer { namespace Inner { int i = 0; }}]], [[using namespace Outer::Inner; return i;]])], [ga_cv_cxx_namespaces=yes], [ga_cv_cxx_namespaces=no]) AC_LANG_POP([C++])]) AS_IF([test x$ga_cv_cxx_namespaces = xyes], [AC_DEFINE([HAVE_NAMESPACES], [1], [define if the compiler implements namespaces])]) ])#GA_CXX_NAMESPACES ga-5-3/m4/armci_enable_gpc.m40000640005473000001440000000102211442330412014575 0ustar d3n000users# ARMCI_ENABLE_GPC # ---------------- # Whether to enable GPC calls in ARMCI. AC_DEFUN([ARMCI_ENABLE_GPC], [ AC_ARG_ENABLE([gpc], [AS_HELP_STRING([--enable-gpc], [enable GPC calls])], [enable_gpc=yes], [enable_gpc=no]) AS_IF([test $enable_gpc = yes], [AC_DEFINE([ARMCI_ENABLE_GPC_CALLS], [1], [Define to 1 if GPC calls are enabled])], [AC_DEFINE([ARMCI_ENABLE_GPC_CALLS], [0], [Define to 1 if GPC calls are enabled])]) AM_CONDITIONAL([ARMCI_ENABLE_GPC_CALLS], [test x$enable_gpc = xyes]) ])dnl ga-5-3/m4/ga_mpif77.m40000640005473000001440000001211411644670644013151 0ustar d3n000users# GA_PROG_MPIF77 # ----------------- # If desired, replace F77 with MPIF77 while searching for a Fortran 77 compiler. # We look for 95/90 compilers first so that we can control the INTEGER size. # The search order changes depending on the TARGET. # # NOTE: We prefer "FC" and "FCFLAGS" over "F77" and "FFLAGS", respectively. # But our Fortran source is only Fortran 77. If FC/MPIFC is set, it is # preferred above all. # # Known Fortran 95 compilers: # bgxlf95 IBM BlueGene/P F95 cross-compiler # blrts_xlf95 IBM BlueGene/L F95 cross-compiler # efc Intel Fortran 95 compiler for IA64 # f95 generic compiler name # fort Compaq/HP Fortran 90/95 compiler for Tru64 and Linux/Alpha # ftn native Fortran 95 compiler on Cray X1,XT4,XT5 # g95 original gcc-based f95 compiler (gfortran is a fork) # gfortran GNU Fortran 95+ compiler (released in gcc 4.0) # ifc Intel Fortran 95 compiler for Linux/x86 (now ifort) # ifort Intel Fortran 95 compiler for Linux/x86 (was ifc) # lf95 Lahey-Fujitsu F95 compiler # pghpf/pgf95 Portland Group F95 compiler # xlf95 IBM (AIX) F95 compiler # pathf95 PathScale # openf95 AMD's x86 open64 # sunf95 Sun's Studio # crayftn Cray # # Known MPI Fortran 95 compilers: # cmpifc ?? not sure if this is even F95 # ftn native Fortran 95 compiler on Cray XT4,XT5 # mpif95 generic compiler name # mpixlf95 IBM BlueGene/P Fortran 95 # mpixlf95_r IBM BlueGene/P Fortran 95, reentrant code # mpxlf95 IBM BlueGene/L Fortran 95 # mpxlf95_r IBM BlueGene/L Fortran 95, reentrant code # # Known Fortran 90 compilers: # blrts_xlf90 IBM BlueGene/L F90 cross-compiler # epcf90 "Edinburgh Portable Compiler" F90 # f90 generic compiler name # fort Compaq/HP Fortran 90/95 compiler for Tru64 and Linux/Alpha # pgf90 Portland Group F90 compiler # xlf90 IBM (AIX) F90 compiler # pathf90 PathScale # sxf90 NEC SX Fortran 90 # openf90 AMD's x86 open64 # sunf90 Sun's Studio # # Known MPI Fortran 90 compilers: # cmpif90c ?? # mpf90 ?? # mpif90 generic compiler name # mpxlf90 IBM BlueGene/L Fortran 90 # mpxlf90_r IBM BlueGene/L Fortran 90, reentrant code # sxmpif90 NEC SX Fortran 90 # # Known Fortran 77 compilers: # af77 Apogee F77 compiler for Intergraph hardware running CLIX # blrts_xlf IBM BlueGene/L F77 cross-compiler # cf77 native F77 compiler under older Crays (prefer over fort77) # f77 generic compiler names # fl32 Microsoft Fortran 77 "PowerStation" compiler # fort77 native F77 compiler under HP-UX (and some older Crays) # frt Fujitsu F77 compiler # g77 GNU Fortran 77 compiler # pgf77 Portland Group F77 compiler # xlf IBM (AIX) F77 compiler # pathf77 PathScale # # Known MPI Fortran 77 compilers: # hf77 ?? # mpf77 ?? # mpif77 generic compiler name # mpxlf IBM BlueGene/L Fortran 77 # mpxlf_r IBM BlueGene/L Fortran 77, reentrant code # mpifrt Fujitsu # AC_DEFUN([GA_PROG_MPIF77], [AC_ARG_VAR([MPIF77], [MPI Fortran 77 compiler]) AS_CASE([$ga_cv_target_base], [BGP], [ga_mpif77_pref=mpixlf77_r;ga_f77_pref=bgxlf_r], [BGL], [ga_mpif77_pref=mpxlf95; ga_f77_pref=blrts_xlf95], []) # If FC is set, override F77. Similarly for MPIFC/MPIF77 and FCFLAGS/FFLAGS. AS_IF([test "x$FC" != x], [F77="$FC"]) AS_IF([test "x$MPIFC" != x], [MPIF77="$MPIFC"]) AS_IF([test "x$FCFLAGS" != x], [FFLAGS="$FCFLAGS"]) # In the case of using MPI wrappers, set F77=MPIF77 since F77 will override # absolutely everything in our list of compilers. # Save F77, just in case. AS_IF([test x$with_mpi_wrappers = xyes], [AS_IF([test "x$F77" != "x$MPIF77"], [ga_orig_F77="$F77"]) AS_CASE([x$F77:x$MPIF77], [x:x], [], [x:x*], [F77="$MPIF77"], [x*:x], [AC_MSG_WARN([MPI compilers desired but F77 is set while MPIF77 is unset.]) AC_MSG_WARN([F77 will be ignored during compiler selection, but will be]) AC_MSG_WARN([tested first during MPI compiler unwrapping. Perhaps you]) AC_MSG_WARN([meant to set MPIF77 instead of or in addition to F77?]) F77=], [x*:x*], [AS_IF([test "x$F77" != "x$MPIF77"], [AC_MSG_WARN([MPI compilers desired, MPIF77 and F77 are set, and MPIF77!=F77.]) AC_MSG_WARN([Choosing MPIF77 over F77.]) AC_MSG_WARN([F77 will be tested first during MPI compiler unwrapping.])]) F77="$MPIF77"], [AC_MSG_ERROR([F77/MPIF77 case failure])])]) ga_mpif95="mpif95 mpxlf95_r mpxlf95 ftn" ga_mpif90="mpif90 mpxlf90_r mpxlf90 mpf90 cmpif90c sxmpif90" ga_mpif77="mpif77 hf77 mpxlf_r mpxlf mpifrt mpf77 cmpifc" ga_f95="xlf95 pgf95 pathf95 ifort g95 f95 fort ifc efc openf95 sunf95 crayftn gfortran lf95 ftn" ga_f90="xlf90 f90 pgf90 pghpf pathf90 epcf90 sxf90 openf90 sunf90" ga_f77="xlf f77 frt pgf77 pathf77 g77 cf77 fort77 fl32 af77" AS_IF([test x$with_mpi_wrappers = xyes], [F77_TO_TEST="$ga_mpif77_pref $ga_mpif95 $ga_mpif90 $ga_mpif77"], [F77_TO_TEST="$ga_f77_pref $ga_f95 $ga_f90 $ga_f77"]) AC_PROG_F77([$F77_TO_TEST]) ])dnl ga-5-3/m4/ga_arg_parse.m40000640005473000001440000000675212247166641014013 0ustar d3n000users# GA_ARG_PARSE(ARG, VAR_LIBS, VAR_LDFLAGS, VAR_CPPFLAGS) # ------------------------------------------------------ # Parse whitespace-separated ARG into appropriate LIBS, LDFLAGS, and # CPPFLAGS variables. # some examples (not exhaustive): # $arg="/apps/mpi/hp/2.03.01.00/include/64 /apps/mpi/hp/2.03.01.00/lib/linux_amd64 -lmtmpi" # $arg="/usr/local" # $arg="-I/usr/local/include -L/usr/local/lib -lsomelib" # $arg="/usr/lib/mpich-shmem -lfmpich-shmem -lmpich-shmem -lpmpich-shmem" # $arg="/usr/lib/mpich-shmem/include /usr/lib/mpich-shmem/lib -lfmpich-shmem -lmpich-shmem -lpmpich-shmem" # $arg="/usr/local/lib64 /usr/local/include64" # # Special Cases: # -mkl[=arg] Intel compiler with special -mkl flag for headers and linking AC_DEFUN([GA_ARG_PARSE], [AC_COMPUTE_INT([ga_arg_parse_sizeof_voidp], [(long int) (sizeof (void*))]) for arg in $$1 ; do AS_CASE([$arg], [yes], [], [no], [], [-l*], [$2="$$2 $arg"], [-L*], [$3="$$3 $arg"], [-WL*], [$3="$$3 $arg"], [-Wl*], [$3="$$3 $arg"], [-I*], [$4="$$4 $arg"], [*.a], [$2="$$2 $arg"], [*.so], [$2="$$2 $arg"], [*lib], [AS_IF([test -d $arg], [$3="$$3 -L$arg"], [AC_MSG_WARN([$arg of $1 not parsed])])], [*lib/], [AS_IF([test -d $arg], [$3="$$3 -L$arg"], [AC_MSG_WARN([$arg of $1 not parsed])])], [*lib64], [AS_IF([test -d $arg], [$3="$$3 -L$arg"], [AC_MSG_WARN([$arg of $1 not parsed])])], [*lib64/], [AS_IF([test -d $arg], [$3="$$3 -L$arg"], [AC_MSG_WARN([$arg of $1 not parsed])])], [*include], [AS_IF([test -d $arg], [$4="$$4 -I$arg"], [AC_MSG_WARN([$arg of $1 not parsed])])], [*include/], [AS_IF([test -d $arg], [$4="$$4 -I$arg"], [AC_MSG_WARN([$arg of $1 not parsed])])], [*include64], [AS_IF([test -d $arg], [$4="$$4 -I$arg"], [AC_MSG_WARN([$arg of $1 not parsed])])], [*include64/], [AS_IF([test -d $arg], [$4="$$4 -I$arg"], [AC_MSG_WARN([$arg of $1 not parsed])])], [-mkl*], [$2="$$2 $arg"], [ga_arg_parse_ok=no]) # $arg didn't fit the most common cases # check for subdirectories e.g. lib,include AS_IF([test "x$ga_arg_parse_ok" = xno], [AS_IF([test "x$ga_arg_parse_sizeof_voidp" = x8], [AS_IF([test -d $arg/lib64], [$3="$$3 -L$arg/lib64"; ga_arg_parse_ok=yes], [test -d $arg/lib], [$3="$$3 -L$arg/lib"; ga_arg_parse_ok=yes]) AS_IF([test -d $arg/include64],[$4="$$4 -I$arg/include64"; ga_arg_parse_ok=yes], [test -d $arg/include], [$4="$$4 -I$arg/include"; ga_arg_parse_ok=yes])], [AS_IF([test -d $arg/lib], [$3="$$3 -L$arg/lib"; ga_arg_parse_ok=yes]) AS_IF([test -d $arg/include], [$4="$$4 -I$arg/include"; ga_arg_parse_ok=yes])])]) # $arg still unknown, look for "lib" and "include" anywhere... AS_IF([test "x$ga_arg_parse_ok" = xno], [AS_CASE([$arg], [*lib*], [AS_IF([test -d $arg], [$3="$$3 -L$arg"; ga_arg_parse_ok=yes])], [*include*],[AS_IF([test -d $arg], [$4="$$4 -I$arg"; ga_arg_parse_ok=yes])])]) # warn user that $arg fell through AS_IF([test "x$ga_arg_parse_ok" = xno], [AC_MSG_WARN([$arg of $1 not parsed])]) done])dnl ga-5-3/m4/ga_f2c_nomain.m40000640005473000001440000000262711650371744014057 0ustar d3n000users# GA_F2C_NOMAIN # --------------- # In mixed Fortran/C code, the Fortran linker should be used. This is the # default behavior of automake when it selects the appropriate linker. # However, if "main" is defined in a C source file but linked by Fortran, # there could be problems if the Fortran linker attempts to link its own main # routine. Look for a flag to disable this behavior. AC_DEFUN([GA_F2C_NOMAIN], [AC_CACHE_CHECK([for flag to disable $F77 main when linking with C main], [ga_cv_fld_nomain], [AC_LANG_PUSH([C]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([],[])], [mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS" AC_LANG_PUSH([Fortran 77]) for flag in none -nofor-main -nofor_main -Mnomain -mlcmain=main; do ga_save_FFLAGS=$FFLAGS AS_IF([test "x$flag" != xnone], [FFLAGS="$FFLAGS $flag"]) AC_LINK_IFELSE( [AC_LANG_SOURCE( [[ subroutine donothing() end]])], [ga_cv_fld_nomain=$flag]) FFLAGS=$ga_save_FFLAGS AS_IF([test "x$ga_cv_fld_nomain" != x], [break]) done AC_LANG_POP([Fortran 77]) LIBS=$ga_save_LIBS rm -f cfortran_test.$ac_objext]) AC_LANG_POP([C])]) AS_IF([test "x$ga_cv_fld_nomain" != xnone], [AC_SUBST([FLD_NOMAIN], [$ga_cv_fld_nomain])]) ]) # GA_F2C_NOMAIN ga-5-3/m4/lt_obsolete.m40000640005473000001440000001375611410511426013700 0ustar d3n000users# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) ga-5-3/m4/ga_check_func.m40000640005473000001440000000132612122367322014117 0ustar d3n000users# GA_CHECK_FUNCS(HEADER-FILE..., [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------------------------------------ # Inspired by # http://pdh11.blogspot.com/2009/04/standard-macros-available-in-gnu.html # but really a modified version of AC_CHECK_FUNCS. AC_DEFUN([GA_CHECK_FUNCS], [m4_map_args_w([$1], [_AH_CHECK_FUNC(], [)])]dnl [AS_FOR([AC_func], [ac_func], [$1], [AC_CHECK_FUNC(AC_func, [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_]AC_func), 1, [Define to 1 if you have the `]AC_func[' function, 0 if you don't]) $2], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_]AC_func), 0, [Define to 1 if you have the `]AC_func[' function, 0 if you don't]) $3], [$4])dnl]) ])# GA_CHECK_FUNCS ga-5-3/m4/ga_boost.m40000640005473000001440000000320011704074222013145 0ustar d3n000users# use AX_BOOST_BASE first, then try to find boost headers using other means AC_DEFUN([GA_BOOST], [AX_BOOST_BASE([1.35.0], [boost_ok=yes], [boost_ok=no]) # could not find boost install # try $ac_boost_path or $BOOST_ROOT as CPPFLAG AS_IF([test "x$boost_ok" = xno], [AC_CACHE_CHECK( [for non-installed and non-staged boost headers], [ga_cv_boost_headers], [gfutex_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I$ac_boost_path" AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[@%:@include ]], [[#if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif]])], [ga_cv_boost_headers="$ac_boost_path"]) CPPFLAGS="$gfutex_save_CPPFLAGS" AS_IF([test "x$ga_cv_boost_headers" = x], [gfutex_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I$BOOST_ROOT" AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[@%:@include ]], [[#if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif]])], [ga_cv_boost_headers="$BOOST_ROOT"]) CPPFLAGS="$gfutex_save_CPPFLAGS"]) AS_IF([test "x$ga_cv_boost_headers" = x], [ga_cv_boost_headers="no"])]) AS_IF([test "x$ga_cv_boost_headers" = xno], [AC_MSG_ERROR([could not locate boost headers])], [BOOST_CPPFLAGS="-I$ga_cv_boost_headers"]) AC_SUBST([BOOST_CPPFLAGS])]) ]) ga-5-3/m4/armci_as_no_i386asm.m40000640005473000001440000000102311704074222015075 0ustar d3n000users# ARMCI_AS_NO_I386ASM # ------------------- # On certain systems (Fujitus thus far) it is necessary to set NO_I386ASM to # avoid compiling inline assembly. AC_DEFUN([ARMCI_AS_NO_I386ASM], [ AC_CACHE_CHECK([whether NO_I386ASM is needed], [armci_cv_as_no_i386asm], [AS_IF([test "x$ax_cv_c_compiler_vendor" = xfujitsu], [armci_cv_as_no_i386asm=yes], [armci_cv_as_no_i386asm=no])]) AS_IF([test "x$armci_cv_as_no_i386asm" = xyes], [AC_DEFINE([NO_I386ASM], [1], [define when inline asm is not supported])]) ])dnl ga-5-3/m4/ga_function.m40000640005473000001440000000166111454665236013672 0ustar d3n000users# GA_FUNCTION # ----------- # Define FUNCTION_NAME to either __func__ or __FUNCTION__ appropriately. # If all else fails, #define FUNCTION_NAME . AC_DEFUN([GA_FUNCTION], [AC_CACHE_CHECK([for preprocessor symbol for function name], [ga_cv_cpp_function], [AS_IF([test x$ga_cv_cpp_function = x], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[extern int printf(const char *format, ...);]], [[printf("__func__ = %s\n", __func__);]])], [ga_cv_cpp_function=__func__])]) AS_IF([test x$ga_cv_cpp_function = x], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[extern int printf(const char *format, ...);]], [[printf("__FUNCTION__ = %s\n", __FUNCTION__);]])], [ga_cv_cpp_function=__FUNCTION__])]) AS_IF([test x$ga_cv_cpp_function = x], [ga_cv_cpp_function='"Unknown"'])]) AC_DEFINE_UNQUOTED([FUNCTION_NAME], [$ga_cv_cpp_function], [CPP symbol for function name, if available]) ])# GA_FUNCTION ga-5-3/m4/armci_nb_noncont.m40000640005473000001440000000055711410510454014670 0ustar d3n000users# ARMCI_ENABLE_NB_NONCONT # ----------------------- # Not sure what this is for. AC_DEFUN([ARMCI_ENABLE_NB_NONCONT], [AC_ARG_ENABLE([nb_noncont], [AS_HELP_STRING([--enable-nb-noncont], [TODO])], [enable_nb_noncont=yes AC_DEFINE([NB_NONCONT], [1], [TODO])], [enable_nb_noncont=no]) AM_CONDITIONAL([NB_NONCONT], [test x$enable_nb_noncont = xyes]) ])dnl ga-5-3/m4/armci_f77_enable.m40000640005473000001440000000125011503767531014450 0ustar d3n000users# ARMCI_F77_ENABLE() # ------------------ # Whether to enable Fortran code within ARMCI. AC_DEFUN([ARMCI_F77_ENABLE], [AC_ARG_ENABLE([f77], [AS_HELP_STRING([--enable-f77], [enable Fortran code])], [], [enable_f77=no]) AS_IF([test "x$enable_f77" = xyes], [AC_DEFINE([NOFORT], [0], [Define to 1 if not using Fortran]) AC_DEFINE([ENABLE_F77], [1], [Define to 1 if using Fortran])], [AC_DEFINE([NOFORT], [1], [Define to 1 if not using Fortran]) AC_DEFINE([ENABLE_F77], [0], [Define to 1 if using Fortran])]) AM_CONDITIONAL([NOFORT], [test "x$enable_f77" = xno]) AM_CONDITIONAL([ENABLE_F77], [test "x$enable_f77" = xyes]) ])# ARMCI_F77_ENABLE ga-5-3/m4/ga_cxx_opt.m40000640005473000001440000000140611633714777013532 0ustar d3n000users# GA_CXX_OPT() # ------------ # Determine TARGET-/compiler-specific CXXFLAGS for optimization. AC_DEFUN([GA_CXX_OPT], [ AC_REQUIRE([GA_TARGET64]) AC_REQUIRE([GA_ENABLE_OPT]) AC_ARG_VAR([GA_CXXOPT], [GA C++ optimization flags]) AC_CACHE_CHECK([for specific C++ optimizations], [ga_cv_cxx_opt], [ AS_IF([test "x$GA_CXXOPT" != x], [ga_cv_cxx_opt="$GA_CXXOPT"], [ga_cv_cxx_opt=]) AS_IF([test "x$ga_cv_cxx_opt" = x && test "x$enable_opt" = xyes], [ AS_CASE([$ga_cv_target:$ga_cv_cxx_compiler_vendor:$host_cpu], [LINUX:*:*], [ga_cv_cxx_opt="-O0"], [NEC64:*:*], [ga_cv_cxx_opt="-Cvsafe -size_t64"], [NEC:*:*], [ga_cv_cxx_opt="-Cvsafe"], [ga_cv_cxx_opt=]) ])]) AC_SUBST([GA_CXXOPT], [$ga_cv_cxx_opt]) ])dnl ga-5-3/m4/armci_f77_i4.m40000640005473000001440000000131211642635311013527 0ustar d3n000users# ARMCI_F77_I4 # ------------ # Force F77 to use 4-byte INTEGERs regardless of any compiler- or # system-defaults. AC_DEFUN([ARMCI_F77_I4], [ AC_ARG_VAR([FFLAG_INT_4], [Fortran 77 compiler flag to set integer size to 4 bytes]) AC_CACHE_CHECK([for INTEGER*4 size compile flag], [armci_cv_f77_integer_size_flag], [AS_IF([test x$cross_compiling = xyes], [_GA_F77_INTEGER_4_FLAG_CROSS([armci_cv_f77_integer_size_flag])], [_GA_F77_INTEGER_4_FLAG([armci_cv_f77_integer_size_flag])])]) AS_IF([test "x$armci_cv_f77_integer_size_flag" != x], [AS_IF([test "x$armci_cv_f77_integer_size_flag" != xnone], [AC_SUBST([FFLAG_INT_4], [$armci_cv_f77_integer_size_flag])])]) ]) # ARMCI_F77_I4 ga-5-3/m4/ga_f77_library_ldflags.m40000640005473000001440000001406011516344635015661 0ustar d3n000users# _GA_FC_LIBRARY_LDFLAGS # ====================== # # GA HACK!!! # Until autoconf is fixed to support Sun Studio compilers using -Y, we replace # _AC_FC_LIBRARY_LDFLAGS. The rest of the marco is directly copied from # autoconf-2.67/lib/autoconf/fortran.m4 # ---------------------------------------------------------------------------- # # Determine the linker flags (e.g. "-L" and "-l") for the Fortran # intrinsic and runtime libraries that are required to successfully # link a Fortran program or shared library. The output variable # FLIBS/FCLIBS is set to these flags. # # This macro is intended to be used in those situations when it is # necessary to mix, e.g. C++ and Fortran, source code into a single # program or shared library. # # For example, if object files from a C++ and Fortran compiler must # be linked together, then the C++ compiler/linker must be used for # linking (since special C++-ish things need to happen at link time # like calling global constructors, instantiating templates, enabling # exception support, etc.). # # However, the Fortran intrinsic and runtime libraries must be # linked in as well, but the C++ compiler/linker doesn't know how to # add these Fortran libraries. Hence, the macro # "AC_F77_LIBRARY_LDFLAGS" was created to determine these Fortran # libraries. # # This macro was packaged in its current form by Matthew D. Langston. # However, nearly all of this macro came from the "OCTAVE_FLIBS" macro # in "octave-2.0.13/aclocal.m4", and full credit should go to John # W. Eaton for writing this extremely useful macro. Thank you John. AC_DEFUN([_GA_FC_LIBRARY_LDFLAGS], [_AC_FORTRAN_ASSERT()dnl _AC_PROG_FC_V AC_CACHE_CHECK([for _AC_LANG libraries of $[]_AC_FC[]], ac_cv_[]_AC_LANG_ABBREV[]_libs, [if test "x$[]_AC_LANG_PREFIX[]LIBS" != "x"; then ac_cv_[]_AC_LANG_ABBREV[]_libs="$[]_AC_LANG_PREFIX[]LIBS" # Let the user override the test. else _AC_PROG_FC_V_OUTPUT ac_cv_[]_AC_LANG_ABBREV[]_libs= # Save positional arguments (if any) ac_save_positional="$[@]" set X $ac_[]_AC_LANG_ABBREV[]_v_output while test $[@%:@] != 1; do shift ac_arg=$[1] case $ac_arg in [[\\/]]*.a | ?:[[\\/]]*.a) _AC_LIST_MEMBER_IF($ac_arg, $ac_cv_[]_AC_LANG_ABBREV[]_libs, , ac_cv_[]_AC_LANG_ABBREV[]_libs="$ac_cv_[]_AC_LANG_ABBREV[]_libs $ac_arg") ;; -bI:*) _AC_LIST_MEMBER_IF($ac_arg, $ac_cv_[]_AC_LANG_ABBREV[]_libs, , [_AC_LINKER_OPTION([$ac_arg], ac_cv_[]_AC_LANG_ABBREV[]_libs)]) ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) test x"$CYGWIN" != xyes && ac_cv_[]_AC_LANG_ABBREV[]_libs="$ac_cv_[]_AC_LANG_ABBREV[]_libs $ac_arg" ;; -[[LRuYz]]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $[2] in "" | -*);; *) ac_arg="$ac_arg$[2]" shift; shift set X $ac_arg "$[@]" ;; esac ;; -YP,*) for ac_j in `AS_ECHO(["$ac_arg"]) | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do _AC_LIST_MEMBER_IF($ac_j, $ac_cv_[]_AC_LANG_ABBREV[]_libs, , [ac_arg="$ac_arg $ac_j" ac_cv_[]_AC_LANG_ABBREV[]_libs="$ac_cv_[]_AC_LANG_ABBREV[]_libs $ac_j"]) done ;; dnl begin GA addition -Y*) for ac_j in `AS_ECHO(["$ac_arg"]) | sed -e 's/-Y/-L/;s/"//g;s/:/ -L/g'`; do _AC_LIST_MEMBER_IF($ac_j, $ac_cv_[]_AC_LANG_ABBREV[]_libs, , [ac_arg="$ac_arg $ac_j" ac_cv_[]_AC_LANG_ABBREV[]_libs="$ac_cv_[]_AC_LANG_ABBREV[]_libs $ac_j"]) done ;; dnl end GA addition -[[lLR]]*) _AC_LIST_MEMBER_IF($ac_arg, $ac_cv_[]_AC_LANG_ABBREV[]_libs, , ac_cv_[]_AC_LANG_ABBREV[]_libs="$ac_cv_[]_AC_LANG_ABBREV[]_libs $ac_arg") ;; -zallextract*| -zdefaultextract) ac_cv_[]_AC_LANG_ABBREV[]_libs="$ac_cv_[]_AC_LANG_ABBREV[]_libs $ac_arg" ;; # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`AS_ECHO(["$ac_[]_AC_LANG_ABBREV[]_v_output"]) | sed -n 's,^.*LD_RUN_PATH *= *\(/[[^ ]]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && _AC_LINKER_OPTION([$ac_ld_run_path], ac_cv_[]_AC_LANG_ABBREV[]_libs) ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ]) []_AC_LANG_PREFIX[]LIBS="$ac_cv_[]_AC_LANG_ABBREV[]_libs" AC_SUBST([]_AC_LANG_PREFIX[]LIBS) ])# _GA_FC_LIBRARY_LDFLAGS # GA_F77_LIBRARY_LDFLAGS # ---------------------- # Wrap AC_F77_LIBRARY_LDFLAGS in case user disables Fortran 77. # When mixing gcc and ifort, we sometimes need to add -lgcc_s to the FLIBS. # Lastly, Sun Studio compilers are not (yet) completely supported. AC_DEFUN([GA_F77_LIBRARY_LDFLAGS], [ GA_MPI_UNWRAP_PUSH() AC_F77_LIBRARY_LDFLAGS GA_MPI_UNWRAP_POP() AC_CACHE_CHECK([whether FLIBS needs -lgcc_s], [ga_cv_flibs_gcc_s], [happy=yes ga_save_LIBS="$LIBS"; LIBS="$LIBS $FLIBS" ga_save_FLIBS="$FLIBS" AC_LANG_PUSH([C]) AC_LINK_IFELSE( [AC_LANG_PROGRAM([],[])], [ga_cv_flibs_gcc_s=no], [LIBS="$LIBS -lgcc_s" AC_LINK_IFELSE( [AC_LANG_PROGRAM([],[])], [FLIBS="$FLIBS -lgcc_s" ga_cv_flibs_gcc_s=yes], [happy=no FLIBS="$ga_save_FLIBS" ga_cv_flibs_gcc_s=no])]) LIBS="$ga_save_LIBS" AC_LANG_POP([C])]) dnl hack to support Sun Studio -Y linker flag AS_IF([test "x$happy" = xno], [AS_UNSET([ac_cv_f77_libs]) AS_UNSET([FLIBS]) _GA_FC_LIBRARY_LDFLAGS ga_save_LIBS="$LIBS"; LIBS="$LIBS $FLIBS" AC_LANG_PUSH([C]) AC_LINK_IFELSE( [AC_LANG_PROGRAM([],[])], [happy=yes], [happy=no]) LIBS="$ga_save_LIBS" AC_LANG_POP([C])]) AS_IF([test "x$happy" = xno], [AC_MSG_WARN([FLIBS does not work])]) ])dnl ga-5-3/m4/armci_setup.m40000640005473000001440000000733511711606516013705 0ustar d3n000users# ARMCI_SETUP # ----------- # ARMCI is a sensitive piece of code! It mostly depends on the network # selection, but on occasion the type of system is also important (aka # TARGET). A lot of this code was ported from the old GNUmakefile, for # better or worse. AC_DEFUN([ARMCI_SETUP], [AC_REQUIRE([GA_ARMCI_NETWORK]) AS_CASE([$ga_armci_network], [BGML], [ AC_DEFINE([NO_SHM], [1], [Disables use of shared memory]) AC_DEFINE([USE_MALLOC], [1], [TODO]) AC_DEFINE([BGML], [1], [TODO]) ], [CRAY_SHMEM], [ AC_DEFINE([CLUSTER], [1], [TODO]) AC_DEFINE([CRAY_XT], [1], [TODO]) AC_DEFINE([CRAY_SHMEM], [1], [TODO]) ], [DCMF], [ AC_DEFINE([NO_SHM], [1], [Disables use of shared memory]) AC_DEFINE([ARMCIX], [1], [Defined when using DCMF]) AC_DEFINE([DCMF], [1], [Defined when using DCMF]) ], [ELAN3], [ AC_DEFINE([PTHREADS], [1], [TODO]) AC_DEFINE([SERVER_THREAD], [1], [TODO]) AC_DEFINE([_REENTRANT], [1], [TODO]) AC_DEFINE([ACC_SMP], [1], [TODO]) AC_DEFINE([QUADRICS], [1], [TODO]) AS_IF([test x$LIBELAN_NATTACH != x], [AC_DEFINE([MULTI_CTX], [1], [TODO])], [AC_DEFINE([ALLOC_MUNMAP], [1], [TODO])]) ], [ELAN4], [ AC_DEFINE([PTHREADS], [1], [TODO]) AC_DEFINE([SERVER_THREAD], [1], [TODO]) AC_DEFINE([_REENTRANT], [1], [TODO]) AC_DEFINE([ACC_SMP], [1], [TODO]) AC_DEFINE([QUADRICS], [1], [TODO]) AC_DEFINE([DOELAN4], [1], [TODO]) ], [GEMINI], [ AC_DEFINE([LIBONESIDED], [1], [for Gemini]) AC_DEFINE([CRAY_UGNI], [1], [for Gemini]) AC_DEFINE([GEMINI], [1], [for Gemini]) ], [GM], [ AC_DEFINE([PTHREADS], [1], [TODO]) AC_DEFINE([DATA_SERVER], [1], [TODO]) AC_DEFINE([ALLOW_PIN], [1], [TODO]) AC_DEFINE([SERVER_THREAD], [1], [TODO]) AC_DEFINE([_REENTRANT], [1], [TODO]) AC_DEFINE([GM], [1], [TODO]) ], [LAPI], [ AC_DEFINE([LAPI], [1], [TODO]) AS_IF([test x$LAPI_RDMA != x], [AC_DEFINE([ALLOW_PIN], [1], [TODO]) AC_DEFINE([LAPI_RDMA], [1], [TODO])]) ], [MELLANOX], [ AC_DEFINE([PTHREADS], [1], [TODO]) AC_DEFINE([DATA_SERVER], [1], [TODO]) AC_DEFINE([SERVER_THREAD], [1], [TODO]) AC_DEFINE([_REENTRANT], [1], [TODO]) AC_DEFINE([VAPI], [1], [TODO]) AC_DEFINE([ALLOW_PIN], [1], [TODO]) AC_DEFINE([MELLANOX], [1], [TODO]) ], [MPI_MT], [ AC_DEFINE([PTHREADS], [1], [TODO]) AC_DEFINE([DATA_SERVER], [1], [TODO]) AC_DEFINE([SERVER_THREAD], [1], [TODO]) AC_DEFINE([MPI_MT], [1], [TODO]) ], [MPI_SPAWN], [ AC_DEFINE([DATA_SERVER], [1], [TODO]) AC_DEFINE([MPI_SPAWN], [1], [TODO]) AS_IF([test x$ARMCI_SPAWN_CRAY_XT != x], [AC_DEFINE([SPAWN_CRAY_XT], [1], [TODO])]) ], [OPENIB], [ AC_DEFINE([PTHREADS], [1], [TODO]) AC_DEFINE([DATA_SERVER], [1], [TODO]) AC_DEFINE([SERVER_THREAD], [1], [TODO]) AC_DEFINE([_REENTRANT], [1], [TODO]) AC_DEFINE([VAPI], [1], [TODO]) AC_DEFINE([ALLOW_PIN], [1], [TODO]) AC_DEFINE([PEND_BUFS], [1], [TODO]) AC_DEFINE([OPENIB], [1], [TODO]) ], [PORTALS], [ AC_DEFINE([DATA_SERVER], [1], [TODO]) AC_DEFINE([_REENTRANT], [1], [TODO]) AC_DEFINE([SERVER_THREAD], [1], [TODO]) AC_DEFINE([CRAY_XT], [1], [TODO]) AC_DEFINE([PORTALS], [1], [TODO]) ], [SOCKETS], [ AC_DEFINE([DATA_SERVER], [1], [TODO]) AC_DEFINE([SOCKETS], [1], [TODO]) ], [VIA], [ AC_DEFINE([PTHREADS], [1], [TODO]) AC_DEFINE([DATA_SERVER], [1], [TODO]) AC_DEFINE([SERVER_THREAD], [1], [TODO]) AC_DEFINE([_REENTRANT], [1], [TODO]) AC_DEFINE([VIA], [1], [TODO]) ] ) AS_IF([test x$REPORT_SHMMAX != x], [AC_DEFINE([REPORT_SHMMAX], [1], [TODO])]) AS_IF([test x$thread_safety = xyes], [AC_DEFINE([POSIX_THREADS], [1], [TODO]) AC_DEFINE([_REENTRANT], [1], [TODO])]) ])dnl ga-5-3/m4/ga_thread_safe.m40000640005473000001440000000141211410510454014263 0ustar d3n000users# GA_THREAD_SAFE # -------------- # Asserts that procedures are thread safe??? # Is this specific to ARMCI??? # This was taken from older GNUmakefiles... the original doc follows # Procedures are thread safe; should also specify the max number of threads # via ARMCI_MAX_THREADS and thread library via THREAD_LIBRARY. Only supported # for SOCKETS ELAN4 OPENIB LAPI64. AC_DEFUN([GA_THREAD_SAFE], [AC_ARG_ENABLE([thread-safety], [AS_HELP_STRING([--enable-thread-safety], [**unsupported** turn on thread safety])], [thread_safety=yes AC_DEFINE([THREAD_SAFE], [1], [turn on thread safety])], [thread_safety=no]) AM_CONDITIONAL([THREAD_SAFE], [test x$thread_safety = xyes]) AC_ARG_VAR([THREAD_LIBRARY], [See --enable-thread-safety]) AC_SUBST([THREAD_LIBRARY]) ])dnl ga-5-3/m4/ga_scalapack.m40000640005473000001440000001177111714303474013762 0ustar d3n000users# GA_F77_SCALAPACK_TEST # --------------------- # Generate Fortran 77 conftest for SCALAPACK. AC_DEFUN([GA_F77_SCALAPACK_TEST], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([], [[ implicit none external PDGETRS CALL PDGETRS ()]])]) ]) # GA_C_SCALAPACK_TEST # ------------------- # Generate C conftest for SCALAPACK. AC_DEFUN([GA_C_SCALAPACK_TEST], [AC_LANG_CONFTEST([AC_LANG_PROGRAM( [#ifdef __cplusplus extern "C" { #endif char pdgetrs (); #ifdef __cplusplus } #endif ], [[char result = pdgetrs (); ]])]) ]) # GA_RUN_SCALAPACK_TEST # --------------------- # Test the linker. # Clears SCALAPACK_LIBS on failure. Sets ga_scalapack_ok=yes on success. AC_DEFUN([GA_RUN_SCALAPACK_TEST], [ AS_IF([test "x$enable_f77" = xno], [AC_LANG_PUSH([C]) GA_C_SCALAPACK_TEST() AC_LINK_IFELSE([], [ga_scalapack_ok=yes], [SCALAPACK_LIBS=]) AC_LANG_POP([C])], [AC_LANG_PUSH([Fortran 77]) GA_F77_SCALAPACK_TEST() AC_LINK_IFELSE([], [ga_scalapack_ok=yes], [SCALAPACK_LIBS=]) AC_LANG_POP([Fortran 77])]) ])dnl # GA_SCALAPACK([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # --------------------------------------------------- # Modeled after GA_LAPACK and GA_BLAS. # Tries to find ScaLAPACK library. The netlib implementation claims that # ScaLAPACK depends on PBLAS, LAPACK, BLAS, and BLACS. However, some # implementations such as Intel's combine ScaLAPACK, LAPACK, and BLAS together # such that PBLAS and BLACS are not needed. This macro attempts to find the # combination of libraries necessary to use ScaLAPACK. AC_DEFUN([GA_SCALAPACK], [AC_REQUIRE([GA_LAPACK]) scalapack_size=4 AC_ARG_WITH([scalapack], [AS_HELP_STRING([--with-scalapack=[[ARG]]], [use ScaLAPACK library compiled with sizeof(INTEGER)==4])], [scalapack_size=4]) AC_ARG_WITH([scalapack8], [AS_HELP_STRING([--with-scalapack8=[[ARG]]], [use ScaLAPACK library compiled with sizeof(INTEGER)==8])], [scalapack_size=8; with_scalapack="$with_scalapack8"]) ga_scalapack_ok=no AS_IF([test "x$with_scalapack" = xno], [ga_scalapack_ok=skip]) # Parse --with-scalapack argument. Clear previous values first. SCALAPACK_LIBS= SCALAPACK_LDFLAGS= SCALAPACK_CPPFLAGS= GA_ARG_PARSE([with_scalapack], [SCALAPACK_LIBS], [SCALAPACK_LDFLAGS], [SCALAPACK_CPPFLAGS]) ga_save_LIBS="$LIBS" ga_save_LDFLAGS="$LDFLAGS" ga_save_CPPFLAGS="$CPPFLAGS" LDFLAGS="$SCALAPACK_LDFLAGS $LAPACK_LDFLAGS $BLAS_LDFLAGS $GA_MP_LDFLAGS $LDFLAGS" CPPFLAGS="$SCALAPACK_CPPFLAGS $LAPACK_CPPFLAGS $BLAS_CPPFLAGS $GA_MP_CPPFLAGS $CPPFLAGS" AC_MSG_NOTICE([Attempting to locate SCALAPACK library]) # First, check environment/command-line variables. # If failed, erase SCALAPACK_LIBS but maintain SCALAPACK_LDFLAGS and # SCALAPACK_CPPFLAGS. AS_IF([test $ga_scalapack_ok = no], [AC_MSG_CHECKING([for SCALAPACK with user-supplied flags]) LIBS="$SCALAPACK_LIBS $LAPACK_LIBS $BLAS_LIBS $GA_MP_LIBS $LIBS" GA_RUN_SCALAPACK_TEST() LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_scalapack_ok])]) # Generic ScaLAPACK library? AS_IF([test $ga_scalapack_ok = no], [AC_MSG_CHECKING([for SCALAPACK in generic library]) SCALAPACK_LIBS="-lscalapack" LIBS="$SCALAPACK_LIBS $LAPACK_LIBS $BLAS_LIBS $GA_MP_LIBS $LIBS" GA_RUN_SCALAPACK_TEST() LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_scalapack_ok])]) CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" AC_SUBST([SCALAPACK_LIBS]) AC_SUBST([SCALAPACK_LDFLAGS]) AC_SUBST([SCALAPACK_CPPFLAGS]) AS_IF([test "x$scalapack_size" = x8], [AC_DEFINE([SCALAPACK_I8], [1], [ScaLAPACK is using 8-byte integers])]) # test for pdsyevr which some implementations may not have AS_IF([test $ga_scalapack_ok = yes], [ ga_save_LIBS="$LIBS" ga_save_LDFLAGS="$LDFLAGS" ga_save_CPPFLAGS="$CPPFLAGS" LIBS="$SCALAPACK_LIBS $LAPACK_LIBS $BLAS_LIBS $GA_MP_LIBS $LIBS" LDFLAGS="$SCALAPACK_LDFLAGS $LAPACK_LDFLAGS $BLAS_LDFLAGS $GA_MP_LDFLAGS $LDFLAGS" CPPFLAGS="$SCALAPACK_CPPFLAGS $LAPACK_CPPFLAGS $BLAS_CPPFLAGS $GA_MP_CPPFLAGS $CPPFLAGS" AC_MSG_CHECKING([whether SCALAPACK implements pdsyevr]) AS_IF([test "x$enable_f77" = xno], [AC_LANG_PUSH([C]) AC_LINK_IFELSE([AC_LANG_CALL([], [pdsyevr])], [have_pdsyevr=1; have_pdsyevr_msg=yes], [have_pdsyevr=0; have_pdsyevr_msg=no]) AC_LANG_POP([C])], [AC_LANG_PUSH([Fortran 77]) AC_LINK_IFELSE([AC_LANG_CALL([], [pdsyevr])], [have_pdsyevr=1; have_pdsyevr_msg=yes], [have_pdsyevr=0; have_pdsyevr_msg=no]) AC_LANG_POP([Fortran 77])]) AC_MSG_RESULT([$have_pdsyevr_msg]) AC_DEFINE_UNQUOTED([HAVE_PDSYEVR], [$have_pdsyevr], [whether the ScaLAPACK library implements pdsyevr]) LIBS="$ga_save_LIBS" LDFLAGS="$ga_save_LDFLAGS" CPPFLAGS="$ga_save_CPPFLAGS" ]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: AS_IF([test $ga_scalapack_ok = yes], [have_scalapack=1 $1], [AC_MSG_WARN([ScaLAPACK library not found, interfaces won't be defined]) have_scalapack=0 $2]) AC_DEFINE_UNQUOTED([HAVE_SCALAPACK], [$have_scalapack], [Define to 1 if you have ScaLAPACK library.]) AM_CONDITIONAL([HAVE_SCALAPACK], [test $ga_scalapack_ok = yes]) ])dnl GA_SCALAPACK ga-5-3/m4/ga_compiler_vendor.m40000640005473000001440000000462011672215522015221 0ustar d3n000users# GA_COMPILER_VENDOR # ------------------ # other compilers may define __GNUC__, like intel or pathscale # that's why we put it later in the for loop, like we do with our compiler # checks since GCC is so pervasive AC_DEFUN([GA_COMPILER_VENDOR], [ AS_VAR_PUSHDEF([ga_cv_compiler_vendor], [ga_cv_[]_AC_LANG_ABBREV[]_compiler_vendor]) AC_CACHE_CHECK([for _AC_LANG compiler vendor], [ga_cv_compiler_vendor], [ ga_save_ac_ext="$ac_ext" AC_LANG_CASE([Fortran], [ac_ext=F]) AC_LANG_CASE([Fortran 77], [ac_ext=F]) ga_cv_compiler_vendor=unknown ga_cpp_vendor_symbols= for vendor in intel ibm pathscale amd cray gnu sun hp dec borland comeau kai lcc metrowerks sgi microsoft watcom portland fujitsu do AS_CASE([$vendor], [amd], [ga_cpp_vendor_symbols="defined(__OPEN64__)"], [borland], [ga_cpp_vendor_symbols="defined(__BORLANDC__) || defined(__TURBOC__)"], [comeau], [ga_cpp_vendor_symbols="defined(__COMO__)"], [cray], [ga_cpp_vendor_symbols="defined(_CRAYC) || defined(_ADDR64)"], [dec], [ga_cpp_vendor_symbols="defined(__DECC) || defined(__DECCXX) || defined(__DECC_VER) || defined(__DECCXX_VER)"], [fujitsu], [ga_cpp_vendor_symbols="defined(__fcc__) || defined(__fcc_version__) || defined(_FCC_VER) || defined(__FCC_VER_)"], [gnu], [ga_cpp_vendor_symbols="defined(__GNUC__)"], [hp], [ga_cpp_vendor_symbols="defined(__HP_cc) || defined(__HP_aCC)"], [ibm], [ga_cpp_vendor_symbols="defined(__xlc__) || defined(__xlC__) || defined(__IBMC__) || defined(__IBMCPP__)"], [intel], [ga_cpp_vendor_symbols="defined(__ICC) || defined(__ECC) || defined(__INTEL_COMPILER)"], [kai], [ga_cpp_vendor_symbols="defined(__KCC)"], [lcc], [ga_cpp_vendor_symbols="defined(__LCC__)"], [metrowerks],[ga_cpp_vendor_symbols="defined(__MWERKS__)"], [microsoft], [ga_cpp_vendor_symbols="defined(_MSC_VER)"], [pathscale], [ga_cpp_vendor_symbols="defined(__PATHCC__) || defined(__PATHSCALE__)"], [portland], [ga_cpp_vendor_symbols="defined(__PGI)"], [sgi], [ga_cpp_vendor_symbols="defined(__sgi) || defined(sgi)"], [sun], [ga_cpp_vendor_symbols="defined(__SUNPRO_C) || defined(__SUNPRO_CC)"], [watcom], [ga_cpp_vendor_symbols="defined(__WATCOMC__)"]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[ #if !($ga_cpp_vendor_symbols) chokeonthis #endif ])], [ga_cv_compiler_vendor=$vendor; break]) done ga_cpp_vendor_symbols= ac_ext="$ga_save_ac_ext" ]) AS_VAR_POPDEF([ga_cv_compiler_vendor]) ])dnl ga-5-3/m4/ga_pario.m40000640005473000001440000000700711410510454013136 0ustar d3n000users# =========================================================================== # # SYNOPSIS # # GA_PARIO # # DESCRIPTION # # This macro tries to find out how to compile pario. # This was converted from pario/makefile.h and pario/*/GNUmakefile # Defines the following precious variables # PARIO_CPPFLAGS # PARIO_LDFLAGS # PARIO_CFLAGS # PARIO_FFLAGS # AC_DEFUN([GA_PARIO], [ dnl ########################################################################## dnl FROM pario/makefile.h dnl ########################################################################## OSNAME=`uname` PARIO_CPPFLAGS= if test x$OSNAME = xAIX ; then if /usr/bin/oslevel | awk -F. '{ if ($1 > 5 || ($1 == 5 && $2 > 1)) exit 0 }' then PARIO_CPPFLAGS="$PARIO_CPPFLAGS -DAIX52" fi if /usr/sbin/lsdev -C -l aio0 2>&1 | grep Legacy ; then PARIO_CPPFLAGS="$PARIO_CPPFLAGS -D_AIO_AIX_SOURCE" fi fi if test x$LARGE_FILES != x ; then if test x$OSNAME = xAIX ; then if /usr/bin/oslevel|awk -F. '{ if ($1 > 4 || ($1 == 4 && $2 > 1)) exit 0 }' then PARIO_CPPFLAGS="$PARIO_CPPFLAGS -D_LARGE_FILES -D_LARGE_FILE_API" fi if /usr/bin/oslevel|awk -F. '{ if ($1 == 4 && $2 == 2 && $3 <= 0 ) exit 0 }' then PARIO_CPPFLAGS="$PARIO_CPPFLAGS -DNOAIO" fi fi if test x$TARGET = xSOLARIS ; then PARIO_CPPFLAGS="$PARIO_CPPFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" PARIO_CFLAGS=`getconf LFS_CFLAGS` fi if test x$TARGET = xLINUX ; then PARIO_CPPFLAGS="$PARIO_CPPFLAGS -D_LARGEFILE64_SOURCE" PARIO_CFLAGS=`getconf LFS_CFLAGS` fi if test x$TARGET = xBGL -o x$TARGET = xBGP ; then PARIO_CPPFLAGS="$PARIO_CPPFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE" fi if test x$TARGET = xHPUX ; then PARIO_CPPFLAGS="$PARIO_CPPFLAGS -D_LARGEFILE64_SOURCE" PARIO_CFLAGS=`getconf XBS5_ILP32_OFFBIG_CFLAGS` fi if test x$TARGET = xHPUX64 ; then PARIO_CPPFLAGS="$PARIO_CPPFLAGS -D_LARGEFILE64_SOURCE" PARIO_CFLAGS=`getconf XBS5_LP64_OFF64_CFLAGS` fi PARIO_CPPFLAGS="$PARIO_CPPFLAGS -DLARGE_FILES" fi if test x$TARGET = xDECOSF ; then PARIO_LDFLAGS="-laio -lpthreads" fi if test x$USE_LINUXAIO != x ; then PARIO_CPPFLAGS="$PARIO_CPPFLAGS -DLINUXAIO" PARIO_LDFLAGS="$PARIO_LDFLAGS -lrt" fi dnl ########################################################################## dnl FROM pario/elio/GNUmakefile dnl ########################################################################## dnl on platforms with Posix AIO you can choose not to use it by defining NOAIO if test x$NOAIO != x ; then PARIO_CPPFLAGS="$PARIO_CPPFLAGS -DNOAIO" fi if test x$PABLO != x ; then PARIO_CPPFLAGS="$PARIO_CPPFLAGS -DPABLO" fi dnl ########################################################################## dnl FROM pario/eaf/GNUmakefile dnl ########################################################################## PARIO_CPPFLAGS="$PARIO_CPPFLAGS -DEAF_STATS" if test x$ga_armci_network = xPORTALS ; then PARIO_CPPFLAGS="$PARIO_CPPFLAGS -DCRAY_XT" fi dnl ########################################################################## dnl FROM pario/dra/GNUmakefile dnl ########################################################################## if test x$F77 = xfrt ; then PARIO_FFLAGS=-O2 fi dnl ########################################################################## dnl FROM pario/sf/GNUmakefile dnl ########################################################################## dnl nothing AC_SUBST([PARIO_CPPFLAGS]) AC_SUBST([PARIO_LDFLAGS]) AC_SUBST([PARIO_CFLAGS]) AC_SUBST([PARIO_FFLAGS]) ])dnl GA_PARIO ga-5-3/m4/ga_c_match_types.m40000640005473000001440000000150111503002164014634 0ustar d3n000users# GA_C_POINTER_AS_INTEGER() # ------------------------- # Size-based match between C types. AC_DEFUN([GA_C_POINTER_AS_INTEGER], [AC_CACHE_CHECK([for smallest C integer matching void*], [ga_cv_c_pointer_as_integer], [AS_IF( [test "x$ac_cv_sizeof_voidp" = "x$ac_cv_sizeof_short"], [ga_cv_c_pointer_as_integer=short], [test "x$ac_cv_sizeof_voidp" = "x$ac_cv_sizeof_int"], [ga_cv_c_pointer_as_integer=int], [test "x$ac_cv_sizeof_voidp" = "x$ac_cv_sizeof_long"], [ga_cv_c_pointer_as_integer=long], [test "x$ac_cv_sizeof_voidp" = "x$ac_cv_sizeof_long_long"], [ga_cv_c_pointer_as_integer="long long"], [AC_MSG_ERROR( [Could not determine smallest C integer matching void*])])]) AC_SUBST([C_POINTER_AS_INTEGER], [$ga_cv_c_pointer_as_integer]) ])dnl ga-5-3/m4/ga_mpif77_test.m40000640005473000001440000001137511410510454014177 0ustar d3n000users# GA_MPIF77_TEST_PROGRAM # ---------------------- # Create an MPI test program in Fortran 77. AC_DEFUN([GA_MPIF77_TEST_PROGRAM], [ AC_LANG_PUSH([Fortran 77]) AC_LANG_CONFTEST([AC_LANG_PROGRAM([], [[ include 'mpif.h' integer ierr call MPI_Init( ierr ) call MPI_Finalize( ierr )]])]) AC_LANG_POP([Fortran 77]) ])dnl # GA_MPIF77_TEST_COMPILE # ---------------------- # Attempt to compile a simple MPI program in Fortran 77. AC_DEFUN([GA_MPIF77_TEST_COMPILE], [ AC_LANG_PUSH([Fortran 77]) GA_MPIF77_TEST_PROGRAM() AC_CACHE_CHECK([whether a simple Fortran MPI program compiles], [ga_cv_f77_mpi_test_compile], [ga_save_FFLAGS="$FFLAGS"; FFLAGS="$FFLAGS $GA_MP_CPPFLAGS" AC_COMPILE_IFELSE([], [ga_cv_f77_mpi_test_compile=yes], [ga_cv_f77_mpi_test_compile=no]) FFLAGS="$ga_save_FFLAGS"]) rm -f conftest.$ac_ext AC_LANG_POP([Fortran 77]) AS_IF([test "x$ga_cv_f77_mpi_test_compile" = xno], [AC_MSG_FAILURE([could not compile simple Fortran MPI program])]) ])dnl # GA_MPIF77_TEST_LINK # ------------------- # Attempt to compile a simple MPI program in Fortran 77. AC_DEFUN([GA_MPIF77_TEST_LINK], [ AC_LANG_PUSH([Fortran 77]) GA_MPIF77_TEST_PROGRAM() ga_cv_f77_mpi_test_link=no AS_IF([test "x$ga_cv_f77_mpi_test_link" = xno], [AC_MSG_CHECKING([whether a Fortran MPI program links natively]) AC_LINK_IFELSE([], [ga_cv_f77_mpi_test_link=yes GA_MP_LIBS= GA_MP_LDFLAGS= GA_MP_CPPFLAGS=], [ga_cv_f77_mpi_test_link=no]) AC_MSG_RESULT([$ga_cv_f77_mpi_test_link])]) # That didn't work. Let's try adding our GA_MP_* flags. # The CPPFLAGS are added to FFLAGS since *.f doesn't use CPP. LIBS changes. ga_save_LIBS="$LIBS" ga_save_FFLAGS="$FFLAGS"; FFLAGS="$FFLAGS $GA_MP_CPPFLAGS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" AS_IF([test "x$ga_cv_f77_mpi_test_link" = xno], [AC_MSG_CHECKING([whether a Fortran MPI program links with additional env]) LIBS="$LIBS $GA_MP_LIBS" AC_LINK_IFELSE([], [ga_cv_f77_mpi_test_link=yes], [ga_cv_f77_mpi_test_link=no]) LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_cv_f77_mpi_test_link])]) # That didn't work, so now let's try with specific libs. AS_IF([test "x$ga_cv_f77_mpi_test_link" = xno], [AC_MSG_CHECKING([for mvapich libraries]) for lib in "-lmpichf90nc -lmpichfarg -lmpich -lpthread" "-lmpichf90 -lmpichfarg -lmpich -pthread" "-lmpichf90nc -lmpichfarg -lmpich" "-lmpichf90 -lmpichfarg -lmpich" "-lmpichfarg -lmpich -lpthread" "-lmpichfarg -lmpich" do LIBS="$LIBS $lib" AC_LINK_IFELSE([], [ga_cv_f77_mpi_test_link="$lib"; break], [ga_cv_f77_mpi_test_link=no]) LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_cv_f77_mpi_test_link])]) AS_IF([test "x$ga_cv_f77_mpi_test_link" = xno], [AC_MSG_CHECKING([for mpich libraries]) for lib in "-lmpichf90 -lmpich -lpthread" "-lmpichf90 -lmpich" "-lmpich -pthread" "-lmpich" do LIBS="$LIBS $lib" AC_LINK_IFELSE([], [ga_cv_f77_mpi_test_link="$lib"; break], [ga_cv_f77_mpi_test_link=no]) LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_cv_f77_mpi_test_link])]) AS_IF([test "x$ga_cv_f77_mpi_test_link" = xno], [AC_MSG_CHECKING([for hpmpi libraries]) for lib in "-lhpmpio -lhpmpi" do LIBS="$LIBS $lib" AC_LINK_IFELSE([], [ga_cv_f77_mpi_test_link="$lib"; break], [ga_cv_f77_mpi_test_link=no]) LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_cv_f77_mpi_test_link])]) AS_IF([test "x$ga_cv_f77_mpi_test_link" = xno], [AC_MSG_CHECKING([for intelmpi libraries]) for lib in "-lmpi -lmpigf -lmpigi -lpthread" "-lmpi -lmpigf -lmpigi" do LIBS="$LIBS $lib" AC_LINK_IFELSE([], [ga_cv_f77_mpi_test_link="$lib"; break], [ga_cv_f77_mpi_test_link=no]) LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_cv_f77_mpi_test_link])]) AS_IF([test "x$ga_cv_f77_mpi_test_link" = xno], [AC_MSG_CHECKING([for openmpi libraries]) for lib in "-lmpi_f90 -lmpi_f77 -lmpi" "-lmpi_f77 -lmpi" do LIBS="$LIBS $lib" AC_LINK_IFELSE([], [ga_cv_f77_mpi_test_link="$lib"; break], [ga_cv_f77_mpi_test_link=no]) LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_cv_f77_mpi_test_link])]) rm -f conftest.$ac_ext LIBS="$ga_save_LIBS" LDFLAGS="$ga_save_LDFLAGS" FFLAGS="$ga_save_FFLAGS" AC_LANG_POP([Fortran 77]) AS_CASE([$ga_cv_f77_mpi_test_link], [yes], [], [no], [AC_MSG_FAILURE([could not link simple Fortran MPI program])], [*], [GA_MP_LIBS="$ga_cv_f77_mpi_test_link"], []) ])dnl ga-5-3/m4/ga_tbb.m40000640005473000001440000000426711705402314012602 0ustar d3n000users# GA_TBB() # -------- # Locate Intel Threading Building Blocks. # # They may have been installed to a typical root/include and root/lib location, # or the user may have downloaded a source or binary tarball. # # The source tarballs contain a Makefile to be used with gmake while the binary # tarball contains a number of libraries. In either case, the TBB README # recommends setting the $TBBROOT environment variable to point to the base # directory of either the source or binary untarred directories. This isn't # sufficient for locating libtbb.so since the source release builds both # 'debug' and 'release' versions of the library into a 'work_dir' location # based on the user's system information (uname, etc) and the binary release # contains multiple versions of the library based on many different systems and # CPU architectures. Ugh. # # If $TBBROOT is set (or $tbb_root), we first search for the # $TBBROOT/build/common.inc Makefile fragment since this will help us find the # appropriate libtbb.so. # # If $TBBROOT is not set, we try a standard lookup of the package which will # most likely fail unless the user helps. # AC_DEFUN([GA_TBB], [ tbb_ok=no # has the user set TBBROOT or tbb_root? AS_IF([test "x$TBBROOT" != x || test "x$tbb_root" != x], [ rm -f the_makefile rm -f result.txt rm -f out.txt cat >the_makefile <<"EOF" ifdef TBBROOT tbb_root=$(TBBROOT) endif include $(tbb_root)/build/common.inc result.txt: @echo "$(work_dir)" > result.txt EOF AS_IF([gmake -f the_makefile &> out.txt], [tbb_work_dir=`cat result.txt`; tbb_ok=yes], [cat out.txt >&AS_MESSAGE_LOG_FD]) AS_IF([test "x$tbb_work_dir" != x], [TBB_LDFLAGS="-L${tbb_work_dir}_release"]) AS_IF([test "x$TBBROOT" != x], [TBB_CPPFLAGS="-I$TBBROOT/include"], [test "x$tbb_root" != x], [TBB_CPPFLAGS="-I$tbb_root/include"]) TBB_LIBS="-ltbb" rm -f the_makefile rm -f result.txt rm -f out.txt ]) AS_IF([test "x$tbb_ok" = xno], [ GA_CHECK_PACKAGE([tbb], [tbb/tbb.h], [tbb], [TBB_runtime_interface_version], [], [tbb_ok=yes], [AC_MSG_ERROR([could not locate Intel Thread Building Blocks])]) ]) AC_SUBST([TBB_CPPFLAGS]) AC_SUBST([TBB_LDFLAGS]) AC_SUBST([TBB_LIBS]) ]) ga-5-3/m4/libtool.m40000640005473000001440000105721611650323546013043 0ustar d3n000users# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS ga-5-3/m4/ga_f77_ld_override.m40000640005473000001440000000171211410510454015002 0ustar d3n000users# GA_F77_LD_OVERRIDE # ------------------ # Replaced $(F77LINK) in our Makefile.am's with $(LINK) if needed. # # There is a ton of garbage here. We must replicate what automake will do in # the case where we enable F77 code (and therefore require the F77LINK). We # use autoconf quadrigraphs to avoid problems with $(foo) and $@. This is yet # another hack to disable F77 since automake selects the linker based on the # static list of source files. AC_DEFUN([GA_F77_LD_OVERRIDE], [ m4_pattern_allow([AM_V_lt]) AS_IF([test "x$enable_f77" = xyes], [F77LINK='@S|@@{:@LIBTOOL@:}@ @S|@@{:@AM_V_lt@:}@ --tag=F77 @S|@@{:@AM_LIBTOOLFLAGS@:}@ @S|@@{:@LIBTOOLFLAGS@:}@ --mode=link @S|@@{:@F77LD@:}@ @S|@@{:@AM_FFLAGS@:}@ @S|@@{:@FFLAGS@:}@ @S|@@{:@AM_LDFLAGS@:}@ @S|@@{:@LDFLAGS@:}@ -o @S|@@' am__v_F77LD_0='@echo " F77LD " @S|@@;'], [F77LINK='@S|@@{:@LINK@:}@' am__v_F77LD_0='@S|@@{:@am__v_CCLD_0@:}@']) AC_SUBST([F77LINK]) AC_SUBST([am__v_F77LD_0]) ])dnl ga-5-3/m4/ga_mpicxx.m40000640005473000001440000000443611672215522013347 0ustar d3n000users# GA_PROG_MPICXX # -------------- # If desired, replace CXX with MPICXX while searching for a C++ compiler. # # Known C++ compilers: # aCC HP-UX C++ compiler much better than `CC', so test before. # c++ # cc++ # CC # cl.exe # cxx # FCC Fujitsu C++ compiler # g++ # gpp # icpc Intel C++ compiler # KCC KAI C++ compiler # RCC Rational C++ # bgxlC Intel # bgxlC_r Intel, thread safe # xlC AIX C Set++ # xlC_r AIX C Set++, thread safe # pgCC Portland Group # pathCC PathScale # sxc++ NEC SX # openCC AMD's x86 open64 # sunCC Sun's Studio # crayc++ Cray # # Known MPI C++ compilers # mpic++ # mpicxx # mpiCC # sxmpic++ NEC SX # hcp # mpxlC_r # mpxlC # mpixlcxx_r # mpixlcxx # mpg++ # mpc++ # mpCC # cmpic++ # mpiFCC Fujitsu # CC # AC_DEFUN([GA_PROG_MPICXX], [AC_ARG_VAR([MPICXX], [MPI C++ compiler]) AS_CASE([$ga_cv_target_base], [BGP], [ga_mpicxx_pref=mpixlcxx_r; ga_cxx_pref=bgxlC_r], []) # In the case of using MPI wrappers, set CXX=MPICXX since CXX will override # absolutely everything in our list of compilers. AS_IF([test x$with_mpi_wrappers = xyes], [AS_IF([test "x$CXX" != "x$MPICXX"], [ga_orig_CXX="$CXX"]) AS_CASE([x$CXX:x$MPICXX], [x:x], [], [x:x*], [CXX="$MPICXX"], [x*:x], [AC_MSG_WARN([MPI compilers desired but CXX is set while MPICXX is unset.]) AC_MSG_WARN([CXX will be ignored during compiler selection, but will be]) AC_MSG_WARN([tested first during MPI compiler unwrapping. Perhaps you]) AC_MSG_WARN([meant to set MPICXX instead of or in addition to CXX?]) CXX=], [x*:x*], [AS_IF([test "x$CXX" != "x$MPICXX"], [AC_MSG_WARN([MPI compilers desired, MPICXX and CXX are set, and MPICXX!=CXX.]) AC_MSG_WARN([Choosing MPICXX over CXX.]) AC_MSG_WARN([CXX will be tested first during MPI compiler unwrapping.])]) CXX="$MPICXX"], [AC_MSG_ERROR([CXX/MPICXX case failure])])]) ga_cxx="icpc pgCC pathCC sxc++ xlC_r xlC bgxlC_r bgxlC openCC sunCC crayc++ g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC" ga_mpicxx="mpic++ mpicxx mpiCC sxmpic++ hcp mpxlC_r mpxlC mpixlcxx_r mpixlcxx mpg++ mpc++ mpCC cmpic++ mpiFCC CC" AS_IF([test x$with_mpi_wrappers = xyes], [CXX_TO_TEST="$ga_mpicxx_pref $ga_mpicxx"], [CXX_TO_TEST="$ga_cxx_pref $ga_cxx"]) AC_PROG_CXX([$CXX_TO_TEST]) ])dnl ga-5-3/m4/ga_enable_checkpoint.m40000640005473000001440000000070611410510454015460 0ustar d3n000users# GA_ENABLE_CHECKPOINT # -------------------- # Whether to enable checkpoinging. AC_DEFINEs ENABLE_CHECKPOINT. AC_DEFUN([GA_ENABLE_CHECKPOINT], [AC_ARG_ENABLE([checkpoint], [AS_HELP_STRING([--enable-checkpoint], [enable checkpointing])], [enable_checkpoint=yes AC_DEFINE([ENABLE_CHECKPOINT], [1], [Define if checkpointing is enabled])], [enable_checkpoint=no]) AM_CONDITIONAL([ENABLE_CHECKPOINT], [test x$enable_checkpoint = xyes]) ])dnl ga-5-3/m4/ga_with_help.m40000640005473000001440000000065311410510454014007 0ustar d3n000users# GA_WITH_HELP # ------------ # Using undocumented features, add some text to our --with-PACKAGE help to # avoid repetition. AC_DEFUN([GA_WITH_HELP], [AC_ARG_WITH([PACKAGE], [AS_HELP_STRING([--with-PACKAGE[[=ARG]]], [for most of the external software packages, ARG can be one or more whitespace-separated directories, linker or preprocessor directives; for example, --with-PACKAGE="/path/to/PACKAGE -lmylib -I/mydir"])])]) ga-5-3/m4/ga_blas.m40000640005473000001440000002654611633720576012775 0ustar d3n000users# GA_F77_BLAS_TEST # ---------------- # Generate Fortran 77 conftest for BLAS. AC_DEFUN([GA_F77_BLAS_TEST], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([], [[ implicit none INTEGER M, N, K, LDA, LDB, LDC COMPLEX CA(20,40), CB(20,30), CC(40,30), Calpha, Cbeta DOUBLE COMPLEX ZA(20,40), ZB(20,30), ZC(40,30), Zalpha, Zbeta REAL SA(20,40), SB(20,30), SC(40,30), Salpha, Sbeta DOUBLE PRECISION DA(20,40), DB(20,30), DC(40,30), Dalpha, Dbeta external CGEMM external ZGEMM external SGEMM external DGEMM M = 10 N = 20 K = 15 LDA = 20 LDB = 20 LDC = 40 Calpha = 2.0 Cbeta = 2.0 Zalpha = 2.0 Zbeta = 2.0 Salpha = 2.0 Sbeta = 2.0 Dalpha = 2.0 Dbeta = 2.0 CALL CGEMM ('T','N',M,N,K,Calpha,CA,LDA,CB,LDB,Cbeta,CC,LDC) CALL ZGEMM ('T','N',M,N,K,Zalpha,ZA,LDA,ZB,LDB,Zbeta,ZC,LDC) CALL SGEMM ('T','N',M,N,K,Salpha,SA,LDA,SB,LDB,Sbeta,SC,LDC) CALL DGEMM ('T','N',M,N,K,Dalpha,DA,LDA,DB,LDB,Dbeta,DC,LDC)]])]) ]) # GA_C_BLAS_TEST # -------------- # Generate C conftest for BLAS. AC_DEFUN([GA_C_BLAS_TEST], [AC_LANG_CONFTEST([AC_LANG_PROGRAM( [#ifdef __cplusplus extern "C" { #endif char cgemm (); char dgemm (); char sgemm (); char zgemm (); #ifdef __cplusplus } #endif ], [[char cresult = cgemm (); char dresult = dgemm (); char sresult = sgemm (); char zresult = zgemm (); ]])]) ]) # GA_C_RUN_BLAS_TEST # ------------------ # Test the C linker. # Clears BLAS_LIBS on failure. Sets ga_blas_ok=yes on success. AC_DEFUN([GA_C_RUN_BLAS_TEST], [ AC_LANG_PUSH([C]) GA_C_BLAS_TEST() AC_LINK_IFELSE([], [ga_blas_ok=yes], [BLAS_LIBS=]) AC_LANG_POP([C]) ])dnl # GA_F77_RUN_BLAS_TEST # -------------------- # Test the Fortran 77 linker. # Clears BLAS_LIBS on failure. Sets ga_blas_ok=yes on success. AC_DEFUN([GA_F77_RUN_BLAS_TEST], [ AC_LANG_PUSH([Fortran 77]) GA_F77_BLAS_TEST() AC_LINK_IFELSE([], [ga_blas_ok=yes], [BLAS_LIBS=]) AC_LANG_POP([Fortran 77]) ])dnl # GA_RUN_BLAS_TEST # ---------------- # Test the linker. # Clears BLAS_LIBS on failure. Sets ga_blas_ok=yes on success. AC_DEFUN([GA_RUN_BLAS_TEST], [ AS_IF([test "x$enable_f77" = xno], [AC_LANG_PUSH([C]) GA_C_BLAS_TEST() AC_LINK_IFELSE([], [ga_blas_ok=yes], [BLAS_LIBS=]) AC_LANG_POP([C])], [AC_LANG_PUSH([Fortran 77]) GA_F77_BLAS_TEST() AC_LINK_IFELSE([], [ga_blas_ok=yes], [BLAS_LIBS=]) AC_LANG_POP([Fortran 77])]) ])dnl # GA_BLAS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # ------------------------------------------------- # Parse the --with-blas argument and test for all *gemm routines. We use # different tests depending on whether Fortran sources are enabled. There are # many flavors of BLAS that we test for explicitly, although the list could # probably be reduced based on currently available systems. # # Apparently certain compilers on BGP define sgemm and dgemm, so we must # test for a different BLAS routine. cgemm seems okay. AC_DEFUN([GA_BLAS], [AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS]) blas_size=4 blas_size_hack=no AC_ARG_WITH([blas], [AS_HELP_STRING([--with-blas[[=ARG]]], [use external BLAS library; attempt to detect sizeof(INTEGER)])], [blas_size_hack=yes]) AC_ARG_WITH([blas4], [AS_HELP_STRING([--with-blas4[[=ARG]]], [use external BLAS library compiled with sizeof(INTEGER)==4])], [blas_size=4; with_blas="$with_blas4"]) AC_ARG_WITH([blas8], [AS_HELP_STRING([--with-blas8[[=ARG]]], [use external BLAS library compiled with sizeof(INTEGER)==8])], [blas_size=8; with_blas="$with_blas8"]) ga_blas_ok=no AS_IF([test "x$with_blas" = xno], [ga_blas_ok=skip]) # Parse --with-blas argument. Clear previous values first. BLAS_LIBS= BLAS_LDFLAGS= BLAS_CPPFLAGS= GA_ARG_PARSE([with_blas], [BLAS_LIBS], [BLAS_LDFLAGS], [BLAS_CPPFLAGS]) # Get fortran linker names of BLAS functions to check for. AC_F77_FUNC(cgemm) AC_F77_FUNC(dgemm) AC_F77_FUNC(sgemm) AC_F77_FUNC(zgemm) ga_save_LIBS="$LIBS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$BLAS_LDFLAGS $LDFLAGS" ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$BLAS_CPPFLAGS $CPPFLAGS" AC_MSG_NOTICE([Attempting to locate BLAS library]) # First, check environment/command-line variables. # If failed, erase BLAS_LIBS but maintain BLAS_LDFLAGS and BLAS_CPPFLAGS. AS_IF([test $ga_blas_ok = no], [AC_MSG_CHECKING([for BLAS with user-supplied flags]) LIBS="$BLAS_LIBS $LIBS" GA_RUN_BLAS_TEST() LIBS="$ga_save_LIBS" AS_IF([test $ga_blas_ok = yes], [AS_IF([test $blas_size_hack = yes], [AS_CASE(["$BLAS_LIBS $LIBS $LDFLAGS $CPPFLAGS"], [*ilp64*], [blas_size=8], # Intel MKL [*_int64*], [blas_size=8])])]) # AMD ACML AC_MSG_RESULT([$ga_blas_ok])]) # AMD Core Math Library (ACML) AS_IF([test $ga_blas_ok = no], [AC_MSG_CHECKING([for BLAS in AMD Core Math Library]) # add -lacml to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*acml*], [], [BLAS_LIBS="-lacml"]) LIBS="$BLAS_LIBS $LIBS" GA_RUN_BLAS_TEST() LIBS="$ga_save_LIBS" AS_IF([test "x$ga_blas_ok" = xyes], [AS_IF([test $blas_size_hack = yes], [AS_CASE(["$BLAS_LIBS $LIBS $LDFLAGS $CPPFLAGS"], [*_int64*], [blas_size=8])])]) AC_MSG_RESULT([$ga_blas_ok])]) # Intel MKL library AS_IF([test $ga_blas_ok = no], [AC_MSG_CHECKING([for BLAS in Intel Math Kernel Library]) # add -lmkl to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*mkl*], [], [BLAS_LIBS="-lmkl"]) LIBS="$BLAS_LIBS $LIBS" GA_RUN_BLAS_TEST() LIBS="$ga_save_LIBS" AS_IF([test "x$ga_blas_ok" = xyes], [AS_IF([test $blas_size_hack = yes], [AS_CASE(["$BLAS_LIBS $LIBS $LDFLAGS $CPPFLAGS"], [*ilp64*], [blas_size=8])])]) AC_MSG_RESULT([$ga_blas_ok])]) # ATLAS library (http://math-atlas.sourceforge.net/) AS_IF([test $ga_blas_ok = no], [AC_MSG_CHECKING([for BLAS in ATLAS]) AS_IF([test "x$enable_f77" = xno], [# add -lcblas if needed but missing from LIBS AS_CASE([$LIBS], [*cblas*], [], [BLAS_LIBS="-lcblas"])], [# add -lf77blas if needed but missing from LIBS AS_CASE([$LIBS], [*f77blas*], [], [BLAS_LIBS="-lf77blas"])]) # add -latlas if needed but missing from LIBS AS_CASE([$LIBS], [*atlas*], [], [BLAS_LIBS="$BLAS_LIBS -latlas"]) LIBS="$BLAS_LIBS $LIBS" GA_RUN_BLAS_TEST() LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_blas_ok])]) # PhiPACK libraries (requires generic BLAS lib, too) AS_IF([test $ga_blas_ok = no], [AC_MSG_CHECKING([for BLAS in PhiPACK libraries]) # add -lblas to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*blas*], [], [BLAS_LIBS="-lblas"]) # add -ldgemm to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*dgemm*], [], [BLAS_LIBS="-ldgemm $BLAS_LIBS"]) # add -lsgemm to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*sgemm*], [], [BLAS_LIBS="-lsgemm $BLAS_LIBS"]) LIBS="$BLAS_LIBS $LIBS" GA_RUN_BLAS_TEST() LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_blas_ok])]) # Apple Accelerate.framework AS_IF([test $ga_blas_ok = no], [AC_MSG_CHECKING([for BLAS in Apple Accelerate.framework]) # add -framework Accelerate to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*Accelerate*], [], [BLAS_LIBS="-framework Accelerate"]) LIBS="$BLAS_LIBS $LIBS" GA_RUN_BLAS_TEST() LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_blas_ok])]) # Apple vecLib.framework AS_IF([test $ga_blas_ok = no], [AC_MSG_CHECKING([for BLAS in Apple vecLib.framework]) # add -framework vecLib to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*vecLib*], [], [BLAS_LIBS="-framework vecLib"]) LIBS="$BLAS_LIBS $LIBS" GA_RUN_BLAS_TEST() LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_blas_ok])]) # Alpha CXML library (CXML stands for Compaq Extended Math Library) AS_IF([test $ga_blas_ok = no], [AC_MSG_CHECKING([for BLAS in Alpha CXML library]) # add -lcxml to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*cxml*], [], [BLAS_LIBS="-lcxml"]) LIBS="$BLAS_LIBS $LIBS" GA_RUN_BLAS_TEST() LIBS="$ga_save_LIBS" AS_IF([test $ga_blas_ok = no], [# add -lcxml to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*cxml*], [], [BLAS_LIBS="-lcxml"]) # add -lcpml to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*cpml*], [], [BLAS_LIBS="$BLAS_LIBS -lcpml"]) LIBS="$BLAS_LIBS $LIBS" GA_RUN_BLAS_TEST() LIBS="$ga_save_LIBS"]) AC_MSG_RESULT([$ga_blas_ok])]) # Alpha DXML library (now called CXML, see above) # Sun Performance library AS_IF([test $ga_blas_ok = no], [AC_MSG_CHECKING([for BLAS in Sun Performance Library]) # add -xlic_lib=sunperf to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*sunperf*], [], [BLAS_LIBS="-xlic_lib=sunperf"]) LIBS="$BLAS_LIBS $LIBS" GA_RUN_BLAS_TEST() LIBS="$ga_save_LIBS" AS_IF([test $ga_blas_ok = no], [# add -xlic_lib=sunperf to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*sunperf*], [], [BLAS_LIBS="-xlic_lib=sunperf"]) # add -lsunmath to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*sunmath*], [], [BLAS_LIBS="$BLAS_LIBS -lsunmath"]) LIBS="$BLAS_LIBS $LIBS" GA_RUN_BLAS_TEST() LIBS="$ga_save_LIBS"]) AC_MSG_RESULT([$ga_blas_ok])]) # SCSL library (SCSL stands for SGI/Cray Scientific Library) AS_IF([test $ga_blas_ok = no], [AC_MSG_CHECKING([for BLAS in SGI/Cray Scientific Library]) # add -lscs to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*scs*], [], [BLAS_LIBS="-lscs"]) LIBS="$BLAS_LIBS $LIBS" GA_RUN_BLAS_TEST() LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_blas_ok])]) # SGIMATH library AS_IF([test $ga_blas_ok = no], [AC_MSG_CHECKING([for BLAS in SGIMATH library]) # add -lcomplib.sgimath to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*complib.sgimath*], [], [BLAS_LIBS="-lcomplib.sgimath"]) LIBS="$BLAS_LIBS $LIBS" GA_RUN_BLAS_TEST() LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_blas_ok])]) # IBM ESSL library (requires generic BLAS lib, too) AS_IF([test $ga_blas_ok = no], [AC_MSG_CHECKING([for BLAS in IBM ESSL library]) # add -lessl to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*essl*], [], [BLAS_LIBS="-lessl"]) # add -lblas to BLAS_LIBS if missing from LIBS AS_CASE([$LIBS], [*blas*], [], [BLAS_LIBS="$BLAS_LIBS -lblas"]) LIBS="$BLAS_LIBS $LIBS" GA_RUN_BLAS_TEST() LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_blas_ok])]) # Generic BLAS library AS_IF([test $ga_blas_ok = no], [AC_MSG_CHECKING([for BLAS in generic library]) BLAS_LIBS="-lblas" LIBS="$BLAS_LIBS $LIBS" GA_RUN_BLAS_TEST() LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_blas_ok])]) CPPFLAGS="$ga_save_CPPFLAGS" LDFLAGS="$ga_save_LDFLAGS" AC_SUBST([BLAS_LIBS]) AC_SUBST([BLAS_LDFLAGS]) AC_SUBST([BLAS_CPPFLAGS]) # Tests are complete. Execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: AS_IF([test $ga_blas_ok = yes], [have_blas=1 $1], [AC_MSG_WARN([BLAS library not found, using internal BLAS]) blas_size=$ga_cv_f77_integer_size # reset blas integer size to desired have_blas=0 $2]) AC_DEFINE_UNQUOTED([HAVE_BLAS], [$have_blas], [Define to 1 if using external BLAS library]) AC_DEFINE_UNQUOTED([BLAS_SIZE], [$blas_size], [Define to sizeof(INTEGER) used to compile BLAS]) AM_CONDITIONAL([HAVE_BLAS], [test $ga_blas_ok = yes]) ])dnl GA_BLAS ga-5-3/m4/ga_f2c_string.m40000640005473000001440000000707511500231746014075 0ustar d3n000users# _GA_F2C_STRING(ARGLIST, [ACTION-IF-SUCCESS], [ACTION-IF-FAILURE]) # ----------------------------------------------------------------- # Use ARGLIST in a Fortran/C mixed-language program and attempt to run it. # The Fortran program calls a C subroutine, passing two character strings. AC_DEFUN([_GA_F2C_STRING], [AC_F77_FUNC([SUB]) AC_LANG_PUSH([C]) AC_COMPILE_IFELSE([AC_LANG_SOURCE( [[#include #include #define LEN 80 void fix_c_string_for_f(char *s, int len); void fix_f_string_for_c(char *s, int len); void $SUB($1) { char result[LEN]; fix_f_string_for_c(fname, fname_len); fix_f_string_for_c(lname, lname_len); snprintf(result, LEN, "The names passed to C: %s %s\n", fname, lname); fix_c_string_for_f(fname, fname_len); fix_c_string_for_f(lname, lname_len); } void fix_c_string_for_f(char *s, int len) { int i; for (i=strlen(s); i < len; i++) { s[i] = ' '; } } void fix_f_string_for_c(char *s, int len) { int i; for (i=len-1; s[i] == ' ' && i>=0; i--) { s[i] = '\0'; } }]])], [mv conftest.$ac_objext cfortran_test.$ac_objext ga_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $[]_AC_LANG_PREFIX[]LIBS" AC_LANG_PUSH([Fortran 77]) AC_RUN_IFELSE([[ program main character(LEN=10) :: first_name character(LEN=15) :: last_name first_name = "John" last_name = "Doe" call sub(first_name, last_name) end]], [m4_default([$2], :)], [m4_default([$3], :)]) AC_LANG_POP([Fortran 77]) LIBS=$ga_save_LIBS rm -f cfortran_test*], [m4_default([$3], :)]) AC_LANG_POP([C]) rm -rf conftest* ])dnl # GA_F2C_HIDDEN_STRING_LENGTH_CONVENTION([VALUE-IF-CROSS-COMPILING = yes]) # --------------------------------------------------------------------------- # Determine whether a Fortran program passes the hidden string length to a # C subroutine after all arguments versus immediately after the string. # AC_DEFINEs F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS=. AC_DEFUN([GA_F2C_HIDDEN_STRING_LENGTH_CONVENTION], [AC_ARG_VAR([F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS], [if cross compiling, set to either "yes" (default) or "no" (after string)]) AC_CACHE_CHECK([whether Fortran hidden string length convention is after args], [ga_cv_f2c_string_after_args], [AS_IF([test "x$F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS" != x], [ga_cv_f2c_string_after_args="$F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS"]) AS_IF([test "x$ga_cv_f2c_string_after_args" = x], [AS_IF([test x$cross_compiling = xyes], [AS_IF([test "x$1" != x], [ga_cv_f2c_string_after_args="$1"], [ga_cv_f2c_string_after_args="yes"])])]) AS_IF([test "x$ga_cv_f2c_string_after_args" = x], [_GA_F2C_STRING([char *fname, char *lname, int fname_len, int lname_len], [ga_cv_f2c_string_after_args="yes"])]) AS_IF([test "x$ga_cv_f2c_string_after_args" = x], [_GA_F2C_STRING([char *fname, int fname_len, char *lname, int lname_len], [ga_cv_f2c_string_after_args="no"])])]) AS_IF([test x$cross_compiling = xyes], [AC_MSG_WARN([cross compiling: cannot determine f2c string convention]) AC_MSG_WARN([default is after args (=yes) but can be changed using]) AC_MSG_WARN([F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS=no])]) AS_IF([test "x$ga_cv_f2c_string_after_args" = "xyes"], [AC_DEFINE([F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS], [1], [whether the hidden string length comes after all other args])]) AS_IF([test "x$ga_cv_f2c_string_after_args" != x], [m4_default([$2], :)], [m4_default([$3], [AC_MSG_ERROR( [f2c string convention is neither after args nor after string])])]) ])dnl ga-5-3/m4/ga_c_opt.m40000640005473000001440000000551711633714777013161 0ustar d3n000users# GA_C_OPT() # ---------- # Determine TARGET-/compiler-specific CFLAGS for optimization. AC_DEFUN([GA_C_OPT], [ AC_REQUIRE([GA_TARGET64]) AC_REQUIRE([GA_ENABLE_OPT]) AC_ARG_VAR([GA_COPT], [GA C optimization flags]) AC_CACHE_CHECK([for specific C optimizations], [ga_cv_c_opt], [ AS_IF([test "x$GA_COPT" != x], [ga_cv_c_opt="$GA_COPT"], [ga_cv_c_opt=]) AS_IF([test "x$ga_cv_c_opt" = x && test "x$enable_opt" = xyes], [ AS_CASE([$ga_cv_target:$ga_cv_c_compiler_vendor:$host_cpu], [BGL:*:*], [ga_cv_c_opt="-O0"], [BGP:ibm:*], [ga_cv_c_opt="-O3 -qstrict -qarch=450 -qtune=450"], [BGP:gnu:*], [ga_cv_c_opt="-O2"], [CATAMOUNT:*:*], [ga_cv_c_opt=], [CRAY_XT:*:*], [ga_cv_c_opt=], [CYGWIN:*:*], [ga_cv_c_opt=], [FUJITSU_VPP64:*:*], [ga_cv_c_opt=], [FUJITSU_VPP:*:*], [ga_cv_c_opt="-KA32"], [HPUX64:*:*], [ga_cv_c_opt="-Ae"], [HPUX64:*:ia64], [ga_cv_c_opt="-Ae"], [HPUX:*:*], [ga_cv_c_opt="-Ae"], [IBM64:*:*], [ga_cv_c_opt=], [IBM:*:*], [ga_cv_c_opt=], [LAPI64:*:*], [ga_cv_c_opt=], [LAPI:*:*], [ga_cv_c_opt=], [LINUX64:fujitsu:ia64], [ga_cv_c_opt="-Kfast"], [LINUX64:fujitsu:x86_64], [ga_cv_c_opt="-Kfast"], [LINUX64:gnu:ia64], [ga_cv_c_opt="-O3 -funroll-loops"], [LINUX64:gnu:powerpc64], [ga_cv_c_opt="-funroll-loops"], [LINUX64:gnu:ppc64], [ga_cv_c_opt="-funroll-loops"], [LINUX64:gnu:x86_64], [ga_cv_c_opt="-O2 -funroll-loops"], [LINUX64:ibm:powerpc64], [ga_cv_c_opt="-qinline=100 -qstrict -qarch=auto -qtune=auto"], [LINUX64:ibm:ppc64], [ga_cv_c_opt="-qinline=100 -qstrict -qarch=auto -qtune=auto"], [LINUX64:ibm:x86_64], [ga_cv_c_opt=], [LINUX64:intel:ia64], [ga_cv_c_opt="-fno-alias -ftz"], [LINUX:fujitsu:*], [ga_cv_c_opt="-Kfast"], [LINUX:gnu:786], [ga_cv_c_opt="-O2 -funroll-loops -malign-double"], [LINUX:gnu:*], [ga_cv_c_opt="-O2 -funroll-loops"], [LINUX:gnu:x86], [ga_cv_c_opt="-O2 -funroll-loops -malign-double"], [LINUX:ibm:*], [ga_cv_c_opt="-q32"], [LINUX:intel:*], [ga_cv_c_opt="-O3 -prefetch"], [MACX64:*:*], [ga_cv_c_opt=], [MACX:*:*], [ga_cv_c_opt=], [NEC64:*:*], [ga_cv_c_opt="-Cvsafe -size_t64"], [NEC:*:*], [ga_cv_c_opt="-Cvsafe"], [SOLARIS64:fujitsu:*], [ga_cv_c_opt="-Kfast -KV9FMADD"], [SOLARIS64:gnu:*], [ga_cv_c_opt="-dalign -xarch=v9"], [SOLARIS64:gnu:i386], [ga_cv_c_opt="-dalign -xarch=amd64"], [SOLARIS:fujitsu:*], [ga_cv_c_opt="-Kfast -KV8PFMADD"], [SOLARIS:gnu:*], [ga_cv_c_opt="-dalign"], [SOLARIS:gnu:i386], [ga_cv_c_opt="-dalign -xarch=sse2"], [ga_cv_c_opt=]) ])]) AC_SUBST([GA_COPT], [$ga_cv_c_opt]) ])dnl ga-5-3/m4/armci_cxx_opt.m40000640005473000001440000000157011633714777014240 0ustar d3n000users# ARMCI_CXX_OPT() # --------------- # Determine TARGET-/compiler-specific CXXFLAGS and FFLAGS for optimization. AC_DEFUN([ARMCI_CXX_OPT], [ AC_REQUIRE([GA_TARGET64]) AC_REQUIRE([GA_ENABLE_OPT]) AC_REQUIRE([GA_ARMCI_NETWORK]) AC_ARG_VAR([ARMCI_CXXOPT], [ARMCI C++ optimization flags]) AC_CACHE_CHECK([for specific C++ optimizations], [armci_cv_cxx_opt], [ AS_IF([test "x$ARMCI_CXXOPT" != x], [armci_cv_cxx_opt="$ARMCI_CXXOPT"], [armci_cv_cxx_opt=]) AS_IF([test "x$armci_cv_cxx_opt" = x && test "x$enable_opt" = xyes], [ AS_CASE([$ga_cv_target:$ga_cv_cxx_compiler_vendor:$host_cpu:$ga_armci_network], [LINUX:*:*:*], [armci_cv_cxx_opt="-O0"], [NEC64:*:*:*], [armci_cv_cxx_opt="-Cvsafe -size_t64"], [NEC:*:*:*], [armci_cv_cxx_opt="-Cvsafe"], [armci_cv_cxx_opt=]) ])]) AC_SUBST([ARMCI_CXXOPT], [$armci_cv_cxx_opt]) ])dnl ga-5-3/m4/ga_sys_weak_alias.m40000640005473000001440000000176611701667223015042 0ustar d3n000users# GA_DISABLE_SYS_WEAK_ALIAS # ------------------------- # Whether to disable the test for weak aliases AC_DEFUN([GA_DISABLE_SYS_WEAK_ALIAS], [ AC_ARG_ENABLE([weak], [AS_HELP_STRING([--disable-weak], [don't use weak symbols for profiling])], [], [enable_weak=yes]) AS_IF([test "x$ga_cv_target_base" = xCYGWIN], [enable_weak=no]) ])dnl # GA_SYS_WEAK_ALIAS # ----------------- # Whether pragma weak is supported. AC_DEFUN([GA_SYS_WEAK_ALIAS], [ AS_IF([test "x$enable_weak" = xyes], [ax_sys_weak_alias=no _AX_SYS_WEAK_ALIAS_PRAGMA], [ax_cv_sys_weak_alias_pragma=no AC_DEFINE([HAVE_SYS_WEAK_ALIAS_PRAGMA], [0], [Define this if weak aliases may be created with @%:@pragma weak])]) AM_CONDITIONAL([HAVE_SYS_WEAK_ALIAS_PRAGMA], [test "x$ax_cv_sys_weak_alias_pragma" = xyes]) # enable shared libs automatically if profiling using weak symbols AS_IF([test "x$ax_cv_sys_weak_alias_pragma" = xyes], [AS_IF([test "x$enable_profiling" = xyes], [enable_shared=yes])]) ])dnl ga-5-3/m4/armci_enable_profile.m40000640005473000001440000000071211410510454015472 0ustar d3n000users# ARMCI_ENABLE_PROFILE # -------------------- # Whether to enable profiling. AC_DEFINEs ARMCI_PROFILE. AC_DEFUN([ARMCI_ENABLE_PROFILING], [ AC_ARG_ENABLE([profiling], [AS_HELP_STRING([--enable-profiling], [enable profiling])], [], [enable_profiling=no]) AS_IF([test "x$enable_profiling" = xyes], [AC_DEFINE([ARMCI_PROFILE], [1], [Define if profiling is enabled])]) AM_CONDITIONAL([ENABLE_PROFILING], [test "x$enable_profiling" = xyes]) ])dnl ga-5-3/m4/ga_f77_disable.m40000640005473000001440000000211411613343424014112 0ustar d3n000users# GA_F77_DISABLE() # ---------------- # Whether to disable all Fortran code. AC_DEFUN([GA_F77_DISABLE], [AC_ARG_ENABLE([f77], [AS_HELP_STRING([--disable-f77], [disable Fortran code])], [], [enable_f77=yes]) ])# GA_F77_DISABLE # GA_F77_DISABLE_RESULTS() # ------------------------ # This used to be part of the the GA_F77_DISABLE macro, but it turns out the # fortran compiler may be bogus and therefore we should disable it after # GA_F77_DISABLE has been run. These AC_DEFINEs and AM_CONDITIONALs should be # set at the last possible moment when the final value for enable_f77 has been # set. AC_DEFUN([GA_F77_DISABLE_RESULTS], [ AS_IF([test "x$enable_f77" = xyes], [AC_DEFINE([NOFORT], [0], [Define to 1 if not using Fortran]) AC_DEFINE([ENABLE_F77], [1], [Define to 1 if using Fortran])], [AC_DEFINE([NOFORT], [1], [Define to 1 if not using Fortran]) AC_DEFINE([ENABLE_F77], [0], [Define to 1 if using Fortran])]) AM_CONDITIONAL([NOFORT], [test "x$enable_f77" = xno]) AM_CONDITIONAL([ENABLE_F77], [test "x$enable_f77" = xyes]) ])# GA_F77_DISABLE_RESULTS ga-5-3/m4/ma_long_double.m40000640005473000001440000000057311410510454014324 0ustar d3n000users# MA_LONG_DOUBLE_TYPEDEF # ---------------------- # AC_SUBST a proper long double if one does not exist. AC_DEFUN([MA_LONG_DOUBLE_TYPEDEF], [AC_REQUIRE([AC_TYPE_LONG_DOUBLE]) AS_IF([test $ac_cv_type_long_double = yes], [ma_long_double="long double"], [ma_long_double="struct {double dummy[2];}"]) AC_SUBST([MA_LONG_DOUBLE], [$ma_long_double]) ]) # MA_LONG_DOUBLE_TYPEDEF ga-5-3/m4/ga_check_package.m40000640005473000001440000000307011551130416014552 0ustar d3n000users# GA_CHECK_PACKAGE(pkg, header, library, function, [extra-libs], # [action-if-found], [action-if-not-found]) # -------------------------------------------------------------- # AC_DEFUN([GA_CHECK_PACKAGE], [ AS_VAR_PUSHDEF([HAVE_PKG], m4_toupper(m4_translit([HAVE_$1], [-.], [__]))) AS_VAR_PUSHDEF([PKG_LIBS], m4_toupper(m4_translit([$1_LIBS], [-.], [__]))) AS_VAR_PUSHDEF([PKG_LDFLAGS], m4_toupper(m4_translit([$1_LDFLAGS], [-.], [__]))) AS_VAR_PUSHDEF([PKG_CPPFLAGS],m4_toupper(m4_translit([$1_CPPFLAGS], [-.], [__]))) AS_VAR_SET([PKG_LIBS],[]) AS_VAR_SET([PKG_LDFLAGS],[]) AS_VAR_SET([PKG_CPPFLAGS],[]) AC_ARG_WITH([$1], [AS_HELP_STRING([--with-$1[[=ARG]]], [specify location of $1 install and/or other flags])], [], [with_$1=yes]) AS_CASE([$with_$1], [yes], [], [no], [], [GA_ARG_PARSE( [with_$1], [PKG_LIBS], [PKG_LDFLAGS], [PKG_CPPFLAGS])]) # Check for header. ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $PKG_CPPFLAGS" AC_CHECK_HEADER([$2], [], [$7]) CPPFLAGS="$ga_save_CPPFLAGS" # Check for library. ga_save_LIBS="$LIBS"; LIBS="$PKG_LIBS $LIBS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $PKG_LDFLAGS" AC_SEARCH_LIBS([$4], [$3], [], [], [$5]) LIBS="$ga_save_LIBS" LDFLAGS="$ga_save_LDFLAGS" AS_IF([test "x$ac_cv_search_$4" != xno], [$6 AC_DEFINE([HAVE_PKG], [1], [set to 1 if we have the indicated package])], [$7]) AS_VAR_POPDEF([HAVE_PKG]) AS_VAR_POPDEF([PKG_LIBS]) AS_VAR_POPDEF([PKG_LDFLAGS]) AS_VAR_POPDEF([PKG_CPPFLAGS]) ])dnl ga-5-3/m4/ma_enable_armci_mem.m40000640005473000001440000000046711410510454015274 0ustar d3n000users# MA_ENABLE_ARMCI_MEM_OPTION # ------------------------------ # Whether to enable ARMCI in MA. AC_DEFUN([MA_ENABLE_ARMCI_MEM_OPTION], [AS_IF([test x$TARGET != xBGL], [AC_DEFINE([ENABLE_ARMCI_MEM_OPTION], [1], [enables ARMCI in MA])]) AM_CONDITIONAL([ENABLE_ARMCI_MEM_OPTION], [test x$TARGET != xBGL]) ])dnl ga-5-3/m4/ga_armci_network.m40000640005473000001440000007254012247206237014706 0ustar d3n000users# _GA_ARMCI_NETWORK_WITH(KEY, DESCRIPTION) # -------------------------------------------------- # A helper macro for generating all of the AC_ARG_WITHs. # Also may establish value of ga_armci_network. # Counts how many armci networks were specified by user. AC_DEFUN([_GA_ARMCI_NETWORK_WITH], [ AC_ARG_WITH([$1], [AS_HELP_STRING([--with-$1[[=ARG]]], [select armci network as $2])]) AS_VAR_PUSHDEF([KEY], m4_toupper(m4_translit([$1], [-.], [__]))) AS_VAR_PUSHDEF([with_key], m4_translit([with_$1], [-.], [__])) dnl Can't have AM_CONDITIONAL here in case configure must find armci network dnl without user intervention. dnl AM_CONDITIONAL([ARMCI_NETWORK_]KEY, [test "x$with_key" != x]) AS_IF([test "x$with_key" != x], [GA_ARG_PARSE([with_key], [ARMCI_NETWORK_LIBS], [ARMCI_NETWORK_LDFLAGS], [ARMCI_NETWORK_CPPFLAGS])]) AS_IF([test "x$with_key" != xno && test "x$with_key" != x], [ga_armci_network=KEY AS_VAR_ARITH([armci_network_count], [$armci_network_count + 1])]) AS_VAR_POPDEF([KEY]) AS_VAR_POPDEF([with_key]) ])dnl # _GA_ARMCI_NETWORK_WARN(KEY) # --------------------------- # Helper macro for idicating value of armci network arguments. AC_DEFUN([_GA_ARMCI_NETWORK_WARN], [ AS_VAR_PUSHDEF([with_key], m4_translit([with_$1], [-.], [__])) AS_IF([test "x$with_key" != x && test "x$with_key" != xno], [AC_MSG_WARN([--with-$1=$with_key])]) AS_VAR_POPDEF([with_key]) ])dnl # _GA_ARMCI_NETWORK_AM_CONDITIONAL(KEY) #-------------------------------------- # Helper macro for generating all AM_CONDITIONALs. AC_DEFUN([_GA_ARMCI_NETWORK_AM_CONDITIONAL], [ AS_VAR_PUSHDEF([KEY], m4_toupper(m4_translit([$1], [-.], [__]))) AS_VAR_PUSHDEF([with_key], m4_translit([with_$1], [-.], [__])) AM_CONDITIONAL([ARMCI_NETWORK_]KEY, [test "x$with_key" != x && test "x$with_key" != xno]) AS_VAR_POPDEF([KEY]) AS_VAR_POPDEF([with_key]) ])dnl # _GA_ARMCI_NETWORK_ARMCI([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ---------------------------------------------------------------- AC_DEFUN([_GA_ARMCI_NETWORK_ARMCI], [ AC_MSG_NOTICE([searching for external ARMCI...]) happy=yes CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" LIBS="$LIBS $GA_MP_LIBS" AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([armci.h], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([ARMCI_Init], [armci], [], [happy=no]) AS_CASE([$ac_cv_search_ARMCI_Init], ["none required"], [], [no], [], [# add missing lib to ARMCI_NETWORK_LIBS if not there AS_CASE([$ARMCI_NETWORK_LIBS], [*$ac_cv_search_ARMCI_Init*], [], [ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_ARMCI_Init"])])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([armci_group_comm], [armci]) AS_IF([test "x$ac_cv_search_armci_group_comm" != xno], [ac_cv_search_armci_group_comm=1], [ac_cv_search_armci_group_comm=0]) AC_DEFINE_UNQUOTED([HAVE_ARMCI_GROUP_COMM], [$ac_cv_search_armci_group_comm], [set to 1 if ARMCI has armci_group_comm function]) ]) AS_IF([test "x$happy" = xyes], [AC_CHECK_MEMBER([ARMCI_Group.comm], [], [], [[#include ]]) AS_IF([test "x$ac_cv_member_ARMCI_Group_comm" != xno], [ac_cv_member_ARMCI_Group_comm=1], [ac_cv_member_ARMCI_Group_comm=0]) AC_DEFINE_UNQUOTED([HAVE_ARMCI_GROUP_COMM_MEMBER], [$ac_cv_member_ARMCI_Group_comm], [set to 1 if ARMCI has ARMCI_Group.comm member]) ]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([ARMCI_Initialized], [armci]) AS_IF([test "x$ac_cv_search_ARMCI_Initialized" != xno], [ac_cv_search_ARMCI_Initialized=1], [ac_cv_search_ARMCI_Initialized=0]) AC_DEFINE_UNQUOTED([HAVE_ARMCI_INITIALIZED], [$ac_cv_search_ARMCI_Initialized], [set to 1 if ARMCI has ARMCI_Initialized function]) ]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([armci_stride_info_init], [armci]) AS_IF([test "x$ac_cv_search_armci_stride_info_init" != xno], [ac_cv_search_armci_stride_info_init=1], [ac_cv_search_armci_stride_info_init=0]) AC_DEFINE_UNQUOTED([HAVE_ARMCI_STRIDE_INFO_INIT], [$ac_cv_search_armci_stride_info_init], [set to 1 if ARMCI has armci_stride_info_init function]) ]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([armci_notify], [armci]) AS_IF([test "x$ac_cv_search_armci_notify" != xno], [ac_cv_search_armci_notify=1], [ac_cv_search_armci_notify=0]) AC_DEFINE_UNQUOTED([HAVE_ARMCI_NOTIFY], [$ac_cv_search_armci_notify], [set to 1 if ARMCI has armci_notify function]) ]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([armci_msg_init], [armci]) AS_IF([test "x$ac_cv_search_armci_msg_init" != xno], [ac_cv_search_armci_msg_init=1], [ac_cv_search_armci_msg_init=0]) AC_DEFINE_UNQUOTED([HAVE_ARMCI_MSG_INIT], [$ac_cv_search_armci_msg_init], [set to 1 if ARMCI has armci_msg_init function]) ]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([armci_msg_finalize], [armci]) AS_IF([test "x$ac_cv_search_armci_msg_finalize" != xno], [ac_cv_search_armci_msg_finalize=1], [ac_cv_search_armci_msg_finalize=0]) AC_DEFINE_UNQUOTED([HAVE_ARMCI_MSG_FINALIZE], [$ac_cv_search_armci_msg_finalize], [set to 1 if ARMCI has armci_msg_finalize function]) ]) AM_CONDITIONAL([HAVE_ARMCI_GROUP_COMM], [test "x$ac_cv_search_armci_group_comm" = x1]) AM_CONDITIONAL([HAVE_ARMCI_GROUP_COMM_MEMBER], [test "x$ac_cv_member_ARMCI_Group_comm" = x1]) AM_CONDITIONAL([HAVE_ARMCI_INITIALIZED], [test "x$ac_cv_search_ARMCI_Initialized" = x1]) AM_CONDITIONAL([HAVE_ARMCI_STRIDE_INFO_INIT], [test "x$ac_cv_search_armci_stride_info_init" = x1]) AM_CONDITIONAL([HAVE_ARMCI_NOTIFY], [test "x$ac_cv_search_armci_notify" = x1]) AM_CONDITIONAL([HAVE_ARMCI_MSG_INIT], [test "x$ac_cv_search_armci_msg_init" = x1]) AM_CONDITIONAL([HAVE_ARMCI_MSG_FINALIZE], [test "x$ac_cv_search_armci_msg_finalize" = x1]) AS_IF([test "x$happy" = xyes], [ga_armci_network=ARMCI; with_armci=yes; $1], [$2]) ])dnl # _GA_ARMCI_NETWORK_BGML([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ---------------------------------------------------------------- AC_DEFUN([_GA_ARMCI_NETWORK_BGML], [ AC_MSG_NOTICE([searching for BGML...]) happy=yes dnl AS_IF([test "x$happy" = xyes], dnl [AS_IF([test -d /bgl/BlueLight/ppcfloor/bglsys], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([BGLML_memcpy], [msglayer.rts], [], [happy=no], [-lrts.rts -ldevices.rts]) AS_CASE([$ac_cv_search_BGLML_memcpy], ["none required"], [], [no], [], [# add msglayer.rts to ARMCI_NETWORK_LIBS if not there AS_CASE([$ARMCI_NETWORK_LIBS], [*msglayer.rts*], [], [ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lmsglayer.rts"]) # add extra lib rts.rts to ARMCI_NETWORK_LIBS if not there AS_CASE([$ARMCI_NETWORK_LIBS], [*rts.rts*], [], [ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lrts.rts"]) # add extra lib devices.rts to ARMCI_NETWORK_LIBS if not there AS_CASE([$ARMCI_NETWORK_LIBS], [*devices.rts*], [], [ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -ldevices.rts"])])]) AS_IF([test "x$happy" = xyes], [ga_armci_network=BGML; with_bgml=yes; $1], [$2]) ])dnl # _GA_ARMCI_NETWORK_CRAY_SHMEM([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ---------------------------------------------------------------------- AC_DEFUN([_GA_ARMCI_NETWORK_CRAY_SHMEM], [ AC_MSG_NOTICE([searching for CRAY_SHMEM...]) happy=yes AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([mpp/shmem.h], [], [AC_CHECK_HEADER([shmem.h], [], [happy=no])])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([shmem_init], [sma], [], [happy=no]) AS_CASE([$ac_cv_search_shmem_init], ["none required"], [], [no], [], [# add sma to ARMCI_NETWORK_LIBS if not there AS_CASE([$ARMCI_NETWORK_LIBS], [*sma*], [], [ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lsma"])])]) AS_IF([test "x$happy" = xyes], [ga_armci_network=CRAY_SHMEM; with_cray_shmem=yes; $1], [$2]) ])dnl # _GA_ARMCI_NETWORK_DCMF([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ---------------------------------------------------------------- AC_DEFUN([_GA_ARMCI_NETWORK_DCMF], [ AC_MSG_NOTICE([searching for DCMF...]) happy=yes AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([dcmf.h], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([DCMF_Messager_initialize], [dcmf.cnk], [], [happy=no], [-ldcmfcoll.cnk -lSPI.cna -lrt]) AS_CASE([$ac_cv_search_DCMF_Messager_initialize], ["none required"], [], [no], [], [# add dcmf.cnk to ARMCI_NETWORK_LIBS if not there AS_CASE([$ARMCI_NETWORK_LIBS], [*dcmf.cnk*], [], [ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -ldcmf.cnk"]) # add extra lib dcmfcoll.cnk if not there AS_CASE([$ARMCI_NETWORK_LIBS], [*dcmfcoll.cnk*], [], [ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -ldcmfcoll.cnk"]) # add extra lib SPI.cna if not there AS_CASE([$ARMCI_NETWORK_LIBS], [*SPI.cna*], [], [ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lSPI.cna"]) # add extra lib rt if not there AS_CASE([$ARMCI_NETWORK_LIBS], [*rt*], [], [ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS -lrt"])])]) AS_IF([test "x$happy" = xyes], [ga_armci_network=DCMF; with_dcmf=yes; $1], [$2]) ])dnl # _GA_ARMCI_NETWORK_LAPI([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ---------------------------------------------------------------- AC_DEFUN([_GA_ARMCI_NETWORK_LAPI], [ AC_MSG_NOTICE([searching for LAPI...]) happy=yes AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([lapi.h], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([LAPI_Init], [lapi_r lapi], [], [happy=no]) AS_CASE([$ac_cv_search_LAPI_Init], ["none required"], [], [no], [], [# add missing lib to ARMCI_NETWORK_LIBS if not there AS_CASE([$ARMCI_NETWORK_LIBS], [*$ac_cv_search_LAPI_Init*], [], [ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_LAPI_Init"])])]) AS_IF([test "x$happy" = xyes], [ga_armci_network=LAPI; with_lapi=yes; $1], [$2]) ])dnl # _GA_ARMCI_NETWORK_MPI_TS([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------------- AC_DEFUN([_GA_ARMCI_NETWORK_MPI_TS], [ AC_MSG_NOTICE([searching for MPI_TS...]) happy=yes AS_IF([test "x$happy" = xyes], [ga_armci_network=MPI_TS; with_mpi_ts=yes; $1], [$2]) ])dnl # _GA_ARMCI_NETWORK_MPI_MT([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------------- AC_DEFUN([_GA_ARMCI_NETWORK_MPI_MT], [ AC_MSG_NOTICE([searching for MPI_MT...]) happy=yes CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" LIBS="$LIBS $GA_MP_LIBS" AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([mpi.h], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([MPI_Init_thread], [mpi mpich.cnk mpich.rts], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [ga_armci_network=MPI_MT; with_mpi_mt=yes; $1], [$2]) ])dnl # _GA_ARMCI_NETWORK_MPI_SPAWN([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------------- AC_DEFUN([_GA_ARMCI_NETWORK_MPI_SPAWN], [ AC_MSG_NOTICE([searching for MPI_SPAWN...]) happy=yes CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" LIBS="$LIBS $GA_MP_LIBS" AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([mpi.h], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([MPI_Comm_spawn_multiple], [mpi mpich.cnk mpich.rts], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [ga_armci_network=MPI_SPAWN; with_mpi_spawn=yes; $1], [$2]) ])dnl # _GA_ARMCI_NETWORK_OFA([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------- AC_DEFUN([_GA_ARMCI_NETWORK_OFA], [ AC_MSG_NOTICE([searching for OFA...]) happy=yes AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([infiniband/verbs.h], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([ibv_open_device], [ibverbs], [], [happy=no]) AS_CASE([$ac_cv_search_ibv_open_device], ["none required"], [], [no], [], [ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_ibv_open_device"])]) AS_IF([test "x$happy" = xyes], [ga_armci_network=OFA; with_ofa=yes; $1], [$2]) ])dnl # _GA_ARMCI_NETWORK_OPENIB([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------------------------------ AC_DEFUN([_GA_ARMCI_NETWORK_OPENIB], [ AC_MSG_NOTICE([searching for OPENIB...]) happy=yes AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([infiniband/verbs.h], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([ibv_open_device], [ibverbs], [], [happy=no]) AS_CASE([$ac_cv_search_ibv_open_device], ["none required"], [], [no], [], [ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_ibv_open_device"])]) AS_IF([test "x$happy" = xyes], [ga_armci_network=OPENIB; with_openib=yes; $1], [$2]) ])dnl # _GA_ARMCI_NETWORK_PORTALS4([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------------------------------- AC_DEFUN([_GA_ARMCI_NETWORK_PORTALS4], [ AC_MSG_NOTICE([searching for PORTALS4...]) happy=yes AS_IF([test "x$happy" = xyes], [ga_armci_network=PORTALS4; with_portals4=yes; $1], [$2]) ])dnl # _GA_ARMCI_NETWORK_PORTALS([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------------------------------- AC_DEFUN([_GA_ARMCI_NETWORK_PORTALS], [ AC_MSG_NOTICE([searching for PORTALS...]) happy=yes AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([portals/portals3.h], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([portals/nal.h], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([PtlInit], [portals], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [ga_armci_network=PORTALS; with_portals=yes; $1], [$2]) ])dnl # _GA_ARMCI_NETWORK_DMAPP([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ----------------------------------------------------------------- AC_DEFUN([_GA_ARMCI_NETWORK_DMAPP], [ AC_MSG_NOTICE([searching for DMAPP...]) happy=yes AS_IF([test "x$happy" = xyes], [ga_armci_network=DMAPP; with_dmapp=yes; $1], [$2]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([gethugepagesize], [hugetlbfs]) AS_CASE([$ac_cv_search_gethugepagesize], ["none required"], [], [no], [], [# add missing lib to ARMCI_NETWORK_LIBS if not there AS_CASE([$ARMCI_NETWORK_LIBS], [*$ac_cv_search_gethugepagesize*], [], [ARMCI_NETWORK_LIBS="$ARMCI_NETWORK_LIBS $ac_cv_search_gethugepagesize"])])]) ])dnl # _GA_ARMCI_NETWORK_GEMINI([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------------------------------ # TODO when gemini headers and libraries become available, fix this AC_DEFUN([_GA_ARMCI_NETWORK_GEMINI], [ AC_MSG_NOTICE([searching for GEMINI...]) happy=yes AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([numatoolkit.h], [], [happy=no], [ AC_INCLUDES_DEFAULT #include ])]) AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([NTK_Init], [numatoolkit], [], [happy=no])]) # CPPFLAGS must have CRAY_UGNI before looking for the next headers. gemini_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS -DCRAY_UGNI" AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([onesided.h], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [AC_CHECK_HEADER([gni.h], [], [happy=no])]) CPPFLAGS="$gemini_save_CPPFLAGS" AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([gniInit], [onesided], [], [happy=no])]) AS_IF([test "x$happy" = xyes], [ga_armci_network=GEMINI; with_gemini=yes; $1], [$2]) # check for a function introduced in libonesided/1.5 # we purposefully abuse the ac_cv_search_onesided_mem_htflush value AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([onesided_mem_htflush], [onesided]) AS_IF([test "x$ac_cv_search_onesided_mem_htflush" != xno], [ac_cv_search_onesided_mem_htflush=1], [ac_cv_search_onesided_mem_htflush=0]) AC_DEFINE_UNQUOTED([HAVE_ONESIDED_MEM_HTFLUSH], [$ac_cv_search_onesided_mem_htflush], [set to 1 if libonesided has onesided_mem_htflush (added in v1.5)]) ]) # check for a function introduced in libonesided/1.6 # we purposefully abuse the ac_cv_search_onesided_fadd value AS_IF([test "x$happy" = xyes], [AC_SEARCH_LIBS([onesided_fadd], [onesided]) AS_IF([test "x$ac_cv_search_onesided_fadd" != xno], [ac_cv_search_onesided_fadd=1], [ac_cv_search_onesided_fadd=0]) AC_DEFINE_UNQUOTED([HAVE_ONESIDED_FADD], [$ac_cv_search_onesided_fadd], [set to 1 if libonesided has onesided_fadd (added in v1.6)]) ]) ])dnl # GA_ARMCI_NETWORK # ---------------- # This macro allows user to choose the armci network but also allows the # network to be tested for automatically. AC_DEFUN([GA_ARMCI_NETWORK], [ # Clear the variables we will be using, just in case. ga_armci_network= ARMCI_NETWORK_LIBS= ARMCI_NETWORK_LDFLAGS= ARMCI_NETWORK_CPPFLAGS= AC_ARG_ENABLE([autodetect], [AS_HELP_STRING([--enable-autodetect], [attempt to locate ARMCI_NETWORK besides SOCKETS])]) # First, all of the "--with" stuff is taken care of. armci_network_count=0 _GA_ARMCI_NETWORK_WITH([armci], [external; path to external ARMCI library]) _GA_ARMCI_NETWORK_WITH([bgml], [IBM BG/L]) _GA_ARMCI_NETWORK_WITH([cray-shmem],[Cray XT shmem]) _GA_ARMCI_NETWORK_WITH([dcmf], [IBM BG/P Deep Computing Message Framework]) _GA_ARMCI_NETWORK_WITH([dmapp], [(Comex) Cray DMAPP]) _GA_ARMCI_NETWORK_WITH([gemini], [Cray XE Gemini using libonesided]) _GA_ARMCI_NETWORK_WITH([lapi], [IBM LAPI]) _GA_ARMCI_NETWORK_WITH([mpi-mt], [MPI-2 multi-threading]) _GA_ARMCI_NETWORK_WITH([mpi-spawn], [MPI-2 dynamic process mgmt]) _GA_ARMCI_NETWORK_WITH([mpi-ts], [(Comex) MPI-1 two-sided]) _GA_ARMCI_NETWORK_WITH([ofa], [(Comex) Infiniband OpenIB]) _GA_ARMCI_NETWORK_WITH([openib], [Infiniband OpenIB]) _GA_ARMCI_NETWORK_WITH([portals4], [(Comex) Portals4]) _GA_ARMCI_NETWORK_WITH([portals], [Cray XT portals]) _GA_ARMCI_NETWORK_WITH([sockets], [Ethernet TCP/IP]) # Temporarily add ARMCI_NETWORK_CPPFLAGS to CPPFLAGS. ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $ARMCI_NETWORK_CPPFLAGS" # Temporarily add ARMCI_NETWORK_LDFLAGS to LDFLAGS. ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $ARMCI_NETWORK_LDFLAGS" # Temporarily add ARMCI_NETWORK_LIBS to LIBS. ga_save_LIBS="$LIBS"; LIBS="$ARMCI_NETWORK_LIBS $LIBS" AS_IF([test "x$enable_autodetect" = xyes], [AC_MSG_NOTICE([searching for ARMCI_NETWORK...]) AS_IF([test "x$ga_armci_network" = x && test "x$with_bgml" != xno], [_GA_ARMCI_NETWORK_BGML()]) AS_IF([test "x$ga_armci_network" = x && test "x$with_cray_shmem" != xno], [_GA_ARMCI_NETWORK_CRAY_SHMEM()]) AS_IF([test "x$ga_armci_network" = x && test "x$with_dcmf" != xno], [_GA_ARMCI_NETWORK_DCMF()]) AS_IF([test "x$ga_armci_network" = x && test "x$with_lapi" != xno], [_GA_ARMCI_NETWORK_LAPI()]) dnl AS_IF([test "x$ga_armci_network" = x && test "x$with_mpi_ts" != xno], dnl [_GA_ARMCI_NETWORK_MPI_TS()]) dnl AS_IF([test "x$ga_armci_network" = x && test "x$with_mpi_mt" != xno], dnl [_GA_ARMCI_NETWORK_MPI_MT()]) dnl AS_IF([test "x$ga_armci_network" = x && test "x$with_mpi_spawn" != xno], dnl [_GA_ARMCI_NETWORK_MPI_SPAWN()]) AS_IF([test "x$ga_armci_network" = x && test "x$with_ofa" != xno], [_GA_ARMCI_NETWORK_OFA()]) AS_IF([test "x$ga_armci_network" = x && test "x$with_openib" != xno], [_GA_ARMCI_NETWORK_OPENIB()]) AS_IF([test "x$ga_armci_network" = x && test "x$with_portals4" != xno], [_GA_ARMCI_NETWORK_PORTALS4()]) AS_IF([test "x$ga_armci_network" = x && test "x$with_portals" != xno], [_GA_ARMCI_NETWORK_PORTALS()]) AS_IF([test "x$ga_armci_network" = x && test "x$with_dmapp" != xno], [_GA_ARMCI_NETWORK_DMAPP()]) AS_IF([test "x$ga_armci_network" = x && test "x$with_gemini" != xno], [_GA_ARMCI_NETWORK_GEMINI()]) AS_IF([test "x$ga_armci_network" = x && test "x$with_armci" != xno], [_GA_ARMCI_NETWORK_ARMCI()]) AS_IF([test "x$ga_armci_network" = x], [AC_MSG_WARN([!!!]) AC_MSG_WARN([No ARMCI_NETWORK detected, defaulting to SOCKETS]) AC_MSG_WARN([!!!]) ga_armci_network=SOCKETS; with_sockets=yes])], [# Not autodetecting # Check whether multiple armci networks were selected by user. AS_CASE([$armci_network_count], [0], [AC_MSG_WARN([No ARMCI_NETWORK specified, defaulting to SOCKETS]) ga_armci_network=SOCKETS; with_sockets=yes], [1], [AS_IF([test "x$ga_armci_network" = xARMCI], [_GA_ARMCI_NETWORK_ARMCI([], [AC_MSG_ERROR([test for ARMCI_NETWORK=ARMCI failed])])]) AS_IF([test "x$ga_armci_network" = xBGML], [_GA_ARMCI_NETWORK_BGML([], [AC_MSG_ERROR([test for ARMCI_NETWORK=BGML failed])])]) AS_IF([test "x$ga_armci_network" = xCRAY_SHMEM], [_GA_ARMCI_NETWORK_CRAY_SHMEM([], [AC_MSG_ERROR([test for ARMCI_NETWORK=CRAY_SHMEM failed])])]) AS_IF([test "x$ga_armci_network" = xDCMF], [_GA_ARMCI_NETWORK_DCMF([], [AC_MSG_ERROR([test for ARMCI_NETWORK=DCMF failed])])]) AS_IF([test "x$ga_armci_network" = xDMAPP], [_GA_ARMCI_NETWORK_DMAPP([], [AC_MSG_ERROR([test for ARMCI_NETWORK=DMAPP failed])])]) AS_IF([test "x$ga_armci_network" = xLAPI], [_GA_ARMCI_NETWORK_LAPI([], [AC_MSG_ERROR([test for ARMCI_NETWORK=LAPI failed])])]) AS_IF([test "x$ga_armci_network" = xMPI_TS], [_GA_ARMCI_NETWORK_MPI_TS([], [AC_MSG_ERROR([test for ARMCI_NETWORK=MPI_TS failed])])]) AS_IF([test "x$ga_armci_network" = xMPI_MT], [_GA_ARMCI_NETWORK_MPI_MT([], [AC_MSG_ERROR([test for ARMCI_NETWORK=MPI_MT failed])])]) AS_IF([test "x$ga_armci_network" = xMPI_SPAWN], [_GA_ARMCI_NETWORK_MPI_SPAWN([], [AC_MSG_ERROR([test for ARMCI_NETWORK=MPI_SPAWN failed])])]) AS_IF([test "x$ga_armci_network" = xOFA], [_GA_ARMCI_NETWORK_OFA([], [AC_MSG_ERROR([test for ARMCI_NETWORK=OFA failed])])]) AS_IF([test "x$ga_armci_network" = xOPENIB], [_GA_ARMCI_NETWORK_OPENIB([], [AC_MSG_ERROR([test for ARMCI_NETWORK=OPENIB failed])])]) AS_IF([test "x$ga_armci_network" = xPORTALS4], [_GA_ARMCI_NETWORK_PORTALS4([], [AC_MSG_ERROR([test for ARMCI_NETWORK=PORTALS4 failed])])]) AS_IF([test "x$ga_armci_network" = xPORTALS], [_GA_ARMCI_NETWORK_PORTALS([], [AC_MSG_ERROR([test for ARMCI_NETWORK=PORTALS failed])])]) AS_IF([test "x$ga_armci_network" = xGEMINI], [_GA_ARMCI_NETWORK_GEMINI([], [AC_MSG_ERROR([test for ARMCI_NETWORK=GEMINI failed])])]) ], [AC_MSG_WARN([too many armci networks specified: $armci_network_count]) AC_MSG_WARN([the following were specified:]) _GA_ARMCI_NETWORK_WARN([armci]) _GA_ARMCI_NETWORK_WARN([bgml]) _GA_ARMCI_NETWORK_WARN([cray-shmem]) _GA_ARMCI_NETWORK_WARN([dcmf]) _GA_ARMCI_NETWORK_WARN([dmapp]) _GA_ARMCI_NETWORK_WARN([lapi]) _GA_ARMCI_NETWORK_WARN([mpi-ts]) _GA_ARMCI_NETWORK_WARN([mpi-mt]) _GA_ARMCI_NETWORK_WARN([mpi-spawn]) _GA_ARMCI_NETWORK_WARN([ofa]) _GA_ARMCI_NETWORK_WARN([openib]) _GA_ARMCI_NETWORK_WARN([portals4]) _GA_ARMCI_NETWORK_WARN([portals]) _GA_ARMCI_NETWORK_WARN([gemini]) _GA_ARMCI_NETWORK_WARN([sockets]) AC_MSG_ERROR([please select only one armci network])])]) # Remove ARMCI_NETWORK_CPPFLAGS from CPPFLAGS. CPPFLAGS="$ga_save_CPPFLAGS" # Remove ARMCI_NETWORK_LDFLAGS from LDFLAGS. LDFLAGS="$ga_save_LDFLAGS" # Remove ARMCI_NETWORK_LIBS from LIBS. LIBS="$ga_save_LIBS" _GA_ARMCI_NETWORK_AM_CONDITIONAL([armci]) _GA_ARMCI_NETWORK_AM_CONDITIONAL([bgml]) _GA_ARMCI_NETWORK_AM_CONDITIONAL([cray-shmem]) _GA_ARMCI_NETWORK_AM_CONDITIONAL([dcmf]) _GA_ARMCI_NETWORK_AM_CONDITIONAL([dmapp]) _GA_ARMCI_NETWORK_AM_CONDITIONAL([lapi]) _GA_ARMCI_NETWORK_AM_CONDITIONAL([mpi-ts]) _GA_ARMCI_NETWORK_AM_CONDITIONAL([mpi-mt]) _GA_ARMCI_NETWORK_AM_CONDITIONAL([mpi-spawn]) _GA_ARMCI_NETWORK_AM_CONDITIONAL([ofa]) _GA_ARMCI_NETWORK_AM_CONDITIONAL([openib]) _GA_ARMCI_NETWORK_AM_CONDITIONAL([gemini]) _GA_ARMCI_NETWORK_AM_CONDITIONAL([portals4]) _GA_ARMCI_NETWORK_AM_CONDITIONAL([portals]) _GA_ARMCI_NETWORK_AM_CONDITIONAL([sockets]) AC_SUBST([ARMCI_NETWORK_LDFLAGS]) AC_SUBST([ARMCI_NETWORK_LIBS]) AC_SUBST([ARMCI_NETWORK_CPPFLAGS]) # TODO AM_CONDITIONAL([DCMF_VER_2], [test x != x]) # always false AM_CONDITIONAL([DCMF_VER_0_2], [test x != x]) # always false AM_CONDITIONAL([DCMF_VER_0_3], [test x = x]) # always true # permanent hack AS_CASE([$ga_armci_network], [DMAPP], [ARMCI_SRC_DIR=comex], [GEMINI], [ARMCI_SRC_DIR=src-gemini], [MPI_MT], [ARMCI_SRC_DIR=src], [MPI_TS], [ARMCI_SRC_DIR=comex], [OFA], [ARMCI_SRC_DIR=comex], [OPENIB], [ARMCI_SRC_DIR=src], [PORTALS4], [ARMCI_SRC_DIR=comex], [PORTALS], [ARMCI_SRC_DIR=src-portals], [GEMINI], [ARMCI_SRC_DIR=src-gemini], [ARMCI_SRC_DIR=src]) AC_SUBST([ARMCI_SRC_DIR]) AM_CONDITIONAL([ARMCI_SRC_DIR_PORTALS], [test "x$ARMCI_SRC_DIR" = "xsrc-portals"]) AM_CONDITIONAL([ARMCI_SRC_DIR_GEMINI], [test "x$ARMCI_SRC_DIR" = "xsrc-gemini"]) AM_CONDITIONAL([ARMCI_SRC_DIR_COMEX], [test "x$ARMCI_SRC_DIR" = "xcomex"]) AM_CONDITIONAL([ARMCI_SRC_DIR_SRC], [test "x$ARMCI_SRC_DIR" = "xsrc"]) # tcgmsg5 requires this AS_IF([test x$ga_armci_network = xLAPI], [AC_DEFINE([NOTIFY_SENDER], [1], [this was defined unconditionally when using LAPI for tcgmsg 5]) AC_DEFINE([LAPI], [1], [tcgmsg 5 requires this when using LAPI]) ]) ga_cray_xt_networks=no AS_IF([test x$ga_armci_network = xPORTALS], [ga_cray_xt_networks=yes]) AS_IF([test x$ga_armci_network = xCRAY_SHMEM], [ga_cray_xt_networks=yes]) AM_CONDITIONAL([CRAY_XT_NETWORKS], [test x$ga_cray_xt_networks = xyes]) ga_cv_sysv_hack=no # Only perform this hack for ARMCI build. AS_IF([test "x$ARMCI_TOP_BUILDDIR" != x], [ AS_IF([test x$ga_cv_sysv = xno], [AS_CASE([$ga_armci_network], [BGML|DCMF|PORTALS|GEMINI], [ga_cv_sysv_hack=no], [ga_cv_sysv_hack=yes])], [ga_cv_sysv_hack=yes]) AS_IF([test x$ga_cv_sysv_hack = xyes], [AC_DEFINE([SYSV], [1], [Defined if we want this system to use SYSV shared memory])]) ]) AM_CONDITIONAL([SYSV], [test x$ga_cv_sysv_hack = xyes]) # if not using external armci library, the following functions are always available AS_IF([test "x$ga_armci_network" != xARMCI], [AC_DEFINE([HAVE_ARMCI_GROUP_COMM], [1], []) AC_DEFINE([HAVE_ARMCI_INITIALIZED], [1], []) AC_DEFINE([HAVE_ARMCI_NOTIFY], [1], []) AC_DEFINE([HAVE_ARMCI_MSG_INIT], [1], []) AC_DEFINE([HAVE_ARMCI_MSG_FINALIZE], [1], [])]) AM_CONDITIONAL([HAVE_ARMCI_GROUP_COMM_MEMBER], [test "x$ac_cv_member_ARMCI_Group_comm" = x1]) AM_CONDITIONAL([HAVE_ARMCI_GROUP_COMM], [test "x$ga_armci_network" != xARMCI]) AM_CONDITIONAL([HAVE_ARMCI_INITIALIZED], [test "x$ga_armci_network" != xARMCI]) AM_CONDITIONAL([HAVE_ARMCI_NOTIFY], [test "x$ga_armci_network" != xARMCI]) AM_CONDITIONAL([HAVE_ARMCI_MSG_INIT], [test "x$ga_armci_network" != xARMCI]) AM_CONDITIONAL([HAVE_ARMCI_MSG_FINALIZE],[test "x$ga_armci_network" != xARMCI]) # the armci iterators only available in the conglomerate sources AS_CASE([$ga_armci_network], [ARMCI|GEMINI|PORTALS], [], [AC_DEFINE([HAVE_ARMCI_STRIDE_INFO_INIT], [1], [])]) AM_CONDITIONAL([HAVE_ARMCI_STRIDE_INFO_INIT], [test "x$ga_armci_network" != xARMCI && test "x$ga_armci_network" != xGEMINI && test "x$ga_armci_network" != xPORTALS]) # ugly hack for working around NWChem memory requirements # and MPI startup verus the 'classic' ARMCI startup delay_tcgmsg_mpi_startup=1 AS_CASE([$ga_armci_network], [ARMCI], [delay_tcgmsg_mpi_startup=0], [BGML], [delay_tcgmsg_mpi_startup=1], [CRAY_SHMEM], [delay_tcgmsg_mpi_startup=1], [DCMF], [delay_tcgmsg_mpi_startup=1], [DMAPP], [delay_tcgmsg_mpi_startup=0], [LAPI], [delay_tcgmsg_mpi_startup=1], [MPI_TS], [delay_tcgmsg_mpi_startup=0], [MPI_SPAWN], [delay_tcgmsg_mpi_startup=1], [OFA], [delay_tcgmsg_mpi_startup=0], [OPENIB], [delay_tcgmsg_mpi_startup=1], [GEMINI], [delay_tcgmsg_mpi_startup=1], [PORTALS4], [delay_tcgmsg_mpi_startup=0], [PORTALS], [delay_tcgmsg_mpi_startup=1], [SOCKETS], [delay_tcgmsg_mpi_startup=1]) AC_DEFINE_UNQUOTED([NEED_DELAY_TCGMSG_MPI_STARTUP], [$delay_tcgmsg_mpi_startup], [whether to wait until the last moment to call ARMCI_Init() in TCGMSG-MPI]) ])dnl ga-5-3/m4/ax_boost_base.m40000640005473000001440000002415311704074222014172 0ustar d3n000users# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_boost_base.html # =========================================================================== # # SYNOPSIS # # AX_BOOST_BASE([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # DESCRIPTION # # Test for the Boost C++ libraries of a particular version (or newer) # # If no path to the installed boost library is given the macro searchs # under /usr, /usr/local, /opt and /opt/local and evaluates the # $BOOST_ROOT environment variable. Further documentation is available at # . # # This macro calls: # # AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS) # # And sets: # # HAVE_BOOST # # LICENSE # # Copyright (c) 2008 Thomas Porschberg # Copyright (c) 2009 Peter Adolphs # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 20 AC_DEFUN([AX_BOOST_BASE], [ AC_ARG_WITH([boost], [AS_HELP_STRING([--with-boost@<:@=ARG@:>@], [use Boost library from a standard location (ARG=yes), from the specified location (ARG=), or disable it (ARG=no) @<:@ARG=yes@:>@ ])], [ if test "$withval" = "no"; then want_boost="no" elif test "$withval" = "yes"; then want_boost="yes" ac_boost_path="" else want_boost="yes" ac_boost_path="$withval" fi ], [want_boost="yes"]) AC_ARG_WITH([boost-libdir], AS_HELP_STRING([--with-boost-libdir=LIB_DIR], [Force given directory for boost libraries. Note that this will override library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located.]), [ if test -d "$withval" then ac_boost_lib_path="$withval" else AC_MSG_ERROR(--with-boost-libdir expected directory name) fi ], [ac_boost_lib_path=""] ) if test "x$want_boost" = "xyes"; then boost_lib_version_req=ifelse([$1], ,1.20.0,$1) boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'` boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'` boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'` boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` if test "x$boost_lib_version_req_sub_minor" = "x" ; then boost_lib_version_req_sub_minor="0" fi WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req) succeeded=no dnl On 64-bit systems check for system libraries in both lib64 and lib. dnl The former is specified by FHS, but e.g. Debian does not adhere to dnl this (as it rises problems for generic multi-arch support). dnl The last entry in the list is chosen by default when no libraries dnl are found, e.g. when only header-only libraries are installed! libsubdirs="lib" ax_arch=`uname -m` if test $ax_arch = x86_64 -o $ax_arch = ppc64 -o $ax_arch = s390x -o $ax_arch = sparc64; then libsubdirs="lib64 lib lib64" fi dnl first we check the system location for boost libraries dnl this location ist chosen if boost libraries are installed with the --layout=system option dnl or if you install boost with RPM if test "$ac_boost_path" != ""; then BOOST_CPPFLAGS="-I$ac_boost_path/include" for ac_boost_path_tmp in $libsubdirs; do if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp" break fi done elif test "$cross_compiling" != yes; then for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then for libsubdir in $libsubdirs ; do if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir" BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" break; fi done fi dnl overwrite ld flags if we have required special directory with dnl --with-boost-libdir parameter if test "$ac_boost_lib_path" != ""; then BOOST_LDFLAGS="-L$ac_boost_lib_path" fi CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS AC_REQUIRE([AC_PROG_CXX]) AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ]])],[ AC_MSG_RESULT(yes) succeeded=yes found_system=yes ],[ ]) AC_LANG_POP([C++]) dnl if we found no boost with system layout we search for boost libraries dnl built and installed without the --layout=system option or for a staged(not installed) version if test "x$succeeded" != "xyes"; then _version=0 if test "$ac_boost_path" != ""; then if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp fi VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" done fi else if test "$cross_compiling" != yes; then for ac_boost_path in /usr /usr/local /opt /opt/local ; do if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp best_path=$ac_boost_path fi done fi done VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" if test "$ac_boost_lib_path" = ""; then for libsubdir in $libsubdirs ; do if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done BOOST_LDFLAGS="-L$best_path/$libsubdir" fi fi if test "x$BOOST_ROOT" != "x"; then for libsubdir in $libsubdirs ; do if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'` V_CHECK=`expr $stage_version_shorten \>\= $_version` if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT) BOOST_CPPFLAGS="-I$BOOST_ROOT" BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir" fi fi fi fi CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ]])],[ AC_MSG_RESULT(yes) succeeded=yes found_system=yes ],[ ]) AC_LANG_POP([C++]) fi if test "$succeeded" != "yes" ; then if test "$_version" = "0" ; then AC_MSG_NOTICE([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation.]]) else AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).]) fi # execute ACTION-IF-NOT-FOUND (if present): ifelse([$3], , :, [$3]) else AC_SUBST(BOOST_CPPFLAGS) AC_SUBST(BOOST_LDFLAGS) AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available]) # execute ACTION-IF-FOUND (if present): ifelse([$2], , :, [$2]) fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" fi ]) ga-5-3/m4/ga_mpicc_test.m40000640005473000001440000001053011410510454014151 0ustar d3n000users# GA_MPICC_TEST_PROGRAM # --------------------- # Create an MPI test program in C. AC_DEFUN([GA_MPICC_TEST_PROGRAM], [ AC_LANG_PUSH([C]) AC_LANG_CONFTEST([AC_LANG_PROGRAM([[#include ]], [[int myargc; char **myargv; MPI_Init(&myargc, &myargv); MPI_Finalize();]])]) AC_LANG_POP([C]) ])dnl # GA_MPICC_TEST_COMPILE # --------------------- # Attempt to compile a simple MPI program in C. AC_DEFUN([GA_MPICC_TEST_COMPILE], [ AC_LANG_PUSH([C]) GA_MPICC_TEST_PROGRAM() AC_CACHE_CHECK([whether a simple C MPI program compiles], [ga_cv_c_mpi_test_compile], [ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" AC_COMPILE_IFELSE([], [ga_cv_c_mpi_test_compile=yes], [ga_cv_c_mpi_test_compile=no]) CPPFLAGS="$ga_save_CPPFLAGS"]) rm -f conftest.$ac_ext AC_LANG_POP([C]) AS_IF([test "x$ga_cv_c_mpi_test_compile" = xno], [AC_MSG_FAILURE([could not compile simple C MPI program])]) ])dnl # GA_MPICC_TEST_LINK # ------------------ # Attempt to link a simple MPI program in C. AC_DEFUN([GA_MPICC_TEST_LINK], [ AC_LANG_PUSH([C]) GA_MPICC_TEST_PROGRAM() ga_cv_c_mpi_test_link=no AS_IF([test "x$ga_cv_c_mpi_test_link" = xno], [AC_MSG_CHECKING([whether a C MPI program links natively]) AC_LINK_IFELSE([], [ga_cv_c_mpi_test_link=yes GA_MP_LIBS= GA_MP_LDFLAGS= GA_MP_CPPFLAGS=], [ga_cv_c_mpi_test_link=no]) AC_MSG_RESULT([$ga_cv_c_mpi_test_link])]) # That didn't work, so now let's try adding our GA_MP_* flags. # The CPPFLAGS and LDFLAGS are added up top here, but LIBS will change. ga_save_LIBS="$LIBS" ga_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $GA_MP_CPPFLAGS" ga_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $GA_MP_LDFLAGS" AS_IF([test "x$ga_cv_c_mpi_test_link" = xno], [AC_MSG_CHECKING([whether a C MPI program links with additional env]) LIBS="$LIBS $GA_MP_LIBS" AC_LINK_IFELSE([], [ga_cv_c_mpi_test_link=yes], [ga_cv_c_mpi_test_link=no]) LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_cv_c_mpi_test_link])]) # That didn't work, so now let's try with specific libs. AS_IF([test "x$ga_cv_c_mpi_test_link" = xno], [AC_MSG_CHECKING([for mvapich libraries]) for lib in "-lmpich -lpthread" "-lmpich" do LIBS="$LIBS $lib" AC_LINK_IFELSE([], [ga_cv_c_mpi_test_link="$lib"; break], [ga_cv_c_mpi_test_link=no]) LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_cv_c_mpi_test_link])]) AS_IF([test "x$ga_cv_c_mpi_test_link" = xno], [AC_MSG_CHECKING([for mpich libraries]) for lib in "-lmpich -lpthread" "-lmpich" do LIBS="$LIBS $lib" AC_LINK_IFELSE([], [ga_cv_c_mpi_test_link="$lib"; break], [ga_cv_c_mpi_test_link=no]) LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_cv_c_mpi_test_link])]) AS_IF([test "x$ga_cv_c_mpi_test_link" = xno], [AC_MSG_CHECKING([for hpmpi libraries]) for lib in "-lhpmpio -lhpmpi" "-lhpmpi" do LIBS="$LIBS $lib" AC_LINK_IFELSE([], [ga_cv_c_mpi_test_link="$lib"; break], [ga_cv_c_mpi_test_link=no]) LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_cv_c_mpi_test_link])]) AS_IF([test "x$ga_cv_c_mpi_test_link" = xno], [AC_MSG_CHECKING([for intelmpi libraries]) for lib in "-lmpi -lmpiif -lmpigi -lrt -lpthread" "-lmpi -lmpiif -lmpigi" do LIBS="$LIBS $lib" AC_LINK_IFELSE([], [ga_cv_c_mpi_test_link="$lib"; break], [ga_cv_c_mpi_test_link=no]) LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_cv_c_mpi_test_link])]) AS_IF([test "x$ga_cv_c_mpi_test_link" = xno], [AC_MSG_CHECKING([for openmpi libraries]) for lib in "-lmpi -lpthread" "-lmpi" do LIBS="$LIBS $lib" AC_LINK_IFELSE([], [ga_cv_c_mpi_test_link="$lib"; break], [ga_cv_c_mpi_test_link=no]) LIBS="$ga_save_LIBS" done LIBS="$ga_save_LIBS" AC_MSG_RESULT([$ga_cv_c_mpi_test_link])]) rm -f conftest.$ac_ext LIBS="$ga_save_LIBS" LDFLAGS="$ga_save_LDFLAGS" CPPFLAGS="$ga_save_CPPFLAGS" AC_LANG_POP([C]) AS_CASE([$ga_cv_c_mpi_test_link], [yes], [], [no], [AC_MSG_FAILURE([could not link a C MPI program])], [*], [GA_MP_LIBS="$ga_cv_c_mpi_test_link"], []) ])dnl ga-5-3/m4/ga_pragma.m40000640005473000001440000000212011410510454013262 0ustar d3n000users# GA_PRAGMA_OPERATOR # ------------------ # whether the C compiler understands the C99 _Pragma operator AC_DEFUN([GA_PRAGMA_OPERATOR], [AC_CACHE_CHECK([whether the C compiler understands the _Pragma operator], [ga_cv_c_pragma_operator], [AC_LANG_PUSH([C]) AC_COMPILE_IFELSE([AC_LANG_SOURCE([[_Pragma("something")]])], [ga_cv_c_pragma_operator=yes], [ga_cv_c_pragma_operator=no]) AC_LANG_POP([C])]) AS_IF([test x$ga_cv_c_pragma_operator = xyes], [AC_DEFINE([HAVE_PRAGMA_OPERATOR], [1], [define if the C compiler understands the C99 _Pragma macro])]) AH_BOTTOM([#ifndef HAVE_PRAGMA_OPERATOR # define _Pragma(_pragf) #endif]) ]) #GA_PRAGMA_OPERATOR AC_DEFUN([GA_PRAGMA_OPERATOR_OLD], [ AC_MSG_CHECKING([whether the C compiler understands the _Pragma operator]) AC_LANG_PUSH([C]) AC_COMPILE_IFELSE( [AC_LANG_SOURCE([[_Pragma("something")]])], [AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_PRAGMA_OPERATOR], [1], [define if the C compiler understands the C99 _Pragma macro])], [AC_MSG_RESULT([no])]) AC_LANG_POP([C]) ]) #GA_PRAGMA_OPERATOR_OLD ga-5-3/m4/ga_mpicc.m40000640005473000001440000000473711577716421013146 0ustar d3n000users# GA_PROG_MPICC # ---------------- # If desired, replace CC with MPICC while searching for a C compiler. # # Known C compilers # cc generic compiler name # ccc Fujitsu ?? old Cray ?? # cl # ecc Intel on IA64 ?? # gcc GNU # icc Intel # bgxlc Intel on BG/P # bgxlc_r Intel on BG/P, thread safe # xlc Intel # xlc_r Intel, thread safe # pgcc Portland Group # pathcc PathScale # sxcc NEC SX # fcc Fujitsu # opencc AMD's x86 open64 # suncc Sun's Studio # craycc Cray # # Known MPI C compilers: # mpicc # mpixlc_r # mpixlc # hcc # mpxlc_r # mpxlc # sxmpicc NEC SX # mpifcc Fujitsu # mpgcc # mpcc # cmpicc # cc # AC_DEFUN([GA_PROG_MPICC], [AC_ARG_VAR([MPICC], [MPI C compiler]) AS_CASE([$ga_cv_target_base], [BGP], [ga_mpicc_pref=mpixlc_r; ga_cc_pref=bgxlc_r], []) # In the case of using MPI wrappers, set CC=MPICC since CC will override # absolutely everything in our list of compilers. # Save CC, just in case. AS_IF([test x$with_mpi_wrappers = xyes], [AS_IF([test "x$CC" != "x$MPICC"], [ga_orig_CC="$CC"]) AS_CASE([x$CC:x$MPICC], [x:x], [], [x:x*], [CC="$MPICC"], [x*:x], [AC_MSG_WARN([MPI compilers desired but CC is set while MPICC is unset.]) AC_MSG_WARN([CC will be ignored during compiler selection, but will be]) AC_MSG_WARN([tested first during MPI compiler unwrapping. Perhaps you]) AC_MSG_WARN([meant to set MPICC instead of or in addition to CC?]) CC=], [x*:x*], [AS_IF([test "x$CC" != "x$MPICC"], [AC_MSG_WARN([MPI compilers desired, MPICC and CC are set, and MPICC!=CC.]) AC_MSG_WARN([Choosing MPICC over CC.]) AC_MSG_WARN([CC will be tested first during MPI compiler unwrapping.])]) CC="$MPICC"], [AC_MSG_ERROR([CC/MPICC case failure])])]) ga_cc="bgxlc_r bgxlc xlc_r xlc pgcc pathcc icc sxcc fcc opencc suncc craycc gcc cc ecc cl ccc" ga_mpicc="mpicc mpixlc_r mpixlc hcc mpxlc_r mpxlc sxmpicc mpifcc mpgcc mpcc cmpicc cc" AS_IF([test x$with_mpi_wrappers = xyes], [CC_TO_TEST="$ga_mpicc_pref $ga_mpicc"], [CC_TO_TEST="$ga_cc_pref $ga_cc"]) AC_PROG_CC([$CC_TO_TEST]) ])dnl # GA_PROG_CC_NOMPI # ---------------- # In at least one case, GA needs a standard C compiler i.e. not an MPI # wrapper. Find one and set it to CC_NOMPI (not CC). Defaults to the CC found # by GA_PROG_MPICC. AC_DEFUN([GA_PROG_CC_NOMPI], [AS_IF([test "x$ga_cv_mpic_naked" != x], [CC_NOMPI="$ga_cv_mpic_naked" AC_SUBST([CC_NOMPI])], [AC_CHECK_PROGS([CC_NOMPI], [$ga_cc], [$CC])]) ])dnl ga-5-3/m4/ga_suppress_msg.m40000640005473000001440000000212711410510454014554 0ustar d3n000users# GA_SUPPRESS_MESSAGE # ------------------- # Determine any flags necessary to suppress informational messages from the # compiler. Useful when setting the ac_[]_AC_LANG_ABBREV[]_werror_flag=yes # because any extra output (stdout and stderr) will trigger an error. # The xlf compiler is the only case thus far. AC_DEFUN([GA_SUPPRESS_MESSAGE], [AC_CACHE_CHECK([for _AC_LANG flag to suppress info messages], [ga_cv_[]_AC_LANG_ABBREV[]_suppress], [ga_save_[]_AC_LANG_PREFIX[]FLAGS="$_AC_LANG_PREFIX[]FLAGS" ga_save_werror_flag=$ac_[]_AC_LANG_ABBREV[]_werror_flag ac_[]_AC_LANG_ABBREV[]_werror_flag=yes for flag in none -qsuppress=cmpmsg ; do _AC_LANG_PREFIX[]FLAGS=$ga_save_[]_AC_LANG_PREFIX[]FLAGS AS_IF([test "x$flag" != xnone], [_AC_LANG_PREFIX[]FLAGS="$_AC_LANG_PREFIX[]FLAGS $flag"]) AC_LINK_IFELSE([AC_LANG_PROGRAM()], [ga_cv_[]_AC_LANG_ABBREV[]_suppress="$flag"; break]) done _AC_LANG_PREFIX[]FLAGS=$ga_save_[]_AC_LANG_PREFIX[]FLAGS ac_[]_AC_LANG_ABBREV[]_werror_flag=$ga_save_werror_flag ]) ]) # GA_SUPPRESS_MESSAGE ga-5-3/m4/ma_stats.m40000640005473000001440000000020611410510454013162 0ustar d3n000users# MA_STATS # --------- # Simply AC_DEFINEd. AC_DEFUN([MA_STATS], [AC_DEFINE([STATS], [1], [This is always defined. Dunno why.]) ])dnl ga-5-3/m4/armci_shmmax.m40000640005473000001440000000117212274750307014036 0ustar d3n000users# ARMCI_SHMMAX # ------------ # Allow the upper limit on the ARMCI_DEFAULT_SHMMAX runtime environment # variable to be configured by user. AC_DEFUN([ARMCI_SHMMAX], [ AC_CACHE_CHECK([for ARMCI_DEFAULT_SHMMAX upper bound], [armci_cv_shmmax], [AS_IF([test "x$ARMCI_DEFAULT_SHMMAX_UBOUND" != x], [armci_cv_shmmax=$ARMCI_DEFAULT_SHMMAX_UBOUND], [armci_cv_shmmax=8192])]) AS_IF([test $armci_cv_shmmax -le 1], [AC_MSG_ERROR([invalid ARMCI_DEFAULT_SHMMAX upper bound; <= 1])]) AC_DEFINE_UNQUOTED([ARMCI_DEFAULT_SHMMAX_UBOUND], [$armci_cv_shmmax], [upper bound for ARMCI_DEFAULT_SHMMAX environment variable]) ])dnl ga-5-3/m4/ltsugar.m40000640005473000001440000001042411410510454013033 0ustar d3n000users# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) ga-5-3/m4/armci_standalone.m40000640005473000001440000000065611410510454014663 0ustar d3n000users# ARMCI_STANDALONE # ---------------- # Test whether ARMCI is configured from outside of a GA source distribution. AC_DEFUN([ARMCI_STANDALONE], [AC_CACHE_CHECK([whether ARMCI is configured from outside a GA distribution], [armci_cv_standalone], [AS_IF([test -d $ac_abs_confdir/../global], [armci_cv_standalone=no], [armci_cv_standalone=yes])]) AM_CONDITIONAL([ARMCI_STANDALONE], [test x$armci_cv_standalone = xyes]) ])dnl ga-5-3/m4/armci_c_opt.m40000640005473000001440000000772611633714777013671 0ustar d3n000users# ARMCI_C_OPT() # ------------- # Determine TARGET-/compiler-specific CFLAGS for optimization. AC_DEFUN([ARMCI_C_OPT], [ AC_REQUIRE([GA_TARGET64]) AC_REQUIRE([GA_ENABLE_OPT]) AC_REQUIRE([GA_ARMCI_NETWORK]) AC_ARG_VAR([ARMCI_COPT], [ARMCI C optimization flags]) AC_CACHE_CHECK([for specific C optimizations], [armci_cv_c_opt], [ AS_IF([test "x$ARMCI_COPT" != x], [armci_cv_c_opt="$ARMCI_COPT"], [armci_cv_c_opt=]) AS_IF([test "x$armci_cv_c_opt" = x && test "x$enable_opt" = xyes], [ AS_CASE([$ga_cv_target:$ga_cv_c_compiler_vendor:$host_cpu:$ga_armci_network], [BGL:*:*:*], [armci_cv_c_opt="-O0"], [BGP:ibm:*:*], [armci_cv_c_opt="-O3 -qstrict -qarch=450 -qtune=450"], [BGP:gnu:*:*], [armci_cv_c_opt="-O2"], [CATAMOUNT:*:*:*], [armci_cv_c_opt=], [CRAY_XT:*:*:*], [armci_cv_c_opt=], [CYGWIN:*:*:*], [armci_cv_c_opt="-malign-double"], [FUJITSU_VPP64:*:*:*], [armci_cv_c_opt="-x100"], [FUJITSU_VPP:*:*:*], [armci_cv_c_opt="-x100 -KA32"], [HPUX64:*:*:*], [armci_cv_c_opt="-Ae"], [HPUX64:*:ia64:*], [armci_cv_c_opt="-Ae"], [HPUX:*:*:*], [armci_cv_c_opt="-Ae"], [IBM64:*:*:*], [armci_cv_c_opt="-O3 -qinline=100 -qstrict -qarch=auto -qtune=auto"], [IBM:*:*:*], [armci_cv_c_opt="-O3 -qinline=100 -qstrict -qarch=auto -qtune=auto"], [LAPI64:*:*:*], [armci_cv_c_opt="-O3 -qinline=100 -qstrict -qarch=auto -qtune=auto"], [LAPI:*:*:*], [armci_cv_c_opt="-O3 -qinline=100 -qstrict -qarch=auto -qtune=auto"], [LINUX64:fujitsu:ia64:*], [armci_cv_c_opt="-Kfast"], [LINUX64:fujitsu:x86_64:*], [armci_cv_c_opt="-Kfast"], [LINUX64:gnu:ia64:*], [armci_cv_c_opt="-O0 -g"], [LINUX64:gnu:x86_64:*], [armci_cv_c_opt="-O3 -funroll-loops"], [LINUX64:ibm:powerpc64:*], [armci_cv_c_opt="-O3 -qinline=100 -qstrict -qarch=auto -qtune=auto"], [LINUX64:ibm:ppc64:*], [armci_cv_c_opt="-O3 -qinline=100 -qstrict -qarch=auto -qtune=auto"], [LINUX64:ibm:x86_64:*], [armci_cv_c_opt=""], [LINUX64:intel:ia64:*], [armci_cv_c_opt="-w1"], [LINUX64:unknown:alpha:*], [armci_cv_c_opt="-assume no2underscore -fpe3 -check nooverflow -assume accuracy_sensitive -check nopower -check nounderflow"], [LINUX:fujitsu:*:*], [armci_cv_c_opt="-Kfast"], [LINUX:gnu:686:*], [armci_cv_c_opt="-O2 -finline-functions -funroll-loops -march=pentiumpro -malign-double"], [LINUX:gnu:686:MELLANOX], [armci_cv_c_opt="-O2 -finline-functions -funroll-loops -march=pentiumpro"], [LINUX:gnu:686:OPENIB], [armci_cv_c_opt="-O2 -finline-functions -funroll-loops -march=pentiumpro"], [LINUX:gnu:786:*], [armci_cv_c_opt="-O2 -finline-functions -funroll-loops -march=pentiumpro -malign-double"], [LINUX:gnu:786:MELLANOX], [armci_cv_c_opt="-O2 -finline-functions -funroll-loops -march=pentiumpro"], [LINUX:gnu:786:OPENIB], [armci_cv_c_opt="-O2 -finline-functions -funroll-loops -march=pentiumpro"], [LINUX:gnu:x86:*], [armci_cv_c_opt="-O2 -finline-functions -funroll-loops -malign-double"], [LINUX:gnu:x86:MELLANOX], [armci_cv_c_opt="-O2 -finline-functions -funroll-loops "], [LINUX:gnu:x86:OPENIB], [armci_cv_c_opt="-O2 -finline-functions -funroll-loops "], [LINUX:ibm:*:*], [armci_cv_c_opt="-q32"], [LINUX:intel:*:*], [armci_cv_c_opt="-O3 -prefetch"], [MACX64:*:*:*], [armci_cv_c_opt=], [MACX:*:*:*], [armci_cv_c_opt=], [NEC64:*:*:*], [armci_cv_c_opt="-Cvsafe -size_t64"], [NEC:*:*:*], [armci_cv_c_opt="-Cvsafe"], [SOLARIS64:fujitsu:*:*], [armci_cv_c_opt="-Kfast -KV9FMADD -x0"], [SOLARIS64:gnu:*:*], [armci_cv_c_opt="-dalign"], [SOLARIS64:gnu:i386:*], [armci_cv_c_opt="-dalign -xarch=amd64"], [SOLARIS:fujitsu:*:*], [armci_cv_c_opt="-Kfast -KV8PFMADD -x0"], [SOLARIS:gnu:*:*], [armci_cv_c_opt="-dalign"], [SOLARIS:gnu:i386:*], [armci_cv_c_opt="-dalign -xarch=sse2"], [armci_cv_c_opt=]) ])]) AC_SUBST([ARMCI_COPT], [$armci_cv_c_opt]) ])dnl ga-5-3/python/0000750005473000001440000000000012275260524012121 5ustar d3n000usersga-5-3/python/tutorial/0000750005473000001440000000000012275260521013761 5ustar d3n000usersga-5-3/python/tutorial/matrix.py0000640005473000001440000000654111740665745015663 0ustar d3n000users""" Multiplication of two square matrices with randomly generated contents. """ import mpi4py.MPI from ga4py import ga import numpy as np NDIM = 2 TOTALELEMS = 1007 MAXPROC = 128 NBUF = 4 TOLERANCE = 0.1 ### Assign processor ID to the int variable "me" and the total number ### of processors to the int variable "nprocs" def verify(g_a, g_b, g_c): g_chk = ga.duplicate(g_a, "array check") if not g_chk: ga.error("duplicate failed") ga.sync() ga.gemm(False, False, TOTALELEMS, TOTALELEMS, TOTALELEMS, 1.0, g_a, g_b, 0.0, g_chk); ga.sync() ga.add(g_c, g_chk, g_chk, 1.0, -1.0) rchk = ga.dot(g_chk, g_chk) if not me: print "Normed difference in matrices: %12.4f" % rchk if not (-TOLERANCE < rchk < TOLERANCE): ga.error("Matrix multiply verify failed") else: print "Matrix Multiply OK" ga.destroy(g_chk) def matrix_multiply(): # Configure array dimensions. Force an unequal data distribution. dims = [TOTALELEMS]*NDIM chunk = [TOTALELEMS/nprocs-1]*NDIM # Create a global array g_a and duplicate it to get g_b and g_c. ### create GA of doubles with dimensions "dims", with minimum block size ### "chunk", and with name "array A", and assign the handle to the integer ### variable "g_a". if not g_a: ga.error("create failed: A") if not me: print "Created Array A" ### Duplicate array "g_a" to create arrays "g_b" and "g_c" with array ### names "array B" and "array C", respectively. if not g_b or not g_c: ga.eror("duplicate failed") if not me: print "Created Arrays B and C" # Initialize data in matrices a and b. if not me: print "Initializing matrix A and B" a = np.random.rand(*dims)*29 b = np.random.rand(*dims)*37 # Copy data to global arrays g_a and g_b. if not me: ### copy the contents of array "a" into the global array "g_a" ### similarly for "b" # Synchronize all processors to make sure everyone has data. ### Synchronize all processors # Determine which block of data is locally owned. Note that # the same block is locally owned for all GAs. ### find out which block of data my node owns for the global array "g_c" ### and store the contents in the integer arrays "lo" and "hi" # Get the blocks from g_a and g_b needed to compute this block in # g_c and copy them into the local buffers a and b. lo2 = (lo[0],0) hi2 = (hi[0],dims[0])) ### copy the block of data described by the arrays "lo2" and "hi2" from ### the global array "g_a" in to the local array "a" lo3 = (0,lo[1]) hi3 = (dims[1],hi[1])) ### copy the block of data described by the arrays "lo3" and "hi3" from ### the global array "g_b" in to the local array "b" # Do local matrix multiplication and store the result in local # buffer c. Start by evaluating the transpose of b. btrns = b.transpose() # Multiply a and b to get c. c = np.dot(a,b) # Copy c back to g_c. ### copy data from the local array "c" into the block of the global array ### "g_c" described by the integer arrays "lo" and "hi". verify(g_a, g_b, g_c) # Deallocate arrays. ### destroy the global arrays "g_a", "g_b", "g_c" if __name__ == '__main__': if not me: print "\nUsing %d processes\n" % nprocs matrix_multiply() if not me: print "\nTerminating..." ga-5-3/python/tutorial/srumma.answer.py0000640005473000001440000001020711740665745017153 0ustar d3n000users"""A way over-simplified SRUMMA matrix multiplication implementation. Assumes square matrices with the shape as a multiple of the block size. """ import mpi4py.MPI from ga4py import ga import numpy as np CHUNK_SIZE = 256 MULTIPLIER = 3 N = CHUNK_SIZE*MULTIPLIER me = ga.nodeid() nproc = ga.nnodes() class Task(object): def __init__(self, alo, ahi, blo, bhi, clo, chi): self.alo = alo self.ahi = ahi self.blo = blo self.bhi = bhi self.clo = clo self.chi = chi def __repr__(self): return "Task(%s,%s,%s,%s,%s,%s)" % ( self.alo, self.ahi, self.blo, self.bhi, self.clo, self.chi) def get_task_list(chunk_size, multiplier): count = 0 task_list = [None]*multiplier**3 for row_chunk in range(multiplier): for col_chunk in range(multiplier): clo = [ row_chunk *chunk_size, col_chunk *chunk_size] chi = [(row_chunk+1)*chunk_size, (col_chunk+1)*chunk_size] for i in range(multiplier): alo = [ row_chunk *chunk_size, i *chunk_size] ahi = [(row_chunk+1)*chunk_size, (i+1)*chunk_size] blo = [ i *chunk_size, col_chunk *chunk_size] bhi = [(i+1)*chunk_size, (col_chunk+1)*chunk_size] task_list[count] = Task(alo, ahi, blo, bhi, clo, chi) count += 1 return task_list def srumma(g_a, g_b, g_c, chunk_size, multiplier): # statically partition the task list among nprocs task_list = get_task_list(chunk_size, multiplier) ntasks = multiplier**3 // nproc start = me*ntasks stop = (me+1)*ntasks if me+1 == nproc: stop += multiplier**3 % nproc # the srumma algorithm, more or less task_prev = task_list[start] a_prev,a_nb_prev = ga.nbget(g_a, task_prev.alo, task_prev.ahi) b_prev,b_nb_prev = ga.nbget(g_b, task_prev.blo, task_prev.bhi) for i in range(start+1,stop): task_next = task_list[i] a_next,a_nb_next = ga.nbget(g_a, task_next.alo, task_next.ahi) b_next,b_nb_next = ga.nbget(g_b, task_next.blo, task_next.bhi) ga.nbwait(a_nb_prev) ga.nbwait(b_nb_prev) result = np.dot(a_prev,b_prev) ga.acc(g_c, result, task_prev.clo, task_prev.chi) task_prev = task_next a_prev,a_nb_prev = a_next,a_nb_next b_prev,b_nb_prev = b_next,b_nb_next ga.nbwait(a_nb_prev) ga.nbwait(b_nb_prev) result = np.dot(a_prev,b_prev) ga.acc(g_c, result, task_prev.clo, task_prev.chi) ga.sync() def verify_using_ga(g_a, g_b, g_c): g_v = ga.duplicate(g_c) ga.gemm(False,False,N,N,N,1,g_a,g_b,0,g_v) c = ga.access(g_c) v = ga.access(g_v) if c is not None: val = int(np.abs(np.sum(c-v))>0.0001) else: val = 0 val = ga.gop_add(val) ga.destroy(g_v) return val == 0 def verify_using_np(g_a, g_b, g_c): a = ga.get(g_a) b = ga.get(g_b) c = ga.get(g_c) v = np.dot(a,b) val = int(np.abs(np.sum(c-v))>0.0001) val = ga.gop_add(val) return val == 0 if __name__ == '__main__': if nproc > MULTIPLIER**3: if 0 == me: print "You must use less than %s processors" % (MULTIPLIER**3+1) else: g_a = ga.create(ga.C_DBL, [N,N]) g_b = ga.create(ga.C_DBL, [N,N]) g_c = ga.create(ga.C_DBL, [N,N]) # put some fake data into input arrays A and B if me == 0: ga.put(g_a, np.random.random(N*N)) ga.put(g_b, np.random.random(N*N)) ga.sync() if me == 0: print "srumma...", srumma(g_a, g_b, g_c, CHUNK_SIZE, MULTIPLIER) if me == 0: print "done" if me == 0: print "verifying using ga.gemm...", ok = verify_using_ga(g_a, g_b, g_c) if me == 0: if ok: print "OKAY" else: print "FAILED" if me == 0: print "verifying using np.dot...", ok = verify_using_np(g_a, g_b, g_c) if me == 0: if ok: print "OKAY" else: print "FAILED" ga.destroy(g_a) ga.destroy(g_b) ga.destroy(g_c) ga-5-3/python/tutorial/pi.py0000640005473000001440000000303311740665745014760 0ustar d3n000users#!/usr/bin/env python """ THIS CODE WAS TAKEN FROM mpi4py-1.2.2/demo/compute-pi and converted to use Global Arrays and ga.acc(). Thanks Lisandro! Parallel PI computation using Remote Memory Access (RMA) within Python objects exposing memory buffers (requires NumPy). usage:: $ mpiexec -n python pi.py """ from mpi4py import MPI from ga4py import ga from math import pi as PI from numpy import ndarray def get_n(): prompt = "Enter the number of intervals: (0 quits) " try: n = int(raw_input(prompt)); if n < 0: n = 0 except: n = 0 return n def comp_pi(n, myrank=0, nprocs=1): h = 1.0 / n; s = 0.0; for i in xrange(myrank + 1, n + 1, nprocs): x = h * (i - 0.5); s += 4.0 / (1.0 + x**2); return s * h def prn_pi(pi, PI): message = "pi is approximately %.16f, error is %.16f" print (message % (pi, abs(pi - PI))) ### assign total number of processors to variable 'nprocs' ### assign processor ID to the variable 'myrank' ### create a global array 'g_pi' of type double and a single value while True: if myrank == 0: n = get_n() ### broadcast the value of 'n' else: ### receive the broadcast of the value of 'n' if n == 0: break ### zero the global array 'g_pi' mypi = comp_pi(n, myrank, nprocs) ### accumulate local value 'mypi' into global array 'g_pi' ga.sync() if myrank == 0: ### get value of 'pi' from global array 'g_pi' prn_pi(pi, PI) ### destroy the global array 'g_pi' ga-5-3/python/tutorial/irregular.py0000640005473000001440000000127511740665745016352 0ustar d3n000usersimport mpi4py.MPI # initialize Message Passing Interface from ga4py import ga # initialize Global Arrays import numpy as np me = ga.nodeid() nproc = ga.nnodes() def print_distribution(g_a): for i in range(ga.nnodes()): lo,hi = ga.distribution(g_a, i) print "P=%s lo=%s hi=%s" % (i,lo,hi) # create some irregular arrays block = [3,2] map = [0,2,6,0,5] if nproc < np.prod(block): raise ValueError, "ERROR: fewer procs than requested blocks" g_a = ga.create_irreg(ga.C_DBL, [8,10], block, map, "Array A") if not g_a: ga.error("Could not create global array A",g_a) g_b = ga.create(ga.C_INT, (2,3,4,5,6)) if not me: print_distribution(g_a) print_distribution(g_b) ga-5-3/python/tutorial/groups.answer.py0000640005473000001440000000157711740665745017200 0ustar d3n000usersimport mpi4py.MPI from ga4py import ga import numpy as np me = ga.nodeid() nproc = ga.nnodes() def parallel_task(): me = ga.pgroup_nodeid() nproc = ga.pgroup_nnodes() if not me: print "This is process 0 on group %s" % ga.pgroup_get_default() g_a = ga.create(ga.C_DBL, (3,4,5)) ga.randomize(g_a) if me == 0: print np.sum(ga.access(g_a)) midproc = nproc//2 proclist_first = range(0,midproc) proclist_last = range(midproc,nproc) group_id_first = ga.pgroup_create(proclist_first) group_id_last = ga.pgroup_create(proclist_last) if me in proclist_first: ga.pgroup_set_default(group_id_first) parallel_task() ga.pgroup_set_default(ga.pgroup_get_world()) ga.sync() if me in proclist_last: ga.pgroup_set_default(group_id_last) parallel_task() ga.pgroup_set_default(ga.pgroup_get_world()) ga.sync() if not me: print "All done with groups" ga-5-3/python/tutorial/readinc.py0000640005473000001440000001050011740665745015752 0ustar d3n000users"""A way over-simplified SRUMMA matrix multiplication implementation. Assumes square matrices with the shape as a multiple of the block size. This one utilizes ga.read_inc() for load balancing. """ import mpi4py.MPI from ga4py import ga import numpy as np CHUNK_SIZE = 256 MULTIPLIER = 3 N = CHUNK_SIZE*MULTIPLIER me = ga.nodeid() nproc = ga.nnodes() class Task(object): def __init__(self, alo, ahi, blo, bhi, clo, chi): self.alo = alo self.ahi = ahi self.blo = blo self.bhi = bhi self.clo = clo self.chi = chi def __repr__(self): return "Task(%s,%s,%s,%s,%s,%s)" % ( self.alo, self.ahi, self.blo, self.bhi, self.clo, self.chi) def get_task_list(chunk_size, multiplier): count = 0 task_list = [None]*multiplier**3 for row_chunk in range(multiplier): for col_chunk in range(multiplier): clo = [ row_chunk *chunk_size, col_chunk *chunk_size] chi = [(row_chunk+1)*chunk_size, (col_chunk+1)*chunk_size] for i in range(multiplier): alo = [ row_chunk *chunk_size, i *chunk_size] ahi = [(row_chunk+1)*chunk_size, (i+1)*chunk_size] blo = [ i *chunk_size, col_chunk *chunk_size] bhi = [(i+1)*chunk_size, (col_chunk+1)*chunk_size] task_list[count] = Task(alo, ahi, blo, bhi, clo, chi) count += 1 return task_list def srumma(g_a, g_b, g_c, chunk_size, multiplier, g_counter): task_list = get_task_list(chunk_size, multiplier) ### get first integer from g_counter and assign to 'task_id' # the srumma algorithm, more or less task_prev = task_list[task_id] a_prev,a_nb_prev = ga.nbget(g_a, task_prev.alo, task_prev.ahi) b_prev,b_nb_prev = ga.nbget(g_b, task_prev.blo, task_prev.bhi) ### get next integer from g_counter and assign to 'task_id' while task_id < multiplier**3: task_next = task_list[task_id] a_next,a_nb_next = ga.nbget(g_a, task_next.alo, task_next.ahi) b_next,b_nb_next = ga.nbget(g_b, task_next.blo, task_next.bhi) ga.nbwait(a_nb_prev) ga.nbwait(b_nb_prev) result = np.dot(a_prev,b_prev) ga.acc(g_c, result, task_prev.clo, task_prev.chi) task_prev = task_next a_prev,a_nb_prev = a_next,a_nb_next b_prev,b_nb_prev = b_next,b_nb_next ### get next integer from g_counter and assign to 'task_id' ga.nbwait(a_nb_prev) ga.nbwait(b_nb_prev) result = np.dot(a_prev,b_prev) ga.acc(g_c, result, task_prev.clo, task_prev.chi) ga.sync() def verify_using_ga(g_a, g_b, g_c): g_v = ga.duplicate(g_c) ga.gemm(False,False,N,N,N,1,g_a,g_b,0,g_v) c = ga.access(g_c) v = ga.access(g_v) if c is not None: val = int(np.abs(np.sum(c-v))>0.0001) else: val = 0 val = ga.gop_add(val) ga.destroy(g_v) return val == 0 def verify_using_np(g_a, g_b, g_c): a = ga.get(g_a) b = ga.get(g_b) c = ga.get(g_c) v = np.dot(a,b) val = int(np.abs(np.sum(c-v))>0.0001) val = ga.gop_add(val) return val == 0 if __name__ == '__main__': if nproc > MULTIPLIER**3: if 0 == me: print "You must use less than %s processors" % (MULTIPLIER**3+1) else: g_a = ga.create(ga.C_DBL, [N,N]) g_b = ga.create(ga.C_DBL, [N,N]) g_c = ga.create(ga.C_DBL, [N,N]) g_counter = ga.create(ga.C_INT, [1]) ga.zero(g_counter) # put some fake data into input arrays A and B if me == 0: ga.put(g_a, np.random.random(N*N)) ga.put(g_b, np.random.random(N*N)) ga.sync() if me == 0: print "srumma...", srumma(g_a, g_b, g_c, CHUNK_SIZE, MULTIPLIER, g_counter) if me == 0: print "done" if me == 0: print "verifying using ga.gemm...", ok = verify_using_ga(g_a, g_b, g_c) if me == 0: if ok: print "OKAY" else: print "FAILED" if me == 0: print "verifying using np.dot...", ok = verify_using_np(g_a, g_b, g_c) if me == 0: if ok: print "OKAY" else: print "FAILED" ga.destroy(g_a) ga.destroy(g_b) ga.destroy(g_c) ga.destroy(g_counter) ga-5-3/python/tutorial/matrix.answer.py0000640005473000001440000000506511740665745017161 0ustar d3n000users""" Multiplication of two square matrices with randomly generated contents. """ import mpi4py.MPI from ga4py import ga import numpy as np NDIM = 2 TOTALELEMS = 1007 MAXPROC = 128 NBUF = 4 TOLERANCE = 0.1 me = ga.nodeid() nprocs = ga.nnodes() def verify(g_a, g_b, g_c): g_chk = ga.duplicate(g_a, "array check") if not g_chk: ga.error("duplicate failed") ga.sync() ga.gemm(False, False, TOTALELEMS, TOTALELEMS, TOTALELEMS, 1.0, g_a, g_b, 0.0, g_chk); ga.sync() ga.add(g_c, g_chk, g_chk, 1.0, -1.0) rchk = ga.dot(g_chk, g_chk) if not me: print "Normed difference in matrices: %12.4f" % rchk if not (-TOLERANCE < rchk < TOLERANCE): ga.error("Matrix multiply verify failed") else: print "Matrix Multiply OK" ga.destroy(g_chk) def matrix_multiply(): # Configure array dimensions. Force an unequal data distribution. dims = [TOTALELEMS]*NDIM chunk = [TOTALELEMS/nprocs-1]*NDIM # Create a global array g_a and duplicate it to get g_b and g_c. g_a = ga.create(ga.C_DBL, dims, "array A", chunk) if not g_a: ga.error("create failed: A") if not me: print "Created Array A" g_b = ga.duplicate(g_a, "array B") g_c = ga.duplicate(g_a, "array C") if not g_b or not g_c: ga.eror("duplicate failed") if not me: print "Created Arrays B and C" # Initialize data in matrices a and b. if not me: print "Initializing matrix A and B" a = np.random.rand(*dims)*29 b = np.random.rand(*dims)*37 # Copy data to global arrays g_a and g_b. if not me: ga.put(g_a, a) ga.put(g_b, b) # Synchronize all processors to make sure everyone has data. ga.sync() # Determine which block of data is locally owned. Note that # the same block is locally owned for all GAs. lo,hi = ga.distribution(g_c) # Get the blocks from g_a and g_b needed to compute this block in # g_c and copy them into the local buffers a and b. a = ga.get(g_a, (lo[0],0), (hi[0],dims[0])) b = ga.get(g_b, (0,lo[1]), (dims[1],hi[1])) # Do local matrix multiplication and store the result in local # buffer c. Start by evaluating the transpose of b. btrns = b.transpose() # Multiply a and b to get c. c = np.dot(a,b) # Copy c back to g_c. ga.put(g_c, c, lo, hi) verify(g_a, g_b, g_c) # Deallocate arrays. ga.destroy(g_a) ga.destroy(g_b) ga.destroy(g_c) if __name__ == '__main__': if not me: print "\nUsing %d processes\n" % nprocs matrix_multiply() if not me: print "\nTerminating..." ga-5-3/python/tutorial/srumma.py0000640005473000001440000001117611740665745015663 0ustar d3n000users"""A way over-simplified SRUMMA matrix multiplication implementation. Assumes square matrices with the shape as a multiple of the block size. """ import mpi4py.MPI from ga4py import ga import numpy as np CHUNK_SIZE = 256 MULTIPLIER = 3 N = CHUNK_SIZE*MULTIPLIER ### assign to 'me' this processor's ID ### assign to 'nproc' how many processors in the world class Task(object): def __init__(self, alo, ahi, blo, bhi, clo, chi): self.alo = alo self.ahi = ahi self.blo = blo self.bhi = bhi self.clo = clo self.chi = chi def __repr__(self): return "Task(%s,%s,%s,%s,%s,%s)" % ( self.alo, self.ahi, self.blo, self.bhi, self.clo, self.chi) def get_task_list(chunk_size, multiplier): count = 0 task_list = [None]*multiplier**3 for row_chunk in range(multiplier): for col_chunk in range(multiplier): clo = [ row_chunk *chunk_size, col_chunk *chunk_size] chi = [(row_chunk+1)*chunk_size, (col_chunk+1)*chunk_size] for i in range(multiplier): alo = [ row_chunk *chunk_size, i *chunk_size] ahi = [(row_chunk+1)*chunk_size, (i+1)*chunk_size] blo = [ i *chunk_size, col_chunk *chunk_size] bhi = [(i+1)*chunk_size, (col_chunk+1)*chunk_size] task_list[count] = Task(alo, ahi, blo, bhi, clo, chi) count += 1 return task_list def srumma(g_a, g_b, g_c, chunk_size, multiplier): # statically partition the task list among nprocs task_list = get_task_list(chunk_size, multiplier) ntasks = multiplier**3 // nproc start = me*ntasks stop = (me+1)*ntasks if me+1 == nproc: stop += multiplier**3 % nproc # the srumma algorithm, more or less task_prev = task_list[start] ### use a nonblocking get to request first block and nb handle from 'g_a' ### and assign to 'a_prev' and 'a_nb_prev' ### use a nonblocking get to request first block and nb handle from 'g_b' ### and assign to 'b_prev' and 'b_nb_prev' for i in range(start+1,stop): task_next = task_list[i] ### use a nonblocking get to request next block and nb handle from 'g_a' ### and assign to 'a_next' and 'a_nb_next' ### use a nonblocking get to request next block and nb handle from 'g_b' ### and assign to 'b_next' and 'b_nb_next' ### wait on the previoius nb handle for 'g_a' ### wait on the previoius nb handle for 'g_b' result = np.dot(a_prev,b_prev) ### accumulate the result into 'g_c' at the previous block location task_prev = task_next a_prev,a_nb_prev = a_next,a_nb_next b_prev,b_nb_prev = b_next,b_nb_next ### wait on the previoius nb handle for 'g_a' ### wait on the previoius nb handle for 'g_b' ga.nbwait(a_nb_prev) ga.nbwait(b_nb_prev) result = np.dot(a_prev,b_prev) ### accumulate the result into 'g_c' at the previous block location ### synchronize def verify_using_ga(g_a, g_b, g_c): g_v = ga.duplicate(g_c) ga.gemm(False,False,N,N,N,1,g_a,g_b,0,g_v) c = ga.access(g_c) v = ga.access(g_v) if c is not None: val = int(np.abs(np.sum(c-v))>0.0001) else: val = 0 val = ga.gop_add(val) ga.destroy(g_v) return val == 0 def verify_using_np(g_a, g_b, g_c): a = ga.get(g_a) b = ga.get(g_b) c = ga.get(g_c) v = np.dot(a,b) val = int(np.abs(np.sum(c-v))>0.0001) val = ga.gop_add(val) return val == 0 if __name__ == '__main__': if nproc > MULTIPLIER**3: if 0 == me: print "You must use less than %s processors" % (MULTIPLIER**3+1) else: g_a = ga.create(ga.C_DBL, [N,N]) g_b = ga.create(ga.C_DBL, [N,N]) g_c = ga.create(ga.C_DBL, [N,N]) # put some fake data into input arrays A and B if me == 0: ga.put(g_a, np.random.random(N*N)) ga.put(g_b, np.random.random(N*N)) ga.sync() if me == 0: print "srumma...", srumma(g_a, g_b, g_c, CHUNK_SIZE, MULTIPLIER) if me == 0: print "done" if me == 0: print "verifying using ga.gemm...", ok = verify_using_ga(g_a, g_b, g_c) if me == 0: if ok: print "OKAY" else: print "FAILED" if me == 0: print "verifying using np.dot...", ok = verify_using_np(g_a, g_b, g_c) if me == 0: if ok: print "OKAY" else: print "FAILED" ga.destroy(g_a) ga.destroy(g_b) ga.destroy(g_c) ga-5-3/python/tutorial/locality.py0000640005473000001440000000066411740665745016177 0ustar d3n000usersimport mpi4py.MPI # initialize Message Passing Interface from ga4py import ga # initialize Global Arrays me = ga.nodeid() def print_distribution(g_a): for i in range(ga.nnodes()): lo,hi = ga.distribution(g_a, i) print "%s lo=%s hi=%s" % (i,lo,hi) # create some arrays g_a = ga.create(ga.C_DBL, (10,20,30)) g_b = ga.create(ga.C_INT, (2,3,4,5,6)) if not me: print_distribution(g_a) print_distribution(g_b) ga-5-3/python/tutorial/access.py0000640005473000001440000000041611740665745015613 0ustar d3n000users"""Use ga.access() to sum locally per SMP node.""" import mpi4py.MPI from ga4py import ga import numpy as np # Okay, we create the global array g_a = ga.create(ga.C_DBL, (3,4,5,6)) if world_id == 0: ga.put(g_a, np.arange(3*4*5*6)) ga.sync() # You're on your own! ga-5-3/python/tutorial/ufunc.py0000640005473000001440000000051711740665745015474 0ustar d3n000usersimport mpi4py.MPI from ga4py import ga import numpy as np ### I suggest creating a python "ufunc" class which implements __call__ ### but it's really up to you g_a = ga.create(ga.C_DBL, (3,4,5)) ga.randomize(g_a) ### call a ufunc e.g. your_func(g_a) ga.print_stdout(g_a) ### call a ufunc e.g. your_func(g_a) ga.print_stdout(g_a) ga-5-3/python/tutorial/hello2.py0000640005473000001440000000024711740665745015541 0ustar d3n000usersimport mpi4py.MPI # initialize Message Passing Interface from ga4py import ga # initialize Global Arrays print "hello from %s out of %s" % (ga.nodeid(),ga.nnodes()) ga-5-3/python/tutorial/hello.py0000640005473000001440000000017711740665745015461 0ustar d3n000usersimport mpi4py.MPI # initialize Message Passing Interface from ga4py import ga # initialize Global Arrays print "Hello World!" ga-5-3/python/tutorial/readinc.answer.py0000640005473000001440000001045511740665745017261 0ustar d3n000users"""A way over-simplified SRUMMA matrix multiplication implementation. Assumes square matrices with the shape as a multiple of the block size. This one utilizes ga.read_inc() for load balancing. """ import mpi4py.MPI from ga4py import ga import numpy as np CHUNK_SIZE = 256 MULTIPLIER = 3 N = CHUNK_SIZE*MULTIPLIER me = ga.nodeid() nproc = ga.nnodes() class Task(object): def __init__(self, alo, ahi, blo, bhi, clo, chi): self.alo = alo self.ahi = ahi self.blo = blo self.bhi = bhi self.clo = clo self.chi = chi def __repr__(self): return "Task(%s,%s,%s,%s,%s,%s)" % ( self.alo, self.ahi, self.blo, self.bhi, self.clo, self.chi) def get_task_list(chunk_size, multiplier): count = 0 task_list = [None]*multiplier**3 for row_chunk in range(multiplier): for col_chunk in range(multiplier): clo = [ row_chunk *chunk_size, col_chunk *chunk_size] chi = [(row_chunk+1)*chunk_size, (col_chunk+1)*chunk_size] for i in range(multiplier): alo = [ row_chunk *chunk_size, i *chunk_size] ahi = [(row_chunk+1)*chunk_size, (i+1)*chunk_size] blo = [ i *chunk_size, col_chunk *chunk_size] bhi = [(i+1)*chunk_size, (col_chunk+1)*chunk_size] task_list[count] = Task(alo, ahi, blo, bhi, clo, chi) count += 1 return task_list def srumma(g_a, g_b, g_c, chunk_size, multiplier, g_counter): # statically partition the task list among nprocs task_list = get_task_list(chunk_size, multiplier) task_id = ga.read_inc(g_counter, 0) # the srumma algorithm, more or less task_prev = task_list[task_id] a_prev,a_nb_prev = ga.nbget(g_a, task_prev.alo, task_prev.ahi) b_prev,b_nb_prev = ga.nbget(g_b, task_prev.blo, task_prev.bhi) task_id = ga.read_inc(g_counter, 0) while task_id < multiplier**3: task_next = task_list[task_id] a_next,a_nb_next = ga.nbget(g_a, task_next.alo, task_next.ahi) b_next,b_nb_next = ga.nbget(g_b, task_next.blo, task_next.bhi) ga.nbwait(a_nb_prev) ga.nbwait(b_nb_prev) result = np.dot(a_prev,b_prev) ga.acc(g_c, result, task_prev.clo, task_prev.chi) task_prev = task_next a_prev,a_nb_prev = a_next,a_nb_next b_prev,b_nb_prev = b_next,b_nb_next task_id = ga.read_inc(g_counter, 0) ga.nbwait(a_nb_prev) ga.nbwait(b_nb_prev) result = np.dot(a_prev,b_prev) ga.acc(g_c, result, task_prev.clo, task_prev.chi) ga.sync() def verify_using_ga(g_a, g_b, g_c): g_v = ga.duplicate(g_c) ga.gemm(False,False,N,N,N,1,g_a,g_b,0,g_v) c = ga.access(g_c) v = ga.access(g_v) if c is not None: val = int(np.abs(np.sum(c-v))>0.0001) else: val = 0 val = ga.gop_add(val) ga.destroy(g_v) return val == 0 def verify_using_np(g_a, g_b, g_c): a = ga.get(g_a) b = ga.get(g_b) c = ga.get(g_c) v = np.dot(a,b) val = int(np.abs(np.sum(c-v))>0.0001) val = ga.gop_add(val) return val == 0 if __name__ == '__main__': if nproc > MULTIPLIER**3: if 0 == me: print "You must use less than %s processors" % (MULTIPLIER**3+1) else: g_a = ga.create(ga.C_DBL, [N,N]) g_b = ga.create(ga.C_DBL, [N,N]) g_c = ga.create(ga.C_DBL, [N,N]) g_counter = ga.create(ga.C_INT, [1]) ga.zero(g_counter) # put some fake data into input arrays A and B if me == 0: ga.put(g_a, np.random.random(N*N)) ga.put(g_b, np.random.random(N*N)) ga.sync() if me == 0: print "srumma...", srumma(g_a, g_b, g_c, CHUNK_SIZE, MULTIPLIER, g_counter) if me == 0: print "done" if me == 0: print "verifying using ga.gemm...", ok = verify_using_ga(g_a, g_b, g_c) if me == 0: if ok: print "OKAY" else: print "FAILED" if me == 0: print "verifying using np.dot...", ok = verify_using_np(g_a, g_b, g_c) if me == 0: if ok: print "OKAY" else: print "FAILED" ga.destroy(g_a) ga.destroy(g_b) ga.destroy(g_c) ga.destroy(g_counter) ga-5-3/python/tutorial/pi.answer.py0000640005473000001440000000272411740665745016264 0ustar d3n000users#!/usr/bin/env python """ THIS CODE WAS TAKEN FROM mpi4py-1.2.2/demo/compute-pi and converted to use Global Arrays and ga.acc(). Thanks Lisandro! Parallel PI computation using Remote Memory Access (RMA) within Python objects exposing memory buffers (requires NumPy). usage:: $ mpiexec -n python pi.py """ from mpi4py import MPI from ga4py import ga from math import pi as PI from numpy import ndarray import sys def get_n(): prompt = "Enter the number of intervals: (0 quits) " try: n = int(raw_input(prompt)); if n < 0: n = 0 except: n = 0 return n def comp_pi(n, myrank=0, nprocs=1): h = 1.0 / n; s = 0.0; for i in xrange(myrank + 1, n + 1, nprocs): x = h * (i - 0.5); s += 4.0 / (1.0 + x**2); return s * h def prn_pi(pi, PI): message = "pi is approximately %.16f, error is %.16f" print (message % (pi, abs(pi - PI))) nprocs = ga.nnodes() myrank = ga.nodeid() g_pi = ga.create(ga.C_DBL, [1]) one_time = False if len(sys.argv) == 2: n = int(sys.argv[1]) one_time = True while True: if not one_time: if myrank == 0: n = get_n() n = ga.brdcst(n) else: n = ga.brdcst(0) if n == 0: break ga.zero(g_pi) mypi = comp_pi(n, myrank, nprocs) ga.acc(g_pi, mypi) ga.sync() if myrank == 0: pi = ga.get(g_pi)[0] prn_pi(pi, PI) if one_time: break ga.destroy(g_pi) ga-5-3/python/tutorial/transp1D.answer.py0000640005473000001440000000406111740665745017344 0ustar d3n000users""" transpose of 1-d array. e.g. (1 2 3 4 5 6 7 8 9 10) => (10 9 8 7 6 5 4 3 2 1) """ import mpi4py.MPI from ga4py import ga import numpy as np # Find local processor ID and number of processors. me = ga.nodeid() nprocs = ga.nnodes() TOTALELEMS = 197 def verify(g_a, g_b): a = ga.get(g_a) b = ga.get(g_b) if not np.all(a[::-1] == b): print "Mismatch: a[::-1] is not equal to b" ga.error("verify failed") print "Transpose OK" def TRANSPOSE1D(): # Configure array dimensions. Force an unequal data distribution. dims = [nprocs*TOTALELEMS + nprocs/2] chunk = [TOTALELEMS] # minimum data on each process # create a global array g_a and duplicate it to get g_b g_a = ga.create(ga.C_INT, dims, "array A", chunk) if not g_a: ga.error("create failed: A") if not me: print "Created Array A" g_b = ga.duplicate(g_a, "array B") if not g_b: ga.error("duplicate failed") if not me: print "Created Array B" # initialize data in g_a if not me: print "Initializing matrix A" ga.put(g_a, np.arange(dims[0], dtype=np.int32)) # Synchronize all processors to guarantee that everyone has data # before proceeding to the next step. ga.sync() # Start initial phase of inversion by inverting the data held locally on # each processor. Start by finding out which data each processor owns. lo,hi = ga.distribution(g_a) # Get locally held data and copy it into local buffer a a = ga.get(g_a, lo, hi) # Invert data locally b = a[::-1] # Invert data globally by copying locally inverted blocks into # their inverted positions in the GA ga.put(g_b, b, dims[0]-hi[0], dims[0]-lo[0]) # Synchronize all processors to make sure inversion is complete ga.sync() # Check to see if inversion is correct if not me: verify(g_a, g_b) # Deallocate arrays ga.destroy(g_a) ga.destroy(g_b) if __name__ == '__main__': if not me: print "Using %d processes\n" % nprocs TRANSPOSE1D(); if not me: print "\nTerminating ..." ga-5-3/python/tutorial/access.answer.py0000640005473000001440000000114011740665745017104 0ustar d3n000users"""Use ga.access() to sum locally per SMP node.""" import mpi4py.MPI from ga4py import ga import numpy as np world_id = ga.nodeid() world_nproc = ga.nnodes() node_id = ga.cluster_nodeid() node_nproc = ga.cluster_nprocs(node_id) node_me = ga.cluster_procid(node_id,ga.nodeid()) g_a = ga.create(ga.C_DBL, (3,4,5,6)) if world_id == 0: ga.put(g_a, np.arange(3*4*5*6)) ga.sync() if node_me == 0: sum = 0 for i in range(node_nproc): smp_neighbor_world_id = ga.cluster_procid(node_id,i) buffer = ga.access(g_a, proc=smp_neighbor_world_id) sum += np.sum(buffer) print sum ga-5-3/python/tutorial/transp1D.py0000640005473000001440000000570311740665745016052 0ustar d3n000users""" transpose of 1-d array. e.g. (1 2 3 4 5 6 7 8 9 10) => (10 9 8 7 6 5 4 3 2 1) """ import mpi4py.MPI from ga4py import ga import numpy as np # Find local processor ID and number of processors. ### assign the local processor ID to the variable "me" ### assign the total number of processors to the variable "nprocs" TOTALELEMS = 197 MAXPROC = 128 def verify(g_a, g_b): ### copy the entire block of data from the global array "g_a" into the ### local array "a" and similarly for "g_b" and "b". if not np.all(a[::-1] == b): print "Mismatch: a[::-1] is not equal to b" ga.error("verify failed") print "Transpose OK" def TRANSPOSE1D(): # Configure array dimensions. Force an unequal data distribution. dims = [nprocs*TOTALELEMS + nprocs/2] chunk = [TOTALELEMS] # minimum data on each process # create a global array g_a and duplicate it to get g_b ### create GA of integers with dimension "dims" with minimum block size ### "chunk" and name of "Array A" and assign the handle to the variable ### "g_a" if not g_a: ga.error("create failed: A") if not me: print "Created Array A" ### create a second global array assigned to the handled "g_b" by ### duplicating "g_a" and assigning the name "Array B" if not g_b: ga.error("duplicate failed") if not me: print "Created Array B" # initialize data in g_a if not me: print "Initializing matrix A" ### copy contents of a numpy range array into the remote ### global array "g_a" ### HINT: use numpy's arange() e.g. np.arange(###, dtype=np.int32) # Synchronize all processors to guarantee that everyone has data # before proceeding to the next step. ### synchronize all processors # Start initial phase of inversion by inverting the data held locally on # each processor. Start by finding out which data each processor owns. ### find out which block of data my node owns for the global array "g_a" ### and store the contents of the arrays into "lo" and "hi" # Get locally held data and copy it into local buffer a ### use the arrays "lo" and "hi" to copy the locally held block of data ### from the global array "g_a" into the local array "a". # Invert data locally b = a[::-1] # Invert data globally by copying locally inverted blocks into # their inverted positions in the GA lo2 = [dims[0]-hi[0]] hi2 = [dims[0]-lo[0]] ### copy data from the local array "b" into the block of the global ### array "g_a" described by the integer arrays "lo" and "hi" # Synchronize all processors to make sure inversion is complete ### synchronize all processors # Check to see if inversion is correct if not me: verify(g_a, g_b) # Deallocate arrays ### destroy global arrays "g_a" and "g_b" if __name__ == '__main__': if not me: print "Using %d processes\n" % nprocs TRANSPOSE1D(); if not me: print "\nTerminating ..." ga-5-3/python/tutorial/ufunc.answer.py0000640005473000001440000000062311740665745016770 0ustar d3n000usersimport mpi4py.MPI from ga4py import ga import numpy as np class ufunc(object): def __init__(self, ufunc): self.ufunc = ufunc def __call__(self, g_a): a = ga.access(g_a) if a is not None: self.ufunc(a,a) sin = ufunc(np.sin) cos = ufunc(np.cos) g_a = ga.create(ga.C_DBL, (3,4,5)) ga.randomize(g_a) sin(g_a) ga.print_stdout(g_a) cos(g_a) ga.print_stdout(g_a) ga-5-3/python/tutorial/groups.py0000640005473000001440000000172111740665745015671 0ustar d3n000usersimport mpi4py.MPI from ga4py import ga import numpy as np me = ga.nodeid() nproc = ga.nnodes() def parallel_task(): me = ga.pgroup_nodeid() nproc = ga.pgroup_nnodes() ### print a message from the master of the group g_a = ga.create(ga.C_DBL, (3,4,5)) ga.randomize(g_a) ### sum the g_a and print the sum ### -OR- do something else with g_a... midproc = nproc//2 ### assign to 'proclist_first' the first half of the process range ### assign to 'proclist_last' the last half of the process range ### create the 'group_id_first' process group ### create the 'group_id_last' process group if me in proclist_first: ### set the default group to 'group_id_first' parallel_task() ### reset the default group to the world group ### synchronize if me in proclist_last: ### set the default group to 'group_id_last' parallel_task() ### reset the default group to the world group ### synchronize if not me: print "All done with groups" ga-5-3/python/tutorial/copy.py0000640005473000001440000000111111740665745015315 0ustar d3n000usersimport mpi4py.MPI # initialize Message Passing Interface from ga4py import ga # initialize Global Arrays me = ga.nodeid() def print_distribution(g_a): for i in range(ga.nnodes()): lo,hi = ga.distribution(g_a, i) print "%s lo=%s hi=%s" % (i,lo,hi) # create some arrays g_a = ga.create(ga.C_DBL, (10,20,30), chunk=(-1,20,-1)) g_b = ga.create(ga.C_DBL, (10,20,30), chunk=(10,-1,-1)) if not me: print_distribution(g_a) print_distribution(g_b) ga.fill(g_a, 6) ga.copy(g_a,g_b) if not me: buffer = ga.access(g_b) print buffer.shape print buffer ga-5-3/python/tests/0000750005473000001440000000000012275260520013257 5ustar d3n000usersga-5-3/python/tests/test_unravel.py0000640005473000001440000000021711647125636016357 0ustar d3n000usersfrom ga4py.gain.util import unravel_index print unravel_index(5, (3,4,5)) print unravel_index(16,(3,4,5)) print unravel_index((5,16),(3,4,5)) ga-5-3/python/tests/missing.py0000640005473000001440000000313611647125636015320 0ustar d3n000users"""reports how much of numpy as been overridden or imported by gain""" import numpy as np from ga4py import gain import inspect np_function_count = 0 ov_function_count = 0 ov_function_miss = [] np_class_count = 0 ov_class_count = 0 ov_class_miss = [] np_ufunc_count = 0 ov_ufunc_count = 0 ov_ufunc_miss = [] for name in dir(np): np_obj = getattr(np, name) override = False if hasattr(gain, name): #if not me: print "gain override exists for: %s" % name override = True #else: # setattr(gain, name, getattr(np, name)) if type(np_obj) is type(np.add): np_ufunc_count += 1 if override: ov_ufunc_count += 1 else: ov_ufunc_miss.append(name) elif inspect.isfunction(np_obj): np_function_count += 1 if override: ov_function_count += 1 else: ov_function_miss.append(name) elif inspect.isclass(np_obj): np_class_count += 1 if override: ov_class_count += 1 else: ov_class_miss.append(name) print "%d/%d numpy functions overridden by gain" % ( ov_function_count,np_function_count) if ov_function_count != np_function_count: print "missing functions" print ov_function_miss print "%d/%d numpy classes overridden by gain" % ( ov_class_count,np_class_count) if ov_class_count != np_class_count: print "missing classes" print ov_class_miss print "%d/%d numpy ufuncs overridden by gain" % ( ov_ufunc_count,np_ufunc_count) if ov_ufunc_count != np_ufunc_count: print "missing ufuncs" print ov_ufunc_miss ga-5-3/python/tests/test.py0000640005473000001440000004416111647125636014631 0ustar d3n000users#!/usr/bin/env python """At first it was a duplicate of GA's test.x, but was made more modular since so much could be reused. It is more like unit tests since each piece has build up and tear down.""" import random import sys from mpi4py import MPI from ga4py import ga import numpy as np me = ga.nodeid() nproc = ga.nnodes() nnodes = ga.cluster_nnodes() inode = ga.cluster_nodeid() lprocs = ga.cluster_nprocs(inode) iproc = me % lprocs n = 256 m = 2*n maxloop = 100 nloop = min(maxloop,n) block_size = [32,32] proc_grid = [2,nproc/2] MEM_INC = 1000 MIRROR = False USE_RESTRICTED = False NEW_API = False NGA_GATSCAT = False BLOCK_CYCLIC = False USE_SCALAPACK_DISTR = False # This was used to debug as it makes printed numpy arrays a bit easier to read np.set_printoptions(precision=6, suppress=True, edgeitems=4) def mismatch(x,y): #return abs(x-y)/max(1.0,abs(x)) > 1e-12 return abs(x-y)/max(1.0,abs(x)) > 1e-5 def main(): if 0 == me: if MIRROR: print ' Performing tests on Mirrored Arrays' print ' GA initialized' # note that MA is not used, so no need to initialize it # "import ga" registers malloc/free as memory allocators internally #if nproc-1 == me: if 0 == me: print 'using %d process(es) %d custer nodes' % ( nproc, ga.cluster_nnodes()) print 'process %d is on node %d with %d processes' % ( me, ga.cluster_nodeid(), ga.cluster_nprocs(-1)) # create array to force staggering of memory and uneven distribution # of pointers dim1 = MEM_INC mapc = [0]*nproc for i in range(nproc): mapc[i] = MEM_INC*i dim1 += MEM_INC*i g_s = ga.create_handle() ga.set_data(g_s, [dim1], ga.C_INT) ga.set_array_name(g_s, 's') ga.set_irreg_distr(g_s, mapc, [nproc]) if MIRROR: if 0 == me: print '\nTESTING MIRRORED ARRAYS\n' # check support for single precision arrays if 0 == me: print '\nCHECKING SINGLE PRECISION\n' check_float() # check support for double precision arrays if 0 == me: print '\nCHECKING DOUBLE PRECISION\n' check_double() # check support for single precision complex arrays if 0 == me: print '\nCHECKING SINGLE COMPLEX\n' check_complex_float() # check support for double precision complex arrays if 0 == me: print '\nCHECKING DOUBLE COMPLEX\n' check_complex_double() # check support for integer arrays if 0 == me: print '\nCHECKING INT\n' check_int() # check support for long integer arrays if 0 == me: print '\nCHECKING LONG INT\n' check_long() if 0 == me: print '\nCHECKING Wrappers to Message Passing Collective ops\n' check_wrappers() # check if memory limits are enforced #check_mem(ma_heap*ga.nnodes()) if 0 == me: ga.print_stats() if 0 == me: print ' ' if 0 == me: print 'All tests successful' # tidy up the ga package # NO NEED -- atexit registered ga.terminate() # tidy up after message-passing library # NO NEED -- atexit registered MPI.Finalize() # Note: so long as mpi4py is imported before ga, cleanup is automatic def create_local_a(gatype): nptype = ga.dtype(gatype) if gatype == ga.C_SCPL: if MIRROR: a = np.fromfunction(lambda i,j: i+inode, (n,n), dtype=np.float32) b = np.fromfunction(lambda i,j: j*n, (n,n), dtype=np.float32) return np.vectorize(complex)(a,b) else: a = np.fromfunction(lambda i,j: i, (n,n), dtype=np.float32) b = np.fromfunction(lambda i,j: j*n, (n,n), dtype=np.float32) return np.vectorize(complex)(a,b) elif gatype == ga.C_DCPL: if MIRROR: a = np.fromfunction(lambda i,j: i+inode, (n,n), dtype=np.float64) b = np.fromfunction(lambda i,j: j*n, (n,n), dtype=np.float64) return np.vectorize(complex)(a,b) else: a = np.fromfunction(lambda i,j: i, (n,n), dtype=np.float64) b = np.fromfunction(lambda i,j: j*n, (n,n), dtype=np.float64) return np.vectorize(complex)(a,b) elif gatype in [ga.C_DBL,ga.C_FLOAT]: if MIRROR: return np.fromfunction(lambda i,j: inode+i+j*n, (n,n), dtype=nptype) else: return np.fromfunction(lambda i,j: i+j*n, (n,n), dtype=nptype) elif gatype in [ga.C_INT,ga.C_LONG]: if MIRROR: return np.fromfunction(lambda i,j: inode+i+j*1000, (n,n), dtype=nptype) else: return np.fromfunction(lambda i,j: i+j*1000, (n,n), dtype=nptype) def create_local_b(gatype): nptype = ga.dtype(gatype) b = np.zeros((n,n), dtype=nptype) if gatype in [ga.C_SCPL, ga.C_DCPL]: b[:] = complex(-1,1) else: b[:] = -1 return b def create_global_array(gatype): if NEW_API: g_a = ga.create_handle() ga.set_data(g_a, [n,n], gatype) ga.set_array_name(g_a, 'a') if USE_RESTRICTED: num_restricted = nproc/2 or 1 restricted_list = np.arange(num_restricted) + num_restricted/2 ga.set_restricted(g_a, restricted_list) if BLOCK_CYCLIC: if USE_SCALAPACK_DISTR: if nproc % 2 == 0: ga.error('Available procs must be divisible by 2',nproc) ga.set_block_cyclic_proc_grid(g_a, block_size, proc_grid) else: ga.set_block_cyclic(g_a, block_size) if MIRROR: p_mirror = ga.pgroup_get_mirror() ga.set_pgroup(g_a, p_mirror) ga.allocate(g_a) else: if MIRROR: p_mirror = ga.pgroup_get_mirror() ga.create_config(gatype, (n,n), 'a', None, p_mirror) else: g_a = ga.create(gatype, (n,n), 'a') if 0 == g_a: ga.error('ga.create failed') if MIRROR: lproc = me - ga.cluster_procid(inode, 0) lo,hi = ga.distribution(g_a, lproc) else: lo,hi = ga.distribution(g_a, me) ga.sync() return g_a def check_zero(gatype): if 0 == me: print '> Checking zero ...', g_a = create_global_array(gatype) ga.zero(g_a) a = ga.get(g_a) if not np.all(a == 0): ga.error('ga.zero failed') if 0 == me: print 'OK' ga.destroy(g_a) def check_put_disjoint(gatype): """each node fills in disjoint sections of the array""" if 0 == me: print '> Checking disjoint put ...', g_a = create_global_array(gatype) a = create_local_a(gatype) inc = (n-1)/20 + 1 ij = 0 for i in range(0,n,inc): for j in range(0,n,inc): check = False if MIRROR: check = ij % lprocs == iproc else: check = ij % nproc == me if check: lo = [i,j] hi = [min(i+inc,n), min(j+inc,n)] piece = a[ga.zip(lo,hi)] ga.put(g_a, piece, lo, hi) # the following check is not part of the original test.F result = ga.get(g_a, lo, hi) if not np.all(result == piece): ga.error("put followed by get failed", 1) ga.sync() ij += 1 ga.sync() # all nodes check all of a b = ga.get(g_a) if not np.all(a == b): ga.error('put failed, exiting') if 0 == me: print 'OK' ga.destroy(g_a) def check_get(gatype): """check nloop random gets from each node""" if 0 == me: print '> Checking random get (%d calls)...' % nloop g_a = create_global_array(gatype) a = create_local_a(gatype) if 0 == me: ga.put(g_a, a) ga.sync() nwords = 0 random.seed(ga.nodeid()*51+1) # different seed for each proc for loop in range(nloop): ilo,ihi = random.randint(0, nloop-1),random.randint(0, nloop-1) if ihi < ilo: ilo,ihi = ihi,ilo jlo,jhi = random.randint(0, nloop-1),random.randint(0, nloop-1) if jhi < jlo: jlo,jhi = jhi,jlo nwords += (ihi-ilo+1)*(jhi-jlo+1) ihi += 1 jhi += 1 result = ga.get(g_a, (ilo,jlo), (ihi,jhi)) if not np.all(result == a[ilo:ihi,jlo:jhi]): ga.error('random get failed') if 0 == me and loop % max(1,nloop/20) == 0: print ' call %d node %d checking get((%d,%d),(%d,%d)) total %f' % ( loop, me, ilo, ihi, jlo, jhi, nwords) if 0 == me: print 'OK' ga.destroy(g_a) def check_accumulate_disjoint(gatype): """Each node accumulates into disjoint sections of the array.""" if 0 == me: print '> Checking disjoint accumulate ...', g_a = create_global_array(gatype) a = create_local_a(gatype) b = np.fromfunction(lambda i,j: i+j+2, (n,n), dtype=ga.dtype(gatype)) if 0 == me: ga.put(g_a, a) ga.sync() inc = (n-1)/20 + 1 ij = 0 for i in range(0,n,inc): for j in range(0,n,inc): x = 10.0 lo = [i,j] hi = [min(i+inc,n), min(j+inc,n)] piece = b[ga.zip(lo,hi)] check = False if MIRROR: check = ij % lprocs == iproc else: check = ij % nproc == me if check: ga.acc(g_a, piece, lo, hi, x) ga.sync() ij += 1 # each process applies all updates to its local copy a[ga.zip(lo,hi)] += x * piece ga.sync() # all nodes check all of a if not np.all(ga.get(g_a) == a): ga.error('acc failed') if 0 == me: print 'OK' ga.destroy(g_a) def check_accumulate_overlap(gatype): if 0 == me: print '> Checking overlapping accumulate ...', g_a = create_global_array(gatype) ga.zero(g_a) ga.acc(g_a, [1], (n/2,n/2), (n/2+1,n/2+1), 1) ga.sync() if MIRROR: if 0 == iproc: x = abs(ga.get(g_a, (n/2,n/2), (n/2+1,n/2+1))[0,0] - lprocs) if not 0 == x: ga.error('overlapping accumulate failed -- expected %s got %s'%( x, lprocs)) else: if 0 == me: x = abs(ga.get(g_a, (n/2,n/2), (n/2+1,n/2+1))[0,0] - nproc) if not 0 == x: ga.error('overlapping accumulate failed -- expected %s got %s'%( x, nproc)) if 0 == me: print 'OK' ga.destroy(g_a) def check_add(gatype): if 0 == me: print '> Checking add ...', g_a = create_global_array(gatype) g_b = create_global_array(gatype) a = create_local_a(gatype) b = create_local_b(gatype) alpha = None beta = None if 0 == me: ga.put(g_a, a) ga.sync(); np.random.seed(12345) # everyone has same seed if gatype in [ga.C_SCPL,ga.C_DCPL]: b_real = np.random.random_sample((n,n)) b_imag = np.random.random_sample((n,n)) b[:] = np.vectorize(complex)(b_real,b_imag) alpha = complex(0.1,-0.1) beta = complex(0.9,-0.9) else: b[:] = np.random.random_sample((n,n)) alpha = 0.1 beta = 0.9 a = alpha*a + beta*b if MIRROR: if 0 == iproc: ga.put(g_b, b) else: if 0 == me: ga.put(g_b, b) ga.sync() ga.add(g_a, g_b, g_b, alpha, beta) b = ga.get(g_b, buffer=b) if np.any(np.vectorize(mismatch)(b,a)): ga.error('add failed') if 0 == me: print 'OK' ga.destroy(g_a) ga.destroy(g_b) def check_dot(gatype): if 0 == me: print '> Checking dot ...', np.random.seed(12345) # everyone has same seed g_a = create_global_array(gatype) g_b = create_global_array(gatype) a = create_local_a(gatype) b = np.random.random_sample((n,n)) if MIRROR: if 0 == iproc: ga.put(g_b, b) ga.put(g_a, a) else: if 0 == me: ga.put(g_b, b) ga.put(g_a, a) ga.sync() sum1 = np.sum(a*b) sum2 = ga.dot(g_a, g_b) if mismatch(sum1, sum2): ga.error('dot wrong %s != %s' % (sum1, sum2)) if 0 == me: print 'OK' ga.destroy(g_a) ga.destroy(g_b) def check_scale(gatype): if 0 == me: print '> Checking scale ...', g_a = create_global_array(gatype) a = create_local_a(gatype) if 0 == me: ga.put(g_a, a) ga.sync() ga.scale(g_a, 0.123) a *= 0.123 if np.any(np.vectorize(mismatch)(a,ga.get(g_a))): ga.error('add failed') if 0 == me: print 'OK' ga.destroy(g_a) def check_copy(gatype): if 0 == me: print '> Checking copy ...', g_a = create_global_array(gatype) g_b = create_global_array(gatype) a = create_local_a(gatype) if 0 == me: ga.put(g_a, a) ga.copy(g_a, g_b) if not np.all(a == ga.get(g_b)): ga.error('copy failed') if 0 == me: print 'OK' ga.destroy(g_a) ga.destroy(g_b) def check_gather(gatype): if 0 == me: print '> Checking gather (might be slow)...', g_a = create_global_array(gatype) a = create_local_a(gatype) if 0 == me: ga.put(g_a, a) ga.sync() ijv = np.zeros((m,2), dtype=np.int64) random.seed(ga.nodeid()*51 + 1) # different seed for each proc for j in range(10): itmp = None if MIRROR: itmp = random.randint(0,lprocs-1) else: itmp = random.randint(0,nproc-1) if itmp == me: for loop in range(m): ijv[loop,:] = (random.randint(0,n-1),random.randint(0,n-1)) #if ijv[loop,0] > ijv[loop,1]: # ijv[loop,:] = ijv[loop,::-1] # reverse result = ga.gather(g_a, ijv) for loop in range(m): value = ga.get(g_a, ijv[loop], ijv[loop]+1).flatten() if not result[loop] == value: ga.error('gather failed') if 0 == me: print 'OK' ga.destroy(g_a) def check_scatter(gatype): nptype = ga.dtype(gatype) if 0 == me: print '> Checking scatter (might be slow)...', g_a = create_global_array(gatype) a = create_local_a(gatype) if 0 == me: ga.put(g_a, a) ga.sync() ijv = np.zeros((m,2), dtype=np.int64) v = np.zeros(m, dtype=nptype) random.seed(ga.nodeid()*51 + 1) # different seed for each proc for j in range(10): check = None if MIRROR: check = random.randint(0,lprocs-1) == iproc else: check = random.randint(0,nproc-1) == me if check: for loop in range(m): ijv[loop,:] = (random.randint(0,n-1),random.randint(0,n-1)) v[loop] = ijv[loop,0]+ijv[loop,1] ga.scatter(g_a, v, ijv) for loop in range(m): value = ga.get(g_a, ijv[loop], ijv[loop]+1).flatten() if not v[loop] == value: ga.error('scatter failed') if 0 == me: print 'OK' ga.destroy(g_a) def check_print_patch(gatype): g_a = create_global_array(gatype) a = create_local_a(gatype) if n > 7: if 0 == me: print '> Checking ga.print_patch --- should match' print a[2:5,2:7] ga.print_patch(g_a, (2,2), (5,7)) ga.destroy(g_a) def check_read_inc(gatype): if 0 == me: print '> Checking ga.read_inc ...', print "CHECK NOT IMPLEMENTED" #print 'OK' def check_fence_and_lock(gatype): if 0 == me: print '> Checking ga.fence and ga.lock', g_a = create_global_array(gatype) ga.zero(g_a) if not ga.create_mutexes(1): ga.error('ga.create_mutexes failed') if n < 2: ga.error('insufficient n to test ga.fence', n) ga.lock(0) a = ga.get(g_a) # get original values a[:,0] += 1 # add my contribution # need to use fence to assure that coms complete before leaving # critical section ga.init_fence() ga.put(g_a, a) ga.fence() ga.unlock(0) if not ga.destroy_mutexes(): ga.error('mutex not destroyed') ga.sync() if 0 == me: a = ga.get(g_a) if not np.all(a[:,0] == nproc): ga.error('fence failed') if 0 == me: print 'OK' def check(gatype): check_zero(gatype) check_put_disjoint(gatype) check_get(gatype) check_accumulate_disjoint(gatype) check_accumulate_overlap(gatype) check_add(gatype) check_dot(gatype) check_scale(gatype) check_copy(gatype) check_gather(gatype) check_scatter(gatype) def check_float(): check(ga.C_FLOAT) def check_double(): check(ga.C_DBL) def check_complex_float(): check(ga.C_SCPL) def check_complex_double(): check(ga.C_DCPL) def check_int(): gatype = ga.C_INT check_zero(gatype) check_put_disjoint(gatype) check_get(gatype) check_accumulate_disjoint(gatype) check_accumulate_overlap(gatype) #check_add(gatype) #check_dot(gatype) #check_scale(gatype) check_copy(gatype) check_gather(gatype) check_scatter(gatype) check_print_patch(gatype) check_fence_and_lock(gatype) def check_long(): gatype = ga.C_LONG check_zero(gatype) check_put_disjoint(gatype) check_get(gatype) check_accumulate_disjoint(gatype) check_accumulate_overlap(gatype) #check_add(gatype) #check_dot(gatype) #check_scale(gatype) check_copy(gatype) check_gather(gatype) check_scatter(gatype) check_print_patch(gatype) check_fence_and_lock(gatype) def check_gop(nptype): if 0 == me: print '> checking ga.gop (%s)' % nptype, input = np.arange(n, dtype=nptype) + me sum = np.arange(n, dtype=nptype)*nproc + (nproc-1)*nproc/2 output = ga.gop(input, '+') if not np.all(output == sum): ga.error('ga.gop (%s) error' % nptype) if 0 == me: print 'OK' def check_broadcast(): if 0 == me: print '> Checking ga.brdcst', buf = [0,0] if nproc-1 == me: buf = [me,nproc] buf = ga.brdcst(buf,nproc-1) if buf[0] != nproc-1: ga.error('ga.brdcst buf[0] failed') if buf[1] != nproc: ga.error('ga.brdcst buf[1] failed') if 0 == me: print 'OK' def check_wrappers(): check_gop(np.int32) check_gop(np.int64) check_gop(np.float32) check_gop(np.float64) check_gop(np.complex64) check_gop(np.complex128) check_broadcast() if __name__ == '__main__': main() ga-5-3/python/tests/testmatmult.py0000640005473000001440000001305011647125636016226 0ustar d3n000users""" Test ga.gemm (double). Note: * change nummax for large arrays * turn off 'verify' for large arrays due to memory limitations, as verify=True for large arrays produces segfault, dumps core, or any crap. """ import time import mpi4py.MPI from ga4py import ga import numpy as np BLOCK_CYCLIC = False VERIFY = True me = ga.nodeid() nproc = ga.nnodes() num1 = nummax = 1024 transa = [False,True,False,True] transb = [False,False,True,True] ntrans = len(transa) nums_m = [512,1024] nums_n = [512,1024] nums_k = [512,1024] howmany = len(nums_k) h0 = np.zeros(num1*num1, dtype=np.float64) avg_t = np.zeros(ntrans, dtype=np.float64) avg_mf = np.zeros(ntrans, dtype=np.float64) try: import scipy as sp import scipy.linalg from scipy.linalg.fblas import dgemm except: if VERIFY and 0 == me: print "WARNING: VERIFY=True but scipy's dgemm not available" print " ga.gemm will not be verified" VERIFY = False # This was used to debug as it makes printed numpy arrays a bit easier to read np.set_printoptions(precision=6, suppress=True, edgeitems=4) def main(): # TODO there's got to be a loopless, more pythonic way to do this ii = 0 for i in range(num1*num1): ii += 1 if ii > num1: ii = 0 h0[i] = ii # compute times assuming 500 mflops and 5 second target time # ntimes = max(3.0, 5.0/(4.0-9*num**3)) ntimes = 5 for ii in range(howmany): num_m = nums_m[ii] num_n = nums_n[ii] num_k = nums_k[ii] a = 0.5/(num_m*num_n) if num_m > nummax or num_n > nummax or num_k > nummax: ga.error('Insufficient memory: check nummax') if BLOCK_CYCLIC: block_size = [128,128] g_c = ga.create_handle() ga.set_data(g_c, (num_m,num_n), ga.C_DBL) ga.set_array_name(g_c, 'g_c') ga.set_block_cyclic(g_c, block_size) if not ga.allocate(g_c): ga.error('create failed') block_size = [128,128] g_b = ga.create_handle() ga.set_data(g_b, (num_k,num_n), ga.C_DBL) ga.set_array_name(g_b, 'g_b') ga.set_block_cyclic(g_b, block_size) if not ga.allocate(g_b): ga.error('create failed') block_size = [128,128] g_a = ga.create_handle() ga.set_data(g_a, (num_m,num_k), ga.C_DBL) ga.set_array_name(g_a, 'g_a') ga.set_block_cyclic(g_a, block_size) if not ga.allocate(g_a): ga.error('create failed') else: g_a = ga.create(ga.C_DBL, (num_m,num_k), 'g_a') g_b = ga.create(ga.C_DBL, (num_k,num_n), 'g_b') g_c = ga.create(ga.C_DBL, (num_m,num_n), 'g_c') for handle in [g_a,g_b,g_c]: if 0 == handle: ga.error('create failed') # initialize matrices A and B if 0 == me: load_ga(g_a, h0, num_m, num_k) load_ga(g_b, h0, num_k, num_n) ga.zero(g_c) ga.sync() if 0 == me: print '\nMatrix Multiplication C = A[%d,%d] x B[%d,%d]\n' % ( num_m, num_k, num_k, num_n) print ' %4s %12s %12s %7s %7s'%( "Run#", "Time (seconds)", "mflops/proc", "A trans", "B trans") avg_t[:] = 0 avg_mf[:] = 0 for itime in range(ntimes): for i in range(ntrans): ga.sync() ta = transa[i] tb = transb[i] t1 = time.time() ga.gemm(ta,tb,num_m,num_n,num_k,1,g_a,g_b,0,g_c) t1 = time.time() - t1 if 0 == me: mf = 2*num_m*num_n*num_k/t1*10**-6/nproc avg_t[i] += t1 avg_mf[i] += mf print ' %4d %12.4f %12.1f %7s %7s'%( itime+1, t1, mf, ta, tb) if VERIFY and itime == 0: verify_ga_gemm(ta, tb, num_m, num_n, num_k, 1.0, g_a, g_b, 0.0, g_c) if 0 == me: print '' for i in range(ntrans): print 'Average: %12.4f seconds %12.1f mflops/proc %s %s'%( avg_t[i]/ntimes, avg_mf[i]/ntimes, transa[i], transb[i]) if VERIFY: print 'All ga.gemms are verified...O.K.' def load_ga(handle, h0, num_m, num_k): if True: ga.put(handle, h0[:num_m*num_k]) else: a = np.arange(num_m*num_k, dtype=np.float64) ga.put(handle, a) def verify_ga_gemm(ta, tb, num_m, num_n, num_k, alpha, g_a, g_b, beta, g_c): tmpa = np.ndarray((num_m, num_k), dtype=np.float64) tmpb = np.ndarray((num_k, num_n), dtype=np.float64) tmpc = np.ndarray((num_m, num_n), dtype=np.float64) tmpa = ga.get(g_a, buffer=tmpa) tmpb = ga.get(g_b, buffer=tmpb) tmpc = ga.get(g_c, buffer=tmpc) if not ta and not tb: result = dgemm(alpha, tmpa, tmpb, beta=beta, trans_a=ta, trans_b=tb) elif ta and not tb: result = dgemm(alpha, tmpa, tmpb, beta=beta, trans_a=ta, trans_b=tb) elif not ta and tb: result = dgemm(alpha, tmpa, tmpb, beta=beta, trans_a=ta, trans_b=tb) elif ta and tb: result = dgemm(alpha, tmpa, tmpb, beta=beta, trans_a=ta, trans_b=tb) else: raise ValueError, "shouldn't get here" abs_value = np.abs(tmpc-result) if np.any(abs_value > 1): ga.error('verify ga.gemm failed') if __name__ == '__main__': main() ga-5-3/python/tests/gain.py0000640005473000001440000003452412000110051014533 0ustar d3n000usersimport mpi4py.MPI as MPI from ga4py import ga from ga4py import gain import numpy as np from getopt import getopt import sys import traceback def me(): return ga.pgroup_nodeid(ga.pgroup_get_default()) def nproc(): return ga.pgroup_nnodes(ga.pgroup_get_default()) def sync(): ga.pgroup_sync(ga.pgroup_get_default()) PREPRINT = False PRINTERS = [0] #PRINTERS = [i for i in range(nproc())] try: import colorama colorama.init() RED = colorama.Fore.RED YELLOW = colorama.Fore.YELLOW GREEN = colorama.Fore.GREEN RESET = colorama.Fore.RESET except Exception: RED = "" YELLOW = "" GREEN = "" RESET = "" # each test is exec'd by twice, once for numpy and once for gain # 'm' is the current module tests = [ "result = m.arange(100, dtype=m.float32)", "result = m.arange(100, dtype=m.float32).copy()", "result = m.arange(100, dtype=m.float32)[9:17].copy()", """a = m.arange(100, dtype=m.float32) result = m.sin(a[49::-2],a[50::2])""", """a = m.arange(100, dtype=m.float32) result = m.sin(a[49::-2],a[50::2])""", """a = m.arange(100, dtype=m.float32) a[5:15] = m.arange(10, dtype=m.float32) result = a""", """a = m.arange(100, dtype=m.float32) a[5:15] = np.arange(10, dtype=m.float32) result = a""", "result = m.sin(1)", "result = m.sin([1,2,3])", "result = m.sin([1,2,3], m.asarray([0,0,0], dtype=m.float32))""", """c = m.ones(10, dtype=m.int16) d = m.ones(10, dtype=m.int16) result = m.sin(c,d)""", "result = m.sin(m.ones(10, dtype=m.int16))", """a = m.arange(100, dtype=m.float32) b = a[:50:2] c = a[50::2] result = m.add(b,c)""", # commented out because numpy produces inconsistent results # whereas gain produces the 'correct' results due to internal copies #"""a = m.arange(100, dtype=m.float32) # b = a[:50:2] # c = a[50::2] # d = a[::4] # result = m.add(b,c,d)""", """a = m.arange(100, dtype=m.float32) b = a[:50:2] result = m.add(b,5)""", """a = m.arange(100, dtype=m.float32) b = a[50::2] result = m.add(5,b)""", "result = m.ones((3,4,5), dtype=m.float32)", """s = m.ones((3,4,5), dtype=m.float32) t = m.ones((3,4,5), dtype=m.float32) result = m.sin(s,t)""", """x = m.ones((2,3,4)) result = m.add(x,x)""", """x = m.ones((2,3,4)) y = m.ones((3,4)) result = m.add(x,y)""", "result = m.linspace(2.0,3.0,num=5)", "result = m.linspace(2.0,3.0,num=5,endpoint=False)", "result = m.linspace(2.0,3.0,num=5,retstep=True)", "result = m.logspace(2.0,3.0,num=4)", "result = m.logspace(2.0,3.0,num=4,endpoint=False)", "result = m.logspace(2.0,3.0,num=4,base=2.0)", """f = m.ones((100,200), dtype=float) g = m.ones((200,300), dtype=float) result = m.dot(f,g)""", """h = m.arange(100, dtype=m.float32) result = m.dot(h,h)""", "result = m.dot(6,10)", """h = m.arange(100, dtype=m.float32) result = m.dot(6,h)""", "result = m.eye(24,25)", "result = m.eye(24,25,4)", "result = m.eye(24,25,-8)", "result = m.identity(11)", "result = m.add.reduce([1,2,3,4])", "result = m.add.reduce(m.arange(100))", "result = m.add.reduce(m.ones((100,200)))", "result = m.add.reduce(m.ones((100,200,300)))", "result = m.subtract.reduce([1,2,3,4])", "result = m.subtract.reduce(m.arange(100))", """i = m.arange(100*200).reshape((100,200)) result = m.subtract.reduce(i)""", """i = m.arange(100*200*300).reshape((100,200,300)) result = m.subtract.reduce(i)""", "result = m.add.accumulate(m.ones(7))", "result = m.add.accumulate(m.ones((7,7)))", "result = m.add.accumulate(m.ones((7,7,7)), axis=0)", "result = m.add.accumulate(m.ones((7,7,7)), axis=1)", "result = m.add.accumulate(m.ones((7,7,7)), axis=2)", "result = m.alen((1,2,3))", "result = m.alen(m.zeros((4,5,6)))", """foo = np.arange(4*25).reshape(4,25) i = m.zeros((4,25)) i[:] = foo result = i""", """foo = np.arange(4*25).reshape(4,25) i = m.zeros((4,25)) i[:] = foo result = i.flat""", """foo = np.arange(4*25).reshape(4,25) i = m.zeros((4,25)) i[:] = foo result = i.flat[2]""", """foo = np.arange(4*25).reshape(4,25) i = m.zeros((4,25)) i[:] = foo result = i.flat[2:19]""", """i = m.zeros((4,25)) j = i.flat j[:] = 6 result = j""", """foo = np.arange(4*25).reshape(4,25) i = m.zeros((4,25)) i[:] = foo j = i.flat j[:] = 6 j[3:19] = 7 result = j""", """foo = m.zeros((3,4,5)) bar = m.arange(3*4*5) foo.flat = bar result = foo""", """foo = m.zeros((3,4,5)) foo.flat = 6 result = foo""", """foo = m.zeros((3,4,5)) bar = m.arange(3*4*5) i = m.zeros((3,4,5)) result = m.add(foo.flat,bar,i.flat)""", """foo = m.zeros((3,4,5)) bar = m.arange(3*4*5) foo.flat = bar baz = foo[1:,::2,2:5] result = baz.flat[2:7]""", """foo = m.zeros((3,4,5)) bar = m.arange(3*4*5) foo.flat = bar baz = foo[1,1:,2:] result = baz.flat[2:7]""", """foo = m.zeros((3,4,5)) bar = m.arange(3*4*5) foo.flat = bar baz = foo[1,1:,None,2:] result = baz.flat[2:7]""", "result = m.clip(m.arange(10), 1, 8)", "result = m.clip(m.arange(100), 10, 80)", "result = m.clip(m.arange(10), [3,4,1,1,1,4,4,4,4,4], 8)", """foo = np.arange(4*25).reshape(4,25) i = m.zeros((4,25)) i[:] = foo result = i.transpose()""", """foo = np.arange(4*5*77).reshape(4,5,77) k = m.zeros((4,5,77)) k[:] = foo result = k.transpose()""", """foo = np.arange(4*5*77).reshape(4,5,77) k = m.zeros((4,5,77)) k[:] = foo result = k.transpose(1,2,0).shape""", """foo = np.arange(4*5*77).reshape(4,5,77) k = m.zeros((4,5,77)) k[:] = foo result = k.transpose(1,2,0)""", "result = m.arange(3*4*5).reshape((3,4,5))", "result = m.arange(3*4*5).reshape((3,4,5))[1:,2:,::2].reshape((2,3,2))", """a = m.zeros((10,2)) a.shape = (20) result = a""", """a = m.empty((4,2,6,92), dtype=m.float32) a.fill(6789.0) result = a""", """a = m.empty((4,2,6,92), dtype=m.int32) a.fill(6789.0) result = a""", "result = m.indices((3,4,5))", "result = m.indices((3,4,5)).max()", "result = m.indices((3,4,5)).max(0)", "result = m.arange(3*4*5).reshape((5,4,3))", "result = m.arange(3*4*5).reshape((5,4,3)).T", "result = m.arange(3*4*5).reshape((5,4,3)).T[1:,2:,3:]", "result = m.arange(3*4*5).reshape((5,4,3)).T[0,2:,3:]", "result = m.arange(3*4*5).reshape((5,4,3)).T[1:,0,3:]", "result = m.arange(3*4*5).reshape((5,4,3)).T[1:,2:,0]", "result = m.arange(3*4*5).reshape((5,4,3)).T[1:,None,2:,0]", "result = m.arange(3*4*5).reshape((5,4,3)).T[None,1:,None,2:,None,0,None]", "result = m.add.reduce(m.arange(3*4*5).reshape((5,4,3)).T)", """result = m.ones((15,2)) result = m.multiply(result,5,result)""", """a = m.ones((15,2)) b = a[:,0] result = m.multiply(b,5,b)""", """result = m.ones((15,2)) * 5""", """result = m.ones((15,2)) result *= 5""", """result = m.ones((15,2))[:,0] * 5""", """result = m.ones((15,2)) result[:,0] *= 5""", "result = m.arange(3*4).reshape(3,4).diagonal()", "result = m.arange(3*4).reshape(3,4).diagonal(1)", "result = m.arange(3*4).reshape(3,4).diagonal(-1)", ] # the current module, either numpy or gain m = None # count test results passes = 0 x_failures = 0 np_failures = 0 gain_failures = 0 epic_failures = 0 class PrintZero(object): def __init__(self): self.stdout = sys.stdout def write(self, something): if me() in PRINTERS: self.stdout.write(something) def flush(self): if me() in PRINTERS: self.stdout.flush() sys.stdout = PrintZero() def _dtype(thing): try: return thing.dtype except: try: return thing.base.dtype except: return None def _shape(thing): try: return thing.shape except: try: return thing.base.size # it's a flatiter except: return None def print_result(result_np,result_gain,diff): if isinstance(result_np, np.flatiter): _result_np = result_np.copy() else: _result_np = result_np print """%s ---------------------- numpy --------------------------------- %s %s %s %s ---------------------- gain ---------------------------------- %s %s %s %s ---------------------- difference ---------------------------- %s %s """ % (RED, type(result_np), _dtype(result_np), _shape(result_np), _result_np, type(result_gain), _dtype(result_gain), _shape(result_gain), result_gain, diff, RESET) def run_tests(): global m for test in tests: run_test(test) def run_test(test): global passes,x_failures,np_failures,gain_failures,epic_failures # sanity check that the test is correctly written if test.count("result") < 1: raise SyntaxError, "TEST ERROR: %s" % test # clean up whitespace and pretty print the test string test_lines = [line.strip() for line in test.splitlines()] test = '\n'.join(test_lines) if PREPRINT: print " TESTING:" print ' ' + '\n '.join(test_lines) any_err = False e_np = None e_gain = None result = None result_np = None result_gain = None m = np # some temporary labels for results try: exec test result_np = result except Exception,e: e_np = e tb_np = sys.exc_info() m = gain try: exec test result_gain = result except Exception,e: e_gain = e tb_gain = sys.exc_info() # sync now since most operations sync on the way in, not on the way out sync() if e_np is None and e_gain is None: err = False hard_err = False hard_err_tb = None try: diff = None if isinstance(result_gain, (gain.ndarray,gain.flatiter)): diff = result_np-result_gain.get() elif isinstance(result_gain, tuple): if (len(result_gain) > 1 and type(result_gain[0]) is type(result_gain[1])): diff = np.asarray(result_np)-np.asarray(result_gain) else: result_np = result_np[0] result_gain = result_gain[0] diff = result_np-result_gain.get() else: diff = result_np-result_gain if not np.all(diff == 0): print_result(result_np,result_gain,diff) err = True if not (_dtype(result_np) == _dtype(result_gain)): print RED + "different types np=%s gain=%s" % ( _dtype(result_np), _dtype(result_gain)) + RESET err = True except Exception,e: print "%scaught exception: %s%s" % (RED,e,RESET) hard_err = True hard_err_tb = sys.exc_info() if hard_err: print " RESULT: %sEPIC FAIL%s" % (RED,RESET) print "".join(traceback.format_exception(*hard_err_tb)) epic_failures += 1 any_err = True elif err: print " RESULT: %sFAIL%s" % (RED,RESET) gain_failures += 1 any_err = True else: #print " RESULT: %sPASS%s" % (GREEN,RESET) passes += 1 elif e_np is None: print " RESULT: %sFAIL -- gain exception only: %s%s" % ( RED,e_gain,RESET) print "".join(traceback.format_exception(*tb_gain)) gain_failures += 1 any_err = True elif e_gain is None: print " RESULT: %sFAIL -- numpy exception only: %s%s" % ( RED,e_np,RESET) print "".join(traceback.format_exception(*tb_np)) np_failures += 1 any_err = True else: # both errors are set if str(e_np) != str(e_gain): print " RESULT: %sFAIL (dffering exceptions)%s" % (RED,RESET) print " %snp:%s'%s'%s" % (RED,type(e_np),e_np,RESET) print " %sgain:%s'%s'%s" % (RED,type(e_gain),e_gain,RESET) print " --- NumPy traceback ---" print "".join(traceback.format_exception(*tb_np)) print " --- GAiN traceback ---" print "".join(traceback.format_exception(*tb_gain)) gain_failures += 1 else: #print " RESULT: %sXFAIL%s" % (GREEN,RESET) xfailures += 1 any_err = True if any_err: print "TEST WAS: %s" % test_lines[0] for line in test_lines[1:]: print " %s" % line if __name__ == '__main__': profile = False use_groups = False use_color = True (optsvals,args) = getopt(sys.argv[1:],'pgc') for (opt,val) in optsvals: if opt == '-p': profile = True elif opt == '-g': use_groups= True elif opt == '-c': use_color = False if not use_color: RED = "" YELLOW = "" GREEN = "" RESET = "" if profile: import cProfile print "Profiling enabled" cProfile.run("run_tests()", "gaintest.%s.prof" % str(me())) elif use_groups: midproc = nproc()//2 proclist_first = range(0,midproc) proclist_last = range(midproc,nproc()) group_id_first = ga.pgroup_create(proclist_first) group_id_last = ga.pgroup_create(proclist_last) if me() in proclist_first: ga.pgroup_set_default(group_id_first) run_tests() ga.pgroup_set_default(ga.pgroup_get_world()) sync() if me() in proclist_last: ga.pgroup_set_default(group_id_last) run_tests() ga.pgroup_set_default(ga.pgroup_get_world()) sync() print "All done with groups" else: run_tests() print "" print "%s Passed: %s%s" % (GREEN,passes,RESET) print "%sExpected Failures: %s%s" % (GREEN,x_failures,RESET) print "%s NumPy Failures: %s%s" % (YELLOW,np_failures,RESET) print "%s GAiN Failures: %s%s" % (RED,gain_failures,RESET) print "%s Epic Failures: %s%s" % (RED,epic_failures,RESET) if not me(): ga.print_stats() ga-5-3/python/tests/test_print_sync.py0000640005473000001440000000021411647125636017070 0ustar d3n000usersfrom mpi4py import MPI from ga4py import ga from ga4py.gain import print_sync me = ga.nodeid() nproc = ga.nnodes() print_sync((me,nproc)) ga-5-3/python/tests/perf.py0000640005473000001440000002352611647125636014610 0ustar d3n000users""" perf.py is used to test performance of put, get and accumulate. It has to be executed on four processors. Remote operations access data on processors 1,2,3 in the round-robin way. """ import time import sys import mpi4py.MPI from ga4py import ga import numpy as np nproc = ga.nnodes() me = ga.nodeid() def main(): if 4 != nproc and 0 == me: ga.error('Program requires 4 GA processes; nproc=%s' % nproc) test2D() test1D() if 0 == me: print 'All tests successful' def test2D(): n = 1024 buf = np.zeros((n,n), dtype=np.float64) chunk = np.asarray([1,3,4,9,16,24,30,48,64,91,128,171,256,353,440,512]) g_a = ga.create(ga.C_DBL, (n,n), 'a') if 0 == g_a: ga.error('ga.create failed') buf[:] = 0.01 ga.zero(g_a) if 0 == me: print (' Performance of GA get, put & acc' ' for square sections of array[%d,%d]' % (n,n)) lo,hi = ga.distribution(g_a, me) # local ops TestPutGetAcc(g_a, n, chunk, buf, lo, hi, True) # remote ops TestPutGetAcc(g_a, n, chunk, buf, lo, hi, False) def TestPutGetAcc(g_a, n, chunk, buf, lo, hi, local): if 0 == me: print '' if local: print 'Local 2-D Array Section' else: print 'Remote 2-D Array Section' print '%15s %19s %19s %19s' % ('section', 'get', 'put', 'accumulate') print '%7s %7s %9s %9s %9s %9s %9s %9s' % ( 'bytes','dim','usec','MB/s','usec','MB/s','usec','MB/s') ga.sync() bytes = 0 jump = 0 num_chunks = len(chunk) for loop in range(num_chunks): tg = 0.0 tp = 0.0 ta = 0.0 bytes = 8*chunk[loop]*chunk[loop] # how much data is accessed jump = n/(60*(loop+1)) # jump between consecutive patches if loop+1 == num_chunks: jump = 0 # everybody touches own data ga.fill(g_a, me*(loop+1), [0,0], [n,n]) if 0 == me: tg = time_get(g_a, lo, hi, buf, chunk[loop], jump, local) else: time.sleep(1) # everybody touches own data ga.fill(g_a, me*(loop+1), [0,0], [n,n]) if 0 == me: tp = time_put(g_a, lo, hi, buf, chunk[loop], jump, local) else: time.sleep(1) # everybody touches own data ga.fill(g_a, me*(loop+1), [0,0], [n,n]) if 0 == me: ta = time_acc(g_a, lo, hi, buf, chunk[loop], jump, local) else: time.sleep(1) if 0 == me: print '%7d %7d %8.3e %8.3e %8.3e %8.3e %8.3e %8.3e' % ( bytes, chunk[loop], tg/1e-6, 1e-6*bytes/tg, tp/1e-6, 1e-6*bytes/tp, ta/1e-6, 1e-6*bytes/ta) def time_get(g_a, lo, hi, buf, chunk, jump, local): count = 0 rows = hi[0]-lo[0] cols = hi[1]-lo[1] shifti = [rows, 0, rows] shiftj = [0, cols, cols] seconds = time.time() # distance between consecutive patches increased by jump # to destroy locality of reference for ilo in range(lo[0], hi[0]-chunk-jump+1, chunk+jump): ihi = ilo + chunk for jlo in range(lo[1], hi[1]-chunk-jump+1, chunk+jump): jhi = jlo + chunk count += 1 if local: llo = [ilo,jlo] lhi = [ihi,jhi] ignore = ga.get(g_a, llo, lhi, buf[ga.zip(llo,lhi)]) else: index = count%3 llo = [ilo+shifti[index],jlo+shiftj[index]] lhi = [ihi+shifti[index],jhi+shiftj[index]] ignore = ga.get(g_a, llo, lhi, buf[ilo:ihi,jlo:jhi]) seconds = time.time() - seconds return seconds/count def time_put(g_a, lo, hi, buf, chunk, jump, local): count = 0 rows = hi[0]-lo[0] cols = hi[1]-lo[1] shifti = [rows, 0, rows] shiftj = [0, cols, cols] seconds = time.time() # distance between consecutive patches increased by jump # to destroy locality of reference for ilo in range(lo[0], hi[0]-chunk-jump+1, chunk+jump): ihi = ilo + chunk for jlo in range(lo[1], hi[1]-chunk-jump+1, chunk+jump): jhi = jlo + chunk count += 1 if local: llo = [ilo,jlo] lhi = [ihi,jhi] ga.put(g_a, buf[ga.zip(llo,lhi)], llo, lhi) else: index = count%3 llo = [ilo+shifti[index],jlo+shiftj[index]] lhi = [ihi+shifti[index],jhi+shiftj[index]] ga.put(g_a, buf[ilo:ihi,jlo:jhi], llo, lhi) seconds = time.time() - seconds return seconds/count def time_acc(g_a, lo, hi, buf, chunk, jump, local): count = 0 rows = hi[0]-lo[0] cols = hi[1]-lo[1] shifti = [rows, 0, rows] shiftj = [0, cols, cols] seconds = time.time() # distance between consecutive patches increased by jump # to destroy locality of reference for ilo in range(lo[0], hi[0]-chunk-jump+1, chunk+jump): ihi = ilo + chunk for jlo in range(lo[1], hi[1]-chunk-jump+1, chunk+jump): jhi = jlo + chunk count += 1 if local: llo = [ilo,jlo] lhi = [ihi,jhi] ga.acc(g_a, buf[ga.zip(llo,lhi)], llo, lhi, 1) else: index = count%3 llo = [ilo+shifti[index],jlo+shiftj[index]] lhi = [ihi+shifti[index],jhi+shiftj[index]] ga.acc(g_a, buf[ilo:ihi,jlo:jhi], llo, lhi, 1) seconds = time.time() - seconds return seconds/count def test1D(): n = 1024*1024 buf = np.zeros(n/4, dtype=np.float64) chunk = np.asarray([1,9,16,81,256,576,900,2304,4096,8281, 16384,29241,65536,124609,193600,262144]) g_a = ga.create(ga.C_DBL, (n,), 'a') if 0 == g_a: ga.error('ga.create failed') buf[:] = 0.01 ga.zero(g_a) if 0 == me: print '' print '' print '' print (' Performance of GA get, put & acc' ' for 1-dimensional sections of array[%d]' % n) lo,hi = ga.distribution(g_a, me) # local ops TestPutGetAcc1(g_a, n, chunk, buf, lo, hi, True) # remote ops TestPutGetAcc1(g_a, n, chunk, buf, lo, hi, False) def TestPutGetAcc1(g_a, n, chunk, buf, lo, hi, local): if 0 == me: print '' if local: print 'Local 1-D Array Section' else: print 'Remote 1-D Array Section' print '%15s %19s %19s %19s' % ('section', 'get', 'put', 'accumulate') print '%7s %7s %9s %9s %9s %9s %9s %9s' % ( 'bytes','dim','usec','MB/s','usec','MB/s','usec','MB/s') ga.sync() bytes = 0 jump = 0 num_chunks = len(chunk) for loop in range(num_chunks): tg = 0.0 tp = 0.0 ta = 0.0 bytes = 8*chunk[loop] # how much data is accessed jump = n/(6000*(loop+1)) # jump between consecutive patches if loop+1 == num_chunks: jump = 0 # everybody touches own data ga.fill(g_a, me*(loop+1), [0], [n]) if 0 == me: tg = time_get1(g_a, lo, hi, buf, chunk[loop], jump, local) else: time.sleep(1) # everybody touches own data ga.fill(g_a, me*(loop+1), [0], [n]) if 0 == me: tp = time_put1(g_a, lo, hi, buf, chunk[loop], jump, local) else: time.sleep(1) # everybody touches own data ga.fill(g_a, me*(loop+1), [0], [n]) if 0 == me: ta = time_acc1(g_a, lo, hi, buf, chunk[loop], jump, local) else: time.sleep(1) if 0 == me: print '%7d %7d %8.3e %8.3e %8.3e %8.3e %8.3e %8.3e' % ( bytes, chunk[loop], tg/1e-6, 1e-6*bytes/tg, tp/1e-6, 1e-6*bytes/tp, ta/1e-6, 1e-6*bytes/ta) def time_get1(g_a, lo, hi, buf, chunk, jump, local): count = 0 rows = hi[0]-lo[0] shift = [3*rows, 2*rows, rows] seconds = time.time() # distance between consecutive patches increased by jump # to destroy locality of reference for ilo in range(lo[0], hi[0]-chunk-jump+1, chunk+jump): ihi = ilo+chunk count += 1 if local: ignore = ga.get(g_a, [ilo], [ihi], buf[ilo:ihi]) else: index = count%3 llo = ilo+shift[index] lhi = ihi+shift[index] ignore = ga.get(g_a, llo, lhi, buf[ilo:ihi]) seconds = time.time() - seconds return seconds/count def time_put1(g_a, lo, hi, buf, chunk, jump, local): count = 0 rows = hi[0]-lo[0] shift = [rows, 2*rows, 3*rows] seconds = time.time() # distance between consecutive patches increased by jump # to destroy locality of reference for ilo in range(lo[0], hi[0]-chunk-jump+1, chunk+jump): ihi = ilo+chunk count += 1 if local: ga.put(g_a, buf[ilo:ihi], [ilo], [ihi]) else: index = count%3 llo = ilo+shift[index] lhi = ihi+shift[index] ga.put(g_a, buf[ilo:ihi], llo, lhi) seconds = time.time() - seconds return seconds/count def time_acc1(g_a, lo, hi, buf, chunk, jump, local): # Note: differs from test.F because the passed buffer must be the same # size/shape as the patch. The slicing should be fast as the buffer is 1D # and contiguous (and so is the slice). count = 0 rows = hi[0]-lo[0] shift = [rows, 2*rows, 3*rows] seconds = time.time() # distance between consecutive patches increased by jump # to destroy locality of reference for ilo in range(lo[0], hi[0]-chunk-jump+1, chunk+jump): ihi = ilo+chunk count += 1 if local: ga.acc(g_a, buf[ilo:ihi], [ilo], [ihi], 1.0) else: index = count%3 ga.acc(g_a, buf[ilo:ihi], ilo+shift[index], ihi+shift[index], 1.0) seconds = time.time() - seconds return seconds/count if __name__ == '__main__': main() ga-5-3/python/epydocify.py0000750005473000001440000000573111466436305014502 0ustar d3n000users#!/usr/bin/env python # -------------------------------------------------------------------- import sys sys.path.append('..') import mpi4py.MPI import ga try: from signal import signal, SIGPIPE, SIG_IGN signal(SIGPIPE, SIG_IGN) except ImportError: pass # -------------------------------------------------------------------- try: from docutils.nodes import NodeVisitor NodeVisitor.unknown_visit = lambda self, node: None NodeVisitor.unknown_departure = lambda self, node: None except ImportError: pass try: # epydoc 3.0.1 + docutils 0.6 from docutils.nodes import Text from UserString import UserString if not isinstance(Text, UserString): def Text_get_data(s): try: return s._data except AttributeError: return s.astext() def Text_set_data(s, d): s.astext = lambda: d s._data = d Text.data = property(Text_get_data, Text_set_data) except ImportError: pass # -------------------------------------------------------------------- from epydoc.docwriter import dotgraph import re dotgraph._DOT_VERSION_RE = \ re.compile(r'dot (?:- Graphviz )version ([\d\.]+)') try: dotgraph.DotGraph.DEFAULT_HTML_IMAGE_FORMAT dotgraph.DotGraph.DEFAULT_HTML_IMAGE_FORMAT = 'png' except AttributeError: DotGraph_to_html = dotgraph.DotGraph.to_html DotGraph_run_dot = dotgraph.DotGraph._run_dot def to_html(self, image_file, image_url, center=True): if image_file[-4:] == '.gif': image_file = image_file[:-4] + '.png' if image_url[-4:] == '.gif': image_url = image_url[:-4] + '.png' return DotGraph_to_html(self, image_file, image_url) def _run_dot(self, *options): if '-Tgif' in options: opts = list(options) for i, o in enumerate(opts): if o == '-Tgif': opts[i] = '-Tpng' options = type(options)(opts) return DotGraph_run_dot(self, *options) dotgraph.DotGraph.to_html = to_html dotgraph.DotGraph._run_dot = _run_dot # -------------------------------------------------------------------- import re _SIGNATURE_RE = re.compile( # Class name (for builtin methods) r'^\s*((?P\w+)\.)?' + # The function name r'(?P\w+)' + # The parameters r'\(((?P(?:self|cls|mcs)),?)?(?P.*)\)' + # The return value (optional) r'(\s*(->)\s*(?P\S.*?))?'+ # The end marker r'\s*(\n|\s+(--|<=+>)\s+|$|\.\s+|\.\n)') from epydoc import docstringparser as dsp dsp._SIGNATURE_RE = _SIGNATURE_RE # -------------------------------------------------------------------- import sys, os import epydoc.cli def epydocify(): dirname = os.path.dirname(__file__) config = os.path.join(dirname, 'epydoc.cfg') sys.argv.append('--config=' + config) epydoc.cli.cli() if __name__ == '__main__': epydocify() # -------------------------------------------------------------------- ga-5-3/python/epydoc.cfg0000640005473000001440000001053711466436305014077 0ustar d3n000users[epydoc] # Epydoc section marker (required by ConfigParser) # The list of objects to document. Objects can be named using # dotted names, module filenames, or package directory names. # Alases for this option include "objects" and "values". modules: ga # The type of output that should be generated. Should be one # of: html, text, latex, dvi, ps, pdf. #output: html # The path to the output directory. May be relative or absolute. #target: docs/html/ # An integer indicating how verbose epydoc should be. The default # value is 0; negative values will supress warnings and errors; # positive values will give more verbose output. verbosity: 0 # A boolean value indicating that Epydoc should show a tracaback # in case of unexpected error. By default don't show tracebacks #debug: 0 # If True, don't try to use colors or cursor control when doing # textual output. The default False assumes a rich text prompt #simple-term: 0 ### Generation options # The default markup language for docstrings, for modules that do # not define __docformat__. Defaults to epytext. docformat: reStructuredText # Whether or not parsing should be used to examine objects. parse: yes # Whether or not introspection should be used to examine objects. introspect: yes # Don't examine in any way the modules whose dotted name match this # regular expression pattern. exclude: # Don't perform introspection on the modules whose dotted name match this # regular expression pattern. #exclude-introspect # Don't perform parsing on the modules whose dotted name match this # regular expression pattern. #exclude-parse # The format for showing inheritance objects. # It should be one of: 'grouped', 'listed', 'included'. inheritance: listed # Whether or not to inclue private variables. (Even if included, # private variables will be hidden by default.) private: yes # Whether or not to list each module's imports. imports: no # Whether or not to include syntax highlighted source code in # the output (HTML only). sourcecode: yes # Whether or not to include a a page with Epydoc log, containing # effective option at the time of generation and the reported logs. include-log: no ### Output options # The documented project's name. name: Global Arrays for Python # The documented project's URL. url: http://www.emsl.pnl.gov/docs/global/ # The CSS stylesheet for HTML output. Can be the name of a builtin # stylesheet, or the name of a file. css: white # HTML code for the project link in the navigation bar. If left # unspecified, the project link will be generated based on the # project's name and URL. #link: My Cool Project # The "top" page for the documentation. Can be a URL, the name # of a module or class, or one of the special names "trees.html", # "indices.html", or "help.html" #top: os.path # An alternative help file. The named file should contain the # body of an HTML file; navigation bars will be added to it. #help: my_helpfile.html # Whether or not to include a frames-based table of contents. frames: yes # Whether each class should be listed in its own section when # generating LaTeX or PDF output. separate-classes: no ### API linking options # Define a new API document. A new interpreted text role # will be created #external-api: epydoc # Use the records in this file to resolve objects in the API named NAME. #external-api-file: epydoc:api-objects.txt # Use this URL prefix to configure the string returned for external API. #external-api-root: epydoc:http://epydoc.sourceforge.net/api ### Graph options # The list of graph types that should be automatically included # in the output. Graphs are generated using the Graphviz "dot" # executable. Graph types include: "classtree", "callgraph", # "umlclasstree". Use "all" to include all graph types graph: classtree # The path to the Graphviz "dot" executable, used to generate # graphs. #dotpath: /usr/local/bin/dot # The name of one or more pstat files (generated by the profile # or hotshot module). These are used to generate call graphs. #pstat: profile.out # Specify the font used to generate Graphviz graphs. # (e.g., helvetica or times). graph-font: Helvetica # Specify the font size used to generate Graphviz graphs. graph-font-size: 10 ### Return value options # The condition upon which Epydoc should exit with a non-zero # exit status. Possible values are error, warning, docstring_warning #fail-on: error ga-5-3/python/tools/0000750005473000001440000000000012275260520013255 5ustar d3n000usersga-5-3/python/tools/gen_notimplemented.py0000640005473000001440000000547111613343424017514 0ustar d3n000usersimport inspect import sys import numpy as np from ga import gain empty = "empty" print ''' import sys import numpy as np cimport numpy as np ''' #failed_signatures = [] for name in dir(np): np_attr = getattr(np,name) gain_attr = getattr(gain,name,None) if gain_attr is None and inspect.isbuiltin(np_attr): sig = "%s()" % name doc = "" if np_attr.__doc__: doc = np_attr.__doc__ first_line = doc.splitlines()[0] if '(' in first_line and ')' in first_line: # see if the first line is valid python syntax maybe_sig = first_line.strip() sig_test = 'def %s: pass' % maybe_sig try: exec(sig_test) sig = maybe_sig except Exception, e: #failed_signatures.append(maybe_sig) pass print ''' def %s: """%s """ # BUILTIN raise NotImplementedError ''' % (sig, doc.strip().replace('"""',"'''")) elif gain_attr is None and inspect.isfunction(np_attr): args,varargs,keywords,defaults = inspect.getargspec(np_attr) newdefaults = [empty]*len(args) if defaults is not None: newdefaults[(len(args)-len(defaults)):] = defaults sig = "%s(" % name stuff = zip(args,newdefaults) def stringify(arg,default): if arg == "char": # 'char' is a cython keyword arg = "char_" if default is empty: return "%s" % arg elif default is None: return "%s=None" % (arg) elif default is sys.stdout: return "%s=sys.stdout" % (arg) elif default is int: return "%s=int" % (arg) elif default is float: return "%s=float" % (arg) elif default is np.float64: return "%s=np.float64" % (arg) elif isinstance(default,basestring): if '\n' in default: return "%s='\\n'" % (arg) else: return "%s='%s'" % (arg,default) elif inspect.isbuiltin(default): return "%s=%s" % (arg,default.__name__) else: return "%s=%s" % (arg,default) if len(stuff) > 0: for arg,default in stuff[:-1]: sig += stringify(arg,default) sig += ", " arg,default = stuff[-1] sig += stringify(arg,default) sig += ")" else: sig += ")" doc = "" if np_attr.__doc__: doc = np_attr.__doc__ print ''' def %s: """%s """ raise NotImplementedError ''' % (sig, doc.strip().replace('"""',"'''")) #for sig in failed_signatures: # print sig ga-5-3/python/tools/pxdgen.py0000750005473000001440000000226211535773525015135 0ustar d3n000users#!/usr/bin/env python """ Generate the gah.pxd source from the ga.h header. We basically remove the "extern" and the ";" since our ga.h header is one-function-per-line. We then add other cython things to the top. Usage: pxdgen.py path/to/ga.h > gah.pxd """ import sys if len(sys.argv) != 2: print 'incorrect number of arguments' print 'usage: pxdgen.py > ' sys.exit(len(sys.argv)) # print headers print '''from libc.stdio cimport FILE from libc.stdint cimport int64_t cdef extern from "typesf2c.h": ctypedef int Integer ctypedef float Real ctypedef double DoublePrecision ctypedef struct DoubleComplex: DoublePrecision real DoublePrecision imag ctypedef struct SingleComplex: Real real Real imag cdef extern from "ga.h": ctypedef Integer ga_nbhdl_t ''' for line in open(sys.argv[1]): line = line.strip() if 'extern' in line and '{' in line: continue elif 'extern' in line: line = line.replace('extern','') line = line.replace(';','') if '(void)' in line: line = line.replace('(void)', '()') line = line.strip() print " %s" % line ga-5-3/python/benchmarks/0000750005473000001440000000000012275260525014237 5ustar d3n000usersga-5-3/python/benchmarks/from_distnumpy/0000750005473000001440000000000012275260525017316 5ustar d3n000usersga-5-3/python/benchmarks/from_distnumpy/nbody.py0000640005473000001440000000665111613721612021006 0ustar d3n000users#import numpy as np import sys import time d = int(sys.argv[1]) #Distributed n = int(sys.argv[2]) #Number of bodies k = int(sys.argv[3]) #Number of iterations if d: import ga.gain as np print "GAiN" else: import numpy as np print "NumPy" G = 1 #Gravitational constant dT = 0.01 #Time increment #M = np.empty((n,1)) #np.ufunc_random(M,M) M = np.random.random_sample((n,1)) #MT = np.empty((1,n)) #np.ufunc_random(MT,MT) MT = np.random.random_sample((1,n)) #Px = np.empty((n,1)) #np.ufunc_random(Px,Px) Px = np.random.random_sample((n,1)) #Py = np.empty((n,1)) #np.ufunc_random(Py,Py) Py = np.random.random_sample((n,1)) #Pz = np.empty((n,1)) #np.ufunc_random(Pz,Pz) Pz = np.random.random_sample((n,1)) #PxT= np.empty((1,n)) #np.ufunc_random(PxT,PxT) PxT = np.random.random_sample((1,n)) #PyT= np.empty((1,n)) #np.ufunc_random(PyT,PyT) PyT = np.random.random_sample((1,n)) #PzT= np.empty((1,n)) #np.ufunc_random(PzT,PzT) PzT = np.random.random_sample((1,n)) #Vx = np.empty((n,1)) #np.ufunc_random(Vx,Vx) Vx = np.random.random_sample((n,1)) #Vy = np.empty((n,1)) #np.ufunc_random(Vy,Vy) Vy = np.random.random_sample((n,1)) #Vz = np.empty((n,1)) #np.ufunc_random(Vz,Vz) Vz = np.random.random_sample((n,1)) OnesCol = np.zeros((n,1), dtype=float)+1.0 OnesRow = np.zeros((1,n), dtype=float)+1.0 #Identity= array(diag([1]*n), dtype=double) #np.timer_reset() #np.evalflush() stime = time.time() for i in xrange(k): #distance between all pairs of objects Fx = np.dot(OnesCol, PxT) - np.dot(Px, OnesRow) Fy = np.dot(OnesCol, PyT) - np.dot(Py, OnesRow) Fz = np.dot(OnesCol, PzT) - np.dot(Pz, OnesRow) Dsq = Fx * Fx Dsq += Fy * Fy Dsq += Fz * Fz #Dsq += Identity D = np.sqrt(Dsq) #mutual forces between all pairs of objects F = np.dot(M, MT) F *= G F /= Dsq del Dsq #F = F - diag(diag(F))#set 'self attraction' to 0 Fx /= D Fx *= F Fy /= D Fy *= F Fz /= D Fz *= F del D del F #net force on each body Fnet_x = np.add.reduce(Fx,1) Fnet_y = np.add.reduce(Fy,1) Fnet_z = np.add.reduce(Fz,1) Fnet_x = Fnet_x[:,np.newaxis] Fnet_y = Fnet_y[:,np.newaxis] Fnet_z = Fnet_z[:,np.newaxis] Fnet_x *= dT Fnet_y *= dT Fnet_z *= dT #change in velocity: Vx += Fnet_x / M Vy += Fnet_y / M Vz += Fnet_z / M del Fnet_x del Fnet_y del Fnet_z #change in position Px += Vx * dT Py += Vy * dT Pz += Vz * dT #np.evalflush() print 'nbody with #bodies: ', n,', iter: ', i+1, 'in sec: ', time.time() - stime, if d: print " (Dist) notes: %s"%sys.argv[4] else: print " (Non-Dist) notes: %s"%sys.argv[4] """Paper version: #distance between all pairs of objects Fx = dot(OnesCol, PxT) - dot(Px, OnesRow) Fy = dot(OnesCol, PyT) - dot(Py, OnesRow) Fz = dot(OnesCol, PzT) - dot(Pz, OnesRow) Dsq = Fx * Fx + Fy * Fy + Fx * Fz #+ Identity D = sqrt(Dsq) #mutual forces between all pairs of objects F = G * dot(M, MT) / Dsq #F = F - diag(diag(F))#set 'self attraction' to 0 Fx = (Fx / D) * F Fy = (Fy / D) * F Fz = (Fz / D) * F #net force on each body Fnet_x = add.reduce(Fx,1) Fnet_x = add.reduce(Fy,1) Fnet_x = add.reduce(Fz,1) #change in velocity: Vx += Fnet_x[:,newaxis] * dT / M Vy += Fnet_y[:,newaxis] * dT / M Vz += Fnet_z[:,newaxis] * dT / M #change in position Px += Vx * dT Py += Vy * dT Pz += Vz * dT """ ga-5-3/python/benchmarks/from_distnumpy/jacobi.py0000640005473000001440000000354611613644352021127 0ustar d3n000usersimport time import sys #import numpy as np import ga.gain as np from ga.gain import me def jacobi(A, B, tol=0.005, forcedIter=0): '''itteratively solving for matrix A with solution vector B tol = tolerance for dh/h init_val = array of initial values to use in the solver ''' h = np.zeros(np.shape(B), float) dmax = 1.0 n = 0 tmp0 = np.empty(np.shape(A), float) tmp1 = np.empty(np.shape(B), float) AD = np.diagonal(A) #np.timer_reset() #np.evalflush() t1 = time.time() while (forcedIter and forcedIter > n) or \ (forcedIter == 0 and dmax > tol): n += 1 np.multiply(A,h,tmp0) np.add.reduce(tmp0,1,out=tmp1) tmp2 = AD np.subtract(B, tmp1, tmp1) np.divide(tmp1, tmp2, tmp1) hnew = h + tmp1 np.subtract(hnew,h,tmp2) np.divide(tmp2,h,tmp1) np.absolute(tmp1,tmp1) dmax = np.maximum.reduce(tmp1) h = hnew print dmax #np.evalflush() t1 = time.time() - t1 print 'Iter: ', n, ' size: ', np.shape(B),' time: ', t1, print "(Dist) notes: %s"%sys.argv[4] #if A.dist(): # print "(Dist) notes: %s"%sys.argv[4] #else: # print "(Non-Dist) notes: %s"%sys.argv[4] return h def main(): d = int(sys.argv[1]) size = int(sys.argv[2]) iter = int(sys.argv[3]) #A = array([[4, -1, -1, 0], [-1, 4, 0, -1], [-1, 0, 4, -1], [0, -1, -1, 4]], float, dist=d) #B = array([1,2,0,1], float, dist=d) #A = np.zeros([size,size], dtype=float) #np.ufunc_random(A,A) A = np.random.random_sample([size,size]) #B = np.zeros([size], dtype=float) #np.ufunc_random(B,B) B = np.random.random_sample([size]) C = jacobi(A, B, 0.10, forcedIter=iter) if __name__ == '__main__': #import cProfile #cProfile.run("main()", "profile.%s.prof" % str(me())) main() ga-5-3/python/benchmarks/from_distnumpy/MonteCarlo.py0000750005473000001440000000207611613721612021735 0ustar d3n000usersimport time #import numpy as np import ga.gain as np from ga.gain import me import random import sys def MC_int(c, s): x = np.empty([s], dtype=np.double) y = np.empty([s], dtype=np.double) sum=0.0 #np.timer_reset() #np.evalflush() start=time.time() for i in range(c): #np.ufunc_random(x,x) #np.ufunc_random(y,y) x = np.random.random_sample([s]) y = np.random.random_sample([s]) np.square(x,x) np.square(y,y) np.add(x,y,x) z = np.less_equal(x, 1) sum += np.add.reduce(z)*4.0/s sum = sum / c #np.evalflush() stop=time.time() print 'Pi: ', sum, ' with ', s,' samples in sec: ', stop-start, print "(Dist) notes: %s"%sys.argv[3] #if dist: # print "(Dist) notes: %s"%sys.argv[4] #else: # print "(Non-Dist) notes: %s"%sys.argv[4] def main(): #D=int(sys.argv[1]) N=int(sys.argv[1]) C=int(sys.argv[2]) MC_int(C, N) if __name__ == '__main__': #import cProfile #cProfile.run("main()", "profile.%s.prof" % str(me())) main() ga-5-3/python/benchmarks/laplace.py0000640005473000001440000001756511613644352016230 0ustar d3n000users#!/usr/bin/env python """ This script compares different ways of implementing an iterative procedure to solve Laplace's equation. These provide a general guideline to using Python for high-performance computing and also provide a simple means to compare the computational time taken by the different approaches. The script compares functions implemented in pure Python, Numeric, weave.blitz, weave.inline, fortran (via f2py) and Pyrex. The function main(), additionally accelerates the pure Python version using Psyco and provides some numbers on how well that works. To compare all the options you need to have Numeric, weave, f2py, Pyrex and Psyco installed. If Psyco is not installed the script will print a warning but will perform all other tests. The fortran and pyrex modules are compiled using the setup.py script that is provided with this file. You can build them like so: python setup.py build_ext --inplace Author: Prabhu Ramachandran License: BSD Last modified: Sep. 18, 2004 """ #import numpy import ga import ga.gain as numpy import sys, time class PrintZero(object): def __init__(self): self.me = ga.nodeid() self.stdout = sys.stdout def write(self, something): if not self.me: self.stdout.write(something) def flush(self): if not self.me: self.stdout.flush() sys.stdout = PrintZero() def timer(): #return time.clock() return time.time() class Grid: """A simple grid class that stores the details and solution of the computational grid.""" def __init__(self, nx=10, ny=10, xmin=0.0, xmax=1.0, ymin=0.0, ymax=1.0): self.xmin, self.xmax, self.ymin, self.ymax = xmin, xmax, ymin, ymax self.dx = float(xmax-xmin)/(nx-1) self.dy = float(ymax-ymin)/(ny-1) self.u = numpy.zeros((nx, ny), 'd') # used to compute the change in solution in some of the methods. self.old_u = self.u.copy() def setBC(self, l, r, b, t): """Sets the boundary condition given the left, right, bottom and top values (or arrays)""" self.u[0, :] = l self.u[-1, :] = r self.u[:, 0] = b self.u[:,-1] = t self.old_u = self.u.copy() def setBCFunc(self, func): """Sets the BC given a function of two variables.""" xmin, ymin = self.xmin, self.ymin xmax, ymax = self.xmax, self.ymax x = numpy.arange(xmin, xmax + self.dx*0.5, self.dx) y = numpy.arange(ymin, ymax + self.dy*0.5, self.dy) self.u[0 ,:] = func(xmin,y) self.u[-1,:] = func(xmax,y) self.u[:, 0] = func(x,ymin) self.u[:,-1] = func(x,ymax) def computeError(self): """Computes absolute error using an L2 norm for the solution. This requires that self.u and self.old_u must be appropriately setup.""" # use flat v = (self.u - self.old_u).flat return numpy.sqrt(numpy.dot(v,v)) # don't use flat #v = (self.u - self.old_u) #return (v*v).sum() class LaplaceSolver: """A simple Laplacian solver that can use different schemes to solve the problem.""" def __init__(self, grid, stepper='numeric'): self.grid = grid self.setTimeStepper(stepper) def slowTimeStep(self, dt=0.0): """Takes a time step using straight forward Python loops.""" g = self.grid nx, ny = g.u.shape dx2, dy2 = g.dx**2, g.dy**2 dnr_inv = 0.5/(dx2 + dy2) # small change here so we can see gain vs numpy slow #u = g.u u = g.u.get() err = 0.0 for i in range(1, nx-1): for j in range(1, ny-1): tmp = u[i,j] u[i,j] = ((u[i-1, j] + u[i+1, j])*dy2 + (u[i, j-1] + u[i, j+1])*dx2)*dnr_inv diff = u[i,j] - tmp err += diff*diff return numpy.sqrt(err) def numericTimeStep(self, dt=0.0): """Takes a time step using a numeric expressions.""" g = self.grid dx2, dy2 = g.dx**2, g.dy**2 dnr_inv = 0.5/(dx2 + dy2) u = g.u g.old_u = u.copy() # The actual iteration u[1:-1, 1:-1] = ((u[0:-2, 1:-1] + u[2:, 1:-1])*dy2 + (u[1:-1,0:-2] + u[1:-1, 2:])*dx2)*dnr_inv ## first op, assign directly to result #numpy.multiply(g.old_u[0:-2, 1:-1], dy2, u[1:-1, 1:-1]) ## creates a temporary array #tmp = g.old_u[2:, 1:-1]*dy2 ## accumulate temporary array into result #numpy.add(tmp, u[1:-1, 1:-1], u[1:-1, 1:-1]) ## does NOT create a temporary array since we have one already #numpy.multiply(g.old_u[1:-1,0:-2], dx2, tmp) ## accumulate temporary array into result #numpy.add(tmp, u[1:-1, 1:-1], u[1:-1, 1:-1]) ## does NOT create a temporary array since we have one already #numpy.multiply(g.old_u[1:-1, 2:], dx2, tmp) ## accumulate temporary array into result #numpy.add(tmp, u[1:-1, 1:-1], u[1:-1, 1:-1]) ## last operation, replace result #numpy.multiply(dnr_inv, u[1:-1, 1:-1], u[1:-1, 1:-1]) return g.computeError() def setTimeStepper(self, stepper='numeric'): """Sets the time step scheme to be used while solving given a string which should be one of ['slow', 'numeric'].""" if stepper == 'slow': self.timeStep = self.slowTimeStep elif stepper == 'numeric': self.timeStep = self.numericTimeStep else: self.timeStep = self.numericTimeStep def solve(self, n_iter=0, eps=1.0e-16): """Solves the equation given an error precision -- eps. If n_iter=0 the solving is stopped only on the eps condition. If n_iter is finite then solution stops in that many iterations or when the error is less than eps whichever is earlier. Returns the error if the loop breaks on the n_iter condition and returns the iterations if the loop breaks on the error condition.""" err = self.timeStep() count = 1 while err > eps: if n_iter and count >= n_iter: return err err = self.timeStep() count = count + 1 print count return count def BC(x, y): """Used to set the boundary condition for the grid of points. Change this as you feel fit.""" return (x**2 - y**2) def test(nmin=5, nmax=30, dn=5, eps=1.0e-16, n_iter=0, stepper='numeric'): iters = [] n_grd = numpy.arange(nmin, nmax, dn) times = [] for i in n_grd: g = Grid(nx=i, ny=i) g.setBCFunc(BC) s = LaplaceSolver(g, stepper) t1 = timer() iters.append(s.solve(n_iter=n_iter, eps=eps)) dt = timer() - t1 times.append(dt) print "Solution for nx = ny = %d, took %f seconds"%(i, dt) return (n_grd**2, iters, times) def time_test(nx=500, ny=500, eps=1.0e-16, n_iter=100, stepper='numeric'): g = Grid(nx, ny) g.setBCFunc(BC) s = LaplaceSolver(g, stepper) t = timer() s.solve(n_iter=n_iter, eps=eps) return timer() - t def main(n=1000, n_iter=100): print "Doing %d iterations on a %dx%d grid"%(n_iter, n, n) i = 'numeric' print i, sys.stdout.flush() print "took", time_test(n, n, stepper=i, n_iter=n_iter), "seconds" #print "slow (1 iteration)", #sys.stdout.flush() #s = time_test(n, n, stepper='slow', n_iter=1) #print "took", s, "seconds" #print "%d iterations should take about %f seconds"%(n_iter, s*n_iter) if __name__ == "__main__": if False: import cProfile me = ga.nodeid() cProfile.run("main()", "profile_%s.prof" % me) else: main() #if me == 0: # ga.print_stats() ga-5-3/python/benchmarks/distmap/0000750005473000001440000000000012275260525015700 5ustar d3n000usersga-5-3/python/benchmarks/distmap/distmap.py0000640005473000001440000001012111613607366017712 0ustar d3n000usersnp = None def set_np(module): global np np = module # generate nPt random points within the grid def generate_random_points(shape, nPt): pt = None if False: pt = [] for k in range(nPt): x = shape[0] * np.random.random_sample() y = shape[1] * np.random.random_sample() pt.append((x, y)) else: pt = np.random.random_sample((nPt,2)) pt[:,0] *= shape[0] pt[:,1] *= shape[1] return pt def dist((x, y), (x0, y0), expo): """Returns the Euclidean distance between two (2D) points.""" return ((x-x0)**expo + (y-y0)**expo)**(1.0/expo) def dist_array(shape, pt, expo): """Returns an array whose elements are the distance (in units of rows and columns) to a given point (x0, y0).""" x0 = pt[0] y0 = pt[1] f = lambda x, y: dist((x, y), (x0, y0), expo) return np.fromfunction(f, shape, dtype=np.float32) def distmap(shape, nPt, expo): pt = generate_random_points(shape, nPt) # distMin[i,j] is the distance from pixel (i,j) to the closest 'pt'. distMin = dist_array(shape, pt[0], expo) for i in range(1, nPt): distMin = np.minimum(dist_array(shape, pt[i], expo), distMin) pxlMin = 0 pxlMax = np.maximum.reduce(distMin) # scale and offset distances to lie between 0 and 1 distMinScaled = (distMin - pxlMin) / (pxlMax - pxlMin) # (gray) pixel values lie between 0 and 255 pxls = 255 * distMinScaled return pxls def main(): # python libs from getopt import getopt import sys # 3rd party libs #from PIL import Image import Image # command-line options nPt = 8 # default expo = 2 # default distance exponent (Euclidean) nGrid = 512 # image size (in each dimension) seed = 0 # default seed useGain = False help = False imgOutput = True rawOutput = False img_name = "distmap.png" raw_name = "distmap.dat" usage = """ distmap.py [options] -h help (prints this message) -g use gain instead of numpy -e expo set exponent (default: 2 (Euclidean)) -o out output filename (default: distmap.png) -r raw raw output filename (default: distmap.dat) -p points number of points (default: 8) -s seed for random number generation -w width image size e.g. Width X Width square -d whether to enable profiling """ (optsvals, args) = getopt(sys.argv[1:], 'hge:o:r:p:s:w:') for (opt, val) in optsvals: if opt == '-h': help = True elif opt == '-g': useGain = True elif opt == '-e': expo = float(val) elif opt == '-o': img_name = str(val) imgOutput = True elif opt == '-r': raw_name = str(val) rawOutput = True elif opt == '-p': nPt = int(val) elif opt == '-s': seed = int(val) elif opt == '-w': nGrid = int(val) if useGain: import ga.gain as np from ga.gain import me set_np(np) if help: if not me(): print usage sys.exit() else: import numpy as np set_np(np) if help: print usage sys.exit() shape = (nGrid,nGrid) # seed the random number generator np.random.seed(seed) # generate the distmap pxls = distmap(shape, nPt, expo) # write pxls to file if (imgOutput or rawOutput) and useGain: if me() == 0: pxls = pxls.get() else: return if imgOutput: im_r = Image.frombuffer("F", pxls.shape, pxls, "raw", "F", 0, 1) im_r = im_r.convert("L") im_r.save(img_name) if rawOutput: f = open(raw_name, "wb") f.write(buffer(pxls.astype(np.float32))) f.close() if __name__ == '__main__': profile = False if profile: import cProfile if useGain: cProfile.run("main()", "distmap.prof" + str(me())) else: cProfile.run("main()", "distmap.prof") else: main() ga-5-3/python/ga4py/0000750005473000001440000000000012275260600013140 5ustar d3n000usersga-5-3/python/ga4py/__init__.py0000640005473000001440000000000011647125636015253 0ustar d3n000usersga-5-3/python/ga4py/ga.c0000640005473000001440001263121412275260601013707 0ustar d3n000users/* Generated by Cython 0.19.2 on Fri Feb 7 14:43:08 2014 */ #define PY_SSIZE_T_CLEAN #ifndef CYTHON_USE_PYLONG_INTERNALS #ifdef PYLONG_BITS_IN_DIGIT #define CYTHON_USE_PYLONG_INTERNALS 0 #else #include "pyconfig.h" #ifdef PYLONG_BITS_IN_DIGIT #define CYTHON_USE_PYLONG_INTERNALS 1 #else #define CYTHON_USE_PYLONG_INTERNALS 0 #endif #endif #endif #include "Python.h" #ifndef Py_PYTHON_H #error Python headers needed to compile C extensions, please install development version of Python. #elif PY_VERSION_HEX < 0x02040000 #error Cython requires Python 2.4+. #else #include /* For offsetof */ #ifndef offsetof #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) #endif #if !defined(WIN32) && !defined(MS_WINDOWS) #ifndef __stdcall #define __stdcall #endif #ifndef __cdecl #define __cdecl #endif #ifndef __fastcall #define __fastcall #endif #endif #ifndef DL_IMPORT #define DL_IMPORT(t) t #endif #ifndef DL_EXPORT #define DL_EXPORT(t) t #endif #ifndef PY_LONG_LONG #define PY_LONG_LONG LONG_LONG #endif #ifndef Py_HUGE_VAL #define Py_HUGE_VAL HUGE_VAL #endif #ifdef PYPY_VERSION #define CYTHON_COMPILING_IN_PYPY 1 #define CYTHON_COMPILING_IN_CPYTHON 0 #else #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 1 #endif #if PY_VERSION_HEX < 0x02050000 typedef int Py_ssize_t; #define PY_SSIZE_T_MAX INT_MAX #define PY_SSIZE_T_MIN INT_MIN #define PY_FORMAT_SIZE_T "" #define CYTHON_FORMAT_SSIZE_T "" #define PyInt_FromSsize_t(z) PyInt_FromLong(z) #define PyInt_AsSsize_t(o) __Pyx_PyInt_AsInt(o) #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ (PyErr_Format(PyExc_TypeError, \ "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ (PyObject*)0)) #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ !PyComplex_Check(o)) #define PyIndex_Check __Pyx_PyIndex_Check #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) #define __PYX_BUILD_PY_SSIZE_T "i" #else #define __PYX_BUILD_PY_SSIZE_T "n" #define CYTHON_FORMAT_SSIZE_T "z" #define __Pyx_PyIndex_Check PyIndex_Check #endif #if PY_VERSION_HEX < 0x02060000 #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) #define PyVarObject_HEAD_INIT(type, size) \ PyObject_HEAD_INIT(type) size, #define PyType_Modified(t) typedef struct { void *buf; PyObject *obj; Py_ssize_t len; Py_ssize_t itemsize; int readonly; int ndim; char *format; Py_ssize_t *shape; Py_ssize_t *strides; Py_ssize_t *suboffsets; void *internal; } Py_buffer; #define PyBUF_SIMPLE 0 #define PyBUF_WRITABLE 0x0001 #define PyBUF_FORMAT 0x0004 #define PyBUF_ND 0x0008 #define PyBUF_STRIDES (0x0010 | PyBUF_ND) #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); typedef void (*releasebufferproc)(PyObject *, Py_buffer *); #endif #if PY_MAJOR_VERSION < 3 #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else #define __Pyx_BUILTIN_MODULE_NAME "builtins" #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #endif #if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6 #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") #endif #if PY_MAJOR_VERSION >= 3 #define Py_TPFLAGS_CHECKTYPES 0 #define Py_TPFLAGS_HAVE_INDEX 0 #endif #if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) #define Py_TPFLAGS_HAVE_NEWBUFFER 0 #endif #if PY_VERSION_HEX < 0x02060000 #define Py_TPFLAGS_HAVE_VERSION_TAG 0 #endif #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) #define CYTHON_PEP393_ENABLED 1 #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ 0 : _PyUnicode_Ready((PyObject *)(op))) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) #else #define CYTHON_PEP393_ENABLED 0 #define __Pyx_PyUnicode_READY(op) (0) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) #define __Pyx_PyUnicode_READ(k, d, i) ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i])) #endif #if PY_MAJOR_VERSION >= 3 #define PyBaseString_Type PyUnicode_Type #define PyStringObject PyUnicodeObject #define PyString_Type PyUnicode_Type #define PyString_Check PyUnicode_Check #define PyString_CheckExact PyUnicode_CheckExact #endif #if PY_VERSION_HEX < 0x02060000 #define PyBytesObject PyStringObject #define PyBytes_Type PyString_Type #define PyBytes_Check PyString_Check #define PyBytes_CheckExact PyString_CheckExact #define PyBytes_FromString PyString_FromString #define PyBytes_FromStringAndSize PyString_FromStringAndSize #define PyBytes_FromFormat PyString_FromFormat #define PyBytes_DecodeEscape PyString_DecodeEscape #define PyBytes_AsString PyString_AsString #define PyBytes_AsStringAndSize PyString_AsStringAndSize #define PyBytes_Size PyString_Size #define PyBytes_AS_STRING PyString_AS_STRING #define PyBytes_GET_SIZE PyString_GET_SIZE #define PyBytes_Repr PyString_Repr #define PyBytes_Concat PyString_Concat #define PyBytes_ConcatAndDel PyString_ConcatAndDel #endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) #else #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ PyString_Check(obj) || PyUnicode_Check(obj)) #define __Pyx_PyBaseString_CheckExact(obj) (Py_TYPE(obj) == &PyBaseString_Type) #endif #if PY_VERSION_HEX < 0x02060000 #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) #endif #ifndef PySet_CheckExact #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) #endif #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) #if PY_MAJOR_VERSION >= 3 #define PyIntObject PyLongObject #define PyInt_Type PyLong_Type #define PyInt_Check(op) PyLong_Check(op) #define PyInt_CheckExact(op) PyLong_CheckExact(op) #define PyInt_FromString PyLong_FromString #define PyInt_FromUnicode PyLong_FromUnicode #define PyInt_FromLong PyLong_FromLong #define PyInt_FromSize_t PyLong_FromSize_t #define PyInt_FromSsize_t PyLong_FromSsize_t #define PyInt_AsLong PyLong_AsLong #define PyInt_AS_LONG PyLong_AS_LONG #define PyInt_AsSsize_t PyLong_AsSsize_t #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask #endif #if PY_MAJOR_VERSION >= 3 #define PyBoolObject PyLongObject #endif #if PY_VERSION_HEX < 0x03020000 typedef long Py_hash_t; #define __Pyx_PyInt_FromHash_t PyInt_FromLong #define __Pyx_PyInt_AsHash_t PyInt_AsLong #else #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t #endif #if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) #else #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) #endif #if PY_MAJOR_VERSION >= 3 #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) #endif #if PY_VERSION_HEX < 0x02050000 #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) #else #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) #endif #if PY_VERSION_HEX < 0x02050000 #define __Pyx_NAMESTR(n) ((char *)(n)) #define __Pyx_DOCSTR(n) ((char *)(n)) #else #define __Pyx_NAMESTR(n) (n) #define __Pyx_DOCSTR(n) (n) #endif #ifndef CYTHON_INLINE #if defined(__GNUC__) #define CYTHON_INLINE __inline__ #elif defined(_MSC_VER) #define CYTHON_INLINE __inline #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CYTHON_INLINE inline #else #define CYTHON_INLINE #endif #endif #ifndef CYTHON_RESTRICT #if defined(__GNUC__) #define CYTHON_RESTRICT __restrict__ #elif defined(_MSC_VER) && _MSC_VER >= 1400 #define CYTHON_RESTRICT __restrict #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CYTHON_RESTRICT restrict #else #define CYTHON_RESTRICT #endif #endif #ifdef NAN #define __PYX_NAN() ((float) NAN) #else static CYTHON_INLINE float __PYX_NAN() { /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is a quiet NaN. */ float value; memset(&value, 0xFF, sizeof(value)); return value; } #endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) #else #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) #endif #ifndef __PYX_EXTERN_C #ifdef __cplusplus #define __PYX_EXTERN_C extern "C" #else #define __PYX_EXTERN_C extern #endif #endif #if defined(WIN32) || defined(MS_WINDOWS) #define _USE_MATH_DEFINES #endif #include #define __PYX_HAVE__ga4py__ga #define __PYX_HAVE_API__ga4py__ga #include "string.h" #include "stdlib.h" #include "stdio.h" #include "stdint.h" #include "typesf2c.h" #include "ga.h" #include "numpy/arrayobject.h" #include "numpy/ufuncobject.h" #ifdef _OPENMP #include #endif /* _OPENMP */ #ifdef PYREX_WITHOUT_ASSERTIONS #define CYTHON_WITHOUT_ASSERTIONS #endif #ifndef CYTHON_UNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) # define CYTHON_UNUSED __attribute__ ((__unused__)) # else # define CYTHON_UNUSED # endif # elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) # define CYTHON_UNUSED __attribute__ ((__unused__)) # else # define CYTHON_UNUSED # endif #endif typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ #define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 #define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 #define __PYX_DEFAULT_STRING_ENCODING "" #define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString #define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); #define __Pyx_PyBytes_FromString PyBytes_FromString #define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); #if PY_MAJOR_VERSION < 3 #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize #else #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize #endif #define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) #define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) #define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) #define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) #if PY_MAJOR_VERSION < 3 static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { const Py_UNICODE *u_end = u; while (*u_end++) ; return u_end - u - 1; } #else #define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen #endif #define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) #define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode #define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode #define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) #define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*); #if CYTHON_COMPILING_IN_CPYTHON #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) #else #define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) #endif #define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII static int __Pyx_sys_getdefaultencoding_not_ascii; static int __Pyx_init_sys_getdefaultencoding_params() { PyObject* sys = NULL; PyObject* default_encoding = NULL; PyObject* ascii_chars_u = NULL; PyObject* ascii_chars_b = NULL; sys = PyImport_ImportModule("sys"); if (sys == NULL) goto bad; default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); if (default_encoding == NULL) goto bad; if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { __Pyx_sys_getdefaultencoding_not_ascii = 0; } else { const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); char ascii_chars[128]; int c; for (c = 0; c < 128; c++) { ascii_chars[c] = c; } __Pyx_sys_getdefaultencoding_not_ascii = 1; ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); if (ascii_chars_u == NULL) goto bad; ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { PyErr_Format( PyExc_ValueError, "This module compiled with c_string_encoding=ascii, but default encoding '%s' is not a superset of ascii.", default_encoding_c); goto bad; } } Py_XDECREF(sys); Py_XDECREF(default_encoding); Py_XDECREF(ascii_chars_u); Py_XDECREF(ascii_chars_b); return 0; bad: Py_XDECREF(sys); Py_XDECREF(default_encoding); Py_XDECREF(ascii_chars_u); Py_XDECREF(ascii_chars_b); return -1; } #endif #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) #else #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT static char* __PYX_DEFAULT_STRING_ENCODING; static int __Pyx_init_sys_getdefaultencoding_params() { PyObject* sys = NULL; PyObject* default_encoding = NULL; char* default_encoding_c; sys = PyImport_ImportModule("sys"); if (sys == NULL) goto bad; default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); if (default_encoding == NULL) goto bad; default_encoding_c = PyBytes_AS_STRING(default_encoding); __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); Py_DECREF(sys); Py_DECREF(default_encoding); return 0; bad: Py_XDECREF(sys); Py_XDECREF(default_encoding); return -1; } #endif #endif #ifdef __GNUC__ /* Test for GCC > 2.95 */ #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #else /* __GNUC__ > 2 ... */ #define likely(x) (x) #define unlikely(x) (x) #endif /* __GNUC__ > 2 ... */ #else /* __GNUC__ */ #define likely(x) (x) #define unlikely(x) (x) #endif /* __GNUC__ */ static PyObject *__pyx_m; static PyObject *__pyx_d; static PyObject *__pyx_b; static PyObject *__pyx_empty_tuple; static PyObject *__pyx_empty_bytes; static int __pyx_lineno; static int __pyx_clineno = 0; static const char * __pyx_cfilenm= __FILE__; static const char *__pyx_filename; #if !defined(CYTHON_CCOMPLEX) #if defined(__cplusplus) #define CYTHON_CCOMPLEX 1 #elif defined(_Complex_I) #define CYTHON_CCOMPLEX 1 #else #define CYTHON_CCOMPLEX 0 #endif #endif #if CYTHON_CCOMPLEX #ifdef __cplusplus #include #else #include #endif #endif #if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) #undef _Complex_I #define _Complex_I 1.0fj #endif static const char *__pyx_f[] = { "ga.pyx", "numpy.pxd", "type.pxd", }; #define IS_UNSIGNED(type) (((type) -1) > 0) struct __Pyx_StructField_; #define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) typedef struct { const char* name; /* for error messages only */ struct __Pyx_StructField_* fields; size_t size; /* sizeof(type) */ size_t arraysize[8]; /* length of array in each dimension */ int ndim; char typegroup; /* _R_eal, _C_omplex, Signed _I_nt, _U_nsigned int, _S_truct, _P_ointer, _O_bject, c_H_ar */ char is_unsigned; int flags; } __Pyx_TypeInfo; typedef struct __Pyx_StructField_ { __Pyx_TypeInfo* type; const char* name; size_t offset; } __Pyx_StructField; typedef struct { __Pyx_StructField* field; size_t parent_offset; } __Pyx_BufFmt_StackElem; typedef struct { __Pyx_StructField root; __Pyx_BufFmt_StackElem* head; size_t fmt_offset; size_t new_count, enc_count; size_t struct_alignment; int is_complex; char enc_type; char new_packmode; char enc_packmode; char is_valid_array; } __Pyx_BufFmt_Context; /* "numpy.pxd":723 * # in Cython to enable them only on the right systems. * * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t */ typedef npy_int8 __pyx_t_5numpy_int8_t; /* "numpy.pxd":724 * * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t */ typedef npy_int16 __pyx_t_5numpy_int16_t; /* "numpy.pxd":725 * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< * ctypedef npy_int64 int64_t * #ctypedef npy_int96 int96_t */ typedef npy_int32 __pyx_t_5numpy_int32_t; /* "numpy.pxd":726 * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< * #ctypedef npy_int96 int96_t * #ctypedef npy_int128 int128_t */ typedef npy_int64 __pyx_t_5numpy_int64_t; /* "numpy.pxd":730 * #ctypedef npy_int128 int128_t * * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t */ typedef npy_uint8 __pyx_t_5numpy_uint8_t; /* "numpy.pxd":731 * * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t */ typedef npy_uint16 __pyx_t_5numpy_uint16_t; /* "numpy.pxd":732 * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< * ctypedef npy_uint64 uint64_t * #ctypedef npy_uint96 uint96_t */ typedef npy_uint32 __pyx_t_5numpy_uint32_t; /* "numpy.pxd":733 * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< * #ctypedef npy_uint96 uint96_t * #ctypedef npy_uint128 uint128_t */ typedef npy_uint64 __pyx_t_5numpy_uint64_t; /* "numpy.pxd":737 * #ctypedef npy_uint128 uint128_t * * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< * ctypedef npy_float64 float64_t * #ctypedef npy_float80 float80_t */ typedef npy_float32 __pyx_t_5numpy_float32_t; /* "numpy.pxd":738 * * ctypedef npy_float32 float32_t * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< * #ctypedef npy_float80 float80_t * #ctypedef npy_float128 float128_t */ typedef npy_float64 __pyx_t_5numpy_float64_t; /* "numpy.pxd":747 * # The int types are mapped a bit surprising -- * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t # <<<<<<<<<<<<<< * ctypedef npy_longlong long_t * ctypedef npy_longlong longlong_t */ typedef npy_long __pyx_t_5numpy_int_t; /* "numpy.pxd":748 * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< * ctypedef npy_longlong longlong_t * */ typedef npy_longlong __pyx_t_5numpy_long_t; /* "numpy.pxd":749 * ctypedef npy_long int_t * ctypedef npy_longlong long_t * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< * * ctypedef npy_ulong uint_t */ typedef npy_longlong __pyx_t_5numpy_longlong_t; /* "numpy.pxd":751 * ctypedef npy_longlong longlong_t * * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< * ctypedef npy_ulonglong ulong_t * ctypedef npy_ulonglong ulonglong_t */ typedef npy_ulong __pyx_t_5numpy_uint_t; /* "numpy.pxd":752 * * ctypedef npy_ulong uint_t * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< * ctypedef npy_ulonglong ulonglong_t * */ typedef npy_ulonglong __pyx_t_5numpy_ulong_t; /* "numpy.pxd":753 * ctypedef npy_ulong uint_t * ctypedef npy_ulonglong ulong_t * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< * * ctypedef npy_intp intp_t */ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; /* "numpy.pxd":755 * ctypedef npy_ulonglong ulonglong_t * * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< * ctypedef npy_uintp uintp_t * */ typedef npy_intp __pyx_t_5numpy_intp_t; /* "numpy.pxd":756 * * ctypedef npy_intp intp_t * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< * * ctypedef npy_double float_t */ typedef npy_uintp __pyx_t_5numpy_uintp_t; /* "numpy.pxd":758 * ctypedef npy_uintp uintp_t * * ctypedef npy_double float_t # <<<<<<<<<<<<<< * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t */ typedef npy_double __pyx_t_5numpy_float_t; /* "numpy.pxd":759 * * ctypedef npy_double float_t * ctypedef npy_double double_t # <<<<<<<<<<<<<< * ctypedef npy_longdouble longdouble_t * */ typedef npy_double __pyx_t_5numpy_double_t; /* "numpy.pxd":760 * ctypedef npy_double float_t * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< * * ctypedef npy_cfloat cfloat_t */ typedef npy_longdouble __pyx_t_5numpy_longdouble_t; #if CYTHON_CCOMPLEX #ifdef __cplusplus typedef ::std::complex< float > __pyx_t_float_complex; #else typedef float _Complex __pyx_t_float_complex; #endif #else typedef struct { float real, imag; } __pyx_t_float_complex; #endif #if CYTHON_CCOMPLEX #ifdef __cplusplus typedef ::std::complex< double > __pyx_t_double_complex; #else typedef double _Complex __pyx_t_double_complex; #endif #else typedef struct { double real, imag; } __pyx_t_double_complex; #endif /*--- Type declarations ---*/ /* "numpy.pxd":762 * ctypedef npy_longdouble longdouble_t * * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< * ctypedef npy_cdouble cdouble_t * ctypedef npy_clongdouble clongdouble_t */ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; /* "numpy.pxd":763 * * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< * ctypedef npy_clongdouble clongdouble_t * */ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; /* "numpy.pxd":764 * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< * * ctypedef npy_cdouble complex_t */ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; /* "numpy.pxd":766 * ctypedef npy_clongdouble clongdouble_t * * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew1(a): */ typedef npy_cdouble __pyx_t_5numpy_complex_t; struct __pyx_opt_args_5ga4py_2ga__acc_common; struct __pyx_opt_args_5ga4py_2ga_distribution; struct __pyx_opt_args_5ga4py_2ga__get_common; struct __pyx_opt_args_5ga4py_2ga__put_common; /* "ga4py/ga.pyx":290 * _acc_common(g_a, buffer, lo, hi, alpha) * * cdef _acc_common(int g_a, buffer, lo=None, hi=None, alpha=None, # <<<<<<<<<<<<<< * bint nb=False, bint periodic=False, skip=None): * """Combines data from buffer with data in the global array patch. */ struct __pyx_opt_args_5ga4py_2ga__acc_common { int __pyx_n; PyObject *lo; PyObject *hi; PyObject *alpha; int nb; int periodic; PyObject *skip; }; /* "ga4py/ga.pyx":1306 * return evalues * * cpdef distribution(int g_a, int proc=-1): # <<<<<<<<<<<<<< * """Return the distribution given to proc. * */ struct __pyx_opt_args_5ga4py_2ga_distribution { int __pyx_n; int proc; }; /* "ga4py/ga.pyx":1910 * return _get_common(g_a, lo, hi, buffer) * * cdef _get_common(int g_a, lo=None, hi=None, np.ndarray buffer=None, # <<<<<<<<<<<<<< * bint nb=False, bint periodic=False, skip=None): * """Copies data from global array section to the local array buffer. */ struct __pyx_opt_args_5ga4py_2ga__get_common { int __pyx_n; PyObject *lo; PyObject *hi; PyArrayObject *buffer; int nb; int periodic; PyObject *skip; }; /* "ga4py/ga.pyx":3260 * _put_common(g_a, buffer, lo, hi) * * cdef _put_common(int g_a, buffer, lo=None, hi=None, # <<<<<<<<<<<<<< * bint nb=False, bint periodic=False, skip=None): * """Copies data from local array buffer to the global array section. */ struct __pyx_opt_args_5ga4py_2ga__put_common { int __pyx_n; PyObject *lo; PyObject *hi; int nb; int periodic; PyObject *skip; }; #ifndef CYTHON_REFNANNY #define CYTHON_REFNANNY 0 #endif #if CYTHON_REFNANNY typedef struct { void (*INCREF)(void*, PyObject*, int); void (*DECREF)(void*, PyObject*, int); void (*GOTREF)(void*, PyObject*, int); void (*GIVEREF)(void*, PyObject*, int); void* (*SetupContext)(const char*, int, const char*); void (*FinishContext)(void**); } __Pyx_RefNannyAPIStruct; static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; #ifdef WITH_THREAD #define __Pyx_RefNannySetupContext(name, acquire_gil) \ if (acquire_gil) { \ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ PyGILState_Release(__pyx_gilstate_save); \ } else { \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ } #else #define __Pyx_RefNannySetupContext(name, acquire_gil) \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) #endif #define __Pyx_RefNannyFinishContext() \ __Pyx_RefNanny->FinishContext(&__pyx_refnanny) #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) #else #define __Pyx_RefNannyDeclarations #define __Pyx_RefNannySetupContext(name, acquire_gil) #define __Pyx_RefNannyFinishContext() #define __Pyx_INCREF(r) Py_INCREF(r) #define __Pyx_DECREF(r) Py_DECREF(r) #define __Pyx_GOTREF(r) #define __Pyx_GIVEREF(r) #define __Pyx_XINCREF(r) Py_XINCREF(r) #define __Pyx_XDECREF(r) Py_XDECREF(r) #define __Pyx_XGOTREF(r) #define __Pyx_XGIVEREF(r) #endif /* CYTHON_REFNANNY */ #define __Pyx_XDECREF_SET(r, v) do { \ PyObject *tmp = (PyObject *) r; \ r = v; __Pyx_XDECREF(tmp); \ } while (0) #define __Pyx_DECREF_SET(r, v) do { \ PyObject *tmp = (PyObject *) r; \ r = v; __Pyx_DECREF(tmp); \ } while (0) #define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) #define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { PyTypeObject* tp = Py_TYPE(obj); if (likely(tp->tp_getattro)) return tp->tp_getattro(obj, attr_name); #if PY_MAJOR_VERSION < 3 if (likely(tp->tp_getattr)) return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); #endif return PyObject_GetAttr(obj, attr_name); } #else #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) #endif static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ static CYTHON_INLINE int __Pyx_PySequence_Contains(PyObject* item, PyObject* seq, int eq) { int result = PySequence_Contains(seq, item); return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); } #define __Pyx_GetItemInt(o, i, size, to_py_func, is_list, wraparound, boundscheck) \ (((size) <= sizeof(Py_ssize_t)) ? \ __Pyx_GetItemInt_Fast(o, i, is_list, wraparound, boundscheck) : \ __Pyx_GetItemInt_Generic(o, to_py_func(i))) #define __Pyx_GetItemInt_List(o, i, size, to_py_func, is_list, wraparound, boundscheck) \ (((size) <= sizeof(Py_ssize_t)) ? \ __Pyx_GetItemInt_List_Fast(o, i, wraparound, boundscheck) : \ __Pyx_GetItemInt_Generic(o, to_py_func(i))) static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, int wraparound, int boundscheck); #define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func, is_list, wraparound, boundscheck) \ (((size) <= sizeof(Py_ssize_t)) ? \ __Pyx_GetItemInt_Tuple_Fast(o, i, wraparound, boundscheck) : \ __Pyx_GetItemInt_Generic(o, to_py_func(i))) static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, int wraparound, int boundscheck); static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, int wraparound, int boundscheck); static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ static CYTHON_INLINE int __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); static void __Pyx_RaiseBufferFallbackError(void); /*proto*/ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ static void __Pyx_WriteUnraisable(const char *name, int clineno, int lineno, const char *filename); /*proto*/ static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ const char* function_name); /*proto*/ static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/ #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { PyListObject* L = (PyListObject*) list; Py_ssize_t len = Py_SIZE(list); if (likely(L->allocated > len)) { Py_INCREF(x); PyList_SET_ITEM(list, len, x); Py_SIZE(list) = len+1; return 0; } return PyList_Append(list, x); } #else #define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) #endif static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, PyObject** py_start, PyObject** py_stop, PyObject** py_slice, int has_cstart, int has_cstop, int wraparound); static void __Pyx_RaiseBufferIndexError(int axis); /*proto*/ #define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0) #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { PyListObject* L = (PyListObject*) list; Py_ssize_t len = Py_SIZE(list); if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { Py_INCREF(x); PyList_SET_ITEM(list, len, x); Py_SIZE(list) = len+1; return 0; } return PyList_Append(list, x); } #else #define __Pyx_PyList_Append(L,x) PyList_Append(L,x) #endif static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, const char *name, int exact); /*proto*/ static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t); /* proto */ #ifndef __PYX_FORCE_INIT_THREADS #define __PYX_FORCE_INIT_THREADS 0 #endif #define UNARY_NEG_WOULD_OVERFLOW(x) (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x))) #define __Pyx_SetItemInt(o, i, v, size, to_py_func, is_list, wraparound, boundscheck) \ (((size) <= sizeof(Py_ssize_t)) ? \ __Pyx_SetItemInt_Fast(o, i, v, is_list, wraparound, boundscheck) : \ __Pyx_SetItemInt_Generic(o, to_py_func(i), v)) static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v); static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list, int wraparound, int boundscheck); static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ #if CYTHON_CCOMPLEX #ifdef __cplusplus #define __Pyx_CREAL(z) ((z).real()) #define __Pyx_CIMAG(z) ((z).imag()) #else #define __Pyx_CREAL(z) (__real__(z)) #define __Pyx_CIMAG(z) (__imag__(z)) #endif #else #define __Pyx_CREAL(z) ((z).real) #define __Pyx_CIMAG(z) ((z).imag) #endif #if defined(_WIN32) && defined(__cplusplus) && CYTHON_CCOMPLEX #define __Pyx_SET_CREAL(z,x) ((z).real(x)) #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) #else #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) #endif static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); #if CYTHON_CCOMPLEX #define __Pyx_c_eqf(a, b) ((a)==(b)) #define __Pyx_c_sumf(a, b) ((a)+(b)) #define __Pyx_c_difff(a, b) ((a)-(b)) #define __Pyx_c_prodf(a, b) ((a)*(b)) #define __Pyx_c_quotf(a, b) ((a)/(b)) #define __Pyx_c_negf(a) (-(a)) #ifdef __cplusplus #define __Pyx_c_is_zerof(z) ((z)==(float)0) #define __Pyx_c_conjf(z) (::std::conj(z)) #if 1 #define __Pyx_c_absf(z) (::std::abs(z)) #define __Pyx_c_powf(a, b) (::std::pow(a, b)) #endif #else #define __Pyx_c_is_zerof(z) ((z)==0) #define __Pyx_c_conjf(z) (conjf(z)) #if 1 #define __Pyx_c_absf(z) (cabsf(z)) #define __Pyx_c_powf(a, b) (cpowf(a, b)) #endif #endif #else static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex); static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex); #if 1 static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex); #endif #endif static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); #if CYTHON_CCOMPLEX #define __Pyx_c_eq(a, b) ((a)==(b)) #define __Pyx_c_sum(a, b) ((a)+(b)) #define __Pyx_c_diff(a, b) ((a)-(b)) #define __Pyx_c_prod(a, b) ((a)*(b)) #define __Pyx_c_quot(a, b) ((a)/(b)) #define __Pyx_c_neg(a) (-(a)) #ifdef __cplusplus #define __Pyx_c_is_zero(z) ((z)==(double)0) #define __Pyx_c_conj(z) (::std::conj(z)) #if 1 #define __Pyx_c_abs(z) (::std::abs(z)) #define __Pyx_c_pow(a, b) (::std::pow(a, b)) #endif #else #define __Pyx_c_is_zero(z) ((z)==0) #define __Pyx_c_conj(z) (conj(z)) #if 1 #define __Pyx_c_abs(z) (cabs(z)) #define __Pyx_c_pow(a, b) (cpow(a, b)) #endif #endif #else static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex); static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex); #if 1 static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex); #endif #endif typedef struct { Py_ssize_t shape, strides, suboffsets; } __Pyx_Buf_DimInfo; typedef struct { size_t refcount; Py_buffer pybuffer; } __Pyx_Buffer; typedef struct { __Pyx_Buffer *rcbuffer; char *data; __Pyx_Buf_DimInfo diminfo[8]; } __Pyx_LocalBuf_ND; #if PY_MAJOR_VERSION < 3 static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); static void __Pyx_ReleaseBuffer(Py_buffer *view); #else #define __Pyx_GetBuffer PyObject_GetBuffer #define __Pyx_ReleaseBuffer PyBuffer_Release #endif static Py_ssize_t __Pyx_zeros[] = {0, 0, 0, 0, 0, 0, 0, 0}; static Py_ssize_t __Pyx_minusones[] = {-1, -1, -1, -1, -1, -1, -1, -1}; static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ static CYTHON_INLINE int64_t __Pyx_PyInt_from_py_int64_t(PyObject *); static CYTHON_INLINE Integer __Pyx_PyInt_from_py_Integer(PyObject *); static __pyx_t_float_complex __Pyx_PyComplex_As___pyx_t_float_complex(PyObject*); static __pyx_t_double_complex __Pyx_PyComplex_As___pyx_t_double_complex(PyObject*); static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_Py_intptr_t(Py_intptr_t); static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_Integer(Integer); static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_npy_int64(npy_int64); #define __pyx_PyComplex_FromComplex(z) \ PyComplex_FromDoubles((double)__Pyx_CREAL(z), \ (double)__Pyx_CIMAG(z)) static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_int64_t(int64_t); static PyObject* __pyx_convert__to_py_SingleComplex(SingleComplex s); static PyObject* __pyx_convert__to_py_DoubleComplex(DoubleComplex s); static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *); static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *); static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *); static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *); static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *); static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *); static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *); static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *); static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *); static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *); static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *); static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *); static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *); static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *); static int __Pyx_check_binary_version(void); #if !defined(__Pyx_PyIdentifier_FromString) #if PY_MAJOR_VERSION < 3 #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s) #else #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s) #endif #endif static PyObject *__Pyx_ImportModule(const char *name); /*proto*/ static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict); /*proto*/ typedef struct { int code_line; PyCodeObject* code_object; } __Pyx_CodeObjectCacheEntry; struct __Pyx_CodeObjectCache { int count; int max_count; __Pyx_CodeObjectCacheEntry* entries; }; static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); static PyCodeObject *__pyx_find_code_object(int code_line); static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); static void __Pyx_AddTraceback(const char *funcname, int c_line, int py_line, const char *filename); /*proto*/ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ /* Module declarations from 'libc.string' */ /* Module declarations from 'libc.stdlib' */ /* Module declarations from 'libc.stdio' */ /* Module declarations from 'libc.stdint' */ /* Module declarations from 'ga4py.gah' */ /* Module declarations from 'cpython.buffer' */ /* Module declarations from 'cpython.ref' */ /* Module declarations from 'cpython.object' */ /* Module declarations from '__builtin__' */ /* Module declarations from 'cpython.type' */ static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; /* Module declarations from 'numpy' */ /* Module declarations from 'numpy' */ static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ /* Module declarations from 'ga4py.ga' */ static int __pyx_v_5ga4py_2ga__initialized; static int __pyx_v_5ga4py_2ga_float128_in_np; static int __pyx_v_5ga4py_2ga_complex256_in_np; static CYTHON_INLINE void *__pyx_f_5ga4py_2ga__gapy_malloc(size_t, int, char *); /*proto*/ static CYTHON_INLINE void __pyx_f_5ga4py_2ga__gapy_free(void *); /*proto*/ static CYTHON_INLINE PyArrayObject *__pyx_f_5ga4py_2ga__inta32(PyObject *); /*proto*/ static CYTHON_INLINE PyArrayObject *__pyx_f_5ga4py_2ga__inta64(PyObject *); /*proto*/ static CYTHON_INLINE PyObject *__pyx_f_5ga4py_2ga__lohi(int, PyObject *, PyObject *); /*proto*/ static void *__pyx_f_5ga4py_2ga__convert_multiplier(int, PyObject *, int *, long *, PY_LONG_LONG *, float *, double *, long double *, SingleComplex *, DoubleComplex *); /*proto*/ static PyObject *__pyx_f_5ga4py_2ga__acc_common(int, PyObject *, struct __pyx_opt_args_5ga4py_2ga__acc_common *__pyx_optional_args); /*proto*/ static PyObject *__pyx_f_5ga4py_2ga_distribution(int, int __pyx_skip_dispatch, struct __pyx_opt_args_5ga4py_2ga_distribution *__pyx_optional_args); /*proto*/ static PyObject *__pyx_f_5ga4py_2ga__get_common(int, struct __pyx_opt_args_5ga4py_2ga__get_common *__pyx_optional_args); /*proto*/ static PyObject *__pyx_f_5ga4py_2ga_inquire(int, int __pyx_skip_dispatch); /*proto*/ static PyArrayObject *__pyx_f_5ga4py_2ga_inquire_dims(int, int __pyx_skip_dispatch); /*proto*/ static int __pyx_f_5ga4py_2ga_inquire_type(int, int __pyx_skip_dispatch); /*proto*/ static PyObject *__pyx_f_5ga4py_2ga__put_common(int, PyObject *, struct __pyx_opt_args_5ga4py_2ga__put_common *__pyx_optional_args); /*proto*/ static PyObject *__pyx_f_5ga4py_2ga__release_common(int, PyObject *, PyObject *, int); /*proto*/ static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t = { "int32_t", NULL, sizeof(__pyx_t_5numpy_int32_t), { 0 }, 0, IS_UNSIGNED(__pyx_t_5numpy_int32_t) ? 'U' : 'I', IS_UNSIGNED(__pyx_t_5numpy_int32_t), 0 }; static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t = { "int64_t", NULL, sizeof(__pyx_t_5numpy_int64_t), { 0 }, 0, IS_UNSIGNED(__pyx_t_5numpy_int64_t) ? 'U' : 'I', IS_UNSIGNED(__pyx_t_5numpy_int64_t), 0 }; #define __Pyx_MODULE_NAME "ga4py.ga" int __pyx_module_is_main_ga4py__ga = 0; /* Implementation of 'ga4py.ga' */ static PyObject *__pyx_builtin_ValueError; static PyObject *__pyx_builtin_TypeError; static PyObject *__pyx_builtin_range; static PyObject *__pyx_builtin_NotImplementedError; static PyObject *__pyx_builtin_RuntimeError; static PyObject *__pyx_pf_5ga4py_2ga_dtype(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_gatype); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_2inquire_dtype(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_4zip(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_6abs_value(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_8acc(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_buffer, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyObject *__pyx_v_alpha); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_10access(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, int __pyx_v_proc); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_12access_block(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_idx); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_14access_block_grid(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED int __pyx_v_g_a, CYTHON_UNUSED PyObject *__pyx_v_subscript); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_16access_block_segment(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_proc); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_18access_ghost_element(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED int __pyx_v_g_a, CYTHON_UNUSED PyObject *__pyx_v_subscript); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_20access_ghosts(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_22add(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, int __pyx_v_g_c, PyObject *__pyx_v_alpha, PyObject *__pyx_v_beta, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, PyObject *__pyx_v_clo, PyObject *__pyx_v_chi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_24add_constant(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_alpha, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_26add_diagonal(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_v); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_28allocate(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_30brdcst(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buffer, int __pyx_v_root); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_32check_handle(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, char *__pyx_v_message); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_34cluster_nnodes(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_36cluster_nodeid(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_proc); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_38cluster_proc_nodeid(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_proc); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_40cluster_nprocs(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_node); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_42cluster_procid(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_node, int __pyx_v_proc); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_44compare_distr(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_46copy(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, int __pyx_v_trans); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_48create(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_gtype, PyObject *__pyx_v_dims, char *__pyx_v_name, PyObject *__pyx_v_chunk, int __pyx_v_pgroup); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_50create_ghosts(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_gtype, PyObject *__pyx_v_dims, PyObject *__pyx_v_width, char *__pyx_v_name, PyObject *__pyx_v_chunk, int __pyx_v_pgroup); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_52create_handle(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_54create_irreg(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_gtype, PyObject *__pyx_v_dims, PyObject *__pyx_v_block, PyObject *__pyx_v_map, char *__pyx_v_name, int __pyx_v_pgroup); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_56create_ghosts_irreg(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_gtype, PyObject *__pyx_v_dims, PyObject *__pyx_v_width, PyObject *__pyx_v_block, PyObject *__pyx_v_map, char *__pyx_v_name, int __pyx_v_pgroup); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_58create_mutexes(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_number); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_60deregister_type(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_type); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_62destroy(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_64destroy_mutexes(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_66diag(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_s, int __pyx_v_g_v, PyObject *__pyx_v_evalues); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_68diag_reuse(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_control, int __pyx_v_g_a, int __pyx_v_g_s, int __pyx_v_g_v, PyObject *__pyx_v_evalues); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_70diag_std(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_v, PyObject *__pyx_v_evalues); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_72distribution(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_proc); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_74dot(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, int __pyx_v_ta, int __pyx_v_tb); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_76duplicate(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, char *__pyx_v_name); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_78elem_divide(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, int __pyx_v_g_c, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, PyObject *__pyx_v_clo, PyObject *__pyx_v_chi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_80elem_maximum(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, int __pyx_v_g_c, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, PyObject *__pyx_v_clo, PyObject *__pyx_v_chi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_82elem_minimum(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, int __pyx_v_g_c, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, PyObject *__pyx_v_clo, PyObject *__pyx_v_chi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_84elem_multiply(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, int __pyx_v_g_c, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, PyObject *__pyx_v_clo, PyObject *__pyx_v_chi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_86error(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_message, int __pyx_v_code); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_88fence(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_90fill(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_value, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_92gather(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_subsarray, PyArrayObject *__pyx_v_values); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_94gemm(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_ta, int __pyx_v_tb, int64_t __pyx_v_m, int64_t __pyx_v_n, int64_t __pyx_v_k, PyObject *__pyx_v_alpha, int __pyx_v_g_a, int __pyx_v_g_b, PyObject *__pyx_v_beta, int __pyx_v_g_c); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_96get(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyArrayObject *__pyx_v_buffer); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_98get_block_info(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_100get_diag(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_v); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_102get_debug(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_104gop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_X, char *__pyx_v_op); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_106gop_add(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_X); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_108gop_multiply(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_X); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_110gop_max(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_X); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_112gop_min(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_X); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_114gop_absmax(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_X); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_116gop_absmin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_X); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_118has_ghosts(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_120init_fence(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_122initialize(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_124initialize_ltd(CYTHON_UNUSED PyObject *__pyx_self, size_t __pyx_v_limit); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_126initialized(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_128inquire(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_130inquire_dims(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_132inquire_memory(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_134inquire_name(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_136inquire_type(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_138is_mirrored(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_140llt_solve(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_142locate(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_subscript); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_144locate_nnodes(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_146locate_region(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_148lock(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_mutex); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_150lu_solve(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, int __pyx_v_trans); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_152mask_sync(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_first, int __pyx_v_last); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_154matmul_patch(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_transa, int __pyx_v_transb, PyObject *__pyx_v_alpha, PyObject *__pyx_v_beta, int __pyx_v_g_a, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, int __pyx_v_g_b, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, int __pyx_v_g_c, PyObject *__pyx_v_clo, PyObject *__pyx_v_chi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_156median(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, int __pyx_v_g_c, int __pyx_v_g_m, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, PyObject *__pyx_v_clo, PyObject *__pyx_v_chi, PyObject *__pyx_v_mlo, PyObject *__pyx_v_mhi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_158memory_avail(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_160memory_limited(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_162merge_distr_patch(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, int __pyx_v_g_b, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_164merge_mirrored(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_166nbacc(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_buffer, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyObject *__pyx_v_alpha); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_168nbget(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyArrayObject *__pyx_v_buffer); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_170nblock(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_172nbput(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_buffer, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_174nbwait(CYTHON_UNUSED PyObject *__pyx_self, ga_nbhdl_t __pyx_v_nbhandle); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_176ndim(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_178nnodes(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_180nodeid(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_182norm1(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_184norm_infinity(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_186enum(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyObject *__pyx_v_start, PyObject *__pyx_v_inc); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_188pack(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_src, int __pyx_v_g_dst, int __pyx_v_g_msk, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_190periodic_acc(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_buffer, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyObject *__pyx_v_alpha); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_192periodic_get(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyArrayObject *__pyx_v_buffer); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_194periodic_put(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_buffer, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_196pgroup_absolute_id(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, int __pyx_v_pid); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_198pgroup_brdcst(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, PyObject *__pyx_v_buffer, int __pyx_v_root); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_200pgroup_create(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_list); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_202pgroup_destroy(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_204pgroup_get_default(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_206pgroup_get_mirror(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_208pgroup_get_world(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_210pgroup_gop(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, PyObject *__pyx_v_X, char *__pyx_v_op); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_212pgroup_gop_add(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, PyObject *__pyx_v_X); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_214pgroup_gop_multiply(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, PyObject *__pyx_v_X); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_216pgroup_gop_max(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, PyObject *__pyx_v_X); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_218pgroup_gop_min(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, PyObject *__pyx_v_X); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_220pgroup_gop_absmax(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, PyObject *__pyx_v_X); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_222pgroup_gop_absmin(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, PyObject *__pyx_v_X); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_224pgroup_nnodes(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_226pgroup_nodeid(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_228pgroup_set_default(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_230pgroup_split(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, int __pyx_v_num_group); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_232pgroup_split_irreg(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, int __pyx_v_color); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_234pgroup_sync(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_236print_distribution(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_238print_file(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED int __pyx_v_g_a, CYTHON_UNUSED PyObject *__pyx_v_file); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_240print_patch(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, int __pyx_v_pretty); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_242print_stats(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_244print_stdout(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_246proc_topology(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_proc); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_248put(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_buffer, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_250randomize(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_val); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_252read_inc(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_subscript, long __pyx_v_inc); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_254register_dtype(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dtype); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_256register_type(CYTHON_UNUSED PyObject *__pyx_self, size_t __pyx_v_bytes); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_258recip(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_260release(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_262release_block(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_index); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_264release_block_grid(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_subscript); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_266release_block_segment(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_proc); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_268release_ghost_element(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_subscript); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_270release_ghosts(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_272release_update(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_274release_update_block(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_index); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_276release_update_block_grid(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_subscript); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_278release_update_block_segment(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_proc); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_280release_update_ghost_element(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_subscript); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_282release_update_ghosts(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_284scale(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_value, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_286scale_rows(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_v); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_288scale_cols(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_v); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_290scan_add(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_src, int __pyx_v_g_dst, int __pyx_v_g_msk, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, int __pyx_v_excl); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_292scan_copy(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_src, int __pyx_v_g_dst, int __pyx_v_g_msk, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_294scatter(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_values, PyObject *__pyx_v_subsarray); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_296scatter_acc(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_values, PyObject *__pyx_v_subsarray, PyObject *__pyx_v_alpha); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_298select_elem(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, char *__pyx_v_op); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_300select_elem_min(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_302select_elem_max(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_304set_array_name(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, char *__pyx_v_name); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_306set_block_cyclic(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_dims); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_308set_block_cyclic_proc_grid(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_block, PyObject *__pyx_v_proc_grid); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_310set_chunk(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_chunk); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_312set_data(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_dims, int __pyx_v_type); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_314set_debug(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_debug); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_316set_diagonal(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_v); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_318set_ghosts(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_width); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_320set_irreg_distr(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_mapc, PyObject *__pyx_v_nblock); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_322set_memory_limit(CYTHON_UNUSED PyObject *__pyx_self, size_t __pyx_v_limit); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_324set_pgroup(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_pgroup); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_326set_restricted(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_list); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_328set_restricted_range(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_lo_proc, int __pyx_v_hi_proc); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_330shift_diagoal(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_value); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_332solve(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_334spd_invert(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_336step_max(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_338strided_acc(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_buffer, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyObject *__pyx_v_skip, PyObject *__pyx_v_alpha); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_340strided_get(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyObject *__pyx_v_skip, PyArrayObject *__pyx_v_buffer); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_342strided_put(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_buffer, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyObject *__pyx_v_skip); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_344summarize(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_verbose); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_346symmetrize(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_348sync(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_350terminate(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_352total_blocks(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_354transpose(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_356unlock(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_mutex); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_358unpack(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_src, int __pyx_v_g_dst, int __pyx_v_g_msk, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_360update_ghosts(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_362update_ghost_dir(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_dimension, int __pyx_v_dir, int __pyx_v_flag); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_364uses_ma(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_366wtime(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_368zero(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_2ga_370zero_diagonal(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a); /* proto */ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */ static char __pyx_k_1[] = "%d was not a recognized GA type"; static char __pyx_k_2[] = "lo cannot be None if hi is None"; static char __pyx_k_3[] = "len(lo_nd) != ndim; len(%s) != %s"; static char __pyx_k_4[] = "len(hi_nd) != ndim; len(%s) != %s"; static char __pyx_k_5[] = "cannot convert None"; static char __pyx_k_6[] = "type of g_a not recognized"; static char __pyx_k_7[] = "buffer is wrong type :: buffer=%s != %s"; static char __pyx_k_8[] = "buffer size does not match shape :: buffer.size=%s != np.prod(shape)=%s"; static char __pyx_k_10[] = "buffer shape does not match request shape :: buffer_shape=%s != shape=%s"; static char __pyx_k_11[] = "lo>hi lo=%s hi=%s"; static char __pyx_k_12[] = "lo out of bounds lo_dst=%s lo=%s"; static char __pyx_k_13[] = "hi out of bounds hi_dst=%s hi=%s"; static char __pyx_k_14[] = "use access_ghosts(g_a) instead"; static char __pyx_k_15[] = "the buffer must be contiguous"; static char __pyx_k_16[] = ""; static char __pyx_k_17[] = "subsarray must be either 1- or 2-dimensional"; static char __pyx_k_18[] = "values must be one-dimensional"; static char __pyx_k_19[] = "values must be contiguous"; static char __pyx_k_20[] = "values was not large enough"; static char __pyx_k_21[] = "how did this happen?"; static char __pyx_k_22[] = "C_INT not supported"; static char __pyx_k_23[] = "C_LONG not supported"; static char __pyx_k_24[] = "C_LONGLONG not supported"; static char __pyx_k_25[] = "C_LDBL not supported"; static char __pyx_k_26[] = "C_LDCPL not supported (yet)"; static char __pyx_k_27[] = "first dimension of buffer cannot be strided"; static char __pyx_k_28[] = "buffer cannot have negative strides"; static char __pyx_k_30[] = "X must be contiguous"; static char __pyx_k_31[] = "type not supported by ga.gop %s"; static char __pyx_k_32[] = "+"; static char __pyx_k_33[] = "*"; static char __pyx_k_37[] = "type not supported by ga.pgroup_gop %s"; static char __pyx_k_39[] = "ndarray is not C contiguous"; static char __pyx_k_41[] = "ndarray is not Fortran contiguous"; static char __pyx_k_43[] = "Non-native byte order not supported"; static char __pyx_k_45[] = "unknown dtype code in numpy.pxd (%d)"; static char __pyx_k_46[] = "Format string allocated too short, see comment in numpy.pxd"; static char __pyx_k_49[] = "Format string allocated too short."; static char __pyx_k_51[] = "The Global Arrays (GA) Python interface.\n\nThis module exports the GA C API, with a few enhancements. The notable\nexceptions include supporting Pythonic ranges. The ranges here are half-open\ne.g. [0,n) instead of in the C API where they are closed e.g. [0,n]. This\nfollows the Python convention.\n\n"; static char __pyx_k_54[] = "/home/d3n000/ga/hpc_website/globalarrays/download/ga-5-3/python/ga4py/ga.pyx"; static char __pyx_k_55[] = "ga4py.ga"; static char __pyx_k_72[] = "access_block_segment"; static char __pyx_k_75[] = "access_ghost_element"; static char __pyx_k__B[] = "B"; static char __pyx_k__H[] = "H"; static char __pyx_k__I[] = "I"; static char __pyx_k__L[] = "L"; static char __pyx_k__O[] = "O"; static char __pyx_k__Q[] = "Q"; static char __pyx_k__X[] = "X"; static char __pyx_k__b[] = "b"; static char __pyx_k__d[] = "d"; static char __pyx_k__f[] = "f"; static char __pyx_k__g[] = "g"; static char __pyx_k__h[] = "h"; static char __pyx_k__i[] = "i"; static char __pyx_k__k[] = "k"; static char __pyx_k__l[] = "l"; static char __pyx_k__m[] = "m"; static char __pyx_k__n[] = "n"; static char __pyx_k__q[] = "q"; static char __pyx_k_300[] = "release_block_segment"; static char __pyx_k_303[] = "release_ghost_element"; static char __pyx_k_310[] = "release_update_block"; static char __pyx_k_313[] = "release_update_block_grid"; static char __pyx_k_316[] = "release_update_block_segment"; static char __pyx_k_319[] = "release_update_ghost_element"; static char __pyx_k_322[] = "release_update_ghosts"; static char __pyx_k_349[] = "set_block_cyclic_proc_grid"; static char __pyx_k_370[] = "set_restricted_range"; static char __pyx_k_409[] = "gop (line 2044)"; static char __pyx_k_410[] = "Global operation.\n\n X(1:N) is a vector present on each process. gop 'sums' elements of X\n accross all nodes using the commutative operator op. The result is\n broadcast to all nodes. Supported operations include '+', '*', 'max',\n 'min', 'absmax', 'absmin'. The use of lowerecase for operators is\n necessary.\n\n X must be a contiguous array-like. X is not guaranteed to be modified\n in-place so use as:\n\n >>> value = ga.gop((1,2,3), \"+\")\n\n This operation is provided only for convenience purposes: it is available\n regardless of the message-passing library that GA is running with.\n\n This is a collective operation. \n\n "; static char __pyx_k_411[] = "pgroup_gop (line 3024)"; static char __pyx_k_412[] = "Global operation.\n\n X(1:N) is a vector present on each process in the group. gop 'sums'\n elements of X accross all nodes using the commutative operator op. The\n result is broadcast to all nodes. Supported operations include '+', '*',\n 'max', 'min', 'absmax', 'absmin'. The use of lowerecase for operators is\n necessary.\n\n X must be a contiguous array-like. X is not guaranteed to be modified\n in-place so use as:\n\n >>> value = ga.gop((1,2,3), \"+\")\n\n This operation is provided only for convenience purposes: it is available\n regardless of the message-passing library that GA is running with.\n\n This is a collective operation. \n\n "; static char __pyx_k__Zd[] = "Zd"; static char __pyx_k__Zf[] = "Zf"; static char __pyx_k__Zg[] = "Zg"; static char __pyx_k__hi[] = "hi"; static char __pyx_k__lo[] = "lo"; static char __pyx_k__nm[] = "nm"; static char __pyx_k__np[] = "np"; static char __pyx_k__op[] = "op"; static char __pyx_k__ta[] = "ta"; static char __pyx_k__tb[] = "tb"; static char __pyx_k__acc[] = "acc"; static char __pyx_k__add[] = "add"; static char __pyx_k__ahi[] = "ahi"; static char __pyx_k__all[] = "all"; static char __pyx_k__alo[] = "alo"; static char __pyx_k__any[] = "any"; static char __pyx_k__bhi[] = "bhi"; static char __pyx_k__blo[] = "blo"; static char __pyx_k__chi[] = "chi"; static char __pyx_k__clo[] = "clo"; static char __pyx_k__dir[] = "dir"; static char __pyx_k__dot[] = "dot"; static char __pyx_k__g_a[] = "g_a"; static char __pyx_k__g_b[] = "g_b"; static char __pyx_k__g_c[] = "g_c"; static char __pyx_k__g_m[] = "g_m"; static char __pyx_k__g_s[] = "g_s"; static char __pyx_k__g_v[] = "g_v"; static char __pyx_k__get[] = "get"; static char __pyx_k__gop[] = "gop"; static char __pyx_k__idx[] = "idx"; static char __pyx_k__inc[] = "inc"; static char __pyx_k__map[] = "map"; static char __pyx_k__max[] = "max"; static char __pyx_k__mhi[] = "mhi"; static char __pyx_k__min[] = "min"; static char __pyx_k__mlo[] = "mlo"; static char __pyx_k__num[] = "num"; static char __pyx_k__pid[] = "pid"; static char __pyx_k__ptr[] = "ptr"; static char __pyx_k__put[] = "put"; static char __pyx_k__val[] = "val"; static char __pyx_k__zip[] = "zip"; static char __pyx_k__X_nd[] = "X_nd"; static char __pyx_k__beta[] = "beta"; static char __pyx_k__c_hi[] = "c_hi"; static char __pyx_k__c_lo[] = "c_lo"; static char __pyx_k__code[] = "code"; static char __pyx_k__copy[] = "copy"; static char __pyx_k__data[] = "data"; static char __pyx_k__diag[] = "diag"; static char __pyx_k__dims[] = "dims"; static char __pyx_k__dinc[] = "dinc"; static char __pyx_k__dval[] = "dval"; static char __pyx_k__enum[] = "enum"; static char __pyx_k__excl[] = "excl"; static char __pyx_k__file[] = "file"; static char __pyx_k__fill[] = "fill"; static char __pyx_k__finc[] = "finc"; static char __pyx_k__flag[] = "flag"; static char __pyx_k__fval[] = "fval"; static char __pyx_k__gdcv[] = "gdcv"; static char __pyx_k__gemm[] = "gemm"; static char __pyx_k__gfcv[] = "gfcv"; static char __pyx_k__iinc[] = "iinc"; static char __pyx_k__imag[] = "imag"; static char __pyx_k__int8[] = "int8"; static char __pyx_k__intc[] = "intc"; static char __pyx_k__ival[] = "ival"; static char __pyx_k__last[] = "last"; static char __pyx_k__linc[] = "linc"; static char __pyx_k__list[] = "list"; static char __pyx_k__lock[] = "lock"; static char __pyx_k__long[] = "long"; static char __pyx_k__lval[] = "lval"; static char __pyx_k__mapc[] = "mapc"; static char __pyx_k__name[] = "name"; static char __pyx_k__ndim[] = "ndim"; static char __pyx_k__node[] = "node"; static char __pyx_k__ones[] = "ones"; static char __pyx_k__pack[] = "pack"; static char __pyx_k__pdcv[] = "pdcv"; static char __pyx_k__pfcv[] = "pfcv"; static char __pyx_k__proc[] = "proc"; static char __pyx_k__prod[] = "prod"; static char __pyx_k__real[] = "real"; static char __pyx_k__root[] = "root"; static char __pyx_k__size[] = "size"; static char __pyx_k__skip[] = "skip"; static char __pyx_k__step[] = "step"; static char __pyx_k__sync[] = "sync"; static char __pyx_k__ta_c[] = "ta_c"; static char __pyx_k__tb_c[] = "tb_c"; static char __pyx_k__type[] = "type"; static char __pyx_k__vinc[] = "vinc"; static char __pyx_k__vval[] = "vval"; static char __pyx_k__zero[] = "zero"; static char __pyx_k__C_DBL[] = "C_DBL"; static char __pyx_k__C_INT[] = "C_INT"; static char __pyx_k__F_DBL[] = "F_DBL"; static char __pyx_k__F_INT[] = "F_INT"; static char __pyx_k__F_LOG[] = "F_LOG"; static char __pyx_k__alpha[] = "alpha"; static char __pyx_k__array[] = "array"; static char __pyx_k__block[] = "block"; static char __pyx_k__bytes[] = "bytes"; static char __pyx_k__chunk[] = "chunk"; static char __pyx_k__color[] = "color"; static char __pyx_k__coord[] = "coord"; static char __pyx_k__dbeta[] = "dbeta"; static char __pyx_k__dcinc[] = "dcinc"; static char __pyx_k__dcval[] = "dcval"; static char __pyx_k__debug[] = "debug"; static char __pyx_k__dtype[] = "dtype"; static char __pyx_k__elems[] = "elems"; static char __pyx_k__error[] = "error"; static char __pyx_k__fbeta[] = "fbeta"; static char __pyx_k__fcinc[] = "fcinc"; static char __pyx_k__fcval[] = "fcval"; static char __pyx_k__fence[] = "fence"; static char __pyx_k__first[] = "first"; static char __pyx_k__flags[] = "flags"; static char __pyx_k__g_dst[] = "g_dst"; static char __pyx_k__g_msk[] = "g_msk"; static char __pyx_k__g_src[] = "g_src"; static char __pyx_k__gtype[] = "gtype"; static char __pyx_k__hi_nd[] = "hi_nd"; static char __pyx_k__ibeta[] = "ibeta"; static char __pyx_k__index[] = "index"; static char __pyx_k__int32[] = "int32"; static char __pyx_k__int64[] = "int64"; static char __pyx_k__lbeta[] = "lbeta"; static char __pyx_k__ld_nd[] = "ld_nd"; static char __pyx_k__ldinc[] = "ldinc"; static char __pyx_k__ldval[] = "ldval"; static char __pyx_k__limit[] = "limit"; static char __pyx_k__llinc[] = "llinc"; static char __pyx_k__llval[] = "llval"; static char __pyx_k__lo_nd[] = "lo_nd"; static char __pyx_k__mutex[] = "mutex"; static char __pyx_k__nbacc[] = "nbacc"; static char __pyx_k__nbget[] = "nbget"; static char __pyx_k__nbput[] = "nbput"; static char __pyx_k__norm1[] = "norm1"; static char __pyx_k__numpy[] = "numpy"; static char __pyx_k__procs[] = "procs"; static char __pyx_k__range[] = "range"; static char __pyx_k__recip[] = "recip"; static char __pyx_k__scale[] = "scale"; static char __pyx_k__solve[] = "solve"; static char __pyx_k__start[] = "start"; static char __pyx_k__trans[] = "trans"; static char __pyx_k__value[] = "value"; static char __pyx_k__vbeta[] = "vbeta"; static char __pyx_k__width[] = "width"; static char __pyx_k__wtime[] = "wtime"; static char __pyx_k__zeros[] = "zeros"; static char __pyx_k__C_CHAR[] = "C_CHAR"; static char __pyx_k__C_DCPL[] = "C_DCPL"; static char __pyx_k__C_LDBL[] = "C_LDBL"; static char __pyx_k__C_LONG[] = "C_LONG"; static char __pyx_k__C_SCPL[] = "C_SCPL"; static char __pyx_k__F_BYTE[] = "F_BYTE"; static char __pyx_k__F_DCPL[] = "F_DCPL"; static char __pyx_k__F_REAL[] = "F_REAL"; static char __pyx_k__F_SCPL[] = "F_SCPL"; static char __pyx_k__absmax[] = "absmax"; static char __pyx_k__absmin[] = "absmin"; static char __pyx_k__access[] = "access"; static char __pyx_k__ahi_nd[] = "ahi_nd"; static char __pyx_k__alo_nd[] = "alo_nd"; static char __pyx_k__atexit[] = "atexit"; static char __pyx_k__bhi_nd[] = "bhi_nd"; static char __pyx_k__blo_nd[] = "blo_nd"; static char __pyx_k__brdcst[] = "brdcst"; static char __pyx_k__buffer[] = "buffer"; static char __pyx_k__c_excl[] = "c_excl"; static char __pyx_k__chi_nd[] = "chi_nd"; static char __pyx_k__clo_nd[] = "clo_nd"; static char __pyx_k__create[] = "create"; static char __pyx_k__ctrans[] = "ctrans"; static char __pyx_k__dalpha[] = "dalpha"; static char __pyx_k__dcbeta[] = "dcbeta"; static char __pyx_k__dimlen[] = "dimlen"; static char __pyx_k__double[] = "double"; static char __pyx_k__dstart[] = "dstart"; static char __pyx_k__dvalue[] = "dvalue"; static char __pyx_k__falpha[] = "falpha"; static char __pyx_k__fcbeta[] = "fcbeta"; static char __pyx_k__fstart[] = "fstart"; static char __pyx_k__fvalue[] = "fvalue"; static char __pyx_k__gather[] = "gather"; static char __pyx_k__gatype[] = "gatype"; static char __pyx_k__hi_dst[] = "hi_dst"; static char __pyx_k__ialpha[] = "ialpha"; static char __pyx_k__icount[] = "icount"; static char __pyx_k__istart[] = "istart"; static char __pyx_k__ivalue[] = "ivalue"; static char __pyx_k__lalpha[] = "lalpha"; static char __pyx_k__ldbeta[] = "ldbeta"; static char __pyx_k__llbeta[] = "llbeta"; static char __pyx_k__lo_dst[] = "lo_dst"; static char __pyx_k__locate[] = "locate"; static char __pyx_k__lstart[] = "lstart"; static char __pyx_k__lvalue[] = "lvalue"; static char __pyx_k__map_nd[] = "map_nd"; static char __pyx_k__median[] = "median"; static char __pyx_k__mhi_nd[] = "mhi_nd"; static char __pyx_k__mlo_nd[] = "mlo_nd"; static char __pyx_k__nblock[] = "nblock"; static char __pyx_k__nbwait[] = "nbwait"; static char __pyx_k__nnodes[] = "nnodes"; static char __pyx_k__nodeid[] = "nodeid"; static char __pyx_k__number[] = "number"; static char __pyx_k__pgroup[] = "pgroup"; static char __pyx_k__pretty[] = "pretty"; static char __pyx_k__result[] = "result"; static char __pyx_k__single[] = "single"; static char __pyx_k__slices[] = "slices"; static char __pyx_k__transa[] = "transa"; static char __pyx_k__transb[] = "transb"; static char __pyx_k__unlock[] = "unlock"; static char __pyx_k__unpack[] = "unpack"; static char __pyx_k__valpha[] = "valpha"; static char __pyx_k__values[] = "values"; static char __pyx_k__vstart[] = "vstart"; static char __pyx_k__vvalue[] = "vvalue"; static char __pyx_k__C_FLOAT[] = "C_FLOAT"; static char __pyx_k__C_LDCPL[] = "C_LDCPL"; static char __pyx_k__apretty[] = "apretty"; static char __pyx_k__asarray[] = "asarray"; static char __pyx_k__control[] = "control"; static char __pyx_k__dcalpha[] = "dcalpha"; static char __pyx_k__dcstart[] = "dcstart"; static char __pyx_k__dcvalue[] = "dcvalue"; static char __pyx_k__destroy[] = "destroy"; static char __pyx_k__dims_nd[] = "dims_nd"; static char __pyx_k__evalues[] = "evalues"; static char __pyx_k__fcalpha[] = "fcalpha"; static char __pyx_k__fcstart[] = "fcstart"; static char __pyx_k__fcvalue[] = "fcvalue"; static char __pyx_k__float32[] = "float32"; static char __pyx_k__float64[] = "float64"; static char __pyx_k__gop_add[] = "gop_add"; static char __pyx_k__gop_max[] = "gop_max"; static char __pyx_k__gop_min[] = "gop_min"; static char __pyx_k__hi_proc[] = "hi_proc"; static char __pyx_k__ldalpha[] = "ldalpha"; static char __pyx_k__ldstart[] = "ldstart"; static char __pyx_k__ldvalue[] = "ldvalue"; static char __pyx_k__list_nd[] = "list_nd"; static char __pyx_k__llalpha[] = "llalpha"; static char __pyx_k__llstart[] = "llstart"; static char __pyx_k__llvalue[] = "llvalue"; static char __pyx_k__lo_proc[] = "lo_proc"; static char __pyx_k__mapc_nd[] = "mapc_nd"; static char __pyx_k__message[] = "message"; static char __pyx_k__release[] = "release"; static char __pyx_k__reshape[] = "reshape"; static char __pyx_k__scatter[] = "scatter"; static char __pyx_k__strides[] = "strides"; static char __pyx_k__ta_char[] = "ta_char"; static char __pyx_k__tb_char[] = "tb_char"; static char __pyx_k__trans_c[] = "trans_c"; static char __pyx_k__typenum[] = "typenum"; static char __pyx_k__uses_ma[] = "uses_ma"; static char __pyx_k__verbose[] = "verbose"; static char __pyx_k____main__[] = "__main__"; static char __pyx_k____test__[] = "__test__"; static char __pyx_k__allocate[] = "allocate"; static char __pyx_k__block_nd[] = "block_nd"; static char __pyx_k__chunk_nd[] = "chunk_nd"; static char __pyx_k__diag_std[] = "diag_std"; static char __pyx_k__float128[] = "float128"; static char __pyx_k__get_diag[] = "get_diag"; static char __pyx_k__itemsize[] = "itemsize"; static char __pyx_k__longlong[] = "longlong"; static char __pyx_k__lu_solve[] = "lu_solve"; static char __pyx_k__nbhandle[] = "nbhandle"; static char __pyx_k__np_guess[] = "np_guess"; static char __pyx_k__read_inc[] = "read_inc"; static char __pyx_k__register[] = "register"; static char __pyx_k__scan_add[] = "scan_add"; static char __pyx_k__set_data[] = "set_data"; static char __pyx_k__sometrue[] = "sometrue"; static char __pyx_k__step_max[] = "step_max"; static char __pyx_k__width_nd[] = "width_nd"; static char __pyx_k__TYPE_BASE[] = "TYPE_BASE"; static char __pyx_k__TypeError[] = "TypeError"; static char __pyx_k___to_dtype[] = "_to_dtype"; static char __pyx_k__abs_value[] = "abs_value"; static char __pyx_k__buffer_nd[] = "buffer_nd"; static char __pyx_k__complex64[] = "complex64"; static char __pyx_k__dimension[] = "dimension"; static char __pyx_k__duplicate[] = "duplicate"; static char __pyx_k__ga_dcbeta[] = "ga_dcbeta"; static char __pyx_k__ga_fcbeta[] = "ga_fcbeta"; static char __pyx_k__get_debug[] = "get_debug"; static char __pyx_k__llt_solve[] = "llt_solve"; static char __pyx_k__mask_sync[] = "mask_sync"; static char __pyx_k__nblock_nd[] = "nblock_nd"; static char __pyx_k__np_result[] = "np_result"; static char __pyx_k__num_group[] = "num_group"; static char __pyx_k__proc_grid[] = "proc_grid"; static char __pyx_k__randomize[] = "randomize"; static char __pyx_k__scan_copy[] = "scan_copy"; static char __pyx_k__set_chunk[] = "set_chunk"; static char __pyx_k__set_debug[] = "set_debug"; static char __pyx_k__subsarray[] = "subsarray"; static char __pyx_k__subscript[] = "subscript"; static char __pyx_k__summarize[] = "summarize"; static char __pyx_k__terminate[] = "terminate"; static char __pyx_k__transpose[] = "transpose"; static char __pyx_k__values_nd[] = "values_nd"; static char __pyx_k__C_LONGLONG[] = "C_LONGLONG"; static char __pyx_k__ValueError[] = "ValueError"; static char __pyx_k____import__[] = "__import__"; static char __pyx_k__block_dims[] = "block_dims"; static char __pyx_k__complex128[] = "complex128"; static char __pyx_k__complex256[] = "complex256"; static char __pyx_k__diag_reuse[] = "diag_reuse"; static char __pyx_k__ga_dcalpha[] = "ga_dcalpha"; static char __pyx_k__ga_fcalpha[] = "ga_fcalpha"; static char __pyx_k__gop_absmax[] = "gop_absmax"; static char __pyx_k__gop_absmin[] = "gop_absmin"; static char __pyx_k__has_ghosts[] = "has_ghosts"; static char __pyx_k__init_fence[] = "init_fence"; static char __pyx_k__initialize[] = "initialize"; static char __pyx_k__num_blocks[] = "num_blocks"; static char __pyx_k__pgroup_gop[] = "pgroup_gop"; static char __pyx_k__print_file[] = "print_file"; static char __pyx_k__scale_cols[] = "scale_cols"; static char __pyx_k__scale_rows[] = "scale_rows"; static char __pyx_k__set_ghosts[] = "set_ghosts"; static char __pyx_k__set_pgroup[] = "set_pgroup"; static char __pyx_k__spd_invert[] = "spd_invert"; static char __pyx_k__symmetrize[] = "symmetrize"; static char __pyx_k____builtin__[] = "__builtin__"; static char __pyx_k__char_transa[] = "char_transa"; static char __pyx_k__char_transb[] = "char_transb"; static char __pyx_k__elem_divide[] = "elem_divide"; static char __pyx_k__initialized[] = "initialized"; static char __pyx_k__is_mirrored[] = "is_mirrored"; static char __pyx_k__map_reshape[] = "map_reshape"; static char __pyx_k__pgroup_sync[] = "pgroup_sync"; static char __pyx_k__print_patch[] = "print_patch"; static char __pyx_k__print_stats[] = "print_stats"; static char __pyx_k__scatter_acc[] = "scatter_acc"; static char __pyx_k__select_elem[] = "select_elem"; static char __pyx_k__strided_acc[] = "strided_acc"; static char __pyx_k__strided_get[] = "strided_get"; static char __pyx_k__strided_put[] = "strided_put"; static char __pyx_k__C_CONTIGUOUS[] = "C_CONTIGUOUS"; static char __pyx_k__RuntimeError[] = "RuntimeError"; static char __pyx_k__access_block[] = "access_block"; static char __pyx_k__add_constant[] = "add_constant"; static char __pyx_k__add_diagonal[] = "add_diagonal"; static char __pyx_k__check_handle[] = "check_handle"; static char __pyx_k__create_irreg[] = "create_irreg"; static char __pyx_k__elem_maximum[] = "elem_maximum"; static char __pyx_k__elem_minimum[] = "elem_minimum"; static char __pyx_k__gop_multiply[] = "gop_multiply"; static char __pyx_k__inquire_name[] = "inquire_name"; static char __pyx_k__matmul_patch[] = "matmul_patch"; static char __pyx_k__memory_avail[] = "memory_avail"; static char __pyx_k__periodic_acc[] = "periodic_acc"; static char __pyx_k__periodic_get[] = "periodic_get"; static char __pyx_k__periodic_put[] = "periodic_put"; static char __pyx_k__pgroup_split[] = "pgroup_split"; static char __pyx_k__print_stdout[] = "print_stdout"; static char __pyx_k__proc_grid_nd[] = "proc_grid_nd"; static char __pyx_k__set_diagonal[] = "set_diagonal"; static char __pyx_k__subscript_nd[] = "subscript_nd"; static char __pyx_k__total_blocks[] = "total_blocks"; static char __pyx_k__access_ghosts[] = "access_ghosts"; static char __pyx_k__compare_distr[] = "compare_distr"; static char __pyx_k__create_ghosts[] = "create_ghosts"; static char __pyx_k__create_handle[] = "create_handle"; static char __pyx_k__elem_multiply[] = "elem_multiply"; static char __pyx_k__inquire_dtype[] = "inquire_dtype"; static char __pyx_k__locate_nnodes[] = "locate_nnodes"; static char __pyx_k__locate_region[] = "locate_region"; static char __pyx_k__norm_infinity[] = "norm_infinity"; static char __pyx_k__pgroup_brdcst[] = "pgroup_brdcst"; static char __pyx_k__pgroup_create[] = "pgroup_create"; static char __pyx_k__pgroup_nnodes[] = "pgroup_nnodes"; static char __pyx_k__pgroup_nodeid[] = "pgroup_nodeid"; static char __pyx_k__proc_topology[] = "proc_topology"; static char __pyx_k__register_type[] = "register_type"; static char __pyx_k__release_block[] = "release_block"; static char __pyx_k__shift_diagoal[] = "shift_diagoal"; static char __pyx_k__subsarray1_nd[] = "subsarray1_nd"; static char __pyx_k__subsarray2_nd[] = "subsarray2_nd"; static char __pyx_k__update_ghosts[] = "update_ghosts"; static char __pyx_k__zero_diagonal[] = "zero_diagonal"; static char __pyx_k__cluster_nnodes[] = "cluster_nnodes"; static char __pyx_k__cluster_nodeid[] = "cluster_nodeid"; static char __pyx_k__cluster_nprocs[] = "cluster_nprocs"; static char __pyx_k__cluster_procid[] = "cluster_procid"; static char __pyx_k__create_mutexes[] = "create_mutexes"; static char __pyx_k__get_block_info[] = "get_block_info"; static char __pyx_k__initialize_ltd[] = "initialize_ltd"; static char __pyx_k__inquire_memory[] = "inquire_memory"; static char __pyx_k__memory_limited[] = "memory_limited"; static char __pyx_k__merge_mirrored[] = "merge_mirrored"; static char __pyx_k__pgroup_destroy[] = "pgroup_destroy"; static char __pyx_k__pgroup_gop_add[] = "pgroup_gop_add"; static char __pyx_k__pgroup_gop_max[] = "pgroup_gop_max"; static char __pyx_k__pgroup_gop_min[] = "pgroup_gop_min"; static char __pyx_k__register_dtype[] = "register_dtype"; static char __pyx_k__release_ghosts[] = "release_ghosts"; static char __pyx_k__release_update[] = "release_update"; static char __pyx_k__set_array_name[] = "set_array_name"; static char __pyx_k__set_restricted[] = "set_restricted"; static char __pyx_k____pyx_getbuffer[] = "__pyx_getbuffer"; static char __pyx_k__deregister_type[] = "deregister_type"; static char __pyx_k__destroy_mutexes[] = "destroy_mutexes"; static char __pyx_k__select_elem_max[] = "select_elem_max"; static char __pyx_k__select_elem_min[] = "select_elem_min"; static char __pyx_k__set_irreg_distr[] = "set_irreg_distr"; static char __pyx_k__WORLD_PROC_GROUP[] = "WORLD_PROC_GROUP"; static char __pyx_k__pgroup_get_world[] = "pgroup_get_world"; static char __pyx_k__set_block_cyclic[] = "set_block_cyclic"; static char __pyx_k__set_memory_limit[] = "set_memory_limit"; static char __pyx_k__update_ghost_dir[] = "update_ghost_dir"; static char __pyx_k__access_block_grid[] = "access_block_grid"; static char __pyx_k__ascontiguousarray[] = "ascontiguousarray"; static char __pyx_k__merge_distr_patch[] = "merge_distr_patch"; static char __pyx_k__pgroup_get_mirror[] = "pgroup_get_mirror"; static char __pyx_k__pgroup_gop_absmax[] = "pgroup_gop_absmax"; static char __pyx_k__pgroup_gop_absmin[] = "pgroup_gop_absmin"; static char __pyx_k__pgroup_absolute_id[] = "pgroup_absolute_id"; static char __pyx_k__pgroup_get_default[] = "pgroup_get_default"; static char __pyx_k__pgroup_set_default[] = "pgroup_set_default"; static char __pyx_k__pgroup_split_irreg[] = "pgroup_split_irreg"; static char __pyx_k__print_distribution[] = "print_distribution"; static char __pyx_k__release_block_grid[] = "release_block_grid"; static char __pyx_k__NotImplementedError[] = "NotImplementedError"; static char __pyx_k____pyx_releasebuffer[] = "__pyx_releasebuffer"; static char __pyx_k__cluster_proc_nodeid[] = "cluster_proc_nodeid"; static char __pyx_k__create_ghosts_irreg[] = "create_ghosts_irreg"; static char __pyx_k__pgroup_gop_multiply[] = "pgroup_gop_multiply"; static PyObject *__pyx_kp_s_1; static PyObject *__pyx_kp_s_10; static PyObject *__pyx_kp_s_11; static PyObject *__pyx_kp_s_12; static PyObject *__pyx_kp_s_13; static PyObject *__pyx_kp_s_14; static PyObject *__pyx_kp_s_15; static PyObject *__pyx_kp_s_17; static PyObject *__pyx_kp_s_18; static PyObject *__pyx_kp_s_19; static PyObject *__pyx_kp_s_2; static PyObject *__pyx_kp_s_20; static PyObject *__pyx_kp_s_21; static PyObject *__pyx_kp_s_22; static PyObject *__pyx_kp_s_23; static PyObject *__pyx_kp_s_24; static PyObject *__pyx_kp_s_25; static PyObject *__pyx_kp_s_26; static PyObject *__pyx_kp_s_27; static PyObject *__pyx_kp_s_28; static PyObject *__pyx_kp_s_3; static PyObject *__pyx_kp_s_30; static PyObject *__pyx_n_s_300; static PyObject *__pyx_n_s_303; static PyObject *__pyx_kp_s_31; static PyObject *__pyx_n_s_310; static PyObject *__pyx_n_s_313; static PyObject *__pyx_n_s_316; static PyObject *__pyx_n_s_319; static PyObject *__pyx_kp_s_32; static PyObject *__pyx_n_s_322; static PyObject *__pyx_kp_s_33; static PyObject *__pyx_n_s_349; static PyObject *__pyx_kp_s_37; static PyObject *__pyx_n_s_370; static PyObject *__pyx_kp_u_39; static PyObject *__pyx_kp_s_4; static PyObject *__pyx_kp_u_409; static PyObject *__pyx_kp_u_41; static PyObject *__pyx_kp_u_410; static PyObject *__pyx_kp_u_411; static PyObject *__pyx_kp_u_412; static PyObject *__pyx_kp_u_43; static PyObject *__pyx_kp_u_45; static PyObject *__pyx_kp_u_46; static PyObject *__pyx_kp_u_49; static PyObject *__pyx_kp_s_5; static PyObject *__pyx_kp_s_54; static PyObject *__pyx_n_s_55; static PyObject *__pyx_kp_s_6; static PyObject *__pyx_kp_s_7; static PyObject *__pyx_n_s_72; static PyObject *__pyx_n_s_75; static PyObject *__pyx_kp_s_8; static PyObject *__pyx_n_s__C_CHAR; static PyObject *__pyx_n_s__C_CONTIGUOUS; static PyObject *__pyx_n_s__C_DBL; static PyObject *__pyx_n_s__C_DCPL; static PyObject *__pyx_n_s__C_FLOAT; static PyObject *__pyx_n_s__C_INT; static PyObject *__pyx_n_s__C_LDBL; static PyObject *__pyx_n_s__C_LDCPL; static PyObject *__pyx_n_s__C_LONG; static PyObject *__pyx_n_s__C_LONGLONG; static PyObject *__pyx_n_s__C_SCPL; static PyObject *__pyx_n_s__F_BYTE; static PyObject *__pyx_n_s__F_DBL; static PyObject *__pyx_n_s__F_DCPL; static PyObject *__pyx_n_s__F_INT; static PyObject *__pyx_n_s__F_LOG; static PyObject *__pyx_n_s__F_REAL; static PyObject *__pyx_n_s__F_SCPL; static PyObject *__pyx_n_s__NotImplementedError; static PyObject *__pyx_n_s__RuntimeError; static PyObject *__pyx_n_s__TYPE_BASE; static PyObject *__pyx_n_s__TypeError; static PyObject *__pyx_n_s__ValueError; static PyObject *__pyx_n_s__WORLD_PROC_GROUP; static PyObject *__pyx_n_s__X; static PyObject *__pyx_n_s__X_nd; static PyObject *__pyx_n_s____builtin__; static PyObject *__pyx_n_s____import__; static PyObject *__pyx_n_s____main__; static PyObject *__pyx_n_s____pyx_getbuffer; static PyObject *__pyx_n_s____pyx_releasebuffer; static PyObject *__pyx_n_s____test__; static PyObject *__pyx_n_s___to_dtype; static PyObject *__pyx_n_s__abs_value; static PyObject *__pyx_n_s__absmax; static PyObject *__pyx_n_s__absmin; static PyObject *__pyx_n_s__acc; static PyObject *__pyx_n_s__access; static PyObject *__pyx_n_s__access_block; static PyObject *__pyx_n_s__access_block_grid; static PyObject *__pyx_n_s__access_ghosts; static PyObject *__pyx_n_s__add; static PyObject *__pyx_n_s__add_constant; static PyObject *__pyx_n_s__add_diagonal; static PyObject *__pyx_n_s__ahi; static PyObject *__pyx_n_s__ahi_nd; static PyObject *__pyx_n_s__all; static PyObject *__pyx_n_s__allocate; static PyObject *__pyx_n_s__alo; static PyObject *__pyx_n_s__alo_nd; static PyObject *__pyx_n_s__alpha; static PyObject *__pyx_n_s__any; static PyObject *__pyx_n_s__apretty; static PyObject *__pyx_n_s__array; static PyObject *__pyx_n_s__asarray; static PyObject *__pyx_n_s__ascontiguousarray; static PyObject *__pyx_n_s__atexit; static PyObject *__pyx_n_s__beta; static PyObject *__pyx_n_s__bhi; static PyObject *__pyx_n_s__bhi_nd; static PyObject *__pyx_n_s__blo; static PyObject *__pyx_n_s__blo_nd; static PyObject *__pyx_n_s__block; static PyObject *__pyx_n_s__block_dims; static PyObject *__pyx_n_s__block_nd; static PyObject *__pyx_n_s__brdcst; static PyObject *__pyx_n_s__buffer; static PyObject *__pyx_n_s__buffer_nd; static PyObject *__pyx_n_s__bytes; static PyObject *__pyx_n_s__c_excl; static PyObject *__pyx_n_s__c_hi; static PyObject *__pyx_n_s__c_lo; static PyObject *__pyx_n_s__char_transa; static PyObject *__pyx_n_s__char_transb; static PyObject *__pyx_n_s__check_handle; static PyObject *__pyx_n_s__chi; static PyObject *__pyx_n_s__chi_nd; static PyObject *__pyx_n_s__chunk; static PyObject *__pyx_n_s__chunk_nd; static PyObject *__pyx_n_s__clo; static PyObject *__pyx_n_s__clo_nd; static PyObject *__pyx_n_s__cluster_nnodes; static PyObject *__pyx_n_s__cluster_nodeid; static PyObject *__pyx_n_s__cluster_nprocs; static PyObject *__pyx_n_s__cluster_proc_nodeid; static PyObject *__pyx_n_s__cluster_procid; static PyObject *__pyx_n_s__code; static PyObject *__pyx_n_s__color; static PyObject *__pyx_n_s__compare_distr; static PyObject *__pyx_n_s__complex128; static PyObject *__pyx_n_s__complex256; static PyObject *__pyx_n_s__complex64; static PyObject *__pyx_n_s__control; static PyObject *__pyx_n_s__coord; static PyObject *__pyx_n_s__copy; static PyObject *__pyx_n_s__create; static PyObject *__pyx_n_s__create_ghosts; static PyObject *__pyx_n_s__create_ghosts_irreg; static PyObject *__pyx_n_s__create_handle; static PyObject *__pyx_n_s__create_irreg; static PyObject *__pyx_n_s__create_mutexes; static PyObject *__pyx_n_s__ctrans; static PyObject *__pyx_n_s__dalpha; static PyObject *__pyx_n_s__data; static PyObject *__pyx_n_s__dbeta; static PyObject *__pyx_n_s__dcalpha; static PyObject *__pyx_n_s__dcbeta; static PyObject *__pyx_n_s__dcinc; static PyObject *__pyx_n_s__dcstart; static PyObject *__pyx_n_s__dcval; static PyObject *__pyx_n_s__dcvalue; static PyObject *__pyx_n_s__debug; static PyObject *__pyx_n_s__deregister_type; static PyObject *__pyx_n_s__destroy; static PyObject *__pyx_n_s__destroy_mutexes; static PyObject *__pyx_n_s__diag; static PyObject *__pyx_n_s__diag_reuse; static PyObject *__pyx_n_s__diag_std; static PyObject *__pyx_n_s__dimension; static PyObject *__pyx_n_s__dimlen; static PyObject *__pyx_n_s__dims; static PyObject *__pyx_n_s__dims_nd; static PyObject *__pyx_n_s__dinc; static PyObject *__pyx_n_s__dir; static PyObject *__pyx_n_s__dot; static PyObject *__pyx_n_s__double; static PyObject *__pyx_n_s__dstart; static PyObject *__pyx_n_s__dtype; static PyObject *__pyx_n_s__duplicate; static PyObject *__pyx_n_s__dval; static PyObject *__pyx_n_s__dvalue; static PyObject *__pyx_n_s__elem_divide; static PyObject *__pyx_n_s__elem_maximum; static PyObject *__pyx_n_s__elem_minimum; static PyObject *__pyx_n_s__elem_multiply; static PyObject *__pyx_n_s__elems; static PyObject *__pyx_n_s__enum; static PyObject *__pyx_n_s__error; static PyObject *__pyx_n_s__evalues; static PyObject *__pyx_n_s__excl; static PyObject *__pyx_n_s__falpha; static PyObject *__pyx_n_s__fbeta; static PyObject *__pyx_n_s__fcalpha; static PyObject *__pyx_n_s__fcbeta; static PyObject *__pyx_n_s__fcinc; static PyObject *__pyx_n_s__fcstart; static PyObject *__pyx_n_s__fcval; static PyObject *__pyx_n_s__fcvalue; static PyObject *__pyx_n_s__fence; static PyObject *__pyx_n_s__file; static PyObject *__pyx_n_s__fill; static PyObject *__pyx_n_s__finc; static PyObject *__pyx_n_s__first; static PyObject *__pyx_n_s__flag; static PyObject *__pyx_n_s__flags; static PyObject *__pyx_n_s__float128; static PyObject *__pyx_n_s__float32; static PyObject *__pyx_n_s__float64; static PyObject *__pyx_n_s__fstart; static PyObject *__pyx_n_s__fval; static PyObject *__pyx_n_s__fvalue; static PyObject *__pyx_n_s__g_a; static PyObject *__pyx_n_s__g_b; static PyObject *__pyx_n_s__g_c; static PyObject *__pyx_n_s__g_dst; static PyObject *__pyx_n_s__g_m; static PyObject *__pyx_n_s__g_msk; static PyObject *__pyx_n_s__g_s; static PyObject *__pyx_n_s__g_src; static PyObject *__pyx_n_s__g_v; static PyObject *__pyx_n_s__ga_dcalpha; static PyObject *__pyx_n_s__ga_dcbeta; static PyObject *__pyx_n_s__ga_fcalpha; static PyObject *__pyx_n_s__ga_fcbeta; static PyObject *__pyx_n_s__gather; static PyObject *__pyx_n_s__gatype; static PyObject *__pyx_n_s__gdcv; static PyObject *__pyx_n_s__gemm; static PyObject *__pyx_n_s__get; static PyObject *__pyx_n_s__get_block_info; static PyObject *__pyx_n_s__get_debug; static PyObject *__pyx_n_s__get_diag; static PyObject *__pyx_n_s__gfcv; static PyObject *__pyx_n_s__gop; static PyObject *__pyx_n_s__gop_absmax; static PyObject *__pyx_n_s__gop_absmin; static PyObject *__pyx_n_s__gop_add; static PyObject *__pyx_n_s__gop_max; static PyObject *__pyx_n_s__gop_min; static PyObject *__pyx_n_s__gop_multiply; static PyObject *__pyx_n_s__gtype; static PyObject *__pyx_n_s__h; static PyObject *__pyx_n_s__has_ghosts; static PyObject *__pyx_n_s__hi; static PyObject *__pyx_n_s__hi_dst; static PyObject *__pyx_n_s__hi_nd; static PyObject *__pyx_n_s__hi_proc; static PyObject *__pyx_n_s__i; static PyObject *__pyx_n_s__ialpha; static PyObject *__pyx_n_s__ibeta; static PyObject *__pyx_n_s__icount; static PyObject *__pyx_n_s__idx; static PyObject *__pyx_n_s__iinc; static PyObject *__pyx_n_s__imag; static PyObject *__pyx_n_s__inc; static PyObject *__pyx_n_s__index; static PyObject *__pyx_n_s__init_fence; static PyObject *__pyx_n_s__initialize; static PyObject *__pyx_n_s__initialize_ltd; static PyObject *__pyx_n_s__initialized; static PyObject *__pyx_n_s__inquire_dtype; static PyObject *__pyx_n_s__inquire_memory; static PyObject *__pyx_n_s__inquire_name; static PyObject *__pyx_n_s__int32; static PyObject *__pyx_n_s__int64; static PyObject *__pyx_n_s__int8; static PyObject *__pyx_n_s__intc; static PyObject *__pyx_n_s__is_mirrored; static PyObject *__pyx_n_s__istart; static PyObject *__pyx_n_s__itemsize; static PyObject *__pyx_n_s__ival; static PyObject *__pyx_n_s__ivalue; static PyObject *__pyx_n_s__k; static PyObject *__pyx_n_s__l; static PyObject *__pyx_n_s__lalpha; static PyObject *__pyx_n_s__last; static PyObject *__pyx_n_s__lbeta; static PyObject *__pyx_n_s__ld_nd; static PyObject *__pyx_n_s__ldalpha; static PyObject *__pyx_n_s__ldbeta; static PyObject *__pyx_n_s__ldinc; static PyObject *__pyx_n_s__ldstart; static PyObject *__pyx_n_s__ldval; static PyObject *__pyx_n_s__ldvalue; static PyObject *__pyx_n_s__limit; static PyObject *__pyx_n_s__linc; static PyObject *__pyx_n_s__list; static PyObject *__pyx_n_s__list_nd; static PyObject *__pyx_n_s__llalpha; static PyObject *__pyx_n_s__llbeta; static PyObject *__pyx_n_s__llinc; static PyObject *__pyx_n_s__llstart; static PyObject *__pyx_n_s__llt_solve; static PyObject *__pyx_n_s__llval; static PyObject *__pyx_n_s__llvalue; static PyObject *__pyx_n_s__lo; static PyObject *__pyx_n_s__lo_dst; static PyObject *__pyx_n_s__lo_nd; static PyObject *__pyx_n_s__lo_proc; static PyObject *__pyx_n_s__locate; static PyObject *__pyx_n_s__locate_nnodes; static PyObject *__pyx_n_s__locate_region; static PyObject *__pyx_n_s__lock; static PyObject *__pyx_n_s__long; static PyObject *__pyx_n_s__longlong; static PyObject *__pyx_n_s__lstart; static PyObject *__pyx_n_s__lu_solve; static PyObject *__pyx_n_s__lval; static PyObject *__pyx_n_s__lvalue; static PyObject *__pyx_n_s__m; static PyObject *__pyx_n_s__map; static PyObject *__pyx_n_s__map_nd; static PyObject *__pyx_n_s__map_reshape; static PyObject *__pyx_n_s__mapc; static PyObject *__pyx_n_s__mapc_nd; static PyObject *__pyx_n_s__mask_sync; static PyObject *__pyx_n_s__matmul_patch; static PyObject *__pyx_n_s__max; static PyObject *__pyx_n_s__median; static PyObject *__pyx_n_s__memory_avail; static PyObject *__pyx_n_s__memory_limited; static PyObject *__pyx_n_s__merge_distr_patch; static PyObject *__pyx_n_s__merge_mirrored; static PyObject *__pyx_n_s__message; static PyObject *__pyx_n_s__mhi; static PyObject *__pyx_n_s__mhi_nd; static PyObject *__pyx_n_s__min; static PyObject *__pyx_n_s__mlo; static PyObject *__pyx_n_s__mlo_nd; static PyObject *__pyx_n_s__mutex; static PyObject *__pyx_n_s__n; static PyObject *__pyx_n_s__name; static PyObject *__pyx_n_s__nbacc; static PyObject *__pyx_n_s__nbget; static PyObject *__pyx_n_s__nbhandle; static PyObject *__pyx_n_s__nblock; static PyObject *__pyx_n_s__nblock_nd; static PyObject *__pyx_n_s__nbput; static PyObject *__pyx_n_s__nbwait; static PyObject *__pyx_n_s__ndim; static PyObject *__pyx_n_s__nm; static PyObject *__pyx_n_s__nnodes; static PyObject *__pyx_n_s__node; static PyObject *__pyx_n_s__nodeid; static PyObject *__pyx_n_s__norm1; static PyObject *__pyx_n_s__norm_infinity; static PyObject *__pyx_n_s__np; static PyObject *__pyx_n_s__np_guess; static PyObject *__pyx_n_s__np_result; static PyObject *__pyx_n_s__num; static PyObject *__pyx_n_s__num_blocks; static PyObject *__pyx_n_s__num_group; static PyObject *__pyx_n_s__number; static PyObject *__pyx_n_s__numpy; static PyObject *__pyx_n_s__ones; static PyObject *__pyx_n_s__op; static PyObject *__pyx_n_s__pack; static PyObject *__pyx_n_s__pdcv; static PyObject *__pyx_n_s__periodic_acc; static PyObject *__pyx_n_s__periodic_get; static PyObject *__pyx_n_s__periodic_put; static PyObject *__pyx_n_s__pfcv; static PyObject *__pyx_n_s__pgroup; static PyObject *__pyx_n_s__pgroup_absolute_id; static PyObject *__pyx_n_s__pgroup_brdcst; static PyObject *__pyx_n_s__pgroup_create; static PyObject *__pyx_n_s__pgroup_destroy; static PyObject *__pyx_n_s__pgroup_get_default; static PyObject *__pyx_n_s__pgroup_get_mirror; static PyObject *__pyx_n_s__pgroup_get_world; static PyObject *__pyx_n_s__pgroup_gop; static PyObject *__pyx_n_s__pgroup_gop_absmax; static PyObject *__pyx_n_s__pgroup_gop_absmin; static PyObject *__pyx_n_s__pgroup_gop_add; static PyObject *__pyx_n_s__pgroup_gop_max; static PyObject *__pyx_n_s__pgroup_gop_min; static PyObject *__pyx_n_s__pgroup_gop_multiply; static PyObject *__pyx_n_s__pgroup_nnodes; static PyObject *__pyx_n_s__pgroup_nodeid; static PyObject *__pyx_n_s__pgroup_set_default; static PyObject *__pyx_n_s__pgroup_split; static PyObject *__pyx_n_s__pgroup_split_irreg; static PyObject *__pyx_n_s__pgroup_sync; static PyObject *__pyx_n_s__pid; static PyObject *__pyx_n_s__pretty; static PyObject *__pyx_n_s__print_distribution; static PyObject *__pyx_n_s__print_file; static PyObject *__pyx_n_s__print_patch; static PyObject *__pyx_n_s__print_stats; static PyObject *__pyx_n_s__print_stdout; static PyObject *__pyx_n_s__proc; static PyObject *__pyx_n_s__proc_grid; static PyObject *__pyx_n_s__proc_grid_nd; static PyObject *__pyx_n_s__proc_topology; static PyObject *__pyx_n_s__procs; static PyObject *__pyx_n_s__prod; static PyObject *__pyx_n_s__ptr; static PyObject *__pyx_n_s__put; static PyObject *__pyx_n_s__randomize; static PyObject *__pyx_n_s__range; static PyObject *__pyx_n_s__read_inc; static PyObject *__pyx_n_s__real; static PyObject *__pyx_n_s__recip; static PyObject *__pyx_n_s__register; static PyObject *__pyx_n_s__register_dtype; static PyObject *__pyx_n_s__register_type; static PyObject *__pyx_n_s__release; static PyObject *__pyx_n_s__release_block; static PyObject *__pyx_n_s__release_block_grid; static PyObject *__pyx_n_s__release_ghosts; static PyObject *__pyx_n_s__release_update; static PyObject *__pyx_n_s__reshape; static PyObject *__pyx_n_s__result; static PyObject *__pyx_n_s__root; static PyObject *__pyx_n_s__scale; static PyObject *__pyx_n_s__scale_cols; static PyObject *__pyx_n_s__scale_rows; static PyObject *__pyx_n_s__scan_add; static PyObject *__pyx_n_s__scan_copy; static PyObject *__pyx_n_s__scatter; static PyObject *__pyx_n_s__scatter_acc; static PyObject *__pyx_n_s__select_elem; static PyObject *__pyx_n_s__select_elem_max; static PyObject *__pyx_n_s__select_elem_min; static PyObject *__pyx_n_s__set_array_name; static PyObject *__pyx_n_s__set_block_cyclic; static PyObject *__pyx_n_s__set_chunk; static PyObject *__pyx_n_s__set_data; static PyObject *__pyx_n_s__set_debug; static PyObject *__pyx_n_s__set_diagonal; static PyObject *__pyx_n_s__set_ghosts; static PyObject *__pyx_n_s__set_irreg_distr; static PyObject *__pyx_n_s__set_memory_limit; static PyObject *__pyx_n_s__set_pgroup; static PyObject *__pyx_n_s__set_restricted; static PyObject *__pyx_n_s__shift_diagoal; static PyObject *__pyx_n_s__single; static PyObject *__pyx_n_s__size; static PyObject *__pyx_n_s__skip; static PyObject *__pyx_n_s__slices; static PyObject *__pyx_n_s__solve; static PyObject *__pyx_n_s__sometrue; static PyObject *__pyx_n_s__spd_invert; static PyObject *__pyx_n_s__start; static PyObject *__pyx_n_s__step; static PyObject *__pyx_n_s__step_max; static PyObject *__pyx_n_s__strided_acc; static PyObject *__pyx_n_s__strided_get; static PyObject *__pyx_n_s__strided_put; static PyObject *__pyx_n_s__strides; static PyObject *__pyx_n_s__subsarray; static PyObject *__pyx_n_s__subsarray1_nd; static PyObject *__pyx_n_s__subsarray2_nd; static PyObject *__pyx_n_s__subscript; static PyObject *__pyx_n_s__subscript_nd; static PyObject *__pyx_n_s__summarize; static PyObject *__pyx_n_s__symmetrize; static PyObject *__pyx_n_s__sync; static PyObject *__pyx_n_s__ta; static PyObject *__pyx_n_s__ta_c; static PyObject *__pyx_n_s__ta_char; static PyObject *__pyx_n_s__tb; static PyObject *__pyx_n_s__tb_c; static PyObject *__pyx_n_s__tb_char; static PyObject *__pyx_n_s__terminate; static PyObject *__pyx_n_s__total_blocks; static PyObject *__pyx_n_s__trans; static PyObject *__pyx_n_s__trans_c; static PyObject *__pyx_n_s__transa; static PyObject *__pyx_n_s__transb; static PyObject *__pyx_n_s__transpose; static PyObject *__pyx_n_s__type; static PyObject *__pyx_n_s__typenum; static PyObject *__pyx_n_s__unlock; static PyObject *__pyx_n_s__unpack; static PyObject *__pyx_n_s__update_ghost_dir; static PyObject *__pyx_n_s__update_ghosts; static PyObject *__pyx_n_s__uses_ma; static PyObject *__pyx_n_s__val; static PyObject *__pyx_n_s__valpha; static PyObject *__pyx_n_s__value; static PyObject *__pyx_n_s__values; static PyObject *__pyx_n_s__values_nd; static PyObject *__pyx_n_s__vbeta; static PyObject *__pyx_n_s__verbose; static PyObject *__pyx_n_s__vinc; static PyObject *__pyx_n_s__vstart; static PyObject *__pyx_n_s__vval; static PyObject *__pyx_n_s__vvalue; static PyObject *__pyx_n_s__width; static PyObject *__pyx_n_s__width_nd; static PyObject *__pyx_n_s__wtime; static PyObject *__pyx_n_s__zero; static PyObject *__pyx_n_s__zero_diagonal; static PyObject *__pyx_n_s__zeros; static PyObject *__pyx_n_s__zip; static PyObject *__pyx_int_0; static PyObject *__pyx_int_1; static PyObject *__pyx_int_2; static PyObject *__pyx_int_3; static PyObject *__pyx_int_4; static PyObject *__pyx_int_5; static PyObject *__pyx_int_6; static PyObject *__pyx_int_7; static PyObject *__pyx_int_8; static PyObject *__pyx_int_9; static PyObject *__pyx_int_neg_1; static PyObject *__pyx_int_10; static PyObject *__pyx_int_11; static PyObject *__pyx_int_12; static PyObject *__pyx_int_13; static PyObject *__pyx_int_14; static PyObject *__pyx_int_15; static PyObject *__pyx_int_16; static PyObject *__pyx_int_1000; static PyObject *__pyx_k_slice_9; static PyObject *__pyx_k_slice_29; static PyObject *__pyx_k_slice_34; static PyObject *__pyx_k_slice_35; static PyObject *__pyx_k_slice_38; static PyObject *__pyx_k_tuple_36; static PyObject *__pyx_k_tuple_40; static PyObject *__pyx_k_tuple_42; static PyObject *__pyx_k_tuple_44; static PyObject *__pyx_k_tuple_47; static PyObject *__pyx_k_tuple_48; static PyObject *__pyx_k_tuple_50; static PyObject *__pyx_k_tuple_52; static PyObject *__pyx_k_tuple_56; static PyObject *__pyx_k_tuple_58; static PyObject *__pyx_k_tuple_60; static PyObject *__pyx_k_tuple_62; static PyObject *__pyx_k_tuple_64; static PyObject *__pyx_k_tuple_66; static PyObject *__pyx_k_tuple_68; static PyObject *__pyx_k_tuple_70; static PyObject *__pyx_k_tuple_73; static PyObject *__pyx_k_tuple_76; static PyObject *__pyx_k_tuple_78; static PyObject *__pyx_k_tuple_80; static PyObject *__pyx_k_tuple_82; static PyObject *__pyx_k_tuple_84; static PyObject *__pyx_k_tuple_86; static PyObject *__pyx_k_tuple_88; static PyObject *__pyx_k_tuple_91; static PyObject *__pyx_k_tuple_93; static PyObject *__pyx_k_tuple_95; static PyObject *__pyx_k_tuple_97; static PyObject *__pyx_k_tuple_99; static PyObject *__pyx_k_tuple_101; static PyObject *__pyx_k_tuple_103; static PyObject *__pyx_k_tuple_105; static PyObject *__pyx_k_tuple_108; static PyObject *__pyx_k_tuple_110; static PyObject *__pyx_k_tuple_112; static PyObject *__pyx_k_tuple_114; static PyObject *__pyx_k_tuple_116; static PyObject *__pyx_k_tuple_119; static PyObject *__pyx_k_tuple_121; static PyObject *__pyx_k_tuple_123; static PyObject *__pyx_k_tuple_125; static PyObject *__pyx_k_tuple_127; static PyObject *__pyx_k_tuple_129; static PyObject *__pyx_k_tuple_131; static PyObject *__pyx_k_tuple_133; static PyObject *__pyx_k_tuple_135; static PyObject *__pyx_k_tuple_137; static PyObject *__pyx_k_tuple_140; static PyObject *__pyx_k_tuple_142; static PyObject *__pyx_k_tuple_144; static PyObject *__pyx_k_tuple_146; static PyObject *__pyx_k_tuple_148; static PyObject *__pyx_k_tuple_150; static PyObject *__pyx_k_tuple_153; static PyObject *__pyx_k_tuple_155; static PyObject *__pyx_k_tuple_157; static PyObject *__pyx_k_tuple_159; static PyObject *__pyx_k_tuple_161; static PyObject *__pyx_k_tuple_163; static PyObject *__pyx_k_tuple_165; static PyObject *__pyx_k_tuple_167; static PyObject *__pyx_k_tuple_170; static PyObject *__pyx_k_tuple_172; static PyObject *__pyx_k_tuple_176; static PyObject *__pyx_k_tuple_178; static PyObject *__pyx_k_tuple_180; static PyObject *__pyx_k_tuple_182; static PyObject *__pyx_k_tuple_184; static PyObject *__pyx_k_tuple_186; static PyObject *__pyx_k_tuple_188; static PyObject *__pyx_k_tuple_190; static PyObject *__pyx_k_tuple_192; static PyObject *__pyx_k_tuple_194; static PyObject *__pyx_k_tuple_196; static PyObject *__pyx_k_tuple_200; static PyObject *__pyx_k_tuple_202; static PyObject *__pyx_k_tuple_204; static PyObject *__pyx_k_tuple_206; static PyObject *__pyx_k_tuple_208; static PyObject *__pyx_k_tuple_210; static PyObject *__pyx_k_tuple_212; static PyObject *__pyx_k_tuple_214; static PyObject *__pyx_k_tuple_218; static PyObject *__pyx_k_tuple_220; static PyObject *__pyx_k_tuple_222; static PyObject *__pyx_k_tuple_224; static PyObject *__pyx_k_tuple_226; static PyObject *__pyx_k_tuple_228; static PyObject *__pyx_k_tuple_230; static PyObject *__pyx_k_tuple_232; static PyObject *__pyx_k_tuple_234; static PyObject *__pyx_k_tuple_236; static PyObject *__pyx_k_tuple_238; static PyObject *__pyx_k_tuple_243; static PyObject *__pyx_k_tuple_245; static PyObject *__pyx_k_tuple_247; static PyObject *__pyx_k_tuple_249; static PyObject *__pyx_k_tuple_251; static PyObject *__pyx_k_tuple_253; static PyObject *__pyx_k_tuple_255; static PyObject *__pyx_k_tuple_257; static PyObject *__pyx_k_tuple_259; static PyObject *__pyx_k_tuple_261; static PyObject *__pyx_k_tuple_263; static PyObject *__pyx_k_tuple_265; static PyObject *__pyx_k_tuple_267; static PyObject *__pyx_k_tuple_269; static PyObject *__pyx_k_tuple_271; static PyObject *__pyx_k_tuple_273; static PyObject *__pyx_k_tuple_276; static PyObject *__pyx_k_tuple_278; static PyObject *__pyx_k_tuple_280; static PyObject *__pyx_k_tuple_282; static PyObject *__pyx_k_tuple_284; static PyObject *__pyx_k_tuple_286; static PyObject *__pyx_k_tuple_288; static PyObject *__pyx_k_tuple_290; static PyObject *__pyx_k_tuple_292; static PyObject *__pyx_k_tuple_294; static PyObject *__pyx_k_tuple_296; static PyObject *__pyx_k_tuple_298; static PyObject *__pyx_k_tuple_301; static PyObject *__pyx_k_tuple_304; static PyObject *__pyx_k_tuple_306; static PyObject *__pyx_k_tuple_308; static PyObject *__pyx_k_tuple_311; static PyObject *__pyx_k_tuple_314; static PyObject *__pyx_k_tuple_317; static PyObject *__pyx_k_tuple_320; static PyObject *__pyx_k_tuple_323; static PyObject *__pyx_k_tuple_325; static PyObject *__pyx_k_tuple_327; static PyObject *__pyx_k_tuple_329; static PyObject *__pyx_k_tuple_331; static PyObject *__pyx_k_tuple_333; static PyObject *__pyx_k_tuple_335; static PyObject *__pyx_k_tuple_337; static PyObject *__pyx_k_tuple_339; static PyObject *__pyx_k_tuple_341; static PyObject *__pyx_k_tuple_343; static PyObject *__pyx_k_tuple_345; static PyObject *__pyx_k_tuple_347; static PyObject *__pyx_k_tuple_350; static PyObject *__pyx_k_tuple_352; static PyObject *__pyx_k_tuple_354; static PyObject *__pyx_k_tuple_356; static PyObject *__pyx_k_tuple_358; static PyObject *__pyx_k_tuple_360; static PyObject *__pyx_k_tuple_362; static PyObject *__pyx_k_tuple_364; static PyObject *__pyx_k_tuple_366; static PyObject *__pyx_k_tuple_368; static PyObject *__pyx_k_tuple_371; static PyObject *__pyx_k_tuple_373; static PyObject *__pyx_k_tuple_375; static PyObject *__pyx_k_tuple_377; static PyObject *__pyx_k_tuple_379; static PyObject *__pyx_k_tuple_381; static PyObject *__pyx_k_tuple_383; static PyObject *__pyx_k_tuple_385; static PyObject *__pyx_k_tuple_387; static PyObject *__pyx_k_tuple_391; static PyObject *__pyx_k_tuple_393; static PyObject *__pyx_k_tuple_395; static PyObject *__pyx_k_tuple_397; static PyObject *__pyx_k_tuple_399; static PyObject *__pyx_k_tuple_401; static PyObject *__pyx_k_tuple_405; static PyObject *__pyx_k_tuple_407; static PyObject *__pyx_k_codeobj_53; static PyObject *__pyx_k_codeobj_57; static PyObject *__pyx_k_codeobj_59; static PyObject *__pyx_k_codeobj_61; static PyObject *__pyx_k_codeobj_63; static PyObject *__pyx_k_codeobj_65; static PyObject *__pyx_k_codeobj_67; static PyObject *__pyx_k_codeobj_69; static PyObject *__pyx_k_codeobj_71; static PyObject *__pyx_k_codeobj_74; static PyObject *__pyx_k_codeobj_77; static PyObject *__pyx_k_codeobj_79; static PyObject *__pyx_k_codeobj_81; static PyObject *__pyx_k_codeobj_83; static PyObject *__pyx_k_codeobj_85; static PyObject *__pyx_k_codeobj_87; static PyObject *__pyx_k_codeobj_89; static PyObject *__pyx_k_codeobj_90; static PyObject *__pyx_k_codeobj_92; static PyObject *__pyx_k_codeobj_94; static PyObject *__pyx_k_codeobj_96; static PyObject *__pyx_k_codeobj_98; static PyObject *__pyx_k_codeobj_100; static PyObject *__pyx_k_codeobj_102; static PyObject *__pyx_k_codeobj_104; static PyObject *__pyx_k_codeobj_106; static PyObject *__pyx_k_codeobj_107; static PyObject *__pyx_k_codeobj_109; static PyObject *__pyx_k_codeobj_111; static PyObject *__pyx_k_codeobj_113; static PyObject *__pyx_k_codeobj_115; static PyObject *__pyx_k_codeobj_117; static PyObject *__pyx_k_codeobj_118; static PyObject *__pyx_k_codeobj_120; static PyObject *__pyx_k_codeobj_122; static PyObject *__pyx_k_codeobj_124; static PyObject *__pyx_k_codeobj_126; static PyObject *__pyx_k_codeobj_128; static PyObject *__pyx_k_codeobj_130; static PyObject *__pyx_k_codeobj_132; static PyObject *__pyx_k_codeobj_134; static PyObject *__pyx_k_codeobj_136; static PyObject *__pyx_k_codeobj_138; static PyObject *__pyx_k_codeobj_139; static PyObject *__pyx_k_codeobj_141; static PyObject *__pyx_k_codeobj_143; static PyObject *__pyx_k_codeobj_145; static PyObject *__pyx_k_codeobj_147; static PyObject *__pyx_k_codeobj_149; static PyObject *__pyx_k_codeobj_151; static PyObject *__pyx_k_codeobj_152; static PyObject *__pyx_k_codeobj_154; static PyObject *__pyx_k_codeobj_156; static PyObject *__pyx_k_codeobj_158; static PyObject *__pyx_k_codeobj_160; static PyObject *__pyx_k_codeobj_162; static PyObject *__pyx_k_codeobj_164; static PyObject *__pyx_k_codeobj_166; static PyObject *__pyx_k_codeobj_168; static PyObject *__pyx_k_codeobj_169; static PyObject *__pyx_k_codeobj_171; static PyObject *__pyx_k_codeobj_173; static PyObject *__pyx_k_codeobj_174; static PyObject *__pyx_k_codeobj_175; static PyObject *__pyx_k_codeobj_177; static PyObject *__pyx_k_codeobj_179; static PyObject *__pyx_k_codeobj_181; static PyObject *__pyx_k_codeobj_183; static PyObject *__pyx_k_codeobj_185; static PyObject *__pyx_k_codeobj_187; static PyObject *__pyx_k_codeobj_189; static PyObject *__pyx_k_codeobj_191; static PyObject *__pyx_k_codeobj_193; static PyObject *__pyx_k_codeobj_195; static PyObject *__pyx_k_codeobj_197; static PyObject *__pyx_k_codeobj_198; static PyObject *__pyx_k_codeobj_199; static PyObject *__pyx_k_codeobj_201; static PyObject *__pyx_k_codeobj_203; static PyObject *__pyx_k_codeobj_205; static PyObject *__pyx_k_codeobj_207; static PyObject *__pyx_k_codeobj_209; static PyObject *__pyx_k_codeobj_211; static PyObject *__pyx_k_codeobj_213; static PyObject *__pyx_k_codeobj_215; static PyObject *__pyx_k_codeobj_216; static PyObject *__pyx_k_codeobj_217; static PyObject *__pyx_k_codeobj_219; static PyObject *__pyx_k_codeobj_221; static PyObject *__pyx_k_codeobj_223; static PyObject *__pyx_k_codeobj_225; static PyObject *__pyx_k_codeobj_227; static PyObject *__pyx_k_codeobj_229; static PyObject *__pyx_k_codeobj_231; static PyObject *__pyx_k_codeobj_233; static PyObject *__pyx_k_codeobj_235; static PyObject *__pyx_k_codeobj_237; static PyObject *__pyx_k_codeobj_239; static PyObject *__pyx_k_codeobj_240; static PyObject *__pyx_k_codeobj_241; static PyObject *__pyx_k_codeobj_242; static PyObject *__pyx_k_codeobj_244; static PyObject *__pyx_k_codeobj_246; static PyObject *__pyx_k_codeobj_248; static PyObject *__pyx_k_codeobj_250; static PyObject *__pyx_k_codeobj_252; static PyObject *__pyx_k_codeobj_254; static PyObject *__pyx_k_codeobj_256; static PyObject *__pyx_k_codeobj_258; static PyObject *__pyx_k_codeobj_260; static PyObject *__pyx_k_codeobj_262; static PyObject *__pyx_k_codeobj_264; static PyObject *__pyx_k_codeobj_266; static PyObject *__pyx_k_codeobj_268; static PyObject *__pyx_k_codeobj_270; static PyObject *__pyx_k_codeobj_272; static PyObject *__pyx_k_codeobj_274; static PyObject *__pyx_k_codeobj_275; static PyObject *__pyx_k_codeobj_277; static PyObject *__pyx_k_codeobj_279; static PyObject *__pyx_k_codeobj_281; static PyObject *__pyx_k_codeobj_283; static PyObject *__pyx_k_codeobj_285; static PyObject *__pyx_k_codeobj_287; static PyObject *__pyx_k_codeobj_289; static PyObject *__pyx_k_codeobj_291; static PyObject *__pyx_k_codeobj_293; static PyObject *__pyx_k_codeobj_295; static PyObject *__pyx_k_codeobj_297; static PyObject *__pyx_k_codeobj_299; static PyObject *__pyx_k_codeobj_302; static PyObject *__pyx_k_codeobj_305; static PyObject *__pyx_k_codeobj_307; static PyObject *__pyx_k_codeobj_309; static PyObject *__pyx_k_codeobj_312; static PyObject *__pyx_k_codeobj_315; static PyObject *__pyx_k_codeobj_318; static PyObject *__pyx_k_codeobj_321; static PyObject *__pyx_k_codeobj_324; static PyObject *__pyx_k_codeobj_326; static PyObject *__pyx_k_codeobj_328; static PyObject *__pyx_k_codeobj_330; static PyObject *__pyx_k_codeobj_332; static PyObject *__pyx_k_codeobj_334; static PyObject *__pyx_k_codeobj_336; static PyObject *__pyx_k_codeobj_338; static PyObject *__pyx_k_codeobj_340; static PyObject *__pyx_k_codeobj_342; static PyObject *__pyx_k_codeobj_344; static PyObject *__pyx_k_codeobj_346; static PyObject *__pyx_k_codeobj_348; static PyObject *__pyx_k_codeobj_351; static PyObject *__pyx_k_codeobj_353; static PyObject *__pyx_k_codeobj_355; static PyObject *__pyx_k_codeobj_357; static PyObject *__pyx_k_codeobj_359; static PyObject *__pyx_k_codeobj_361; static PyObject *__pyx_k_codeobj_363; static PyObject *__pyx_k_codeobj_365; static PyObject *__pyx_k_codeobj_367; static PyObject *__pyx_k_codeobj_369; static PyObject *__pyx_k_codeobj_372; static PyObject *__pyx_k_codeobj_374; static PyObject *__pyx_k_codeobj_376; static PyObject *__pyx_k_codeobj_378; static PyObject *__pyx_k_codeobj_380; static PyObject *__pyx_k_codeobj_382; static PyObject *__pyx_k_codeobj_384; static PyObject *__pyx_k_codeobj_386; static PyObject *__pyx_k_codeobj_388; static PyObject *__pyx_k_codeobj_389; static PyObject *__pyx_k_codeobj_390; static PyObject *__pyx_k_codeobj_392; static PyObject *__pyx_k_codeobj_394; static PyObject *__pyx_k_codeobj_396; static PyObject *__pyx_k_codeobj_398; static PyObject *__pyx_k_codeobj_400; static PyObject *__pyx_k_codeobj_402; static PyObject *__pyx_k_codeobj_403; static PyObject *__pyx_k_codeobj_404; static PyObject *__pyx_k_codeobj_406; static PyObject *__pyx_k_codeobj_408; /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_1dtype(PyObject *__pyx_self, PyObject *__pyx_arg_gatype); /*proto*/ static char __pyx_doc_5ga4py_2ga_dtype[] = "dtype(int gatype)\nConverts the given GA type to a numpy dtype."; static PyMethodDef __pyx_mdef_5ga4py_2ga_1dtype = {__Pyx_NAMESTR("dtype"), (PyCFunction)__pyx_pw_5ga4py_2ga_1dtype, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_dtype)}; static PyObject *__pyx_pw_5ga4py_2ga_1dtype(PyObject *__pyx_self, PyObject *__pyx_arg_gatype) { int __pyx_v_gatype; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("dtype (wrapper)", 0); assert(__pyx_arg_gatype); { __pyx_v_gatype = __Pyx_PyInt_AsInt(__pyx_arg_gatype); if (unlikely((__pyx_v_gatype == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.dtype", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_dtype(__pyx_self, ((int)__pyx_v_gatype)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":79 * ############################################################################# * * def dtype(int gatype): # <<<<<<<<<<<<<< * """Converts the given GA type to a numpy dtype.""" * if gatype in _to_dtype: */ static PyObject *__pyx_pf_5ga4py_2ga_dtype(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_gatype) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("dtype", 0); /* "ga4py/ga.pyx":81 * def dtype(int gatype): * """Converts the given GA type to a numpy dtype.""" * if gatype in _to_dtype: # <<<<<<<<<<<<<< * return _to_dtype[gatype] * raise ValueError, "%d was not a recognized GA type" % gatype */ __pyx_t_1 = PyInt_FromLong(__pyx_v_gatype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = (__Pyx_PySequence_Contains(__pyx_t_1, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { /* "ga4py/ga.pyx":82 * """Converts the given GA type to a numpy dtype.""" * if gatype in _to_dtype: * return _to_dtype[gatype] # <<<<<<<<<<<<<< * raise ValueError, "%d was not a recognized GA type" % gatype * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_gatype, sizeof(int), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":83 * if gatype in _to_dtype: * return _to_dtype[gatype] * raise ValueError, "%d was not a recognized GA type" % gatype # <<<<<<<<<<<<<< * * def inquire_dtype(int g_a): */ __pyx_t_1 = PyInt_FromLong(__pyx_v_gatype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_1), __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.ga.dtype", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_3inquire_dtype(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_2inquire_dtype[] = "inquire_dtype(int g_a)\nReturns the numpy dtype of the given GA."; static PyMethodDef __pyx_mdef_5ga4py_2ga_3inquire_dtype = {__Pyx_NAMESTR("inquire_dtype"), (PyCFunction)__pyx_pw_5ga4py_2ga_3inquire_dtype, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_2inquire_dtype)}; static PyObject *__pyx_pw_5ga4py_2ga_3inquire_dtype(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("inquire_dtype (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.inquire_dtype", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_2inquire_dtype(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":85 * raise ValueError, "%d was not a recognized GA type" % gatype * * def inquire_dtype(int g_a): # <<<<<<<<<<<<<< * """Returns the numpy dtype of the given GA.""" * gatype = inquire_type(g_a) */ static PyObject *__pyx_pf_5ga4py_2ga_2inquire_dtype(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { int __pyx_v_gatype; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("inquire_dtype", 0); /* "ga4py/ga.pyx":87 * def inquire_dtype(int g_a): * """Returns the numpy dtype of the given GA.""" * gatype = inquire_type(g_a) # <<<<<<<<<<<<<< * return dtype(gatype) * */ __pyx_v_gatype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":88 * """Returns the numpy dtype of the given GA.""" * gatype = inquire_type(g_a) * return dtype(gatype) # <<<<<<<<<<<<<< * * cdef inline void* _gapy_malloc(size_t bytes, int align, char *name): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyInt_FromLong(__pyx_v_gatype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.inquire_dtype", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":90 * return dtype(gatype) * * cdef inline void* _gapy_malloc(size_t bytes, int align, char *name): # <<<<<<<<<<<<<< * """Wrapper around C stdlib malloc().""" * return malloc(bytes) */ static CYTHON_INLINE void *__pyx_f_5ga4py_2ga__gapy_malloc(size_t __pyx_v_bytes, CYTHON_UNUSED int __pyx_v_align, CYTHON_UNUSED char *__pyx_v_name) { void *__pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_gapy_malloc", 0); /* "ga4py/ga.pyx":92 * cdef inline void* _gapy_malloc(size_t bytes, int align, char *name): * """Wrapper around C stdlib malloc().""" * return malloc(bytes) # <<<<<<<<<<<<<< * * cdef inline void _gapy_free(void *ptr): */ __pyx_r = malloc(__pyx_v_bytes); goto __pyx_L0; __pyx_r = 0; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":94 * return malloc(bytes) * * cdef inline void _gapy_free(void *ptr): # <<<<<<<<<<<<<< * """Wrapper around C stdlib free().""" * free(ptr) */ static CYTHON_INLINE void __pyx_f_5ga4py_2ga__gapy_free(void *__pyx_v_ptr) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_gapy_free", 0); /* "ga4py/ga.pyx":96 * cdef inline void _gapy_free(void *ptr): * """Wrapper around C stdlib free().""" * free(ptr) # <<<<<<<<<<<<<< * * cdef inline np.ndarray[np.int32_t, ndim=1] _inta32(array_like): */ free(__pyx_v_ptr); __Pyx_RefNannyFinishContext(); } /* "ga4py/ga.pyx":98 * free(ptr) * * cdef inline np.ndarray[np.int32_t, ndim=1] _inta32(array_like): # <<<<<<<<<<<<<< * """Converts an integer array-like to an ndarray of 32bit integers. * */ static CYTHON_INLINE PyArrayObject *__pyx_f_5ga4py_2ga__inta32(PyObject *__pyx_v_array_like) { PyArrayObject *__pyx_v_array_like_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_array_like_nd; __Pyx_Buffer __pyx_pybuffer_array_like_nd; PyArrayObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyArrayObject *__pyx_t_9 = NULL; int __pyx_t_10; PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; PyObject *__pyx_t_14 = NULL; PyObject *__pyx_t_15 = NULL; PyObject *__pyx_t_16 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_inta32", 0); __pyx_pybuffer_array_like_nd.pybuffer.buf = NULL; __pyx_pybuffer_array_like_nd.refcount = 0; __pyx_pybuffernd_array_like_nd.data = NULL; __pyx_pybuffernd_array_like_nd.rcbuffer = &__pyx_pybuffer_array_like_nd; /* "ga4py/ga.pyx":113 * """ * cdef np.ndarray[np.int32_t, ndim=1] array_like_nd * try: # <<<<<<<<<<<<<< * array_like_nd = np.asarray(array_like, dtype=np.int32) * except ValueError: # try again in case array_like is a single value */ { __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { /* "ga4py/ga.pyx":114 * cdef np.ndarray[np.int32_t, ndim=1] array_like_nd * try: * array_like_nd = np.asarray(array_like, dtype=np.int32) # <<<<<<<<<<<<<< * except ValueError: # try again in case array_like is a single value * array_like_nd = np.asarray([array_like], dtype=np.int32) */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__asarray); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_array_like); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_array_like); __Pyx_GIVEREF(__pyx_v_array_like); __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_6)); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__int32); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_array_like_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13); } } __pyx_pybuffernd_array_like_nd.diminfo[0].strides = __pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_array_like_nd.diminfo[0].shape = __pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_t_9 = 0; __pyx_v_array_like_nd = ((PyArrayObject *)__pyx_t_8); __pyx_t_8 = 0; } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L10_try_end; __pyx_L3_error:; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; /* "ga4py/ga.pyx":115 * try: * array_like_nd = np.asarray(array_like, dtype=np.int32) * except ValueError: # try again in case array_like is a single value # <<<<<<<<<<<<<< * array_like_nd = np.asarray([array_like], dtype=np.int32) * return array_like_nd */ __pyx_t_10 = PyErr_ExceptionMatches(__pyx_builtin_ValueError); if (__pyx_t_10) { __Pyx_AddTraceback("ga4py.ga._inta32", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_6, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_4); /* "ga4py/ga.pyx":116 * array_like_nd = np.asarray(array_like, dtype=np.int32) * except ValueError: # try again in case array_like is a single value * array_like_nd = np.asarray([array_like], dtype=np.int32) # <<<<<<<<<<<<<< * return array_like_nd * */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__asarray); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_array_like); PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_array_like); __Pyx_GIVEREF(__pyx_v_array_like); __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_14, 0, ((PyObject *)__pyx_t_5)); __Pyx_GIVEREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __pyx_t_15 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_15); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s__int32); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_16) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_14), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_14)); __pyx_t_14 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; if (!(likely(((__pyx_t_16) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_16, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __pyx_t_9 = ((PyArrayObject *)__pyx_t_16); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_array_like_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_13, __pyx_t_12, __pyx_t_11); } } __pyx_pybuffernd_array_like_nd.diminfo[0].strides = __pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_array_like_nd.diminfo[0].shape = __pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} } __pyx_t_9 = 0; __Pyx_XDECREF_SET(__pyx_v_array_like_nd, ((PyArrayObject *)__pyx_t_16)); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L4_exception_handled; } __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L1_error; __pyx_L4_exception_handled:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); __pyx_L10_try_end:; } /* "ga4py/ga.pyx":117 * except ValueError: # try again in case array_like is a single value * array_like_nd = np.asarray([array_like], dtype=np.int32) * return array_like_nd # <<<<<<<<<<<<<< * * cdef inline np.ndarray[np.int64_t, ndim=1] _inta64(array_like): */ __Pyx_XDECREF(((PyObject *)__pyx_r)); __Pyx_INCREF(((PyObject *)__pyx_v_array_like_nd)); __pyx_r = ((PyArrayObject *)__pyx_v_array_like_nd); goto __pyx_L0; __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_14); __Pyx_XDECREF(__pyx_t_15); __Pyx_XDECREF(__pyx_t_16); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga._inta32", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_array_like_nd); __Pyx_XGIVEREF((PyObject *)__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":119 * return array_like_nd * * cdef inline np.ndarray[np.int64_t, ndim=1] _inta64(array_like): # <<<<<<<<<<<<<< * """Converts an integer array-like to an ndarray of 64bit integers. * */ static CYTHON_INLINE PyArrayObject *__pyx_f_5ga4py_2ga__inta64(PyObject *__pyx_v_array_like) { PyArrayObject *__pyx_v_array_like_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_array_like_nd; __Pyx_Buffer __pyx_pybuffer_array_like_nd; PyArrayObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyArrayObject *__pyx_t_9 = NULL; int __pyx_t_10; PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; PyObject *__pyx_t_14 = NULL; PyObject *__pyx_t_15 = NULL; PyObject *__pyx_t_16 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_inta64", 0); __pyx_pybuffer_array_like_nd.pybuffer.buf = NULL; __pyx_pybuffer_array_like_nd.refcount = 0; __pyx_pybuffernd_array_like_nd.data = NULL; __pyx_pybuffernd_array_like_nd.rcbuffer = &__pyx_pybuffer_array_like_nd; /* "ga4py/ga.pyx":134 * """ * cdef np.ndarray[np.int64_t, ndim=1] array_like_nd * try: # <<<<<<<<<<<<<< * array_like_nd = np.asarray(array_like, dtype=np.int64) * except ValueError: # try again in case array_like is a single value */ { __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { /* "ga4py/ga.pyx":135 * cdef np.ndarray[np.int64_t, ndim=1] array_like_nd * try: * array_like_nd = np.asarray(array_like, dtype=np.int64) # <<<<<<<<<<<<<< * except ValueError: # try again in case array_like is a single value * array_like_nd = np.asarray([array_like], dtype=np.int64) */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__asarray); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_array_like); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_array_like); __Pyx_GIVEREF(__pyx_v_array_like); __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_6)); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__int64); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_array_like_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13); } } __pyx_pybuffernd_array_like_nd.diminfo[0].strides = __pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_array_like_nd.diminfo[0].shape = __pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_t_9 = 0; __pyx_v_array_like_nd = ((PyArrayObject *)__pyx_t_8); __pyx_t_8 = 0; } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L10_try_end; __pyx_L3_error:; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; /* "ga4py/ga.pyx":136 * try: * array_like_nd = np.asarray(array_like, dtype=np.int64) * except ValueError: # try again in case array_like is a single value # <<<<<<<<<<<<<< * array_like_nd = np.asarray([array_like], dtype=np.int64) * return array_like_nd */ __pyx_t_10 = PyErr_ExceptionMatches(__pyx_builtin_ValueError); if (__pyx_t_10) { __Pyx_AddTraceback("ga4py.ga._inta64", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_6, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_4); /* "ga4py/ga.pyx":137 * array_like_nd = np.asarray(array_like, dtype=np.int64) * except ValueError: # try again in case array_like is a single value * array_like_nd = np.asarray([array_like], dtype=np.int64) # <<<<<<<<<<<<<< * return array_like_nd * */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__asarray); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_array_like); PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_array_like); __Pyx_GIVEREF(__pyx_v_array_like); __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_14, 0, ((PyObject *)__pyx_t_5)); __Pyx_GIVEREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __pyx_t_15 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_15); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s__int64); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_16) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_14), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_14)); __pyx_t_14 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; if (!(likely(((__pyx_t_16) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_16, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __pyx_t_9 = ((PyArrayObject *)__pyx_t_16); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_array_like_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_13, __pyx_t_12, __pyx_t_11); } } __pyx_pybuffernd_array_like_nd.diminfo[0].strides = __pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_array_like_nd.diminfo[0].shape = __pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} } __pyx_t_9 = 0; __Pyx_XDECREF_SET(__pyx_v_array_like_nd, ((PyArrayObject *)__pyx_t_16)); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L4_exception_handled; } __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L1_error; __pyx_L4_exception_handled:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); __pyx_L10_try_end:; } /* "ga4py/ga.pyx":138 * except ValueError: # try again in case array_like is a single value * array_like_nd = np.asarray([array_like], dtype=np.int64) * return array_like_nd # <<<<<<<<<<<<<< * * cdef inline _lohi(int g_a, lo, hi): */ __Pyx_XDECREF(((PyObject *)__pyx_r)); __Pyx_INCREF(((PyObject *)__pyx_v_array_like_nd)); __pyx_r = ((PyArrayObject *)__pyx_v_array_like_nd); goto __pyx_L0; __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_14); __Pyx_XDECREF(__pyx_t_15); __Pyx_XDECREF(__pyx_t_16); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga._inta64", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_array_like_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_array_like_nd); __Pyx_XGIVEREF((PyObject *)__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":140 * return array_like_nd * * cdef inline _lohi(int g_a, lo, hi): # <<<<<<<<<<<<<< * """Converts and/or prepares a lo/hi combination. * */ static CYTHON_INLINE PyObject *__pyx_f_5ga4py_2ga__lohi(int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyArrayObject *__pyx_v_lo_nd = 0; PyArrayObject *__pyx_v_hi_nd = 0; int __pyx_v_ndim; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_nd; __Pyx_Buffer __pyx_pybuffer_lo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyArrayObject *__pyx_t_9 = NULL; int __pyx_t_10; PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; Py_ssize_t __pyx_t_14; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_lohi", 0); __pyx_pybuffer_lo_nd.pybuffer.buf = NULL; __pyx_pybuffer_lo_nd.refcount = 0; __pyx_pybuffernd_lo_nd.data = NULL; __pyx_pybuffernd_lo_nd.rcbuffer = &__pyx_pybuffer_lo_nd; __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; /* "ga4py/ga.pyx":166 * """ * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd * cdef int ndim = GA_Ndim(g_a) # <<<<<<<<<<<<<< * if lo is None and hi is None: * lo_nd = np.zeros((ndim), dtype=np.int64) */ __pyx_v_ndim = GA_Ndim(__pyx_v_g_a); /* "ga4py/ga.pyx":167 * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd * cdef int ndim = GA_Ndim(g_a) * if lo is None and hi is None: # <<<<<<<<<<<<<< * lo_nd = np.zeros((ndim), dtype=np.int64) * hi_nd = inquire_dims(g_a) */ __pyx_t_1 = (__pyx_v_lo == Py_None); if ((__pyx_t_1 != 0)) { __pyx_t_2 = (__pyx_v_hi == Py_None); __pyx_t_3 = (__pyx_t_2 != 0); } else { __pyx_t_3 = (__pyx_t_1 != 0); } if (__pyx_t_3) { /* "ga4py/ga.pyx":168 * cdef int ndim = GA_Ndim(g_a) * if lo is None and hi is None: * lo_nd = np.zeros((ndim), dtype=np.int64) # <<<<<<<<<<<<<< * hi_nd = inquire_dims(g_a) * elif lo is not None and hi is None: */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__zeros); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyInt_FromLong(__pyx_v_ndim); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__int64); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_9 = 0; __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_8); __pyx_t_8 = 0; /* "ga4py/ga.pyx":169 * if lo is None and hi is None: * lo_nd = np.zeros((ndim), dtype=np.int64) * hi_nd = inquire_dims(g_a) # <<<<<<<<<<<<<< * elif lo is not None and hi is None: * lo_nd = _inta64(lo) */ __pyx_t_8 = ((PyObject *)__pyx_f_5ga4py_2ga_inquire_dims(__pyx_v_g_a, 0)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_8), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_13, __pyx_t_12, __pyx_t_11); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L3; } /* "ga4py/ga.pyx":170 * lo_nd = np.zeros((ndim), dtype=np.int64) * hi_nd = inquire_dims(g_a) * elif lo is not None and hi is None: # <<<<<<<<<<<<<< * lo_nd = _inta64(lo) * hi_nd = lo_nd+1 */ __pyx_t_3 = (__pyx_v_lo != Py_None); if ((__pyx_t_3 != 0)) { __pyx_t_1 = (__pyx_v_hi == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); } else { __pyx_t_2 = (__pyx_t_3 != 0); } if (__pyx_t_2) { /* "ga4py/ga.pyx":171 * hi_nd = inquire_dims(g_a) * elif lo is not None and hi is None: * lo_nd = _inta64(lo) # <<<<<<<<<<<<<< * hi_nd = lo_nd+1 * elif lo is None and hi is not None: */ __pyx_t_8 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_lo)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_8), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_8); __pyx_t_8 = 0; /* "ga4py/ga.pyx":172 * elif lo is not None and hi is None: * lo_nd = _inta64(lo) * hi_nd = lo_nd+1 # <<<<<<<<<<<<<< * elif lo is None and hi is not None: * raise ValueError, 'lo cannot be None if hi is None' */ __pyx_t_8 = PyNumber_Add(((PyObject *)__pyx_v_lo_nd), __pyx_int_1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_13, __pyx_t_12, __pyx_t_11); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_9 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L3; } /* "ga4py/ga.pyx":173 * lo_nd = _inta64(lo) * hi_nd = lo_nd+1 * elif lo is None and hi is not None: # <<<<<<<<<<<<<< * raise ValueError, 'lo cannot be None if hi is None' * else: # lo and hi are not None */ __pyx_t_2 = (__pyx_v_lo == Py_None); if ((__pyx_t_2 != 0)) { __pyx_t_3 = (__pyx_v_hi != Py_None); __pyx_t_1 = (__pyx_t_3 != 0); } else { __pyx_t_1 = (__pyx_t_2 != 0); } if (__pyx_t_1) { /* "ga4py/ga.pyx":174 * hi_nd = lo_nd+1 * elif lo is None and hi is not None: * raise ValueError, 'lo cannot be None if hi is None' # <<<<<<<<<<<<<< * else: # lo and hi are not None * lo_nd = _inta64(lo) */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_2), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":176 * raise ValueError, 'lo cannot be None if hi is None' * else: # lo and hi are not None * lo_nd = _inta64(lo) # <<<<<<<<<<<<<< * hi_nd = _inta64(hi) * if len(lo_nd) != ndim: */ __pyx_t_8 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_lo)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_8), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_8); __pyx_t_8 = 0; /* "ga4py/ga.pyx":177 * else: # lo and hi are not None * lo_nd = _inta64(lo) * hi_nd = _inta64(hi) # <<<<<<<<<<<<<< * if len(lo_nd) != ndim: * raise ValueError, 'len(lo_nd) != ndim; len(%s) != %s' % (lo_nd,ndim) */ __pyx_t_8 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_hi)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_8), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_13, __pyx_t_12, __pyx_t_11); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_8); __pyx_t_8 = 0; } __pyx_L3:; /* "ga4py/ga.pyx":178 * lo_nd = _inta64(lo) * hi_nd = _inta64(hi) * if len(lo_nd) != ndim: # <<<<<<<<<<<<<< * raise ValueError, 'len(lo_nd) != ndim; len(%s) != %s' % (lo_nd,ndim) * if len(hi_nd) != ndim: */ __pyx_t_14 = PyObject_Length(((PyObject *)__pyx_v_lo_nd)); if (unlikely(__pyx_t_14 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = ((__pyx_t_14 != __pyx_v_ndim) != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":179 * hi_nd = _inta64(hi) * if len(lo_nd) != ndim: * raise ValueError, 'len(lo_nd) != ndim; len(%s) != %s' % (lo_nd,ndim) # <<<<<<<<<<<<<< * if len(hi_nd) != ndim: * raise ValueError, 'len(hi_nd) != ndim; len(%s) != %s' % (hi_nd,ndim) */ __pyx_t_8 = PyInt_FromLong(__pyx_v_ndim); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(((PyObject *)__pyx_v_lo_nd)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_lo_nd)); __Pyx_GIVEREF(((PyObject *)__pyx_v_lo_nd)); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_8); __Pyx_GIVEREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_3), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_8)); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_8), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L4; } __pyx_L4:; /* "ga4py/ga.pyx":180 * if len(lo_nd) != ndim: * raise ValueError, 'len(lo_nd) != ndim; len(%s) != %s' % (lo_nd,ndim) * if len(hi_nd) != ndim: # <<<<<<<<<<<<<< * raise ValueError, 'len(hi_nd) != ndim; len(%s) != %s' % (hi_nd,ndim) * # We must make a copy of hi_nd. If user passes in an ndarray, the */ __pyx_t_14 = PyObject_Length(((PyObject *)__pyx_v_hi_nd)); if (unlikely(__pyx_t_14 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = ((__pyx_t_14 != __pyx_v_ndim) != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":181 * raise ValueError, 'len(lo_nd) != ndim; len(%s) != %s' % (lo_nd,ndim) * if len(hi_nd) != ndim: * raise ValueError, 'len(hi_nd) != ndim; len(%s) != %s' % (hi_nd,ndim) # <<<<<<<<<<<<<< * # We must make a copy of hi_nd. If user passes in an ndarray, the * # following "prep" operation will change the user's 'hi'. */ __pyx_t_8 = PyInt_FromLong(__pyx_v_ndim); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(((PyObject *)__pyx_v_hi_nd)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_hi_nd)); __Pyx_GIVEREF(((PyObject *)__pyx_v_hi_nd)); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_8); __Pyx_GIVEREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_4), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_8)); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_8), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } __pyx_L5:; /* "ga4py/ga.pyx":185 * # following "prep" operation will change the user's 'hi'. * #hi_nd -= 1 # <----- don't do that! * hi_nd = hi_nd-1 # prep hi for GA's inclusive indexing # <<<<<<<<<<<<<< * return lo_nd,hi_nd * */ __pyx_t_8 = PyNumber_Subtract(((PyObject *)__pyx_v_hi_nd), __pyx_int_1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_9 = 0; __Pyx_DECREF_SET(__pyx_v_hi_nd, ((PyArrayObject *)__pyx_t_8)); __pyx_t_8 = 0; /* "ga4py/ga.pyx":186 * #hi_nd -= 1 # <----- don't do that! * hi_nd = hi_nd-1 # prep hi for GA's inclusive indexing * return lo_nd,hi_nd # <<<<<<<<<<<<<< * * cdef void* _convert_multiplier(int gtype, value, */ __Pyx_XDECREF(__pyx_r); __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(((PyObject *)__pyx_v_lo_nd)); PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_v_lo_nd)); __Pyx_GIVEREF(((PyObject *)__pyx_v_lo_nd)); __Pyx_INCREF(((PyObject *)__pyx_v_hi_nd)); PyTuple_SET_ITEM(__pyx_t_8, 1, ((PyObject *)__pyx_v_hi_nd)); __Pyx_GIVEREF(((PyObject *)__pyx_v_hi_nd)); __pyx_r = ((PyObject *)__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga._lohi", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_lo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":188 * return lo_nd,hi_nd * * cdef void* _convert_multiplier(int gtype, value, # <<<<<<<<<<<<<< * int *iv, long *lv, long long *llv, * float *fv, double *dv, long double *ldv, */ static void *__pyx_f_5ga4py_2ga__convert_multiplier(int __pyx_v_gtype, PyObject *__pyx_v_value, int *__pyx_v_iv, long *__pyx_v_lv, PY_LONG_LONG *__pyx_v_llv, float *__pyx_v_fv, double *__pyx_v_dv, long double *__pyx_v_ldv, SingleComplex *__pyx_v_fcv, DoubleComplex *__pyx_v_dcv) { __pyx_t_float_complex __pyx_v_pfcv; __pyx_t_double_complex __pyx_v_pdcv; void *__pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_t_6; long __pyx_t_7; PY_LONG_LONG __pyx_t_8; float __pyx_t_9; double __pyx_t_10; int __pyx_t_11; long double __pyx_t_12; __pyx_t_float_complex __pyx_t_13; __pyx_t_double_complex __pyx_t_14; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_convert_multiplier", 0); /* "ga4py/ga.pyx":200 * * """ * cdef float complex pfcv=1.0 # <<<<<<<<<<<<<< * cdef double complex pdcv=1.0 * if value is None: */ __pyx_v_pfcv = __pyx_t_float_complex_from_parts(1.0, 0); /* "ga4py/ga.pyx":201 * """ * cdef float complex pfcv=1.0 * cdef double complex pdcv=1.0 # <<<<<<<<<<<<<< * if value is None: * raise ValueError, "cannot convert None" */ __pyx_v_pdcv = __pyx_t_double_complex_from_parts(1.0, 0); /* "ga4py/ga.pyx":202 * cdef float complex pfcv=1.0 * cdef double complex pdcv=1.0 * if value is None: # <<<<<<<<<<<<<< * raise ValueError, "cannot convert None" * if gtype == C_INT: */ __pyx_t_1 = (__pyx_v_value == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/ga.pyx":203 * cdef double complex pdcv=1.0 * if value is None: * raise ValueError, "cannot convert None" # <<<<<<<<<<<<<< * if gtype == C_INT: * iv[0] = value */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_5), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":204 * if value is None: * raise ValueError, "cannot convert None" * if gtype == C_INT: # <<<<<<<<<<<<<< * iv[0] = value * return iv */ __pyx_t_3 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_INT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":205 * raise ValueError, "cannot convert None" * if gtype == C_INT: * iv[0] = value # <<<<<<<<<<<<<< * return iv * elif gtype == C_LONG: */ __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} (__pyx_v_iv[0]) = __pyx_t_6; /* "ga4py/ga.pyx":206 * if gtype == C_INT: * iv[0] = value * return iv # <<<<<<<<<<<<<< * elif gtype == C_LONG: * lv[0] = value */ __pyx_r = __pyx_v_iv; goto __pyx_L0; goto __pyx_L4; } /* "ga4py/ga.pyx":207 * iv[0] = value * return iv * elif gtype == C_LONG: # <<<<<<<<<<<<<< * lv[0] = value * return lv */ __pyx_t_5 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LONG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":208 * return iv * elif gtype == C_LONG: * lv[0] = value # <<<<<<<<<<<<<< * return lv * elif gtype == C_LONGLONG: */ __pyx_t_7 = __Pyx_PyInt_AsLong(__pyx_v_value); if (unlikely((__pyx_t_7 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} (__pyx_v_lv[0]) = __pyx_t_7; /* "ga4py/ga.pyx":209 * elif gtype == C_LONG: * lv[0] = value * return lv # <<<<<<<<<<<<<< * elif gtype == C_LONGLONG: * llv[0] = value */ __pyx_r = __pyx_v_lv; goto __pyx_L0; goto __pyx_L4; } /* "ga4py/ga.pyx":210 * lv[0] = value * return lv * elif gtype == C_LONGLONG: # <<<<<<<<<<<<<< * llv[0] = value * return llv */ __pyx_t_3 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LONGLONG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":211 * return lv * elif gtype == C_LONGLONG: * llv[0] = value # <<<<<<<<<<<<<< * return llv * elif gtype == C_FLOAT: */ __pyx_t_8 = __Pyx_PyInt_AsLongLong(__pyx_v_value); if (unlikely((__pyx_t_8 == (PY_LONG_LONG)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} (__pyx_v_llv[0]) = __pyx_t_8; /* "ga4py/ga.pyx":212 * elif gtype == C_LONGLONG: * llv[0] = value * return llv # <<<<<<<<<<<<<< * elif gtype == C_FLOAT: * fv[0] = value */ __pyx_r = __pyx_v_llv; goto __pyx_L0; goto __pyx_L4; } /* "ga4py/ga.pyx":213 * llv[0] = value * return llv * elif gtype == C_FLOAT: # <<<<<<<<<<<<<< * fv[0] = value * return fv */ __pyx_t_5 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_FLOAT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":214 * return llv * elif gtype == C_FLOAT: * fv[0] = value # <<<<<<<<<<<<<< * return fv * elif gtype == C_DBL: */ __pyx_t_9 = __pyx_PyFloat_AsFloat(__pyx_v_value); if (unlikely((__pyx_t_9 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} (__pyx_v_fv[0]) = __pyx_t_9; /* "ga4py/ga.pyx":215 * elif gtype == C_FLOAT: * fv[0] = value * return fv # <<<<<<<<<<<<<< * elif gtype == C_DBL: * dv[0] = value */ __pyx_r = __pyx_v_fv; goto __pyx_L0; goto __pyx_L4; } /* "ga4py/ga.pyx":216 * fv[0] = value * return fv * elif gtype == C_DBL: # <<<<<<<<<<<<<< * dv[0] = value * return dv */ __pyx_t_3 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_DBL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":217 * return fv * elif gtype == C_DBL: * dv[0] = value # <<<<<<<<<<<<<< * return dv * elif gtype == C_LDBL and float128_in_np: */ __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} (__pyx_v_dv[0]) = __pyx_t_10; /* "ga4py/ga.pyx":218 * elif gtype == C_DBL: * dv[0] = value * return dv # <<<<<<<<<<<<<< * elif gtype == C_LDBL and float128_in_np: * ldv[0] = value */ __pyx_r = __pyx_v_dv; goto __pyx_L0; goto __pyx_L4; } /* "ga4py/ga.pyx":219 * dv[0] = value * return dv * elif gtype == C_LDBL and float128_in_np: # <<<<<<<<<<<<<< * ldv[0] = value * return ldv */ __pyx_t_5 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LDBL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_2) { __pyx_t_1 = __pyx_v_5ga4py_2ga_float128_in_np; __pyx_t_11 = __pyx_t_1; } else { __pyx_t_11 = __pyx_t_2; } if (__pyx_t_11) { /* "ga4py/ga.pyx":220 * return dv * elif gtype == C_LDBL and float128_in_np: * ldv[0] = value # <<<<<<<<<<<<<< * return ldv * elif gtype == C_SCPL: */ __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_12 == (long double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} (__pyx_v_ldv[0]) = __pyx_t_12; /* "ga4py/ga.pyx":221 * elif gtype == C_LDBL and float128_in_np: * ldv[0] = value * return ldv # <<<<<<<<<<<<<< * elif gtype == C_SCPL: * pfcv = value */ __pyx_r = __pyx_v_ldv; goto __pyx_L0; goto __pyx_L4; } /* "ga4py/ga.pyx":222 * ldv[0] = value * return ldv * elif gtype == C_SCPL: # <<<<<<<<<<<<<< * pfcv = value * fcv[0].real = pfcv.real */ __pyx_t_3 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_SCPL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_11) { /* "ga4py/ga.pyx":223 * return ldv * elif gtype == C_SCPL: * pfcv = value # <<<<<<<<<<<<<< * fcv[0].real = pfcv.real * fcv[0].imag = pfcv.imag */ __pyx_t_13 = __Pyx_PyComplex_As___pyx_t_float_complex(__pyx_v_value); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_pfcv = __pyx_t_13; /* "ga4py/ga.pyx":224 * elif gtype == C_SCPL: * pfcv = value * fcv[0].real = pfcv.real # <<<<<<<<<<<<<< * fcv[0].imag = pfcv.imag * return fcv */ __pyx_t_9 = __Pyx_CREAL(__pyx_v_pfcv); (__pyx_v_fcv[0]).real = __pyx_t_9; /* "ga4py/ga.pyx":225 * pfcv = value * fcv[0].real = pfcv.real * fcv[0].imag = pfcv.imag # <<<<<<<<<<<<<< * return fcv * elif gtype == C_DCPL: */ __pyx_t_9 = __Pyx_CIMAG(__pyx_v_pfcv); (__pyx_v_fcv[0]).imag = __pyx_t_9; /* "ga4py/ga.pyx":226 * fcv[0].real = pfcv.real * fcv[0].imag = pfcv.imag * return fcv # <<<<<<<<<<<<<< * elif gtype == C_DCPL: * pdcv = value */ __pyx_r = __pyx_v_fcv; goto __pyx_L0; goto __pyx_L4; } /* "ga4py/ga.pyx":227 * fcv[0].imag = pfcv.imag * return fcv * elif gtype == C_DCPL: # <<<<<<<<<<<<<< * pdcv = value * dcv[0].real = pdcv.real */ __pyx_t_5 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_DCPL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_11) { /* "ga4py/ga.pyx":228 * return fcv * elif gtype == C_DCPL: * pdcv = value # <<<<<<<<<<<<<< * dcv[0].real = pdcv.real * dcv[0].imag = pdcv.imag */ __pyx_t_14 = __Pyx_PyComplex_As___pyx_t_double_complex(__pyx_v_value); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_pdcv = __pyx_t_14; /* "ga4py/ga.pyx":229 * elif gtype == C_DCPL: * pdcv = value * dcv[0].real = pdcv.real # <<<<<<<<<<<<<< * dcv[0].imag = pdcv.imag * return dcv */ __pyx_t_10 = __Pyx_CREAL(__pyx_v_pdcv); (__pyx_v_dcv[0]).real = __pyx_t_10; /* "ga4py/ga.pyx":230 * pdcv = value * dcv[0].real = pdcv.real * dcv[0].imag = pdcv.imag # <<<<<<<<<<<<<< * return dcv * else: */ __pyx_t_10 = __Pyx_CIMAG(__pyx_v_pdcv); (__pyx_v_dcv[0]).imag = __pyx_t_10; /* "ga4py/ga.pyx":231 * dcv[0].real = pdcv.real * dcv[0].imag = pdcv.imag * return dcv # <<<<<<<<<<<<<< * else: * raise TypeError, "type of g_a not recognized" */ __pyx_r = __pyx_v_dcv; goto __pyx_L0; goto __pyx_L4; } /*else*/ { /* "ga4py/ga.pyx":233 * return dcv * else: * raise TypeError, "type of g_a not recognized" # <<<<<<<<<<<<<< * * def zip(lo, hi): */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_6), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L4:; __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_WriteUnraisable("ga4py.ga._convert_multiplier", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_5zip(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_4zip[] = "zip(lo, hi)\nTransforms a GA lo,hi combination into a slice list."; static PyMethodDef __pyx_mdef_5ga4py_2ga_5zip = {__Pyx_NAMESTR("zip"), (PyCFunction)__pyx_pw_5ga4py_2ga_5zip, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_4zip)}; static PyObject *__pyx_pw_5ga4py_2ga_5zip(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("zip (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("zip", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zip") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_lo = values[0]; __pyx_v_hi = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("zip", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.zip", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_4zip(__pyx_self, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":235 * raise TypeError, "type of g_a not recognized" * * def zip(lo, hi): # <<<<<<<<<<<<<< * """Transforms a GA lo,hi combination into a slice list.""" * return [slice(l,h) for l,h in __builtin__.zip(lo,hi)] */ static PyObject *__pyx_pf_5ga4py_2ga_4zip(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyObject *__pyx_v_l = NULL; PyObject *__pyx_v_h = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; Py_ssize_t __pyx_t_5; PyObject *(*__pyx_t_6)(PyObject *); PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *(*__pyx_t_9)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("zip", 0); /* "ga4py/ga.pyx":237 * def zip(lo, hi): * """Transforms a GA lo,hi combination into a slice list.""" * return [slice(l,h) for l,h in __builtin__.zip(lo,hi)] # <<<<<<<<<<<<<< * * ############################################################################# */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s____builtin__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__zip); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (PyList_CheckExact(__pyx_t_4) || PyTuple_CheckExact(__pyx_t_4)) { __pyx_t_2 = __pyx_t_4; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0; __pyx_t_6 = NULL; } else { __pyx_t_5 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = Py_TYPE(__pyx_t_2)->tp_iternext; } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; for (;;) { if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_2)) { if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_2)) { if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_4 = __pyx_t_6(__pyx_t_2); if (unlikely(!__pyx_t_4)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_4); } if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) { PyObject* sequence = __pyx_t_4; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_3 = PyList_GET_ITEM(sequence, 0); __pyx_t_7 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx_t_7); #else __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); #endif __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { Py_ssize_t index = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext; index = 0; __pyx_t_3 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = NULL; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_9 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L6_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_l, __pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF_SET(__pyx_v_h, __pyx_t_7); __pyx_t_7 = 0; __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_l); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_l); __Pyx_GIVEREF(__pyx_v_l); __Pyx_INCREF(__pyx_v_h); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_h); __Pyx_GIVEREF(__pyx_v_h); __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_7))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = ((PyObject *)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("ga4py.ga.zip", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_l); __Pyx_XDECREF(__pyx_v_h); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_7abs_value(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_6abs_value[] = "abs_value(int g_a, lo=None, hi=None)\nTake element-wise absolute value of the array or patch.\n \n This is a collective operation.\n\n :Parameters:\n g_a : int\n the array handle\n lo : 1D array-like\n lower bound patch coordinates, inclusive\n hi : 1D array-like\n higher bound patch coordinates, exclusive\n \n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_7abs_value = {__Pyx_NAMESTR("abs_value"), (PyCFunction)__pyx_pw_5ga4py_2ga_7abs_value, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_6abs_value)}; static PyObject *__pyx_pw_5ga4py_2ga_7abs_value(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("abs_value (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/ga.pyx":243 * ############################################################################# * * def abs_value(int g_a, lo=None, hi=None): # <<<<<<<<<<<<<< * """Take element-wise absolute value of the array or patch. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "abs_value") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("abs_value", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.abs_value", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_6abs_value(__pyx_self, __pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_6abs_value(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyArrayObject *__pyx_v_lo_nd = 0; PyArrayObject *__pyx_v_hi_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_nd; __Pyx_Buffer __pyx_pybuffer_lo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *(*__pyx_t_8)(PyObject *); PyArrayObject *__pyx_t_9 = NULL; int __pyx_t_10; PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("abs_value", 0); __pyx_pybuffer_lo_nd.pybuffer.buf = NULL; __pyx_pybuffer_lo_nd.refcount = 0; __pyx_pybuffernd_lo_nd.data = NULL; __pyx_pybuffernd_lo_nd.rcbuffer = &__pyx_pybuffer_lo_nd; __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; /* "ga4py/ga.pyx":258 * """ * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd * if lo is None and hi is None: # <<<<<<<<<<<<<< * GA_Abs_value(g_a) * else: */ __pyx_t_1 = (__pyx_v_lo == Py_None); if ((__pyx_t_1 != 0)) { __pyx_t_2 = (__pyx_v_hi == Py_None); __pyx_t_3 = (__pyx_t_2 != 0); } else { __pyx_t_3 = (__pyx_t_1 != 0); } if (__pyx_t_3) { /* "ga4py/ga.pyx":259 * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd * if lo is None and hi is None: * GA_Abs_value(g_a) # <<<<<<<<<<<<<< * else: * lo_nd,hi_nd = _lohi(g_a,lo,hi) */ GA_Abs_value(__pyx_v_g_a); goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":261 * GA_Abs_value(g_a) * else: * lo_nd,hi_nd = _lohi(g_a,lo,hi) # <<<<<<<<<<<<<< * GA_Abs_value_patch64(g_a, lo_nd.data, hi_nd.data) * */ __pyx_t_4 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) { PyObject* sequence = __pyx_t_4; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_5 = PyList_GET_ITEM(sequence, 0); __pyx_t_6 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); #endif __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_9 = 0; __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = ((PyArrayObject *)__pyx_t_6); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_13, __pyx_t_12, __pyx_t_11); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_9 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/ga.pyx":262 * else: * lo_nd,hi_nd = _lohi(g_a,lo,hi) * GA_Abs_value_patch64(g_a, lo_nd.data, hi_nd.data) # <<<<<<<<<<<<<< * * def acc(int g_a, buffer, lo=None, hi=None, alpha=None): */ GA_Abs_value_patch64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data)); } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.abs_value", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_lo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_9acc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_8acc[] = "acc(int g_a, buffer, lo=None, hi=None, alpha=None)\nCombines data from buffer with data in the global array patch.\n \n The buffer array is assumed to be have the same number of\n dimensions as the global array. If the buffer is not contiguous, a\n contiguous copy will be made.\n \n global array section (lo[],hi[]) += alpha * buffer\n\n This is a one-sided and atomic operation.\n\n :Parameters:\n g_a : int\n the array handle\n buffer : array-like\n must be contiguous and have same number of elements as patch\n lo : 1D array-like\n lower bound patch coordinates, inclusive\n hi : 1D array-like\n higher bound patch coordinates, exclusive\n alpha : object\n multiplier (converted to appropriate type)\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_9acc = {__Pyx_NAMESTR("acc"), (PyCFunction)__pyx_pw_5ga4py_2ga_9acc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_8acc)}; static PyObject *__pyx_pw_5ga4py_2ga_9acc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_buffer = 0; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; PyObject *__pyx_v_alpha = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("acc (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__buffer,&__pyx_n_s__lo,&__pyx_n_s__hi,&__pyx_n_s__alpha,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/ga.pyx":264 * GA_Abs_value_patch64(g_a, lo_nd.data, hi_nd.data) * * def acc(int g_a, buffer, lo=None, hi=None, alpha=None): # <<<<<<<<<<<<<< * """Combines data from buffer with data in the global array patch. * */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("acc", 0, 2, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alpha); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "acc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_buffer = values[1]; __pyx_v_lo = values[2]; __pyx_v_hi = values[3]; __pyx_v_alpha = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("acc", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.acc", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_8acc(__pyx_self, __pyx_v_g_a, __pyx_v_buffer, __pyx_v_lo, __pyx_v_hi, __pyx_v_alpha); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_8acc(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_buffer, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyObject *__pyx_v_alpha) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; struct __pyx_opt_args_5ga4py_2ga__acc_common __pyx_t_2; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("acc", 0); /* "ga4py/ga.pyx":288 * * """ * _acc_common(g_a, buffer, lo, hi, alpha) # <<<<<<<<<<<<<< * * cdef _acc_common(int g_a, buffer, lo=None, hi=None, alpha=None, */ __pyx_t_2.__pyx_n = 3; __pyx_t_2.lo = __pyx_v_lo; __pyx_t_2.hi = __pyx_v_hi; __pyx_t_2.alpha = __pyx_v_alpha; __pyx_t_1 = __pyx_f_5ga4py_2ga__acc_common(__pyx_v_g_a, __pyx_v_buffer, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.acc", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":290 * _acc_common(g_a, buffer, lo, hi, alpha) * * cdef _acc_common(int g_a, buffer, lo=None, hi=None, alpha=None, # <<<<<<<<<<<<<< * bint nb=False, bint periodic=False, skip=None): * """Combines data from buffer with data in the global array patch. */ static PyObject *__pyx_f_5ga4py_2ga__acc_common(int __pyx_v_g_a, PyObject *__pyx_v_buffer, struct __pyx_opt_args_5ga4py_2ga__acc_common *__pyx_optional_args) { PyObject *__pyx_v_lo = ((PyObject *)Py_None); PyObject *__pyx_v_hi = ((PyObject *)Py_None); PyObject *__pyx_v_alpha = ((PyObject *)Py_None); /* "ga4py/ga.pyx":291 * * cdef _acc_common(int g_a, buffer, lo=None, hi=None, alpha=None, * bint nb=False, bint periodic=False, skip=None): # <<<<<<<<<<<<<< * """Combines data from buffer with data in the global array patch. * */ int __pyx_v_nb = ((int)0); int __pyx_v_periodic = ((int)0); PyObject *__pyx_v_skip = ((PyObject *)Py_None); PyArrayObject *__pyx_v_lo_nd = 0; PyArrayObject *__pyx_v_hi_nd = 0; PyArrayObject *__pyx_v_ld_nd = 0; PyArrayObject *__pyx_v_shape = 0; PyArrayObject *__pyx_v_skip_nd = 0; PyArrayObject *__pyx_v_buffer_nd = 0; int __pyx_v_gtype; int __pyx_v_ialpha; long __pyx_v_lalpha; PY_LONG_LONG __pyx_v_llalpha; float __pyx_v_falpha; double __pyx_v_dalpha; long double __pyx_v_ldalpha; SingleComplex __pyx_v_fcalpha; DoubleComplex __pyx_v_dcalpha; void *__pyx_v_valpha; ga_nbhdl_t __pyx_v_nbhandle; PyObject *__pyx_v_dtype = NULL; PyObject *__pyx_v_strides = NULL; PyObject *__pyx_v_buffer_shape = NULL; PyObject *__pyx_v_i = NULL; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_ld_nd; __Pyx_Buffer __pyx_pybuffer_ld_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_nd; __Pyx_Buffer __pyx_pybuffer_lo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_shape; __Pyx_Buffer __pyx_pybuffer_shape; __Pyx_LocalBuf_ND __pyx_pybuffernd_skip_nd; __Pyx_Buffer __pyx_pybuffer_skip_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *(*__pyx_t_5)(PyObject *); PyArrayObject *__pyx_t_6 = NULL; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; int __pyx_t_11; int __pyx_t_12; Py_ssize_t __pyx_t_13; PyObject *(*__pyx_t_14)(PyObject *); Py_ssize_t __pyx_t_15; PyObject *__pyx_t_16 = NULL; int __pyx_t_17; int __pyx_t_18; PyObject *__pyx_t_19 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_acc_common", 0); if (__pyx_optional_args) { if (__pyx_optional_args->__pyx_n > 0) { __pyx_v_lo = __pyx_optional_args->lo; if (__pyx_optional_args->__pyx_n > 1) { __pyx_v_hi = __pyx_optional_args->hi; if (__pyx_optional_args->__pyx_n > 2) { __pyx_v_alpha = __pyx_optional_args->alpha; if (__pyx_optional_args->__pyx_n > 3) { __pyx_v_nb = __pyx_optional_args->nb; if (__pyx_optional_args->__pyx_n > 4) { __pyx_v_periodic = __pyx_optional_args->periodic; if (__pyx_optional_args->__pyx_n > 5) { __pyx_v_skip = __pyx_optional_args->skip; } } } } } } } __Pyx_INCREF(__pyx_v_alpha); __pyx_pybuffer_lo_nd.pybuffer.buf = NULL; __pyx_pybuffer_lo_nd.refcount = 0; __pyx_pybuffernd_lo_nd.data = NULL; __pyx_pybuffernd_lo_nd.rcbuffer = &__pyx_pybuffer_lo_nd; __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; __pyx_pybuffer_ld_nd.pybuffer.buf = NULL; __pyx_pybuffer_ld_nd.refcount = 0; __pyx_pybuffernd_ld_nd.data = NULL; __pyx_pybuffernd_ld_nd.rcbuffer = &__pyx_pybuffer_ld_nd; __pyx_pybuffer_shape.pybuffer.buf = NULL; __pyx_pybuffer_shape.refcount = 0; __pyx_pybuffernd_shape.data = NULL; __pyx_pybuffernd_shape.rcbuffer = &__pyx_pybuffer_shape; __pyx_pybuffer_skip_nd.pybuffer.buf = NULL; __pyx_pybuffer_skip_nd.refcount = 0; __pyx_pybuffernd_skip_nd.data = NULL; __pyx_pybuffernd_skip_nd.rcbuffer = &__pyx_pybuffer_skip_nd; /* "ga4py/ga.pyx":333 * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd, ld_nd, shape, skip_nd * cdef np.ndarray buffer_nd * cdef int gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * cdef int ialpha * cdef long lalpha */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":342 * cdef SingleComplex fcalpha * cdef DoubleComplex dcalpha * cdef void *valpha=NULL # <<<<<<<<<<<<<< * cdef ga_nbhdl_t nbhandle * dtype = _to_dtype[gtype] */ __pyx_v_valpha = NULL; /* "ga4py/ga.pyx":344 * cdef void *valpha=NULL * cdef ga_nbhdl_t nbhandle * dtype = _to_dtype[gtype] # <<<<<<<<<<<<<< * lo_nd,hi_nd = _lohi(g_a,lo,hi) * shape = hi_nd-lo_nd+1 */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_gtype, sizeof(int), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_dtype = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/ga.pyx":345 * cdef ga_nbhdl_t nbhandle * dtype = _to_dtype[gtype] * lo_nd,hi_nd = _lohi(g_a,lo,hi) # <<<<<<<<<<<<<< * shape = hi_nd-lo_nd+1 * if skip is None: */ __pyx_t_2 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { PyObject* sequence = __pyx_t_2; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_1 = PyList_GET_ITEM(sequence, 0); __pyx_t_3 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_3); #else __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; index = 0; __pyx_t_1 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L4_unpacking_done; __pyx_L3_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L4_unpacking_done:; } if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; __pyx_t_6 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":346 * dtype = _to_dtype[gtype] * lo_nd,hi_nd = _lohi(g_a,lo,hi) * shape = hi_nd-lo_nd+1 # <<<<<<<<<<<<<< * if skip is None: * skip_nd = None */ __pyx_t_2 = PyNumber_Subtract(((PyObject *)__pyx_v_hi_nd), ((PyObject *)__pyx_v_lo_nd)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_shape.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_shape.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_shape.rcbuffer->pybuffer, (PyObject*)__pyx_v_shape, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_shape.diminfo[0].strides = __pyx_pybuffernd_shape.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_shape.diminfo[0].shape = __pyx_pybuffernd_shape.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_shape = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":347 * lo_nd,hi_nd = _lohi(g_a,lo,hi) * shape = hi_nd-lo_nd+1 * if skip is None: # <<<<<<<<<<<<<< * skip_nd = None * else: */ __pyx_t_11 = (__pyx_v_skip == Py_None); __pyx_t_12 = (__pyx_t_11 != 0); if (__pyx_t_12) { /* "ga4py/ga.pyx":348 * shape = hi_nd-lo_nd+1 * if skip is None: * skip_nd = None # <<<<<<<<<<<<<< * else: * skip_nd = _inta64(skip) */ __pyx_t_6 = ((PyArrayObject *)Py_None); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_skip_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_skip_nd.diminfo[0].strides = __pyx_pybuffernd_skip_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_skip_nd.diminfo[0].shape = __pyx_pybuffernd_skip_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __Pyx_INCREF(Py_None); __pyx_v_skip_nd = ((PyArrayObject *)Py_None); goto __pyx_L5; } /*else*/ { /* "ga4py/ga.pyx":350 * skip_nd = None * else: * skip_nd = _inta64(skip) # <<<<<<<<<<<<<< * shape = (hi_nd-lo_nd)/skip_nd+1 * buffer_nd = np.asarray(buffer, dtype=dtype) */ __pyx_t_3 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_skip)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_3), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_skip_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_skip_nd.diminfo[0].strides = __pyx_pybuffernd_skip_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_skip_nd.diminfo[0].shape = __pyx_pybuffernd_skip_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_skip_nd = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":351 * else: * skip_nd = _inta64(skip) * shape = (hi_nd-lo_nd)/skip_nd+1 # <<<<<<<<<<<<<< * buffer_nd = np.asarray(buffer, dtype=dtype) * if buffer_nd.dtype != dtype: */ __pyx_t_3 = PyNumber_Subtract(((PyObject *)__pyx_v_hi_nd), ((PyObject *)__pyx_v_lo_nd)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_3, ((PyObject *)__pyx_v_skip_nd)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_shape.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_shape.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_shape.rcbuffer->pybuffer, (PyObject*)__pyx_v_shape, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_shape.diminfo[0].strides = __pyx_pybuffernd_shape.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_shape.diminfo[0].shape = __pyx_pybuffernd_shape.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_shape, ((PyArrayObject *)__pyx_t_3)); __pyx_t_3 = 0; } __pyx_L5:; /* "ga4py/ga.pyx":352 * skip_nd = _inta64(skip) * shape = (hi_nd-lo_nd)/skip_nd+1 * buffer_nd = np.asarray(buffer, dtype=dtype) # <<<<<<<<<<<<<< * if buffer_nd.dtype != dtype: * raise ValueError, "buffer is wrong type :: buffer=%s != %s" % ( */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__asarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_buffer); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_buffer); __Pyx_GIVEREF(__pyx_v_buffer); __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_v_dtype) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_buffer_nd = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":353 * shape = (hi_nd-lo_nd)/skip_nd+1 * buffer_nd = np.asarray(buffer, dtype=dtype) * if buffer_nd.dtype != dtype: # <<<<<<<<<<<<<< * raise ValueError, "buffer is wrong type :: buffer=%s != %s" % ( * buffer.dtype, dtype) */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_RichCompare(__pyx_t_4, __pyx_v_dtype, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_12) { /* "ga4py/ga.pyx":355 * if buffer_nd.dtype != dtype: * raise ValueError, "buffer is wrong type :: buffer=%s != %s" % ( * buffer.dtype, dtype) # <<<<<<<<<<<<<< * # Due to GA restrictions, buffer must not have negative strides * # and buffer's last stride must be same as itemsize */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_buffer, __pyx_n_s__dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_1 = 0; __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_1), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; /* "ga4py/ga.pyx":358 * # Due to GA restrictions, buffer must not have negative strides * # and buffer's last stride must be same as itemsize * strides = [buffer_nd.strides[i]/buffer_nd.itemsize # <<<<<<<<<<<<<< * for i in range(buffer_nd.ndim)] * if (strides and (strides[-1] != 1 or np.any(np.asarray(strides) < 0))): */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); /* "ga4py/ga.pyx":359 * # and buffer's last stride must be same as itemsize * strides = [buffer_nd.strides[i]/buffer_nd.itemsize * for i in range(buffer_nd.ndim)] # <<<<<<<<<<<<<< * if (strides and (strides[-1] != 1 or np.any(np.asarray(strides) < 0))): * buffer_nd = np.ascontiguousarray(buffer_nd) */ __pyx_t_4 = PyInt_FromLong(__pyx_v_buffer_nd->nd); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyList_CheckExact(__pyx_t_4) || PyTuple_CheckExact(__pyx_t_4)) { __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __pyx_t_13 = 0; __pyx_t_14 = NULL; } else { __pyx_t_13 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_14 = Py_TYPE(__pyx_t_3)->tp_iternext; } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; for (;;) { if (!__pyx_t_14 && PyList_CheckExact(__pyx_t_3)) { if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_4); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_14 && PyTuple_CheckExact(__pyx_t_3)) { if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_4); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_4 = __pyx_t_14(__pyx_t_3); if (unlikely(!__pyx_t_4)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_4); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":358 * # Due to GA restrictions, buffer must not have negative strides * # and buffer's last stride must be same as itemsize * strides = [buffer_nd.strides[i]/buffer_nd.itemsize # <<<<<<<<<<<<<< * for i in range(buffer_nd.ndim)] * if (strides and (strides[-1] != 1 or np.any(np.asarray(strides) < 0))): */ __pyx_t_15 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_15 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_PyInt_to_py_Py_intptr_t((__pyx_v_buffer_nd->strides[__pyx_t_15])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer_nd), __pyx_n_s__itemsize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_16 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_16))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_strides = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":360 * strides = [buffer_nd.strides[i]/buffer_nd.itemsize * for i in range(buffer_nd.ndim)] * if (strides and (strides[-1] != 1 or np.any(np.asarray(strides) < 0))): # <<<<<<<<<<<<<< * buffer_nd = np.ascontiguousarray(buffer_nd) * # we allow 1-d "flat" buffers in addition to buffers matching the shape of */ __pyx_t_12 = (((PyObject *)__pyx_v_strides) != Py_None) && (PyList_GET_SIZE(((PyObject *)__pyx_v_strides)) != 0); if (__pyx_t_12) { __pyx_t_1 = __Pyx_GetItemInt_List(((PyObject *)__pyx_v_strides), -1, sizeof(long), PyInt_FromLong, 1, 1, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_int_1, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_11) { __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__any); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__asarray); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)__pyx_v_strides)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_strides)); __Pyx_GIVEREF(((PyObject *)__pyx_v_strides)); __pyx_t_2 = PyObject_Call(__pyx_t_16, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_17 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_18 = __pyx_t_17; } else { __pyx_t_18 = __pyx_t_11; } __pyx_t_11 = __pyx_t_18; } else { __pyx_t_11 = __pyx_t_12; } if (__pyx_t_11) { /* "ga4py/ga.pyx":361 * for i in range(buffer_nd.ndim)] * if (strides and (strides[-1] != 1 or np.any(np.asarray(strides) < 0))): * buffer_nd = np.ascontiguousarray(buffer_nd) # <<<<<<<<<<<<<< * # we allow 1-d "flat" buffers in addition to buffers matching the shape of * # the requested region */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__ascontiguousarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)__pyx_v_buffer_nd)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_buffer_nd)); __Pyx_GIVEREF(((PyObject *)__pyx_v_buffer_nd)); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF_SET(__pyx_v_buffer_nd, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; goto __pyx_L9; } __pyx_L9:; /* "ga4py/ga.pyx":364 * # we allow 1-d "flat" buffers in addition to buffers matching the shape of * # the requested region * if buffer_nd.ndim == 1: # <<<<<<<<<<<<<< * if buffer_nd.size != np.prod(shape): * raise ValueError, ('buffer size does not match shape :: ' */ __pyx_t_11 = ((__pyx_v_buffer_nd->nd == 1) != 0); if (__pyx_t_11) { /* "ga4py/ga.pyx":365 * # the requested region * if buffer_nd.ndim == 1: * if buffer_nd.size != np.prod(shape): # <<<<<<<<<<<<<< * raise ValueError, ('buffer size does not match shape :: ' * 'buffer.size=%s != np.prod(shape)=%s' % ( */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer_nd), __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__prod); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)__pyx_v_shape)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_shape)); __pyx_t_16 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_16, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_11) { /* "ga4py/ga.pyx":368 * raise ValueError, ('buffer size does not match shape :: ' * 'buffer.size=%s != np.prod(shape)=%s' % ( * buffer_nd.size, np.prod(shape))) # <<<<<<<<<<<<<< * ld_nd = shape[1:] * else: */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer_nd), __pyx_n_s__size); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_16 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s__prod); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyTuple_New(1); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_INCREF(((PyObject *)__pyx_v_shape)); PyTuple_SET_ITEM(__pyx_t_16, 0, ((PyObject *)__pyx_v_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_shape)); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_16), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_16)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L11; } __pyx_L11:; /* "ga4py/ga.pyx":369 * 'buffer.size=%s != np.prod(shape)=%s' % ( * buffer_nd.size, np.prod(shape))) * ld_nd = shape[1:] # <<<<<<<<<<<<<< * else: * buffer_shape = [buffer_nd.shape[i] for i in range(buffer_nd.ndim)] */ __pyx_t_2 = __Pyx_PyObject_GetSlice(((PyObject *)__pyx_v_shape), 1, 0, NULL, NULL, &__pyx_k_slice_9, 1, 0, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ld_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_ld_nd.diminfo[0].strides = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ld_nd.diminfo[0].shape = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_ld_nd = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L10; } /*else*/ { /* "ga4py/ga.pyx":371 * ld_nd = shape[1:] * else: * buffer_shape = [buffer_nd.shape[i] for i in range(buffer_nd.ndim)] # <<<<<<<<<<<<<< * if not np.all(buffer_shape == shape): * raise ValueError, ('buffer shape does not match request shape :: ' */ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_16 = PyInt_FromLong(__pyx_v_buffer_nd->nd); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_16); __Pyx_GIVEREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyList_CheckExact(__pyx_t_16) || PyTuple_CheckExact(__pyx_t_16)) { __pyx_t_3 = __pyx_t_16; __Pyx_INCREF(__pyx_t_3); __pyx_t_13 = 0; __pyx_t_14 = NULL; } else { __pyx_t_13 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_16); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_14 = Py_TYPE(__pyx_t_3)->tp_iternext; } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; for (;;) { if (!__pyx_t_14 && PyList_CheckExact(__pyx_t_3)) { if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_16 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_16); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_16 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_14 && PyTuple_CheckExact(__pyx_t_3)) { if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_16 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_16); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_16 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_16 = __pyx_t_14(__pyx_t_3); if (unlikely(!__pyx_t_16)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_16); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_16); __pyx_t_16 = 0; __pyx_t_15 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_15 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_16 = __Pyx_PyInt_to_py_Py_intptr_t((__pyx_v_buffer_nd->dimensions[__pyx_t_15])); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_16))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_buffer_shape = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":372 * else: * buffer_shape = [buffer_nd.shape[i] for i in range(buffer_nd.ndim)] * if not np.all(buffer_shape == shape): # <<<<<<<<<<<<<< * raise ValueError, ('buffer shape does not match request shape :: ' * 'buffer_shape=%s != shape=%s' % ( */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__all); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_buffer_shape), ((PyObject *)__pyx_v_shape), Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_16 = PyTuple_New(1); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_16), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_12 = ((!__pyx_t_11) != 0); if (__pyx_t_12) { /* "ga4py/ga.pyx":375 * raise ValueError, ('buffer shape does not match request shape :: ' * 'buffer_shape=%s != shape=%s' % ( * buffer_shape, shape)) # <<<<<<<<<<<<<< * ld_nd = np.asarray([strides[i]/strides[i+1] * for i in range(buffer_nd.ndim-1)], dtype=np.int64) */ __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_v_buffer_shape)); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_buffer_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_buffer_shape)); __Pyx_INCREF(((PyObject *)__pyx_v_shape)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_shape)); __pyx_t_16 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_10), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_16)); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_16), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L14; } __pyx_L14:; /* "ga4py/ga.pyx":376 * 'buffer_shape=%s != shape=%s' % ( * buffer_shape, shape)) * ld_nd = np.asarray([strides[i]/strides[i+1] # <<<<<<<<<<<<<< * for i in range(buffer_nd.ndim-1)], dtype=np.int64) * if alpha is None: */ __pyx_t_16 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s__asarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyList_New(0); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); /* "ga4py/ga.pyx":377 * buffer_shape, shape)) * ld_nd = np.asarray([strides[i]/strides[i+1] * for i in range(buffer_nd.ndim-1)], dtype=np.int64) # <<<<<<<<<<<<<< * if alpha is None: * alpha = 1 */ __pyx_t_3 = PyInt_FromLong((__pyx_v_buffer_nd->nd - 1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) { __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __pyx_t_13 = 0; __pyx_t_14 = NULL; } else { __pyx_t_13 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_14 = Py_TYPE(__pyx_t_1)->tp_iternext; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; for (;;) { if (!__pyx_t_14 && PyList_CheckExact(__pyx_t_1)) { if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_3); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_14 && PyTuple_CheckExact(__pyx_t_1)) { if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_3); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_3 = __pyx_t_14(__pyx_t_1); if (unlikely(!__pyx_t_3)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_3); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":376 * 'buffer_shape=%s != shape=%s' % ( * buffer_shape, shape)) * ld_nd = np.asarray([strides[i]/strides[i+1] # <<<<<<<<<<<<<< * for i in range(buffer_nd.ndim-1)], dtype=np.int64) * if alpha is None: */ __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_strides), __pyx_v_i); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyNumber_Add(__pyx_v_i, __pyx_int_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_19 = PyObject_GetItem(((PyObject *)__pyx_v_strides), __pyx_t_4); if (!__pyx_t_19) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_19); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (unlikely(__Pyx_ListComp_Append(__pyx_t_16, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_t_16)); __Pyx_GIVEREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; __pyx_t_16 = PyDict_New(); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_16)); /* "ga4py/ga.pyx":377 * buffer_shape, shape)) * ld_nd = np.asarray([strides[i]/strides[i+1] * for i in range(buffer_nd.ndim-1)], dtype=np.int64) # <<<<<<<<<<<<<< * if alpha is None: * alpha = 1 */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__int64); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_t_16, ((PyObject *)__pyx_n_s__dtype), __pyx_t_19) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_19 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_16)); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; if (!(likely(((__pyx_t_19) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_19, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_19); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ld_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_ld_nd.diminfo[0].strides = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ld_nd.diminfo[0].shape = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_ld_nd = ((PyArrayObject *)__pyx_t_19); __pyx_t_19 = 0; } __pyx_L10:; /* "ga4py/ga.pyx":378 * ld_nd = np.asarray([strides[i]/strides[i+1] * for i in range(buffer_nd.ndim-1)], dtype=np.int64) * if alpha is None: # <<<<<<<<<<<<<< * alpha = 1 * valpha = _convert_multiplier(gtype, alpha, */ __pyx_t_12 = (__pyx_v_alpha == Py_None); __pyx_t_11 = (__pyx_t_12 != 0); if (__pyx_t_11) { /* "ga4py/ga.pyx":379 * for i in range(buffer_nd.ndim-1)], dtype=np.int64) * if alpha is None: * alpha = 1 # <<<<<<<<<<<<<< * valpha = _convert_multiplier(gtype, alpha, * &ialpha, &lalpha, &llalpha, */ __Pyx_INCREF(__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_alpha, __pyx_int_1); goto __pyx_L17; } __pyx_L17:; /* "ga4py/ga.pyx":383 * &ialpha, &lalpha, &llalpha, * &falpha, &dalpha, &ldalpha, * &fcalpha, &dcalpha) # <<<<<<<<<<<<<< * if nb: * NGA_NbAcc64(g_a, lo_nd.data, hi_nd.data, */ __pyx_v_valpha = __pyx_f_5ga4py_2ga__convert_multiplier(__pyx_v_gtype, __pyx_v_alpha, (&__pyx_v_ialpha), (&__pyx_v_lalpha), (&__pyx_v_llalpha), (&__pyx_v_falpha), (&__pyx_v_dalpha), (&__pyx_v_ldalpha), (&__pyx_v_fcalpha), (&__pyx_v_dcalpha)); /* "ga4py/ga.pyx":384 * &falpha, &dalpha, &ldalpha, * &fcalpha, &dcalpha) * if nb: # <<<<<<<<<<<<<< * NGA_NbAcc64(g_a, lo_nd.data, hi_nd.data, * buffer_nd.data, ld_nd.data, valpha, &nbhandle) */ __pyx_t_11 = (__pyx_v_nb != 0); if (__pyx_t_11) { /* "ga4py/ga.pyx":386 * if nb: * NGA_NbAcc64(g_a, lo_nd.data, hi_nd.data, * buffer_nd.data, ld_nd.data, valpha, &nbhandle) # <<<<<<<<<<<<<< * return nbhandle * elif periodic: */ NGA_NbAcc64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), ((void *)__pyx_v_buffer_nd->data), ((int64_t *)__pyx_v_ld_nd->data), __pyx_v_valpha, (&__pyx_v_nbhandle)); /* "ga4py/ga.pyx":387 * NGA_NbAcc64(g_a, lo_nd.data, hi_nd.data, * buffer_nd.data, ld_nd.data, valpha, &nbhandle) * return nbhandle # <<<<<<<<<<<<<< * elif periodic: * NGA_Periodic_acc64(g_a, lo_nd.data, hi_nd.data, */ __Pyx_XDECREF(__pyx_r); __pyx_t_19 = __Pyx_PyInt_to_py_Integer(__pyx_v_nbhandle); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_19); __pyx_r = __pyx_t_19; __pyx_t_19 = 0; goto __pyx_L0; goto __pyx_L18; } /* "ga4py/ga.pyx":388 * buffer_nd.data, ld_nd.data, valpha, &nbhandle) * return nbhandle * elif periodic: # <<<<<<<<<<<<<< * NGA_Periodic_acc64(g_a, lo_nd.data, hi_nd.data, * buffer_nd.data, ld_nd.data, valpha) */ __pyx_t_11 = (__pyx_v_periodic != 0); if (__pyx_t_11) { /* "ga4py/ga.pyx":390 * elif periodic: * NGA_Periodic_acc64(g_a, lo_nd.data, hi_nd.data, * buffer_nd.data, ld_nd.data, valpha) # <<<<<<<<<<<<<< * elif skip is not None: * NGA_Strided_acc64(g_a, lo_nd.data, hi_nd.data, */ NGA_Periodic_acc64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), ((void *)__pyx_v_buffer_nd->data), ((int64_t *)__pyx_v_ld_nd->data), __pyx_v_valpha); goto __pyx_L18; } /* "ga4py/ga.pyx":391 * NGA_Periodic_acc64(g_a, lo_nd.data, hi_nd.data, * buffer_nd.data, ld_nd.data, valpha) * elif skip is not None: # <<<<<<<<<<<<<< * NGA_Strided_acc64(g_a, lo_nd.data, hi_nd.data, * skip_nd.data, */ __pyx_t_11 = (__pyx_v_skip != Py_None); __pyx_t_12 = (__pyx_t_11 != 0); if (__pyx_t_12) { /* "ga4py/ga.pyx":394 * NGA_Strided_acc64(g_a, lo_nd.data, hi_nd.data, * skip_nd.data, * buffer_nd.data, ld_nd.data, valpha) # <<<<<<<<<<<<<< * else: * NGA_Acc64(g_a, lo_nd.data, hi_nd.data, */ NGA_Strided_acc64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), ((int64_t *)__pyx_v_skip_nd->data), ((void *)__pyx_v_buffer_nd->data), ((int64_t *)__pyx_v_ld_nd->data), __pyx_v_valpha); goto __pyx_L18; } /*else*/ { /* "ga4py/ga.pyx":397 * else: * NGA_Acc64(g_a, lo_nd.data, hi_nd.data, * buffer_nd.data, ld_nd.data, valpha) # <<<<<<<<<<<<<< * * def access(int g_a, lo=None, hi=None, int proc=-1): */ NGA_Acc64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), ((void *)__pyx_v_buffer_nd->data), ((int64_t *)__pyx_v_ld_nd->data), __pyx_v_valpha); } __pyx_L18:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_16); __Pyx_XDECREF(__pyx_t_19); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_shape.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga._acc_common", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_shape.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_lo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_ld_nd); __Pyx_XDECREF((PyObject *)__pyx_v_shape); __Pyx_XDECREF((PyObject *)__pyx_v_skip_nd); __Pyx_XDECREF((PyObject *)__pyx_v_buffer_nd); __Pyx_XDECREF(__pyx_v_dtype); __Pyx_XDECREF(__pyx_v_strides); __Pyx_XDECREF(__pyx_v_buffer_shape); __Pyx_XDECREF(__pyx_v_i); __Pyx_XDECREF(__pyx_v_alpha); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_11access(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_10access[] = "access(int g_a, lo=None, hi=None, int proc=-1)\nReturns local array patch.\n \n This routine allows to access directly, in place elements in the local\n section of a global array. It useful for writing new GA operations.\n If no patch is specified, the entire local patch is returned. If this\n process does not own any data, None is returned.\n \n Note: The entire local data is always accessed, but if a smaller patch is\n requested, an appropriately sliced ndarray is returned.\n\n If proc is not specified, then ga.nodeid() is used.\n\n Each call to ga.access has to be followed by a call to either ga.release\n or ga.release_update. You can access in this fashion only local data.\n Since the data is shared with other processes, you need to consider issues\n of mutual exclusion.\n\n This operation is local. \n\n :Parameters:\n g_a : int\n the array handle\n lo : 1D array-like\n lower bound patch coordinates, inclusive\n hi : 1D array-like\n higher bound patch coordinates, exclusive\n proc : int\n defaults to ga.nodeid(), but can specify a proc within the same\n SMP node to access its data instead\n \n :returns: ndarray representing local patch\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_11access = {__Pyx_NAMESTR("access"), (PyCFunction)__pyx_pw_5ga4py_2ga_11access, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_10access)}; static PyObject *__pyx_pw_5ga4py_2ga_11access(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_v_proc; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("access (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__lo,&__pyx_n_s__hi,&__pyx_n_s__proc,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/ga.pyx":399 * buffer_nd.data, ld_nd.data, valpha) * * def access(int g_a, lo=None, hi=None, int proc=-1): # <<<<<<<<<<<<<< * """Returns local array patch. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__proc); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "access") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; if (values[3]) { __pyx_v_proc = __Pyx_PyInt_AsInt(values[3]); if (unlikely((__pyx_v_proc == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_proc = ((int)-1); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("access", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.access", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_10access(__pyx_self, __pyx_v_g_a, __pyx_v_lo, __pyx_v_hi, __pyx_v_proc); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_10access(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, int __pyx_v_proc) { PyArrayObject *__pyx_v_lo_nd = 0; PyArrayObject *__pyx_v_hi_nd = 0; PyArrayObject *__pyx_v_ld_nd = 0; PyArrayObject *__pyx_v_lo_dst = 0; PyArrayObject *__pyx_v_hi_dst = 0; PyArrayObject *__pyx_v_dims_nd = 0; int __pyx_v_i; int __pyx_v_gtype; int __pyx_v_dimlen; PyArray_Descr *__pyx_v_dtype = 0; void *__pyx_v_ptr; npy_intp *__pyx_v_dims; npy_intp *__pyx_v_strides; PyObject *__pyx_v_array = NULL; PyObject *__pyx_v_slices = NULL; __Pyx_LocalBuf_ND __pyx_pybuffernd_dims_nd; __Pyx_Buffer __pyx_pybuffer_dims_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_dst; __Pyx_Buffer __pyx_pybuffer_hi_dst; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_ld_nd; __Pyx_Buffer __pyx_pybuffer_ld_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_dst; __Pyx_Buffer __pyx_pybuffer_lo_dst; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_nd; __Pyx_Buffer __pyx_pybuffer_lo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; struct __pyx_opt_args_5ga4py_2ga_distribution __pyx_t_4; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *(*__pyx_t_7)(PyObject *); PyArrayObject *__pyx_t_8 = NULL; int __pyx_t_9; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; long __pyx_t_13; long __pyx_t_14; int __pyx_t_15; int __pyx_t_16; PyObject *__pyx_t_17 = NULL; long __pyx_t_18; long __pyx_t_19; int __pyx_t_20; int __pyx_t_21; int __pyx_t_22; int __pyx_t_23; int __pyx_t_24; int __pyx_t_25; int __pyx_t_26; int __pyx_t_27; int __pyx_t_28; int __pyx_t_29; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("access", 0); __pyx_pybuffer_lo_nd.pybuffer.buf = NULL; __pyx_pybuffer_lo_nd.refcount = 0; __pyx_pybuffernd_lo_nd.data = NULL; __pyx_pybuffernd_lo_nd.rcbuffer = &__pyx_pybuffer_lo_nd; __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; __pyx_pybuffer_ld_nd.pybuffer.buf = NULL; __pyx_pybuffer_ld_nd.refcount = 0; __pyx_pybuffernd_ld_nd.data = NULL; __pyx_pybuffernd_ld_nd.rcbuffer = &__pyx_pybuffer_ld_nd; __pyx_pybuffer_lo_dst.pybuffer.buf = NULL; __pyx_pybuffer_lo_dst.refcount = 0; __pyx_pybuffernd_lo_dst.data = NULL; __pyx_pybuffernd_lo_dst.rcbuffer = &__pyx_pybuffer_lo_dst; __pyx_pybuffer_hi_dst.pybuffer.buf = NULL; __pyx_pybuffer_hi_dst.refcount = 0; __pyx_pybuffernd_hi_dst.data = NULL; __pyx_pybuffernd_hi_dst.rcbuffer = &__pyx_pybuffer_hi_dst; __pyx_pybuffer_dims_nd.pybuffer.buf = NULL; __pyx_pybuffer_dims_nd.refcount = 0; __pyx_pybuffernd_dims_nd.data = NULL; __pyx_pybuffernd_dims_nd.rcbuffer = &__pyx_pybuffer_dims_nd; /* "ga4py/ga.pyx":435 * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd * cdef np.ndarray[np.int64_t, ndim=1] ld_nd, lo_dst, hi_dst, dims_nd * cdef int i, gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * cdef int dimlen=GA_Ndim(g_a) * cdef np.dtype dtype = _to_dtype[gtype] */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":436 * cdef np.ndarray[np.int64_t, ndim=1] ld_nd, lo_dst, hi_dst, dims_nd * cdef int i, gtype=inquire_type(g_a) * cdef int dimlen=GA_Ndim(g_a) # <<<<<<<<<<<<<< * cdef np.dtype dtype = _to_dtype[gtype] * cdef void *ptr */ __pyx_v_dimlen = GA_Ndim(__pyx_v_g_a); /* "ga4py/ga.pyx":437 * cdef int i, gtype=inquire_type(g_a) * cdef int dimlen=GA_Ndim(g_a) * cdef np.dtype dtype = _to_dtype[gtype] # <<<<<<<<<<<<<< * cdef void *ptr * cdef np.npy_intp *dims = NULL */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_gtype, sizeof(int), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_dtype = ((PyArray_Descr *)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":439 * cdef np.dtype dtype = _to_dtype[gtype] * cdef void *ptr * cdef np.npy_intp *dims = NULL # <<<<<<<<<<<<<< * cdef np.npy_intp *strides = NULL * if proc < 0: */ __pyx_v_dims = NULL; /* "ga4py/ga.pyx":440 * cdef void *ptr * cdef np.npy_intp *dims = NULL * cdef np.npy_intp *strides = NULL # <<<<<<<<<<<<<< * if proc < 0: * proc = GA_Nodeid() */ __pyx_v_strides = NULL; /* "ga4py/ga.pyx":441 * cdef np.npy_intp *dims = NULL * cdef np.npy_intp *strides = NULL * if proc < 0: # <<<<<<<<<<<<<< * proc = GA_Nodeid() * # first things first, if no data is owned, return None */ __pyx_t_3 = ((__pyx_v_proc < 0) != 0); if (__pyx_t_3) { /* "ga4py/ga.pyx":442 * cdef np.npy_intp *strides = NULL * if proc < 0: * proc = GA_Nodeid() # <<<<<<<<<<<<<< * # first things first, if no data is owned, return None * lo_dst,hi_dst = distribution(g_a, proc) */ __pyx_v_proc = GA_Nodeid(); goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":444 * proc = GA_Nodeid() * # first things first, if no data is owned, return None * lo_dst,hi_dst = distribution(g_a, proc) # <<<<<<<<<<<<<< * if lo_dst[0] < 0 or hi_dst[0] < 0: * return None */ __pyx_t_4.__pyx_n = 1; __pyx_t_4.proc = __pyx_v_proc; __pyx_t_2 = __pyx_f_5ga4py_2ga_distribution(__pyx_v_g_a, 0, &__pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { PyObject* sequence = __pyx_t_2; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_1 = PyList_GET_ITEM(sequence, 0); __pyx_t_5 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_5); #else __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; index = 0; __pyx_t_1 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_1)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_dst, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_11, __pyx_t_12); } } __pyx_pybuffernd_lo_dst.diminfo[0].strides = __pyx_pybuffernd_lo_dst.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_dst.diminfo[0].shape = __pyx_pybuffernd_lo_dst.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_8 = 0; __pyx_v_lo_dst = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; __pyx_t_8 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_dst, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_12, __pyx_t_11, __pyx_t_10); } } __pyx_pybuffernd_hi_dst.diminfo[0].strides = __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_dst.diminfo[0].shape = __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_8 = 0; __pyx_v_hi_dst = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/ga.pyx":445 * # first things first, if no data is owned, return None * lo_dst,hi_dst = distribution(g_a, proc) * if lo_dst[0] < 0 or hi_dst[0] < 0: # <<<<<<<<<<<<<< * return None * # always access the entire local data */ __pyx_t_13 = 0; __pyx_t_9 = -1; if (__pyx_t_13 < 0) { __pyx_t_13 += __pyx_pybuffernd_lo_dst.diminfo[0].shape; if (unlikely(__pyx_t_13 < 0)) __pyx_t_9 = 0; } else if (unlikely(__pyx_t_13 >= __pyx_pybuffernd_lo_dst.diminfo[0].shape)) __pyx_t_9 = 0; if (unlikely(__pyx_t_9 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_9); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_3 = (((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_lo_dst.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_lo_dst.diminfo[0].strides)) < 0) != 0); if (!__pyx_t_3) { __pyx_t_14 = 0; __pyx_t_9 = -1; if (__pyx_t_14 < 0) { __pyx_t_14 += __pyx_pybuffernd_hi_dst.diminfo[0].shape; if (unlikely(__pyx_t_14 < 0)) __pyx_t_9 = 0; } else if (unlikely(__pyx_t_14 >= __pyx_pybuffernd_hi_dst.diminfo[0].shape)) __pyx_t_9 = 0; if (unlikely(__pyx_t_9 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_9); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_15 = (((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_hi_dst.diminfo[0].strides)) < 0) != 0); __pyx_t_16 = __pyx_t_15; } else { __pyx_t_16 = __pyx_t_3; } if (__pyx_t_16) { /* "ga4py/ga.pyx":446 * lo_dst,hi_dst = distribution(g_a, proc) * if lo_dst[0] < 0 or hi_dst[0] < 0: * return None # <<<<<<<<<<<<<< * # always access the entire local data * ld_nd = np.ones(dimlen, dtype=np.int64) */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_None); __pyx_r = Py_None; goto __pyx_L0; goto __pyx_L6; } __pyx_L6:; /* "ga4py/ga.pyx":448 * return None * # always access the entire local data * ld_nd = np.ones(dimlen, dtype=np.int64) # <<<<<<<<<<<<<< * # put hi_dst back to GA inclusive indexing convention * hi_dst -= 1 */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__ones); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyInt_FromLong(__pyx_v_dimlen); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__int64); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_17) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (!(likely(((__pyx_t_17) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_17, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = ((PyArrayObject *)__pyx_t_17); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ld_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_11, __pyx_t_12); } } __pyx_pybuffernd_ld_nd.diminfo[0].strides = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ld_nd.diminfo[0].shape = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_8 = 0; __pyx_v_ld_nd = ((PyArrayObject *)__pyx_t_17); __pyx_t_17 = 0; /* "ga4py/ga.pyx":450 * ld_nd = np.ones(dimlen, dtype=np.int64) * # put hi_dst back to GA inclusive indexing convention * hi_dst -= 1 # <<<<<<<<<<<<<< * NGA_Access64(g_a, lo_dst.data, hi_dst.data, &ptr, * ld_nd.data) */ __pyx_t_17 = PyNumber_InPlaceSubtract(((PyObject *)__pyx_v_hi_dst), __pyx_int_1); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); if (!(likely(((__pyx_t_17) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_17, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = ((PyArrayObject *)__pyx_t_17); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_dst, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_12, __pyx_t_11, __pyx_t_10); } } __pyx_pybuffernd_hi_dst.diminfo[0].strides = __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_dst.diminfo[0].shape = __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_8 = 0; __Pyx_DECREF_SET(__pyx_v_hi_dst, ((PyArrayObject *)__pyx_t_17)); __pyx_t_17 = 0; /* "ga4py/ga.pyx":452 * hi_dst -= 1 * NGA_Access64(g_a, lo_dst.data, hi_dst.data, &ptr, * ld_nd.data) # <<<<<<<<<<<<<< * # put hi_dst back to Python exclusive indexing convention * hi_dst += 1 */ NGA_Access64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_dst->data), ((int64_t *)__pyx_v_hi_dst->data), (&__pyx_v_ptr), ((int64_t *)__pyx_v_ld_nd->data)); /* "ga4py/ga.pyx":454 * ld_nd.data) * # put hi_dst back to Python exclusive indexing convention * hi_dst += 1 # <<<<<<<<<<<<<< * dims_nd = hi_dst-lo_dst * # fix the strides, for example if ghost cells are in use */ __pyx_t_17 = PyNumber_InPlaceAdd(((PyObject *)__pyx_v_hi_dst), __pyx_int_1); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); if (!(likely(((__pyx_t_17) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_17, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = ((PyArrayObject *)__pyx_t_17); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_dst, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_11, __pyx_t_12); } } __pyx_pybuffernd_hi_dst.diminfo[0].strides = __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_dst.diminfo[0].shape = __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_8 = 0; __Pyx_DECREF_SET(__pyx_v_hi_dst, ((PyArrayObject *)__pyx_t_17)); __pyx_t_17 = 0; /* "ga4py/ga.pyx":455 * # put hi_dst back to Python exclusive indexing convention * hi_dst += 1 * dims_nd = hi_dst-lo_dst # <<<<<<<<<<<<<< * # fix the strides, for example if ghost cells are in use * # or if memory is allocated in a non-contiguous way */ __pyx_t_17 = PyNumber_Subtract(((PyObject *)__pyx_v_hi_dst), ((PyObject *)__pyx_v_lo_dst)); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); if (!(likely(((__pyx_t_17) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_17, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = ((PyArrayObject *)__pyx_t_17); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_dims_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_12, __pyx_t_11, __pyx_t_10); } } __pyx_pybuffernd_dims_nd.diminfo[0].strides = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dims_nd.diminfo[0].shape = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_8 = 0; __pyx_v_dims_nd = ((PyArrayObject *)__pyx_t_17); __pyx_t_17 = 0; /* "ga4py/ga.pyx":458 * # fix the strides, for example if ghost cells are in use * # or if memory is allocated in a non-contiguous way * if dimlen >= 3: # <<<<<<<<<<<<<< * for i in range(-3, -dimlen-1, -1): * ld_nd[i] *= ld_nd[i+1] */ __pyx_t_16 = ((__pyx_v_dimlen >= 3) != 0); if (__pyx_t_16) { /* "ga4py/ga.pyx":459 * # or if memory is allocated in a non-contiguous way * if dimlen >= 3: * for i in range(-3, -dimlen-1, -1): # <<<<<<<<<<<<<< * ld_nd[i] *= ld_nd[i+1] * ld_nd *= _to_dtype[gtype].itemsize */ __pyx_t_18 = ((-__pyx_v_dimlen) - 1); for (__pyx_t_9 = -3; __pyx_t_9 > __pyx_t_18; __pyx_t_9-=1) { __pyx_v_i = __pyx_t_9; /* "ga4py/ga.pyx":460 * if dimlen >= 3: * for i in range(-3, -dimlen-1, -1): * ld_nd[i] *= ld_nd[i+1] # <<<<<<<<<<<<<< * ld_nd *= _to_dtype[gtype].itemsize * # must convert int64_t ndarray shape to npy_intp array */ __pyx_t_19 = (__pyx_v_i + 1); __pyx_t_20 = -1; if (__pyx_t_19 < 0) { __pyx_t_19 += __pyx_pybuffernd_ld_nd.diminfo[0].shape; if (unlikely(__pyx_t_19 < 0)) __pyx_t_20 = 0; } else if (unlikely(__pyx_t_19 >= __pyx_pybuffernd_ld_nd.diminfo[0].shape)) __pyx_t_20 = 0; if (unlikely(__pyx_t_20 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_20); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_20 = __pyx_v_i; __pyx_t_21 = -1; if (__pyx_t_20 < 0) { __pyx_t_20 += __pyx_pybuffernd_ld_nd.diminfo[0].shape; if (unlikely(__pyx_t_20 < 0)) __pyx_t_21 = 0; } else if (unlikely(__pyx_t_20 >= __pyx_pybuffernd_ld_nd.diminfo[0].shape)) __pyx_t_21 = 0; if (unlikely(__pyx_t_21 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_21); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_ld_nd.diminfo[0].strides) *= (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_ld_nd.diminfo[0].strides)); } goto __pyx_L7; } __pyx_L7:; /* "ga4py/ga.pyx":461 * for i in range(-3, -dimlen-1, -1): * ld_nd[i] *= ld_nd[i+1] * ld_nd *= _to_dtype[gtype].itemsize # <<<<<<<<<<<<<< * # must convert int64_t ndarray shape to npy_intp array * dims = malloc(dimlen*sizeof(np.npy_intp)) */ __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_17, __pyx_v_gtype, sizeof(int), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__itemsize); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_InPlaceMultiply(((PyObject *)__pyx_v_ld_nd), __pyx_t_17); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ld_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_11, __pyx_t_12); } } __pyx_pybuffernd_ld_nd.diminfo[0].strides = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ld_nd.diminfo[0].shape = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_8 = 0; __Pyx_DECREF_SET(__pyx_v_ld_nd, ((PyArrayObject *)__pyx_t_2)); __pyx_t_2 = 0; /* "ga4py/ga.pyx":463 * ld_nd *= _to_dtype[gtype].itemsize * # must convert int64_t ndarray shape to npy_intp array * dims = malloc(dimlen*sizeof(np.npy_intp)) # <<<<<<<<<<<<<< * strides = malloc(dimlen*sizeof(np.npy_intp)) * for i in range(dimlen): */ __pyx_v_dims = ((npy_intp *)malloc((__pyx_v_dimlen * (sizeof(npy_intp))))); /* "ga4py/ga.pyx":464 * # must convert int64_t ndarray shape to npy_intp array * dims = malloc(dimlen*sizeof(np.npy_intp)) * strides = malloc(dimlen*sizeof(np.npy_intp)) # <<<<<<<<<<<<<< * for i in range(dimlen): * dims[i] = dims_nd[i] */ __pyx_v_strides = ((npy_intp *)malloc((__pyx_v_dimlen * (sizeof(npy_intp))))); /* "ga4py/ga.pyx":465 * dims = malloc(dimlen*sizeof(np.npy_intp)) * strides = malloc(dimlen*sizeof(np.npy_intp)) * for i in range(dimlen): # <<<<<<<<<<<<<< * dims[i] = dims_nd[i] * strides[i] = ld_nd[i] */ __pyx_t_9 = __pyx_v_dimlen; for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_9; __pyx_t_21+=1) { __pyx_v_i = __pyx_t_21; /* "ga4py/ga.pyx":466 * strides = malloc(dimlen*sizeof(np.npy_intp)) * for i in range(dimlen): * dims[i] = dims_nd[i] # <<<<<<<<<<<<<< * strides[i] = ld_nd[i] * Py_INCREF(dtype) */ __pyx_t_22 = __pyx_v_i; __pyx_t_23 = -1; if (__pyx_t_22 < 0) { __pyx_t_22 += __pyx_pybuffernd_dims_nd.diminfo[0].shape; if (unlikely(__pyx_t_22 < 0)) __pyx_t_23 = 0; } else if (unlikely(__pyx_t_22 >= __pyx_pybuffernd_dims_nd.diminfo[0].shape)) __pyx_t_23 = 0; if (unlikely(__pyx_t_23 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_23); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } (__pyx_v_dims[__pyx_v_i]) = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_dims_nd.diminfo[0].strides)); /* "ga4py/ga.pyx":467 * for i in range(dimlen): * dims[i] = dims_nd[i] * strides[i] = ld_nd[i] # <<<<<<<<<<<<<< * Py_INCREF(dtype) * array = PyArray_NewFromDescr(np.ndarray, */ __pyx_t_23 = __pyx_v_i; __pyx_t_24 = -1; if (__pyx_t_23 < 0) { __pyx_t_23 += __pyx_pybuffernd_ld_nd.diminfo[0].shape; if (unlikely(__pyx_t_23 < 0)) __pyx_t_24 = 0; } else if (unlikely(__pyx_t_23 >= __pyx_pybuffernd_ld_nd.diminfo[0].shape)) __pyx_t_24 = 0; if (unlikely(__pyx_t_24 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_24); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } (__pyx_v_strides[__pyx_v_i]) = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_ld_nd.diminfo[0].strides)); } /* "ga4py/ga.pyx":468 * dims[i] = dims_nd[i] * strides[i] = ld_nd[i] * Py_INCREF(dtype) # <<<<<<<<<<<<<< * array = PyArray_NewFromDescr(np.ndarray, * dtype, dimlen, dims, strides, ptr, np.NPY_WRITEABLE, None) */ Py_INCREF(((PyObject *)__pyx_v_dtype)); /* "ga4py/ga.pyx":470 * Py_INCREF(dtype) * array = PyArray_NewFromDescr(np.ndarray, * dtype, dimlen, dims, strides, ptr, np.NPY_WRITEABLE, None) # <<<<<<<<<<<<<< * free(dims) * free(strides) */ __pyx_t_2 = PyArray_NewFromDescr(((PyTypeObject *)((PyObject*)__pyx_ptype_5numpy_ndarray)), __pyx_v_dtype, __pyx_v_dimlen, __pyx_v_dims, __pyx_v_strides, __pyx_v_ptr, NPY_WRITEABLE, Py_None); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_array = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/ga.pyx":471 * array = PyArray_NewFromDescr(np.ndarray, * dtype, dimlen, dims, strides, ptr, np.NPY_WRITEABLE, None) * free(dims) # <<<<<<<<<<<<<< * free(strides) * if lo is not None or hi is not None: */ free(__pyx_v_dims); /* "ga4py/ga.pyx":472 * dtype, dimlen, dims, strides, ptr, np.NPY_WRITEABLE, None) * free(dims) * free(strides) # <<<<<<<<<<<<<< * if lo is not None or hi is not None: * if lo is not None: */ free(__pyx_v_strides); /* "ga4py/ga.pyx":473 * free(dims) * free(strides) * if lo is not None or hi is not None: # <<<<<<<<<<<<<< * if lo is not None: * lo_nd = _inta64(lo) */ __pyx_t_16 = (__pyx_v_lo != Py_None); if (!(__pyx_t_16 != 0)) { __pyx_t_3 = (__pyx_v_hi != Py_None); __pyx_t_15 = (__pyx_t_3 != 0); } else { __pyx_t_15 = (__pyx_t_16 != 0); } if (__pyx_t_15) { /* "ga4py/ga.pyx":474 * free(strides) * if lo is not None or hi is not None: * if lo is not None: # <<<<<<<<<<<<<< * lo_nd = _inta64(lo) * else: */ __pyx_t_15 = (__pyx_v_lo != Py_None); __pyx_t_16 = (__pyx_t_15 != 0); if (__pyx_t_16) { /* "ga4py/ga.pyx":475 * if lo is not None or hi is not None: * if lo is not None: * lo_nd = _inta64(lo) # <<<<<<<<<<<<<< * else: * lo_nd = lo_dst */ __pyx_t_2 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_lo)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_2), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_12, __pyx_t_11, __pyx_t_10); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L13; } /*else*/ { /* "ga4py/ga.pyx":477 * lo_nd = _inta64(lo) * else: * lo_nd = lo_dst # <<<<<<<<<<<<<< * if hi is not None: * hi_nd = _inta64(hi) */ { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_v_lo_dst), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_11, __pyx_t_12); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __Pyx_INCREF(((PyObject *)__pyx_v_lo_dst)); __pyx_v_lo_nd = ((PyArrayObject *)__pyx_v_lo_dst); } __pyx_L13:; /* "ga4py/ga.pyx":478 * else: * lo_nd = lo_dst * if hi is not None: # <<<<<<<<<<<<<< * hi_nd = _inta64(hi) * else: */ __pyx_t_16 = (__pyx_v_hi != Py_None); __pyx_t_15 = (__pyx_t_16 != 0); if (__pyx_t_15) { /* "ga4py/ga.pyx":479 * lo_nd = lo_dst * if hi is not None: * hi_nd = _inta64(hi) # <<<<<<<<<<<<<< * else: * hi_nd = hi_dst */ __pyx_t_2 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_hi)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_2), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_12, __pyx_t_11, __pyx_t_10); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L14; } /*else*/ { /* "ga4py/ga.pyx":481 * hi_nd = _inta64(hi) * else: * hi_nd = hi_dst # <<<<<<<<<<<<<< * # sanity checks * if np.sometrue(lo_nd>hi_nd): */ { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_v_hi_dst), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_11, __pyx_t_12); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __Pyx_INCREF(((PyObject *)__pyx_v_hi_dst)); __pyx_v_hi_nd = ((PyArrayObject *)__pyx_v_hi_dst); } __pyx_L14:; /* "ga4py/ga.pyx":483 * hi_nd = hi_dst * # sanity checks * if np.sometrue(lo_nd>hi_nd): # <<<<<<<<<<<<<< * raise ValueError,"lo>hi lo=%s hi=%s"%(lo_nd,hi_nd) * if np.sometrue(lo_ndhi_nd): * raise ValueError,"lo>hi lo=%s hi=%s"%(lo_nd,hi_nd) # <<<<<<<<<<<<<< * if np.sometrue(lo_ndhi_nd): * raise ValueError,"lo>hi lo=%s hi=%s"%(lo_nd,hi_nd) * if np.sometrue(lo_ndhi_dst): */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__sometrue); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_lo_nd), ((PyObject *)__pyx_v_lo_dst), Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_17 = PyTuple_New(1); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_17), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_17)); __pyx_t_17 = 0; __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_15 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_15) { /* "ga4py/ga.pyx":486 * raise ValueError,"lo>hi lo=%s hi=%s"%(lo_nd,hi_nd) * if np.sometrue(lo_ndhi_dst): * raise ValueError,"hi out of bounds hi_dst=%s hi=%s"%(hi_dst,hi_nd) */ __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_v_lo_dst)); PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_lo_dst)); __Pyx_GIVEREF(((PyObject *)__pyx_v_lo_dst)); __Pyx_INCREF(((PyObject *)__pyx_v_lo_nd)); PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_lo_nd)); __Pyx_GIVEREF(((PyObject *)__pyx_v_lo_nd)); __pyx_t_17 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_12), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_17)); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_17), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_17)); __pyx_t_17 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L16; } __pyx_L16:; /* "ga4py/ga.pyx":487 * if np.sometrue(lo_ndhi_dst): # <<<<<<<<<<<<<< * raise ValueError,"hi out of bounds hi_dst=%s hi=%s"%(hi_dst,hi_nd) * slices = [] */ __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s__sometrue); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = PyObject_RichCompare(((PyObject *)__pyx_v_hi_nd), ((PyObject *)__pyx_v_hi_dst), Py_GT); __Pyx_XGOTREF(__pyx_t_17); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_17); __Pyx_GIVEREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely(__pyx_t_15 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (__pyx_t_15) { /* "ga4py/ga.pyx":488 * raise ValueError,"lo out of bounds lo_dst=%s lo=%s"%(lo_dst,lo_nd) * if np.sometrue(hi_nd>hi_dst): * raise ValueError,"hi out of bounds hi_dst=%s hi=%s"%(hi_dst,hi_nd) # <<<<<<<<<<<<<< * slices = [] * for i in range(dimlen): */ __pyx_t_17 = PyTuple_New(2); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __Pyx_INCREF(((PyObject *)__pyx_v_hi_dst)); PyTuple_SET_ITEM(__pyx_t_17, 0, ((PyObject *)__pyx_v_hi_dst)); __Pyx_GIVEREF(((PyObject *)__pyx_v_hi_dst)); __Pyx_INCREF(((PyObject *)__pyx_v_hi_nd)); PyTuple_SET_ITEM(__pyx_t_17, 1, ((PyObject *)__pyx_v_hi_nd)); __Pyx_GIVEREF(((PyObject *)__pyx_v_hi_nd)); __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_13), ((PyObject *)__pyx_t_17)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_DECREF(((PyObject *)__pyx_t_17)); __pyx_t_17 = 0; __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L17; } __pyx_L17:; /* "ga4py/ga.pyx":489 * if np.sometrue(hi_nd>hi_dst): * raise ValueError,"hi out of bounds hi_dst=%s hi=%s"%(hi_dst,hi_nd) * slices = [] # <<<<<<<<<<<<<< * for i in range(dimlen): * slices.append(slice(lo_nd[i]-lo_dst[i],hi_nd[i]-lo_dst[i])) */ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_slices = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":490 * raise ValueError,"hi out of bounds hi_dst=%s hi=%s"%(hi_dst,hi_nd) * slices = [] * for i in range(dimlen): # <<<<<<<<<<<<<< * slices.append(slice(lo_nd[i]-lo_dst[i],hi_nd[i]-lo_dst[i])) * return array[slices] */ __pyx_t_9 = __pyx_v_dimlen; for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_9; __pyx_t_21+=1) { __pyx_v_i = __pyx_t_21; /* "ga4py/ga.pyx":491 * slices = [] * for i in range(dimlen): * slices.append(slice(lo_nd[i]-lo_dst[i],hi_nd[i]-lo_dst[i])) # <<<<<<<<<<<<<< * return array[slices] * return array */ __pyx_t_24 = __pyx_v_i; __pyx_t_25 = -1; if (__pyx_t_24 < 0) { __pyx_t_24 += __pyx_pybuffernd_lo_nd.diminfo[0].shape; if (unlikely(__pyx_t_24 < 0)) __pyx_t_25 = 0; } else if (unlikely(__pyx_t_24 >= __pyx_pybuffernd_lo_nd.diminfo[0].shape)) __pyx_t_25 = 0; if (unlikely(__pyx_t_25 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_25); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_25 = __pyx_v_i; __pyx_t_26 = -1; if (__pyx_t_25 < 0) { __pyx_t_25 += __pyx_pybuffernd_lo_dst.diminfo[0].shape; if (unlikely(__pyx_t_25 < 0)) __pyx_t_26 = 0; } else if (unlikely(__pyx_t_25 >= __pyx_pybuffernd_lo_dst.diminfo[0].shape)) __pyx_t_26 = 0; if (unlikely(__pyx_t_26 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_26); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_2 = __Pyx_PyInt_to_py_npy_int64(((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_lo_nd.diminfo[0].strides)) - (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_lo_dst.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_lo_dst.diminfo[0].strides)))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_26 = __pyx_v_i; __pyx_t_27 = -1; if (__pyx_t_26 < 0) { __pyx_t_26 += __pyx_pybuffernd_hi_nd.diminfo[0].shape; if (unlikely(__pyx_t_26 < 0)) __pyx_t_27 = 0; } else if (unlikely(__pyx_t_26 >= __pyx_pybuffernd_hi_nd.diminfo[0].shape)) __pyx_t_27 = 0; if (unlikely(__pyx_t_27 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_27); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_27 = __pyx_v_i; __pyx_t_28 = -1; if (__pyx_t_27 < 0) { __pyx_t_27 += __pyx_pybuffernd_lo_dst.diminfo[0].shape; if (unlikely(__pyx_t_27 < 0)) __pyx_t_28 = 0; } else if (unlikely(__pyx_t_27 >= __pyx_pybuffernd_lo_dst.diminfo[0].shape)) __pyx_t_28 = 0; if (unlikely(__pyx_t_28 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_28); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_17 = __Pyx_PyInt_to_py_npy_int64(((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_hi_nd.diminfo[0].strides)) - (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_lo_dst.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_lo_dst.diminfo[0].strides)))); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_17); __Pyx_GIVEREF(__pyx_t_17); __pyx_t_2 = 0; __pyx_t_17 = 0; __pyx_t_17 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_29 = __Pyx_PyList_Append(__pyx_v_slices, __pyx_t_17); if (unlikely(__pyx_t_29 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; } /* "ga4py/ga.pyx":492 * for i in range(dimlen): * slices.append(slice(lo_nd[i]-lo_dst[i],hi_nd[i]-lo_dst[i])) * return array[slices] # <<<<<<<<<<<<<< * return array * */ __Pyx_XDECREF(__pyx_r); __pyx_t_17 = PyObject_GetItem(__pyx_v_array, ((PyObject *)__pyx_v_slices)); if (!__pyx_t_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __pyx_r = __pyx_t_17; __pyx_t_17 = 0; goto __pyx_L0; goto __pyx_L12; } __pyx_L12:; /* "ga4py/ga.pyx":493 * slices.append(slice(lo_nd[i]-lo_dst[i],hi_nd[i]-lo_dst[i])) * return array[slices] * return array # <<<<<<<<<<<<<< * * def access_block(int g_a, int idx): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_array); __pyx_r = __pyx_v_array; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_17); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.access", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_lo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_ld_nd); __Pyx_XDECREF((PyObject *)__pyx_v_lo_dst); __Pyx_XDECREF((PyObject *)__pyx_v_hi_dst); __Pyx_XDECREF((PyObject *)__pyx_v_dims_nd); __Pyx_XDECREF((PyObject *)__pyx_v_dtype); __Pyx_XDECREF(__pyx_v_array); __Pyx_XDECREF(__pyx_v_slices); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_13access_block(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_12access_block[] = "access_block(int g_a, int idx)\nReturns local array patch for a block-cyclic distribution.\n \n This routine allows to access directly, in place elements in the local\n section of a global array. It useful for writing new GA operations.\n \n Each call to ga.access_block has to be followed by a call to either\n ga.release_block or ga.release_update_block. You can access in this\n fashion only local data. Since the data is shared with other processes,\n you need to consider issues of mutual exclusion.\n\n This operation is local. \n\n :Parameters:\n g_a : int\n the array handle\n idx : int\n the block index\n\n :returns: ndarray representing local block\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_13access_block = {__Pyx_NAMESTR("access_block"), (PyCFunction)__pyx_pw_5ga4py_2ga_13access_block, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_12access_block)}; static PyObject *__pyx_pw_5ga4py_2ga_13access_block(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_idx; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("access_block (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__idx,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__idx)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("access_block", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "access_block") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_idx = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_idx == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("access_block", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.access_block", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_12access_block(__pyx_self, __pyx_v_g_a, __pyx_v_idx); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":495 * return array * * def access_block(int g_a, int idx): # <<<<<<<<<<<<<< * """Returns local array patch for a block-cyclic distribution. * */ static PyObject *__pyx_pf_5ga4py_2ga_12access_block(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_idx) { PyArrayObject *__pyx_v_ld_nd = 0; PyArrayObject *__pyx_v_lo_dst = 0; PyArrayObject *__pyx_v_hi_dst = 0; PyArrayObject *__pyx_v_dims_nd = 0; int __pyx_v_i; int __pyx_v_gtype; int __pyx_v_dimlen; int __pyx_v_typenum; void *__pyx_v_ptr; npy_intp *__pyx_v_dims; PyObject *__pyx_v_array = NULL; __Pyx_LocalBuf_ND __pyx_pybuffernd_dims_nd; __Pyx_Buffer __pyx_pybuffer_dims_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_dst; __Pyx_Buffer __pyx_pybuffer_hi_dst; __Pyx_LocalBuf_ND __pyx_pybuffernd_ld_nd; __Pyx_Buffer __pyx_pybuffer_ld_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_dst; __Pyx_Buffer __pyx_pybuffer_lo_dst; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; struct __pyx_opt_args_5ga4py_2ga_distribution __pyx_t_4; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *(*__pyx_t_7)(PyObject *); PyArrayObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; long __pyx_t_12; int __pyx_t_13; long __pyx_t_14; int __pyx_t_15; int __pyx_t_16; PyObject *__pyx_t_17 = NULL; int __pyx_t_18; int __pyx_t_19; int __pyx_t_20; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("access_block", 0); __pyx_pybuffer_ld_nd.pybuffer.buf = NULL; __pyx_pybuffer_ld_nd.refcount = 0; __pyx_pybuffernd_ld_nd.data = NULL; __pyx_pybuffernd_ld_nd.rcbuffer = &__pyx_pybuffer_ld_nd; __pyx_pybuffer_lo_dst.pybuffer.buf = NULL; __pyx_pybuffer_lo_dst.refcount = 0; __pyx_pybuffernd_lo_dst.data = NULL; __pyx_pybuffernd_lo_dst.rcbuffer = &__pyx_pybuffer_lo_dst; __pyx_pybuffer_hi_dst.pybuffer.buf = NULL; __pyx_pybuffer_hi_dst.refcount = 0; __pyx_pybuffernd_hi_dst.data = NULL; __pyx_pybuffernd_hi_dst.rcbuffer = &__pyx_pybuffer_hi_dst; __pyx_pybuffer_dims_nd.pybuffer.buf = NULL; __pyx_pybuffer_dims_nd.refcount = 0; __pyx_pybuffernd_dims_nd.data = NULL; __pyx_pybuffernd_dims_nd.rcbuffer = &__pyx_pybuffer_dims_nd; /* "ga4py/ga.pyx":518 * """ * cdef np.ndarray[np.int64_t, ndim=1] ld_nd, lo_dst, hi_dst, dims_nd * cdef int i, gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * cdef int dimlen=GA_Ndim(g_a), typenum=_to_dtype[gtype].num * cdef void *ptr */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":519 * cdef np.ndarray[np.int64_t, ndim=1] ld_nd, lo_dst, hi_dst, dims_nd * cdef int i, gtype=inquire_type(g_a) * cdef int dimlen=GA_Ndim(g_a), typenum=_to_dtype[gtype].num # <<<<<<<<<<<<<< * cdef void *ptr * cdef np.npy_intp *dims = NULL */ __pyx_v_dimlen = GA_Ndim(__pyx_v_g_a); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_gtype, sizeof(int), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__num); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyInt_AsInt(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_typenum = __pyx_t_3; /* "ga4py/ga.pyx":521 * cdef int dimlen=GA_Ndim(g_a), typenum=_to_dtype[gtype].num * cdef void *ptr * cdef np.npy_intp *dims = NULL # <<<<<<<<<<<<<< * # first things first, if no data is owned, return None * lo_dst,hi_dst = distribution(g_a, idx) */ __pyx_v_dims = NULL; /* "ga4py/ga.pyx":523 * cdef np.npy_intp *dims = NULL * # first things first, if no data is owned, return None * lo_dst,hi_dst = distribution(g_a, idx) # <<<<<<<<<<<<<< * if lo_dst[0] < 0 or hi_dst[0] < 0: * return None */ __pyx_t_4.__pyx_n = 1; __pyx_t_4.proc = __pyx_v_idx; __pyx_t_1 = __pyx_f_5ga4py_2ga_distribution(__pyx_v_g_a, 0, &__pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_5 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_5); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L4_unpacking_done; __pyx_L3_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L4_unpacking_done:; } if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_dst, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11); } } __pyx_pybuffernd_lo_dst.diminfo[0].strides = __pyx_pybuffernd_lo_dst.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_dst.diminfo[0].shape = __pyx_pybuffernd_lo_dst.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_8 = 0; __pyx_v_lo_dst = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; __pyx_t_8 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_dst, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_11, __pyx_t_10, __pyx_t_9); } } __pyx_pybuffernd_hi_dst.diminfo[0].strides = __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_dst.diminfo[0].shape = __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_8 = 0; __pyx_v_hi_dst = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/ga.pyx":524 * # first things first, if no data is owned, return None * lo_dst,hi_dst = distribution(g_a, idx) * if lo_dst[0] < 0 or hi_dst[0] < 0: # <<<<<<<<<<<<<< * return None * # put hi_dst back to GA inclusive indexing convention */ __pyx_t_12 = 0; __pyx_t_3 = -1; if (__pyx_t_12 < 0) { __pyx_t_12 += __pyx_pybuffernd_lo_dst.diminfo[0].shape; if (unlikely(__pyx_t_12 < 0)) __pyx_t_3 = 0; } else if (unlikely(__pyx_t_12 >= __pyx_pybuffernd_lo_dst.diminfo[0].shape)) __pyx_t_3 = 0; if (unlikely(__pyx_t_3 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_13 = (((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_lo_dst.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_lo_dst.diminfo[0].strides)) < 0) != 0); if (!__pyx_t_13) { __pyx_t_14 = 0; __pyx_t_3 = -1; if (__pyx_t_14 < 0) { __pyx_t_14 += __pyx_pybuffernd_hi_dst.diminfo[0].shape; if (unlikely(__pyx_t_14 < 0)) __pyx_t_3 = 0; } else if (unlikely(__pyx_t_14 >= __pyx_pybuffernd_hi_dst.diminfo[0].shape)) __pyx_t_3 = 0; if (unlikely(__pyx_t_3 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_15 = (((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_hi_dst.diminfo[0].strides)) < 0) != 0); __pyx_t_16 = __pyx_t_15; } else { __pyx_t_16 = __pyx_t_13; } if (__pyx_t_16) { /* "ga4py/ga.pyx":525 * lo_dst,hi_dst = distribution(g_a, idx) * if lo_dst[0] < 0 or hi_dst[0] < 0: * return None # <<<<<<<<<<<<<< * # put hi_dst back to GA inclusive indexing convention * hi_dst -= 1 */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_None); __pyx_r = Py_None; goto __pyx_L0; goto __pyx_L5; } __pyx_L5:; /* "ga4py/ga.pyx":527 * return None * # put hi_dst back to GA inclusive indexing convention * hi_dst -= 1 # <<<<<<<<<<<<<< * # always access the entire local data * ld_nd = np.zeros(dimlen-1, dtype=np.int64) */ __pyx_t_1 = PyNumber_InPlaceSubtract(((PyObject *)__pyx_v_hi_dst), __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_dst, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11); } } __pyx_pybuffernd_hi_dst.diminfo[0].strides = __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_dst.diminfo[0].shape = __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_8 = 0; __Pyx_DECREF_SET(__pyx_v_hi_dst, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; /* "ga4py/ga.pyx":529 * hi_dst -= 1 * # always access the entire local data * ld_nd = np.zeros(dimlen-1, dtype=np.int64) # <<<<<<<<<<<<<< * NGA_Access_block64(g_a, idx, &ptr, ld_nd.data) * dims_nd = hi_dst-lo_dst+1 */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__zeros); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyInt_FromLong((__pyx_v_dimlen - 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__int64); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_17) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (!(likely(((__pyx_t_17) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_17, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = ((PyArrayObject *)__pyx_t_17); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ld_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_11, __pyx_t_10, __pyx_t_9); } } __pyx_pybuffernd_ld_nd.diminfo[0].strides = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ld_nd.diminfo[0].shape = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_8 = 0; __pyx_v_ld_nd = ((PyArrayObject *)__pyx_t_17); __pyx_t_17 = 0; /* "ga4py/ga.pyx":530 * # always access the entire local data * ld_nd = np.zeros(dimlen-1, dtype=np.int64) * NGA_Access_block64(g_a, idx, &ptr, ld_nd.data) # <<<<<<<<<<<<<< * dims_nd = hi_dst-lo_dst+1 * # must convert int64_t ndarray shape to npy_intp array */ NGA_Access_block64(__pyx_v_g_a, __pyx_v_idx, (&__pyx_v_ptr), ((int64_t *)__pyx_v_ld_nd->data)); /* "ga4py/ga.pyx":531 * ld_nd = np.zeros(dimlen-1, dtype=np.int64) * NGA_Access_block64(g_a, idx, &ptr, ld_nd.data) * dims_nd = hi_dst-lo_dst+1 # <<<<<<<<<<<<<< * # must convert int64_t ndarray shape to npy_intp array * dims = malloc(dimlen*sizeof(np.npy_intp)) */ __pyx_t_17 = PyNumber_Subtract(((PyObject *)__pyx_v_hi_dst), ((PyObject *)__pyx_v_lo_dst)); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __pyx_t_1 = PyNumber_Add(__pyx_t_17, __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_dims_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11); } } __pyx_pybuffernd_dims_nd.diminfo[0].strides = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dims_nd.diminfo[0].shape = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_8 = 0; __pyx_v_dims_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":533 * dims_nd = hi_dst-lo_dst+1 * # must convert int64_t ndarray shape to npy_intp array * dims = malloc(dimlen*sizeof(np.npy_intp)) # <<<<<<<<<<<<<< * for i in range(dimlen): * dims[i] = dims_nd[i] */ __pyx_v_dims = ((npy_intp *)malloc((__pyx_v_dimlen * (sizeof(npy_intp))))); /* "ga4py/ga.pyx":534 * # must convert int64_t ndarray shape to npy_intp array * dims = malloc(dimlen*sizeof(np.npy_intp)) * for i in range(dimlen): # <<<<<<<<<<<<<< * dims[i] = dims_nd[i] * array = np.PyArray_SimpleNewFromData(dimlen, dims, typenum, ptr) */ __pyx_t_3 = __pyx_v_dimlen; for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_3; __pyx_t_18+=1) { __pyx_v_i = __pyx_t_18; /* "ga4py/ga.pyx":535 * dims = malloc(dimlen*sizeof(np.npy_intp)) * for i in range(dimlen): * dims[i] = dims_nd[i] # <<<<<<<<<<<<<< * array = np.PyArray_SimpleNewFromData(dimlen, dims, typenum, ptr) * free(dims) */ __pyx_t_19 = __pyx_v_i; __pyx_t_20 = -1; if (__pyx_t_19 < 0) { __pyx_t_19 += __pyx_pybuffernd_dims_nd.diminfo[0].shape; if (unlikely(__pyx_t_19 < 0)) __pyx_t_20 = 0; } else if (unlikely(__pyx_t_19 >= __pyx_pybuffernd_dims_nd.diminfo[0].shape)) __pyx_t_20 = 0; if (unlikely(__pyx_t_20 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_20); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } (__pyx_v_dims[__pyx_v_i]) = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_dims_nd.diminfo[0].strides)); } /* "ga4py/ga.pyx":536 * for i in range(dimlen): * dims[i] = dims_nd[i] * array = np.PyArray_SimpleNewFromData(dimlen, dims, typenum, ptr) # <<<<<<<<<<<<<< * free(dims) * return array */ __pyx_t_1 = PyArray_SimpleNewFromData(__pyx_v_dimlen, __pyx_v_dims, __pyx_v_typenum, __pyx_v_ptr); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_array = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/ga.pyx":537 * dims[i] = dims_nd[i] * array = np.PyArray_SimpleNewFromData(dimlen, dims, typenum, ptr) * free(dims) # <<<<<<<<<<<<<< * return array * */ free(__pyx_v_dims); /* "ga4py/ga.pyx":538 * array = np.PyArray_SimpleNewFromData(dimlen, dims, typenum, ptr) * free(dims) * return array # <<<<<<<<<<<<<< * * def access_block_grid(int g_a, subscript): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_array); __pyx_r = __pyx_v_array; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_17); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.access_block", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_ld_nd); __Pyx_XDECREF((PyObject *)__pyx_v_lo_dst); __Pyx_XDECREF((PyObject *)__pyx_v_hi_dst); __Pyx_XDECREF((PyObject *)__pyx_v_dims_nd); __Pyx_XDECREF(__pyx_v_array); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_15access_block_grid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_14access_block_grid[] = "access_block_grid(int g_a, subscript)\nReturns local array patch for a SCALAPACK block-cyclic distribution.\n\n The subscript array contains the subscript of the block in the array of\n blocks. This subscript is based on the location of the block in a grid,\n each of whose dimensions is equal to the number of blocks that fit along\n that dimension.\n\n Each call to ga.access_block_grid has to be followed by a call to either\n ga.release_block_grid or ga.release_update_block_grid. You can access in\n this fashion only local data. Since the data is shared with other\n processes, you need to consider issues of mutual exclusion.\n\n This operation is local. \n\n :Parameters:\n g_a : int\n the array handle\n subscript : 1D array-like\n subscript of the block in the array\n\n :returns: ndarray representing local block\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_15access_block_grid = {__Pyx_NAMESTR("access_block_grid"), (PyCFunction)__pyx_pw_5ga4py_2ga_15access_block_grid, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_14access_block_grid)}; static PyObject *__pyx_pw_5ga4py_2ga_15access_block_grid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED int __pyx_v_g_a; CYTHON_UNUSED PyObject *__pyx_v_subscript = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("access_block_grid (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__subscript,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__subscript)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("access_block_grid", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "access_block_grid") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_subscript = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("access_block_grid", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.access_block_grid", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_14access_block_grid(__pyx_self, __pyx_v_g_a, __pyx_v_subscript); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":540 * return array * * def access_block_grid(int g_a, subscript): # <<<<<<<<<<<<<< * """Returns local array patch for a SCALAPACK block-cyclic distribution. * */ static PyObject *__pyx_pf_5ga4py_2ga_14access_block_grid(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED int __pyx_v_g_a, CYTHON_UNUSED PyObject *__pyx_v_subscript) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("access_block_grid", 0); /* "ga4py/ga.pyx":564 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def access_block_segment(int g_a, int proc): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.ga.access_block_grid", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_17access_block_segment(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_16access_block_segment[] = "access_block_segment(int g_a, int proc)\nThis function can be used to gain access to the all the locally held\n data on a particular processor that is associated with a block-cyclic\n distributed array.\n\n The data inside this segment has a lot of additional structure so this\n function is not generally useful to developers. It is primarily used\n inside the GA library to implement other GA routines. Each call to\n ga.access_block_segment should be followed by a call to either\n ga.release_block_segment or ga.release_update_block_segment.\n\n This is a local operation.\n\n :Parameters:\n g_a : int\n the array handle\n proc : int\n processor ID\n\n :returns: ndarray representing local block\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_17access_block_segment = {__Pyx_NAMESTR("access_block_segment"), (PyCFunction)__pyx_pw_5ga4py_2ga_17access_block_segment, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_16access_block_segment)}; static PyObject *__pyx_pw_5ga4py_2ga_17access_block_segment(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_proc; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("access_block_segment (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__proc,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__proc)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("access_block_segment", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "access_block_segment") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_proc = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_proc == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("access_block_segment", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.access_block_segment", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_16access_block_segment(__pyx_self, __pyx_v_g_a, __pyx_v_proc); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":566 * raise NotImplementedError * * def access_block_segment(int g_a, int proc): # <<<<<<<<<<<<<< * """This function can be used to gain access to the all the locally held * data on a particular processor that is associated with a block-cyclic */ static PyObject *__pyx_pf_5ga4py_2ga_16access_block_segment(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_proc) { int64_t __pyx_v_elems; int __pyx_v_gtype; int __pyx_v_typenum; void *__pyx_v_ptr; npy_intp *__pyx_v_dims; PyObject *__pyx_v_array = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("access_block_segment", 0); /* "ga4py/ga.pyx":589 * """ * cdef int64_t elems * cdef int gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * cdef int typenum=_to_dtype[gtype].num * cdef void *ptr */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":590 * cdef int64_t elems * cdef int gtype=inquire_type(g_a) * cdef int typenum=_to_dtype[gtype].num # <<<<<<<<<<<<<< * cdef void *ptr * cdef np.npy_intp *dims = NULL */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_gtype, sizeof(int), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__num); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyInt_AsInt(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_typenum = __pyx_t_3; /* "ga4py/ga.pyx":592 * cdef int typenum=_to_dtype[gtype].num * cdef void *ptr * cdef np.npy_intp *dims = NULL # <<<<<<<<<<<<<< * # always access the entire local data * NGA_Access_block_segment64(g_a, proc, &ptr, &elems) */ __pyx_v_dims = NULL; /* "ga4py/ga.pyx":594 * cdef np.npy_intp *dims = NULL * # always access the entire local data * NGA_Access_block_segment64(g_a, proc, &ptr, &elems) # <<<<<<<<<<<<<< * # must convert int64_t ndarray shape to npy_intp array * dims = malloc(sizeof(np.npy_intp)) */ NGA_Access_block_segment64(__pyx_v_g_a, __pyx_v_proc, (&__pyx_v_ptr), (&__pyx_v_elems)); /* "ga4py/ga.pyx":596 * NGA_Access_block_segment64(g_a, proc, &ptr, &elems) * # must convert int64_t ndarray shape to npy_intp array * dims = malloc(sizeof(np.npy_intp)) # <<<<<<<<<<<<<< * dims[0] = elems * array = np.PyArray_SimpleNewFromData(1, dims, typenum, ptr) */ __pyx_v_dims = ((npy_intp *)malloc((sizeof(npy_intp)))); /* "ga4py/ga.pyx":597 * # must convert int64_t ndarray shape to npy_intp array * dims = malloc(sizeof(np.npy_intp)) * dims[0] = elems # <<<<<<<<<<<<<< * array = np.PyArray_SimpleNewFromData(1, dims, typenum, ptr) * free(dims) */ (__pyx_v_dims[0]) = __pyx_v_elems; /* "ga4py/ga.pyx":598 * dims = malloc(sizeof(np.npy_intp)) * dims[0] = elems * array = np.PyArray_SimpleNewFromData(1, dims, typenum, ptr) # <<<<<<<<<<<<<< * free(dims) * return array */ __pyx_t_1 = PyArray_SimpleNewFromData(1, __pyx_v_dims, __pyx_v_typenum, __pyx_v_ptr); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_array = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/ga.pyx":599 * dims[0] = elems * array = np.PyArray_SimpleNewFromData(1, dims, typenum, ptr) * free(dims) # <<<<<<<<<<<<<< * return array * */ free(__pyx_v_dims); /* "ga4py/ga.pyx":600 * array = np.PyArray_SimpleNewFromData(1, dims, typenum, ptr) * free(dims) * return array # <<<<<<<<<<<<<< * * def access_ghost_element(int g_a, subscript): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_array); __pyx_r = __pyx_v_array; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.ga.access_block_segment", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_array); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_19access_ghost_element(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_18access_ghost_element[] = "access_ghost_element(int g_a, subscript)\nReturns a scalar ndarray representing the requested ghost element.\n\n This function can be used to return a pointer to any data element in the\n locally held portion of the global array and can be used to directly\n access ghost cell data. The array subscript refers to the local index of\n the element relative to the origin of the local patch (which is assumed\n to be indexed by (0,0,...)).\n\n This is a local operation. \n\n :Parameters:\n g_a : int\n the array handle\n subscript : 1D array-like of integers\n index of the desired element\n\n :returns: ndarray scalar representing local block\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_19access_ghost_element = {__Pyx_NAMESTR("access_ghost_element"), (PyCFunction)__pyx_pw_5ga4py_2ga_19access_ghost_element, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_18access_ghost_element)}; static PyObject *__pyx_pw_5ga4py_2ga_19access_ghost_element(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED int __pyx_v_g_a; CYTHON_UNUSED PyObject *__pyx_v_subscript = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("access_ghost_element (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__subscript,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__subscript)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("access_ghost_element", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "access_ghost_element") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_subscript = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("access_ghost_element", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.access_ghost_element", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_18access_ghost_element(__pyx_self, __pyx_v_g_a, __pyx_v_subscript); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":602 * return array * * def access_ghost_element(int g_a, subscript): # <<<<<<<<<<<<<< * """Returns a scalar ndarray representing the requested ghost element. * */ static PyObject *__pyx_pf_5ga4py_2ga_18access_ghost_element(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED int __pyx_v_g_a, CYTHON_UNUSED PyObject *__pyx_v_subscript) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("access_ghost_element", 0); /* "ga4py/ga.pyx":622 * * """ * raise NotImplementedError, "use access_ghosts(g_a) instead" # <<<<<<<<<<<<<< * * def access_ghosts(int g_a): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_kp_s_14), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.ga.access_ghost_element", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_21access_ghosts(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_20access_ghosts[] = "access_ghosts(int g_a)\nReturns ndarray representing local patch with ghost cells.\n\n This routine will provide access to the ghost cell data residing on each\n processor. Calls to NGA_Access_ghosts should normally follow a call to\n NGA_Distribution that returns coordinates of the visible data patch\n associated with a processor. You need to make sure that the coordinates of\n the patch are valid (test values returned from NGA_Distribution).\n\n You can only access local data.\n\n This operation is local.\n\n :Parameters:\n g_a : int\n the array handle\n\n :returns: ndarray scalar representing local block with ghost cells\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_21access_ghosts = {__Pyx_NAMESTR("access_ghosts"), (PyCFunction)__pyx_pw_5ga4py_2ga_21access_ghosts, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_20access_ghosts)}; static PyObject *__pyx_pw_5ga4py_2ga_21access_ghosts(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("access_ghosts (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.access_ghosts", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_20access_ghosts(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":624 * raise NotImplementedError, "use access_ghosts(g_a) instead" * * def access_ghosts(int g_a): # <<<<<<<<<<<<<< * """Returns ndarray representing local patch with ghost cells. * */ static PyObject *__pyx_pf_5ga4py_2ga_20access_ghosts(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyArrayObject *__pyx_v_ld_nd = 0; PyArrayObject *__pyx_v_lo_dst = 0; PyArrayObject *__pyx_v_hi_dst = 0; PyArrayObject *__pyx_v_dims_nd = 0; int __pyx_v_i; int __pyx_v_gtype; int __pyx_v_dimlen; int __pyx_v_typenum; void *__pyx_v_ptr; npy_intp *__pyx_v_dims; PyObject *__pyx_v_array = NULL; __Pyx_LocalBuf_ND __pyx_pybuffernd_dims_nd; __Pyx_Buffer __pyx_pybuffer_dims_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_dst; __Pyx_Buffer __pyx_pybuffer_hi_dst; __Pyx_LocalBuf_ND __pyx_pybuffernd_ld_nd; __Pyx_Buffer __pyx_pybuffer_ld_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_dst; __Pyx_Buffer __pyx_pybuffer_lo_dst; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *(*__pyx_t_6)(PyObject *); PyArrayObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; long __pyx_t_11; int __pyx_t_12; long __pyx_t_13; int __pyx_t_14; int __pyx_t_15; PyObject *__pyx_t_16 = NULL; int __pyx_t_17; int __pyx_t_18; int __pyx_t_19; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("access_ghosts", 0); __pyx_pybuffer_ld_nd.pybuffer.buf = NULL; __pyx_pybuffer_ld_nd.refcount = 0; __pyx_pybuffernd_ld_nd.data = NULL; __pyx_pybuffernd_ld_nd.rcbuffer = &__pyx_pybuffer_ld_nd; __pyx_pybuffer_lo_dst.pybuffer.buf = NULL; __pyx_pybuffer_lo_dst.refcount = 0; __pyx_pybuffernd_lo_dst.data = NULL; __pyx_pybuffernd_lo_dst.rcbuffer = &__pyx_pybuffer_lo_dst; __pyx_pybuffer_hi_dst.pybuffer.buf = NULL; __pyx_pybuffer_hi_dst.refcount = 0; __pyx_pybuffernd_hi_dst.data = NULL; __pyx_pybuffernd_hi_dst.rcbuffer = &__pyx_pybuffer_hi_dst; __pyx_pybuffer_dims_nd.pybuffer.buf = NULL; __pyx_pybuffer_dims_nd.refcount = 0; __pyx_pybuffernd_dims_nd.data = NULL; __pyx_pybuffernd_dims_nd.rcbuffer = &__pyx_pybuffer_dims_nd; /* "ga4py/ga.pyx":645 * """ * cdef np.ndarray[np.int64_t, ndim=1] ld_nd, lo_dst, hi_dst, dims_nd * cdef int i, gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * cdef int dimlen=GA_Ndim(g_a), typenum=_to_dtype[gtype].num * cdef void *ptr */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":646 * cdef np.ndarray[np.int64_t, ndim=1] ld_nd, lo_dst, hi_dst, dims_nd * cdef int i, gtype=inquire_type(g_a) * cdef int dimlen=GA_Ndim(g_a), typenum=_to_dtype[gtype].num # <<<<<<<<<<<<<< * cdef void *ptr * cdef np.npy_intp *dims = NULL */ __pyx_v_dimlen = GA_Ndim(__pyx_v_g_a); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_gtype, sizeof(int), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__num); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyInt_AsInt(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_typenum = __pyx_t_3; /* "ga4py/ga.pyx":648 * cdef int dimlen=GA_Ndim(g_a), typenum=_to_dtype[gtype].num * cdef void *ptr * cdef np.npy_intp *dims = NULL # <<<<<<<<<<<<<< * # first things first, if no data is owned, return None * lo_dst,hi_dst = distribution(g_a) */ __pyx_v_dims = NULL; /* "ga4py/ga.pyx":650 * cdef np.npy_intp *dims = NULL * # first things first, if no data is owned, return None * lo_dst,hi_dst = distribution(g_a) # <<<<<<<<<<<<<< * if lo_dst[0] < 0 or hi_dst[0] < 0: * return None */ __pyx_t_1 = __pyx_f_5ga4py_2ga_distribution(__pyx_v_g_a, 0, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_4 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = NULL; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L4_unpacking_done; __pyx_L3_unpacking_failed:; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L4_unpacking_done:; } if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_dst, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_lo_dst.diminfo[0].strides = __pyx_pybuffernd_lo_dst.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_dst.diminfo[0].shape = __pyx_pybuffernd_lo_dst.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_7 = 0; __pyx_v_lo_dst = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; __pyx_t_7 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_dst, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_hi_dst.diminfo[0].strides = __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_dst.diminfo[0].shape = __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_7 = 0; __pyx_v_hi_dst = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":651 * # first things first, if no data is owned, return None * lo_dst,hi_dst = distribution(g_a) * if lo_dst[0] < 0 or hi_dst[0] < 0: # <<<<<<<<<<<<<< * return None * # always access the entire local data */ __pyx_t_11 = 0; __pyx_t_3 = -1; if (__pyx_t_11 < 0) { __pyx_t_11 += __pyx_pybuffernd_lo_dst.diminfo[0].shape; if (unlikely(__pyx_t_11 < 0)) __pyx_t_3 = 0; } else if (unlikely(__pyx_t_11 >= __pyx_pybuffernd_lo_dst.diminfo[0].shape)) __pyx_t_3 = 0; if (unlikely(__pyx_t_3 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_12 = (((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_lo_dst.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_lo_dst.diminfo[0].strides)) < 0) != 0); if (!__pyx_t_12) { __pyx_t_13 = 0; __pyx_t_3 = -1; if (__pyx_t_13 < 0) { __pyx_t_13 += __pyx_pybuffernd_hi_dst.diminfo[0].shape; if (unlikely(__pyx_t_13 < 0)) __pyx_t_3 = 0; } else if (unlikely(__pyx_t_13 >= __pyx_pybuffernd_hi_dst.diminfo[0].shape)) __pyx_t_3 = 0; if (unlikely(__pyx_t_3 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_14 = (((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_hi_dst.diminfo[0].strides)) < 0) != 0); __pyx_t_15 = __pyx_t_14; } else { __pyx_t_15 = __pyx_t_12; } if (__pyx_t_15) { /* "ga4py/ga.pyx":652 * lo_dst,hi_dst = distribution(g_a) * if lo_dst[0] < 0 or hi_dst[0] < 0: * return None # <<<<<<<<<<<<<< * # always access the entire local data * dims_nd = np.zeros(dimlen, dtype=np.int64) */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_None); __pyx_r = Py_None; goto __pyx_L0; goto __pyx_L5; } __pyx_L5:; /* "ga4py/ga.pyx":654 * return None * # always access the entire local data * dims_nd = np.zeros(dimlen, dtype=np.int64) # <<<<<<<<<<<<<< * ld_nd = np.zeros(dimlen-1, dtype=np.int64) * NGA_Access_ghosts64(g_a, dims_nd.data, &ptr, ld_nd.data) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__zeros); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyInt_FromLong(__pyx_v_dimlen); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__int64); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_16) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (!(likely(((__pyx_t_16) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_16, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = ((PyArrayObject *)__pyx_t_16); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_dims_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_dims_nd.diminfo[0].strides = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dims_nd.diminfo[0].shape = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_7 = 0; __pyx_v_dims_nd = ((PyArrayObject *)__pyx_t_16); __pyx_t_16 = 0; /* "ga4py/ga.pyx":655 * # always access the entire local data * dims_nd = np.zeros(dimlen, dtype=np.int64) * ld_nd = np.zeros(dimlen-1, dtype=np.int64) # <<<<<<<<<<<<<< * NGA_Access_ghosts64(g_a, dims_nd.data, &ptr, ld_nd.data) * # must convert int64_t ndarray shape to npy_intp array */ __pyx_t_16 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s__zeros); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyInt_FromLong((__pyx_v_dimlen - 1)); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_16); __Pyx_GIVEREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyDict_New(); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_16)); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__int64); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_t_16, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_16)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ld_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_ld_nd.diminfo[0].strides = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ld_nd.diminfo[0].shape = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_7 = 0; __pyx_v_ld_nd = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/ga.pyx":656 * dims_nd = np.zeros(dimlen, dtype=np.int64) * ld_nd = np.zeros(dimlen-1, dtype=np.int64) * NGA_Access_ghosts64(g_a, dims_nd.data, &ptr, ld_nd.data) # <<<<<<<<<<<<<< * # must convert int64_t ndarray shape to npy_intp array * dims = malloc(dimlen*sizeof(np.npy_intp)) */ NGA_Access_ghosts64(__pyx_v_g_a, ((int64_t *)__pyx_v_dims_nd->data), (&__pyx_v_ptr), ((int64_t *)__pyx_v_ld_nd->data)); /* "ga4py/ga.pyx":658 * NGA_Access_ghosts64(g_a, dims_nd.data, &ptr, ld_nd.data) * # must convert int64_t ndarray shape to npy_intp array * dims = malloc(dimlen*sizeof(np.npy_intp)) # <<<<<<<<<<<<<< * for i in range(dimlen): * dims[i] = dims_nd[i] */ __pyx_v_dims = ((npy_intp *)malloc((__pyx_v_dimlen * (sizeof(npy_intp))))); /* "ga4py/ga.pyx":659 * # must convert int64_t ndarray shape to npy_intp array * dims = malloc(dimlen*sizeof(np.npy_intp)) * for i in range(dimlen): # <<<<<<<<<<<<<< * dims[i] = dims_nd[i] * array = np.PyArray_SimpleNewFromData(dimlen, dims, typenum, ptr) */ __pyx_t_3 = __pyx_v_dimlen; for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_3; __pyx_t_17+=1) { __pyx_v_i = __pyx_t_17; /* "ga4py/ga.pyx":660 * dims = malloc(dimlen*sizeof(np.npy_intp)) * for i in range(dimlen): * dims[i] = dims_nd[i] # <<<<<<<<<<<<<< * array = np.PyArray_SimpleNewFromData(dimlen, dims, typenum, ptr) * free(dims) */ __pyx_t_18 = __pyx_v_i; __pyx_t_19 = -1; if (__pyx_t_18 < 0) { __pyx_t_18 += __pyx_pybuffernd_dims_nd.diminfo[0].shape; if (unlikely(__pyx_t_18 < 0)) __pyx_t_19 = 0; } else if (unlikely(__pyx_t_18 >= __pyx_pybuffernd_dims_nd.diminfo[0].shape)) __pyx_t_19 = 0; if (unlikely(__pyx_t_19 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_19); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } (__pyx_v_dims[__pyx_v_i]) = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_dims_nd.diminfo[0].strides)); } /* "ga4py/ga.pyx":661 * for i in range(dimlen): * dims[i] = dims_nd[i] * array = np.PyArray_SimpleNewFromData(dimlen, dims, typenum, ptr) # <<<<<<<<<<<<<< * free(dims) * return array */ __pyx_t_5 = PyArray_SimpleNewFromData(__pyx_v_dimlen, __pyx_v_dims, __pyx_v_typenum, __pyx_v_ptr); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_v_array = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/ga.pyx":662 * dims[i] = dims_nd[i] * array = np.PyArray_SimpleNewFromData(dimlen, dims, typenum, ptr) * free(dims) # <<<<<<<<<<<<<< * return array * */ free(__pyx_v_dims); /* "ga4py/ga.pyx":663 * array = np.PyArray_SimpleNewFromData(dimlen, dims, typenum, ptr) * free(dims) * return array # <<<<<<<<<<<<<< * * def add(int g_a, int g_b, int g_c, alpha=None, beta=None, alo=None, ahi=None, */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_array); __pyx_r = __pyx_v_array; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_16); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.access_ghosts", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_ld_nd); __Pyx_XDECREF((PyObject *)__pyx_v_lo_dst); __Pyx_XDECREF((PyObject *)__pyx_v_hi_dst); __Pyx_XDECREF((PyObject *)__pyx_v_dims_nd); __Pyx_XDECREF(__pyx_v_array); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_23add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_22add[] = "add(int g_a, int g_b, int g_c, alpha=None, beta=None, alo=None, ahi=None, blo=None, bhi=None, clo=None, chi=None)\nElement-wise addition of two arrays.\n\n The arrays must be the same shape and identically aligned.\n The result (c) may replace one of the input arrays (a/b).\n Patches of arrays (which must have the same number of elements) may also\n be added together elementw=-wise, if patch coordinates are specified.\n c = alpha*a + beta*b\n\n This is a collective operation. \n\n :Parameters:\n g_a : int\n the array handle\n g_b : int\n the array handle\n g_c : int\n the array handle\n alpha : object\n multiplier (converted to appropriate type)\n beta : object\n multiplier (converted to appropriate type)\n alo : 1D array-like of integers\n lower bound patch coordinates of g_a, inclusive\n ahi : 1D array-like of integers\n higher bound patch coordinates of g_a, exclusive\n blo : 1D array-like of integers\n lower bound patch coordinates of g_b, inclusive\n bhi : 1D array-like of integers\n higher bound patch coordinates of g_b, exclusive\n clo : 1D array-like of integers\n lower bound patch coordinates of g_c, inclusive\n chi : 1D array-like of integers\n higher bound patch coordinates of g_c, exclusive\n\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_23add = {__Pyx_NAMESTR("add"), (PyCFunction)__pyx_pw_5ga4py_2ga_23add, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_22add)}; static PyObject *__pyx_pw_5ga4py_2ga_23add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_b; int __pyx_v_g_c; PyObject *__pyx_v_alpha = 0; PyObject *__pyx_v_beta = 0; PyObject *__pyx_v_alo = 0; PyObject *__pyx_v_ahi = 0; PyObject *__pyx_v_blo = 0; PyObject *__pyx_v_bhi = 0; PyObject *__pyx_v_clo = 0; PyObject *__pyx_v_chi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("add (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_b,&__pyx_n_s__g_c,&__pyx_n_s__alpha,&__pyx_n_s__beta,&__pyx_n_s__alo,&__pyx_n_s__ahi,&__pyx_n_s__blo,&__pyx_n_s__bhi,&__pyx_n_s__clo,&__pyx_n_s__chi,0}; PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0}; /* "ga4py/ga.pyx":665 * return array * * def add(int g_a, int g_b, int g_c, alpha=None, beta=None, alo=None, ahi=None, # <<<<<<<<<<<<<< * blo=None, bhi=None, clo=None, chi=None): * """Element-wise addition of two arrays. */ values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); values[5] = ((PyObject *)Py_None); values[6] = ((PyObject *)Py_None); /* "ga4py/ga.pyx":666 * * def add(int g_a, int g_b, int g_c, alpha=None, beta=None, alo=None, ahi=None, * blo=None, bhi=None, clo=None, chi=None): # <<<<<<<<<<<<<< * """Element-wise addition of two arrays. * */ values[7] = ((PyObject *)Py_None); values[8] = ((PyObject *)Py_None); values[9] = ((PyObject *)Py_None); values[10] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("add", 0, 3, 11, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_c)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("add", 0, 3, 11, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alpha); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__beta); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alo); if (value) { values[5] = value; kw_args--; } } case 6: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ahi); if (value) { values[6] = value; kw_args--; } } case 7: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__blo); if (value) { values[7] = value; kw_args--; } } case 8: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bhi); if (value) { values[8] = value; kw_args--; } } case 9: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__clo); if (value) { values[9] = value; kw_args--; } } case 10: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__chi); if (value) { values[10] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "add") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_b = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_c = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_g_c == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_alpha = values[3]; __pyx_v_beta = values[4]; __pyx_v_alo = values[5]; __pyx_v_ahi = values[6]; __pyx_v_blo = values[7]; __pyx_v_bhi = values[8]; __pyx_v_clo = values[9]; __pyx_v_chi = values[10]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("add", 0, 3, 11, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.add", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_22add(__pyx_self, __pyx_v_g_a, __pyx_v_g_b, __pyx_v_g_c, __pyx_v_alpha, __pyx_v_beta, __pyx_v_alo, __pyx_v_ahi, __pyx_v_blo, __pyx_v_bhi, __pyx_v_clo, __pyx_v_chi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":665 * return array * * def add(int g_a, int g_b, int g_c, alpha=None, beta=None, alo=None, ahi=None, # <<<<<<<<<<<<<< * blo=None, bhi=None, clo=None, chi=None): * """Element-wise addition of two arrays. */ static PyObject *__pyx_pf_5ga4py_2ga_22add(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, int __pyx_v_g_c, PyObject *__pyx_v_alpha, PyObject *__pyx_v_beta, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, PyObject *__pyx_v_clo, PyObject *__pyx_v_chi) { PyArrayObject *__pyx_v_alo_nd = 0; PyArrayObject *__pyx_v_ahi_nd = 0; PyArrayObject *__pyx_v_blo_nd = 0; PyArrayObject *__pyx_v_bhi_nd = 0; PyArrayObject *__pyx_v_clo_nd = 0; PyArrayObject *__pyx_v_chi_nd = 0; int __pyx_v_gtype; int __pyx_v_ialpha; int __pyx_v_ibeta; long __pyx_v_lalpha; long __pyx_v_lbeta; PY_LONG_LONG __pyx_v_llalpha; PY_LONG_LONG __pyx_v_llbeta; float __pyx_v_falpha; float __pyx_v_fbeta; double __pyx_v_dalpha; double __pyx_v_dbeta; long double __pyx_v_ldalpha; long double __pyx_v_ldbeta; SingleComplex __pyx_v_fcalpha; SingleComplex __pyx_v_fcbeta; DoubleComplex __pyx_v_dcalpha; DoubleComplex __pyx_v_dcbeta; void *__pyx_v_valpha; void *__pyx_v_vbeta; __Pyx_LocalBuf_ND __pyx_pybuffernd_ahi_nd; __Pyx_Buffer __pyx_pybuffer_ahi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_alo_nd; __Pyx_Buffer __pyx_pybuffer_alo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_bhi_nd; __Pyx_Buffer __pyx_pybuffer_bhi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_blo_nd; __Pyx_Buffer __pyx_pybuffer_blo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_chi_nd; __Pyx_Buffer __pyx_pybuffer_chi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_clo_nd; __Pyx_Buffer __pyx_pybuffer_clo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; PyObject *(*__pyx_t_12)(PyObject *); PyArrayObject *__pyx_t_13 = NULL; int __pyx_t_14; PyObject *__pyx_t_15 = NULL; PyObject *__pyx_t_16 = NULL; PyObject *__pyx_t_17 = NULL; PyArrayObject *__pyx_t_18 = NULL; PyArrayObject *__pyx_t_19 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("add", 0); __Pyx_INCREF(__pyx_v_alpha); __Pyx_INCREF(__pyx_v_beta); __pyx_pybuffer_alo_nd.pybuffer.buf = NULL; __pyx_pybuffer_alo_nd.refcount = 0; __pyx_pybuffernd_alo_nd.data = NULL; __pyx_pybuffernd_alo_nd.rcbuffer = &__pyx_pybuffer_alo_nd; __pyx_pybuffer_ahi_nd.pybuffer.buf = NULL; __pyx_pybuffer_ahi_nd.refcount = 0; __pyx_pybuffernd_ahi_nd.data = NULL; __pyx_pybuffernd_ahi_nd.rcbuffer = &__pyx_pybuffer_ahi_nd; __pyx_pybuffer_blo_nd.pybuffer.buf = NULL; __pyx_pybuffer_blo_nd.refcount = 0; __pyx_pybuffernd_blo_nd.data = NULL; __pyx_pybuffernd_blo_nd.rcbuffer = &__pyx_pybuffer_blo_nd; __pyx_pybuffer_bhi_nd.pybuffer.buf = NULL; __pyx_pybuffer_bhi_nd.refcount = 0; __pyx_pybuffernd_bhi_nd.data = NULL; __pyx_pybuffernd_bhi_nd.rcbuffer = &__pyx_pybuffer_bhi_nd; __pyx_pybuffer_clo_nd.pybuffer.buf = NULL; __pyx_pybuffer_clo_nd.refcount = 0; __pyx_pybuffernd_clo_nd.data = NULL; __pyx_pybuffernd_clo_nd.rcbuffer = &__pyx_pybuffer_clo_nd; __pyx_pybuffer_chi_nd.pybuffer.buf = NULL; __pyx_pybuffer_chi_nd.refcount = 0; __pyx_pybuffernd_chi_nd.data = NULL; __pyx_pybuffernd_chi_nd.rcbuffer = &__pyx_pybuffer_chi_nd; /* "ga4py/ga.pyx":706 * cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd * cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd * cdef int gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * cdef int ialpha, ibeta * cdef long lalpha, lbeta */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":716 * cdef DoubleComplex dcalpha, dcbeta * cdef void *valpha, *vbeta * if alpha is None: # <<<<<<<<<<<<<< * alpha = 1 * valpha = _convert_multiplier(gtype, alpha, */ __pyx_t_1 = (__pyx_v_alpha == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/ga.pyx":717 * cdef void *valpha, *vbeta * if alpha is None: * alpha = 1 # <<<<<<<<<<<<<< * valpha = _convert_multiplier(gtype, alpha, * &ialpha, &lalpha, &llalpha, */ __Pyx_INCREF(__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_alpha, __pyx_int_1); goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":721 * &ialpha, &lalpha, &llalpha, * &falpha, &dalpha, &ldalpha, * &fcalpha, &dcalpha) # <<<<<<<<<<<<<< * if beta is None: * beta = 1 */ __pyx_v_valpha = __pyx_f_5ga4py_2ga__convert_multiplier(__pyx_v_gtype, __pyx_v_alpha, (&__pyx_v_ialpha), (&__pyx_v_lalpha), (&__pyx_v_llalpha), (&__pyx_v_falpha), (&__pyx_v_dalpha), (&__pyx_v_ldalpha), (&__pyx_v_fcalpha), (&__pyx_v_dcalpha)); /* "ga4py/ga.pyx":722 * &falpha, &dalpha, &ldalpha, * &fcalpha, &dcalpha) * if beta is None: # <<<<<<<<<<<<<< * beta = 1 * vbeta = _convert_multiplier(gtype, beta, */ __pyx_t_2 = (__pyx_v_beta == Py_None); __pyx_t_1 = (__pyx_t_2 != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":723 * &fcalpha, &dcalpha) * if beta is None: * beta = 1 # <<<<<<<<<<<<<< * vbeta = _convert_multiplier(gtype, beta, * &ibeta, &lbeta, &llbeta, */ __Pyx_INCREF(__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_beta, __pyx_int_1); goto __pyx_L4; } __pyx_L4:; /* "ga4py/ga.pyx":727 * &ibeta, &lbeta, &llbeta, * &fbeta, &dbeta, &ldbeta, * &fcbeta, &dcbeta) # <<<<<<<<<<<<<< * if (alo is None and ahi is None * and blo is None and bhi is None */ __pyx_v_vbeta = __pyx_f_5ga4py_2ga__convert_multiplier(__pyx_v_gtype, __pyx_v_beta, (&__pyx_v_ibeta), (&__pyx_v_lbeta), (&__pyx_v_llbeta), (&__pyx_v_fbeta), (&__pyx_v_dbeta), (&__pyx_v_ldbeta), (&__pyx_v_fcbeta), (&__pyx_v_dcbeta)); /* "ga4py/ga.pyx":728 * &fbeta, &dbeta, &ldbeta, * &fcbeta, &dcbeta) * if (alo is None and ahi is None # <<<<<<<<<<<<<< * and blo is None and bhi is None * and clo is None and chi is None): */ __pyx_t_1 = (__pyx_v_alo == Py_None); if ((__pyx_t_1 != 0)) { /* "ga4py/ga.pyx":729 * &fcbeta, &dcbeta) * if (alo is None and ahi is None * and blo is None and bhi is None # <<<<<<<<<<<<<< * and clo is None and chi is None): * GA_Add(valpha, g_a, vbeta, g_b, g_c) */ __pyx_t_2 = (__pyx_v_ahi == Py_None); if ((__pyx_t_2 != 0)) { __pyx_t_3 = (__pyx_v_blo == Py_None); if ((__pyx_t_3 != 0)) { /* "ga4py/ga.pyx":730 * if (alo is None and ahi is None * and blo is None and bhi is None * and clo is None and chi is None): # <<<<<<<<<<<<<< * GA_Add(valpha, g_a, vbeta, g_b, g_c) * else: */ __pyx_t_4 = (__pyx_v_bhi == Py_None); if ((__pyx_t_4 != 0)) { __pyx_t_5 = (__pyx_v_clo == Py_None); if ((__pyx_t_5 != 0)) { __pyx_t_6 = (__pyx_v_chi == Py_None); __pyx_t_7 = (__pyx_t_6 != 0); } else { __pyx_t_7 = (__pyx_t_5 != 0); } __pyx_t_5 = __pyx_t_7; } else { __pyx_t_5 = (__pyx_t_4 != 0); } __pyx_t_4 = __pyx_t_5; } else { __pyx_t_4 = (__pyx_t_3 != 0); } __pyx_t_3 = __pyx_t_4; } else { __pyx_t_3 = (__pyx_t_2 != 0); } __pyx_t_2 = __pyx_t_3; } else { __pyx_t_2 = (__pyx_t_1 != 0); } if (__pyx_t_2) { /* "ga4py/ga.pyx":731 * and blo is None and bhi is None * and clo is None and chi is None): * GA_Add(valpha, g_a, vbeta, g_b, g_c) # <<<<<<<<<<<<<< * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) */ GA_Add(__pyx_v_valpha, __pyx_v_g_a, __pyx_v_vbeta, __pyx_v_g_b, __pyx_v_g_c); goto __pyx_L5; } /*else*/ { /* "ga4py/ga.pyx":733 * GA_Add(valpha, g_a, vbeta, g_b, g_c) * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) # <<<<<<<<<<<<<< * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * clo_nd,chi_nd = _lohi(g_c,clo,chi) */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_alo, __pyx_v_ahi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_9 = PyList_GET_ITEM(sequence, 0); __pyx_t_10 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_10); #else __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L7_unpacking_done:; } if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_13 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_alo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17); } } __pyx_pybuffernd_alo_nd.diminfo[0].strides = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_alo_nd.diminfo[0].shape = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_13 = 0; __pyx_v_alo_nd = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0; __pyx_t_13 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ahi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15); } } __pyx_pybuffernd_ahi_nd.diminfo[0].strides = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ahi_nd.diminfo[0].shape = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_13 = 0; __pyx_v_ahi_nd = ((PyArrayObject *)__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/ga.pyx":734 * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) # <<<<<<<<<<<<<< * clo_nd,chi_nd = _lohi(g_c,clo,chi) * NGA_Add_patch64( */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_b, __pyx_v_blo, __pyx_v_bhi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_10 = PyList_GET_ITEM(sequence, 0); __pyx_t_9 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx_t_9); #else __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); index = 1; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L9_unpacking_done; __pyx_L8_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L9_unpacking_done:; } if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_18 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_blo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17); } } __pyx_pybuffernd_blo_nd.diminfo[0].strides = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_blo_nd.diminfo[0].shape = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_18 = 0; __pyx_v_blo_nd = ((PyArrayObject *)__pyx_t_10); __pyx_t_10 = 0; __pyx_t_18 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_bhi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15); } } __pyx_pybuffernd_bhi_nd.diminfo[0].strides = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_bhi_nd.diminfo[0].shape = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_18 = 0; __pyx_v_bhi_nd = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0; /* "ga4py/ga.pyx":735 * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * clo_nd,chi_nd = _lohi(g_c,clo,chi) # <<<<<<<<<<<<<< * NGA_Add_patch64( * valpha, g_a, alo_nd.data, ahi_nd.data, */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_c, __pyx_v_clo, __pyx_v_chi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_9 = PyList_GET_ITEM(sequence, 0); __pyx_t_10 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_10); #else __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L10_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L10_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L11_unpacking_done; __pyx_L10_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L11_unpacking_done:; } if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_19 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_clo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17); } } __pyx_pybuffernd_clo_nd.diminfo[0].strides = __pyx_pybuffernd_clo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_clo_nd.diminfo[0].shape = __pyx_pybuffernd_clo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_19 = 0; __pyx_v_clo_nd = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0; __pyx_t_19 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_chi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15); } } __pyx_pybuffernd_chi_nd.diminfo[0].strides = __pyx_pybuffernd_chi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_chi_nd.diminfo[0].shape = __pyx_pybuffernd_chi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_19 = 0; __pyx_v_chi_nd = ((PyArrayObject *)__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/ga.pyx":739 * valpha, g_a, alo_nd.data, ahi_nd.data, * vbeta, g_b, blo_nd.data, bhi_nd.data, * g_c, clo_nd.data, chi_nd.data) # <<<<<<<<<<<<<< * * def add_constant(int g_a, alpha, lo=None, hi=None): */ NGA_Add_patch64(__pyx_v_valpha, __pyx_v_g_a, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_vbeta, __pyx_v_g_b, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data), __pyx_v_g_c, ((int64_t *)__pyx_v_clo_nd->data), ((int64_t *)__pyx_v_chi_nd->data)); } __pyx_L5:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_11); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.add", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_alo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_ahi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_blo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_bhi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_clo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_chi_nd); __Pyx_XDECREF(__pyx_v_alpha); __Pyx_XDECREF(__pyx_v_beta); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_25add_constant(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_24add_constant[] = "add_constant(int g_a, alpha, lo=None, hi=None)\nAdds the constant alpha to each element of the array. \n\n This operation is collective.\n\n :Parameters:\n g_a : int\n the array handle\n alpha : object\n the constant to add (converted to appropriate type)\n lo : 1D array-like of integers\n lower bound patch coordinates, inclusive\n hi : 1D array-like of integers\n higher bound patch coordinates, exclusive\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_25add_constant = {__Pyx_NAMESTR("add_constant"), (PyCFunction)__pyx_pw_5ga4py_2ga_25add_constant, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_24add_constant)}; static PyObject *__pyx_pw_5ga4py_2ga_25add_constant(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_alpha = 0; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("add_constant (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__alpha,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/ga.pyx":741 * g_c, clo_nd.data, chi_nd.data) * * def add_constant(int g_a, alpha, lo=None, hi=None): # <<<<<<<<<<<<<< * """Adds the constant alpha to each element of the array. * */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alpha)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("add_constant", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "add_constant") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_alpha = values[1]; __pyx_v_lo = values[2]; __pyx_v_hi = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("add_constant", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.add_constant", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_24add_constant(__pyx_self, __pyx_v_g_a, __pyx_v_alpha, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_24add_constant(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_alpha, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyArrayObject *__pyx_v_lo_nd = 0; PyArrayObject *__pyx_v_hi_nd = 0; int __pyx_v_gtype; int __pyx_v_ialpha; long __pyx_v_lalpha; PY_LONG_LONG __pyx_v_llalpha; float __pyx_v_falpha; double __pyx_v_dalpha; long double __pyx_v_ldalpha; SingleComplex __pyx_v_fcalpha; DoubleComplex __pyx_v_dcalpha; void *__pyx_v_valpha; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_nd; __Pyx_Buffer __pyx_pybuffer_lo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *(*__pyx_t_8)(PyObject *); PyArrayObject *__pyx_t_9 = NULL; int __pyx_t_10; PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("add_constant", 0); __pyx_pybuffer_lo_nd.pybuffer.buf = NULL; __pyx_pybuffer_lo_nd.refcount = 0; __pyx_pybuffernd_lo_nd.data = NULL; __pyx_pybuffernd_lo_nd.rcbuffer = &__pyx_pybuffer_lo_nd; __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; /* "ga4py/ga.pyx":758 * """ * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd * cdef int gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * cdef int ialpha * cdef long lalpha */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":771 * &ialpha, &lalpha, &llalpha, * &falpha, &dalpha, &ldalpha, * &fcalpha, &dcalpha) # <<<<<<<<<<<<<< * if lo is None and hi is None: * GA_Add_constant(g_a, valpha) */ __pyx_v_valpha = __pyx_f_5ga4py_2ga__convert_multiplier(__pyx_v_gtype, __pyx_v_alpha, (&__pyx_v_ialpha), (&__pyx_v_lalpha), (&__pyx_v_llalpha), (&__pyx_v_falpha), (&__pyx_v_dalpha), (&__pyx_v_ldalpha), (&__pyx_v_fcalpha), (&__pyx_v_dcalpha)); /* "ga4py/ga.pyx":772 * &falpha, &dalpha, &ldalpha, * &fcalpha, &dcalpha) * if lo is None and hi is None: # <<<<<<<<<<<<<< * GA_Add_constant(g_a, valpha) * else: */ __pyx_t_1 = (__pyx_v_lo == Py_None); if ((__pyx_t_1 != 0)) { __pyx_t_2 = (__pyx_v_hi == Py_None); __pyx_t_3 = (__pyx_t_2 != 0); } else { __pyx_t_3 = (__pyx_t_1 != 0); } if (__pyx_t_3) { /* "ga4py/ga.pyx":773 * &fcalpha, &dcalpha) * if lo is None and hi is None: * GA_Add_constant(g_a, valpha) # <<<<<<<<<<<<<< * else: * lo_nd,hi_nd = _lohi(g_a,lo,hi) */ GA_Add_constant(__pyx_v_g_a, __pyx_v_valpha); goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":775 * GA_Add_constant(g_a, valpha) * else: * lo_nd,hi_nd = _lohi(g_a,lo,hi) # <<<<<<<<<<<<<< * GA_Add_constant_patch64( * g_a, lo_nd.data, hi_nd.data, valpha) */ __pyx_t_4 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) { PyObject* sequence = __pyx_t_4; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_5 = PyList_GET_ITEM(sequence, 0); __pyx_t_6 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); #endif __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_9 = 0; __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = ((PyArrayObject *)__pyx_t_6); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_13, __pyx_t_12, __pyx_t_11); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_9 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/ga.pyx":777 * lo_nd,hi_nd = _lohi(g_a,lo,hi) * GA_Add_constant_patch64( * g_a, lo_nd.data, hi_nd.data, valpha) # <<<<<<<<<<<<<< * * def add_diagonal(int g_a, int g_v): */ GA_Add_constant_patch64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), __pyx_v_valpha); } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.add_constant", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_lo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_27add_diagonal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_26add_diagonal[] = "add_diagonal(int g_a, int g_v)\nAdds the elements of the vector g_v to the diagonal of matrix g_a.\n\n This operation is collective.\n\n :Parameters:\n g_a : int\n the array handle\n g_v : int\n the vector handle\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_27add_diagonal = {__Pyx_NAMESTR("add_diagonal"), (PyCFunction)__pyx_pw_5ga4py_2ga_27add_diagonal, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_26add_diagonal)}; static PyObject *__pyx_pw_5ga4py_2ga_27add_diagonal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_v; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("add_diagonal (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_v,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_v)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("add_diagonal", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "add_diagonal") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_v = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_v == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("add_diagonal", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.add_diagonal", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_26add_diagonal(__pyx_self, __pyx_v_g_a, __pyx_v_g_v); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":779 * g_a, lo_nd.data, hi_nd.data, valpha) * * def add_diagonal(int g_a, int g_v): # <<<<<<<<<<<<<< * """Adds the elements of the vector g_v to the diagonal of matrix g_a. * */ static PyObject *__pyx_pf_5ga4py_2ga_26add_diagonal(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_v) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("add_diagonal", 0); /* "ga4py/ga.pyx":791 * * """ * GA_Add_diagonal(g_a, g_v) # <<<<<<<<<<<<<< * * def allocate(int g_a): */ GA_Add_diagonal(__pyx_v_g_a, __pyx_v_g_v); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_29allocate(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_28allocate[] = "allocate(int g_a)\nAllocates memory for the handle obtained using ga.create_handle.\n\n At a minimum, the ga.set_data function must be called before the memory is\n allocated. Other ga.set_xxx functions can also be called before invoking\n this function.\n\n This is a collective operation. \n\n :Parameters:\n g_a : int\n the array handle\n\n :returns: True if allocation of g_a was successful.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_29allocate = {__Pyx_NAMESTR("allocate"), (PyCFunction)__pyx_pw_5ga4py_2ga_29allocate, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_28allocate)}; static PyObject *__pyx_pw_5ga4py_2ga_29allocate(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("allocate (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.allocate", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_28allocate(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":793 * GA_Add_diagonal(g_a, g_v) * * def allocate(int g_a): # <<<<<<<<<<<<<< * """Allocates memory for the handle obtained using ga.create_handle. * */ static PyObject *__pyx_pf_5ga4py_2ga_28allocate(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("allocate", 0); /* "ga4py/ga.pyx":809 * * """ * if GA_Allocate(g_a) == 1: # <<<<<<<<<<<<<< * return True * return False */ __pyx_t_1 = ((GA_Allocate(__pyx_v_g_a) == 1) != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":810 * """ * if GA_Allocate(g_a) == 1: * return True # <<<<<<<<<<<<<< * return False * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 810; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":811 * if GA_Allocate(g_a) == 1: * return True * return False # <<<<<<<<<<<<<< * * def brdcst(buffer, int root=0): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 811; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.ga.allocate", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_31brdcst(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_30brdcst[] = "brdcst(buffer, int root=0)\nBroadcast from process root to all other processes.\n\n If the buffer is not contiguous, an error is raised. This operation is\n provided only for convenience purposes: it is available regardless of the\n message-passing library that GA is running with.\n\n This is a collective operation. \n\n :Parameters:\n buffer : 1D array-like of objects\n the ndarray message (converted to the appropriate type)\n root : int\n the process which is sending\n\n :returns: The buffer in case a temporary was passed in.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_31brdcst = {__Pyx_NAMESTR("brdcst"), (PyCFunction)__pyx_pw_5ga4py_2ga_31brdcst, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_30brdcst)}; static PyObject *__pyx_pw_5ga4py_2ga_31brdcst(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_buffer = 0; int __pyx_v_root; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("brdcst (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__buffer,&__pyx_n_s__root,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__root); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "brdcst") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_buffer = values[0]; if (values[1]) { __pyx_v_root = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_root = ((int)0); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("brdcst", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.brdcst", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_30brdcst(__pyx_self, __pyx_v_buffer, __pyx_v_root); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":813 * return False * * def brdcst(buffer, int root=0): # <<<<<<<<<<<<<< * """Broadcast from process root to all other processes. * */ static PyObject *__pyx_pf_5ga4py_2ga_30brdcst(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buffer, int __pyx_v_root) { PyArrayObject *__pyx_v_buffer_nd = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("brdcst", 0); /* "ga4py/ga.pyx":832 * """ * cdef np.ndarray buffer_nd * buffer_nd = np.asarray(buffer) # <<<<<<<<<<<<<< * if not buffer_nd.flags['C_CONTIGUOUS']: * raise ValueError, "the buffer must be contiguous" */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__asarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_buffer); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_buffer); __Pyx_GIVEREF(__pyx_v_buffer); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_buffer_nd = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":833 * cdef np.ndarray buffer_nd * buffer_nd = np.asarray(buffer) * if not buffer_nd.flags['C_CONTIGUOUS']: # <<<<<<<<<<<<<< * raise ValueError, "the buffer must be contiguous" * #if buffer_nd.ndim != 1: */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer_nd), __pyx_n_s__flags); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyObject_GetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__C_CONTIGUOUS)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = ((!__pyx_t_4) != 0); if (__pyx_t_5) { /* "ga4py/ga.pyx":834 * buffer_nd = np.asarray(buffer) * if not buffer_nd.flags['C_CONTIGUOUS']: * raise ValueError, "the buffer must be contiguous" # <<<<<<<<<<<<<< * #if buffer_nd.ndim != 1: * # raise ValueError, "the buffer must be one-dimensional" */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_15), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":837 * #if buffer_nd.ndim != 1: * # raise ValueError, "the buffer must be one-dimensional" * GA_Brdcst(buffer_nd.data, buffer_nd.size*buffer_nd.itemsize, root) # <<<<<<<<<<<<<< * return buffer_nd * */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer_nd), __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer_nd), __pyx_n_s__itemsize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; GA_Brdcst(__pyx_v_buffer_nd->data, __pyx_t_6, __pyx_v_root); /* "ga4py/ga.pyx":838 * # raise ValueError, "the buffer must be one-dimensional" * GA_Brdcst(buffer_nd.data, buffer_nd.size*buffer_nd.itemsize, root) * return buffer_nd # <<<<<<<<<<<<<< * * def check_handle(int g_a, char *message): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_buffer_nd)); __pyx_r = ((PyObject *)__pyx_v_buffer_nd); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.brdcst", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_buffer_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_33check_handle(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_32check_handle[] = "check_handle(int g_a, char *message)\nChecks that the array handle g_a is valid.\n \n If not, calls ga.error withe the provided string.\n\n This operation is local.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_33check_handle = {__Pyx_NAMESTR("check_handle"), (PyCFunction)__pyx_pw_5ga4py_2ga_33check_handle, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_32check_handle)}; static PyObject *__pyx_pw_5ga4py_2ga_33check_handle(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; char *__pyx_v_message; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("check_handle (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__message,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__message)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("check_handle", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "check_handle") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_message = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_message) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("check_handle", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.check_handle", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_32check_handle(__pyx_self, __pyx_v_g_a, __pyx_v_message); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":840 * return buffer_nd * * def check_handle(int g_a, char *message): # <<<<<<<<<<<<<< * """Checks that the array handle g_a is valid. * */ static PyObject *__pyx_pf_5ga4py_2ga_32check_handle(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, char *__pyx_v_message) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("check_handle", 0); /* "ga4py/ga.pyx":848 * * """ * GA_Check_handle(g_a, message) # <<<<<<<<<<<<<< * * def cluster_nnodes(): */ GA_Check_handle(__pyx_v_g_a, __pyx_v_message); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_35cluster_nnodes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_34cluster_nnodes[] = "cluster_nnodes()\nReturns the total number of nodes that the program is running on.\n\n On SMP architectures, this will be less than or equal to the total number\n of processors.\n\n This is a local operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_35cluster_nnodes = {__Pyx_NAMESTR("cluster_nnodes"), (PyCFunction)__pyx_pw_5ga4py_2ga_35cluster_nnodes, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_34cluster_nnodes)}; static PyObject *__pyx_pw_5ga4py_2ga_35cluster_nnodes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("cluster_nnodes (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_34cluster_nnodes(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":850 * GA_Check_handle(g_a, message) * * def cluster_nnodes(): # <<<<<<<<<<<<<< * """Returns the total number of nodes that the program is running on. * */ static PyObject *__pyx_pf_5ga4py_2ga_34cluster_nnodes(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("cluster_nnodes", 0); /* "ga4py/ga.pyx":859 * * """ * return GA_Cluster_nnodes() # <<<<<<<<<<<<<< * * def cluster_nodeid(int proc=-1): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Cluster_nnodes()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 859; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.cluster_nnodes", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_37cluster_nodeid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_36cluster_nodeid[] = "cluster_nodeid(int proc=-1)\nReturns the node ID of this process or the given process.\n\n On SMP architectures with more than one processor per node, several\n processes may return the same node id.\n\n This is a local operation.\n\n :Parameters:\n proc : int\n process ID to lookup\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_37cluster_nodeid = {__Pyx_NAMESTR("cluster_nodeid"), (PyCFunction)__pyx_pw_5ga4py_2ga_37cluster_nodeid, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_36cluster_nodeid)}; static PyObject *__pyx_pw_5ga4py_2ga_37cluster_nodeid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_proc; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("cluster_nodeid (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__proc,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__proc); if (value) { values[0] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cluster_nodeid") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } } if (values[0]) { __pyx_v_proc = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_proc == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_proc = ((int)-1); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("cluster_nodeid", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.cluster_nodeid", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_36cluster_nodeid(__pyx_self, __pyx_v_proc); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":861 * return GA_Cluster_nnodes() * * def cluster_nodeid(int proc=-1): # <<<<<<<<<<<<<< * """Returns the node ID of this process or the given process. * */ static PyObject *__pyx_pf_5ga4py_2ga_36cluster_nodeid(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_proc) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("cluster_nodeid", 0); /* "ga4py/ga.pyx":874 * * """ * if proc >= 0: # <<<<<<<<<<<<<< * return GA_Cluster_proc_nodeid(proc) * return GA_Cluster_nodeid() */ __pyx_t_1 = ((__pyx_v_proc >= 0) != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":875 * """ * if proc >= 0: * return GA_Cluster_proc_nodeid(proc) # <<<<<<<<<<<<<< * return GA_Cluster_nodeid() * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = PyInt_FromLong(GA_Cluster_proc_nodeid(__pyx_v_proc)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":876 * if proc >= 0: * return GA_Cluster_proc_nodeid(proc) * return GA_Cluster_nodeid() # <<<<<<<<<<<<<< * * def cluster_proc_nodeid(int proc): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = PyInt_FromLong(GA_Cluster_nodeid()); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.ga.cluster_nodeid", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_39cluster_proc_nodeid(PyObject *__pyx_self, PyObject *__pyx_arg_proc); /*proto*/ static char __pyx_doc_5ga4py_2ga_38cluster_proc_nodeid[] = "cluster_proc_nodeid(int proc)\nReturns the node ID of the specified process.\n\n On SMP architectures with more than one processor per node, several\n processors may return the same node id.\n\n This is a local operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_39cluster_proc_nodeid = {__Pyx_NAMESTR("cluster_proc_nodeid"), (PyCFunction)__pyx_pw_5ga4py_2ga_39cluster_proc_nodeid, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_38cluster_proc_nodeid)}; static PyObject *__pyx_pw_5ga4py_2ga_39cluster_proc_nodeid(PyObject *__pyx_self, PyObject *__pyx_arg_proc) { int __pyx_v_proc; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("cluster_proc_nodeid (wrapper)", 0); assert(__pyx_arg_proc); { __pyx_v_proc = __Pyx_PyInt_AsInt(__pyx_arg_proc); if (unlikely((__pyx_v_proc == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.cluster_proc_nodeid", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_38cluster_proc_nodeid(__pyx_self, ((int)__pyx_v_proc)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":878 * return GA_Cluster_nodeid() * * def cluster_proc_nodeid(int proc): # <<<<<<<<<<<<<< * """Returns the node ID of the specified process. * */ static PyObject *__pyx_pf_5ga4py_2ga_38cluster_proc_nodeid(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_proc) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("cluster_proc_nodeid", 0); /* "ga4py/ga.pyx":887 * * """ * return GA_Cluster_proc_nodeid(proc) # <<<<<<<<<<<<<< * * def cluster_nprocs(int node): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Cluster_proc_nodeid(__pyx_v_proc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.cluster_proc_nodeid", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_41cluster_nprocs(PyObject *__pyx_self, PyObject *__pyx_arg_node); /*proto*/ static char __pyx_doc_5ga4py_2ga_40cluster_nprocs[] = "cluster_nprocs(int node)\nReturns the number of processors available on the given node.\n\n This is a local operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_41cluster_nprocs = {__Pyx_NAMESTR("cluster_nprocs"), (PyCFunction)__pyx_pw_5ga4py_2ga_41cluster_nprocs, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_40cluster_nprocs)}; static PyObject *__pyx_pw_5ga4py_2ga_41cluster_nprocs(PyObject *__pyx_self, PyObject *__pyx_arg_node) { int __pyx_v_node; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("cluster_nprocs (wrapper)", 0); assert(__pyx_arg_node); { __pyx_v_node = __Pyx_PyInt_AsInt(__pyx_arg_node); if (unlikely((__pyx_v_node == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.cluster_nprocs", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_40cluster_nprocs(__pyx_self, ((int)__pyx_v_node)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":889 * return GA_Cluster_proc_nodeid(proc) * * def cluster_nprocs(int node): # <<<<<<<<<<<<<< * """Returns the number of processors available on the given node. * */ static PyObject *__pyx_pf_5ga4py_2ga_40cluster_nprocs(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_node) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("cluster_nprocs", 0); /* "ga4py/ga.pyx":895 * * """ * return GA_Cluster_nprocs(node) # <<<<<<<<<<<<<< * * def cluster_procid(int node, int proc): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Cluster_nprocs(__pyx_v_node)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 895; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.cluster_nprocs", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_43cluster_procid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_42cluster_procid[] = "cluster_procid(int node, int proc)\nReturns the proc ID associated with node and local proc ID.\n\n If node has N processors, then the value of proc lies between 0 and\n N-1.\n\n This is a local operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_43cluster_procid = {__Pyx_NAMESTR("cluster_procid"), (PyCFunction)__pyx_pw_5ga4py_2ga_43cluster_procid, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_42cluster_procid)}; static PyObject *__pyx_pw_5ga4py_2ga_43cluster_procid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_node; int __pyx_v_proc; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("cluster_procid (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__node,&__pyx_n_s__proc,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__node)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__proc)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("cluster_procid", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cluster_procid") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_node = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_node == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_proc = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_proc == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("cluster_procid", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.cluster_procid", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_42cluster_procid(__pyx_self, __pyx_v_node, __pyx_v_proc); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":897 * return GA_Cluster_nprocs(node) * * def cluster_procid(int node, int proc): # <<<<<<<<<<<<<< * """Returns the proc ID associated with node and local proc ID. * */ static PyObject *__pyx_pf_5ga4py_2ga_42cluster_procid(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_node, int __pyx_v_proc) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("cluster_procid", 0); /* "ga4py/ga.pyx":906 * * """ * return GA_Cluster_procid(node, proc) # <<<<<<<<<<<<<< * * def compare_distr(int g_a, int g_b): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Cluster_procid(__pyx_v_node, __pyx_v_proc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 906; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.cluster_procid", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_45compare_distr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_44compare_distr[] = "compare_distr(int g_a, int g_b)\nCompares the distributions of two global arrays.\n\n This is a collective operation.\n\n :returns: True if distributions are identical and False when they are not\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_45compare_distr = {__Pyx_NAMESTR("compare_distr"), (PyCFunction)__pyx_pw_5ga4py_2ga_45compare_distr, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_44compare_distr)}; static PyObject *__pyx_pw_5ga4py_2ga_45compare_distr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_b; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("compare_distr (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_b,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("compare_distr", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "compare_distr") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_b = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("compare_distr", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.compare_distr", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_44compare_distr(__pyx_self, __pyx_v_g_a, __pyx_v_g_b); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":908 * return GA_Cluster_procid(node, proc) * * def compare_distr(int g_a, int g_b): # <<<<<<<<<<<<<< * """Compares the distributions of two global arrays. * */ static PyObject *__pyx_pf_5ga4py_2ga_44compare_distr(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("compare_distr", 0); /* "ga4py/ga.pyx":916 * * """ * if GA_Compare_distr(g_a, g_b) == 0: # <<<<<<<<<<<<<< * return True * return False */ __pyx_t_1 = ((GA_Compare_distr(__pyx_v_g_a, __pyx_v_g_b) == 0) != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":917 * """ * if GA_Compare_distr(g_a, g_b) == 0: * return True # <<<<<<<<<<<<<< * return False * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 917; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":918 * if GA_Compare_distr(g_a, g_b) == 0: * return True * return False # <<<<<<<<<<<<<< * * def copy(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None, */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 918; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.ga.compare_distr", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_47copy(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_46copy[] = "copy(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None, bool trans=False)\nCopies elements from array g_a into array g_b.\n\n For the operation over the entire arrays, the arrays must be the same\n type, shape, and identically aligned. No transpose is allowed in this\n case.\n\n For patch operations, the patches of arrays may be of different shapes but\n must have the same number of elements. Patches must be nonoverlapping (if\n g_a=g_b). Transposes are allowed for patch operations.\n\n This is a collective operation. \n\n :Parameters:\n g_a : int\n the array handle copying from\n g_b : int\n the array handle copying to\n alo : 1D array-like of integers\n lower bound patch coordinates of g_a, inclusive\n ahi : 1D array-like of integers\n higher bound patch coordinates of g_a, exclusive\n blo : 1D array-like of integers\n lower bound patch coordinates of g_b, inclusive\n bhi : 1D array-like of integers\n higher bound patch coordinates of g_b, exclusive\n trans : bool\n whether the transpose operator should be applied True=applied\n \n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_47copy = {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_pw_5ga4py_2ga_47copy, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_46copy)}; static PyObject *__pyx_pw_5ga4py_2ga_47copy(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_b; PyObject *__pyx_v_alo = 0; PyObject *__pyx_v_ahi = 0; PyObject *__pyx_v_blo = 0; PyObject *__pyx_v_bhi = 0; int __pyx_v_trans; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("copy (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_b,&__pyx_n_s__alo,&__pyx_n_s__ahi,&__pyx_n_s__blo,&__pyx_n_s__bhi,&__pyx_n_s__trans,0}; PyObject* values[7] = {0,0,0,0,0,0,0}; /* "ga4py/ga.pyx":920 * return False * * def copy(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None, # <<<<<<<<<<<<<< * bint trans=False): * """Copies elements from array g_a into array g_b. */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); values[5] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("copy", 0, 2, 7, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alo); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ahi); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__blo); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bhi); if (value) { values[5] = value; kw_args--; } } case 6: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__trans); if (value) { values[6] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "copy") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_b = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_alo = values[2]; __pyx_v_ahi = values[3]; __pyx_v_blo = values[4]; __pyx_v_bhi = values[5]; if (values[6]) { __pyx_v_trans = __Pyx_PyObject_IsTrue(values[6]); if (unlikely((__pyx_v_trans == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { /* "ga4py/ga.pyx":921 * * def copy(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None, * bint trans=False): # <<<<<<<<<<<<<< * """Copies elements from array g_a into array g_b. * */ __pyx_v_trans = ((int)0); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("copy", 0, 2, 7, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_46copy(__pyx_self, __pyx_v_g_a, __pyx_v_g_b, __pyx_v_alo, __pyx_v_ahi, __pyx_v_blo, __pyx_v_bhi, __pyx_v_trans); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":920 * return False * * def copy(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None, # <<<<<<<<<<<<<< * bint trans=False): * """Copies elements from array g_a into array g_b. */ static PyObject *__pyx_pf_5ga4py_2ga_46copy(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, int __pyx_v_trans) { PyArrayObject *__pyx_v_alo_nd = 0; PyArrayObject *__pyx_v_ahi_nd = 0; PyArrayObject *__pyx_v_blo_nd = 0; PyArrayObject *__pyx_v_bhi_nd = 0; char __pyx_v_trans_c; __Pyx_LocalBuf_ND __pyx_pybuffernd_ahi_nd; __Pyx_Buffer __pyx_pybuffer_ahi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_alo_nd; __Pyx_Buffer __pyx_pybuffer_alo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_bhi_nd; __Pyx_Buffer __pyx_pybuffer_bhi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_blo_nd; __Pyx_Buffer __pyx_pybuffer_blo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *(*__pyx_t_10)(PyObject *); PyArrayObject *__pyx_t_11 = NULL; int __pyx_t_12; PyObject *__pyx_t_13 = NULL; PyObject *__pyx_t_14 = NULL; PyObject *__pyx_t_15 = NULL; PyArrayObject *__pyx_t_16 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("copy", 0); __pyx_pybuffer_alo_nd.pybuffer.buf = NULL; __pyx_pybuffer_alo_nd.refcount = 0; __pyx_pybuffernd_alo_nd.data = NULL; __pyx_pybuffernd_alo_nd.rcbuffer = &__pyx_pybuffer_alo_nd; __pyx_pybuffer_ahi_nd.pybuffer.buf = NULL; __pyx_pybuffer_ahi_nd.refcount = 0; __pyx_pybuffernd_ahi_nd.data = NULL; __pyx_pybuffernd_ahi_nd.rcbuffer = &__pyx_pybuffer_ahi_nd; __pyx_pybuffer_blo_nd.pybuffer.buf = NULL; __pyx_pybuffer_blo_nd.refcount = 0; __pyx_pybuffernd_blo_nd.data = NULL; __pyx_pybuffernd_blo_nd.rcbuffer = &__pyx_pybuffer_blo_nd; __pyx_pybuffer_bhi_nd.pybuffer.buf = NULL; __pyx_pybuffer_bhi_nd.refcount = 0; __pyx_pybuffernd_bhi_nd.data = NULL; __pyx_pybuffernd_bhi_nd.rcbuffer = &__pyx_pybuffer_bhi_nd; /* "ga4py/ga.pyx":954 * cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd * cdef char trans_c * if alo is None and ahi is None and blo is None and bhi is None: # <<<<<<<<<<<<<< * GA_Copy(g_a, g_b) * else: */ __pyx_t_1 = (__pyx_v_alo == Py_None); if ((__pyx_t_1 != 0)) { __pyx_t_2 = (__pyx_v_ahi == Py_None); if ((__pyx_t_2 != 0)) { __pyx_t_3 = (__pyx_v_blo == Py_None); if ((__pyx_t_3 != 0)) { __pyx_t_4 = (__pyx_v_bhi == Py_None); __pyx_t_5 = (__pyx_t_4 != 0); } else { __pyx_t_5 = (__pyx_t_3 != 0); } __pyx_t_3 = __pyx_t_5; } else { __pyx_t_3 = (__pyx_t_2 != 0); } __pyx_t_2 = __pyx_t_3; } else { __pyx_t_2 = (__pyx_t_1 != 0); } if (__pyx_t_2) { /* "ga4py/ga.pyx":955 * cdef char trans_c * if alo is None and ahi is None and blo is None and bhi is None: * GA_Copy(g_a, g_b) # <<<<<<<<<<<<<< * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) */ GA_Copy(__pyx_v_g_a, __pyx_v_g_b); goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":957 * GA_Copy(g_a, g_b) * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) # <<<<<<<<<<<<<< * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * if trans: */ __pyx_t_6 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_alo, __pyx_v_ahi); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { PyObject* sequence = __pyx_t_6; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_7 = PyList_GET_ITEM(sequence, 0); __pyx_t_8 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx_t_8); #else __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); #endif __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else { Py_ssize_t index = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext; index = 0; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_8); if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_10 = NULL; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_10 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_11 = ((PyArrayObject *)__pyx_t_7); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_12 < 0)) { PyErr_Fetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_alo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_13, __pyx_t_14, __pyx_t_15); } } __pyx_pybuffernd_alo_nd.diminfo[0].strides = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_alo_nd.diminfo[0].shape = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_11 = 0; __pyx_v_alo_nd = ((PyArrayObject *)__pyx_t_7); __pyx_t_7 = 0; __pyx_t_11 = ((PyArrayObject *)__pyx_t_8); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_12 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ahi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_14, __pyx_t_13); } } __pyx_pybuffernd_ahi_nd.diminfo[0].strides = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ahi_nd.diminfo[0].shape = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_11 = 0; __pyx_v_ahi_nd = ((PyArrayObject *)__pyx_t_8); __pyx_t_8 = 0; /* "ga4py/ga.pyx":958 * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) # <<<<<<<<<<<<<< * if trans: * trans_c = "T" */ __pyx_t_6 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_b, __pyx_v_blo, __pyx_v_bhi); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { PyObject* sequence = __pyx_t_6; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_8 = PyList_GET_ITEM(sequence, 0); __pyx_t_7 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx_t_7); #else __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); #endif __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else { Py_ssize_t index = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext; index = 0; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_8); index = 1; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_10 = NULL; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_10 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L7_unpacking_done:; } if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_16 = ((PyArrayObject *)__pyx_t_8); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_12 < 0)) { PyErr_Fetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_blo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_13, __pyx_t_14, __pyx_t_15); } } __pyx_pybuffernd_blo_nd.diminfo[0].strides = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_blo_nd.diminfo[0].shape = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_16 = 0; __pyx_v_blo_nd = ((PyArrayObject *)__pyx_t_8); __pyx_t_8 = 0; __pyx_t_16 = ((PyArrayObject *)__pyx_t_7); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_12 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_bhi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_14, __pyx_t_13); } } __pyx_pybuffernd_bhi_nd.diminfo[0].strides = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_bhi_nd.diminfo[0].shape = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_16 = 0; __pyx_v_bhi_nd = ((PyArrayObject *)__pyx_t_7); __pyx_t_7 = 0; /* "ga4py/ga.pyx":959 * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * if trans: # <<<<<<<<<<<<<< * trans_c = "T" * else: */ __pyx_t_2 = (__pyx_v_trans != 0); if (__pyx_t_2) { /* "ga4py/ga.pyx":960 * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * if trans: * trans_c = "T" # <<<<<<<<<<<<<< * else: * trans_c = "N" */ __pyx_v_trans_c = 'T'; goto __pyx_L8; } /*else*/ { /* "ga4py/ga.pyx":962 * trans_c = "T" * else: * trans_c = "N" # <<<<<<<<<<<<<< * NGA_Copy_patch64(trans_c, * g_a, alo_nd.data, ahi_nd.data, */ __pyx_v_trans_c = 'N'; } __pyx_L8:; /* "ga4py/ga.pyx":965 * NGA_Copy_patch64(trans_c, * g_a, alo_nd.data, ahi_nd.data, * g_b, blo_nd.data, bhi_nd.data) # <<<<<<<<<<<<<< * * def create(int gtype, dims, char *name="", chunk=None, int pgroup=-1): */ NGA_Copy_patch64(__pyx_v_trans_c, __pyx_v_g_a, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_g_b, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data)); } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_alo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_ahi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_blo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_bhi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_49create(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_48create[] = "create(int gtype, dims, char *name='', chunk=None, int pgroup=-1)\nCreates an n-dimensional array using the regular distribution model.\n\n The array can be distributed evenly or not. The control over the\n distribution is accomplished by specifying chunk (block) size for all or\n some of array dimensions. For example, for a 2-dimensional array, setting\n chunk[0]=dim[0] gives distribution by vertical strips (chunk[0]*dims[0]);\n setting chunk[1]=dim[1] gives distribution by horizontal strips\n (chunk[1]*dims[1]). Actual chunks will be modified so that they are at\n least the size of the minimum and each process has either zero or one\n chunk. Specifying chunk[i] as <1 will cause that dimension to be\n distributed evenly.\n\n As a convenience, when chunk is omitted or None, the entire array is\n distributed evenly.\n\n :Parameters:\n gtype : int\n the type of the array\n dims : 1D array-like of integers\n shape of the array\n name : string\n the name of the array\n chunk : 1D array-like of integers\n see above\n pgroup : int\n create array only as part of this processor group\n\n :returns: a non-zero array handle means the call was succesful.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_49create = {__Pyx_NAMESTR("create"), (PyCFunction)__pyx_pw_5ga4py_2ga_49create, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_48create)}; static PyObject *__pyx_pw_5ga4py_2ga_49create(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_gtype; PyObject *__pyx_v_dims = 0; char *__pyx_v_name; PyObject *__pyx_v_chunk = 0; int __pyx_v_pgroup; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__gtype,&__pyx_n_s__dims,&__pyx_n_s__name,&__pyx_n_s__chunk,&__pyx_n_s__pgroup,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/ga.pyx":967 * g_b, blo_nd.data, bhi_nd.data) * * def create(int gtype, dims, char *name="", chunk=None, int pgroup=-1): # <<<<<<<<<<<<<< * """Creates an n-dimensional array using the regular distribution model. * */ values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__gtype)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dims)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("create", 0, 2, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__chunk); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_gtype = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_gtype == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_dims = values[1]; if (values[2]) { __pyx_v_name = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_name = ((char *)__pyx_k_16); } __pyx_v_chunk = values[3]; if (values[4]) { __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[4]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_pgroup = ((int)-1); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("create", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.create", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_48create(__pyx_self, __pyx_v_gtype, __pyx_v_dims, __pyx_v_name, __pyx_v_chunk, __pyx_v_pgroup); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_48create(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_gtype, PyObject *__pyx_v_dims, char *__pyx_v_name, PyObject *__pyx_v_chunk, int __pyx_v_pgroup) { PyArrayObject *__pyx_v_dims_nd = 0; PyArrayObject *__pyx_v_chunk_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_chunk_nd; __Pyx_Buffer __pyx_pybuffer_chunk_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_dims_nd; __Pyx_Buffer __pyx_pybuffer_dims_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyArrayObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; Py_ssize_t __pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("create", 0); __pyx_pybuffer_dims_nd.pybuffer.buf = NULL; __pyx_pybuffer_dims_nd.refcount = 0; __pyx_pybuffernd_dims_nd.data = NULL; __pyx_pybuffernd_dims_nd.rcbuffer = &__pyx_pybuffer_dims_nd; __pyx_pybuffer_chunk_nd.pybuffer.buf = NULL; __pyx_pybuffer_chunk_nd.refcount = 0; __pyx_pybuffernd_chunk_nd.data = NULL; __pyx_pybuffernd_chunk_nd.rcbuffer = &__pyx_pybuffer_chunk_nd; /* "ga4py/ga.pyx":1000 * * """ * cdef np.ndarray[np.int64_t, ndim=1] dims_nd, chunk_nd=None # <<<<<<<<<<<<<< * dims_nd = _inta64(dims) * if pgroup < 0: */ __pyx_t_1 = ((PyArrayObject *)Py_None); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { __pyx_v_chunk_nd = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1000; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_pybuffernd_chunk_nd.diminfo[0].strides = __pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_chunk_nd.diminfo[0].shape = __pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer.shape[0]; } } __pyx_t_1 = 0; __Pyx_INCREF(Py_None); __pyx_v_chunk_nd = ((PyArrayObject *)Py_None); /* "ga4py/ga.pyx":1001 * """ * cdef np.ndarray[np.int64_t, ndim=1] dims_nd, chunk_nd=None * dims_nd = _inta64(dims) # <<<<<<<<<<<<<< * if pgroup < 0: * pgroup = pgroup_get_default() */ __pyx_t_2 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_dims)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1001; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_2), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_dims_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } } __pyx_pybuffernd_dims_nd.diminfo[0].strides = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dims_nd.diminfo[0].shape = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1001; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_dims_nd = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":1002 * cdef np.ndarray[np.int64_t, ndim=1] dims_nd, chunk_nd=None * dims_nd = _inta64(dims) * if pgroup < 0: # <<<<<<<<<<<<<< * pgroup = pgroup_get_default() * if chunk: */ __pyx_t_7 = ((__pyx_v_pgroup < 0) != 0); if (__pyx_t_7) { /* "ga4py/ga.pyx":1003 * dims_nd = _inta64(dims) * if pgroup < 0: * pgroup = pgroup_get_default() # <<<<<<<<<<<<<< * if chunk: * chunk_nd = _inta64(chunk) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__pgroup_get_default); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1003; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_8 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1003; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyInt_AsInt(__pyx_t_8); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1003; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_v_pgroup = __pyx_t_3; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":1004 * if pgroup < 0: * pgroup = pgroup_get_default() * if chunk: # <<<<<<<<<<<<<< * chunk_nd = _inta64(chunk) * return NGA_Create_config64(gtype, len(dims_nd), dims_nd.data, */ __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_chunk); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1004; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_7) { /* "ga4py/ga.pyx":1005 * pgroup = pgroup_get_default() * if chunk: * chunk_nd = _inta64(chunk) # <<<<<<<<<<<<<< * return NGA_Create_config64(gtype, len(dims_nd), dims_nd.data, * name, chunk_nd.data, pgroup) */ __pyx_t_8 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_chunk)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1005; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_8), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_chunk_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } } __pyx_pybuffernd_chunk_nd.diminfo[0].strides = __pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_chunk_nd.diminfo[0].shape = __pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1005; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __Pyx_DECREF_SET(__pyx_v_chunk_nd, ((PyArrayObject *)__pyx_t_8)); __pyx_t_8 = 0; /* "ga4py/ga.pyx":1006 * if chunk: * chunk_nd = _inta64(chunk) * return NGA_Create_config64(gtype, len(dims_nd), dims_nd.data, # <<<<<<<<<<<<<< * name, chunk_nd.data, pgroup) * else: */ __Pyx_XDECREF(__pyx_r); __pyx_t_9 = PyObject_Length(((PyObject *)__pyx_v_dims_nd)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1006; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1007 * chunk_nd = _inta64(chunk) * return NGA_Create_config64(gtype, len(dims_nd), dims_nd.data, * name, chunk_nd.data, pgroup) # <<<<<<<<<<<<<< * else: * return NGA_Create_config64(gtype, len(dims_nd), dims_nd.data, */ __pyx_t_8 = PyInt_FromLong(NGA_Create_config64(__pyx_v_gtype, __pyx_t_9, ((int64_t *)__pyx_v_dims_nd->data), __pyx_v_name, ((int64_t *)__pyx_v_chunk_nd->data), __pyx_v_pgroup)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1006; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_r = __pyx_t_8; __pyx_t_8 = 0; goto __pyx_L0; goto __pyx_L4; } /*else*/ { /* "ga4py/ga.pyx":1009 * name, chunk_nd.data, pgroup) * else: * return NGA_Create_config64(gtype, len(dims_nd), dims_nd.data, # <<<<<<<<<<<<<< * name, NULL, pgroup) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_9 = PyObject_Length(((PyObject *)__pyx_v_dims_nd)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1009; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1010 * else: * return NGA_Create_config64(gtype, len(dims_nd), dims_nd.data, * name, NULL, pgroup) # <<<<<<<<<<<<<< * * def create_ghosts(int gtype, dims, width, char *name="", chunk=None, */ __pyx_t_8 = PyInt_FromLong(NGA_Create_config64(__pyx_v_gtype, __pyx_t_9, ((int64_t *)__pyx_v_dims_nd->data), __pyx_v_name, NULL, __pyx_v_pgroup)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1009; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_r = __pyx_t_8; __pyx_t_8 = 0; goto __pyx_L0; } __pyx_L4:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_8); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.create", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_dims_nd); __Pyx_XDECREF((PyObject *)__pyx_v_chunk_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_51create_ghosts(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_50create_ghosts[] = "create_ghosts(int gtype, dims, width, char *name='', chunk=None, int pgroup=-1)\nCreates an array with a layer of ghost cells around the visible data.\n\n The array can be distributed evenly or not evenly. The control over the\n distribution is accomplished by specifying chunk (block) size for all or\n some of the array dimensions. For example, for a 2-dimensional array,\n setting chunk(1)=dim(1) gives distribution by vertical strips\n (chunk(1)*dims(1)); setting chunk(2)=dim(2) gives distribution by\n horizontal strips (chunk(2)*dims(2)). Actual chunks will be modified so\n that they are at least the size of the minimum and each process has either\n zero or one chunk. Specifying chunk(i) as <1 will cause that dimension\n (i-th) to be distributed evenly. The width of the ghost cell layer in\n each dimension is specified using the array width(). The local data of\n the global array residing on each processor will have a layer width[n]\n ghosts cells wide on either side of the visible data along the dimension\n n.\n\n :Parameters:\n gtype : int\n the type of the array\n dims : 1D array-like of integers\n shape of the array\n width : 1D array-like of integers\n ghost cell widths\n name : string\n the name of the array\n chunk : 1D array-like of integers\n see above\n pgroup : int\n create array only as part of this processor group\n\n :returns: a non-zero array handle means the call was successful.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_51create_ghosts = {__Pyx_NAMESTR("create_ghosts"), (PyCFunction)__pyx_pw_5ga4py_2ga_51create_ghosts, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_50create_ghosts)}; static PyObject *__pyx_pw_5ga4py_2ga_51create_ghosts(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_gtype; PyObject *__pyx_v_dims = 0; PyObject *__pyx_v_width = 0; char *__pyx_v_name; PyObject *__pyx_v_chunk = 0; int __pyx_v_pgroup; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_ghosts (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__gtype,&__pyx_n_s__dims,&__pyx_n_s__width,&__pyx_n_s__name,&__pyx_n_s__chunk,&__pyx_n_s__pgroup,0}; PyObject* values[6] = {0,0,0,0,0,0}; /* "ga4py/ga.pyx":1012 * name, NULL, pgroup) * * def create_ghosts(int gtype, dims, width, char *name="", chunk=None, # <<<<<<<<<<<<<< * int pgroup=-1): * """Creates an array with a layer of ghost cells around the visible data. */ values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__gtype)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dims)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("create_ghosts", 0, 3, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1012; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__width)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("create_ghosts", 0, 3, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1012; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__chunk); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup); if (value) { values[5] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_ghosts") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1012; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_gtype = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_gtype == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1012; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_dims = values[1]; __pyx_v_width = values[2]; if (values[3]) { __pyx_v_name = __Pyx_PyObject_AsString(values[3]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1012; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_name = ((char *)__pyx_k_16); } __pyx_v_chunk = values[4]; if (values[5]) { __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[5]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1013; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_pgroup = ((int)-1); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("create_ghosts", 0, 3, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1012; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.create_ghosts", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_50create_ghosts(__pyx_self, __pyx_v_gtype, __pyx_v_dims, __pyx_v_width, __pyx_v_name, __pyx_v_chunk, __pyx_v_pgroup); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_50create_ghosts(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_gtype, PyObject *__pyx_v_dims, PyObject *__pyx_v_width, char *__pyx_v_name, PyObject *__pyx_v_chunk, int __pyx_v_pgroup) { PyArrayObject *__pyx_v_dims_nd = 0; PyArrayObject *__pyx_v_chunk_nd = 0; PyArrayObject *__pyx_v_width_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_chunk_nd; __Pyx_Buffer __pyx_pybuffer_chunk_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_dims_nd; __Pyx_Buffer __pyx_pybuffer_dims_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_width_nd; __Pyx_Buffer __pyx_pybuffer_width_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_t_6; PyObject *__pyx_t_7 = NULL; Py_ssize_t __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("create_ghosts", 0); __pyx_pybuffer_dims_nd.pybuffer.buf = NULL; __pyx_pybuffer_dims_nd.refcount = 0; __pyx_pybuffernd_dims_nd.data = NULL; __pyx_pybuffernd_dims_nd.rcbuffer = &__pyx_pybuffer_dims_nd; __pyx_pybuffer_chunk_nd.pybuffer.buf = NULL; __pyx_pybuffer_chunk_nd.refcount = 0; __pyx_pybuffernd_chunk_nd.data = NULL; __pyx_pybuffernd_chunk_nd.rcbuffer = &__pyx_pybuffer_chunk_nd; __pyx_pybuffer_width_nd.pybuffer.buf = NULL; __pyx_pybuffer_width_nd.refcount = 0; __pyx_pybuffernd_width_nd.data = NULL; __pyx_pybuffernd_width_nd.rcbuffer = &__pyx_pybuffer_width_nd; /* "ga4py/ga.pyx":1050 * """ * cdef np.ndarray[np.int64_t, ndim=1] dims_nd, chunk_nd, width_nd * dims_nd = _inta64(dims) # <<<<<<<<<<<<<< * width_nd = _inta64(width) * if pgroup < 0: */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_dims)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1050; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_dims_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_dims_nd.diminfo[0].strides = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dims_nd.diminfo[0].shape = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1050; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_dims_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":1051 * cdef np.ndarray[np.int64_t, ndim=1] dims_nd, chunk_nd, width_nd * dims_nd = _inta64(dims) * width_nd = _inta64(width) # <<<<<<<<<<<<<< * if pgroup < 0: * pgroup = pgroup_get_default() */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_width)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1051; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_width_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_width_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_width_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_width_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_3); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_4, __pyx_t_3); } } __pyx_pybuffernd_width_nd.diminfo[0].strides = __pyx_pybuffernd_width_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_width_nd.diminfo[0].shape = __pyx_pybuffernd_width_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1051; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_width_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":1052 * dims_nd = _inta64(dims) * width_nd = _inta64(width) * if pgroup < 0: # <<<<<<<<<<<<<< * pgroup = pgroup_get_default() * if chunk: */ __pyx_t_6 = ((__pyx_v_pgroup < 0) != 0); if (__pyx_t_6) { /* "ga4py/ga.pyx":1053 * width_nd = _inta64(width) * if pgroup < 0: * pgroup = pgroup_get_default() # <<<<<<<<<<<<<< * if chunk: * chunk_nd = _inta64(chunk) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__pgroup_get_default); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1053; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1053; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __Pyx_PyInt_AsInt(__pyx_t_7); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1053; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_pgroup = __pyx_t_2; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":1054 * if pgroup < 0: * pgroup = pgroup_get_default() * if chunk: # <<<<<<<<<<<<<< * chunk_nd = _inta64(chunk) * return NGA_Create_ghosts_config64(gtype, len(dims_nd), */ __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_chunk); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1054; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_6) { /* "ga4py/ga.pyx":1055 * pgroup = pgroup_get_default() * if chunk: * chunk_nd = _inta64(chunk) # <<<<<<<<<<<<<< * return NGA_Create_ghosts_config64(gtype, len(dims_nd), * dims_nd.data, width_nd.data, name, */ __pyx_t_7 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_chunk)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1055; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_7), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_chunk_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_chunk_nd.diminfo[0].strides = __pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_chunk_nd.diminfo[0].shape = __pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1055; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_chunk_nd = ((PyArrayObject *)__pyx_t_7); __pyx_t_7 = 0; /* "ga4py/ga.pyx":1056 * if chunk: * chunk_nd = _inta64(chunk) * return NGA_Create_ghosts_config64(gtype, len(dims_nd), # <<<<<<<<<<<<<< * dims_nd.data, width_nd.data, name, * chunk_nd.data, pgroup) */ __Pyx_XDECREF(__pyx_r); __pyx_t_8 = PyObject_Length(((PyObject *)__pyx_v_dims_nd)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1056; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1058 * return NGA_Create_ghosts_config64(gtype, len(dims_nd), * dims_nd.data, width_nd.data, name, * chunk_nd.data, pgroup) # <<<<<<<<<<<<<< * else: * return NGA_Create_ghosts_config64(gtype, len(dims_nd), */ __pyx_t_7 = PyInt_FromLong(NGA_Create_ghosts_config64(__pyx_v_gtype, __pyx_t_8, ((int64_t *)__pyx_v_dims_nd->data), ((int64_t *)__pyx_v_width_nd->data), __pyx_v_name, ((int64_t *)__pyx_v_chunk_nd->data), __pyx_v_pgroup)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1056; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_r = __pyx_t_7; __pyx_t_7 = 0; goto __pyx_L0; goto __pyx_L4; } /*else*/ { /* "ga4py/ga.pyx":1060 * chunk_nd.data, pgroup) * else: * return NGA_Create_ghosts_config64(gtype, len(dims_nd), # <<<<<<<<<<<<<< * dims_nd.data, width_nd.data, name, * NULL, pgroup) */ __Pyx_XDECREF(__pyx_r); __pyx_t_8 = PyObject_Length(((PyObject *)__pyx_v_dims_nd)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1060; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1062 * return NGA_Create_ghosts_config64(gtype, len(dims_nd), * dims_nd.data, width_nd.data, name, * NULL, pgroup) # <<<<<<<<<<<<<< * * def create_handle(): */ __pyx_t_7 = PyInt_FromLong(NGA_Create_ghosts_config64(__pyx_v_gtype, __pyx_t_8, ((int64_t *)__pyx_v_dims_nd->data), ((int64_t *)__pyx_v_width_nd->data), __pyx_v_name, NULL, __pyx_v_pgroup)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1060; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_r = __pyx_t_7; __pyx_t_7 = 0; goto __pyx_L0; } __pyx_L4:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_7); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_width_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.create_ghosts", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_width_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_dims_nd); __Pyx_XDECREF((PyObject *)__pyx_v_chunk_nd); __Pyx_XDECREF((PyObject *)__pyx_v_width_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_53create_handle(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_52create_handle[] = "create_handle()\nReturns a global array handle that can be used to create a new array.\n \n The sequence of operations is to begin with a call to ga.create_handle to\n get a new array handle. The attributes of the array, such as dimension,\n size, type, etc. can then be set using successive calls to the ga.set_xxx\n subroutines. When all array attributes have been set, the ga.allocate\n subroutine is called and the global array is actually created and memory\n for it is allocated.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_53create_handle = {__Pyx_NAMESTR("create_handle"), (PyCFunction)__pyx_pw_5ga4py_2ga_53create_handle, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_52create_handle)}; static PyObject *__pyx_pw_5ga4py_2ga_53create_handle(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_handle (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_52create_handle(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1064 * NULL, pgroup) * * def create_handle(): # <<<<<<<<<<<<<< * """Returns a global array handle that can be used to create a new array. * */ static PyObject *__pyx_pf_5ga4py_2ga_52create_handle(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("create_handle", 0); /* "ga4py/ga.pyx":1077 * * """ * return GA_Create_handle() # <<<<<<<<<<<<<< * * def create_irreg(int gtype, dims, block, map, char *name="", int pgroup=-1): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Create_handle()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1077; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.create_handle", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_55create_irreg(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_54create_irreg[] = "create_irreg(int gtype, dims, block, map, char *name='', int pgroup=-1)\nCreates an array by following the user-specified distribution.\n\n The distribution is specified as a Cartesian product of distributions for\n each dimension. The array indices start at 0. For example, the following\n figure demonstrates distribution of a 2-dimensional array 8x10 on 6 (or\n more) processors. nblock[2]=[3,2], the size of map array is s=5 and array\n map contains the following elements map=[0,2,6, 0, 5]. The distribution is\n nonuniform because, P1 and P4 get 20 elements each and processors\n P0,P2,P3, and P5 only 10 elements each.\n\n This is a collective operation.\n\n :Parameters:\n gtype : int\n the type of the array\n dims : 1D array-like of integers\n shape of the array\n block : 1D array-like of integers\n the number of blocks each dimension is divided into\n map : 1D array-like of integers\n starting index for each block\n len(map) == sum of all elements of nblock array\n name : string\n the name of the array\n pgroup : int\n create array only as part of this processor group\n \n :returns: integer handle representing the array; a non-zero value indicates success\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_55create_irreg = {__Pyx_NAMESTR("create_irreg"), (PyCFunction)__pyx_pw_5ga4py_2ga_55create_irreg, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_54create_irreg)}; static PyObject *__pyx_pw_5ga4py_2ga_55create_irreg(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_gtype; PyObject *__pyx_v_dims = 0; PyObject *__pyx_v_block = 0; PyObject *__pyx_v_map = 0; char *__pyx_v_name; int __pyx_v_pgroup; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_irreg (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__gtype,&__pyx_n_s__dims,&__pyx_n_s__block,&__pyx_n_s__map,&__pyx_n_s__name,&__pyx_n_s__pgroup,0}; PyObject* values[6] = {0,0,0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__gtype)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dims)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("create_irreg", 0, 4, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__block)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("create_irreg", 0, 4, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__map)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("create_irreg", 0, 4, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup); if (value) { values[5] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_irreg") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_gtype = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_gtype == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_dims = values[1]; __pyx_v_block = values[2]; __pyx_v_map = values[3]; if (values[4]) { __pyx_v_name = __Pyx_PyObject_AsString(values[4]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_name = ((char *)__pyx_k_16); } if (values[5]) { __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[5]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_pgroup = ((int)-1); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("create_irreg", 0, 4, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.create_irreg", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_54create_irreg(__pyx_self, __pyx_v_gtype, __pyx_v_dims, __pyx_v_block, __pyx_v_map, __pyx_v_name, __pyx_v_pgroup); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1079 * return GA_Create_handle() * * def create_irreg(int gtype, dims, block, map, char *name="", int pgroup=-1): # <<<<<<<<<<<<<< * """Creates an array by following the user-specified distribution. * */ static PyObject *__pyx_pf_5ga4py_2ga_54create_irreg(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_gtype, PyObject *__pyx_v_dims, PyObject *__pyx_v_block, PyObject *__pyx_v_map, char *__pyx_v_name, int __pyx_v_pgroup) { PyArrayObject *__pyx_v_dims_nd = 0; PyArrayObject *__pyx_v_block_nd = 0; PyArrayObject *__pyx_v_map_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_block_nd; __Pyx_Buffer __pyx_pybuffer_block_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_dims_nd; __Pyx_Buffer __pyx_pybuffer_dims_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_map_nd; __Pyx_Buffer __pyx_pybuffer_map_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_t_6; PyObject *__pyx_t_7 = NULL; Py_ssize_t __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("create_irreg", 0); __pyx_pybuffer_dims_nd.pybuffer.buf = NULL; __pyx_pybuffer_dims_nd.refcount = 0; __pyx_pybuffernd_dims_nd.data = NULL; __pyx_pybuffernd_dims_nd.rcbuffer = &__pyx_pybuffer_dims_nd; __pyx_pybuffer_block_nd.pybuffer.buf = NULL; __pyx_pybuffer_block_nd.refcount = 0; __pyx_pybuffernd_block_nd.data = NULL; __pyx_pybuffernd_block_nd.rcbuffer = &__pyx_pybuffer_block_nd; __pyx_pybuffer_map_nd.pybuffer.buf = NULL; __pyx_pybuffer_map_nd.refcount = 0; __pyx_pybuffernd_map_nd.data = NULL; __pyx_pybuffernd_map_nd.rcbuffer = &__pyx_pybuffer_map_nd; /* "ga4py/ga.pyx":1111 * """ * cdef np.ndarray[np.int64_t, ndim=1] dims_nd, block_nd, map_nd * dims_nd = _inta64(dims) # <<<<<<<<<<<<<< * block_nd = _inta64(block) * map_nd = _inta64(map) */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_dims)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_dims_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_dims_nd.diminfo[0].strides = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dims_nd.diminfo[0].shape = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_dims_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":1112 * cdef np.ndarray[np.int64_t, ndim=1] dims_nd, block_nd, map_nd * dims_nd = _inta64(dims) * block_nd = _inta64(block) # <<<<<<<<<<<<<< * map_nd = _inta64(map) * if pgroup < 0: */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_block)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_block_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_block_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_block_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_block_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_3); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_4, __pyx_t_3); } } __pyx_pybuffernd_block_nd.diminfo[0].strides = __pyx_pybuffernd_block_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_block_nd.diminfo[0].shape = __pyx_pybuffernd_block_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_block_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":1113 * dims_nd = _inta64(dims) * block_nd = _inta64(block) * map_nd = _inta64(map) # <<<<<<<<<<<<<< * if pgroup < 0: * pgroup = pgroup_get_default() */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_map)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_map_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_map_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_map_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_map_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_map_nd.diminfo[0].strides = __pyx_pybuffernd_map_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_map_nd.diminfo[0].shape = __pyx_pybuffernd_map_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_map_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":1114 * block_nd = _inta64(block) * map_nd = _inta64(map) * if pgroup < 0: # <<<<<<<<<<<<<< * pgroup = pgroup_get_default() * return NGA_Create_irreg_config64(gtype, len(dims_nd), */ __pyx_t_6 = ((__pyx_v_pgroup < 0) != 0); if (__pyx_t_6) { /* "ga4py/ga.pyx":1115 * map_nd = _inta64(map) * if pgroup < 0: * pgroup = pgroup_get_default() # <<<<<<<<<<<<<< * return NGA_Create_irreg_config64(gtype, len(dims_nd), * dims_nd.data, name, */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__pgroup_get_default); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __Pyx_PyInt_AsInt(__pyx_t_7); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_pgroup = __pyx_t_2; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":1116 * if pgroup < 0: * pgroup = pgroup_get_default() * return NGA_Create_irreg_config64(gtype, len(dims_nd), # <<<<<<<<<<<<<< * dims_nd.data, name, * block_nd.data, map_nd.data, pgroup) */ __Pyx_XDECREF(__pyx_r); __pyx_t_8 = PyObject_Length(((PyObject *)__pyx_v_dims_nd)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1118 * return NGA_Create_irreg_config64(gtype, len(dims_nd), * dims_nd.data, name, * block_nd.data, map_nd.data, pgroup) # <<<<<<<<<<<<<< * * def create_ghosts_irreg(int gtype, dims, width, block, map, char *name="", */ __pyx_t_7 = PyInt_FromLong(NGA_Create_irreg_config64(__pyx_v_gtype, __pyx_t_8, ((int64_t *)__pyx_v_dims_nd->data), __pyx_v_name, ((int64_t *)__pyx_v_block_nd->data), ((int64_t *)__pyx_v_map_nd->data), __pyx_v_pgroup)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_r = __pyx_t_7; __pyx_t_7 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_7); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_block_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_map_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.create_irreg", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_block_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_map_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_dims_nd); __Pyx_XDECREF((PyObject *)__pyx_v_block_nd); __Pyx_XDECREF((PyObject *)__pyx_v_map_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_57create_ghosts_irreg(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_56create_ghosts_irreg[] = "create_ghosts_irreg(int gtype, dims, width, block, map, char *name='', int pgroup=-1)\nCreates an array with a layer of ghost cells around the visible data.\n\n The distribution is specified as a Cartesian product of distributions for\n each dimension. For example, the following figure demonstrates\n distribution of a 2-dimensional array 8x10 on 6 (or more) processors.\n nblock(2)=[3,2], the size of map array is s=5 and array map contains the\n following elements map=[1,3,7, 1, 6]. The distribution is nonuniform\n because, P1 and P4 get 20 elements each and processors P0,P2,P3, and P5\n only 10 elements each. \n\n The array width[] is used to control the width of the ghost cell boundary\n around the visible data on each processor. The local data of the global\n array residing on each processor will have a layer width[n] ghosts cells\n wide on either side of the visible data along the dimension n.\n\n This is a collective operation. \n\n :Parameters:\n gtype : int\n the type of the array\n dims : 1D array-like of integers\n shape of the array\n width : 1D array-like of integers\n ghost cell widths\n block : 1D array-like of integers\n number of blocks each dimension is divided into\n map : 1D array-like of integers\n starting index for each block\n len(map) == sum of all elements of nblock array\n name : string\n the name of the array\n pgroup : int\n create array only as part of this processor group\n \n :returns: a non-zero array handle means the call was succesful\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_57create_ghosts_irreg = {__Pyx_NAMESTR("create_ghosts_irreg"), (PyCFunction)__pyx_pw_5ga4py_2ga_57create_ghosts_irreg, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_56create_ghosts_irreg)}; static PyObject *__pyx_pw_5ga4py_2ga_57create_ghosts_irreg(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_gtype; PyObject *__pyx_v_dims = 0; PyObject *__pyx_v_width = 0; PyObject *__pyx_v_block = 0; PyObject *__pyx_v_map = 0; char *__pyx_v_name; int __pyx_v_pgroup; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_ghosts_irreg (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__gtype,&__pyx_n_s__dims,&__pyx_n_s__width,&__pyx_n_s__block,&__pyx_n_s__map,&__pyx_n_s__name,&__pyx_n_s__pgroup,0}; PyObject* values[7] = {0,0,0,0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__gtype)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dims)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("create_ghosts_irreg", 0, 5, 7, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__width)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("create_ghosts_irreg", 0, 5, 7, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__block)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("create_ghosts_irreg", 0, 5, 7, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__map)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("create_ghosts_irreg", 0, 5, 7, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name); if (value) { values[5] = value; kw_args--; } } case 6: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup); if (value) { values[6] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_ghosts_irreg") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_gtype = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_gtype == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_dims = values[1]; __pyx_v_width = values[2]; __pyx_v_block = values[3]; __pyx_v_map = values[4]; if (values[5]) { __pyx_v_name = __Pyx_PyObject_AsString(values[5]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_name = ((char *)__pyx_k_16); } if (values[6]) { __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[6]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1121; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_pgroup = ((int)-1); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("create_ghosts_irreg", 0, 5, 7, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.create_ghosts_irreg", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_56create_ghosts_irreg(__pyx_self, __pyx_v_gtype, __pyx_v_dims, __pyx_v_width, __pyx_v_block, __pyx_v_map, __pyx_v_name, __pyx_v_pgroup); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1120 * block_nd.data, map_nd.data, pgroup) * * def create_ghosts_irreg(int gtype, dims, width, block, map, char *name="", # <<<<<<<<<<<<<< * int pgroup=-1): * """Creates an array with a layer of ghost cells around the visible data. */ static PyObject *__pyx_pf_5ga4py_2ga_56create_ghosts_irreg(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_gtype, PyObject *__pyx_v_dims, PyObject *__pyx_v_width, PyObject *__pyx_v_block, PyObject *__pyx_v_map, char *__pyx_v_name, int __pyx_v_pgroup) { PyArrayObject *__pyx_v_dims_nd = 0; PyArrayObject *__pyx_v_width_nd = 0; PyArrayObject *__pyx_v_block_nd = 0; PyArrayObject *__pyx_v_map_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_block_nd; __Pyx_Buffer __pyx_pybuffer_block_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_dims_nd; __Pyx_Buffer __pyx_pybuffer_dims_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_map_nd; __Pyx_Buffer __pyx_pybuffer_map_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_width_nd; __Pyx_Buffer __pyx_pybuffer_width_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_t_6; PyObject *__pyx_t_7 = NULL; Py_ssize_t __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("create_ghosts_irreg", 0); __pyx_pybuffer_dims_nd.pybuffer.buf = NULL; __pyx_pybuffer_dims_nd.refcount = 0; __pyx_pybuffernd_dims_nd.data = NULL; __pyx_pybuffernd_dims_nd.rcbuffer = &__pyx_pybuffer_dims_nd; __pyx_pybuffer_width_nd.pybuffer.buf = NULL; __pyx_pybuffer_width_nd.refcount = 0; __pyx_pybuffernd_width_nd.data = NULL; __pyx_pybuffernd_width_nd.rcbuffer = &__pyx_pybuffer_width_nd; __pyx_pybuffer_block_nd.pybuffer.buf = NULL; __pyx_pybuffer_block_nd.refcount = 0; __pyx_pybuffernd_block_nd.data = NULL; __pyx_pybuffernd_block_nd.rcbuffer = &__pyx_pybuffer_block_nd; __pyx_pybuffer_map_nd.pybuffer.buf = NULL; __pyx_pybuffer_map_nd.refcount = 0; __pyx_pybuffernd_map_nd.data = NULL; __pyx_pybuffernd_map_nd.rcbuffer = &__pyx_pybuffer_map_nd; /* "ga4py/ga.pyx":1160 * """ * cdef np.ndarray[np.int64_t, ndim=1] dims_nd, width_nd, block_nd, map_nd * dims_nd = _inta64(dims) # <<<<<<<<<<<<<< * width_nd = _inta64(width) * block_nd = _inta64(block) */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_dims)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_dims_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_dims_nd.diminfo[0].strides = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dims_nd.diminfo[0].shape = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_dims_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":1161 * cdef np.ndarray[np.int64_t, ndim=1] dims_nd, width_nd, block_nd, map_nd * dims_nd = _inta64(dims) * width_nd = _inta64(width) # <<<<<<<<<<<<<< * block_nd = _inta64(block) * map_nd = _inta64(map) */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_width)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_width_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_width_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_width_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_width_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_3); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_4, __pyx_t_3); } } __pyx_pybuffernd_width_nd.diminfo[0].strides = __pyx_pybuffernd_width_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_width_nd.diminfo[0].shape = __pyx_pybuffernd_width_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_width_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":1162 * dims_nd = _inta64(dims) * width_nd = _inta64(width) * block_nd = _inta64(block) # <<<<<<<<<<<<<< * map_nd = _inta64(map) * if pgroup < 0: */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_block)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_block_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_block_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_block_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_block_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_block_nd.diminfo[0].strides = __pyx_pybuffernd_block_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_block_nd.diminfo[0].shape = __pyx_pybuffernd_block_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_block_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":1163 * width_nd = _inta64(width) * block_nd = _inta64(block) * map_nd = _inta64(map) # <<<<<<<<<<<<<< * if pgroup < 0: * pgroup = pgroup_get_default() */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_map)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_map_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_map_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_map_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_map_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_3); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_4, __pyx_t_3); } } __pyx_pybuffernd_map_nd.diminfo[0].strides = __pyx_pybuffernd_map_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_map_nd.diminfo[0].shape = __pyx_pybuffernd_map_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_map_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":1164 * block_nd = _inta64(block) * map_nd = _inta64(map) * if pgroup < 0: # <<<<<<<<<<<<<< * pgroup = pgroup_get_default() * return NGA_Create_ghosts_irreg_config64(gtype, len(dims_nd), */ __pyx_t_6 = ((__pyx_v_pgroup < 0) != 0); if (__pyx_t_6) { /* "ga4py/ga.pyx":1165 * map_nd = _inta64(map) * if pgroup < 0: * pgroup = pgroup_get_default() # <<<<<<<<<<<<<< * return NGA_Create_ghosts_irreg_config64(gtype, len(dims_nd), * dims_nd.data, width_nd.data, name, */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__pgroup_get_default); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __Pyx_PyInt_AsInt(__pyx_t_7); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_pgroup = __pyx_t_2; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":1166 * if pgroup < 0: * pgroup = pgroup_get_default() * return NGA_Create_ghosts_irreg_config64(gtype, len(dims_nd), # <<<<<<<<<<<<<< * dims_nd.data, width_nd.data, name, * block_nd.data, map_nd.data, pgroup) */ __Pyx_XDECREF(__pyx_r); __pyx_t_8 = PyObject_Length(((PyObject *)__pyx_v_dims_nd)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1168 * return NGA_Create_ghosts_irreg_config64(gtype, len(dims_nd), * dims_nd.data, width_nd.data, name, * block_nd.data, map_nd.data, pgroup) # <<<<<<<<<<<<<< * * def create_mutexes(int number): */ __pyx_t_7 = PyInt_FromLong(NGA_Create_ghosts_irreg_config64(__pyx_v_gtype, __pyx_t_8, ((int64_t *)__pyx_v_dims_nd->data), ((int64_t *)__pyx_v_width_nd->data), __pyx_v_name, ((int64_t *)__pyx_v_block_nd->data), ((int64_t *)__pyx_v_map_nd->data), __pyx_v_pgroup)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_r = __pyx_t_7; __pyx_t_7 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_7); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_block_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_map_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_width_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.create_ghosts_irreg", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_block_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_map_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_width_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_dims_nd); __Pyx_XDECREF((PyObject *)__pyx_v_width_nd); __Pyx_XDECREF((PyObject *)__pyx_v_block_nd); __Pyx_XDECREF((PyObject *)__pyx_v_map_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_59create_mutexes(PyObject *__pyx_self, PyObject *__pyx_arg_number); /*proto*/ static char __pyx_doc_5ga4py_2ga_58create_mutexes[] = "create_mutexes(int number)\nCreates a set containing the number of mutexes.\n\n Mutex is a simple synchronization object used to protect Critical\n Sections. Only one set of mutexes can exist at a time. Array of mutexes\n can be created and destroyed as many times as needed.\n\n Mutexes are numbered: 0, ..., number -1.\n\n This is a collective operation. \n\n :Parameters:\n number : int\n the number of mutexes to create\n\n :returns: True on success, False on failure\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_59create_mutexes = {__Pyx_NAMESTR("create_mutexes"), (PyCFunction)__pyx_pw_5ga4py_2ga_59create_mutexes, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_58create_mutexes)}; static PyObject *__pyx_pw_5ga4py_2ga_59create_mutexes(PyObject *__pyx_self, PyObject *__pyx_arg_number) { int __pyx_v_number; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("create_mutexes (wrapper)", 0); assert(__pyx_arg_number); { __pyx_v_number = __Pyx_PyInt_AsInt(__pyx_arg_number); if (unlikely((__pyx_v_number == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1170; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.create_mutexes", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_58create_mutexes(__pyx_self, ((int)__pyx_v_number)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1170 * block_nd.data, map_nd.data, pgroup) * * def create_mutexes(int number): # <<<<<<<<<<<<<< * """Creates a set containing the number of mutexes. * */ static PyObject *__pyx_pf_5ga4py_2ga_58create_mutexes(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_number) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("create_mutexes", 0); /* "ga4py/ga.pyx":1188 * * """ * if GA_Create_mutexes(number) == 1: # <<<<<<<<<<<<<< * return True * return False */ __pyx_t_1 = ((GA_Create_mutexes(__pyx_v_number) == 1) != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":1189 * """ * if GA_Create_mutexes(number) == 1: * return True # <<<<<<<<<<<<<< * return False * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":1190 * if GA_Create_mutexes(number) == 1: * return True * return False # <<<<<<<<<<<<<< * * def deregister_type(int type): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.ga.create_mutexes", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_61deregister_type(PyObject *__pyx_self, PyObject *__pyx_arg_type); /*proto*/ static char __pyx_doc_5ga4py_2ga_60deregister_type[] = "deregister_type(int type)\nRemoves the data type previously registered using register_type.\n\n :Parameters:\n type : int\n the data type handle\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_61deregister_type = {__Pyx_NAMESTR("deregister_type"), (PyCFunction)__pyx_pw_5ga4py_2ga_61deregister_type, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_60deregister_type)}; static PyObject *__pyx_pw_5ga4py_2ga_61deregister_type(PyObject *__pyx_self, PyObject *__pyx_arg_type) { int __pyx_v_type; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("deregister_type (wrapper)", 0); assert(__pyx_arg_type); { __pyx_v_type = __Pyx_PyInt_AsInt(__pyx_arg_type); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1192; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.deregister_type", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_60deregister_type(__pyx_self, ((int)__pyx_v_type)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1192 * return False * * def deregister_type(int type): # <<<<<<<<<<<<<< * """Removes the data type previously registered using register_type. * */ static PyObject *__pyx_pf_5ga4py_2ga_60deregister_type(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_type) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("deregister_type", 0); /* "ga4py/ga.pyx":1200 * * """ * return NGA_Deregister_type(type) # <<<<<<<<<<<<<< * * def destroy(int g_a): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(NGA_Deregister_type(__pyx_v_type)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.deregister_type", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_63destroy(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_62destroy[] = "destroy(int g_a)\nDeallocates the array and frees any associated resources.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_63destroy = {__Pyx_NAMESTR("destroy"), (PyCFunction)__pyx_pw_5ga4py_2ga_63destroy, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_62destroy)}; static PyObject *__pyx_pw_5ga4py_2ga_63destroy(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("destroy (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1202; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_62destroy(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1202 * return NGA_Deregister_type(type) * * def destroy(int g_a): # <<<<<<<<<<<<<< * """Deallocates the array and frees any associated resources. * */ static PyObject *__pyx_pf_5ga4py_2ga_62destroy(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("destroy", 0); /* "ga4py/ga.pyx":1208 * * """ * GA_Destroy(g_a) # <<<<<<<<<<<<<< * * def destroy_mutexes(): */ GA_Destroy(__pyx_v_g_a); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_65destroy_mutexes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_64destroy_mutexes[] = "destroy_mutexes()\nDestroys the set of mutexes created with ga_create_mutexes.\n \n :returns: True if the operation succeeded; False when failed\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_65destroy_mutexes = {__Pyx_NAMESTR("destroy_mutexes"), (PyCFunction)__pyx_pw_5ga4py_2ga_65destroy_mutexes, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_64destroy_mutexes)}; static PyObject *__pyx_pw_5ga4py_2ga_65destroy_mutexes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("destroy_mutexes (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_64destroy_mutexes(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1210 * GA_Destroy(g_a) * * def destroy_mutexes(): # <<<<<<<<<<<<<< * """Destroys the set of mutexes created with ga_create_mutexes. * */ static PyObject *__pyx_pf_5ga4py_2ga_64destroy_mutexes(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("destroy_mutexes", 0); /* "ga4py/ga.pyx":1218 * * """ * if GA_Destroy_mutexes() == 1: # <<<<<<<<<<<<<< * return True * return False */ __pyx_t_1 = ((GA_Destroy_mutexes() == 1) != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":1219 * """ * if GA_Destroy_mutexes() == 1: * return True # <<<<<<<<<<<<<< * return False * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":1220 * if GA_Destroy_mutexes() == 1: * return True * return False # <<<<<<<<<<<<<< * * def diag(int g_a, int g_s, int g_v, evalues=None): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.ga.destroy_mutexes", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_67diag(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_66diag[] = "diag(int g_a, int g_s, int g_v, evalues=None)\nSolve the generalized eigen-value problem.\n\n The input matrices are not overwritten or destroyed.\n \n :Parameters:\n g_a : int\n the array handle of the matrix to diagonalize\n g_s : int\n the array handle of the metric\n g_v : int\n the array handle to return evecs\n\n :returns: All eigen-values as an ndarray in ascending order.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_67diag = {__Pyx_NAMESTR("diag"), (PyCFunction)__pyx_pw_5ga4py_2ga_67diag, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_66diag)}; static PyObject *__pyx_pw_5ga4py_2ga_67diag(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_s; int __pyx_v_g_v; PyObject *__pyx_v_evalues = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("diag (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_s,&__pyx_n_s__g_v,&__pyx_n_s__evalues,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/ga.pyx":1222 * return False * * def diag(int g_a, int g_s, int g_v, evalues=None): # <<<<<<<<<<<<<< * """Solve the generalized eigen-value problem. * */ values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_s)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("diag", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_v)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("diag", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__evalues); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "diag") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_s = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_s == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_v = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_g_v == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_evalues = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("diag", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.diag", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_66diag(__pyx_self, __pyx_v_g_a, __pyx_v_g_s, __pyx_v_g_v, __pyx_v_evalues); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_66diag(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_s, int __pyx_v_g_v, PyObject *__pyx_v_evalues) { PyObject *__pyx_v_gtype = NULL; PyObject *__pyx_v_dims = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *(*__pyx_t_7)(PyObject *); PyObject *__pyx_t_8 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("diag", 0); __Pyx_INCREF(__pyx_v_evalues); /* "ga4py/ga.pyx":1240 * * """ * if evalues is None: # <<<<<<<<<<<<<< * gtype,dims = inquire(g_a) * evalues = np.ndarray((dims[0]), dtype=_to_dtype(gtype)) */ __pyx_t_1 = (__pyx_v_evalues == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/ga.pyx":1241 * """ * if evalues is None: * gtype,dims = inquire(g_a) # <<<<<<<<<<<<<< * evalues = np.ndarray((dims[0]), dtype=_to_dtype(gtype)) * else: */ __pyx_t_3 = __pyx_f_5ga4py_2ga_inquire(__pyx_v_g_a, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_5 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } __pyx_v_gtype = __pyx_t_4; __pyx_t_4 = 0; __pyx_v_dims = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/ga.pyx":1242 * if evalues is None: * gtype,dims = inquire(g_a) * evalues = np.ndarray((dims[0]), dtype=_to_dtype(gtype)) # <<<<<<<<<<<<<< * else: * evalues = np.asarray(evalues) */ __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_dims, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_gtype); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_gtype); __Pyx_GIVEREF(__pyx_v_gtype); __pyx_t_8 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray)), ((PyObject *)__pyx_t_5), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_evalues, __pyx_t_8); __pyx_t_8 = 0; goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":1244 * evalues = np.ndarray((dims[0]), dtype=_to_dtype(gtype)) * else: * evalues = np.asarray(evalues) # <<<<<<<<<<<<<< * GA_Diag(g_a, g_s, g_v, evalues.data) * return evalues */ __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__asarray); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_v_evalues); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_evalues); __Pyx_GIVEREF(__pyx_v_evalues); __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __Pyx_DECREF_SET(__pyx_v_evalues, __pyx_t_5); __pyx_t_5 = 0; } __pyx_L3:; /* "ga4py/ga.pyx":1245 * else: * evalues = np.asarray(evalues) * GA_Diag(g_a, g_s, g_v, evalues.data) # <<<<<<<<<<<<<< * return evalues * */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_evalues, __pyx_n_s__data); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); GA_Diag(__pyx_v_g_a, __pyx_v_g_s, __pyx_v_g_v, ((void *)__pyx_t_5)); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/ga.pyx":1246 * evalues = np.asarray(evalues) * GA_Diag(g_a, g_s, g_v, evalues.data) * return evalues # <<<<<<<<<<<<<< * * def diag_reuse(int control, int g_a, int g_s, int g_v, evalues=None): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_evalues); __pyx_r = __pyx_v_evalues; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("ga4py.ga.diag", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_gtype); __Pyx_XDECREF(__pyx_v_dims); __Pyx_XDECREF(__pyx_v_evalues); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_69diag_reuse(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_68diag_reuse[] = "diag_reuse(int control, int g_a, int g_s, int g_v, evalues=None)\nSolve the generalized eigen-value problem.\n\n Recommended for REPEATED calls if g_s is unchanged.\n The input matrices are not overwritten or destroyed.\n \n :Parameters:\n control : int\n 0 indicates first call to the eigensolver;\n >0 consecutive calls (reuses factored g_s);\n <0 only erases factorized g_s; g_v and eval unchanged\n (should be called after previous use if another\n eigenproblem, i.e., different g_a and g_s, is to\n be solved) \n g_a : int\n the array handle of the matrix to diagonalize\n g_s : int\n the array handle of the metric\n g_v : int\n the array handle to return evecs\n\n :returns: All eigen-values as an ndarray in ascending order.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_69diag_reuse = {__Pyx_NAMESTR("diag_reuse"), (PyCFunction)__pyx_pw_5ga4py_2ga_69diag_reuse, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_68diag_reuse)}; static PyObject *__pyx_pw_5ga4py_2ga_69diag_reuse(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_control; int __pyx_v_g_a; int __pyx_v_g_s; int __pyx_v_g_v; PyObject *__pyx_v_evalues = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("diag_reuse (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__control,&__pyx_n_s__g_a,&__pyx_n_s__g_s,&__pyx_n_s__g_v,&__pyx_n_s__evalues,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/ga.pyx":1248 * return evalues * * def diag_reuse(int control, int g_a, int g_s, int g_v, evalues=None): # <<<<<<<<<<<<<< * """Solve the generalized eigen-value problem. * */ values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__control)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("diag_reuse", 0, 4, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_s)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("diag_reuse", 0, 4, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_v)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("diag_reuse", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__evalues); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "diag_reuse") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_control = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_control == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_a = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_s = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_g_s == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_v = __Pyx_PyInt_AsInt(values[3]); if (unlikely((__pyx_v_g_v == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_evalues = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("diag_reuse", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.diag_reuse", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_68diag_reuse(__pyx_self, __pyx_v_control, __pyx_v_g_a, __pyx_v_g_s, __pyx_v_g_v, __pyx_v_evalues); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_68diag_reuse(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_control, int __pyx_v_g_a, int __pyx_v_g_s, int __pyx_v_g_v, PyObject *__pyx_v_evalues) { PyObject *__pyx_v_gtype = NULL; PyObject *__pyx_v_dims = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *(*__pyx_t_7)(PyObject *); PyObject *__pyx_t_8 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("diag_reuse", 0); __Pyx_INCREF(__pyx_v_evalues); /* "ga4py/ga.pyx":1274 * * """ * if evalues is None: # <<<<<<<<<<<<<< * gtype,dims = inquire(g_a) * evalues = np.ndarray((dims[0]), dtype=_to_dtype(gtype)) */ __pyx_t_1 = (__pyx_v_evalues == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/ga.pyx":1275 * """ * if evalues is None: * gtype,dims = inquire(g_a) # <<<<<<<<<<<<<< * evalues = np.ndarray((dims[0]), dtype=_to_dtype(gtype)) * else: */ __pyx_t_3 = __pyx_f_5ga4py_2ga_inquire(__pyx_v_g_a, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_5 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } __pyx_v_gtype = __pyx_t_4; __pyx_t_4 = 0; __pyx_v_dims = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/ga.pyx":1276 * if evalues is None: * gtype,dims = inquire(g_a) * evalues = np.ndarray((dims[0]), dtype=_to_dtype(gtype)) # <<<<<<<<<<<<<< * else: * evalues = np.asarray(evalues) */ __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_dims, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_gtype); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_gtype); __Pyx_GIVEREF(__pyx_v_gtype); __pyx_t_8 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray)), ((PyObject *)__pyx_t_5), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_evalues, __pyx_t_8); __pyx_t_8 = 0; goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":1278 * evalues = np.ndarray((dims[0]), dtype=_to_dtype(gtype)) * else: * evalues = np.asarray(evalues) # <<<<<<<<<<<<<< * GA_Diag_reuse(control, g_a, g_s, g_v, evalues.data) * return evalues */ __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__asarray); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_v_evalues); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_evalues); __Pyx_GIVEREF(__pyx_v_evalues); __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __Pyx_DECREF_SET(__pyx_v_evalues, __pyx_t_5); __pyx_t_5 = 0; } __pyx_L3:; /* "ga4py/ga.pyx":1279 * else: * evalues = np.asarray(evalues) * GA_Diag_reuse(control, g_a, g_s, g_v, evalues.data) # <<<<<<<<<<<<<< * return evalues * */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_evalues, __pyx_n_s__data); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); GA_Diag_reuse(__pyx_v_control, __pyx_v_g_a, __pyx_v_g_s, __pyx_v_g_v, ((void *)__pyx_t_5)); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/ga.pyx":1280 * evalues = np.asarray(evalues) * GA_Diag_reuse(control, g_a, g_s, g_v, evalues.data) * return evalues # <<<<<<<<<<<<<< * * def diag_std(int g_a, int g_v, evalues=None): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_evalues); __pyx_r = __pyx_v_evalues; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("ga4py.ga.diag_reuse", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_gtype); __Pyx_XDECREF(__pyx_v_dims); __Pyx_XDECREF(__pyx_v_evalues); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_71diag_std(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_70diag_std[] = "diag_std(int g_a, int g_v, evalues=None)\nSolve the standard (non-generalized) eigenvalue problem.\n\n The input matrix is neither overwritten nor destroyed.\n \n :Parameters:\n g_a : int\n the array handle of the matrix to diagonalize\n g_v : int\n the array handle to return evecs\n\n :returns: all eigenvectors via the g_v global array, and eigenvalues as an ndarray in ascending order\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_71diag_std = {__Pyx_NAMESTR("diag_std"), (PyCFunction)__pyx_pw_5ga4py_2ga_71diag_std, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_70diag_std)}; static PyObject *__pyx_pw_5ga4py_2ga_71diag_std(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_v; PyObject *__pyx_v_evalues = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("diag_std (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_v,&__pyx_n_s__evalues,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/ga.pyx":1282 * return evalues * * def diag_std(int g_a, int g_v, evalues=None): # <<<<<<<<<<<<<< * """Solve the standard (non-generalized) eigenvalue problem. * */ values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_v)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("diag_std", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__evalues); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "diag_std") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_v = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_v == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_evalues = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("diag_std", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.diag_std", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_70diag_std(__pyx_self, __pyx_v_g_a, __pyx_v_g_v, __pyx_v_evalues); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_70diag_std(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_v, PyObject *__pyx_v_evalues) { PyObject *__pyx_v_gtype = NULL; PyObject *__pyx_v_dims = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *(*__pyx_t_7)(PyObject *); PyObject *__pyx_t_8 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("diag_std", 0); __Pyx_INCREF(__pyx_v_evalues); /* "ga4py/ga.pyx":1298 * * """ * if evalues is None: # <<<<<<<<<<<<<< * gtype,dims = inquire(g_a) * evalues = np.ndarray((dims[0]), dtype=_to_dtype(gtype)) */ __pyx_t_1 = (__pyx_v_evalues == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/ga.pyx":1299 * """ * if evalues is None: * gtype,dims = inquire(g_a) # <<<<<<<<<<<<<< * evalues = np.ndarray((dims[0]), dtype=_to_dtype(gtype)) * else: */ __pyx_t_3 = __pyx_f_5ga4py_2ga_inquire(__pyx_v_g_a, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_5 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } __pyx_v_gtype = __pyx_t_4; __pyx_t_4 = 0; __pyx_v_dims = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/ga.pyx":1300 * if evalues is None: * gtype,dims = inquire(g_a) * evalues = np.ndarray((dims[0]), dtype=_to_dtype(gtype)) # <<<<<<<<<<<<<< * else: * evalues = np.asarray(evalues) */ __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_dims, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_gtype); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_gtype); __Pyx_GIVEREF(__pyx_v_gtype); __pyx_t_8 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray)), ((PyObject *)__pyx_t_5), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_evalues, __pyx_t_8); __pyx_t_8 = 0; goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":1302 * evalues = np.ndarray((dims[0]), dtype=_to_dtype(gtype)) * else: * evalues = np.asarray(evalues) # <<<<<<<<<<<<<< * GA_Diag_std(g_a, g_v, evalues.data) * return evalues */ __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__asarray); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_v_evalues); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_evalues); __Pyx_GIVEREF(__pyx_v_evalues); __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __Pyx_DECREF_SET(__pyx_v_evalues, __pyx_t_5); __pyx_t_5 = 0; } __pyx_L3:; /* "ga4py/ga.pyx":1303 * else: * evalues = np.asarray(evalues) * GA_Diag_std(g_a, g_v, evalues.data) # <<<<<<<<<<<<<< * return evalues * */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_evalues, __pyx_n_s__data); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); GA_Diag_std(__pyx_v_g_a, __pyx_v_g_v, ((void *)__pyx_t_5)); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/ga.pyx":1304 * evalues = np.asarray(evalues) * GA_Diag_std(g_a, g_v, evalues.data) * return evalues # <<<<<<<<<<<<<< * * cpdef distribution(int g_a, int proc=-1): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_evalues); __pyx_r = __pyx_v_evalues; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("ga4py.ga.diag_std", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_gtype); __Pyx_XDECREF(__pyx_v_dims); __Pyx_XDECREF(__pyx_v_evalues); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1306 * return evalues * * cpdef distribution(int g_a, int proc=-1): # <<<<<<<<<<<<<< * """Return the distribution given to proc. * */ static PyObject *__pyx_pw_5ga4py_2ga_73distribution(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_f_5ga4py_2ga_distribution(int __pyx_v_g_a, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5ga4py_2ga_distribution *__pyx_optional_args) { int __pyx_v_proc = ((int)-1); int __pyx_v_ndim; PyArrayObject *__pyx_v_lo = 0; PyArrayObject *__pyx_v_hi = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi; __Pyx_Buffer __pyx_pybuffer_hi; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo; __Pyx_Buffer __pyx_pybuffer_lo; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyArrayObject *__pyx_t_6 = NULL; PyArrayObject *__pyx_t_7 = NULL; int __pyx_t_8; int __pyx_t_9; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("distribution", 0); if (__pyx_optional_args) { if (__pyx_optional_args->__pyx_n > 0) { __pyx_v_proc = __pyx_optional_args->proc; } } __pyx_pybuffer_lo.pybuffer.buf = NULL; __pyx_pybuffer_lo.refcount = 0; __pyx_pybuffernd_lo.data = NULL; __pyx_pybuffernd_lo.rcbuffer = &__pyx_pybuffer_lo; __pyx_pybuffer_hi.pybuffer.buf = NULL; __pyx_pybuffer_hi.refcount = 0; __pyx_pybuffernd_hi.data = NULL; __pyx_pybuffernd_hi.rcbuffer = &__pyx_pybuffer_hi; /* "ga4py/ga.pyx":1314 * * """ * cdef int ndim = GA_Ndim(g_a) # <<<<<<<<<<<<<< * cdef np.ndarray[np.int64_t, ndim=1] lo = np.zeros((ndim), dtype=np.int64) * cdef np.ndarray[np.int64_t, ndim=1] hi = np.zeros((ndim), dtype=np.int64) */ __pyx_v_ndim = GA_Ndim(__pyx_v_g_a); /* "ga4py/ga.pyx":1315 * """ * cdef int ndim = GA_Ndim(g_a) * cdef np.ndarray[np.int64_t, ndim=1] lo = np.zeros((ndim), dtype=np.int64) # <<<<<<<<<<<<<< * cdef np.ndarray[np.int64_t, ndim=1] hi = np.zeros((ndim), dtype=np.int64) * if proc < 0: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__zeros); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyInt_FromLong(__pyx_v_ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__int64); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { __pyx_v_lo = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_lo.rcbuffer->pybuffer.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_pybuffernd_lo.diminfo[0].strides = __pyx_pybuffernd_lo.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo.diminfo[0].shape = __pyx_pybuffernd_lo.rcbuffer->pybuffer.shape[0]; } } __pyx_t_6 = 0; __pyx_v_lo = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/ga.pyx":1316 * cdef int ndim = GA_Ndim(g_a) * cdef np.ndarray[np.int64_t, ndim=1] lo = np.zeros((ndim), dtype=np.int64) * cdef np.ndarray[np.int64_t, ndim=1] hi = np.zeros((ndim), dtype=np.int64) # <<<<<<<<<<<<<< * if proc < 0: * proc = GA_Nodeid() */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__zeros); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyInt_FromLong(__pyx_v_ndim); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int64); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { __pyx_v_hi = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_hi.rcbuffer->pybuffer.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_pybuffernd_hi.diminfo[0].strides = __pyx_pybuffernd_hi.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi.diminfo[0].shape = __pyx_pybuffernd_hi.rcbuffer->pybuffer.shape[0]; } } __pyx_t_7 = 0; __pyx_v_hi = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1317 * cdef np.ndarray[np.int64_t, ndim=1] lo = np.zeros((ndim), dtype=np.int64) * cdef np.ndarray[np.int64_t, ndim=1] hi = np.zeros((ndim), dtype=np.int64) * if proc < 0: # <<<<<<<<<<<<<< * proc = GA_Nodeid() * NGA_Distribution64(g_a, proc, lo.data, hi.data) */ __pyx_t_8 = ((__pyx_v_proc < 0) != 0); if (__pyx_t_8) { /* "ga4py/ga.pyx":1318 * cdef np.ndarray[np.int64_t, ndim=1] hi = np.zeros((ndim), dtype=np.int64) * if proc < 0: * proc = GA_Nodeid() # <<<<<<<<<<<<<< * NGA_Distribution64(g_a, proc, lo.data, hi.data) * # convert hi to python exclusive indexing convetion */ __pyx_v_proc = GA_Nodeid(); goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":1319 * if proc < 0: * proc = GA_Nodeid() * NGA_Distribution64(g_a, proc, lo.data, hi.data) # <<<<<<<<<<<<<< * # convert hi to python exclusive indexing convetion * hi += 1 */ NGA_Distribution64(__pyx_v_g_a, __pyx_v_proc, ((int64_t *)__pyx_v_lo->data), ((int64_t *)__pyx_v_hi->data)); /* "ga4py/ga.pyx":1321 * NGA_Distribution64(g_a, proc, lo.data, hi.data) * # convert hi to python exclusive indexing convetion * hi += 1 # <<<<<<<<<<<<<< * return lo,hi * */ __pyx_t_4 = PyNumber_InPlaceAdd(((PyObject *)__pyx_v_hi), __pyx_int_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_11, __pyx_t_12); } } __pyx_pybuffernd_hi.diminfo[0].strides = __pyx_pybuffernd_hi.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi.diminfo[0].shape = __pyx_pybuffernd_hi.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_7 = 0; __Pyx_DECREF_SET(__pyx_v_hi, ((PyArrayObject *)__pyx_t_4)); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1322 * # convert hi to python exclusive indexing convetion * hi += 1 * return lo,hi # <<<<<<<<<<<<<< * * def dot(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None, */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(((PyObject *)__pyx_v_lo)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_lo)); __Pyx_GIVEREF(((PyObject *)__pyx_v_lo)); __Pyx_INCREF(((PyObject *)__pyx_v_hi)); PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_hi)); __Pyx_GIVEREF(((PyObject *)__pyx_v_hi)); __pyx_r = ((PyObject *)__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.distribution", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_lo); __Pyx_XDECREF((PyObject *)__pyx_v_hi); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_73distribution(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_72distribution[] = "distribution(int g_a, int proc=-1)\nReturn the distribution given to proc.\n\n If proc is not specified, then ga.nodeid() is used. The range is\n returned as -1 for lo and -2 for hi if no elements are owned by\n proc.\n \n "; static PyObject *__pyx_pw_5ga4py_2ga_73distribution(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_proc; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("distribution (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__proc,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__proc); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "distribution") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1306; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1306; __pyx_clineno = __LINE__; goto __pyx_L3_error;} if (values[1]) { __pyx_v_proc = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_proc == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1306; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_proc = ((int)-1); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("distribution", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1306; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.distribution", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_72distribution(__pyx_self, __pyx_v_g_a, __pyx_v_proc); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1306 * return evalues * * cpdef distribution(int g_a, int proc=-1): # <<<<<<<<<<<<<< * """Return the distribution given to proc. * */ static PyObject *__pyx_pf_5ga4py_2ga_72distribution(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_proc) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; struct __pyx_opt_args_5ga4py_2ga_distribution __pyx_t_2; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("distribution", 0); __Pyx_XDECREF(__pyx_r); __pyx_t_2.__pyx_n = 1; __pyx_t_2.proc = __pyx_v_proc; __pyx_t_1 = __pyx_f_5ga4py_2ga_distribution(__pyx_v_g_a, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.distribution", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_75dot(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_74dot[] = "dot(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None, bool ta=False, bool tb=False)\nComputes the element-wise dot product of two arrays.\n\n Arrays must be of the same type and same number of elements.\n Patch operation allows for possibly transposed patches.\n\n This is a collective operation.\n\n :Parameters:\n g_a : int\n the array handle\n g_b : int\n the array handle\n alo : 1D array-like of integers\n lower bound patch coordinates of g_a, inclusive\n ahi : 1D array-like of integers\n higher bound patch coordinates of g_a, exclusive\n blo : 1D array-like of integers\n lower bound patch coordinates of g_b, inclusive\n bhi : 1D array-like of integers\n higher bound patch coordinates of g_b, exclusive\n ta : bool\n whether the transpose operator should be applied to g_a True=applied\n tb : bool\n whether the transpose operator should be applied to g_b True=applied\n\n :returns: SUM_ij a(i,j)*b(i,j)\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_75dot = {__Pyx_NAMESTR("dot"), (PyCFunction)__pyx_pw_5ga4py_2ga_75dot, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_74dot)}; static PyObject *__pyx_pw_5ga4py_2ga_75dot(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_b; PyObject *__pyx_v_alo = 0; PyObject *__pyx_v_ahi = 0; PyObject *__pyx_v_blo = 0; PyObject *__pyx_v_bhi = 0; int __pyx_v_ta; int __pyx_v_tb; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("dot (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_b,&__pyx_n_s__alo,&__pyx_n_s__ahi,&__pyx_n_s__blo,&__pyx_n_s__bhi,&__pyx_n_s__ta,&__pyx_n_s__tb,0}; PyObject* values[8] = {0,0,0,0,0,0,0,0}; /* "ga4py/ga.pyx":1324 * return lo,hi * * def dot(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None, # <<<<<<<<<<<<<< * bint ta=False, bint tb=False): * """Computes the element-wise dot product of two arrays. */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); values[5] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("dot", 0, 2, 8, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alo); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ahi); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__blo); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bhi); if (value) { values[5] = value; kw_args--; } } case 6: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ta); if (value) { values[6] = value; kw_args--; } } case 7: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__tb); if (value) { values[7] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dot") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_b = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_alo = values[2]; __pyx_v_ahi = values[3]; __pyx_v_blo = values[4]; __pyx_v_bhi = values[5]; if (values[6]) { __pyx_v_ta = __Pyx_PyObject_IsTrue(values[6]); if (unlikely((__pyx_v_ta == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1325; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { /* "ga4py/ga.pyx":1325 * * def dot(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None, * bint ta=False, bint tb=False): # <<<<<<<<<<<<<< * """Computes the element-wise dot product of two arrays. * */ __pyx_v_ta = ((int)0); } if (values[7]) { __pyx_v_tb = __Pyx_PyObject_IsTrue(values[7]); if (unlikely((__pyx_v_tb == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1325; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_tb = ((int)0); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("dot", 0, 2, 8, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.dot", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_74dot(__pyx_self, __pyx_v_g_a, __pyx_v_g_b, __pyx_v_alo, __pyx_v_ahi, __pyx_v_blo, __pyx_v_bhi, __pyx_v_ta, __pyx_v_tb); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1324 * return lo,hi * * def dot(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None, # <<<<<<<<<<<<<< * bint ta=False, bint tb=False): * """Computes the element-wise dot product of two arrays. */ static PyObject *__pyx_pf_5ga4py_2ga_74dot(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, int __pyx_v_ta, int __pyx_v_tb) { PyArrayObject *__pyx_v_alo_nd = 0; PyArrayObject *__pyx_v_ahi_nd = 0; PyArrayObject *__pyx_v_blo_nd = 0; PyArrayObject *__pyx_v_bhi_nd = 0; char __pyx_v_ta_c; char __pyx_v_tb_c; int __pyx_v_gtype; __pyx_t_float_complex __pyx_v_pfcv; __pyx_t_double_complex __pyx_v_pdcv; SingleComplex __pyx_v_gfcv; DoubleComplex __pyx_v_gdcv; __Pyx_LocalBuf_ND __pyx_pybuffernd_ahi_nd; __Pyx_Buffer __pyx_pybuffer_ahi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_alo_nd; __Pyx_Buffer __pyx_pybuffer_alo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_bhi_nd; __Pyx_Buffer __pyx_pybuffer_bhi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_blo_nd; __Pyx_Buffer __pyx_pybuffer_blo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; Real __pyx_t_9; Real __pyx_t_10; DoublePrecision __pyx_t_11; DoublePrecision __pyx_t_12; PyObject *__pyx_t_13 = NULL; PyObject *(*__pyx_t_14)(PyObject *); PyArrayObject *__pyx_t_15 = NULL; int __pyx_t_16; PyObject *__pyx_t_17 = NULL; PyObject *__pyx_t_18 = NULL; PyObject *__pyx_t_19 = NULL; PyArrayObject *__pyx_t_20 = NULL; Real __pyx_t_21; Real __pyx_t_22; DoublePrecision __pyx_t_23; DoublePrecision __pyx_t_24; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("dot", 0); __pyx_pybuffer_alo_nd.pybuffer.buf = NULL; __pyx_pybuffer_alo_nd.refcount = 0; __pyx_pybuffernd_alo_nd.data = NULL; __pyx_pybuffernd_alo_nd.rcbuffer = &__pyx_pybuffer_alo_nd; __pyx_pybuffer_ahi_nd.pybuffer.buf = NULL; __pyx_pybuffer_ahi_nd.refcount = 0; __pyx_pybuffernd_ahi_nd.data = NULL; __pyx_pybuffernd_ahi_nd.rcbuffer = &__pyx_pybuffer_ahi_nd; __pyx_pybuffer_blo_nd.pybuffer.buf = NULL; __pyx_pybuffer_blo_nd.refcount = 0; __pyx_pybuffernd_blo_nd.data = NULL; __pyx_pybuffernd_blo_nd.rcbuffer = &__pyx_pybuffer_blo_nd; __pyx_pybuffer_bhi_nd.pybuffer.buf = NULL; __pyx_pybuffer_bhi_nd.refcount = 0; __pyx_pybuffernd_bhi_nd.data = NULL; __pyx_pybuffernd_bhi_nd.rcbuffer = &__pyx_pybuffer_bhi_nd; /* "ga4py/ga.pyx":1357 * cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd * cdef char ta_c, tb_c * cdef int gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * cdef float complex pfcv * cdef double complex pdcv */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":1362 * cdef SingleComplex gfcv * cdef DoubleComplex gdcv * if alo is None and ahi is None and blo is None and bhi is None: # <<<<<<<<<<<<<< * if gtype == C_INT: * return GA_Idot(g_a, g_b) */ __pyx_t_1 = (__pyx_v_alo == Py_None); if ((__pyx_t_1 != 0)) { __pyx_t_2 = (__pyx_v_ahi == Py_None); if ((__pyx_t_2 != 0)) { __pyx_t_3 = (__pyx_v_blo == Py_None); if ((__pyx_t_3 != 0)) { __pyx_t_4 = (__pyx_v_bhi == Py_None); __pyx_t_5 = (__pyx_t_4 != 0); } else { __pyx_t_5 = (__pyx_t_3 != 0); } __pyx_t_3 = __pyx_t_5; } else { __pyx_t_3 = (__pyx_t_2 != 0); } __pyx_t_2 = __pyx_t_3; } else { __pyx_t_2 = (__pyx_t_1 != 0); } if (__pyx_t_2) { /* "ga4py/ga.pyx":1363 * cdef DoubleComplex gdcv * if alo is None and ahi is None and blo is None and bhi is None: * if gtype == C_INT: # <<<<<<<<<<<<<< * return GA_Idot(g_a, g_b) * elif gtype == C_LONG: */ __pyx_t_6 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_INT); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = PyObject_RichCompare(__pyx_t_6, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":1364 * if alo is None and ahi is None and blo is None and bhi is None: * if gtype == C_INT: * return GA_Idot(g_a, g_b) # <<<<<<<<<<<<<< * elif gtype == C_LONG: * return GA_Ldot(g_a, g_b) */ __Pyx_XDECREF(__pyx_r); __pyx_t_8 = PyInt_FromLong(GA_Idot(__pyx_v_g_a, __pyx_v_g_b)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_r = __pyx_t_8; __pyx_t_8 = 0; goto __pyx_L0; goto __pyx_L4; } /* "ga4py/ga.pyx":1365 * if gtype == C_INT: * return GA_Idot(g_a, g_b) * elif gtype == C_LONG: # <<<<<<<<<<<<<< * return GA_Ldot(g_a, g_b) * elif gtype == C_LONGLONG: */ __pyx_t_8 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LONG); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyObject_RichCompare(__pyx_t_8, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":1366 * return GA_Idot(g_a, g_b) * elif gtype == C_LONG: * return GA_Ldot(g_a, g_b) # <<<<<<<<<<<<<< * elif gtype == C_LONGLONG: * return GA_Lldot(g_a, g_b) */ __Pyx_XDECREF(__pyx_r); __pyx_t_6 = PyInt_FromLong(GA_Ldot(__pyx_v_g_a, __pyx_v_g_b)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; goto __pyx_L4; } /* "ga4py/ga.pyx":1367 * elif gtype == C_LONG: * return GA_Ldot(g_a, g_b) * elif gtype == C_LONGLONG: # <<<<<<<<<<<<<< * return GA_Lldot(g_a, g_b) * elif gtype == C_FLOAT: */ __pyx_t_6 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LONGLONG); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = PyObject_RichCompare(__pyx_t_6, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":1368 * return GA_Ldot(g_a, g_b) * elif gtype == C_LONGLONG: * return GA_Lldot(g_a, g_b) # <<<<<<<<<<<<<< * elif gtype == C_FLOAT: * return GA_Fdot(g_a, g_b) */ __Pyx_XDECREF(__pyx_r); __pyx_t_8 = PyLong_FromLongLong(GA_Lldot(__pyx_v_g_a, __pyx_v_g_b)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_r = __pyx_t_8; __pyx_t_8 = 0; goto __pyx_L0; goto __pyx_L4; } /* "ga4py/ga.pyx":1369 * elif gtype == C_LONGLONG: * return GA_Lldot(g_a, g_b) * elif gtype == C_FLOAT: # <<<<<<<<<<<<<< * return GA_Fdot(g_a, g_b) * elif gtype == C_DBL: */ __pyx_t_8 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_FLOAT); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyObject_RichCompare(__pyx_t_8, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":1370 * return GA_Lldot(g_a, g_b) * elif gtype == C_FLOAT: * return GA_Fdot(g_a, g_b) # <<<<<<<<<<<<<< * elif gtype == C_DBL: * return GA_Ddot(g_a, g_b) */ __Pyx_XDECREF(__pyx_r); __pyx_t_6 = PyFloat_FromDouble(GA_Fdot(__pyx_v_g_a, __pyx_v_g_b)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; goto __pyx_L4; } /* "ga4py/ga.pyx":1371 * elif gtype == C_FLOAT: * return GA_Fdot(g_a, g_b) * elif gtype == C_DBL: # <<<<<<<<<<<<<< * return GA_Ddot(g_a, g_b) * elif gtype == C_SCPL: */ __pyx_t_6 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_DBL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = PyObject_RichCompare(__pyx_t_6, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":1372 * return GA_Fdot(g_a, g_b) * elif gtype == C_DBL: * return GA_Ddot(g_a, g_b) # <<<<<<<<<<<<<< * elif gtype == C_SCPL: * gfcv = GA_Cdot(g_a, g_b) */ __Pyx_XDECREF(__pyx_r); __pyx_t_8 = PyFloat_FromDouble(GA_Ddot(__pyx_v_g_a, __pyx_v_g_b)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_r = __pyx_t_8; __pyx_t_8 = 0; goto __pyx_L0; goto __pyx_L4; } /* "ga4py/ga.pyx":1373 * elif gtype == C_DBL: * return GA_Ddot(g_a, g_b) * elif gtype == C_SCPL: # <<<<<<<<<<<<<< * gfcv = GA_Cdot(g_a, g_b) * pfcv.real = gfcv.real */ __pyx_t_8 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_SCPL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyObject_RichCompare(__pyx_t_8, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":1374 * return GA_Ddot(g_a, g_b) * elif gtype == C_SCPL: * gfcv = GA_Cdot(g_a, g_b) # <<<<<<<<<<<<<< * pfcv.real = gfcv.real * pfcv.imag = gfcv.imag */ __pyx_v_gfcv = GA_Cdot(__pyx_v_g_a, __pyx_v_g_b); /* "ga4py/ga.pyx":1375 * elif gtype == C_SCPL: * gfcv = GA_Cdot(g_a, g_b) * pfcv.real = gfcv.real # <<<<<<<<<<<<<< * pfcv.imag = gfcv.imag * return pfcv */ __pyx_t_9 = __pyx_v_gfcv.real; __Pyx_SET_CREAL(__pyx_v_pfcv, __pyx_t_9); /* "ga4py/ga.pyx":1376 * gfcv = GA_Cdot(g_a, g_b) * pfcv.real = gfcv.real * pfcv.imag = gfcv.imag # <<<<<<<<<<<<<< * return pfcv * elif gtype == C_DCPL: */ __pyx_t_10 = __pyx_v_gfcv.imag; __Pyx_SET_CIMAG(__pyx_v_pfcv, __pyx_t_10); /* "ga4py/ga.pyx":1377 * pfcv.real = gfcv.real * pfcv.imag = gfcv.imag * return pfcv # <<<<<<<<<<<<<< * elif gtype == C_DCPL: * gdcv = GA_Zdot(g_a, g_b) */ __Pyx_XDECREF(__pyx_r); __pyx_t_6 = __pyx_PyComplex_FromComplex(__pyx_v_pfcv); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_6)); __pyx_r = ((PyObject *)__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L0; goto __pyx_L4; } /* "ga4py/ga.pyx":1378 * pfcv.imag = gfcv.imag * return pfcv * elif gtype == C_DCPL: # <<<<<<<<<<<<<< * gdcv = GA_Zdot(g_a, g_b) * pdcv.real = gdcv.real */ __pyx_t_6 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_DCPL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = PyObject_RichCompare(__pyx_t_6, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":1379 * return pfcv * elif gtype == C_DCPL: * gdcv = GA_Zdot(g_a, g_b) # <<<<<<<<<<<<<< * pdcv.real = gdcv.real * pdcv.imag = gdcv.imag */ __pyx_v_gdcv = GA_Zdot(__pyx_v_g_a, __pyx_v_g_b); /* "ga4py/ga.pyx":1380 * elif gtype == C_DCPL: * gdcv = GA_Zdot(g_a, g_b) * pdcv.real = gdcv.real # <<<<<<<<<<<<<< * pdcv.imag = gdcv.imag * return pdcv */ __pyx_t_11 = __pyx_v_gdcv.real; __Pyx_SET_CREAL(__pyx_v_pdcv, __pyx_t_11); /* "ga4py/ga.pyx":1381 * gdcv = GA_Zdot(g_a, g_b) * pdcv.real = gdcv.real * pdcv.imag = gdcv.imag # <<<<<<<<<<<<<< * return pdcv * else: */ __pyx_t_12 = __pyx_v_gdcv.imag; __Pyx_SET_CIMAG(__pyx_v_pdcv, __pyx_t_12); /* "ga4py/ga.pyx":1382 * pdcv.real = gdcv.real * pdcv.imag = gdcv.imag * return pdcv # <<<<<<<<<<<<<< * else: * raise TypeError */ __Pyx_XDECREF(__pyx_r); __pyx_t_8 = __pyx_PyComplex_FromComplex(__pyx_v_pdcv); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_8)); __pyx_r = ((PyObject *)__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L0; goto __pyx_L4; } /*else*/ { /* "ga4py/ga.pyx":1384 * return pdcv * else: * raise TypeError # <<<<<<<<<<<<<< * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) */ __Pyx_Raise(__pyx_builtin_TypeError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1384; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L4:; goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":1386 * raise TypeError * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) # <<<<<<<<<<<<<< * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * if ta: */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_alo, __pyx_v_ahi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_7 = PyList_GET_ITEM(sequence, 0); __pyx_t_6 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_13 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_14 = Py_TYPE(__pyx_t_13)->tp_iternext; index = 0; __pyx_t_7 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_7)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); index = 1; __pyx_t_6 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_14 = NULL; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_14 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L6_unpacking_done:; } if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_15 = ((PyArrayObject *)__pyx_t_7); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __pyx_t_16 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_16 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_alo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_18, __pyx_t_19); } } __pyx_pybuffernd_alo_nd.diminfo[0].strides = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_alo_nd.diminfo[0].shape = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_15 = 0; __pyx_v_alo_nd = ((PyArrayObject *)__pyx_t_7); __pyx_t_7 = 0; __pyx_t_15 = ((PyArrayObject *)__pyx_t_6); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __pyx_t_16 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_16 < 0)) { PyErr_Fetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ahi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_19, __pyx_t_18, __pyx_t_17); } } __pyx_pybuffernd_ahi_nd.diminfo[0].strides = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ahi_nd.diminfo[0].shape = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_15 = 0; __pyx_v_ahi_nd = ((PyArrayObject *)__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/ga.pyx":1387 * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) # <<<<<<<<<<<<<< * if ta: * ta_c = "T" */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_b, __pyx_v_blo, __pyx_v_bhi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_6 = PyList_GET_ITEM(sequence, 0); __pyx_t_7 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx_t_7); #else __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_13 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_14 = Py_TYPE(__pyx_t_13)->tp_iternext; index = 0; __pyx_t_6 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_6)) goto __pyx_L7_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); index = 1; __pyx_t_7 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_7)) goto __pyx_L7_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_14 = NULL; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; goto __pyx_L8_unpacking_done; __pyx_L7_unpacking_failed:; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_14 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L8_unpacking_done:; } if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_20 = ((PyArrayObject *)__pyx_t_6); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __pyx_t_16 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_20, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_16 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_blo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_18, __pyx_t_19); } } __pyx_pybuffernd_blo_nd.diminfo[0].strides = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_blo_nd.diminfo[0].shape = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_20 = 0; __pyx_v_blo_nd = ((PyArrayObject *)__pyx_t_6); __pyx_t_6 = 0; __pyx_t_20 = ((PyArrayObject *)__pyx_t_7); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __pyx_t_16 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_20, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_16 < 0)) { PyErr_Fetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_bhi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_19, __pyx_t_18, __pyx_t_17); } } __pyx_pybuffernd_bhi_nd.diminfo[0].strides = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_bhi_nd.diminfo[0].shape = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_20 = 0; __pyx_v_bhi_nd = ((PyArrayObject *)__pyx_t_7); __pyx_t_7 = 0; /* "ga4py/ga.pyx":1388 * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * if ta: # <<<<<<<<<<<<<< * ta_c = "T" * else: */ __pyx_t_2 = (__pyx_v_ta != 0); if (__pyx_t_2) { /* "ga4py/ga.pyx":1389 * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * if ta: * ta_c = "T" # <<<<<<<<<<<<<< * else: * ta_c = "N" */ __pyx_v_ta_c = 'T'; goto __pyx_L9; } /*else*/ { /* "ga4py/ga.pyx":1391 * ta_c = "T" * else: * ta_c = "N" # <<<<<<<<<<<<<< * if tb: * tb_c = "T" */ __pyx_v_ta_c = 'N'; } __pyx_L9:; /* "ga4py/ga.pyx":1392 * else: * ta_c = "N" * if tb: # <<<<<<<<<<<<<< * tb_c = "T" * else: */ __pyx_t_2 = (__pyx_v_tb != 0); if (__pyx_t_2) { /* "ga4py/ga.pyx":1393 * ta_c = "N" * if tb: * tb_c = "T" # <<<<<<<<<<<<<< * else: * tb_c = "N" */ __pyx_v_tb_c = 'T'; goto __pyx_L10; } /*else*/ { /* "ga4py/ga.pyx":1395 * tb_c = "T" * else: * tb_c = "N" # <<<<<<<<<<<<<< * if gtype == C_INT: * return NGA_Idot_patch64( */ __pyx_v_tb_c = 'N'; } __pyx_L10:; /* "ga4py/ga.pyx":1396 * else: * tb_c = "N" * if gtype == C_INT: # <<<<<<<<<<<<<< * return NGA_Idot_patch64( * g_a, ta_c, alo_nd.data, ahi_nd.data, */ __pyx_t_8 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1396; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_INT); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1396; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyObject_RichCompare(__pyx_t_8, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1396; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1396; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":1397 * tb_c = "N" * if gtype == C_INT: * return NGA_Idot_patch64( # <<<<<<<<<<<<<< * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) */ __Pyx_XDECREF(__pyx_r); /* "ga4py/ga.pyx":1399 * return NGA_Idot_patch64( * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) # <<<<<<<<<<<<<< * elif gtype == C_LONG: * return NGA_Ldot_patch64( */ __pyx_t_6 = PyInt_FromLong(NGA_Idot_patch64(__pyx_v_g_a, __pyx_v_ta_c, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_g_b, __pyx_v_tb_c, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1397; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; goto __pyx_L11; } /* "ga4py/ga.pyx":1400 * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) * elif gtype == C_LONG: # <<<<<<<<<<<<<< * return NGA_Ldot_patch64( * g_a, ta_c, alo_nd.data, ahi_nd.data, */ __pyx_t_6 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LONG); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = PyObject_RichCompare(__pyx_t_6, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":1401 * g_b, tb_c, blo_nd.data, bhi_nd.data) * elif gtype == C_LONG: * return NGA_Ldot_patch64( # <<<<<<<<<<<<<< * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) */ __Pyx_XDECREF(__pyx_r); /* "ga4py/ga.pyx":1403 * return NGA_Ldot_patch64( * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) # <<<<<<<<<<<<<< * elif gtype == C_LONGLONG: * return NGA_Lldot_patch64( */ __pyx_t_8 = PyInt_FromLong(NGA_Ldot_patch64(__pyx_v_g_a, __pyx_v_ta_c, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_g_b, __pyx_v_tb_c, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data))); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_r = __pyx_t_8; __pyx_t_8 = 0; goto __pyx_L0; goto __pyx_L11; } /* "ga4py/ga.pyx":1404 * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) * elif gtype == C_LONGLONG: # <<<<<<<<<<<<<< * return NGA_Lldot_patch64( * g_a, ta_c, alo_nd.data, ahi_nd.data, */ __pyx_t_8 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LONGLONG); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyObject_RichCompare(__pyx_t_8, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":1405 * g_b, tb_c, blo_nd.data, bhi_nd.data) * elif gtype == C_LONGLONG: * return NGA_Lldot_patch64( # <<<<<<<<<<<<<< * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) */ __Pyx_XDECREF(__pyx_r); /* "ga4py/ga.pyx":1407 * return NGA_Lldot_patch64( * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) # <<<<<<<<<<<<<< * elif gtype == C_FLOAT: * return NGA_Fdot_patch64( */ __pyx_t_6 = PyLong_FromLongLong(NGA_Lldot_patch64(__pyx_v_g_a, __pyx_v_ta_c, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_g_b, __pyx_v_tb_c, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; goto __pyx_L11; } /* "ga4py/ga.pyx":1408 * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) * elif gtype == C_FLOAT: # <<<<<<<<<<<<<< * return NGA_Fdot_patch64( * g_a, ta_c, alo_nd.data, ahi_nd.data, */ __pyx_t_6 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_FLOAT); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = PyObject_RichCompare(__pyx_t_6, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":1409 * g_b, tb_c, blo_nd.data, bhi_nd.data) * elif gtype == C_FLOAT: * return NGA_Fdot_patch64( # <<<<<<<<<<<<<< * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) */ __Pyx_XDECREF(__pyx_r); /* "ga4py/ga.pyx":1411 * return NGA_Fdot_patch64( * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) # <<<<<<<<<<<<<< * elif gtype == C_DBL: * return NGA_Ddot_patch64( */ __pyx_t_8 = PyFloat_FromDouble(NGA_Fdot_patch64(__pyx_v_g_a, __pyx_v_ta_c, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_g_b, __pyx_v_tb_c, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data))); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_r = __pyx_t_8; __pyx_t_8 = 0; goto __pyx_L0; goto __pyx_L11; } /* "ga4py/ga.pyx":1412 * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) * elif gtype == C_DBL: # <<<<<<<<<<<<<< * return NGA_Ddot_patch64( * g_a, ta_c, alo_nd.data, ahi_nd.data, */ __pyx_t_8 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_DBL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyObject_RichCompare(__pyx_t_8, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":1413 * g_b, tb_c, blo_nd.data, bhi_nd.data) * elif gtype == C_DBL: * return NGA_Ddot_patch64( # <<<<<<<<<<<<<< * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) */ __Pyx_XDECREF(__pyx_r); /* "ga4py/ga.pyx":1415 * return NGA_Ddot_patch64( * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) # <<<<<<<<<<<<<< * elif gtype == C_SCPL: * gfcv = NGA_Cdot_patch64( */ __pyx_t_6 = PyFloat_FromDouble(NGA_Ddot_patch64(__pyx_v_g_a, __pyx_v_ta_c, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_g_b, __pyx_v_tb_c, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data))); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; goto __pyx_L11; } /* "ga4py/ga.pyx":1416 * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) * elif gtype == C_SCPL: # <<<<<<<<<<<<<< * gfcv = NGA_Cdot_patch64( * g_a, ta_c, alo_nd.data, ahi_nd.data, */ __pyx_t_6 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_SCPL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = PyObject_RichCompare(__pyx_t_6, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":1419 * gfcv = NGA_Cdot_patch64( * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) # <<<<<<<<<<<<<< * pfcv.real = gfcv.real * pfcv.imag = gfcv.imag */ __pyx_v_gfcv = NGA_Cdot_patch64(__pyx_v_g_a, __pyx_v_ta_c, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_g_b, __pyx_v_tb_c, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data)); /* "ga4py/ga.pyx":1420 * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) * pfcv.real = gfcv.real # <<<<<<<<<<<<<< * pfcv.imag = gfcv.imag * return pfcv */ __pyx_t_21 = __pyx_v_gfcv.real; __Pyx_SET_CREAL(__pyx_v_pfcv, __pyx_t_21); /* "ga4py/ga.pyx":1421 * g_b, tb_c, blo_nd.data, bhi_nd.data) * pfcv.real = gfcv.real * pfcv.imag = gfcv.imag # <<<<<<<<<<<<<< * return pfcv * elif gtype == C_DCPL: */ __pyx_t_22 = __pyx_v_gfcv.imag; __Pyx_SET_CIMAG(__pyx_v_pfcv, __pyx_t_22); /* "ga4py/ga.pyx":1422 * pfcv.real = gfcv.real * pfcv.imag = gfcv.imag * return pfcv # <<<<<<<<<<<<<< * elif gtype == C_DCPL: * gdcv = NGA_Zdot_patch64( */ __Pyx_XDECREF(__pyx_r); __pyx_t_8 = __pyx_PyComplex_FromComplex(__pyx_v_pfcv); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_8)); __pyx_r = ((PyObject *)__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L0; goto __pyx_L11; } /* "ga4py/ga.pyx":1423 * pfcv.imag = gfcv.imag * return pfcv * elif gtype == C_DCPL: # <<<<<<<<<<<<<< * gdcv = NGA_Zdot_patch64( * g_a, ta_c, alo_nd.data, ahi_nd.data, */ __pyx_t_8 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_DCPL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyObject_RichCompare(__pyx_t_8, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_2) { /* "ga4py/ga.pyx":1426 * gdcv = NGA_Zdot_patch64( * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) # <<<<<<<<<<<<<< * pdcv.real = gdcv.real * pdcv.imag = gdcv.imag */ __pyx_v_gdcv = NGA_Zdot_patch64(__pyx_v_g_a, __pyx_v_ta_c, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_g_b, __pyx_v_tb_c, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data)); /* "ga4py/ga.pyx":1427 * g_a, ta_c, alo_nd.data, ahi_nd.data, * g_b, tb_c, blo_nd.data, bhi_nd.data) * pdcv.real = gdcv.real # <<<<<<<<<<<<<< * pdcv.imag = gdcv.imag * return pdcv */ __pyx_t_23 = __pyx_v_gdcv.real; __Pyx_SET_CREAL(__pyx_v_pdcv, __pyx_t_23); /* "ga4py/ga.pyx":1428 * g_b, tb_c, blo_nd.data, bhi_nd.data) * pdcv.real = gdcv.real * pdcv.imag = gdcv.imag # <<<<<<<<<<<<<< * return pdcv * else: */ __pyx_t_24 = __pyx_v_gdcv.imag; __Pyx_SET_CIMAG(__pyx_v_pdcv, __pyx_t_24); /* "ga4py/ga.pyx":1429 * pdcv.real = gdcv.real * pdcv.imag = gdcv.imag * return pdcv # <<<<<<<<<<<<<< * else: * raise TypeError */ __Pyx_XDECREF(__pyx_r); __pyx_t_6 = __pyx_PyComplex_FromComplex(__pyx_v_pdcv); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1429; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_6)); __pyx_r = ((PyObject *)__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L0; goto __pyx_L11; } /*else*/ { /* "ga4py/ga.pyx":1431 * return pdcv * else: * raise TypeError # <<<<<<<<<<<<<< * * def duplicate(int g_a, char *name=""): */ __Pyx_Raise(__pyx_builtin_TypeError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L11:; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_13); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.dot", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_alo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_ahi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_blo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_bhi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_77duplicate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_76duplicate[] = "duplicate(int g_a, char *name='')\nCreates a new array by applying all the properties of another existing\n array.\n \n :Parameters:\n g_a : int\n the array handle\n name : string\n the new name of the created array\n\n :returns: a non-zero array handle means the call was succesful.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_77duplicate = {__Pyx_NAMESTR("duplicate"), (PyCFunction)__pyx_pw_5ga4py_2ga_77duplicate, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_76duplicate)}; static PyObject *__pyx_pw_5ga4py_2ga_77duplicate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; char *__pyx_v_name; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("duplicate (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__name,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "duplicate") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1433; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1433; __pyx_clineno = __LINE__; goto __pyx_L3_error;} if (values[1]) { __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1433; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_name = ((char *)__pyx_k_16); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("duplicate", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1433; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.duplicate", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_76duplicate(__pyx_self, __pyx_v_g_a, __pyx_v_name); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1433 * raise TypeError * * def duplicate(int g_a, char *name=""): # <<<<<<<<<<<<<< * """Creates a new array by applying all the properties of another existing * array. */ static PyObject *__pyx_pf_5ga4py_2ga_76duplicate(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, char *__pyx_v_name) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("duplicate", 0); /* "ga4py/ga.pyx":1448 * * """ * return GA_Duplicate(g_a, name) # <<<<<<<<<<<<<< * * def elem_divide(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Duplicate(__pyx_v_g_a, __pyx_v_name)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.duplicate", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_79elem_divide(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_78elem_divide[] = "elem_divide(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, bhi=None, clo=None, chi=None)\nComputes the element-wise quotient of the two arrays.\n\n Arrays or array patches must be of the same types and same number of\n elements. For two-dimensional arrays:\n\n c(i, j) = a(i,j)/b(i,j)\n\n The result (c) may replace one of the input arrays (a/b).\n If one of the elements of array g_b is zero, the quotient for the element\n of g_c will be set to GA_NEGATIVE_INFINITY. \n\n This is a collective operation. \n\n :Parameters:\n g_a : int\n the array handle\n g_b : int\n the array handle\n g_c : int\n the array handle\n alo : 1D array-like of integers\n lower bound patch coordinates of g_a, inclusive\n ahi : 1D array-like of integers\n higher bound patch coordinates of g_a, exclusive\n blo : 1D array-like of integers\n lower bound patch coordinates of g_b, inclusive\n bhi : 1D array-like of integers\n higher bound patch coordinates of g_b, exclusive\n clo : 1D array-like of integers\n lower bound patch coordinates of g_c, inclusive\n chi : 1D array-like of integers\n higher bound patch coordinates of g_c, exclusive\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_79elem_divide = {__Pyx_NAMESTR("elem_divide"), (PyCFunction)__pyx_pw_5ga4py_2ga_79elem_divide, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_78elem_divide)}; static PyObject *__pyx_pw_5ga4py_2ga_79elem_divide(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_b; int __pyx_v_g_c; PyObject *__pyx_v_alo = 0; PyObject *__pyx_v_ahi = 0; PyObject *__pyx_v_blo = 0; PyObject *__pyx_v_bhi = 0; PyObject *__pyx_v_clo = 0; PyObject *__pyx_v_chi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("elem_divide (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_b,&__pyx_n_s__g_c,&__pyx_n_s__alo,&__pyx_n_s__ahi,&__pyx_n_s__blo,&__pyx_n_s__bhi,&__pyx_n_s__clo,&__pyx_n_s__chi,0}; PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; /* "ga4py/ga.pyx":1450 * return GA_Duplicate(g_a, name) * * def elem_divide(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, # <<<<<<<<<<<<<< * bhi=None, clo=None, chi=None): * """Computes the element-wise quotient of the two arrays. */ values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); values[5] = ((PyObject *)Py_None); /* "ga4py/ga.pyx":1451 * * def elem_divide(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, * bhi=None, clo=None, chi=None): # <<<<<<<<<<<<<< * """Computes the element-wise quotient of the two arrays. * */ values[6] = ((PyObject *)Py_None); values[7] = ((PyObject *)Py_None); values[8] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("elem_divide", 0, 3, 9, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1450; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_c)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("elem_divide", 0, 3, 9, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1450; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alo); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ahi); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__blo); if (value) { values[5] = value; kw_args--; } } case 6: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bhi); if (value) { values[6] = value; kw_args--; } } case 7: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__clo); if (value) { values[7] = value; kw_args--; } } case 8: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__chi); if (value) { values[8] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "elem_divide") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1450; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1450; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_b = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1450; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_c = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_g_c == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1450; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_alo = values[3]; __pyx_v_ahi = values[4]; __pyx_v_blo = values[5]; __pyx_v_bhi = values[6]; __pyx_v_clo = values[7]; __pyx_v_chi = values[8]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("elem_divide", 0, 3, 9, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1450; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.elem_divide", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_78elem_divide(__pyx_self, __pyx_v_g_a, __pyx_v_g_b, __pyx_v_g_c, __pyx_v_alo, __pyx_v_ahi, __pyx_v_blo, __pyx_v_bhi, __pyx_v_clo, __pyx_v_chi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1450 * return GA_Duplicate(g_a, name) * * def elem_divide(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, # <<<<<<<<<<<<<< * bhi=None, clo=None, chi=None): * """Computes the element-wise quotient of the two arrays. */ static PyObject *__pyx_pf_5ga4py_2ga_78elem_divide(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, int __pyx_v_g_c, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, PyObject *__pyx_v_clo, PyObject *__pyx_v_chi) { PyArrayObject *__pyx_v_alo_nd = 0; PyArrayObject *__pyx_v_ahi_nd = 0; PyArrayObject *__pyx_v_blo_nd = 0; PyArrayObject *__pyx_v_bhi_nd = 0; PyArrayObject *__pyx_v_clo_nd = 0; PyArrayObject *__pyx_v_chi_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_ahi_nd; __Pyx_Buffer __pyx_pybuffer_ahi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_alo_nd; __Pyx_Buffer __pyx_pybuffer_alo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_bhi_nd; __Pyx_Buffer __pyx_pybuffer_bhi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_blo_nd; __Pyx_Buffer __pyx_pybuffer_blo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_chi_nd; __Pyx_Buffer __pyx_pybuffer_chi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_clo_nd; __Pyx_Buffer __pyx_pybuffer_clo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; PyObject *(*__pyx_t_12)(PyObject *); PyArrayObject *__pyx_t_13 = NULL; int __pyx_t_14; PyObject *__pyx_t_15 = NULL; PyObject *__pyx_t_16 = NULL; PyObject *__pyx_t_17 = NULL; PyArrayObject *__pyx_t_18 = NULL; PyArrayObject *__pyx_t_19 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("elem_divide", 0); __pyx_pybuffer_alo_nd.pybuffer.buf = NULL; __pyx_pybuffer_alo_nd.refcount = 0; __pyx_pybuffernd_alo_nd.data = NULL; __pyx_pybuffernd_alo_nd.rcbuffer = &__pyx_pybuffer_alo_nd; __pyx_pybuffer_ahi_nd.pybuffer.buf = NULL; __pyx_pybuffer_ahi_nd.refcount = 0; __pyx_pybuffernd_ahi_nd.data = NULL; __pyx_pybuffernd_ahi_nd.rcbuffer = &__pyx_pybuffer_ahi_nd; __pyx_pybuffer_blo_nd.pybuffer.buf = NULL; __pyx_pybuffer_blo_nd.refcount = 0; __pyx_pybuffernd_blo_nd.data = NULL; __pyx_pybuffernd_blo_nd.rcbuffer = &__pyx_pybuffer_blo_nd; __pyx_pybuffer_bhi_nd.pybuffer.buf = NULL; __pyx_pybuffer_bhi_nd.refcount = 0; __pyx_pybuffernd_bhi_nd.data = NULL; __pyx_pybuffernd_bhi_nd.rcbuffer = &__pyx_pybuffer_bhi_nd; __pyx_pybuffer_clo_nd.pybuffer.buf = NULL; __pyx_pybuffer_clo_nd.refcount = 0; __pyx_pybuffernd_clo_nd.data = NULL; __pyx_pybuffernd_clo_nd.rcbuffer = &__pyx_pybuffer_clo_nd; __pyx_pybuffer_chi_nd.pybuffer.buf = NULL; __pyx_pybuffer_chi_nd.refcount = 0; __pyx_pybuffernd_chi_nd.data = NULL; __pyx_pybuffernd_chi_nd.rcbuffer = &__pyx_pybuffer_chi_nd; /* "ga4py/ga.pyx":1489 * cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd * cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd * if (alo is None and ahi is None # <<<<<<<<<<<<<< * and blo is None and bhi is None * and clo is None and chi is None): */ __pyx_t_1 = (__pyx_v_alo == Py_None); if ((__pyx_t_1 != 0)) { /* "ga4py/ga.pyx":1490 * cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd * if (alo is None and ahi is None * and blo is None and bhi is None # <<<<<<<<<<<<<< * and clo is None and chi is None): * GA_Elem_divide(g_a, g_b, g_c) */ __pyx_t_2 = (__pyx_v_ahi == Py_None); if ((__pyx_t_2 != 0)) { __pyx_t_3 = (__pyx_v_blo == Py_None); if ((__pyx_t_3 != 0)) { /* "ga4py/ga.pyx":1491 * if (alo is None and ahi is None * and blo is None and bhi is None * and clo is None and chi is None): # <<<<<<<<<<<<<< * GA_Elem_divide(g_a, g_b, g_c) * else: */ __pyx_t_4 = (__pyx_v_bhi == Py_None); if ((__pyx_t_4 != 0)) { __pyx_t_5 = (__pyx_v_clo == Py_None); if ((__pyx_t_5 != 0)) { __pyx_t_6 = (__pyx_v_chi == Py_None); __pyx_t_7 = (__pyx_t_6 != 0); } else { __pyx_t_7 = (__pyx_t_5 != 0); } __pyx_t_5 = __pyx_t_7; } else { __pyx_t_5 = (__pyx_t_4 != 0); } __pyx_t_4 = __pyx_t_5; } else { __pyx_t_4 = (__pyx_t_3 != 0); } __pyx_t_3 = __pyx_t_4; } else { __pyx_t_3 = (__pyx_t_2 != 0); } __pyx_t_2 = __pyx_t_3; } else { __pyx_t_2 = (__pyx_t_1 != 0); } if (__pyx_t_2) { /* "ga4py/ga.pyx":1492 * and blo is None and bhi is None * and clo is None and chi is None): * GA_Elem_divide(g_a, g_b, g_c) # <<<<<<<<<<<<<< * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) */ GA_Elem_divide(__pyx_v_g_a, __pyx_v_g_b, __pyx_v_g_c); goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":1494 * GA_Elem_divide(g_a, g_b, g_c) * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) # <<<<<<<<<<<<<< * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * clo_nd,chi_nd = _lohi(g_c,clo,chi) */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_alo, __pyx_v_ahi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_9 = PyList_GET_ITEM(sequence, 0); __pyx_t_10 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_10); #else __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_13 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_alo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17); } } __pyx_pybuffernd_alo_nd.diminfo[0].strides = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_alo_nd.diminfo[0].shape = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_13 = 0; __pyx_v_alo_nd = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0; __pyx_t_13 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ahi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15); } } __pyx_pybuffernd_ahi_nd.diminfo[0].strides = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ahi_nd.diminfo[0].shape = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_13 = 0; __pyx_v_ahi_nd = ((PyArrayObject *)__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/ga.pyx":1495 * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) # <<<<<<<<<<<<<< * clo_nd,chi_nd = _lohi(g_c,clo,chi) * GA_Elem_divide_patch64( */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_b, __pyx_v_blo, __pyx_v_bhi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_10 = PyList_GET_ITEM(sequence, 0); __pyx_t_9 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx_t_9); #else __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); index = 1; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L7_unpacking_done:; } if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_18 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_blo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17); } } __pyx_pybuffernd_blo_nd.diminfo[0].strides = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_blo_nd.diminfo[0].shape = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_18 = 0; __pyx_v_blo_nd = ((PyArrayObject *)__pyx_t_10); __pyx_t_10 = 0; __pyx_t_18 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_bhi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15); } } __pyx_pybuffernd_bhi_nd.diminfo[0].strides = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_bhi_nd.diminfo[0].shape = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_18 = 0; __pyx_v_bhi_nd = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0; /* "ga4py/ga.pyx":1496 * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * clo_nd,chi_nd = _lohi(g_c,clo,chi) # <<<<<<<<<<<<<< * GA_Elem_divide_patch64( * g_a, alo_nd.data, ahi_nd.data, */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_c, __pyx_v_clo, __pyx_v_chi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_9 = PyList_GET_ITEM(sequence, 0); __pyx_t_10 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_10); #else __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L9_unpacking_done; __pyx_L8_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L9_unpacking_done:; } if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_19 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_clo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17); } } __pyx_pybuffernd_clo_nd.diminfo[0].strides = __pyx_pybuffernd_clo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_clo_nd.diminfo[0].shape = __pyx_pybuffernd_clo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_19 = 0; __pyx_v_clo_nd = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0; __pyx_t_19 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_chi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15); } } __pyx_pybuffernd_chi_nd.diminfo[0].strides = __pyx_pybuffernd_chi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_chi_nd.diminfo[0].shape = __pyx_pybuffernd_chi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_19 = 0; __pyx_v_chi_nd = ((PyArrayObject *)__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/ga.pyx":1500 * g_a, alo_nd.data, ahi_nd.data, * g_b, blo_nd.data, bhi_nd.data, * g_c, clo_nd.data, chi_nd.data) # <<<<<<<<<<<<<< * * def elem_maximum(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, */ GA_Elem_divide_patch64(__pyx_v_g_a, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_g_b, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data), __pyx_v_g_c, ((int64_t *)__pyx_v_clo_nd->data), ((int64_t *)__pyx_v_chi_nd->data)); } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_11); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.elem_divide", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_alo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_ahi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_blo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_bhi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_clo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_chi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_81elem_maximum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_80elem_maximum[] = "elem_maximum(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, bhi=None, clo=None, chi=None)\nComputes the element-wise maximum of the two arrays.\n\n Arrays or array patches must be of the same types and same number of\n elements. For two-dimensional arrays::\n\n c(i,j) = max(a(i,j),b(i,j))\n\n If the data type is complex, then::\n\n c(i,j).real = max{ |a(i,j)|, |b(i,j)|} while c(i,j).image = 0\n\n The result (c) may replace one of the input arrays (a/b).\n\n This is a collective operation. \n\n :Parameters:\n g_a : int\n the array handle\n g_b : int\n the array handle\n g_c : int\n the array handle\n alo : 1D array-like of integers\n lower bound patch coordinates of g_a, inclusive\n ahi : 1D array-like of integers\n higher bound patch coordinates of g_a, exclusive\n blo : 1D array-like of integers\n lower bound patch coordinates of g_b, inclusive\n bhi : 1D array-like of integers\n higher bound patch coordinates of g_b, exclusive\n clo : 1D array-like of integers\n lower bound patch coordinates of g_c, inclusive\n chi : 1D array-like of integers\n higher bound patch coordinates of g_c, exclusive\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_81elem_maximum = {__Pyx_NAMESTR("elem_maximum"), (PyCFunction)__pyx_pw_5ga4py_2ga_81elem_maximum, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_80elem_maximum)}; static PyObject *__pyx_pw_5ga4py_2ga_81elem_maximum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_b; int __pyx_v_g_c; PyObject *__pyx_v_alo = 0; PyObject *__pyx_v_ahi = 0; PyObject *__pyx_v_blo = 0; PyObject *__pyx_v_bhi = 0; PyObject *__pyx_v_clo = 0; PyObject *__pyx_v_chi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("elem_maximum (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_b,&__pyx_n_s__g_c,&__pyx_n_s__alo,&__pyx_n_s__ahi,&__pyx_n_s__blo,&__pyx_n_s__bhi,&__pyx_n_s__clo,&__pyx_n_s__chi,0}; PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; /* "ga4py/ga.pyx":1502 * g_c, clo_nd.data, chi_nd.data) * * def elem_maximum(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, # <<<<<<<<<<<<<< * bhi=None, clo=None, chi=None): * """Computes the element-wise maximum of the two arrays. */ values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); values[5] = ((PyObject *)Py_None); /* "ga4py/ga.pyx":1503 * * def elem_maximum(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, * bhi=None, clo=None, chi=None): # <<<<<<<<<<<<<< * """Computes the element-wise maximum of the two arrays. * */ values[6] = ((PyObject *)Py_None); values[7] = ((PyObject *)Py_None); values[8] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("elem_maximum", 0, 3, 9, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1502; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_c)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("elem_maximum", 0, 3, 9, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1502; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alo); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ahi); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__blo); if (value) { values[5] = value; kw_args--; } } case 6: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bhi); if (value) { values[6] = value; kw_args--; } } case 7: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__clo); if (value) { values[7] = value; kw_args--; } } case 8: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__chi); if (value) { values[8] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "elem_maximum") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1502; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1502; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_b = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1502; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_c = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_g_c == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1502; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_alo = values[3]; __pyx_v_ahi = values[4]; __pyx_v_blo = values[5]; __pyx_v_bhi = values[6]; __pyx_v_clo = values[7]; __pyx_v_chi = values[8]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("elem_maximum", 0, 3, 9, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1502; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.elem_maximum", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_80elem_maximum(__pyx_self, __pyx_v_g_a, __pyx_v_g_b, __pyx_v_g_c, __pyx_v_alo, __pyx_v_ahi, __pyx_v_blo, __pyx_v_bhi, __pyx_v_clo, __pyx_v_chi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1502 * g_c, clo_nd.data, chi_nd.data) * * def elem_maximum(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, # <<<<<<<<<<<<<< * bhi=None, clo=None, chi=None): * """Computes the element-wise maximum of the two arrays. */ static PyObject *__pyx_pf_5ga4py_2ga_80elem_maximum(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, int __pyx_v_g_c, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, PyObject *__pyx_v_clo, PyObject *__pyx_v_chi) { PyArrayObject *__pyx_v_alo_nd = 0; PyArrayObject *__pyx_v_ahi_nd = 0; PyArrayObject *__pyx_v_blo_nd = 0; PyArrayObject *__pyx_v_bhi_nd = 0; PyArrayObject *__pyx_v_clo_nd = 0; PyArrayObject *__pyx_v_chi_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_ahi_nd; __Pyx_Buffer __pyx_pybuffer_ahi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_alo_nd; __Pyx_Buffer __pyx_pybuffer_alo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_bhi_nd; __Pyx_Buffer __pyx_pybuffer_bhi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_blo_nd; __Pyx_Buffer __pyx_pybuffer_blo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_chi_nd; __Pyx_Buffer __pyx_pybuffer_chi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_clo_nd; __Pyx_Buffer __pyx_pybuffer_clo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; PyObject *(*__pyx_t_12)(PyObject *); PyArrayObject *__pyx_t_13 = NULL; int __pyx_t_14; PyObject *__pyx_t_15 = NULL; PyObject *__pyx_t_16 = NULL; PyObject *__pyx_t_17 = NULL; PyArrayObject *__pyx_t_18 = NULL; PyArrayObject *__pyx_t_19 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("elem_maximum", 0); __pyx_pybuffer_alo_nd.pybuffer.buf = NULL; __pyx_pybuffer_alo_nd.refcount = 0; __pyx_pybuffernd_alo_nd.data = NULL; __pyx_pybuffernd_alo_nd.rcbuffer = &__pyx_pybuffer_alo_nd; __pyx_pybuffer_ahi_nd.pybuffer.buf = NULL; __pyx_pybuffer_ahi_nd.refcount = 0; __pyx_pybuffernd_ahi_nd.data = NULL; __pyx_pybuffernd_ahi_nd.rcbuffer = &__pyx_pybuffer_ahi_nd; __pyx_pybuffer_blo_nd.pybuffer.buf = NULL; __pyx_pybuffer_blo_nd.refcount = 0; __pyx_pybuffernd_blo_nd.data = NULL; __pyx_pybuffernd_blo_nd.rcbuffer = &__pyx_pybuffer_blo_nd; __pyx_pybuffer_bhi_nd.pybuffer.buf = NULL; __pyx_pybuffer_bhi_nd.refcount = 0; __pyx_pybuffernd_bhi_nd.data = NULL; __pyx_pybuffernd_bhi_nd.rcbuffer = &__pyx_pybuffer_bhi_nd; __pyx_pybuffer_clo_nd.pybuffer.buf = NULL; __pyx_pybuffer_clo_nd.refcount = 0; __pyx_pybuffernd_clo_nd.data = NULL; __pyx_pybuffernd_clo_nd.rcbuffer = &__pyx_pybuffer_clo_nd; __pyx_pybuffer_chi_nd.pybuffer.buf = NULL; __pyx_pybuffer_chi_nd.refcount = 0; __pyx_pybuffernd_chi_nd.data = NULL; __pyx_pybuffernd_chi_nd.rcbuffer = &__pyx_pybuffer_chi_nd; /* "ga4py/ga.pyx":1543 * cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd * cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd * if (alo is None and ahi is None # <<<<<<<<<<<<<< * and blo is None and bhi is None * and clo is None and chi is None): */ __pyx_t_1 = (__pyx_v_alo == Py_None); if ((__pyx_t_1 != 0)) { /* "ga4py/ga.pyx":1544 * cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd * if (alo is None and ahi is None * and blo is None and bhi is None # <<<<<<<<<<<<<< * and clo is None and chi is None): * GA_Elem_maximum(g_a, g_b, g_c) */ __pyx_t_2 = (__pyx_v_ahi == Py_None); if ((__pyx_t_2 != 0)) { __pyx_t_3 = (__pyx_v_blo == Py_None); if ((__pyx_t_3 != 0)) { /* "ga4py/ga.pyx":1545 * if (alo is None and ahi is None * and blo is None and bhi is None * and clo is None and chi is None): # <<<<<<<<<<<<<< * GA_Elem_maximum(g_a, g_b, g_c) * else: */ __pyx_t_4 = (__pyx_v_bhi == Py_None); if ((__pyx_t_4 != 0)) { __pyx_t_5 = (__pyx_v_clo == Py_None); if ((__pyx_t_5 != 0)) { __pyx_t_6 = (__pyx_v_chi == Py_None); __pyx_t_7 = (__pyx_t_6 != 0); } else { __pyx_t_7 = (__pyx_t_5 != 0); } __pyx_t_5 = __pyx_t_7; } else { __pyx_t_5 = (__pyx_t_4 != 0); } __pyx_t_4 = __pyx_t_5; } else { __pyx_t_4 = (__pyx_t_3 != 0); } __pyx_t_3 = __pyx_t_4; } else { __pyx_t_3 = (__pyx_t_2 != 0); } __pyx_t_2 = __pyx_t_3; } else { __pyx_t_2 = (__pyx_t_1 != 0); } if (__pyx_t_2) { /* "ga4py/ga.pyx":1546 * and blo is None and bhi is None * and clo is None and chi is None): * GA_Elem_maximum(g_a, g_b, g_c) # <<<<<<<<<<<<<< * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) */ GA_Elem_maximum(__pyx_v_g_a, __pyx_v_g_b, __pyx_v_g_c); goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":1548 * GA_Elem_maximum(g_a, g_b, g_c) * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) # <<<<<<<<<<<<<< * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * clo_nd,chi_nd = _lohi(g_c,clo,chi) */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_alo, __pyx_v_ahi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1548; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1548; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_9 = PyList_GET_ITEM(sequence, 0); __pyx_t_10 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_10); #else __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1548; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1548; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1548; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1548; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1548; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1548; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1548; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_13 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_alo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17); } } __pyx_pybuffernd_alo_nd.diminfo[0].strides = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_alo_nd.diminfo[0].shape = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1548; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_13 = 0; __pyx_v_alo_nd = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0; __pyx_t_13 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ahi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15); } } __pyx_pybuffernd_ahi_nd.diminfo[0].strides = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ahi_nd.diminfo[0].shape = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1548; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_13 = 0; __pyx_v_ahi_nd = ((PyArrayObject *)__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/ga.pyx":1549 * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) # <<<<<<<<<<<<<< * clo_nd,chi_nd = _lohi(g_c,clo,chi) * GA_Elem_maximum_patch64( */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_b, __pyx_v_blo, __pyx_v_bhi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_10 = PyList_GET_ITEM(sequence, 0); __pyx_t_9 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx_t_9); #else __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); index = 1; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L7_unpacking_done:; } if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_18 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_blo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17); } } __pyx_pybuffernd_blo_nd.diminfo[0].strides = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_blo_nd.diminfo[0].shape = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_18 = 0; __pyx_v_blo_nd = ((PyArrayObject *)__pyx_t_10); __pyx_t_10 = 0; __pyx_t_18 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_bhi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15); } } __pyx_pybuffernd_bhi_nd.diminfo[0].strides = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_bhi_nd.diminfo[0].shape = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_18 = 0; __pyx_v_bhi_nd = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0; /* "ga4py/ga.pyx":1550 * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * clo_nd,chi_nd = _lohi(g_c,clo,chi) # <<<<<<<<<<<<<< * GA_Elem_maximum_patch64( * g_a, alo_nd.data, ahi_nd.data, */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_c, __pyx_v_clo, __pyx_v_chi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_9 = PyList_GET_ITEM(sequence, 0); __pyx_t_10 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_10); #else __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L9_unpacking_done; __pyx_L8_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L9_unpacking_done:; } if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_19 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_clo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17); } } __pyx_pybuffernd_clo_nd.diminfo[0].strides = __pyx_pybuffernd_clo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_clo_nd.diminfo[0].shape = __pyx_pybuffernd_clo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_19 = 0; __pyx_v_clo_nd = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0; __pyx_t_19 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_chi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15); } } __pyx_pybuffernd_chi_nd.diminfo[0].strides = __pyx_pybuffernd_chi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_chi_nd.diminfo[0].shape = __pyx_pybuffernd_chi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_19 = 0; __pyx_v_chi_nd = ((PyArrayObject *)__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/ga.pyx":1554 * g_a, alo_nd.data, ahi_nd.data, * g_b, blo_nd.data, bhi_nd.data, * g_c, clo_nd.data, chi_nd.data) # <<<<<<<<<<<<<< * * def elem_minimum(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, */ GA_Elem_maximum_patch64(__pyx_v_g_a, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_g_b, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data), __pyx_v_g_c, ((int64_t *)__pyx_v_clo_nd->data), ((int64_t *)__pyx_v_chi_nd->data)); } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_11); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.elem_maximum", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_alo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_ahi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_blo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_bhi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_clo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_chi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_83elem_minimum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_82elem_minimum[] = "elem_minimum(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, bhi=None, clo=None, chi=None)\nComputes the element-wise minimum of the two arrays.\n\n Arrays or array patches must be of the same types and same number of\n elements. For two-dimensional arrays::\n\n c(i,j) = min(a(i,j),b(i,j))\n\n If the data type is complex, then::\n\n c(i,j).real = min{ |a(i,j)|, |b(i,j)|} while c(i,j).image = 0\n\n The result (c) may replace one of the input arrays (a/b).\n\n This is a collective operation. \n\n :Parameters:\n g_a : int\n the array handle\n g_b : int\n the array handle\n g_c : int\n the array handle\n alo : 1D array-like of integers\n lower bound patch coordinates of g_a, inclusive\n ahi : 1D array-like of integers\n higher bound patch coordinates of g_a, exclusive\n blo : 1D array-like of integers\n lower bound patch coordinates of g_b, inclusive\n bhi : 1D array-like of integers\n higher bound patch coordinates of g_b, exclusive\n clo : 1D array-like of integers\n lower bound patch coordinates of g_c, inclusive\n chi : 1D array-like of integers\n higher bound patch coordinates of g_c, exclusive\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_83elem_minimum = {__Pyx_NAMESTR("elem_minimum"), (PyCFunction)__pyx_pw_5ga4py_2ga_83elem_minimum, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_82elem_minimum)}; static PyObject *__pyx_pw_5ga4py_2ga_83elem_minimum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_b; int __pyx_v_g_c; PyObject *__pyx_v_alo = 0; PyObject *__pyx_v_ahi = 0; PyObject *__pyx_v_blo = 0; PyObject *__pyx_v_bhi = 0; PyObject *__pyx_v_clo = 0; PyObject *__pyx_v_chi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("elem_minimum (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_b,&__pyx_n_s__g_c,&__pyx_n_s__alo,&__pyx_n_s__ahi,&__pyx_n_s__blo,&__pyx_n_s__bhi,&__pyx_n_s__clo,&__pyx_n_s__chi,0}; PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; /* "ga4py/ga.pyx":1556 * g_c, clo_nd.data, chi_nd.data) * * def elem_minimum(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, # <<<<<<<<<<<<<< * bhi=None, clo=None, chi=None): * """Computes the element-wise minimum of the two arrays. */ values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); values[5] = ((PyObject *)Py_None); /* "ga4py/ga.pyx":1557 * * def elem_minimum(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, * bhi=None, clo=None, chi=None): # <<<<<<<<<<<<<< * """Computes the element-wise minimum of the two arrays. * */ values[6] = ((PyObject *)Py_None); values[7] = ((PyObject *)Py_None); values[8] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("elem_minimum", 0, 3, 9, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_c)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("elem_minimum", 0, 3, 9, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alo); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ahi); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__blo); if (value) { values[5] = value; kw_args--; } } case 6: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bhi); if (value) { values[6] = value; kw_args--; } } case 7: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__clo); if (value) { values[7] = value; kw_args--; } } case 8: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__chi); if (value) { values[8] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "elem_minimum") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_b = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_c = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_g_c == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_alo = values[3]; __pyx_v_ahi = values[4]; __pyx_v_blo = values[5]; __pyx_v_bhi = values[6]; __pyx_v_clo = values[7]; __pyx_v_chi = values[8]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("elem_minimum", 0, 3, 9, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.elem_minimum", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_82elem_minimum(__pyx_self, __pyx_v_g_a, __pyx_v_g_b, __pyx_v_g_c, __pyx_v_alo, __pyx_v_ahi, __pyx_v_blo, __pyx_v_bhi, __pyx_v_clo, __pyx_v_chi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1556 * g_c, clo_nd.data, chi_nd.data) * * def elem_minimum(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, # <<<<<<<<<<<<<< * bhi=None, clo=None, chi=None): * """Computes the element-wise minimum of the two arrays. */ static PyObject *__pyx_pf_5ga4py_2ga_82elem_minimum(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, int __pyx_v_g_c, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, PyObject *__pyx_v_clo, PyObject *__pyx_v_chi) { PyArrayObject *__pyx_v_alo_nd = 0; PyArrayObject *__pyx_v_ahi_nd = 0; PyArrayObject *__pyx_v_blo_nd = 0; PyArrayObject *__pyx_v_bhi_nd = 0; PyArrayObject *__pyx_v_clo_nd = 0; PyArrayObject *__pyx_v_chi_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_ahi_nd; __Pyx_Buffer __pyx_pybuffer_ahi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_alo_nd; __Pyx_Buffer __pyx_pybuffer_alo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_bhi_nd; __Pyx_Buffer __pyx_pybuffer_bhi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_blo_nd; __Pyx_Buffer __pyx_pybuffer_blo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_chi_nd; __Pyx_Buffer __pyx_pybuffer_chi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_clo_nd; __Pyx_Buffer __pyx_pybuffer_clo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; PyObject *(*__pyx_t_12)(PyObject *); PyArrayObject *__pyx_t_13 = NULL; int __pyx_t_14; PyObject *__pyx_t_15 = NULL; PyObject *__pyx_t_16 = NULL; PyObject *__pyx_t_17 = NULL; PyArrayObject *__pyx_t_18 = NULL; PyArrayObject *__pyx_t_19 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("elem_minimum", 0); __pyx_pybuffer_alo_nd.pybuffer.buf = NULL; __pyx_pybuffer_alo_nd.refcount = 0; __pyx_pybuffernd_alo_nd.data = NULL; __pyx_pybuffernd_alo_nd.rcbuffer = &__pyx_pybuffer_alo_nd; __pyx_pybuffer_ahi_nd.pybuffer.buf = NULL; __pyx_pybuffer_ahi_nd.refcount = 0; __pyx_pybuffernd_ahi_nd.data = NULL; __pyx_pybuffernd_ahi_nd.rcbuffer = &__pyx_pybuffer_ahi_nd; __pyx_pybuffer_blo_nd.pybuffer.buf = NULL; __pyx_pybuffer_blo_nd.refcount = 0; __pyx_pybuffernd_blo_nd.data = NULL; __pyx_pybuffernd_blo_nd.rcbuffer = &__pyx_pybuffer_blo_nd; __pyx_pybuffer_bhi_nd.pybuffer.buf = NULL; __pyx_pybuffer_bhi_nd.refcount = 0; __pyx_pybuffernd_bhi_nd.data = NULL; __pyx_pybuffernd_bhi_nd.rcbuffer = &__pyx_pybuffer_bhi_nd; __pyx_pybuffer_clo_nd.pybuffer.buf = NULL; __pyx_pybuffer_clo_nd.refcount = 0; __pyx_pybuffernd_clo_nd.data = NULL; __pyx_pybuffernd_clo_nd.rcbuffer = &__pyx_pybuffer_clo_nd; __pyx_pybuffer_chi_nd.pybuffer.buf = NULL; __pyx_pybuffer_chi_nd.refcount = 0; __pyx_pybuffernd_chi_nd.data = NULL; __pyx_pybuffernd_chi_nd.rcbuffer = &__pyx_pybuffer_chi_nd; /* "ga4py/ga.pyx":1597 * cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd * cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd * if (alo is None and ahi is None # <<<<<<<<<<<<<< * and blo is None and bhi is None * and clo is None and chi is None): */ __pyx_t_1 = (__pyx_v_alo == Py_None); if ((__pyx_t_1 != 0)) { /* "ga4py/ga.pyx":1598 * cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd * if (alo is None and ahi is None * and blo is None and bhi is None # <<<<<<<<<<<<<< * and clo is None and chi is None): * GA_Elem_minimum(g_a, g_b, g_c) */ __pyx_t_2 = (__pyx_v_ahi == Py_None); if ((__pyx_t_2 != 0)) { __pyx_t_3 = (__pyx_v_blo == Py_None); if ((__pyx_t_3 != 0)) { /* "ga4py/ga.pyx":1599 * if (alo is None and ahi is None * and blo is None and bhi is None * and clo is None and chi is None): # <<<<<<<<<<<<<< * GA_Elem_minimum(g_a, g_b, g_c) * else: */ __pyx_t_4 = (__pyx_v_bhi == Py_None); if ((__pyx_t_4 != 0)) { __pyx_t_5 = (__pyx_v_clo == Py_None); if ((__pyx_t_5 != 0)) { __pyx_t_6 = (__pyx_v_chi == Py_None); __pyx_t_7 = (__pyx_t_6 != 0); } else { __pyx_t_7 = (__pyx_t_5 != 0); } __pyx_t_5 = __pyx_t_7; } else { __pyx_t_5 = (__pyx_t_4 != 0); } __pyx_t_4 = __pyx_t_5; } else { __pyx_t_4 = (__pyx_t_3 != 0); } __pyx_t_3 = __pyx_t_4; } else { __pyx_t_3 = (__pyx_t_2 != 0); } __pyx_t_2 = __pyx_t_3; } else { __pyx_t_2 = (__pyx_t_1 != 0); } if (__pyx_t_2) { /* "ga4py/ga.pyx":1600 * and blo is None and bhi is None * and clo is None and chi is None): * GA_Elem_minimum(g_a, g_b, g_c) # <<<<<<<<<<<<<< * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) */ GA_Elem_minimum(__pyx_v_g_a, __pyx_v_g_b, __pyx_v_g_c); goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":1602 * GA_Elem_minimum(g_a, g_b, g_c) * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) # <<<<<<<<<<<<<< * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * clo_nd,chi_nd = _lohi(g_c,clo,chi) */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_alo, __pyx_v_ahi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_9 = PyList_GET_ITEM(sequence, 0); __pyx_t_10 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_10); #else __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_13 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_alo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17); } } __pyx_pybuffernd_alo_nd.diminfo[0].strides = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_alo_nd.diminfo[0].shape = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_13 = 0; __pyx_v_alo_nd = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0; __pyx_t_13 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ahi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15); } } __pyx_pybuffernd_ahi_nd.diminfo[0].strides = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ahi_nd.diminfo[0].shape = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_13 = 0; __pyx_v_ahi_nd = ((PyArrayObject *)__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/ga.pyx":1603 * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) # <<<<<<<<<<<<<< * clo_nd,chi_nd = _lohi(g_c,clo,chi) * GA_Elem_minimum_patch64( */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_b, __pyx_v_blo, __pyx_v_bhi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1603; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1603; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_10 = PyList_GET_ITEM(sequence, 0); __pyx_t_9 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx_t_9); #else __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1603; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1603; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1603; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); index = 1; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1603; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1603; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L7_unpacking_done:; } if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1603; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1603; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_18 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_blo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17); } } __pyx_pybuffernd_blo_nd.diminfo[0].strides = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_blo_nd.diminfo[0].shape = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1603; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_18 = 0; __pyx_v_blo_nd = ((PyArrayObject *)__pyx_t_10); __pyx_t_10 = 0; __pyx_t_18 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_bhi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15); } } __pyx_pybuffernd_bhi_nd.diminfo[0].strides = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_bhi_nd.diminfo[0].shape = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1603; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_18 = 0; __pyx_v_bhi_nd = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0; /* "ga4py/ga.pyx":1604 * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * clo_nd,chi_nd = _lohi(g_c,clo,chi) # <<<<<<<<<<<<<< * GA_Elem_minimum_patch64( * g_a, alo_nd.data, ahi_nd.data, */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_c, __pyx_v_clo, __pyx_v_chi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_9 = PyList_GET_ITEM(sequence, 0); __pyx_t_10 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_10); #else __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L9_unpacking_done; __pyx_L8_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L9_unpacking_done:; } if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_19 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_clo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17); } } __pyx_pybuffernd_clo_nd.diminfo[0].strides = __pyx_pybuffernd_clo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_clo_nd.diminfo[0].shape = __pyx_pybuffernd_clo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_19 = 0; __pyx_v_clo_nd = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0; __pyx_t_19 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_chi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15); } } __pyx_pybuffernd_chi_nd.diminfo[0].strides = __pyx_pybuffernd_chi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_chi_nd.diminfo[0].shape = __pyx_pybuffernd_chi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_19 = 0; __pyx_v_chi_nd = ((PyArrayObject *)__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/ga.pyx":1608 * g_a, alo_nd.data, ahi_nd.data, * g_b, blo_nd.data, bhi_nd.data, * g_c, clo_nd.data, chi_nd.data) # <<<<<<<<<<<<<< * * def elem_multiply(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, */ GA_Elem_minimum_patch64(__pyx_v_g_a, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_g_b, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data), __pyx_v_g_c, ((int64_t *)__pyx_v_clo_nd->data), ((int64_t *)__pyx_v_chi_nd->data)); } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_11); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.elem_minimum", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_alo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_ahi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_blo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_bhi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_clo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_chi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_85elem_multiply(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_84elem_multiply[] = "elem_multiply(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, bhi=None, clo=None, chi=None)\nComputes the element-wise product of the two arrays.\n\n Arrays or array patches must be of the same types and same number of\n elements. For two-dimensional arrays:\n\n c(i, j) = a(i,j)*b(i,j)\n\n The result (c) may replace one of the input arrays (a/b).\n\n This is a collective operation. \n\n :Parameters:\n g_a : int\n the array handle\n g_b : int\n the array handle\n g_c : int\n the array handle\n alo : 1D array-like of integers\n lower bound patch coordinates of g_a, inclusive\n ahi : 1D array-like of integers\n higher bound patch coordinates of g_a, exclusive\n blo : 1D array-like of integers\n lower bound patch coordinates of g_b, inclusive\n bhi : 1D array-like of integers\n higher bound patch coordinates of g_b, exclusive\n clo : 1D array-like of integers\n lower bound patch coordinates of g_c, inclusive\n chi : 1D array-like of integers\n higher bound patch coordinates of g_c, exclusive\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_85elem_multiply = {__Pyx_NAMESTR("elem_multiply"), (PyCFunction)__pyx_pw_5ga4py_2ga_85elem_multiply, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_84elem_multiply)}; static PyObject *__pyx_pw_5ga4py_2ga_85elem_multiply(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_b; int __pyx_v_g_c; PyObject *__pyx_v_alo = 0; PyObject *__pyx_v_ahi = 0; PyObject *__pyx_v_blo = 0; PyObject *__pyx_v_bhi = 0; PyObject *__pyx_v_clo = 0; PyObject *__pyx_v_chi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("elem_multiply (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_b,&__pyx_n_s__g_c,&__pyx_n_s__alo,&__pyx_n_s__ahi,&__pyx_n_s__blo,&__pyx_n_s__bhi,&__pyx_n_s__clo,&__pyx_n_s__chi,0}; PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; /* "ga4py/ga.pyx":1610 * g_c, clo_nd.data, chi_nd.data) * * def elem_multiply(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, # <<<<<<<<<<<<<< * bhi=None, clo=None, chi=None): * """Computes the element-wise product of the two arrays. */ values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); values[5] = ((PyObject *)Py_None); /* "ga4py/ga.pyx":1611 * * def elem_multiply(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, * bhi=None, clo=None, chi=None): # <<<<<<<<<<<<<< * """Computes the element-wise product of the two arrays. * */ values[6] = ((PyObject *)Py_None); values[7] = ((PyObject *)Py_None); values[8] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("elem_multiply", 0, 3, 9, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1610; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_c)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("elem_multiply", 0, 3, 9, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1610; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alo); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ahi); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__blo); if (value) { values[5] = value; kw_args--; } } case 6: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bhi); if (value) { values[6] = value; kw_args--; } } case 7: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__clo); if (value) { values[7] = value; kw_args--; } } case 8: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__chi); if (value) { values[8] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "elem_multiply") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1610; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1610; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_b = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1610; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_c = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_g_c == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1610; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_alo = values[3]; __pyx_v_ahi = values[4]; __pyx_v_blo = values[5]; __pyx_v_bhi = values[6]; __pyx_v_clo = values[7]; __pyx_v_chi = values[8]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("elem_multiply", 0, 3, 9, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1610; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.elem_multiply", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_84elem_multiply(__pyx_self, __pyx_v_g_a, __pyx_v_g_b, __pyx_v_g_c, __pyx_v_alo, __pyx_v_ahi, __pyx_v_blo, __pyx_v_bhi, __pyx_v_clo, __pyx_v_chi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1610 * g_c, clo_nd.data, chi_nd.data) * * def elem_multiply(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, # <<<<<<<<<<<<<< * bhi=None, clo=None, chi=None): * """Computes the element-wise product of the two arrays. */ static PyObject *__pyx_pf_5ga4py_2ga_84elem_multiply(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, int __pyx_v_g_c, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, PyObject *__pyx_v_clo, PyObject *__pyx_v_chi) { PyArrayObject *__pyx_v_alo_nd = 0; PyArrayObject *__pyx_v_ahi_nd = 0; PyArrayObject *__pyx_v_blo_nd = 0; PyArrayObject *__pyx_v_bhi_nd = 0; PyArrayObject *__pyx_v_clo_nd = 0; PyArrayObject *__pyx_v_chi_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_ahi_nd; __Pyx_Buffer __pyx_pybuffer_ahi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_alo_nd; __Pyx_Buffer __pyx_pybuffer_alo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_bhi_nd; __Pyx_Buffer __pyx_pybuffer_bhi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_blo_nd; __Pyx_Buffer __pyx_pybuffer_blo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_chi_nd; __Pyx_Buffer __pyx_pybuffer_chi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_clo_nd; __Pyx_Buffer __pyx_pybuffer_clo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; PyObject *(*__pyx_t_12)(PyObject *); PyArrayObject *__pyx_t_13 = NULL; int __pyx_t_14; PyObject *__pyx_t_15 = NULL; PyObject *__pyx_t_16 = NULL; PyObject *__pyx_t_17 = NULL; PyArrayObject *__pyx_t_18 = NULL; PyArrayObject *__pyx_t_19 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("elem_multiply", 0); __pyx_pybuffer_alo_nd.pybuffer.buf = NULL; __pyx_pybuffer_alo_nd.refcount = 0; __pyx_pybuffernd_alo_nd.data = NULL; __pyx_pybuffernd_alo_nd.rcbuffer = &__pyx_pybuffer_alo_nd; __pyx_pybuffer_ahi_nd.pybuffer.buf = NULL; __pyx_pybuffer_ahi_nd.refcount = 0; __pyx_pybuffernd_ahi_nd.data = NULL; __pyx_pybuffernd_ahi_nd.rcbuffer = &__pyx_pybuffer_ahi_nd; __pyx_pybuffer_blo_nd.pybuffer.buf = NULL; __pyx_pybuffer_blo_nd.refcount = 0; __pyx_pybuffernd_blo_nd.data = NULL; __pyx_pybuffernd_blo_nd.rcbuffer = &__pyx_pybuffer_blo_nd; __pyx_pybuffer_bhi_nd.pybuffer.buf = NULL; __pyx_pybuffer_bhi_nd.refcount = 0; __pyx_pybuffernd_bhi_nd.data = NULL; __pyx_pybuffernd_bhi_nd.rcbuffer = &__pyx_pybuffer_bhi_nd; __pyx_pybuffer_clo_nd.pybuffer.buf = NULL; __pyx_pybuffer_clo_nd.refcount = 0; __pyx_pybuffernd_clo_nd.data = NULL; __pyx_pybuffernd_clo_nd.rcbuffer = &__pyx_pybuffer_clo_nd; __pyx_pybuffer_chi_nd.pybuffer.buf = NULL; __pyx_pybuffer_chi_nd.refcount = 0; __pyx_pybuffernd_chi_nd.data = NULL; __pyx_pybuffernd_chi_nd.rcbuffer = &__pyx_pybuffer_chi_nd; /* "ga4py/ga.pyx":1647 * cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd * cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd * if (alo is None and ahi is None # <<<<<<<<<<<<<< * and blo is None and bhi is None * and clo is None and chi is None): */ __pyx_t_1 = (__pyx_v_alo == Py_None); if ((__pyx_t_1 != 0)) { /* "ga4py/ga.pyx":1648 * cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd * if (alo is None and ahi is None * and blo is None and bhi is None # <<<<<<<<<<<<<< * and clo is None and chi is None): * GA_Elem_multiply(g_a, g_b, g_c) */ __pyx_t_2 = (__pyx_v_ahi == Py_None); if ((__pyx_t_2 != 0)) { __pyx_t_3 = (__pyx_v_blo == Py_None); if ((__pyx_t_3 != 0)) { /* "ga4py/ga.pyx":1649 * if (alo is None and ahi is None * and blo is None and bhi is None * and clo is None and chi is None): # <<<<<<<<<<<<<< * GA_Elem_multiply(g_a, g_b, g_c) * else: */ __pyx_t_4 = (__pyx_v_bhi == Py_None); if ((__pyx_t_4 != 0)) { __pyx_t_5 = (__pyx_v_clo == Py_None); if ((__pyx_t_5 != 0)) { __pyx_t_6 = (__pyx_v_chi == Py_None); __pyx_t_7 = (__pyx_t_6 != 0); } else { __pyx_t_7 = (__pyx_t_5 != 0); } __pyx_t_5 = __pyx_t_7; } else { __pyx_t_5 = (__pyx_t_4 != 0); } __pyx_t_4 = __pyx_t_5; } else { __pyx_t_4 = (__pyx_t_3 != 0); } __pyx_t_3 = __pyx_t_4; } else { __pyx_t_3 = (__pyx_t_2 != 0); } __pyx_t_2 = __pyx_t_3; } else { __pyx_t_2 = (__pyx_t_1 != 0); } if (__pyx_t_2) { /* "ga4py/ga.pyx":1650 * and blo is None and bhi is None * and clo is None and chi is None): * GA_Elem_multiply(g_a, g_b, g_c) # <<<<<<<<<<<<<< * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) */ GA_Elem_multiply(__pyx_v_g_a, __pyx_v_g_b, __pyx_v_g_c); goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":1652 * GA_Elem_multiply(g_a, g_b, g_c) * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) # <<<<<<<<<<<<<< * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * clo_nd,chi_nd = _lohi(g_c,clo,chi) */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_alo, __pyx_v_ahi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_9 = PyList_GET_ITEM(sequence, 0); __pyx_t_10 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_10); #else __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_13 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_alo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17); } } __pyx_pybuffernd_alo_nd.diminfo[0].strides = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_alo_nd.diminfo[0].shape = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_13 = 0; __pyx_v_alo_nd = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0; __pyx_t_13 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ahi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15); } } __pyx_pybuffernd_ahi_nd.diminfo[0].strides = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ahi_nd.diminfo[0].shape = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_13 = 0; __pyx_v_ahi_nd = ((PyArrayObject *)__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/ga.pyx":1653 * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) # <<<<<<<<<<<<<< * clo_nd,chi_nd = _lohi(g_c,clo,chi) * GA_Elem_multiply_patch64( */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_b, __pyx_v_blo, __pyx_v_bhi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_10 = PyList_GET_ITEM(sequence, 0); __pyx_t_9 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx_t_9); #else __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); index = 1; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L7_unpacking_done:; } if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_18 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_blo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17); } } __pyx_pybuffernd_blo_nd.diminfo[0].strides = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_blo_nd.diminfo[0].shape = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_18 = 0; __pyx_v_blo_nd = ((PyArrayObject *)__pyx_t_10); __pyx_t_10 = 0; __pyx_t_18 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_bhi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15); } } __pyx_pybuffernd_bhi_nd.diminfo[0].strides = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_bhi_nd.diminfo[0].shape = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_18 = 0; __pyx_v_bhi_nd = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0; /* "ga4py/ga.pyx":1654 * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * clo_nd,chi_nd = _lohi(g_c,clo,chi) # <<<<<<<<<<<<<< * GA_Elem_multiply_patch64( * g_a, alo_nd.data, ahi_nd.data, */ __pyx_t_8 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_c, __pyx_v_clo, __pyx_v_chi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_9 = PyList_GET_ITEM(sequence, 0); __pyx_t_10 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_10); #else __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_9 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L9_unpacking_done; __pyx_L8_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L9_unpacking_done:; } if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_19 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_clo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17); } } __pyx_pybuffernd_clo_nd.diminfo[0].strides = __pyx_pybuffernd_clo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_clo_nd.diminfo[0].shape = __pyx_pybuffernd_clo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_19 = 0; __pyx_v_clo_nd = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0; __pyx_t_19 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_14 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_chi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15); } } __pyx_pybuffernd_chi_nd.diminfo[0].strides = __pyx_pybuffernd_chi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_chi_nd.diminfo[0].shape = __pyx_pybuffernd_chi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_19 = 0; __pyx_v_chi_nd = ((PyArrayObject *)__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/ga.pyx":1658 * g_a, alo_nd.data, ahi_nd.data, * g_b, blo_nd.data, bhi_nd.data, * g_c, clo_nd.data, chi_nd.data) # <<<<<<<<<<<<<< * * def error(char *message, int code=1): */ GA_Elem_multiply_patch64(__pyx_v_g_a, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_g_b, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data), __pyx_v_g_c, ((int64_t *)__pyx_v_clo_nd->data), ((int64_t *)__pyx_v_chi_nd->data)); } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_11); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.elem_multiply", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_alo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_ahi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_blo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_bhi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_clo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_chi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_87error(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_86error[] = "error(char *message, int code=1)\nPrints message and aborts safely with code."; static PyMethodDef __pyx_mdef_5ga4py_2ga_87error = {__Pyx_NAMESTR("error"), (PyCFunction)__pyx_pw_5ga4py_2ga_87error, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_86error)}; static PyObject *__pyx_pw_5ga4py_2ga_87error(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { char *__pyx_v_message; int __pyx_v_code; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("error (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__message,&__pyx_n_s__code,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__message)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__code); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "error") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_message = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_message) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L3_error;} if (values[1]) { __pyx_v_code = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_code == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_code = ((int)1); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("error", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.error", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_86error(__pyx_self, __pyx_v_message, __pyx_v_code); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1660 * g_c, clo_nd.data, chi_nd.data) * * def error(char *message, int code=1): # <<<<<<<<<<<<<< * """Prints message and aborts safely with code.""" * GA_Error(message, code) */ static PyObject *__pyx_pf_5ga4py_2ga_86error(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_message, int __pyx_v_code) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("error", 0); /* "ga4py/ga.pyx":1662 * def error(char *message, int code=1): * """Prints message and aborts safely with code.""" * GA_Error(message, code) # <<<<<<<<<<<<<< * * def fence(): */ GA_Error(__pyx_v_message, __pyx_v_code); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_89fence(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_88fence[] = "fence()\nBlocks the calling process until all the data transfers corresponding\n to GA operations called after ga.init_fence() complete.\n \n For example, since ga.put might return before the data reaches the final\n destination, ga_init_fence and ga_fence allow processes to wait until the\n data tranfer is fully completed:\n\n ga.init_fence()\n ga.put(g_a, ...)\n ga.fence()\n\n ga.fence() must be called after ga.init_fence(). A barrier, ga.sync(),\n assures completion of all data transfers and implicitly cancels all\n outstanding ga.init_fence() calls. ga.init_fence() and ga.fence() must be\n used in pairs, multiple calls to ga.fence() require the same number of\n corresponding ga.init_fence() calls. ga.init_fence()/ga_fence() pairs can\n be nested.\n\n ga.fence() works for multiple GA operations. For example:\n\n ga.init_fence()\n ga.put(g_a, ...)\n ga.scatter(g_a, ...)\n ga.put(g_b, ...)\n ga.fence()\n\n The calling process will be blocked until data movements initiated by two\n calls to ga_put and one ga_scatter complete.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_89fence = {__Pyx_NAMESTR("fence"), (PyCFunction)__pyx_pw_5ga4py_2ga_89fence, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_88fence)}; static PyObject *__pyx_pw_5ga4py_2ga_89fence(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("fence (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_88fence(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1664 * GA_Error(message, code) * * def fence(): # <<<<<<<<<<<<<< * """Blocks the calling process until all the data transfers corresponding * to GA operations called after ga.init_fence() complete. */ static PyObject *__pyx_pf_5ga4py_2ga_88fence(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("fence", 0); /* "ga4py/ga.pyx":1695 * * """ * GA_Fence() # <<<<<<<<<<<<<< * * def fill(int g_a, value, lo=None, hi=None): */ GA_Fence(); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_91fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_90fill[] = "fill(int g_a, value, lo=None, hi=None)\nAssign a single value to all elements in the array or patch.\n \n :Parameters:\n g_a : int\n the array handle\n lo : 1D array-like of integers\n lower bound patch coordinates, inclusive\n hi : 1D array-like of integers\n higher bound patch coordinates, exclusive\n \n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_91fill = {__Pyx_NAMESTR("fill"), (PyCFunction)__pyx_pw_5ga4py_2ga_91fill, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_90fill)}; static PyObject *__pyx_pw_5ga4py_2ga_91fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_value = 0; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("fill (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__value,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/ga.pyx":1697 * GA_Fence() * * def fill(int g_a, value, lo=None, hi=None): # <<<<<<<<<<<<<< * """Assign a single value to all elements in the array or patch. * */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("fill", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fill") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_value = values[1]; __pyx_v_lo = values[2]; __pyx_v_hi = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("fill", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.fill", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_90fill(__pyx_self, __pyx_v_g_a, __pyx_v_value, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_90fill(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_value, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyArrayObject *__pyx_v_lo_nd = 0; PyArrayObject *__pyx_v_hi_nd = 0; int __pyx_v_ivalue; long __pyx_v_lvalue; PY_LONG_LONG __pyx_v_llvalue; float __pyx_v_fvalue; double __pyx_v_dvalue; long double __pyx_v_ldvalue; SingleComplex __pyx_v_fcvalue; DoubleComplex __pyx_v_dcvalue; void *__pyx_v_vvalue; int __pyx_v_gtype; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_nd; __Pyx_Buffer __pyx_pybuffer_lo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *(*__pyx_t_8)(PyObject *); PyArrayObject *__pyx_t_9 = NULL; int __pyx_t_10; PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("fill", 0); __pyx_pybuffer_lo_nd.pybuffer.buf = NULL; __pyx_pybuffer_lo_nd.refcount = 0; __pyx_pybuffernd_lo_nd.data = NULL; __pyx_pybuffernd_lo_nd.rcbuffer = &__pyx_pybuffer_lo_nd; __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; /* "ga4py/ga.pyx":1719 * cdef DoubleComplex dcvalue * cdef void *vvalue * cdef int gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * vvalue = _convert_multiplier(gtype, value, * &ivalue, &lvalue, &llvalue, */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":1723 * &ivalue, &lvalue, &llvalue, * &fvalue, &dvalue, &ldvalue, * &fcvalue, &dcvalue) # <<<<<<<<<<<<<< * if lo is None and hi is None: * GA_Fill(g_a, vvalue) */ __pyx_v_vvalue = __pyx_f_5ga4py_2ga__convert_multiplier(__pyx_v_gtype, __pyx_v_value, (&__pyx_v_ivalue), (&__pyx_v_lvalue), (&__pyx_v_llvalue), (&__pyx_v_fvalue), (&__pyx_v_dvalue), (&__pyx_v_ldvalue), (&__pyx_v_fcvalue), (&__pyx_v_dcvalue)); /* "ga4py/ga.pyx":1724 * &fvalue, &dvalue, &ldvalue, * &fcvalue, &dcvalue) * if lo is None and hi is None: # <<<<<<<<<<<<<< * GA_Fill(g_a, vvalue) * else: */ __pyx_t_1 = (__pyx_v_lo == Py_None); if ((__pyx_t_1 != 0)) { __pyx_t_2 = (__pyx_v_hi == Py_None); __pyx_t_3 = (__pyx_t_2 != 0); } else { __pyx_t_3 = (__pyx_t_1 != 0); } if (__pyx_t_3) { /* "ga4py/ga.pyx":1725 * &fcvalue, &dcvalue) * if lo is None and hi is None: * GA_Fill(g_a, vvalue) # <<<<<<<<<<<<<< * else: * lo_nd,hi_nd = _lohi(g_a,lo,hi) */ GA_Fill(__pyx_v_g_a, __pyx_v_vvalue); goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":1727 * GA_Fill(g_a, vvalue) * else: * lo_nd,hi_nd = _lohi(g_a,lo,hi) # <<<<<<<<<<<<<< * NGA_Fill_patch64( * g_a, lo_nd.data, hi_nd.data, vvalue) */ __pyx_t_4 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) { PyObject* sequence = __pyx_t_4; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_5 = PyList_GET_ITEM(sequence, 0); __pyx_t_6 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); #endif __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_9 = 0; __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = ((PyArrayObject *)__pyx_t_6); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_13, __pyx_t_12, __pyx_t_11); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_9 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/ga.pyx":1729 * lo_nd,hi_nd = _lohi(g_a,lo,hi) * NGA_Fill_patch64( * g_a, lo_nd.data, hi_nd.data, vvalue) # <<<<<<<<<<<<<< * * def gather(int g_a, subsarray, np.ndarray values=None): */ NGA_Fill_patch64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), __pyx_v_vvalue); } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.fill", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_lo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_93gather(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_92gather[] = "gather(int g_a, subsarray, ndarray values=None)\nGathers array elements from a global array into a local array.\n\n subsarray will be converted to an ndarray if it is not one already. A\n two-dimensional array is allowed so long as its shape is (n,ndim) where n\n is the number of elements to gather and ndim is the number of dimensions\n of the target array. Also, subsarray must be contiguous.\n\n For example, if the subsarray were two-dimensional::\n\n for k in range(n):\n v[k] = g_a[subsarray[k,0],subsarray[k,1],subsarray[k,2]...]\n\n For example, if the subsarray were one-dimensional::\n\n for k in range(n):\n base = n*ndim\n v[k] = g_a[subsarray[base+0],subsarray[base+1],subsarray[base+2]...]\n\n This is a one-sided operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_93gather = {__Pyx_NAMESTR("gather"), (PyCFunction)__pyx_pw_5ga4py_2ga_93gather, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_92gather)}; static PyObject *__pyx_pw_5ga4py_2ga_93gather(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_subsarray = 0; PyArrayObject *__pyx_v_values = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("gather (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__subsarray,&__pyx_n_s__values,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/ga.pyx":1731 * g_a, lo_nd.data, hi_nd.data, vvalue) * * def gather(int g_a, subsarray, np.ndarray values=None): # <<<<<<<<<<<<<< * """Gathers array elements from a global array into a local array. * */ values[2] = (PyObject *)((PyArrayObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__subsarray)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("gather", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1731; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__values); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gather") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1731; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1731; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_subsarray = values[1]; __pyx_v_values = ((PyArrayObject *)values[2]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("gather", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1731; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.gather", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_values), __pyx_ptype_5numpy_ndarray, 1, "values", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = __pyx_pf_5ga4py_2ga_92gather(__pyx_self, __pyx_v_g_a, __pyx_v_subsarray, __pyx_v_values); goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_92gather(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_subsarray, PyArrayObject *__pyx_v_values) { PyArrayObject *__pyx_v_subsarray1_nd = 0; PyArrayObject *__pyx_v_subsarray2_nd = 0; int __pyx_v_gtype; int __pyx_v_ndim; int64_t __pyx_v_n; __Pyx_LocalBuf_ND __pyx_pybuffernd_subsarray1_nd; __Pyx_Buffer __pyx_pybuffer_subsarray1_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_subsarray2_nd; __Pyx_Buffer __pyx_pybuffer_subsarray2_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyArrayObject *__pyx_t_1 = NULL; PyArrayObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; int __pyx_t_11; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; PyObject *__pyx_t_14 = NULL; Py_ssize_t __pyx_t_15; PyObject *__pyx_t_16 = NULL; PyObject *__pyx_t_17 = NULL; PyObject *__pyx_t_18 = NULL; PyObject *__pyx_t_19 = NULL; PyObject *__pyx_t_20 = NULL; PyObject *__pyx_t_21 = NULL; int __pyx_t_22; int __pyx_t_23; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("gather", 0); __Pyx_INCREF((PyObject *)__pyx_v_values); __pyx_pybuffer_subsarray1_nd.pybuffer.buf = NULL; __pyx_pybuffer_subsarray1_nd.refcount = 0; __pyx_pybuffernd_subsarray1_nd.data = NULL; __pyx_pybuffernd_subsarray1_nd.rcbuffer = &__pyx_pybuffer_subsarray1_nd; __pyx_pybuffer_subsarray2_nd.pybuffer.buf = NULL; __pyx_pybuffer_subsarray2_nd.refcount = 0; __pyx_pybuffernd_subsarray2_nd.data = NULL; __pyx_pybuffernd_subsarray2_nd.rcbuffer = &__pyx_pybuffer_subsarray2_nd; /* "ga4py/ga.pyx":1753 * * """ * cdef np.ndarray[np.int64_t, ndim=1] subsarray1_nd = None # <<<<<<<<<<<<<< * cdef np.ndarray[np.int64_t, ndim=2] subsarray2_nd = None * cdef int gtype = inquire_type(g_a) */ __pyx_t_1 = ((PyArrayObject *)Py_None); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { __pyx_v_subsarray1_nd = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1753; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_pybuffernd_subsarray1_nd.diminfo[0].strides = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subsarray1_nd.diminfo[0].shape = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.shape[0]; } } __pyx_t_1 = 0; __Pyx_INCREF(Py_None); __pyx_v_subsarray1_nd = ((PyArrayObject *)Py_None); /* "ga4py/ga.pyx":1754 * """ * cdef np.ndarray[np.int64_t, ndim=1] subsarray1_nd = None * cdef np.ndarray[np.int64_t, ndim=2] subsarray2_nd = None # <<<<<<<<<<<<<< * cdef int gtype = inquire_type(g_a) * cdef int ndim = GA_Ndim(g_a) */ __pyx_t_2 = ((PyArrayObject *)Py_None); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) { __pyx_v_subsarray2_nd = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1754; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_pybuffernd_subsarray2_nd.diminfo[0].strides = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subsarray2_nd.diminfo[0].shape = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_subsarray2_nd.diminfo[1].strides = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_subsarray2_nd.diminfo[1].shape = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.shape[1]; } } __pyx_t_2 = 0; __Pyx_INCREF(Py_None); __pyx_v_subsarray2_nd = ((PyArrayObject *)Py_None); /* "ga4py/ga.pyx":1755 * cdef np.ndarray[np.int64_t, ndim=1] subsarray1_nd = None * cdef np.ndarray[np.int64_t, ndim=2] subsarray2_nd = None * cdef int gtype = inquire_type(g_a) # <<<<<<<<<<<<<< * cdef int ndim = GA_Ndim(g_a) * cdef int64_t n */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":1756 * cdef np.ndarray[np.int64_t, ndim=2] subsarray2_nd = None * cdef int gtype = inquire_type(g_a) * cdef int ndim = GA_Ndim(g_a) # <<<<<<<<<<<<<< * cdef int64_t n * # prepare subsarray */ __pyx_v_ndim = GA_Ndim(__pyx_v_g_a); /* "ga4py/ga.pyx":1759 * cdef int64_t n * # prepare subsarray * try: # <<<<<<<<<<<<<< * subsarray1_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray1_nd) / ndim */ { __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); __Pyx_XGOTREF(__pyx_t_3); __Pyx_XGOTREF(__pyx_t_4); __Pyx_XGOTREF(__pyx_t_5); /*try:*/ { /* "ga4py/ga.pyx":1760 * # prepare subsarray * try: * subsarray1_nd = np.ascontiguousarray(subsarray, dtype=np.int64) # <<<<<<<<<<<<<< * n = len(subsarray1_nd) / ndim * except ValueError: */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1760; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__ascontiguousarray); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1760; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1760; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_subsarray); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_subsarray); __Pyx_GIVEREF(__pyx_v_subsarray); __pyx_t_8 = PyDict_New(); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1760; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_8)); __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1760; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s__int64); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1760; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (PyDict_SetItem(__pyx_t_8, ((PyObject *)__pyx_n_s__dtype), __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1760; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_8)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1760; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1760; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_t_1 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer); __pyx_t_11 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_11 < 0)) { PyErr_Fetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_subsarray1_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_12, __pyx_t_13, __pyx_t_14); } } __pyx_pybuffernd_subsarray1_nd.diminfo[0].strides = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subsarray1_nd.diminfo[0].shape = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1760; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_subsarray1_nd, ((PyArrayObject *)__pyx_t_10)); __pyx_t_10 = 0; /* "ga4py/ga.pyx":1761 * try: * subsarray1_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray1_nd) / ndim # <<<<<<<<<<<<<< * except ValueError: * subsarray1_nd = None */ __pyx_t_15 = PyObject_Length(((PyObject *)__pyx_v_subsarray1_nd)); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1761; __pyx_clineno = __LINE__; goto __pyx_L3_error;} if (unlikely(__pyx_v_ndim == 0)) { #ifdef WITH_THREAD PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); #endif PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero"); #ifdef WITH_THREAD PyGILState_Release(__pyx_gilstate_save); #endif {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1761; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else if (sizeof(Py_ssize_t) == sizeof(long) && unlikely(__pyx_v_ndim == -1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_15))) { #ifdef WITH_THREAD PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); #endif PyErr_Format(PyExc_OverflowError, "value too large to perform division"); #ifdef WITH_THREAD PyGILState_Release(__pyx_gilstate_save); #endif {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1761; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_n = __Pyx_div_Py_ssize_t(__pyx_t_15, __pyx_v_ndim); } __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L10_try_end; __pyx_L3_error:; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/ga.pyx":1762 * subsarray1_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray1_nd) / ndim * except ValueError: # <<<<<<<<<<<<<< * subsarray1_nd = None * try: */ __pyx_t_11 = PyErr_ExceptionMatches(__pyx_builtin_ValueError); if (__pyx_t_11) { __Pyx_AddTraceback("ga4py.ga.gather", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_8, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1762; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_GOTREF(__pyx_t_8); __Pyx_GOTREF(__pyx_t_6); /* "ga4py/ga.pyx":1763 * n = len(subsarray1_nd) / ndim * except ValueError: * subsarray1_nd = None # <<<<<<<<<<<<<< * try: * subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) */ __pyx_t_1 = ((PyArrayObject *)Py_None); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer); __pyx_t_11 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_11 < 0)) { PyErr_Fetch(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_subsarray1_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_14, __pyx_t_13, __pyx_t_12); } } __pyx_pybuffernd_subsarray1_nd.diminfo[0].strides = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subsarray1_nd.diminfo[0].shape = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1763; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} } __pyx_t_1 = 0; __Pyx_INCREF(Py_None); __Pyx_DECREF_SET(__pyx_v_subsarray1_nd, ((PyArrayObject *)Py_None)); /* "ga4py/ga.pyx":1764 * except ValueError: * subsarray1_nd = None * try: # <<<<<<<<<<<<<< * subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray2_nd) # length of first dimension of subsarray2_nd */ { __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); __Pyx_XGOTREF(__pyx_t_12); __Pyx_XGOTREF(__pyx_t_13); __Pyx_XGOTREF(__pyx_t_14); /*try:*/ { /* "ga4py/ga.pyx":1765 * subsarray1_nd = None * try: * subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) # <<<<<<<<<<<<<< * n = len(subsarray2_nd) # length of first dimension of subsarray2_nd * except ValueError: */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1765; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__ascontiguousarray); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1765; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1765; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_subsarray); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_subsarray); __Pyx_GIVEREF(__pyx_v_subsarray); __pyx_t_16 = PyDict_New(); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1765; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_16)); __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1765; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_17); __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s__int64); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1765; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (PyDict_SetItem(__pyx_t_16, ((PyObject *)__pyx_n_s__dtype), __pyx_t_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1765; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_18 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_16)); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1765; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; if (!(likely(((__pyx_t_18) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_18, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1765; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __pyx_t_2 = ((PyArrayObject *)__pyx_t_18); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer); __pyx_t_11 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack); if (unlikely(__pyx_t_11 < 0)) { PyErr_Fetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_subsarray2_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_19, __pyx_t_20, __pyx_t_21); } } __pyx_pybuffernd_subsarray2_nd.diminfo[0].strides = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subsarray2_nd.diminfo[0].shape = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_subsarray2_nd.diminfo[1].strides = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_subsarray2_nd.diminfo[1].shape = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1765; __pyx_clineno = __LINE__; goto __pyx_L13_error;} } __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_subsarray2_nd, ((PyArrayObject *)__pyx_t_18)); __pyx_t_18 = 0; /* "ga4py/ga.pyx":1766 * try: * subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray2_nd) # length of first dimension of subsarray2_nd # <<<<<<<<<<<<<< * except ValueError: * raise ValueError, "subsarray must be either 1- or 2-dimensional" */ __pyx_t_15 = PyObject_Length(((PyObject *)__pyx_v_subsarray2_nd)); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1766; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __pyx_v_n = __pyx_t_15; } __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; goto __pyx_L20_try_end; __pyx_L13_error:; __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; /* "ga4py/ga.pyx":1767 * subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray2_nd) # length of first dimension of subsarray2_nd * except ValueError: # <<<<<<<<<<<<<< * raise ValueError, "subsarray must be either 1- or 2-dimensional" * # prepare values array */ __pyx_t_11 = PyErr_ExceptionMatches(__pyx_builtin_ValueError); if (__pyx_t_11) { __Pyx_AddTraceback("ga4py.ga.gather", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_18, &__pyx_t_16, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1767; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;} __Pyx_GOTREF(__pyx_t_18); __Pyx_GOTREF(__pyx_t_16); __Pyx_GOTREF(__pyx_t_7); /* "ga4py/ga.pyx":1768 * n = len(subsarray2_nd) # length of first dimension of subsarray2_nd * except ValueError: * raise ValueError, "subsarray must be either 1- or 2-dimensional" # <<<<<<<<<<<<<< * # prepare values array * if values is None: */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_17), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1768; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;} __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L14_exception_handled; } __pyx_L15_except_error:; __Pyx_XGIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_XGIVEREF(__pyx_t_14); __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); goto __pyx_L5_except_error; __pyx_L14_exception_handled:; __Pyx_XGIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_XGIVEREF(__pyx_t_14); __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); __pyx_L20_try_end:; } __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L4_exception_handled; } __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_5); __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); goto __pyx_L1_error; __pyx_L4_exception_handled:; __Pyx_XGIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_5); __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); __pyx_L10_try_end:; } /* "ga4py/ga.pyx":1770 * raise ValueError, "subsarray must be either 1- or 2-dimensional" * # prepare values array * if values is None: # <<<<<<<<<<<<<< * values = np.ndarray(n, dtype=_to_dtype[gtype]) * else: */ __pyx_t_22 = (((PyObject *)__pyx_v_values) == Py_None); __pyx_t_23 = (__pyx_t_22 != 0); if (__pyx_t_23) { /* "ga4py/ga.pyx":1771 * # prepare values array * if values is None: * values = np.ndarray(n, dtype=_to_dtype[gtype]) # <<<<<<<<<<<<<< * else: * if values.ndim != 1: */ __pyx_t_6 = __Pyx_PyInt_to_py_int64_t(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_6)); __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_10, __pyx_v_gtype, sizeof(int), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray)), ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_values, ((PyArrayObject *)__pyx_t_7)); __pyx_t_7 = 0; goto __pyx_L23; } /*else*/ { /* "ga4py/ga.pyx":1773 * values = np.ndarray(n, dtype=_to_dtype[gtype]) * else: * if values.ndim != 1: # <<<<<<<<<<<<<< * raise ValueError, "values must be one-dimensional" * if not values.flags['C_CONTIGUOUS']: */ __pyx_t_23 = ((__pyx_v_values->nd != 1) != 0); if (__pyx_t_23) { /* "ga4py/ga.pyx":1774 * else: * if values.ndim != 1: * raise ValueError, "values must be one-dimensional" # <<<<<<<<<<<<<< * if not values.flags['C_CONTIGUOUS']: * raise ValueError, "values must be contiguous" */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_18), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1774; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L24; } __pyx_L24:; /* "ga4py/ga.pyx":1775 * if values.ndim != 1: * raise ValueError, "values must be one-dimensional" * if not values.flags['C_CONTIGUOUS']: # <<<<<<<<<<<<<< * raise ValueError, "values must be contiguous" * if len(values) < n: */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_values), __pyx_n_s__flags); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyObject_GetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__C_CONTIGUOUS)); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_23 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_23 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_22 = ((!__pyx_t_23) != 0); if (__pyx_t_22) { /* "ga4py/ga.pyx":1776 * raise ValueError, "values must be one-dimensional" * if not values.flags['C_CONTIGUOUS']: * raise ValueError, "values must be contiguous" # <<<<<<<<<<<<<< * if len(values) < n: * raise ValueError, "values was not large enough" */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_19), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1776; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L25; } __pyx_L25:; /* "ga4py/ga.pyx":1777 * if not values.flags['C_CONTIGUOUS']: * raise ValueError, "values must be contiguous" * if len(values) < n: # <<<<<<<<<<<<<< * raise ValueError, "values was not large enough" * # call the wrapped function */ __pyx_t_15 = PyObject_Length(((PyObject *)__pyx_v_values)); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_22 = ((__pyx_t_15 < __pyx_v_n) != 0); if (__pyx_t_22) { /* "ga4py/ga.pyx":1778 * raise ValueError, "values must be contiguous" * if len(values) < n: * raise ValueError, "values was not large enough" # <<<<<<<<<<<<<< * # call the wrapped function * if subsarray1_nd is not None: */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_20), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L26; } __pyx_L26:; } __pyx_L23:; /* "ga4py/ga.pyx":1780 * raise ValueError, "values was not large enough" * # call the wrapped function * if subsarray1_nd is not None: # <<<<<<<<<<<<<< * NGA_Gather_flat64(g_a, values.data, * subsarray1_nd.data, n) */ __pyx_t_22 = (((PyObject *)__pyx_v_subsarray1_nd) != Py_None); __pyx_t_23 = (__pyx_t_22 != 0); if (__pyx_t_23) { /* "ga4py/ga.pyx":1782 * if subsarray1_nd is not None: * NGA_Gather_flat64(g_a, values.data, * subsarray1_nd.data, n) # <<<<<<<<<<<<<< * elif subsarray2_nd is not None: * NGA_Gather_flat64(g_a, values.data, */ NGA_Gather_flat64(__pyx_v_g_a, ((void *)__pyx_v_values->data), ((int64_t *)__pyx_v_subsarray1_nd->data), __pyx_v_n); goto __pyx_L27; } /* "ga4py/ga.pyx":1783 * NGA_Gather_flat64(g_a, values.data, * subsarray1_nd.data, n) * elif subsarray2_nd is not None: # <<<<<<<<<<<<<< * NGA_Gather_flat64(g_a, values.data, * subsarray2_nd.data, n) */ __pyx_t_23 = (((PyObject *)__pyx_v_subsarray2_nd) != Py_None); __pyx_t_22 = (__pyx_t_23 != 0); if (__pyx_t_22) { /* "ga4py/ga.pyx":1785 * elif subsarray2_nd is not None: * NGA_Gather_flat64(g_a, values.data, * subsarray2_nd.data, n) # <<<<<<<<<<<<<< * else: * raise ValueError, "how did this happen?" */ NGA_Gather_flat64(__pyx_v_g_a, ((void *)__pyx_v_values->data), ((int64_t *)__pyx_v_subsarray2_nd->data), __pyx_v_n); goto __pyx_L27; } /*else*/ { /* "ga4py/ga.pyx":1787 * subsarray2_nd.data, n) * else: * raise ValueError, "how did this happen?" # <<<<<<<<<<<<<< * return values * */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_21), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1787; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L27:; /* "ga4py/ga.pyx":1788 * else: * raise ValueError, "how did this happen?" * return values # <<<<<<<<<<<<<< * * def gemm(bint ta, bint tb, int64_t m, int64_t n, int64_t k, */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_values)); __pyx_r = ((PyObject *)__pyx_v_values); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_16); __Pyx_XDECREF(__pyx_t_17); __Pyx_XDECREF(__pyx_t_18); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.gather", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_subsarray1_nd); __Pyx_XDECREF((PyObject *)__pyx_v_subsarray2_nd); __Pyx_XDECREF((PyObject *)__pyx_v_values); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_95gemm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_94gemm[] = "gemm(bool ta, bool tb, int64_t m, int64_t n, int64_t k, alpha, int g_a, int g_b, beta, int g_c)\nPerforms one of the matrix-matrix operations.\n \n C := alpha*op( A )*op( B ) + beta*C\n\n where op( X ) is one of op(X)=X or op(X) = X', alpha and beta are scalars,\n and A, B and C are matrices, with op(A) an m by k matrix, op(B) a k by n\n matrix, and C an m by n matrix.\n\n On entry, ta specifies the form of op( A ) to be used in the\n matrix multiplication as follows::\n\n ta = False, op(A) = A.\n ta = True, op(A) = A'.\n\n This is a collective operation. \n \n :Parameters:\n ta : bool\n transpose operator\n tb : bool\n transpose operator\n m : int\n number of rows of op(A) and of matrix C\n n : int\n number of columns of op(B) and of matrix C\n k : int\n number of columns of op(A) and rows of matrix op(B)\n alpha : object\n scale factor\n g_a : int\n handle to input array\n g_b : int\n handle to input array\n beta : object\n scale factor\n g_c : int\n handle to output array\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_95gemm = {__Pyx_NAMESTR("gemm"), (PyCFunction)__pyx_pw_5ga4py_2ga_95gemm, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_94gemm)}; static PyObject *__pyx_pw_5ga4py_2ga_95gemm(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_ta; int __pyx_v_tb; int64_t __pyx_v_m; int64_t __pyx_v_n; int64_t __pyx_v_k; PyObject *__pyx_v_alpha = 0; int __pyx_v_g_a; int __pyx_v_g_b; PyObject *__pyx_v_beta = 0; int __pyx_v_g_c; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("gemm (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__ta,&__pyx_n_s__tb,&__pyx_n_s__m,&__pyx_n_s__n,&__pyx_n_s__k,&__pyx_n_s__alpha,&__pyx_n_s__g_a,&__pyx_n_s__g_b,&__pyx_n_s__beta,&__pyx_n_s__g_c,0}; PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ta)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__tb)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("gemm", 1, 10, 10, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__m)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("gemm", 1, 10, 10, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__n)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("gemm", 1, 10, 10, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__k)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("gemm", 1, 10, 10, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 5: if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alpha)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("gemm", 1, 10, 10, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 6: if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("gemm", 1, 10, 10, 6); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 7: if (likely((values[7] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("gemm", 1, 10, 10, 7); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 8: if (likely((values[8] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__beta)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("gemm", 1, 10, 10, 8); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 9: if (likely((values[9] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_c)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("gemm", 1, 10, 10, 9); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gemm") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 10) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[4] = PyTuple_GET_ITEM(__pyx_args, 4); values[5] = PyTuple_GET_ITEM(__pyx_args, 5); values[6] = PyTuple_GET_ITEM(__pyx_args, 6); values[7] = PyTuple_GET_ITEM(__pyx_args, 7); values[8] = PyTuple_GET_ITEM(__pyx_args, 8); values[9] = PyTuple_GET_ITEM(__pyx_args, 9); } __pyx_v_ta = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_ta == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_tb = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_tb == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_m = __Pyx_PyInt_from_py_int64_t(values[2]); if (unlikely((__pyx_v_m == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_n = __Pyx_PyInt_from_py_int64_t(values[3]); if (unlikely((__pyx_v_n == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_k = __Pyx_PyInt_from_py_int64_t(values[4]); if (unlikely((__pyx_v_k == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_alpha = values[5]; __pyx_v_g_a = __Pyx_PyInt_AsInt(values[6]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1791; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_b = __Pyx_PyInt_AsInt(values[7]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1791; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_beta = values[8]; __pyx_v_g_c = __Pyx_PyInt_AsInt(values[9]); if (unlikely((__pyx_v_g_c == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1791; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("gemm", 1, 10, 10, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.gemm", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_94gemm(__pyx_self, __pyx_v_ta, __pyx_v_tb, __pyx_v_m, __pyx_v_n, __pyx_v_k, __pyx_v_alpha, __pyx_v_g_a, __pyx_v_g_b, __pyx_v_beta, __pyx_v_g_c); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1790 * return values * * def gemm(bint ta, bint tb, int64_t m, int64_t n, int64_t k, # <<<<<<<<<<<<<< * alpha, int g_a, int g_b, beta, int g_c): * """Performs one of the matrix-matrix operations. */ static PyObject *__pyx_pf_5ga4py_2ga_94gemm(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_ta, int __pyx_v_tb, int64_t __pyx_v_m, int64_t __pyx_v_n, int64_t __pyx_v_k, PyObject *__pyx_v_alpha, int __pyx_v_g_a, int __pyx_v_g_b, PyObject *__pyx_v_beta, int __pyx_v_g_c) { int __pyx_v_gtype; float __pyx_v_falpha; float __pyx_v_fbeta; double __pyx_v_dalpha; double __pyx_v_dbeta; __pyx_t_float_complex __pyx_v_fcalpha; __pyx_t_float_complex __pyx_v_fcbeta; __pyx_t_double_complex __pyx_v_dcalpha; __pyx_t_double_complex __pyx_v_dcbeta; SingleComplex __pyx_v_ga_fcalpha; SingleComplex __pyx_v_ga_fcbeta; DoubleComplex __pyx_v_ga_dcalpha; DoubleComplex __pyx_v_ga_dcbeta; char __pyx_v_ta_char; char __pyx_v_tb_char; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; float __pyx_t_5; double __pyx_t_6; __pyx_t_float_complex __pyx_t_7; __pyx_t_double_complex __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("gemm", 0); /* "ga4py/ga.pyx":1831 * * """ * cdef int gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * #cdef int ialpha=1, ibeta=1 * #cdef long lalpha=1, lbeta=1 */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":1835 * #cdef long lalpha=1, lbeta=1 * #cdef long long llalpha=1, llbeta=1 * cdef float falpha=1.0, fbeta=1.0 # <<<<<<<<<<<<<< * cdef double dalpha=1.0, dbeta=1.0 * #cdef long double ldalpha=1.0, ldbeta=1.0 */ __pyx_v_falpha = 1.0; __pyx_v_fbeta = 1.0; /* "ga4py/ga.pyx":1836 * #cdef long long llalpha=1, llbeta=1 * cdef float falpha=1.0, fbeta=1.0 * cdef double dalpha=1.0, dbeta=1.0 # <<<<<<<<<<<<<< * #cdef long double ldalpha=1.0, ldbeta=1.0 * cdef float complex fcalpha=1.0, fcbeta=1.0 */ __pyx_v_dalpha = 1.0; __pyx_v_dbeta = 1.0; /* "ga4py/ga.pyx":1838 * cdef double dalpha=1.0, dbeta=1.0 * #cdef long double ldalpha=1.0, ldbeta=1.0 * cdef float complex fcalpha=1.0, fcbeta=1.0 # <<<<<<<<<<<<<< * cdef double complex dcalpha=1.0, dcbeta=1.0 * #cdef long double complex ldalpha=1.0, ldbeta=1.0 */ __pyx_v_fcalpha = __pyx_t_float_complex_from_parts(1.0, 0); __pyx_v_fcbeta = __pyx_t_float_complex_from_parts(1.0, 0); /* "ga4py/ga.pyx":1839 * #cdef long double ldalpha=1.0, ldbeta=1.0 * cdef float complex fcalpha=1.0, fcbeta=1.0 * cdef double complex dcalpha=1.0, dcbeta=1.0 # <<<<<<<<<<<<<< * #cdef long double complex ldalpha=1.0, ldbeta=1.0 * cdef SingleComplex ga_fcalpha, ga_fcbeta */ __pyx_v_dcalpha = __pyx_t_double_complex_from_parts(1.0, 0); __pyx_v_dcbeta = __pyx_t_double_complex_from_parts(1.0, 0); /* "ga4py/ga.pyx":1843 * cdef SingleComplex ga_fcalpha, ga_fcbeta * cdef DoubleComplex ga_dcalpha, ga_dcbeta * cdef char ta_char = 'N' # <<<<<<<<<<<<<< * cdef char tb_char = 'N' * if ta: */ __pyx_v_ta_char = 'N'; /* "ga4py/ga.pyx":1844 * cdef DoubleComplex ga_dcalpha, ga_dcbeta * cdef char ta_char = 'N' * cdef char tb_char = 'N' # <<<<<<<<<<<<<< * if ta: * ta_char = 'T' */ __pyx_v_tb_char = 'N'; /* "ga4py/ga.pyx":1845 * cdef char ta_char = 'N' * cdef char tb_char = 'N' * if ta: # <<<<<<<<<<<<<< * ta_char = 'T' * if tb: */ __pyx_t_1 = (__pyx_v_ta != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":1846 * cdef char tb_char = 'N' * if ta: * ta_char = 'T' # <<<<<<<<<<<<<< * if tb: * tb_char = 'T' */ __pyx_v_ta_char = 'T'; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":1847 * if ta: * ta_char = 'T' * if tb: # <<<<<<<<<<<<<< * tb_char = 'T' * if gtype == C_INT: */ __pyx_t_1 = (__pyx_v_tb != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":1848 * ta_char = 'T' * if tb: * tb_char = 'T' # <<<<<<<<<<<<<< * if gtype == C_INT: * raise TypeError, "C_INT not supported" */ __pyx_v_tb_char = 'T'; goto __pyx_L4; } __pyx_L4:; /* "ga4py/ga.pyx":1849 * if tb: * tb_char = 'T' * if gtype == C_INT: # <<<<<<<<<<<<<< * raise TypeError, "C_INT not supported" * elif gtype == C_LONG: */ __pyx_t_2 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_1) { /* "ga4py/ga.pyx":1850 * tb_char = 'T' * if gtype == C_INT: * raise TypeError, "C_INT not supported" # <<<<<<<<<<<<<< * elif gtype == C_LONG: * raise TypeError, "C_LONG not supported" */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_22), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1850; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } /* "ga4py/ga.pyx":1851 * if gtype == C_INT: * raise TypeError, "C_INT not supported" * elif gtype == C_LONG: # <<<<<<<<<<<<<< * raise TypeError, "C_LONG not supported" * elif gtype == C_LONGLONG: */ __pyx_t_4 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_1) { /* "ga4py/ga.pyx":1852 * raise TypeError, "C_INT not supported" * elif gtype == C_LONG: * raise TypeError, "C_LONG not supported" # <<<<<<<<<<<<<< * elif gtype == C_LONGLONG: * raise TypeError, "C_LONGLONG not supported" */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_23), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1852; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } /* "ga4py/ga.pyx":1853 * elif gtype == C_LONG: * raise TypeError, "C_LONG not supported" * elif gtype == C_LONGLONG: # <<<<<<<<<<<<<< * raise TypeError, "C_LONGLONG not supported" * elif gtype == C_FLOAT: */ __pyx_t_2 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1853; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1853; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1853; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1853; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_1) { /* "ga4py/ga.pyx":1854 * raise TypeError, "C_LONG not supported" * elif gtype == C_LONGLONG: * raise TypeError, "C_LONGLONG not supported" # <<<<<<<<<<<<<< * elif gtype == C_FLOAT: * falpha = alpha */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_24), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1854; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } /* "ga4py/ga.pyx":1855 * elif gtype == C_LONGLONG: * raise TypeError, "C_LONGLONG not supported" * elif gtype == C_FLOAT: # <<<<<<<<<<<<<< * falpha = alpha * fbeta = beta */ __pyx_t_4 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1855; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1855; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1855; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1855; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_1) { /* "ga4py/ga.pyx":1856 * raise TypeError, "C_LONGLONG not supported" * elif gtype == C_FLOAT: * falpha = alpha # <<<<<<<<<<<<<< * fbeta = beta * GA_Sgemm64(ta_char, tb_char, m, n, k, falpha, g_a, g_b, fbeta, g_c) */ __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_v_alpha); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1856; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_falpha = __pyx_t_5; /* "ga4py/ga.pyx":1857 * elif gtype == C_FLOAT: * falpha = alpha * fbeta = beta # <<<<<<<<<<<<<< * GA_Sgemm64(ta_char, tb_char, m, n, k, falpha, g_a, g_b, fbeta, g_c) * elif gtype == C_DBL: */ __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_v_beta); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1857; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_fbeta = __pyx_t_5; /* "ga4py/ga.pyx":1858 * falpha = alpha * fbeta = beta * GA_Sgemm64(ta_char, tb_char, m, n, k, falpha, g_a, g_b, fbeta, g_c) # <<<<<<<<<<<<<< * elif gtype == C_DBL: * dalpha = alpha */ GA_Sgemm64(__pyx_v_ta_char, __pyx_v_tb_char, __pyx_v_m, __pyx_v_n, __pyx_v_k, __pyx_v_falpha, __pyx_v_g_a, __pyx_v_g_b, __pyx_v_fbeta, __pyx_v_g_c); goto __pyx_L5; } /* "ga4py/ga.pyx":1859 * fbeta = beta * GA_Sgemm64(ta_char, tb_char, m, n, k, falpha, g_a, g_b, fbeta, g_c) * elif gtype == C_DBL: # <<<<<<<<<<<<<< * dalpha = alpha * dbeta = beta */ __pyx_t_2 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1859; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_DBL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1859; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1859; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1859; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_1) { /* "ga4py/ga.pyx":1860 * GA_Sgemm64(ta_char, tb_char, m, n, k, falpha, g_a, g_b, fbeta, g_c) * elif gtype == C_DBL: * dalpha = alpha # <<<<<<<<<<<<<< * dbeta = beta * GA_Dgemm64(ta_char, tb_char, m, n, k, dalpha, g_a, g_b, dbeta, g_c) */ __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_alpha); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1860; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_dalpha = __pyx_t_6; /* "ga4py/ga.pyx":1861 * elif gtype == C_DBL: * dalpha = alpha * dbeta = beta # <<<<<<<<<<<<<< * GA_Dgemm64(ta_char, tb_char, m, n, k, dalpha, g_a, g_b, dbeta, g_c) * elif gtype == C_LDBL: */ __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_beta); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1861; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_dbeta = __pyx_t_6; /* "ga4py/ga.pyx":1862 * dalpha = alpha * dbeta = beta * GA_Dgemm64(ta_char, tb_char, m, n, k, dalpha, g_a, g_b, dbeta, g_c) # <<<<<<<<<<<<<< * elif gtype == C_LDBL: * raise TypeError, "C_LDBL not supported" */ GA_Dgemm64(__pyx_v_ta_char, __pyx_v_tb_char, __pyx_v_m, __pyx_v_n, __pyx_v_k, __pyx_v_dalpha, __pyx_v_g_a, __pyx_v_g_b, __pyx_v_dbeta, __pyx_v_g_c); goto __pyx_L5; } /* "ga4py/ga.pyx":1863 * dbeta = beta * GA_Dgemm64(ta_char, tb_char, m, n, k, dalpha, g_a, g_b, dbeta, g_c) * elif gtype == C_LDBL: # <<<<<<<<<<<<<< * raise TypeError, "C_LDBL not supported" * elif gtype == C_SCPL: */ __pyx_t_4 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LDBL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_1) { /* "ga4py/ga.pyx":1864 * GA_Dgemm64(ta_char, tb_char, m, n, k, dalpha, g_a, g_b, dbeta, g_c) * elif gtype == C_LDBL: * raise TypeError, "C_LDBL not supported" # <<<<<<<<<<<<<< * elif gtype == C_SCPL: * fcalpha = alpha */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_25), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1864; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } /* "ga4py/ga.pyx":1865 * elif gtype == C_LDBL: * raise TypeError, "C_LDBL not supported" * elif gtype == C_SCPL: # <<<<<<<<<<<<<< * fcalpha = alpha * fcbeta = beta */ __pyx_t_2 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1865; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_SCPL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1865; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1865; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1865; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_1) { /* "ga4py/ga.pyx":1866 * raise TypeError, "C_LDBL not supported" * elif gtype == C_SCPL: * fcalpha = alpha # <<<<<<<<<<<<<< * fcbeta = beta * ga_fcalpha.real = fcalpha.real */ __pyx_t_7 = __Pyx_PyComplex_As___pyx_t_float_complex(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1866; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_fcalpha = __pyx_t_7; /* "ga4py/ga.pyx":1867 * elif gtype == C_SCPL: * fcalpha = alpha * fcbeta = beta # <<<<<<<<<<<<<< * ga_fcalpha.real = fcalpha.real * ga_fcalpha.imag = fcalpha.imag */ __pyx_t_7 = __Pyx_PyComplex_As___pyx_t_float_complex(__pyx_v_beta); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_fcbeta = __pyx_t_7; /* "ga4py/ga.pyx":1868 * fcalpha = alpha * fcbeta = beta * ga_fcalpha.real = fcalpha.real # <<<<<<<<<<<<<< * ga_fcalpha.imag = fcalpha.imag * ga_fcbeta.real = fcbeta.real */ __pyx_t_5 = __Pyx_CREAL(__pyx_v_fcalpha); __pyx_v_ga_fcalpha.real = __pyx_t_5; /* "ga4py/ga.pyx":1869 * fcbeta = beta * ga_fcalpha.real = fcalpha.real * ga_fcalpha.imag = fcalpha.imag # <<<<<<<<<<<<<< * ga_fcbeta.real = fcbeta.real * ga_fcbeta.imag = fcbeta.imag */ __pyx_t_5 = __Pyx_CIMAG(__pyx_v_fcalpha); __pyx_v_ga_fcalpha.imag = __pyx_t_5; /* "ga4py/ga.pyx":1870 * ga_fcalpha.real = fcalpha.real * ga_fcalpha.imag = fcalpha.imag * ga_fcbeta.real = fcbeta.real # <<<<<<<<<<<<<< * ga_fcbeta.imag = fcbeta.imag * GA_Cgemm64(ta_char, tb_char, m, n, k, ga_fcalpha, g_a, g_b, ga_fcbeta, g_c) */ __pyx_t_5 = __Pyx_CREAL(__pyx_v_fcbeta); __pyx_v_ga_fcbeta.real = __pyx_t_5; /* "ga4py/ga.pyx":1871 * ga_fcalpha.imag = fcalpha.imag * ga_fcbeta.real = fcbeta.real * ga_fcbeta.imag = fcbeta.imag # <<<<<<<<<<<<<< * GA_Cgemm64(ta_char, tb_char, m, n, k, ga_fcalpha, g_a, g_b, ga_fcbeta, g_c) * elif gtype == C_DCPL: */ __pyx_t_5 = __Pyx_CIMAG(__pyx_v_fcbeta); __pyx_v_ga_fcbeta.imag = __pyx_t_5; /* "ga4py/ga.pyx":1872 * ga_fcbeta.real = fcbeta.real * ga_fcbeta.imag = fcbeta.imag * GA_Cgemm64(ta_char, tb_char, m, n, k, ga_fcalpha, g_a, g_b, ga_fcbeta, g_c) # <<<<<<<<<<<<<< * elif gtype == C_DCPL: * dcalpha = alpha */ GA_Cgemm64(__pyx_v_ta_char, __pyx_v_tb_char, __pyx_v_m, __pyx_v_n, __pyx_v_k, __pyx_v_ga_fcalpha, __pyx_v_g_a, __pyx_v_g_b, __pyx_v_ga_fcbeta, __pyx_v_g_c); goto __pyx_L5; } /* "ga4py/ga.pyx":1873 * ga_fcbeta.imag = fcbeta.imag * GA_Cgemm64(ta_char, tb_char, m, n, k, ga_fcalpha, g_a, g_b, ga_fcbeta, g_c) * elif gtype == C_DCPL: # <<<<<<<<<<<<<< * dcalpha = alpha * dcbeta = beta */ __pyx_t_4 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_DCPL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_1) { /* "ga4py/ga.pyx":1874 * GA_Cgemm64(ta_char, tb_char, m, n, k, ga_fcalpha, g_a, g_b, ga_fcbeta, g_c) * elif gtype == C_DCPL: * dcalpha = alpha # <<<<<<<<<<<<<< * dcbeta = beta * ga_dcalpha.real = dcalpha.real */ __pyx_t_8 = __Pyx_PyComplex_As___pyx_t_double_complex(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1874; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_dcalpha = __pyx_t_8; /* "ga4py/ga.pyx":1875 * elif gtype == C_DCPL: * dcalpha = alpha * dcbeta = beta # <<<<<<<<<<<<<< * ga_dcalpha.real = dcalpha.real * ga_dcalpha.imag = dcalpha.imag */ __pyx_t_8 = __Pyx_PyComplex_As___pyx_t_double_complex(__pyx_v_beta); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1875; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_dcbeta = __pyx_t_8; /* "ga4py/ga.pyx":1876 * dcalpha = alpha * dcbeta = beta * ga_dcalpha.real = dcalpha.real # <<<<<<<<<<<<<< * ga_dcalpha.imag = dcalpha.imag * ga_dcbeta.real = dcbeta.real */ __pyx_t_6 = __Pyx_CREAL(__pyx_v_dcalpha); __pyx_v_ga_dcalpha.real = __pyx_t_6; /* "ga4py/ga.pyx":1877 * dcbeta = beta * ga_dcalpha.real = dcalpha.real * ga_dcalpha.imag = dcalpha.imag # <<<<<<<<<<<<<< * ga_dcbeta.real = dcbeta.real * ga_dcbeta.imag = dcbeta.imag */ __pyx_t_6 = __Pyx_CIMAG(__pyx_v_dcalpha); __pyx_v_ga_dcalpha.imag = __pyx_t_6; /* "ga4py/ga.pyx":1878 * ga_dcalpha.real = dcalpha.real * ga_dcalpha.imag = dcalpha.imag * ga_dcbeta.real = dcbeta.real # <<<<<<<<<<<<<< * ga_dcbeta.imag = dcbeta.imag * GA_Zgemm64(ta_char, tb_char, m, n, k, ga_dcalpha, g_a, g_b, ga_dcbeta, g_c) */ __pyx_t_6 = __Pyx_CREAL(__pyx_v_dcbeta); __pyx_v_ga_dcbeta.real = __pyx_t_6; /* "ga4py/ga.pyx":1879 * ga_dcalpha.imag = dcalpha.imag * ga_dcbeta.real = dcbeta.real * ga_dcbeta.imag = dcbeta.imag # <<<<<<<<<<<<<< * GA_Zgemm64(ta_char, tb_char, m, n, k, ga_dcalpha, g_a, g_b, ga_dcbeta, g_c) * elif gtype == C_LDCPL: */ __pyx_t_6 = __Pyx_CIMAG(__pyx_v_dcbeta); __pyx_v_ga_dcbeta.imag = __pyx_t_6; /* "ga4py/ga.pyx":1880 * ga_dcbeta.real = dcbeta.real * ga_dcbeta.imag = dcbeta.imag * GA_Zgemm64(ta_char, tb_char, m, n, k, ga_dcalpha, g_a, g_b, ga_dcbeta, g_c) # <<<<<<<<<<<<<< * elif gtype == C_LDCPL: * raise TypeError, "C_LDCPL not supported (yet)" */ GA_Zgemm64(__pyx_v_ta_char, __pyx_v_tb_char, __pyx_v_m, __pyx_v_n, __pyx_v_k, __pyx_v_ga_dcalpha, __pyx_v_g_a, __pyx_v_g_b, __pyx_v_ga_dcbeta, __pyx_v_g_c); goto __pyx_L5; } /* "ga4py/ga.pyx":1881 * ga_dcbeta.imag = dcbeta.imag * GA_Zgemm64(ta_char, tb_char, m, n, k, ga_dcalpha, g_a, g_b, ga_dcbeta, g_c) * elif gtype == C_LDCPL: # <<<<<<<<<<<<<< * raise TypeError, "C_LDCPL not supported (yet)" * else: */ __pyx_t_2 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LDCPL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_1) { /* "ga4py/ga.pyx":1882 * GA_Zgemm64(ta_char, tb_char, m, n, k, ga_dcalpha, g_a, g_b, ga_dcbeta, g_c) * elif gtype == C_LDCPL: * raise TypeError, "C_LDCPL not supported (yet)" # <<<<<<<<<<<<<< * else: * raise TypeError */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_26), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1882; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } /*else*/ { /* "ga4py/ga.pyx":1884 * raise TypeError, "C_LDCPL not supported (yet)" * else: * raise TypeError # <<<<<<<<<<<<<< * * def get(int g_a, lo=None, hi=None, np.ndarray buffer=None): */ __Pyx_Raise(__pyx_builtin_TypeError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1884; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L5:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.ga.gemm", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_97get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_96get[] = "get(int g_a, lo=None, hi=None, ndarray buffer=None)\nCopies data from global array section to the local array buffer.\n \n The local array is assumed to be have the same number of dimensions as the\n global array. Any detected inconsitencies/errors in the input arguments\n are fatal.\n\n This is a one-sided operation.\n\n :Parameters:\n g_a : int\n the array handle\n lo : 1D array-like of integers\n lower bound patch coordinates, inclusive\n hi : 1D array-like of integers\n higher bound patch coordinates, exclusive\n buffer : \n an ndarray of the appropriate type, large enough to hold lo,hi\n\n :returns: The local array buffer.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_97get = {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pw_5ga4py_2ga_97get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_96get)}; static PyObject *__pyx_pw_5ga4py_2ga_97get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; PyArrayObject *__pyx_v_buffer = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__lo,&__pyx_n_s__hi,&__pyx_n_s__buffer,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/ga.pyx":1886 * raise TypeError * * def get(int g_a, lo=None, hi=None, np.ndarray buffer=None): # <<<<<<<<<<<<<< * """Copies data from global array section to the local array buffer. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = (PyObject *)((PyArrayObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1886; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1886; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; __pyx_v_buffer = ((PyArrayObject *)values[3]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("get", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1886; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.get", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_buffer), __pyx_ptype_5numpy_ndarray, 1, "buffer", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1886; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = __pyx_pf_5ga4py_2ga_96get(__pyx_self, __pyx_v_g_a, __pyx_v_lo, __pyx_v_hi, __pyx_v_buffer); goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_96get(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyArrayObject *__pyx_v_buffer) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; struct __pyx_opt_args_5ga4py_2ga__get_common __pyx_t_2; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("get", 0); /* "ga4py/ga.pyx":1908 * * """ * return _get_common(g_a, lo, hi, buffer) # <<<<<<<<<<<<<< * * cdef _get_common(int g_a, lo=None, hi=None, np.ndarray buffer=None, */ __Pyx_XDECREF(__pyx_r); __pyx_t_2.__pyx_n = 3; __pyx_t_2.lo = __pyx_v_lo; __pyx_t_2.hi = __pyx_v_hi; __pyx_t_2.buffer = __pyx_v_buffer; __pyx_t_1 = __pyx_f_5ga4py_2ga__get_common(__pyx_v_g_a, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.get", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1910 * return _get_common(g_a, lo, hi, buffer) * * cdef _get_common(int g_a, lo=None, hi=None, np.ndarray buffer=None, # <<<<<<<<<<<<<< * bint nb=False, bint periodic=False, skip=None): * """Copies data from global array section to the local array buffer. */ static PyObject *__pyx_f_5ga4py_2ga__get_common(int __pyx_v_g_a, struct __pyx_opt_args_5ga4py_2ga__get_common *__pyx_optional_args) { PyObject *__pyx_v_lo = ((PyObject *)Py_None); PyObject *__pyx_v_hi = ((PyObject *)Py_None); PyArrayObject *__pyx_v_buffer = ((PyArrayObject *)Py_None); /* "ga4py/ga.pyx":1911 * * cdef _get_common(int g_a, lo=None, hi=None, np.ndarray buffer=None, * bint nb=False, bint periodic=False, skip=None): # <<<<<<<<<<<<<< * """Copies data from global array section to the local array buffer. * */ int __pyx_v_nb = ((int)0); int __pyx_v_periodic = ((int)0); PyObject *__pyx_v_skip = ((PyObject *)Py_None); PyArrayObject *__pyx_v_lo_nd = 0; PyArrayObject *__pyx_v_hi_nd = 0; PyArrayObject *__pyx_v_ld_nd = 0; PyArrayObject *__pyx_v_shape = 0; PyArrayObject *__pyx_v_skip_nd = 0; int __pyx_v_gtype; ga_nbhdl_t __pyx_v_nbhandle; PyObject *__pyx_v_dtype = NULL; PyObject *__pyx_v_strides = NULL; PyObject *__pyx_v_buffer_shape = NULL; PyObject *__pyx_v_i = NULL; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_ld_nd; __Pyx_Buffer __pyx_pybuffer_ld_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_nd; __Pyx_Buffer __pyx_pybuffer_lo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_shape; __Pyx_Buffer __pyx_pybuffer_shape; __Pyx_LocalBuf_ND __pyx_pybuffernd_skip_nd; __Pyx_Buffer __pyx_pybuffer_skip_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *(*__pyx_t_5)(PyObject *); PyArrayObject *__pyx_t_6 = NULL; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; int __pyx_t_11; int __pyx_t_12; Py_ssize_t __pyx_t_13; PyObject *(*__pyx_t_14)(PyObject *); Py_ssize_t __pyx_t_15; PyObject *__pyx_t_16 = NULL; PyObject *__pyx_t_17 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_get_common", 0); if (__pyx_optional_args) { if (__pyx_optional_args->__pyx_n > 0) { __pyx_v_lo = __pyx_optional_args->lo; if (__pyx_optional_args->__pyx_n > 1) { __pyx_v_hi = __pyx_optional_args->hi; if (__pyx_optional_args->__pyx_n > 2) { __pyx_v_buffer = __pyx_optional_args->buffer; if (__pyx_optional_args->__pyx_n > 3) { __pyx_v_nb = __pyx_optional_args->nb; if (__pyx_optional_args->__pyx_n > 4) { __pyx_v_periodic = __pyx_optional_args->periodic; if (__pyx_optional_args->__pyx_n > 5) { __pyx_v_skip = __pyx_optional_args->skip; } } } } } } } __Pyx_INCREF((PyObject *)__pyx_v_buffer); __pyx_pybuffer_lo_nd.pybuffer.buf = NULL; __pyx_pybuffer_lo_nd.refcount = 0; __pyx_pybuffernd_lo_nd.data = NULL; __pyx_pybuffernd_lo_nd.rcbuffer = &__pyx_pybuffer_lo_nd; __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; __pyx_pybuffer_ld_nd.pybuffer.buf = NULL; __pyx_pybuffer_ld_nd.refcount = 0; __pyx_pybuffernd_ld_nd.data = NULL; __pyx_pybuffernd_ld_nd.rcbuffer = &__pyx_pybuffer_ld_nd; __pyx_pybuffer_shape.pybuffer.buf = NULL; __pyx_pybuffer_shape.refcount = 0; __pyx_pybuffernd_shape.data = NULL; __pyx_pybuffernd_shape.rcbuffer = &__pyx_pybuffer_shape; __pyx_pybuffer_skip_nd.pybuffer.buf = NULL; __pyx_pybuffer_skip_nd.refcount = 0; __pyx_pybuffernd_skip_nd.data = NULL; __pyx_pybuffernd_skip_nd.rcbuffer = &__pyx_pybuffer_skip_nd; /* "ga4py/ga.pyx":1943 * """ * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd, ld_nd, shape, skip_nd * cdef int gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * cdef ga_nbhdl_t nbhandle * dtype = _to_dtype[gtype] */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":1945 * cdef int gtype=inquire_type(g_a) * cdef ga_nbhdl_t nbhandle * dtype = _to_dtype[gtype] # <<<<<<<<<<<<<< * lo_nd,hi_nd = _lohi(g_a,lo,hi) * shape = hi_nd-lo_nd+1 */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1945; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_gtype, sizeof(int), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1945; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_dtype = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/ga.pyx":1946 * cdef ga_nbhdl_t nbhandle * dtype = _to_dtype[gtype] * lo_nd,hi_nd = _lohi(g_a,lo,hi) # <<<<<<<<<<<<<< * shape = hi_nd-lo_nd+1 * if skip is None: */ __pyx_t_2 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { PyObject* sequence = __pyx_t_2; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_1 = PyList_GET_ITEM(sequence, 0); __pyx_t_3 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_3); #else __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; index = 0; __pyx_t_1 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L4_unpacking_done; __pyx_L3_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L4_unpacking_done:; } if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; __pyx_t_6 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":1947 * dtype = _to_dtype[gtype] * lo_nd,hi_nd = _lohi(g_a,lo,hi) * shape = hi_nd-lo_nd+1 # <<<<<<<<<<<<<< * if skip is None: * skip_nd = None */ __pyx_t_2 = PyNumber_Subtract(((PyObject *)__pyx_v_hi_nd), ((PyObject *)__pyx_v_lo_nd)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1947; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1947; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1947; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_shape.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_shape.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_shape.rcbuffer->pybuffer, (PyObject*)__pyx_v_shape, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_shape.diminfo[0].strides = __pyx_pybuffernd_shape.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_shape.diminfo[0].shape = __pyx_pybuffernd_shape.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1947; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_shape = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":1948 * lo_nd,hi_nd = _lohi(g_a,lo,hi) * shape = hi_nd-lo_nd+1 * if skip is None: # <<<<<<<<<<<<<< * skip_nd = None * else: */ __pyx_t_11 = (__pyx_v_skip == Py_None); __pyx_t_12 = (__pyx_t_11 != 0); if (__pyx_t_12) { /* "ga4py/ga.pyx":1949 * shape = hi_nd-lo_nd+1 * if skip is None: * skip_nd = None # <<<<<<<<<<<<<< * else: * skip_nd = _inta64(skip) */ __pyx_t_6 = ((PyArrayObject *)Py_None); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_skip_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_skip_nd.diminfo[0].strides = __pyx_pybuffernd_skip_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_skip_nd.diminfo[0].shape = __pyx_pybuffernd_skip_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1949; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __Pyx_INCREF(Py_None); __pyx_v_skip_nd = ((PyArrayObject *)Py_None); goto __pyx_L5; } /*else*/ { /* "ga4py/ga.pyx":1951 * skip_nd = None * else: * skip_nd = _inta64(skip) # <<<<<<<<<<<<<< * shape = (hi_nd-lo_nd)/skip_nd+1 * if buffer is None: */ __pyx_t_3 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_skip)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1951; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_3), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_skip_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_skip_nd.diminfo[0].strides = __pyx_pybuffernd_skip_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_skip_nd.diminfo[0].shape = __pyx_pybuffernd_skip_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1951; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_skip_nd = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":1952 * else: * skip_nd = _inta64(skip) * shape = (hi_nd-lo_nd)/skip_nd+1 # <<<<<<<<<<<<<< * if buffer is None: * buffer = np.ndarray(shape, dtype=dtype) */ __pyx_t_3 = PyNumber_Subtract(((PyObject *)__pyx_v_hi_nd), ((PyObject *)__pyx_v_lo_nd)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1952; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_3, ((PyObject *)__pyx_v_skip_nd)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1952; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1952; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1952; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_shape.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_shape.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_shape.rcbuffer->pybuffer, (PyObject*)__pyx_v_shape, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_shape.diminfo[0].strides = __pyx_pybuffernd_shape.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_shape.diminfo[0].shape = __pyx_pybuffernd_shape.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1952; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_shape, ((PyArrayObject *)__pyx_t_3)); __pyx_t_3 = 0; } __pyx_L5:; /* "ga4py/ga.pyx":1953 * skip_nd = _inta64(skip) * shape = (hi_nd-lo_nd)/skip_nd+1 * if buffer is None: # <<<<<<<<<<<<<< * buffer = np.ndarray(shape, dtype=dtype) * elif buffer.dtype != dtype: */ __pyx_t_12 = (((PyObject *)__pyx_v_buffer) == Py_None); __pyx_t_11 = (__pyx_t_12 != 0); if (__pyx_t_11) { /* "ga4py/ga.pyx":1954 * shape = (hi_nd-lo_nd)/skip_nd+1 * if buffer is None: * buffer = np.ndarray(shape, dtype=dtype) # <<<<<<<<<<<<<< * elif buffer.dtype != dtype: * raise ValueError, "buffer is wrong type :: buffer=%s != %s" % ( */ __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)__pyx_v_shape)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_shape)); __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_v_dtype) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray)), ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_buffer, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; goto __pyx_L6; } /* "ga4py/ga.pyx":1955 * if buffer is None: * buffer = np.ndarray(shape, dtype=dtype) * elif buffer.dtype != dtype: # <<<<<<<<<<<<<< * raise ValueError, "buffer is wrong type :: buffer=%s != %s" % ( * buffer.dtype, dtype) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer), __pyx_n_s__dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1955; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dtype, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1955; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1955; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_11) { /* "ga4py/ga.pyx":1957 * elif buffer.dtype != dtype: * raise ValueError, "buffer is wrong type :: buffer=%s != %s" % ( * buffer.dtype, dtype) # <<<<<<<<<<<<<< * # Due to GA restrictions, buffer must not have negative strides * # and buffer's last stride must be same as itemsize */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1956; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1956; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; /* "ga4py/ga.pyx":1960 * # Due to GA restrictions, buffer must not have negative strides * # and buffer's last stride must be same as itemsize * strides = [buffer.strides[i]/buffer.itemsize for i in range(buffer.ndim)] # <<<<<<<<<<<<<< * if strides[-1] != 1: * raise ValueError, "first dimension of buffer cannot be strided" */ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyInt_FromLong(__pyx_v_buffer->nd); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_13 = 0; __pyx_t_14 = NULL; } else { __pyx_t_13 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_14 = Py_TYPE(__pyx_t_3)->tp_iternext; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (!__pyx_t_14 && PyList_CheckExact(__pyx_t_3)) { if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_14 && PyTuple_CheckExact(__pyx_t_3)) { if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_1); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_1 = __pyx_t_14(__pyx_t_3); if (unlikely(!__pyx_t_1)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_1); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_15 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_15 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = __Pyx_PyInt_to_py_Py_intptr_t((__pyx_v_buffer->strides[__pyx_t_15])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer), __pyx_n_s__itemsize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_16 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_16))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_strides = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":1961 * # and buffer's last stride must be same as itemsize * strides = [buffer.strides[i]/buffer.itemsize for i in range(buffer.ndim)] * if strides[-1] != 1: # <<<<<<<<<<<<<< * raise ValueError, "first dimension of buffer cannot be strided" * if np.any(np.asarray(strides) < 0): */ __pyx_t_2 = __Pyx_GetItemInt_List(((PyObject *)__pyx_v_strides), -1, sizeof(long), PyInt_FromLong, 1, 1, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1961; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_int_1, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1961; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1961; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_11) { /* "ga4py/ga.pyx":1962 * strides = [buffer.strides[i]/buffer.itemsize for i in range(buffer.ndim)] * if strides[-1] != 1: * raise ValueError, "first dimension of buffer cannot be strided" # <<<<<<<<<<<<<< * if np.any(np.asarray(strides) < 0): * raise ValueError, "buffer cannot have negative strides" */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_27), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1962; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L9; } __pyx_L9:; /* "ga4py/ga.pyx":1963 * if strides[-1] != 1: * raise ValueError, "first dimension of buffer cannot be strided" * if np.any(np.asarray(strides) < 0): # <<<<<<<<<<<<<< * raise ValueError, "buffer cannot have negative strides" * # we allow 1-d "flat" buffers in addition to buffers matching the shape of */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__any); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__asarray); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)__pyx_v_strides)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_strides)); __Pyx_GIVEREF(((PyObject *)__pyx_v_strides)); __pyx_t_4 = PyObject_Call(__pyx_t_16, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = PyObject_RichCompare(__pyx_t_4, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_11) { /* "ga4py/ga.pyx":1964 * raise ValueError, "first dimension of buffer cannot be strided" * if np.any(np.asarray(strides) < 0): * raise ValueError, "buffer cannot have negative strides" # <<<<<<<<<<<<<< * # we allow 1-d "flat" buffers in addition to buffers matching the shape of * # requested region */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_28), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L10; } __pyx_L10:; /* "ga4py/ga.pyx":1967 * # we allow 1-d "flat" buffers in addition to buffers matching the shape of * # requested region * if buffer.ndim == 1: # <<<<<<<<<<<<<< * if buffer.size != np.prod(shape): * raise ValueError, ('buffer size does not match shape :: ' */ __pyx_t_11 = ((__pyx_v_buffer->nd == 1) != 0); if (__pyx_t_11) { /* "ga4py/ga.pyx":1968 * # requested region * if buffer.ndim == 1: * if buffer.size != np.prod(shape): # <<<<<<<<<<<<<< * raise ValueError, ('buffer size does not match shape :: ' * 'buffer.size=%s != np.prod(shape)=%s' % ( */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer), __pyx_n_s__size); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__prod); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(((PyObject *)__pyx_v_shape)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_shape)); __pyx_t_16 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_t_16, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_11) { /* "ga4py/ga.pyx":1971 * raise ValueError, ('buffer size does not match shape :: ' * 'buffer.size=%s != np.prod(shape)=%s' % ( * buffer.size, np.prod(shape))) # <<<<<<<<<<<<<< * ld_nd = shape[1:] * else: */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer), __pyx_n_s__size); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_16 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s__prod); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyTuple_New(1); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_INCREF(((PyObject *)__pyx_v_shape)); PyTuple_SET_ITEM(__pyx_t_16, 0, ((PyObject *)__pyx_v_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_shape)); __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_16), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_4 = 0; __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_16)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1969; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L12; } __pyx_L12:; /* "ga4py/ga.pyx":1972 * 'buffer.size=%s != np.prod(shape)=%s' % ( * buffer.size, np.prod(shape))) * ld_nd = shape[1:] # <<<<<<<<<<<<<< * else: * buffer_shape = [buffer.shape[i] for i in range(buffer.ndim)] */ __pyx_t_2 = __Pyx_PyObject_GetSlice(((PyObject *)__pyx_v_shape), 1, 0, NULL, NULL, &__pyx_k_slice_29, 1, 0, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ld_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_ld_nd.diminfo[0].strides = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ld_nd.diminfo[0].shape = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_ld_nd = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L11; } /*else*/ { /* "ga4py/ga.pyx":1974 * ld_nd = shape[1:] * else: * buffer_shape = [buffer.shape[i] for i in range(buffer.ndim)] # <<<<<<<<<<<<<< * if not np.all(buffer_shape == shape): * raise ValueError, ('buffer shape does not match request shape :: ' */ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_16 = PyInt_FromLong(__pyx_v_buffer->nd); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_16); __Pyx_GIVEREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyList_CheckExact(__pyx_t_16) || PyTuple_CheckExact(__pyx_t_16)) { __pyx_t_4 = __pyx_t_16; __Pyx_INCREF(__pyx_t_4); __pyx_t_13 = 0; __pyx_t_14 = NULL; } else { __pyx_t_13 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_16); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_14 = Py_TYPE(__pyx_t_4)->tp_iternext; } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; for (;;) { if (!__pyx_t_14 && PyList_CheckExact(__pyx_t_4)) { if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_4)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_16 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_13); __Pyx_INCREF(__pyx_t_16); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_16 = PySequence_ITEM(__pyx_t_4, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_14 && PyTuple_CheckExact(__pyx_t_4)) { if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_4)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_16 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_13); __Pyx_INCREF(__pyx_t_16); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_16 = PySequence_ITEM(__pyx_t_4, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_16 = __pyx_t_14(__pyx_t_4); if (unlikely(!__pyx_t_16)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_16); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_16); __pyx_t_16 = 0; __pyx_t_15 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_15 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_16 = __Pyx_PyInt_to_py_Py_intptr_t((__pyx_v_buffer->dimensions[__pyx_t_15])); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_16))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_buffer_shape = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":1975 * else: * buffer_shape = [buffer.shape[i] for i in range(buffer.ndim)] * if not np.all(buffer_shape == shape): # <<<<<<<<<<<<<< * raise ValueError, ('buffer shape does not match request shape :: ' * 'buffer_shape=%s != shape=%s' % ( */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__all); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_buffer_shape), ((PyObject *)__pyx_v_shape), Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_16 = PyTuple_New(1); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_16), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_12 = ((!__pyx_t_11) != 0); if (__pyx_t_12) { /* "ga4py/ga.pyx":1978 * raise ValueError, ('buffer shape does not match request shape :: ' * 'buffer_shape=%s != shape=%s' % ( * buffer_shape, shape)) # <<<<<<<<<<<<<< * ld_nd = np.asarray([strides[i]/strides[i+1] * for i in range(buffer.ndim-1)], dtype=np.int64) */ __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1978; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_v_buffer_shape)); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_buffer_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_buffer_shape)); __Pyx_INCREF(((PyObject *)__pyx_v_shape)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_shape)); __pyx_t_16 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_10), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1977; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_16)); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_16), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L15; } __pyx_L15:; /* "ga4py/ga.pyx":1979 * 'buffer_shape=%s != shape=%s' % ( * buffer_shape, shape)) * ld_nd = np.asarray([strides[i]/strides[i+1] # <<<<<<<<<<<<<< * for i in range(buffer.ndim-1)], dtype=np.int64) * if nb: */ __pyx_t_16 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s__asarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyList_New(0); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); /* "ga4py/ga.pyx":1980 * buffer_shape, shape)) * ld_nd = np.asarray([strides[i]/strides[i+1] * for i in range(buffer.ndim-1)], dtype=np.int64) # <<<<<<<<<<<<<< * if nb: * NGA_NbGet64(g_a, lo_nd.data, hi_nd.data, */ __pyx_t_4 = PyInt_FromLong((__pyx_v_buffer->nd - 1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyList_CheckExact(__pyx_t_4) || PyTuple_CheckExact(__pyx_t_4)) { __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __pyx_t_13 = 0; __pyx_t_14 = NULL; } else { __pyx_t_13 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_14 = Py_TYPE(__pyx_t_3)->tp_iternext; } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; for (;;) { if (!__pyx_t_14 && PyList_CheckExact(__pyx_t_3)) { if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_4); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_14 && PyTuple_CheckExact(__pyx_t_3)) { if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_4); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_4 = __pyx_t_14(__pyx_t_3); if (unlikely(!__pyx_t_4)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_4); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1979 * 'buffer_shape=%s != shape=%s' % ( * buffer_shape, shape)) * ld_nd = np.asarray([strides[i]/strides[i+1] # <<<<<<<<<<<<<< * for i in range(buffer.ndim-1)], dtype=np.int64) * if nb: */ __pyx_t_4 = PyObject_GetItem(((PyObject *)__pyx_v_strides), __pyx_v_i); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyNumber_Add(__pyx_v_i, __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_17 = PyObject_GetItem(((PyObject *)__pyx_v_strides), __pyx_t_1); if (!__pyx_t_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_17); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (unlikely(__Pyx_ListComp_Append(__pyx_t_16, (PyObject*)__pyx_t_1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_16)); __Pyx_GIVEREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; __pyx_t_16 = PyDict_New(); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_16)); /* "ga4py/ga.pyx":1980 * buffer_shape, shape)) * ld_nd = np.asarray([strides[i]/strides[i+1] * for i in range(buffer.ndim-1)], dtype=np.int64) # <<<<<<<<<<<<<< * if nb: * NGA_NbGet64(g_a, lo_nd.data, hi_nd.data, */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__int64); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_t_16, ((PyObject *)__pyx_n_s__dtype), __pyx_t_17) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_17 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_16)); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; if (!(likely(((__pyx_t_17) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_17, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_17); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ld_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_ld_nd.diminfo[0].strides = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ld_nd.diminfo[0].shape = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_ld_nd = ((PyArrayObject *)__pyx_t_17); __pyx_t_17 = 0; } __pyx_L11:; /* "ga4py/ga.pyx":1981 * ld_nd = np.asarray([strides[i]/strides[i+1] * for i in range(buffer.ndim-1)], dtype=np.int64) * if nb: # <<<<<<<<<<<<<< * NGA_NbGet64(g_a, lo_nd.data, hi_nd.data, * buffer.data, ld_nd.data, &nbhandle) */ __pyx_t_12 = (__pyx_v_nb != 0); if (__pyx_t_12) { /* "ga4py/ga.pyx":1983 * if nb: * NGA_NbGet64(g_a, lo_nd.data, hi_nd.data, * buffer.data, ld_nd.data, &nbhandle) # <<<<<<<<<<<<<< * return buffer,nbhandle * elif periodic: */ NGA_NbGet64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), ((void *)__pyx_v_buffer->data), ((int64_t *)__pyx_v_ld_nd->data), (&__pyx_v_nbhandle)); /* "ga4py/ga.pyx":1984 * NGA_NbGet64(g_a, lo_nd.data, hi_nd.data, * buffer.data, ld_nd.data, &nbhandle) * return buffer,nbhandle # <<<<<<<<<<<<<< * elif periodic: * NGA_Periodic_get64(g_a, lo_nd.data, hi_nd.data, */ __Pyx_XDECREF(__pyx_r); __pyx_t_17 = __Pyx_PyInt_to_py_Integer(__pyx_v_nbhandle); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_INCREF(((PyObject *)__pyx_v_buffer)); PyTuple_SET_ITEM(__pyx_t_16, 0, ((PyObject *)__pyx_v_buffer)); __Pyx_GIVEREF(((PyObject *)__pyx_v_buffer)); PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_17); __Pyx_GIVEREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_r = ((PyObject *)__pyx_t_16); __pyx_t_16 = 0; goto __pyx_L0; goto __pyx_L18; } /* "ga4py/ga.pyx":1985 * buffer.data, ld_nd.data, &nbhandle) * return buffer,nbhandle * elif periodic: # <<<<<<<<<<<<<< * NGA_Periodic_get64(g_a, lo_nd.data, hi_nd.data, * buffer.data, ld_nd.data) */ __pyx_t_12 = (__pyx_v_periodic != 0); if (__pyx_t_12) { /* "ga4py/ga.pyx":1987 * elif periodic: * NGA_Periodic_get64(g_a, lo_nd.data, hi_nd.data, * buffer.data, ld_nd.data) # <<<<<<<<<<<<<< * return buffer * elif skip is not None: */ NGA_Periodic_get64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), ((void *)__pyx_v_buffer->data), ((int64_t *)__pyx_v_ld_nd->data)); /* "ga4py/ga.pyx":1988 * NGA_Periodic_get64(g_a, lo_nd.data, hi_nd.data, * buffer.data, ld_nd.data) * return buffer # <<<<<<<<<<<<<< * elif skip is not None: * NGA_Strided_get64(g_a, lo_nd.data, hi_nd.data, */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_buffer)); __pyx_r = ((PyObject *)__pyx_v_buffer); goto __pyx_L0; goto __pyx_L18; } /* "ga4py/ga.pyx":1989 * buffer.data, ld_nd.data) * return buffer * elif skip is not None: # <<<<<<<<<<<<<< * NGA_Strided_get64(g_a, lo_nd.data, hi_nd.data, * skip_nd.data, */ __pyx_t_12 = (__pyx_v_skip != Py_None); __pyx_t_11 = (__pyx_t_12 != 0); if (__pyx_t_11) { /* "ga4py/ga.pyx":1992 * NGA_Strided_get64(g_a, lo_nd.data, hi_nd.data, * skip_nd.data, * buffer.data, ld_nd.data) # <<<<<<<<<<<<<< * return buffer * else: */ NGA_Strided_get64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), ((int64_t *)__pyx_v_skip_nd->data), ((void *)__pyx_v_buffer->data), ((int64_t *)__pyx_v_ld_nd->data)); /* "ga4py/ga.pyx":1993 * skip_nd.data, * buffer.data, ld_nd.data) * return buffer # <<<<<<<<<<<<<< * else: * NGA_Get64(g_a, lo_nd.data, hi_nd.data, */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_buffer)); __pyx_r = ((PyObject *)__pyx_v_buffer); goto __pyx_L0; goto __pyx_L18; } /*else*/ { /* "ga4py/ga.pyx":1996 * else: * NGA_Get64(g_a, lo_nd.data, hi_nd.data, * buffer.data, ld_nd.data) # <<<<<<<<<<<<<< * return buffer * */ NGA_Get64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), ((void *)__pyx_v_buffer->data), ((int64_t *)__pyx_v_ld_nd->data)); /* "ga4py/ga.pyx":1997 * NGA_Get64(g_a, lo_nd.data, hi_nd.data, * buffer.data, ld_nd.data) * return buffer # <<<<<<<<<<<<<< * * def get_block_info(int g_a): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_buffer)); __pyx_r = ((PyObject *)__pyx_v_buffer); goto __pyx_L0; } __pyx_L18:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_16); __Pyx_XDECREF(__pyx_t_17); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_shape.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga._get_common", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_shape.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_lo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_ld_nd); __Pyx_XDECREF((PyObject *)__pyx_v_shape); __Pyx_XDECREF((PyObject *)__pyx_v_skip_nd); __Pyx_XDECREF(__pyx_v_dtype); __Pyx_XDECREF(__pyx_v_strides); __Pyx_XDECREF(__pyx_v_buffer_shape); __Pyx_XDECREF(__pyx_v_i); __Pyx_XDECREF((PyObject *)__pyx_v_buffer); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_99get_block_info(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_98get_block_info[] = "get_block_info(int g_a)\nReturns information about the block-cyclic distribution.\n\n The number of blocks along each of the array axes are returned in the\n array num_blocks and the dimensions of the individual blocks, specified in\n the ga.set_block_cyclic or ga.set_block_cyclic_proc_grid subroutines, are\n returned in block_dims.\n\n This is a local function.\n\n :Parameters:\n g_a : int\n the array handle\n\n :returns: The number of blocks along each of the array axes and the dimensions of thet individual blocks, in that order, as ndarrays.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_99get_block_info = {__Pyx_NAMESTR("get_block_info"), (PyCFunction)__pyx_pw_5ga4py_2ga_99get_block_info, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_98get_block_info)}; static PyObject *__pyx_pw_5ga4py_2ga_99get_block_info(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_block_info (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1999; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.get_block_info", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_98get_block_info(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":1999 * return buffer * * def get_block_info(int g_a): # <<<<<<<<<<<<<< * """Returns information about the block-cyclic distribution. * */ static PyObject *__pyx_pf_5ga4py_2ga_98get_block_info(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyArrayObject *__pyx_v_num_blocks = 0; PyArrayObject *__pyx_v_block_dims = 0; int __pyx_v_ndim; __Pyx_LocalBuf_ND __pyx_pybuffernd_block_dims; __Pyx_Buffer __pyx_pybuffer_block_dims; __Pyx_LocalBuf_ND __pyx_pybuffernd_num_blocks; __Pyx_Buffer __pyx_pybuffer_num_blocks; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyArrayObject *__pyx_t_6 = NULL; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("get_block_info", 0); __pyx_pybuffer_num_blocks.pybuffer.buf = NULL; __pyx_pybuffer_num_blocks.refcount = 0; __pyx_pybuffernd_num_blocks.data = NULL; __pyx_pybuffernd_num_blocks.rcbuffer = &__pyx_pybuffer_num_blocks; __pyx_pybuffer_block_dims.pybuffer.buf = NULL; __pyx_pybuffer_block_dims.refcount = 0; __pyx_pybuffernd_block_dims.data = NULL; __pyx_pybuffernd_block_dims.rcbuffer = &__pyx_pybuffer_block_dims; /* "ga4py/ga.pyx":2017 * """ * cdef np.ndarray[np.int32_t, ndim=1] num_blocks, block_dims * cdef int ndim = GA_Ndim(g_a) # <<<<<<<<<<<<<< * num_blocks = np.zeros(ndim, dtype=np.int32) * block_dims = np.zeros(ndim, dtype=np.int32) */ __pyx_v_ndim = GA_Ndim(__pyx_v_g_a); /* "ga4py/ga.pyx":2018 * cdef np.ndarray[np.int32_t, ndim=1] num_blocks, block_dims * cdef int ndim = GA_Ndim(g_a) * num_blocks = np.zeros(ndim, dtype=np.int32) # <<<<<<<<<<<<<< * block_dims = np.zeros(ndim, dtype=np.int32) * GA_Get_block_info(g_a, num_blocks.data, block_dims.data) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__zeros); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyInt_FromLong(__pyx_v_ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__int32); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_num_blocks.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_num_blocks.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_num_blocks.rcbuffer->pybuffer, (PyObject*)__pyx_v_num_blocks, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_num_blocks.diminfo[0].strides = __pyx_pybuffernd_num_blocks.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_num_blocks.diminfo[0].shape = __pyx_pybuffernd_num_blocks.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_num_blocks = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/ga.pyx":2019 * cdef int ndim = GA_Ndim(g_a) * num_blocks = np.zeros(ndim, dtype=np.int32) * block_dims = np.zeros(ndim, dtype=np.int32) # <<<<<<<<<<<<<< * GA_Get_block_info(g_a, num_blocks.data, block_dims.data) * return num_blocks,block_dims */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__zeros); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyInt_FromLong(__pyx_v_ndim); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int32); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_block_dims.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_block_dims.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_block_dims.rcbuffer->pybuffer, (PyObject*)__pyx_v_block_dims, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_block_dims.diminfo[0].strides = __pyx_pybuffernd_block_dims.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_block_dims.diminfo[0].shape = __pyx_pybuffernd_block_dims.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_block_dims = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2020 * num_blocks = np.zeros(ndim, dtype=np.int32) * block_dims = np.zeros(ndim, dtype=np.int32) * GA_Get_block_info(g_a, num_blocks.data, block_dims.data) # <<<<<<<<<<<<<< * return num_blocks,block_dims * */ GA_Get_block_info(__pyx_v_g_a, ((int *)__pyx_v_num_blocks->data), ((int *)__pyx_v_block_dims->data)); /* "ga4py/ga.pyx":2021 * block_dims = np.zeros(ndim, dtype=np.int32) * GA_Get_block_info(g_a, num_blocks.data, block_dims.data) * return num_blocks,block_dims # <<<<<<<<<<<<<< * * def get_diag(int g_a, int g_v): */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2021; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(((PyObject *)__pyx_v_num_blocks)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_num_blocks)); __Pyx_GIVEREF(((PyObject *)__pyx_v_num_blocks)); __Pyx_INCREF(((PyObject *)__pyx_v_block_dims)); PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_block_dims)); __Pyx_GIVEREF(((PyObject *)__pyx_v_block_dims)); __pyx_r = ((PyObject *)__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_block_dims.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_num_blocks.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.get_block_info", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_block_dims.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_num_blocks.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_num_blocks); __Pyx_XDECREF((PyObject *)__pyx_v_block_dims); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_101get_diag(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_100get_diag[] = "get_diag(int g_a, int g_v)\nInserts the diagonal elements of this matrix g_a into the vector g_v.\n\n This is a collective operation.\n \n :Parameters:\n g_a : int\n the array handle\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_101get_diag = {__Pyx_NAMESTR("get_diag"), (PyCFunction)__pyx_pw_5ga4py_2ga_101get_diag, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_100get_diag)}; static PyObject *__pyx_pw_5ga4py_2ga_101get_diag(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_v; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_diag (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_v,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_v)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("get_diag", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2023; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_diag") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2023; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2023; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_v = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_v == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2023; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("get_diag", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2023; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.get_diag", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_100get_diag(__pyx_self, __pyx_v_g_a, __pyx_v_g_v); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2023 * return num_blocks,block_dims * * def get_diag(int g_a, int g_v): # <<<<<<<<<<<<<< * """Inserts the diagonal elements of this matrix g_a into the vector g_v. * */ static PyObject *__pyx_pf_5ga4py_2ga_100get_diag(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_v) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_diag", 0); /* "ga4py/ga.pyx":2033 * * """ * GA_Get_diag(g_a, g_v) # <<<<<<<<<<<<<< * * def get_debug(): */ GA_Get_diag(__pyx_v_g_a, __pyx_v_g_v); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_103get_debug(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_102get_debug[] = "get_debug()\nReturns the value of an internal flag in the GA library whose value can\n be set using the ga.set_debug() subroutine.\n\n This is a local operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_103get_debug = {__Pyx_NAMESTR("get_debug"), (PyCFunction)__pyx_pw_5ga4py_2ga_103get_debug, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_102get_debug)}; static PyObject *__pyx_pw_5ga4py_2ga_103get_debug(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_debug (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_102get_debug(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2035 * GA_Get_diag(g_a, g_v) * * def get_debug(): # <<<<<<<<<<<<<< * """Returns the value of an internal flag in the GA library whose value can * be set using the ga.set_debug() subroutine. */ static PyObject *__pyx_pf_5ga4py_2ga_102get_debug(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("get_debug", 0); /* "ga4py/ga.pyx":2042 * * """ * return GA_Get_debug() # <<<<<<<<<<<<<< * * def gop(X, char *op): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Get_debug()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2042; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.get_debug", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_105gop(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_104gop[] = "gop(X, char *op)\nGlobal operation.\n\n X(1:N) is a vector present on each process. gop 'sums' elements of X\n accross all nodes using the commutative operator op. The result is\n broadcast to all nodes. Supported operations include '+', '*', 'max',\n 'min', 'absmax', 'absmin'. The use of lowerecase for operators is\n necessary.\n\n X must be a contiguous array-like. X is not guaranteed to be modified\n in-place so use as:\n\n >>> value = ga.gop((1,2,3), \"+\")\n\n This operation is provided only for convenience purposes: it is available\n regardless of the message-passing library that GA is running with.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_105gop = {__Pyx_NAMESTR("gop"), (PyCFunction)__pyx_pw_5ga4py_2ga_105gop, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_104gop)}; static PyObject *__pyx_pw_5ga4py_2ga_105gop(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_X = 0; char *__pyx_v_op; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("gop (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__X,&__pyx_n_s__op,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__X)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__op)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("gop", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2044; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gop") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2044; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_X = values[0]; __pyx_v_op = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_op) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2044; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("gop", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2044; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.gop", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_104gop(__pyx_self, __pyx_v_X, __pyx_v_op); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2044 * return GA_Get_debug() * * def gop(X, char *op): # <<<<<<<<<<<<<< * """Global operation. * */ static PyObject *__pyx_pf_5ga4py_2ga_104gop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_X, char *__pyx_v_op) { PyArrayObject *__pyx_v_X_nd = 0; int __pyx_v_size; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; Py_ssize_t __pyx_t_9; int __pyx_t_10; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("gop", 0); /* "ga4py/ga.pyx":2064 * * """ * cdef np.ndarray X_nd = np.asarray(X) # <<<<<<<<<<<<<< * cdef int size = 0 * if not X_nd.flags['C_CONTIGUOUS']: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__asarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_X); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_X); __Pyx_GIVEREF(__pyx_v_X); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_X_nd = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":2065 * """ * cdef np.ndarray X_nd = np.asarray(X) * cdef int size = 0 # <<<<<<<<<<<<<< * if not X_nd.flags['C_CONTIGUOUS']: * raise ValueError, "X must be contiguous" */ __pyx_v_size = 0; /* "ga4py/ga.pyx":2066 * cdef np.ndarray X_nd = np.asarray(X) * cdef int size = 0 * if not X_nd.flags['C_CONTIGUOUS']: # <<<<<<<<<<<<<< * raise ValueError, "X must be contiguous" * try: */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__flags); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2066; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyObject_GetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__C_CONTIGUOUS)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2066; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2066; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = ((!__pyx_t_4) != 0); if (__pyx_t_5) { /* "ga4py/ga.pyx":2067 * cdef int size = 0 * if not X_nd.flags['C_CONTIGUOUS']: * raise ValueError, "X must be contiguous" # <<<<<<<<<<<<<< * try: * size = len(X_nd) */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_30), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2067; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":2068 * if not X_nd.flags['C_CONTIGUOUS']: * raise ValueError, "X must be contiguous" * try: # <<<<<<<<<<<<<< * size = len(X_nd) * except TypeError: */ { __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_8); /*try:*/ { /* "ga4py/ga.pyx":2069 * raise ValueError, "X must be contiguous" * try: * size = len(X_nd) # <<<<<<<<<<<<<< * except TypeError: * size = 1 */ __pyx_t_9 = PyObject_Length(((PyObject *)__pyx_v_X_nd)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2069; __pyx_clineno = __LINE__; goto __pyx_L4_error;} __pyx_v_size = __pyx_t_9; } __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L11_try_end; __pyx_L4_error:; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":2070 * try: * size = len(X_nd) * except TypeError: # <<<<<<<<<<<<<< * size = 1 * if X_nd.dtype == np.dtype(np.intc): */ __pyx_t_10 = PyErr_ExceptionMatches(__pyx_builtin_TypeError); if (__pyx_t_10) { __Pyx_AddTraceback("ga4py.ga.gop", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2070; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_GOTREF(__pyx_t_3); __Pyx_GOTREF(__pyx_t_2); /* "ga4py/ga.pyx":2071 * size = len(X_nd) * except TypeError: * size = 1 # <<<<<<<<<<<<<< * if X_nd.dtype == np.dtype(np.intc): * GA_Igop(X_nd.data, size, op) */ __pyx_v_size = 1; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L5_exception_handled; } __pyx_L6_except_error:; __Pyx_XGIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_8); __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); goto __pyx_L1_error; __pyx_L5_exception_handled:; __Pyx_XGIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_8); __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); __pyx_L11_try_end:; } /* "ga4py/ga.pyx":2072 * except TypeError: * size = 1 * if X_nd.dtype == np.dtype(np.intc): # <<<<<<<<<<<<<< * GA_Igop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.long): */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2072; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2072; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__intc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2072; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2072; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2072; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2072; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2072; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_5) { /* "ga4py/ga.pyx":2073 * size = 1 * if X_nd.dtype == np.dtype(np.intc): * GA_Igop(X_nd.data, size, op) # <<<<<<<<<<<<<< * elif X_nd.dtype == np.dtype(np.long): * GA_Lgop(X_nd.data, size, op) */ GA_Igop(((int *)__pyx_v_X_nd->data), __pyx_v_size, __pyx_v_op); goto __pyx_L14; } /* "ga4py/ga.pyx":2074 * if X_nd.dtype == np.dtype(np.intc): * GA_Igop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.long): # <<<<<<<<<<<<<< * GA_Lgop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.longlong): */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2074; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2074; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__long); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2074; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2074; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2074; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2074; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2074; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_5) { /* "ga4py/ga.pyx":2075 * GA_Igop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.long): * GA_Lgop(X_nd.data, size, op) # <<<<<<<<<<<<<< * elif X_nd.dtype == np.dtype(np.longlong): * GA_Llgop(X_nd.data, size, op) */ GA_Lgop(((long *)__pyx_v_X_nd->data), __pyx_v_size, __pyx_v_op); goto __pyx_L14; } /* "ga4py/ga.pyx":2076 * elif X_nd.dtype == np.dtype(np.long): * GA_Lgop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.longlong): # <<<<<<<<<<<<<< * GA_Llgop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.single): */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2076; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2076; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__longlong); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2076; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2076; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2076; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2076; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2076; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_5) { /* "ga4py/ga.pyx":2077 * GA_Lgop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.longlong): * GA_Llgop(X_nd.data, size, op) # <<<<<<<<<<<<<< * elif X_nd.dtype == np.dtype(np.single): * GA_Fgop(X_nd.data, size, op) */ GA_Llgop(((PY_LONG_LONG *)__pyx_v_X_nd->data), __pyx_v_size, __pyx_v_op); goto __pyx_L14; } /* "ga4py/ga.pyx":2078 * elif X_nd.dtype == np.dtype(np.longlong): * GA_Llgop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.single): # <<<<<<<<<<<<<< * GA_Fgop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.double): */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2078; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2078; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__single); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2078; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2078; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2078; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2078; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2078; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_5) { /* "ga4py/ga.pyx":2079 * GA_Llgop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.single): * GA_Fgop(X_nd.data, size, op) # <<<<<<<<<<<<<< * elif X_nd.dtype == np.dtype(np.double): * GA_Dgop(X_nd.data, size, op) */ GA_Fgop(((float *)__pyx_v_X_nd->data), __pyx_v_size, __pyx_v_op); goto __pyx_L14; } /* "ga4py/ga.pyx":2080 * elif X_nd.dtype == np.dtype(np.single): * GA_Fgop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.double): # <<<<<<<<<<<<<< * GA_Dgop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.complex64): */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2080; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2080; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__double); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2080; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2080; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2080; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2080; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2080; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_5) { /* "ga4py/ga.pyx":2081 * GA_Fgop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.double): * GA_Dgop(X_nd.data, size, op) # <<<<<<<<<<<<<< * elif X_nd.dtype == np.dtype(np.complex64): * GA_Cgop(X_nd.data, size, op) */ GA_Dgop(((double *)__pyx_v_X_nd->data), __pyx_v_size, __pyx_v_op); goto __pyx_L14; } /* "ga4py/ga.pyx":2082 * elif X_nd.dtype == np.dtype(np.double): * GA_Dgop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.complex64): # <<<<<<<<<<<<<< * GA_Cgop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.complex128): */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2082; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2082; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__complex64); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2082; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2082; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2082; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2082; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2082; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_5) { /* "ga4py/ga.pyx":2083 * GA_Dgop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.complex64): * GA_Cgop(X_nd.data, size, op) # <<<<<<<<<<<<<< * elif X_nd.dtype == np.dtype(np.complex128): * GA_Zgop(X_nd.data, size, op) */ GA_Cgop(((SingleComplex *)__pyx_v_X_nd->data), __pyx_v_size, __pyx_v_op); goto __pyx_L14; } /* "ga4py/ga.pyx":2084 * elif X_nd.dtype == np.dtype(np.complex64): * GA_Cgop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.complex128): # <<<<<<<<<<<<<< * GA_Zgop(X_nd.data, size, op) * else: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2084; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2084; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__complex128); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2084; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2084; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2084; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2084; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2084; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_5) { /* "ga4py/ga.pyx":2085 * GA_Cgop(X_nd.data, size, op) * elif X_nd.dtype == np.dtype(np.complex128): * GA_Zgop(X_nd.data, size, op) # <<<<<<<<<<<<<< * else: * raise TypeError, "type not supported by ga.gop %s" % X_nd.dtype */ GA_Zgop(((DoubleComplex *)__pyx_v_X_nd->data), __pyx_v_size, __pyx_v_op); goto __pyx_L14; } /*else*/ { /* "ga4py/ga.pyx":2087 * GA_Zgop(X_nd.data, size, op) * else: * raise TypeError, "type not supported by ga.gop %s" % X_nd.dtype # <<<<<<<<<<<<<< * return X_nd * */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2087; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_31), __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2087; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_t_1), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2087; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L14:; /* "ga4py/ga.pyx":2088 * else: * raise TypeError, "type not supported by ga.gop %s" % X_nd.dtype * return X_nd # <<<<<<<<<<<<<< * * def gop_add(X): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_X_nd)); __pyx_r = ((PyObject *)__pyx_v_X_nd); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.gop", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_X_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_107gop_add(PyObject *__pyx_self, PyObject *__pyx_v_X); /*proto*/ static char __pyx_doc_5ga4py_2ga_106gop_add[] = "gop_add(X)"; static PyMethodDef __pyx_mdef_5ga4py_2ga_107gop_add = {__Pyx_NAMESTR("gop_add"), (PyCFunction)__pyx_pw_5ga4py_2ga_107gop_add, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_106gop_add)}; static PyObject *__pyx_pw_5ga4py_2ga_107gop_add(PyObject *__pyx_self, PyObject *__pyx_v_X) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("gop_add (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_106gop_add(__pyx_self, ((PyObject *)__pyx_v_X)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2090 * return X_nd * * def gop_add(X): # <<<<<<<<<<<<<< * return gop(X, "+") * */ static PyObject *__pyx_pf_5ga4py_2ga_106gop_add(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_X) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("gop_add", 0); /* "ga4py/ga.pyx":2091 * * def gop_add(X): * return gop(X, "+") # <<<<<<<<<<<<<< * * def gop_multiply(X): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__gop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_X); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_X); __Pyx_GIVEREF(__pyx_v_X); __Pyx_INCREF(((PyObject *)__pyx_kp_s_32)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_kp_s_32)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_32)); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.gop_add", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_109gop_multiply(PyObject *__pyx_self, PyObject *__pyx_v_X); /*proto*/ static char __pyx_doc_5ga4py_2ga_108gop_multiply[] = "gop_multiply(X)"; static PyMethodDef __pyx_mdef_5ga4py_2ga_109gop_multiply = {__Pyx_NAMESTR("gop_multiply"), (PyCFunction)__pyx_pw_5ga4py_2ga_109gop_multiply, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_108gop_multiply)}; static PyObject *__pyx_pw_5ga4py_2ga_109gop_multiply(PyObject *__pyx_self, PyObject *__pyx_v_X) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("gop_multiply (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_108gop_multiply(__pyx_self, ((PyObject *)__pyx_v_X)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2093 * return gop(X, "+") * * def gop_multiply(X): # <<<<<<<<<<<<<< * return gop(X, "*") * */ static PyObject *__pyx_pf_5ga4py_2ga_108gop_multiply(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_X) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("gop_multiply", 0); /* "ga4py/ga.pyx":2094 * * def gop_multiply(X): * return gop(X, "*") # <<<<<<<<<<<<<< * * def gop_max(X): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__gop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2094; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2094; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_X); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_X); __Pyx_GIVEREF(__pyx_v_X); __Pyx_INCREF(((PyObject *)__pyx_kp_s_33)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_kp_s_33)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_33)); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2094; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.gop_multiply", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_111gop_max(PyObject *__pyx_self, PyObject *__pyx_v_X); /*proto*/ static char __pyx_doc_5ga4py_2ga_110gop_max[] = "gop_max(X)"; static PyMethodDef __pyx_mdef_5ga4py_2ga_111gop_max = {__Pyx_NAMESTR("gop_max"), (PyCFunction)__pyx_pw_5ga4py_2ga_111gop_max, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_110gop_max)}; static PyObject *__pyx_pw_5ga4py_2ga_111gop_max(PyObject *__pyx_self, PyObject *__pyx_v_X) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("gop_max (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_110gop_max(__pyx_self, ((PyObject *)__pyx_v_X)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2096 * return gop(X, "*") * * def gop_max(X): # <<<<<<<<<<<<<< * return gop(X, "max") * */ static PyObject *__pyx_pf_5ga4py_2ga_110gop_max(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_X) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("gop_max", 0); /* "ga4py/ga.pyx":2097 * * def gop_max(X): * return gop(X, "max") # <<<<<<<<<<<<<< * * def gop_min(X): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__gop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2097; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2097; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_X); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_X); __Pyx_GIVEREF(__pyx_v_X); __Pyx_INCREF(((PyObject *)__pyx_n_s__max)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_n_s__max)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__max)); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2097; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.gop_max", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_113gop_min(PyObject *__pyx_self, PyObject *__pyx_v_X); /*proto*/ static char __pyx_doc_5ga4py_2ga_112gop_min[] = "gop_min(X)"; static PyMethodDef __pyx_mdef_5ga4py_2ga_113gop_min = {__Pyx_NAMESTR("gop_min"), (PyCFunction)__pyx_pw_5ga4py_2ga_113gop_min, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_112gop_min)}; static PyObject *__pyx_pw_5ga4py_2ga_113gop_min(PyObject *__pyx_self, PyObject *__pyx_v_X) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("gop_min (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_112gop_min(__pyx_self, ((PyObject *)__pyx_v_X)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2099 * return gop(X, "max") * * def gop_min(X): # <<<<<<<<<<<<<< * return gop(X, "min") * */ static PyObject *__pyx_pf_5ga4py_2ga_112gop_min(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_X) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("gop_min", 0); /* "ga4py/ga.pyx":2100 * * def gop_min(X): * return gop(X, "min") # <<<<<<<<<<<<<< * * def gop_absmax(X): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__gop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_X); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_X); __Pyx_GIVEREF(__pyx_v_X); __Pyx_INCREF(((PyObject *)__pyx_n_s__min)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_n_s__min)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__min)); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.gop_min", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_115gop_absmax(PyObject *__pyx_self, PyObject *__pyx_v_X); /*proto*/ static char __pyx_doc_5ga4py_2ga_114gop_absmax[] = "gop_absmax(X)"; static PyMethodDef __pyx_mdef_5ga4py_2ga_115gop_absmax = {__Pyx_NAMESTR("gop_absmax"), (PyCFunction)__pyx_pw_5ga4py_2ga_115gop_absmax, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_114gop_absmax)}; static PyObject *__pyx_pw_5ga4py_2ga_115gop_absmax(PyObject *__pyx_self, PyObject *__pyx_v_X) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("gop_absmax (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_114gop_absmax(__pyx_self, ((PyObject *)__pyx_v_X)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2102 * return gop(X, "min") * * def gop_absmax(X): # <<<<<<<<<<<<<< * return gop(X, "absmax") * */ static PyObject *__pyx_pf_5ga4py_2ga_114gop_absmax(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_X) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("gop_absmax", 0); /* "ga4py/ga.pyx":2103 * * def gop_absmax(X): * return gop(X, "absmax") # <<<<<<<<<<<<<< * * def gop_absmin(X): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__gop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_X); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_X); __Pyx_GIVEREF(__pyx_v_X); __Pyx_INCREF(((PyObject *)__pyx_n_s__absmax)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_n_s__absmax)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__absmax)); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.gop_absmax", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_117gop_absmin(PyObject *__pyx_self, PyObject *__pyx_v_X); /*proto*/ static char __pyx_doc_5ga4py_2ga_116gop_absmin[] = "gop_absmin(X)"; static PyMethodDef __pyx_mdef_5ga4py_2ga_117gop_absmin = {__Pyx_NAMESTR("gop_absmin"), (PyCFunction)__pyx_pw_5ga4py_2ga_117gop_absmin, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_116gop_absmin)}; static PyObject *__pyx_pw_5ga4py_2ga_117gop_absmin(PyObject *__pyx_self, PyObject *__pyx_v_X) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("gop_absmin (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_116gop_absmin(__pyx_self, ((PyObject *)__pyx_v_X)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2105 * return gop(X, "absmax") * * def gop_absmin(X): # <<<<<<<<<<<<<< * return gop(X, "absmin") * */ static PyObject *__pyx_pf_5ga4py_2ga_116gop_absmin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_X) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("gop_absmin", 0); /* "ga4py/ga.pyx":2106 * * def gop_absmin(X): * return gop(X, "absmin") # <<<<<<<<<<<<<< * * def has_ghosts(int g_a): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__gop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_X); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_X); __Pyx_GIVEREF(__pyx_v_X); __Pyx_INCREF(((PyObject *)__pyx_n_s__absmin)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_n_s__absmin)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__absmin)); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.gop_absmin", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_119has_ghosts(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_118has_ghosts[] = "has_ghosts(int g_a)\nDetermines whether any dimension of the given array has ghost cells.\n\n This is a collective operation. \n\n :Parameters:\n g_a : int\n the array handle\n\n :returns: True if the global array has some dimensions for which the ghost cell width is greater than zero, it returns False otherwise.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_119has_ghosts = {__Pyx_NAMESTR("has_ghosts"), (PyCFunction)__pyx_pw_5ga4py_2ga_119has_ghosts, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_118has_ghosts)}; static PyObject *__pyx_pw_5ga4py_2ga_119has_ghosts(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("has_ghosts (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2108; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.has_ghosts", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_118has_ghosts(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2108 * return gop(X, "absmin") * * def has_ghosts(int g_a): # <<<<<<<<<<<<<< * """Determines whether any dimension of the given array has ghost cells. * */ static PyObject *__pyx_pf_5ga4py_2ga_118has_ghosts(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("has_ghosts", 0); /* "ga4py/ga.pyx":2120 * * """ * if GA_Has_ghosts(g_a) == 1: # <<<<<<<<<<<<<< * return True * return False */ __pyx_t_1 = ((GA_Has_ghosts(__pyx_v_g_a) == 1) != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":2121 * """ * if GA_Has_ghosts(g_a) == 1: * return True # <<<<<<<<<<<<<< * return False * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":2122 * if GA_Has_ghosts(g_a) == 1: * return True * return False # <<<<<<<<<<<<<< * * def init_fence(): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.ga.has_ghosts", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_121init_fence(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_120init_fence[] = "init_fence()\nInitializes tracing of completion status of data movement operations.\n\n This operation is local.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_121init_fence = {__Pyx_NAMESTR("init_fence"), (PyCFunction)__pyx_pw_5ga4py_2ga_121init_fence, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_120init_fence)}; static PyObject *__pyx_pw_5ga4py_2ga_121init_fence(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("init_fence (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_120init_fence(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2124 * return False * * def init_fence(): # <<<<<<<<<<<<<< * """Initializes tracing of completion status of data movement operations. * */ static PyObject *__pyx_pf_5ga4py_2ga_120init_fence(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("init_fence", 0); /* "ga4py/ga.pyx":2130 * * """ * GA_Init_fence() # <<<<<<<<<<<<<< * * def initialize(): */ GA_Init_fence(); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_123initialize(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_122initialize[] = "initialize()\nAllocates and initializes internal data structures in Global Arrays.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_123initialize = {__Pyx_NAMESTR("initialize"), (PyCFunction)__pyx_pw_5ga4py_2ga_123initialize, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_122initialize)}; static PyObject *__pyx_pw_5ga4py_2ga_123initialize(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("initialize (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_122initialize(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2132 * GA_Init_fence() * * def initialize(): # <<<<<<<<<<<<<< * """Allocates and initializes internal data structures in Global Arrays. * */ static PyObject *__pyx_pf_5ga4py_2ga_122initialize(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_v_atexit = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("initialize", 0); /* "ga4py/ga.pyx":2138 * * """ * import atexit # <<<<<<<<<<<<<< * global _initialized * GA_Initialize() */ __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__atexit), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_atexit = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/ga.pyx":2140 * import atexit * global _initialized * GA_Initialize() # <<<<<<<<<<<<<< * GA_Register_stack_memory(_gapy_malloc, _gapy_free) * atexit.register(terminate) */ GA_Initialize(); /* "ga4py/ga.pyx":2141 * global _initialized * GA_Initialize() * GA_Register_stack_memory(_gapy_malloc, _gapy_free) # <<<<<<<<<<<<<< * atexit.register(terminate) * _initialized = True */ GA_Register_stack_memory(__pyx_f_5ga4py_2ga__gapy_malloc, __pyx_f_5ga4py_2ga__gapy_free); /* "ga4py/ga.pyx":2142 * GA_Initialize() * GA_Register_stack_memory(_gapy_malloc, _gapy_free) * atexit.register(terminate) # <<<<<<<<<<<<<< * _initialized = True * */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_atexit, __pyx_n_s__register); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__terminate); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":2143 * GA_Register_stack_memory(_gapy_malloc, _gapy_free) * atexit.register(terminate) * _initialized = True # <<<<<<<<<<<<<< * * def initialize_ltd(size_t limit): */ __pyx_v_5ga4py_2ga__initialized = 1; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.initialize", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_atexit); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_125initialize_ltd(PyObject *__pyx_self, PyObject *__pyx_arg_limit); /*proto*/ static char __pyx_doc_5ga4py_2ga_124initialize_ltd[] = "initialize_ltd(size_t limit)\nAllocates and initializes internal data structures and sets limit for\n memory used in global arrays.\n \n The limit is per process: it is the amount of memory that the given\n processor can contribute to collective allocation of global arrays. It\n does not include temporary storage that GA might be allocating (and\n releasing) during execution of a particular operation.\n\n limit = 0 means \"allow unlimited memory usage\" in which case this\n operation is equivalent to GA_initialize.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_125initialize_ltd = {__Pyx_NAMESTR("initialize_ltd"), (PyCFunction)__pyx_pw_5ga4py_2ga_125initialize_ltd, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_124initialize_ltd)}; static PyObject *__pyx_pw_5ga4py_2ga_125initialize_ltd(PyObject *__pyx_self, PyObject *__pyx_arg_limit) { size_t __pyx_v_limit; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("initialize_ltd (wrapper)", 0); assert(__pyx_arg_limit); { __pyx_v_limit = __Pyx_PyInt_AsSize_t(__pyx_arg_limit); if (unlikely((__pyx_v_limit == (size_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2145; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.initialize_ltd", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_124initialize_ltd(__pyx_self, ((size_t)__pyx_v_limit)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2145 * _initialized = True * * def initialize_ltd(size_t limit): # <<<<<<<<<<<<<< * """Allocates and initializes internal data structures and sets limit for * memory used in global arrays. */ static PyObject *__pyx_pf_5ga4py_2ga_124initialize_ltd(CYTHON_UNUSED PyObject *__pyx_self, size_t __pyx_v_limit) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("initialize_ltd", 0); /* "ga4py/ga.pyx":2161 * """ * global _initialized * GA_Initialize_ltd(limit) # <<<<<<<<<<<<<< * _initialized = True * */ GA_Initialize_ltd(__pyx_v_limit); /* "ga4py/ga.pyx":2162 * global _initialized * GA_Initialize_ltd(limit) * _initialized = True # <<<<<<<<<<<<<< * * def initialized(): */ __pyx_v_5ga4py_2ga__initialized = 1; __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_127initialized(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_126initialized[] = "initialized()\nReturns whether ga has been initialized."; static PyMethodDef __pyx_mdef_5ga4py_2ga_127initialized = {__Pyx_NAMESTR("initialized"), (PyCFunction)__pyx_pw_5ga4py_2ga_127initialized, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_126initialized)}; static PyObject *__pyx_pw_5ga4py_2ga_127initialized(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("initialized (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_126initialized(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2164 * _initialized = True * * def initialized(): # <<<<<<<<<<<<<< * """Returns whether ga has been initialized.""" * return _initialized */ static PyObject *__pyx_pf_5ga4py_2ga_126initialized(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("initialized", 0); /* "ga4py/ga.pyx":2166 * def initialized(): * """Returns whether ga has been initialized.""" * return _initialized # <<<<<<<<<<<<<< * * cpdef inquire(int g_a): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_5ga4py_2ga__initialized); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.initialized", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2168 * return _initialized * * cpdef inquire(int g_a): # <<<<<<<<<<<<<< * cdef int gtype * cdef int ndim = GA_Ndim(g_a) */ static PyObject *__pyx_pw_5ga4py_2ga_129inquire(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static PyObject *__pyx_f_5ga4py_2ga_inquire(int __pyx_v_g_a, CYTHON_UNUSED int __pyx_skip_dispatch) { int __pyx_v_gtype; int __pyx_v_ndim; PyArrayObject *__pyx_v_dims = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_dims; __Pyx_Buffer __pyx_pybuffer_dims; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyArrayObject *__pyx_t_6 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("inquire", 0); __pyx_pybuffer_dims.pybuffer.buf = NULL; __pyx_pybuffer_dims.refcount = 0; __pyx_pybuffernd_dims.data = NULL; __pyx_pybuffernd_dims.rcbuffer = &__pyx_pybuffer_dims; /* "ga4py/ga.pyx":2170 * cpdef inquire(int g_a): * cdef int gtype * cdef int ndim = GA_Ndim(g_a) # <<<<<<<<<<<<<< * cdef np.ndarray[np.int64_t, ndim=1] dims=np.zeros((ndim), dtype=np.int64) * NGA_Inquire64(g_a, >ype, &ndim, dims.data) */ __pyx_v_ndim = GA_Ndim(__pyx_v_g_a); /* "ga4py/ga.pyx":2171 * cdef int gtype * cdef int ndim = GA_Ndim(g_a) * cdef np.ndarray[np.int64_t, ndim=1] dims=np.zeros((ndim), dtype=np.int64) # <<<<<<<<<<<<<< * NGA_Inquire64(g_a, >ype, &ndim, dims.data) * return gtype,dims */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__zeros); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyInt_FromLong(__pyx_v_ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__int64); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { __pyx_v_dims = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_dims.rcbuffer->pybuffer.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_pybuffernd_dims.diminfo[0].strides = __pyx_pybuffernd_dims.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dims.diminfo[0].shape = __pyx_pybuffernd_dims.rcbuffer->pybuffer.shape[0]; } } __pyx_t_6 = 0; __pyx_v_dims = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/ga.pyx":2172 * cdef int ndim = GA_Ndim(g_a) * cdef np.ndarray[np.int64_t, ndim=1] dims=np.zeros((ndim), dtype=np.int64) * NGA_Inquire64(g_a, >ype, &ndim, dims.data) # <<<<<<<<<<<<<< * return gtype,dims * */ NGA_Inquire64(__pyx_v_g_a, (&__pyx_v_gtype), (&__pyx_v_ndim), ((int64_t *)__pyx_v_dims->data)); /* "ga4py/ga.pyx":2173 * cdef np.ndarray[np.int64_t, ndim=1] dims=np.zeros((ndim), dtype=np.int64) * NGA_Inquire64(g_a, >ype, &ndim, dims.data) * return gtype,dims # <<<<<<<<<<<<<< * * cpdef np.ndarray[np.int64_t, ndim=1] inquire_dims(int g_a): */ __Pyx_XDECREF(__pyx_r); __pyx_t_5 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __Pyx_INCREF(((PyObject *)__pyx_v_dims)); PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_dims)); __Pyx_GIVEREF(((PyObject *)__pyx_v_dims)); __pyx_t_5 = 0; __pyx_r = ((PyObject *)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.inquire", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_dims); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_129inquire(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_128inquire[] = "inquire(int g_a)"; static PyObject *__pyx_pw_5ga4py_2ga_129inquire(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("inquire (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2168; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.inquire", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_128inquire(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2168 * return _initialized * * cpdef inquire(int g_a): # <<<<<<<<<<<<<< * cdef int gtype * cdef int ndim = GA_Ndim(g_a) */ static PyObject *__pyx_pf_5ga4py_2ga_128inquire(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("inquire", 0); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __pyx_f_5ga4py_2ga_inquire(__pyx_v_g_a, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.inquire", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2175 * return gtype,dims * * cpdef np.ndarray[np.int64_t, ndim=1] inquire_dims(int g_a): # <<<<<<<<<<<<<< * cdef int gtype * cdef np.ndarray[np.int64_t, ndim=1] dims */ static PyObject *__pyx_pw_5ga4py_2ga_131inquire_dims(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static PyArrayObject *__pyx_f_5ga4py_2ga_inquire_dims(int __pyx_v_g_a, CYTHON_UNUSED int __pyx_skip_dispatch) { CYTHON_UNUSED int __pyx_v_gtype; PyArrayObject *__pyx_v_dims = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_dims; __Pyx_Buffer __pyx_pybuffer_dims; PyArrayObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *(*__pyx_t_5)(PyObject *); int __pyx_t_6; PyArrayObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("inquire_dims", 0); __pyx_pybuffer_dims.pybuffer.buf = NULL; __pyx_pybuffer_dims.refcount = 0; __pyx_pybuffernd_dims.data = NULL; __pyx_pybuffernd_dims.rcbuffer = &__pyx_pybuffer_dims; /* "ga4py/ga.pyx":2178 * cdef int gtype * cdef np.ndarray[np.int64_t, ndim=1] dims * gtype,dims = inquire(g_a) # <<<<<<<<<<<<<< * return dims * */ __pyx_t_1 = __pyx_f_5ga4py_2ga_inquire(__pyx_v_g_a, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_3 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L4_unpacking_done; __pyx_L3_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L4_unpacking_done:; } __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_gtype = __pyx_t_6; __pyx_t_7 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims.rcbuffer->pybuffer); __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_6 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims.rcbuffer->pybuffer, (PyObject*)__pyx_v_dims, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_dims.diminfo[0].strides = __pyx_pybuffernd_dims.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dims.diminfo[0].shape = __pyx_pybuffernd_dims.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_7 = 0; __pyx_v_dims = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":2179 * cdef np.ndarray[np.int64_t, ndim=1] dims * gtype,dims = inquire(g_a) * return dims # <<<<<<<<<<<<<< * * def inquire_memory(): */ __Pyx_XDECREF(((PyObject *)__pyx_r)); __Pyx_INCREF(((PyObject *)__pyx_v_dims)); __pyx_r = ((PyArrayObject *)__pyx_v_dims); goto __pyx_L0; __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.inquire_dims", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_dims); __Pyx_XGIVEREF((PyObject *)__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_131inquire_dims(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_130inquire_dims[] = "inquire_dims(int g_a) -> ndarray"; static PyObject *__pyx_pw_5ga4py_2ga_131inquire_dims(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("inquire_dims (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.inquire_dims", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_130inquire_dims(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2175 * return gtype,dims * * cpdef np.ndarray[np.int64_t, ndim=1] inquire_dims(int g_a): # <<<<<<<<<<<<<< * cdef int gtype * cdef np.ndarray[np.int64_t, ndim=1] dims */ static PyObject *__pyx_pf_5ga4py_2ga_130inquire_dims(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("inquire_dims", 0); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga_inquire_dims(__pyx_v_g_a, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.inquire_dims", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_133inquire_memory(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_132inquire_memory[] = "inquire_memory()\nReturns amount of memory (in bytes) used in the allocated global arrays\n on the calling processor.\n\n This operation is local. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_133inquire_memory = {__Pyx_NAMESTR("inquire_memory"), (PyCFunction)__pyx_pw_5ga4py_2ga_133inquire_memory, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_132inquire_memory)}; static PyObject *__pyx_pw_5ga4py_2ga_133inquire_memory(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("inquire_memory (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_132inquire_memory(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2181 * return dims * * def inquire_memory(): # <<<<<<<<<<<<<< * """Returns amount of memory (in bytes) used in the allocated global arrays * on the calling processor. */ static PyObject *__pyx_pf_5ga4py_2ga_132inquire_memory(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("inquire_memory", 0); /* "ga4py/ga.pyx":2188 * * """ * return GA_Inquire_memory() # <<<<<<<<<<<<<< * * def inquire_name(int g_a): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_FromSize_t(GA_Inquire_memory()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.inquire_memory", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_135inquire_name(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_134inquire_name[] = "inquire_name(int g_a)\nReturns the name of an array represented by the handle g_a.\n\n This operation is local.\n\n :Parameters:\n g_a : int\n the array handle\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_135inquire_name = {__Pyx_NAMESTR("inquire_name"), (PyCFunction)__pyx_pw_5ga4py_2ga_135inquire_name, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_134inquire_name)}; static PyObject *__pyx_pw_5ga4py_2ga_135inquire_name(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("inquire_name (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.inquire_name", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_134inquire_name(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2190 * return GA_Inquire_memory() * * def inquire_name(int g_a): # <<<<<<<<<<<<<< * """Returns the name of an array represented by the handle g_a. * */ static PyObject *__pyx_pf_5ga4py_2ga_134inquire_name(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("inquire_name", 0); /* "ga4py/ga.pyx":2200 * * """ * return GA_Inquire_name(g_a) # <<<<<<<<<<<<<< * * cpdef int inquire_type(int g_a): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyBytes_FromString(GA_Inquire_name(__pyx_v_g_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_r = ((PyObject *)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.inquire_name", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2202 * return GA_Inquire_name(g_a) * * cpdef int inquire_type(int g_a): # <<<<<<<<<<<<<< * cdef int gtype * cdef np.ndarray[np.int64_t, ndim=1] dims */ static PyObject *__pyx_pw_5ga4py_2ga_137inquire_type(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static int __pyx_f_5ga4py_2ga_inquire_type(int __pyx_v_g_a, CYTHON_UNUSED int __pyx_skip_dispatch) { int __pyx_v_gtype; CYTHON_UNUSED PyArrayObject *__pyx_v_dims = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_dims; __Pyx_Buffer __pyx_pybuffer_dims; int __pyx_r; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *(*__pyx_t_5)(PyObject *); int __pyx_t_6; PyArrayObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("inquire_type", 0); __pyx_pybuffer_dims.pybuffer.buf = NULL; __pyx_pybuffer_dims.refcount = 0; __pyx_pybuffernd_dims.data = NULL; __pyx_pybuffernd_dims.rcbuffer = &__pyx_pybuffer_dims; /* "ga4py/ga.pyx":2205 * cdef int gtype * cdef np.ndarray[np.int64_t, ndim=1] dims * gtype,dims = inquire(g_a) # <<<<<<<<<<<<<< * return gtype * */ __pyx_t_1 = __pyx_f_5ga4py_2ga_inquire(__pyx_v_g_a, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_3 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L4_unpacking_done; __pyx_L3_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L4_unpacking_done:; } __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_gtype = __pyx_t_6; __pyx_t_7 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims.rcbuffer->pybuffer); __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_6 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims.rcbuffer->pybuffer, (PyObject*)__pyx_v_dims, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_dims.diminfo[0].strides = __pyx_pybuffernd_dims.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dims.diminfo[0].shape = __pyx_pybuffernd_dims.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_7 = 0; __pyx_v_dims = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":2206 * cdef np.ndarray[np.int64_t, ndim=1] dims * gtype,dims = inquire(g_a) * return gtype # <<<<<<<<<<<<<< * * def is_mirrored(int g_a): */ __pyx_r = __pyx_v_gtype; goto __pyx_L0; __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_WriteUnraisable("ga4py.ga.inquire_type", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_dims); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_137inquire_type(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_136inquire_type[] = "inquire_type(int g_a) -> int"; static PyObject *__pyx_pw_5ga4py_2ga_137inquire_type(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("inquire_type (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2202; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.inquire_type", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_136inquire_type(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2202 * return GA_Inquire_name(g_a) * * cpdef int inquire_type(int g_a): # <<<<<<<<<<<<<< * cdef int gtype * cdef np.ndarray[np.int64_t, ndim=1] dims */ static PyObject *__pyx_pf_5ga4py_2ga_136inquire_type(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("inquire_type", 0); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(__pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.inquire_type", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_139is_mirrored(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_138is_mirrored[] = "is_mirrored(int g_a)\nChecks whether the array is mirrored.\n \n This is a local operation. \n\n :returns: True if it is a mirrored array, else returns False.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_139is_mirrored = {__Pyx_NAMESTR("is_mirrored"), (PyCFunction)__pyx_pw_5ga4py_2ga_139is_mirrored, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_138is_mirrored)}; static PyObject *__pyx_pw_5ga4py_2ga_139is_mirrored(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("is_mirrored (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2208; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.is_mirrored", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_138is_mirrored(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2208 * return gtype * * def is_mirrored(int g_a): # <<<<<<<<<<<<<< * """Checks whether the array is mirrored. * */ static PyObject *__pyx_pf_5ga4py_2ga_138is_mirrored(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("is_mirrored", 0); /* "ga4py/ga.pyx":2216 * * """ * if GA_Is_mirrored(g_a) == 1: # <<<<<<<<<<<<<< * return True * return False */ __pyx_t_1 = ((GA_Is_mirrored(__pyx_v_g_a) == 1) != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":2217 * """ * if GA_Is_mirrored(g_a) == 1: * return True # <<<<<<<<<<<<<< * return False * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":2218 * if GA_Is_mirrored(g_a) == 1: * return True * return False # <<<<<<<<<<<<<< * * def llt_solve(int g_a, int g_b): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.ga.is_mirrored", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_141llt_solve(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_140llt_solve[] = "llt_solve(int g_a, int g_b)\nSolves a system of linear equations\n\n A * X = B\n\n using the Cholesky factorization of an NxN double precision symmetric\n positive definite matrix A (epresented by handle g_a). On successful exit\n B will contain the solution X.\n\n This is a collective operation. \n\n :Parameters:\n g_a : int\n the coefficient matrix\n g_b : int\n the rhs/solution matrix\n\n :returns: 0 if successful; >0 if the leading minor of this order is not positive definite and the factorization could not be completed\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_141llt_solve = {__Pyx_NAMESTR("llt_solve"), (PyCFunction)__pyx_pw_5ga4py_2ga_141llt_solve, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_140llt_solve)}; static PyObject *__pyx_pw_5ga4py_2ga_141llt_solve(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_b; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("llt_solve (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_b,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("llt_solve", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2220; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "llt_solve") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2220; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2220; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_b = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2220; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("llt_solve", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2220; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.llt_solve", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_140llt_solve(__pyx_self, __pyx_v_g_a, __pyx_v_g_b); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2220 * return False * * def llt_solve(int g_a, int g_b): # <<<<<<<<<<<<<< * """Solves a system of linear equations * */ static PyObject *__pyx_pf_5ga4py_2ga_140llt_solve(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("llt_solve", 0); /* "ga4py/ga.pyx":2240 * * """ * return GA_Llt_solve(g_a, g_b) # <<<<<<<<<<<<<< * * def locate(int g_a, subscript): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Llt_solve(__pyx_v_g_a, __pyx_v_g_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2240; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.llt_solve", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_143locate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_142locate[] = "locate(int g_a, subscript)\nReturn the GA compute process id that 'owns' the data.\n \n If any element of subscript[] is out of bounds \"-1\" is returned.\n\n This operation is local.\n\n :Parameters:\n g_a : int\n the array handle\n subscript : 1D array-like of integers\n len(subscript) should be ndim\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_143locate = {__Pyx_NAMESTR("locate"), (PyCFunction)__pyx_pw_5ga4py_2ga_143locate, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_142locate)}; static PyObject *__pyx_pw_5ga4py_2ga_143locate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_subscript = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("locate (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__subscript,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__subscript)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("locate", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2242; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "locate") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2242; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2242; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_subscript = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("locate", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2242; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.locate", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_142locate(__pyx_self, __pyx_v_g_a, __pyx_v_subscript); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2242 * return GA_Llt_solve(g_a, g_b) * * def locate(int g_a, subscript): # <<<<<<<<<<<<<< * """Return the GA compute process id that 'owns' the data. * */ static PyObject *__pyx_pf_5ga4py_2ga_142locate(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_subscript) { PyArrayObject *__pyx_v_subscript_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_subscript_nd; __Pyx_Buffer __pyx_pybuffer_subscript_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("locate", 0); __pyx_pybuffer_subscript_nd.pybuffer.buf = NULL; __pyx_pybuffer_subscript_nd.refcount = 0; __pyx_pybuffernd_subscript_nd.data = NULL; __pyx_pybuffernd_subscript_nd.rcbuffer = &__pyx_pybuffer_subscript_nd; /* "ga4py/ga.pyx":2257 * """ * cdef np.ndarray[np.int64_t, ndim=1] subscript_nd * subscript_nd = _inta64(subscript) # <<<<<<<<<<<<<< * return NGA_Locate64(g_a, subscript_nd.data) * */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_subscript)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_subscript_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_subscript_nd.diminfo[0].strides = __pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subscript_nd.diminfo[0].shape = __pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_subscript_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":2258 * cdef np.ndarray[np.int64_t, ndim=1] subscript_nd * subscript_nd = _inta64(subscript) * return NGA_Locate64(g_a, subscript_nd.data) # <<<<<<<<<<<<<< * * def locate_nnodes(int g_a, lo, hi): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(NGA_Locate64(__pyx_v_g_a, ((int64_t *)__pyx_v_subscript_nd->data))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.locate", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_subscript_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_145locate_nnodes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_144locate_nnodes[] = "locate_nnodes(int g_a, lo, hi)\nReturn the number of process which own the specified patch.\n\n This operation is local.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_145locate_nnodes = {__Pyx_NAMESTR("locate_nnodes"), (PyCFunction)__pyx_pw_5ga4py_2ga_145locate_nnodes, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_144locate_nnodes)}; static PyObject *__pyx_pw_5ga4py_2ga_145locate_nnodes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("locate_nnodes (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("locate_nnodes", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("locate_nnodes", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "locate_nnodes") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("locate_nnodes", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.locate_nnodes", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_144locate_nnodes(__pyx_self, __pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2260 * return NGA_Locate64(g_a, subscript_nd.data) * * def locate_nnodes(int g_a, lo, hi): # <<<<<<<<<<<<<< * """Return the number of process which own the specified patch. * */ static PyObject *__pyx_pf_5ga4py_2ga_144locate_nnodes(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyArrayObject *__pyx_v_lo_nd = 0; PyArrayObject *__pyx_v_hi_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_nd; __Pyx_Buffer __pyx_pybuffer_lo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *(*__pyx_t_5)(PyObject *); PyArrayObject *__pyx_t_6 = NULL; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("locate_nnodes", 0); __pyx_pybuffer_lo_nd.pybuffer.buf = NULL; __pyx_pybuffer_lo_nd.refcount = 0; __pyx_pybuffernd_lo_nd.data = NULL; __pyx_pybuffernd_lo_nd.rcbuffer = &__pyx_pybuffer_lo_nd; __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; /* "ga4py/ga.pyx":2268 * cdef np.ndarray[np.int64_t, ndim=1] lo_nd,hi_nd * cdef int result * lo_nd,hi_nd = _lohi(g_a,lo,hi) # <<<<<<<<<<<<<< * return NGA_Locate_nnodes64(g_a, lo_nd.data, hi_nd.data) * */ __pyx_t_1 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_3 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L4_unpacking_done; __pyx_L3_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L4_unpacking_done:; } if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":2269 * cdef int result * lo_nd,hi_nd = _lohi(g_a,lo,hi) * return NGA_Locate_nnodes64(g_a, lo_nd.data, hi_nd.data) # <<<<<<<<<<<<<< * * def locate_region(int g_a, lo, hi): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(NGA_Locate_nnodes64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.locate_nnodes", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_lo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_147locate_region(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_146locate_region[] = "locate_region(int g_a, lo, hi)\nReturn the list of the GA processes id that 'own' the data.\n \n Parts of the specified patch might be actually 'owned' by several\n processes. If lo/hi are out of bounds \"0\" is returned, otherwise return\n value is equal to the number of processes that hold the data .\n \n map[i][0] - lo[ndim]\n map[i][1] - hi[ndim]\n procs[i] - processor id that owns data in patch lo[i]:hi[i]\n\n This operation is local. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_147locate_region = {__Pyx_NAMESTR("locate_region"), (PyCFunction)__pyx_pw_5ga4py_2ga_147locate_region, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_146locate_region)}; static PyObject *__pyx_pw_5ga4py_2ga_147locate_region(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("locate_region (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("locate_region", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2271; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("locate_region", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2271; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "locate_region") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2271; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2271; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("locate_region", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2271; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.locate_region", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_146locate_region(__pyx_self, __pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2271 * return NGA_Locate_nnodes64(g_a, lo_nd.data, hi_nd.data) * * def locate_region(int g_a, lo, hi): # <<<<<<<<<<<<<< * """Return the list of the GA processes id that 'own' the data. * */ static PyObject *__pyx_pf_5ga4py_2ga_146locate_region(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyArrayObject *__pyx_v_lo_nd = 0; PyArrayObject *__pyx_v_hi_nd = 0; PyArrayObject *__pyx_v_map = 0; PyArrayObject *__pyx_v_map_reshape = 0; PyArrayObject *__pyx_v_procs = 0; int __pyx_v_np_result; int __pyx_v_np_guess; int __pyx_v_ndim; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_nd; __Pyx_Buffer __pyx_pybuffer_lo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_map; __Pyx_Buffer __pyx_pybuffer_map; __Pyx_LocalBuf_ND __pyx_pybuffernd_map_reshape; __Pyx_Buffer __pyx_pybuffer_map_reshape; __Pyx_LocalBuf_ND __pyx_pybuffernd_procs; __Pyx_Buffer __pyx_pybuffer_procs; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *(*__pyx_t_5)(PyObject *); PyArrayObject *__pyx_t_6 = NULL; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyArrayObject *__pyx_t_11 = NULL; PyArrayObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("locate_region", 0); __pyx_pybuffer_lo_nd.pybuffer.buf = NULL; __pyx_pybuffer_lo_nd.refcount = 0; __pyx_pybuffernd_lo_nd.data = NULL; __pyx_pybuffernd_lo_nd.rcbuffer = &__pyx_pybuffer_lo_nd; __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; __pyx_pybuffer_map.pybuffer.buf = NULL; __pyx_pybuffer_map.refcount = 0; __pyx_pybuffernd_map.data = NULL; __pyx_pybuffernd_map.rcbuffer = &__pyx_pybuffer_map; __pyx_pybuffer_map_reshape.pybuffer.buf = NULL; __pyx_pybuffer_map_reshape.refcount = 0; __pyx_pybuffernd_map_reshape.data = NULL; __pyx_pybuffernd_map_reshape.rcbuffer = &__pyx_pybuffer_map_reshape; __pyx_pybuffer_procs.pybuffer.buf = NULL; __pyx_pybuffer_procs.refcount = 0; __pyx_pybuffernd_procs.data = NULL; __pyx_pybuffernd_procs.rcbuffer = &__pyx_pybuffer_procs; /* "ga4py/ga.pyx":2292 * cdef int np_result * cdef int np_guess * cdef int ndim = GA_Ndim(g_a) # <<<<<<<<<<<<<< * lo_nd,hi_nd = _lohi(g_a,lo,hi) * np_guess = NGA_Locate_nnodes64( */ __pyx_v_ndim = GA_Ndim(__pyx_v_g_a); /* "ga4py/ga.pyx":2293 * cdef int np_guess * cdef int ndim = GA_Ndim(g_a) * lo_nd,hi_nd = _lohi(g_a,lo,hi) # <<<<<<<<<<<<<< * np_guess = NGA_Locate_nnodes64( * g_a, lo_nd.data, hi_nd.data) */ __pyx_t_1 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2293; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2293; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_3 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2293; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2293; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2293; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2293; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L4_unpacking_done; __pyx_L3_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2293; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L4_unpacking_done:; } if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2293; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2293; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2293; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; __pyx_t_11 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2293; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_11 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":2295 * lo_nd,hi_nd = _lohi(g_a,lo,hi) * np_guess = NGA_Locate_nnodes64( * g_a, lo_nd.data, hi_nd.data) # <<<<<<<<<<<<<< * map = np.ndarray(np_guess*ndim*2, dtype=np.int64) * procs = np.ndarray(np_guess, dtype=np.int32) */ __pyx_v_np_guess = NGA_Locate_nnodes64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data)); /* "ga4py/ga.pyx":2296 * np_guess = NGA_Locate_nnodes64( * g_a, lo_nd.data, hi_nd.data) * map = np.ndarray(np_guess*ndim*2, dtype=np.int64) # <<<<<<<<<<<<<< * procs = np.ndarray(np_guess, dtype=np.int32) * np_result = NGA_Locate_region64(g_a, */ __pyx_t_1 = PyInt_FromLong(((__pyx_v_np_guess * __pyx_v_ndim) * 2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int64); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray)), ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_map.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_map.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_4), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_map.rcbuffer->pybuffer, (PyObject*)__pyx_v_map, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_map.diminfo[0].strides = __pyx_pybuffernd_map.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_map.diminfo[0].shape = __pyx_pybuffernd_map.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_map = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2297 * g_a, lo_nd.data, hi_nd.data) * map = np.ndarray(np_guess*ndim*2, dtype=np.int64) * procs = np.ndarray(np_guess, dtype=np.int32) # <<<<<<<<<<<<<< * np_result = NGA_Locate_region64(g_a, * lo_nd.data, hi_nd.data, */ __pyx_t_4 = PyInt_FromLong(__pyx_v_np_guess); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__int32); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray)), ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_procs.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_procs.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_2), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_procs.rcbuffer->pybuffer, (PyObject*)__pyx_v_procs, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_procs.diminfo[0].strides = __pyx_pybuffernd_procs.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_procs.diminfo[0].shape = __pyx_pybuffernd_procs.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_procs = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":2300 * np_result = NGA_Locate_region64(g_a, * lo_nd.data, hi_nd.data, * map.data, procs.data) # <<<<<<<<<<<<<< * assert(np_guess == np_result) * # TODO then slice it and reshape to something useful? */ __pyx_v_np_result = NGA_Locate_region64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), ((int64_t *)__pyx_v_map->data), ((int *)__pyx_v_procs->data)); /* "ga4py/ga.pyx":2301 * lo_nd.data, hi_nd.data, * map.data, procs.data) * assert(np_guess == np_result) # <<<<<<<<<<<<<< * # TODO then slice it and reshape to something useful? * map_reshape = map.reshape(np_result,2,ndim) */ #ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!((__pyx_v_np_guess == __pyx_v_np_result) != 0))) { PyErr_SetNone(PyExc_AssertionError); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #endif /* "ga4py/ga.pyx":2303 * assert(np_guess == np_result) * # TODO then slice it and reshape to something useful? * map_reshape = map.reshape(np_result,2,ndim) # <<<<<<<<<<<<<< * # need to add 1 to every 'hi' value * map_reshape[:,1,:] += 1 */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_map), __pyx_n_s__reshape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyInt_FromLong(__pyx_v_np_result); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyInt_FromLong(__pyx_v_ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __Pyx_INCREF(__pyx_int_2); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_2); __Pyx_GIVEREF(__pyx_int_2); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_4 = 0; __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_map_reshape.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_map_reshape.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_map_reshape.rcbuffer->pybuffer, (PyObject*)__pyx_v_map_reshape, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_map_reshape.diminfo[0].strides = __pyx_pybuffernd_map_reshape.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_map_reshape.diminfo[0].shape = __pyx_pybuffernd_map_reshape.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_map_reshape.diminfo[1].strides = __pyx_pybuffernd_map_reshape.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_map_reshape.diminfo[1].shape = __pyx_pybuffernd_map_reshape.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_map_reshape.diminfo[2].strides = __pyx_pybuffernd_map_reshape.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_map_reshape.diminfo[2].shape = __pyx_pybuffernd_map_reshape.rcbuffer->pybuffer.shape[2]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_12 = 0; __pyx_v_map_reshape = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":2305 * map_reshape = map.reshape(np_result,2,ndim) * # need to add 1 to every 'hi' value * map_reshape[:,1,:] += 1 # <<<<<<<<<<<<<< * return map_reshape,procs * */ __Pyx_INCREF(((PyObject *)__pyx_k_tuple_36)); __pyx_t_13 = __pyx_k_tuple_36; __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_map_reshape), ((PyObject *)__pyx_t_13)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyObject_SetItem(((PyObject *)__pyx_v_map_reshape), ((PyObject *)__pyx_t_13), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_13)); __pyx_t_13 = 0; /* "ga4py/ga.pyx":2306 * # need to add 1 to every 'hi' value * map_reshape[:,1,:] += 1 * return map_reshape,procs # <<<<<<<<<<<<<< * * def lock(int mutex): */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)__pyx_v_map_reshape)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_map_reshape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_map_reshape)); __Pyx_INCREF(((PyObject *)__pyx_v_procs)); PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_procs)); __Pyx_GIVEREF(((PyObject *)__pyx_v_procs)); __pyx_r = ((PyObject *)__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(((PyObject *)__pyx_t_13)); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_map.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_map_reshape.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_procs.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.locate_region", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_map.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_map_reshape.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_procs.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_lo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_map); __Pyx_XDECREF((PyObject *)__pyx_v_map_reshape); __Pyx_XDECREF((PyObject *)__pyx_v_procs); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_149lock(PyObject *__pyx_self, PyObject *__pyx_arg_mutex); /*proto*/ static char __pyx_doc_5ga4py_2ga_148lock[] = "lock(int mutex)\nLocks a mutex object identified by the mutex number.\n \n It is a fatal error for a process to attempt to lock a mutex which was\n already locked by this process. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_149lock = {__Pyx_NAMESTR("lock"), (PyCFunction)__pyx_pw_5ga4py_2ga_149lock, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_148lock)}; static PyObject *__pyx_pw_5ga4py_2ga_149lock(PyObject *__pyx_self, PyObject *__pyx_arg_mutex) { int __pyx_v_mutex; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("lock (wrapper)", 0); assert(__pyx_arg_mutex); { __pyx_v_mutex = __Pyx_PyInt_AsInt(__pyx_arg_mutex); if (unlikely((__pyx_v_mutex == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2308; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.lock", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_148lock(__pyx_self, ((int)__pyx_v_mutex)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2308 * return map_reshape,procs * * def lock(int mutex): # <<<<<<<<<<<<<< * """Locks a mutex object identified by the mutex number. * */ static PyObject *__pyx_pf_5ga4py_2ga_148lock(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_mutex) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("lock", 0); /* "ga4py/ga.pyx":2315 * * """ * GA_Lock(mutex) # <<<<<<<<<<<<<< * * def lu_solve(int g_a, int g_b, bint trans=False): */ GA_Lock(__pyx_v_mutex); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_151lu_solve(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_150lu_solve[] = "lu_solve(int g_a, int g_b, bool trans=False)\nSolve the system of linear equations op(A)X = B based on the LU\n factorization.\n\n op(A) = A or A' depending on the parameter trans\n trans = False means that the transpose operator should not be applied.\n trans = True means that the transpose operator should be applied.\n\n Matrix A is a general real matrix. Matrix B contains possibly multiple rhs\n vectors. The array associated with the handle g_b is overwritten by the\n solution matrix X.\n\n This is a collective operation. \n\n :Parameters:\n g_a : int\n the array handle for the coefficient matrix\n g_b : int\n the array handle for the solution matrix\n trans : bool\n transpose (True) or not transpose (False)\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_151lu_solve = {__Pyx_NAMESTR("lu_solve"), (PyCFunction)__pyx_pw_5ga4py_2ga_151lu_solve, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_150lu_solve)}; static PyObject *__pyx_pw_5ga4py_2ga_151lu_solve(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_b; int __pyx_v_trans; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("lu_solve (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_b,&__pyx_n_s__trans,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("lu_solve", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2317; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__trans); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "lu_solve") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2317; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2317; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_b = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2317; __pyx_clineno = __LINE__; goto __pyx_L3_error;} if (values[2]) { __pyx_v_trans = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_trans == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2317; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { /* "ga4py/ga.pyx":2317 * GA_Lock(mutex) * * def lu_solve(int g_a, int g_b, bint trans=False): # <<<<<<<<<<<<<< * """Solve the system of linear equations op(A)X = B based on the LU * factorization. */ __pyx_v_trans = ((int)0); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("lu_solve", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2317; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.lu_solve", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_150lu_solve(__pyx_self, __pyx_v_g_a, __pyx_v_g_b, __pyx_v_trans); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_150lu_solve(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, int __pyx_v_trans) { char __pyx_v_ctrans; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; __Pyx_RefNannySetupContext("lu_solve", 0); /* "ga4py/ga.pyx":2340 * * """ * cdef char ctrans = 'N' # <<<<<<<<<<<<<< * if trans: * ctrans = 'T' */ __pyx_v_ctrans = 'N'; /* "ga4py/ga.pyx":2341 * """ * cdef char ctrans = 'N' * if trans: # <<<<<<<<<<<<<< * ctrans = 'T' * GA_Lu_solve(ctrans, g_a, g_b) */ __pyx_t_1 = (__pyx_v_trans != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":2342 * cdef char ctrans = 'N' * if trans: * ctrans = 'T' # <<<<<<<<<<<<<< * GA_Lu_solve(ctrans, g_a, g_b) * */ __pyx_v_ctrans = 'T'; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":2343 * if trans: * ctrans = 'T' * GA_Lu_solve(ctrans, g_a, g_b) # <<<<<<<<<<<<<< * * def mask_sync(bint first, bint last): */ GA_Lu_solve(__pyx_v_ctrans, __pyx_v_g_a, __pyx_v_g_b); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_153mask_sync(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_152mask_sync[] = "mask_sync(bool first, bool last)\nThis subroutine can be used to remove synchronization calls from around\n collective operations.\n \n Setting the parameter first=False removes the synchronization prior to the\n collective operation, setting last=False removes the synchronization call\n after the collective operation. This call is applicable to all collective\n operations. It most be invoked before each collective operation.\n \n This is a collective operation. \n\n :Parameters:\n first : bool\n mask for prior internal synchronization\n last : bool\n mask for post internal synchronization\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_153mask_sync = {__Pyx_NAMESTR("mask_sync"), (PyCFunction)__pyx_pw_5ga4py_2ga_153mask_sync, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_152mask_sync)}; static PyObject *__pyx_pw_5ga4py_2ga_153mask_sync(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_first; int __pyx_v_last; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mask_sync (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__first,&__pyx_n_s__last,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__first)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__last)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("mask_sync", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2345; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mask_sync") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2345; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_first = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_first == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2345; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_last = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_last == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2345; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mask_sync", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2345; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.mask_sync", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_152mask_sync(__pyx_self, __pyx_v_first, __pyx_v_last); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2345 * GA_Lu_solve(ctrans, g_a, g_b) * * def mask_sync(bint first, bint last): # <<<<<<<<<<<<<< * """This subroutine can be used to remove synchronization calls from around * collective operations. */ static PyObject *__pyx_pf_5ga4py_2ga_152mask_sync(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_first, int __pyx_v_last) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mask_sync", 0); /* "ga4py/ga.pyx":2363 * * """ * GA_Mask_sync(first,last) # <<<<<<<<<<<<<< * * def matmul_patch(bint transa, bint transb, alpha, beta, */ GA_Mask_sync(__pyx_v_first, __pyx_v_last); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_155matmul_patch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_154matmul_patch[] = "matmul_patch(bool transa, bool transb, alpha, beta, int g_a, alo, ahi, int g_b, blo, bhi, int g_c, clo, chi)\nAn n-dimensional patch version of ga_dgemm.\n\n C[clo[]:chi[]] := alpha * AA[alo[]:ahi[]] *\n BB[blo[]:bhi[]] ) + beta*C[clo[]:chi[]],\n\n where AA = op(A), BB = op(B), and op( X ) is one of\n\n op( X ) = X or op( X ) = X',\n\n It works for both double and DoubleComplex data tape.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_155matmul_patch = {__Pyx_NAMESTR("matmul_patch"), (PyCFunction)__pyx_pw_5ga4py_2ga_155matmul_patch, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_154matmul_patch)}; static PyObject *__pyx_pw_5ga4py_2ga_155matmul_patch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_transa; int __pyx_v_transb; PyObject *__pyx_v_alpha = 0; PyObject *__pyx_v_beta = 0; int __pyx_v_g_a; PyObject *__pyx_v_alo = 0; PyObject *__pyx_v_ahi = 0; int __pyx_v_g_b; PyObject *__pyx_v_blo = 0; PyObject *__pyx_v_bhi = 0; int __pyx_v_g_c; PyObject *__pyx_v_clo = 0; PyObject *__pyx_v_chi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("matmul_patch (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__transa,&__pyx_n_s__transb,&__pyx_n_s__alpha,&__pyx_n_s__beta,&__pyx_n_s__g_a,&__pyx_n_s__alo,&__pyx_n_s__ahi,&__pyx_n_s__g_b,&__pyx_n_s__blo,&__pyx_n_s__bhi,&__pyx_n_s__g_c,&__pyx_n_s__clo,&__pyx_n_s__chi,0}; PyObject* values[13] = {0,0,0,0,0,0,0,0,0,0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__transa)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__transb)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("matmul_patch", 1, 13, 13, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alpha)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("matmul_patch", 1, 13, 13, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__beta)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("matmul_patch", 1, 13, 13, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("matmul_patch", 1, 13, 13, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 5: if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alo)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("matmul_patch", 1, 13, 13, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 6: if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ahi)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("matmul_patch", 1, 13, 13, 6); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 7: if (likely((values[7] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("matmul_patch", 1, 13, 13, 7); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 8: if (likely((values[8] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__blo)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("matmul_patch", 1, 13, 13, 8); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 9: if (likely((values[9] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bhi)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("matmul_patch", 1, 13, 13, 9); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 10: if (likely((values[10] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_c)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("matmul_patch", 1, 13, 13, 10); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 11: if (likely((values[11] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__clo)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("matmul_patch", 1, 13, 13, 11); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 12: if (likely((values[12] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__chi)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("matmul_patch", 1, 13, 13, 12); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matmul_patch") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 13) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[4] = PyTuple_GET_ITEM(__pyx_args, 4); values[5] = PyTuple_GET_ITEM(__pyx_args, 5); values[6] = PyTuple_GET_ITEM(__pyx_args, 6); values[7] = PyTuple_GET_ITEM(__pyx_args, 7); values[8] = PyTuple_GET_ITEM(__pyx_args, 8); values[9] = PyTuple_GET_ITEM(__pyx_args, 9); values[10] = PyTuple_GET_ITEM(__pyx_args, 10); values[11] = PyTuple_GET_ITEM(__pyx_args, 11); values[12] = PyTuple_GET_ITEM(__pyx_args, 12); } __pyx_v_transa = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_transa == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_transb = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_transb == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_alpha = values[2]; __pyx_v_beta = values[3]; __pyx_v_g_a = __Pyx_PyInt_AsInt(values[4]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2366; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_alo = values[5]; __pyx_v_ahi = values[6]; __pyx_v_g_b = __Pyx_PyInt_AsInt(values[7]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2367; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_blo = values[8]; __pyx_v_bhi = values[9]; __pyx_v_g_c = __Pyx_PyInt_AsInt(values[10]); if (unlikely((__pyx_v_g_c == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2368; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_clo = values[11]; __pyx_v_chi = values[12]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("matmul_patch", 1, 13, 13, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.matmul_patch", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_154matmul_patch(__pyx_self, __pyx_v_transa, __pyx_v_transb, __pyx_v_alpha, __pyx_v_beta, __pyx_v_g_a, __pyx_v_alo, __pyx_v_ahi, __pyx_v_g_b, __pyx_v_blo, __pyx_v_bhi, __pyx_v_g_c, __pyx_v_clo, __pyx_v_chi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2365 * GA_Mask_sync(first,last) * * def matmul_patch(bint transa, bint transb, alpha, beta, # <<<<<<<<<<<<<< * int g_a, alo, ahi, * int g_b, blo, bhi, */ static PyObject *__pyx_pf_5ga4py_2ga_154matmul_patch(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_transa, int __pyx_v_transb, PyObject *__pyx_v_alpha, PyObject *__pyx_v_beta, int __pyx_v_g_a, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, int __pyx_v_g_b, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, int __pyx_v_g_c, PyObject *__pyx_v_clo, PyObject *__pyx_v_chi) { PyArrayObject *__pyx_v_alo_nd = 0; PyArrayObject *__pyx_v_ahi_nd = 0; PyArrayObject *__pyx_v_blo_nd = 0; PyArrayObject *__pyx_v_bhi_nd = 0; PyArrayObject *__pyx_v_clo_nd = 0; PyArrayObject *__pyx_v_chi_nd = 0; int __pyx_v_gtype; int __pyx_v_ialpha; int __pyx_v_ibeta; long __pyx_v_lalpha; long __pyx_v_lbeta; PY_LONG_LONG __pyx_v_llalpha; PY_LONG_LONG __pyx_v_llbeta; float __pyx_v_falpha; float __pyx_v_fbeta; double __pyx_v_dalpha; double __pyx_v_dbeta; long double __pyx_v_ldalpha; long double __pyx_v_ldbeta; SingleComplex __pyx_v_fcalpha; SingleComplex __pyx_v_fcbeta; DoubleComplex __pyx_v_dcalpha; DoubleComplex __pyx_v_dcbeta; void *__pyx_v_valpha; void *__pyx_v_vbeta; char __pyx_v_char_transa; char __pyx_v_char_transb; __Pyx_LocalBuf_ND __pyx_pybuffernd_ahi_nd; __Pyx_Buffer __pyx_pybuffer_ahi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_alo_nd; __Pyx_Buffer __pyx_pybuffer_alo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_bhi_nd; __Pyx_Buffer __pyx_pybuffer_bhi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_blo_nd; __Pyx_Buffer __pyx_pybuffer_blo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_chi_nd; __Pyx_Buffer __pyx_pybuffer_chi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_clo_nd; __Pyx_Buffer __pyx_pybuffer_clo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *(*__pyx_t_7)(PyObject *); PyArrayObject *__pyx_t_8 = NULL; int __pyx_t_9; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; PyArrayObject *__pyx_t_13 = NULL; PyArrayObject *__pyx_t_14 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("matmul_patch", 0); __Pyx_INCREF(__pyx_v_alpha); __Pyx_INCREF(__pyx_v_beta); __pyx_pybuffer_alo_nd.pybuffer.buf = NULL; __pyx_pybuffer_alo_nd.refcount = 0; __pyx_pybuffernd_alo_nd.data = NULL; __pyx_pybuffernd_alo_nd.rcbuffer = &__pyx_pybuffer_alo_nd; __pyx_pybuffer_ahi_nd.pybuffer.buf = NULL; __pyx_pybuffer_ahi_nd.refcount = 0; __pyx_pybuffernd_ahi_nd.data = NULL; __pyx_pybuffernd_ahi_nd.rcbuffer = &__pyx_pybuffer_ahi_nd; __pyx_pybuffer_blo_nd.pybuffer.buf = NULL; __pyx_pybuffer_blo_nd.refcount = 0; __pyx_pybuffernd_blo_nd.data = NULL; __pyx_pybuffernd_blo_nd.rcbuffer = &__pyx_pybuffer_blo_nd; __pyx_pybuffer_bhi_nd.pybuffer.buf = NULL; __pyx_pybuffer_bhi_nd.refcount = 0; __pyx_pybuffernd_bhi_nd.data = NULL; __pyx_pybuffernd_bhi_nd.rcbuffer = &__pyx_pybuffer_bhi_nd; __pyx_pybuffer_clo_nd.pybuffer.buf = NULL; __pyx_pybuffer_clo_nd.refcount = 0; __pyx_pybuffernd_clo_nd.data = NULL; __pyx_pybuffernd_clo_nd.rcbuffer = &__pyx_pybuffer_clo_nd; __pyx_pybuffer_chi_nd.pybuffer.buf = NULL; __pyx_pybuffer_chi_nd.refcount = 0; __pyx_pybuffernd_chi_nd.data = NULL; __pyx_pybuffernd_chi_nd.rcbuffer = &__pyx_pybuffer_chi_nd; /* "ga4py/ga.pyx":2386 * cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd * cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd * cdef int gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * cdef int ialpha, ibeta * cdef long lalpha, lbeta */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":2396 * cdef DoubleComplex dcalpha, dcbeta * cdef void *valpha, *vbeta * cdef char char_transa = 'N' # <<<<<<<<<<<<<< * cdef char char_transb = 'N' * if alpha is None: */ __pyx_v_char_transa = 'N'; /* "ga4py/ga.pyx":2397 * cdef void *valpha, *vbeta * cdef char char_transa = 'N' * cdef char char_transb = 'N' # <<<<<<<<<<<<<< * if alpha is None: * alpha = 1 */ __pyx_v_char_transb = 'N'; /* "ga4py/ga.pyx":2398 * cdef char char_transa = 'N' * cdef char char_transb = 'N' * if alpha is None: # <<<<<<<<<<<<<< * alpha = 1 * valpha = _convert_multiplier(gtype, alpha, */ __pyx_t_1 = (__pyx_v_alpha == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/ga.pyx":2399 * cdef char char_transb = 'N' * if alpha is None: * alpha = 1 # <<<<<<<<<<<<<< * valpha = _convert_multiplier(gtype, alpha, * &ialpha, &lalpha, &llalpha, */ __Pyx_INCREF(__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_alpha, __pyx_int_1); goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":2403 * &ialpha, &lalpha, &llalpha, * &falpha, &dalpha, &ldalpha, * &fcalpha, &dcalpha) # <<<<<<<<<<<<<< * if beta is None: * beta = 1 */ __pyx_v_valpha = __pyx_f_5ga4py_2ga__convert_multiplier(__pyx_v_gtype, __pyx_v_alpha, (&__pyx_v_ialpha), (&__pyx_v_lalpha), (&__pyx_v_llalpha), (&__pyx_v_falpha), (&__pyx_v_dalpha), (&__pyx_v_ldalpha), (&__pyx_v_fcalpha), (&__pyx_v_dcalpha)); /* "ga4py/ga.pyx":2404 * &falpha, &dalpha, &ldalpha, * &fcalpha, &dcalpha) * if beta is None: # <<<<<<<<<<<<<< * beta = 1 * vbeta = _convert_multiplier(gtype, beta, */ __pyx_t_2 = (__pyx_v_beta == Py_None); __pyx_t_1 = (__pyx_t_2 != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":2405 * &fcalpha, &dcalpha) * if beta is None: * beta = 1 # <<<<<<<<<<<<<< * vbeta = _convert_multiplier(gtype, beta, * &ibeta, &lbeta, &llbeta, */ __Pyx_INCREF(__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_beta, __pyx_int_1); goto __pyx_L4; } __pyx_L4:; /* "ga4py/ga.pyx":2409 * &ibeta, &lbeta, &llbeta, * &fbeta, &dbeta, &ldbeta, * &fcbeta, &dcbeta) # <<<<<<<<<<<<<< * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) */ __pyx_v_vbeta = __pyx_f_5ga4py_2ga__convert_multiplier(__pyx_v_gtype, __pyx_v_beta, (&__pyx_v_ibeta), (&__pyx_v_lbeta), (&__pyx_v_llbeta), (&__pyx_v_fbeta), (&__pyx_v_dbeta), (&__pyx_v_ldbeta), (&__pyx_v_fcbeta), (&__pyx_v_dcbeta)); /* "ga4py/ga.pyx":2410 * &fbeta, &dbeta, &ldbeta, * &fcbeta, &dcbeta) * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) # <<<<<<<<<<<<<< * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * clo_nd,chi_nd = _lohi(g_c,clo,chi) */ __pyx_t_3 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_alo, __pyx_v_ahi); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_5 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L6_unpacking_done:; } if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_alo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_11, __pyx_t_12); } } __pyx_pybuffernd_alo_nd.diminfo[0].strides = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_alo_nd.diminfo[0].shape = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_8 = 0; __pyx_v_alo_nd = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ahi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_12, __pyx_t_11, __pyx_t_10); } } __pyx_pybuffernd_ahi_nd.diminfo[0].strides = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ahi_nd.diminfo[0].shape = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_8 = 0; __pyx_v_ahi_nd = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/ga.pyx":2411 * &fcbeta, &dcbeta) * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) # <<<<<<<<<<<<<< * clo_nd,chi_nd = _lohi(g_c,clo,chi) * if transa: */ __pyx_t_3 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_b, __pyx_v_blo, __pyx_v_bhi); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_5 = PyList_GET_ITEM(sequence, 0); __pyx_t_4 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); #else __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; index = 0; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L7_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L7_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L8_unpacking_done; __pyx_L7_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L8_unpacking_done:; } if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_13 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_blo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_11, __pyx_t_12); } } __pyx_pybuffernd_blo_nd.diminfo[0].strides = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_blo_nd.diminfo[0].shape = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_13 = 0; __pyx_v_blo_nd = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; __pyx_t_13 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_bhi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_12, __pyx_t_11, __pyx_t_10); } } __pyx_pybuffernd_bhi_nd.diminfo[0].strides = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_bhi_nd.diminfo[0].shape = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_13 = 0; __pyx_v_bhi_nd = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2412 * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * clo_nd,chi_nd = _lohi(g_c,clo,chi) # <<<<<<<<<<<<<< * if transa: * char_transa = 'T' */ __pyx_t_3 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_c, __pyx_v_clo, __pyx_v_chi); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_5 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L9_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L9_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L10_unpacking_done; __pyx_L9_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L10_unpacking_done:; } if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_14 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_clo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_11, __pyx_t_12); } } __pyx_pybuffernd_clo_nd.diminfo[0].strides = __pyx_pybuffernd_clo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_clo_nd.diminfo[0].shape = __pyx_pybuffernd_clo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_14 = 0; __pyx_v_clo_nd = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; __pyx_t_14 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __pyx_t_9 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_9 < 0)) { PyErr_Fetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_chi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_12, __pyx_t_11, __pyx_t_10); } } __pyx_pybuffernd_chi_nd.diminfo[0].strides = __pyx_pybuffernd_chi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_chi_nd.diminfo[0].shape = __pyx_pybuffernd_chi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_14 = 0; __pyx_v_chi_nd = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/ga.pyx":2413 * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * clo_nd,chi_nd = _lohi(g_c,clo,chi) * if transa: # <<<<<<<<<<<<<< * char_transa = 'T' * if transb: */ __pyx_t_1 = (__pyx_v_transa != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":2414 * clo_nd,chi_nd = _lohi(g_c,clo,chi) * if transa: * char_transa = 'T' # <<<<<<<<<<<<<< * if transb: * char_transb = 'T' */ __pyx_v_char_transa = 'T'; goto __pyx_L11; } __pyx_L11:; /* "ga4py/ga.pyx":2415 * if transa: * char_transa = 'T' * if transb: # <<<<<<<<<<<<<< * char_transb = 'T' * NGA_Matmul_patch64(char_transa, char_transb, valpha, vbeta, */ __pyx_t_1 = (__pyx_v_transb != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":2416 * char_transa = 'T' * if transb: * char_transb = 'T' # <<<<<<<<<<<<<< * NGA_Matmul_patch64(char_transa, char_transb, valpha, vbeta, * g_a, alo_nd.data, ahi_nd.data, */ __pyx_v_char_transb = 'T'; goto __pyx_L12; } __pyx_L12:; /* "ga4py/ga.pyx":2420 * g_a, alo_nd.data, ahi_nd.data, * g_b, blo_nd.data, bhi_nd.data, * g_c, clo_nd.data, chi_nd.data) # <<<<<<<<<<<<<< * * def median(int g_a, int g_b, int g_c, int g_m, */ NGA_Matmul_patch64(__pyx_v_char_transa, __pyx_v_char_transb, __pyx_v_valpha, __pyx_v_vbeta, __pyx_v_g_a, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_g_b, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data), __pyx_v_g_c, ((int64_t *)__pyx_v_clo_nd->data), ((int64_t *)__pyx_v_chi_nd->data)); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.matmul_patch", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_alo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_ahi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_blo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_bhi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_clo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_chi_nd); __Pyx_XDECREF(__pyx_v_alpha); __Pyx_XDECREF(__pyx_v_beta); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_157median(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_156median[] = "median(int g_a, int g_b, int g_c, int g_m, alo=None, ahi=None, blo=None, bhi=None, clo=None, chi=None, mlo=None, mhi=None)\nComputes the componentwise Median of three arrays or patches g_a, g_b,\n and g_c, and stores the result in this array or patch g_m.\n \n The result (m) may replace one of the input arrays (a/b/c).\n\n This is a collective operation. \n\n :Parameters:\n g_a : int\n the array handle\n g_b : int\n the array handle\n g_c : int\n the array handle\n g_m : int\n the array handle for the result\n alo : 1D array-like of integers\n lower bound patch coordinates of g_a, inclusive\n ahi : 1D array-like of integers\n higher bound patch coordinates of g_a, exclusive\n blo : 1D array-like of integers\n lower bound patch coordinates of g_b, inclusive\n bhi : 1D array-like of integers\n higher bound patch coordinates of g_b, exclusive\n clo : 1D array-like of integers\n lower bound patch coordinates of g_c, inclusive\n chi : 1D array-like of integers\n higher bound patch coordinates of g_c, exclusive\n mlo : 1D array-like of integers\n lower bound patch coordinates of g_m, inclusive\n mhi : 1D array-like of integers\n higher bound patch coordinates of g_m, exclusive\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_157median = {__Pyx_NAMESTR("median"), (PyCFunction)__pyx_pw_5ga4py_2ga_157median, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_156median)}; static PyObject *__pyx_pw_5ga4py_2ga_157median(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_b; int __pyx_v_g_c; int __pyx_v_g_m; PyObject *__pyx_v_alo = 0; PyObject *__pyx_v_ahi = 0; PyObject *__pyx_v_blo = 0; PyObject *__pyx_v_bhi = 0; PyObject *__pyx_v_clo = 0; PyObject *__pyx_v_chi = 0; PyObject *__pyx_v_mlo = 0; PyObject *__pyx_v_mhi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("median (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_b,&__pyx_n_s__g_c,&__pyx_n_s__g_m,&__pyx_n_s__alo,&__pyx_n_s__ahi,&__pyx_n_s__blo,&__pyx_n_s__bhi,&__pyx_n_s__clo,&__pyx_n_s__chi,&__pyx_n_s__mlo,&__pyx_n_s__mhi,0}; PyObject* values[12] = {0,0,0,0,0,0,0,0,0,0,0,0}; /* "ga4py/ga.pyx":2423 * * def median(int g_a, int g_b, int g_c, int g_m, * alo=None, ahi=None, blo=None, bhi=None, # <<<<<<<<<<<<<< * clo=None, chi=None, mlo=None, mhi=None): * """Computes the componentwise Median of three arrays or patches g_a, g_b, */ values[4] = ((PyObject *)Py_None); values[5] = ((PyObject *)Py_None); values[6] = ((PyObject *)Py_None); values[7] = ((PyObject *)Py_None); /* "ga4py/ga.pyx":2424 * def median(int g_a, int g_b, int g_c, int g_m, * alo=None, ahi=None, blo=None, bhi=None, * clo=None, chi=None, mlo=None, mhi=None): # <<<<<<<<<<<<<< * """Computes the componentwise Median of three arrays or patches g_a, g_b, * and g_c, and stores the result in this array or patch g_m. */ values[8] = ((PyObject *)Py_None); values[9] = ((PyObject *)Py_None); values[10] = ((PyObject *)Py_None); values[11] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("median", 0, 4, 12, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_c)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("median", 0, 4, 12, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_m)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("median", 0, 4, 12, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alo); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ahi); if (value) { values[5] = value; kw_args--; } } case 6: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__blo); if (value) { values[6] = value; kw_args--; } } case 7: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bhi); if (value) { values[7] = value; kw_args--; } } case 8: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__clo); if (value) { values[8] = value; kw_args--; } } case 9: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__chi); if (value) { values[9] = value; kw_args--; } } case 10: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mlo); if (value) { values[10] = value; kw_args--; } } case 11: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mhi); if (value) { values[11] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "median") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_b = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_c = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_g_c == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_m = __Pyx_PyInt_AsInt(values[3]); if (unlikely((__pyx_v_g_m == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_alo = values[4]; __pyx_v_ahi = values[5]; __pyx_v_blo = values[6]; __pyx_v_bhi = values[7]; __pyx_v_clo = values[8]; __pyx_v_chi = values[9]; __pyx_v_mlo = values[10]; __pyx_v_mhi = values[11]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("median", 0, 4, 12, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.median", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_156median(__pyx_self, __pyx_v_g_a, __pyx_v_g_b, __pyx_v_g_c, __pyx_v_g_m, __pyx_v_alo, __pyx_v_ahi, __pyx_v_blo, __pyx_v_bhi, __pyx_v_clo, __pyx_v_chi, __pyx_v_mlo, __pyx_v_mhi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2422 * g_c, clo_nd.data, chi_nd.data) * * def median(int g_a, int g_b, int g_c, int g_m, # <<<<<<<<<<<<<< * alo=None, ahi=None, blo=None, bhi=None, * clo=None, chi=None, mlo=None, mhi=None): */ static PyObject *__pyx_pf_5ga4py_2ga_156median(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, int __pyx_v_g_c, int __pyx_v_g_m, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi, PyObject *__pyx_v_clo, PyObject *__pyx_v_chi, PyObject *__pyx_v_mlo, PyObject *__pyx_v_mhi) { PyArrayObject *__pyx_v_alo_nd = 0; PyArrayObject *__pyx_v_ahi_nd = 0; PyArrayObject *__pyx_v_blo_nd = 0; PyArrayObject *__pyx_v_bhi_nd = 0; PyArrayObject *__pyx_v_clo_nd = 0; PyArrayObject *__pyx_v_chi_nd = 0; PyArrayObject *__pyx_v_mlo_nd = 0; PyArrayObject *__pyx_v_mhi_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_ahi_nd; __Pyx_Buffer __pyx_pybuffer_ahi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_alo_nd; __Pyx_Buffer __pyx_pybuffer_alo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_bhi_nd; __Pyx_Buffer __pyx_pybuffer_bhi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_blo_nd; __Pyx_Buffer __pyx_pybuffer_blo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_chi_nd; __Pyx_Buffer __pyx_pybuffer_chi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_clo_nd; __Pyx_Buffer __pyx_pybuffer_clo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_mhi_nd; __Pyx_Buffer __pyx_pybuffer_mhi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_mlo_nd; __Pyx_Buffer __pyx_pybuffer_mlo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; int __pyx_t_8; int __pyx_t_9; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; PyObject *(*__pyx_t_14)(PyObject *); PyArrayObject *__pyx_t_15 = NULL; int __pyx_t_16; PyObject *__pyx_t_17 = NULL; PyObject *__pyx_t_18 = NULL; PyObject *__pyx_t_19 = NULL; PyArrayObject *__pyx_t_20 = NULL; PyArrayObject *__pyx_t_21 = NULL; PyArrayObject *__pyx_t_22 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("median", 0); __pyx_pybuffer_alo_nd.pybuffer.buf = NULL; __pyx_pybuffer_alo_nd.refcount = 0; __pyx_pybuffernd_alo_nd.data = NULL; __pyx_pybuffernd_alo_nd.rcbuffer = &__pyx_pybuffer_alo_nd; __pyx_pybuffer_ahi_nd.pybuffer.buf = NULL; __pyx_pybuffer_ahi_nd.refcount = 0; __pyx_pybuffernd_ahi_nd.data = NULL; __pyx_pybuffernd_ahi_nd.rcbuffer = &__pyx_pybuffer_ahi_nd; __pyx_pybuffer_blo_nd.pybuffer.buf = NULL; __pyx_pybuffer_blo_nd.refcount = 0; __pyx_pybuffernd_blo_nd.data = NULL; __pyx_pybuffernd_blo_nd.rcbuffer = &__pyx_pybuffer_blo_nd; __pyx_pybuffer_bhi_nd.pybuffer.buf = NULL; __pyx_pybuffer_bhi_nd.refcount = 0; __pyx_pybuffernd_bhi_nd.data = NULL; __pyx_pybuffernd_bhi_nd.rcbuffer = &__pyx_pybuffer_bhi_nd; __pyx_pybuffer_clo_nd.pybuffer.buf = NULL; __pyx_pybuffer_clo_nd.refcount = 0; __pyx_pybuffernd_clo_nd.data = NULL; __pyx_pybuffernd_clo_nd.rcbuffer = &__pyx_pybuffer_clo_nd; __pyx_pybuffer_chi_nd.pybuffer.buf = NULL; __pyx_pybuffer_chi_nd.refcount = 0; __pyx_pybuffernd_chi_nd.data = NULL; __pyx_pybuffernd_chi_nd.rcbuffer = &__pyx_pybuffer_chi_nd; __pyx_pybuffer_mlo_nd.pybuffer.buf = NULL; __pyx_pybuffer_mlo_nd.refcount = 0; __pyx_pybuffernd_mlo_nd.data = NULL; __pyx_pybuffernd_mlo_nd.rcbuffer = &__pyx_pybuffer_mlo_nd; __pyx_pybuffer_mhi_nd.pybuffer.buf = NULL; __pyx_pybuffer_mhi_nd.refcount = 0; __pyx_pybuffernd_mhi_nd.data = NULL; __pyx_pybuffernd_mhi_nd.rcbuffer = &__pyx_pybuffer_mhi_nd; /* "ga4py/ga.pyx":2463 * cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd * cdef np.ndarray[np.int64_t, ndim=1] mlo_nd, mhi_nd * if (alo is None and ahi is None # <<<<<<<<<<<<<< * and blo is None and bhi is None * and clo is None and chi is None */ __pyx_t_1 = (__pyx_v_alo == Py_None); if ((__pyx_t_1 != 0)) { /* "ga4py/ga.pyx":2464 * cdef np.ndarray[np.int64_t, ndim=1] mlo_nd, mhi_nd * if (alo is None and ahi is None * and blo is None and bhi is None # <<<<<<<<<<<<<< * and clo is None and chi is None * and mlo is None and mhi is None): */ __pyx_t_2 = (__pyx_v_ahi == Py_None); if ((__pyx_t_2 != 0)) { __pyx_t_3 = (__pyx_v_blo == Py_None); if ((__pyx_t_3 != 0)) { /* "ga4py/ga.pyx":2465 * if (alo is None and ahi is None * and blo is None and bhi is None * and clo is None and chi is None # <<<<<<<<<<<<<< * and mlo is None and mhi is None): * GA_Median(g_a, g_b, g_c, g_m) */ __pyx_t_4 = (__pyx_v_bhi == Py_None); if ((__pyx_t_4 != 0)) { __pyx_t_5 = (__pyx_v_clo == Py_None); if ((__pyx_t_5 != 0)) { /* "ga4py/ga.pyx":2466 * and blo is None and bhi is None * and clo is None and chi is None * and mlo is None and mhi is None): # <<<<<<<<<<<<<< * GA_Median(g_a, g_b, g_c, g_m) * else: */ __pyx_t_6 = (__pyx_v_chi == Py_None); if ((__pyx_t_6 != 0)) { __pyx_t_7 = (__pyx_v_mlo == Py_None); if ((__pyx_t_7 != 0)) { __pyx_t_8 = (__pyx_v_mhi == Py_None); __pyx_t_9 = (__pyx_t_8 != 0); } else { __pyx_t_9 = (__pyx_t_7 != 0); } __pyx_t_7 = __pyx_t_9; } else { __pyx_t_7 = (__pyx_t_6 != 0); } __pyx_t_6 = __pyx_t_7; } else { __pyx_t_6 = (__pyx_t_5 != 0); } __pyx_t_5 = __pyx_t_6; } else { __pyx_t_5 = (__pyx_t_4 != 0); } __pyx_t_4 = __pyx_t_5; } else { __pyx_t_4 = (__pyx_t_3 != 0); } __pyx_t_3 = __pyx_t_4; } else { __pyx_t_3 = (__pyx_t_2 != 0); } __pyx_t_2 = __pyx_t_3; } else { __pyx_t_2 = (__pyx_t_1 != 0); } if (__pyx_t_2) { /* "ga4py/ga.pyx":2467 * and clo is None and chi is None * and mlo is None and mhi is None): * GA_Median(g_a, g_b, g_c, g_m) # <<<<<<<<<<<<<< * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) */ GA_Median(__pyx_v_g_a, __pyx_v_g_b, __pyx_v_g_c, __pyx_v_g_m); goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":2469 * GA_Median(g_a, g_b, g_c, g_m) * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) # <<<<<<<<<<<<<< * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * clo_nd,chi_nd = _lohi(g_c,clo,chi) */ __pyx_t_10 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_alo, __pyx_v_ahi); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); if ((likely(PyTuple_CheckExact(__pyx_t_10))) || (PyList_CheckExact(__pyx_t_10))) { PyObject* sequence = __pyx_t_10; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_11 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_12 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_11 = PyList_GET_ITEM(sequence, 0); __pyx_t_12 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(__pyx_t_12); #else __pyx_t_11 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); #endif __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } else { Py_ssize_t index = -1; __pyx_t_13 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_14 = Py_TYPE(__pyx_t_13)->tp_iternext; index = 0; __pyx_t_11 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_11)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_11); index = 1; __pyx_t_12 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_12)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_12); if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_14 = NULL; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_14 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_15 = ((PyArrayObject *)__pyx_t_11); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __pyx_t_16 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_16 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_alo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_18, __pyx_t_19); } } __pyx_pybuffernd_alo_nd.diminfo[0].strides = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_alo_nd.diminfo[0].shape = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_15 = 0; __pyx_v_alo_nd = ((PyArrayObject *)__pyx_t_11); __pyx_t_11 = 0; __pyx_t_15 = ((PyArrayObject *)__pyx_t_12); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __pyx_t_16 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_16 < 0)) { PyErr_Fetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ahi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_19, __pyx_t_18, __pyx_t_17); } } __pyx_pybuffernd_ahi_nd.diminfo[0].strides = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ahi_nd.diminfo[0].shape = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_15 = 0; __pyx_v_ahi_nd = ((PyArrayObject *)__pyx_t_12); __pyx_t_12 = 0; /* "ga4py/ga.pyx":2470 * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) # <<<<<<<<<<<<<< * clo_nd,chi_nd = _lohi(g_c,clo,chi) * mlo_nd,mhi_nd = _lohi(g_m,mlo,mhi) */ __pyx_t_10 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_b, __pyx_v_blo, __pyx_v_bhi); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); if ((likely(PyTuple_CheckExact(__pyx_t_10))) || (PyList_CheckExact(__pyx_t_10))) { PyObject* sequence = __pyx_t_10; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_12 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_12 = PyList_GET_ITEM(sequence, 0); __pyx_t_11 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(__pyx_t_11); #else __pyx_t_12 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); #endif __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } else { Py_ssize_t index = -1; __pyx_t_13 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_14 = Py_TYPE(__pyx_t_13)->tp_iternext; index = 0; __pyx_t_12 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_12)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_12); index = 1; __pyx_t_11 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_11)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_11); if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_14 = NULL; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_14 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L7_unpacking_done:; } if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_20 = ((PyArrayObject *)__pyx_t_12); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __pyx_t_16 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_20, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_16 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_blo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_18, __pyx_t_19); } } __pyx_pybuffernd_blo_nd.diminfo[0].strides = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_blo_nd.diminfo[0].shape = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_20 = 0; __pyx_v_blo_nd = ((PyArrayObject *)__pyx_t_12); __pyx_t_12 = 0; __pyx_t_20 = ((PyArrayObject *)__pyx_t_11); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __pyx_t_16 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_20, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_16 < 0)) { PyErr_Fetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_bhi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_19, __pyx_t_18, __pyx_t_17); } } __pyx_pybuffernd_bhi_nd.diminfo[0].strides = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_bhi_nd.diminfo[0].shape = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_20 = 0; __pyx_v_bhi_nd = ((PyArrayObject *)__pyx_t_11); __pyx_t_11 = 0; /* "ga4py/ga.pyx":2471 * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * clo_nd,chi_nd = _lohi(g_c,clo,chi) # <<<<<<<<<<<<<< * mlo_nd,mhi_nd = _lohi(g_m,mlo,mhi) * GA_Median_patch64( */ __pyx_t_10 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_c, __pyx_v_clo, __pyx_v_chi); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); if ((likely(PyTuple_CheckExact(__pyx_t_10))) || (PyList_CheckExact(__pyx_t_10))) { PyObject* sequence = __pyx_t_10; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_11 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_12 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_11 = PyList_GET_ITEM(sequence, 0); __pyx_t_12 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(__pyx_t_12); #else __pyx_t_11 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); #endif __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } else { Py_ssize_t index = -1; __pyx_t_13 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_14 = Py_TYPE(__pyx_t_13)->tp_iternext; index = 0; __pyx_t_11 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_11)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_11); index = 1; __pyx_t_12 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_12)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_12); if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_14 = NULL; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; goto __pyx_L9_unpacking_done; __pyx_L8_unpacking_failed:; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_14 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L9_unpacking_done:; } if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_21 = ((PyArrayObject *)__pyx_t_11); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __pyx_t_16 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_16 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_clo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_18, __pyx_t_19); } } __pyx_pybuffernd_clo_nd.diminfo[0].strides = __pyx_pybuffernd_clo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_clo_nd.diminfo[0].shape = __pyx_pybuffernd_clo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_21 = 0; __pyx_v_clo_nd = ((PyArrayObject *)__pyx_t_11); __pyx_t_11 = 0; __pyx_t_21 = ((PyArrayObject *)__pyx_t_12); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __pyx_t_16 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_16 < 0)) { PyErr_Fetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_chi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_19, __pyx_t_18, __pyx_t_17); } } __pyx_pybuffernd_chi_nd.diminfo[0].strides = __pyx_pybuffernd_chi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_chi_nd.diminfo[0].shape = __pyx_pybuffernd_chi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_21 = 0; __pyx_v_chi_nd = ((PyArrayObject *)__pyx_t_12); __pyx_t_12 = 0; /* "ga4py/ga.pyx":2472 * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * clo_nd,chi_nd = _lohi(g_c,clo,chi) * mlo_nd,mhi_nd = _lohi(g_m,mlo,mhi) # <<<<<<<<<<<<<< * GA_Median_patch64( * g_a, alo_nd.data, ahi_nd.data, */ __pyx_t_10 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_m, __pyx_v_mlo, __pyx_v_mhi); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2472; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); if ((likely(PyTuple_CheckExact(__pyx_t_10))) || (PyList_CheckExact(__pyx_t_10))) { PyObject* sequence = __pyx_t_10; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2472; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_12 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_12 = PyList_GET_ITEM(sequence, 0); __pyx_t_11 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(__pyx_t_11); #else __pyx_t_12 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2472; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2472; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); #endif __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } else { Py_ssize_t index = -1; __pyx_t_13 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2472; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_14 = Py_TYPE(__pyx_t_13)->tp_iternext; index = 0; __pyx_t_12 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_12)) goto __pyx_L10_unpacking_failed; __Pyx_GOTREF(__pyx_t_12); index = 1; __pyx_t_11 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_11)) goto __pyx_L10_unpacking_failed; __Pyx_GOTREF(__pyx_t_11); if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2472; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_14 = NULL; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; goto __pyx_L11_unpacking_done; __pyx_L10_unpacking_failed:; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_14 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2472; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L11_unpacking_done:; } if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2472; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2472; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_22 = ((PyArrayObject *)__pyx_t_12); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mlo_nd.rcbuffer->pybuffer); __pyx_t_16 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mlo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_22, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_16 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mlo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_mlo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_18, __pyx_t_19); } } __pyx_pybuffernd_mlo_nd.diminfo[0].strides = __pyx_pybuffernd_mlo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mlo_nd.diminfo[0].shape = __pyx_pybuffernd_mlo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2472; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_22 = 0; __pyx_v_mlo_nd = ((PyArrayObject *)__pyx_t_12); __pyx_t_12 = 0; __pyx_t_22 = ((PyArrayObject *)__pyx_t_11); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mhi_nd.rcbuffer->pybuffer); __pyx_t_16 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_22, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_16 < 0)) { PyErr_Fetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_mhi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_19, __pyx_t_18, __pyx_t_17); } } __pyx_pybuffernd_mhi_nd.diminfo[0].strides = __pyx_pybuffernd_mhi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mhi_nd.diminfo[0].shape = __pyx_pybuffernd_mhi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_16 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2472; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_22 = 0; __pyx_v_mhi_nd = ((PyArrayObject *)__pyx_t_11); __pyx_t_11 = 0; /* "ga4py/ga.pyx":2477 * g_b, blo_nd.data, bhi_nd.data, * g_c, clo_nd.data, chi_nd.data, * g_m, mlo_nd.data, mhi_nd.data) # <<<<<<<<<<<<<< * * def memory_avail(): */ GA_Median_patch64(__pyx_v_g_a, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_g_b, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data), __pyx_v_g_c, ((int64_t *)__pyx_v_clo_nd->data), ((int64_t *)__pyx_v_chi_nd->data), __pyx_v_g_m, ((int64_t *)__pyx_v_mlo_nd->data), ((int64_t *)__pyx_v_mhi_nd->data)); } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_11); __Pyx_XDECREF(__pyx_t_12); __Pyx_XDECREF(__pyx_t_13); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mlo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.median", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mlo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_alo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_ahi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_blo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_bhi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_clo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_chi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_mlo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_mhi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_159memory_avail(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_158memory_avail[] = "memory_avail()\nReturns amount of memory (in bytes) left for allocation of new global\n arrays on the calling processor.\n\n Note: If ga.uses_ma() returns True, then ga.memory_avail() returns the\n lesser of the amount available under the GA limit and the amount available\n from MA (according to ma.inquire_avail() operation). If no GA limit has\n been set, it returns what MA says is available.\n\n If ( ! ga.uses_ma() && ! ga.memory_limited() ) returns < 0, indicating\n that the bound on currently available memory cannot be determined.\n\n This operation is local. \n \n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_159memory_avail = {__Pyx_NAMESTR("memory_avail"), (PyCFunction)__pyx_pw_5ga4py_2ga_159memory_avail, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_158memory_avail)}; static PyObject *__pyx_pw_5ga4py_2ga_159memory_avail(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("memory_avail (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_158memory_avail(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2479 * g_m, mlo_nd.data, mhi_nd.data) * * def memory_avail(): # <<<<<<<<<<<<<< * """Returns amount of memory (in bytes) left for allocation of new global * arrays on the calling processor. */ static PyObject *__pyx_pf_5ga4py_2ga_158memory_avail(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("memory_avail", 0); /* "ga4py/ga.pyx":2494 * * """ * return GA_Memory_avail() # <<<<<<<<<<<<<< * * def memory_limited(): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_FromSize_t(GA_Memory_avail()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.memory_avail", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_161memory_limited(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_160memory_limited[] = "memory_limited()\nIndicates if limit is set on memory usage in Global Arrays on the\n calling processor.\n \n This operation is local. \n\n :returns: True for \"yes\", False for \"no\"\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_161memory_limited = {__Pyx_NAMESTR("memory_limited"), (PyCFunction)__pyx_pw_5ga4py_2ga_161memory_limited, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_160memory_limited)}; static PyObject *__pyx_pw_5ga4py_2ga_161memory_limited(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("memory_limited (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_160memory_limited(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2496 * return GA_Memory_avail() * * def memory_limited(): # <<<<<<<<<<<<<< * """Indicates if limit is set on memory usage in Global Arrays on the * calling processor. */ static PyObject *__pyx_pf_5ga4py_2ga_160memory_limited(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("memory_limited", 0); /* "ga4py/ga.pyx":2505 * * """ * if 1 == GA_Memory_limited(): # <<<<<<<<<<<<<< * return True * return False */ __pyx_t_1 = ((1 == GA_Memory_limited()) != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":2506 * """ * if 1 == GA_Memory_limited(): * return True # <<<<<<<<<<<<<< * return False * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2506; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":2507 * if 1 == GA_Memory_limited(): * return True * return False # <<<<<<<<<<<<<< * * def merge_distr_patch(int g_a, alo, ahi, int g_b, blo, bhi): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2507; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.ga.memory_limited", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_163merge_distr_patch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_162merge_distr_patch[] = "merge_distr_patch(int g_a, alo, ahi, int g_b, blo, bhi)\nThis function merges all copies of a patch of a mirrored array (g_a)\n into a patch in a distributed array (g_b).\n\n This is a collective operation. \n\n :Parameters:\n g_a : int\n array handle\n alo : 1D array-like of integers\n g_a patch coordinate\n ahi : 1D array-like of integers\n g_a patch coordinate\n g_b : int\n array handle\n blo : 1D array-like of integers\n g_b patch coordinate\n bhi : 1D array-like of integers\n g_b patch coordinate\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_163merge_distr_patch = {__Pyx_NAMESTR("merge_distr_patch"), (PyCFunction)__pyx_pw_5ga4py_2ga_163merge_distr_patch, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_162merge_distr_patch)}; static PyObject *__pyx_pw_5ga4py_2ga_163merge_distr_patch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_alo = 0; PyObject *__pyx_v_ahi = 0; int __pyx_v_g_b; PyObject *__pyx_v_blo = 0; PyObject *__pyx_v_bhi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("merge_distr_patch (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__alo,&__pyx_n_s__ahi,&__pyx_n_s__g_b,&__pyx_n_s__blo,&__pyx_n_s__bhi,0}; PyObject* values[6] = {0,0,0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alo)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("merge_distr_patch", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2509; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ahi)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("merge_distr_patch", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2509; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("merge_distr_patch", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2509; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__blo)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("merge_distr_patch", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2509; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 5: if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bhi)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("merge_distr_patch", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2509; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "merge_distr_patch") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2509; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 6) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[4] = PyTuple_GET_ITEM(__pyx_args, 4); values[5] = PyTuple_GET_ITEM(__pyx_args, 5); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2509; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_alo = values[1]; __pyx_v_ahi = values[2]; __pyx_v_g_b = __Pyx_PyInt_AsInt(values[3]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2509; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_blo = values[4]; __pyx_v_bhi = values[5]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("merge_distr_patch", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2509; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.merge_distr_patch", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_162merge_distr_patch(__pyx_self, __pyx_v_g_a, __pyx_v_alo, __pyx_v_ahi, __pyx_v_g_b, __pyx_v_blo, __pyx_v_bhi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2509 * return False * * def merge_distr_patch(int g_a, alo, ahi, int g_b, blo, bhi): # <<<<<<<<<<<<<< * """This function merges all copies of a patch of a mirrored array (g_a) * into a patch in a distributed array (g_b). */ static PyObject *__pyx_pf_5ga4py_2ga_162merge_distr_patch(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, int __pyx_v_g_b, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi) { PyArrayObject *__pyx_v_alo_nd = 0; PyArrayObject *__pyx_v_ahi_nd = 0; PyArrayObject *__pyx_v_blo_nd = 0; PyArrayObject *__pyx_v_bhi_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_ahi_nd; __Pyx_Buffer __pyx_pybuffer_ahi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_alo_nd; __Pyx_Buffer __pyx_pybuffer_alo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_bhi_nd; __Pyx_Buffer __pyx_pybuffer_bhi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_blo_nd; __Pyx_Buffer __pyx_pybuffer_blo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *(*__pyx_t_5)(PyObject *); PyArrayObject *__pyx_t_6 = NULL; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyArrayObject *__pyx_t_11 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("merge_distr_patch", 0); __pyx_pybuffer_alo_nd.pybuffer.buf = NULL; __pyx_pybuffer_alo_nd.refcount = 0; __pyx_pybuffernd_alo_nd.data = NULL; __pyx_pybuffernd_alo_nd.rcbuffer = &__pyx_pybuffer_alo_nd; __pyx_pybuffer_ahi_nd.pybuffer.buf = NULL; __pyx_pybuffer_ahi_nd.refcount = 0; __pyx_pybuffernd_ahi_nd.data = NULL; __pyx_pybuffernd_ahi_nd.rcbuffer = &__pyx_pybuffer_ahi_nd; __pyx_pybuffer_blo_nd.pybuffer.buf = NULL; __pyx_pybuffer_blo_nd.refcount = 0; __pyx_pybuffernd_blo_nd.data = NULL; __pyx_pybuffernd_blo_nd.rcbuffer = &__pyx_pybuffer_blo_nd; __pyx_pybuffer_bhi_nd.pybuffer.buf = NULL; __pyx_pybuffer_bhi_nd.refcount = 0; __pyx_pybuffernd_bhi_nd.data = NULL; __pyx_pybuffernd_bhi_nd.rcbuffer = &__pyx_pybuffer_bhi_nd; /* "ga4py/ga.pyx":2532 * cdef np.ndarray[np.int64_t, ndim=1] alo_nd, ahi_nd * cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) # <<<<<<<<<<<<<< * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * NGA_Merge_distr_patch64( */ __pyx_t_1 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_alo, __pyx_v_ahi); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_3 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L4_unpacking_done; __pyx_L3_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L4_unpacking_done:; } if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_alo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_alo_nd.diminfo[0].strides = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_alo_nd.diminfo[0].shape = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_alo_nd = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ahi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_ahi_nd.diminfo[0].strides = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ahi_nd.diminfo[0].shape = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_ahi_nd = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":2533 * cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) # <<<<<<<<<<<<<< * NGA_Merge_distr_patch64( * g_a, alo_nd.data, ahi_nd.data, */ __pyx_t_1 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_b, __pyx_v_blo, __pyx_v_bhi); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_3 = PyList_GET_ITEM(sequence, 0); __pyx_t_2 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); #else __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; index = 0; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); index = 1; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L6_unpacking_done:; } if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_11 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_blo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_blo_nd.diminfo[0].strides = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_blo_nd.diminfo[0].shape = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_11 = 0; __pyx_v_blo_nd = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; __pyx_t_11 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_bhi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_bhi_nd.diminfo[0].strides = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_bhi_nd.diminfo[0].shape = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_11 = 0; __pyx_v_bhi_nd = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":2536 * NGA_Merge_distr_patch64( * g_a, alo_nd.data, ahi_nd.data, * g_b, blo_nd.data, bhi_nd.data) # <<<<<<<<<<<<<< * * def merge_mirrored(int g_a): */ NGA_Merge_distr_patch64(__pyx_v_g_a, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_g_b, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data)); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.merge_distr_patch", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_alo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_ahi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_blo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_bhi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_165merge_mirrored(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_164merge_mirrored[] = "merge_mirrored(int g_a)\nThis subroutine merges mirrored arrays by adding the contents of each\n array across nodes.\n \n The result is that the each mirrored copy of the array represented by g_a\n is the sum of the individual arrays before the merge operation. After the\n merge, all mirrored arrays are equal.\n\n This is a collective operation. \n\n :Parameters:\n g_a : int\n array handle\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_165merge_mirrored = {__Pyx_NAMESTR("merge_mirrored"), (PyCFunction)__pyx_pw_5ga4py_2ga_165merge_mirrored, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_164merge_mirrored)}; static PyObject *__pyx_pw_5ga4py_2ga_165merge_mirrored(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("merge_mirrored (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2538; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.merge_mirrored", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_164merge_mirrored(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2538 * g_b, blo_nd.data, bhi_nd.data) * * def merge_mirrored(int g_a): # <<<<<<<<<<<<<< * """This subroutine merges mirrored arrays by adding the contents of each * array across nodes. */ static PyObject *__pyx_pf_5ga4py_2ga_164merge_mirrored(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("merge_mirrored", 0); /* "ga4py/ga.pyx":2553 * * """ * GA_Merge_mirrored(g_a) # <<<<<<<<<<<<<< * * def nbacc(int g_a, buffer, lo=None, hi=None, alpha=None): */ GA_Merge_mirrored(__pyx_v_g_a); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_167nbacc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_166nbacc[] = "nbacc(int g_a, buffer, lo=None, hi=None, alpha=None)\nNon-blocking version of ga.acc.\n\n The accumulate operation can be completed locally by making a call to the\n ga.nbwait() routine.\n \n Combines data from buffer with data in the global array patch.\n \n The buffer array is assumed to be have the same number of\n dimensions as the global array. If the buffer is not contiguous, a\n contiguous copy will be made.\n \n global array section (lo[],hi[]) += alpha * buffer\n\n This is a non-blocking and one-sided and atomic operation.\n\n :Parameters:\n g_a : int\n the array handle\n buffer : array-like\n must be contiguous and have same number of elements as patch\n lo : 1D array-like of integers\n lower bound patch coordinates, inclusive\n hi : 1D array-like of integers\n higher bound patch coordinates, exclusive\n alpha : object\n multiplier (converted to the appropriate type)\n\n :returns: The non-blocking request handle.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_167nbacc = {__Pyx_NAMESTR("nbacc"), (PyCFunction)__pyx_pw_5ga4py_2ga_167nbacc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_166nbacc)}; static PyObject *__pyx_pw_5ga4py_2ga_167nbacc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_buffer = 0; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; PyObject *__pyx_v_alpha = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nbacc (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__buffer,&__pyx_n_s__lo,&__pyx_n_s__hi,&__pyx_n_s__alpha,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/ga.pyx":2555 * GA_Merge_mirrored(g_a) * * def nbacc(int g_a, buffer, lo=None, hi=None, alpha=None): # <<<<<<<<<<<<<< * """Non-blocking version of ga.acc. * */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("nbacc", 0, 2, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2555; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alpha); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "nbacc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2555; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2555; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_buffer = values[1]; __pyx_v_lo = values[2]; __pyx_v_hi = values[3]; __pyx_v_alpha = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("nbacc", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2555; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.nbacc", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_166nbacc(__pyx_self, __pyx_v_g_a, __pyx_v_buffer, __pyx_v_lo, __pyx_v_hi, __pyx_v_alpha); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_166nbacc(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_buffer, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyObject *__pyx_v_alpha) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; struct __pyx_opt_args_5ga4py_2ga__acc_common __pyx_t_2; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("nbacc", 0); /* "ga4py/ga.pyx":2586 * * """ * return _acc_common(g_a, buffer, lo, hi, alpha, True) # <<<<<<<<<<<<<< * * def nbget(int g_a, lo=None, hi=None, np.ndarray buffer=None): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2.__pyx_n = 4; __pyx_t_2.lo = __pyx_v_lo; __pyx_t_2.hi = __pyx_v_hi; __pyx_t_2.alpha = __pyx_v_alpha; __pyx_t_2.nb = 1; __pyx_t_1 = __pyx_f_5ga4py_2ga__acc_common(__pyx_v_g_a, __pyx_v_buffer, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2586; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.nbacc", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_169nbget(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_168nbget[] = "nbget(int g_a, lo=None, hi=None, ndarray buffer=None)\nNon-blocking version of the blocking ga.get operation.\n \n The get operation can be completed locally by making a call to the\n ga.nbwait() routine.\n \n Copies data from global array section to the local array buffer.\n \n The local array is assumed to be have the same number of dimensions as the\n global array. Any detected inconsitencies/errors in the input arguments\n are fatal.\n\n This is a non-blocking and one-sided operation.\n\n :Parameters:\n g_a : int\n the array handle\n lo : 1D array-like of integers\n lower bound patch coordinates, inclusive\n hi : 1D array-like of integers\n higher bound patch coordinates, exclusive\n buffer : ndarray\n Fill this buffer instead of allocating a new one internally.\n Must be contiguous and have same number of elements as patch.\n\n :returns: The local array buffer.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_169nbget = {__Pyx_NAMESTR("nbget"), (PyCFunction)__pyx_pw_5ga4py_2ga_169nbget, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_168nbget)}; static PyObject *__pyx_pw_5ga4py_2ga_169nbget(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; PyArrayObject *__pyx_v_buffer = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nbget (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__lo,&__pyx_n_s__hi,&__pyx_n_s__buffer,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/ga.pyx":2588 * return _acc_common(g_a, buffer, lo, hi, alpha, True) * * def nbget(int g_a, lo=None, hi=None, np.ndarray buffer=None): # <<<<<<<<<<<<<< * """Non-blocking version of the blocking ga.get operation. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = (PyObject *)((PyArrayObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "nbget") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2588; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2588; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; __pyx_v_buffer = ((PyArrayObject *)values[3]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("nbget", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2588; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.nbget", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_buffer), __pyx_ptype_5numpy_ndarray, 1, "buffer", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2588; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = __pyx_pf_5ga4py_2ga_168nbget(__pyx_self, __pyx_v_g_a, __pyx_v_lo, __pyx_v_hi, __pyx_v_buffer); goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_168nbget(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyArrayObject *__pyx_v_buffer) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; struct __pyx_opt_args_5ga4py_2ga__get_common __pyx_t_2; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("nbget", 0); /* "ga4py/ga.pyx":2616 * * """ * return _get_common(g_a, lo, hi, buffer, True) # <<<<<<<<<<<<<< * * def nblock(int g_a): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2.__pyx_n = 4; __pyx_t_2.lo = __pyx_v_lo; __pyx_t_2.hi = __pyx_v_hi; __pyx_t_2.buffer = __pyx_v_buffer; __pyx_t_2.nb = 1; __pyx_t_1 = __pyx_f_5ga4py_2ga__get_common(__pyx_v_g_a, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.nbget", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_171nblock(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_170nblock[] = "nblock(int g_a)\nReturns the number of partitions of each array dimension for g_a.\n\n This operation is local. \n\n :Parameters:\n g_a : int\n array handle\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_171nblock = {__Pyx_NAMESTR("nblock"), (PyCFunction)__pyx_pw_5ga4py_2ga_171nblock, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_170nblock)}; static PyObject *__pyx_pw_5ga4py_2ga_171nblock(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nblock (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2618; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.nblock", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_170nblock(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2618 * return _get_common(g_a, lo, hi, buffer, True) * * def nblock(int g_a): # <<<<<<<<<<<<<< * """Returns the number of partitions of each array dimension for g_a. * */ static PyObject *__pyx_pf_5ga4py_2ga_170nblock(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyArrayObject *__pyx_v_nblock_nd = 0; int __pyx_v_ndim; __Pyx_LocalBuf_ND __pyx_pybuffernd_nblock_nd; __Pyx_Buffer __pyx_pybuffer_nblock_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyArrayObject *__pyx_t_6 = NULL; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("nblock", 0); __pyx_pybuffer_nblock_nd.pybuffer.buf = NULL; __pyx_pybuffer_nblock_nd.refcount = 0; __pyx_pybuffernd_nblock_nd.data = NULL; __pyx_pybuffernd_nblock_nd.rcbuffer = &__pyx_pybuffer_nblock_nd; /* "ga4py/ga.pyx":2629 * """ * cdef np.ndarray[np.int32_t, ndim=1] nblock_nd * cdef int ndim = GA_Ndim(g_a) # <<<<<<<<<<<<<< * nblock_nd = np.zeros(ndim, dtype=np.intc) * GA_Nblock(g_a, nblock_nd.data) */ __pyx_v_ndim = GA_Ndim(__pyx_v_g_a); /* "ga4py/ga.pyx":2630 * cdef np.ndarray[np.int32_t, ndim=1] nblock_nd * cdef int ndim = GA_Ndim(g_a) * nblock_nd = np.zeros(ndim, dtype=np.intc) # <<<<<<<<<<<<<< * GA_Nblock(g_a, nblock_nd.data) * return nblock_nd */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__zeros); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyInt_FromLong(__pyx_v_ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__intc); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_nblock_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_nblock_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_nblock_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_nblock_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_nblock_nd.diminfo[0].strides = __pyx_pybuffernd_nblock_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_nblock_nd.diminfo[0].shape = __pyx_pybuffernd_nblock_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_nblock_nd = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/ga.pyx":2631 * cdef int ndim = GA_Ndim(g_a) * nblock_nd = np.zeros(ndim, dtype=np.intc) * GA_Nblock(g_a, nblock_nd.data) # <<<<<<<<<<<<<< * return nblock_nd * */ GA_Nblock(__pyx_v_g_a, ((int *)__pyx_v_nblock_nd->data)); /* "ga4py/ga.pyx":2632 * nblock_nd = np.zeros(ndim, dtype=np.intc) * GA_Nblock(g_a, nblock_nd.data) * return nblock_nd # <<<<<<<<<<<<<< * * def nbput(int g_a, buffer, lo=None, hi=None): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_nblock_nd)); __pyx_r = ((PyObject *)__pyx_v_nblock_nd); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_nblock_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.nblock", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_nblock_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_nblock_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_173nbput(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_172nbput[] = "nbput(int g_a, buffer, lo=None, hi=None)\nNon-blocking version of the blocking put operation.\n \n The put operation can be completed locally by making a call to the\n ga.nbwait() routine.\n \n Copies data from local array buffer to the global array section.\n \n The local array is assumed to be have the same number of dimensions as the\n global array. Any detected inconsitencies/errors in input arguments are\n fatal.\n\n This is a one-sided operation. \n\n :Parameters:\n g_a : int\n the array handle\n buffer : array-like\n the data to put\n lo : 1D array-like of integers\n lower bound patch coordinates, inclusive\n hi : 1D array-like of integers\n higher bound patch coordinates, exclusive\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_173nbput = {__Pyx_NAMESTR("nbput"), (PyCFunction)__pyx_pw_5ga4py_2ga_173nbput, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_172nbput)}; static PyObject *__pyx_pw_5ga4py_2ga_173nbput(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_buffer = 0; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nbput (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__buffer,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/ga.pyx":2634 * return nblock_nd * * def nbput(int g_a, buffer, lo=None, hi=None): # <<<<<<<<<<<<<< * """Non-blocking version of the blocking put operation. * */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("nbput", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2634; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "nbput") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2634; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2634; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_buffer = values[1]; __pyx_v_lo = values[2]; __pyx_v_hi = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("nbput", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2634; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.nbput", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_172nbput(__pyx_self, __pyx_v_g_a, __pyx_v_buffer, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_172nbput(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_buffer, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; struct __pyx_opt_args_5ga4py_2ga__put_common __pyx_t_2; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("nbput", 0); /* "ga4py/ga.pyx":2659 * * """ * return _put_common(g_a, buffer, lo, hi, True, False) # <<<<<<<<<<<<<< * * def nbwait(ga_nbhdl_t nbhandle): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2.__pyx_n = 4; __pyx_t_2.lo = __pyx_v_lo; __pyx_t_2.hi = __pyx_v_hi; __pyx_t_2.nb = 1; __pyx_t_2.periodic = 0; __pyx_t_1 = __pyx_f_5ga4py_2ga__put_common(__pyx_v_g_a, __pyx_v_buffer, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.nbput", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_175nbwait(PyObject *__pyx_self, PyObject *__pyx_arg_nbhandle); /*proto*/ static char __pyx_doc_5ga4py_2ga_174nbwait[] = "nbwait(ga_nbhdl_t nbhandle)\nThis function completes a non-blocking one-sided operation locally.\n\n Waiting on a nonblocking put or an accumulate operation assures that data\n was injected into the network and the user buffer can be now be reused.\n Completing a get operation assures data has arrived into the user memory\n and is ready for use. Wait operation ensures only local completion. Unlike\n their blocking counterparts, the nonblocking operations are not ordered\n with respect to the destination. Performance being one reason, the other\n reason is that by ensuring ordering we incur additional and possibly\n unnecessary overhead on applications that do not require their operations\n to be ordered. For cases where ordering is necessary, it can be done by\n calling a fence operation. The fence operation is provided to the user to\n confirm remote completion if needed. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_175nbwait = {__Pyx_NAMESTR("nbwait"), (PyCFunction)__pyx_pw_5ga4py_2ga_175nbwait, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_174nbwait)}; static PyObject *__pyx_pw_5ga4py_2ga_175nbwait(PyObject *__pyx_self, PyObject *__pyx_arg_nbhandle) { ga_nbhdl_t __pyx_v_nbhandle; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nbwait (wrapper)", 0); assert(__pyx_arg_nbhandle); { __pyx_v_nbhandle = __Pyx_PyInt_from_py_Integer(__pyx_arg_nbhandle); if (unlikely((__pyx_v_nbhandle == (ga_nbhdl_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2661; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.nbwait", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_174nbwait(__pyx_self, ((ga_nbhdl_t)__pyx_v_nbhandle)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2661 * return _put_common(g_a, buffer, lo, hi, True, False) * * def nbwait(ga_nbhdl_t nbhandle): # <<<<<<<<<<<<<< * """This function completes a non-blocking one-sided operation locally. * */ static PyObject *__pyx_pf_5ga4py_2ga_174nbwait(CYTHON_UNUSED PyObject *__pyx_self, ga_nbhdl_t __pyx_v_nbhandle) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nbwait", 0); /* "ga4py/ga.pyx":2677 * * """ * NGA_NbWait(&nbhandle) # <<<<<<<<<<<<<< * * def ndim(int g_a): */ NGA_NbWait((&__pyx_v_nbhandle)); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_177ndim(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_176ndim[] = "ndim(int g_a)\nReturns the number of dimensions in array represented by the handle g_a.\n\n This operation is local.\n \n :Parameters:\n g_a : int\n the array handle\n\n :returns: the number of dimensions in the array g_a\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_177ndim = {__Pyx_NAMESTR("ndim"), (PyCFunction)__pyx_pw_5ga4py_2ga_177ndim, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_176ndim)}; static PyObject *__pyx_pw_5ga4py_2ga_177ndim(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("ndim (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2679; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.ndim", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_176ndim(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2679 * NGA_NbWait(&nbhandle) * * def ndim(int g_a): # <<<<<<<<<<<<<< * """Returns the number of dimensions in array represented by the handle g_a. * */ static PyObject *__pyx_pf_5ga4py_2ga_176ndim(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("ndim", 0); /* "ga4py/ga.pyx":2691 * * """ * return GA_Ndim(g_a) # <<<<<<<<<<<<<< * * def nnodes(): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Ndim(__pyx_v_g_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2691; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.ndim", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_179nnodes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_178nnodes[] = "nnodes()\nReturns the number of the GA compute (user) processes.\n\n This operation is local.\n \n :returns: the number of GA compute (user) processes\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_179nnodes = {__Pyx_NAMESTR("nnodes"), (PyCFunction)__pyx_pw_5ga4py_2ga_179nnodes, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_178nnodes)}; static PyObject *__pyx_pw_5ga4py_2ga_179nnodes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nnodes (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_178nnodes(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2693 * return GA_Ndim(g_a) * * def nnodes(): # <<<<<<<<<<<<<< * """Returns the number of the GA compute (user) processes. * */ static PyObject *__pyx_pf_5ga4py_2ga_178nnodes(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("nnodes", 0); /* "ga4py/ga.pyx":2701 * * """ * return GA_Nnodes() # <<<<<<<<<<<<<< * * def nodeid(): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Nnodes()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2701; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.nnodes", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_181nodeid(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_180nodeid[] = "nodeid()\nReturns the GA process id (0, ..., ga.nnodes()-1) of the requesting\n compute process.\n\n This operation is local.\n \n :returns: the GA process id\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_181nodeid = {__Pyx_NAMESTR("nodeid"), (PyCFunction)__pyx_pw_5ga4py_2ga_181nodeid, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_180nodeid)}; static PyObject *__pyx_pw_5ga4py_2ga_181nodeid(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nodeid (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_180nodeid(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2703 * return GA_Nnodes() * * def nodeid(): # <<<<<<<<<<<<<< * """Returns the GA process id (0, ..., ga.nnodes()-1) of the requesting * compute process. */ static PyObject *__pyx_pf_5ga4py_2ga_180nodeid(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("nodeid", 0); /* "ga4py/ga.pyx":2712 * * """ * return GA_Nodeid() # <<<<<<<<<<<<<< * * def norm1(int g_a): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Nodeid()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2712; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.nodeid", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_183norm1(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_182norm1[] = "norm1(int g_a)\nComputes the 1-norm of the matrix or vector g_a.\n\n This is a collective operation. \n\n :Parameters:\n g_a : int\n the array handle\n\n :returns: the 1-norm of the matrix or vector g_a (as a float)\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_183norm1 = {__Pyx_NAMESTR("norm1"), (PyCFunction)__pyx_pw_5ga4py_2ga_183norm1, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_182norm1)}; static PyObject *__pyx_pw_5ga4py_2ga_183norm1(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("norm1 (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2714; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.norm1", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_182norm1(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2714 * return GA_Nodeid() * * def norm1(int g_a): # <<<<<<<<<<<<<< * """Computes the 1-norm of the matrix or vector g_a. * */ static PyObject *__pyx_pf_5ga4py_2ga_182norm1(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { double __pyx_v_nm; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("norm1", 0); /* "ga4py/ga.pyx":2727 * """ * cdef double nm * GA_Norm1(g_a, &nm) # <<<<<<<<<<<<<< * return nm * */ GA_Norm1(__pyx_v_g_a, (&__pyx_v_nm)); /* "ga4py/ga.pyx":2728 * cdef double nm * GA_Norm1(g_a, &nm) * return nm # <<<<<<<<<<<<<< * * def norm_infinity(int g_a): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_nm); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2728; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.norm1", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_185norm_infinity(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_184norm_infinity[] = "norm_infinity(int g_a)\nComputes the 1-norm of the matrix or vector g_a.\n\n This is a collective operation. \n\n :Parameters:\n g_a : int\n the array handle\n\n :returns: the 1-norm of the matrix or vector g_a\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_185norm_infinity = {__Pyx_NAMESTR("norm_infinity"), (PyCFunction)__pyx_pw_5ga4py_2ga_185norm_infinity, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_184norm_infinity)}; static PyObject *__pyx_pw_5ga4py_2ga_185norm_infinity(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("norm_infinity (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2730; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.norm_infinity", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_184norm_infinity(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2730 * return nm * * def norm_infinity(int g_a): # <<<<<<<<<<<<<< * """Computes the 1-norm of the matrix or vector g_a. * */ static PyObject *__pyx_pf_5ga4py_2ga_184norm_infinity(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { double __pyx_v_nm; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("norm_infinity", 0); /* "ga4py/ga.pyx":2743 * """ * cdef double nm * GA_Norm_infinity(g_a, &nm) # <<<<<<<<<<<<<< * return nm * */ GA_Norm_infinity(__pyx_v_g_a, (&__pyx_v_nm)); /* "ga4py/ga.pyx":2744 * cdef double nm * GA_Norm_infinity(g_a, &nm) * return nm # <<<<<<<<<<<<<< * * def enum(int g_a, lo=None, hi=None, start=None, inc=None): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_nm); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.norm_infinity", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_187enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_186enum[] = "enum(int g_a, lo=None, hi=None, start=None, inc=None)\nThis subroutine enumerates the values of an array between elements lo\n and hi starting with the value istart and incrementing each subsequent\n value by inc.\n \n This operation is only applicable to 1-dimensional arrays.\n\n An example of its use is shown below:\n\n ga.enum(g_a, 1, n, 7, 2)\n # g_a: 7 9 11 13 15 17 19 21 23 ...\n\n This is a collective operation.\n\n :Parameters:\n g_a : int\n the array handle\n lo : 1D array-like of integers\n patch coordinate\n hi : 1D array-like of integers\n patch coordinate\n start : object\n starting value of enumeration (converted to appropriate type)\n inc : object\n increment value (converted to appropriate type)\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_187enum = {__Pyx_NAMESTR("enum"), (PyCFunction)__pyx_pw_5ga4py_2ga_187enum, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_186enum)}; static PyObject *__pyx_pw_5ga4py_2ga_187enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; PyObject *__pyx_v_start = 0; PyObject *__pyx_v_inc = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("enum (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__lo,&__pyx_n_s__hi,&__pyx_n_s__start,&__pyx_n_s__inc,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/ga.pyx":2746 * return nm * * def enum(int g_a, lo=None, hi=None, start=None, inc=None): # <<<<<<<<<<<<<< * """This subroutine enumerates the values of an array between elements lo * and hi starting with the value istart and incrementing each subsequent */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__start); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__inc); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "enum") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2746; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2746; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; __pyx_v_start = values[3]; __pyx_v_inc = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("enum", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2746; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.enum", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_186enum(__pyx_self, __pyx_v_g_a, __pyx_v_lo, __pyx_v_hi, __pyx_v_start, __pyx_v_inc); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_186enum(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyObject *__pyx_v_start, PyObject *__pyx_v_inc) { PyArrayObject *__pyx_v_hi_nd = 0; int64_t __pyx_v_c_lo; int64_t __pyx_v_c_hi; int __pyx_v_gtype; int __pyx_v_istart; int __pyx_v_iinc; long __pyx_v_lstart; long __pyx_v_linc; PY_LONG_LONG __pyx_v_llstart; PY_LONG_LONG __pyx_v_llinc; float __pyx_v_fstart; float __pyx_v_finc; double __pyx_v_dstart; double __pyx_v_dinc; long double __pyx_v_ldstart; long double __pyx_v_ldinc; SingleComplex __pyx_v_fcstart; SingleComplex __pyx_v_fcinc; DoubleComplex __pyx_v_dcstart; DoubleComplex __pyx_v_dcinc; void *__pyx_v_vstart; void *__pyx_v_vinc; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyArrayObject *__pyx_t_3 = NULL; long __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; int64_t __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("enum", 0); __Pyx_INCREF(__pyx_v_start); __Pyx_INCREF(__pyx_v_inc); __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; /* "ga4py/ga.pyx":2773 * * """ * cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_a)-1 # <<<<<<<<<<<<<< * cdef int64_t c_lo=0, c_hi=hi_nd[0] * cdef int gtype=inquire_type(g_a) */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga_inquire_dims(__pyx_v_g_a, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2773; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2773; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2773; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { __pyx_v_hi_nd = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2773; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; } } __pyx_t_3 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":2774 * """ * cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_a)-1 * cdef int64_t c_lo=0, c_hi=hi_nd[0] # <<<<<<<<<<<<<< * cdef int gtype=inquire_type(g_a) * cdef int istart, iinc */ __pyx_v_c_lo = 0; __pyx_t_4 = 0; __pyx_t_5 = -1; if (__pyx_t_4 < 0) { __pyx_t_4 += __pyx_pybuffernd_hi_nd.diminfo[0].shape; if (unlikely(__pyx_t_4 < 0)) __pyx_t_5 = 0; } else if (unlikely(__pyx_t_4 >= __pyx_pybuffernd_hi_nd.diminfo[0].shape)) __pyx_t_5 = 0; if (unlikely(__pyx_t_5 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2774; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_c_hi = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_hi_nd.diminfo[0].strides)); /* "ga4py/ga.pyx":2775 * cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_a)-1 * cdef int64_t c_lo=0, c_hi=hi_nd[0] * cdef int gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * cdef int istart, iinc * cdef long lstart, linc */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":2784 * cdef SingleComplex fcstart, fcinc * cdef DoubleComplex dcstart, dcinc * cdef void *vstart=NULL, *vinc=NULL # <<<<<<<<<<<<<< * if lo is not None: * c_lo = lo */ __pyx_v_vstart = NULL; __pyx_v_vinc = NULL; /* "ga4py/ga.pyx":2785 * cdef DoubleComplex dcstart, dcinc * cdef void *vstart=NULL, *vinc=NULL * if lo is not None: # <<<<<<<<<<<<<< * c_lo = lo * if hi is not None: */ __pyx_t_6 = (__pyx_v_lo != Py_None); __pyx_t_7 = (__pyx_t_6 != 0); if (__pyx_t_7) { /* "ga4py/ga.pyx":2786 * cdef void *vstart=NULL, *vinc=NULL * if lo is not None: * c_lo = lo # <<<<<<<<<<<<<< * if hi is not None: * c_hi = hi */ __pyx_t_8 = __Pyx_PyInt_from_py_int64_t(__pyx_v_lo); if (unlikely((__pyx_t_8 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2786; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_c_lo = __pyx_t_8; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":2787 * if lo is not None: * c_lo = lo * if hi is not None: # <<<<<<<<<<<<<< * c_hi = hi * if start is None: */ __pyx_t_7 = (__pyx_v_hi != Py_None); __pyx_t_6 = (__pyx_t_7 != 0); if (__pyx_t_6) { /* "ga4py/ga.pyx":2788 * c_lo = lo * if hi is not None: * c_hi = hi # <<<<<<<<<<<<<< * if start is None: * start = 1 */ __pyx_t_8 = __Pyx_PyInt_from_py_int64_t(__pyx_v_hi); if (unlikely((__pyx_t_8 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2788; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_c_hi = __pyx_t_8; goto __pyx_L4; } __pyx_L4:; /* "ga4py/ga.pyx":2789 * if hi is not None: * c_hi = hi * if start is None: # <<<<<<<<<<<<<< * start = 1 * if inc is None: */ __pyx_t_6 = (__pyx_v_start == Py_None); __pyx_t_7 = (__pyx_t_6 != 0); if (__pyx_t_7) { /* "ga4py/ga.pyx":2790 * c_hi = hi * if start is None: * start = 1 # <<<<<<<<<<<<<< * if inc is None: * inc = 1 */ __Pyx_INCREF(__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_start, __pyx_int_1); goto __pyx_L5; } __pyx_L5:; /* "ga4py/ga.pyx":2791 * if start is None: * start = 1 * if inc is None: # <<<<<<<<<<<<<< * inc = 1 * vstart = _convert_multiplier(gtype, start, */ __pyx_t_7 = (__pyx_v_inc == Py_None); __pyx_t_6 = (__pyx_t_7 != 0); if (__pyx_t_6) { /* "ga4py/ga.pyx":2792 * start = 1 * if inc is None: * inc = 1 # <<<<<<<<<<<<<< * vstart = _convert_multiplier(gtype, start, * &istart, &lstart, &llstart, */ __Pyx_INCREF(__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_inc, __pyx_int_1); goto __pyx_L6; } __pyx_L6:; /* "ga4py/ga.pyx":2796 * &istart, &lstart, &llstart, * &fstart, &dstart, &ldstart, * &fcstart, &dcstart) # <<<<<<<<<<<<<< * vinc = _convert_multiplier(gtype, inc, * &iinc, &linc, &llinc, */ __pyx_v_vstart = __pyx_f_5ga4py_2ga__convert_multiplier(__pyx_v_gtype, __pyx_v_start, (&__pyx_v_istart), (&__pyx_v_lstart), (&__pyx_v_llstart), (&__pyx_v_fstart), (&__pyx_v_dstart), (&__pyx_v_ldstart), (&__pyx_v_fcstart), (&__pyx_v_dcstart)); /* "ga4py/ga.pyx":2800 * &iinc, &linc, &llinc, * &finc, &dinc, &ldinc, * &fcinc, &dcinc) # <<<<<<<<<<<<<< * GA_Patch_enum64(g_a, c_lo, c_hi, vstart, vinc) * */ __pyx_v_vinc = __pyx_f_5ga4py_2ga__convert_multiplier(__pyx_v_gtype, __pyx_v_inc, (&__pyx_v_iinc), (&__pyx_v_linc), (&__pyx_v_llinc), (&__pyx_v_finc), (&__pyx_v_dinc), (&__pyx_v_ldinc), (&__pyx_v_fcinc), (&__pyx_v_dcinc)); /* "ga4py/ga.pyx":2801 * &finc, &dinc, &ldinc, * &fcinc, &dcinc) * GA_Patch_enum64(g_a, c_lo, c_hi, vstart, vinc) # <<<<<<<<<<<<<< * * def pack(int g_src, int g_dst, int g_msk, lo=None, hi=None): */ GA_Patch_enum64(__pyx_v_g_a, __pyx_v_c_lo, __pyx_v_c_hi, __pyx_v_vstart, __pyx_v_vinc); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.enum", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XDECREF(__pyx_v_start); __Pyx_XDECREF(__pyx_v_inc); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_189pack(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_188pack[] = "pack(int g_src, int g_dst, int g_msk, lo=None, hi=None)\nThe pack subroutine is designed to compress the values in the source\n vector g_src into a smaller destination array g_dst based on the values\n in an integer mask array g_msk. The values lo and hi denote the range of\n elements that should be compressed and the number of values placed in the\n compressed array is returned. This operation is the complement of the\n ga.unpack operation. An example is shown below::\n\n icount = ga.pack(g_src, g_dst, g_msk, 1, n);\n # g_msk: 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0\n # g_src: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n # g_dst: 1 7 9 12 15 16\n # icount: 6\n\n This is a collective operation.\n\n :Parameters:\n g_src : int\n handle for source arrray\n g_dst : int\n handle for destination array\n g_msk : int\n handle for integer array representing mask\n lo : 1D array-like of integers\n low value of range on which operation is performed\n hi : 1D array-like of integers\n hi value of range on which operation is performed\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_189pack = {__Pyx_NAMESTR("pack"), (PyCFunction)__pyx_pw_5ga4py_2ga_189pack, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_188pack)}; static PyObject *__pyx_pw_5ga4py_2ga_189pack(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_src; int __pyx_v_g_dst; int __pyx_v_g_msk; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pack (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_src,&__pyx_n_s__g_dst,&__pyx_n_s__g_msk,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/ga.pyx":2803 * GA_Patch_enum64(g_a, c_lo, c_hi, vstart, vinc) * * def pack(int g_src, int g_dst, int g_msk, lo=None, hi=None): # <<<<<<<<<<<<<< * """The pack subroutine is designed to compress the values in the source * vector g_src into a smaller destination array g_dst based on the values */ values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_src)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_dst)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pack", 0, 3, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2803; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_msk)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pack", 0, 3, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2803; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pack") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2803; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_src = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_src == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2803; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_dst = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_dst == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2803; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_msk = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_g_msk == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2803; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[3]; __pyx_v_hi = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pack", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2803; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pack", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_188pack(__pyx_self, __pyx_v_g_src, __pyx_v_g_dst, __pyx_v_g_msk, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_188pack(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_src, int __pyx_v_g_dst, int __pyx_v_g_msk, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyArrayObject *__pyx_v_hi_nd = 0; CYTHON_UNUSED int64_t __pyx_v_c_lo; CYTHON_UNUSED int64_t __pyx_v_c_hi; int64_t __pyx_v_icount; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyArrayObject *__pyx_t_3 = NULL; long __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; int64_t __pyx_t_8; int64_t __pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pack", 0); __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; /* "ga4py/ga.pyx":2832 * * """ * cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_src)-1 # <<<<<<<<<<<<<< * cdef int64_t c_lo=0, c_hi=hi_nd[0], icount * if lo is not None: */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga_inquire_dims(__pyx_v_g_src, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { __pyx_v_hi_nd = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; } } __pyx_t_3 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":2833 * """ * cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_src)-1 * cdef int64_t c_lo=0, c_hi=hi_nd[0], icount # <<<<<<<<<<<<<< * if lo is not None: * c_lo = lo */ __pyx_v_c_lo = 0; __pyx_t_4 = 0; __pyx_t_5 = -1; if (__pyx_t_4 < 0) { __pyx_t_4 += __pyx_pybuffernd_hi_nd.diminfo[0].shape; if (unlikely(__pyx_t_4 < 0)) __pyx_t_5 = 0; } else if (unlikely(__pyx_t_4 >= __pyx_pybuffernd_hi_nd.diminfo[0].shape)) __pyx_t_5 = 0; if (unlikely(__pyx_t_5 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_c_hi = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_hi_nd.diminfo[0].strides)); /* "ga4py/ga.pyx":2834 * cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_src)-1 * cdef int64_t c_lo=0, c_hi=hi_nd[0], icount * if lo is not None: # <<<<<<<<<<<<<< * c_lo = lo * if hi is not None: */ __pyx_t_6 = (__pyx_v_lo != Py_None); __pyx_t_7 = (__pyx_t_6 != 0); if (__pyx_t_7) { /* "ga4py/ga.pyx":2835 * cdef int64_t c_lo=0, c_hi=hi_nd[0], icount * if lo is not None: * c_lo = lo # <<<<<<<<<<<<<< * if hi is not None: * c_hi = hi */ __pyx_t_8 = __Pyx_PyInt_from_py_int64_t(__pyx_v_lo); if (unlikely((__pyx_t_8 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_c_lo = __pyx_t_8; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":2836 * if lo is not None: * c_lo = lo * if hi is not None: # <<<<<<<<<<<<<< * c_hi = hi * GA_Pack64(g_src, g_dst, g_msk, lo, hi, &icount) */ __pyx_t_7 = (__pyx_v_hi != Py_None); __pyx_t_6 = (__pyx_t_7 != 0); if (__pyx_t_6) { /* "ga4py/ga.pyx":2837 * c_lo = lo * if hi is not None: * c_hi = hi # <<<<<<<<<<<<<< * GA_Pack64(g_src, g_dst, g_msk, lo, hi, &icount) * return icount */ __pyx_t_8 = __Pyx_PyInt_from_py_int64_t(__pyx_v_hi); if (unlikely((__pyx_t_8 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_c_hi = __pyx_t_8; goto __pyx_L4; } __pyx_L4:; /* "ga4py/ga.pyx":2838 * if hi is not None: * c_hi = hi * GA_Pack64(g_src, g_dst, g_msk, lo, hi, &icount) # <<<<<<<<<<<<<< * return icount * */ __pyx_t_8 = __Pyx_PyInt_from_py_int64_t(__pyx_v_lo); if (unlikely((__pyx_t_8 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = __Pyx_PyInt_from_py_int64_t(__pyx_v_hi); if (unlikely((__pyx_t_9 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} GA_Pack64(__pyx_v_g_src, __pyx_v_g_dst, __pyx_v_g_msk, __pyx_t_8, __pyx_t_9, (&__pyx_v_icount)); /* "ga4py/ga.pyx":2839 * c_hi = hi * GA_Pack64(g_src, g_dst, g_msk, lo, hi, &icount) * return icount # <<<<<<<<<<<<<< * * def periodic_acc(int g_a, buffer, lo=None, hi=None, alpha=None): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyInt_to_py_int64_t(__pyx_v_icount); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.pack", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_191periodic_acc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_190periodic_acc[] = "periodic_acc(int g_a, buffer, lo=None, hi=None, alpha=None)\nPeriodic version of ga.acc.\n\n The indices can extend beyond the array boundary/dimensions in which case\n the libray wraps them around.\n \n Combines data from buffer with data in the global array patch.\n \n The buffer array is assumed to be have the same number of\n dimensions as the global array. If the buffer is not contiguous, a\n contiguous copy will be made.\n \n global array section (lo[],hi[]) += alpha * buffer\n\n This is a one-sided and atomic operation.\n\n :Parameters:\n g_a : int\n the array handle\n buffer : array-like\n must be contiguous and have same number of elements as patch\n lo : 1D array-like of integers\n lower bound patch coordinates, inclusive\n hi : array-like of integers\n higher bound patch coordinates, exclusive\n alpha : object\n multiplier (converted to the appropriate type)\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_191periodic_acc = {__Pyx_NAMESTR("periodic_acc"), (PyCFunction)__pyx_pw_5ga4py_2ga_191periodic_acc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_190periodic_acc)}; static PyObject *__pyx_pw_5ga4py_2ga_191periodic_acc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_buffer = 0; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; PyObject *__pyx_v_alpha = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("periodic_acc (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__buffer,&__pyx_n_s__lo,&__pyx_n_s__hi,&__pyx_n_s__alpha,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/ga.pyx":2841 * return icount * * def periodic_acc(int g_a, buffer, lo=None, hi=None, alpha=None): # <<<<<<<<<<<<<< * """Periodic version of ga.acc. * */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("periodic_acc", 0, 2, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2841; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alpha); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "periodic_acc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2841; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2841; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_buffer = values[1]; __pyx_v_lo = values[2]; __pyx_v_hi = values[3]; __pyx_v_alpha = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("periodic_acc", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2841; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.periodic_acc", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_190periodic_acc(__pyx_self, __pyx_v_g_a, __pyx_v_buffer, __pyx_v_lo, __pyx_v_hi, __pyx_v_alpha); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_190periodic_acc(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_buffer, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyObject *__pyx_v_alpha) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; struct __pyx_opt_args_5ga4py_2ga__acc_common __pyx_t_2; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("periodic_acc", 0); /* "ga4py/ga.pyx":2870 * * """ * _acc_common(g_a, buffer, lo, hi, alpha, False, True) # <<<<<<<<<<<<<< * * def periodic_get(int g_a, lo=None, hi=None, np.ndarray buffer=None): */ __pyx_t_2.__pyx_n = 5; __pyx_t_2.lo = __pyx_v_lo; __pyx_t_2.hi = __pyx_v_hi; __pyx_t_2.alpha = __pyx_v_alpha; __pyx_t_2.nb = 0; __pyx_t_2.periodic = 1; __pyx_t_1 = __pyx_f_5ga4py_2ga__acc_common(__pyx_v_g_a, __pyx_v_buffer, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2870; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.periodic_acc", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_193periodic_get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_192periodic_get[] = "periodic_get(int g_a, lo=None, hi=None, ndarray buffer=None)\nPeriodic version of ga.get.\n \n The indices can extend beyond the array boundary/dimensions in which case\n the libray wraps them around.\n \n Copies data from global array section to the local array buffer.\n \n The local array is assumed to be have the same number of dimensions as the\n global array. Any detected inconsitencies/errors in the input arguments\n are fatal.\n\n This is a one-sided operation.\n\n :Parameters:\n g_a : int\n the array handle\n lo : 1D array-like of integers\n lower bound patch coordinates, inclusive\n hi : array-like of integers\n higher bound patch coordinates, exclusive\n buffer : array-like\n must be contiguous and have same number of elements as patch\n\n :returns: The local array buffer.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_193periodic_get = {__Pyx_NAMESTR("periodic_get"), (PyCFunction)__pyx_pw_5ga4py_2ga_193periodic_get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_192periodic_get)}; static PyObject *__pyx_pw_5ga4py_2ga_193periodic_get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; PyArrayObject *__pyx_v_buffer = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("periodic_get (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__lo,&__pyx_n_s__hi,&__pyx_n_s__buffer,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/ga.pyx":2872 * _acc_common(g_a, buffer, lo, hi, alpha, False, True) * * def periodic_get(int g_a, lo=None, hi=None, np.ndarray buffer=None): # <<<<<<<<<<<<<< * """Periodic version of ga.get. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = (PyObject *)((PyArrayObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "periodic_get") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2872; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2872; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; __pyx_v_buffer = ((PyArrayObject *)values[3]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("periodic_get", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2872; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.periodic_get", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_buffer), __pyx_ptype_5numpy_ndarray, 1, "buffer", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2872; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = __pyx_pf_5ga4py_2ga_192periodic_get(__pyx_self, __pyx_v_g_a, __pyx_v_lo, __pyx_v_hi, __pyx_v_buffer); goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_192periodic_get(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyArrayObject *__pyx_v_buffer) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; struct __pyx_opt_args_5ga4py_2ga__get_common __pyx_t_2; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("periodic_get", 0); /* "ga4py/ga.pyx":2899 * * """ * return _get_common(g_a, lo, hi, buffer, False, True) # <<<<<<<<<<<<<< * * def periodic_put(int g_a, buffer, lo=None, hi=None): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2.__pyx_n = 5; __pyx_t_2.lo = __pyx_v_lo; __pyx_t_2.hi = __pyx_v_hi; __pyx_t_2.buffer = __pyx_v_buffer; __pyx_t_2.nb = 0; __pyx_t_2.periodic = 1; __pyx_t_1 = __pyx_f_5ga4py_2ga__get_common(__pyx_v_g_a, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2899; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.periodic_get", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_195periodic_put(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_194periodic_put[] = "periodic_put(int g_a, buffer, lo=None, hi=None)\nPeriodic version of ga.put.\n\n The indices can extend beyond the array boundary/dimensions in which case\n the libray wraps them around.\n \n Copies data from local array buffer to the global array section.\n \n The local array is assumed to be have the same number of dimensions as the\n global array. Any detected inconsitencies/errors in input arguments are\n fatal.\n\n This is a one-sided operation. \n\n :Parameters:\n g_a : int\n the array handle\n buffer : array-like\n the data to put\n lo : 1D array-like of integers\n lower bound patch coordinates, inclusive\n hi : array-like of integers\n higher bound patch coordinates, exclusive\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_195periodic_put = {__Pyx_NAMESTR("periodic_put"), (PyCFunction)__pyx_pw_5ga4py_2ga_195periodic_put, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_194periodic_put)}; static PyObject *__pyx_pw_5ga4py_2ga_195periodic_put(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_buffer = 0; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("periodic_put (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__buffer,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/ga.pyx":2901 * return _get_common(g_a, lo, hi, buffer, False, True) * * def periodic_put(int g_a, buffer, lo=None, hi=None): # <<<<<<<<<<<<<< * """Periodic version of ga.put. * */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("periodic_put", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2901; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "periodic_put") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2901; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2901; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_buffer = values[1]; __pyx_v_lo = values[2]; __pyx_v_hi = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("periodic_put", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2901; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.periodic_put", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_194periodic_put(__pyx_self, __pyx_v_g_a, __pyx_v_buffer, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_194periodic_put(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_buffer, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; struct __pyx_opt_args_5ga4py_2ga__put_common __pyx_t_2; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("periodic_put", 0); /* "ga4py/ga.pyx":2926 * * """ * _put_common(g_a, buffer, lo, hi, False, True) # <<<<<<<<<<<<<< * * def pgroup_absolute_id(int pgroup, int pid): */ __pyx_t_2.__pyx_n = 4; __pyx_t_2.lo = __pyx_v_lo; __pyx_t_2.hi = __pyx_v_hi; __pyx_t_2.nb = 0; __pyx_t_2.periodic = 1; __pyx_t_1 = __pyx_f_5ga4py_2ga__put_common(__pyx_v_g_a, __pyx_v_buffer, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.periodic_put", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_197pgroup_absolute_id(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_196pgroup_absolute_id[] = "pgroup_absolute_id(int pgroup, int pid)\nTODO"; static PyMethodDef __pyx_mdef_5ga4py_2ga_197pgroup_absolute_id = {__Pyx_NAMESTR("pgroup_absolute_id"), (PyCFunction)__pyx_pw_5ga4py_2ga_197pgroup_absolute_id, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_196pgroup_absolute_id)}; static PyObject *__pyx_pw_5ga4py_2ga_197pgroup_absolute_id(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_pgroup; int __pyx_v_pid; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_absolute_id (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__pgroup,&__pyx_n_s__pid,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pid)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pgroup_absolute_id", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2928; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pgroup_absolute_id") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2928; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2928; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_pid = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_pid == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2928; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pgroup_absolute_id", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2928; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pgroup_absolute_id", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_196pgroup_absolute_id(__pyx_self, __pyx_v_pgroup, __pyx_v_pid); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2928 * _put_common(g_a, buffer, lo, hi, False, True) * * def pgroup_absolute_id(int pgroup, int pid): # <<<<<<<<<<<<<< * """TODO""" * return GA_Pgroup_absolute_id(pgroup, pid) */ static PyObject *__pyx_pf_5ga4py_2ga_196pgroup_absolute_id(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, int __pyx_v_pid) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_absolute_id", 0); /* "ga4py/ga.pyx":2930 * def pgroup_absolute_id(int pgroup, int pid): * """TODO""" * return GA_Pgroup_absolute_id(pgroup, pid) # <<<<<<<<<<<<<< * * def pgroup_brdcst(int pgroup, buffer, int root=0): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Pgroup_absolute_id(__pyx_v_pgroup, __pyx_v_pid)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2930; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.pgroup_absolute_id", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_199pgroup_brdcst(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_198pgroup_brdcst[] = "pgroup_brdcst(int pgroup, buffer, int root=0)\nBroadcast from process root to all other processes in the same group.\n\n If the buffer is not contiguous, an error is raised. This operation is\n provided only for convenience purposes: it is available regardless of the\n message-passing library that GA is running with.\n\n This is a collective operation. \n\n :Parameters:\n pgroup : int\n processor group handle\n buffer : array-like\n the message\n root : int\n the process which is sending\n\n :returns: The buffer in case a temporary was passed in.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_199pgroup_brdcst = {__Pyx_NAMESTR("pgroup_brdcst"), (PyCFunction)__pyx_pw_5ga4py_2ga_199pgroup_brdcst, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_198pgroup_brdcst)}; static PyObject *__pyx_pw_5ga4py_2ga_199pgroup_brdcst(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_pgroup; PyObject *__pyx_v_buffer = 0; int __pyx_v_root; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_brdcst (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__pgroup,&__pyx_n_s__buffer,&__pyx_n_s__root,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pgroup_brdcst", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2932; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__root); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pgroup_brdcst") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2932; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2932; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_buffer = values[1]; if (values[2]) { __pyx_v_root = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2932; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_root = ((int)0); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pgroup_brdcst", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2932; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pgroup_brdcst", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_198pgroup_brdcst(__pyx_self, __pyx_v_pgroup, __pyx_v_buffer, __pyx_v_root); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2932 * return GA_Pgroup_absolute_id(pgroup, pid) * * def pgroup_brdcst(int pgroup, buffer, int root=0): # <<<<<<<<<<<<<< * """Broadcast from process root to all other processes in the same group. * */ static PyObject *__pyx_pf_5ga4py_2ga_198pgroup_brdcst(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, PyObject *__pyx_v_buffer, int __pyx_v_root) { PyArrayObject *__pyx_v_buffer_nd = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_brdcst", 0); /* "ga4py/ga.pyx":2953 * """ * cdef np.ndarray buffer_nd * buffer_nd = np.asarray(buffer) # <<<<<<<<<<<<<< * if not buffer_nd.flags['C_CONTIGUOUS']: * raise ValueError, "the buffer must be contiguous" */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2953; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__asarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2953; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2953; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_buffer); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_buffer); __Pyx_GIVEREF(__pyx_v_buffer); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2953; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2953; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_buffer_nd = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":2954 * cdef np.ndarray buffer_nd * buffer_nd = np.asarray(buffer) * if not buffer_nd.flags['C_CONTIGUOUS']: # <<<<<<<<<<<<<< * raise ValueError, "the buffer must be contiguous" * #if buffer_nd.ndim != 1: */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer_nd), __pyx_n_s__flags); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyObject_GetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__C_CONTIGUOUS)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = ((!__pyx_t_4) != 0); if (__pyx_t_5) { /* "ga4py/ga.pyx":2955 * buffer_nd = np.asarray(buffer) * if not buffer_nd.flags['C_CONTIGUOUS']: * raise ValueError, "the buffer must be contiguous" # <<<<<<<<<<<<<< * #if buffer_nd.ndim != 1: * # raise ValueError, "the buffer must be one-dimensional" */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_15), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2955; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":2959 * # raise ValueError, "the buffer must be one-dimensional" * GA_Pgroup_brdcst(pgroup, buffer_nd.data, * buffer_nd.size*buffer_nd.itemsize, root) # <<<<<<<<<<<<<< * return buffer_nd * */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer_nd), __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer_nd), __pyx_n_s__itemsize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; GA_Pgroup_brdcst(__pyx_v_pgroup, __pyx_v_buffer_nd->data, __pyx_t_6, __pyx_v_root); /* "ga4py/ga.pyx":2960 * GA_Pgroup_brdcst(pgroup, buffer_nd.data, * buffer_nd.size*buffer_nd.itemsize, root) * return buffer_nd # <<<<<<<<<<<<<< * * def pgroup_create(list): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_buffer_nd)); __pyx_r = ((PyObject *)__pyx_v_buffer_nd); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.pgroup_brdcst", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_buffer_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_201pgroup_create(PyObject *__pyx_self, PyObject *__pyx_v_list); /*proto*/ static char __pyx_doc_5ga4py_2ga_200pgroup_create[] = "pgroup_create(list)\nCreates a processor group.\n \n At present, it must be invoked by all processors in the current default\n processor group. The list of processors use the indexing scheme of the\n default processor group. If the default processor group is the world\n group, then these indices are the usual processor indices. This function\n returns a process group handle that can be used to reference this group by\n other functions.\n\n This is a collective operation on the default processor group. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_201pgroup_create = {__Pyx_NAMESTR("pgroup_create"), (PyCFunction)__pyx_pw_5ga4py_2ga_201pgroup_create, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_200pgroup_create)}; static PyObject *__pyx_pw_5ga4py_2ga_201pgroup_create(PyObject *__pyx_self, PyObject *__pyx_v_list) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_create (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_200pgroup_create(__pyx_self, ((PyObject *)__pyx_v_list)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2962 * return buffer_nd * * def pgroup_create(list): # <<<<<<<<<<<<<< * """Creates a processor group. * */ static PyObject *__pyx_pf_5ga4py_2ga_200pgroup_create(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_list) { PyArrayObject *__pyx_v_list_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_list_nd; __Pyx_Buffer __pyx_pybuffer_list_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; Py_ssize_t __pyx_t_6; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_create", 0); __pyx_pybuffer_list_nd.pybuffer.buf = NULL; __pyx_pybuffer_list_nd.refcount = 0; __pyx_pybuffernd_list_nd.data = NULL; __pyx_pybuffernd_list_nd.rcbuffer = &__pyx_pybuffer_list_nd; /* "ga4py/ga.pyx":2976 * """ * cdef np.ndarray[np.int32_t, ndim=1] list_nd * list_nd = _inta32(list) # <<<<<<<<<<<<<< * return GA_Pgroup_create(list_nd.data, len(list_nd)) * */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta32(__pyx_v_list)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_list_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_list_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_list_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_list_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_list_nd.diminfo[0].strides = __pyx_pybuffernd_list_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_list_nd.diminfo[0].shape = __pyx_pybuffernd_list_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_list_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":2977 * cdef np.ndarray[np.int32_t, ndim=1] list_nd * list_nd = _inta32(list) * return GA_Pgroup_create(list_nd.data, len(list_nd)) # <<<<<<<<<<<<<< * * def pgroup_destroy(int pgroup): */ __Pyx_XDECREF(__pyx_r); __pyx_t_6 = PyObject_Length(((PyObject *)__pyx_v_list_nd)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2977; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = PyInt_FromLong(GA_Pgroup_create(((int *)__pyx_v_list_nd->data), __pyx_t_6)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2977; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_list_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.pgroup_create", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_list_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_list_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_203pgroup_destroy(PyObject *__pyx_self, PyObject *__pyx_arg_pgroup); /*proto*/ static char __pyx_doc_5ga4py_2ga_202pgroup_destroy[] = "pgroup_destroy(int pgroup)\nFrees up a processor group handle.\n \n This is a collective operation on the default processor group.\n\n :returns: True if the handle was previously active. False if the handle was not previously active.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_203pgroup_destroy = {__Pyx_NAMESTR("pgroup_destroy"), (PyCFunction)__pyx_pw_5ga4py_2ga_203pgroup_destroy, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_202pgroup_destroy)}; static PyObject *__pyx_pw_5ga4py_2ga_203pgroup_destroy(PyObject *__pyx_self, PyObject *__pyx_arg_pgroup) { int __pyx_v_pgroup; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_destroy (wrapper)", 0); assert(__pyx_arg_pgroup); { __pyx_v_pgroup = __Pyx_PyInt_AsInt(__pyx_arg_pgroup); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pgroup_destroy", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_202pgroup_destroy(__pyx_self, ((int)__pyx_v_pgroup)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2979 * return GA_Pgroup_create(list_nd.data, len(list_nd)) * * def pgroup_destroy(int pgroup): # <<<<<<<<<<<<<< * """Frees up a processor group handle. * */ static PyObject *__pyx_pf_5ga4py_2ga_202pgroup_destroy(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_destroy", 0); /* "ga4py/ga.pyx":2987 * * """ * if 0 == GA_Pgroup_destroy(pgroup): # <<<<<<<<<<<<<< * return False * return True */ __pyx_t_1 = ((0 == GA_Pgroup_destroy(__pyx_v_pgroup)) != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":2988 * """ * if 0 == GA_Pgroup_destroy(pgroup): * return False # <<<<<<<<<<<<<< * return True * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2988; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":2989 * if 0 == GA_Pgroup_destroy(pgroup): * return False * return True # <<<<<<<<<<<<<< * * def pgroup_get_default(): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2989; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.ga.pgroup_destroy", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_205pgroup_get_default(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_204pgroup_get_default[] = "pgroup_get_default()\nReturns a handle to the default processor group.\n\n The return value can then be used to create a global array using one of\n the ga.create or ga.set_pgroup calls.\n\n This is a local operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_205pgroup_get_default = {__Pyx_NAMESTR("pgroup_get_default"), (PyCFunction)__pyx_pw_5ga4py_2ga_205pgroup_get_default, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_204pgroup_get_default)}; static PyObject *__pyx_pw_5ga4py_2ga_205pgroup_get_default(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_get_default (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_204pgroup_get_default(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":2991 * return True * * def pgroup_get_default(): # <<<<<<<<<<<<<< * """Returns a handle to the default processor group. * */ static PyObject *__pyx_pf_5ga4py_2ga_204pgroup_get_default(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_get_default", 0); /* "ga4py/ga.pyx":3000 * * """ * return GA_Pgroup_get_default() # <<<<<<<<<<<<<< * * def pgroup_get_mirror(): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Pgroup_get_default()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3000; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.pgroup_get_default", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_207pgroup_get_mirror(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_206pgroup_get_mirror[] = "pgroup_get_mirror()\nReturns a handle to the mirrored processor group.\n\n The return value can then be used to create a global array using one of\n the ga.create or ga.set_pgroup calls.\n\n This is a local operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_207pgroup_get_mirror = {__Pyx_NAMESTR("pgroup_get_mirror"), (PyCFunction)__pyx_pw_5ga4py_2ga_207pgroup_get_mirror, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_206pgroup_get_mirror)}; static PyObject *__pyx_pw_5ga4py_2ga_207pgroup_get_mirror(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_get_mirror (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_206pgroup_get_mirror(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3002 * return GA_Pgroup_get_default() * * def pgroup_get_mirror(): # <<<<<<<<<<<<<< * """Returns a handle to the mirrored processor group. * */ static PyObject *__pyx_pf_5ga4py_2ga_206pgroup_get_mirror(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_get_mirror", 0); /* "ga4py/ga.pyx":3011 * * """ * return GA_Pgroup_get_mirror() # <<<<<<<<<<<<<< * * def pgroup_get_world(): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Pgroup_get_mirror()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3011; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.pgroup_get_mirror", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_209pgroup_get_world(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_208pgroup_get_world[] = "pgroup_get_world()\nReturns a handle to the world processor group.\n \n The return value can then be used to create a global array using one of\n the ga.create or ga.set_pgroup calls.\n\n This is a local operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_209pgroup_get_world = {__Pyx_NAMESTR("pgroup_get_world"), (PyCFunction)__pyx_pw_5ga4py_2ga_209pgroup_get_world, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_208pgroup_get_world)}; static PyObject *__pyx_pw_5ga4py_2ga_209pgroup_get_world(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_get_world (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_208pgroup_get_world(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3013 * return GA_Pgroup_get_mirror() * * def pgroup_get_world(): # <<<<<<<<<<<<<< * """Returns a handle to the world processor group. * */ static PyObject *__pyx_pf_5ga4py_2ga_208pgroup_get_world(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_get_world", 0); /* "ga4py/ga.pyx":3022 * * """ * return GA_Pgroup_get_world() # <<<<<<<<<<<<<< * * def pgroup_gop(int pgroup, X, char *op): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Pgroup_get_world()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3022; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.pgroup_get_world", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_211pgroup_gop(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_210pgroup_gop[] = "pgroup_gop(int pgroup, X, char *op)\nGlobal operation.\n\n X(1:N) is a vector present on each process in the group. gop 'sums'\n elements of X accross all nodes using the commutative operator op. The\n result is broadcast to all nodes. Supported operations include '+', '*',\n 'max', 'min', 'absmax', 'absmin'. The use of lowerecase for operators is\n necessary.\n\n X must be a contiguous array-like. X is not guaranteed to be modified\n in-place so use as:\n\n >>> value = ga.gop((1,2,3), \"+\")\n\n This operation is provided only for convenience purposes: it is available\n regardless of the message-passing library that GA is running with.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_211pgroup_gop = {__Pyx_NAMESTR("pgroup_gop"), (PyCFunction)__pyx_pw_5ga4py_2ga_211pgroup_gop, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_210pgroup_gop)}; static PyObject *__pyx_pw_5ga4py_2ga_211pgroup_gop(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_pgroup; PyObject *__pyx_v_X = 0; char *__pyx_v_op; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_gop (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__pgroup,&__pyx_n_s__X,&__pyx_n_s__op,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__X)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pgroup_gop", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__op)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pgroup_gop", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pgroup_gop") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_X = values[1]; __pyx_v_op = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_op) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pgroup_gop", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pgroup_gop", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_210pgroup_gop(__pyx_self, __pyx_v_pgroup, __pyx_v_X, __pyx_v_op); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3024 * return GA_Pgroup_get_world() * * def pgroup_gop(int pgroup, X, char *op): # <<<<<<<<<<<<<< * """Global operation. * */ static PyObject *__pyx_pf_5ga4py_2ga_210pgroup_gop(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, PyObject *__pyx_v_X, char *__pyx_v_op) { PyArrayObject *__pyx_v_X_nd = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; Py_ssize_t __pyx_t_6; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_gop", 0); /* "ga4py/ga.pyx":3044 * * """ * cdef np.ndarray X_nd = np.asarray(X) # <<<<<<<<<<<<<< * if not X_nd.flags['C_CONTIGUOUS']: * raise ValueError, "X must be contiguous" */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__asarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_X); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_X); __Pyx_GIVEREF(__pyx_v_X); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_X_nd = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":3045 * """ * cdef np.ndarray X_nd = np.asarray(X) * if not X_nd.flags['C_CONTIGUOUS']: # <<<<<<<<<<<<<< * raise ValueError, "X must be contiguous" * if X_nd.dtype == np.intc: */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__flags); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3045; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyObject_GetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__C_CONTIGUOUS)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3045; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3045; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = ((!__pyx_t_4) != 0); if (__pyx_t_5) { /* "ga4py/ga.pyx":3046 * cdef np.ndarray X_nd = np.asarray(X) * if not X_nd.flags['C_CONTIGUOUS']: * raise ValueError, "X must be contiguous" # <<<<<<<<<<<<<< * if X_nd.dtype == np.intc: * GA_Pgroup_igop(pgroup, X_nd.data, len(X_nd), op) */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_30), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3046; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":3047 * if not X_nd.flags['C_CONTIGUOUS']: * raise ValueError, "X must be contiguous" * if X_nd.dtype == np.intc: # <<<<<<<<<<<<<< * GA_Pgroup_igop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.long: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3047; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3047; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__intc); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3047; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3047; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3047; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_5) { /* "ga4py/ga.pyx":3048 * raise ValueError, "X must be contiguous" * if X_nd.dtype == np.intc: * GA_Pgroup_igop(pgroup, X_nd.data, len(X_nd), op) # <<<<<<<<<<<<<< * elif X_nd.dtype == np.long: * GA_Pgroup_lgop(pgroup, X_nd.data, len(X_nd), op) */ __pyx_t_6 = PyObject_Length(((PyObject *)__pyx_v_X_nd)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3048; __pyx_clineno = __LINE__; goto __pyx_L1_error;} GA_Pgroup_igop(__pyx_v_pgroup, ((int *)__pyx_v_X_nd->data), __pyx_t_6, __pyx_v_op); goto __pyx_L4; } /* "ga4py/ga.pyx":3049 * if X_nd.dtype == np.intc: * GA_Pgroup_igop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.long: # <<<<<<<<<<<<<< * GA_Pgroup_lgop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.longlong: */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3049; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3049; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__long); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3049; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3049; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3049; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_5) { /* "ga4py/ga.pyx":3050 * GA_Pgroup_igop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.long: * GA_Pgroup_lgop(pgroup, X_nd.data, len(X_nd), op) # <<<<<<<<<<<<<< * elif X_nd.dtype == np.longlong: * GA_Pgroup_llgop(pgroup, X_nd.data, len(X_nd), op) */ __pyx_t_6 = PyObject_Length(((PyObject *)__pyx_v_X_nd)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3050; __pyx_clineno = __LINE__; goto __pyx_L1_error;} GA_Pgroup_lgop(__pyx_v_pgroup, ((long *)__pyx_v_X_nd->data), __pyx_t_6, __pyx_v_op); goto __pyx_L4; } /* "ga4py/ga.pyx":3051 * elif X_nd.dtype == np.long: * GA_Pgroup_lgop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.longlong: # <<<<<<<<<<<<<< * GA_Pgroup_llgop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.single: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3051; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3051; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__longlong); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3051; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3051; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3051; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_5) { /* "ga4py/ga.pyx":3052 * GA_Pgroup_lgop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.longlong: * GA_Pgroup_llgop(pgroup, X_nd.data, len(X_nd), op) # <<<<<<<<<<<<<< * elif X_nd.dtype == np.single: * GA_Pgroup_fgop(pgroup, X_nd.data, len(X_nd), op) */ __pyx_t_6 = PyObject_Length(((PyObject *)__pyx_v_X_nd)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3052; __pyx_clineno = __LINE__; goto __pyx_L1_error;} GA_Pgroup_llgop(__pyx_v_pgroup, ((PY_LONG_LONG *)__pyx_v_X_nd->data), __pyx_t_6, __pyx_v_op); goto __pyx_L4; } /* "ga4py/ga.pyx":3053 * elif X_nd.dtype == np.longlong: * GA_Pgroup_llgop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.single: # <<<<<<<<<<<<<< * GA_Pgroup_fgop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.double: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3053; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3053; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__single); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3053; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3053; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3053; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_5) { /* "ga4py/ga.pyx":3054 * GA_Pgroup_llgop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.single: * GA_Pgroup_fgop(pgroup, X_nd.data, len(X_nd), op) # <<<<<<<<<<<<<< * elif X_nd.dtype == np.double: * GA_Pgroup_dgop(pgroup, X_nd.data, len(X_nd), op) */ __pyx_t_6 = PyObject_Length(((PyObject *)__pyx_v_X_nd)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3054; __pyx_clineno = __LINE__; goto __pyx_L1_error;} GA_Pgroup_fgop(__pyx_v_pgroup, ((float *)__pyx_v_X_nd->data), __pyx_t_6, __pyx_v_op); goto __pyx_L4; } /* "ga4py/ga.pyx":3055 * elif X_nd.dtype == np.single: * GA_Pgroup_fgop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.double: # <<<<<<<<<<<<<< * GA_Pgroup_dgop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.complex64: */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3055; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3055; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3055; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3055; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3055; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_5) { /* "ga4py/ga.pyx":3056 * GA_Pgroup_fgop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.double: * GA_Pgroup_dgop(pgroup, X_nd.data, len(X_nd), op) # <<<<<<<<<<<<<< * elif X_nd.dtype == np.complex64: * GA_Pgroup_cgop(pgroup, X_nd.data, len(X_nd), op) */ __pyx_t_6 = PyObject_Length(((PyObject *)__pyx_v_X_nd)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3056; __pyx_clineno = __LINE__; goto __pyx_L1_error;} GA_Pgroup_dgop(__pyx_v_pgroup, ((double *)__pyx_v_X_nd->data), __pyx_t_6, __pyx_v_op); goto __pyx_L4; } /* "ga4py/ga.pyx":3057 * elif X_nd.dtype == np.double: * GA_Pgroup_dgop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.complex64: # <<<<<<<<<<<<<< * GA_Pgroup_cgop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.complex128: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3057; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3057; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__complex64); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3057; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3057; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3057; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_5) { /* "ga4py/ga.pyx":3058 * GA_Pgroup_dgop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.complex64: * GA_Pgroup_cgop(pgroup, X_nd.data, len(X_nd), op) # <<<<<<<<<<<<<< * elif X_nd.dtype == np.complex128: * GA_Pgroup_zgop(pgroup, X_nd.data, len(X_nd), op) */ __pyx_t_6 = PyObject_Length(((PyObject *)__pyx_v_X_nd)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3058; __pyx_clineno = __LINE__; goto __pyx_L1_error;} GA_Pgroup_cgop(__pyx_v_pgroup, ((SingleComplex *)__pyx_v_X_nd->data), __pyx_t_6, __pyx_v_op); goto __pyx_L4; } /* "ga4py/ga.pyx":3059 * elif X_nd.dtype == np.complex64: * GA_Pgroup_cgop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.complex128: # <<<<<<<<<<<<<< * GA_Pgroup_zgop(pgroup, X_nd.data, len(X_nd), op) * else: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3059; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3059; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__complex128); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3059; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3059; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3059; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_5) { /* "ga4py/ga.pyx":3060 * GA_Pgroup_cgop(pgroup, X_nd.data, len(X_nd), op) * elif X_nd.dtype == np.complex128: * GA_Pgroup_zgop(pgroup, X_nd.data, len(X_nd), op) # <<<<<<<<<<<<<< * else: * raise TypeError, "type not supported by ga.pgroup_gop %s" % X_nd.dtype */ __pyx_t_6 = PyObject_Length(((PyObject *)__pyx_v_X_nd)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3060; __pyx_clineno = __LINE__; goto __pyx_L1_error;} GA_Pgroup_zgop(__pyx_v_pgroup, ((DoubleComplex *)__pyx_v_X_nd->data), __pyx_t_6, __pyx_v_op); goto __pyx_L4; } /*else*/ { /* "ga4py/ga.pyx":3062 * GA_Pgroup_zgop(pgroup, X_nd.data, len(X_nd), op) * else: * raise TypeError, "type not supported by ga.pgroup_gop %s" % X_nd.dtype # <<<<<<<<<<<<<< * return X_nd * */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_X_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3062; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_37), __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3062; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_t_2), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3062; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L4:; /* "ga4py/ga.pyx":3063 * else: * raise TypeError, "type not supported by ga.pgroup_gop %s" % X_nd.dtype * return X_nd # <<<<<<<<<<<<<< * * def pgroup_gop_add(int pgroup, X): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_X_nd)); __pyx_r = ((PyObject *)__pyx_v_X_nd); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.pgroup_gop", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_X_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_213pgroup_gop_add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_212pgroup_gop_add[] = "pgroup_gop_add(int pgroup, X)"; static PyMethodDef __pyx_mdef_5ga4py_2ga_213pgroup_gop_add = {__Pyx_NAMESTR("pgroup_gop_add"), (PyCFunction)__pyx_pw_5ga4py_2ga_213pgroup_gop_add, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_212pgroup_gop_add)}; static PyObject *__pyx_pw_5ga4py_2ga_213pgroup_gop_add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_pgroup; PyObject *__pyx_v_X = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_gop_add (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__pgroup,&__pyx_n_s__X,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__X)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pgroup_gop_add", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3065; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pgroup_gop_add") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3065; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3065; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_X = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pgroup_gop_add", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3065; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pgroup_gop_add", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_212pgroup_gop_add(__pyx_self, __pyx_v_pgroup, __pyx_v_X); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3065 * return X_nd * * def pgroup_gop_add(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "+") * */ static PyObject *__pyx_pf_5ga4py_2ga_212pgroup_gop_add(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, PyObject *__pyx_v_X) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_gop_add", 0); /* "ga4py/ga.pyx":3066 * * def pgroup_gop_add(int pgroup, X): * return pgroup_gop(pgroup, X, "+") # <<<<<<<<<<<<<< * * def pgroup_gop_multiply(int pgroup, X): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__pgroup_gop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3066; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyInt_FromLong(__pyx_v_pgroup); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3066; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3066; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_X); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_X); __Pyx_GIVEREF(__pyx_v_X); __Pyx_INCREF(((PyObject *)__pyx_kp_s_32)); PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_kp_s_32)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_32)); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3066; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.pgroup_gop_add", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_215pgroup_gop_multiply(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_214pgroup_gop_multiply[] = "pgroup_gop_multiply(int pgroup, X)"; static PyMethodDef __pyx_mdef_5ga4py_2ga_215pgroup_gop_multiply = {__Pyx_NAMESTR("pgroup_gop_multiply"), (PyCFunction)__pyx_pw_5ga4py_2ga_215pgroup_gop_multiply, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_214pgroup_gop_multiply)}; static PyObject *__pyx_pw_5ga4py_2ga_215pgroup_gop_multiply(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_pgroup; PyObject *__pyx_v_X = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_gop_multiply (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__pgroup,&__pyx_n_s__X,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__X)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pgroup_gop_multiply", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3068; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pgroup_gop_multiply") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3068; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3068; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_X = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pgroup_gop_multiply", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3068; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pgroup_gop_multiply", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_214pgroup_gop_multiply(__pyx_self, __pyx_v_pgroup, __pyx_v_X); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3068 * return pgroup_gop(pgroup, X, "+") * * def pgroup_gop_multiply(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "*") * */ static PyObject *__pyx_pf_5ga4py_2ga_214pgroup_gop_multiply(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, PyObject *__pyx_v_X) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_gop_multiply", 0); /* "ga4py/ga.pyx":3069 * * def pgroup_gop_multiply(int pgroup, X): * return pgroup_gop(pgroup, X, "*") # <<<<<<<<<<<<<< * * def pgroup_gop_max(int pgroup, X): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__pgroup_gop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3069; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyInt_FromLong(__pyx_v_pgroup); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3069; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3069; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_X); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_X); __Pyx_GIVEREF(__pyx_v_X); __Pyx_INCREF(((PyObject *)__pyx_kp_s_33)); PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_kp_s_33)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_33)); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3069; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.pgroup_gop_multiply", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_217pgroup_gop_max(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_216pgroup_gop_max[] = "pgroup_gop_max(int pgroup, X)"; static PyMethodDef __pyx_mdef_5ga4py_2ga_217pgroup_gop_max = {__Pyx_NAMESTR("pgroup_gop_max"), (PyCFunction)__pyx_pw_5ga4py_2ga_217pgroup_gop_max, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_216pgroup_gop_max)}; static PyObject *__pyx_pw_5ga4py_2ga_217pgroup_gop_max(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_pgroup; PyObject *__pyx_v_X = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_gop_max (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__pgroup,&__pyx_n_s__X,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__X)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pgroup_gop_max", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3071; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pgroup_gop_max") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3071; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3071; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_X = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pgroup_gop_max", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3071; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pgroup_gop_max", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_216pgroup_gop_max(__pyx_self, __pyx_v_pgroup, __pyx_v_X); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3071 * return pgroup_gop(pgroup, X, "*") * * def pgroup_gop_max(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "max") * */ static PyObject *__pyx_pf_5ga4py_2ga_216pgroup_gop_max(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, PyObject *__pyx_v_X) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_gop_max", 0); /* "ga4py/ga.pyx":3072 * * def pgroup_gop_max(int pgroup, X): * return pgroup_gop(pgroup, X, "max") # <<<<<<<<<<<<<< * * def pgroup_gop_min(int pgroup, X): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__pgroup_gop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3072; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyInt_FromLong(__pyx_v_pgroup); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3072; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3072; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_X); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_X); __Pyx_GIVEREF(__pyx_v_X); __Pyx_INCREF(((PyObject *)__pyx_n_s__max)); PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_n_s__max)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__max)); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3072; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.pgroup_gop_max", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_219pgroup_gop_min(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_218pgroup_gop_min[] = "pgroup_gop_min(int pgroup, X)"; static PyMethodDef __pyx_mdef_5ga4py_2ga_219pgroup_gop_min = {__Pyx_NAMESTR("pgroup_gop_min"), (PyCFunction)__pyx_pw_5ga4py_2ga_219pgroup_gop_min, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_218pgroup_gop_min)}; static PyObject *__pyx_pw_5ga4py_2ga_219pgroup_gop_min(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_pgroup; PyObject *__pyx_v_X = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_gop_min (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__pgroup,&__pyx_n_s__X,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__X)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pgroup_gop_min", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3074; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pgroup_gop_min") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3074; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3074; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_X = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pgroup_gop_min", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3074; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pgroup_gop_min", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_218pgroup_gop_min(__pyx_self, __pyx_v_pgroup, __pyx_v_X); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3074 * return pgroup_gop(pgroup, X, "max") * * def pgroup_gop_min(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "min") * */ static PyObject *__pyx_pf_5ga4py_2ga_218pgroup_gop_min(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, PyObject *__pyx_v_X) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_gop_min", 0); /* "ga4py/ga.pyx":3075 * * def pgroup_gop_min(int pgroup, X): * return pgroup_gop(pgroup, X, "min") # <<<<<<<<<<<<<< * * def pgroup_gop_absmax(int pgroup, X): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__pgroup_gop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3075; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyInt_FromLong(__pyx_v_pgroup); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3075; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3075; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_X); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_X); __Pyx_GIVEREF(__pyx_v_X); __Pyx_INCREF(((PyObject *)__pyx_n_s__min)); PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_n_s__min)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__min)); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3075; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.pgroup_gop_min", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_221pgroup_gop_absmax(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_220pgroup_gop_absmax[] = "pgroup_gop_absmax(int pgroup, X)"; static PyMethodDef __pyx_mdef_5ga4py_2ga_221pgroup_gop_absmax = {__Pyx_NAMESTR("pgroup_gop_absmax"), (PyCFunction)__pyx_pw_5ga4py_2ga_221pgroup_gop_absmax, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_220pgroup_gop_absmax)}; static PyObject *__pyx_pw_5ga4py_2ga_221pgroup_gop_absmax(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_pgroup; PyObject *__pyx_v_X = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_gop_absmax (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__pgroup,&__pyx_n_s__X,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__X)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pgroup_gop_absmax", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3077; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pgroup_gop_absmax") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3077; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3077; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_X = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pgroup_gop_absmax", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3077; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pgroup_gop_absmax", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_220pgroup_gop_absmax(__pyx_self, __pyx_v_pgroup, __pyx_v_X); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3077 * return pgroup_gop(pgroup, X, "min") * * def pgroup_gop_absmax(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "absmax") * */ static PyObject *__pyx_pf_5ga4py_2ga_220pgroup_gop_absmax(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, PyObject *__pyx_v_X) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_gop_absmax", 0); /* "ga4py/ga.pyx":3078 * * def pgroup_gop_absmax(int pgroup, X): * return pgroup_gop(pgroup, X, "absmax") # <<<<<<<<<<<<<< * * def pgroup_gop_absmin(int pgroup, X): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__pgroup_gop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3078; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyInt_FromLong(__pyx_v_pgroup); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3078; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3078; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_X); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_X); __Pyx_GIVEREF(__pyx_v_X); __Pyx_INCREF(((PyObject *)__pyx_n_s__absmax)); PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_n_s__absmax)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__absmax)); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3078; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.pgroup_gop_absmax", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_223pgroup_gop_absmin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_222pgroup_gop_absmin[] = "pgroup_gop_absmin(int pgroup, X)"; static PyMethodDef __pyx_mdef_5ga4py_2ga_223pgroup_gop_absmin = {__Pyx_NAMESTR("pgroup_gop_absmin"), (PyCFunction)__pyx_pw_5ga4py_2ga_223pgroup_gop_absmin, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_222pgroup_gop_absmin)}; static PyObject *__pyx_pw_5ga4py_2ga_223pgroup_gop_absmin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_pgroup; PyObject *__pyx_v_X = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_gop_absmin (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__pgroup,&__pyx_n_s__X,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__X)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pgroup_gop_absmin", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3080; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pgroup_gop_absmin") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3080; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3080; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_X = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pgroup_gop_absmin", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3080; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pgroup_gop_absmin", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_222pgroup_gop_absmin(__pyx_self, __pyx_v_pgroup, __pyx_v_X); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3080 * return pgroup_gop(pgroup, X, "absmax") * * def pgroup_gop_absmin(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "absmin") * */ static PyObject *__pyx_pf_5ga4py_2ga_222pgroup_gop_absmin(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, PyObject *__pyx_v_X) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_gop_absmin", 0); /* "ga4py/ga.pyx":3081 * * def pgroup_gop_absmin(int pgroup, X): * return pgroup_gop(pgroup, X, "absmin") # <<<<<<<<<<<<<< * * def pgroup_nnodes(int pgroup=-1): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__pgroup_gop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3081; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyInt_FromLong(__pyx_v_pgroup); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3081; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3081; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_X); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_X); __Pyx_GIVEREF(__pyx_v_X); __Pyx_INCREF(((PyObject *)__pyx_n_s__absmin)); PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_n_s__absmin)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__absmin)); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3081; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.pgroup_gop_absmin", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_225pgroup_nnodes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_224pgroup_nnodes[] = "pgroup_nnodes(int pgroup=-1)\nReturns the number of processors contained in the group specified by\n pgroup.\n\n This is a local local operation. \n\n :Parameters:\n pgroup : int\n the group handle\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_225pgroup_nnodes = {__Pyx_NAMESTR("pgroup_nnodes"), (PyCFunction)__pyx_pw_5ga4py_2ga_225pgroup_nnodes, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_224pgroup_nnodes)}; static PyObject *__pyx_pw_5ga4py_2ga_225pgroup_nnodes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_pgroup; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_nnodes (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__pgroup,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup); if (value) { values[0] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pgroup_nnodes") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3083; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } } if (values[0]) { __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3083; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_pgroup = ((int)-1); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pgroup_nnodes", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3083; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pgroup_nnodes", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_224pgroup_nnodes(__pyx_self, __pyx_v_pgroup); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3083 * return pgroup_gop(pgroup, X, "absmin") * * def pgroup_nnodes(int pgroup=-1): # <<<<<<<<<<<<<< * """Returns the number of processors contained in the group specified by * pgroup. */ static PyObject *__pyx_pf_5ga4py_2ga_224pgroup_nnodes(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_nnodes", 0); /* "ga4py/ga.pyx":3094 * * """ * if pgroup < 0: # <<<<<<<<<<<<<< * pgroup = pgroup_get_default() * return GA_Pgroup_nnodes(pgroup) */ __pyx_t_1 = ((__pyx_v_pgroup < 0) != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":3095 * """ * if pgroup < 0: * pgroup = pgroup_get_default() # <<<<<<<<<<<<<< * return GA_Pgroup_nnodes(pgroup) * */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__pgroup_get_default); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3095; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3095; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyInt_AsInt(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3095; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_pgroup = __pyx_t_4; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":3096 * if pgroup < 0: * pgroup = pgroup_get_default() * return GA_Pgroup_nnodes(pgroup) # <<<<<<<<<<<<<< * * def pgroup_nodeid(int pgroup=-1): */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = PyInt_FromLong(GA_Pgroup_nnodes(__pyx_v_pgroup)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3096; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.pgroup_nnodes", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_227pgroup_nodeid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_226pgroup_nodeid[] = "pgroup_nodeid(int pgroup=-1)\nReturns the relative index of the processor in the processor group\n specified by pgroup.\n \n This index will generally differ from the absolute processor index\n returned by ga.nodeid if the processor group is not the world group.\n\n This is a local operation. \n\n :Parameters:\n pgroup : int\n the group handle\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_227pgroup_nodeid = {__Pyx_NAMESTR("pgroup_nodeid"), (PyCFunction)__pyx_pw_5ga4py_2ga_227pgroup_nodeid, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_226pgroup_nodeid)}; static PyObject *__pyx_pw_5ga4py_2ga_227pgroup_nodeid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_pgroup; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_nodeid (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__pgroup,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup); if (value) { values[0] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pgroup_nodeid") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3098; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } } if (values[0]) { __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3098; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_pgroup = ((int)-1); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pgroup_nodeid", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3098; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pgroup_nodeid", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_226pgroup_nodeid(__pyx_self, __pyx_v_pgroup); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3098 * return GA_Pgroup_nnodes(pgroup) * * def pgroup_nodeid(int pgroup=-1): # <<<<<<<<<<<<<< * """Returns the relative index of the processor in the processor group * specified by pgroup. */ static PyObject *__pyx_pf_5ga4py_2ga_226pgroup_nodeid(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_nodeid", 0); /* "ga4py/ga.pyx":3112 * * """ * if pgroup < 0: # <<<<<<<<<<<<<< * pgroup = pgroup_get_default() * return GA_Pgroup_nodeid(pgroup) */ __pyx_t_1 = ((__pyx_v_pgroup < 0) != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":3113 * """ * if pgroup < 0: * pgroup = pgroup_get_default() # <<<<<<<<<<<<<< * return GA_Pgroup_nodeid(pgroup) * */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__pgroup_get_default); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyInt_AsInt(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_pgroup = __pyx_t_4; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":3114 * if pgroup < 0: * pgroup = pgroup_get_default() * return GA_Pgroup_nodeid(pgroup) # <<<<<<<<<<<<<< * * def pgroup_set_default(int pgroup=-1): */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = PyInt_FromLong(GA_Pgroup_nodeid(__pyx_v_pgroup)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.pgroup_nodeid", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_229pgroup_set_default(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_228pgroup_set_default[] = "pgroup_set_default(int pgroup=-1)\nResets the default processor group on a collection of processors.\n \n All processors in the group referenced by p_handle must make a call to\n this function. Any standard global array call that is made after resetting\n the default processor group will be restricted to processors in that\n group. Global arrays that are created after resetting the default\n processor group will only be defined on that group and global operations\n such as ga.sync or ga.gop will be restricted to processors in that group.\n The ga.pgroup_set_default call can be used to rapidly convert large\n applications, written with GA, into routines that run on processor groups.\n\n The default processor group can be overridden by using GA calls that\n require an explicit group handle as one of the arguments.\n\n This is a collective operation on the group represented by the handle\n pgroup. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_229pgroup_set_default = {__Pyx_NAMESTR("pgroup_set_default"), (PyCFunction)__pyx_pw_5ga4py_2ga_229pgroup_set_default, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_228pgroup_set_default)}; static PyObject *__pyx_pw_5ga4py_2ga_229pgroup_set_default(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_pgroup; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_set_default (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__pgroup,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup); if (value) { values[0] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pgroup_set_default") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } } if (values[0]) { __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_pgroup = ((int)-1); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pgroup_set_default", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pgroup_set_default", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_228pgroup_set_default(__pyx_self, __pyx_v_pgroup); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3116 * return GA_Pgroup_nodeid(pgroup) * * def pgroup_set_default(int pgroup=-1): # <<<<<<<<<<<<<< * """Resets the default processor group on a collection of processors. * */ static PyObject *__pyx_pf_5ga4py_2ga_228pgroup_set_default(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_set_default", 0); /* "ga4py/ga.pyx":3135 * * """ * if pgroup < 0: # <<<<<<<<<<<<<< * pgroup = pgroup_get_world() * GA_Pgroup_set_default(pgroup) */ __pyx_t_1 = ((__pyx_v_pgroup < 0) != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":3136 * """ * if pgroup < 0: * pgroup = pgroup_get_world() # <<<<<<<<<<<<<< * GA_Pgroup_set_default(pgroup) * */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__pgroup_get_world); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3136; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3136; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyInt_AsInt(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3136; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_pgroup = __pyx_t_4; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":3137 * if pgroup < 0: * pgroup = pgroup_get_world() * GA_Pgroup_set_default(pgroup) # <<<<<<<<<<<<<< * * def pgroup_split(int pgroup, int num_group): */ GA_Pgroup_set_default(__pyx_v_pgroup); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.pgroup_set_default", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_231pgroup_split(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_230pgroup_split[] = "pgroup_split(int pgroup, int num_group)\nTODO"; static PyMethodDef __pyx_mdef_5ga4py_2ga_231pgroup_split = {__Pyx_NAMESTR("pgroup_split"), (PyCFunction)__pyx_pw_5ga4py_2ga_231pgroup_split, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_230pgroup_split)}; static PyObject *__pyx_pw_5ga4py_2ga_231pgroup_split(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_pgroup; int __pyx_v_num_group; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_split (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__pgroup,&__pyx_n_s__num_group,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__num_group)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pgroup_split", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pgroup_split") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_num_group = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_num_group == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pgroup_split", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pgroup_split", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_230pgroup_split(__pyx_self, __pyx_v_pgroup, __pyx_v_num_group); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3139 * GA_Pgroup_set_default(pgroup) * * def pgroup_split(int pgroup, int num_group): # <<<<<<<<<<<<<< * """TODO""" * return GA_Pgroup_split(pgroup, num_group) */ static PyObject *__pyx_pf_5ga4py_2ga_230pgroup_split(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, int __pyx_v_num_group) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_split", 0); /* "ga4py/ga.pyx":3141 * def pgroup_split(int pgroup, int num_group): * """TODO""" * return GA_Pgroup_split(pgroup, num_group) # <<<<<<<<<<<<<< * * def pgroup_split_irreg(int pgroup, int color): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Pgroup_split(__pyx_v_pgroup, __pyx_v_num_group)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3141; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.pgroup_split", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_233pgroup_split_irreg(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_232pgroup_split_irreg[] = "pgroup_split_irreg(int pgroup, int color)\nTODO"; static PyMethodDef __pyx_mdef_5ga4py_2ga_233pgroup_split_irreg = {__Pyx_NAMESTR("pgroup_split_irreg"), (PyCFunction)__pyx_pw_5ga4py_2ga_233pgroup_split_irreg, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_232pgroup_split_irreg)}; static PyObject *__pyx_pw_5ga4py_2ga_233pgroup_split_irreg(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_pgroup; int __pyx_v_color; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_split_irreg (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__pgroup,&__pyx_n_s__color,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__color)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pgroup_split_irreg", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3143; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pgroup_split_irreg") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3143; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3143; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_color = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_color == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3143; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pgroup_split_irreg", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3143; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pgroup_split_irreg", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_232pgroup_split_irreg(__pyx_self, __pyx_v_pgroup, __pyx_v_color); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3143 * return GA_Pgroup_split(pgroup, num_group) * * def pgroup_split_irreg(int pgroup, int color): # <<<<<<<<<<<<<< * """TODO""" * return GA_Pgroup_split_irreg(pgroup, color) */ static PyObject *__pyx_pf_5ga4py_2ga_232pgroup_split_irreg(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup, int __pyx_v_color) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_split_irreg", 0); /* "ga4py/ga.pyx":3145 * def pgroup_split_irreg(int pgroup, int color): * """TODO""" * return GA_Pgroup_split_irreg(pgroup, color) # <<<<<<<<<<<<<< * * def pgroup_sync(int pgroup=-1): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Pgroup_split_irreg(__pyx_v_pgroup, __pyx_v_color)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.pgroup_split_irreg", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_235pgroup_sync(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_234pgroup_sync[] = "pgroup_sync(int pgroup=-1)\nExecutes a synchronization group across the processors in the processor\n group specified by pgroup.\n \n Nodes outside this group are unaffected.\n\n This is a collective operation on the processor group specified by\n pgroup. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_235pgroup_sync = {__Pyx_NAMESTR("pgroup_sync"), (PyCFunction)__pyx_pw_5ga4py_2ga_235pgroup_sync, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_234pgroup_sync)}; static PyObject *__pyx_pw_5ga4py_2ga_235pgroup_sync(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_pgroup; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pgroup_sync (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__pgroup,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup); if (value) { values[0] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pgroup_sync") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3147; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } } if (values[0]) { __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3147; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_pgroup = ((int)-1); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pgroup_sync", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3147; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.pgroup_sync", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_234pgroup_sync(__pyx_self, __pyx_v_pgroup); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3147 * return GA_Pgroup_split_irreg(pgroup, color) * * def pgroup_sync(int pgroup=-1): # <<<<<<<<<<<<<< * """Executes a synchronization group across the processors in the processor * group specified by pgroup. */ static PyObject *__pyx_pf_5ga4py_2ga_234pgroup_sync(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_pgroup) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pgroup_sync", 0); /* "ga4py/ga.pyx":3157 * * """ * if pgroup < 0: # <<<<<<<<<<<<<< * pgroup = pgroup_get_default() * GA_Pgroup_sync(pgroup) */ __pyx_t_1 = ((__pyx_v_pgroup < 0) != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":3158 * """ * if pgroup < 0: * pgroup = pgroup_get_default() # <<<<<<<<<<<<<< * GA_Pgroup_sync(pgroup) * */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__pgroup_get_default); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyInt_AsInt(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_pgroup = __pyx_t_4; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":3159 * if pgroup < 0: * pgroup = pgroup_get_default() * GA_Pgroup_sync(pgroup) # <<<<<<<<<<<<<< * * def print_distribution(int g_a): */ GA_Pgroup_sync(__pyx_v_pgroup); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.pgroup_sync", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_237print_distribution(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_236print_distribution[] = "print_distribution(int g_a)\nPrints the array distribution.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_237print_distribution = {__Pyx_NAMESTR("print_distribution"), (PyCFunction)__pyx_pw_5ga4py_2ga_237print_distribution, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_236print_distribution)}; static PyObject *__pyx_pw_5ga4py_2ga_237print_distribution(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("print_distribution (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3161; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.print_distribution", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_236print_distribution(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3161 * GA_Pgroup_sync(pgroup) * * def print_distribution(int g_a): # <<<<<<<<<<<<<< * """Prints the array distribution. * */ static PyObject *__pyx_pf_5ga4py_2ga_236print_distribution(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("print_distribution", 0); /* "ga4py/ga.pyx":3167 * * """ * GA_Print_distribution(g_a) # <<<<<<<<<<<<<< * * def print_file(int g_a, file): */ GA_Print_distribution(__pyx_v_g_a); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_239print_file(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_238print_file[] = "print_file(int g_a, file)\nPrints an entire array to a file.\n\n This is a collective operation. \n\n :Parameters:\n file : file-like\n file-like object which must implement fileno(), or a string\n g_a : int\n the array handle\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_239print_file = {__Pyx_NAMESTR("print_file"), (PyCFunction)__pyx_pw_5ga4py_2ga_239print_file, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_238print_file)}; static PyObject *__pyx_pw_5ga4py_2ga_239print_file(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED int __pyx_v_g_a; CYTHON_UNUSED PyObject *__pyx_v_file = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("print_file (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__file,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__file)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("print_file", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3169; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "print_file") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3169; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3169; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_file = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("print_file", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3169; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.print_file", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_238print_file(__pyx_self, __pyx_v_g_a, __pyx_v_file); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3169 * GA_Print_distribution(g_a) * * def print_file(int g_a, file): # <<<<<<<<<<<<<< * """Prints an entire array to a file. * */ static PyObject *__pyx_pf_5ga4py_2ga_238print_file(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED int __pyx_v_g_a, CYTHON_UNUSED PyObject *__pyx_v_file) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("print_file", 0); /* "ga4py/ga.pyx":3182 * """ * #GA_Print_file(file.fileno(), g_a) * raise NotImplementedError # <<<<<<<<<<<<<< * * def print_patch(int g_a, lo=None, hi=None, bint pretty=True): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.ga.print_file", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_241print_patch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_240print_patch[] = "print_patch(int g_a, lo=None, hi=None, bool pretty=True)\nPrints a patch of g_a array to the standard output.\n \n If pretty is False then output is printed in a dense fashion. If\n pretty is True then output is formatted and rows/columns labeled.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_241print_patch = {__Pyx_NAMESTR("print_patch"), (PyCFunction)__pyx_pw_5ga4py_2ga_241print_patch, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_240print_patch)}; static PyObject *__pyx_pw_5ga4py_2ga_241print_patch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_v_pretty; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("print_patch (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__lo,&__pyx_n_s__hi,&__pyx_n_s__pretty,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/ga.pyx":3184 * raise NotImplementedError * * def print_patch(int g_a, lo=None, hi=None, bint pretty=True): # <<<<<<<<<<<<<< * """Prints a patch of g_a array to the standard output. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pretty); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "print_patch") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; if (values[3]) { __pyx_v_pretty = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_pretty == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_pretty = ((int)1); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("print_patch", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.print_patch", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_240print_patch(__pyx_self, __pyx_v_g_a, __pyx_v_lo, __pyx_v_hi, __pyx_v_pretty); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_240print_patch(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, int __pyx_v_pretty) { PyArrayObject *__pyx_v_lo_nd = 0; PyArrayObject *__pyx_v_hi_nd = 0; int __pyx_v_apretty; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_nd; __Pyx_Buffer __pyx_pybuffer_lo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *(*__pyx_t_5)(PyObject *); PyArrayObject *__pyx_t_6 = NULL; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; int __pyx_t_11; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("print_patch", 0); __pyx_pybuffer_lo_nd.pybuffer.buf = NULL; __pyx_pybuffer_lo_nd.refcount = 0; __pyx_pybuffernd_lo_nd.data = NULL; __pyx_pybuffernd_lo_nd.rcbuffer = &__pyx_pybuffer_lo_nd; __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; /* "ga4py/ga.pyx":3194 * """ * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd * cdef int apretty=0 # <<<<<<<<<<<<<< * lo_nd,hi_nd = _lohi(g_a,lo,hi) * if pretty: */ __pyx_v_apretty = 0; /* "ga4py/ga.pyx":3195 * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd * cdef int apretty=0 * lo_nd,hi_nd = _lohi(g_a,lo,hi) # <<<<<<<<<<<<<< * if pretty: * apretty = 1 */ __pyx_t_1 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_3 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L4_unpacking_done; __pyx_L3_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L4_unpacking_done:; } if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":3196 * cdef int apretty=0 * lo_nd,hi_nd = _lohi(g_a,lo,hi) * if pretty: # <<<<<<<<<<<<<< * apretty = 1 * NGA_Print_patch64(g_a, lo_nd.data, hi_nd.data, apretty) */ __pyx_t_11 = (__pyx_v_pretty != 0); if (__pyx_t_11) { /* "ga4py/ga.pyx":3197 * lo_nd,hi_nd = _lohi(g_a,lo,hi) * if pretty: * apretty = 1 # <<<<<<<<<<<<<< * NGA_Print_patch64(g_a, lo_nd.data, hi_nd.data, apretty) * */ __pyx_v_apretty = 1; goto __pyx_L5; } __pyx_L5:; /* "ga4py/ga.pyx":3198 * if pretty: * apretty = 1 * NGA_Print_patch64(g_a, lo_nd.data, hi_nd.data, apretty) # <<<<<<<<<<<<<< * * def print_stats(): */ NGA_Print_patch64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), __pyx_v_apretty); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.print_patch", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_lo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_243print_stats(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_242print_stats[] = "print_stats()\nThis non-collective (MIMD) operation prints information about:\n\n * number of calls to the GA create/duplicate, destroy, get, put,\n * scatter, gather, and read_and_inc operations\n * total amount of data moved in the GA primitive operations\n * amount of data moved in GA primitive operations to logicaly\n * remote locations\n * maximum memory consumption in global arrays, and\n * number of requests serviced in the interrupt-driven\n * implementations by the calling process.\n\n This operation is local. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_243print_stats = {__Pyx_NAMESTR("print_stats"), (PyCFunction)__pyx_pw_5ga4py_2ga_243print_stats, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_242print_stats)}; static PyObject *__pyx_pw_5ga4py_2ga_243print_stats(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("print_stats (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_242print_stats(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3200 * NGA_Print_patch64(g_a, lo_nd.data, hi_nd.data, apretty) * * def print_stats(): # <<<<<<<<<<<<<< * """This non-collective (MIMD) operation prints information about: * */ static PyObject *__pyx_pf_5ga4py_2ga_242print_stats(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("print_stats", 0); /* "ga4py/ga.pyx":3215 * * """ * GA_Print_stats() # <<<<<<<<<<<<<< * * def print_stdout(int g_a): */ GA_Print_stats(); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_245print_stdout(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_244print_stdout[] = "print_stdout(int g_a)\nPrints an entire array to the standard output."; static PyMethodDef __pyx_mdef_5ga4py_2ga_245print_stdout = {__Pyx_NAMESTR("print_stdout"), (PyCFunction)__pyx_pw_5ga4py_2ga_245print_stdout, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_244print_stdout)}; static PyObject *__pyx_pw_5ga4py_2ga_245print_stdout(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("print_stdout (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3217; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.print_stdout", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_244print_stdout(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3217 * GA_Print_stats() * * def print_stdout(int g_a): # <<<<<<<<<<<<<< * """Prints an entire array to the standard output.""" * GA_Print(g_a) */ static PyObject *__pyx_pf_5ga4py_2ga_244print_stdout(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("print_stdout", 0); /* "ga4py/ga.pyx":3219 * def print_stdout(int g_a): * """Prints an entire array to the standard output.""" * GA_Print(g_a) # <<<<<<<<<<<<<< * * def proc_topology(int g_a, int proc): */ GA_Print(__pyx_v_g_a); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_247proc_topology(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_246proc_topology[] = "proc_topology(int g_a, int proc)\nBased on the distribution of an array associated with handle g_a,\n determines coordinates of the specified processor in the virtual processor\n grid corresponding to the distribution of array g_a.\n \n The numbering starts from 0. The values of -1 means that the processor\n doesn't 'own' any section of array represented by g_a.\n\n This operation is local. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_247proc_topology = {__Pyx_NAMESTR("proc_topology"), (PyCFunction)__pyx_pw_5ga4py_2ga_247proc_topology, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_246proc_topology)}; static PyObject *__pyx_pw_5ga4py_2ga_247proc_topology(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_proc; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("proc_topology (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__proc,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__proc)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("proc_topology", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "proc_topology") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_proc = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_proc == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("proc_topology", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.proc_topology", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_246proc_topology(__pyx_self, __pyx_v_g_a, __pyx_v_proc); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3221 * GA_Print(g_a) * * def proc_topology(int g_a, int proc): # <<<<<<<<<<<<<< * """Based on the distribution of an array associated with handle g_a, * determines coordinates of the specified processor in the virtual processor */ static PyObject *__pyx_pf_5ga4py_2ga_246proc_topology(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_proc) { int __pyx_v_ndim; PyArrayObject *__pyx_v_coord = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_coord; __Pyx_Buffer __pyx_pybuffer_coord; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyArrayObject *__pyx_t_6 = NULL; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("proc_topology", 0); __pyx_pybuffer_coord.pybuffer.buf = NULL; __pyx_pybuffer_coord.refcount = 0; __pyx_pybuffernd_coord.data = NULL; __pyx_pybuffernd_coord.rcbuffer = &__pyx_pybuffer_coord; /* "ga4py/ga.pyx":3232 * * """ * cdef int ndim = GA_Ndim(g_a) # <<<<<<<<<<<<<< * cdef np.ndarray[np.int32_t, ndim=1] coord * coord = np.zeros(ndim, dtype=np.intc) */ __pyx_v_ndim = GA_Ndim(__pyx_v_g_a); /* "ga4py/ga.pyx":3234 * cdef int ndim = GA_Ndim(g_a) * cdef np.ndarray[np.int32_t, ndim=1] coord * coord = np.zeros(ndim, dtype=np.intc) # <<<<<<<<<<<<<< * NGA_Proc_topology(g_a, proc, coord.data) * return coord */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__zeros); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyInt_FromLong(__pyx_v_ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__intc); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_coord.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_coord.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_coord.rcbuffer->pybuffer, (PyObject*)__pyx_v_coord, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_coord.diminfo[0].strides = __pyx_pybuffernd_coord.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_coord.diminfo[0].shape = __pyx_pybuffernd_coord.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_coord = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/ga.pyx":3235 * cdef np.ndarray[np.int32_t, ndim=1] coord * coord = np.zeros(ndim, dtype=np.intc) * NGA_Proc_topology(g_a, proc, coord.data) # <<<<<<<<<<<<<< * return coord * */ NGA_Proc_topology(__pyx_v_g_a, __pyx_v_proc, ((int *)__pyx_v_coord->data)); /* "ga4py/ga.pyx":3236 * coord = np.zeros(ndim, dtype=np.intc) * NGA_Proc_topology(g_a, proc, coord.data) * return coord # <<<<<<<<<<<<<< * * def put(int g_a, buffer, lo=None, hi=None): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_coord)); __pyx_r = ((PyObject *)__pyx_v_coord); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_coord.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.proc_topology", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_coord.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_coord); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_249put(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_248put[] = "put(int g_a, buffer, lo=None, hi=None)\nCopies data from local array buffer to the global array section.\n \n The local array is assumed to be have the same number of dimensions as the\n global array. Any detected inconsitencies/errors in input arguments are\n fatal.\n\n This is a one-sided operation. \n\n :Parameters:\n g_a : int\n the array handle\n buffer : array-like\n the data to put\n lo : 1D array-like of integers\n lower bound patch coordinates, inclusive\n hi : array-like of integers\n higher bound patch coordinates, exclusive\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_249put = {__Pyx_NAMESTR("put"), (PyCFunction)__pyx_pw_5ga4py_2ga_249put, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_248put)}; static PyObject *__pyx_pw_5ga4py_2ga_249put(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_buffer = 0; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("put (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__buffer,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/ga.pyx":3238 * return coord * * def put(int g_a, buffer, lo=None, hi=None): # <<<<<<<<<<<<<< * """Copies data from local array buffer to the global array section. * */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3238; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "put") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3238; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3238; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_buffer = values[1]; __pyx_v_lo = values[2]; __pyx_v_hi = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("put", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3238; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.put", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_248put(__pyx_self, __pyx_v_g_a, __pyx_v_buffer, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_248put(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_buffer, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; struct __pyx_opt_args_5ga4py_2ga__put_common __pyx_t_2; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("put", 0); /* "ga4py/ga.pyx":3258 * * """ * _put_common(g_a, buffer, lo, hi) # <<<<<<<<<<<<<< * * cdef _put_common(int g_a, buffer, lo=None, hi=None, */ __pyx_t_2.__pyx_n = 2; __pyx_t_2.lo = __pyx_v_lo; __pyx_t_2.hi = __pyx_v_hi; __pyx_t_1 = __pyx_f_5ga4py_2ga__put_common(__pyx_v_g_a, __pyx_v_buffer, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.put", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3260 * _put_common(g_a, buffer, lo, hi) * * cdef _put_common(int g_a, buffer, lo=None, hi=None, # <<<<<<<<<<<<<< * bint nb=False, bint periodic=False, skip=None): * """Copies data from local array buffer to the global array section. */ static PyObject *__pyx_f_5ga4py_2ga__put_common(int __pyx_v_g_a, PyObject *__pyx_v_buffer, struct __pyx_opt_args_5ga4py_2ga__put_common *__pyx_optional_args) { PyObject *__pyx_v_lo = ((PyObject *)Py_None); PyObject *__pyx_v_hi = ((PyObject *)Py_None); /* "ga4py/ga.pyx":3261 * * cdef _put_common(int g_a, buffer, lo=None, hi=None, * bint nb=False, bint periodic=False, skip=None): # <<<<<<<<<<<<<< * """Copies data from local array buffer to the global array section. * */ int __pyx_v_nb = ((int)0); int __pyx_v_periodic = ((int)0); PyObject *__pyx_v_skip = ((PyObject *)Py_None); PyArrayObject *__pyx_v_buffer_nd = 0; PyArrayObject *__pyx_v_lo_nd = 0; PyArrayObject *__pyx_v_hi_nd = 0; PyArrayObject *__pyx_v_ld_nd = 0; PyArrayObject *__pyx_v_shape = 0; PyArrayObject *__pyx_v_skip_nd = 0; int __pyx_v_gtype; ga_nbhdl_t __pyx_v_nbhandle; PyObject *__pyx_v_dtype = NULL; PyObject *__pyx_v_strides = NULL; PyObject *__pyx_v_buffer_shape = NULL; PyObject *__pyx_v_i = NULL; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_ld_nd; __Pyx_Buffer __pyx_pybuffer_ld_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_nd; __Pyx_Buffer __pyx_pybuffer_lo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_shape; __Pyx_Buffer __pyx_pybuffer_shape; __Pyx_LocalBuf_ND __pyx_pybuffernd_skip_nd; __Pyx_Buffer __pyx_pybuffer_skip_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *(*__pyx_t_5)(PyObject *); PyArrayObject *__pyx_t_6 = NULL; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; int __pyx_t_11; int __pyx_t_12; Py_ssize_t __pyx_t_13; PyObject *(*__pyx_t_14)(PyObject *); Py_ssize_t __pyx_t_15; PyObject *__pyx_t_16 = NULL; int __pyx_t_17; int __pyx_t_18; PyObject *__pyx_t_19 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_put_common", 0); if (__pyx_optional_args) { if (__pyx_optional_args->__pyx_n > 0) { __pyx_v_lo = __pyx_optional_args->lo; if (__pyx_optional_args->__pyx_n > 1) { __pyx_v_hi = __pyx_optional_args->hi; if (__pyx_optional_args->__pyx_n > 2) { __pyx_v_nb = __pyx_optional_args->nb; if (__pyx_optional_args->__pyx_n > 3) { __pyx_v_periodic = __pyx_optional_args->periodic; if (__pyx_optional_args->__pyx_n > 4) { __pyx_v_skip = __pyx_optional_args->skip; } } } } } } __pyx_pybuffer_lo_nd.pybuffer.buf = NULL; __pyx_pybuffer_lo_nd.refcount = 0; __pyx_pybuffernd_lo_nd.data = NULL; __pyx_pybuffernd_lo_nd.rcbuffer = &__pyx_pybuffer_lo_nd; __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; __pyx_pybuffer_ld_nd.pybuffer.buf = NULL; __pyx_pybuffer_ld_nd.refcount = 0; __pyx_pybuffernd_ld_nd.data = NULL; __pyx_pybuffernd_ld_nd.rcbuffer = &__pyx_pybuffer_ld_nd; __pyx_pybuffer_shape.pybuffer.buf = NULL; __pyx_pybuffer_shape.refcount = 0; __pyx_pybuffernd_shape.data = NULL; __pyx_pybuffernd_shape.rcbuffer = &__pyx_pybuffer_shape; __pyx_pybuffer_skip_nd.pybuffer.buf = NULL; __pyx_pybuffer_skip_nd.refcount = 0; __pyx_pybuffernd_skip_nd.data = NULL; __pyx_pybuffernd_skip_nd.rcbuffer = &__pyx_pybuffer_skip_nd; /* "ga4py/ga.pyx":3295 * cdef np.ndarray buffer_nd * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd, ld_nd, shape, skip_nd * cdef int gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * cdef ga_nbhdl_t nbhandle * dtype = _to_dtype[gtype] */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":3297 * cdef int gtype=inquire_type(g_a) * cdef ga_nbhdl_t nbhandle * dtype = _to_dtype[gtype] # <<<<<<<<<<<<<< * lo_nd,hi_nd = _lohi(g_a,lo,hi) * shape = hi_nd-lo_nd+1 */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_gtype, sizeof(int), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_dtype = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/ga.pyx":3298 * cdef ga_nbhdl_t nbhandle * dtype = _to_dtype[gtype] * lo_nd,hi_nd = _lohi(g_a,lo,hi) # <<<<<<<<<<<<<< * shape = hi_nd-lo_nd+1 * if skip is None: */ __pyx_t_2 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { PyObject* sequence = __pyx_t_2; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_1 = PyList_GET_ITEM(sequence, 0); __pyx_t_3 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_3); #else __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; index = 0; __pyx_t_1 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L4_unpacking_done; __pyx_L3_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L4_unpacking_done:; } if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; __pyx_t_6 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":3299 * dtype = _to_dtype[gtype] * lo_nd,hi_nd = _lohi(g_a,lo,hi) * shape = hi_nd-lo_nd+1 # <<<<<<<<<<<<<< * if skip is None: * skip_nd = None */ __pyx_t_2 = PyNumber_Subtract(((PyObject *)__pyx_v_hi_nd), ((PyObject *)__pyx_v_lo_nd)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_shape.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_shape.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_shape.rcbuffer->pybuffer, (PyObject*)__pyx_v_shape, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_shape.diminfo[0].strides = __pyx_pybuffernd_shape.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_shape.diminfo[0].shape = __pyx_pybuffernd_shape.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_shape = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":3300 * lo_nd,hi_nd = _lohi(g_a,lo,hi) * shape = hi_nd-lo_nd+1 * if skip is None: # <<<<<<<<<<<<<< * skip_nd = None * else: */ __pyx_t_11 = (__pyx_v_skip == Py_None); __pyx_t_12 = (__pyx_t_11 != 0); if (__pyx_t_12) { /* "ga4py/ga.pyx":3301 * shape = hi_nd-lo_nd+1 * if skip is None: * skip_nd = None # <<<<<<<<<<<<<< * else: * skip_nd = _inta64(skip) */ __pyx_t_6 = ((PyArrayObject *)Py_None); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_skip_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_skip_nd.diminfo[0].strides = __pyx_pybuffernd_skip_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_skip_nd.diminfo[0].shape = __pyx_pybuffernd_skip_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __Pyx_INCREF(Py_None); __pyx_v_skip_nd = ((PyArrayObject *)Py_None); goto __pyx_L5; } /*else*/ { /* "ga4py/ga.pyx":3303 * skip_nd = None * else: * skip_nd = _inta64(skip) # <<<<<<<<<<<<<< * shape = (hi_nd-lo_nd)/skip_nd+1 * buffer_nd = np.asarray(buffer, dtype=dtype) */ __pyx_t_3 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_skip)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_3), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_skip_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_skip_nd.diminfo[0].strides = __pyx_pybuffernd_skip_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_skip_nd.diminfo[0].shape = __pyx_pybuffernd_skip_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_skip_nd = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":3304 * else: * skip_nd = _inta64(skip) * shape = (hi_nd-lo_nd)/skip_nd+1 # <<<<<<<<<<<<<< * buffer_nd = np.asarray(buffer, dtype=dtype) * if buffer_nd.dtype != dtype: */ __pyx_t_3 = PyNumber_Subtract(((PyObject *)__pyx_v_hi_nd), ((PyObject *)__pyx_v_lo_nd)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_3, ((PyObject *)__pyx_v_skip_nd)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_shape.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_shape.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_shape.rcbuffer->pybuffer, (PyObject*)__pyx_v_shape, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_shape.diminfo[0].strides = __pyx_pybuffernd_shape.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_shape.diminfo[0].shape = __pyx_pybuffernd_shape.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_shape, ((PyArrayObject *)__pyx_t_3)); __pyx_t_3 = 0; } __pyx_L5:; /* "ga4py/ga.pyx":3305 * skip_nd = _inta64(skip) * shape = (hi_nd-lo_nd)/skip_nd+1 * buffer_nd = np.asarray(buffer, dtype=dtype) # <<<<<<<<<<<<<< * if buffer_nd.dtype != dtype: * raise ValueError, "buffer is wrong type :: buffer=%s != %s" % ( */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__asarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_buffer); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_buffer); __Pyx_GIVEREF(__pyx_v_buffer); __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_v_dtype) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_buffer_nd = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3306 * shape = (hi_nd-lo_nd)/skip_nd+1 * buffer_nd = np.asarray(buffer, dtype=dtype) * if buffer_nd.dtype != dtype: # <<<<<<<<<<<<<< * raise ValueError, "buffer is wrong type :: buffer=%s != %s" % ( * buffer.dtype, dtype) */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer_nd), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_RichCompare(__pyx_t_4, __pyx_v_dtype, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_12) { /* "ga4py/ga.pyx":3308 * if buffer_nd.dtype != dtype: * raise ValueError, "buffer is wrong type :: buffer=%s != %s" % ( * buffer.dtype, dtype) # <<<<<<<<<<<<<< * # Due to GA restrictions, buffer must not have negative strides * # and buffer's last stride must be same as itemsize */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_buffer, __pyx_n_s__dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_1 = 0; __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3307; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_1), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3307; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; /* "ga4py/ga.pyx":3311 * # Due to GA restrictions, buffer must not have negative strides * # and buffer's last stride must be same as itemsize * strides = [buffer_nd.strides[i]/buffer_nd.itemsize # <<<<<<<<<<<<<< * for i in range(buffer_nd.ndim)] * if (strides and (strides[-1] != 1 or np.any(np.asarray(strides) < 0))): */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); /* "ga4py/ga.pyx":3312 * # and buffer's last stride must be same as itemsize * strides = [buffer_nd.strides[i]/buffer_nd.itemsize * for i in range(buffer_nd.ndim)] # <<<<<<<<<<<<<< * if (strides and (strides[-1] != 1 or np.any(np.asarray(strides) < 0))): * buffer_nd = np.ascontiguousarray(buffer_nd) */ __pyx_t_4 = PyInt_FromLong(__pyx_v_buffer_nd->nd); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyList_CheckExact(__pyx_t_4) || PyTuple_CheckExact(__pyx_t_4)) { __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __pyx_t_13 = 0; __pyx_t_14 = NULL; } else { __pyx_t_13 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_14 = Py_TYPE(__pyx_t_3)->tp_iternext; } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; for (;;) { if (!__pyx_t_14 && PyList_CheckExact(__pyx_t_3)) { if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_4); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_14 && PyTuple_CheckExact(__pyx_t_3)) { if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_4); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_4 = __pyx_t_14(__pyx_t_3); if (unlikely(!__pyx_t_4)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_4); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3311 * # Due to GA restrictions, buffer must not have negative strides * # and buffer's last stride must be same as itemsize * strides = [buffer_nd.strides[i]/buffer_nd.itemsize # <<<<<<<<<<<<<< * for i in range(buffer_nd.ndim)] * if (strides and (strides[-1] != 1 or np.any(np.asarray(strides) < 0))): */ __pyx_t_15 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_15 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_PyInt_to_py_Py_intptr_t((__pyx_v_buffer_nd->strides[__pyx_t_15])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer_nd), __pyx_n_s__itemsize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_16 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_16))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_strides = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":3313 * strides = [buffer_nd.strides[i]/buffer_nd.itemsize * for i in range(buffer_nd.ndim)] * if (strides and (strides[-1] != 1 or np.any(np.asarray(strides) < 0))): # <<<<<<<<<<<<<< * buffer_nd = np.ascontiguousarray(buffer_nd) * # we allow 1-d "flat" buffers in addition to buffers matching the shape of */ __pyx_t_12 = (((PyObject *)__pyx_v_strides) != Py_None) && (PyList_GET_SIZE(((PyObject *)__pyx_v_strides)) != 0); if (__pyx_t_12) { __pyx_t_1 = __Pyx_GetItemInt_List(((PyObject *)__pyx_v_strides), -1, sizeof(long), PyInt_FromLong, 1, 1, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_int_1, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_11) { __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__any); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__asarray); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)__pyx_v_strides)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_strides)); __Pyx_GIVEREF(((PyObject *)__pyx_v_strides)); __pyx_t_2 = PyObject_Call(__pyx_t_16, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_17 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_18 = __pyx_t_17; } else { __pyx_t_18 = __pyx_t_11; } __pyx_t_11 = __pyx_t_18; } else { __pyx_t_11 = __pyx_t_12; } if (__pyx_t_11) { /* "ga4py/ga.pyx":3314 * for i in range(buffer_nd.ndim)] * if (strides and (strides[-1] != 1 or np.any(np.asarray(strides) < 0))): * buffer_nd = np.ascontiguousarray(buffer_nd) # <<<<<<<<<<<<<< * # we allow 1-d "flat" buffers in addition to buffers matching the shape of * # the requested region */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__ascontiguousarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)__pyx_v_buffer_nd)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_buffer_nd)); __Pyx_GIVEREF(((PyObject *)__pyx_v_buffer_nd)); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF_SET(__pyx_v_buffer_nd, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; goto __pyx_L9; } __pyx_L9:; /* "ga4py/ga.pyx":3317 * # we allow 1-d "flat" buffers in addition to buffers matching the shape of * # the requested region * if buffer_nd.ndim == 1: # <<<<<<<<<<<<<< * if buffer_nd.size != np.prod(shape): * raise ValueError, ('buffer size does not match shape :: ' */ __pyx_t_11 = ((__pyx_v_buffer_nd->nd == 1) != 0); if (__pyx_t_11) { /* "ga4py/ga.pyx":3318 * # the requested region * if buffer_nd.ndim == 1: * if buffer_nd.size != np.prod(shape): # <<<<<<<<<<<<<< * raise ValueError, ('buffer size does not match shape :: ' * 'buffer.size=%s != np.prod(shape)=%s' % ( */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer_nd), __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__prod); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)__pyx_v_shape)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_shape)); __pyx_t_16 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_16, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_11) { /* "ga4py/ga.pyx":3321 * raise ValueError, ('buffer size does not match shape :: ' * 'buffer.size=%s != np.prod(shape)=%s' % ( * buffer_nd.size, np.prod(shape))) # <<<<<<<<<<<<<< * ld_nd = shape[1:] * else: */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buffer_nd), __pyx_n_s__size); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_16 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s__prod); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyTuple_New(1); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_INCREF(((PyObject *)__pyx_v_shape)); PyTuple_SET_ITEM(__pyx_t_16, 0, ((PyObject *)__pyx_v_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_shape)); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_16), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_16)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3320; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L11; } __pyx_L11:; /* "ga4py/ga.pyx":3322 * 'buffer.size=%s != np.prod(shape)=%s' % ( * buffer_nd.size, np.prod(shape))) * ld_nd = shape[1:] # <<<<<<<<<<<<<< * else: * buffer_shape = [buffer_nd.shape[i] for i in range(buffer_nd.ndim)] */ __pyx_t_2 = __Pyx_PyObject_GetSlice(((PyObject *)__pyx_v_shape), 1, 0, NULL, NULL, &__pyx_k_slice_38, 1, 0, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ld_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_ld_nd.diminfo[0].strides = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ld_nd.diminfo[0].shape = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_ld_nd = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L10; } /*else*/ { /* "ga4py/ga.pyx":3324 * ld_nd = shape[1:] * else: * buffer_shape = [buffer_nd.shape[i] for i in range(buffer_nd.ndim)] # <<<<<<<<<<<<<< * if not np.all(buffer_shape == shape): * raise ValueError, ('buffer shape does not match request shape :: ' */ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_16 = PyInt_FromLong(__pyx_v_buffer_nd->nd); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_16); __Pyx_GIVEREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyList_CheckExact(__pyx_t_16) || PyTuple_CheckExact(__pyx_t_16)) { __pyx_t_3 = __pyx_t_16; __Pyx_INCREF(__pyx_t_3); __pyx_t_13 = 0; __pyx_t_14 = NULL; } else { __pyx_t_13 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_16); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_14 = Py_TYPE(__pyx_t_3)->tp_iternext; } __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; for (;;) { if (!__pyx_t_14 && PyList_CheckExact(__pyx_t_3)) { if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_16 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_16); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_16 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_14 && PyTuple_CheckExact(__pyx_t_3)) { if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_16 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_13); __Pyx_INCREF(__pyx_t_16); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_16 = PySequence_ITEM(__pyx_t_3, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_16 = __pyx_t_14(__pyx_t_3); if (unlikely(!__pyx_t_16)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_16); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_16); __pyx_t_16 = 0; __pyx_t_15 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_15 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_16 = __Pyx_PyInt_to_py_Py_intptr_t((__pyx_v_buffer_nd->dimensions[__pyx_t_15])); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_16))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_buffer_shape = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":3325 * else: * buffer_shape = [buffer_nd.shape[i] for i in range(buffer_nd.ndim)] * if not np.all(buffer_shape == shape): # <<<<<<<<<<<<<< * raise ValueError, ('buffer shape does not match request shape :: ' * 'buffer_shape=%s != shape=%s' % ( */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__all); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_buffer_shape), ((PyObject *)__pyx_v_shape), Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_16 = PyTuple_New(1); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_16), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_12 = ((!__pyx_t_11) != 0); if (__pyx_t_12) { /* "ga4py/ga.pyx":3328 * raise ValueError, ('buffer shape does not match request shape :: ' * 'buffer_shape=%s != shape=%s' % ( * buffer_shape, shape)) # <<<<<<<<<<<<<< * ld_nd = np.asarray([strides[i]/strides[i+1] * for i in range(buffer_nd.ndim-1)], dtype=np.int64) */ __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_v_buffer_shape)); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_buffer_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_buffer_shape)); __Pyx_INCREF(((PyObject *)__pyx_v_shape)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_shape)); __pyx_t_16 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_10), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_16)); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_16), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3326; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L14; } __pyx_L14:; /* "ga4py/ga.pyx":3329 * 'buffer_shape=%s != shape=%s' % ( * buffer_shape, shape)) * ld_nd = np.asarray([strides[i]/strides[i+1] # <<<<<<<<<<<<<< * for i in range(buffer_nd.ndim-1)], dtype=np.int64) * if nb: */ __pyx_t_16 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s__asarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyList_New(0); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); /* "ga4py/ga.pyx":3330 * buffer_shape, shape)) * ld_nd = np.asarray([strides[i]/strides[i+1] * for i in range(buffer_nd.ndim-1)], dtype=np.int64) # <<<<<<<<<<<<<< * if nb: * NGA_NbPut64(g_a, lo_nd.data, hi_nd.data, */ __pyx_t_3 = PyInt_FromLong((__pyx_v_buffer_nd->nd - 1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) { __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __pyx_t_13 = 0; __pyx_t_14 = NULL; } else { __pyx_t_13 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_14 = Py_TYPE(__pyx_t_1)->tp_iternext; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; for (;;) { if (!__pyx_t_14 && PyList_CheckExact(__pyx_t_1)) { if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_3); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_14 && PyTuple_CheckExact(__pyx_t_1)) { if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_3); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_3 = __pyx_t_14(__pyx_t_1); if (unlikely(!__pyx_t_3)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_3); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":3329 * 'buffer_shape=%s != shape=%s' % ( * buffer_shape, shape)) * ld_nd = np.asarray([strides[i]/strides[i+1] # <<<<<<<<<<<<<< * for i in range(buffer_nd.ndim-1)], dtype=np.int64) * if nb: */ __pyx_t_3 = PyObject_GetItem(((PyObject *)__pyx_v_strides), __pyx_v_i); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyNumber_Add(__pyx_v_i, __pyx_int_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_19 = PyObject_GetItem(((PyObject *)__pyx_v_strides), __pyx_t_4); if (!__pyx_t_19) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_19); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; if (unlikely(__Pyx_ListComp_Append(__pyx_t_16, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_t_16)); __Pyx_GIVEREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; __pyx_t_16 = PyDict_New(); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_16)); /* "ga4py/ga.pyx":3330 * buffer_shape, shape)) * ld_nd = np.asarray([strides[i]/strides[i+1] * for i in range(buffer_nd.ndim-1)], dtype=np.int64) # <<<<<<<<<<<<<< * if nb: * NGA_NbPut64(g_a, lo_nd.data, hi_nd.data, */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__int64); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_t_16, ((PyObject *)__pyx_n_s__dtype), __pyx_t_19) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; __pyx_t_19 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_16)); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_19); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; if (!(likely(((__pyx_t_19) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_19, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_19); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ld_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_ld_nd.diminfo[0].strides = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ld_nd.diminfo[0].shape = __pyx_pybuffernd_ld_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_ld_nd = ((PyArrayObject *)__pyx_t_19); __pyx_t_19 = 0; } __pyx_L10:; /* "ga4py/ga.pyx":3331 * ld_nd = np.asarray([strides[i]/strides[i+1] * for i in range(buffer_nd.ndim-1)], dtype=np.int64) * if nb: # <<<<<<<<<<<<<< * NGA_NbPut64(g_a, lo_nd.data, hi_nd.data, * buffer_nd.data, ld_nd.data, &nbhandle) */ __pyx_t_12 = (__pyx_v_nb != 0); if (__pyx_t_12) { /* "ga4py/ga.pyx":3333 * if nb: * NGA_NbPut64(g_a, lo_nd.data, hi_nd.data, * buffer_nd.data, ld_nd.data, &nbhandle) # <<<<<<<<<<<<<< * return nbhandle * elif periodic: */ NGA_NbPut64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), ((void *)__pyx_v_buffer_nd->data), ((int64_t *)__pyx_v_ld_nd->data), (&__pyx_v_nbhandle)); /* "ga4py/ga.pyx":3334 * NGA_NbPut64(g_a, lo_nd.data, hi_nd.data, * buffer_nd.data, ld_nd.data, &nbhandle) * return nbhandle # <<<<<<<<<<<<<< * elif periodic: * NGA_Periodic_put64(g_a, lo_nd.data, hi_nd.data, */ __Pyx_XDECREF(__pyx_r); __pyx_t_19 = __Pyx_PyInt_to_py_Integer(__pyx_v_nbhandle); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_19); __pyx_r = __pyx_t_19; __pyx_t_19 = 0; goto __pyx_L0; goto __pyx_L17; } /* "ga4py/ga.pyx":3335 * buffer_nd.data, ld_nd.data, &nbhandle) * return nbhandle * elif periodic: # <<<<<<<<<<<<<< * NGA_Periodic_put64(g_a, lo_nd.data, hi_nd.data, * buffer_nd.data, ld_nd.data) */ __pyx_t_12 = (__pyx_v_periodic != 0); if (__pyx_t_12) { /* "ga4py/ga.pyx":3337 * elif periodic: * NGA_Periodic_put64(g_a, lo_nd.data, hi_nd.data, * buffer_nd.data, ld_nd.data) # <<<<<<<<<<<<<< * elif skip is not None: * NGA_Strided_put64(g_a, lo_nd.data, hi_nd.data, */ NGA_Periodic_put64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), ((void *)__pyx_v_buffer_nd->data), ((int64_t *)__pyx_v_ld_nd->data)); goto __pyx_L17; } /* "ga4py/ga.pyx":3338 * NGA_Periodic_put64(g_a, lo_nd.data, hi_nd.data, * buffer_nd.data, ld_nd.data) * elif skip is not None: # <<<<<<<<<<<<<< * NGA_Strided_put64(g_a, lo_nd.data, hi_nd.data, * skip_nd.data, */ __pyx_t_12 = (__pyx_v_skip != Py_None); __pyx_t_11 = (__pyx_t_12 != 0); if (__pyx_t_11) { /* "ga4py/ga.pyx":3341 * NGA_Strided_put64(g_a, lo_nd.data, hi_nd.data, * skip_nd.data, * buffer_nd.data, ld_nd.data) # <<<<<<<<<<<<<< * else: * NGA_Put64(g_a, lo_nd.data, hi_nd.data, */ NGA_Strided_put64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), ((int64_t *)__pyx_v_skip_nd->data), ((void *)__pyx_v_buffer_nd->data), ((int64_t *)__pyx_v_ld_nd->data)); goto __pyx_L17; } /*else*/ { /* "ga4py/ga.pyx":3344 * else: * NGA_Put64(g_a, lo_nd.data, hi_nd.data, * buffer_nd.data, ld_nd.data) # <<<<<<<<<<<<<< * * def randomize(int g_a, val=None): */ NGA_Put64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), ((void *)__pyx_v_buffer_nd->data), ((int64_t *)__pyx_v_ld_nd->data)); } __pyx_L17:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_16); __Pyx_XDECREF(__pyx_t_19); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_shape.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga._put_common", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ld_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_shape.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_skip_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_buffer_nd); __Pyx_XDECREF((PyObject *)__pyx_v_lo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_ld_nd); __Pyx_XDECREF((PyObject *)__pyx_v_shape); __Pyx_XDECREF((PyObject *)__pyx_v_skip_nd); __Pyx_XDECREF(__pyx_v_dtype); __Pyx_XDECREF(__pyx_v_strides); __Pyx_XDECREF(__pyx_v_buffer_shape); __Pyx_XDECREF(__pyx_v_i); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_251randomize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_250randomize[] = "randomize(int g_a, val=None)\nFill array with random values in [0,val)."; static PyMethodDef __pyx_mdef_5ga4py_2ga_251randomize = {__Pyx_NAMESTR("randomize"), (PyCFunction)__pyx_pw_5ga4py_2ga_251randomize, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_250randomize)}; static PyObject *__pyx_pw_5ga4py_2ga_251randomize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_val = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("randomize (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__val,0}; PyObject* values[2] = {0,0}; /* "ga4py/ga.pyx":3346 * buffer_nd.data, ld_nd.data) * * def randomize(int g_a, val=None): # <<<<<<<<<<<<<< * """Fill array with random values in [0,val).""" * cdef int gtype=inquire_type(g_a) */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "randomize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3346; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3346; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_val = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("randomize", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3346; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.randomize", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_250randomize(__pyx_self, __pyx_v_g_a, __pyx_v_val); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_250randomize(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_val) { int __pyx_v_gtype; int __pyx_v_ival; long __pyx_v_lval; PY_LONG_LONG __pyx_v_llval; float __pyx_v_fval; double __pyx_v_dval; long double __pyx_v_ldval; SingleComplex __pyx_v_fcval; DoubleComplex __pyx_v_dcval; void *__pyx_v_vval; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; __Pyx_RefNannySetupContext("randomize", 0); __Pyx_INCREF(__pyx_v_val); /* "ga4py/ga.pyx":3348 * def randomize(int g_a, val=None): * """Fill array with random values in [0,val).""" * cdef int gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * cdef int ival * cdef long lval */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":3357 * cdef SingleComplex fcval * cdef DoubleComplex dcval * cdef void *vval=NULL # <<<<<<<<<<<<<< * if val is None: * val = 1 */ __pyx_v_vval = NULL; /* "ga4py/ga.pyx":3358 * cdef DoubleComplex dcval * cdef void *vval=NULL * if val is None: # <<<<<<<<<<<<<< * val = 1 * vval = _convert_multiplier(gtype, val, */ __pyx_t_1 = (__pyx_v_val == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/ga.pyx":3359 * cdef void *vval=NULL * if val is None: * val = 1 # <<<<<<<<<<<<<< * vval = _convert_multiplier(gtype, val, * &ival, &lval, &llval, */ __Pyx_INCREF(__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_val, __pyx_int_1); goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":3363 * &ival, &lval, &llval, * &fval, &dval, &ldval, * &fcval, &dcval) # <<<<<<<<<<<<<< * GA_Randomize(g_a, vval) * */ __pyx_v_vval = __pyx_f_5ga4py_2ga__convert_multiplier(__pyx_v_gtype, __pyx_v_val, (&__pyx_v_ival), (&__pyx_v_lval), (&__pyx_v_llval), (&__pyx_v_fval), (&__pyx_v_dval), (&__pyx_v_ldval), (&__pyx_v_fcval), (&__pyx_v_dcval)); /* "ga4py/ga.pyx":3364 * &fval, &dval, &ldval, * &fcval, &dcval) * GA_Randomize(g_a, vval) # <<<<<<<<<<<<<< * * def read_inc(int g_a, subscript, long inc=1): */ GA_Randomize(__pyx_v_g_a, __pyx_v_vval); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XDECREF(__pyx_v_val); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_253read_inc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_252read_inc[] = "read_inc(int g_a, subscript, long inc=1)\nAtomically read and increment an element in an integer array. \n\n This is a one-sided and atomic operation.\n\n :Parameters:\n g_a : int\n the array handle\n subscript : 1D array-like of integers\n index for the referenced element\n inc : long\n the increment\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_253read_inc = {__Pyx_NAMESTR("read_inc"), (PyCFunction)__pyx_pw_5ga4py_2ga_253read_inc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_252read_inc)}; static PyObject *__pyx_pw_5ga4py_2ga_253read_inc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_subscript = 0; long __pyx_v_inc; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("read_inc (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__subscript,&__pyx_n_s__inc,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__subscript)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("read_inc", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3366; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__inc); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_inc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3366; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3366; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_subscript = values[1]; if (values[2]) { __pyx_v_inc = __Pyx_PyInt_AsLong(values[2]); if (unlikely((__pyx_v_inc == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3366; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { __pyx_v_inc = ((long)1); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("read_inc", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3366; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.read_inc", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_252read_inc(__pyx_self, __pyx_v_g_a, __pyx_v_subscript, __pyx_v_inc); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3366 * GA_Randomize(g_a, vval) * * def read_inc(int g_a, subscript, long inc=1): # <<<<<<<<<<<<<< * """Atomically read and increment an element in an integer array. * */ static PyObject *__pyx_pf_5ga4py_2ga_252read_inc(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_subscript, long __pyx_v_inc) { PyArrayObject *__pyx_v_subscript_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_subscript_nd; __Pyx_Buffer __pyx_pybuffer_subscript_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("read_inc", 0); __pyx_pybuffer_subscript_nd.pybuffer.buf = NULL; __pyx_pybuffer_subscript_nd.refcount = 0; __pyx_pybuffernd_subscript_nd.data = NULL; __pyx_pybuffernd_subscript_nd.rcbuffer = &__pyx_pybuffer_subscript_nd; /* "ga4py/ga.pyx":3381 * """ * cdef np.ndarray[np.int64_t, ndim=1] subscript_nd * subscript_nd = _inta64(subscript) # <<<<<<<<<<<<<< * return NGA_Read_inc64(g_a, subscript_nd.data, inc) * */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_subscript)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_subscript_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_subscript_nd.diminfo[0].strides = __pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subscript_nd.diminfo[0].shape = __pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_subscript_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":3382 * cdef np.ndarray[np.int64_t, ndim=1] subscript_nd * subscript_nd = _inta64(subscript) * return NGA_Read_inc64(g_a, subscript_nd.data, inc) # <<<<<<<<<<<<<< * * def register_dtype(dtype): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(NGA_Read_inc64(__pyx_v_g_a, ((int64_t *)__pyx_v_subscript_nd->data), __pyx_v_inc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.read_inc", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_subscript_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_255register_dtype(PyObject *__pyx_self, PyObject *__pyx_v_dtype); /*proto*/ static char __pyx_doc_5ga4py_2ga_254register_dtype[] = "register_dtype(dtype)\nCreates a new data type based on the given dtype.\n\n :Parameters:\n dtype : dtype\n the numpy dtype to register\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_255register_dtype = {__Pyx_NAMESTR("register_dtype"), (PyCFunction)__pyx_pw_5ga4py_2ga_255register_dtype, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_254register_dtype)}; static PyObject *__pyx_pw_5ga4py_2ga_255register_dtype(PyObject *__pyx_self, PyObject *__pyx_v_dtype) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("register_dtype (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_254register_dtype(__pyx_self, ((PyObject *)__pyx_v_dtype)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3384 * return NGA_Read_inc64(g_a, subscript_nd.data, inc) * * def register_dtype(dtype): # <<<<<<<<<<<<<< * """Creates a new data type based on the given dtype. * */ static PyObject *__pyx_pf_5ga4py_2ga_254register_dtype(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dtype) { int __pyx_v_gatype; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; size_t __pyx_t_3; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("register_dtype", 0); __Pyx_INCREF(__pyx_v_dtype); /* "ga4py/ga.pyx":3393 * """ * cdef int gatype * dtype = np.dtype(dtype) # just in case it's not really a dtype instance # <<<<<<<<<<<<<< * gatype = NGA_Register_type(dtype.itemsize) * _to_dtype[gatype] = dtype */ __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_dtype, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":3394 * cdef int gatype * dtype = np.dtype(dtype) # just in case it's not really a dtype instance * gatype = NGA_Register_type(dtype.itemsize) # <<<<<<<<<<<<<< * _to_dtype[gatype] = dtype * return gatype */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s__itemsize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyInt_AsSize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (size_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_gatype = NGA_Register_type(__pyx_t_3); /* "ga4py/ga.pyx":3395 * dtype = np.dtype(dtype) # just in case it's not really a dtype instance * gatype = NGA_Register_type(dtype.itemsize) * _to_dtype[gatype] = dtype # <<<<<<<<<<<<<< * return gatype * */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3395; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (__Pyx_SetItemInt(__pyx_t_2, __pyx_v_gatype, __pyx_v_dtype, sizeof(int), PyInt_FromLong, 0, 1, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3395; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":3396 * gatype = NGA_Register_type(dtype.itemsize) * _to_dtype[gatype] = dtype * return gatype # <<<<<<<<<<<<<< * * def register_type(size_t bytes): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = PyInt_FromLong(__pyx_v_gatype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3396; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.ga.register_dtype", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_dtype); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_257register_type(PyObject *__pyx_self, PyObject *__pyx_arg_bytes); /*proto*/ static char __pyx_doc_5ga4py_2ga_256register_type[] = "register_type(size_t bytes)\nCreates a new data type of size bytes.\n\n :Parameters:\n bytes : size_t\n the size of the new data type\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_257register_type = {__Pyx_NAMESTR("register_type"), (PyCFunction)__pyx_pw_5ga4py_2ga_257register_type, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_256register_type)}; static PyObject *__pyx_pw_5ga4py_2ga_257register_type(PyObject *__pyx_self, PyObject *__pyx_arg_bytes) { size_t __pyx_v_bytes; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("register_type (wrapper)", 0); assert(__pyx_arg_bytes); { __pyx_v_bytes = __Pyx_PyInt_AsSize_t(__pyx_arg_bytes); if (unlikely((__pyx_v_bytes == (size_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3398; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.register_type", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_256register_type(__pyx_self, ((size_t)__pyx_v_bytes)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3398 * return gatype * * def register_type(size_t bytes): # <<<<<<<<<<<<<< * """Creates a new data type of size bytes. * */ static PyObject *__pyx_pf_5ga4py_2ga_256register_type(CYTHON_UNUSED PyObject *__pyx_self, size_t __pyx_v_bytes) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("register_type", 0); /* "ga4py/ga.pyx":3406 * * """ * return NGA_Register_type(bytes) # <<<<<<<<<<<<<< * * def recip(int g_a, lo=None, hi=None): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(NGA_Register_type(__pyx_v_bytes)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.register_type", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_259recip(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_258recip[] = "recip(int g_a, lo=None, hi=None)\nTake element-wise reciprocal of the array or patch.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_259recip = {__Pyx_NAMESTR("recip"), (PyCFunction)__pyx_pw_5ga4py_2ga_259recip, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_258recip)}; static PyObject *__pyx_pw_5ga4py_2ga_259recip(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("recip (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/ga.pyx":3408 * return NGA_Register_type(bytes) * * def recip(int g_a, lo=None, hi=None): # <<<<<<<<<<<<<< * """Take element-wise reciprocal of the array or patch. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "recip") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3408; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3408; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("recip", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3408; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.recip", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_258recip(__pyx_self, __pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_258recip(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyArrayObject *__pyx_v_lo_nd = 0; PyArrayObject *__pyx_v_hi_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_nd; __Pyx_Buffer __pyx_pybuffer_lo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *(*__pyx_t_8)(PyObject *); PyArrayObject *__pyx_t_9 = NULL; int __pyx_t_10; PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("recip", 0); __pyx_pybuffer_lo_nd.pybuffer.buf = NULL; __pyx_pybuffer_lo_nd.refcount = 0; __pyx_pybuffernd_lo_nd.data = NULL; __pyx_pybuffernd_lo_nd.rcbuffer = &__pyx_pybuffer_lo_nd; __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; /* "ga4py/ga.pyx":3415 * """ * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd * if lo is None and hi is None: # <<<<<<<<<<<<<< * GA_Recip(g_a) * else: */ __pyx_t_1 = (__pyx_v_lo == Py_None); if ((__pyx_t_1 != 0)) { __pyx_t_2 = (__pyx_v_hi == Py_None); __pyx_t_3 = (__pyx_t_2 != 0); } else { __pyx_t_3 = (__pyx_t_1 != 0); } if (__pyx_t_3) { /* "ga4py/ga.pyx":3416 * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd * if lo is None and hi is None: * GA_Recip(g_a) # <<<<<<<<<<<<<< * else: * lo_nd,hi_nd = _lohi(g_a,lo,hi) */ GA_Recip(__pyx_v_g_a); goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":3418 * GA_Recip(g_a) * else: * lo_nd,hi_nd = _lohi(g_a,lo,hi) # <<<<<<<<<<<<<< * GA_Recip_patch64(g_a, lo_nd.data, hi_nd.data) * */ __pyx_t_4 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) { PyObject* sequence = __pyx_t_4; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_5 = PyList_GET_ITEM(sequence, 0); __pyx_t_6 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); #endif __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_9 = 0; __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = ((PyArrayObject *)__pyx_t_6); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_13, __pyx_t_12, __pyx_t_11); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_9 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/ga.pyx":3419 * else: * lo_nd,hi_nd = _lohi(g_a,lo,hi) * GA_Recip_patch64(g_a, lo_nd.data, hi_nd.data) # <<<<<<<<<<<<<< * * def release(int g_a, lo=None, hi=None): */ GA_Recip_patch64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data)); } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.recip", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_lo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_261release(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_260release[] = "release(int g_a, lo=None, hi=None)\nReleases access to a global array when the data was read only.\n\n Your code should look like:\n\n array = ga.access(g_a)\n # \n ga.release(g_a)\n\n NOTE: see restrictions specified for ga.access\n\n This operation is local. \n \n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_261release = {__Pyx_NAMESTR("release"), (PyCFunction)__pyx_pw_5ga4py_2ga_261release, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_260release)}; static PyObject *__pyx_pw_5ga4py_2ga_261release(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/ga.pyx":3421 * GA_Recip_patch64(g_a, lo_nd.data, hi_nd.data) * * def release(int g_a, lo=None, hi=None): # <<<<<<<<<<<<<< * """Releases access to a global array when the data was read only. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "release") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3421; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3421; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("release", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3421; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.release", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_260release(__pyx_self, __pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_260release(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("release", 0); /* "ga4py/ga.pyx":3435 * * """ * _release_common(g_a, lo, hi, False) # <<<<<<<<<<<<<< * * def release_block(int g_a, int index): */ __pyx_t_1 = __pyx_f_5ga4py_2ga__release_common(__pyx_v_g_a, __pyx_v_lo, __pyx_v_hi, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.release", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_263release_block(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_262release_block[] = "release_block(int g_a, int index)\nReleases access to the block of data specified by the integer index\n when data was accessed as read only.\n \n This is only applicable to block-cyclic data distributions created using\n the simple block-cyclic distribution. This is a local operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_263release_block = {__Pyx_NAMESTR("release_block"), (PyCFunction)__pyx_pw_5ga4py_2ga_263release_block, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_262release_block)}; static PyObject *__pyx_pw_5ga4py_2ga_263release_block(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_index; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_block (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__index,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__index)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("release_block", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3437; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "release_block") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3437; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3437; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_index = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_index == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3437; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("release_block", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3437; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.release_block", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_262release_block(__pyx_self, __pyx_v_g_a, __pyx_v_index); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3437 * _release_common(g_a, lo, hi, False) * * def release_block(int g_a, int index): # <<<<<<<<<<<<<< * """Releases access to the block of data specified by the integer index * when data was accessed as read only. */ static PyObject *__pyx_pf_5ga4py_2ga_262release_block(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_index) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_block", 0); /* "ga4py/ga.pyx":3445 * * """ * NGA_Release_block(g_a, index) # <<<<<<<<<<<<<< * * def release_block_grid(int g_a, subscript): */ NGA_Release_block(__pyx_v_g_a, __pyx_v_index); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_265release_block_grid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_264release_block_grid[] = "release_block_grid(int g_a, subscript)\nReleases access to the block of data specified by the subscript array\n when data was accessed as read only.\n \n This is only applicable to block-cyclic data distributions created using\n the SCALAPACK data distribution.\n \n This is a local operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_265release_block_grid = {__Pyx_NAMESTR("release_block_grid"), (PyCFunction)__pyx_pw_5ga4py_2ga_265release_block_grid, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_264release_block_grid)}; static PyObject *__pyx_pw_5ga4py_2ga_265release_block_grid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_subscript = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_block_grid (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__subscript,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__subscript)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("release_block_grid", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3447; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "release_block_grid") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3447; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3447; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_subscript = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("release_block_grid", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3447; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.release_block_grid", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_264release_block_grid(__pyx_self, __pyx_v_g_a, __pyx_v_subscript); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3447 * NGA_Release_block(g_a, index) * * def release_block_grid(int g_a, subscript): # <<<<<<<<<<<<<< * """Releases access to the block of data specified by the subscript array * when data was accessed as read only. */ static PyObject *__pyx_pf_5ga4py_2ga_264release_block_grid(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_subscript) { PyArrayObject *__pyx_v_subscript_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_subscript_nd; __Pyx_Buffer __pyx_pybuffer_subscript_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("release_block_grid", 0); __pyx_pybuffer_subscript_nd.pybuffer.buf = NULL; __pyx_pybuffer_subscript_nd.refcount = 0; __pyx_pybuffernd_subscript_nd.data = NULL; __pyx_pybuffernd_subscript_nd.rcbuffer = &__pyx_pybuffer_subscript_nd; /* "ga4py/ga.pyx":3458 * """ * cdef np.ndarray[np.int32_t, ndim=1] subscript_nd * subscript_nd = _inta32(subscript) # <<<<<<<<<<<<<< * NGA_Release_block_grid(g_a, subscript_nd.data) * */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta32(__pyx_v_subscript)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_subscript_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_subscript_nd.diminfo[0].strides = __pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subscript_nd.diminfo[0].shape = __pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_subscript_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":3459 * cdef np.ndarray[np.int32_t, ndim=1] subscript_nd * subscript_nd = _inta32(subscript) * NGA_Release_block_grid(g_a, subscript_nd.data) # <<<<<<<<<<<<<< * * def release_block_segment(int g_a, int proc): */ NGA_Release_block_grid(__pyx_v_g_a, ((int *)__pyx_v_subscript_nd->data)); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.release_block_grid", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_subscript_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_267release_block_segment(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_266release_block_segment[] = "release_block_segment(int g_a, int proc)\nReleases access to the block of locally held data for a block-cyclic\n array, when data was accessed as read-only.\n \n This is a local operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_267release_block_segment = {__Pyx_NAMESTR("release_block_segment"), (PyCFunction)__pyx_pw_5ga4py_2ga_267release_block_segment, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_266release_block_segment)}; static PyObject *__pyx_pw_5ga4py_2ga_267release_block_segment(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_proc; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_block_segment (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__proc,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__proc)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("release_block_segment", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3461; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "release_block_segment") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3461; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3461; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_proc = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_proc == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3461; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("release_block_segment", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3461; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.release_block_segment", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_266release_block_segment(__pyx_self, __pyx_v_g_a, __pyx_v_proc); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3461 * NGA_Release_block_grid(g_a, subscript_nd.data) * * def release_block_segment(int g_a, int proc): # <<<<<<<<<<<<<< * """Releases access to the block of locally held data for a block-cyclic * array, when data was accessed as read-only. */ static PyObject *__pyx_pf_5ga4py_2ga_266release_block_segment(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_proc) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_block_segment", 0); /* "ga4py/ga.pyx":3468 * * """ * NGA_Release_block_segment(g_a, proc) # <<<<<<<<<<<<<< * * cdef _release_common(int g_a, lo, hi, bint update): */ NGA_Release_block_segment(__pyx_v_g_a, __pyx_v_proc); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3470 * NGA_Release_block_segment(g_a, proc) * * cdef _release_common(int g_a, lo, hi, bint update): # <<<<<<<<<<<<<< * """TODO""" * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd, lo_dst, hi_dst */ static PyObject *__pyx_f_5ga4py_2ga__release_common(int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, int __pyx_v_update) { PyArrayObject *__pyx_v_lo_nd = 0; PyArrayObject *__pyx_v_hi_nd = 0; PyArrayObject *__pyx_v_lo_dst = 0; PyArrayObject *__pyx_v_hi_dst = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_dst; __Pyx_Buffer __pyx_pybuffer_hi_dst; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_dst; __Pyx_Buffer __pyx_pybuffer_lo_dst; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_nd; __Pyx_Buffer __pyx_pybuffer_lo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *(*__pyx_t_5)(PyObject *); PyArrayObject *__pyx_t_6 = NULL; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; long __pyx_t_11; int __pyx_t_12; long __pyx_t_13; int __pyx_t_14; int __pyx_t_15; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_release_common", 0); __pyx_pybuffer_lo_nd.pybuffer.buf = NULL; __pyx_pybuffer_lo_nd.refcount = 0; __pyx_pybuffernd_lo_nd.data = NULL; __pyx_pybuffernd_lo_nd.rcbuffer = &__pyx_pybuffer_lo_nd; __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; __pyx_pybuffer_lo_dst.pybuffer.buf = NULL; __pyx_pybuffer_lo_dst.refcount = 0; __pyx_pybuffernd_lo_dst.data = NULL; __pyx_pybuffernd_lo_dst.rcbuffer = &__pyx_pybuffer_lo_dst; __pyx_pybuffer_hi_dst.pybuffer.buf = NULL; __pyx_pybuffer_hi_dst.refcount = 0; __pyx_pybuffernd_hi_dst.data = NULL; __pyx_pybuffernd_hi_dst.rcbuffer = &__pyx_pybuffer_hi_dst; /* "ga4py/ga.pyx":3474 * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd, lo_dst, hi_dst * # first things first, if no data is owned, return silently * lo_dst,hi_dst = distribution(g_a) # <<<<<<<<<<<<<< * # convet hi_dst back to GA inclusive indexing convention * hi_dst -= 1 */ __pyx_t_1 = __pyx_f_5ga4py_2ga_distribution(__pyx_v_g_a, 0, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3474; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3474; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_3 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3474; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3474; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3474; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3474; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L4_unpacking_done; __pyx_L3_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3474; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L4_unpacking_done:; } if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3474; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3474; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_dst, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_lo_dst.diminfo[0].strides = __pyx_pybuffernd_lo_dst.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_dst.diminfo[0].shape = __pyx_pybuffernd_lo_dst.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3474; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_lo_dst = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = ((PyArrayObject *)__pyx_t_3); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_dst, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_hi_dst.diminfo[0].strides = __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_dst.diminfo[0].shape = __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3474; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __pyx_v_hi_dst = ((PyArrayObject *)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":3476 * lo_dst,hi_dst = distribution(g_a) * # convet hi_dst back to GA inclusive indexing convention * hi_dst -= 1 # <<<<<<<<<<<<<< * if lo_dst[0] < 0 or hi_dst[0] < 0: * return */ __pyx_t_1 = PyNumber_InPlaceSubtract(((PyObject *)__pyx_v_hi_dst), __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3476; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3476; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_dst, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_hi_dst.diminfo[0].strides = __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_dst.diminfo[0].shape = __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3476; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_hi_dst, ((PyArrayObject *)__pyx_t_1)); __pyx_t_1 = 0; /* "ga4py/ga.pyx":3477 * # convet hi_dst back to GA inclusive indexing convention * hi_dst -= 1 * if lo_dst[0] < 0 or hi_dst[0] < 0: # <<<<<<<<<<<<<< * return * if lo is not None: */ __pyx_t_11 = 0; __pyx_t_7 = -1; if (__pyx_t_11 < 0) { __pyx_t_11 += __pyx_pybuffernd_lo_dst.diminfo[0].shape; if (unlikely(__pyx_t_11 < 0)) __pyx_t_7 = 0; } else if (unlikely(__pyx_t_11 >= __pyx_pybuffernd_lo_dst.diminfo[0].shape)) __pyx_t_7 = 0; if (unlikely(__pyx_t_7 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_7); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3477; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_12 = (((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_lo_dst.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_lo_dst.diminfo[0].strides)) < 0) != 0); if (!__pyx_t_12) { __pyx_t_13 = 0; __pyx_t_7 = -1; if (__pyx_t_13 < 0) { __pyx_t_13 += __pyx_pybuffernd_hi_dst.diminfo[0].shape; if (unlikely(__pyx_t_13 < 0)) __pyx_t_7 = 0; } else if (unlikely(__pyx_t_13 >= __pyx_pybuffernd_hi_dst.diminfo[0].shape)) __pyx_t_7 = 0; if (unlikely(__pyx_t_7 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_7); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3477; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_14 = (((*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_hi_dst.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_hi_dst.diminfo[0].strides)) < 0) != 0); __pyx_t_15 = __pyx_t_14; } else { __pyx_t_15 = __pyx_t_12; } if (__pyx_t_15) { /* "ga4py/ga.pyx":3478 * hi_dst -= 1 * if lo_dst[0] < 0 or hi_dst[0] < 0: * return # <<<<<<<<<<<<<< * if lo is not None: * lo_nd = _inta64(lo) */ __Pyx_XDECREF(__pyx_r); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; goto __pyx_L5; } __pyx_L5:; /* "ga4py/ga.pyx":3479 * if lo_dst[0] < 0 or hi_dst[0] < 0: * return * if lo is not None: # <<<<<<<<<<<<<< * lo_nd = _inta64(lo) * else: */ __pyx_t_15 = (__pyx_v_lo != Py_None); __pyx_t_12 = (__pyx_t_15 != 0); if (__pyx_t_12) { /* "ga4py/ga.pyx":3480 * return * if lo is not None: * lo_nd = _inta64(lo) # <<<<<<<<<<<<<< * else: * lo_nd = lo_dst */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_lo)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3480; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3480; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L6; } /*else*/ { /* "ga4py/ga.pyx":3482 * lo_nd = _inta64(lo) * else: * lo_nd = lo_dst # <<<<<<<<<<<<<< * if hi is not None: * hi_nd = _inta64(hi) */ { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_dst, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3482; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __Pyx_INCREF(((PyObject *)__pyx_v_lo_dst)); __pyx_v_lo_nd = __pyx_v_lo_dst; } __pyx_L6:; /* "ga4py/ga.pyx":3483 * else: * lo_nd = lo_dst * if hi is not None: # <<<<<<<<<<<<<< * hi_nd = _inta64(hi) * else: */ __pyx_t_12 = (__pyx_v_hi != Py_None); __pyx_t_15 = (__pyx_t_12 != 0); if (__pyx_t_15) { /* "ga4py/ga.pyx":3484 * lo_nd = lo_dst * if hi is not None: * hi_nd = _inta64(hi) # <<<<<<<<<<<<<< * else: * hi_nd = hi_dst */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_hi)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3484; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3484; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L7; } /*else*/ { /* "ga4py/ga.pyx":3486 * hi_nd = _inta64(hi) * else: * hi_nd = hi_dst # <<<<<<<<<<<<<< * # sanity checks * if np.sometrue(lo_nd>hi_nd): */ { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_dst, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_7 < 0)) { PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3486; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __Pyx_INCREF(((PyObject *)__pyx_v_hi_dst)); __pyx_v_hi_nd = __pyx_v_hi_dst; } __pyx_L7:; /* "ga4py/ga.pyx":3488 * hi_nd = hi_dst * # sanity checks * if np.sometrue(lo_nd>hi_nd): # <<<<<<<<<<<<<< * raise ValueError,"lo>hi lo=%s hi=%s"%(lo_nd,hi_nd) * if np.sometrue(lo_ndhi_nd): * raise ValueError,"lo>hi lo=%s hi=%s"%(lo_nd,hi_nd) # <<<<<<<<<<<<<< * if np.sometrue(lo_ndhi_nd): * raise ValueError,"lo>hi lo=%s hi=%s"%(lo_nd,hi_nd) * if np.sometrue(lo_ndhi_dst): */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3490; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__sometrue); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3490; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_lo_nd), ((PyObject *)__pyx_v_lo_dst), Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3490; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3490; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3490; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_15 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3490; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_15) { /* "ga4py/ga.pyx":3491 * raise ValueError,"lo>hi lo=%s hi=%s"%(lo_nd,hi_nd) * if np.sometrue(lo_ndhi_dst): * raise ValueError,"hi out of bounds hi_dst=%s hi=%s"%(hi_dst,hi_nd) */ __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_v_lo_dst)); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_lo_dst)); __Pyx_GIVEREF(((PyObject *)__pyx_v_lo_dst)); __Pyx_INCREF(((PyObject *)__pyx_v_lo_nd)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_lo_nd)); __Pyx_GIVEREF(((PyObject *)__pyx_v_lo_nd)); __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_12), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L9; } __pyx_L9:; /* "ga4py/ga.pyx":3492 * if np.sometrue(lo_ndhi_dst): # <<<<<<<<<<<<<< * raise ValueError,"hi out of bounds hi_dst=%s hi=%s"%(hi_dst,hi_nd) * if update: */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__sometrue); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_RichCompare(((PyObject *)__pyx_v_hi_nd), ((PyObject *)__pyx_v_hi_dst), Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_15 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_15) { /* "ga4py/ga.pyx":3493 * raise ValueError,"lo out of bounds lo_dst=%s lo=%s"%(lo_dst,lo_nd) * if np.sometrue(hi_nd>hi_dst): * raise ValueError,"hi out of bounds hi_dst=%s hi=%s"%(hi_dst,hi_nd) # <<<<<<<<<<<<<< * if update: * NGA_Release_update64(g_a, lo_nd.data, hi_nd.data) */ __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3493; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)__pyx_v_hi_dst)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_hi_dst)); __Pyx_GIVEREF(((PyObject *)__pyx_v_hi_dst)); __Pyx_INCREF(((PyObject *)__pyx_v_hi_nd)); PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_hi_nd)); __Pyx_GIVEREF(((PyObject *)__pyx_v_hi_nd)); __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_13), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3493; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_1), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3493; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L10; } __pyx_L10:; /* "ga4py/ga.pyx":3494 * if np.sometrue(hi_nd>hi_dst): * raise ValueError,"hi out of bounds hi_dst=%s hi=%s"%(hi_dst,hi_nd) * if update: # <<<<<<<<<<<<<< * NGA_Release_update64(g_a, lo_nd.data, hi_nd.data) * else: */ __pyx_t_15 = (__pyx_v_update != 0); if (__pyx_t_15) { /* "ga4py/ga.pyx":3495 * raise ValueError,"hi out of bounds hi_dst=%s hi=%s"%(hi_dst,hi_nd) * if update: * NGA_Release_update64(g_a, lo_nd.data, hi_nd.data) # <<<<<<<<<<<<<< * else: * NGA_Release64(g_a, lo_nd.data, hi_nd.data) */ NGA_Release_update64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data)); goto __pyx_L11; } /*else*/ { /* "ga4py/ga.pyx":3497 * NGA_Release_update64(g_a, lo_nd.data, hi_nd.data) * else: * NGA_Release64(g_a, lo_nd.data, hi_nd.data) # <<<<<<<<<<<<<< * * def release_ghost_element(int g_a, subscript): */ NGA_Release64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data)); } __pyx_L11:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga._release_common", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_dst.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_dst.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_lo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_lo_dst); __Pyx_XDECREF((PyObject *)__pyx_v_hi_dst); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_269release_ghost_element(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_268release_ghost_element[] = "release_ghost_element(int g_a, subscript)\nReleases access to the locally held data for an array with ghost\n elements, when data was accessed as read-only.\n \n This is a local operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_269release_ghost_element = {__Pyx_NAMESTR("release_ghost_element"), (PyCFunction)__pyx_pw_5ga4py_2ga_269release_ghost_element, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_268release_ghost_element)}; static PyObject *__pyx_pw_5ga4py_2ga_269release_ghost_element(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_subscript = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_ghost_element (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__subscript,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__subscript)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("release_ghost_element", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3499; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "release_ghost_element") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3499; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3499; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_subscript = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("release_ghost_element", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3499; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.release_ghost_element", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_268release_ghost_element(__pyx_self, __pyx_v_g_a, __pyx_v_subscript); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3499 * NGA_Release64(g_a, lo_nd.data, hi_nd.data) * * def release_ghost_element(int g_a, subscript): # <<<<<<<<<<<<<< * """Releases access to the locally held data for an array with ghost * elements, when data was accessed as read-only. */ static PyObject *__pyx_pf_5ga4py_2ga_268release_ghost_element(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_subscript) { PyArrayObject *__pyx_v_subscript_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_subscript_nd; __Pyx_Buffer __pyx_pybuffer_subscript_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("release_ghost_element", 0); __pyx_pybuffer_subscript_nd.pybuffer.buf = NULL; __pyx_pybuffer_subscript_nd.refcount = 0; __pyx_pybuffernd_subscript_nd.data = NULL; __pyx_pybuffernd_subscript_nd.rcbuffer = &__pyx_pybuffer_subscript_nd; /* "ga4py/ga.pyx":3507 * """ * cdef np.ndarray[np.int64_t, ndim=1] subscript_nd * subscript_nd = _inta64(subscript) # <<<<<<<<<<<<<< * NGA_Release_ghost_element64(g_a, subscript_nd.data) * */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_subscript)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3507; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_subscript_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_subscript_nd.diminfo[0].strides = __pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subscript_nd.diminfo[0].shape = __pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3507; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_subscript_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":3508 * cdef np.ndarray[np.int64_t, ndim=1] subscript_nd * subscript_nd = _inta64(subscript) * NGA_Release_ghost_element64(g_a, subscript_nd.data) # <<<<<<<<<<<<<< * * def release_ghosts(int g_a): */ NGA_Release_ghost_element64(__pyx_v_g_a, ((int64_t *)__pyx_v_subscript_nd->data)); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.release_ghost_element", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_subscript_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_271release_ghosts(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_270release_ghosts[] = "release_ghosts(int g_a)\nReleases access to the locally held block of data containing ghost\n elements, when data was accessed as read-only.\n \n This is a local operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_271release_ghosts = {__Pyx_NAMESTR("release_ghosts"), (PyCFunction)__pyx_pw_5ga4py_2ga_271release_ghosts, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_270release_ghosts)}; static PyObject *__pyx_pw_5ga4py_2ga_271release_ghosts(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_ghosts (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3510; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.release_ghosts", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_270release_ghosts(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3510 * NGA_Release_ghost_element64(g_a, subscript_nd.data) * * def release_ghosts(int g_a): # <<<<<<<<<<<<<< * """Releases access to the locally held block of data containing ghost * elements, when data was accessed as read-only. */ static PyObject *__pyx_pf_5ga4py_2ga_270release_ghosts(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_ghosts", 0); /* "ga4py/ga.pyx":3517 * * """ * NGA_Release_ghosts(g_a) # <<<<<<<<<<<<<< * * def release_update(int g_a, lo=None, hi=None): */ NGA_Release_ghosts(__pyx_v_g_a); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_273release_update(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_272release_update[] = "release_update(int g_a, lo=None, hi=None)\nReleases access to the data.\n \n It must be used if the data was accessed for writing.\n NOTE: see restrictions specified for ga.access.\n \n This operation is local. \n \n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_273release_update = {__Pyx_NAMESTR("release_update"), (PyCFunction)__pyx_pw_5ga4py_2ga_273release_update, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_272release_update)}; static PyObject *__pyx_pw_5ga4py_2ga_273release_update(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_update (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/ga.pyx":3519 * NGA_Release_ghosts(g_a) * * def release_update(int g_a, lo=None, hi=None): # <<<<<<<<<<<<<< * """Releases access to the data. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "release_update") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3519; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3519; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("release_update", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3519; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.release_update", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_272release_update(__pyx_self, __pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_272release_update(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("release_update", 0); /* "ga4py/ga.pyx":3528 * * """ * _release_common(g_a, lo, hi, True) # <<<<<<<<<<<<<< * * def release_update_block(int g_a, int index): */ __pyx_t_1 = __pyx_f_5ga4py_2ga__release_common(__pyx_v_g_a, __pyx_v_lo, __pyx_v_hi, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.release_update", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_275release_update_block(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_274release_update_block[] = "release_update_block(int g_a, int index)\nReleases access to the block of data specified by the integer index\n when data was accessed in read-write mode.\n \n This is only applicable to block-cyclic data distributions created using\n the simple block-cyclic distribution.\n \n This is a local operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_275release_update_block = {__Pyx_NAMESTR("release_update_block"), (PyCFunction)__pyx_pw_5ga4py_2ga_275release_update_block, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_274release_update_block)}; static PyObject *__pyx_pw_5ga4py_2ga_275release_update_block(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_index; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_update_block (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__index,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__index)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("release_update_block", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3530; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "release_update_block") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3530; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3530; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_index = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_index == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3530; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("release_update_block", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3530; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.release_update_block", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_274release_update_block(__pyx_self, __pyx_v_g_a, __pyx_v_index); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3530 * _release_common(g_a, lo, hi, True) * * def release_update_block(int g_a, int index): # <<<<<<<<<<<<<< * """Releases access to the block of data specified by the integer index * when data was accessed in read-write mode. */ static PyObject *__pyx_pf_5ga4py_2ga_274release_update_block(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_index) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_update_block", 0); /* "ga4py/ga.pyx":3540 * * """ * NGA_Release_update_block(g_a, index) # <<<<<<<<<<<<<< * * def release_update_block_grid(int g_a, subscript): */ NGA_Release_update_block(__pyx_v_g_a, __pyx_v_index); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_277release_update_block_grid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_276release_update_block_grid[] = "release_update_block_grid(int g_a, subscript)\nReleases access to the block of data specified by the subscript array\n when data was accessed in read-write mode.\n \n This is only applicable to block-cyclic data distributions created using\n the SCALAPACK data distribution.\n \n This is a local operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_277release_update_block_grid = {__Pyx_NAMESTR("release_update_block_grid"), (PyCFunction)__pyx_pw_5ga4py_2ga_277release_update_block_grid, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_276release_update_block_grid)}; static PyObject *__pyx_pw_5ga4py_2ga_277release_update_block_grid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_subscript = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_update_block_grid (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__subscript,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__subscript)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("release_update_block_grid", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3542; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "release_update_block_grid") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3542; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3542; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_subscript = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("release_update_block_grid", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3542; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.release_update_block_grid", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_276release_update_block_grid(__pyx_self, __pyx_v_g_a, __pyx_v_subscript); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3542 * NGA_Release_update_block(g_a, index) * * def release_update_block_grid(int g_a, subscript): # <<<<<<<<<<<<<< * """Releases access to the block of data specified by the subscript array * when data was accessed in read-write mode. */ static PyObject *__pyx_pf_5ga4py_2ga_276release_update_block_grid(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_subscript) { PyArrayObject *__pyx_v_subscript_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_subscript_nd; __Pyx_Buffer __pyx_pybuffer_subscript_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("release_update_block_grid", 0); __pyx_pybuffer_subscript_nd.pybuffer.buf = NULL; __pyx_pybuffer_subscript_nd.refcount = 0; __pyx_pybuffernd_subscript_nd.data = NULL; __pyx_pybuffernd_subscript_nd.rcbuffer = &__pyx_pybuffer_subscript_nd; /* "ga4py/ga.pyx":3553 * """ * cdef np.ndarray[np.int32_t, ndim=1] subscript_nd * subscript_nd = _inta32(subscript) # <<<<<<<<<<<<<< * NGA_Release_update_block_grid(g_a, subscript_nd.data) * */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta32(__pyx_v_subscript)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3553; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_subscript_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_subscript_nd.diminfo[0].strides = __pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subscript_nd.diminfo[0].shape = __pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3553; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_subscript_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":3554 * cdef np.ndarray[np.int32_t, ndim=1] subscript_nd * subscript_nd = _inta32(subscript) * NGA_Release_update_block_grid(g_a, subscript_nd.data) # <<<<<<<<<<<<<< * * def release_update_block_segment(int g_a, int proc): */ NGA_Release_update_block_grid(__pyx_v_g_a, ((int *)__pyx_v_subscript_nd->data)); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.release_update_block_grid", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_subscript_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_279release_update_block_segment(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_278release_update_block_segment[] = "release_update_block_segment(int g_a, int proc)\nReleases access to the block of locally held data for a block-cyclic\n array, when data was accessed as read-only.\n \n This is a local operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_279release_update_block_segment = {__Pyx_NAMESTR("release_update_block_segment"), (PyCFunction)__pyx_pw_5ga4py_2ga_279release_update_block_segment, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_278release_update_block_segment)}; static PyObject *__pyx_pw_5ga4py_2ga_279release_update_block_segment(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_proc; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_update_block_segment (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__proc,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__proc)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("release_update_block_segment", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "release_update_block_segment") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_proc = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_proc == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("release_update_block_segment", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.release_update_block_segment", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_278release_update_block_segment(__pyx_self, __pyx_v_g_a, __pyx_v_proc); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3556 * NGA_Release_update_block_grid(g_a, subscript_nd.data) * * def release_update_block_segment(int g_a, int proc): # <<<<<<<<<<<<<< * """Releases access to the block of locally held data for a block-cyclic * array, when data was accessed as read-only. */ static PyObject *__pyx_pf_5ga4py_2ga_278release_update_block_segment(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_proc) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_update_block_segment", 0); /* "ga4py/ga.pyx":3563 * * """ * NGA_Release_update_block_segment(g_a, proc) # <<<<<<<<<<<<<< * * def release_update_ghost_element(int g_a, subscript): */ NGA_Release_update_block_segment(__pyx_v_g_a, __pyx_v_proc); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_281release_update_ghost_element(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_280release_update_ghost_element[] = "release_update_ghost_element(int g_a, subscript)\nReleases access to the locally held data for an array with ghost\n elements, when data was accessed in read-write mode.\n \n This is a local operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_281release_update_ghost_element = {__Pyx_NAMESTR("release_update_ghost_element"), (PyCFunction)__pyx_pw_5ga4py_2ga_281release_update_ghost_element, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_280release_update_ghost_element)}; static PyObject *__pyx_pw_5ga4py_2ga_281release_update_ghost_element(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_subscript = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_update_ghost_element (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__subscript,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__subscript)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("release_update_ghost_element", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3565; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "release_update_ghost_element") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3565; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3565; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_subscript = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("release_update_ghost_element", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3565; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.release_update_ghost_element", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_280release_update_ghost_element(__pyx_self, __pyx_v_g_a, __pyx_v_subscript); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3565 * NGA_Release_update_block_segment(g_a, proc) * * def release_update_ghost_element(int g_a, subscript): # <<<<<<<<<<<<<< * """Releases access to the locally held data for an array with ghost * elements, when data was accessed in read-write mode. */ static PyObject *__pyx_pf_5ga4py_2ga_280release_update_ghost_element(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_subscript) { PyArrayObject *__pyx_v_subscript_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_subscript_nd; __Pyx_Buffer __pyx_pybuffer_subscript_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("release_update_ghost_element", 0); __pyx_pybuffer_subscript_nd.pybuffer.buf = NULL; __pyx_pybuffer_subscript_nd.refcount = 0; __pyx_pybuffernd_subscript_nd.data = NULL; __pyx_pybuffernd_subscript_nd.rcbuffer = &__pyx_pybuffer_subscript_nd; /* "ga4py/ga.pyx":3573 * """ * cdef np.ndarray[np.int64_t, ndim=1] subscript_nd * subscript_nd = _inta64(subscript) # <<<<<<<<<<<<<< * NGA_Release_update_ghost_element64(g_a, subscript_nd.data) * pass */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_subscript)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3573; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_subscript_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_subscript_nd.diminfo[0].strides = __pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subscript_nd.diminfo[0].shape = __pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3573; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_subscript_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":3574 * cdef np.ndarray[np.int64_t, ndim=1] subscript_nd * subscript_nd = _inta64(subscript) * NGA_Release_update_ghost_element64(g_a, subscript_nd.data) # <<<<<<<<<<<<<< * pass * */ NGA_Release_update_ghost_element64(__pyx_v_g_a, ((int64_t *)__pyx_v_subscript_nd->data)); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.release_update_ghost_element", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subscript_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_subscript_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_283release_update_ghosts(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_282release_update_ghosts[] = "release_update_ghosts(int g_a)\nReleases access to the locally held block of data containing ghost\n elements, when data was accessed in read-write mode.\n \n This is a local operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_283release_update_ghosts = {__Pyx_NAMESTR("release_update_ghosts"), (PyCFunction)__pyx_pw_5ga4py_2ga_283release_update_ghosts, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_282release_update_ghosts)}; static PyObject *__pyx_pw_5ga4py_2ga_283release_update_ghosts(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_update_ghosts (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3577; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.release_update_ghosts", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_282release_update_ghosts(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3577 * pass * * def release_update_ghosts(int g_a): # <<<<<<<<<<<<<< * """Releases access to the locally held block of data containing ghost * elements, when data was accessed in read-write mode. */ static PyObject *__pyx_pf_5ga4py_2ga_282release_update_ghosts(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_update_ghosts", 0); /* "ga4py/ga.pyx":3584 * * """ * NGA_Release_update_ghosts(g_a) # <<<<<<<<<<<<<< * * def scale(int g_a, value, lo=None, hi=None): */ NGA_Release_update_ghosts(__pyx_v_g_a); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_285scale(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_284scale[] = "scale(int g_a, value, lo=None, hi=None)\nScales an array by the constant s.\n \n Note that the library is unable to detect errors when the pointed value is\n of different type than the array.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_285scale = {__Pyx_NAMESTR("scale"), (PyCFunction)__pyx_pw_5ga4py_2ga_285scale, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_284scale)}; static PyObject *__pyx_pw_5ga4py_2ga_285scale(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_value = 0; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("scale (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__value,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/ga.pyx":3586 * NGA_Release_update_ghosts(g_a) * * def scale(int g_a, value, lo=None, hi=None): # <<<<<<<<<<<<<< * """Scales an array by the constant s. * */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("scale", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3586; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scale") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3586; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3586; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_value = values[1]; __pyx_v_lo = values[2]; __pyx_v_hi = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("scale", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3586; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.scale", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_284scale(__pyx_self, __pyx_v_g_a, __pyx_v_value, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_284scale(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_value, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyArrayObject *__pyx_v_lo_nd = 0; PyArrayObject *__pyx_v_hi_nd = 0; int __pyx_v_gtype; int __pyx_v_ivalue; long __pyx_v_lvalue; PY_LONG_LONG __pyx_v_llvalue; float __pyx_v_fvalue; double __pyx_v_dvalue; long double __pyx_v_ldvalue; SingleComplex __pyx_v_fcvalue; DoubleComplex __pyx_v_dcvalue; void *__pyx_v_vvalue; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_nd; __Pyx_Buffer __pyx_pybuffer_lo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *(*__pyx_t_8)(PyObject *); PyArrayObject *__pyx_t_9 = NULL; int __pyx_t_10; PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("scale", 0); __pyx_pybuffer_lo_nd.pybuffer.buf = NULL; __pyx_pybuffer_lo_nd.refcount = 0; __pyx_pybuffernd_lo_nd.data = NULL; __pyx_pybuffernd_lo_nd.rcbuffer = &__pyx_pybuffer_lo_nd; __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; /* "ga4py/ga.pyx":3596 * """ * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd * cdef int gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * cdef int ivalue * cdef long lvalue */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":3609 * &ivalue, &lvalue, &llvalue, * &fvalue, &dvalue, &ldvalue, * &fcvalue, &dcvalue) # <<<<<<<<<<<<<< * if lo is None and hi is None: * GA_Scale(g_a, vvalue) */ __pyx_v_vvalue = __pyx_f_5ga4py_2ga__convert_multiplier(__pyx_v_gtype, __pyx_v_value, (&__pyx_v_ivalue), (&__pyx_v_lvalue), (&__pyx_v_llvalue), (&__pyx_v_fvalue), (&__pyx_v_dvalue), (&__pyx_v_ldvalue), (&__pyx_v_fcvalue), (&__pyx_v_dcvalue)); /* "ga4py/ga.pyx":3610 * &fvalue, &dvalue, &ldvalue, * &fcvalue, &dcvalue) * if lo is None and hi is None: # <<<<<<<<<<<<<< * GA_Scale(g_a, vvalue) * else: */ __pyx_t_1 = (__pyx_v_lo == Py_None); if ((__pyx_t_1 != 0)) { __pyx_t_2 = (__pyx_v_hi == Py_None); __pyx_t_3 = (__pyx_t_2 != 0); } else { __pyx_t_3 = (__pyx_t_1 != 0); } if (__pyx_t_3) { /* "ga4py/ga.pyx":3611 * &fcvalue, &dcvalue) * if lo is None and hi is None: * GA_Scale(g_a, vvalue) # <<<<<<<<<<<<<< * else: * lo_nd,hi_nd = _lohi(g_a,lo,hi) */ GA_Scale(__pyx_v_g_a, __pyx_v_vvalue); goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":3613 * GA_Scale(g_a, vvalue) * else: * lo_nd,hi_nd = _lohi(g_a,lo,hi) # <<<<<<<<<<<<<< * NGA_Scale_patch64( * g_a, lo_nd.data, hi_nd.data, vvalue) */ __pyx_t_4 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) { PyObject* sequence = __pyx_t_4; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_5 = PyList_GET_ITEM(sequence, 0); __pyx_t_6 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); #endif __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_9 = 0; __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = ((PyArrayObject *)__pyx_t_6); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_13, __pyx_t_12, __pyx_t_11); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_9 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/ga.pyx":3615 * lo_nd,hi_nd = _lohi(g_a,lo,hi) * NGA_Scale_patch64( * g_a, lo_nd.data, hi_nd.data, vvalue) # <<<<<<<<<<<<<< * * def scale_rows(int g_a, int g_v): */ NGA_Scale_patch64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data), __pyx_v_vvalue); } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.scale", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_lo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_287scale_rows(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_286scale_rows[] = "scale_rows(int g_a, int g_v)\nScales the rows of this matrix g_a using the vector g_v.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_287scale_rows = {__Pyx_NAMESTR("scale_rows"), (PyCFunction)__pyx_pw_5ga4py_2ga_287scale_rows, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_286scale_rows)}; static PyObject *__pyx_pw_5ga4py_2ga_287scale_rows(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_v; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("scale_rows (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_v,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_v)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("scale_rows", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3617; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scale_rows") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3617; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3617; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_v = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_v == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3617; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("scale_rows", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3617; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.scale_rows", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_286scale_rows(__pyx_self, __pyx_v_g_a, __pyx_v_g_v); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3617 * g_a, lo_nd.data, hi_nd.data, vvalue) * * def scale_rows(int g_a, int g_v): # <<<<<<<<<<<<<< * """Scales the rows of this matrix g_a using the vector g_v. * */ static PyObject *__pyx_pf_5ga4py_2ga_286scale_rows(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_v) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("scale_rows", 0); /* "ga4py/ga.pyx":3623 * * """ * GA_Scale_rows(g_a, g_v) # <<<<<<<<<<<<<< * * def scale_cols(int g_a, int g_v): */ GA_Scale_rows(__pyx_v_g_a, __pyx_v_g_v); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_289scale_cols(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_288scale_cols[] = "scale_cols(int g_a, int g_v)\nScales the columns of this matrix g_a using the vector g_v.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_289scale_cols = {__Pyx_NAMESTR("scale_cols"), (PyCFunction)__pyx_pw_5ga4py_2ga_289scale_cols, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_288scale_cols)}; static PyObject *__pyx_pw_5ga4py_2ga_289scale_cols(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_v; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("scale_cols (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_v,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_v)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("scale_cols", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3625; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scale_cols") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3625; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3625; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_v = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_v == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3625; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("scale_cols", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3625; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.scale_cols", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_288scale_cols(__pyx_self, __pyx_v_g_a, __pyx_v_g_v); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3625 * GA_Scale_rows(g_a, g_v) * * def scale_cols(int g_a, int g_v): # <<<<<<<<<<<<<< * """Scales the columns of this matrix g_a using the vector g_v. * */ static PyObject *__pyx_pf_5ga4py_2ga_288scale_cols(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_v) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("scale_cols", 0); /* "ga4py/ga.pyx":3631 * * """ * GA_Scale_cols(g_a, g_v) # <<<<<<<<<<<<<< * * def scan_add(int g_src, int g_dst, int g_msk, lo=None, hi=None, */ GA_Scale_cols(__pyx_v_g_a, __pyx_v_g_v); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_291scan_add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_290scan_add[] = "scan_add(int g_src, int g_dst, int g_msk, lo=None, hi=None, bool excl=False)\nAdds successive elements in a source vector g_src and put the results\n in a destination vector g_dst.\n \n The addition will restart based on the values of the integer mask vector\n g_msk. The scan is performed within the range specified by the integer\n values lo and hi. Note that this operation can only be applied to\n 1-dimensional arrays. The excl flag determines whether the sum starts with\n the value in the source vector corresponding to the location of a 1 in the\n mask vector (excl=False) or whether the first value is set equal to 0\n (excl=True). Some examples of this operation are given below.\n\n ga.scan_add(g_src, g_dst, g_msk, 0, n, False);\n g_msk: 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0\n g_src: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n g_dst: 1 3 6 10 16 21 7 15 9 19 30 12 25 39 15 16 33\n\n ga.scan_add(g_src, g_dst, g_msk, 0, n, True);\n g_msk: 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0\n g_src: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n g_dst: 0 1 3 6 10 15 0 7 0 9 19 0 12 25 0 0 16\n\n This is a collective operation.\n\n :Parameters:\n g_src : int\n handle for source arrray\n g_dst : int\n handle for destination array\n g_msk : int\n handle for integer array representing mask\n lo : 1D array-like of integers\n low value of range on which operation is performed\n hi : 1D array-like of integers\n hi value of range on which operation is performed\n excl : bool\n whether the first value is set to 0 (see above)\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_291scan_add = {__Pyx_NAMESTR("scan_add"), (PyCFunction)__pyx_pw_5ga4py_2ga_291scan_add, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_290scan_add)}; static PyObject *__pyx_pw_5ga4py_2ga_291scan_add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_src; int __pyx_v_g_dst; int __pyx_v_g_msk; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_v_excl; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("scan_add (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_src,&__pyx_n_s__g_dst,&__pyx_n_s__g_msk,&__pyx_n_s__lo,&__pyx_n_s__hi,&__pyx_n_s__excl,0}; PyObject* values[6] = {0,0,0,0,0,0}; /* "ga4py/ga.pyx":3633 * GA_Scale_cols(g_a, g_v) * * def scan_add(int g_src, int g_dst, int g_msk, lo=None, hi=None, # <<<<<<<<<<<<<< * bint excl=False): * """Adds successive elements in a source vector g_src and put the results */ values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_src)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_dst)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("scan_add", 0, 3, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3633; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_msk)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("scan_add", 0, 3, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3633; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__excl); if (value) { values[5] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scan_add") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3633; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_src = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_src == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3633; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_dst = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_dst == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3633; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_msk = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_g_msk == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3633; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[3]; __pyx_v_hi = values[4]; if (values[5]) { __pyx_v_excl = __Pyx_PyObject_IsTrue(values[5]); if (unlikely((__pyx_v_excl == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3634; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else { /* "ga4py/ga.pyx":3634 * * def scan_add(int g_src, int g_dst, int g_msk, lo=None, hi=None, * bint excl=False): # <<<<<<<<<<<<<< * """Adds successive elements in a source vector g_src and put the results * in a destination vector g_dst. */ __pyx_v_excl = ((int)0); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("scan_add", 0, 3, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3633; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.scan_add", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_290scan_add(__pyx_self, __pyx_v_g_src, __pyx_v_g_dst, __pyx_v_g_msk, __pyx_v_lo, __pyx_v_hi, __pyx_v_excl); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3633 * GA_Scale_cols(g_a, g_v) * * def scan_add(int g_src, int g_dst, int g_msk, lo=None, hi=None, # <<<<<<<<<<<<<< * bint excl=False): * """Adds successive elements in a source vector g_src and put the results */ static PyObject *__pyx_pf_5ga4py_2ga_290scan_add(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_src, int __pyx_v_g_dst, int __pyx_v_g_msk, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, int __pyx_v_excl) { PyArrayObject *__pyx_v_hi_nd = 0; int64_t __pyx_v_c_lo; int64_t __pyx_v_c_hi; int __pyx_v_c_excl; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyArrayObject *__pyx_t_3 = NULL; long __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; int64_t __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("scan_add", 0); __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; /* "ga4py/ga.pyx":3673 * * """ * cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_src)-1 # <<<<<<<<<<<<<< * cdef int64_t c_lo=0, c_hi=hi_nd[0] * cdef int c_excl=0 */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga_inquire_dims(__pyx_v_g_src, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { __pyx_v_hi_nd = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; } } __pyx_t_3 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":3674 * """ * cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_src)-1 * cdef int64_t c_lo=0, c_hi=hi_nd[0] # <<<<<<<<<<<<<< * cdef int c_excl=0 * if lo is not None: */ __pyx_v_c_lo = 0; __pyx_t_4 = 0; __pyx_t_5 = -1; if (__pyx_t_4 < 0) { __pyx_t_4 += __pyx_pybuffernd_hi_nd.diminfo[0].shape; if (unlikely(__pyx_t_4 < 0)) __pyx_t_5 = 0; } else if (unlikely(__pyx_t_4 >= __pyx_pybuffernd_hi_nd.diminfo[0].shape)) __pyx_t_5 = 0; if (unlikely(__pyx_t_5 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3674; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_c_hi = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_hi_nd.diminfo[0].strides)); /* "ga4py/ga.pyx":3675 * cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_src)-1 * cdef int64_t c_lo=0, c_hi=hi_nd[0] * cdef int c_excl=0 # <<<<<<<<<<<<<< * if lo is not None: * c_lo = lo */ __pyx_v_c_excl = 0; /* "ga4py/ga.pyx":3676 * cdef int64_t c_lo=0, c_hi=hi_nd[0] * cdef int c_excl=0 * if lo is not None: # <<<<<<<<<<<<<< * c_lo = lo * if hi is not None: */ __pyx_t_6 = (__pyx_v_lo != Py_None); __pyx_t_7 = (__pyx_t_6 != 0); if (__pyx_t_7) { /* "ga4py/ga.pyx":3677 * cdef int c_excl=0 * if lo is not None: * c_lo = lo # <<<<<<<<<<<<<< * if hi is not None: * c_hi = hi */ __pyx_t_8 = __Pyx_PyInt_from_py_int64_t(__pyx_v_lo); if (unlikely((__pyx_t_8 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3677; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_c_lo = __pyx_t_8; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":3678 * if lo is not None: * c_lo = lo * if hi is not None: # <<<<<<<<<<<<<< * c_hi = hi * if excl: */ __pyx_t_7 = (__pyx_v_hi != Py_None); __pyx_t_6 = (__pyx_t_7 != 0); if (__pyx_t_6) { /* "ga4py/ga.pyx":3679 * c_lo = lo * if hi is not None: * c_hi = hi # <<<<<<<<<<<<<< * if excl: * c_excl = 1 */ __pyx_t_8 = __Pyx_PyInt_from_py_int64_t(__pyx_v_hi); if (unlikely((__pyx_t_8 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_c_hi = __pyx_t_8; goto __pyx_L4; } __pyx_L4:; /* "ga4py/ga.pyx":3680 * if hi is not None: * c_hi = hi * if excl: # <<<<<<<<<<<<<< * c_excl = 1 * GA_Scan_add64(g_src, g_dst, g_msk, c_lo, c_hi, c_excl) */ __pyx_t_6 = (__pyx_v_excl != 0); if (__pyx_t_6) { /* "ga4py/ga.pyx":3681 * c_hi = hi * if excl: * c_excl = 1 # <<<<<<<<<<<<<< * GA_Scan_add64(g_src, g_dst, g_msk, c_lo, c_hi, c_excl) * */ __pyx_v_c_excl = 1; goto __pyx_L5; } __pyx_L5:; /* "ga4py/ga.pyx":3682 * if excl: * c_excl = 1 * GA_Scan_add64(g_src, g_dst, g_msk, c_lo, c_hi, c_excl) # <<<<<<<<<<<<<< * * def scan_copy(int g_src, int g_dst, int g_msk, lo=None, hi=None): */ GA_Scan_add64(__pyx_v_g_src, __pyx_v_g_dst, __pyx_v_g_msk, __pyx_v_c_lo, __pyx_v_c_hi, __pyx_v_c_excl); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.scan_add", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_293scan_copy(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_292scan_copy[] = "scan_copy(int g_src, int g_dst, int g_msk, lo=None, hi=None)\nThis subroutine does a segmented scan-copy of values in the source\n array g_src into a destination array g_dst with segments defined by\n values in the integer mask array g_msk. The scan-copy operation is only\n applied to the range between the lo and hi indices. This operation is\n restriced to 1-dimensional arrays. The resulting destination array will\n consist of segments of consecutive elements with the same value. An\n example is shown below\n\n GA_Scan_copy(g_src, g_dst, g_msk, 0, n);\n g_msk: 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0\n g_src: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17\n g_dst: 1 1 1 1 1 1 7 7 9 9 9 12 12 12 15 16 16\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_293scan_copy = {__Pyx_NAMESTR("scan_copy"), (PyCFunction)__pyx_pw_5ga4py_2ga_293scan_copy, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_292scan_copy)}; static PyObject *__pyx_pw_5ga4py_2ga_293scan_copy(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_src; int __pyx_v_g_dst; int __pyx_v_g_msk; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("scan_copy (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_src,&__pyx_n_s__g_dst,&__pyx_n_s__g_msk,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/ga.pyx":3684 * GA_Scan_add64(g_src, g_dst, g_msk, c_lo, c_hi, c_excl) * * def scan_copy(int g_src, int g_dst, int g_msk, lo=None, hi=None): # <<<<<<<<<<<<<< * """This subroutine does a segmented scan-copy of values in the source * array g_src into a destination array g_dst with segments defined by */ values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_src)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_dst)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("scan_copy", 0, 3, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3684; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_msk)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("scan_copy", 0, 3, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3684; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scan_copy") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3684; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_src = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_src == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3684; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_dst = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_dst == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3684; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_msk = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_g_msk == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3684; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[3]; __pyx_v_hi = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("scan_copy", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3684; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.scan_copy", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_292scan_copy(__pyx_self, __pyx_v_g_src, __pyx_v_g_dst, __pyx_v_g_msk, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_292scan_copy(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_src, int __pyx_v_g_dst, int __pyx_v_g_msk, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyArrayObject *__pyx_v_hi_nd = 0; int64_t __pyx_v_c_lo; int64_t __pyx_v_c_hi; CYTHON_UNUSED int __pyx_v_c_excl; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyArrayObject *__pyx_t_3 = NULL; long __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; int64_t __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("scan_copy", 0); __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; /* "ga4py/ga.pyx":3701 * * """ * cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_src)-1 # <<<<<<<<<<<<<< * cdef int64_t c_lo=0, c_hi=hi_nd[0] * cdef int c_excl=0 */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga_inquire_dims(__pyx_v_g_src, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3701; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3701; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3701; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { __pyx_v_hi_nd = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3701; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; } } __pyx_t_3 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":3702 * """ * cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_src)-1 * cdef int64_t c_lo=0, c_hi=hi_nd[0] # <<<<<<<<<<<<<< * cdef int c_excl=0 * if lo is not None: */ __pyx_v_c_lo = 0; __pyx_t_4 = 0; __pyx_t_5 = -1; if (__pyx_t_4 < 0) { __pyx_t_4 += __pyx_pybuffernd_hi_nd.diminfo[0].shape; if (unlikely(__pyx_t_4 < 0)) __pyx_t_5 = 0; } else if (unlikely(__pyx_t_4 >= __pyx_pybuffernd_hi_nd.diminfo[0].shape)) __pyx_t_5 = 0; if (unlikely(__pyx_t_5 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3702; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_c_hi = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_hi_nd.diminfo[0].strides)); /* "ga4py/ga.pyx":3703 * cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_src)-1 * cdef int64_t c_lo=0, c_hi=hi_nd[0] * cdef int c_excl=0 # <<<<<<<<<<<<<< * if lo is not None: * c_lo = lo */ __pyx_v_c_excl = 0; /* "ga4py/ga.pyx":3704 * cdef int64_t c_lo=0, c_hi=hi_nd[0] * cdef int c_excl=0 * if lo is not None: # <<<<<<<<<<<<<< * c_lo = lo * if hi is not None: */ __pyx_t_6 = (__pyx_v_lo != Py_None); __pyx_t_7 = (__pyx_t_6 != 0); if (__pyx_t_7) { /* "ga4py/ga.pyx":3705 * cdef int c_excl=0 * if lo is not None: * c_lo = lo # <<<<<<<<<<<<<< * if hi is not None: * c_hi = hi */ __pyx_t_8 = __Pyx_PyInt_from_py_int64_t(__pyx_v_lo); if (unlikely((__pyx_t_8 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3705; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_c_lo = __pyx_t_8; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":3706 * if lo is not None: * c_lo = lo * if hi is not None: # <<<<<<<<<<<<<< * c_hi = hi * GA_Scan_copy64(g_src, g_dst, g_msk, c_lo, c_hi) */ __pyx_t_7 = (__pyx_v_hi != Py_None); __pyx_t_6 = (__pyx_t_7 != 0); if (__pyx_t_6) { /* "ga4py/ga.pyx":3707 * c_lo = lo * if hi is not None: * c_hi = hi # <<<<<<<<<<<<<< * GA_Scan_copy64(g_src, g_dst, g_msk, c_lo, c_hi) * */ __pyx_t_8 = __Pyx_PyInt_from_py_int64_t(__pyx_v_hi); if (unlikely((__pyx_t_8 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_c_hi = __pyx_t_8; goto __pyx_L4; } __pyx_L4:; /* "ga4py/ga.pyx":3708 * if hi is not None: * c_hi = hi * GA_Scan_copy64(g_src, g_dst, g_msk, c_lo, c_hi) # <<<<<<<<<<<<<< * * def scatter(int g_a, values, subsarray): */ GA_Scan_copy64(__pyx_v_g_src, __pyx_v_g_dst, __pyx_v_g_msk, __pyx_v_c_lo, __pyx_v_c_hi); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.scan_copy", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_295scatter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_294scatter[] = "scatter(int g_a, values, subsarray)\nScatters array elements from a global array into a local array.\n\n subsarray will be converted to an ndarray if it is not one already. A\n two-dimensional array is allowed so long as its shape is (n,ndim) where n\n is the number of elements to gather and ndim is the number of dimensions\n of the target array. Also, subsarray must be contiguous.\n\n For example, if the subsarray were two-dimensional::\n\n for k in range(n):\n v[k] = g_a[subsarray[k,0],subsarray[k,1],subsarray[k,2]...]\n\n For example, if the subsarray were one-dimensional::\n\n for k in range(n):\n base = n*ndim\n v[k] = g_a[subsarray[base+0],subsarray[base+1],subsarray[base+2]...]\n\n This is a one-sided operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_295scatter = {__Pyx_NAMESTR("scatter"), (PyCFunction)__pyx_pw_5ga4py_2ga_295scatter, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_294scatter)}; static PyObject *__pyx_pw_5ga4py_2ga_295scatter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_values = 0; PyObject *__pyx_v_subsarray = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("scatter (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__values,&__pyx_n_s__subsarray,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__values)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("scatter", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3710; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__subsarray)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("scatter", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3710; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scatter") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3710; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3710; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_values = values[1]; __pyx_v_subsarray = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("scatter", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3710; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.scatter", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_294scatter(__pyx_self, __pyx_v_g_a, __pyx_v_values, __pyx_v_subsarray); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3710 * GA_Scan_copy64(g_src, g_dst, g_msk, c_lo, c_hi) * * def scatter(int g_a, values, subsarray): # <<<<<<<<<<<<<< * """Scatters array elements from a global array into a local array. * */ static PyObject *__pyx_pf_5ga4py_2ga_294scatter(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_values, PyObject *__pyx_v_subsarray) { PyArrayObject *__pyx_v_subsarray1_nd = 0; PyArrayObject *__pyx_v_subsarray2_nd = 0; PyArrayObject *__pyx_v_values_nd = 0; int __pyx_v_gtype; int __pyx_v_ndim; int64_t __pyx_v_n; __Pyx_LocalBuf_ND __pyx_pybuffernd_subsarray1_nd; __Pyx_Buffer __pyx_pybuffer_subsarray1_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_subsarray2_nd; __Pyx_Buffer __pyx_pybuffer_subsarray2_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyArrayObject *__pyx_t_1 = NULL; PyArrayObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; int __pyx_t_11; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; PyObject *__pyx_t_14 = NULL; Py_ssize_t __pyx_t_15; PyObject *__pyx_t_16 = NULL; PyObject *__pyx_t_17 = NULL; PyObject *__pyx_t_18 = NULL; PyObject *__pyx_t_19 = NULL; PyObject *__pyx_t_20 = NULL; PyObject *__pyx_t_21 = NULL; int __pyx_t_22; int __pyx_t_23; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("scatter", 0); __pyx_pybuffer_subsarray1_nd.pybuffer.buf = NULL; __pyx_pybuffer_subsarray1_nd.refcount = 0; __pyx_pybuffernd_subsarray1_nd.data = NULL; __pyx_pybuffernd_subsarray1_nd.rcbuffer = &__pyx_pybuffer_subsarray1_nd; __pyx_pybuffer_subsarray2_nd.pybuffer.buf = NULL; __pyx_pybuffer_subsarray2_nd.refcount = 0; __pyx_pybuffernd_subsarray2_nd.data = NULL; __pyx_pybuffernd_subsarray2_nd.rcbuffer = &__pyx_pybuffer_subsarray2_nd; /* "ga4py/ga.pyx":3732 * * """ * cdef np.ndarray[np.int64_t, ndim=1] subsarray1_nd = None # <<<<<<<<<<<<<< * cdef np.ndarray[np.int64_t, ndim=2] subsarray2_nd = None * cdef np.ndarray values_nd = None */ __pyx_t_1 = ((PyArrayObject *)Py_None); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { __pyx_v_subsarray1_nd = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3732; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_pybuffernd_subsarray1_nd.diminfo[0].strides = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subsarray1_nd.diminfo[0].shape = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.shape[0]; } } __pyx_t_1 = 0; __Pyx_INCREF(Py_None); __pyx_v_subsarray1_nd = ((PyArrayObject *)Py_None); /* "ga4py/ga.pyx":3733 * """ * cdef np.ndarray[np.int64_t, ndim=1] subsarray1_nd = None * cdef np.ndarray[np.int64_t, ndim=2] subsarray2_nd = None # <<<<<<<<<<<<<< * cdef np.ndarray values_nd = None * cdef int gtype = inquire_type(g_a) */ __pyx_t_2 = ((PyArrayObject *)Py_None); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) { __pyx_v_subsarray2_nd = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3733; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_pybuffernd_subsarray2_nd.diminfo[0].strides = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subsarray2_nd.diminfo[0].shape = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_subsarray2_nd.diminfo[1].strides = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_subsarray2_nd.diminfo[1].shape = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.shape[1]; } } __pyx_t_2 = 0; __Pyx_INCREF(Py_None); __pyx_v_subsarray2_nd = ((PyArrayObject *)Py_None); /* "ga4py/ga.pyx":3734 * cdef np.ndarray[np.int64_t, ndim=1] subsarray1_nd = None * cdef np.ndarray[np.int64_t, ndim=2] subsarray2_nd = None * cdef np.ndarray values_nd = None # <<<<<<<<<<<<<< * cdef int gtype = inquire_type(g_a) * cdef int ndim = GA_Ndim(g_a) */ __Pyx_INCREF(Py_None); __pyx_v_values_nd = ((PyArrayObject *)Py_None); /* "ga4py/ga.pyx":3735 * cdef np.ndarray[np.int64_t, ndim=2] subsarray2_nd = None * cdef np.ndarray values_nd = None * cdef int gtype = inquire_type(g_a) # <<<<<<<<<<<<<< * cdef int ndim = GA_Ndim(g_a) * cdef int64_t n */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":3736 * cdef np.ndarray values_nd = None * cdef int gtype = inquire_type(g_a) * cdef int ndim = GA_Ndim(g_a) # <<<<<<<<<<<<<< * cdef int64_t n * # prepare subsarray */ __pyx_v_ndim = GA_Ndim(__pyx_v_g_a); /* "ga4py/ga.pyx":3739 * cdef int64_t n * # prepare subsarray * try: # <<<<<<<<<<<<<< * subsarray1_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray1_nd) / ndim */ { __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); __Pyx_XGOTREF(__pyx_t_3); __Pyx_XGOTREF(__pyx_t_4); __Pyx_XGOTREF(__pyx_t_5); /*try:*/ { /* "ga4py/ga.pyx":3740 * # prepare subsarray * try: * subsarray1_nd = np.ascontiguousarray(subsarray, dtype=np.int64) # <<<<<<<<<<<<<< * n = len(subsarray1_nd) / ndim * except ValueError: */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3740; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__ascontiguousarray); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3740; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3740; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_subsarray); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_subsarray); __Pyx_GIVEREF(__pyx_v_subsarray); __pyx_t_8 = PyDict_New(); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3740; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_8)); __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3740; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s__int64); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3740; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (PyDict_SetItem(__pyx_t_8, ((PyObject *)__pyx_n_s__dtype), __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3740; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_8)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3740; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3740; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_t_1 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer); __pyx_t_11 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_11 < 0)) { PyErr_Fetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_subsarray1_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_12, __pyx_t_13, __pyx_t_14); } } __pyx_pybuffernd_subsarray1_nd.diminfo[0].strides = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subsarray1_nd.diminfo[0].shape = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3740; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_subsarray1_nd, ((PyArrayObject *)__pyx_t_10)); __pyx_t_10 = 0; /* "ga4py/ga.pyx":3741 * try: * subsarray1_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray1_nd) / ndim # <<<<<<<<<<<<<< * except ValueError: * subsarray1_nd = None */ __pyx_t_15 = PyObject_Length(((PyObject *)__pyx_v_subsarray1_nd)); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3741; __pyx_clineno = __LINE__; goto __pyx_L3_error;} if (unlikely(__pyx_v_ndim == 0)) { #ifdef WITH_THREAD PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); #endif PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero"); #ifdef WITH_THREAD PyGILState_Release(__pyx_gilstate_save); #endif {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3741; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else if (sizeof(Py_ssize_t) == sizeof(long) && unlikely(__pyx_v_ndim == -1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_15))) { #ifdef WITH_THREAD PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); #endif PyErr_Format(PyExc_OverflowError, "value too large to perform division"); #ifdef WITH_THREAD PyGILState_Release(__pyx_gilstate_save); #endif {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3741; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_n = __Pyx_div_Py_ssize_t(__pyx_t_15, __pyx_v_ndim); } __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L10_try_end; __pyx_L3_error:; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/ga.pyx":3742 * subsarray1_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray1_nd) / ndim * except ValueError: # <<<<<<<<<<<<<< * subsarray1_nd = None * try: */ __pyx_t_11 = PyErr_ExceptionMatches(__pyx_builtin_ValueError); if (__pyx_t_11) { __Pyx_AddTraceback("ga4py.ga.scatter", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_8, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3742; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_GOTREF(__pyx_t_8); __Pyx_GOTREF(__pyx_t_6); /* "ga4py/ga.pyx":3743 * n = len(subsarray1_nd) / ndim * except ValueError: * subsarray1_nd = None # <<<<<<<<<<<<<< * try: * subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) */ __pyx_t_1 = ((PyArrayObject *)Py_None); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer); __pyx_t_11 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_11 < 0)) { PyErr_Fetch(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_subsarray1_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_14, __pyx_t_13, __pyx_t_12); } } __pyx_pybuffernd_subsarray1_nd.diminfo[0].strides = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subsarray1_nd.diminfo[0].shape = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3743; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} } __pyx_t_1 = 0; __Pyx_INCREF(Py_None); __Pyx_DECREF_SET(__pyx_v_subsarray1_nd, ((PyArrayObject *)Py_None)); /* "ga4py/ga.pyx":3744 * except ValueError: * subsarray1_nd = None * try: # <<<<<<<<<<<<<< * subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray2_nd) # length of first dimension of subsarray2_nd */ { __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); __Pyx_XGOTREF(__pyx_t_12); __Pyx_XGOTREF(__pyx_t_13); __Pyx_XGOTREF(__pyx_t_14); /*try:*/ { /* "ga4py/ga.pyx":3745 * subsarray1_nd = None * try: * subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) # <<<<<<<<<<<<<< * n = len(subsarray2_nd) # length of first dimension of subsarray2_nd * except ValueError: */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3745; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__ascontiguousarray); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3745; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3745; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_subsarray); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_subsarray); __Pyx_GIVEREF(__pyx_v_subsarray); __pyx_t_16 = PyDict_New(); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3745; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_16)); __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3745; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_17); __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s__int64); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3745; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (PyDict_SetItem(__pyx_t_16, ((PyObject *)__pyx_n_s__dtype), __pyx_t_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3745; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_18 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_16)); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3745; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; if (!(likely(((__pyx_t_18) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_18, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3745; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __pyx_t_2 = ((PyArrayObject *)__pyx_t_18); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer); __pyx_t_11 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack); if (unlikely(__pyx_t_11 < 0)) { PyErr_Fetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_subsarray2_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_19, __pyx_t_20, __pyx_t_21); } } __pyx_pybuffernd_subsarray2_nd.diminfo[0].strides = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subsarray2_nd.diminfo[0].shape = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_subsarray2_nd.diminfo[1].strides = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_subsarray2_nd.diminfo[1].shape = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3745; __pyx_clineno = __LINE__; goto __pyx_L13_error;} } __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_subsarray2_nd, ((PyArrayObject *)__pyx_t_18)); __pyx_t_18 = 0; /* "ga4py/ga.pyx":3746 * try: * subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray2_nd) # length of first dimension of subsarray2_nd # <<<<<<<<<<<<<< * except ValueError: * raise ValueError, "subsarray must be either 1- or 2-dimensional" */ __pyx_t_15 = PyObject_Length(((PyObject *)__pyx_v_subsarray2_nd)); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3746; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __pyx_v_n = __pyx_t_15; } __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; goto __pyx_L20_try_end; __pyx_L13_error:; __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; /* "ga4py/ga.pyx":3747 * subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray2_nd) # length of first dimension of subsarray2_nd * except ValueError: # <<<<<<<<<<<<<< * raise ValueError, "subsarray must be either 1- or 2-dimensional" * # prepare values array */ __pyx_t_11 = PyErr_ExceptionMatches(__pyx_builtin_ValueError); if (__pyx_t_11) { __Pyx_AddTraceback("ga4py.ga.scatter", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_18, &__pyx_t_16, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3747; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;} __Pyx_GOTREF(__pyx_t_18); __Pyx_GOTREF(__pyx_t_16); __Pyx_GOTREF(__pyx_t_7); /* "ga4py/ga.pyx":3748 * n = len(subsarray2_nd) # length of first dimension of subsarray2_nd * except ValueError: * raise ValueError, "subsarray must be either 1- or 2-dimensional" # <<<<<<<<<<<<<< * # prepare values array * values_nd = np.asarray(values, dtype=_to_dtype[gtype]) */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_17), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3748; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;} __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L14_exception_handled; } __pyx_L15_except_error:; __Pyx_XGIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_XGIVEREF(__pyx_t_14); __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); goto __pyx_L5_except_error; __pyx_L14_exception_handled:; __Pyx_XGIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_XGIVEREF(__pyx_t_14); __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); __pyx_L20_try_end:; } __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L4_exception_handled; } __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_5); __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); goto __pyx_L1_error; __pyx_L4_exception_handled:; __Pyx_XGIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_5); __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); __pyx_L10_try_end:; } /* "ga4py/ga.pyx":3750 * raise ValueError, "subsarray must be either 1- or 2-dimensional" * # prepare values array * values_nd = np.asarray(values, dtype=_to_dtype[gtype]) # <<<<<<<<<<<<<< * if values_nd.ndim != 1: * raise ValueError, "values must be one-dimensional" */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3750; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__asarray); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3750; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3750; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_values); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_values); __Pyx_GIVEREF(__pyx_v_values); __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3750; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_10)); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3750; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_16 = __Pyx_GetItemInt(__pyx_t_7, __pyx_v_gtype, sizeof(int), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_16) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3750; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__dtype), __pyx_t_16) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3750; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3750; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0; if (!(likely(((__pyx_t_16) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_16, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3750; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF_SET(__pyx_v_values_nd, ((PyArrayObject *)__pyx_t_16)); __pyx_t_16 = 0; /* "ga4py/ga.pyx":3751 * # prepare values array * values_nd = np.asarray(values, dtype=_to_dtype[gtype]) * if values_nd.ndim != 1: # <<<<<<<<<<<<<< * raise ValueError, "values must be one-dimensional" * if not values_nd.flags['C_CONTIGUOUS']: */ __pyx_t_22 = ((__pyx_v_values_nd->nd != 1) != 0); if (__pyx_t_22) { /* "ga4py/ga.pyx":3752 * values_nd = np.asarray(values, dtype=_to_dtype[gtype]) * if values_nd.ndim != 1: * raise ValueError, "values must be one-dimensional" # <<<<<<<<<<<<<< * if not values_nd.flags['C_CONTIGUOUS']: * raise ValueError, "values must be contiguous" */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_18), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3752; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L23; } __pyx_L23:; /* "ga4py/ga.pyx":3753 * if values_nd.ndim != 1: * raise ValueError, "values must be one-dimensional" * if not values_nd.flags['C_CONTIGUOUS']: # <<<<<<<<<<<<<< * raise ValueError, "values must be contiguous" * if len(values_nd) < n: */ __pyx_t_16 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_values_nd), __pyx_n_s__flags); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3753; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_10 = PyObject_GetItem(__pyx_t_16, ((PyObject *)__pyx_n_s__C_CONTIGUOUS)); if (!__pyx_t_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3753; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_22 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_22 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3753; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_23 = ((!__pyx_t_22) != 0); if (__pyx_t_23) { /* "ga4py/ga.pyx":3754 * raise ValueError, "values must be one-dimensional" * if not values_nd.flags['C_CONTIGUOUS']: * raise ValueError, "values must be contiguous" # <<<<<<<<<<<<<< * if len(values_nd) < n: * raise ValueError, "values was not large enough" */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_19), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3754; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L24; } __pyx_L24:; /* "ga4py/ga.pyx":3755 * if not values_nd.flags['C_CONTIGUOUS']: * raise ValueError, "values must be contiguous" * if len(values_nd) < n: # <<<<<<<<<<<<<< * raise ValueError, "values was not large enough" * # call the wrapped function */ __pyx_t_15 = PyObject_Length(((PyObject *)__pyx_v_values_nd)); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3755; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_23 = ((__pyx_t_15 < __pyx_v_n) != 0); if (__pyx_t_23) { /* "ga4py/ga.pyx":3756 * raise ValueError, "values must be contiguous" * if len(values_nd) < n: * raise ValueError, "values was not large enough" # <<<<<<<<<<<<<< * # call the wrapped function * if subsarray1_nd is not None: */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_20), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3756; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L25; } __pyx_L25:; /* "ga4py/ga.pyx":3758 * raise ValueError, "values was not large enough" * # call the wrapped function * if subsarray1_nd is not None: # <<<<<<<<<<<<<< * NGA_Scatter_flat64(g_a, values_nd.data, * subsarray1_nd.data, n) */ __pyx_t_23 = (((PyObject *)__pyx_v_subsarray1_nd) != Py_None); __pyx_t_22 = (__pyx_t_23 != 0); if (__pyx_t_22) { /* "ga4py/ga.pyx":3760 * if subsarray1_nd is not None: * NGA_Scatter_flat64(g_a, values_nd.data, * subsarray1_nd.data, n) # <<<<<<<<<<<<<< * elif subsarray2_nd is not None: * NGA_Scatter_flat64(g_a, values_nd.data, */ NGA_Scatter_flat64(__pyx_v_g_a, ((void *)__pyx_v_values_nd->data), ((int64_t *)__pyx_v_subsarray1_nd->data), __pyx_v_n); goto __pyx_L26; } /* "ga4py/ga.pyx":3761 * NGA_Scatter_flat64(g_a, values_nd.data, * subsarray1_nd.data, n) * elif subsarray2_nd is not None: # <<<<<<<<<<<<<< * NGA_Scatter_flat64(g_a, values_nd.data, * subsarray2_nd.data, n) */ __pyx_t_22 = (((PyObject *)__pyx_v_subsarray2_nd) != Py_None); __pyx_t_23 = (__pyx_t_22 != 0); if (__pyx_t_23) { /* "ga4py/ga.pyx":3763 * elif subsarray2_nd is not None: * NGA_Scatter_flat64(g_a, values_nd.data, * subsarray2_nd.data, n) # <<<<<<<<<<<<<< * else: * raise ValueError, "how did this happen?" */ NGA_Scatter_flat64(__pyx_v_g_a, ((void *)__pyx_v_values_nd->data), ((int64_t *)__pyx_v_subsarray2_nd->data), __pyx_v_n); goto __pyx_L26; } /*else*/ { /* "ga4py/ga.pyx":3765 * subsarray2_nd.data, n) * else: * raise ValueError, "how did this happen?" # <<<<<<<<<<<<<< * * def scatter_acc(int g_a, values, subsarray, alpha=None): */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_21), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3765; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L26:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_16); __Pyx_XDECREF(__pyx_t_17); __Pyx_XDECREF(__pyx_t_18); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.scatter", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_subsarray1_nd); __Pyx_XDECREF((PyObject *)__pyx_v_subsarray2_nd); __Pyx_XDECREF((PyObject *)__pyx_v_values_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_297scatter_acc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_296scatter_acc[] = "scatter_acc(int g_a, values, subsarray, alpha=None)\nScatters array elements from a global array into a local array.\n\n Like scatter, but adds values to existing values in the global array after\n multiplying by alpha.\n\n subsarray will be converted to an ndarray if it is not one already. A\n two-dimensional array is allowed so long as its shape is (n,ndim) where n\n is the number of elements to gather and ndim is the number of dimensions\n of the target array. Also, subsarray must be contiguous.\n\n For example, if the subsarray were two-dimensional::\n\n for k in range(n):\n v[k] = g_a[subsarray[k,0],subsarray[k,1],subsarray[k,2]...]\n\n For example, if the subsarray were one-dimensional::\n\n for k in range(n):\n base = n*ndim\n v[k] = g_a[subsarray[base+0],subsarray[base+1],subsarray[base+2]...]\n\n This is a one-sided operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_297scatter_acc = {__Pyx_NAMESTR("scatter_acc"), (PyCFunction)__pyx_pw_5ga4py_2ga_297scatter_acc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_296scatter_acc)}; static PyObject *__pyx_pw_5ga4py_2ga_297scatter_acc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_values = 0; PyObject *__pyx_v_subsarray = 0; PyObject *__pyx_v_alpha = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("scatter_acc (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__values,&__pyx_n_s__subsarray,&__pyx_n_s__alpha,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/ga.pyx":3767 * raise ValueError, "how did this happen?" * * def scatter_acc(int g_a, values, subsarray, alpha=None): # <<<<<<<<<<<<<< * """Scatters array elements from a global array into a local array. * */ values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__values)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("scatter_acc", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3767; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__subsarray)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("scatter_acc", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3767; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alpha); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scatter_acc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3767; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3767; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_values = values[1]; __pyx_v_subsarray = values[2]; __pyx_v_alpha = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("scatter_acc", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3767; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.scatter_acc", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_296scatter_acc(__pyx_self, __pyx_v_g_a, __pyx_v_values, __pyx_v_subsarray, __pyx_v_alpha); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_296scatter_acc(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_values, PyObject *__pyx_v_subsarray, PyObject *__pyx_v_alpha) { PyArrayObject *__pyx_v_subsarray1_nd = 0; PyArrayObject *__pyx_v_subsarray2_nd = 0; PyArrayObject *__pyx_v_values_nd = 0; int __pyx_v_gtype; int __pyx_v_ndim; int64_t __pyx_v_n; int __pyx_v_ialpha; long __pyx_v_lalpha; PY_LONG_LONG __pyx_v_llalpha; float __pyx_v_falpha; double __pyx_v_dalpha; long double __pyx_v_ldalpha; SingleComplex __pyx_v_fcalpha; DoubleComplex __pyx_v_dcalpha; void *__pyx_v_valpha; __Pyx_LocalBuf_ND __pyx_pybuffernd_subsarray1_nd; __Pyx_Buffer __pyx_pybuffer_subsarray1_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_subsarray2_nd; __Pyx_Buffer __pyx_pybuffer_subsarray2_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyArrayObject *__pyx_t_1 = NULL; PyArrayObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; int __pyx_t_11; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; PyObject *__pyx_t_14 = NULL; Py_ssize_t __pyx_t_15; PyObject *__pyx_t_16 = NULL; PyObject *__pyx_t_17 = NULL; PyObject *__pyx_t_18 = NULL; PyObject *__pyx_t_19 = NULL; PyObject *__pyx_t_20 = NULL; PyObject *__pyx_t_21 = NULL; int __pyx_t_22; int __pyx_t_23; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("scatter_acc", 0); __Pyx_INCREF(__pyx_v_alpha); __pyx_pybuffer_subsarray1_nd.pybuffer.buf = NULL; __pyx_pybuffer_subsarray1_nd.refcount = 0; __pyx_pybuffernd_subsarray1_nd.data = NULL; __pyx_pybuffernd_subsarray1_nd.rcbuffer = &__pyx_pybuffer_subsarray1_nd; __pyx_pybuffer_subsarray2_nd.pybuffer.buf = NULL; __pyx_pybuffer_subsarray2_nd.refcount = 0; __pyx_pybuffernd_subsarray2_nd.data = NULL; __pyx_pybuffernd_subsarray2_nd.rcbuffer = &__pyx_pybuffer_subsarray2_nd; /* "ga4py/ga.pyx":3792 * * """ * cdef np.ndarray[np.int64_t, ndim=1] subsarray1_nd = None # <<<<<<<<<<<<<< * cdef np.ndarray[np.int64_t, ndim=2] subsarray2_nd = None * cdef np.ndarray values_nd = None */ __pyx_t_1 = ((PyArrayObject *)Py_None); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { __pyx_v_subsarray1_nd = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3792; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_pybuffernd_subsarray1_nd.diminfo[0].strides = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subsarray1_nd.diminfo[0].shape = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.shape[0]; } } __pyx_t_1 = 0; __Pyx_INCREF(Py_None); __pyx_v_subsarray1_nd = ((PyArrayObject *)Py_None); /* "ga4py/ga.pyx":3793 * """ * cdef np.ndarray[np.int64_t, ndim=1] subsarray1_nd = None * cdef np.ndarray[np.int64_t, ndim=2] subsarray2_nd = None # <<<<<<<<<<<<<< * cdef np.ndarray values_nd = None * cdef int gtype = inquire_type(g_a) */ __pyx_t_2 = ((PyArrayObject *)Py_None); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) { __pyx_v_subsarray2_nd = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3793; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_pybuffernd_subsarray2_nd.diminfo[0].strides = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subsarray2_nd.diminfo[0].shape = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_subsarray2_nd.diminfo[1].strides = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_subsarray2_nd.diminfo[1].shape = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.shape[1]; } } __pyx_t_2 = 0; __Pyx_INCREF(Py_None); __pyx_v_subsarray2_nd = ((PyArrayObject *)Py_None); /* "ga4py/ga.pyx":3794 * cdef np.ndarray[np.int64_t, ndim=1] subsarray1_nd = None * cdef np.ndarray[np.int64_t, ndim=2] subsarray2_nd = None * cdef np.ndarray values_nd = None # <<<<<<<<<<<<<< * cdef int gtype = inquire_type(g_a) * cdef int ndim = GA_Ndim(g_a) */ __Pyx_INCREF(Py_None); __pyx_v_values_nd = ((PyArrayObject *)Py_None); /* "ga4py/ga.pyx":3795 * cdef np.ndarray[np.int64_t, ndim=2] subsarray2_nd = None * cdef np.ndarray values_nd = None * cdef int gtype = inquire_type(g_a) # <<<<<<<<<<<<<< * cdef int ndim = GA_Ndim(g_a) * cdef int64_t n */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":3796 * cdef np.ndarray values_nd = None * cdef int gtype = inquire_type(g_a) * cdef int ndim = GA_Ndim(g_a) # <<<<<<<<<<<<<< * cdef int64_t n * cdef int ialpha */ __pyx_v_ndim = GA_Ndim(__pyx_v_g_a); /* "ga4py/ga.pyx":3806 * cdef SingleComplex fcalpha * cdef DoubleComplex dcalpha * cdef void *valpha=NULL # <<<<<<<<<<<<<< * # prepare subsarray * try: */ __pyx_v_valpha = NULL; /* "ga4py/ga.pyx":3808 * cdef void *valpha=NULL * # prepare subsarray * try: # <<<<<<<<<<<<<< * subsarray1_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray1_nd) / ndim */ { __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); __Pyx_XGOTREF(__pyx_t_3); __Pyx_XGOTREF(__pyx_t_4); __Pyx_XGOTREF(__pyx_t_5); /*try:*/ { /* "ga4py/ga.pyx":3809 * # prepare subsarray * try: * subsarray1_nd = np.ascontiguousarray(subsarray, dtype=np.int64) # <<<<<<<<<<<<<< * n = len(subsarray1_nd) / ndim * except ValueError: */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3809; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__ascontiguousarray); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3809; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3809; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_subsarray); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_subsarray); __Pyx_GIVEREF(__pyx_v_subsarray); __pyx_t_8 = PyDict_New(); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3809; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_8)); __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3809; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s__int64); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3809; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (PyDict_SetItem(__pyx_t_8, ((PyObject *)__pyx_n_s__dtype), __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3809; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_8)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3809; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3809; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_t_1 = ((PyArrayObject *)__pyx_t_10); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer); __pyx_t_11 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_11 < 0)) { PyErr_Fetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_subsarray1_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_12, __pyx_t_13, __pyx_t_14); } } __pyx_pybuffernd_subsarray1_nd.diminfo[0].strides = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subsarray1_nd.diminfo[0].shape = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3809; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_subsarray1_nd, ((PyArrayObject *)__pyx_t_10)); __pyx_t_10 = 0; /* "ga4py/ga.pyx":3810 * try: * subsarray1_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray1_nd) / ndim # <<<<<<<<<<<<<< * except ValueError: * subsarray1_nd = None */ __pyx_t_15 = PyObject_Length(((PyObject *)__pyx_v_subsarray1_nd)); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3810; __pyx_clineno = __LINE__; goto __pyx_L3_error;} if (unlikely(__pyx_v_ndim == 0)) { #ifdef WITH_THREAD PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); #endif PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero"); #ifdef WITH_THREAD PyGILState_Release(__pyx_gilstate_save); #endif {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3810; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } else if (sizeof(Py_ssize_t) == sizeof(long) && unlikely(__pyx_v_ndim == -1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_15))) { #ifdef WITH_THREAD PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); #endif PyErr_Format(PyExc_OverflowError, "value too large to perform division"); #ifdef WITH_THREAD PyGILState_Release(__pyx_gilstate_save); #endif {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3810; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_n = __Pyx_div_Py_ssize_t(__pyx_t_15, __pyx_v_ndim); } __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L10_try_end; __pyx_L3_error:; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/ga.pyx":3811 * subsarray1_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray1_nd) / ndim * except ValueError: # <<<<<<<<<<<<<< * subsarray1_nd = None * try: */ __pyx_t_11 = PyErr_ExceptionMatches(__pyx_builtin_ValueError); if (__pyx_t_11) { __Pyx_AddTraceback("ga4py.ga.scatter_acc", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_8, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3811; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_GOTREF(__pyx_t_8); __Pyx_GOTREF(__pyx_t_6); /* "ga4py/ga.pyx":3812 * n = len(subsarray1_nd) / ndim * except ValueError: * subsarray1_nd = None # <<<<<<<<<<<<<< * try: * subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) */ __pyx_t_1 = ((PyArrayObject *)Py_None); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer); __pyx_t_11 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_1, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_11 < 0)) { PyErr_Fetch(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_subsarray1_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_14, __pyx_t_13, __pyx_t_12); } } __pyx_pybuffernd_subsarray1_nd.diminfo[0].strides = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subsarray1_nd.diminfo[0].shape = __pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3812; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} } __pyx_t_1 = 0; __Pyx_INCREF(Py_None); __Pyx_DECREF_SET(__pyx_v_subsarray1_nd, ((PyArrayObject *)Py_None)); /* "ga4py/ga.pyx":3813 * except ValueError: * subsarray1_nd = None * try: # <<<<<<<<<<<<<< * subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray2_nd) # length of first dimension of subsarray2_nd */ { __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); __Pyx_XGOTREF(__pyx_t_12); __Pyx_XGOTREF(__pyx_t_13); __Pyx_XGOTREF(__pyx_t_14); /*try:*/ { /* "ga4py/ga.pyx":3814 * subsarray1_nd = None * try: * subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) # <<<<<<<<<<<<<< * n = len(subsarray2_nd) # length of first dimension of subsarray2_nd * except ValueError: */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3814; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__ascontiguousarray); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3814; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3814; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_subsarray); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_subsarray); __Pyx_GIVEREF(__pyx_v_subsarray); __pyx_t_16 = PyDict_New(); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3814; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_16)); __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3814; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_17); __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s__int64); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3814; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (PyDict_SetItem(__pyx_t_16, ((PyObject *)__pyx_n_s__dtype), __pyx_t_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3814; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __pyx_t_18 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_16)); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3814; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __Pyx_GOTREF(__pyx_t_18); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; if (!(likely(((__pyx_t_18) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_18, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3814; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __pyx_t_2 = ((PyArrayObject *)__pyx_t_18); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer); __pyx_t_11 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack); if (unlikely(__pyx_t_11 < 0)) { PyErr_Fetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_subsarray2_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_19, __pyx_t_20, __pyx_t_21); } } __pyx_pybuffernd_subsarray2_nd.diminfo[0].strides = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_subsarray2_nd.diminfo[0].shape = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_subsarray2_nd.diminfo[1].strides = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_subsarray2_nd.diminfo[1].shape = __pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3814; __pyx_clineno = __LINE__; goto __pyx_L13_error;} } __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_subsarray2_nd, ((PyArrayObject *)__pyx_t_18)); __pyx_t_18 = 0; /* "ga4py/ga.pyx":3815 * try: * subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray2_nd) # length of first dimension of subsarray2_nd # <<<<<<<<<<<<<< * except ValueError: * raise ValueError, "subsarray must be either 1- or 2-dimensional" */ __pyx_t_15 = PyObject_Length(((PyObject *)__pyx_v_subsarray2_nd)); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3815; __pyx_clineno = __LINE__; goto __pyx_L13_error;} __pyx_v_n = __pyx_t_15; } __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; goto __pyx_L20_try_end; __pyx_L13_error:; __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; /* "ga4py/ga.pyx":3816 * subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) * n = len(subsarray2_nd) # length of first dimension of subsarray2_nd * except ValueError: # <<<<<<<<<<<<<< * raise ValueError, "subsarray must be either 1- or 2-dimensional" * # prepare values array */ __pyx_t_11 = PyErr_ExceptionMatches(__pyx_builtin_ValueError); if (__pyx_t_11) { __Pyx_AddTraceback("ga4py.ga.scatter_acc", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_18, &__pyx_t_16, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3816; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;} __Pyx_GOTREF(__pyx_t_18); __Pyx_GOTREF(__pyx_t_16); __Pyx_GOTREF(__pyx_t_7); /* "ga4py/ga.pyx":3817 * n = len(subsarray2_nd) # length of first dimension of subsarray2_nd * except ValueError: * raise ValueError, "subsarray must be either 1- or 2-dimensional" # <<<<<<<<<<<<<< * # prepare values array * values_nd = np.asarray(values, dtype=_to_dtype[gtype]) */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_17), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3817; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;} __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L14_exception_handled; } __pyx_L15_except_error:; __Pyx_XGIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_XGIVEREF(__pyx_t_14); __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); goto __pyx_L5_except_error; __pyx_L14_exception_handled:; __Pyx_XGIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_13); __Pyx_XGIVEREF(__pyx_t_14); __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); __pyx_L20_try_end:; } __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L4_exception_handled; } __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_5); __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); goto __pyx_L1_error; __pyx_L4_exception_handled:; __Pyx_XGIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_5); __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); __pyx_L10_try_end:; } /* "ga4py/ga.pyx":3819 * raise ValueError, "subsarray must be either 1- or 2-dimensional" * # prepare values array * values_nd = np.asarray(values, dtype=_to_dtype[gtype]) # <<<<<<<<<<<<<< * if values_nd.ndim != 1: * raise ValueError, "values must be one-dimensional" */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__asarray); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_values); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_values); __Pyx_GIVEREF(__pyx_v_values); __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_10)); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_16 = __Pyx_GetItemInt(__pyx_t_7, __pyx_v_gtype, sizeof(int), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_16) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__dtype), __pyx_t_16) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0; if (!(likely(((__pyx_t_16) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_16, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF_SET(__pyx_v_values_nd, ((PyArrayObject *)__pyx_t_16)); __pyx_t_16 = 0; /* "ga4py/ga.pyx":3820 * # prepare values array * values_nd = np.asarray(values, dtype=_to_dtype[gtype]) * if values_nd.ndim != 1: # <<<<<<<<<<<<<< * raise ValueError, "values must be one-dimensional" * if not values_nd.flags['C_CONTIGUOUS']: */ __pyx_t_22 = ((__pyx_v_values_nd->nd != 1) != 0); if (__pyx_t_22) { /* "ga4py/ga.pyx":3821 * values_nd = np.asarray(values, dtype=_to_dtype[gtype]) * if values_nd.ndim != 1: * raise ValueError, "values must be one-dimensional" # <<<<<<<<<<<<<< * if not values_nd.flags['C_CONTIGUOUS']: * raise ValueError, "values must be contiguous" */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_18), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3821; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L23; } __pyx_L23:; /* "ga4py/ga.pyx":3822 * if values_nd.ndim != 1: * raise ValueError, "values must be one-dimensional" * if not values_nd.flags['C_CONTIGUOUS']: # <<<<<<<<<<<<<< * raise ValueError, "values must be contiguous" * if len(values_nd) < n: */ __pyx_t_16 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_values_nd), __pyx_n_s__flags); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_10 = PyObject_GetItem(__pyx_t_16, ((PyObject *)__pyx_n_s__C_CONTIGUOUS)); if (!__pyx_t_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_22 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_22 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_23 = ((!__pyx_t_22) != 0); if (__pyx_t_23) { /* "ga4py/ga.pyx":3823 * raise ValueError, "values must be one-dimensional" * if not values_nd.flags['C_CONTIGUOUS']: * raise ValueError, "values must be contiguous" # <<<<<<<<<<<<<< * if len(values_nd) < n: * raise ValueError, "values was not large enough" */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_19), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L24; } __pyx_L24:; /* "ga4py/ga.pyx":3824 * if not values_nd.flags['C_CONTIGUOUS']: * raise ValueError, "values must be contiguous" * if len(values_nd) < n: # <<<<<<<<<<<<<< * raise ValueError, "values was not large enough" * # prepare alpha */ __pyx_t_15 = PyObject_Length(((PyObject *)__pyx_v_values_nd)); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_23 = ((__pyx_t_15 < __pyx_v_n) != 0); if (__pyx_t_23) { /* "ga4py/ga.pyx":3825 * raise ValueError, "values must be contiguous" * if len(values_nd) < n: * raise ValueError, "values was not large enough" # <<<<<<<<<<<<<< * # prepare alpha * if alpha is None: */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_20), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L25; } __pyx_L25:; /* "ga4py/ga.pyx":3827 * raise ValueError, "values was not large enough" * # prepare alpha * if alpha is None: # <<<<<<<<<<<<<< * alpha = 1 * valpha = _convert_multiplier(gtype, alpha, */ __pyx_t_23 = (__pyx_v_alpha == Py_None); __pyx_t_22 = (__pyx_t_23 != 0); if (__pyx_t_22) { /* "ga4py/ga.pyx":3828 * # prepare alpha * if alpha is None: * alpha = 1 # <<<<<<<<<<<<<< * valpha = _convert_multiplier(gtype, alpha, * &ialpha, &lalpha, &llalpha, */ __Pyx_INCREF(__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_alpha, __pyx_int_1); goto __pyx_L26; } __pyx_L26:; /* "ga4py/ga.pyx":3832 * &ialpha, &lalpha, &llalpha, * &falpha, &dalpha, &ldalpha, * &fcalpha, &dcalpha) # <<<<<<<<<<<<<< * # call the wrapped function * if subsarray1_nd is not None: */ __pyx_v_valpha = __pyx_f_5ga4py_2ga__convert_multiplier(__pyx_v_gtype, __pyx_v_alpha, (&__pyx_v_ialpha), (&__pyx_v_lalpha), (&__pyx_v_llalpha), (&__pyx_v_falpha), (&__pyx_v_dalpha), (&__pyx_v_ldalpha), (&__pyx_v_fcalpha), (&__pyx_v_dcalpha)); /* "ga4py/ga.pyx":3834 * &fcalpha, &dcalpha) * # call the wrapped function * if subsarray1_nd is not None: # <<<<<<<<<<<<<< * NGA_Scatter_acc_flat64(g_a, values_nd.data, * subsarray1_nd.data, n, valpha) */ __pyx_t_22 = (((PyObject *)__pyx_v_subsarray1_nd) != Py_None); __pyx_t_23 = (__pyx_t_22 != 0); if (__pyx_t_23) { /* "ga4py/ga.pyx":3836 * if subsarray1_nd is not None: * NGA_Scatter_acc_flat64(g_a, values_nd.data, * subsarray1_nd.data, n, valpha) # <<<<<<<<<<<<<< * elif subsarray2_nd is not None: * NGA_Scatter_acc_flat64(g_a, values_nd.data, */ NGA_Scatter_acc_flat64(__pyx_v_g_a, ((void *)__pyx_v_values_nd->data), ((int64_t *)__pyx_v_subsarray1_nd->data), __pyx_v_n, __pyx_v_valpha); goto __pyx_L27; } /* "ga4py/ga.pyx":3837 * NGA_Scatter_acc_flat64(g_a, values_nd.data, * subsarray1_nd.data, n, valpha) * elif subsarray2_nd is not None: # <<<<<<<<<<<<<< * NGA_Scatter_acc_flat64(g_a, values_nd.data, * subsarray2_nd.data, n, valpha) */ __pyx_t_23 = (((PyObject *)__pyx_v_subsarray2_nd) != Py_None); __pyx_t_22 = (__pyx_t_23 != 0); if (__pyx_t_22) { /* "ga4py/ga.pyx":3839 * elif subsarray2_nd is not None: * NGA_Scatter_acc_flat64(g_a, values_nd.data, * subsarray2_nd.data, n, valpha) # <<<<<<<<<<<<<< * else: * raise ValueError, "how did this happen?" */ NGA_Scatter_acc_flat64(__pyx_v_g_a, ((void *)__pyx_v_values_nd->data), ((int64_t *)__pyx_v_subsarray2_nd->data), __pyx_v_n, __pyx_v_valpha); goto __pyx_L27; } /*else*/ { /* "ga4py/ga.pyx":3841 * subsarray2_nd.data, n, valpha) * else: * raise ValueError, "how did this happen?" # <<<<<<<<<<<<<< * * def select_elem(int g_a, char *op): */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_21), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L27:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_16); __Pyx_XDECREF(__pyx_t_17); __Pyx_XDECREF(__pyx_t_18); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.scatter_acc", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray1_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_subsarray2_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_subsarray1_nd); __Pyx_XDECREF((PyObject *)__pyx_v_subsarray2_nd); __Pyx_XDECREF((PyObject *)__pyx_v_values_nd); __Pyx_XDECREF(__pyx_v_alpha); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_299select_elem(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_298select_elem[] = "select_elem(int g_a, char *op)\nReturns the value and index for an element that is selected by the\n specified operator in a global array corresponding to g_a handle.\n\n This is a collective operation. \n\n :returns: the selected element and the array index for the selected element\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_299select_elem = {__Pyx_NAMESTR("select_elem"), (PyCFunction)__pyx_pw_5ga4py_2ga_299select_elem, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_298select_elem)}; static PyObject *__pyx_pw_5ga4py_2ga_299select_elem(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; char *__pyx_v_op; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("select_elem (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__op,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__op)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("select_elem", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3843; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_elem") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3843; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3843; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_op = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_op) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3843; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("select_elem", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3843; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.select_elem", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_298select_elem(__pyx_self, __pyx_v_g_a, __pyx_v_op); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3843 * raise ValueError, "how did this happen?" * * def select_elem(int g_a, char *op): # <<<<<<<<<<<<<< * """Returns the value and index for an element that is selected by the * specified operator in a global array corresponding to g_a handle. */ static PyObject *__pyx_pf_5ga4py_2ga_298select_elem(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, char *__pyx_v_op) { PyArrayObject *__pyx_v_index = 0; int __pyx_v_gtype; int __pyx_v_ialpha; long __pyx_v_lalpha; PY_LONG_LONG __pyx_v_llalpha; float __pyx_v_falpha; double __pyx_v_dalpha; long double __pyx_v_ldalpha; SingleComplex __pyx_v_fcalpha; DoubleComplex __pyx_v_dcalpha; void *__pyx_v_valpha; __Pyx_LocalBuf_ND __pyx_pybuffernd_index; __Pyx_Buffer __pyx_pybuffer_index; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; int __pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("select_elem", 0); __pyx_pybuffer_index.pybuffer.buf = NULL; __pyx_pybuffer_index.refcount = 0; __pyx_pybuffernd_index.data = NULL; __pyx_pybuffernd_index.rcbuffer = &__pyx_pybuffer_index; /* "ga4py/ga.pyx":3853 * """ * cdef np.ndarray[np.int64_t, ndim=1] index * cdef int gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * cdef int ialpha * cdef long lalpha */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":3862 * cdef SingleComplex fcalpha * cdef DoubleComplex dcalpha * cdef void *valpha=NULL # <<<<<<<<<<<<<< * valpha = _convert_multiplier(gtype, 0, * &ialpha, &lalpha, &llalpha, */ __pyx_v_valpha = NULL; /* "ga4py/ga.pyx":3866 * &ialpha, &lalpha, &llalpha, * &falpha, &dalpha, &ldalpha, * &fcalpha, &dcalpha) # <<<<<<<<<<<<<< * index = np.ndarray(GA_Ndim(g_a), dtype=np.int64) * NGA_Select_elem64(g_a, op, valpha, index.data) */ __pyx_v_valpha = __pyx_f_5ga4py_2ga__convert_multiplier(__pyx_v_gtype, __pyx_int_0, (&__pyx_v_ialpha), (&__pyx_v_lalpha), (&__pyx_v_llalpha), (&__pyx_v_falpha), (&__pyx_v_dalpha), (&__pyx_v_ldalpha), (&__pyx_v_fcalpha), (&__pyx_v_dcalpha)); /* "ga4py/ga.pyx":3867 * &falpha, &dalpha, &ldalpha, * &fcalpha, &dcalpha) * index = np.ndarray(GA_Ndim(g_a), dtype=np.int64) # <<<<<<<<<<<<<< * NGA_Select_elem64(g_a, op, valpha, index.data) * if gtype == C_INT: */ __pyx_t_1 = PyInt_FromLong(GA_Ndim(__pyx_v_g_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__int64); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray)), ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_index.rcbuffer->pybuffer); __pyx_t_5 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_index.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_4), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_5 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_index.rcbuffer->pybuffer, (PyObject*)__pyx_v_index, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_8); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_7, __pyx_t_8); } } __pyx_pybuffernd_index.diminfo[0].strides = __pyx_pybuffernd_index.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_index.diminfo[0].shape = __pyx_pybuffernd_index.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_index = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3868 * &fcalpha, &dcalpha) * index = np.ndarray(GA_Ndim(g_a), dtype=np.int64) * NGA_Select_elem64(g_a, op, valpha, index.data) # <<<<<<<<<<<<<< * if gtype == C_INT: * return ialpha,index */ NGA_Select_elem64(__pyx_v_g_a, __pyx_v_op, __pyx_v_valpha, ((int64_t *)__pyx_v_index->data)); /* "ga4py/ga.pyx":3869 * index = np.ndarray(GA_Ndim(g_a), dtype=np.int64) * NGA_Select_elem64(g_a, op, valpha, index.data) * if gtype == C_INT: # <<<<<<<<<<<<<< * return ialpha,index * elif gtype == C_LONG: */ __pyx_t_4 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3869; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_INT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3869; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3869; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3869; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_9) { /* "ga4py/ga.pyx":3870 * NGA_Select_elem64(g_a, op, valpha, index.data) * if gtype == C_INT: * return ialpha,index # <<<<<<<<<<<<<< * elif gtype == C_LONG: * return lalpha,index */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = PyInt_FromLong(__pyx_v_ialpha); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3870; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3870; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_v_index)); PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_index)); __Pyx_GIVEREF(((PyObject *)__pyx_v_index)); __pyx_t_2 = 0; __pyx_r = ((PyObject *)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; goto __pyx_L3; } /* "ga4py/ga.pyx":3871 * if gtype == C_INT: * return ialpha,index * elif gtype == C_LONG: # <<<<<<<<<<<<<< * return lalpha,index * elif gtype == C_LONGLONG: */ __pyx_t_1 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3871; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LONG); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3871; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3871; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3871; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_9) { /* "ga4py/ga.pyx":3872 * return ialpha,index * elif gtype == C_LONG: * return lalpha,index # <<<<<<<<<<<<<< * elif gtype == C_LONGLONG: * return llalpha,index */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = PyInt_FromLong(__pyx_v_lalpha); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3872; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3872; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __Pyx_INCREF(((PyObject *)__pyx_v_index)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_index)); __Pyx_GIVEREF(((PyObject *)__pyx_v_index)); __pyx_t_4 = 0; __pyx_r = ((PyObject *)__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } /* "ga4py/ga.pyx":3873 * elif gtype == C_LONG: * return lalpha,index * elif gtype == C_LONGLONG: # <<<<<<<<<<<<<< * return llalpha,index * elif gtype == C_FLOAT: */ __pyx_t_2 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LONGLONG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_9) { /* "ga4py/ga.pyx":3874 * return lalpha,index * elif gtype == C_LONGLONG: * return llalpha,index # <<<<<<<<<<<<<< * elif gtype == C_FLOAT: * return falpha,index */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyLong_FromLongLong(__pyx_v_llalpha); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3874; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3874; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_v_index)); PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_index)); __Pyx_GIVEREF(((PyObject *)__pyx_v_index)); __pyx_t_1 = 0; __pyx_r = ((PyObject *)__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L0; goto __pyx_L3; } /* "ga4py/ga.pyx":3875 * elif gtype == C_LONGLONG: * return llalpha,index * elif gtype == C_FLOAT: # <<<<<<<<<<<<<< * return falpha,index * elif gtype == C_DBL: */ __pyx_t_4 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3875; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_FLOAT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3875; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3875; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3875; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_9) { /* "ga4py/ga.pyx":3876 * return llalpha,index * elif gtype == C_FLOAT: * return falpha,index # <<<<<<<<<<<<<< * elif gtype == C_DBL: * return dalpha,index */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = PyFloat_FromDouble(__pyx_v_falpha); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_v_index)); PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_index)); __Pyx_GIVEREF(((PyObject *)__pyx_v_index)); __pyx_t_2 = 0; __pyx_r = ((PyObject *)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; goto __pyx_L3; } /* "ga4py/ga.pyx":3877 * elif gtype == C_FLOAT: * return falpha,index * elif gtype == C_DBL: # <<<<<<<<<<<<<< * return dalpha,index * elif gtype == C_LDBL: */ __pyx_t_1 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3877; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_DBL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3877; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3877; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3877; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_9) { /* "ga4py/ga.pyx":3878 * return falpha,index * elif gtype == C_DBL: * return dalpha,index # <<<<<<<<<<<<<< * elif gtype == C_LDBL: * return ldalpha,index */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = PyFloat_FromDouble(__pyx_v_dalpha); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3878; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3878; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __Pyx_INCREF(((PyObject *)__pyx_v_index)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_index)); __Pyx_GIVEREF(((PyObject *)__pyx_v_index)); __pyx_t_4 = 0; __pyx_r = ((PyObject *)__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } /* "ga4py/ga.pyx":3879 * elif gtype == C_DBL: * return dalpha,index * elif gtype == C_LDBL: # <<<<<<<<<<<<<< * return ldalpha,index * elif gtype == C_SCPL: */ __pyx_t_2 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3879; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LDBL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3879; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3879; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3879; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_9) { /* "ga4py/ga.pyx":3880 * return dalpha,index * elif gtype == C_LDBL: * return ldalpha,index # <<<<<<<<<<<<<< * elif gtype == C_SCPL: * # TODO explicitly convert GA complex to Python complex type */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(__pyx_v_ldalpha); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3880; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3880; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_v_index)); PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_index)); __Pyx_GIVEREF(((PyObject *)__pyx_v_index)); __pyx_t_1 = 0; __pyx_r = ((PyObject *)__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L0; goto __pyx_L3; } /* "ga4py/ga.pyx":3881 * elif gtype == C_LDBL: * return ldalpha,index * elif gtype == C_SCPL: # <<<<<<<<<<<<<< * # TODO explicitly convert GA complex to Python complex type * return fcalpha,index */ __pyx_t_4 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_SCPL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_9) { /* "ga4py/ga.pyx":3883 * elif gtype == C_SCPL: * # TODO explicitly convert GA complex to Python complex type * return fcalpha,index # <<<<<<<<<<<<<< * elif gtype == C_DCPL: * # TODO explicitly convert GA complex to Python complex type */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __pyx_convert__to_py_SingleComplex(__pyx_v_fcalpha); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3883; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3883; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_v_index)); PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_index)); __Pyx_GIVEREF(((PyObject *)__pyx_v_index)); __pyx_t_2 = 0; __pyx_r = ((PyObject *)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; goto __pyx_L3; } /* "ga4py/ga.pyx":3884 * # TODO explicitly convert GA complex to Python complex type * return fcalpha,index * elif gtype == C_DCPL: # <<<<<<<<<<<<<< * # TODO explicitly convert GA complex to Python complex type * return dcalpha,index */ __pyx_t_1 = PyInt_FromLong(__pyx_v_gtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3884; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_DCPL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3884; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3884; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3884; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_9) { /* "ga4py/ga.pyx":3886 * elif gtype == C_DCPL: * # TODO explicitly convert GA complex to Python complex type * return dcalpha,index # <<<<<<<<<<<<<< * else: * raise TypeError, "type of g_a not recognized" */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = __pyx_convert__to_py_DoubleComplex(__pyx_v_dcalpha); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3886; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3886; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __Pyx_INCREF(((PyObject *)__pyx_v_index)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_index)); __Pyx_GIVEREF(((PyObject *)__pyx_v_index)); __pyx_t_4 = 0; __pyx_r = ((PyObject *)__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":3888 * return dcalpha,index * else: * raise TypeError, "type of g_a not recognized" # <<<<<<<<<<<<<< * * def select_elem_min(int g_a): */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_6), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3888; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_index.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.select_elem", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_index.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_index); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_301select_elem_min(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_300select_elem_min[] = "select_elem_min(int g_a)\nEquivalent to ga.select_elem(g_a, \"min\")."; static PyMethodDef __pyx_mdef_5ga4py_2ga_301select_elem_min = {__Pyx_NAMESTR("select_elem_min"), (PyCFunction)__pyx_pw_5ga4py_2ga_301select_elem_min, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_300select_elem_min)}; static PyObject *__pyx_pw_5ga4py_2ga_301select_elem_min(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("select_elem_min (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3890; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.select_elem_min", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_300select_elem_min(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3890 * raise TypeError, "type of g_a not recognized" * * def select_elem_min(int g_a): # <<<<<<<<<<<<<< * """Equivalent to ga.select_elem(g_a, "min").""" * return select_elem(g_a, "min") */ static PyObject *__pyx_pf_5ga4py_2ga_300select_elem_min(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("select_elem_min", 0); /* "ga4py/ga.pyx":3892 * def select_elem_min(int g_a): * """Equivalent to ga.select_elem(g_a, "min").""" * return select_elem(g_a, "min") # <<<<<<<<<<<<<< * * def select_elem_max(int g_a): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__select_elem); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3892; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyInt_FromLong(__pyx_v_g_a); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3892; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3892; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_n_s__min)); PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__min)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__min)); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3892; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.select_elem_min", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_303select_elem_max(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_302select_elem_max[] = "select_elem_max(int g_a)\nEquivalent to ga.select_elem(g_a, \"max\")."; static PyMethodDef __pyx_mdef_5ga4py_2ga_303select_elem_max = {__Pyx_NAMESTR("select_elem_max"), (PyCFunction)__pyx_pw_5ga4py_2ga_303select_elem_max, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_302select_elem_max)}; static PyObject *__pyx_pw_5ga4py_2ga_303select_elem_max(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("select_elem_max (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3894; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.select_elem_max", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_302select_elem_max(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3894 * return select_elem(g_a, "min") * * def select_elem_max(int g_a): # <<<<<<<<<<<<<< * """Equivalent to ga.select_elem(g_a, "max").""" * return select_elem(g_a, "max") */ static PyObject *__pyx_pf_5ga4py_2ga_302select_elem_max(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("select_elem_max", 0); /* "ga4py/ga.pyx":3896 * def select_elem_max(int g_a): * """Equivalent to ga.select_elem(g_a, "max").""" * return select_elem(g_a, "max") # <<<<<<<<<<<<<< * * def set_array_name(int g_a, char *name): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__select_elem); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3896; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyInt_FromLong(__pyx_v_g_a); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3896; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3896; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_n_s__max)); PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__max)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__max)); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3896; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.ga.select_elem_max", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_305set_array_name(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_304set_array_name[] = "set_array_name(int g_a, char *name)\nAssigns a unique character string name to a global array handle that\n was obtained using the GA_Create_handle function.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_305set_array_name = {__Pyx_NAMESTR("set_array_name"), (PyCFunction)__pyx_pw_5ga4py_2ga_305set_array_name, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_304set_array_name)}; static PyObject *__pyx_pw_5ga4py_2ga_305set_array_name(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; char *__pyx_v_name; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_array_name (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__name,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_array_name", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3898; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_array_name") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3898; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3898; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3898; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("set_array_name", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3898; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.set_array_name", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_304set_array_name(__pyx_self, __pyx_v_g_a, __pyx_v_name); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3898 * return select_elem(g_a, "max") * * def set_array_name(int g_a, char *name): # <<<<<<<<<<<<<< * """Assigns a unique character string name to a global array handle that * was obtained using the GA_Create_handle function. */ static PyObject *__pyx_pf_5ga4py_2ga_304set_array_name(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, char *__pyx_v_name) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_array_name", 0); /* "ga4py/ga.pyx":3905 * * """ * GA_Set_array_name(g_a, name) # <<<<<<<<<<<<<< * * def set_block_cyclic(int g_a, dims): */ GA_Set_array_name(__pyx_v_g_a, __pyx_v_name); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_307set_block_cyclic(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_306set_block_cyclic[] = "set_block_cyclic(int g_a, dims)\nCreates a global array with a simple block-cyclic data distribution.\n\n The array is broken up into blocks of size dims and each block is numbered\n sequentially using a column major indexing scheme. The blocks are then\n assigned in a simple round-robin fashion to processors. This is\n illustrated in the figure below for an array containing 25 blocks\n distributed on 4 processors. Blocks at the edge of the array may be\n smaller than the block size specified in dims. In the example below,\n blocks 4,9,14,19,20,21,22,23, and 24 might be smaller thatn the remaining\n blocks. Most global array operations are insensitive to whether or not a\n block-cyclic data distribution is used, although performance may be slower\n in some cases if the global array is using a block-cyclic data\n distribution. Individual data blocks can be accessesed using the\n block-cyclic access functions.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_307set_block_cyclic = {__Pyx_NAMESTR("set_block_cyclic"), (PyCFunction)__pyx_pw_5ga4py_2ga_307set_block_cyclic, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_306set_block_cyclic)}; static PyObject *__pyx_pw_5ga4py_2ga_307set_block_cyclic(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_dims = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_block_cyclic (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__dims,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dims)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_block_cyclic", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3907; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_block_cyclic") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3907; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3907; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_dims = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("set_block_cyclic", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3907; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.set_block_cyclic", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_306set_block_cyclic(__pyx_self, __pyx_v_g_a, __pyx_v_dims); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3907 * GA_Set_array_name(g_a, name) * * def set_block_cyclic(int g_a, dims): # <<<<<<<<<<<<<< * """Creates a global array with a simple block-cyclic data distribution. * */ static PyObject *__pyx_pf_5ga4py_2ga_306set_block_cyclic(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_dims) { PyArrayObject *__pyx_v_dims_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_dims_nd; __Pyx_Buffer __pyx_pybuffer_dims_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("set_block_cyclic", 0); __pyx_pybuffer_dims_nd.pybuffer.buf = NULL; __pyx_pybuffer_dims_nd.refcount = 0; __pyx_pybuffernd_dims_nd.data = NULL; __pyx_pybuffernd_dims_nd.rcbuffer = &__pyx_pybuffer_dims_nd; /* "ga4py/ga.pyx":3927 * """ * cdef np.ndarray[np.int32_t, ndim=1] dims_nd * dims_nd = _inta32(dims) # <<<<<<<<<<<<<< * GA_Set_block_cyclic(g_a, dims_nd.data) * */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta32(__pyx_v_dims)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3927; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_dims_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_dims_nd.diminfo[0].strides = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dims_nd.diminfo[0].shape = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3927; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_dims_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":3928 * cdef np.ndarray[np.int32_t, ndim=1] dims_nd * dims_nd = _inta32(dims) * GA_Set_block_cyclic(g_a, dims_nd.data) # <<<<<<<<<<<<<< * * def set_block_cyclic_proc_grid(int g_a, block, proc_grid): */ GA_Set_block_cyclic(__pyx_v_g_a, ((int *)__pyx_v_dims_nd->data)); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.set_block_cyclic", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_dims_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_309set_block_cyclic_proc_grid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_308set_block_cyclic_proc_grid[] = "set_block_cyclic_proc_grid(int g_a, block, proc_grid)\nCreates a global array with a SCALAPACK-type block cyclic data\n distribution.\n \n The user specifies the dimensions of the processor grid in the array\n proc_grid. The product of the processor grid dimensions must equal the\n number of total number of processors and the number of dimensions in the\n processor grid must be the same as the number of dimensions in the global\n array. The data blocks are mapped onto the processor grid in a cyclic\n manner along each of the processor grid axes. This is illustrated below\n for an array consisting of 25 data blocks disributed on 6 processors. The\n 6 processors are configured in a 3 by 2 processor grid. Blocks at the edge\n of the array may be smaller than the block size specified in dims. Most\n global array operations are insensitive to whether or not a block-cyclic\n data distribution is used, although performance may be slower in some\n cases if the global array is using a block-cyclic data distribution.\n Individual data blocks can be accessesed using the block-cyclic access\n functions.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_309set_block_cyclic_proc_grid = {__Pyx_NAMESTR("set_block_cyclic_proc_grid"), (PyCFunction)__pyx_pw_5ga4py_2ga_309set_block_cyclic_proc_grid, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_308set_block_cyclic_proc_grid)}; static PyObject *__pyx_pw_5ga4py_2ga_309set_block_cyclic_proc_grid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_block = 0; PyObject *__pyx_v_proc_grid = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_block_cyclic_proc_grid (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__block,&__pyx_n_s__proc_grid,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__block)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_block_cyclic_proc_grid", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3930; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__proc_grid)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_block_cyclic_proc_grid", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3930; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_block_cyclic_proc_grid") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3930; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3930; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_block = values[1]; __pyx_v_proc_grid = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("set_block_cyclic_proc_grid", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3930; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.set_block_cyclic_proc_grid", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_308set_block_cyclic_proc_grid(__pyx_self, __pyx_v_g_a, __pyx_v_block, __pyx_v_proc_grid); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3930 * GA_Set_block_cyclic(g_a, dims_nd.data) * * def set_block_cyclic_proc_grid(int g_a, block, proc_grid): # <<<<<<<<<<<<<< * """Creates a global array with a SCALAPACK-type block cyclic data * distribution. */ static PyObject *__pyx_pf_5ga4py_2ga_308set_block_cyclic_proc_grid(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_block, PyObject *__pyx_v_proc_grid) { PyArrayObject *__pyx_v_block_nd = 0; PyArrayObject *__pyx_v_proc_grid_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_block_nd; __Pyx_Buffer __pyx_pybuffer_block_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_proc_grid_nd; __Pyx_Buffer __pyx_pybuffer_proc_grid_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("set_block_cyclic_proc_grid", 0); __pyx_pybuffer_block_nd.pybuffer.buf = NULL; __pyx_pybuffer_block_nd.refcount = 0; __pyx_pybuffernd_block_nd.data = NULL; __pyx_pybuffernd_block_nd.rcbuffer = &__pyx_pybuffer_block_nd; __pyx_pybuffer_proc_grid_nd.pybuffer.buf = NULL; __pyx_pybuffer_proc_grid_nd.refcount = 0; __pyx_pybuffernd_proc_grid_nd.data = NULL; __pyx_pybuffernd_proc_grid_nd.rcbuffer = &__pyx_pybuffer_proc_grid_nd; /* "ga4py/ga.pyx":3953 * """ * cdef np.ndarray[np.int32_t, ndim=1] block_nd, proc_grid_nd * block_nd = _inta32(block) # <<<<<<<<<<<<<< * proc_grid_nd = _inta32(proc_grid) * GA_Set_block_cyclic_proc_grid(g_a, */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta32(__pyx_v_block)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3953; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_block_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_block_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_block_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_block_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_block_nd.diminfo[0].strides = __pyx_pybuffernd_block_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_block_nd.diminfo[0].shape = __pyx_pybuffernd_block_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3953; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_block_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":3954 * cdef np.ndarray[np.int32_t, ndim=1] block_nd, proc_grid_nd * block_nd = _inta32(block) * proc_grid_nd = _inta32(proc_grid) # <<<<<<<<<<<<<< * GA_Set_block_cyclic_proc_grid(g_a, * block_nd.data, */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta32(__pyx_v_proc_grid)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_proc_grid_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_proc_grid_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_proc_grid_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_proc_grid_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_3); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_4, __pyx_t_3); } } __pyx_pybuffernd_proc_grid_nd.diminfo[0].strides = __pyx_pybuffernd_proc_grid_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_proc_grid_nd.diminfo[0].shape = __pyx_pybuffernd_proc_grid_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_proc_grid_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":3957 * GA_Set_block_cyclic_proc_grid(g_a, * block_nd.data, * proc_grid_nd.data) # <<<<<<<<<<<<<< * * def set_chunk(int g_a, chunk): */ GA_Set_block_cyclic_proc_grid(__pyx_v_g_a, ((int *)__pyx_v_block_nd->data), ((int *)__pyx_v_proc_grid_nd->data)); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_block_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_proc_grid_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.set_block_cyclic_proc_grid", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_block_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_proc_grid_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_block_nd); __Pyx_XDECREF((PyObject *)__pyx_v_proc_grid_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_311set_chunk(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_310set_chunk[] = "set_chunk(int g_a, chunk)\nThis function is used to set the chunk array for a global array handle\n that was obtained using the GA_Create_handle function. The chunk array is\n used to determine the minimum number of array elements assigned to each\n processor along each coordinate direction.\n\n This is a collective operation.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_311set_chunk = {__Pyx_NAMESTR("set_chunk"), (PyCFunction)__pyx_pw_5ga4py_2ga_311set_chunk, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_310set_chunk)}; static PyObject *__pyx_pw_5ga4py_2ga_311set_chunk(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_chunk = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_chunk (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__chunk,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__chunk)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_chunk", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3959; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_chunk") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3959; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3959; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_chunk = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("set_chunk", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3959; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.set_chunk", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_310set_chunk(__pyx_self, __pyx_v_g_a, __pyx_v_chunk); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3959 * proc_grid_nd.data) * * def set_chunk(int g_a, chunk): # <<<<<<<<<<<<<< * """This function is used to set the chunk array for a global array handle * that was obtained using the GA_Create_handle function. The chunk array is */ static PyObject *__pyx_pf_5ga4py_2ga_310set_chunk(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_chunk) { PyArrayObject *__pyx_v_chunk_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_chunk_nd; __Pyx_Buffer __pyx_pybuffer_chunk_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("set_chunk", 0); __pyx_pybuffer_chunk_nd.pybuffer.buf = NULL; __pyx_pybuffer_chunk_nd.refcount = 0; __pyx_pybuffernd_chunk_nd.data = NULL; __pyx_pybuffernd_chunk_nd.rcbuffer = &__pyx_pybuffer_chunk_nd; /* "ga4py/ga.pyx":3969 * """ * cdef np.ndarray[np.int64_t, ndim=1] chunk_nd * chunk_nd = _inta64(chunk) # <<<<<<<<<<<<<< * GA_Set_chunk64(g_a, chunk_nd.data) * */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_chunk)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3969; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_chunk_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_chunk_nd.diminfo[0].strides = __pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_chunk_nd.diminfo[0].shape = __pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3969; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_chunk_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":3970 * cdef np.ndarray[np.int64_t, ndim=1] chunk_nd * chunk_nd = _inta64(chunk) * GA_Set_chunk64(g_a, chunk_nd.data) # <<<<<<<<<<<<<< * * def set_data(int g_a, dims, int type): */ GA_Set_chunk64(__pyx_v_g_a, ((int64_t *)__pyx_v_chunk_nd->data)); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.set_chunk", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_chunk_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_chunk_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_313set_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_312set_data[] = "set_data(int g_a, dims, int type)\nSets the array dimension, the coordinate dimensions, and the data type\n assigned to a global array handle obtained using the ga.create_handle\n function.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_313set_data = {__Pyx_NAMESTR("set_data"), (PyCFunction)__pyx_pw_5ga4py_2ga_313set_data, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_312set_data)}; static PyObject *__pyx_pw_5ga4py_2ga_313set_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_dims = 0; int __pyx_v_type; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_data (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__dims,&__pyx_n_s__type,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dims)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_data", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3972; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__type)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_data", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3972; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_data") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3972; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3972; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_dims = values[1]; __pyx_v_type = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3972; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("set_data", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3972; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.set_data", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_312set_data(__pyx_self, __pyx_v_g_a, __pyx_v_dims, __pyx_v_type); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3972 * GA_Set_chunk64(g_a, chunk_nd.data) * * def set_data(int g_a, dims, int type): # <<<<<<<<<<<<<< * """Sets the array dimension, the coordinate dimensions, and the data type * assigned to a global array handle obtained using the ga.create_handle */ static PyObject *__pyx_pf_5ga4py_2ga_312set_data(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_dims, int __pyx_v_type) { PyArrayObject *__pyx_v_dims_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_dims_nd; __Pyx_Buffer __pyx_pybuffer_dims_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; Py_ssize_t __pyx_t_6; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("set_data", 0); __pyx_pybuffer_dims_nd.pybuffer.buf = NULL; __pyx_pybuffer_dims_nd.refcount = 0; __pyx_pybuffernd_dims_nd.data = NULL; __pyx_pybuffernd_dims_nd.rcbuffer = &__pyx_pybuffer_dims_nd; /* "ga4py/ga.pyx":3981 * """ * cdef np.ndarray[np.int64_t, ndim=1] dims_nd * dims_nd = _inta64(dims) # <<<<<<<<<<<<<< * GA_Set_data64(g_a, len(dims_nd), dims_nd.data, type) * */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_dims)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3981; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_dims_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_dims_nd.diminfo[0].strides = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dims_nd.diminfo[0].shape = __pyx_pybuffernd_dims_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3981; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_dims_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":3982 * cdef np.ndarray[np.int64_t, ndim=1] dims_nd * dims_nd = _inta64(dims) * GA_Set_data64(g_a, len(dims_nd), dims_nd.data, type) # <<<<<<<<<<<<<< * * def set_debug(bint debug): */ __pyx_t_6 = PyObject_Length(((PyObject *)__pyx_v_dims_nd)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3982; __pyx_clineno = __LINE__; goto __pyx_L1_error;} GA_Set_data64(__pyx_v_g_a, __pyx_t_6, ((int64_t *)__pyx_v_dims_nd->data), __pyx_v_type); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.set_data", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dims_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_dims_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_315set_debug(PyObject *__pyx_self, PyObject *__pyx_arg_debug); /*proto*/ static char __pyx_doc_5ga4py_2ga_314set_debug[] = "set_debug(bool debug)\nSets an internal flag in the GA library to either True or False.\n \n The value of this flag can be recovered at any time using the ga.get_debug\n function. The flag is set to false when the the GA library is initialized.\n This can be useful in a number of debugging situations, especially when\n examining the behavior of routines that are called in multiple locations\n in a code.\n\n This is a local operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_315set_debug = {__Pyx_NAMESTR("set_debug"), (PyCFunction)__pyx_pw_5ga4py_2ga_315set_debug, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_314set_debug)}; static PyObject *__pyx_pw_5ga4py_2ga_315set_debug(PyObject *__pyx_self, PyObject *__pyx_arg_debug) { int __pyx_v_debug; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_debug (wrapper)", 0); assert(__pyx_arg_debug); { __pyx_v_debug = __Pyx_PyObject_IsTrue(__pyx_arg_debug); if (unlikely((__pyx_v_debug == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3984; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.set_debug", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_314set_debug(__pyx_self, ((int)__pyx_v_debug)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3984 * GA_Set_data64(g_a, len(dims_nd), dims_nd.data, type) * * def set_debug(bint debug): # <<<<<<<<<<<<<< * """Sets an internal flag in the GA library to either True or False. * */ static PyObject *__pyx_pf_5ga4py_2ga_314set_debug(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_debug) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_debug", 0); /* "ga4py/ga.pyx":3996 * * """ * GA_Set_debug(debug) # <<<<<<<<<<<<<< * * def set_diagonal(int g_a, int g_v): */ GA_Set_debug(__pyx_v_debug); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_317set_diagonal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_316set_diagonal[] = "set_diagonal(int g_a, int g_v)\nSets the diagonal elements of this matrix g_a with the elements of the\n vector g_v.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_317set_diagonal = {__Pyx_NAMESTR("set_diagonal"), (PyCFunction)__pyx_pw_5ga4py_2ga_317set_diagonal, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_316set_diagonal)}; static PyObject *__pyx_pw_5ga4py_2ga_317set_diagonal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_v; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_diagonal (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_v,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_v)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_diagonal", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3998; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_diagonal") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3998; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3998; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_v = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_v == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3998; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("set_diagonal", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3998; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.set_diagonal", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_316set_diagonal(__pyx_self, __pyx_v_g_a, __pyx_v_g_v); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":3998 * GA_Set_debug(debug) * * def set_diagonal(int g_a, int g_v): # <<<<<<<<<<<<<< * """Sets the diagonal elements of this matrix g_a with the elements of the * vector g_v. */ static PyObject *__pyx_pf_5ga4py_2ga_316set_diagonal(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_v) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_diagonal", 0); /* "ga4py/ga.pyx":4005 * * """ * GA_Set_diagonal(g_a, g_v) # <<<<<<<<<<<<<< * * def set_ghosts(int g_a, width): */ GA_Set_diagonal(__pyx_v_g_a, __pyx_v_g_v); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_319set_ghosts(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_318set_ghosts[] = "set_ghosts(int g_a, width)\nSets the ghost cell widths for a global array handle that was obtained\n using the ga.create_handle function.\n \n The ghosts cells widths indicate how many ghost cells are used to pad the\n locally held array data along each dimension. The padding can be set\n independently for each coordinate dimension.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_319set_ghosts = {__Pyx_NAMESTR("set_ghosts"), (PyCFunction)__pyx_pw_5ga4py_2ga_319set_ghosts, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_318set_ghosts)}; static PyObject *__pyx_pw_5ga4py_2ga_319set_ghosts(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_width = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_ghosts (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__width,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__width)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_ghosts", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_ghosts") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_width = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("set_ghosts", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.set_ghosts", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_318set_ghosts(__pyx_self, __pyx_v_g_a, __pyx_v_width); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4007 * GA_Set_diagonal(g_a, g_v) * * def set_ghosts(int g_a, width): # <<<<<<<<<<<<<< * """Sets the ghost cell widths for a global array handle that was obtained * using the ga.create_handle function. */ static PyObject *__pyx_pf_5ga4py_2ga_318set_ghosts(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_width) { PyArrayObject *__pyx_v_width_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_width_nd; __Pyx_Buffer __pyx_pybuffer_width_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("set_ghosts", 0); __pyx_pybuffer_width_nd.pybuffer.buf = NULL; __pyx_pybuffer_width_nd.refcount = 0; __pyx_pybuffernd_width_nd.data = NULL; __pyx_pybuffernd_width_nd.rcbuffer = &__pyx_pybuffer_width_nd; /* "ga4py/ga.pyx":4019 * """ * cdef np.ndarray[np.int64_t, ndim=1] width_nd * width_nd = _inta64(width) # <<<<<<<<<<<<<< * GA_Set_ghosts64(g_a, width_nd.data) * */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_width)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_width_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_width_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_width_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_width_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_width_nd.diminfo[0].strides = __pyx_pybuffernd_width_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_width_nd.diminfo[0].shape = __pyx_pybuffernd_width_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_width_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":4020 * cdef np.ndarray[np.int64_t, ndim=1] width_nd * width_nd = _inta64(width) * GA_Set_ghosts64(g_a, width_nd.data) # <<<<<<<<<<<<<< * * def set_irreg_distr(int g_a, mapc, nblock): */ GA_Set_ghosts64(__pyx_v_g_a, ((int64_t *)__pyx_v_width_nd->data)); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_width_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.set_ghosts", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_width_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_width_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_321set_irreg_distr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_320set_irreg_distr[] = "set_irreg_distr(int g_a, mapc, nblock)\nPartitions the array data among the individual processors for a global\n array handle obtained using the ga.create_handle function.\n\n The distribution is specified as a Cartesian product of distributions for\n each dimension. For example, the following figure demonstrates\n distribution of a 2-dimensional array 8x10 on 6 (or more) processors.\n nblock(2)={3,2}, the size of mapc array is s=5 and array mapc contains the\n following elements mapc={1,3,7, 1, 6}. The distribution is nonuniform\n because, P1 and P4 get 20 elements each and processors P0,P2,P3, and P5\n only 10 elements each.\n \n +----+----++--+\n | 5 | 5 || |\n +====+====++==+\n | P0 | P3 || 2|\n | P1 | P4 || 4|\n | P2 | P5 || 2|\n +----+----++--+\n\n The array width() is used to control the width of the ghost cell boundary\n around the visible data on each processor. The local data of the global\n array residing on each processor will have a layer width(n) ghosts cells\n wide on either side of the visible data along the dimension n.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_321set_irreg_distr = {__Pyx_NAMESTR("set_irreg_distr"), (PyCFunction)__pyx_pw_5ga4py_2ga_321set_irreg_distr, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_320set_irreg_distr)}; static PyObject *__pyx_pw_5ga4py_2ga_321set_irreg_distr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_mapc = 0; PyObject *__pyx_v_nblock = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_irreg_distr (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__mapc,&__pyx_n_s__nblock,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mapc)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_irreg_distr", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4022; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nblock)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_irreg_distr", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4022; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_irreg_distr") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4022; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4022; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_mapc = values[1]; __pyx_v_nblock = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("set_irreg_distr", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4022; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.set_irreg_distr", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_320set_irreg_distr(__pyx_self, __pyx_v_g_a, __pyx_v_mapc, __pyx_v_nblock); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4022 * GA_Set_ghosts64(g_a, width_nd.data) * * def set_irreg_distr(int g_a, mapc, nblock): # <<<<<<<<<<<<<< * """Partitions the array data among the individual processors for a global * array handle obtained using the ga.create_handle function. */ static PyObject *__pyx_pf_5ga4py_2ga_320set_irreg_distr(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_mapc, PyObject *__pyx_v_nblock) { PyArrayObject *__pyx_v_mapc_nd = 0; PyArrayObject *__pyx_v_nblock_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_mapc_nd; __Pyx_Buffer __pyx_pybuffer_mapc_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_nblock_nd; __Pyx_Buffer __pyx_pybuffer_nblock_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("set_irreg_distr", 0); __pyx_pybuffer_mapc_nd.pybuffer.buf = NULL; __pyx_pybuffer_mapc_nd.refcount = 0; __pyx_pybuffernd_mapc_nd.data = NULL; __pyx_pybuffernd_mapc_nd.rcbuffer = &__pyx_pybuffer_mapc_nd; __pyx_pybuffer_nblock_nd.pybuffer.buf = NULL; __pyx_pybuffer_nblock_nd.refcount = 0; __pyx_pybuffernd_nblock_nd.data = NULL; __pyx_pybuffernd_nblock_nd.rcbuffer = &__pyx_pybuffer_nblock_nd; /* "ga4py/ga.pyx":4051 * """ * cdef np.ndarray[np.int64_t, ndim=1] mapc_nd, nblock_nd * mapc_nd = _inta64(mapc) # <<<<<<<<<<<<<< * nblock_nd = _inta64(nblock) * GA_Set_irreg_distr64(g_a, mapc_nd.data, nblock_nd.data) */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_mapc)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4051; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mapc_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mapc_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mapc_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_mapc_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_mapc_nd.diminfo[0].strides = __pyx_pybuffernd_mapc_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mapc_nd.diminfo[0].shape = __pyx_pybuffernd_mapc_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4051; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_mapc_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":4052 * cdef np.ndarray[np.int64_t, ndim=1] mapc_nd, nblock_nd * mapc_nd = _inta64(mapc) * nblock_nd = _inta64(nblock) # <<<<<<<<<<<<<< * GA_Set_irreg_distr64(g_a, mapc_nd.data, nblock_nd.data) * */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta64(__pyx_v_nblock)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4052; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_nblock_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_nblock_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_nblock_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_nblock_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_3); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_4, __pyx_t_3); } } __pyx_pybuffernd_nblock_nd.diminfo[0].strides = __pyx_pybuffernd_nblock_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_nblock_nd.diminfo[0].shape = __pyx_pybuffernd_nblock_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4052; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_nblock_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":4053 * mapc_nd = _inta64(mapc) * nblock_nd = _inta64(nblock) * GA_Set_irreg_distr64(g_a, mapc_nd.data, nblock_nd.data) # <<<<<<<<<<<<<< * * def set_memory_limit(size_t limit): */ GA_Set_irreg_distr64(__pyx_v_g_a, ((int64_t *)__pyx_v_mapc_nd->data), ((int64_t *)__pyx_v_nblock_nd->data)); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mapc_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_nblock_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.set_irreg_distr", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mapc_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_nblock_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_mapc_nd); __Pyx_XDECREF((PyObject *)__pyx_v_nblock_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_323set_memory_limit(PyObject *__pyx_self, PyObject *__pyx_arg_limit); /*proto*/ static char __pyx_doc_5ga4py_2ga_322set_memory_limit[] = "set_memory_limit(size_t limit)\nSets the amount of memory to be used (in bytes) per process.\n\n This is a local operation. \n\n :Parameters:\n limit : size_t\n the amount of memory in bytes per process\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_323set_memory_limit = {__Pyx_NAMESTR("set_memory_limit"), (PyCFunction)__pyx_pw_5ga4py_2ga_323set_memory_limit, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_322set_memory_limit)}; static PyObject *__pyx_pw_5ga4py_2ga_323set_memory_limit(PyObject *__pyx_self, PyObject *__pyx_arg_limit) { size_t __pyx_v_limit; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_memory_limit (wrapper)", 0); assert(__pyx_arg_limit); { __pyx_v_limit = __Pyx_PyInt_AsSize_t(__pyx_arg_limit); if (unlikely((__pyx_v_limit == (size_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4055; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.set_memory_limit", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_322set_memory_limit(__pyx_self, ((size_t)__pyx_v_limit)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4055 * GA_Set_irreg_distr64(g_a, mapc_nd.data, nblock_nd.data) * * def set_memory_limit(size_t limit): # <<<<<<<<<<<<<< * """Sets the amount of memory to be used (in bytes) per process. * */ static PyObject *__pyx_pf_5ga4py_2ga_322set_memory_limit(CYTHON_UNUSED PyObject *__pyx_self, size_t __pyx_v_limit) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_memory_limit", 0); /* "ga4py/ga.pyx":4065 * * """ * GA_Set_memory_limit(limit) # <<<<<<<<<<<<<< * * def set_pgroup(int g_a, int pgroup): */ GA_Set_memory_limit(__pyx_v_limit); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_325set_pgroup(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_324set_pgroup[] = "set_pgroup(int g_a, int pgroup)\nSets the processor configuration assigned to a global array handle that\n was obtained using the ga.create_handle function.\n \n It can be used to create mirrored arrays by using the mirrored array\n processor configuration in this function call. It can also be used to\n create an array on a processor group by using a processor group handle in\n this call.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_325set_pgroup = {__Pyx_NAMESTR("set_pgroup"), (PyCFunction)__pyx_pw_5ga4py_2ga_325set_pgroup, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_324set_pgroup)}; static PyObject *__pyx_pw_5ga4py_2ga_325set_pgroup(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_pgroup; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_pgroup (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__pgroup,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pgroup)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_pgroup", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4067; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_pgroup") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4067; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4067; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_pgroup = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_pgroup == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4067; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("set_pgroup", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4067; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.set_pgroup", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_324set_pgroup(__pyx_self, __pyx_v_g_a, __pyx_v_pgroup); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4067 * GA_Set_memory_limit(limit) * * def set_pgroup(int g_a, int pgroup): # <<<<<<<<<<<<<< * """Sets the processor configuration assigned to a global array handle that * was obtained using the ga.create_handle function. */ static PyObject *__pyx_pf_5ga4py_2ga_324set_pgroup(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_pgroup) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_pgroup", 0); /* "ga4py/ga.pyx":4079 * * """ * GA_Set_pgroup(g_a, pgroup) # <<<<<<<<<<<<<< * * def set_restricted(int g_a, list): */ GA_Set_pgroup(__pyx_v_g_a, __pyx_v_pgroup); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_327set_restricted(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_326set_restricted[] = "set_restricted(int g_a, list)\nRestrict data in the global array g_a to only the processors listed in\n the array list.\n \n len(list) must be less than or equal to the number of available processors.\n If this call is used in conjunction with set_irreg_distr, then the\n decomposition in the set_irreg_distr call must be done assuming that the\n number of processors is nproc. The data that ordinarily would be mapped to\n process 0 is mapped to the process in list[0], the data that would be\n mapped to process 1 will be mapped to list[1], etc. This can be used to\n remap the data distribution to different processors, even if nproc equals\n the number of available processors.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_327set_restricted = {__Pyx_NAMESTR("set_restricted"), (PyCFunction)__pyx_pw_5ga4py_2ga_327set_restricted, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_326set_restricted)}; static PyObject *__pyx_pw_5ga4py_2ga_327set_restricted(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_list = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_restricted (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__list,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__list)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_restricted", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4081; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_restricted") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4081; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4081; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_list = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("set_restricted", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4081; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.set_restricted", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_326set_restricted(__pyx_self, __pyx_v_g_a, __pyx_v_list); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4081 * GA_Set_pgroup(g_a, pgroup) * * def set_restricted(int g_a, list): # <<<<<<<<<<<<<< * """Restrict data in the global array g_a to only the processors listed in * the array list. */ static PyObject *__pyx_pf_5ga4py_2ga_326set_restricted(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_list) { PyArrayObject *__pyx_v_list_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_list_nd; __Pyx_Buffer __pyx_pybuffer_list_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; Py_ssize_t __pyx_t_6; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("set_restricted", 0); __pyx_pybuffer_list_nd.pybuffer.buf = NULL; __pyx_pybuffer_list_nd.refcount = 0; __pyx_pybuffernd_list_nd.data = NULL; __pyx_pybuffernd_list_nd.rcbuffer = &__pyx_pybuffer_list_nd; /* "ga4py/ga.pyx":4098 * """ * cdef np.ndarray[np.int32_t, ndim=1] list_nd * list_nd = _inta32(list) # <<<<<<<<<<<<<< * GA_Set_restricted(g_a, list_nd.data, len(list_nd)) * */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga__inta32(__pyx_v_list)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4098; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_list_nd.rcbuffer->pybuffer); __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_list_nd.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_2 < 0)) { PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_list_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_list_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5); } } __pyx_pybuffernd_list_nd.diminfo[0].strides = __pyx_pybuffernd_list_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_list_nd.diminfo[0].shape = __pyx_pybuffernd_list_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4098; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_list_nd = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":4099 * cdef np.ndarray[np.int32_t, ndim=1] list_nd * list_nd = _inta32(list) * GA_Set_restricted(g_a, list_nd.data, len(list_nd)) # <<<<<<<<<<<<<< * * def set_restricted_range(int g_a, int lo_proc, int hi_proc): */ __pyx_t_6 = PyObject_Length(((PyObject *)__pyx_v_list_nd)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4099; __pyx_clineno = __LINE__; goto __pyx_L1_error;} GA_Set_restricted(__pyx_v_g_a, ((int *)__pyx_v_list_nd->data), __pyx_t_6); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_list_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.set_restricted", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_list_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_list_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_329set_restricted_range(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_328set_restricted_range[] = "set_restricted_range(int g_a, int lo_proc, int hi_proc)\nRestrict data in the global array to the given range of processors.\n\n Both lo_proc and hi_proc must be less than or equal to the total number of\n processors minus one (e.g., in the range [0,N-1], where N is the total\n number of processors) and lo_proc must be less than or equal to hi_proc. If\n lo_proc = 0 and hi_proc = N-1 then this call has no effect on the data\n distribution.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_329set_restricted_range = {__Pyx_NAMESTR("set_restricted_range"), (PyCFunction)__pyx_pw_5ga4py_2ga_329set_restricted_range, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_328set_restricted_range)}; static PyObject *__pyx_pw_5ga4py_2ga_329set_restricted_range(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_lo_proc; int __pyx_v_hi_proc; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_restricted_range (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__lo_proc,&__pyx_n_s__hi_proc,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo_proc)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_restricted_range", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4101; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi_proc)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_restricted_range", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4101; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_restricted_range") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4101; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4101; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo_proc = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_lo_proc == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4101; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_hi_proc = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_hi_proc == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4101; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("set_restricted_range", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4101; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.set_restricted_range", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_328set_restricted_range(__pyx_self, __pyx_v_g_a, __pyx_v_lo_proc, __pyx_v_hi_proc); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4101 * GA_Set_restricted(g_a, list_nd.data, len(list_nd)) * * def set_restricted_range(int g_a, int lo_proc, int hi_proc): # <<<<<<<<<<<<<< * """Restrict data in the global array to the given range of processors. * */ static PyObject *__pyx_pf_5ga4py_2ga_328set_restricted_range(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_lo_proc, int __pyx_v_hi_proc) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_restricted_range", 0); /* "ga4py/ga.pyx":4113 * * """ * GA_Set_restricted_range(g_a, lo_proc, hi_proc) # <<<<<<<<<<<<<< * * def shift_diagoal(int g_a, value=None): */ GA_Set_restricted_range(__pyx_v_g_a, __pyx_v_lo_proc, __pyx_v_hi_proc); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_331shift_diagoal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_330shift_diagoal[] = "shift_diagoal(int g_a, value=None)\nAdds this constant to the diagonal elements of the matrix.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_331shift_diagoal = {__Pyx_NAMESTR("shift_diagoal"), (PyCFunction)__pyx_pw_5ga4py_2ga_331shift_diagoal, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_330shift_diagoal)}; static PyObject *__pyx_pw_5ga4py_2ga_331shift_diagoal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_value = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("shift_diagoal (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__value,0}; PyObject* values[2] = {0,0}; /* "ga4py/ga.pyx":4115 * GA_Set_restricted_range(g_a, lo_proc, hi_proc) * * def shift_diagoal(int g_a, value=None): # <<<<<<<<<<<<<< * """Adds this constant to the diagonal elements of the matrix. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "shift_diagoal") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4115; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4115; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_value = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("shift_diagoal", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4115; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.shift_diagoal", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_330shift_diagoal(__pyx_self, __pyx_v_g_a, __pyx_v_value); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_330shift_diagoal(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_value) { int __pyx_v_ivalue; long __pyx_v_lvalue; PY_LONG_LONG __pyx_v_llvalue; float __pyx_v_fvalue; double __pyx_v_dvalue; long double __pyx_v_ldvalue; SingleComplex __pyx_v_fcvalue; DoubleComplex __pyx_v_dcvalue; void *__pyx_v_vvalue; int __pyx_v_gtype; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; __Pyx_RefNannySetupContext("shift_diagoal", 0); __Pyx_INCREF(__pyx_v_value); /* "ga4py/ga.pyx":4130 * cdef DoubleComplex dcvalue * cdef void *vvalue * cdef int gtype=inquire_type(g_a) # <<<<<<<<<<<<<< * if value is None: * value = 1 */ __pyx_v_gtype = __pyx_f_5ga4py_2ga_inquire_type(__pyx_v_g_a, 0); /* "ga4py/ga.pyx":4131 * cdef void *vvalue * cdef int gtype=inquire_type(g_a) * if value is None: # <<<<<<<<<<<<<< * value = 1 * vvalue = _convert_multiplier(gtype, value, */ __pyx_t_1 = (__pyx_v_value == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/ga.pyx":4132 * cdef int gtype=inquire_type(g_a) * if value is None: * value = 1 # <<<<<<<<<<<<<< * vvalue = _convert_multiplier(gtype, value, * &ivalue, &lvalue, &llvalue, */ __Pyx_INCREF(__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_value, __pyx_int_1); goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":4136 * &ivalue, &lvalue, &llvalue, * &fvalue, &dvalue, &ldvalue, * &fcvalue, &dcvalue) # <<<<<<<<<<<<<< * GA_Shift_diagonal(g_a, vvalue) * */ __pyx_v_vvalue = __pyx_f_5ga4py_2ga__convert_multiplier(__pyx_v_gtype, __pyx_v_value, (&__pyx_v_ivalue), (&__pyx_v_lvalue), (&__pyx_v_llvalue), (&__pyx_v_fvalue), (&__pyx_v_dvalue), (&__pyx_v_ldvalue), (&__pyx_v_fcvalue), (&__pyx_v_dcvalue)); /* "ga4py/ga.pyx":4137 * &fvalue, &dvalue, &ldvalue, * &fcvalue, &dcvalue) * GA_Shift_diagonal(g_a, vvalue) # <<<<<<<<<<<<<< * * def solve(int g_a, int g_b): */ GA_Shift_diagonal(__pyx_v_g_a, __pyx_v_vvalue); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XDECREF(__pyx_v_value); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_333solve(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_332solve[] = "solve(int g_a, int g_b)\nSolves a system of linear equations A * X = B.\n\n It first will call the Cholesky factorization routine and, if sucessfully,\n will solve the system with the Cholesky solver. If Cholesky will be not be\n able to factorize A, then it will call the LU factorization routine and\n will solve the system with forward/backward substitution. On exit B will\n contain the solution X.\n\n This is a collective operation.\n\n :returns: 0 if Cholesky factoriztion was succesful. >0 if the leading minor of this order is not positive definite, Cholesky factorization could not be completed and LU factoriztion was used\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_333solve = {__Pyx_NAMESTR("solve"), (PyCFunction)__pyx_pw_5ga4py_2ga_333solve, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_332solve)}; static PyObject *__pyx_pw_5ga4py_2ga_333solve(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_b; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("solve (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_b,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solve") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_b = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.solve", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_332solve(__pyx_self, __pyx_v_g_a, __pyx_v_g_b); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4139 * GA_Shift_diagonal(g_a, vvalue) * * def solve(int g_a, int g_b): # <<<<<<<<<<<<<< * """Solves a system of linear equations A * X = B. * */ static PyObject *__pyx_pf_5ga4py_2ga_332solve(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("solve", 0); /* "ga4py/ga.pyx":4153 * * """ * return GA_Solve(g_a, g_b) # <<<<<<<<<<<<<< * * def spd_invert(int g_a): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Solve(__pyx_v_g_a, __pyx_v_g_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.solve", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_335spd_invert(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_334spd_invert[] = "spd_invert(int g_a)\nCompute the inverse of a double precision using the Cholesky\n factorization of a NxN double precision symmetric positive definite matrix\n A stored in the global array represented by g_a. On successful exit, A\n will contain the inverse.\n\n This is a collective operation.\n\n :returns: 0 if successful exit; >0 if the leading minor of this order is not positive definite and the factorization could not be completed; <0 if it returns the index i of the (i,i) element of the factor L/U that is zero and the inverse could not be computed\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_335spd_invert = {__Pyx_NAMESTR("spd_invert"), (PyCFunction)__pyx_pw_5ga4py_2ga_335spd_invert, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_334spd_invert)}; static PyObject *__pyx_pw_5ga4py_2ga_335spd_invert(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("spd_invert (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4155; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.spd_invert", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_334spd_invert(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4155 * return GA_Solve(g_a, g_b) * * def spd_invert(int g_a): # <<<<<<<<<<<<<< * """Compute the inverse of a double precision using the Cholesky * factorization of a NxN double precision symmetric positive definite matrix */ static PyObject *__pyx_pf_5ga4py_2ga_334spd_invert(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("spd_invert", 0); /* "ga4py/ga.pyx":4166 * * """ * return GA_Spd_invert(g_a) # <<<<<<<<<<<<<< * * def step_max(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Spd_invert(__pyx_v_g_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.spd_invert", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_337step_max(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_336step_max[] = "step_max(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None)\nCalculates the largest multiple of a vector g_b that can be added to\n this vector g_a while keeping each element of this vector non-negative.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_337step_max = {__Pyx_NAMESTR("step_max"), (PyCFunction)__pyx_pw_5ga4py_2ga_337step_max, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_336step_max)}; static PyObject *__pyx_pw_5ga4py_2ga_337step_max(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_b; PyObject *__pyx_v_alo = 0; PyObject *__pyx_v_ahi = 0; PyObject *__pyx_v_blo = 0; PyObject *__pyx_v_bhi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("step_max (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_b,&__pyx_n_s__alo,&__pyx_n_s__ahi,&__pyx_n_s__blo,&__pyx_n_s__bhi,0}; PyObject* values[6] = {0,0,0,0,0,0}; /* "ga4py/ga.pyx":4168 * return GA_Spd_invert(g_a) * * def step_max(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None): # <<<<<<<<<<<<<< * """Calculates the largest multiple of a vector g_b that can be added to * this vector g_a while keeping each element of this vector non-negative. */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); values[5] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("step_max", 0, 2, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4168; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alo); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ahi); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__blo); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bhi); if (value) { values[5] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "step_max") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4168; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4168; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_b = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4168; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_alo = values[2]; __pyx_v_ahi = values[3]; __pyx_v_blo = values[4]; __pyx_v_bhi = values[5]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("step_max", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4168; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.step_max", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_336step_max(__pyx_self, __pyx_v_g_a, __pyx_v_g_b, __pyx_v_alo, __pyx_v_ahi, __pyx_v_blo, __pyx_v_bhi); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_336step_max(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b, PyObject *__pyx_v_alo, PyObject *__pyx_v_ahi, PyObject *__pyx_v_blo, PyObject *__pyx_v_bhi) { PyArrayObject *__pyx_v_alo_nd = 0; PyArrayObject *__pyx_v_ahi_nd = 0; PyArrayObject *__pyx_v_blo_nd = 0; PyArrayObject *__pyx_v_bhi_nd = 0; double __pyx_v_step; __Pyx_LocalBuf_ND __pyx_pybuffernd_ahi_nd; __Pyx_Buffer __pyx_pybuffer_ahi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_alo_nd; __Pyx_Buffer __pyx_pybuffer_alo_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_bhi_nd; __Pyx_Buffer __pyx_pybuffer_bhi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_blo_nd; __Pyx_Buffer __pyx_pybuffer_blo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *(*__pyx_t_10)(PyObject *); PyArrayObject *__pyx_t_11 = NULL; int __pyx_t_12; PyObject *__pyx_t_13 = NULL; PyObject *__pyx_t_14 = NULL; PyObject *__pyx_t_15 = NULL; PyArrayObject *__pyx_t_16 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("step_max", 0); __pyx_pybuffer_alo_nd.pybuffer.buf = NULL; __pyx_pybuffer_alo_nd.refcount = 0; __pyx_pybuffernd_alo_nd.data = NULL; __pyx_pybuffernd_alo_nd.rcbuffer = &__pyx_pybuffer_alo_nd; __pyx_pybuffer_ahi_nd.pybuffer.buf = NULL; __pyx_pybuffer_ahi_nd.refcount = 0; __pyx_pybuffernd_ahi_nd.data = NULL; __pyx_pybuffernd_ahi_nd.rcbuffer = &__pyx_pybuffer_ahi_nd; __pyx_pybuffer_blo_nd.pybuffer.buf = NULL; __pyx_pybuffer_blo_nd.refcount = 0; __pyx_pybuffernd_blo_nd.data = NULL; __pyx_pybuffernd_blo_nd.rcbuffer = &__pyx_pybuffer_blo_nd; __pyx_pybuffer_bhi_nd.pybuffer.buf = NULL; __pyx_pybuffer_bhi_nd.refcount = 0; __pyx_pybuffernd_bhi_nd.data = NULL; __pyx_pybuffernd_bhi_nd.rcbuffer = &__pyx_pybuffer_bhi_nd; /* "ga4py/ga.pyx":4178 * cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd * cdef double step * if (alo is None and ahi is None # <<<<<<<<<<<<<< * and blo is None and bhi is None): * GA_Step_max(g_a, g_b, &step) */ __pyx_t_1 = (__pyx_v_alo == Py_None); if ((__pyx_t_1 != 0)) { /* "ga4py/ga.pyx":4179 * cdef double step * if (alo is None and ahi is None * and blo is None and bhi is None): # <<<<<<<<<<<<<< * GA_Step_max(g_a, g_b, &step) * else: */ __pyx_t_2 = (__pyx_v_ahi == Py_None); if ((__pyx_t_2 != 0)) { __pyx_t_3 = (__pyx_v_blo == Py_None); if ((__pyx_t_3 != 0)) { __pyx_t_4 = (__pyx_v_bhi == Py_None); __pyx_t_5 = (__pyx_t_4 != 0); } else { __pyx_t_5 = (__pyx_t_3 != 0); } __pyx_t_3 = __pyx_t_5; } else { __pyx_t_3 = (__pyx_t_2 != 0); } __pyx_t_2 = __pyx_t_3; } else { __pyx_t_2 = (__pyx_t_1 != 0); } if (__pyx_t_2) { /* "ga4py/ga.pyx":4180 * if (alo is None and ahi is None * and blo is None and bhi is None): * GA_Step_max(g_a, g_b, &step) # <<<<<<<<<<<<<< * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) */ GA_Step_max(__pyx_v_g_a, __pyx_v_g_b, (&__pyx_v_step)); goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":4182 * GA_Step_max(g_a, g_b, &step) * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) # <<<<<<<<<<<<<< * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * GA_Step_max_patch64(g_a, alo_nd.data, ahi_nd.data, */ __pyx_t_6 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_alo, __pyx_v_ahi); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { PyObject* sequence = __pyx_t_6; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_7 = PyList_GET_ITEM(sequence, 0); __pyx_t_8 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx_t_8); #else __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); #endif __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else { Py_ssize_t index = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext; index = 0; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_8); if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_10 = NULL; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_10 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_11 = ((PyArrayObject *)__pyx_t_7); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_12 < 0)) { PyErr_Fetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_alo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_13, __pyx_t_14, __pyx_t_15); } } __pyx_pybuffernd_alo_nd.diminfo[0].strides = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_alo_nd.diminfo[0].shape = __pyx_pybuffernd_alo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_11 = 0; __pyx_v_alo_nd = ((PyArrayObject *)__pyx_t_7); __pyx_t_7 = 0; __pyx_t_11 = ((PyArrayObject *)__pyx_t_8); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_12 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_ahi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_14, __pyx_t_13); } } __pyx_pybuffernd_ahi_nd.diminfo[0].strides = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ahi_nd.diminfo[0].shape = __pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_11 = 0; __pyx_v_ahi_nd = ((PyArrayObject *)__pyx_t_8); __pyx_t_8 = 0; /* "ga4py/ga.pyx":4183 * else: * alo_nd,ahi_nd = _lohi(g_a,alo,ahi) * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) # <<<<<<<<<<<<<< * GA_Step_max_patch64(g_a, alo_nd.data, ahi_nd.data, * g_b, blo_nd.data, bhi_nd.data, &step) */ __pyx_t_6 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_b, __pyx_v_blo, __pyx_v_bhi); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4183; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { PyObject* sequence = __pyx_t_6; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4183; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_8 = PyList_GET_ITEM(sequence, 0); __pyx_t_7 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(__pyx_t_7); #else __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4183; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4183; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); #endif __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else { Py_ssize_t index = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4183; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext; index = 0; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_8); index = 1; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4183; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_10 = NULL; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_10 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4183; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L7_unpacking_done:; } if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4183; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4183; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_16 = ((PyArrayObject *)__pyx_t_8); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_12 < 0)) { PyErr_Fetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_blo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_13, __pyx_t_14, __pyx_t_15); } } __pyx_pybuffernd_blo_nd.diminfo[0].strides = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_blo_nd.diminfo[0].shape = __pyx_pybuffernd_blo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4183; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_16 = 0; __pyx_v_blo_nd = ((PyArrayObject *)__pyx_t_8); __pyx_t_8 = 0; __pyx_t_16 = ((PyArrayObject *)__pyx_t_7); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_12 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_bhi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_14, __pyx_t_13); } } __pyx_pybuffernd_bhi_nd.diminfo[0].strides = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_bhi_nd.diminfo[0].shape = __pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4183; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_16 = 0; __pyx_v_bhi_nd = ((PyArrayObject *)__pyx_t_7); __pyx_t_7 = 0; /* "ga4py/ga.pyx":4185 * blo_nd,bhi_nd = _lohi(g_b,blo,bhi) * GA_Step_max_patch64(g_a, alo_nd.data, ahi_nd.data, * g_b, blo_nd.data, bhi_nd.data, &step) # <<<<<<<<<<<<<< * return step * */ GA_Step_max_patch64(__pyx_v_g_a, ((int64_t *)__pyx_v_alo_nd->data), ((int64_t *)__pyx_v_ahi_nd->data), __pyx_v_g_b, ((int64_t *)__pyx_v_blo_nd->data), ((int64_t *)__pyx_v_bhi_nd->data), (&__pyx_v_step)); } __pyx_L3:; /* "ga4py/ga.pyx":4186 * GA_Step_max_patch64(g_a, alo_nd.data, ahi_nd.data, * g_b, blo_nd.data, bhi_nd.data, &step) * return step # <<<<<<<<<<<<<< * * def strided_acc(int g_a, buffer, lo=None, hi=None, skip=None, alpha=None): */ __Pyx_XDECREF(__pyx_r); __pyx_t_6 = PyFloat_FromDouble(__pyx_v_step); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4186; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.step_max", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ahi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alo_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bhi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_blo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_alo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_ahi_nd); __Pyx_XDECREF((PyObject *)__pyx_v_blo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_bhi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_339strided_acc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_338strided_acc[] = "strided_acc(int g_a, buffer, lo=None, hi=None, skip=None, alpha=None)\nStrided version of ga.acc.\n \n The values corresponding to dimension n in buf are accumulated to every\n skip[n] values of the global array g_a.\n \n Combines data from buffer with data in the global array patch.\n \n The buffer array is assumed to be have the same number of dimensions as\n the global array. If the buffer is not contiguous, a contiguous copy will\n be made.\n \n global array section (lo[],hi[]) += alpha * buffer\n\n This is a one-sided and atomic operation.\n\n :Parameters:\n g_a : int\n the array handle\n buffer : array-like\n must be contiguous and have same number of elements as patch\n lo : 1D array-like of integers\n lower bound patch coordinates, inclusive\n hi : 1D array-like of integers\n higher bound patch coordinates, exclusive\n alpha : object\n multiplier (converted to the appropriate type)\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_339strided_acc = {__Pyx_NAMESTR("strided_acc"), (PyCFunction)__pyx_pw_5ga4py_2ga_339strided_acc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_338strided_acc)}; static PyObject *__pyx_pw_5ga4py_2ga_339strided_acc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_buffer = 0; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; PyObject *__pyx_v_skip = 0; PyObject *__pyx_v_alpha = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("strided_acc (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__buffer,&__pyx_n_s__lo,&__pyx_n_s__hi,&__pyx_n_s__skip,&__pyx_n_s__alpha,0}; PyObject* values[6] = {0,0,0,0,0,0}; /* "ga4py/ga.pyx":4188 * return step * * def strided_acc(int g_a, buffer, lo=None, hi=None, skip=None, alpha=None): # <<<<<<<<<<<<<< * """Strided version of ga.acc. * */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); values[5] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("strided_acc", 0, 2, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4188; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__skip); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alpha); if (value) { values[5] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strided_acc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4188; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4188; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_buffer = values[1]; __pyx_v_lo = values[2]; __pyx_v_hi = values[3]; __pyx_v_skip = values[4]; __pyx_v_alpha = values[5]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("strided_acc", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4188; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.strided_acc", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_338strided_acc(__pyx_self, __pyx_v_g_a, __pyx_v_buffer, __pyx_v_lo, __pyx_v_hi, __pyx_v_skip, __pyx_v_alpha); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_338strided_acc(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_buffer, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyObject *__pyx_v_skip, PyObject *__pyx_v_alpha) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; struct __pyx_opt_args_5ga4py_2ga__acc_common __pyx_t_2; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("strided_acc", 0); /* "ga4py/ga.pyx":4217 * * """ * _acc_common(g_a, buffer, lo, hi, alpha, False, False, skip) # <<<<<<<<<<<<<< * * def strided_get(int g_a, lo=None, hi=None, skip=None, np.ndarray buffer=None): */ __pyx_t_2.__pyx_n = 6; __pyx_t_2.lo = __pyx_v_lo; __pyx_t_2.hi = __pyx_v_hi; __pyx_t_2.alpha = __pyx_v_alpha; __pyx_t_2.nb = 0; __pyx_t_2.periodic = 0; __pyx_t_2.skip = __pyx_v_skip; __pyx_t_1 = __pyx_f_5ga4py_2ga__acc_common(__pyx_v_g_a, __pyx_v_buffer, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.strided_acc", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_341strided_get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_340strided_get[] = "strided_get(int g_a, lo=None, hi=None, skip=None, ndarray buffer=None)\nStrided version of ga.get.\n \n Copies data from global array section to the local array buffer.\n \n The local array is assumed to be have the same number of dimensions as the\n global array. Any detected inconsitencies/errors in the input arguments\n are fatal.\n\n This is a one-sided operation.\n\n :Parameters:\n g_a : int\n the array handle\n lo : 1D array-like of integers\n lower bound patch coordinates, inclusive\n hi : 1D array-like of integers\n higher bound patch coordinates, exclusive\n skip : 1D array-like of integers\n strides for each dimension\n buffer : ndarray\n an ndarray of the appropriate type, large enough to hold lo,hi\n\n :returns: The local array buffer.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_341strided_get = {__Pyx_NAMESTR("strided_get"), (PyCFunction)__pyx_pw_5ga4py_2ga_341strided_get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_340strided_get)}; static PyObject *__pyx_pw_5ga4py_2ga_341strided_get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; PyObject *__pyx_v_skip = 0; PyArrayObject *__pyx_v_buffer = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("strided_get (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__lo,&__pyx_n_s__hi,&__pyx_n_s__skip,&__pyx_n_s__buffer,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/ga.pyx":4219 * _acc_common(g_a, buffer, lo, hi, alpha, False, False, skip) * * def strided_get(int g_a, lo=None, hi=None, skip=None, np.ndarray buffer=None): # <<<<<<<<<<<<<< * """Strided version of ga.get. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = (PyObject *)((PyArrayObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__skip); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strided_get") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4219; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4219; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; __pyx_v_skip = values[3]; __pyx_v_buffer = ((PyArrayObject *)values[4]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("strided_get", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4219; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.strided_get", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_buffer), __pyx_ptype_5numpy_ndarray, 1, "buffer", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = __pyx_pf_5ga4py_2ga_340strided_get(__pyx_self, __pyx_v_g_a, __pyx_v_lo, __pyx_v_hi, __pyx_v_skip, __pyx_v_buffer); goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_340strided_get(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyObject *__pyx_v_skip, PyArrayObject *__pyx_v_buffer) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; struct __pyx_opt_args_5ga4py_2ga__get_common __pyx_t_2; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("strided_get", 0); /* "ga4py/ga.pyx":4245 * * """ * return _get_common(g_a, lo, hi, buffer, False, False, skip) # <<<<<<<<<<<<<< * * def strided_put(int g_a, buffer, lo=None, hi=None, skip=None): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2.__pyx_n = 6; __pyx_t_2.lo = __pyx_v_lo; __pyx_t_2.hi = __pyx_v_hi; __pyx_t_2.buffer = __pyx_v_buffer; __pyx_t_2.nb = 0; __pyx_t_2.periodic = 0; __pyx_t_2.skip = __pyx_v_skip; __pyx_t_1 = __pyx_f_5ga4py_2ga__get_common(__pyx_v_g_a, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.strided_get", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_343strided_put(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_342strided_put[] = "strided_put(int g_a, buffer, lo=None, hi=None, skip=None)\nStrided version of ga.put.\n \n Copies data from local array buffer to the global array section.\n \n The local array is assumed to be have the same number of dimensions as the\n global array. Any detected inconsitencies/errors in input arguments are\n fatal.\n\n This is a one-sided operation. \n\n :Parameters:\n g_a : int\n the array handle\n buffer : array-like\n the data to put\n lo : 1D array-like of integers\n lower bound patch coordinates, inclusive\n hi : array-like of integers\n higher bound patch coordinates, exclusive\n skip : 1D array-like of integers\n strides for each dimension\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_343strided_put = {__Pyx_NAMESTR("strided_put"), (PyCFunction)__pyx_pw_5ga4py_2ga_343strided_put, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_342strided_put)}; static PyObject *__pyx_pw_5ga4py_2ga_343strided_put(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_buffer = 0; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; PyObject *__pyx_v_skip = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("strided_put (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__buffer,&__pyx_n_s__lo,&__pyx_n_s__hi,&__pyx_n_s__skip,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/ga.pyx":4247 * return _get_common(g_a, lo, hi, buffer, False, False, skip) * * def strided_put(int g_a, buffer, lo=None, hi=None, skip=None): # <<<<<<<<<<<<<< * """Strided version of ga.put. * */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("strided_put", 0, 2, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4247; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__skip); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strided_put") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4247; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4247; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_buffer = values[1]; __pyx_v_lo = values[2]; __pyx_v_hi = values[3]; __pyx_v_skip = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("strided_put", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4247; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.strided_put", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_342strided_put(__pyx_self, __pyx_v_g_a, __pyx_v_buffer, __pyx_v_lo, __pyx_v_hi, __pyx_v_skip); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_342strided_put(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_buffer, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi, PyObject *__pyx_v_skip) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; struct __pyx_opt_args_5ga4py_2ga__put_common __pyx_t_2; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("strided_put", 0); /* "ga4py/ga.pyx":4271 * * """ * _put_common(g_a, buffer, lo, hi, False, False, skip) # <<<<<<<<<<<<<< * * def summarize(bint verbose): */ __pyx_t_2.__pyx_n = 5; __pyx_t_2.lo = __pyx_v_lo; __pyx_t_2.hi = __pyx_v_hi; __pyx_t_2.nb = 0; __pyx_t_2.periodic = 0; __pyx_t_2.skip = __pyx_v_skip; __pyx_t_1 = __pyx_f_5ga4py_2ga__put_common(__pyx_v_g_a, __pyx_v_buffer, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.strided_put", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_345summarize(PyObject *__pyx_self, PyObject *__pyx_arg_verbose); /*proto*/ static char __pyx_doc_5ga4py_2ga_344summarize[] = "summarize(bool verbose)\nPrints info about allocated arrays."; static PyMethodDef __pyx_mdef_5ga4py_2ga_345summarize = {__Pyx_NAMESTR("summarize"), (PyCFunction)__pyx_pw_5ga4py_2ga_345summarize, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_344summarize)}; static PyObject *__pyx_pw_5ga4py_2ga_345summarize(PyObject *__pyx_self, PyObject *__pyx_arg_verbose) { int __pyx_v_verbose; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("summarize (wrapper)", 0); assert(__pyx_arg_verbose); { __pyx_v_verbose = __Pyx_PyObject_IsTrue(__pyx_arg_verbose); if (unlikely((__pyx_v_verbose == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4273; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.summarize", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_344summarize(__pyx_self, ((int)__pyx_v_verbose)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4273 * _put_common(g_a, buffer, lo, hi, False, False, skip) * * def summarize(bint verbose): # <<<<<<<<<<<<<< * """Prints info about allocated arrays.""" * GA_Summarize(verbose) */ static PyObject *__pyx_pf_5ga4py_2ga_344summarize(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_verbose) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("summarize", 0); /* "ga4py/ga.pyx":4275 * def summarize(bint verbose): * """Prints info about allocated arrays.""" * GA_Summarize(verbose) # <<<<<<<<<<<<<< * * def symmetrize(int g_a): */ GA_Summarize(__pyx_v_verbose); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_347symmetrize(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_346symmetrize[] = "symmetrize(int g_a)\nSymmetrizes matrix A represented with handle g_a: A:= .5 * (A+A').\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_347symmetrize = {__Pyx_NAMESTR("symmetrize"), (PyCFunction)__pyx_pw_5ga4py_2ga_347symmetrize, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_346symmetrize)}; static PyObject *__pyx_pw_5ga4py_2ga_347symmetrize(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("symmetrize (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4277; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.symmetrize", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_346symmetrize(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4277 * GA_Summarize(verbose) * * def symmetrize(int g_a): # <<<<<<<<<<<<<< * """Symmetrizes matrix A represented with handle g_a: A:= .5 * (A+A'). * */ static PyObject *__pyx_pf_5ga4py_2ga_346symmetrize(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("symmetrize", 0); /* "ga4py/ga.pyx":4283 * * """ * GA_Symmetrize(g_a) # <<<<<<<<<<<<<< * * def sync(): */ GA_Symmetrize(__pyx_v_g_a); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_349sync(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_348sync[] = "sync()\nSynchronize processes (a barrier) and ensure that all GA operations\n completed.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_349sync = {__Pyx_NAMESTR("sync"), (PyCFunction)__pyx_pw_5ga4py_2ga_349sync, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_348sync)}; static PyObject *__pyx_pw_5ga4py_2ga_349sync(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("sync (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_348sync(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4285 * GA_Symmetrize(g_a) * * def sync(): # <<<<<<<<<<<<<< * """Synchronize processes (a barrier) and ensure that all GA operations * completed. */ static PyObject *__pyx_pf_5ga4py_2ga_348sync(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("sync", 0); /* "ga4py/ga.pyx":4292 * * """ * GA_Sync() # <<<<<<<<<<<<<< * * def terminate(): */ GA_Sync(); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_351terminate(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_350terminate[] = "terminate()\nDelete all active arrays and destroy internal data structures.\n\n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_351terminate = {__Pyx_NAMESTR("terminate"), (PyCFunction)__pyx_pw_5ga4py_2ga_351terminate, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_350terminate)}; static PyObject *__pyx_pw_5ga4py_2ga_351terminate(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("terminate (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_350terminate(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4294 * GA_Sync() * * def terminate(): # <<<<<<<<<<<<<< * """Delete all active arrays and destroy internal data structures. * */ static PyObject *__pyx_pf_5ga4py_2ga_350terminate(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("terminate", 0); /* "ga4py/ga.pyx":4301 * """ * global _initialized * _initialized = False # <<<<<<<<<<<<<< * GA_Terminate() * */ __pyx_v_5ga4py_2ga__initialized = 0; /* "ga4py/ga.pyx":4302 * global _initialized * _initialized = False * GA_Terminate() # <<<<<<<<<<<<<< * * def total_blocks(int g_a): */ GA_Terminate(); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_353total_blocks(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_352total_blocks[] = "total_blocks(int g_a)\nReturns the total number of blocks contained in a global\n array with a block-cyclic data distribution.\n \n This is a local operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_353total_blocks = {__Pyx_NAMESTR("total_blocks"), (PyCFunction)__pyx_pw_5ga4py_2ga_353total_blocks, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_352total_blocks)}; static PyObject *__pyx_pw_5ga4py_2ga_353total_blocks(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("total_blocks (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.total_blocks", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_352total_blocks(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4304 * GA_Terminate() * * def total_blocks(int g_a): # <<<<<<<<<<<<<< * """Returns the total number of blocks contained in a global * array with a block-cyclic data distribution. */ static PyObject *__pyx_pf_5ga4py_2ga_352total_blocks(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("total_blocks", 0); /* "ga4py/ga.pyx":4311 * * """ * return GA_Total_blocks(g_a) # <<<<<<<<<<<<<< * * def transpose(int g_a, int g_b): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromLong(GA_Total_blocks(__pyx_v_g_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.total_blocks", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_355transpose(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_354transpose[] = "transpose(int g_a, int g_b)\nTransposes a matrix: B = A', where A and B are represented by handles\n g_a and g_b.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_355transpose = {__Pyx_NAMESTR("transpose"), (PyCFunction)__pyx_pw_5ga4py_2ga_355transpose, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_354transpose)}; static PyObject *__pyx_pw_5ga4py_2ga_355transpose(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_g_b; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("transpose (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__g_b,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("transpose", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4313; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "transpose") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4313; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4313; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_b = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_b == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4313; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("transpose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4313; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.transpose", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_354transpose(__pyx_self, __pyx_v_g_a, __pyx_v_g_b); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4313 * return GA_Total_blocks(g_a) * * def transpose(int g_a, int g_b): # <<<<<<<<<<<<<< * """Transposes a matrix: B = A', where A and B are represented by handles * g_a and g_b. */ static PyObject *__pyx_pf_5ga4py_2ga_354transpose(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_g_b) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("transpose", 0); /* "ga4py/ga.pyx":4320 * * """ * GA_Transpose(g_a, g_b) # <<<<<<<<<<<<<< * * def unlock(int mutex): */ GA_Transpose(__pyx_v_g_a, __pyx_v_g_b); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_357unlock(PyObject *__pyx_self, PyObject *__pyx_arg_mutex); /*proto*/ static char __pyx_doc_5ga4py_2ga_356unlock[] = "unlock(int mutex)\nUnlocks a mutex object identified by the mutex number. It is a fatal\n error for a process to attempt to unlock a mutex which has not been locked\n by this process."; static PyMethodDef __pyx_mdef_5ga4py_2ga_357unlock = {__Pyx_NAMESTR("unlock"), (PyCFunction)__pyx_pw_5ga4py_2ga_357unlock, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_356unlock)}; static PyObject *__pyx_pw_5ga4py_2ga_357unlock(PyObject *__pyx_self, PyObject *__pyx_arg_mutex) { int __pyx_v_mutex; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("unlock (wrapper)", 0); assert(__pyx_arg_mutex); { __pyx_v_mutex = __Pyx_PyInt_AsInt(__pyx_arg_mutex); if (unlikely((__pyx_v_mutex == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.unlock", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_356unlock(__pyx_self, ((int)__pyx_v_mutex)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4322 * GA_Transpose(g_a, g_b) * * def unlock(int mutex): # <<<<<<<<<<<<<< * """Unlocks a mutex object identified by the mutex number. It is a fatal * error for a process to attempt to unlock a mutex which has not been locked */ static PyObject *__pyx_pf_5ga4py_2ga_356unlock(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_mutex) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("unlock", 0); /* "ga4py/ga.pyx":4326 * error for a process to attempt to unlock a mutex which has not been locked * by this process.""" * GA_Unlock(mutex) # <<<<<<<<<<<<<< * * def unpack(int g_src, int g_dst, int g_msk, lo=None, hi=None): */ GA_Unlock(__pyx_v_mutex); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_359unpack(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_358unpack[] = "unpack(int g_src, int g_dst, int g_msk, lo=None, hi=None)\nExpands the values in the source vector into a larger destination vector.\n\n The unpack subroutine is designed to expand the values in the source\n vector g_src into a larger destination array g_dst based on the values in\n an integer mask array g_msk. The values lo and hi denote the range of\n elements that should be uncompressed and icount is a variable that on\n output lists the number of values placed in the uncompressed array. This\n operation is the complement of the ga.pack operation. An example is shown\n below::\n\n ga.unpack(g_src, g_dst, g_msk, 1, n, &icount);\n g_src: 1 7 9 12 15 16\n g_msk: 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0\n g_dst: 1 0 0 0 0 0 7 0 9 0 0 12 0 0 15 16 0\n icount: 6\n\n This is a collective operation.\n\n :Parameters:\n g_src : int\n handle for source arrray\n g_dst : int\n handle for destination array\n g_msk : int\n handle for integer array representing mask\n lo : 1D array-like of integers\n low value of range on which operation is performed\n hi : 1D array-like of integers\n hi value of range on which operation is performed\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_359unpack = {__Pyx_NAMESTR("unpack"), (PyCFunction)__pyx_pw_5ga4py_2ga_359unpack, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_358unpack)}; static PyObject *__pyx_pw_5ga4py_2ga_359unpack(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_src; int __pyx_v_g_dst; int __pyx_v_g_msk; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("unpack (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_src,&__pyx_n_s__g_dst,&__pyx_n_s__g_msk,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/ga.pyx":4328 * GA_Unlock(mutex) * * def unpack(int g_src, int g_dst, int g_msk, lo=None, hi=None): # <<<<<<<<<<<<<< * """Expands the values in the source vector into a larger destination vector. * */ values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_src)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_dst)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("unpack", 0, 3, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4328; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_msk)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("unpack", 0, 3, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4328; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "unpack") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4328; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_src = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_src == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4328; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_dst = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_g_dst == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4328; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_g_msk = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_g_msk == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4328; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[3]; __pyx_v_hi = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("unpack", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4328; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.unpack", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_358unpack(__pyx_self, __pyx_v_g_src, __pyx_v_g_dst, __pyx_v_g_msk, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_358unpack(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_src, int __pyx_v_g_dst, int __pyx_v_g_msk, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyArrayObject *__pyx_v_hi_nd = 0; CYTHON_UNUSED int64_t __pyx_v_c_lo; CYTHON_UNUSED int64_t __pyx_v_c_hi; int64_t __pyx_v_icount; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyArrayObject *__pyx_t_3 = NULL; long __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; int64_t __pyx_t_8; int64_t __pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("unpack", 0); __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; /* "ga4py/ga.pyx":4360 * * """ * cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_src)-1 # <<<<<<<<<<<<<< * cdef int64_t c_lo=0, c_hi=hi_nd[0], icount * if lo is not None: */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_2ga_inquire_dims(__pyx_v_g_src, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_3, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { __pyx_v_hi_nd = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; } } __pyx_t_3 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":4361 * """ * cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_src)-1 * cdef int64_t c_lo=0, c_hi=hi_nd[0], icount # <<<<<<<<<<<<<< * if lo is not None: * c_lo = lo */ __pyx_v_c_lo = 0; __pyx_t_4 = 0; __pyx_t_5 = -1; if (__pyx_t_4 < 0) { __pyx_t_4 += __pyx_pybuffernd_hi_nd.diminfo[0].shape; if (unlikely(__pyx_t_4 < 0)) __pyx_t_5 = 0; } else if (unlikely(__pyx_t_4 >= __pyx_pybuffernd_hi_nd.diminfo[0].shape)) __pyx_t_5 = 0; if (unlikely(__pyx_t_5 != -1)) { __Pyx_RaiseBufferIndexError(__pyx_t_5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_c_hi = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_hi_nd.diminfo[0].strides)); /* "ga4py/ga.pyx":4362 * cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_src)-1 * cdef int64_t c_lo=0, c_hi=hi_nd[0], icount * if lo is not None: # <<<<<<<<<<<<<< * c_lo = lo * if hi is not None: */ __pyx_t_6 = (__pyx_v_lo != Py_None); __pyx_t_7 = (__pyx_t_6 != 0); if (__pyx_t_7) { /* "ga4py/ga.pyx":4363 * cdef int64_t c_lo=0, c_hi=hi_nd[0], icount * if lo is not None: * c_lo = lo # <<<<<<<<<<<<<< * if hi is not None: * c_hi = hi */ __pyx_t_8 = __Pyx_PyInt_from_py_int64_t(__pyx_v_lo); if (unlikely((__pyx_t_8 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_c_lo = __pyx_t_8; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":4364 * if lo is not None: * c_lo = lo * if hi is not None: # <<<<<<<<<<<<<< * c_hi = hi * GA_Unpack64(g_src, g_dst, g_msk, lo, hi, &icount) */ __pyx_t_7 = (__pyx_v_hi != Py_None); __pyx_t_6 = (__pyx_t_7 != 0); if (__pyx_t_6) { /* "ga4py/ga.pyx":4365 * c_lo = lo * if hi is not None: * c_hi = hi # <<<<<<<<<<<<<< * GA_Unpack64(g_src, g_dst, g_msk, lo, hi, &icount) * return icount */ __pyx_t_8 = __Pyx_PyInt_from_py_int64_t(__pyx_v_hi); if (unlikely((__pyx_t_8 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_c_hi = __pyx_t_8; goto __pyx_L4; } __pyx_L4:; /* "ga4py/ga.pyx":4366 * if hi is not None: * c_hi = hi * GA_Unpack64(g_src, g_dst, g_msk, lo, hi, &icount) # <<<<<<<<<<<<<< * return icount * */ __pyx_t_8 = __Pyx_PyInt_from_py_int64_t(__pyx_v_lo); if (unlikely((__pyx_t_8 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = __Pyx_PyInt_from_py_int64_t(__pyx_v_hi); if (unlikely((__pyx_t_9 == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} GA_Unpack64(__pyx_v_g_src, __pyx_v_g_dst, __pyx_v_g_msk, __pyx_t_8, __pyx_t_9, (&__pyx_v_icount)); /* "ga4py/ga.pyx":4367 * c_hi = hi * GA_Unpack64(g_src, g_dst, g_msk, lo, hi, &icount) * return icount # <<<<<<<<<<<<<< * * def update_ghosts(int g_a): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyInt_to_py_int64_t(__pyx_v_icount); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.unpack", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_361update_ghosts(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_360update_ghosts[] = "update_ghosts(int g_a)\nThis call updates the ghost cell regions on each processor with the\n corresponding neighbor data from other processors.\n \n The operation assumes that all data is wrapped around using periodic\n boundary data so that ghost cell data that goes beyound an array boundary\n is wrapped around to the other end of the array. The ga.update_ghosts call\n contains two ga.sync calls before and after the actual update operation.\n For some applications these calls may be unecessary, if so they can be\n removed using the ga.mask_sync subroutine.\n\n This is a collective operation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_361update_ghosts = {__Pyx_NAMESTR("update_ghosts"), (PyCFunction)__pyx_pw_5ga4py_2ga_361update_ghosts, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_360update_ghosts)}; static PyObject *__pyx_pw_5ga4py_2ga_361update_ghosts(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("update_ghosts (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4369; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.update_ghosts", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_360update_ghosts(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4369 * return icount * * def update_ghosts(int g_a): # <<<<<<<<<<<<<< * """This call updates the ghost cell regions on each processor with the * corresponding neighbor data from other processors. */ static PyObject *__pyx_pf_5ga4py_2ga_360update_ghosts(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("update_ghosts", 0); /* "ga4py/ga.pyx":4383 * * """ * GA_Update_ghosts(g_a) # <<<<<<<<<<<<<< * * def update_ghost_dir(int g_a, int dimension, int dir, int flag): */ GA_Update_ghosts(__pyx_v_g_a); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_363update_ghost_dir(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_362update_ghost_dir[] = "update_ghost_dir(int g_a, int dimension, int dir, int flag)\nThis function can be used to update the ghost cells along individual\n directions. It is designed for algorithms that can overlap updates with\n computation. The variable dimension indicates which coordinate direction\n is to be updated (e.g. dimension = 1 would correspond to the y axis in a\n two or three dimensional system), the variable idir can take the values\n +/-1 and indicates whether the side that is to be updated lies in the\n positive or negative direction, and cflag indicates whether or not the\n corners on the side being updated are to be included in the update. The\n following calls would be equivalent to a call to GA_Update_ghosts for a\n 2-dimensional system:\n \n\n status = NGA_Update_ghost_dir(g_a,0,-1,1);\n status = NGA_Update_ghost_dir(g_a,0,1,1);\n status = NGA_Update_ghost_dir(g_a,1,-1,0);\n status = NGA_Update_ghost_dir(g_a,1,1,0);\n\n The variable cflag is set equal to 1 (or non-zero) in the first two calls\n so that the corner ghost cells are update, it is set equal to 0 in the\n second two calls to avoid redundant updates of the corners. Note that\n updating the ghosts cells using several independent calls to the\n nga_update_ghost_dir functions is generally not as efficient as using\n GA_Update_ghosts unless the individual calls can be effectively\n overlapped with computation.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_363update_ghost_dir = {__Pyx_NAMESTR("update_ghost_dir"), (PyCFunction)__pyx_pw_5ga4py_2ga_363update_ghost_dir, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_362update_ghost_dir)}; static PyObject *__pyx_pw_5ga4py_2ga_363update_ghost_dir(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; int __pyx_v_dimension; int __pyx_v_dir; int __pyx_v_flag; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("update_ghost_dir (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__dimension,&__pyx_n_s__dir,&__pyx_n_s__flag,0}; PyObject* values[4] = {0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dimension)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("update_ghost_dir", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4385; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dir)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("update_ghost_dir", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4385; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__flag)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("update_ghost_dir", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4385; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update_ghost_dir") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4385; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4385; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_dimension = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_dimension == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4385; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_dir = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_dir == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4385; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_flag = __Pyx_PyInt_AsInt(values[3]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4385; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("update_ghost_dir", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4385; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.update_ghost_dir", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_362update_ghost_dir(__pyx_self, __pyx_v_g_a, __pyx_v_dimension, __pyx_v_dir, __pyx_v_flag); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4385 * GA_Update_ghosts(g_a) * * def update_ghost_dir(int g_a, int dimension, int dir, int flag): # <<<<<<<<<<<<<< * """This function can be used to update the ghost cells along individual * directions. It is designed for algorithms that can overlap updates with */ static PyObject *__pyx_pf_5ga4py_2ga_362update_ghost_dir(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, int __pyx_v_dimension, int __pyx_v_dir, int __pyx_v_flag) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("update_ghost_dir", 0); /* "ga4py/ga.pyx":4412 * * """ * NGA_Update_ghost_dir(g_a, dimension, dir, flag) # <<<<<<<<<<<<<< * * def uses_ma(): */ NGA_Update_ghost_dir(__pyx_v_g_a, __pyx_v_dimension, __pyx_v_dir, __pyx_v_flag); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_365uses_ma(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_364uses_ma[] = "uses_ma()\nTODO"; static PyMethodDef __pyx_mdef_5ga4py_2ga_365uses_ma = {__Pyx_NAMESTR("uses_ma"), (PyCFunction)__pyx_pw_5ga4py_2ga_365uses_ma, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_364uses_ma)}; static PyObject *__pyx_pw_5ga4py_2ga_365uses_ma(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("uses_ma (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_364uses_ma(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4414 * NGA_Update_ghost_dir(g_a, dimension, dir, flag) * * def uses_ma(): # <<<<<<<<<<<<<< * """TODO""" * if GA_Uses_ma() == 1: */ static PyObject *__pyx_pf_5ga4py_2ga_364uses_ma(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("uses_ma", 0); /* "ga4py/ga.pyx":4416 * def uses_ma(): * """TODO""" * if GA_Uses_ma() == 1: # <<<<<<<<<<<<<< * return True * return False */ __pyx_t_1 = ((GA_Uses_ma() == 1) != 0); if (__pyx_t_1) { /* "ga4py/ga.pyx":4417 * """TODO""" * if GA_Uses_ma() == 1: * return True # <<<<<<<<<<<<<< * return False * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":4418 * if GA_Uses_ma() == 1: * return True * return False # <<<<<<<<<<<<<< * * def wtime(): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.ga.uses_ma", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_367wtime(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_2ga_366wtime[] = "wtime()\nThis function return a wall (or elapsed) time on the calling processor.\n Returns time in seconds representing elapsed wall-clock time since an\n arbitrary time in the past. Example:\n\n starttime = ga.wtime()\n # .... code snippet to be timed ....\n endtime = ga.wtime()\n print \"Time taken = %s seconds\" % endtime-starttime\n\n This is a local operation.\n\n This function is only available in release 4.1 or greater.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_367wtime = {__Pyx_NAMESTR("wtime"), (PyCFunction)__pyx_pw_5ga4py_2ga_367wtime, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_366wtime)}; static PyObject *__pyx_pw_5ga4py_2ga_367wtime(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("wtime (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_2ga_366wtime(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4420 * return False * * def wtime(): # <<<<<<<<<<<<<< * """This function return a wall (or elapsed) time on the calling processor. * Returns time in seconds representing elapsed wall-clock time since an */ static PyObject *__pyx_pf_5ga4py_2ga_366wtime(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("wtime", 0); /* "ga4py/ga.pyx":4435 * * """ * return GA_Wtime() # <<<<<<<<<<<<<< * * def zero(int g_a, lo=None, hi=None): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyFloat_FromDouble(GA_Wtime()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.ga.wtime", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_369zero(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_2ga_368zero[] = "zero(int g_a, lo=None, hi=None)\nSet all the elements in the array or patch to zero."; static PyMethodDef __pyx_mdef_5ga4py_2ga_369zero = {__Pyx_NAMESTR("zero"), (PyCFunction)__pyx_pw_5ga4py_2ga_369zero, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_368zero)}; static PyObject *__pyx_pw_5ga4py_2ga_369zero(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_g_a; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("zero (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__g_a,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/ga.pyx":4437 * return GA_Wtime() * * def zero(int g_a, lo=None, hi=None): # <<<<<<<<<<<<<< * """Set all the elements in the array or patch to zero.""" * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g_a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zero") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4437; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_g_a = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4437; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("zero", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4437; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.zero", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_368zero(__pyx_self, __pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_2ga_368zero(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyArrayObject *__pyx_v_lo_nd = 0; PyArrayObject *__pyx_v_hi_nd = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_hi_nd; __Pyx_Buffer __pyx_pybuffer_hi_nd; __Pyx_LocalBuf_ND __pyx_pybuffernd_lo_nd; __Pyx_Buffer __pyx_pybuffer_lo_nd; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *(*__pyx_t_8)(PyObject *); PyArrayObject *__pyx_t_9 = NULL; int __pyx_t_10; PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("zero", 0); __pyx_pybuffer_lo_nd.pybuffer.buf = NULL; __pyx_pybuffer_lo_nd.refcount = 0; __pyx_pybuffernd_lo_nd.data = NULL; __pyx_pybuffernd_lo_nd.rcbuffer = &__pyx_pybuffer_lo_nd; __pyx_pybuffer_hi_nd.pybuffer.buf = NULL; __pyx_pybuffer_hi_nd.refcount = 0; __pyx_pybuffernd_hi_nd.data = NULL; __pyx_pybuffernd_hi_nd.rcbuffer = &__pyx_pybuffer_hi_nd; /* "ga4py/ga.pyx":4440 * """Set all the elements in the array or patch to zero.""" * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd * if lo is None and hi is None: # <<<<<<<<<<<<<< * GA_Zero(g_a) * else: */ __pyx_t_1 = (__pyx_v_lo == Py_None); if ((__pyx_t_1 != 0)) { __pyx_t_2 = (__pyx_v_hi == Py_None); __pyx_t_3 = (__pyx_t_2 != 0); } else { __pyx_t_3 = (__pyx_t_1 != 0); } if (__pyx_t_3) { /* "ga4py/ga.pyx":4441 * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd * if lo is None and hi is None: * GA_Zero(g_a) # <<<<<<<<<<<<<< * else: * lo_nd,hi_nd = _lohi(g_a,lo,hi) */ GA_Zero(__pyx_v_g_a); goto __pyx_L3; } /*else*/ { /* "ga4py/ga.pyx":4443 * GA_Zero(g_a) * else: * lo_nd,hi_nd = _lohi(g_a,lo,hi) # <<<<<<<<<<<<<< * NGA_Zero_patch64(g_a, lo_nd.data, hi_nd.data) * */ __pyx_t_4 = __pyx_f_5ga4py_2ga__lohi(__pyx_v_g_a, __pyx_v_lo, __pyx_v_hi); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) { PyObject* sequence = __pyx_t_4; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_5 = PyList_GET_ITEM(sequence, 0); __pyx_t_6 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); #endif __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_lo_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13); } } __pyx_pybuffernd_lo_nd.diminfo[0].strides = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lo_nd.diminfo[0].shape = __pyx_pybuffernd_lo_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_9 = 0; __pyx_v_lo_nd = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = ((PyArrayObject *)__pyx_t_6); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); if (unlikely(__pyx_t_10 < 0)) { PyErr_Fetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer, (PyObject*)__pyx_v_hi_nd, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_13, __pyx_t_12, __pyx_t_11); } } __pyx_pybuffernd_hi_nd.diminfo[0].strides = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_hi_nd.diminfo[0].shape = __pyx_pybuffernd_hi_nd.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_9 = 0; __pyx_v_hi_nd = ((PyArrayObject *)__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/ga.pyx":4444 * else: * lo_nd,hi_nd = _lohi(g_a,lo,hi) * NGA_Zero_patch64(g_a, lo_nd.data, hi_nd.data) # <<<<<<<<<<<<<< * * def zero_diagonal(int g_a): */ NGA_Zero_patch64(__pyx_v_g_a, ((int64_t *)__pyx_v_lo_nd->data), ((int64_t *)__pyx_v_hi_nd->data)); } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("ga4py.ga.zero", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_hi_nd.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lo_nd.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_lo_nd); __Pyx_XDECREF((PyObject *)__pyx_v_hi_nd); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_2ga_371zero_diagonal(PyObject *__pyx_self, PyObject *__pyx_arg_g_a); /*proto*/ static char __pyx_doc_5ga4py_2ga_370zero_diagonal[] = "zero_diagonal(int g_a)\nSets the diagonal elements of this matrix g_a with zeros.\n \n This is a collective operation. \n\n "; static PyMethodDef __pyx_mdef_5ga4py_2ga_371zero_diagonal = {__Pyx_NAMESTR("zero_diagonal"), (PyCFunction)__pyx_pw_5ga4py_2ga_371zero_diagonal, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_370zero_diagonal)}; static PyObject *__pyx_pw_5ga4py_2ga_371zero_diagonal(PyObject *__pyx_self, PyObject *__pyx_arg_g_a) { int __pyx_v_g_a; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("zero_diagonal (wrapper)", 0); assert(__pyx_arg_g_a); { __pyx_v_g_a = __Pyx_PyInt_AsInt(__pyx_arg_g_a); if (unlikely((__pyx_v_g_a == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4446; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; __Pyx_AddTraceback("ga4py.ga.zero_diagonal", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_2ga_370zero_diagonal(__pyx_self, ((int)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/ga.pyx":4446 * NGA_Zero_patch64(g_a, lo_nd.data, hi_nd.data) * * def zero_diagonal(int g_a): # <<<<<<<<<<<<<< * """Sets the diagonal elements of this matrix g_a with zeros. * */ static PyObject *__pyx_pf_5ga4py_2ga_370zero_diagonal(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_g_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("zero_diagonal", 0); /* "ga4py/ga.pyx":4452 * * """ * GA_Zero_diagonal(g_a) # <<<<<<<<<<<<<< * * initialize() */ GA_Zero_diagonal(__pyx_v_g_a); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":194 * # experimental exception made for __getbuffer__ and __releasebuffer__ * # -- the details of this may change. * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< * # This implementation of getbuffer is geared towards Cython * # requirements, and does not yet fullfill the PEP. */ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { int __pyx_v_copy_shape; int __pyx_v_i; int __pyx_v_ndim; int __pyx_v_endian_detector; int __pyx_v_little_endian; int __pyx_v_t; char *__pyx_v_f; PyArray_Descr *__pyx_v_descr = 0; int __pyx_v_offset; int __pyx_v_hasfields; int __pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; char *__pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__getbuffer__", 0); if (__pyx_v_info != NULL) { __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); __Pyx_GIVEREF(__pyx_v_info->obj); } /* "numpy.pxd":200 * # of flags * * if info == NULL: return # <<<<<<<<<<<<<< * * cdef int copy_shape, i, ndim */ __pyx_t_1 = ((__pyx_v_info == NULL) != 0); if (__pyx_t_1) { __pyx_r = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "numpy.pxd":203 * * cdef int copy_shape, i, ndim * cdef int endian_detector = 1 # <<<<<<<<<<<<<< * cdef bint little_endian = ((&endian_detector)[0] != 0) * */ __pyx_v_endian_detector = 1; /* "numpy.pxd":204 * cdef int copy_shape, i, ndim * cdef int endian_detector = 1 * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< * * ndim = PyArray_NDIM(self) */ __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); /* "numpy.pxd":206 * cdef bint little_endian = ((&endian_detector)[0] != 0) * * ndim = PyArray_NDIM(self) # <<<<<<<<<<<<<< * * if sizeof(npy_intp) != sizeof(Py_ssize_t): */ __pyx_v_ndim = PyArray_NDIM(__pyx_v_self); /* "numpy.pxd":208 * ndim = PyArray_NDIM(self) * * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< * copy_shape = 1 * else: */ __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); if (__pyx_t_1) { /* "numpy.pxd":209 * * if sizeof(npy_intp) != sizeof(Py_ssize_t): * copy_shape = 1 # <<<<<<<<<<<<<< * else: * copy_shape = 0 */ __pyx_v_copy_shape = 1; goto __pyx_L4; } /*else*/ { /* "numpy.pxd":211 * copy_shape = 1 * else: * copy_shape = 0 # <<<<<<<<<<<<<< * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) */ __pyx_v_copy_shape = 0; } __pyx_L4:; /* "numpy.pxd":213 * copy_shape = 0 * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") */ __pyx_t_1 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0); if (__pyx_t_1) { /* "numpy.pxd":214 * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): # <<<<<<<<<<<<<< * raise ValueError(u"ndarray is not C contiguous") * */ __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS) != 0)) != 0); __pyx_t_3 = __pyx_t_2; } else { __pyx_t_3 = __pyx_t_1; } if (__pyx_t_3) { /* "numpy.pxd":215 * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) */ __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_40), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } __pyx_L5:; /* "numpy.pxd":217 * raise ValueError(u"ndarray is not C contiguous") * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") */ __pyx_t_3 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0); if (__pyx_t_3) { /* "numpy.pxd":218 * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): # <<<<<<<<<<<<<< * raise ValueError(u"ndarray is not Fortran contiguous") * */ __pyx_t_1 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS) != 0)) != 0); __pyx_t_2 = __pyx_t_1; } else { __pyx_t_2 = __pyx_t_3; } if (__pyx_t_2) { /* "numpy.pxd":219 * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< * * info.buf = PyArray_DATA(self) */ __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_42), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; /* "numpy.pxd":221 * raise ValueError(u"ndarray is not Fortran contiguous") * * info.buf = PyArray_DATA(self) # <<<<<<<<<<<<<< * info.ndim = ndim * if copy_shape: */ __pyx_v_info->buf = PyArray_DATA(__pyx_v_self); /* "numpy.pxd":222 * * info.buf = PyArray_DATA(self) * info.ndim = ndim # <<<<<<<<<<<<<< * if copy_shape: * # Allocate new buffer for strides and shape info. */ __pyx_v_info->ndim = __pyx_v_ndim; /* "numpy.pxd":223 * info.buf = PyArray_DATA(self) * info.ndim = ndim * if copy_shape: # <<<<<<<<<<<<<< * # Allocate new buffer for strides and shape info. * # This is allocated as one block, strides first. */ __pyx_t_2 = (__pyx_v_copy_shape != 0); if (__pyx_t_2) { /* "numpy.pxd":226 * # Allocate new buffer for strides and shape info. * # This is allocated as one block, strides first. * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) # <<<<<<<<<<<<<< * info.shape = info.strides + ndim * for i in range(ndim): */ __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2))); /* "numpy.pxd":227 * # This is allocated as one block, strides first. * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) * info.shape = info.strides + ndim # <<<<<<<<<<<<<< * for i in range(ndim): * info.strides[i] = PyArray_STRIDES(self)[i] */ __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim); /* "numpy.pxd":228 * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) * info.shape = info.strides + ndim * for i in range(ndim): # <<<<<<<<<<<<<< * info.strides[i] = PyArray_STRIDES(self)[i] * info.shape[i] = PyArray_DIMS(self)[i] */ __pyx_t_5 = __pyx_v_ndim; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_i = __pyx_t_6; /* "numpy.pxd":229 * info.shape = info.strides + ndim * for i in range(ndim): * info.strides[i] = PyArray_STRIDES(self)[i] # <<<<<<<<<<<<<< * info.shape[i] = PyArray_DIMS(self)[i] * else: */ (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]); /* "numpy.pxd":230 * for i in range(ndim): * info.strides[i] = PyArray_STRIDES(self)[i] * info.shape[i] = PyArray_DIMS(self)[i] # <<<<<<<<<<<<<< * else: * info.strides = PyArray_STRIDES(self) */ (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]); } goto __pyx_L7; } /*else*/ { /* "numpy.pxd":232 * info.shape[i] = PyArray_DIMS(self)[i] * else: * info.strides = PyArray_STRIDES(self) # <<<<<<<<<<<<<< * info.shape = PyArray_DIMS(self) * info.suboffsets = NULL */ __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self)); /* "numpy.pxd":233 * else: * info.strides = PyArray_STRIDES(self) * info.shape = PyArray_DIMS(self) # <<<<<<<<<<<<<< * info.suboffsets = NULL * info.itemsize = PyArray_ITEMSIZE(self) */ __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self)); } __pyx_L7:; /* "numpy.pxd":234 * info.strides = PyArray_STRIDES(self) * info.shape = PyArray_DIMS(self) * info.suboffsets = NULL # <<<<<<<<<<<<<< * info.itemsize = PyArray_ITEMSIZE(self) * info.readonly = not PyArray_ISWRITEABLE(self) */ __pyx_v_info->suboffsets = NULL; /* "numpy.pxd":235 * info.shape = PyArray_DIMS(self) * info.suboffsets = NULL * info.itemsize = PyArray_ITEMSIZE(self) # <<<<<<<<<<<<<< * info.readonly = not PyArray_ISWRITEABLE(self) * */ __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self); /* "numpy.pxd":236 * info.suboffsets = NULL * info.itemsize = PyArray_ITEMSIZE(self) * info.readonly = not PyArray_ISWRITEABLE(self) # <<<<<<<<<<<<<< * * cdef int t */ __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0)); /* "numpy.pxd":239 * * cdef int t * cdef char* f = NULL # <<<<<<<<<<<<<< * cdef dtype descr = self.descr * cdef list stack */ __pyx_v_f = NULL; /* "numpy.pxd":240 * cdef int t * cdef char* f = NULL * cdef dtype descr = self.descr # <<<<<<<<<<<<<< * cdef list stack * cdef int offset */ __pyx_t_4 = ((PyObject *)__pyx_v_self->descr); __Pyx_INCREF(__pyx_t_4); __pyx_v_descr = ((PyArray_Descr *)__pyx_t_4); __pyx_t_4 = 0; /* "numpy.pxd":244 * cdef int offset * * cdef bint hasfields = PyDataType_HASFIELDS(descr) # <<<<<<<<<<<<<< * * if not hasfields and not copy_shape: */ __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr); /* "numpy.pxd":246 * cdef bint hasfields = PyDataType_HASFIELDS(descr) * * if not hasfields and not copy_shape: # <<<<<<<<<<<<<< * # do not call releasebuffer * info.obj = None */ __pyx_t_2 = ((!(__pyx_v_hasfields != 0)) != 0); if (__pyx_t_2) { __pyx_t_3 = ((!(__pyx_v_copy_shape != 0)) != 0); __pyx_t_1 = __pyx_t_3; } else { __pyx_t_1 = __pyx_t_2; } if (__pyx_t_1) { /* "numpy.pxd":248 * if not hasfields and not copy_shape: * # do not call releasebuffer * info.obj = None # <<<<<<<<<<<<<< * else: * # need to call releasebuffer */ __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = Py_None; goto __pyx_L10; } /*else*/ { /* "numpy.pxd":251 * else: * # need to call releasebuffer * info.obj = self # <<<<<<<<<<<<<< * * if not hasfields: */ __Pyx_INCREF(((PyObject *)__pyx_v_self)); __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = ((PyObject *)__pyx_v_self); } __pyx_L10:; /* "numpy.pxd":253 * info.obj = self * * if not hasfields: # <<<<<<<<<<<<<< * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or */ __pyx_t_1 = ((!(__pyx_v_hasfields != 0)) != 0); if (__pyx_t_1) { /* "numpy.pxd":254 * * if not hasfields: * t = descr.type_num # <<<<<<<<<<<<<< * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): */ __pyx_t_5 = __pyx_v_descr->type_num; __pyx_v_t = __pyx_t_5; /* "numpy.pxd":255 * if not hasfields: * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") */ __pyx_t_1 = ((__pyx_v_descr->byteorder == '>') != 0); if (__pyx_t_1) { __pyx_t_2 = (__pyx_v_little_endian != 0); } else { __pyx_t_2 = __pyx_t_1; } if (!__pyx_t_2) { /* "numpy.pxd":256 * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< * raise ValueError(u"Non-native byte order not supported") * if t == NPY_BYTE: f = "b" */ __pyx_t_1 = ((__pyx_v_descr->byteorder == '<') != 0); if (__pyx_t_1) { __pyx_t_3 = ((!(__pyx_v_little_endian != 0)) != 0); __pyx_t_7 = __pyx_t_3; } else { __pyx_t_7 = __pyx_t_1; } __pyx_t_1 = __pyx_t_7; } else { __pyx_t_1 = __pyx_t_2; } if (__pyx_t_1) { /* "numpy.pxd":257 * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" */ __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_44), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L12; } __pyx_L12:; /* "numpy.pxd":274 * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) */ switch (__pyx_v_t) { /* "numpy.pxd":258 * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") * if t == NPY_BYTE: f = "b" # <<<<<<<<<<<<<< * elif t == NPY_UBYTE: f = "B" * elif t == NPY_SHORT: f = "h" */ case NPY_BYTE: __pyx_v_f = __pyx_k__b; break; /* "numpy.pxd":259 * raise ValueError(u"Non-native byte order not supported") * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" # <<<<<<<<<<<<<< * elif t == NPY_SHORT: f = "h" * elif t == NPY_USHORT: f = "H" */ case NPY_UBYTE: __pyx_v_f = __pyx_k__B; break; /* "numpy.pxd":260 * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" * elif t == NPY_SHORT: f = "h" # <<<<<<<<<<<<<< * elif t == NPY_USHORT: f = "H" * elif t == NPY_INT: f = "i" */ case NPY_SHORT: __pyx_v_f = __pyx_k__h; break; /* "numpy.pxd":261 * elif t == NPY_UBYTE: f = "B" * elif t == NPY_SHORT: f = "h" * elif t == NPY_USHORT: f = "H" # <<<<<<<<<<<<<< * elif t == NPY_INT: f = "i" * elif t == NPY_UINT: f = "I" */ case NPY_USHORT: __pyx_v_f = __pyx_k__H; break; /* "numpy.pxd":262 * elif t == NPY_SHORT: f = "h" * elif t == NPY_USHORT: f = "H" * elif t == NPY_INT: f = "i" # <<<<<<<<<<<<<< * elif t == NPY_UINT: f = "I" * elif t == NPY_LONG: f = "l" */ case NPY_INT: __pyx_v_f = __pyx_k__i; break; /* "numpy.pxd":263 * elif t == NPY_USHORT: f = "H" * elif t == NPY_INT: f = "i" * elif t == NPY_UINT: f = "I" # <<<<<<<<<<<<<< * elif t == NPY_LONG: f = "l" * elif t == NPY_ULONG: f = "L" */ case NPY_UINT: __pyx_v_f = __pyx_k__I; break; /* "numpy.pxd":264 * elif t == NPY_INT: f = "i" * elif t == NPY_UINT: f = "I" * elif t == NPY_LONG: f = "l" # <<<<<<<<<<<<<< * elif t == NPY_ULONG: f = "L" * elif t == NPY_LONGLONG: f = "q" */ case NPY_LONG: __pyx_v_f = __pyx_k__l; break; /* "numpy.pxd":265 * elif t == NPY_UINT: f = "I" * elif t == NPY_LONG: f = "l" * elif t == NPY_ULONG: f = "L" # <<<<<<<<<<<<<< * elif t == NPY_LONGLONG: f = "q" * elif t == NPY_ULONGLONG: f = "Q" */ case NPY_ULONG: __pyx_v_f = __pyx_k__L; break; /* "numpy.pxd":266 * elif t == NPY_LONG: f = "l" * elif t == NPY_ULONG: f = "L" * elif t == NPY_LONGLONG: f = "q" # <<<<<<<<<<<<<< * elif t == NPY_ULONGLONG: f = "Q" * elif t == NPY_FLOAT: f = "f" */ case NPY_LONGLONG: __pyx_v_f = __pyx_k__q; break; /* "numpy.pxd":267 * elif t == NPY_ULONG: f = "L" * elif t == NPY_LONGLONG: f = "q" * elif t == NPY_ULONGLONG: f = "Q" # <<<<<<<<<<<<<< * elif t == NPY_FLOAT: f = "f" * elif t == NPY_DOUBLE: f = "d" */ case NPY_ULONGLONG: __pyx_v_f = __pyx_k__Q; break; /* "numpy.pxd":268 * elif t == NPY_LONGLONG: f = "q" * elif t == NPY_ULONGLONG: f = "Q" * elif t == NPY_FLOAT: f = "f" # <<<<<<<<<<<<<< * elif t == NPY_DOUBLE: f = "d" * elif t == NPY_LONGDOUBLE: f = "g" */ case NPY_FLOAT: __pyx_v_f = __pyx_k__f; break; /* "numpy.pxd":269 * elif t == NPY_ULONGLONG: f = "Q" * elif t == NPY_FLOAT: f = "f" * elif t == NPY_DOUBLE: f = "d" # <<<<<<<<<<<<<< * elif t == NPY_LONGDOUBLE: f = "g" * elif t == NPY_CFLOAT: f = "Zf" */ case NPY_DOUBLE: __pyx_v_f = __pyx_k__d; break; /* "numpy.pxd":270 * elif t == NPY_FLOAT: f = "f" * elif t == NPY_DOUBLE: f = "d" * elif t == NPY_LONGDOUBLE: f = "g" # <<<<<<<<<<<<<< * elif t == NPY_CFLOAT: f = "Zf" * elif t == NPY_CDOUBLE: f = "Zd" */ case NPY_LONGDOUBLE: __pyx_v_f = __pyx_k__g; break; /* "numpy.pxd":271 * elif t == NPY_DOUBLE: f = "d" * elif t == NPY_LONGDOUBLE: f = "g" * elif t == NPY_CFLOAT: f = "Zf" # <<<<<<<<<<<<<< * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" */ case NPY_CFLOAT: __pyx_v_f = __pyx_k__Zf; break; /* "numpy.pxd":272 * elif t == NPY_LONGDOUBLE: f = "g" * elif t == NPY_CFLOAT: f = "Zf" * elif t == NPY_CDOUBLE: f = "Zd" # <<<<<<<<<<<<<< * elif t == NPY_CLONGDOUBLE: f = "Zg" * elif t == NPY_OBJECT: f = "O" */ case NPY_CDOUBLE: __pyx_v_f = __pyx_k__Zd; break; /* "numpy.pxd":273 * elif t == NPY_CFLOAT: f = "Zf" * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" # <<<<<<<<<<<<<< * elif t == NPY_OBJECT: f = "O" * else: */ case NPY_CLONGDOUBLE: __pyx_v_f = __pyx_k__Zg; break; /* "numpy.pxd":274 * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) */ case NPY_OBJECT: __pyx_v_f = __pyx_k__O; break; default: /* "numpy.pxd":276 * elif t == NPY_OBJECT: f = "O" * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< * info.format = f * return */ __pyx_t_4 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_45), __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_8)); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_8)); __Pyx_GIVEREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __pyx_t_8 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} break; } /* "numpy.pxd":277 * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) * info.format = f # <<<<<<<<<<<<<< * return * else: */ __pyx_v_info->format = __pyx_v_f; /* "numpy.pxd":278 * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) * info.format = f * return # <<<<<<<<<<<<<< * else: * info.format = stdlib.malloc(_buffer_format_string_len) */ __pyx_r = 0; goto __pyx_L0; goto __pyx_L11; } /*else*/ { /* "numpy.pxd":280 * return * else: * info.format = stdlib.malloc(_buffer_format_string_len) # <<<<<<<<<<<<<< * info.format[0] = c'^' # Native data types, manual alignment * offset = 0 */ __pyx_v_info->format = ((char *)malloc(255)); /* "numpy.pxd":281 * else: * info.format = stdlib.malloc(_buffer_format_string_len) * info.format[0] = c'^' # Native data types, manual alignment # <<<<<<<<<<<<<< * offset = 0 * f = _util_dtypestring(descr, info.format + 1, */ (__pyx_v_info->format[0]) = '^'; /* "numpy.pxd":282 * info.format = stdlib.malloc(_buffer_format_string_len) * info.format[0] = c'^' # Native data types, manual alignment * offset = 0 # <<<<<<<<<<<<<< * f = _util_dtypestring(descr, info.format + 1, * info.format + _buffer_format_string_len, */ __pyx_v_offset = 0; /* "numpy.pxd":285 * f = _util_dtypestring(descr, info.format + 1, * info.format + _buffer_format_string_len, * &offset) # <<<<<<<<<<<<<< * f[0] = c'\0' # Terminate format string * */ __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_f = __pyx_t_9; /* "numpy.pxd":286 * info.format + _buffer_format_string_len, * &offset) * f[0] = c'\0' # Terminate format string # <<<<<<<<<<<<<< * * def __releasebuffer__(ndarray self, Py_buffer* info): */ (__pyx_v_f[0]) = '\x00'; } __pyx_L11:; __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) { __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL; } goto __pyx_L2; __pyx_L0:; if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) { __Pyx_GOTREF(Py_None); __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL; } __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_descr); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/ static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0); __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info)); __Pyx_RefNannyFinishContext(); } /* "numpy.pxd":288 * f[0] = c'\0' # Terminate format string * * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< * if PyArray_HASFIELDS(self): * stdlib.free(info.format) */ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) { __Pyx_RefNannyDeclarations int __pyx_t_1; __Pyx_RefNannySetupContext("__releasebuffer__", 0); /* "numpy.pxd":289 * * def __releasebuffer__(ndarray self, Py_buffer* info): * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< * stdlib.free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): */ __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0); if (__pyx_t_1) { /* "numpy.pxd":290 * def __releasebuffer__(ndarray self, Py_buffer* info): * if PyArray_HASFIELDS(self): * stdlib.free(info.format) # <<<<<<<<<<<<<< * if sizeof(npy_intp) != sizeof(Py_ssize_t): * stdlib.free(info.strides) */ free(__pyx_v_info->format); goto __pyx_L3; } __pyx_L3:; /* "numpy.pxd":291 * if PyArray_HASFIELDS(self): * stdlib.free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< * stdlib.free(info.strides) * # info.shape was stored after info.strides in the same block */ __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); if (__pyx_t_1) { /* "numpy.pxd":292 * stdlib.free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): * stdlib.free(info.strides) # <<<<<<<<<<<<<< * # info.shape was stored after info.strides in the same block * */ free(__pyx_v_info->strides); goto __pyx_L4; } __pyx_L4:; __Pyx_RefNannyFinishContext(); } /* "numpy.pxd":768 * ctypedef npy_cdouble complex_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(1, a) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0); /* "numpy.pxd":769 * * cdef inline object PyArray_MultiIterNew1(a): * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew2(a, b): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":771 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(2, a, b) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0); /* "numpy.pxd":772 * * cdef inline object PyArray_MultiIterNew2(a, b): * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew3(a, b, c): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":774 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(3, a, b, c) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0); /* "numpy.pxd":775 * * cdef inline object PyArray_MultiIterNew3(a, b, c): * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":777 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(4, a, b, c, d) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0); /* "numpy.pxd":778 * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":780 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(5, a, b, c, d, e) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0); /* "numpy.pxd":781 * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< * * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":783 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< * # Recursive utility function used in __getbuffer__ to get format * # string. The new location in the format string is returned. */ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) { PyArray_Descr *__pyx_v_child = 0; int __pyx_v_endian_detector; int __pyx_v_little_endian; PyObject *__pyx_v_fields = 0; PyObject *__pyx_v_childname = NULL; PyObject *__pyx_v_new_offset = NULL; PyObject *__pyx_v_t = NULL; char *__pyx_r; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; Py_ssize_t __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *(*__pyx_t_6)(PyObject *); int __pyx_t_7; int __pyx_t_8; int __pyx_t_9; int __pyx_t_10; long __pyx_t_11; char *__pyx_t_12; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_util_dtypestring", 0); /* "numpy.pxd":790 * cdef int delta_offset * cdef tuple i * cdef int endian_detector = 1 # <<<<<<<<<<<<<< * cdef bint little_endian = ((&endian_detector)[0] != 0) * cdef tuple fields */ __pyx_v_endian_detector = 1; /* "numpy.pxd":791 * cdef tuple i * cdef int endian_detector = 1 * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< * cdef tuple fields * */ __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); /* "numpy.pxd":794 * cdef tuple fields * * for childname in descr.names: # <<<<<<<<<<<<<< * fields = descr.fields[childname] * child, new_offset = fields */ if (unlikely(((PyObject *)__pyx_v_descr->names) == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_1 = ((PyObject *)__pyx_v_descr->names); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; for (;;) { if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3); __pyx_t_3 = 0; /* "numpy.pxd":795 * * for childname in descr.names: * fields = descr.fields[childname] # <<<<<<<<<<<<<< * child, new_offset = fields * */ __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (!__pyx_t_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0; /* "numpy.pxd":796 * for childname in descr.names: * fields = descr.fields[childname] * child, new_offset = fields # <<<<<<<<<<<<<< * * if (end - f) - (new_offset - offset[0]) < 15: */ if (likely(PyTuple_CheckExact(((PyObject *)__pyx_v_fields)))) { PyObject* sequence = ((PyObject *)__pyx_v_fields); #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); #else __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); #endif } else if (1) { __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else { Py_ssize_t index = -1; __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_fields)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = NULL; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L6_unpacking_done:; } if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_XDECREF_SET(__pyx_v_child, ((PyArray_Descr *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4); __pyx_t_4 = 0; /* "numpy.pxd":798 * child, new_offset = fields * * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") * */ __pyx_t_4 = PyInt_FromLong((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { /* "numpy.pxd":799 * * if (end - f) - (new_offset - offset[0]) < 15: * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< * * if ((child.byteorder == c'>' and little_endian) or */ __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_47), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; /* "numpy.pxd":801 * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") * * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< * (child.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") */ __pyx_t_7 = ((__pyx_v_child->byteorder == '>') != 0); if (__pyx_t_7) { __pyx_t_8 = (__pyx_v_little_endian != 0); } else { __pyx_t_8 = __pyx_t_7; } if (!__pyx_t_8) { /* "numpy.pxd":802 * * if ((child.byteorder == c'>' and little_endian) or * (child.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< * raise ValueError(u"Non-native byte order not supported") * # One could encode it in the format string and have Cython */ __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0); if (__pyx_t_7) { __pyx_t_9 = ((!(__pyx_v_little_endian != 0)) != 0); __pyx_t_10 = __pyx_t_9; } else { __pyx_t_10 = __pyx_t_7; } __pyx_t_7 = __pyx_t_10; } else { __pyx_t_7 = __pyx_t_8; } if (__pyx_t_7) { /* "numpy.pxd":803 * if ((child.byteorder == c'>' and little_endian) or * (child.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * # One could encode it in the format string and have Cython * # complain instead, BUT: < and > in format strings also imply */ __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_48), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; /* "numpy.pxd":813 * * # Output padding bytes * while offset[0] < new_offset: # <<<<<<<<<<<<<< * f[0] = 120 # "x"; pad byte * f += 1 */ while (1) { __pyx_t_5 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_7) break; /* "numpy.pxd":814 * # Output padding bytes * while offset[0] < new_offset: * f[0] = 120 # "x"; pad byte # <<<<<<<<<<<<<< * f += 1 * offset[0] += 1 */ (__pyx_v_f[0]) = 120; /* "numpy.pxd":815 * while offset[0] < new_offset: * f[0] = 120 # "x"; pad byte * f += 1 # <<<<<<<<<<<<<< * offset[0] += 1 * */ __pyx_v_f = (__pyx_v_f + 1); /* "numpy.pxd":816 * f[0] = 120 # "x"; pad byte * f += 1 * offset[0] += 1 # <<<<<<<<<<<<<< * * offset[0] += child.itemsize */ __pyx_t_11 = 0; (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + 1); } /* "numpy.pxd":818 * offset[0] += 1 * * offset[0] += child.itemsize # <<<<<<<<<<<<<< * * if not PyDataType_HASFIELDS(child): */ __pyx_t_11 = 0; (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + __pyx_v_child->elsize); /* "numpy.pxd":820 * offset[0] += child.itemsize * * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< * t = child.type_num * if end - f < 5: */ __pyx_t_7 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0); if (__pyx_t_7) { /* "numpy.pxd":821 * * if not PyDataType_HASFIELDS(child): * t = child.type_num # <<<<<<<<<<<<<< * if end - f < 5: * raise RuntimeError(u"Format string allocated too short.") */ __pyx_t_3 = PyInt_FromLong(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_3); __pyx_t_3 = 0; /* "numpy.pxd":822 * if not PyDataType_HASFIELDS(child): * t = child.type_num * if end - f < 5: # <<<<<<<<<<<<<< * raise RuntimeError(u"Format string allocated too short.") * */ __pyx_t_7 = (((__pyx_v_end - __pyx_v_f) < 5) != 0); if (__pyx_t_7) { /* "numpy.pxd":823 * t = child.type_num * if end - f < 5: * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< * * # Until ticket #99 is fixed, use integers to avoid warnings */ __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_50), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L12; } __pyx_L12:; /* "numpy.pxd":826 * * # Until ticket #99 is fixed, use integers to avoid warnings * if t == NPY_BYTE: f[0] = 98 #"b" # <<<<<<<<<<<<<< * elif t == NPY_UBYTE: f[0] = 66 #"B" * elif t == NPY_SHORT: f[0] = 104 #"h" */ __pyx_t_3 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 98; goto __pyx_L13; } /* "numpy.pxd":827 * # Until ticket #99 is fixed, use integers to avoid warnings * if t == NPY_BYTE: f[0] = 98 #"b" * elif t == NPY_UBYTE: f[0] = 66 #"B" # <<<<<<<<<<<<<< * elif t == NPY_SHORT: f[0] = 104 #"h" * elif t == NPY_USHORT: f[0] = 72 #"H" */ __pyx_t_5 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 66; goto __pyx_L13; } /* "numpy.pxd":828 * if t == NPY_BYTE: f[0] = 98 #"b" * elif t == NPY_UBYTE: f[0] = 66 #"B" * elif t == NPY_SHORT: f[0] = 104 #"h" # <<<<<<<<<<<<<< * elif t == NPY_USHORT: f[0] = 72 #"H" * elif t == NPY_INT: f[0] = 105 #"i" */ __pyx_t_3 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 104; goto __pyx_L13; } /* "numpy.pxd":829 * elif t == NPY_UBYTE: f[0] = 66 #"B" * elif t == NPY_SHORT: f[0] = 104 #"h" * elif t == NPY_USHORT: f[0] = 72 #"H" # <<<<<<<<<<<<<< * elif t == NPY_INT: f[0] = 105 #"i" * elif t == NPY_UINT: f[0] = 73 #"I" */ __pyx_t_5 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 72; goto __pyx_L13; } /* "numpy.pxd":830 * elif t == NPY_SHORT: f[0] = 104 #"h" * elif t == NPY_USHORT: f[0] = 72 #"H" * elif t == NPY_INT: f[0] = 105 #"i" # <<<<<<<<<<<<<< * elif t == NPY_UINT: f[0] = 73 #"I" * elif t == NPY_LONG: f[0] = 108 #"l" */ __pyx_t_3 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 105; goto __pyx_L13; } /* "numpy.pxd":831 * elif t == NPY_USHORT: f[0] = 72 #"H" * elif t == NPY_INT: f[0] = 105 #"i" * elif t == NPY_UINT: f[0] = 73 #"I" # <<<<<<<<<<<<<< * elif t == NPY_LONG: f[0] = 108 #"l" * elif t == NPY_ULONG: f[0] = 76 #"L" */ __pyx_t_5 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 73; goto __pyx_L13; } /* "numpy.pxd":832 * elif t == NPY_INT: f[0] = 105 #"i" * elif t == NPY_UINT: f[0] = 73 #"I" * elif t == NPY_LONG: f[0] = 108 #"l" # <<<<<<<<<<<<<< * elif t == NPY_ULONG: f[0] = 76 #"L" * elif t == NPY_LONGLONG: f[0] = 113 #"q" */ __pyx_t_3 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 108; goto __pyx_L13; } /* "numpy.pxd":833 * elif t == NPY_UINT: f[0] = 73 #"I" * elif t == NPY_LONG: f[0] = 108 #"l" * elif t == NPY_ULONG: f[0] = 76 #"L" # <<<<<<<<<<<<<< * elif t == NPY_LONGLONG: f[0] = 113 #"q" * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" */ __pyx_t_5 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 76; goto __pyx_L13; } /* "numpy.pxd":834 * elif t == NPY_LONG: f[0] = 108 #"l" * elif t == NPY_ULONG: f[0] = 76 #"L" * elif t == NPY_LONGLONG: f[0] = 113 #"q" # <<<<<<<<<<<<<< * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" * elif t == NPY_FLOAT: f[0] = 102 #"f" */ __pyx_t_3 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 113; goto __pyx_L13; } /* "numpy.pxd":835 * elif t == NPY_ULONG: f[0] = 76 #"L" * elif t == NPY_LONGLONG: f[0] = 113 #"q" * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" # <<<<<<<<<<<<<< * elif t == NPY_FLOAT: f[0] = 102 #"f" * elif t == NPY_DOUBLE: f[0] = 100 #"d" */ __pyx_t_5 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 81; goto __pyx_L13; } /* "numpy.pxd":836 * elif t == NPY_LONGLONG: f[0] = 113 #"q" * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" * elif t == NPY_FLOAT: f[0] = 102 #"f" # <<<<<<<<<<<<<< * elif t == NPY_DOUBLE: f[0] = 100 #"d" * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" */ __pyx_t_3 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 102; goto __pyx_L13; } /* "numpy.pxd":837 * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" * elif t == NPY_FLOAT: f[0] = 102 #"f" * elif t == NPY_DOUBLE: f[0] = 100 #"d" # <<<<<<<<<<<<<< * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf */ __pyx_t_5 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 100; goto __pyx_L13; } /* "numpy.pxd":838 * elif t == NPY_FLOAT: f[0] = 102 #"f" * elif t == NPY_DOUBLE: f[0] = 100 #"d" * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" # <<<<<<<<<<<<<< * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd */ __pyx_t_3 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 103; goto __pyx_L13; } /* "numpy.pxd":839 * elif t == NPY_DOUBLE: f[0] = 100 #"d" * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf # <<<<<<<<<<<<<< * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg */ __pyx_t_5 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 90; (__pyx_v_f[1]) = 102; __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L13; } /* "numpy.pxd":840 * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd # <<<<<<<<<<<<<< * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg * elif t == NPY_OBJECT: f[0] = 79 #"O" */ __pyx_t_3 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 90; (__pyx_v_f[1]) = 100; __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L13; } /* "numpy.pxd":841 * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg # <<<<<<<<<<<<<< * elif t == NPY_OBJECT: f[0] = 79 #"O" * else: */ __pyx_t_5 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 90; (__pyx_v_f[1]) = 103; __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L13; } /* "numpy.pxd":842 * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg * elif t == NPY_OBJECT: f[0] = 79 #"O" # <<<<<<<<<<<<<< * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) */ __pyx_t_3 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 79; goto __pyx_L13; } /*else*/ { /* "numpy.pxd":844 * elif t == NPY_OBJECT: f[0] = 79 #"O" * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< * f += 1 * else: */ __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_45), __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_5)); __Pyx_GIVEREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L13:; /* "numpy.pxd":845 * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) * f += 1 # <<<<<<<<<<<<<< * else: * # Cython ignores struct boundary information ("T{...}"), */ __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L11; } /*else*/ { /* "numpy.pxd":849 * # Cython ignores struct boundary information ("T{...}"), * # so don't output it * f = _util_dtypestring(child, f, end, offset) # <<<<<<<<<<<<<< * return f * */ __pyx_t_12 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_12 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_f = __pyx_t_12; } __pyx_L11:; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "numpy.pxd":850 * # so don't output it * f = _util_dtypestring(child, f, end, offset) * return f # <<<<<<<<<<<<<< * * */ __pyx_r = __pyx_v_f; goto __pyx_L0; __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_child); __Pyx_XDECREF(__pyx_v_fields); __Pyx_XDECREF(__pyx_v_childname); __Pyx_XDECREF(__pyx_v_new_offset); __Pyx_XDECREF(__pyx_v_t); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":965 * * * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< * cdef PyObject* baseptr * if base is None: */ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { PyObject *__pyx_v_baseptr; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; __Pyx_RefNannySetupContext("set_array_base", 0); /* "numpy.pxd":967 * cdef inline void set_array_base(ndarray arr, object base): * cdef PyObject* baseptr * if base is None: # <<<<<<<<<<<<<< * baseptr = NULL * else: */ __pyx_t_1 = (__pyx_v_base == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "numpy.pxd":968 * cdef PyObject* baseptr * if base is None: * baseptr = NULL # <<<<<<<<<<<<<< * else: * Py_INCREF(base) # important to do this before decref below! */ __pyx_v_baseptr = NULL; goto __pyx_L3; } /*else*/ { /* "numpy.pxd":970 * baseptr = NULL * else: * Py_INCREF(base) # important to do this before decref below! # <<<<<<<<<<<<<< * baseptr = base * Py_XDECREF(arr.base) */ Py_INCREF(__pyx_v_base); /* "numpy.pxd":971 * else: * Py_INCREF(base) # important to do this before decref below! * baseptr = base # <<<<<<<<<<<<<< * Py_XDECREF(arr.base) * arr.base = baseptr */ __pyx_v_baseptr = ((PyObject *)__pyx_v_base); } __pyx_L3:; /* "numpy.pxd":972 * Py_INCREF(base) # important to do this before decref below! * baseptr = base * Py_XDECREF(arr.base) # <<<<<<<<<<<<<< * arr.base = baseptr * */ Py_XDECREF(__pyx_v_arr->base); /* "numpy.pxd":973 * baseptr = base * Py_XDECREF(arr.base) * arr.base = baseptr # <<<<<<<<<<<<<< * * cdef inline object get_array_base(ndarray arr): */ __pyx_v_arr->base = __pyx_v_baseptr; __Pyx_RefNannyFinishContext(); } /* "numpy.pxd":975 * arr.base = baseptr * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< * if arr.base is NULL: * return None */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; __Pyx_RefNannySetupContext("get_array_base", 0); /* "numpy.pxd":976 * * cdef inline object get_array_base(ndarray arr): * if arr.base is NULL: # <<<<<<<<<<<<<< * return None * else: */ __pyx_t_1 = ((__pyx_v_arr->base == NULL) != 0); if (__pyx_t_1) { /* "numpy.pxd":977 * cdef inline object get_array_base(ndarray arr): * if arr.base is NULL: * return None # <<<<<<<<<<<<<< * else: * return arr.base */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_None); __pyx_r = Py_None; goto __pyx_L0; goto __pyx_L3; } /*else*/ { /* "numpy.pxd":979 * return None * else: * return arr.base # <<<<<<<<<<<<<< */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_arr->base)); __pyx_r = ((PyObject *)__pyx_v_arr->base); goto __pyx_L0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyMethodDef __pyx_methods[] = { {__Pyx_NAMESTR("distribution"), (PyCFunction)__pyx_pw_5ga4py_2ga_73distribution, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_72distribution)}, {__Pyx_NAMESTR("inquire"), (PyCFunction)__pyx_pw_5ga4py_2ga_129inquire, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_128inquire)}, {__Pyx_NAMESTR("inquire_dims"), (PyCFunction)__pyx_pw_5ga4py_2ga_131inquire_dims, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_130inquire_dims)}, {__Pyx_NAMESTR("inquire_type"), (PyCFunction)__pyx_pw_5ga4py_2ga_137inquire_type, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_2ga_136inquire_type)}, {0, 0, 0, 0} }; #if PY_MAJOR_VERSION >= 3 static struct PyModuleDef __pyx_moduledef = { #if PY_VERSION_HEX < 0x03020000 { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, #else PyModuleDef_HEAD_INIT, #endif __Pyx_NAMESTR("ga"), __Pyx_DOCSTR(__pyx_k_51), /* m_doc */ -1, /* m_size */ __pyx_methods /* m_methods */, NULL, /* m_reload */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL /* m_free */ }; #endif static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0}, {&__pyx_kp_s_10, __pyx_k_10, sizeof(__pyx_k_10), 0, 0, 1, 0}, {&__pyx_kp_s_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 0, 1, 0}, {&__pyx_kp_s_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 0, 1, 0}, {&__pyx_kp_s_13, __pyx_k_13, sizeof(__pyx_k_13), 0, 0, 1, 0}, {&__pyx_kp_s_14, __pyx_k_14, sizeof(__pyx_k_14), 0, 0, 1, 0}, {&__pyx_kp_s_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 0, 1, 0}, {&__pyx_kp_s_17, __pyx_k_17, sizeof(__pyx_k_17), 0, 0, 1, 0}, {&__pyx_kp_s_18, __pyx_k_18, sizeof(__pyx_k_18), 0, 0, 1, 0}, {&__pyx_kp_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 0}, {&__pyx_kp_s_2, __pyx_k_2, sizeof(__pyx_k_2), 0, 0, 1, 0}, {&__pyx_kp_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 0}, {&__pyx_kp_s_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 1, 0}, {&__pyx_kp_s_22, __pyx_k_22, sizeof(__pyx_k_22), 0, 0, 1, 0}, {&__pyx_kp_s_23, __pyx_k_23, sizeof(__pyx_k_23), 0, 0, 1, 0}, {&__pyx_kp_s_24, __pyx_k_24, sizeof(__pyx_k_24), 0, 0, 1, 0}, {&__pyx_kp_s_25, __pyx_k_25, sizeof(__pyx_k_25), 0, 0, 1, 0}, {&__pyx_kp_s_26, __pyx_k_26, sizeof(__pyx_k_26), 0, 0, 1, 0}, {&__pyx_kp_s_27, __pyx_k_27, sizeof(__pyx_k_27), 0, 0, 1, 0}, {&__pyx_kp_s_28, __pyx_k_28, sizeof(__pyx_k_28), 0, 0, 1, 0}, {&__pyx_kp_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 0}, {&__pyx_kp_s_30, __pyx_k_30, sizeof(__pyx_k_30), 0, 0, 1, 0}, {&__pyx_n_s_300, __pyx_k_300, sizeof(__pyx_k_300), 0, 0, 1, 1}, {&__pyx_n_s_303, __pyx_k_303, sizeof(__pyx_k_303), 0, 0, 1, 1}, {&__pyx_kp_s_31, __pyx_k_31, sizeof(__pyx_k_31), 0, 0, 1, 0}, {&__pyx_n_s_310, __pyx_k_310, sizeof(__pyx_k_310), 0, 0, 1, 1}, {&__pyx_n_s_313, __pyx_k_313, sizeof(__pyx_k_313), 0, 0, 1, 1}, {&__pyx_n_s_316, __pyx_k_316, sizeof(__pyx_k_316), 0, 0, 1, 1}, {&__pyx_n_s_319, __pyx_k_319, sizeof(__pyx_k_319), 0, 0, 1, 1}, {&__pyx_kp_s_32, __pyx_k_32, sizeof(__pyx_k_32), 0, 0, 1, 0}, {&__pyx_n_s_322, __pyx_k_322, sizeof(__pyx_k_322), 0, 0, 1, 1}, {&__pyx_kp_s_33, __pyx_k_33, sizeof(__pyx_k_33), 0, 0, 1, 0}, {&__pyx_n_s_349, __pyx_k_349, sizeof(__pyx_k_349), 0, 0, 1, 1}, {&__pyx_kp_s_37, __pyx_k_37, sizeof(__pyx_k_37), 0, 0, 1, 0}, {&__pyx_n_s_370, __pyx_k_370, sizeof(__pyx_k_370), 0, 0, 1, 1}, {&__pyx_kp_u_39, __pyx_k_39, sizeof(__pyx_k_39), 0, 1, 0, 0}, {&__pyx_kp_s_4, __pyx_k_4, sizeof(__pyx_k_4), 0, 0, 1, 0}, {&__pyx_kp_u_409, __pyx_k_409, sizeof(__pyx_k_409), 0, 1, 0, 0}, {&__pyx_kp_u_41, __pyx_k_41, sizeof(__pyx_k_41), 0, 1, 0, 0}, {&__pyx_kp_u_410, __pyx_k_410, sizeof(__pyx_k_410), 0, 1, 0, 0}, {&__pyx_kp_u_411, __pyx_k_411, sizeof(__pyx_k_411), 0, 1, 0, 0}, {&__pyx_kp_u_412, __pyx_k_412, sizeof(__pyx_k_412), 0, 1, 0, 0}, {&__pyx_kp_u_43, __pyx_k_43, sizeof(__pyx_k_43), 0, 1, 0, 0}, {&__pyx_kp_u_45, __pyx_k_45, sizeof(__pyx_k_45), 0, 1, 0, 0}, {&__pyx_kp_u_46, __pyx_k_46, sizeof(__pyx_k_46), 0, 1, 0, 0}, {&__pyx_kp_u_49, __pyx_k_49, sizeof(__pyx_k_49), 0, 1, 0, 0}, {&__pyx_kp_s_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 0, 1, 0}, {&__pyx_kp_s_54, __pyx_k_54, sizeof(__pyx_k_54), 0, 0, 1, 0}, {&__pyx_n_s_55, __pyx_k_55, sizeof(__pyx_k_55), 0, 0, 1, 1}, {&__pyx_kp_s_6, __pyx_k_6, sizeof(__pyx_k_6), 0, 0, 1, 0}, {&__pyx_kp_s_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 0, 1, 0}, {&__pyx_n_s_72, __pyx_k_72, sizeof(__pyx_k_72), 0, 0, 1, 1}, {&__pyx_n_s_75, __pyx_k_75, sizeof(__pyx_k_75), 0, 0, 1, 1}, {&__pyx_kp_s_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 0, 1, 0}, {&__pyx_n_s__C_CHAR, __pyx_k__C_CHAR, sizeof(__pyx_k__C_CHAR), 0, 0, 1, 1}, {&__pyx_n_s__C_CONTIGUOUS, __pyx_k__C_CONTIGUOUS, sizeof(__pyx_k__C_CONTIGUOUS), 0, 0, 1, 1}, {&__pyx_n_s__C_DBL, __pyx_k__C_DBL, sizeof(__pyx_k__C_DBL), 0, 0, 1, 1}, {&__pyx_n_s__C_DCPL, __pyx_k__C_DCPL, sizeof(__pyx_k__C_DCPL), 0, 0, 1, 1}, {&__pyx_n_s__C_FLOAT, __pyx_k__C_FLOAT, sizeof(__pyx_k__C_FLOAT), 0, 0, 1, 1}, {&__pyx_n_s__C_INT, __pyx_k__C_INT, sizeof(__pyx_k__C_INT), 0, 0, 1, 1}, {&__pyx_n_s__C_LDBL, __pyx_k__C_LDBL, sizeof(__pyx_k__C_LDBL), 0, 0, 1, 1}, {&__pyx_n_s__C_LDCPL, __pyx_k__C_LDCPL, sizeof(__pyx_k__C_LDCPL), 0, 0, 1, 1}, {&__pyx_n_s__C_LONG, __pyx_k__C_LONG, sizeof(__pyx_k__C_LONG), 0, 0, 1, 1}, {&__pyx_n_s__C_LONGLONG, __pyx_k__C_LONGLONG, sizeof(__pyx_k__C_LONGLONG), 0, 0, 1, 1}, {&__pyx_n_s__C_SCPL, __pyx_k__C_SCPL, sizeof(__pyx_k__C_SCPL), 0, 0, 1, 1}, {&__pyx_n_s__F_BYTE, __pyx_k__F_BYTE, sizeof(__pyx_k__F_BYTE), 0, 0, 1, 1}, {&__pyx_n_s__F_DBL, __pyx_k__F_DBL, sizeof(__pyx_k__F_DBL), 0, 0, 1, 1}, {&__pyx_n_s__F_DCPL, __pyx_k__F_DCPL, sizeof(__pyx_k__F_DCPL), 0, 0, 1, 1}, {&__pyx_n_s__F_INT, __pyx_k__F_INT, sizeof(__pyx_k__F_INT), 0, 0, 1, 1}, {&__pyx_n_s__F_LOG, __pyx_k__F_LOG, sizeof(__pyx_k__F_LOG), 0, 0, 1, 1}, {&__pyx_n_s__F_REAL, __pyx_k__F_REAL, sizeof(__pyx_k__F_REAL), 0, 0, 1, 1}, {&__pyx_n_s__F_SCPL, __pyx_k__F_SCPL, sizeof(__pyx_k__F_SCPL), 0, 0, 1, 1}, {&__pyx_n_s__NotImplementedError, __pyx_k__NotImplementedError, sizeof(__pyx_k__NotImplementedError), 0, 0, 1, 1}, {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1}, {&__pyx_n_s__TYPE_BASE, __pyx_k__TYPE_BASE, sizeof(__pyx_k__TYPE_BASE), 0, 0, 1, 1}, {&__pyx_n_s__TypeError, __pyx_k__TypeError, sizeof(__pyx_k__TypeError), 0, 0, 1, 1}, {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1}, {&__pyx_n_s__WORLD_PROC_GROUP, __pyx_k__WORLD_PROC_GROUP, sizeof(__pyx_k__WORLD_PROC_GROUP), 0, 0, 1, 1}, {&__pyx_n_s__X, __pyx_k__X, sizeof(__pyx_k__X), 0, 0, 1, 1}, {&__pyx_n_s__X_nd, __pyx_k__X_nd, sizeof(__pyx_k__X_nd), 0, 0, 1, 1}, {&__pyx_n_s____builtin__, __pyx_k____builtin__, sizeof(__pyx_k____builtin__), 0, 0, 1, 1}, {&__pyx_n_s____import__, __pyx_k____import__, sizeof(__pyx_k____import__), 0, 0, 1, 1}, {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, {&__pyx_n_s____pyx_getbuffer, __pyx_k____pyx_getbuffer, sizeof(__pyx_k____pyx_getbuffer), 0, 0, 1, 1}, {&__pyx_n_s____pyx_releasebuffer, __pyx_k____pyx_releasebuffer, sizeof(__pyx_k____pyx_releasebuffer), 0, 0, 1, 1}, {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, {&__pyx_n_s___to_dtype, __pyx_k___to_dtype, sizeof(__pyx_k___to_dtype), 0, 0, 1, 1}, {&__pyx_n_s__abs_value, __pyx_k__abs_value, sizeof(__pyx_k__abs_value), 0, 0, 1, 1}, {&__pyx_n_s__absmax, __pyx_k__absmax, sizeof(__pyx_k__absmax), 0, 0, 1, 1}, {&__pyx_n_s__absmin, __pyx_k__absmin, sizeof(__pyx_k__absmin), 0, 0, 1, 1}, {&__pyx_n_s__acc, __pyx_k__acc, sizeof(__pyx_k__acc), 0, 0, 1, 1}, {&__pyx_n_s__access, __pyx_k__access, sizeof(__pyx_k__access), 0, 0, 1, 1}, {&__pyx_n_s__access_block, __pyx_k__access_block, sizeof(__pyx_k__access_block), 0, 0, 1, 1}, {&__pyx_n_s__access_block_grid, __pyx_k__access_block_grid, sizeof(__pyx_k__access_block_grid), 0, 0, 1, 1}, {&__pyx_n_s__access_ghosts, __pyx_k__access_ghosts, sizeof(__pyx_k__access_ghosts), 0, 0, 1, 1}, {&__pyx_n_s__add, __pyx_k__add, sizeof(__pyx_k__add), 0, 0, 1, 1}, {&__pyx_n_s__add_constant, __pyx_k__add_constant, sizeof(__pyx_k__add_constant), 0, 0, 1, 1}, {&__pyx_n_s__add_diagonal, __pyx_k__add_diagonal, sizeof(__pyx_k__add_diagonal), 0, 0, 1, 1}, {&__pyx_n_s__ahi, __pyx_k__ahi, sizeof(__pyx_k__ahi), 0, 0, 1, 1}, {&__pyx_n_s__ahi_nd, __pyx_k__ahi_nd, sizeof(__pyx_k__ahi_nd), 0, 0, 1, 1}, {&__pyx_n_s__all, __pyx_k__all, sizeof(__pyx_k__all), 0, 0, 1, 1}, {&__pyx_n_s__allocate, __pyx_k__allocate, sizeof(__pyx_k__allocate), 0, 0, 1, 1}, {&__pyx_n_s__alo, __pyx_k__alo, sizeof(__pyx_k__alo), 0, 0, 1, 1}, {&__pyx_n_s__alo_nd, __pyx_k__alo_nd, sizeof(__pyx_k__alo_nd), 0, 0, 1, 1}, {&__pyx_n_s__alpha, __pyx_k__alpha, sizeof(__pyx_k__alpha), 0, 0, 1, 1}, {&__pyx_n_s__any, __pyx_k__any, sizeof(__pyx_k__any), 0, 0, 1, 1}, {&__pyx_n_s__apretty, __pyx_k__apretty, sizeof(__pyx_k__apretty), 0, 0, 1, 1}, {&__pyx_n_s__array, __pyx_k__array, sizeof(__pyx_k__array), 0, 0, 1, 1}, {&__pyx_n_s__asarray, __pyx_k__asarray, sizeof(__pyx_k__asarray), 0, 0, 1, 1}, {&__pyx_n_s__ascontiguousarray, __pyx_k__ascontiguousarray, sizeof(__pyx_k__ascontiguousarray), 0, 0, 1, 1}, {&__pyx_n_s__atexit, __pyx_k__atexit, sizeof(__pyx_k__atexit), 0, 0, 1, 1}, {&__pyx_n_s__beta, __pyx_k__beta, sizeof(__pyx_k__beta), 0, 0, 1, 1}, {&__pyx_n_s__bhi, __pyx_k__bhi, sizeof(__pyx_k__bhi), 0, 0, 1, 1}, {&__pyx_n_s__bhi_nd, __pyx_k__bhi_nd, sizeof(__pyx_k__bhi_nd), 0, 0, 1, 1}, {&__pyx_n_s__blo, __pyx_k__blo, sizeof(__pyx_k__blo), 0, 0, 1, 1}, {&__pyx_n_s__blo_nd, __pyx_k__blo_nd, sizeof(__pyx_k__blo_nd), 0, 0, 1, 1}, {&__pyx_n_s__block, __pyx_k__block, sizeof(__pyx_k__block), 0, 0, 1, 1}, {&__pyx_n_s__block_dims, __pyx_k__block_dims, sizeof(__pyx_k__block_dims), 0, 0, 1, 1}, {&__pyx_n_s__block_nd, __pyx_k__block_nd, sizeof(__pyx_k__block_nd), 0, 0, 1, 1}, {&__pyx_n_s__brdcst, __pyx_k__brdcst, sizeof(__pyx_k__brdcst), 0, 0, 1, 1}, {&__pyx_n_s__buffer, __pyx_k__buffer, sizeof(__pyx_k__buffer), 0, 0, 1, 1}, {&__pyx_n_s__buffer_nd, __pyx_k__buffer_nd, sizeof(__pyx_k__buffer_nd), 0, 0, 1, 1}, {&__pyx_n_s__bytes, __pyx_k__bytes, sizeof(__pyx_k__bytes), 0, 0, 1, 1}, {&__pyx_n_s__c_excl, __pyx_k__c_excl, sizeof(__pyx_k__c_excl), 0, 0, 1, 1}, {&__pyx_n_s__c_hi, __pyx_k__c_hi, sizeof(__pyx_k__c_hi), 0, 0, 1, 1}, {&__pyx_n_s__c_lo, __pyx_k__c_lo, sizeof(__pyx_k__c_lo), 0, 0, 1, 1}, {&__pyx_n_s__char_transa, __pyx_k__char_transa, sizeof(__pyx_k__char_transa), 0, 0, 1, 1}, {&__pyx_n_s__char_transb, __pyx_k__char_transb, sizeof(__pyx_k__char_transb), 0, 0, 1, 1}, {&__pyx_n_s__check_handle, __pyx_k__check_handle, sizeof(__pyx_k__check_handle), 0, 0, 1, 1}, {&__pyx_n_s__chi, __pyx_k__chi, sizeof(__pyx_k__chi), 0, 0, 1, 1}, {&__pyx_n_s__chi_nd, __pyx_k__chi_nd, sizeof(__pyx_k__chi_nd), 0, 0, 1, 1}, {&__pyx_n_s__chunk, __pyx_k__chunk, sizeof(__pyx_k__chunk), 0, 0, 1, 1}, {&__pyx_n_s__chunk_nd, __pyx_k__chunk_nd, sizeof(__pyx_k__chunk_nd), 0, 0, 1, 1}, {&__pyx_n_s__clo, __pyx_k__clo, sizeof(__pyx_k__clo), 0, 0, 1, 1}, {&__pyx_n_s__clo_nd, __pyx_k__clo_nd, sizeof(__pyx_k__clo_nd), 0, 0, 1, 1}, {&__pyx_n_s__cluster_nnodes, __pyx_k__cluster_nnodes, sizeof(__pyx_k__cluster_nnodes), 0, 0, 1, 1}, {&__pyx_n_s__cluster_nodeid, __pyx_k__cluster_nodeid, sizeof(__pyx_k__cluster_nodeid), 0, 0, 1, 1}, {&__pyx_n_s__cluster_nprocs, __pyx_k__cluster_nprocs, sizeof(__pyx_k__cluster_nprocs), 0, 0, 1, 1}, {&__pyx_n_s__cluster_proc_nodeid, __pyx_k__cluster_proc_nodeid, sizeof(__pyx_k__cluster_proc_nodeid), 0, 0, 1, 1}, {&__pyx_n_s__cluster_procid, __pyx_k__cluster_procid, sizeof(__pyx_k__cluster_procid), 0, 0, 1, 1}, {&__pyx_n_s__code, __pyx_k__code, sizeof(__pyx_k__code), 0, 0, 1, 1}, {&__pyx_n_s__color, __pyx_k__color, sizeof(__pyx_k__color), 0, 0, 1, 1}, {&__pyx_n_s__compare_distr, __pyx_k__compare_distr, sizeof(__pyx_k__compare_distr), 0, 0, 1, 1}, {&__pyx_n_s__complex128, __pyx_k__complex128, sizeof(__pyx_k__complex128), 0, 0, 1, 1}, {&__pyx_n_s__complex256, __pyx_k__complex256, sizeof(__pyx_k__complex256), 0, 0, 1, 1}, {&__pyx_n_s__complex64, __pyx_k__complex64, sizeof(__pyx_k__complex64), 0, 0, 1, 1}, {&__pyx_n_s__control, __pyx_k__control, sizeof(__pyx_k__control), 0, 0, 1, 1}, {&__pyx_n_s__coord, __pyx_k__coord, sizeof(__pyx_k__coord), 0, 0, 1, 1}, {&__pyx_n_s__copy, __pyx_k__copy, sizeof(__pyx_k__copy), 0, 0, 1, 1}, {&__pyx_n_s__create, __pyx_k__create, sizeof(__pyx_k__create), 0, 0, 1, 1}, {&__pyx_n_s__create_ghosts, __pyx_k__create_ghosts, sizeof(__pyx_k__create_ghosts), 0, 0, 1, 1}, {&__pyx_n_s__create_ghosts_irreg, __pyx_k__create_ghosts_irreg, sizeof(__pyx_k__create_ghosts_irreg), 0, 0, 1, 1}, {&__pyx_n_s__create_handle, __pyx_k__create_handle, sizeof(__pyx_k__create_handle), 0, 0, 1, 1}, {&__pyx_n_s__create_irreg, __pyx_k__create_irreg, sizeof(__pyx_k__create_irreg), 0, 0, 1, 1}, {&__pyx_n_s__create_mutexes, __pyx_k__create_mutexes, sizeof(__pyx_k__create_mutexes), 0, 0, 1, 1}, {&__pyx_n_s__ctrans, __pyx_k__ctrans, sizeof(__pyx_k__ctrans), 0, 0, 1, 1}, {&__pyx_n_s__dalpha, __pyx_k__dalpha, sizeof(__pyx_k__dalpha), 0, 0, 1, 1}, {&__pyx_n_s__data, __pyx_k__data, sizeof(__pyx_k__data), 0, 0, 1, 1}, {&__pyx_n_s__dbeta, __pyx_k__dbeta, sizeof(__pyx_k__dbeta), 0, 0, 1, 1}, {&__pyx_n_s__dcalpha, __pyx_k__dcalpha, sizeof(__pyx_k__dcalpha), 0, 0, 1, 1}, {&__pyx_n_s__dcbeta, __pyx_k__dcbeta, sizeof(__pyx_k__dcbeta), 0, 0, 1, 1}, {&__pyx_n_s__dcinc, __pyx_k__dcinc, sizeof(__pyx_k__dcinc), 0, 0, 1, 1}, {&__pyx_n_s__dcstart, __pyx_k__dcstart, sizeof(__pyx_k__dcstart), 0, 0, 1, 1}, {&__pyx_n_s__dcval, __pyx_k__dcval, sizeof(__pyx_k__dcval), 0, 0, 1, 1}, {&__pyx_n_s__dcvalue, __pyx_k__dcvalue, sizeof(__pyx_k__dcvalue), 0, 0, 1, 1}, {&__pyx_n_s__debug, __pyx_k__debug, sizeof(__pyx_k__debug), 0, 0, 1, 1}, {&__pyx_n_s__deregister_type, __pyx_k__deregister_type, sizeof(__pyx_k__deregister_type), 0, 0, 1, 1}, {&__pyx_n_s__destroy, __pyx_k__destroy, sizeof(__pyx_k__destroy), 0, 0, 1, 1}, {&__pyx_n_s__destroy_mutexes, __pyx_k__destroy_mutexes, sizeof(__pyx_k__destroy_mutexes), 0, 0, 1, 1}, {&__pyx_n_s__diag, __pyx_k__diag, sizeof(__pyx_k__diag), 0, 0, 1, 1}, {&__pyx_n_s__diag_reuse, __pyx_k__diag_reuse, sizeof(__pyx_k__diag_reuse), 0, 0, 1, 1}, {&__pyx_n_s__diag_std, __pyx_k__diag_std, sizeof(__pyx_k__diag_std), 0, 0, 1, 1}, {&__pyx_n_s__dimension, __pyx_k__dimension, sizeof(__pyx_k__dimension), 0, 0, 1, 1}, {&__pyx_n_s__dimlen, __pyx_k__dimlen, sizeof(__pyx_k__dimlen), 0, 0, 1, 1}, {&__pyx_n_s__dims, __pyx_k__dims, sizeof(__pyx_k__dims), 0, 0, 1, 1}, {&__pyx_n_s__dims_nd, __pyx_k__dims_nd, sizeof(__pyx_k__dims_nd), 0, 0, 1, 1}, {&__pyx_n_s__dinc, __pyx_k__dinc, sizeof(__pyx_k__dinc), 0, 0, 1, 1}, {&__pyx_n_s__dir, __pyx_k__dir, sizeof(__pyx_k__dir), 0, 0, 1, 1}, {&__pyx_n_s__dot, __pyx_k__dot, sizeof(__pyx_k__dot), 0, 0, 1, 1}, {&__pyx_n_s__double, __pyx_k__double, sizeof(__pyx_k__double), 0, 0, 1, 1}, {&__pyx_n_s__dstart, __pyx_k__dstart, sizeof(__pyx_k__dstart), 0, 0, 1, 1}, {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1}, {&__pyx_n_s__duplicate, __pyx_k__duplicate, sizeof(__pyx_k__duplicate), 0, 0, 1, 1}, {&__pyx_n_s__dval, __pyx_k__dval, sizeof(__pyx_k__dval), 0, 0, 1, 1}, {&__pyx_n_s__dvalue, __pyx_k__dvalue, sizeof(__pyx_k__dvalue), 0, 0, 1, 1}, {&__pyx_n_s__elem_divide, __pyx_k__elem_divide, sizeof(__pyx_k__elem_divide), 0, 0, 1, 1}, {&__pyx_n_s__elem_maximum, __pyx_k__elem_maximum, sizeof(__pyx_k__elem_maximum), 0, 0, 1, 1}, {&__pyx_n_s__elem_minimum, __pyx_k__elem_minimum, sizeof(__pyx_k__elem_minimum), 0, 0, 1, 1}, {&__pyx_n_s__elem_multiply, __pyx_k__elem_multiply, sizeof(__pyx_k__elem_multiply), 0, 0, 1, 1}, {&__pyx_n_s__elems, __pyx_k__elems, sizeof(__pyx_k__elems), 0, 0, 1, 1}, {&__pyx_n_s__enum, __pyx_k__enum, sizeof(__pyx_k__enum), 0, 0, 1, 1}, {&__pyx_n_s__error, __pyx_k__error, sizeof(__pyx_k__error), 0, 0, 1, 1}, {&__pyx_n_s__evalues, __pyx_k__evalues, sizeof(__pyx_k__evalues), 0, 0, 1, 1}, {&__pyx_n_s__excl, __pyx_k__excl, sizeof(__pyx_k__excl), 0, 0, 1, 1}, {&__pyx_n_s__falpha, __pyx_k__falpha, sizeof(__pyx_k__falpha), 0, 0, 1, 1}, {&__pyx_n_s__fbeta, __pyx_k__fbeta, sizeof(__pyx_k__fbeta), 0, 0, 1, 1}, {&__pyx_n_s__fcalpha, __pyx_k__fcalpha, sizeof(__pyx_k__fcalpha), 0, 0, 1, 1}, {&__pyx_n_s__fcbeta, __pyx_k__fcbeta, sizeof(__pyx_k__fcbeta), 0, 0, 1, 1}, {&__pyx_n_s__fcinc, __pyx_k__fcinc, sizeof(__pyx_k__fcinc), 0, 0, 1, 1}, {&__pyx_n_s__fcstart, __pyx_k__fcstart, sizeof(__pyx_k__fcstart), 0, 0, 1, 1}, {&__pyx_n_s__fcval, __pyx_k__fcval, sizeof(__pyx_k__fcval), 0, 0, 1, 1}, {&__pyx_n_s__fcvalue, __pyx_k__fcvalue, sizeof(__pyx_k__fcvalue), 0, 0, 1, 1}, {&__pyx_n_s__fence, __pyx_k__fence, sizeof(__pyx_k__fence), 0, 0, 1, 1}, {&__pyx_n_s__file, __pyx_k__file, sizeof(__pyx_k__file), 0, 0, 1, 1}, {&__pyx_n_s__fill, __pyx_k__fill, sizeof(__pyx_k__fill), 0, 0, 1, 1}, {&__pyx_n_s__finc, __pyx_k__finc, sizeof(__pyx_k__finc), 0, 0, 1, 1}, {&__pyx_n_s__first, __pyx_k__first, sizeof(__pyx_k__first), 0, 0, 1, 1}, {&__pyx_n_s__flag, __pyx_k__flag, sizeof(__pyx_k__flag), 0, 0, 1, 1}, {&__pyx_n_s__flags, __pyx_k__flags, sizeof(__pyx_k__flags), 0, 0, 1, 1}, {&__pyx_n_s__float128, __pyx_k__float128, sizeof(__pyx_k__float128), 0, 0, 1, 1}, {&__pyx_n_s__float32, __pyx_k__float32, sizeof(__pyx_k__float32), 0, 0, 1, 1}, {&__pyx_n_s__float64, __pyx_k__float64, sizeof(__pyx_k__float64), 0, 0, 1, 1}, {&__pyx_n_s__fstart, __pyx_k__fstart, sizeof(__pyx_k__fstart), 0, 0, 1, 1}, {&__pyx_n_s__fval, __pyx_k__fval, sizeof(__pyx_k__fval), 0, 0, 1, 1}, {&__pyx_n_s__fvalue, __pyx_k__fvalue, sizeof(__pyx_k__fvalue), 0, 0, 1, 1}, {&__pyx_n_s__g_a, __pyx_k__g_a, sizeof(__pyx_k__g_a), 0, 0, 1, 1}, {&__pyx_n_s__g_b, __pyx_k__g_b, sizeof(__pyx_k__g_b), 0, 0, 1, 1}, {&__pyx_n_s__g_c, __pyx_k__g_c, sizeof(__pyx_k__g_c), 0, 0, 1, 1}, {&__pyx_n_s__g_dst, __pyx_k__g_dst, sizeof(__pyx_k__g_dst), 0, 0, 1, 1}, {&__pyx_n_s__g_m, __pyx_k__g_m, sizeof(__pyx_k__g_m), 0, 0, 1, 1}, {&__pyx_n_s__g_msk, __pyx_k__g_msk, sizeof(__pyx_k__g_msk), 0, 0, 1, 1}, {&__pyx_n_s__g_s, __pyx_k__g_s, sizeof(__pyx_k__g_s), 0, 0, 1, 1}, {&__pyx_n_s__g_src, __pyx_k__g_src, sizeof(__pyx_k__g_src), 0, 0, 1, 1}, {&__pyx_n_s__g_v, __pyx_k__g_v, sizeof(__pyx_k__g_v), 0, 0, 1, 1}, {&__pyx_n_s__ga_dcalpha, __pyx_k__ga_dcalpha, sizeof(__pyx_k__ga_dcalpha), 0, 0, 1, 1}, {&__pyx_n_s__ga_dcbeta, __pyx_k__ga_dcbeta, sizeof(__pyx_k__ga_dcbeta), 0, 0, 1, 1}, {&__pyx_n_s__ga_fcalpha, __pyx_k__ga_fcalpha, sizeof(__pyx_k__ga_fcalpha), 0, 0, 1, 1}, {&__pyx_n_s__ga_fcbeta, __pyx_k__ga_fcbeta, sizeof(__pyx_k__ga_fcbeta), 0, 0, 1, 1}, {&__pyx_n_s__gather, __pyx_k__gather, sizeof(__pyx_k__gather), 0, 0, 1, 1}, {&__pyx_n_s__gatype, __pyx_k__gatype, sizeof(__pyx_k__gatype), 0, 0, 1, 1}, {&__pyx_n_s__gdcv, __pyx_k__gdcv, sizeof(__pyx_k__gdcv), 0, 0, 1, 1}, {&__pyx_n_s__gemm, __pyx_k__gemm, sizeof(__pyx_k__gemm), 0, 0, 1, 1}, {&__pyx_n_s__get, __pyx_k__get, sizeof(__pyx_k__get), 0, 0, 1, 1}, {&__pyx_n_s__get_block_info, __pyx_k__get_block_info, sizeof(__pyx_k__get_block_info), 0, 0, 1, 1}, {&__pyx_n_s__get_debug, __pyx_k__get_debug, sizeof(__pyx_k__get_debug), 0, 0, 1, 1}, {&__pyx_n_s__get_diag, __pyx_k__get_diag, sizeof(__pyx_k__get_diag), 0, 0, 1, 1}, {&__pyx_n_s__gfcv, __pyx_k__gfcv, sizeof(__pyx_k__gfcv), 0, 0, 1, 1}, {&__pyx_n_s__gop, __pyx_k__gop, sizeof(__pyx_k__gop), 0, 0, 1, 1}, {&__pyx_n_s__gop_absmax, __pyx_k__gop_absmax, sizeof(__pyx_k__gop_absmax), 0, 0, 1, 1}, {&__pyx_n_s__gop_absmin, __pyx_k__gop_absmin, sizeof(__pyx_k__gop_absmin), 0, 0, 1, 1}, {&__pyx_n_s__gop_add, __pyx_k__gop_add, sizeof(__pyx_k__gop_add), 0, 0, 1, 1}, {&__pyx_n_s__gop_max, __pyx_k__gop_max, sizeof(__pyx_k__gop_max), 0, 0, 1, 1}, {&__pyx_n_s__gop_min, __pyx_k__gop_min, sizeof(__pyx_k__gop_min), 0, 0, 1, 1}, {&__pyx_n_s__gop_multiply, __pyx_k__gop_multiply, sizeof(__pyx_k__gop_multiply), 0, 0, 1, 1}, {&__pyx_n_s__gtype, __pyx_k__gtype, sizeof(__pyx_k__gtype), 0, 0, 1, 1}, {&__pyx_n_s__h, __pyx_k__h, sizeof(__pyx_k__h), 0, 0, 1, 1}, {&__pyx_n_s__has_ghosts, __pyx_k__has_ghosts, sizeof(__pyx_k__has_ghosts), 0, 0, 1, 1}, {&__pyx_n_s__hi, __pyx_k__hi, sizeof(__pyx_k__hi), 0, 0, 1, 1}, {&__pyx_n_s__hi_dst, __pyx_k__hi_dst, sizeof(__pyx_k__hi_dst), 0, 0, 1, 1}, {&__pyx_n_s__hi_nd, __pyx_k__hi_nd, sizeof(__pyx_k__hi_nd), 0, 0, 1, 1}, {&__pyx_n_s__hi_proc, __pyx_k__hi_proc, sizeof(__pyx_k__hi_proc), 0, 0, 1, 1}, {&__pyx_n_s__i, __pyx_k__i, sizeof(__pyx_k__i), 0, 0, 1, 1}, {&__pyx_n_s__ialpha, __pyx_k__ialpha, sizeof(__pyx_k__ialpha), 0, 0, 1, 1}, {&__pyx_n_s__ibeta, __pyx_k__ibeta, sizeof(__pyx_k__ibeta), 0, 0, 1, 1}, {&__pyx_n_s__icount, __pyx_k__icount, sizeof(__pyx_k__icount), 0, 0, 1, 1}, {&__pyx_n_s__idx, __pyx_k__idx, sizeof(__pyx_k__idx), 0, 0, 1, 1}, {&__pyx_n_s__iinc, __pyx_k__iinc, sizeof(__pyx_k__iinc), 0, 0, 1, 1}, {&__pyx_n_s__imag, __pyx_k__imag, sizeof(__pyx_k__imag), 0, 0, 1, 1}, {&__pyx_n_s__inc, __pyx_k__inc, sizeof(__pyx_k__inc), 0, 0, 1, 1}, {&__pyx_n_s__index, __pyx_k__index, sizeof(__pyx_k__index), 0, 0, 1, 1}, {&__pyx_n_s__init_fence, __pyx_k__init_fence, sizeof(__pyx_k__init_fence), 0, 0, 1, 1}, {&__pyx_n_s__initialize, __pyx_k__initialize, sizeof(__pyx_k__initialize), 0, 0, 1, 1}, {&__pyx_n_s__initialize_ltd, __pyx_k__initialize_ltd, sizeof(__pyx_k__initialize_ltd), 0, 0, 1, 1}, {&__pyx_n_s__initialized, __pyx_k__initialized, sizeof(__pyx_k__initialized), 0, 0, 1, 1}, {&__pyx_n_s__inquire_dtype, __pyx_k__inquire_dtype, sizeof(__pyx_k__inquire_dtype), 0, 0, 1, 1}, {&__pyx_n_s__inquire_memory, __pyx_k__inquire_memory, sizeof(__pyx_k__inquire_memory), 0, 0, 1, 1}, {&__pyx_n_s__inquire_name, __pyx_k__inquire_name, sizeof(__pyx_k__inquire_name), 0, 0, 1, 1}, {&__pyx_n_s__int32, __pyx_k__int32, sizeof(__pyx_k__int32), 0, 0, 1, 1}, {&__pyx_n_s__int64, __pyx_k__int64, sizeof(__pyx_k__int64), 0, 0, 1, 1}, {&__pyx_n_s__int8, __pyx_k__int8, sizeof(__pyx_k__int8), 0, 0, 1, 1}, {&__pyx_n_s__intc, __pyx_k__intc, sizeof(__pyx_k__intc), 0, 0, 1, 1}, {&__pyx_n_s__is_mirrored, __pyx_k__is_mirrored, sizeof(__pyx_k__is_mirrored), 0, 0, 1, 1}, {&__pyx_n_s__istart, __pyx_k__istart, sizeof(__pyx_k__istart), 0, 0, 1, 1}, {&__pyx_n_s__itemsize, __pyx_k__itemsize, sizeof(__pyx_k__itemsize), 0, 0, 1, 1}, {&__pyx_n_s__ival, __pyx_k__ival, sizeof(__pyx_k__ival), 0, 0, 1, 1}, {&__pyx_n_s__ivalue, __pyx_k__ivalue, sizeof(__pyx_k__ivalue), 0, 0, 1, 1}, {&__pyx_n_s__k, __pyx_k__k, sizeof(__pyx_k__k), 0, 0, 1, 1}, {&__pyx_n_s__l, __pyx_k__l, sizeof(__pyx_k__l), 0, 0, 1, 1}, {&__pyx_n_s__lalpha, __pyx_k__lalpha, sizeof(__pyx_k__lalpha), 0, 0, 1, 1}, {&__pyx_n_s__last, __pyx_k__last, sizeof(__pyx_k__last), 0, 0, 1, 1}, {&__pyx_n_s__lbeta, __pyx_k__lbeta, sizeof(__pyx_k__lbeta), 0, 0, 1, 1}, {&__pyx_n_s__ld_nd, __pyx_k__ld_nd, sizeof(__pyx_k__ld_nd), 0, 0, 1, 1}, {&__pyx_n_s__ldalpha, __pyx_k__ldalpha, sizeof(__pyx_k__ldalpha), 0, 0, 1, 1}, {&__pyx_n_s__ldbeta, __pyx_k__ldbeta, sizeof(__pyx_k__ldbeta), 0, 0, 1, 1}, {&__pyx_n_s__ldinc, __pyx_k__ldinc, sizeof(__pyx_k__ldinc), 0, 0, 1, 1}, {&__pyx_n_s__ldstart, __pyx_k__ldstart, sizeof(__pyx_k__ldstart), 0, 0, 1, 1}, {&__pyx_n_s__ldval, __pyx_k__ldval, sizeof(__pyx_k__ldval), 0, 0, 1, 1}, {&__pyx_n_s__ldvalue, __pyx_k__ldvalue, sizeof(__pyx_k__ldvalue), 0, 0, 1, 1}, {&__pyx_n_s__limit, __pyx_k__limit, sizeof(__pyx_k__limit), 0, 0, 1, 1}, {&__pyx_n_s__linc, __pyx_k__linc, sizeof(__pyx_k__linc), 0, 0, 1, 1}, {&__pyx_n_s__list, __pyx_k__list, sizeof(__pyx_k__list), 0, 0, 1, 1}, {&__pyx_n_s__list_nd, __pyx_k__list_nd, sizeof(__pyx_k__list_nd), 0, 0, 1, 1}, {&__pyx_n_s__llalpha, __pyx_k__llalpha, sizeof(__pyx_k__llalpha), 0, 0, 1, 1}, {&__pyx_n_s__llbeta, __pyx_k__llbeta, sizeof(__pyx_k__llbeta), 0, 0, 1, 1}, {&__pyx_n_s__llinc, __pyx_k__llinc, sizeof(__pyx_k__llinc), 0, 0, 1, 1}, {&__pyx_n_s__llstart, __pyx_k__llstart, sizeof(__pyx_k__llstart), 0, 0, 1, 1}, {&__pyx_n_s__llt_solve, __pyx_k__llt_solve, sizeof(__pyx_k__llt_solve), 0, 0, 1, 1}, {&__pyx_n_s__llval, __pyx_k__llval, sizeof(__pyx_k__llval), 0, 0, 1, 1}, {&__pyx_n_s__llvalue, __pyx_k__llvalue, sizeof(__pyx_k__llvalue), 0, 0, 1, 1}, {&__pyx_n_s__lo, __pyx_k__lo, sizeof(__pyx_k__lo), 0, 0, 1, 1}, {&__pyx_n_s__lo_dst, __pyx_k__lo_dst, sizeof(__pyx_k__lo_dst), 0, 0, 1, 1}, {&__pyx_n_s__lo_nd, __pyx_k__lo_nd, sizeof(__pyx_k__lo_nd), 0, 0, 1, 1}, {&__pyx_n_s__lo_proc, __pyx_k__lo_proc, sizeof(__pyx_k__lo_proc), 0, 0, 1, 1}, {&__pyx_n_s__locate, __pyx_k__locate, sizeof(__pyx_k__locate), 0, 0, 1, 1}, {&__pyx_n_s__locate_nnodes, __pyx_k__locate_nnodes, sizeof(__pyx_k__locate_nnodes), 0, 0, 1, 1}, {&__pyx_n_s__locate_region, __pyx_k__locate_region, sizeof(__pyx_k__locate_region), 0, 0, 1, 1}, {&__pyx_n_s__lock, __pyx_k__lock, sizeof(__pyx_k__lock), 0, 0, 1, 1}, {&__pyx_n_s__long, __pyx_k__long, sizeof(__pyx_k__long), 0, 0, 1, 1}, {&__pyx_n_s__longlong, __pyx_k__longlong, sizeof(__pyx_k__longlong), 0, 0, 1, 1}, {&__pyx_n_s__lstart, __pyx_k__lstart, sizeof(__pyx_k__lstart), 0, 0, 1, 1}, {&__pyx_n_s__lu_solve, __pyx_k__lu_solve, sizeof(__pyx_k__lu_solve), 0, 0, 1, 1}, {&__pyx_n_s__lval, __pyx_k__lval, sizeof(__pyx_k__lval), 0, 0, 1, 1}, {&__pyx_n_s__lvalue, __pyx_k__lvalue, sizeof(__pyx_k__lvalue), 0, 0, 1, 1}, {&__pyx_n_s__m, __pyx_k__m, sizeof(__pyx_k__m), 0, 0, 1, 1}, {&__pyx_n_s__map, __pyx_k__map, sizeof(__pyx_k__map), 0, 0, 1, 1}, {&__pyx_n_s__map_nd, __pyx_k__map_nd, sizeof(__pyx_k__map_nd), 0, 0, 1, 1}, {&__pyx_n_s__map_reshape, __pyx_k__map_reshape, sizeof(__pyx_k__map_reshape), 0, 0, 1, 1}, {&__pyx_n_s__mapc, __pyx_k__mapc, sizeof(__pyx_k__mapc), 0, 0, 1, 1}, {&__pyx_n_s__mapc_nd, __pyx_k__mapc_nd, sizeof(__pyx_k__mapc_nd), 0, 0, 1, 1}, {&__pyx_n_s__mask_sync, __pyx_k__mask_sync, sizeof(__pyx_k__mask_sync), 0, 0, 1, 1}, {&__pyx_n_s__matmul_patch, __pyx_k__matmul_patch, sizeof(__pyx_k__matmul_patch), 0, 0, 1, 1}, {&__pyx_n_s__max, __pyx_k__max, sizeof(__pyx_k__max), 0, 0, 1, 1}, {&__pyx_n_s__median, __pyx_k__median, sizeof(__pyx_k__median), 0, 0, 1, 1}, {&__pyx_n_s__memory_avail, __pyx_k__memory_avail, sizeof(__pyx_k__memory_avail), 0, 0, 1, 1}, {&__pyx_n_s__memory_limited, __pyx_k__memory_limited, sizeof(__pyx_k__memory_limited), 0, 0, 1, 1}, {&__pyx_n_s__merge_distr_patch, __pyx_k__merge_distr_patch, sizeof(__pyx_k__merge_distr_patch), 0, 0, 1, 1}, {&__pyx_n_s__merge_mirrored, __pyx_k__merge_mirrored, sizeof(__pyx_k__merge_mirrored), 0, 0, 1, 1}, {&__pyx_n_s__message, __pyx_k__message, sizeof(__pyx_k__message), 0, 0, 1, 1}, {&__pyx_n_s__mhi, __pyx_k__mhi, sizeof(__pyx_k__mhi), 0, 0, 1, 1}, {&__pyx_n_s__mhi_nd, __pyx_k__mhi_nd, sizeof(__pyx_k__mhi_nd), 0, 0, 1, 1}, {&__pyx_n_s__min, __pyx_k__min, sizeof(__pyx_k__min), 0, 0, 1, 1}, {&__pyx_n_s__mlo, __pyx_k__mlo, sizeof(__pyx_k__mlo), 0, 0, 1, 1}, {&__pyx_n_s__mlo_nd, __pyx_k__mlo_nd, sizeof(__pyx_k__mlo_nd), 0, 0, 1, 1}, {&__pyx_n_s__mutex, __pyx_k__mutex, sizeof(__pyx_k__mutex), 0, 0, 1, 1}, {&__pyx_n_s__n, __pyx_k__n, sizeof(__pyx_k__n), 0, 0, 1, 1}, {&__pyx_n_s__name, __pyx_k__name, sizeof(__pyx_k__name), 0, 0, 1, 1}, {&__pyx_n_s__nbacc, __pyx_k__nbacc, sizeof(__pyx_k__nbacc), 0, 0, 1, 1}, {&__pyx_n_s__nbget, __pyx_k__nbget, sizeof(__pyx_k__nbget), 0, 0, 1, 1}, {&__pyx_n_s__nbhandle, __pyx_k__nbhandle, sizeof(__pyx_k__nbhandle), 0, 0, 1, 1}, {&__pyx_n_s__nblock, __pyx_k__nblock, sizeof(__pyx_k__nblock), 0, 0, 1, 1}, {&__pyx_n_s__nblock_nd, __pyx_k__nblock_nd, sizeof(__pyx_k__nblock_nd), 0, 0, 1, 1}, {&__pyx_n_s__nbput, __pyx_k__nbput, sizeof(__pyx_k__nbput), 0, 0, 1, 1}, {&__pyx_n_s__nbwait, __pyx_k__nbwait, sizeof(__pyx_k__nbwait), 0, 0, 1, 1}, {&__pyx_n_s__ndim, __pyx_k__ndim, sizeof(__pyx_k__ndim), 0, 0, 1, 1}, {&__pyx_n_s__nm, __pyx_k__nm, sizeof(__pyx_k__nm), 0, 0, 1, 1}, {&__pyx_n_s__nnodes, __pyx_k__nnodes, sizeof(__pyx_k__nnodes), 0, 0, 1, 1}, {&__pyx_n_s__node, __pyx_k__node, sizeof(__pyx_k__node), 0, 0, 1, 1}, {&__pyx_n_s__nodeid, __pyx_k__nodeid, sizeof(__pyx_k__nodeid), 0, 0, 1, 1}, {&__pyx_n_s__norm1, __pyx_k__norm1, sizeof(__pyx_k__norm1), 0, 0, 1, 1}, {&__pyx_n_s__norm_infinity, __pyx_k__norm_infinity, sizeof(__pyx_k__norm_infinity), 0, 0, 1, 1}, {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1}, {&__pyx_n_s__np_guess, __pyx_k__np_guess, sizeof(__pyx_k__np_guess), 0, 0, 1, 1}, {&__pyx_n_s__np_result, __pyx_k__np_result, sizeof(__pyx_k__np_result), 0, 0, 1, 1}, {&__pyx_n_s__num, __pyx_k__num, sizeof(__pyx_k__num), 0, 0, 1, 1}, {&__pyx_n_s__num_blocks, __pyx_k__num_blocks, sizeof(__pyx_k__num_blocks), 0, 0, 1, 1}, {&__pyx_n_s__num_group, __pyx_k__num_group, sizeof(__pyx_k__num_group), 0, 0, 1, 1}, {&__pyx_n_s__number, __pyx_k__number, sizeof(__pyx_k__number), 0, 0, 1, 1}, {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1}, {&__pyx_n_s__ones, __pyx_k__ones, sizeof(__pyx_k__ones), 0, 0, 1, 1}, {&__pyx_n_s__op, __pyx_k__op, sizeof(__pyx_k__op), 0, 0, 1, 1}, {&__pyx_n_s__pack, __pyx_k__pack, sizeof(__pyx_k__pack), 0, 0, 1, 1}, {&__pyx_n_s__pdcv, __pyx_k__pdcv, sizeof(__pyx_k__pdcv), 0, 0, 1, 1}, {&__pyx_n_s__periodic_acc, __pyx_k__periodic_acc, sizeof(__pyx_k__periodic_acc), 0, 0, 1, 1}, {&__pyx_n_s__periodic_get, __pyx_k__periodic_get, sizeof(__pyx_k__periodic_get), 0, 0, 1, 1}, {&__pyx_n_s__periodic_put, __pyx_k__periodic_put, sizeof(__pyx_k__periodic_put), 0, 0, 1, 1}, {&__pyx_n_s__pfcv, __pyx_k__pfcv, sizeof(__pyx_k__pfcv), 0, 0, 1, 1}, {&__pyx_n_s__pgroup, __pyx_k__pgroup, sizeof(__pyx_k__pgroup), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_absolute_id, __pyx_k__pgroup_absolute_id, sizeof(__pyx_k__pgroup_absolute_id), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_brdcst, __pyx_k__pgroup_brdcst, sizeof(__pyx_k__pgroup_brdcst), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_create, __pyx_k__pgroup_create, sizeof(__pyx_k__pgroup_create), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_destroy, __pyx_k__pgroup_destroy, sizeof(__pyx_k__pgroup_destroy), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_get_default, __pyx_k__pgroup_get_default, sizeof(__pyx_k__pgroup_get_default), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_get_mirror, __pyx_k__pgroup_get_mirror, sizeof(__pyx_k__pgroup_get_mirror), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_get_world, __pyx_k__pgroup_get_world, sizeof(__pyx_k__pgroup_get_world), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_gop, __pyx_k__pgroup_gop, sizeof(__pyx_k__pgroup_gop), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_gop_absmax, __pyx_k__pgroup_gop_absmax, sizeof(__pyx_k__pgroup_gop_absmax), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_gop_absmin, __pyx_k__pgroup_gop_absmin, sizeof(__pyx_k__pgroup_gop_absmin), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_gop_add, __pyx_k__pgroup_gop_add, sizeof(__pyx_k__pgroup_gop_add), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_gop_max, __pyx_k__pgroup_gop_max, sizeof(__pyx_k__pgroup_gop_max), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_gop_min, __pyx_k__pgroup_gop_min, sizeof(__pyx_k__pgroup_gop_min), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_gop_multiply, __pyx_k__pgroup_gop_multiply, sizeof(__pyx_k__pgroup_gop_multiply), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_nnodes, __pyx_k__pgroup_nnodes, sizeof(__pyx_k__pgroup_nnodes), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_nodeid, __pyx_k__pgroup_nodeid, sizeof(__pyx_k__pgroup_nodeid), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_set_default, __pyx_k__pgroup_set_default, sizeof(__pyx_k__pgroup_set_default), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_split, __pyx_k__pgroup_split, sizeof(__pyx_k__pgroup_split), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_split_irreg, __pyx_k__pgroup_split_irreg, sizeof(__pyx_k__pgroup_split_irreg), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_sync, __pyx_k__pgroup_sync, sizeof(__pyx_k__pgroup_sync), 0, 0, 1, 1}, {&__pyx_n_s__pid, __pyx_k__pid, sizeof(__pyx_k__pid), 0, 0, 1, 1}, {&__pyx_n_s__pretty, __pyx_k__pretty, sizeof(__pyx_k__pretty), 0, 0, 1, 1}, {&__pyx_n_s__print_distribution, __pyx_k__print_distribution, sizeof(__pyx_k__print_distribution), 0, 0, 1, 1}, {&__pyx_n_s__print_file, __pyx_k__print_file, sizeof(__pyx_k__print_file), 0, 0, 1, 1}, {&__pyx_n_s__print_patch, __pyx_k__print_patch, sizeof(__pyx_k__print_patch), 0, 0, 1, 1}, {&__pyx_n_s__print_stats, __pyx_k__print_stats, sizeof(__pyx_k__print_stats), 0, 0, 1, 1}, {&__pyx_n_s__print_stdout, __pyx_k__print_stdout, sizeof(__pyx_k__print_stdout), 0, 0, 1, 1}, {&__pyx_n_s__proc, __pyx_k__proc, sizeof(__pyx_k__proc), 0, 0, 1, 1}, {&__pyx_n_s__proc_grid, __pyx_k__proc_grid, sizeof(__pyx_k__proc_grid), 0, 0, 1, 1}, {&__pyx_n_s__proc_grid_nd, __pyx_k__proc_grid_nd, sizeof(__pyx_k__proc_grid_nd), 0, 0, 1, 1}, {&__pyx_n_s__proc_topology, __pyx_k__proc_topology, sizeof(__pyx_k__proc_topology), 0, 0, 1, 1}, {&__pyx_n_s__procs, __pyx_k__procs, sizeof(__pyx_k__procs), 0, 0, 1, 1}, {&__pyx_n_s__prod, __pyx_k__prod, sizeof(__pyx_k__prod), 0, 0, 1, 1}, {&__pyx_n_s__ptr, __pyx_k__ptr, sizeof(__pyx_k__ptr), 0, 0, 1, 1}, {&__pyx_n_s__put, __pyx_k__put, sizeof(__pyx_k__put), 0, 0, 1, 1}, {&__pyx_n_s__randomize, __pyx_k__randomize, sizeof(__pyx_k__randomize), 0, 0, 1, 1}, {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1}, {&__pyx_n_s__read_inc, __pyx_k__read_inc, sizeof(__pyx_k__read_inc), 0, 0, 1, 1}, {&__pyx_n_s__real, __pyx_k__real, sizeof(__pyx_k__real), 0, 0, 1, 1}, {&__pyx_n_s__recip, __pyx_k__recip, sizeof(__pyx_k__recip), 0, 0, 1, 1}, {&__pyx_n_s__register, __pyx_k__register, sizeof(__pyx_k__register), 0, 0, 1, 1}, {&__pyx_n_s__register_dtype, __pyx_k__register_dtype, sizeof(__pyx_k__register_dtype), 0, 0, 1, 1}, {&__pyx_n_s__register_type, __pyx_k__register_type, sizeof(__pyx_k__register_type), 0, 0, 1, 1}, {&__pyx_n_s__release, __pyx_k__release, sizeof(__pyx_k__release), 0, 0, 1, 1}, {&__pyx_n_s__release_block, __pyx_k__release_block, sizeof(__pyx_k__release_block), 0, 0, 1, 1}, {&__pyx_n_s__release_block_grid, __pyx_k__release_block_grid, sizeof(__pyx_k__release_block_grid), 0, 0, 1, 1}, {&__pyx_n_s__release_ghosts, __pyx_k__release_ghosts, sizeof(__pyx_k__release_ghosts), 0, 0, 1, 1}, {&__pyx_n_s__release_update, __pyx_k__release_update, sizeof(__pyx_k__release_update), 0, 0, 1, 1}, {&__pyx_n_s__reshape, __pyx_k__reshape, sizeof(__pyx_k__reshape), 0, 0, 1, 1}, {&__pyx_n_s__result, __pyx_k__result, sizeof(__pyx_k__result), 0, 0, 1, 1}, {&__pyx_n_s__root, __pyx_k__root, sizeof(__pyx_k__root), 0, 0, 1, 1}, {&__pyx_n_s__scale, __pyx_k__scale, sizeof(__pyx_k__scale), 0, 0, 1, 1}, {&__pyx_n_s__scale_cols, __pyx_k__scale_cols, sizeof(__pyx_k__scale_cols), 0, 0, 1, 1}, {&__pyx_n_s__scale_rows, __pyx_k__scale_rows, sizeof(__pyx_k__scale_rows), 0, 0, 1, 1}, {&__pyx_n_s__scan_add, __pyx_k__scan_add, sizeof(__pyx_k__scan_add), 0, 0, 1, 1}, {&__pyx_n_s__scan_copy, __pyx_k__scan_copy, sizeof(__pyx_k__scan_copy), 0, 0, 1, 1}, {&__pyx_n_s__scatter, __pyx_k__scatter, sizeof(__pyx_k__scatter), 0, 0, 1, 1}, {&__pyx_n_s__scatter_acc, __pyx_k__scatter_acc, sizeof(__pyx_k__scatter_acc), 0, 0, 1, 1}, {&__pyx_n_s__select_elem, __pyx_k__select_elem, sizeof(__pyx_k__select_elem), 0, 0, 1, 1}, {&__pyx_n_s__select_elem_max, __pyx_k__select_elem_max, sizeof(__pyx_k__select_elem_max), 0, 0, 1, 1}, {&__pyx_n_s__select_elem_min, __pyx_k__select_elem_min, sizeof(__pyx_k__select_elem_min), 0, 0, 1, 1}, {&__pyx_n_s__set_array_name, __pyx_k__set_array_name, sizeof(__pyx_k__set_array_name), 0, 0, 1, 1}, {&__pyx_n_s__set_block_cyclic, __pyx_k__set_block_cyclic, sizeof(__pyx_k__set_block_cyclic), 0, 0, 1, 1}, {&__pyx_n_s__set_chunk, __pyx_k__set_chunk, sizeof(__pyx_k__set_chunk), 0, 0, 1, 1}, {&__pyx_n_s__set_data, __pyx_k__set_data, sizeof(__pyx_k__set_data), 0, 0, 1, 1}, {&__pyx_n_s__set_debug, __pyx_k__set_debug, sizeof(__pyx_k__set_debug), 0, 0, 1, 1}, {&__pyx_n_s__set_diagonal, __pyx_k__set_diagonal, sizeof(__pyx_k__set_diagonal), 0, 0, 1, 1}, {&__pyx_n_s__set_ghosts, __pyx_k__set_ghosts, sizeof(__pyx_k__set_ghosts), 0, 0, 1, 1}, {&__pyx_n_s__set_irreg_distr, __pyx_k__set_irreg_distr, sizeof(__pyx_k__set_irreg_distr), 0, 0, 1, 1}, {&__pyx_n_s__set_memory_limit, __pyx_k__set_memory_limit, sizeof(__pyx_k__set_memory_limit), 0, 0, 1, 1}, {&__pyx_n_s__set_pgroup, __pyx_k__set_pgroup, sizeof(__pyx_k__set_pgroup), 0, 0, 1, 1}, {&__pyx_n_s__set_restricted, __pyx_k__set_restricted, sizeof(__pyx_k__set_restricted), 0, 0, 1, 1}, {&__pyx_n_s__shift_diagoal, __pyx_k__shift_diagoal, sizeof(__pyx_k__shift_diagoal), 0, 0, 1, 1}, {&__pyx_n_s__single, __pyx_k__single, sizeof(__pyx_k__single), 0, 0, 1, 1}, {&__pyx_n_s__size, __pyx_k__size, sizeof(__pyx_k__size), 0, 0, 1, 1}, {&__pyx_n_s__skip, __pyx_k__skip, sizeof(__pyx_k__skip), 0, 0, 1, 1}, {&__pyx_n_s__slices, __pyx_k__slices, sizeof(__pyx_k__slices), 0, 0, 1, 1}, {&__pyx_n_s__solve, __pyx_k__solve, sizeof(__pyx_k__solve), 0, 0, 1, 1}, {&__pyx_n_s__sometrue, __pyx_k__sometrue, sizeof(__pyx_k__sometrue), 0, 0, 1, 1}, {&__pyx_n_s__spd_invert, __pyx_k__spd_invert, sizeof(__pyx_k__spd_invert), 0, 0, 1, 1}, {&__pyx_n_s__start, __pyx_k__start, sizeof(__pyx_k__start), 0, 0, 1, 1}, {&__pyx_n_s__step, __pyx_k__step, sizeof(__pyx_k__step), 0, 0, 1, 1}, {&__pyx_n_s__step_max, __pyx_k__step_max, sizeof(__pyx_k__step_max), 0, 0, 1, 1}, {&__pyx_n_s__strided_acc, __pyx_k__strided_acc, sizeof(__pyx_k__strided_acc), 0, 0, 1, 1}, {&__pyx_n_s__strided_get, __pyx_k__strided_get, sizeof(__pyx_k__strided_get), 0, 0, 1, 1}, {&__pyx_n_s__strided_put, __pyx_k__strided_put, sizeof(__pyx_k__strided_put), 0, 0, 1, 1}, {&__pyx_n_s__strides, __pyx_k__strides, sizeof(__pyx_k__strides), 0, 0, 1, 1}, {&__pyx_n_s__subsarray, __pyx_k__subsarray, sizeof(__pyx_k__subsarray), 0, 0, 1, 1}, {&__pyx_n_s__subsarray1_nd, __pyx_k__subsarray1_nd, sizeof(__pyx_k__subsarray1_nd), 0, 0, 1, 1}, {&__pyx_n_s__subsarray2_nd, __pyx_k__subsarray2_nd, sizeof(__pyx_k__subsarray2_nd), 0, 0, 1, 1}, {&__pyx_n_s__subscript, __pyx_k__subscript, sizeof(__pyx_k__subscript), 0, 0, 1, 1}, {&__pyx_n_s__subscript_nd, __pyx_k__subscript_nd, sizeof(__pyx_k__subscript_nd), 0, 0, 1, 1}, {&__pyx_n_s__summarize, __pyx_k__summarize, sizeof(__pyx_k__summarize), 0, 0, 1, 1}, {&__pyx_n_s__symmetrize, __pyx_k__symmetrize, sizeof(__pyx_k__symmetrize), 0, 0, 1, 1}, {&__pyx_n_s__sync, __pyx_k__sync, sizeof(__pyx_k__sync), 0, 0, 1, 1}, {&__pyx_n_s__ta, __pyx_k__ta, sizeof(__pyx_k__ta), 0, 0, 1, 1}, {&__pyx_n_s__ta_c, __pyx_k__ta_c, sizeof(__pyx_k__ta_c), 0, 0, 1, 1}, {&__pyx_n_s__ta_char, __pyx_k__ta_char, sizeof(__pyx_k__ta_char), 0, 0, 1, 1}, {&__pyx_n_s__tb, __pyx_k__tb, sizeof(__pyx_k__tb), 0, 0, 1, 1}, {&__pyx_n_s__tb_c, __pyx_k__tb_c, sizeof(__pyx_k__tb_c), 0, 0, 1, 1}, {&__pyx_n_s__tb_char, __pyx_k__tb_char, sizeof(__pyx_k__tb_char), 0, 0, 1, 1}, {&__pyx_n_s__terminate, __pyx_k__terminate, sizeof(__pyx_k__terminate), 0, 0, 1, 1}, {&__pyx_n_s__total_blocks, __pyx_k__total_blocks, sizeof(__pyx_k__total_blocks), 0, 0, 1, 1}, {&__pyx_n_s__trans, __pyx_k__trans, sizeof(__pyx_k__trans), 0, 0, 1, 1}, {&__pyx_n_s__trans_c, __pyx_k__trans_c, sizeof(__pyx_k__trans_c), 0, 0, 1, 1}, {&__pyx_n_s__transa, __pyx_k__transa, sizeof(__pyx_k__transa), 0, 0, 1, 1}, {&__pyx_n_s__transb, __pyx_k__transb, sizeof(__pyx_k__transb), 0, 0, 1, 1}, {&__pyx_n_s__transpose, __pyx_k__transpose, sizeof(__pyx_k__transpose), 0, 0, 1, 1}, {&__pyx_n_s__type, __pyx_k__type, sizeof(__pyx_k__type), 0, 0, 1, 1}, {&__pyx_n_s__typenum, __pyx_k__typenum, sizeof(__pyx_k__typenum), 0, 0, 1, 1}, {&__pyx_n_s__unlock, __pyx_k__unlock, sizeof(__pyx_k__unlock), 0, 0, 1, 1}, {&__pyx_n_s__unpack, __pyx_k__unpack, sizeof(__pyx_k__unpack), 0, 0, 1, 1}, {&__pyx_n_s__update_ghost_dir, __pyx_k__update_ghost_dir, sizeof(__pyx_k__update_ghost_dir), 0, 0, 1, 1}, {&__pyx_n_s__update_ghosts, __pyx_k__update_ghosts, sizeof(__pyx_k__update_ghosts), 0, 0, 1, 1}, {&__pyx_n_s__uses_ma, __pyx_k__uses_ma, sizeof(__pyx_k__uses_ma), 0, 0, 1, 1}, {&__pyx_n_s__val, __pyx_k__val, sizeof(__pyx_k__val), 0, 0, 1, 1}, {&__pyx_n_s__valpha, __pyx_k__valpha, sizeof(__pyx_k__valpha), 0, 0, 1, 1}, {&__pyx_n_s__value, __pyx_k__value, sizeof(__pyx_k__value), 0, 0, 1, 1}, {&__pyx_n_s__values, __pyx_k__values, sizeof(__pyx_k__values), 0, 0, 1, 1}, {&__pyx_n_s__values_nd, __pyx_k__values_nd, sizeof(__pyx_k__values_nd), 0, 0, 1, 1}, {&__pyx_n_s__vbeta, __pyx_k__vbeta, sizeof(__pyx_k__vbeta), 0, 0, 1, 1}, {&__pyx_n_s__verbose, __pyx_k__verbose, sizeof(__pyx_k__verbose), 0, 0, 1, 1}, {&__pyx_n_s__vinc, __pyx_k__vinc, sizeof(__pyx_k__vinc), 0, 0, 1, 1}, {&__pyx_n_s__vstart, __pyx_k__vstart, sizeof(__pyx_k__vstart), 0, 0, 1, 1}, {&__pyx_n_s__vval, __pyx_k__vval, sizeof(__pyx_k__vval), 0, 0, 1, 1}, {&__pyx_n_s__vvalue, __pyx_k__vvalue, sizeof(__pyx_k__vvalue), 0, 0, 1, 1}, {&__pyx_n_s__width, __pyx_k__width, sizeof(__pyx_k__width), 0, 0, 1, 1}, {&__pyx_n_s__width_nd, __pyx_k__width_nd, sizeof(__pyx_k__width_nd), 0, 0, 1, 1}, {&__pyx_n_s__wtime, __pyx_k__wtime, sizeof(__pyx_k__wtime), 0, 0, 1, 1}, {&__pyx_n_s__zero, __pyx_k__zero, sizeof(__pyx_k__zero), 0, 0, 1, 1}, {&__pyx_n_s__zero_diagonal, __pyx_k__zero_diagonal, sizeof(__pyx_k__zero_diagonal), 0, 0, 1, 1}, {&__pyx_n_s__zeros, __pyx_k__zeros, sizeof(__pyx_k__zeros), 0, 0, 1, 1}, {&__pyx_n_s__zip, __pyx_k__zip, sizeof(__pyx_k__zip), 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0} }; static int __Pyx_InitCachedBuiltins(void) { __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s__TypeError); if (!__pyx_builtin_TypeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s__NotImplementedError); if (!__pyx_builtin_NotImplementedError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} return 0; __pyx_L1_error:; return -1; } static int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); /* "ga4py/ga.pyx":369 * 'buffer.size=%s != np.prod(shape)=%s' % ( * buffer_nd.size, np.prod(shape))) * ld_nd = shape[1:] # <<<<<<<<<<<<<< * else: * buffer_shape = [buffer_nd.shape[i] for i in range(buffer_nd.ndim)] */ __pyx_k_slice_9 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_k_slice_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_9); __Pyx_GIVEREF(__pyx_k_slice_9); /* "ga4py/ga.pyx":1972 * 'buffer.size=%s != np.prod(shape)=%s' % ( * buffer.size, np.prod(shape))) * ld_nd = shape[1:] # <<<<<<<<<<<<<< * else: * buffer_shape = [buffer.shape[i] for i in range(buffer.ndim)] */ __pyx_k_slice_29 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_k_slice_29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_29); __Pyx_GIVEREF(__pyx_k_slice_29); /* "ga4py/ga.pyx":2305 * map_reshape = map.reshape(np_result,2,ndim) * # need to add 1 to every 'hi' value * map_reshape[:,1,:] += 1 # <<<<<<<<<<<<<< * return map_reshape,procs * */ __pyx_k_slice_34 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_34); __Pyx_GIVEREF(__pyx_k_slice_34); __pyx_k_slice_35 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_35); __Pyx_GIVEREF(__pyx_k_slice_35); __pyx_k_tuple_36 = PyTuple_Pack(3, __pyx_k_slice_34, __pyx_int_1, __pyx_k_slice_35); if (unlikely(!__pyx_k_tuple_36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_36); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_36)); /* "ga4py/ga.pyx":3322 * 'buffer.size=%s != np.prod(shape)=%s' % ( * buffer_nd.size, np.prod(shape))) * ld_nd = shape[1:] # <<<<<<<<<<<<<< * else: * buffer_shape = [buffer_nd.shape[i] for i in range(buffer_nd.ndim)] */ __pyx_k_slice_38 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_k_slice_38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_38); __Pyx_GIVEREF(__pyx_k_slice_38); /* "numpy.pxd":215 * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) */ __pyx_k_tuple_40 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_39)); if (unlikely(!__pyx_k_tuple_40)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_40); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_40)); /* "numpy.pxd":219 * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< * * info.buf = PyArray_DATA(self) */ __pyx_k_tuple_42 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_41)); if (unlikely(!__pyx_k_tuple_42)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_42); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_42)); /* "numpy.pxd":257 * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" */ __pyx_k_tuple_44 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_43)); if (unlikely(!__pyx_k_tuple_44)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_44); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_44)); /* "numpy.pxd":799 * * if (end - f) - (new_offset - offset[0]) < 15: * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< * * if ((child.byteorder == c'>' and little_endian) or */ __pyx_k_tuple_47 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_46)); if (unlikely(!__pyx_k_tuple_47)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_47); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_47)); /* "numpy.pxd":803 * if ((child.byteorder == c'>' and little_endian) or * (child.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * # One could encode it in the format string and have Cython * # complain instead, BUT: < and > in format strings also imply */ __pyx_k_tuple_48 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_43)); if (unlikely(!__pyx_k_tuple_48)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_48); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_48)); /* "numpy.pxd":823 * t = child.type_num * if end - f < 5: * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< * * # Until ticket #99 is fixed, use integers to avoid warnings */ __pyx_k_tuple_50 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_49)); if (unlikely(!__pyx_k_tuple_50)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_50); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_50)); /* "ga4py/ga.pyx":79 * ############################################################################# * * def dtype(int gatype): # <<<<<<<<<<<<<< * """Converts the given GA type to a numpy dtype.""" * if gatype in _to_dtype: */ __pyx_k_tuple_52 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__gatype), ((PyObject *)__pyx_n_s__gatype)); if (unlikely(!__pyx_k_tuple_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_52); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_52)); __pyx_k_codeobj_53 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__dtype, 79, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":85 * raise ValueError, "%d was not a recognized GA type" % gatype * * def inquire_dtype(int g_a): # <<<<<<<<<<<<<< * """Returns the numpy dtype of the given GA.""" * gatype = inquire_type(g_a) */ __pyx_k_tuple_56 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__gatype)); if (unlikely(!__pyx_k_tuple_56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_56); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_56)); __pyx_k_codeobj_57 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_56, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__inquire_dtype, 85, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":235 * raise TypeError, "type of g_a not recognized" * * def zip(lo, hi): # <<<<<<<<<<<<<< * """Transforms a GA lo,hi combination into a slice list.""" * return [slice(l,h) for l,h in __builtin__.zip(lo,hi)] */ __pyx_k_tuple_58 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__l), ((PyObject *)__pyx_n_s__h)); if (unlikely(!__pyx_k_tuple_58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_58); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_58)); __pyx_k_codeobj_59 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_58, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__zip, 235, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_59)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":243 * ############################################################################# * * def abs_value(int g_a, lo=None, hi=None): # <<<<<<<<<<<<<< * """Take element-wise absolute value of the array or patch. * */ __pyx_k_tuple_60 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__lo_nd), ((PyObject *)__pyx_n_s__hi_nd)); if (unlikely(!__pyx_k_tuple_60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_60); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_60)); __pyx_k_codeobj_61 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_60, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__abs_value, 243, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":264 * GA_Abs_value_patch64(g_a, lo_nd.data, hi_nd.data) * * def acc(int g_a, buffer, lo=None, hi=None, alpha=None): # <<<<<<<<<<<<<< * """Combines data from buffer with data in the global array patch. * */ __pyx_k_tuple_62 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__buffer), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__alpha)); if (unlikely(!__pyx_k_tuple_62)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_62); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_62)); __pyx_k_codeobj_63 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_62, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__acc, 264, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":399 * buffer_nd.data, ld_nd.data, valpha) * * def access(int g_a, lo=None, hi=None, int proc=-1): # <<<<<<<<<<<<<< * """Returns local array patch. * */ __pyx_k_tuple_64 = PyTuple_Pack(19, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__proc), ((PyObject *)__pyx_n_s__lo_nd), ((PyObject *)__pyx_n_s__hi_nd), ((PyObject *)__pyx_n_s__ld_nd), ((PyObject *)__pyx_n_s__lo_dst), ((PyObject *)__pyx_n_s__hi_dst), ((PyObject *)__pyx_n_s__dims_nd), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__dimlen), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__ptr), ((PyObject *)__pyx_n_s__dims), ((PyObject *)__pyx_n_s__strides), ((PyObject *)__pyx_n_s__array), ((PyObject *)__pyx_n_s__slices)); if (unlikely(!__pyx_k_tuple_64)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_64); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_64)); __pyx_k_codeobj_65 = (PyObject*)__Pyx_PyCode_New(4, 0, 19, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_64, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__access, 399, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_65)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":495 * return array * * def access_block(int g_a, int idx): # <<<<<<<<<<<<<< * """Returns local array patch for a block-cyclic distribution. * */ __pyx_k_tuple_66 = PyTuple_Pack(13, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__idx), ((PyObject *)__pyx_n_s__ld_nd), ((PyObject *)__pyx_n_s__lo_dst), ((PyObject *)__pyx_n_s__hi_dst), ((PyObject *)__pyx_n_s__dims_nd), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__dimlen), ((PyObject *)__pyx_n_s__typenum), ((PyObject *)__pyx_n_s__ptr), ((PyObject *)__pyx_n_s__dims), ((PyObject *)__pyx_n_s__array)); if (unlikely(!__pyx_k_tuple_66)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_66); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_66)); __pyx_k_codeobj_67 = (PyObject*)__Pyx_PyCode_New(2, 0, 13, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_66, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__access_block, 495, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_67)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":540 * return array * * def access_block_grid(int g_a, subscript): # <<<<<<<<<<<<<< * """Returns local array patch for a SCALAPACK block-cyclic distribution. * */ __pyx_k_tuple_68 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__subscript)); if (unlikely(!__pyx_k_tuple_68)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_68); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_68)); __pyx_k_codeobj_69 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_68, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__access_block_grid, 540, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_69)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":566 * raise NotImplementedError * * def access_block_segment(int g_a, int proc): # <<<<<<<<<<<<<< * """This function can be used to gain access to the all the locally held * data on a particular processor that is associated with a block-cyclic */ __pyx_k_tuple_70 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__proc), ((PyObject *)__pyx_n_s__elems), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__typenum), ((PyObject *)__pyx_n_s__ptr), ((PyObject *)__pyx_n_s__dims), ((PyObject *)__pyx_n_s__array)); if (unlikely(!__pyx_k_tuple_70)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_70); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_70)); __pyx_k_codeobj_71 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_70, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s_72, 566, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_71)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":602 * return array * * def access_ghost_element(int g_a, subscript): # <<<<<<<<<<<<<< * """Returns a scalar ndarray representing the requested ghost element. * */ __pyx_k_tuple_73 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__subscript)); if (unlikely(!__pyx_k_tuple_73)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_73); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_73)); __pyx_k_codeobj_74 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_73, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s_75, 602, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_74)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":624 * raise NotImplementedError, "use access_ghosts(g_a) instead" * * def access_ghosts(int g_a): # <<<<<<<<<<<<<< * """Returns ndarray representing local patch with ghost cells. * */ __pyx_k_tuple_76 = PyTuple_Pack(13, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__ld_nd), ((PyObject *)__pyx_n_s__lo_dst), ((PyObject *)__pyx_n_s__hi_dst), ((PyObject *)__pyx_n_s__dims_nd), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__dimlen), ((PyObject *)__pyx_n_s__typenum), ((PyObject *)__pyx_n_s__ptr), ((PyObject *)__pyx_n_s__dims), ((PyObject *)__pyx_n_s__array)); if (unlikely(!__pyx_k_tuple_76)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_76); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_76)); __pyx_k_codeobj_77 = (PyObject*)__Pyx_PyCode_New(1, 0, 13, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_76, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__access_ghosts, 624, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_77)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":665 * return array * * def add(int g_a, int g_b, int g_c, alpha=None, beta=None, alo=None, ahi=None, # <<<<<<<<<<<<<< * blo=None, bhi=None, clo=None, chi=None): * """Element-wise addition of two arrays. */ __pyx_k_tuple_78 = PyTuple_Pack(36, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_b), ((PyObject *)__pyx_n_s__g_c), ((PyObject *)__pyx_n_s__alpha), ((PyObject *)__pyx_n_s__beta), ((PyObject *)__pyx_n_s__alo), ((PyObject *)__pyx_n_s__ahi), ((PyObject *)__pyx_n_s__blo), ((PyObject *)__pyx_n_s__bhi), ((PyObject *)__pyx_n_s__clo), ((PyObject *)__pyx_n_s__chi), ((PyObject *)__pyx_n_s__alo_nd), ((PyObject *)__pyx_n_s__ahi_nd), ((PyObject *)__pyx_n_s__blo_nd), ((PyObject *)__pyx_n_s__bhi_nd), ((PyObject *)__pyx_n_s__clo_nd), ((PyObject *)__pyx_n_s__chi_nd), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__ialpha), ((PyObject *)__pyx_n_s__ibeta), ((PyObject *)__pyx_n_s__lalpha), ((PyObject *)__pyx_n_s__lbeta), ((PyObject *)__pyx_n_s__llalpha), ((PyObject *)__pyx_n_s__llbeta), ((PyObject *)__pyx_n_s__falpha), ((PyObject *)__pyx_n_s__fbeta), ((PyObject *)__pyx_n_s__dalpha), ((PyObject *)__pyx_n_s__dbeta), ((PyObject *)__pyx_n_s__ldalpha), ((PyObject *)__pyx_n_s__ldbeta), ((PyObject *)__pyx_n_s__fcalpha), ((PyObject *)__pyx_n_s__fcbeta), ((PyObject *)__pyx_n_s__dcalpha), ((PyObject *)__pyx_n_s__dcbeta), ((PyObject *)__pyx_n_s__valpha), ((PyObject *)__pyx_n_s__vbeta)); if (unlikely(!__pyx_k_tuple_78)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_78); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_78)); __pyx_k_codeobj_79 = (PyObject*)__Pyx_PyCode_New(11, 0, 36, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_78, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__add, 665, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_79)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":741 * g_c, clo_nd.data, chi_nd.data) * * def add_constant(int g_a, alpha, lo=None, hi=None): # <<<<<<<<<<<<<< * """Adds the constant alpha to each element of the array. * */ __pyx_k_tuple_80 = PyTuple_Pack(16, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__alpha), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__lo_nd), ((PyObject *)__pyx_n_s__hi_nd), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__ialpha), ((PyObject *)__pyx_n_s__lalpha), ((PyObject *)__pyx_n_s__llalpha), ((PyObject *)__pyx_n_s__falpha), ((PyObject *)__pyx_n_s__dalpha), ((PyObject *)__pyx_n_s__ldalpha), ((PyObject *)__pyx_n_s__fcalpha), ((PyObject *)__pyx_n_s__dcalpha), ((PyObject *)__pyx_n_s__valpha)); if (unlikely(!__pyx_k_tuple_80)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_80); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_80)); __pyx_k_codeobj_81 = (PyObject*)__Pyx_PyCode_New(4, 0, 16, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_80, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__add_constant, 741, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_81)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":779 * g_a, lo_nd.data, hi_nd.data, valpha) * * def add_diagonal(int g_a, int g_v): # <<<<<<<<<<<<<< * """Adds the elements of the vector g_v to the diagonal of matrix g_a. * */ __pyx_k_tuple_82 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_v)); if (unlikely(!__pyx_k_tuple_82)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_82); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_82)); __pyx_k_codeobj_83 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_82, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__add_diagonal, 779, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_83)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":793 * GA_Add_diagonal(g_a, g_v) * * def allocate(int g_a): # <<<<<<<<<<<<<< * """Allocates memory for the handle obtained using ga.create_handle. * */ __pyx_k_tuple_84 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_84)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_84); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_84)); __pyx_k_codeobj_85 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__allocate, 793, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_85)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":813 * return False * * def brdcst(buffer, int root=0): # <<<<<<<<<<<<<< * """Broadcast from process root to all other processes. * */ __pyx_k_tuple_86 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__buffer), ((PyObject *)__pyx_n_s__root), ((PyObject *)__pyx_n_s__buffer_nd)); if (unlikely(!__pyx_k_tuple_86)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_86); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_86)); __pyx_k_codeobj_87 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_86, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__brdcst, 813, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_87)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":840 * return buffer_nd * * def check_handle(int g_a, char *message): # <<<<<<<<<<<<<< * """Checks that the array handle g_a is valid. * */ __pyx_k_tuple_88 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__message)); if (unlikely(!__pyx_k_tuple_88)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_88); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_88)); __pyx_k_codeobj_89 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_88, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__check_handle, 840, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_89)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":850 * GA_Check_handle(g_a, message) * * def cluster_nnodes(): # <<<<<<<<<<<<<< * """Returns the total number of nodes that the program is running on. * */ __pyx_k_codeobj_90 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__cluster_nnodes, 850, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_90)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 850; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":861 * return GA_Cluster_nnodes() * * def cluster_nodeid(int proc=-1): # <<<<<<<<<<<<<< * """Returns the node ID of this process or the given process. * */ __pyx_k_tuple_91 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__proc)); if (unlikely(!__pyx_k_tuple_91)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_91); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_91)); __pyx_k_codeobj_92 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_91, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__cluster_nodeid, 861, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_92)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":878 * return GA_Cluster_nodeid() * * def cluster_proc_nodeid(int proc): # <<<<<<<<<<<<<< * """Returns the node ID of the specified process. * */ __pyx_k_tuple_93 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__proc), ((PyObject *)__pyx_n_s__proc)); if (unlikely(!__pyx_k_tuple_93)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_93); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_93)); __pyx_k_codeobj_94 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_93, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__cluster_proc_nodeid, 878, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_94)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":889 * return GA_Cluster_proc_nodeid(proc) * * def cluster_nprocs(int node): # <<<<<<<<<<<<<< * """Returns the number of processors available on the given node. * */ __pyx_k_tuple_95 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__node), ((PyObject *)__pyx_n_s__node)); if (unlikely(!__pyx_k_tuple_95)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_95); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_95)); __pyx_k_codeobj_96 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_95, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__cluster_nprocs, 889, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_96)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":897 * return GA_Cluster_nprocs(node) * * def cluster_procid(int node, int proc): # <<<<<<<<<<<<<< * """Returns the proc ID associated with node and local proc ID. * */ __pyx_k_tuple_97 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__node), ((PyObject *)__pyx_n_s__proc)); if (unlikely(!__pyx_k_tuple_97)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_97); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_97)); __pyx_k_codeobj_98 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_97, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__cluster_procid, 897, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_98)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":908 * return GA_Cluster_procid(node, proc) * * def compare_distr(int g_a, int g_b): # <<<<<<<<<<<<<< * """Compares the distributions of two global arrays. * */ __pyx_k_tuple_99 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_b)); if (unlikely(!__pyx_k_tuple_99)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_99); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_99)); __pyx_k_codeobj_100 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_99, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__compare_distr, 908, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_100)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":920 * return False * * def copy(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None, # <<<<<<<<<<<<<< * bint trans=False): * """Copies elements from array g_a into array g_b. */ __pyx_k_tuple_101 = PyTuple_Pack(12, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_b), ((PyObject *)__pyx_n_s__alo), ((PyObject *)__pyx_n_s__ahi), ((PyObject *)__pyx_n_s__blo), ((PyObject *)__pyx_n_s__bhi), ((PyObject *)__pyx_n_s__trans), ((PyObject *)__pyx_n_s__alo_nd), ((PyObject *)__pyx_n_s__ahi_nd), ((PyObject *)__pyx_n_s__blo_nd), ((PyObject *)__pyx_n_s__bhi_nd), ((PyObject *)__pyx_n_s__trans_c)); if (unlikely(!__pyx_k_tuple_101)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_101); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_101)); __pyx_k_codeobj_102 = (PyObject*)__Pyx_PyCode_New(7, 0, 12, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_101, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__copy, 920, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_102)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":967 * g_b, blo_nd.data, bhi_nd.data) * * def create(int gtype, dims, char *name="", chunk=None, int pgroup=-1): # <<<<<<<<<<<<<< * """Creates an n-dimensional array using the regular distribution model. * */ __pyx_k_tuple_103 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__dims), ((PyObject *)__pyx_n_s__name), ((PyObject *)__pyx_n_s__chunk), ((PyObject *)__pyx_n_s__pgroup), ((PyObject *)__pyx_n_s__dims_nd), ((PyObject *)__pyx_n_s__chunk_nd)); if (unlikely(!__pyx_k_tuple_103)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_103); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_103)); __pyx_k_codeobj_104 = (PyObject*)__Pyx_PyCode_New(5, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_103, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__create, 967, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_104)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1012 * name, NULL, pgroup) * * def create_ghosts(int gtype, dims, width, char *name="", chunk=None, # <<<<<<<<<<<<<< * int pgroup=-1): * """Creates an array with a layer of ghost cells around the visible data. */ __pyx_k_tuple_105 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__dims), ((PyObject *)__pyx_n_s__width), ((PyObject *)__pyx_n_s__name), ((PyObject *)__pyx_n_s__chunk), ((PyObject *)__pyx_n_s__pgroup), ((PyObject *)__pyx_n_s__dims_nd), ((PyObject *)__pyx_n_s__chunk_nd), ((PyObject *)__pyx_n_s__width_nd)); if (unlikely(!__pyx_k_tuple_105)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1012; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_105); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_105)); __pyx_k_codeobj_106 = (PyObject*)__Pyx_PyCode_New(6, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_105, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__create_ghosts, 1012, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_106)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1012; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1064 * NULL, pgroup) * * def create_handle(): # <<<<<<<<<<<<<< * """Returns a global array handle that can be used to create a new array. * */ __pyx_k_codeobj_107 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__create_handle, 1064, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_107)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1079 * return GA_Create_handle() * * def create_irreg(int gtype, dims, block, map, char *name="", int pgroup=-1): # <<<<<<<<<<<<<< * """Creates an array by following the user-specified distribution. * */ __pyx_k_tuple_108 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__dims), ((PyObject *)__pyx_n_s__block), ((PyObject *)__pyx_n_s__map), ((PyObject *)__pyx_n_s__name), ((PyObject *)__pyx_n_s__pgroup), ((PyObject *)__pyx_n_s__dims_nd), ((PyObject *)__pyx_n_s__block_nd), ((PyObject *)__pyx_n_s__map_nd)); if (unlikely(!__pyx_k_tuple_108)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_108); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_108)); __pyx_k_codeobj_109 = (PyObject*)__Pyx_PyCode_New(6, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_108, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__create_irreg, 1079, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_109)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1120 * block_nd.data, map_nd.data, pgroup) * * def create_ghosts_irreg(int gtype, dims, width, block, map, char *name="", # <<<<<<<<<<<<<< * int pgroup=-1): * """Creates an array with a layer of ghost cells around the visible data. */ __pyx_k_tuple_110 = PyTuple_Pack(11, ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__dims), ((PyObject *)__pyx_n_s__width), ((PyObject *)__pyx_n_s__block), ((PyObject *)__pyx_n_s__map), ((PyObject *)__pyx_n_s__name), ((PyObject *)__pyx_n_s__pgroup), ((PyObject *)__pyx_n_s__dims_nd), ((PyObject *)__pyx_n_s__width_nd), ((PyObject *)__pyx_n_s__block_nd), ((PyObject *)__pyx_n_s__map_nd)); if (unlikely(!__pyx_k_tuple_110)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_110); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_110)); __pyx_k_codeobj_111 = (PyObject*)__Pyx_PyCode_New(7, 0, 11, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_110, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__create_ghosts_irreg, 1120, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_111)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1170 * block_nd.data, map_nd.data, pgroup) * * def create_mutexes(int number): # <<<<<<<<<<<<<< * """Creates a set containing the number of mutexes. * */ __pyx_k_tuple_112 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__number), ((PyObject *)__pyx_n_s__number)); if (unlikely(!__pyx_k_tuple_112)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_112); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_112)); __pyx_k_codeobj_113 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_112, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__create_mutexes, 1170, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_113)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1192 * return False * * def deregister_type(int type): # <<<<<<<<<<<<<< * """Removes the data type previously registered using register_type. * */ __pyx_k_tuple_114 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__type), ((PyObject *)__pyx_n_s__type)); if (unlikely(!__pyx_k_tuple_114)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1192; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_114); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_114)); __pyx_k_codeobj_115 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_114, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__deregister_type, 1192, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_115)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1192; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1202 * return NGA_Deregister_type(type) * * def destroy(int g_a): # <<<<<<<<<<<<<< * """Deallocates the array and frees any associated resources. * */ __pyx_k_tuple_116 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_116)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_116); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_116)); __pyx_k_codeobj_117 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_116, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__destroy, 1202, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_117)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1210 * GA_Destroy(g_a) * * def destroy_mutexes(): # <<<<<<<<<<<<<< * """Destroys the set of mutexes created with ga_create_mutexes. * */ __pyx_k_codeobj_118 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__destroy_mutexes, 1210, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_118)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1222 * return False * * def diag(int g_a, int g_s, int g_v, evalues=None): # <<<<<<<<<<<<<< * """Solve the generalized eigen-value problem. * */ __pyx_k_tuple_119 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_s), ((PyObject *)__pyx_n_s__g_v), ((PyObject *)__pyx_n_s__evalues), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__dims)); if (unlikely(!__pyx_k_tuple_119)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_119); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_119)); __pyx_k_codeobj_120 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_119, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__diag, 1222, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_120)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1248 * return evalues * * def diag_reuse(int control, int g_a, int g_s, int g_v, evalues=None): # <<<<<<<<<<<<<< * """Solve the generalized eigen-value problem. * */ __pyx_k_tuple_121 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__control), ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_s), ((PyObject *)__pyx_n_s__g_v), ((PyObject *)__pyx_n_s__evalues), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__dims)); if (unlikely(!__pyx_k_tuple_121)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_121); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_121)); __pyx_k_codeobj_122 = (PyObject*)__Pyx_PyCode_New(5, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_121, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__diag_reuse, 1248, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_122)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1282 * return evalues * * def diag_std(int g_a, int g_v, evalues=None): # <<<<<<<<<<<<<< * """Solve the standard (non-generalized) eigenvalue problem. * */ __pyx_k_tuple_123 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_v), ((PyObject *)__pyx_n_s__evalues), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__dims)); if (unlikely(!__pyx_k_tuple_123)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_123); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_123)); __pyx_k_codeobj_124 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_123, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__diag_std, 1282, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_124)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1324 * return lo,hi * * def dot(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None, # <<<<<<<<<<<<<< * bint ta=False, bint tb=False): * """Computes the element-wise dot product of two arrays. */ __pyx_k_tuple_125 = PyTuple_Pack(19, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_b), ((PyObject *)__pyx_n_s__alo), ((PyObject *)__pyx_n_s__ahi), ((PyObject *)__pyx_n_s__blo), ((PyObject *)__pyx_n_s__bhi), ((PyObject *)__pyx_n_s__ta), ((PyObject *)__pyx_n_s__tb), ((PyObject *)__pyx_n_s__alo_nd), ((PyObject *)__pyx_n_s__ahi_nd), ((PyObject *)__pyx_n_s__blo_nd), ((PyObject *)__pyx_n_s__bhi_nd), ((PyObject *)__pyx_n_s__ta_c), ((PyObject *)__pyx_n_s__tb_c), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__pfcv), ((PyObject *)__pyx_n_s__pdcv), ((PyObject *)__pyx_n_s__gfcv), ((PyObject *)__pyx_n_s__gdcv)); if (unlikely(!__pyx_k_tuple_125)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_125); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_125)); __pyx_k_codeobj_126 = (PyObject*)__Pyx_PyCode_New(8, 0, 19, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_125, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__dot, 1324, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_126)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1433 * raise TypeError * * def duplicate(int g_a, char *name=""): # <<<<<<<<<<<<<< * """Creates a new array by applying all the properties of another existing * array. */ __pyx_k_tuple_127 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__name)); if (unlikely(!__pyx_k_tuple_127)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1433; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_127); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_127)); __pyx_k_codeobj_128 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__duplicate, 1433, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_128)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1433; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1450 * return GA_Duplicate(g_a, name) * * def elem_divide(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, # <<<<<<<<<<<<<< * bhi=None, clo=None, chi=None): * """Computes the element-wise quotient of the two arrays. */ __pyx_k_tuple_129 = PyTuple_Pack(15, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_b), ((PyObject *)__pyx_n_s__g_c), ((PyObject *)__pyx_n_s__alo), ((PyObject *)__pyx_n_s__ahi), ((PyObject *)__pyx_n_s__blo), ((PyObject *)__pyx_n_s__bhi), ((PyObject *)__pyx_n_s__clo), ((PyObject *)__pyx_n_s__chi), ((PyObject *)__pyx_n_s__alo_nd), ((PyObject *)__pyx_n_s__ahi_nd), ((PyObject *)__pyx_n_s__blo_nd), ((PyObject *)__pyx_n_s__bhi_nd), ((PyObject *)__pyx_n_s__clo_nd), ((PyObject *)__pyx_n_s__chi_nd)); if (unlikely(!__pyx_k_tuple_129)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_129); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_129)); __pyx_k_codeobj_130 = (PyObject*)__Pyx_PyCode_New(9, 0, 15, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_129, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__elem_divide, 1450, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_130)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1502 * g_c, clo_nd.data, chi_nd.data) * * def elem_maximum(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, # <<<<<<<<<<<<<< * bhi=None, clo=None, chi=None): * """Computes the element-wise maximum of the two arrays. */ __pyx_k_tuple_131 = PyTuple_Pack(15, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_b), ((PyObject *)__pyx_n_s__g_c), ((PyObject *)__pyx_n_s__alo), ((PyObject *)__pyx_n_s__ahi), ((PyObject *)__pyx_n_s__blo), ((PyObject *)__pyx_n_s__bhi), ((PyObject *)__pyx_n_s__clo), ((PyObject *)__pyx_n_s__chi), ((PyObject *)__pyx_n_s__alo_nd), ((PyObject *)__pyx_n_s__ahi_nd), ((PyObject *)__pyx_n_s__blo_nd), ((PyObject *)__pyx_n_s__bhi_nd), ((PyObject *)__pyx_n_s__clo_nd), ((PyObject *)__pyx_n_s__chi_nd)); if (unlikely(!__pyx_k_tuple_131)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_131); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_131)); __pyx_k_codeobj_132 = (PyObject*)__Pyx_PyCode_New(9, 0, 15, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_131, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__elem_maximum, 1502, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_132)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1556 * g_c, clo_nd.data, chi_nd.data) * * def elem_minimum(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, # <<<<<<<<<<<<<< * bhi=None, clo=None, chi=None): * """Computes the element-wise minimum of the two arrays. */ __pyx_k_tuple_133 = PyTuple_Pack(15, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_b), ((PyObject *)__pyx_n_s__g_c), ((PyObject *)__pyx_n_s__alo), ((PyObject *)__pyx_n_s__ahi), ((PyObject *)__pyx_n_s__blo), ((PyObject *)__pyx_n_s__bhi), ((PyObject *)__pyx_n_s__clo), ((PyObject *)__pyx_n_s__chi), ((PyObject *)__pyx_n_s__alo_nd), ((PyObject *)__pyx_n_s__ahi_nd), ((PyObject *)__pyx_n_s__blo_nd), ((PyObject *)__pyx_n_s__bhi_nd), ((PyObject *)__pyx_n_s__clo_nd), ((PyObject *)__pyx_n_s__chi_nd)); if (unlikely(!__pyx_k_tuple_133)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_133); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_133)); __pyx_k_codeobj_134 = (PyObject*)__Pyx_PyCode_New(9, 0, 15, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_133, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__elem_minimum, 1556, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_134)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1610 * g_c, clo_nd.data, chi_nd.data) * * def elem_multiply(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, # <<<<<<<<<<<<<< * bhi=None, clo=None, chi=None): * """Computes the element-wise product of the two arrays. */ __pyx_k_tuple_135 = PyTuple_Pack(15, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_b), ((PyObject *)__pyx_n_s__g_c), ((PyObject *)__pyx_n_s__alo), ((PyObject *)__pyx_n_s__ahi), ((PyObject *)__pyx_n_s__blo), ((PyObject *)__pyx_n_s__bhi), ((PyObject *)__pyx_n_s__clo), ((PyObject *)__pyx_n_s__chi), ((PyObject *)__pyx_n_s__alo_nd), ((PyObject *)__pyx_n_s__ahi_nd), ((PyObject *)__pyx_n_s__blo_nd), ((PyObject *)__pyx_n_s__bhi_nd), ((PyObject *)__pyx_n_s__clo_nd), ((PyObject *)__pyx_n_s__chi_nd)); if (unlikely(!__pyx_k_tuple_135)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1610; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_135); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_135)); __pyx_k_codeobj_136 = (PyObject*)__Pyx_PyCode_New(9, 0, 15, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_135, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__elem_multiply, 1610, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_136)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1610; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1660 * g_c, clo_nd.data, chi_nd.data) * * def error(char *message, int code=1): # <<<<<<<<<<<<<< * """Prints message and aborts safely with code.""" * GA_Error(message, code) */ __pyx_k_tuple_137 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__message), ((PyObject *)__pyx_n_s__code)); if (unlikely(!__pyx_k_tuple_137)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_137); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_137)); __pyx_k_codeobj_138 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_137, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__error, 1660, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_138)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1664 * GA_Error(message, code) * * def fence(): # <<<<<<<<<<<<<< * """Blocks the calling process until all the data transfers corresponding * to GA operations called after ga.init_fence() complete. */ __pyx_k_codeobj_139 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__fence, 1664, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_139)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1664; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1697 * GA_Fence() * * def fill(int g_a, value, lo=None, hi=None): # <<<<<<<<<<<<<< * """Assign a single value to all elements in the array or patch. * */ __pyx_k_tuple_140 = PyTuple_Pack(16, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__value), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__lo_nd), ((PyObject *)__pyx_n_s__hi_nd), ((PyObject *)__pyx_n_s__ivalue), ((PyObject *)__pyx_n_s__lvalue), ((PyObject *)__pyx_n_s__llvalue), ((PyObject *)__pyx_n_s__fvalue), ((PyObject *)__pyx_n_s__dvalue), ((PyObject *)__pyx_n_s__ldvalue), ((PyObject *)__pyx_n_s__fcvalue), ((PyObject *)__pyx_n_s__dcvalue), ((PyObject *)__pyx_n_s__vvalue), ((PyObject *)__pyx_n_s__gtype)); if (unlikely(!__pyx_k_tuple_140)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_140); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_140)); __pyx_k_codeobj_141 = (PyObject*)__Pyx_PyCode_New(4, 0, 16, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_140, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__fill, 1697, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_141)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1731 * g_a, lo_nd.data, hi_nd.data, vvalue) * * def gather(int g_a, subsarray, np.ndarray values=None): # <<<<<<<<<<<<<< * """Gathers array elements from a global array into a local array. * */ __pyx_k_tuple_142 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__subsarray), ((PyObject *)__pyx_n_s__values), ((PyObject *)__pyx_n_s__subsarray1_nd), ((PyObject *)__pyx_n_s__subsarray2_nd), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__ndim), ((PyObject *)__pyx_n_s__n)); if (unlikely(!__pyx_k_tuple_142)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_142); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_142)); __pyx_k_codeobj_143 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_142, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__gather, 1731, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_143)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1790 * return values * * def gemm(bint ta, bint tb, int64_t m, int64_t n, int64_t k, # <<<<<<<<<<<<<< * alpha, int g_a, int g_b, beta, int g_c): * """Performs one of the matrix-matrix operations. */ __pyx_k_tuple_144 = PyTuple_Pack(25, ((PyObject *)__pyx_n_s__ta), ((PyObject *)__pyx_n_s__tb), ((PyObject *)__pyx_n_s__m), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__k), ((PyObject *)__pyx_n_s__alpha), ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_b), ((PyObject *)__pyx_n_s__beta), ((PyObject *)__pyx_n_s__g_c), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__falpha), ((PyObject *)__pyx_n_s__fbeta), ((PyObject *)__pyx_n_s__dalpha), ((PyObject *)__pyx_n_s__dbeta), ((PyObject *)__pyx_n_s__fcalpha), ((PyObject *)__pyx_n_s__fcbeta), ((PyObject *)__pyx_n_s__dcalpha), ((PyObject *)__pyx_n_s__dcbeta), ((PyObject *)__pyx_n_s__ga_fcalpha), ((PyObject *)__pyx_n_s__ga_fcbeta), ((PyObject *)__pyx_n_s__ga_dcalpha), ((PyObject *)__pyx_n_s__ga_dcbeta), ((PyObject *)__pyx_n_s__ta_char), ((PyObject *)__pyx_n_s__tb_char)); if (unlikely(!__pyx_k_tuple_144)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_144); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_144)); __pyx_k_codeobj_145 = (PyObject*)__Pyx_PyCode_New(10, 0, 25, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_144, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__gemm, 1790, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_145)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1886 * raise TypeError * * def get(int g_a, lo=None, hi=None, np.ndarray buffer=None): # <<<<<<<<<<<<<< * """Copies data from global array section to the local array buffer. * */ __pyx_k_tuple_146 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__buffer)); if (unlikely(!__pyx_k_tuple_146)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1886; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_146); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_146)); __pyx_k_codeobj_147 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_146, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__get, 1886, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_147)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1886; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":1999 * return buffer * * def get_block_info(int g_a): # <<<<<<<<<<<<<< * """Returns information about the block-cyclic distribution. * */ __pyx_k_tuple_148 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__num_blocks), ((PyObject *)__pyx_n_s__block_dims), ((PyObject *)__pyx_n_s__ndim)); if (unlikely(!__pyx_k_tuple_148)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1999; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_148); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_148)); __pyx_k_codeobj_149 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_148, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__get_block_info, 1999, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_149)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1999; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2023 * return num_blocks,block_dims * * def get_diag(int g_a, int g_v): # <<<<<<<<<<<<<< * """Inserts the diagonal elements of this matrix g_a into the vector g_v. * */ __pyx_k_tuple_150 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_v)); if (unlikely(!__pyx_k_tuple_150)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2023; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_150); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_150)); __pyx_k_codeobj_151 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_150, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__get_diag, 2023, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_151)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2023; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2035 * GA_Get_diag(g_a, g_v) * * def get_debug(): # <<<<<<<<<<<<<< * """Returns the value of an internal flag in the GA library whose value can * be set using the ga.set_debug() subroutine. */ __pyx_k_codeobj_152 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__get_debug, 2035, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_152)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2044 * return GA_Get_debug() * * def gop(X, char *op): # <<<<<<<<<<<<<< * """Global operation. * */ __pyx_k_tuple_153 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__X), ((PyObject *)__pyx_n_s__op), ((PyObject *)__pyx_n_s__X_nd), ((PyObject *)__pyx_n_s__size)); if (unlikely(!__pyx_k_tuple_153)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_153); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_153)); __pyx_k_codeobj_154 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_153, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__gop, 2044, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_154)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2090 * return X_nd * * def gop_add(X): # <<<<<<<<<<<<<< * return gop(X, "+") * */ __pyx_k_tuple_155 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__X)); if (unlikely(!__pyx_k_tuple_155)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2090; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_155); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_155)); __pyx_k_codeobj_156 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_155, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__gop_add, 2090, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_156)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2090; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2093 * return gop(X, "+") * * def gop_multiply(X): # <<<<<<<<<<<<<< * return gop(X, "*") * */ __pyx_k_tuple_157 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__X)); if (unlikely(!__pyx_k_tuple_157)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_157); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_157)); __pyx_k_codeobj_158 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_157, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__gop_multiply, 2093, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_158)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2096 * return gop(X, "*") * * def gop_max(X): # <<<<<<<<<<<<<< * return gop(X, "max") * */ __pyx_k_tuple_159 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__X)); if (unlikely(!__pyx_k_tuple_159)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2096; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_159); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_159)); __pyx_k_codeobj_160 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_159, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__gop_max, 2096, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_160)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2096; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2099 * return gop(X, "max") * * def gop_min(X): # <<<<<<<<<<<<<< * return gop(X, "min") * */ __pyx_k_tuple_161 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__X)); if (unlikely(!__pyx_k_tuple_161)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2099; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_161); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_161)); __pyx_k_codeobj_162 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_161, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__gop_min, 2099, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_162)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2099; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2102 * return gop(X, "min") * * def gop_absmax(X): # <<<<<<<<<<<<<< * return gop(X, "absmax") * */ __pyx_k_tuple_163 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__X)); if (unlikely(!__pyx_k_tuple_163)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_163); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_163)); __pyx_k_codeobj_164 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_163, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__gop_absmax, 2102, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_164)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2105 * return gop(X, "absmax") * * def gop_absmin(X): # <<<<<<<<<<<<<< * return gop(X, "absmin") * */ __pyx_k_tuple_165 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__X)); if (unlikely(!__pyx_k_tuple_165)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_165); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_165)); __pyx_k_codeobj_166 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_165, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__gop_absmin, 2105, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_166)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2108 * return gop(X, "absmin") * * def has_ghosts(int g_a): # <<<<<<<<<<<<<< * """Determines whether any dimension of the given array has ghost cells. * */ __pyx_k_tuple_167 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_167)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_167); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_167)); __pyx_k_codeobj_168 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_167, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__has_ghosts, 2108, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_168)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2124 * return False * * def init_fence(): # <<<<<<<<<<<<<< * """Initializes tracing of completion status of data movement operations. * */ __pyx_k_codeobj_169 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__init_fence, 2124, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_169)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2132 * GA_Init_fence() * * def initialize(): # <<<<<<<<<<<<<< * """Allocates and initializes internal data structures in Global Arrays. * */ __pyx_k_tuple_170 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__atexit)); if (unlikely(!__pyx_k_tuple_170)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_170); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_170)); __pyx_k_codeobj_171 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_170, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__initialize, 2132, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_171)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2145 * _initialized = True * * def initialize_ltd(size_t limit): # <<<<<<<<<<<<<< * """Allocates and initializes internal data structures and sets limit for * memory used in global arrays. */ __pyx_k_tuple_172 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__limit), ((PyObject *)__pyx_n_s__limit)); if (unlikely(!__pyx_k_tuple_172)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_172); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_172)); __pyx_k_codeobj_173 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_172, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__initialize_ltd, 2145, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_173)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2164 * _initialized = True * * def initialized(): # <<<<<<<<<<<<<< * """Returns whether ga has been initialized.""" * return _initialized */ __pyx_k_codeobj_174 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__initialized, 2164, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_174)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2181 * return dims * * def inquire_memory(): # <<<<<<<<<<<<<< * """Returns amount of memory (in bytes) used in the allocated global arrays * on the calling processor. */ __pyx_k_codeobj_175 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__inquire_memory, 2181, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_175)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2190 * return GA_Inquire_memory() * * def inquire_name(int g_a): # <<<<<<<<<<<<<< * """Returns the name of an array represented by the handle g_a. * */ __pyx_k_tuple_176 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_176)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_176); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_176)); __pyx_k_codeobj_177 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_176, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__inquire_name, 2190, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_177)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2208 * return gtype * * def is_mirrored(int g_a): # <<<<<<<<<<<<<< * """Checks whether the array is mirrored. * */ __pyx_k_tuple_178 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_178)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_178); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_178)); __pyx_k_codeobj_179 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_178, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__is_mirrored, 2208, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_179)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2220 * return False * * def llt_solve(int g_a, int g_b): # <<<<<<<<<<<<<< * """Solves a system of linear equations * */ __pyx_k_tuple_180 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_b)); if (unlikely(!__pyx_k_tuple_180)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_180); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_180)); __pyx_k_codeobj_181 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_180, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__llt_solve, 2220, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_181)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2242 * return GA_Llt_solve(g_a, g_b) * * def locate(int g_a, subscript): # <<<<<<<<<<<<<< * """Return the GA compute process id that 'owns' the data. * */ __pyx_k_tuple_182 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__subscript), ((PyObject *)__pyx_n_s__subscript_nd)); if (unlikely(!__pyx_k_tuple_182)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_182); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_182)); __pyx_k_codeobj_183 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_182, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__locate, 2242, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_183)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2260 * return NGA_Locate64(g_a, subscript_nd.data) * * def locate_nnodes(int g_a, lo, hi): # <<<<<<<<<<<<<< * """Return the number of process which own the specified patch. * */ __pyx_k_tuple_184 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__lo_nd), ((PyObject *)__pyx_n_s__hi_nd), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_184)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_184); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_184)); __pyx_k_codeobj_185 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_184, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__locate_nnodes, 2260, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_185)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2271 * return NGA_Locate_nnodes64(g_a, lo_nd.data, hi_nd.data) * * def locate_region(int g_a, lo, hi): # <<<<<<<<<<<<<< * """Return the list of the GA processes id that 'own' the data. * */ __pyx_k_tuple_186 = PyTuple_Pack(11, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__lo_nd), ((PyObject *)__pyx_n_s__hi_nd), ((PyObject *)__pyx_n_s__map), ((PyObject *)__pyx_n_s__map_reshape), ((PyObject *)__pyx_n_s__procs), ((PyObject *)__pyx_n_s__np_result), ((PyObject *)__pyx_n_s__np_guess), ((PyObject *)__pyx_n_s__ndim)); if (unlikely(!__pyx_k_tuple_186)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_186); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_186)); __pyx_k_codeobj_187 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_186, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__locate_region, 2271, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_187)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2308 * return map_reshape,procs * * def lock(int mutex): # <<<<<<<<<<<<<< * """Locks a mutex object identified by the mutex number. * */ __pyx_k_tuple_188 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__mutex), ((PyObject *)__pyx_n_s__mutex)); if (unlikely(!__pyx_k_tuple_188)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_188); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_188)); __pyx_k_codeobj_189 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_188, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__lock, 2308, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_189)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2317 * GA_Lock(mutex) * * def lu_solve(int g_a, int g_b, bint trans=False): # <<<<<<<<<<<<<< * """Solve the system of linear equations op(A)X = B based on the LU * factorization. */ __pyx_k_tuple_190 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_b), ((PyObject *)__pyx_n_s__trans), ((PyObject *)__pyx_n_s__ctrans)); if (unlikely(!__pyx_k_tuple_190)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2317; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_190); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_190)); __pyx_k_codeobj_191 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_190, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__lu_solve, 2317, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_191)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2317; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2345 * GA_Lu_solve(ctrans, g_a, g_b) * * def mask_sync(bint first, bint last): # <<<<<<<<<<<<<< * """This subroutine can be used to remove synchronization calls from around * collective operations. */ __pyx_k_tuple_192 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__first), ((PyObject *)__pyx_n_s__last)); if (unlikely(!__pyx_k_tuple_192)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_192); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_192)); __pyx_k_codeobj_193 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_192, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__mask_sync, 2345, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_193)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2365 * GA_Mask_sync(first,last) * * def matmul_patch(bint transa, bint transb, alpha, beta, # <<<<<<<<<<<<<< * int g_a, alo, ahi, * int g_b, blo, bhi, */ __pyx_k_tuple_194 = PyTuple_Pack(40, ((PyObject *)__pyx_n_s__transa), ((PyObject *)__pyx_n_s__transb), ((PyObject *)__pyx_n_s__alpha), ((PyObject *)__pyx_n_s__beta), ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__alo), ((PyObject *)__pyx_n_s__ahi), ((PyObject *)__pyx_n_s__g_b), ((PyObject *)__pyx_n_s__blo), ((PyObject *)__pyx_n_s__bhi), ((PyObject *)__pyx_n_s__g_c), ((PyObject *)__pyx_n_s__clo), ((PyObject *)__pyx_n_s__chi), ((PyObject *)__pyx_n_s__alo_nd), ((PyObject *)__pyx_n_s__ahi_nd), ((PyObject *)__pyx_n_s__blo_nd), ((PyObject *)__pyx_n_s__bhi_nd), ((PyObject *)__pyx_n_s__clo_nd), ((PyObject *)__pyx_n_s__chi_nd), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__ialpha), ((PyObject *)__pyx_n_s__ibeta), ((PyObject *)__pyx_n_s__lalpha), ((PyObject *)__pyx_n_s__lbeta), ((PyObject *)__pyx_n_s__llalpha), ((PyObject *)__pyx_n_s__llbeta), ((PyObject *)__pyx_n_s__falpha), ((PyObject *)__pyx_n_s__fbeta), ((PyObject *)__pyx_n_s__dalpha), ((PyObject *)__pyx_n_s__dbeta), ((PyObject *)__pyx_n_s__ldalpha), ((PyObject *)__pyx_n_s__ldbeta), ((PyObject *)__pyx_n_s__fcalpha), ((PyObject *)__pyx_n_s__fcbeta), ((PyObject *)__pyx_n_s__dcalpha), ((PyObject *)__pyx_n_s__dcbeta), ((PyObject *)__pyx_n_s__valpha), ((PyObject *)__pyx_n_s__vbeta), ((PyObject *)__pyx_n_s__char_transa), ((PyObject *)__pyx_n_s__char_transb)); if (unlikely(!__pyx_k_tuple_194)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_194); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_194)); __pyx_k_codeobj_195 = (PyObject*)__Pyx_PyCode_New(13, 0, 40, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_194, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__matmul_patch, 2365, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_195)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2422 * g_c, clo_nd.data, chi_nd.data) * * def median(int g_a, int g_b, int g_c, int g_m, # <<<<<<<<<<<<<< * alo=None, ahi=None, blo=None, bhi=None, * clo=None, chi=None, mlo=None, mhi=None): */ __pyx_k_tuple_196 = PyTuple_Pack(20, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_b), ((PyObject *)__pyx_n_s__g_c), ((PyObject *)__pyx_n_s__g_m), ((PyObject *)__pyx_n_s__alo), ((PyObject *)__pyx_n_s__ahi), ((PyObject *)__pyx_n_s__blo), ((PyObject *)__pyx_n_s__bhi), ((PyObject *)__pyx_n_s__clo), ((PyObject *)__pyx_n_s__chi), ((PyObject *)__pyx_n_s__mlo), ((PyObject *)__pyx_n_s__mhi), ((PyObject *)__pyx_n_s__alo_nd), ((PyObject *)__pyx_n_s__ahi_nd), ((PyObject *)__pyx_n_s__blo_nd), ((PyObject *)__pyx_n_s__bhi_nd), ((PyObject *)__pyx_n_s__clo_nd), ((PyObject *)__pyx_n_s__chi_nd), ((PyObject *)__pyx_n_s__mlo_nd), ((PyObject *)__pyx_n_s__mhi_nd)); if (unlikely(!__pyx_k_tuple_196)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_196); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_196)); __pyx_k_codeobj_197 = (PyObject*)__Pyx_PyCode_New(12, 0, 20, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_196, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__median, 2422, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_197)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2479 * g_m, mlo_nd.data, mhi_nd.data) * * def memory_avail(): # <<<<<<<<<<<<<< * """Returns amount of memory (in bytes) left for allocation of new global * arrays on the calling processor. */ __pyx_k_codeobj_198 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__memory_avail, 2479, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_198)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2479; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2496 * return GA_Memory_avail() * * def memory_limited(): # <<<<<<<<<<<<<< * """Indicates if limit is set on memory usage in Global Arrays on the * calling processor. */ __pyx_k_codeobj_199 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__memory_limited, 2496, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_199)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2509 * return False * * def merge_distr_patch(int g_a, alo, ahi, int g_b, blo, bhi): # <<<<<<<<<<<<<< * """This function merges all copies of a patch of a mirrored array (g_a) * into a patch in a distributed array (g_b). */ __pyx_k_tuple_200 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__alo), ((PyObject *)__pyx_n_s__ahi), ((PyObject *)__pyx_n_s__g_b), ((PyObject *)__pyx_n_s__blo), ((PyObject *)__pyx_n_s__bhi), ((PyObject *)__pyx_n_s__alo_nd), ((PyObject *)__pyx_n_s__ahi_nd), ((PyObject *)__pyx_n_s__blo_nd), ((PyObject *)__pyx_n_s__bhi_nd)); if (unlikely(!__pyx_k_tuple_200)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_200); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_200)); __pyx_k_codeobj_201 = (PyObject*)__Pyx_PyCode_New(6, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_200, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__merge_distr_patch, 2509, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_201)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2538 * g_b, blo_nd.data, bhi_nd.data) * * def merge_mirrored(int g_a): # <<<<<<<<<<<<<< * """This subroutine merges mirrored arrays by adding the contents of each * array across nodes. */ __pyx_k_tuple_202 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_202)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_202); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_202)); __pyx_k_codeobj_203 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_202, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__merge_mirrored, 2538, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_203)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2555 * GA_Merge_mirrored(g_a) * * def nbacc(int g_a, buffer, lo=None, hi=None, alpha=None): # <<<<<<<<<<<<<< * """Non-blocking version of ga.acc. * */ __pyx_k_tuple_204 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__buffer), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__alpha)); if (unlikely(!__pyx_k_tuple_204)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2555; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_204); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_204)); __pyx_k_codeobj_205 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_204, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__nbacc, 2555, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_205)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2555; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2588 * return _acc_common(g_a, buffer, lo, hi, alpha, True) * * def nbget(int g_a, lo=None, hi=None, np.ndarray buffer=None): # <<<<<<<<<<<<<< * """Non-blocking version of the blocking ga.get operation. * */ __pyx_k_tuple_206 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__buffer)); if (unlikely(!__pyx_k_tuple_206)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2588; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_206); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_206)); __pyx_k_codeobj_207 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_206, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__nbget, 2588, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_207)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2588; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2618 * return _get_common(g_a, lo, hi, buffer, True) * * def nblock(int g_a): # <<<<<<<<<<<<<< * """Returns the number of partitions of each array dimension for g_a. * */ __pyx_k_tuple_208 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__nblock_nd), ((PyObject *)__pyx_n_s__ndim)); if (unlikely(!__pyx_k_tuple_208)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_208); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_208)); __pyx_k_codeobj_209 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_208, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__nblock, 2618, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_209)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2634 * return nblock_nd * * def nbput(int g_a, buffer, lo=None, hi=None): # <<<<<<<<<<<<<< * """Non-blocking version of the blocking put operation. * */ __pyx_k_tuple_210 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__buffer), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi)); if (unlikely(!__pyx_k_tuple_210)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2634; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_210); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_210)); __pyx_k_codeobj_211 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_210, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__nbput, 2634, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_211)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2634; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2661 * return _put_common(g_a, buffer, lo, hi, True, False) * * def nbwait(ga_nbhdl_t nbhandle): # <<<<<<<<<<<<<< * """This function completes a non-blocking one-sided operation locally. * */ __pyx_k_tuple_212 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__nbhandle), ((PyObject *)__pyx_n_s__nbhandle)); if (unlikely(!__pyx_k_tuple_212)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2661; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_212); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_212)); __pyx_k_codeobj_213 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_212, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__nbwait, 2661, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_213)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2661; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2679 * NGA_NbWait(&nbhandle) * * def ndim(int g_a): # <<<<<<<<<<<<<< * """Returns the number of dimensions in array represented by the handle g_a. * */ __pyx_k_tuple_214 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_214)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_214); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_214)); __pyx_k_codeobj_215 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_214, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__ndim, 2679, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_215)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2693 * return GA_Ndim(g_a) * * def nnodes(): # <<<<<<<<<<<<<< * """Returns the number of the GA compute (user) processes. * */ __pyx_k_codeobj_216 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__nnodes, 2693, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_216)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2693; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2703 * return GA_Nnodes() * * def nodeid(): # <<<<<<<<<<<<<< * """Returns the GA process id (0, ..., ga.nnodes()-1) of the requesting * compute process. */ __pyx_k_codeobj_217 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__nodeid, 2703, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_217)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2714 * return GA_Nodeid() * * def norm1(int g_a): # <<<<<<<<<<<<<< * """Computes the 1-norm of the matrix or vector g_a. * */ __pyx_k_tuple_218 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__nm)); if (unlikely(!__pyx_k_tuple_218)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2714; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_218); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_218)); __pyx_k_codeobj_219 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_218, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__norm1, 2714, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_219)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2714; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2730 * return nm * * def norm_infinity(int g_a): # <<<<<<<<<<<<<< * """Computes the 1-norm of the matrix or vector g_a. * */ __pyx_k_tuple_220 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__nm)); if (unlikely(!__pyx_k_tuple_220)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2730; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_220); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_220)); __pyx_k_codeobj_221 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_220, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__norm_infinity, 2730, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_221)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2730; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2746 * return nm * * def enum(int g_a, lo=None, hi=None, start=None, inc=None): # <<<<<<<<<<<<<< * """This subroutine enumerates the values of an array between elements lo * and hi starting with the value istart and incrementing each subsequent */ __pyx_k_tuple_222 = PyTuple_Pack(27, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__start), ((PyObject *)__pyx_n_s__inc), ((PyObject *)__pyx_n_s__hi_nd), ((PyObject *)__pyx_n_s__c_lo), ((PyObject *)__pyx_n_s__c_hi), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__istart), ((PyObject *)__pyx_n_s__iinc), ((PyObject *)__pyx_n_s__lstart), ((PyObject *)__pyx_n_s__linc), ((PyObject *)__pyx_n_s__llstart), ((PyObject *)__pyx_n_s__llinc), ((PyObject *)__pyx_n_s__fstart), ((PyObject *)__pyx_n_s__finc), ((PyObject *)__pyx_n_s__dstart), ((PyObject *)__pyx_n_s__dinc), ((PyObject *)__pyx_n_s__ldstart), ((PyObject *)__pyx_n_s__ldinc), ((PyObject *)__pyx_n_s__fcstart), ((PyObject *)__pyx_n_s__fcinc), ((PyObject *)__pyx_n_s__dcstart), ((PyObject *)__pyx_n_s__dcinc), ((PyObject *)__pyx_n_s__vstart), ((PyObject *)__pyx_n_s__vinc)); if (unlikely(!__pyx_k_tuple_222)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2746; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_222); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_222)); __pyx_k_codeobj_223 = (PyObject*)__Pyx_PyCode_New(5, 0, 27, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_222, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__enum, 2746, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_223)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2746; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2803 * GA_Patch_enum64(g_a, c_lo, c_hi, vstart, vinc) * * def pack(int g_src, int g_dst, int g_msk, lo=None, hi=None): # <<<<<<<<<<<<<< * """The pack subroutine is designed to compress the values in the source * vector g_src into a smaller destination array g_dst based on the values */ __pyx_k_tuple_224 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__g_src), ((PyObject *)__pyx_n_s__g_dst), ((PyObject *)__pyx_n_s__g_msk), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__hi_nd), ((PyObject *)__pyx_n_s__c_lo), ((PyObject *)__pyx_n_s__c_hi), ((PyObject *)__pyx_n_s__icount)); if (unlikely(!__pyx_k_tuple_224)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_224); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_224)); __pyx_k_codeobj_225 = (PyObject*)__Pyx_PyCode_New(5, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_224, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pack, 2803, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_225)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2841 * return icount * * def periodic_acc(int g_a, buffer, lo=None, hi=None, alpha=None): # <<<<<<<<<<<<<< * """Periodic version of ga.acc. * */ __pyx_k_tuple_226 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__buffer), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__alpha)); if (unlikely(!__pyx_k_tuple_226)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_226); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_226)); __pyx_k_codeobj_227 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_226, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__periodic_acc, 2841, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_227)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2872 * _acc_common(g_a, buffer, lo, hi, alpha, False, True) * * def periodic_get(int g_a, lo=None, hi=None, np.ndarray buffer=None): # <<<<<<<<<<<<<< * """Periodic version of ga.get. * */ __pyx_k_tuple_228 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__buffer)); if (unlikely(!__pyx_k_tuple_228)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2872; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_228); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_228)); __pyx_k_codeobj_229 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_228, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__periodic_get, 2872, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_229)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2872; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2901 * return _get_common(g_a, lo, hi, buffer, False, True) * * def periodic_put(int g_a, buffer, lo=None, hi=None): # <<<<<<<<<<<<<< * """Periodic version of ga.put. * */ __pyx_k_tuple_230 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__buffer), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi)); if (unlikely(!__pyx_k_tuple_230)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2901; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_230); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_230)); __pyx_k_codeobj_231 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_230, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__periodic_put, 2901, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_231)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2901; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2928 * _put_common(g_a, buffer, lo, hi, False, True) * * def pgroup_absolute_id(int pgroup, int pid): # <<<<<<<<<<<<<< * """TODO""" * return GA_Pgroup_absolute_id(pgroup, pid) */ __pyx_k_tuple_232 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__pgroup), ((PyObject *)__pyx_n_s__pid)); if (unlikely(!__pyx_k_tuple_232)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_232); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_232)); __pyx_k_codeobj_233 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_232, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_absolute_id, 2928, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_233)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2932 * return GA_Pgroup_absolute_id(pgroup, pid) * * def pgroup_brdcst(int pgroup, buffer, int root=0): # <<<<<<<<<<<<<< * """Broadcast from process root to all other processes in the same group. * */ __pyx_k_tuple_234 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__pgroup), ((PyObject *)__pyx_n_s__buffer), ((PyObject *)__pyx_n_s__root), ((PyObject *)__pyx_n_s__buffer_nd)); if (unlikely(!__pyx_k_tuple_234)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2932; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_234); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_234)); __pyx_k_codeobj_235 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_234, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_brdcst, 2932, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_235)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2932; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2962 * return buffer_nd * * def pgroup_create(list): # <<<<<<<<<<<<<< * """Creates a processor group. * */ __pyx_k_tuple_236 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__list), ((PyObject *)__pyx_n_s__list_nd)); if (unlikely(!__pyx_k_tuple_236)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2962; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_236); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_236)); __pyx_k_codeobj_237 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_236, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_create, 2962, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_237)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2962; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2979 * return GA_Pgroup_create(list_nd.data, len(list_nd)) * * def pgroup_destroy(int pgroup): # <<<<<<<<<<<<<< * """Frees up a processor group handle. * */ __pyx_k_tuple_238 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__pgroup), ((PyObject *)__pyx_n_s__pgroup)); if (unlikely(!__pyx_k_tuple_238)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_238); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_238)); __pyx_k_codeobj_239 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_238, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_destroy, 2979, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_239)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":2991 * return True * * def pgroup_get_default(): # <<<<<<<<<<<<<< * """Returns a handle to the default processor group. * */ __pyx_k_codeobj_240 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_get_default, 2991, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_240)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3002 * return GA_Pgroup_get_default() * * def pgroup_get_mirror(): # <<<<<<<<<<<<<< * """Returns a handle to the mirrored processor group. * */ __pyx_k_codeobj_241 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_get_mirror, 3002, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_241)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3002; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3013 * return GA_Pgroup_get_mirror() * * def pgroup_get_world(): # <<<<<<<<<<<<<< * """Returns a handle to the world processor group. * */ __pyx_k_codeobj_242 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_get_world, 3013, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_242)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3013; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3024 * return GA_Pgroup_get_world() * * def pgroup_gop(int pgroup, X, char *op): # <<<<<<<<<<<<<< * """Global operation. * */ __pyx_k_tuple_243 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__pgroup), ((PyObject *)__pyx_n_s__X), ((PyObject *)__pyx_n_s__op), ((PyObject *)__pyx_n_s__X_nd)); if (unlikely(!__pyx_k_tuple_243)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_243); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_243)); __pyx_k_codeobj_244 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_243, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_gop, 3024, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_244)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3065 * return X_nd * * def pgroup_gop_add(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "+") * */ __pyx_k_tuple_245 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__pgroup), ((PyObject *)__pyx_n_s__X)); if (unlikely(!__pyx_k_tuple_245)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3065; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_245); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_245)); __pyx_k_codeobj_246 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_245, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_gop_add, 3065, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_246)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3065; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3068 * return pgroup_gop(pgroup, X, "+") * * def pgroup_gop_multiply(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "*") * */ __pyx_k_tuple_247 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__pgroup), ((PyObject *)__pyx_n_s__X)); if (unlikely(!__pyx_k_tuple_247)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3068; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_247); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_247)); __pyx_k_codeobj_248 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_247, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_gop_multiply, 3068, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_248)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3068; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3071 * return pgroup_gop(pgroup, X, "*") * * def pgroup_gop_max(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "max") * */ __pyx_k_tuple_249 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__pgroup), ((PyObject *)__pyx_n_s__X)); if (unlikely(!__pyx_k_tuple_249)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_249); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_249)); __pyx_k_codeobj_250 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_249, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_gop_max, 3071, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_250)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3074 * return pgroup_gop(pgroup, X, "max") * * def pgroup_gop_min(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "min") * */ __pyx_k_tuple_251 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__pgroup), ((PyObject *)__pyx_n_s__X)); if (unlikely(!__pyx_k_tuple_251)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3074; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_251); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_251)); __pyx_k_codeobj_252 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_251, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_gop_min, 3074, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_252)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3074; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3077 * return pgroup_gop(pgroup, X, "min") * * def pgroup_gop_absmax(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "absmax") * */ __pyx_k_tuple_253 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__pgroup), ((PyObject *)__pyx_n_s__X)); if (unlikely(!__pyx_k_tuple_253)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3077; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_253); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_253)); __pyx_k_codeobj_254 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_253, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_gop_absmax, 3077, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_254)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3077; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3080 * return pgroup_gop(pgroup, X, "absmax") * * def pgroup_gop_absmin(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "absmin") * */ __pyx_k_tuple_255 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__pgroup), ((PyObject *)__pyx_n_s__X)); if (unlikely(!__pyx_k_tuple_255)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3080; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_255); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_255)); __pyx_k_codeobj_256 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_255, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_gop_absmin, 3080, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_256)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3080; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3083 * return pgroup_gop(pgroup, X, "absmin") * * def pgroup_nnodes(int pgroup=-1): # <<<<<<<<<<<<<< * """Returns the number of processors contained in the group specified by * pgroup. */ __pyx_k_tuple_257 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__pgroup)); if (unlikely(!__pyx_k_tuple_257)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3083; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_257); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_257)); __pyx_k_codeobj_258 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_257, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_nnodes, 3083, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_258)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3083; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3098 * return GA_Pgroup_nnodes(pgroup) * * def pgroup_nodeid(int pgroup=-1): # <<<<<<<<<<<<<< * """Returns the relative index of the processor in the processor group * specified by pgroup. */ __pyx_k_tuple_259 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__pgroup)); if (unlikely(!__pyx_k_tuple_259)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3098; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_259); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_259)); __pyx_k_codeobj_260 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_259, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_nodeid, 3098, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_260)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3098; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3116 * return GA_Pgroup_nodeid(pgroup) * * def pgroup_set_default(int pgroup=-1): # <<<<<<<<<<<<<< * """Resets the default processor group on a collection of processors. * */ __pyx_k_tuple_261 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__pgroup)); if (unlikely(!__pyx_k_tuple_261)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_261); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_261)); __pyx_k_codeobj_262 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_261, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_set_default, 3116, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_262)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3139 * GA_Pgroup_set_default(pgroup) * * def pgroup_split(int pgroup, int num_group): # <<<<<<<<<<<<<< * """TODO""" * return GA_Pgroup_split(pgroup, num_group) */ __pyx_k_tuple_263 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__pgroup), ((PyObject *)__pyx_n_s__num_group)); if (unlikely(!__pyx_k_tuple_263)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_263); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_263)); __pyx_k_codeobj_264 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_263, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_split, 3139, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_264)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3143 * return GA_Pgroup_split(pgroup, num_group) * * def pgroup_split_irreg(int pgroup, int color): # <<<<<<<<<<<<<< * """TODO""" * return GA_Pgroup_split_irreg(pgroup, color) */ __pyx_k_tuple_265 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__pgroup), ((PyObject *)__pyx_n_s__color)); if (unlikely(!__pyx_k_tuple_265)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_265); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_265)); __pyx_k_codeobj_266 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_265, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_split_irreg, 3143, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_266)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3147 * return GA_Pgroup_split_irreg(pgroup, color) * * def pgroup_sync(int pgroup=-1): # <<<<<<<<<<<<<< * """Executes a synchronization group across the processors in the processor * group specified by pgroup. */ __pyx_k_tuple_267 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__pgroup)); if (unlikely(!__pyx_k_tuple_267)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_267); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_267)); __pyx_k_codeobj_268 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_267, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__pgroup_sync, 3147, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_268)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3161 * GA_Pgroup_sync(pgroup) * * def print_distribution(int g_a): # <<<<<<<<<<<<<< * """Prints the array distribution. * */ __pyx_k_tuple_269 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_269)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_269); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_269)); __pyx_k_codeobj_270 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_269, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__print_distribution, 3161, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_270)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3169 * GA_Print_distribution(g_a) * * def print_file(int g_a, file): # <<<<<<<<<<<<<< * """Prints an entire array to a file. * */ __pyx_k_tuple_271 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__file)); if (unlikely(!__pyx_k_tuple_271)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_271); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_271)); __pyx_k_codeobj_272 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_271, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__print_file, 3169, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_272)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3184 * raise NotImplementedError * * def print_patch(int g_a, lo=None, hi=None, bint pretty=True): # <<<<<<<<<<<<<< * """Prints a patch of g_a array to the standard output. * */ __pyx_k_tuple_273 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__pretty), ((PyObject *)__pyx_n_s__lo_nd), ((PyObject *)__pyx_n_s__hi_nd), ((PyObject *)__pyx_n_s__apretty)); if (unlikely(!__pyx_k_tuple_273)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_273); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_273)); __pyx_k_codeobj_274 = (PyObject*)__Pyx_PyCode_New(4, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_273, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__print_patch, 3184, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_274)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3200 * NGA_Print_patch64(g_a, lo_nd.data, hi_nd.data, apretty) * * def print_stats(): # <<<<<<<<<<<<<< * """This non-collective (MIMD) operation prints information about: * */ __pyx_k_codeobj_275 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__print_stats, 3200, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_275)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3217 * GA_Print_stats() * * def print_stdout(int g_a): # <<<<<<<<<<<<<< * """Prints an entire array to the standard output.""" * GA_Print(g_a) */ __pyx_k_tuple_276 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_276)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_276); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_276)); __pyx_k_codeobj_277 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_276, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__print_stdout, 3217, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_277)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3221 * GA_Print(g_a) * * def proc_topology(int g_a, int proc): # <<<<<<<<<<<<<< * """Based on the distribution of an array associated with handle g_a, * determines coordinates of the specified processor in the virtual processor */ __pyx_k_tuple_278 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__proc), ((PyObject *)__pyx_n_s__ndim), ((PyObject *)__pyx_n_s__coord)); if (unlikely(!__pyx_k_tuple_278)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_278); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_278)); __pyx_k_codeobj_279 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_278, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__proc_topology, 3221, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_279)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3238 * return coord * * def put(int g_a, buffer, lo=None, hi=None): # <<<<<<<<<<<<<< * """Copies data from local array buffer to the global array section. * */ __pyx_k_tuple_280 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__buffer), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi)); if (unlikely(!__pyx_k_tuple_280)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3238; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_280); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_280)); __pyx_k_codeobj_281 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_280, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__put, 3238, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_281)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3238; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3346 * buffer_nd.data, ld_nd.data) * * def randomize(int g_a, val=None): # <<<<<<<<<<<<<< * """Fill array with random values in [0,val).""" * cdef int gtype=inquire_type(g_a) */ __pyx_k_tuple_282 = PyTuple_Pack(12, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__val), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__ival), ((PyObject *)__pyx_n_s__lval), ((PyObject *)__pyx_n_s__llval), ((PyObject *)__pyx_n_s__fval), ((PyObject *)__pyx_n_s__dval), ((PyObject *)__pyx_n_s__ldval), ((PyObject *)__pyx_n_s__fcval), ((PyObject *)__pyx_n_s__dcval), ((PyObject *)__pyx_n_s__vval)); if (unlikely(!__pyx_k_tuple_282)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_282); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_282)); __pyx_k_codeobj_283 = (PyObject*)__Pyx_PyCode_New(2, 0, 12, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_282, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__randomize, 3346, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_283)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3366 * GA_Randomize(g_a, vval) * * def read_inc(int g_a, subscript, long inc=1): # <<<<<<<<<<<<<< * """Atomically read and increment an element in an integer array. * */ __pyx_k_tuple_284 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__subscript), ((PyObject *)__pyx_n_s__inc), ((PyObject *)__pyx_n_s__subscript_nd)); if (unlikely(!__pyx_k_tuple_284)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_284); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_284)); __pyx_k_codeobj_285 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_284, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__read_inc, 3366, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_285)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3384 * return NGA_Read_inc64(g_a, subscript_nd.data, inc) * * def register_dtype(dtype): # <<<<<<<<<<<<<< * """Creates a new data type based on the given dtype. * */ __pyx_k_tuple_286 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__gatype)); if (unlikely(!__pyx_k_tuple_286)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3384; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_286); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_286)); __pyx_k_codeobj_287 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_286, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__register_dtype, 3384, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_287)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3384; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3398 * return gatype * * def register_type(size_t bytes): # <<<<<<<<<<<<<< * """Creates a new data type of size bytes. * */ __pyx_k_tuple_288 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__bytes), ((PyObject *)__pyx_n_s__bytes)); if (unlikely(!__pyx_k_tuple_288)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_288); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_288)); __pyx_k_codeobj_289 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_288, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__register_type, 3398, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_289)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3408 * return NGA_Register_type(bytes) * * def recip(int g_a, lo=None, hi=None): # <<<<<<<<<<<<<< * """Take element-wise reciprocal of the array or patch. * */ __pyx_k_tuple_290 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__lo_nd), ((PyObject *)__pyx_n_s__hi_nd)); if (unlikely(!__pyx_k_tuple_290)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_290); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_290)); __pyx_k_codeobj_291 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_290, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__recip, 3408, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_291)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3421 * GA_Recip_patch64(g_a, lo_nd.data, hi_nd.data) * * def release(int g_a, lo=None, hi=None): # <<<<<<<<<<<<<< * """Releases access to a global array when the data was read only. * */ __pyx_k_tuple_292 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi)); if (unlikely(!__pyx_k_tuple_292)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_292); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_292)); __pyx_k_codeobj_293 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_292, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__release, 3421, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_293)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3437 * _release_common(g_a, lo, hi, False) * * def release_block(int g_a, int index): # <<<<<<<<<<<<<< * """Releases access to the block of data specified by the integer index * when data was accessed as read only. */ __pyx_k_tuple_294 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__index)); if (unlikely(!__pyx_k_tuple_294)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_294); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_294)); __pyx_k_codeobj_295 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_294, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__release_block, 3437, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_295)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3447 * NGA_Release_block(g_a, index) * * def release_block_grid(int g_a, subscript): # <<<<<<<<<<<<<< * """Releases access to the block of data specified by the subscript array * when data was accessed as read only. */ __pyx_k_tuple_296 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__subscript), ((PyObject *)__pyx_n_s__subscript_nd)); if (unlikely(!__pyx_k_tuple_296)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_296); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_296)); __pyx_k_codeobj_297 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_296, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__release_block_grid, 3447, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_297)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3461 * NGA_Release_block_grid(g_a, subscript_nd.data) * * def release_block_segment(int g_a, int proc): # <<<<<<<<<<<<<< * """Releases access to the block of locally held data for a block-cyclic * array, when data was accessed as read-only. */ __pyx_k_tuple_298 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__proc)); if (unlikely(!__pyx_k_tuple_298)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_298); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_298)); __pyx_k_codeobj_299 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_298, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s_300, 3461, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_299)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3499 * NGA_Release64(g_a, lo_nd.data, hi_nd.data) * * def release_ghost_element(int g_a, subscript): # <<<<<<<<<<<<<< * """Releases access to the locally held data for an array with ghost * elements, when data was accessed as read-only. */ __pyx_k_tuple_301 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__subscript), ((PyObject *)__pyx_n_s__subscript_nd)); if (unlikely(!__pyx_k_tuple_301)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3499; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_301); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_301)); __pyx_k_codeobj_302 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_301, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s_303, 3499, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_302)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3499; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3510 * NGA_Release_ghost_element64(g_a, subscript_nd.data) * * def release_ghosts(int g_a): # <<<<<<<<<<<<<< * """Releases access to the locally held block of data containing ghost * elements, when data was accessed as read-only. */ __pyx_k_tuple_304 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_304)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3510; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_304); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_304)); __pyx_k_codeobj_305 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_304, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__release_ghosts, 3510, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_305)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3510; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3519 * NGA_Release_ghosts(g_a) * * def release_update(int g_a, lo=None, hi=None): # <<<<<<<<<<<<<< * """Releases access to the data. * */ __pyx_k_tuple_306 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi)); if (unlikely(!__pyx_k_tuple_306)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_306); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_306)); __pyx_k_codeobj_307 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_306, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__release_update, 3519, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_307)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3530 * _release_common(g_a, lo, hi, True) * * def release_update_block(int g_a, int index): # <<<<<<<<<<<<<< * """Releases access to the block of data specified by the integer index * when data was accessed in read-write mode. */ __pyx_k_tuple_308 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__index)); if (unlikely(!__pyx_k_tuple_308)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_308); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_308)); __pyx_k_codeobj_309 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_308, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s_310, 3530, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_309)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3542 * NGA_Release_update_block(g_a, index) * * def release_update_block_grid(int g_a, subscript): # <<<<<<<<<<<<<< * """Releases access to the block of data specified by the subscript array * when data was accessed in read-write mode. */ __pyx_k_tuple_311 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__subscript), ((PyObject *)__pyx_n_s__subscript_nd)); if (unlikely(!__pyx_k_tuple_311)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_311); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_311)); __pyx_k_codeobj_312 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_311, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s_313, 3542, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_312)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3556 * NGA_Release_update_block_grid(g_a, subscript_nd.data) * * def release_update_block_segment(int g_a, int proc): # <<<<<<<<<<<<<< * """Releases access to the block of locally held data for a block-cyclic * array, when data was accessed as read-only. */ __pyx_k_tuple_314 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__proc)); if (unlikely(!__pyx_k_tuple_314)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_314); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_314)); __pyx_k_codeobj_315 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_314, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s_316, 3556, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_315)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3565 * NGA_Release_update_block_segment(g_a, proc) * * def release_update_ghost_element(int g_a, subscript): # <<<<<<<<<<<<<< * """Releases access to the locally held data for an array with ghost * elements, when data was accessed in read-write mode. */ __pyx_k_tuple_317 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__subscript), ((PyObject *)__pyx_n_s__subscript_nd)); if (unlikely(!__pyx_k_tuple_317)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3565; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_317); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_317)); __pyx_k_codeobj_318 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_317, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s_319, 3565, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_318)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3565; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3577 * pass * * def release_update_ghosts(int g_a): # <<<<<<<<<<<<<< * """Releases access to the locally held block of data containing ghost * elements, when data was accessed in read-write mode. */ __pyx_k_tuple_320 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_320)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_320); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_320)); __pyx_k_codeobj_321 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_320, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s_322, 3577, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_321)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3586 * NGA_Release_update_ghosts(g_a) * * def scale(int g_a, value, lo=None, hi=None): # <<<<<<<<<<<<<< * """Scales an array by the constant s. * */ __pyx_k_tuple_323 = PyTuple_Pack(16, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__value), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__lo_nd), ((PyObject *)__pyx_n_s__hi_nd), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__ivalue), ((PyObject *)__pyx_n_s__lvalue), ((PyObject *)__pyx_n_s__llvalue), ((PyObject *)__pyx_n_s__fvalue), ((PyObject *)__pyx_n_s__dvalue), ((PyObject *)__pyx_n_s__ldvalue), ((PyObject *)__pyx_n_s__fcvalue), ((PyObject *)__pyx_n_s__dcvalue), ((PyObject *)__pyx_n_s__vvalue)); if (unlikely(!__pyx_k_tuple_323)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3586; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_323); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_323)); __pyx_k_codeobj_324 = (PyObject*)__Pyx_PyCode_New(4, 0, 16, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_323, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__scale, 3586, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_324)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3586; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3617 * g_a, lo_nd.data, hi_nd.data, vvalue) * * def scale_rows(int g_a, int g_v): # <<<<<<<<<<<<<< * """Scales the rows of this matrix g_a using the vector g_v. * */ __pyx_k_tuple_325 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_v)); if (unlikely(!__pyx_k_tuple_325)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_325); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_325)); __pyx_k_codeobj_326 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_325, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__scale_rows, 3617, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_326)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3625 * GA_Scale_rows(g_a, g_v) * * def scale_cols(int g_a, int g_v): # <<<<<<<<<<<<<< * """Scales the columns of this matrix g_a using the vector g_v. * */ __pyx_k_tuple_327 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_v)); if (unlikely(!__pyx_k_tuple_327)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_327); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_327)); __pyx_k_codeobj_328 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_327, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__scale_cols, 3625, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_328)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3633 * GA_Scale_cols(g_a, g_v) * * def scan_add(int g_src, int g_dst, int g_msk, lo=None, hi=None, # <<<<<<<<<<<<<< * bint excl=False): * """Adds successive elements in a source vector g_src and put the results */ __pyx_k_tuple_329 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__g_src), ((PyObject *)__pyx_n_s__g_dst), ((PyObject *)__pyx_n_s__g_msk), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__excl), ((PyObject *)__pyx_n_s__hi_nd), ((PyObject *)__pyx_n_s__c_lo), ((PyObject *)__pyx_n_s__c_hi), ((PyObject *)__pyx_n_s__c_excl)); if (unlikely(!__pyx_k_tuple_329)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3633; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_329); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_329)); __pyx_k_codeobj_330 = (PyObject*)__Pyx_PyCode_New(6, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_329, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__scan_add, 3633, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_330)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3633; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3684 * GA_Scan_add64(g_src, g_dst, g_msk, c_lo, c_hi, c_excl) * * def scan_copy(int g_src, int g_dst, int g_msk, lo=None, hi=None): # <<<<<<<<<<<<<< * """This subroutine does a segmented scan-copy of values in the source * array g_src into a destination array g_dst with segments defined by */ __pyx_k_tuple_331 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__g_src), ((PyObject *)__pyx_n_s__g_dst), ((PyObject *)__pyx_n_s__g_msk), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__hi_nd), ((PyObject *)__pyx_n_s__c_lo), ((PyObject *)__pyx_n_s__c_hi), ((PyObject *)__pyx_n_s__c_excl)); if (unlikely(!__pyx_k_tuple_331)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3684; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_331); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_331)); __pyx_k_codeobj_332 = (PyObject*)__Pyx_PyCode_New(5, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_331, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__scan_copy, 3684, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_332)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3684; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3710 * GA_Scan_copy64(g_src, g_dst, g_msk, c_lo, c_hi) * * def scatter(int g_a, values, subsarray): # <<<<<<<<<<<<<< * """Scatters array elements from a global array into a local array. * */ __pyx_k_tuple_333 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__values), ((PyObject *)__pyx_n_s__subsarray), ((PyObject *)__pyx_n_s__subsarray1_nd), ((PyObject *)__pyx_n_s__subsarray2_nd), ((PyObject *)__pyx_n_s__values_nd), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__ndim), ((PyObject *)__pyx_n_s__n)); if (unlikely(!__pyx_k_tuple_333)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3710; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_333); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_333)); __pyx_k_codeobj_334 = (PyObject*)__Pyx_PyCode_New(3, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_333, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__scatter, 3710, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_334)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3710; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3767 * raise ValueError, "how did this happen?" * * def scatter_acc(int g_a, values, subsarray, alpha=None): # <<<<<<<<<<<<<< * """Scatters array elements from a global array into a local array. * */ __pyx_k_tuple_335 = PyTuple_Pack(19, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__values), ((PyObject *)__pyx_n_s__subsarray), ((PyObject *)__pyx_n_s__alpha), ((PyObject *)__pyx_n_s__subsarray1_nd), ((PyObject *)__pyx_n_s__subsarray2_nd), ((PyObject *)__pyx_n_s__values_nd), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__ndim), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__ialpha), ((PyObject *)__pyx_n_s__lalpha), ((PyObject *)__pyx_n_s__llalpha), ((PyObject *)__pyx_n_s__falpha), ((PyObject *)__pyx_n_s__dalpha), ((PyObject *)__pyx_n_s__ldalpha), ((PyObject *)__pyx_n_s__fcalpha), ((PyObject *)__pyx_n_s__dcalpha), ((PyObject *)__pyx_n_s__valpha)); if (unlikely(!__pyx_k_tuple_335)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3767; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_335); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_335)); __pyx_k_codeobj_336 = (PyObject*)__Pyx_PyCode_New(4, 0, 19, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_335, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__scatter_acc, 3767, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_336)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3767; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3843 * raise ValueError, "how did this happen?" * * def select_elem(int g_a, char *op): # <<<<<<<<<<<<<< * """Returns the value and index for an element that is selected by the * specified operator in a global array corresponding to g_a handle. */ __pyx_k_tuple_337 = PyTuple_Pack(13, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__op), ((PyObject *)__pyx_n_s__index), ((PyObject *)__pyx_n_s__gtype), ((PyObject *)__pyx_n_s__ialpha), ((PyObject *)__pyx_n_s__lalpha), ((PyObject *)__pyx_n_s__llalpha), ((PyObject *)__pyx_n_s__falpha), ((PyObject *)__pyx_n_s__dalpha), ((PyObject *)__pyx_n_s__ldalpha), ((PyObject *)__pyx_n_s__fcalpha), ((PyObject *)__pyx_n_s__dcalpha), ((PyObject *)__pyx_n_s__valpha)); if (unlikely(!__pyx_k_tuple_337)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3843; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_337); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_337)); __pyx_k_codeobj_338 = (PyObject*)__Pyx_PyCode_New(2, 0, 13, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_337, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__select_elem, 3843, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_338)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3843; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3890 * raise TypeError, "type of g_a not recognized" * * def select_elem_min(int g_a): # <<<<<<<<<<<<<< * """Equivalent to ga.select_elem(g_a, "min").""" * return select_elem(g_a, "min") */ __pyx_k_tuple_339 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_339)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3890; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_339); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_339)); __pyx_k_codeobj_340 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_339, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__select_elem_min, 3890, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_340)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3890; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3894 * return select_elem(g_a, "min") * * def select_elem_max(int g_a): # <<<<<<<<<<<<<< * """Equivalent to ga.select_elem(g_a, "max").""" * return select_elem(g_a, "max") */ __pyx_k_tuple_341 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_341)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3894; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_341); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_341)); __pyx_k_codeobj_342 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_341, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__select_elem_max, 3894, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_342)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3894; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3898 * return select_elem(g_a, "max") * * def set_array_name(int g_a, char *name): # <<<<<<<<<<<<<< * """Assigns a unique character string name to a global array handle that * was obtained using the GA_Create_handle function. */ __pyx_k_tuple_343 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__name)); if (unlikely(!__pyx_k_tuple_343)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3898; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_343); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_343)); __pyx_k_codeobj_344 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_343, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__set_array_name, 3898, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_344)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3898; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3907 * GA_Set_array_name(g_a, name) * * def set_block_cyclic(int g_a, dims): # <<<<<<<<<<<<<< * """Creates a global array with a simple block-cyclic data distribution. * */ __pyx_k_tuple_345 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__dims), ((PyObject *)__pyx_n_s__dims_nd)); if (unlikely(!__pyx_k_tuple_345)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3907; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_345); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_345)); __pyx_k_codeobj_346 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_345, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__set_block_cyclic, 3907, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_346)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3907; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3930 * GA_Set_block_cyclic(g_a, dims_nd.data) * * def set_block_cyclic_proc_grid(int g_a, block, proc_grid): # <<<<<<<<<<<<<< * """Creates a global array with a SCALAPACK-type block cyclic data * distribution. */ __pyx_k_tuple_347 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__block), ((PyObject *)__pyx_n_s__proc_grid), ((PyObject *)__pyx_n_s__block_nd), ((PyObject *)__pyx_n_s__proc_grid_nd)); if (unlikely(!__pyx_k_tuple_347)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3930; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_347); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_347)); __pyx_k_codeobj_348 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_347, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s_349, 3930, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_348)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3930; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3959 * proc_grid_nd.data) * * def set_chunk(int g_a, chunk): # <<<<<<<<<<<<<< * """This function is used to set the chunk array for a global array handle * that was obtained using the GA_Create_handle function. The chunk array is */ __pyx_k_tuple_350 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__chunk), ((PyObject *)__pyx_n_s__chunk_nd)); if (unlikely(!__pyx_k_tuple_350)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_350); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_350)); __pyx_k_codeobj_351 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_350, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__set_chunk, 3959, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_351)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3972 * GA_Set_chunk64(g_a, chunk_nd.data) * * def set_data(int g_a, dims, int type): # <<<<<<<<<<<<<< * """Sets the array dimension, the coordinate dimensions, and the data type * assigned to a global array handle obtained using the ga.create_handle */ __pyx_k_tuple_352 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__dims), ((PyObject *)__pyx_n_s__type), ((PyObject *)__pyx_n_s__dims_nd)); if (unlikely(!__pyx_k_tuple_352)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_352); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_352)); __pyx_k_codeobj_353 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_352, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__set_data, 3972, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_353)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3984 * GA_Set_data64(g_a, len(dims_nd), dims_nd.data, type) * * def set_debug(bint debug): # <<<<<<<<<<<<<< * """Sets an internal flag in the GA library to either True or False. * */ __pyx_k_tuple_354 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__debug), ((PyObject *)__pyx_n_s__debug)); if (unlikely(!__pyx_k_tuple_354)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_354); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_354)); __pyx_k_codeobj_355 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_354, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__set_debug, 3984, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_355)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":3998 * GA_Set_debug(debug) * * def set_diagonal(int g_a, int g_v): # <<<<<<<<<<<<<< * """Sets the diagonal elements of this matrix g_a with the elements of the * vector g_v. */ __pyx_k_tuple_356 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_v)); if (unlikely(!__pyx_k_tuple_356)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3998; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_356); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_356)); __pyx_k_codeobj_357 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_356, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__set_diagonal, 3998, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_357)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3998; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4007 * GA_Set_diagonal(g_a, g_v) * * def set_ghosts(int g_a, width): # <<<<<<<<<<<<<< * """Sets the ghost cell widths for a global array handle that was obtained * using the ga.create_handle function. */ __pyx_k_tuple_358 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__width), ((PyObject *)__pyx_n_s__width_nd)); if (unlikely(!__pyx_k_tuple_358)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_358); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_358)); __pyx_k_codeobj_359 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_358, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__set_ghosts, 4007, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_359)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4022 * GA_Set_ghosts64(g_a, width_nd.data) * * def set_irreg_distr(int g_a, mapc, nblock): # <<<<<<<<<<<<<< * """Partitions the array data among the individual processors for a global * array handle obtained using the ga.create_handle function. */ __pyx_k_tuple_360 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__mapc), ((PyObject *)__pyx_n_s__nblock), ((PyObject *)__pyx_n_s__mapc_nd), ((PyObject *)__pyx_n_s__nblock_nd)); if (unlikely(!__pyx_k_tuple_360)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4022; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_360); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_360)); __pyx_k_codeobj_361 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_360, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__set_irreg_distr, 4022, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_361)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4022; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4055 * GA_Set_irreg_distr64(g_a, mapc_nd.data, nblock_nd.data) * * def set_memory_limit(size_t limit): # <<<<<<<<<<<<<< * """Sets the amount of memory to be used (in bytes) per process. * */ __pyx_k_tuple_362 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__limit), ((PyObject *)__pyx_n_s__limit)); if (unlikely(!__pyx_k_tuple_362)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4055; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_362); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_362)); __pyx_k_codeobj_363 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_362, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__set_memory_limit, 4055, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_363)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4055; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4067 * GA_Set_memory_limit(limit) * * def set_pgroup(int g_a, int pgroup): # <<<<<<<<<<<<<< * """Sets the processor configuration assigned to a global array handle that * was obtained using the ga.create_handle function. */ __pyx_k_tuple_364 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__pgroup)); if (unlikely(!__pyx_k_tuple_364)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4067; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_364); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_364)); __pyx_k_codeobj_365 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_364, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__set_pgroup, 4067, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_365)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4067; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4081 * GA_Set_pgroup(g_a, pgroup) * * def set_restricted(int g_a, list): # <<<<<<<<<<<<<< * """Restrict data in the global array g_a to only the processors listed in * the array list. */ __pyx_k_tuple_366 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__list), ((PyObject *)__pyx_n_s__list_nd)); if (unlikely(!__pyx_k_tuple_366)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4081; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_366); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_366)); __pyx_k_codeobj_367 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_366, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__set_restricted, 4081, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_367)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4081; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4101 * GA_Set_restricted(g_a, list_nd.data, len(list_nd)) * * def set_restricted_range(int g_a, int lo_proc, int hi_proc): # <<<<<<<<<<<<<< * """Restrict data in the global array to the given range of processors. * */ __pyx_k_tuple_368 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__lo_proc), ((PyObject *)__pyx_n_s__hi_proc)); if (unlikely(!__pyx_k_tuple_368)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_368); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_368)); __pyx_k_codeobj_369 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_368, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s_370, 4101, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_369)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4115 * GA_Set_restricted_range(g_a, lo_proc, hi_proc) * * def shift_diagoal(int g_a, value=None): # <<<<<<<<<<<<<< * """Adds this constant to the diagonal elements of the matrix. * */ __pyx_k_tuple_371 = PyTuple_Pack(12, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__value), ((PyObject *)__pyx_n_s__ivalue), ((PyObject *)__pyx_n_s__lvalue), ((PyObject *)__pyx_n_s__llvalue), ((PyObject *)__pyx_n_s__fvalue), ((PyObject *)__pyx_n_s__dvalue), ((PyObject *)__pyx_n_s__ldvalue), ((PyObject *)__pyx_n_s__fcvalue), ((PyObject *)__pyx_n_s__dcvalue), ((PyObject *)__pyx_n_s__vvalue), ((PyObject *)__pyx_n_s__gtype)); if (unlikely(!__pyx_k_tuple_371)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_371); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_371)); __pyx_k_codeobj_372 = (PyObject*)__Pyx_PyCode_New(2, 0, 12, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_371, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__shift_diagoal, 4115, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_372)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4139 * GA_Shift_diagonal(g_a, vvalue) * * def solve(int g_a, int g_b): # <<<<<<<<<<<<<< * """Solves a system of linear equations A * X = B. * */ __pyx_k_tuple_373 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_b)); if (unlikely(!__pyx_k_tuple_373)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_373); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_373)); __pyx_k_codeobj_374 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_373, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__solve, 4139, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_374)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4155 * return GA_Solve(g_a, g_b) * * def spd_invert(int g_a): # <<<<<<<<<<<<<< * """Compute the inverse of a double precision using the Cholesky * factorization of a NxN double precision symmetric positive definite matrix */ __pyx_k_tuple_375 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_375)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_375); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_375)); __pyx_k_codeobj_376 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_375, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__spd_invert, 4155, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_376)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4168 * return GA_Spd_invert(g_a) * * def step_max(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None): # <<<<<<<<<<<<<< * """Calculates the largest multiple of a vector g_b that can be added to * this vector g_a while keeping each element of this vector non-negative. */ __pyx_k_tuple_377 = PyTuple_Pack(11, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_b), ((PyObject *)__pyx_n_s__alo), ((PyObject *)__pyx_n_s__ahi), ((PyObject *)__pyx_n_s__blo), ((PyObject *)__pyx_n_s__bhi), ((PyObject *)__pyx_n_s__alo_nd), ((PyObject *)__pyx_n_s__ahi_nd), ((PyObject *)__pyx_n_s__blo_nd), ((PyObject *)__pyx_n_s__bhi_nd), ((PyObject *)__pyx_n_s__step)); if (unlikely(!__pyx_k_tuple_377)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_377); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_377)); __pyx_k_codeobj_378 = (PyObject*)__Pyx_PyCode_New(6, 0, 11, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_377, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__step_max, 4168, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_378)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4188 * return step * * def strided_acc(int g_a, buffer, lo=None, hi=None, skip=None, alpha=None): # <<<<<<<<<<<<<< * """Strided version of ga.acc. * */ __pyx_k_tuple_379 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__buffer), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__skip), ((PyObject *)__pyx_n_s__alpha)); if (unlikely(!__pyx_k_tuple_379)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_379); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_379)); __pyx_k_codeobj_380 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_379, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__strided_acc, 4188, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_380)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4219 * _acc_common(g_a, buffer, lo, hi, alpha, False, False, skip) * * def strided_get(int g_a, lo=None, hi=None, skip=None, np.ndarray buffer=None): # <<<<<<<<<<<<<< * """Strided version of ga.get. * */ __pyx_k_tuple_381 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__skip), ((PyObject *)__pyx_n_s__buffer)); if (unlikely(!__pyx_k_tuple_381)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_381); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_381)); __pyx_k_codeobj_382 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_381, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__strided_get, 4219, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_382)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4247 * return _get_common(g_a, lo, hi, buffer, False, False, skip) * * def strided_put(int g_a, buffer, lo=None, hi=None, skip=None): # <<<<<<<<<<<<<< * """Strided version of ga.put. * */ __pyx_k_tuple_383 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__buffer), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__skip)); if (unlikely(!__pyx_k_tuple_383)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_383); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_383)); __pyx_k_codeobj_384 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_383, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__strided_put, 4247, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_384)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4273 * _put_common(g_a, buffer, lo, hi, False, False, skip) * * def summarize(bint verbose): # <<<<<<<<<<<<<< * """Prints info about allocated arrays.""" * GA_Summarize(verbose) */ __pyx_k_tuple_385 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__verbose), ((PyObject *)__pyx_n_s__verbose)); if (unlikely(!__pyx_k_tuple_385)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_385); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_385)); __pyx_k_codeobj_386 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_385, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__summarize, 4273, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_386)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4277 * GA_Summarize(verbose) * * def symmetrize(int g_a): # <<<<<<<<<<<<<< * """Symmetrizes matrix A represented with handle g_a: A:= .5 * (A+A'). * */ __pyx_k_tuple_387 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_387)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_387); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_387)); __pyx_k_codeobj_388 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_387, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__symmetrize, 4277, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_388)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4285 * GA_Symmetrize(g_a) * * def sync(): # <<<<<<<<<<<<<< * """Synchronize processes (a barrier) and ensure that all GA operations * completed. */ __pyx_k_codeobj_389 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__sync, 4285, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_389)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4294 * GA_Sync() * * def terminate(): # <<<<<<<<<<<<<< * """Delete all active arrays and destroy internal data structures. * */ __pyx_k_codeobj_390 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__terminate, 4294, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_390)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4304 * GA_Terminate() * * def total_blocks(int g_a): # <<<<<<<<<<<<<< * """Returns the total number of blocks contained in a global * array with a block-cyclic data distribution. */ __pyx_k_tuple_391 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_391)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_391); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_391)); __pyx_k_codeobj_392 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_391, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__total_blocks, 4304, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_392)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4313 * return GA_Total_blocks(g_a) * * def transpose(int g_a, int g_b): # <<<<<<<<<<<<<< * """Transposes a matrix: B = A', where A and B are represented by handles * g_a and g_b. */ __pyx_k_tuple_393 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_b)); if (unlikely(!__pyx_k_tuple_393)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_393); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_393)); __pyx_k_codeobj_394 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_393, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__transpose, 4313, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_394)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4322 * GA_Transpose(g_a, g_b) * * def unlock(int mutex): # <<<<<<<<<<<<<< * """Unlocks a mutex object identified by the mutex number. It is a fatal * error for a process to attempt to unlock a mutex which has not been locked */ __pyx_k_tuple_395 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__mutex), ((PyObject *)__pyx_n_s__mutex)); if (unlikely(!__pyx_k_tuple_395)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_395); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_395)); __pyx_k_codeobj_396 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_395, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__unlock, 4322, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_396)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4328 * GA_Unlock(mutex) * * def unpack(int g_src, int g_dst, int g_msk, lo=None, hi=None): # <<<<<<<<<<<<<< * """Expands the values in the source vector into a larger destination vector. * */ __pyx_k_tuple_397 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__g_src), ((PyObject *)__pyx_n_s__g_dst), ((PyObject *)__pyx_n_s__g_msk), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__hi_nd), ((PyObject *)__pyx_n_s__c_lo), ((PyObject *)__pyx_n_s__c_hi), ((PyObject *)__pyx_n_s__icount)); if (unlikely(!__pyx_k_tuple_397)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_397); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_397)); __pyx_k_codeobj_398 = (PyObject*)__Pyx_PyCode_New(5, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_397, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__unpack, 4328, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_398)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4369 * return icount * * def update_ghosts(int g_a): # <<<<<<<<<<<<<< * """This call updates the ghost cell regions on each processor with the * corresponding neighbor data from other processors. */ __pyx_k_tuple_399 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_399)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_399); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_399)); __pyx_k_codeobj_400 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_399, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__update_ghosts, 4369, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_400)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4385 * GA_Update_ghosts(g_a) * * def update_ghost_dir(int g_a, int dimension, int dir, int flag): # <<<<<<<<<<<<<< * """This function can be used to update the ghost cells along individual * directions. It is designed for algorithms that can overlap updates with */ __pyx_k_tuple_401 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__dimension), ((PyObject *)__pyx_n_s__dir), ((PyObject *)__pyx_n_s__flag)); if (unlikely(!__pyx_k_tuple_401)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_401); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_401)); __pyx_k_codeobj_402 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_401, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__update_ghost_dir, 4385, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_402)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4414 * NGA_Update_ghost_dir(g_a, dimension, dir, flag) * * def uses_ma(): # <<<<<<<<<<<<<< * """TODO""" * if GA_Uses_ma() == 1: */ __pyx_k_codeobj_403 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__uses_ma, 4414, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_403)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4420 * return False * * def wtime(): # <<<<<<<<<<<<<< * """This function return a wall (or elapsed) time on the calling processor. * Returns time in seconds representing elapsed wall-clock time since an */ __pyx_k_codeobj_404 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__wtime, 4420, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_404)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4420; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4437 * return GA_Wtime() * * def zero(int g_a, lo=None, hi=None): # <<<<<<<<<<<<<< * """Set all the elements in the array or patch to zero.""" * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd */ __pyx_k_tuple_405 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__lo_nd), ((PyObject *)__pyx_n_s__hi_nd)); if (unlikely(!__pyx_k_tuple_405)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_405); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_405)); __pyx_k_codeobj_406 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_405, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__zero, 4437, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_406)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":4446 * NGA_Zero_patch64(g_a, lo_nd.data, hi_nd.data) * * def zero_diagonal(int g_a): # <<<<<<<<<<<<<< * """Sets the diagonal elements of this matrix g_a with zeros. * */ __pyx_k_tuple_407 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_407)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4446; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_407); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_407)); __pyx_k_codeobj_408 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_407, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_54, __pyx_n_s__zero_diagonal, 4446, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_408)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4446; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; __Pyx_RefNannyFinishContext(); return -1; } static int __Pyx_InitGlobals(void) { if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_5 = PyInt_FromLong(5); if (unlikely(!__pyx_int_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_6 = PyInt_FromLong(6); if (unlikely(!__pyx_int_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_7 = PyInt_FromLong(7); if (unlikely(!__pyx_int_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_8 = PyInt_FromLong(8); if (unlikely(!__pyx_int_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_9 = PyInt_FromLong(9); if (unlikely(!__pyx_int_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_10 = PyInt_FromLong(10); if (unlikely(!__pyx_int_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_11 = PyInt_FromLong(11); if (unlikely(!__pyx_int_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_12 = PyInt_FromLong(12); if (unlikely(!__pyx_int_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_13 = PyInt_FromLong(13); if (unlikely(!__pyx_int_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_14 = PyInt_FromLong(14); if (unlikely(!__pyx_int_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_16 = PyInt_FromLong(16); if (unlikely(!__pyx_int_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_1000 = PyInt_FromLong(1000); if (unlikely(!__pyx_int_1000)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; return 0; __pyx_L1_error:; return -1; } #if PY_MAJOR_VERSION < 3 PyMODINIT_FUNC initga(void); /*proto*/ PyMODINIT_FUNC initga(void) #else PyMODINIT_FUNC PyInit_ga(void); /*proto*/ PyMODINIT_FUNC PyInit_ga(void) #endif { PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannyDeclarations #if CYTHON_REFNANNY __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); if (!__Pyx_RefNanny) { PyErr_Clear(); __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); if (!__Pyx_RefNanny) Py_FatalError("failed to import 'refnanny' module"); } #endif __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_ga(void)", 0); if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #ifdef __Pyx_CyFunction_USED if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif #ifdef __Pyx_FusedFunction_USED if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif #ifdef __Pyx_Generator_USED if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif /*--- Library function declarations ---*/ /*--- Threads initialization code ---*/ #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS #ifdef WITH_THREAD /* Python build with threading support? */ PyEval_InitThreads(); #endif #endif /*--- Module creation code ---*/ #if PY_MAJOR_VERSION < 3 __pyx_m = Py_InitModule4(__Pyx_NAMESTR("ga"), __pyx_methods, __Pyx_DOCSTR(__pyx_k_51), 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); #else __pyx_m = PyModule_Create(&__pyx_moduledef); #endif if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} Py_INCREF(__pyx_d); #if PY_MAJOR_VERSION >= 3 { PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!PyDict_GetItemString(modules, "ga4py.ga")) { if (unlikely(PyDict_SetItemString(modules, "ga4py.ga", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } } #endif __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #if CYTHON_COMPILING_IN_PYPY Py_INCREF(__pyx_b); #endif if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; /*--- Initialize various global constants etc. ---*/ if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif if (__pyx_module_is_main_ga4py__ga) { if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; } /*--- Builtin init code ---*/ if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Constants init code ---*/ if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Global init code ---*/ /*--- Variable export code ---*/ /*--- Function export code ---*/ /*--- Type init code ---*/ /*--- Type import code ---*/ __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", #if CYTHON_COMPILING_IN_PYPY sizeof(PyTypeObject), #else sizeof(PyHeapTypeObject), #endif 0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Variable import code ---*/ /*--- Function import code ---*/ /*--- Execution code ---*/ /* "ga4py/ga.pyx":14 * from libc.stdlib cimport malloc,free * from gah cimport * * import numpy as np # <<<<<<<<<<<<<< * cimport numpy as np * from cpython.ref cimport Py_INCREF */ __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":18 * from cpython.ref cimport Py_INCREF * from cpython.ref cimport PyTypeObject * import __builtin__ # <<<<<<<<<<<<<< * * DEF EXCLUSIVE = 0 */ __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s____builtin__), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s____builtin__, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":22 * DEF EXCLUSIVE = 0 * * np.import_array() # <<<<<<<<<<<<<< * * cdef extern from "numpy/arrayobject.h": */ import_array(); /* "ga4py/ga.pyx":34 * object obj) * * cdef bint _initialized = False # <<<<<<<<<<<<<< * * TYPE_BASE = 1000 */ __pyx_v_5ga4py_2ga__initialized = 0; /* "ga4py/ga.pyx":36 * cdef bint _initialized = False * * TYPE_BASE = 1000 # <<<<<<<<<<<<<< * C_CHAR = (TYPE_BASE + 0) * C_INT = (TYPE_BASE + 1) */ if (PyDict_SetItem(__pyx_d, __pyx_n_s__TYPE_BASE, __pyx_int_1000) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":37 * * TYPE_BASE = 1000 * C_CHAR = (TYPE_BASE + 0) # <<<<<<<<<<<<<< * C_INT = (TYPE_BASE + 1) * C_LONG = (TYPE_BASE + 2) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_int_0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__C_CHAR, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":38 * TYPE_BASE = 1000 * C_CHAR = (TYPE_BASE + 0) * C_INT = (TYPE_BASE + 1) # <<<<<<<<<<<<<< * C_LONG = (TYPE_BASE + 2) * C_FLOAT = (TYPE_BASE + 3) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__C_INT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":39 * C_CHAR = (TYPE_BASE + 0) * C_INT = (TYPE_BASE + 1) * C_LONG = (TYPE_BASE + 2) # <<<<<<<<<<<<<< * C_FLOAT = (TYPE_BASE + 3) * C_DBL = (TYPE_BASE + 4) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_int_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__C_LONG, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":40 * C_INT = (TYPE_BASE + 1) * C_LONG = (TYPE_BASE + 2) * C_FLOAT = (TYPE_BASE + 3) # <<<<<<<<<<<<<< * C_DBL = (TYPE_BASE + 4) * C_LDBL = (TYPE_BASE + 5) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_int_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__C_FLOAT, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":41 * C_LONG = (TYPE_BASE + 2) * C_FLOAT = (TYPE_BASE + 3) * C_DBL = (TYPE_BASE + 4) # <<<<<<<<<<<<<< * C_LDBL = (TYPE_BASE + 5) * C_SCPL = (TYPE_BASE + 6) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_int_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__C_DBL, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":42 * C_FLOAT = (TYPE_BASE + 3) * C_DBL = (TYPE_BASE + 4) * C_LDBL = (TYPE_BASE + 5) # <<<<<<<<<<<<<< * C_SCPL = (TYPE_BASE + 6) * C_DCPL = (TYPE_BASE + 7) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_int_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__C_LDBL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":43 * C_DBL = (TYPE_BASE + 4) * C_LDBL = (TYPE_BASE + 5) * C_SCPL = (TYPE_BASE + 6) # <<<<<<<<<<<<<< * C_DCPL = (TYPE_BASE + 7) * C_LDCPL = (TYPE_BASE + 8) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_int_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__C_SCPL, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":44 * C_LDBL = (TYPE_BASE + 5) * C_SCPL = (TYPE_BASE + 6) * C_DCPL = (TYPE_BASE + 7) # <<<<<<<<<<<<<< * C_LDCPL = (TYPE_BASE + 8) * F_BYTE = (TYPE_BASE + 9) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_int_7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__C_DCPL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":45 * C_SCPL = (TYPE_BASE + 6) * C_DCPL = (TYPE_BASE + 7) * C_LDCPL = (TYPE_BASE + 8) # <<<<<<<<<<<<<< * F_BYTE = (TYPE_BASE + 9) * F_INT = (TYPE_BASE + 10) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_int_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__C_LDCPL, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":46 * C_DCPL = (TYPE_BASE + 7) * C_LDCPL = (TYPE_BASE + 8) * F_BYTE = (TYPE_BASE + 9) # <<<<<<<<<<<<<< * F_INT = (TYPE_BASE + 10) * F_LOG = (TYPE_BASE + 11) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_int_9); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__F_BYTE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":47 * C_LDCPL = (TYPE_BASE + 8) * F_BYTE = (TYPE_BASE + 9) * F_INT = (TYPE_BASE + 10) # <<<<<<<<<<<<<< * F_LOG = (TYPE_BASE + 11) * F_REAL = (TYPE_BASE + 12) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_int_10); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__F_INT, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":48 * F_BYTE = (TYPE_BASE + 9) * F_INT = (TYPE_BASE + 10) * F_LOG = (TYPE_BASE + 11) # <<<<<<<<<<<<<< * F_REAL = (TYPE_BASE + 12) * F_DBL = (TYPE_BASE + 13) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_int_11); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__F_LOG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":49 * F_INT = (TYPE_BASE + 10) * F_LOG = (TYPE_BASE + 11) * F_REAL = (TYPE_BASE + 12) # <<<<<<<<<<<<<< * F_DBL = (TYPE_BASE + 13) * F_SCPL = (TYPE_BASE + 14) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_int_12); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__F_REAL, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":50 * F_LOG = (TYPE_BASE + 11) * F_REAL = (TYPE_BASE + 12) * F_DBL = (TYPE_BASE + 13) # <<<<<<<<<<<<<< * F_SCPL = (TYPE_BASE + 14) * F_DCPL = (TYPE_BASE + 15) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_int_13); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__F_DBL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":51 * F_REAL = (TYPE_BASE + 12) * F_DBL = (TYPE_BASE + 13) * F_SCPL = (TYPE_BASE + 14) # <<<<<<<<<<<<<< * F_DCPL = (TYPE_BASE + 15) * C_LONGLONG = (TYPE_BASE + 16) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_int_14); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__F_SCPL, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":52 * F_DBL = (TYPE_BASE + 13) * F_SCPL = (TYPE_BASE + 14) * F_DCPL = (TYPE_BASE + 15) # <<<<<<<<<<<<<< * C_LONGLONG = (TYPE_BASE + 16) * */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_int_15); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__F_DCPL, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":53 * F_SCPL = (TYPE_BASE + 14) * F_DCPL = (TYPE_BASE + 15) * C_LONGLONG = (TYPE_BASE + 16) # <<<<<<<<<<<<<< * * WORLD_PROC_GROUP = -1 */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__TYPE_BASE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_int_16); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__C_LONGLONG, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":55 * C_LONGLONG = (TYPE_BASE + 16) * * WORLD_PROC_GROUP = -1 # <<<<<<<<<<<<<< * * _to_dtype = { */ if (PyDict_SetItem(__pyx_d, __pyx_n_s__WORLD_PROC_GROUP, __pyx_int_neg_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/ga.pyx":57 * WORLD_PROC_GROUP = -1 * * _to_dtype = { # <<<<<<<<<<<<<< * C_CHAR: np.dtype(np.int8), * C_INT: np.dtype(np.int32), */ __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); /* "ga4py/ga.pyx":58 * * _to_dtype = { * C_CHAR: np.dtype(np.int8), # <<<<<<<<<<<<<< * C_INT: np.dtype(np.int32), * C_LONG: np.dtype(np.int64), */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_CHAR); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__int8); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyDict_SetItem(__pyx_t_2, __pyx_t_1, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":59 * _to_dtype = { * C_CHAR: np.dtype(np.int8), * C_INT: np.dtype(np.int32), # <<<<<<<<<<<<<< * C_LONG: np.dtype(np.int64), * C_LONGLONG: np.dtype(np.int64), */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_INT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__int32); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_t_2, __pyx_t_4, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":60 * C_CHAR: np.dtype(np.int8), * C_INT: np.dtype(np.int32), * C_LONG: np.dtype(np.int64), # <<<<<<<<<<<<<< * C_LONGLONG: np.dtype(np.int64), * C_FLOAT: np.dtype(np.float32), */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__int64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":61 * C_INT: np.dtype(np.int32), * C_LONG: np.dtype(np.int64), * C_LONGLONG: np.dtype(np.int64), # <<<<<<<<<<<<<< * C_FLOAT: np.dtype(np.float32), * C_DBL: np.dtype(np.float64), */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LONGLONG); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__int64); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyDict_SetItem(__pyx_t_2, __pyx_t_1, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":62 * C_LONG: np.dtype(np.int64), * C_LONGLONG: np.dtype(np.int64), * C_FLOAT: np.dtype(np.float32), # <<<<<<<<<<<<<< * C_DBL: np.dtype(np.float64), * C_SCPL: np.dtype(np.complex64), */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_FLOAT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__float32); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_t_2, __pyx_t_4, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/ga.pyx":63 * C_LONGLONG: np.dtype(np.int64), * C_FLOAT: np.dtype(np.float32), * C_DBL: np.dtype(np.float64), # <<<<<<<<<<<<<< * C_SCPL: np.dtype(np.complex64), * C_DCPL: np.dtype(np.complex128), */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_DBL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__float64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_t_2, __pyx_t_3, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/ga.pyx":64 * C_FLOAT: np.dtype(np.float32), * C_DBL: np.dtype(np.float64), * C_SCPL: np.dtype(np.complex64), # <<<<<<<<<<<<<< * C_DCPL: np.dtype(np.complex128), * } */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_SCPL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__complex64); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyDict_SetItem(__pyx_t_2, __pyx_t_1, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":65 * C_DBL: np.dtype(np.float64), * C_SCPL: np.dtype(np.complex64), * C_DCPL: np.dtype(np.complex128), # <<<<<<<<<<<<<< * } * # numpy doesn't always have these types depending on the system */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_DCPL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__complex128); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_t_2, __pyx_t_4, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s___to_dtype, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; /* "ga4py/ga.pyx":68 * } * # numpy doesn't always have these types depending on the system * cdef bint float128_in_np = ('float128' in dir(np)) # <<<<<<<<<<<<<< * cdef bint complex256_in_np = ('complex256' in dir(np)) * if float128_in_np: */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Dir(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = (__Pyx_PySequence_Contains(((PyObject *)__pyx_n_s__float128), __pyx_t_3, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_5ga4py_2ga_float128_in_np = __pyx_t_5; /* "ga4py/ga.pyx":69 * # numpy doesn't always have these types depending on the system * cdef bint float128_in_np = ('float128' in dir(np)) * cdef bint complex256_in_np = ('complex256' in dir(np)) # <<<<<<<<<<<<<< * if float128_in_np: * _to_dtype[C_LDBL] = np.dtype(np.float128) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyObject_Dir(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = (__Pyx_PySequence_Contains(((PyObject *)__pyx_n_s__complex256), __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_5ga4py_2ga_complex256_in_np = __pyx_t_5; /* "ga4py/ga.pyx":70 * cdef bint float128_in_np = ('float128' in dir(np)) * cdef bint complex256_in_np = ('complex256' in dir(np)) * if float128_in_np: # <<<<<<<<<<<<<< * _to_dtype[C_LDBL] = np.dtype(np.float128) * if complex256_in_np: */ __pyx_t_5 = (__pyx_v_5ga4py_2ga_float128_in_np != 0); if (__pyx_t_5) { /* "ga4py/ga.pyx":71 * cdef bint complex256_in_np = ('complex256' in dir(np)) * if float128_in_np: * _to_dtype[C_LDBL] = np.dtype(np.float128) # <<<<<<<<<<<<<< * if complex256_in_np: * _to_dtype[C_LDCPL] = np.dtype(np.complex256) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__float128); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LDBL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_2, __pyx_t_4, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L2; } __pyx_L2:; /* "ga4py/ga.pyx":72 * if float128_in_np: * _to_dtype[C_LDBL] = np.dtype(np.float128) * if complex256_in_np: # <<<<<<<<<<<<<< * _to_dtype[C_LDCPL] = np.dtype(np.complex256) * */ __pyx_t_5 = (__pyx_v_5ga4py_2ga_complex256_in_np != 0); if (__pyx_t_5) { /* "ga4py/ga.pyx":73 * _to_dtype[C_LDBL] = np.dtype(np.float128) * if complex256_in_np: * _to_dtype[C_LDCPL] = np.dtype(np.complex256) # <<<<<<<<<<<<<< * * ############################################################################# */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__complex256); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s___to_dtype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__C_LDCPL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_t_2, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/ga.pyx":79 * ############################################################################# * * def dtype(int gatype): # <<<<<<<<<<<<<< * """Converts the given GA type to a numpy dtype.""" * if gatype in _to_dtype: */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_1dtype, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__dtype, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":85 * raise ValueError, "%d was not a recognized GA type" % gatype * * def inquire_dtype(int g_a): # <<<<<<<<<<<<<< * """Returns the numpy dtype of the given GA.""" * gatype = inquire_type(g_a) */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_3inquire_dtype, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__inquire_dtype, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":235 * raise TypeError, "type of g_a not recognized" * * def zip(lo, hi): # <<<<<<<<<<<<<< * """Transforms a GA lo,hi combination into a slice list.""" * return [slice(l,h) for l,h in __builtin__.zip(lo,hi)] */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_5zip, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__zip, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":243 * ############################################################################# * * def abs_value(int g_a, lo=None, hi=None): # <<<<<<<<<<<<<< * """Take element-wise absolute value of the array or patch. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_7abs_value, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__abs_value, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":264 * GA_Abs_value_patch64(g_a, lo_nd.data, hi_nd.data) * * def acc(int g_a, buffer, lo=None, hi=None, alpha=None): # <<<<<<<<<<<<<< * """Combines data from buffer with data in the global array patch. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_9acc, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__acc, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":399 * buffer_nd.data, ld_nd.data, valpha) * * def access(int g_a, lo=None, hi=None, int proc=-1): # <<<<<<<<<<<<<< * """Returns local array patch. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_11access, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__access, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":495 * return array * * def access_block(int g_a, int idx): # <<<<<<<<<<<<<< * """Returns local array patch for a block-cyclic distribution. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_13access_block, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__access_block, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":540 * return array * * def access_block_grid(int g_a, subscript): # <<<<<<<<<<<<<< * """Returns local array patch for a SCALAPACK block-cyclic distribution. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_15access_block_grid, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__access_block_grid, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":566 * raise NotImplementedError * * def access_block_segment(int g_a, int proc): # <<<<<<<<<<<<<< * """This function can be used to gain access to the all the locally held * data on a particular processor that is associated with a block-cyclic */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_17access_block_segment, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_72, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":602 * return array * * def access_ghost_element(int g_a, subscript): # <<<<<<<<<<<<<< * """Returns a scalar ndarray representing the requested ghost element. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_19access_ghost_element, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_75, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":624 * raise NotImplementedError, "use access_ghosts(g_a) instead" * * def access_ghosts(int g_a): # <<<<<<<<<<<<<< * """Returns ndarray representing local patch with ghost cells. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_21access_ghosts, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__access_ghosts, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":665 * return array * * def add(int g_a, int g_b, int g_c, alpha=None, beta=None, alo=None, ahi=None, # <<<<<<<<<<<<<< * blo=None, bhi=None, clo=None, chi=None): * """Element-wise addition of two arrays. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_23add, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__add, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":741 * g_c, clo_nd.data, chi_nd.data) * * def add_constant(int g_a, alpha, lo=None, hi=None): # <<<<<<<<<<<<<< * """Adds the constant alpha to each element of the array. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_25add_constant, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__add_constant, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":779 * g_a, lo_nd.data, hi_nd.data, valpha) * * def add_diagonal(int g_a, int g_v): # <<<<<<<<<<<<<< * """Adds the elements of the vector g_v to the diagonal of matrix g_a. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_27add_diagonal, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__add_diagonal, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":793 * GA_Add_diagonal(g_a, g_v) * * def allocate(int g_a): # <<<<<<<<<<<<<< * """Allocates memory for the handle obtained using ga.create_handle. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_29allocate, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__allocate, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":813 * return False * * def brdcst(buffer, int root=0): # <<<<<<<<<<<<<< * """Broadcast from process root to all other processes. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_31brdcst, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__brdcst, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":840 * return buffer_nd * * def check_handle(int g_a, char *message): # <<<<<<<<<<<<<< * """Checks that the array handle g_a is valid. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_33check_handle, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__check_handle, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":850 * GA_Check_handle(g_a, message) * * def cluster_nnodes(): # <<<<<<<<<<<<<< * """Returns the total number of nodes that the program is running on. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_35cluster_nnodes, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 850; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__cluster_nnodes, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 850; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":861 * return GA_Cluster_nnodes() * * def cluster_nodeid(int proc=-1): # <<<<<<<<<<<<<< * """Returns the node ID of this process or the given process. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_37cluster_nodeid, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__cluster_nodeid, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":878 * return GA_Cluster_nodeid() * * def cluster_proc_nodeid(int proc): # <<<<<<<<<<<<<< * """Returns the node ID of the specified process. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_39cluster_proc_nodeid, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__cluster_proc_nodeid, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":889 * return GA_Cluster_proc_nodeid(proc) * * def cluster_nprocs(int node): # <<<<<<<<<<<<<< * """Returns the number of processors available on the given node. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_41cluster_nprocs, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__cluster_nprocs, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":897 * return GA_Cluster_nprocs(node) * * def cluster_procid(int node, int proc): # <<<<<<<<<<<<<< * """Returns the proc ID associated with node and local proc ID. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_43cluster_procid, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__cluster_procid, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":908 * return GA_Cluster_procid(node, proc) * * def compare_distr(int g_a, int g_b): # <<<<<<<<<<<<<< * """Compares the distributions of two global arrays. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_45compare_distr, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__compare_distr, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":920 * return False * * def copy(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None, # <<<<<<<<<<<<<< * bint trans=False): * """Copies elements from array g_a into array g_b. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_47copy, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__copy, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":967 * g_b, blo_nd.data, bhi_nd.data) * * def create(int gtype, dims, char *name="", chunk=None, int pgroup=-1): # <<<<<<<<<<<<<< * """Creates an n-dimensional array using the regular distribution model. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_49create, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__create, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1012 * name, NULL, pgroup) * * def create_ghosts(int gtype, dims, width, char *name="", chunk=None, # <<<<<<<<<<<<<< * int pgroup=-1): * """Creates an array with a layer of ghost cells around the visible data. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_51create_ghosts, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1012; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__create_ghosts, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1012; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1064 * NULL, pgroup) * * def create_handle(): # <<<<<<<<<<<<<< * """Returns a global array handle that can be used to create a new array. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_53create_handle, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__create_handle, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1079 * return GA_Create_handle() * * def create_irreg(int gtype, dims, block, map, char *name="", int pgroup=-1): # <<<<<<<<<<<<<< * """Creates an array by following the user-specified distribution. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_55create_irreg, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__create_irreg, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1120 * block_nd.data, map_nd.data, pgroup) * * def create_ghosts_irreg(int gtype, dims, width, block, map, char *name="", # <<<<<<<<<<<<<< * int pgroup=-1): * """Creates an array with a layer of ghost cells around the visible data. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_57create_ghosts_irreg, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__create_ghosts_irreg, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1170 * block_nd.data, map_nd.data, pgroup) * * def create_mutexes(int number): # <<<<<<<<<<<<<< * """Creates a set containing the number of mutexes. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_59create_mutexes, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__create_mutexes, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1192 * return False * * def deregister_type(int type): # <<<<<<<<<<<<<< * """Removes the data type previously registered using register_type. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_61deregister_type, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1192; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__deregister_type, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1192; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1202 * return NGA_Deregister_type(type) * * def destroy(int g_a): # <<<<<<<<<<<<<< * """Deallocates the array and frees any associated resources. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_63destroy, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__destroy, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1210 * GA_Destroy(g_a) * * def destroy_mutexes(): # <<<<<<<<<<<<<< * """Destroys the set of mutexes created with ga_create_mutexes. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_65destroy_mutexes, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__destroy_mutexes, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1222 * return False * * def diag(int g_a, int g_s, int g_v, evalues=None): # <<<<<<<<<<<<<< * """Solve the generalized eigen-value problem. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_67diag, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__diag, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1248 * return evalues * * def diag_reuse(int control, int g_a, int g_s, int g_v, evalues=None): # <<<<<<<<<<<<<< * """Solve the generalized eigen-value problem. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_69diag_reuse, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__diag_reuse, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1282 * return evalues * * def diag_std(int g_a, int g_v, evalues=None): # <<<<<<<<<<<<<< * """Solve the standard (non-generalized) eigenvalue problem. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_71diag_std, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__diag_std, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1324 * return lo,hi * * def dot(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None, # <<<<<<<<<<<<<< * bint ta=False, bint tb=False): * """Computes the element-wise dot product of two arrays. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_75dot, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__dot, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1433 * raise TypeError * * def duplicate(int g_a, char *name=""): # <<<<<<<<<<<<<< * """Creates a new array by applying all the properties of another existing * array. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_77duplicate, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1433; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__duplicate, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1433; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1450 * return GA_Duplicate(g_a, name) * * def elem_divide(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, # <<<<<<<<<<<<<< * bhi=None, clo=None, chi=None): * """Computes the element-wise quotient of the two arrays. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_79elem_divide, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__elem_divide, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1502 * g_c, clo_nd.data, chi_nd.data) * * def elem_maximum(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, # <<<<<<<<<<<<<< * bhi=None, clo=None, chi=None): * """Computes the element-wise maximum of the two arrays. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_81elem_maximum, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__elem_maximum, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1556 * g_c, clo_nd.data, chi_nd.data) * * def elem_minimum(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, # <<<<<<<<<<<<<< * bhi=None, clo=None, chi=None): * """Computes the element-wise minimum of the two arrays. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_83elem_minimum, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__elem_minimum, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1610 * g_c, clo_nd.data, chi_nd.data) * * def elem_multiply(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, # <<<<<<<<<<<<<< * bhi=None, clo=None, chi=None): * """Computes the element-wise product of the two arrays. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_85elem_multiply, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1610; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__elem_multiply, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1610; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1660 * g_c, clo_nd.data, chi_nd.data) * * def error(char *message, int code=1): # <<<<<<<<<<<<<< * """Prints message and aborts safely with code.""" * GA_Error(message, code) */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_87error, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__error, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1664 * GA_Error(message, code) * * def fence(): # <<<<<<<<<<<<<< * """Blocks the calling process until all the data transfers corresponding * to GA operations called after ga.init_fence() complete. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_89fence, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1664; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__fence, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1664; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1697 * GA_Fence() * * def fill(int g_a, value, lo=None, hi=None): # <<<<<<<<<<<<<< * """Assign a single value to all elements in the array or patch. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_91fill, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__fill, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1731 * g_a, lo_nd.data, hi_nd.data, vvalue) * * def gather(int g_a, subsarray, np.ndarray values=None): # <<<<<<<<<<<<<< * """Gathers array elements from a global array into a local array. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_93gather, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__gather, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1790 * return values * * def gemm(bint ta, bint tb, int64_t m, int64_t n, int64_t k, # <<<<<<<<<<<<<< * alpha, int g_a, int g_b, beta, int g_c): * """Performs one of the matrix-matrix operations. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_95gemm, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__gemm, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1886 * raise TypeError * * def get(int g_a, lo=None, hi=None, np.ndarray buffer=None): # <<<<<<<<<<<<<< * """Copies data from global array section to the local array buffer. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_97get, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1886; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__get, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1886; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":1999 * return buffer * * def get_block_info(int g_a): # <<<<<<<<<<<<<< * """Returns information about the block-cyclic distribution. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_99get_block_info, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1999; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__get_block_info, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1999; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2023 * return num_blocks,block_dims * * def get_diag(int g_a, int g_v): # <<<<<<<<<<<<<< * """Inserts the diagonal elements of this matrix g_a into the vector g_v. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_101get_diag, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2023; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__get_diag, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2023; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2035 * GA_Get_diag(g_a, g_v) * * def get_debug(): # <<<<<<<<<<<<<< * """Returns the value of an internal flag in the GA library whose value can * be set using the ga.set_debug() subroutine. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_103get_debug, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__get_debug, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2044 * return GA_Get_debug() * * def gop(X, char *op): # <<<<<<<<<<<<<< * """Global operation. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_105gop, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__gop, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2090 * return X_nd * * def gop_add(X): # <<<<<<<<<<<<<< * return gop(X, "+") * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_107gop_add, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2090; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__gop_add, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2090; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2093 * return gop(X, "+") * * def gop_multiply(X): # <<<<<<<<<<<<<< * return gop(X, "*") * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_109gop_multiply, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__gop_multiply, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2096 * return gop(X, "*") * * def gop_max(X): # <<<<<<<<<<<<<< * return gop(X, "max") * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_111gop_max, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2096; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__gop_max, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2096; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2099 * return gop(X, "max") * * def gop_min(X): # <<<<<<<<<<<<<< * return gop(X, "min") * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_113gop_min, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2099; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__gop_min, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2099; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2102 * return gop(X, "min") * * def gop_absmax(X): # <<<<<<<<<<<<<< * return gop(X, "absmax") * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_115gop_absmax, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__gop_absmax, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2105 * return gop(X, "absmax") * * def gop_absmin(X): # <<<<<<<<<<<<<< * return gop(X, "absmin") * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_117gop_absmin, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__gop_absmin, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2108 * return gop(X, "absmin") * * def has_ghosts(int g_a): # <<<<<<<<<<<<<< * """Determines whether any dimension of the given array has ghost cells. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_119has_ghosts, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__has_ghosts, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2124 * return False * * def init_fence(): # <<<<<<<<<<<<<< * """Initializes tracing of completion status of data movement operations. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_121init_fence, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__init_fence, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2132 * GA_Init_fence() * * def initialize(): # <<<<<<<<<<<<<< * """Allocates and initializes internal data structures in Global Arrays. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_123initialize, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__initialize, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2145 * _initialized = True * * def initialize_ltd(size_t limit): # <<<<<<<<<<<<<< * """Allocates and initializes internal data structures and sets limit for * memory used in global arrays. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_125initialize_ltd, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__initialize_ltd, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2164 * _initialized = True * * def initialized(): # <<<<<<<<<<<<<< * """Returns whether ga has been initialized.""" * return _initialized */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_127initialized, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__initialized, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2181 * return dims * * def inquire_memory(): # <<<<<<<<<<<<<< * """Returns amount of memory (in bytes) used in the allocated global arrays * on the calling processor. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_133inquire_memory, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__inquire_memory, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2190 * return GA_Inquire_memory() * * def inquire_name(int g_a): # <<<<<<<<<<<<<< * """Returns the name of an array represented by the handle g_a. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_135inquire_name, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__inquire_name, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2208 * return gtype * * def is_mirrored(int g_a): # <<<<<<<<<<<<<< * """Checks whether the array is mirrored. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_139is_mirrored, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__is_mirrored, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2220 * return False * * def llt_solve(int g_a, int g_b): # <<<<<<<<<<<<<< * """Solves a system of linear equations * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_141llt_solve, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__llt_solve, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2242 * return GA_Llt_solve(g_a, g_b) * * def locate(int g_a, subscript): # <<<<<<<<<<<<<< * """Return the GA compute process id that 'owns' the data. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_143locate, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__locate, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2260 * return NGA_Locate64(g_a, subscript_nd.data) * * def locate_nnodes(int g_a, lo, hi): # <<<<<<<<<<<<<< * """Return the number of process which own the specified patch. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_145locate_nnodes, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__locate_nnodes, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2271 * return NGA_Locate_nnodes64(g_a, lo_nd.data, hi_nd.data) * * def locate_region(int g_a, lo, hi): # <<<<<<<<<<<<<< * """Return the list of the GA processes id that 'own' the data. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_147locate_region, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__locate_region, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2308 * return map_reshape,procs * * def lock(int mutex): # <<<<<<<<<<<<<< * """Locks a mutex object identified by the mutex number. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_149lock, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__lock, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2317 * GA_Lock(mutex) * * def lu_solve(int g_a, int g_b, bint trans=False): # <<<<<<<<<<<<<< * """Solve the system of linear equations op(A)X = B based on the LU * factorization. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_151lu_solve, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2317; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__lu_solve, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2317; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2345 * GA_Lu_solve(ctrans, g_a, g_b) * * def mask_sync(bint first, bint last): # <<<<<<<<<<<<<< * """This subroutine can be used to remove synchronization calls from around * collective operations. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_153mask_sync, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__mask_sync, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2365 * GA_Mask_sync(first,last) * * def matmul_patch(bint transa, bint transb, alpha, beta, # <<<<<<<<<<<<<< * int g_a, alo, ahi, * int g_b, blo, bhi, */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_155matmul_patch, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__matmul_patch, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2422 * g_c, clo_nd.data, chi_nd.data) * * def median(int g_a, int g_b, int g_c, int g_m, # <<<<<<<<<<<<<< * alo=None, ahi=None, blo=None, bhi=None, * clo=None, chi=None, mlo=None, mhi=None): */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_157median, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__median, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2479 * g_m, mlo_nd.data, mhi_nd.data) * * def memory_avail(): # <<<<<<<<<<<<<< * """Returns amount of memory (in bytes) left for allocation of new global * arrays on the calling processor. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_159memory_avail, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2479; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__memory_avail, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2479; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2496 * return GA_Memory_avail() * * def memory_limited(): # <<<<<<<<<<<<<< * """Indicates if limit is set on memory usage in Global Arrays on the * calling processor. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_161memory_limited, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__memory_limited, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2509 * return False * * def merge_distr_patch(int g_a, alo, ahi, int g_b, blo, bhi): # <<<<<<<<<<<<<< * """This function merges all copies of a patch of a mirrored array (g_a) * into a patch in a distributed array (g_b). */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_163merge_distr_patch, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__merge_distr_patch, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2538 * g_b, blo_nd.data, bhi_nd.data) * * def merge_mirrored(int g_a): # <<<<<<<<<<<<<< * """This subroutine merges mirrored arrays by adding the contents of each * array across nodes. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_165merge_mirrored, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__merge_mirrored, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2555 * GA_Merge_mirrored(g_a) * * def nbacc(int g_a, buffer, lo=None, hi=None, alpha=None): # <<<<<<<<<<<<<< * """Non-blocking version of ga.acc. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_167nbacc, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2555; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__nbacc, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2555; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2588 * return _acc_common(g_a, buffer, lo, hi, alpha, True) * * def nbget(int g_a, lo=None, hi=None, np.ndarray buffer=None): # <<<<<<<<<<<<<< * """Non-blocking version of the blocking ga.get operation. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_169nbget, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2588; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__nbget, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2588; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2618 * return _get_common(g_a, lo, hi, buffer, True) * * def nblock(int g_a): # <<<<<<<<<<<<<< * """Returns the number of partitions of each array dimension for g_a. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_171nblock, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__nblock, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2634 * return nblock_nd * * def nbput(int g_a, buffer, lo=None, hi=None): # <<<<<<<<<<<<<< * """Non-blocking version of the blocking put operation. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_173nbput, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2634; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__nbput, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2634; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2661 * return _put_common(g_a, buffer, lo, hi, True, False) * * def nbwait(ga_nbhdl_t nbhandle): # <<<<<<<<<<<<<< * """This function completes a non-blocking one-sided operation locally. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_175nbwait, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2661; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__nbwait, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2661; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2679 * NGA_NbWait(&nbhandle) * * def ndim(int g_a): # <<<<<<<<<<<<<< * """Returns the number of dimensions in array represented by the handle g_a. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_177ndim, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ndim, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2693 * return GA_Ndim(g_a) * * def nnodes(): # <<<<<<<<<<<<<< * """Returns the number of the GA compute (user) processes. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_179nnodes, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2693; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__nnodes, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2693; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2703 * return GA_Nnodes() * * def nodeid(): # <<<<<<<<<<<<<< * """Returns the GA process id (0, ..., ga.nnodes()-1) of the requesting * compute process. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_181nodeid, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__nodeid, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2714 * return GA_Nodeid() * * def norm1(int g_a): # <<<<<<<<<<<<<< * """Computes the 1-norm of the matrix or vector g_a. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_183norm1, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2714; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__norm1, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2714; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2730 * return nm * * def norm_infinity(int g_a): # <<<<<<<<<<<<<< * """Computes the 1-norm of the matrix or vector g_a. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_185norm_infinity, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2730; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__norm_infinity, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2730; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2746 * return nm * * def enum(int g_a, lo=None, hi=None, start=None, inc=None): # <<<<<<<<<<<<<< * """This subroutine enumerates the values of an array between elements lo * and hi starting with the value istart and incrementing each subsequent */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_187enum, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2746; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__enum, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2746; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2803 * GA_Patch_enum64(g_a, c_lo, c_hi, vstart, vinc) * * def pack(int g_src, int g_dst, int g_msk, lo=None, hi=None): # <<<<<<<<<<<<<< * """The pack subroutine is designed to compress the values in the source * vector g_src into a smaller destination array g_dst based on the values */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_189pack, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pack, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2841 * return icount * * def periodic_acc(int g_a, buffer, lo=None, hi=None, alpha=None): # <<<<<<<<<<<<<< * """Periodic version of ga.acc. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_191periodic_acc, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__periodic_acc, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2872 * _acc_common(g_a, buffer, lo, hi, alpha, False, True) * * def periodic_get(int g_a, lo=None, hi=None, np.ndarray buffer=None): # <<<<<<<<<<<<<< * """Periodic version of ga.get. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_193periodic_get, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2872; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__periodic_get, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2872; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2901 * return _get_common(g_a, lo, hi, buffer, False, True) * * def periodic_put(int g_a, buffer, lo=None, hi=None): # <<<<<<<<<<<<<< * """Periodic version of ga.put. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_195periodic_put, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2901; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__periodic_put, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2901; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2928 * _put_common(g_a, buffer, lo, hi, False, True) * * def pgroup_absolute_id(int pgroup, int pid): # <<<<<<<<<<<<<< * """TODO""" * return GA_Pgroup_absolute_id(pgroup, pid) */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_197pgroup_absolute_id, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_absolute_id, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2932 * return GA_Pgroup_absolute_id(pgroup, pid) * * def pgroup_brdcst(int pgroup, buffer, int root=0): # <<<<<<<<<<<<<< * """Broadcast from process root to all other processes in the same group. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_199pgroup_brdcst, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2932; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_brdcst, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2932; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2962 * return buffer_nd * * def pgroup_create(list): # <<<<<<<<<<<<<< * """Creates a processor group. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_201pgroup_create, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2962; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_create, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2962; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2979 * return GA_Pgroup_create(list_nd.data, len(list_nd)) * * def pgroup_destroy(int pgroup): # <<<<<<<<<<<<<< * """Frees up a processor group handle. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_203pgroup_destroy, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_destroy, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":2991 * return True * * def pgroup_get_default(): # <<<<<<<<<<<<<< * """Returns a handle to the default processor group. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_205pgroup_get_default, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_get_default, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3002 * return GA_Pgroup_get_default() * * def pgroup_get_mirror(): # <<<<<<<<<<<<<< * """Returns a handle to the mirrored processor group. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_207pgroup_get_mirror, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3002; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_get_mirror, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3002; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3013 * return GA_Pgroup_get_mirror() * * def pgroup_get_world(): # <<<<<<<<<<<<<< * """Returns a handle to the world processor group. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_209pgroup_get_world, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3013; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_get_world, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3013; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3024 * return GA_Pgroup_get_world() * * def pgroup_gop(int pgroup, X, char *op): # <<<<<<<<<<<<<< * """Global operation. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_211pgroup_gop, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_gop, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3065 * return X_nd * * def pgroup_gop_add(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "+") * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_213pgroup_gop_add, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3065; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_gop_add, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3065; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3068 * return pgroup_gop(pgroup, X, "+") * * def pgroup_gop_multiply(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "*") * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_215pgroup_gop_multiply, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3068; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_gop_multiply, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3068; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3071 * return pgroup_gop(pgroup, X, "*") * * def pgroup_gop_max(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "max") * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_217pgroup_gop_max, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_gop_max, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3074 * return pgroup_gop(pgroup, X, "max") * * def pgroup_gop_min(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "min") * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_219pgroup_gop_min, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3074; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_gop_min, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3074; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3077 * return pgroup_gop(pgroup, X, "min") * * def pgroup_gop_absmax(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "absmax") * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_221pgroup_gop_absmax, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3077; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_gop_absmax, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3077; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3080 * return pgroup_gop(pgroup, X, "absmax") * * def pgroup_gop_absmin(int pgroup, X): # <<<<<<<<<<<<<< * return pgroup_gop(pgroup, X, "absmin") * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_223pgroup_gop_absmin, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3080; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_gop_absmin, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3080; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3083 * return pgroup_gop(pgroup, X, "absmin") * * def pgroup_nnodes(int pgroup=-1): # <<<<<<<<<<<<<< * """Returns the number of processors contained in the group specified by * pgroup. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_225pgroup_nnodes, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3083; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_nnodes, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3083; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3098 * return GA_Pgroup_nnodes(pgroup) * * def pgroup_nodeid(int pgroup=-1): # <<<<<<<<<<<<<< * """Returns the relative index of the processor in the processor group * specified by pgroup. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_227pgroup_nodeid, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3098; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_nodeid, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3098; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3116 * return GA_Pgroup_nodeid(pgroup) * * def pgroup_set_default(int pgroup=-1): # <<<<<<<<<<<<<< * """Resets the default processor group on a collection of processors. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_229pgroup_set_default, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_set_default, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3139 * GA_Pgroup_set_default(pgroup) * * def pgroup_split(int pgroup, int num_group): # <<<<<<<<<<<<<< * """TODO""" * return GA_Pgroup_split(pgroup, num_group) */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_231pgroup_split, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_split, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3143 * return GA_Pgroup_split(pgroup, num_group) * * def pgroup_split_irreg(int pgroup, int color): # <<<<<<<<<<<<<< * """TODO""" * return GA_Pgroup_split_irreg(pgroup, color) */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_233pgroup_split_irreg, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_split_irreg, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3147 * return GA_Pgroup_split_irreg(pgroup, color) * * def pgroup_sync(int pgroup=-1): # <<<<<<<<<<<<<< * """Executes a synchronization group across the processors in the processor * group specified by pgroup. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_235pgroup_sync, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pgroup_sync, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3161 * GA_Pgroup_sync(pgroup) * * def print_distribution(int g_a): # <<<<<<<<<<<<<< * """Prints the array distribution. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_237print_distribution, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__print_distribution, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3169 * GA_Print_distribution(g_a) * * def print_file(int g_a, file): # <<<<<<<<<<<<<< * """Prints an entire array to a file. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_239print_file, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__print_file, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3184 * raise NotImplementedError * * def print_patch(int g_a, lo=None, hi=None, bint pretty=True): # <<<<<<<<<<<<<< * """Prints a patch of g_a array to the standard output. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_241print_patch, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__print_patch, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3200 * NGA_Print_patch64(g_a, lo_nd.data, hi_nd.data, apretty) * * def print_stats(): # <<<<<<<<<<<<<< * """This non-collective (MIMD) operation prints information about: * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_243print_stats, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__print_stats, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3217 * GA_Print_stats() * * def print_stdout(int g_a): # <<<<<<<<<<<<<< * """Prints an entire array to the standard output.""" * GA_Print(g_a) */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_245print_stdout, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__print_stdout, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3221 * GA_Print(g_a) * * def proc_topology(int g_a, int proc): # <<<<<<<<<<<<<< * """Based on the distribution of an array associated with handle g_a, * determines coordinates of the specified processor in the virtual processor */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_247proc_topology, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__proc_topology, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3238 * return coord * * def put(int g_a, buffer, lo=None, hi=None): # <<<<<<<<<<<<<< * """Copies data from local array buffer to the global array section. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_249put, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3238; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__put, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3238; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3346 * buffer_nd.data, ld_nd.data) * * def randomize(int g_a, val=None): # <<<<<<<<<<<<<< * """Fill array with random values in [0,val).""" * cdef int gtype=inquire_type(g_a) */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_251randomize, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__randomize, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3366 * GA_Randomize(g_a, vval) * * def read_inc(int g_a, subscript, long inc=1): # <<<<<<<<<<<<<< * """Atomically read and increment an element in an integer array. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_253read_inc, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__read_inc, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3384 * return NGA_Read_inc64(g_a, subscript_nd.data, inc) * * def register_dtype(dtype): # <<<<<<<<<<<<<< * """Creates a new data type based on the given dtype. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_255register_dtype, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3384; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__register_dtype, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3384; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3398 * return gatype * * def register_type(size_t bytes): # <<<<<<<<<<<<<< * """Creates a new data type of size bytes. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_257register_type, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__register_type, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3408 * return NGA_Register_type(bytes) * * def recip(int g_a, lo=None, hi=None): # <<<<<<<<<<<<<< * """Take element-wise reciprocal of the array or patch. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_259recip, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__recip, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3421 * GA_Recip_patch64(g_a, lo_nd.data, hi_nd.data) * * def release(int g_a, lo=None, hi=None): # <<<<<<<<<<<<<< * """Releases access to a global array when the data was read only. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_261release, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__release, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3437 * _release_common(g_a, lo, hi, False) * * def release_block(int g_a, int index): # <<<<<<<<<<<<<< * """Releases access to the block of data specified by the integer index * when data was accessed as read only. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_263release_block, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__release_block, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3447 * NGA_Release_block(g_a, index) * * def release_block_grid(int g_a, subscript): # <<<<<<<<<<<<<< * """Releases access to the block of data specified by the subscript array * when data was accessed as read only. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_265release_block_grid, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__release_block_grid, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3461 * NGA_Release_block_grid(g_a, subscript_nd.data) * * def release_block_segment(int g_a, int proc): # <<<<<<<<<<<<<< * """Releases access to the block of locally held data for a block-cyclic * array, when data was accessed as read-only. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_267release_block_segment, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_300, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3499 * NGA_Release64(g_a, lo_nd.data, hi_nd.data) * * def release_ghost_element(int g_a, subscript): # <<<<<<<<<<<<<< * """Releases access to the locally held data for an array with ghost * elements, when data was accessed as read-only. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_269release_ghost_element, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3499; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_303, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3499; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3510 * NGA_Release_ghost_element64(g_a, subscript_nd.data) * * def release_ghosts(int g_a): # <<<<<<<<<<<<<< * """Releases access to the locally held block of data containing ghost * elements, when data was accessed as read-only. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_271release_ghosts, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3510; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__release_ghosts, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3510; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3519 * NGA_Release_ghosts(g_a) * * def release_update(int g_a, lo=None, hi=None): # <<<<<<<<<<<<<< * """Releases access to the data. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_273release_update, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__release_update, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3530 * _release_common(g_a, lo, hi, True) * * def release_update_block(int g_a, int index): # <<<<<<<<<<<<<< * """Releases access to the block of data specified by the integer index * when data was accessed in read-write mode. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_275release_update_block, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_310, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3542 * NGA_Release_update_block(g_a, index) * * def release_update_block_grid(int g_a, subscript): # <<<<<<<<<<<<<< * """Releases access to the block of data specified by the subscript array * when data was accessed in read-write mode. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_277release_update_block_grid, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_313, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3556 * NGA_Release_update_block_grid(g_a, subscript_nd.data) * * def release_update_block_segment(int g_a, int proc): # <<<<<<<<<<<<<< * """Releases access to the block of locally held data for a block-cyclic * array, when data was accessed as read-only. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_279release_update_block_segment, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_316, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3565 * NGA_Release_update_block_segment(g_a, proc) * * def release_update_ghost_element(int g_a, subscript): # <<<<<<<<<<<<<< * """Releases access to the locally held data for an array with ghost * elements, when data was accessed in read-write mode. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_281release_update_ghost_element, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3565; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_319, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3565; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3577 * pass * * def release_update_ghosts(int g_a): # <<<<<<<<<<<<<< * """Releases access to the locally held block of data containing ghost * elements, when data was accessed in read-write mode. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_283release_update_ghosts, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_322, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3586 * NGA_Release_update_ghosts(g_a) * * def scale(int g_a, value, lo=None, hi=None): # <<<<<<<<<<<<<< * """Scales an array by the constant s. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_285scale, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3586; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__scale, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3586; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3617 * g_a, lo_nd.data, hi_nd.data, vvalue) * * def scale_rows(int g_a, int g_v): # <<<<<<<<<<<<<< * """Scales the rows of this matrix g_a using the vector g_v. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_287scale_rows, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__scale_rows, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3625 * GA_Scale_rows(g_a, g_v) * * def scale_cols(int g_a, int g_v): # <<<<<<<<<<<<<< * """Scales the columns of this matrix g_a using the vector g_v. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_289scale_cols, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__scale_cols, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3633 * GA_Scale_cols(g_a, g_v) * * def scan_add(int g_src, int g_dst, int g_msk, lo=None, hi=None, # <<<<<<<<<<<<<< * bint excl=False): * """Adds successive elements in a source vector g_src and put the results */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_291scan_add, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3633; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__scan_add, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3633; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3684 * GA_Scan_add64(g_src, g_dst, g_msk, c_lo, c_hi, c_excl) * * def scan_copy(int g_src, int g_dst, int g_msk, lo=None, hi=None): # <<<<<<<<<<<<<< * """This subroutine does a segmented scan-copy of values in the source * array g_src into a destination array g_dst with segments defined by */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_293scan_copy, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3684; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__scan_copy, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3684; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3710 * GA_Scan_copy64(g_src, g_dst, g_msk, c_lo, c_hi) * * def scatter(int g_a, values, subsarray): # <<<<<<<<<<<<<< * """Scatters array elements from a global array into a local array. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_295scatter, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3710; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__scatter, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3710; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3767 * raise ValueError, "how did this happen?" * * def scatter_acc(int g_a, values, subsarray, alpha=None): # <<<<<<<<<<<<<< * """Scatters array elements from a global array into a local array. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_297scatter_acc, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3767; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__scatter_acc, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3767; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3843 * raise ValueError, "how did this happen?" * * def select_elem(int g_a, char *op): # <<<<<<<<<<<<<< * """Returns the value and index for an element that is selected by the * specified operator in a global array corresponding to g_a handle. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_299select_elem, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3843; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__select_elem, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3843; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3890 * raise TypeError, "type of g_a not recognized" * * def select_elem_min(int g_a): # <<<<<<<<<<<<<< * """Equivalent to ga.select_elem(g_a, "min").""" * return select_elem(g_a, "min") */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_301select_elem_min, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3890; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__select_elem_min, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3890; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3894 * return select_elem(g_a, "min") * * def select_elem_max(int g_a): # <<<<<<<<<<<<<< * """Equivalent to ga.select_elem(g_a, "max").""" * return select_elem(g_a, "max") */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_303select_elem_max, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3894; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__select_elem_max, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3894; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3898 * return select_elem(g_a, "max") * * def set_array_name(int g_a, char *name): # <<<<<<<<<<<<<< * """Assigns a unique character string name to a global array handle that * was obtained using the GA_Create_handle function. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_305set_array_name, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3898; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__set_array_name, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3898; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3907 * GA_Set_array_name(g_a, name) * * def set_block_cyclic(int g_a, dims): # <<<<<<<<<<<<<< * """Creates a global array with a simple block-cyclic data distribution. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_307set_block_cyclic, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3907; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__set_block_cyclic, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3907; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3930 * GA_Set_block_cyclic(g_a, dims_nd.data) * * def set_block_cyclic_proc_grid(int g_a, block, proc_grid): # <<<<<<<<<<<<<< * """Creates a global array with a SCALAPACK-type block cyclic data * distribution. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_309set_block_cyclic_proc_grid, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3930; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_349, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3930; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3959 * proc_grid_nd.data) * * def set_chunk(int g_a, chunk): # <<<<<<<<<<<<<< * """This function is used to set the chunk array for a global array handle * that was obtained using the GA_Create_handle function. The chunk array is */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_311set_chunk, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__set_chunk, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3972 * GA_Set_chunk64(g_a, chunk_nd.data) * * def set_data(int g_a, dims, int type): # <<<<<<<<<<<<<< * """Sets the array dimension, the coordinate dimensions, and the data type * assigned to a global array handle obtained using the ga.create_handle */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_313set_data, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__set_data, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3984 * GA_Set_data64(g_a, len(dims_nd), dims_nd.data, type) * * def set_debug(bint debug): # <<<<<<<<<<<<<< * """Sets an internal flag in the GA library to either True or False. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_315set_debug, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__set_debug, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":3998 * GA_Set_debug(debug) * * def set_diagonal(int g_a, int g_v): # <<<<<<<<<<<<<< * """Sets the diagonal elements of this matrix g_a with the elements of the * vector g_v. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_317set_diagonal, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3998; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__set_diagonal, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3998; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4007 * GA_Set_diagonal(g_a, g_v) * * def set_ghosts(int g_a, width): # <<<<<<<<<<<<<< * """Sets the ghost cell widths for a global array handle that was obtained * using the ga.create_handle function. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_319set_ghosts, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__set_ghosts, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4022 * GA_Set_ghosts64(g_a, width_nd.data) * * def set_irreg_distr(int g_a, mapc, nblock): # <<<<<<<<<<<<<< * """Partitions the array data among the individual processors for a global * array handle obtained using the ga.create_handle function. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_321set_irreg_distr, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4022; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__set_irreg_distr, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4022; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4055 * GA_Set_irreg_distr64(g_a, mapc_nd.data, nblock_nd.data) * * def set_memory_limit(size_t limit): # <<<<<<<<<<<<<< * """Sets the amount of memory to be used (in bytes) per process. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_323set_memory_limit, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4055; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__set_memory_limit, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4055; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4067 * GA_Set_memory_limit(limit) * * def set_pgroup(int g_a, int pgroup): # <<<<<<<<<<<<<< * """Sets the processor configuration assigned to a global array handle that * was obtained using the ga.create_handle function. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_325set_pgroup, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4067; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__set_pgroup, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4067; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4081 * GA_Set_pgroup(g_a, pgroup) * * def set_restricted(int g_a, list): # <<<<<<<<<<<<<< * """Restrict data in the global array g_a to only the processors listed in * the array list. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_327set_restricted, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4081; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__set_restricted, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4081; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4101 * GA_Set_restricted(g_a, list_nd.data, len(list_nd)) * * def set_restricted_range(int g_a, int lo_proc, int hi_proc): # <<<<<<<<<<<<<< * """Restrict data in the global array to the given range of processors. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_329set_restricted_range, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_370, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4115 * GA_Set_restricted_range(g_a, lo_proc, hi_proc) * * def shift_diagoal(int g_a, value=None): # <<<<<<<<<<<<<< * """Adds this constant to the diagonal elements of the matrix. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_331shift_diagoal, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__shift_diagoal, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4139 * GA_Shift_diagonal(g_a, vvalue) * * def solve(int g_a, int g_b): # <<<<<<<<<<<<<< * """Solves a system of linear equations A * X = B. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_333solve, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__solve, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4155 * return GA_Solve(g_a, g_b) * * def spd_invert(int g_a): # <<<<<<<<<<<<<< * """Compute the inverse of a double precision using the Cholesky * factorization of a NxN double precision symmetric positive definite matrix */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_335spd_invert, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__spd_invert, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4168 * return GA_Spd_invert(g_a) * * def step_max(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None): # <<<<<<<<<<<<<< * """Calculates the largest multiple of a vector g_b that can be added to * this vector g_a while keeping each element of this vector non-negative. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_337step_max, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__step_max, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4188 * return step * * def strided_acc(int g_a, buffer, lo=None, hi=None, skip=None, alpha=None): # <<<<<<<<<<<<<< * """Strided version of ga.acc. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_339strided_acc, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__strided_acc, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4219 * _acc_common(g_a, buffer, lo, hi, alpha, False, False, skip) * * def strided_get(int g_a, lo=None, hi=None, skip=None, np.ndarray buffer=None): # <<<<<<<<<<<<<< * """Strided version of ga.get. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_341strided_get, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__strided_get, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4247 * return _get_common(g_a, lo, hi, buffer, False, False, skip) * * def strided_put(int g_a, buffer, lo=None, hi=None, skip=None): # <<<<<<<<<<<<<< * """Strided version of ga.put. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_343strided_put, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__strided_put, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4273 * _put_common(g_a, buffer, lo, hi, False, False, skip) * * def summarize(bint verbose): # <<<<<<<<<<<<<< * """Prints info about allocated arrays.""" * GA_Summarize(verbose) */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_345summarize, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__summarize, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4277 * GA_Summarize(verbose) * * def symmetrize(int g_a): # <<<<<<<<<<<<<< * """Symmetrizes matrix A represented with handle g_a: A:= .5 * (A+A'). * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_347symmetrize, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__symmetrize, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4285 * GA_Symmetrize(g_a) * * def sync(): # <<<<<<<<<<<<<< * """Synchronize processes (a barrier) and ensure that all GA operations * completed. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_349sync, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__sync, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4294 * GA_Sync() * * def terminate(): # <<<<<<<<<<<<<< * """Delete all active arrays and destroy internal data structures. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_351terminate, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__terminate, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4304 * GA_Terminate() * * def total_blocks(int g_a): # <<<<<<<<<<<<<< * """Returns the total number of blocks contained in a global * array with a block-cyclic data distribution. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_353total_blocks, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__total_blocks, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4313 * return GA_Total_blocks(g_a) * * def transpose(int g_a, int g_b): # <<<<<<<<<<<<<< * """Transposes a matrix: B = A', where A and B are represented by handles * g_a and g_b. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_355transpose, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__transpose, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4322 * GA_Transpose(g_a, g_b) * * def unlock(int mutex): # <<<<<<<<<<<<<< * """Unlocks a mutex object identified by the mutex number. It is a fatal * error for a process to attempt to unlock a mutex which has not been locked */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_357unlock, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__unlock, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4328 * GA_Unlock(mutex) * * def unpack(int g_src, int g_dst, int g_msk, lo=None, hi=None): # <<<<<<<<<<<<<< * """Expands the values in the source vector into a larger destination vector. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_359unpack, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__unpack, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4369 * return icount * * def update_ghosts(int g_a): # <<<<<<<<<<<<<< * """This call updates the ghost cell regions on each processor with the * corresponding neighbor data from other processors. */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_361update_ghosts, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__update_ghosts, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4385 * GA_Update_ghosts(g_a) * * def update_ghost_dir(int g_a, int dimension, int dir, int flag): # <<<<<<<<<<<<<< * """This function can be used to update the ghost cells along individual * directions. It is designed for algorithms that can overlap updates with */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_363update_ghost_dir, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__update_ghost_dir, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4414 * NGA_Update_ghost_dir(g_a, dimension, dir, flag) * * def uses_ma(): # <<<<<<<<<<<<<< * """TODO""" * if GA_Uses_ma() == 1: */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_365uses_ma, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__uses_ma, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4420 * return False * * def wtime(): # <<<<<<<<<<<<<< * """This function return a wall (or elapsed) time on the calling processor. * Returns time in seconds representing elapsed wall-clock time since an */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_367wtime, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4420; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__wtime, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4420; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4437 * return GA_Wtime() * * def zero(int g_a, lo=None, hi=None): # <<<<<<<<<<<<<< * """Set all the elements in the array or patch to zero.""" * cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_369zero, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__zero, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4446 * NGA_Zero_patch64(g_a, lo_nd.data, hi_nd.data) * * def zero_diagonal(int g_a): # <<<<<<<<<<<<<< * """Sets the diagonal elements of this matrix g_a with zeros. * */ __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_2ga_371zero_diagonal, NULL, __pyx_n_s_55); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4446; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s__zero_diagonal, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4446; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/ga.pyx":4454 * GA_Zero_diagonal(g_a) * * initialize() # <<<<<<<<<<<<<< */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__initialize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4454; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4454; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/ga.pyx":1 * #cython: embedsignature=True # <<<<<<<<<<<<<< * """The Global Arrays (GA) Python interface. * */ __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_409), ((PyObject *)__pyx_kp_u_410)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_411), ((PyObject *)__pyx_kp_u_412)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_d, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; /* "numpy.pxd":975 * arr.base = baseptr * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< * if arr.base is NULL: * return None */ goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); if (__pyx_m) { __Pyx_AddTraceback("init ga4py.ga", __pyx_clineno, __pyx_lineno, __pyx_filename); Py_DECREF(__pyx_m); __pyx_m = 0; } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_ImportError, "init ga4py.ga"); } __pyx_L0:; __Pyx_RefNannyFinishContext(); #if PY_MAJOR_VERSION < 3 return; #else return __pyx_m; #endif } /* Runtime support code */ #if CYTHON_REFNANNY static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { PyObject *m = NULL, *p = NULL; void *r = NULL; m = PyImport_ImportModule((char *)modname); if (!m) goto end; p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); if (!p) goto end; r = PyLong_AsVoidPtr(p); end: Py_XDECREF(p); Py_XDECREF(m); return (__Pyx_RefNannyAPIStruct *)r; } #endif /* CYTHON_REFNANNY */ static PyObject *__Pyx_GetBuiltinName(PyObject *name) { PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); if (unlikely(!result)) { PyErr_Format(PyExc_NameError, #if PY_MAJOR_VERSION >= 3 "name '%U' is not defined", name); #else "name '%s' is not defined", PyString_AS_STRING(name)); #endif } return result; } static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { PyObject *result; #if CYTHON_COMPILING_IN_CPYTHON result = PyDict_GetItem(__pyx_d, name); if (result) { Py_INCREF(result); } else { #else result = PyObject_GetItem(__pyx_d, name); if (!result) { PyErr_Clear(); #endif result = __Pyx_GetBuiltinName(name); } return result; } static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { PyObject *r; if (!j) return NULL; r = PyObject_GetItem(o, j); Py_DECREF(j); return r; } static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, int wraparound, int boundscheck) { #if CYTHON_COMPILING_IN_CPYTHON if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o); if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) { PyObject *r = PyList_GET_ITEM(o, i); Py_INCREF(r); return r; } return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); #else return PySequence_GetItem(o, i); #endif } static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, int wraparound, int boundscheck) { #if CYTHON_COMPILING_IN_CPYTHON if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o); if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) { PyObject *r = PyTuple_GET_ITEM(o, i); Py_INCREF(r); return r; } return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); #else return PySequence_GetItem(o, i); #endif } static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, int wraparound, int boundscheck) { #if CYTHON_COMPILING_IN_CPYTHON if (is_list || PyList_CheckExact(o)) { Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) { PyObject *r = PyList_GET_ITEM(o, n); Py_INCREF(r); return r; } } else if (PyTuple_CheckExact(o)) { Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) { PyObject *r = PyTuple_GET_ITEM(o, n); Py_INCREF(r); return r; } } else { PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; if (likely(m && m->sq_item)) { if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { Py_ssize_t l = m->sq_length(o); if (likely(l >= 0)) { i += l; } else { if (PyErr_ExceptionMatches(PyExc_OverflowError)) PyErr_Clear(); else return NULL; } } return m->sq_item(o, i); } } #else if (is_list || PySequence_Check(o)) { return PySequence_GetItem(o, i); } #endif return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); } static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { #if CYTHON_COMPILING_IN_CPYTHON PyObject *tmp_type, *tmp_value, *tmp_tb; PyThreadState *tstate = PyThreadState_GET(); tmp_type = tstate->curexc_type; tmp_value = tstate->curexc_value; tmp_tb = tstate->curexc_traceback; tstate->curexc_type = type; tstate->curexc_value = value; tstate->curexc_traceback = tb; Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); #else PyErr_Restore(type, value, tb); #endif } static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { #if CYTHON_COMPILING_IN_CPYTHON PyThreadState *tstate = PyThreadState_GET(); *type = tstate->curexc_type; *value = tstate->curexc_value; *tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; #else PyErr_Fetch(type, value, tb); #endif } #if PY_MAJOR_VERSION < 3 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, CYTHON_UNUSED PyObject *cause) { Py_XINCREF(type); if (!value || value == Py_None) value = NULL; else Py_INCREF(value); if (!tb || tb == Py_None) tb = NULL; else { Py_INCREF(tb); if (!PyTraceBack_Check(tb)) { PyErr_SetString(PyExc_TypeError, "raise: arg 3 must be a traceback or None"); goto raise_error; } } #if PY_VERSION_HEX < 0x02050000 if (PyClass_Check(type)) { #else if (PyType_Check(type)) { #endif #if CYTHON_COMPILING_IN_PYPY if (!value) { Py_INCREF(Py_None); value = Py_None; } #endif PyErr_NormalizeException(&type, &value, &tb); } else { if (value) { PyErr_SetString(PyExc_TypeError, "instance exception may not have a separate value"); goto raise_error; } value = type; #if PY_VERSION_HEX < 0x02050000 if (PyInstance_Check(type)) { type = (PyObject*) ((PyInstanceObject*)type)->in_class; Py_INCREF(type); } else { type = 0; PyErr_SetString(PyExc_TypeError, "raise: exception must be an old-style class or instance"); goto raise_error; } #else type = (PyObject*) Py_TYPE(type); Py_INCREF(type); if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { PyErr_SetString(PyExc_TypeError, "raise: exception class must be a subclass of BaseException"); goto raise_error; } #endif } __Pyx_ErrRestore(type, value, tb); return; raise_error: Py_XDECREF(value); Py_XDECREF(type); Py_XDECREF(tb); return; } #else /* Python 3+ */ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { PyObject* owned_instance = NULL; if (tb == Py_None) { tb = 0; } else if (tb && !PyTraceBack_Check(tb)) { PyErr_SetString(PyExc_TypeError, "raise: arg 3 must be a traceback or None"); goto bad; } if (value == Py_None) value = 0; if (PyExceptionInstance_Check(type)) { if (value) { PyErr_SetString(PyExc_TypeError, "instance exception may not have a separate value"); goto bad; } value = type; type = (PyObject*) Py_TYPE(value); } else if (PyExceptionClass_Check(type)) { PyObject *args; if (!value) args = PyTuple_New(0); else if (PyTuple_Check(value)) { Py_INCREF(value); args = value; } else args = PyTuple_Pack(1, value); if (!args) goto bad; owned_instance = PyEval_CallObject(type, args); Py_DECREF(args); if (!owned_instance) goto bad; value = owned_instance; if (!PyExceptionInstance_Check(value)) { PyErr_Format(PyExc_TypeError, "calling %R should have returned an instance of " "BaseException, not %R", type, Py_TYPE(value)); goto bad; } } else { PyErr_SetString(PyExc_TypeError, "raise: exception class must be a subclass of BaseException"); goto bad; } #if PY_VERSION_HEX >= 0x03030000 if (cause) { #else if (cause && cause != Py_None) { #endif PyObject *fixed_cause; if (cause == Py_None) { fixed_cause = NULL; } else if (PyExceptionClass_Check(cause)) { fixed_cause = PyObject_CallObject(cause, NULL); if (fixed_cause == NULL) goto bad; } else if (PyExceptionInstance_Check(cause)) { fixed_cause = cause; Py_INCREF(fixed_cause); } else { PyErr_SetString(PyExc_TypeError, "exception causes must derive from " "BaseException"); goto bad; } PyException_SetCause(value, fixed_cause); } PyErr_SetObject(type, value); if (tb) { PyThreadState *tstate = PyThreadState_GET(); PyObject* tmp_tb = tstate->curexc_traceback; if (tb != tmp_tb) { Py_INCREF(tb); tstate->curexc_traceback = tb; Py_XDECREF(tmp_tb); } } bad: Py_XDECREF(owned_instance); return; } #endif static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { if (unlikely(!type)) { PyErr_Format(PyExc_SystemError, "Missing type object"); return 0; } if (likely(PyObject_TypeCheck(obj, type))) return 1; PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", Py_TYPE(obj)->tp_name, type->tp_name); return 0; } static CYTHON_INLINE int __Pyx_IsLittleEndian(void) { unsigned int n = 1; return *(unsigned char*)(&n) != 0; } static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, __Pyx_BufFmt_StackElem* stack, __Pyx_TypeInfo* type) { stack[0].field = &ctx->root; stack[0].parent_offset = 0; ctx->root.type = type; ctx->root.name = "buffer dtype"; ctx->root.offset = 0; ctx->head = stack; ctx->head->field = &ctx->root; ctx->fmt_offset = 0; ctx->head->parent_offset = 0; ctx->new_packmode = '@'; ctx->enc_packmode = '@'; ctx->new_count = 1; ctx->enc_count = 0; ctx->enc_type = 0; ctx->is_complex = 0; ctx->is_valid_array = 0; ctx->struct_alignment = 0; while (type->typegroup == 'S') { ++ctx->head; ctx->head->field = type->fields; ctx->head->parent_offset = 0; type = type->fields->type; } } static int __Pyx_BufFmt_ParseNumber(const char** ts) { int count; const char* t = *ts; if (*t < '0' || *t > '9') { return -1; } else { count = *t++ - '0'; while (*t >= '0' && *t < '9') { count *= 10; count += *t++ - '0'; } } *ts = t; return count; } static int __Pyx_BufFmt_ExpectNumber(const char **ts) { int number = __Pyx_BufFmt_ParseNumber(ts); if (number == -1) /* First char was not a digit */ PyErr_Format(PyExc_ValueError,\ "Does not understand character buffer dtype format string ('%c')", **ts); return number; } static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { PyErr_Format(PyExc_ValueError, "Unexpected format string character: '%c'", ch); } static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { switch (ch) { case 'c': return "'char'"; case 'b': return "'signed char'"; case 'B': return "'unsigned char'"; case 'h': return "'short'"; case 'H': return "'unsigned short'"; case 'i': return "'int'"; case 'I': return "'unsigned int'"; case 'l': return "'long'"; case 'L': return "'unsigned long'"; case 'q': return "'long long'"; case 'Q': return "'unsigned long long'"; case 'f': return (is_complex ? "'complex float'" : "'float'"); case 'd': return (is_complex ? "'complex double'" : "'double'"); case 'g': return (is_complex ? "'complex long double'" : "'long double'"); case 'T': return "a struct"; case 'O': return "Python object"; case 'P': return "a pointer"; case 's': case 'p': return "a string"; case 0: return "end"; default: return "unparseable format string"; } } static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { switch (ch) { case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; case 'h': case 'H': return 2; case 'i': case 'I': case 'l': case 'L': return 4; case 'q': case 'Q': return 8; case 'f': return (is_complex ? 8 : 4); case 'd': return (is_complex ? 16 : 8); case 'g': { PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); return 0; } case 'O': case 'P': return sizeof(void*); default: __Pyx_BufFmt_RaiseUnexpectedChar(ch); return 0; } } static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { switch (ch) { case 'c': case 'b': case 'B': case 's': case 'p': return 1; case 'h': case 'H': return sizeof(short); case 'i': case 'I': return sizeof(int); case 'l': case 'L': return sizeof(long); #ifdef HAVE_LONG_LONG case 'q': case 'Q': return sizeof(PY_LONG_LONG); #endif case 'f': return sizeof(float) * (is_complex ? 2 : 1); case 'd': return sizeof(double) * (is_complex ? 2 : 1); case 'g': return sizeof(long double) * (is_complex ? 2 : 1); case 'O': case 'P': return sizeof(void*); default: { __Pyx_BufFmt_RaiseUnexpectedChar(ch); return 0; } } } typedef struct { char c; short x; } __Pyx_st_short; typedef struct { char c; int x; } __Pyx_st_int; typedef struct { char c; long x; } __Pyx_st_long; typedef struct { char c; float x; } __Pyx_st_float; typedef struct { char c; double x; } __Pyx_st_double; typedef struct { char c; long double x; } __Pyx_st_longdouble; typedef struct { char c; void *x; } __Pyx_st_void_p; #ifdef HAVE_LONG_LONG typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; #endif static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) { switch (ch) { case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); #ifdef HAVE_LONG_LONG case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); #endif case 'f': return sizeof(__Pyx_st_float) - sizeof(float); case 'd': return sizeof(__Pyx_st_double) - sizeof(double); case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); default: __Pyx_BufFmt_RaiseUnexpectedChar(ch); return 0; } } /* These are for computing the padding at the end of the struct to align on the first member of the struct. This will probably the same as above, but we don't have any guarantees. */ typedef struct { short x; char c; } __Pyx_pad_short; typedef struct { int x; char c; } __Pyx_pad_int; typedef struct { long x; char c; } __Pyx_pad_long; typedef struct { float x; char c; } __Pyx_pad_float; typedef struct { double x; char c; } __Pyx_pad_double; typedef struct { long double x; char c; } __Pyx_pad_longdouble; typedef struct { void *x; char c; } __Pyx_pad_void_p; #ifdef HAVE_LONG_LONG typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; #endif static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) { switch (ch) { case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); #ifdef HAVE_LONG_LONG case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); #endif case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); default: __Pyx_BufFmt_RaiseUnexpectedChar(ch); return 0; } } static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { switch (ch) { case 'c': return 'H'; case 'b': case 'h': case 'i': case 'l': case 'q': case 's': case 'p': return 'I'; case 'B': case 'H': case 'I': case 'L': case 'Q': return 'U'; case 'f': case 'd': case 'g': return (is_complex ? 'C' : 'R'); case 'O': return 'O'; case 'P': return 'P'; default: { __Pyx_BufFmt_RaiseUnexpectedChar(ch); return 0; } } } static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { if (ctx->head == NULL || ctx->head->field == &ctx->root) { const char* expected; const char* quote; if (ctx->head == NULL) { expected = "end"; quote = ""; } else { expected = ctx->head->field->type->name; quote = "'"; } PyErr_Format(PyExc_ValueError, "Buffer dtype mismatch, expected %s%s%s but got %s", quote, expected, quote, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); } else { __Pyx_StructField* field = ctx->head->field; __Pyx_StructField* parent = (ctx->head - 1)->field; PyErr_Format(PyExc_ValueError, "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), parent->type->name, field->name); } } static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { char group; size_t size, offset, arraysize = 1; if (ctx->enc_type == 0) return 0; if (ctx->head->field->type->arraysize[0]) { int i, ndim = 0; if (ctx->enc_type == 's' || ctx->enc_type == 'p') { ctx->is_valid_array = ctx->head->field->type->ndim == 1; ndim = 1; if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { PyErr_Format(PyExc_ValueError, "Expected a dimension of size %zu, got %zu", ctx->head->field->type->arraysize[0], ctx->enc_count); return -1; } } if (!ctx->is_valid_array) { PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", ctx->head->field->type->ndim, ndim); return -1; } for (i = 0; i < ctx->head->field->type->ndim; i++) { arraysize *= ctx->head->field->type->arraysize[i]; } ctx->is_valid_array = 0; ctx->enc_count = 1; } group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); do { __Pyx_StructField* field = ctx->head->field; __Pyx_TypeInfo* type = field->type; if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); } else { size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); } if (ctx->enc_packmode == '@') { size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); size_t align_mod_offset; if (align_at == 0) return -1; align_mod_offset = ctx->fmt_offset % align_at; if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; if (ctx->struct_alignment == 0) ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, ctx->is_complex); } if (type->size != size || type->typegroup != group) { if (type->typegroup == 'C' && type->fields != NULL) { size_t parent_offset = ctx->head->parent_offset + field->offset; ++ctx->head; ctx->head->field = type->fields; ctx->head->parent_offset = parent_offset; continue; } if ((type->typegroup == 'H' || group == 'H') && type->size == size) { } else { __Pyx_BufFmt_RaiseExpected(ctx); return -1; } } offset = ctx->head->parent_offset + field->offset; if (ctx->fmt_offset != offset) { PyErr_Format(PyExc_ValueError, "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); return -1; } ctx->fmt_offset += size; if (arraysize) ctx->fmt_offset += (arraysize - 1) * size; --ctx->enc_count; /* Consume from buffer string */ while (1) { if (field == &ctx->root) { ctx->head = NULL; if (ctx->enc_count != 0) { __Pyx_BufFmt_RaiseExpected(ctx); return -1; } break; /* breaks both loops as ctx->enc_count == 0 */ } ctx->head->field = ++field; if (field->type == NULL) { --ctx->head; field = ctx->head->field; continue; } else if (field->type->typegroup == 'S') { size_t parent_offset = ctx->head->parent_offset + field->offset; if (field->type->fields->type == NULL) continue; /* empty struct */ field = field->type->fields; ++ctx->head; ctx->head->field = field; ctx->head->parent_offset = parent_offset; break; } else { break; } } } while (ctx->enc_count); ctx->enc_type = 0; ctx->is_complex = 0; return 0; } static CYTHON_INLINE PyObject * __pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) { const char *ts = *tsp; int i = 0, number; int ndim = ctx->head->field->type->ndim; ; ++ts; if (ctx->new_count != 1) { PyErr_SetString(PyExc_ValueError, "Cannot handle repeated arrays in format string"); return NULL; } if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; while (*ts && *ts != ')') { if (isspace(*ts)) continue; number = __Pyx_BufFmt_ExpectNumber(&ts); if (number == -1) return NULL; if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) return PyErr_Format(PyExc_ValueError, "Expected a dimension of size %zu, got %d", ctx->head->field->type->arraysize[i], number); if (*ts != ',' && *ts != ')') return PyErr_Format(PyExc_ValueError, "Expected a comma in format string, got '%c'", *ts); if (*ts == ',') ts++; i++; } if (i != ndim) return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", ctx->head->field->type->ndim, i); if (!*ts) { PyErr_SetString(PyExc_ValueError, "Unexpected end of format string, expected ')'"); return NULL; } ctx->is_valid_array = 1; ctx->new_count = 1; *tsp = ++ts; return Py_None; } static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { int got_Z = 0; while (1) { switch(*ts) { case 0: if (ctx->enc_type != 0 && ctx->head == NULL) { __Pyx_BufFmt_RaiseExpected(ctx); return NULL; } if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; if (ctx->head != NULL) { __Pyx_BufFmt_RaiseExpected(ctx); return NULL; } return ts; case ' ': case 10: case 13: ++ts; break; case '<': if (!__Pyx_IsLittleEndian()) { PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); return NULL; } ctx->new_packmode = '='; ++ts; break; case '>': case '!': if (__Pyx_IsLittleEndian()) { PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); return NULL; } ctx->new_packmode = '='; ++ts; break; case '=': case '@': case '^': ctx->new_packmode = *ts++; break; case 'T': /* substruct */ { const char* ts_after_sub; size_t i, struct_count = ctx->new_count; size_t struct_alignment = ctx->struct_alignment; ctx->new_count = 1; ++ts; if (*ts != '{') { PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); return NULL; } if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; ctx->enc_type = 0; /* Erase processed last struct element */ ctx->enc_count = 0; ctx->struct_alignment = 0; ++ts; ts_after_sub = ts; for (i = 0; i != struct_count; ++i) { ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); if (!ts_after_sub) return NULL; } ts = ts_after_sub; if (struct_alignment) ctx->struct_alignment = struct_alignment; } break; case '}': /* end of substruct; either repeat or move on */ { size_t alignment = ctx->struct_alignment; ++ts; if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; ctx->enc_type = 0; /* Erase processed last struct element */ if (alignment && ctx->fmt_offset % alignment) { ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); } } return ts; case 'x': if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; ctx->fmt_offset += ctx->new_count; ctx->new_count = 1; ctx->enc_count = 0; ctx->enc_type = 0; ctx->enc_packmode = ctx->new_packmode; ++ts; break; case 'Z': got_Z = 1; ++ts; if (*ts != 'f' && *ts != 'd' && *ts != 'g') { __Pyx_BufFmt_RaiseUnexpectedChar('Z'); return NULL; } /* fall through */ case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': case 'l': case 'L': case 'q': case 'Q': case 'f': case 'd': case 'g': case 'O': case 's': case 'p': if (ctx->enc_type == *ts && got_Z == ctx->is_complex && ctx->enc_packmode == ctx->new_packmode) { ctx->enc_count += ctx->new_count; } else { if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; ctx->enc_count = ctx->new_count; ctx->enc_packmode = ctx->new_packmode; ctx->enc_type = *ts; ctx->is_complex = got_Z; } ++ts; ctx->new_count = 1; got_Z = 0; break; case ':': ++ts; while(*ts != ':') ++ts; ++ts; break; case '(': if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL; break; default: { int number = __Pyx_BufFmt_ExpectNumber(&ts); if (number == -1) return NULL; ctx->new_count = (size_t)number; } } } } static CYTHON_INLINE void __Pyx_ZeroBuffer(Py_buffer* buf) { buf->buf = NULL; buf->obj = NULL; buf->strides = __Pyx_zeros; buf->shape = __Pyx_zeros; buf->suboffsets = __Pyx_minusones; } static CYTHON_INLINE int __Pyx_GetBufferAndValidate( Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack) { if (obj == Py_None || obj == NULL) { __Pyx_ZeroBuffer(buf); return 0; } buf->buf = NULL; if (__Pyx_GetBuffer(obj, buf, flags) == -1) goto fail; if (buf->ndim != nd) { PyErr_Format(PyExc_ValueError, "Buffer has wrong number of dimensions (expected %d, got %d)", nd, buf->ndim); goto fail; } if (!cast) { __Pyx_BufFmt_Context ctx; __Pyx_BufFmt_Init(&ctx, stack, dtype); if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; } if ((unsigned)buf->itemsize != dtype->size) { PyErr_Format(PyExc_ValueError, "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)", buf->itemsize, (buf->itemsize > 1) ? "s" : "", dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); goto fail; } if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; return 0; fail:; __Pyx_ZeroBuffer(buf); return -1; } static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { if (info->buf == NULL) return; if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; __Pyx_ReleaseBuffer(info); } static void __Pyx_RaiseBufferFallbackError(void) { PyErr_Format(PyExc_ValueError, "Buffer acquisition failed on assignment; and then reacquiring the old buffer failed too!"); } static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) { PyObject *local_type, *local_value, *local_tb; #if CYTHON_COMPILING_IN_CPYTHON PyObject *tmp_type, *tmp_value, *tmp_tb; PyThreadState *tstate = PyThreadState_GET(); local_type = tstate->curexc_type; local_value = tstate->curexc_value; local_tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; #else PyErr_Fetch(&local_type, &local_value, &local_tb); #endif PyErr_NormalizeException(&local_type, &local_value, &local_tb); #if CYTHON_COMPILING_IN_CPYTHON if (unlikely(tstate->curexc_type)) #else if (unlikely(PyErr_Occurred())) #endif goto bad; #if PY_MAJOR_VERSION >= 3 if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) goto bad; #endif Py_INCREF(local_type); Py_INCREF(local_value); Py_INCREF(local_tb); *type = local_type; *value = local_value; *tb = local_tb; #if CYTHON_COMPILING_IN_CPYTHON tmp_type = tstate->exc_type; tmp_value = tstate->exc_value; tmp_tb = tstate->exc_traceback; tstate->exc_type = local_type; tstate->exc_value = local_value; tstate->exc_traceback = local_tb; /* Make sure tstate is in a consistent state when we XDECREF these objects (DECREF may run arbitrary code). */ Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); #else PyErr_SetExcInfo(local_type, local_value, local_tb); #endif return 0; bad: *type = 0; *value = 0; *tb = 0; Py_XDECREF(local_type); Py_XDECREF(local_value); Py_XDECREF(local_tb); return -1; } static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno, CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename) { PyObject *old_exc, *old_val, *old_tb; PyObject *ctx; __Pyx_ErrFetch(&old_exc, &old_val, &old_tb); #if PY_MAJOR_VERSION < 3 ctx = PyString_FromString(name); #else ctx = PyUnicode_FromString(name); #endif __Pyx_ErrRestore(old_exc, old_val, old_tb); if (!ctx) { PyErr_WriteUnraisable(Py_None); } else { PyErr_WriteUnraisable(ctx); Py_DECREF(ctx); } } static void __Pyx_RaiseArgtupleInvalid( const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found) { Py_ssize_t num_expected; const char *more_or_less; if (num_found < num_min) { num_expected = num_min; more_or_less = "at least"; } else { num_expected = num_max; more_or_less = "at most"; } if (exact) { more_or_less = "exactly"; } PyErr_Format(PyExc_TypeError, "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)", func_name, more_or_less, num_expected, (num_expected == 1) ? "" : "s", num_found); } static void __Pyx_RaiseDoubleKeywordsError( const char* func_name, PyObject* kw_name) { PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION >= 3 "%s() got multiple values for keyword argument '%U'", func_name, kw_name); #else "%s() got multiple values for keyword argument '%s'", func_name, PyString_AsString(kw_name)); #endif } static int __Pyx_ParseOptionalKeywords( PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name) { PyObject *key = 0, *value = 0; Py_ssize_t pos = 0; PyObject*** name; PyObject*** first_kw_arg = argnames + num_pos_args; while (PyDict_Next(kwds, &pos, &key, &value)) { name = first_kw_arg; while (*name && (**name != key)) name++; if (*name) { values[name-argnames] = value; continue; } name = first_kw_arg; #if PY_MAJOR_VERSION < 3 if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { while (*name) { if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) && _PyString_Eq(**name, key)) { values[name-argnames] = value; break; } name++; } if (*name) continue; else { PyObject*** argname = argnames; while (argname != first_kw_arg) { if ((**argname == key) || ( (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) && _PyString_Eq(**argname, key))) { goto arg_passed_twice; } argname++; } } } else #endif if (likely(PyUnicode_Check(key))) { while (*name) { int cmp = (**name == key) ? 0 : #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : #endif PyUnicode_Compare(**name, key); if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; if (cmp == 0) { values[name-argnames] = value; break; } name++; } if (*name) continue; else { PyObject*** argname = argnames; while (argname != first_kw_arg) { int cmp = (**argname == key) ? 0 : #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : #endif PyUnicode_Compare(**argname, key); if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; if (cmp == 0) goto arg_passed_twice; argname++; } } } else goto invalid_keyword_type; if (kwds2) { if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; } else { goto invalid_keyword; } } return 0; arg_passed_twice: __Pyx_RaiseDoubleKeywordsError(function_name, key); goto bad; invalid_keyword_type: PyErr_Format(PyExc_TypeError, "%s() keywords must be strings", function_name); goto bad; invalid_keyword: PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION < 3 "%s() got an unexpected keyword argument '%s'", function_name, PyString_AsString(key)); #else "%s() got an unexpected keyword argument '%U'", function_name, key); #endif bad: return -1; } static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { PyErr_Format(PyExc_ValueError, "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); } static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { PyErr_Format(PyExc_ValueError, "need more than %" CYTHON_FORMAT_SSIZE_T "d value%s to unpack", index, (index == 1) ? "" : "s"); } static CYTHON_INLINE int __Pyx_IterFinish(void) { #if CYTHON_COMPILING_IN_CPYTHON PyThreadState *tstate = PyThreadState_GET(); PyObject* exc_type = tstate->curexc_type; if (unlikely(exc_type)) { if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) { PyObject *exc_value, *exc_tb; exc_value = tstate->curexc_value; exc_tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; Py_DECREF(exc_type); Py_XDECREF(exc_value); Py_XDECREF(exc_tb); return 0; } else { return -1; } } return 0; #else if (unlikely(PyErr_Occurred())) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { PyErr_Clear(); return 0; } else { return -1; } } return 0; #endif } static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { if (unlikely(retval)) { Py_DECREF(retval); __Pyx_RaiseTooManyValuesError(expected); return -1; } else { return __Pyx_IterFinish(); } return 0; } static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) { #if CYTHON_COMPILING_IN_CPYTHON PyMappingMethods* mp; #if PY_MAJOR_VERSION < 3 PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; if (likely(ms && ms->sq_slice)) { if (!has_cstart) { if (_py_start && (*_py_start != Py_None)) { cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; } else cstart = 0; } if (!has_cstop) { if (_py_stop && (*_py_stop != Py_None)) { cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; } else cstop = PY_SSIZE_T_MAX; } if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { Py_ssize_t l = ms->sq_length(obj); if (likely(l >= 0)) { if (cstop < 0) { cstop += l; if (cstop < 0) cstop = 0; } if (cstart < 0) { cstart += l; if (cstart < 0) cstart = 0; } } else { if (PyErr_ExceptionMatches(PyExc_OverflowError)) PyErr_Clear(); else goto bad; } } return ms->sq_slice(obj, cstart, cstop); } #endif mp = Py_TYPE(obj)->tp_as_mapping; if (likely(mp && mp->mp_subscript)) #endif { PyObject* result; PyObject *py_slice, *py_start, *py_stop; if (_py_slice) { py_slice = *_py_slice; } else { PyObject* owned_start = NULL; PyObject* owned_stop = NULL; if (_py_start) { py_start = *_py_start; } else { if (has_cstart) { owned_start = py_start = PyInt_FromSsize_t(cstart); if (unlikely(!py_start)) goto bad; } else py_start = Py_None; } if (_py_stop) { py_stop = *_py_stop; } else { if (has_cstop) { owned_stop = py_stop = PyInt_FromSsize_t(cstop); if (unlikely(!py_stop)) { Py_XDECREF(owned_start); goto bad; } } else py_stop = Py_None; } py_slice = PySlice_New(py_start, py_stop, Py_None); Py_XDECREF(owned_start); Py_XDECREF(owned_stop); if (unlikely(!py_slice)) goto bad; } #if CYTHON_COMPILING_IN_CPYTHON result = mp->mp_subscript(obj, py_slice); #else result = PyObject_GetItem(obj, py_slice); #endif if (!_py_slice) { Py_DECREF(py_slice); } return result; } PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name); bad: return NULL; } static void __Pyx_RaiseBufferIndexError(int axis) { PyErr_Format(PyExc_IndexError, "Out of bounds on buffer access (axis %d)", axis); } static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, const char *name, int exact) { if (!type) { PyErr_Format(PyExc_SystemError, "Missing type object"); return 0; } if (none_allowed && obj == Py_None) return 1; else if (exact) { if (Py_TYPE(obj) == type) return 1; } else { if (PyObject_TypeCheck(obj, type)) return 1; } PyErr_Format(PyExc_TypeError, "Argument '%s' has incorrect type (expected %s, got %s)", name, type->tp_name, Py_TYPE(obj)->tp_name); return 0; } static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ssize_t b) { Py_ssize_t q = a / b; Py_ssize_t r = a - q*b; q -= ((r != 0) & ((r ^ b) < 0)); return q; } static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) { int r; if (!j) return -1; r = PyObject_SetItem(o, j, v); Py_DECREF(j); return r; } static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list, int wraparound, int boundscheck) { #if CYTHON_COMPILING_IN_CPYTHON if (is_list || PyList_CheckExact(o)) { Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o)); if ((!boundscheck) || likely((n >= 0) & (n < PyList_GET_SIZE(o)))) { PyObject* old = PyList_GET_ITEM(o, n); Py_INCREF(v); PyList_SET_ITEM(o, n, v); Py_DECREF(old); return 1; } } else { PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; if (likely(m && m->sq_ass_item)) { if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { Py_ssize_t l = m->sq_length(o); if (likely(l >= 0)) { i += l; } else { if (PyErr_ExceptionMatches(PyExc_OverflowError)) PyErr_Clear(); else return -1; } } return m->sq_ass_item(o, i, v); } } #else #if CYTHON_COMPILING_IN_PYPY if (is_list || (PySequence_Check(o) && !PyDict_Check(o))) { #else if (is_list || PySequence_Check(o)) { #endif return PySequence_SetItem(o, i, v); } #endif return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v); } static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); } static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) { #if CYTHON_COMPILING_IN_CPYTHON PyThreadState *tstate = PyThreadState_GET(); *type = tstate->exc_type; *value = tstate->exc_value; *tb = tstate->exc_traceback; Py_XINCREF(*type); Py_XINCREF(*value); Py_XINCREF(*tb); #else PyErr_GetExcInfo(type, value, tb); #endif } static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) { #if CYTHON_COMPILING_IN_CPYTHON PyObject *tmp_type, *tmp_value, *tmp_tb; PyThreadState *tstate = PyThreadState_GET(); tmp_type = tstate->exc_type; tmp_value = tstate->exc_value; tmp_tb = tstate->exc_traceback; tstate->exc_type = type; tstate->exc_value = value; tstate->exc_traceback = tb; Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); #else PyErr_SetExcInfo(type, value, tb); #endif } #if CYTHON_CCOMPLEX #ifdef __cplusplus static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { return ::std::complex< float >(x, y); } #else static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { return x + y*(__pyx_t_float_complex)_Complex_I; } #endif #else static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { __pyx_t_float_complex z; z.real = x; z.imag = y; return z; } #endif #if CYTHON_CCOMPLEX #else static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) { return (a.real == b.real) && (a.imag == b.imag); } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; z.real = a.real + b.real; z.imag = a.imag + b.imag; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; z.real = a.real - b.real; z.imag = a.imag - b.imag; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; z.real = a.real * b.real - a.imag * b.imag; z.imag = a.real * b.imag + a.imag * b.real; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; float denom = b.real * b.real + b.imag * b.imag; z.real = (a.real * b.real + a.imag * b.imag) / denom; z.imag = (a.imag * b.real - a.real * b.imag) / denom; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) { __pyx_t_float_complex z; z.real = -a.real; z.imag = -a.imag; return z; } static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) { return (a.real == 0) && (a.imag == 0); } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) { __pyx_t_float_complex z; z.real = a.real; z.imag = -a.imag; return z; } #if 1 static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) { #if !defined(HAVE_HYPOT) || defined(_MSC_VER) return sqrtf(z.real*z.real + z.imag*z.imag); #else return hypotf(z.real, z.imag); #endif } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; float r, lnr, theta, z_r, z_theta; if (b.imag == 0 && b.real == (int)b.real) { if (b.real < 0) { float denom = a.real * a.real + a.imag * a.imag; a.real = a.real / denom; a.imag = -a.imag / denom; b.real = -b.real; } switch ((int)b.real) { case 0: z.real = 1; z.imag = 0; return z; case 1: return a; case 2: z = __Pyx_c_prodf(a, a); return __Pyx_c_prodf(a, a); case 3: z = __Pyx_c_prodf(a, a); return __Pyx_c_prodf(z, a); case 4: z = __Pyx_c_prodf(a, a); return __Pyx_c_prodf(z, z); } } if (a.imag == 0) { if (a.real == 0) { return a; } r = a.real; theta = 0; } else { r = __Pyx_c_absf(a); theta = atan2f(a.imag, a.real); } lnr = logf(r); z_r = expf(lnr * b.real - theta * b.imag); z_theta = theta * b.real + lnr * b.imag; z.real = z_r * cosf(z_theta); z.imag = z_r * sinf(z_theta); return z; } #endif #endif #if CYTHON_CCOMPLEX #ifdef __cplusplus static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { return ::std::complex< double >(x, y); } #else static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { return x + y*(__pyx_t_double_complex)_Complex_I; } #endif #else static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { __pyx_t_double_complex z; z.real = x; z.imag = y; return z; } #endif #if CYTHON_CCOMPLEX #else static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) { return (a.real == b.real) && (a.imag == b.imag); } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; z.real = a.real + b.real; z.imag = a.imag + b.imag; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; z.real = a.real - b.real; z.imag = a.imag - b.imag; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; z.real = a.real * b.real - a.imag * b.imag; z.imag = a.real * b.imag + a.imag * b.real; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; double denom = b.real * b.real + b.imag * b.imag; z.real = (a.real * b.real + a.imag * b.imag) / denom; z.imag = (a.imag * b.real - a.real * b.imag) / denom; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) { __pyx_t_double_complex z; z.real = -a.real; z.imag = -a.imag; return z; } static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) { return (a.real == 0) && (a.imag == 0); } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) { __pyx_t_double_complex z; z.real = a.real; z.imag = -a.imag; return z; } #if 1 static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) { #if !defined(HAVE_HYPOT) || defined(_MSC_VER) return sqrt(z.real*z.real + z.imag*z.imag); #else return hypot(z.real, z.imag); #endif } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; double r, lnr, theta, z_r, z_theta; if (b.imag == 0 && b.real == (int)b.real) { if (b.real < 0) { double denom = a.real * a.real + a.imag * a.imag; a.real = a.real / denom; a.imag = -a.imag / denom; b.real = -b.real; } switch ((int)b.real) { case 0: z.real = 1; z.imag = 0; return z; case 1: return a; case 2: z = __Pyx_c_prod(a, a); return __Pyx_c_prod(a, a); case 3: z = __Pyx_c_prod(a, a); return __Pyx_c_prod(z, a); case 4: z = __Pyx_c_prod(a, a); return __Pyx_c_prod(z, z); } } if (a.imag == 0) { if (a.real == 0) { return a; } r = a.real; theta = 0; } else { r = __Pyx_c_abs(a); theta = atan2(a.imag, a.real); } lnr = log(r); z_r = exp(lnr * b.real - theta * b.imag); z_theta = theta * b.real + lnr * b.imag; z.real = z_r * cos(z_theta); z.imag = z_r * sin(z_theta); return z; } #endif #endif #if PY_MAJOR_VERSION < 3 static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { #if PY_VERSION_HEX >= 0x02060000 if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); #endif if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pw_5numpy_7ndarray_1__getbuffer__(obj, view, flags); #if PY_VERSION_HEX < 0x02060000 if (obj->ob_type->tp_dict) { PyObject *getbuffer_cobj = PyObject_GetItem( obj->ob_type->tp_dict, __pyx_n_s____pyx_getbuffer); if (getbuffer_cobj) { getbufferproc func = (getbufferproc) PyCObject_AsVoidPtr(getbuffer_cobj); Py_DECREF(getbuffer_cobj); if (!func) goto fail; return func(obj, view, flags); } else { PyErr_Clear(); } } #endif PyErr_Format(PyExc_TypeError, "'%100s' does not have the buffer interface", Py_TYPE(obj)->tp_name); #if PY_VERSION_HEX < 0x02060000 fail: #endif return -1; } static void __Pyx_ReleaseBuffer(Py_buffer *view) { PyObject *obj = view->obj; if (!obj) return; #if PY_VERSION_HEX >= 0x02060000 if (PyObject_CheckBuffer(obj)) { PyBuffer_Release(view); return; } #endif if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) { __pyx_pw_5numpy_7ndarray_3__releasebuffer__(obj, view); return; } #if PY_VERSION_HEX < 0x02060000 if (obj->ob_type->tp_dict) { PyObject *releasebuffer_cobj = PyObject_GetItem( obj->ob_type->tp_dict, __pyx_n_s____pyx_releasebuffer); if (releasebuffer_cobj) { releasebufferproc func = (releasebufferproc) PyCObject_AsVoidPtr(releasebuffer_cobj); Py_DECREF(releasebuffer_cobj); if (!func) goto fail; func(obj, view); return; } else { PyErr_Clear(); } } #endif goto nofail; #if PY_VERSION_HEX < 0x02060000 fail: #endif PyErr_WriteUnraisable(obj); nofail: Py_DECREF(obj); view->obj = NULL; } #endif /* PY_MAJOR_VERSION < 3 */ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { PyObject *empty_list = 0; PyObject *module = 0; PyObject *global_dict = 0; PyObject *empty_dict = 0; PyObject *list; #if PY_VERSION_HEX < 0x03030000 PyObject *py_import; py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s____import__); if (!py_import) goto bad; #endif if (from_list) list = from_list; else { empty_list = PyList_New(0); if (!empty_list) goto bad; list = empty_list; } global_dict = PyModule_GetDict(__pyx_m); if (!global_dict) goto bad; empty_dict = PyDict_New(); if (!empty_dict) goto bad; #if PY_VERSION_HEX >= 0x02050000 { #if PY_MAJOR_VERSION >= 3 if (level == -1) { if (strchr(__Pyx_MODULE_NAME, '.')) { #if PY_VERSION_HEX < 0x03030000 PyObject *py_level = PyInt_FromLong(1); if (!py_level) goto bad; module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, py_level, NULL); Py_DECREF(py_level); #else module = PyImport_ImportModuleLevelObject( name, global_dict, empty_dict, list, 1); #endif if (!module) { if (!PyErr_ExceptionMatches(PyExc_ImportError)) goto bad; PyErr_Clear(); } } level = 0; /* try absolute import on failure */ } #endif if (!module) { #if PY_VERSION_HEX < 0x03030000 PyObject *py_level = PyInt_FromLong(level); if (!py_level) goto bad; module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, py_level, NULL); Py_DECREF(py_level); #else module = PyImport_ImportModuleLevelObject( name, global_dict, empty_dict, list, level); #endif } } #else if (level>0) { PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); goto bad; } module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, NULL); #endif bad: #if PY_VERSION_HEX < 0x03030000 Py_XDECREF(py_import); #endif Py_XDECREF(empty_list); Py_XDECREF(empty_dict); return module; } static CYTHON_INLINE int64_t __Pyx_PyInt_from_py_int64_t(PyObject* x) { const int64_t neg_one = (int64_t)-1, const_zero = (int64_t)0; const int is_unsigned = const_zero < neg_one; if (sizeof(int64_t) == sizeof(char)) { if (is_unsigned) return (int64_t)__Pyx_PyInt_AsUnsignedChar(x); else return (int64_t)__Pyx_PyInt_AsSignedChar(x); } else if (sizeof(int64_t) == sizeof(short)) { if (is_unsigned) return (int64_t)__Pyx_PyInt_AsUnsignedShort(x); else return (int64_t)__Pyx_PyInt_AsSignedShort(x); } else if (sizeof(int64_t) == sizeof(int)) { if (is_unsigned) return (int64_t)__Pyx_PyInt_AsUnsignedInt(x); else return (int64_t)__Pyx_PyInt_AsSignedInt(x); } else if (sizeof(int64_t) == sizeof(long)) { if (is_unsigned) return (int64_t)__Pyx_PyInt_AsUnsignedLong(x); else return (int64_t)__Pyx_PyInt_AsSignedLong(x); } else if (sizeof(int64_t) == sizeof(PY_LONG_LONG)) { if (is_unsigned) return (int64_t)__Pyx_PyInt_AsUnsignedLongLong(x); else return (int64_t)__Pyx_PyInt_AsSignedLongLong(x); } else { #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) PyErr_SetString(PyExc_RuntimeError, "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); #else int64_t val; PyObject *v = __Pyx_PyNumber_Int(x); #if PY_MAJOR_VERSION < 3 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } #endif if (likely(v)) { int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; int ret = _PyLong_AsByteArray((PyLongObject *)v, bytes, sizeof(val), is_little, !is_unsigned); Py_DECREF(v); if (likely(!ret)) return val; } #endif return (int64_t)-1; } } static CYTHON_INLINE Integer __Pyx_PyInt_from_py_Integer(PyObject* x) { const Integer neg_one = (Integer)-1, const_zero = (Integer)0; const int is_unsigned = const_zero < neg_one; if (sizeof(Integer) == sizeof(char)) { if (is_unsigned) return (Integer)__Pyx_PyInt_AsUnsignedChar(x); else return (Integer)__Pyx_PyInt_AsSignedChar(x); } else if (sizeof(Integer) == sizeof(short)) { if (is_unsigned) return (Integer)__Pyx_PyInt_AsUnsignedShort(x); else return (Integer)__Pyx_PyInt_AsSignedShort(x); } else if (sizeof(Integer) == sizeof(int)) { if (is_unsigned) return (Integer)__Pyx_PyInt_AsUnsignedInt(x); else return (Integer)__Pyx_PyInt_AsSignedInt(x); } else if (sizeof(Integer) == sizeof(long)) { if (is_unsigned) return (Integer)__Pyx_PyInt_AsUnsignedLong(x); else return (Integer)__Pyx_PyInt_AsSignedLong(x); } else if (sizeof(Integer) == sizeof(PY_LONG_LONG)) { if (is_unsigned) return (Integer)__Pyx_PyInt_AsUnsignedLongLong(x); else return (Integer)__Pyx_PyInt_AsSignedLongLong(x); } else { #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) PyErr_SetString(PyExc_RuntimeError, "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); #else Integer val; PyObject *v = __Pyx_PyNumber_Int(x); #if PY_MAJOR_VERSION < 3 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } #endif if (likely(v)) { int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; int ret = _PyLong_AsByteArray((PyLongObject *)v, bytes, sizeof(val), is_little, !is_unsigned); Py_DECREF(v); if (likely(!ret)) return val; } #endif return (Integer)-1; } } static __pyx_t_float_complex __Pyx_PyComplex_As___pyx_t_float_complex(PyObject* o) { Py_complex cval; #if CYTHON_COMPILING_IN_CPYTHON if (PyComplex_CheckExact(o)) cval = ((PyComplexObject *)o)->cval; else #endif cval = PyComplex_AsCComplex(o); return __pyx_t_float_complex_from_parts( (float)cval.real, (float)cval.imag); } static __pyx_t_double_complex __Pyx_PyComplex_As___pyx_t_double_complex(PyObject* o) { Py_complex cval; #if CYTHON_COMPILING_IN_CPYTHON if (PyComplex_CheckExact(o)) cval = ((PyComplexObject *)o)->cval; else #endif cval = PyComplex_AsCComplex(o); return __pyx_t_double_complex_from_parts( (double)cval.real, (double)cval.imag); } static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_Py_intptr_t(Py_intptr_t val) { const Py_intptr_t neg_one = (Py_intptr_t)-1, const_zero = (Py_intptr_t)0; const int is_unsigned = const_zero < neg_one; if ((sizeof(Py_intptr_t) == sizeof(char)) || (sizeof(Py_intptr_t) == sizeof(short))) { return PyInt_FromLong((long)val); } else if ((sizeof(Py_intptr_t) == sizeof(int)) || (sizeof(Py_intptr_t) == sizeof(long))) { if (is_unsigned) return PyLong_FromUnsignedLong((unsigned long)val); else return PyInt_FromLong((long)val); } else if (sizeof(Py_intptr_t) == sizeof(PY_LONG_LONG)) { if (is_unsigned) return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val); else return PyLong_FromLongLong((PY_LONG_LONG)val); } else { int one = 1; int little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; return _PyLong_FromByteArray(bytes, sizeof(Py_intptr_t), little, !is_unsigned); } } static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_Integer(Integer val) { const Integer neg_one = (Integer)-1, const_zero = (Integer)0; const int is_unsigned = const_zero < neg_one; if ((sizeof(Integer) == sizeof(char)) || (sizeof(Integer) == sizeof(short))) { return PyInt_FromLong((long)val); } else if ((sizeof(Integer) == sizeof(int)) || (sizeof(Integer) == sizeof(long))) { if (is_unsigned) return PyLong_FromUnsignedLong((unsigned long)val); else return PyInt_FromLong((long)val); } else if (sizeof(Integer) == sizeof(PY_LONG_LONG)) { if (is_unsigned) return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val); else return PyLong_FromLongLong((PY_LONG_LONG)val); } else { int one = 1; int little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; return _PyLong_FromByteArray(bytes, sizeof(Integer), little, !is_unsigned); } } static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_npy_int64(npy_int64 val) { const npy_int64 neg_one = (npy_int64)-1, const_zero = (npy_int64)0; const int is_unsigned = const_zero < neg_one; if ((sizeof(npy_int64) == sizeof(char)) || (sizeof(npy_int64) == sizeof(short))) { return PyInt_FromLong((long)val); } else if ((sizeof(npy_int64) == sizeof(int)) || (sizeof(npy_int64) == sizeof(long))) { if (is_unsigned) return PyLong_FromUnsignedLong((unsigned long)val); else return PyInt_FromLong((long)val); } else if (sizeof(npy_int64) == sizeof(PY_LONG_LONG)) { if (is_unsigned) return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val); else return PyLong_FromLongLong((PY_LONG_LONG)val); } else { int one = 1; int little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; return _PyLong_FromByteArray(bytes, sizeof(npy_int64), little, !is_unsigned); } } static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_int64_t(int64_t val) { const int64_t neg_one = (int64_t)-1, const_zero = (int64_t)0; const int is_unsigned = const_zero < neg_one; if ((sizeof(int64_t) == sizeof(char)) || (sizeof(int64_t) == sizeof(short))) { return PyInt_FromLong((long)val); } else if ((sizeof(int64_t) == sizeof(int)) || (sizeof(int64_t) == sizeof(long))) { if (is_unsigned) return PyLong_FromUnsignedLong((unsigned long)val); else return PyInt_FromLong((long)val); } else if (sizeof(int64_t) == sizeof(PY_LONG_LONG)) { if (is_unsigned) return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val); else return PyLong_FromLongLong((PY_LONG_LONG)val); } else { int one = 1; int little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; return _PyLong_FromByteArray(bytes, sizeof(int64_t), little, !is_unsigned); } } static PyObject* __pyx_convert__to_py_SingleComplex(SingleComplex s) { PyObject* res; PyObject* member; res = PyDict_New(); if (res == NULL) return NULL; member = PyFloat_FromDouble(s.real); if (member == NULL) goto bad; if (PyDict_SetItem(res, __pyx_n_s__real, member) < 0) goto bad; Py_DECREF(member); member = PyFloat_FromDouble(s.imag); if (member == NULL) goto bad; if (PyDict_SetItem(res, __pyx_n_s__imag, member) < 0) goto bad; Py_DECREF(member); return res; bad: Py_XDECREF(member); Py_DECREF(res); return NULL; } static PyObject* __pyx_convert__to_py_DoubleComplex(DoubleComplex s) { PyObject* res; PyObject* member; res = PyDict_New(); if (res == NULL) return NULL; member = PyFloat_FromDouble(s.real); if (member == NULL) goto bad; if (PyDict_SetItem(res, __pyx_n_s__real, member) < 0) goto bad; Py_DECREF(member); member = PyFloat_FromDouble(s.imag); if (member == NULL) goto bad; if (PyDict_SetItem(res, __pyx_n_s__imag, member) < 0) goto bad; Py_DECREF(member); return res; bad: Py_XDECREF(member); Py_DECREF(res); return NULL; } static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) { const unsigned char neg_one = (unsigned char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned char" : "value too large to convert to unsigned char"); } return (unsigned char)-1; } return (unsigned char)val; } return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) { const unsigned short neg_one = (unsigned short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned short" : "value too large to convert to unsigned short"); } return (unsigned short)-1; } return (unsigned short)val; } return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) { const unsigned int neg_one = (unsigned int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned int" : "value too large to convert to unsigned int"); } return (unsigned int)-1; } return (unsigned int)val; } return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) { const char neg_one = (char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to char" : "value too large to convert to char"); } return (char)-1; } return (char)val; } return (char)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) { const short neg_one = (short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to short" : "value too large to convert to short"); } return (short)-1; } return (short)val; } return (short)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) { const int neg_one = (int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to int" : "value too large to convert to int"); } return (int)-1; } return (int)val; } return (int)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) { const signed char neg_one = (signed char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed char" : "value too large to convert to signed char"); } return (signed char)-1; } return (signed char)val; } return (signed char)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) { const signed short neg_one = (signed short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed short" : "value too large to convert to signed short"); } return (signed short)-1; } return (signed short)val; } return (signed short)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) { const signed int neg_one = (signed int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed int" : "value too large to convert to signed int"); } return (signed int)-1; } return (signed int)val; } return (signed int)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) { const int neg_one = (int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to int" : "value too large to convert to int"); } return (int)-1; } return (int)val; } return (int)__Pyx_PyInt_AsLong(x); } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) { const unsigned long neg_one = (unsigned long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned long"); return (unsigned long)-1; } return (unsigned long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (unsigned long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned long"); return (unsigned long)-1; } return (unsigned long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(unsigned long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(unsigned long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (unsigned long)PyLong_AsLong(x); } } else { unsigned long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (unsigned long)-1; val = __Pyx_PyInt_AsUnsignedLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) { const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned PY_LONG_LONG"); return (unsigned PY_LONG_LONG)-1; } return (unsigned PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned PY_LONG_LONG"); return (unsigned PY_LONG_LONG)-1; } return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x); } } else { unsigned PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (unsigned PY_LONG_LONG)-1; val = __Pyx_PyInt_AsUnsignedLongLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) { const long neg_one = (long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to long"); return (long)-1; } return (long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to long"); return (long)-1; } return (long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (long)PyLong_AsLong(x); } } else { long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (long)-1; val = __Pyx_PyInt_AsLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) { const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to PY_LONG_LONG"); return (PY_LONG_LONG)-1; } return (PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to PY_LONG_LONG"); return (PY_LONG_LONG)-1; } return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (PY_LONG_LONG)PyLong_AsLongLong(x); } } else { PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (PY_LONG_LONG)-1; val = __Pyx_PyInt_AsLongLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) { const signed long neg_one = (signed long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed long"); return (signed long)-1; } return (signed long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (signed long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed long"); return (signed long)-1; } return (signed long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(signed long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(signed long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (signed long)PyLong_AsLong(x); } } else { signed long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (signed long)-1; val = __Pyx_PyInt_AsSignedLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) { const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed PY_LONG_LONG"); return (signed PY_LONG_LONG)-1; } return (signed PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed PY_LONG_LONG"); return (signed PY_LONG_LONG)-1; } return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (signed PY_LONG_LONG)PyLong_AsLongLong(x); } } else { signed PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (signed PY_LONG_LONG)-1; val = __Pyx_PyInt_AsSignedLongLong(tmp); Py_DECREF(tmp); return val; } } static int __Pyx_check_binary_version(void) { char ctversion[4], rtversion[4]; PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { char message[200]; PyOS_snprintf(message, sizeof(message), "compiletime version %s of module '%.100s' " "does not match runtime version %s", ctversion, __Pyx_MODULE_NAME, rtversion); #if PY_VERSION_HEX < 0x02050000 return PyErr_Warn(NULL, message); #else return PyErr_WarnEx(NULL, message, 1); #endif } return 0; } #ifndef __PYX_HAVE_RT_ImportModule #define __PYX_HAVE_RT_ImportModule static PyObject *__Pyx_ImportModule(const char *name) { PyObject *py_name = 0; PyObject *py_module = 0; py_name = __Pyx_PyIdentifier_FromString(name); if (!py_name) goto bad; py_module = PyImport_Import(py_name); Py_DECREF(py_name); return py_module; bad: Py_XDECREF(py_name); return 0; } #endif #ifndef __PYX_HAVE_RT_ImportType #define __PYX_HAVE_RT_ImportType static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict) { PyObject *py_module = 0; PyObject *result = 0; PyObject *py_name = 0; char warning[200]; Py_ssize_t basicsize; #ifdef Py_LIMITED_API PyObject *py_basicsize; #endif py_module = __Pyx_ImportModule(module_name); if (!py_module) goto bad; py_name = __Pyx_PyIdentifier_FromString(class_name); if (!py_name) goto bad; result = PyObject_GetAttr(py_module, py_name); Py_DECREF(py_name); py_name = 0; Py_DECREF(py_module); py_module = 0; if (!result) goto bad; if (!PyType_Check(result)) { PyErr_Format(PyExc_TypeError, "%s.%s is not a type object", module_name, class_name); goto bad; } #ifndef Py_LIMITED_API basicsize = ((PyTypeObject *)result)->tp_basicsize; #else py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); if (!py_basicsize) goto bad; basicsize = PyLong_AsSsize_t(py_basicsize); Py_DECREF(py_basicsize); py_basicsize = 0; if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) goto bad; #endif if (!strict && (size_t)basicsize > size) { PyOS_snprintf(warning, sizeof(warning), "%s.%s size changed, may indicate binary incompatibility", module_name, class_name); #if PY_VERSION_HEX < 0x02050000 if (PyErr_Warn(NULL, warning) < 0) goto bad; #else if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; #endif } else if ((size_t)basicsize != size) { PyErr_Format(PyExc_ValueError, "%s.%s has the wrong size, try recompiling", module_name, class_name); goto bad; } return (PyTypeObject *)result; bad: Py_XDECREF(py_module); Py_XDECREF(result); return NULL; } #endif static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { int start = 0, mid = 0, end = count - 1; if (end >= 0 && code_line > entries[end].code_line) { return count; } while (start < end) { mid = (start + end) / 2; if (code_line < entries[mid].code_line) { end = mid; } else if (code_line > entries[mid].code_line) { start = mid + 1; } else { return mid; } } if (code_line <= entries[mid].code_line) { return mid; } else { return mid + 1; } } static PyCodeObject *__pyx_find_code_object(int code_line) { PyCodeObject* code_object; int pos; if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { return NULL; } pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { return NULL; } code_object = __pyx_code_cache.entries[pos].code_object; Py_INCREF(code_object); return code_object; } static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { int pos, i; __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; if (unlikely(!code_line)) { return; } if (unlikely(!entries)) { entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); if (likely(entries)) { __pyx_code_cache.entries = entries; __pyx_code_cache.max_count = 64; __pyx_code_cache.count = 1; entries[0].code_line = code_line; entries[0].code_object = code_object; Py_INCREF(code_object); } return; } pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { PyCodeObject* tmp = entries[pos].code_object; entries[pos].code_object = code_object; Py_DECREF(tmp); return; } if (__pyx_code_cache.count == __pyx_code_cache.max_count) { int new_max = __pyx_code_cache.max_count + 64; entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); if (unlikely(!entries)) { return; } __pyx_code_cache.entries = entries; __pyx_code_cache.max_count = new_max; } for (i=__pyx_code_cache.count; i>pos; i--) { entries[i] = entries[i-1]; } entries[pos].code_line = code_line; entries[pos].code_object = code_object; __pyx_code_cache.count++; Py_INCREF(code_object); } #include "compile.h" #include "frameobject.h" #include "traceback.h" static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( const char *funcname, int c_line, int py_line, const char *filename) { PyCodeObject *py_code = 0; PyObject *py_srcfile = 0; PyObject *py_funcname = 0; #if PY_MAJOR_VERSION < 3 py_srcfile = PyString_FromString(filename); #else py_srcfile = PyUnicode_FromString(filename); #endif if (!py_srcfile) goto bad; if (c_line) { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); #else py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); #endif } else { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromString(funcname); #else py_funcname = PyUnicode_FromString(funcname); #endif } if (!py_funcname) goto bad; py_code = __Pyx_PyCode_New( 0, /*int argcount,*/ 0, /*int kwonlyargcount,*/ 0, /*int nlocals,*/ 0, /*int stacksize,*/ 0, /*int flags,*/ __pyx_empty_bytes, /*PyObject *code,*/ __pyx_empty_tuple, /*PyObject *consts,*/ __pyx_empty_tuple, /*PyObject *names,*/ __pyx_empty_tuple, /*PyObject *varnames,*/ __pyx_empty_tuple, /*PyObject *freevars,*/ __pyx_empty_tuple, /*PyObject *cellvars,*/ py_srcfile, /*PyObject *filename,*/ py_funcname, /*PyObject *name,*/ py_line, /*int firstlineno,*/ __pyx_empty_bytes /*PyObject *lnotab*/ ); Py_DECREF(py_srcfile); Py_DECREF(py_funcname); return py_code; bad: Py_XDECREF(py_srcfile); Py_XDECREF(py_funcname); return NULL; } static void __Pyx_AddTraceback(const char *funcname, int c_line, int py_line, const char *filename) { PyCodeObject *py_code = 0; PyObject *py_globals = 0; PyFrameObject *py_frame = 0; py_code = __pyx_find_code_object(c_line ? c_line : py_line); if (!py_code) { py_code = __Pyx_CreateCodeObjectForTraceback( funcname, c_line, py_line, filename); if (!py_code) goto bad; __pyx_insert_code_object(c_line ? c_line : py_line, py_code); } py_globals = PyModule_GetDict(__pyx_m); if (!py_globals) goto bad; py_frame = PyFrame_New( PyThreadState_GET(), /*PyThreadState *tstate,*/ py_code, /*PyCodeObject *code,*/ py_globals, /*PyObject *globals,*/ 0 /*PyObject *locals*/ ); if (!py_frame) goto bad; py_frame->f_lineno = py_line; PyTraceBack_Here(py_frame); bad: Py_XDECREF(py_code); Py_XDECREF(py_frame); } static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { while (t->p) { #if PY_MAJOR_VERSION < 3 if (t->is_unicode) { *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); } else if (t->intern) { *t->p = PyString_InternFromString(t->s); } else { *t->p = PyString_FromStringAndSize(t->s, t->n - 1); } #else /* Python 3+ has unicode identifiers */ if (t->is_unicode | t->is_str) { if (t->intern) { *t->p = PyUnicode_InternFromString(t->s); } else if (t->encoding) { *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); } else { *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); } } else { *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); } #endif if (!*t->p) return -1; ++t; } return 0; } static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); } static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { Py_ssize_t ignore; return __Pyx_PyObject_AsStringAndSize(o, &ignore); } static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT if ( #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII __Pyx_sys_getdefaultencoding_not_ascii && #endif PyUnicode_Check(o)) { #if PY_VERSION_HEX < 0x03030000 char* defenc_c; PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); if (!defenc) return NULL; defenc_c = PyBytes_AS_STRING(defenc); #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII { char* end = defenc_c + PyBytes_GET_SIZE(defenc); char* c; for (c = defenc_c; c < end; c++) { if ((unsigned char) (*c) >= 128) { PyUnicode_AsASCIIString(o); return NULL; } } } #endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ *length = PyBytes_GET_SIZE(defenc); return defenc_c; #else /* PY_VERSION_HEX < 0x03030000 */ if (PyUnicode_READY(o) == -1) return NULL; #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII if (PyUnicode_IS_ASCII(o)) { *length = PyUnicode_GET_DATA_SIZE(o); return PyUnicode_AsUTF8(o); } else { PyUnicode_AsASCIIString(o); return NULL; } #else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ return PyUnicode_AsUTF8AndSize(o, length); #endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ #endif /* PY_VERSION_HEX < 0x03030000 */ } else #endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ { char* result; int r = PyBytes_AsStringAndSize(o, &result, length); if (r < 0) { return NULL; } else { return result; } } } static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { int is_true = x == Py_True; if (is_true | (x == Py_False) | (x == Py_None)) return is_true; else return PyObject_IsTrue(x); } static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { PyNumberMethods *m; const char *name = NULL; PyObject *res = NULL; #if PY_MAJOR_VERSION < 3 if (PyInt_Check(x) || PyLong_Check(x)) #else if (PyLong_Check(x)) #endif return Py_INCREF(x), x; m = Py_TYPE(x)->tp_as_number; #if PY_MAJOR_VERSION < 3 if (m && m->nb_int) { name = "int"; res = PyNumber_Int(x); } else if (m && m->nb_long) { name = "long"; res = PyNumber_Long(x); } #else if (m && m->nb_int) { name = "int"; res = PyNumber_Long(x); } #endif if (res) { #if PY_MAJOR_VERSION < 3 if (!PyInt_Check(res) && !PyLong_Check(res)) { #else if (!PyLong_Check(res)) { #endif PyErr_Format(PyExc_TypeError, "__%s__ returned non-%s (type %.200s)", name, name, Py_TYPE(res)->tp_name); Py_DECREF(res); return NULL; } } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_TypeError, "an integer is required"); } return res; } static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { Py_ssize_t ival; PyObject* x = PyNumber_Index(b); if (!x) return -1; ival = PyInt_AsSsize_t(x); Py_DECREF(x); return ival; } static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { #if PY_VERSION_HEX < 0x02050000 if (ival <= LONG_MAX) return PyInt_FromLong((long)ival); else { unsigned char *bytes = (unsigned char *) &ival; int one = 1; int little = (int)*(unsigned char*)&one; return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); } #else return PyInt_FromSize_t(ival); #endif } static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) { unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x); if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) { if ((val != (unsigned PY_LONG_LONG)-1) || !PyErr_Occurred()) PyErr_SetString(PyExc_OverflowError, "value too large to convert to size_t"); return (size_t)-1; } return (size_t)val; } #endif /* Py_PYTHON_H */ ga-5-3/python/ga4py/ga.pyx0000640005473000001440000045532512006014214014276 0ustar d3n000users#cython: embedsignature=True """The Global Arrays (GA) Python interface. This module exports the GA C API, with a few enhancements. The notable exceptions include supporting Pythonic ranges. The ranges here are half-open e.g. [0,n) instead of in the C API where they are closed e.g. [0,n]. This follows the Python convention. """ # keep the ga functions alphabetical since this is going to be a huge file! from libc.stdlib cimport malloc,free from gah cimport * import numpy as np cimport numpy as np from cpython.ref cimport Py_INCREF from cpython.ref cimport PyTypeObject import __builtin__ DEF EXCLUSIVE = 0 np.import_array() cdef extern from "numpy/arrayobject.h": object PyArray_NewFromDescr(PyTypeObject* subtype, np.dtype descr, int nd, np.npy_intp * dims, np.npy_intp * strides, void * data, int flags, object obj) cdef bint _initialized = False TYPE_BASE = 1000 C_CHAR = (TYPE_BASE + 0) C_INT = (TYPE_BASE + 1) C_LONG = (TYPE_BASE + 2) C_FLOAT = (TYPE_BASE + 3) C_DBL = (TYPE_BASE + 4) C_LDBL = (TYPE_BASE + 5) C_SCPL = (TYPE_BASE + 6) C_DCPL = (TYPE_BASE + 7) C_LDCPL = (TYPE_BASE + 8) F_BYTE = (TYPE_BASE + 9) F_INT = (TYPE_BASE + 10) F_LOG = (TYPE_BASE + 11) F_REAL = (TYPE_BASE + 12) F_DBL = (TYPE_BASE + 13) F_SCPL = (TYPE_BASE + 14) F_DCPL = (TYPE_BASE + 15) C_LONGLONG = (TYPE_BASE + 16) WORLD_PROC_GROUP = -1 _to_dtype = { C_CHAR: np.dtype(np.int8), C_INT: np.dtype(np.int32), C_LONG: np.dtype(np.int64), C_LONGLONG: np.dtype(np.int64), C_FLOAT: np.dtype(np.float32), C_DBL: np.dtype(np.float64), C_SCPL: np.dtype(np.complex64), C_DCPL: np.dtype(np.complex128), } # numpy doesn't always have these types depending on the system cdef bint float128_in_np = ('float128' in dir(np)) cdef bint complex256_in_np = ('complex256' in dir(np)) if float128_in_np: _to_dtype[C_LDBL] = np.dtype(np.float128) if complex256_in_np: _to_dtype[C_LDCPL] = np.dtype(np.complex256) ############################################################################# # utility functions ############################################################################# def dtype(int gatype): """Converts the given GA type to a numpy dtype.""" if gatype in _to_dtype: return _to_dtype[gatype] raise ValueError, "%d was not a recognized GA type" % gatype def inquire_dtype(int g_a): """Returns the numpy dtype of the given GA.""" gatype = inquire_type(g_a) return dtype(gatype) cdef inline void* _gapy_malloc(size_t bytes, int align, char *name): """Wrapper around C stdlib malloc().""" return malloc(bytes) cdef inline void _gapy_free(void *ptr): """Wrapper around C stdlib free().""" free(ptr) cdef inline np.ndarray[np.int32_t, ndim=1] _inta32(array_like): """Converts an integer array-like to an ndarray of 32bit integers. Functions which take a dimension shape or subscript can use this to convert what the user passes to a numpy.ndarray using numpy.asarray. As a convenience, single values can be passed as well. :Parameters: array_like : integer array-like :returns: The converted array_like to an ndarray. """ cdef np.ndarray[np.int32_t, ndim=1] array_like_nd try: array_like_nd = np.asarray(array_like, dtype=np.int32) except ValueError: # try again in case array_like is a single value array_like_nd = np.asarray([array_like], dtype=np.int32) return array_like_nd cdef inline np.ndarray[np.int64_t, ndim=1] _inta64(array_like): """Converts an integer array-like to an ndarray of 64bit integers. Functions which take a dimension shape or subscript can use this to convert what the user passes to a numpy.ndarray using numpy.asarray. As a convenience, single values can be passed as well. :Parameters: array_like : integer array-like :returns: The converted array_like to an ndarray. """ cdef np.ndarray[np.int64_t, ndim=1] array_like_nd try: array_like_nd = np.asarray(array_like, dtype=np.int64) except ValueError: # try again in case array_like is a single value array_like_nd = np.asarray([array_like], dtype=np.int64) return array_like_nd cdef inline _lohi(int g_a, lo, hi): """Converts and/or prepares a lo/hi combination. Functions which take a patch specification can use this to convert the given lo and/or hi into ndarrays using numpy.asarray. * If neither lo nor hi is given, lo is replaced with an array of zeros and hi is replaced with the last index in each dimension (i.e. the shape). * If only lo is given, hi is replaced with lo. In other words, this is a single value. * It is an error to specify hi without lo. :Parameters: g_a : int the array handle lo : 1D array-like lower bounds of a slice hi : 1D array-like upper bounds of a slice :returns: The converted lo and hi ndarrays. """ cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd cdef int ndim = GA_Ndim(g_a) if lo is None and hi is None: lo_nd = np.zeros((ndim), dtype=np.int64) hi_nd = inquire_dims(g_a) elif lo is not None and hi is None: lo_nd = _inta64(lo) hi_nd = lo_nd+1 elif lo is None and hi is not None: raise ValueError, 'lo cannot be None if hi is None' else: # lo and hi are not None lo_nd = _inta64(lo) hi_nd = _inta64(hi) if len(lo_nd) != ndim: raise ValueError, 'len(lo_nd) != ndim; len(%s) != %s' % (lo_nd,ndim) if len(hi_nd) != ndim: raise ValueError, 'len(hi_nd) != ndim; len(%s) != %s' % (hi_nd,ndim) # We must make a copy of hi_nd. If user passes in an ndarray, the # following "prep" operation will change the user's 'hi'. #hi_nd -= 1 # <----- don't do that! hi_nd = hi_nd-1 # prep hi for GA's inclusive indexing return lo_nd,hi_nd cdef void* _convert_multiplier(int gtype, value, int *iv, long *lv, long long *llv, float *fv, double *dv, long double *ldv, SingleComplex *fcv, DoubleComplex *dcv): """Returns the address of an appropriately converted value. Functions which take an alpha/beta/value need to have the value appropriately converted from the (possible) Python type to a C type. Often the GA function takes a void* in this case, so the address of the converted value is returned. """ cdef float complex pfcv=1.0 cdef double complex pdcv=1.0 if value is None: raise ValueError, "cannot convert None" if gtype == C_INT: iv[0] = value return iv elif gtype == C_LONG: lv[0] = value return lv elif gtype == C_LONGLONG: llv[0] = value return llv elif gtype == C_FLOAT: fv[0] = value return fv elif gtype == C_DBL: dv[0] = value return dv elif gtype == C_LDBL and float128_in_np: ldv[0] = value return ldv elif gtype == C_SCPL: pfcv = value fcv[0].real = pfcv.real fcv[0].imag = pfcv.imag return fcv elif gtype == C_DCPL: pdcv = value dcv[0].real = pdcv.real dcv[0].imag = pdcv.imag return dcv else: raise TypeError, "type of g_a not recognized" def zip(lo, hi): """Transforms a GA lo,hi combination into a slice list.""" return [slice(l,h) for l,h in __builtin__.zip(lo,hi)] ############################################################################# # GA API ############################################################################# def abs_value(int g_a, lo=None, hi=None): """Take element-wise absolute value of the array or patch. This is a collective operation. :Parameters: g_a : int the array handle lo : 1D array-like lower bound patch coordinates, inclusive hi : 1D array-like higher bound patch coordinates, exclusive """ cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd if lo is None and hi is None: GA_Abs_value(g_a) else: lo_nd,hi_nd = _lohi(g_a,lo,hi) GA_Abs_value_patch64(g_a, lo_nd.data, hi_nd.data) def acc(int g_a, buffer, lo=None, hi=None, alpha=None): """Combines data from buffer with data in the global array patch. The buffer array is assumed to be have the same number of dimensions as the global array. If the buffer is not contiguous, a contiguous copy will be made. global array section (lo[],hi[]) += alpha * buffer This is a one-sided and atomic operation. :Parameters: g_a : int the array handle buffer : array-like must be contiguous and have same number of elements as patch lo : 1D array-like lower bound patch coordinates, inclusive hi : 1D array-like higher bound patch coordinates, exclusive alpha : object multiplier (converted to appropriate type) """ _acc_common(g_a, buffer, lo, hi, alpha) cdef _acc_common(int g_a, buffer, lo=None, hi=None, alpha=None, bint nb=False, bint periodic=False, skip=None): """Combines data from buffer with data in the global array patch. The local array is assumed to have the same shape as the requested region, or the local array can be 1-dimensional so long as it has the same number of elements as the requested region. Any detected inconsitencies raise a ValueError. global array section (lo[],hi[]) += alpha * buffer This is a one-sided and atomic operation. :Parameters: g_a : int the array handle buffer : array-like the data to put; should either be 1D and len(buffer)==np.prod(hi-lo), or np.all(buffer.shape == hi-lo) i.e. buffer is 1D and same size as requested region or buffer is the same shape as requested region lo : 1D array-like lower bound patch coordinates, inclusive hi : 1D array-like higher bound patch coordinates, exclusive alpha : object multiplier (converted to appropriate type) nb : bool whether the call is non-blocking periodic : bool whether the call is periodic skip : 1D array-like strides for each dimension :see: nbacc :see: periodic_acc :see: strided_acc :returns: None, however if nb=True, the nonblocking handle is returned. """ cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd, ld_nd, shape, skip_nd cdef np.ndarray buffer_nd cdef int gtype=inquire_type(g_a) cdef int ialpha cdef long lalpha cdef long long llalpha cdef float falpha cdef double dalpha cdef long double ldalpha cdef SingleComplex fcalpha cdef DoubleComplex dcalpha cdef void *valpha=NULL cdef ga_nbhdl_t nbhandle dtype = _to_dtype[gtype] lo_nd,hi_nd = _lohi(g_a,lo,hi) shape = hi_nd-lo_nd+1 if skip is None: skip_nd = None else: skip_nd = _inta64(skip) shape = (hi_nd-lo_nd)/skip_nd+1 buffer_nd = np.asarray(buffer, dtype=dtype) if buffer_nd.dtype != dtype: raise ValueError, "buffer is wrong type :: buffer=%s != %s" % ( buffer.dtype, dtype) # Due to GA restrictions, buffer must not have negative strides # and buffer's last stride must be same as itemsize strides = [buffer_nd.strides[i]/buffer_nd.itemsize for i in range(buffer_nd.ndim)] if (strides and (strides[-1] != 1 or np.any(np.asarray(strides) < 0))): buffer_nd = np.ascontiguousarray(buffer_nd) # we allow 1-d "flat" buffers in addition to buffers matching the shape of # the requested region if buffer_nd.ndim == 1: if buffer_nd.size != np.prod(shape): raise ValueError, ('buffer size does not match shape :: ' 'buffer.size=%s != np.prod(shape)=%s' % ( buffer_nd.size, np.prod(shape))) ld_nd = shape[1:] else: buffer_shape = [buffer_nd.shape[i] for i in range(buffer_nd.ndim)] if not np.all(buffer_shape == shape): raise ValueError, ('buffer shape does not match request shape :: ' 'buffer_shape=%s != shape=%s' % ( buffer_shape, shape)) ld_nd = np.asarray([strides[i]/strides[i+1] for i in range(buffer_nd.ndim-1)], dtype=np.int64) if alpha is None: alpha = 1 valpha = _convert_multiplier(gtype, alpha, &ialpha, &lalpha, &llalpha, &falpha, &dalpha, &ldalpha, &fcalpha, &dcalpha) if nb: NGA_NbAcc64(g_a, lo_nd.data, hi_nd.data, buffer_nd.data, ld_nd.data, valpha, &nbhandle) return nbhandle elif periodic: NGA_Periodic_acc64(g_a, lo_nd.data, hi_nd.data, buffer_nd.data, ld_nd.data, valpha) elif skip is not None: NGA_Strided_acc64(g_a, lo_nd.data, hi_nd.data, skip_nd.data, buffer_nd.data, ld_nd.data, valpha) else: NGA_Acc64(g_a, lo_nd.data, hi_nd.data, buffer_nd.data, ld_nd.data, valpha) def access(int g_a, lo=None, hi=None, int proc=-1): """Returns local array patch. This routine allows to access directly, in place elements in the local section of a global array. It useful for writing new GA operations. If no patch is specified, the entire local patch is returned. If this process does not own any data, None is returned. Note: The entire local data is always accessed, but if a smaller patch is requested, an appropriately sliced ndarray is returned. If proc is not specified, then ga.nodeid() is used. Each call to ga.access has to be followed by a call to either ga.release or ga.release_update. You can access in this fashion only local data. Since the data is shared with other processes, you need to consider issues of mutual exclusion. This operation is local. :Parameters: g_a : int the array handle lo : 1D array-like lower bound patch coordinates, inclusive hi : 1D array-like higher bound patch coordinates, exclusive proc : int defaults to ga.nodeid(), but can specify a proc within the same SMP node to access its data instead :returns: ndarray representing local patch """ cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd cdef np.ndarray[np.int64_t, ndim=1] ld_nd, lo_dst, hi_dst, dims_nd cdef int i, gtype=inquire_type(g_a) cdef int dimlen=GA_Ndim(g_a) cdef np.dtype dtype = _to_dtype[gtype] cdef void *ptr cdef np.npy_intp *dims = NULL cdef np.npy_intp *strides = NULL if proc < 0: proc = GA_Nodeid() # first things first, if no data is owned, return None lo_dst,hi_dst = distribution(g_a, proc) if lo_dst[0] < 0 or hi_dst[0] < 0: return None # always access the entire local data ld_nd = np.ones(dimlen, dtype=np.int64) # put hi_dst back to GA inclusive indexing convention hi_dst -= 1 NGA_Access64(g_a, lo_dst.data, hi_dst.data, &ptr, ld_nd.data) # put hi_dst back to Python exclusive indexing convention hi_dst += 1 dims_nd = hi_dst-lo_dst # fix the strides, for example if ghost cells are in use # or if memory is allocated in a non-contiguous way if dimlen >= 3: for i in range(-3, -dimlen-1, -1): ld_nd[i] *= ld_nd[i+1] ld_nd *= _to_dtype[gtype].itemsize # must convert int64_t ndarray shape to npy_intp array dims = malloc(dimlen*sizeof(np.npy_intp)) strides = malloc(dimlen*sizeof(np.npy_intp)) for i in range(dimlen): dims[i] = dims_nd[i] strides[i] = ld_nd[i] Py_INCREF(dtype) array = PyArray_NewFromDescr(np.ndarray, dtype, dimlen, dims, strides, ptr, np.NPY_WRITEABLE, None) free(dims) free(strides) if lo is not None or hi is not None: if lo is not None: lo_nd = _inta64(lo) else: lo_nd = lo_dst if hi is not None: hi_nd = _inta64(hi) else: hi_nd = hi_dst # sanity checks if np.sometrue(lo_nd>hi_nd): raise ValueError,"lo>hi lo=%s hi=%s"%(lo_nd,hi_nd) if np.sometrue(lo_ndhi_dst): raise ValueError,"hi out of bounds hi_dst=%s hi=%s"%(hi_dst,hi_nd) slices = [] for i in range(dimlen): slices.append(slice(lo_nd[i]-lo_dst[i],hi_nd[i]-lo_dst[i])) return array[slices] return array def access_block(int g_a, int idx): """Returns local array patch for a block-cyclic distribution. This routine allows to access directly, in place elements in the local section of a global array. It useful for writing new GA operations. Each call to ga.access_block has to be followed by a call to either ga.release_block or ga.release_update_block. You can access in this fashion only local data. Since the data is shared with other processes, you need to consider issues of mutual exclusion. This operation is local. :Parameters: g_a : int the array handle idx : int the block index :returns: ndarray representing local block """ cdef np.ndarray[np.int64_t, ndim=1] ld_nd, lo_dst, hi_dst, dims_nd cdef int i, gtype=inquire_type(g_a) cdef int dimlen=GA_Ndim(g_a), typenum=_to_dtype[gtype].num cdef void *ptr cdef np.npy_intp *dims = NULL # first things first, if no data is owned, return None lo_dst,hi_dst = distribution(g_a, idx) if lo_dst[0] < 0 or hi_dst[0] < 0: return None # put hi_dst back to GA inclusive indexing convention hi_dst -= 1 # always access the entire local data ld_nd = np.zeros(dimlen-1, dtype=np.int64) NGA_Access_block64(g_a, idx, &ptr, ld_nd.data) dims_nd = hi_dst-lo_dst+1 # must convert int64_t ndarray shape to npy_intp array dims = malloc(dimlen*sizeof(np.npy_intp)) for i in range(dimlen): dims[i] = dims_nd[i] array = np.PyArray_SimpleNewFromData(dimlen, dims, typenum, ptr) free(dims) return array def access_block_grid(int g_a, subscript): """Returns local array patch for a SCALAPACK block-cyclic distribution. The subscript array contains the subscript of the block in the array of blocks. This subscript is based on the location of the block in a grid, each of whose dimensions is equal to the number of blocks that fit along that dimension. Each call to ga.access_block_grid has to be followed by a call to either ga.release_block_grid or ga.release_update_block_grid. You can access in this fashion only local data. Since the data is shared with other processes, you need to consider issues of mutual exclusion. This operation is local. :Parameters: g_a : int the array handle subscript : 1D array-like subscript of the block in the array :returns: ndarray representing local block """ raise NotImplementedError def access_block_segment(int g_a, int proc): """This function can be used to gain access to the all the locally held data on a particular processor that is associated with a block-cyclic distributed array. The data inside this segment has a lot of additional structure so this function is not generally useful to developers. It is primarily used inside the GA library to implement other GA routines. Each call to ga.access_block_segment should be followed by a call to either ga.release_block_segment or ga.release_update_block_segment. This is a local operation. :Parameters: g_a : int the array handle proc : int processor ID :returns: ndarray representing local block """ cdef int64_t elems cdef int gtype=inquire_type(g_a) cdef int typenum=_to_dtype[gtype].num cdef void *ptr cdef np.npy_intp *dims = NULL # always access the entire local data NGA_Access_block_segment64(g_a, proc, &ptr, &elems) # must convert int64_t ndarray shape to npy_intp array dims = malloc(sizeof(np.npy_intp)) dims[0] = elems array = np.PyArray_SimpleNewFromData(1, dims, typenum, ptr) free(dims) return array def access_ghost_element(int g_a, subscript): """Returns a scalar ndarray representing the requested ghost element. This function can be used to return a pointer to any data element in the locally held portion of the global array and can be used to directly access ghost cell data. The array subscript refers to the local index of the element relative to the origin of the local patch (which is assumed to be indexed by (0,0,...)). This is a local operation. :Parameters: g_a : int the array handle subscript : 1D array-like of integers index of the desired element :returns: ndarray scalar representing local block """ raise NotImplementedError, "use access_ghosts(g_a) instead" def access_ghosts(int g_a): """Returns ndarray representing local patch with ghost cells. This routine will provide access to the ghost cell data residing on each processor. Calls to NGA_Access_ghosts should normally follow a call to NGA_Distribution that returns coordinates of the visible data patch associated with a processor. You need to make sure that the coordinates of the patch are valid (test values returned from NGA_Distribution). You can only access local data. This operation is local. :Parameters: g_a : int the array handle :returns: ndarray scalar representing local block with ghost cells """ cdef np.ndarray[np.int64_t, ndim=1] ld_nd, lo_dst, hi_dst, dims_nd cdef int i, gtype=inquire_type(g_a) cdef int dimlen=GA_Ndim(g_a), typenum=_to_dtype[gtype].num cdef void *ptr cdef np.npy_intp *dims = NULL # first things first, if no data is owned, return None lo_dst,hi_dst = distribution(g_a) if lo_dst[0] < 0 or hi_dst[0] < 0: return None # always access the entire local data dims_nd = np.zeros(dimlen, dtype=np.int64) ld_nd = np.zeros(dimlen-1, dtype=np.int64) NGA_Access_ghosts64(g_a, dims_nd.data, &ptr, ld_nd.data) # must convert int64_t ndarray shape to npy_intp array dims = malloc(dimlen*sizeof(np.npy_intp)) for i in range(dimlen): dims[i] = dims_nd[i] array = np.PyArray_SimpleNewFromData(dimlen, dims, typenum, ptr) free(dims) return array def add(int g_a, int g_b, int g_c, alpha=None, beta=None, alo=None, ahi=None, blo=None, bhi=None, clo=None, chi=None): """Element-wise addition of two arrays. The arrays must be the same shape and identically aligned. The result (c) may replace one of the input arrays (a/b). Patches of arrays (which must have the same number of elements) may also be added together elementw=-wise, if patch coordinates are specified. c = alpha*a + beta*b This is a collective operation. :Parameters: g_a : int the array handle g_b : int the array handle g_c : int the array handle alpha : object multiplier (converted to appropriate type) beta : object multiplier (converted to appropriate type) alo : 1D array-like of integers lower bound patch coordinates of g_a, inclusive ahi : 1D array-like of integers higher bound patch coordinates of g_a, exclusive blo : 1D array-like of integers lower bound patch coordinates of g_b, inclusive bhi : 1D array-like of integers higher bound patch coordinates of g_b, exclusive clo : 1D array-like of integers lower bound patch coordinates of g_c, inclusive chi : 1D array-like of integers higher bound patch coordinates of g_c, exclusive """ cdef np.ndarray[np.int64_t, ndim=1] alo_nd, ahi_nd cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd cdef int gtype=inquire_type(g_a) cdef int ialpha, ibeta cdef long lalpha, lbeta cdef long long llalpha, llbeta cdef float falpha, fbeta cdef double dalpha, dbeta cdef long double ldalpha, ldbeta cdef SingleComplex fcalpha, fcbeta cdef DoubleComplex dcalpha, dcbeta cdef void *valpha, *vbeta if alpha is None: alpha = 1 valpha = _convert_multiplier(gtype, alpha, &ialpha, &lalpha, &llalpha, &falpha, &dalpha, &ldalpha, &fcalpha, &dcalpha) if beta is None: beta = 1 vbeta = _convert_multiplier(gtype, beta, &ibeta, &lbeta, &llbeta, &fbeta, &dbeta, &ldbeta, &fcbeta, &dcbeta) if (alo is None and ahi is None and blo is None and bhi is None and clo is None and chi is None): GA_Add(valpha, g_a, vbeta, g_b, g_c) else: alo_nd,ahi_nd = _lohi(g_a,alo,ahi) blo_nd,bhi_nd = _lohi(g_b,blo,bhi) clo_nd,chi_nd = _lohi(g_c,clo,chi) NGA_Add_patch64( valpha, g_a, alo_nd.data, ahi_nd.data, vbeta, g_b, blo_nd.data, bhi_nd.data, g_c, clo_nd.data, chi_nd.data) def add_constant(int g_a, alpha, lo=None, hi=None): """Adds the constant alpha to each element of the array. This operation is collective. :Parameters: g_a : int the array handle alpha : object the constant to add (converted to appropriate type) lo : 1D array-like of integers lower bound patch coordinates, inclusive hi : 1D array-like of integers higher bound patch coordinates, exclusive """ cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd cdef int gtype=inquire_type(g_a) cdef int ialpha cdef long lalpha cdef long long llalpha cdef float falpha cdef double dalpha cdef long double ldalpha cdef SingleComplex fcalpha cdef DoubleComplex dcalpha cdef void *valpha valpha = _convert_multiplier(gtype, alpha, &ialpha, &lalpha, &llalpha, &falpha, &dalpha, &ldalpha, &fcalpha, &dcalpha) if lo is None and hi is None: GA_Add_constant(g_a, valpha) else: lo_nd,hi_nd = _lohi(g_a,lo,hi) GA_Add_constant_patch64( g_a, lo_nd.data, hi_nd.data, valpha) def add_diagonal(int g_a, int g_v): """Adds the elements of the vector g_v to the diagonal of matrix g_a. This operation is collective. :Parameters: g_a : int the array handle g_v : int the vector handle """ GA_Add_diagonal(g_a, g_v) def allocate(int g_a): """Allocates memory for the handle obtained using ga.create_handle. At a minimum, the ga.set_data function must be called before the memory is allocated. Other ga.set_xxx functions can also be called before invoking this function. This is a collective operation. :Parameters: g_a : int the array handle :returns: True if allocation of g_a was successful. """ if GA_Allocate(g_a) == 1: return True return False def brdcst(buffer, int root=0): """Broadcast from process root to all other processes. If the buffer is not contiguous, an error is raised. This operation is provided only for convenience purposes: it is available regardless of the message-passing library that GA is running with. This is a collective operation. :Parameters: buffer : 1D array-like of objects the ndarray message (converted to the appropriate type) root : int the process which is sending :returns: The buffer in case a temporary was passed in. """ cdef np.ndarray buffer_nd buffer_nd = np.asarray(buffer) if not buffer_nd.flags['C_CONTIGUOUS']: raise ValueError, "the buffer must be contiguous" #if buffer_nd.ndim != 1: # raise ValueError, "the buffer must be one-dimensional" GA_Brdcst(buffer_nd.data, buffer_nd.size*buffer_nd.itemsize, root) return buffer_nd def check_handle(int g_a, char *message): """Checks that the array handle g_a is valid. If not, calls ga.error withe the provided string. This operation is local. """ GA_Check_handle(g_a, message) def cluster_nnodes(): """Returns the total number of nodes that the program is running on. On SMP architectures, this will be less than or equal to the total number of processors. This is a local operation. """ return GA_Cluster_nnodes() def cluster_nodeid(int proc=-1): """Returns the node ID of this process or the given process. On SMP architectures with more than one processor per node, several processes may return the same node id. This is a local operation. :Parameters: proc : int process ID to lookup """ if proc >= 0: return GA_Cluster_proc_nodeid(proc) return GA_Cluster_nodeid() def cluster_proc_nodeid(int proc): """Returns the node ID of the specified process. On SMP architectures with more than one processor per node, several processors may return the same node id. This is a local operation. """ return GA_Cluster_proc_nodeid(proc) def cluster_nprocs(int node): """Returns the number of processors available on the given node. This is a local operation. """ return GA_Cluster_nprocs(node) def cluster_procid(int node, int proc): """Returns the proc ID associated with node and local proc ID. If node has N processors, then the value of proc lies between 0 and N-1. This is a local operation. """ return GA_Cluster_procid(node, proc) def compare_distr(int g_a, int g_b): """Compares the distributions of two global arrays. This is a collective operation. :returns: True if distributions are identical and False when they are not """ if GA_Compare_distr(g_a, g_b) == 0: return True return False def copy(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None, bint trans=False): """Copies elements from array g_a into array g_b. For the operation over the entire arrays, the arrays must be the same type, shape, and identically aligned. No transpose is allowed in this case. For patch operations, the patches of arrays may be of different shapes but must have the same number of elements. Patches must be nonoverlapping (if g_a=g_b). Transposes are allowed for patch operations. This is a collective operation. :Parameters: g_a : int the array handle copying from g_b : int the array handle copying to alo : 1D array-like of integers lower bound patch coordinates of g_a, inclusive ahi : 1D array-like of integers higher bound patch coordinates of g_a, exclusive blo : 1D array-like of integers lower bound patch coordinates of g_b, inclusive bhi : 1D array-like of integers higher bound patch coordinates of g_b, exclusive trans : bool whether the transpose operator should be applied True=applied """ cdef np.ndarray[np.int64_t, ndim=1] alo_nd, ahi_nd cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd cdef char trans_c if alo is None and ahi is None and blo is None and bhi is None: GA_Copy(g_a, g_b) else: alo_nd,ahi_nd = _lohi(g_a,alo,ahi) blo_nd,bhi_nd = _lohi(g_b,blo,bhi) if trans: trans_c = "T" else: trans_c = "N" NGA_Copy_patch64(trans_c, g_a, alo_nd.data, ahi_nd.data, g_b, blo_nd.data, bhi_nd.data) def create(int gtype, dims, char *name="", chunk=None, int pgroup=-1): """Creates an n-dimensional array using the regular distribution model. The array can be distributed evenly or not. The control over the distribution is accomplished by specifying chunk (block) size for all or some of array dimensions. For example, for a 2-dimensional array, setting chunk[0]=dim[0] gives distribution by vertical strips (chunk[0]*dims[0]); setting chunk[1]=dim[1] gives distribution by horizontal strips (chunk[1]*dims[1]). Actual chunks will be modified so that they are at least the size of the minimum and each process has either zero or one chunk. Specifying chunk[i] as <1 will cause that dimension to be distributed evenly. As a convenience, when chunk is omitted or None, the entire array is distributed evenly. :Parameters: gtype : int the type of the array dims : 1D array-like of integers shape of the array name : string the name of the array chunk : 1D array-like of integers see above pgroup : int create array only as part of this processor group :returns: a non-zero array handle means the call was succesful. This is a collective operation. """ cdef np.ndarray[np.int64_t, ndim=1] dims_nd, chunk_nd=None dims_nd = _inta64(dims) if pgroup < 0: pgroup = pgroup_get_default() if chunk: chunk_nd = _inta64(chunk) return NGA_Create_config64(gtype, len(dims_nd), dims_nd.data, name, chunk_nd.data, pgroup) else: return NGA_Create_config64(gtype, len(dims_nd), dims_nd.data, name, NULL, pgroup) def create_ghosts(int gtype, dims, width, char *name="", chunk=None, int pgroup=-1): """Creates an array with a layer of ghost cells around the visible data. The array can be distributed evenly or not evenly. The control over the distribution is accomplished by specifying chunk (block) size for all or some of the array dimensions. For example, for a 2-dimensional array, setting chunk(1)=dim(1) gives distribution by vertical strips (chunk(1)*dims(1)); setting chunk(2)=dim(2) gives distribution by horizontal strips (chunk(2)*dims(2)). Actual chunks will be modified so that they are at least the size of the minimum and each process has either zero or one chunk. Specifying chunk(i) as <1 will cause that dimension (i-th) to be distributed evenly. The width of the ghost cell layer in each dimension is specified using the array width(). The local data of the global array residing on each processor will have a layer width[n] ghosts cells wide on either side of the visible data along the dimension n. :Parameters: gtype : int the type of the array dims : 1D array-like of integers shape of the array width : 1D array-like of integers ghost cell widths name : string the name of the array chunk : 1D array-like of integers see above pgroup : int create array only as part of this processor group :returns: a non-zero array handle means the call was successful. This is a collective operation. """ cdef np.ndarray[np.int64_t, ndim=1] dims_nd, chunk_nd, width_nd dims_nd = _inta64(dims) width_nd = _inta64(width) if pgroup < 0: pgroup = pgroup_get_default() if chunk: chunk_nd = _inta64(chunk) return NGA_Create_ghosts_config64(gtype, len(dims_nd), dims_nd.data, width_nd.data, name, chunk_nd.data, pgroup) else: return NGA_Create_ghosts_config64(gtype, len(dims_nd), dims_nd.data, width_nd.data, name, NULL, pgroup) def create_handle(): """Returns a global array handle that can be used to create a new array. The sequence of operations is to begin with a call to ga.create_handle to get a new array handle. The attributes of the array, such as dimension, size, type, etc. can then be set using successive calls to the ga.set_xxx subroutines. When all array attributes have been set, the ga.allocate subroutine is called and the global array is actually created and memory for it is allocated. This is a collective operation. """ return GA_Create_handle() def create_irreg(int gtype, dims, block, map, char *name="", int pgroup=-1): """Creates an array by following the user-specified distribution. The distribution is specified as a Cartesian product of distributions for each dimension. The array indices start at 0. For example, the following figure demonstrates distribution of a 2-dimensional array 8x10 on 6 (or more) processors. nblock[2]=[3,2], the size of map array is s=5 and array map contains the following elements map=[0,2,6, 0, 5]. The distribution is nonuniform because, P1 and P4 get 20 elements each and processors P0,P2,P3, and P5 only 10 elements each. This is a collective operation. :Parameters: gtype : int the type of the array dims : 1D array-like of integers shape of the array block : 1D array-like of integers the number of blocks each dimension is divided into map : 1D array-like of integers starting index for each block len(map) == sum of all elements of nblock array name : string the name of the array pgroup : int create array only as part of this processor group :returns: integer handle representing the array; a non-zero value indicates success """ cdef np.ndarray[np.int64_t, ndim=1] dims_nd, block_nd, map_nd dims_nd = _inta64(dims) block_nd = _inta64(block) map_nd = _inta64(map) if pgroup < 0: pgroup = pgroup_get_default() return NGA_Create_irreg_config64(gtype, len(dims_nd), dims_nd.data, name, block_nd.data, map_nd.data, pgroup) def create_ghosts_irreg(int gtype, dims, width, block, map, char *name="", int pgroup=-1): """Creates an array with a layer of ghost cells around the visible data. The distribution is specified as a Cartesian product of distributions for each dimension. For example, the following figure demonstrates distribution of a 2-dimensional array 8x10 on 6 (or more) processors. nblock(2)=[3,2], the size of map array is s=5 and array map contains the following elements map=[1,3,7, 1, 6]. The distribution is nonuniform because, P1 and P4 get 20 elements each and processors P0,P2,P3, and P5 only 10 elements each. The array width[] is used to control the width of the ghost cell boundary around the visible data on each processor. The local data of the global array residing on each processor will have a layer width[n] ghosts cells wide on either side of the visible data along the dimension n. This is a collective operation. :Parameters: gtype : int the type of the array dims : 1D array-like of integers shape of the array width : 1D array-like of integers ghost cell widths block : 1D array-like of integers number of blocks each dimension is divided into map : 1D array-like of integers starting index for each block len(map) == sum of all elements of nblock array name : string the name of the array pgroup : int create array only as part of this processor group :returns: a non-zero array handle means the call was succesful """ cdef np.ndarray[np.int64_t, ndim=1] dims_nd, width_nd, block_nd, map_nd dims_nd = _inta64(dims) width_nd = _inta64(width) block_nd = _inta64(block) map_nd = _inta64(map) if pgroup < 0: pgroup = pgroup_get_default() return NGA_Create_ghosts_irreg_config64(gtype, len(dims_nd), dims_nd.data, width_nd.data, name, block_nd.data, map_nd.data, pgroup) def create_mutexes(int number): """Creates a set containing the number of mutexes. Mutex is a simple synchronization object used to protect Critical Sections. Only one set of mutexes can exist at a time. Array of mutexes can be created and destroyed as many times as needed. Mutexes are numbered: 0, ..., number -1. This is a collective operation. :Parameters: number : int the number of mutexes to create :returns: True on success, False on failure """ if GA_Create_mutexes(number) == 1: return True return False def deregister_type(int type): """Removes the data type previously registered using register_type. :Parameters: type : int the data type handle """ return NGA_Deregister_type(type) def destroy(int g_a): """Deallocates the array and frees any associated resources. This is a collective operation. """ GA_Destroy(g_a) def destroy_mutexes(): """Destroys the set of mutexes created with ga_create_mutexes. :returns: True if the operation succeeded; False when failed This is a collective operation. """ if GA_Destroy_mutexes() == 1: return True return False def diag(int g_a, int g_s, int g_v, evalues=None): """Solve the generalized eigen-value problem. The input matrices are not overwritten or destroyed. :Parameters: g_a : int the array handle of the matrix to diagonalize g_s : int the array handle of the metric g_v : int the array handle to return evecs :returns: All eigen-values as an ndarray in ascending order. This is a collective operation. """ if evalues is None: gtype,dims = inquire(g_a) evalues = np.ndarray((dims[0]), dtype=_to_dtype(gtype)) else: evalues = np.asarray(evalues) GA_Diag(g_a, g_s, g_v, evalues.data) return evalues def diag_reuse(int control, int g_a, int g_s, int g_v, evalues=None): """Solve the generalized eigen-value problem. Recommended for REPEATED calls if g_s is unchanged. The input matrices are not overwritten or destroyed. :Parameters: control : int 0 indicates first call to the eigensolver; >0 consecutive calls (reuses factored g_s); <0 only erases factorized g_s; g_v and eval unchanged (should be called after previous use if another eigenproblem, i.e., different g_a and g_s, is to be solved) g_a : int the array handle of the matrix to diagonalize g_s : int the array handle of the metric g_v : int the array handle to return evecs :returns: All eigen-values as an ndarray in ascending order. This is a collective operation. """ if evalues is None: gtype,dims = inquire(g_a) evalues = np.ndarray((dims[0]), dtype=_to_dtype(gtype)) else: evalues = np.asarray(evalues) GA_Diag_reuse(control, g_a, g_s, g_v, evalues.data) return evalues def diag_std(int g_a, int g_v, evalues=None): """Solve the standard (non-generalized) eigenvalue problem. The input matrix is neither overwritten nor destroyed. :Parameters: g_a : int the array handle of the matrix to diagonalize g_v : int the array handle to return evecs :returns: all eigenvectors via the g_v global array, and eigenvalues as an ndarray in ascending order This is a collective operation. """ if evalues is None: gtype,dims = inquire(g_a) evalues = np.ndarray((dims[0]), dtype=_to_dtype(gtype)) else: evalues = np.asarray(evalues) GA_Diag_std(g_a, g_v, evalues.data) return evalues cpdef distribution(int g_a, int proc=-1): """Return the distribution given to proc. If proc is not specified, then ga.nodeid() is used. The range is returned as -1 for lo and -2 for hi if no elements are owned by proc. """ cdef int ndim = GA_Ndim(g_a) cdef np.ndarray[np.int64_t, ndim=1] lo = np.zeros((ndim), dtype=np.int64) cdef np.ndarray[np.int64_t, ndim=1] hi = np.zeros((ndim), dtype=np.int64) if proc < 0: proc = GA_Nodeid() NGA_Distribution64(g_a, proc, lo.data, hi.data) # convert hi to python exclusive indexing convetion hi += 1 return lo,hi def dot(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None, bint ta=False, bint tb=False): """Computes the element-wise dot product of two arrays. Arrays must be of the same type and same number of elements. Patch operation allows for possibly transposed patches. This is a collective operation. :Parameters: g_a : int the array handle g_b : int the array handle alo : 1D array-like of integers lower bound patch coordinates of g_a, inclusive ahi : 1D array-like of integers higher bound patch coordinates of g_a, exclusive blo : 1D array-like of integers lower bound patch coordinates of g_b, inclusive bhi : 1D array-like of integers higher bound patch coordinates of g_b, exclusive ta : bool whether the transpose operator should be applied to g_a True=applied tb : bool whether the transpose operator should be applied to g_b True=applied :returns: SUM_ij a(i,j)*b(i,j) """ cdef np.ndarray[np.int64_t, ndim=1] alo_nd, ahi_nd cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd cdef char ta_c, tb_c cdef int gtype=inquire_type(g_a) cdef float complex pfcv cdef double complex pdcv cdef SingleComplex gfcv cdef DoubleComplex gdcv if alo is None and ahi is None and blo is None and bhi is None: if gtype == C_INT: return GA_Idot(g_a, g_b) elif gtype == C_LONG: return GA_Ldot(g_a, g_b) elif gtype == C_LONGLONG: return GA_Lldot(g_a, g_b) elif gtype == C_FLOAT: return GA_Fdot(g_a, g_b) elif gtype == C_DBL: return GA_Ddot(g_a, g_b) elif gtype == C_SCPL: gfcv = GA_Cdot(g_a, g_b) pfcv.real = gfcv.real pfcv.imag = gfcv.imag return pfcv elif gtype == C_DCPL: gdcv = GA_Zdot(g_a, g_b) pdcv.real = gdcv.real pdcv.imag = gdcv.imag return pdcv else: raise TypeError else: alo_nd,ahi_nd = _lohi(g_a,alo,ahi) blo_nd,bhi_nd = _lohi(g_b,blo,bhi) if ta: ta_c = "T" else: ta_c = "N" if tb: tb_c = "T" else: tb_c = "N" if gtype == C_INT: return NGA_Idot_patch64( g_a, ta_c, alo_nd.data, ahi_nd.data, g_b, tb_c, blo_nd.data, bhi_nd.data) elif gtype == C_LONG: return NGA_Ldot_patch64( g_a, ta_c, alo_nd.data, ahi_nd.data, g_b, tb_c, blo_nd.data, bhi_nd.data) elif gtype == C_LONGLONG: return NGA_Lldot_patch64( g_a, ta_c, alo_nd.data, ahi_nd.data, g_b, tb_c, blo_nd.data, bhi_nd.data) elif gtype == C_FLOAT: return NGA_Fdot_patch64( g_a, ta_c, alo_nd.data, ahi_nd.data, g_b, tb_c, blo_nd.data, bhi_nd.data) elif gtype == C_DBL: return NGA_Ddot_patch64( g_a, ta_c, alo_nd.data, ahi_nd.data, g_b, tb_c, blo_nd.data, bhi_nd.data) elif gtype == C_SCPL: gfcv = NGA_Cdot_patch64( g_a, ta_c, alo_nd.data, ahi_nd.data, g_b, tb_c, blo_nd.data, bhi_nd.data) pfcv.real = gfcv.real pfcv.imag = gfcv.imag return pfcv elif gtype == C_DCPL: gdcv = NGA_Zdot_patch64( g_a, ta_c, alo_nd.data, ahi_nd.data, g_b, tb_c, blo_nd.data, bhi_nd.data) pdcv.real = gdcv.real pdcv.imag = gdcv.imag return pdcv else: raise TypeError def duplicate(int g_a, char *name=""): """Creates a new array by applying all the properties of another existing array. :Parameters: g_a : int the array handle name : string the new name of the created array :returns: a non-zero array handle means the call was succesful. This is a collective operation. """ return GA_Duplicate(g_a, name) def elem_divide(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, bhi=None, clo=None, chi=None): """Computes the element-wise quotient of the two arrays. Arrays or array patches must be of the same types and same number of elements. For two-dimensional arrays: c(i, j) = a(i,j)/b(i,j) The result (c) may replace one of the input arrays (a/b). If one of the elements of array g_b is zero, the quotient for the element of g_c will be set to GA_NEGATIVE_INFINITY. This is a collective operation. :Parameters: g_a : int the array handle g_b : int the array handle g_c : int the array handle alo : 1D array-like of integers lower bound patch coordinates of g_a, inclusive ahi : 1D array-like of integers higher bound patch coordinates of g_a, exclusive blo : 1D array-like of integers lower bound patch coordinates of g_b, inclusive bhi : 1D array-like of integers higher bound patch coordinates of g_b, exclusive clo : 1D array-like of integers lower bound patch coordinates of g_c, inclusive chi : 1D array-like of integers higher bound patch coordinates of g_c, exclusive """ cdef np.ndarray[np.int64_t, ndim=1] alo_nd, ahi_nd cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd if (alo is None and ahi is None and blo is None and bhi is None and clo is None and chi is None): GA_Elem_divide(g_a, g_b, g_c) else: alo_nd,ahi_nd = _lohi(g_a,alo,ahi) blo_nd,bhi_nd = _lohi(g_b,blo,bhi) clo_nd,chi_nd = _lohi(g_c,clo,chi) GA_Elem_divide_patch64( g_a, alo_nd.data, ahi_nd.data, g_b, blo_nd.data, bhi_nd.data, g_c, clo_nd.data, chi_nd.data) def elem_maximum(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, bhi=None, clo=None, chi=None): """Computes the element-wise maximum of the two arrays. Arrays or array patches must be of the same types and same number of elements. For two-dimensional arrays:: c(i,j) = max(a(i,j),b(i,j)) If the data type is complex, then:: c(i,j).real = max{ |a(i,j)|, |b(i,j)|} while c(i,j).image = 0 The result (c) may replace one of the input arrays (a/b). This is a collective operation. :Parameters: g_a : int the array handle g_b : int the array handle g_c : int the array handle alo : 1D array-like of integers lower bound patch coordinates of g_a, inclusive ahi : 1D array-like of integers higher bound patch coordinates of g_a, exclusive blo : 1D array-like of integers lower bound patch coordinates of g_b, inclusive bhi : 1D array-like of integers higher bound patch coordinates of g_b, exclusive clo : 1D array-like of integers lower bound patch coordinates of g_c, inclusive chi : 1D array-like of integers higher bound patch coordinates of g_c, exclusive """ cdef np.ndarray[np.int64_t, ndim=1] alo_nd, ahi_nd cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd if (alo is None and ahi is None and blo is None and bhi is None and clo is None and chi is None): GA_Elem_maximum(g_a, g_b, g_c) else: alo_nd,ahi_nd = _lohi(g_a,alo,ahi) blo_nd,bhi_nd = _lohi(g_b,blo,bhi) clo_nd,chi_nd = _lohi(g_c,clo,chi) GA_Elem_maximum_patch64( g_a, alo_nd.data, ahi_nd.data, g_b, blo_nd.data, bhi_nd.data, g_c, clo_nd.data, chi_nd.data) def elem_minimum(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, bhi=None, clo=None, chi=None): """Computes the element-wise minimum of the two arrays. Arrays or array patches must be of the same types and same number of elements. For two-dimensional arrays:: c(i,j) = min(a(i,j),b(i,j)) If the data type is complex, then:: c(i,j).real = min{ |a(i,j)|, |b(i,j)|} while c(i,j).image = 0 The result (c) may replace one of the input arrays (a/b). This is a collective operation. :Parameters: g_a : int the array handle g_b : int the array handle g_c : int the array handle alo : 1D array-like of integers lower bound patch coordinates of g_a, inclusive ahi : 1D array-like of integers higher bound patch coordinates of g_a, exclusive blo : 1D array-like of integers lower bound patch coordinates of g_b, inclusive bhi : 1D array-like of integers higher bound patch coordinates of g_b, exclusive clo : 1D array-like of integers lower bound patch coordinates of g_c, inclusive chi : 1D array-like of integers higher bound patch coordinates of g_c, exclusive """ cdef np.ndarray[np.int64_t, ndim=1] alo_nd, ahi_nd cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd if (alo is None and ahi is None and blo is None and bhi is None and clo is None and chi is None): GA_Elem_minimum(g_a, g_b, g_c) else: alo_nd,ahi_nd = _lohi(g_a,alo,ahi) blo_nd,bhi_nd = _lohi(g_b,blo,bhi) clo_nd,chi_nd = _lohi(g_c,clo,chi) GA_Elem_minimum_patch64( g_a, alo_nd.data, ahi_nd.data, g_b, blo_nd.data, bhi_nd.data, g_c, clo_nd.data, chi_nd.data) def elem_multiply(int g_a, int g_b, int g_c, alo=None, ahi=None, blo=None, bhi=None, clo=None, chi=None): """Computes the element-wise product of the two arrays. Arrays or array patches must be of the same types and same number of elements. For two-dimensional arrays: c(i, j) = a(i,j)*b(i,j) The result (c) may replace one of the input arrays (a/b). This is a collective operation. :Parameters: g_a : int the array handle g_b : int the array handle g_c : int the array handle alo : 1D array-like of integers lower bound patch coordinates of g_a, inclusive ahi : 1D array-like of integers higher bound patch coordinates of g_a, exclusive blo : 1D array-like of integers lower bound patch coordinates of g_b, inclusive bhi : 1D array-like of integers higher bound patch coordinates of g_b, exclusive clo : 1D array-like of integers lower bound patch coordinates of g_c, inclusive chi : 1D array-like of integers higher bound patch coordinates of g_c, exclusive """ cdef np.ndarray[np.int64_t, ndim=1] alo_nd, ahi_nd cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd if (alo is None and ahi is None and blo is None and bhi is None and clo is None and chi is None): GA_Elem_multiply(g_a, g_b, g_c) else: alo_nd,ahi_nd = _lohi(g_a,alo,ahi) blo_nd,bhi_nd = _lohi(g_b,blo,bhi) clo_nd,chi_nd = _lohi(g_c,clo,chi) GA_Elem_multiply_patch64( g_a, alo_nd.data, ahi_nd.data, g_b, blo_nd.data, bhi_nd.data, g_c, clo_nd.data, chi_nd.data) def error(char *message, int code=1): """Prints message and aborts safely with code.""" GA_Error(message, code) def fence(): """Blocks the calling process until all the data transfers corresponding to GA operations called after ga.init_fence() complete. For example, since ga.put might return before the data reaches the final destination, ga_init_fence and ga_fence allow processes to wait until the data tranfer is fully completed: ga.init_fence() ga.put(g_a, ...) ga.fence() ga.fence() must be called after ga.init_fence(). A barrier, ga.sync(), assures completion of all data transfers and implicitly cancels all outstanding ga.init_fence() calls. ga.init_fence() and ga.fence() must be used in pairs, multiple calls to ga.fence() require the same number of corresponding ga.init_fence() calls. ga.init_fence()/ga_fence() pairs can be nested. ga.fence() works for multiple GA operations. For example: ga.init_fence() ga.put(g_a, ...) ga.scatter(g_a, ...) ga.put(g_b, ...) ga.fence() The calling process will be blocked until data movements initiated by two calls to ga_put and one ga_scatter complete. """ GA_Fence() def fill(int g_a, value, lo=None, hi=None): """Assign a single value to all elements in the array or patch. :Parameters: g_a : int the array handle lo : 1D array-like of integers lower bound patch coordinates, inclusive hi : 1D array-like of integers higher bound patch coordinates, exclusive """ cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd cdef int ivalue cdef long lvalue cdef long long llvalue cdef float fvalue cdef double dvalue cdef long double ldvalue cdef SingleComplex fcvalue cdef DoubleComplex dcvalue cdef void *vvalue cdef int gtype=inquire_type(g_a) vvalue = _convert_multiplier(gtype, value, &ivalue, &lvalue, &llvalue, &fvalue, &dvalue, &ldvalue, &fcvalue, &dcvalue) if lo is None and hi is None: GA_Fill(g_a, vvalue) else: lo_nd,hi_nd = _lohi(g_a,lo,hi) NGA_Fill_patch64( g_a, lo_nd.data, hi_nd.data, vvalue) def gather(int g_a, subsarray, np.ndarray values=None): """Gathers array elements from a global array into a local array. subsarray will be converted to an ndarray if it is not one already. A two-dimensional array is allowed so long as its shape is (n,ndim) where n is the number of elements to gather and ndim is the number of dimensions of the target array. Also, subsarray must be contiguous. For example, if the subsarray were two-dimensional:: for k in range(n): v[k] = g_a[subsarray[k,0],subsarray[k,1],subsarray[k,2]...] For example, if the subsarray were one-dimensional:: for k in range(n): base = n*ndim v[k] = g_a[subsarray[base+0],subsarray[base+1],subsarray[base+2]...] This is a one-sided operation. """ cdef np.ndarray[np.int64_t, ndim=1] subsarray1_nd = None cdef np.ndarray[np.int64_t, ndim=2] subsarray2_nd = None cdef int gtype = inquire_type(g_a) cdef int ndim = GA_Ndim(g_a) cdef int64_t n # prepare subsarray try: subsarray1_nd = np.ascontiguousarray(subsarray, dtype=np.int64) n = len(subsarray1_nd) / ndim except ValueError: subsarray1_nd = None try: subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) n = len(subsarray2_nd) # length of first dimension of subsarray2_nd except ValueError: raise ValueError, "subsarray must be either 1- or 2-dimensional" # prepare values array if values is None: values = np.ndarray(n, dtype=_to_dtype[gtype]) else: if values.ndim != 1: raise ValueError, "values must be one-dimensional" if not values.flags['C_CONTIGUOUS']: raise ValueError, "values must be contiguous" if len(values) < n: raise ValueError, "values was not large enough" # call the wrapped function if subsarray1_nd is not None: NGA_Gather_flat64(g_a, values.data, subsarray1_nd.data, n) elif subsarray2_nd is not None: NGA_Gather_flat64(g_a, values.data, subsarray2_nd.data, n) else: raise ValueError, "how did this happen?" return values def gemm(bint ta, bint tb, int64_t m, int64_t n, int64_t k, alpha, int g_a, int g_b, beta, int g_c): """Performs one of the matrix-matrix operations. C := alpha*op( A )*op( B ) + beta*C where op( X ) is one of op(X)=X or op(X) = X', alpha and beta are scalars, and A, B and C are matrices, with op(A) an m by k matrix, op(B) a k by n matrix, and C an m by n matrix. On entry, ta specifies the form of op( A ) to be used in the matrix multiplication as follows:: ta = False, op(A) = A. ta = True, op(A) = A'. This is a collective operation. :Parameters: ta : bool transpose operator tb : bool transpose operator m : int number of rows of op(A) and of matrix C n : int number of columns of op(B) and of matrix C k : int number of columns of op(A) and rows of matrix op(B) alpha : object scale factor g_a : int handle to input array g_b : int handle to input array beta : object scale factor g_c : int handle to output array """ cdef int gtype=inquire_type(g_a) #cdef int ialpha=1, ibeta=1 #cdef long lalpha=1, lbeta=1 #cdef long long llalpha=1, llbeta=1 cdef float falpha=1.0, fbeta=1.0 cdef double dalpha=1.0, dbeta=1.0 #cdef long double ldalpha=1.0, ldbeta=1.0 cdef float complex fcalpha=1.0, fcbeta=1.0 cdef double complex dcalpha=1.0, dcbeta=1.0 #cdef long double complex ldalpha=1.0, ldbeta=1.0 cdef SingleComplex ga_fcalpha, ga_fcbeta cdef DoubleComplex ga_dcalpha, ga_dcbeta cdef char ta_char = 'N' cdef char tb_char = 'N' if ta: ta_char = 'T' if tb: tb_char = 'T' if gtype == C_INT: raise TypeError, "C_INT not supported" elif gtype == C_LONG: raise TypeError, "C_LONG not supported" elif gtype == C_LONGLONG: raise TypeError, "C_LONGLONG not supported" elif gtype == C_FLOAT: falpha = alpha fbeta = beta GA_Sgemm64(ta_char, tb_char, m, n, k, falpha, g_a, g_b, fbeta, g_c) elif gtype == C_DBL: dalpha = alpha dbeta = beta GA_Dgemm64(ta_char, tb_char, m, n, k, dalpha, g_a, g_b, dbeta, g_c) elif gtype == C_LDBL: raise TypeError, "C_LDBL not supported" elif gtype == C_SCPL: fcalpha = alpha fcbeta = beta ga_fcalpha.real = fcalpha.real ga_fcalpha.imag = fcalpha.imag ga_fcbeta.real = fcbeta.real ga_fcbeta.imag = fcbeta.imag GA_Cgemm64(ta_char, tb_char, m, n, k, ga_fcalpha, g_a, g_b, ga_fcbeta, g_c) elif gtype == C_DCPL: dcalpha = alpha dcbeta = beta ga_dcalpha.real = dcalpha.real ga_dcalpha.imag = dcalpha.imag ga_dcbeta.real = dcbeta.real ga_dcbeta.imag = dcbeta.imag GA_Zgemm64(ta_char, tb_char, m, n, k, ga_dcalpha, g_a, g_b, ga_dcbeta, g_c) elif gtype == C_LDCPL: raise TypeError, "C_LDCPL not supported (yet)" else: raise TypeError def get(int g_a, lo=None, hi=None, np.ndarray buffer=None): """Copies data from global array section to the local array buffer. The local array is assumed to be have the same number of dimensions as the global array. Any detected inconsitencies/errors in the input arguments are fatal. This is a one-sided operation. :Parameters: g_a : int the array handle lo : 1D array-like of integers lower bound patch coordinates, inclusive hi : 1D array-like of integers higher bound patch coordinates, exclusive buffer : an ndarray of the appropriate type, large enough to hold lo,hi :returns: The local array buffer. """ return _get_common(g_a, lo, hi, buffer) cdef _get_common(int g_a, lo=None, hi=None, np.ndarray buffer=None, bint nb=False, bint periodic=False, skip=None): """Copies data from global array section to the local array buffer. The local array is assumed to have the same shape as the requested region, or the local array can be 1-dimensional so long as it has the same number of elements as the requested region. Any detected inconsitencies raise a ValueError. This is a one-sided operation. :Parameters: g_a : int the array handle lo : 1D array-like of integers lower bound patch coordinates, inclusive hi : 1D array-like of integers higher bound patch coordinates, exclusive buffer : ndarray should either be 1D and len(buffer)==np.prod(hi-lo), or np.all(buffer.shape == hi-lo) i.e. buffer is 1D and same size as requested region or buffer is the same shape as requested region nb : bool whether this call is non-blocking (see ga.nbget) periodic : bool whether this call is periodic (see ga.periodic_get) skip : 1D array-like of integers strides for each dimension :returns: The local array buffer (and the nonblocking handle if nb=True.) """ cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd, ld_nd, shape, skip_nd cdef int gtype=inquire_type(g_a) cdef ga_nbhdl_t nbhandle dtype = _to_dtype[gtype] lo_nd,hi_nd = _lohi(g_a,lo,hi) shape = hi_nd-lo_nd+1 if skip is None: skip_nd = None else: skip_nd = _inta64(skip) shape = (hi_nd-lo_nd)/skip_nd+1 if buffer is None: buffer = np.ndarray(shape, dtype=dtype) elif buffer.dtype != dtype: raise ValueError, "buffer is wrong type :: buffer=%s != %s" % ( buffer.dtype, dtype) # Due to GA restrictions, buffer must not have negative strides # and buffer's last stride must be same as itemsize strides = [buffer.strides[i]/buffer.itemsize for i in range(buffer.ndim)] if strides[-1] != 1: raise ValueError, "first dimension of buffer cannot be strided" if np.any(np.asarray(strides) < 0): raise ValueError, "buffer cannot have negative strides" # we allow 1-d "flat" buffers in addition to buffers matching the shape of # requested region if buffer.ndim == 1: if buffer.size != np.prod(shape): raise ValueError, ('buffer size does not match shape :: ' 'buffer.size=%s != np.prod(shape)=%s' % ( buffer.size, np.prod(shape))) ld_nd = shape[1:] else: buffer_shape = [buffer.shape[i] for i in range(buffer.ndim)] if not np.all(buffer_shape == shape): raise ValueError, ('buffer shape does not match request shape :: ' 'buffer_shape=%s != shape=%s' % ( buffer_shape, shape)) ld_nd = np.asarray([strides[i]/strides[i+1] for i in range(buffer.ndim-1)], dtype=np.int64) if nb: NGA_NbGet64(g_a, lo_nd.data, hi_nd.data, buffer.data, ld_nd.data, &nbhandle) return buffer,nbhandle elif periodic: NGA_Periodic_get64(g_a, lo_nd.data, hi_nd.data, buffer.data, ld_nd.data) return buffer elif skip is not None: NGA_Strided_get64(g_a, lo_nd.data, hi_nd.data, skip_nd.data, buffer.data, ld_nd.data) return buffer else: NGA_Get64(g_a, lo_nd.data, hi_nd.data, buffer.data, ld_nd.data) return buffer def get_block_info(int g_a): """Returns information about the block-cyclic distribution. The number of blocks along each of the array axes are returned in the array num_blocks and the dimensions of the individual blocks, specified in the ga.set_block_cyclic or ga.set_block_cyclic_proc_grid subroutines, are returned in block_dims. This is a local function. :Parameters: g_a : int the array handle :returns: The number of blocks along each of the array axes and the dimensions of thet individual blocks, in that order, as ndarrays. """ cdef np.ndarray[np.int32_t, ndim=1] num_blocks, block_dims cdef int ndim = GA_Ndim(g_a) num_blocks = np.zeros(ndim, dtype=np.int32) block_dims = np.zeros(ndim, dtype=np.int32) GA_Get_block_info(g_a, num_blocks.data, block_dims.data) return num_blocks,block_dims def get_diag(int g_a, int g_v): """Inserts the diagonal elements of this matrix g_a into the vector g_v. This is a collective operation. :Parameters: g_a : int the array handle """ GA_Get_diag(g_a, g_v) def get_debug(): """Returns the value of an internal flag in the GA library whose value can be set using the ga.set_debug() subroutine. This is a local operation. """ return GA_Get_debug() def gop(X, char *op): """Global operation. X(1:N) is a vector present on each process. gop 'sums' elements of X accross all nodes using the commutative operator op. The result is broadcast to all nodes. Supported operations include '+', '*', 'max', 'min', 'absmax', 'absmin'. The use of lowerecase for operators is necessary. X must be a contiguous array-like. X is not guaranteed to be modified in-place so use as: >>> value = ga.gop((1,2,3), "+") This operation is provided only for convenience purposes: it is available regardless of the message-passing library that GA is running with. This is a collective operation. """ cdef np.ndarray X_nd = np.asarray(X) cdef int size = 0 if not X_nd.flags['C_CONTIGUOUS']: raise ValueError, "X must be contiguous" try: size = len(X_nd) except TypeError: size = 1 if X_nd.dtype == np.dtype(np.intc): GA_Igop(X_nd.data, size, op) elif X_nd.dtype == np.dtype(np.long): GA_Lgop(X_nd.data, size, op) elif X_nd.dtype == np.dtype(np.longlong): GA_Llgop(X_nd.data, size, op) elif X_nd.dtype == np.dtype(np.single): GA_Fgop(X_nd.data, size, op) elif X_nd.dtype == np.dtype(np.double): GA_Dgop(X_nd.data, size, op) elif X_nd.dtype == np.dtype(np.complex64): GA_Cgop(X_nd.data, size, op) elif X_nd.dtype == np.dtype(np.complex128): GA_Zgop(X_nd.data, size, op) else: raise TypeError, "type not supported by ga.gop %s" % X_nd.dtype return X_nd def gop_add(X): return gop(X, "+") def gop_multiply(X): return gop(X, "*") def gop_max(X): return gop(X, "max") def gop_min(X): return gop(X, "min") def gop_absmax(X): return gop(X, "absmax") def gop_absmin(X): return gop(X, "absmin") def has_ghosts(int g_a): """Determines whether any dimension of the given array has ghost cells. This is a collective operation. :Parameters: g_a : int the array handle :returns: True if the global array has some dimensions for which the ghost cell width is greater than zero, it returns False otherwise. """ if GA_Has_ghosts(g_a) == 1: return True return False def init_fence(): """Initializes tracing of completion status of data movement operations. This operation is local. """ GA_Init_fence() def initialize(): """Allocates and initializes internal data structures in Global Arrays. This is a collective operation. """ import atexit global _initialized GA_Initialize() GA_Register_stack_memory(_gapy_malloc, _gapy_free) atexit.register(terminate) _initialized = True def initialize_ltd(size_t limit): """Allocates and initializes internal data structures and sets limit for memory used in global arrays. The limit is per process: it is the amount of memory that the given processor can contribute to collective allocation of global arrays. It does not include temporary storage that GA might be allocating (and releasing) during execution of a particular operation. limit = 0 means "allow unlimited memory usage" in which case this operation is equivalent to GA_initialize. This is a collective operation. """ global _initialized GA_Initialize_ltd(limit) _initialized = True def initialized(): """Returns whether ga has been initialized.""" return _initialized cpdef inquire(int g_a): cdef int gtype cdef int ndim = GA_Ndim(g_a) cdef np.ndarray[np.int64_t, ndim=1] dims=np.zeros((ndim), dtype=np.int64) NGA_Inquire64(g_a, >ype, &ndim, dims.data) return gtype,dims cpdef np.ndarray[np.int64_t, ndim=1] inquire_dims(int g_a): cdef int gtype cdef np.ndarray[np.int64_t, ndim=1] dims gtype,dims = inquire(g_a) return dims def inquire_memory(): """Returns amount of memory (in bytes) used in the allocated global arrays on the calling processor. This operation is local. """ return GA_Inquire_memory() def inquire_name(int g_a): """Returns the name of an array represented by the handle g_a. This operation is local. :Parameters: g_a : int the array handle """ return GA_Inquire_name(g_a) cpdef int inquire_type(int g_a): cdef int gtype cdef np.ndarray[np.int64_t, ndim=1] dims gtype,dims = inquire(g_a) return gtype def is_mirrored(int g_a): """Checks whether the array is mirrored. This is a local operation. :returns: True if it is a mirrored array, else returns False. """ if GA_Is_mirrored(g_a) == 1: return True return False def llt_solve(int g_a, int g_b): """Solves a system of linear equations A * X = B using the Cholesky factorization of an NxN double precision symmetric positive definite matrix A (epresented by handle g_a). On successful exit B will contain the solution X. This is a collective operation. :Parameters: g_a : int the coefficient matrix g_b : int the rhs/solution matrix :returns: 0 if successful; >0 if the leading minor of this order is not positive definite and the factorization could not be completed """ return GA_Llt_solve(g_a, g_b) def locate(int g_a, subscript): """Return the GA compute process id that 'owns' the data. If any element of subscript[] is out of bounds "-1" is returned. This operation is local. :Parameters: g_a : int the array handle subscript : 1D array-like of integers len(subscript) should be ndim """ cdef np.ndarray[np.int64_t, ndim=1] subscript_nd subscript_nd = _inta64(subscript) return NGA_Locate64(g_a, subscript_nd.data) def locate_nnodes(int g_a, lo, hi): """Return the number of process which own the specified patch. This operation is local. """ cdef np.ndarray[np.int64_t, ndim=1] lo_nd,hi_nd cdef int result lo_nd,hi_nd = _lohi(g_a,lo,hi) return NGA_Locate_nnodes64(g_a, lo_nd.data, hi_nd.data) def locate_region(int g_a, lo, hi): """Return the list of the GA processes id that 'own' the data. Parts of the specified patch might be actually 'owned' by several processes. If lo/hi are out of bounds "0" is returned, otherwise return value is equal to the number of processes that hold the data . map[i][0] - lo[ndim] map[i][1] - hi[ndim] procs[i] - processor id that owns data in patch lo[i]:hi[i] This operation is local. """ cdef np.ndarray[np.int64_t, ndim=1] lo_nd cdef np.ndarray[np.int64_t, ndim=1] hi_nd cdef np.ndarray[np.int64_t, ndim=1] map cdef np.ndarray[np.int64_t, ndim=3] map_reshape cdef np.ndarray[np.int32_t, ndim=1] procs cdef int np_result cdef int np_guess cdef int ndim = GA_Ndim(g_a) lo_nd,hi_nd = _lohi(g_a,lo,hi) np_guess = NGA_Locate_nnodes64( g_a, lo_nd.data, hi_nd.data) map = np.ndarray(np_guess*ndim*2, dtype=np.int64) procs = np.ndarray(np_guess, dtype=np.int32) np_result = NGA_Locate_region64(g_a, lo_nd.data, hi_nd.data, map.data, procs.data) assert(np_guess == np_result) # TODO then slice it and reshape to something useful? map_reshape = map.reshape(np_result,2,ndim) # need to add 1 to every 'hi' value map_reshape[:,1,:] += 1 return map_reshape,procs def lock(int mutex): """Locks a mutex object identified by the mutex number. It is a fatal error for a process to attempt to lock a mutex which was already locked by this process. """ GA_Lock(mutex) def lu_solve(int g_a, int g_b, bint trans=False): """Solve the system of linear equations op(A)X = B based on the LU factorization. op(A) = A or A' depending on the parameter trans trans = False means that the transpose operator should not be applied. trans = True means that the transpose operator should be applied. Matrix A is a general real matrix. Matrix B contains possibly multiple rhs vectors. The array associated with the handle g_b is overwritten by the solution matrix X. This is a collective operation. :Parameters: g_a : int the array handle for the coefficient matrix g_b : int the array handle for the solution matrix trans : bool transpose (True) or not transpose (False) """ cdef char ctrans = 'N' if trans: ctrans = 'T' GA_Lu_solve(ctrans, g_a, g_b) def mask_sync(bint first, bint last): """This subroutine can be used to remove synchronization calls from around collective operations. Setting the parameter first=False removes the synchronization prior to the collective operation, setting last=False removes the synchronization call after the collective operation. This call is applicable to all collective operations. It most be invoked before each collective operation. This is a collective operation. :Parameters: first : bool mask for prior internal synchronization last : bool mask for post internal synchronization """ GA_Mask_sync(first,last) def matmul_patch(bint transa, bint transb, alpha, beta, int g_a, alo, ahi, int g_b, blo, bhi, int g_c, clo, chi): """An n-dimensional patch version of ga_dgemm. C[clo[]:chi[]] := alpha * AA[alo[]:ahi[]] * BB[blo[]:bhi[]] ) + beta*C[clo[]:chi[]], where AA = op(A), BB = op(B), and op( X ) is one of op( X ) = X or op( X ) = X', It works for both double and DoubleComplex data tape. This is a collective operation. """ cdef np.ndarray[np.int64_t, ndim=1] alo_nd, ahi_nd cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd cdef int gtype=inquire_type(g_a) cdef int ialpha, ibeta cdef long lalpha, lbeta cdef long long llalpha, llbeta cdef float falpha, fbeta cdef double dalpha, dbeta cdef long double ldalpha, ldbeta cdef SingleComplex fcalpha, fcbeta cdef DoubleComplex dcalpha, dcbeta cdef void *valpha, *vbeta cdef char char_transa = 'N' cdef char char_transb = 'N' if alpha is None: alpha = 1 valpha = _convert_multiplier(gtype, alpha, &ialpha, &lalpha, &llalpha, &falpha, &dalpha, &ldalpha, &fcalpha, &dcalpha) if beta is None: beta = 1 vbeta = _convert_multiplier(gtype, beta, &ibeta, &lbeta, &llbeta, &fbeta, &dbeta, &ldbeta, &fcbeta, &dcbeta) alo_nd,ahi_nd = _lohi(g_a,alo,ahi) blo_nd,bhi_nd = _lohi(g_b,blo,bhi) clo_nd,chi_nd = _lohi(g_c,clo,chi) if transa: char_transa = 'T' if transb: char_transb = 'T' NGA_Matmul_patch64(char_transa, char_transb, valpha, vbeta, g_a, alo_nd.data, ahi_nd.data, g_b, blo_nd.data, bhi_nd.data, g_c, clo_nd.data, chi_nd.data) def median(int g_a, int g_b, int g_c, int g_m, alo=None, ahi=None, blo=None, bhi=None, clo=None, chi=None, mlo=None, mhi=None): """Computes the componentwise Median of three arrays or patches g_a, g_b, and g_c, and stores the result in this array or patch g_m. The result (m) may replace one of the input arrays (a/b/c). This is a collective operation. :Parameters: g_a : int the array handle g_b : int the array handle g_c : int the array handle g_m : int the array handle for the result alo : 1D array-like of integers lower bound patch coordinates of g_a, inclusive ahi : 1D array-like of integers higher bound patch coordinates of g_a, exclusive blo : 1D array-like of integers lower bound patch coordinates of g_b, inclusive bhi : 1D array-like of integers higher bound patch coordinates of g_b, exclusive clo : 1D array-like of integers lower bound patch coordinates of g_c, inclusive chi : 1D array-like of integers higher bound patch coordinates of g_c, exclusive mlo : 1D array-like of integers lower bound patch coordinates of g_m, inclusive mhi : 1D array-like of integers higher bound patch coordinates of g_m, exclusive """ cdef np.ndarray[np.int64_t, ndim=1] alo_nd, ahi_nd cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd cdef np.ndarray[np.int64_t, ndim=1] clo_nd, chi_nd cdef np.ndarray[np.int64_t, ndim=1] mlo_nd, mhi_nd if (alo is None and ahi is None and blo is None and bhi is None and clo is None and chi is None and mlo is None and mhi is None): GA_Median(g_a, g_b, g_c, g_m) else: alo_nd,ahi_nd = _lohi(g_a,alo,ahi) blo_nd,bhi_nd = _lohi(g_b,blo,bhi) clo_nd,chi_nd = _lohi(g_c,clo,chi) mlo_nd,mhi_nd = _lohi(g_m,mlo,mhi) GA_Median_patch64( g_a, alo_nd.data, ahi_nd.data, g_b, blo_nd.data, bhi_nd.data, g_c, clo_nd.data, chi_nd.data, g_m, mlo_nd.data, mhi_nd.data) def memory_avail(): """Returns amount of memory (in bytes) left for allocation of new global arrays on the calling processor. Note: If ga.uses_ma() returns True, then ga.memory_avail() returns the lesser of the amount available under the GA limit and the amount available from MA (according to ma.inquire_avail() operation). If no GA limit has been set, it returns what MA says is available. If ( ! ga.uses_ma() && ! ga.memory_limited() ) returns < 0, indicating that the bound on currently available memory cannot be determined. This operation is local. """ return GA_Memory_avail() def memory_limited(): """Indicates if limit is set on memory usage in Global Arrays on the calling processor. This operation is local. :returns: True for "yes", False for "no" """ if 1 == GA_Memory_limited(): return True return False def merge_distr_patch(int g_a, alo, ahi, int g_b, blo, bhi): """This function merges all copies of a patch of a mirrored array (g_a) into a patch in a distributed array (g_b). This is a collective operation. :Parameters: g_a : int array handle alo : 1D array-like of integers g_a patch coordinate ahi : 1D array-like of integers g_a patch coordinate g_b : int array handle blo : 1D array-like of integers g_b patch coordinate bhi : 1D array-like of integers g_b patch coordinate """ cdef np.ndarray[np.int64_t, ndim=1] alo_nd, ahi_nd cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd alo_nd,ahi_nd = _lohi(g_a,alo,ahi) blo_nd,bhi_nd = _lohi(g_b,blo,bhi) NGA_Merge_distr_patch64( g_a, alo_nd.data, ahi_nd.data, g_b, blo_nd.data, bhi_nd.data) def merge_mirrored(int g_a): """This subroutine merges mirrored arrays by adding the contents of each array across nodes. The result is that the each mirrored copy of the array represented by g_a is the sum of the individual arrays before the merge operation. After the merge, all mirrored arrays are equal. This is a collective operation. :Parameters: g_a : int array handle """ GA_Merge_mirrored(g_a) def nbacc(int g_a, buffer, lo=None, hi=None, alpha=None): """Non-blocking version of ga.acc. The accumulate operation can be completed locally by making a call to the ga.nbwait() routine. Combines data from buffer with data in the global array patch. The buffer array is assumed to be have the same number of dimensions as the global array. If the buffer is not contiguous, a contiguous copy will be made. global array section (lo[],hi[]) += alpha * buffer This is a non-blocking and one-sided and atomic operation. :Parameters: g_a : int the array handle buffer : array-like must be contiguous and have same number of elements as patch lo : 1D array-like of integers lower bound patch coordinates, inclusive hi : 1D array-like of integers higher bound patch coordinates, exclusive alpha : object multiplier (converted to the appropriate type) :returns: The non-blocking request handle. """ return _acc_common(g_a, buffer, lo, hi, alpha, True) def nbget(int g_a, lo=None, hi=None, np.ndarray buffer=None): """Non-blocking version of the blocking ga.get operation. The get operation can be completed locally by making a call to the ga.nbwait() routine. Copies data from global array section to the local array buffer. The local array is assumed to be have the same number of dimensions as the global array. Any detected inconsitencies/errors in the input arguments are fatal. This is a non-blocking and one-sided operation. :Parameters: g_a : int the array handle lo : 1D array-like of integers lower bound patch coordinates, inclusive hi : 1D array-like of integers higher bound patch coordinates, exclusive buffer : ndarray Fill this buffer instead of allocating a new one internally. Must be contiguous and have same number of elements as patch. :returns: The local array buffer. """ return _get_common(g_a, lo, hi, buffer, True) def nblock(int g_a): """Returns the number of partitions of each array dimension for g_a. This operation is local. :Parameters: g_a : int array handle """ cdef np.ndarray[np.int32_t, ndim=1] nblock_nd cdef int ndim = GA_Ndim(g_a) nblock_nd = np.zeros(ndim, dtype=np.intc) GA_Nblock(g_a, nblock_nd.data) return nblock_nd def nbput(int g_a, buffer, lo=None, hi=None): """Non-blocking version of the blocking put operation. The put operation can be completed locally by making a call to the ga.nbwait() routine. Copies data from local array buffer to the global array section. The local array is assumed to be have the same number of dimensions as the global array. Any detected inconsitencies/errors in input arguments are fatal. This is a one-sided operation. :Parameters: g_a : int the array handle buffer : array-like the data to put lo : 1D array-like of integers lower bound patch coordinates, inclusive hi : 1D array-like of integers higher bound patch coordinates, exclusive """ return _put_common(g_a, buffer, lo, hi, True, False) def nbwait(ga_nbhdl_t nbhandle): """This function completes a non-blocking one-sided operation locally. Waiting on a nonblocking put or an accumulate operation assures that data was injected into the network and the user buffer can be now be reused. Completing a get operation assures data has arrived into the user memory and is ready for use. Wait operation ensures only local completion. Unlike their blocking counterparts, the nonblocking operations are not ordered with respect to the destination. Performance being one reason, the other reason is that by ensuring ordering we incur additional and possibly unnecessary overhead on applications that do not require their operations to be ordered. For cases where ordering is necessary, it can be done by calling a fence operation. The fence operation is provided to the user to confirm remote completion if needed. """ NGA_NbWait(&nbhandle) def ndim(int g_a): """Returns the number of dimensions in array represented by the handle g_a. This operation is local. :Parameters: g_a : int the array handle :returns: the number of dimensions in the array g_a """ return GA_Ndim(g_a) def nnodes(): """Returns the number of the GA compute (user) processes. This operation is local. :returns: the number of GA compute (user) processes """ return GA_Nnodes() def nodeid(): """Returns the GA process id (0, ..., ga.nnodes()-1) of the requesting compute process. This operation is local. :returns: the GA process id """ return GA_Nodeid() def norm1(int g_a): """Computes the 1-norm of the matrix or vector g_a. This is a collective operation. :Parameters: g_a : int the array handle :returns: the 1-norm of the matrix or vector g_a (as a float) """ cdef double nm GA_Norm1(g_a, &nm) return nm def norm_infinity(int g_a): """Computes the 1-norm of the matrix or vector g_a. This is a collective operation. :Parameters: g_a : int the array handle :returns: the 1-norm of the matrix or vector g_a """ cdef double nm GA_Norm_infinity(g_a, &nm) return nm def enum(int g_a, lo=None, hi=None, start=None, inc=None): """This subroutine enumerates the values of an array between elements lo and hi starting with the value istart and incrementing each subsequent value by inc. This operation is only applicable to 1-dimensional arrays. An example of its use is shown below: ga.enum(g_a, 1, n, 7, 2) # g_a: 7 9 11 13 15 17 19 21 23 ... This is a collective operation. :Parameters: g_a : int the array handle lo : 1D array-like of integers patch coordinate hi : 1D array-like of integers patch coordinate start : object starting value of enumeration (converted to appropriate type) inc : object increment value (converted to appropriate type) """ cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_a)-1 cdef int64_t c_lo=0, c_hi=hi_nd[0] cdef int gtype=inquire_type(g_a) cdef int istart, iinc cdef long lstart, linc cdef long long llstart, llinc cdef float fstart, finc cdef double dstart, dinc cdef long double ldstart, ldinc cdef SingleComplex fcstart, fcinc cdef DoubleComplex dcstart, dcinc cdef void *vstart=NULL, *vinc=NULL if lo is not None: c_lo = lo if hi is not None: c_hi = hi if start is None: start = 1 if inc is None: inc = 1 vstart = _convert_multiplier(gtype, start, &istart, &lstart, &llstart, &fstart, &dstart, &ldstart, &fcstart, &dcstart) vinc = _convert_multiplier(gtype, inc, &iinc, &linc, &llinc, &finc, &dinc, &ldinc, &fcinc, &dcinc) GA_Patch_enum64(g_a, c_lo, c_hi, vstart, vinc) def pack(int g_src, int g_dst, int g_msk, lo=None, hi=None): """The pack subroutine is designed to compress the values in the source vector g_src into a smaller destination array g_dst based on the values in an integer mask array g_msk. The values lo and hi denote the range of elements that should be compressed and the number of values placed in the compressed array is returned. This operation is the complement of the ga.unpack operation. An example is shown below:: icount = ga.pack(g_src, g_dst, g_msk, 1, n); # g_msk: 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0 # g_src: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # g_dst: 1 7 9 12 15 16 # icount: 6 This is a collective operation. :Parameters: g_src : int handle for source arrray g_dst : int handle for destination array g_msk : int handle for integer array representing mask lo : 1D array-like of integers low value of range on which operation is performed hi : 1D array-like of integers hi value of range on which operation is performed """ cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_src)-1 cdef int64_t c_lo=0, c_hi=hi_nd[0], icount if lo is not None: c_lo = lo if hi is not None: c_hi = hi GA_Pack64(g_src, g_dst, g_msk, lo, hi, &icount) return icount def periodic_acc(int g_a, buffer, lo=None, hi=None, alpha=None): """Periodic version of ga.acc. The indices can extend beyond the array boundary/dimensions in which case the libray wraps them around. Combines data from buffer with data in the global array patch. The buffer array is assumed to be have the same number of dimensions as the global array. If the buffer is not contiguous, a contiguous copy will be made. global array section (lo[],hi[]) += alpha * buffer This is a one-sided and atomic operation. :Parameters: g_a : int the array handle buffer : array-like must be contiguous and have same number of elements as patch lo : 1D array-like of integers lower bound patch coordinates, inclusive hi : array-like of integers higher bound patch coordinates, exclusive alpha : object multiplier (converted to the appropriate type) """ _acc_common(g_a, buffer, lo, hi, alpha, False, True) def periodic_get(int g_a, lo=None, hi=None, np.ndarray buffer=None): """Periodic version of ga.get. The indices can extend beyond the array boundary/dimensions in which case the libray wraps them around. Copies data from global array section to the local array buffer. The local array is assumed to be have the same number of dimensions as the global array. Any detected inconsitencies/errors in the input arguments are fatal. This is a one-sided operation. :Parameters: g_a : int the array handle lo : 1D array-like of integers lower bound patch coordinates, inclusive hi : array-like of integers higher bound patch coordinates, exclusive buffer : array-like must be contiguous and have same number of elements as patch :returns: The local array buffer. """ return _get_common(g_a, lo, hi, buffer, False, True) def periodic_put(int g_a, buffer, lo=None, hi=None): """Periodic version of ga.put. The indices can extend beyond the array boundary/dimensions in which case the libray wraps them around. Copies data from local array buffer to the global array section. The local array is assumed to be have the same number of dimensions as the global array. Any detected inconsitencies/errors in input arguments are fatal. This is a one-sided operation. :Parameters: g_a : int the array handle buffer : array-like the data to put lo : 1D array-like of integers lower bound patch coordinates, inclusive hi : array-like of integers higher bound patch coordinates, exclusive """ _put_common(g_a, buffer, lo, hi, False, True) def pgroup_absolute_id(int pgroup, int pid): """TODO""" return GA_Pgroup_absolute_id(pgroup, pid) def pgroup_brdcst(int pgroup, buffer, int root=0): """Broadcast from process root to all other processes in the same group. If the buffer is not contiguous, an error is raised. This operation is provided only for convenience purposes: it is available regardless of the message-passing library that GA is running with. This is a collective operation. :Parameters: pgroup : int processor group handle buffer : array-like the message root : int the process which is sending :returns: The buffer in case a temporary was passed in. """ cdef np.ndarray buffer_nd buffer_nd = np.asarray(buffer) if not buffer_nd.flags['C_CONTIGUOUS']: raise ValueError, "the buffer must be contiguous" #if buffer_nd.ndim != 1: # raise ValueError, "the buffer must be one-dimensional" GA_Pgroup_brdcst(pgroup, buffer_nd.data, buffer_nd.size*buffer_nd.itemsize, root) return buffer_nd def pgroup_create(list): """Creates a processor group. At present, it must be invoked by all processors in the current default processor group. The list of processors use the indexing scheme of the default processor group. If the default processor group is the world group, then these indices are the usual processor indices. This function returns a process group handle that can be used to reference this group by other functions. This is a collective operation on the default processor group. """ cdef np.ndarray[np.int32_t, ndim=1] list_nd list_nd = _inta32(list) return GA_Pgroup_create(list_nd.data, len(list_nd)) def pgroup_destroy(int pgroup): """Frees up a processor group handle. This is a collective operation on the default processor group. :returns: True if the handle was previously active. False if the handle was not previously active. """ if 0 == GA_Pgroup_destroy(pgroup): return False return True def pgroup_get_default(): """Returns a handle to the default processor group. The return value can then be used to create a global array using one of the ga.create or ga.set_pgroup calls. This is a local operation. """ return GA_Pgroup_get_default() def pgroup_get_mirror(): """Returns a handle to the mirrored processor group. The return value can then be used to create a global array using one of the ga.create or ga.set_pgroup calls. This is a local operation. """ return GA_Pgroup_get_mirror() def pgroup_get_world(): """Returns a handle to the world processor group. The return value can then be used to create a global array using one of the ga.create or ga.set_pgroup calls. This is a local operation. """ return GA_Pgroup_get_world() def pgroup_gop(int pgroup, X, char *op): """Global operation. X(1:N) is a vector present on each process in the group. gop 'sums' elements of X accross all nodes using the commutative operator op. The result is broadcast to all nodes. Supported operations include '+', '*', 'max', 'min', 'absmax', 'absmin'. The use of lowerecase for operators is necessary. X must be a contiguous array-like. X is not guaranteed to be modified in-place so use as: >>> value = ga.gop((1,2,3), "+") This operation is provided only for convenience purposes: it is available regardless of the message-passing library that GA is running with. This is a collective operation. """ cdef np.ndarray X_nd = np.asarray(X) if not X_nd.flags['C_CONTIGUOUS']: raise ValueError, "X must be contiguous" if X_nd.dtype == np.intc: GA_Pgroup_igop(pgroup, X_nd.data, len(X_nd), op) elif X_nd.dtype == np.long: GA_Pgroup_lgop(pgroup, X_nd.data, len(X_nd), op) elif X_nd.dtype == np.longlong: GA_Pgroup_llgop(pgroup, X_nd.data, len(X_nd), op) elif X_nd.dtype == np.single: GA_Pgroup_fgop(pgroup, X_nd.data, len(X_nd), op) elif X_nd.dtype == np.double: GA_Pgroup_dgop(pgroup, X_nd.data, len(X_nd), op) elif X_nd.dtype == np.complex64: GA_Pgroup_cgop(pgroup, X_nd.data, len(X_nd), op) elif X_nd.dtype == np.complex128: GA_Pgroup_zgop(pgroup, X_nd.data, len(X_nd), op) else: raise TypeError, "type not supported by ga.pgroup_gop %s" % X_nd.dtype return X_nd def pgroup_gop_add(int pgroup, X): return pgroup_gop(pgroup, X, "+") def pgroup_gop_multiply(int pgroup, X): return pgroup_gop(pgroup, X, "*") def pgroup_gop_max(int pgroup, X): return pgroup_gop(pgroup, X, "max") def pgroup_gop_min(int pgroup, X): return pgroup_gop(pgroup, X, "min") def pgroup_gop_absmax(int pgroup, X): return pgroup_gop(pgroup, X, "absmax") def pgroup_gop_absmin(int pgroup, X): return pgroup_gop(pgroup, X, "absmin") def pgroup_nnodes(int pgroup=-1): """Returns the number of processors contained in the group specified by pgroup. This is a local local operation. :Parameters: pgroup : int the group handle """ if pgroup < 0: pgroup = pgroup_get_default() return GA_Pgroup_nnodes(pgroup) def pgroup_nodeid(int pgroup=-1): """Returns the relative index of the processor in the processor group specified by pgroup. This index will generally differ from the absolute processor index returned by ga.nodeid if the processor group is not the world group. This is a local operation. :Parameters: pgroup : int the group handle """ if pgroup < 0: pgroup = pgroup_get_default() return GA_Pgroup_nodeid(pgroup) def pgroup_set_default(int pgroup=-1): """Resets the default processor group on a collection of processors. All processors in the group referenced by p_handle must make a call to this function. Any standard global array call that is made after resetting the default processor group will be restricted to processors in that group. Global arrays that are created after resetting the default processor group will only be defined on that group and global operations such as ga.sync or ga.gop will be restricted to processors in that group. The ga.pgroup_set_default call can be used to rapidly convert large applications, written with GA, into routines that run on processor groups. The default processor group can be overridden by using GA calls that require an explicit group handle as one of the arguments. This is a collective operation on the group represented by the handle pgroup. """ if pgroup < 0: pgroup = pgroup_get_world() GA_Pgroup_set_default(pgroup) def pgroup_split(int pgroup, int num_group): """TODO""" return GA_Pgroup_split(pgroup, num_group) def pgroup_split_irreg(int pgroup, int color): """TODO""" return GA_Pgroup_split_irreg(pgroup, color) def pgroup_sync(int pgroup=-1): """Executes a synchronization group across the processors in the processor group specified by pgroup. Nodes outside this group are unaffected. This is a collective operation on the processor group specified by pgroup. """ if pgroup < 0: pgroup = pgroup_get_default() GA_Pgroup_sync(pgroup) def print_distribution(int g_a): """Prints the array distribution. This is a collective operation. """ GA_Print_distribution(g_a) def print_file(int g_a, file): """Prints an entire array to a file. This is a collective operation. :Parameters: file : file-like file-like object which must implement fileno(), or a string g_a : int the array handle """ #GA_Print_file(file.fileno(), g_a) raise NotImplementedError def print_patch(int g_a, lo=None, hi=None, bint pretty=True): """Prints a patch of g_a array to the standard output. If pretty is False then output is printed in a dense fashion. If pretty is True then output is formatted and rows/columns labeled. This is a collective operation. """ cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd cdef int apretty=0 lo_nd,hi_nd = _lohi(g_a,lo,hi) if pretty: apretty = 1 NGA_Print_patch64(g_a, lo_nd.data, hi_nd.data, apretty) def print_stats(): """This non-collective (MIMD) operation prints information about: * number of calls to the GA create/duplicate, destroy, get, put, * scatter, gather, and read_and_inc operations * total amount of data moved in the GA primitive operations * amount of data moved in GA primitive operations to logicaly * remote locations * maximum memory consumption in global arrays, and * number of requests serviced in the interrupt-driven * implementations by the calling process. This operation is local. """ GA_Print_stats() def print_stdout(int g_a): """Prints an entire array to the standard output.""" GA_Print(g_a) def proc_topology(int g_a, int proc): """Based on the distribution of an array associated with handle g_a, determines coordinates of the specified processor in the virtual processor grid corresponding to the distribution of array g_a. The numbering starts from 0. The values of -1 means that the processor doesn't 'own' any section of array represented by g_a. This operation is local. """ cdef int ndim = GA_Ndim(g_a) cdef np.ndarray[np.int32_t, ndim=1] coord coord = np.zeros(ndim, dtype=np.intc) NGA_Proc_topology(g_a, proc, coord.data) return coord def put(int g_a, buffer, lo=None, hi=None): """Copies data from local array buffer to the global array section. The local array is assumed to be have the same number of dimensions as the global array. Any detected inconsitencies/errors in input arguments are fatal. This is a one-sided operation. :Parameters: g_a : int the array handle buffer : array-like the data to put lo : 1D array-like of integers lower bound patch coordinates, inclusive hi : array-like of integers higher bound patch coordinates, exclusive """ _put_common(g_a, buffer, lo, hi) cdef _put_common(int g_a, buffer, lo=None, hi=None, bint nb=False, bint periodic=False, skip=None): """Copies data from local array buffer to the global array section. The local array is assumed to have the same shape as the requested region, or the local array can be 1-dimensional so long as it has the same number of elements as the requested region. Any detected inconsitencies raise a ValueError. This is a one-sided operation. :Parameters: g_a : int the array handle buffer : array-like the data to put; should either be 1D and len(buffer)==np.prod(hi-lo), or np.all(buffer.shape == hi-lo) i.e. buffer is 1D and same size as requested region or buffer is the same shape as requested region lo : 1D array-like of integers lower bound patch coordinates, inclusive hi : array-like of integers higher bound patch coordinates, exclusive nb : bool whether this call is non-blocking (see ga.nbget) periodic : bool whether this call is periodic (see ga.periodic_get) skip : 1D array-like of integers strides for each dimension :returns: None, usually. However if nb=True, the nonblocking handle is returned. """ cdef np.ndarray buffer_nd cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd, ld_nd, shape, skip_nd cdef int gtype=inquire_type(g_a) cdef ga_nbhdl_t nbhandle dtype = _to_dtype[gtype] lo_nd,hi_nd = _lohi(g_a,lo,hi) shape = hi_nd-lo_nd+1 if skip is None: skip_nd = None else: skip_nd = _inta64(skip) shape = (hi_nd-lo_nd)/skip_nd+1 buffer_nd = np.asarray(buffer, dtype=dtype) if buffer_nd.dtype != dtype: raise ValueError, "buffer is wrong type :: buffer=%s != %s" % ( buffer.dtype, dtype) # Due to GA restrictions, buffer must not have negative strides # and buffer's last stride must be same as itemsize strides = [buffer_nd.strides[i]/buffer_nd.itemsize for i in range(buffer_nd.ndim)] if (strides and (strides[-1] != 1 or np.any(np.asarray(strides) < 0))): buffer_nd = np.ascontiguousarray(buffer_nd) # we allow 1-d "flat" buffers in addition to buffers matching the shape of # the requested region if buffer_nd.ndim == 1: if buffer_nd.size != np.prod(shape): raise ValueError, ('buffer size does not match shape :: ' 'buffer.size=%s != np.prod(shape)=%s' % ( buffer_nd.size, np.prod(shape))) ld_nd = shape[1:] else: buffer_shape = [buffer_nd.shape[i] for i in range(buffer_nd.ndim)] if not np.all(buffer_shape == shape): raise ValueError, ('buffer shape does not match request shape :: ' 'buffer_shape=%s != shape=%s' % ( buffer_shape, shape)) ld_nd = np.asarray([strides[i]/strides[i+1] for i in range(buffer_nd.ndim-1)], dtype=np.int64) if nb: NGA_NbPut64(g_a, lo_nd.data, hi_nd.data, buffer_nd.data, ld_nd.data, &nbhandle) return nbhandle elif periodic: NGA_Periodic_put64(g_a, lo_nd.data, hi_nd.data, buffer_nd.data, ld_nd.data) elif skip is not None: NGA_Strided_put64(g_a, lo_nd.data, hi_nd.data, skip_nd.data, buffer_nd.data, ld_nd.data) else: NGA_Put64(g_a, lo_nd.data, hi_nd.data, buffer_nd.data, ld_nd.data) def randomize(int g_a, val=None): """Fill array with random values in [0,val).""" cdef int gtype=inquire_type(g_a) cdef int ival cdef long lval cdef long long llval cdef float fval cdef double dval cdef long double ldval cdef SingleComplex fcval cdef DoubleComplex dcval cdef void *vval=NULL if val is None: val = 1 vval = _convert_multiplier(gtype, val, &ival, &lval, &llval, &fval, &dval, &ldval, &fcval, &dcval) GA_Randomize(g_a, vval) def read_inc(int g_a, subscript, long inc=1): """Atomically read and increment an element in an integer array. This is a one-sided and atomic operation. :Parameters: g_a : int the array handle subscript : 1D array-like of integers index for the referenced element inc : long the increment """ cdef np.ndarray[np.int64_t, ndim=1] subscript_nd subscript_nd = _inta64(subscript) return NGA_Read_inc64(g_a, subscript_nd.data, inc) def register_dtype(dtype): """Creates a new data type based on the given dtype. :Parameters: dtype : dtype the numpy dtype to register """ cdef int gatype dtype = np.dtype(dtype) # just in case it's not really a dtype instance gatype = NGA_Register_type(dtype.itemsize) _to_dtype[gatype] = dtype return gatype def register_type(size_t bytes): """Creates a new data type of size bytes. :Parameters: bytes : size_t the size of the new data type """ return NGA_Register_type(bytes) def recip(int g_a, lo=None, hi=None): """Take element-wise reciprocal of the array or patch. This is a collective operation. """ cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd if lo is None and hi is None: GA_Recip(g_a) else: lo_nd,hi_nd = _lohi(g_a,lo,hi) GA_Recip_patch64(g_a, lo_nd.data, hi_nd.data) def release(int g_a, lo=None, hi=None): """Releases access to a global array when the data was read only. Your code should look like: array = ga.access(g_a) # ga.release(g_a) NOTE: see restrictions specified for ga.access This operation is local. """ _release_common(g_a, lo, hi, False) def release_block(int g_a, int index): """Releases access to the block of data specified by the integer index when data was accessed as read only. This is only applicable to block-cyclic data distributions created using the simple block-cyclic distribution. This is a local operation. """ NGA_Release_block(g_a, index) def release_block_grid(int g_a, subscript): """Releases access to the block of data specified by the subscript array when data was accessed as read only. This is only applicable to block-cyclic data distributions created using the SCALAPACK data distribution. This is a local operation. """ cdef np.ndarray[np.int32_t, ndim=1] subscript_nd subscript_nd = _inta32(subscript) NGA_Release_block_grid(g_a, subscript_nd.data) def release_block_segment(int g_a, int proc): """Releases access to the block of locally held data for a block-cyclic array, when data was accessed as read-only. This is a local operation. """ NGA_Release_block_segment(g_a, proc) cdef _release_common(int g_a, lo, hi, bint update): """TODO""" cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd, lo_dst, hi_dst # first things first, if no data is owned, return silently lo_dst,hi_dst = distribution(g_a) # convet hi_dst back to GA inclusive indexing convention hi_dst -= 1 if lo_dst[0] < 0 or hi_dst[0] < 0: return if lo is not None: lo_nd = _inta64(lo) else: lo_nd = lo_dst if hi is not None: hi_nd = _inta64(hi) else: hi_nd = hi_dst # sanity checks if np.sometrue(lo_nd>hi_nd): raise ValueError,"lo>hi lo=%s hi=%s"%(lo_nd,hi_nd) if np.sometrue(lo_ndhi_dst): raise ValueError,"hi out of bounds hi_dst=%s hi=%s"%(hi_dst,hi_nd) if update: NGA_Release_update64(g_a, lo_nd.data, hi_nd.data) else: NGA_Release64(g_a, lo_nd.data, hi_nd.data) def release_ghost_element(int g_a, subscript): """Releases access to the locally held data for an array with ghost elements, when data was accessed as read-only. This is a local operation. """ cdef np.ndarray[np.int64_t, ndim=1] subscript_nd subscript_nd = _inta64(subscript) NGA_Release_ghost_element64(g_a, subscript_nd.data) def release_ghosts(int g_a): """Releases access to the locally held block of data containing ghost elements, when data was accessed as read-only. This is a local operation. """ NGA_Release_ghosts(g_a) def release_update(int g_a, lo=None, hi=None): """Releases access to the data. It must be used if the data was accessed for writing. NOTE: see restrictions specified for ga.access. This operation is local. """ _release_common(g_a, lo, hi, True) def release_update_block(int g_a, int index): """Releases access to the block of data specified by the integer index when data was accessed in read-write mode. This is only applicable to block-cyclic data distributions created using the simple block-cyclic distribution. This is a local operation. """ NGA_Release_update_block(g_a, index) def release_update_block_grid(int g_a, subscript): """Releases access to the block of data specified by the subscript array when data was accessed in read-write mode. This is only applicable to block-cyclic data distributions created using the SCALAPACK data distribution. This is a local operation. """ cdef np.ndarray[np.int32_t, ndim=1] subscript_nd subscript_nd = _inta32(subscript) NGA_Release_update_block_grid(g_a, subscript_nd.data) def release_update_block_segment(int g_a, int proc): """Releases access to the block of locally held data for a block-cyclic array, when data was accessed as read-only. This is a local operation. """ NGA_Release_update_block_segment(g_a, proc) def release_update_ghost_element(int g_a, subscript): """Releases access to the locally held data for an array with ghost elements, when data was accessed in read-write mode. This is a local operation. """ cdef np.ndarray[np.int64_t, ndim=1] subscript_nd subscript_nd = _inta64(subscript) NGA_Release_update_ghost_element64(g_a, subscript_nd.data) pass def release_update_ghosts(int g_a): """Releases access to the locally held block of data containing ghost elements, when data was accessed in read-write mode. This is a local operation. """ NGA_Release_update_ghosts(g_a) def scale(int g_a, value, lo=None, hi=None): """Scales an array by the constant s. Note that the library is unable to detect errors when the pointed value is of different type than the array. This is a collective operation. """ cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd cdef int gtype=inquire_type(g_a) cdef int ivalue cdef long lvalue cdef long long llvalue cdef float fvalue cdef double dvalue cdef long double ldvalue cdef SingleComplex fcvalue cdef DoubleComplex dcvalue cdef void *vvalue vvalue = _convert_multiplier(gtype, value, &ivalue, &lvalue, &llvalue, &fvalue, &dvalue, &ldvalue, &fcvalue, &dcvalue) if lo is None and hi is None: GA_Scale(g_a, vvalue) else: lo_nd,hi_nd = _lohi(g_a,lo,hi) NGA_Scale_patch64( g_a, lo_nd.data, hi_nd.data, vvalue) def scale_rows(int g_a, int g_v): """Scales the rows of this matrix g_a using the vector g_v. This is a collective operation. """ GA_Scale_rows(g_a, g_v) def scale_cols(int g_a, int g_v): """Scales the columns of this matrix g_a using the vector g_v. This is a collective operation. """ GA_Scale_cols(g_a, g_v) def scan_add(int g_src, int g_dst, int g_msk, lo=None, hi=None, bint excl=False): """Adds successive elements in a source vector g_src and put the results in a destination vector g_dst. The addition will restart based on the values of the integer mask vector g_msk. The scan is performed within the range specified by the integer values lo and hi. Note that this operation can only be applied to 1-dimensional arrays. The excl flag determines whether the sum starts with the value in the source vector corresponding to the location of a 1 in the mask vector (excl=False) or whether the first value is set equal to 0 (excl=True). Some examples of this operation are given below. ga.scan_add(g_src, g_dst, g_msk, 0, n, False); g_msk: 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0 g_src: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 g_dst: 1 3 6 10 16 21 7 15 9 19 30 12 25 39 15 16 33 ga.scan_add(g_src, g_dst, g_msk, 0, n, True); g_msk: 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0 g_src: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 g_dst: 0 1 3 6 10 15 0 7 0 9 19 0 12 25 0 0 16 This is a collective operation. :Parameters: g_src : int handle for source arrray g_dst : int handle for destination array g_msk : int handle for integer array representing mask lo : 1D array-like of integers low value of range on which operation is performed hi : 1D array-like of integers hi value of range on which operation is performed excl : bool whether the first value is set to 0 (see above) """ cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_src)-1 cdef int64_t c_lo=0, c_hi=hi_nd[0] cdef int c_excl=0 if lo is not None: c_lo = lo if hi is not None: c_hi = hi if excl: c_excl = 1 GA_Scan_add64(g_src, g_dst, g_msk, c_lo, c_hi, c_excl) def scan_copy(int g_src, int g_dst, int g_msk, lo=None, hi=None): """This subroutine does a segmented scan-copy of values in the source array g_src into a destination array g_dst with segments defined by values in the integer mask array g_msk. The scan-copy operation is only applied to the range between the lo and hi indices. This operation is restriced to 1-dimensional arrays. The resulting destination array will consist of segments of consecutive elements with the same value. An example is shown below GA_Scan_copy(g_src, g_dst, g_msk, 0, n); g_msk: 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0 g_src: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 g_dst: 1 1 1 1 1 1 7 7 9 9 9 12 12 12 15 16 16 This is a collective operation. """ cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_src)-1 cdef int64_t c_lo=0, c_hi=hi_nd[0] cdef int c_excl=0 if lo is not None: c_lo = lo if hi is not None: c_hi = hi GA_Scan_copy64(g_src, g_dst, g_msk, c_lo, c_hi) def scatter(int g_a, values, subsarray): """Scatters array elements from a global array into a local array. subsarray will be converted to an ndarray if it is not one already. A two-dimensional array is allowed so long as its shape is (n,ndim) where n is the number of elements to gather and ndim is the number of dimensions of the target array. Also, subsarray must be contiguous. For example, if the subsarray were two-dimensional:: for k in range(n): v[k] = g_a[subsarray[k,0],subsarray[k,1],subsarray[k,2]...] For example, if the subsarray were one-dimensional:: for k in range(n): base = n*ndim v[k] = g_a[subsarray[base+0],subsarray[base+1],subsarray[base+2]...] This is a one-sided operation. """ cdef np.ndarray[np.int64_t, ndim=1] subsarray1_nd = None cdef np.ndarray[np.int64_t, ndim=2] subsarray2_nd = None cdef np.ndarray values_nd = None cdef int gtype = inquire_type(g_a) cdef int ndim = GA_Ndim(g_a) cdef int64_t n # prepare subsarray try: subsarray1_nd = np.ascontiguousarray(subsarray, dtype=np.int64) n = len(subsarray1_nd) / ndim except ValueError: subsarray1_nd = None try: subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) n = len(subsarray2_nd) # length of first dimension of subsarray2_nd except ValueError: raise ValueError, "subsarray must be either 1- or 2-dimensional" # prepare values array values_nd = np.asarray(values, dtype=_to_dtype[gtype]) if values_nd.ndim != 1: raise ValueError, "values must be one-dimensional" if not values_nd.flags['C_CONTIGUOUS']: raise ValueError, "values must be contiguous" if len(values_nd) < n: raise ValueError, "values was not large enough" # call the wrapped function if subsarray1_nd is not None: NGA_Scatter_flat64(g_a, values_nd.data, subsarray1_nd.data, n) elif subsarray2_nd is not None: NGA_Scatter_flat64(g_a, values_nd.data, subsarray2_nd.data, n) else: raise ValueError, "how did this happen?" def scatter_acc(int g_a, values, subsarray, alpha=None): """Scatters array elements from a global array into a local array. Like scatter, but adds values to existing values in the global array after multiplying by alpha. subsarray will be converted to an ndarray if it is not one already. A two-dimensional array is allowed so long as its shape is (n,ndim) where n is the number of elements to gather and ndim is the number of dimensions of the target array. Also, subsarray must be contiguous. For example, if the subsarray were two-dimensional:: for k in range(n): v[k] = g_a[subsarray[k,0],subsarray[k,1],subsarray[k,2]...] For example, if the subsarray were one-dimensional:: for k in range(n): base = n*ndim v[k] = g_a[subsarray[base+0],subsarray[base+1],subsarray[base+2]...] This is a one-sided operation. """ cdef np.ndarray[np.int64_t, ndim=1] subsarray1_nd = None cdef np.ndarray[np.int64_t, ndim=2] subsarray2_nd = None cdef np.ndarray values_nd = None cdef int gtype = inquire_type(g_a) cdef int ndim = GA_Ndim(g_a) cdef int64_t n cdef int ialpha cdef long lalpha cdef long long llalpha cdef float falpha cdef double dalpha cdef long double ldalpha cdef SingleComplex fcalpha cdef DoubleComplex dcalpha cdef void *valpha=NULL # prepare subsarray try: subsarray1_nd = np.ascontiguousarray(subsarray, dtype=np.int64) n = len(subsarray1_nd) / ndim except ValueError: subsarray1_nd = None try: subsarray2_nd = np.ascontiguousarray(subsarray, dtype=np.int64) n = len(subsarray2_nd) # length of first dimension of subsarray2_nd except ValueError: raise ValueError, "subsarray must be either 1- or 2-dimensional" # prepare values array values_nd = np.asarray(values, dtype=_to_dtype[gtype]) if values_nd.ndim != 1: raise ValueError, "values must be one-dimensional" if not values_nd.flags['C_CONTIGUOUS']: raise ValueError, "values must be contiguous" if len(values_nd) < n: raise ValueError, "values was not large enough" # prepare alpha if alpha is None: alpha = 1 valpha = _convert_multiplier(gtype, alpha, &ialpha, &lalpha, &llalpha, &falpha, &dalpha, &ldalpha, &fcalpha, &dcalpha) # call the wrapped function if subsarray1_nd is not None: NGA_Scatter_acc_flat64(g_a, values_nd.data, subsarray1_nd.data, n, valpha) elif subsarray2_nd is not None: NGA_Scatter_acc_flat64(g_a, values_nd.data, subsarray2_nd.data, n, valpha) else: raise ValueError, "how did this happen?" def select_elem(int g_a, char *op): """Returns the value and index for an element that is selected by the specified operator in a global array corresponding to g_a handle. This is a collective operation. :returns: the selected element and the array index for the selected element """ cdef np.ndarray[np.int64_t, ndim=1] index cdef int gtype=inquire_type(g_a) cdef int ialpha cdef long lalpha cdef long long llalpha cdef float falpha cdef double dalpha cdef long double ldalpha cdef SingleComplex fcalpha cdef DoubleComplex dcalpha cdef void *valpha=NULL valpha = _convert_multiplier(gtype, 0, &ialpha, &lalpha, &llalpha, &falpha, &dalpha, &ldalpha, &fcalpha, &dcalpha) index = np.ndarray(GA_Ndim(g_a), dtype=np.int64) NGA_Select_elem64(g_a, op, valpha, index.data) if gtype == C_INT: return ialpha,index elif gtype == C_LONG: return lalpha,index elif gtype == C_LONGLONG: return llalpha,index elif gtype == C_FLOAT: return falpha,index elif gtype == C_DBL: return dalpha,index elif gtype == C_LDBL: return ldalpha,index elif gtype == C_SCPL: # TODO explicitly convert GA complex to Python complex type return fcalpha,index elif gtype == C_DCPL: # TODO explicitly convert GA complex to Python complex type return dcalpha,index else: raise TypeError, "type of g_a not recognized" def select_elem_min(int g_a): """Equivalent to ga.select_elem(g_a, "min").""" return select_elem(g_a, "min") def select_elem_max(int g_a): """Equivalent to ga.select_elem(g_a, "max").""" return select_elem(g_a, "max") def set_array_name(int g_a, char *name): """Assigns a unique character string name to a global array handle that was obtained using the GA_Create_handle function. This is a collective operation. """ GA_Set_array_name(g_a, name) def set_block_cyclic(int g_a, dims): """Creates a global array with a simple block-cyclic data distribution. The array is broken up into blocks of size dims and each block is numbered sequentially using a column major indexing scheme. The blocks are then assigned in a simple round-robin fashion to processors. This is illustrated in the figure below for an array containing 25 blocks distributed on 4 processors. Blocks at the edge of the array may be smaller than the block size specified in dims. In the example below, blocks 4,9,14,19,20,21,22,23, and 24 might be smaller thatn the remaining blocks. Most global array operations are insensitive to whether or not a block-cyclic data distribution is used, although performance may be slower in some cases if the global array is using a block-cyclic data distribution. Individual data blocks can be accessesed using the block-cyclic access functions. This is a collective operation. """ cdef np.ndarray[np.int32_t, ndim=1] dims_nd dims_nd = _inta32(dims) GA_Set_block_cyclic(g_a, dims_nd.data) def set_block_cyclic_proc_grid(int g_a, block, proc_grid): """Creates a global array with a SCALAPACK-type block cyclic data distribution. The user specifies the dimensions of the processor grid in the array proc_grid. The product of the processor grid dimensions must equal the number of total number of processors and the number of dimensions in the processor grid must be the same as the number of dimensions in the global array. The data blocks are mapped onto the processor grid in a cyclic manner along each of the processor grid axes. This is illustrated below for an array consisting of 25 data blocks disributed on 6 processors. The 6 processors are configured in a 3 by 2 processor grid. Blocks at the edge of the array may be smaller than the block size specified in dims. Most global array operations are insensitive to whether or not a block-cyclic data distribution is used, although performance may be slower in some cases if the global array is using a block-cyclic data distribution. Individual data blocks can be accessesed using the block-cyclic access functions. This is a collective operation. """ cdef np.ndarray[np.int32_t, ndim=1] block_nd, proc_grid_nd block_nd = _inta32(block) proc_grid_nd = _inta32(proc_grid) GA_Set_block_cyclic_proc_grid(g_a, block_nd.data, proc_grid_nd.data) def set_chunk(int g_a, chunk): """This function is used to set the chunk array for a global array handle that was obtained using the GA_Create_handle function. The chunk array is used to determine the minimum number of array elements assigned to each processor along each coordinate direction. This is a collective operation. """ cdef np.ndarray[np.int64_t, ndim=1] chunk_nd chunk_nd = _inta64(chunk) GA_Set_chunk64(g_a, chunk_nd.data) def set_data(int g_a, dims, int type): """Sets the array dimension, the coordinate dimensions, and the data type assigned to a global array handle obtained using the ga.create_handle function. This is a collective operation. """ cdef np.ndarray[np.int64_t, ndim=1] dims_nd dims_nd = _inta64(dims) GA_Set_data64(g_a, len(dims_nd), dims_nd.data, type) def set_debug(bint debug): """Sets an internal flag in the GA library to either True or False. The value of this flag can be recovered at any time using the ga.get_debug function. The flag is set to false when the the GA library is initialized. This can be useful in a number of debugging situations, especially when examining the behavior of routines that are called in multiple locations in a code. This is a local operation. """ GA_Set_debug(debug) def set_diagonal(int g_a, int g_v): """Sets the diagonal elements of this matrix g_a with the elements of the vector g_v. This is a collective operation. """ GA_Set_diagonal(g_a, g_v) def set_ghosts(int g_a, width): """Sets the ghost cell widths for a global array handle that was obtained using the ga.create_handle function. The ghosts cells widths indicate how many ghost cells are used to pad the locally held array data along each dimension. The padding can be set independently for each coordinate dimension. This is a collective operation. """ cdef np.ndarray[np.int64_t, ndim=1] width_nd width_nd = _inta64(width) GA_Set_ghosts64(g_a, width_nd.data) def set_irreg_distr(int g_a, mapc, nblock): """Partitions the array data among the individual processors for a global array handle obtained using the ga.create_handle function. The distribution is specified as a Cartesian product of distributions for each dimension. For example, the following figure demonstrates distribution of a 2-dimensional array 8x10 on 6 (or more) processors. nblock(2)={3,2}, the size of mapc array is s=5 and array mapc contains the following elements mapc={1,3,7, 1, 6}. The distribution is nonuniform because, P1 and P4 get 20 elements each and processors P0,P2,P3, and P5 only 10 elements each. +----+----++--+ | 5 | 5 || | +====+====++==+ | P0 | P3 || 2| | P1 | P4 || 4| | P2 | P5 || 2| +----+----++--+ The array width() is used to control the width of the ghost cell boundary around the visible data on each processor. The local data of the global array residing on each processor will have a layer width(n) ghosts cells wide on either side of the visible data along the dimension n. This is a collective operation. """ cdef np.ndarray[np.int64_t, ndim=1] mapc_nd, nblock_nd mapc_nd = _inta64(mapc) nblock_nd = _inta64(nblock) GA_Set_irreg_distr64(g_a, mapc_nd.data, nblock_nd.data) def set_memory_limit(size_t limit): """Sets the amount of memory to be used (in bytes) per process. This is a local operation. :Parameters: limit : size_t the amount of memory in bytes per process """ GA_Set_memory_limit(limit) def set_pgroup(int g_a, int pgroup): """Sets the processor configuration assigned to a global array handle that was obtained using the ga.create_handle function. It can be used to create mirrored arrays by using the mirrored array processor configuration in this function call. It can also be used to create an array on a processor group by using a processor group handle in this call. This is a collective operation. """ GA_Set_pgroup(g_a, pgroup) def set_restricted(int g_a, list): """Restrict data in the global array g_a to only the processors listed in the array list. len(list) must be less than or equal to the number of available processors. If this call is used in conjunction with set_irreg_distr, then the decomposition in the set_irreg_distr call must be done assuming that the number of processors is nproc. The data that ordinarily would be mapped to process 0 is mapped to the process in list[0], the data that would be mapped to process 1 will be mapped to list[1], etc. This can be used to remap the data distribution to different processors, even if nproc equals the number of available processors. This is a collective operation. """ cdef np.ndarray[np.int32_t, ndim=1] list_nd list_nd = _inta32(list) GA_Set_restricted(g_a, list_nd.data, len(list_nd)) def set_restricted_range(int g_a, int lo_proc, int hi_proc): """Restrict data in the global array to the given range of processors. Both lo_proc and hi_proc must be less than or equal to the total number of processors minus one (e.g., in the range [0,N-1], where N is the total number of processors) and lo_proc must be less than or equal to hi_proc. If lo_proc = 0 and hi_proc = N-1 then this call has no effect on the data distribution. This is a collective operation. """ GA_Set_restricted_range(g_a, lo_proc, hi_proc) def shift_diagoal(int g_a, value=None): """Adds this constant to the diagonal elements of the matrix. This is a collective operation. """ cdef int ivalue cdef long lvalue cdef long long llvalue cdef float fvalue cdef double dvalue cdef long double ldvalue cdef SingleComplex fcvalue cdef DoubleComplex dcvalue cdef void *vvalue cdef int gtype=inquire_type(g_a) if value is None: value = 1 vvalue = _convert_multiplier(gtype, value, &ivalue, &lvalue, &llvalue, &fvalue, &dvalue, &ldvalue, &fcvalue, &dcvalue) GA_Shift_diagonal(g_a, vvalue) def solve(int g_a, int g_b): """Solves a system of linear equations A * X = B. It first will call the Cholesky factorization routine and, if sucessfully, will solve the system with the Cholesky solver. If Cholesky will be not be able to factorize A, then it will call the LU factorization routine and will solve the system with forward/backward substitution. On exit B will contain the solution X. This is a collective operation. :returns: 0 if Cholesky factoriztion was succesful. >0 if the leading minor of this order is not positive definite, Cholesky factorization could not be completed and LU factoriztion was used """ return GA_Solve(g_a, g_b) def spd_invert(int g_a): """Compute the inverse of a double precision using the Cholesky factorization of a NxN double precision symmetric positive definite matrix A stored in the global array represented by g_a. On successful exit, A will contain the inverse. This is a collective operation. :returns: 0 if successful exit; >0 if the leading minor of this order is not positive definite and the factorization could not be completed; <0 if it returns the index i of the (i,i) element of the factor L/U that is zero and the inverse could not be computed """ return GA_Spd_invert(g_a) def step_max(int g_a, int g_b, alo=None, ahi=None, blo=None, bhi=None): """Calculates the largest multiple of a vector g_b that can be added to this vector g_a while keeping each element of this vector non-negative. This is a collective operation. """ cdef np.ndarray[np.int64_t, ndim=1] alo_nd, ahi_nd cdef np.ndarray[np.int64_t, ndim=1] blo_nd, bhi_nd cdef double step if (alo is None and ahi is None and blo is None and bhi is None): GA_Step_max(g_a, g_b, &step) else: alo_nd,ahi_nd = _lohi(g_a,alo,ahi) blo_nd,bhi_nd = _lohi(g_b,blo,bhi) GA_Step_max_patch64(g_a, alo_nd.data, ahi_nd.data, g_b, blo_nd.data, bhi_nd.data, &step) return step def strided_acc(int g_a, buffer, lo=None, hi=None, skip=None, alpha=None): """Strided version of ga.acc. The values corresponding to dimension n in buf are accumulated to every skip[n] values of the global array g_a. Combines data from buffer with data in the global array patch. The buffer array is assumed to be have the same number of dimensions as the global array. If the buffer is not contiguous, a contiguous copy will be made. global array section (lo[],hi[]) += alpha * buffer This is a one-sided and atomic operation. :Parameters: g_a : int the array handle buffer : array-like must be contiguous and have same number of elements as patch lo : 1D array-like of integers lower bound patch coordinates, inclusive hi : 1D array-like of integers higher bound patch coordinates, exclusive alpha : object multiplier (converted to the appropriate type) """ _acc_common(g_a, buffer, lo, hi, alpha, False, False, skip) def strided_get(int g_a, lo=None, hi=None, skip=None, np.ndarray buffer=None): """Strided version of ga.get. Copies data from global array section to the local array buffer. The local array is assumed to be have the same number of dimensions as the global array. Any detected inconsitencies/errors in the input arguments are fatal. This is a one-sided operation. :Parameters: g_a : int the array handle lo : 1D array-like of integers lower bound patch coordinates, inclusive hi : 1D array-like of integers higher bound patch coordinates, exclusive skip : 1D array-like of integers strides for each dimension buffer : ndarray an ndarray of the appropriate type, large enough to hold lo,hi :returns: The local array buffer. """ return _get_common(g_a, lo, hi, buffer, False, False, skip) def strided_put(int g_a, buffer, lo=None, hi=None, skip=None): """Strided version of ga.put. Copies data from local array buffer to the global array section. The local array is assumed to be have the same number of dimensions as the global array. Any detected inconsitencies/errors in input arguments are fatal. This is a one-sided operation. :Parameters: g_a : int the array handle buffer : array-like the data to put lo : 1D array-like of integers lower bound patch coordinates, inclusive hi : array-like of integers higher bound patch coordinates, exclusive skip : 1D array-like of integers strides for each dimension """ _put_common(g_a, buffer, lo, hi, False, False, skip) def summarize(bint verbose): """Prints info about allocated arrays.""" GA_Summarize(verbose) def symmetrize(int g_a): """Symmetrizes matrix A represented with handle g_a: A:= .5 * (A+A'). This is a collective operation. """ GA_Symmetrize(g_a) def sync(): """Synchronize processes (a barrier) and ensure that all GA operations completed. This is a collective operation. """ GA_Sync() def terminate(): """Delete all active arrays and destroy internal data structures. This is a collective operation. """ global _initialized _initialized = False GA_Terminate() def total_blocks(int g_a): """Returns the total number of blocks contained in a global array with a block-cyclic data distribution. This is a local operation. """ return GA_Total_blocks(g_a) def transpose(int g_a, int g_b): """Transposes a matrix: B = A', where A and B are represented by handles g_a and g_b. This is a collective operation. """ GA_Transpose(g_a, g_b) def unlock(int mutex): """Unlocks a mutex object identified by the mutex number. It is a fatal error for a process to attempt to unlock a mutex which has not been locked by this process.""" GA_Unlock(mutex) def unpack(int g_src, int g_dst, int g_msk, lo=None, hi=None): """Expands the values in the source vector into a larger destination vector. The unpack subroutine is designed to expand the values in the source vector g_src into a larger destination array g_dst based on the values in an integer mask array g_msk. The values lo and hi denote the range of elements that should be uncompressed and icount is a variable that on output lists the number of values placed in the uncompressed array. This operation is the complement of the ga.pack operation. An example is shown below:: ga.unpack(g_src, g_dst, g_msk, 1, n, &icount); g_src: 1 7 9 12 15 16 g_msk: 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0 g_dst: 1 0 0 0 0 0 7 0 9 0 0 12 0 0 15 16 0 icount: 6 This is a collective operation. :Parameters: g_src : int handle for source arrray g_dst : int handle for destination array g_msk : int handle for integer array representing mask lo : 1D array-like of integers low value of range on which operation is performed hi : 1D array-like of integers hi value of range on which operation is performed """ cdef np.ndarray[np.int64_t, ndim=1] hi_nd = inquire_dims(g_src)-1 cdef int64_t c_lo=0, c_hi=hi_nd[0], icount if lo is not None: c_lo = lo if hi is not None: c_hi = hi GA_Unpack64(g_src, g_dst, g_msk, lo, hi, &icount) return icount def update_ghosts(int g_a): """This call updates the ghost cell regions on each processor with the corresponding neighbor data from other processors. The operation assumes that all data is wrapped around using periodic boundary data so that ghost cell data that goes beyound an array boundary is wrapped around to the other end of the array. The ga.update_ghosts call contains two ga.sync calls before and after the actual update operation. For some applications these calls may be unecessary, if so they can be removed using the ga.mask_sync subroutine. This is a collective operation. """ GA_Update_ghosts(g_a) def update_ghost_dir(int g_a, int dimension, int dir, int flag): """This function can be used to update the ghost cells along individual directions. It is designed for algorithms that can overlap updates with computation. The variable dimension indicates which coordinate direction is to be updated (e.g. dimension = 1 would correspond to the y axis in a two or three dimensional system), the variable idir can take the values +/-1 and indicates whether the side that is to be updated lies in the positive or negative direction, and cflag indicates whether or not the corners on the side being updated are to be included in the update. The following calls would be equivalent to a call to GA_Update_ghosts for a 2-dimensional system: status = NGA_Update_ghost_dir(g_a,0,-1,1); status = NGA_Update_ghost_dir(g_a,0,1,1); status = NGA_Update_ghost_dir(g_a,1,-1,0); status = NGA_Update_ghost_dir(g_a,1,1,0); The variable cflag is set equal to 1 (or non-zero) in the first two calls so that the corner ghost cells are update, it is set equal to 0 in the second two calls to avoid redundant updates of the corners. Note that updating the ghosts cells using several independent calls to the nga_update_ghost_dir functions is generally not as efficient as using GA_Update_ghosts unless the individual calls can be effectively overlapped with computation. """ NGA_Update_ghost_dir(g_a, dimension, dir, flag) def uses_ma(): """TODO""" if GA_Uses_ma() == 1: return True return False def wtime(): """This function return a wall (or elapsed) time on the calling processor. Returns time in seconds representing elapsed wall-clock time since an arbitrary time in the past. Example: starttime = ga.wtime() # .... code snippet to be timed .... endtime = ga.wtime() print "Time taken = %s seconds" % endtime-starttime This is a local operation. This function is only available in release 4.1 or greater. """ return GA_Wtime() def zero(int g_a, lo=None, hi=None): """Set all the elements in the array or patch to zero.""" cdef np.ndarray[np.int64_t, ndim=1] lo_nd, hi_nd if lo is None and hi is None: GA_Zero(g_a) else: lo_nd,hi_nd = _lohi(g_a,lo,hi) NGA_Zero_patch64(g_a, lo_nd.data, hi_nd.data) def zero_diagonal(int g_a): """Sets the diagonal elements of this matrix g_a with zeros. This is a collective operation. """ GA_Zero_diagonal(g_a) initialize() ga-5-3/python/ga4py/gain/0000750005473000001440000000000012275260613014062 5ustar d3n000usersga-5-3/python/ga4py/gain/util.pyx0000640005473000001440000006573611613721612015617 0ustar d3n000users# cython: profile=True """Contains index- and slice-related operations needed for bookkeeping. Probably the most import set of classes are the Key-related ones including Key, NoneKey, FixedKey, RangeKey, and MasterKey. These classes perform all of the index arithmetic and index translation to make GAiN work. The data distribution provided by Global Arrays is static. For a distributed implementation of NumPy, this poses additional challenges on top of the challenge of no longer having a single address space. The Key class contains an attribute 'origin' which refers back to the GA dimension it was originally associated with. This allows us to determine transpose operations. """ import numpy as np cpdef list listify(thing): try: return list(thing) except: return [thing] class Key(object): """An abstract base class for an index into an ndarray. You can index an array using an integer, a slice, or a None which are represented by the subclasses FixedKey, RangeKey, and NoneKey, respectively. Key instances may refer to an original dimension index using the 'origin' attribute. The 'origin' attribute only makes sense for the FixedKey and RangeKey subclasses. Subclasses should define __eq__, __getitem__, size, and pyobj. Attributes ---------- origin : int, or None The original index this Key refers to. size : int shorthand for get_size() method """ def __init__(self): """Create a new Key with origin=None.""" self.origin = None def __eq__(self, other): """x.__eq__(y) <==> x==y Raises ------ NotImplementedError : subclasses must define this """ raise NotImplementedError, "subclasses must define this" def __getitem__(self, key): """x.__getitem__(y) <==> x[y] The given key is assumed to be a Python object. Raises ------ NotImplementedError : subclasses must define this """ raise NotImplementedError, "subclasses must define this" def __repr__(self): return str(self) def __str__(self): return "Key()" def bound_by_lohi(self, lo, hi): """Return a new Key modified to fit between lo and hi. Raises ------ NotImplementedError : subclasses must define this """ raise NotImplementedError, "subclasses must define this" def get_size(self): """Returns number of elements represented by this Key. See Also -------- size : Attribute getter for get_size method. """ raise NotImplementedError, "subclasses must define this" size = property(get_size) def pyobj(self): """Returns a Python object based on this Key e.g. slice, int, None. Raises ------ NotImplementedError : subclasses must define this """ raise NotImplementedError, "subclasses must define this" class NoneKey(Key): """A None with additional Key methods. Slicing a None is allowed. A None (newaxis) can be removed by slicing it with a value of 0. Slicing a None returns None which indicates the dimension should be removed. NoneKey instances should never have their origin attribute set since a None for an axis should never refer back to an original GA shape. """ def __init__(self): Key.__init__(self) def __eq__(self, other): """Returns True of other is None or a NoneKey.""" return isinstance(other, (type(None),NoneKey)) def __getitem__(self, key): """x.__getitem__(y) <==> x[y] An index of 0 is allowed, or a slice starting from 0. Returns None if an index of 0 is passed because this effectively removes this Key from an index. """ if isinstance(key, (RangeKey,slice)): if isinstance(key, slice): start,stop,step = key.indices(self.size) else: start,stop,step = key.start,key.stop,key.step if start != 0 or stop != 1 or step != 1: raise IndexError, "bad slice for NoneKey: %s" % key return self else: key = long(key) if key not in [0,0L]: # probably don't need '0' due to cast raise IndexError, "index out of bounds" return None # on purpose not self -- indicates index removal def __repr__(self): return str(self) def __str__(self): return "NoneKey()" def bound_by_lohi(self, lo, hi): """Always raises NotImplementedError.""" raise NotImplementedError, "bound_by_lohi nonsensical for NoneKey" def get_size(self): """Always returns 1.""" return 1 size = property(get_size) def pyobj(self): """Returns a Python object based on this Key (always None).""" return None class FixedKey(Key): """An integer with additional Key methods. There must be a valid 'value' at all times. Anything that can be transformed into an int or long is allowed. long is prefered. FixedKey instances must always refer to an original GA dimension using the 'origin' attribute. It does not make sense for a FixedKey to be without an 'origin'. Attributes ---------- origin : int, or None The original index this FixedKey refers to. size : int shorthand for get_size() method """ def __init__(self, value, origin): """A integer value and an integer origin must be given. The given 'value' must be >= 0. The given 'origin' must be >= 0. """ Key.__init__(self) self.value = long(value) self.origin = origin assert self.value >= 0 assert self.origin >= 0 def __eq__(self, other): """Compares the 'value' attributes.""" if hasattr(other,'value'): return self.value == other.value return False def __getitem__(self, key): """You cannot index a FixedKey. Raises ------ IndexError : cannot index a FixedKey """ raise IndexError, "cannot index a FixedKey" def __int__(self): return int(self.value) def __long__(self): return long(self.value) def __repr__(self): return str(self) def __str__(self): return "FixedKey(%s)" % self.value def bound_by_lohi(self, lo, hi): """Returns self but raises IndexError if value is not within range. Raises ------ IndexError : if not (lo <= self.value < hi) """ if not (lo <= self.value < hi): raise IndexError, "lo/hi out of bounds %s <= %s < %s" % ( lo, self.value, hi) return self def get_size(self): """Always returns 1 even though 0 is more correct. FixedKey instances don't count towards the shape of an array because FixedKey instances remove dimensions. However, since it is often convenient to calculate the shape of multiple Key instances using a reduction of the sizes of the Key instances, we return 1 here instead of 0. """ return 1 size = property(get_size) def pyobj(self): """Returns a Python object based on this Key (long 'value' attr).""" return self.value class RangeKey(Key): """A Python slice (w/o the indices function) with additional Key methods. RangeKey instances must always refer to an original GA dimension using the 'origin' attribute. It does not make sense for a RangeKey to be without an 'origin'. """ def __init__(self, start, stop=None, step=None, origin=None): """Creates given either a slice or an explicit start, stop, and step. Asserts that the start, stop, and step are not None. An 'origin' is required. The given 'origin' must be >= 0. """ Key.__init__(self) if isinstance(start, slice): self.start = start.start self.stop = start.stop self.step = start.step assert stop is None assert step is None else: self.start = start self.stop = stop self.step = step assert start is not None assert stop is not None assert step is not None assert origin is not None assert origin >= 0 self.origin = origin def __eq__(self, other): """Returns true if all start, stop, and step values match other.""" try: return (self.start == other.start and self.stop == other.stop and self.step == other.step) except AttributeError: return False def __getitem__(self, key): """You can index using either a slice, RangeKey, or integer.""" if isinstance(key, (RangeKey,slice)): if isinstance(key, slice): _start,_stop,_step = key.indices(self.size) else: _start,_stop,_step = key.start,key.stop,key.step start = ((_start*self.step) + self.start) stop = ((_stop*self.step) + self.start) step = _step * self.step return RangeKey(start,stop,step,origin=self.origin) else: try: key = long(key) except TypeError: raise TypeError, ("long() argument must be a string or a " "number, not %s" % key) if key < 0: key += self.size if key >= self.size or key < 0: raise IndexError, "invalid index" shifted = (key*self.step) + self.start if (self.step < 0 and shifted <= self.stop or self.step > 0 and shifted >= self.stop): raise IndexError return FixedKey(shifted, self.origin) def __str__(self): return "RangeKey(%s,%s,%s)" % (self.start,self.stop,self.step) def __repr__(self): return str(self) def bound_by_lohi(self, lo, hi): """Return a new RangeKey modified to fit between lo and hi. Raises ------ IndexError if start/stop/step is out of the bounds of lo/hi . Returns ------- A new RangeKey between the values of lo and hi. Examples -------- >>> RangeKey(1,10,2).bound_by_lohi(4,20) RangeKey(5,10,2) >>> RangeKey(1,10,2).bound_by_lohi(1,20) RangeKey(1,10,2) >>> RangeKey(1,10,2).bound_by_lohi(4,10) RangeKey(5,10,2) >>> RangeKey(1,10,2).bound_by_lohi(4,9) RangeKey(5,9,2) """ new_start = 0 new_stop = 0 if self.step > 0: if self.start >= hi: raise IndexError, "start >= hi (out of bounds)" elif self.start >= lo: # start < hi is implied new_start = self.start else: # start < lo < hi is implied guess = (lo-self.start)//self.step new_start = guess*self.step + self.start while new_start < lo: guess += 1 new_start = guess*self.step + self.start if self.stop <= lo: raise IndexError, "stop <= lo (out of bounds)" elif self.stop <= hi: # lo < stop is implied new_stop = self.stop else: # lo < hi < stop is implied new_stop = hi # this should be good enough else: if self.start < lo: raise IndexError, "negative step, start < lo (out of bounds)" elif self.start < hi: new_start = self.start else: # start >= hi >= lo guess = (hi-self.start)//self.step new_start = guess*self.step + self.start while new_start >= hi: guess += 1 new_start = guess*self.step + self.start if self.stop >= hi: raise IndexError, "negative step, stop >= hi (out of bounds)" elif self.stop >= (lo-1): new_stop = self.stop else: new_stop = lo-1 # this should be good enough result = RangeKey(new_start,new_stop,self.step,self.origin) if result.size <= 0: raise IndexError, "bound_by_lohi resulted in 0 length" return result def get_size(self): """Returns the length of the range.""" start,stop,step = self.start,self.stop,self.step # for brevity if (step < 0 and stop >= start) or (step > 0 and start >= stop): return 0 elif step < 0: return (stop - start + 1) / (step) + 1 else: return (stop - start - 1) / (step) + 1 size = property(get_size) def pyobj(self): """Returns a Python object based on this Key (a slice).""" return slice(self.start,self.stop,self.step) class MasterKey(object): """A list of Key instances with some extra methods. Represents one or more indices into an array. Contains methods to calculate shape, constrain the indices to lo/hi bounds of various types. Also contains attributes T and TT to represent axes to transpose as well as the inverse of the axes so that the transpose can be undone. The T and TT attributes will always be set in tandem -- both will be None or both will be set to a tuple of integers. Certain methods will query the T and TT attributes and change their behavior appropriately. Slicing a transposed MasterKey is one such example. """ def __init__(self, shape=None, data=None, fixed=None, T=None, TT=None): if shape is None and data is None: raise ValueError, "specify either shape or data" elif shape is not None: self.data = [RangeKey(0,x,1,origin=i) for i,x in enumerate(shape)] elif data is not None: for datum in data: assert isinstance(datum, Key) self.data = data else: raise ValueError, "specify either shape or data" self.T = T self.TT = TT if fixed is None: self.fixed = [] else: self.fixed = fixed def __eq__(self, other): try: return (self.data == other.data) and (self.fixed == other.fixed) except AttributeError: return False def __iter__(self): return iter(self.data) def __str__(self): return str(self.data) def __repr__(self): return repr(self.data) def _count_instances(self, *args): """Return the number of instances of the given type.""" return len(self._get_instances(args)) def _get_instances(self, *args): return [item for item in self.data if isinstance(item, args)] def _get_origins_within_data(self): """Return list of keys which have their origin set.""" return [item for item in self.data if item.origin is not None] def get_origin(self): """Return current list of FixedKey and RangeKey instances. The returned list is in the current (possibly transposed) order. See Also -------- get_sorted_origin() : sorts the list by 'origin' property """ origins = self._get_origins_within_data() result = [None]*(len(self.fixed)+len(origins)) for fixed in self.fixed: result[fixed.origin] = fixed iter_origins = iter(origins) for i in range(len(result)): if result[i] is None: result[i] = iter_origins.next() return result def get_sorted_origin(self): """Return sorted list of FixedKey and RangeKey instances. The returned list is in the current (possibly transposed) order. See Also -------- get_origin() : does not sort the list by 'origin' property """ origins = self._get_origins_within_data() result = [None]*(len(self.fixed)+len(origins)) for fixed in self.fixed: result[fixed.origin] = fixed for datum in origins: result[datum.origin] = datum return result def get_original_ndim(self): return len(self.get_origin()) def get_shape(self): return tuple( [item.size for item in self._get_instances(NoneKey,RangeKey)]) shape = property(get_shape) def get_size(self): return reduce(lambda x,y: x*y, self.shape, 1) size = property(get_size) def get_ndim(self): return self._count_instances(NoneKey,RangeKey) ndim = property(get_ndim) def pyobj(self): return [x.pyobj() for x in self.data] def replace_ellipsis(self, key): """Given key, replace one or more Ellipsis based on this MasterKey. Assumes key is a list, and if not, makes it a list. Raises IndexError if the key is too large. """ if type(key) != type([]): key = [key] ndim = self.ndim count_real_keys = len(key)-key.count(None)-key.count(Ellipsis) if count_real_keys > ndim: raise IndexError, "invalid index %s[%s]" % (self,key) # implicit Ellipsis at end of key if one wasn't given if Ellipsis not in key: key.append(Ellipsis) # first Ellipsis replaced with as many slice(None,None,None) as needed ellipsis_index = key.index(Ellipsis) ellipsis_count = key.count(Ellipsis) key = (key[:ellipsis_index] + ([slice(None,None,None)] * (ndim-count_real_keys)) + key[ellipsis_index+1:]) # remove all remaining Ellipsis from key ellipsis_count -= 1 while ellipsis_count > 0: key.remove(Ellipsis) ellipsis_count -= 1 return key def __getitem__(self, key): """Slices this MasterKey and returns a new MasterKey.""" key = self.replace_ellipsis(key) new_data = [] new_fixed = self.fixed[:] # copy fixed dimensions key_iter = iter(key) for item in self.data: if isinstance(item, (RangeKey,NoneKey)): next_key = key_iter.next() while next_key is None: new_data.append(NoneKey()) next_key = key_iter.next() result = item[next_key] if isinstance(item, RangeKey) and isinstance(result, FixedKey): # went from range to fixed, add to fixed keys new_fixed.append(result) elif result is not None: new_data.append(result) elif isinstance(item, FixedKey): raise TypeError, "FixedKey found in MasterKey" else: raise TypeError, "unrecognized item in MasterKey" # there might be some items left in the key_iter # the only valid items that can remain are None for next_key in key_iter: assert next_key is None new_data.append(NoneKey()) result = MasterKey(None, new_data, new_fixed, self.T, self.TT) return result def bound_by_lohi(self, lo, hi): """Calculate new MasterKey for the subarray denoted by lo and hi. returns a list of slice objects representing the piece of the subarray that the lo and hi bounds maintain after applying bounds to global_slice. raises IndexError if the lo and hi bounds don't get a piece of the subarray Examples -------- >>> j = MasterKey((10,15,20,25)) >>> k = j[1:10:2, 10:1:-3, 2, None, 10] >>> k.bound_by_lohi([4,4,0,5], [10,9,3,20]) [RangeKey(5,10,2), RangeKey(7,3,-3)] """ result = [] lo = [l for l in lo] hi = [h for h in hi] assert len(lo) == len(hi) == self.get_original_ndim() # verify fixed dimensions within bounds; raises IndexError otherwise for item in self.fixed: item.bound_by_lohi(lo[item.origin], hi[item.origin]) for item in self.data: if isinstance(item, RangeKey): result.append( item.bound_by_lohi(lo[item.origin], hi[item.origin])) elif isinstance(item, NoneKey): pass elif isinstance(item, FixedKey): raise TypeError, "FixedKey found in MasterKey" else: raise TypeError, "unrecognized item in MasterKey" return result def lohi_T(self): """Return the current order of origin including fixed dimensions. This produces a tranpose suitable for a lo or hi. Examples -------- >>> lo,hi = [0,0,0], [2,3,4] >>> k = MasterKey((2,3,4)) >>> k_T = k.transpose((2,1,0)) >>> k_T1 = k_T[:,1] >>> k_T1.lohi_T() """ return [item.origin for item in self.get_origin()] def None_key(self): """Return a key based on current None's in this MasterKey. Examples -------- >>> k = MasterKey((2,3,4)) >>> k1 = k[None, :, None, :, None, :, None] >>> k1.None_key() [None, slice(None,None,None), """ return [None if isinstance(datum, NoneKey) else slice(None,None,None) for datum in self.data] def get_lo_hi_skip_adjust(self): """Return lo/hi/skip/adjust needed for successful ga.strided_get().""" sorted_origin = self.get_sorted_origin() lo = [] hi = [] sk = [] ad = [] need_strided = False for item in sorted_origin: if isinstance(item, FixedKey): lo.append(item.value) hi.append(item.value+1) sk.append(1) ad.append(slice(0,None,None)) elif isinstance(item, RangeKey): if item.step > 1 or item.step < -1: need_strided = True if item.step < 0: length = item.size-1 lo.append(item.step*length + item.start) hi.append(item.start+1) sk.append(-item.step) ad.append(slice(None,None,-1)) else: lo.append(item.start) hi.append(item.stop) sk.append(item.step) ad.append(slice(0,None,None)) else: raise TypeError, "unhandled piece of MasterKey" lo = np.asarray(lo, dtype=np.int64) hi = np.asarray(hi, dtype=np.int64) sk = np.asarray(sk, dtype=np.int64) return lo,hi,sk,ad,need_strided def access_key(self, lo, hi): """Converts from MasterKey to list appropriate for ga.access()[list]. Does NOT return a new MasterKey or any Key subclasses. The returned list contains one or more of slice, int, long, etc which an access()ed ndarray can iterpret. """ result = [None]*self.get_original_ndim() for fixed in self.fixed: result[fixed.origin] = fixed.value-lo[fixed.origin] iter_ranged_origin = iter(self.bound_by_lohi(lo, hi)) for i in range(len(result)): if result[i] is None: ranged = iter_ranged_origin.next() nlo = lo[ranged.origin] start = ranged.start-nlo stop = ranged.stop-nlo if start < 0: start = None if stop < 0: stop = None result[i] = slice(start,stop,ranged.step) return result def get_key(self, lo, hi): """Converts from MasterKey to list appropriate for ga.get()[list].""" iter_ranged_origin = iter(self.bound_by_lohi(lo, hi)) result = [] for datum in self.data: if isinstance(datum, FixedKey): raise TypeError, "FixedKey found in MasterKey" elif isinstance(datum, RangeKey): ro = iter_ranged_origin.next() offset = RangeKey( datum.start,ro.start,datum.step,datum.origin).size result.append(slice(offset, offset+ro.size, 1)) elif isinstance(datum, NoneKey): result.append(slice(None,None,None)) else: raise ValueError, "MasterKey contained unknown object" return result def transpose(self, axes): """Swap the axes of this MasterKey given axes. Returns the inverse of the axes in addition to the new MasterKey instance. Parameters ---------- axes : list of ints `i` in the `j`-th place in the tuple means `a`'s `i`-th axis becomes `a.transpose()`'s `j`-th axis. Examples -------- >>> k = MasterKey((40,30,20)) >>> k = k[2:34:1, 4, None, 10:2:-1] >>> inv,new_k = k.transpose((1,2,0)) >>> print inv [2, 0, 1] >>> print new_k """ # normalize the inputs, making sure they're all iterable axes = listify(axes) # create the inverse of the given axes inverse = [None]*len(axes) for i,val in enumerate(axes): inverse[val] = i # modify the given axes based on this MasterKey new_data = [self.data[i] for i in axes] return MasterKey(None, new_data, self.fixed, axes, inverse) def broadcast_shape(first, second): """Return the broadcasted version of shapes first and second.""" def worker(x,y): if x is None: x = 1 if y is None: y = 1 if x != 1 and y != 1 and x != y: raise ValueError, ("shape mismatch:" " objects cannot be broadcast to a single shape") return max(x,y) return tuple(reversed(map(worker, reversed(first), reversed(second)))) def broadcast_chomp(smaller_key, larger_key): """Return a key appropriate for the given shape.""" new_key = [] for s,l in zip(reversed(smaller_key),reversed(larger_key)): if s == 1: new_key.append(slice(0,1,1)) else: new_key.append(l) new_key.reverse() return new_key def unravel_index(x,dims): """Like np.unravel_index, but 'x' can be an integer array. Yeah, I know, numpy 1.6.0 has this already, but we're based on 1.5.1. I copied the code and modified it from 1.5.1. """ import numpy as _nx x = _nx.asarray(x) if x.ndim == 0: return _nx.unravel_index(x,dims) max = _nx.prod(dims)-1 if _nx.any(x>max) or _nx.any(x<0): raise ValueError("Invalid index, must be 0 <= x <= number of elements.") idx = _nx.empty_like(dims) # Take dimensions # [a,b,c,d] # Reverse and drop first element # [d,c,b] # Prepend [1] # [1,d,c,b] # Calculate cumulative product # [1,d,dc,dcb] # Reverse # [dcb,dc,d,1] dim_prod = _nx.cumprod([1] + list(dims)[:0:-1])[::-1] # Indices become [x/dcb % a, x/dc % b, x/d % c, x/1 % d] return tuple(x[:,None]//dim_prod % dims) ga-5-3/python/ga4py/gain/core.pyx0000640005473000001440000032301612000110051015532 0ustar d3n000users# cython: profile=True cimport mpi4py.MPI as MPI from mpi4py.mpi_c cimport * import mpi4py.MPI as MPI from ga4py import ga import util import numpy as np cimport numpy as np import os cpdef int me(): return ga.pgroup_nodeid(ga.pgroup_get_default()) cpdef int nproc(): return ga.pgroup_nnodes(ga.pgroup_get_default()) # at what point do we distribute arrays versus leaving as np.ndarray? cdef int SIZE_THRESHOLD = 1 cpdef int get_size_threshold(): global SIZE_THRESHOLD return SIZE_THRESHOLD cpdef set_size_threshold(int threshold): global SIZE_THRESHOLD SIZE_THRESHOLD = threshold cpdef bint should_distribute(shape): the_shape = listify(shape) if len(the_shape) == 0: return False return np.multiply.reduce(the_shape) >= get_size_threshold() cpdef bint is_distributed(thing): return isinstance(thing, (ndarray,flatiter)) cpdef bint is_array(thing): return isinstance(thing, (ndarray,flatiter,np.ndarray,np.flatiter)) cpdef get_shape(thing): try: return thing.shape # an ndarray except AttributeError: return (len(thing),) # a flatiter cpdef get_dtype(thing): try: return thing.dtype # an ndarray except AttributeError: return thing.base.dtype # a flatiter cpdef list listify(thing): try: return list(thing) except: return [thing] cpdef tuple tuplify(thing): try: return tuple(thing) except: return (thing,) gatypes = { np.dtype(np.int8): ga.C_CHAR, np.dtype(np.int32): ga.C_INT, np.dtype(np.int64): ga.C_LONG, np.dtype(np.float32): ga.C_FLOAT, np.dtype(np.float64): ga.C_DBL, np.dtype(np.complex64): ga.C_SCPL, np.dtype(np.complex128): ga.C_DCPL, } # numpy doesn't always have these types depending on the system cdef bint float128_in_np = ('float128' in dir(np)) cdef bint complex256_in_np = ('complex256' in dir(np)) if float128_in_np: gatypes[np.dtype(np.float128)] = ga.C_LDBL if complex256_in_np: gatypes[np.dtype(np.complex256)] = ga.C_LDCPL cdef bint _mask_sync = False cpdef inline mask_sync(): global _mask_sync _mask_sync = True cpdef inline sync(): #print "syncing over group %s" % ga.pgroup_get_default() #ga.pgroup_sync(ga.pgroup_get_default()) if not _mask_sync: ga.sync() # internally it checks for the default group class flagsobj(object): def __init__(self): self._c = True self._f = False self._o = True self._w = True self._a = True self._u = False def _get_c(self): return self._c c_contiguous = property(_get_c) def _get_f(self): return self._f f_contiguous = property(_get_f) def _get_o(self): return self._o owndata = property(_get_o) def _get_w(self): return self._w writeable = property(_get_w) def _get_a(self): return self._a aligned = property(_get_a) def _get_u(self): return self._u updateifcopy = property(_get_u) def __getitem__(self, item): if isinstance(item, str): if item == "C" or item == "C_CONTIGUOUS": return self._c if item == "F" or item == "F_CONTIGUOUS": return self._f if item == "O" or item == "OWNDATA": return self._o if item == "W" or item == "WRITEABLE": return self._w if item == "A" or item == "ALIGNED": return self._a if item == "U" or item == "UPDATEIFCOPY": return self._u raise KeyError, "Unknown flag" def __repr__(self): return """ C_CONTIGUOUS : %s F_CONTIGUOUS : %s OWNDATA : %s WRITEABLE : %s ALIGNED : %s UPDATEIFCOPY : %s""" % (self._c, self._f, self._o, self._w, self._a, self._u) class GlobalArrayCache(object): """When ndarray instances are removed, their GA handles are preserved. This class abstracts away various caching schemes in use and proides a consistent interface. The scheme that inspired this cache was to preserve the last three arrays with the same shape and type. Using the cache avoids many create/destroy cycles for GAs which occur as part of temporary array creation during numpy codes. """ def __init__(self, level=3): self.cache = {} self.level = level def __del__(self): for value in self.cache.values(): for g_a in value: ga.destroy(g_a) def __contains__(self, item): return (item in self.cache and self.cache[item]) def __getitem__(self, item): if item in self.cache and self.cache[item]: return self.cache[item].pop() raise KeyError, item def __setitem__(self, item, value): if item in self.cache: self.cache[item].append(value) else: self.cache[item] = [value] def count(self, item): if item in self.cache: return len(self.cache[item]) return 0 def empty(self, item): return self.count(item) == 0 def full(self, item): return self.count(item) == self.level def pop(self, item): return self[item] def size(self): """Return the size of the cache in bytes.""" ga_cache = GlobalArrayCache() class ndarray(object): """ndarray(shape, dtype=float, buffer=None, offset=0, strides=None, order=None) An array object represents a multidimensional, homogeneous array of fixed-size items. An associated data-type object describes the format of each element in the array (its byte-order, how many bytes it occupies in memory, whether it is an integer, a floating point number, or something else, etc.) Arrays should be constructed using `array`, `zeros` or `empty` (refer to the See Also section below). The parameters given here refer to a low-level method (`ndarray(...)`) for instantiating an array. For more information, refer to the `numpy` module and examine the the methods and attributes of an array. Parameters ---------- (for the __new__ method; see Notes below) shape : tuple of ints Shape of created array. dtype : data-type, optional Any object that can be interpreted as a numpy data type. buffer : object exposing buffer interface, optional Used to fill the array with data. offset : int, optional Offset of array data in buffer. strides : tuple of ints, optional Strides of data in memory. order : {'C', 'F'}, optional Row-major or column-major order. Parameters added for Global Arrays ---------------------------------- base : ndarray Should be a "gainarray". Used during view creation so that a new Global Array is not created and other attributes from base are copied into the view ndarray. Attributes ---------- T : ndarray Transpose of the array. data : buffer The array's elements, in memory. dtype : dtype object Describes the format of the elements in the array. flags : dict Dictionary containing information related to memory use, e.g., 'C_CONTIGUOUS', 'OWNDATA', 'WRITEABLE', etc. flat : numpy.flatiter object Flattened version of the array as an iterator. The iterator allows assignments, e.g., ``x.flat = 3`` (See `ndarray.flat` for assignment examples; TODO). imag : ndarray Imaginary part of the array. real : ndarray Real part of the array. size : int Number of elements in the array. itemsize : int The memory use of each array element in bytes. nbytes : int The total number of bytes required to store the array data, i.e., ``itemsize * size``. ndim : int The array's number of dimensions. shape : tuple of ints Shape of the array. strides : tuple of ints The step-size required to move from one element to the next in memory. For example, a contiguous ``(3, 4)`` array of type ``int16`` in C-order has strides ``(8, 2)``. This implies that to move from element to element in memory requires jumps of 2 bytes. To move from row-to-row, one needs to jump 8 bytes at a time (``2 * 4``). ctypes : ctypes object Class containing properties of the array needed for interaction with ctypes. base : ndarray If the array is a view into another array, that array is its `base` (unless that array is also a view). The `base` array is where the array data is actually stored. Attributes added for Global Arrays ---------------------------------- handle : int The Global Arrays handle. global_slice: tuple of integers and/or slice objects Represents the slice to take from this ndarray. global_slice is calculated first based on the shape of the array, then as slices are taken from it, slice arithmetic is performed. When an ndarray is accessed or converted to an ndarray, the global_slice is used to turn the ndarray into its correct shape/strides before returning to the caller. _is_real : bool Whether this is a 'real' view of a complex ndarray. _is_imag : bool Whether this is an 'imag' view of a complex ndarray. _T : None, tuple of ints None, or a tuple of ints If a transpose has been applied. 'i' in the 'j'-th place in the tuple means 'a's 'i'-th axis becomes 'a.transpose()'s 'j'-th axis. _T_inv : None, tuple of ints The inverse of _T, or how to reverse the current transpose See Also -------- array : Construct an array. zeros : Create an array, each element of which is zero. empty : Create an array, but leave its allocated memory unchanged (i.e., it contains "garbage"). dtype : Create a data-type. Notes ----- There are two modes of creating an array using ``__new__``: 1. If `buffer` is None, then only `shape`, `dtype`, and `order` are used. 2. If `buffer` is an object exposing the buffer interface, then all keywords are interpreted. No ``__init__`` method is needed because the array is fully initialized after the ``__new__`` method. Examples -------- These examples illustrate the low-level `ndarray` constructor. Refer to the `See Also` section above for easier ways of constructing an ndarray. First mode, `buffer` is None: >>> np.ndarray(shape=(2,2), dtype=float, order='F') array([[ -1.13698227e+002, 4.25087011e-303], [ 2.88528414e-306, 3.27025015e-309]]) Second mode: >>> np.ndarray((2,), buffer=np.array([1,2,3]), ... offset=np.int_().itemsize, ... dtype=int) # offset = 1*itemsize, i.e. skip first element array([2, 3]) """ def __new__(cls, shape, dtype=float, buffer=None, offset=0, strides=None, order=None, base=None): if base is None and not should_distribute(shape): return np.ndarray(shape, dtype, buffer, offset, strides, order) return super(ndarray, cls).__new__(cls) def __init__(self, shape, dtype=float, buffer=None, offset=0, strides=None, order=None, base=None): shape = tuplify(shape) if order not in [None,'C','F']: raise TypeError, "order not understood" if order is None: order = 'C' if order is 'F': raise NotImplementedError, "Fortran order not supported" self._dtype = np.dtype(dtype) self._order = order self._base = base self._is_real = False self._is_imag = False if base is None: self.global_slice = util.MasterKey(shape) self._flags = flagsobj() dtype_ = self._dtype gatype = None if dtype_ in gatypes: gatype = gatypes[dtype_] else: gatype = ga.register_dtype(dtype_) gatypes[dtype_] = gatype if (shape,dtype_.str) in ga_cache: self.handle = ga_cache.pop((shape,dtype_.str)) else: self.handle = ga.create(gatype, shape, pgroup=ga.pgroup_get_default()) if buffer is not None: local = ga.access(self.handle) if local is not None: a = None if isinstance(buffer, np.ndarray): buffer.shape = shape a = buffer else: a = np.ndarray(shape, dtype_, buffer, offset, strides, order) local[:] = a[ga.zip(*self.distribution())] self.release_update() self._strides = [self.itemsize] for size in shape[-1:0:-1]: self._strides = [size*self._strides[0]] + self._strides elif isinstance(base, ndarray): self.global_slice = base.global_slice self.handle = base.handle self._strides = strides self._is_real = base._is_real self._is_imag = base._is_imag self._flags = base._flags self._flags._c = False self._flags._o = False else: # assume base is a g_a handle self.handle = base self.global_slice = util.MasterKey(shape) self._flags = flagsobj() self._strides = [self.itemsize] for size in shape[-1:0:-1]: self._strides = [size*self._strides[0]] + self._strides def __del__(self): if self._base is None: if ga.initialized(): shape = self.shape if ga_cache.full((shape,self.dtype.str)): ga.destroy(self.handle) else: ga_cache[(shape,self.dtype.str)] = self.handle ################################################################ ### ndarray methods added for Global Arrays ################################################################ def distribution(self): """Return the bounds of the distribution. Always returns the lo/hi distribution based on the original shape of the array. This operation is local. """ return ga.distribution(self.handle) def owns(self): """Return True if this process owns some of the data. This operation is local. """ lo,hi = self.distribution() return np.all(hi>=0) def access(self, global_slice=None): """Access the local array. Return None if no data is owned. This operation is local. """ # we access the entire block for this process a = ga.access(self.handle) if a is None: return None # bail; this process doesn't own any data # get the original GA distribution lo,hi = ga.distribution(self.handle) # caller may pass in a different global_slice if global_slice is None: global_slice = self.global_slice # transpose, if needed b = a.transpose(global_slice.lohi_T()) # slice away any fixed dimensions try: fixed_slice = global_slice.access_key(lo,hi) except IndexError: self.release() return None # bail; this process doesn't own relevant piece c = b[fixed_slice] # at this point the shape of c should match the global_slice shape # except for any None/newaxis added d = c[global_slice.None_key()] return d def get(self, key=None): """Similar to the __getitem__ built-in, but one-sided (not collective.) We sometimes want the semantics of "slicing" an ndarray and then immediately calling ga.get() to fetch the result. We can't use the __getitem__ built-in because it is a collective operation. For example, during a ufunc we need to get() the corresponding pieces of the arrays and that is where this function is handy. This operation is one-sided. """ # caller may modify the global_slice global_slice = self.global_slice if key is not None: global_slice = self.global_slice[key] # determine the lo/hi/skip for the ga.strided_get() _lo,_hi,_skip,adjust,need_strided = global_slice.get_lo_hi_skip_adjust() if need_strided: ret = ga.strided_get(self.handle, _lo, _hi, _skip) else: ret = ga.get(self.handle, _lo, _hi) # pull out real or imag parts, if needed if self._is_real: ret = ret.real elif self._is_imag: ret = ret.imag # apply the adjustment (which only reverses some dimensions, if needed) ret = ret[adjust] # transpose the result, if needed ret = ret.transpose(global_slice.lohi_T()) # reshape the array based on global_slice # this will add any newaxis and remove any fixed dimensions ret.shape = global_slice.shape return ret def allget(self, key=None): """Like get(), but when all processes need the same piece. This operation is collective. """ # TODO it's not clear whether this approach is better than having all # P processors ga.get() the same piece. if not me(): result = self.get(key) return comm().bcast(result) else: return comm().bcast() def gather(self, i): """Use ga.gather() but modify the indicies `i' based on global_slice. Parameters ---------- i : 1D or 2D array of indices see ga.gather() documentation) """ # we need to modify the indices based on the global_slice # the underlying GA instance might not have the same shape, may be a # view, etc # make sure we're always working with a 2D index array i = np.asarray(i, dtype=np.int64) if i.ndim == 1: i.shape = (-1,self.ndim) step = [] start = [] for gs in self.global_slice: if isinstance(gs, util.RangeKey): step.append(gs.step) start.append(gs.start) elif isinstance(gs, util.NoneKey): step.append(1) start.append(0) elif isinstance(gs, util.FixedKey): pass else: raise TypeError, "unhandled piece of global_slice" # modify new index array based on global_slice new_i = (i*np.asarray(step,dtype=np.int64)[None,:] + np.asarray(start, dtype=np.int64)[None,:]) # get rid of index columns which don't refer to an actual GA dimension # add index columns which were missing, single-valued GA dimensions columns = np.hsplit(new_i,self.ndim) # returns a list column_iter = iter(columns) new_columns = [None]*self.global_slice.get_original_ndim() for fixed in self.global_slice.fixed: new_column = np.empty((len(new_i),1),dtype=np.int64) new_column[:] = fixed.value new_columns[fixed.origin] = new_column for col,gs in zip(columns,self.global_slice.data): if isinstance(gs, util.RangeKey): # no change to column new_columns[gs.origin] = col elif isinstance(gs, util.NoneKey): # skip column pass elif isinstance(gs, util.FixedKey): raise TypeError, "FixedKey found in MasterKey" else: raise TypeError, "unhandled piece of global_slice" new_i = np.hstack(new_columns) return ga.gather(self.handle, new_i) def release(self): ga.release(self.handle) def release_update(self): ga.release_update(self.handle) ################################################################ ### ndarray properties ################################################################ def _get_T(self): return self.transpose() T = property(_get_T) def _get_data(self): a = self.access() if a is not None: return a.data return None data = property(_get_data) def _get_dtype(self): return self._dtype dtype = property(_get_dtype) def _get_flags(self): return self._flags flags = property(_get_flags) def _get_flat(self): return flatiter(self) def _set_flat(self, value): a = flatiter(self) a[:] = value flat = property(_get_flat,_set_flat) def _get_imag(self): if self._dtype.kind != 'c': return zeros(self.shape, self.dtype) else: ret = self[:] ret._is_imag = True ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) return ret def _set_imag(self, value): if self._dtype.kind != 'c': raise TypeError, "array does not have imaginary part to set" else: self._get_imag()[:] = value imag = property(_get_imag,_set_imag) def _get_real(self): if self._dtype.kind != 'c': return self else: ret = self[:] ret._is_real = True ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) return ret def _set_real(self, value): self._get_real()[:] = value real = property(_get_real,_set_real) def _get_size(self): return reduce(lambda x,y: x*y, self.shape, 1) size = property(_get_size) def _get_itemsize(self): return self._dtype.itemsize itemsize = property(_get_itemsize) def _get_nbytes(self): return self.itemsize * self.size nbytes = property(_get_nbytes) def _get_ndim(self): return len(self.shape) ndim = property(_get_ndim) def _get_shape(self): return self.global_slice.shape def _set_shape(self, value): if self.base is None: # we can change the underlying GA # we do this by creating a new ndarray and copying properties a = self.reshape(value) ga.destroy(self.handle) self.handle = a.handle self.global_slice = a.global_slice self._strides = a.strides self._flags = a._flags else: raise AttributeError, "incompatible shape for a non-contiguous array" shape = property(_get_shape, _set_shape) def _get_strides(self): strides = [self.itemsize] for size in self.shape[-1:0:-1]: strides = [size*strides[0]] + strides return strides strides = property(_get_strides) def _get_ctypes(self): raise NotImplementedError, "TODO" ctypes = property(_get_ctypes) def _get_base(self): return self._base base = property(_get_base) ################################################################ ### ndarray methods ################################################################ def all(self, axis=None, out=None): """Returns True if all elements evaluate to True. Refer to `numpy.all` for full documentation. See Also -------- numpy.all : equivalent function """ raise NotImplementedError def any(self, axis=None, out=None): """ Returns True if any of the elements of `a` evaluate to True. Refer to `numpy.any` for full documentation. See Also -------- numpy.any : equivalent function """ raise NotImplementedError def argmax(self, axis=None, out=None): """Return indices of the maximum values along the given axis. Refer to `numpy.argmax` for full documentation. See Also -------- numpy.argmax : equivalent function """ raise NotImplementedError def argmin(self, axis=None, out=None): """Return indices of the minimum values along the given axis of `a`. Refer to `numpy.argmin` for detailed documentation. See Also -------- numpy.argmin : equivalent function """ raise NotImplementedError def argsort(self, axis=-1, kind='quicksort', order=None): """Returns the indices that would sort this array. Refer to `numpy.argsort` for full documentation. See Also -------- numpy.argsort : equivalent function """ raise NotImplementedError def astype(self, t): """Copy of the array, cast to a specified type. Parameters ---------- t : string or dtype Typecode or data-type to which the array is cast. Examples -------- >>> x = np.array([1, 2, 2.5]) >>> x array([ 1. , 2. , 2.5]) >>> x.astype(int) array([1, 2, 2]) """ # TODO we can optimize a copy if new and old ndarray instances align the_copy = ndarray(self.shape, dtype=t) if should_distribute(the_copy.size): local = the_copy.access() if local is not None: lo,hi = the_copy.distribution() local[:] = self.get(ga.zip(lo,hi)) the_copy.release_update() else: # case where the copy is not distributed but the original was the_copy[:] = self.allget() return the_copy def byteswap(self, inplace=False): """Swap the bytes of the array elements Toggle between low-endian and big-endian data representation by returning a byteswapped array, optionally swapped in-place. Parameters ---------- inplace: bool, optional If ``True``, swap bytes in-place, default is ``False``. Returns ------- out: ndarray The byteswapped array. If `inplace` is ``True``, this is a view to self. Examples -------- >>> A = np.array([1, 256, 8755], dtype=np.int16) >>> map(hex, A) ['0x1', '0x100', '0x2233'] >>> A.byteswap(True) array([ 256, 1, 13090], dtype=int16) >>> map(hex, A) ['0x100', '0x1', '0x3322'] Arrays of strings are not swapped >>> A = np.array(['ceg', 'fac']) >>> A.byteswap() array(['ceg', 'fac'], dtype='|S3') """ raise NotImplementedError def choose(self, choices, out=None, mode='raise'): """Use an index array to construct a new array from a set of choices. Refer to `numpy.choose` for full documentation. See Also -------- numpy.choose : equivalent function """ raise NotImplementedError def clip(self, a_min, a_max, out=None): """Return an array whose values are limited to ``[a_min, a_max]``. Refer to `numpy.clip` for full documentation. See Also -------- numpy.clip : equivalent function """ raise NotImplementedError def compress(self, condition, axis=None, out=None): """Return selected slices of this array along given axis. Refer to `numpy.compress` for full documentation. See Also -------- numpy.compress : equivalent function """ return NotImplementedError def conj(self): """Complex-conjugate all elements. Refer to `numpy.conjugate` for full documentation. See Also -------- numpy.conjugate : equivalent function """ raise NotImplementedError def conjugate(self): """Return the complex conjugate, element-wise. Refer to `numpy.conjugate` for full documentation. See Also -------- numpy.conjugate : equivalent function """ raise NotImplementedError def copy(self, order='C'): """Return a copy of the array. Parameters ---------- order : {'C', 'F', 'A'}, optional By default, the result is stored in C-contiguous (row-major) order in memory. If `order` is `F`, the result has 'Fortran' (column-major) order. If order is 'A' ('Any'), then the result has the same order as the input. Examples -------- >>> x = np.array([[1,2,3],[4,5,6]], order='F') >>> y = x.copy() >>> x.fill(0) >>> x array([[0, 0, 0], [0, 0, 0]]) >>> y array([[1, 2, 3], [4, 5, 6]]) >>> y.flags['C_CONTIGUOUS'] True """ # TODO we can optimize a copy if new and old ndarray instances align the_copy = ndarray(self.shape, dtype=self.dtype) if should_distribute(the_copy.size): local = the_copy.access() if local is not None: lo,hi = the_copy.distribution() local[:] = self.get(ga.zip(lo,hi)) the_copy.release_update() else: # case where the copy is not distributed but the original was the_copy[:] = self.allget() return the_copy def cumprod(self, axis=None, dtype=None, out=None): """Return the cumulative product of the elements along the given axis. Refer to `numpy.cumprod` for full documentation. See Also -------- numpy.cumprod : equivalent function """ raise NotImplementedError def cumsum(self, axis=None, dtype=None, out=None): """Return the cumulative sum of the elements along the given axis. Refer to `numpy.cumsum` for full documentation. See Also -------- numpy.cumsum : equivalent function """ raise NotImplementedError def diagonal(self, offset=0, axis1=0, axis2=1): """Return specified diagonals. Refer to `numpy.diagonal` for full documentation. See Also -------- numpy.diagonal : equivalent function """ if self.ndim < 2: raise ValueError, "array.ndim must be >= 2" if self.ndim != 2: raise NotImplementedError, "diagonal for a.ndim > 2" nrow,ncol = self.shape if offset >= 0: size = min(ncol-offset,nrow) else: size = min(nrow+offset,ncol) out = ndarray(size, dtype=self.dtype) if not is_distributed(out): raise NotImplementedError, "resulting diagonal is not distributed" npout = out.access() if npout is not None: indices = np.empty((size,2), dtype=np.int64) if offset >= 0: indices[:,0] = np.arange(size, dtype=np.int64) indices[:,1] = np.arange(offset, size+offset, dtype=np.int64) else: offset = -offset indices[:,0] = np.arange(offset, size+offset, dtype=np.int64) indices[:,1] = np.arange(size, dtype=np.int64) my_range = out.global_slice.bound_by_lohi(*out.distribution()) my_range = my_range[0].pyobj() my_indices = indices[my_range] npout[:] = self.gather(my_indices) return out def dot(self, b, out=None): """a.dot(b, out=None) Dot product of two arrays. Refer to `numpy.dot` for full documentation. See Also -------- numpy.dot : equivalent function Examples -------- >>> a = np.eye(2) >>> b = np.ones((2, 2)) * 2 >>> a.dot(b) array([[ 2., 2.], [ 2., 2.]]) This array method can be conveniently chained: >>> a.dot(b).dot(b) array([[ 8., 8.], [ 8., 8.]]) """ raise NotImplementedError def dump(self, file): """Dump a pickle of the array to the specified file. The array can be read back with pickle.load or numpy.load. Parameters ---------- file : str A string naming the dump file. """ raise NotImplementedError def dumps(self): """Returns the pickle of the array as a string. pickle.loads or numpy.loads will convert the string back to an array. Parameters ---------- None """ raise NotImplementedError def fill(self, value): """Fill the array with a scalar value. Parameters ---------- value : scalar All elements of `a` will be assigned this value. Examples -------- >>> a = np.array([1, 2]) >>> a.fill(0) >>> a array([0, 0]) >>> a = np.empty(2) >>> a.fill(1) >>> a array([ 1., 1.]) """ a = self.access() if a is not None: a.fill(value) self.release_update() def flatten(self, order='C'): """Return a copy of the array collapsed into one dimension. Parameters ---------- order : {'C', 'F'}, optional Whether to flatten in C (row-major) or Fortran (column-major) order. The default is 'C'. Returns ------- y : ndarray A copy of the input array, flattened to one dimension. See Also -------- ravel : Return a flattened array. flat : A 1-D flat iterator over the array. Examples -------- >>> a = np.array([[1,2], [3,4]]) >>> a.flatten() array([1, 2, 3, 4]) >>> a.flatten('F') array([1, 3, 2, 4]) """ return self.reshape(self.size) def getfield(self, dtype, offset): """Returns a field of the given array as a certain type. A field is a view of the array data with each itemsize determined by the given type and the offset into the current array, i.e. from ``offset * dtype.itemsize`` to ``(offset+1) * dtype.itemsize``. Parameters ---------- dtype : str String denoting the data type of the field. offset : int Number of `dtype.itemsize`'s to skip before beginning the element view. Examples -------- >>> x = np.diag([1.+1.j]*2) >>> x array([[ 1.+1.j, 0.+0.j], [ 0.+0.j, 1.+1.j]]) >>> x.dtype dtype('complex128') >>> x.getfield('complex64', 0) # Note how this != x array([[ 0.+1.875j, 0.+0.j ], [ 0.+0.j , 0.+1.875j]], dtype=complex64) >>> x.getfield('complex64',1) # Note how different this is than x array([[ 0. +5.87173204e-39j, 0. +0.00000000e+00j], [ 0. +0.00000000e+00j, 0. +5.87173204e-39j]], dtype=complex64) >>> x.getfield('complex128', 0) # == x array([[ 1.+1.j, 0.+0.j], [ 0.+0.j, 1.+1.j]]) If the argument dtype is the same as x.dtype, then offset != 0 raises a ValueError: >>> x.getfield('complex128', 1) Traceback (most recent call last): File "", line 1, in ValueError: Need 0 <= offset <= 0 for requested type but received offset = 1 >>> x.getfield('float64', 0) array([[ 1., 0.], [ 0., 1.]]) >>> x.getfield('float64', 1) array([[ 1.77658241e-307, 0.00000000e+000], [ 0.00000000e+000, 1.77658241e-307]]) """ raise NotImplementedError def item(self, *args): """Copy an element of an array to a standard Python scalar and return it. Parameters ---------- \*args : Arguments (variable number and type) * none: in this case, the method only works for arrays with one element (`a.size == 1`), which element is copied into a standard Python scalar object and returned. * int_type: this argument is interpreted as a flat index into the array, specifying which element to copy and return. * tuple of int_types: functions as does a single int_type argument, except that the argument is interpreted as an nd-index into the array. Returns ------- z : Standard Python scalar object A copy of the specified element of the array as a suitable Python scalar Notes ----- When the data type of `a` is longdouble or clongdouble, item() returns a scalar array object because there is no available Python scalar that would not lose information. Void arrays return a buffer object for item(), unless fields are defined, in which case a tuple is returned. `item` is very similar to a[args], except, instead of an array scalar, a standard Python scalar is returned. This can be useful for speeding up access to elements of the array and doing arithmetic on elements of the array using Python's optimized math. Examples -------- >>> x = np.random.randint(9, size=(3, 3)) >>> x array([[3, 1, 7], [2, 8, 3], [8, 5, 3]]) >>> x.item(3) 2 >>> x.item(7) 5 >>> x.item((0, 1)) 1 >>> x.item((2, 2)) 3 """ raise NotImplementedError def itemset(self, *args): """Insert scalar into an array (scalar is cast to array's dtype, if possible) There must be at least 1 argument, and define the last argument as *item*. Then, ``a.itemset(*args)`` is equivalent to but faster than ``a[args] = item``. The item should be a scalar value and `args` must select a single item in the array `a`. Parameters ---------- \*args : Arguments If one argument: a scalar, only used in case `a` is of size 1. If two arguments: the last argument is the value to be set and must be a scalar, the first argument specifies a single array element location. It is either an int or a tuple. Notes ----- Compared to indexing syntax, `itemset` provides some speed increase for placing a scalar into a particular location in an `ndarray`, if you must do this. However, generally this is discouraged: among other problems, it complicates the appearance of the code. Also, when using `itemset` (and `item`) inside a loop, be sure to assign the methods to a local variable to avoid the attribute look-up at each loop iteration. Examples -------- >>> x = np.random.randint(9, size=(3, 3)) >>> x array([[3, 1, 7], [2, 8, 3], [8, 5, 3]]) >>> x.itemset(4, 0) >>> x.itemset((2, 2), 9) >>> x array([[3, 1, 7], [2, 0, 3], [8, 5, 9]]) """ raise NotImplementedError def max(self, axis=None, out=None): """Return the maximum along a given axis. Refer to `numpy.amax` for full documentation. See Also -------- numpy.amax : equivalent function """ if axis is None: a = self.access() if a is not None: result = np.maximum.reduce(a) while result.ndim > 0: result = np.maximum.reduce(result) result = comm().allgather(result) result = np.maximum.reduce(result) else: # we don't own anything, so get an actual value from the array result = self.get([0]*self.ndim) result = comm().allgather(result) result = np.maximum.reduce(result) if out is None: return result else: out[:] = result return out else: return maximum.reduce(self, axis, out) def mean(self, axis=None, dtype=None, out=None): """Returns the average of the array elements along given axis. Refer to `numpy.mean` for full documentation. See Also -------- numpy.mean : equivalent function """ raise NotImplementedError def min(self, axis=None, out=None): """Return the minimum along a given axis. Refer to `numpy.amin` for full documentation. See Also -------- numpy.amin : equivalent function """ if axis is None: a = self.access() if a is not None: result = np.minimum.reduce(a) while result.ndim > 0: result = np.minimum.reduce(result) result = comm().allgather(result) result = np.minimum.reduce(result) else: # we don't own anything, so get an actual value from the array result = self.get([0]*self.ndim) result = comm().allgather(result) result = np.minimum.reduce(result) if out is None: return result else: out[:] = result return out else: return minimum.reduce(self, axis, out) def newbyteorder(self, new_order='S'): """Return the array with the same data viewed with a different byte order. Equivalent to:: arr.view(arr.dtype.newbytorder(new_order)) Changes are also made in all fields and sub-arrays of the array data type. Parameters ---------- new_order : string, optional Byte order to force; a value from the byte order specifications above. `new_order` codes can be any of:: * 'S' - swap dtype from current to opposite endian * {'<', 'L'} - little endian * {'>', 'B'} - big endian * {'=', 'N'} - native order * {'|', 'I'} - ignore (no change to byte order) The default value ('S') results in swapping the current byte order. The code does a case-insensitive check on the first letter of `new_order` for the alternatives above. For example, any of 'B' or 'b' or 'biggish' are valid to specify big-endian. Returns ------- new_arr : array New array object with the dtype reflecting given change to the byte order. """ raise NotImplementedError def nonzero(self): """Return the indices of the elements that are non-zero. Refer to `numpy.nonzero` for full documentation. See Also -------- numpy.nonzero : equivalent function """ raise NotImplementedError def prod(self, axis=None, dtype=None, out=None): """Return the product of the array elements over the given axis Refer to `numpy.prod` for full documentation. See Also -------- numpy.prod : equivalent function """ raise NotImplementedError def ptp(self, axis=None, out=None): """Peak to peak (maximum - minimum) value along a given axis. Refer to `numpy.ptp` for full documentation. See Also -------- numpy.ptp : equivalent function """ raise NotImplementedError def put(self, indices, values, mode='raise'): """Set ``a.flat[n] = values[n]`` for all `n` in indices. Refer to `numpy.put` for full documentation. See Also -------- numpy.put : equivalent function """ raise NotImplementedError def ravel(self, order=None): """Return a flattened array. Refer to `numpy.ravel` for full documentation. See Also -------- numpy.ravel : equivalent function ndarray.flat : a flat iterator on the array. """ raise NotImplementedError def repeat(self, repeats, axis=None): """Repeat elements of an array. Refer to `numpy.repeat` for full documentation. See Also -------- numpy.repeat : equivalent function """ raise NotImplementedError def reshape(self, shape, order='C', *args): """Returns an array containing the same data with a new shape. Refer to `numpy.reshape` for full documentation. See Also -------- numpy.reshape : equivalent function """ if type(order) == type(""): # assume user specified a shape tuple shape = listify(shape) else: # assume user specified an unpacked shape e.g. reshape(3,4,5) shape = listify([shape]+[order]+list(args)) order = 'C' shape = np.asarray(shape, dtype=np.int64) count_neg_ones = shape[shape==-1].size if count_neg_ones > 1: raise ValueError, "can only specify one unknown dimension" if count_neg_ones == 1: shape_product = np.prod(shape)*(-1) if np.size%shape_product != 0: raise ValueError, "total size of new array must be unchanged" shape[shape==-1] = np.size//shape_product # now that shape is established, create new array a = ndarray(shape, dtype=self.dtype) # based on distribution, gather same indices from self nda = a.access() if nda is not None: lo,hi = a.distribution() lohi_shape = hi-lo i = np.indices(lohi_shape).reshape(len(lohi_shape),-1).T + lo # get the flattened indices strides = [1] for size in shape[-1:0:-1]: strides = [size*strides[0]] + strides i_flat = np.sum(i*strides, axis=1) # unravel the flattened indices based on the original array i_unravel = util.unravel_index(i_flat, self.shape) nda.flat = self.gather(i_unravel) a.release_update() return a def resize(self, new_shape, refcheck=True): """Change shape and size of array in-place. Parameters ---------- new_shape : tuple of ints, or `n` ints Shape of resized array. refcheck : bool, optional If False, reference count will not be checked. Default is True. Returns ------- None Raises ------ ValueError If `a` does not own its own data or references or views to it exist, and the data memory must be changed. SystemError If the `order` keyword argument is specified. This behaviour is a bug in NumPy. See Also -------- resize : Return a new array with the specified shape. Notes ----- This reallocates space for the data area if necessary. Only contiguous arrays (data elements consecutive in memory) can be resized. The purpose of the reference count check is to make sure you do not use this array as a buffer for another Python object and then reallocate the memory. However, reference counts can increase in other ways so if you are sure that you have not shared the memory for this array with another Python object, then you may safely set `refcheck` to False. Examples -------- Shrinking an array: array is flattened (in the order that the data are stored in memory), resized, and reshaped: >>> a = np.array([[0, 1], [2, 3]], order='C') >>> a.resize((2, 1)) >>> a array([[0], [1]]) >>> a = np.array([[0, 1], [2, 3]], order='F') >>> a.resize((2, 1)) >>> a array([[0], [2]]) Enlarging an array: as above, but missing entries are filled with zeros: >>> b = np.array([[0, 1], [2, 3]]) >>> b.resize(2, 3) # new_shape parameter doesn't have to be a tuple >>> b array([[0, 1, 2], [3, 0, 0]]) Referencing an array prevents resizing... >>> c = a >>> a.resize((1, 1)) Traceback (most recent call last): ... ValueError: cannot resize an array that has been referenced ... Unless `refcheck` is False: >>> a.resize((1, 1), refcheck=False) >>> a array([[0]]) >>> c array([[0]]) """ raise NotImplementedError def round(self, decimals=0, out=None): """Return `a` with each element rounded to the given number of decimals. Refer to `numpy.around` for full documentation. See Also -------- numpy.around : equivalent function """ raise NotImplementedError def searchsorted(self, v, side='left'): """Find indices where elements of v should be inserted in a to maintain order. For full documentation, see `numpy.searchsorted` See Also -------- numpy.searchsorted : equivalent function """ raise NotImplementedError def setfield(self, val, dtype, offset=0): """Put a value into a specified place in a field defined by a data-type. Place `val` into `a`'s field defined by `dtype` and beginning `offset` bytes into the field. Parameters ---------- val : object Value to be placed in field. dtype : dtype object Data-type of the field in which to place `val`. offset : int, optional The number of bytes into the field at which to place `val`. Returns ------- None See Also -------- getfield Examples -------- >>> x = np.eye(3) >>> x.getfield(np.float64) array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]]) >>> x.setfield(3, np.int32) >>> x.getfield(np.int32) array([[3, 3, 3], [3, 3, 3], [3, 3, 3]]) >>> x array([[ 1.00000000e+000, 1.48219694e-323, 1.48219694e-323], [ 1.48219694e-323, 1.00000000e+000, 1.48219694e-323], [ 1.48219694e-323, 1.48219694e-323, 1.00000000e+000]]) >>> x.setfield(np.eye(3), np.int32) >>> x array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]]) """ raise NotImplementedError def setflags(self, write=None, align=None, uic=None): """Set array flags WRITEABLE, ALIGNED, and UPDATEIFCOPY, respectively. These Boolean-valued flags affect how numpy interprets the memory area used by `a` (see Notes below). The ALIGNED flag can only be set to True if the data is actually aligned according to the type. The UPDATEIFCOPY flag can never be set to True. The flag WRITEABLE can only be set to True if the array owns its own memory, or the ultimate owner of the memory exposes a writeable buffer interface, or is a string. (The exception for string is made so that unpickling can be done without copying memory.) Parameters ---------- write : bool, optional Describes whether or not `a` can be written to. align : bool, optional Describes whether or not `a` is aligned properly for its type. uic : bool, optional Describes whether or not `a` is a copy of another "base" array. Notes ----- Array flags provide information about how the memory area used for the array is to be interpreted. There are 6 Boolean flags in use, only three of which can be changed by the user: UPDATEIFCOPY, WRITEABLE, and ALIGNED. WRITEABLE (W) the data area can be written to; ALIGNED (A) the data and strides are aligned appropriately for the hardware (as determined by the compiler); UPDATEIFCOPY (U) this array is a copy of some other array (referenced by .base). When this array is deallocated, the base array will be updated with the contents of this array. All flags can be accessed using their first (upper case) letter as well as the full name. Examples -------- >>> y array([[3, 1, 7], [2, 0, 0], [8, 5, 9]]) >>> y.flags C_CONTIGUOUS : True F_CONTIGUOUS : False OWNDATA : True WRITEABLE : True ALIGNED : True UPDATEIFCOPY : False >>> y.setflags(write=0, align=0) >>> y.flags C_CONTIGUOUS : True F_CONTIGUOUS : False OWNDATA : True WRITEABLE : False ALIGNED : False UPDATEIFCOPY : False >>> y.setflags(uic=1) Traceback (most recent call last): File "", line 1, in ValueError: cannot set UPDATEIFCOPY flag to True """ raise NotImplementedError def sort(self, axis=-1, kind='quicksort', order=None): """Sort an array, in-place. Parameters ---------- axis : int, optional Axis along which to sort. Default is -1, which means sort along the last axis. kind : {'quicksort', 'mergesort', 'heapsort'}, optional Sorting algorithm. Default is 'quicksort'. order : list, optional When `a` is an array with fields defined, this argument specifies which fields to compare first, second, etc. Not all fields need be specified. See Also -------- numpy.sort : Return a sorted copy of an array. argsort : Indirect sort. lexsort : Indirect stable sort on multiple keys. searchsorted : Find elements in sorted array. Notes ----- See ``sort`` for notes on the different sorting algorithms. Examples -------- >>> a = np.array([[1,4], [3,1]]) >>> a.sort(axis=1) >>> a array([[1, 4], [1, 3]]) >>> a.sort(axis=0) >>> a array([[1, 3], [1, 4]]) Use the `order` keyword to specify a field to use when sorting a structured array: >>> a = np.array([('a', 2), ('c', 1)], dtype=[('x', 'S1'), ('y', int)]) >>> a.sort(order='y') >>> a array([('c', 1), ('a', 2)], dtype=[('x', '|S1'), ('y', '>> a = np.array([1, 2]) >>> a.tolist() [1, 2] >>> a = np.array([[1, 2], [3, 4]]) >>> list(a) [array([1, 2]), array([3, 4])] >>> a.tolist() [[1, 2], [3, 4]] """ raise NotImplementedError def tostring(self, order='C'): """Construct a Python string containing the raw data bytes in the array. Constructs a Python string showing a copy of the raw contents of data memory. The string can be produced in either 'C' or 'Fortran', or 'Any' order (the default is 'C'-order). 'Any' order means C-order unless the F_CONTIGUOUS flag in the array is set, in which case it means 'Fortran' order. Parameters ---------- order : {'C', 'F', None}, optional Order of the data for multidimensional arrays: C, Fortran, or the same as for the original array. Returns ------- s : str A Python string exhibiting a copy of `a`'s raw data. Examples -------- >>> x = np.array([[0, 1], [2, 3]]) >>> x.tostring() '\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00' >>> x.tostring('C') == x.tostring() True >>> x.tostring('F') '\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00' """ raise NotImplementedError def trace(self, offset=0, axis1=0, axis2=1, dtype=None, out=None): """Return the sum along diagonals of the array. Refer to `numpy.trace` for full documentation. See Also -------- numpy.trace : equivalent function """ raise NotImplementedError def transpose(self, *axes): """Returns a view of the array with axes transposed. For a 1-D array, this has no effect. (To change between column and row vectors, first cast the 1-D array into a matrix object.) For a 2-D array, this is the usual matrix transpose. For an n-D array, if axes are given, their order indicates how the axes are permuted (see Examples). If axes are not provided and ``a.shape = (i[0], i[1], ... i[n-2], i[n-1])``, then ``a.transpose().shape = (i[n-1], i[n-2], ... i[1], i[0])``. Parameters ---------- axes : None, tuple of ints, or `n` ints * None or no argument: reverses the order of the axes. * tuple of ints: `i` in the `j`-th place in the tuple means `a`'s `i`-th axis becomes `a.transpose()`'s `j`-th axis. * `n` ints: same as an n-tuple of the same ints (this form is intended simply as a "convenience" alternative to the tuple form) Returns ------- out : ndarray View of `a`, with axes suitably permuted. See Also -------- ndarray.T : Array property returning the array transposed. Examples -------- >>> a = np.array([[1, 2], [3, 4]]) >>> a array([[1, 2], [3, 4]]) >>> a.transpose() array([[1, 3], [2, 4]]) >>> a.transpose((1, 0)) array([[1, 3], [2, 4]]) >>> a.transpose(1, 0) array([[1, 3], [2, 4]]) """ ret = self[:] if self.ndim < 2: return ret if not axes: # empty axes tuple i.e. no axes were passed axes = np.arange(self.ndim)[::-1] elif len(axes) == 1: # we have either None or a tuple of ints if axes[0] is None: axes = np.arange(self.ndim)[::-1] elif isinstance(axes[0], tuple): axes = axes[0] else: raise ValueError, "invalid axis for this array" else: # assume axes is a tuple of ints axes = np.asarray(axes, dtype=np.int64) if len(axes) != self.ndim: raise ValueError, "axes don't match array" ret.global_slice = self.global_slice.transpose(axes) return ret def var(self, axis=None, dtype=None, out=None, ddof=0): """Returns the variance of the array elements, along given axis. Refer to `numpy.var` for full documentation. See Also -------- numpy.var : equivalent function """ raise NotImplementedError def view(self, dtype=None, type=None): """New view of array with the same data. Parameters ---------- dtype : data-type, optional Data-type descriptor of the returned view, e.g., float32 or int16. The default, None, results in the view having the same data-type as `a`. type : Python type, optional Type of the returned view, e.g., ndarray or matrix. Again, the default None results in type preservation. Notes ----- ``a.view()`` is used two different ways: ``a.view(some_dtype)`` or ``a.view(dtype=some_dtype)`` constructs a view of the array's memory with a different data-type. This can cause a reinterpretation of the bytes of memory. ``a.view(ndarray_subclass)`` or ``a.view(type=ndarray_subclass)`` just returns an instance of `ndarray_subclass` that looks at the same array (same shape, dtype, etc.) This does not cause a reinterpretation of the memory. Examples -------- >>> x = np.array([(1, 2)], dtype=[('a', np.int8), ('b', np.int8)]) Viewing array data using a different type and dtype: >>> y = x.view(dtype=np.int16, type=np.matrix) >>> y matrix([[513]], dtype=int16) >>> print type(y) Creating a view on a structured array so it can be used in calculations >>> x = np.array([(1, 2),(3,4)], dtype=[('a', np.int8), ('b', np.int8)]) >>> xv = x.view(dtype=np.int8).reshape(-1,2) >>> xv array([[1, 2], [3, 4]], dtype=int8) >>> xv.mean(0) array([ 2., 3.]) Making changes to the view changes the underlying array >>> xv[0,1] = 20 >>> print x [(1, 20) (3, 4)] Using a view to convert an array to a record array: >>> z = x.view(np.recarray) >>> z.a array([1], dtype=int8) Views share data: >>> x[0] = (9, 10) >>> z[0] (9, 10) """ raise NotImplementedError ################################################################ ### ndarray operator overloading ################################################################ def __abs__(self): return abs(self) def __add__(self, y): return add(self,y) def __and__(self, y): return logical_and(self,y) def __array__(self, dtype): raise NotImplementedError def __array_finalize__(self, *args, **kwargs): raise NotImplementedError def __array_interface__(self, *args, **kwargs): raise NotImplementedError def __array_prepare__(self, *args, **kwargs): raise NotImplementedError def __array_priority__(self, *args, **kwargs): raise NotImplementedError def __array_struct__(self, *args, **kwargs): raise NotImplementedError def __array_wrap__(self, *args, **kwargs): raise NotImplementedError def __contains__(self, y): raise NotImplementedError def __copy__(self, order=None): """Return a copy of the array. Parameters ---------- order : {'C', 'F', 'A'}, optional If order is 'C' (False) then the result is contiguous (default). If order is 'Fortran' (True) then the result has fortran order. If order is 'Any' (None) then the result has fortran order only if the array already is in fortran order. """ raise NotImplementedError def __deepcopy__(self): raise NotImplementedError #def __delattr__ def __delitem__(self, *args, **kwargs): raise ValueError, "cannot delete array elements" #def __delslice__ def __div__(self, y): return divide(self,y) def __divmod__(self, y): t = mod(self,y) s = subtract(self,t) s = divide(s,y,s) return s,t def __eq__(self, y): return equal(self,y) def __float__(self): raise NotImplementedError def __floordiv__(self,y): return floor_divide(self,y) #def __format__ def __ge__(self,y): return greater_equal(self,y) #def __getattribute__ def __getitem__(self, key): # THIS IS A COLLECTIVE OPERATION if isinstance(key, (str,unicode)): raise NotImplementedError, "str or unicode key" if self.ndim == 0: raise IndexError, "0-d arrays can't be indexed" key = listify(key) fancy = False for arg in key: if isinstance(arg, (ndarray,np.ndarray,list,tuple)): fancy = True break if fancy: raise NotImplementedError, "TODO: fancy indexing" new_global_slice = self.global_slice[key] new_shape = new_global_slice.shape a = ndarray(new_shape, self.dtype, base=self) a.global_slice = new_global_slice if a.size == 1: a = a.allget() # convert single item to np.generic (scalar) a = a.dtype.type(a) return a #def __getslice__ def __gt__(self,y): return greater(self,y) #def __hash__ #def __hex__ def __iadd__(self,y): return add(self,y,self) def __iand__(self,y): return logical_and(self,y,self) def __idiv__(self,y): return divide(self,y,self) def __ifloordiv__(self,y): return floor_divide(self,y,self) def __ilshift__(self,y): return left_shift(self,y,self) def __imod__(self,y): return mod(self,y,self) def __imul__(self,y): return multiply(self,y,self) #def __index__ def __int__(self, *args, **kwargs): if self.size != 1: raise TypeError, "only length-1 arrays can be converted to Python scalars" return np.dtype(np.int32).type(self.allget()) def __invert__(self): return invert(self) def __ior__(self,y): return logical_or(self,y,self) def __ipow__(self,y): return power(self,y,self) def __irshift__(self,y): return right_shift(self,y,self) def __isub__(self,y): return subtract(self,y,self) def __iter__(self, *args, **kwargs): raise NotImplementedError def __itruediv__(self,y): return true_divide(self,y,self) def __ixor__(self,y): return logical_xor(self,y,self) def __le__(self,y): return less_equal(self,y) def __len__(self): return self.shape[0] def __long__(self, *args, **kwargs): raise NotImplementedError def __lshift__(self,y): return left_shift(self,y) def __lt__(self,y): return less(self,y) def __mod__(self,y): return mod(self,y) def __mul__(self,y): return multiply(self,y) def __ne__(self,y): return not_equal(self,y) def __neg__(self): return negative(self) def __nonzero__(self): raise ValueError, ("The truth value of an array with more than one" " element is ambiguous. Use a.any() or a.all()") def __oct__(self, *args, **kwargs): raise NotImplementedError def __or__(self,y): return logical_or(self,y) def __pos__(self): return self.copy() def __pow__(self,y): return power(self,y) def __radd__(self,y): return add(y,self) def __rand__(self,y): return logical_and(y,self) def __rdiv__(self,y): return divide(y,self) def __rdivmod__(self,y): t = mod(y,self) s = subtract(y,t) s = divide(s,self,s) return s,t def __reduce__(self, *args, **kwargs): raise NotImplementedError def __reduce_ex__(self, *args, **kwargs): raise NotImplementedError def __repr__(self): result = "" if 0 == me(): result = repr(self.get()) return result def __rfloordiv__(self,y): return floor_divide(y,self) def __rlshift__(self,y): return left_shift(y,self) def __rmod__(self,y): return mod(y,self) def __rmul__(self,y): return multiply(y,self) def __ror__(self,y): return logical_or(y,self) def __rpow__(self,y): return power(y,self) def __rrshift__(self,y): return right_shift(y,self) def __rshift__(self,y): return right_shift(self,y) def __rsub__(self,y): return subtract(y,self) def __rtruediv__(self,y): return true_divide(y,self) def __rxor__(self,y): return logical_xor(y,self) #def __setattr__ def __setitem__(self, key, value): # THIS IS A COLLECTIVE OPERATION sync() if isinstance(key, (str,unicode)): raise NotImplementedError, "str or unicode key" if self.ndim == 0: raise IndexError, "0-d arrays can't be indexed" key = listify(key) fancy = False for arg in key: if isinstance(arg, (ndarray,np.ndarray,list,tuple)): fancy = True break if fancy: raise NotImplementedError, "TODO: fancy indexing" global_slice = self.global_slice[key] new_shape = global_slice.shape value = asarray(value) npvalue = None release_value = False # access based on new global_slice as an ndarray first npself = self.access(global_slice) if npself is not None: if isinstance(value, ndarray): if (ga.compare_distr(value.handle, self.handle) and value.global_slice == global_slice and value.global_slice.T == self.global_slice.T): # opt: same distributions and same slicing # in practice this might not happen all that often npvalue = value.access() release_value = True else: lo,hi = self.distribution() result = global_slice.get_key(lo,hi) result = util.broadcast_chomp(value.shape, result) npvalue = value.get(result) elif isinstance(value, flatiter): raise NotImplementedError elif value.ndim > 0: lo,hi = self.distribution() result = global_slice.get_key(lo,hi) result = util.broadcast_chomp(value.shape, result) npvalue = value[result] else: npvalue = value npself[:] = npvalue if release_value: value.release() self.release_update() sync() #def __setslice__ #def __setstate__ #def __sizeof__ def __str__(self): result = "" if 0 == me(): result = str(self.get()) return result def __sub__(self,y): return subtract(self,y) #def __subclasshook__ def __truediv__(self,y): return true_divide(self,y) def __xor__(self,y): return logical_xor(self,y) def _npin_piece_based_on_out(input, out, shape=None): # opt: same distributions and same slicing # we can use local data exclusively # in practice this might not happen all that often if (isinstance(input, ndarray) and ga.compare_distr(input.handle, out.handle) and input.global_slice == out.global_slice and input.global_slice.T == out.global_slice.T): return input.access(),True # no opt: requires copy of remote data elif shape is None or len(shape) > 0: lo,hi = out.distribution() result = out.global_slice.get_key(lo,hi) if shape is not None: result = util.broadcast_chomp(shape, result) if is_distributed(input): return input.get(result),False else: return input[result],False else: return input,False class ufunc(object): """Functions that operate element by element on whole arrays. A detailed explanation of ufuncs can be found in the "ufuncs.rst" file in the NumPy reference guide. Unary ufuncs: ============= op(X, out=None) Apply op to X elementwise Parameters ---------- X : array_like Input array. out : array_like An array to store the output. Must be the same shape as `X`. Returns ------- r : array_like `r` will have the same shape as `X`; if out is provided, `r` will be equal to out. Binary ufuncs: ============== op(X, Y, out=None) Apply `op` to `X` and `Y` elementwise. May "broadcast" to make the shapes of `X` and `Y` congruent. The broadcasting rules are: * Dimensions of length 1 may be prepended to either array. * Arrays may be repeated along dimensions of length 1. Parameters ---------- X : array_like First input array. Y : array_like Second input array. out : array_like An array to store the output. Must be the same shape as the output would have. Returns ------- r : array_like The return value; if out is provided, `r` will be equal to out. """ def __init__(self, func): self.func = func self.__doc__ = func.__doc__ def _get_identity(self): return self.func.identity identity = property(_get_identity) def _get_nargs(self): return self.func.nargs nargs = property(_get_nargs) def _get_nin(self): return self.func.nin nin = property(_get_nin) def _get_nout(self): return self.func.nout nout = property(_get_nout) def _get_ntypes(self): return self.func.ntypes ntypes = property(_get_ntypes) def _get_signature(self): return self.func.signature signature = property(_get_signature) def _get_types(self): return self.func.types types = property(_get_types) def __call__(self, *args, **kwargs): if self.func.nin == 1: return self._unary_call(*args, **kwargs) elif self.func.nin == 2: return self._binary_call(*args, **kwargs) else: raise ValueError, "only unary and binary ufuncs supported" def _unary_call(self, input, out=None, *args, **kwargs): input = asarray(input) input_shape = get_shape(input) input_dtype = get_dtype(input) if not (is_distributed(input) or is_distributed(out)): # no ndarray instances used, pass through immediately to numpy return self.func(input, out, *args, **kwargs) if out is None: # input must be an ndarray given previous conditionals # TODO okay, is there something better than this? ignore = np.ones(1, dtype=input_dtype) out_type = self.func(ignore).dtype out = ndarray(input_shape, out_type) # sanity checks if not is_array(out): raise TypeError, "return arrays must be of ArrayType" out_shape = get_shape(out) if input_shape != out_shape: # broadcasting doesn't apply to unary operations raise ValueError, 'invalid return array shape' # Now figure out what to do... if isinstance(out, ndarray): sync() # get out as an np.ndarray first npout = out.access() if npout is not None: # this proc owns data if input is out: npin,release_in = npout,False else: npin,release_in = _npin_piece_based_on_out(input,out) self.func(npin, npout, *args, **kwargs) if release_in: input.release() out.release_update() #sync() elif isinstance(out, flatiter): sync() # first opt: input and out are same object # we call _unary_call over again with the bases # NOT SURE THAT THIS IS ACTUALLY OPTIMAL -- NEED TO TEST if input is out: self._unary_call(out.base, out.base, *args, **kwargs) return out.copy() # differs from NumPy (should be view) else: npout = out.access() if npout is not None: # this proc 'owns' data lo,hi = out.distribution() result = out.global_slice.get_key(lo,hi) if is_distributed(input): npin = input.get(result) else: npin = input[result] self.func(npin, npout, *args, **kwargs) out.release_update() #sync() else: sync() # out is not distributed npin = input if is_distributed(input): npin = input.allget() self.func(npin, out, *args, **kwargs) #sync() # I don't think we need this one return out def _binary_call(self, first, second, out=None, *args, **kwargs): first_isscalar = np.isscalar(first) second_isscalar = np.isscalar(second) # just in case first = asarray(first) second = asarray(second) if not (is_distributed(first) or is_distributed(second) or is_distributed(out)): # no ndarray instances used, pass through immediately to numpy return self.func(first, second, out, *args, **kwargs) first_dtype = get_dtype(first) second_dtype = get_dtype(second) first_shape = get_shape(first) second_shape = get_shape(second) if out is None: # first and/or second must be ndarrays given previous conditionals # TODO okay, is there something better than this? dtype = None if first_isscalar: if second_isscalar: dtype = np.find_common_type([],[first_dtype,second_dtype]) else: dtype = np.find_common_type([second_dtype],[first_dtype]) else: if second_isscalar: dtype = np.find_common_type([first_dtype],[second_dtype]) else: dtype = np.find_common_type([first_dtype,second_dtype],[]) shape = util.broadcast_shape(first_shape, second_shape) out = ndarray(shape, dtype) # sanity checks if not is_array(out): raise TypeError, "return arrays must be of ArrayType" # Now figure out what to do... if isinstance(out, ndarray): sync() # get out as an np.ndarray first npout = out.access() if npout is not None: # this proc owns data # get matching and compatible portions of input arrays # broadcasting rules (may) apply if first is out: npfirst,release_first = npout,False else: npfirst,release_first = _npin_piece_based_on_out( first,out,first_shape) if second is first: # zeroth opt: first and second are same object, so do the # same thing for second that we did for first npsecond,release_second = npfirst,False elif second is out: npsecond,release_second = npout,False else: npsecond,release_second = _npin_piece_based_on_out( second,out,second_shape) self.func(npfirst, npsecond, npout, *args, **kwargs) if release_first: first.release() if release_second: second.release() out.release_update() #sync() elif isinstance(out, flatiter): sync() # first op: first and second and out are same object if first is second is out: self._binary_call(out.base,out.base,out.base,*args,**kwargs) return out.copy() else: npout = out.access() if npout is not None: # this proc 'owns' data lo,hi = out.distribution() result = out.global_slice.get_key(lo,hi) if is_distributed(first): npfirst = first.get(result) else: npfirst = first[result] if second is first: npsecond = npfirst elif is_distributed(second): npsecond = second.get(result) else: npsecond = second[result] self.func(npfirst, npsecond, npout, *args, **kwargs) out.release_update() #sync() else: sync() # out is not distributed ndfirst = first if is_distributed(first): ndfirst = first.allget() ndsecond = second if second is first: ndsecond = ndfirst elif is_distributed(second): ndsecond = second.allget() self.func(ndfirst, ndsecond, out, *args, **kwargs) #sync() # I don't think we need this one return out def reduce(self, a, axis=0, dtype=None, out=None, *args, **kwargs): """reduce(a, axis=0, dtype=None, out=None) Reduces `a`'s dimension by one, by applying ufunc along one axis. Let :math:`a.shape = (N_0, ..., N_i, ..., N_{M-1})`. Then :math:`ufunc.reduce(a, axis=i)[k_0, ..,k_{i-1}, k_{i+1}, .., k_{M-1}]` = the result of iterating `j` over :math:`range(N_i)`, cumulatively applying ufunc to each :math:`a[k_0, ..,k_{i-1}, j, k_{i+1}, .., k_{M-1}]`. For a one-dimensional array, reduce produces results equivalent to: :: r = op.identity # op = ufunc for i in xrange(len(A)): r = op(r, A[i]) return r For example, add.reduce() is equivalent to sum(). Parameters ---------- a : array_like The array to act on. axis : int, optional The axis along which to apply the reduction. dtype : data-type code, optional The type used to represent the intermediate results. Defaults to the data-type of the output array if this is provided, or the data-type of the input array if no output array is provided. out : ndarray, optional A location into which the result is stored. If not provided, a freshly-allocated array is returned. Returns ------- r : ndarray The reduced array. If `out` was supplied, `r` is a reference to it. Examples -------- >>> np.multiply.reduce([2,3,5]) 30 A multi-dimensional array example: >>> X = np.arange(8).reshape((2,2,2)) >>> X array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]]) >>> np.add.reduce(X, 0) array([[ 4, 6], [ 8, 10]]) >>> np.add.reduce(X) # confirm: default axis value is 0 array([[ 4, 6], [ 8, 10]]) >>> np.add.reduce(X, 1) array([[ 2, 4], [10, 12]]) >>> np.add.reduce(X, 2) array([[ 1, 5], [ 9, 13]]) """ if self.func.nin != 2: raise ValueError, "reduce only supported for binary functions" a = asarray(a) if not (isinstance(a, ndarray) or isinstance(out, ndarray)): # no ndarray instances used, pass through immediately to numpy return self.func.reduce(a, axis, dtype, out, *args, **kwargs) if axis < 0: axis += a.ndim if a.ndim < axis < 0: raise ValueError, "axis not in array" if out is None: shape = list(a.shape) del shape[axis] if dtype is None: dtype = a.dtype out = ndarray(shape, dtype=dtype) if out.ndim == 0: # optimize the 1d reduction nda = a.access() value = self.func.identity if nda is not None: value = self.func.reduce(nda) everything = comm().allgather(value) self.func.reduce(everything, out=out) elif out.ndim == 1 and 'OLD_REDUCE' in os.environ: # optimize the 2d reduction ndout = out.access() if ndout is not None: my_range = out.global_slice.bound_by_lohi(*out.distribution()) if axis == 0: # rows my_range = [slice(None,None,None)]+my_range elif axis == 1: # cols my_range = my_range+[slice(None,None,None)] piece = a.get(my_range) self.func.reduce(piece, axis, dtype, ndout, *args, **kwargs) elif out.ndim == 1: # new algorithm using Isend/Irecv send_requests = [] recv_requests = [] nda = a.access() if nda is not None: TAG = 733823 # we own part of the input # reduce it, then find where to send it local_out = self.func.reduce(nda, axis, dtype, *args, **kwargs) lo,hi = a.distribution() if axis == 0: lo,hi = lo[1],hi[1] else: lo,hi = lo[0],hi[0] m,p = ga.locate_region(out.handle, lo, hi) #print_sync("nda m=%s" % str(m)) #print_sync("nda p=%s" % str(p)) for i in range(len(p)): rlo,rhi = m[i] #print_sync("rlo,rhi=%s,%s" % (rlo,rhi)) rlo = rlo - lo rhi = rhi - lo #print_sync("again rlo,rhi=%s,%s" % (rlo,rhi)) send_requests.append( comm().Isend(local_out[rlo:rhi], p[i], TAG)) ndout = out.access() buf = None if ndout is not None: lo,hi = out.distribution() lo,hi = lo[0],hi[0] #print_sync("lo,hi=%s,%s" % (lo,hi)) shape = ga.inquire_dims(a.handle) #print_sync("shape=%s" % shape) olo = [lo,lo] ohi = [hi,hi] #print_sync("olo,ohi=%s,%s" % (olo,ohi)) olo[axis],ohi[axis] = 0,shape[axis] #print_sync("again olo,ohi=%s,%s" % (olo,ohi)) m,p = ga.locate_region(a.handle, olo, ohi) #print_sync("nda m=%s" % str(m)) #print_sync("nda p=%s" % str(p)) buf = np.ndarray((len(p),hi-lo), dtype=out.dtype) buf[:] = self.func.identity for i in range(len(p)): rlo,rhi = m[i] #print_sync("rlo,rhi=%s,%s" % (rlo,rhi)) if axis == 0: rlo,rhi = rlo[1],rhi[1] else: rlo,rhi = rlo[0],rhi[0] #print_sync("again rlo,rhi=%s,%s" % (rlo,rhi)) rlo = rlo - lo rhi = rhi - lo #print_sync("yet again rlo,rhi=%s,%s" % (rlo,rhi)) recv_requests.append( comm().Irecv(buf[i][rlo:rhi], p[i], TAG)) while send_requests or recv_requests: if MPI.Request.Testall(send_requests): send_requests = [] if MPI.Request.Testall(recv_requests): recv_requests = [] if ndout is not None: self.func.reduce(buf, axis=0, out=ndout) out.release_update() if nda is not None: a.release() else: slicer = [slice(0,None,None)]*a.ndim axis_iterator = iter(xrange(a.shape[axis])) # copy first loop iteration to 'out' slicer[axis] = axis_iterator.next() out[:] = a[slicer] # remaining loop iterations are appropriately reduced for i in axis_iterator: slicer[axis] = i ai = a[slicer] self.__call__(out,ai,out) return out def accumulate(self, a, axis=0, dtype=None, out=None, *args, **kwargs): if self.func.nin != 2: raise ValueError, "accumulate only supported for binary functions" a = asarray(a) if not (isinstance(a, ndarray) or isinstance(out, ndarray)): # no ndarray instances used, pass through immediately to numpy return self.func.accumulate(a, axis, dtype, out, *args, **kwargs) if axis < 0: axis += a.ndim if a.ndim < axis < 0: raise ValueError, "axis not in array" if out is None: if dtype is None: dtype = a.dtype out = ndarray(a.shape, dtype=dtype) if out.ndim == 1: # optimize the 1d accumulate if isinstance(out, ndarray): ndout = out.access() if ndout is not None: result = out.global_slice.get_key(*out.distribution()) lo,hi = result[0].start,result[0].stop if is_distributed(a): piece = a.get(result) else: piece = a[lo:hi] self.func.accumulate(piece, out=ndout) # probably more efficient to use allgather and exchange last # values among all procs. We also need ordering information, # so we exchange the 'lo' value. everything = comm().allgather((ndout[-1],lo)) reduction = self.func.identity for lvalue,llo in everything: if lvalue is not None and llo < lo: reduction = self.func(reduction,lvalue) self.func(ndout,reduction,ndout) else: everything = comm().allgather((None,None)) else: raise NotImplementedError else: slicer_i = [slice(0,None,None)]*a.ndim slicer_i_1 = [slice(0,None,None)]*a.ndim axis_iterator = iter(xrange(a.shape[axis])) # copy first loop iteration to 'out' slicer_i[axis] = axis_iterator.next() out[slicer_i] = a[slicer_i] # remaining loop iterations are appropriately accumulated for i in axis_iterator: slicer_i[axis] = i slicer_i_1[axis] = i-1 x = out[slicer_i_1] y = a[slicer_i] z = out[slicer_i] self.__call__(x,y,z) #self.__call__(out[slicer_i_1],a[slicer_i],out[slicer_i]) return out def outer(self, *args, **kwargs): if self.func.nin != 2: raise ValueError, "outer product only supported for binary functions" raise NotImplementedError def reduceat(self, *args, **kwargs): if self.func.nin != 2: raise ValueError, "reduceat only supported for binary functions" raise NotImplementedError # unary ufuncs abs = ufunc(np.abs) absolute = abs arccos = ufunc(np.arccos) arccosh = ufunc(np.arccosh) arcsin = ufunc(np.arcsin) arcsinh = ufunc(np.arcsinh) arctan = ufunc(np.arctan) arctanh = ufunc(np.arctanh) bitwise_not = ufunc(np.bitwise_not) ceil = ufunc(np.ceil) conj = ufunc(np.conj) conjugate = ufunc(np.conjugate) cos = ufunc(np.cos) cosh = ufunc(np.cosh) deg2rad = ufunc(np.deg2rad) degrees = ufunc(np.degrees) exp = ufunc(np.exp) exp2 = ufunc(np.exp2) expm1 = ufunc(np.expm1) fabs = ufunc(np.fabs) floor = ufunc(np.floor) frexp = ufunc(np.frexp) invert = ufunc(np.invert) isfinite = ufunc(np.isfinite) isinf = ufunc(np.isinf) isnan = ufunc(np.isnan) log = ufunc(np.log) log2 = ufunc(np.log2) log10 = ufunc(np.log10) log1p = ufunc(np.log1p) logical_not = ufunc(np.logical_not) modf = ufunc(np.modf) negative = ufunc(np.negative) rad2deg = ufunc(np.rad2deg) radians = ufunc(np.radians) reciprocal = ufunc(np.reciprocal) rint = ufunc(np.rint) sign = ufunc(np.sign) signbit = ufunc(np.signbit) sin = ufunc(np.sin) sinh = ufunc(np.sinh) spacing = ufunc(np.spacing) sqrt = ufunc(np.sqrt) square = ufunc(np.square) tan = ufunc(np.tan) tanh = ufunc(np.tanh) trunc = ufunc(np.trunc) # binary ufuncs add = ufunc(np.add) arctan2 = ufunc(np.arctan2) bitwise_and = ufunc(np.bitwise_and) bitwise_or = ufunc(np.bitwise_or) bitwise_xor = ufunc(np.bitwise_xor) copysign = ufunc(np.copysign) divide = ufunc(np.divide) equal = ufunc(np.equal) floor_divide = ufunc(np.floor_divide) fmax = ufunc(np.fmax) fmin = ufunc(np.fmin) fmod = ufunc(np.fmod) greater = ufunc(np.greater) greater_equal = ufunc(np.greater_equal) hypot = ufunc(np.hypot) ldexp = ufunc(np.ldexp) left_shift = ufunc(np.left_shift) less = ufunc(np.less) less_equal = ufunc(np.less_equal) logaddexp = ufunc(np.logaddexp) logaddexp2 = ufunc(np.logaddexp2) logical_and = ufunc(np.logical_and) logical_or = ufunc(np.logical_or) logical_xor = ufunc(np.logical_xor) maximum = ufunc(np.maximum) minimum = ufunc(np.minimum) mod = ufunc(np.mod) multiply = ufunc(np.multiply) nextafter = ufunc(np.nextafter) not_equal = ufunc(np.not_equal) power = ufunc(np.power) remainder = ufunc(np.remainder) right_shift = ufunc(np.right_shift) subtract = ufunc(np.subtract) true_divide = ufunc(np.true_divide) class flatiter(object): """Flat iterator object to iterate over arrays. A `flatiter` iterator is returned by ``x.flat`` for any array `x`. It allows iterating over the array as if it were a 1-D array, either in a for-loop or by calling its `next` method. Iteration is done in C-contiguous style, with the last index varying the fastest. The iterator can also be indexed using basic slicing or advanced indexing. See Also -------- ndarray.flat : Return a flat iterator over an array. ndarray.flatten : Returns a flattened copy of an array. Notes ----- A `flatiter` iterator can not be constructed directly from Python code by calling the `flatiter` constructor. Examples -------- >>> x = np.arange(6).reshape(2, 3) >>> fl = x.flat >>> type(fl) >>> for item in fl: ... print item ... 0 1 2 3 4 5 >>> fl[2:4] array([2, 3]) """ def __init__(self, base): self._base = base self._index = 0 self._values = None size = base.global_slice.size self.global_slice = util.MasterKey([size]) size_per_proc = size//nproc() remainder = size%nproc() # remainder gets distributed if me() < remainder: self._lo = [size_per_proc*me() + me()] self._hi = [size_per_proc*me() + me() + size_per_proc + 1] else: self._lo = [size_per_proc*me() + remainder] self._hi = [size_per_proc*me() + remainder + size_per_proc] # if lo,hi are the same, this indicates no data on this proc if self._lo == self._hi: self._lo = [-1] self._hi = [-1] def _get_base(self): return self._base base = property(_get_base) def _get_coords(self): return np.unravel_index(self._index, self._base.shape) coords = property(_get_coords) def copy(self): """Get a copy of the iterator as a 1-D array. Examples -------- >>> x = np.arange(6).reshape(2, 3) >>> x array([[0, 1, 2], [3, 4, 5]]) >>> fl = x.flat >>> fl.copy() array([0, 1, 2, 3, 4, 5]) """ return self._base.flatten() def _get_index(self): return self._index index = property(_get_index) def distribution(self): return self._lo,self._hi def owns(self): return self._hi[0]>=0 def get(self, key=None): # THIS OPERATION IS ONE-SIDED # we expect key to be a single value or a slice, but might also be an # iterable of length 1 if key is None: # TODO this doesn't feel right -- communicate and then a local copy # operation? The answer is correct, but seems like too much extra # work. return self._base.get().flatten() if isinstance(key, (list,tuple)): key = key[0] if isinstance(key, (slice,util.RangeKey)): # get shape of base's global_slice shape = self._base.global_slice.shape # create index coordinates if isinstance(key, util.RangeKey): key = key.pyobj() i = (np.indices(shape).reshape(len(shape),-1).T)[key] return self._base.gather(i) else: key = long(key) index = np.unravel_index(key, self._base.shape) return self._base.gather(index) def allget(self, key=None): """Like get(), but when all processes need the same piece. This operation is collective. """ # TODO it's not clear whether this approach is better than having all # P processors ga.get() the same piece. if not me(): result = self.get(key) return comm().bcast(result) else: return comm().bcast() def __getitem__(self, key): # THIS OPERATION IS COLLECTIVE sync() if isinstance(key, (list,tuple)): if len(key) > 1: raise IndexError, "unsupported iterator index" # TODO optimize the gather since this is a collective return self.allget(key) def __len__(self): return self.global_slice.size def put(self, key, value): # THIS OPERATION IS ONE-SIDED # we expect key to be a single value or a slice, but might also be an # iterable of length 1 if isinstance(key, (list,tuple)): key = key[0] if isinstance(key, (slice,util.RangeKey)): if isinstance(key, util.RangeKey): key = key.pyobj() # get shape of global_slice shape = self._base.global_slice.shape # create index coordinates i = (np.indices(shape).reshape(len(shape),-1).T)[key] value = asarray(value) values = None if value.size == 1: values = np.zeros(len(i), dtype=self._base.dtype) values[:] = value else: assert value.ndim == 1 and len(value) == len(i) if is_distributed(value): values = value.get() else: values = value ga.scatter(self._base.handle, values, i) else: key = long(key) i = np.unravel_index(key, self._base.shape) ga.scatter(self._base.handle, value, i) def __setitem__(self, key, value): # THIS OPERATION IS COLLECTIVE sync() if self.owns(): global_slice = self.global_slice[key] if isinstance(key, (slice,util.RangeKey)): try: my_range = global_slice.bound_by_lohi(self._lo,self._hi) except IndexError: sync() return value = asarray(value) if value.ndim == 1: self.put(my_range, value[my_range]) else: self.put(my_range, value) else: self.put(key, value) sync() def next(self): if self._index < self._len: tmp = self.base[self.coords] self._index += 1 return tmp else: raise StopIteration def access(self): """Return a copy of a 'local' portion.""" if self._values is not None: raise ValueError, "call release or release_update before access" if not self.owns(): self._values = None else: lo,hi = self.distribution() result = self.global_slice.get_key(lo,hi) self._values = self.get(result) return self._values def release(self): self._values = None def release_update(self): if self._values is not None: lo,hi = self.distribution() result = self.global_slice.get_key(lo,hi) self.put(result, self._values) self._values = None def __repr__(self): result = "" if 0 == me(): result = repr(self.get()) return result def __str__(self): result = "" if 0 == me(): result = str(self.get()) return result def zeros(shape, dtype=np.float, order='C'): """zeros(shape, dtype=float, order='C') Return a new array of given shape and type, filled with zeros. Parameters ---------- shape : int or sequence of ints Shape of the new array, e.g., ``(2, 3)`` or ``2``. dtype : data-type, optional The desired data-type for the array, e.g., `numpy.int8`. Default is `numpy.float64`. order : {'C', 'F'}, optional Whether to store multidimensional data in C- or Fortran-contiguous (row- or column-wise) order in memory. Returns ------- out : ndarray Array of zeros with the given shape, dtype, and order. See Also -------- zeros_like : Return an array of zeros with shape and type of input. ones_like : Return an array of ones with shape and type of input. empty_like : Return an empty array with shape and type of input. ones : Return a new array setting values to one. empty : Return a new uninitialized array. Examples -------- >>> np.zeros(5) array([ 0., 0., 0., 0., 0.]) >>> np.zeros((5,), dtype=numpy.int) array([0, 0, 0, 0, 0]) >>> np.zeros((2, 1)) array([[ 0.], [ 0.]]) >>> s = (2,2) >>> np.zeros(s) array([[ 0., 0.], [ 0., 0.]]) >>> np.zeros((2,), dtype=[('x', 'i4'), ('y', 'i4')]) # custom dtype array([(0, 0), (0, 0)], dtype=[('x', ' /* For offsetof */ #ifndef offsetof #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) #endif #if !defined(WIN32) && !defined(MS_WINDOWS) #ifndef __stdcall #define __stdcall #endif #ifndef __cdecl #define __cdecl #endif #ifndef __fastcall #define __fastcall #endif #endif #ifndef DL_IMPORT #define DL_IMPORT(t) t #endif #ifndef DL_EXPORT #define DL_EXPORT(t) t #endif #ifndef PY_LONG_LONG #define PY_LONG_LONG LONG_LONG #endif #ifndef Py_HUGE_VAL #define Py_HUGE_VAL HUGE_VAL #endif #ifdef PYPY_VERSION #define CYTHON_COMPILING_IN_PYPY 1 #define CYTHON_COMPILING_IN_CPYTHON 0 #else #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 1 #endif #if PY_VERSION_HEX < 0x02050000 typedef int Py_ssize_t; #define PY_SSIZE_T_MAX INT_MAX #define PY_SSIZE_T_MIN INT_MIN #define PY_FORMAT_SIZE_T "" #define CYTHON_FORMAT_SSIZE_T "" #define PyInt_FromSsize_t(z) PyInt_FromLong(z) #define PyInt_AsSsize_t(o) __Pyx_PyInt_AsInt(o) #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ (PyErr_Format(PyExc_TypeError, \ "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ (PyObject*)0)) #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ !PyComplex_Check(o)) #define PyIndex_Check __Pyx_PyIndex_Check #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) #define __PYX_BUILD_PY_SSIZE_T "i" #else #define __PYX_BUILD_PY_SSIZE_T "n" #define CYTHON_FORMAT_SSIZE_T "z" #define __Pyx_PyIndex_Check PyIndex_Check #endif #if PY_VERSION_HEX < 0x02060000 #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) #define PyVarObject_HEAD_INIT(type, size) \ PyObject_HEAD_INIT(type) size, #define PyType_Modified(t) typedef struct { void *buf; PyObject *obj; Py_ssize_t len; Py_ssize_t itemsize; int readonly; int ndim; char *format; Py_ssize_t *shape; Py_ssize_t *strides; Py_ssize_t *suboffsets; void *internal; } Py_buffer; #define PyBUF_SIMPLE 0 #define PyBUF_WRITABLE 0x0001 #define PyBUF_FORMAT 0x0004 #define PyBUF_ND 0x0008 #define PyBUF_STRIDES (0x0010 | PyBUF_ND) #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); typedef void (*releasebufferproc)(PyObject *, Py_buffer *); #endif #if PY_MAJOR_VERSION < 3 #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else #define __Pyx_BUILTIN_MODULE_NAME "builtins" #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #endif #if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6 #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") #endif #if PY_MAJOR_VERSION >= 3 #define Py_TPFLAGS_CHECKTYPES 0 #define Py_TPFLAGS_HAVE_INDEX 0 #endif #if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) #define Py_TPFLAGS_HAVE_NEWBUFFER 0 #endif #if PY_VERSION_HEX < 0x02060000 #define Py_TPFLAGS_HAVE_VERSION_TAG 0 #endif #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) #define CYTHON_PEP393_ENABLED 1 #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ 0 : _PyUnicode_Ready((PyObject *)(op))) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) #else #define CYTHON_PEP393_ENABLED 0 #define __Pyx_PyUnicode_READY(op) (0) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) #define __Pyx_PyUnicode_READ(k, d, i) ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i])) #endif #if PY_MAJOR_VERSION >= 3 #define PyBaseString_Type PyUnicode_Type #define PyStringObject PyUnicodeObject #define PyString_Type PyUnicode_Type #define PyString_Check PyUnicode_Check #define PyString_CheckExact PyUnicode_CheckExact #endif #if PY_VERSION_HEX < 0x02060000 #define PyBytesObject PyStringObject #define PyBytes_Type PyString_Type #define PyBytes_Check PyString_Check #define PyBytes_CheckExact PyString_CheckExact #define PyBytes_FromString PyString_FromString #define PyBytes_FromStringAndSize PyString_FromStringAndSize #define PyBytes_FromFormat PyString_FromFormat #define PyBytes_DecodeEscape PyString_DecodeEscape #define PyBytes_AsString PyString_AsString #define PyBytes_AsStringAndSize PyString_AsStringAndSize #define PyBytes_Size PyString_Size #define PyBytes_AS_STRING PyString_AS_STRING #define PyBytes_GET_SIZE PyString_GET_SIZE #define PyBytes_Repr PyString_Repr #define PyBytes_Concat PyString_Concat #define PyBytes_ConcatAndDel PyString_ConcatAndDel #endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) #else #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ PyString_Check(obj) || PyUnicode_Check(obj)) #define __Pyx_PyBaseString_CheckExact(obj) (Py_TYPE(obj) == &PyBaseString_Type) #endif #if PY_VERSION_HEX < 0x02060000 #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) #endif #ifndef PySet_CheckExact #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) #endif #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) #if PY_MAJOR_VERSION >= 3 #define PyIntObject PyLongObject #define PyInt_Type PyLong_Type #define PyInt_Check(op) PyLong_Check(op) #define PyInt_CheckExact(op) PyLong_CheckExact(op) #define PyInt_FromString PyLong_FromString #define PyInt_FromUnicode PyLong_FromUnicode #define PyInt_FromLong PyLong_FromLong #define PyInt_FromSize_t PyLong_FromSize_t #define PyInt_FromSsize_t PyLong_FromSsize_t #define PyInt_AsLong PyLong_AsLong #define PyInt_AS_LONG PyLong_AS_LONG #define PyInt_AsSsize_t PyLong_AsSsize_t #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask #endif #if PY_MAJOR_VERSION >= 3 #define PyBoolObject PyLongObject #endif #if PY_VERSION_HEX < 0x03020000 typedef long Py_hash_t; #define __Pyx_PyInt_FromHash_t PyInt_FromLong #define __Pyx_PyInt_AsHash_t PyInt_AsLong #else #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t #endif #if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) #else #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) #endif #if PY_MAJOR_VERSION >= 3 #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) #endif #if PY_VERSION_HEX < 0x02050000 #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) #else #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) #endif #if PY_VERSION_HEX < 0x02050000 #define __Pyx_NAMESTR(n) ((char *)(n)) #define __Pyx_DOCSTR(n) ((char *)(n)) #else #define __Pyx_NAMESTR(n) (n) #define __Pyx_DOCSTR(n) (n) #endif #ifndef CYTHON_INLINE #if defined(__GNUC__) #define CYTHON_INLINE __inline__ #elif defined(_MSC_VER) #define CYTHON_INLINE __inline #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CYTHON_INLINE inline #else #define CYTHON_INLINE #endif #endif #ifndef CYTHON_RESTRICT #if defined(__GNUC__) #define CYTHON_RESTRICT __restrict__ #elif defined(_MSC_VER) && _MSC_VER >= 1400 #define CYTHON_RESTRICT __restrict #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CYTHON_RESTRICT restrict #else #define CYTHON_RESTRICT #endif #endif #ifdef NAN #define __PYX_NAN() ((float) NAN) #else static CYTHON_INLINE float __PYX_NAN() { /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is a quiet NaN. */ float value; memset(&value, 0xFF, sizeof(value)); return value; } #endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) #else #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) #endif #ifndef __PYX_EXTERN_C #ifdef __cplusplus #define __PYX_EXTERN_C extern "C" #else #define __PYX_EXTERN_C extern #endif #endif #if defined(WIN32) || defined(MS_WINDOWS) #define _USE_MATH_DEFINES #endif #include #define __PYX_HAVE__ga4py__gain__core #define __PYX_HAVE_API__ga4py__gain__core #include "mpi.h" #include "string.h" #include "stdio.h" #include "stdlib.h" #include "numpy/arrayobject.h" #include "numpy/ufuncobject.h" #ifdef _OPENMP #include #endif /* _OPENMP */ #ifdef PYREX_WITHOUT_ASSERTIONS #define CYTHON_WITHOUT_ASSERTIONS #endif #ifndef CYTHON_UNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) # define CYTHON_UNUSED __attribute__ ((__unused__)) # else # define CYTHON_UNUSED # endif # elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) # define CYTHON_UNUSED __attribute__ ((__unused__)) # else # define CYTHON_UNUSED # endif #endif typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ #define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 #define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 #define __PYX_DEFAULT_STRING_ENCODING "" #define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString #define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); #define __Pyx_PyBytes_FromString PyBytes_FromString #define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); #if PY_MAJOR_VERSION < 3 #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize #else #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize #endif #define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) #define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) #define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) #define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) #if PY_MAJOR_VERSION < 3 static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { const Py_UNICODE *u_end = u; while (*u_end++) ; return u_end - u - 1; } #else #define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen #endif #define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) #define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode #define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode #define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) #define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*); #if CYTHON_COMPILING_IN_CPYTHON #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) #else #define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) #endif #define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII static int __Pyx_sys_getdefaultencoding_not_ascii; static int __Pyx_init_sys_getdefaultencoding_params() { PyObject* sys = NULL; PyObject* default_encoding = NULL; PyObject* ascii_chars_u = NULL; PyObject* ascii_chars_b = NULL; sys = PyImport_ImportModule("sys"); if (sys == NULL) goto bad; default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); if (default_encoding == NULL) goto bad; if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { __Pyx_sys_getdefaultencoding_not_ascii = 0; } else { const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); char ascii_chars[128]; int c; for (c = 0; c < 128; c++) { ascii_chars[c] = c; } __Pyx_sys_getdefaultencoding_not_ascii = 1; ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); if (ascii_chars_u == NULL) goto bad; ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { PyErr_Format( PyExc_ValueError, "This module compiled with c_string_encoding=ascii, but default encoding '%s' is not a superset of ascii.", default_encoding_c); goto bad; } } Py_XDECREF(sys); Py_XDECREF(default_encoding); Py_XDECREF(ascii_chars_u); Py_XDECREF(ascii_chars_b); return 0; bad: Py_XDECREF(sys); Py_XDECREF(default_encoding); Py_XDECREF(ascii_chars_u); Py_XDECREF(ascii_chars_b); return -1; } #endif #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) #else #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT static char* __PYX_DEFAULT_STRING_ENCODING; static int __Pyx_init_sys_getdefaultencoding_params() { PyObject* sys = NULL; PyObject* default_encoding = NULL; char* default_encoding_c; sys = PyImport_ImportModule("sys"); if (sys == NULL) goto bad; default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); if (default_encoding == NULL) goto bad; default_encoding_c = PyBytes_AS_STRING(default_encoding); __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); Py_DECREF(sys); Py_DECREF(default_encoding); return 0; bad: Py_XDECREF(sys); Py_XDECREF(default_encoding); return -1; } #endif #endif #ifdef __GNUC__ /* Test for GCC > 2.95 */ #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #else /* __GNUC__ > 2 ... */ #define likely(x) (x) #define unlikely(x) (x) #endif /* __GNUC__ > 2 ... */ #else /* __GNUC__ */ #define likely(x) (x) #define unlikely(x) (x) #endif /* __GNUC__ */ static PyObject *__pyx_m; static PyObject *__pyx_d; static PyObject *__pyx_b; static PyObject *__pyx_empty_tuple; static PyObject *__pyx_empty_bytes; static int __pyx_lineno; static int __pyx_clineno = 0; static const char * __pyx_cfilenm= __FILE__; static const char *__pyx_filename; #if !defined(CYTHON_CCOMPLEX) #if defined(__cplusplus) #define CYTHON_CCOMPLEX 1 #elif defined(_Complex_I) #define CYTHON_CCOMPLEX 1 #else #define CYTHON_CCOMPLEX 0 #endif #endif #if CYTHON_CCOMPLEX #ifdef __cplusplus #include #else #include #endif #endif #if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) #undef _Complex_I #define _Complex_I 1.0fj #endif static const char *__pyx_f[] = { "core.pyx", "numpy.pxd", "MPI.pxd", "type.pxd", }; /* "numpy.pxd":723 * # in Cython to enable them only on the right systems. * * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t */ typedef npy_int8 __pyx_t_5numpy_int8_t; /* "numpy.pxd":724 * * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t */ typedef npy_int16 __pyx_t_5numpy_int16_t; /* "numpy.pxd":725 * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< * ctypedef npy_int64 int64_t * #ctypedef npy_int96 int96_t */ typedef npy_int32 __pyx_t_5numpy_int32_t; /* "numpy.pxd":726 * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< * #ctypedef npy_int96 int96_t * #ctypedef npy_int128 int128_t */ typedef npy_int64 __pyx_t_5numpy_int64_t; /* "numpy.pxd":730 * #ctypedef npy_int128 int128_t * * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t */ typedef npy_uint8 __pyx_t_5numpy_uint8_t; /* "numpy.pxd":731 * * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t */ typedef npy_uint16 __pyx_t_5numpy_uint16_t; /* "numpy.pxd":732 * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< * ctypedef npy_uint64 uint64_t * #ctypedef npy_uint96 uint96_t */ typedef npy_uint32 __pyx_t_5numpy_uint32_t; /* "numpy.pxd":733 * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< * #ctypedef npy_uint96 uint96_t * #ctypedef npy_uint128 uint128_t */ typedef npy_uint64 __pyx_t_5numpy_uint64_t; /* "numpy.pxd":737 * #ctypedef npy_uint128 uint128_t * * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< * ctypedef npy_float64 float64_t * #ctypedef npy_float80 float80_t */ typedef npy_float32 __pyx_t_5numpy_float32_t; /* "numpy.pxd":738 * * ctypedef npy_float32 float32_t * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< * #ctypedef npy_float80 float80_t * #ctypedef npy_float128 float128_t */ typedef npy_float64 __pyx_t_5numpy_float64_t; /* "numpy.pxd":747 * # The int types are mapped a bit surprising -- * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t # <<<<<<<<<<<<<< * ctypedef npy_longlong long_t * ctypedef npy_longlong longlong_t */ typedef npy_long __pyx_t_5numpy_int_t; /* "numpy.pxd":748 * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< * ctypedef npy_longlong longlong_t * */ typedef npy_longlong __pyx_t_5numpy_long_t; /* "numpy.pxd":749 * ctypedef npy_long int_t * ctypedef npy_longlong long_t * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< * * ctypedef npy_ulong uint_t */ typedef npy_longlong __pyx_t_5numpy_longlong_t; /* "numpy.pxd":751 * ctypedef npy_longlong longlong_t * * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< * ctypedef npy_ulonglong ulong_t * ctypedef npy_ulonglong ulonglong_t */ typedef npy_ulong __pyx_t_5numpy_uint_t; /* "numpy.pxd":752 * * ctypedef npy_ulong uint_t * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< * ctypedef npy_ulonglong ulonglong_t * */ typedef npy_ulonglong __pyx_t_5numpy_ulong_t; /* "numpy.pxd":753 * ctypedef npy_ulong uint_t * ctypedef npy_ulonglong ulong_t * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< * * ctypedef npy_intp intp_t */ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; /* "numpy.pxd":755 * ctypedef npy_ulonglong ulonglong_t * * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< * ctypedef npy_uintp uintp_t * */ typedef npy_intp __pyx_t_5numpy_intp_t; /* "numpy.pxd":756 * * ctypedef npy_intp intp_t * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< * * ctypedef npy_double float_t */ typedef npy_uintp __pyx_t_5numpy_uintp_t; /* "numpy.pxd":758 * ctypedef npy_uintp uintp_t * * ctypedef npy_double float_t # <<<<<<<<<<<<<< * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t */ typedef npy_double __pyx_t_5numpy_float_t; /* "numpy.pxd":759 * * ctypedef npy_double float_t * ctypedef npy_double double_t # <<<<<<<<<<<<<< * ctypedef npy_longdouble longdouble_t * */ typedef npy_double __pyx_t_5numpy_double_t; /* "numpy.pxd":760 * ctypedef npy_double float_t * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< * * ctypedef npy_cfloat cfloat_t */ typedef npy_longdouble __pyx_t_5numpy_longdouble_t; #if CYTHON_CCOMPLEX #ifdef __cplusplus typedef ::std::complex< float > __pyx_t_float_complex; #else typedef float _Complex __pyx_t_float_complex; #endif #else typedef struct { float real, imag; } __pyx_t_float_complex; #endif #if CYTHON_CCOMPLEX #ifdef __cplusplus typedef ::std::complex< double > __pyx_t_double_complex; #else typedef double _Complex __pyx_t_double_complex; #endif #else typedef struct { double real, imag; } __pyx_t_double_complex; #endif /*--- Type declarations ---*/ struct PyMPIErrhandlerObject; struct PyMPIGroupObject; struct PyMPICommObject; struct PyMPIIntercommObject; struct PyMPIIntracommObject; struct PyMPIDistgraphcommObject; struct PyMPIRequestObject; struct PyMPIGrequestObject; struct PyMPIWinObject; struct PyMPIDatatypeObject; struct PyMPIFileObject; struct PyMPIGraphcommObject; struct PyMPIPrequestObject; struct PyMPIInfoObject; struct PyMPICartcommObject; struct PyMPIStatusObject; struct PyMPIOpObject; /* "numpy.pxd":762 * ctypedef npy_longdouble longdouble_t * * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< * ctypedef npy_cdouble cdouble_t * ctypedef npy_clongdouble clongdouble_t */ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; /* "numpy.pxd":763 * * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< * ctypedef npy_clongdouble clongdouble_t * */ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; /* "numpy.pxd":764 * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< * * ctypedef npy_cdouble complex_t */ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; /* "numpy.pxd":766 * ctypedef npy_clongdouble clongdouble_t * * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew1(a): */ typedef npy_cdouble __pyx_t_5numpy_complex_t; struct __pyx_defaults; typedef struct __pyx_defaults __pyx_defaults; struct __pyx_defaults1; typedef struct __pyx_defaults1 __pyx_defaults1; struct __pyx_defaults2; typedef struct __pyx_defaults2 __pyx_defaults2; struct __pyx_defaults3; typedef struct __pyx_defaults3 __pyx_defaults3; struct __pyx_defaults { PyObject *__pyx_arg_dtype; }; struct __pyx_defaults1 { PyObject *__pyx_arg_dtype; }; struct __pyx_defaults2 { PyObject *__pyx_arg_inplace; }; struct __pyx_defaults3 { PyObject *__pyx_arg_refcheck; }; /* "mpi4py/MPI.pxd":106 * cdef int flags * * ctypedef public api class Errhandler [ # <<<<<<<<<<<<<< * type PyMPIErrhandler_Type, * object PyMPIErrhandlerObject, */ struct PyMPIErrhandlerObject { PyObject_HEAD MPI_Errhandler ob_mpi; int flags; }; typedef struct PyMPIErrhandlerObject PyMPIErrhandlerObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIErrhandler_Type; /* "mpi4py/MPI.pxd":92 * cdef int ob_usrid * * ctypedef public api class Group [ # <<<<<<<<<<<<<< * type PyMPIGroup_Type, * object PyMPIGroupObject, */ struct PyMPIGroupObject { PyObject_HEAD MPI_Group ob_mpi; int flags; }; typedef struct PyMPIGroupObject PyMPIGroupObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGroup_Type; /* "mpi4py/MPI.pxd":113 * cdef int flags * * ctypedef public api class Comm [ # <<<<<<<<<<<<<< * type PyMPIComm_Type, * object PyMPICommObject, */ struct PyMPICommObject { PyObject_HEAD MPI_Comm ob_mpi; int flags; }; typedef struct PyMPICommObject PyMPICommObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIComm_Type; /* "mpi4py/MPI.pxd":144 * pass * * ctypedef public api class Intercomm(Comm) [ # <<<<<<<<<<<<<< * type PyMPIIntercomm_Type, * object PyMPIIntercommObject, */ struct PyMPIIntercommObject { struct PyMPICommObject __pyx_base; }; typedef struct PyMPIIntercommObject PyMPIIntercommObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIIntercomm_Type; /* "mpi4py/MPI.pxd":120 * cdef int flags * * ctypedef public api class Intracomm(Comm) [ # <<<<<<<<<<<<<< * type PyMPIIntracomm_Type, * object PyMPIIntracommObject, */ struct PyMPIIntracommObject { struct PyMPICommObject __pyx_base; }; typedef struct PyMPIIntracommObject PyMPIIntracommObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIIntracomm_Type; /* "mpi4py/MPI.pxd":138 * pass * * ctypedef public api class Distgraphcomm(Intracomm) [ # <<<<<<<<<<<<<< * type PyMPIDistgraphcomm_Type, * object PyMPIDistgraphcommObject, */ struct PyMPIDistgraphcommObject { struct PyMPIIntracommObject __pyx_base; }; typedef struct PyMPIDistgraphcommObject PyMPIDistgraphcommObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIDistgraphcomm_Type; /* "mpi4py/MPI.pxd":63 * cdef int flags * * ctypedef public api class Request [ # <<<<<<<<<<<<<< * type PyMPIRequest_Type, * object PyMPIRequestObject, */ struct PyMPIRequestObject { PyObject_HEAD MPI_Request ob_mpi; int flags; PyObject *ob_buf; }; typedef struct PyMPIRequestObject PyMPIRequestObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIRequest_Type; /* "mpi4py/MPI.pxd":77 * pass * * ctypedef public api class Grequest(Request) [ # <<<<<<<<<<<<<< * type PyMPIGrequest_Type, * object PyMPIGrequestObject, */ struct PyMPIGrequestObject { struct PyMPIRequestObject __pyx_base; MPI_Request ob_grequest; }; typedef struct PyMPIGrequestObject PyMPIGrequestObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGrequest_Type; /* "mpi4py/MPI.pxd":150 * pass * * ctypedef public api class Win [ # <<<<<<<<<<<<<< * type PyMPIWin_Type, * object PyMPIWinObject, */ struct PyMPIWinObject { PyObject_HEAD MPI_Win ob_mpi; int flags; }; typedef struct PyMPIWinObject PyMPIWinObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIWin_Type; /* "mpi4py/MPI.pxd":56 * cdef int flags * * ctypedef public api class Datatype [ # <<<<<<<<<<<<<< * type PyMPIDatatype_Type, * object PyMPIDatatypeObject, */ struct PyMPIDatatypeObject { PyObject_HEAD MPI_Datatype ob_mpi; int flags; }; typedef struct PyMPIDatatypeObject PyMPIDatatypeObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIDatatype_Type; /* "mpi4py/MPI.pxd":157 * cdef int flags * * ctypedef public api class File [ # <<<<<<<<<<<<<< * type PyMPIFile_Type, * object PyMPIFileObject, */ struct PyMPIFileObject { PyObject_HEAD MPI_File ob_mpi; int flags; }; typedef struct PyMPIFileObject PyMPIFileObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIFile_Type; /* "mpi4py/MPI.pxd":132 * pass * * ctypedef public api class Graphcomm(Intracomm) [ # <<<<<<<<<<<<<< * type PyMPIGraphcomm_Type, * object PyMPIGraphcommObject, */ struct PyMPIGraphcommObject { struct PyMPIIntracommObject __pyx_base; }; typedef struct PyMPIGraphcommObject PyMPIGraphcommObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGraphcomm_Type; /* "mpi4py/MPI.pxd":71 * cdef object ob_buf * * ctypedef public api class Prequest(Request) [ # <<<<<<<<<<<<<< * type PyMPIPrequest_Type, * object PyMPIPrequestObject, */ struct PyMPIPrequestObject { struct PyMPIRequestObject __pyx_base; }; typedef struct PyMPIPrequestObject PyMPIPrequestObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIPrequest_Type; /* "mpi4py/MPI.pxd":99 * cdef int flags * * ctypedef public api class Info [ # <<<<<<<<<<<<<< * type PyMPIInfo_Type, * object PyMPIInfoObject, */ struct PyMPIInfoObject { PyObject_HEAD MPI_Info ob_mpi; int flags; }; typedef struct PyMPIInfoObject PyMPIInfoObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIInfo_Type; /* "mpi4py/MPI.pxd":126 * pass * * ctypedef public api class Cartcomm(Intracomm) [ # <<<<<<<<<<<<<< * type PyMPICartcomm_Type, * object PyMPICartcommObject, */ struct PyMPICartcommObject { struct PyMPIIntracommObject __pyx_base; }; typedef struct PyMPICartcommObject PyMPICartcommObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPICartcomm_Type; /* "mpi4py/MPI.pxd":49 * ctypedef MPI_Offset Offset "MPI_Offset" * * ctypedef public api class Status [ # <<<<<<<<<<<<<< * type PyMPIStatus_Type, * object PyMPIStatusObject, */ struct PyMPIStatusObject { PyObject_HEAD MPI_Status ob_mpi; int flags; }; typedef struct PyMPIStatusObject PyMPIStatusObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIStatus_Type; /* "mpi4py/MPI.pxd":83 * cdef MPI_Request ob_grequest * * ctypedef public api class Op [ # <<<<<<<<<<<<<< * type PyMPIOp_Type, * object PyMPIOpObject, */ struct PyMPIOpObject { PyObject_HEAD MPI_Op ob_mpi; int flags; PyObject *(*ob_func)(PyObject *, PyObject *); int ob_usrid; }; typedef struct PyMPIOpObject PyMPIOpObject; __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIOp_Type; #ifndef CYTHON_REFNANNY #define CYTHON_REFNANNY 0 #endif #if CYTHON_REFNANNY typedef struct { void (*INCREF)(void*, PyObject*, int); void (*DECREF)(void*, PyObject*, int); void (*GOTREF)(void*, PyObject*, int); void (*GIVEREF)(void*, PyObject*, int); void* (*SetupContext)(const char*, int, const char*); void (*FinishContext)(void**); } __Pyx_RefNannyAPIStruct; static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; #ifdef WITH_THREAD #define __Pyx_RefNannySetupContext(name, acquire_gil) \ if (acquire_gil) { \ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ PyGILState_Release(__pyx_gilstate_save); \ } else { \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ } #else #define __Pyx_RefNannySetupContext(name, acquire_gil) \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) #endif #define __Pyx_RefNannyFinishContext() \ __Pyx_RefNanny->FinishContext(&__pyx_refnanny) #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) #else #define __Pyx_RefNannyDeclarations #define __Pyx_RefNannySetupContext(name, acquire_gil) #define __Pyx_RefNannyFinishContext() #define __Pyx_INCREF(r) Py_INCREF(r) #define __Pyx_DECREF(r) Py_DECREF(r) #define __Pyx_GOTREF(r) #define __Pyx_GIVEREF(r) #define __Pyx_XINCREF(r) Py_XINCREF(r) #define __Pyx_XDECREF(r) Py_XDECREF(r) #define __Pyx_XGOTREF(r) #define __Pyx_XGIVEREF(r) #endif /* CYTHON_REFNANNY */ #define __Pyx_XDECREF_SET(r, v) do { \ PyObject *tmp = (PyObject *) r; \ r = v; __Pyx_XDECREF(tmp); \ } while (0) #define __Pyx_DECREF_SET(r, v) do { \ PyObject *tmp = (PyObject *) r; \ r = v; __Pyx_DECREF(tmp); \ } while (0) #define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) #define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { PyTypeObject* tp = Py_TYPE(obj); if (likely(tp->tp_getattro)) return tp->tp_getattro(obj, attr_name); #if PY_MAJOR_VERSION < 3 if (likely(tp->tp_getattr)) return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); #endif return PyObject_GetAttr(obj, attr_name); } #else #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) #endif static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ #ifndef CYTHON_PROFILE #define CYTHON_PROFILE 1 #endif #ifndef CYTHON_TRACE #define CYTHON_TRACE 0 #endif #if CYTHON_TRACE #undef CYTHON_PROFILE_REUSE_FRAME #endif #ifndef CYTHON_PROFILE_REUSE_FRAME #define CYTHON_PROFILE_REUSE_FRAME 0 #endif #if CYTHON_PROFILE || CYTHON_TRACE #include "compile.h" #include "frameobject.h" #include "traceback.h" #if CYTHON_PROFILE_REUSE_FRAME #define CYTHON_FRAME_MODIFIER static #define CYTHON_FRAME_DEL #else #define CYTHON_FRAME_MODIFIER #define CYTHON_FRAME_DEL Py_CLEAR(__pyx_frame) #endif #define __Pyx_TraceDeclarations \ static PyCodeObject *__pyx_frame_code = NULL; \ CYTHON_FRAME_MODIFIER PyFrameObject *__pyx_frame = NULL; \ int __Pyx_use_tracing = 0; #define __Pyx_TraceCall(funcname, srcfile, firstlineno) \ if (unlikely(PyThreadState_GET()->use_tracing && \ (PyThreadState_GET()->c_profilefunc || (CYTHON_TRACE && PyThreadState_GET()->c_tracefunc)))) { \ __Pyx_use_tracing = __Pyx_TraceSetupAndCall(&__pyx_frame_code, &__pyx_frame, funcname, srcfile, firstlineno); \ } #define __Pyx_TraceException() \ if (unlikely(__Pyx_use_tracing) && PyThreadState_GET()->use_tracing && \ (PyThreadState_GET()->c_profilefunc || (CYTHON_TRACE && PyThreadState_GET()->c_tracefunc))) { \ PyThreadState* tstate = PyThreadState_GET(); \ tstate->use_tracing = 0; \ PyObject *exc_info = __Pyx_GetExceptionTuple(); \ if (exc_info) { \ if (CYTHON_TRACE && tstate->c_tracefunc) \ tstate->c_tracefunc( \ tstate->c_traceobj, __pyx_frame, PyTrace_EXCEPTION, exc_info); \ tstate->c_profilefunc( \ tstate->c_profileobj, __pyx_frame, PyTrace_EXCEPTION, exc_info); \ Py_DECREF(exc_info); \ } \ tstate->use_tracing = 1; \ } #define __Pyx_TraceReturn(result) \ if (unlikely(__Pyx_use_tracing) && PyThreadState_GET()->use_tracing) { \ PyThreadState* tstate = PyThreadState_GET(); \ tstate->use_tracing = 0; \ if (CYTHON_TRACE && tstate->c_tracefunc) \ tstate->c_tracefunc( \ tstate->c_traceobj, __pyx_frame, PyTrace_RETURN, (PyObject*)result); \ if (tstate->c_profilefunc) \ tstate->c_profilefunc( \ tstate->c_profileobj, __pyx_frame, PyTrace_RETURN, (PyObject*)result); \ CYTHON_FRAME_DEL; \ tstate->use_tracing = 1; \ } static PyCodeObject *__Pyx_createFrameCodeObject(const char *funcname, const char *srcfile, int firstlineno); /*proto*/ static int __Pyx_TraceSetupAndCall(PyCodeObject** code, PyFrameObject** frame, const char *funcname, const char *srcfile, int firstlineno); /*proto*/ #else #define __Pyx_TraceDeclarations #define __Pyx_TraceCall(funcname, srcfile, firstlineno) #define __Pyx_TraceException() #define __Pyx_TraceReturn(result) #endif /* CYTHON_PROFILE */ #if CYTHON_TRACE #define __Pyx_TraceLine(lineno) \ if (unlikely(__Pyx_use_tracing) && unlikely(PyThreadState_GET()->use_tracing && PyThreadState_GET()->c_tracefunc)) { \ PyThreadState* tstate = PyThreadState_GET(); \ __pyx_frame->f_lineno = lineno; \ tstate->use_tracing = 0; \ tstate->c_tracefunc(tstate->c_traceobj, __pyx_frame, PyTrace_LINE, NULL); \ tstate->use_tracing = 1; \ } #else #define __Pyx_TraceLine(lineno) #endif static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ static void __Pyx_WriteUnraisable(const char *name, int clineno, int lineno, const char *filename); /*proto*/ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ #if CYTHON_COMPILING_IN_CPYTHON #define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL) static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { PyTypeObject* tp = Py_TYPE(obj); if (likely(tp->tp_setattro)) return tp->tp_setattro(obj, attr_name, value); #if PY_MAJOR_VERSION < 3 if (likely(tp->tp_setattr)) return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); #endif return PyObject_SetAttr(obj, attr_name, value); } #else #define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) #define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) #endif static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ const char* function_name); /*proto*/ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ static CYTHON_INLINE int __Pyx_PySequence_Contains(PyObject* item, PyObject* seq, int eq) { int result = PySequence_Contains(seq, item); return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); } static PyObject* __Pyx_PyObject_CallMethodTuple(PyObject* obj, PyObject* method_name, PyObject* args) { PyObject *method, *result = NULL; if (unlikely(!args)) return NULL; method = __Pyx_PyObject_GetAttrStr(obj, method_name); if (unlikely(!method)) goto bad; result = PyObject_Call(method, args, NULL); Py_DECREF(method); bad: Py_DECREF(args); return result; } #define __Pyx_PyObject_CallMethod3(obj, name, arg1, arg2, arg3) \ __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(3, arg1, arg2, arg3)) #define __Pyx_PyObject_CallMethod2(obj, name, arg1, arg2) \ __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(2, arg1, arg2)) #define __Pyx_PyObject_CallMethod1(obj, name, arg1) \ __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(1, arg1)) #define __Pyx_PyObject_CallMethod0(obj, name) \ __Pyx_PyObject_CallMethodTuple(obj, name, (Py_INCREF(__pyx_empty_tuple), __pyx_empty_tuple)) static CYTHON_INLINE PyObject* __Pyx_PyObject_Pop(PyObject* L); /*proto*/ #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { PyListObject* L = (PyListObject*) list; Py_ssize_t len = Py_SIZE(list); if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { Py_INCREF(x); PyList_SET_ITEM(list, len, x); Py_SIZE(list) = len+1; return 0; } return PyList_Append(list, x); } #else #define __Pyx_PyList_Append(L,x) PyList_Append(L,x) #endif static CYTHON_INLINE PyObject* __Pyx_PyObject_Append(PyObject* L, PyObject* x); /*proto*/ #define __Pyx_PyObject_DelSlice(obj, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound) \ __Pyx_PyObject_SetSlice(obj, (PyObject*)NULL, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound) static CYTHON_INLINE int __Pyx_PyObject_SetSlice( PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop, PyObject** py_start, PyObject** py_stop, PyObject** py_slice, int has_cstart, int has_cstop, int wraparound); #define __Pyx_GetItemInt(o, i, size, to_py_func, is_list, wraparound, boundscheck) \ (((size) <= sizeof(Py_ssize_t)) ? \ __Pyx_GetItemInt_Fast(o, i, is_list, wraparound, boundscheck) : \ __Pyx_GetItemInt_Generic(o, to_py_func(i))) #define __Pyx_GetItemInt_List(o, i, size, to_py_func, is_list, wraparound, boundscheck) \ (((size) <= sizeof(Py_ssize_t)) ? \ __Pyx_GetItemInt_List_Fast(o, i, wraparound, boundscheck) : \ __Pyx_GetItemInt_Generic(o, to_py_func(i))) static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, int wraparound, int boundscheck); #define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func, is_list, wraparound, boundscheck) \ (((size) <= sizeof(Py_ssize_t)) ? \ __Pyx_GetItemInt_Tuple_Fast(o, i, wraparound, boundscheck) : \ __Pyx_GetItemInt_Generic(o, to_py_func(i))) static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, int wraparound, int boundscheck); static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, int wraparound, int boundscheck); static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, PyObject** py_start, PyObject** py_stop, PyObject** py_slice, int has_cstart, int has_cstop, int wraparound); #define __Pyx_CyFunction_USED 1 #include #define __Pyx_CYFUNCTION_STATICMETHOD 0x01 #define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 #define __Pyx_CYFUNCTION_CCLASS 0x04 #define __Pyx_CyFunction_GetClosure(f) \ (((__pyx_CyFunctionObject *) (f))->func_closure) #define __Pyx_CyFunction_GetClassObj(f) \ (((__pyx_CyFunctionObject *) (f))->func_classobj) #define __Pyx_CyFunction_Defaults(type, f) \ ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) #define __Pyx_CyFunction_SetDefaultsGetter(f, g) \ ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) typedef struct { PyCFunctionObject func; int flags; PyObject *func_dict; PyObject *func_weakreflist; PyObject *func_name; PyObject *func_qualname; PyObject *func_doc; PyObject *func_code; PyObject *func_closure; PyObject *func_classobj; /* No-args super() class cell */ void *defaults; int defaults_pyobjects; PyObject *defaults_tuple; /* Const defaults tuple */ PyObject *defaults_kwdict; /* Const kwonly defaults dict */ PyObject *(*defaults_getter)(PyObject *); PyObject *func_annotations; /* function annotations dict */ } __pyx_CyFunctionObject; static PyTypeObject *__pyx_CyFunctionType = 0; #define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, code) \ __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, code) static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml, int flags, PyObject* qualname, PyObject *self, PyObject *module, PyObject* code); static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, size_t size, int pyobjects); static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, PyObject *tuple); static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, PyObject *dict); static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, PyObject *dict); static int __Pyx_CyFunction_init(void); static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /*proto*/ static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ static PyObject *__Pyx_FindPy2Metaclass(PyObject *bases); /*proto*/ static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, PyObject *qualname, PyObject *modname); /*proto*/ static int __Pyx_Print(PyObject*, PyObject *, int); /*proto*/ #if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3 static PyObject* __pyx_print = 0; static PyObject* __pyx_print_kwargs = 0; #endif static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/ #if CYTHON_CCOMPLEX #ifdef __cplusplus #define __Pyx_CREAL(z) ((z).real()) #define __Pyx_CIMAG(z) ((z).imag()) #else #define __Pyx_CREAL(z) (__real__(z)) #define __Pyx_CIMAG(z) (__imag__(z)) #endif #else #define __Pyx_CREAL(z) ((z).real) #define __Pyx_CIMAG(z) ((z).imag) #endif #if defined(_WIN32) && defined(__cplusplus) && CYTHON_CCOMPLEX #define __Pyx_SET_CREAL(z,x) ((z).real(x)) #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) #else #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) #endif static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); #if CYTHON_CCOMPLEX #define __Pyx_c_eqf(a, b) ((a)==(b)) #define __Pyx_c_sumf(a, b) ((a)+(b)) #define __Pyx_c_difff(a, b) ((a)-(b)) #define __Pyx_c_prodf(a, b) ((a)*(b)) #define __Pyx_c_quotf(a, b) ((a)/(b)) #define __Pyx_c_negf(a) (-(a)) #ifdef __cplusplus #define __Pyx_c_is_zerof(z) ((z)==(float)0) #define __Pyx_c_conjf(z) (::std::conj(z)) #if 1 #define __Pyx_c_absf(z) (::std::abs(z)) #define __Pyx_c_powf(a, b) (::std::pow(a, b)) #endif #else #define __Pyx_c_is_zerof(z) ((z)==0) #define __Pyx_c_conjf(z) (conjf(z)) #if 1 #define __Pyx_c_absf(z) (cabsf(z)) #define __Pyx_c_powf(a, b) (cpowf(a, b)) #endif #endif #else static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex); static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex); #if 1 static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex); #endif #endif static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); #if CYTHON_CCOMPLEX #define __Pyx_c_eq(a, b) ((a)==(b)) #define __Pyx_c_sum(a, b) ((a)+(b)) #define __Pyx_c_diff(a, b) ((a)-(b)) #define __Pyx_c_prod(a, b) ((a)*(b)) #define __Pyx_c_quot(a, b) ((a)/(b)) #define __Pyx_c_neg(a) (-(a)) #ifdef __cplusplus #define __Pyx_c_is_zero(z) ((z)==(double)0) #define __Pyx_c_conj(z) (::std::conj(z)) #if 1 #define __Pyx_c_abs(z) (::std::abs(z)) #define __Pyx_c_pow(a, b) (::std::pow(a, b)) #endif #else #define __Pyx_c_is_zero(z) ((z)==0) #define __Pyx_c_conj(z) (conj(z)) #if 1 #define __Pyx_c_abs(z) (cabs(z)) #define __Pyx_c_pow(a, b) (cpow(a, b)) #endif #endif #else static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex); static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex); #if 1 static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex); #endif #endif static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *); static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *); static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *); static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *); static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *); static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *); static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *); static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *); static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *); static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *); static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *); static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *); static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *); static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *); static int __Pyx_check_binary_version(void); #if !defined(__Pyx_PyIdentifier_FromString) #if PY_MAJOR_VERSION < 3 #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s) #else #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s) #endif #endif static PyObject *__Pyx_ImportModule(const char *name); /*proto*/ static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict); /*proto*/ typedef struct { int code_line; PyCodeObject* code_object; } __Pyx_CodeObjectCacheEntry; struct __Pyx_CodeObjectCache { int count; int max_count; __Pyx_CodeObjectCacheEntry* entries; }; static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); static PyCodeObject *__pyx_find_code_object(int code_line); static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); static void __Pyx_AddTraceback(const char *funcname, int c_line, int py_line, const char *filename); /*proto*/ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ /* Module declarations from 'mpi4py.MPI' */ static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Status = 0; static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Datatype = 0; static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Request = 0; static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Prequest = 0; static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Grequest = 0; static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Op = 0; static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Group = 0; static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Info = 0; static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Errhandler = 0; static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Comm = 0; static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Intracomm = 0; static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Cartcomm = 0; static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Graphcomm = 0; static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Distgraphcomm = 0; static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Intercomm = 0; static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Win = 0; static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_File = 0; /* Module declarations from 'mpi4py.mpi_c' */ /* Module declarations from 'cpython.buffer' */ /* Module declarations from 'cpython.ref' */ /* Module declarations from 'libc.string' */ /* Module declarations from 'libc.stdio' */ /* Module declarations from 'cpython.object' */ /* Module declarations from '__builtin__' */ /* Module declarations from 'cpython.type' */ static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; /* Module declarations from 'libc.stdlib' */ /* Module declarations from 'numpy' */ /* Module declarations from 'numpy' */ static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ /* Module declarations from 'ga4py.gain.core' */ static int __pyx_v_5ga4py_4gain_4core_SIZE_THRESHOLD; static int __pyx_v_5ga4py_4gain_4core_float128_in_np; static int __pyx_v_5ga4py_4gain_4core_complex256_in_np; static int __pyx_v_5ga4py_4gain_4core__mask_sync; static int __pyx_f_5ga4py_4gain_4core_me(int __pyx_skip_dispatch); /*proto*/ static int __pyx_f_5ga4py_4gain_4core_nproc(int __pyx_skip_dispatch); /*proto*/ static int __pyx_f_5ga4py_4gain_4core_get_size_threshold(int __pyx_skip_dispatch); /*proto*/ static PyObject *__pyx_f_5ga4py_4gain_4core_set_size_threshold(int, int __pyx_skip_dispatch); /*proto*/ static int __pyx_f_5ga4py_4gain_4core_should_distribute(PyObject *, int __pyx_skip_dispatch); /*proto*/ static int __pyx_f_5ga4py_4gain_4core_is_distributed(PyObject *, int __pyx_skip_dispatch); /*proto*/ static int __pyx_f_5ga4py_4gain_4core_is_array(PyObject *, int __pyx_skip_dispatch); /*proto*/ static PyObject *__pyx_f_5ga4py_4gain_4core_get_shape(PyObject *, int __pyx_skip_dispatch); /*proto*/ static PyObject *__pyx_f_5ga4py_4gain_4core_get_dtype(PyObject *, int __pyx_skip_dispatch); /*proto*/ static PyObject *__pyx_f_5ga4py_4gain_4core_listify(PyObject *, int __pyx_skip_dispatch); /*proto*/ static PyObject *__pyx_f_5ga4py_4gain_4core_tuplify(PyObject *, int __pyx_skip_dispatch); /*proto*/ static CYTHON_INLINE PyObject *__pyx_f_5ga4py_4gain_4core_mask_sync(int __pyx_skip_dispatch); /*proto*/ static CYTHON_INLINE PyObject *__pyx_f_5ga4py_4gain_4core_sync(int __pyx_skip_dispatch); /*proto*/ __PYX_EXTERN_C DL_IMPORT(MPI_Comm) GA_MPI_Comm_pgroup_default(void); /*proto*/ #define __Pyx_MODULE_NAME "ga4py.gain.core" int __pyx_module_is_main_ga4py__gain__core = 0; /* Implementation of 'ga4py.gain.core' */ static PyObject *__pyx_builtin_object; static PyObject *__pyx_builtin_property; static PyObject *__pyx_builtin_AttributeError; static PyObject *__pyx_builtin_KeyError; static PyObject *__pyx_builtin_super; static PyObject *__pyx_builtin_TypeError; static PyObject *__pyx_builtin_NotImplementedError; static PyObject *__pyx_builtin_IndexError; static PyObject *__pyx_builtin_zip; static PyObject *__pyx_builtin_reduce; static PyObject *__pyx_builtin_ValueError; static PyObject *__pyx_builtin_range; static PyObject *__pyx_builtin_xrange; static PyObject *__pyx_builtin_StopIteration; static PyObject *__pyx_builtin_RuntimeError; static PyObject *__pyx_pf_5ga4py_4gain_4core_me(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_2nproc(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_4get_size_threshold(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_6set_size_threshold(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_threshold); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8should_distribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_shape); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_10is_distributed(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thing); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_12is_array(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thing); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_14get_shape(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thing); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16get_dtype(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thing); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_18listify(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thing); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_20tuplify(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thing); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_22mask_sync(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_24sync(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj_2_get_c(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj_4_get_f(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj_6_get_o(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj_8_get_w(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj_10_get_a(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj_12_get_u(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj_14__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj_16__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_2__del__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_4__contains__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_6__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_8__setitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_10count(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_12empty(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_14full(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_16pop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_18size(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_316__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray___new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_shape, PyObject *__pyx_v_dtype, PyObject *__pyx_v_buffer, PyObject *__pyx_v_offset, PyObject *__pyx_v_strides, PyObject *__pyx_v_order, PyObject *__pyx_v_base); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_318__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_2__init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_shape, PyObject *__pyx_v_dtype, PyObject *__pyx_v_buffer, PyObject *__pyx_v_offset, PyObject *__pyx_v_strides, PyObject *__pyx_v_order, PyObject *__pyx_v_base); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_4__del__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_6distribution(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_8owns(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_10access(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_global_slice); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_12get(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_14allget(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_16gather(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_i); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_18release(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_20release_update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_22_get_T(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_24_get_data(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_26_get_dtype(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_28_get_flags(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_30_get_flat(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_32_set_flat(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_34_get_imag(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_36_set_imag(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_38_get_real(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_40_set_real(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ static PyObject *__pyx_lambda_funcdef_lambda1(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_42_get_size(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_44_get_itemsize(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_46_get_nbytes(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_48_get_ndim(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_50_get_shape(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_52_set_shape(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_54_get_strides(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_56_get_ctypes(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_58_get_base(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_60all(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_62any(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_64argmax(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_66argmin(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_68argsort(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_kind, CYTHON_UNUSED PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_70astype(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_t); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_320__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_72byteswap(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_inplace); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_74choose(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_choices, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_mode); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_76clip(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_a_min, CYTHON_UNUSED PyObject *__pyx_v_a_max, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_78compress(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_condition, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_80conj(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_82conjugate(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_84copy(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_86cumprod(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_88cumsum(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_90diagonal(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_offset, CYTHON_UNUSED PyObject *__pyx_v_axis1, CYTHON_UNUSED PyObject *__pyx_v_axis2); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_92dot(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_b, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_94dump(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_file); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_96dumps(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_98fill(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_100flatten(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_102getfield(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_offset); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_104item(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_106itemset(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_108max(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_axis, PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_110mean(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_112min(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_axis, PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_114newbyteorder(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_new_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_116nonzero(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_118prod(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_120ptp(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_122put(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_indices, CYTHON_UNUSED PyObject *__pyx_v_values, CYTHON_UNUSED PyObject *__pyx_v_mode); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_124ravel(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_126repeat(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_repeats, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_128reshape(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_shape, PyObject *__pyx_v_order, PyObject *__pyx_v_args); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_322__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_130resize(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_new_shape, CYTHON_UNUSED PyObject *__pyx_v_refcheck); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_132round(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_decimals, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_134searchsorted(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_v, CYTHON_UNUSED PyObject *__pyx_v_side); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_136setfield(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_val, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_offset); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_138setflags(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_write, CYTHON_UNUSED PyObject *__pyx_v_align, CYTHON_UNUSED PyObject *__pyx_v_uic); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_140sort(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_kind, CYTHON_UNUSED PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_142squeeze(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_144std(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_ddof); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_146sum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_148swapaxes(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis1, CYTHON_UNUSED PyObject *__pyx_v_axis2); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_150take(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_indices, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_mode); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_152tofile(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_fid, CYTHON_UNUSED PyObject *__pyx_v_sep, CYTHON_UNUSED PyObject *__pyx_v_format); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_154tolist(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_156tostring(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_158trace(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_offset, CYTHON_UNUSED PyObject *__pyx_v_axis1, CYTHON_UNUSED PyObject *__pyx_v_axis2, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_160transpose(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_axes); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_162var(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_ddof); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_164view(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_type); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_166__abs__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_168__add__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_170__and__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_172__array__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dtype); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_174__array_finalize__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_176__array_interface__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_178__array_prepare__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_180__array_priority__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_182__array_struct__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_184__array_wrap__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_186__contains__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_188__copy__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_190__deepcopy__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_192__delitem__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_194__div__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_196__divmod__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_198__eq__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_200__float__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_202__floordiv__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_204__ge__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_206__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_208__gt__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_210__iadd__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_212__iand__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_214__idiv__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_216__ifloordiv__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_218__ilshift__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_220__imod__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_222__imul__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_224__int__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_226__invert__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_228__ior__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_230__ipow__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_232__irshift__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_234__isub__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_236__iter__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_238__itruediv__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_240__ixor__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_242__le__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_244__len__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_246__long__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_248__lshift__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_250__lt__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_252__mod__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_254__mul__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_256__ne__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_258__neg__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_260__nonzero__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_262__oct__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_264__or__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_266__pos__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_268__pow__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_270__radd__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_272__rand__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_274__rdiv__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_276__rdivmod__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_278__reduce__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_280__reduce_ex__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_282__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_284__rfloordiv__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_286__rlshift__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_288__rmod__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_290__rmul__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_292__ror__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_294__rpow__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_296__rrshift__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_298__rshift__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_300__rsub__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_302__rtruediv__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_304__rxor__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_306__setitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_308__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_310__sub__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_312__truediv__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_314__xor__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_26_npin_piece_based_on_out(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_input, PyObject *__pyx_v_out, PyObject *__pyx_v_shape); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_func); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_2_get_identity(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_4_get_nargs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_6_get_nin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_8_get_nout(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_10_get_ntypes(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_12_get_signature(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_14_get_types(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_16__call__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_18_unary_call(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_input, PyObject *__pyx_v_out, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_20_binary_call(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_first, PyObject *__pyx_v_second, PyObject *__pyx_v_out, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_22reduce(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_axis, PyObject *__pyx_v_dtype, PyObject *__pyx_v_out, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_24accumulate(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_axis, PyObject *__pyx_v_dtype, PyObject *__pyx_v_out, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_26outer(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_28reduceat(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_base); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_2_get_base(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_4_get_coords(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_6copy(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_8_get_index(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_10distribution(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_12owns(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_14get(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_16allget(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_18__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_20__len__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_22put(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_24__setitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_26next(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_28access(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_30release(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_32release_update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_34__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_36__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_28zeros(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_shape, PyObject *__pyx_v_dtype, PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_30asarray(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_32from_ga(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_g_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_34comm(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4core_36print_sync(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_what); /* proto */ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */ static char __pyx_k_1[] = "Unknown flag"; static char __pyx_k_2[] = " C_CONTIGUOUS : %s\n F_CONTIGUOUS : %s\n OWNDATA : %s\n WRITEABLE : %s\n ALIGNED : %s\n UPDATEIFCOPY : %s"; static char __pyx_k_3[] = "order not understood"; static char __pyx_k_4[] = "Fortran order not supported"; static char __pyx_k_8[] = "get_lo_hi_skip_adjust"; static char __pyx_k_9[] = "unhandled piece of global_slice"; static char __pyx_k_15[] = "FixedKey found in MasterKey"; static char __pyx_k_18[] = "float%s"; static char __pyx_k_19[] = "array does not have imaginary part to set"; static char __pyx_k_23[] = "ndarray._get_size.."; static char __pyx_k_24[] = "ga4py.gain.core"; static char __pyx_k_25[] = "incompatible shape for a non-contiguous array"; static char __pyx_k_31[] = "array.ndim must be >= 2"; static char __pyx_k_32[] = "diagonal for a.ndim > 2"; static char __pyx_k_33[] = "resulting diagonal is not distributed"; static char __pyx_k_45[] = ""; static char __pyx_k_46[] = "can only specify one unknown dimension"; static char __pyx_k_47[] = "total size of new array must be unchanged"; static char __pyx_k_49[] = "%s"; static char __pyx_k_53[] = "invalid axis for this array"; static char __pyx_k_54[] = "axes don't match array"; static char __pyx_k_55[] = "cannot delete array elements"; static char __pyx_k_56[] = "str or unicode key"; static char __pyx_k_57[] = "0-d arrays can't be indexed"; static char __pyx_k_58[] = "TODO: fancy indexing"; static char __pyx_k_59[] = "only length-1 arrays can be converted to Python scalars"; static char __pyx_k_60[] = "The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()"; static char __pyx_k_62[] = "only unary and binary ufuncs supported"; static char __pyx_k_64[] = "return arrays must be of ArrayType"; static char __pyx_k_65[] = "invalid return array shape"; static char __pyx_k_66[] = "_npin_piece_based_on_out"; static char __pyx_k_67[] = "reduce only supported for binary functions"; static char __pyx_k_68[] = "axis not in array"; static char __pyx_k_74[] = "accumulate only supported for binary functions"; static char __pyx_k_79[] = "outer product only supported for binary functions"; static char __pyx_k_80[] = "reduceat only supported for binary functions"; static char __pyx_k_81[] = "unsupported iterator index"; static char __pyx_k_83[] = "call release or release_update before access"; static char __pyx_k_86[] = "[0] %s"; static char __pyx_k_87[] = "[%d] %s"; static char __pyx_k_88[] = "ndarray is not C contiguous"; static char __pyx_k_90[] = "ndarray is not Fortran contiguous"; static char __pyx_k_92[] = "Non-native byte order not supported"; static char __pyx_k_94[] = "unknown dtype code in numpy.pxd (%d)"; static char __pyx_k_95[] = "Format string allocated too short, see comment in numpy.pxd"; static char __pyx_k_98[] = "Format string allocated too short."; static char __pyx_k__A[] = "A"; static char __pyx_k__B[] = "B"; static char __pyx_k__C[] = "C"; static char __pyx_k__F[] = "F"; static char __pyx_k__H[] = "H"; static char __pyx_k__I[] = "I"; static char __pyx_k__L[] = "L"; static char __pyx_k__O[] = "O"; static char __pyx_k__Q[] = "Q"; static char __pyx_k__S[] = "S"; static char __pyx_k__T[] = "T"; static char __pyx_k__U[] = "U"; static char __pyx_k__W[] = "W"; static char __pyx_k__a[] = "a"; static char __pyx_k__b[] = "b"; static char __pyx_k__c[] = "c"; static char __pyx_k__d[] = "d"; static char __pyx_k__f[] = "f"; static char __pyx_k__g[] = "g"; static char __pyx_k__h[] = "h"; static char __pyx_k__i[] = "i"; static char __pyx_k__l[] = "l"; static char __pyx_k__m[] = "m"; static char __pyx_k__p[] = "p"; static char __pyx_k__q[] = "q"; static char __pyx_k__s[] = "s"; static char __pyx_k__t[] = "t"; static char __pyx_k__v[] = "v"; static char __pyx_k__x[] = "x"; static char __pyx_k__y[] = "y"; static char __pyx_k__z[] = "z"; static char __pyx_k_100[] = "mpi4py.MPI"; static char __pyx_k_101[] = "*"; static char __pyx_k_104[] = "/home/d3n000/ga/hpc_website/globalarrays/download/ga-5-3/python/ga4py/gain/core.pyx"; static char __pyx_k_105[] = "flagsobj.__init__"; static char __pyx_k_108[] = "flagsobj._get_c"; static char __pyx_k_111[] = "flagsobj._get_f"; static char __pyx_k_114[] = "flagsobj._get_o"; static char __pyx_k_117[] = "flagsobj._get_w"; static char __pyx_k_120[] = "flagsobj._get_a"; static char __pyx_k_123[] = "flagsobj._get_u"; static char __pyx_k_126[] = "flagsobj.__getitem__"; static char __pyx_k_129[] = "flagsobj.__repr__"; static char __pyx_k_133[] = "GlobalArrayCache.__init__"; static char __pyx_k_136[] = "GlobalArrayCache.__del__"; static char __pyx_k_139[] = "GlobalArrayCache.__contains__"; static char __pyx_k_142[] = "GlobalArrayCache.__getitem__"; static char __pyx_k_145[] = "GlobalArrayCache.__setitem__"; static char __pyx_k_148[] = "GlobalArrayCache.count"; static char __pyx_k_151[] = "GlobalArrayCache.empty"; static char __pyx_k_154[] = "GlobalArrayCache.full"; static char __pyx_k_157[] = "GlobalArrayCache.pop"; static char __pyx_k_160[] = "GlobalArrayCache.size"; static char __pyx_k_161[] = "When ndarray instances are removed, their GA handles are preserved.\n\n This class abstracts away various caching schemes in use and proides a\n consistent interface. The scheme that inspired this cache was to preserve\n the last three arrays with the same shape and type. Using the cache avoids\n many create/destroy cycles for GAs which occur as part of temporary array\n creation during numpy codes.\n\n "; static char __pyx_k_164[] = "ndarray.__new__"; static char __pyx_k_167[] = "ndarray.__init__"; static char __pyx_k_170[] = "ndarray.__del__"; static char __pyx_k_173[] = "ndarray.distribution"; static char __pyx_k_176[] = "ndarray.owns"; static char __pyx_k_180[] = "ndarray.access"; static char __pyx_k_184[] = "ndarray.get"; static char __pyx_k_188[] = "ndarray.allget"; static char __pyx_k_191[] = "ndarray.gather"; static char __pyx_k_194[] = "ndarray.release"; static char __pyx_k_197[] = "ndarray.release_update"; static char __pyx_k_200[] = "ndarray._get_T"; static char __pyx_k_203[] = "ndarray._get_data"; static char __pyx_k_206[] = "ndarray._get_dtype"; static char __pyx_k_209[] = "ndarray._get_flags"; static char __pyx_k_212[] = "ndarray._get_flat"; static char __pyx_k_215[] = "ndarray._set_flat"; static char __pyx_k_218[] = "ndarray._get_imag"; static char __pyx_k_221[] = "ndarray._set_imag"; static char __pyx_k_224[] = "ndarray._get_real"; static char __pyx_k_227[] = "ndarray._set_real"; static char __pyx_k_230[] = "ndarray._get_size"; static char __pyx_k_233[] = "ndarray._get_itemsize"; static char __pyx_k_236[] = "ndarray._get_nbytes"; static char __pyx_k_239[] = "ndarray._get_ndim"; static char __pyx_k_242[] = "ndarray._get_shape"; static char __pyx_k_245[] = "ndarray._set_shape"; static char __pyx_k_248[] = "ndarray._get_strides"; static char __pyx_k_251[] = "ndarray._get_ctypes"; static char __pyx_k_254[] = "ndarray._get_base"; static char __pyx_k_258[] = "ndarray.all"; static char __pyx_k_262[] = "ndarray.any"; static char __pyx_k_266[] = "ndarray.argmax"; static char __pyx_k_270[] = "ndarray.argmin"; static char __pyx_k_274[] = "ndarray.argsort"; static char __pyx_k_277[] = "ndarray.astype"; static char __pyx_k_280[] = "ndarray.byteswap"; static char __pyx_k_284[] = "ndarray.choose"; static char __pyx_k_288[] = "ndarray.clip"; static char __pyx_k_292[] = "ndarray.compress"; static char __pyx_k_295[] = "ndarray.conj"; static char __pyx_k_298[] = "ndarray.conjugate"; static char __pyx_k_302[] = "ndarray.copy"; static char __pyx_k_306[] = "ndarray.cumprod"; static char __pyx_k_310[] = "ndarray.cumsum"; static char __pyx_k_314[] = "ndarray.diagonal"; static char __pyx_k_318[] = "ndarray.dot"; static char __pyx_k_321[] = "ndarray.dump"; static char __pyx_k_324[] = "ndarray.dumps"; static char __pyx_k_327[] = "ndarray.fill"; static char __pyx_k_331[] = "ndarray.flatten"; static char __pyx_k_334[] = "ndarray.getfield"; static char __pyx_k_337[] = "ndarray.item"; static char __pyx_k_340[] = "ndarray.itemset"; static char __pyx_k_344[] = "ndarray.max"; static char __pyx_k_348[] = "ndarray.mean"; static char __pyx_k_352[] = "ndarray.min"; static char __pyx_k_356[] = "ndarray.newbyteorder"; static char __pyx_k_359[] = "ndarray.nonzero"; static char __pyx_k_363[] = "ndarray.prod"; static char __pyx_k_367[] = "ndarray.ptp"; static char __pyx_k_371[] = "ndarray.put"; static char __pyx_k_375[] = "ndarray.ravel"; static char __pyx_k_379[] = "ndarray.repeat"; static char __pyx_k_383[] = "ndarray.reshape"; static char __pyx_k_386[] = "ndarray.resize"; static char __pyx_k_390[] = "ndarray.round"; static char __pyx_k_394[] = "ndarray.searchsorted"; static char __pyx_k_398[] = "ndarray.setfield"; static char __pyx_k_402[] = "ndarray.setflags"; static char __pyx_k_406[] = "ndarray.sort"; static char __pyx_k_409[] = "ndarray.squeeze"; static char __pyx_k_413[] = "ndarray.std"; static char __pyx_k_417[] = "ndarray.sum"; static char __pyx_k_420[] = "ndarray.swapaxes"; static char __pyx_k_424[] = "ndarray.take"; static char __pyx_k_428[] = "ndarray.tofile"; static char __pyx_k_431[] = "ndarray.tolist"; static char __pyx_k_435[] = "ndarray.tostring"; static char __pyx_k_439[] = "ndarray.trace"; static char __pyx_k_442[] = "ndarray.transpose"; static char __pyx_k_446[] = "ndarray.var"; static char __pyx_k_450[] = "ndarray.view"; static char __pyx_k_453[] = "ndarray.__abs__"; static char __pyx_k_456[] = "ndarray.__add__"; static char __pyx_k_459[] = "ndarray.__and__"; static char __pyx_k_462[] = "ndarray.__array__"; static char __pyx_k_465[] = "ndarray.__array_finalize__"; static char __pyx_k_468[] = "ndarray.__array_interface__"; static char __pyx_k_471[] = "ndarray.__array_prepare__"; static char __pyx_k_474[] = "ndarray.__array_priority__"; static char __pyx_k_477[] = "ndarray.__array_struct__"; static char __pyx_k_480[] = "ndarray.__array_wrap__"; static char __pyx_k_483[] = "ndarray.__contains__"; static char __pyx_k_487[] = "ndarray.__copy__"; static char __pyx_k_490[] = "ndarray.__deepcopy__"; static char __pyx_k_493[] = "ndarray.__delitem__"; static char __pyx_k_496[] = "ndarray.__div__"; static char __pyx_k_499[] = "ndarray.__divmod__"; static char __pyx_k_502[] = "ndarray.__eq__"; static char __pyx_k_505[] = "ndarray.__float__"; static char __pyx_k_508[] = "ndarray.__floordiv__"; static char __pyx_k_511[] = "ndarray.__ge__"; static char __pyx_k_514[] = "ndarray.__getitem__"; static char __pyx_k_517[] = "ndarray.__gt__"; static char __pyx_k_520[] = "ndarray.__iadd__"; static char __pyx_k_523[] = "ndarray.__iand__"; static char __pyx_k_526[] = "ndarray.__idiv__"; static char __pyx_k_529[] = "ndarray.__ifloordiv__"; static char __pyx_k_532[] = "ndarray.__ilshift__"; static char __pyx_k_535[] = "ndarray.__imod__"; static char __pyx_k_538[] = "ndarray.__imul__"; static char __pyx_k_541[] = "ndarray.__int__"; static char __pyx_k_544[] = "ndarray.__invert__"; static char __pyx_k_547[] = "ndarray.__ior__"; static char __pyx_k_550[] = "ndarray.__ipow__"; static char __pyx_k_553[] = "ndarray.__irshift__"; static char __pyx_k_556[] = "ndarray.__isub__"; static char __pyx_k_559[] = "ndarray.__iter__"; static char __pyx_k_562[] = "ndarray.__itruediv__"; static char __pyx_k_565[] = "ndarray.__ixor__"; static char __pyx_k_568[] = "ndarray.__le__"; static char __pyx_k_571[] = "ndarray.__len__"; static char __pyx_k_574[] = "ndarray.__long__"; static char __pyx_k_577[] = "ndarray.__lshift__"; static char __pyx_k_580[] = "ndarray.__lt__"; static char __pyx_k_583[] = "ndarray.__mod__"; static char __pyx_k_586[] = "ndarray.__mul__"; static char __pyx_k_589[] = "ndarray.__ne__"; static char __pyx_k_592[] = "ndarray.__neg__"; static char __pyx_k_595[] = "ndarray.__nonzero__"; static char __pyx_k_598[] = "ndarray.__oct__"; static char __pyx_k_601[] = "ndarray.__or__"; static char __pyx_k_604[] = "ndarray.__pos__"; static char __pyx_k_607[] = "ndarray.__pow__"; static char __pyx_k_610[] = "ndarray.__radd__"; static char __pyx_k_613[] = "ndarray.__rand__"; static char __pyx_k_616[] = "ndarray.__rdiv__"; static char __pyx_k_619[] = "ndarray.__rdivmod__"; static char __pyx_k_622[] = "ndarray.__reduce__"; static char __pyx_k_625[] = "ndarray.__reduce_ex__"; static char __pyx_k_628[] = "ndarray.__repr__"; static char __pyx_k_631[] = "ndarray.__rfloordiv__"; static char __pyx_k_634[] = "ndarray.__rlshift__"; static char __pyx_k_637[] = "ndarray.__rmod__"; static char __pyx_k_640[] = "ndarray.__rmul__"; static char __pyx_k_643[] = "ndarray.__ror__"; static char __pyx_k_646[] = "ndarray.__rpow__"; static char __pyx_k_649[] = "ndarray.__rrshift__"; static char __pyx_k_652[] = "ndarray.__rshift__"; static char __pyx_k_655[] = "ndarray.__rsub__"; static char __pyx_k_658[] = "ndarray.__rtruediv__"; static char __pyx_k_661[] = "ndarray.__rxor__"; static char __pyx_k_664[] = "ndarray.__setitem__"; static char __pyx_k_667[] = "ndarray.__str__"; static char __pyx_k_670[] = "ndarray.__sub__"; static char __pyx_k_673[] = "ndarray.__truediv__"; static char __pyx_k_676[] = "ndarray.__xor__"; static char __pyx_k_677[] = "ndarray(shape, dtype=float, buffer=None, offset=0,\n strides=None, order=None)\n\n An array object represents a multidimensional, homogeneous array\n of fixed-size items. An associated data-type object describes the\n format of each element in the array (its byte-order, how many bytes it\n occupies in memory, whether it is an integer, a floating point number,\n or something else, etc.)\n\n Arrays should be constructed using `array`, `zeros` or `empty` (refer\n to the See Also section below). The parameters given here refer to\n a low-level method (`ndarray(...)`) for instantiating an array.\n\n For more information, refer to the `numpy` module and examine the\n the methods and attributes of an array.\n\n Parameters\n ----------\n (for the __new__ method; see Notes below)\n\n shape : tuple of ints\n Shape of created array.\n dtype : data-type, optional\n Any object that can be interpreted as a numpy data type.\n buffer : object exposing buffer interface, optional\n Used to fill the array with data.\n offset : int, optional\n Offset of array data in buffer.\n strides : tuple of ints, optional\n Strides of data in memory.\n order : {'C', 'F'}, optional\n Row-major or column-major order.\n\n Parameters added for Global Arrays\n ----------------------------------\n base : ndarray\n Should be a \"gainarray\". Used during view creation so that a new\n Global Array is not created and other attributes from base are copied\n into the view ndarray.\n\n Attributes\n ----------\n T : ndarray\n Transpose of the array.\n data : buffer\n The array's elements, in memory.\n dtype : dtype object\n Describes the format of the elements in the array.\n flags : dict\n Dictionary containing information related to memory use, e.g.,\n 'C_CONTIGUOUS', 'OWNDATA', 'WRITEABLE', etc.\n flat : numpy.fl""atiter object\n Flattened version of the array as an iterator. The iterator\n allows assignments, e.g., ``x.flat = 3`` (See `ndarray.flat` for\n assignment examples; TODO).\n imag : ndarray\n Imaginary part of the array.\n real : ndarray\n Real part of the array.\n size : int\n Number of elements in the array.\n itemsize : int\n The memory use of each array element in bytes.\n nbytes : int\n The total number of bytes required to store the array data,\n i.e., ``itemsize * size``.\n ndim : int\n The array's number of dimensions.\n shape : tuple of ints\n Shape of the array.\n strides : tuple of ints\n The step-size required to move from one element to the next in\n memory. For example, a contiguous ``(3, 4)`` array of type\n ``int16`` in C-order has strides ``(8, 2)``. This implies that\n to move from element to element in memory requires jumps of 2 bytes.\n To move from row-to-row, one needs to jump 8 bytes at a time\n (``2 * 4``).\n ctypes : ctypes object\n Class containing properties of the array needed for interaction\n with ctypes.\n base : ndarray\n If the array is a view into another array, that array is its `base`\n (unless that array is also a view). The `base` array is where the\n array data is actually stored.\n\n Attributes added for Global Arrays\n ----------------------------------\n handle : int\n The Global Arrays handle.\n global_slice: tuple of integers and/or slice objects\n Represents the slice to take from this ndarray. global_slice is\n calculated first based on the shape of the array, then as slices are\n taken from it, slice arithmetic is performed. When an ndarray is\n accessed or converted to an ndarray, the global_slice is used to turn\n the ndarray into its correct shape/strides before returning to the""\n caller.\n _is_real : bool\n Whether this is a 'real' view of a complex ndarray.\n _is_imag : bool\n Whether this is an 'imag' view of a complex ndarray.\n _T : None, tuple of ints\n None, or a tuple of ints If a transpose has been applied. 'i' in the\n 'j'-th place in the tuple means 'a's 'i'-th axis becomes\n 'a.transpose()'s 'j'-th axis.\n _T_inv : None, tuple of ints\n The inverse of _T, or how to reverse the current transpose\n\n See Also\n --------\n array : Construct an array.\n zeros : Create an array, each element of which is zero.\n empty : Create an array, but leave its allocated memory unchanged (i.e.,\n it contains \"garbage\").\n dtype : Create a data-type.\n\n Notes\n -----\n There are two modes of creating an array using ``__new__``:\n\n 1. If `buffer` is None, then only `shape`, `dtype`, and `order`\n are used.\n 2. If `buffer` is an object exposing the buffer interface, then\n all keywords are interpreted.\n\n No ``__init__`` method is needed because the array is fully initialized\n after the ``__new__`` method.\n\n Examples\n --------\n These examples illustrate the low-level `ndarray` constructor. Refer\n to the `See Also` section above for easier ways of constructing an\n ndarray.\n\n First mode, `buffer` is None:\n\n >>> np.ndarray(shape=(2,2), dtype=float, order='F')\n array([[ -1.13698227e+002, 4.25087011e-303],\n [ 2.88528414e-306, 3.27025015e-309]])\n\n Second mode:\n\n >>> np.ndarray((2,), buffer=np.array([1,2,3]),\n ... offset=np.int_().itemsize,\n ... dtype=int) # offset = 1*itemsize, i.e. skip first element\n array([2, 3])\n\n "; static char __pyx_k_682[] = "ufunc.__init__"; static char __pyx_k_685[] = "ufunc._get_identity"; static char __pyx_k_688[] = "ufunc._get_nargs"; static char __pyx_k_691[] = "ufunc._get_nin"; static char __pyx_k_694[] = "ufunc._get_nout"; static char __pyx_k_697[] = "ufunc._get_ntypes"; static char __pyx_k_700[] = "ufunc._get_signature"; static char __pyx_k_703[] = "ufunc._get_types"; static char __pyx_k_706[] = "ufunc.__call__"; static char __pyx_k_710[] = "ufunc._unary_call"; static char __pyx_k_714[] = "ufunc._binary_call"; static char __pyx_k_718[] = "ufunc.reduce"; static char __pyx_k_722[] = "ufunc.accumulate"; static char __pyx_k_725[] = "ufunc.outer"; static char __pyx_k_728[] = "ufunc.reduceat"; static char __pyx_k_729[] = "Functions that operate element by element on whole arrays.\n\n A detailed explanation of ufuncs can be found in the \"ufuncs.rst\"\n file in the NumPy reference guide.\n\n Unary ufuncs:\n =============\n\n op(X, out=None)\n Apply op to X elementwise\n\n Parameters\n ----------\n X : array_like\n Input array.\n out : array_like\n An array to store the output. Must be the same shape as `X`.\n\n Returns\n -------\n r : array_like\n `r` will have the same shape as `X`; if out is provided, `r`\n will be equal to out.\n\n Binary ufuncs:\n ==============\n\n op(X, Y, out=None)\n Apply `op` to `X` and `Y` elementwise. May \"broadcast\" to make\n the shapes of `X` and `Y` congruent.\n\n The broadcasting rules are:\n\n * Dimensions of length 1 may be prepended to either array.\n * Arrays may be repeated along dimensions of length 1.\n\n Parameters\n ----------\n X : array_like\n First input array.\n Y : array_like\n Second input array.\n out : array_like\n An array to store the output. Must be the same shape as the\n output would have.\n\n Returns\n -------\n r : array_like\n The return value; if out is provided, `r` will be equal to out.\n\n "; static char __pyx_k_732[] = "flatiter.__init__"; static char __pyx_k_735[] = "flatiter._get_base"; static char __pyx_k_738[] = "flatiter._get_coords"; static char __pyx_k_741[] = "flatiter.copy"; static char __pyx_k_744[] = "flatiter._get_index"; static char __pyx_k_747[] = "flatiter.distribution"; static char __pyx_k_750[] = "flatiter.owns"; static char __pyx_k_754[] = "flatiter.get"; static char __pyx_k_758[] = "flatiter.allget"; static char __pyx_k_761[] = "flatiter.__getitem__"; static char __pyx_k_764[] = "flatiter.__len__"; static char __pyx_k_767[] = "flatiter.put"; static char __pyx_k_770[] = "flatiter.__setitem__"; static char __pyx_k_773[] = "flatiter.next"; static char __pyx_k_776[] = "flatiter.access"; static char __pyx_k_779[] = "flatiter.release"; static char __pyx_k_782[] = "flatiter.release_update"; static char __pyx_k_785[] = "flatiter.__repr__"; static char __pyx_k_788[] = "flatiter.__str__"; static char __pyx_k_789[] = "Flat iterator object to iterate over arrays.\n\n A `flatiter` iterator is returned by ``x.flat`` for any array `x`.\n It allows iterating over the array as if it were a 1-D array,\n either in a for-loop or by calling its `next` method.\n\n Iteration is done in C-contiguous style, with the last index varying the\n fastest. The iterator can also be indexed using basic slicing or\n advanced indexing.\n\n See Also\n --------\n ndarray.flat : Return a flat iterator over an array.\n ndarray.flatten : Returns a flattened copy of an array.\n\n Notes\n -----\n A `flatiter` iterator can not be constructed directly from Python code\n by calling the `flatiter` constructor.\n\n Examples\n --------\n >>> x = np.arange(6).reshape(2, 3)\n >>> fl = x.flat\n >>> type(fl)\n \n >>> for item in fl:\n ... print item\n ...\n 0\n 1\n 2\n 3\n 4\n 5\n\n >>> fl[2:4]\n array([2, 3])\n\n "; static char __pyx_k_800[] = "ndarray.astype (line 744)"; static char __pyx_k_801[] = "Copy of the array, cast to a specified type.\n\n Parameters\n ----------\n t : string or dtype\n Typecode or data-type to which the array is cast.\n\n Examples\n --------\n >>> x = np.array([1, 2, 2.5])\n >>> x\n array([ 1. , 2. , 2.5])\n\n >>> x.astype(int)\n array([1, 2, 2])\n\n "; static char __pyx_k_802[] = "ndarray.byteswap (line 775)"; static char __pyx_k_803[] = "Swap the bytes of the array elements\n\n Toggle between low-endian and big-endian data representation by\n returning a byteswapped array, optionally swapped in-place.\n\n Parameters\n ----------\n inplace: bool, optional\n If ``True``, swap bytes in-place, default is ``False``.\n\n Returns\n -------\n out: ndarray\n The byteswapped array. If `inplace` is ``True``, this is\n a view to self.\n\n Examples\n --------\n >>> A = np.array([1, 256, 8755], dtype=np.int16)\n >>> map(hex, A)\n ['0x1', '0x100', '0x2233']\n >>> A.byteswap(True)\n array([ 256, 1, 13090], dtype=int16)\n >>> map(hex, A)\n ['0x100', '0x1', '0x3322']\n\n Arrays of strings are not swapped\n\n >>> A = np.array(['ceg', 'fac'])\n >>> A.byteswap()\n array(['ceg', 'fac'],\n dtype='|S3')\n \n "; static char __pyx_k_804[] = "ndarray.copy (line 872)"; static char __pyx_k_805[] = "Return a copy of the array.\n\n Parameters\n ----------\n order : {'C', 'F', 'A'}, optional\n By default, the result is stored in C-contiguous (row-major) order in\n memory. If `order` is `F`, the result has 'Fortran' (column-major)\n order. If order is 'A' ('Any'), then the result has the same order\n as the input.\n\n Examples\n --------\n >>> x = np.array([[1,2,3],[4,5,6]], order='F')\n\n >>> y = x.copy()\n\n >>> x.fill(0)\n\n >>> x\n array([[0, 0, 0],\n [0, 0, 0]])\n\n >>> y\n array([[1, 2, 3],\n [4, 5, 6]])\n\n >>> y.flags['C_CONTIGUOUS']\n True\n\n "; static char __pyx_k_806[] = "ndarray.dot (line 978)"; static char __pyx_k_807[] = "a.dot(b, out=None)\n\n Dot product of two arrays.\n\n Refer to `numpy.dot` for full documentation.\n\n See Also\n --------\n numpy.dot : equivalent function\n\n Examples\n --------\n >>> a = np.eye(2)\n >>> b = np.ones((2, 2)) * 2\n >>> a.dot(b)\n array([[ 2., 2.],\n [ 2., 2.]])\n\n This array method can be conveniently chained:\n\n >>> a.dot(b).dot(b)\n array([[ 8., 8.],\n [ 8., 8.]])\n\n "; static char __pyx_k_808[] = "ndarray.fill (line 1031)"; static char __pyx_k_809[] = "Fill the array with a scalar value.\n\n Parameters\n ----------\n value : scalar\n All elements of `a` will be assigned this value.\n\n Examples\n --------\n >>> a = np.array([1, 2])\n >>> a.fill(0)\n >>> a\n array([0, 0])\n >>> a = np.empty(2)\n >>> a.fill(1)\n >>> a\n array([ 1., 1.])\n\n "; static char __pyx_k_810[] = "ndarray.flatten (line 1056)"; static char __pyx_k_811[] = "Return a copy of the array collapsed into one dimension.\n\n Parameters\n ----------\n order : {'C', 'F'}, optional\n Whether to flatten in C (row-major) or Fortran (column-major) order.\n The default is 'C'.\n\n Returns\n -------\n y : ndarray\n A copy of the input array, flattened to one dimension.\n\n See Also\n --------\n ravel : Return a flattened array.\n flat : A 1-D flat iterator over the array.\n\n Examples\n --------\n >>> a = np.array([[1,2], [3,4]])\n >>> a.flatten()\n array([1, 2, 3, 4])\n >>> a.flatten('F')\n array([1, 3, 2, 4])\n\n "; static char __pyx_k_812[] = "ndarray.getfield (line 1086)"; static char __pyx_k_813[] = "Returns a field of the given array as a certain type.\n\n A field is a view of the array data with each itemsize determined\n by the given type and the offset into the current array, i.e. from\n ``offset * dtype.itemsize`` to ``(offset+1) * dtype.itemsize``.\n\n Parameters\n ----------\n dtype : str\n String denoting the data type of the field.\n offset : int\n Number of `dtype.itemsize`'s to skip before beginning the element view.\n\n Examples\n --------\n >>> x = np.diag([1.+1.j]*2)\n >>> x\n array([[ 1.+1.j, 0.+0.j],\n [ 0.+0.j, 1.+1.j]])\n >>> x.dtype\n dtype('complex128')\n\n >>> x.getfield('complex64', 0) # Note how this != x\n array([[ 0.+1.875j, 0.+0.j ],\n [ 0.+0.j , 0.+1.875j]], dtype=complex64)\n\n >>> x.getfield('complex64',1) # Note how different this is than x\n array([[ 0. +5.87173204e-39j, 0. +0.00000000e+00j],\n [ 0. +0.00000000e+00j, 0. +5.87173204e-39j]], dtype=complex64)\n\n >>> x.getfield('complex128', 0) # == x\n array([[ 1.+1.j, 0.+0.j],\n [ 0.+0.j, 1.+1.j]])\n\n If the argument dtype is the same as x.dtype, then offset != 0 raises\n a ValueError:\n\n >>> x.getfield('complex128', 1)\n Traceback (most recent call last):\n File \"\", line 1, in \n ValueError: Need 0 <= offset <= 0 for requested type but received offset = 1\n\n >>> x.getfield('float64', 0)\n array([[ 1., 0.],\n [ 0., 1.]])\n\n >>> x.getfield('float64', 1)\n array([[ 1.77658241e-307, 0.00000000e+000],\n [ 0.00000000e+000, 1.77658241e-307]])\n\n "; static char __pyx_k_814[] = "ndarray.item (line 1140)"; static char __pyx_k_815[] = "Copy an element of an array to a standard Python scalar and return it.\n\n Parameters\n ----------\n \\*args : Arguments (variable number and type)\n\n * none: in this case, the method only works for arrays\n with one element (`a.size == 1`), which element is\n copied into a standard Python scalar object and returned.\n\n * int_type: this argument is interpreted as a flat index into\n the array, specifying which element to copy and return.\n\n * tuple of int_types: functions as does a single int_type argument,\n except that the argument is interpreted as an nd-index into the\n array.\n\n Returns\n -------\n z : Standard Python scalar object\n A copy of the specified element of the array as a suitable\n Python scalar\n\n Notes\n -----\n When the data type of `a` is longdouble or clongdouble, item() returns\n a scalar array object because there is no available Python scalar that\n would not lose information. Void arrays return a buffer object for item(),\n unless fields are defined, in which case a tuple is returned.\n\n `item` is very similar to a[args], except, instead of an array scalar,\n a standard Python scalar is returned. This can be useful for speeding up\n access to elements of the array and doing arithmetic on elements of the\n array using Python's optimized math.\n\n Examples\n --------\n >>> x = np.random.randint(9, size=(3, 3))\n >>> x\n array([[3, 1, 7],\n [2, 8, 3],\n [8, 5, 3]])\n >>> x.item(3)\n 2\n >>> x.item(7)\n 5\n >>> x.item((0, 1))\n 1\n >>> x.item((2, 2))\n 3\n\n "; static char __pyx_k_816[] = "ndarray.itemset (line 1195)"; static char __pyx_k_817[] = "Insert scalar into an array (scalar is cast to array's dtype, if possible)\n\n There must be at least 1 argument, and define the last argument\n as *item*. Then, ``a.itemset(*args)`` is equivalent to but faster\n than ``a[args] = item``. The item should be a scalar value and `args`\n must select a single item in the array `a`.\n\n Parameters\n ----------\n \\*args : Arguments\n If one argument: a scalar, only used in case `a` is of size 1.\n If two arguments: the last argument is the value to be set\n and must be a scalar, the first argument specifies a single array\n element location. It is either an int or a tuple.\n\n Notes\n -----\n Compared to indexing syntax, `itemset` provides some speed increase\n for placing a scalar into a particular location in an `ndarray`,\n if you must do this. However, generally this is discouraged:\n among other problems, it complicates the appearance of the code.\n Also, when using `itemset` (and `item`) inside a loop, be sure\n to assign the methods to a local variable to avoid the attribute\n look-up at each loop iteration.\n\n Examples\n --------\n >>> x = np.random.randint(9, size=(3, 3))\n >>> x\n array([[3, 1, 7],\n [2, 8, 3],\n [8, 5, 3]])\n >>> x.itemset(4, 0)\n >>> x.itemset((2, 2), 9)\n >>> x\n array([[3, 1, 7],\n [2, 0, 3],\n [8, 5, 9]])\n\n "; static char __pyx_k_818[] = "ndarray.resize (line 1470)"; static char __pyx_k_819[] = "Change shape and size of array in-place.\n\n Parameters\n ----------\n new_shape : tuple of ints, or `n` ints\n Shape of resized array.\n refcheck : bool, optional\n If False, reference count will not be checked. Default is True.\n\n Returns\n -------\n None\n\n Raises\n ------\n ValueError\n If `a` does not own its own data or references or views to it exist,\n and the data memory must be changed.\n\n SystemError\n If the `order` keyword argument is specified. This behaviour is a\n bug in NumPy.\n\n See Also\n --------\n resize : Return a new array with the specified shape.\n\n Notes\n -----\n This reallocates space for the data area if necessary.\n\n Only contiguous arrays (data elements consecutive in memory) can be\n resized.\n\n The purpose of the reference count check is to make sure you\n do not use this array as a buffer for another Python object and then\n reallocate the memory. However, reference counts can increase in\n other ways so if you are sure that you have not shared the memory\n for this array with another Python object, then you may safely set\n `refcheck` to False.\n\n Examples\n --------\n Shrinking an array: array is flattened (in the order that the data are\n stored in memory), resized, and reshaped:\n\n >>> a = np.array([[0, 1], [2, 3]], order='C')\n >>> a.resize((2, 1))\n >>> a\n array([[0],\n [1]])\n\n >>> a = np.array([[0, 1], [2, 3]], order='F')\n >>> a.resize((2, 1))\n >>> a\n array([[0],\n [2]])\n\n Enlarging an array: as above, but missing entries are filled with zeros:\n\n >>> b = np.array([[0, 1], [2, 3]])\n >>> b.resize(2, 3) # new_shape parameter doesn't have to b""e a tuple\n >>> b\n array([[0, 1, 2],\n [3, 0, 0]])\n\n Referencing an array prevents resizing...\n\n >>> c = a\n >>> a.resize((1, 1))\n Traceback (most recent call last):\n ...\n ValueError: cannot resize an array that has been referenced ...\n\n Unless `refcheck` is False:\n\n >>> a.resize((1, 1), refcheck=False)\n >>> a\n array([[0]])\n >>> c\n array([[0]])\n\n "; static char __pyx_k_820[] = "ndarray.setfield (line 1580)"; static char __pyx_k_821[] = "Put a value into a specified place in a field defined by a data-type.\n\n Place `val` into `a`'s field defined by `dtype` and beginning `offset`\n bytes into the field.\n\n Parameters\n ----------\n val : object\n Value to be placed in field.\n dtype : dtype object\n Data-type of the field in which to place `val`.\n offset : int, optional\n The number of bytes into the field at which to place `val`.\n\n Returns\n -------\n None\n\n See Also\n --------\n getfield\n\n Examples\n --------\n >>> x = np.eye(3)\n >>> x.getfield(np.float64)\n array([[ 1., 0., 0.],\n [ 0., 1., 0.],\n [ 0., 0., 1.]])\n >>> x.setfield(3, np.int32)\n >>> x.getfield(np.int32)\n array([[3, 3, 3],\n [3, 3, 3],\n [3, 3, 3]])\n >>> x\n array([[ 1.00000000e+000, 1.48219694e-323, 1.48219694e-323],\n [ 1.48219694e-323, 1.00000000e+000, 1.48219694e-323],\n [ 1.48219694e-323, 1.48219694e-323, 1.00000000e+000]])\n >>> x.setfield(np.eye(3), np.int32)\n >>> x\n array([[ 1., 0., 0.],\n [ 0., 1., 0.],\n [ 0., 0., 1.]])\n\n "; static char __pyx_k_822[] = "ndarray.setflags (line 1628)"; static char __pyx_k_823[] = "Set array flags WRITEABLE, ALIGNED, and UPDATEIFCOPY, respectively.\n\n These Boolean-valued flags affect how numpy interprets the memory\n area used by `a` (see Notes below). The ALIGNED flag can only\n be set to True if the data is actually aligned according to the type.\n The UPDATEIFCOPY flag can never be set to True. The flag WRITEABLE\n can only be set to True if the array owns its own memory, or the\n ultimate owner of the memory exposes a writeable buffer interface,\n or is a string. (The exception for string is made so that unpickling\n can be done without copying memory.)\n\n Parameters\n ----------\n write : bool, optional\n Describes whether or not `a` can be written to.\n align : bool, optional\n Describes whether or not `a` is aligned properly for its type.\n uic : bool, optional\n Describes whether or not `a` is a copy of another \"base\" array.\n\n Notes\n -----\n Array flags provide information about how the memory area used\n for the array is to be interpreted. There are 6 Boolean flags\n in use, only three of which can be changed by the user:\n UPDATEIFCOPY, WRITEABLE, and ALIGNED.\n\n WRITEABLE (W) the data area can be written to;\n\n ALIGNED (A) the data and strides are aligned appropriately for the hardware\n (as determined by the compiler);\n\n UPDATEIFCOPY (U) this array is a copy of some other array (referenced\n by .base). When this array is deallocated, the base array will be\n updated with the contents of this array.\n\n All flags can be accessed using their first (upper case) letter as well\n as the full name.\n\n Examples\n --------\n >>> y\n array([[3, 1, 7],\n [2, 0, 0],\n [8, 5, 9]])\n >>> y.flags\n C_CONTIGUOUS : True\n F_CONTIGUOUS : ""False\n OWNDATA : True\n WRITEABLE : True\n ALIGNED : True\n UPDATEIFCOPY : False\n >>> y.setflags(write=0, align=0)\n >>> y.flags\n C_CONTIGUOUS : True\n F_CONTIGUOUS : False\n OWNDATA : True\n WRITEABLE : False\n ALIGNED : False\n UPDATEIFCOPY : False\n >>> y.setflags(uic=1)\n Traceback (most recent call last):\n File \"\", line 1, in \n ValueError: cannot set UPDATEIFCOPY flag to True\n\n "; static char __pyx_k_824[] = "ndarray.sort (line 1697)"; static char __pyx_k_825[] = "Sort an array, in-place.\n\n Parameters\n ----------\n axis : int, optional\n Axis along which to sort. Default is -1, which means sort along the\n last axis.\n kind : {'quicksort', 'mergesort', 'heapsort'}, optional\n Sorting algorithm. Default is 'quicksort'.\n order : list, optional\n When `a` is an array with fields defined, this argument specifies\n which fields to compare first, second, etc. Not all fields need be\n specified.\n\n See Also\n --------\n numpy.sort : Return a sorted copy of an array.\n argsort : Indirect sort.\n lexsort : Indirect stable sort on multiple keys.\n searchsorted : Find elements in sorted array.\n\n Notes\n -----\n See ``sort`` for notes on the different sorting algorithms.\n\n Examples\n --------\n >>> a = np.array([[1,4], [3,1]])\n >>> a.sort(axis=1)\n >>> a\n array([[1, 4],\n [1, 3]])\n >>> a.sort(axis=0)\n >>> a\n array([[1, 3],\n [1, 4]])\n\n Use the `order` keyword to specify a field to use when sorting a\n structured array:\n\n >>> a = np.array([('a', 2), ('c', 1)], dtype=[('x', 'S1'), ('y', int)])\n >>> a.sort(order='y')\n >>> a\n array([('c', 1), ('a', 2)],\n dtype=[('x', '|S1'), ('y', '>> a = np.array([[1, 2], [3, 4]])\n >>> a\n array([[1, 2],\n [3, 4]])\n >>> a.transpose()\n array([[1, 3],\n [2, 4]])\n >>> a.transpose((1, 0))\n array([[1, 3],\n [2, 4]])\n >>> a.transpose(1, 0)\n array([[1, 3],\n [2, 4]])\n\n "; static char __pyx_k_832[] = "ndarray.view (line 2009)"; static char __pyx_k_833[] = "New view of array with the same data.\n\n Parameters\n ----------\n dtype : data-type, optional\n Data-type descriptor of the returned view, e.g., float32 or int16.\n The default, None, results in the view having the same data-type\n as `a`.\n type : Python type, optional\n Type of the returned view, e.g., ndarray or matrix. Again, the\n default None results in type preservation.\n\n Notes\n -----\n ``a.view()`` is used two different ways:\n\n ``a.view(some_dtype)`` or ``a.view(dtype=some_dtype)`` constructs a view\n of the array's memory with a different data-type. This can cause a\n reinterpretation of the bytes of memory.\n\n ``a.view(ndarray_subclass)`` or ``a.view(type=ndarray_subclass)`` just\n returns an instance of `ndarray_subclass` that looks at the same array\n (same shape, dtype, etc.) This does not cause a reinterpretation of the\n memory.\n\n\n Examples\n --------\n >>> x = np.array([(1, 2)], dtype=[('a', np.int8), ('b', np.int8)])\n\n Viewing array data using a different type and dtype:\n\n >>> y = x.view(dtype=np.int16, type=np.matrix)\n >>> y\n matrix([[513]], dtype=int16)\n >>> print type(y)\n \n\n Creating a view on a structured array so it can be used in calculations\n\n >>> x = np.array([(1, 2),(3,4)], dtype=[('a', np.int8), ('b', np.int8)])\n >>> xv = x.view(dtype=np.int8).reshape(-1,2)\n >>> xv\n array([[1, 2],\n [3, 4]], dtype=int8)\n >>> xv.mean(0)\n array([ 2., 3.])\n\n Making changes to the view changes the underlying array\n\n >>> xv[0,1] = 20\n >>> print x\n [(1, 20) (3, 4)]\n\n Using a view to convert an array to a record array:\n\n >>> z = x.view(np.recarray)\n >>> z.a""\n array([1], dtype=int8)\n\n Views share data:\n\n >>> x[0] = (9, 10)\n >>> z[0]\n (9, 10)\n\n "; static char __pyx_k_834[] = "ufunc.reduce (line 2707)"; static char __pyx_k_835[] = "reduce(a, axis=0, dtype=None, out=None)\n\n Reduces `a`'s dimension by one, by applying ufunc along one axis.\n\n Let :math:`a.shape = (N_0, ..., N_i, ..., N_{M-1})`. Then\n :math:`ufunc.reduce(a, axis=i)[k_0, ..,k_{i-1}, k_{i+1}, .., k_{M-1}]` =\n the result of iterating `j` over :math:`range(N_i)`, cumulatively applying\n ufunc to each :math:`a[k_0, ..,k_{i-1}, j, k_{i+1}, .., k_{M-1}]`.\n For a one-dimensional array, reduce produces results equivalent to:\n ::\n\n r = op.identity # op = ufunc\n for i in xrange(len(A)):\n r = op(r, A[i])\n return r\n\n For example, add.reduce() is equivalent to sum().\n\n Parameters\n ----------\n a : array_like\n The array to act on.\n axis : int, optional\n The axis along which to apply the reduction.\n dtype : data-type code, optional\n The type used to represent the intermediate results. Defaults\n to the data-type of the output array if this is provided, or\n the data-type of the input array if no output array is provided.\n out : ndarray, optional\n A location into which the result is stored. If not provided, a\n freshly-allocated array is returned.\n\n Returns\n -------\n r : ndarray\n The reduced array. If `out` was supplied, `r` is a reference to it.\n\n Examples\n --------\n >>> np.multiply.reduce([2,3,5])\n 30\n\n A multi-dimensional array example:\n\n >>> X = np.arange(8).reshape((2,2,2))\n >>> X\n array([[[0, 1],\n [2, 3]],\n [[4, 5],\n [6, 7]]])\n >>> np.add.reduce(X, 0)\n array([[ 4, 6],\n [ 8, 10]])\n >>> np.add.reduce(X) # confirm: default axis value is 0\n array([[ 4, 6],\n [ 8, 10]])\n >>> np.add.reduce(X, 1)\n array([[ 2, 4],\n [10, 12]])\n >>> np.add.reduce(X, 2)\n array([[ 1, 5],\n [ 9, 13]])\n\n "; static char __pyx_k_836[] = "flatiter.copy (line 3108)"; static char __pyx_k_837[] = "Get a copy of the iterator as a 1-D array.\n\n Examples\n --------\n >>> x = np.arange(6).reshape(2, 3)\n >>> x\n array([[0, 1, 2],\n [3, 4, 5]])\n >>> fl = x.flat\n >>> fl.copy()\n array([0, 1, 2, 3, 4, 5])\n\n "; static char __pyx_k_838[] = "zeros (line 3276)"; static char __pyx_k_839[] = "zeros(shape, dtype=float, order='C')\n\n Return a new array of given shape and type, filled with zeros.\n\n Parameters\n ----------\n shape : int or sequence of ints\n Shape of the new array, e.g., ``(2, 3)`` or ``2``.\n dtype : data-type, optional\n The desired data-type for the array, e.g., `numpy.int8`. Default is\n `numpy.float64`.\n order : {'C', 'F'}, optional\n Whether to store multidimensional data in C- or Fortran-contiguous\n (row- or column-wise) order in memory.\n\n Returns\n -------\n out : ndarray\n Array of zeros with the given shape, dtype, and order.\n\n See Also\n --------\n zeros_like : Return an array of zeros with shape and type of input.\n ones_like : Return an array of ones with shape and type of input.\n empty_like : Return an empty array with shape and type of input.\n ones : Return a new array setting values to one.\n empty : Return a new uninitialized array.\n\n Examples\n --------\n >>> np.zeros(5)\n array([ 0., 0., 0., 0., 0.])\n\n >>> np.zeros((5,), dtype=numpy.int)\n array([0, 0, 0, 0, 0])\n\n >>> np.zeros((2, 1))\n array([[ 0.],\n [ 0.]])\n\n >>> s = (2,2)\n >>> np.zeros(s)\n array([[ 0., 0.],\n [ 0., 0.]])\n\n >>> np.zeros((2,), dtype=[('x', 'i4'), ('y', 'i4')]) # custom dtype\n array([(0, 0), (0, 0)],\n dtype=[('x', '= get_size_threshold() */ if (unlikely(((PyObject *)__pyx_v_the_shape) == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_2 = PyList_GET_SIZE(((PyObject *)__pyx_v_the_shape)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = ((__pyx_t_2 == 0) != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":30 * the_shape = listify(shape) * if len(the_shape) == 0: * return False # <<<<<<<<<<<<<< * return np.multiply.reduce(the_shape) >= get_size_threshold() * cpdef bint is_distributed(thing): */ __pyx_r = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":31 * if len(the_shape) == 0: * return False * return np.multiply.reduce(the_shape) >= get_size_threshold() # <<<<<<<<<<<<<< * cpdef bint is_distributed(thing): * return isinstance(thing, (ndarray,flatiter)) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__multiply); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__reduce); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(((PyObject *)__pyx_v_the_shape)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_the_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_the_shape)); __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_t_4 = PyInt_FromLong(__pyx_f_5ga4py_4gain_4core_get_size_threshold(0)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_3; goto __pyx_L0; __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_WriteUnraisable("ga4py.gain.core.should_distribute", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XDECREF(__pyx_v_the_shape); __Pyx_TraceReturn(Py_None); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_9should_distribute(PyObject *__pyx_self, PyObject *__pyx_v_shape); /*proto*/ static PyObject *__pyx_pw_5ga4py_4gain_4core_9should_distribute(PyObject *__pyx_self, PyObject *__pyx_v_shape) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("should_distribute (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8should_distribute(__pyx_self, ((PyObject *)__pyx_v_shape)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":27 * global SIZE_THRESHOLD * SIZE_THRESHOLD = threshold * cpdef bint should_distribute(shape): # <<<<<<<<<<<<<< * the_shape = listify(shape) * if len(the_shape) == 0: */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8should_distribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_shape) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("should_distribute", 0); __Pyx_TraceCall("should_distribute", __pyx_f[0], 27); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_f_5ga4py_4gain_4core_should_distribute(__pyx_v_shape, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.should_distribute", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":32 * return False * return np.multiply.reduce(the_shape) >= get_size_threshold() * cpdef bint is_distributed(thing): # <<<<<<<<<<<<<< * return isinstance(thing, (ndarray,flatiter)) * cpdef bint is_array(thing): */ static PyObject *__pyx_pw_5ga4py_4gain_4core_11is_distributed(PyObject *__pyx_self, PyObject *__pyx_v_thing); /*proto*/ static int __pyx_f_5ga4py_4gain_4core_is_distributed(PyObject *__pyx_v_thing, CYTHON_UNUSED int __pyx_skip_dispatch) { int __pyx_r; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("is_distributed", 0); __Pyx_TraceCall("is_distributed", __pyx_f[0], 32); /* "ga4py/gain/core.pyx":33 * return np.multiply.reduce(the_shape) >= get_size_threshold() * cpdef bint is_distributed(thing): * return isinstance(thing, (ndarray,flatiter)) # <<<<<<<<<<<<<< * cpdef bint is_array(thing): * return isinstance(thing, (ndarray,flatiter,np.ndarray,np.flatiter)) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__flatiter); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_4 = PyObject_IsInstance(__pyx_v_thing, ((PyObject *)__pyx_t_3)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_4; goto __pyx_L0; __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_WriteUnraisable("ga4py.gain.core.is_distributed", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_TraceReturn(Py_None); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_11is_distributed(PyObject *__pyx_self, PyObject *__pyx_v_thing); /*proto*/ static PyObject *__pyx_pw_5ga4py_4gain_4core_11is_distributed(PyObject *__pyx_self, PyObject *__pyx_v_thing) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("is_distributed (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_10is_distributed(__pyx_self, ((PyObject *)__pyx_v_thing)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":32 * return False * return np.multiply.reduce(the_shape) >= get_size_threshold() * cpdef bint is_distributed(thing): # <<<<<<<<<<<<<< * return isinstance(thing, (ndarray,flatiter)) * cpdef bint is_array(thing): */ static PyObject *__pyx_pf_5ga4py_4gain_4core_10is_distributed(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thing) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("is_distributed", 0); __Pyx_TraceCall("is_distributed", __pyx_f[0], 32); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_f_5ga4py_4gain_4core_is_distributed(__pyx_v_thing, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.is_distributed", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":34 * cpdef bint is_distributed(thing): * return isinstance(thing, (ndarray,flatiter)) * cpdef bint is_array(thing): # <<<<<<<<<<<<<< * return isinstance(thing, (ndarray,flatiter,np.ndarray,np.flatiter)) * cpdef get_shape(thing): */ static PyObject *__pyx_pw_5ga4py_4gain_4core_13is_array(PyObject *__pyx_self, PyObject *__pyx_v_thing); /*proto*/ static int __pyx_f_5ga4py_4gain_4core_is_array(PyObject *__pyx_v_thing, CYTHON_UNUSED int __pyx_skip_dispatch) { int __pyx_r; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("is_array", 0); __Pyx_TraceCall("is_array", __pyx_f[0], 34); /* "ga4py/gain/core.pyx":35 * return isinstance(thing, (ndarray,flatiter)) * cpdef bint is_array(thing): * return isinstance(thing, (ndarray,flatiter,np.ndarray,np.flatiter)) # <<<<<<<<<<<<<< * cpdef get_shape(thing): * try: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__flatiter); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray))); PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray))); __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray))); __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_5numpy_flatiter))); PyTuple_SET_ITEM(__pyx_t_3, 3, ((PyObject *)((PyObject*)__pyx_ptype_5numpy_flatiter))); __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_5numpy_flatiter))); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_4 = PyObject_IsInstance(__pyx_v_thing, ((PyObject *)__pyx_t_3)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_4; goto __pyx_L0; __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_WriteUnraisable("ga4py.gain.core.is_array", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_TraceReturn(Py_None); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_13is_array(PyObject *__pyx_self, PyObject *__pyx_v_thing); /*proto*/ static PyObject *__pyx_pw_5ga4py_4gain_4core_13is_array(PyObject *__pyx_self, PyObject *__pyx_v_thing) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("is_array (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_12is_array(__pyx_self, ((PyObject *)__pyx_v_thing)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":34 * cpdef bint is_distributed(thing): * return isinstance(thing, (ndarray,flatiter)) * cpdef bint is_array(thing): # <<<<<<<<<<<<<< * return isinstance(thing, (ndarray,flatiter,np.ndarray,np.flatiter)) * cpdef get_shape(thing): */ static PyObject *__pyx_pf_5ga4py_4gain_4core_12is_array(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thing) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("is_array", 0); __Pyx_TraceCall("is_array", __pyx_f[0], 34); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_f_5ga4py_4gain_4core_is_array(__pyx_v_thing, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.is_array", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":36 * cpdef bint is_array(thing): * return isinstance(thing, (ndarray,flatiter,np.ndarray,np.flatiter)) * cpdef get_shape(thing): # <<<<<<<<<<<<<< * try: * return thing.shape # an ndarray */ static PyObject *__pyx_pw_5ga4py_4gain_4core_15get_shape(PyObject *__pyx_self, PyObject *__pyx_v_thing); /*proto*/ static PyObject *__pyx_f_5ga4py_4gain_4core_get_shape(PyObject *__pyx_v_thing, CYTHON_UNUSED int __pyx_skip_dispatch) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; Py_ssize_t __pyx_t_8; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_shape", 0); __Pyx_TraceCall("get_shape", __pyx_f[0], 36); /* "ga4py/gain/core.pyx":37 * return isinstance(thing, (ndarray,flatiter,np.ndarray,np.flatiter)) * cpdef get_shape(thing): * try: # <<<<<<<<<<<<<< * return thing.shape # an ndarray * except AttributeError: */ { __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { /* "ga4py/gain/core.pyx":38 * cpdef get_shape(thing): * try: * return thing.shape # an ndarray # <<<<<<<<<<<<<< * except AttributeError: * return (len(thing),) # a flatiter */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_thing, __pyx_n_s__shape); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L7_try_return; } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L10_try_end; __pyx_L7_try_return:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L0; __pyx_L3_error:; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":39 * try: * return thing.shape # an ndarray * except AttributeError: # <<<<<<<<<<<<<< * return (len(thing),) # a flatiter * cpdef get_dtype(thing): */ __pyx_t_5 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError); if (__pyx_t_5) { __Pyx_AddTraceback("ga4py.gain.core.get_shape", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_7); /* "ga4py/gain/core.pyx":40 * return thing.shape # an ndarray * except AttributeError: * return (len(thing),) # a flatiter # <<<<<<<<<<<<<< * cpdef get_dtype(thing): * try: */ __Pyx_XDECREF(__pyx_r); __pyx_t_8 = PyObject_Length(__pyx_v_thing); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __pyx_t_9 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __Pyx_GIVEREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_r = ((PyObject *)__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L6_except_return; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L4_exception_handled; } __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L1_error; __pyx_L6_except_return:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L0; __pyx_L4_exception_handled:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); __pyx_L10_try_end:; } __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("ga4py.gain.core.get_shape", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_15get_shape(PyObject *__pyx_self, PyObject *__pyx_v_thing); /*proto*/ static PyObject *__pyx_pw_5ga4py_4gain_4core_15get_shape(PyObject *__pyx_self, PyObject *__pyx_v_thing) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_shape (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_14get_shape(__pyx_self, ((PyObject *)__pyx_v_thing)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":36 * cpdef bint is_array(thing): * return isinstance(thing, (ndarray,flatiter,np.ndarray,np.flatiter)) * cpdef get_shape(thing): # <<<<<<<<<<<<<< * try: * return thing.shape # an ndarray */ static PyObject *__pyx_pf_5ga4py_4gain_4core_14get_shape(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thing) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_shape", 0); __Pyx_TraceCall("get_shape", __pyx_f[0], 36); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __pyx_f_5ga4py_4gain_4core_get_shape(__pyx_v_thing, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.get_shape", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":41 * except AttributeError: * return (len(thing),) # a flatiter * cpdef get_dtype(thing): # <<<<<<<<<<<<<< * try: * return thing.dtype # an ndarray */ static PyObject *__pyx_pw_5ga4py_4gain_4core_17get_dtype(PyObject *__pyx_self, PyObject *__pyx_v_thing); /*proto*/ static PyObject *__pyx_f_5ga4py_4gain_4core_get_dtype(PyObject *__pyx_v_thing, CYTHON_UNUSED int __pyx_skip_dispatch) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_dtype", 0); __Pyx_TraceCall("get_dtype", __pyx_f[0], 41); /* "ga4py/gain/core.pyx":42 * return (len(thing),) # a flatiter * cpdef get_dtype(thing): * try: # <<<<<<<<<<<<<< * return thing.dtype # an ndarray * except AttributeError: */ { __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { /* "ga4py/gain/core.pyx":43 * cpdef get_dtype(thing): * try: * return thing.dtype # an ndarray # <<<<<<<<<<<<<< * except AttributeError: * return thing.base.dtype # a flatiter */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_thing, __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L7_try_return; } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L10_try_end; __pyx_L7_try_return:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L0; __pyx_L3_error:; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":44 * try: * return thing.dtype # an ndarray * except AttributeError: # <<<<<<<<<<<<<< * return thing.base.dtype # a flatiter * */ __pyx_t_5 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError); if (__pyx_t_5) { __Pyx_AddTraceback("ga4py.gain.core.get_dtype", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_7); /* "ga4py/gain/core.pyx":45 * return thing.dtype # an ndarray * except AttributeError: * return thing.base.dtype # a flatiter # <<<<<<<<<<<<<< * * cpdef list listify(thing): */ __Pyx_XDECREF(__pyx_r); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_thing, __pyx_n_s__base); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__dtype); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_r = __pyx_t_9; __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L6_except_return; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L4_exception_handled; } __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L1_error; __pyx_L6_except_return:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L0; __pyx_L4_exception_handled:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); __pyx_L10_try_end:; } __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("ga4py.gain.core.get_dtype", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_17get_dtype(PyObject *__pyx_self, PyObject *__pyx_v_thing); /*proto*/ static PyObject *__pyx_pw_5ga4py_4gain_4core_17get_dtype(PyObject *__pyx_self, PyObject *__pyx_v_thing) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_dtype (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_16get_dtype(__pyx_self, ((PyObject *)__pyx_v_thing)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":41 * except AttributeError: * return (len(thing),) # a flatiter * cpdef get_dtype(thing): # <<<<<<<<<<<<<< * try: * return thing.dtype # an ndarray */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16get_dtype(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thing) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_dtype", 0); __Pyx_TraceCall("get_dtype", __pyx_f[0], 41); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __pyx_f_5ga4py_4gain_4core_get_dtype(__pyx_v_thing, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.get_dtype", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":47 * return thing.base.dtype # a flatiter * * cpdef list listify(thing): # <<<<<<<<<<<<<< * try: * return list(thing) */ static PyObject *__pyx_pw_5ga4py_4gain_4core_19listify(PyObject *__pyx_self, PyObject *__pyx_v_thing); /*proto*/ static PyObject *__pyx_f_5ga4py_4gain_4core_listify(PyObject *__pyx_v_thing, CYTHON_UNUSED int __pyx_skip_dispatch) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("listify", 0); __Pyx_TraceCall("listify", __pyx_f[0], 47); /* "ga4py/gain/core.pyx":48 * * cpdef list listify(thing): * try: # <<<<<<<<<<<<<< * return list(thing) * except: */ { __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { /* "ga4py/gain/core.pyx":49 * cpdef list listify(thing): * try: * return list(thing) # <<<<<<<<<<<<<< * except: * return [thing] */ __Pyx_XDECREF(((PyObject *)__pyx_r)); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_thing); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_thing); __Pyx_GIVEREF(__pyx_v_thing); __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_r = ((PyObject*)__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L7_try_return; } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L10_try_end; __pyx_L7_try_return:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L0; __pyx_L3_error:; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":50 * try: * return list(thing) * except: # <<<<<<<<<<<<<< * return [thing] * */ /*except:*/ { __Pyx_AddTraceback("ga4py.gain.core.listify", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_4); __Pyx_GOTREF(__pyx_t_6); /* "ga4py/gain/core.pyx":51 * return list(thing) * except: * return [thing] # <<<<<<<<<<<<<< * * cpdef tuple tuplify(thing): */ __Pyx_XDECREF(((PyObject *)__pyx_r)); __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_thing); PyList_SET_ITEM(__pyx_t_7, 0, __pyx_v_thing); __Pyx_GIVEREF(__pyx_v_thing); __pyx_r = ((PyObject*)__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L6_except_return; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L4_exception_handled; } __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L1_error; __pyx_L6_except_return:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L0; __pyx_L4_exception_handled:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); __pyx_L10_try_end:; } __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("ga4py.gain.core.listify", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_19listify(PyObject *__pyx_self, PyObject *__pyx_v_thing); /*proto*/ static PyObject *__pyx_pw_5ga4py_4gain_4core_19listify(PyObject *__pyx_self, PyObject *__pyx_v_thing) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("listify (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_18listify(__pyx_self, ((PyObject *)__pyx_v_thing)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":47 * return thing.base.dtype # a flatiter * * cpdef list listify(thing): # <<<<<<<<<<<<<< * try: * return list(thing) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_18listify(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thing) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("listify", 0); __Pyx_TraceCall("listify", __pyx_f[0], 47); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_4gain_4core_listify(__pyx_v_thing, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.listify", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":53 * return [thing] * * cpdef tuple tuplify(thing): # <<<<<<<<<<<<<< * try: * return tuple(thing) */ static PyObject *__pyx_pw_5ga4py_4gain_4core_21tuplify(PyObject *__pyx_self, PyObject *__pyx_v_thing); /*proto*/ static PyObject *__pyx_f_5ga4py_4gain_4core_tuplify(PyObject *__pyx_v_thing, CYTHON_UNUSED int __pyx_skip_dispatch) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("tuplify", 0); __Pyx_TraceCall("tuplify", __pyx_f[0], 53); /* "ga4py/gain/core.pyx":54 * * cpdef tuple tuplify(thing): * try: # <<<<<<<<<<<<<< * return tuple(thing) * except: */ { __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { /* "ga4py/gain/core.pyx":55 * cpdef tuple tuplify(thing): * try: * return tuple(thing) # <<<<<<<<<<<<<< * except: * return (thing,) */ __Pyx_XDECREF(((PyObject *)__pyx_r)); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_thing); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_thing); __Pyx_GIVEREF(__pyx_v_thing); __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)(&PyTuple_Type))), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_r = ((PyObject*)__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L7_try_return; } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L10_try_end; __pyx_L7_try_return:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L0; __pyx_L3_error:; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":56 * try: * return tuple(thing) * except: # <<<<<<<<<<<<<< * return (thing,) * */ /*except:*/ { __Pyx_AddTraceback("ga4py.gain.core.tuplify", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_4); __Pyx_GOTREF(__pyx_t_6); /* "ga4py/gain/core.pyx":57 * return tuple(thing) * except: * return (thing,) # <<<<<<<<<<<<<< * * gatypes = { */ __Pyx_XDECREF(((PyObject *)__pyx_r)); __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_thing); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_thing); __Pyx_GIVEREF(__pyx_v_thing); __pyx_r = ((PyObject*)__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L6_except_return; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L4_exception_handled; } __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L1_error; __pyx_L6_except_return:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L0; __pyx_L4_exception_handled:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); __pyx_L10_try_end:; } __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("ga4py.gain.core.tuplify", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_21tuplify(PyObject *__pyx_self, PyObject *__pyx_v_thing); /*proto*/ static PyObject *__pyx_pw_5ga4py_4gain_4core_21tuplify(PyObject *__pyx_self, PyObject *__pyx_v_thing) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("tuplify (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_20tuplify(__pyx_self, ((PyObject *)__pyx_v_thing)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":53 * return [thing] * * cpdef tuple tuplify(thing): # <<<<<<<<<<<<<< * try: * return tuple(thing) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_20tuplify(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thing) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("tuplify", 0); __Pyx_TraceCall("tuplify", __pyx_f[0], 53); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_4gain_4core_tuplify(__pyx_v_thing, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.tuplify", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":77 * * cdef bint _mask_sync = False * cpdef inline mask_sync(): # <<<<<<<<<<<<<< * global _mask_sync * _mask_sync = True */ static PyObject *__pyx_pw_5ga4py_4gain_4core_23mask_sync(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static CYTHON_INLINE PyObject *__pyx_f_5ga4py_4gain_4core_mask_sync(CYTHON_UNUSED int __pyx_skip_dispatch) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("mask_sync", 0); __Pyx_TraceCall("mask_sync", __pyx_f[0], 77); /* "ga4py/gain/core.pyx":79 * cpdef inline mask_sync(): * global _mask_sync * _mask_sync = True # <<<<<<<<<<<<<< * * cpdef inline sync(): */ __pyx_v_5ga4py_4gain_4core__mask_sync = 1; __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_23mask_sync(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_pw_5ga4py_4gain_4core_23mask_sync(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mask_sync (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_22mask_sync(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":77 * * cdef bint _mask_sync = False * cpdef inline mask_sync(): # <<<<<<<<<<<<<< * global _mask_sync * _mask_sync = True */ static PyObject *__pyx_pf_5ga4py_4gain_4core_22mask_sync(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("mask_sync", 0); __Pyx_TraceCall("mask_sync", __pyx_f[0], 77); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __pyx_f_5ga4py_4gain_4core_mask_sync(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.mask_sync", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":81 * _mask_sync = True * * cpdef inline sync(): # <<<<<<<<<<<<<< * #print "syncing over group %s" % ga.pgroup_get_default() * #ga.pgroup_sync(ga.pgroup_get_default()) */ static PyObject *__pyx_pw_5ga4py_4gain_4core_25sync(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static CYTHON_INLINE PyObject *__pyx_f_5ga4py_4gain_4core_sync(CYTHON_UNUSED int __pyx_skip_dispatch) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("sync", 0); __Pyx_TraceCall("sync", __pyx_f[0], 81); /* "ga4py/gain/core.pyx":84 * #print "syncing over group %s" % ga.pgroup_get_default() * #ga.pgroup_sync(ga.pgroup_get_default()) * if not _mask_sync: # <<<<<<<<<<<<<< * ga.sync() # internally it checks for the default group * */ __pyx_t_1 = ((!(__pyx_v_5ga4py_4gain_4core__mask_sync != 0)) != 0); if (__pyx_t_1) { /* "ga4py/gain/core.pyx":85 * #ga.pgroup_sync(ga.pgroup_get_default()) * if not _mask_sync: * ga.sync() # internally it checks for the default group # <<<<<<<<<<<<<< * * class flagsobj(object): */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__sync); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L3; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.sync", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_25sync(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_pw_5ga4py_4gain_4core_25sync(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("sync (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_24sync(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":81 * _mask_sync = True * * cpdef inline sync(): # <<<<<<<<<<<<<< * #print "syncing over group %s" % ga.pgroup_get_default() * #ga.pgroup_sync(ga.pgroup_get_default()) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_24sync(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("sync", 0); __Pyx_TraceCall("sync", __pyx_f[0], 81); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __pyx_f_5ga4py_4gain_4core_sync(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.sync", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_1__init__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flagsobj_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flagsobj_1__init__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_1__init__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flagsobj___init__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":88 * * class flagsobj(object): * def __init__(self): # <<<<<<<<<<<<<< * self._c = True * self._f = False */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__init__", 0); __Pyx_TraceCall("__init__", __pyx_f[0], 88); /* "ga4py/gain/core.pyx":89 * class flagsobj(object): * def __init__(self): * self._c = True # <<<<<<<<<<<<<< * self._f = False * self._o = True */ __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___c, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":90 * def __init__(self): * self._c = True * self._f = False # <<<<<<<<<<<<<< * self._o = True * self._w = True */ __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___f, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":91 * self._c = True * self._f = False * self._o = True # <<<<<<<<<<<<<< * self._w = True * self._a = True */ __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___o, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":92 * self._f = False * self._o = True * self._w = True # <<<<<<<<<<<<<< * self._a = True * self._u = False */ __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___w, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":93 * self._o = True * self._w = True * self._a = True # <<<<<<<<<<<<<< * self._u = False * def _get_c(self): */ __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___a, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":94 * self._w = True * self._a = True * self._u = False # <<<<<<<<<<<<<< * def _get_c(self): * return self._c */ __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___u, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.flagsobj.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_3_get_c(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flagsobj_3_get_c = {__Pyx_NAMESTR("_get_c"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flagsobj_3_get_c, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_3_get_c(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_c (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flagsobj_2_get_c(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":95 * self._a = True * self._u = False * def _get_c(self): # <<<<<<<<<<<<<< * return self._c * c_contiguous = property(_get_c) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj_2_get_c(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_c", 0); __Pyx_TraceCall("_get_c", __pyx_f[0], 95); /* "ga4py/gain/core.pyx":96 * self._u = False * def _get_c(self): * return self._c # <<<<<<<<<<<<<< * c_contiguous = property(_get_c) * def _get_f(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___c); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.flagsobj._get_c", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_5_get_f(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flagsobj_5_get_f = {__Pyx_NAMESTR("_get_f"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flagsobj_5_get_f, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_5_get_f(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_f (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flagsobj_4_get_f(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":98 * return self._c * c_contiguous = property(_get_c) * def _get_f(self): # <<<<<<<<<<<<<< * return self._f * f_contiguous = property(_get_f) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj_4_get_f(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_f", 0); __Pyx_TraceCall("_get_f", __pyx_f[0], 98); /* "ga4py/gain/core.pyx":99 * c_contiguous = property(_get_c) * def _get_f(self): * return self._f # <<<<<<<<<<<<<< * f_contiguous = property(_get_f) * def _get_o(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___f); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.flagsobj._get_f", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_7_get_o(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flagsobj_7_get_o = {__Pyx_NAMESTR("_get_o"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flagsobj_7_get_o, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_7_get_o(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_o (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flagsobj_6_get_o(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":101 * return self._f * f_contiguous = property(_get_f) * def _get_o(self): # <<<<<<<<<<<<<< * return self._o * owndata = property(_get_o) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj_6_get_o(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_o", 0); __Pyx_TraceCall("_get_o", __pyx_f[0], 101); /* "ga4py/gain/core.pyx":102 * f_contiguous = property(_get_f) * def _get_o(self): * return self._o # <<<<<<<<<<<<<< * owndata = property(_get_o) * def _get_w(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___o); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.flagsobj._get_o", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_9_get_w(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flagsobj_9_get_w = {__Pyx_NAMESTR("_get_w"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flagsobj_9_get_w, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_9_get_w(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_w (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flagsobj_8_get_w(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":104 * return self._o * owndata = property(_get_o) * def _get_w(self): # <<<<<<<<<<<<<< * return self._w * writeable = property(_get_w) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj_8_get_w(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_w", 0); __Pyx_TraceCall("_get_w", __pyx_f[0], 104); /* "ga4py/gain/core.pyx":105 * owndata = property(_get_o) * def _get_w(self): * return self._w # <<<<<<<<<<<<<< * writeable = property(_get_w) * def _get_a(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.flagsobj._get_w", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_11_get_a(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flagsobj_11_get_a = {__Pyx_NAMESTR("_get_a"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flagsobj_11_get_a, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_11_get_a(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_a (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flagsobj_10_get_a(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":107 * return self._w * writeable = property(_get_w) * def _get_a(self): # <<<<<<<<<<<<<< * return self._a * aligned = property(_get_a) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj_10_get_a(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_a", 0); __Pyx_TraceCall("_get_a", __pyx_f[0], 107); /* "ga4py/gain/core.pyx":108 * writeable = property(_get_w) * def _get_a(self): * return self._a # <<<<<<<<<<<<<< * aligned = property(_get_a) * def _get_u(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___a); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.flagsobj._get_a", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_13_get_u(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flagsobj_13_get_u = {__Pyx_NAMESTR("_get_u"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flagsobj_13_get_u, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_13_get_u(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_u (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flagsobj_12_get_u(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":110 * return self._a * aligned = property(_get_a) * def _get_u(self): # <<<<<<<<<<<<<< * return self._u * updateifcopy = property(_get_u) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj_12_get_u(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_u", 0); __Pyx_TraceCall("_get_u", __pyx_f[0], 110); /* "ga4py/gain/core.pyx":111 * aligned = property(_get_a) * def _get_u(self): * return self._u # <<<<<<<<<<<<<< * updateifcopy = property(_get_u) * def __getitem__(self, item): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___u); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.flagsobj._get_u", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_15__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flagsobj_15__getitem__ = {__Pyx_NAMESTR("__getitem__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flagsobj_15__getitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_15__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_item = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__item,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__item)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__getitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_item = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.flagsobj.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flagsobj_14__getitem__(__pyx_self, __pyx_v_self, __pyx_v_item); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":113 * return self._u * updateifcopy = property(_get_u) * def __getitem__(self, item): # <<<<<<<<<<<<<< * if isinstance(item, str): * if item == "C" or item == "C_CONTIGUOUS": */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj_14__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_item) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__getitem__", 0); __Pyx_TraceCall("__getitem__", __pyx_f[0], 113); /* "ga4py/gain/core.pyx":114 * updateifcopy = property(_get_u) * def __getitem__(self, item): * if isinstance(item, str): # <<<<<<<<<<<<<< * if item == "C" or item == "C_CONTIGUOUS": * return self._c */ __pyx_t_1 = PyString_Check(__pyx_v_item); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":115 * def __getitem__(self, item): * if isinstance(item, str): * if item == "C" or item == "C_CONTIGUOUS": # <<<<<<<<<<<<<< * return self._c * if item == "F" or item == "F_CONTIGUOUS": */ __pyx_t_3 = PyObject_RichCompare(__pyx_v_item, ((PyObject *)__pyx_n_s__C), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_2) { __pyx_t_3 = PyObject_RichCompare(__pyx_v_item, ((PyObject *)__pyx_n_s__C_CONTIGUOUS), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = __pyx_t_1; } else { __pyx_t_4 = __pyx_t_2; } if (__pyx_t_4) { /* "ga4py/gain/core.pyx":116 * if isinstance(item, str): * if item == "C" or item == "C_CONTIGUOUS": * return self._c # <<<<<<<<<<<<<< * if item == "F" or item == "F_CONTIGUOUS": * return self._f */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___c); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/core.pyx":117 * if item == "C" or item == "C_CONTIGUOUS": * return self._c * if item == "F" or item == "F_CONTIGUOUS": # <<<<<<<<<<<<<< * return self._f * if item == "O" or item == "OWNDATA": */ __pyx_t_3 = PyObject_RichCompare(__pyx_v_item, ((PyObject *)__pyx_n_s__F), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_4) { __pyx_t_3 = PyObject_RichCompare(__pyx_v_item, ((PyObject *)__pyx_n_s__F_CONTIGUOUS), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __pyx_t_2; } else { __pyx_t_1 = __pyx_t_4; } if (__pyx_t_1) { /* "ga4py/gain/core.pyx":118 * return self._c * if item == "F" or item == "F_CONTIGUOUS": * return self._f # <<<<<<<<<<<<<< * if item == "O" or item == "OWNDATA": * return self._o */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___f); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; goto __pyx_L5; } __pyx_L5:; /* "ga4py/gain/core.pyx":119 * if item == "F" or item == "F_CONTIGUOUS": * return self._f * if item == "O" or item == "OWNDATA": # <<<<<<<<<<<<<< * return self._o * if item == "W" or item == "WRITEABLE": */ __pyx_t_3 = PyObject_RichCompare(__pyx_v_item, ((PyObject *)__pyx_n_s__O), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_1) { __pyx_t_3 = PyObject_RichCompare(__pyx_v_item, ((PyObject *)__pyx_n_s__OWNDATA), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = __pyx_t_4; } else { __pyx_t_2 = __pyx_t_1; } if (__pyx_t_2) { /* "ga4py/gain/core.pyx":120 * return self._f * if item == "O" or item == "OWNDATA": * return self._o # <<<<<<<<<<<<<< * if item == "W" or item == "WRITEABLE": * return self._w */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___o); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; goto __pyx_L6; } __pyx_L6:; /* "ga4py/gain/core.pyx":121 * if item == "O" or item == "OWNDATA": * return self._o * if item == "W" or item == "WRITEABLE": # <<<<<<<<<<<<<< * return self._w * if item == "A" or item == "ALIGNED": */ __pyx_t_3 = PyObject_RichCompare(__pyx_v_item, ((PyObject *)__pyx_n_s__W), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_2) { __pyx_t_3 = PyObject_RichCompare(__pyx_v_item, ((PyObject *)__pyx_n_s__WRITEABLE), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = __pyx_t_1; } else { __pyx_t_4 = __pyx_t_2; } if (__pyx_t_4) { /* "ga4py/gain/core.pyx":122 * return self._o * if item == "W" or item == "WRITEABLE": * return self._w # <<<<<<<<<<<<<< * if item == "A" or item == "ALIGNED": * return self._a */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___w); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; goto __pyx_L7; } __pyx_L7:; /* "ga4py/gain/core.pyx":123 * if item == "W" or item == "WRITEABLE": * return self._w * if item == "A" or item == "ALIGNED": # <<<<<<<<<<<<<< * return self._a * if item == "U" or item == "UPDATEIFCOPY": */ __pyx_t_3 = PyObject_RichCompare(__pyx_v_item, ((PyObject *)__pyx_n_s__A), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_4) { __pyx_t_3 = PyObject_RichCompare(__pyx_v_item, ((PyObject *)__pyx_n_s__ALIGNED), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = __pyx_t_2; } else { __pyx_t_1 = __pyx_t_4; } if (__pyx_t_1) { /* "ga4py/gain/core.pyx":124 * return self._w * if item == "A" or item == "ALIGNED": * return self._a # <<<<<<<<<<<<<< * if item == "U" or item == "UPDATEIFCOPY": * return self._u */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___a); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; goto __pyx_L8; } __pyx_L8:; /* "ga4py/gain/core.pyx":125 * if item == "A" or item == "ALIGNED": * return self._a * if item == "U" or item == "UPDATEIFCOPY": # <<<<<<<<<<<<<< * return self._u * raise KeyError, "Unknown flag" */ __pyx_t_3 = PyObject_RichCompare(__pyx_v_item, ((PyObject *)__pyx_n_s__U), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_1) { __pyx_t_3 = PyObject_RichCompare(__pyx_v_item, ((PyObject *)__pyx_n_s__UPDATEIFCOPY), Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = __pyx_t_4; } else { __pyx_t_2 = __pyx_t_1; } if (__pyx_t_2) { /* "ga4py/gain/core.pyx":126 * return self._a * if item == "U" or item == "UPDATEIFCOPY": * return self._u # <<<<<<<<<<<<<< * raise KeyError, "Unknown flag" * def __repr__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___u); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; goto __pyx_L9; } __pyx_L9:; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":127 * if item == "U" or item == "UPDATEIFCOPY": * return self._u * raise KeyError, "Unknown flag" # <<<<<<<<<<<<<< * def __repr__(self): * return """ C_CONTIGUOUS : %s */ __Pyx_Raise(__pyx_builtin_KeyError, ((PyObject *)__pyx_kp_s_1), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.flagsobj.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_17__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flagsobj_17__repr__ = {__Pyx_NAMESTR("__repr__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flagsobj_17__repr__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flagsobj_17__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flagsobj_16__repr__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":128 * return self._u * raise KeyError, "Unknown flag" * def __repr__(self): # <<<<<<<<<<<<<< * return """ C_CONTIGUOUS : %s * F_CONTIGUOUS : %s */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flagsobj_16__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__repr__", 0); __Pyx_TraceCall("__repr__", __pyx_f[0], 128); /* "ga4py/gain/core.pyx":129 * raise KeyError, "Unknown flag" * def __repr__(self): * return """ C_CONTIGUOUS : %s # <<<<<<<<<<<<<< * F_CONTIGUOUS : %s * OWNDATA : %s */ __Pyx_XDECREF(__pyx_r); /* "ga4py/gain/core.pyx":134 * WRITEABLE : %s * ALIGNED : %s * UPDATEIFCOPY : %s""" % (self._c, self._f, self._o, # <<<<<<<<<<<<<< * self._w, self._a, self._u) * */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___c); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___f); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___o); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); /* "ga4py/gain/core.pyx":135 * ALIGNED : %s * UPDATEIFCOPY : %s""" % (self._c, self._f, self._o, * self._w, self._a, self._u) # <<<<<<<<<<<<<< * * class GlobalArrayCache(object): */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___w); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___a); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___u); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = PyTuple_New(6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 5, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_6 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_2), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_6)); __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __pyx_r = ((PyObject *)__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("ga4py.gain.core.flagsobj.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_level = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__level,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)((PyObject *)__pyx_int_3)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__level); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_level = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache___init__(__pyx_self, __pyx_v_self, __pyx_v_level); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":147 * * """ * def __init__(self, level=3): # <<<<<<<<<<<<<< * self.cache = {} * self.level = level */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_level) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__init__", 0); __Pyx_TraceCall("__init__", __pyx_f[0], 147); /* "ga4py/gain/core.pyx":148 * """ * def __init__(self, level=3): * self.cache = {} # <<<<<<<<<<<<<< * self.level = level * */ __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__cache, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":149 * def __init__(self, level=3): * self.cache = {} * self.level = level # <<<<<<<<<<<<<< * * def __del__(self): */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__level, __pyx_v_level) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_3__del__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_3__del__ = {__Pyx_NAMESTR("__del__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_3__del__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_3__del__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_2__del__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":151 * self.level = level * * def __del__(self): # <<<<<<<<<<<<<< * for value in self.cache.values(): * for g_a in value: */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_2__del__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_value = NULL; PyObject *__pyx_v_g_a = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; Py_ssize_t __pyx_t_3; PyObject *(*__pyx_t_4)(PyObject *); Py_ssize_t __pyx_t_5; PyObject *(*__pyx_t_6)(PyObject *); PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__del__", 0); __Pyx_TraceCall("__del__", __pyx_f[0], 151); /* "ga4py/gain/core.pyx":152 * * def __del__(self): * for value in self.cache.values(): # <<<<<<<<<<<<<< * for g_a in value: * ga.destroy(g_a) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__cache); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__values); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) { if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) { if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_1 = __pyx_t_4(__pyx_t_2); if (unlikely(!__pyx_t_1)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_1); } __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":153 * def __del__(self): * for value in self.cache.values(): * for g_a in value: # <<<<<<<<<<<<<< * ga.destroy(g_a) * */ if (PyList_CheckExact(__pyx_v_value) || PyTuple_CheckExact(__pyx_v_value)) { __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0; __pyx_t_6 = NULL; } else { __pyx_t_5 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = Py_TYPE(__pyx_t_1)->tp_iternext; } for (;;) { if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_1)) { if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_7 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_1)) { if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_7 = __pyx_t_6(__pyx_t_1); if (unlikely(!__pyx_t_7)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_7); } __Pyx_XDECREF_SET(__pyx_v_g_a, __pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/core.pyx":154 * for value in self.cache.values(): * for g_a in value: * ga.destroy(g_a) # <<<<<<<<<<<<<< * * def __contains__(self, item): */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__destroy); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_g_a); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_g_a); __Pyx_GIVEREF(__pyx_v_g_a); __pyx_t_9 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_value); __Pyx_XDECREF(__pyx_v_g_a); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_5__contains__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_5__contains__ = {__Pyx_NAMESTR("__contains__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_5__contains__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_5__contains__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_item = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__contains__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__item,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__item)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__contains__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__contains__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_item = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__contains__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.__contains__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_4__contains__(__pyx_self, __pyx_v_self, __pyx_v_item); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":156 * ga.destroy(g_a) * * def __contains__(self, item): # <<<<<<<<<<<<<< * return (item in self.cache and self.cache[item]) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_4__contains__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_item) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__contains__", 0); __Pyx_TraceCall("__contains__", __pyx_f[0], 156); /* "ga4py/gain/core.pyx":157 * * def __contains__(self, item): * return (item in self.cache and self.cache[item]) # <<<<<<<<<<<<<< * * def __getitem__(self, item): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__cache); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__Pyx_PySequence_Contains(__pyx_v_item, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_2) { __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__cache); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_v_item); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __pyx_t_4; __pyx_t_4 = 0; } else { __pyx_t_3 = __pyx_t_1; __pyx_t_1 = 0; } __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.__contains__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_7__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_7__getitem__ = {__Pyx_NAMESTR("__getitem__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_7__getitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_7__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_item = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__item,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__item)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__getitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_item = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_6__getitem__(__pyx_self, __pyx_v_self, __pyx_v_item); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":159 * return (item in self.cache and self.cache[item]) * * def __getitem__(self, item): # <<<<<<<<<<<<<< * if item in self.cache and self.cache[item]: * return self.cache[item].pop() */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_6__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_item) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__getitem__", 0); __Pyx_TraceCall("__getitem__", __pyx_f[0], 159); /* "ga4py/gain/core.pyx":160 * * def __getitem__(self, item): * if item in self.cache and self.cache[item]: # <<<<<<<<<<<<<< * return self.cache[item].pop() * raise KeyError, item */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__cache); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__Pyx_PySequence_Contains(__pyx_v_item, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__cache); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = __pyx_t_4; } else { __pyx_t_5 = __pyx_t_2; } if (__pyx_t_5) { /* "ga4py/gain/core.pyx":161 * def __getitem__(self, item): * if item in self.cache and self.cache[item]: * return self.cache[item].pop() # <<<<<<<<<<<<<< * raise KeyError, item * */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__cache); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyObject_GetItem(__pyx_t_3, __pyx_v_item); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_Pop(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":162 * if item in self.cache and self.cache[item]: * return self.cache[item].pop() * raise KeyError, item # <<<<<<<<<<<<<< * * def __setitem__(self, item, value): */ __Pyx_Raise(__pyx_builtin_KeyError, __pyx_v_item, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_9__setitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_9__setitem__ = {__Pyx_NAMESTR("__setitem__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_9__setitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_9__setitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_item = 0; PyObject *__pyx_v_value = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__item,&__pyx_n_s__value,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__item)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__setitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_self = values[0]; __pyx_v_item = values[1]; __pyx_v_value = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_8__setitem__(__pyx_self, __pyx_v_self, __pyx_v_item, __pyx_v_value); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":164 * raise KeyError, item * * def __setitem__(self, item, value): # <<<<<<<<<<<<<< * if item in self.cache: * self.cache[item].append(value) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_8__setitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__setitem__", 0); __Pyx_TraceCall("__setitem__", __pyx_f[0], 164); /* "ga4py/gain/core.pyx":165 * * def __setitem__(self, item, value): * if item in self.cache: # <<<<<<<<<<<<<< * self.cache[item].append(value) * else: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__cache); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__Pyx_PySequence_Contains(__pyx_v_item, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":166 * def __setitem__(self, item, value): * if item in self.cache: * self.cache[item].append(value) # <<<<<<<<<<<<<< * else: * self.cache[item] = [value] */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__cache); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_Append(__pyx_t_4, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":168 * self.cache[item].append(value) * else: * self.cache[item] = [value] # <<<<<<<<<<<<<< * * def count(self, item): */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_value); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__cache); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_4, __pyx_v_item, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_11count(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_11count = {__Pyx_NAMESTR("count"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_11count, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_11count(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_item = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("count (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__item,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__item)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("count", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "count") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_item = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("count", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.count", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_10count(__pyx_self, __pyx_v_self, __pyx_v_item); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":170 * self.cache[item] = [value] * * def count(self, item): # <<<<<<<<<<<<<< * if item in self.cache: * return len(self.cache[item]) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_10count(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_item) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; Py_ssize_t __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("count", 0); __Pyx_TraceCall("count", __pyx_f[0], 170); /* "ga4py/gain/core.pyx":171 * * def count(self, item): * if item in self.cache: # <<<<<<<<<<<<<< * return len(self.cache[item]) * return 0 */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__cache); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__Pyx_PySequence_Contains(__pyx_v_item, __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":172 * def count(self, item): * if item in self.cache: * return len(self.cache[item]) # <<<<<<<<<<<<<< * return 0 * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__cache); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":173 * if item in self.cache: * return len(self.cache[item]) * return 0 # <<<<<<<<<<<<<< * * def empty(self, item): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_int_0); __pyx_r = __pyx_int_0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.count", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_13empty(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_13empty = {__Pyx_NAMESTR("empty"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_13empty, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_13empty(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_item = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("empty (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__item,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__item)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("empty", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "empty") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_item = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("empty", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.empty", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_12empty(__pyx_self, __pyx_v_self, __pyx_v_item); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":175 * return 0 * * def empty(self, item): # <<<<<<<<<<<<<< * return self.count(item) == 0 * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_12empty(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_item) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("empty", 0); __Pyx_TraceCall("empty", __pyx_f[0], 175); /* "ga4py/gain/core.pyx":176 * * def empty(self, item): * return self.count(item) == 0 # <<<<<<<<<<<<<< * * def full(self, item): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_item); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_item); __Pyx_GIVEREF(__pyx_v_item); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.empty", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_15full(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_15full = {__Pyx_NAMESTR("full"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_15full, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_15full(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_item = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("full (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__item,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__item)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("full", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "full") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_item = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("full", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.full", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_14full(__pyx_self, __pyx_v_self, __pyx_v_item); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":178 * return self.count(item) == 0 * * def full(self, item): # <<<<<<<<<<<<<< * return self.count(item) == self.level * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_14full(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_item) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("full", 0); __Pyx_TraceCall("full", __pyx_f[0], 178); /* "ga4py/gain/core.pyx":179 * * def full(self, item): * return self.count(item) == self.level # <<<<<<<<<<<<<< * * def pop(self, item): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_item); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_item); __Pyx_GIVEREF(__pyx_v_item); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__level); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.full", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_17pop(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_17pop = {__Pyx_NAMESTR("pop"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_17pop, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_17pop(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_item = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pop (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__item,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__item)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pop", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pop") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_item = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pop", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.pop", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_16pop(__pyx_self, __pyx_v_self, __pyx_v_item); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":181 * return self.count(item) == self.level * * def pop(self, item): # <<<<<<<<<<<<<< * return self[item] * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_16pop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_item) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("pop", 0); __Pyx_TraceCall("pop", __pyx_f[0], 181); /* "ga4py/gain/core.pyx":182 * * def pop(self, item): * return self[item] # <<<<<<<<<<<<<< * * def size(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyObject_GetItem(__pyx_v_self, __pyx_v_item); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.GlobalArrayCache.pop", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_19size(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_16GlobalArrayCache_18size[] = "Return the size of the cache in bytes."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_19size = {__Pyx_NAMESTR("size"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_19size, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_16GlobalArrayCache_18size)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_16GlobalArrayCache_19size(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("size (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_18size(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":184 * return self[item] * * def size(self): # <<<<<<<<<<<<<< * """Return the size of the cache in bytes.""" * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_16GlobalArrayCache_18size(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("size", 0); __Pyx_TraceCall("size", __pyx_f[0], 184); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":337 * * """ * def __new__(cls, shape, dtype=float, buffer=None, offset=0, # <<<<<<<<<<<<<< * strides=None, order=None, base=None): * if base is None and not should_distribute(shape): */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_316__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__defaults__", 0); __Pyx_TraceCall("__defaults__", __pyx_f[0], 337); __Pyx_XDECREF(__pyx_r); /* "ga4py/gain/core.pyx":338 * """ * def __new__(cls, shape, dtype=float, buffer=None, offset=0, * strides=None, order=None, base=None): # <<<<<<<<<<<<<< * if base is None and not should_distribute(shape): * return np.ndarray(shape, dtype, buffer, offset, strides, order) */ __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_dtype); PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_dtype); __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_dtype); __Pyx_INCREF(((PyObject *)Py_None)); PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)Py_None)); __Pyx_GIVEREF(((PyObject *)Py_None)); __Pyx_INCREF(((PyObject *)__pyx_int_0)); PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_int_0)); __Pyx_GIVEREF(((PyObject *)__pyx_int_0)); __Pyx_INCREF(((PyObject *)Py_None)); PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)Py_None)); __Pyx_GIVEREF(((PyObject *)Py_None)); __Pyx_INCREF(((PyObject *)Py_None)); PyTuple_SET_ITEM(__pyx_t_1, 4, ((PyObject *)Py_None)); __Pyx_GIVEREF(((PyObject *)Py_None)); __Pyx_INCREF(((PyObject *)Py_None)); PyTuple_SET_ITEM(__pyx_t_1, 5, ((PyObject *)Py_None)); __Pyx_GIVEREF(((PyObject *)Py_None)); /* "ga4py/gain/core.pyx":337 * * """ * def __new__(cls, shape, dtype=float, buffer=None, offset=0, # <<<<<<<<<<<<<< * strides=None, order=None, base=None): * if base is None and not should_distribute(shape): */ __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_1)); __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); __Pyx_INCREF(Py_None); PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); __Pyx_GIVEREF(Py_None); __pyx_t_1 = 0; __pyx_r = ((PyObject *)__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_1__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_1__new__ = {__Pyx_NAMESTR("__new__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_1__new__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_1__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_cls = 0; PyObject *__pyx_v_shape = 0; PyObject *__pyx_v_dtype = 0; PyObject *__pyx_v_buffer = 0; PyObject *__pyx_v_offset = 0; PyObject *__pyx_v_strides = 0; PyObject *__pyx_v_order = 0; PyObject *__pyx_v_base = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__new__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__cls,&__pyx_n_s__shape,&__pyx_n_s__dtype,&__pyx_n_s__buffer,&__pyx_n_s__offset,&__pyx_n_s__strides,&__pyx_n_s__order,&__pyx_n_s__base,0}; PyObject* values[8] = {0,0,0,0,0,0,0,0}; __pyx_defaults *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self); values[2] = __pyx_dynamic_args->__pyx_arg_dtype; values[3] = ((PyObject *)((PyObject *)Py_None)); values[4] = ((PyObject *)((PyObject *)__pyx_int_0)); values[5] = ((PyObject *)((PyObject *)Py_None)); values[6] = ((PyObject *)((PyObject *)Py_None)); values[7] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__cls)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__shape)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__new__", 0, 2, 8, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__offset); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__strides); if (value) { values[5] = value; kw_args--; } } case 6: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[6] = value; kw_args--; } } case 7: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__base); if (value) { values[7] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__new__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_cls = values[0]; __pyx_v_shape = values[1]; __pyx_v_dtype = values[2]; __pyx_v_buffer = values[3]; __pyx_v_offset = values[4]; __pyx_v_strides = values[5]; __pyx_v_order = values[6]; __pyx_v_base = values[7]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__new__", 0, 2, 8, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray___new__(__pyx_self, __pyx_v_cls, __pyx_v_shape, __pyx_v_dtype, __pyx_v_buffer, __pyx_v_offset, __pyx_v_strides, __pyx_v_order, __pyx_v_base); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray___new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_shape, PyObject *__pyx_v_dtype, PyObject *__pyx_v_buffer, PyObject *__pyx_v_offset, PyObject *__pyx_v_strides, PyObject *__pyx_v_order, PyObject *__pyx_v_base) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__new__", 0); __Pyx_TraceCall("__new__", __pyx_f[0], 337); /* "ga4py/gain/core.pyx":339 * def __new__(cls, shape, dtype=float, buffer=None, offset=0, * strides=None, order=None, base=None): * if base is None and not should_distribute(shape): # <<<<<<<<<<<<<< * return np.ndarray(shape, dtype, buffer, offset, strides, order) * return super(ndarray, cls).__new__(cls) */ __pyx_t_1 = (__pyx_v_base == Py_None); if ((__pyx_t_1 != 0)) { __pyx_t_2 = ((!(__pyx_f_5ga4py_4gain_4core_should_distribute(__pyx_v_shape, 0) != 0)) != 0); __pyx_t_3 = __pyx_t_2; } else { __pyx_t_3 = (__pyx_t_1 != 0); } if (__pyx_t_3) { /* "ga4py/gain/core.pyx":340 * strides=None, order=None, base=None): * if base is None and not should_distribute(shape): * return np.ndarray(shape, dtype, buffer, offset, strides, order) # <<<<<<<<<<<<<< * return super(ndarray, cls).__new__(cls) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = PyTuple_New(6); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __Pyx_INCREF(__pyx_v_buffer); PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_buffer); __Pyx_GIVEREF(__pyx_v_buffer); __Pyx_INCREF(__pyx_v_offset); PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_offset); __Pyx_GIVEREF(__pyx_v_offset); __Pyx_INCREF(__pyx_v_strides); PyTuple_SET_ITEM(__pyx_t_4, 4, __pyx_v_strides); __Pyx_GIVEREF(__pyx_v_strides); __Pyx_INCREF(__pyx_v_order); PyTuple_SET_ITEM(__pyx_t_4, 5, __pyx_v_order); __Pyx_GIVEREF(__pyx_v_order); __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray)), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":341 * if base is None and not should_distribute(shape): * return np.ndarray(shape, dtype, buffer, offset, strides, order) * return super(ndarray, cls).__new__(cls) # <<<<<<<<<<<<<< * * def __init__(self, shape, dtype=float, buffer=None, offset=0, */ __Pyx_XDECREF(__pyx_r); __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_cls); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_cls); __Pyx_GIVEREF(__pyx_v_cls); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_builtin_super, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s____new__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_cls); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_cls); __Pyx_GIVEREF(__pyx_v_cls); __pyx_t_6 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":343 * return super(ndarray, cls).__new__(cls) * * def __init__(self, shape, dtype=float, buffer=None, offset=0, # <<<<<<<<<<<<<< * strides=None, order=None, base=None): * shape = tuplify(shape) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_318__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__defaults__", 0); __Pyx_TraceCall("__defaults__", __pyx_f[0], 343); __Pyx_XDECREF(__pyx_r); /* "ga4py/gain/core.pyx":344 * * def __init__(self, shape, dtype=float, buffer=None, offset=0, * strides=None, order=None, base=None): # <<<<<<<<<<<<<< * shape = tuplify(shape) * if order not in [None,'C','F']: */ __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_dtype); PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_dtype); __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_dtype); __Pyx_INCREF(((PyObject *)Py_None)); PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)Py_None)); __Pyx_GIVEREF(((PyObject *)Py_None)); __Pyx_INCREF(((PyObject *)__pyx_int_0)); PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_int_0)); __Pyx_GIVEREF(((PyObject *)__pyx_int_0)); __Pyx_INCREF(((PyObject *)Py_None)); PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)Py_None)); __Pyx_GIVEREF(((PyObject *)Py_None)); __Pyx_INCREF(((PyObject *)Py_None)); PyTuple_SET_ITEM(__pyx_t_1, 4, ((PyObject *)Py_None)); __Pyx_GIVEREF(((PyObject *)Py_None)); __Pyx_INCREF(((PyObject *)Py_None)); PyTuple_SET_ITEM(__pyx_t_1, 5, ((PyObject *)Py_None)); __Pyx_GIVEREF(((PyObject *)Py_None)); /* "ga4py/gain/core.pyx":343 * return super(ndarray, cls).__new__(cls) * * def __init__(self, shape, dtype=float, buffer=None, offset=0, # <<<<<<<<<<<<<< * strides=None, order=None, base=None): * shape = tuplify(shape) */ __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_1)); __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); __Pyx_INCREF(Py_None); PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); __Pyx_GIVEREF(Py_None); __pyx_t_1 = 0; __pyx_r = ((PyObject *)__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_3__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_3__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_3__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_3__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_shape = 0; PyObject *__pyx_v_dtype = 0; PyObject *__pyx_v_buffer = 0; PyObject *__pyx_v_offset = 0; PyObject *__pyx_v_strides = 0; PyObject *__pyx_v_order = 0; PyObject *__pyx_v_base = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__shape,&__pyx_n_s__dtype,&__pyx_n_s__buffer,&__pyx_n_s__offset,&__pyx_n_s__strides,&__pyx_n_s__order,&__pyx_n_s__base,0}; PyObject* values[8] = {0,0,0,0,0,0,0,0}; __pyx_defaults1 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self); values[2] = __pyx_dynamic_args->__pyx_arg_dtype; values[3] = ((PyObject *)((PyObject *)Py_None)); values[4] = ((PyObject *)((PyObject *)__pyx_int_0)); values[5] = ((PyObject *)((PyObject *)Py_None)); values[6] = ((PyObject *)((PyObject *)Py_None)); values[7] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__shape)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 8, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__offset); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__strides); if (value) { values[5] = value; kw_args--; } } case 6: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[6] = value; kw_args--; } } case 7: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__base); if (value) { values[7] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_shape = values[1]; __pyx_v_dtype = values[2]; __pyx_v_buffer = values[3]; __pyx_v_offset = values[4]; __pyx_v_strides = values[5]; __pyx_v_order = values[6]; __pyx_v_base = values[7]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 8, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_2__init__(__pyx_self, __pyx_v_self, __pyx_v_shape, __pyx_v_dtype, __pyx_v_buffer, __pyx_v_offset, __pyx_v_strides, __pyx_v_order, __pyx_v_base); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_2__init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_shape, PyObject *__pyx_v_dtype, PyObject *__pyx_v_buffer, PyObject *__pyx_v_offset, PyObject *__pyx_v_strides, PyObject *__pyx_v_order, PyObject *__pyx_v_base) { PyObject *__pyx_v_dtype_ = NULL; PyObject *__pyx_v_gatype = NULL; PyObject *__pyx_v_local = NULL; PyObject *__pyx_v_a = NULL; PyObject *__pyx_v_size = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; Py_ssize_t __pyx_t_9; PyObject *(*__pyx_t_10)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__init__", 0); __Pyx_TraceCall("__init__", __pyx_f[0], 343); __Pyx_INCREF(__pyx_v_shape); __Pyx_INCREF(__pyx_v_order); /* "ga4py/gain/core.pyx":345 * def __init__(self, shape, dtype=float, buffer=None, offset=0, * strides=None, order=None, base=None): * shape = tuplify(shape) # <<<<<<<<<<<<<< * if order not in [None,'C','F']: * raise TypeError, "order not understood" */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_4gain_4core_tuplify(__pyx_v_shape, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_shape, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":346 * strides=None, order=None, base=None): * shape = tuplify(shape) * if order not in [None,'C','F']: # <<<<<<<<<<<<<< * raise TypeError, "order not understood" * if order is None: */ __Pyx_INCREF(__pyx_v_order); __pyx_t_1 = __pyx_v_order; __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (((int)__pyx_t_3)) { __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, ((PyObject *)__pyx_n_s__C), Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = ((int)__pyx_t_4); } else { __pyx_t_5 = ((int)__pyx_t_3); } if (__pyx_t_5) { __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, ((PyObject *)__pyx_n_s__F), Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = ((int)__pyx_t_3); } else { __pyx_t_4 = __pyx_t_5; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":347 * shape = tuplify(shape) * if order not in [None,'C','F']: * raise TypeError, "order not understood" # <<<<<<<<<<<<<< * if order is None: * order = 'C' */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_3), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":348 * if order not in [None,'C','F']: * raise TypeError, "order not understood" * if order is None: # <<<<<<<<<<<<<< * order = 'C' * if order is 'F': */ __pyx_t_5 = (__pyx_v_order == Py_None); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":349 * raise TypeError, "order not understood" * if order is None: * order = 'C' # <<<<<<<<<<<<<< * if order is 'F': * raise NotImplementedError, "Fortran order not supported" */ __Pyx_INCREF(((PyObject *)__pyx_n_s__C)); __Pyx_DECREF_SET(__pyx_v_order, ((PyObject *)__pyx_n_s__C)); goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/core.pyx":350 * if order is None: * order = 'C' * if order is 'F': # <<<<<<<<<<<<<< * raise NotImplementedError, "Fortran order not supported" * self._dtype = np.dtype(dtype) */ __pyx_t_4 = (__pyx_v_order == ((PyObject *)__pyx_n_s__F)); __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":351 * order = 'C' * if order is 'F': * raise NotImplementedError, "Fortran order not supported" # <<<<<<<<<<<<<< * self._dtype = np.dtype(dtype) * self._order = order */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_kp_s_4), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } __pyx_L5:; /* "ga4py/gain/core.pyx":352 * if order is 'F': * raise NotImplementedError, "Fortran order not supported" * self._dtype = np.dtype(dtype) # <<<<<<<<<<<<<< * self._order = order * self._base = base */ __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___dtype, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":353 * raise NotImplementedError, "Fortran order not supported" * self._dtype = np.dtype(dtype) * self._order = order # <<<<<<<<<<<<<< * self._base = base * self._is_real = False */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___order, __pyx_v_order) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":354 * self._dtype = np.dtype(dtype) * self._order = order * self._base = base # <<<<<<<<<<<<<< * self._is_real = False * self._is_imag = False */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___base, __pyx_v_base) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":355 * self._order = order * self._base = base * self._is_real = False # <<<<<<<<<<<<<< * self._is_imag = False * if base is None: */ __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___is_real, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":356 * self._base = base * self._is_real = False * self._is_imag = False # <<<<<<<<<<<<<< * if base is None: * self.global_slice = util.MasterKey(shape) */ __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___is_imag, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":357 * self._is_real = False * self._is_imag = False * if base is None: # <<<<<<<<<<<<<< * self.global_slice = util.MasterKey(shape) * self._flags = flagsobj() */ __pyx_t_5 = (__pyx_v_base == Py_None); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":358 * self._is_imag = False * if base is None: * self.global_slice = util.MasterKey(shape) # <<<<<<<<<<<<<< * self._flags = flagsobj() * dtype_ = self._dtype */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__MasterKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __pyx_t_6 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__global_slice, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":359 * if base is None: * self.global_slice = util.MasterKey(shape) * self._flags = flagsobj() # <<<<<<<<<<<<<< * dtype_ = self._dtype * gatype = None */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__flagsobj); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___flags, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":360 * self.global_slice = util.MasterKey(shape) * self._flags = flagsobj() * dtype_ = self._dtype # <<<<<<<<<<<<<< * gatype = None * if dtype_ in gatypes: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_dtype_ = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":361 * self._flags = flagsobj() * dtype_ = self._dtype * gatype = None # <<<<<<<<<<<<<< * if dtype_ in gatypes: * gatype = gatypes[dtype_] */ __Pyx_INCREF(Py_None); __pyx_v_gatype = Py_None; /* "ga4py/gain/core.pyx":362 * dtype_ = self._dtype * gatype = None * if dtype_ in gatypes: # <<<<<<<<<<<<<< * gatype = gatypes[dtype_] * else: */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__gatypes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = (__Pyx_PySequence_Contains(__pyx_v_dtype_, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":363 * gatype = None * if dtype_ in gatypes: * gatype = gatypes[dtype_] # <<<<<<<<<<<<<< * else: * gatype = ga.register_dtype(dtype_) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__gatypes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyObject_GetItem(__pyx_t_2, __pyx_v_dtype_); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_gatype, __pyx_t_6); __pyx_t_6 = 0; goto __pyx_L7; } /*else*/ { /* "ga4py/gain/core.pyx":365 * gatype = gatypes[dtype_] * else: * gatype = ga.register_dtype(dtype_) # <<<<<<<<<<<<<< * gatypes[dtype_] = gatype * if (shape,dtype_.str) in ga_cache: */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__register_dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_dtype_); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_dtype_); __Pyx_GIVEREF(__pyx_v_dtype_); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_gatype, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":366 * else: * gatype = ga.register_dtype(dtype_) * gatypes[dtype_] = gatype # <<<<<<<<<<<<<< * if (shape,dtype_.str) in ga_cache: * self.handle = ga_cache.pop((shape,dtype_.str)) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__gatypes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_1, __pyx_v_dtype_, __pyx_v_gatype) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } __pyx_L7:; /* "ga4py/gain/core.pyx":367 * gatype = ga.register_dtype(dtype_) * gatypes[dtype_] = gatype * if (shape,dtype_.str) in ga_cache: # <<<<<<<<<<<<<< * self.handle = ga_cache.pop((shape,dtype_.str)) * else: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype_, __pyx_n_s__str); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga_cache); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = (__Pyx_PySequence_Contains(((PyObject *)__pyx_t_6), __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":368 * gatypes[dtype_] = gatype * if (shape,dtype_.str) in ga_cache: * self.handle = ga_cache.pop((shape,dtype_.str)) # <<<<<<<<<<<<<< * else: * self.handle = ga.create(gatype, shape, */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga_cache); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__pop); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype_, __pyx_n_s__str); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_t_2)); __Pyx_GIVEREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__handle, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L8; } /*else*/ { /* "ga4py/gain/core.pyx":370 * self.handle = ga_cache.pop((shape,dtype_.str)) * else: * self.handle = ga.create(gatype, shape, # <<<<<<<<<<<<<< * pgroup=ga.pgroup_get_default()) * if buffer is not None: */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__create); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_gatype); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_gatype); __Pyx_GIVEREF(__pyx_v_gatype); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_6)); /* "ga4py/gain/core.pyx":371 * else: * self.handle = ga.create(gatype, shape, * pgroup=ga.pgroup_get_default()) # <<<<<<<<<<<<<< * if buffer is not None: * local = ga.access(self.handle) */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__pgroup_get_default); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__pgroup), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":370 * self.handle = ga_cache.pop((shape,dtype_.str)) * else: * self.handle = ga.create(gatype, shape, # <<<<<<<<<<<<<< * pgroup=ga.pgroup_get_default()) * if buffer is not None: */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__handle, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __pyx_L8:; /* "ga4py/gain/core.pyx":372 * self.handle = ga.create(gatype, shape, * pgroup=ga.pgroup_get_default()) * if buffer is not None: # <<<<<<<<<<<<<< * local = ga.access(self.handle) * if local is not None: */ __pyx_t_4 = (__pyx_v_buffer != Py_None); __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":373 * pgroup=ga.pgroup_get_default()) * if buffer is not None: * local = ga.access(self.handle) # <<<<<<<<<<<<<< * if local is not None: * a = None */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__access); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__handle); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_local = __pyx_t_7; __pyx_t_7 = 0; /* "ga4py/gain/core.pyx":374 * if buffer is not None: * local = ga.access(self.handle) * if local is not None: # <<<<<<<<<<<<<< * a = None * if isinstance(buffer, np.ndarray): */ __pyx_t_5 = (__pyx_v_local != Py_None); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":375 * local = ga.access(self.handle) * if local is not None: * a = None # <<<<<<<<<<<<<< * if isinstance(buffer, np.ndarray): * buffer.shape = shape */ __Pyx_INCREF(Py_None); __pyx_v_a = Py_None; /* "ga4py/gain/core.pyx":376 * if local is not None: * a = None * if isinstance(buffer, np.ndarray): # <<<<<<<<<<<<<< * buffer.shape = shape * a = buffer */ __pyx_t_4 = __Pyx_TypeCheck(__pyx_v_buffer, ((PyObject*)__pyx_ptype_5numpy_ndarray)); __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":377 * a = None * if isinstance(buffer, np.ndarray): * buffer.shape = shape # <<<<<<<<<<<<<< * a = buffer * else: */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_buffer, __pyx_n_s__shape, __pyx_v_shape) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":378 * if isinstance(buffer, np.ndarray): * buffer.shape = shape * a = buffer # <<<<<<<<<<<<<< * else: * a = np.ndarray(shape, dtype_, buffer, offset, */ __Pyx_INCREF(__pyx_v_buffer); __Pyx_DECREF_SET(__pyx_v_a, __pyx_v_buffer); goto __pyx_L11; } /*else*/ { /* "ga4py/gain/core.pyx":381 * else: * a = np.ndarray(shape, dtype_, buffer, offset, * strides, order) # <<<<<<<<<<<<<< * local[:] = a[ga.zip(*self.distribution())] * self.release_update() */ __pyx_t_7 = PyTuple_New(6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __Pyx_INCREF(__pyx_v_dtype_); PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_dtype_); __Pyx_GIVEREF(__pyx_v_dtype_); __Pyx_INCREF(__pyx_v_buffer); PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_buffer); __Pyx_GIVEREF(__pyx_v_buffer); __Pyx_INCREF(__pyx_v_offset); PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_v_offset); __Pyx_GIVEREF(__pyx_v_offset); __Pyx_INCREF(__pyx_v_strides); PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_v_strides); __Pyx_GIVEREF(__pyx_v_strides); __Pyx_INCREF(__pyx_v_order); PyTuple_SET_ITEM(__pyx_t_7, 5, __pyx_v_order); __Pyx_GIVEREF(__pyx_v_order); __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray)), ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF_SET(__pyx_v_a, __pyx_t_2); __pyx_t_2 = 0; } __pyx_L11:; /* "ga4py/gain/core.pyx":382 * a = np.ndarray(shape, dtype_, buffer, offset, * strides, order) * local[:] = a[ga.zip(*self.distribution())] # <<<<<<<<<<<<<< * self.release_update() * self._strides = [self.itemsize] */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__zip); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__distribution); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PySequence_Tuple(__pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = PyObject_GetItem(__pyx_v_a, __pyx_t_6); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__Pyx_PyObject_SetSlice(__pyx_v_local, __pyx_t_2, 0, 0, NULL, NULL, &__pyx_k_slice_5, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":383 * strides, order) * local[:] = a[ga.zip(*self.distribution())] * self.release_update() # <<<<<<<<<<<<<< * self._strides = [self.itemsize] * for size in shape[-1:0:-1]: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__release_update); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L10; } __pyx_L10:; goto __pyx_L9; } __pyx_L9:; /* "ga4py/gain/core.pyx":384 * local[:] = a[ga.zip(*self.distribution())] * self.release_update() * self._strides = [self.itemsize] # <<<<<<<<<<<<<< * for size in shape[-1:0:-1]: * self._strides = [size*self._strides[0]] + self._strides */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__itemsize); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __pyx_t_6 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___strides, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":385 * self.release_update() * self._strides = [self.itemsize] * for size in shape[-1:0:-1]: # <<<<<<<<<<<<<< * self._strides = [size*self._strides[0]] + self._strides * elif isinstance(base, ndarray): */ __pyx_t_2 = PyObject_GetItem(__pyx_v_shape, __pyx_k_slice_6); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_6 = __pyx_t_2; __Pyx_INCREF(__pyx_t_6); __pyx_t_9 = 0; __pyx_t_10 = NULL; } else { __pyx_t_9 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_10 = Py_TYPE(__pyx_t_6)->tp_iternext; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (!__pyx_t_10 && PyList_CheckExact(__pyx_t_6)) { if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_2); __pyx_t_9++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_10 && PyTuple_CheckExact(__pyx_t_6)) { if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_2); __pyx_t_9++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_2 = __pyx_t_10(__pyx_t_6); if (unlikely(!__pyx_t_2)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_2); } __Pyx_XDECREF_SET(__pyx_v_size, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":386 * self._strides = [self.itemsize] * for size in shape[-1:0:-1]: * self._strides = [size*self._strides[0]] + self._strides # <<<<<<<<<<<<<< * elif isinstance(base, ndarray): * self.global_slice = base.global_slice */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___strides); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_2, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Multiply(__pyx_v_size, __pyx_t_7); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); PyList_SET_ITEM(__pyx_t_7, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___strides); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_Add(((PyObject *)__pyx_t_7), __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___strides, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L6; } /* "ga4py/gain/core.pyx":387 * for size in shape[-1:0:-1]: * self._strides = [size*self._strides[0]] + self._strides * elif isinstance(base, ndarray): # <<<<<<<<<<<<<< * self.global_slice = base.global_slice * self.handle = base.handle */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PyObject_IsInstance(__pyx_v_base, __pyx_t_6); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":388 * self._strides = [size*self._strides[0]] + self._strides * elif isinstance(base, ndarray): * self.global_slice = base.global_slice # <<<<<<<<<<<<<< * self.handle = base.handle * self._strides = strides */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_base, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__global_slice, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":389 * elif isinstance(base, ndarray): * self.global_slice = base.global_slice * self.handle = base.handle # <<<<<<<<<<<<<< * self._strides = strides * self._is_real = base._is_real */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_base, __pyx_n_s__handle); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__handle, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":390 * self.global_slice = base.global_slice * self.handle = base.handle * self._strides = strides # <<<<<<<<<<<<<< * self._is_real = base._is_real * self._is_imag = base._is_imag */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___strides, __pyx_v_strides) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":391 * self.handle = base.handle * self._strides = strides * self._is_real = base._is_real # <<<<<<<<<<<<<< * self._is_imag = base._is_imag * self._flags = base._flags */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_base, __pyx_n_s___is_real); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___is_real, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":392 * self._strides = strides * self._is_real = base._is_real * self._is_imag = base._is_imag # <<<<<<<<<<<<<< * self._flags = base._flags * self._flags._c = False */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_base, __pyx_n_s___is_imag); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___is_imag, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":393 * self._is_real = base._is_real * self._is_imag = base._is_imag * self._flags = base._flags # <<<<<<<<<<<<<< * self._flags._c = False * self._flags._o = False */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_base, __pyx_n_s___flags); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___flags, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":394 * self._is_imag = base._is_imag * self._flags = base._flags * self._flags._c = False # <<<<<<<<<<<<<< * self._flags._o = False * else: */ __pyx_t_6 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___flags); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (__Pyx_PyObject_SetAttrStr(__pyx_t_1, __pyx_n_s___c, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":395 * self._flags = base._flags * self._flags._c = False * self._flags._o = False # <<<<<<<<<<<<<< * else: * # assume base is a g_a handle */ __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___flags); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); if (__Pyx_PyObject_SetAttrStr(__pyx_t_6, __pyx_n_s___o, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L6; } /*else*/ { /* "ga4py/gain/core.pyx":398 * else: * # assume base is a g_a handle * self.handle = base # <<<<<<<<<<<<<< * self.global_slice = util.MasterKey(shape) * self._flags = flagsobj() */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__handle, __pyx_v_base) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":399 * # assume base is a g_a handle * self.handle = base * self.global_slice = util.MasterKey(shape) # <<<<<<<<<<<<<< * self._flags = flagsobj() * self._strides = [self.itemsize] */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__MasterKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__global_slice, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":400 * self.handle = base * self.global_slice = util.MasterKey(shape) * self._flags = flagsobj() # <<<<<<<<<<<<<< * self._strides = [self.itemsize] * for size in shape[-1:0:-1]: */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__flagsobj); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___flags, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":401 * self.global_slice = util.MasterKey(shape) * self._flags = flagsobj() * self._strides = [self.itemsize] # <<<<<<<<<<<<<< * for size in shape[-1:0:-1]: * self._strides = [size*self._strides[0]] + self._strides */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__itemsize); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __pyx_t_6 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___strides, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":402 * self._flags = flagsobj() * self._strides = [self.itemsize] * for size in shape[-1:0:-1]: # <<<<<<<<<<<<<< * self._strides = [size*self._strides[0]] + self._strides * */ __pyx_t_2 = PyObject_GetItem(__pyx_v_shape, __pyx_k_slice_7); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_6 = __pyx_t_2; __Pyx_INCREF(__pyx_t_6); __pyx_t_9 = 0; __pyx_t_10 = NULL; } else { __pyx_t_9 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_10 = Py_TYPE(__pyx_t_6)->tp_iternext; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (!__pyx_t_10 && PyList_CheckExact(__pyx_t_6)) { if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_2); __pyx_t_9++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_10 && PyTuple_CheckExact(__pyx_t_6)) { if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_2); __pyx_t_9++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_2 = __pyx_t_10(__pyx_t_6); if (unlikely(!__pyx_t_2)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_2); } __Pyx_XDECREF_SET(__pyx_v_size, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":403 * self._strides = [self.itemsize] * for size in shape[-1:0:-1]: * self._strides = [size*self._strides[0]] + self._strides # <<<<<<<<<<<<<< * * def __del__(self): */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___strides); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Multiply(__pyx_v_size, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___strides); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = PyNumber_Add(((PyObject *)__pyx_t_1), __pyx_t_2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___strides, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } __pyx_L6:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_dtype_); __Pyx_XDECREF(__pyx_v_gatype); __Pyx_XDECREF(__pyx_v_local); __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_size); __Pyx_XDECREF(__pyx_v_shape); __Pyx_XDECREF(__pyx_v_order); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_5__del__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_5__del__ = {__Pyx_NAMESTR("__del__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_5__del__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_5__del__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_4__del__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":405 * self._strides = [size*self._strides[0]] + self._strides * * def __del__(self): # <<<<<<<<<<<<<< * if self._base is None: * if ga.initialized(): */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_4__del__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_shape = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__del__", 0); __Pyx_TraceCall("__del__", __pyx_f[0], 405); /* "ga4py/gain/core.pyx":406 * * def __del__(self): * if self._base is None: # <<<<<<<<<<<<<< * if ga.initialized(): * shape = self.shape */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___base); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__pyx_t_1 == Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":407 * def __del__(self): * if self._base is None: * if ga.initialized(): # <<<<<<<<<<<<<< * shape = self.shape * if ga_cache.full((shape,self.dtype.str)): */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__initialized); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":408 * if self._base is None: * if ga.initialized(): * shape = self.shape # <<<<<<<<<<<<<< * if ga_cache.full((shape,self.dtype.str)): * ga.destroy(self.handle) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_shape = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":409 * if ga.initialized(): * shape = self.shape * if ga_cache.full((shape,self.dtype.str)): # <<<<<<<<<<<<<< * ga.destroy(self.handle) * else: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga_cache); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__full); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__str); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_1)); __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":410 * shape = self.shape * if ga_cache.full((shape,self.dtype.str)): * ga.destroy(self.handle) # <<<<<<<<<<<<<< * else: * ga_cache[(shape,self.dtype.str)] = self.handle */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__destroy); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__handle); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L5; } /*else*/ { /* "ga4py/gain/core.pyx":412 * ga.destroy(self.handle) * else: * ga_cache[(shape,self.dtype.str)] = self.handle # <<<<<<<<<<<<<< * * ################################################################ */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__handle); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga_cache); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__str); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __pyx_t_6 = 0; if (PyObject_SetItem(__pyx_t_4, ((PyObject *)__pyx_t_5), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } __pyx_L5:; goto __pyx_L4; } __pyx_L4:; goto __pyx_L3; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_shape); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_7distribution(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_6distribution[] = "Return the bounds of the distribution.\n\n Always returns the lo/hi distribution based on the original shape of\n the array.\n\n This operation is local.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_7distribution = {__Pyx_NAMESTR("distribution"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_7distribution, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_6distribution)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_7distribution(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("distribution (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_6distribution(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":417 * ### ndarray methods added for Global Arrays * ################################################################ * def distribution(self): # <<<<<<<<<<<<<< * """Return the bounds of the distribution. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_6distribution(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("distribution", 0); __Pyx_TraceCall("distribution", __pyx_f[0], 417); /* "ga4py/gain/core.pyx":426 * * """ * return ga.distribution(self.handle) # <<<<<<<<<<<<<< * * def owns(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__distribution); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__handle); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.distribution", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_9owns(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_8owns[] = "Return True if this process owns some of the data.\n\n This operation is local.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_9owns = {__Pyx_NAMESTR("owns"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_9owns, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_8owns)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_9owns(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("owns (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_8owns(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":428 * return ga.distribution(self.handle) * * def owns(self): # <<<<<<<<<<<<<< * """Return True if this process owns some of the data. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_8owns(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { CYTHON_UNUSED PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *(*__pyx_t_5)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("owns", 0); __Pyx_TraceCall("owns", __pyx_f[0], 428); /* "ga4py/gain/core.pyx":434 * * """ * lo,hi = self.distribution() # <<<<<<<<<<<<<< * return np.all(hi>=0) * */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__distribution); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { PyObject* sequence = __pyx_t_2; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_1 = PyList_GET_ITEM(sequence, 0); __pyx_t_3 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_3); #else __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; index = 0; __pyx_t_1 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L4_unpacking_done; __pyx_L3_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L4_unpacking_done:; } __pyx_v_lo = __pyx_t_1; __pyx_t_1 = 0; __pyx_v_hi = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":435 * """ * lo,hi = self.distribution() * return np.all(hi>=0) # <<<<<<<<<<<<<< * * def access(self, global_slice=None): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__all); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_RichCompare(__pyx_v_hi, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.core.ndarray.owns", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_11access(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_10access[] = "Access the local array. Return None if no data is owned.\n \n This operation is local.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_11access = {__Pyx_NAMESTR("access"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_11access, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_10access)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_11access(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_global_slice = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("access (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__global_slice,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/core.pyx":437 * return np.all(hi>=0) * * def access(self, global_slice=None): # <<<<<<<<<<<<<< * """Access the local array. Return None if no data is owned. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__global_slice); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "access") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_global_slice = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("access", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.access", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_10access(__pyx_self, __pyx_v_self, __pyx_v_global_slice); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_10access(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_global_slice) { PyObject *__pyx_v_a = NULL; PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_v_b = NULL; PyObject *__pyx_v_fixed_slice = NULL; PyObject *__pyx_v_c = NULL; PyObject *__pyx_v_d = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *(*__pyx_t_7)(PyObject *); PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; int __pyx_t_11; PyObject *__pyx_t_12 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("access", 0); __Pyx_TraceCall("access", __pyx_f[0], 437); __Pyx_INCREF(__pyx_v_global_slice); /* "ga4py/gain/core.pyx":444 * """ * # we access the entire block for this process * a = ga.access(self.handle) # <<<<<<<<<<<<<< * if a is None: * return None # bail; this process doesn't own any data */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__access); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__handle); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_a = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":445 * # we access the entire block for this process * a = ga.access(self.handle) * if a is None: # <<<<<<<<<<<<<< * return None # bail; this process doesn't own any data * # get the original GA distribution */ __pyx_t_4 = (__pyx_v_a == Py_None); __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":446 * a = ga.access(self.handle) * if a is None: * return None # bail; this process doesn't own any data # <<<<<<<<<<<<<< * # get the original GA distribution * lo,hi = ga.distribution(self.handle) */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_None); __pyx_r = Py_None; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":448 * return None # bail; this process doesn't own any data * # get the original GA distribution * lo,hi = ga.distribution(self.handle) # <<<<<<<<<<<<<< * # caller may pass in a different global_slice * if global_slice is None: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__distribution); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__handle); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_3 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } __pyx_v_lo = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_hi = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":450 * lo,hi = ga.distribution(self.handle) * # caller may pass in a different global_slice * if global_slice is None: # <<<<<<<<<<<<<< * global_slice = self.global_slice * # transpose, if needed */ __pyx_t_5 = (__pyx_v_global_slice == Py_None); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":451 * # caller may pass in a different global_slice * if global_slice is None: * global_slice = self.global_slice # <<<<<<<<<<<<<< * # transpose, if needed * b = a.transpose(global_slice.lohi_T()) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_global_slice, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L6; } __pyx_L6:; /* "ga4py/gain/core.pyx":453 * global_slice = self.global_slice * # transpose, if needed * b = a.transpose(global_slice.lohi_T()) # <<<<<<<<<<<<<< * # slice away any fixed dimensions * try: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__transpose); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_global_slice, __pyx_n_s__lohi_T); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_b = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":455 * b = a.transpose(global_slice.lohi_T()) * # slice away any fixed dimensions * try: # <<<<<<<<<<<<<< * fixed_slice = global_slice.access_key(lo,hi) * except IndexError: */ { __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); __Pyx_XGOTREF(__pyx_t_8); __Pyx_XGOTREF(__pyx_t_9); __Pyx_XGOTREF(__pyx_t_10); /*try:*/ { /* "ga4py/gain/core.pyx":456 * # slice away any fixed dimensions * try: * fixed_slice = global_slice.access_key(lo,hi) # <<<<<<<<<<<<<< * except IndexError: * self.release() */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_global_slice, __pyx_n_s__access_key); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L7_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L7_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L7_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_fixed_slice = __pyx_t_1; __pyx_t_1 = 0; } __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L14_try_end; __pyx_L7_error:; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":457 * try: * fixed_slice = global_slice.access_key(lo,hi) * except IndexError: # <<<<<<<<<<<<<< * self.release() * return None # bail; this process doesn't own relevant piece */ __pyx_t_11 = PyErr_ExceptionMatches(__pyx_builtin_IndexError); if (__pyx_t_11) { __Pyx_AddTraceback("ga4py.gain.core.ndarray.access", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_GOTREF(__pyx_t_3); __Pyx_GOTREF(__pyx_t_2); /* "ga4py/gain/core.pyx":458 * fixed_slice = global_slice.access_key(lo,hi) * except IndexError: * self.release() # <<<<<<<<<<<<<< * return None # bail; this process doesn't own relevant piece * c = b[fixed_slice] */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__release); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_12 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;} __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; /* "ga4py/gain/core.pyx":459 * except IndexError: * self.release() * return None # bail; this process doesn't own relevant piece # <<<<<<<<<<<<<< * c = b[fixed_slice] * # at this point the shape of c should match the global_slice shape */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_None); __pyx_r = Py_None; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L10_except_return; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L8_exception_handled; } __pyx_L9_except_error:; __Pyx_XGIVEREF(__pyx_t_8); __Pyx_XGIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); goto __pyx_L1_error; __pyx_L10_except_return:; __Pyx_XGIVEREF(__pyx_t_8); __Pyx_XGIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); goto __pyx_L0; __pyx_L8_exception_handled:; __Pyx_XGIVEREF(__pyx_t_8); __Pyx_XGIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); __pyx_L14_try_end:; } /* "ga4py/gain/core.pyx":460 * self.release() * return None # bail; this process doesn't own relevant piece * c = b[fixed_slice] # <<<<<<<<<<<<<< * # at this point the shape of c should match the global_slice shape * # except for any None/newaxis added */ __pyx_t_2 = PyObject_GetItem(__pyx_v_b, __pyx_v_fixed_slice); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_c = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":463 * # at this point the shape of c should match the global_slice shape * # except for any None/newaxis added * d = c[global_slice.None_key()] # <<<<<<<<<<<<<< * return d * */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_global_slice, __pyx_n_s__None_key); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_GetItem(__pyx_v_c, __pyx_t_3); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_d = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":464 * # except for any None/newaxis added * d = c[global_slice.None_key()] * return d # <<<<<<<<<<<<<< * * def get(self, key=None): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_d); __pyx_r = __pyx_v_d; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_12); __Pyx_AddTraceback("ga4py.gain.core.ndarray.access", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XDECREF(__pyx_v_b); __Pyx_XDECREF(__pyx_v_fixed_slice); __Pyx_XDECREF(__pyx_v_c); __Pyx_XDECREF(__pyx_v_d); __Pyx_XDECREF(__pyx_v_global_slice); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_13get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_12get[] = "Similar to the __getitem__ built-in, but one-sided (not collective.)\n\n We sometimes want the semantics of \"slicing\" an ndarray and then\n immediately calling ga.get() to fetch the result. We can't use the\n __getitem__ built-in because it is a collective operation. For\n example, during a ufunc we need to get() the corresponding pieces of\n the arrays and that is where this function is handy.\n\n This operation is one-sided.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_13get = {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_13get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_12get)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_13get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_key = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/core.pyx":466 * return d * * def get(self, key=None): # <<<<<<<<<<<<<< * """Similar to the __getitem__ built-in, but one-sided (not collective.) * */ values[1] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_key = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("get", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.get", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_12get(__pyx_self, __pyx_v_self, __pyx_v_key); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_12get(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) { PyObject *__pyx_v_global_slice = NULL; PyObject *__pyx_v__lo = NULL; PyObject *__pyx_v__hi = NULL; PyObject *__pyx_v__skip = NULL; PyObject *__pyx_v_adjust = NULL; PyObject *__pyx_v_need_strided = NULL; PyObject *__pyx_v_ret = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *(*__pyx_t_10)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get", 0); __Pyx_TraceCall("get", __pyx_f[0], 466); /* "ga4py/gain/core.pyx":479 * """ * # caller may modify the global_slice * global_slice = self.global_slice # <<<<<<<<<<<<<< * if key is not None: * global_slice = self.global_slice[key] */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_global_slice = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":480 * # caller may modify the global_slice * global_slice = self.global_slice * if key is not None: # <<<<<<<<<<<<<< * global_slice = self.global_slice[key] * # determine the lo/hi/skip for the ga.strided_get() */ __pyx_t_2 = (__pyx_v_key != Py_None); __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":481 * global_slice = self.global_slice * if key is not None: * global_slice = self.global_slice[key] # <<<<<<<<<<<<<< * # determine the lo/hi/skip for the ga.strided_get() * _lo,_hi,_skip,adjust,need_strided = global_slice.get_lo_hi_skip_adjust() */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyObject_GetItem(__pyx_t_1, __pyx_v_key); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_global_slice, __pyx_t_4); __pyx_t_4 = 0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":483 * global_slice = self.global_slice[key] * # determine the lo/hi/skip for the ga.strided_get() * _lo,_hi,_skip,adjust,need_strided = global_slice.get_lo_hi_skip_adjust() # <<<<<<<<<<<<<< * if need_strided: * ret = ga.strided_get(self.handle, _lo, _hi, _skip) */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_global_slice, __pyx_n_s_8); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 5)) { if (size > 5) __Pyx_RaiseTooManyValuesError(5); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); __pyx_t_7 = PyTuple_GET_ITEM(sequence, 3); __pyx_t_8 = PyTuple_GET_ITEM(sequence, 4); } else { __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_5 = PyList_GET_ITEM(sequence, 1); __pyx_t_6 = PyList_GET_ITEM(sequence, 2); __pyx_t_7 = PyList_GET_ITEM(sequence, 3); __pyx_t_8 = PyList_GET_ITEM(sequence, 4); } __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx_t_8); #else Py_ssize_t i; PyObject** temps[5] = {&__pyx_t_4,&__pyx_t_5,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8}; for (i=0; i < 5; i++) { PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(item); *(temps[i]) = item; } #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; PyObject** temps[5] = {&__pyx_t_4,&__pyx_t_5,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8}; __pyx_t_9 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext; for (index=0; index < 5; index++) { PyObject* item = __pyx_t_10(__pyx_t_9); if (unlikely(!item)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(item); *(temps[index]) = item; } if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_10 = NULL; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_10 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } __pyx_v__lo = __pyx_t_4; __pyx_t_4 = 0; __pyx_v__hi = __pyx_t_5; __pyx_t_5 = 0; __pyx_v__skip = __pyx_t_6; __pyx_t_6 = 0; __pyx_v_adjust = __pyx_t_7; __pyx_t_7 = 0; __pyx_v_need_strided = __pyx_t_8; __pyx_t_8 = 0; /* "ga4py/gain/core.pyx":484 * # determine the lo/hi/skip for the ga.strided_get() * _lo,_hi,_skip,adjust,need_strided = global_slice.get_lo_hi_skip_adjust() * if need_strided: # <<<<<<<<<<<<<< * ret = ga.strided_get(self.handle, _lo, _hi, _skip) * else: */ __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_need_strided); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_3) { /* "ga4py/gain/core.pyx":485 * _lo,_hi,_skip,adjust,need_strided = global_slice.get_lo_hi_skip_adjust() * if need_strided: * ret = ga.strided_get(self.handle, _lo, _hi, _skip) # <<<<<<<<<<<<<< * else: * ret = ga.get(self.handle, _lo, _hi) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__strided_get); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__handle); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_INCREF(__pyx_v__lo); PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v__lo); __Pyx_GIVEREF(__pyx_v__lo); __Pyx_INCREF(__pyx_v__hi); PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v__hi); __Pyx_GIVEREF(__pyx_v__hi); __Pyx_INCREF(__pyx_v__skip); PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_v__skip); __Pyx_GIVEREF(__pyx_v__skip); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __pyx_v_ret = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L6; } /*else*/ { /* "ga4py/gain/core.pyx":487 * ret = ga.strided_get(self.handle, _lo, _hi, _skip) * else: * ret = ga.get(self.handle, _lo, _hi) # <<<<<<<<<<<<<< * # pull out real or imag parts, if needed * if self._is_real: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__get); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__handle); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_INCREF(__pyx_v__lo); PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v__lo); __Pyx_GIVEREF(__pyx_v__lo); __Pyx_INCREF(__pyx_v__hi); PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v__hi); __Pyx_GIVEREF(__pyx_v__hi); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __pyx_v_ret = __pyx_t_1; __pyx_t_1 = 0; } __pyx_L6:; /* "ga4py/gain/core.pyx":489 * ret = ga.get(self.handle, _lo, _hi) * # pull out real or imag parts, if needed * if self._is_real: # <<<<<<<<<<<<<< * ret = ret.real * elif self._is_imag: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___is_real); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":490 * # pull out real or imag parts, if needed * if self._is_real: * ret = ret.real # <<<<<<<<<<<<<< * elif self._is_imag: * ret = ret.imag */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_ret, __pyx_n_s__real); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_ret, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L7; } /* "ga4py/gain/core.pyx":491 * if self._is_real: * ret = ret.real * elif self._is_imag: # <<<<<<<<<<<<<< * ret = ret.imag * # apply the adjustment (which only reverses some dimensions, if needed) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___is_imag); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":492 * ret = ret.real * elif self._is_imag: * ret = ret.imag # <<<<<<<<<<<<<< * # apply the adjustment (which only reverses some dimensions, if needed) * ret = ret[adjust] */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_ret, __pyx_n_s__imag); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_ret, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L7; } __pyx_L7:; /* "ga4py/gain/core.pyx":494 * ret = ret.imag * # apply the adjustment (which only reverses some dimensions, if needed) * ret = ret[adjust] # <<<<<<<<<<<<<< * # transpose the result, if needed * ret = ret.transpose(global_slice.lohi_T()) */ __pyx_t_1 = PyObject_GetItem(__pyx_v_ret, __pyx_v_adjust); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_ret, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":496 * ret = ret[adjust] * # transpose the result, if needed * ret = ret.transpose(global_slice.lohi_T()) # <<<<<<<<<<<<<< * # reshape the array based on global_slice * # this will add any newaxis and remove any fixed dimensions */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_ret, __pyx_n_s__transpose); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_global_slice, __pyx_n_s__lohi_T); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_7 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __Pyx_DECREF_SET(__pyx_v_ret, __pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/core.pyx":499 * # reshape the array based on global_slice * # this will add any newaxis and remove any fixed dimensions * ret.shape = global_slice.shape # <<<<<<<<<<<<<< * return ret * */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_global_slice, __pyx_n_s__shape); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); if (__Pyx_PyObject_SetAttrStr(__pyx_v_ret, __pyx_n_s__shape, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/core.pyx":500 * # this will add any newaxis and remove any fixed dimensions * ret.shape = global_slice.shape * return ret # <<<<<<<<<<<<<< * * def allget(self, key=None): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_ret); __pyx_r = __pyx_v_ret; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("ga4py.gain.core.ndarray.get", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_global_slice); __Pyx_XDECREF(__pyx_v__lo); __Pyx_XDECREF(__pyx_v__hi); __Pyx_XDECREF(__pyx_v__skip); __Pyx_XDECREF(__pyx_v_adjust); __Pyx_XDECREF(__pyx_v_need_strided); __Pyx_XDECREF(__pyx_v_ret); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_15allget(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_14allget[] = "Like get(), but when all processes need the same piece.\n \n This operation is collective.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_15allget = {__Pyx_NAMESTR("allget"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_15allget, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_14allget)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_15allget(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_key = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("allget (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/core.pyx":502 * return ret * * def allget(self, key=None): # <<<<<<<<<<<<<< * """Like get(), but when all processes need the same piece. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "allget") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_key = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("allget", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.allget", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_14allget(__pyx_self, __pyx_v_self, __pyx_v_key); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_14allget(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) { PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("allget", 0); __Pyx_TraceCall("allget", __pyx_f[0], 502); /* "ga4py/gain/core.pyx":510 * # TODO it's not clear whether this approach is better than having all * # P processors ga.get() the same piece. * if not me(): # <<<<<<<<<<<<<< * result = self.get(key) * return comm().bcast(result) */ __pyx_t_1 = ((!(__pyx_f_5ga4py_4gain_4core_me(0) != 0)) != 0); if (__pyx_t_1) { /* "ga4py/gain/core.pyx":511 * # P processors ga.get() the same piece. * if not me(): * result = self.get(key) # <<<<<<<<<<<<<< * return comm().bcast(result) * else: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__get); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_key); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_key); __Pyx_GIVEREF(__pyx_v_key); __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_result = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":512 * if not me(): * result = self.get(key) * return comm().bcast(result) # <<<<<<<<<<<<<< * else: * return comm().bcast() */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__bcast); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":514 * return comm().bcast(result) * else: * return comm().bcast() # <<<<<<<<<<<<<< * * def gather(self, i): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__bcast); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.core.ndarray.allget", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_17gather(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_16gather[] = "Use ga.gather() but modify the indicies `i' based on global_slice.\n\n Parameters\n ----------\n i : 1D or 2D array of indices\n see ga.gather() documentation)\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_17gather = {__Pyx_NAMESTR("gather"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_17gather, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_16gather)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_17gather(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_i = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("gather (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__i,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__i)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("gather", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gather") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_i = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("gather", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.gather", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_16gather(__pyx_self, __pyx_v_self, __pyx_v_i); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":516 * return comm().bcast() * * def gather(self, i): # <<<<<<<<<<<<<< * """Use ga.gather() but modify the indicies `i' based on global_slice. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_16gather(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_i) { PyObject *__pyx_v_step = NULL; PyObject *__pyx_v_start = NULL; PyObject *__pyx_v_gs = NULL; PyObject *__pyx_v_new_i = NULL; PyObject *__pyx_v_columns = NULL; CYTHON_UNUSED PyObject *__pyx_v_column_iter = NULL; PyObject *__pyx_v_new_columns = NULL; PyObject *__pyx_v_fixed = NULL; PyObject *__pyx_v_new_column = NULL; PyObject *__pyx_v_col = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_t_6; Py_ssize_t __pyx_t_7; PyObject *(*__pyx_t_8)(PyObject *); int __pyx_t_9; int __pyx_t_10; PyObject *__pyx_t_11 = NULL; Py_ssize_t __pyx_t_12; PyObject *(*__pyx_t_13)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("gather", 0); __Pyx_TraceCall("gather", __pyx_f[0], 516); __Pyx_INCREF(__pyx_v_i); /* "ga4py/gain/core.pyx":529 * # view, etc * # make sure we're always working with a 2D index array * i = np.asarray(i, dtype=np.int64) # <<<<<<<<<<<<<< * if i.ndim == 1: * i.shape = (-1,self.ndim) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__asarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_i); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_i); __Pyx_GIVEREF(__pyx_v_i); __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__int64); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_i, __pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":530 * # make sure we're always working with a 2D index array * i = np.asarray(i, dtype=np.int64) * if i.ndim == 1: # <<<<<<<<<<<<<< * i.shape = (-1,self.ndim) * step = [] */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_i, __pyx_n_s__ndim); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_6) { /* "ga4py/gain/core.pyx":531 * i = np.asarray(i, dtype=np.int64) * if i.ndim == 1: * i.shape = (-1,self.ndim) # <<<<<<<<<<<<<< * step = [] * start = [] */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__ndim); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_int_neg_1); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_neg_1); __Pyx_GIVEREF(__pyx_int_neg_1); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_i, __pyx_n_s__shape, ((PyObject *)__pyx_t_5)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":532 * if i.ndim == 1: * i.shape = (-1,self.ndim) * step = [] # <<<<<<<<<<<<<< * start = [] * for gs in self.global_slice: */ __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_v_step = ((PyObject*)__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":533 * i.shape = (-1,self.ndim) * step = [] * start = [] # <<<<<<<<<<<<<< * for gs in self.global_slice: * if isinstance(gs, util.RangeKey): */ __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_v_start = ((PyObject*)__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":534 * step = [] * start = [] * for gs in self.global_slice: # <<<<<<<<<<<<<< * if isinstance(gs, util.RangeKey): * step.append(gs.step) */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); if (PyList_CheckExact(__pyx_t_5) || PyTuple_CheckExact(__pyx_t_5)) { __pyx_t_3 = __pyx_t_5; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0; __pyx_t_8 = NULL; } else { __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; for (;;) { if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_3)) { if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_3)) { if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_5 = __pyx_t_8(__pyx_t_3); if (unlikely(!__pyx_t_5)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_5); } __Pyx_XDECREF_SET(__pyx_v_gs, __pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":535 * start = [] * for gs in self.global_slice: * if isinstance(gs, util.RangeKey): # <<<<<<<<<<<<<< * step.append(gs.step) * start.append(gs.start) */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__RangeKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = PyObject_IsInstance(__pyx_v_gs, __pyx_t_1); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_9 = (__pyx_t_6 != 0); if (__pyx_t_9) { /* "ga4py/gain/core.pyx":536 * for gs in self.global_slice: * if isinstance(gs, util.RangeKey): * step.append(gs.step) # <<<<<<<<<<<<<< * start.append(gs.start) * elif isinstance(gs, util.NoneKey): */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gs, __pyx_n_s__step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_step, __pyx_t_1); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":537 * if isinstance(gs, util.RangeKey): * step.append(gs.step) * start.append(gs.start) # <<<<<<<<<<<<<< * elif isinstance(gs, util.NoneKey): * step.append(1) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gs, __pyx_n_s__start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_start, __pyx_t_1); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L6; } /* "ga4py/gain/core.pyx":538 * step.append(gs.step) * start.append(gs.start) * elif isinstance(gs, util.NoneKey): # <<<<<<<<<<<<<< * step.append(1) * start.append(0) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__NoneKey); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_9 = PyObject_IsInstance(__pyx_v_gs, __pyx_t_5); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = (__pyx_t_9 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":539 * start.append(gs.start) * elif isinstance(gs, util.NoneKey): * step.append(1) # <<<<<<<<<<<<<< * start.append(0) * elif isinstance(gs, util.FixedKey): */ __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_step, __pyx_int_1); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":540 * elif isinstance(gs, util.NoneKey): * step.append(1) * start.append(0) # <<<<<<<<<<<<<< * elif isinstance(gs, util.FixedKey): * pass */ __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_start, __pyx_int_0); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } /* "ga4py/gain/core.pyx":541 * step.append(1) * start.append(0) * elif isinstance(gs, util.FixedKey): # <<<<<<<<<<<<<< * pass * else: */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__FixedKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = PyObject_IsInstance(__pyx_v_gs, __pyx_t_1); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_9 = (__pyx_t_6 != 0); if (__pyx_t_9) { goto __pyx_L6; } /*else*/ { /* "ga4py/gain/core.pyx":544 * pass * else: * raise TypeError, "unhandled piece of global_slice" # <<<<<<<<<<<<<< * # modify new index array based on global_slice * new_i = (i*np.asarray(step,dtype=np.int64)[None,:] */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_9), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L6:; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":546 * raise TypeError, "unhandled piece of global_slice" * # modify new index array based on global_slice * new_i = (i*np.asarray(step,dtype=np.int64)[None,:] # <<<<<<<<<<<<<< * + np.asarray(start, dtype=np.int64)[None,:]) * # get rid of index columns which don't refer to an actual GA dimension */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)__pyx_v_step)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_step)); __Pyx_GIVEREF(((PyObject *)__pyx_v_step)); __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int64); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_t_5 = PyObject_GetItem(__pyx_t_4, ((PyObject *)__pyx_k_tuple_11)); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyNumber_Multiply(__pyx_v_i, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":547 * # modify new index array based on global_slice * new_i = (i*np.asarray(step,dtype=np.int64)[None,:] * + np.asarray(start, dtype=np.int64)[None,:]) # <<<<<<<<<<<<<< * # get rid of index columns which don't refer to an actual GA dimension * # add index columns which were missing, single-valued GA dimensions */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__asarray); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(((PyObject *)__pyx_v_start)); PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_start)); __Pyx_GIVEREF(((PyObject *)__pyx_v_start)); __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int64); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_5), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyObject_GetItem(__pyx_t_11, ((PyObject *)__pyx_k_tuple_13)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyNumber_Add(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_new_i = __pyx_t_11; __pyx_t_11 = 0; /* "ga4py/gain/core.pyx":550 * # get rid of index columns which don't refer to an actual GA dimension * # add index columns which were missing, single-valued GA dimensions * columns = np.hsplit(new_i,self.ndim) # returns a list # <<<<<<<<<<<<<< * column_iter = iter(columns) * new_columns = [None]*self.global_slice.get_original_ndim() */ __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s__hsplit); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__ndim); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_new_i); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_new_i); __Pyx_GIVEREF(__pyx_v_new_i); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_11); __Pyx_GIVEREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_v_columns = __pyx_t_11; __pyx_t_11 = 0; /* "ga4py/gain/core.pyx":551 * # add index columns which were missing, single-valued GA dimensions * columns = np.hsplit(new_i,self.ndim) # returns a list * column_iter = iter(columns) # <<<<<<<<<<<<<< * new_columns = [None]*self.global_slice.get_original_ndim() * for fixed in self.global_slice.fixed: */ __pyx_t_11 = PyObject_GetIter(__pyx_v_columns); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 551; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_v_column_iter = __pyx_t_11; __pyx_t_11 = 0; /* "ga4py/gain/core.pyx":552 * columns = np.hsplit(new_i,self.ndim) # returns a list * column_iter = iter(columns) * new_columns = [None]*self.global_slice.get_original_ndim() # <<<<<<<<<<<<<< * for fixed in self.global_slice.fixed: * new_column = np.empty((len(new_i),1),dtype=np.int64) */ __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s__get_original_ndim); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(Py_None); PyList_SET_ITEM(__pyx_t_4, 0, Py_None); __Pyx_GIVEREF(Py_None); { PyObject* __pyx_temp = PyNumber_InPlaceMultiply(__pyx_t_4, __pyx_t_11); if (unlikely(!__pyx_temp)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_temp); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = __pyx_temp; } __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_v_new_columns = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":553 * column_iter = iter(columns) * new_columns = [None]*self.global_slice.get_original_ndim() * for fixed in self.global_slice.fixed: # <<<<<<<<<<<<<< * new_column = np.empty((len(new_i),1),dtype=np.int64) * new_column[:] = fixed.value */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__fixed); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyList_CheckExact(__pyx_t_11) || PyTuple_CheckExact(__pyx_t_11)) { __pyx_t_4 = __pyx_t_11; __Pyx_INCREF(__pyx_t_4); __pyx_t_7 = 0; __pyx_t_8 = NULL; } else { __pyx_t_7 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext; } __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; for (;;) { if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_4)) { if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_4)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_11 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_7); __Pyx_INCREF(__pyx_t_11); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_11 = PySequence_ITEM(__pyx_t_4, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_4)) { if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_4)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_7); __Pyx_INCREF(__pyx_t_11); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_11 = PySequence_ITEM(__pyx_t_4, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_11 = __pyx_t_8(__pyx_t_4); if (unlikely(!__pyx_t_11)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_11); } __Pyx_XDECREF_SET(__pyx_v_fixed, __pyx_t_11); __pyx_t_11 = 0; /* "ga4py/gain/core.pyx":554 * new_columns = [None]*self.global_slice.get_original_ndim() * for fixed in self.global_slice.fixed: * new_column = np.empty((len(new_i),1),dtype=np.int64) # <<<<<<<<<<<<<< * new_column[:] = fixed.value * new_columns[fixed.origin] = new_column */ __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_12 = PyObject_Length(__pyx_v_new_i); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_11 = PyInt_FromSsize_t(__pyx_t_12); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_11); __Pyx_GIVEREF(__pyx_t_11); __Pyx_INCREF(__pyx_int_1); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_1); __Pyx_GIVEREF(__pyx_int_1); __pyx_t_11 = 0; __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_11, 0, ((PyObject *)__pyx_t_5)); __Pyx_GIVEREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__int64); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_XDECREF_SET(__pyx_v_new_column, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":555 * for fixed in self.global_slice.fixed: * new_column = np.empty((len(new_i),1),dtype=np.int64) * new_column[:] = fixed.value # <<<<<<<<<<<<<< * new_columns[fixed.origin] = new_column * for col,gs in zip(columns,self.global_slice.data): */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_fixed, __pyx_n_s__value); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (__Pyx_PyObject_SetSlice(__pyx_v_new_column, __pyx_t_2, 0, 0, NULL, NULL, &__pyx_k_slice_14, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":556 * new_column = np.empty((len(new_i),1),dtype=np.int64) * new_column[:] = fixed.value * new_columns[fixed.origin] = new_column # <<<<<<<<<<<<<< * for col,gs in zip(columns,self.global_slice.data): * if isinstance(gs, util.RangeKey): */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_fixed, __pyx_n_s__origin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(((PyObject *)__pyx_v_new_columns), __pyx_t_2, __pyx_v_new_column) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":557 * new_column[:] = fixed.value * new_columns[fixed.origin] = new_column * for col,gs in zip(columns,self.global_slice.data): # <<<<<<<<<<<<<< * if isinstance(gs, util.RangeKey): * # no change to column */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__data); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_columns); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_columns); __Pyx_GIVEREF(__pyx_v_columns); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_zip, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __pyx_t_7 = 0; __pyx_t_8 = NULL; } else { __pyx_t_7 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_4)) { if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_4)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_7); __Pyx_INCREF(__pyx_t_2); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_4)) { if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_4)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_7); __Pyx_INCREF(__pyx_t_2); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_2 = __pyx_t_8(__pyx_t_4); if (unlikely(!__pyx_t_2)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_2); } if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { PyObject* sequence = __pyx_t_2; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_5 = PyList_GET_ITEM(sequence, 0); __pyx_t_11 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_11); #else __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); #endif __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { Py_ssize_t index = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_13 = Py_TYPE(__pyx_t_1)->tp_iternext; index = 0; __pyx_t_5 = __pyx_t_13(__pyx_t_1); if (unlikely(!__pyx_t_5)) goto __pyx_L11_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); index = 1; __pyx_t_11 = __pyx_t_13(__pyx_t_1); if (unlikely(!__pyx_t_11)) goto __pyx_L11_unpacking_failed; __Pyx_GOTREF(__pyx_t_11); if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_1), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_13 = NULL; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L12_unpacking_done; __pyx_L11_unpacking_failed:; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_13 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L12_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_col, __pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF_SET(__pyx_v_gs, __pyx_t_11); __pyx_t_11 = 0; /* "ga4py/gain/core.pyx":558 * new_columns[fixed.origin] = new_column * for col,gs in zip(columns,self.global_slice.data): * if isinstance(gs, util.RangeKey): # <<<<<<<<<<<<<< * # no change to column * new_columns[gs.origin] = col */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__RangeKey); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_9 = PyObject_IsInstance(__pyx_v_gs, __pyx_t_11); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_6 = (__pyx_t_9 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":560 * if isinstance(gs, util.RangeKey): * # no change to column * new_columns[gs.origin] = col # <<<<<<<<<<<<<< * elif isinstance(gs, util.NoneKey): * # skip column */ __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_gs, __pyx_n_s__origin); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); if (PyObject_SetItem(((PyObject *)__pyx_v_new_columns), __pyx_t_11, __pyx_v_col) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L13; } /* "ga4py/gain/core.pyx":561 * # no change to column * new_columns[gs.origin] = col * elif isinstance(gs, util.NoneKey): # <<<<<<<<<<<<<< * # skip column * pass */ __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s__NoneKey); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_6 = PyObject_IsInstance(__pyx_v_gs, __pyx_t_2); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_9 = (__pyx_t_6 != 0); if (__pyx_t_9) { goto __pyx_L13; } /* "ga4py/gain/core.pyx":564 * # skip column * pass * elif isinstance(gs, util.FixedKey): # <<<<<<<<<<<<<< * raise TypeError, "FixedKey found in MasterKey" * else: */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__FixedKey); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_9 = PyObject_IsInstance(__pyx_v_gs, __pyx_t_11); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_6 = (__pyx_t_9 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":565 * pass * elif isinstance(gs, util.FixedKey): * raise TypeError, "FixedKey found in MasterKey" # <<<<<<<<<<<<<< * else: * raise TypeError, "unhandled piece of global_slice" */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_15), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L13; } /*else*/ { /* "ga4py/gain/core.pyx":567 * raise TypeError, "FixedKey found in MasterKey" * else: * raise TypeError, "unhandled piece of global_slice" # <<<<<<<<<<<<<< * new_i = np.hstack(new_columns) * return ga.gather(self.handle, new_i) */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_9), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L13:; } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":568 * else: * raise TypeError, "unhandled piece of global_slice" * new_i = np.hstack(new_columns) # <<<<<<<<<<<<<< * return ga.gather(self.handle, new_i) * */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__hstack); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(((PyObject *)__pyx_v_new_columns)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_new_columns)); __Pyx_GIVEREF(((PyObject *)__pyx_v_new_columns)); __pyx_t_2 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_new_i, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":569 * raise TypeError, "unhandled piece of global_slice" * new_i = np.hstack(new_columns) * return ga.gather(self.handle, new_i) # <<<<<<<<<<<<<< * * def release(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__gather); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__handle); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_new_i); PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_new_i); __Pyx_GIVEREF(__pyx_v_new_i); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_11); __Pyx_AddTraceback("ga4py.gain.core.ndarray.gather", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_step); __Pyx_XDECREF(__pyx_v_start); __Pyx_XDECREF(__pyx_v_gs); __Pyx_XDECREF(__pyx_v_new_i); __Pyx_XDECREF(__pyx_v_columns); __Pyx_XDECREF(__pyx_v_column_iter); __Pyx_XDECREF(__pyx_v_new_columns); __Pyx_XDECREF(__pyx_v_fixed); __Pyx_XDECREF(__pyx_v_new_column); __Pyx_XDECREF(__pyx_v_col); __Pyx_XDECREF(__pyx_v_i); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_19release(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_19release = {__Pyx_NAMESTR("release"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_19release, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_19release(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_18release(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":571 * return ga.gather(self.handle, new_i) * * def release(self): # <<<<<<<<<<<<<< * ga.release(self.handle) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_18release(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("release", 0); __Pyx_TraceCall("release", __pyx_f[0], 571); /* "ga4py/gain/core.pyx":572 * * def release(self): * ga.release(self.handle) # <<<<<<<<<<<<<< * * def release_update(self): */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__release); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__handle); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.release", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_21release_update(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_21release_update = {__Pyx_NAMESTR("release_update"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_21release_update, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_21release_update(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_update (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_20release_update(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":574 * ga.release(self.handle) * * def release_update(self): # <<<<<<<<<<<<<< * ga.release_update(self.handle) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_20release_update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("release_update", 0); __Pyx_TraceCall("release_update", __pyx_f[0], 574); /* "ga4py/gain/core.pyx":575 * * def release_update(self): * ga.release_update(self.handle) # <<<<<<<<<<<<<< * * ################################################################ */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__release_update); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__handle); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.release_update", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_23_get_T(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_23_get_T = {__Pyx_NAMESTR("_get_T"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_23_get_T, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_23_get_T(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_T (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_22_get_T(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":581 * ################################################################ * * def _get_T(self): # <<<<<<<<<<<<<< * return self.transpose() * T = property(_get_T) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_22_get_T(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_T", 0); __Pyx_TraceCall("_get_T", __pyx_f[0], 581); /* "ga4py/gain/core.pyx":582 * * def _get_T(self): * return self.transpose() # <<<<<<<<<<<<<< * T = property(_get_T) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__transpose); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_T", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_25_get_data(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_25_get_data = {__Pyx_NAMESTR("_get_data"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_25_get_data, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_25_get_data(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_data (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_24_get_data(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":585 * T = property(_get_T) * * def _get_data(self): # <<<<<<<<<<<<<< * a = self.access() * if a is not None: */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_24_get_data(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_a = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_data", 0); __Pyx_TraceCall("_get_data", __pyx_f[0], 585); /* "ga4py/gain/core.pyx":586 * * def _get_data(self): * a = self.access() # <<<<<<<<<<<<<< * if a is not None: * return a.data */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__access); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_a = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":587 * def _get_data(self): * a = self.access() * if a is not None: # <<<<<<<<<<<<<< * return a.data * return None */ __pyx_t_3 = (__pyx_v_a != Py_None); __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":588 * a = self.access() * if a is not None: * return a.data # <<<<<<<<<<<<<< * return None * data = property(_get_data) */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__data); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":589 * if a is not None: * return a.data * return None # <<<<<<<<<<<<<< * data = property(_get_data) * */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_None); __pyx_r = Py_None; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_data", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_a); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_27_get_dtype(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_27_get_dtype = {__Pyx_NAMESTR("_get_dtype"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_27_get_dtype, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_27_get_dtype(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_dtype (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_26_get_dtype(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":592 * data = property(_get_data) * * def _get_dtype(self): # <<<<<<<<<<<<<< * return self._dtype * dtype = property(_get_dtype) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_26_get_dtype(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_dtype", 0); __Pyx_TraceCall("_get_dtype", __pyx_f[0], 592); /* "ga4py/gain/core.pyx":593 * * def _get_dtype(self): * return self._dtype # <<<<<<<<<<<<<< * dtype = property(_get_dtype) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_dtype", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_29_get_flags(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_29_get_flags = {__Pyx_NAMESTR("_get_flags"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_29_get_flags, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_29_get_flags(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_flags (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_28_get_flags(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":596 * dtype = property(_get_dtype) * * def _get_flags(self): # <<<<<<<<<<<<<< * return self._flags * flags = property(_get_flags) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_28_get_flags(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_flags", 0); __Pyx_TraceCall("_get_flags", __pyx_f[0], 596); /* "ga4py/gain/core.pyx":597 * * def _get_flags(self): * return self._flags # <<<<<<<<<<<<<< * flags = property(_get_flags) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___flags); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_flags", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_31_get_flat(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_31_get_flat = {__Pyx_NAMESTR("_get_flat"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_31_get_flat, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_31_get_flat(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_flat (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_30_get_flat(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":600 * flags = property(_get_flags) * * def _get_flat(self): # <<<<<<<<<<<<<< * return flatiter(self) * def _set_flat(self, value): */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_30_get_flat(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_flat", 0); __Pyx_TraceCall("_get_flat", __pyx_f[0], 600); /* "ga4py/gain/core.pyx":601 * * def _get_flat(self): * return flatiter(self) # <<<<<<<<<<<<<< * def _set_flat(self, value): * a = flatiter(self) */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__flatiter); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_flat", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_33_set_flat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_33_set_flat = {__Pyx_NAMESTR("_set_flat"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_33_set_flat, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_33_set_flat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_value = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_set_flat (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__value,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("_set_flat", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_set_flat") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_value = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_set_flat", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray._set_flat", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_32_set_flat(__pyx_self, __pyx_v_self, __pyx_v_value); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":602 * def _get_flat(self): * return flatiter(self) * def _set_flat(self, value): # <<<<<<<<<<<<<< * a = flatiter(self) * a[:] = value */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_32_set_flat(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_value) { PyObject *__pyx_v_a = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_set_flat", 0); __Pyx_TraceCall("_set_flat", __pyx_f[0], 602); /* "ga4py/gain/core.pyx":603 * return flatiter(self) * def _set_flat(self, value): * a = flatiter(self) # <<<<<<<<<<<<<< * a[:] = value * flat = property(_get_flat,_set_flat) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__flatiter); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_a = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":604 * def _set_flat(self, value): * a = flatiter(self) * a[:] = value # <<<<<<<<<<<<<< * flat = property(_get_flat,_set_flat) * */ if (__Pyx_PyObject_SetSlice(__pyx_v_a, __pyx_v_value, 0, 0, NULL, NULL, &__pyx_k_slice_16, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray._set_flat", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_a); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_35_get_imag(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_35_get_imag = {__Pyx_NAMESTR("_get_imag"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_35_get_imag, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_35_get_imag(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_imag (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_34_get_imag(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":607 * flat = property(_get_flat,_set_flat) * * def _get_imag(self): # <<<<<<<<<<<<<< * if self._dtype.kind != 'c': * return zeros(self.shape, self.dtype) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_34_get_imag(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_ret = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_imag", 0); __Pyx_TraceCall("_get_imag", __pyx_f[0], 607); /* "ga4py/gain/core.pyx":608 * * def _get_imag(self): * if self._dtype.kind != 'c': # <<<<<<<<<<<<<< * return zeros(self.shape, self.dtype) * else: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__kind); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, ((PyObject *)__pyx_n_s__c), Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":609 * def _get_imag(self): * if self._dtype.kind != 'c': * return zeros(self.shape, self.dtype) # <<<<<<<<<<<<<< * else: * ret = self[:] */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__zeros); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":611 * return zeros(self.shape, self.dtype) * else: * ret = self[:] # <<<<<<<<<<<<<< * ret._is_imag = True * ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) */ __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_v_self, 0, 0, NULL, NULL, &__pyx_k_slice_17, 0, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_v_ret = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":612 * else: * ret = self[:] * ret._is_imag = True # <<<<<<<<<<<<<< * ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) * return ret */ __pyx_t_4 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (__Pyx_PyObject_SetAttrStr(__pyx_v_ret, __pyx_n_s___is_imag, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":613 * ret = self[:] * ret._is_imag = True * ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) # <<<<<<<<<<<<<< * return ret * def _set_imag(self, value): */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__itemsize); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_5, __pyx_int_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyNumber_Multiply(__pyx_t_4, __pyx_int_8); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_18), __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_4)); __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_ret, __pyx_n_s___dtype, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":614 * ret._is_imag = True * ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) * return ret # <<<<<<<<<<<<<< * def _set_imag(self, value): * if self._dtype.kind != 'c': */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_ret); __pyx_r = __pyx_v_ret; goto __pyx_L0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_imag", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_ret); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_37_set_imag(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_37_set_imag = {__Pyx_NAMESTR("_set_imag"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_37_set_imag, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_37_set_imag(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_value = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_set_imag (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__value,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("_set_imag", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_set_imag") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_value = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_set_imag", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray._set_imag", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_36_set_imag(__pyx_self, __pyx_v_self, __pyx_v_value); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":615 * ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) * return ret * def _set_imag(self, value): # <<<<<<<<<<<<<< * if self._dtype.kind != 'c': * raise TypeError, "array does not have imaginary part to set" */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_36_set_imag(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_value) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_set_imag", 0); __Pyx_TraceCall("_set_imag", __pyx_f[0], 615); /* "ga4py/gain/core.pyx":616 * return ret * def _set_imag(self, value): * if self._dtype.kind != 'c': # <<<<<<<<<<<<<< * raise TypeError, "array does not have imaginary part to set" * else: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__kind); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, ((PyObject *)__pyx_n_s__c), Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":617 * def _set_imag(self, value): * if self._dtype.kind != 'c': * raise TypeError, "array does not have imaginary part to set" # <<<<<<<<<<<<<< * else: * self._get_imag()[:] = value */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_19), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":619 * raise TypeError, "array does not have imaginary part to set" * else: * self._get_imag()[:] = value # <<<<<<<<<<<<<< * imag = property(_get_imag,_set_imag) * */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___get_imag); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__Pyx_PyObject_SetSlice(__pyx_t_2, __pyx_v_value, 0, 0, NULL, NULL, &__pyx_k_slice_20, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ndarray._set_imag", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_39_get_real(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_39_get_real = {__Pyx_NAMESTR("_get_real"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_39_get_real, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_39_get_real(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_real (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_38_get_real(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":622 * imag = property(_get_imag,_set_imag) * * def _get_real(self): # <<<<<<<<<<<<<< * if self._dtype.kind != 'c': * return self */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_38_get_real(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_ret = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_real", 0); __Pyx_TraceCall("_get_real", __pyx_f[0], 622); /* "ga4py/gain/core.pyx":623 * * def _get_real(self): * if self._dtype.kind != 'c': # <<<<<<<<<<<<<< * return self * else: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__kind); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, ((PyObject *)__pyx_n_s__c), Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":624 * def _get_real(self): * if self._dtype.kind != 'c': * return self # <<<<<<<<<<<<<< * else: * ret = self[:] */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self); __pyx_r = __pyx_v_self; goto __pyx_L0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":626 * return self * else: * ret = self[:] # <<<<<<<<<<<<<< * ret._is_real = True * ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) */ __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_self, 0, 0, NULL, NULL, &__pyx_k_slice_21, 0, 0, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_ret = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":627 * else: * ret = self[:] * ret._is_real = True # <<<<<<<<<<<<<< * ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) * return ret */ __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (__Pyx_PyObject_SetAttrStr(__pyx_v_ret, __pyx_n_s___is_real, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":628 * ret = self[:] * ret._is_real = True * ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) # <<<<<<<<<<<<<< * return ret * def _set_real(self, value): */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__itemsize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_int_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_int_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_18), __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_1)); __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_ret, __pyx_n_s___dtype, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":629 * ret._is_real = True * ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) * return ret # <<<<<<<<<<<<<< * def _set_real(self, value): * self._get_real()[:] = value */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_ret); __pyx_r = __pyx_v_ret; goto __pyx_L0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_real", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_ret); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_41_set_real(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_41_set_real = {__Pyx_NAMESTR("_set_real"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_41_set_real, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_41_set_real(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_value = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_set_real (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__value,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("_set_real", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_set_real") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_value = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_set_real", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray._set_real", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_40_set_real(__pyx_self, __pyx_v_self, __pyx_v_value); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":630 * ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) * return ret * def _set_real(self, value): # <<<<<<<<<<<<<< * self._get_real()[:] = value * real = property(_get_real,_set_real) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_40_set_real(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_value) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_set_real", 0); __Pyx_TraceCall("_set_real", __pyx_f[0], 630); /* "ga4py/gain/core.pyx":631 * return ret * def _set_real(self, value): * self._get_real()[:] = value # <<<<<<<<<<<<<< * real = property(_get_real,_set_real) * */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___get_real); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__Pyx_PyObject_SetSlice(__pyx_t_2, __pyx_v_value, 0, 0, NULL, NULL, &__pyx_k_slice_22, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ndarray._set_real", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_43_get_size(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_43_get_size = {__Pyx_NAMESTR("_get_size"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_43_get_size, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_43_get_size(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_size (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_42_get_size(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_9_get_size_lambda1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_9_get_size_lambda1 = {__Pyx_NAMESTR("lambda1"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_9_get_size_lambda1, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_9_get_size_lambda1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_x = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("lambda1 (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("lambda1", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "lambda1") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_x = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("lambda1", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_size.lambda1", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_lambda_funcdef_lambda1(__pyx_self, __pyx_v_x, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":635 * * def _get_size(self): * return reduce(lambda x,y: x*y, self.shape, 1) # <<<<<<<<<<<<<< * size = property(_get_size) * */ static PyObject *__pyx_lambda_funcdef_lambda1(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("lambda1", 0); __Pyx_TraceCall("lambda1", __pyx_f[0], 635); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyNumber_Multiply(__pyx_v_x, __pyx_v_y); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_size.lambda1", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":634 * real = property(_get_real,_set_real) * * def _get_size(self): # <<<<<<<<<<<<<< * return reduce(lambda x,y: x*y, self.shape, 1) * size = property(_get_size) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_42_get_size(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_size", 0); __Pyx_TraceCall("_get_size", __pyx_f[0], 634); /* "ga4py/gain/core.pyx":635 * * def _get_size(self): * return reduce(lambda x,y: x*y, self.shape, 1) # <<<<<<<<<<<<<< * size = property(_get_size) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_9_get_size_lambda1, 0, __pyx_n_s_23, NULL, __pyx_n_s_24, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(__pyx_int_1); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_int_1); __Pyx_GIVEREF(__pyx_int_1); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_reduce, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_size", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_45_get_itemsize(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_45_get_itemsize = {__Pyx_NAMESTR("_get_itemsize"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_45_get_itemsize, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_45_get_itemsize(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_itemsize (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_44_get_itemsize(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":638 * size = property(_get_size) * * def _get_itemsize(self): # <<<<<<<<<<<<<< * return self._dtype.itemsize * itemsize = property(_get_itemsize) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_44_get_itemsize(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_itemsize", 0); __Pyx_TraceCall("_get_itemsize", __pyx_f[0], 638); /* "ga4py/gain/core.pyx":639 * * def _get_itemsize(self): * return self._dtype.itemsize # <<<<<<<<<<<<<< * itemsize = property(_get_itemsize) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___dtype); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__itemsize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_itemsize", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_47_get_nbytes(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_47_get_nbytes = {__Pyx_NAMESTR("_get_nbytes"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_47_get_nbytes, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_47_get_nbytes(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_nbytes (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_46_get_nbytes(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":642 * itemsize = property(_get_itemsize) * * def _get_nbytes(self): # <<<<<<<<<<<<<< * return self.itemsize * self.size * nbytes = property(_get_nbytes) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_46_get_nbytes(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_nbytes", 0); __Pyx_TraceCall("_get_nbytes", __pyx_f[0], 642); /* "ga4py/gain/core.pyx":643 * * def _get_nbytes(self): * return self.itemsize * self.size # <<<<<<<<<<<<<< * nbytes = property(_get_nbytes) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__itemsize); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_nbytes", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_49_get_ndim(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_49_get_ndim = {__Pyx_NAMESTR("_get_ndim"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_49_get_ndim, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_49_get_ndim(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_ndim (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_48_get_ndim(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":646 * nbytes = property(_get_nbytes) * * def _get_ndim(self): # <<<<<<<<<<<<<< * return len(self.shape) * ndim = property(_get_ndim) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_48_get_ndim(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; Py_ssize_t __pyx_t_2; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_ndim", 0); __Pyx_TraceCall("_get_ndim", __pyx_f[0], 646); /* "ga4py/gain/core.pyx":647 * * def _get_ndim(self): * return len(self.shape) # <<<<<<<<<<<<<< * ndim = property(_get_ndim) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_ndim", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_51_get_shape(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_51_get_shape = {__Pyx_NAMESTR("_get_shape"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_51_get_shape, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_51_get_shape(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_shape (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_50_get_shape(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":650 * ndim = property(_get_ndim) * * def _get_shape(self): # <<<<<<<<<<<<<< * return self.global_slice.shape * def _set_shape(self, value): */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_50_get_shape(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_shape", 0); __Pyx_TraceCall("_get_shape", __pyx_f[0], 650); /* "ga4py/gain/core.pyx":651 * * def _get_shape(self): * return self.global_slice.shape # <<<<<<<<<<<<<< * def _set_shape(self, value): * if self.base is None: */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_shape", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_53_set_shape(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_53_set_shape = {__Pyx_NAMESTR("_set_shape"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_53_set_shape, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_53_set_shape(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_value = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_set_shape (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__value,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("_set_shape", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_set_shape") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_value = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_set_shape", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray._set_shape", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_52_set_shape(__pyx_self, __pyx_v_self, __pyx_v_value); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":652 * def _get_shape(self): * return self.global_slice.shape * def _set_shape(self, value): # <<<<<<<<<<<<<< * if self.base is None: * # we can change the underlying GA */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_52_set_shape(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_value) { PyObject *__pyx_v_a = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_set_shape", 0); __Pyx_TraceCall("_set_shape", __pyx_f[0], 652); /* "ga4py/gain/core.pyx":653 * return self.global_slice.shape * def _set_shape(self, value): * if self.base is None: # <<<<<<<<<<<<<< * # we can change the underlying GA * # we do this by creating a new ndarray and copying properties */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__base); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__pyx_t_1 == Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":656 * # we can change the underlying GA * # we do this by creating a new ndarray and copying properties * a = self.reshape(value) # <<<<<<<<<<<<<< * ga.destroy(self.handle) * self.handle = a.handle */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__reshape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_value); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_v_a = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":657 * # we do this by creating a new ndarray and copying properties * a = self.reshape(value) * ga.destroy(self.handle) # <<<<<<<<<<<<<< * self.handle = a.handle * self.global_slice = a.global_slice */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__destroy); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__handle); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":658 * a = self.reshape(value) * ga.destroy(self.handle) * self.handle = a.handle # <<<<<<<<<<<<<< * self.global_slice = a.global_slice * self._strides = a.strides */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__handle); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__handle, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":659 * ga.destroy(self.handle) * self.handle = a.handle * self.global_slice = a.global_slice # <<<<<<<<<<<<<< * self._strides = a.strides * self._flags = a._flags */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__global_slice, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":660 * self.handle = a.handle * self.global_slice = a.global_slice * self._strides = a.strides # <<<<<<<<<<<<<< * self._flags = a._flags * else: */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__strides); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___strides, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":661 * self.global_slice = a.global_slice * self._strides = a.strides * self._flags = a._flags # <<<<<<<<<<<<<< * else: * raise AttributeError, "incompatible shape for a non-contiguous array" */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s___flags); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___flags, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":663 * self._flags = a._flags * else: * raise AttributeError, "incompatible shape for a non-contiguous array" # <<<<<<<<<<<<<< * shape = property(_get_shape, _set_shape) * */ __Pyx_Raise(__pyx_builtin_AttributeError, ((PyObject *)__pyx_kp_s_25), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 663; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("ga4py.gain.core.ndarray._set_shape", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_a); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_55_get_strides(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_55_get_strides = {__Pyx_NAMESTR("_get_strides"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_55_get_strides, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_55_get_strides(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_strides (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_54_get_strides(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":666 * shape = property(_get_shape, _set_shape) * * def _get_strides(self): # <<<<<<<<<<<<<< * strides = [self.itemsize] * for size in self.shape[-1:0:-1]: */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_54_get_strides(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_strides = NULL; PyObject *__pyx_v_size = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; Py_ssize_t __pyx_t_3; PyObject *(*__pyx_t_4)(PyObject *); PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_strides", 0); __Pyx_TraceCall("_get_strides", __pyx_f[0], 666); /* "ga4py/gain/core.pyx":667 * * def _get_strides(self): * strides = [self.itemsize] # <<<<<<<<<<<<<< * for size in self.shape[-1:0:-1]: * strides = [size*strides[0]] + strides */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__itemsize); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_strides = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":668 * def _get_strides(self): * strides = [self.itemsize] * for size in self.shape[-1:0:-1]: # <<<<<<<<<<<<<< * strides = [size*strides[0]] + strides * return strides */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_GetItem(__pyx_t_2, __pyx_k_slice_26); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) { if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) { if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_1 = __pyx_t_4(__pyx_t_2); if (unlikely(!__pyx_t_1)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_1); } __Pyx_XDECREF_SET(__pyx_v_size, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":669 * strides = [self.itemsize] * for size in self.shape[-1:0:-1]: * strides = [size*strides[0]] + strides # <<<<<<<<<<<<<< * return strides * strides = property(_get_strides) */ __pyx_t_1 = __Pyx_GetItemInt_List(((PyObject *)__pyx_v_strides), 0, sizeof(long), PyInt_FromLong, 1, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyNumber_Multiply(__pyx_v_size, __pyx_t_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyNumber_Add(((PyObject *)__pyx_t_1), ((PyObject *)__pyx_v_strides)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_strides, ((PyObject*)__pyx_t_5)); __pyx_t_5 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":670 * for size in self.shape[-1:0:-1]: * strides = [size*strides[0]] + strides * return strides # <<<<<<<<<<<<<< * strides = property(_get_strides) * */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_strides)); __pyx_r = ((PyObject *)__pyx_v_strides); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_strides", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_strides); __Pyx_XDECREF(__pyx_v_size); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_57_get_ctypes(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_57_get_ctypes = {__Pyx_NAMESTR("_get_ctypes"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_57_get_ctypes, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_57_get_ctypes(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_ctypes (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_56_get_ctypes(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":673 * strides = property(_get_strides) * * def _get_ctypes(self): # <<<<<<<<<<<<<< * raise NotImplementedError, "TODO" * ctypes = property(_get_ctypes) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_56_get_ctypes(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_ctypes", 0); __Pyx_TraceCall("_get_ctypes", __pyx_f[0], 673); /* "ga4py/gain/core.pyx":674 * * def _get_ctypes(self): * raise NotImplementedError, "TODO" # <<<<<<<<<<<<<< * ctypes = property(_get_ctypes) * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_n_s__TODO), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_ctypes", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_59_get_base(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_59_get_base = {__Pyx_NAMESTR("_get_base"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_59_get_base, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_59_get_base(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_base (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_58_get_base(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":677 * ctypes = property(_get_ctypes) * * def _get_base(self): # <<<<<<<<<<<<<< * return self._base * base = property(_get_base) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_58_get_base(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_base", 0); __Pyx_TraceCall("_get_base", __pyx_f[0], 677); /* "ga4py/gain/core.pyx":678 * * def _get_base(self): * return self._base # <<<<<<<<<<<<<< * base = property(_get_base) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___base); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.ndarray._get_base", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_61all(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_60all[] = "Returns True if all elements evaluate to True.\n\n Refer to `numpy.all` for full documentation.\n\n See Also\n --------\n numpy.all : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_61all = {__Pyx_NAMESTR("all"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_61all, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_60all)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_61all(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("all (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/core.pyx":684 * ### ndarray methods * ################################################################ * def all(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Returns True if all elements evaluate to True. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "all") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 684; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("all", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 684; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.all", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_60all(__pyx_self, __pyx_v_self, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_60all(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("all", 0); __Pyx_TraceCall("all", __pyx_f[0], 684); /* "ga4py/gain/core.pyx":694 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def any(self, axis=None, out=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 694; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.all", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_63any(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_62any[] = " Returns True if any of the elements of `a` evaluate to True.\n\n Refer to `numpy.any` for full documentation.\n\n See Also\n --------\n numpy.any : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_63any = {__Pyx_NAMESTR("any"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_63any, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_62any)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_63any(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("any (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/core.pyx":696 * raise NotImplementedError * * def any(self, axis=None, out=None): # <<<<<<<<<<<<<< * """ Returns True if any of the elements of `a` evaluate to True. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "any") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("any", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.any", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_62any(__pyx_self, __pyx_v_self, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_62any(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("any", 0); __Pyx_TraceCall("any", __pyx_f[0], 696); /* "ga4py/gain/core.pyx":706 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def argmax(self, axis=None, out=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 706; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.any", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_65argmax(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_64argmax[] = "Return indices of the maximum values along the given axis.\n\n Refer to `numpy.argmax` for full documentation.\n\n See Also\n --------\n numpy.argmax : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_65argmax = {__Pyx_NAMESTR("argmax"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_65argmax, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_64argmax)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_65argmax(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("argmax (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/core.pyx":708 * raise NotImplementedError * * def argmax(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Return indices of the maximum values along the given axis. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "argmax") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("argmax", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.argmax", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_64argmax(__pyx_self, __pyx_v_self, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_64argmax(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("argmax", 0); __Pyx_TraceCall("argmax", __pyx_f[0], 708); /* "ga4py/gain/core.pyx":718 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def argmin(self, axis=None, out=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.argmax", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_67argmin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_66argmin[] = "Return indices of the minimum values along the given axis of `a`.\n\n Refer to `numpy.argmin` for detailed documentation.\n\n See Also\n --------\n numpy.argmin : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_67argmin = {__Pyx_NAMESTR("argmin"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_67argmin, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_66argmin)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_67argmin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("argmin (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/core.pyx":720 * raise NotImplementedError * * def argmin(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Return indices of the minimum values along the given axis of `a`. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "argmin") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("argmin", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.argmin", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_66argmin(__pyx_self, __pyx_v_self, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_66argmin(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("argmin", 0); __Pyx_TraceCall("argmin", __pyx_f[0], 720); /* "ga4py/gain/core.pyx":730 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def argsort(self, axis=-1, kind='quicksort', order=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.argmin", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_69argsort(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_68argsort[] = "Returns the indices that would sort this array.\n\n Refer to `numpy.argsort` for full documentation.\n\n See Also\n --------\n numpy.argsort : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_69argsort = {__Pyx_NAMESTR("argsort"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_69argsort, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_68argsort)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_69argsort(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_kind = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("argsort (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axis,&__pyx_n_s__kind,&__pyx_n_s__order,0}; PyObject* values[4] = {0,0,0,0}; values[1] = ((PyObject *)((PyObject *)__pyx_int_neg_1)); values[2] = ((PyObject *)((PyObject*)__pyx_n_s__quicksort)); /* "ga4py/gain/core.pyx":732 * raise NotImplementedError * * def argsort(self, axis=-1, kind='quicksort', order=None): # <<<<<<<<<<<<<< * """Returns the indices that would sort this array. * */ values[3] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__kind); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "argsort") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_axis = values[1]; __pyx_v_kind = values[2]; __pyx_v_order = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("argsort", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.argsort", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_68argsort(__pyx_self, __pyx_v_self, __pyx_v_axis, __pyx_v_kind, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_68argsort(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_kind, CYTHON_UNUSED PyObject *__pyx_v_order) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("argsort", 0); __Pyx_TraceCall("argsort", __pyx_f[0], 732); /* "ga4py/gain/core.pyx":742 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def astype(self, t): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 742; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.argsort", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_71astype(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_70astype[] = "Copy of the array, cast to a specified type.\n\n Parameters\n ----------\n t : string or dtype\n Typecode or data-type to which the array is cast.\n\n Examples\n --------\n >>> x = np.array([1, 2, 2.5])\n >>> x\n array([ 1. , 2. , 2.5])\n\n >>> x.astype(int)\n array([1, 2, 2])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_71astype = {__Pyx_NAMESTR("astype"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_71astype, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_70astype)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_71astype(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_t = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("astype (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__t,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__t)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("astype", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "astype") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_t = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("astype", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.astype", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_70astype(__pyx_self, __pyx_v_self, __pyx_v_t); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":744 * raise NotImplementedError * * def astype(self, t): # <<<<<<<<<<<<<< * """Copy of the array, cast to a specified type. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_70astype(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_t) { PyObject *__pyx_v_the_copy = NULL; PyObject *__pyx_v_local = NULL; PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; int __pyx_t_6; PyObject *(*__pyx_t_7)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("astype", 0); __Pyx_TraceCall("astype", __pyx_f[0], 744); /* "ga4py/gain/core.pyx":763 * """ * # TODO we can optimize a copy if new and old ndarray instances align * the_copy = ndarray(self.shape, dtype=t) # <<<<<<<<<<<<<< * if should_distribute(the_copy.size): * local = the_copy.access() */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_v_t) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_the_copy = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":764 * # TODO we can optimize a copy if new and old ndarray instances align * the_copy = ndarray(self.shape, dtype=t) * if should_distribute(the_copy.size): # <<<<<<<<<<<<<< * local = the_copy.access() * if local is not None: */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_the_copy, __pyx_n_s__size); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 764; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = (__pyx_f_5ga4py_4gain_4core_should_distribute(__pyx_t_4, 0) != 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) { /* "ga4py/gain/core.pyx":765 * the_copy = ndarray(self.shape, dtype=t) * if should_distribute(the_copy.size): * local = the_copy.access() # <<<<<<<<<<<<<< * if local is not None: * lo,hi = the_copy.distribution() */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_the_copy, __pyx_n_s__access); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_local = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":766 * if should_distribute(the_copy.size): * local = the_copy.access() * if local is not None: # <<<<<<<<<<<<<< * lo,hi = the_copy.distribution() * local[:] = self.get(ga.zip(lo,hi)) */ __pyx_t_5 = (__pyx_v_local != Py_None); __pyx_t_6 = (__pyx_t_5 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":767 * local = the_copy.access() * if local is not None: * lo,hi = the_copy.distribution() # <<<<<<<<<<<<<< * local[:] = self.get(ga.zip(lo,hi)) * the_copy.release_update() */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_the_copy, __pyx_n_s__distribution); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) { PyObject* sequence = __pyx_t_4; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_3 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { Py_ssize_t index = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_1)->tp_iternext; index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_1); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_1), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L6_unpacking_done:; } __pyx_v_lo = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_hi = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":768 * if local is not None: * lo,hi = the_copy.distribution() * local[:] = self.get(ga.zip(lo,hi)) # <<<<<<<<<<<<<< * the_copy.release_update() * else: */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__get); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__zip); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (__Pyx_PyObject_SetSlice(__pyx_v_local, __pyx_t_1, 0, 0, NULL, NULL, &__pyx_k_slice_27, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":769 * lo,hi = the_copy.distribution() * local[:] = self.get(ga.zip(lo,hi)) * the_copy.release_update() # <<<<<<<<<<<<<< * else: * # case where the copy is not distributed but the original was */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_the_copy, __pyx_n_s__release_update); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L4; } __pyx_L4:; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":772 * else: * # case where the copy is not distributed but the original was * the_copy[:] = self.allget() # <<<<<<<<<<<<<< * return the_copy * */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__allget); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__Pyx_PyObject_SetSlice(__pyx_v_the_copy, __pyx_t_1, 0, 0, NULL, NULL, &__pyx_k_slice_28, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } __pyx_L3:; /* "ga4py/gain/core.pyx":773 * # case where the copy is not distributed but the original was * the_copy[:] = self.allget() * return the_copy # <<<<<<<<<<<<<< * * def byteswap(self, inplace=False): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_the_copy); __pyx_r = __pyx_v_the_copy; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.core.ndarray.astype", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_the_copy); __Pyx_XDECREF(__pyx_v_local); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":775 * return the_copy * * def byteswap(self, inplace=False): # <<<<<<<<<<<<<< * """Swap the bytes of the array elements * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_320__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__defaults__", 0); __Pyx_TraceCall("__defaults__", __pyx_f[0], 775); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_self)->__pyx_arg_inplace); PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_self)->__pyx_arg_inplace); __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_self)->__pyx_arg_inplace); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_1)); __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); __Pyx_INCREF(Py_None); PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); __Pyx_GIVEREF(Py_None); __pyx_t_1 = 0; __pyx_r = ((PyObject *)__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_73byteswap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_72byteswap[] = "Swap the bytes of the array elements\n\n Toggle between low-endian and big-endian data representation by\n returning a byteswapped array, optionally swapped in-place.\n\n Parameters\n ----------\n inplace: bool, optional\n If ``True``, swap bytes in-place, default is ``False``.\n\n Returns\n -------\n out: ndarray\n The byteswapped array. If `inplace` is ``True``, this is\n a view to self.\n\n Examples\n --------\n >>> A = np.array([1, 256, 8755], dtype=np.int16)\n >>> map(hex, A)\n ['0x1', '0x100', '0x2233']\n >>> A.byteswap(True)\n array([ 256, 1, 13090], dtype=int16)\n >>> map(hex, A)\n ['0x100', '0x1', '0x3322']\n\n Arrays of strings are not swapped\n\n >>> A = np.array(['ceg', 'fac'])\n >>> A.byteswap()\n array(['ceg', 'fac'],\n dtype='|S3')\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_73byteswap = {__Pyx_NAMESTR("byteswap"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_73byteswap, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_72byteswap)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_73byteswap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_inplace = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("byteswap (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__inplace,0}; PyObject* values[2] = {0,0}; __pyx_defaults2 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_self); values[1] = __pyx_dynamic_args->__pyx_arg_inplace; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__inplace); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "byteswap") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_inplace = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("byteswap", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.byteswap", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_72byteswap(__pyx_self, __pyx_v_self, __pyx_v_inplace); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_72byteswap(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_inplace) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("byteswap", 0); __Pyx_TraceCall("byteswap", __pyx_f[0], 775); /* "ga4py/gain/core.pyx":810 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def choose(self, choices, out=None, mode='raise'): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 810; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.byteswap", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_75choose(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_74choose[] = "Use an index array to construct a new array from a set of choices.\n\n Refer to `numpy.choose` for full documentation.\n\n See Also\n --------\n numpy.choose : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_75choose = {__Pyx_NAMESTR("choose"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_75choose, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_74choose)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_75choose(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_choices = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; CYTHON_UNUSED PyObject *__pyx_v_mode = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("choose (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__choices,&__pyx_n_s__out,&__pyx_n_s__mode,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/core.pyx":812 * raise NotImplementedError * * def choose(self, choices, out=None, mode='raise'): # <<<<<<<<<<<<<< * """Use an index array to construct a new array from a set of choices. * */ values[2] = ((PyObject *)((PyObject *)Py_None)); values[3] = ((PyObject *)((PyObject*)__pyx_n_s__raise)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__choices)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("choose", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "choose") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_choices = values[1]; __pyx_v_out = values[2]; __pyx_v_mode = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("choose", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.choose", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_74choose(__pyx_self, __pyx_v_self, __pyx_v_choices, __pyx_v_out, __pyx_v_mode); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_74choose(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_choices, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_mode) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("choose", 0); __Pyx_TraceCall("choose", __pyx_f[0], 812); /* "ga4py/gain/core.pyx":822 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def clip(self, a_min, a_max, out=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.choose", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_77clip(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_76clip[] = "Return an array whose values are limited to ``[a_min, a_max]``.\n\n Refer to `numpy.clip` for full documentation.\n\n See Also\n --------\n numpy.clip : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_77clip = {__Pyx_NAMESTR("clip"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_77clip, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_76clip)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_77clip(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_a_min = 0; CYTHON_UNUSED PyObject *__pyx_v_a_max = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("clip (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__a_min,&__pyx_n_s__a_max,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/core.pyx":824 * raise NotImplementedError * * def clip(self, a_min, a_max, out=None): # <<<<<<<<<<<<<< * """Return an array whose values are limited to ``[a_min, a_max]``. * */ values[3] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a_min)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("clip", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a_max)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("clip", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "clip") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_a_min = values[1]; __pyx_v_a_max = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("clip", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.clip", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_76clip(__pyx_self, __pyx_v_self, __pyx_v_a_min, __pyx_v_a_max, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_76clip(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_a_min, CYTHON_UNUSED PyObject *__pyx_v_a_max, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("clip", 0); __Pyx_TraceCall("clip", __pyx_f[0], 824); /* "ga4py/gain/core.pyx":834 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def compress(self, condition, axis=None, out=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.clip", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_79compress(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_78compress[] = "Return selected slices of this array along given axis.\n\n Refer to `numpy.compress` for full documentation.\n\n See Also\n --------\n numpy.compress : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_79compress = {__Pyx_NAMESTR("compress"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_79compress, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_78compress)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_79compress(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_condition = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("compress (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__condition,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/core.pyx":836 * raise NotImplementedError * * def compress(self, condition, axis=None, out=None): # <<<<<<<<<<<<<< * """Return selected slices of this array along given axis. * */ values[2] = ((PyObject *)((PyObject *)Py_None)); values[3] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__condition)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("compress", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "compress") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_condition = values[1]; __pyx_v_axis = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("compress", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.compress", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_78compress(__pyx_self, __pyx_v_self, __pyx_v_condition, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_78compress(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_condition, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("compress", 0); __Pyx_TraceCall("compress", __pyx_f[0], 836); /* "ga4py/gain/core.pyx":846 * * """ * return NotImplementedError # <<<<<<<<<<<<<< * * def conj(self): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_builtin_NotImplementedError); __pyx_r = __pyx_builtin_NotImplementedError; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_81conj(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_80conj[] = "Complex-conjugate all elements.\n\n Refer to `numpy.conjugate` for full documentation.\n\n See Also\n --------\n numpy.conjugate : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_81conj = {__Pyx_NAMESTR("conj"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_81conj, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_80conj)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_81conj(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("conj (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_80conj(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":848 * return NotImplementedError * * def conj(self): # <<<<<<<<<<<<<< * """Complex-conjugate all elements. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_80conj(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("conj", 0); __Pyx_TraceCall("conj", __pyx_f[0], 848); /* "ga4py/gain/core.pyx":858 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def conjugate(self): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.conj", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_83conjugate(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_82conjugate[] = "Return the complex conjugate, element-wise.\n\n Refer to `numpy.conjugate` for full documentation.\n\n See Also\n --------\n numpy.conjugate : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_83conjugate = {__Pyx_NAMESTR("conjugate"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_83conjugate, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_82conjugate)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_83conjugate(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("conjugate (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_82conjugate(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":860 * raise NotImplementedError * * def conjugate(self): # <<<<<<<<<<<<<< * """Return the complex conjugate, element-wise. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_82conjugate(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("conjugate", 0); __Pyx_TraceCall("conjugate", __pyx_f[0], 860); /* "ga4py/gain/core.pyx":870 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def copy(self, order='C'): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.conjugate", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_85copy(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_84copy[] = "Return a copy of the array.\n\n Parameters\n ----------\n order : {'C', 'F', 'A'}, optional\n By default, the result is stored in C-contiguous (row-major) order in\n memory. If `order` is `F`, the result has 'Fortran' (column-major)\n order. If order is 'A' ('Any'), then the result has the same order\n as the input.\n\n Examples\n --------\n >>> x = np.array([[1,2,3],[4,5,6]], order='F')\n\n >>> y = x.copy()\n\n >>> x.fill(0)\n\n >>> x\n array([[0, 0, 0],\n [0, 0, 0]])\n\n >>> y\n array([[1, 2, 3],\n [4, 5, 6]])\n\n >>> y.flags['C_CONTIGUOUS']\n True\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_85copy = {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_85copy, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_84copy)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_85copy(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("copy (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__order,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)((PyObject*)__pyx_n_s__C)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "copy") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_order = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("copy", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_84copy(__pyx_self, __pyx_v_self, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":872 * raise NotImplementedError * * def copy(self, order='C'): # <<<<<<<<<<<<<< * """Return a copy of the array. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_84copy(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_order) { PyObject *__pyx_v_the_copy = NULL; PyObject *__pyx_v_local = NULL; PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; int __pyx_t_6; PyObject *(*__pyx_t_7)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("copy", 0); __Pyx_TraceCall("copy", __pyx_f[0], 872); /* "ga4py/gain/core.pyx":904 * """ * # TODO we can optimize a copy if new and old ndarray instances align * the_copy = ndarray(self.shape, dtype=self.dtype) # <<<<<<<<<<<<<< * if should_distribute(the_copy.size): * local = the_copy.access() */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 904; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 904; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 904; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 904; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 904; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 904; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 904; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_the_copy = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":905 * # TODO we can optimize a copy if new and old ndarray instances align * the_copy = ndarray(self.shape, dtype=self.dtype) * if should_distribute(the_copy.size): # <<<<<<<<<<<<<< * local = the_copy.access() * if local is not None: */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_the_copy, __pyx_n_s__size); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = (__pyx_f_5ga4py_4gain_4core_should_distribute(__pyx_t_4, 0) != 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) { /* "ga4py/gain/core.pyx":906 * the_copy = ndarray(self.shape, dtype=self.dtype) * if should_distribute(the_copy.size): * local = the_copy.access() # <<<<<<<<<<<<<< * if local is not None: * lo,hi = the_copy.distribution() */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_the_copy, __pyx_n_s__access); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 906; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 906; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_local = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":907 * if should_distribute(the_copy.size): * local = the_copy.access() * if local is not None: # <<<<<<<<<<<<<< * lo,hi = the_copy.distribution() * local[:] = self.get(ga.zip(lo,hi)) */ __pyx_t_5 = (__pyx_v_local != Py_None); __pyx_t_6 = (__pyx_t_5 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":908 * local = the_copy.access() * if local is not None: * lo,hi = the_copy.distribution() # <<<<<<<<<<<<<< * local[:] = self.get(ga.zip(lo,hi)) * the_copy.release_update() */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_the_copy, __pyx_n_s__distribution); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) { PyObject* sequence = __pyx_t_4; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_3 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { Py_ssize_t index = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_1)->tp_iternext; index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_1); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_1), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L6_unpacking_done:; } __pyx_v_lo = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_hi = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":909 * if local is not None: * lo,hi = the_copy.distribution() * local[:] = self.get(ga.zip(lo,hi)) # <<<<<<<<<<<<<< * the_copy.release_update() * else: */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__get); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 909; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 909; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__zip); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 909; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 909; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 909; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 909; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 909; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (__Pyx_PyObject_SetSlice(__pyx_v_local, __pyx_t_1, 0, 0, NULL, NULL, &__pyx_k_slice_29, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 909; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":910 * lo,hi = the_copy.distribution() * local[:] = self.get(ga.zip(lo,hi)) * the_copy.release_update() # <<<<<<<<<<<<<< * else: * # case where the copy is not distributed but the original was */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_the_copy, __pyx_n_s__release_update); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 910; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 910; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L4; } __pyx_L4:; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":913 * else: * # case where the copy is not distributed but the original was * the_copy[:] = self.allget() # <<<<<<<<<<<<<< * return the_copy * */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__allget); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 913; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 913; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__Pyx_PyObject_SetSlice(__pyx_v_the_copy, __pyx_t_1, 0, 0, NULL, NULL, &__pyx_k_slice_30, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 913; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } __pyx_L3:; /* "ga4py/gain/core.pyx":914 * # case where the copy is not distributed but the original was * the_copy[:] = self.allget() * return the_copy # <<<<<<<<<<<<<< * * def cumprod(self, axis=None, dtype=None, out=None): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_the_copy); __pyx_r = __pyx_v_the_copy; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.core.ndarray.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_the_copy); __Pyx_XDECREF(__pyx_v_local); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_87cumprod(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_86cumprod[] = "Return the cumulative product of the elements along the given axis.\n\n Refer to `numpy.cumprod` for full documentation.\n\n See Also\n --------\n numpy.cumprod : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_87cumprod = {__Pyx_NAMESTR("cumprod"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_87cumprod, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_86cumprod)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_87cumprod(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("cumprod (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/core.pyx":916 * return the_copy * * def cumprod(self, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the cumulative product of the elements along the given axis. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); values[3] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cumprod") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_axis = values[1]; __pyx_v_dtype = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("cumprod", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.cumprod", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_86cumprod(__pyx_self, __pyx_v_self, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_86cumprod(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("cumprod", 0); __Pyx_TraceCall("cumprod", __pyx_f[0], 916); /* "ga4py/gain/core.pyx":926 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def cumsum(self, axis=None, dtype=None, out=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.cumprod", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_89cumsum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_88cumsum[] = "Return the cumulative sum of the elements along the given axis.\n\n Refer to `numpy.cumsum` for full documentation.\n\n See Also\n --------\n numpy.cumsum : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_89cumsum = {__Pyx_NAMESTR("cumsum"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_89cumsum, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_88cumsum)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_89cumsum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("cumsum (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/core.pyx":928 * raise NotImplementedError * * def cumsum(self, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the cumulative sum of the elements along the given axis. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); values[3] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cumsum") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_axis = values[1]; __pyx_v_dtype = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("cumsum", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.cumsum", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_88cumsum(__pyx_self, __pyx_v_self, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_88cumsum(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("cumsum", 0); __Pyx_TraceCall("cumsum", __pyx_f[0], 928); /* "ga4py/gain/core.pyx":938 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def diagonal(self, offset=0, axis1=0, axis2=1): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 938; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.cumsum", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_91diagonal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_90diagonal[] = "Return specified diagonals.\n\n Refer to `numpy.diagonal` for full documentation.\n\n See Also\n --------\n numpy.diagonal : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_91diagonal = {__Pyx_NAMESTR("diagonal"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_91diagonal, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_90diagonal)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_91diagonal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_offset = 0; CYTHON_UNUSED PyObject *__pyx_v_axis1 = 0; CYTHON_UNUSED PyObject *__pyx_v_axis2 = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("diagonal (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__offset,&__pyx_n_s__axis1,&__pyx_n_s__axis2,0}; PyObject* values[4] = {0,0,0,0}; values[1] = ((PyObject *)((PyObject *)__pyx_int_0)); values[2] = ((PyObject *)((PyObject *)__pyx_int_0)); values[3] = ((PyObject *)((PyObject *)__pyx_int_1)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__offset); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis1); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis2); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "diagonal") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 940; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_offset = values[1]; __pyx_v_axis1 = values[2]; __pyx_v_axis2 = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("diagonal", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 940; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.diagonal", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_90diagonal(__pyx_self, __pyx_v_self, __pyx_v_offset, __pyx_v_axis1, __pyx_v_axis2); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":940 * raise NotImplementedError * * def diagonal(self, offset=0, axis1=0, axis2=1): # <<<<<<<<<<<<<< * """Return specified diagonals. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_90diagonal(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_offset, CYTHON_UNUSED PyObject *__pyx_v_axis1, CYTHON_UNUSED PyObject *__pyx_v_axis2) { PyObject *__pyx_v_nrow = NULL; PyObject *__pyx_v_ncol = NULL; PyObject *__pyx_v_size = NULL; PyObject *__pyx_v_out = NULL; PyObject *__pyx_v_npout = NULL; PyObject *__pyx_v_indices = NULL; PyObject *__pyx_v_my_range = NULL; PyObject *__pyx_v_my_indices = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *(*__pyx_t_6)(PyObject *); int __pyx_t_7; PyObject *__pyx_t_8 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("diagonal", 0); __Pyx_TraceCall("diagonal", __pyx_f[0], 940); __Pyx_INCREF(__pyx_v_offset); /* "ga4py/gain/core.pyx":950 * * """ * if self.ndim < 2: # <<<<<<<<<<<<<< * raise ValueError, "array.ndim must be >= 2" * if self.ndim != 2: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 950; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_2, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 950; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 950; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":951 * """ * if self.ndim < 2: * raise ValueError, "array.ndim must be >= 2" # <<<<<<<<<<<<<< * if self.ndim != 2: * raise NotImplementedError, "diagonal for a.ndim > 2" */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_31), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":952 * if self.ndim < 2: * raise ValueError, "array.ndim must be >= 2" * if self.ndim != 2: # <<<<<<<<<<<<<< * raise NotImplementedError, "diagonal for a.ndim > 2" * nrow,ncol = self.shape */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__ndim); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 952; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_int_2, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 952; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 952; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":953 * raise ValueError, "array.ndim must be >= 2" * if self.ndim != 2: * raise NotImplementedError, "diagonal for a.ndim > 2" # <<<<<<<<<<<<<< * nrow,ncol = self.shape * if offset >= 0: */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_kp_s_32), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 953; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/core.pyx":954 * if self.ndim != 2: * raise NotImplementedError, "diagonal for a.ndim > 2" * nrow,ncol = self.shape # <<<<<<<<<<<<<< * if offset >= 0: * size = min(ncol-offset,nrow) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_4 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = NULL; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L6_unpacking_done:; } __pyx_v_nrow = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_ncol = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":955 * raise NotImplementedError, "diagonal for a.ndim > 2" * nrow,ncol = self.shape * if offset >= 0: # <<<<<<<<<<<<<< * size = min(ncol-offset,nrow) * else: */ __pyx_t_1 = PyObject_RichCompare(__pyx_v_offset, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":956 * nrow,ncol = self.shape * if offset >= 0: * size = min(ncol-offset,nrow) # <<<<<<<<<<<<<< * else: * size = min(nrow+offset,ncol) */ __Pyx_INCREF(__pyx_v_nrow); __pyx_t_1 = __pyx_v_nrow; __pyx_t_4 = PyNumber_Subtract(__pyx_v_ncol, __pyx_v_offset); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_3) { __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = __pyx_t_1; } else { __Pyx_INCREF(__pyx_t_4); __pyx_t_2 = __pyx_t_4; } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_size = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L7; } /*else*/ { /* "ga4py/gain/core.pyx":958 * size = min(ncol-offset,nrow) * else: * size = min(nrow+offset,ncol) # <<<<<<<<<<<<<< * out = ndarray(size, dtype=self.dtype) * if not is_distributed(out): */ __Pyx_INCREF(__pyx_v_ncol); __pyx_t_1 = __pyx_v_ncol; __pyx_t_2 = PyNumber_Add(__pyx_v_nrow, __pyx_v_offset); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_3) { __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = __pyx_t_1; } else { __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = __pyx_t_2; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __pyx_t_4; __Pyx_INCREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_size = __pyx_t_1; __pyx_t_1 = 0; } __pyx_L7:; /* "ga4py/gain/core.pyx":959 * else: * size = min(nrow+offset,ncol) * out = ndarray(size, dtype=self.dtype) # <<<<<<<<<<<<<< * if not is_distributed(out): * raise NotImplementedError, "resulting diagonal is not distributed" */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_size); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_size); __Pyx_GIVEREF(__pyx_v_size); __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_out = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":960 * size = min(nrow+offset,ncol) * out = ndarray(size, dtype=self.dtype) * if not is_distributed(out): # <<<<<<<<<<<<<< * raise NotImplementedError, "resulting diagonal is not distributed" * npout = out.access() */ __pyx_t_3 = ((!(__pyx_f_5ga4py_4gain_4core_is_distributed(__pyx_v_out, 0) != 0)) != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":961 * out = ndarray(size, dtype=self.dtype) * if not is_distributed(out): * raise NotImplementedError, "resulting diagonal is not distributed" # <<<<<<<<<<<<<< * npout = out.access() * if npout is not None: */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_kp_s_33), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 961; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; /* "ga4py/gain/core.pyx":962 * if not is_distributed(out): * raise NotImplementedError, "resulting diagonal is not distributed" * npout = out.access() # <<<<<<<<<<<<<< * if npout is not None: * indices = np.empty((size,2), dtype=np.int64) */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__access); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 962; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 962; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_npout = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":963 * raise NotImplementedError, "resulting diagonal is not distributed" * npout = out.access() * if npout is not None: # <<<<<<<<<<<<<< * indices = np.empty((size,2), dtype=np.int64) * if offset >= 0: */ __pyx_t_3 = (__pyx_v_npout != Py_None); __pyx_t_7 = (__pyx_t_3 != 0); if (__pyx_t_7) { /* "ga4py/gain/core.pyx":964 * npout = out.access() * if npout is not None: * indices = np.empty((size,2), dtype=np.int64) # <<<<<<<<<<<<<< * if offset >= 0: * indices[:,0] = np.arange(size, dtype=np.int64) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_size); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size); __Pyx_GIVEREF(__pyx_v_size); __Pyx_INCREF(__pyx_int_2); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_2); __Pyx_GIVEREF(__pyx_int_2); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_2)); __Pyx_GIVEREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__int64); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_indices = __pyx_t_8; __pyx_t_8 = 0; /* "ga4py/gain/core.pyx":965 * if npout is not None: * indices = np.empty((size,2), dtype=np.int64) * if offset >= 0: # <<<<<<<<<<<<<< * indices[:,0] = np.arange(size, dtype=np.int64) * indices[:,1] = np.arange(offset, size+offset, dtype=np.int64) */ __pyx_t_8 = PyObject_RichCompare(__pyx_v_offset, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 965; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 965; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_7) { /* "ga4py/gain/core.pyx":966 * indices = np.empty((size,2), dtype=np.int64) * if offset >= 0: * indices[:,0] = np.arange(size, dtype=np.int64) # <<<<<<<<<<<<<< * indices[:,1] = np.arange(offset, size+offset, dtype=np.int64) * else: */ __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__arange); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_v_size); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_size); __Pyx_GIVEREF(__pyx_v_size); __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__int64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_v_indices, ((PyObject *)__pyx_k_tuple_35), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":967 * if offset >= 0: * indices[:,0] = np.arange(size, dtype=np.int64) * indices[:,1] = np.arange(offset, size+offset, dtype=np.int64) # <<<<<<<<<<<<<< * else: * offset = -offset */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__arange); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyNumber_Add(__pyx_v_size, __pyx_v_offset); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_v_offset); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_offset); __Pyx_GIVEREF(__pyx_v_offset); PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int64); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyObject_SetItem(__pyx_v_indices, ((PyObject *)__pyx_k_tuple_37), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L10; } /*else*/ { /* "ga4py/gain/core.pyx":969 * indices[:,1] = np.arange(offset, size+offset, dtype=np.int64) * else: * offset = -offset # <<<<<<<<<<<<<< * indices[:,0] = np.arange(offset, size+offset, dtype=np.int64) * indices[:,1] = np.arange(size, dtype=np.int64) */ __pyx_t_5 = PyNumber_Negative(__pyx_v_offset); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF_SET(__pyx_v_offset, __pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":970 * else: * offset = -offset * indices[:,0] = np.arange(offset, size+offset, dtype=np.int64) # <<<<<<<<<<<<<< * indices[:,1] = np.arange(size, dtype=np.int64) * my_range = out.global_slice.bound_by_lohi(*out.distribution()) */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__arange); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyNumber_Add(__pyx_v_size, __pyx_v_offset); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_v_offset); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_offset); __Pyx_GIVEREF(__pyx_v_offset); PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__int64); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; if (PyObject_SetItem(__pyx_v_indices, ((PyObject *)__pyx_k_tuple_39), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":971 * offset = -offset * indices[:,0] = np.arange(offset, size+offset, dtype=np.int64) * indices[:,1] = np.arange(size, dtype=np.int64) # <<<<<<<<<<<<<< * my_range = out.global_slice.bound_by_lohi(*out.distribution()) * my_range = my_range[0].pyobj() */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__arange); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_size); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size); __Pyx_GIVEREF(__pyx_v_size); __pyx_t_8 = PyDict_New(); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_8)); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__int64); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_t_8, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_8)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; if (PyObject_SetItem(__pyx_v_indices, ((PyObject *)__pyx_k_tuple_41), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } __pyx_L10:; /* "ga4py/gain/core.pyx":972 * indices[:,0] = np.arange(offset, size+offset, dtype=np.int64) * indices[:,1] = np.arange(size, dtype=np.int64) * my_range = out.global_slice.bound_by_lohi(*out.distribution()) # <<<<<<<<<<<<<< * my_range = my_range[0].pyobj() * my_indices = indices[my_range] */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__bound_by_lohi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__distribution); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PySequence_Tuple(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_v_my_range = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":973 * indices[:,1] = np.arange(size, dtype=np.int64) * my_range = out.global_slice.bound_by_lohi(*out.distribution()) * my_range = my_range[0].pyobj() # <<<<<<<<<<<<<< * my_indices = indices[my_range] * npout[:] = self.gather(my_indices) */ __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_my_range, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 973; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__pyobj); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 973; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 973; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_my_range, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":974 * my_range = out.global_slice.bound_by_lohi(*out.distribution()) * my_range = my_range[0].pyobj() * my_indices = indices[my_range] # <<<<<<<<<<<<<< * npout[:] = self.gather(my_indices) * return out */ __pyx_t_2 = PyObject_GetItem(__pyx_v_indices, __pyx_v_my_range); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_my_indices = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":975 * my_range = my_range[0].pyobj() * my_indices = indices[my_range] * npout[:] = self.gather(my_indices) # <<<<<<<<<<<<<< * return out * */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__gather); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_my_indices); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_my_indices); __Pyx_GIVEREF(__pyx_v_my_indices); __pyx_t_8 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (__Pyx_PyObject_SetSlice(__pyx_v_npout, __pyx_t_8, 0, 0, NULL, NULL, &__pyx_k_slice_42, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L9; } __pyx_L9:; /* "ga4py/gain/core.pyx":976 * my_indices = indices[my_range] * npout[:] = self.gather(my_indices) * return out # <<<<<<<<<<<<<< * * def dot(self, b, out=None): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_out); __pyx_r = __pyx_v_out; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("ga4py.gain.core.ndarray.diagonal", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_nrow); __Pyx_XDECREF(__pyx_v_ncol); __Pyx_XDECREF(__pyx_v_size); __Pyx_XDECREF(__pyx_v_out); __Pyx_XDECREF(__pyx_v_npout); __Pyx_XDECREF(__pyx_v_indices); __Pyx_XDECREF(__pyx_v_my_range); __Pyx_XDECREF(__pyx_v_my_indices); __Pyx_XDECREF(__pyx_v_offset); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_93dot(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_92dot[] = "a.dot(b, out=None)\n\n Dot product of two arrays.\n\n Refer to `numpy.dot` for full documentation.\n\n See Also\n --------\n numpy.dot : equivalent function\n\n Examples\n --------\n >>> a = np.eye(2)\n >>> b = np.ones((2, 2)) * 2\n >>> a.dot(b)\n array([[ 2., 2.],\n [ 2., 2.]])\n\n This array method can be conveniently chained:\n\n >>> a.dot(b).dot(b)\n array([[ 8., 8.],\n [ 8., 8.]])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_93dot = {__Pyx_NAMESTR("dot"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_93dot, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_92dot)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_93dot(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_b = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("dot (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__b,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/core.pyx":978 * return out * * def dot(self, b, out=None): # <<<<<<<<<<<<<< * """a.dot(b, out=None) * */ values[2] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("dot", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 978; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dot") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 978; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_b = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("dot", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 978; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.dot", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_92dot(__pyx_self, __pyx_v_self, __pyx_v_b, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_92dot(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_b, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("dot", 0); __Pyx_TraceCall("dot", __pyx_f[0], 978); /* "ga4py/gain/core.pyx":1004 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def dump(self, file): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1004; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.dot", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_95dump(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_94dump[] = "Dump a pickle of the array to the specified file.\n\n The array can be read back with pickle.load or numpy.load.\n\n Parameters\n ----------\n file : str\n A string naming the dump file.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_95dump = {__Pyx_NAMESTR("dump"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_95dump, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_94dump)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_95dump(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_file = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("dump (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__file,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__file)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("dump", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1006; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dump") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1006; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_file = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("dump", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1006; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.dump", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_94dump(__pyx_self, __pyx_v_self, __pyx_v_file); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1006 * raise NotImplementedError * * def dump(self, file): # <<<<<<<<<<<<<< * """Dump a pickle of the array to the specified file. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_94dump(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_file) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("dump", 0); __Pyx_TraceCall("dump", __pyx_f[0], 1006); /* "ga4py/gain/core.pyx":1017 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def dumps(self): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1017; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.dump", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_97dumps(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_96dumps[] = "Returns the pickle of the array as a string.\n\n pickle.loads or numpy.loads will convert the string back to an array.\n\n Parameters\n ----------\n None\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_97dumps = {__Pyx_NAMESTR("dumps"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_97dumps, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_96dumps)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_97dumps(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("dumps (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_96dumps(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1019 * raise NotImplementedError * * def dumps(self): # <<<<<<<<<<<<<< * """Returns the pickle of the array as a string. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_96dumps(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("dumps", 0); __Pyx_TraceCall("dumps", __pyx_f[0], 1019); /* "ga4py/gain/core.pyx":1029 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def fill(self, value): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1029; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.dumps", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_99fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_98fill[] = "Fill the array with a scalar value.\n\n Parameters\n ----------\n value : scalar\n All elements of `a` will be assigned this value.\n\n Examples\n --------\n >>> a = np.array([1, 2])\n >>> a.fill(0)\n >>> a\n array([0, 0])\n >>> a = np.empty(2)\n >>> a.fill(1)\n >>> a\n array([ 1., 1.])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_99fill = {__Pyx_NAMESTR("fill"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_99fill, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_98fill)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_99fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_value = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("fill (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__value,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("fill", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fill") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_value = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("fill", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.fill", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_98fill(__pyx_self, __pyx_v_self, __pyx_v_value); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1031 * raise NotImplementedError * * def fill(self, value): # <<<<<<<<<<<<<< * """Fill the array with a scalar value. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_98fill(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_value) { PyObject *__pyx_v_a = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_t_4; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("fill", 0); __Pyx_TraceCall("fill", __pyx_f[0], 1031); /* "ga4py/gain/core.pyx":1051 * * """ * a = self.access() # <<<<<<<<<<<<<< * if a is not None: * a.fill(value) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__access); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1051; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1051; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_a = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":1052 * """ * a = self.access() * if a is not None: # <<<<<<<<<<<<<< * a.fill(value) * self.release_update() */ __pyx_t_3 = (__pyx_v_a != Py_None); __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":1053 * a = self.access() * if a is not None: * a.fill(value) # <<<<<<<<<<<<<< * self.release_update() * */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__fill); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1053; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1053; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_value); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1053; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":1054 * if a is not None: * a.fill(value) * self.release_update() # <<<<<<<<<<<<<< * * def flatten(self, order='C'): */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__release_update); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1054; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1054; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L3; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("ga4py.gain.core.ndarray.fill", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_a); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_101flatten(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_100flatten[] = "Return a copy of the array collapsed into one dimension.\n\n Parameters\n ----------\n order : {'C', 'F'}, optional\n Whether to flatten in C (row-major) or Fortran (column-major) order.\n The default is 'C'.\n\n Returns\n -------\n y : ndarray\n A copy of the input array, flattened to one dimension.\n\n See Also\n --------\n ravel : Return a flattened array.\n flat : A 1-D flat iterator over the array.\n\n Examples\n --------\n >>> a = np.array([[1,2], [3,4]])\n >>> a.flatten()\n array([1, 2, 3, 4])\n >>> a.flatten('F')\n array([1, 3, 2, 4])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_101flatten = {__Pyx_NAMESTR("flatten"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_101flatten, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_100flatten)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_101flatten(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("flatten (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__order,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)((PyObject*)__pyx_n_s__C)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "flatten") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1056; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_order = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("flatten", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1056; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.flatten", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_100flatten(__pyx_self, __pyx_v_self, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1056 * self.release_update() * * def flatten(self, order='C'): # <<<<<<<<<<<<<< * """Return a copy of the array collapsed into one dimension. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_100flatten(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_order) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("flatten", 0); __Pyx_TraceCall("flatten", __pyx_f[0], 1056); /* "ga4py/gain/core.pyx":1084 * * """ * return self.reshape(self.size) # <<<<<<<<<<<<<< * * def getfield(self, dtype, offset): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__reshape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1084; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1084; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1084; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1084; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.flatten", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_103getfield(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_102getfield[] = "Returns a field of the given array as a certain type.\n\n A field is a view of the array data with each itemsize determined\n by the given type and the offset into the current array, i.e. from\n ``offset * dtype.itemsize`` to ``(offset+1) * dtype.itemsize``.\n\n Parameters\n ----------\n dtype : str\n String denoting the data type of the field.\n offset : int\n Number of `dtype.itemsize`'s to skip before beginning the element view.\n\n Examples\n --------\n >>> x = np.diag([1.+1.j]*2)\n >>> x\n array([[ 1.+1.j, 0.+0.j],\n [ 0.+0.j, 1.+1.j]])\n >>> x.dtype\n dtype('complex128')\n\n >>> x.getfield('complex64', 0) # Note how this != x\n array([[ 0.+1.875j, 0.+0.j ],\n [ 0.+0.j , 0.+1.875j]], dtype=complex64)\n\n >>> x.getfield('complex64',1) # Note how different this is than x\n array([[ 0. +5.87173204e-39j, 0. +0.00000000e+00j],\n [ 0. +0.00000000e+00j, 0. +5.87173204e-39j]], dtype=complex64)\n\n >>> x.getfield('complex128', 0) # == x\n array([[ 1.+1.j, 0.+0.j],\n [ 0.+0.j, 1.+1.j]])\n\n If the argument dtype is the same as x.dtype, then offset != 0 raises\n a ValueError:\n\n >>> x.getfield('complex128', 1)\n Traceback (most recent call last):\n File \"\", line 1, in \n ValueError: Need 0 <= offset <= 0 for requested type but received offset = 1\n\n >>> x.getfield('float64', 0)\n array([[ 1., 0.],\n [ 0., 1.]])\n\n >>> x.getfield('float64', 1)\n array([[ 1.77658241e-307, 0.00000000e+000],\n [ 0.00000000e+000, 1.77658241e-307]])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_103getfield = {__Pyx_NAMESTR("getfield"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_103getfield, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_102getfield)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_103getfield(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_offset = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("getfield (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__dtype,&__pyx_n_s__offset,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("getfield", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__offset)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("getfield", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getfield") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_self = values[0]; __pyx_v_dtype = values[1]; __pyx_v_offset = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("getfield", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.getfield", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_102getfield(__pyx_self, __pyx_v_self, __pyx_v_dtype, __pyx_v_offset); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1086 * return self.reshape(self.size) * * def getfield(self, dtype, offset): # <<<<<<<<<<<<<< * """Returns a field of the given array as a certain type. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_102getfield(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_offset) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("getfield", 0); __Pyx_TraceCall("getfield", __pyx_f[0], 1086); /* "ga4py/gain/core.pyx":1138 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def item(self, *args): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.getfield", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_105item(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_104item[] = "Copy an element of an array to a standard Python scalar and return it.\n\n Parameters\n ----------\n \\*args : Arguments (variable number and type)\n\n * none: in this case, the method only works for arrays\n with one element (`a.size == 1`), which element is\n copied into a standard Python scalar object and returned.\n\n * int_type: this argument is interpreted as a flat index into\n the array, specifying which element to copy and return.\n\n * tuple of int_types: functions as does a single int_type argument,\n except that the argument is interpreted as an nd-index into the\n array.\n\n Returns\n -------\n z : Standard Python scalar object\n A copy of the specified element of the array as a suitable\n Python scalar\n\n Notes\n -----\n When the data type of `a` is longdouble or clongdouble, item() returns\n a scalar array object because there is no available Python scalar that\n would not lose information. Void arrays return a buffer object for item(),\n unless fields are defined, in which case a tuple is returned.\n\n `item` is very similar to a[args], except, instead of an array scalar,\n a standard Python scalar is returned. This can be useful for speeding up\n access to elements of the array and doing arithmetic on elements of the\n array using Python's optimized math.\n\n Examples\n --------\n >>> x = np.random.randint(9, size=(3, 3))\n >>> x\n array([[3, 1, 7],\n [2, 8, 3],\n [8, 5, 3]])\n >>> x.item(3)\n 2\n >>> x.item(7)\n 5\n >>> x.item((0, 1))\n 1\n >>> x.item((2, 2))\n 3\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_105item = {__Pyx_NAMESTR("item"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_105item, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_104item)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_105item(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("item (wrapper)", 0); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "item") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1140; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("item", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1140; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.item", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_104item(__pyx_self, __pyx_v_self, __pyx_v_args); __Pyx_XDECREF(__pyx_v_args); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1140 * raise NotImplementedError * * def item(self, *args): # <<<<<<<<<<<<<< * """Copy an element of an array to a standard Python scalar and return it. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_104item(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("item", 0); __Pyx_TraceCall("item", __pyx_f[0], 1140); /* "ga4py/gain/core.pyx":1193 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def itemset(self, *args): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1193; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.item", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_107itemset(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_106itemset[] = "Insert scalar into an array (scalar is cast to array's dtype, if possible)\n\n There must be at least 1 argument, and define the last argument\n as *item*. Then, ``a.itemset(*args)`` is equivalent to but faster\n than ``a[args] = item``. The item should be a scalar value and `args`\n must select a single item in the array `a`.\n\n Parameters\n ----------\n \\*args : Arguments\n If one argument: a scalar, only used in case `a` is of size 1.\n If two arguments: the last argument is the value to be set\n and must be a scalar, the first argument specifies a single array\n element location. It is either an int or a tuple.\n\n Notes\n -----\n Compared to indexing syntax, `itemset` provides some speed increase\n for placing a scalar into a particular location in an `ndarray`,\n if you must do this. However, generally this is discouraged:\n among other problems, it complicates the appearance of the code.\n Also, when using `itemset` (and `item`) inside a loop, be sure\n to assign the methods to a local variable to avoid the attribute\n look-up at each loop iteration.\n\n Examples\n --------\n >>> x = np.random.randint(9, size=(3, 3))\n >>> x\n array([[3, 1, 7],\n [2, 8, 3],\n [8, 5, 3]])\n >>> x.itemset(4, 0)\n >>> x.itemset((2, 2), 9)\n >>> x\n array([[3, 1, 7],\n [2, 0, 3],\n [8, 5, 9]])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_107itemset = {__Pyx_NAMESTR("itemset"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_107itemset, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_106itemset)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_107itemset(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("itemset (wrapper)", 0); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "itemset") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1195; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("itemset", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1195; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.itemset", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_106itemset(__pyx_self, __pyx_v_self, __pyx_v_args); __Pyx_XDECREF(__pyx_v_args); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1195 * raise NotImplementedError * * def itemset(self, *args): # <<<<<<<<<<<<<< * """Insert scalar into an array (scalar is cast to array's dtype, if possible) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_106itemset(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("itemset", 0); __Pyx_TraceCall("itemset", __pyx_f[0], 1195); /* "ga4py/gain/core.pyx":1236 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def max(self, axis=None, out=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1236; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.itemset", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_109max(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_108max[] = "Return the maximum along a given axis.\n\n Refer to `numpy.amax` for full documentation.\n\n See Also\n --------\n numpy.amax : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_109max = {__Pyx_NAMESTR("max"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_109max, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_108max)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_109max(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_axis = 0; PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("max (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/core.pyx":1238 * raise NotImplementedError * * def max(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the maximum along a given axis. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "max") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1238; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("max", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1238; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.max", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_108max(__pyx_self, __pyx_v_self, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_108max(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_axis, PyObject *__pyx_v_out) { PyObject *__pyx_v_a = NULL; PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("max", 0); __Pyx_TraceCall("max", __pyx_f[0], 1238); /* "ga4py/gain/core.pyx":1248 * * """ * if axis is None: # <<<<<<<<<<<<<< * a = self.access() * if a is not None: */ __pyx_t_1 = (__pyx_v_axis == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":1249 * """ * if axis is None: * a = self.access() # <<<<<<<<<<<<<< * if a is not None: * result = np.maximum.reduce(a) */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__access); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_a = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1250 * if axis is None: * a = self.access() * if a is not None: # <<<<<<<<<<<<<< * result = np.maximum.reduce(a) * while result.ndim > 0: */ __pyx_t_2 = (__pyx_v_a != Py_None); __pyx_t_1 = (__pyx_t_2 != 0); if (__pyx_t_1) { /* "ga4py/gain/core.pyx":1251 * a = self.access() * if a is not None: * result = np.maximum.reduce(a) # <<<<<<<<<<<<<< * while result.ndim > 0: * result = np.maximum.reduce(result) */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__maximum); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__reduce); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_result = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":1252 * if a is not None: * result = np.maximum.reduce(a) * while result.ndim > 0: # <<<<<<<<<<<<<< * result = np.maximum.reduce(result) * result = comm().allgather(result) */ while (1) { __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s__ndim); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_1) break; /* "ga4py/gain/core.pyx":1253 * result = np.maximum.reduce(a) * while result.ndim > 0: * result = np.maximum.reduce(result) # <<<<<<<<<<<<<< * result = comm().allgather(result) * result = np.maximum.reduce(result) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__maximum); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__reduce); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_4); __pyx_t_4 = 0; } /* "ga4py/gain/core.pyx":1254 * while result.ndim > 0: * result = np.maximum.reduce(result) * result = comm().allgather(result) # <<<<<<<<<<<<<< * result = np.maximum.reduce(result) * else: */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__allgather); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":1255 * result = np.maximum.reduce(result) * result = comm().allgather(result) * result = np.maximum.reduce(result) # <<<<<<<<<<<<<< * else: * # we don't own anything, so get an actual value from the array */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__maximum); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__reduce); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_4); __pyx_t_4 = 0; goto __pyx_L4; } /*else*/ { /* "ga4py/gain/core.pyx":1258 * else: * # we don't own anything, so get an actual value from the array * result = self.get([0]*self.ndim) # <<<<<<<<<<<<<< * result = comm().allgather(result) * result = np.maximum.reduce(result) */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__get); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__ndim); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_int_0); PyList_SET_ITEM(__pyx_t_3, 0, __pyx_int_0); __Pyx_GIVEREF(__pyx_int_0); { PyObject* __pyx_temp = PyNumber_InPlaceMultiply(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_temp)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_temp); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = __pyx_temp; } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_3)); __Pyx_GIVEREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_v_result = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":1259 * # we don't own anything, so get an actual value from the array * result = self.get([0]*self.ndim) * result = comm().allgather(result) # <<<<<<<<<<<<<< * result = np.maximum.reduce(result) * if out is None: */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__allgather); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1260 * result = self.get([0]*self.ndim) * result = comm().allgather(result) * result = np.maximum.reduce(result) # <<<<<<<<<<<<<< * if out is None: * return result */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__maximum); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__reduce); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_3); __pyx_t_3 = 0; } __pyx_L4:; /* "ga4py/gain/core.pyx":1261 * result = comm().allgather(result) * result = np.maximum.reduce(result) * if out is None: # <<<<<<<<<<<<<< * return result * else: */ __pyx_t_1 = (__pyx_v_out == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":1262 * result = np.maximum.reduce(result) * if out is None: * return result # <<<<<<<<<<<<<< * else: * out[:] = result */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_result); __pyx_r = __pyx_v_result; goto __pyx_L0; goto __pyx_L7; } /*else*/ { /* "ga4py/gain/core.pyx":1264 * return result * else: * out[:] = result # <<<<<<<<<<<<<< * return out * else: */ if (__Pyx_PyObject_SetSlice(__pyx_v_out, __pyx_v_result, 0, 0, NULL, NULL, &__pyx_k_slice_43, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":1265 * else: * out[:] = result * return out # <<<<<<<<<<<<<< * else: * return maximum.reduce(self, axis, out) */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_out); __pyx_r = __pyx_v_out; goto __pyx_L0; } __pyx_L7:; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":1267 * return out * else: * return maximum.reduce(self, axis, out) # <<<<<<<<<<<<<< * * def mean(self, axis=None, dtype=None, out=None): */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__maximum); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__reduce); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_axis); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_axis); __Pyx_GIVEREF(__pyx_v_axis); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("ga4py.gain.core.ndarray.max", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_111mean(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_110mean[] = "Returns the average of the array elements along given axis.\n\n Refer to `numpy.mean` for full documentation.\n\n See Also\n --------\n numpy.mean : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_111mean = {__Pyx_NAMESTR("mean"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_111mean, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_110mean)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_111mean(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mean (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/core.pyx":1269 * return maximum.reduce(self, axis, out) * * def mean(self, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Returns the average of the array elements along given axis. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); values[3] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mean") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_axis = values[1]; __pyx_v_dtype = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mean", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.mean", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_110mean(__pyx_self, __pyx_v_self, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_110mean(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("mean", 0); __Pyx_TraceCall("mean", __pyx_f[0], 1269); /* "ga4py/gain/core.pyx":1279 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def min(self, axis=None, out=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.mean", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_113min(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_112min[] = "Return the minimum along a given axis.\n\n Refer to `numpy.amin` for full documentation.\n\n See Also\n --------\n numpy.amin : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_113min = {__Pyx_NAMESTR("min"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_113min, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_112min)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_113min(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_axis = 0; PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("min (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/core.pyx":1281 * raise NotImplementedError * * def min(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the minimum along a given axis. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "min") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1281; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("min", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1281; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.min", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_112min(__pyx_self, __pyx_v_self, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_112min(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_axis, PyObject *__pyx_v_out) { PyObject *__pyx_v_a = NULL; PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("min", 0); __Pyx_TraceCall("min", __pyx_f[0], 1281); /* "ga4py/gain/core.pyx":1291 * * """ * if axis is None: # <<<<<<<<<<<<<< * a = self.access() * if a is not None: */ __pyx_t_1 = (__pyx_v_axis == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":1292 * """ * if axis is None: * a = self.access() # <<<<<<<<<<<<<< * if a is not None: * result = np.minimum.reduce(a) */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__access); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_a = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1293 * if axis is None: * a = self.access() * if a is not None: # <<<<<<<<<<<<<< * result = np.minimum.reduce(a) * while result.ndim > 0: */ __pyx_t_2 = (__pyx_v_a != Py_None); __pyx_t_1 = (__pyx_t_2 != 0); if (__pyx_t_1) { /* "ga4py/gain/core.pyx":1294 * a = self.access() * if a is not None: * result = np.minimum.reduce(a) # <<<<<<<<<<<<<< * while result.ndim > 0: * result = np.minimum.reduce(result) */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__minimum); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__reduce); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_result = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":1295 * if a is not None: * result = np.minimum.reduce(a) * while result.ndim > 0: # <<<<<<<<<<<<<< * result = np.minimum.reduce(result) * result = comm().allgather(result) */ while (1) { __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s__ndim); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_1) break; /* "ga4py/gain/core.pyx":1296 * result = np.minimum.reduce(a) * while result.ndim > 0: * result = np.minimum.reduce(result) # <<<<<<<<<<<<<< * result = comm().allgather(result) * result = np.minimum.reduce(result) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__minimum); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__reduce); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_4); __pyx_t_4 = 0; } /* "ga4py/gain/core.pyx":1297 * while result.ndim > 0: * result = np.minimum.reduce(result) * result = comm().allgather(result) # <<<<<<<<<<<<<< * result = np.minimum.reduce(result) * else: */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__allgather); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":1298 * result = np.minimum.reduce(result) * result = comm().allgather(result) * result = np.minimum.reduce(result) # <<<<<<<<<<<<<< * else: * # we don't own anything, so get an actual value from the array */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__minimum); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__reduce); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_4); __pyx_t_4 = 0; goto __pyx_L4; } /*else*/ { /* "ga4py/gain/core.pyx":1301 * else: * # we don't own anything, so get an actual value from the array * result = self.get([0]*self.ndim) # <<<<<<<<<<<<<< * result = comm().allgather(result) * result = np.minimum.reduce(result) */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__get); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__ndim); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_int_0); PyList_SET_ITEM(__pyx_t_3, 0, __pyx_int_0); __Pyx_GIVEREF(__pyx_int_0); { PyObject* __pyx_temp = PyNumber_InPlaceMultiply(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_temp)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_temp); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = __pyx_temp; } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_3)); __Pyx_GIVEREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_v_result = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":1302 * # we don't own anything, so get an actual value from the array * result = self.get([0]*self.ndim) * result = comm().allgather(result) # <<<<<<<<<<<<<< * result = np.minimum.reduce(result) * if out is None: */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__allgather); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1303 * result = self.get([0]*self.ndim) * result = comm().allgather(result) * result = np.minimum.reduce(result) # <<<<<<<<<<<<<< * if out is None: * return result */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__minimum); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__reduce); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_3); __pyx_t_3 = 0; } __pyx_L4:; /* "ga4py/gain/core.pyx":1304 * result = comm().allgather(result) * result = np.minimum.reduce(result) * if out is None: # <<<<<<<<<<<<<< * return result * else: */ __pyx_t_1 = (__pyx_v_out == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":1305 * result = np.minimum.reduce(result) * if out is None: * return result # <<<<<<<<<<<<<< * else: * out[:] = result */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_result); __pyx_r = __pyx_v_result; goto __pyx_L0; goto __pyx_L7; } /*else*/ { /* "ga4py/gain/core.pyx":1307 * return result * else: * out[:] = result # <<<<<<<<<<<<<< * return out * else: */ if (__Pyx_PyObject_SetSlice(__pyx_v_out, __pyx_v_result, 0, 0, NULL, NULL, &__pyx_k_slice_44, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1307; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":1308 * else: * out[:] = result * return out # <<<<<<<<<<<<<< * else: * return minimum.reduce(self, axis, out) */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_out); __pyx_r = __pyx_v_out; goto __pyx_L0; } __pyx_L7:; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":1310 * return out * else: * return minimum.reduce(self, axis, out) # <<<<<<<<<<<<<< * * def newbyteorder(self, new_order='S'): */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__minimum); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__reduce); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_axis); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_axis); __Pyx_GIVEREF(__pyx_v_axis); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("ga4py.gain.core.ndarray.min", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_115newbyteorder(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_114newbyteorder[] = "Return the array with the same data viewed with a different byte order.\n\n Equivalent to::\n\n arr.view(arr.dtype.newbytorder(new_order))\n\n Changes are also made in all fields and sub-arrays of the array data\n type.\n\n\n\n Parameters\n ----------\n new_order : string, optional\n Byte order to force; a value from the byte order specifications\n above. `new_order` codes can be any of::\n\n * 'S' - swap dtype from current to opposite endian\n * {'<', 'L'} - little endian\n * {'>', 'B'} - big endian\n * {'=', 'N'} - native order\n * {'|', 'I'} - ignore (no change to byte order)\n\n The default value ('S') results in swapping the current\n byte order. The code does a case-insensitive check on the first\n letter of `new_order` for the alternatives above. For example,\n any of 'B' or 'b' or 'biggish' are valid to specify big-endian.\n\n\n Returns\n -------\n new_arr : array\n New array object with the dtype reflecting given change to the\n byte order.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_115newbyteorder = {__Pyx_NAMESTR("newbyteorder"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_115newbyteorder, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_114newbyteorder)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_115newbyteorder(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_new_order = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("newbyteorder (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__new_order,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)((PyObject*)__pyx_n_s__S)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__new_order); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "newbyteorder") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_new_order = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("newbyteorder", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.newbyteorder", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_114newbyteorder(__pyx_self, __pyx_v_self, __pyx_v_new_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1312 * return minimum.reduce(self, axis, out) * * def newbyteorder(self, new_order='S'): # <<<<<<<<<<<<<< * """Return the array with the same data viewed with a different byte order. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_114newbyteorder(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_new_order) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("newbyteorder", 0); __Pyx_TraceCall("newbyteorder", __pyx_f[0], 1312); /* "ga4py/gain/core.pyx":1349 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def nonzero(self): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.newbyteorder", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_117nonzero(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_116nonzero[] = "Return the indices of the elements that are non-zero.\n\n Refer to `numpy.nonzero` for full documentation.\n\n See Also\n --------\n numpy.nonzero : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_117nonzero = {__Pyx_NAMESTR("nonzero"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_117nonzero, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_116nonzero)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_117nonzero(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nonzero (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_116nonzero(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1351 * raise NotImplementedError * * def nonzero(self): # <<<<<<<<<<<<<< * """Return the indices of the elements that are non-zero. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_116nonzero(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("nonzero", 0); __Pyx_TraceCall("nonzero", __pyx_f[0], 1351); /* "ga4py/gain/core.pyx":1361 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def prod(self, axis=None, dtype=None, out=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.nonzero", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_119prod(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_118prod[] = "Return the product of the array elements over the given axis\n\n Refer to `numpy.prod` for full documentation.\n\n See Also\n --------\n numpy.prod : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_119prod = {__Pyx_NAMESTR("prod"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_119prod, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_118prod)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_119prod(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("prod (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/core.pyx":1363 * raise NotImplementedError * * def prod(self, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the product of the array elements over the given axis * */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); values[3] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "prod") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_axis = values[1]; __pyx_v_dtype = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("prod", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.prod", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_118prod(__pyx_self, __pyx_v_self, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_118prod(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("prod", 0); __Pyx_TraceCall("prod", __pyx_f[0], 1363); /* "ga4py/gain/core.pyx":1373 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def ptp(self, axis=None, out=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.prod", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_121ptp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_120ptp[] = "Peak to peak (maximum - minimum) value along a given axis.\n\n Refer to `numpy.ptp` for full documentation.\n\n See Also\n --------\n numpy.ptp : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_121ptp = {__Pyx_NAMESTR("ptp"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_121ptp, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_120ptp)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_121ptp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("ptp (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/core.pyx":1375 * raise NotImplementedError * * def ptp(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Peak to peak (maximum - minimum) value along a given axis. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ptp") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("ptp", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.ptp", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_120ptp(__pyx_self, __pyx_v_self, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_120ptp(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("ptp", 0); __Pyx_TraceCall("ptp", __pyx_f[0], 1375); /* "ga4py/gain/core.pyx":1385 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def put(self, indices, values, mode='raise'): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.ptp", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_123put(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_122put[] = "Set ``a.flat[n] = values[n]`` for all `n` in indices.\n\n Refer to `numpy.put` for full documentation.\n\n See Also\n --------\n numpy.put : equivalent function\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_123put = {__Pyx_NAMESTR("put"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_123put, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_122put)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_123put(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_indices = 0; CYTHON_UNUSED PyObject *__pyx_v_values = 0; CYTHON_UNUSED PyObject *__pyx_v_mode = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("put (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__indices,&__pyx_n_s__values,&__pyx_n_s__mode,0}; PyObject* values[4] = {0,0,0,0}; values[3] = ((PyObject *)((PyObject*)__pyx_n_s__raise)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__indices)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__values)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "put") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_indices = values[1]; __pyx_v_values = values[2]; __pyx_v_mode = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("put", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.put", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_122put(__pyx_self, __pyx_v_self, __pyx_v_indices, __pyx_v_values, __pyx_v_mode); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1387 * raise NotImplementedError * * def put(self, indices, values, mode='raise'): # <<<<<<<<<<<<<< * """Set ``a.flat[n] = values[n]`` for all `n` in indices. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_122put(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_indices, CYTHON_UNUSED PyObject *__pyx_v_values, CYTHON_UNUSED PyObject *__pyx_v_mode) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("put", 0); __Pyx_TraceCall("put", __pyx_f[0], 1387); /* "ga4py/gain/core.pyx":1397 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def ravel(self, order=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1397; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.put", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_125ravel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_124ravel[] = "Return a flattened array.\n\n Refer to `numpy.ravel` for full documentation.\n\n See Also\n --------\n numpy.ravel : equivalent function\n\n ndarray.flat : a flat iterator on the array.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_125ravel = {__Pyx_NAMESTR("ravel"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_125ravel, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_124ravel)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_125ravel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("ravel (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__order,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/core.pyx":1399 * raise NotImplementedError * * def ravel(self, order=None): # <<<<<<<<<<<<<< * """Return a flattened array. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ravel") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_order = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("ravel", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.ravel", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_124ravel(__pyx_self, __pyx_v_self, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_124ravel(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_order) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("ravel", 0); __Pyx_TraceCall("ravel", __pyx_f[0], 1399); /* "ga4py/gain/core.pyx":1411 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def repeat(self, repeats, axis=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.ravel", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_127repeat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_126repeat[] = "Repeat elements of an array.\n\n Refer to `numpy.repeat` for full documentation.\n\n See Also\n --------\n numpy.repeat : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_127repeat = {__Pyx_NAMESTR("repeat"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_127repeat, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_126repeat)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_127repeat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_repeats = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("repeat (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__repeats,&__pyx_n_s__axis,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/core.pyx":1413 * raise NotImplementedError * * def repeat(self, repeats, axis=None): # <<<<<<<<<<<<<< * """Repeat elements of an array. * */ values[2] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__repeats)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("repeat", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1413; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "repeat") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1413; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_repeats = values[1]; __pyx_v_axis = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("repeat", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1413; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.repeat", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_126repeat(__pyx_self, __pyx_v_self, __pyx_v_repeats, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_126repeat(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_repeats, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("repeat", 0); __Pyx_TraceCall("repeat", __pyx_f[0], 1413); /* "ga4py/gain/core.pyx":1423 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def reshape(self, shape, order='C', *args): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.repeat", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_129reshape(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_128reshape[] = "Returns an array containing the same data with a new shape.\n\n Refer to `numpy.reshape` for full documentation.\n\n See Also\n --------\n numpy.reshape : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_129reshape = {__Pyx_NAMESTR("reshape"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_129reshape, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_128reshape)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_129reshape(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_shape = 0; PyObject *__pyx_v_order = 0; PyObject *__pyx_v_args = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("reshape (wrapper)", 0); if (PyTuple_GET_SIZE(__pyx_args) > 3) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 3, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__shape,&__pyx_n_s__order,0}; PyObject* values[3] = {0,0,0}; values[2] = ((PyObject *)((PyObject*)__pyx_n_s__C)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__shape)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("reshape", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 3) ? pos_args : 3; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "reshape") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { default: case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; case 1: case 0: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_shape = values[1]; __pyx_v_order = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("reshape", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.reshape", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_128reshape(__pyx_self, __pyx_v_self, __pyx_v_shape, __pyx_v_order, __pyx_v_args); __Pyx_XDECREF(__pyx_v_args); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1425 * raise NotImplementedError * * def reshape(self, shape, order='C', *args): # <<<<<<<<<<<<<< * """Returns an array containing the same data with a new shape. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_128reshape(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_shape, PyObject *__pyx_v_order, PyObject *__pyx_v_args) { PyObject *__pyx_v_count_neg_ones = NULL; PyObject *__pyx_v_shape_product = NULL; PyObject *__pyx_v_a = NULL; PyObject *__pyx_v_nda = NULL; PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_v_lohi_shape = NULL; PyObject *__pyx_v_i = NULL; PyObject *__pyx_v_strides = NULL; PyObject *__pyx_v_size = NULL; PyObject *__pyx_v_i_flat = NULL; PyObject *__pyx_v_i_unravel = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; int __pyx_t_7; PyObject *(*__pyx_t_8)(PyObject *); Py_ssize_t __pyx_t_9; PyObject *(*__pyx_t_10)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("reshape", 0); __Pyx_TraceCall("reshape", __pyx_f[0], 1425); __Pyx_INCREF(__pyx_v_shape); __Pyx_INCREF(__pyx_v_order); /* "ga4py/gain/core.pyx":1435 * * """ * if type(order) == type(""): # <<<<<<<<<<<<<< * # assume user specified a shape tuple * shape = listify(shape) */ __pyx_t_1 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_order)), ((PyObject *)Py_TYPE(((PyObject *)__pyx_kp_s_45))), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* "ga4py/gain/core.pyx":1437 * if type(order) == type(""): * # assume user specified a shape tuple * shape = listify(shape) # <<<<<<<<<<<<<< * else: * # assume user specified an unpacked shape e.g. reshape(3,4,5) */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_4gain_4core_listify(__pyx_v_shape, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_shape, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":1440 * else: * # assume user specified an unpacked shape e.g. reshape(3,4,5) * shape = listify([shape]+[order]+list(args)) # <<<<<<<<<<<<<< * order = 'C' * shape = np.asarray(shape, dtype=np.int64) */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1440; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_shape); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1440; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_order); PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_order); __Pyx_GIVEREF(__pyx_v_order); __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1440; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1440; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)__pyx_v_args)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_args)); __Pyx_GIVEREF(((PyObject *)__pyx_v_args)); __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1440; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Add(((PyObject *)__pyx_t_4), __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1440; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_4gain_4core_listify(((PyObject *)__pyx_t_3), 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1440; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_shape, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":1441 * # assume user specified an unpacked shape e.g. reshape(3,4,5) * shape = listify([shape]+[order]+list(args)) * order = 'C' # <<<<<<<<<<<<<< * shape = np.asarray(shape, dtype=np.int64) * count_neg_ones = shape[shape==-1].size */ __Pyx_INCREF(((PyObject *)__pyx_n_s__C)); __Pyx_DECREF_SET(__pyx_v_order, ((PyObject *)__pyx_n_s__C)); } __pyx_L3:; /* "ga4py/gain/core.pyx":1442 * shape = listify([shape]+[order]+list(args)) * order = 'C' * shape = np.asarray(shape, dtype=np.int64) # <<<<<<<<<<<<<< * count_neg_ones = shape[shape==-1].size * if count_neg_ones > 1: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__asarray); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__int64); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_shape, __pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":1443 * order = 'C' * shape = np.asarray(shape, dtype=np.int64) * count_neg_ones = shape[shape==-1].size # <<<<<<<<<<<<<< * if count_neg_ones > 1: * raise ValueError, "can only specify one unknown dimension" */ __pyx_t_6 = PyObject_RichCompare(__pyx_v_shape, __pyx_int_neg_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = PyObject_GetItem(__pyx_v_shape, __pyx_t_6); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__size); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_count_neg_ones = __pyx_t_6; __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":1444 * shape = np.asarray(shape, dtype=np.int64) * count_neg_ones = shape[shape==-1].size * if count_neg_ones > 1: # <<<<<<<<<<<<<< * raise ValueError, "can only specify one unknown dimension" * if count_neg_ones == 1: */ __pyx_t_6 = PyObject_RichCompare(__pyx_v_count_neg_ones, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_2) { /* "ga4py/gain/core.pyx":1445 * count_neg_ones = shape[shape==-1].size * if count_neg_ones > 1: * raise ValueError, "can only specify one unknown dimension" # <<<<<<<<<<<<<< * if count_neg_ones == 1: * shape_product = np.prod(shape)*(-1) */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_46), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1445; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/core.pyx":1446 * if count_neg_ones > 1: * raise ValueError, "can only specify one unknown dimension" * if count_neg_ones == 1: # <<<<<<<<<<<<<< * shape_product = np.prod(shape)*(-1) * if np.size%shape_product != 0: */ __pyx_t_6 = PyObject_RichCompare(__pyx_v_count_neg_ones, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1446; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1446; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_2) { /* "ga4py/gain/core.pyx":1447 * raise ValueError, "can only specify one unknown dimension" * if count_neg_ones == 1: * shape_product = np.prod(shape)*(-1) # <<<<<<<<<<<<<< * if np.size%shape_product != 0: * raise ValueError, "total size of new array must be unchanged" */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__prod); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __pyx_t_6 = PyNumber_Multiply(__pyx_t_1, __pyx_int_neg_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_shape_product = __pyx_t_6; __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":1448 * if count_neg_ones == 1: * shape_product = np.prod(shape)*(-1) * if np.size%shape_product != 0: # <<<<<<<<<<<<<< * raise ValueError, "total size of new array must be unchanged" * shape[shape==-1] = np.size//shape_product */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyNumber_Remainder(__pyx_t_1, __pyx_v_shape_product); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_RichCompare(__pyx_t_6, __pyx_int_0, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* "ga4py/gain/core.pyx":1449 * shape_product = np.prod(shape)*(-1) * if np.size%shape_product != 0: * raise ValueError, "total size of new array must be unchanged" # <<<<<<<<<<<<<< * shape[shape==-1] = np.size//shape_product * # now that shape is established, create new array */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_47), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; /* "ga4py/gain/core.pyx":1450 * if np.size%shape_product != 0: * raise ValueError, "total size of new array must be unchanged" * shape[shape==-1] = np.size//shape_product # <<<<<<<<<<<<<< * # now that shape is established, create new array * a = ndarray(shape, dtype=self.dtype) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__size); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyNumber_FloorDivide(__pyx_t_6, __pyx_v_shape_product); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyObject_RichCompare(__pyx_v_shape, __pyx_int_neg_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyObject_SetItem(__pyx_v_shape, __pyx_t_6, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L5; } __pyx_L5:; /* "ga4py/gain/core.pyx":1452 * shape[shape==-1] = np.size//shape_product * # now that shape is established, create new array * a = ndarray(shape, dtype=self.dtype) # <<<<<<<<<<<<<< * # based on distribution, gather same indices from self * nda = a.access() */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1452; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1452; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1452; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__dtype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1452; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1452; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1452; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_v_a = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":1454 * a = ndarray(shape, dtype=self.dtype) * # based on distribution, gather same indices from self * nda = a.access() # <<<<<<<<<<<<<< * if nda is not None: * lo,hi = a.distribution() */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__access); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1454; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1454; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_nda = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1455 * # based on distribution, gather same indices from self * nda = a.access() * if nda is not None: # <<<<<<<<<<<<<< * lo,hi = a.distribution() * lohi_shape = hi-lo */ __pyx_t_2 = (__pyx_v_nda != Py_None); __pyx_t_7 = (__pyx_t_2 != 0); if (__pyx_t_7) { /* "ga4py/gain/core.pyx":1456 * nda = a.access() * if nda is not None: * lo,hi = a.distribution() # <<<<<<<<<<<<<< * lohi_shape = hi-lo * i = np.indices(lohi_shape).reshape(len(lohi_shape),-1).T + lo */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__distribution); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_6 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_1)->tp_iternext; index = 0; __pyx_t_4 = __pyx_t_8(__pyx_t_1); if (unlikely(!__pyx_t_4)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_1); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_1), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L9_unpacking_done; __pyx_L8_unpacking_failed:; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L9_unpacking_done:; } __pyx_v_lo = __pyx_t_4; __pyx_t_4 = 0; __pyx_v_hi = __pyx_t_6; __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":1457 * if nda is not None: * lo,hi = a.distribution() * lohi_shape = hi-lo # <<<<<<<<<<<<<< * i = np.indices(lohi_shape).reshape(len(lohi_shape),-1).T + lo * # get the flattened indices */ __pyx_t_3 = PyNumber_Subtract(__pyx_v_hi, __pyx_v_lo); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1457; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_v_lohi_shape = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":1458 * lo,hi = a.distribution() * lohi_shape = hi-lo * i = np.indices(lohi_shape).reshape(len(lohi_shape),-1).T + lo # <<<<<<<<<<<<<< * # get the flattened indices * strides = [1] */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__indices); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_lohi_shape); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_lohi_shape); __Pyx_GIVEREF(__pyx_v_lohi_shape); __pyx_t_4 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__reshape); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_9 = PyObject_Length(__pyx_v_lohi_shape); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_9); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __Pyx_INCREF(__pyx_int_neg_1); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_int_neg_1); __Pyx_GIVEREF(__pyx_int_neg_1); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__T); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyNumber_Add(__pyx_t_6, __pyx_v_lo); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_i = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1460 * i = np.indices(lohi_shape).reshape(len(lohi_shape),-1).T + lo * # get the flattened indices * strides = [1] # <<<<<<<<<<<<<< * for size in shape[-1:0:-1]: * strides = [size*strides[0]] + strides */ __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1460; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_int_1); PyList_SET_ITEM(__pyx_t_4, 0, __pyx_int_1); __Pyx_GIVEREF(__pyx_int_1); __pyx_v_strides = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1461 * # get the flattened indices * strides = [1] * for size in shape[-1:0:-1]: # <<<<<<<<<<<<<< * strides = [size*strides[0]] + strides * i_flat = np.sum(i*strides, axis=1) */ __pyx_t_4 = PyObject_GetItem(__pyx_v_shape, __pyx_k_slice_48); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyList_CheckExact(__pyx_t_4) || PyTuple_CheckExact(__pyx_t_4)) { __pyx_t_6 = __pyx_t_4; __Pyx_INCREF(__pyx_t_6); __pyx_t_9 = 0; __pyx_t_10 = NULL; } else { __pyx_t_9 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_10 = Py_TYPE(__pyx_t_6)->tp_iternext; } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; for (;;) { if (!__pyx_t_10 && PyList_CheckExact(__pyx_t_6)) { if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_4 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_4); __pyx_t_9++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_4 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_10 && PyTuple_CheckExact(__pyx_t_6)) { if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_9); __Pyx_INCREF(__pyx_t_4); __pyx_t_9++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_4 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_4 = __pyx_t_10(__pyx_t_6); if (unlikely(!__pyx_t_4)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_4); } __Pyx_XDECREF_SET(__pyx_v_size, __pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1462 * strides = [1] * for size in shape[-1:0:-1]: * strides = [size*strides[0]] + strides # <<<<<<<<<<<<<< * i_flat = np.sum(i*strides, axis=1) * # unravel the flattened indices based on the original array */ __pyx_t_4 = __Pyx_GetItemInt_List(((PyObject *)__pyx_v_strides), 0, sizeof(long), PyInt_FromLong, 1, 0, 1); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1462; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyNumber_Multiply(__pyx_v_size, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1462; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1462; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Add(((PyObject *)__pyx_t_4), ((PyObject *)__pyx_v_strides)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1462; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_strides, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":1463 * for size in shape[-1:0:-1]: * strides = [size*strides[0]] + strides * i_flat = np.sum(i*strides, axis=1) # <<<<<<<<<<<<<< * # unravel the flattened indices based on the original array * i_unravel = util.unravel_index(i_flat, self.shape) */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__sum); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyNumber_Multiply(__pyx_v_i, ((PyObject *)__pyx_v_strides)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_6)); if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__axis), __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __pyx_v_i_flat = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":1465 * i_flat = np.sum(i*strides, axis=1) * # unravel the flattened indices based on the original array * i_unravel = util.unravel_index(i_flat, self.shape) # <<<<<<<<<<<<<< * nda.flat = self.gather(i_unravel) * a.release_update() */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1465; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__unravel_index); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1465; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1465; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1465; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_i_flat); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_i_flat); __Pyx_GIVEREF(__pyx_v_i_flat); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1465; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_v_i_unravel = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":1466 * # unravel the flattened indices based on the original array * i_unravel = util.unravel_index(i_flat, self.shape) * nda.flat = self.gather(i_unravel) # <<<<<<<<<<<<<< * a.release_update() * return a */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__gather); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_i_unravel); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_i_unravel); __Pyx_GIVEREF(__pyx_v_i_unravel); __pyx_t_6 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_nda, __pyx_n_s__flat, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":1467 * i_unravel = util.unravel_index(i_flat, self.shape) * nda.flat = self.gather(i_unravel) * a.release_update() # <<<<<<<<<<<<<< * return a * */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__release_update); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1467; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1467; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L7; } __pyx_L7:; /* "ga4py/gain/core.pyx":1468 * nda.flat = self.gather(i_unravel) * a.release_update() * return a # <<<<<<<<<<<<<< * * def resize(self, new_shape, refcheck=True): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_a); __pyx_r = __pyx_v_a; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.core.ndarray.reshape", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_count_neg_ones); __Pyx_XDECREF(__pyx_v_shape_product); __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_nda); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XDECREF(__pyx_v_lohi_shape); __Pyx_XDECREF(__pyx_v_i); __Pyx_XDECREF(__pyx_v_strides); __Pyx_XDECREF(__pyx_v_size); __Pyx_XDECREF(__pyx_v_i_flat); __Pyx_XDECREF(__pyx_v_i_unravel); __Pyx_XDECREF(__pyx_v_shape); __Pyx_XDECREF(__pyx_v_order); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1470 * return a * * def resize(self, new_shape, refcheck=True): # <<<<<<<<<<<<<< * """Change shape and size of array in-place. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_322__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__defaults__", 0); __Pyx_TraceCall("__defaults__", __pyx_f[0], 1470); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults3, __pyx_self)->__pyx_arg_refcheck); PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults3, __pyx_self)->__pyx_arg_refcheck); __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults3, __pyx_self)->__pyx_arg_refcheck); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_1)); __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); __Pyx_INCREF(Py_None); PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); __Pyx_GIVEREF(Py_None); __pyx_t_1 = 0; __pyx_r = ((PyObject *)__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_131resize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_130resize[] = "Change shape and size of array in-place.\n\n Parameters\n ----------\n new_shape : tuple of ints, or `n` ints\n Shape of resized array.\n refcheck : bool, optional\n If False, reference count will not be checked. Default is True.\n\n Returns\n -------\n None\n\n Raises\n ------\n ValueError\n If `a` does not own its own data or references or views to it exist,\n and the data memory must be changed.\n\n SystemError\n If the `order` keyword argument is specified. This behaviour is a\n bug in NumPy.\n\n See Also\n --------\n resize : Return a new array with the specified shape.\n\n Notes\n -----\n This reallocates space for the data area if necessary.\n\n Only contiguous arrays (data elements consecutive in memory) can be\n resized.\n\n The purpose of the reference count check is to make sure you\n do not use this array as a buffer for another Python object and then\n reallocate the memory. However, reference counts can increase in\n other ways so if you are sure that you have not shared the memory\n for this array with another Python object, then you may safely set\n `refcheck` to False.\n\n Examples\n --------\n Shrinking an array: array is flattened (in the order that the data are\n stored in memory), resized, and reshaped:\n\n >>> a = np.array([[0, 1], [2, 3]], order='C')\n >>> a.resize((2, 1))\n >>> a\n array([[0],\n [1]])\n\n >>> a = np.array([[0, 1], [2, 3]], order='F')\n >>> a.resize((2, 1))\n >>> a\n array([[0],\n [2]])\n\n Enlarging an array: as above, but missing entries are filled with zeros:\n\n >>> b = np.array([[0, 1], [2, 3]])\n >>> b.resize(2, 3) # new_shape parameter doesn't have to b""e a tuple\n >>> b\n array([[0, 1, 2],\n [3, 0, 0]])\n\n Referencing an array prevents resizing...\n\n >>> c = a\n >>> a.resize((1, 1))\n Traceback (most recent call last):\n ...\n ValueError: cannot resize an array that has been referenced ...\n\n Unless `refcheck` is False:\n\n >>> a.resize((1, 1), refcheck=False)\n >>> a\n array([[0]])\n >>> c\n array([[0]])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_131resize = {__Pyx_NAMESTR("resize"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_131resize, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_130resize)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_131resize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_new_shape = 0; CYTHON_UNUSED PyObject *__pyx_v_refcheck = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("resize (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__new_shape,&__pyx_n_s__refcheck,0}; PyObject* values[3] = {0,0,0}; __pyx_defaults3 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults3, __pyx_self); values[2] = __pyx_dynamic_args->__pyx_arg_refcheck; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__new_shape)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("resize", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1470; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__refcheck); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "resize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1470; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_new_shape = values[1]; __pyx_v_refcheck = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("resize", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1470; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.resize", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_130resize(__pyx_self, __pyx_v_self, __pyx_v_new_shape, __pyx_v_refcheck); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_130resize(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_new_shape, CYTHON_UNUSED PyObject *__pyx_v_refcheck) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("resize", 0); __Pyx_TraceCall("resize", __pyx_f[0], 1470); /* "ga4py/gain/core.pyx":1554 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def round(self, decimals=0, out=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.resize", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_133round(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_132round[] = "Return `a` with each element rounded to the given number of decimals.\n\n Refer to `numpy.around` for full documentation.\n\n See Also\n --------\n numpy.around : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_133round = {__Pyx_NAMESTR("round"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_133round, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_132round)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_133round(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_decimals = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("round (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__decimals,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; values[1] = ((PyObject *)((PyObject *)__pyx_int_0)); /* "ga4py/gain/core.pyx":1556 * raise NotImplementedError * * def round(self, decimals=0, out=None): # <<<<<<<<<<<<<< * """Return `a` with each element rounded to the given number of decimals. * */ values[2] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__decimals); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "round") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_decimals = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("round", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.round", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_132round(__pyx_self, __pyx_v_self, __pyx_v_decimals, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_132round(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_decimals, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("round", 0); __Pyx_TraceCall("round", __pyx_f[0], 1556); /* "ga4py/gain/core.pyx":1566 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def searchsorted(self, v, side='left'): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1566; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.round", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_135searchsorted(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_134searchsorted[] = "Find indices where elements of v should be inserted in a to maintain order.\n\n For full documentation, see `numpy.searchsorted`\n\n See Also\n --------\n numpy.searchsorted : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_135searchsorted = {__Pyx_NAMESTR("searchsorted"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_135searchsorted, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_134searchsorted)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_135searchsorted(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_v = 0; CYTHON_UNUSED PyObject *__pyx_v_side = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("searchsorted (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__v,&__pyx_n_s__side,0}; PyObject* values[3] = {0,0,0}; values[2] = ((PyObject *)((PyObject*)__pyx_n_s__left)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__v)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("searchsorted", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1568; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__side); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "searchsorted") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1568; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_v = values[1]; __pyx_v_side = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("searchsorted", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1568; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.searchsorted", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_134searchsorted(__pyx_self, __pyx_v_self, __pyx_v_v, __pyx_v_side); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1568 * raise NotImplementedError * * def searchsorted(self, v, side='left'): # <<<<<<<<<<<<<< * """Find indices where elements of v should be inserted in a to maintain order. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_134searchsorted(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_v, CYTHON_UNUSED PyObject *__pyx_v_side) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("searchsorted", 0); __Pyx_TraceCall("searchsorted", __pyx_f[0], 1568); /* "ga4py/gain/core.pyx":1578 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def setfield(self, val, dtype, offset=0): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1578; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.searchsorted", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_137setfield(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_136setfield[] = "Put a value into a specified place in a field defined by a data-type.\n\n Place `val` into `a`'s field defined by `dtype` and beginning `offset`\n bytes into the field.\n\n Parameters\n ----------\n val : object\n Value to be placed in field.\n dtype : dtype object\n Data-type of the field in which to place `val`.\n offset : int, optional\n The number of bytes into the field at which to place `val`.\n\n Returns\n -------\n None\n\n See Also\n --------\n getfield\n\n Examples\n --------\n >>> x = np.eye(3)\n >>> x.getfield(np.float64)\n array([[ 1., 0., 0.],\n [ 0., 1., 0.],\n [ 0., 0., 1.]])\n >>> x.setfield(3, np.int32)\n >>> x.getfield(np.int32)\n array([[3, 3, 3],\n [3, 3, 3],\n [3, 3, 3]])\n >>> x\n array([[ 1.00000000e+000, 1.48219694e-323, 1.48219694e-323],\n [ 1.48219694e-323, 1.00000000e+000, 1.48219694e-323],\n [ 1.48219694e-323, 1.48219694e-323, 1.00000000e+000]])\n >>> x.setfield(np.eye(3), np.int32)\n >>> x\n array([[ 1., 0., 0.],\n [ 0., 1., 0.],\n [ 0., 0., 1.]])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_137setfield = {__Pyx_NAMESTR("setfield"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_137setfield, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_136setfield)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_137setfield(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_val = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_offset = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("setfield (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__val,&__pyx_n_s__dtype,&__pyx_n_s__offset,0}; PyObject* values[4] = {0,0,0,0}; values[3] = ((PyObject *)((PyObject *)__pyx_int_0)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("setfield", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1580; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("setfield", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1580; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__offset); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setfield") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1580; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_val = values[1]; __pyx_v_dtype = values[2]; __pyx_v_offset = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("setfield", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1580; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.setfield", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_136setfield(__pyx_self, __pyx_v_self, __pyx_v_val, __pyx_v_dtype, __pyx_v_offset); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1580 * raise NotImplementedError * * def setfield(self, val, dtype, offset=0): # <<<<<<<<<<<<<< * """Put a value into a specified place in a field defined by a data-type. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_136setfield(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_val, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_offset) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("setfield", 0); __Pyx_TraceCall("setfield", __pyx_f[0], 1580); /* "ga4py/gain/core.pyx":1626 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def setflags(self, write=None, align=None, uic=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.setfield", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_139setflags(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_138setflags[] = "Set array flags WRITEABLE, ALIGNED, and UPDATEIFCOPY, respectively.\n\n These Boolean-valued flags affect how numpy interprets the memory\n area used by `a` (see Notes below). The ALIGNED flag can only\n be set to True if the data is actually aligned according to the type.\n The UPDATEIFCOPY flag can never be set to True. The flag WRITEABLE\n can only be set to True if the array owns its own memory, or the\n ultimate owner of the memory exposes a writeable buffer interface,\n or is a string. (The exception for string is made so that unpickling\n can be done without copying memory.)\n\n Parameters\n ----------\n write : bool, optional\n Describes whether or not `a` can be written to.\n align : bool, optional\n Describes whether or not `a` is aligned properly for its type.\n uic : bool, optional\n Describes whether or not `a` is a copy of another \"base\" array.\n\n Notes\n -----\n Array flags provide information about how the memory area used\n for the array is to be interpreted. There are 6 Boolean flags\n in use, only three of which can be changed by the user:\n UPDATEIFCOPY, WRITEABLE, and ALIGNED.\n\n WRITEABLE (W) the data area can be written to;\n\n ALIGNED (A) the data and strides are aligned appropriately for the hardware\n (as determined by the compiler);\n\n UPDATEIFCOPY (U) this array is a copy of some other array (referenced\n by .base). When this array is deallocated, the base array will be\n updated with the contents of this array.\n\n All flags can be accessed using their first (upper case) letter as well\n as the full name.\n\n Examples\n --------\n >>> y\n array([[3, 1, 7],\n [2, 0, 0],\n [8, 5, 9]])\n >>> y.flags\n C_CONTIGUOUS : True\n F_CONTIGUOUS : ""False\n OWNDATA : True\n WRITEABLE : True\n ALIGNED : True\n UPDATEIFCOPY : False\n >>> y.setflags(write=0, align=0)\n >>> y.flags\n C_CONTIGUOUS : True\n F_CONTIGUOUS : False\n OWNDATA : True\n WRITEABLE : False\n ALIGNED : False\n UPDATEIFCOPY : False\n >>> y.setflags(uic=1)\n Traceback (most recent call last):\n File \"\", line 1, in \n ValueError: cannot set UPDATEIFCOPY flag to True\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_139setflags = {__Pyx_NAMESTR("setflags"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_139setflags, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_138setflags)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_139setflags(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_write = 0; CYTHON_UNUSED PyObject *__pyx_v_align = 0; CYTHON_UNUSED PyObject *__pyx_v_uic = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("setflags (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__write,&__pyx_n_s__align,&__pyx_n_s__uic,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/core.pyx":1628 * raise NotImplementedError * * def setflags(self, write=None, align=None, uic=None): # <<<<<<<<<<<<<< * """Set array flags WRITEABLE, ALIGNED, and UPDATEIFCOPY, respectively. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); values[3] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__write); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__align); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__uic); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setflags") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1628; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_write = values[1]; __pyx_v_align = values[2]; __pyx_v_uic = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("setflags", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1628; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.setflags", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_138setflags(__pyx_self, __pyx_v_self, __pyx_v_write, __pyx_v_align, __pyx_v_uic); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_138setflags(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_write, CYTHON_UNUSED PyObject *__pyx_v_align, CYTHON_UNUSED PyObject *__pyx_v_uic) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("setflags", 0); __Pyx_TraceCall("setflags", __pyx_f[0], 1628); /* "ga4py/gain/core.pyx":1695 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def sort(self, axis=-1, kind='quicksort', order=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1695; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.setflags", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_141sort(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_140sort[] = "Sort an array, in-place.\n\n Parameters\n ----------\n axis : int, optional\n Axis along which to sort. Default is -1, which means sort along the\n last axis.\n kind : {'quicksort', 'mergesort', 'heapsort'}, optional\n Sorting algorithm. Default is 'quicksort'.\n order : list, optional\n When `a` is an array with fields defined, this argument specifies\n which fields to compare first, second, etc. Not all fields need be\n specified.\n\n See Also\n --------\n numpy.sort : Return a sorted copy of an array.\n argsort : Indirect sort.\n lexsort : Indirect stable sort on multiple keys.\n searchsorted : Find elements in sorted array.\n\n Notes\n -----\n See ``sort`` for notes on the different sorting algorithms.\n\n Examples\n --------\n >>> a = np.array([[1,4], [3,1]])\n >>> a.sort(axis=1)\n >>> a\n array([[1, 4],\n [1, 3]])\n >>> a.sort(axis=0)\n >>> a\n array([[1, 3],\n [1, 4]])\n\n Use the `order` keyword to specify a field to use when sorting a\n structured array:\n\n >>> a = np.array([('a', 2), ('c', 1)], dtype=[('x', 'S1'), ('y', int)])\n >>> a.sort(order='y')\n >>> a\n array([('c', 1), ('a', 2)],\n dtype=[('x', '|S1'), ('y', ' 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__kind); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sort") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_axis = values[1]; __pyx_v_kind = values[2]; __pyx_v_order = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("sort", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.sort", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_140sort(__pyx_self, __pyx_v_self, __pyx_v_axis, __pyx_v_kind, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_140sort(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_kind, CYTHON_UNUSED PyObject *__pyx_v_order) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("sort", 0); __Pyx_TraceCall("sort", __pyx_f[0], 1697); /* "ga4py/gain/core.pyx":1745 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def squeeze(self): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1745; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.sort", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_143squeeze(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_142squeeze[] = "Remove single-dimensional entries from the shape of `a`.\n\n Refer to `numpy.squeeze` for full documentation.\n\n See Also\n --------\n numpy.squeeze : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_143squeeze = {__Pyx_NAMESTR("squeeze"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_143squeeze, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_142squeeze)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_143squeeze(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("squeeze (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_142squeeze(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1747 * raise NotImplementedError * * def squeeze(self): # <<<<<<<<<<<<<< * """Remove single-dimensional entries from the shape of `a`. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_142squeeze(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("squeeze", 0); __Pyx_TraceCall("squeeze", __pyx_f[0], 1747); /* "ga4py/gain/core.pyx":1757 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def std(self, axis=None, dtype=None, out=None, ddof=0): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1757; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.squeeze", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_145std(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_144std[] = "Remove single-dimensional entries from the shape of `a`.\n\n Refer to `numpy.squeeze` for full documentation.\n\n See Also\n --------\n numpy.squeeze : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_145std = {__Pyx_NAMESTR("std"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_145std, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_144std)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_145std(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; CYTHON_UNUSED PyObject *__pyx_v_ddof = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("std (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,&__pyx_n_s__ddof,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/gain/core.pyx":1759 * raise NotImplementedError * * def std(self, axis=None, dtype=None, out=None, ddof=0): # <<<<<<<<<<<<<< * """Remove single-dimensional entries from the shape of `a`. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); values[3] = ((PyObject *)((PyObject *)Py_None)); values[4] = ((PyObject *)((PyObject *)__pyx_int_0)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ddof); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "std") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1759; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_axis = values[1]; __pyx_v_dtype = values[2]; __pyx_v_out = values[3]; __pyx_v_ddof = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("std", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1759; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.std", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_144std(__pyx_self, __pyx_v_self, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out, __pyx_v_ddof); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_144std(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_ddof) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("std", 0); __Pyx_TraceCall("std", __pyx_f[0], 1759); /* "ga4py/gain/core.pyx":1769 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def sum(self, axis=None, dtype=None, out=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1769; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.std", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_147sum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_146sum[] = "Return the sum of the array elements over the given axis.\n\n Refer to `numpy.sum` for full documentation.\n\n See Also\n --------\n numpy.sum : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_147sum = {__Pyx_NAMESTR("sum"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_147sum, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_146sum)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_147sum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("sum (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/core.pyx":1771 * raise NotImplementedError * * def sum(self, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the sum of the array elements over the given axis. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); values[3] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sum") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_axis = values[1]; __pyx_v_dtype = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("sum", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.sum", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_146sum(__pyx_self, __pyx_v_self, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_146sum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_v_local = NULL; PyObject *__pyx_v_value = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("sum", 0); __Pyx_TraceCall("sum", __pyx_f[0], 1771); /* "ga4py/gain/core.pyx":1781 * * """ * if axis is None: # <<<<<<<<<<<<<< * local = self.access() * if local is not None: */ __pyx_t_1 = (__pyx_v_axis == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":1782 * """ * if axis is None: * local = self.access() # <<<<<<<<<<<<<< * if local is not None: * value = np.sum(local) */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__access); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_local = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1783 * if axis is None: * local = self.access() * if local is not None: # <<<<<<<<<<<<<< * value = np.sum(local) * value = comm().allreduce(value, MPI.SUM) */ __pyx_t_2 = (__pyx_v_local != Py_None); __pyx_t_1 = (__pyx_t_2 != 0); if (__pyx_t_1) { /* "ga4py/gain/core.pyx":1784 * local = self.access() * if local is not None: * value = np.sum(local) # <<<<<<<<<<<<<< * value = comm().allreduce(value, MPI.SUM) * else: */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1784; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__sum); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1784; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1784; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_local); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_local); __Pyx_GIVEREF(__pyx_v_local); __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1784; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_v_value = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":1785 * if local is not None: * value = np.sum(local) * value = comm().allreduce(value, MPI.SUM) # <<<<<<<<<<<<<< * else: * value = comm().allreduce(0, MPI.SUM) */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__allreduce); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__MPI); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__SUM); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_value); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_3); __pyx_t_3 = 0; goto __pyx_L4; } /*else*/ { /* "ga4py/gain/core.pyx":1787 * value = comm().allreduce(value, MPI.SUM) * else: * value = comm().allreduce(0, MPI.SUM) # <<<<<<<<<<<<<< * return value * else: */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1787; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1787; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__allreduce); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1787; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__MPI); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1787; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__SUM); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1787; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1787; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_int_0); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_int_0); __Pyx_GIVEREF(__pyx_int_0); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1787; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_v_value = __pyx_t_5; __pyx_t_5 = 0; } __pyx_L4:; /* "ga4py/gain/core.pyx":1788 * else: * value = comm().allreduce(0, MPI.SUM) * return value # <<<<<<<<<<<<<< * else: * raise NotImplementedError */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_value); __pyx_r = __pyx_v_value; goto __pyx_L0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":1790 * return value * else: * raise NotImplementedError # <<<<<<<<<<<<<< * * def swapaxes(self, axis1, axis2): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("ga4py.gain.core.ndarray.sum", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_local); __Pyx_XDECREF(__pyx_v_value); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_149swapaxes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_148swapaxes[] = "Return a view of the array with `axis1` and `axis2` interchanged.\n\n Refer to `numpy.swapaxes` for full documentation.\n\n See Also\n --------\n numpy.swapaxes : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_149swapaxes = {__Pyx_NAMESTR("swapaxes"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_149swapaxes, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_148swapaxes)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_149swapaxes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_axis1 = 0; CYTHON_UNUSED PyObject *__pyx_v_axis2 = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("swapaxes (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axis1,&__pyx_n_s__axis2,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis1)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("swapaxes", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1792; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("swapaxes", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1792; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "swapaxes") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1792; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_self = values[0]; __pyx_v_axis1 = values[1]; __pyx_v_axis2 = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("swapaxes", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1792; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.swapaxes", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_148swapaxes(__pyx_self, __pyx_v_self, __pyx_v_axis1, __pyx_v_axis2); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1792 * raise NotImplementedError * * def swapaxes(self, axis1, axis2): # <<<<<<<<<<<<<< * """Return a view of the array with `axis1` and `axis2` interchanged. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_148swapaxes(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis1, CYTHON_UNUSED PyObject *__pyx_v_axis2) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("swapaxes", 0); __Pyx_TraceCall("swapaxes", __pyx_f[0], 1792); /* "ga4py/gain/core.pyx":1802 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def take(self, indices, axis=None, out=None, mode='raise'): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.swapaxes", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_151take(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_150take[] = "Return an array formed from the elements of `a` at the given indices.\n\n Refer to `numpy.take` for full documentation.\n\n See Also\n --------\n numpy.take : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_151take = {__Pyx_NAMESTR("take"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_151take, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_150take)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_151take(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_indices = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; CYTHON_UNUSED PyObject *__pyx_v_mode = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("take (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__indices,&__pyx_n_s__axis,&__pyx_n_s__out,&__pyx_n_s__mode,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/gain/core.pyx":1804 * raise NotImplementedError * * def take(self, indices, axis=None, out=None, mode='raise'): # <<<<<<<<<<<<<< * """Return an array formed from the elements of `a` at the given indices. * */ values[2] = ((PyObject *)((PyObject *)Py_None)); values[3] = ((PyObject *)((PyObject *)Py_None)); values[4] = ((PyObject *)((PyObject*)__pyx_n_s__raise)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__indices)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("take", 0, 2, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1804; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "take") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1804; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_indices = values[1]; __pyx_v_axis = values[2]; __pyx_v_out = values[3]; __pyx_v_mode = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("take", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1804; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.take", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_150take(__pyx_self, __pyx_v_self, __pyx_v_indices, __pyx_v_axis, __pyx_v_out, __pyx_v_mode); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_150take(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_indices, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_mode) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("take", 0); __Pyx_TraceCall("take", __pyx_f[0], 1804); /* "ga4py/gain/core.pyx":1814 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def tofile(self, fid, sep="", format="%s"): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1814; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.take", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_153tofile(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_152tofile[] = "Write array to a file as text or binary (default).\n\n Data is always written in 'C' order, independent of the order of `a`.\n The data produced by this method can be recovered using the function\n fromfile().\n\n Parameters\n ----------\n fid : file or str\n An open file object, or a string containing a filename.\n sep : str\n Separator between array items for text output.\n If \"\" (empty), a binary file is written, equivalent to\n ``file.write(a.tostring())``.\n format : str\n Format string for text file output.\n Each entry in the array is formatted to text by first converting\n it to the closest Python type, and then using \"format\" % item.\n\n Notes\n -----\n This is a convenience function for quick storage of array data.\n Information on endianness and precision is lost, so this method is not a\n good choice for files intended to archive data or transport data between\n machines with different endianness. Some of these problems can be overcome\n by outputting the data as text files, at the expense of speed and file\n size.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_153tofile = {__Pyx_NAMESTR("tofile"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_153tofile, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_152tofile)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_153tofile(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_fid = 0; CYTHON_UNUSED PyObject *__pyx_v_sep = 0; CYTHON_UNUSED PyObject *__pyx_v_format = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("tofile (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__fid,&__pyx_n_s__sep,&__pyx_n_s__format,0}; PyObject* values[4] = {0,0,0,0}; values[2] = ((PyObject *)((PyObject*)__pyx_kp_s_45)); values[3] = ((PyObject *)((PyObject*)__pyx_kp_s_49)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fid)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("tofile", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1816; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sep); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__format); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tofile") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1816; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_fid = values[1]; __pyx_v_sep = values[2]; __pyx_v_format = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("tofile", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1816; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.tofile", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_152tofile(__pyx_self, __pyx_v_self, __pyx_v_fid, __pyx_v_sep, __pyx_v_format); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1816 * raise NotImplementedError * * def tofile(self, fid, sep="", format="%s"): # <<<<<<<<<<<<<< * """Write array to a file as text or binary (default). * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_152tofile(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_fid, CYTHON_UNUSED PyObject *__pyx_v_sep, CYTHON_UNUSED PyObject *__pyx_v_format) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("tofile", 0); __Pyx_TraceCall("tofile", __pyx_f[0], 1816); /* "ga4py/gain/core.pyx":1846 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def tolist(self): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1846; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.tofile", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_155tolist(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_154tolist[] = "Return the array as a (possibly nested) list.\n\n Return a copy of the array data as a (nested) Python list.\n Data items are converted to the nearest compatible Python type.\n\n Parameters\n ----------\n none\n\n Returns\n -------\n y : list\n The possibly nested list of array elements.\n\n Notes\n -----\n The array may be recreated, ``a = np.array(a.tolist())``.\n\n Examples\n --------\n >>> a = np.array([1, 2])\n >>> a.tolist()\n [1, 2]\n >>> a = np.array([[1, 2], [3, 4]])\n >>> list(a)\n [array([1, 2]), array([3, 4])]\n >>> a.tolist()\n [[1, 2], [3, 4]]\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_155tolist = {__Pyx_NAMESTR("tolist"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_155tolist, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_154tolist)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_155tolist(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("tolist (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_154tolist(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1848 * raise NotImplementedError * * def tolist(self): # <<<<<<<<<<<<<< * """Return the array as a (possibly nested) list. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_154tolist(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("tolist", 0); __Pyx_TraceCall("tolist", __pyx_f[0], 1848); /* "ga4py/gain/core.pyx":1879 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def tostring(self, order='C'): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1879; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.tolist", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_157tostring(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_156tostring[] = "Construct a Python string containing the raw data bytes in the array.\n\n Constructs a Python string showing a copy of the raw contents of\n data memory. The string can be produced in either 'C' or 'Fortran',\n or 'Any' order (the default is 'C'-order). 'Any' order means C-order\n unless the F_CONTIGUOUS flag in the array is set, in which case it\n means 'Fortran' order.\n\n Parameters\n ----------\n order : {'C', 'F', None}, optional\n Order of the data for multidimensional arrays:\n C, Fortran, or the same as for the original array.\n\n Returns\n -------\n s : str\n A Python string exhibiting a copy of `a`'s raw data.\n\n Examples\n --------\n >>> x = np.array([[0, 1], [2, 3]])\n >>> x.tostring()\n '\000\000\000\000\001\000\000\000\002\000\000\000\003\000\000\000'\n >>> x.tostring('C') == x.tostring()\n True\n >>> x.tostring('F')\n '\000\000\000\000\002\000\000\000\001\000\000\000\003\000\000\000'\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_157tostring = {__Pyx_NAMESTR("tostring"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_157tostring, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_156tostring)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_157tostring(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("tostring (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__order,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)((PyObject*)__pyx_n_s__C)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tostring") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1881; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_order = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("tostring", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1881; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.tostring", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_156tostring(__pyx_self, __pyx_v_self, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1881 * raise NotImplementedError * * def tostring(self, order='C'): # <<<<<<<<<<<<<< * """Construct a Python string containing the raw data bytes in the array. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_156tostring(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_order) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("tostring", 0); __Pyx_TraceCall("tostring", __pyx_f[0], 1881); /* "ga4py/gain/core.pyx":1912 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def trace(self, offset=0, axis1=0, axis2=1, dtype=None, out=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1912; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.tostring", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_159trace(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_158trace[] = "Return the sum along diagonals of the array.\n\n Refer to `numpy.trace` for full documentation.\n\n See Also\n --------\n numpy.trace : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_159trace = {__Pyx_NAMESTR("trace"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_159trace, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_158trace)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_159trace(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_offset = 0; CYTHON_UNUSED PyObject *__pyx_v_axis1 = 0; CYTHON_UNUSED PyObject *__pyx_v_axis2 = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("trace (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__offset,&__pyx_n_s__axis1,&__pyx_n_s__axis2,&__pyx_n_s__dtype,&__pyx_n_s__out,0}; PyObject* values[6] = {0,0,0,0,0,0}; values[1] = ((PyObject *)((PyObject *)__pyx_int_0)); values[2] = ((PyObject *)((PyObject *)__pyx_int_0)); values[3] = ((PyObject *)((PyObject *)__pyx_int_1)); /* "ga4py/gain/core.pyx":1914 * raise NotImplementedError * * def trace(self, offset=0, axis1=0, axis2=1, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the sum along diagonals of the array. * */ values[4] = ((PyObject *)((PyObject *)Py_None)); values[5] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__offset); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis1); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis2); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[5] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "trace") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1914; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_offset = values[1]; __pyx_v_axis1 = values[2]; __pyx_v_axis2 = values[3]; __pyx_v_dtype = values[4]; __pyx_v_out = values[5]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("trace", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1914; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.trace", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_158trace(__pyx_self, __pyx_v_self, __pyx_v_offset, __pyx_v_axis1, __pyx_v_axis2, __pyx_v_dtype, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_158trace(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_offset, CYTHON_UNUSED PyObject *__pyx_v_axis1, CYTHON_UNUSED PyObject *__pyx_v_axis2, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("trace", 0); __Pyx_TraceCall("trace", __pyx_f[0], 1914); /* "ga4py/gain/core.pyx":1924 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def transpose(self, *axes): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1924; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.trace", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_161transpose(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_160transpose[] = "Returns a view of the array with axes transposed.\n\n For a 1-D array, this has no effect. (To change between column and\n row vectors, first cast the 1-D array into a matrix object.)\n For a 2-D array, this is the usual matrix transpose.\n For an n-D array, if axes are given, their order indicates how the\n axes are permuted (see Examples). If axes are not provided and\n ``a.shape = (i[0], i[1], ... i[n-2], i[n-1])``, then\n ``a.transpose().shape = (i[n-1], i[n-2], ... i[1], i[0])``.\n\n Parameters\n ----------\n axes : None, tuple of ints, or `n` ints\n\n * None or no argument: reverses the order of the axes.\n\n * tuple of ints: `i` in the `j`-th place in the tuple means `a`'s\n `i`-th axis becomes `a.transpose()`'s `j`-th axis.\n\n * `n` ints: same as an n-tuple of the same ints (this form is\n intended simply as a \"convenience\" alternative to the tuple form)\n\n Returns\n -------\n out : ndarray\n View of `a`, with axes suitably permuted.\n\n See Also\n --------\n ndarray.T : Array property returning the array transposed.\n\n Examples\n --------\n >>> a = np.array([[1, 2], [3, 4]])\n >>> a\n array([[1, 2],\n [3, 4]])\n >>> a.transpose()\n array([[1, 3],\n [2, 4]])\n >>> a.transpose((1, 0))\n array([[1, 3],\n [2, 4]])\n >>> a.transpose(1, 0)\n array([[1, 3],\n [2, 4]])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_161transpose = {__Pyx_NAMESTR("transpose"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_161transpose, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_160transpose)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_161transpose(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_axes = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("transpose (wrapper)", 0); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_axes = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_axes)) { __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_axes); } else { __pyx_v_axes = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "transpose") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1926; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("transpose", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1926; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_axes); __pyx_v_axes = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.transpose", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_160transpose(__pyx_self, __pyx_v_self, __pyx_v_axes); __Pyx_XDECREF(__pyx_v_axes); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":1926 * raise NotImplementedError * * def transpose(self, *axes): # <<<<<<<<<<<<<< * """Returns a view of the array with axes transposed. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_160transpose(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_axes) { PyObject *__pyx_v_ret = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_t_4; PyObject *__pyx_t_5 = NULL; Py_ssize_t __pyx_t_6; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("transpose", 0); __Pyx_TraceCall("transpose", __pyx_f[0], 1926); __Pyx_INCREF(__pyx_v_axes); /* "ga4py/gain/core.pyx":1975 * * """ * ret = self[:] # <<<<<<<<<<<<<< * if self.ndim < 2: * return ret */ __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_v_self, 0, 0, NULL, NULL, &__pyx_k_slice_50, 0, 0, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_ret = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":1976 * """ * ret = self[:] * if self.ndim < 2: # <<<<<<<<<<<<<< * return ret * if not axes: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_2, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":1977 * ret = self[:] * if self.ndim < 2: * return ret # <<<<<<<<<<<<<< * if not axes: * # empty axes tuple i.e. no axes were passed */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_ret); __pyx_r = __pyx_v_ret; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":1978 * if self.ndim < 2: * return ret * if not axes: # <<<<<<<<<<<<<< * # empty axes tuple i.e. no axes were passed * axes = np.arange(self.ndim)[::-1] */ __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_axes); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1978; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = ((!__pyx_t_3) != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":1980 * if not axes: * # empty axes tuple i.e. no axes were passed * axes = np.arange(self.ndim)[::-1] # <<<<<<<<<<<<<< * elif len(axes) == 1: * # we have either None or a tuple of ints */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__arange); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__ndim); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_t_5 = PyObject_GetItem(__pyx_t_2, __pyx_k_slice_51); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_axes, __pyx_t_5); __pyx_t_5 = 0; goto __pyx_L4; } /* "ga4py/gain/core.pyx":1981 * # empty axes tuple i.e. no axes were passed * axes = np.arange(self.ndim)[::-1] * elif len(axes) == 1: # <<<<<<<<<<<<<< * # we have either None or a tuple of ints * if axes[0] is None: */ __pyx_t_6 = PyObject_Length(__pyx_v_axes); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1981; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = ((__pyx_t_6 == 1) != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":1983 * elif len(axes) == 1: * # we have either None or a tuple of ints * if axes[0] is None: # <<<<<<<<<<<<<< * axes = np.arange(self.ndim)[::-1] * elif isinstance(axes[0], tuple): */ __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_axes, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1983; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = (__pyx_t_5 == Py_None); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_3 = (__pyx_t_4 != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":1984 * # we have either None or a tuple of ints * if axes[0] is None: * axes = np.arange(self.ndim)[::-1] # <<<<<<<<<<<<<< * elif isinstance(axes[0], tuple): * axes = axes[0] */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__arange); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__ndim); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyObject_GetItem(__pyx_t_5, __pyx_k_slice_52); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_axes, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L5; } /* "ga4py/gain/core.pyx":1985 * if axes[0] is None: * axes = np.arange(self.ndim)[::-1] * elif isinstance(axes[0], tuple): # <<<<<<<<<<<<<< * axes = axes[0] * else: */ __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_axes, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1985; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_Check(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":1986 * axes = np.arange(self.ndim)[::-1] * elif isinstance(axes[0], tuple): * axes = axes[0] # <<<<<<<<<<<<<< * else: * raise ValueError, "invalid axis for this array" */ __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_axes, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1986; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_axes, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L5; } /*else*/ { /* "ga4py/gain/core.pyx":1988 * axes = axes[0] * else: * raise ValueError, "invalid axis for this array" # <<<<<<<<<<<<<< * else: * # assume axes is a tuple of ints */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_53), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1988; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L5:; goto __pyx_L4; } /*else*/ { /* "ga4py/gain/core.pyx":1991 * else: * # assume axes is a tuple of ints * axes = np.asarray(axes, dtype=np.int64) # <<<<<<<<<<<<<< * if len(axes) != self.ndim: * raise ValueError, "axes don't match array" */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__asarray); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_axes); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_axes); __Pyx_GIVEREF(__pyx_v_axes); __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__int64); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_axes, __pyx_t_8); __pyx_t_8 = 0; } __pyx_L4:; /* "ga4py/gain/core.pyx":1992 * # assume axes is a tuple of ints * axes = np.asarray(axes, dtype=np.int64) * if len(axes) != self.ndim: # <<<<<<<<<<<<<< * raise ValueError, "axes don't match array" * ret.global_slice = self.global_slice.transpose(axes) */ __pyx_t_6 = PyObject_Length(__pyx_v_axes); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1992; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1992; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__ndim); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1992; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_RichCompare(__pyx_t_8, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1992; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1992; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_4) { /* "ga4py/gain/core.pyx":1993 * axes = np.asarray(axes, dtype=np.int64) * if len(axes) != self.ndim: * raise ValueError, "axes don't match array" # <<<<<<<<<<<<<< * ret.global_slice = self.global_slice.transpose(axes) * return ret */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_54), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1993; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; /* "ga4py/gain/core.pyx":1994 * if len(axes) != self.ndim: * raise ValueError, "axes don't match array" * ret.global_slice = self.global_slice.transpose(axes) # <<<<<<<<<<<<<< * return ret * */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1994; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__transpose); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1994; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1994; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_axes); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_axes); __Pyx_GIVEREF(__pyx_v_axes); __pyx_t_8 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1994; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_ret, __pyx_n_s__global_slice, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1994; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; /* "ga4py/gain/core.pyx":1995 * raise ValueError, "axes don't match array" * ret.global_slice = self.global_slice.transpose(axes) * return ret # <<<<<<<<<<<<<< * * def var(self, axis=None, dtype=None, out=None, ddof=0): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_ret); __pyx_r = __pyx_v_ret; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("ga4py.gain.core.ndarray.transpose", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_axes); __Pyx_XDECREF(__pyx_v_ret); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_163var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_162var[] = "Returns the variance of the array elements, along given axis.\n\n Refer to `numpy.var` for full documentation.\n\n See Also\n --------\n numpy.var : equivalent function\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_163var = {__Pyx_NAMESTR("var"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_163var, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_162var)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_163var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; CYTHON_UNUSED PyObject *__pyx_v_ddof = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("var (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,&__pyx_n_s__ddof,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/gain/core.pyx":1997 * return ret * * def var(self, axis=None, dtype=None, out=None, ddof=0): # <<<<<<<<<<<<<< * """Returns the variance of the array elements, along given axis. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); values[3] = ((PyObject *)((PyObject *)Py_None)); values[4] = ((PyObject *)((PyObject *)__pyx_int_0)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ddof); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "var") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1997; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_axis = values[1]; __pyx_v_dtype = values[2]; __pyx_v_out = values[3]; __pyx_v_ddof = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("var", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1997; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.var", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_162var(__pyx_self, __pyx_v_self, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out, __pyx_v_ddof); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_162var(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_ddof) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("var", 0); __Pyx_TraceCall("var", __pyx_f[0], 1997); /* "ga4py/gain/core.pyx":2007 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def view(self, dtype=None, type=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2007; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.var", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_165view(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_164view[] = "New view of array with the same data.\n\n Parameters\n ----------\n dtype : data-type, optional\n Data-type descriptor of the returned view, e.g., float32 or int16.\n The default, None, results in the view having the same data-type\n as `a`.\n type : Python type, optional\n Type of the returned view, e.g., ndarray or matrix. Again, the\n default None results in type preservation.\n\n Notes\n -----\n ``a.view()`` is used two different ways:\n\n ``a.view(some_dtype)`` or ``a.view(dtype=some_dtype)`` constructs a view\n of the array's memory with a different data-type. This can cause a\n reinterpretation of the bytes of memory.\n\n ``a.view(ndarray_subclass)`` or ``a.view(type=ndarray_subclass)`` just\n returns an instance of `ndarray_subclass` that looks at the same array\n (same shape, dtype, etc.) This does not cause a reinterpretation of the\n memory.\n\n\n Examples\n --------\n >>> x = np.array([(1, 2)], dtype=[('a', np.int8), ('b', np.int8)])\n\n Viewing array data using a different type and dtype:\n\n >>> y = x.view(dtype=np.int16, type=np.matrix)\n >>> y\n matrix([[513]], dtype=int16)\n >>> print type(y)\n \n\n Creating a view on a structured array so it can be used in calculations\n\n >>> x = np.array([(1, 2),(3,4)], dtype=[('a', np.int8), ('b', np.int8)])\n >>> xv = x.view(dtype=np.int8).reshape(-1,2)\n >>> xv\n array([[1, 2],\n [3, 4]], dtype=int8)\n >>> xv.mean(0)\n array([ 2., 3.])\n\n Making changes to the view changes the underlying array\n\n >>> xv[0,1] = 20\n >>> print x\n [(1, 20) (3, 4)]\n\n Using a view to convert an array to a record array:\n\n >>> z = x.view(np.recarray)\n >>> z.a""\n array([1], dtype=int8)\n\n Views share data:\n\n >>> x[0] = (9, 10)\n >>> z[0]\n (9, 10)\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_165view = {__Pyx_NAMESTR("view"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_165view, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_164view)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_165view(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_type = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("view (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__dtype,&__pyx_n_s__type,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/core.pyx":2009 * raise NotImplementedError * * def view(self, dtype=None, type=None): # <<<<<<<<<<<<<< * """New view of array with the same data. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__type); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2009; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_dtype = values[1]; __pyx_v_type = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("view", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2009; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.view", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_164view(__pyx_self, __pyx_v_self, __pyx_v_dtype, __pyx_v_type); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_164view(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_type) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("view", 0); __Pyx_TraceCall("view", __pyx_f[0], 2009); /* "ga4py/gain/core.pyx":2077 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * ################################################################ */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2077; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.view", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_167__abs__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_167__abs__ = {__Pyx_NAMESTR("__abs__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_167__abs__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_167__abs__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__abs__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_166__abs__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2082 * ### ndarray operator overloading * ################################################################ * def __abs__(self): # <<<<<<<<<<<<<< * return abs(self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_166__abs__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__abs__", 0); __Pyx_TraceCall("__abs__", __pyx_f[0], 2082); /* "ga4py/gain/core.pyx":2083 * ################################################################ * def __abs__(self): * return abs(self) # <<<<<<<<<<<<<< * * def __add__(self, y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__abs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2083; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2083; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2083; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__abs__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_169__add__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_169__add__ = {__Pyx_NAMESTR("__add__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_169__add__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_169__add__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__add__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__add__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2085; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__add__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2085; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__add__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2085; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__add__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_168__add__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2085 * return abs(self) * * def __add__(self, y): # <<<<<<<<<<<<<< * return add(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_168__add__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__add__", 0); __Pyx_TraceCall("__add__", __pyx_f[0], 2085); /* "ga4py/gain/core.pyx":2086 * * def __add__(self, y): * return add(self,y) # <<<<<<<<<<<<<< * * def __and__(self, y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__add); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2086; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2086; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2086; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__add__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_171__and__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_171__and__ = {__Pyx_NAMESTR("__and__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_171__and__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_171__and__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__and__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__and__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2088; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__and__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2088; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__and__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2088; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__and__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_170__and__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2088 * return add(self,y) * * def __and__(self, y): # <<<<<<<<<<<<<< * return logical_and(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_170__and__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__and__", 0); __Pyx_TraceCall("__and__", __pyx_f[0], 2088); /* "ga4py/gain/core.pyx":2089 * * def __and__(self, y): * return logical_and(self,y) # <<<<<<<<<<<<<< * * def __array__(self, dtype): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__logical_and); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2089; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2089; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2089; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__and__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_173__array__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_173__array__ = {__Pyx_NAMESTR("__array__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_173__array__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_173__array__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__array__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__dtype,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__array__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2091; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__array__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2091; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_dtype = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__array__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2091; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__array__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_172__array__(__pyx_self, __pyx_v_self, __pyx_v_dtype); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2091 * return logical_and(self,y) * * def __array__(self, dtype): # <<<<<<<<<<<<<< * raise NotImplementedError * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_172__array__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dtype) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__array__", 0); __Pyx_TraceCall("__array__", __pyx_f[0], 2091); /* "ga4py/gain/core.pyx":2092 * * def __array__(self, dtype): * raise NotImplementedError # <<<<<<<<<<<<<< * * def __array_finalize__(self, *args, **kwargs): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2092; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__array__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_175__array_finalize__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_175__array_finalize__ = {__Pyx_NAMESTR("__array_finalize__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_175__array_finalize__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_175__array_finalize__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__array_finalize__ (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "__array_finalize__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2094; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__array_finalize__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2094; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__array_finalize__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_174__array_finalize__(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2094 * raise NotImplementedError * * def __array_finalize__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_174__array_finalize__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__array_finalize__", 0); __Pyx_TraceCall("__array_finalize__", __pyx_f[0], 2094); /* "ga4py/gain/core.pyx":2095 * * def __array_finalize__(self, *args, **kwargs): * raise NotImplementedError # <<<<<<<<<<<<<< * * def __array_interface__(self, *args, **kwargs): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2095; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__array_finalize__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_177__array_interface__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_177__array_interface__ = {__Pyx_NAMESTR("__array_interface__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_177__array_interface__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_177__array_interface__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__array_interface__ (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "__array_interface__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2097; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__array_interface__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2097; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__array_interface__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_176__array_interface__(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2097 * raise NotImplementedError * * def __array_interface__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_176__array_interface__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__array_interface__", 0); __Pyx_TraceCall("__array_interface__", __pyx_f[0], 2097); /* "ga4py/gain/core.pyx":2098 * * def __array_interface__(self, *args, **kwargs): * raise NotImplementedError # <<<<<<<<<<<<<< * * def __array_prepare__(self, *args, **kwargs): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2098; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__array_interface__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_179__array_prepare__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_179__array_prepare__ = {__Pyx_NAMESTR("__array_prepare__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_179__array_prepare__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_179__array_prepare__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__array_prepare__ (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "__array_prepare__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2100; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__array_prepare__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2100; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__array_prepare__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_178__array_prepare__(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2100 * raise NotImplementedError * * def __array_prepare__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_178__array_prepare__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__array_prepare__", 0); __Pyx_TraceCall("__array_prepare__", __pyx_f[0], 2100); /* "ga4py/gain/core.pyx":2101 * * def __array_prepare__(self, *args, **kwargs): * raise NotImplementedError # <<<<<<<<<<<<<< * * def __array_priority__(self, *args, **kwargs): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__array_prepare__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_181__array_priority__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_181__array_priority__ = {__Pyx_NAMESTR("__array_priority__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_181__array_priority__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_181__array_priority__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__array_priority__ (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "__array_priority__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2103; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__array_priority__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2103; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__array_priority__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_180__array_priority__(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2103 * raise NotImplementedError * * def __array_priority__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_180__array_priority__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__array_priority__", 0); __Pyx_TraceCall("__array_priority__", __pyx_f[0], 2103); /* "ga4py/gain/core.pyx":2104 * * def __array_priority__(self, *args, **kwargs): * raise NotImplementedError # <<<<<<<<<<<<<< * * def __array_struct__(self, *args, **kwargs): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__array_priority__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_183__array_struct__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_183__array_struct__ = {__Pyx_NAMESTR("__array_struct__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_183__array_struct__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_183__array_struct__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__array_struct__ (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "__array_struct__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2106; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__array_struct__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2106; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__array_struct__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_182__array_struct__(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2106 * raise NotImplementedError * * def __array_struct__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_182__array_struct__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__array_struct__", 0); __Pyx_TraceCall("__array_struct__", __pyx_f[0], 2106); /* "ga4py/gain/core.pyx":2107 * * def __array_struct__(self, *args, **kwargs): * raise NotImplementedError # <<<<<<<<<<<<<< * * def __array_wrap__(self, *args, **kwargs): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__array_struct__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_185__array_wrap__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_185__array_wrap__ = {__Pyx_NAMESTR("__array_wrap__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_185__array_wrap__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_185__array_wrap__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__array_wrap__ (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "__array_wrap__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2109; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__array_wrap__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2109; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__array_wrap__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_184__array_wrap__(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2109 * raise NotImplementedError * * def __array_wrap__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_184__array_wrap__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__array_wrap__", 0); __Pyx_TraceCall("__array_wrap__", __pyx_f[0], 2109); /* "ga4py/gain/core.pyx":2110 * * def __array_wrap__(self, *args, **kwargs): * raise NotImplementedError # <<<<<<<<<<<<<< * * def __contains__(self, y): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__array_wrap__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_187__contains__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_187__contains__ = {__Pyx_NAMESTR("__contains__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_187__contains__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_187__contains__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__contains__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__contains__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2112; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__contains__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2112; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__contains__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2112; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__contains__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_186__contains__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2112 * raise NotImplementedError * * def __contains__(self, y): # <<<<<<<<<<<<<< * raise NotImplementedError * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_186__contains__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__contains__", 0); __Pyx_TraceCall("__contains__", __pyx_f[0], 2112); /* "ga4py/gain/core.pyx":2113 * * def __contains__(self, y): * raise NotImplementedError # <<<<<<<<<<<<<< * * def __copy__(self, order=None): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__contains__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_189__copy__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_7ndarray_188__copy__[] = "Return a copy of the array.\n\n Parameters\n ----------\n order : {'C', 'F', 'A'}, optional\n If order is 'C' (False) then the result is contiguous (default).\n If order is 'Fortran' (True) then the result has fortran order.\n If order is 'Any' (None) then the result has fortran order\n only if the array already is in fortran order.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_189__copy__ = {__Pyx_NAMESTR("__copy__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_189__copy__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_7ndarray_188__copy__)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_189__copy__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__copy__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__order,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/core.pyx":2115 * raise NotImplementedError * * def __copy__(self, order=None): # <<<<<<<<<<<<<< * """Return a copy of the array. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__copy__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2115; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_order = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__copy__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2115; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__copy__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_188__copy__(__pyx_self, __pyx_v_self, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_188__copy__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_order) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__copy__", 0); __Pyx_TraceCall("__copy__", __pyx_f[0], 2115); /* "ga4py/gain/core.pyx":2127 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * def __deepcopy__(self): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2127; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__copy__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_191__deepcopy__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_191__deepcopy__ = {__Pyx_NAMESTR("__deepcopy__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_191__deepcopy__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_191__deepcopy__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__deepcopy__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_190__deepcopy__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2129 * raise NotImplementedError * * def __deepcopy__(self): # <<<<<<<<<<<<<< * raise NotImplementedError * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_190__deepcopy__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__deepcopy__", 0); __Pyx_TraceCall("__deepcopy__", __pyx_f[0], 2129); /* "ga4py/gain/core.pyx":2130 * * def __deepcopy__(self): * raise NotImplementedError # <<<<<<<<<<<<<< * * #def __delattr__ */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__deepcopy__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_193__delitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_193__delitem__ = {__Pyx_NAMESTR("__delitem__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_193__delitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_193__delitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__delitem__ (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "__delitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__delitem__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__delitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_192__delitem__(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2134 * #def __delattr__ * * def __delitem__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise ValueError, "cannot delete array elements" * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_192__delitem__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__delitem__", 0); __Pyx_TraceCall("__delitem__", __pyx_f[0], 2134); /* "ga4py/gain/core.pyx":2135 * * def __delitem__(self, *args, **kwargs): * raise ValueError, "cannot delete array elements" # <<<<<<<<<<<<<< * * #def __delslice__ */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_55), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__delitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_195__div__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_195__div__ = {__Pyx_NAMESTR("__div__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_195__div__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_195__div__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__div__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__div__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__div__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__div__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__div__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_194__div__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2139 * #def __delslice__ * * def __div__(self, y): # <<<<<<<<<<<<<< * return divide(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_194__div__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__div__", 0); __Pyx_TraceCall("__div__", __pyx_f[0], 2139); /* "ga4py/gain/core.pyx":2140 * * def __div__(self, y): * return divide(self,y) # <<<<<<<<<<<<<< * * def __divmod__(self, y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__divide); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__div__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_197__divmod__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_197__divmod__ = {__Pyx_NAMESTR("__divmod__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_197__divmod__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_197__divmod__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__divmod__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__divmod__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2142; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__divmod__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2142; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__divmod__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2142; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__divmod__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_196__divmod__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2142 * return divide(self,y) * * def __divmod__(self, y): # <<<<<<<<<<<<<< * t = mod(self,y) * s = subtract(self,t) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_196__divmod__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_v_t = NULL; PyObject *__pyx_v_s = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__divmod__", 0); __Pyx_TraceCall("__divmod__", __pyx_f[0], 2142); /* "ga4py/gain/core.pyx":2143 * * def __divmod__(self, y): * t = mod(self,y) # <<<<<<<<<<<<<< * s = subtract(self,t) * s = divide(s,y,s) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__mod); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_t = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2144 * def __divmod__(self, y): * t = mod(self,y) * s = subtract(self,t) # <<<<<<<<<<<<<< * s = divide(s,y,s) * return s,t */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__subtract); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2144; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2144; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_t); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_t); __Pyx_GIVEREF(__pyx_v_t); __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2144; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_s = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2145 * t = mod(self,y) * s = subtract(self,t) * s = divide(s,y,s) # <<<<<<<<<<<<<< * return s,t * */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__divide); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_s); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_s); __Pyx_GIVEREF(__pyx_v_s); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_s); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_s); __Pyx_GIVEREF(__pyx_v_s); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2146 * s = subtract(self,t) * s = divide(s,y,s) * return s,t # <<<<<<<<<<<<<< * * def __eq__(self, y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_s); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_s); __Pyx_GIVEREF(__pyx_v_s); __Pyx_INCREF(__pyx_v_t); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_t); __Pyx_GIVEREF(__pyx_v_t); __pyx_r = ((PyObject *)__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__divmod__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_t); __Pyx_XDECREF(__pyx_v_s); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_199__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_199__eq__ = {__Pyx_NAMESTR("__eq__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_199__eq__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_199__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2148; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__eq__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2148; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2148; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_198__eq__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2148 * return s,t * * def __eq__(self, y): # <<<<<<<<<<<<<< * return equal(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_198__eq__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__eq__", 0); __Pyx_TraceCall("__eq__", __pyx_f[0], 2148); /* "ga4py/gain/core.pyx":2149 * * def __eq__(self, y): * return equal(self,y) # <<<<<<<<<<<<<< * * def __float__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__equal); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_201__float__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_201__float__ = {__Pyx_NAMESTR("__float__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_201__float__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_201__float__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__float__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_200__float__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2151 * return equal(self,y) * * def __float__(self): # <<<<<<<<<<<<<< * raise NotImplementedError * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_200__float__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__float__", 0); __Pyx_TraceCall("__float__", __pyx_f[0], 2151); /* "ga4py/gain/core.pyx":2152 * * def __float__(self): * raise NotImplementedError # <<<<<<<<<<<<<< * * def __floordiv__(self,y): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__float__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_203__floordiv__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_203__floordiv__ = {__Pyx_NAMESTR("__floordiv__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_203__floordiv__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_203__floordiv__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__floordiv__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__floordiv__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2154; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__floordiv__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2154; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__floordiv__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2154; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__floordiv__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_202__floordiv__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2154 * raise NotImplementedError * * def __floordiv__(self,y): # <<<<<<<<<<<<<< * return floor_divide(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_202__floordiv__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__floordiv__", 0); __Pyx_TraceCall("__floordiv__", __pyx_f[0], 2154); /* "ga4py/gain/core.pyx":2155 * * def __floordiv__(self,y): * return floor_divide(self,y) # <<<<<<<<<<<<<< * * #def __format__ */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__floor_divide); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__floordiv__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_205__ge__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_205__ge__ = {__Pyx_NAMESTR("__ge__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_205__ge__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_205__ge__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__ge__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__ge__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2159; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__ge__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2159; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__ge__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2159; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__ge__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_204__ge__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2159 * #def __format__ * * def __ge__(self,y): # <<<<<<<<<<<<<< * return greater_equal(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_204__ge__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__ge__", 0); __Pyx_TraceCall("__ge__", __pyx_f[0], 2159); /* "ga4py/gain/core.pyx":2160 * * def __ge__(self,y): * return greater_equal(self,y) # <<<<<<<<<<<<<< * * #def __getattribute__ */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__greater_equal); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__ge__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_207__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_207__getitem__ = {__Pyx_NAMESTR("__getitem__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_207__getitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_207__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_key = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2164; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__getitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2164; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_key = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2164; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_206__getitem__(__pyx_self, __pyx_v_self, __pyx_v_key); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2164 * #def __getattribute__ * * def __getitem__(self, key): # <<<<<<<<<<<<<< * # THIS IS A COLLECTIVE OPERATION * if isinstance(key, (str,unicode)): */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_206__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) { int __pyx_v_fancy; PyObject *__pyx_v_arg = NULL; PyObject *__pyx_v_new_global_slice = NULL; PyObject *__pyx_v_new_shape = NULL; PyObject *__pyx_v_a = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; PyObject *__pyx_t_5 = NULL; Py_ssize_t __pyx_t_6; PyObject *(*__pyx_t_7)(PyObject *); PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__getitem__", 0); __Pyx_TraceCall("__getitem__", __pyx_f[0], 2164); __Pyx_INCREF(__pyx_v_key); /* "ga4py/gain/core.pyx":2166 * def __getitem__(self, key): * # THIS IS A COLLECTIVE OPERATION * if isinstance(key, (str,unicode)): # <<<<<<<<<<<<<< * raise NotImplementedError, "str or unicode key" * if self.ndim == 0: */ __Pyx_INCREF(__pyx_v_key); __pyx_t_1 = __pyx_v_key; __pyx_t_2 = PyString_Check(__pyx_t_1); if (!__pyx_t_2) { __pyx_t_3 = PyUnicode_Check(__pyx_t_1); __pyx_t_4 = __pyx_t_3; } else { __pyx_t_4 = __pyx_t_2; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = (__pyx_t_4 != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":2167 * # THIS IS A COLLECTIVE OPERATION * if isinstance(key, (str,unicode)): * raise NotImplementedError, "str or unicode key" # <<<<<<<<<<<<<< * if self.ndim == 0: * raise IndexError, "0-d arrays can't be indexed" */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_kp_s_56), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":2168 * if isinstance(key, (str,unicode)): * raise NotImplementedError, "str or unicode key" * if self.ndim == 0: # <<<<<<<<<<<<<< * raise IndexError, "0-d arrays can't be indexed" * key = listify(key) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_2) { /* "ga4py/gain/core.pyx":2169 * raise NotImplementedError, "str or unicode key" * if self.ndim == 0: * raise IndexError, "0-d arrays can't be indexed" # <<<<<<<<<<<<<< * key = listify(key) * fancy = False */ __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_kp_s_57), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/core.pyx":2170 * if self.ndim == 0: * raise IndexError, "0-d arrays can't be indexed" * key = listify(key) # <<<<<<<<<<<<<< * fancy = False * for arg in key: */ __pyx_t_5 = ((PyObject *)__pyx_f_5ga4py_4gain_4core_listify(__pyx_v_key, 0)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":2171 * raise IndexError, "0-d arrays can't be indexed" * key = listify(key) * fancy = False # <<<<<<<<<<<<<< * for arg in key: * if isinstance(arg, (ndarray,np.ndarray,list,tuple)): */ __pyx_v_fancy = 0; /* "ga4py/gain/core.pyx":2172 * key = listify(key) * fancy = False * for arg in key: # <<<<<<<<<<<<<< * if isinstance(arg, (ndarray,np.ndarray,list,tuple)): * fancy = True */ if (PyList_CheckExact(__pyx_v_key) || PyTuple_CheckExact(__pyx_v_key)) { __pyx_t_5 = __pyx_v_key; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0; __pyx_t_7 = NULL; } else { __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_key); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext; } for (;;) { if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_5)) { if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_5)) { if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_5)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_1 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_1)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_1); } __Pyx_XDECREF_SET(__pyx_v_arg, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2173 * fancy = False * for arg in key: * if isinstance(arg, (ndarray,np.ndarray,list,tuple)): # <<<<<<<<<<<<<< * fancy = True * break */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray))); PyTuple_SET_ITEM(__pyx_t_8, 1, ((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray))); __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray))); __Pyx_INCREF(((PyObject *)((PyObject*)(&PyList_Type)))); PyTuple_SET_ITEM(__pyx_t_8, 2, ((PyObject *)((PyObject*)(&PyList_Type)))); __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyList_Type)))); __Pyx_INCREF(((PyObject *)((PyObject*)(&PyTuple_Type)))); PyTuple_SET_ITEM(__pyx_t_8, 3, ((PyObject *)((PyObject*)(&PyTuple_Type)))); __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyTuple_Type)))); __pyx_t_1 = 0; __pyx_t_2 = PyObject_IsInstance(__pyx_v_arg, ((PyObject *)__pyx_t_8)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __pyx_t_4 = (__pyx_t_2 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2174 * for arg in key: * if isinstance(arg, (ndarray,np.ndarray,list,tuple)): * fancy = True # <<<<<<<<<<<<<< * break * if fancy: */ __pyx_v_fancy = 1; /* "ga4py/gain/core.pyx":2175 * if isinstance(arg, (ndarray,np.ndarray,list,tuple)): * fancy = True * break # <<<<<<<<<<<<<< * if fancy: * raise NotImplementedError, "TODO: fancy indexing" */ goto __pyx_L6_break; goto __pyx_L7; } __pyx_L7:; } __pyx_L6_break:; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":2176 * fancy = True * break * if fancy: # <<<<<<<<<<<<<< * raise NotImplementedError, "TODO: fancy indexing" * new_global_slice = self.global_slice[key] */ __pyx_t_4 = (__pyx_v_fancy != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2177 * break * if fancy: * raise NotImplementedError, "TODO: fancy indexing" # <<<<<<<<<<<<<< * new_global_slice = self.global_slice[key] * new_shape = new_global_slice.shape */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_kp_s_58), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2177; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; /* "ga4py/gain/core.pyx":2178 * if fancy: * raise NotImplementedError, "TODO: fancy indexing" * new_global_slice = self.global_slice[key] # <<<<<<<<<<<<<< * new_shape = new_global_slice.shape * a = ndarray(new_shape, self.dtype, base=self) */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_8 = PyObject_GetItem(__pyx_t_5, __pyx_v_key); if (!__pyx_t_8) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_new_global_slice = __pyx_t_8; __pyx_t_8 = 0; /* "ga4py/gain/core.pyx":2179 * raise NotImplementedError, "TODO: fancy indexing" * new_global_slice = self.global_slice[key] * new_shape = new_global_slice.shape # <<<<<<<<<<<<<< * a = ndarray(new_shape, self.dtype, base=self) * a.global_slice = new_global_slice */ __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_new_global_slice, __pyx_n_s__shape); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_v_new_shape = __pyx_t_8; __pyx_t_8 = 0; /* "ga4py/gain/core.pyx":2180 * new_global_slice = self.global_slice[key] * new_shape = new_global_slice.shape * a = ndarray(new_shape, self.dtype, base=self) # <<<<<<<<<<<<<< * a.global_slice = new_global_slice * if a.size == 1: */ __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_new_shape); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_new_shape); __Pyx_GIVEREF(__pyx_v_new_shape); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__base), __pyx_v_self) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_v_a = __pyx_t_9; __pyx_t_9 = 0; /* "ga4py/gain/core.pyx":2181 * new_shape = new_global_slice.shape * a = ndarray(new_shape, self.dtype, base=self) * a.global_slice = new_global_slice # <<<<<<<<<<<<<< * if a.size == 1: * a = a.allget() */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_a, __pyx_n_s__global_slice, __pyx_v_new_global_slice) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2182 * a = ndarray(new_shape, self.dtype, base=self) * a.global_slice = new_global_slice * if a.size == 1: # <<<<<<<<<<<<<< * a = a.allget() * # convert single item to np.generic (scalar) */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__size); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = PyObject_RichCompare(__pyx_t_9, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2183 * a.global_slice = new_global_slice * if a.size == 1: * a = a.allget() # <<<<<<<<<<<<<< * # convert single item to np.generic (scalar) * a = a.dtype.type(a) */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__allget); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2183; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2183; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_a, __pyx_t_9); __pyx_t_9 = 0; /* "ga4py/gain/core.pyx":2185 * a = a.allget() * # convert single item to np.generic (scalar) * a = a.dtype.type(a) # <<<<<<<<<<<<<< * return a * */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__dtype); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s__type); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __pyx_t_1 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; __Pyx_DECREF_SET(__pyx_v_a, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L9; } __pyx_L9:; /* "ga4py/gain/core.pyx":2186 * # convert single item to np.generic (scalar) * a = a.dtype.type(a) * return a # <<<<<<<<<<<<<< * * #def __getslice__ */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_a); __pyx_r = __pyx_v_a; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_arg); __Pyx_XDECREF(__pyx_v_new_global_slice); __Pyx_XDECREF(__pyx_v_new_shape); __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_key); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_209__gt__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_209__gt__ = {__Pyx_NAMESTR("__gt__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_209__gt__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_209__gt__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__gt__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__gt__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__gt__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__gt__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__gt__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_208__gt__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2190 * #def __getslice__ * * def __gt__(self,y): # <<<<<<<<<<<<<< * return greater(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_208__gt__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__gt__", 0); __Pyx_TraceCall("__gt__", __pyx_f[0], 2190); /* "ga4py/gain/core.pyx":2191 * * def __gt__(self,y): * return greater(self,y) # <<<<<<<<<<<<<< * * #def __hash__ */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__greater); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2191; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2191; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2191; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__gt__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_211__iadd__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_211__iadd__ = {__Pyx_NAMESTR("__iadd__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_211__iadd__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_211__iadd__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__iadd__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__iadd__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2196; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__iadd__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2196; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__iadd__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2196; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__iadd__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_210__iadd__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2196 * #def __hex__ * * def __iadd__(self,y): # <<<<<<<<<<<<<< * return add(self,y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_210__iadd__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__iadd__", 0); __Pyx_TraceCall("__iadd__", __pyx_f[0], 2196); /* "ga4py/gain/core.pyx":2197 * * def __iadd__(self,y): * return add(self,y,self) # <<<<<<<<<<<<<< * * def __iand__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__add); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__iadd__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_213__iand__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_213__iand__ = {__Pyx_NAMESTR("__iand__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_213__iand__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_213__iand__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__iand__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__iand__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2199; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__iand__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2199; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__iand__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2199; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__iand__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_212__iand__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2199 * return add(self,y,self) * * def __iand__(self,y): # <<<<<<<<<<<<<< * return logical_and(self,y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_212__iand__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__iand__", 0); __Pyx_TraceCall("__iand__", __pyx_f[0], 2199); /* "ga4py/gain/core.pyx":2200 * * def __iand__(self,y): * return logical_and(self,y,self) # <<<<<<<<<<<<<< * * def __idiv__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__logical_and); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__iand__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_215__idiv__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_215__idiv__ = {__Pyx_NAMESTR("__idiv__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_215__idiv__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_215__idiv__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__idiv__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__idiv__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2202; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__idiv__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2202; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__idiv__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2202; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__idiv__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_214__idiv__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2202 * return logical_and(self,y,self) * * def __idiv__(self,y): # <<<<<<<<<<<<<< * return divide(self,y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_214__idiv__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__idiv__", 0); __Pyx_TraceCall("__idiv__", __pyx_f[0], 2202); /* "ga4py/gain/core.pyx":2203 * * def __idiv__(self,y): * return divide(self,y,self) # <<<<<<<<<<<<<< * * def __ifloordiv__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__divide); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__idiv__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_217__ifloordiv__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_217__ifloordiv__ = {__Pyx_NAMESTR("__ifloordiv__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_217__ifloordiv__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_217__ifloordiv__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__ifloordiv__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__ifloordiv__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__ifloordiv__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__ifloordiv__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__ifloordiv__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_216__ifloordiv__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2205 * return divide(self,y,self) * * def __ifloordiv__(self,y): # <<<<<<<<<<<<<< * return floor_divide(self,y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_216__ifloordiv__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__ifloordiv__", 0); __Pyx_TraceCall("__ifloordiv__", __pyx_f[0], 2205); /* "ga4py/gain/core.pyx":2206 * * def __ifloordiv__(self,y): * return floor_divide(self,y,self) # <<<<<<<<<<<<<< * * def __ilshift__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__floor_divide); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2206; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2206; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2206; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__ifloordiv__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_219__ilshift__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_219__ilshift__ = {__Pyx_NAMESTR("__ilshift__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_219__ilshift__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_219__ilshift__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__ilshift__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__ilshift__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2208; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__ilshift__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2208; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__ilshift__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2208; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__ilshift__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_218__ilshift__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2208 * return floor_divide(self,y,self) * * def __ilshift__(self,y): # <<<<<<<<<<<<<< * return left_shift(self,y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_218__ilshift__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__ilshift__", 0); __Pyx_TraceCall("__ilshift__", __pyx_f[0], 2208); /* "ga4py/gain/core.pyx":2209 * * def __ilshift__(self,y): * return left_shift(self,y,self) # <<<<<<<<<<<<<< * * def __imod__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__left_shift); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__ilshift__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_221__imod__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_221__imod__ = {__Pyx_NAMESTR("__imod__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_221__imod__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_221__imod__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__imod__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__imod__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2211; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__imod__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2211; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__imod__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2211; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__imod__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_220__imod__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2211 * return left_shift(self,y,self) * * def __imod__(self,y): # <<<<<<<<<<<<<< * return mod(self,y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_220__imod__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__imod__", 0); __Pyx_TraceCall("__imod__", __pyx_f[0], 2211); /* "ga4py/gain/core.pyx":2212 * * def __imod__(self,y): * return mod(self,y,self) # <<<<<<<<<<<<<< * * def __imul__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__mod); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__imod__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_223__imul__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_223__imul__ = {__Pyx_NAMESTR("__imul__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_223__imul__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_223__imul__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__imul__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__imul__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2214; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__imul__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2214; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__imul__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2214; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__imul__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_222__imul__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2214 * return mod(self,y,self) * * def __imul__(self,y): # <<<<<<<<<<<<<< * return multiply(self,y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_222__imul__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__imul__", 0); __Pyx_TraceCall("__imul__", __pyx_f[0], 2214); /* "ga4py/gain/core.pyx":2215 * * def __imul__(self,y): * return multiply(self,y,self) # <<<<<<<<<<<<<< * * #def __index__ */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__multiply); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__imul__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_225__int__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_225__int__ = {__Pyx_NAMESTR("__int__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_225__int__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_225__int__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__int__ (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "__int__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2219; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__int__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2219; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__int__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_224__int__(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2219 * #def __index__ * * def __int__(self, *args, **kwargs): # <<<<<<<<<<<<<< * if self.size != 1: * raise TypeError, "only length-1 arrays can be converted to Python scalars" */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_224__int__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__int__", 0); __Pyx_TraceCall("__int__", __pyx_f[0], 2219); /* "ga4py/gain/core.pyx":2220 * * def __int__(self, *args, **kwargs): * if self.size != 1: # <<<<<<<<<<<<<< * raise TypeError, "only length-1 arrays can be converted to Python scalars" * return np.dtype(np.int32).type(self.allget()) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_1, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2221 * def __int__(self, *args, **kwargs): * if self.size != 1: * raise TypeError, "only length-1 arrays can be converted to Python scalars" # <<<<<<<<<<<<<< * return np.dtype(np.int32).type(self.allget()) * */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_59), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":2222 * if self.size != 1: * raise TypeError, "only length-1 arrays can be converted to Python scalars" * return np.dtype(np.int32).type(self.allget()) # <<<<<<<<<<<<<< * * def __invert__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int32); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__type); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__allget); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__int__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_227__invert__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_227__invert__ = {__Pyx_NAMESTR("__invert__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_227__invert__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_227__invert__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__invert__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_226__invert__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2224 * return np.dtype(np.int32).type(self.allget()) * * def __invert__(self): # <<<<<<<<<<<<<< * return invert(self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_226__invert__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__invert__", 0); __Pyx_TraceCall("__invert__", __pyx_f[0], 2224); /* "ga4py/gain/core.pyx":2225 * * def __invert__(self): * return invert(self) # <<<<<<<<<<<<<< * * def __ior__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__invert); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2225; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2225; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2225; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__invert__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_229__ior__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_229__ior__ = {__Pyx_NAMESTR("__ior__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_229__ior__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_229__ior__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__ior__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__ior__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2227; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__ior__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2227; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__ior__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2227; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__ior__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_228__ior__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2227 * return invert(self) * * def __ior__(self,y): # <<<<<<<<<<<<<< * return logical_or(self,y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_228__ior__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__ior__", 0); __Pyx_TraceCall("__ior__", __pyx_f[0], 2227); /* "ga4py/gain/core.pyx":2228 * * def __ior__(self,y): * return logical_or(self,y,self) # <<<<<<<<<<<<<< * * def __ipow__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__logical_or); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__ior__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_231__ipow__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_231__ipow__ = {__Pyx_NAMESTR("__ipow__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_231__ipow__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_231__ipow__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__ipow__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__ipow__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2230; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__ipow__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2230; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__ipow__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2230; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__ipow__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_230__ipow__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2230 * return logical_or(self,y,self) * * def __ipow__(self,y): # <<<<<<<<<<<<<< * return power(self,y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_230__ipow__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__ipow__", 0); __Pyx_TraceCall("__ipow__", __pyx_f[0], 2230); /* "ga4py/gain/core.pyx":2231 * * def __ipow__(self,y): * return power(self,y,self) # <<<<<<<<<<<<<< * * def __irshift__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__power); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__ipow__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_233__irshift__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_233__irshift__ = {__Pyx_NAMESTR("__irshift__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_233__irshift__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_233__irshift__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__irshift__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__irshift__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2233; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__irshift__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2233; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__irshift__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2233; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__irshift__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_232__irshift__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2233 * return power(self,y,self) * * def __irshift__(self,y): # <<<<<<<<<<<<<< * return right_shift(self,y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_232__irshift__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__irshift__", 0); __Pyx_TraceCall("__irshift__", __pyx_f[0], 2233); /* "ga4py/gain/core.pyx":2234 * * def __irshift__(self,y): * return right_shift(self,y,self) # <<<<<<<<<<<<<< * * def __isub__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__right_shift); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__irshift__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_235__isub__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_235__isub__ = {__Pyx_NAMESTR("__isub__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_235__isub__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_235__isub__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__isub__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__isub__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2236; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__isub__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2236; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__isub__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2236; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__isub__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_234__isub__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2236 * return right_shift(self,y,self) * * def __isub__(self,y): # <<<<<<<<<<<<<< * return subtract(self,y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_234__isub__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__isub__", 0); __Pyx_TraceCall("__isub__", __pyx_f[0], 2236); /* "ga4py/gain/core.pyx":2237 * * def __isub__(self,y): * return subtract(self,y,self) # <<<<<<<<<<<<<< * * def __iter__(self, *args, **kwargs): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__subtract); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__isub__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_237__iter__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_237__iter__ = {__Pyx_NAMESTR("__iter__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_237__iter__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_237__iter__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "__iter__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2239; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__iter__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2239; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_236__iter__(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2239 * return subtract(self,y,self) * * def __iter__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_236__iter__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__iter__", 0); __Pyx_TraceCall("__iter__", __pyx_f[0], 2239); /* "ga4py/gain/core.pyx":2240 * * def __iter__(self, *args, **kwargs): * raise NotImplementedError # <<<<<<<<<<<<<< * * def __itruediv__(self,y): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2240; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_239__itruediv__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_239__itruediv__ = {__Pyx_NAMESTR("__itruediv__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_239__itruediv__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_239__itruediv__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__itruediv__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__itruediv__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2242; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__itruediv__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2242; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__itruediv__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2242; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__itruediv__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_238__itruediv__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2242 * raise NotImplementedError * * def __itruediv__(self,y): # <<<<<<<<<<<<<< * return true_divide(self,y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_238__itruediv__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__itruediv__", 0); __Pyx_TraceCall("__itruediv__", __pyx_f[0], 2242); /* "ga4py/gain/core.pyx":2243 * * def __itruediv__(self,y): * return true_divide(self,y,self) # <<<<<<<<<<<<<< * * def __ixor__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__true_divide); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__itruediv__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_241__ixor__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_241__ixor__ = {__Pyx_NAMESTR("__ixor__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_241__ixor__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_241__ixor__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__ixor__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__ixor__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2245; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__ixor__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2245; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__ixor__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2245; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__ixor__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_240__ixor__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2245 * return true_divide(self,y,self) * * def __ixor__(self,y): # <<<<<<<<<<<<<< * return logical_xor(self,y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_240__ixor__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__ixor__", 0); __Pyx_TraceCall("__ixor__", __pyx_f[0], 2245); /* "ga4py/gain/core.pyx":2246 * * def __ixor__(self,y): * return logical_xor(self,y,self) # <<<<<<<<<<<<<< * * def __le__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__logical_xor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__ixor__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_243__le__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_243__le__ = {__Pyx_NAMESTR("__le__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_243__le__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_243__le__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__le__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__le__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2248; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__le__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2248; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__le__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2248; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__le__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_242__le__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2248 * return logical_xor(self,y,self) * * def __le__(self,y): # <<<<<<<<<<<<<< * return less_equal(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_242__le__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__le__", 0); __Pyx_TraceCall("__le__", __pyx_f[0], 2248); /* "ga4py/gain/core.pyx":2249 * * def __le__(self,y): * return less_equal(self,y) # <<<<<<<<<<<<<< * * def __len__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__less_equal); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__le__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_245__len__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_245__len__ = {__Pyx_NAMESTR("__len__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_245__len__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_245__len__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_244__len__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2251 * return less_equal(self,y) * * def __len__(self): # <<<<<<<<<<<<<< * return self.shape[0] * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_244__len__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__len__", 0); __Pyx_TraceCall("__len__", __pyx_f[0], 2251); /* "ga4py/gain/core.pyx":2252 * * def __len__(self): * return self.shape[0] # <<<<<<<<<<<<<< * * def __long__(self, *args, **kwargs): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_247__long__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_247__long__ = {__Pyx_NAMESTR("__long__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_247__long__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_247__long__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__long__ (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "__long__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2254; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__long__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2254; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__long__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_246__long__(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2254 * return self.shape[0] * * def __long__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_246__long__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__long__", 0); __Pyx_TraceCall("__long__", __pyx_f[0], 2254); /* "ga4py/gain/core.pyx":2255 * * def __long__(self, *args, **kwargs): * raise NotImplementedError # <<<<<<<<<<<<<< * * def __lshift__(self,y): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__long__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_249__lshift__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_249__lshift__ = {__Pyx_NAMESTR("__lshift__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_249__lshift__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_249__lshift__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__lshift__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__lshift__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__lshift__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__lshift__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__lshift__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_248__lshift__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2257 * raise NotImplementedError * * def __lshift__(self,y): # <<<<<<<<<<<<<< * return left_shift(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_248__lshift__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__lshift__", 0); __Pyx_TraceCall("__lshift__", __pyx_f[0], 2257); /* "ga4py/gain/core.pyx":2258 * * def __lshift__(self,y): * return left_shift(self,y) # <<<<<<<<<<<<<< * * def __lt__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__left_shift); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__lshift__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_251__lt__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_251__lt__ = {__Pyx_NAMESTR("__lt__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_251__lt__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_251__lt__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__lt__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__lt__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__lt__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__lt__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__lt__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_250__lt__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2260 * return left_shift(self,y) * * def __lt__(self,y): # <<<<<<<<<<<<<< * return less(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_250__lt__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__lt__", 0); __Pyx_TraceCall("__lt__", __pyx_f[0], 2260); /* "ga4py/gain/core.pyx":2261 * * def __lt__(self,y): * return less(self,y) # <<<<<<<<<<<<<< * * def __mod__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__less); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__lt__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_253__mod__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_253__mod__ = {__Pyx_NAMESTR("__mod__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_253__mod__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_253__mod__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__mod__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__mod__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2263; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__mod__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2263; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__mod__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2263; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__mod__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_252__mod__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2263 * return less(self,y) * * def __mod__(self,y): # <<<<<<<<<<<<<< * return mod(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_252__mod__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__mod__", 0); __Pyx_TraceCall("__mod__", __pyx_f[0], 2263); /* "ga4py/gain/core.pyx":2264 * * def __mod__(self,y): * return mod(self,y) # <<<<<<<<<<<<<< * * def __mul__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__mod); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__mod__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_255__mul__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_255__mul__ = {__Pyx_NAMESTR("__mul__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_255__mul__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_255__mul__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__mul__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__mul__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2266; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__mul__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2266; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__mul__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2266; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__mul__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_254__mul__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2266 * return mod(self,y) * * def __mul__(self,y): # <<<<<<<<<<<<<< * return multiply(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_254__mul__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__mul__", 0); __Pyx_TraceCall("__mul__", __pyx_f[0], 2266); /* "ga4py/gain/core.pyx":2267 * * def __mul__(self,y): * return multiply(self,y) # <<<<<<<<<<<<<< * * def __ne__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__multiply); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__mul__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_257__ne__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_257__ne__ = {__Pyx_NAMESTR("__ne__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_257__ne__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_257__ne__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__ne__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__ne__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2269; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__ne__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2269; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__ne__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2269; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__ne__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_256__ne__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2269 * return multiply(self,y) * * def __ne__(self,y): # <<<<<<<<<<<<<< * return not_equal(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_256__ne__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__ne__", 0); __Pyx_TraceCall("__ne__", __pyx_f[0], 2269); /* "ga4py/gain/core.pyx":2270 * * def __ne__(self,y): * return not_equal(self,y) # <<<<<<<<<<<<<< * * def __neg__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__not_equal); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2270; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2270; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2270; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__ne__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_259__neg__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_259__neg__ = {__Pyx_NAMESTR("__neg__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_259__neg__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_259__neg__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__neg__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_258__neg__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2272 * return not_equal(self,y) * * def __neg__(self): # <<<<<<<<<<<<<< * return negative(self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_258__neg__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__neg__", 0); __Pyx_TraceCall("__neg__", __pyx_f[0], 2272); /* "ga4py/gain/core.pyx":2273 * * def __neg__(self): * return negative(self) # <<<<<<<<<<<<<< * * def __nonzero__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__negative); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__neg__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_261__nonzero__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_261__nonzero__ = {__Pyx_NAMESTR("__nonzero__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_261__nonzero__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_261__nonzero__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__nonzero__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_260__nonzero__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2275 * return negative(self) * * def __nonzero__(self): # <<<<<<<<<<<<<< * raise ValueError, ("The truth value of an array with more than one" * " element is ambiguous. Use a.any() or a.all()") */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_260__nonzero__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__nonzero__", 0); __Pyx_TraceCall("__nonzero__", __pyx_f[0], 2275); /* "ga4py/gain/core.pyx":2276 * * def __nonzero__(self): * raise ValueError, ("The truth value of an array with more than one" # <<<<<<<<<<<<<< * " element is ambiguous. Use a.any() or a.all()") * */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_60), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__nonzero__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_263__oct__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_263__oct__ = {__Pyx_NAMESTR("__oct__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_263__oct__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_263__oct__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__oct__ (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "__oct__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2279; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__oct__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2279; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__oct__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_262__oct__(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2279 * " element is ambiguous. Use a.any() or a.all()") * * def __oct__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_262__oct__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__oct__", 0); __Pyx_TraceCall("__oct__", __pyx_f[0], 2279); /* "ga4py/gain/core.pyx":2280 * * def __oct__(self, *args, **kwargs): * raise NotImplementedError # <<<<<<<<<<<<<< * * def __or__(self,y): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2280; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__oct__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_265__or__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_265__or__ = {__Pyx_NAMESTR("__or__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_265__or__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_265__or__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__or__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__or__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2282; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__or__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2282; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__or__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2282; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__or__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_264__or__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2282 * raise NotImplementedError * * def __or__(self,y): # <<<<<<<<<<<<<< * return logical_or(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_264__or__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__or__", 0); __Pyx_TraceCall("__or__", __pyx_f[0], 2282); /* "ga4py/gain/core.pyx":2283 * * def __or__(self,y): * return logical_or(self,y) # <<<<<<<<<<<<<< * * def __pos__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__logical_or); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__or__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_267__pos__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_267__pos__ = {__Pyx_NAMESTR("__pos__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_267__pos__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_267__pos__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pos__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_266__pos__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2285 * return logical_or(self,y) * * def __pos__(self): # <<<<<<<<<<<<<< * return self.copy() * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_266__pos__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__pos__", 0); __Pyx_TraceCall("__pos__", __pyx_f[0], 2285); /* "ga4py/gain/core.pyx":2286 * * def __pos__(self): * return self.copy() # <<<<<<<<<<<<<< * * def __pow__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__copy); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2286; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2286; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__pos__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_269__pow__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_269__pow__ = {__Pyx_NAMESTR("__pow__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_269__pow__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_269__pow__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pow__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__pow__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2288; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pow__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2288; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__pow__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2288; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__pow__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_268__pow__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2288 * return self.copy() * * def __pow__(self,y): # <<<<<<<<<<<<<< * return power(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_268__pow__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__pow__", 0); __Pyx_TraceCall("__pow__", __pyx_f[0], 2288); /* "ga4py/gain/core.pyx":2289 * * def __pow__(self,y): * return power(self,y) # <<<<<<<<<<<<<< * * def __radd__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__power); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2289; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2289; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2289; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__pow__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_271__radd__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_271__radd__ = {__Pyx_NAMESTR("__radd__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_271__radd__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_271__radd__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__radd__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__radd__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2291; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__radd__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2291; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__radd__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2291; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__radd__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_270__radd__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2291 * return power(self,y) * * def __radd__(self,y): # <<<<<<<<<<<<<< * return add(y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_270__radd__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__radd__", 0); __Pyx_TraceCall("__radd__", __pyx_f[0], 2291); /* "ga4py/gain/core.pyx":2292 * * def __radd__(self,y): * return add(y,self) # <<<<<<<<<<<<<< * * def __rand__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__add); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__radd__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_273__rand__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_273__rand__ = {__Pyx_NAMESTR("__rand__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_273__rand__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_273__rand__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__rand__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__rand__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2294; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__rand__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2294; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__rand__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2294; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rand__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_272__rand__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2294 * return add(y,self) * * def __rand__(self,y): # <<<<<<<<<<<<<< * return logical_and(y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_272__rand__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__rand__", 0); __Pyx_TraceCall("__rand__", __pyx_f[0], 2294); /* "ga4py/gain/core.pyx":2295 * * def __rand__(self,y): * return logical_and(y,self) # <<<<<<<<<<<<<< * * def __rdiv__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__logical_and); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rand__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_275__rdiv__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_275__rdiv__ = {__Pyx_NAMESTR("__rdiv__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_275__rdiv__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_275__rdiv__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__rdiv__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__rdiv__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2297; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__rdiv__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2297; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__rdiv__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2297; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rdiv__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_274__rdiv__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2297 * return logical_and(y,self) * * def __rdiv__(self,y): # <<<<<<<<<<<<<< * return divide(y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_274__rdiv__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__rdiv__", 0); __Pyx_TraceCall("__rdiv__", __pyx_f[0], 2297); /* "ga4py/gain/core.pyx":2298 * * def __rdiv__(self,y): * return divide(y,self) # <<<<<<<<<<<<<< * * def __rdivmod__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__divide); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rdiv__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_277__rdivmod__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_277__rdivmod__ = {__Pyx_NAMESTR("__rdivmod__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_277__rdivmod__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_277__rdivmod__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__rdivmod__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__rdivmod__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2300; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__rdivmod__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2300; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__rdivmod__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2300; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rdivmod__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_276__rdivmod__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2300 * return divide(y,self) * * def __rdivmod__(self,y): # <<<<<<<<<<<<<< * t = mod(y,self) * s = subtract(y,t) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_276__rdivmod__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_v_t = NULL; PyObject *__pyx_v_s = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__rdivmod__", 0); __Pyx_TraceCall("__rdivmod__", __pyx_f[0], 2300); /* "ga4py/gain/core.pyx":2301 * * def __rdivmod__(self,y): * t = mod(y,self) # <<<<<<<<<<<<<< * s = subtract(y,t) * s = divide(s,self,s) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__mod); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_t = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2302 * def __rdivmod__(self,y): * t = mod(y,self) * s = subtract(y,t) # <<<<<<<<<<<<<< * s = divide(s,self,s) * return s,t */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__subtract); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_t); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_t); __Pyx_GIVEREF(__pyx_v_t); __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_s = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2303 * t = mod(y,self) * s = subtract(y,t) * s = divide(s,self,s) # <<<<<<<<<<<<<< * return s,t * */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__divide); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_s); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_s); __Pyx_GIVEREF(__pyx_v_s); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_s); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_s); __Pyx_GIVEREF(__pyx_v_s); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2304 * s = subtract(y,t) * s = divide(s,self,s) * return s,t # <<<<<<<<<<<<<< * * def __reduce__(self, *args, **kwargs): */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_s); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_s); __Pyx_GIVEREF(__pyx_v_s); __Pyx_INCREF(__pyx_v_t); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_t); __Pyx_GIVEREF(__pyx_v_t); __pyx_r = ((PyObject *)__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rdivmod__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_t); __Pyx_XDECREF(__pyx_v_s); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_279__reduce__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_279__reduce__ = {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_279__reduce__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_279__reduce__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce__ (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "__reduce__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2306; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__reduce__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2306; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__reduce__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_278__reduce__(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2306 * return s,t * * def __reduce__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_278__reduce__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__reduce__", 0); __Pyx_TraceCall("__reduce__", __pyx_f[0], 2306); /* "ga4py/gain/core.pyx":2307 * * def __reduce__(self, *args, **kwargs): * raise NotImplementedError # <<<<<<<<<<<<<< * * def __reduce_ex__(self, *args, **kwargs): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2307; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__reduce__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_281__reduce_ex__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_281__reduce_ex__ = {__Pyx_NAMESTR("__reduce_ex__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_281__reduce_ex__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_281__reduce_ex__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_ex__ (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "__reduce_ex__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2309; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__reduce_ex__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2309; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__reduce_ex__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_280__reduce_ex__(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2309 * raise NotImplementedError * * def __reduce_ex__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_280__reduce_ex__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__reduce_ex__", 0); __Pyx_TraceCall("__reduce_ex__", __pyx_f[0], 2309); /* "ga4py/gain/core.pyx":2310 * * def __reduce_ex__(self, *args, **kwargs): * raise NotImplementedError # <<<<<<<<<<<<<< * * def __repr__(self): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__reduce_ex__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_283__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_283__repr__ = {__Pyx_NAMESTR("__repr__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_283__repr__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_283__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_282__repr__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2312 * raise NotImplementedError * * def __repr__(self): # <<<<<<<<<<<<<< * result = "" * if 0 == me(): */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_282__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__repr__", 0); __Pyx_TraceCall("__repr__", __pyx_f[0], 2312); /* "ga4py/gain/core.pyx":2313 * * def __repr__(self): * result = "" # <<<<<<<<<<<<<< * if 0 == me(): * result = repr(self.get()) */ __Pyx_INCREF(((PyObject *)__pyx_kp_s_45)); __pyx_v_result = ((PyObject *)__pyx_kp_s_45); /* "ga4py/gain/core.pyx":2314 * def __repr__(self): * result = "" * if 0 == me(): # <<<<<<<<<<<<<< * result = repr(self.get()) * return result */ __pyx_t_1 = ((0 == __pyx_f_5ga4py_4gain_4core_me(0)) != 0); if (__pyx_t_1) { /* "ga4py/gain/core.pyx":2315 * result = "" * if 0 == me(): * result = repr(self.get()) # <<<<<<<<<<<<<< * return result * */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__get); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Repr(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_2); __pyx_t_2 = 0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":2316 * if 0 == me(): * result = repr(self.get()) * return result # <<<<<<<<<<<<<< * * def __rfloordiv__(self,y): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_result); __pyx_r = __pyx_v_result; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_285__rfloordiv__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_285__rfloordiv__ = {__Pyx_NAMESTR("__rfloordiv__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_285__rfloordiv__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_285__rfloordiv__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__rfloordiv__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__rfloordiv__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2318; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__rfloordiv__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2318; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__rfloordiv__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2318; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rfloordiv__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_284__rfloordiv__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2318 * return result * * def __rfloordiv__(self,y): # <<<<<<<<<<<<<< * return floor_divide(y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_284__rfloordiv__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__rfloordiv__", 0); __Pyx_TraceCall("__rfloordiv__", __pyx_f[0], 2318); /* "ga4py/gain/core.pyx":2319 * * def __rfloordiv__(self,y): * return floor_divide(y,self) # <<<<<<<<<<<<<< * * def __rlshift__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__floor_divide); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rfloordiv__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_287__rlshift__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_287__rlshift__ = {__Pyx_NAMESTR("__rlshift__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_287__rlshift__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_287__rlshift__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__rlshift__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__rlshift__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2321; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__rlshift__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2321; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__rlshift__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2321; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rlshift__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_286__rlshift__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2321 * return floor_divide(y,self) * * def __rlshift__(self,y): # <<<<<<<<<<<<<< * return left_shift(y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_286__rlshift__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__rlshift__", 0); __Pyx_TraceCall("__rlshift__", __pyx_f[0], 2321); /* "ga4py/gain/core.pyx":2322 * * def __rlshift__(self,y): * return left_shift(y,self) # <<<<<<<<<<<<<< * * def __rmod__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__left_shift); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rlshift__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_289__rmod__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_289__rmod__ = {__Pyx_NAMESTR("__rmod__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_289__rmod__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_289__rmod__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__rmod__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__rmod__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__rmod__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__rmod__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rmod__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_288__rmod__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2324 * return left_shift(y,self) * * def __rmod__(self,y): # <<<<<<<<<<<<<< * return mod(y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_288__rmod__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__rmod__", 0); __Pyx_TraceCall("__rmod__", __pyx_f[0], 2324); /* "ga4py/gain/core.pyx":2325 * * def __rmod__(self,y): * return mod(y,self) # <<<<<<<<<<<<<< * * def __rmul__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__mod); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rmod__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_291__rmul__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_291__rmul__ = {__Pyx_NAMESTR("__rmul__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_291__rmul__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_291__rmul__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__rmul__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__rmul__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2327; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__rmul__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2327; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__rmul__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2327; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rmul__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_290__rmul__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2327 * return mod(y,self) * * def __rmul__(self,y): # <<<<<<<<<<<<<< * return multiply(y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_290__rmul__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__rmul__", 0); __Pyx_TraceCall("__rmul__", __pyx_f[0], 2327); /* "ga4py/gain/core.pyx":2328 * * def __rmul__(self,y): * return multiply(y,self) # <<<<<<<<<<<<<< * * def __ror__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__multiply); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rmul__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_293__ror__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_293__ror__ = {__Pyx_NAMESTR("__ror__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_293__ror__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_293__ror__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__ror__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__ror__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2330; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__ror__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2330; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__ror__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2330; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__ror__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_292__ror__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2330 * return multiply(y,self) * * def __ror__(self,y): # <<<<<<<<<<<<<< * return logical_or(y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_292__ror__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__ror__", 0); __Pyx_TraceCall("__ror__", __pyx_f[0], 2330); /* "ga4py/gain/core.pyx":2331 * * def __ror__(self,y): * return logical_or(y,self) # <<<<<<<<<<<<<< * * def __rpow__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__logical_or); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2331; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2331; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2331; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__ror__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_295__rpow__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_295__rpow__ = {__Pyx_NAMESTR("__rpow__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_295__rpow__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_295__rpow__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__rpow__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__rpow__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2333; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__rpow__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2333; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__rpow__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2333; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rpow__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_294__rpow__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2333 * return logical_or(y,self) * * def __rpow__(self,y): # <<<<<<<<<<<<<< * return power(y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_294__rpow__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__rpow__", 0); __Pyx_TraceCall("__rpow__", __pyx_f[0], 2333); /* "ga4py/gain/core.pyx":2334 * * def __rpow__(self,y): * return power(y,self) # <<<<<<<<<<<<<< * * def __rrshift__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__power); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rpow__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_297__rrshift__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_297__rrshift__ = {__Pyx_NAMESTR("__rrshift__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_297__rrshift__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_297__rrshift__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__rrshift__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__rrshift__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2336; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__rrshift__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2336; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__rrshift__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2336; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rrshift__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_296__rrshift__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2336 * return power(y,self) * * def __rrshift__(self,y): # <<<<<<<<<<<<<< * return right_shift(y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_296__rrshift__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__rrshift__", 0); __Pyx_TraceCall("__rrshift__", __pyx_f[0], 2336); /* "ga4py/gain/core.pyx":2337 * * def __rrshift__(self,y): * return right_shift(y,self) # <<<<<<<<<<<<<< * * def __rshift__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__right_shift); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rrshift__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_299__rshift__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_299__rshift__ = {__Pyx_NAMESTR("__rshift__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_299__rshift__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_299__rshift__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__rshift__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__rshift__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2339; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__rshift__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2339; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__rshift__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2339; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rshift__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_298__rshift__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2339 * return right_shift(y,self) * * def __rshift__(self,y): # <<<<<<<<<<<<<< * return right_shift(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_298__rshift__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__rshift__", 0); __Pyx_TraceCall("__rshift__", __pyx_f[0], 2339); /* "ga4py/gain/core.pyx":2340 * * def __rshift__(self,y): * return right_shift(self,y) # <<<<<<<<<<<<<< * * def __rsub__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__right_shift); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rshift__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_301__rsub__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_301__rsub__ = {__Pyx_NAMESTR("__rsub__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_301__rsub__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_301__rsub__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__rsub__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__rsub__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2342; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__rsub__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2342; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__rsub__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2342; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rsub__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_300__rsub__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2342 * return right_shift(self,y) * * def __rsub__(self,y): # <<<<<<<<<<<<<< * return subtract(y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_300__rsub__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__rsub__", 0); __Pyx_TraceCall("__rsub__", __pyx_f[0], 2342); /* "ga4py/gain/core.pyx":2343 * * def __rsub__(self,y): * return subtract(y,self) # <<<<<<<<<<<<<< * * def __rtruediv__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__subtract); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rsub__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_303__rtruediv__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_303__rtruediv__ = {__Pyx_NAMESTR("__rtruediv__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_303__rtruediv__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_303__rtruediv__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__rtruediv__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__rtruediv__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2345; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__rtruediv__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2345; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__rtruediv__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2345; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rtruediv__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_302__rtruediv__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2345 * return subtract(y,self) * * def __rtruediv__(self,y): # <<<<<<<<<<<<<< * return true_divide(y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_302__rtruediv__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__rtruediv__", 0); __Pyx_TraceCall("__rtruediv__", __pyx_f[0], 2345); /* "ga4py/gain/core.pyx":2346 * * def __rtruediv__(self,y): * return true_divide(y,self) # <<<<<<<<<<<<<< * * def __rxor__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__true_divide); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rtruediv__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_305__rxor__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_305__rxor__ = {__Pyx_NAMESTR("__rxor__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_305__rxor__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_305__rxor__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__rxor__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__rxor__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2348; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__rxor__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2348; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__rxor__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2348; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rxor__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_304__rxor__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2348 * return true_divide(y,self) * * def __rxor__(self,y): # <<<<<<<<<<<<<< * return logical_xor(y,self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_304__rxor__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__rxor__", 0); __Pyx_TraceCall("__rxor__", __pyx_f[0], 2348); /* "ga4py/gain/core.pyx":2349 * * def __rxor__(self,y): * return logical_xor(y,self) # <<<<<<<<<<<<<< * * #def __setattr__ */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__logical_xor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__rxor__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_307__setitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_307__setitem__ = {__Pyx_NAMESTR("__setitem__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_307__setitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_307__setitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_key = 0; PyObject *__pyx_v_value = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,&__pyx_n_s__value,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2353; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2353; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__setitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2353; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_self = values[0]; __pyx_v_key = values[1]; __pyx_v_value = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2353; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_306__setitem__(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_value); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2353 * #def __setattr__ * * def __setitem__(self, key, value): # <<<<<<<<<<<<<< * # THIS IS A COLLECTIVE OPERATION * sync() */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_306__setitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value) { int __pyx_v_fancy; PyObject *__pyx_v_arg = NULL; PyObject *__pyx_v_global_slice = NULL; CYTHON_UNUSED PyObject *__pyx_v_new_shape = NULL; PyObject *__pyx_v_npvalue = NULL; int __pyx_v_release_value; PyObject *__pyx_v_npself = NULL; PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; PyObject *__pyx_t_5 = NULL; Py_ssize_t __pyx_t_6; PyObject *(*__pyx_t_7)(PyObject *); PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; int __pyx_t_10; PyObject *(*__pyx_t_11)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__setitem__", 0); __Pyx_TraceCall("__setitem__", __pyx_f[0], 2353); __Pyx_INCREF(__pyx_v_key); __Pyx_INCREF(__pyx_v_value); /* "ga4py/gain/core.pyx":2355 * def __setitem__(self, key, value): * # THIS IS A COLLECTIVE OPERATION * sync() # <<<<<<<<<<<<<< * if isinstance(key, (str,unicode)): * raise NotImplementedError, "str or unicode key" */ __pyx_t_1 = __pyx_f_5ga4py_4gain_4core_sync(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2356 * # THIS IS A COLLECTIVE OPERATION * sync() * if isinstance(key, (str,unicode)): # <<<<<<<<<<<<<< * raise NotImplementedError, "str or unicode key" * if self.ndim == 0: */ __Pyx_INCREF(__pyx_v_key); __pyx_t_1 = __pyx_v_key; __pyx_t_2 = PyString_Check(__pyx_t_1); if (!__pyx_t_2) { __pyx_t_3 = PyUnicode_Check(__pyx_t_1); __pyx_t_4 = __pyx_t_3; } else { __pyx_t_4 = __pyx_t_2; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = (__pyx_t_4 != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":2357 * sync() * if isinstance(key, (str,unicode)): * raise NotImplementedError, "str or unicode key" # <<<<<<<<<<<<<< * if self.ndim == 0: * raise IndexError, "0-d arrays can't be indexed" */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_kp_s_56), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2357; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":2358 * if isinstance(key, (str,unicode)): * raise NotImplementedError, "str or unicode key" * if self.ndim == 0: # <<<<<<<<<<<<<< * raise IndexError, "0-d arrays can't be indexed" * key = listify(key) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_2) { /* "ga4py/gain/core.pyx":2359 * raise NotImplementedError, "str or unicode key" * if self.ndim == 0: * raise IndexError, "0-d arrays can't be indexed" # <<<<<<<<<<<<<< * key = listify(key) * fancy = False */ __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_kp_s_57), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/core.pyx":2360 * if self.ndim == 0: * raise IndexError, "0-d arrays can't be indexed" * key = listify(key) # <<<<<<<<<<<<<< * fancy = False * for arg in key: */ __pyx_t_5 = ((PyObject *)__pyx_f_5ga4py_4gain_4core_listify(__pyx_v_key, 0)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":2361 * raise IndexError, "0-d arrays can't be indexed" * key = listify(key) * fancy = False # <<<<<<<<<<<<<< * for arg in key: * if isinstance(arg, (ndarray,np.ndarray,list,tuple)): */ __pyx_v_fancy = 0; /* "ga4py/gain/core.pyx":2362 * key = listify(key) * fancy = False * for arg in key: # <<<<<<<<<<<<<< * if isinstance(arg, (ndarray,np.ndarray,list,tuple)): * fancy = True */ if (PyList_CheckExact(__pyx_v_key) || PyTuple_CheckExact(__pyx_v_key)) { __pyx_t_5 = __pyx_v_key; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0; __pyx_t_7 = NULL; } else { __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_key); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2362; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext; } for (;;) { if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_5)) { if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2362; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2362; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_5)) { if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_5)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2362; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2362; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_1 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_1)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2362; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_1); } __Pyx_XDECREF_SET(__pyx_v_arg, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2363 * fancy = False * for arg in key: * if isinstance(arg, (ndarray,np.ndarray,list,tuple)): # <<<<<<<<<<<<<< * fancy = True * break */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray))); PyTuple_SET_ITEM(__pyx_t_8, 1, ((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray))); __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray))); __Pyx_INCREF(((PyObject *)((PyObject*)(&PyList_Type)))); PyTuple_SET_ITEM(__pyx_t_8, 2, ((PyObject *)((PyObject*)(&PyList_Type)))); __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyList_Type)))); __Pyx_INCREF(((PyObject *)((PyObject*)(&PyTuple_Type)))); PyTuple_SET_ITEM(__pyx_t_8, 3, ((PyObject *)((PyObject*)(&PyTuple_Type)))); __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyTuple_Type)))); __pyx_t_1 = 0; __pyx_t_2 = PyObject_IsInstance(__pyx_v_arg, ((PyObject *)__pyx_t_8)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __pyx_t_4 = (__pyx_t_2 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2364 * for arg in key: * if isinstance(arg, (ndarray,np.ndarray,list,tuple)): * fancy = True # <<<<<<<<<<<<<< * break * if fancy: */ __pyx_v_fancy = 1; /* "ga4py/gain/core.pyx":2365 * if isinstance(arg, (ndarray,np.ndarray,list,tuple)): * fancy = True * break # <<<<<<<<<<<<<< * if fancy: * raise NotImplementedError, "TODO: fancy indexing" */ goto __pyx_L6_break; goto __pyx_L7; } __pyx_L7:; } __pyx_L6_break:; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":2366 * fancy = True * break * if fancy: # <<<<<<<<<<<<<< * raise NotImplementedError, "TODO: fancy indexing" * global_slice = self.global_slice[key] */ __pyx_t_4 = (__pyx_v_fancy != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2367 * break * if fancy: * raise NotImplementedError, "TODO: fancy indexing" # <<<<<<<<<<<<<< * global_slice = self.global_slice[key] * new_shape = global_slice.shape */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_kp_s_58), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; /* "ga4py/gain/core.pyx":2368 * if fancy: * raise NotImplementedError, "TODO: fancy indexing" * global_slice = self.global_slice[key] # <<<<<<<<<<<<<< * new_shape = global_slice.shape * value = asarray(value) */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_8 = PyObject_GetItem(__pyx_t_5, __pyx_v_key); if (!__pyx_t_8) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_global_slice = __pyx_t_8; __pyx_t_8 = 0; /* "ga4py/gain/core.pyx":2369 * raise NotImplementedError, "TODO: fancy indexing" * global_slice = self.global_slice[key] * new_shape = global_slice.shape # <<<<<<<<<<<<<< * value = asarray(value) * npvalue = None */ __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_global_slice, __pyx_n_s__shape); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_v_new_shape = __pyx_t_8; __pyx_t_8 = 0; /* "ga4py/gain/core.pyx":2370 * global_slice = self.global_slice[key] * new_shape = global_slice.shape * value = asarray(value) # <<<<<<<<<<<<<< * npvalue = None * release_value = False */ __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__asarray); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_value); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __pyx_t_1 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2371 * new_shape = global_slice.shape * value = asarray(value) * npvalue = None # <<<<<<<<<<<<<< * release_value = False * # access based on new global_slice as an ndarray first */ __Pyx_INCREF(Py_None); __pyx_v_npvalue = Py_None; /* "ga4py/gain/core.pyx":2372 * value = asarray(value) * npvalue = None * release_value = False # <<<<<<<<<<<<<< * # access based on new global_slice as an ndarray first * npself = self.access(global_slice) */ __pyx_v_release_value = 0; /* "ga4py/gain/core.pyx":2374 * release_value = False * # access based on new global_slice as an ndarray first * npself = self.access(global_slice) # <<<<<<<<<<<<<< * if npself is not None: * if isinstance(value, ndarray): */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__access); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2374; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2374; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_global_slice); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_global_slice); __Pyx_GIVEREF(__pyx_v_global_slice); __pyx_t_8 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2374; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_v_npself = __pyx_t_8; __pyx_t_8 = 0; /* "ga4py/gain/core.pyx":2375 * # access based on new global_slice as an ndarray first * npself = self.access(global_slice) * if npself is not None: # <<<<<<<<<<<<<< * if isinstance(value, ndarray): * if (ga.compare_distr(value.handle, self.handle) */ __pyx_t_4 = (__pyx_v_npself != Py_None); __pyx_t_2 = (__pyx_t_4 != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":2376 * npself = self.access(global_slice) * if npself is not None: * if isinstance(value, ndarray): # <<<<<<<<<<<<<< * if (ga.compare_distr(value.handle, self.handle) * and value.global_slice == global_slice */ __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_2 = PyObject_IsInstance(__pyx_v_value, __pyx_t_8); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_4 = (__pyx_t_2 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2377 * if npself is not None: * if isinstance(value, ndarray): * if (ga.compare_distr(value.handle, self.handle) # <<<<<<<<<<<<<< * and value.global_slice == global_slice * and value.global_slice.T == self.global_slice.T): */ __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__compare_distr); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s__handle); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__handle); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_8 = 0; __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2378 * if isinstance(value, ndarray): * if (ga.compare_distr(value.handle, self.handle) * and value.global_slice == global_slice # <<<<<<<<<<<<<< * and value.global_slice.T == self.global_slice.T): * # opt: same distributions and same slicing */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); /* "ga4py/gain/core.pyx":2379 * if (ga.compare_distr(value.handle, self.handle) * and value.global_slice == global_slice * and value.global_slice.T == self.global_slice.T): # <<<<<<<<<<<<<< * # opt: same distributions and same slicing * # in practice this might not happen all that often */ __pyx_t_9 = PyObject_RichCompare(__pyx_t_1, __pyx_v_global_slice, Py_EQ); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (__pyx_t_2) { __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2379; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s__T); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2379; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2379; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s__T); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2379; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2379; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2379; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_10 = __pyx_t_3; } else { __pyx_t_10 = __pyx_t_2; } __pyx_t_2 = __pyx_t_10; } else { __pyx_t_2 = __pyx_t_4; } if (__pyx_t_2) { /* "ga4py/gain/core.pyx":2382 * # opt: same distributions and same slicing * # in practice this might not happen all that often * npvalue = value.access() # <<<<<<<<<<<<<< * release_value = True * else: */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s__access); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF_SET(__pyx_v_npvalue, __pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":2383 * # in practice this might not happen all that often * npvalue = value.access() * release_value = True # <<<<<<<<<<<<<< * else: * lo,hi = self.distribution() */ __pyx_v_release_value = 1; goto __pyx_L11; } /*else*/ { /* "ga4py/gain/core.pyx":2385 * release_value = True * else: * lo,hi = self.distribution() # <<<<<<<<<<<<<< * result = global_slice.get_key(lo,hi) * result = util.broadcast_chomp(value.shape, result) */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__distribution); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_9))) || (PyList_CheckExact(__pyx_t_9))) { PyObject* sequence = __pyx_t_9; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_5 = PyList_GET_ITEM(sequence, 0); __pyx_t_1 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_1); #else __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); #endif __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } else { Py_ssize_t index = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_11 = Py_TYPE(__pyx_t_8)->tp_iternext; index = 0; __pyx_t_5 = __pyx_t_11(__pyx_t_8); if (unlikely(!__pyx_t_5)) goto __pyx_L12_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); index = 1; __pyx_t_1 = __pyx_t_11(__pyx_t_8); if (unlikely(!__pyx_t_1)) goto __pyx_L12_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_8), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_11 = NULL; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L13_unpacking_done; __pyx_L12_unpacking_failed:; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_11 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L13_unpacking_done:; } __pyx_v_lo = __pyx_t_5; __pyx_t_5 = 0; __pyx_v_hi = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2386 * else: * lo,hi = self.distribution() * result = global_slice.get_key(lo,hi) # <<<<<<<<<<<<<< * result = util.broadcast_chomp(value.shape, result) * npvalue = value.get(result) */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_global_slice, __pyx_n_s__get_key); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_5 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_v_result = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":2387 * lo,hi = self.distribution() * result = global_slice.get_key(lo,hi) * result = util.broadcast_chomp(value.shape, result) # <<<<<<<<<<<<<< * npvalue = value.get(result) * elif isinstance(value, flatiter): */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__broadcast_chomp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s__shape); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":2388 * result = global_slice.get_key(lo,hi) * result = util.broadcast_chomp(value.shape, result) * npvalue = value.get(result) # <<<<<<<<<<<<<< * elif isinstance(value, flatiter): * raise NotImplementedError */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s__get); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_1 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; __Pyx_DECREF_SET(__pyx_v_npvalue, __pyx_t_1); __pyx_t_1 = 0; } __pyx_L11:; goto __pyx_L10; } /* "ga4py/gain/core.pyx":2389 * result = util.broadcast_chomp(value.shape, result) * npvalue = value.get(result) * elif isinstance(value, flatiter): # <<<<<<<<<<<<<< * raise NotImplementedError * elif value.ndim > 0: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__flatiter); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2389; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_IsInstance(__pyx_v_value, __pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2389; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = (__pyx_t_2 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2390 * npvalue = value.get(result) * elif isinstance(value, flatiter): * raise NotImplementedError # <<<<<<<<<<<<<< * elif value.ndim > 0: * lo,hi = self.distribution() */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2390; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L10; } /* "ga4py/gain/core.pyx":2391 * elif isinstance(value, flatiter): * raise NotImplementedError * elif value.ndim > 0: # <<<<<<<<<<<<<< * lo,hi = self.distribution() * result = global_slice.get_key(lo,hi) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s__ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2391; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2391; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2391; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2392 * raise NotImplementedError * elif value.ndim > 0: * lo,hi = self.distribution() # <<<<<<<<<<<<<< * result = global_slice.get_key(lo,hi) * result = util.broadcast_chomp(value.shape, result) */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__distribution); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_9 = PyList_GET_ITEM(sequence, 0); __pyx_t_5 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_5); #else __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_11 = Py_TYPE(__pyx_t_8)->tp_iternext; index = 0; __pyx_t_9 = __pyx_t_11(__pyx_t_8); if (unlikely(!__pyx_t_9)) goto __pyx_L14_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_5 = __pyx_t_11(__pyx_t_8); if (unlikely(!__pyx_t_5)) goto __pyx_L14_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_8), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_11 = NULL; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L15_unpacking_done; __pyx_L14_unpacking_failed:; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_11 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L15_unpacking_done:; } __pyx_v_lo = __pyx_t_9; __pyx_t_9 = 0; __pyx_v_hi = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":2393 * elif value.ndim > 0: * lo,hi = self.distribution() * result = global_slice.get_key(lo,hi) # <<<<<<<<<<<<<< * result = util.broadcast_chomp(value.shape, result) * npvalue = value[result] */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_global_slice, __pyx_n_s__get_key); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_v_result = __pyx_t_9; __pyx_t_9 = 0; /* "ga4py/gain/core.pyx":2394 * lo,hi = self.distribution() * result = global_slice.get_key(lo,hi) * result = util.broadcast_chomp(value.shape, result) # <<<<<<<<<<<<<< * npvalue = value[result] * else: */ __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s__broadcast_chomp); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s__shape); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_9); __Pyx_GIVEREF(__pyx_t_9); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_9 = 0; __pyx_t_9 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_9); __pyx_t_9 = 0; /* "ga4py/gain/core.pyx":2395 * result = global_slice.get_key(lo,hi) * result = util.broadcast_chomp(value.shape, result) * npvalue = value[result] # <<<<<<<<<<<<<< * else: * npvalue = value */ __pyx_t_9 = PyObject_GetItem(__pyx_v_value, __pyx_v_result); if (!__pyx_t_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2395; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF_SET(__pyx_v_npvalue, __pyx_t_9); __pyx_t_9 = 0; goto __pyx_L10; } /*else*/ { /* "ga4py/gain/core.pyx":2397 * npvalue = value[result] * else: * npvalue = value # <<<<<<<<<<<<<< * npself[:] = npvalue * if release_value: */ __Pyx_INCREF(__pyx_v_value); __Pyx_DECREF_SET(__pyx_v_npvalue, __pyx_v_value); } __pyx_L10:; /* "ga4py/gain/core.pyx":2398 * else: * npvalue = value * npself[:] = npvalue # <<<<<<<<<<<<<< * if release_value: * value.release() */ if (__Pyx_PyObject_SetSlice(__pyx_v_npself, __pyx_v_npvalue, 0, 0, NULL, NULL, &__pyx_k_slice_61, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2399 * npvalue = value * npself[:] = npvalue * if release_value: # <<<<<<<<<<<<<< * value.release() * self.release_update() */ __pyx_t_4 = (__pyx_v_release_value != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2400 * npself[:] = npvalue * if release_value: * value.release() # <<<<<<<<<<<<<< * self.release_update() * sync() */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s__release); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2400; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2400; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L16; } __pyx_L16:; /* "ga4py/gain/core.pyx":2401 * if release_value: * value.release() * self.release_update() # <<<<<<<<<<<<<< * sync() * */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__release_update); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L9; } __pyx_L9:; /* "ga4py/gain/core.pyx":2402 * value.release() * self.release_update() * sync() # <<<<<<<<<<<<<< * * #def __setslice__ */ __pyx_t_9 = __pyx_f_5ga4py_4gain_4core_sync(0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_arg); __Pyx_XDECREF(__pyx_v_global_slice); __Pyx_XDECREF(__pyx_v_new_shape); __Pyx_XDECREF(__pyx_v_npvalue); __Pyx_XDECREF(__pyx_v_npself); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XDECREF(__pyx_v_result); __Pyx_XDECREF(__pyx_v_key); __Pyx_XDECREF(__pyx_v_value); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_309__str__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_309__str__ = {__Pyx_NAMESTR("__str__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_309__str__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_309__str__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_308__str__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2408 * #def __sizeof__ * * def __str__(self): # <<<<<<<<<<<<<< * result = "" * if 0 == me(): */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_308__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__str__", 0); __Pyx_TraceCall("__str__", __pyx_f[0], 2408); /* "ga4py/gain/core.pyx":2409 * * def __str__(self): * result = "" # <<<<<<<<<<<<<< * if 0 == me(): * result = str(self.get()) */ __Pyx_INCREF(((PyObject *)__pyx_kp_s_45)); __pyx_v_result = ((PyObject *)__pyx_kp_s_45); /* "ga4py/gain/core.pyx":2410 * def __str__(self): * result = "" * if 0 == me(): # <<<<<<<<<<<<<< * result = str(self.get()) * return result */ __pyx_t_1 = ((0 == __pyx_f_5ga4py_4gain_4core_me(0)) != 0); if (__pyx_t_1) { /* "ga4py/gain/core.pyx":2411 * result = "" * if 0 == me(): * result = str(self.get()) # <<<<<<<<<<<<<< * return result * */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__get); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_3); __pyx_t_3 = 0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":2412 * if 0 == me(): * result = str(self.get()) * return result # <<<<<<<<<<<<<< * * def __sub__(self,y): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_result); __pyx_r = __pyx_v_result; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_311__sub__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_311__sub__ = {__Pyx_NAMESTR("__sub__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_311__sub__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_311__sub__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__sub__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__sub__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2414; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__sub__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2414; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__sub__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2414; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__sub__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_310__sub__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2414 * return result * * def __sub__(self,y): # <<<<<<<<<<<<<< * return subtract(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_310__sub__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__sub__", 0); __Pyx_TraceCall("__sub__", __pyx_f[0], 2414); /* "ga4py/gain/core.pyx":2415 * * def __sub__(self,y): * return subtract(self,y) # <<<<<<<<<<<<<< * * #def __subclasshook__ */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__subtract); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2415; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2415; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2415; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__sub__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_313__truediv__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_313__truediv__ = {__Pyx_NAMESTR("__truediv__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_313__truediv__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_313__truediv__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__truediv__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__truediv__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2419; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__truediv__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2419; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__truediv__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2419; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__truediv__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_312__truediv__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2419 * #def __subclasshook__ * * def __truediv__(self,y): # <<<<<<<<<<<<<< * return true_divide(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_312__truediv__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__truediv__", 0); __Pyx_TraceCall("__truediv__", __pyx_f[0], 2419); /* "ga4py/gain/core.pyx":2420 * * def __truediv__(self,y): * return true_divide(self,y) # <<<<<<<<<<<<<< * * def __xor__(self,y): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__true_divide); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2420; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2420; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2420; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__truediv__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_315__xor__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_7ndarray_315__xor__ = {__Pyx_NAMESTR("__xor__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7ndarray_315__xor__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_7ndarray_315__xor__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__xor__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__xor__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__xor__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__xor__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ndarray.__xor__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_7ndarray_314__xor__(__pyx_self, __pyx_v_self, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2422 * return true_divide(self,y) * * def __xor__(self,y): # <<<<<<<<<<<<<< * return logical_xor(self,y) * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_7ndarray_314__xor__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__xor__", 0); __Pyx_TraceCall("__xor__", __pyx_f[0], 2422); /* "ga4py/gain/core.pyx":2423 * * def __xor__(self,y): * return logical_xor(self,y) # <<<<<<<<<<<<<< * * def _npin_piece_based_on_out(input, out, shape=None): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__logical_xor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2423; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2423; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2423; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.ndarray.__xor__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_27_npin_piece_based_on_out(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_27_npin_piece_based_on_out = {__Pyx_NAMESTR("_npin_piece_based_on_out"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_27_npin_piece_based_on_out, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_27_npin_piece_based_on_out(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_input = 0; PyObject *__pyx_v_out = 0; PyObject *__pyx_v_shape = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_npin_piece_based_on_out (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__input,&__pyx_n_s__out,&__pyx_n_s__shape,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/core.pyx":2425 * return logical_xor(self,y) * * def _npin_piece_based_on_out(input, out, shape=None): # <<<<<<<<<<<<<< * # opt: same distributions and same slicing * # we can use local data exclusively */ values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__input)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("_npin_piece_based_on_out", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2425; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__shape); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_npin_piece_based_on_out") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2425; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_input = values[0]; __pyx_v_out = values[1]; __pyx_v_shape = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_npin_piece_based_on_out", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2425; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core._npin_piece_based_on_out", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_26_npin_piece_based_on_out(__pyx_self, __pyx_v_input, __pyx_v_out, __pyx_v_shape); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_26_npin_piece_based_on_out(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_input, PyObject *__pyx_v_out, PyObject *__pyx_v_shape) { PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_t_6; int __pyx_t_7; int __pyx_t_8; int __pyx_t_9; Py_ssize_t __pyx_t_10; PyObject *(*__pyx_t_11)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_npin_piece_based_on_out", 0); __Pyx_TraceCall("_npin_piece_based_on_out", __pyx_f[0], 2425); /* "ga4py/gain/core.pyx":2429 * # we can use local data exclusively * # in practice this might not happen all that often * if (isinstance(input, ndarray) # <<<<<<<<<<<<<< * and ga.compare_distr(input.handle, out.handle) * and input.global_slice == out.global_slice */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2429; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_IsInstance(__pyx_v_input, __pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2429; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* "ga4py/gain/core.pyx":2430 * # in practice this might not happen all that often * if (isinstance(input, ndarray) * and ga.compare_distr(input.handle, out.handle) # <<<<<<<<<<<<<< * and input.global_slice == out.global_slice * and input.global_slice.T == out.global_slice.T): */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2430; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__compare_distr); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2430; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input, __pyx_n_s__handle); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2430; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__handle); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2430; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2430; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_1 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2430; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2430; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2431 * if (isinstance(input, ndarray) * and ga.compare_distr(input.handle, out.handle) * and input.global_slice == out.global_slice # <<<<<<<<<<<<<< * and input.global_slice.T == out.global_slice.T): * return input.access(),True */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { /* "ga4py/gain/core.pyx":2432 * and ga.compare_distr(input.handle, out.handle) * and input.global_slice == out.global_slice * and input.global_slice.T == out.global_slice.T): # <<<<<<<<<<<<<< * return input.access(),True * # no opt: requires copy of remote data */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_input, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__T); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__T); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_9 = __pyx_t_8; } else { __pyx_t_9 = __pyx_t_7; } __pyx_t_7 = __pyx_t_9; } else { __pyx_t_7 = __pyx_t_6; } __pyx_t_6 = __pyx_t_7; } else { __pyx_t_6 = __pyx_t_2; } if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2433 * and input.global_slice == out.global_slice * and input.global_slice.T == out.global_slice.T): * return input.access(),True # <<<<<<<<<<<<<< * # no opt: requires copy of remote data * elif shape is None or len(shape) > 0: */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_input, __pyx_n_s__access); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2433; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2433; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2433; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2433; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_r = ((PyObject *)__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L0; goto __pyx_L3; } /* "ga4py/gain/core.pyx":2435 * return input.access(),True * # no opt: requires copy of remote data * elif shape is None or len(shape) > 0: # <<<<<<<<<<<<<< * lo,hi = out.distribution() * result = out.global_slice.get_key(lo,hi) */ __pyx_t_6 = (__pyx_v_shape == Py_None); if (!(__pyx_t_6 != 0)) { __pyx_t_10 = PyObject_Length(__pyx_v_shape); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = ((__pyx_t_10 > 0) != 0); __pyx_t_7 = __pyx_t_2; } else { __pyx_t_7 = (__pyx_t_6 != 0); } if (__pyx_t_7) { /* "ga4py/gain/core.pyx":2436 * # no opt: requires copy of remote data * elif shape is None or len(shape) > 0: * lo,hi = out.distribution() # <<<<<<<<<<<<<< * result = out.global_slice.get_key(lo,hi) * if shape is not None: */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__distribution); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_5 = PyList_GET_ITEM(sequence, 0); __pyx_t_4 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); #else __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_11 = Py_TYPE(__pyx_t_1)->tp_iternext; index = 0; __pyx_t_5 = __pyx_t_11(__pyx_t_1); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); index = 1; __pyx_t_4 = __pyx_t_11(__pyx_t_1); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_1), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_11 = NULL; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_11 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } __pyx_v_lo = __pyx_t_5; __pyx_t_5 = 0; __pyx_v_hi = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2437 * elif shape is None or len(shape) > 0: * lo,hi = out.distribution() * result = out.global_slice.get_key(lo,hi) # <<<<<<<<<<<<<< * if shape is not None: * result = util.broadcast_chomp(shape, result) */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__get_key); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_result = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":2438 * lo,hi = out.distribution() * result = out.global_slice.get_key(lo,hi) * if shape is not None: # <<<<<<<<<<<<<< * result = util.broadcast_chomp(shape, result) * if is_distributed(input): */ __pyx_t_7 = (__pyx_v_shape != Py_None); __pyx_t_6 = (__pyx_t_7 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2439 * result = out.global_slice.get_key(lo,hi) * if shape is not None: * result = util.broadcast_chomp(shape, result) # <<<<<<<<<<<<<< * if is_distributed(input): * return input.get(result),False */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__broadcast_chomp); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_4); __pyx_t_4 = 0; goto __pyx_L6; } __pyx_L6:; /* "ga4py/gain/core.pyx":2440 * if shape is not None: * result = util.broadcast_chomp(shape, result) * if is_distributed(input): # <<<<<<<<<<<<<< * return input.get(result),False * else: */ __pyx_t_6 = (__pyx_f_5ga4py_4gain_4core_is_distributed(__pyx_v_input, 0) != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2441 * result = util.broadcast_chomp(shape, result) * if is_distributed(input): * return input.get(result),False # <<<<<<<<<<<<<< * else: * return input[result],False */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input, __pyx_n_s__get); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_3 = 0; __pyx_t_5 = 0; __pyx_r = ((PyObject *)__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L0; goto __pyx_L7; } /*else*/ { /* "ga4py/gain/core.pyx":2443 * return input.get(result),False * else: * return input[result],False # <<<<<<<<<<<<<< * else: * return input,False */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = PyObject_GetItem(__pyx_v_input, __pyx_v_result); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_r = ((PyObject *)__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L0; } __pyx_L7:; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":2445 * return input[result],False * else: * return input,False # <<<<<<<<<<<<<< * * class ufunc(object): */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2445; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2445; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_input); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_input); __Pyx_GIVEREF(__pyx_v_input); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = ((PyObject *)__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("ga4py.gain.core._npin_piece_based_on_out", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XDECREF(__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_5ufunc_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_5ufunc_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_func = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__func,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__func)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2500; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2500; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_func = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2500; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.ufunc.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_5ufunc___init__(__pyx_self, __pyx_v_self, __pyx_v_func); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2500 * * """ * def __init__(self, func): # <<<<<<<<<<<<<< * self.func = func * self.__doc__ = func.__doc__ */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_func) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__init__", 0); __Pyx_TraceCall("__init__", __pyx_f[0], 2500); /* "ga4py/gain/core.pyx":2501 * """ * def __init__(self, func): * self.func = func # <<<<<<<<<<<<<< * self.__doc__ = func.__doc__ * */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__func, __pyx_v_func) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2501; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2502 * def __init__(self, func): * self.func = func * self.__doc__ = func.__doc__ # <<<<<<<<<<<<<< * * def _get_identity(self): */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_func, __pyx_n_s____doc__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s____doc__, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.ufunc.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_3_get_identity(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_5ufunc_3_get_identity = {__Pyx_NAMESTR("_get_identity"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_5ufunc_3_get_identity, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_3_get_identity(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_identity (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_5ufunc_2_get_identity(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2504 * self.__doc__ = func.__doc__ * * def _get_identity(self): # <<<<<<<<<<<<<< * return self.func.identity * identity = property(_get_identity) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_2_get_identity(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_identity", 0); __Pyx_TraceCall("_get_identity", __pyx_f[0], 2504); /* "ga4py/gain/core.pyx":2505 * * def _get_identity(self): * return self.func.identity # <<<<<<<<<<<<<< * identity = property(_get_identity) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2505; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__identity); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2505; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ufunc._get_identity", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_5_get_nargs(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_5ufunc_5_get_nargs = {__Pyx_NAMESTR("_get_nargs"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_5ufunc_5_get_nargs, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_5_get_nargs(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_nargs (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_5ufunc_4_get_nargs(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2508 * identity = property(_get_identity) * * def _get_nargs(self): # <<<<<<<<<<<<<< * return self.func.nargs * nargs = property(_get_nargs) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_4_get_nargs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_nargs", 0); __Pyx_TraceCall("_get_nargs", __pyx_f[0], 2508); /* "ga4py/gain/core.pyx":2509 * * def _get_nargs(self): * return self.func.nargs # <<<<<<<<<<<<<< * nargs = property(_get_nargs) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__nargs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ufunc._get_nargs", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_7_get_nin(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_5ufunc_7_get_nin = {__Pyx_NAMESTR("_get_nin"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_5ufunc_7_get_nin, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_7_get_nin(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_nin (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_5ufunc_6_get_nin(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2512 * nargs = property(_get_nargs) * * def _get_nin(self): # <<<<<<<<<<<<<< * return self.func.nin * nin = property(_get_nin) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_6_get_nin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_nin", 0); __Pyx_TraceCall("_get_nin", __pyx_f[0], 2512); /* "ga4py/gain/core.pyx":2513 * * def _get_nin(self): * return self.func.nin # <<<<<<<<<<<<<< * nin = property(_get_nin) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2513; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__nin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2513; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ufunc._get_nin", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_9_get_nout(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_5ufunc_9_get_nout = {__Pyx_NAMESTR("_get_nout"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_5ufunc_9_get_nout, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_9_get_nout(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_nout (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_5ufunc_8_get_nout(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2516 * nin = property(_get_nin) * * def _get_nout(self): # <<<<<<<<<<<<<< * return self.func.nout * nout = property(_get_nout) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_8_get_nout(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_nout", 0); __Pyx_TraceCall("_get_nout", __pyx_f[0], 2516); /* "ga4py/gain/core.pyx":2517 * * def _get_nout(self): * return self.func.nout # <<<<<<<<<<<<<< * nout = property(_get_nout) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2517; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__nout); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2517; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ufunc._get_nout", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_11_get_ntypes(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_5ufunc_11_get_ntypes = {__Pyx_NAMESTR("_get_ntypes"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_5ufunc_11_get_ntypes, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_11_get_ntypes(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_ntypes (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_5ufunc_10_get_ntypes(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2520 * nout = property(_get_nout) * * def _get_ntypes(self): # <<<<<<<<<<<<<< * return self.func.ntypes * ntypes = property(_get_ntypes) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_10_get_ntypes(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_ntypes", 0); __Pyx_TraceCall("_get_ntypes", __pyx_f[0], 2520); /* "ga4py/gain/core.pyx":2521 * * def _get_ntypes(self): * return self.func.ntypes # <<<<<<<<<<<<<< * ntypes = property(_get_ntypes) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2521; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__ntypes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2521; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ufunc._get_ntypes", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_13_get_signature(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_5ufunc_13_get_signature = {__Pyx_NAMESTR("_get_signature"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_5ufunc_13_get_signature, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_13_get_signature(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_signature (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_5ufunc_12_get_signature(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2524 * ntypes = property(_get_ntypes) * * def _get_signature(self): # <<<<<<<<<<<<<< * return self.func.signature * signature = property(_get_signature) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_12_get_signature(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_signature", 0); __Pyx_TraceCall("_get_signature", __pyx_f[0], 2524); /* "ga4py/gain/core.pyx":2525 * * def _get_signature(self): * return self.func.signature # <<<<<<<<<<<<<< * signature = property(_get_signature) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2525; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__signature); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2525; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ufunc._get_signature", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_15_get_types(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_5ufunc_15_get_types = {__Pyx_NAMESTR("_get_types"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_5ufunc_15_get_types, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_15_get_types(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_types (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_5ufunc_14_get_types(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2528 * signature = property(_get_signature) * * def _get_types(self): # <<<<<<<<<<<<<< * return self.func.types * types = property(_get_types) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_14_get_types(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_types", 0); __Pyx_TraceCall("_get_types", __pyx_f[0], 2528); /* "ga4py/gain/core.pyx":2529 * * def _get_types(self): * return self.func.types # <<<<<<<<<<<<<< * types = property(_get_types) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__types); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ufunc._get_types", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_17__call__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_5ufunc_17__call__ = {__Pyx_NAMESTR("__call__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_5ufunc_17__call__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_17__call__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_args = 0; PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__call__ (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "__call__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__call__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ufunc.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_5ufunc_16__call__(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2532 * types = property(_get_types) * * def __call__(self, *args, **kwargs): # <<<<<<<<<<<<<< * if self.func.nin == 1: * return self._unary_call(*args, **kwargs) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_16__call__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__call__", 0); __Pyx_TraceCall("__call__", __pyx_f[0], 2532); /* "ga4py/gain/core.pyx":2533 * * def __call__(self, *args, **kwargs): * if self.func.nin == 1: # <<<<<<<<<<<<<< * return self._unary_call(*args, **kwargs) * elif self.func.nin == 2: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__nin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2534 * def __call__(self, *args, **kwargs): * if self.func.nin == 1: * return self._unary_call(*args, **kwargs) # <<<<<<<<<<<<<< * elif self.func.nin == 2: * return self._binary_call(*args, **kwargs) */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___unary_call); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PySequence_Tuple(((PyObject *)__pyx_v_args)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __pyx_t_4 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0; goto __pyx_L3; } /* "ga4py/gain/core.pyx":2535 * if self.func.nin == 1: * return self._unary_call(*args, **kwargs) * elif self.func.nin == 2: # <<<<<<<<<<<<<< * return self._binary_call(*args, **kwargs) * else: */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__nin); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_int_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2536 * return self._unary_call(*args, **kwargs) * elif self.func.nin == 2: * return self._binary_call(*args, **kwargs) # <<<<<<<<<<<<<< * else: * raise ValueError, "only unary and binary ufuncs supported" */ __Pyx_XDECREF(__pyx_r); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___binary_call); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2536; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = PySequence_Tuple(((PyObject *)__pyx_v_args)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2536; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); __pyx_t_2 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_2); __pyx_t_1 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2536; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":2538 * return self._binary_call(*args, **kwargs) * else: * raise ValueError, "only unary and binary ufuncs supported" # <<<<<<<<<<<<<< * * def _unary_call(self, input, out=None, *args, **kwargs): */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_62), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("ga4py.gain.core.ufunc.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_19_unary_call(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_5ufunc_19_unary_call = {__Pyx_NAMESTR("_unary_call"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_5ufunc_19_unary_call, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_19_unary_call(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_input = 0; PyObject *__pyx_v_out = 0; PyObject *__pyx_v_args = 0; PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_unary_call (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 3) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 3, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__input,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/core.pyx":2540 * raise ValueError, "only unary and binary ufuncs supported" * * def _unary_call(self, input, out=None, *args, **kwargs): # <<<<<<<<<<<<<< * input = asarray(input) * input_shape = get_shape(input) */ values[2] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__input)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("_unary_call", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2540; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 3) ? pos_args : 3; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "_unary_call") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2540; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { default: case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; case 1: case 0: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_input = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_unary_call", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2540; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ufunc._unary_call", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_5ufunc_18_unary_call(__pyx_self, __pyx_v_self, __pyx_v_input, __pyx_v_out, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_18_unary_call(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_input, PyObject *__pyx_v_out, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { PyObject *__pyx_v_input_shape = NULL; PyObject *__pyx_v_input_dtype = NULL; PyObject *__pyx_v_ignore = NULL; PyObject *__pyx_v_out_type = NULL; PyObject *__pyx_v_out_shape = NULL; PyObject *__pyx_v_npout = NULL; PyObject *__pyx_v_npin = NULL; PyObject *__pyx_v_release_in = NULL; PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; PyObject *__pyx_t_7 = NULL; PyObject *(*__pyx_t_8)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_unary_call", 0); __Pyx_TraceCall("_unary_call", __pyx_f[0], 2540); __Pyx_INCREF(__pyx_v_input); __Pyx_INCREF(__pyx_v_out); /* "ga4py/gain/core.pyx":2541 * * def _unary_call(self, input, out=None, *args, **kwargs): * input = asarray(input) # <<<<<<<<<<<<<< * input_shape = get_shape(input) * input_dtype = get_dtype(input) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2541; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2541; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_input); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_input); __Pyx_GIVEREF(__pyx_v_input); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2541; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_input, __pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2542 * def _unary_call(self, input, out=None, *args, **kwargs): * input = asarray(input) * input_shape = get_shape(input) # <<<<<<<<<<<<<< * input_dtype = get_dtype(input) * if not (is_distributed(input) or is_distributed(out)): */ __pyx_t_3 = __pyx_f_5ga4py_4gain_4core_get_shape(__pyx_v_input, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_v_input_shape = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2543 * input = asarray(input) * input_shape = get_shape(input) * input_dtype = get_dtype(input) # <<<<<<<<<<<<<< * if not (is_distributed(input) or is_distributed(out)): * # no ndarray instances used, pass through immediately to numpy */ __pyx_t_3 = __pyx_f_5ga4py_4gain_4core_get_dtype(__pyx_v_input, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2543; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_v_input_dtype = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2544 * input_shape = get_shape(input) * input_dtype = get_dtype(input) * if not (is_distributed(input) or is_distributed(out)): # <<<<<<<<<<<<<< * # no ndarray instances used, pass through immediately to numpy * return self.func(input, out, *args, **kwargs) */ __pyx_t_4 = (__pyx_f_5ga4py_4gain_4core_is_distributed(__pyx_v_input, 0) != 0); if (!__pyx_t_4) { __pyx_t_5 = (__pyx_f_5ga4py_4gain_4core_is_distributed(__pyx_v_out, 0) != 0); __pyx_t_6 = __pyx_t_5; } else { __pyx_t_6 = __pyx_t_4; } __pyx_t_4 = ((!__pyx_t_6) != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2546 * if not (is_distributed(input) or is_distributed(out)): * # no ndarray instances used, pass through immediately to numpy * return self.func(input, out, *args, **kwargs) # <<<<<<<<<<<<<< * if out is None: * # input must be an ndarray given previous conditionals */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_input); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_input); __Pyx_GIVEREF(__pyx_v_input); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __pyx_t_1 = PySequence_Tuple(((PyObject *)__pyx_v_args)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_7 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_7)); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":2547 * # no ndarray instances used, pass through immediately to numpy * return self.func(input, out, *args, **kwargs) * if out is None: # <<<<<<<<<<<<<< * # input must be an ndarray given previous conditionals * # TODO okay, is there something better than this? */ __pyx_t_4 = (__pyx_v_out == Py_None); __pyx_t_6 = (__pyx_t_4 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2550 * # input must be an ndarray given previous conditionals * # TODO okay, is there something better than this? * ignore = np.ones(1, dtype=input_dtype) # <<<<<<<<<<<<<< * out_type = self.func(ignore).dtype * out = ndarray(input_shape, out_type) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__ones); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_v_input_dtype) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_k_tuple_63), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_ignore = __pyx_t_7; __pyx_t_7 = 0; /* "ga4py/gain/core.pyx":2551 * # TODO okay, is there something better than this? * ignore = np.ones(1, dtype=input_dtype) * out_type = self.func(ignore).dtype # <<<<<<<<<<<<<< * out = ndarray(input_shape, out_type) * # sanity checks */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2551; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2551; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_ignore); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_ignore); __Pyx_GIVEREF(__pyx_v_ignore); __pyx_t_1 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2551; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2551; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_out_type = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2552 * ignore = np.ones(1, dtype=input_dtype) * out_type = self.func(ignore).dtype * out = ndarray(input_shape, out_type) # <<<<<<<<<<<<<< * # sanity checks * if not is_array(out): */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2552; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2552; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_input_shape); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_input_shape); __Pyx_GIVEREF(__pyx_v_input_shape); __Pyx_INCREF(__pyx_v_out_type); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_out_type); __Pyx_GIVEREF(__pyx_v_out_type); __pyx_t_7 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2552; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_out, __pyx_t_7); __pyx_t_7 = 0; goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/core.pyx":2554 * out = ndarray(input_shape, out_type) * # sanity checks * if not is_array(out): # <<<<<<<<<<<<<< * raise TypeError, "return arrays must be of ArrayType" * out_shape = get_shape(out) */ __pyx_t_6 = ((!(__pyx_f_5ga4py_4gain_4core_is_array(__pyx_v_out, 0) != 0)) != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2555 * # sanity checks * if not is_array(out): * raise TypeError, "return arrays must be of ArrayType" # <<<<<<<<<<<<<< * out_shape = get_shape(out) * if input_shape != out_shape: */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_64), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2555; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } __pyx_L5:; /* "ga4py/gain/core.pyx":2556 * if not is_array(out): * raise TypeError, "return arrays must be of ArrayType" * out_shape = get_shape(out) # <<<<<<<<<<<<<< * if input_shape != out_shape: * # broadcasting doesn't apply to unary operations */ __pyx_t_7 = __pyx_f_5ga4py_4gain_4core_get_shape(__pyx_v_out, 0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_v_out_shape = __pyx_t_7; __pyx_t_7 = 0; /* "ga4py/gain/core.pyx":2557 * raise TypeError, "return arrays must be of ArrayType" * out_shape = get_shape(out) * if input_shape != out_shape: # <<<<<<<<<<<<<< * # broadcasting doesn't apply to unary operations * raise ValueError, 'invalid return array shape' */ __pyx_t_7 = PyObject_RichCompare(__pyx_v_input_shape, __pyx_v_out_shape, Py_NE); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2559 * if input_shape != out_shape: * # broadcasting doesn't apply to unary operations * raise ValueError, 'invalid return array shape' # <<<<<<<<<<<<<< * # Now figure out what to do... * if isinstance(out, ndarray): */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_65), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2559; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; /* "ga4py/gain/core.pyx":2561 * raise ValueError, 'invalid return array shape' * # Now figure out what to do... * if isinstance(out, ndarray): # <<<<<<<<<<<<<< * sync() * # get out as an np.ndarray first */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2561; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyObject_IsInstance(__pyx_v_out, __pyx_t_7); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2561; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_4 = (__pyx_t_6 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2562 * # Now figure out what to do... * if isinstance(out, ndarray): * sync() # <<<<<<<<<<<<<< * # get out as an np.ndarray first * npout = out.access() */ __pyx_t_7 = __pyx_f_5ga4py_4gain_4core_sync(0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2562; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/core.pyx":2564 * sync() * # get out as an np.ndarray first * npout = out.access() # <<<<<<<<<<<<<< * if npout is not None: # this proc owns data * if input is out: */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__access); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2564; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2564; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_npout = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2565 * # get out as an np.ndarray first * npout = out.access() * if npout is not None: # this proc owns data # <<<<<<<<<<<<<< * if input is out: * npin,release_in = npout,False */ __pyx_t_4 = (__pyx_v_npout != Py_None); __pyx_t_6 = (__pyx_t_4 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2566 * npout = out.access() * if npout is not None: # this proc owns data * if input is out: # <<<<<<<<<<<<<< * npin,release_in = npout,False * else: */ __pyx_t_6 = (__pyx_v_input == __pyx_v_out); __pyx_t_4 = (__pyx_t_6 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2567 * if npout is not None: # this proc owns data * if input is out: * npin,release_in = npout,False # <<<<<<<<<<<<<< * else: * npin,release_in = _npin_piece_based_on_out(input,out) */ __pyx_t_1 = __pyx_v_npout; __Pyx_INCREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2567; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_v_npin = __pyx_t_1; __pyx_t_1 = 0; __pyx_v_release_in = __pyx_t_7; __pyx_t_7 = 0; goto __pyx_L9; } /*else*/ { /* "ga4py/gain/core.pyx":2569 * npin,release_in = npout,False * else: * npin,release_in = _npin_piece_based_on_out(input,out) # <<<<<<<<<<<<<< * self.func(npin, npout, *args, **kwargs) * if release_in: */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_66); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_input); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_input); __Pyx_GIVEREF(__pyx_v_input); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __pyx_t_2 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { PyObject* sequence = __pyx_t_2; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_1 = PyList_GET_ITEM(sequence, 0); __pyx_t_7 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_7); #else __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); #endif __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { Py_ssize_t index = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L10_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); index = 1; __pyx_t_7 = __pyx_t_8(__pyx_t_3); if (unlikely(!__pyx_t_7)) goto __pyx_L10_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_3), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L11_unpacking_done; __pyx_L10_unpacking_failed:; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L11_unpacking_done:; } __pyx_v_npin = __pyx_t_1; __pyx_t_1 = 0; __pyx_v_release_in = __pyx_t_7; __pyx_t_7 = 0; } __pyx_L9:; /* "ga4py/gain/core.pyx":2570 * else: * npin,release_in = _npin_piece_based_on_out(input,out) * self.func(npin, npout, *args, **kwargs) # <<<<<<<<<<<<<< * if release_in: * input.release() */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2570; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2570; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_npin); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_npin); __Pyx_GIVEREF(__pyx_v_npin); __Pyx_INCREF(__pyx_v_npout); PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_npout); __Pyx_GIVEREF(__pyx_v_npout); __pyx_t_1 = PySequence_Tuple(((PyObject *)__pyx_v_args)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2570; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_3 = PyNumber_Add(((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2570; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_1); __pyx_t_7 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2570; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/core.pyx":2571 * npin,release_in = _npin_piece_based_on_out(input,out) * self.func(npin, npout, *args, **kwargs) * if release_in: # <<<<<<<<<<<<<< * input.release() * out.release_update() */ __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_release_in); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2571; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2572 * self.func(npin, npout, *args, **kwargs) * if release_in: * input.release() # <<<<<<<<<<<<<< * out.release_update() * #sync() */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_input, __pyx_n_s__release); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L12; } __pyx_L12:; /* "ga4py/gain/core.pyx":2573 * if release_in: * input.release() * out.release_update() # <<<<<<<<<<<<<< * #sync() * elif isinstance(out, flatiter): */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__release_update); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2573; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2573; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L8; } __pyx_L8:; goto __pyx_L7; } /* "ga4py/gain/core.pyx":2575 * out.release_update() * #sync() * elif isinstance(out, flatiter): # <<<<<<<<<<<<<< * sync() * # first opt: input and out are same object */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__flatiter); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2575; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = PyObject_IsInstance(__pyx_v_out, __pyx_t_7); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2575; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_6 = (__pyx_t_4 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2576 * #sync() * elif isinstance(out, flatiter): * sync() # <<<<<<<<<<<<<< * # first opt: input and out are same object * # we call _unary_call over again with the bases */ __pyx_t_7 = __pyx_f_5ga4py_4gain_4core_sync(0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2576; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/core.pyx":2580 * # we call _unary_call over again with the bases * # NOT SURE THAT THIS IS ACTUALLY OPTIMAL -- NEED TO TEST * if input is out: # <<<<<<<<<<<<<< * self._unary_call(out.base, out.base, *args, **kwargs) * return out.copy() # differs from NumPy (should be view) */ __pyx_t_6 = (__pyx_v_input == __pyx_v_out); __pyx_t_4 = (__pyx_t_6 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2581 * # NOT SURE THAT THIS IS ACTUALLY OPTIMAL -- NEED TO TEST * if input is out: * self._unary_call(out.base, out.base, *args, **kwargs) # <<<<<<<<<<<<<< * return out.copy() # differs from NumPy (should be view) * else: */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___unary_call); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2581; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__base); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2581; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__base); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2581; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2581; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_args)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2581; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __pyx_t_1 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2581; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_3); __pyx_t_2 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2581; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2582 * if input is out: * self._unary_call(out.base, out.base, *args, **kwargs) * return out.copy() # differs from NumPy (should be view) # <<<<<<<<<<<<<< * else: * npout = out.access() */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__copy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2582; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2582; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; goto __pyx_L13; } /*else*/ { /* "ga4py/gain/core.pyx":2584 * return out.copy() # differs from NumPy (should be view) * else: * npout = out.access() # <<<<<<<<<<<<<< * if npout is not None: # this proc 'owns' data * lo,hi = out.distribution() */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__access); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2584; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2584; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_npout = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2585 * else: * npout = out.access() * if npout is not None: # this proc 'owns' data # <<<<<<<<<<<<<< * lo,hi = out.distribution() * result = out.global_slice.get_key(lo,hi) */ __pyx_t_4 = (__pyx_v_npout != Py_None); __pyx_t_6 = (__pyx_t_4 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2586 * npout = out.access() * if npout is not None: # this proc 'owns' data * lo,hi = out.distribution() # <<<<<<<<<<<<<< * result = out.global_slice.get_key(lo,hi) * if is_distributed(input): */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__distribution); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2586; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2586; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2586; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_1 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_1); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2586; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2586; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2586; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L15_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L15_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2586; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L16_unpacking_done; __pyx_L15_unpacking_failed:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2586; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L16_unpacking_done:; } __pyx_v_lo = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_hi = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2587 * if npout is not None: # this proc 'owns' data * lo,hi = out.distribution() * result = out.global_slice.get_key(lo,hi) # <<<<<<<<<<<<<< * if is_distributed(input): * npin = input.get(result) */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2587; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__get_key); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2587; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2587; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2587; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_result = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2588 * lo,hi = out.distribution() * result = out.global_slice.get_key(lo,hi) * if is_distributed(input): # <<<<<<<<<<<<<< * npin = input.get(result) * else: */ __pyx_t_6 = (__pyx_f_5ga4py_4gain_4core_is_distributed(__pyx_v_input, 0) != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2589 * result = out.global_slice.get_key(lo,hi) * if is_distributed(input): * npin = input.get(result) # <<<<<<<<<<<<<< * else: * npin = input[result] */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input, __pyx_n_s__get); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2589; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2589; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2589; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_npin = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L17; } /*else*/ { /* "ga4py/gain/core.pyx":2591 * npin = input.get(result) * else: * npin = input[result] # <<<<<<<<<<<<<< * self.func(npin, npout, *args, **kwargs) * out.release_update() */ __pyx_t_1 = PyObject_GetItem(__pyx_v_input, __pyx_v_result); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2591; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_npin = __pyx_t_1; __pyx_t_1 = 0; } __pyx_L17:; /* "ga4py/gain/core.pyx":2592 * else: * npin = input[result] * self.func(npin, npout, *args, **kwargs) # <<<<<<<<<<<<<< * out.release_update() * #sync() */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2592; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2592; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_npin); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_npin); __Pyx_GIVEREF(__pyx_v_npin); __Pyx_INCREF(__pyx_v_npout); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_npout); __Pyx_GIVEREF(__pyx_v_npout); __pyx_t_2 = PySequence_Tuple(((PyObject *)__pyx_v_args)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2592; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __pyx_t_7 = PyNumber_Add(((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2592; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_7)); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2592; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2593 * npin = input[result] * self.func(npin, npout, *args, **kwargs) * out.release_update() # <<<<<<<<<<<<<< * #sync() * else: */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__release_update); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2593; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2593; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L14; } __pyx_L14:; } __pyx_L13:; goto __pyx_L7; } /*else*/ { /* "ga4py/gain/core.pyx":2596 * #sync() * else: * sync() # <<<<<<<<<<<<<< * # out is not distributed * npin = input */ __pyx_t_2 = __pyx_f_5ga4py_4gain_4core_sync(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2598 * sync() * # out is not distributed * npin = input # <<<<<<<<<<<<<< * if is_distributed(input): * npin = input.allget() */ __Pyx_INCREF(__pyx_v_input); __pyx_v_npin = __pyx_v_input; /* "ga4py/gain/core.pyx":2599 * # out is not distributed * npin = input * if is_distributed(input): # <<<<<<<<<<<<<< * npin = input.allget() * self.func(npin, out, *args, **kwargs) */ __pyx_t_6 = (__pyx_f_5ga4py_4gain_4core_is_distributed(__pyx_v_input, 0) != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2600 * npin = input * if is_distributed(input): * npin = input.allget() # <<<<<<<<<<<<<< * self.func(npin, out, *args, **kwargs) * #sync() # I don't think we need this one */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input, __pyx_n_s__allget); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2600; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2600; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_npin, __pyx_t_3); __pyx_t_3 = 0; goto __pyx_L18; } __pyx_L18:; /* "ga4py/gain/core.pyx":2601 * if is_distributed(input): * npin = input.allget() * self.func(npin, out, *args, **kwargs) # <<<<<<<<<<<<<< * #sync() # I don't think we need this one * return out */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2601; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2601; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_npin); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_npin); __Pyx_GIVEREF(__pyx_v_npin); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __pyx_t_7 = PySequence_Tuple(((PyObject *)__pyx_v_args)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2601; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_7)); __pyx_t_1 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2601; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __pyx_t_7 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_7); __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2601; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __pyx_L7:; /* "ga4py/gain/core.pyx":2603 * self.func(npin, out, *args, **kwargs) * #sync() # I don't think we need this one * return out # <<<<<<<<<<<<<< * * def _binary_call(self, first, second, out=None, *args, **kwargs): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_out); __pyx_r = __pyx_v_out; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("ga4py.gain.core.ufunc._unary_call", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_input_shape); __Pyx_XDECREF(__pyx_v_input_dtype); __Pyx_XDECREF(__pyx_v_ignore); __Pyx_XDECREF(__pyx_v_out_type); __Pyx_XDECREF(__pyx_v_out_shape); __Pyx_XDECREF(__pyx_v_npout); __Pyx_XDECREF(__pyx_v_npin); __Pyx_XDECREF(__pyx_v_release_in); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XDECREF(__pyx_v_result); __Pyx_XDECREF(__pyx_v_input); __Pyx_XDECREF(__pyx_v_out); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_21_binary_call(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_5ufunc_21_binary_call = {__Pyx_NAMESTR("_binary_call"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_5ufunc_21_binary_call, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_21_binary_call(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_first = 0; PyObject *__pyx_v_second = 0; PyObject *__pyx_v_out = 0; PyObject *__pyx_v_args = 0; PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_binary_call (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 4) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 4, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__first,&__pyx_n_s__second,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/core.pyx":2605 * return out * * def _binary_call(self, first, second, out=None, *args, **kwargs): # <<<<<<<<<<<<<< * first_isscalar = np.isscalar(first) * second_isscalar = np.isscalar(second) */ values[3] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__first)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("_binary_call", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2605; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__second)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("_binary_call", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2605; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 4) ? pos_args : 4; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "_binary_call") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2605; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { default: case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; case 2: case 1: case 0: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_first = values[1]; __pyx_v_second = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_binary_call", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2605; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ufunc._binary_call", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_5ufunc_20_binary_call(__pyx_self, __pyx_v_self, __pyx_v_first, __pyx_v_second, __pyx_v_out, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_20_binary_call(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_first, PyObject *__pyx_v_second, PyObject *__pyx_v_out, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { PyObject *__pyx_v_first_isscalar = NULL; PyObject *__pyx_v_second_isscalar = NULL; PyObject *__pyx_v_first_dtype = NULL; PyObject *__pyx_v_second_dtype = NULL; PyObject *__pyx_v_first_shape = NULL; PyObject *__pyx_v_second_shape = NULL; PyObject *__pyx_v_dtype = NULL; PyObject *__pyx_v_shape = NULL; PyObject *__pyx_v_npout = NULL; PyObject *__pyx_v_npfirst = NULL; PyObject *__pyx_v_release_first = NULL; PyObject *__pyx_v_npsecond = NULL; PyObject *__pyx_v_release_second = NULL; PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_v_result = NULL; PyObject *__pyx_v_ndfirst = NULL; PyObject *__pyx_v_ndsecond = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *(*__pyx_t_9)(PyObject *); PyObject *__pyx_t_10 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_binary_call", 0); __Pyx_TraceCall("_binary_call", __pyx_f[0], 2605); __Pyx_INCREF(__pyx_v_first); __Pyx_INCREF(__pyx_v_second); __Pyx_INCREF(__pyx_v_out); /* "ga4py/gain/core.pyx":2606 * * def _binary_call(self, first, second, out=None, *args, **kwargs): * first_isscalar = np.isscalar(first) # <<<<<<<<<<<<<< * second_isscalar = np.isscalar(second) * # just in case */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2606; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__isscalar); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2606; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2606; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_first); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_first); __Pyx_GIVEREF(__pyx_v_first); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2606; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_v_first_isscalar = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2607 * def _binary_call(self, first, second, out=None, *args, **kwargs): * first_isscalar = np.isscalar(first) * second_isscalar = np.isscalar(second) # <<<<<<<<<<<<<< * # just in case * first = asarray(first) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2607; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__isscalar); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2607; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2607; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_second); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_second); __Pyx_GIVEREF(__pyx_v_second); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2607; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_second_isscalar = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2609 * second_isscalar = np.isscalar(second) * # just in case * first = asarray(first) # <<<<<<<<<<<<<< * second = asarray(second) * if not (is_distributed(first) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__asarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2609; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2609; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_first); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_first); __Pyx_GIVEREF(__pyx_v_first); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2609; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_first, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2610 * # just in case * first = asarray(first) * second = asarray(second) # <<<<<<<<<<<<<< * if not (is_distributed(first) * or is_distributed(second) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2610; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2610; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_second); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_second); __Pyx_GIVEREF(__pyx_v_second); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2610; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_second, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2611 * first = asarray(first) * second = asarray(second) * if not (is_distributed(first) # <<<<<<<<<<<<<< * or is_distributed(second) * or is_distributed(out)): */ __pyx_t_4 = (__pyx_f_5ga4py_4gain_4core_is_distributed(__pyx_v_first, 0) != 0); if (!__pyx_t_4) { /* "ga4py/gain/core.pyx":2612 * second = asarray(second) * if not (is_distributed(first) * or is_distributed(second) # <<<<<<<<<<<<<< * or is_distributed(out)): * # no ndarray instances used, pass through immediately to numpy */ __pyx_t_5 = (__pyx_f_5ga4py_4gain_4core_is_distributed(__pyx_v_second, 0) != 0); if (!__pyx_t_5) { /* "ga4py/gain/core.pyx":2613 * if not (is_distributed(first) * or is_distributed(second) * or is_distributed(out)): # <<<<<<<<<<<<<< * # no ndarray instances used, pass through immediately to numpy * return self.func(first, second, out, *args, **kwargs) */ __pyx_t_6 = (__pyx_f_5ga4py_4gain_4core_is_distributed(__pyx_v_out, 0) != 0); __pyx_t_7 = __pyx_t_6; } else { __pyx_t_7 = __pyx_t_5; } __pyx_t_5 = __pyx_t_7; } else { __pyx_t_5 = __pyx_t_4; } __pyx_t_4 = ((!__pyx_t_5) != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2615 * or is_distributed(out)): * # no ndarray instances used, pass through immediately to numpy * return self.func(first, second, out, *args, **kwargs) # <<<<<<<<<<<<<< * first_dtype = get_dtype(first) * second_dtype = get_dtype(second) */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_first); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_first); __Pyx_GIVEREF(__pyx_v_first); __Pyx_INCREF(__pyx_v_second); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_second); __Pyx_GIVEREF(__pyx_v_second); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __pyx_t_1 = PySequence_Tuple(((PyObject *)__pyx_v_args)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_8 = PyNumber_Add(((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_8)); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":2616 * # no ndarray instances used, pass through immediately to numpy * return self.func(first, second, out, *args, **kwargs) * first_dtype = get_dtype(first) # <<<<<<<<<<<<<< * second_dtype = get_dtype(second) * first_shape = get_shape(first) */ __pyx_t_3 = __pyx_f_5ga4py_4gain_4core_get_dtype(__pyx_v_first, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_v_first_dtype = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2617 * return self.func(first, second, out, *args, **kwargs) * first_dtype = get_dtype(first) * second_dtype = get_dtype(second) # <<<<<<<<<<<<<< * first_shape = get_shape(first) * second_shape = get_shape(second) */ __pyx_t_3 = __pyx_f_5ga4py_4gain_4core_get_dtype(__pyx_v_second, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_v_second_dtype = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2618 * first_dtype = get_dtype(first) * second_dtype = get_dtype(second) * first_shape = get_shape(first) # <<<<<<<<<<<<<< * second_shape = get_shape(second) * if out is None: */ __pyx_t_3 = __pyx_f_5ga4py_4gain_4core_get_shape(__pyx_v_first, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_v_first_shape = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2619 * second_dtype = get_dtype(second) * first_shape = get_shape(first) * second_shape = get_shape(second) # <<<<<<<<<<<<<< * if out is None: * # first and/or second must be ndarrays given previous conditionals */ __pyx_t_3 = __pyx_f_5ga4py_4gain_4core_get_shape(__pyx_v_second, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2619; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_v_second_shape = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2620 * first_shape = get_shape(first) * second_shape = get_shape(second) * if out is None: # <<<<<<<<<<<<<< * # first and/or second must be ndarrays given previous conditionals * # TODO okay, is there something better than this? */ __pyx_t_4 = (__pyx_v_out == Py_None); __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":2623 * # first and/or second must be ndarrays given previous conditionals * # TODO okay, is there something better than this? * dtype = None # <<<<<<<<<<<<<< * if first_isscalar: * if second_isscalar: */ __Pyx_INCREF(Py_None); __pyx_v_dtype = Py_None; /* "ga4py/gain/core.pyx":2624 * # TODO okay, is there something better than this? * dtype = None * if first_isscalar: # <<<<<<<<<<<<<< * if second_isscalar: * dtype = np.find_common_type([],[first_dtype,second_dtype]) */ __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_first_isscalar); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2624; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_5) { /* "ga4py/gain/core.pyx":2625 * dtype = None * if first_isscalar: * if second_isscalar: # <<<<<<<<<<<<<< * dtype = np.find_common_type([],[first_dtype,second_dtype]) * else: */ __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_second_isscalar); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_5) { /* "ga4py/gain/core.pyx":2626 * if first_isscalar: * if second_isscalar: * dtype = np.find_common_type([],[first_dtype,second_dtype]) # <<<<<<<<<<<<<< * else: * dtype = np.find_common_type([second_dtype],[first_dtype]) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__find_common_type); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_8 = PyList_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_v_first_dtype); PyList_SET_ITEM(__pyx_t_8, 0, __pyx_v_first_dtype); __Pyx_GIVEREF(__pyx_v_first_dtype); __Pyx_INCREF(__pyx_v_second_dtype); PyList_SET_ITEM(__pyx_t_8, 1, __pyx_v_second_dtype); __Pyx_GIVEREF(__pyx_v_second_dtype); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3)); __Pyx_GIVEREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_8)); __Pyx_GIVEREF(((PyObject *)__pyx_t_8)); __pyx_t_3 = 0; __pyx_t_8 = 0; __pyx_t_8 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_dtype, __pyx_t_8); __pyx_t_8 = 0; goto __pyx_L6; } /*else*/ { /* "ga4py/gain/core.pyx":2628 * dtype = np.find_common_type([],[first_dtype,second_dtype]) * else: * dtype = np.find_common_type([second_dtype],[first_dtype]) # <<<<<<<<<<<<<< * else: * if second_isscalar: */ __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__find_common_type); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_v_second_dtype); PyList_SET_ITEM(__pyx_t_8, 0, __pyx_v_second_dtype); __Pyx_GIVEREF(__pyx_v_second_dtype); __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_first_dtype); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_v_first_dtype); __Pyx_GIVEREF(__pyx_v_first_dtype); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_8)); __Pyx_GIVEREF(((PyObject *)__pyx_t_8)); PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_t_1)); __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); __pyx_t_8 = 0; __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_dtype, __pyx_t_1); __pyx_t_1 = 0; } __pyx_L6:; goto __pyx_L5; } /*else*/ { /* "ga4py/gain/core.pyx":2630 * dtype = np.find_common_type([second_dtype],[first_dtype]) * else: * if second_isscalar: # <<<<<<<<<<<<<< * dtype = np.find_common_type([first_dtype],[second_dtype]) * else: */ __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_second_isscalar); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_5) { /* "ga4py/gain/core.pyx":2631 * else: * if second_isscalar: * dtype = np.find_common_type([first_dtype],[second_dtype]) # <<<<<<<<<<<<<< * else: * dtype = np.find_common_type([first_dtype,second_dtype],[]) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2631; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__find_common_type); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2631; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2631; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_first_dtype); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_v_first_dtype); __Pyx_GIVEREF(__pyx_v_first_dtype); __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2631; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_second_dtype); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_v_second_dtype); __Pyx_GIVEREF(__pyx_v_second_dtype); __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2631; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_t_1)); __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); PyTuple_SET_ITEM(__pyx_t_8, 1, ((PyObject *)__pyx_t_2)); __Pyx_GIVEREF(((PyObject *)__pyx_t_2)); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2631; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __Pyx_DECREF_SET(__pyx_v_dtype, __pyx_t_2); __pyx_t_2 = 0; goto __pyx_L7; } /*else*/ { /* "ga4py/gain/core.pyx":2633 * dtype = np.find_common_type([first_dtype],[second_dtype]) * else: * dtype = np.find_common_type([first_dtype,second_dtype],[]) # <<<<<<<<<<<<<< * shape = util.broadcast_shape(first_shape, second_shape) * out = ndarray(shape, dtype) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2633; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__find_common_type); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2633; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2633; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_first_dtype); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_v_first_dtype); __Pyx_GIVEREF(__pyx_v_first_dtype); __Pyx_INCREF(__pyx_v_second_dtype); PyList_SET_ITEM(__pyx_t_2, 1, __pyx_v_second_dtype); __Pyx_GIVEREF(__pyx_v_second_dtype); __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2633; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2633; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_t_2)); __Pyx_GIVEREF(((PyObject *)__pyx_t_2)); PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_t_3)); __Pyx_GIVEREF(((PyObject *)__pyx_t_3)); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2633; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_dtype, __pyx_t_3); __pyx_t_3 = 0; } __pyx_L7:; } __pyx_L5:; /* "ga4py/gain/core.pyx":2634 * else: * dtype = np.find_common_type([first_dtype,second_dtype],[]) * shape = util.broadcast_shape(first_shape, second_shape) # <<<<<<<<<<<<<< * out = ndarray(shape, dtype) * # sanity checks */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2634; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__broadcast_shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2634; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2634; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_first_shape); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_first_shape); __Pyx_GIVEREF(__pyx_v_first_shape); __Pyx_INCREF(__pyx_v_second_shape); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_second_shape); __Pyx_GIVEREF(__pyx_v_second_shape); __pyx_t_8 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2634; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_shape = __pyx_t_8; __pyx_t_8 = 0; /* "ga4py/gain/core.pyx":2635 * dtype = np.find_common_type([first_dtype,second_dtype],[]) * shape = util.broadcast_shape(first_shape, second_shape) * out = ndarray(shape, dtype) # <<<<<<<<<<<<<< * # sanity checks * if not is_array(out): */ __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_1 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_out, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/core.pyx":2637 * out = ndarray(shape, dtype) * # sanity checks * if not is_array(out): # <<<<<<<<<<<<<< * raise TypeError, "return arrays must be of ArrayType" * # Now figure out what to do... */ __pyx_t_5 = ((!(__pyx_f_5ga4py_4gain_4core_is_array(__pyx_v_out, 0) != 0)) != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":2638 * # sanity checks * if not is_array(out): * raise TypeError, "return arrays must be of ArrayType" # <<<<<<<<<<<<<< * # Now figure out what to do... * if isinstance(out, ndarray): */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_64), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; /* "ga4py/gain/core.pyx":2640 * raise TypeError, "return arrays must be of ArrayType" * # Now figure out what to do... * if isinstance(out, ndarray): # <<<<<<<<<<<<<< * sync() * # get out as an np.ndarray first */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2640; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyObject_IsInstance(__pyx_v_out, __pyx_t_1); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2640; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2641 * # Now figure out what to do... * if isinstance(out, ndarray): * sync() # <<<<<<<<<<<<<< * # get out as an np.ndarray first * npout = out.access() */ __pyx_t_1 = __pyx_f_5ga4py_4gain_4core_sync(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2641; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2643 * sync() * # get out as an np.ndarray first * npout = out.access() # <<<<<<<<<<<<<< * if npout is not None: # this proc owns data * # get matching and compatible portions of input arrays */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__access); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2643; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2643; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_npout = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2644 * # get out as an np.ndarray first * npout = out.access() * if npout is not None: # this proc owns data # <<<<<<<<<<<<<< * # get matching and compatible portions of input arrays * # broadcasting rules (may) apply */ __pyx_t_4 = (__pyx_v_npout != Py_None); __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":2647 * # get matching and compatible portions of input arrays * # broadcasting rules (may) apply * if first is out: # <<<<<<<<<<<<<< * npfirst,release_first = npout,False * else: */ __pyx_t_5 = (__pyx_v_first == __pyx_v_out); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2648 * # broadcasting rules (may) apply * if first is out: * npfirst,release_first = npout,False # <<<<<<<<<<<<<< * else: * npfirst,release_first = _npin_piece_based_on_out( */ __pyx_t_3 = __pyx_v_npout; __Pyx_INCREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2648; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_npfirst = __pyx_t_3; __pyx_t_3 = 0; __pyx_v_release_first = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L11; } /*else*/ { /* "ga4py/gain/core.pyx":2650 * npfirst,release_first = npout,False * else: * npfirst,release_first = _npin_piece_based_on_out( # <<<<<<<<<<<<<< * first,out,first_shape) * if second is first: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_66); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); /* "ga4py/gain/core.pyx":2651 * else: * npfirst,release_first = _npin_piece_based_on_out( * first,out,first_shape) # <<<<<<<<<<<<<< * if second is first: * # zeroth opt: first and second are same object, so do the */ __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_first); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_first); __Pyx_GIVEREF(__pyx_v_first); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __Pyx_INCREF(__pyx_v_first_shape); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_first_shape); __Pyx_GIVEREF(__pyx_v_first_shape); __pyx_t_8 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { PyObject* sequence = __pyx_t_8; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_3 = PyList_GET_ITEM(sequence, 0); __pyx_t_1 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx_t_1); #else __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); #endif __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } else { Py_ssize_t index = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext; index = 0; __pyx_t_3 = __pyx_t_9(__pyx_t_2); if (unlikely(!__pyx_t_3)) goto __pyx_L12_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); index = 1; __pyx_t_1 = __pyx_t_9(__pyx_t_2); if (unlikely(!__pyx_t_1)) goto __pyx_L12_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_2), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = NULL; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L13_unpacking_done; __pyx_L12_unpacking_failed:; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_9 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L13_unpacking_done:; } /* "ga4py/gain/core.pyx":2650 * npfirst,release_first = npout,False * else: * npfirst,release_first = _npin_piece_based_on_out( # <<<<<<<<<<<<<< * first,out,first_shape) * if second is first: */ __pyx_v_npfirst = __pyx_t_3; __pyx_t_3 = 0; __pyx_v_release_first = __pyx_t_1; __pyx_t_1 = 0; } __pyx_L11:; /* "ga4py/gain/core.pyx":2652 * npfirst,release_first = _npin_piece_based_on_out( * first,out,first_shape) * if second is first: # <<<<<<<<<<<<<< * # zeroth opt: first and second are same object, so do the * # same thing for second that we did for first */ __pyx_t_4 = (__pyx_v_second == __pyx_v_first); __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":2655 * # zeroth opt: first and second are same object, so do the * # same thing for second that we did for first * npsecond,release_second = npfirst,False # <<<<<<<<<<<<<< * elif second is out: * npsecond,release_second = npout,False */ __pyx_t_8 = __pyx_v_npfirst; __Pyx_INCREF(__pyx_t_8); __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_npsecond = __pyx_t_8; __pyx_t_8 = 0; __pyx_v_release_second = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L14; } /* "ga4py/gain/core.pyx":2656 * # same thing for second that we did for first * npsecond,release_second = npfirst,False * elif second is out: # <<<<<<<<<<<<<< * npsecond,release_second = npout,False * else: */ __pyx_t_5 = (__pyx_v_second == __pyx_v_out); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2657 * npsecond,release_second = npfirst,False * elif second is out: * npsecond,release_second = npout,False # <<<<<<<<<<<<<< * else: * npsecond,release_second = _npin_piece_based_on_out( */ __pyx_t_1 = __pyx_v_npout; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2657; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_v_npsecond = __pyx_t_1; __pyx_t_1 = 0; __pyx_v_release_second = __pyx_t_8; __pyx_t_8 = 0; goto __pyx_L14; } /*else*/ { /* "ga4py/gain/core.pyx":2659 * npsecond,release_second = npout,False * else: * npsecond,release_second = _npin_piece_based_on_out( # <<<<<<<<<<<<<< * second,out,second_shape) * self.func(npfirst, npsecond, npout, *args, **kwargs) */ __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_66); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); /* "ga4py/gain/core.pyx":2660 * else: * npsecond,release_second = _npin_piece_based_on_out( * second,out,second_shape) # <<<<<<<<<<<<<< * self.func(npfirst, npsecond, npout, *args, **kwargs) * if release_first: */ __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_second); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_second); __Pyx_GIVEREF(__pyx_v_second); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __Pyx_INCREF(__pyx_v_second_shape); PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_second_shape); __Pyx_GIVEREF(__pyx_v_second_shape); __pyx_t_3 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_1 = PyList_GET_ITEM(sequence, 0); __pyx_t_8 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_8); #else __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext; index = 0; __pyx_t_1 = __pyx_t_9(__pyx_t_2); if (unlikely(!__pyx_t_1)) goto __pyx_L15_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); index = 1; __pyx_t_8 = __pyx_t_9(__pyx_t_2); if (unlikely(!__pyx_t_8)) goto __pyx_L15_unpacking_failed; __Pyx_GOTREF(__pyx_t_8); if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_2), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = NULL; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L16_unpacking_done; __pyx_L15_unpacking_failed:; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_9 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L16_unpacking_done:; } /* "ga4py/gain/core.pyx":2659 * npsecond,release_second = npout,False * else: * npsecond,release_second = _npin_piece_based_on_out( # <<<<<<<<<<<<<< * second,out,second_shape) * self.func(npfirst, npsecond, npout, *args, **kwargs) */ __pyx_v_npsecond = __pyx_t_1; __pyx_t_1 = 0; __pyx_v_release_second = __pyx_t_8; __pyx_t_8 = 0; } __pyx_L14:; /* "ga4py/gain/core.pyx":2661 * npsecond,release_second = _npin_piece_based_on_out( * second,out,second_shape) * self.func(npfirst, npsecond, npout, *args, **kwargs) # <<<<<<<<<<<<<< * if release_first: * first.release() */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2661; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2661; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_v_npfirst); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_npfirst); __Pyx_GIVEREF(__pyx_v_npfirst); __Pyx_INCREF(__pyx_v_npsecond); PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_npsecond); __Pyx_GIVEREF(__pyx_v_npsecond); __Pyx_INCREF(__pyx_v_npout); PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_npout); __Pyx_GIVEREF(__pyx_v_npout); __pyx_t_1 = PySequence_Tuple(((PyObject *)__pyx_v_args)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2661; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_2 = PyNumber_Add(((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2661; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2661; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; /* "ga4py/gain/core.pyx":2662 * second,out,second_shape) * self.func(npfirst, npsecond, npout, *args, **kwargs) * if release_first: # <<<<<<<<<<<<<< * first.release() * if release_second: */ __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_release_first); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2662; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2663 * self.func(npfirst, npsecond, npout, *args, **kwargs) * if release_first: * first.release() # <<<<<<<<<<<<<< * if release_second: * second.release() */ __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_first, __pyx_n_s__release); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2663; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2663; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L17; } __pyx_L17:; /* "ga4py/gain/core.pyx":2664 * if release_first: * first.release() * if release_second: # <<<<<<<<<<<<<< * second.release() * out.release_update() */ __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_release_second); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2664; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2665 * first.release() * if release_second: * second.release() # <<<<<<<<<<<<<< * out.release_update() * #sync() */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_second, __pyx_n_s__release); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2665; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2665; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L18; } __pyx_L18:; /* "ga4py/gain/core.pyx":2666 * if release_second: * second.release() * out.release_update() # <<<<<<<<<<<<<< * #sync() * elif isinstance(out, flatiter): */ __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__release_update); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2666; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2666; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L10; } __pyx_L10:; goto __pyx_L9; } /* "ga4py/gain/core.pyx":2668 * out.release_update() * #sync() * elif isinstance(out, flatiter): # <<<<<<<<<<<<<< * sync() * # first op: first and second and out are same object */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__flatiter); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyObject_IsInstance(__pyx_v_out, __pyx_t_1); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":2669 * #sync() * elif isinstance(out, flatiter): * sync() # <<<<<<<<<<<<<< * # first op: first and second and out are same object * if first is second is out: */ __pyx_t_1 = __pyx_f_5ga4py_4gain_4core_sync(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2669; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2671 * sync() * # first op: first and second and out are same object * if first is second is out: # <<<<<<<<<<<<<< * self._binary_call(out.base,out.base,out.base,*args,**kwargs) * return out.copy() */ __pyx_t_5 = (__pyx_v_first == __pyx_v_second); if (__pyx_t_5) { __pyx_t_5 = (__pyx_v_second == __pyx_v_out); } __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2672 * # first op: first and second and out are same object * if first is second is out: * self._binary_call(out.base,out.base,out.base,*args,**kwargs) # <<<<<<<<<<<<<< * return out.copy() * else: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___binary_call); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2672; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__base); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2672; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__base); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2672; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__base); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2672; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2672; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_8 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PySequence_Tuple(((PyObject *)__pyx_v_args)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2672; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __pyx_t_2 = PyNumber_Add(((PyObject *)__pyx_t_10), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2672; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_3); __pyx_t_10 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2672; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/gain/core.pyx":2673 * if first is second is out: * self._binary_call(out.base,out.base,out.base,*args,**kwargs) * return out.copy() # <<<<<<<<<<<<<< * else: * npout = out.access() */ __Pyx_XDECREF(__pyx_r); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__copy); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_3 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; goto __pyx_L19; } /*else*/ { /* "ga4py/gain/core.pyx":2675 * return out.copy() * else: * npout = out.access() # <<<<<<<<<<<<<< * if npout is not None: # this proc 'owns' data * lo,hi = out.distribution() */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__access); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2675; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_10 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2675; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_npout = __pyx_t_10; __pyx_t_10 = 0; /* "ga4py/gain/core.pyx":2676 * else: * npout = out.access() * if npout is not None: # this proc 'owns' data # <<<<<<<<<<<<<< * lo,hi = out.distribution() * result = out.global_slice.get_key(lo,hi) */ __pyx_t_4 = (__pyx_v_npout != Py_None); __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":2677 * npout = out.access() * if npout is not None: # this proc 'owns' data * lo,hi = out.distribution() # <<<<<<<<<<<<<< * result = out.global_slice.get_key(lo,hi) * if is_distributed(first): */ __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__distribution); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2677; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_3 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2677; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2677; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_10 = PyList_GET_ITEM(sequence, 0); __pyx_t_2 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx_t_2); #else __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2677; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2677; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2677; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext; index = 0; __pyx_t_10 = __pyx_t_9(__pyx_t_1); if (unlikely(!__pyx_t_10)) goto __pyx_L21_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); index = 1; __pyx_t_2 = __pyx_t_9(__pyx_t_1); if (unlikely(!__pyx_t_2)) goto __pyx_L21_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_1), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2677; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = NULL; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L22_unpacking_done; __pyx_L21_unpacking_failed:; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_9 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2677; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L22_unpacking_done:; } __pyx_v_lo = __pyx_t_10; __pyx_t_10 = 0; __pyx_v_hi = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2678 * if npout is not None: # this proc 'owns' data * lo,hi = out.distribution() * result = out.global_slice.get_key(lo,hi) # <<<<<<<<<<<<<< * if is_distributed(first): * npfirst = first.get(result) */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2678; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__get_key); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2678; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2678; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_10 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2678; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_result = __pyx_t_10; __pyx_t_10 = 0; /* "ga4py/gain/core.pyx":2679 * lo,hi = out.distribution() * result = out.global_slice.get_key(lo,hi) * if is_distributed(first): # <<<<<<<<<<<<<< * npfirst = first.get(result) * else: */ __pyx_t_5 = (__pyx_f_5ga4py_4gain_4core_is_distributed(__pyx_v_first, 0) != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":2680 * result = out.global_slice.get_key(lo,hi) * if is_distributed(first): * npfirst = first.get(result) # <<<<<<<<<<<<<< * else: * npfirst = first[result] */ __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_first, __pyx_n_s__get); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2680; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2680; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_2 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2680; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_npfirst = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L23; } /*else*/ { /* "ga4py/gain/core.pyx":2682 * npfirst = first.get(result) * else: * npfirst = first[result] # <<<<<<<<<<<<<< * if second is first: * npsecond = npfirst */ __pyx_t_2 = PyObject_GetItem(__pyx_v_first, __pyx_v_result); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2682; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_npfirst = __pyx_t_2; __pyx_t_2 = 0; } __pyx_L23:; /* "ga4py/gain/core.pyx":2683 * else: * npfirst = first[result] * if second is first: # <<<<<<<<<<<<<< * npsecond = npfirst * elif is_distributed(second): */ __pyx_t_5 = (__pyx_v_second == __pyx_v_first); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2684 * npfirst = first[result] * if second is first: * npsecond = npfirst # <<<<<<<<<<<<<< * elif is_distributed(second): * npsecond = second.get(result) */ __Pyx_INCREF(__pyx_v_npfirst); __pyx_v_npsecond = __pyx_v_npfirst; goto __pyx_L24; } /* "ga4py/gain/core.pyx":2685 * if second is first: * npsecond = npfirst * elif is_distributed(second): # <<<<<<<<<<<<<< * npsecond = second.get(result) * else: */ __pyx_t_4 = (__pyx_f_5ga4py_4gain_4core_is_distributed(__pyx_v_second, 0) != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2686 * npsecond = npfirst * elif is_distributed(second): * npsecond = second.get(result) # <<<<<<<<<<<<<< * else: * npsecond = second[result] */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_second, __pyx_n_s__get); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2686; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2686; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_10 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2686; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_npsecond = __pyx_t_10; __pyx_t_10 = 0; goto __pyx_L24; } /*else*/ { /* "ga4py/gain/core.pyx":2688 * npsecond = second.get(result) * else: * npsecond = second[result] # <<<<<<<<<<<<<< * self.func(npfirst, npsecond, npout, *args, **kwargs) * out.release_update() */ __pyx_t_10 = PyObject_GetItem(__pyx_v_second, __pyx_v_result); if (!__pyx_t_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2688; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_v_npsecond = __pyx_t_10; __pyx_t_10 = 0; } __pyx_L24:; /* "ga4py/gain/core.pyx":2689 * else: * npsecond = second[result] * self.func(npfirst, npsecond, npout, *args, **kwargs) # <<<<<<<<<<<<<< * out.release_update() * #sync() */ __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2689; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2689; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_npfirst); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_npfirst); __Pyx_GIVEREF(__pyx_v_npfirst); __Pyx_INCREF(__pyx_v_npsecond); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_npsecond); __Pyx_GIVEREF(__pyx_v_npsecond); __Pyx_INCREF(__pyx_v_npout); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_npout); __Pyx_GIVEREF(__pyx_v_npout); __pyx_t_2 = PySequence_Tuple(((PyObject *)__pyx_v_args)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2689; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __pyx_t_1 = PyNumber_Add(((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2689; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2689; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2690 * npsecond = second[result] * self.func(npfirst, npsecond, npout, *args, **kwargs) * out.release_update() # <<<<<<<<<<<<<< * #sync() * else: */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__release_update); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2690; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2690; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L20; } __pyx_L20:; } __pyx_L19:; goto __pyx_L9; } /*else*/ { /* "ga4py/gain/core.pyx":2693 * #sync() * else: * sync() # <<<<<<<<<<<<<< * # out is not distributed * ndfirst = first */ __pyx_t_2 = __pyx_f_5ga4py_4gain_4core_sync(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2693; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2695 * sync() * # out is not distributed * ndfirst = first # <<<<<<<<<<<<<< * if is_distributed(first): * ndfirst = first.allget() */ __Pyx_INCREF(__pyx_v_first); __pyx_v_ndfirst = __pyx_v_first; /* "ga4py/gain/core.pyx":2696 * # out is not distributed * ndfirst = first * if is_distributed(first): # <<<<<<<<<<<<<< * ndfirst = first.allget() * ndsecond = second */ __pyx_t_4 = (__pyx_f_5ga4py_4gain_4core_is_distributed(__pyx_v_first, 0) != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":2697 * ndfirst = first * if is_distributed(first): * ndfirst = first.allget() # <<<<<<<<<<<<<< * ndsecond = second * if second is first: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_first, __pyx_n_s__allget); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_ndfirst, __pyx_t_3); __pyx_t_3 = 0; goto __pyx_L25; } __pyx_L25:; /* "ga4py/gain/core.pyx":2698 * if is_distributed(first): * ndfirst = first.allget() * ndsecond = second # <<<<<<<<<<<<<< * if second is first: * ndsecond = ndfirst */ __Pyx_INCREF(__pyx_v_second); __pyx_v_ndsecond = __pyx_v_second; /* "ga4py/gain/core.pyx":2699 * ndfirst = first.allget() * ndsecond = second * if second is first: # <<<<<<<<<<<<<< * ndsecond = ndfirst * elif is_distributed(second): */ __pyx_t_4 = (__pyx_v_second == __pyx_v_first); __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":2700 * ndsecond = second * if second is first: * ndsecond = ndfirst # <<<<<<<<<<<<<< * elif is_distributed(second): * ndsecond = second.allget() */ __Pyx_INCREF(__pyx_v_ndfirst); __Pyx_DECREF_SET(__pyx_v_ndsecond, __pyx_v_ndfirst); goto __pyx_L26; } /* "ga4py/gain/core.pyx":2701 * if second is first: * ndsecond = ndfirst * elif is_distributed(second): # <<<<<<<<<<<<<< * ndsecond = second.allget() * self.func(ndfirst, ndsecond, out, *args, **kwargs) */ __pyx_t_5 = (__pyx_f_5ga4py_4gain_4core_is_distributed(__pyx_v_second, 0) != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":2702 * ndsecond = ndfirst * elif is_distributed(second): * ndsecond = second.allget() # <<<<<<<<<<<<<< * self.func(ndfirst, ndsecond, out, *args, **kwargs) * #sync() # I don't think we need this one */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_second, __pyx_n_s__allget); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2702; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2702; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_ndsecond, __pyx_t_2); __pyx_t_2 = 0; goto __pyx_L26; } __pyx_L26:; /* "ga4py/gain/core.pyx":2703 * elif is_distributed(second): * ndsecond = second.allget() * self.func(ndfirst, ndsecond, out, *args, **kwargs) # <<<<<<<<<<<<<< * #sync() # I don't think we need this one * return out */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_ndfirst); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_ndfirst); __Pyx_GIVEREF(__pyx_v_ndfirst); __Pyx_INCREF(__pyx_v_ndsecond); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_ndsecond); __Pyx_GIVEREF(__pyx_v_ndsecond); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __pyx_t_1 = PySequence_Tuple(((PyObject *)__pyx_v_args)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_10 = PyNumber_Add(((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_10)); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_10), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } __pyx_L9:; /* "ga4py/gain/core.pyx":2705 * self.func(ndfirst, ndsecond, out, *args, **kwargs) * #sync() # I don't think we need this one * return out # <<<<<<<<<<<<<< * * def reduce(self, a, axis=0, dtype=None, out=None, *args, **kwargs): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_out); __pyx_r = __pyx_v_out; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("ga4py.gain.core.ufunc._binary_call", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_first_isscalar); __Pyx_XDECREF(__pyx_v_second_isscalar); __Pyx_XDECREF(__pyx_v_first_dtype); __Pyx_XDECREF(__pyx_v_second_dtype); __Pyx_XDECREF(__pyx_v_first_shape); __Pyx_XDECREF(__pyx_v_second_shape); __Pyx_XDECREF(__pyx_v_dtype); __Pyx_XDECREF(__pyx_v_shape); __Pyx_XDECREF(__pyx_v_npout); __Pyx_XDECREF(__pyx_v_npfirst); __Pyx_XDECREF(__pyx_v_release_first); __Pyx_XDECREF(__pyx_v_npsecond); __Pyx_XDECREF(__pyx_v_release_second); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XDECREF(__pyx_v_result); __Pyx_XDECREF(__pyx_v_ndfirst); __Pyx_XDECREF(__pyx_v_ndsecond); __Pyx_XDECREF(__pyx_v_first); __Pyx_XDECREF(__pyx_v_second); __Pyx_XDECREF(__pyx_v_out); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_23reduce(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_5ufunc_22reduce[] = "reduce(a, axis=0, dtype=None, out=None)\n\n Reduces `a`'s dimension by one, by applying ufunc along one axis.\n\n Let :math:`a.shape = (N_0, ..., N_i, ..., N_{M-1})`. Then\n :math:`ufunc.reduce(a, axis=i)[k_0, ..,k_{i-1}, k_{i+1}, .., k_{M-1}]` =\n the result of iterating `j` over :math:`range(N_i)`, cumulatively applying\n ufunc to each :math:`a[k_0, ..,k_{i-1}, j, k_{i+1}, .., k_{M-1}]`.\n For a one-dimensional array, reduce produces results equivalent to:\n ::\n\n r = op.identity # op = ufunc\n for i in xrange(len(A)):\n r = op(r, A[i])\n return r\n\n For example, add.reduce() is equivalent to sum().\n\n Parameters\n ----------\n a : array_like\n The array to act on.\n axis : int, optional\n The axis along which to apply the reduction.\n dtype : data-type code, optional\n The type used to represent the intermediate results. Defaults\n to the data-type of the output array if this is provided, or\n the data-type of the input array if no output array is provided.\n out : ndarray, optional\n A location into which the result is stored. If not provided, a\n freshly-allocated array is returned.\n\n Returns\n -------\n r : ndarray\n The reduced array. If `out` was supplied, `r` is a reference to it.\n\n Examples\n --------\n >>> np.multiply.reduce([2,3,5])\n 30\n\n A multi-dimensional array example:\n\n >>> X = np.arange(8).reshape((2,2,2))\n >>> X\n array([[[0, 1],\n [2, 3]],\n [[4, 5],\n [6, 7]]])\n >>> np.add.reduce(X, 0)\n array([[ 4, 6],\n [ 8, 10]])\n >>> np.add.reduce(X) # confirm: default axis value is 0\n array([[ 4, 6],\n [ 8, 10]])\n >>> np.add.reduce(X, 1)\n array([[ 2, 4],\n [10, 12]])\n >>> np.add.reduce(X, 2)\n array([[ 1, 5],\n [ 9, 13]])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_5ufunc_23reduce = {__Pyx_NAMESTR("reduce"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_5ufunc_23reduce, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_5ufunc_22reduce)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_23reduce(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_a = 0; PyObject *__pyx_v_axis = 0; PyObject *__pyx_v_dtype = 0; PyObject *__pyx_v_out = 0; PyObject *__pyx_v_args = 0; PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("reduce (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 5) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 5, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,0}; PyObject* values[5] = {0,0,0,0,0}; values[2] = ((PyObject *)((PyObject *)__pyx_int_0)); /* "ga4py/gain/core.pyx":2707 * return out * * def reduce(self, a, axis=0, dtype=None, out=None, *args, **kwargs): # <<<<<<<<<<<<<< * """reduce(a, axis=0, dtype=None, out=None) * */ values[3] = ((PyObject *)((PyObject *)Py_None)); values[4] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("reduce", 0, 2, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2707; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 5) ? pos_args : 5; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "reduce") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2707; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { default: case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; case 1: case 0: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_a = values[1]; __pyx_v_axis = values[2]; __pyx_v_dtype = values[3]; __pyx_v_out = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("reduce", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2707; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ufunc.reduce", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_5ufunc_22reduce(__pyx_self, __pyx_v_self, __pyx_v_a, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_22reduce(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_axis, PyObject *__pyx_v_dtype, PyObject *__pyx_v_out, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { PyObject *__pyx_v_shape = NULL; PyObject *__pyx_v_nda = NULL; PyObject *__pyx_v_value = NULL; PyObject *__pyx_v_everything = NULL; PyObject *__pyx_v_ndout = NULL; PyObject *__pyx_v_my_range = NULL; PyObject *__pyx_v_piece = NULL; PyObject *__pyx_v_send_requests = NULL; PyObject *__pyx_v_recv_requests = NULL; long __pyx_v_TAG; PyObject *__pyx_v_local_out = NULL; PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_v_m = NULL; PyObject *__pyx_v_p = NULL; PyObject *__pyx_v_i = NULL; PyObject *__pyx_v_rlo = NULL; PyObject *__pyx_v_rhi = NULL; PyObject *__pyx_v_buf = NULL; PyObject *__pyx_v_olo = NULL; PyObject *__pyx_v_ohi = NULL; PyObject *__pyx_v_slicer = NULL; PyObject *__pyx_v_axis_iterator = NULL; PyObject *__pyx_v_ai = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; int __pyx_t_6; PyObject *__pyx_t_7 = NULL; PyObject *(*__pyx_t_8)(PyObject *); Py_ssize_t __pyx_t_9; PyObject *(*__pyx_t_10)(PyObject *); PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; int __pyx_t_13; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("reduce", 0); __Pyx_TraceCall("reduce", __pyx_f[0], 2707); __Pyx_INCREF(__pyx_v_a); __Pyx_INCREF(__pyx_v_axis); __Pyx_INCREF(__pyx_v_dtype); __Pyx_INCREF(__pyx_v_out); /* "ga4py/gain/core.pyx":2772 * * """ * if self.func.nin != 2: # <<<<<<<<<<<<<< * raise ValueError, "reduce only supported for binary functions" * a = asarray(a) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__nin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_int_2, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2773 * """ * if self.func.nin != 2: * raise ValueError, "reduce only supported for binary functions" # <<<<<<<<<<<<<< * a = asarray(a) * if not (isinstance(a, ndarray) or isinstance(out, ndarray)): */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_67), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2773; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":2774 * if self.func.nin != 2: * raise ValueError, "reduce only supported for binary functions" * a = asarray(a) # <<<<<<<<<<<<<< * if not (isinstance(a, ndarray) or isinstance(out, ndarray)): * # no ndarray instances used, pass through immediately to numpy */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2774; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2774; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2774; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_a, __pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2775 * raise ValueError, "reduce only supported for binary functions" * a = asarray(a) * if not (isinstance(a, ndarray) or isinstance(out, ndarray)): # <<<<<<<<<<<<<< * # no ndarray instances used, pass through immediately to numpy * return self.func.reduce(a, axis, dtype, out, *args, **kwargs) */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_IsInstance(__pyx_v_a, __pyx_t_4); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!(__pyx_t_3 != 0)) { __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyObject_IsInstance(__pyx_v_out, __pyx_t_4); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = (__pyx_t_5 != 0); } else { __pyx_t_6 = (__pyx_t_3 != 0); } __pyx_t_3 = ((!__pyx_t_6) != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2777 * if not (isinstance(a, ndarray) or isinstance(out, ndarray)): * # no ndarray instances used, pass through immediately to numpy * return self.func.reduce(a, axis, dtype, out, *args, **kwargs) # <<<<<<<<<<<<<< * if axis < 0: * axis += a.ndim */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__reduce); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __Pyx_INCREF(__pyx_v_axis); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_axis); __Pyx_GIVEREF(__pyx_v_axis); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __pyx_t_1 = PySequence_Tuple(((PyObject *)__pyx_v_args)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_7 = PyNumber_Add(((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_7)); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/core.pyx":2778 * # no ndarray instances used, pass through immediately to numpy * return self.func.reduce(a, axis, dtype, out, *args, **kwargs) * if axis < 0: # <<<<<<<<<<<<<< * axis += a.ndim * if a.ndim < axis < 0: */ __pyx_t_4 = PyObject_RichCompare(__pyx_v_axis, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2779 * return self.func.reduce(a, axis, dtype, out, *args, **kwargs) * if axis < 0: * axis += a.ndim # <<<<<<<<<<<<<< * if a.ndim < axis < 0: * raise ValueError, "axis not in array" */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__ndim); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2779; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_axis, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2779; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_axis, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L5; } __pyx_L5:; /* "ga4py/gain/core.pyx":2780 * if axis < 0: * axis += a.ndim * if a.ndim < axis < 0: # <<<<<<<<<<<<<< * raise ValueError, "axis not in array" * if out is None: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2780; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_v_axis, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2780; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__Pyx_PyObject_IsTrue(__pyx_t_4)) { __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = PyObject_RichCompare(__pyx_v_axis, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2780; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2780; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2781 * axis += a.ndim * if a.ndim < axis < 0: * raise ValueError, "axis not in array" # <<<<<<<<<<<<<< * if out is None: * shape = list(a.shape) */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_68), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2781; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; /* "ga4py/gain/core.pyx":2782 * if a.ndim < axis < 0: * raise ValueError, "axis not in array" * if out is None: # <<<<<<<<<<<<<< * shape = list(a.shape) * del shape[axis] */ __pyx_t_3 = (__pyx_v_out == Py_None); __pyx_t_6 = (__pyx_t_3 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2783 * raise ValueError, "axis not in array" * if out is None: * shape = list(a.shape) # <<<<<<<<<<<<<< * del shape[axis] * if dtype is None: */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__shape); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2783; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2783; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2783; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_v_shape = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2784 * if out is None: * shape = list(a.shape) * del shape[axis] # <<<<<<<<<<<<<< * if dtype is None: * dtype = a.dtype */ if (unlikely(!__pyx_v_shape)) { __Pyx_RaiseUnboundLocalError("shape"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2784; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } if (PyObject_DelItem(__pyx_v_shape, __pyx_v_axis) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2784; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2785 * shape = list(a.shape) * del shape[axis] * if dtype is None: # <<<<<<<<<<<<<< * dtype = a.dtype * out = ndarray(shape, dtype=dtype) */ __pyx_t_6 = (__pyx_v_dtype == Py_None); __pyx_t_3 = (__pyx_t_6 != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2786 * del shape[axis] * if dtype is None: * dtype = a.dtype # <<<<<<<<<<<<<< * out = ndarray(shape, dtype=dtype) * if out.ndim == 0: */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2786; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF_SET(__pyx_v_dtype, __pyx_t_4); __pyx_t_4 = 0; goto __pyx_L8; } __pyx_L8:; /* "ga4py/gain/core.pyx":2787 * if dtype is None: * dtype = a.dtype * out = ndarray(shape, dtype=dtype) # <<<<<<<<<<<<<< * if out.ndim == 0: * # optimize the 1d reduction */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2787; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2787; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2787; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_7)); if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), __pyx_v_dtype) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2787; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2787; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF_SET(__pyx_v_out, __pyx_t_2); __pyx_t_2 = 0; goto __pyx_L7; } __pyx_L7:; /* "ga4py/gain/core.pyx":2788 * dtype = a.dtype * out = ndarray(shape, dtype=dtype) * if out.ndim == 0: # <<<<<<<<<<<<<< * # optimize the 1d reduction * nda = a.access() */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__ndim); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2788; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = PyObject_RichCompare(__pyx_t_2, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2788; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2788; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2790 * if out.ndim == 0: * # optimize the 1d reduction * nda = a.access() # <<<<<<<<<<<<<< * value = self.func.identity * if nda is not None: */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__access); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_nda = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2791 * # optimize the 1d reduction * nda = a.access() * value = self.func.identity # <<<<<<<<<<<<<< * if nda is not None: * value = self.func.reduce(nda) */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2791; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__identity); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2791; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_value = __pyx_t_7; __pyx_t_7 = 0; /* "ga4py/gain/core.pyx":2792 * nda = a.access() * value = self.func.identity * if nda is not None: # <<<<<<<<<<<<<< * value = self.func.reduce(nda) * everything = comm().allgather(value) */ __pyx_t_3 = (__pyx_v_nda != Py_None); __pyx_t_6 = (__pyx_t_3 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2793 * value = self.func.identity * if nda is not None: * value = self.func.reduce(nda) # <<<<<<<<<<<<<< * everything = comm().allgather(value) * self.func.reduce(everything, out=out) */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2793; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__reduce); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2793; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2793; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_nda); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_nda); __Pyx_GIVEREF(__pyx_v_nda); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2793; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L10; } __pyx_L10:; /* "ga4py/gain/core.pyx":2794 * if nda is not None: * value = self.func.reduce(nda) * everything = comm().allgather(value) # <<<<<<<<<<<<<< * self.func.reduce(everything, out=out) * elif out.ndim == 1 and 'OLD_REDUCE' in os.environ: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__allgather); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_value); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __pyx_v_everything = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2795 * value = self.func.reduce(nda) * everything = comm().allgather(value) * self.func.reduce(everything, out=out) # <<<<<<<<<<<<<< * elif out.ndim == 1 and 'OLD_REDUCE' in os.environ: * # optimize the 2d reduction */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__reduce); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_everything); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_everything); __Pyx_GIVEREF(__pyx_v_everything); __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__out), __pyx_v_out) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L9; } /* "ga4py/gain/core.pyx":2796 * everything = comm().allgather(value) * self.func.reduce(everything, out=out) * elif out.ndim == 1 and 'OLD_REDUCE' in os.environ: # <<<<<<<<<<<<<< * # optimize the 2d reduction * ndout = out.access() */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__ndim); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_RichCompare(__pyx_t_4, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_6) { __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__os); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__environ); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__Pyx_PySequence_Contains(((PyObject *)__pyx_n_s__OLD_REDUCE), __pyx_t_4, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = __pyx_t_3; } else { __pyx_t_5 = __pyx_t_6; } if (__pyx_t_5) { /* "ga4py/gain/core.pyx":2798 * elif out.ndim == 1 and 'OLD_REDUCE' in os.environ: * # optimize the 2d reduction * ndout = out.access() # <<<<<<<<<<<<<< * if ndout is not None: * my_range = out.global_slice.bound_by_lohi(*out.distribution()) */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__access); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_ndout = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2799 * # optimize the 2d reduction * ndout = out.access() * if ndout is not None: # <<<<<<<<<<<<<< * my_range = out.global_slice.bound_by_lohi(*out.distribution()) * if axis == 0: # rows */ __pyx_t_5 = (__pyx_v_ndout != Py_None); __pyx_t_6 = (__pyx_t_5 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2800 * ndout = out.access() * if ndout is not None: * my_range = out.global_slice.bound_by_lohi(*out.distribution()) # <<<<<<<<<<<<<< * if axis == 0: # rows * my_range = [slice(None,None,None)]+my_range */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__bound_by_lohi); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__distribution); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PySequence_Tuple(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_v_my_range = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2801 * if ndout is not None: * my_range = out.global_slice.bound_by_lohi(*out.distribution()) * if axis == 0: # rows # <<<<<<<<<<<<<< * my_range = [slice(None,None,None)]+my_range * elif axis == 1: # cols */ __pyx_t_2 = PyObject_RichCompare(__pyx_v_axis, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2801; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2801; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2802 * my_range = out.global_slice.bound_by_lohi(*out.distribution()) * if axis == 0: # rows * my_range = [slice(None,None,None)]+my_range # <<<<<<<<<<<<<< * elif axis == 1: # cols * my_range = my_range+[slice(None,None,None)] */ __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_k_tuple_69), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Add(((PyObject *)__pyx_t_1), __pyx_v_my_range); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_my_range, __pyx_t_2); __pyx_t_2 = 0; goto __pyx_L12; } /* "ga4py/gain/core.pyx":2803 * if axis == 0: # rows * my_range = [slice(None,None,None)]+my_range * elif axis == 1: # cols # <<<<<<<<<<<<<< * my_range = my_range+[slice(None,None,None)] * piece = a.get(my_range) */ __pyx_t_2 = PyObject_RichCompare(__pyx_v_axis, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2804 * my_range = [slice(None,None,None)]+my_range * elif axis == 1: # cols * my_range = my_range+[slice(None,None,None)] # <<<<<<<<<<<<<< * piece = a.get(my_range) * self.func.reduce(piece, axis, dtype, ndout, *args, **kwargs) */ __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_k_tuple_70), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2804; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2804; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Add(__pyx_v_my_range, ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2804; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_my_range, __pyx_t_2); __pyx_t_2 = 0; goto __pyx_L12; } __pyx_L12:; /* "ga4py/gain/core.pyx":2805 * elif axis == 1: # cols * my_range = my_range+[slice(None,None,None)] * piece = a.get(my_range) # <<<<<<<<<<<<<< * self.func.reduce(piece, axis, dtype, ndout, *args, **kwargs) * elif out.ndim == 1: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__get); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2805; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2805; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_my_range); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_my_range); __Pyx_GIVEREF(__pyx_v_my_range); __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2805; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_v_piece = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2806 * my_range = my_range+[slice(None,None,None)] * piece = a.get(my_range) * self.func.reduce(piece, axis, dtype, ndout, *args, **kwargs) # <<<<<<<<<<<<<< * elif out.ndim == 1: * # new algorithm using Isend/Irecv */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2806; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__reduce); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2806; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2806; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_piece); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_piece); __Pyx_GIVEREF(__pyx_v_piece); __Pyx_INCREF(__pyx_v_axis); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_axis); __Pyx_GIVEREF(__pyx_v_axis); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __Pyx_INCREF(__pyx_v_ndout); PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_ndout); __Pyx_GIVEREF(__pyx_v_ndout); __pyx_t_2 = PySequence_Tuple(((PyObject *)__pyx_v_args)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2806; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __pyx_t_7 = PyNumber_Add(((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2806; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_7)); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2806; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L11; } __pyx_L11:; goto __pyx_L9; } /* "ga4py/gain/core.pyx":2807 * piece = a.get(my_range) * self.func.reduce(piece, axis, dtype, ndout, *args, **kwargs) * elif out.ndim == 1: # <<<<<<<<<<<<<< * # new algorithm using Isend/Irecv * send_requests = [] */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__ndim); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2807; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2807; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2807; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2809 * elif out.ndim == 1: * # new algorithm using Isend/Irecv * send_requests = [] # <<<<<<<<<<<<<< * recv_requests = [] * nda = a.access() */ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2809; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_send_requests = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2810 * # new algorithm using Isend/Irecv * send_requests = [] * recv_requests = [] # <<<<<<<<<<<<<< * nda = a.access() * if nda is not None: */ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2810; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_recv_requests = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2811 * send_requests = [] * recv_requests = [] * nda = a.access() # <<<<<<<<<<<<<< * if nda is not None: * TAG = 733823 */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__access); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2811; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2811; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_nda = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2812 * recv_requests = [] * nda = a.access() * if nda is not None: # <<<<<<<<<<<<<< * TAG = 733823 * # we own part of the input */ __pyx_t_6 = (__pyx_v_nda != Py_None); __pyx_t_5 = (__pyx_t_6 != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":2813 * nda = a.access() * if nda is not None: * TAG = 733823 # <<<<<<<<<<<<<< * # we own part of the input * # reduce it, then find where to send it */ __pyx_v_TAG = 733823; /* "ga4py/gain/core.pyx":2816 * # we own part of the input * # reduce it, then find where to send it * local_out = self.func.reduce(nda, axis, dtype, *args, **kwargs) # <<<<<<<<<<<<<< * lo,hi = a.distribution() * if axis == 0: */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__reduce); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_nda); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_nda); __Pyx_GIVEREF(__pyx_v_nda); __Pyx_INCREF(__pyx_v_axis); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_axis); __Pyx_GIVEREF(__pyx_v_axis); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_7 = PySequence_Tuple(((PyObject *)__pyx_v_args)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_7)); __pyx_t_1 = PyNumber_Add(((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __pyx_t_7 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_7); __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __pyx_v_local_out = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2817 * # reduce it, then find where to send it * local_out = self.func.reduce(nda, axis, dtype, *args, **kwargs) * lo,hi = a.distribution() # <<<<<<<<<<<<<< * if axis == 0: * lo,hi = lo[1],hi[1] */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__distribution); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) { PyObject* sequence = __pyx_t_7; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_1 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_1); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); #endif __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } else { Py_ssize_t index = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_2)->tp_iternext; index = 0; __pyx_t_4 = __pyx_t_8(__pyx_t_2); if (unlikely(!__pyx_t_4)) goto __pyx_L14_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); index = 1; __pyx_t_1 = __pyx_t_8(__pyx_t_2); if (unlikely(!__pyx_t_1)) goto __pyx_L14_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_2), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L15_unpacking_done; __pyx_L14_unpacking_failed:; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L15_unpacking_done:; } __pyx_v_lo = __pyx_t_4; __pyx_t_4 = 0; __pyx_v_hi = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2818 * local_out = self.func.reduce(nda, axis, dtype, *args, **kwargs) * lo,hi = a.distribution() * if axis == 0: # <<<<<<<<<<<<<< * lo,hi = lo[1],hi[1] * else: */ __pyx_t_7 = PyObject_RichCompare(__pyx_v_axis, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2818; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2818; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__pyx_t_5) { /* "ga4py/gain/core.pyx":2819 * lo,hi = a.distribution() * if axis == 0: * lo,hi = lo[1],hi[1] # <<<<<<<<<<<<<< * else: * lo,hi = lo[0],hi[0] */ __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_lo, 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_hi, 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_lo, __pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF_SET(__pyx_v_hi, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L16; } /*else*/ { /* "ga4py/gain/core.pyx":2821 * lo,hi = lo[1],hi[1] * else: * lo,hi = lo[0],hi[0] # <<<<<<<<<<<<<< * m,p = ga.locate_region(out.handle, lo, hi) * #print_sync("nda m=%s" % str(m)) */ __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_lo, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2821; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_hi, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2821; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF_SET(__pyx_v_lo, __pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_hi, __pyx_t_7); __pyx_t_7 = 0; } __pyx_L16:; /* "ga4py/gain/core.pyx":2822 * else: * lo,hi = lo[0],hi[0] * m,p = ga.locate_region(out.handle, lo, hi) # <<<<<<<<<<<<<< * #print_sync("nda m=%s" % str(m)) * #print_sync("nda p=%s" % str(p)) */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__locate_region); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__handle); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_7 = 0; __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) { PyObject* sequence = __pyx_t_7; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_1 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_1); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); #endif __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } else { Py_ssize_t index = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_2)->tp_iternext; index = 0; __pyx_t_4 = __pyx_t_8(__pyx_t_2); if (unlikely(!__pyx_t_4)) goto __pyx_L17_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); index = 1; __pyx_t_1 = __pyx_t_8(__pyx_t_2); if (unlikely(!__pyx_t_1)) goto __pyx_L17_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_2), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L18_unpacking_done; __pyx_L17_unpacking_failed:; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L18_unpacking_done:; } __pyx_v_m = __pyx_t_4; __pyx_t_4 = 0; __pyx_v_p = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2825 * #print_sync("nda m=%s" % str(m)) * #print_sync("nda p=%s" % str(p)) * for i in range(len(p)): # <<<<<<<<<<<<<< * rlo,rhi = m[i] * #print_sync("rlo,rhi=%s,%s" % (rlo,rhi)) */ __pyx_t_9 = PyObject_Length(__pyx_v_p); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = PyInt_FromSsize_t(__pyx_t_9); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyList_CheckExact(__pyx_t_7) || PyTuple_CheckExact(__pyx_t_7)) { __pyx_t_1 = __pyx_t_7; __Pyx_INCREF(__pyx_t_1); __pyx_t_9 = 0; __pyx_t_10 = NULL; } else { __pyx_t_9 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_10 = Py_TYPE(__pyx_t_1)->tp_iternext; } __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; for (;;) { if (!__pyx_t_10 && PyList_CheckExact(__pyx_t_1)) { if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_7 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_7); __pyx_t_9++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_10 && PyTuple_CheckExact(__pyx_t_1)) { if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_7); __pyx_t_9++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_7 = __pyx_t_10(__pyx_t_1); if (unlikely(!__pyx_t_7)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_7); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/core.pyx":2826 * #print_sync("nda p=%s" % str(p)) * for i in range(len(p)): * rlo,rhi = m[i] # <<<<<<<<<<<<<< * #print_sync("rlo,rhi=%s,%s" % (rlo,rhi)) * rlo = rlo - lo */ __pyx_t_7 = PyObject_GetItem(__pyx_v_m, __pyx_v_i); if (!__pyx_t_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) { PyObject* sequence = __pyx_t_7; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_2 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); #endif __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_4 = __pyx_t_8(__pyx_t_11); if (unlikely(!__pyx_t_4)) goto __pyx_L21_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); index = 1; __pyx_t_2 = __pyx_t_8(__pyx_t_11); if (unlikely(!__pyx_t_2)) goto __pyx_L21_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L22_unpacking_done; __pyx_L21_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L22_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_rlo, __pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF_SET(__pyx_v_rhi, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2828 * rlo,rhi = m[i] * #print_sync("rlo,rhi=%s,%s" % (rlo,rhi)) * rlo = rlo - lo # <<<<<<<<<<<<<< * rhi = rhi - lo * #print_sync("again rlo,rhi=%s,%s" % (rlo,rhi)) */ __pyx_t_7 = PyNumber_Subtract(__pyx_v_rlo, __pyx_v_lo); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF_SET(__pyx_v_rlo, __pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/core.pyx":2829 * #print_sync("rlo,rhi=%s,%s" % (rlo,rhi)) * rlo = rlo - lo * rhi = rhi - lo # <<<<<<<<<<<<<< * #print_sync("again rlo,rhi=%s,%s" % (rlo,rhi)) * send_requests.append( */ __pyx_t_7 = PyNumber_Subtract(__pyx_v_rhi, __pyx_v_lo); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF_SET(__pyx_v_rhi, __pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/core.pyx":2832 * #print_sync("again rlo,rhi=%s,%s" % (rlo,rhi)) * send_requests.append( * comm().Isend(local_out[rlo:rhi], p[i], TAG)) # <<<<<<<<<<<<<< * ndout = out.access() * buf = None */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__Isend); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_local_out, 0, 0, &__pyx_v_rlo, &__pyx_v_rhi, NULL, 0, 0, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyObject_GetItem(__pyx_v_p, __pyx_v_i); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_11 = PyInt_FromLong(__pyx_v_TAG); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_11); __Pyx_GIVEREF(__pyx_t_11); __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_11 = 0; __pyx_t_11 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_12), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0; __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_send_requests, __pyx_t_11); if (unlikely(__pyx_t_13 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L13; } __pyx_L13:; /* "ga4py/gain/core.pyx":2833 * send_requests.append( * comm().Isend(local_out[rlo:rhi], p[i], TAG)) * ndout = out.access() # <<<<<<<<<<<<<< * buf = None * if ndout is not None: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__access); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_11 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_ndout = __pyx_t_11; __pyx_t_11 = 0; /* "ga4py/gain/core.pyx":2834 * comm().Isend(local_out[rlo:rhi], p[i], TAG)) * ndout = out.access() * buf = None # <<<<<<<<<<<<<< * if ndout is not None: * lo,hi = out.distribution() */ __Pyx_INCREF(Py_None); __pyx_v_buf = Py_None; /* "ga4py/gain/core.pyx":2835 * ndout = out.access() * buf = None * if ndout is not None: # <<<<<<<<<<<<<< * lo,hi = out.distribution() * lo,hi = lo[0],hi[0] */ __pyx_t_5 = (__pyx_v_ndout != Py_None); __pyx_t_6 = (__pyx_t_5 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2836 * buf = None * if ndout is not None: * lo,hi = out.distribution() # <<<<<<<<<<<<<< * lo,hi = lo[0],hi[0] * #print_sync("lo,hi=%s,%s" % (lo,hi)) */ __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__distribution); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_1 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_11 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_12 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_11 = PyList_GET_ITEM(sequence, 0); __pyx_t_12 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(__pyx_t_12); #else __pyx_t_11 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; index = 0; __pyx_t_11 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_11)) goto __pyx_L24_unpacking_failed; __Pyx_GOTREF(__pyx_t_11); index = 1; __pyx_t_12 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_12)) goto __pyx_L24_unpacking_failed; __Pyx_GOTREF(__pyx_t_12); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L25_unpacking_done; __pyx_L24_unpacking_failed:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L25_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_lo, __pyx_t_11); __pyx_t_11 = 0; __Pyx_XDECREF_SET(__pyx_v_hi, __pyx_t_12); __pyx_t_12 = 0; /* "ga4py/gain/core.pyx":2837 * if ndout is not None: * lo,hi = out.distribution() * lo,hi = lo[0],hi[0] # <<<<<<<<<<<<<< * #print_sync("lo,hi=%s,%s" % (lo,hi)) * shape = ga.inquire_dims(a.handle) */ __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_lo, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_hi, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF_SET(__pyx_v_lo, __pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_hi, __pyx_t_12); __pyx_t_12 = 0; /* "ga4py/gain/core.pyx":2839 * lo,hi = lo[0],hi[0] * #print_sync("lo,hi=%s,%s" % (lo,hi)) * shape = ga.inquire_dims(a.handle) # <<<<<<<<<<<<<< * #print_sync("shape=%s" % shape) * olo = [lo,lo] */ __pyx_t_12 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s__inquire_dims); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__handle); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_12); __Pyx_GIVEREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; __Pyx_XDECREF_SET(__pyx_v_shape, __pyx_t_12); __pyx_t_12 = 0; /* "ga4py/gain/core.pyx":2841 * shape = ga.inquire_dims(a.handle) * #print_sync("shape=%s" % shape) * olo = [lo,lo] # <<<<<<<<<<<<<< * ohi = [hi,hi] * #print_sync("olo,ohi=%s,%s" % (olo,ohi)) */ __pyx_t_12 = PyList_New(2); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); __Pyx_INCREF(__pyx_v_lo); PyList_SET_ITEM(__pyx_t_12, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_lo); PyList_SET_ITEM(__pyx_t_12, 1, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __pyx_v_olo = ((PyObject*)__pyx_t_12); __pyx_t_12 = 0; /* "ga4py/gain/core.pyx":2842 * #print_sync("shape=%s" % shape) * olo = [lo,lo] * ohi = [hi,hi] # <<<<<<<<<<<<<< * #print_sync("olo,ohi=%s,%s" % (olo,ohi)) * olo[axis],ohi[axis] = 0,shape[axis] */ __pyx_t_12 = PyList_New(2); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); __Pyx_INCREF(__pyx_v_hi); PyList_SET_ITEM(__pyx_t_12, 0, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __Pyx_INCREF(__pyx_v_hi); PyList_SET_ITEM(__pyx_t_12, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_v_ohi = ((PyObject*)__pyx_t_12); __pyx_t_12 = 0; /* "ga4py/gain/core.pyx":2844 * ohi = [hi,hi] * #print_sync("olo,ohi=%s,%s" % (olo,ohi)) * olo[axis],ohi[axis] = 0,shape[axis] # <<<<<<<<<<<<<< * #print_sync("again olo,ohi=%s,%s" % (olo,ohi)) * m,p = ga.locate_region(a.handle, olo, ohi) */ __pyx_t_12 = __pyx_int_0; __Pyx_INCREF(__pyx_t_12); __pyx_t_11 = PyObject_GetItem(__pyx_v_shape, __pyx_v_axis); if (!__pyx_t_11) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); if (PyObject_SetItem(((PyObject *)__pyx_v_olo), __pyx_v_axis, __pyx_t_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (PyObject_SetItem(((PyObject *)__pyx_v_ohi), __pyx_v_axis, __pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; /* "ga4py/gain/core.pyx":2846 * olo[axis],ohi[axis] = 0,shape[axis] * #print_sync("again olo,ohi=%s,%s" % (olo,ohi)) * m,p = ga.locate_region(a.handle, olo, ohi) # <<<<<<<<<<<<<< * #print_sync("nda m=%s" % str(m)) * #print_sync("nda p=%s" % str(p)) */ __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2846; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s__locate_region); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2846; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__handle); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2846; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2846; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_11); __Pyx_GIVEREF(__pyx_t_11); __Pyx_INCREF(((PyObject *)__pyx_v_olo)); PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_olo)); __Pyx_GIVEREF(((PyObject *)__pyx_v_olo)); __Pyx_INCREF(((PyObject *)__pyx_v_ohi)); PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_ohi)); __Pyx_GIVEREF(((PyObject *)__pyx_v_ohi)); __pyx_t_11 = 0; __pyx_t_11 = PyObject_Call(__pyx_t_12, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2846; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_11))) || (PyList_CheckExact(__pyx_t_11))) { PyObject* sequence = __pyx_t_11; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2846; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_12 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_1 = PyList_GET_ITEM(sequence, 0); __pyx_t_12 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_12); #else __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2846; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_12 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2846; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); #endif __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2846; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; index = 0; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L26_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); index = 1; __pyx_t_12 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_12)) goto __pyx_L26_unpacking_failed; __Pyx_GOTREF(__pyx_t_12); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2846; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L27_unpacking_done; __pyx_L26_unpacking_failed:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2846; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L27_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_m, __pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF_SET(__pyx_v_p, __pyx_t_12); __pyx_t_12 = 0; /* "ga4py/gain/core.pyx":2849 * #print_sync("nda m=%s" % str(m)) * #print_sync("nda p=%s" % str(p)) * buf = np.ndarray((len(p),hi-lo), dtype=out.dtype) # <<<<<<<<<<<<<< * buf[:] = self.func.identity * for i in range(len(p)): */ __pyx_t_9 = PyObject_Length(__pyx_v_p); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_11 = PyInt_FromSsize_t(__pyx_t_9); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_12 = PyNumber_Subtract(__pyx_v_hi, __pyx_v_lo); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_11); __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_12); __Pyx_GIVEREF(__pyx_t_12); __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_12, 0, ((PyObject *)__pyx_t_1)); __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__dtype); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray)), ((PyObject *)__pyx_t_12), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_buf, __pyx_t_11); __pyx_t_11 = 0; /* "ga4py/gain/core.pyx":2850 * #print_sync("nda p=%s" % str(p)) * buf = np.ndarray((len(p),hi-lo), dtype=out.dtype) * buf[:] = self.func.identity # <<<<<<<<<<<<<< * for i in range(len(p)): * rlo,rhi = m[i] */ __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2850; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s__identity); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2850; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (__Pyx_PyObject_SetSlice(__pyx_v_buf, __pyx_t_1, 0, 0, NULL, NULL, &__pyx_k_slice_71, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2850; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2851 * buf = np.ndarray((len(p),hi-lo), dtype=out.dtype) * buf[:] = self.func.identity * for i in range(len(p)): # <<<<<<<<<<<<<< * rlo,rhi = m[i] * #print_sync("rlo,rhi=%s,%s" % (rlo,rhi)) */ __pyx_t_9 = PyObject_Length(__pyx_v_p); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_9); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_11 = __pyx_t_1; __Pyx_INCREF(__pyx_t_11); __pyx_t_9 = 0; __pyx_t_10 = NULL; } else { __pyx_t_9 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_10 = Py_TYPE(__pyx_t_11)->tp_iternext; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (!__pyx_t_10 && PyList_CheckExact(__pyx_t_11)) { if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_11)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyList_GET_ITEM(__pyx_t_11, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_11, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_10 && PyTuple_CheckExact(__pyx_t_11)) { if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_11)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_11, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_1 = __pyx_t_10(__pyx_t_11); if (unlikely(!__pyx_t_1)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_1); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2852 * buf[:] = self.func.identity * for i in range(len(p)): * rlo,rhi = m[i] # <<<<<<<<<<<<<< * #print_sync("rlo,rhi=%s,%s" % (rlo,rhi)) * if axis == 0: */ __pyx_t_1 = PyObject_GetItem(__pyx_v_m, __pyx_v_i); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2852; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2852; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_12 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_12 = PyList_GET_ITEM(sequence, 0); __pyx_t_7 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(__pyx_t_7); #else __pyx_t_12 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2852; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2852; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2852; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext; index = 0; __pyx_t_12 = __pyx_t_8(__pyx_t_4); if (unlikely(!__pyx_t_12)) goto __pyx_L30_unpacking_failed; __Pyx_GOTREF(__pyx_t_12); index = 1; __pyx_t_7 = __pyx_t_8(__pyx_t_4); if (unlikely(!__pyx_t_7)) goto __pyx_L30_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2852; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L31_unpacking_done; __pyx_L30_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2852; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L31_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_rlo, __pyx_t_12); __pyx_t_12 = 0; __Pyx_XDECREF_SET(__pyx_v_rhi, __pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/core.pyx":2854 * rlo,rhi = m[i] * #print_sync("rlo,rhi=%s,%s" % (rlo,rhi)) * if axis == 0: # <<<<<<<<<<<<<< * rlo,rhi = rlo[1],rhi[1] * else: */ __pyx_t_1 = PyObject_RichCompare(__pyx_v_axis, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2854; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2854; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2855 * #print_sync("rlo,rhi=%s,%s" % (rlo,rhi)) * if axis == 0: * rlo,rhi = rlo[1],rhi[1] # <<<<<<<<<<<<<< * else: * rlo,rhi = rlo[0],rhi[0] */ __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_rlo, 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2855; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_rhi, 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2855; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF_SET(__pyx_v_rlo, __pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_rhi, __pyx_t_7); __pyx_t_7 = 0; goto __pyx_L32; } /*else*/ { /* "ga4py/gain/core.pyx":2857 * rlo,rhi = rlo[1],rhi[1] * else: * rlo,rhi = rlo[0],rhi[0] # <<<<<<<<<<<<<< * #print_sync("again rlo,rhi=%s,%s" % (rlo,rhi)) * rlo = rlo - lo */ __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_rlo, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2857; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_rhi, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2857; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_rlo, __pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF_SET(__pyx_v_rhi, __pyx_t_1); __pyx_t_1 = 0; } __pyx_L32:; /* "ga4py/gain/core.pyx":2859 * rlo,rhi = rlo[0],rhi[0] * #print_sync("again rlo,rhi=%s,%s" % (rlo,rhi)) * rlo = rlo - lo # <<<<<<<<<<<<<< * rhi = rhi - lo * #print_sync("yet again rlo,rhi=%s,%s" % (rlo,rhi)) */ __pyx_t_1 = PyNumber_Subtract(__pyx_v_rlo, __pyx_v_lo); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2859; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_rlo, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2860 * #print_sync("again rlo,rhi=%s,%s" % (rlo,rhi)) * rlo = rlo - lo * rhi = rhi - lo # <<<<<<<<<<<<<< * #print_sync("yet again rlo,rhi=%s,%s" % (rlo,rhi)) * recv_requests.append( */ __pyx_t_1 = PyNumber_Subtract(__pyx_v_rhi, __pyx_v_lo); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2860; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_rhi, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2863 * #print_sync("yet again rlo,rhi=%s,%s" % (rlo,rhi)) * recv_requests.append( * comm().Irecv(buf[i][rlo:rhi], p[i], TAG)) # <<<<<<<<<<<<<< * while send_requests or recv_requests: * if MPI.Request.Testall(send_requests): */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__Irecv); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyObject_GetItem(__pyx_v_buf, __pyx_v_i); if (!__pyx_t_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_12 = __Pyx_PyObject_GetSlice(__pyx_t_7, 0, 0, &__pyx_v_rlo, &__pyx_v_rhi, NULL, 0, 0, 1); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyObject_GetItem(__pyx_v_p, __pyx_v_i); if (!__pyx_t_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = PyInt_FromLong(__pyx_v_TAG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_12); __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_12 = 0; __pyx_t_7 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_recv_requests, __pyx_t_4); if (unlikely(__pyx_t_13 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2862; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L23; } __pyx_L23:; /* "ga4py/gain/core.pyx":2864 * recv_requests.append( * comm().Irecv(buf[i][rlo:rhi], p[i], TAG)) * while send_requests or recv_requests: # <<<<<<<<<<<<<< * if MPI.Request.Testall(send_requests): * send_requests = [] */ while (1) { __pyx_t_6 = (((PyObject *)__pyx_v_send_requests) != Py_None) && (PyList_GET_SIZE(((PyObject *)__pyx_v_send_requests)) != 0); if (!__pyx_t_6) { __pyx_t_5 = (((PyObject *)__pyx_v_recv_requests) != Py_None) && (PyList_GET_SIZE(((PyObject *)__pyx_v_recv_requests)) != 0); __pyx_t_3 = __pyx_t_5; } else { __pyx_t_3 = __pyx_t_6; } if (!__pyx_t_3) break; /* "ga4py/gain/core.pyx":2865 * comm().Irecv(buf[i][rlo:rhi], p[i], TAG)) * while send_requests or recv_requests: * if MPI.Request.Testall(send_requests): # <<<<<<<<<<<<<< * send_requests = [] * if MPI.Request.Testall(recv_requests): */ __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_6mpi4py_3MPI_Request)), __pyx_n_s__Testall); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2865; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2865; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(((PyObject *)__pyx_v_send_requests)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_send_requests)); __Pyx_GIVEREF(((PyObject *)__pyx_v_send_requests)); __pyx_t_2 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2865; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2865; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2866 * while send_requests or recv_requests: * if MPI.Request.Testall(send_requests): * send_requests = [] # <<<<<<<<<<<<<< * if MPI.Request.Testall(recv_requests): * recv_requests = [] */ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2866; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF_SET(__pyx_v_send_requests, ((PyObject*)__pyx_t_2)); __pyx_t_2 = 0; goto __pyx_L35; } __pyx_L35:; /* "ga4py/gain/core.pyx":2867 * if MPI.Request.Testall(send_requests): * send_requests = [] * if MPI.Request.Testall(recv_requests): # <<<<<<<<<<<<<< * recv_requests = [] * if ndout is not None: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_6mpi4py_3MPI_Request)), __pyx_n_s__Testall); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(((PyObject *)__pyx_v_recv_requests)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_recv_requests)); __Pyx_GIVEREF(((PyObject *)__pyx_v_recv_requests)); __pyx_t_11 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2868 * send_requests = [] * if MPI.Request.Testall(recv_requests): * recv_requests = [] # <<<<<<<<<<<<<< * if ndout is not None: * self.func.reduce(buf, axis=0, out=ndout) */ __pyx_t_11 = PyList_New(0); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2868; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF_SET(__pyx_v_recv_requests, ((PyObject*)__pyx_t_11)); __pyx_t_11 = 0; goto __pyx_L36; } __pyx_L36:; } /* "ga4py/gain/core.pyx":2869 * if MPI.Request.Testall(recv_requests): * recv_requests = [] * if ndout is not None: # <<<<<<<<<<<<<< * self.func.reduce(buf, axis=0, out=ndout) * out.release_update() */ __pyx_t_3 = (__pyx_v_ndout != Py_None); __pyx_t_6 = (__pyx_t_3 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2870 * recv_requests = [] * if ndout is not None: * self.func.reduce(buf, axis=0, out=ndout) # <<<<<<<<<<<<<< * out.release_update() * if nda is not None: */ __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2870; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s__reduce); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2870; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2870; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_INCREF(__pyx_v_buf); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_buf); __Pyx_GIVEREF(__pyx_v_buf); __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2870; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__axis), __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2870; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__out), __pyx_v_ndout) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2870; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2870; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2871 * if ndout is not None: * self.func.reduce(buf, axis=0, out=ndout) * out.release_update() # <<<<<<<<<<<<<< * if nda is not None: * a.release() */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__release_update); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2871; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2871; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L37; } __pyx_L37:; /* "ga4py/gain/core.pyx":2872 * self.func.reduce(buf, axis=0, out=ndout) * out.release_update() * if nda is not None: # <<<<<<<<<<<<<< * a.release() * else: */ __pyx_t_6 = (__pyx_v_nda != Py_None); __pyx_t_3 = (__pyx_t_6 != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2873 * out.release_update() * if nda is not None: * a.release() # <<<<<<<<<<<<<< * else: * slicer = [slice(0,None,None)]*a.ndim */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__release); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L38; } __pyx_L38:; goto __pyx_L9; } /*else*/ { /* "ga4py/gain/core.pyx":2875 * a.release() * else: * slicer = [slice(0,None,None)]*a.ndim # <<<<<<<<<<<<<< * axis_iterator = iter(xrange(a.shape[axis])) * # copy first loop iteration to 'out' */ __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_k_tuple_72), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2875; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__ndim); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2875; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_11 = PyList_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2875; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); PyList_SET_ITEM(__pyx_t_11, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); { PyObject* __pyx_temp = PyNumber_InPlaceMultiply(__pyx_t_11, __pyx_t_2); if (unlikely(!__pyx_temp)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2875; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_temp); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = __pyx_temp; } __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_slicer = ((PyObject*)__pyx_t_11); __pyx_t_11 = 0; /* "ga4py/gain/core.pyx":2876 * else: * slicer = [slice(0,None,None)]*a.ndim * axis_iterator = iter(xrange(a.shape[axis])) # <<<<<<<<<<<<<< * # copy first loop iteration to 'out' * slicer[axis] = axis_iterator.next() */ __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__shape); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_2 = PyObject_GetItem(__pyx_t_11, __pyx_v_axis); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_xrange, ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; __pyx_t_11 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_axis_iterator = __pyx_t_11; __pyx_t_11 = 0; /* "ga4py/gain/core.pyx":2878 * axis_iterator = iter(xrange(a.shape[axis])) * # copy first loop iteration to 'out' * slicer[axis] = axis_iterator.next() # <<<<<<<<<<<<<< * out[:] = a[slicer] * # remaining loop iterations are appropriately reduced */ __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_axis_iterator, __pyx_n_s__next); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2878; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_2 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2878; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (PyObject_SetItem(((PyObject *)__pyx_v_slicer), __pyx_v_axis, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2878; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2879 * # copy first loop iteration to 'out' * slicer[axis] = axis_iterator.next() * out[:] = a[slicer] # <<<<<<<<<<<<<< * # remaining loop iterations are appropriately reduced * for i in axis_iterator: */ __pyx_t_2 = PyObject_GetItem(__pyx_v_a, ((PyObject *)__pyx_v_slicer)); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2879; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (__Pyx_PyObject_SetSlice(__pyx_v_out, __pyx_t_2, 0, 0, NULL, NULL, &__pyx_k_slice_73, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2879; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2881 * out[:] = a[slicer] * # remaining loop iterations are appropriately reduced * for i in axis_iterator: # <<<<<<<<<<<<<< * slicer[axis] = i * ai = a[slicer] */ if (PyList_CheckExact(__pyx_v_axis_iterator) || PyTuple_CheckExact(__pyx_v_axis_iterator)) { __pyx_t_2 = __pyx_v_axis_iterator; __Pyx_INCREF(__pyx_t_2); __pyx_t_9 = 0; __pyx_t_10 = NULL; } else { __pyx_t_9 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_axis_iterator); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_10 = Py_TYPE(__pyx_t_2)->tp_iternext; } for (;;) { if (!__pyx_t_10 && PyList_CheckExact(__pyx_t_2)) { if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_11 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_9); __Pyx_INCREF(__pyx_t_11); __pyx_t_9++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_11 = PySequence_ITEM(__pyx_t_2, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_10 && PyTuple_CheckExact(__pyx_t_2)) { if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_9); __Pyx_INCREF(__pyx_t_11); __pyx_t_9++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_11 = PySequence_ITEM(__pyx_t_2, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_11 = __pyx_t_10(__pyx_t_2); if (unlikely(!__pyx_t_11)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_11); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_11); __pyx_t_11 = 0; /* "ga4py/gain/core.pyx":2882 * # remaining loop iterations are appropriately reduced * for i in axis_iterator: * slicer[axis] = i # <<<<<<<<<<<<<< * ai = a[slicer] * self.__call__(out,ai,out) */ if (PyObject_SetItem(((PyObject *)__pyx_v_slicer), __pyx_v_axis, __pyx_v_i) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2882; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2883 * for i in axis_iterator: * slicer[axis] = i * ai = a[slicer] # <<<<<<<<<<<<<< * self.__call__(out,ai,out) * return out */ __pyx_t_11 = PyObject_GetItem(__pyx_v_a, ((PyObject *)__pyx_v_slicer)); if (!__pyx_t_11) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2883; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_XDECREF_SET(__pyx_v_ai, __pyx_t_11); __pyx_t_11 = 0; /* "ga4py/gain/core.pyx":2884 * slicer[axis] = i * ai = a[slicer] * self.__call__(out,ai,out) # <<<<<<<<<<<<<< * return out * */ __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s____call__); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2884; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2884; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __Pyx_INCREF(__pyx_v_ai); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_ai); __Pyx_GIVEREF(__pyx_v_ai); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __pyx_t_4 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2884; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __pyx_L9:; /* "ga4py/gain/core.pyx":2885 * ai = a[slicer] * self.__call__(out,ai,out) * return out # <<<<<<<<<<<<<< * * def accumulate(self, a, axis=0, dtype=None, out=None, *args, **kwargs): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_out); __pyx_r = __pyx_v_out; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_11); __Pyx_XDECREF(__pyx_t_12); __Pyx_AddTraceback("ga4py.gain.core.ufunc.reduce", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_shape); __Pyx_XDECREF(__pyx_v_nda); __Pyx_XDECREF(__pyx_v_value); __Pyx_XDECREF(__pyx_v_everything); __Pyx_XDECREF(__pyx_v_ndout); __Pyx_XDECREF(__pyx_v_my_range); __Pyx_XDECREF(__pyx_v_piece); __Pyx_XDECREF(__pyx_v_send_requests); __Pyx_XDECREF(__pyx_v_recv_requests); __Pyx_XDECREF(__pyx_v_local_out); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XDECREF(__pyx_v_m); __Pyx_XDECREF(__pyx_v_p); __Pyx_XDECREF(__pyx_v_i); __Pyx_XDECREF(__pyx_v_rlo); __Pyx_XDECREF(__pyx_v_rhi); __Pyx_XDECREF(__pyx_v_buf); __Pyx_XDECREF(__pyx_v_olo); __Pyx_XDECREF(__pyx_v_ohi); __Pyx_XDECREF(__pyx_v_slicer); __Pyx_XDECREF(__pyx_v_axis_iterator); __Pyx_XDECREF(__pyx_v_ai); __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_axis); __Pyx_XDECREF(__pyx_v_dtype); __Pyx_XDECREF(__pyx_v_out); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_25accumulate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_5ufunc_25accumulate = {__Pyx_NAMESTR("accumulate"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_5ufunc_25accumulate, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_25accumulate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_a = 0; PyObject *__pyx_v_axis = 0; PyObject *__pyx_v_dtype = 0; PyObject *__pyx_v_out = 0; PyObject *__pyx_v_args = 0; PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("accumulate (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 5) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 5, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,0}; PyObject* values[5] = {0,0,0,0,0}; values[2] = ((PyObject *)((PyObject *)__pyx_int_0)); /* "ga4py/gain/core.pyx":2887 * return out * * def accumulate(self, a, axis=0, dtype=None, out=None, *args, **kwargs): # <<<<<<<<<<<<<< * if self.func.nin != 2: * raise ValueError, "accumulate only supported for binary functions" */ values[3] = ((PyObject *)((PyObject *)Py_None)); values[4] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("accumulate", 0, 2, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2887; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 5) ? pos_args : 5; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "accumulate") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2887; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { default: case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; case 1: case 0: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_a = values[1]; __pyx_v_axis = values[2]; __pyx_v_dtype = values[3]; __pyx_v_out = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("accumulate", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2887; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ufunc.accumulate", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_5ufunc_24accumulate(__pyx_self, __pyx_v_self, __pyx_v_a, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_24accumulate(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_axis, PyObject *__pyx_v_dtype, PyObject *__pyx_v_out, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { PyObject *__pyx_v_ndout = NULL; PyObject *__pyx_v_result = NULL; PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_v_piece = NULL; PyObject *__pyx_v_everything = NULL; PyObject *__pyx_v_reduction = NULL; PyObject *__pyx_v_lvalue = NULL; PyObject *__pyx_v_llo = NULL; PyObject *__pyx_v_slicer_i = NULL; PyObject *__pyx_v_slicer_i_1 = NULL; PyObject *__pyx_v_axis_iterator = NULL; PyObject *__pyx_v_i = NULL; PyObject *__pyx_v_x = NULL; PyObject *__pyx_v_y = NULL; PyObject *__pyx_v_z = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; int __pyx_t_6; PyObject *__pyx_t_7 = NULL; Py_ssize_t __pyx_t_8; PyObject *(*__pyx_t_9)(PyObject *); PyObject *__pyx_t_10 = NULL; PyObject *(*__pyx_t_11)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("accumulate", 0); __Pyx_TraceCall("accumulate", __pyx_f[0], 2887); __Pyx_INCREF(__pyx_v_a); __Pyx_INCREF(__pyx_v_axis); __Pyx_INCREF(__pyx_v_dtype); __Pyx_INCREF(__pyx_v_out); /* "ga4py/gain/core.pyx":2888 * * def accumulate(self, a, axis=0, dtype=None, out=None, *args, **kwargs): * if self.func.nin != 2: # <<<<<<<<<<<<<< * raise ValueError, "accumulate only supported for binary functions" * a = asarray(a) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2888; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__nin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2888; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_int_2, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2888; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2888; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2889 * def accumulate(self, a, axis=0, dtype=None, out=None, *args, **kwargs): * if self.func.nin != 2: * raise ValueError, "accumulate only supported for binary functions" # <<<<<<<<<<<<<< * a = asarray(a) * if not (isinstance(a, ndarray) or isinstance(out, ndarray)): */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_74), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2889; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":2890 * if self.func.nin != 2: * raise ValueError, "accumulate only supported for binary functions" * a = asarray(a) # <<<<<<<<<<<<<< * if not (isinstance(a, ndarray) or isinstance(out, ndarray)): * # no ndarray instances used, pass through immediately to numpy */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2890; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2890; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2890; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_a, __pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2891 * raise ValueError, "accumulate only supported for binary functions" * a = asarray(a) * if not (isinstance(a, ndarray) or isinstance(out, ndarray)): # <<<<<<<<<<<<<< * # no ndarray instances used, pass through immediately to numpy * return self.func.accumulate(a, axis, dtype, out, *args, **kwargs) */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2891; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_IsInstance(__pyx_v_a, __pyx_t_4); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2891; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!(__pyx_t_3 != 0)) { __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2891; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyObject_IsInstance(__pyx_v_out, __pyx_t_4); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2891; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = (__pyx_t_5 != 0); } else { __pyx_t_6 = (__pyx_t_3 != 0); } __pyx_t_3 = ((!__pyx_t_6) != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2893 * if not (isinstance(a, ndarray) or isinstance(out, ndarray)): * # no ndarray instances used, pass through immediately to numpy * return self.func.accumulate(a, axis, dtype, out, *args, **kwargs) # <<<<<<<<<<<<<< * if axis < 0: * axis += a.ndim */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2893; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__accumulate); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2893; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2893; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __Pyx_INCREF(__pyx_v_axis); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_axis); __Pyx_GIVEREF(__pyx_v_axis); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __pyx_t_1 = PySequence_Tuple(((PyObject *)__pyx_v_args)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2893; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_7 = PyNumber_Add(((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2893; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_7)); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2893; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/core.pyx":2894 * # no ndarray instances used, pass through immediately to numpy * return self.func.accumulate(a, axis, dtype, out, *args, **kwargs) * if axis < 0: # <<<<<<<<<<<<<< * axis += a.ndim * if a.ndim < axis < 0: */ __pyx_t_4 = PyObject_RichCompare(__pyx_v_axis, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2894; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2894; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2895 * return self.func.accumulate(a, axis, dtype, out, *args, **kwargs) * if axis < 0: * axis += a.ndim # <<<<<<<<<<<<<< * if a.ndim < axis < 0: * raise ValueError, "axis not in array" */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__ndim); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2895; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_axis, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2895; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_axis, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L5; } __pyx_L5:; /* "ga4py/gain/core.pyx":2896 * if axis < 0: * axis += a.ndim * if a.ndim < axis < 0: # <<<<<<<<<<<<<< * raise ValueError, "axis not in array" * if out is None: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2896; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_v_axis, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2896; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__Pyx_PyObject_IsTrue(__pyx_t_4)) { __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = PyObject_RichCompare(__pyx_v_axis, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2896; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2896; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2897 * axis += a.ndim * if a.ndim < axis < 0: * raise ValueError, "axis not in array" # <<<<<<<<<<<<<< * if out is None: * if dtype is None: */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_68), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2897; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; /* "ga4py/gain/core.pyx":2898 * if a.ndim < axis < 0: * raise ValueError, "axis not in array" * if out is None: # <<<<<<<<<<<<<< * if dtype is None: * dtype = a.dtype */ __pyx_t_3 = (__pyx_v_out == Py_None); __pyx_t_6 = (__pyx_t_3 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2899 * raise ValueError, "axis not in array" * if out is None: * if dtype is None: # <<<<<<<<<<<<<< * dtype = a.dtype * out = ndarray(a.shape, dtype=dtype) */ __pyx_t_6 = (__pyx_v_dtype == Py_None); __pyx_t_3 = (__pyx_t_6 != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2900 * if out is None: * if dtype is None: * dtype = a.dtype # <<<<<<<<<<<<<< * out = ndarray(a.shape, dtype=dtype) * if out.ndim == 1: */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2900; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF_SET(__pyx_v_dtype, __pyx_t_4); __pyx_t_4 = 0; goto __pyx_L8; } __pyx_L8:; /* "ga4py/gain/core.pyx":2901 * if dtype is None: * dtype = a.dtype * out = ndarray(a.shape, dtype=dtype) # <<<<<<<<<<<<<< * if out.ndim == 1: * # optimize the 1d accumulate */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2901; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2901; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2901; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2901; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_v_dtype) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2901; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2901; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_out, __pyx_t_2); __pyx_t_2 = 0; goto __pyx_L7; } __pyx_L7:; /* "ga4py/gain/core.pyx":2902 * dtype = a.dtype * out = ndarray(a.shape, dtype=dtype) * if out.ndim == 1: # <<<<<<<<<<<<<< * # optimize the 1d accumulate * if isinstance(out, ndarray): */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__ndim); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2902; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2902; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2902; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2904 * if out.ndim == 1: * # optimize the 1d accumulate * if isinstance(out, ndarray): # <<<<<<<<<<<<<< * ndout = out.access() * if ndout is not None: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2904; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyObject_IsInstance(__pyx_v_out, __pyx_t_1); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2904; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_6 = (__pyx_t_3 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":2905 * # optimize the 1d accumulate * if isinstance(out, ndarray): * ndout = out.access() # <<<<<<<<<<<<<< * if ndout is not None: * result = out.global_slice.get_key(*out.distribution()) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__access); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2905; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2905; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_ndout = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2906 * if isinstance(out, ndarray): * ndout = out.access() * if ndout is not None: # <<<<<<<<<<<<<< * result = out.global_slice.get_key(*out.distribution()) * lo,hi = result[0].start,result[0].stop */ __pyx_t_6 = (__pyx_v_ndout != Py_None); __pyx_t_3 = (__pyx_t_6 != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2907 * ndout = out.access() * if ndout is not None: * result = out.global_slice.get_key(*out.distribution()) # <<<<<<<<<<<<<< * lo,hi = result[0].start,result[0].stop * if is_distributed(a): */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2907; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__get_key); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2907; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__distribution); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2907; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2907; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PySequence_Tuple(__pyx_t_7); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2907; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2907; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_result = __pyx_t_7; __pyx_t_7 = 0; /* "ga4py/gain/core.pyx":2908 * if ndout is not None: * result = out.global_slice.get_key(*out.distribution()) * lo,hi = result[0].start,result[0].stop # <<<<<<<<<<<<<< * if is_distributed(a): * piece = a.get(result) */ __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_result, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__start); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_result, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__stop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_lo = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_hi = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2909 * result = out.global_slice.get_key(*out.distribution()) * lo,hi = result[0].start,result[0].stop * if is_distributed(a): # <<<<<<<<<<<<<< * piece = a.get(result) * else: */ __pyx_t_3 = (__pyx_f_5ga4py_4gain_4core_is_distributed(__pyx_v_a, 0) != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2910 * lo,hi = result[0].start,result[0].stop * if is_distributed(a): * piece = a.get(result) # <<<<<<<<<<<<<< * else: * piece = a[lo:hi] */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__get); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2910; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2910; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2910; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_piece = __pyx_t_7; __pyx_t_7 = 0; goto __pyx_L12; } /*else*/ { /* "ga4py/gain/core.pyx":2912 * piece = a.get(result) * else: * piece = a[lo:hi] # <<<<<<<<<<<<<< * self.func.accumulate(piece, out=ndout) * # probably more efficient to use allgather and exchange last */ __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_a, 0, 0, &__pyx_v_lo, &__pyx_v_hi, NULL, 0, 0, 1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2912; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_v_piece = __pyx_t_7; __pyx_t_7 = 0; } __pyx_L12:; /* "ga4py/gain/core.pyx":2913 * else: * piece = a[lo:hi] * self.func.accumulate(piece, out=ndout) # <<<<<<<<<<<<<< * # probably more efficient to use allgather and exchange last * # values among all procs. We also need ordering information, */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2913; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__accumulate); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2913; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2913; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_piece); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_piece); __Pyx_GIVEREF(__pyx_v_piece); __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2913; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__out), __pyx_v_ndout) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2913; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2913; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2917 * # values among all procs. We also need ordering information, * # so we exchange the 'lo' value. * everything = comm().allgather((ndout[-1],lo)) # <<<<<<<<<<<<<< * reduction = self.func.identity * for lvalue,llo in everything: */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2917; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2917; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__allgather); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2917; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_ndout, -1, sizeof(long), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2917; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2917; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2917; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_t_7)); __Pyx_GIVEREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __pyx_t_7 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2917; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_v_everything = __pyx_t_7; __pyx_t_7 = 0; /* "ga4py/gain/core.pyx":2918 * # so we exchange the 'lo' value. * everything = comm().allgather((ndout[-1],lo)) * reduction = self.func.identity # <<<<<<<<<<<<<< * for lvalue,llo in everything: * if lvalue is not None and llo < lo: */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2918; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__identity); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2918; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_reduction = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2919 * everything = comm().allgather((ndout[-1],lo)) * reduction = self.func.identity * for lvalue,llo in everything: # <<<<<<<<<<<<<< * if lvalue is not None and llo < lo: * reduction = self.func(reduction,lvalue) */ if (PyList_CheckExact(__pyx_v_everything) || PyTuple_CheckExact(__pyx_v_everything)) { __pyx_t_1 = __pyx_v_everything; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0; __pyx_t_9 = NULL; } else { __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_everything); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2919; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext; } for (;;) { if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_1)) { if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_7 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2919; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2919; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_1)) { if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2919; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2919; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_7 = __pyx_t_9(__pyx_t_1); if (unlikely(!__pyx_t_7)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2919; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_7); } if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) { PyObject* sequence = __pyx_t_7; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2919; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_2 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_2); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2919; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2919; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); #endif __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } else { Py_ssize_t index = -1; __pyx_t_10 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2919; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext; index = 0; __pyx_t_4 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_4)) goto __pyx_L15_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); index = 1; __pyx_t_2 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_2)) goto __pyx_L15_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2919; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_11 = NULL; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L16_unpacking_done; __pyx_L15_unpacking_failed:; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_11 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2919; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L16_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_lvalue, __pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF_SET(__pyx_v_llo, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2920 * reduction = self.func.identity * for lvalue,llo in everything: * if lvalue is not None and llo < lo: # <<<<<<<<<<<<<< * reduction = self.func(reduction,lvalue) * self.func(ndout,reduction,ndout) */ __pyx_t_3 = (__pyx_v_lvalue != Py_None); if (__pyx_t_3) { __pyx_t_7 = PyObject_RichCompare(__pyx_v_llo, __pyx_v_lo, Py_LT); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2920; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2920; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = __pyx_t_6; } else { __pyx_t_5 = __pyx_t_3; } if (__pyx_t_5) { /* "ga4py/gain/core.pyx":2921 * for lvalue,llo in everything: * if lvalue is not None and llo < lo: * reduction = self.func(reduction,lvalue) # <<<<<<<<<<<<<< * self.func(ndout,reduction,ndout) * else: */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2921; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2921; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_reduction); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_reduction); __Pyx_GIVEREF(__pyx_v_reduction); __Pyx_INCREF(__pyx_v_lvalue); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_lvalue); __Pyx_GIVEREF(__pyx_v_lvalue); __pyx_t_4 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2921; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_reduction, __pyx_t_4); __pyx_t_4 = 0; goto __pyx_L17; } __pyx_L17:; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2922 * if lvalue is not None and llo < lo: * reduction = self.func(reduction,lvalue) * self.func(ndout,reduction,ndout) # <<<<<<<<<<<<<< * else: * everything = comm().allgather((None,None)) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2922; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2922; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_ndout); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_ndout); __Pyx_GIVEREF(__pyx_v_ndout); __Pyx_INCREF(__pyx_v_reduction); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_reduction); __Pyx_GIVEREF(__pyx_v_reduction); __Pyx_INCREF(__pyx_v_ndout); PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_ndout); __Pyx_GIVEREF(__pyx_v_ndout); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2922; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L11; } /*else*/ { /* "ga4py/gain/core.pyx":2924 * self.func(ndout,reduction,ndout) * else: * everything = comm().allgather((None,None)) # <<<<<<<<<<<<<< * else: * raise NotImplementedError */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2924; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2924; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__allgather); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2924; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_76), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2924; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_everything = __pyx_t_4; __pyx_t_4 = 0; } __pyx_L11:; goto __pyx_L10; } /*else*/ { /* "ga4py/gain/core.pyx":2926 * everything = comm().allgather((None,None)) * else: * raise NotImplementedError # <<<<<<<<<<<<<< * else: * slicer_i = [slice(0,None,None)]*a.ndim */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L10:; goto __pyx_L9; } /*else*/ { /* "ga4py/gain/core.pyx":2928 * raise NotImplementedError * else: * slicer_i = [slice(0,None,None)]*a.ndim # <<<<<<<<<<<<<< * slicer_i_1 = [slice(0,None,None)]*a.ndim * axis_iterator = iter(xrange(a.shape[axis])) */ __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_k_tuple_77), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__ndim); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); { PyObject* __pyx_temp = PyNumber_InPlaceMultiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_temp)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_temp); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = __pyx_temp; } __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_slicer_i = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2929 * else: * slicer_i = [slice(0,None,None)]*a.ndim * slicer_i_1 = [slice(0,None,None)]*a.ndim # <<<<<<<<<<<<<< * axis_iterator = iter(xrange(a.shape[axis])) * # copy first loop iteration to 'out' */ __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_k_tuple_78), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2929; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__ndim); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2929; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2929; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); { PyObject* __pyx_temp = PyNumber_InPlaceMultiply(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_temp)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2929; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_temp); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = __pyx_temp; } __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_slicer_i_1 = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2930 * slicer_i = [slice(0,None,None)]*a.ndim * slicer_i_1 = [slice(0,None,None)]*a.ndim * axis_iterator = iter(xrange(a.shape[axis])) # <<<<<<<<<<<<<< * # copy first loop iteration to 'out' * slicer_i[axis] = axis_iterator.next() */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__shape); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2930; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyObject_GetItem(__pyx_t_4, __pyx_v_axis); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2930; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2930; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_xrange, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2930; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2930; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_axis_iterator = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2932 * axis_iterator = iter(xrange(a.shape[axis])) * # copy first loop iteration to 'out' * slicer_i[axis] = axis_iterator.next() # <<<<<<<<<<<<<< * out[slicer_i] = a[slicer_i] * # remaining loop iterations are appropriately accumulated */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_axis_iterator, __pyx_n_s__next); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2932; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2932; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyObject_SetItem(((PyObject *)__pyx_v_slicer_i), __pyx_v_axis, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2932; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2933 * # copy first loop iteration to 'out' * slicer_i[axis] = axis_iterator.next() * out[slicer_i] = a[slicer_i] # <<<<<<<<<<<<<< * # remaining loop iterations are appropriately accumulated * for i in axis_iterator: */ __pyx_t_2 = PyObject_GetItem(__pyx_v_a, ((PyObject *)__pyx_v_slicer_i)); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2933; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_v_out, ((PyObject *)__pyx_v_slicer_i), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2933; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":2935 * out[slicer_i] = a[slicer_i] * # remaining loop iterations are appropriately accumulated * for i in axis_iterator: # <<<<<<<<<<<<<< * slicer_i[axis] = i * slicer_i_1[axis] = i-1 */ if (PyList_CheckExact(__pyx_v_axis_iterator) || PyTuple_CheckExact(__pyx_v_axis_iterator)) { __pyx_t_2 = __pyx_v_axis_iterator; __Pyx_INCREF(__pyx_t_2); __pyx_t_8 = 0; __pyx_t_9 = NULL; } else { __pyx_t_8 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_axis_iterator); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2935; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext; } for (;;) { if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_2)) { if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_4); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2935; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2935; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_2)) { if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_8); __Pyx_INCREF(__pyx_t_4); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2935; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2935; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_4 = __pyx_t_9(__pyx_t_2); if (unlikely(!__pyx_t_4)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2935; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_4); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2936 * # remaining loop iterations are appropriately accumulated * for i in axis_iterator: * slicer_i[axis] = i # <<<<<<<<<<<<<< * slicer_i_1[axis] = i-1 * x = out[slicer_i_1] */ if (PyObject_SetItem(((PyObject *)__pyx_v_slicer_i), __pyx_v_axis, __pyx_v_i) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2936; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2937 * for i in axis_iterator: * slicer_i[axis] = i * slicer_i_1[axis] = i-1 # <<<<<<<<<<<<<< * x = out[slicer_i_1] * y = a[slicer_i] */ __pyx_t_4 = PyNumber_Subtract(__pyx_v_i, __pyx_int_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2937; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(((PyObject *)__pyx_v_slicer_i_1), __pyx_v_axis, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2937; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2938 * slicer_i[axis] = i * slicer_i_1[axis] = i-1 * x = out[slicer_i_1] # <<<<<<<<<<<<<< * y = a[slicer_i] * z = out[slicer_i] */ __pyx_t_4 = PyObject_GetItem(__pyx_v_out, ((PyObject *)__pyx_v_slicer_i_1)); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2938; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2939 * slicer_i_1[axis] = i-1 * x = out[slicer_i_1] * y = a[slicer_i] # <<<<<<<<<<<<<< * z = out[slicer_i] * self.__call__(x,y,z) */ __pyx_t_4 = PyObject_GetItem(__pyx_v_a, ((PyObject *)__pyx_v_slicer_i)); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2939; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_y, __pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2940 * x = out[slicer_i_1] * y = a[slicer_i] * z = out[slicer_i] # <<<<<<<<<<<<<< * self.__call__(x,y,z) * #self.__call__(out[slicer_i_1],a[slicer_i],out[slicer_i]) */ __pyx_t_4 = PyObject_GetItem(__pyx_v_out, ((PyObject *)__pyx_v_slicer_i)); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2940; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_z, __pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2941 * y = a[slicer_i] * z = out[slicer_i] * self.__call__(x,y,z) # <<<<<<<<<<<<<< * #self.__call__(out[slicer_i_1],a[slicer_i],out[slicer_i]) * return out */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s____call__); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2941; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2941; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_x); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_x); __Pyx_GIVEREF(__pyx_v_x); __Pyx_INCREF(__pyx_v_y); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_y); __Pyx_GIVEREF(__pyx_v_y); __Pyx_INCREF(__pyx_v_z); PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_z); __Pyx_GIVEREF(__pyx_v_z); __pyx_t_7 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2941; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __pyx_L9:; /* "ga4py/gain/core.pyx":2943 * self.__call__(x,y,z) * #self.__call__(out[slicer_i_1],a[slicer_i],out[slicer_i]) * return out # <<<<<<<<<<<<<< * * def outer(self, *args, **kwargs): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_out); __pyx_r = __pyx_v_out; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("ga4py.gain.core.ufunc.accumulate", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_ndout); __Pyx_XDECREF(__pyx_v_result); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XDECREF(__pyx_v_piece); __Pyx_XDECREF(__pyx_v_everything); __Pyx_XDECREF(__pyx_v_reduction); __Pyx_XDECREF(__pyx_v_lvalue); __Pyx_XDECREF(__pyx_v_llo); __Pyx_XDECREF(__pyx_v_slicer_i); __Pyx_XDECREF(__pyx_v_slicer_i_1); __Pyx_XDECREF(__pyx_v_axis_iterator); __Pyx_XDECREF(__pyx_v_i); __Pyx_XDECREF(__pyx_v_x); __Pyx_XDECREF(__pyx_v_y); __Pyx_XDECREF(__pyx_v_z); __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_axis); __Pyx_XDECREF(__pyx_v_dtype); __Pyx_XDECREF(__pyx_v_out); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_27outer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_5ufunc_27outer = {__Pyx_NAMESTR("outer"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_5ufunc_27outer, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_27outer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("outer (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "outer") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2945; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("outer", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2945; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ufunc.outer", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_5ufunc_26outer(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2945 * return out * * def outer(self, *args, **kwargs): # <<<<<<<<<<<<<< * if self.func.nin != 2: * raise ValueError, "outer product only supported for binary functions" */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_26outer(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("outer", 0); __Pyx_TraceCall("outer", __pyx_f[0], 2945); /* "ga4py/gain/core.pyx":2946 * * def outer(self, *args, **kwargs): * if self.func.nin != 2: # <<<<<<<<<<<<<< * raise ValueError, "outer product only supported for binary functions" * raise NotImplementedError */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__nin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_int_2, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2947 * def outer(self, *args, **kwargs): * if self.func.nin != 2: * raise ValueError, "outer product only supported for binary functions" # <<<<<<<<<<<<<< * raise NotImplementedError * */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_79), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2947; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":2948 * if self.func.nin != 2: * raise ValueError, "outer product only supported for binary functions" * raise NotImplementedError # <<<<<<<<<<<<<< * * def reduceat(self, *args, **kwargs): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2948; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ufunc.outer", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_29reduceat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_5ufunc_29reduceat = {__Pyx_NAMESTR("reduceat"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_5ufunc_29reduceat, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_5ufunc_29reduceat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_args = 0; CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("reduceat (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "reduceat") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2950; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("reduceat", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2950; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.core.ufunc.reduceat", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_5ufunc_28reduceat(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":2950 * raise NotImplementedError * * def reduceat(self, *args, **kwargs): # <<<<<<<<<<<<<< * if self.func.nin != 2: * raise ValueError, "reduceat only supported for binary functions" */ static PyObject *__pyx_pf_5ga4py_4gain_4core_5ufunc_28reduceat(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("reduceat", 0); __Pyx_TraceCall("reduceat", __pyx_f[0], 2950); /* "ga4py/gain/core.pyx":2951 * * def reduceat(self, *args, **kwargs): * if self.func.nin != 2: # <<<<<<<<<<<<<< * raise ValueError, "reduceat only supported for binary functions" * raise NotImplementedError */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__func); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2951; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__nin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2951; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_int_2, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2951; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2951; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":2952 * def reduceat(self, *args, **kwargs): * if self.func.nin != 2: * raise ValueError, "reduceat only supported for binary functions" # <<<<<<<<<<<<<< * raise NotImplementedError * */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_80), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2952; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":2953 * if self.func.nin != 2: * raise ValueError, "reduceat only supported for binary functions" * raise NotImplementedError # <<<<<<<<<<<<<< * * # unary ufuncs */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2953; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.ufunc.reduceat", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_base = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__base,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__base)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3081; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3081; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_base = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3081; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.flatiter.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter___init__(__pyx_self, __pyx_v_self, __pyx_v_base); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3081 * * """ * def __init__(self, base): # <<<<<<<<<<<<<< * self._base = base * self._index = 0 */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_base) { PyObject *__pyx_v_size = NULL; PyObject *__pyx_v_size_per_proc = NULL; PyObject *__pyx_v_remainder = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__init__", 0); __Pyx_TraceCall("__init__", __pyx_f[0], 3081); /* "ga4py/gain/core.pyx":3082 * """ * def __init__(self, base): * self._base = base # <<<<<<<<<<<<<< * self._index = 0 * self._values = None */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___base, __pyx_v_base) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3082; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3083 * def __init__(self, base): * self._base = base * self._index = 0 # <<<<<<<<<<<<<< * self._values = None * size = base.global_slice.size */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___index, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3083; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3084 * self._base = base * self._index = 0 * self._values = None # <<<<<<<<<<<<<< * size = base.global_slice.size * self.global_slice = util.MasterKey([size]) */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___values, Py_None) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3084; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3085 * self._index = 0 * self._values = None * size = base.global_slice.size # <<<<<<<<<<<<<< * self.global_slice = util.MasterKey([size]) * size_per_proc = size//nproc() */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_base, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3085; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3085; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_size = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":3086 * self._values = None * size = base.global_slice.size * self.global_slice = util.MasterKey([size]) # <<<<<<<<<<<<<< * size_per_proc = size//nproc() * remainder = size%nproc() # remainder gets distributed */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3086; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__MasterKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3086; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3086; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_size); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_v_size); __Pyx_GIVEREF(__pyx_v_size); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3086; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_2)); __Pyx_GIVEREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3086; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__global_slice, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3086; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":3087 * size = base.global_slice.size * self.global_slice = util.MasterKey([size]) * size_per_proc = size//nproc() # <<<<<<<<<<<<<< * remainder = size%nproc() # remainder gets distributed * if me() < remainder: */ __pyx_t_2 = PyInt_FromLong(__pyx_f_5ga4py_4gain_4core_nproc(0)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3087; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyNumber_FloorDivide(__pyx_v_size, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3087; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_size_per_proc = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3088 * self.global_slice = util.MasterKey([size]) * size_per_proc = size//nproc() * remainder = size%nproc() # remainder gets distributed # <<<<<<<<<<<<<< * if me() < remainder: * self._lo = [size_per_proc*me() + me()] */ __pyx_t_3 = PyInt_FromLong(__pyx_f_5ga4py_4gain_4core_nproc(0)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3088; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyNumber_Remainder(__pyx_v_size, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3088; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_remainder = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":3089 * size_per_proc = size//nproc() * remainder = size%nproc() # remainder gets distributed * if me() < remainder: # <<<<<<<<<<<<<< * self._lo = [size_per_proc*me() + me()] * self._hi = [size_per_proc*me() + me() + size_per_proc + 1] */ __pyx_t_2 = PyInt_FromLong(__pyx_f_5ga4py_4gain_4core_me(0)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3089; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_v_remainder, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3089; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3089; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_4) { /* "ga4py/gain/core.pyx":3090 * remainder = size%nproc() # remainder gets distributed * if me() < remainder: * self._lo = [size_per_proc*me() + me()] # <<<<<<<<<<<<<< * self._hi = [size_per_proc*me() + me() + size_per_proc + 1] * else: */ __pyx_t_3 = PyInt_FromLong(__pyx_f_5ga4py_4gain_4core_me(0)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3090; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyNumber_Multiply(__pyx_v_size_per_proc, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3090; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyInt_FromLong(__pyx_f_5ga4py_4gain_4core_me(0)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3090; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3090; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3090; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___lo, ((PyObject *)__pyx_t_3)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3090; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3091 * if me() < remainder: * self._lo = [size_per_proc*me() + me()] * self._hi = [size_per_proc*me() + me() + size_per_proc + 1] # <<<<<<<<<<<<<< * else: * self._lo = [size_per_proc*me() + remainder] */ __pyx_t_3 = PyInt_FromLong(__pyx_f_5ga4py_4gain_4core_me(0)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyNumber_Multiply(__pyx_v_size_per_proc, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyInt_FromLong(__pyx_f_5ga4py_4gain_4core_me(0)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_v_size_per_proc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___hi, ((PyObject *)__pyx_t_3)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":3093 * self._hi = [size_per_proc*me() + me() + size_per_proc + 1] * else: * self._lo = [size_per_proc*me() + remainder] # <<<<<<<<<<<<<< * self._hi = [size_per_proc*me() + remainder + size_per_proc] * # if lo,hi are the same, this indicates no data on this proc */ __pyx_t_3 = PyInt_FromLong(__pyx_f_5ga4py_4gain_4core_me(0)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyNumber_Multiply(__pyx_v_size_per_proc, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_v_remainder); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___lo, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":3094 * else: * self._lo = [size_per_proc*me() + remainder] * self._hi = [size_per_proc*me() + remainder + size_per_proc] # <<<<<<<<<<<<<< * # if lo,hi are the same, this indicates no data on this proc * if self._lo == self._hi: */ __pyx_t_2 = PyInt_FromLong(__pyx_f_5ga4py_4gain_4core_me(0)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3094; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyNumber_Multiply(__pyx_v_size_per_proc, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3094; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_v_remainder); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3094; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_v_size_per_proc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3094; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3094; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___hi, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3094; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; } __pyx_L3:; /* "ga4py/gain/core.pyx":3096 * self._hi = [size_per_proc*me() + remainder + size_per_proc] * # if lo,hi are the same, this indicates no data on this proc * if self._lo == self._hi: # <<<<<<<<<<<<<< * self._lo = [-1] * self._hi = [-1] */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___lo); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3096; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___hi); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3096; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3096; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3096; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_4) { /* "ga4py/gain/core.pyx":3097 * # if lo,hi are the same, this indicates no data on this proc * if self._lo == self._hi: * self._lo = [-1] # <<<<<<<<<<<<<< * self._hi = [-1] * */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3097; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_int_neg_1); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_int_neg_1); __Pyx_GIVEREF(__pyx_int_neg_1); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___lo, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3097; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3098 * if self._lo == self._hi: * self._lo = [-1] * self._hi = [-1] # <<<<<<<<<<<<<< * * def _get_base(self): */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3098; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_int_neg_1); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_int_neg_1); __Pyx_GIVEREF(__pyx_int_neg_1); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___hi, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3098; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; goto __pyx_L4; } __pyx_L4:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.flatiter.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_size); __Pyx_XDECREF(__pyx_v_size_per_proc); __Pyx_XDECREF(__pyx_v_remainder); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_3_get_base(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_3_get_base = {__Pyx_NAMESTR("_get_base"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_3_get_base, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_3_get_base(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_base (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_2_get_base(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3100 * self._hi = [-1] * * def _get_base(self): # <<<<<<<<<<<<<< * return self._base * base = property(_get_base) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_2_get_base(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_base", 0); __Pyx_TraceCall("_get_base", __pyx_f[0], 3100); /* "ga4py/gain/core.pyx":3101 * * def _get_base(self): * return self._base # <<<<<<<<<<<<<< * base = property(_get_base) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___base); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.flatiter._get_base", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_5_get_coords(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_5_get_coords = {__Pyx_NAMESTR("_get_coords"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_5_get_coords, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_5_get_coords(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_coords (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_4_get_coords(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3104 * base = property(_get_base) * * def _get_coords(self): # <<<<<<<<<<<<<< * return np.unravel_index(self._index, self._base.shape) * coords = property(_get_coords) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_4_get_coords(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_coords", 0); __Pyx_TraceCall("_get_coords", __pyx_f[0], 3104); /* "ga4py/gain/core.pyx":3105 * * def _get_coords(self): * return np.unravel_index(self._index, self._base.shape) # <<<<<<<<<<<<<< * coords = property(_get_coords) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__unravel_index); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___index); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___base); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__shape); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_1 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.core.flatiter._get_coords", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_7copy(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_8flatiter_6copy[] = "Get a copy of the iterator as a 1-D array.\n\n Examples\n --------\n >>> x = np.arange(6).reshape(2, 3)\n >>> x\n array([[0, 1, 2],\n [3, 4, 5]])\n >>> fl = x.flat\n >>> fl.copy()\n array([0, 1, 2, 3, 4, 5])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_7copy = {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_7copy, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_8flatiter_6copy)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_7copy(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("copy (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_6copy(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3108 * coords = property(_get_coords) * * def copy(self): # <<<<<<<<<<<<<< * """Get a copy of the iterator as a 1-D array. * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_6copy(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("copy", 0); __Pyx_TraceCall("copy", __pyx_f[0], 3108); /* "ga4py/gain/core.pyx":3122 * * """ * return self._base.flatten() # <<<<<<<<<<<<<< * * def _get_index(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___base); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__flatten); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.flatiter.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_9_get_index(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_9_get_index = {__Pyx_NAMESTR("_get_index"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_9_get_index, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_9_get_index(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_index (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_8_get_index(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3124 * return self._base.flatten() * * def _get_index(self): # <<<<<<<<<<<<<< * return self._index * index = property(_get_index) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_8_get_index(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_index", 0); __Pyx_TraceCall("_get_index", __pyx_f[0], 3124); /* "ga4py/gain/core.pyx":3125 * * def _get_index(self): * return self._index # <<<<<<<<<<<<<< * index = property(_get_index) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___index); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.flatiter._get_index", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_11distribution(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_11distribution = {__Pyx_NAMESTR("distribution"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_11distribution, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_11distribution(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("distribution (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_10distribution(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3128 * index = property(_get_index) * * def distribution(self): # <<<<<<<<<<<<<< * return self._lo,self._hi * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_10distribution(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("distribution", 0); __Pyx_TraceCall("distribution", __pyx_f[0], 3128); /* "ga4py/gain/core.pyx":3129 * * def distribution(self): * return self._lo,self._hi # <<<<<<<<<<<<<< * * def owns(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___lo); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___hi); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_r = ((PyObject *)__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.flatiter.distribution", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_13owns(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_13owns = {__Pyx_NAMESTR("owns"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_13owns, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_13owns(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("owns (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_12owns(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3131 * return self._lo,self._hi * * def owns(self): # <<<<<<<<<<<<<< * return self._hi[0]>=0 * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_12owns(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("owns", 0); __Pyx_TraceCall("owns", __pyx_f[0], 3131); /* "ga4py/gain/core.pyx":3132 * * def owns(self): * return self._hi[0]>=0 # <<<<<<<<<<<<<< * * def get(self, key=None): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___hi); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.flatiter.owns", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_15get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_15get = {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_15get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_15get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_key = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/core.pyx":3134 * return self._hi[0]>=0 * * def get(self, key=None): # <<<<<<<<<<<<<< * # THIS OPERATION IS ONE-SIDED * # we expect key to be a single value or a slice, but might also be an */ values[1] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_key = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("get", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.flatiter.get", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_14get(__pyx_self, __pyx_v_self, __pyx_v_key); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_14get(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) { PyObject *__pyx_v_shape = NULL; PyObject *__pyx_v_i = NULL; PyObject *__pyx_v_index = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; PyObject *__pyx_t_6 = NULL; Py_ssize_t __pyx_t_7; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get", 0); __Pyx_TraceCall("get", __pyx_f[0], 3134); __Pyx_INCREF(__pyx_v_key); /* "ga4py/gain/core.pyx":3138 * # we expect key to be a single value or a slice, but might also be an * # iterable of length 1 * if key is None: # <<<<<<<<<<<<<< * # TODO this doesn't feel right -- communicate and then a local copy * # operation? The answer is correct, but seems like too much extra */ __pyx_t_1 = (__pyx_v_key == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":3142 * # operation? The answer is correct, but seems like too much extra * # work. * return self._base.get().flatten() # <<<<<<<<<<<<<< * if isinstance(key, (list,tuple)): * key = key[0] */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___base); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__get); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__flatten); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":3143 * # work. * return self._base.get().flatten() * if isinstance(key, (list,tuple)): # <<<<<<<<<<<<<< * key = key[0] * if isinstance(key, (slice,util.RangeKey)): */ __Pyx_INCREF(__pyx_v_key); __pyx_t_3 = __pyx_v_key; __pyx_t_2 = PyList_Check(__pyx_t_3); if (!__pyx_t_2) { __pyx_t_1 = PyTuple_Check(__pyx_t_3); __pyx_t_5 = __pyx_t_1; } else { __pyx_t_5 = __pyx_t_2; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = (__pyx_t_5 != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":3144 * return self._base.get().flatten() * if isinstance(key, (list,tuple)): * key = key[0] # <<<<<<<<<<<<<< * if isinstance(key, (slice,util.RangeKey)): * # get shape of base's global_slice */ __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_key, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3144; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_3); __pyx_t_3 = 0; goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/core.pyx":3145 * if isinstance(key, (list,tuple)): * key = key[0] * if isinstance(key, (slice,util.RangeKey)): # <<<<<<<<<<<<<< * # get shape of base's global_slice * shape = self._base.global_slice.shape */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__RangeKey); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)((PyObject*)(&PySlice_Type)))); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)((PyObject*)(&PySlice_Type)))); __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PySlice_Type)))); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_2 = PyObject_IsInstance(__pyx_v_key, ((PyObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_5 = (__pyx_t_2 != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":3147 * if isinstance(key, (slice,util.RangeKey)): * # get shape of base's global_slice * shape = self._base.global_slice.shape # <<<<<<<<<<<<<< * # create index coordinates * if isinstance(key, util.RangeKey): */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___base); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__shape); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_shape = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3149 * shape = self._base.global_slice.shape * # create index coordinates * if isinstance(key, util.RangeKey): # <<<<<<<<<<<<<< * key = key.pyobj() * i = (np.indices(shape).reshape(len(shape),-1).T)[key] */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__RangeKey); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = PyObject_IsInstance(__pyx_v_key, __pyx_t_4); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_2 = (__pyx_t_5 != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":3150 * # create index coordinates * if isinstance(key, util.RangeKey): * key = key.pyobj() # <<<<<<<<<<<<<< * i = (np.indices(shape).reshape(len(shape),-1).T)[key] * return self._base.gather(i) */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s__pyobj); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_3); __pyx_t_3 = 0; goto __pyx_L6; } __pyx_L6:; /* "ga4py/gain/core.pyx":3151 * if isinstance(key, util.RangeKey): * key = key.pyobj() * i = (np.indices(shape).reshape(len(shape),-1).T)[key] # <<<<<<<<<<<<<< * return self._base.gather(i) * else: */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__indices); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __pyx_t_6 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__reshape); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = PyObject_Length(__pyx_v_shape); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __Pyx_INCREF(__pyx_int_neg_1); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_neg_1); __Pyx_GIVEREF(__pyx_int_neg_1); __pyx_t_6 = 0; __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__T); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyObject_GetItem(__pyx_t_4, __pyx_v_key); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_i = __pyx_t_6; __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":3152 * key = key.pyobj() * i = (np.indices(shape).reshape(len(shape),-1).T)[key] * return self._base.gather(i) # <<<<<<<<<<<<<< * else: * key = long(key) */ __Pyx_XDECREF(__pyx_r); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___base); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__gather); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_i); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_i); __Pyx_GIVEREF(__pyx_v_i); __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; goto __pyx_L5; } /*else*/ { /* "ga4py/gain/core.pyx":3154 * return self._base.gather(i) * else: * key = long(key) # <<<<<<<<<<<<<< * index = np.unravel_index(key, self._base.shape) * return self._base.gather(index) */ __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_key); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_key); __Pyx_GIVEREF(__pyx_v_key); __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)(&PyLong_Type))), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":3155 * else: * key = long(key) * index = np.unravel_index(key, self._base.shape) # <<<<<<<<<<<<<< * return self._base.gather(index) * */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__unravel_index); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___base); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__shape); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_key); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_key); __Pyx_GIVEREF(__pyx_v_key); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __pyx_v_index = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3156 * key = long(key) * index = np.unravel_index(key, self._base.shape) * return self._base.gather(index) # <<<<<<<<<<<<<< * * def allget(self, key=None): */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___base); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__gather); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_index); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_index); __Pyx_GIVEREF(__pyx_v_index); __pyx_t_3 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; } __pyx_L5:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.core.flatiter.get", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_shape); __Pyx_XDECREF(__pyx_v_i); __Pyx_XDECREF(__pyx_v_index); __Pyx_XDECREF(__pyx_v_key); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_17allget(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_8flatiter_16allget[] = "Like get(), but when all processes need the same piece.\n \n This operation is collective.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_17allget = {__Pyx_NAMESTR("allget"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_17allget, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_8flatiter_16allget)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_17allget(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_key = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("allget (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/core.pyx":3158 * return self._base.gather(index) * * def allget(self, key=None): # <<<<<<<<<<<<<< * """Like get(), but when all processes need the same piece. * */ values[1] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "allget") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3158; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_key = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("allget", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3158; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.flatiter.allget", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_16allget(__pyx_self, __pyx_v_self, __pyx_v_key); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_16allget(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) { PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("allget", 0); __Pyx_TraceCall("allget", __pyx_f[0], 3158); /* "ga4py/gain/core.pyx":3166 * # TODO it's not clear whether this approach is better than having all * # P processors ga.get() the same piece. * if not me(): # <<<<<<<<<<<<<< * result = self.get(key) * return comm().bcast(result) */ __pyx_t_1 = ((!(__pyx_f_5ga4py_4gain_4core_me(0) != 0)) != 0); if (__pyx_t_1) { /* "ga4py/gain/core.pyx":3167 * # P processors ga.get() the same piece. * if not me(): * result = self.get(key) # <<<<<<<<<<<<<< * return comm().bcast(result) * else: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__get); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_key); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_key); __Pyx_GIVEREF(__pyx_v_key); __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_result = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3168 * if not me(): * result = self.get(key) * return comm().bcast(result) # <<<<<<<<<<<<<< * else: * return comm().bcast() */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__bcast); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":3170 * return comm().bcast(result) * else: * return comm().bcast() # <<<<<<<<<<<<<< * * def __getitem__(self, key): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__bcast); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.core.flatiter.allget", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_19__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_19__getitem__ = {__Pyx_NAMESTR("__getitem__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_19__getitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_19__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_key = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3172; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__getitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3172; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_key = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3172; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.flatiter.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_18__getitem__(__pyx_self, __pyx_v_self, __pyx_v_key); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3172 * return comm().bcast() * * def __getitem__(self, key): # <<<<<<<<<<<<<< * # THIS OPERATION IS COLLECTIVE * sync() */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_18__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; Py_ssize_t __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__getitem__", 0); __Pyx_TraceCall("__getitem__", __pyx_f[0], 3172); /* "ga4py/gain/core.pyx":3174 * def __getitem__(self, key): * # THIS OPERATION IS COLLECTIVE * sync() # <<<<<<<<<<<<<< * if isinstance(key, (list,tuple)): * if len(key) > 1: */ __pyx_t_1 = __pyx_f_5ga4py_4gain_4core_sync(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3175 * # THIS OPERATION IS COLLECTIVE * sync() * if isinstance(key, (list,tuple)): # <<<<<<<<<<<<<< * if len(key) > 1: * raise IndexError, "unsupported iterator index" */ __Pyx_INCREF(__pyx_v_key); __pyx_t_1 = __pyx_v_key; __pyx_t_2 = PyList_Check(__pyx_t_1); if (!__pyx_t_2) { __pyx_t_3 = PyTuple_Check(__pyx_t_1); __pyx_t_4 = __pyx_t_3; } else { __pyx_t_4 = __pyx_t_2; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = (__pyx_t_4 != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":3176 * sync() * if isinstance(key, (list,tuple)): * if len(key) > 1: # <<<<<<<<<<<<<< * raise IndexError, "unsupported iterator index" * # TODO optimize the gather since this is a collective */ __pyx_t_5 = PyObject_Length(__pyx_v_key); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = ((__pyx_t_5 > 1) != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":3177 * if isinstance(key, (list,tuple)): * if len(key) > 1: * raise IndexError, "unsupported iterator index" # <<<<<<<<<<<<<< * # TODO optimize the gather since this is a collective * return self.allget(key) */ __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_kp_s_81), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3177; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L4; } __pyx_L4:; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":3179 * raise IndexError, "unsupported iterator index" * # TODO optimize the gather since this is a collective * return self.allget(key) # <<<<<<<<<<<<<< * * def __len__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__allget); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_key); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_key); __Pyx_GIVEREF(__pyx_v_key); __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __pyx_r = __pyx_t_7; __pyx_t_7 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("ga4py.gain.core.flatiter.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_21__len__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_21__len__ = {__Pyx_NAMESTR("__len__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_21__len__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_21__len__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_20__len__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3181 * return self.allget(key) * * def __len__(self): # <<<<<<<<<<<<<< * return self.global_slice.size * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_20__len__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__len__", 0); __Pyx_TraceCall("__len__", __pyx_f[0], 3181); /* "ga4py/gain/core.pyx":3182 * * def __len__(self): * return self.global_slice.size # <<<<<<<<<<<<<< * * def put(self, key, value): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__size); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.core.flatiter.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_23put(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_23put = {__Pyx_NAMESTR("put"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_23put, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_23put(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_key = 0; PyObject *__pyx_v_value = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("put (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,&__pyx_n_s__value,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "put") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_self = values[0]; __pyx_v_key = values[1]; __pyx_v_value = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("put", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.flatiter.put", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_22put(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_value); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3184 * return self.global_slice.size * * def put(self, key, value): # <<<<<<<<<<<<<< * # THIS OPERATION IS ONE-SIDED * # we expect key to be a single value or a slice, but might also be an */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_22put(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value) { PyObject *__pyx_v_shape = NULL; PyObject *__pyx_v_i = NULL; PyObject *__pyx_v_values = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; Py_ssize_t __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; Py_ssize_t __pyx_t_10; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("put", 0); __Pyx_TraceCall("put", __pyx_f[0], 3184); __Pyx_INCREF(__pyx_v_key); __Pyx_INCREF(__pyx_v_value); /* "ga4py/gain/core.pyx":3188 * # we expect key to be a single value or a slice, but might also be an * # iterable of length 1 * if isinstance(key, (list,tuple)): # <<<<<<<<<<<<<< * key = key[0] * if isinstance(key, (slice,util.RangeKey)): */ __Pyx_INCREF(__pyx_v_key); __pyx_t_1 = __pyx_v_key; __pyx_t_2 = PyList_Check(__pyx_t_1); if (!__pyx_t_2) { __pyx_t_3 = PyTuple_Check(__pyx_t_1); __pyx_t_4 = __pyx_t_3; } else { __pyx_t_4 = __pyx_t_2; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = (__pyx_t_4 != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":3189 * # iterable of length 1 * if isinstance(key, (list,tuple)): * key = key[0] # <<<<<<<<<<<<<< * if isinstance(key, (slice,util.RangeKey)): * if isinstance(key, util.RangeKey): */ __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_key, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":3190 * if isinstance(key, (list,tuple)): * key = key[0] * if isinstance(key, (slice,util.RangeKey)): # <<<<<<<<<<<<<< * if isinstance(key, util.RangeKey): * key = key.pyobj() */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__RangeKey); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)((PyObject*)(&PySlice_Type)))); PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)((PyObject*)(&PySlice_Type)))); __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PySlice_Type)))); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_2 = PyObject_IsInstance(__pyx_v_key, ((PyObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_4 = (__pyx_t_2 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":3191 * key = key[0] * if isinstance(key, (slice,util.RangeKey)): * if isinstance(key, util.RangeKey): # <<<<<<<<<<<<<< * key = key.pyobj() * # get shape of global_slice */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3191; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__RangeKey); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3191; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = PyObject_IsInstance(__pyx_v_key, __pyx_t_5); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3191; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_2 = (__pyx_t_4 != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":3192 * if isinstance(key, (slice,util.RangeKey)): * if isinstance(key, util.RangeKey): * key = key.pyobj() # <<<<<<<<<<<<<< * # get shape of global_slice * shape = self._base.global_slice.shape */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s__pyobj); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3192; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3192; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L5; } __pyx_L5:; /* "ga4py/gain/core.pyx":3194 * key = key.pyobj() * # get shape of global_slice * shape = self._base.global_slice.shape # <<<<<<<<<<<<<< * # create index coordinates * i = (np.indices(shape).reshape(len(shape),-1).T)[key] */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___base); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3194; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3194; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3194; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_shape = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3196 * shape = self._base.global_slice.shape * # create index coordinates * i = (np.indices(shape).reshape(len(shape),-1).T)[key] # <<<<<<<<<<<<<< * value = asarray(value) * values = None */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__indices); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__reshape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = PyObject_Length(__pyx_v_shape); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __Pyx_INCREF(__pyx_int_neg_1); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_neg_1); __Pyx_GIVEREF(__pyx_int_neg_1); __pyx_t_6 = 0; __pyx_t_6 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__T); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyObject_GetItem(__pyx_t_5, __pyx_v_key); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_i = __pyx_t_6; __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":3197 * # create index coordinates * i = (np.indices(shape).reshape(len(shape),-1).T)[key] * value = asarray(value) # <<<<<<<<<<<<<< * values = None * if value.size == 1: */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__asarray); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_value); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __pyx_t_1 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3198 * i = (np.indices(shape).reshape(len(shape),-1).T)[key] * value = asarray(value) * values = None # <<<<<<<<<<<<<< * if value.size == 1: * values = np.zeros(len(i), dtype=self._base.dtype) */ __Pyx_INCREF(Py_None); __pyx_v_values = Py_None; /* "ga4py/gain/core.pyx":3199 * value = asarray(value) * values = None * if value.size == 1: # <<<<<<<<<<<<<< * values = np.zeros(len(i), dtype=self._base.dtype) * values[:] = value */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_2) { /* "ga4py/gain/core.pyx":3200 * values = None * if value.size == 1: * values = np.zeros(len(i), dtype=self._base.dtype) # <<<<<<<<<<<<<< * values[:] = value * else: */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__zeros); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = PyObject_Length(__pyx_v_i); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___base); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__dtype); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_values, __pyx_t_9); __pyx_t_9 = 0; /* "ga4py/gain/core.pyx":3201 * if value.size == 1: * values = np.zeros(len(i), dtype=self._base.dtype) * values[:] = value # <<<<<<<<<<<<<< * else: * assert value.ndim == 1 and len(value) == len(i) */ if (__Pyx_PyObject_SetSlice(__pyx_v_values, __pyx_v_value, 0, 0, NULL, NULL, &__pyx_k_slice_82, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } /*else*/ { /* "ga4py/gain/core.pyx":3203 * values[:] = value * else: * assert value.ndim == 1 and len(value) == len(i) # <<<<<<<<<<<<<< * if is_distributed(value): * values = value.get() */ #ifndef CYTHON_WITHOUT_ASSERTIONS __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s__ndim); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = PyObject_RichCompare(__pyx_t_9, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_2) { __pyx_t_7 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_10 = PyObject_Length(__pyx_v_i); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = (__pyx_t_7 == __pyx_t_10); __pyx_t_3 = __pyx_t_4; } else { __pyx_t_3 = __pyx_t_2; } if (unlikely(!__pyx_t_3)) { PyErr_SetNone(PyExc_AssertionError); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #endif /* "ga4py/gain/core.pyx":3204 * else: * assert value.ndim == 1 and len(value) == len(i) * if is_distributed(value): # <<<<<<<<<<<<<< * values = value.get() * else: */ __pyx_t_3 = (__pyx_f_5ga4py_4gain_4core_is_distributed(__pyx_v_value, 0) != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":3205 * assert value.ndim == 1 and len(value) == len(i) * if is_distributed(value): * values = value.get() # <<<<<<<<<<<<<< * else: * values = value */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s__get); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_values, __pyx_t_9); __pyx_t_9 = 0; goto __pyx_L7; } /*else*/ { /* "ga4py/gain/core.pyx":3207 * values = value.get() * else: * values = value # <<<<<<<<<<<<<< * ga.scatter(self._base.handle, values, i) * else: */ __Pyx_INCREF(__pyx_v_value); __Pyx_DECREF_SET(__pyx_v_values, __pyx_v_value); } __pyx_L7:; } __pyx_L6:; /* "ga4py/gain/core.pyx":3208 * else: * values = value * ga.scatter(self._base.handle, values, i) # <<<<<<<<<<<<<< * else: * key = long(key) */ __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s__scatter); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___base); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s__handle); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_values); PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_values); __Pyx_GIVEREF(__pyx_v_values); __Pyx_INCREF(__pyx_v_i); PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_v_i); __Pyx_GIVEREF(__pyx_v_i); __pyx_t_6 = 0; __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L4; } /*else*/ { /* "ga4py/gain/core.pyx":3210 * ga.scatter(self._base.handle, values, i) * else: * key = long(key) # <<<<<<<<<<<<<< * i = np.unravel_index(key, self._base.shape) * ga.scatter(self._base.handle, value, i) */ __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_key); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_key); __Pyx_GIVEREF(__pyx_v_key); __pyx_t_9 = PyObject_Call(((PyObject *)((PyObject*)(&PyLong_Type))), ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_9); __pyx_t_9 = 0; /* "ga4py/gain/core.pyx":3211 * else: * key = long(key) * i = np.unravel_index(key, self._base.shape) # <<<<<<<<<<<<<< * ga.scatter(self._base.handle, value, i) * */ __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s__unravel_index); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___base); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s__shape); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_INCREF(__pyx_v_key); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_key); __Pyx_GIVEREF(__pyx_v_key); PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; __pyx_v_i = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":3212 * key = long(key) * i = np.unravel_index(key, self._base.shape) * ga.scatter(self._base.handle, value, i) # <<<<<<<<<<<<<< * * def __setitem__(self, key, value): */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__scatter); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___base); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__handle); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_value); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __Pyx_INCREF(__pyx_v_i); PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_i); __Pyx_GIVEREF(__pyx_v_i); __pyx_t_6 = 0; __pyx_t_6 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } __pyx_L4:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("ga4py.gain.core.flatiter.put", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_shape); __Pyx_XDECREF(__pyx_v_i); __Pyx_XDECREF(__pyx_v_values); __Pyx_XDECREF(__pyx_v_key); __Pyx_XDECREF(__pyx_v_value); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_25__setitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_25__setitem__ = {__Pyx_NAMESTR("__setitem__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_25__setitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_25__setitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_key = 0; PyObject *__pyx_v_value = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,&__pyx_n_s__value,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3214; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3214; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__setitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3214; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_self = values[0]; __pyx_v_key = values[1]; __pyx_v_value = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__setitem__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3214; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.flatiter.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_24__setitem__(__pyx_self, __pyx_v_self, __pyx_v_key, __pyx_v_value); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3214 * ga.scatter(self._base.handle, value, i) * * def __setitem__(self, key, value): # <<<<<<<<<<<<<< * # THIS OPERATION IS COLLECTIVE * sync() */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_24__setitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value) { PyObject *__pyx_v_global_slice = NULL; PyObject *__pyx_v_my_range = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_t_4; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; int __pyx_t_10; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__setitem__", 0); __Pyx_TraceCall("__setitem__", __pyx_f[0], 3214); __Pyx_INCREF(__pyx_v_value); /* "ga4py/gain/core.pyx":3216 * def __setitem__(self, key, value): * # THIS OPERATION IS COLLECTIVE * sync() # <<<<<<<<<<<<<< * if self.owns(): * global_slice = self.global_slice[key] */ __pyx_t_1 = __pyx_f_5ga4py_4gain_4core_sync(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3217 * # THIS OPERATION IS COLLECTIVE * sync() * if self.owns(): # <<<<<<<<<<<<<< * global_slice = self.global_slice[key] * if isinstance(key, (slice,util.RangeKey)): */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__owns); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_3) { /* "ga4py/gain/core.pyx":3218 * sync() * if self.owns(): * global_slice = self.global_slice[key] # <<<<<<<<<<<<<< * if isinstance(key, (slice,util.RangeKey)): * try: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_GetItem(__pyx_t_2, __pyx_v_key); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_global_slice = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3219 * if self.owns(): * global_slice = self.global_slice[key] * if isinstance(key, (slice,util.RangeKey)): # <<<<<<<<<<<<<< * try: * my_range = global_slice.bound_by_lohi(self._lo,self._hi) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__util); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__RangeKey); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)((PyObject*)(&PySlice_Type)))); PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)((PyObject*)(&PySlice_Type)))); __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PySlice_Type)))); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = PyObject_IsInstance(__pyx_v_key, ((PyObject *)__pyx_t_1)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { /* "ga4py/gain/core.pyx":3220 * global_slice = self.global_slice[key] * if isinstance(key, (slice,util.RangeKey)): * try: # <<<<<<<<<<<<<< * my_range = global_slice.bound_by_lohi(self._lo,self._hi) * except IndexError: */ { __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); /*try:*/ { /* "ga4py/gain/core.pyx":3221 * if isinstance(key, (slice,util.RangeKey)): * try: * my_range = global_slice.bound_by_lohi(self._lo,self._hi) # <<<<<<<<<<<<<< * except IndexError: * sync() */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_global_slice, __pyx_n_s__bound_by_lohi); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L5_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___lo); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L5_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___hi); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L5_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L5_error;} __Pyx_GOTREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_8); __Pyx_GIVEREF(__pyx_t_8); __pyx_t_2 = 0; __pyx_t_8 = 0; __pyx_t_8 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L5_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; __pyx_v_my_range = __pyx_t_8; __pyx_t_8 = 0; } __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L12_try_end; __pyx_L5_error:; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; /* "ga4py/gain/core.pyx":3222 * try: * my_range = global_slice.bound_by_lohi(self._lo,self._hi) * except IndexError: # <<<<<<<<<<<<<< * sync() * return */ __pyx_t_10 = PyErr_ExceptionMatches(__pyx_builtin_IndexError); if (__pyx_t_10) { __Pyx_AddTraceback("ga4py.gain.core.flatiter.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3222; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_GOTREF(__pyx_t_9); __Pyx_GOTREF(__pyx_t_1); /* "ga4py/gain/core.pyx":3223 * my_range = global_slice.bound_by_lohi(self._lo,self._hi) * except IndexError: * sync() # <<<<<<<<<<<<<< * return * value = asarray(value) */ __pyx_t_2 = __pyx_f_5ga4py_4gain_4core_sync(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3223; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":3224 * except IndexError: * sync() * return # <<<<<<<<<<<<<< * value = asarray(value) * if value.ndim == 1: */ __Pyx_XDECREF(__pyx_r); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L8_except_return; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L6_exception_handled; } __pyx_L7_except_error:; __Pyx_XGIVEREF(__pyx_t_5); __Pyx_XGIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); goto __pyx_L1_error; __pyx_L8_except_return:; __Pyx_XGIVEREF(__pyx_t_5); __Pyx_XGIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); goto __pyx_L0; __pyx_L6_exception_handled:; __Pyx_XGIVEREF(__pyx_t_5); __Pyx_XGIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); __pyx_L12_try_end:; } /* "ga4py/gain/core.pyx":3225 * sync() * return * value = asarray(value) # <<<<<<<<<<<<<< * if value.ndim == 1: * self.put(my_range, value[my_range]) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3225; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3225; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_INCREF(__pyx_v_value); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __pyx_t_8 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3225; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_8); __pyx_t_8 = 0; /* "ga4py/gain/core.pyx":3226 * return * value = asarray(value) * if value.ndim == 1: # <<<<<<<<<<<<<< * self.put(my_range, value[my_range]) * else: */ __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s__ndim); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3226; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = PyObject_RichCompare(__pyx_t_8, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3226; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3226; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (__pyx_t_4) { /* "ga4py/gain/core.pyx":3227 * value = asarray(value) * if value.ndim == 1: * self.put(my_range, value[my_range]) # <<<<<<<<<<<<<< * else: * self.put(my_range, value) */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__put); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_8 = PyObject_GetItem(__pyx_v_value, __pyx_v_my_range); if (!__pyx_t_8) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_my_range); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_my_range); __Pyx_GIVEREF(__pyx_v_my_range); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_8); __Pyx_GIVEREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L15; } /*else*/ { /* "ga4py/gain/core.pyx":3229 * self.put(my_range, value[my_range]) * else: * self.put(my_range, value) # <<<<<<<<<<<<<< * else: * self.put(key, value) */ __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__put); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3229; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3229; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_my_range); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_my_range); __Pyx_GIVEREF(__pyx_v_my_range); __Pyx_INCREF(__pyx_v_value); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __pyx_t_9 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3229; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } __pyx_L15:; goto __pyx_L4; } /*else*/ { /* "ga4py/gain/core.pyx":3231 * self.put(my_range, value) * else: * self.put(key, value) # <<<<<<<<<<<<<< * sync() * */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__put); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_key); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_key); __Pyx_GIVEREF(__pyx_v_key); __Pyx_INCREF(__pyx_v_value); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __pyx_t_8 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } __pyx_L4:; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":3232 * else: * self.put(key, value) * sync() # <<<<<<<<<<<<<< * * def next(self): */ __pyx_t_8 = __pyx_f_5ga4py_4gain_4core_sync(0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3232; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("ga4py.gain.core.flatiter.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_global_slice); __Pyx_XDECREF(__pyx_v_my_range); __Pyx_XDECREF(__pyx_v_value); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_27next(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_27next = {__Pyx_NAMESTR("next"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_27next, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_27next(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("next (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_26next(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3234 * sync() * * def next(self): # <<<<<<<<<<<<<< * if self._index < self._len: * tmp = self.base[self.coords] */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_26next(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_tmp = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("next", 0); __Pyx_TraceCall("next", __pyx_f[0], 3234); /* "ga4py/gain/core.pyx":3235 * * def next(self): * if self._index < self._len: # <<<<<<<<<<<<<< * tmp = self.base[self.coords] * self._index += 1 */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___index); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3235; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___len); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3235; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3235; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3235; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_4) { /* "ga4py/gain/core.pyx":3236 * def next(self): * if self._index < self._len: * tmp = self.base[self.coords] # <<<<<<<<<<<<<< * self._index += 1 * return tmp */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__base); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3236; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__coords); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3236; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_GetItem(__pyx_t_3, __pyx_t_2); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3236; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_tmp = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3237 * if self._index < self._len: * tmp = self.base[self.coords] * self._index += 1 # <<<<<<<<<<<<<< * return tmp * else: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___index); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___index, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":3238 * tmp = self.base[self.coords] * self._index += 1 * return tmp # <<<<<<<<<<<<<< * else: * raise StopIteration */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_tmp); __pyx_r = __pyx_v_tmp; goto __pyx_L0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":3240 * return tmp * else: * raise StopIteration # <<<<<<<<<<<<<< * * def access(self): */ __Pyx_Raise(__pyx_builtin_StopIteration, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3240; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.flatiter.next", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_tmp); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_29access(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_8flatiter_28access[] = "Return a copy of a 'local' portion."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_29access = {__Pyx_NAMESTR("access"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_29access, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_8flatiter_28access)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_29access(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("access (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_28access(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3242 * raise StopIteration * * def access(self): # <<<<<<<<<<<<<< * """Return a copy of a 'local' portion.""" * if self._values is not None: */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_28access(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *(*__pyx_t_7)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("access", 0); __Pyx_TraceCall("access", __pyx_f[0], 3242); /* "ga4py/gain/core.pyx":3244 * def access(self): * """Return a copy of a 'local' portion.""" * if self._values is not None: # <<<<<<<<<<<<<< * raise ValueError, "call release or release_update before access" * if not self.owns(): */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___values); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__pyx_t_1 != Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":3245 * """Return a copy of a 'local' portion.""" * if self._values is not None: * raise ValueError, "call release or release_update before access" # <<<<<<<<<<<<<< * if not self.owns(): * self._values = None */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_83), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":3246 * if self._values is not None: * raise ValueError, "call release or release_update before access" * if not self.owns(): # <<<<<<<<<<<<<< * self._values = None * else: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__owns); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_2 = ((!__pyx_t_3) != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":3247 * raise ValueError, "call release or release_update before access" * if not self.owns(): * self._values = None # <<<<<<<<<<<<<< * else: * lo,hi = self.distribution() */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___values, Py_None) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L4; } /*else*/ { /* "ga4py/gain/core.pyx":3249 * self._values = None * else: * lo,hi = self.distribution() # <<<<<<<<<<<<<< * result = self.global_slice.get_key(lo,hi) * self._values = self.get(result) */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__distribution); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_5 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L6_unpacking_done:; } __pyx_v_lo = __pyx_t_4; __pyx_t_4 = 0; __pyx_v_hi = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":3250 * else: * lo,hi = self.distribution() * result = self.global_slice.get_key(lo,hi) # <<<<<<<<<<<<<< * self._values = self.get(result) * return self._values */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__get_key); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_v_result = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3251 * lo,hi = self.distribution() * result = self.global_slice.get_key(lo,hi) * self._values = self.get(result) # <<<<<<<<<<<<<< * return self._values * */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__get); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___values, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } __pyx_L4:; /* "ga4py/gain/core.pyx":3252 * result = self.global_slice.get_key(lo,hi) * self._values = self.get(result) * return self._values # <<<<<<<<<<<<<< * * def release(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___values); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.core.flatiter.access", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XDECREF(__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_31release(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_31release = {__Pyx_NAMESTR("release"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_31release, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_31release(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_30release(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3254 * return self._values * * def release(self): # <<<<<<<<<<<<<< * self._values = None * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_30release(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("release", 0); __Pyx_TraceCall("release", __pyx_f[0], 3254); /* "ga4py/gain/core.pyx":3255 * * def release(self): * self._values = None # <<<<<<<<<<<<<< * * def release_update(self): */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___values, Py_None) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.core.flatiter.release", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_33release_update(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_33release_update = {__Pyx_NAMESTR("release_update"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_33release_update, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_33release_update(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("release_update (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_32release_update(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3257 * self._values = None * * def release_update(self): # <<<<<<<<<<<<<< * if self._values is not None: * lo,hi = self.distribution() */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_32release_update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *(*__pyx_t_7)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("release_update", 0); __Pyx_TraceCall("release_update", __pyx_f[0], 3257); /* "ga4py/gain/core.pyx":3258 * * def release_update(self): * if self._values is not None: # <<<<<<<<<<<<<< * lo,hi = self.distribution() * result = self.global_slice.get_key(lo,hi) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___values); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = (__pyx_t_1 != Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { /* "ga4py/gain/core.pyx":3259 * def release_update(self): * if self._values is not None: * lo,hi = self.distribution() # <<<<<<<<<<<<<< * result = self.global_slice.get_key(lo,hi) * self.put(result, self._values) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__distribution); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) { PyObject* sequence = __pyx_t_4; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_1 = PyList_GET_ITEM(sequence, 0); __pyx_t_5 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_5); #else __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; index = 0; __pyx_t_1 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_1)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L5_unpacking_done; __pyx_L4_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L5_unpacking_done:; } __pyx_v_lo = __pyx_t_1; __pyx_t_1 = 0; __pyx_v_hi = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/gain/core.pyx":3260 * if self._values is not None: * lo,hi = self.distribution() * result = self.global_slice.get_key(lo,hi) # <<<<<<<<<<<<<< * self.put(result, self._values) * self._values = None */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__global_slice); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__get_key); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_1 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_v_result = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3261 * lo,hi = self.distribution() * result = self.global_slice.get_key(lo,hi) * self.put(result, self._values) # <<<<<<<<<<<<<< * self._values = None * */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__put); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___values); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":3262 * result = self.global_slice.get_key(lo,hi) * self.put(result, self._values) * self._values = None # <<<<<<<<<<<<<< * * def __repr__(self): */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s___values, Py_None) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3262; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.core.flatiter.release_update", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XDECREF(__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_35__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_35__repr__ = {__Pyx_NAMESTR("__repr__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_35__repr__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_35__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_34__repr__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3264 * self._values = None * * def __repr__(self): # <<<<<<<<<<<<<< * result = "" * if 0 == me(): */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_34__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__repr__", 0); __Pyx_TraceCall("__repr__", __pyx_f[0], 3264); /* "ga4py/gain/core.pyx":3265 * * def __repr__(self): * result = "" # <<<<<<<<<<<<<< * if 0 == me(): * result = repr(self.get()) */ __Pyx_INCREF(((PyObject *)__pyx_kp_s_45)); __pyx_v_result = ((PyObject *)__pyx_kp_s_45); /* "ga4py/gain/core.pyx":3266 * def __repr__(self): * result = "" * if 0 == me(): # <<<<<<<<<<<<<< * result = repr(self.get()) * return result */ __pyx_t_1 = ((0 == __pyx_f_5ga4py_4gain_4core_me(0)) != 0); if (__pyx_t_1) { /* "ga4py/gain/core.pyx":3267 * result = "" * if 0 == me(): * result = repr(self.get()) # <<<<<<<<<<<<<< * return result * */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__get); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Repr(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_2); __pyx_t_2 = 0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":3268 * if 0 == me(): * result = repr(self.get()) * return result # <<<<<<<<<<<<<< * * def __str__(self): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_result); __pyx_r = __pyx_v_result; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.flatiter.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_37__str__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_8flatiter_37__str__ = {__Pyx_NAMESTR("__str__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_8flatiter_37__str__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_8flatiter_37__str__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_8flatiter_36__str__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3270 * return result * * def __str__(self): # <<<<<<<<<<<<<< * result = "" * if 0 == me(): */ static PyObject *__pyx_pf_5ga4py_4gain_4core_8flatiter_36__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__str__", 0); __Pyx_TraceCall("__str__", __pyx_f[0], 3270); /* "ga4py/gain/core.pyx":3271 * * def __str__(self): * result = "" # <<<<<<<<<<<<<< * if 0 == me(): * result = str(self.get()) */ __Pyx_INCREF(((PyObject *)__pyx_kp_s_45)); __pyx_v_result = ((PyObject *)__pyx_kp_s_45); /* "ga4py/gain/core.pyx":3272 * def __str__(self): * result = "" * if 0 == me(): # <<<<<<<<<<<<<< * result = str(self.get()) * return result */ __pyx_t_1 = ((0 == __pyx_f_5ga4py_4gain_4core_me(0)) != 0); if (__pyx_t_1) { /* "ga4py/gain/core.pyx":3273 * result = "" * if 0 == me(): * result = str(self.get()) # <<<<<<<<<<<<<< * return result * */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__get); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_3); __pyx_t_3 = 0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":3274 * if 0 == me(): * result = str(self.get()) * return result # <<<<<<<<<<<<<< * * def zeros(shape, dtype=np.float, order='C'): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_result); __pyx_r = __pyx_v_result; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.core.flatiter.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_29zeros(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_28zeros[] = "zeros(shape, dtype=float, order='C')\n\n Return a new array of given shape and type, filled with zeros.\n\n Parameters\n ----------\n shape : int or sequence of ints\n Shape of the new array, e.g., ``(2, 3)`` or ``2``.\n dtype : data-type, optional\n The desired data-type for the array, e.g., `numpy.int8`. Default is\n `numpy.float64`.\n order : {'C', 'F'}, optional\n Whether to store multidimensional data in C- or Fortran-contiguous\n (row- or column-wise) order in memory.\n\n Returns\n -------\n out : ndarray\n Array of zeros with the given shape, dtype, and order.\n\n See Also\n --------\n zeros_like : Return an array of zeros with shape and type of input.\n ones_like : Return an array of ones with shape and type of input.\n empty_like : Return an empty array with shape and type of input.\n ones : Return a new array setting values to one.\n empty : Return a new uninitialized array.\n\n Examples\n --------\n >>> np.zeros(5)\n array([ 0., 0., 0., 0., 0.])\n\n >>> np.zeros((5,), dtype=numpy.int)\n array([0, 0, 0, 0, 0])\n\n >>> np.zeros((2, 1))\n array([[ 0.],\n [ 0.]])\n\n >>> s = (2,2)\n >>> np.zeros(s)\n array([[ 0., 0.],\n [ 0., 0.]])\n\n >>> np.zeros((2,), dtype=[('x', 'i4'), ('y', 'i4')]) # custom dtype\n array([(0, 0), (0, 0)],\n dtype=[('x', ' 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zeros") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3276; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_shape = values[0]; __pyx_v_dtype = values[1]; __pyx_v_order = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("zeros", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3276; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.zeros", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_28zeros(__pyx_self, __pyx_v_shape, __pyx_v_dtype, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3276 * return result * * def zeros(shape, dtype=np.float, order='C'): # <<<<<<<<<<<<<< * """zeros(shape, dtype=float, order='C') * */ static PyObject *__pyx_pf_5ga4py_4gain_4core_28zeros(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_shape, PyObject *__pyx_v_dtype, PyObject *__pyx_v_order) { PyObject *__pyx_v_a = NULL; PyObject *__pyx_v_buf = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("zeros", 0); __Pyx_TraceCall("zeros", __pyx_f[0], 3276); /* "ga4py/gain/core.pyx":3327 * * """ * if not should_distribute(shape): # <<<<<<<<<<<<<< * return np.zeros(shape, dtype, order) * a = ndarray(shape, dtype) */ __pyx_t_1 = ((!(__pyx_f_5ga4py_4gain_4core_should_distribute(__pyx_v_shape, 0) != 0)) != 0); if (__pyx_t_1) { /* "ga4py/gain/core.pyx":3328 * """ * if not should_distribute(shape): * return np.zeros(shape, dtype, order) # <<<<<<<<<<<<<< * a = ndarray(shape, dtype) * buf = a.access() */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __Pyx_INCREF(__pyx_v_order); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_order); __Pyx_GIVEREF(__pyx_v_order); __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":3329 * if not should_distribute(shape): * return np.zeros(shape, dtype, order) * a = ndarray(shape, dtype) # <<<<<<<<<<<<<< * buf = a.access() * if buf is not None: */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_a = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3330 * return np.zeros(shape, dtype, order) * a = ndarray(shape, dtype) * buf = a.access() # <<<<<<<<<<<<<< * if buf is not None: * buf[:] = 0 */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__access); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_buf = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":3331 * a = ndarray(shape, dtype) * buf = a.access() * if buf is not None: # <<<<<<<<<<<<<< * buf[:] = 0 * a.release_update() */ __pyx_t_1 = (__pyx_v_buf != Py_None); __pyx_t_5 = (__pyx_t_1 != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":3332 * buf = a.access() * if buf is not None: * buf[:] = 0 # <<<<<<<<<<<<<< * a.release_update() * return a */ if (__Pyx_PyObject_SetSlice(__pyx_v_buf, __pyx_int_0, 0, 0, NULL, NULL, &__pyx_k_slice_85, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3333 * if buf is not None: * buf[:] = 0 * a.release_update() # <<<<<<<<<<<<<< * return a * */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__release_update); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/core.pyx":3334 * buf[:] = 0 * a.release_update() * return a # <<<<<<<<<<<<<< * * def asarray(a, dtype=None, order=None): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_a); __pyx_r = __pyx_v_a; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.core.zeros", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_buf); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_31asarray(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_31asarray = {__Pyx_NAMESTR("asarray"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_31asarray, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_31asarray(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_a = 0; PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("asarray (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__dtype,&__pyx_n_s__order,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/core.pyx":3336 * return a * * def asarray(a, dtype=None, order=None): # <<<<<<<<<<<<<< * if isinstance(a, (ndarray,flatiter,np.ndarray,np.generic)): * # we return ga.gain.ndarray instances for obvious reasons, but we */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "asarray") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3336; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_dtype = values[1]; __pyx_v_order = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("asarray", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3336; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.core.asarray", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4core_30asarray(__pyx_self, __pyx_v_a, __pyx_v_dtype, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4core_30asarray(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_order) { PyObject *__pyx_v_npa = NULL; PyObject *__pyx_v_g_a = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; int __pyx_t_6; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("asarray", 0); __Pyx_TraceCall("asarray", __pyx_f[0], 3336); /* "ga4py/gain/core.pyx":3337 * * def asarray(a, dtype=None, order=None): * if isinstance(a, (ndarray,flatiter,np.ndarray,np.generic)): # <<<<<<<<<<<<<< * # we return ga.gain.ndarray instances for obvious reasons, but we * # also return numpy.ndarray instances because they already exist in */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__flatiter); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__generic); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray))); PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray))); __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_5numpy_ndarray))); PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_5 = PyObject_IsInstance(__pyx_v_a, ((PyObject *)__pyx_t_3)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_6 = (__pyx_t_5 != 0); if (__pyx_t_6) { /* "ga4py/gain/core.pyx":3341 * # also return numpy.ndarray instances because they already exist in * # whole on all procs -- no need to distribute pieces * return a # <<<<<<<<<<<<<< * else: * npa = np.asarray(a, dtype=dtype) */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_a); __pyx_r = __pyx_v_a; goto __pyx_L0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":3343 * return a * else: * npa = np.asarray(a, dtype=dtype) # <<<<<<<<<<<<<< * if should_distribute(npa.size): * g_a = ndarray(npa.shape, npa.dtype, npa) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__asarray); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_v_dtype) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_npa = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3344 * else: * npa = np.asarray(a, dtype=dtype) * if should_distribute(npa.size): # <<<<<<<<<<<<<< * g_a = ndarray(npa.shape, npa.dtype, npa) * return g_a # distributed using Global Arrays ndarray */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_npa, __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = (__pyx_f_5ga4py_4gain_4core_should_distribute(__pyx_t_1, 0) != 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_6) { /* "ga4py/gain/core.pyx":3345 * npa = np.asarray(a, dtype=dtype) * if should_distribute(npa.size): * g_a = ndarray(npa.shape, npa.dtype, npa) # <<<<<<<<<<<<<< * return g_a # distributed using Global Arrays ndarray * else: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_npa, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_npa, __pyx_n_s__dtype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_npa); PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_npa); __Pyx_GIVEREF(__pyx_v_npa); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_v_g_a = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3346 * if should_distribute(npa.size): * g_a = ndarray(npa.shape, npa.dtype, npa) * return g_a # distributed using Global Arrays ndarray # <<<<<<<<<<<<<< * else: * return npa # possibly a scalar or zero rank array */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_g_a); __pyx_r = __pyx_v_g_a; goto __pyx_L0; goto __pyx_L4; } /*else*/ { /* "ga4py/gain/core.pyx":3348 * return g_a # distributed using Global Arrays ndarray * else: * return npa # possibly a scalar or zero rank array # <<<<<<<<<<<<<< * * def from_ga(g_a): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_npa); __pyx_r = __pyx_v_npa; goto __pyx_L0; } __pyx_L4:; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.core.asarray", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_npa); __Pyx_XDECREF(__pyx_v_g_a); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_33from_ga(PyObject *__pyx_self, PyObject *__pyx_v_g_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_32from_ga[] = "Create ndarray from a global array."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_33from_ga = {__Pyx_NAMESTR("from_ga"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_33from_ga, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_32from_ga)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_33from_ga(PyObject *__pyx_self, PyObject *__pyx_v_g_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("from_ga (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_32from_ga(__pyx_self, ((PyObject *)__pyx_v_g_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3350 * return npa # possibly a scalar or zero rank array * * def from_ga(g_a): # <<<<<<<<<<<<<< * """Create ndarray from a global array.""" * dtype = ga.inquire_dtype(g_a) */ static PyObject *__pyx_pf_5ga4py_4gain_4core_32from_ga(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_g_a) { PyObject *__pyx_v_dtype = NULL; PyObject *__pyx_v_shape = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("from_ga", 0); __Pyx_TraceCall("from_ga", __pyx_f[0], 3350); /* "ga4py/gain/core.pyx":3352 * def from_ga(g_a): * """Create ndarray from a global array.""" * dtype = ga.inquire_dtype(g_a) # <<<<<<<<<<<<<< * shape = ga.inquire_dims(g_a) * return ndarray(shape, dtype, base=g_a) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__inquire_dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_g_a); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_g_a); __Pyx_GIVEREF(__pyx_v_g_a); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_v_dtype = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3353 * """Create ndarray from a global array.""" * dtype = ga.inquire_dtype(g_a) * shape = ga.inquire_dims(g_a) # <<<<<<<<<<<<<< * return ndarray(shape, dtype, base=g_a) * */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__inquire_dims); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_g_a); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_g_a); __Pyx_GIVEREF(__pyx_v_g_a); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_shape = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":3354 * dtype = ga.inquire_dtype(g_a) * shape = ga.inquire_dims(g_a) * return ndarray(shape, dtype, base=g_a) # <<<<<<<<<<<<<< * * cdef extern MPI_Comm GA_MPI_Comm_pgroup_default() */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__base), __pyx_v_g_a) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.core.from_ga", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_dtype); __Pyx_XDECREF(__pyx_v_shape); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_35comm(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_4core_34comm[] = "Returns the MPI_Comm instance associated with the process group."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_35comm = {__Pyx_NAMESTR("comm"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_35comm, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4core_34comm)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_35comm(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("comm (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_34comm(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3357 * * cdef extern MPI_Comm GA_MPI_Comm_pgroup_default() * def comm(): # <<<<<<<<<<<<<< * """Returns the MPI_Comm instance associated with the process group.""" * cdef MPI.Comm communicator = MPI.Comm() */ static PyObject *__pyx_pf_5ga4py_4gain_4core_34comm(CYTHON_UNUSED PyObject *__pyx_self) { struct PyMPICommObject *__pyx_v_communicator = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("comm", 0); __Pyx_TraceCall("comm", __pyx_f[0], 3357); /* "ga4py/gain/core.pyx":3359 * def comm(): * """Returns the MPI_Comm instance associated with the process group.""" * cdef MPI.Comm communicator = MPI.Comm() # <<<<<<<<<<<<<< * communicator.ob_mpi = GA_MPI_Comm_pgroup_default() * return communicator */ __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_6mpi4py_3MPI_Comm)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_communicator = ((struct PyMPICommObject *)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3360 * """Returns the MPI_Comm instance associated with the process group.""" * cdef MPI.Comm communicator = MPI.Comm() * communicator.ob_mpi = GA_MPI_Comm_pgroup_default() # <<<<<<<<<<<<<< * return communicator * */ __pyx_v_communicator->ob_mpi = GA_MPI_Comm_pgroup_default(); /* "ga4py/gain/core.pyx":3361 * cdef MPI.Comm communicator = MPI.Comm() * communicator.ob_mpi = GA_MPI_Comm_pgroup_default() * return communicator # <<<<<<<<<<<<<< * * #cdef bint DEBUG = False */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_communicator)); __pyx_r = ((PyObject *)__pyx_v_communicator); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.core.comm", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_communicator); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4core_37print_sync(PyObject *__pyx_self, PyObject *__pyx_v_what); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4core_37print_sync = {__Pyx_NAMESTR("print_sync"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_37print_sync, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4core_37print_sync(PyObject *__pyx_self, PyObject *__pyx_v_what) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("print_sync (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4core_36print_sync(__pyx_self, ((PyObject *)__pyx_v_what)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/core.pyx":3378 * # print s * # * def print_sync(what): # <<<<<<<<<<<<<< * #if DEBUG: * if True: */ static PyObject *__pyx_pf_5ga4py_4gain_4core_36print_sync(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_what) { long __pyx_v_proc; PyObject *__pyx_v_data = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; long __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("print_sync", 0); __Pyx_TraceCall("print_sync", __pyx_f[0], 3378); /* "ga4py/gain/core.pyx":3381 * #if DEBUG: * if True: * sync() # <<<<<<<<<<<<<< * if 0 == me(): * print "[0] %s" % str(what) */ __pyx_t_1 = __pyx_f_5ga4py_4gain_4core_sync(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3382 * if True: * sync() * if 0 == me(): # <<<<<<<<<<<<<< * print "[0] %s" % str(what) * for proc in xrange(1,nproc()): */ __pyx_t_2 = ((0 == __pyx_f_5ga4py_4gain_4core_me(0)) != 0); if (__pyx_t_2) { /* "ga4py/gain/core.pyx":3383 * sync() * if 0 == me(): * print "[0] %s" % str(what) # <<<<<<<<<<<<<< * for proc in xrange(1,nproc()): * data = comm().recv(source=proc, tag=11) */ __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_what); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_what); __Pyx_GIVEREF(__pyx_v_what); __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_86), __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3384 * if 0 == me(): * print "[0] %s" % str(what) * for proc in xrange(1,nproc()): # <<<<<<<<<<<<<< * data = comm().recv(source=proc, tag=11) * print "[%d] %s" % (proc, str(data)) */ __pyx_t_4 = __pyx_f_5ga4py_4gain_4core_nproc(0); for (__pyx_t_5 = 1; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { __pyx_v_proc = __pyx_t_5; /* "ga4py/gain/core.pyx":3385 * print "[0] %s" % str(what) * for proc in xrange(1,nproc()): * data = comm().recv(source=proc, tag=11) # <<<<<<<<<<<<<< * print "[%d] %s" % (proc, str(data)) * else: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__recv); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __pyx_t_6 = PyInt_FromLong(__pyx_v_proc); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__source), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__tag), __pyx_int_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_XDECREF_SET(__pyx_v_data, __pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/core.pyx":3386 * for proc in xrange(1,nproc()): * data = comm().recv(source=proc, tag=11) * print "[%d] %s" % (proc, str(data)) # <<<<<<<<<<<<<< * else: * comm().send(what, dest=0, tag=11) */ __pyx_t_6 = PyInt_FromLong(__pyx_v_proc); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_data); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_data); __Pyx_GIVEREF(__pyx_v_data); __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_6 = 0; __pyx_t_1 = 0; __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_87), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; } goto __pyx_L3; } /*else*/ { /* "ga4py/gain/core.pyx":3388 * print "[%d] %s" % (proc, str(data)) * else: * comm().send(what, dest=0, tag=11) # <<<<<<<<<<<<<< * sync() */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__comm); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__send); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_what); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_what); __Pyx_GIVEREF(__pyx_v_what); __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_6)); if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dest), __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__tag), __pyx_int_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __pyx_L3:; /* "ga4py/gain/core.pyx":3389 * else: * comm().send(what, dest=0, tag=11) * sync() # <<<<<<<<<<<<<< */ __pyx_t_7 = __pyx_f_5ga4py_4gain_4core_sync(0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3389; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("ga4py.gain.core.print_sync", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_data); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":194 * # experimental exception made for __getbuffer__ and __releasebuffer__ * # -- the details of this may change. * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< * # This implementation of getbuffer is geared towards Cython * # requirements, and does not yet fullfill the PEP. */ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { int __pyx_v_copy_shape; int __pyx_v_i; int __pyx_v_ndim; int __pyx_v_endian_detector; int __pyx_v_little_endian; int __pyx_v_t; char *__pyx_v_f; PyArray_Descr *__pyx_v_descr = 0; int __pyx_v_offset; int __pyx_v_hasfields; int __pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; char *__pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__getbuffer__", 0); if (__pyx_v_info != NULL) { __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); __Pyx_GIVEREF(__pyx_v_info->obj); } __Pyx_TraceCall("__getbuffer__", __pyx_f[1], 194); /* "numpy.pxd":200 * # of flags * * if info == NULL: return # <<<<<<<<<<<<<< * * cdef int copy_shape, i, ndim */ __pyx_t_1 = ((__pyx_v_info == NULL) != 0); if (__pyx_t_1) { __pyx_r = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "numpy.pxd":203 * * cdef int copy_shape, i, ndim * cdef int endian_detector = 1 # <<<<<<<<<<<<<< * cdef bint little_endian = ((&endian_detector)[0] != 0) * */ __pyx_v_endian_detector = 1; /* "numpy.pxd":204 * cdef int copy_shape, i, ndim * cdef int endian_detector = 1 * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< * * ndim = PyArray_NDIM(self) */ __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); /* "numpy.pxd":206 * cdef bint little_endian = ((&endian_detector)[0] != 0) * * ndim = PyArray_NDIM(self) # <<<<<<<<<<<<<< * * if sizeof(npy_intp) != sizeof(Py_ssize_t): */ __pyx_v_ndim = PyArray_NDIM(__pyx_v_self); /* "numpy.pxd":208 * ndim = PyArray_NDIM(self) * * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< * copy_shape = 1 * else: */ __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); if (__pyx_t_1) { /* "numpy.pxd":209 * * if sizeof(npy_intp) != sizeof(Py_ssize_t): * copy_shape = 1 # <<<<<<<<<<<<<< * else: * copy_shape = 0 */ __pyx_v_copy_shape = 1; goto __pyx_L4; } /*else*/ { /* "numpy.pxd":211 * copy_shape = 1 * else: * copy_shape = 0 # <<<<<<<<<<<<<< * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) */ __pyx_v_copy_shape = 0; } __pyx_L4:; /* "numpy.pxd":213 * copy_shape = 0 * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") */ __pyx_t_1 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0); if (__pyx_t_1) { /* "numpy.pxd":214 * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): # <<<<<<<<<<<<<< * raise ValueError(u"ndarray is not C contiguous") * */ __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS) != 0)) != 0); __pyx_t_3 = __pyx_t_2; } else { __pyx_t_3 = __pyx_t_1; } if (__pyx_t_3) { /* "numpy.pxd":215 * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) */ __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_89), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } __pyx_L5:; /* "numpy.pxd":217 * raise ValueError(u"ndarray is not C contiguous") * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") */ __pyx_t_3 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0); if (__pyx_t_3) { /* "numpy.pxd":218 * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): # <<<<<<<<<<<<<< * raise ValueError(u"ndarray is not Fortran contiguous") * */ __pyx_t_1 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS) != 0)) != 0); __pyx_t_2 = __pyx_t_1; } else { __pyx_t_2 = __pyx_t_3; } if (__pyx_t_2) { /* "numpy.pxd":219 * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< * * info.buf = PyArray_DATA(self) */ __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_91), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; /* "numpy.pxd":221 * raise ValueError(u"ndarray is not Fortran contiguous") * * info.buf = PyArray_DATA(self) # <<<<<<<<<<<<<< * info.ndim = ndim * if copy_shape: */ __pyx_v_info->buf = PyArray_DATA(__pyx_v_self); /* "numpy.pxd":222 * * info.buf = PyArray_DATA(self) * info.ndim = ndim # <<<<<<<<<<<<<< * if copy_shape: * # Allocate new buffer for strides and shape info. */ __pyx_v_info->ndim = __pyx_v_ndim; /* "numpy.pxd":223 * info.buf = PyArray_DATA(self) * info.ndim = ndim * if copy_shape: # <<<<<<<<<<<<<< * # Allocate new buffer for strides and shape info. * # This is allocated as one block, strides first. */ __pyx_t_2 = (__pyx_v_copy_shape != 0); if (__pyx_t_2) { /* "numpy.pxd":226 * # Allocate new buffer for strides and shape info. * # This is allocated as one block, strides first. * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) # <<<<<<<<<<<<<< * info.shape = info.strides + ndim * for i in range(ndim): */ __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2))); /* "numpy.pxd":227 * # This is allocated as one block, strides first. * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) * info.shape = info.strides + ndim # <<<<<<<<<<<<<< * for i in range(ndim): * info.strides[i] = PyArray_STRIDES(self)[i] */ __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim); /* "numpy.pxd":228 * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) * info.shape = info.strides + ndim * for i in range(ndim): # <<<<<<<<<<<<<< * info.strides[i] = PyArray_STRIDES(self)[i] * info.shape[i] = PyArray_DIMS(self)[i] */ __pyx_t_5 = __pyx_v_ndim; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_i = __pyx_t_6; /* "numpy.pxd":229 * info.shape = info.strides + ndim * for i in range(ndim): * info.strides[i] = PyArray_STRIDES(self)[i] # <<<<<<<<<<<<<< * info.shape[i] = PyArray_DIMS(self)[i] * else: */ (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]); /* "numpy.pxd":230 * for i in range(ndim): * info.strides[i] = PyArray_STRIDES(self)[i] * info.shape[i] = PyArray_DIMS(self)[i] # <<<<<<<<<<<<<< * else: * info.strides = PyArray_STRIDES(self) */ (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]); } goto __pyx_L7; } /*else*/ { /* "numpy.pxd":232 * info.shape[i] = PyArray_DIMS(self)[i] * else: * info.strides = PyArray_STRIDES(self) # <<<<<<<<<<<<<< * info.shape = PyArray_DIMS(self) * info.suboffsets = NULL */ __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self)); /* "numpy.pxd":233 * else: * info.strides = PyArray_STRIDES(self) * info.shape = PyArray_DIMS(self) # <<<<<<<<<<<<<< * info.suboffsets = NULL * info.itemsize = PyArray_ITEMSIZE(self) */ __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self)); } __pyx_L7:; /* "numpy.pxd":234 * info.strides = PyArray_STRIDES(self) * info.shape = PyArray_DIMS(self) * info.suboffsets = NULL # <<<<<<<<<<<<<< * info.itemsize = PyArray_ITEMSIZE(self) * info.readonly = not PyArray_ISWRITEABLE(self) */ __pyx_v_info->suboffsets = NULL; /* "numpy.pxd":235 * info.shape = PyArray_DIMS(self) * info.suboffsets = NULL * info.itemsize = PyArray_ITEMSIZE(self) # <<<<<<<<<<<<<< * info.readonly = not PyArray_ISWRITEABLE(self) * */ __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self); /* "numpy.pxd":236 * info.suboffsets = NULL * info.itemsize = PyArray_ITEMSIZE(self) * info.readonly = not PyArray_ISWRITEABLE(self) # <<<<<<<<<<<<<< * * cdef int t */ __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0)); /* "numpy.pxd":239 * * cdef int t * cdef char* f = NULL # <<<<<<<<<<<<<< * cdef dtype descr = self.descr * cdef list stack */ __pyx_v_f = NULL; /* "numpy.pxd":240 * cdef int t * cdef char* f = NULL * cdef dtype descr = self.descr # <<<<<<<<<<<<<< * cdef list stack * cdef int offset */ __pyx_t_4 = ((PyObject *)__pyx_v_self->descr); __Pyx_INCREF(__pyx_t_4); __pyx_v_descr = ((PyArray_Descr *)__pyx_t_4); __pyx_t_4 = 0; /* "numpy.pxd":244 * cdef int offset * * cdef bint hasfields = PyDataType_HASFIELDS(descr) # <<<<<<<<<<<<<< * * if not hasfields and not copy_shape: */ __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr); /* "numpy.pxd":246 * cdef bint hasfields = PyDataType_HASFIELDS(descr) * * if not hasfields and not copy_shape: # <<<<<<<<<<<<<< * # do not call releasebuffer * info.obj = None */ __pyx_t_2 = ((!(__pyx_v_hasfields != 0)) != 0); if (__pyx_t_2) { __pyx_t_3 = ((!(__pyx_v_copy_shape != 0)) != 0); __pyx_t_1 = __pyx_t_3; } else { __pyx_t_1 = __pyx_t_2; } if (__pyx_t_1) { /* "numpy.pxd":248 * if not hasfields and not copy_shape: * # do not call releasebuffer * info.obj = None # <<<<<<<<<<<<<< * else: * # need to call releasebuffer */ __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = Py_None; goto __pyx_L10; } /*else*/ { /* "numpy.pxd":251 * else: * # need to call releasebuffer * info.obj = self # <<<<<<<<<<<<<< * * if not hasfields: */ __Pyx_INCREF(((PyObject *)__pyx_v_self)); __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = ((PyObject *)__pyx_v_self); } __pyx_L10:; /* "numpy.pxd":253 * info.obj = self * * if not hasfields: # <<<<<<<<<<<<<< * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or */ __pyx_t_1 = ((!(__pyx_v_hasfields != 0)) != 0); if (__pyx_t_1) { /* "numpy.pxd":254 * * if not hasfields: * t = descr.type_num # <<<<<<<<<<<<<< * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): */ __pyx_t_5 = __pyx_v_descr->type_num; __pyx_v_t = __pyx_t_5; /* "numpy.pxd":255 * if not hasfields: * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") */ __pyx_t_1 = ((__pyx_v_descr->byteorder == '>') != 0); if (__pyx_t_1) { __pyx_t_2 = (__pyx_v_little_endian != 0); } else { __pyx_t_2 = __pyx_t_1; } if (!__pyx_t_2) { /* "numpy.pxd":256 * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< * raise ValueError(u"Non-native byte order not supported") * if t == NPY_BYTE: f = "b" */ __pyx_t_1 = ((__pyx_v_descr->byteorder == '<') != 0); if (__pyx_t_1) { __pyx_t_3 = ((!(__pyx_v_little_endian != 0)) != 0); __pyx_t_7 = __pyx_t_3; } else { __pyx_t_7 = __pyx_t_1; } __pyx_t_1 = __pyx_t_7; } else { __pyx_t_1 = __pyx_t_2; } if (__pyx_t_1) { /* "numpy.pxd":257 * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" */ __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_93), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L12; } __pyx_L12:; /* "numpy.pxd":274 * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) */ switch (__pyx_v_t) { /* "numpy.pxd":258 * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") * if t == NPY_BYTE: f = "b" # <<<<<<<<<<<<<< * elif t == NPY_UBYTE: f = "B" * elif t == NPY_SHORT: f = "h" */ case NPY_BYTE: __pyx_v_f = __pyx_k__b; break; /* "numpy.pxd":259 * raise ValueError(u"Non-native byte order not supported") * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" # <<<<<<<<<<<<<< * elif t == NPY_SHORT: f = "h" * elif t == NPY_USHORT: f = "H" */ case NPY_UBYTE: __pyx_v_f = __pyx_k__B; break; /* "numpy.pxd":260 * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" * elif t == NPY_SHORT: f = "h" # <<<<<<<<<<<<<< * elif t == NPY_USHORT: f = "H" * elif t == NPY_INT: f = "i" */ case NPY_SHORT: __pyx_v_f = __pyx_k__h; break; /* "numpy.pxd":261 * elif t == NPY_UBYTE: f = "B" * elif t == NPY_SHORT: f = "h" * elif t == NPY_USHORT: f = "H" # <<<<<<<<<<<<<< * elif t == NPY_INT: f = "i" * elif t == NPY_UINT: f = "I" */ case NPY_USHORT: __pyx_v_f = __pyx_k__H; break; /* "numpy.pxd":262 * elif t == NPY_SHORT: f = "h" * elif t == NPY_USHORT: f = "H" * elif t == NPY_INT: f = "i" # <<<<<<<<<<<<<< * elif t == NPY_UINT: f = "I" * elif t == NPY_LONG: f = "l" */ case NPY_INT: __pyx_v_f = __pyx_k__i; break; /* "numpy.pxd":263 * elif t == NPY_USHORT: f = "H" * elif t == NPY_INT: f = "i" * elif t == NPY_UINT: f = "I" # <<<<<<<<<<<<<< * elif t == NPY_LONG: f = "l" * elif t == NPY_ULONG: f = "L" */ case NPY_UINT: __pyx_v_f = __pyx_k__I; break; /* "numpy.pxd":264 * elif t == NPY_INT: f = "i" * elif t == NPY_UINT: f = "I" * elif t == NPY_LONG: f = "l" # <<<<<<<<<<<<<< * elif t == NPY_ULONG: f = "L" * elif t == NPY_LONGLONG: f = "q" */ case NPY_LONG: __pyx_v_f = __pyx_k__l; break; /* "numpy.pxd":265 * elif t == NPY_UINT: f = "I" * elif t == NPY_LONG: f = "l" * elif t == NPY_ULONG: f = "L" # <<<<<<<<<<<<<< * elif t == NPY_LONGLONG: f = "q" * elif t == NPY_ULONGLONG: f = "Q" */ case NPY_ULONG: __pyx_v_f = __pyx_k__L; break; /* "numpy.pxd":266 * elif t == NPY_LONG: f = "l" * elif t == NPY_ULONG: f = "L" * elif t == NPY_LONGLONG: f = "q" # <<<<<<<<<<<<<< * elif t == NPY_ULONGLONG: f = "Q" * elif t == NPY_FLOAT: f = "f" */ case NPY_LONGLONG: __pyx_v_f = __pyx_k__q; break; /* "numpy.pxd":267 * elif t == NPY_ULONG: f = "L" * elif t == NPY_LONGLONG: f = "q" * elif t == NPY_ULONGLONG: f = "Q" # <<<<<<<<<<<<<< * elif t == NPY_FLOAT: f = "f" * elif t == NPY_DOUBLE: f = "d" */ case NPY_ULONGLONG: __pyx_v_f = __pyx_k__Q; break; /* "numpy.pxd":268 * elif t == NPY_LONGLONG: f = "q" * elif t == NPY_ULONGLONG: f = "Q" * elif t == NPY_FLOAT: f = "f" # <<<<<<<<<<<<<< * elif t == NPY_DOUBLE: f = "d" * elif t == NPY_LONGDOUBLE: f = "g" */ case NPY_FLOAT: __pyx_v_f = __pyx_k__f; break; /* "numpy.pxd":269 * elif t == NPY_ULONGLONG: f = "Q" * elif t == NPY_FLOAT: f = "f" * elif t == NPY_DOUBLE: f = "d" # <<<<<<<<<<<<<< * elif t == NPY_LONGDOUBLE: f = "g" * elif t == NPY_CFLOAT: f = "Zf" */ case NPY_DOUBLE: __pyx_v_f = __pyx_k__d; break; /* "numpy.pxd":270 * elif t == NPY_FLOAT: f = "f" * elif t == NPY_DOUBLE: f = "d" * elif t == NPY_LONGDOUBLE: f = "g" # <<<<<<<<<<<<<< * elif t == NPY_CFLOAT: f = "Zf" * elif t == NPY_CDOUBLE: f = "Zd" */ case NPY_LONGDOUBLE: __pyx_v_f = __pyx_k__g; break; /* "numpy.pxd":271 * elif t == NPY_DOUBLE: f = "d" * elif t == NPY_LONGDOUBLE: f = "g" * elif t == NPY_CFLOAT: f = "Zf" # <<<<<<<<<<<<<< * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" */ case NPY_CFLOAT: __pyx_v_f = __pyx_k__Zf; break; /* "numpy.pxd":272 * elif t == NPY_LONGDOUBLE: f = "g" * elif t == NPY_CFLOAT: f = "Zf" * elif t == NPY_CDOUBLE: f = "Zd" # <<<<<<<<<<<<<< * elif t == NPY_CLONGDOUBLE: f = "Zg" * elif t == NPY_OBJECT: f = "O" */ case NPY_CDOUBLE: __pyx_v_f = __pyx_k__Zd; break; /* "numpy.pxd":273 * elif t == NPY_CFLOAT: f = "Zf" * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" # <<<<<<<<<<<<<< * elif t == NPY_OBJECT: f = "O" * else: */ case NPY_CLONGDOUBLE: __pyx_v_f = __pyx_k__Zg; break; /* "numpy.pxd":274 * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) */ case NPY_OBJECT: __pyx_v_f = __pyx_k__O; break; default: /* "numpy.pxd":276 * elif t == NPY_OBJECT: f = "O" * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< * info.format = f * return */ __pyx_t_4 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_94), __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_8)); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_8)); __Pyx_GIVEREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __pyx_t_8 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} break; } /* "numpy.pxd":277 * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) * info.format = f # <<<<<<<<<<<<<< * return * else: */ __pyx_v_info->format = __pyx_v_f; /* "numpy.pxd":278 * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) * info.format = f * return # <<<<<<<<<<<<<< * else: * info.format = stdlib.malloc(_buffer_format_string_len) */ __pyx_r = 0; goto __pyx_L0; goto __pyx_L11; } /*else*/ { /* "numpy.pxd":280 * return * else: * info.format = stdlib.malloc(_buffer_format_string_len) # <<<<<<<<<<<<<< * info.format[0] = c'^' # Native data types, manual alignment * offset = 0 */ __pyx_v_info->format = ((char *)malloc(255)); /* "numpy.pxd":281 * else: * info.format = stdlib.malloc(_buffer_format_string_len) * info.format[0] = c'^' # Native data types, manual alignment # <<<<<<<<<<<<<< * offset = 0 * f = _util_dtypestring(descr, info.format + 1, */ (__pyx_v_info->format[0]) = '^'; /* "numpy.pxd":282 * info.format = stdlib.malloc(_buffer_format_string_len) * info.format[0] = c'^' # Native data types, manual alignment * offset = 0 # <<<<<<<<<<<<<< * f = _util_dtypestring(descr, info.format + 1, * info.format + _buffer_format_string_len, */ __pyx_v_offset = 0; /* "numpy.pxd":285 * f = _util_dtypestring(descr, info.format + 1, * info.format + _buffer_format_string_len, * &offset) # <<<<<<<<<<<<<< * f[0] = c'\0' # Terminate format string * */ __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_f = __pyx_t_9; /* "numpy.pxd":286 * info.format + _buffer_format_string_len, * &offset) * f[0] = c'\0' # Terminate format string # <<<<<<<<<<<<<< * * def __releasebuffer__(ndarray self, Py_buffer* info): */ (__pyx_v_f[0]) = '\x00'; } __pyx_L11:; __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) { __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL; } goto __pyx_L2; __pyx_L0:; if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) { __Pyx_GOTREF(Py_None); __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL; } __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_descr); __Pyx_TraceReturn(Py_None); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/ static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0); __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info)); __Pyx_RefNannyFinishContext(); } /* "numpy.pxd":288 * f[0] = c'\0' # Terminate format string * * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< * if PyArray_HASFIELDS(self): * stdlib.free(info.format) */ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) { __Pyx_RefNannyDeclarations int __pyx_t_1; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__releasebuffer__", 0); __Pyx_TraceCall("__releasebuffer__", __pyx_f[1], 288); /* "numpy.pxd":289 * * def __releasebuffer__(ndarray self, Py_buffer* info): * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< * stdlib.free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): */ __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0); if (__pyx_t_1) { /* "numpy.pxd":290 * def __releasebuffer__(ndarray self, Py_buffer* info): * if PyArray_HASFIELDS(self): * stdlib.free(info.format) # <<<<<<<<<<<<<< * if sizeof(npy_intp) != sizeof(Py_ssize_t): * stdlib.free(info.strides) */ free(__pyx_v_info->format); goto __pyx_L3; } __pyx_L3:; /* "numpy.pxd":291 * if PyArray_HASFIELDS(self): * stdlib.free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< * stdlib.free(info.strides) * # info.shape was stored after info.strides in the same block */ __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); if (__pyx_t_1) { /* "numpy.pxd":292 * stdlib.free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): * stdlib.free(info.strides) # <<<<<<<<<<<<<< * # info.shape was stored after info.strides in the same block * */ free(__pyx_v_info->strides); goto __pyx_L4; } __pyx_L4:; __Pyx_TraceReturn(Py_None); __Pyx_RefNannyFinishContext(); } /* "numpy.pxd":768 * ctypedef npy_cdouble complex_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(1, a) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0); __Pyx_TraceCall("PyArray_MultiIterNew1", __pyx_f[1], 768); /* "numpy.pxd":769 * * cdef inline object PyArray_MultiIterNew1(a): * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew2(a, b): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":771 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(2, a, b) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0); __Pyx_TraceCall("PyArray_MultiIterNew2", __pyx_f[1], 771); /* "numpy.pxd":772 * * cdef inline object PyArray_MultiIterNew2(a, b): * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew3(a, b, c): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":774 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(3, a, b, c) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0); __Pyx_TraceCall("PyArray_MultiIterNew3", __pyx_f[1], 774); /* "numpy.pxd":775 * * cdef inline object PyArray_MultiIterNew3(a, b, c): * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":777 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(4, a, b, c, d) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0); __Pyx_TraceCall("PyArray_MultiIterNew4", __pyx_f[1], 777); /* "numpy.pxd":778 * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":780 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(5, a, b, c, d, e) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0); __Pyx_TraceCall("PyArray_MultiIterNew5", __pyx_f[1], 780); /* "numpy.pxd":781 * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< * * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":783 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< * # Recursive utility function used in __getbuffer__ to get format * # string. The new location in the format string is returned. */ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) { PyArray_Descr *__pyx_v_child = 0; int __pyx_v_endian_detector; int __pyx_v_little_endian; PyObject *__pyx_v_fields = 0; PyObject *__pyx_v_childname = NULL; PyObject *__pyx_v_new_offset = NULL; PyObject *__pyx_v_t = NULL; char *__pyx_r; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; Py_ssize_t __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *(*__pyx_t_6)(PyObject *); int __pyx_t_7; int __pyx_t_8; int __pyx_t_9; int __pyx_t_10; long __pyx_t_11; char *__pyx_t_12; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_util_dtypestring", 0); __Pyx_TraceCall("_util_dtypestring", __pyx_f[1], 783); /* "numpy.pxd":790 * cdef int delta_offset * cdef tuple i * cdef int endian_detector = 1 # <<<<<<<<<<<<<< * cdef bint little_endian = ((&endian_detector)[0] != 0) * cdef tuple fields */ __pyx_v_endian_detector = 1; /* "numpy.pxd":791 * cdef tuple i * cdef int endian_detector = 1 * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< * cdef tuple fields * */ __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); /* "numpy.pxd":794 * cdef tuple fields * * for childname in descr.names: # <<<<<<<<<<<<<< * fields = descr.fields[childname] * child, new_offset = fields */ if (unlikely(((PyObject *)__pyx_v_descr->names) == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_1 = ((PyObject *)__pyx_v_descr->names); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; for (;;) { if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3); __pyx_t_3 = 0; /* "numpy.pxd":795 * * for childname in descr.names: * fields = descr.fields[childname] # <<<<<<<<<<<<<< * child, new_offset = fields * */ __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (!__pyx_t_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0; /* "numpy.pxd":796 * for childname in descr.names: * fields = descr.fields[childname] * child, new_offset = fields # <<<<<<<<<<<<<< * * if (end - f) - (new_offset - offset[0]) < 15: */ if (likely(PyTuple_CheckExact(((PyObject *)__pyx_v_fields)))) { PyObject* sequence = ((PyObject *)__pyx_v_fields); #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); #else __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); #endif } else if (1) { __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else { Py_ssize_t index = -1; __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_fields)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = NULL; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L6_unpacking_done:; } if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_XDECREF_SET(__pyx_v_child, ((PyArray_Descr *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4); __pyx_t_4 = 0; /* "numpy.pxd":798 * child, new_offset = fields * * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") * */ __pyx_t_4 = PyInt_FromLong((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { /* "numpy.pxd":799 * * if (end - f) - (new_offset - offset[0]) < 15: * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< * * if ((child.byteorder == c'>' and little_endian) or */ __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_96), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; /* "numpy.pxd":801 * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") * * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< * (child.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") */ __pyx_t_7 = ((__pyx_v_child->byteorder == '>') != 0); if (__pyx_t_7) { __pyx_t_8 = (__pyx_v_little_endian != 0); } else { __pyx_t_8 = __pyx_t_7; } if (!__pyx_t_8) { /* "numpy.pxd":802 * * if ((child.byteorder == c'>' and little_endian) or * (child.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< * raise ValueError(u"Non-native byte order not supported") * # One could encode it in the format string and have Cython */ __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0); if (__pyx_t_7) { __pyx_t_9 = ((!(__pyx_v_little_endian != 0)) != 0); __pyx_t_10 = __pyx_t_9; } else { __pyx_t_10 = __pyx_t_7; } __pyx_t_7 = __pyx_t_10; } else { __pyx_t_7 = __pyx_t_8; } if (__pyx_t_7) { /* "numpy.pxd":803 * if ((child.byteorder == c'>' and little_endian) or * (child.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * # One could encode it in the format string and have Cython * # complain instead, BUT: < and > in format strings also imply */ __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_97), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; /* "numpy.pxd":813 * * # Output padding bytes * while offset[0] < new_offset: # <<<<<<<<<<<<<< * f[0] = 120 # "x"; pad byte * f += 1 */ while (1) { __pyx_t_5 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_7) break; /* "numpy.pxd":814 * # Output padding bytes * while offset[0] < new_offset: * f[0] = 120 # "x"; pad byte # <<<<<<<<<<<<<< * f += 1 * offset[0] += 1 */ (__pyx_v_f[0]) = 120; /* "numpy.pxd":815 * while offset[0] < new_offset: * f[0] = 120 # "x"; pad byte * f += 1 # <<<<<<<<<<<<<< * offset[0] += 1 * */ __pyx_v_f = (__pyx_v_f + 1); /* "numpy.pxd":816 * f[0] = 120 # "x"; pad byte * f += 1 * offset[0] += 1 # <<<<<<<<<<<<<< * * offset[0] += child.itemsize */ __pyx_t_11 = 0; (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + 1); } /* "numpy.pxd":818 * offset[0] += 1 * * offset[0] += child.itemsize # <<<<<<<<<<<<<< * * if not PyDataType_HASFIELDS(child): */ __pyx_t_11 = 0; (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + __pyx_v_child->elsize); /* "numpy.pxd":820 * offset[0] += child.itemsize * * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< * t = child.type_num * if end - f < 5: */ __pyx_t_7 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0); if (__pyx_t_7) { /* "numpy.pxd":821 * * if not PyDataType_HASFIELDS(child): * t = child.type_num # <<<<<<<<<<<<<< * if end - f < 5: * raise RuntimeError(u"Format string allocated too short.") */ __pyx_t_3 = PyInt_FromLong(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_3); __pyx_t_3 = 0; /* "numpy.pxd":822 * if not PyDataType_HASFIELDS(child): * t = child.type_num * if end - f < 5: # <<<<<<<<<<<<<< * raise RuntimeError(u"Format string allocated too short.") * */ __pyx_t_7 = (((__pyx_v_end - __pyx_v_f) < 5) != 0); if (__pyx_t_7) { /* "numpy.pxd":823 * t = child.type_num * if end - f < 5: * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< * * # Until ticket #99 is fixed, use integers to avoid warnings */ __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_99), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L12; } __pyx_L12:; /* "numpy.pxd":826 * * # Until ticket #99 is fixed, use integers to avoid warnings * if t == NPY_BYTE: f[0] = 98 #"b" # <<<<<<<<<<<<<< * elif t == NPY_UBYTE: f[0] = 66 #"B" * elif t == NPY_SHORT: f[0] = 104 #"h" */ __pyx_t_3 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 98; goto __pyx_L13; } /* "numpy.pxd":827 * # Until ticket #99 is fixed, use integers to avoid warnings * if t == NPY_BYTE: f[0] = 98 #"b" * elif t == NPY_UBYTE: f[0] = 66 #"B" # <<<<<<<<<<<<<< * elif t == NPY_SHORT: f[0] = 104 #"h" * elif t == NPY_USHORT: f[0] = 72 #"H" */ __pyx_t_5 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 66; goto __pyx_L13; } /* "numpy.pxd":828 * if t == NPY_BYTE: f[0] = 98 #"b" * elif t == NPY_UBYTE: f[0] = 66 #"B" * elif t == NPY_SHORT: f[0] = 104 #"h" # <<<<<<<<<<<<<< * elif t == NPY_USHORT: f[0] = 72 #"H" * elif t == NPY_INT: f[0] = 105 #"i" */ __pyx_t_3 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 104; goto __pyx_L13; } /* "numpy.pxd":829 * elif t == NPY_UBYTE: f[0] = 66 #"B" * elif t == NPY_SHORT: f[0] = 104 #"h" * elif t == NPY_USHORT: f[0] = 72 #"H" # <<<<<<<<<<<<<< * elif t == NPY_INT: f[0] = 105 #"i" * elif t == NPY_UINT: f[0] = 73 #"I" */ __pyx_t_5 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 72; goto __pyx_L13; } /* "numpy.pxd":830 * elif t == NPY_SHORT: f[0] = 104 #"h" * elif t == NPY_USHORT: f[0] = 72 #"H" * elif t == NPY_INT: f[0] = 105 #"i" # <<<<<<<<<<<<<< * elif t == NPY_UINT: f[0] = 73 #"I" * elif t == NPY_LONG: f[0] = 108 #"l" */ __pyx_t_3 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 105; goto __pyx_L13; } /* "numpy.pxd":831 * elif t == NPY_USHORT: f[0] = 72 #"H" * elif t == NPY_INT: f[0] = 105 #"i" * elif t == NPY_UINT: f[0] = 73 #"I" # <<<<<<<<<<<<<< * elif t == NPY_LONG: f[0] = 108 #"l" * elif t == NPY_ULONG: f[0] = 76 #"L" */ __pyx_t_5 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 73; goto __pyx_L13; } /* "numpy.pxd":832 * elif t == NPY_INT: f[0] = 105 #"i" * elif t == NPY_UINT: f[0] = 73 #"I" * elif t == NPY_LONG: f[0] = 108 #"l" # <<<<<<<<<<<<<< * elif t == NPY_ULONG: f[0] = 76 #"L" * elif t == NPY_LONGLONG: f[0] = 113 #"q" */ __pyx_t_3 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 108; goto __pyx_L13; } /* "numpy.pxd":833 * elif t == NPY_UINT: f[0] = 73 #"I" * elif t == NPY_LONG: f[0] = 108 #"l" * elif t == NPY_ULONG: f[0] = 76 #"L" # <<<<<<<<<<<<<< * elif t == NPY_LONGLONG: f[0] = 113 #"q" * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" */ __pyx_t_5 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 76; goto __pyx_L13; } /* "numpy.pxd":834 * elif t == NPY_LONG: f[0] = 108 #"l" * elif t == NPY_ULONG: f[0] = 76 #"L" * elif t == NPY_LONGLONG: f[0] = 113 #"q" # <<<<<<<<<<<<<< * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" * elif t == NPY_FLOAT: f[0] = 102 #"f" */ __pyx_t_3 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 113; goto __pyx_L13; } /* "numpy.pxd":835 * elif t == NPY_ULONG: f[0] = 76 #"L" * elif t == NPY_LONGLONG: f[0] = 113 #"q" * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" # <<<<<<<<<<<<<< * elif t == NPY_FLOAT: f[0] = 102 #"f" * elif t == NPY_DOUBLE: f[0] = 100 #"d" */ __pyx_t_5 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 81; goto __pyx_L13; } /* "numpy.pxd":836 * elif t == NPY_LONGLONG: f[0] = 113 #"q" * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" * elif t == NPY_FLOAT: f[0] = 102 #"f" # <<<<<<<<<<<<<< * elif t == NPY_DOUBLE: f[0] = 100 #"d" * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" */ __pyx_t_3 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 102; goto __pyx_L13; } /* "numpy.pxd":837 * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" * elif t == NPY_FLOAT: f[0] = 102 #"f" * elif t == NPY_DOUBLE: f[0] = 100 #"d" # <<<<<<<<<<<<<< * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf */ __pyx_t_5 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 100; goto __pyx_L13; } /* "numpy.pxd":838 * elif t == NPY_FLOAT: f[0] = 102 #"f" * elif t == NPY_DOUBLE: f[0] = 100 #"d" * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" # <<<<<<<<<<<<<< * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd */ __pyx_t_3 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 103; goto __pyx_L13; } /* "numpy.pxd":839 * elif t == NPY_DOUBLE: f[0] = 100 #"d" * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf # <<<<<<<<<<<<<< * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg */ __pyx_t_5 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 90; (__pyx_v_f[1]) = 102; __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L13; } /* "numpy.pxd":840 * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd # <<<<<<<<<<<<<< * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg * elif t == NPY_OBJECT: f[0] = 79 #"O" */ __pyx_t_3 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 90; (__pyx_v_f[1]) = 100; __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L13; } /* "numpy.pxd":841 * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg # <<<<<<<<<<<<<< * elif t == NPY_OBJECT: f[0] = 79 #"O" * else: */ __pyx_t_5 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 90; (__pyx_v_f[1]) = 103; __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L13; } /* "numpy.pxd":842 * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg * elif t == NPY_OBJECT: f[0] = 79 #"O" # <<<<<<<<<<<<<< * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) */ __pyx_t_3 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 79; goto __pyx_L13; } /*else*/ { /* "numpy.pxd":844 * elif t == NPY_OBJECT: f[0] = 79 #"O" * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< * f += 1 * else: */ __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_94), __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_5)); __Pyx_GIVEREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L13:; /* "numpy.pxd":845 * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) * f += 1 # <<<<<<<<<<<<<< * else: * # Cython ignores struct boundary information ("T{...}"), */ __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L11; } /*else*/ { /* "numpy.pxd":849 * # Cython ignores struct boundary information ("T{...}"), * # so don't output it * f = _util_dtypestring(child, f, end, offset) # <<<<<<<<<<<<<< * return f * */ __pyx_t_12 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_12 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_f = __pyx_t_12; } __pyx_L11:; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "numpy.pxd":850 * # so don't output it * f = _util_dtypestring(child, f, end, offset) * return f # <<<<<<<<<<<<<< * * */ __pyx_r = __pyx_v_f; goto __pyx_L0; __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_child); __Pyx_XDECREF(__pyx_v_fields); __Pyx_XDECREF(__pyx_v_childname); __Pyx_XDECREF(__pyx_v_new_offset); __Pyx_XDECREF(__pyx_v_t); __Pyx_TraceReturn(Py_None); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":965 * * * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< * cdef PyObject* baseptr * if base is None: */ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { PyObject *__pyx_v_baseptr; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("set_array_base", 0); __Pyx_TraceCall("set_array_base", __pyx_f[1], 965); /* "numpy.pxd":967 * cdef inline void set_array_base(ndarray arr, object base): * cdef PyObject* baseptr * if base is None: # <<<<<<<<<<<<<< * baseptr = NULL * else: */ __pyx_t_1 = (__pyx_v_base == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "numpy.pxd":968 * cdef PyObject* baseptr * if base is None: * baseptr = NULL # <<<<<<<<<<<<<< * else: * Py_INCREF(base) # important to do this before decref below! */ __pyx_v_baseptr = NULL; goto __pyx_L3; } /*else*/ { /* "numpy.pxd":970 * baseptr = NULL * else: * Py_INCREF(base) # important to do this before decref below! # <<<<<<<<<<<<<< * baseptr = base * Py_XDECREF(arr.base) */ Py_INCREF(__pyx_v_base); /* "numpy.pxd":971 * else: * Py_INCREF(base) # important to do this before decref below! * baseptr = base # <<<<<<<<<<<<<< * Py_XDECREF(arr.base) * arr.base = baseptr */ __pyx_v_baseptr = ((PyObject *)__pyx_v_base); } __pyx_L3:; /* "numpy.pxd":972 * Py_INCREF(base) # important to do this before decref below! * baseptr = base * Py_XDECREF(arr.base) # <<<<<<<<<<<<<< * arr.base = baseptr * */ Py_XDECREF(__pyx_v_arr->base); /* "numpy.pxd":973 * baseptr = base * Py_XDECREF(arr.base) * arr.base = baseptr # <<<<<<<<<<<<<< * * cdef inline object get_array_base(ndarray arr): */ __pyx_v_arr->base = __pyx_v_baseptr; __Pyx_TraceReturn(Py_None); __Pyx_RefNannyFinishContext(); } /* "numpy.pxd":975 * arr.base = baseptr * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< * if arr.base is NULL: * return None */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_array_base", 0); __Pyx_TraceCall("get_array_base", __pyx_f[1], 975); /* "numpy.pxd":976 * * cdef inline object get_array_base(ndarray arr): * if arr.base is NULL: # <<<<<<<<<<<<<< * return None * else: */ __pyx_t_1 = ((__pyx_v_arr->base == NULL) != 0); if (__pyx_t_1) { /* "numpy.pxd":977 * cdef inline object get_array_base(ndarray arr): * if arr.base is NULL: * return None # <<<<<<<<<<<<<< * else: * return arr.base */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_None); __pyx_r = Py_None; goto __pyx_L0; goto __pyx_L3; } /*else*/ { /* "numpy.pxd":979 * return None * else: * return arr.base # <<<<<<<<<<<<<< */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_arr->base)); __pyx_r = ((PyObject *)__pyx_v_arr->base); goto __pyx_L0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyMethodDef __pyx_methods[] = { {__Pyx_NAMESTR("me"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_1me, METH_NOARGS, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("nproc"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_3nproc, METH_NOARGS, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("get_size_threshold"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_5get_size_threshold, METH_NOARGS, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("set_size_threshold"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_7set_size_threshold, METH_O, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("should_distribute"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_9should_distribute, METH_O, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("is_distributed"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_11is_distributed, METH_O, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("is_array"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_13is_array, METH_O, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("get_shape"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_15get_shape, METH_O, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("get_dtype"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_17get_dtype, METH_O, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("listify"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_19listify, METH_O, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("tuplify"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_21tuplify, METH_O, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("mask_sync"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_23mask_sync, METH_NOARGS, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("sync"), (PyCFunction)__pyx_pw_5ga4py_4gain_4core_25sync, METH_NOARGS, __Pyx_DOCSTR(0)}, {0, 0, 0, 0} }; #if PY_MAJOR_VERSION >= 3 static struct PyModuleDef __pyx_moduledef = { #if PY_VERSION_HEX < 0x03020000 { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, #else PyModuleDef_HEAD_INIT, #endif __Pyx_NAMESTR("core"), 0, /* m_doc */ -1, /* m_size */ __pyx_methods /* m_methods */, NULL, /* m_reload */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL /* m_free */ }; #endif static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0}, {&__pyx_n_s_100, __pyx_k_100, sizeof(__pyx_k_100), 0, 0, 1, 1}, {&__pyx_n_s_101, __pyx_k_101, sizeof(__pyx_k_101), 0, 0, 1, 1}, {&__pyx_kp_s_104, __pyx_k_104, sizeof(__pyx_k_104), 0, 0, 1, 0}, {&__pyx_n_s_105, __pyx_k_105, sizeof(__pyx_k_105), 0, 0, 1, 1}, {&__pyx_n_s_108, __pyx_k_108, sizeof(__pyx_k_108), 0, 0, 1, 1}, {&__pyx_n_s_111, __pyx_k_111, sizeof(__pyx_k_111), 0, 0, 1, 1}, {&__pyx_n_s_114, __pyx_k_114, sizeof(__pyx_k_114), 0, 0, 1, 1}, {&__pyx_n_s_117, __pyx_k_117, sizeof(__pyx_k_117), 0, 0, 1, 1}, {&__pyx_n_s_120, __pyx_k_120, sizeof(__pyx_k_120), 0, 0, 1, 1}, {&__pyx_n_s_123, __pyx_k_123, sizeof(__pyx_k_123), 0, 0, 1, 1}, {&__pyx_n_s_126, __pyx_k_126, sizeof(__pyx_k_126), 0, 0, 1, 1}, {&__pyx_n_s_129, __pyx_k_129, sizeof(__pyx_k_129), 0, 0, 1, 1}, {&__pyx_n_s_133, __pyx_k_133, sizeof(__pyx_k_133), 0, 0, 1, 1}, {&__pyx_n_s_136, __pyx_k_136, sizeof(__pyx_k_136), 0, 0, 1, 1}, {&__pyx_n_s_139, __pyx_k_139, sizeof(__pyx_k_139), 0, 0, 1, 1}, {&__pyx_n_s_142, __pyx_k_142, sizeof(__pyx_k_142), 0, 0, 1, 1}, {&__pyx_n_s_145, __pyx_k_145, sizeof(__pyx_k_145), 0, 0, 1, 1}, {&__pyx_n_s_148, __pyx_k_148, sizeof(__pyx_k_148), 0, 0, 1, 1}, {&__pyx_kp_s_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 0, 1, 0}, {&__pyx_n_s_151, __pyx_k_151, sizeof(__pyx_k_151), 0, 0, 1, 1}, {&__pyx_n_s_154, __pyx_k_154, sizeof(__pyx_k_154), 0, 0, 1, 1}, {&__pyx_n_s_157, __pyx_k_157, sizeof(__pyx_k_157), 0, 0, 1, 1}, {&__pyx_n_s_160, __pyx_k_160, sizeof(__pyx_k_160), 0, 0, 1, 1}, {&__pyx_kp_s_161, __pyx_k_161, sizeof(__pyx_k_161), 0, 0, 1, 0}, {&__pyx_n_s_164, __pyx_k_164, sizeof(__pyx_k_164), 0, 0, 1, 1}, {&__pyx_n_s_167, __pyx_k_167, sizeof(__pyx_k_167), 0, 0, 1, 1}, {&__pyx_n_s_170, __pyx_k_170, sizeof(__pyx_k_170), 0, 0, 1, 1}, {&__pyx_n_s_173, __pyx_k_173, sizeof(__pyx_k_173), 0, 0, 1, 1}, {&__pyx_n_s_176, __pyx_k_176, sizeof(__pyx_k_176), 0, 0, 1, 1}, {&__pyx_kp_s_18, __pyx_k_18, sizeof(__pyx_k_18), 0, 0, 1, 0}, {&__pyx_n_s_180, __pyx_k_180, sizeof(__pyx_k_180), 0, 0, 1, 1}, {&__pyx_n_s_184, __pyx_k_184, sizeof(__pyx_k_184), 0, 0, 1, 1}, {&__pyx_n_s_188, __pyx_k_188, sizeof(__pyx_k_188), 0, 0, 1, 1}, {&__pyx_kp_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 0}, {&__pyx_n_s_191, __pyx_k_191, sizeof(__pyx_k_191), 0, 0, 1, 1}, {&__pyx_n_s_194, __pyx_k_194, sizeof(__pyx_k_194), 0, 0, 1, 1}, {&__pyx_n_s_197, __pyx_k_197, sizeof(__pyx_k_197), 0, 0, 1, 1}, {&__pyx_kp_s_2, __pyx_k_2, sizeof(__pyx_k_2), 0, 0, 1, 0}, {&__pyx_n_s_200, __pyx_k_200, sizeof(__pyx_k_200), 0, 0, 1, 1}, {&__pyx_n_s_203, __pyx_k_203, sizeof(__pyx_k_203), 0, 0, 1, 1}, {&__pyx_n_s_206, __pyx_k_206, sizeof(__pyx_k_206), 0, 0, 1, 1}, {&__pyx_n_s_209, __pyx_k_209, sizeof(__pyx_k_209), 0, 0, 1, 1}, {&__pyx_n_s_212, __pyx_k_212, sizeof(__pyx_k_212), 0, 0, 1, 1}, {&__pyx_n_s_215, __pyx_k_215, sizeof(__pyx_k_215), 0, 0, 1, 1}, {&__pyx_n_s_218, __pyx_k_218, sizeof(__pyx_k_218), 0, 0, 1, 1}, {&__pyx_n_s_221, __pyx_k_221, sizeof(__pyx_k_221), 0, 0, 1, 1}, {&__pyx_n_s_224, __pyx_k_224, sizeof(__pyx_k_224), 0, 0, 1, 1}, {&__pyx_n_s_227, __pyx_k_227, sizeof(__pyx_k_227), 0, 0, 1, 1}, {&__pyx_n_s_23, __pyx_k_23, sizeof(__pyx_k_23), 0, 0, 1, 1}, {&__pyx_n_s_230, __pyx_k_230, sizeof(__pyx_k_230), 0, 0, 1, 1}, {&__pyx_n_s_233, __pyx_k_233, sizeof(__pyx_k_233), 0, 0, 1, 1}, {&__pyx_n_s_236, __pyx_k_236, sizeof(__pyx_k_236), 0, 0, 1, 1}, {&__pyx_n_s_239, __pyx_k_239, sizeof(__pyx_k_239), 0, 0, 1, 1}, {&__pyx_n_s_24, __pyx_k_24, sizeof(__pyx_k_24), 0, 0, 1, 1}, {&__pyx_n_s_242, __pyx_k_242, sizeof(__pyx_k_242), 0, 0, 1, 1}, {&__pyx_n_s_245, __pyx_k_245, sizeof(__pyx_k_245), 0, 0, 1, 1}, {&__pyx_n_s_248, __pyx_k_248, sizeof(__pyx_k_248), 0, 0, 1, 1}, {&__pyx_kp_s_25, __pyx_k_25, sizeof(__pyx_k_25), 0, 0, 1, 0}, {&__pyx_n_s_251, __pyx_k_251, sizeof(__pyx_k_251), 0, 0, 1, 1}, {&__pyx_n_s_254, __pyx_k_254, sizeof(__pyx_k_254), 0, 0, 1, 1}, {&__pyx_n_s_258, __pyx_k_258, sizeof(__pyx_k_258), 0, 0, 1, 1}, {&__pyx_n_s_262, __pyx_k_262, sizeof(__pyx_k_262), 0, 0, 1, 1}, {&__pyx_n_s_266, __pyx_k_266, sizeof(__pyx_k_266), 0, 0, 1, 1}, {&__pyx_n_s_270, __pyx_k_270, sizeof(__pyx_k_270), 0, 0, 1, 1}, {&__pyx_n_s_274, __pyx_k_274, sizeof(__pyx_k_274), 0, 0, 1, 1}, {&__pyx_n_s_277, __pyx_k_277, sizeof(__pyx_k_277), 0, 0, 1, 1}, {&__pyx_n_s_280, __pyx_k_280, sizeof(__pyx_k_280), 0, 0, 1, 1}, {&__pyx_n_s_284, __pyx_k_284, sizeof(__pyx_k_284), 0, 0, 1, 1}, {&__pyx_n_s_288, __pyx_k_288, sizeof(__pyx_k_288), 0, 0, 1, 1}, {&__pyx_n_s_292, __pyx_k_292, sizeof(__pyx_k_292), 0, 0, 1, 1}, {&__pyx_n_s_295, __pyx_k_295, sizeof(__pyx_k_295), 0, 0, 1, 1}, {&__pyx_n_s_298, __pyx_k_298, sizeof(__pyx_k_298), 0, 0, 1, 1}, {&__pyx_kp_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 0}, {&__pyx_n_s_302, __pyx_k_302, sizeof(__pyx_k_302), 0, 0, 1, 1}, {&__pyx_n_s_306, __pyx_k_306, sizeof(__pyx_k_306), 0, 0, 1, 1}, {&__pyx_kp_s_31, __pyx_k_31, sizeof(__pyx_k_31), 0, 0, 1, 0}, {&__pyx_n_s_310, __pyx_k_310, sizeof(__pyx_k_310), 0, 0, 1, 1}, {&__pyx_n_s_314, __pyx_k_314, sizeof(__pyx_k_314), 0, 0, 1, 1}, {&__pyx_n_s_318, __pyx_k_318, sizeof(__pyx_k_318), 0, 0, 1, 1}, {&__pyx_kp_s_32, __pyx_k_32, sizeof(__pyx_k_32), 0, 0, 1, 0}, {&__pyx_n_s_321, __pyx_k_321, sizeof(__pyx_k_321), 0, 0, 1, 1}, {&__pyx_n_s_324, __pyx_k_324, sizeof(__pyx_k_324), 0, 0, 1, 1}, {&__pyx_n_s_327, __pyx_k_327, sizeof(__pyx_k_327), 0, 0, 1, 1}, {&__pyx_kp_s_33, __pyx_k_33, sizeof(__pyx_k_33), 0, 0, 1, 0}, {&__pyx_n_s_331, __pyx_k_331, sizeof(__pyx_k_331), 0, 0, 1, 1}, {&__pyx_n_s_334, __pyx_k_334, sizeof(__pyx_k_334), 0, 0, 1, 1}, {&__pyx_n_s_337, __pyx_k_337, sizeof(__pyx_k_337), 0, 0, 1, 1}, {&__pyx_n_s_340, __pyx_k_340, sizeof(__pyx_k_340), 0, 0, 1, 1}, {&__pyx_n_s_344, __pyx_k_344, sizeof(__pyx_k_344), 0, 0, 1, 1}, {&__pyx_n_s_348, __pyx_k_348, sizeof(__pyx_k_348), 0, 0, 1, 1}, {&__pyx_n_s_352, __pyx_k_352, sizeof(__pyx_k_352), 0, 0, 1, 1}, {&__pyx_n_s_356, __pyx_k_356, sizeof(__pyx_k_356), 0, 0, 1, 1}, {&__pyx_n_s_359, __pyx_k_359, sizeof(__pyx_k_359), 0, 0, 1, 1}, {&__pyx_n_s_363, __pyx_k_363, sizeof(__pyx_k_363), 0, 0, 1, 1}, {&__pyx_n_s_367, __pyx_k_367, sizeof(__pyx_k_367), 0, 0, 1, 1}, {&__pyx_n_s_371, __pyx_k_371, sizeof(__pyx_k_371), 0, 0, 1, 1}, {&__pyx_n_s_375, __pyx_k_375, sizeof(__pyx_k_375), 0, 0, 1, 1}, {&__pyx_n_s_379, __pyx_k_379, sizeof(__pyx_k_379), 0, 0, 1, 1}, {&__pyx_n_s_383, __pyx_k_383, sizeof(__pyx_k_383), 0, 0, 1, 1}, {&__pyx_n_s_386, __pyx_k_386, sizeof(__pyx_k_386), 0, 0, 1, 1}, {&__pyx_n_s_390, __pyx_k_390, sizeof(__pyx_k_390), 0, 0, 1, 1}, {&__pyx_n_s_394, __pyx_k_394, sizeof(__pyx_k_394), 0, 0, 1, 1}, {&__pyx_n_s_398, __pyx_k_398, sizeof(__pyx_k_398), 0, 0, 1, 1}, {&__pyx_kp_s_4, __pyx_k_4, sizeof(__pyx_k_4), 0, 0, 1, 0}, {&__pyx_n_s_402, __pyx_k_402, sizeof(__pyx_k_402), 0, 0, 1, 1}, {&__pyx_n_s_406, __pyx_k_406, sizeof(__pyx_k_406), 0, 0, 1, 1}, {&__pyx_n_s_409, __pyx_k_409, sizeof(__pyx_k_409), 0, 0, 1, 1}, {&__pyx_n_s_413, __pyx_k_413, sizeof(__pyx_k_413), 0, 0, 1, 1}, {&__pyx_n_s_417, __pyx_k_417, sizeof(__pyx_k_417), 0, 0, 1, 1}, {&__pyx_n_s_420, __pyx_k_420, sizeof(__pyx_k_420), 0, 0, 1, 1}, {&__pyx_n_s_424, __pyx_k_424, sizeof(__pyx_k_424), 0, 0, 1, 1}, {&__pyx_n_s_428, __pyx_k_428, sizeof(__pyx_k_428), 0, 0, 1, 1}, {&__pyx_n_s_431, __pyx_k_431, sizeof(__pyx_k_431), 0, 0, 1, 1}, {&__pyx_n_s_435, __pyx_k_435, sizeof(__pyx_k_435), 0, 0, 1, 1}, {&__pyx_n_s_439, __pyx_k_439, sizeof(__pyx_k_439), 0, 0, 1, 1}, {&__pyx_n_s_442, __pyx_k_442, sizeof(__pyx_k_442), 0, 0, 1, 1}, {&__pyx_n_s_446, __pyx_k_446, sizeof(__pyx_k_446), 0, 0, 1, 1}, {&__pyx_kp_s_45, __pyx_k_45, sizeof(__pyx_k_45), 0, 0, 1, 0}, {&__pyx_n_s_450, __pyx_k_450, sizeof(__pyx_k_450), 0, 0, 1, 1}, {&__pyx_n_s_453, __pyx_k_453, sizeof(__pyx_k_453), 0, 0, 1, 1}, {&__pyx_n_s_456, __pyx_k_456, sizeof(__pyx_k_456), 0, 0, 1, 1}, {&__pyx_n_s_459, __pyx_k_459, sizeof(__pyx_k_459), 0, 0, 1, 1}, {&__pyx_kp_s_46, __pyx_k_46, sizeof(__pyx_k_46), 0, 0, 1, 0}, {&__pyx_n_s_462, __pyx_k_462, sizeof(__pyx_k_462), 0, 0, 1, 1}, {&__pyx_n_s_465, __pyx_k_465, sizeof(__pyx_k_465), 0, 0, 1, 1}, {&__pyx_n_s_468, __pyx_k_468, sizeof(__pyx_k_468), 0, 0, 1, 1}, {&__pyx_kp_s_47, __pyx_k_47, sizeof(__pyx_k_47), 0, 0, 1, 0}, {&__pyx_n_s_471, __pyx_k_471, sizeof(__pyx_k_471), 0, 0, 1, 1}, {&__pyx_n_s_474, __pyx_k_474, sizeof(__pyx_k_474), 0, 0, 1, 1}, {&__pyx_n_s_477, __pyx_k_477, sizeof(__pyx_k_477), 0, 0, 1, 1}, {&__pyx_n_s_480, __pyx_k_480, sizeof(__pyx_k_480), 0, 0, 1, 1}, {&__pyx_n_s_483, __pyx_k_483, sizeof(__pyx_k_483), 0, 0, 1, 1}, {&__pyx_n_s_487, __pyx_k_487, sizeof(__pyx_k_487), 0, 0, 1, 1}, {&__pyx_kp_s_49, __pyx_k_49, sizeof(__pyx_k_49), 0, 0, 1, 0}, {&__pyx_n_s_490, __pyx_k_490, sizeof(__pyx_k_490), 0, 0, 1, 1}, {&__pyx_n_s_493, __pyx_k_493, sizeof(__pyx_k_493), 0, 0, 1, 1}, {&__pyx_n_s_496, __pyx_k_496, sizeof(__pyx_k_496), 0, 0, 1, 1}, {&__pyx_n_s_499, __pyx_k_499, sizeof(__pyx_k_499), 0, 0, 1, 1}, {&__pyx_n_s_502, __pyx_k_502, sizeof(__pyx_k_502), 0, 0, 1, 1}, {&__pyx_n_s_505, __pyx_k_505, sizeof(__pyx_k_505), 0, 0, 1, 1}, {&__pyx_n_s_508, __pyx_k_508, sizeof(__pyx_k_508), 0, 0, 1, 1}, {&__pyx_n_s_511, __pyx_k_511, sizeof(__pyx_k_511), 0, 0, 1, 1}, {&__pyx_n_s_514, __pyx_k_514, sizeof(__pyx_k_514), 0, 0, 1, 1}, {&__pyx_n_s_517, __pyx_k_517, sizeof(__pyx_k_517), 0, 0, 1, 1}, {&__pyx_n_s_520, __pyx_k_520, sizeof(__pyx_k_520), 0, 0, 1, 1}, {&__pyx_n_s_523, __pyx_k_523, sizeof(__pyx_k_523), 0, 0, 1, 1}, {&__pyx_n_s_526, __pyx_k_526, sizeof(__pyx_k_526), 0, 0, 1, 1}, {&__pyx_n_s_529, __pyx_k_529, sizeof(__pyx_k_529), 0, 0, 1, 1}, {&__pyx_kp_s_53, __pyx_k_53, sizeof(__pyx_k_53), 0, 0, 1, 0}, {&__pyx_n_s_532, __pyx_k_532, sizeof(__pyx_k_532), 0, 0, 1, 1}, {&__pyx_n_s_535, __pyx_k_535, sizeof(__pyx_k_535), 0, 0, 1, 1}, {&__pyx_n_s_538, __pyx_k_538, sizeof(__pyx_k_538), 0, 0, 1, 1}, {&__pyx_kp_s_54, __pyx_k_54, sizeof(__pyx_k_54), 0, 0, 1, 0}, {&__pyx_n_s_541, __pyx_k_541, sizeof(__pyx_k_541), 0, 0, 1, 1}, {&__pyx_n_s_544, __pyx_k_544, sizeof(__pyx_k_544), 0, 0, 1, 1}, {&__pyx_n_s_547, __pyx_k_547, sizeof(__pyx_k_547), 0, 0, 1, 1}, {&__pyx_kp_s_55, __pyx_k_55, sizeof(__pyx_k_55), 0, 0, 1, 0}, {&__pyx_n_s_550, __pyx_k_550, sizeof(__pyx_k_550), 0, 0, 1, 1}, {&__pyx_n_s_553, __pyx_k_553, sizeof(__pyx_k_553), 0, 0, 1, 1}, {&__pyx_n_s_556, __pyx_k_556, sizeof(__pyx_k_556), 0, 0, 1, 1}, {&__pyx_n_s_559, __pyx_k_559, sizeof(__pyx_k_559), 0, 0, 1, 1}, {&__pyx_kp_s_56, __pyx_k_56, sizeof(__pyx_k_56), 0, 0, 1, 0}, {&__pyx_n_s_562, __pyx_k_562, sizeof(__pyx_k_562), 0, 0, 1, 1}, {&__pyx_n_s_565, __pyx_k_565, sizeof(__pyx_k_565), 0, 0, 1, 1}, {&__pyx_n_s_568, __pyx_k_568, sizeof(__pyx_k_568), 0, 0, 1, 1}, {&__pyx_kp_s_57, __pyx_k_57, sizeof(__pyx_k_57), 0, 0, 1, 0}, {&__pyx_n_s_571, __pyx_k_571, sizeof(__pyx_k_571), 0, 0, 1, 1}, {&__pyx_n_s_574, __pyx_k_574, sizeof(__pyx_k_574), 0, 0, 1, 1}, {&__pyx_n_s_577, __pyx_k_577, sizeof(__pyx_k_577), 0, 0, 1, 1}, {&__pyx_kp_s_58, __pyx_k_58, sizeof(__pyx_k_58), 0, 0, 1, 0}, {&__pyx_n_s_580, __pyx_k_580, sizeof(__pyx_k_580), 0, 0, 1, 1}, {&__pyx_n_s_583, __pyx_k_583, sizeof(__pyx_k_583), 0, 0, 1, 1}, {&__pyx_n_s_586, __pyx_k_586, sizeof(__pyx_k_586), 0, 0, 1, 1}, {&__pyx_n_s_589, __pyx_k_589, sizeof(__pyx_k_589), 0, 0, 1, 1}, {&__pyx_kp_s_59, __pyx_k_59, sizeof(__pyx_k_59), 0, 0, 1, 0}, {&__pyx_n_s_592, __pyx_k_592, sizeof(__pyx_k_592), 0, 0, 1, 1}, {&__pyx_n_s_595, __pyx_k_595, sizeof(__pyx_k_595), 0, 0, 1, 1}, {&__pyx_n_s_598, __pyx_k_598, sizeof(__pyx_k_598), 0, 0, 1, 1}, {&__pyx_kp_s_60, __pyx_k_60, sizeof(__pyx_k_60), 0, 0, 1, 0}, {&__pyx_n_s_601, __pyx_k_601, sizeof(__pyx_k_601), 0, 0, 1, 1}, {&__pyx_n_s_604, __pyx_k_604, sizeof(__pyx_k_604), 0, 0, 1, 1}, {&__pyx_n_s_607, __pyx_k_607, sizeof(__pyx_k_607), 0, 0, 1, 1}, {&__pyx_n_s_610, __pyx_k_610, sizeof(__pyx_k_610), 0, 0, 1, 1}, {&__pyx_n_s_613, __pyx_k_613, sizeof(__pyx_k_613), 0, 0, 1, 1}, {&__pyx_n_s_616, __pyx_k_616, sizeof(__pyx_k_616), 0, 0, 1, 1}, {&__pyx_n_s_619, __pyx_k_619, sizeof(__pyx_k_619), 0, 0, 1, 1}, {&__pyx_kp_s_62, __pyx_k_62, sizeof(__pyx_k_62), 0, 0, 1, 0}, {&__pyx_n_s_622, __pyx_k_622, sizeof(__pyx_k_622), 0, 0, 1, 1}, {&__pyx_n_s_625, __pyx_k_625, sizeof(__pyx_k_625), 0, 0, 1, 1}, {&__pyx_n_s_628, __pyx_k_628, sizeof(__pyx_k_628), 0, 0, 1, 1}, {&__pyx_n_s_631, __pyx_k_631, sizeof(__pyx_k_631), 0, 0, 1, 1}, {&__pyx_n_s_634, __pyx_k_634, sizeof(__pyx_k_634), 0, 0, 1, 1}, {&__pyx_n_s_637, __pyx_k_637, sizeof(__pyx_k_637), 0, 0, 1, 1}, {&__pyx_kp_s_64, __pyx_k_64, sizeof(__pyx_k_64), 0, 0, 1, 0}, {&__pyx_n_s_640, __pyx_k_640, sizeof(__pyx_k_640), 0, 0, 1, 1}, {&__pyx_n_s_643, __pyx_k_643, sizeof(__pyx_k_643), 0, 0, 1, 1}, {&__pyx_n_s_646, __pyx_k_646, sizeof(__pyx_k_646), 0, 0, 1, 1}, {&__pyx_n_s_649, __pyx_k_649, sizeof(__pyx_k_649), 0, 0, 1, 1}, {&__pyx_kp_s_65, __pyx_k_65, sizeof(__pyx_k_65), 0, 0, 1, 0}, {&__pyx_n_s_652, __pyx_k_652, sizeof(__pyx_k_652), 0, 0, 1, 1}, {&__pyx_n_s_655, __pyx_k_655, sizeof(__pyx_k_655), 0, 0, 1, 1}, {&__pyx_n_s_658, __pyx_k_658, sizeof(__pyx_k_658), 0, 0, 1, 1}, {&__pyx_n_s_66, __pyx_k_66, sizeof(__pyx_k_66), 0, 0, 1, 1}, {&__pyx_n_s_661, __pyx_k_661, sizeof(__pyx_k_661), 0, 0, 1, 1}, {&__pyx_n_s_664, __pyx_k_664, sizeof(__pyx_k_664), 0, 0, 1, 1}, {&__pyx_n_s_667, __pyx_k_667, sizeof(__pyx_k_667), 0, 0, 1, 1}, {&__pyx_kp_s_67, __pyx_k_67, sizeof(__pyx_k_67), 0, 0, 1, 0}, {&__pyx_n_s_670, __pyx_k_670, sizeof(__pyx_k_670), 0, 0, 1, 1}, {&__pyx_n_s_673, __pyx_k_673, sizeof(__pyx_k_673), 0, 0, 1, 1}, {&__pyx_n_s_676, __pyx_k_676, sizeof(__pyx_k_676), 0, 0, 1, 1}, {&__pyx_kp_s_677, __pyx_k_677, sizeof(__pyx_k_677), 0, 0, 1, 0}, {&__pyx_kp_s_68, __pyx_k_68, sizeof(__pyx_k_68), 0, 0, 1, 0}, {&__pyx_n_s_682, __pyx_k_682, sizeof(__pyx_k_682), 0, 0, 1, 1}, {&__pyx_n_s_685, __pyx_k_685, sizeof(__pyx_k_685), 0, 0, 1, 1}, {&__pyx_n_s_688, __pyx_k_688, sizeof(__pyx_k_688), 0, 0, 1, 1}, {&__pyx_n_s_691, __pyx_k_691, sizeof(__pyx_k_691), 0, 0, 1, 1}, {&__pyx_n_s_694, __pyx_k_694, sizeof(__pyx_k_694), 0, 0, 1, 1}, {&__pyx_n_s_697, __pyx_k_697, sizeof(__pyx_k_697), 0, 0, 1, 1}, {&__pyx_n_s_700, __pyx_k_700, sizeof(__pyx_k_700), 0, 0, 1, 1}, {&__pyx_n_s_703, __pyx_k_703, sizeof(__pyx_k_703), 0, 0, 1, 1}, {&__pyx_n_s_706, __pyx_k_706, sizeof(__pyx_k_706), 0, 0, 1, 1}, {&__pyx_n_s_710, __pyx_k_710, sizeof(__pyx_k_710), 0, 0, 1, 1}, {&__pyx_n_s_714, __pyx_k_714, sizeof(__pyx_k_714), 0, 0, 1, 1}, {&__pyx_n_s_718, __pyx_k_718, sizeof(__pyx_k_718), 0, 0, 1, 1}, {&__pyx_n_s_722, __pyx_k_722, sizeof(__pyx_k_722), 0, 0, 1, 1}, {&__pyx_n_s_725, __pyx_k_725, sizeof(__pyx_k_725), 0, 0, 1, 1}, {&__pyx_n_s_728, __pyx_k_728, sizeof(__pyx_k_728), 0, 0, 1, 1}, {&__pyx_kp_s_729, __pyx_k_729, sizeof(__pyx_k_729), 0, 0, 1, 0}, {&__pyx_n_s_732, __pyx_k_732, sizeof(__pyx_k_732), 0, 0, 1, 1}, {&__pyx_n_s_735, __pyx_k_735, sizeof(__pyx_k_735), 0, 0, 1, 1}, {&__pyx_n_s_738, __pyx_k_738, sizeof(__pyx_k_738), 0, 0, 1, 1}, {&__pyx_kp_s_74, __pyx_k_74, sizeof(__pyx_k_74), 0, 0, 1, 0}, {&__pyx_n_s_741, __pyx_k_741, sizeof(__pyx_k_741), 0, 0, 1, 1}, {&__pyx_n_s_744, __pyx_k_744, sizeof(__pyx_k_744), 0, 0, 1, 1}, {&__pyx_n_s_747, __pyx_k_747, sizeof(__pyx_k_747), 0, 0, 1, 1}, {&__pyx_n_s_750, __pyx_k_750, sizeof(__pyx_k_750), 0, 0, 1, 1}, {&__pyx_n_s_754, __pyx_k_754, sizeof(__pyx_k_754), 0, 0, 1, 1}, {&__pyx_n_s_758, __pyx_k_758, sizeof(__pyx_k_758), 0, 0, 1, 1}, {&__pyx_n_s_761, __pyx_k_761, sizeof(__pyx_k_761), 0, 0, 1, 1}, {&__pyx_n_s_764, __pyx_k_764, sizeof(__pyx_k_764), 0, 0, 1, 1}, {&__pyx_n_s_767, __pyx_k_767, sizeof(__pyx_k_767), 0, 0, 1, 1}, {&__pyx_n_s_770, __pyx_k_770, sizeof(__pyx_k_770), 0, 0, 1, 1}, {&__pyx_n_s_773, __pyx_k_773, sizeof(__pyx_k_773), 0, 0, 1, 1}, {&__pyx_n_s_776, __pyx_k_776, sizeof(__pyx_k_776), 0, 0, 1, 1}, {&__pyx_n_s_779, __pyx_k_779, sizeof(__pyx_k_779), 0, 0, 1, 1}, {&__pyx_n_s_782, __pyx_k_782, sizeof(__pyx_k_782), 0, 0, 1, 1}, {&__pyx_n_s_785, __pyx_k_785, sizeof(__pyx_k_785), 0, 0, 1, 1}, {&__pyx_n_s_788, __pyx_k_788, sizeof(__pyx_k_788), 0, 0, 1, 1}, {&__pyx_kp_s_789, __pyx_k_789, sizeof(__pyx_k_789), 0, 0, 1, 0}, {&__pyx_kp_s_79, __pyx_k_79, sizeof(__pyx_k_79), 0, 0, 1, 0}, {&__pyx_n_s_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 0, 1, 1}, {&__pyx_kp_s_80, __pyx_k_80, sizeof(__pyx_k_80), 0, 0, 1, 0}, {&__pyx_kp_u_800, __pyx_k_800, sizeof(__pyx_k_800), 0, 1, 0, 0}, {&__pyx_kp_u_801, __pyx_k_801, sizeof(__pyx_k_801), 0, 1, 0, 0}, {&__pyx_kp_u_802, __pyx_k_802, sizeof(__pyx_k_802), 0, 1, 0, 0}, {&__pyx_kp_u_803, __pyx_k_803, sizeof(__pyx_k_803), 0, 1, 0, 0}, {&__pyx_kp_u_804, __pyx_k_804, sizeof(__pyx_k_804), 0, 1, 0, 0}, {&__pyx_kp_u_805, __pyx_k_805, sizeof(__pyx_k_805), 0, 1, 0, 0}, {&__pyx_kp_u_806, __pyx_k_806, sizeof(__pyx_k_806), 0, 1, 0, 0}, {&__pyx_kp_u_807, __pyx_k_807, sizeof(__pyx_k_807), 0, 1, 0, 0}, {&__pyx_kp_u_808, __pyx_k_808, sizeof(__pyx_k_808), 0, 1, 0, 0}, {&__pyx_kp_u_809, __pyx_k_809, sizeof(__pyx_k_809), 0, 1, 0, 0}, {&__pyx_kp_s_81, __pyx_k_81, sizeof(__pyx_k_81), 0, 0, 1, 0}, {&__pyx_kp_u_810, __pyx_k_810, sizeof(__pyx_k_810), 0, 1, 0, 0}, {&__pyx_kp_u_811, __pyx_k_811, sizeof(__pyx_k_811), 0, 1, 0, 0}, {&__pyx_kp_u_812, __pyx_k_812, sizeof(__pyx_k_812), 0, 1, 0, 0}, {&__pyx_kp_u_813, __pyx_k_813, sizeof(__pyx_k_813), 0, 1, 0, 0}, {&__pyx_kp_u_814, __pyx_k_814, sizeof(__pyx_k_814), 0, 1, 0, 0}, {&__pyx_kp_u_815, __pyx_k_815, sizeof(__pyx_k_815), 0, 1, 0, 0}, {&__pyx_kp_u_816, __pyx_k_816, sizeof(__pyx_k_816), 0, 1, 0, 0}, {&__pyx_kp_u_817, __pyx_k_817, sizeof(__pyx_k_817), 0, 1, 0, 0}, {&__pyx_kp_u_818, __pyx_k_818, sizeof(__pyx_k_818), 0, 1, 0, 0}, {&__pyx_kp_u_819, __pyx_k_819, sizeof(__pyx_k_819), 0, 1, 0, 0}, {&__pyx_kp_u_820, __pyx_k_820, sizeof(__pyx_k_820), 0, 1, 0, 0}, {&__pyx_kp_u_821, __pyx_k_821, sizeof(__pyx_k_821), 0, 1, 0, 0}, {&__pyx_kp_u_822, __pyx_k_822, sizeof(__pyx_k_822), 0, 1, 0, 0}, {&__pyx_kp_u_823, __pyx_k_823, sizeof(__pyx_k_823), 0, 1, 0, 0}, {&__pyx_kp_u_824, __pyx_k_824, sizeof(__pyx_k_824), 0, 1, 0, 0}, {&__pyx_kp_u_825, __pyx_k_825, sizeof(__pyx_k_825), 0, 1, 0, 0}, {&__pyx_kp_u_826, __pyx_k_826, sizeof(__pyx_k_826), 0, 1, 0, 0}, {&__pyx_kp_u_827, __pyx_k_827, sizeof(__pyx_k_827), 0, 1, 0, 0}, {&__pyx_kp_u_828, __pyx_k_828, sizeof(__pyx_k_828), 0, 1, 0, 0}, {&__pyx_kp_u_829, __pyx_k_829, sizeof(__pyx_k_829), 0, 1, 0, 0}, {&__pyx_kp_s_83, __pyx_k_83, sizeof(__pyx_k_83), 0, 0, 1, 0}, {&__pyx_kp_u_830, __pyx_k_830, sizeof(__pyx_k_830), 0, 1, 0, 0}, {&__pyx_kp_u_831, __pyx_k_831, sizeof(__pyx_k_831), 0, 1, 0, 0}, {&__pyx_kp_u_832, __pyx_k_832, sizeof(__pyx_k_832), 0, 1, 0, 0}, {&__pyx_kp_u_833, __pyx_k_833, sizeof(__pyx_k_833), 0, 1, 0, 0}, {&__pyx_kp_u_834, __pyx_k_834, sizeof(__pyx_k_834), 0, 1, 0, 0}, {&__pyx_kp_u_835, __pyx_k_835, sizeof(__pyx_k_835), 0, 1, 0, 0}, {&__pyx_kp_u_836, __pyx_k_836, sizeof(__pyx_k_836), 0, 1, 0, 0}, {&__pyx_kp_u_837, __pyx_k_837, sizeof(__pyx_k_837), 0, 1, 0, 0}, {&__pyx_kp_u_838, __pyx_k_838, sizeof(__pyx_k_838), 0, 1, 0, 0}, {&__pyx_kp_u_839, __pyx_k_839, sizeof(__pyx_k_839), 0, 1, 0, 0}, {&__pyx_kp_s_86, __pyx_k_86, sizeof(__pyx_k_86), 0, 0, 1, 0}, {&__pyx_kp_s_87, __pyx_k_87, sizeof(__pyx_k_87), 0, 0, 1, 0}, {&__pyx_kp_u_88, __pyx_k_88, sizeof(__pyx_k_88), 0, 1, 0, 0}, {&__pyx_kp_s_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 0, 1, 0}, {&__pyx_kp_u_90, __pyx_k_90, sizeof(__pyx_k_90), 0, 1, 0, 0}, {&__pyx_kp_u_92, __pyx_k_92, sizeof(__pyx_k_92), 0, 1, 0, 0}, {&__pyx_kp_u_94, __pyx_k_94, sizeof(__pyx_k_94), 0, 1, 0, 0}, {&__pyx_kp_u_95, __pyx_k_95, sizeof(__pyx_k_95), 0, 1, 0, 0}, {&__pyx_kp_u_98, __pyx_k_98, sizeof(__pyx_k_98), 0, 1, 0, 0}, {&__pyx_n_s__A, __pyx_k__A, sizeof(__pyx_k__A), 0, 0, 1, 1}, {&__pyx_n_s__ALIGNED, __pyx_k__ALIGNED, sizeof(__pyx_k__ALIGNED), 0, 0, 1, 1}, {&__pyx_n_s__AttributeError, __pyx_k__AttributeError, sizeof(__pyx_k__AttributeError), 0, 0, 1, 1}, {&__pyx_n_s__C, __pyx_k__C, sizeof(__pyx_k__C), 0, 0, 1, 1}, {&__pyx_n_s__C_CHAR, __pyx_k__C_CHAR, sizeof(__pyx_k__C_CHAR), 0, 0, 1, 1}, {&__pyx_n_s__C_CONTIGUOUS, __pyx_k__C_CONTIGUOUS, sizeof(__pyx_k__C_CONTIGUOUS), 0, 0, 1, 1}, {&__pyx_n_s__C_DBL, __pyx_k__C_DBL, sizeof(__pyx_k__C_DBL), 0, 0, 1, 1}, {&__pyx_n_s__C_DCPL, __pyx_k__C_DCPL, sizeof(__pyx_k__C_DCPL), 0, 0, 1, 1}, {&__pyx_n_s__C_FLOAT, __pyx_k__C_FLOAT, sizeof(__pyx_k__C_FLOAT), 0, 0, 1, 1}, {&__pyx_n_s__C_INT, __pyx_k__C_INT, sizeof(__pyx_k__C_INT), 0, 0, 1, 1}, {&__pyx_n_s__C_LDBL, __pyx_k__C_LDBL, sizeof(__pyx_k__C_LDBL), 0, 0, 1, 1}, {&__pyx_n_s__C_LDCPL, __pyx_k__C_LDCPL, sizeof(__pyx_k__C_LDCPL), 0, 0, 1, 1}, {&__pyx_n_s__C_LONG, __pyx_k__C_LONG, sizeof(__pyx_k__C_LONG), 0, 0, 1, 1}, {&__pyx_n_s__C_SCPL, __pyx_k__C_SCPL, sizeof(__pyx_k__C_SCPL), 0, 0, 1, 1}, {&__pyx_n_s__F, __pyx_k__F, sizeof(__pyx_k__F), 0, 0, 1, 1}, {&__pyx_n_s__F_CONTIGUOUS, __pyx_k__F_CONTIGUOUS, sizeof(__pyx_k__F_CONTIGUOUS), 0, 0, 1, 1}, {&__pyx_n_s__FixedKey, __pyx_k__FixedKey, sizeof(__pyx_k__FixedKey), 0, 0, 1, 1}, {&__pyx_n_s__GlobalArrayCache, __pyx_k__GlobalArrayCache, sizeof(__pyx_k__GlobalArrayCache), 0, 0, 1, 1}, {&__pyx_n_s__IndexError, __pyx_k__IndexError, sizeof(__pyx_k__IndexError), 0, 0, 1, 1}, {&__pyx_n_s__Irecv, __pyx_k__Irecv, sizeof(__pyx_k__Irecv), 0, 0, 1, 1}, {&__pyx_n_s__Isend, __pyx_k__Isend, sizeof(__pyx_k__Isend), 0, 0, 1, 1}, {&__pyx_n_s__KeyError, __pyx_k__KeyError, sizeof(__pyx_k__KeyError), 0, 0, 1, 1}, {&__pyx_n_s__MPI, __pyx_k__MPI, sizeof(__pyx_k__MPI), 0, 0, 1, 1}, {&__pyx_n_s__MasterKey, __pyx_k__MasterKey, sizeof(__pyx_k__MasterKey), 0, 0, 1, 1}, {&__pyx_n_s__NoneKey, __pyx_k__NoneKey, sizeof(__pyx_k__NoneKey), 0, 0, 1, 1}, {&__pyx_n_s__None_key, __pyx_k__None_key, sizeof(__pyx_k__None_key), 0, 0, 1, 1}, {&__pyx_n_s__NotImplementedError, __pyx_k__NotImplementedError, sizeof(__pyx_k__NotImplementedError), 0, 0, 1, 1}, {&__pyx_n_s__O, __pyx_k__O, sizeof(__pyx_k__O), 0, 0, 1, 1}, {&__pyx_n_s__OLD_REDUCE, __pyx_k__OLD_REDUCE, sizeof(__pyx_k__OLD_REDUCE), 0, 0, 1, 1}, {&__pyx_n_s__OWNDATA, __pyx_k__OWNDATA, sizeof(__pyx_k__OWNDATA), 0, 0, 1, 1}, {&__pyx_n_s__RangeKey, __pyx_k__RangeKey, sizeof(__pyx_k__RangeKey), 0, 0, 1, 1}, {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1}, {&__pyx_n_s__S, __pyx_k__S, sizeof(__pyx_k__S), 0, 0, 1, 1}, {&__pyx_n_s__SUM, __pyx_k__SUM, sizeof(__pyx_k__SUM), 0, 0, 1, 1}, {&__pyx_n_s__StopIteration, __pyx_k__StopIteration, sizeof(__pyx_k__StopIteration), 0, 0, 1, 1}, {&__pyx_n_s__T, __pyx_k__T, sizeof(__pyx_k__T), 0, 0, 1, 1}, {&__pyx_n_s__TAG, __pyx_k__TAG, sizeof(__pyx_k__TAG), 0, 0, 1, 1}, {&__pyx_n_s__TODO, __pyx_k__TODO, sizeof(__pyx_k__TODO), 0, 0, 1, 1}, {&__pyx_n_s__Testall, __pyx_k__Testall, sizeof(__pyx_k__Testall), 0, 0, 1, 1}, {&__pyx_n_s__TypeError, __pyx_k__TypeError, sizeof(__pyx_k__TypeError), 0, 0, 1, 1}, {&__pyx_n_s__U, __pyx_k__U, sizeof(__pyx_k__U), 0, 0, 1, 1}, {&__pyx_n_s__UPDATEIFCOPY, __pyx_k__UPDATEIFCOPY, sizeof(__pyx_k__UPDATEIFCOPY), 0, 0, 1, 1}, {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1}, {&__pyx_n_s__W, __pyx_k__W, sizeof(__pyx_k__W), 0, 0, 1, 1}, {&__pyx_n_s__WRITEABLE, __pyx_k__WRITEABLE, sizeof(__pyx_k__WRITEABLE), 0, 0, 1, 1}, {&__pyx_n_s____abs__, __pyx_k____abs__, sizeof(__pyx_k____abs__), 0, 0, 1, 1}, {&__pyx_n_s____add__, __pyx_k____add__, sizeof(__pyx_k____add__), 0, 0, 1, 1}, {&__pyx_n_s____and__, __pyx_k____and__, sizeof(__pyx_k____and__), 0, 0, 1, 1}, {&__pyx_n_s____array__, __pyx_k____array__, sizeof(__pyx_k____array__), 0, 0, 1, 1}, {&__pyx_n_s____array_finalize__, __pyx_k____array_finalize__, sizeof(__pyx_k____array_finalize__), 0, 0, 1, 1}, {&__pyx_n_s____array_interface__, __pyx_k____array_interface__, sizeof(__pyx_k____array_interface__), 0, 0, 1, 1}, {&__pyx_n_s____array_prepare__, __pyx_k____array_prepare__, sizeof(__pyx_k____array_prepare__), 0, 0, 1, 1}, {&__pyx_n_s____array_priority__, __pyx_k____array_priority__, sizeof(__pyx_k____array_priority__), 0, 0, 1, 1}, {&__pyx_n_s____array_struct__, __pyx_k____array_struct__, sizeof(__pyx_k____array_struct__), 0, 0, 1, 1}, {&__pyx_n_s____array_wrap__, __pyx_k____array_wrap__, sizeof(__pyx_k____array_wrap__), 0, 0, 1, 1}, {&__pyx_n_s____call__, __pyx_k____call__, sizeof(__pyx_k____call__), 0, 0, 1, 1}, {&__pyx_n_s____class__, __pyx_k____class__, sizeof(__pyx_k____class__), 0, 0, 1, 1}, {&__pyx_n_s____contains__, __pyx_k____contains__, sizeof(__pyx_k____contains__), 0, 0, 1, 1}, {&__pyx_n_s____copy__, __pyx_k____copy__, sizeof(__pyx_k____copy__), 0, 0, 1, 1}, {&__pyx_n_s____deepcopy__, __pyx_k____deepcopy__, sizeof(__pyx_k____deepcopy__), 0, 0, 1, 1}, {&__pyx_n_s____del__, __pyx_k____del__, sizeof(__pyx_k____del__), 0, 0, 1, 1}, {&__pyx_n_s____delitem__, __pyx_k____delitem__, sizeof(__pyx_k____delitem__), 0, 0, 1, 1}, {&__pyx_n_s____div__, __pyx_k____div__, sizeof(__pyx_k____div__), 0, 0, 1, 1}, {&__pyx_n_s____divmod__, __pyx_k____divmod__, sizeof(__pyx_k____divmod__), 0, 0, 1, 1}, {&__pyx_n_s____doc__, __pyx_k____doc__, sizeof(__pyx_k____doc__), 0, 0, 1, 1}, {&__pyx_n_s____eq__, __pyx_k____eq__, sizeof(__pyx_k____eq__), 0, 0, 1, 1}, {&__pyx_n_s____float__, __pyx_k____float__, sizeof(__pyx_k____float__), 0, 0, 1, 1}, {&__pyx_n_s____floordiv__, __pyx_k____floordiv__, sizeof(__pyx_k____floordiv__), 0, 0, 1, 1}, {&__pyx_n_s____ge__, __pyx_k____ge__, sizeof(__pyx_k____ge__), 0, 0, 1, 1}, {&__pyx_n_s____getitem__, __pyx_k____getitem__, sizeof(__pyx_k____getitem__), 0, 0, 1, 1}, {&__pyx_n_s____gt__, __pyx_k____gt__, sizeof(__pyx_k____gt__), 0, 0, 1, 1}, {&__pyx_n_s____iadd__, __pyx_k____iadd__, sizeof(__pyx_k____iadd__), 0, 0, 1, 1}, {&__pyx_n_s____iand__, __pyx_k____iand__, sizeof(__pyx_k____iand__), 0, 0, 1, 1}, {&__pyx_n_s____idiv__, __pyx_k____idiv__, sizeof(__pyx_k____idiv__), 0, 0, 1, 1}, {&__pyx_n_s____ifloordiv__, __pyx_k____ifloordiv__, sizeof(__pyx_k____ifloordiv__), 0, 0, 1, 1}, {&__pyx_n_s____ilshift__, __pyx_k____ilshift__, sizeof(__pyx_k____ilshift__), 0, 0, 1, 1}, {&__pyx_n_s____imod__, __pyx_k____imod__, sizeof(__pyx_k____imod__), 0, 0, 1, 1}, {&__pyx_n_s____import__, __pyx_k____import__, sizeof(__pyx_k____import__), 0, 0, 1, 1}, {&__pyx_n_s____imul__, __pyx_k____imul__, sizeof(__pyx_k____imul__), 0, 0, 1, 1}, {&__pyx_n_s____init__, __pyx_k____init__, sizeof(__pyx_k____init__), 0, 0, 1, 1}, {&__pyx_n_s____int__, __pyx_k____int__, sizeof(__pyx_k____int__), 0, 0, 1, 1}, {&__pyx_n_s____invert__, __pyx_k____invert__, sizeof(__pyx_k____invert__), 0, 0, 1, 1}, {&__pyx_n_s____ior__, __pyx_k____ior__, sizeof(__pyx_k____ior__), 0, 0, 1, 1}, {&__pyx_n_s____ipow__, __pyx_k____ipow__, sizeof(__pyx_k____ipow__), 0, 0, 1, 1}, {&__pyx_n_s____irshift__, __pyx_k____irshift__, sizeof(__pyx_k____irshift__), 0, 0, 1, 1}, {&__pyx_n_s____isub__, __pyx_k____isub__, sizeof(__pyx_k____isub__), 0, 0, 1, 1}, {&__pyx_n_s____iter__, __pyx_k____iter__, sizeof(__pyx_k____iter__), 0, 0, 1, 1}, {&__pyx_n_s____itruediv__, __pyx_k____itruediv__, sizeof(__pyx_k____itruediv__), 0, 0, 1, 1}, {&__pyx_n_s____ixor__, __pyx_k____ixor__, sizeof(__pyx_k____ixor__), 0, 0, 1, 1}, {&__pyx_n_s____le__, __pyx_k____le__, sizeof(__pyx_k____le__), 0, 0, 1, 1}, {&__pyx_n_s____len__, __pyx_k____len__, sizeof(__pyx_k____len__), 0, 0, 1, 1}, {&__pyx_n_s____long__, __pyx_k____long__, sizeof(__pyx_k____long__), 0, 0, 1, 1}, {&__pyx_n_s____lshift__, __pyx_k____lshift__, sizeof(__pyx_k____lshift__), 0, 0, 1, 1}, {&__pyx_n_s____lt__, __pyx_k____lt__, sizeof(__pyx_k____lt__), 0, 0, 1, 1}, {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, {&__pyx_n_s____metaclass__, __pyx_k____metaclass__, sizeof(__pyx_k____metaclass__), 0, 0, 1, 1}, {&__pyx_n_s____mod__, __pyx_k____mod__, sizeof(__pyx_k____mod__), 0, 0, 1, 1}, {&__pyx_n_s____module__, __pyx_k____module__, sizeof(__pyx_k____module__), 0, 0, 1, 1}, {&__pyx_n_s____mul__, __pyx_k____mul__, sizeof(__pyx_k____mul__), 0, 0, 1, 1}, {&__pyx_n_s____ne__, __pyx_k____ne__, sizeof(__pyx_k____ne__), 0, 0, 1, 1}, {&__pyx_n_s____neg__, __pyx_k____neg__, sizeof(__pyx_k____neg__), 0, 0, 1, 1}, {&__pyx_n_s____new__, __pyx_k____new__, sizeof(__pyx_k____new__), 0, 0, 1, 1}, {&__pyx_n_s____nonzero__, __pyx_k____nonzero__, sizeof(__pyx_k____nonzero__), 0, 0, 1, 1}, {&__pyx_n_s____oct__, __pyx_k____oct__, sizeof(__pyx_k____oct__), 0, 0, 1, 1}, {&__pyx_n_s____or__, __pyx_k____or__, sizeof(__pyx_k____or__), 0, 0, 1, 1}, {&__pyx_n_s____pos__, __pyx_k____pos__, sizeof(__pyx_k____pos__), 0, 0, 1, 1}, {&__pyx_n_s____pow__, __pyx_k____pow__, sizeof(__pyx_k____pow__), 0, 0, 1, 1}, {&__pyx_n_s____qualname__, __pyx_k____qualname__, sizeof(__pyx_k____qualname__), 0, 0, 1, 1}, {&__pyx_n_s____radd__, __pyx_k____radd__, sizeof(__pyx_k____radd__), 0, 0, 1, 1}, {&__pyx_n_s____rand__, __pyx_k____rand__, sizeof(__pyx_k____rand__), 0, 0, 1, 1}, {&__pyx_n_s____rdiv__, __pyx_k____rdiv__, sizeof(__pyx_k____rdiv__), 0, 0, 1, 1}, {&__pyx_n_s____rdivmod__, __pyx_k____rdivmod__, sizeof(__pyx_k____rdivmod__), 0, 0, 1, 1}, {&__pyx_n_s____reduce__, __pyx_k____reduce__, sizeof(__pyx_k____reduce__), 0, 0, 1, 1}, {&__pyx_n_s____reduce_ex__, __pyx_k____reduce_ex__, sizeof(__pyx_k____reduce_ex__), 0, 0, 1, 1}, {&__pyx_n_s____repr__, __pyx_k____repr__, sizeof(__pyx_k____repr__), 0, 0, 1, 1}, {&__pyx_n_s____rfloordiv__, __pyx_k____rfloordiv__, sizeof(__pyx_k____rfloordiv__), 0, 0, 1, 1}, {&__pyx_n_s____rlshift__, __pyx_k____rlshift__, sizeof(__pyx_k____rlshift__), 0, 0, 1, 1}, {&__pyx_n_s____rmod__, __pyx_k____rmod__, sizeof(__pyx_k____rmod__), 0, 0, 1, 1}, {&__pyx_n_s____rmul__, __pyx_k____rmul__, sizeof(__pyx_k____rmul__), 0, 0, 1, 1}, {&__pyx_n_s____ror__, __pyx_k____ror__, sizeof(__pyx_k____ror__), 0, 0, 1, 1}, {&__pyx_n_s____rpow__, __pyx_k____rpow__, sizeof(__pyx_k____rpow__), 0, 0, 1, 1}, {&__pyx_n_s____rrshift__, __pyx_k____rrshift__, sizeof(__pyx_k____rrshift__), 0, 0, 1, 1}, {&__pyx_n_s____rshift__, __pyx_k____rshift__, sizeof(__pyx_k____rshift__), 0, 0, 1, 1}, {&__pyx_n_s____rsub__, __pyx_k____rsub__, sizeof(__pyx_k____rsub__), 0, 0, 1, 1}, {&__pyx_n_s____rtruediv__, __pyx_k____rtruediv__, sizeof(__pyx_k____rtruediv__), 0, 0, 1, 1}, {&__pyx_n_s____rxor__, __pyx_k____rxor__, sizeof(__pyx_k____rxor__), 0, 0, 1, 1}, {&__pyx_n_s____setitem__, __pyx_k____setitem__, sizeof(__pyx_k____setitem__), 0, 0, 1, 1}, {&__pyx_n_s____str__, __pyx_k____str__, sizeof(__pyx_k____str__), 0, 0, 1, 1}, {&__pyx_n_s____sub__, __pyx_k____sub__, sizeof(__pyx_k____sub__), 0, 0, 1, 1}, {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, {&__pyx_n_s____truediv__, __pyx_k____truediv__, sizeof(__pyx_k____truediv__), 0, 0, 1, 1}, {&__pyx_n_s____xor__, __pyx_k____xor__, sizeof(__pyx_k____xor__), 0, 0, 1, 1}, {&__pyx_n_s___a, __pyx_k___a, sizeof(__pyx_k___a), 0, 0, 1, 1}, {&__pyx_n_s___base, __pyx_k___base, sizeof(__pyx_k___base), 0, 0, 1, 1}, {&__pyx_n_s___binary_call, __pyx_k___binary_call, sizeof(__pyx_k___binary_call), 0, 0, 1, 1}, {&__pyx_n_s___c, __pyx_k___c, sizeof(__pyx_k___c), 0, 0, 1, 1}, {&__pyx_n_s___dtype, __pyx_k___dtype, sizeof(__pyx_k___dtype), 0, 0, 1, 1}, {&__pyx_n_s___f, __pyx_k___f, sizeof(__pyx_k___f), 0, 0, 1, 1}, {&__pyx_n_s___flags, __pyx_k___flags, sizeof(__pyx_k___flags), 0, 0, 1, 1}, {&__pyx_n_s___get_T, __pyx_k___get_T, sizeof(__pyx_k___get_T), 0, 0, 1, 1}, {&__pyx_n_s___get_a, __pyx_k___get_a, sizeof(__pyx_k___get_a), 0, 0, 1, 1}, {&__pyx_n_s___get_base, __pyx_k___get_base, sizeof(__pyx_k___get_base), 0, 0, 1, 1}, {&__pyx_n_s___get_c, __pyx_k___get_c, sizeof(__pyx_k___get_c), 0, 0, 1, 1}, {&__pyx_n_s___get_coords, __pyx_k___get_coords, sizeof(__pyx_k___get_coords), 0, 0, 1, 1}, {&__pyx_n_s___get_ctypes, __pyx_k___get_ctypes, sizeof(__pyx_k___get_ctypes), 0, 0, 1, 1}, {&__pyx_n_s___get_data, __pyx_k___get_data, sizeof(__pyx_k___get_data), 0, 0, 1, 1}, {&__pyx_n_s___get_dtype, __pyx_k___get_dtype, sizeof(__pyx_k___get_dtype), 0, 0, 1, 1}, {&__pyx_n_s___get_f, __pyx_k___get_f, sizeof(__pyx_k___get_f), 0, 0, 1, 1}, {&__pyx_n_s___get_flags, __pyx_k___get_flags, sizeof(__pyx_k___get_flags), 0, 0, 1, 1}, {&__pyx_n_s___get_flat, __pyx_k___get_flat, sizeof(__pyx_k___get_flat), 0, 0, 1, 1}, {&__pyx_n_s___get_identity, __pyx_k___get_identity, sizeof(__pyx_k___get_identity), 0, 0, 1, 1}, {&__pyx_n_s___get_imag, __pyx_k___get_imag, sizeof(__pyx_k___get_imag), 0, 0, 1, 1}, {&__pyx_n_s___get_index, __pyx_k___get_index, sizeof(__pyx_k___get_index), 0, 0, 1, 1}, {&__pyx_n_s___get_itemsize, __pyx_k___get_itemsize, sizeof(__pyx_k___get_itemsize), 0, 0, 1, 1}, {&__pyx_n_s___get_nargs, __pyx_k___get_nargs, sizeof(__pyx_k___get_nargs), 0, 0, 1, 1}, {&__pyx_n_s___get_nbytes, __pyx_k___get_nbytes, sizeof(__pyx_k___get_nbytes), 0, 0, 1, 1}, {&__pyx_n_s___get_ndim, __pyx_k___get_ndim, sizeof(__pyx_k___get_ndim), 0, 0, 1, 1}, {&__pyx_n_s___get_nin, __pyx_k___get_nin, sizeof(__pyx_k___get_nin), 0, 0, 1, 1}, {&__pyx_n_s___get_nout, __pyx_k___get_nout, sizeof(__pyx_k___get_nout), 0, 0, 1, 1}, {&__pyx_n_s___get_ntypes, __pyx_k___get_ntypes, sizeof(__pyx_k___get_ntypes), 0, 0, 1, 1}, {&__pyx_n_s___get_o, __pyx_k___get_o, sizeof(__pyx_k___get_o), 0, 0, 1, 1}, {&__pyx_n_s___get_real, __pyx_k___get_real, sizeof(__pyx_k___get_real), 0, 0, 1, 1}, {&__pyx_n_s___get_shape, __pyx_k___get_shape, sizeof(__pyx_k___get_shape), 0, 0, 1, 1}, {&__pyx_n_s___get_signature, __pyx_k___get_signature, sizeof(__pyx_k___get_signature), 0, 0, 1, 1}, {&__pyx_n_s___get_size, __pyx_k___get_size, sizeof(__pyx_k___get_size), 0, 0, 1, 1}, {&__pyx_n_s___get_strides, __pyx_k___get_strides, sizeof(__pyx_k___get_strides), 0, 0, 1, 1}, {&__pyx_n_s___get_types, __pyx_k___get_types, sizeof(__pyx_k___get_types), 0, 0, 1, 1}, {&__pyx_n_s___get_u, __pyx_k___get_u, sizeof(__pyx_k___get_u), 0, 0, 1, 1}, {&__pyx_n_s___get_w, __pyx_k___get_w, sizeof(__pyx_k___get_w), 0, 0, 1, 1}, {&__pyx_n_s___hi, __pyx_k___hi, sizeof(__pyx_k___hi), 0, 0, 1, 1}, {&__pyx_n_s___index, __pyx_k___index, sizeof(__pyx_k___index), 0, 0, 1, 1}, {&__pyx_n_s___is_imag, __pyx_k___is_imag, sizeof(__pyx_k___is_imag), 0, 0, 1, 1}, {&__pyx_n_s___is_real, __pyx_k___is_real, sizeof(__pyx_k___is_real), 0, 0, 1, 1}, {&__pyx_n_s___len, __pyx_k___len, sizeof(__pyx_k___len), 0, 0, 1, 1}, {&__pyx_n_s___lo, __pyx_k___lo, sizeof(__pyx_k___lo), 0, 0, 1, 1}, {&__pyx_n_s___o, __pyx_k___o, sizeof(__pyx_k___o), 0, 0, 1, 1}, {&__pyx_n_s___order, __pyx_k___order, sizeof(__pyx_k___order), 0, 0, 1, 1}, {&__pyx_n_s___set_flat, __pyx_k___set_flat, sizeof(__pyx_k___set_flat), 0, 0, 1, 1}, {&__pyx_n_s___set_imag, __pyx_k___set_imag, sizeof(__pyx_k___set_imag), 0, 0, 1, 1}, {&__pyx_n_s___set_real, __pyx_k___set_real, sizeof(__pyx_k___set_real), 0, 0, 1, 1}, {&__pyx_n_s___set_shape, __pyx_k___set_shape, sizeof(__pyx_k___set_shape), 0, 0, 1, 1}, {&__pyx_n_s___skip, __pyx_k___skip, sizeof(__pyx_k___skip), 0, 0, 1, 1}, {&__pyx_n_s___strides, __pyx_k___strides, sizeof(__pyx_k___strides), 0, 0, 1, 1}, {&__pyx_n_s___u, __pyx_k___u, sizeof(__pyx_k___u), 0, 0, 1, 1}, {&__pyx_n_s___unary_call, __pyx_k___unary_call, sizeof(__pyx_k___unary_call), 0, 0, 1, 1}, {&__pyx_n_s___values, __pyx_k___values, sizeof(__pyx_k___values), 0, 0, 1, 1}, {&__pyx_n_s___w, __pyx_k___w, sizeof(__pyx_k___w), 0, 0, 1, 1}, {&__pyx_n_s__a, __pyx_k__a, sizeof(__pyx_k__a), 0, 0, 1, 1}, {&__pyx_n_s__a_max, __pyx_k__a_max, sizeof(__pyx_k__a_max), 0, 0, 1, 1}, {&__pyx_n_s__a_min, __pyx_k__a_min, sizeof(__pyx_k__a_min), 0, 0, 1, 1}, {&__pyx_n_s__abs, __pyx_k__abs, sizeof(__pyx_k__abs), 0, 0, 1, 1}, {&__pyx_n_s__absolute, __pyx_k__absolute, sizeof(__pyx_k__absolute), 0, 0, 1, 1}, {&__pyx_n_s__access, __pyx_k__access, sizeof(__pyx_k__access), 0, 0, 1, 1}, {&__pyx_n_s__access_key, __pyx_k__access_key, sizeof(__pyx_k__access_key), 0, 0, 1, 1}, {&__pyx_n_s__accumulate, __pyx_k__accumulate, sizeof(__pyx_k__accumulate), 0, 0, 1, 1}, {&__pyx_n_s__add, __pyx_k__add, sizeof(__pyx_k__add), 0, 0, 1, 1}, {&__pyx_n_s__adjust, __pyx_k__adjust, sizeof(__pyx_k__adjust), 0, 0, 1, 1}, {&__pyx_n_s__ai, __pyx_k__ai, sizeof(__pyx_k__ai), 0, 0, 1, 1}, {&__pyx_n_s__align, __pyx_k__align, sizeof(__pyx_k__align), 0, 0, 1, 1}, {&__pyx_n_s__aligned, __pyx_k__aligned, sizeof(__pyx_k__aligned), 0, 0, 1, 1}, {&__pyx_n_s__all, __pyx_k__all, sizeof(__pyx_k__all), 0, 0, 1, 1}, {&__pyx_n_s__allgather, __pyx_k__allgather, sizeof(__pyx_k__allgather), 0, 0, 1, 1}, {&__pyx_n_s__allget, __pyx_k__allget, sizeof(__pyx_k__allget), 0, 0, 1, 1}, {&__pyx_n_s__allreduce, __pyx_k__allreduce, sizeof(__pyx_k__allreduce), 0, 0, 1, 1}, {&__pyx_n_s__any, __pyx_k__any, sizeof(__pyx_k__any), 0, 0, 1, 1}, {&__pyx_n_s__append, __pyx_k__append, sizeof(__pyx_k__append), 0, 0, 1, 1}, {&__pyx_n_s__arange, __pyx_k__arange, sizeof(__pyx_k__arange), 0, 0, 1, 1}, {&__pyx_n_s__arccos, __pyx_k__arccos, sizeof(__pyx_k__arccos), 0, 0, 1, 1}, {&__pyx_n_s__arccosh, __pyx_k__arccosh, sizeof(__pyx_k__arccosh), 0, 0, 1, 1}, {&__pyx_n_s__arcsin, __pyx_k__arcsin, sizeof(__pyx_k__arcsin), 0, 0, 1, 1}, {&__pyx_n_s__arcsinh, __pyx_k__arcsinh, sizeof(__pyx_k__arcsinh), 0, 0, 1, 1}, {&__pyx_n_s__arctan, __pyx_k__arctan, sizeof(__pyx_k__arctan), 0, 0, 1, 1}, {&__pyx_n_s__arctan2, __pyx_k__arctan2, sizeof(__pyx_k__arctan2), 0, 0, 1, 1}, {&__pyx_n_s__arctanh, __pyx_k__arctanh, sizeof(__pyx_k__arctanh), 0, 0, 1, 1}, {&__pyx_n_s__arg, __pyx_k__arg, sizeof(__pyx_k__arg), 0, 0, 1, 1}, {&__pyx_n_s__argmax, __pyx_k__argmax, sizeof(__pyx_k__argmax), 0, 0, 1, 1}, {&__pyx_n_s__argmin, __pyx_k__argmin, sizeof(__pyx_k__argmin), 0, 0, 1, 1}, {&__pyx_n_s__args, __pyx_k__args, sizeof(__pyx_k__args), 0, 0, 1, 1}, {&__pyx_n_s__argsort, __pyx_k__argsort, sizeof(__pyx_k__argsort), 0, 0, 1, 1}, {&__pyx_n_s__asarray, __pyx_k__asarray, sizeof(__pyx_k__asarray), 0, 0, 1, 1}, {&__pyx_n_s__astype, __pyx_k__astype, sizeof(__pyx_k__astype), 0, 0, 1, 1}, {&__pyx_n_s__axes, __pyx_k__axes, sizeof(__pyx_k__axes), 0, 0, 1, 1}, {&__pyx_n_s__axis, __pyx_k__axis, sizeof(__pyx_k__axis), 0, 0, 1, 1}, {&__pyx_n_s__axis1, __pyx_k__axis1, sizeof(__pyx_k__axis1), 0, 0, 1, 1}, {&__pyx_n_s__axis2, __pyx_k__axis2, sizeof(__pyx_k__axis2), 0, 0, 1, 1}, {&__pyx_n_s__axis_iterator, __pyx_k__axis_iterator, sizeof(__pyx_k__axis_iterator), 0, 0, 1, 1}, {&__pyx_n_s__b, __pyx_k__b, sizeof(__pyx_k__b), 0, 0, 1, 1}, {&__pyx_n_s__base, __pyx_k__base, sizeof(__pyx_k__base), 0, 0, 1, 1}, {&__pyx_n_s__bcast, __pyx_k__bcast, sizeof(__pyx_k__bcast), 0, 0, 1, 1}, {&__pyx_n_s__bitwise_and, __pyx_k__bitwise_and, sizeof(__pyx_k__bitwise_and), 0, 0, 1, 1}, {&__pyx_n_s__bitwise_not, __pyx_k__bitwise_not, sizeof(__pyx_k__bitwise_not), 0, 0, 1, 1}, {&__pyx_n_s__bitwise_or, __pyx_k__bitwise_or, sizeof(__pyx_k__bitwise_or), 0, 0, 1, 1}, {&__pyx_n_s__bitwise_xor, __pyx_k__bitwise_xor, sizeof(__pyx_k__bitwise_xor), 0, 0, 1, 1}, {&__pyx_n_s__bound_by_lohi, __pyx_k__bound_by_lohi, sizeof(__pyx_k__bound_by_lohi), 0, 0, 1, 1}, {&__pyx_n_s__broadcast_chomp, __pyx_k__broadcast_chomp, sizeof(__pyx_k__broadcast_chomp), 0, 0, 1, 1}, {&__pyx_n_s__broadcast_shape, __pyx_k__broadcast_shape, sizeof(__pyx_k__broadcast_shape), 0, 0, 1, 1}, {&__pyx_n_s__buf, __pyx_k__buf, sizeof(__pyx_k__buf), 0, 0, 1, 1}, {&__pyx_n_s__buffer, __pyx_k__buffer, sizeof(__pyx_k__buffer), 0, 0, 1, 1}, {&__pyx_n_s__byteswap, __pyx_k__byteswap, sizeof(__pyx_k__byteswap), 0, 0, 1, 1}, {&__pyx_n_s__c, __pyx_k__c, sizeof(__pyx_k__c), 0, 0, 1, 1}, {&__pyx_n_s__c_contiguous, __pyx_k__c_contiguous, sizeof(__pyx_k__c_contiguous), 0, 0, 1, 1}, {&__pyx_n_s__cache, __pyx_k__cache, sizeof(__pyx_k__cache), 0, 0, 1, 1}, {&__pyx_n_s__ceil, __pyx_k__ceil, sizeof(__pyx_k__ceil), 0, 0, 1, 1}, {&__pyx_n_s__choices, __pyx_k__choices, sizeof(__pyx_k__choices), 0, 0, 1, 1}, {&__pyx_n_s__choose, __pyx_k__choose, sizeof(__pyx_k__choose), 0, 0, 1, 1}, {&__pyx_n_s__clip, __pyx_k__clip, sizeof(__pyx_k__clip), 0, 0, 1, 1}, {&__pyx_n_s__cls, __pyx_k__cls, sizeof(__pyx_k__cls), 0, 0, 1, 1}, {&__pyx_n_s__col, __pyx_k__col, sizeof(__pyx_k__col), 0, 0, 1, 1}, {&__pyx_n_s__column_iter, __pyx_k__column_iter, sizeof(__pyx_k__column_iter), 0, 0, 1, 1}, {&__pyx_n_s__columns, __pyx_k__columns, sizeof(__pyx_k__columns), 0, 0, 1, 1}, {&__pyx_n_s__comm, __pyx_k__comm, sizeof(__pyx_k__comm), 0, 0, 1, 1}, {&__pyx_n_s__communicator, __pyx_k__communicator, sizeof(__pyx_k__communicator), 0, 0, 1, 1}, {&__pyx_n_s__compare_distr, __pyx_k__compare_distr, sizeof(__pyx_k__compare_distr), 0, 0, 1, 1}, {&__pyx_n_s__complex128, __pyx_k__complex128, sizeof(__pyx_k__complex128), 0, 0, 1, 1}, {&__pyx_n_s__complex256, __pyx_k__complex256, sizeof(__pyx_k__complex256), 0, 0, 1, 1}, {&__pyx_n_s__complex64, __pyx_k__complex64, sizeof(__pyx_k__complex64), 0, 0, 1, 1}, {&__pyx_n_s__compress, __pyx_k__compress, sizeof(__pyx_k__compress), 0, 0, 1, 1}, {&__pyx_n_s__condition, __pyx_k__condition, sizeof(__pyx_k__condition), 0, 0, 1, 1}, {&__pyx_n_s__conj, __pyx_k__conj, sizeof(__pyx_k__conj), 0, 0, 1, 1}, {&__pyx_n_s__conjugate, __pyx_k__conjugate, sizeof(__pyx_k__conjugate), 0, 0, 1, 1}, {&__pyx_n_s__coords, __pyx_k__coords, sizeof(__pyx_k__coords), 0, 0, 1, 1}, {&__pyx_n_s__copy, __pyx_k__copy, sizeof(__pyx_k__copy), 0, 0, 1, 1}, {&__pyx_n_s__copysign, __pyx_k__copysign, sizeof(__pyx_k__copysign), 0, 0, 1, 1}, {&__pyx_n_s__cos, __pyx_k__cos, sizeof(__pyx_k__cos), 0, 0, 1, 1}, {&__pyx_n_s__cosh, __pyx_k__cosh, sizeof(__pyx_k__cosh), 0, 0, 1, 1}, {&__pyx_n_s__count, __pyx_k__count, sizeof(__pyx_k__count), 0, 0, 1, 1}, {&__pyx_n_s__count_neg_ones, __pyx_k__count_neg_ones, sizeof(__pyx_k__count_neg_ones), 0, 0, 1, 1}, {&__pyx_n_s__create, __pyx_k__create, sizeof(__pyx_k__create), 0, 0, 1, 1}, {&__pyx_n_s__ctypes, __pyx_k__ctypes, sizeof(__pyx_k__ctypes), 0, 0, 1, 1}, {&__pyx_n_s__cumprod, __pyx_k__cumprod, sizeof(__pyx_k__cumprod), 0, 0, 1, 1}, {&__pyx_n_s__cumsum, __pyx_k__cumsum, sizeof(__pyx_k__cumsum), 0, 0, 1, 1}, {&__pyx_n_s__d, __pyx_k__d, sizeof(__pyx_k__d), 0, 0, 1, 1}, {&__pyx_n_s__data, __pyx_k__data, sizeof(__pyx_k__data), 0, 0, 1, 1}, {&__pyx_n_s__ddof, __pyx_k__ddof, sizeof(__pyx_k__ddof), 0, 0, 1, 1}, {&__pyx_n_s__decimals, __pyx_k__decimals, sizeof(__pyx_k__decimals), 0, 0, 1, 1}, {&__pyx_n_s__deg2rad, __pyx_k__deg2rad, sizeof(__pyx_k__deg2rad), 0, 0, 1, 1}, {&__pyx_n_s__degrees, __pyx_k__degrees, sizeof(__pyx_k__degrees), 0, 0, 1, 1}, {&__pyx_n_s__dest, __pyx_k__dest, sizeof(__pyx_k__dest), 0, 0, 1, 1}, {&__pyx_n_s__destroy, __pyx_k__destroy, sizeof(__pyx_k__destroy), 0, 0, 1, 1}, {&__pyx_n_s__diagonal, __pyx_k__diagonal, sizeof(__pyx_k__diagonal), 0, 0, 1, 1}, {&__pyx_n_s__distribution, __pyx_k__distribution, sizeof(__pyx_k__distribution), 0, 0, 1, 1}, {&__pyx_n_s__divide, __pyx_k__divide, sizeof(__pyx_k__divide), 0, 0, 1, 1}, {&__pyx_n_s__dot, __pyx_k__dot, sizeof(__pyx_k__dot), 0, 0, 1, 1}, {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1}, {&__pyx_n_s__dtype_, __pyx_k__dtype_, sizeof(__pyx_k__dtype_), 0, 0, 1, 1}, {&__pyx_n_s__dump, __pyx_k__dump, sizeof(__pyx_k__dump), 0, 0, 1, 1}, {&__pyx_n_s__dumps, __pyx_k__dumps, sizeof(__pyx_k__dumps), 0, 0, 1, 1}, {&__pyx_n_s__empty, __pyx_k__empty, sizeof(__pyx_k__empty), 0, 0, 1, 1}, {&__pyx_n_s__end, __pyx_k__end, sizeof(__pyx_k__end), 0, 0, 1, 1}, {&__pyx_n_s__environ, __pyx_k__environ, sizeof(__pyx_k__environ), 0, 0, 1, 1}, {&__pyx_n_s__equal, __pyx_k__equal, sizeof(__pyx_k__equal), 0, 0, 1, 1}, {&__pyx_n_s__everything, __pyx_k__everything, sizeof(__pyx_k__everything), 0, 0, 1, 1}, {&__pyx_n_s__exp, __pyx_k__exp, sizeof(__pyx_k__exp), 0, 0, 1, 1}, {&__pyx_n_s__exp2, __pyx_k__exp2, sizeof(__pyx_k__exp2), 0, 0, 1, 1}, {&__pyx_n_s__expm1, __pyx_k__expm1, sizeof(__pyx_k__expm1), 0, 0, 1, 1}, {&__pyx_n_s__f_contiguous, __pyx_k__f_contiguous, sizeof(__pyx_k__f_contiguous), 0, 0, 1, 1}, {&__pyx_n_s__fabs, __pyx_k__fabs, sizeof(__pyx_k__fabs), 0, 0, 1, 1}, {&__pyx_n_s__fancy, __pyx_k__fancy, sizeof(__pyx_k__fancy), 0, 0, 1, 1}, {&__pyx_n_s__fid, __pyx_k__fid, sizeof(__pyx_k__fid), 0, 0, 1, 1}, {&__pyx_n_s__file, __pyx_k__file, sizeof(__pyx_k__file), 0, 0, 1, 1}, {&__pyx_n_s__fill, __pyx_k__fill, sizeof(__pyx_k__fill), 0, 0, 1, 1}, {&__pyx_n_s__find_common_type, __pyx_k__find_common_type, sizeof(__pyx_k__find_common_type), 0, 0, 1, 1}, {&__pyx_n_s__first, __pyx_k__first, sizeof(__pyx_k__first), 0, 0, 1, 1}, {&__pyx_n_s__first_dtype, __pyx_k__first_dtype, sizeof(__pyx_k__first_dtype), 0, 0, 1, 1}, {&__pyx_n_s__first_isscalar, __pyx_k__first_isscalar, sizeof(__pyx_k__first_isscalar), 0, 0, 1, 1}, {&__pyx_n_s__first_shape, __pyx_k__first_shape, sizeof(__pyx_k__first_shape), 0, 0, 1, 1}, {&__pyx_n_s__fixed, __pyx_k__fixed, sizeof(__pyx_k__fixed), 0, 0, 1, 1}, {&__pyx_n_s__fixed_slice, __pyx_k__fixed_slice, sizeof(__pyx_k__fixed_slice), 0, 0, 1, 1}, {&__pyx_n_s__flags, __pyx_k__flags, sizeof(__pyx_k__flags), 0, 0, 1, 1}, {&__pyx_n_s__flagsobj, __pyx_k__flagsobj, sizeof(__pyx_k__flagsobj), 0, 0, 1, 1}, {&__pyx_n_s__flat, __pyx_k__flat, sizeof(__pyx_k__flat), 0, 0, 1, 1}, {&__pyx_n_s__flatiter, __pyx_k__flatiter, sizeof(__pyx_k__flatiter), 0, 0, 1, 1}, {&__pyx_n_s__flatten, __pyx_k__flatten, sizeof(__pyx_k__flatten), 0, 0, 1, 1}, {&__pyx_n_s__float, __pyx_k__float, sizeof(__pyx_k__float), 0, 0, 1, 1}, {&__pyx_n_s__float128, __pyx_k__float128, sizeof(__pyx_k__float128), 0, 0, 1, 1}, {&__pyx_n_s__float32, __pyx_k__float32, sizeof(__pyx_k__float32), 0, 0, 1, 1}, {&__pyx_n_s__float64, __pyx_k__float64, sizeof(__pyx_k__float64), 0, 0, 1, 1}, {&__pyx_n_s__floor, __pyx_k__floor, sizeof(__pyx_k__floor), 0, 0, 1, 1}, {&__pyx_n_s__floor_divide, __pyx_k__floor_divide, sizeof(__pyx_k__floor_divide), 0, 0, 1, 1}, {&__pyx_n_s__fmax, __pyx_k__fmax, sizeof(__pyx_k__fmax), 0, 0, 1, 1}, {&__pyx_n_s__fmin, __pyx_k__fmin, sizeof(__pyx_k__fmin), 0, 0, 1, 1}, {&__pyx_n_s__fmod, __pyx_k__fmod, sizeof(__pyx_k__fmod), 0, 0, 1, 1}, {&__pyx_n_s__format, __pyx_k__format, sizeof(__pyx_k__format), 0, 0, 1, 1}, {&__pyx_n_s__frexp, __pyx_k__frexp, sizeof(__pyx_k__frexp), 0, 0, 1, 1}, {&__pyx_n_s__from_ga, __pyx_k__from_ga, sizeof(__pyx_k__from_ga), 0, 0, 1, 1}, {&__pyx_n_s__full, __pyx_k__full, sizeof(__pyx_k__full), 0, 0, 1, 1}, {&__pyx_n_s__func, __pyx_k__func, sizeof(__pyx_k__func), 0, 0, 1, 1}, {&__pyx_n_s__g_a, __pyx_k__g_a, sizeof(__pyx_k__g_a), 0, 0, 1, 1}, {&__pyx_n_s__ga, __pyx_k__ga, sizeof(__pyx_k__ga), 0, 0, 1, 1}, {&__pyx_n_s__ga4py, __pyx_k__ga4py, sizeof(__pyx_k__ga4py), 0, 0, 1, 1}, {&__pyx_n_s__ga_cache, __pyx_k__ga_cache, sizeof(__pyx_k__ga_cache), 0, 0, 1, 1}, {&__pyx_n_s__gather, __pyx_k__gather, sizeof(__pyx_k__gather), 0, 0, 1, 1}, {&__pyx_n_s__gatype, __pyx_k__gatype, sizeof(__pyx_k__gatype), 0, 0, 1, 1}, {&__pyx_n_s__gatypes, __pyx_k__gatypes, sizeof(__pyx_k__gatypes), 0, 0, 1, 1}, {&__pyx_n_s__generic, __pyx_k__generic, sizeof(__pyx_k__generic), 0, 0, 1, 1}, {&__pyx_n_s__get, __pyx_k__get, sizeof(__pyx_k__get), 0, 0, 1, 1}, {&__pyx_n_s__get_key, __pyx_k__get_key, sizeof(__pyx_k__get_key), 0, 0, 1, 1}, {&__pyx_n_s__get_original_ndim, __pyx_k__get_original_ndim, sizeof(__pyx_k__get_original_ndim), 0, 0, 1, 1}, {&__pyx_n_s__getfield, __pyx_k__getfield, sizeof(__pyx_k__getfield), 0, 0, 1, 1}, {&__pyx_n_s__global_slice, __pyx_k__global_slice, sizeof(__pyx_k__global_slice), 0, 0, 1, 1}, {&__pyx_n_s__greater, __pyx_k__greater, sizeof(__pyx_k__greater), 0, 0, 1, 1}, {&__pyx_n_s__greater_equal, __pyx_k__greater_equal, sizeof(__pyx_k__greater_equal), 0, 0, 1, 1}, {&__pyx_n_s__gs, __pyx_k__gs, sizeof(__pyx_k__gs), 0, 0, 1, 1}, {&__pyx_n_s__handle, __pyx_k__handle, sizeof(__pyx_k__handle), 0, 0, 1, 1}, {&__pyx_n_s__hi, __pyx_k__hi, sizeof(__pyx_k__hi), 0, 0, 1, 1}, {&__pyx_n_s__hsplit, __pyx_k__hsplit, sizeof(__pyx_k__hsplit), 0, 0, 1, 1}, {&__pyx_n_s__hstack, __pyx_k__hstack, sizeof(__pyx_k__hstack), 0, 0, 1, 1}, {&__pyx_n_s__hypot, __pyx_k__hypot, sizeof(__pyx_k__hypot), 0, 0, 1, 1}, {&__pyx_n_s__i, __pyx_k__i, sizeof(__pyx_k__i), 0, 0, 1, 1}, {&__pyx_n_s__i_flat, __pyx_k__i_flat, sizeof(__pyx_k__i_flat), 0, 0, 1, 1}, {&__pyx_n_s__i_unravel, __pyx_k__i_unravel, sizeof(__pyx_k__i_unravel), 0, 0, 1, 1}, {&__pyx_n_s__identity, __pyx_k__identity, sizeof(__pyx_k__identity), 0, 0, 1, 1}, {&__pyx_n_s__ignore, __pyx_k__ignore, sizeof(__pyx_k__ignore), 0, 0, 1, 1}, {&__pyx_n_s__imag, __pyx_k__imag, sizeof(__pyx_k__imag), 0, 0, 1, 1}, {&__pyx_n_s__index, __pyx_k__index, sizeof(__pyx_k__index), 0, 0, 1, 1}, {&__pyx_n_s__indices, __pyx_k__indices, sizeof(__pyx_k__indices), 0, 0, 1, 1}, {&__pyx_n_s__initialized, __pyx_k__initialized, sizeof(__pyx_k__initialized), 0, 0, 1, 1}, {&__pyx_n_s__inplace, __pyx_k__inplace, sizeof(__pyx_k__inplace), 0, 0, 1, 1}, {&__pyx_n_s__input, __pyx_k__input, sizeof(__pyx_k__input), 0, 0, 1, 1}, {&__pyx_n_s__input_dtype, __pyx_k__input_dtype, sizeof(__pyx_k__input_dtype), 0, 0, 1, 1}, {&__pyx_n_s__input_shape, __pyx_k__input_shape, sizeof(__pyx_k__input_shape), 0, 0, 1, 1}, {&__pyx_n_s__inquire_dims, __pyx_k__inquire_dims, sizeof(__pyx_k__inquire_dims), 0, 0, 1, 1}, {&__pyx_n_s__inquire_dtype, __pyx_k__inquire_dtype, sizeof(__pyx_k__inquire_dtype), 0, 0, 1, 1}, {&__pyx_n_s__int32, __pyx_k__int32, sizeof(__pyx_k__int32), 0, 0, 1, 1}, {&__pyx_n_s__int64, __pyx_k__int64, sizeof(__pyx_k__int64), 0, 0, 1, 1}, {&__pyx_n_s__int8, __pyx_k__int8, sizeof(__pyx_k__int8), 0, 0, 1, 1}, {&__pyx_n_s__invert, __pyx_k__invert, sizeof(__pyx_k__invert), 0, 0, 1, 1}, {&__pyx_n_s__isfinite, __pyx_k__isfinite, sizeof(__pyx_k__isfinite), 0, 0, 1, 1}, {&__pyx_n_s__isinf, __pyx_k__isinf, sizeof(__pyx_k__isinf), 0, 0, 1, 1}, {&__pyx_n_s__isnan, __pyx_k__isnan, sizeof(__pyx_k__isnan), 0, 0, 1, 1}, {&__pyx_n_s__isscalar, __pyx_k__isscalar, sizeof(__pyx_k__isscalar), 0, 0, 1, 1}, {&__pyx_n_s__item, __pyx_k__item, sizeof(__pyx_k__item), 0, 0, 1, 1}, {&__pyx_n_s__itemset, __pyx_k__itemset, sizeof(__pyx_k__itemset), 0, 0, 1, 1}, {&__pyx_n_s__itemsize, __pyx_k__itemsize, sizeof(__pyx_k__itemsize), 0, 0, 1, 1}, {&__pyx_n_s__key, __pyx_k__key, sizeof(__pyx_k__key), 0, 0, 1, 1}, {&__pyx_n_s__kind, __pyx_k__kind, sizeof(__pyx_k__kind), 0, 0, 1, 1}, {&__pyx_n_s__kwargs, __pyx_k__kwargs, sizeof(__pyx_k__kwargs), 0, 0, 1, 1}, {&__pyx_n_s__ldexp, __pyx_k__ldexp, sizeof(__pyx_k__ldexp), 0, 0, 1, 1}, {&__pyx_n_s__left, __pyx_k__left, sizeof(__pyx_k__left), 0, 0, 1, 1}, {&__pyx_n_s__left_shift, __pyx_k__left_shift, sizeof(__pyx_k__left_shift), 0, 0, 1, 1}, {&__pyx_n_s__less, __pyx_k__less, sizeof(__pyx_k__less), 0, 0, 1, 1}, {&__pyx_n_s__less_equal, __pyx_k__less_equal, sizeof(__pyx_k__less_equal), 0, 0, 1, 1}, {&__pyx_n_s__level, __pyx_k__level, sizeof(__pyx_k__level), 0, 0, 1, 1}, {&__pyx_n_s__llo, __pyx_k__llo, sizeof(__pyx_k__llo), 0, 0, 1, 1}, {&__pyx_n_s__lo, __pyx_k__lo, sizeof(__pyx_k__lo), 0, 0, 1, 1}, {&__pyx_n_s__local, __pyx_k__local, sizeof(__pyx_k__local), 0, 0, 1, 1}, {&__pyx_n_s__local_out, __pyx_k__local_out, sizeof(__pyx_k__local_out), 0, 0, 1, 1}, {&__pyx_n_s__locate_region, __pyx_k__locate_region, sizeof(__pyx_k__locate_region), 0, 0, 1, 1}, {&__pyx_n_s__log, __pyx_k__log, sizeof(__pyx_k__log), 0, 0, 1, 1}, {&__pyx_n_s__log10, __pyx_k__log10, sizeof(__pyx_k__log10), 0, 0, 1, 1}, {&__pyx_n_s__log1p, __pyx_k__log1p, sizeof(__pyx_k__log1p), 0, 0, 1, 1}, {&__pyx_n_s__log2, __pyx_k__log2, sizeof(__pyx_k__log2), 0, 0, 1, 1}, {&__pyx_n_s__logaddexp, __pyx_k__logaddexp, sizeof(__pyx_k__logaddexp), 0, 0, 1, 1}, {&__pyx_n_s__logaddexp2, __pyx_k__logaddexp2, sizeof(__pyx_k__logaddexp2), 0, 0, 1, 1}, {&__pyx_n_s__logical_and, __pyx_k__logical_and, sizeof(__pyx_k__logical_and), 0, 0, 1, 1}, {&__pyx_n_s__logical_not, __pyx_k__logical_not, sizeof(__pyx_k__logical_not), 0, 0, 1, 1}, {&__pyx_n_s__logical_or, __pyx_k__logical_or, sizeof(__pyx_k__logical_or), 0, 0, 1, 1}, {&__pyx_n_s__logical_xor, __pyx_k__logical_xor, sizeof(__pyx_k__logical_xor), 0, 0, 1, 1}, {&__pyx_n_s__lohi_T, __pyx_k__lohi_T, sizeof(__pyx_k__lohi_T), 0, 0, 1, 1}, {&__pyx_n_s__lohi_shape, __pyx_k__lohi_shape, sizeof(__pyx_k__lohi_shape), 0, 0, 1, 1}, {&__pyx_n_s__lvalue, __pyx_k__lvalue, sizeof(__pyx_k__lvalue), 0, 0, 1, 1}, {&__pyx_n_s__m, __pyx_k__m, sizeof(__pyx_k__m), 0, 0, 1, 1}, {&__pyx_n_s__max, __pyx_k__max, sizeof(__pyx_k__max), 0, 0, 1, 1}, {&__pyx_n_s__maximum, __pyx_k__maximum, sizeof(__pyx_k__maximum), 0, 0, 1, 1}, {&__pyx_n_s__mean, __pyx_k__mean, sizeof(__pyx_k__mean), 0, 0, 1, 1}, {&__pyx_n_s__min, __pyx_k__min, sizeof(__pyx_k__min), 0, 0, 1, 1}, {&__pyx_n_s__minimum, __pyx_k__minimum, sizeof(__pyx_k__minimum), 0, 0, 1, 1}, {&__pyx_n_s__mod, __pyx_k__mod, sizeof(__pyx_k__mod), 0, 0, 1, 1}, {&__pyx_n_s__mode, __pyx_k__mode, sizeof(__pyx_k__mode), 0, 0, 1, 1}, {&__pyx_n_s__modf, __pyx_k__modf, sizeof(__pyx_k__modf), 0, 0, 1, 1}, {&__pyx_n_s__multiply, __pyx_k__multiply, sizeof(__pyx_k__multiply), 0, 0, 1, 1}, {&__pyx_n_s__my_indices, __pyx_k__my_indices, sizeof(__pyx_k__my_indices), 0, 0, 1, 1}, {&__pyx_n_s__my_range, __pyx_k__my_range, sizeof(__pyx_k__my_range), 0, 0, 1, 1}, {&__pyx_n_s__nargs, __pyx_k__nargs, sizeof(__pyx_k__nargs), 0, 0, 1, 1}, {&__pyx_n_s__nbytes, __pyx_k__nbytes, sizeof(__pyx_k__nbytes), 0, 0, 1, 1}, {&__pyx_n_s__ncol, __pyx_k__ncol, sizeof(__pyx_k__ncol), 0, 0, 1, 1}, {&__pyx_n_s__nda, __pyx_k__nda, sizeof(__pyx_k__nda), 0, 0, 1, 1}, {&__pyx_n_s__ndarray, __pyx_k__ndarray, sizeof(__pyx_k__ndarray), 0, 0, 1, 1}, {&__pyx_n_s__ndfirst, __pyx_k__ndfirst, sizeof(__pyx_k__ndfirst), 0, 0, 1, 1}, {&__pyx_n_s__ndim, __pyx_k__ndim, sizeof(__pyx_k__ndim), 0, 0, 1, 1}, {&__pyx_n_s__ndout, __pyx_k__ndout, sizeof(__pyx_k__ndout), 0, 0, 1, 1}, {&__pyx_n_s__ndsecond, __pyx_k__ndsecond, sizeof(__pyx_k__ndsecond), 0, 0, 1, 1}, {&__pyx_n_s__need_strided, __pyx_k__need_strided, sizeof(__pyx_k__need_strided), 0, 0, 1, 1}, {&__pyx_n_s__negative, __pyx_k__negative, sizeof(__pyx_k__negative), 0, 0, 1, 1}, {&__pyx_n_s__new_column, __pyx_k__new_column, sizeof(__pyx_k__new_column), 0, 0, 1, 1}, {&__pyx_n_s__new_columns, __pyx_k__new_columns, sizeof(__pyx_k__new_columns), 0, 0, 1, 1}, {&__pyx_n_s__new_global_slice, __pyx_k__new_global_slice, sizeof(__pyx_k__new_global_slice), 0, 0, 1, 1}, {&__pyx_n_s__new_i, __pyx_k__new_i, sizeof(__pyx_k__new_i), 0, 0, 1, 1}, {&__pyx_n_s__new_order, __pyx_k__new_order, sizeof(__pyx_k__new_order), 0, 0, 1, 1}, {&__pyx_n_s__new_shape, __pyx_k__new_shape, sizeof(__pyx_k__new_shape), 0, 0, 1, 1}, {&__pyx_n_s__newbyteorder, __pyx_k__newbyteorder, sizeof(__pyx_k__newbyteorder), 0, 0, 1, 1}, {&__pyx_n_s__next, __pyx_k__next, sizeof(__pyx_k__next), 0, 0, 1, 1}, {&__pyx_n_s__nextafter, __pyx_k__nextafter, sizeof(__pyx_k__nextafter), 0, 0, 1, 1}, {&__pyx_n_s__nin, __pyx_k__nin, sizeof(__pyx_k__nin), 0, 0, 1, 1}, {&__pyx_n_s__nonzero, __pyx_k__nonzero, sizeof(__pyx_k__nonzero), 0, 0, 1, 1}, {&__pyx_n_s__not_equal, __pyx_k__not_equal, sizeof(__pyx_k__not_equal), 0, 0, 1, 1}, {&__pyx_n_s__nout, __pyx_k__nout, sizeof(__pyx_k__nout), 0, 0, 1, 1}, {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1}, {&__pyx_n_s__npa, __pyx_k__npa, sizeof(__pyx_k__npa), 0, 0, 1, 1}, {&__pyx_n_s__npfirst, __pyx_k__npfirst, sizeof(__pyx_k__npfirst), 0, 0, 1, 1}, {&__pyx_n_s__npin, __pyx_k__npin, sizeof(__pyx_k__npin), 0, 0, 1, 1}, {&__pyx_n_s__npout, __pyx_k__npout, sizeof(__pyx_k__npout), 0, 0, 1, 1}, {&__pyx_n_s__npsecond, __pyx_k__npsecond, sizeof(__pyx_k__npsecond), 0, 0, 1, 1}, {&__pyx_n_s__npself, __pyx_k__npself, sizeof(__pyx_k__npself), 0, 0, 1, 1}, {&__pyx_n_s__npvalue, __pyx_k__npvalue, sizeof(__pyx_k__npvalue), 0, 0, 1, 1}, {&__pyx_n_s__nrow, __pyx_k__nrow, sizeof(__pyx_k__nrow), 0, 0, 1, 1}, {&__pyx_n_s__ntypes, __pyx_k__ntypes, sizeof(__pyx_k__ntypes), 0, 0, 1, 1}, {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1}, {&__pyx_n_s__object, __pyx_k__object, sizeof(__pyx_k__object), 0, 0, 1, 1}, {&__pyx_n_s__offset, __pyx_k__offset, sizeof(__pyx_k__offset), 0, 0, 1, 1}, {&__pyx_n_s__ohi, __pyx_k__ohi, sizeof(__pyx_k__ohi), 0, 0, 1, 1}, {&__pyx_n_s__olo, __pyx_k__olo, sizeof(__pyx_k__olo), 0, 0, 1, 1}, {&__pyx_n_s__ones, __pyx_k__ones, sizeof(__pyx_k__ones), 0, 0, 1, 1}, {&__pyx_n_s__order, __pyx_k__order, sizeof(__pyx_k__order), 0, 0, 1, 1}, {&__pyx_n_s__origin, __pyx_k__origin, sizeof(__pyx_k__origin), 0, 0, 1, 1}, {&__pyx_n_s__os, __pyx_k__os, sizeof(__pyx_k__os), 0, 0, 1, 1}, {&__pyx_n_s__out, __pyx_k__out, sizeof(__pyx_k__out), 0, 0, 1, 1}, {&__pyx_n_s__out_shape, __pyx_k__out_shape, sizeof(__pyx_k__out_shape), 0, 0, 1, 1}, {&__pyx_n_s__out_type, __pyx_k__out_type, sizeof(__pyx_k__out_type), 0, 0, 1, 1}, {&__pyx_n_s__outer, __pyx_k__outer, sizeof(__pyx_k__outer), 0, 0, 1, 1}, {&__pyx_n_s__owndata, __pyx_k__owndata, sizeof(__pyx_k__owndata), 0, 0, 1, 1}, {&__pyx_n_s__owns, __pyx_k__owns, sizeof(__pyx_k__owns), 0, 0, 1, 1}, {&__pyx_n_s__p, __pyx_k__p, sizeof(__pyx_k__p), 0, 0, 1, 1}, {&__pyx_n_s__pgroup, __pyx_k__pgroup, sizeof(__pyx_k__pgroup), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_get_default, __pyx_k__pgroup_get_default, sizeof(__pyx_k__pgroup_get_default), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_nnodes, __pyx_k__pgroup_nnodes, sizeof(__pyx_k__pgroup_nnodes), 0, 0, 1, 1}, {&__pyx_n_s__pgroup_nodeid, __pyx_k__pgroup_nodeid, sizeof(__pyx_k__pgroup_nodeid), 0, 0, 1, 1}, {&__pyx_n_s__piece, __pyx_k__piece, sizeof(__pyx_k__piece), 0, 0, 1, 1}, {&__pyx_n_s__pop, __pyx_k__pop, sizeof(__pyx_k__pop), 0, 0, 1, 1}, {&__pyx_n_s__power, __pyx_k__power, sizeof(__pyx_k__power), 0, 0, 1, 1}, {&__pyx_n_s__print, __pyx_k__print, sizeof(__pyx_k__print), 0, 0, 1, 1}, {&__pyx_n_s__print_sync, __pyx_k__print_sync, sizeof(__pyx_k__print_sync), 0, 0, 1, 1}, {&__pyx_n_s__proc, __pyx_k__proc, sizeof(__pyx_k__proc), 0, 0, 1, 1}, {&__pyx_n_s__prod, __pyx_k__prod, sizeof(__pyx_k__prod), 0, 0, 1, 1}, {&__pyx_n_s__property, __pyx_k__property, sizeof(__pyx_k__property), 0, 0, 1, 1}, {&__pyx_n_s__ptp, __pyx_k__ptp, sizeof(__pyx_k__ptp), 0, 0, 1, 1}, {&__pyx_n_s__put, __pyx_k__put, sizeof(__pyx_k__put), 0, 0, 1, 1}, {&__pyx_n_s__pyobj, __pyx_k__pyobj, sizeof(__pyx_k__pyobj), 0, 0, 1, 1}, {&__pyx_n_s__quicksort, __pyx_k__quicksort, sizeof(__pyx_k__quicksort), 0, 0, 1, 1}, {&__pyx_n_s__rad2deg, __pyx_k__rad2deg, sizeof(__pyx_k__rad2deg), 0, 0, 1, 1}, {&__pyx_n_s__radians, __pyx_k__radians, sizeof(__pyx_k__radians), 0, 0, 1, 1}, {&__pyx_n_s__raise, __pyx_k__raise, sizeof(__pyx_k__raise), 0, 0, 1, 1}, {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1}, {&__pyx_n_s__ravel, __pyx_k__ravel, sizeof(__pyx_k__ravel), 0, 0, 1, 1}, {&__pyx_n_s__real, __pyx_k__real, sizeof(__pyx_k__real), 0, 0, 1, 1}, {&__pyx_n_s__reciprocal, __pyx_k__reciprocal, sizeof(__pyx_k__reciprocal), 0, 0, 1, 1}, {&__pyx_n_s__recv, __pyx_k__recv, sizeof(__pyx_k__recv), 0, 0, 1, 1}, {&__pyx_n_s__recv_requests, __pyx_k__recv_requests, sizeof(__pyx_k__recv_requests), 0, 0, 1, 1}, {&__pyx_n_s__reduce, __pyx_k__reduce, sizeof(__pyx_k__reduce), 0, 0, 1, 1}, {&__pyx_n_s__reduceat, __pyx_k__reduceat, sizeof(__pyx_k__reduceat), 0, 0, 1, 1}, {&__pyx_n_s__reduction, __pyx_k__reduction, sizeof(__pyx_k__reduction), 0, 0, 1, 1}, {&__pyx_n_s__refcheck, __pyx_k__refcheck, sizeof(__pyx_k__refcheck), 0, 0, 1, 1}, {&__pyx_n_s__register_dtype, __pyx_k__register_dtype, sizeof(__pyx_k__register_dtype), 0, 0, 1, 1}, {&__pyx_n_s__release, __pyx_k__release, sizeof(__pyx_k__release), 0, 0, 1, 1}, {&__pyx_n_s__release_first, __pyx_k__release_first, sizeof(__pyx_k__release_first), 0, 0, 1, 1}, {&__pyx_n_s__release_in, __pyx_k__release_in, sizeof(__pyx_k__release_in), 0, 0, 1, 1}, {&__pyx_n_s__release_second, __pyx_k__release_second, sizeof(__pyx_k__release_second), 0, 0, 1, 1}, {&__pyx_n_s__release_update, __pyx_k__release_update, sizeof(__pyx_k__release_update), 0, 0, 1, 1}, {&__pyx_n_s__release_value, __pyx_k__release_value, sizeof(__pyx_k__release_value), 0, 0, 1, 1}, {&__pyx_n_s__remainder, __pyx_k__remainder, sizeof(__pyx_k__remainder), 0, 0, 1, 1}, {&__pyx_n_s__repeat, __pyx_k__repeat, sizeof(__pyx_k__repeat), 0, 0, 1, 1}, {&__pyx_n_s__repeats, __pyx_k__repeats, sizeof(__pyx_k__repeats), 0, 0, 1, 1}, {&__pyx_n_s__reshape, __pyx_k__reshape, sizeof(__pyx_k__reshape), 0, 0, 1, 1}, {&__pyx_n_s__resize, __pyx_k__resize, sizeof(__pyx_k__resize), 0, 0, 1, 1}, {&__pyx_n_s__result, __pyx_k__result, sizeof(__pyx_k__result), 0, 0, 1, 1}, {&__pyx_n_s__ret, __pyx_k__ret, sizeof(__pyx_k__ret), 0, 0, 1, 1}, {&__pyx_n_s__rhi, __pyx_k__rhi, sizeof(__pyx_k__rhi), 0, 0, 1, 1}, {&__pyx_n_s__right_shift, __pyx_k__right_shift, sizeof(__pyx_k__right_shift), 0, 0, 1, 1}, {&__pyx_n_s__rint, __pyx_k__rint, sizeof(__pyx_k__rint), 0, 0, 1, 1}, {&__pyx_n_s__rlo, __pyx_k__rlo, sizeof(__pyx_k__rlo), 0, 0, 1, 1}, {&__pyx_n_s__round, __pyx_k__round, sizeof(__pyx_k__round), 0, 0, 1, 1}, {&__pyx_n_s__s, __pyx_k__s, sizeof(__pyx_k__s), 0, 0, 1, 1}, {&__pyx_n_s__scatter, __pyx_k__scatter, sizeof(__pyx_k__scatter), 0, 0, 1, 1}, {&__pyx_n_s__searchsorted, __pyx_k__searchsorted, sizeof(__pyx_k__searchsorted), 0, 0, 1, 1}, {&__pyx_n_s__second, __pyx_k__second, sizeof(__pyx_k__second), 0, 0, 1, 1}, {&__pyx_n_s__second_dtype, __pyx_k__second_dtype, sizeof(__pyx_k__second_dtype), 0, 0, 1, 1}, {&__pyx_n_s__second_isscalar, __pyx_k__second_isscalar, sizeof(__pyx_k__second_isscalar), 0, 0, 1, 1}, {&__pyx_n_s__second_shape, __pyx_k__second_shape, sizeof(__pyx_k__second_shape), 0, 0, 1, 1}, {&__pyx_n_s__self, __pyx_k__self, sizeof(__pyx_k__self), 0, 0, 1, 1}, {&__pyx_n_s__send, __pyx_k__send, sizeof(__pyx_k__send), 0, 0, 1, 1}, {&__pyx_n_s__send_requests, __pyx_k__send_requests, sizeof(__pyx_k__send_requests), 0, 0, 1, 1}, {&__pyx_n_s__sep, __pyx_k__sep, sizeof(__pyx_k__sep), 0, 0, 1, 1}, {&__pyx_n_s__setfield, __pyx_k__setfield, sizeof(__pyx_k__setfield), 0, 0, 1, 1}, {&__pyx_n_s__setflags, __pyx_k__setflags, sizeof(__pyx_k__setflags), 0, 0, 1, 1}, {&__pyx_n_s__shape, __pyx_k__shape, sizeof(__pyx_k__shape), 0, 0, 1, 1}, {&__pyx_n_s__shape_product, __pyx_k__shape_product, sizeof(__pyx_k__shape_product), 0, 0, 1, 1}, {&__pyx_n_s__side, __pyx_k__side, sizeof(__pyx_k__side), 0, 0, 1, 1}, {&__pyx_n_s__sign, __pyx_k__sign, sizeof(__pyx_k__sign), 0, 0, 1, 1}, {&__pyx_n_s__signature, __pyx_k__signature, sizeof(__pyx_k__signature), 0, 0, 1, 1}, {&__pyx_n_s__signbit, __pyx_k__signbit, sizeof(__pyx_k__signbit), 0, 0, 1, 1}, {&__pyx_n_s__sin, __pyx_k__sin, sizeof(__pyx_k__sin), 0, 0, 1, 1}, {&__pyx_n_s__sinh, __pyx_k__sinh, sizeof(__pyx_k__sinh), 0, 0, 1, 1}, {&__pyx_n_s__size, __pyx_k__size, sizeof(__pyx_k__size), 0, 0, 1, 1}, {&__pyx_n_s__size_per_proc, __pyx_k__size_per_proc, sizeof(__pyx_k__size_per_proc), 0, 0, 1, 1}, {&__pyx_n_s__slicer, __pyx_k__slicer, sizeof(__pyx_k__slicer), 0, 0, 1, 1}, {&__pyx_n_s__slicer_i, __pyx_k__slicer_i, sizeof(__pyx_k__slicer_i), 0, 0, 1, 1}, {&__pyx_n_s__slicer_i_1, __pyx_k__slicer_i_1, sizeof(__pyx_k__slicer_i_1), 0, 0, 1, 1}, {&__pyx_n_s__sort, __pyx_k__sort, sizeof(__pyx_k__sort), 0, 0, 1, 1}, {&__pyx_n_s__source, __pyx_k__source, sizeof(__pyx_k__source), 0, 0, 1, 1}, {&__pyx_n_s__spacing, __pyx_k__spacing, sizeof(__pyx_k__spacing), 0, 0, 1, 1}, {&__pyx_n_s__sqrt, __pyx_k__sqrt, sizeof(__pyx_k__sqrt), 0, 0, 1, 1}, {&__pyx_n_s__square, __pyx_k__square, sizeof(__pyx_k__square), 0, 0, 1, 1}, {&__pyx_n_s__squeeze, __pyx_k__squeeze, sizeof(__pyx_k__squeeze), 0, 0, 1, 1}, {&__pyx_n_s__start, __pyx_k__start, sizeof(__pyx_k__start), 0, 0, 1, 1}, {&__pyx_n_s__std, __pyx_k__std, sizeof(__pyx_k__std), 0, 0, 1, 1}, {&__pyx_n_s__step, __pyx_k__step, sizeof(__pyx_k__step), 0, 0, 1, 1}, {&__pyx_n_s__stop, __pyx_k__stop, sizeof(__pyx_k__stop), 0, 0, 1, 1}, {&__pyx_n_s__str, __pyx_k__str, sizeof(__pyx_k__str), 0, 0, 1, 1}, {&__pyx_n_s__strided_get, __pyx_k__strided_get, sizeof(__pyx_k__strided_get), 0, 0, 1, 1}, {&__pyx_n_s__strides, __pyx_k__strides, sizeof(__pyx_k__strides), 0, 0, 1, 1}, {&__pyx_n_s__subtract, __pyx_k__subtract, sizeof(__pyx_k__subtract), 0, 0, 1, 1}, {&__pyx_n_s__sum, __pyx_k__sum, sizeof(__pyx_k__sum), 0, 0, 1, 1}, {&__pyx_n_s__super, __pyx_k__super, sizeof(__pyx_k__super), 0, 0, 1, 1}, {&__pyx_n_s__swapaxes, __pyx_k__swapaxes, sizeof(__pyx_k__swapaxes), 0, 0, 1, 1}, {&__pyx_n_s__sync, __pyx_k__sync, sizeof(__pyx_k__sync), 0, 0, 1, 1}, {&__pyx_n_s__t, __pyx_k__t, sizeof(__pyx_k__t), 0, 0, 1, 1}, {&__pyx_n_s__tag, __pyx_k__tag, sizeof(__pyx_k__tag), 0, 0, 1, 1}, {&__pyx_n_s__take, __pyx_k__take, sizeof(__pyx_k__take), 0, 0, 1, 1}, {&__pyx_n_s__tan, __pyx_k__tan, sizeof(__pyx_k__tan), 0, 0, 1, 1}, {&__pyx_n_s__tanh, __pyx_k__tanh, sizeof(__pyx_k__tanh), 0, 0, 1, 1}, {&__pyx_n_s__the_copy, __pyx_k__the_copy, sizeof(__pyx_k__the_copy), 0, 0, 1, 1}, {&__pyx_n_s__tmp, __pyx_k__tmp, sizeof(__pyx_k__tmp), 0, 0, 1, 1}, {&__pyx_n_s__tofile, __pyx_k__tofile, sizeof(__pyx_k__tofile), 0, 0, 1, 1}, {&__pyx_n_s__tolist, __pyx_k__tolist, sizeof(__pyx_k__tolist), 0, 0, 1, 1}, {&__pyx_n_s__tostring, __pyx_k__tostring, sizeof(__pyx_k__tostring), 0, 0, 1, 1}, {&__pyx_n_s__trace, __pyx_k__trace, sizeof(__pyx_k__trace), 0, 0, 1, 1}, {&__pyx_n_s__transpose, __pyx_k__transpose, sizeof(__pyx_k__transpose), 0, 0, 1, 1}, {&__pyx_n_s__true_divide, __pyx_k__true_divide, sizeof(__pyx_k__true_divide), 0, 0, 1, 1}, {&__pyx_n_s__trunc, __pyx_k__trunc, sizeof(__pyx_k__trunc), 0, 0, 1, 1}, {&__pyx_n_s__type, __pyx_k__type, sizeof(__pyx_k__type), 0, 0, 1, 1}, {&__pyx_n_s__types, __pyx_k__types, sizeof(__pyx_k__types), 0, 0, 1, 1}, {&__pyx_n_s__ufunc, __pyx_k__ufunc, sizeof(__pyx_k__ufunc), 0, 0, 1, 1}, {&__pyx_n_s__uic, __pyx_k__uic, sizeof(__pyx_k__uic), 0, 0, 1, 1}, {&__pyx_n_s__unravel_index, __pyx_k__unravel_index, sizeof(__pyx_k__unravel_index), 0, 0, 1, 1}, {&__pyx_n_s__updateifcopy, __pyx_k__updateifcopy, sizeof(__pyx_k__updateifcopy), 0, 0, 1, 1}, {&__pyx_n_s__util, __pyx_k__util, sizeof(__pyx_k__util), 0, 0, 1, 1}, {&__pyx_n_s__v, __pyx_k__v, sizeof(__pyx_k__v), 0, 0, 1, 1}, {&__pyx_n_s__val, __pyx_k__val, sizeof(__pyx_k__val), 0, 0, 1, 1}, {&__pyx_n_s__value, __pyx_k__value, sizeof(__pyx_k__value), 0, 0, 1, 1}, {&__pyx_n_s__values, __pyx_k__values, sizeof(__pyx_k__values), 0, 0, 1, 1}, {&__pyx_n_s__var, __pyx_k__var, sizeof(__pyx_k__var), 0, 0, 1, 1}, {&__pyx_n_s__view, __pyx_k__view, sizeof(__pyx_k__view), 0, 0, 1, 1}, {&__pyx_n_s__what, __pyx_k__what, sizeof(__pyx_k__what), 0, 0, 1, 1}, {&__pyx_n_s__write, __pyx_k__write, sizeof(__pyx_k__write), 0, 0, 1, 1}, {&__pyx_n_s__writeable, __pyx_k__writeable, sizeof(__pyx_k__writeable), 0, 0, 1, 1}, {&__pyx_n_s__x, __pyx_k__x, sizeof(__pyx_k__x), 0, 0, 1, 1}, {&__pyx_n_s__xrange, __pyx_k__xrange, sizeof(__pyx_k__xrange), 0, 0, 1, 1}, {&__pyx_n_s__y, __pyx_k__y, sizeof(__pyx_k__y), 0, 0, 1, 1}, {&__pyx_n_s__z, __pyx_k__z, sizeof(__pyx_k__z), 0, 0, 1, 1}, {&__pyx_n_s__zeros, __pyx_k__zeros, sizeof(__pyx_k__zeros), 0, 0, 1, 1}, {&__pyx_n_s__zip, __pyx_k__zip, sizeof(__pyx_k__zip), 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0} }; static int __Pyx_InitCachedBuiltins(void) { __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s__object); if (!__pyx_builtin_object) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_property = __Pyx_GetBuiltinName(__pyx_n_s__property); if (!__pyx_builtin_property) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s__AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s__KeyError); if (!__pyx_builtin_KeyError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_super = __Pyx_GetBuiltinName(__pyx_n_s__super); if (!__pyx_builtin_super) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s__TypeError); if (!__pyx_builtin_TypeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s__NotImplementedError); if (!__pyx_builtin_NotImplementedError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s__IndexError); if (!__pyx_builtin_IndexError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_zip = __Pyx_GetBuiltinName(__pyx_n_s__zip); if (!__pyx_builtin_zip) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_reduce = __Pyx_GetBuiltinName(__pyx_n_s__reduce); if (!__pyx_builtin_reduce) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #if PY_MAJOR_VERSION >= 3 __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s__range); if (!__pyx_builtin_xrange) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s__xrange); if (!__pyx_builtin_xrange) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif __pyx_builtin_StopIteration = __Pyx_GetBuiltinName(__pyx_n_s__StopIteration); if (!__pyx_builtin_StopIteration) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3240; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} return 0; __pyx_L1_error:; return -1; } static int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); /* "ga4py/gain/core.pyx":382 * a = np.ndarray(shape, dtype_, buffer, offset, * strides, order) * local[:] = a[ga.zip(*self.distribution())] # <<<<<<<<<<<<<< * self.release_update() * self._strides = [self.itemsize] */ __pyx_k_slice_5 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_5); __Pyx_GIVEREF(__pyx_k_slice_5); /* "ga4py/gain/core.pyx":385 * self.release_update() * self._strides = [self.itemsize] * for size in shape[-1:0:-1]: # <<<<<<<<<<<<<< * self._strides = [size*self._strides[0]] + self._strides * elif isinstance(base, ndarray): */ __pyx_k_slice_6 = PySlice_New(__pyx_int_neg_1, __pyx_int_0, __pyx_int_neg_1); if (unlikely(!__pyx_k_slice_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_6); __Pyx_GIVEREF(__pyx_k_slice_6); /* "ga4py/gain/core.pyx":402 * self._flags = flagsobj() * self._strides = [self.itemsize] * for size in shape[-1:0:-1]: # <<<<<<<<<<<<<< * self._strides = [size*self._strides[0]] + self._strides * */ __pyx_k_slice_7 = PySlice_New(__pyx_int_neg_1, __pyx_int_0, __pyx_int_neg_1); if (unlikely(!__pyx_k_slice_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_7); __Pyx_GIVEREF(__pyx_k_slice_7); /* "ga4py/gain/core.pyx":546 * raise TypeError, "unhandled piece of global_slice" * # modify new index array based on global_slice * new_i = (i*np.asarray(step,dtype=np.int64)[None,:] # <<<<<<<<<<<<<< * + np.asarray(start, dtype=np.int64)[None,:]) * # get rid of index columns which don't refer to an actual GA dimension */ __pyx_k_slice_10 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_10); __Pyx_GIVEREF(__pyx_k_slice_10); __pyx_k_tuple_11 = PyTuple_Pack(2, Py_None, __pyx_k_slice_10); if (unlikely(!__pyx_k_tuple_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_11); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_11)); /* "ga4py/gain/core.pyx":547 * # modify new index array based on global_slice * new_i = (i*np.asarray(step,dtype=np.int64)[None,:] * + np.asarray(start, dtype=np.int64)[None,:]) # <<<<<<<<<<<<<< * # get rid of index columns which don't refer to an actual GA dimension * # add index columns which were missing, single-valued GA dimensions */ __pyx_k_slice_12 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_12); __Pyx_GIVEREF(__pyx_k_slice_12); __pyx_k_tuple_13 = PyTuple_Pack(2, Py_None, __pyx_k_slice_12); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_13); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_13)); /* "ga4py/gain/core.pyx":555 * for fixed in self.global_slice.fixed: * new_column = np.empty((len(new_i),1),dtype=np.int64) * new_column[:] = fixed.value # <<<<<<<<<<<<<< * new_columns[fixed.origin] = new_column * for col,gs in zip(columns,self.global_slice.data): */ __pyx_k_slice_14 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_14); __Pyx_GIVEREF(__pyx_k_slice_14); /* "ga4py/gain/core.pyx":604 * def _set_flat(self, value): * a = flatiter(self) * a[:] = value # <<<<<<<<<<<<<< * flat = property(_get_flat,_set_flat) * */ __pyx_k_slice_16 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_16); __Pyx_GIVEREF(__pyx_k_slice_16); /* "ga4py/gain/core.pyx":611 * return zeros(self.shape, self.dtype) * else: * ret = self[:] # <<<<<<<<<<<<<< * ret._is_imag = True * ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) */ __pyx_k_slice_17 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_17); __Pyx_GIVEREF(__pyx_k_slice_17); /* "ga4py/gain/core.pyx":619 * raise TypeError, "array does not have imaginary part to set" * else: * self._get_imag()[:] = value # <<<<<<<<<<<<<< * imag = property(_get_imag,_set_imag) * */ __pyx_k_slice_20 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_20); __Pyx_GIVEREF(__pyx_k_slice_20); /* "ga4py/gain/core.pyx":626 * return self * else: * ret = self[:] # <<<<<<<<<<<<<< * ret._is_real = True * ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) */ __pyx_k_slice_21 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_21); __Pyx_GIVEREF(__pyx_k_slice_21); /* "ga4py/gain/core.pyx":631 * return ret * def _set_real(self, value): * self._get_real()[:] = value # <<<<<<<<<<<<<< * real = property(_get_real,_set_real) * */ __pyx_k_slice_22 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_22); __Pyx_GIVEREF(__pyx_k_slice_22); /* "ga4py/gain/core.pyx":668 * def _get_strides(self): * strides = [self.itemsize] * for size in self.shape[-1:0:-1]: # <<<<<<<<<<<<<< * strides = [size*strides[0]] + strides * return strides */ __pyx_k_slice_26 = PySlice_New(__pyx_int_neg_1, __pyx_int_0, __pyx_int_neg_1); if (unlikely(!__pyx_k_slice_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_26); __Pyx_GIVEREF(__pyx_k_slice_26); /* "ga4py/gain/core.pyx":768 * if local is not None: * lo,hi = the_copy.distribution() * local[:] = self.get(ga.zip(lo,hi)) # <<<<<<<<<<<<<< * the_copy.release_update() * else: */ __pyx_k_slice_27 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_27); __Pyx_GIVEREF(__pyx_k_slice_27); /* "ga4py/gain/core.pyx":772 * else: * # case where the copy is not distributed but the original was * the_copy[:] = self.allget() # <<<<<<<<<<<<<< * return the_copy * */ __pyx_k_slice_28 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_28); __Pyx_GIVEREF(__pyx_k_slice_28); /* "ga4py/gain/core.pyx":909 * if local is not None: * lo,hi = the_copy.distribution() * local[:] = self.get(ga.zip(lo,hi)) # <<<<<<<<<<<<<< * the_copy.release_update() * else: */ __pyx_k_slice_29 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 909; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_29); __Pyx_GIVEREF(__pyx_k_slice_29); /* "ga4py/gain/core.pyx":913 * else: * # case where the copy is not distributed but the original was * the_copy[:] = self.allget() # <<<<<<<<<<<<<< * return the_copy * */ __pyx_k_slice_30 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 913; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_30); __Pyx_GIVEREF(__pyx_k_slice_30); /* "ga4py/gain/core.pyx":966 * indices = np.empty((size,2), dtype=np.int64) * if offset >= 0: * indices[:,0] = np.arange(size, dtype=np.int64) # <<<<<<<<<<<<<< * indices[:,1] = np.arange(offset, size+offset, dtype=np.int64) * else: */ __pyx_k_slice_34 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_34); __Pyx_GIVEREF(__pyx_k_slice_34); __pyx_k_tuple_35 = PyTuple_Pack(2, __pyx_k_slice_34, __pyx_int_0); if (unlikely(!__pyx_k_tuple_35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_35); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_35)); /* "ga4py/gain/core.pyx":967 * if offset >= 0: * indices[:,0] = np.arange(size, dtype=np.int64) * indices[:,1] = np.arange(offset, size+offset, dtype=np.int64) # <<<<<<<<<<<<<< * else: * offset = -offset */ __pyx_k_slice_36 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_36); __Pyx_GIVEREF(__pyx_k_slice_36); __pyx_k_tuple_37 = PyTuple_Pack(2, __pyx_k_slice_36, __pyx_int_1); if (unlikely(!__pyx_k_tuple_37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_37); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_37)); /* "ga4py/gain/core.pyx":970 * else: * offset = -offset * indices[:,0] = np.arange(offset, size+offset, dtype=np.int64) # <<<<<<<<<<<<<< * indices[:,1] = np.arange(size, dtype=np.int64) * my_range = out.global_slice.bound_by_lohi(*out.distribution()) */ __pyx_k_slice_38 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_38); __Pyx_GIVEREF(__pyx_k_slice_38); __pyx_k_tuple_39 = PyTuple_Pack(2, __pyx_k_slice_38, __pyx_int_0); if (unlikely(!__pyx_k_tuple_39)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_39); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_39)); /* "ga4py/gain/core.pyx":971 * offset = -offset * indices[:,0] = np.arange(offset, size+offset, dtype=np.int64) * indices[:,1] = np.arange(size, dtype=np.int64) # <<<<<<<<<<<<<< * my_range = out.global_slice.bound_by_lohi(*out.distribution()) * my_range = my_range[0].pyobj() */ __pyx_k_slice_40 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_40); __Pyx_GIVEREF(__pyx_k_slice_40); __pyx_k_tuple_41 = PyTuple_Pack(2, __pyx_k_slice_40, __pyx_int_1); if (unlikely(!__pyx_k_tuple_41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_41); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_41)); /* "ga4py/gain/core.pyx":975 * my_range = my_range[0].pyobj() * my_indices = indices[my_range] * npout[:] = self.gather(my_indices) # <<<<<<<<<<<<<< * return out * */ __pyx_k_slice_42 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_42); __Pyx_GIVEREF(__pyx_k_slice_42); /* "ga4py/gain/core.pyx":1264 * return result * else: * out[:] = result # <<<<<<<<<<<<<< * return out * else: */ __pyx_k_slice_43 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_43)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_43); __Pyx_GIVEREF(__pyx_k_slice_43); /* "ga4py/gain/core.pyx":1307 * return result * else: * out[:] = result # <<<<<<<<<<<<<< * return out * else: */ __pyx_k_slice_44 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1307; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_44); __Pyx_GIVEREF(__pyx_k_slice_44); /* "ga4py/gain/core.pyx":1461 * # get the flattened indices * strides = [1] * for size in shape[-1:0:-1]: # <<<<<<<<<<<<<< * strides = [size*strides[0]] + strides * i_flat = np.sum(i*strides, axis=1) */ __pyx_k_slice_48 = PySlice_New(__pyx_int_neg_1, __pyx_int_0, __pyx_int_neg_1); if (unlikely(!__pyx_k_slice_48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_48); __Pyx_GIVEREF(__pyx_k_slice_48); /* "ga4py/gain/core.pyx":1975 * * """ * ret = self[:] # <<<<<<<<<<<<<< * if self.ndim < 2: * return ret */ __pyx_k_slice_50 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_50); __Pyx_GIVEREF(__pyx_k_slice_50); /* "ga4py/gain/core.pyx":1980 * if not axes: * # empty axes tuple i.e. no axes were passed * axes = np.arange(self.ndim)[::-1] # <<<<<<<<<<<<<< * elif len(axes) == 1: * # we have either None or a tuple of ints */ __pyx_k_slice_51 = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_k_slice_51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_51); __Pyx_GIVEREF(__pyx_k_slice_51); /* "ga4py/gain/core.pyx":1984 * # we have either None or a tuple of ints * if axes[0] is None: * axes = np.arange(self.ndim)[::-1] # <<<<<<<<<<<<<< * elif isinstance(axes[0], tuple): * axes = axes[0] */ __pyx_k_slice_52 = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_k_slice_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_52); __Pyx_GIVEREF(__pyx_k_slice_52); /* "ga4py/gain/core.pyx":2398 * else: * npvalue = value * npself[:] = npvalue # <<<<<<<<<<<<<< * if release_value: * value.release() */ __pyx_k_slice_61 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_61); __Pyx_GIVEREF(__pyx_k_slice_61); /* "ga4py/gain/core.pyx":2550 * # input must be an ndarray given previous conditionals * # TODO okay, is there something better than this? * ignore = np.ones(1, dtype=input_dtype) # <<<<<<<<<<<<<< * out_type = self.func(ignore).dtype * out = ndarray(input_shape, out_type) */ __pyx_k_tuple_63 = PyTuple_Pack(1, __pyx_int_1); if (unlikely(!__pyx_k_tuple_63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2550; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_63); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_63)); /* "ga4py/gain/core.pyx":2802 * my_range = out.global_slice.bound_by_lohi(*out.distribution()) * if axis == 0: # rows * my_range = [slice(None,None,None)]+my_range # <<<<<<<<<<<<<< * elif axis == 1: # cols * my_range = my_range+[slice(None,None,None)] */ __pyx_k_tuple_69 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_tuple_69)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_69); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_69)); /* "ga4py/gain/core.pyx":2804 * my_range = [slice(None,None,None)]+my_range * elif axis == 1: # cols * my_range = my_range+[slice(None,None,None)] # <<<<<<<<<<<<<< * piece = a.get(my_range) * self.func.reduce(piece, axis, dtype, ndout, *args, **kwargs) */ __pyx_k_tuple_70 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_tuple_70)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2804; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_70); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_70)); /* "ga4py/gain/core.pyx":2850 * #print_sync("nda p=%s" % str(p)) * buf = np.ndarray((len(p),hi-lo), dtype=out.dtype) * buf[:] = self.func.identity # <<<<<<<<<<<<<< * for i in range(len(p)): * rlo,rhi = m[i] */ __pyx_k_slice_71 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_71)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2850; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_71); __Pyx_GIVEREF(__pyx_k_slice_71); /* "ga4py/gain/core.pyx":2875 * a.release() * else: * slicer = [slice(0,None,None)]*a.ndim # <<<<<<<<<<<<<< * axis_iterator = iter(xrange(a.shape[axis])) * # copy first loop iteration to 'out' */ __pyx_k_tuple_72 = PyTuple_Pack(3, __pyx_int_0, Py_None, Py_None); if (unlikely(!__pyx_k_tuple_72)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2875; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_72); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_72)); /* "ga4py/gain/core.pyx":2879 * # copy first loop iteration to 'out' * slicer[axis] = axis_iterator.next() * out[:] = a[slicer] # <<<<<<<<<<<<<< * # remaining loop iterations are appropriately reduced * for i in axis_iterator: */ __pyx_k_slice_73 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_73)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2879; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_73); __Pyx_GIVEREF(__pyx_k_slice_73); /* "ga4py/gain/core.pyx":2924 * self.func(ndout,reduction,ndout) * else: * everything = comm().allgather((None,None)) # <<<<<<<<<<<<<< * else: * raise NotImplementedError */ __pyx_k_tuple_75 = PyTuple_Pack(2, Py_None, Py_None); if (unlikely(!__pyx_k_tuple_75)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2924; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_75); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_75)); __pyx_k_tuple_76 = PyTuple_Pack(1, ((PyObject *)__pyx_k_tuple_75)); if (unlikely(!__pyx_k_tuple_76)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2924; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_76); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_76)); /* "ga4py/gain/core.pyx":2928 * raise NotImplementedError * else: * slicer_i = [slice(0,None,None)]*a.ndim # <<<<<<<<<<<<<< * slicer_i_1 = [slice(0,None,None)]*a.ndim * axis_iterator = iter(xrange(a.shape[axis])) */ __pyx_k_tuple_77 = PyTuple_Pack(3, __pyx_int_0, Py_None, Py_None); if (unlikely(!__pyx_k_tuple_77)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_77); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_77)); /* "ga4py/gain/core.pyx":2929 * else: * slicer_i = [slice(0,None,None)]*a.ndim * slicer_i_1 = [slice(0,None,None)]*a.ndim # <<<<<<<<<<<<<< * axis_iterator = iter(xrange(a.shape[axis])) * # copy first loop iteration to 'out' */ __pyx_k_tuple_78 = PyTuple_Pack(3, __pyx_int_0, Py_None, Py_None); if (unlikely(!__pyx_k_tuple_78)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2929; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_78); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_78)); /* "ga4py/gain/core.pyx":3201 * if value.size == 1: * values = np.zeros(len(i), dtype=self._base.dtype) * values[:] = value # <<<<<<<<<<<<<< * else: * assert value.ndim == 1 and len(value) == len(i) */ __pyx_k_slice_82 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_82)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_82); __Pyx_GIVEREF(__pyx_k_slice_82); /* "ga4py/gain/core.pyx":3332 * buf = a.access() * if buf is not None: * buf[:] = 0 # <<<<<<<<<<<<<< * a.release_update() * return a */ __pyx_k_slice_85 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_85)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_85); __Pyx_GIVEREF(__pyx_k_slice_85); /* "numpy.pxd":215 * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) */ __pyx_k_tuple_89 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_88)); if (unlikely(!__pyx_k_tuple_89)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_89); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_89)); /* "numpy.pxd":219 * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< * * info.buf = PyArray_DATA(self) */ __pyx_k_tuple_91 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_90)); if (unlikely(!__pyx_k_tuple_91)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_91); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_91)); /* "numpy.pxd":257 * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" */ __pyx_k_tuple_93 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_92)); if (unlikely(!__pyx_k_tuple_93)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_93); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_93)); /* "numpy.pxd":799 * * if (end - f) - (new_offset - offset[0]) < 15: * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< * * if ((child.byteorder == c'>' and little_endian) or */ __pyx_k_tuple_96 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_95)); if (unlikely(!__pyx_k_tuple_96)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_96); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_96)); /* "numpy.pxd":803 * if ((child.byteorder == c'>' and little_endian) or * (child.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * # One could encode it in the format string and have Cython * # complain instead, BUT: < and > in format strings also imply */ __pyx_k_tuple_97 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_92)); if (unlikely(!__pyx_k_tuple_97)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_97); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_97)); /* "numpy.pxd":823 * t = child.type_num * if end - f < 5: * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< * * # Until ticket #99 is fixed, use integers to avoid warnings */ __pyx_k_tuple_99 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_98)); if (unlikely(!__pyx_k_tuple_99)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_99); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_99)); /* "ga4py/gain/core.pyx":88 * * class flagsobj(object): * def __init__(self): # <<<<<<<<<<<<<< * self._c = True * self._f = False */ __pyx_k_tuple_102 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_102)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_102); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_102)); __pyx_k_codeobj_103 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_102, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____init__, 88, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_103)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":95 * self._a = True * self._u = False * def _get_c(self): # <<<<<<<<<<<<<< * return self._c * c_contiguous = property(_get_c) */ __pyx_k_tuple_106 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_106)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_106); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_106)); __pyx_k_codeobj_107 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_106, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_c, 95, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_107)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":98 * return self._c * c_contiguous = property(_get_c) * def _get_f(self): # <<<<<<<<<<<<<< * return self._f * f_contiguous = property(_get_f) */ __pyx_k_tuple_109 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_109)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_109); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_109)); __pyx_k_codeobj_110 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_109, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_f, 98, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_110)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":101 * return self._f * f_contiguous = property(_get_f) * def _get_o(self): # <<<<<<<<<<<<<< * return self._o * owndata = property(_get_o) */ __pyx_k_tuple_112 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_112)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_112); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_112)); __pyx_k_codeobj_113 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_112, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_o, 101, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_113)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":104 * return self._o * owndata = property(_get_o) * def _get_w(self): # <<<<<<<<<<<<<< * return self._w * writeable = property(_get_w) */ __pyx_k_tuple_115 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_115)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_115); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_115)); __pyx_k_codeobj_116 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_115, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_w, 104, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_116)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":107 * return self._w * writeable = property(_get_w) * def _get_a(self): # <<<<<<<<<<<<<< * return self._a * aligned = property(_get_a) */ __pyx_k_tuple_118 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_118)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_118); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_118)); __pyx_k_codeobj_119 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_118, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_a, 107, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_119)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":110 * return self._a * aligned = property(_get_a) * def _get_u(self): # <<<<<<<<<<<<<< * return self._u * updateifcopy = property(_get_u) */ __pyx_k_tuple_121 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_121)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_121); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_121)); __pyx_k_codeobj_122 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_121, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_u, 110, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_122)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":113 * return self._u * updateifcopy = property(_get_u) * def __getitem__(self, item): # <<<<<<<<<<<<<< * if isinstance(item, str): * if item == "C" or item == "C_CONTIGUOUS": */ __pyx_k_tuple_124 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__item)); if (unlikely(!__pyx_k_tuple_124)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_124); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_124)); __pyx_k_codeobj_125 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_124, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____getitem__, 113, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_125)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":128 * return self._u * raise KeyError, "Unknown flag" * def __repr__(self): # <<<<<<<<<<<<<< * return """ C_CONTIGUOUS : %s * F_CONTIGUOUS : %s */ __pyx_k_tuple_127 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_127)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_127); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_127)); __pyx_k_codeobj_128 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____repr__, 128, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_128)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":147 * * """ * def __init__(self, level=3): # <<<<<<<<<<<<<< * self.cache = {} * self.level = level */ __pyx_k_tuple_130 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__level)); if (unlikely(!__pyx_k_tuple_130)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_130); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_130)); __pyx_k_codeobj_131 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_130, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____init__, 147, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_131)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_132 = PyTuple_Pack(1, ((PyObject *)__pyx_int_3)); if (unlikely(!__pyx_k_tuple_132)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_132); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_132)); /* "ga4py/gain/core.pyx":151 * self.level = level * * def __del__(self): # <<<<<<<<<<<<<< * for value in self.cache.values(): * for g_a in value: */ __pyx_k_tuple_134 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__value), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_134)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_134); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_134)); __pyx_k_codeobj_135 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_134, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____del__, 151, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_135)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":156 * ga.destroy(g_a) * * def __contains__(self, item): # <<<<<<<<<<<<<< * return (item in self.cache and self.cache[item]) * */ __pyx_k_tuple_137 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__item)); if (unlikely(!__pyx_k_tuple_137)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_137); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_137)); __pyx_k_codeobj_138 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_137, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____contains__, 156, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_138)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":159 * return (item in self.cache and self.cache[item]) * * def __getitem__(self, item): # <<<<<<<<<<<<<< * if item in self.cache and self.cache[item]: * return self.cache[item].pop() */ __pyx_k_tuple_140 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__item)); if (unlikely(!__pyx_k_tuple_140)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_140); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_140)); __pyx_k_codeobj_141 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_140, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____getitem__, 159, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_141)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":164 * raise KeyError, item * * def __setitem__(self, item, value): # <<<<<<<<<<<<<< * if item in self.cache: * self.cache[item].append(value) */ __pyx_k_tuple_143 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__item), ((PyObject *)__pyx_n_s__value)); if (unlikely(!__pyx_k_tuple_143)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_143); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_143)); __pyx_k_codeobj_144 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_143, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____setitem__, 164, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_144)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":170 * self.cache[item] = [value] * * def count(self, item): # <<<<<<<<<<<<<< * if item in self.cache: * return len(self.cache[item]) */ __pyx_k_tuple_146 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__item)); if (unlikely(!__pyx_k_tuple_146)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_146); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_146)); __pyx_k_codeobj_147 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_146, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__count, 170, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_147)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":175 * return 0 * * def empty(self, item): # <<<<<<<<<<<<<< * return self.count(item) == 0 * */ __pyx_k_tuple_149 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__item)); if (unlikely(!__pyx_k_tuple_149)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_149); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_149)); __pyx_k_codeobj_150 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_149, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__empty, 175, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_150)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":178 * return self.count(item) == 0 * * def full(self, item): # <<<<<<<<<<<<<< * return self.count(item) == self.level * */ __pyx_k_tuple_152 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__item)); if (unlikely(!__pyx_k_tuple_152)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_152); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_152)); __pyx_k_codeobj_153 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_152, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__full, 178, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_153)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":181 * return self.count(item) == self.level * * def pop(self, item): # <<<<<<<<<<<<<< * return self[item] * */ __pyx_k_tuple_155 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__item)); if (unlikely(!__pyx_k_tuple_155)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_155); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_155)); __pyx_k_codeobj_156 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_155, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__pop, 181, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_156)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":184 * return self[item] * * def size(self): # <<<<<<<<<<<<<< * """Return the size of the cache in bytes.""" * */ __pyx_k_tuple_158 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_158)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_158); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_158)); __pyx_k_codeobj_159 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_158, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__size, 184, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_159)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":337 * * """ * def __new__(cls, shape, dtype=float, buffer=None, offset=0, # <<<<<<<<<<<<<< * strides=None, order=None, base=None): * if base is None and not should_distribute(shape): */ __pyx_k_tuple_162 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__cls), ((PyObject *)__pyx_n_s__shape), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__buffer), ((PyObject *)__pyx_n_s__offset), ((PyObject *)__pyx_n_s__strides), ((PyObject *)__pyx_n_s__order), ((PyObject *)__pyx_n_s__base)); if (unlikely(!__pyx_k_tuple_162)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_162); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_162)); __pyx_k_codeobj_163 = (PyObject*)__Pyx_PyCode_New(8, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_162, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____new__, 337, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_163)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":343 * return super(ndarray, cls).__new__(cls) * * def __init__(self, shape, dtype=float, buffer=None, offset=0, # <<<<<<<<<<<<<< * strides=None, order=None, base=None): * shape = tuplify(shape) */ __pyx_k_tuple_165 = PyTuple_Pack(13, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__shape), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__buffer), ((PyObject *)__pyx_n_s__offset), ((PyObject *)__pyx_n_s__strides), ((PyObject *)__pyx_n_s__order), ((PyObject *)__pyx_n_s__base), ((PyObject *)__pyx_n_s__dtype_), ((PyObject *)__pyx_n_s__gatype), ((PyObject *)__pyx_n_s__local), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__size)); if (unlikely(!__pyx_k_tuple_165)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_165); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_165)); __pyx_k_codeobj_166 = (PyObject*)__Pyx_PyCode_New(8, 0, 13, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_165, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____init__, 343, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_166)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":405 * self._strides = [size*self._strides[0]] + self._strides * * def __del__(self): # <<<<<<<<<<<<<< * if self._base is None: * if ga.initialized(): */ __pyx_k_tuple_168 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__shape)); if (unlikely(!__pyx_k_tuple_168)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_168); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_168)); __pyx_k_codeobj_169 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_168, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____del__, 405, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_169)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":417 * ### ndarray methods added for Global Arrays * ################################################################ * def distribution(self): # <<<<<<<<<<<<<< * """Return the bounds of the distribution. * */ __pyx_k_tuple_171 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_171)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_171); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_171)); __pyx_k_codeobj_172 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_171, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__distribution, 417, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_172)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":428 * return ga.distribution(self.handle) * * def owns(self): # <<<<<<<<<<<<<< * """Return True if this process owns some of the data. * */ __pyx_k_tuple_174 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi)); if (unlikely(!__pyx_k_tuple_174)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_174); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_174)); __pyx_k_codeobj_175 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_174, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__owns, 428, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_175)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":437 * return np.all(hi>=0) * * def access(self, global_slice=None): # <<<<<<<<<<<<<< * """Access the local array. Return None if no data is owned. * */ __pyx_k_tuple_177 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__global_slice), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__b), ((PyObject *)__pyx_n_s__fixed_slice), ((PyObject *)__pyx_n_s__c), ((PyObject *)__pyx_n_s__d)); if (unlikely(!__pyx_k_tuple_177)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_177); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_177)); __pyx_k_codeobj_178 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_177, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__access, 437, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_178)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_179 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_179)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_179); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_179)); /* "ga4py/gain/core.pyx":466 * return d * * def get(self, key=None): # <<<<<<<<<<<<<< * """Similar to the __getitem__ built-in, but one-sided (not collective.) * */ __pyx_k_tuple_181 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key), ((PyObject *)__pyx_n_s__global_slice), ((PyObject *)__pyx_n_s___lo), ((PyObject *)__pyx_n_s___hi), ((PyObject *)__pyx_n_s___skip), ((PyObject *)__pyx_n_s__adjust), ((PyObject *)__pyx_n_s__need_strided), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_181)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_181); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_181)); __pyx_k_codeobj_182 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_181, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__get, 466, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_182)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_183 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_183)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_183); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_183)); /* "ga4py/gain/core.pyx":502 * return ret * * def allget(self, key=None): # <<<<<<<<<<<<<< * """Like get(), but when all processes need the same piece. * */ __pyx_k_tuple_185 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_185)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_185); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_185)); __pyx_k_codeobj_186 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_185, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__allget, 502, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_186)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_187 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_187)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_187); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_187)); /* "ga4py/gain/core.pyx":516 * return comm().bcast() * * def gather(self, i): # <<<<<<<<<<<<<< * """Use ga.gather() but modify the indicies `i' based on global_slice. * */ __pyx_k_tuple_189 = PyTuple_Pack(12, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__step), ((PyObject *)__pyx_n_s__start), ((PyObject *)__pyx_n_s__gs), ((PyObject *)__pyx_n_s__new_i), ((PyObject *)__pyx_n_s__columns), ((PyObject *)__pyx_n_s__column_iter), ((PyObject *)__pyx_n_s__new_columns), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__new_column), ((PyObject *)__pyx_n_s__col)); if (unlikely(!__pyx_k_tuple_189)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_189); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_189)); __pyx_k_codeobj_190 = (PyObject*)__Pyx_PyCode_New(2, 0, 12, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_189, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__gather, 516, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_190)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":571 * return ga.gather(self.handle, new_i) * * def release(self): # <<<<<<<<<<<<<< * ga.release(self.handle) * */ __pyx_k_tuple_192 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_192)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_192); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_192)); __pyx_k_codeobj_193 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_192, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__release, 571, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_193)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":574 * ga.release(self.handle) * * def release_update(self): # <<<<<<<<<<<<<< * ga.release_update(self.handle) * */ __pyx_k_tuple_195 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_195)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_195); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_195)); __pyx_k_codeobj_196 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_195, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__release_update, 574, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_196)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":581 * ################################################################ * * def _get_T(self): # <<<<<<<<<<<<<< * return self.transpose() * T = property(_get_T) */ __pyx_k_tuple_198 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_198)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_198); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_198)); __pyx_k_codeobj_199 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_198, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_T, 581, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_199)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":585 * T = property(_get_T) * * def _get_data(self): # <<<<<<<<<<<<<< * a = self.access() * if a is not None: */ __pyx_k_tuple_201 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_201)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_201); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_201)); __pyx_k_codeobj_202 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_201, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_data, 585, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_202)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":592 * data = property(_get_data) * * def _get_dtype(self): # <<<<<<<<<<<<<< * return self._dtype * dtype = property(_get_dtype) */ __pyx_k_tuple_204 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_204)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_204); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_204)); __pyx_k_codeobj_205 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_204, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_dtype, 592, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_205)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":596 * dtype = property(_get_dtype) * * def _get_flags(self): # <<<<<<<<<<<<<< * return self._flags * flags = property(_get_flags) */ __pyx_k_tuple_207 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_207)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_207); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_207)); __pyx_k_codeobj_208 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_207, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_flags, 596, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_208)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":600 * flags = property(_get_flags) * * def _get_flat(self): # <<<<<<<<<<<<<< * return flatiter(self) * def _set_flat(self, value): */ __pyx_k_tuple_210 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_210)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_210); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_210)); __pyx_k_codeobj_211 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_210, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_flat, 600, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_211)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":602 * def _get_flat(self): * return flatiter(self) * def _set_flat(self, value): # <<<<<<<<<<<<<< * a = flatiter(self) * a[:] = value */ __pyx_k_tuple_213 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__value), ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_213)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_213); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_213)); __pyx_k_codeobj_214 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_213, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___set_flat, 602, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_214)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":607 * flat = property(_get_flat,_set_flat) * * def _get_imag(self): # <<<<<<<<<<<<<< * if self._dtype.kind != 'c': * return zeros(self.shape, self.dtype) */ __pyx_k_tuple_216 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_216)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_216); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_216)); __pyx_k_codeobj_217 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_216, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_imag, 607, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_217)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":615 * ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) * return ret * def _set_imag(self, value): # <<<<<<<<<<<<<< * if self._dtype.kind != 'c': * raise TypeError, "array does not have imaginary part to set" */ __pyx_k_tuple_219 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__value)); if (unlikely(!__pyx_k_tuple_219)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_219); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_219)); __pyx_k_codeobj_220 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_219, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___set_imag, 615, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_220)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":622 * imag = property(_get_imag,_set_imag) * * def _get_real(self): # <<<<<<<<<<<<<< * if self._dtype.kind != 'c': * return self */ __pyx_k_tuple_222 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_222)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_222); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_222)); __pyx_k_codeobj_223 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_222, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_real, 622, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_223)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":630 * ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) * return ret * def _set_real(self, value): # <<<<<<<<<<<<<< * self._get_real()[:] = value * real = property(_get_real,_set_real) */ __pyx_k_tuple_225 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__value)); if (unlikely(!__pyx_k_tuple_225)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_225); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_225)); __pyx_k_codeobj_226 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_225, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___set_real, 630, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_226)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":634 * real = property(_get_real,_set_real) * * def _get_size(self): # <<<<<<<<<<<<<< * return reduce(lambda x,y: x*y, self.shape, 1) * size = property(_get_size) */ __pyx_k_tuple_228 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_228)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_228); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_228)); __pyx_k_codeobj_229 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_228, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_size, 634, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_229)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":638 * size = property(_get_size) * * def _get_itemsize(self): # <<<<<<<<<<<<<< * return self._dtype.itemsize * itemsize = property(_get_itemsize) */ __pyx_k_tuple_231 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_231)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_231); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_231)); __pyx_k_codeobj_232 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_231, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_itemsize, 638, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_232)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":642 * itemsize = property(_get_itemsize) * * def _get_nbytes(self): # <<<<<<<<<<<<<< * return self.itemsize * self.size * nbytes = property(_get_nbytes) */ __pyx_k_tuple_234 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_234)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 642; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_234); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_234)); __pyx_k_codeobj_235 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_234, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_nbytes, 642, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_235)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 642; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":646 * nbytes = property(_get_nbytes) * * def _get_ndim(self): # <<<<<<<<<<<<<< * return len(self.shape) * ndim = property(_get_ndim) */ __pyx_k_tuple_237 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_237)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_237); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_237)); __pyx_k_codeobj_238 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_237, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_ndim, 646, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_238)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":650 * ndim = property(_get_ndim) * * def _get_shape(self): # <<<<<<<<<<<<<< * return self.global_slice.shape * def _set_shape(self, value): */ __pyx_k_tuple_240 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_240)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_240); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_240)); __pyx_k_codeobj_241 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_240, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_shape, 650, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_241)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":652 * def _get_shape(self): * return self.global_slice.shape * def _set_shape(self, value): # <<<<<<<<<<<<<< * if self.base is None: * # we can change the underlying GA */ __pyx_k_tuple_243 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__value), ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_243)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_243); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_243)); __pyx_k_codeobj_244 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_243, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___set_shape, 652, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_244)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":666 * shape = property(_get_shape, _set_shape) * * def _get_strides(self): # <<<<<<<<<<<<<< * strides = [self.itemsize] * for size in self.shape[-1:0:-1]: */ __pyx_k_tuple_246 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__strides), ((PyObject *)__pyx_n_s__size)); if (unlikely(!__pyx_k_tuple_246)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_246); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_246)); __pyx_k_codeobj_247 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_246, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_strides, 666, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_247)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":673 * strides = property(_get_strides) * * def _get_ctypes(self): # <<<<<<<<<<<<<< * raise NotImplementedError, "TODO" * ctypes = property(_get_ctypes) */ __pyx_k_tuple_249 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_249)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_249); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_249)); __pyx_k_codeobj_250 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_249, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_ctypes, 673, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_250)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":677 * ctypes = property(_get_ctypes) * * def _get_base(self): # <<<<<<<<<<<<<< * return self._base * base = property(_get_base) */ __pyx_k_tuple_252 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_252)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 677; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_252); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_252)); __pyx_k_codeobj_253 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_252, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_base, 677, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_253)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 677; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":684 * ### ndarray methods * ################################################################ * def all(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Returns True if all elements evaluate to True. * */ __pyx_k_tuple_255 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_255)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 684; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_255); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_255)); __pyx_k_codeobj_256 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_255, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__all, 684, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_256)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 684; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_257 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_257)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 684; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_257); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_257)); /* "ga4py/gain/core.pyx":696 * raise NotImplementedError * * def any(self, axis=None, out=None): # <<<<<<<<<<<<<< * """ Returns True if any of the elements of `a` evaluate to True. * */ __pyx_k_tuple_259 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_259)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_259); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_259)); __pyx_k_codeobj_260 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_259, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__any, 696, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_260)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_261 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_261)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_261); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_261)); /* "ga4py/gain/core.pyx":708 * raise NotImplementedError * * def argmax(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Return indices of the maximum values along the given axis. * */ __pyx_k_tuple_263 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_263)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_263); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_263)); __pyx_k_codeobj_264 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_263, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__argmax, 708, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_264)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_265 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_265)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_265); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_265)); /* "ga4py/gain/core.pyx":720 * raise NotImplementedError * * def argmin(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Return indices of the minimum values along the given axis of `a`. * */ __pyx_k_tuple_267 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_267)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_267); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_267)); __pyx_k_codeobj_268 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_267, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__argmin, 720, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_268)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_269 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_269)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_269); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_269)); /* "ga4py/gain/core.pyx":732 * raise NotImplementedError * * def argsort(self, axis=-1, kind='quicksort', order=None): # <<<<<<<<<<<<<< * """Returns the indices that would sort this array. * */ __pyx_k_tuple_271 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__kind), ((PyObject *)__pyx_n_s__order)); if (unlikely(!__pyx_k_tuple_271)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_271); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_271)); __pyx_k_codeobj_272 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_271, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__argsort, 732, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_272)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_273 = PyTuple_Pack(3, ((PyObject *)__pyx_int_neg_1), ((PyObject *)((PyObject*)__pyx_n_s__quicksort)), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_273)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_273); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_273)); /* "ga4py/gain/core.pyx":744 * raise NotImplementedError * * def astype(self, t): # <<<<<<<<<<<<<< * """Copy of the array, cast to a specified type. * */ __pyx_k_tuple_275 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__t), ((PyObject *)__pyx_n_s__the_copy), ((PyObject *)__pyx_n_s__local), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi)); if (unlikely(!__pyx_k_tuple_275)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_275); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_275)); __pyx_k_codeobj_276 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_275, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__astype, 744, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_276)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":775 * return the_copy * * def byteswap(self, inplace=False): # <<<<<<<<<<<<<< * """Swap the bytes of the array elements * */ __pyx_k_tuple_278 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__inplace)); if (unlikely(!__pyx_k_tuple_278)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_278); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_278)); __pyx_k_codeobj_279 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_278, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__byteswap, 775, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_279)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":812 * raise NotImplementedError * * def choose(self, choices, out=None, mode='raise'): # <<<<<<<<<<<<<< * """Use an index array to construct a new array from a set of choices. * */ __pyx_k_tuple_281 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__choices), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__mode)); if (unlikely(!__pyx_k_tuple_281)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_281); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_281)); __pyx_k_codeobj_282 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_281, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__choose, 812, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_282)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_283 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)((PyObject*)__pyx_n_s__raise))); if (unlikely(!__pyx_k_tuple_283)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_283); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_283)); /* "ga4py/gain/core.pyx":824 * raise NotImplementedError * * def clip(self, a_min, a_max, out=None): # <<<<<<<<<<<<<< * """Return an array whose values are limited to ``[a_min, a_max]``. * */ __pyx_k_tuple_285 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__a_min), ((PyObject *)__pyx_n_s__a_max), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_285)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_285); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_285)); __pyx_k_codeobj_286 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_285, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__clip, 824, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_286)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_287 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_287)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_287); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_287)); /* "ga4py/gain/core.pyx":836 * raise NotImplementedError * * def compress(self, condition, axis=None, out=None): # <<<<<<<<<<<<<< * """Return selected slices of this array along given axis. * */ __pyx_k_tuple_289 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__condition), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_289)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_289); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_289)); __pyx_k_codeobj_290 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_289, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__compress, 836, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_290)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_291 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_291)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_291); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_291)); /* "ga4py/gain/core.pyx":848 * return NotImplementedError * * def conj(self): # <<<<<<<<<<<<<< * """Complex-conjugate all elements. * */ __pyx_k_tuple_293 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_293)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 848; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_293); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_293)); __pyx_k_codeobj_294 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_293, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__conj, 848, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_294)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 848; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":860 * raise NotImplementedError * * def conjugate(self): # <<<<<<<<<<<<<< * """Return the complex conjugate, element-wise. * */ __pyx_k_tuple_296 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_296)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 860; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_296); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_296)); __pyx_k_codeobj_297 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_296, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__conjugate, 860, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_297)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 860; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":872 * raise NotImplementedError * * def copy(self, order='C'): # <<<<<<<<<<<<<< * """Return a copy of the array. * */ __pyx_k_tuple_299 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__order), ((PyObject *)__pyx_n_s__the_copy), ((PyObject *)__pyx_n_s__local), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi)); if (unlikely(!__pyx_k_tuple_299)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_299); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_299)); __pyx_k_codeobj_300 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_299, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__copy, 872, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_300)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_301 = PyTuple_Pack(1, ((PyObject *)((PyObject*)__pyx_n_s__C))); if (unlikely(!__pyx_k_tuple_301)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_301); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_301)); /* "ga4py/gain/core.pyx":916 * return the_copy * * def cumprod(self, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the cumulative product of the elements along the given axis. * */ __pyx_k_tuple_303 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_303)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_303); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_303)); __pyx_k_codeobj_304 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_303, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__cumprod, 916, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_304)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_305 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_305)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_305); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_305)); /* "ga4py/gain/core.pyx":928 * raise NotImplementedError * * def cumsum(self, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the cumulative sum of the elements along the given axis. * */ __pyx_k_tuple_307 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_307)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_307); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_307)); __pyx_k_codeobj_308 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_307, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__cumsum, 928, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_308)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_309 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_309)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_309); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_309)); /* "ga4py/gain/core.pyx":940 * raise NotImplementedError * * def diagonal(self, offset=0, axis1=0, axis2=1): # <<<<<<<<<<<<<< * """Return specified diagonals. * */ __pyx_k_tuple_311 = PyTuple_Pack(12, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__offset), ((PyObject *)__pyx_n_s__axis1), ((PyObject *)__pyx_n_s__axis2), ((PyObject *)__pyx_n_s__nrow), ((PyObject *)__pyx_n_s__ncol), ((PyObject *)__pyx_n_s__size), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__npout), ((PyObject *)__pyx_n_s__indices), ((PyObject *)__pyx_n_s__my_range), ((PyObject *)__pyx_n_s__my_indices)); if (unlikely(!__pyx_k_tuple_311)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 940; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_311); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_311)); __pyx_k_codeobj_312 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_311, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__diagonal, 940, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_312)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 940; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_313 = PyTuple_Pack(3, ((PyObject *)__pyx_int_0), ((PyObject *)__pyx_int_0), ((PyObject *)__pyx_int_1)); if (unlikely(!__pyx_k_tuple_313)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 940; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_313); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_313)); /* "ga4py/gain/core.pyx":978 * return out * * def dot(self, b, out=None): # <<<<<<<<<<<<<< * """a.dot(b, out=None) * */ __pyx_k_tuple_315 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__b), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_315)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 978; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_315); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_315)); __pyx_k_codeobj_316 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_315, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__dot, 978, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_316)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 978; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_317 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_317)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 978; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_317); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_317)); /* "ga4py/gain/core.pyx":1006 * raise NotImplementedError * * def dump(self, file): # <<<<<<<<<<<<<< * """Dump a pickle of the array to the specified file. * */ __pyx_k_tuple_319 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__file)); if (unlikely(!__pyx_k_tuple_319)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1006; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_319); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_319)); __pyx_k_codeobj_320 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_319, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__dump, 1006, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_320)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1006; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":1019 * raise NotImplementedError * * def dumps(self): # <<<<<<<<<<<<<< * """Returns the pickle of the array as a string. * */ __pyx_k_tuple_322 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_322)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_322); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_322)); __pyx_k_codeobj_323 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_322, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__dumps, 1019, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_323)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":1031 * raise NotImplementedError * * def fill(self, value): # <<<<<<<<<<<<<< * """Fill the array with a scalar value. * */ __pyx_k_tuple_325 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__value), ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_325)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_325); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_325)); __pyx_k_codeobj_326 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_325, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__fill, 1031, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_326)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":1056 * self.release_update() * * def flatten(self, order='C'): # <<<<<<<<<<<<<< * """Return a copy of the array collapsed into one dimension. * */ __pyx_k_tuple_328 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__order)); if (unlikely(!__pyx_k_tuple_328)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1056; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_328); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_328)); __pyx_k_codeobj_329 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_328, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__flatten, 1056, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_329)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1056; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_330 = PyTuple_Pack(1, ((PyObject *)((PyObject*)__pyx_n_s__C))); if (unlikely(!__pyx_k_tuple_330)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1056; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_330); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_330)); /* "ga4py/gain/core.pyx":1086 * return self.reshape(self.size) * * def getfield(self, dtype, offset): # <<<<<<<<<<<<<< * """Returns a field of the given array as a certain type. * */ __pyx_k_tuple_332 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__offset)); if (unlikely(!__pyx_k_tuple_332)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_332); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_332)); __pyx_k_codeobj_333 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_332, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__getfield, 1086, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_333)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":1140 * raise NotImplementedError * * def item(self, *args): # <<<<<<<<<<<<<< * """Copy an element of an array to a standard Python scalar and return it. * */ __pyx_k_tuple_335 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__args)); if (unlikely(!__pyx_k_tuple_335)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_335); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_335)); __pyx_k_codeobj_336 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_335, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__item, 1140, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_336)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":1195 * raise NotImplementedError * * def itemset(self, *args): # <<<<<<<<<<<<<< * """Insert scalar into an array (scalar is cast to array's dtype, if possible) * */ __pyx_k_tuple_338 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__args)); if (unlikely(!__pyx_k_tuple_338)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_338); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_338)); __pyx_k_codeobj_339 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_338, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__itemset, 1195, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_339)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":1238 * raise NotImplementedError * * def max(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the maximum along a given axis. * */ __pyx_k_tuple_341 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_341)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1238; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_341); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_341)); __pyx_k_codeobj_342 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_341, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__max, 1238, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_342)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1238; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_343 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_343)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1238; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_343); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_343)); /* "ga4py/gain/core.pyx":1269 * return maximum.reduce(self, axis, out) * * def mean(self, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Returns the average of the array elements along given axis. * */ __pyx_k_tuple_345 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_345)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_345); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_345)); __pyx_k_codeobj_346 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_345, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__mean, 1269, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_346)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_347 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_347)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_347); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_347)); /* "ga4py/gain/core.pyx":1281 * raise NotImplementedError * * def min(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the minimum along a given axis. * */ __pyx_k_tuple_349 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_349)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_349); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_349)); __pyx_k_codeobj_350 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_349, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__min, 1281, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_350)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_351 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_351)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_351); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_351)); /* "ga4py/gain/core.pyx":1312 * return minimum.reduce(self, axis, out) * * def newbyteorder(self, new_order='S'): # <<<<<<<<<<<<<< * """Return the array with the same data viewed with a different byte order. * */ __pyx_k_tuple_353 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__new_order)); if (unlikely(!__pyx_k_tuple_353)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_353); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_353)); __pyx_k_codeobj_354 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_353, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__newbyteorder, 1312, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_354)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_355 = PyTuple_Pack(1, ((PyObject *)((PyObject*)__pyx_n_s__S))); if (unlikely(!__pyx_k_tuple_355)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_355); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_355)); /* "ga4py/gain/core.pyx":1351 * raise NotImplementedError * * def nonzero(self): # <<<<<<<<<<<<<< * """Return the indices of the elements that are non-zero. * */ __pyx_k_tuple_357 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_357)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_357); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_357)); __pyx_k_codeobj_358 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_357, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__nonzero, 1351, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_358)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":1363 * raise NotImplementedError * * def prod(self, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the product of the array elements over the given axis * */ __pyx_k_tuple_360 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_360)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_360); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_360)); __pyx_k_codeobj_361 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_360, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__prod, 1363, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_361)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_362 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_362)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_362); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_362)); /* "ga4py/gain/core.pyx":1375 * raise NotImplementedError * * def ptp(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Peak to peak (maximum - minimum) value along a given axis. * */ __pyx_k_tuple_364 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_364)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_364); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_364)); __pyx_k_codeobj_365 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_364, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__ptp, 1375, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_365)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_366 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_366)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_366); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_366)); /* "ga4py/gain/core.pyx":1387 * raise NotImplementedError * * def put(self, indices, values, mode='raise'): # <<<<<<<<<<<<<< * """Set ``a.flat[n] = values[n]`` for all `n` in indices. * */ __pyx_k_tuple_368 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__indices), ((PyObject *)__pyx_n_s__values), ((PyObject *)__pyx_n_s__mode)); if (unlikely(!__pyx_k_tuple_368)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_368); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_368)); __pyx_k_codeobj_369 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_368, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__put, 1387, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_369)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_370 = PyTuple_Pack(1, ((PyObject *)((PyObject*)__pyx_n_s__raise))); if (unlikely(!__pyx_k_tuple_370)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_370); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_370)); /* "ga4py/gain/core.pyx":1399 * raise NotImplementedError * * def ravel(self, order=None): # <<<<<<<<<<<<<< * """Return a flattened array. * */ __pyx_k_tuple_372 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__order)); if (unlikely(!__pyx_k_tuple_372)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_372); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_372)); __pyx_k_codeobj_373 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_372, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__ravel, 1399, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_373)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_374 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_374)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_374); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_374)); /* "ga4py/gain/core.pyx":1413 * raise NotImplementedError * * def repeat(self, repeats, axis=None): # <<<<<<<<<<<<<< * """Repeat elements of an array. * */ __pyx_k_tuple_376 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__repeats), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_376)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_376); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_376)); __pyx_k_codeobj_377 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_376, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__repeat, 1413, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_377)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_378 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_378)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_378); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_378)); /* "ga4py/gain/core.pyx":1425 * raise NotImplementedError * * def reshape(self, shape, order='C', *args): # <<<<<<<<<<<<<< * """Returns an array containing the same data with a new shape. * */ __pyx_k_tuple_380 = PyTuple_Pack(17, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__shape), ((PyObject *)__pyx_n_s__order), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__count_neg_ones), ((PyObject *)__pyx_n_s__shape_product), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__nda), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__lohi_shape), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__strides), ((PyObject *)__pyx_n_s__size), ((PyObject *)__pyx_n_s__i_flat), ((PyObject *)__pyx_n_s__i_unravel)); if (unlikely(!__pyx_k_tuple_380)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_380); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_380)); __pyx_k_codeobj_381 = (PyObject*)__Pyx_PyCode_New(3, 0, 17, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_380, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__reshape, 1425, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_381)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_382 = PyTuple_Pack(1, ((PyObject *)((PyObject*)__pyx_n_s__C))); if (unlikely(!__pyx_k_tuple_382)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_382); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_382)); /* "ga4py/gain/core.pyx":1470 * return a * * def resize(self, new_shape, refcheck=True): # <<<<<<<<<<<<<< * """Change shape and size of array in-place. * */ __pyx_k_tuple_384 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__new_shape), ((PyObject *)__pyx_n_s__refcheck)); if (unlikely(!__pyx_k_tuple_384)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_384); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_384)); __pyx_k_codeobj_385 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_384, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__resize, 1470, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_385)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":1556 * raise NotImplementedError * * def round(self, decimals=0, out=None): # <<<<<<<<<<<<<< * """Return `a` with each element rounded to the given number of decimals. * */ __pyx_k_tuple_387 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__decimals), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_387)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_387); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_387)); __pyx_k_codeobj_388 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_387, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__round, 1556, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_388)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_389 = PyTuple_Pack(2, ((PyObject *)__pyx_int_0), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_389)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_389); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_389)); /* "ga4py/gain/core.pyx":1568 * raise NotImplementedError * * def searchsorted(self, v, side='left'): # <<<<<<<<<<<<<< * """Find indices where elements of v should be inserted in a to maintain order. * */ __pyx_k_tuple_391 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__v), ((PyObject *)__pyx_n_s__side)); if (unlikely(!__pyx_k_tuple_391)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_391); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_391)); __pyx_k_codeobj_392 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_391, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__searchsorted, 1568, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_392)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_393 = PyTuple_Pack(1, ((PyObject *)((PyObject*)__pyx_n_s__left))); if (unlikely(!__pyx_k_tuple_393)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_393); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_393)); /* "ga4py/gain/core.pyx":1580 * raise NotImplementedError * * def setfield(self, val, dtype, offset=0): # <<<<<<<<<<<<<< * """Put a value into a specified place in a field defined by a data-type. * */ __pyx_k_tuple_395 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__val), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__offset)); if (unlikely(!__pyx_k_tuple_395)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1580; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_395); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_395)); __pyx_k_codeobj_396 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_395, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__setfield, 1580, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_396)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1580; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_397 = PyTuple_Pack(1, ((PyObject *)__pyx_int_0)); if (unlikely(!__pyx_k_tuple_397)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1580; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_397); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_397)); /* "ga4py/gain/core.pyx":1628 * raise NotImplementedError * * def setflags(self, write=None, align=None, uic=None): # <<<<<<<<<<<<<< * """Set array flags WRITEABLE, ALIGNED, and UPDATEIFCOPY, respectively. * */ __pyx_k_tuple_399 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__write), ((PyObject *)__pyx_n_s__align), ((PyObject *)__pyx_n_s__uic)); if (unlikely(!__pyx_k_tuple_399)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_399); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_399)); __pyx_k_codeobj_400 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_399, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__setflags, 1628, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_400)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_401 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_401)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_401); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_401)); /* "ga4py/gain/core.pyx":1697 * raise NotImplementedError * * def sort(self, axis=-1, kind='quicksort', order=None): # <<<<<<<<<<<<<< * """Sort an array, in-place. * */ __pyx_k_tuple_403 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__kind), ((PyObject *)__pyx_n_s__order)); if (unlikely(!__pyx_k_tuple_403)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_403); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_403)); __pyx_k_codeobj_404 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_403, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__sort, 1697, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_404)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_405 = PyTuple_Pack(3, ((PyObject *)__pyx_int_neg_1), ((PyObject *)((PyObject*)__pyx_n_s__quicksort)), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_405)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_405); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_405)); /* "ga4py/gain/core.pyx":1747 * raise NotImplementedError * * def squeeze(self): # <<<<<<<<<<<<<< * """Remove single-dimensional entries from the shape of `a`. * */ __pyx_k_tuple_407 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_407)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1747; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_407); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_407)); __pyx_k_codeobj_408 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_407, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__squeeze, 1747, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_408)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1747; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":1759 * raise NotImplementedError * * def std(self, axis=None, dtype=None, out=None, ddof=0): # <<<<<<<<<<<<<< * """Remove single-dimensional entries from the shape of `a`. * */ __pyx_k_tuple_410 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__ddof)); if (unlikely(!__pyx_k_tuple_410)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1759; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_410); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_410)); __pyx_k_codeobj_411 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_410, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__std, 1759, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_411)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1759; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_412 = PyTuple_Pack(4, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)__pyx_int_0)); if (unlikely(!__pyx_k_tuple_412)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1759; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_412); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_412)); /* "ga4py/gain/core.pyx":1771 * raise NotImplementedError * * def sum(self, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the sum of the array elements over the given axis. * */ __pyx_k_tuple_414 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__local), ((PyObject *)__pyx_n_s__value)); if (unlikely(!__pyx_k_tuple_414)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_414); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_414)); __pyx_k_codeobj_415 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_414, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__sum, 1771, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_415)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_416 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_416)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_416); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_416)); /* "ga4py/gain/core.pyx":1792 * raise NotImplementedError * * def swapaxes(self, axis1, axis2): # <<<<<<<<<<<<<< * """Return a view of the array with `axis1` and `axis2` interchanged. * */ __pyx_k_tuple_418 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis1), ((PyObject *)__pyx_n_s__axis2)); if (unlikely(!__pyx_k_tuple_418)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1792; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_418); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_418)); __pyx_k_codeobj_419 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_418, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__swapaxes, 1792, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_419)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1792; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":1804 * raise NotImplementedError * * def take(self, indices, axis=None, out=None, mode='raise'): # <<<<<<<<<<<<<< * """Return an array formed from the elements of `a` at the given indices. * */ __pyx_k_tuple_421 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__indices), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__mode)); if (unlikely(!__pyx_k_tuple_421)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1804; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_421); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_421)); __pyx_k_codeobj_422 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_421, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__take, 1804, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_422)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1804; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_423 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)((PyObject*)__pyx_n_s__raise))); if (unlikely(!__pyx_k_tuple_423)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1804; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_423); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_423)); /* "ga4py/gain/core.pyx":1816 * raise NotImplementedError * * def tofile(self, fid, sep="", format="%s"): # <<<<<<<<<<<<<< * """Write array to a file as text or binary (default). * */ __pyx_k_tuple_425 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__fid), ((PyObject *)__pyx_n_s__sep), ((PyObject *)__pyx_n_s__format)); if (unlikely(!__pyx_k_tuple_425)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_425); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_425)); __pyx_k_codeobj_426 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_425, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__tofile, 1816, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_426)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_427 = PyTuple_Pack(2, ((PyObject *)((PyObject*)__pyx_kp_s_45)), ((PyObject *)((PyObject*)__pyx_kp_s_49))); if (unlikely(!__pyx_k_tuple_427)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_427); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_427)); /* "ga4py/gain/core.pyx":1848 * raise NotImplementedError * * def tolist(self): # <<<<<<<<<<<<<< * """Return the array as a (possibly nested) list. * */ __pyx_k_tuple_429 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_429)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1848; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_429); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_429)); __pyx_k_codeobj_430 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_429, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__tolist, 1848, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_430)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1848; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":1881 * raise NotImplementedError * * def tostring(self, order='C'): # <<<<<<<<<<<<<< * """Construct a Python string containing the raw data bytes in the array. * */ __pyx_k_tuple_432 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__order)); if (unlikely(!__pyx_k_tuple_432)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_432); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_432)); __pyx_k_codeobj_433 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_432, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__tostring, 1881, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_433)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_434 = PyTuple_Pack(1, ((PyObject *)((PyObject*)__pyx_n_s__C))); if (unlikely(!__pyx_k_tuple_434)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_434); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_434)); /* "ga4py/gain/core.pyx":1914 * raise NotImplementedError * * def trace(self, offset=0, axis1=0, axis2=1, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the sum along diagonals of the array. * */ __pyx_k_tuple_436 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__offset), ((PyObject *)__pyx_n_s__axis1), ((PyObject *)__pyx_n_s__axis2), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_436)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1914; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_436); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_436)); __pyx_k_codeobj_437 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_436, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__trace, 1914, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_437)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1914; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_438 = PyTuple_Pack(5, ((PyObject *)__pyx_int_0), ((PyObject *)__pyx_int_0), ((PyObject *)__pyx_int_1), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_438)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1914; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_438); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_438)); /* "ga4py/gain/core.pyx":1926 * raise NotImplementedError * * def transpose(self, *axes): # <<<<<<<<<<<<<< * """Returns a view of the array with axes transposed. * */ __pyx_k_tuple_440 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axes), ((PyObject *)__pyx_n_s__axes), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_440)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_440); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_440)); __pyx_k_codeobj_441 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_440, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__transpose, 1926, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_441)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":1997 * return ret * * def var(self, axis=None, dtype=None, out=None, ddof=0): # <<<<<<<<<<<<<< * """Returns the variance of the array elements, along given axis. * */ __pyx_k_tuple_443 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__ddof)); if (unlikely(!__pyx_k_tuple_443)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1997; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_443); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_443)); __pyx_k_codeobj_444 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_443, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__var, 1997, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_444)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1997; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_445 = PyTuple_Pack(4, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)__pyx_int_0)); if (unlikely(!__pyx_k_tuple_445)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1997; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_445); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_445)); /* "ga4py/gain/core.pyx":2009 * raise NotImplementedError * * def view(self, dtype=None, type=None): # <<<<<<<<<<<<<< * """New view of array with the same data. * */ __pyx_k_tuple_447 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__type)); if (unlikely(!__pyx_k_tuple_447)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2009; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_447); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_447)); __pyx_k_codeobj_448 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_447, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__view, 2009, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_448)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2009; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_449 = PyTuple_Pack(2, ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_449)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2009; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_449); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_449)); /* "ga4py/gain/core.pyx":2082 * ### ndarray operator overloading * ################################################################ * def __abs__(self): # <<<<<<<<<<<<<< * return abs(self) * */ __pyx_k_tuple_451 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_451)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2082; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_451); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_451)); __pyx_k_codeobj_452 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_451, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____abs__, 2082, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_452)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2082; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2085 * return abs(self) * * def __add__(self, y): # <<<<<<<<<<<<<< * return add(self,y) * */ __pyx_k_tuple_454 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_454)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2085; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_454); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_454)); __pyx_k_codeobj_455 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_454, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____add__, 2085, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_455)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2085; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2088 * return add(self,y) * * def __and__(self, y): # <<<<<<<<<<<<<< * return logical_and(self,y) * */ __pyx_k_tuple_457 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_457)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2088; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_457); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_457)); __pyx_k_codeobj_458 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_457, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____and__, 2088, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_458)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2088; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2091 * return logical_and(self,y) * * def __array__(self, dtype): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_k_tuple_460 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__dtype)); if (unlikely(!__pyx_k_tuple_460)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_460); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_460)); __pyx_k_codeobj_461 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_460, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____array__, 2091, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_461)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2094 * raise NotImplementedError * * def __array_finalize__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_k_tuple_463 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs)); if (unlikely(!__pyx_k_tuple_463)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2094; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_463); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_463)); __pyx_k_codeobj_464 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_463, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____array_finalize__, 2094, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_464)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2094; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2097 * raise NotImplementedError * * def __array_interface__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_k_tuple_466 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs)); if (unlikely(!__pyx_k_tuple_466)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2097; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_466); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_466)); __pyx_k_codeobj_467 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_466, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____array_interface__, 2097, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_467)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2097; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2100 * raise NotImplementedError * * def __array_prepare__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_k_tuple_469 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs)); if (unlikely(!__pyx_k_tuple_469)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_469); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_469)); __pyx_k_codeobj_470 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_469, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____array_prepare__, 2100, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_470)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2103 * raise NotImplementedError * * def __array_priority__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_k_tuple_472 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs)); if (unlikely(!__pyx_k_tuple_472)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_472); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_472)); __pyx_k_codeobj_473 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_472, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____array_priority__, 2103, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_473)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2106 * raise NotImplementedError * * def __array_struct__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_k_tuple_475 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs)); if (unlikely(!__pyx_k_tuple_475)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_475); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_475)); __pyx_k_codeobj_476 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_475, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____array_struct__, 2106, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_476)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2109 * raise NotImplementedError * * def __array_wrap__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_k_tuple_478 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs)); if (unlikely(!__pyx_k_tuple_478)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_478); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_478)); __pyx_k_codeobj_479 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_478, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____array_wrap__, 2109, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_479)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2112 * raise NotImplementedError * * def __contains__(self, y): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_k_tuple_481 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_481)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_481); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_481)); __pyx_k_codeobj_482 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_481, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____contains__, 2112, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_482)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2115 * raise NotImplementedError * * def __copy__(self, order=None): # <<<<<<<<<<<<<< * """Return a copy of the array. * */ __pyx_k_tuple_484 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__order)); if (unlikely(!__pyx_k_tuple_484)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_484); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_484)); __pyx_k_codeobj_485 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_484, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____copy__, 2115, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_485)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_486 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_486)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_486); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_486)); /* "ga4py/gain/core.pyx":2129 * raise NotImplementedError * * def __deepcopy__(self): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_k_tuple_488 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_488)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_488); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_488)); __pyx_k_codeobj_489 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_488, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____deepcopy__, 2129, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_489)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2134 * #def __delattr__ * * def __delitem__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise ValueError, "cannot delete array elements" * */ __pyx_k_tuple_491 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs)); if (unlikely(!__pyx_k_tuple_491)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_491); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_491)); __pyx_k_codeobj_492 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_491, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____delitem__, 2134, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_492)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2139 * #def __delslice__ * * def __div__(self, y): # <<<<<<<<<<<<<< * return divide(self,y) * */ __pyx_k_tuple_494 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_494)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_494); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_494)); __pyx_k_codeobj_495 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_494, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____div__, 2139, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_495)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2142 * return divide(self,y) * * def __divmod__(self, y): # <<<<<<<<<<<<<< * t = mod(self,y) * s = subtract(self,t) */ __pyx_k_tuple_497 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y), ((PyObject *)__pyx_n_s__t), ((PyObject *)__pyx_n_s__s)); if (unlikely(!__pyx_k_tuple_497)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_497); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_497)); __pyx_k_codeobj_498 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_497, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____divmod__, 2142, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_498)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2148 * return s,t * * def __eq__(self, y): # <<<<<<<<<<<<<< * return equal(self,y) * */ __pyx_k_tuple_500 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_500)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_500); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_500)); __pyx_k_codeobj_501 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_500, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____eq__, 2148, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_501)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2151 * return equal(self,y) * * def __float__(self): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_k_tuple_503 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_503)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_503); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_503)); __pyx_k_codeobj_504 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_503, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____float__, 2151, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_504)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2154 * raise NotImplementedError * * def __floordiv__(self,y): # <<<<<<<<<<<<<< * return floor_divide(self,y) * */ __pyx_k_tuple_506 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_506)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_506); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_506)); __pyx_k_codeobj_507 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_506, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____floordiv__, 2154, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_507)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2159 * #def __format__ * * def __ge__(self,y): # <<<<<<<<<<<<<< * return greater_equal(self,y) * */ __pyx_k_tuple_509 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_509)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2159; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_509); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_509)); __pyx_k_codeobj_510 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_509, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____ge__, 2159, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_510)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2159; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2164 * #def __getattribute__ * * def __getitem__(self, key): # <<<<<<<<<<<<<< * # THIS IS A COLLECTIVE OPERATION * if isinstance(key, (str,unicode)): */ __pyx_k_tuple_512 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key), ((PyObject *)__pyx_n_s__fancy), ((PyObject *)__pyx_n_s__arg), ((PyObject *)__pyx_n_s__new_global_slice), ((PyObject *)__pyx_n_s__new_shape), ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_512)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_512); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_512)); __pyx_k_codeobj_513 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_512, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____getitem__, 2164, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_513)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2190 * #def __getslice__ * * def __gt__(self,y): # <<<<<<<<<<<<<< * return greater(self,y) * */ __pyx_k_tuple_515 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_515)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_515); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_515)); __pyx_k_codeobj_516 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_515, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____gt__, 2190, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_516)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2196 * #def __hex__ * * def __iadd__(self,y): # <<<<<<<<<<<<<< * return add(self,y,self) * */ __pyx_k_tuple_518 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_518)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_518); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_518)); __pyx_k_codeobj_519 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_518, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____iadd__, 2196, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_519)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2199 * return add(self,y,self) * * def __iand__(self,y): # <<<<<<<<<<<<<< * return logical_and(self,y,self) * */ __pyx_k_tuple_521 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_521)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_521); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_521)); __pyx_k_codeobj_522 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_521, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____iand__, 2199, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_522)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2202 * return logical_and(self,y,self) * * def __idiv__(self,y): # <<<<<<<<<<<<<< * return divide(self,y,self) * */ __pyx_k_tuple_524 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_524)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_524); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_524)); __pyx_k_codeobj_525 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_524, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____idiv__, 2202, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_525)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2205 * return divide(self,y,self) * * def __ifloordiv__(self,y): # <<<<<<<<<<<<<< * return floor_divide(self,y,self) * */ __pyx_k_tuple_527 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_527)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_527); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_527)); __pyx_k_codeobj_528 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_527, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____ifloordiv__, 2205, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_528)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2208 * return floor_divide(self,y,self) * * def __ilshift__(self,y): # <<<<<<<<<<<<<< * return left_shift(self,y,self) * */ __pyx_k_tuple_530 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_530)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_530); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_530)); __pyx_k_codeobj_531 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_530, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____ilshift__, 2208, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_531)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2211 * return left_shift(self,y,self) * * def __imod__(self,y): # <<<<<<<<<<<<<< * return mod(self,y,self) * */ __pyx_k_tuple_533 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_533)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_533); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_533)); __pyx_k_codeobj_534 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_533, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____imod__, 2211, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_534)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2214 * return mod(self,y,self) * * def __imul__(self,y): # <<<<<<<<<<<<<< * return multiply(self,y,self) * */ __pyx_k_tuple_536 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_536)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_536); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_536)); __pyx_k_codeobj_537 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_536, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____imul__, 2214, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_537)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2219 * #def __index__ * * def __int__(self, *args, **kwargs): # <<<<<<<<<<<<<< * if self.size != 1: * raise TypeError, "only length-1 arrays can be converted to Python scalars" */ __pyx_k_tuple_539 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs)); if (unlikely(!__pyx_k_tuple_539)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_539); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_539)); __pyx_k_codeobj_540 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_539, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____int__, 2219, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_540)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2224 * return np.dtype(np.int32).type(self.allget()) * * def __invert__(self): # <<<<<<<<<<<<<< * return invert(self) * */ __pyx_k_tuple_542 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_542)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2224; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_542); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_542)); __pyx_k_codeobj_543 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_542, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____invert__, 2224, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_543)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2224; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2227 * return invert(self) * * def __ior__(self,y): # <<<<<<<<<<<<<< * return logical_or(self,y,self) * */ __pyx_k_tuple_545 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_545)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_545); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_545)); __pyx_k_codeobj_546 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_545, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____ior__, 2227, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_546)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2230 * return logical_or(self,y,self) * * def __ipow__(self,y): # <<<<<<<<<<<<<< * return power(self,y,self) * */ __pyx_k_tuple_548 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_548)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_548); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_548)); __pyx_k_codeobj_549 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_548, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____ipow__, 2230, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_549)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2233 * return power(self,y,self) * * def __irshift__(self,y): # <<<<<<<<<<<<<< * return right_shift(self,y,self) * */ __pyx_k_tuple_551 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_551)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_551); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_551)); __pyx_k_codeobj_552 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_551, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____irshift__, 2233, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_552)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2236 * return right_shift(self,y,self) * * def __isub__(self,y): # <<<<<<<<<<<<<< * return subtract(self,y,self) * */ __pyx_k_tuple_554 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_554)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2236; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_554); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_554)); __pyx_k_codeobj_555 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_554, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____isub__, 2236, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_555)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2236; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2239 * return subtract(self,y,self) * * def __iter__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_k_tuple_557 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs)); if (unlikely(!__pyx_k_tuple_557)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2239; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_557); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_557)); __pyx_k_codeobj_558 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_557, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____iter__, 2239, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_558)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2239; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2242 * raise NotImplementedError * * def __itruediv__(self,y): # <<<<<<<<<<<<<< * return true_divide(self,y,self) * */ __pyx_k_tuple_560 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_560)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_560); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_560)); __pyx_k_codeobj_561 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_560, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____itruediv__, 2242, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_561)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2245 * return true_divide(self,y,self) * * def __ixor__(self,y): # <<<<<<<<<<<<<< * return logical_xor(self,y,self) * */ __pyx_k_tuple_563 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_563)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_563); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_563)); __pyx_k_codeobj_564 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_563, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____ixor__, 2245, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_564)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2248 * return logical_xor(self,y,self) * * def __le__(self,y): # <<<<<<<<<<<<<< * return less_equal(self,y) * */ __pyx_k_tuple_566 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_566)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_566); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_566)); __pyx_k_codeobj_567 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_566, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____le__, 2248, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_567)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2251 * return less_equal(self,y) * * def __len__(self): # <<<<<<<<<<<<<< * return self.shape[0] * */ __pyx_k_tuple_569 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_569)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_569); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_569)); __pyx_k_codeobj_570 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_569, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____len__, 2251, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_570)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2254 * return self.shape[0] * * def __long__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_k_tuple_572 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs)); if (unlikely(!__pyx_k_tuple_572)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_572); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_572)); __pyx_k_codeobj_573 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_572, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____long__, 2254, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_573)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2257 * raise NotImplementedError * * def __lshift__(self,y): # <<<<<<<<<<<<<< * return left_shift(self,y) * */ __pyx_k_tuple_575 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_575)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_575); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_575)); __pyx_k_codeobj_576 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_575, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____lshift__, 2257, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_576)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2260 * return left_shift(self,y) * * def __lt__(self,y): # <<<<<<<<<<<<<< * return less(self,y) * */ __pyx_k_tuple_578 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_578)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_578); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_578)); __pyx_k_codeobj_579 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_578, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____lt__, 2260, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_579)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2263 * return less(self,y) * * def __mod__(self,y): # <<<<<<<<<<<<<< * return mod(self,y) * */ __pyx_k_tuple_581 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_581)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2263; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_581); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_581)); __pyx_k_codeobj_582 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_581, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____mod__, 2263, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_582)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2263; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2266 * return mod(self,y) * * def __mul__(self,y): # <<<<<<<<<<<<<< * return multiply(self,y) * */ __pyx_k_tuple_584 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_584)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_584); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_584)); __pyx_k_codeobj_585 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_584, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____mul__, 2266, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_585)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2269 * return multiply(self,y) * * def __ne__(self,y): # <<<<<<<<<<<<<< * return not_equal(self,y) * */ __pyx_k_tuple_587 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_587)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_587); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_587)); __pyx_k_codeobj_588 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_587, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____ne__, 2269, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_588)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2272 * return not_equal(self,y) * * def __neg__(self): # <<<<<<<<<<<<<< * return negative(self) * */ __pyx_k_tuple_590 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_590)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_590); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_590)); __pyx_k_codeobj_591 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_590, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____neg__, 2272, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_591)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2275 * return negative(self) * * def __nonzero__(self): # <<<<<<<<<<<<<< * raise ValueError, ("The truth value of an array with more than one" * " element is ambiguous. Use a.any() or a.all()") */ __pyx_k_tuple_593 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_593)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_593); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_593)); __pyx_k_codeobj_594 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_593, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____nonzero__, 2275, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_594)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2279 * " element is ambiguous. Use a.any() or a.all()") * * def __oct__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_k_tuple_596 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs)); if (unlikely(!__pyx_k_tuple_596)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_596); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_596)); __pyx_k_codeobj_597 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_596, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____oct__, 2279, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_597)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2282 * raise NotImplementedError * * def __or__(self,y): # <<<<<<<<<<<<<< * return logical_or(self,y) * */ __pyx_k_tuple_599 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_599)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_599); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_599)); __pyx_k_codeobj_600 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_599, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____or__, 2282, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_600)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2285 * return logical_or(self,y) * * def __pos__(self): # <<<<<<<<<<<<<< * return self.copy() * */ __pyx_k_tuple_602 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_602)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_602); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_602)); __pyx_k_codeobj_603 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_602, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____pos__, 2285, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_603)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2288 * return self.copy() * * def __pow__(self,y): # <<<<<<<<<<<<<< * return power(self,y) * */ __pyx_k_tuple_605 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_605)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_605); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_605)); __pyx_k_codeobj_606 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_605, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____pow__, 2288, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_606)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2291 * return power(self,y) * * def __radd__(self,y): # <<<<<<<<<<<<<< * return add(y,self) * */ __pyx_k_tuple_608 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_608)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_608); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_608)); __pyx_k_codeobj_609 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_608, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____radd__, 2291, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_609)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2294 * return add(y,self) * * def __rand__(self,y): # <<<<<<<<<<<<<< * return logical_and(y,self) * */ __pyx_k_tuple_611 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_611)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_611); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_611)); __pyx_k_codeobj_612 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_611, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____rand__, 2294, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_612)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2297 * return logical_and(y,self) * * def __rdiv__(self,y): # <<<<<<<<<<<<<< * return divide(y,self) * */ __pyx_k_tuple_614 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_614)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_614); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_614)); __pyx_k_codeobj_615 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_614, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____rdiv__, 2297, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_615)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2300 * return divide(y,self) * * def __rdivmod__(self,y): # <<<<<<<<<<<<<< * t = mod(y,self) * s = subtract(y,t) */ __pyx_k_tuple_617 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y), ((PyObject *)__pyx_n_s__t), ((PyObject *)__pyx_n_s__s)); if (unlikely(!__pyx_k_tuple_617)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_617); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_617)); __pyx_k_codeobj_618 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_617, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____rdivmod__, 2300, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_618)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2306 * return s,t * * def __reduce__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_k_tuple_620 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs)); if (unlikely(!__pyx_k_tuple_620)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_620); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_620)); __pyx_k_codeobj_621 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_620, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____reduce__, 2306, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_621)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2309 * raise NotImplementedError * * def __reduce_ex__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_k_tuple_623 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs)); if (unlikely(!__pyx_k_tuple_623)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2309; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_623); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_623)); __pyx_k_codeobj_624 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_623, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____reduce_ex__, 2309, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_624)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2309; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2312 * raise NotImplementedError * * def __repr__(self): # <<<<<<<<<<<<<< * result = "" * if 0 == me(): */ __pyx_k_tuple_626 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_626)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_626); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_626)); __pyx_k_codeobj_627 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_626, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____repr__, 2312, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_627)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2318 * return result * * def __rfloordiv__(self,y): # <<<<<<<<<<<<<< * return floor_divide(y,self) * */ __pyx_k_tuple_629 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_629)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_629); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_629)); __pyx_k_codeobj_630 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_629, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____rfloordiv__, 2318, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_630)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2321 * return floor_divide(y,self) * * def __rlshift__(self,y): # <<<<<<<<<<<<<< * return left_shift(y,self) * */ __pyx_k_tuple_632 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_632)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_632); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_632)); __pyx_k_codeobj_633 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_632, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____rlshift__, 2321, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_633)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2324 * return left_shift(y,self) * * def __rmod__(self,y): # <<<<<<<<<<<<<< * return mod(y,self) * */ __pyx_k_tuple_635 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_635)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_635); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_635)); __pyx_k_codeobj_636 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_635, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____rmod__, 2324, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_636)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2327 * return mod(y,self) * * def __rmul__(self,y): # <<<<<<<<<<<<<< * return multiply(y,self) * */ __pyx_k_tuple_638 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_638)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_638); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_638)); __pyx_k_codeobj_639 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_638, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____rmul__, 2327, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_639)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2330 * return multiply(y,self) * * def __ror__(self,y): # <<<<<<<<<<<<<< * return logical_or(y,self) * */ __pyx_k_tuple_641 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_641)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_641); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_641)); __pyx_k_codeobj_642 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_641, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____ror__, 2330, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_642)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2333 * return logical_or(y,self) * * def __rpow__(self,y): # <<<<<<<<<<<<<< * return power(y,self) * */ __pyx_k_tuple_644 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_644)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_644); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_644)); __pyx_k_codeobj_645 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_644, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____rpow__, 2333, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_645)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2336 * return power(y,self) * * def __rrshift__(self,y): # <<<<<<<<<<<<<< * return right_shift(y,self) * */ __pyx_k_tuple_647 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_647)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2336; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_647); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_647)); __pyx_k_codeobj_648 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_647, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____rrshift__, 2336, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_648)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2336; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2339 * return right_shift(y,self) * * def __rshift__(self,y): # <<<<<<<<<<<<<< * return right_shift(self,y) * */ __pyx_k_tuple_650 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_650)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2339; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_650); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_650)); __pyx_k_codeobj_651 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_650, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____rshift__, 2339, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_651)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2339; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2342 * return right_shift(self,y) * * def __rsub__(self,y): # <<<<<<<<<<<<<< * return subtract(y,self) * */ __pyx_k_tuple_653 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_653)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_653); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_653)); __pyx_k_codeobj_654 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_653, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____rsub__, 2342, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_654)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2345 * return subtract(y,self) * * def __rtruediv__(self,y): # <<<<<<<<<<<<<< * return true_divide(y,self) * */ __pyx_k_tuple_656 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_656)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_656); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_656)); __pyx_k_codeobj_657 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_656, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____rtruediv__, 2345, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_657)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2348 * return true_divide(y,self) * * def __rxor__(self,y): # <<<<<<<<<<<<<< * return logical_xor(y,self) * */ __pyx_k_tuple_659 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_659)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2348; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_659); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_659)); __pyx_k_codeobj_660 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_659, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____rxor__, 2348, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_660)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2348; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2353 * #def __setattr__ * * def __setitem__(self, key, value): # <<<<<<<<<<<<<< * # THIS IS A COLLECTIVE OPERATION * sync() */ __pyx_k_tuple_662 = PyTuple_Pack(13, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key), ((PyObject *)__pyx_n_s__value), ((PyObject *)__pyx_n_s__fancy), ((PyObject *)__pyx_n_s__arg), ((PyObject *)__pyx_n_s__global_slice), ((PyObject *)__pyx_n_s__new_shape), ((PyObject *)__pyx_n_s__npvalue), ((PyObject *)__pyx_n_s__release_value), ((PyObject *)__pyx_n_s__npself), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_662)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_662); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_662)); __pyx_k_codeobj_663 = (PyObject*)__Pyx_PyCode_New(3, 0, 13, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_662, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____setitem__, 2353, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_663)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2408 * #def __sizeof__ * * def __str__(self): # <<<<<<<<<<<<<< * result = "" * if 0 == me(): */ __pyx_k_tuple_665 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_665)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_665); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_665)); __pyx_k_codeobj_666 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_665, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____str__, 2408, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_666)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2414 * return result * * def __sub__(self,y): # <<<<<<<<<<<<<< * return subtract(self,y) * */ __pyx_k_tuple_668 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_668)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_668); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_668)); __pyx_k_codeobj_669 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_668, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____sub__, 2414, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_669)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2419 * #def __subclasshook__ * * def __truediv__(self,y): # <<<<<<<<<<<<<< * return true_divide(self,y) * */ __pyx_k_tuple_671 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_671)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_671); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_671)); __pyx_k_codeobj_672 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_671, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____truediv__, 2419, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_672)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2422 * return true_divide(self,y) * * def __xor__(self,y): # <<<<<<<<<<<<<< * return logical_xor(self,y) * */ __pyx_k_tuple_674 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_674)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_674); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_674)); __pyx_k_codeobj_675 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_674, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____xor__, 2422, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_675)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2425 * return logical_xor(self,y) * * def _npin_piece_based_on_out(input, out, shape=None): # <<<<<<<<<<<<<< * # opt: same distributions and same slicing * # we can use local data exclusively */ __pyx_k_tuple_678 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__input), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__shape), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_678)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2425; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_678); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_678)); __pyx_k_codeobj_679 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_678, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s_66, 2425, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_679)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2425; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2500 * * """ * def __init__(self, func): # <<<<<<<<<<<<<< * self.func = func * self.__doc__ = func.__doc__ */ __pyx_k_tuple_680 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__func)); if (unlikely(!__pyx_k_tuple_680)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_680); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_680)); __pyx_k_codeobj_681 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_680, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____init__, 2500, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_681)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2504 * self.__doc__ = func.__doc__ * * def _get_identity(self): # <<<<<<<<<<<<<< * return self.func.identity * identity = property(_get_identity) */ __pyx_k_tuple_683 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_683)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2504; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_683); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_683)); __pyx_k_codeobj_684 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_683, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_identity, 2504, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_684)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2504; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2508 * identity = property(_get_identity) * * def _get_nargs(self): # <<<<<<<<<<<<<< * return self.func.nargs * nargs = property(_get_nargs) */ __pyx_k_tuple_686 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_686)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2508; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_686); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_686)); __pyx_k_codeobj_687 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_686, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_nargs, 2508, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_687)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2508; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2512 * nargs = property(_get_nargs) * * def _get_nin(self): # <<<<<<<<<<<<<< * return self.func.nin * nin = property(_get_nin) */ __pyx_k_tuple_689 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_689)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2512; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_689); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_689)); __pyx_k_codeobj_690 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_689, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_nin, 2512, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_690)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2512; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2516 * nin = property(_get_nin) * * def _get_nout(self): # <<<<<<<<<<<<<< * return self.func.nout * nout = property(_get_nout) */ __pyx_k_tuple_692 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_692)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2516; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_692); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_692)); __pyx_k_codeobj_693 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_692, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_nout, 2516, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_693)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2516; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2520 * nout = property(_get_nout) * * def _get_ntypes(self): # <<<<<<<<<<<<<< * return self.func.ntypes * ntypes = property(_get_ntypes) */ __pyx_k_tuple_695 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_695)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_695); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_695)); __pyx_k_codeobj_696 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_695, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_ntypes, 2520, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_696)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2524 * ntypes = property(_get_ntypes) * * def _get_signature(self): # <<<<<<<<<<<<<< * return self.func.signature * signature = property(_get_signature) */ __pyx_k_tuple_698 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_698)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2524; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_698); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_698)); __pyx_k_codeobj_699 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_698, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_signature, 2524, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_699)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2524; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2528 * signature = property(_get_signature) * * def _get_types(self): # <<<<<<<<<<<<<< * return self.func.types * types = property(_get_types) */ __pyx_k_tuple_701 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_701)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_701); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_701)); __pyx_k_codeobj_702 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_701, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_types, 2528, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_702)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2532 * types = property(_get_types) * * def __call__(self, *args, **kwargs): # <<<<<<<<<<<<<< * if self.func.nin == 1: * return self._unary_call(*args, **kwargs) */ __pyx_k_tuple_704 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs)); if (unlikely(!__pyx_k_tuple_704)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_704); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_704)); __pyx_k_codeobj_705 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_704, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____call__, 2532, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_705)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2540 * raise ValueError, "only unary and binary ufuncs supported" * * def _unary_call(self, input, out=None, *args, **kwargs): # <<<<<<<<<<<<<< * input = asarray(input) * input_shape = get_shape(input) */ __pyx_k_tuple_707 = PyTuple_Pack(18, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__input), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__input_shape), ((PyObject *)__pyx_n_s__input_dtype), ((PyObject *)__pyx_n_s__ignore), ((PyObject *)__pyx_n_s__out_type), ((PyObject *)__pyx_n_s__out_shape), ((PyObject *)__pyx_n_s__npout), ((PyObject *)__pyx_n_s__npin), ((PyObject *)__pyx_n_s__release_in), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_707)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_707); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_707)); __pyx_k_codeobj_708 = (PyObject*)__Pyx_PyCode_New(3, 0, 18, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_707, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___unary_call, 2540, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_708)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_709 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_709)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_709); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_709)); /* "ga4py/gain/core.pyx":2605 * return out * * def _binary_call(self, first, second, out=None, *args, **kwargs): # <<<<<<<<<<<<<< * first_isscalar = np.isscalar(first) * second_isscalar = np.isscalar(second) */ __pyx_k_tuple_711 = PyTuple_Pack(26, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__first), ((PyObject *)__pyx_n_s__second), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__first_isscalar), ((PyObject *)__pyx_n_s__second_isscalar), ((PyObject *)__pyx_n_s__first_dtype), ((PyObject *)__pyx_n_s__second_dtype), ((PyObject *)__pyx_n_s__first_shape), ((PyObject *)__pyx_n_s__second_shape), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__shape), ((PyObject *)__pyx_n_s__npout), ((PyObject *)__pyx_n_s__npfirst), ((PyObject *)__pyx_n_s__release_first), ((PyObject *)__pyx_n_s__npsecond), ((PyObject *)__pyx_n_s__release_second), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__result), ((PyObject *)__pyx_n_s__ndfirst), ((PyObject *)__pyx_n_s__ndsecond)); if (unlikely(!__pyx_k_tuple_711)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2605; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_711); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_711)); __pyx_k_codeobj_712 = (PyObject*)__Pyx_PyCode_New(4, 0, 26, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_711, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___binary_call, 2605, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_712)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2605; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_713 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_713)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2605; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_713); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_713)); /* "ga4py/gain/core.pyx":2707 * return out * * def reduce(self, a, axis=0, dtype=None, out=None, *args, **kwargs): # <<<<<<<<<<<<<< * """reduce(a, axis=0, dtype=None, out=None) * */ __pyx_k_tuple_715 = PyTuple_Pack(33, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__shape), ((PyObject *)__pyx_n_s__nda), ((PyObject *)__pyx_n_s__value), ((PyObject *)__pyx_n_s__everything), ((PyObject *)__pyx_n_s__ndout), ((PyObject *)__pyx_n_s__my_range), ((PyObject *)__pyx_n_s__piece), ((PyObject *)__pyx_n_s__send_requests), ((PyObject *)__pyx_n_s__recv_requests), ((PyObject *)__pyx_n_s__TAG), ((PyObject *)__pyx_n_s__local_out), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__m), ((PyObject *)__pyx_n_s__p), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__rlo), ((PyObject *)__pyx_n_s__rhi), ((PyObject *)__pyx_n_s__buf), ((PyObject *)__pyx_n_s__olo), ((PyObject *)__pyx_n_s__ohi), ((PyObject *)__pyx_n_s__slicer), ((PyObject *)__pyx_n_s__axis_iterator), ((PyObject *)__pyx_n_s__ai)); if (unlikely(!__pyx_k_tuple_715)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_715); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_715)); __pyx_k_codeobj_716 = (PyObject*)__Pyx_PyCode_New(5, 0, 33, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_715, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__reduce, 2707, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_716)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_717 = PyTuple_Pack(3, ((PyObject *)__pyx_int_0), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_717)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_717); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_717)); /* "ga4py/gain/core.pyx":2887 * return out * * def accumulate(self, a, axis=0, dtype=None, out=None, *args, **kwargs): # <<<<<<<<<<<<<< * if self.func.nin != 2: * raise ValueError, "accumulate only supported for binary functions" */ __pyx_k_tuple_719 = PyTuple_Pack(25, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__ndout), ((PyObject *)__pyx_n_s__result), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__piece), ((PyObject *)__pyx_n_s__everything), ((PyObject *)__pyx_n_s__reduction), ((PyObject *)__pyx_n_s__lvalue), ((PyObject *)__pyx_n_s__llo), ((PyObject *)__pyx_n_s__slicer_i), ((PyObject *)__pyx_n_s__slicer_i_1), ((PyObject *)__pyx_n_s__axis_iterator), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__x), ((PyObject *)__pyx_n_s__y), ((PyObject *)__pyx_n_s__z)); if (unlikely(!__pyx_k_tuple_719)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_719); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_719)); __pyx_k_codeobj_720 = (PyObject*)__Pyx_PyCode_New(5, 0, 25, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_719, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__accumulate, 2887, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_720)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_721 = PyTuple_Pack(3, ((PyObject *)__pyx_int_0), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_721)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_721); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_721)); /* "ga4py/gain/core.pyx":2945 * return out * * def outer(self, *args, **kwargs): # <<<<<<<<<<<<<< * if self.func.nin != 2: * raise ValueError, "outer product only supported for binary functions" */ __pyx_k_tuple_723 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs)); if (unlikely(!__pyx_k_tuple_723)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2945; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_723); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_723)); __pyx_k_codeobj_724 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_723, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__outer, 2945, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_724)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2945; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":2950 * raise NotImplementedError * * def reduceat(self, *args, **kwargs): # <<<<<<<<<<<<<< * if self.func.nin != 2: * raise ValueError, "reduceat only supported for binary functions" */ __pyx_k_tuple_726 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__kwargs)); if (unlikely(!__pyx_k_tuple_726)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2950; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_726); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_726)); __pyx_k_codeobj_727 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_726, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__reduceat, 2950, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_727)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2950; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3081 * * """ * def __init__(self, base): # <<<<<<<<<<<<<< * self._base = base * self._index = 0 */ __pyx_k_tuple_730 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__base), ((PyObject *)__pyx_n_s__size), ((PyObject *)__pyx_n_s__size_per_proc), ((PyObject *)__pyx_n_s__remainder)); if (unlikely(!__pyx_k_tuple_730)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3081; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_730); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_730)); __pyx_k_codeobj_731 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_730, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____init__, 3081, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_731)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3081; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3100 * self._hi = [-1] * * def _get_base(self): # <<<<<<<<<<<<<< * return self._base * base = property(_get_base) */ __pyx_k_tuple_733 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_733)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_733); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_733)); __pyx_k_codeobj_734 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_733, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_base, 3100, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_734)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3104 * base = property(_get_base) * * def _get_coords(self): # <<<<<<<<<<<<<< * return np.unravel_index(self._index, self._base.shape) * coords = property(_get_coords) */ __pyx_k_tuple_736 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_736)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_736); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_736)); __pyx_k_codeobj_737 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_736, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_coords, 3104, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_737)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3108 * coords = property(_get_coords) * * def copy(self): # <<<<<<<<<<<<<< * """Get a copy of the iterator as a 1-D array. * */ __pyx_k_tuple_739 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_739)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_739); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_739)); __pyx_k_codeobj_740 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_739, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__copy, 3108, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_740)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3124 * return self._base.flatten() * * def _get_index(self): # <<<<<<<<<<<<<< * return self._index * index = property(_get_index) */ __pyx_k_tuple_742 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_742)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_742); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_742)); __pyx_k_codeobj_743 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_742, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s___get_index, 3124, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_743)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3128 * index = property(_get_index) * * def distribution(self): # <<<<<<<<<<<<<< * return self._lo,self._hi * */ __pyx_k_tuple_745 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_745)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_745); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_745)); __pyx_k_codeobj_746 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_745, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__distribution, 3128, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_746)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3131 * return self._lo,self._hi * * def owns(self): # <<<<<<<<<<<<<< * return self._hi[0]>=0 * */ __pyx_k_tuple_748 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_748)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_748); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_748)); __pyx_k_codeobj_749 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_748, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__owns, 3131, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_749)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3134 * return self._hi[0]>=0 * * def get(self, key=None): # <<<<<<<<<<<<<< * # THIS OPERATION IS ONE-SIDED * # we expect key to be a single value or a slice, but might also be an */ __pyx_k_tuple_751 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key), ((PyObject *)__pyx_n_s__shape), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__index)); if (unlikely(!__pyx_k_tuple_751)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_751); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_751)); __pyx_k_codeobj_752 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_751, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__get, 3134, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_752)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_753 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_753)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_753); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_753)); /* "ga4py/gain/core.pyx":3158 * return self._base.gather(index) * * def allget(self, key=None): # <<<<<<<<<<<<<< * """Like get(), but when all processes need the same piece. * */ __pyx_k_tuple_755 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_755)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_755); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_755)); __pyx_k_codeobj_756 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_755, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__allget, 3158, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_756)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_757 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_757)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_757); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_757)); /* "ga4py/gain/core.pyx":3172 * return comm().bcast() * * def __getitem__(self, key): # <<<<<<<<<<<<<< * # THIS OPERATION IS COLLECTIVE * sync() */ __pyx_k_tuple_759 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key)); if (unlikely(!__pyx_k_tuple_759)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_759); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_759)); __pyx_k_codeobj_760 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_759, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____getitem__, 3172, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_760)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3181 * return self.allget(key) * * def __len__(self): # <<<<<<<<<<<<<< * return self.global_slice.size * */ __pyx_k_tuple_762 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_762)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_762); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_762)); __pyx_k_codeobj_763 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_762, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____len__, 3181, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_763)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3184 * return self.global_slice.size * * def put(self, key, value): # <<<<<<<<<<<<<< * # THIS OPERATION IS ONE-SIDED * # we expect key to be a single value or a slice, but might also be an */ __pyx_k_tuple_765 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key), ((PyObject *)__pyx_n_s__value), ((PyObject *)__pyx_n_s__shape), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__values)); if (unlikely(!__pyx_k_tuple_765)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_765); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_765)); __pyx_k_codeobj_766 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_765, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__put, 3184, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_766)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3214 * ga.scatter(self._base.handle, value, i) * * def __setitem__(self, key, value): # <<<<<<<<<<<<<< * # THIS OPERATION IS COLLECTIVE * sync() */ __pyx_k_tuple_768 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key), ((PyObject *)__pyx_n_s__value), ((PyObject *)__pyx_n_s__global_slice), ((PyObject *)__pyx_n_s__my_range)); if (unlikely(!__pyx_k_tuple_768)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_768); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_768)); __pyx_k_codeobj_769 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_768, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____setitem__, 3214, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_769)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3234 * sync() * * def next(self): # <<<<<<<<<<<<<< * if self._index < self._len: * tmp = self.base[self.coords] */ __pyx_k_tuple_771 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__tmp)); if (unlikely(!__pyx_k_tuple_771)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_771); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_771)); __pyx_k_codeobj_772 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_771, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__next, 3234, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_772)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3242 * raise StopIteration * * def access(self): # <<<<<<<<<<<<<< * """Return a copy of a 'local' portion.""" * if self._values is not None: */ __pyx_k_tuple_774 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_774)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_774); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_774)); __pyx_k_codeobj_775 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_774, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__access, 3242, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_775)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3254 * return self._values * * def release(self): # <<<<<<<<<<<<<< * self._values = None * */ __pyx_k_tuple_777 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_777)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_777); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_777)); __pyx_k_codeobj_778 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_777, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__release, 3254, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_778)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3257 * self._values = None * * def release_update(self): # <<<<<<<<<<<<<< * if self._values is not None: * lo,hi = self.distribution() */ __pyx_k_tuple_780 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_780)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_780); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_780)); __pyx_k_codeobj_781 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_780, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__release_update, 3257, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_781)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3264 * self._values = None * * def __repr__(self): # <<<<<<<<<<<<<< * result = "" * if 0 == me(): */ __pyx_k_tuple_783 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_783)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_783); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_783)); __pyx_k_codeobj_784 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_783, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____repr__, 3264, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_784)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3270 * return result * * def __str__(self): # <<<<<<<<<<<<<< * result = "" * if 0 == me(): */ __pyx_k_tuple_786 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_786)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3270; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_786); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_786)); __pyx_k_codeobj_787 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_786, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s____str__, 3270, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_787)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3270; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3276 * return result * * def zeros(shape, dtype=np.float, order='C'): # <<<<<<<<<<<<<< * """zeros(shape, dtype=float, order='C') * */ __pyx_k_tuple_790 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__shape), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__order), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__buf)); if (unlikely(!__pyx_k_tuple_790)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_790); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_790)); __pyx_k_codeobj_791 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_790, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__zeros, 3276, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_791)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3336 * return a * * def asarray(a, dtype=None, order=None): # <<<<<<<<<<<<<< * if isinstance(a, (ndarray,flatiter,np.ndarray,np.generic)): * # we return ga.gain.ndarray instances for obvious reasons, but we */ __pyx_k_tuple_792 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__order), ((PyObject *)__pyx_n_s__npa), ((PyObject *)__pyx_n_s__g_a)); if (unlikely(!__pyx_k_tuple_792)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3336; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_792); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_792)); __pyx_k_codeobj_793 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_792, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__asarray, 3336, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_793)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3336; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3350 * return npa # possibly a scalar or zero rank array * * def from_ga(g_a): # <<<<<<<<<<<<<< * """Create ndarray from a global array.""" * dtype = ga.inquire_dtype(g_a) */ __pyx_k_tuple_794 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__g_a), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__shape)); if (unlikely(!__pyx_k_tuple_794)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_794); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_794)); __pyx_k_codeobj_795 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_794, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__from_ga, 3350, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_795)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3357 * * cdef extern MPI_Comm GA_MPI_Comm_pgroup_default() * def comm(): # <<<<<<<<<<<<<< * """Returns the MPI_Comm instance associated with the process group.""" * cdef MPI.Comm communicator = MPI.Comm() */ __pyx_k_tuple_796 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__communicator)); if (unlikely(!__pyx_k_tuple_796)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3357; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_796); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_796)); __pyx_k_codeobj_797 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_796, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__comm, 3357, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_797)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3357; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/core.pyx":3378 * # print s * # * def print_sync(what): # <<<<<<<<<<<<<< * #if DEBUG: * if True: */ __pyx_k_tuple_798 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__what), ((PyObject *)__pyx_n_s__proc), ((PyObject *)__pyx_n_s__data)); if (unlikely(!__pyx_k_tuple_798)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_798); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_798)); __pyx_k_codeobj_799 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_798, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_104, __pyx_n_s__print_sync, 3378, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_799)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; __Pyx_RefNannyFinishContext(); return -1; } static int __Pyx_InitGlobals(void) { if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_8 = PyInt_FromLong(8); if (unlikely(!__pyx_int_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_11 = PyInt_FromLong(11); if (unlikely(!__pyx_int_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; return 0; __pyx_L1_error:; return -1; } #if PY_MAJOR_VERSION < 3 PyMODINIT_FUNC initcore(void); /*proto*/ PyMODINIT_FUNC initcore(void) #else PyMODINIT_FUNC PyInit_core(void); /*proto*/ PyMODINIT_FUNC PyInit_core(void) #endif { PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannyDeclarations #if CYTHON_REFNANNY __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); if (!__Pyx_RefNanny) { PyErr_Clear(); __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); if (!__Pyx_RefNanny) Py_FatalError("failed to import 'refnanny' module"); } #endif __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_core(void)", 0); if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #ifdef __Pyx_CyFunction_USED if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif #ifdef __Pyx_FusedFunction_USED if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif #ifdef __Pyx_Generator_USED if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif /*--- Library function declarations ---*/ /*--- Threads initialization code ---*/ #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS #ifdef WITH_THREAD /* Python build with threading support? */ PyEval_InitThreads(); #endif #endif /*--- Module creation code ---*/ #if PY_MAJOR_VERSION < 3 __pyx_m = Py_InitModule4(__Pyx_NAMESTR("core"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); #else __pyx_m = PyModule_Create(&__pyx_moduledef); #endif if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} Py_INCREF(__pyx_d); #if PY_MAJOR_VERSION >= 3 { PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!PyDict_GetItemString(modules, "ga4py.gain.core")) { if (unlikely(PyDict_SetItemString(modules, "ga4py.gain.core", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } } #endif __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #if CYTHON_COMPILING_IN_PYPY Py_INCREF(__pyx_b); #endif if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; /*--- Initialize various global constants etc. ---*/ if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif if (__pyx_module_is_main_ga4py__gain__core) { if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; } /*--- Builtin init code ---*/ if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Constants init code ---*/ if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Global init code ---*/ /*--- Variable export code ---*/ /*--- Function export code ---*/ /*--- Type init code ---*/ /*--- Type import code ---*/ __pyx_ptype_6mpi4py_3MPI_Status = __Pyx_ImportType("mpi4py.MPI", "Status", sizeof(struct PyMPIStatusObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Status)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6mpi4py_3MPI_Datatype = __Pyx_ImportType("mpi4py.MPI", "Datatype", sizeof(struct PyMPIDatatypeObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Datatype)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6mpi4py_3MPI_Request = __Pyx_ImportType("mpi4py.MPI", "Request", sizeof(struct PyMPIRequestObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Request)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6mpi4py_3MPI_Prequest = __Pyx_ImportType("mpi4py.MPI", "Prequest", sizeof(struct PyMPIPrequestObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Prequest)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6mpi4py_3MPI_Grequest = __Pyx_ImportType("mpi4py.MPI", "Grequest", sizeof(struct PyMPIGrequestObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Grequest)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6mpi4py_3MPI_Op = __Pyx_ImportType("mpi4py.MPI", "Op", sizeof(struct PyMPIOpObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Op)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6mpi4py_3MPI_Group = __Pyx_ImportType("mpi4py.MPI", "Group", sizeof(struct PyMPIGroupObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Group)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6mpi4py_3MPI_Info = __Pyx_ImportType("mpi4py.MPI", "Info", sizeof(struct PyMPIInfoObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Info)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6mpi4py_3MPI_Errhandler = __Pyx_ImportType("mpi4py.MPI", "Errhandler", sizeof(struct PyMPIErrhandlerObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Errhandler)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6mpi4py_3MPI_Comm = __Pyx_ImportType("mpi4py.MPI", "Comm", sizeof(struct PyMPICommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Comm)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6mpi4py_3MPI_Intracomm = __Pyx_ImportType("mpi4py.MPI", "Intracomm", sizeof(struct PyMPIIntracommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Intracomm)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6mpi4py_3MPI_Cartcomm = __Pyx_ImportType("mpi4py.MPI", "Cartcomm", sizeof(struct PyMPICartcommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Cartcomm)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6mpi4py_3MPI_Graphcomm = __Pyx_ImportType("mpi4py.MPI", "Graphcomm", sizeof(struct PyMPIGraphcommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Graphcomm)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6mpi4py_3MPI_Distgraphcomm = __Pyx_ImportType("mpi4py.MPI", "Distgraphcomm", sizeof(struct PyMPIDistgraphcommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Distgraphcomm)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6mpi4py_3MPI_Intercomm = __Pyx_ImportType("mpi4py.MPI", "Intercomm", sizeof(struct PyMPIIntercommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Intercomm)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6mpi4py_3MPI_Win = __Pyx_ImportType("mpi4py.MPI", "Win", sizeof(struct PyMPIWinObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Win)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_6mpi4py_3MPI_File = __Pyx_ImportType("mpi4py.MPI", "File", sizeof(struct PyMPIFileObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_File)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", #if CYTHON_COMPILING_IN_PYPY sizeof(PyTypeObject), #else sizeof(PyHeapTypeObject), #endif 0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Variable import code ---*/ /*--- Function import code ---*/ /*--- Execution code ---*/ /* "ga4py/gain/core.pyx":4 * cimport mpi4py.MPI as MPI * from mpi4py.mpi_c cimport * * import mpi4py.MPI as MPI # <<<<<<<<<<<<<< * * from ga4py import ga */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_n_s_101)); PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s_101)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s_101)); __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s_100), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__MPI, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":6 * import mpi4py.MPI as MPI * * from ga4py import ga # <<<<<<<<<<<<<< * import util * */ __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_n_s__ga)); PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__ga)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ga)); __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__ga4py), ((PyObject *)__pyx_t_2), -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s__ga); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ga, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":7 * * from ga4py import ga * import util # <<<<<<<<<<<<<< * * import numpy as np */ __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__util), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__util, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":9 * import util * * import numpy as np # <<<<<<<<<<<<<< * cimport numpy as np * import os */ __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":11 * import numpy as np * cimport numpy as np * import os # <<<<<<<<<<<<<< * * cpdef int me(): */ __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__os), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__os, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":20 * * # at what point do we distribute arrays versus leaving as np.ndarray? * cdef int SIZE_THRESHOLD = 1 # <<<<<<<<<<<<<< * cpdef int get_size_threshold(): * global SIZE_THRESHOLD */ __pyx_v_5ga4py_4gain_4core_SIZE_THRESHOLD = 1; /* "ga4py/gain/core.pyx":59 * return (thing,) * * gatypes = { # <<<<<<<<<<<<<< * np.dtype(np.int8): ga.C_CHAR, * np.dtype(np.int32): ga.C_INT, */ __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); /* "ga4py/gain/core.pyx":60 * * gatypes = { * np.dtype(np.int8): ga.C_CHAR, # <<<<<<<<<<<<<< * np.dtype(np.int32): ga.C_INT, * np.dtype(np.int64): ga.C_LONG, */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int8); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__C_CHAR); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":61 * gatypes = { * np.dtype(np.int8): ga.C_CHAR, * np.dtype(np.int32): ga.C_INT, # <<<<<<<<<<<<<< * np.dtype(np.int64): ga.C_LONG, * np.dtype(np.float32): ga.C_FLOAT, */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__int32); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__C_INT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":62 * np.dtype(np.int8): ga.C_CHAR, * np.dtype(np.int32): ga.C_INT, * np.dtype(np.int64): ga.C_LONG, # <<<<<<<<<<<<<< * np.dtype(np.float32): ga.C_FLOAT, * np.dtype(np.float64): ga.C_DBL, */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int64); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__C_LONG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":63 * np.dtype(np.int32): ga.C_INT, * np.dtype(np.int64): ga.C_LONG, * np.dtype(np.float32): ga.C_FLOAT, # <<<<<<<<<<<<<< * np.dtype(np.float64): ga.C_DBL, * np.dtype(np.complex64): ga.C_SCPL, */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__float32); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__C_FLOAT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":64 * np.dtype(np.int64): ga.C_LONG, * np.dtype(np.float32): ga.C_FLOAT, * np.dtype(np.float64): ga.C_DBL, # <<<<<<<<<<<<<< * np.dtype(np.complex64): ga.C_SCPL, * np.dtype(np.complex128): ga.C_DCPL, */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__float64); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__C_DBL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":65 * np.dtype(np.float32): ga.C_FLOAT, * np.dtype(np.float64): ga.C_DBL, * np.dtype(np.complex64): ga.C_SCPL, # <<<<<<<<<<<<<< * np.dtype(np.complex128): ga.C_DCPL, * } */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__complex64); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__C_SCPL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":66 * np.dtype(np.float64): ga.C_DBL, * np.dtype(np.complex64): ga.C_SCPL, * np.dtype(np.complex128): ga.C_DCPL, # <<<<<<<<<<<<<< * } * # numpy doesn't always have these types depending on the system */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__complex128); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__C_DCPL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__gatypes, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":69 * } * # numpy doesn't always have these types depending on the system * cdef bint float128_in_np = ('float128' in dir(np)) # <<<<<<<<<<<<<< * cdef bint complex256_in_np = ('complex256' in dir(np)) * if float128_in_np: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyObject_Dir(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = (__Pyx_PySequence_Contains(((PyObject *)__pyx_n_s__float128), __pyx_t_4, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_5ga4py_4gain_4core_float128_in_np = __pyx_t_5; /* "ga4py/gain/core.pyx":70 * # numpy doesn't always have these types depending on the system * cdef bint float128_in_np = ('float128' in dir(np)) * cdef bint complex256_in_np = ('complex256' in dir(np)) # <<<<<<<<<<<<<< * if float128_in_np: * gatypes[np.dtype(np.float128)] = ga.C_LDBL */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_Dir(__pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = (__Pyx_PySequence_Contains(((PyObject *)__pyx_n_s__complex256), __pyx_t_1, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_5ga4py_4gain_4core_complex256_in_np = __pyx_t_5; /* "ga4py/gain/core.pyx":71 * cdef bint float128_in_np = ('float128' in dir(np)) * cdef bint complex256_in_np = ('complex256' in dir(np)) * if float128_in_np: # <<<<<<<<<<<<<< * gatypes[np.dtype(np.float128)] = ga.C_LDBL * if complex256_in_np: */ __pyx_t_5 = (__pyx_v_5ga4py_4gain_4core_float128_in_np != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":72 * cdef bint complex256_in_np = ('complex256' in dir(np)) * if float128_in_np: * gatypes[np.dtype(np.float128)] = ga.C_LDBL # <<<<<<<<<<<<<< * if complex256_in_np: * gatypes[np.dtype(np.complex256)] = ga.C_LDCPL */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__C_LDBL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__gatypes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__float128); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyObject_SetItem(__pyx_t_1, __pyx_t_2, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L2; } __pyx_L2:; /* "ga4py/gain/core.pyx":73 * if float128_in_np: * gatypes[np.dtype(np.float128)] = ga.C_LDBL * if complex256_in_np: # <<<<<<<<<<<<<< * gatypes[np.dtype(np.complex256)] = ga.C_LDCPL * */ __pyx_t_5 = (__pyx_v_5ga4py_4gain_4core_complex256_in_np != 0); if (__pyx_t_5) { /* "ga4py/gain/core.pyx":74 * gatypes[np.dtype(np.float128)] = ga.C_LDBL * if complex256_in_np: * gatypes[np.dtype(np.complex256)] = ga.C_LDCPL # <<<<<<<<<<<<<< * * cdef bint _mask_sync = False */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__C_LDCPL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__gatypes); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__complex256); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyObject_SetItem(__pyx_t_4, __pyx_t_3, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/core.pyx":76 * gatypes[np.dtype(np.complex256)] = ga.C_LDCPL * * cdef bint _mask_sync = False # <<<<<<<<<<<<<< * cpdef inline mask_sync(): * global _mask_sync */ __pyx_v_5ga4py_4gain_4core__mask_sync = 0; /* "ga4py/gain/core.pyx":87 * ga.sync() # internally it checks for the default group * * class flagsobj(object): # <<<<<<<<<<<<<< * def __init__(self): * self._c = True */ __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); /* "ga4py/gain/core.pyx":88 * * class flagsobj(object): * def __init__(self): # <<<<<<<<<<<<<< * self._c = True * self._f = False */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flagsobj_1__init__, 0, __pyx_n_s_105, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_103)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____init__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":95 * self._a = True * self._u = False * def _get_c(self): # <<<<<<<<<<<<<< * return self._c * c_contiguous = property(_get_c) */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flagsobj_3_get_c, 0, __pyx_n_s_108, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_107)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s___get_c, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":97 * def _get_c(self): * return self._c * c_contiguous = property(_get_c) # <<<<<<<<<<<<<< * def _get_f(self): * return self._f */ __pyx_t_3 = PyObject_GetItem(__pyx_t_2, __pyx_n_s___get_c); if (unlikely(!__pyx_t_3)) { PyErr_Clear(); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_c); } if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__c_contiguous, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":98 * return self._c * c_contiguous = property(_get_c) * def _get_f(self): # <<<<<<<<<<<<<< * return self._f * f_contiguous = property(_get_f) */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flagsobj_5_get_f, 0, __pyx_n_s_111, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_110)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s___get_f, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":100 * def _get_f(self): * return self._f * f_contiguous = property(_get_f) # <<<<<<<<<<<<<< * def _get_o(self): * return self._o */ __pyx_t_3 = PyObject_GetItem(__pyx_t_2, __pyx_n_s___get_f); if (unlikely(!__pyx_t_3)) { PyErr_Clear(); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_f); } if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__f_contiguous, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":101 * return self._f * f_contiguous = property(_get_f) * def _get_o(self): # <<<<<<<<<<<<<< * return self._o * owndata = property(_get_o) */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flagsobj_7_get_o, 0, __pyx_n_s_114, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_113)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s___get_o, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":103 * def _get_o(self): * return self._o * owndata = property(_get_o) # <<<<<<<<<<<<<< * def _get_w(self): * return self._w */ __pyx_t_3 = PyObject_GetItem(__pyx_t_2, __pyx_n_s___get_o); if (unlikely(!__pyx_t_3)) { PyErr_Clear(); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_o); } if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__owndata, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":104 * return self._o * owndata = property(_get_o) * def _get_w(self): # <<<<<<<<<<<<<< * return self._w * writeable = property(_get_w) */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flagsobj_9_get_w, 0, __pyx_n_s_117, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_116)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s___get_w, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":106 * def _get_w(self): * return self._w * writeable = property(_get_w) # <<<<<<<<<<<<<< * def _get_a(self): * return self._a */ __pyx_t_3 = PyObject_GetItem(__pyx_t_2, __pyx_n_s___get_w); if (unlikely(!__pyx_t_3)) { PyErr_Clear(); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_w); } if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__writeable, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":107 * return self._w * writeable = property(_get_w) * def _get_a(self): # <<<<<<<<<<<<<< * return self._a * aligned = property(_get_a) */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flagsobj_11_get_a, 0, __pyx_n_s_120, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_119)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s___get_a, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":109 * def _get_a(self): * return self._a * aligned = property(_get_a) # <<<<<<<<<<<<<< * def _get_u(self): * return self._u */ __pyx_t_3 = PyObject_GetItem(__pyx_t_2, __pyx_n_s___get_a); if (unlikely(!__pyx_t_3)) { PyErr_Clear(); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_a); } if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__aligned, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":110 * return self._a * aligned = property(_get_a) * def _get_u(self): # <<<<<<<<<<<<<< * return self._u * updateifcopy = property(_get_u) */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flagsobj_13_get_u, 0, __pyx_n_s_123, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_122)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s___get_u, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":112 * def _get_u(self): * return self._u * updateifcopy = property(_get_u) # <<<<<<<<<<<<<< * def __getitem__(self, item): * if isinstance(item, str): */ __pyx_t_3 = PyObject_GetItem(__pyx_t_2, __pyx_n_s___get_u); if (unlikely(!__pyx_t_3)) { PyErr_Clear(); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_u); } if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__updateifcopy, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":113 * return self._u * updateifcopy = property(_get_u) * def __getitem__(self, item): # <<<<<<<<<<<<<< * if isinstance(item, str): * if item == "C" or item == "C_CONTIGUOUS": */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flagsobj_15__getitem__, 0, __pyx_n_s_126, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_125)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____getitem__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":128 * return self._u * raise KeyError, "Unknown flag" * def __repr__(self): # <<<<<<<<<<<<<< * return """ C_CONTIGUOUS : %s * F_CONTIGUOUS : %s */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flagsobj_17__repr__, 0, __pyx_n_s_129, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_128)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____repr__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":87 * ga.sync() # internally it checks for the default group * * class flagsobj(object): # <<<<<<<<<<<<<< * def __init__(self): * self._c = True */ __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_builtin_object); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object); __Pyx_GIVEREF(__pyx_builtin_object); __pyx_t_4 = __Pyx_CreateClass(((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_2), __pyx_n_s__flagsobj, __pyx_n_s__flagsobj, __pyx_n_s_24); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__flagsobj, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":137 * self._w, self._a, self._u) * * class GlobalArrayCache(object): # <<<<<<<<<<<<<< * """When ndarray instances are removed, their GA handles are preserved. * */ __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); /* "ga4py/gain/core.pyx":147 * * """ * def __init__(self, level=3): # <<<<<<<<<<<<<< * self.cache = {} * self.level = level */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_1__init__, 0, __pyx_n_s_133, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_131)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_132)); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____init__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":151 * self.level = level * * def __del__(self): # <<<<<<<<<<<<<< * for value in self.cache.values(): * for g_a in value: */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_3__del__, 0, __pyx_n_s_136, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_135)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____del__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":156 * ga.destroy(g_a) * * def __contains__(self, item): # <<<<<<<<<<<<<< * return (item in self.cache and self.cache[item]) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_5__contains__, 0, __pyx_n_s_139, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_138)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____contains__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":159 * return (item in self.cache and self.cache[item]) * * def __getitem__(self, item): # <<<<<<<<<<<<<< * if item in self.cache and self.cache[item]: * return self.cache[item].pop() */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_7__getitem__, 0, __pyx_n_s_142, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_141)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____getitem__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":164 * raise KeyError, item * * def __setitem__(self, item, value): # <<<<<<<<<<<<<< * if item in self.cache: * self.cache[item].append(value) */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_9__setitem__, 0, __pyx_n_s_145, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_144)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s____setitem__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":170 * self.cache[item] = [value] * * def count(self, item): # <<<<<<<<<<<<<< * if item in self.cache: * return len(self.cache[item]) */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_11count, 0, __pyx_n_s_148, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_147)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__count, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":175 * return 0 * * def empty(self, item): # <<<<<<<<<<<<<< * return self.count(item) == 0 * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_13empty, 0, __pyx_n_s_151, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_150)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__empty, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":178 * return self.count(item) == 0 * * def full(self, item): # <<<<<<<<<<<<<< * return self.count(item) == self.level * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_15full, 0, __pyx_n_s_154, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_153)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__full, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":181 * return self.count(item) == self.level * * def pop(self, item): # <<<<<<<<<<<<<< * return self[item] * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_17pop, 0, __pyx_n_s_157, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_156)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__pop, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":184 * return self[item] * * def size(self): # <<<<<<<<<<<<<< * """Return the size of the cache in bytes.""" * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_16GlobalArrayCache_19size, 0, __pyx_n_s_160, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_159)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__size, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":137 * self._w, self._a, self._u) * * class GlobalArrayCache(object): # <<<<<<<<<<<<<< * """When ndarray instances are removed, their GA handles are preserved. * */ __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_builtin_object); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_builtin_object); __Pyx_GIVEREF(__pyx_builtin_object); if (PyDict_SetItemString(((PyObject *)__pyx_t_2), "__doc__", ((PyObject *)__pyx_kp_s_161)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_CreateClass(((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2), __pyx_n_s__GlobalArrayCache, __pyx_n_s__GlobalArrayCache, __pyx_n_s_24); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__GlobalArrayCache, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":187 * """Return the size of the cache in bytes.""" * * ga_cache = GlobalArrayCache() # <<<<<<<<<<<<<< * * class ndarray(object): */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__GlobalArrayCache); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__ga_cache, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":189 * ga_cache = GlobalArrayCache() * * class ndarray(object): # <<<<<<<<<<<<<< * """ndarray(shape, dtype=float, buffer=None, offset=0, * strides=None, order=None) */ __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); /* "ga4py/gain/core.pyx":337 * * """ * def __new__(cls, shape, dtype=float, buffer=None, offset=0, # <<<<<<<<<<<<<< * strides=None, order=None, base=None): * if base is None and not should_distribute(shape): */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_1__new__, __Pyx_CYFUNCTION_STATICMETHOD, __pyx_n_s_164, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_163)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (!__Pyx_CyFunction_InitDefaults(__pyx_t_2, sizeof(__pyx_defaults), 1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_INCREF(((PyObject *)((PyObject*)(&PyFloat_Type)))); __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_2)->__pyx_arg_dtype = ((PyObject *)((PyObject*)(&PyFloat_Type))); __Pyx_GIVEREF(((PyObject*)(&PyFloat_Type))); __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_2, __pyx_pf_5ga4py_4gain_4core_7ndarray_316__defaults__); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____new__, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":343 * return super(ndarray, cls).__new__(cls) * * def __init__(self, shape, dtype=float, buffer=None, offset=0, # <<<<<<<<<<<<<< * strides=None, order=None, base=None): * shape = tuplify(shape) */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_3__init__, 0, __pyx_n_s_167, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_166)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (!__Pyx_CyFunction_InitDefaults(__pyx_t_2, sizeof(__pyx_defaults1), 1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_INCREF(((PyObject *)((PyObject*)(&PyFloat_Type)))); __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_t_2)->__pyx_arg_dtype = ((PyObject *)((PyObject*)(&PyFloat_Type))); __Pyx_GIVEREF(((PyObject*)(&PyFloat_Type))); __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_2, __pyx_pf_5ga4py_4gain_4core_7ndarray_318__defaults__); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____init__, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":405 * self._strides = [size*self._strides[0]] + self._strides * * def __del__(self): # <<<<<<<<<<<<<< * if self._base is None: * if ga.initialized(): */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_5__del__, 0, __pyx_n_s_170, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_169)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____del__, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":417 * ### ndarray methods added for Global Arrays * ################################################################ * def distribution(self): # <<<<<<<<<<<<<< * """Return the bounds of the distribution. * */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_7distribution, 0, __pyx_n_s_173, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_172)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__distribution, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":428 * return ga.distribution(self.handle) * * def owns(self): # <<<<<<<<<<<<<< * """Return True if this process owns some of the data. * */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_9owns, 0, __pyx_n_s_176, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_175)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__owns, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":437 * return np.all(hi>=0) * * def access(self, global_slice=None): # <<<<<<<<<<<<<< * """Access the local array. Return None if no data is owned. * */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_11access, 0, __pyx_n_s_180, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_178)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, ((PyObject *)__pyx_k_tuple_179)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__access, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":466 * return d * * def get(self, key=None): # <<<<<<<<<<<<<< * """Similar to the __getitem__ built-in, but one-sided (not collective.) * */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_13get, 0, __pyx_n_s_184, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_182)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, ((PyObject *)__pyx_k_tuple_183)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__get, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":502 * return ret * * def allget(self, key=None): # <<<<<<<<<<<<<< * """Like get(), but when all processes need the same piece. * */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_15allget, 0, __pyx_n_s_188, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_186)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, ((PyObject *)__pyx_k_tuple_187)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__allget, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":516 * return comm().bcast() * * def gather(self, i): # <<<<<<<<<<<<<< * """Use ga.gather() but modify the indicies `i' based on global_slice. * */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_17gather, 0, __pyx_n_s_191, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_190)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__gather, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":571 * return ga.gather(self.handle, new_i) * * def release(self): # <<<<<<<<<<<<<< * ga.release(self.handle) * */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_19release, 0, __pyx_n_s_194, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_193)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__release, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":574 * ga.release(self.handle) * * def release_update(self): # <<<<<<<<<<<<<< * ga.release_update(self.handle) * */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_21release_update, 0, __pyx_n_s_197, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_196)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__release_update, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":581 * ################################################################ * * def _get_T(self): # <<<<<<<<<<<<<< * return self.transpose() * T = property(_get_T) */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_23_get_T, 0, __pyx_n_s_200, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_199)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_T, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":583 * def _get_T(self): * return self.transpose() * T = property(_get_T) # <<<<<<<<<<<<<< * * def _get_data(self): */ __pyx_t_2 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_T); if (unlikely(!__pyx_t_2)) { PyErr_Clear(); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_T); } if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__T, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":585 * T = property(_get_T) * * def _get_data(self): # <<<<<<<<<<<<<< * a = self.access() * if a is not None: */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_25_get_data, 0, __pyx_n_s_203, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_202)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_data, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":590 * return a.data * return None * data = property(_get_data) # <<<<<<<<<<<<<< * * def _get_dtype(self): */ __pyx_t_2 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_data); if (unlikely(!__pyx_t_2)) { PyErr_Clear(); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_data); } if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__data, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":592 * data = property(_get_data) * * def _get_dtype(self): # <<<<<<<<<<<<<< * return self._dtype * dtype = property(_get_dtype) */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_27_get_dtype, 0, __pyx_n_s_206, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_205)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_dtype, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":594 * def _get_dtype(self): * return self._dtype * dtype = property(_get_dtype) # <<<<<<<<<<<<<< * * def _get_flags(self): */ __pyx_t_2 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_dtype); if (unlikely(!__pyx_t_2)) { PyErr_Clear(); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_dtype); } if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__dtype, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":596 * dtype = property(_get_dtype) * * def _get_flags(self): # <<<<<<<<<<<<<< * return self._flags * flags = property(_get_flags) */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_29_get_flags, 0, __pyx_n_s_209, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_208)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_flags, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":598 * def _get_flags(self): * return self._flags * flags = property(_get_flags) # <<<<<<<<<<<<<< * * def _get_flat(self): */ __pyx_t_2 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_flags); if (unlikely(!__pyx_t_2)) { PyErr_Clear(); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_flags); } if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__flags, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":600 * flags = property(_get_flags) * * def _get_flat(self): # <<<<<<<<<<<<<< * return flatiter(self) * def _set_flat(self, value): */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_31_get_flat, 0, __pyx_n_s_212, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_211)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_flat, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":602 * def _get_flat(self): * return flatiter(self) * def _set_flat(self, value): # <<<<<<<<<<<<<< * a = flatiter(self) * a[:] = value */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_33_set_flat, 0, __pyx_n_s_215, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_214)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___set_flat, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":605 * a = flatiter(self) * a[:] = value * flat = property(_get_flat,_set_flat) # <<<<<<<<<<<<<< * * def _get_imag(self): */ __pyx_t_2 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_flat); if (unlikely(!__pyx_t_2)) { PyErr_Clear(); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_flat); } if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___set_flat); if (unlikely(!__pyx_t_4)) { PyErr_Clear(); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s___set_flat); } if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__flat, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":607 * flat = property(_get_flat,_set_flat) * * def _get_imag(self): # <<<<<<<<<<<<<< * if self._dtype.kind != 'c': * return zeros(self.shape, self.dtype) */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_35_get_imag, 0, __pyx_n_s_218, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_217)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_imag, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":615 * ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) * return ret * def _set_imag(self, value): # <<<<<<<<<<<<<< * if self._dtype.kind != 'c': * raise TypeError, "array does not have imaginary part to set" */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_37_set_imag, 0, __pyx_n_s_221, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_220)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___set_imag, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":620 * else: * self._get_imag()[:] = value * imag = property(_get_imag,_set_imag) # <<<<<<<<<<<<<< * * def _get_real(self): */ __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_imag); if (unlikely(!__pyx_t_4)) { PyErr_Clear(); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_imag); } if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___set_imag); if (unlikely(!__pyx_t_1)) { PyErr_Clear(); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s___set_imag); } if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_4 = 0; __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__imag, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":622 * imag = property(_get_imag,_set_imag) * * def _get_real(self): # <<<<<<<<<<<<<< * if self._dtype.kind != 'c': * return self */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_39_get_real, 0, __pyx_n_s_224, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_223)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_real, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":630 * ret._dtype = np.dtype("float%s" % (self._dtype.itemsize/2*8)) * return ret * def _set_real(self, value): # <<<<<<<<<<<<<< * self._get_real()[:] = value * real = property(_get_real,_set_real) */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_41_set_real, 0, __pyx_n_s_227, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_226)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___set_real, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":632 * def _set_real(self, value): * self._get_real()[:] = value * real = property(_get_real,_set_real) # <<<<<<<<<<<<<< * * def _get_size(self): */ __pyx_t_1 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_real); if (unlikely(!__pyx_t_1)) { PyErr_Clear(); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_real); } if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___set_real); if (unlikely(!__pyx_t_2)) { PyErr_Clear(); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s___set_real); } if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__real, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":634 * real = property(_get_real,_set_real) * * def _get_size(self): # <<<<<<<<<<<<<< * return reduce(lambda x,y: x*y, self.shape, 1) * size = property(_get_size) */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_43_get_size, 0, __pyx_n_s_230, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_229)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_size, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":636 * def _get_size(self): * return reduce(lambda x,y: x*y, self.shape, 1) * size = property(_get_size) # <<<<<<<<<<<<<< * * def _get_itemsize(self): */ __pyx_t_2 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_size); if (unlikely(!__pyx_t_2)) { PyErr_Clear(); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_size); } if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__size, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":638 * size = property(_get_size) * * def _get_itemsize(self): # <<<<<<<<<<<<<< * return self._dtype.itemsize * itemsize = property(_get_itemsize) */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_45_get_itemsize, 0, __pyx_n_s_233, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_232)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_itemsize, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":640 * def _get_itemsize(self): * return self._dtype.itemsize * itemsize = property(_get_itemsize) # <<<<<<<<<<<<<< * * def _get_nbytes(self): */ __pyx_t_2 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_itemsize); if (unlikely(!__pyx_t_2)) { PyErr_Clear(); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_itemsize); } if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__itemsize, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":642 * itemsize = property(_get_itemsize) * * def _get_nbytes(self): # <<<<<<<<<<<<<< * return self.itemsize * self.size * nbytes = property(_get_nbytes) */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_47_get_nbytes, 0, __pyx_n_s_236, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_235)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 642; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_nbytes, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 642; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":644 * def _get_nbytes(self): * return self.itemsize * self.size * nbytes = property(_get_nbytes) # <<<<<<<<<<<<<< * * def _get_ndim(self): */ __pyx_t_2 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_nbytes); if (unlikely(!__pyx_t_2)) { PyErr_Clear(); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_nbytes); } if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__nbytes, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":646 * nbytes = property(_get_nbytes) * * def _get_ndim(self): # <<<<<<<<<<<<<< * return len(self.shape) * ndim = property(_get_ndim) */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_49_get_ndim, 0, __pyx_n_s_239, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_238)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_ndim, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":648 * def _get_ndim(self): * return len(self.shape) * ndim = property(_get_ndim) # <<<<<<<<<<<<<< * * def _get_shape(self): */ __pyx_t_2 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_ndim); if (unlikely(!__pyx_t_2)) { PyErr_Clear(); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_ndim); } if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__ndim, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":650 * ndim = property(_get_ndim) * * def _get_shape(self): # <<<<<<<<<<<<<< * return self.global_slice.shape * def _set_shape(self, value): */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_51_get_shape, 0, __pyx_n_s_242, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_241)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_shape, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":652 * def _get_shape(self): * return self.global_slice.shape * def _set_shape(self, value): # <<<<<<<<<<<<<< * if self.base is None: * # we can change the underlying GA */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_53_set_shape, 0, __pyx_n_s_245, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_244)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___set_shape, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/core.pyx":664 * else: * raise AttributeError, "incompatible shape for a non-contiguous array" * shape = property(_get_shape, _set_shape) # <<<<<<<<<<<<<< * * def _get_strides(self): */ __pyx_t_2 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_shape); if (unlikely(!__pyx_t_2)) { PyErr_Clear(); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_shape); } if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 664; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___set_shape); if (unlikely(!__pyx_t_4)) { PyErr_Clear(); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s___set_shape); } if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 664; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 664; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 664; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__shape, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 664; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":666 * shape = property(_get_shape, _set_shape) * * def _get_strides(self): # <<<<<<<<<<<<<< * strides = [self.itemsize] * for size in self.shape[-1:0:-1]: */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_55_get_strides, 0, __pyx_n_s_248, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_247)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_strides, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":671 * strides = [size*strides[0]] + strides * return strides * strides = property(_get_strides) # <<<<<<<<<<<<<< * * def _get_ctypes(self): */ __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_strides); if (unlikely(!__pyx_t_4)) { PyErr_Clear(); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_strides); } if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__strides, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":673 * strides = property(_get_strides) * * def _get_ctypes(self): # <<<<<<<<<<<<<< * raise NotImplementedError, "TODO" * ctypes = property(_get_ctypes) */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_57_get_ctypes, 0, __pyx_n_s_251, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_250)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_ctypes, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":675 * def _get_ctypes(self): * raise NotImplementedError, "TODO" * ctypes = property(_get_ctypes) # <<<<<<<<<<<<<< * * def _get_base(self): */ __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_ctypes); if (unlikely(!__pyx_t_4)) { PyErr_Clear(); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_ctypes); } if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__ctypes, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":677 * ctypes = property(_get_ctypes) * * def _get_base(self): # <<<<<<<<<<<<<< * return self._base * base = property(_get_base) */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_59_get_base, 0, __pyx_n_s_254, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_253)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 677; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_base, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 677; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":679 * def _get_base(self): * return self._base * base = property(_get_base) # <<<<<<<<<<<<<< * * ################################################################ */ __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_base); if (unlikely(!__pyx_t_4)) { PyErr_Clear(); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_base); } if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__base, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":684 * ### ndarray methods * ################################################################ * def all(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Returns True if all elements evaluate to True. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_61all, 0, __pyx_n_s_258, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_256)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 684; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_257)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__all, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 684; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":696 * raise NotImplementedError * * def any(self, axis=None, out=None): # <<<<<<<<<<<<<< * """ Returns True if any of the elements of `a` evaluate to True. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_63any, 0, __pyx_n_s_262, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_260)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_261)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__any, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":708 * raise NotImplementedError * * def argmax(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Return indices of the maximum values along the given axis. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_65argmax, 0, __pyx_n_s_266, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_264)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_265)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__argmax, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":720 * raise NotImplementedError * * def argmin(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Return indices of the minimum values along the given axis of `a`. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_67argmin, 0, __pyx_n_s_270, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_268)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_269)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__argmin, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":732 * raise NotImplementedError * * def argsort(self, axis=-1, kind='quicksort', order=None): # <<<<<<<<<<<<<< * """Returns the indices that would sort this array. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_69argsort, 0, __pyx_n_s_274, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_272)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_273)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__argsort, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":744 * raise NotImplementedError * * def astype(self, t): # <<<<<<<<<<<<<< * """Copy of the array, cast to a specified type. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_71astype, 0, __pyx_n_s_277, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_276)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__astype, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":775 * return the_copy * * def byteswap(self, inplace=False): # <<<<<<<<<<<<<< * """Swap the bytes of the array elements * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_73byteswap, 0, __pyx_n_s_280, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_279)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults2), 1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_t_4)->__pyx_arg_inplace = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_5ga4py_4gain_4core_7ndarray_320__defaults__); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__byteswap, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":812 * raise NotImplementedError * * def choose(self, choices, out=None, mode='raise'): # <<<<<<<<<<<<<< * """Use an index array to construct a new array from a set of choices. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_75choose, 0, __pyx_n_s_284, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_282)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_283)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__choose, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":824 * raise NotImplementedError * * def clip(self, a_min, a_max, out=None): # <<<<<<<<<<<<<< * """Return an array whose values are limited to ``[a_min, a_max]``. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_77clip, 0, __pyx_n_s_288, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_286)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_287)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__clip, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":836 * raise NotImplementedError * * def compress(self, condition, axis=None, out=None): # <<<<<<<<<<<<<< * """Return selected slices of this array along given axis. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_79compress, 0, __pyx_n_s_292, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_290)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_291)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__compress, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":848 * return NotImplementedError * * def conj(self): # <<<<<<<<<<<<<< * """Complex-conjugate all elements. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_81conj, 0, __pyx_n_s_295, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_294)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 848; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__conj, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 848; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":860 * raise NotImplementedError * * def conjugate(self): # <<<<<<<<<<<<<< * """Return the complex conjugate, element-wise. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_83conjugate, 0, __pyx_n_s_298, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_297)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 860; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__conjugate, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 860; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":872 * raise NotImplementedError * * def copy(self, order='C'): # <<<<<<<<<<<<<< * """Return a copy of the array. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_85copy, 0, __pyx_n_s_302, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_300)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_301)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__copy, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":916 * return the_copy * * def cumprod(self, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the cumulative product of the elements along the given axis. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_87cumprod, 0, __pyx_n_s_306, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_304)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_305)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__cumprod, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":928 * raise NotImplementedError * * def cumsum(self, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the cumulative sum of the elements along the given axis. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_89cumsum, 0, __pyx_n_s_310, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_308)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_309)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__cumsum, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":940 * raise NotImplementedError * * def diagonal(self, offset=0, axis1=0, axis2=1): # <<<<<<<<<<<<<< * """Return specified diagonals. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_91diagonal, 0, __pyx_n_s_314, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_312)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 940; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_313)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__diagonal, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 940; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":978 * return out * * def dot(self, b, out=None): # <<<<<<<<<<<<<< * """a.dot(b, out=None) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_93dot, 0, __pyx_n_s_318, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_316)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 978; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_317)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__dot, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 978; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1006 * raise NotImplementedError * * def dump(self, file): # <<<<<<<<<<<<<< * """Dump a pickle of the array to the specified file. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_95dump, 0, __pyx_n_s_321, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_320)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1006; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__dump, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1006; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1019 * raise NotImplementedError * * def dumps(self): # <<<<<<<<<<<<<< * """Returns the pickle of the array as a string. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_97dumps, 0, __pyx_n_s_324, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_323)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__dumps, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1031 * raise NotImplementedError * * def fill(self, value): # <<<<<<<<<<<<<< * """Fill the array with a scalar value. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_99fill, 0, __pyx_n_s_327, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_326)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__fill, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1056 * self.release_update() * * def flatten(self, order='C'): # <<<<<<<<<<<<<< * """Return a copy of the array collapsed into one dimension. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_101flatten, 0, __pyx_n_s_331, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_329)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1056; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_330)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__flatten, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1056; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1086 * return self.reshape(self.size) * * def getfield(self, dtype, offset): # <<<<<<<<<<<<<< * """Returns a field of the given array as a certain type. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_103getfield, 0, __pyx_n_s_334, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_333)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__getfield, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1140 * raise NotImplementedError * * def item(self, *args): # <<<<<<<<<<<<<< * """Copy an element of an array to a standard Python scalar and return it. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_105item, 0, __pyx_n_s_337, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_336)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__item, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1195 * raise NotImplementedError * * def itemset(self, *args): # <<<<<<<<<<<<<< * """Insert scalar into an array (scalar is cast to array's dtype, if possible) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_107itemset, 0, __pyx_n_s_340, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_339)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__itemset, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1238 * raise NotImplementedError * * def max(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the maximum along a given axis. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_109max, 0, __pyx_n_s_344, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_342)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1238; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_343)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__max, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1238; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1269 * return maximum.reduce(self, axis, out) * * def mean(self, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Returns the average of the array elements along given axis. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_111mean, 0, __pyx_n_s_348, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_346)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_347)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__mean, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1281 * raise NotImplementedError * * def min(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the minimum along a given axis. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_113min, 0, __pyx_n_s_352, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_350)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_351)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__min, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1312 * return minimum.reduce(self, axis, out) * * def newbyteorder(self, new_order='S'): # <<<<<<<<<<<<<< * """Return the array with the same data viewed with a different byte order. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_115newbyteorder, 0, __pyx_n_s_356, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_354)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_355)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__newbyteorder, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1351 * raise NotImplementedError * * def nonzero(self): # <<<<<<<<<<<<<< * """Return the indices of the elements that are non-zero. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_117nonzero, 0, __pyx_n_s_359, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_358)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__nonzero, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1363 * raise NotImplementedError * * def prod(self, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the product of the array elements over the given axis * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_119prod, 0, __pyx_n_s_363, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_361)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_362)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__prod, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1375 * raise NotImplementedError * * def ptp(self, axis=None, out=None): # <<<<<<<<<<<<<< * """Peak to peak (maximum - minimum) value along a given axis. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_121ptp, 0, __pyx_n_s_367, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_365)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_366)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__ptp, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1387 * raise NotImplementedError * * def put(self, indices, values, mode='raise'): # <<<<<<<<<<<<<< * """Set ``a.flat[n] = values[n]`` for all `n` in indices. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_123put, 0, __pyx_n_s_371, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_369)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_370)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__put, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1399 * raise NotImplementedError * * def ravel(self, order=None): # <<<<<<<<<<<<<< * """Return a flattened array. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_125ravel, 0, __pyx_n_s_375, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_373)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_374)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__ravel, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1413 * raise NotImplementedError * * def repeat(self, repeats, axis=None): # <<<<<<<<<<<<<< * """Repeat elements of an array. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_127repeat, 0, __pyx_n_s_379, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_377)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_378)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__repeat, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1425 * raise NotImplementedError * * def reshape(self, shape, order='C', *args): # <<<<<<<<<<<<<< * """Returns an array containing the same data with a new shape. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_129reshape, 0, __pyx_n_s_383, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_381)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_382)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__reshape, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1470 * return a * * def resize(self, new_shape, refcheck=True): # <<<<<<<<<<<<<< * """Change shape and size of array in-place. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_131resize, 0, __pyx_n_s_386, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_385)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults3), 1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_CyFunction_Defaults(__pyx_defaults3, __pyx_t_4)->__pyx_arg_refcheck = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_5ga4py_4gain_4core_7ndarray_322__defaults__); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__resize, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1556 * raise NotImplementedError * * def round(self, decimals=0, out=None): # <<<<<<<<<<<<<< * """Return `a` with each element rounded to the given number of decimals. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_133round, 0, __pyx_n_s_390, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_388)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_389)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__round, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1568 * raise NotImplementedError * * def searchsorted(self, v, side='left'): # <<<<<<<<<<<<<< * """Find indices where elements of v should be inserted in a to maintain order. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_135searchsorted, 0, __pyx_n_s_394, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_392)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_393)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__searchsorted, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1580 * raise NotImplementedError * * def setfield(self, val, dtype, offset=0): # <<<<<<<<<<<<<< * """Put a value into a specified place in a field defined by a data-type. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_137setfield, 0, __pyx_n_s_398, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_396)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1580; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_397)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__setfield, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1580; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1628 * raise NotImplementedError * * def setflags(self, write=None, align=None, uic=None): # <<<<<<<<<<<<<< * """Set array flags WRITEABLE, ALIGNED, and UPDATEIFCOPY, respectively. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_139setflags, 0, __pyx_n_s_402, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_400)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_401)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__setflags, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1697 * raise NotImplementedError * * def sort(self, axis=-1, kind='quicksort', order=None): # <<<<<<<<<<<<<< * """Sort an array, in-place. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_141sort, 0, __pyx_n_s_406, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_404)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_405)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__sort, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1747 * raise NotImplementedError * * def squeeze(self): # <<<<<<<<<<<<<< * """Remove single-dimensional entries from the shape of `a`. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_143squeeze, 0, __pyx_n_s_409, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_408)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1747; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__squeeze, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1747; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1759 * raise NotImplementedError * * def std(self, axis=None, dtype=None, out=None, ddof=0): # <<<<<<<<<<<<<< * """Remove single-dimensional entries from the shape of `a`. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_145std, 0, __pyx_n_s_413, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_411)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1759; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_412)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__std, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1759; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1771 * raise NotImplementedError * * def sum(self, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the sum of the array elements over the given axis. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_147sum, 0, __pyx_n_s_417, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_415)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_416)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__sum, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1792 * raise NotImplementedError * * def swapaxes(self, axis1, axis2): # <<<<<<<<<<<<<< * """Return a view of the array with `axis1` and `axis2` interchanged. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_149swapaxes, 0, __pyx_n_s_420, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_419)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1792; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__swapaxes, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1792; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1804 * raise NotImplementedError * * def take(self, indices, axis=None, out=None, mode='raise'): # <<<<<<<<<<<<<< * """Return an array formed from the elements of `a` at the given indices. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_151take, 0, __pyx_n_s_424, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_422)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1804; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_423)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__take, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1804; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1816 * raise NotImplementedError * * def tofile(self, fid, sep="", format="%s"): # <<<<<<<<<<<<<< * """Write array to a file as text or binary (default). * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_153tofile, 0, __pyx_n_s_428, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_426)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_427)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__tofile, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1848 * raise NotImplementedError * * def tolist(self): # <<<<<<<<<<<<<< * """Return the array as a (possibly nested) list. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_155tolist, 0, __pyx_n_s_431, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_430)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1848; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__tolist, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1848; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1881 * raise NotImplementedError * * def tostring(self, order='C'): # <<<<<<<<<<<<<< * """Construct a Python string containing the raw data bytes in the array. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_157tostring, 0, __pyx_n_s_435, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_433)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_434)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__tostring, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1914 * raise NotImplementedError * * def trace(self, offset=0, axis1=0, axis2=1, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the sum along diagonals of the array. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_159trace, 0, __pyx_n_s_439, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_437)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1914; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_438)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__trace, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1914; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1926 * raise NotImplementedError * * def transpose(self, *axes): # <<<<<<<<<<<<<< * """Returns a view of the array with axes transposed. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_161transpose, 0, __pyx_n_s_442, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_441)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__transpose, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":1997 * return ret * * def var(self, axis=None, dtype=None, out=None, ddof=0): # <<<<<<<<<<<<<< * """Returns the variance of the array elements, along given axis. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_163var, 0, __pyx_n_s_446, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_444)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1997; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_445)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__var, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1997; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2009 * raise NotImplementedError * * def view(self, dtype=None, type=None): # <<<<<<<<<<<<<< * """New view of array with the same data. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_165view, 0, __pyx_n_s_450, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_448)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2009; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_449)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__view, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2009; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2082 * ### ndarray operator overloading * ################################################################ * def __abs__(self): # <<<<<<<<<<<<<< * return abs(self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_167__abs__, 0, __pyx_n_s_453, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_452)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2082; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____abs__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2082; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2085 * return abs(self) * * def __add__(self, y): # <<<<<<<<<<<<<< * return add(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_169__add__, 0, __pyx_n_s_456, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_455)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2085; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____add__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2085; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2088 * return add(self,y) * * def __and__(self, y): # <<<<<<<<<<<<<< * return logical_and(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_171__and__, 0, __pyx_n_s_459, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_458)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2088; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____and__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2088; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2091 * return logical_and(self,y) * * def __array__(self, dtype): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_173__array__, 0, __pyx_n_s_462, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_461)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____array__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2094 * raise NotImplementedError * * def __array_finalize__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_175__array_finalize__, 0, __pyx_n_s_465, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_464)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2094; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____array_finalize__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2094; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2097 * raise NotImplementedError * * def __array_interface__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_177__array_interface__, 0, __pyx_n_s_468, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_467)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2097; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____array_interface__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2097; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2100 * raise NotImplementedError * * def __array_prepare__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_179__array_prepare__, 0, __pyx_n_s_471, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_470)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____array_prepare__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2103 * raise NotImplementedError * * def __array_priority__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_181__array_priority__, 0, __pyx_n_s_474, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_473)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____array_priority__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2106 * raise NotImplementedError * * def __array_struct__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_183__array_struct__, 0, __pyx_n_s_477, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_476)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____array_struct__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2109 * raise NotImplementedError * * def __array_wrap__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_185__array_wrap__, 0, __pyx_n_s_480, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_479)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____array_wrap__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2112 * raise NotImplementedError * * def __contains__(self, y): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_187__contains__, 0, __pyx_n_s_483, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_482)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____contains__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2115 * raise NotImplementedError * * def __copy__(self, order=None): # <<<<<<<<<<<<<< * """Return a copy of the array. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_189__copy__, 0, __pyx_n_s_487, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_485)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_486)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____copy__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2129 * raise NotImplementedError * * def __deepcopy__(self): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_191__deepcopy__, 0, __pyx_n_s_490, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_489)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____deepcopy__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2134 * #def __delattr__ * * def __delitem__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise ValueError, "cannot delete array elements" * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_193__delitem__, 0, __pyx_n_s_493, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_492)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____delitem__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2139 * #def __delslice__ * * def __div__(self, y): # <<<<<<<<<<<<<< * return divide(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_195__div__, 0, __pyx_n_s_496, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_495)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____div__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2142 * return divide(self,y) * * def __divmod__(self, y): # <<<<<<<<<<<<<< * t = mod(self,y) * s = subtract(self,t) */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_197__divmod__, 0, __pyx_n_s_499, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_498)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____divmod__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2148 * return s,t * * def __eq__(self, y): # <<<<<<<<<<<<<< * return equal(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_199__eq__, 0, __pyx_n_s_502, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_501)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____eq__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2151 * return equal(self,y) * * def __float__(self): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_201__float__, 0, __pyx_n_s_505, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_504)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____float__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2154 * raise NotImplementedError * * def __floordiv__(self,y): # <<<<<<<<<<<<<< * return floor_divide(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_203__floordiv__, 0, __pyx_n_s_508, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_507)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____floordiv__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2159 * #def __format__ * * def __ge__(self,y): # <<<<<<<<<<<<<< * return greater_equal(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_205__ge__, 0, __pyx_n_s_511, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_510)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2159; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____ge__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2159; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2164 * #def __getattribute__ * * def __getitem__(self, key): # <<<<<<<<<<<<<< * # THIS IS A COLLECTIVE OPERATION * if isinstance(key, (str,unicode)): */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_207__getitem__, 0, __pyx_n_s_514, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_513)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____getitem__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2190 * #def __getslice__ * * def __gt__(self,y): # <<<<<<<<<<<<<< * return greater(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_209__gt__, 0, __pyx_n_s_517, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_516)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____gt__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2196 * #def __hex__ * * def __iadd__(self,y): # <<<<<<<<<<<<<< * return add(self,y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_211__iadd__, 0, __pyx_n_s_520, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_519)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____iadd__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2199 * return add(self,y,self) * * def __iand__(self,y): # <<<<<<<<<<<<<< * return logical_and(self,y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_213__iand__, 0, __pyx_n_s_523, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_522)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____iand__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2202 * return logical_and(self,y,self) * * def __idiv__(self,y): # <<<<<<<<<<<<<< * return divide(self,y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_215__idiv__, 0, __pyx_n_s_526, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_525)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____idiv__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2205 * return divide(self,y,self) * * def __ifloordiv__(self,y): # <<<<<<<<<<<<<< * return floor_divide(self,y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_217__ifloordiv__, 0, __pyx_n_s_529, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_528)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____ifloordiv__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2208 * return floor_divide(self,y,self) * * def __ilshift__(self,y): # <<<<<<<<<<<<<< * return left_shift(self,y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_219__ilshift__, 0, __pyx_n_s_532, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_531)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____ilshift__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2211 * return left_shift(self,y,self) * * def __imod__(self,y): # <<<<<<<<<<<<<< * return mod(self,y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_221__imod__, 0, __pyx_n_s_535, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_534)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____imod__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2214 * return mod(self,y,self) * * def __imul__(self,y): # <<<<<<<<<<<<<< * return multiply(self,y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_223__imul__, 0, __pyx_n_s_538, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_537)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____imul__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2219 * #def __index__ * * def __int__(self, *args, **kwargs): # <<<<<<<<<<<<<< * if self.size != 1: * raise TypeError, "only length-1 arrays can be converted to Python scalars" */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_225__int__, 0, __pyx_n_s_541, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_540)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____int__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2224 * return np.dtype(np.int32).type(self.allget()) * * def __invert__(self): # <<<<<<<<<<<<<< * return invert(self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_227__invert__, 0, __pyx_n_s_544, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_543)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2224; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____invert__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2224; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2227 * return invert(self) * * def __ior__(self,y): # <<<<<<<<<<<<<< * return logical_or(self,y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_229__ior__, 0, __pyx_n_s_547, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_546)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____ior__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2230 * return logical_or(self,y,self) * * def __ipow__(self,y): # <<<<<<<<<<<<<< * return power(self,y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_231__ipow__, 0, __pyx_n_s_550, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_549)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____ipow__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2233 * return power(self,y,self) * * def __irshift__(self,y): # <<<<<<<<<<<<<< * return right_shift(self,y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_233__irshift__, 0, __pyx_n_s_553, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_552)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____irshift__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2236 * return right_shift(self,y,self) * * def __isub__(self,y): # <<<<<<<<<<<<<< * return subtract(self,y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_235__isub__, 0, __pyx_n_s_556, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_555)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2236; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____isub__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2236; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2239 * return subtract(self,y,self) * * def __iter__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_237__iter__, 0, __pyx_n_s_559, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_558)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2239; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____iter__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2239; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2242 * raise NotImplementedError * * def __itruediv__(self,y): # <<<<<<<<<<<<<< * return true_divide(self,y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_239__itruediv__, 0, __pyx_n_s_562, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_561)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____itruediv__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2245 * return true_divide(self,y,self) * * def __ixor__(self,y): # <<<<<<<<<<<<<< * return logical_xor(self,y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_241__ixor__, 0, __pyx_n_s_565, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_564)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____ixor__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2248 * return logical_xor(self,y,self) * * def __le__(self,y): # <<<<<<<<<<<<<< * return less_equal(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_243__le__, 0, __pyx_n_s_568, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_567)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____le__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2251 * return less_equal(self,y) * * def __len__(self): # <<<<<<<<<<<<<< * return self.shape[0] * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_245__len__, 0, __pyx_n_s_571, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_570)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____len__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2254 * return self.shape[0] * * def __long__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_247__long__, 0, __pyx_n_s_574, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_573)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____long__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2257 * raise NotImplementedError * * def __lshift__(self,y): # <<<<<<<<<<<<<< * return left_shift(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_249__lshift__, 0, __pyx_n_s_577, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_576)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____lshift__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2260 * return left_shift(self,y) * * def __lt__(self,y): # <<<<<<<<<<<<<< * return less(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_251__lt__, 0, __pyx_n_s_580, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_579)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____lt__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2263 * return less(self,y) * * def __mod__(self,y): # <<<<<<<<<<<<<< * return mod(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_253__mod__, 0, __pyx_n_s_583, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_582)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2263; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____mod__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2263; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2266 * return mod(self,y) * * def __mul__(self,y): # <<<<<<<<<<<<<< * return multiply(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_255__mul__, 0, __pyx_n_s_586, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_585)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____mul__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2269 * return multiply(self,y) * * def __ne__(self,y): # <<<<<<<<<<<<<< * return not_equal(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_257__ne__, 0, __pyx_n_s_589, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_588)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____ne__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2272 * return not_equal(self,y) * * def __neg__(self): # <<<<<<<<<<<<<< * return negative(self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_259__neg__, 0, __pyx_n_s_592, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_591)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____neg__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2275 * return negative(self) * * def __nonzero__(self): # <<<<<<<<<<<<<< * raise ValueError, ("The truth value of an array with more than one" * " element is ambiguous. Use a.any() or a.all()") */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_261__nonzero__, 0, __pyx_n_s_595, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_594)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____nonzero__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2279 * " element is ambiguous. Use a.any() or a.all()") * * def __oct__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_263__oct__, 0, __pyx_n_s_598, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_597)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____oct__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2282 * raise NotImplementedError * * def __or__(self,y): # <<<<<<<<<<<<<< * return logical_or(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_265__or__, 0, __pyx_n_s_601, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_600)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____or__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2285 * return logical_or(self,y) * * def __pos__(self): # <<<<<<<<<<<<<< * return self.copy() * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_267__pos__, 0, __pyx_n_s_604, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_603)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____pos__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2288 * return self.copy() * * def __pow__(self,y): # <<<<<<<<<<<<<< * return power(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_269__pow__, 0, __pyx_n_s_607, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_606)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____pow__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2291 * return power(self,y) * * def __radd__(self,y): # <<<<<<<<<<<<<< * return add(y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_271__radd__, 0, __pyx_n_s_610, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_609)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____radd__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2294 * return add(y,self) * * def __rand__(self,y): # <<<<<<<<<<<<<< * return logical_and(y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_273__rand__, 0, __pyx_n_s_613, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_612)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____rand__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2297 * return logical_and(y,self) * * def __rdiv__(self,y): # <<<<<<<<<<<<<< * return divide(y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_275__rdiv__, 0, __pyx_n_s_616, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_615)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____rdiv__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2300 * return divide(y,self) * * def __rdivmod__(self,y): # <<<<<<<<<<<<<< * t = mod(y,self) * s = subtract(y,t) */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_277__rdivmod__, 0, __pyx_n_s_619, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_618)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____rdivmod__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2306 * return s,t * * def __reduce__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_279__reduce__, 0, __pyx_n_s_622, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_621)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____reduce__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2309 * raise NotImplementedError * * def __reduce_ex__(self, *args, **kwargs): # <<<<<<<<<<<<<< * raise NotImplementedError * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_281__reduce_ex__, 0, __pyx_n_s_625, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_624)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2309; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____reduce_ex__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2309; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2312 * raise NotImplementedError * * def __repr__(self): # <<<<<<<<<<<<<< * result = "" * if 0 == me(): */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_283__repr__, 0, __pyx_n_s_628, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_627)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____repr__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2318 * return result * * def __rfloordiv__(self,y): # <<<<<<<<<<<<<< * return floor_divide(y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_285__rfloordiv__, 0, __pyx_n_s_631, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_630)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____rfloordiv__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2321 * return floor_divide(y,self) * * def __rlshift__(self,y): # <<<<<<<<<<<<<< * return left_shift(y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_287__rlshift__, 0, __pyx_n_s_634, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_633)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____rlshift__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2324 * return left_shift(y,self) * * def __rmod__(self,y): # <<<<<<<<<<<<<< * return mod(y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_289__rmod__, 0, __pyx_n_s_637, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_636)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____rmod__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2327 * return mod(y,self) * * def __rmul__(self,y): # <<<<<<<<<<<<<< * return multiply(y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_291__rmul__, 0, __pyx_n_s_640, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_639)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____rmul__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2330 * return multiply(y,self) * * def __ror__(self,y): # <<<<<<<<<<<<<< * return logical_or(y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_293__ror__, 0, __pyx_n_s_643, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_642)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____ror__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2333 * return logical_or(y,self) * * def __rpow__(self,y): # <<<<<<<<<<<<<< * return power(y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_295__rpow__, 0, __pyx_n_s_646, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_645)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____rpow__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2336 * return power(y,self) * * def __rrshift__(self,y): # <<<<<<<<<<<<<< * return right_shift(y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_297__rrshift__, 0, __pyx_n_s_649, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_648)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2336; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____rrshift__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2336; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2339 * return right_shift(y,self) * * def __rshift__(self,y): # <<<<<<<<<<<<<< * return right_shift(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_299__rshift__, 0, __pyx_n_s_652, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_651)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2339; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____rshift__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2339; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2342 * return right_shift(self,y) * * def __rsub__(self,y): # <<<<<<<<<<<<<< * return subtract(y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_301__rsub__, 0, __pyx_n_s_655, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_654)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____rsub__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2345 * return subtract(y,self) * * def __rtruediv__(self,y): # <<<<<<<<<<<<<< * return true_divide(y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_303__rtruediv__, 0, __pyx_n_s_658, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_657)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____rtruediv__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2348 * return true_divide(y,self) * * def __rxor__(self,y): # <<<<<<<<<<<<<< * return logical_xor(y,self) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_305__rxor__, 0, __pyx_n_s_661, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_660)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2348; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____rxor__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2348; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2353 * #def __setattr__ * * def __setitem__(self, key, value): # <<<<<<<<<<<<<< * # THIS IS A COLLECTIVE OPERATION * sync() */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_307__setitem__, 0, __pyx_n_s_664, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_663)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____setitem__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2353; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2408 * #def __sizeof__ * * def __str__(self): # <<<<<<<<<<<<<< * result = "" * if 0 == me(): */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_309__str__, 0, __pyx_n_s_667, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_666)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____str__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2414 * return result * * def __sub__(self,y): # <<<<<<<<<<<<<< * return subtract(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_311__sub__, 0, __pyx_n_s_670, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_669)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____sub__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2419 * #def __subclasshook__ * * def __truediv__(self,y): # <<<<<<<<<<<<<< * return true_divide(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_313__truediv__, 0, __pyx_n_s_673, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_672)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____truediv__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":2422 * return true_divide(self,y) * * def __xor__(self,y): # <<<<<<<<<<<<<< * return logical_xor(self,y) * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_7ndarray_315__xor__, 0, __pyx_n_s_676, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_675)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____xor__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2422; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":189 * ga_cache = GlobalArrayCache() * * class ndarray(object): # <<<<<<<<<<<<<< * """ndarray(shape, dtype=float, buffer=None, offset=0, * strides=None, order=None) */ __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_builtin_object); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_builtin_object); __Pyx_GIVEREF(__pyx_builtin_object); if (PyDict_SetItemString(((PyObject *)__pyx_t_3), "__doc__", ((PyObject *)__pyx_kp_s_677)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = __Pyx_CreateClass(((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_3), __pyx_n_s__ndarray, __pyx_n_s__ndarray, __pyx_n_s_24); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__ndarray, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2425 * return logical_xor(self,y) * * def _npin_piece_based_on_out(input, out, shape=None): # <<<<<<<<<<<<<< * # opt: same distributions and same slicing * # we can use local data exclusively */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_27_npin_piece_based_on_out, NULL, __pyx_n_s_24); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2425; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_66, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2425; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2447 * return input,False * * class ufunc(object): # <<<<<<<<<<<<<< * """Functions that operate element by element on whole arrays. * */ __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); /* "ga4py/gain/core.pyx":2500 * * """ * def __init__(self, func): # <<<<<<<<<<<<<< * self.func = func * self.__doc__ = func.__doc__ */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_5ufunc_1__init__, 0, __pyx_n_s_682, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_681)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____init__, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2504 * self.__doc__ = func.__doc__ * * def _get_identity(self): # <<<<<<<<<<<<<< * return self.func.identity * identity = property(_get_identity) */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_5ufunc_3_get_identity, 0, __pyx_n_s_685, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_684)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2504; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_identity, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2504; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2506 * def _get_identity(self): * return self.func.identity * identity = property(_get_identity) # <<<<<<<<<<<<<< * * def _get_nargs(self): */ __pyx_t_1 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_identity); if (unlikely(!__pyx_t_1)) { PyErr_Clear(); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_identity); } if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2506; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2506; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2506; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__identity, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2506; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2508 * identity = property(_get_identity) * * def _get_nargs(self): # <<<<<<<<<<<<<< * return self.func.nargs * nargs = property(_get_nargs) */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_5ufunc_5_get_nargs, 0, __pyx_n_s_688, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_687)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2508; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_nargs, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2508; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2510 * def _get_nargs(self): * return self.func.nargs * nargs = property(_get_nargs) # <<<<<<<<<<<<<< * * def _get_nin(self): */ __pyx_t_1 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_nargs); if (unlikely(!__pyx_t_1)) { PyErr_Clear(); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_nargs); } if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2510; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2510; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2510; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__nargs, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2510; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2512 * nargs = property(_get_nargs) * * def _get_nin(self): # <<<<<<<<<<<<<< * return self.func.nin * nin = property(_get_nin) */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_5ufunc_7_get_nin, 0, __pyx_n_s_691, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_690)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2512; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_nin, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2512; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2514 * def _get_nin(self): * return self.func.nin * nin = property(_get_nin) # <<<<<<<<<<<<<< * * def _get_nout(self): */ __pyx_t_1 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_nin); if (unlikely(!__pyx_t_1)) { PyErr_Clear(); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_nin); } if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__nin, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2516 * nin = property(_get_nin) * * def _get_nout(self): # <<<<<<<<<<<<<< * return self.func.nout * nout = property(_get_nout) */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_5ufunc_9_get_nout, 0, __pyx_n_s_694, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_693)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2516; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_nout, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2516; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2518 * def _get_nout(self): * return self.func.nout * nout = property(_get_nout) # <<<<<<<<<<<<<< * * def _get_ntypes(self): */ __pyx_t_1 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_nout); if (unlikely(!__pyx_t_1)) { PyErr_Clear(); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_nout); } if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2518; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2518; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2518; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__nout, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2518; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2520 * nout = property(_get_nout) * * def _get_ntypes(self): # <<<<<<<<<<<<<< * return self.func.ntypes * ntypes = property(_get_ntypes) */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_5ufunc_11_get_ntypes, 0, __pyx_n_s_697, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_696)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_ntypes, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2522 * def _get_ntypes(self): * return self.func.ntypes * ntypes = property(_get_ntypes) # <<<<<<<<<<<<<< * * def _get_signature(self): */ __pyx_t_1 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_ntypes); if (unlikely(!__pyx_t_1)) { PyErr_Clear(); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_ntypes); } if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2522; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2522; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2522; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__ntypes, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2522; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2524 * ntypes = property(_get_ntypes) * * def _get_signature(self): # <<<<<<<<<<<<<< * return self.func.signature * signature = property(_get_signature) */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_5ufunc_13_get_signature, 0, __pyx_n_s_700, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_699)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2524; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_signature, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2524; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2526 * def _get_signature(self): * return self.func.signature * signature = property(_get_signature) # <<<<<<<<<<<<<< * * def _get_types(self): */ __pyx_t_1 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_signature); if (unlikely(!__pyx_t_1)) { PyErr_Clear(); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_signature); } if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2526; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2526; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2526; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__signature, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2526; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2528 * signature = property(_get_signature) * * def _get_types(self): # <<<<<<<<<<<<<< * return self.func.types * types = property(_get_types) */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_5ufunc_15_get_types, 0, __pyx_n_s_703, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_702)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___get_types, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2530 * def _get_types(self): * return self.func.types * types = property(_get_types) # <<<<<<<<<<<<<< * * def __call__(self, *args, **kwargs): */ __pyx_t_1 = PyObject_GetItem(__pyx_t_3, __pyx_n_s___get_types); if (unlikely(!__pyx_t_1)) { PyErr_Clear(); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_types); } if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__types, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2532 * types = property(_get_types) * * def __call__(self, *args, **kwargs): # <<<<<<<<<<<<<< * if self.func.nin == 1: * return self._unary_call(*args, **kwargs) */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_5ufunc_17__call__, 0, __pyx_n_s_706, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_705)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s____call__, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2540 * raise ValueError, "only unary and binary ufuncs supported" * * def _unary_call(self, input, out=None, *args, **kwargs): # <<<<<<<<<<<<<< * input = asarray(input) * input_shape = get_shape(input) */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_5ufunc_19_unary_call, 0, __pyx_n_s_710, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_708)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, ((PyObject *)__pyx_k_tuple_709)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___unary_call, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2605 * return out * * def _binary_call(self, first, second, out=None, *args, **kwargs): # <<<<<<<<<<<<<< * first_isscalar = np.isscalar(first) * second_isscalar = np.isscalar(second) */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_5ufunc_21_binary_call, 0, __pyx_n_s_714, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_712)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2605; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, ((PyObject *)__pyx_k_tuple_713)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s___binary_call, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2605; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2707 * return out * * def reduce(self, a, axis=0, dtype=None, out=None, *args, **kwargs): # <<<<<<<<<<<<<< * """reduce(a, axis=0, dtype=None, out=None) * */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_5ufunc_23reduce, 0, __pyx_n_s_718, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_716)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, ((PyObject *)__pyx_k_tuple_717)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__reduce, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2887 * return out * * def accumulate(self, a, axis=0, dtype=None, out=None, *args, **kwargs): # <<<<<<<<<<<<<< * if self.func.nin != 2: * raise ValueError, "accumulate only supported for binary functions" */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_5ufunc_25accumulate, 0, __pyx_n_s_722, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_720)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, ((PyObject *)__pyx_k_tuple_721)); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__accumulate, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2945 * return out * * def outer(self, *args, **kwargs): # <<<<<<<<<<<<<< * if self.func.nin != 2: * raise ValueError, "outer product only supported for binary functions" */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_5ufunc_27outer, 0, __pyx_n_s_725, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_724)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2945; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__outer, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2945; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2950 * raise NotImplementedError * * def reduceat(self, *args, **kwargs): # <<<<<<<<<<<<<< * if self.func.nin != 2: * raise ValueError, "reduceat only supported for binary functions" */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_5ufunc_29reduceat, 0, __pyx_n_s_728, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_727)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2950; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyObject_SetItem(__pyx_t_3, __pyx_n_s__reduceat, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2950; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2447 * return input,False * * class ufunc(object): # <<<<<<<<<<<<<< * """Functions that operate element by element on whole arrays. * */ __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_builtin_object); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_object); __Pyx_GIVEREF(__pyx_builtin_object); if (PyDict_SetItemString(((PyObject *)__pyx_t_3), "__doc__", ((PyObject *)__pyx_kp_s_729)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_CreateClass(((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_3), __pyx_n_s__ufunc, __pyx_n_s__ufunc, __pyx_n_s_24); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__ufunc, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2956 * * # unary ufuncs * abs = ufunc(np.abs) # <<<<<<<<<<<<<< * absolute = abs * arccos = ufunc(np.arccos) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2956; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2956; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__abs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2956; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2956; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2956; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__abs, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2956; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2957 * # unary ufuncs * abs = ufunc(np.abs) * absolute = abs # <<<<<<<<<<<<<< * arccos = ufunc(np.arccos) * arccosh = ufunc(np.arccosh) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__abs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__absolute, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2958 * abs = ufunc(np.abs) * absolute = abs * arccos = ufunc(np.arccos) # <<<<<<<<<<<<<< * arccosh = ufunc(np.arccosh) * arcsin = ufunc(np.arcsin) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__arccos); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__arccos, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2959 * absolute = abs * arccos = ufunc(np.arccos) * arccosh = ufunc(np.arccosh) # <<<<<<<<<<<<<< * arcsin = ufunc(np.arcsin) * arcsinh = ufunc(np.arcsinh) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__arccosh); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__arccosh, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2960 * arccos = ufunc(np.arccos) * arccosh = ufunc(np.arccosh) * arcsin = ufunc(np.arcsin) # <<<<<<<<<<<<<< * arcsinh = ufunc(np.arcsinh) * arctan = ufunc(np.arctan) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__arcsin); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__arcsin, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2961 * arccosh = ufunc(np.arccosh) * arcsin = ufunc(np.arcsin) * arcsinh = ufunc(np.arcsinh) # <<<<<<<<<<<<<< * arctan = ufunc(np.arctan) * arctanh = ufunc(np.arctanh) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2961; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2961; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__arcsinh); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2961; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2961; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2961; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__arcsinh, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2961; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2962 * arcsin = ufunc(np.arcsin) * arcsinh = ufunc(np.arcsinh) * arctan = ufunc(np.arctan) # <<<<<<<<<<<<<< * arctanh = ufunc(np.arctanh) * bitwise_not = ufunc(np.bitwise_not) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2962; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2962; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__arctan); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2962; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2962; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2962; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__arctan, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2962; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2963 * arcsinh = ufunc(np.arcsinh) * arctan = ufunc(np.arctan) * arctanh = ufunc(np.arctanh) # <<<<<<<<<<<<<< * bitwise_not = ufunc(np.bitwise_not) * ceil = ufunc(np.ceil) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__arctanh); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__arctanh, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2964 * arctan = ufunc(np.arctan) * arctanh = ufunc(np.arctanh) * bitwise_not = ufunc(np.bitwise_not) # <<<<<<<<<<<<<< * ceil = ufunc(np.ceil) * conj = ufunc(np.conj) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__bitwise_not); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__bitwise_not, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2965 * arctanh = ufunc(np.arctanh) * bitwise_not = ufunc(np.bitwise_not) * ceil = ufunc(np.ceil) # <<<<<<<<<<<<<< * conj = ufunc(np.conj) * conjugate = ufunc(np.conjugate) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2965; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2965; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__ceil); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2965; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2965; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2965; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__ceil, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2965; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2966 * bitwise_not = ufunc(np.bitwise_not) * ceil = ufunc(np.ceil) * conj = ufunc(np.conj) # <<<<<<<<<<<<<< * conjugate = ufunc(np.conjugate) * cos = ufunc(np.cos) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__conj); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__conj, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2966; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2967 * ceil = ufunc(np.ceil) * conj = ufunc(np.conj) * conjugate = ufunc(np.conjugate) # <<<<<<<<<<<<<< * cos = ufunc(np.cos) * cosh = ufunc(np.cosh) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__conjugate); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__conjugate, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2967; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2968 * conj = ufunc(np.conj) * conjugate = ufunc(np.conjugate) * cos = ufunc(np.cos) # <<<<<<<<<<<<<< * cosh = ufunc(np.cosh) * deg2rad = ufunc(np.deg2rad) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__cos); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__cos, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2969 * conjugate = ufunc(np.conjugate) * cos = ufunc(np.cos) * cosh = ufunc(np.cosh) # <<<<<<<<<<<<<< * deg2rad = ufunc(np.deg2rad) * degrees = ufunc(np.degrees) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2969; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2969; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__cosh); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2969; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2969; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2969; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__cosh, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2969; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2970 * cos = ufunc(np.cos) * cosh = ufunc(np.cosh) * deg2rad = ufunc(np.deg2rad) # <<<<<<<<<<<<<< * degrees = ufunc(np.degrees) * exp = ufunc(np.exp) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__deg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__deg2rad, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2971 * cosh = ufunc(np.cosh) * deg2rad = ufunc(np.deg2rad) * degrees = ufunc(np.degrees) # <<<<<<<<<<<<<< * exp = ufunc(np.exp) * exp2 = ufunc(np.exp2) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__degrees); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__degrees, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2972 * deg2rad = ufunc(np.deg2rad) * degrees = ufunc(np.degrees) * exp = ufunc(np.exp) # <<<<<<<<<<<<<< * exp2 = ufunc(np.exp2) * expm1 = ufunc(np.expm1) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__exp); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__exp, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2973 * degrees = ufunc(np.degrees) * exp = ufunc(np.exp) * exp2 = ufunc(np.exp2) # <<<<<<<<<<<<<< * expm1 = ufunc(np.expm1) * fabs = ufunc(np.fabs) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2973; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2973; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__exp2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2973; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2973; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2973; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__exp2, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2973; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2974 * exp = ufunc(np.exp) * exp2 = ufunc(np.exp2) * expm1 = ufunc(np.expm1) # <<<<<<<<<<<<<< * fabs = ufunc(np.fabs) * floor = ufunc(np.floor) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__expm1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__expm1, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2974; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2975 * exp2 = ufunc(np.exp2) * expm1 = ufunc(np.expm1) * fabs = ufunc(np.fabs) # <<<<<<<<<<<<<< * floor = ufunc(np.floor) * frexp = ufunc(np.frexp) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__fabs); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__fabs, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2976 * expm1 = ufunc(np.expm1) * fabs = ufunc(np.fabs) * floor = ufunc(np.floor) # <<<<<<<<<<<<<< * frexp = ufunc(np.frexp) * invert = ufunc(np.invert) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__floor); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__floor, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2977 * fabs = ufunc(np.fabs) * floor = ufunc(np.floor) * frexp = ufunc(np.frexp) # <<<<<<<<<<<<<< * invert = ufunc(np.invert) * isfinite = ufunc(np.isfinite) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2977; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2977; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__frexp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2977; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2977; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2977; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__frexp, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2977; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2978 * floor = ufunc(np.floor) * frexp = ufunc(np.frexp) * invert = ufunc(np.invert) # <<<<<<<<<<<<<< * isfinite = ufunc(np.isfinite) * isinf = ufunc(np.isinf) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2978; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2978; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__invert); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2978; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2978; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2978; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__invert, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2978; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2979 * frexp = ufunc(np.frexp) * invert = ufunc(np.invert) * isfinite = ufunc(np.isfinite) # <<<<<<<<<<<<<< * isinf = ufunc(np.isinf) * isnan = ufunc(np.isnan) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__isfinite); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__isfinite, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2980 * invert = ufunc(np.invert) * isfinite = ufunc(np.isfinite) * isinf = ufunc(np.isinf) # <<<<<<<<<<<<<< * isnan = ufunc(np.isnan) * log = ufunc(np.log) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__isinf); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__isinf, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2980; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2981 * isfinite = ufunc(np.isfinite) * isinf = ufunc(np.isinf) * isnan = ufunc(np.isnan) # <<<<<<<<<<<<<< * log = ufunc(np.log) * log2 = ufunc(np.log2) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2981; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2981; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__isnan); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2981; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2981; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2981; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__isnan, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2981; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2982 * isinf = ufunc(np.isinf) * isnan = ufunc(np.isnan) * log = ufunc(np.log) # <<<<<<<<<<<<<< * log2 = ufunc(np.log2) * log10 = ufunc(np.log10) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2982; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2982; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__log); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2982; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2982; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2982; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__log, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2982; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2983 * isnan = ufunc(np.isnan) * log = ufunc(np.log) * log2 = ufunc(np.log2) # <<<<<<<<<<<<<< * log10 = ufunc(np.log10) * log1p = ufunc(np.log1p) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2983; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2983; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__log2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2983; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2983; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2983; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__log2, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2983; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2984 * log = ufunc(np.log) * log2 = ufunc(np.log2) * log10 = ufunc(np.log10) # <<<<<<<<<<<<<< * log1p = ufunc(np.log1p) * logical_not = ufunc(np.logical_not) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__log10); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__log10, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2985 * log2 = ufunc(np.log2) * log10 = ufunc(np.log10) * log1p = ufunc(np.log1p) # <<<<<<<<<<<<<< * logical_not = ufunc(np.logical_not) * modf = ufunc(np.modf) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2985; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2985; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__log1p); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2985; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2985; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2985; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__log1p, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2985; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2986 * log10 = ufunc(np.log10) * log1p = ufunc(np.log1p) * logical_not = ufunc(np.logical_not) # <<<<<<<<<<<<<< * modf = ufunc(np.modf) * negative = ufunc(np.negative) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2986; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2986; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__logical_not); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2986; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2986; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2986; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__logical_not, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2986; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2987 * log1p = ufunc(np.log1p) * logical_not = ufunc(np.logical_not) * modf = ufunc(np.modf) # <<<<<<<<<<<<<< * negative = ufunc(np.negative) * rad2deg = ufunc(np.rad2deg) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2987; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2987; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__modf); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2987; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2987; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2987; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__modf, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2987; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2988 * logical_not = ufunc(np.logical_not) * modf = ufunc(np.modf) * negative = ufunc(np.negative) # <<<<<<<<<<<<<< * rad2deg = ufunc(np.rad2deg) * radians = ufunc(np.radians) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2988; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2988; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__negative); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2988; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2988; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2988; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__negative, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2988; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2989 * modf = ufunc(np.modf) * negative = ufunc(np.negative) * rad2deg = ufunc(np.rad2deg) # <<<<<<<<<<<<<< * radians = ufunc(np.radians) * reciprocal = ufunc(np.reciprocal) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2989; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2989; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__rad2deg); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2989; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2989; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2989; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__rad2deg, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2989; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2990 * negative = ufunc(np.negative) * rad2deg = ufunc(np.rad2deg) * radians = ufunc(np.radians) # <<<<<<<<<<<<<< * reciprocal = ufunc(np.reciprocal) * rint = ufunc(np.rint) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2990; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2990; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__radians); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2990; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2990; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2990; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__radians, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2990; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2991 * rad2deg = ufunc(np.rad2deg) * radians = ufunc(np.radians) * reciprocal = ufunc(np.reciprocal) # <<<<<<<<<<<<<< * rint = ufunc(np.rint) * sign = ufunc(np.sign) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__reciprocal); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__reciprocal, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2991; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2992 * radians = ufunc(np.radians) * reciprocal = ufunc(np.reciprocal) * rint = ufunc(np.rint) # <<<<<<<<<<<<<< * sign = ufunc(np.sign) * signbit = ufunc(np.signbit) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2992; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2992; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__rint); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2992; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2992; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2992; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__rint, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2992; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2993 * reciprocal = ufunc(np.reciprocal) * rint = ufunc(np.rint) * sign = ufunc(np.sign) # <<<<<<<<<<<<<< * signbit = ufunc(np.signbit) * sin = ufunc(np.sin) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2993; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2993; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__sign); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2993; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2993; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2993; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__sign, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2993; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2994 * rint = ufunc(np.rint) * sign = ufunc(np.sign) * signbit = ufunc(np.signbit) # <<<<<<<<<<<<<< * sin = ufunc(np.sin) * sinh = ufunc(np.sinh) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2994; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2994; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__signbit); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2994; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2994; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2994; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__signbit, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2994; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2995 * sign = ufunc(np.sign) * signbit = ufunc(np.signbit) * sin = ufunc(np.sin) # <<<<<<<<<<<<<< * sinh = ufunc(np.sinh) * spacing = ufunc(np.spacing) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2995; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2995; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__sin); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2995; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2995; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2995; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__sin, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2995; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2996 * signbit = ufunc(np.signbit) * sin = ufunc(np.sin) * sinh = ufunc(np.sinh) # <<<<<<<<<<<<<< * spacing = ufunc(np.spacing) * sqrt = ufunc(np.sqrt) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2996; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2996; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__sinh); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2996; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2996; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2996; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__sinh, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2996; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2997 * sin = ufunc(np.sin) * sinh = ufunc(np.sinh) * spacing = ufunc(np.spacing) # <<<<<<<<<<<<<< * sqrt = ufunc(np.sqrt) * square = ufunc(np.square) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2997; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2997; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__spacing); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2997; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2997; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2997; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__spacing, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2997; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":2998 * sinh = ufunc(np.sinh) * spacing = ufunc(np.spacing) * sqrt = ufunc(np.sqrt) # <<<<<<<<<<<<<< * square = ufunc(np.square) * tan = ufunc(np.tan) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2998; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2998; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__sqrt); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2998; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2998; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2998; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__sqrt, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2998; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":2999 * spacing = ufunc(np.spacing) * sqrt = ufunc(np.sqrt) * square = ufunc(np.square) # <<<<<<<<<<<<<< * tan = ufunc(np.tan) * tanh = ufunc(np.tanh) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2999; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2999; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__square); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2999; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2999; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2999; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__square, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2999; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3000 * sqrt = ufunc(np.sqrt) * square = ufunc(np.square) * tan = ufunc(np.tan) # <<<<<<<<<<<<<< * tanh = ufunc(np.tanh) * trunc = ufunc(np.trunc) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3000; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3000; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__tan); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3000; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3000; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3000; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__tan, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3000; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3001 * square = ufunc(np.square) * tan = ufunc(np.tan) * tanh = ufunc(np.tanh) # <<<<<<<<<<<<<< * trunc = ufunc(np.trunc) * # binary ufuncs */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3001; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3001; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__tanh); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3001; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3001; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3001; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__tanh, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3001; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3002 * tan = ufunc(np.tan) * tanh = ufunc(np.tanh) * trunc = ufunc(np.trunc) # <<<<<<<<<<<<<< * # binary ufuncs * add = ufunc(np.add) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3002; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3002; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__trunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3002; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3002; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3002; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__trunc, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3002; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3004 * trunc = ufunc(np.trunc) * # binary ufuncs * add = ufunc(np.add) # <<<<<<<<<<<<<< * arctan2 = ufunc(np.arctan2) * bitwise_and = ufunc(np.bitwise_and) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3004; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3004; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__add); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3004; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3004; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3004; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__add, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3004; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3005 * # binary ufuncs * add = ufunc(np.add) * arctan2 = ufunc(np.arctan2) # <<<<<<<<<<<<<< * bitwise_and = ufunc(np.bitwise_and) * bitwise_or = ufunc(np.bitwise_or) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3005; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3005; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__arctan2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3005; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3005; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3005; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__arctan2, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3005; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3006 * add = ufunc(np.add) * arctan2 = ufunc(np.arctan2) * bitwise_and = ufunc(np.bitwise_and) # <<<<<<<<<<<<<< * bitwise_or = ufunc(np.bitwise_or) * bitwise_xor = ufunc(np.bitwise_xor) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3006; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3006; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__bitwise_and); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3006; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3006; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3006; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__bitwise_and, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3006; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3007 * arctan2 = ufunc(np.arctan2) * bitwise_and = ufunc(np.bitwise_and) * bitwise_or = ufunc(np.bitwise_or) # <<<<<<<<<<<<<< * bitwise_xor = ufunc(np.bitwise_xor) * copysign = ufunc(np.copysign) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3007; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3007; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__bitwise_or); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3007; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3007; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3007; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__bitwise_or, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3007; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3008 * bitwise_and = ufunc(np.bitwise_and) * bitwise_or = ufunc(np.bitwise_or) * bitwise_xor = ufunc(np.bitwise_xor) # <<<<<<<<<<<<<< * copysign = ufunc(np.copysign) * divide = ufunc(np.divide) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3008; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3008; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__bitwise_xor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3008; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3008; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3008; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__bitwise_xor, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3008; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3009 * bitwise_or = ufunc(np.bitwise_or) * bitwise_xor = ufunc(np.bitwise_xor) * copysign = ufunc(np.copysign) # <<<<<<<<<<<<<< * divide = ufunc(np.divide) * equal = ufunc(np.equal) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3009; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3009; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__copysign); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3009; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3009; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3009; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__copysign, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3009; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3010 * bitwise_xor = ufunc(np.bitwise_xor) * copysign = ufunc(np.copysign) * divide = ufunc(np.divide) # <<<<<<<<<<<<<< * equal = ufunc(np.equal) * floor_divide = ufunc(np.floor_divide) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3010; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3010; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__divide); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3010; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3010; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3010; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__divide, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3010; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3011 * copysign = ufunc(np.copysign) * divide = ufunc(np.divide) * equal = ufunc(np.equal) # <<<<<<<<<<<<<< * floor_divide = ufunc(np.floor_divide) * fmax = ufunc(np.fmax) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3011; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3011; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__equal); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3011; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3011; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3011; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__equal, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3011; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3012 * divide = ufunc(np.divide) * equal = ufunc(np.equal) * floor_divide = ufunc(np.floor_divide) # <<<<<<<<<<<<<< * fmax = ufunc(np.fmax) * fmin = ufunc(np.fmin) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3012; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3012; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__floor_divide); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3012; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3012; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3012; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__floor_divide, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3012; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3013 * equal = ufunc(np.equal) * floor_divide = ufunc(np.floor_divide) * fmax = ufunc(np.fmax) # <<<<<<<<<<<<<< * fmin = ufunc(np.fmin) * fmod = ufunc(np.fmod) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3013; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3013; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__fmax); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3013; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3013; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3013; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__fmax, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3013; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3014 * floor_divide = ufunc(np.floor_divide) * fmax = ufunc(np.fmax) * fmin = ufunc(np.fmin) # <<<<<<<<<<<<<< * fmod = ufunc(np.fmod) * greater = ufunc(np.greater) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3014; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3014; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__fmin); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3014; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3014; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3014; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__fmin, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3014; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3015 * fmax = ufunc(np.fmax) * fmin = ufunc(np.fmin) * fmod = ufunc(np.fmod) # <<<<<<<<<<<<<< * greater = ufunc(np.greater) * greater_equal = ufunc(np.greater_equal) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3015; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3015; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__fmod); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3015; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3015; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3015; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__fmod, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3015; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3016 * fmin = ufunc(np.fmin) * fmod = ufunc(np.fmod) * greater = ufunc(np.greater) # <<<<<<<<<<<<<< * greater_equal = ufunc(np.greater_equal) * hypot = ufunc(np.hypot) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3016; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3016; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__greater); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3016; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3016; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3016; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__greater, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3016; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3017 * fmod = ufunc(np.fmod) * greater = ufunc(np.greater) * greater_equal = ufunc(np.greater_equal) # <<<<<<<<<<<<<< * hypot = ufunc(np.hypot) * ldexp = ufunc(np.ldexp) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3017; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3017; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__greater_equal); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3017; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3017; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3017; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__greater_equal, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3017; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3018 * greater = ufunc(np.greater) * greater_equal = ufunc(np.greater_equal) * hypot = ufunc(np.hypot) # <<<<<<<<<<<<<< * ldexp = ufunc(np.ldexp) * left_shift = ufunc(np.left_shift) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__hypot); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__hypot, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3019 * greater_equal = ufunc(np.greater_equal) * hypot = ufunc(np.hypot) * ldexp = ufunc(np.ldexp) # <<<<<<<<<<<<<< * left_shift = ufunc(np.left_shift) * less = ufunc(np.less) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__ldexp); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__ldexp, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3019; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3020 * hypot = ufunc(np.hypot) * ldexp = ufunc(np.ldexp) * left_shift = ufunc(np.left_shift) # <<<<<<<<<<<<<< * less = ufunc(np.less) * less_equal = ufunc(np.less_equal) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3020; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3020; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__left_shift); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3020; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3020; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3020; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__left_shift, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3020; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3021 * ldexp = ufunc(np.ldexp) * left_shift = ufunc(np.left_shift) * less = ufunc(np.less) # <<<<<<<<<<<<<< * less_equal = ufunc(np.less_equal) * logaddexp = ufunc(np.logaddexp) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3021; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3021; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__less); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3021; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3021; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3021; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__less, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3021; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3022 * left_shift = ufunc(np.left_shift) * less = ufunc(np.less) * less_equal = ufunc(np.less_equal) # <<<<<<<<<<<<<< * logaddexp = ufunc(np.logaddexp) * logaddexp2 = ufunc(np.logaddexp2) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3022; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3022; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__less_equal); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3022; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3022; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3022; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__less_equal, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3022; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3023 * less = ufunc(np.less) * less_equal = ufunc(np.less_equal) * logaddexp = ufunc(np.logaddexp) # <<<<<<<<<<<<<< * logaddexp2 = ufunc(np.logaddexp2) * logical_and = ufunc(np.logical_and) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3023; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3023; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__logaddexp); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3023; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3023; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3023; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__logaddexp, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3023; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3024 * less_equal = ufunc(np.less_equal) * logaddexp = ufunc(np.logaddexp) * logaddexp2 = ufunc(np.logaddexp2) # <<<<<<<<<<<<<< * logical_and = ufunc(np.logical_and) * logical_or = ufunc(np.logical_or) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__logaddexp2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__logaddexp2, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3025 * logaddexp = ufunc(np.logaddexp) * logaddexp2 = ufunc(np.logaddexp2) * logical_and = ufunc(np.logical_and) # <<<<<<<<<<<<<< * logical_or = ufunc(np.logical_or) * logical_xor = ufunc(np.logical_xor) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3025; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3025; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__logical_and); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3025; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3025; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3025; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__logical_and, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3025; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3026 * logaddexp2 = ufunc(np.logaddexp2) * logical_and = ufunc(np.logical_and) * logical_or = ufunc(np.logical_or) # <<<<<<<<<<<<<< * logical_xor = ufunc(np.logical_xor) * maximum = ufunc(np.maximum) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__logical_or); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__logical_or, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3027 * logical_and = ufunc(np.logical_and) * logical_or = ufunc(np.logical_or) * logical_xor = ufunc(np.logical_xor) # <<<<<<<<<<<<<< * maximum = ufunc(np.maximum) * minimum = ufunc(np.minimum) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3027; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3027; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__logical_xor); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3027; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3027; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3027; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__logical_xor, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3027; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3028 * logical_or = ufunc(np.logical_or) * logical_xor = ufunc(np.logical_xor) * maximum = ufunc(np.maximum) # <<<<<<<<<<<<<< * minimum = ufunc(np.minimum) * mod = ufunc(np.mod) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3028; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3028; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__maximum); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3028; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3028; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3028; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__maximum, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3028; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3029 * logical_xor = ufunc(np.logical_xor) * maximum = ufunc(np.maximum) * minimum = ufunc(np.minimum) # <<<<<<<<<<<<<< * mod = ufunc(np.mod) * multiply = ufunc(np.multiply) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3029; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3029; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__minimum); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3029; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3029; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3029; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__minimum, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3029; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3030 * maximum = ufunc(np.maximum) * minimum = ufunc(np.minimum) * mod = ufunc(np.mod) # <<<<<<<<<<<<<< * multiply = ufunc(np.multiply) * nextafter = ufunc(np.nextafter) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3030; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3030; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__mod); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3030; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3030; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3030; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__mod, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3030; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3031 * minimum = ufunc(np.minimum) * mod = ufunc(np.mod) * multiply = ufunc(np.multiply) # <<<<<<<<<<<<<< * nextafter = ufunc(np.nextafter) * not_equal = ufunc(np.not_equal) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3031; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3031; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__multiply); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3031; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3031; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3031; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__multiply, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3031; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3032 * mod = ufunc(np.mod) * multiply = ufunc(np.multiply) * nextafter = ufunc(np.nextafter) # <<<<<<<<<<<<<< * not_equal = ufunc(np.not_equal) * power = ufunc(np.power) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3032; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3032; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__nextafter); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3032; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3032; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3032; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__nextafter, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3032; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3033 * multiply = ufunc(np.multiply) * nextafter = ufunc(np.nextafter) * not_equal = ufunc(np.not_equal) # <<<<<<<<<<<<<< * power = ufunc(np.power) * remainder = ufunc(np.remainder) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3033; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3033; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__not_equal); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3033; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3033; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3033; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__not_equal, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3033; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3034 * nextafter = ufunc(np.nextafter) * not_equal = ufunc(np.not_equal) * power = ufunc(np.power) # <<<<<<<<<<<<<< * remainder = ufunc(np.remainder) * right_shift = ufunc(np.right_shift) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3034; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3034; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__power); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3034; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3034; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3034; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__power, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3034; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3035 * not_equal = ufunc(np.not_equal) * power = ufunc(np.power) * remainder = ufunc(np.remainder) # <<<<<<<<<<<<<< * right_shift = ufunc(np.right_shift) * subtract = ufunc(np.subtract) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__remainder); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__remainder, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3036 * power = ufunc(np.power) * remainder = ufunc(np.remainder) * right_shift = ufunc(np.right_shift) # <<<<<<<<<<<<<< * subtract = ufunc(np.subtract) * true_divide = ufunc(np.true_divide) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3036; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3036; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__right_shift); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3036; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3036; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3036; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__right_shift, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3036; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3037 * remainder = ufunc(np.remainder) * right_shift = ufunc(np.right_shift) * subtract = ufunc(np.subtract) # <<<<<<<<<<<<<< * true_divide = ufunc(np.true_divide) * */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3037; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3037; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__subtract); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3037; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3037; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3037; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__subtract, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3037; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3038 * right_shift = ufunc(np.right_shift) * subtract = ufunc(np.subtract) * true_divide = ufunc(np.true_divide) # <<<<<<<<<<<<<< * * class flatiter(object): */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ufunc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3038; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3038; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__true_divide); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3038; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3038; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3038; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__true_divide, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3038; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3040 * true_divide = ufunc(np.true_divide) * * class flatiter(object): # <<<<<<<<<<<<<< * """Flat iterator object to iterate over arrays. * */ __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3040; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); /* "ga4py/gain/core.pyx":3081 * * """ * def __init__(self, base): # <<<<<<<<<<<<<< * self._base = base * self._index = 0 */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_1__init__, 0, __pyx_n_s_732, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_731)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3081; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____init__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3081; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3100 * self._hi = [-1] * * def _get_base(self): # <<<<<<<<<<<<<< * return self._base * base = property(_get_base) */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_3_get_base, 0, __pyx_n_s_735, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_734)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s___get_base, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3102 * def _get_base(self): * return self._base * base = property(_get_base) # <<<<<<<<<<<<<< * * def _get_coords(self): */ __pyx_t_4 = PyObject_GetItem(__pyx_t_1, __pyx_n_s___get_base); if (unlikely(!__pyx_t_4)) { PyErr_Clear(); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_base); } if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__base, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3104 * base = property(_get_base) * * def _get_coords(self): # <<<<<<<<<<<<<< * return np.unravel_index(self._index, self._base.shape) * coords = property(_get_coords) */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_5_get_coords, 0, __pyx_n_s_738, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_737)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s___get_coords, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3106 * def _get_coords(self): * return np.unravel_index(self._index, self._base.shape) * coords = property(_get_coords) # <<<<<<<<<<<<<< * * def copy(self): */ __pyx_t_4 = PyObject_GetItem(__pyx_t_1, __pyx_n_s___get_coords); if (unlikely(!__pyx_t_4)) { PyErr_Clear(); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_coords); } if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__coords, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3108 * coords = property(_get_coords) * * def copy(self): # <<<<<<<<<<<<<< * """Get a copy of the iterator as a 1-D array. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_7copy, 0, __pyx_n_s_741, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_740)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__copy, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3124 * return self._base.flatten() * * def _get_index(self): # <<<<<<<<<<<<<< * return self._index * index = property(_get_index) */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_9_get_index, 0, __pyx_n_s_744, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_743)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s___get_index, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3126 * def _get_index(self): * return self._index * index = property(_get_index) # <<<<<<<<<<<<<< * * def distribution(self): */ __pyx_t_4 = PyObject_GetItem(__pyx_t_1, __pyx_n_s___get_index); if (unlikely(!__pyx_t_4)) { PyErr_Clear(); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s___get_index); } if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__index, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3128 * index = property(_get_index) * * def distribution(self): # <<<<<<<<<<<<<< * return self._lo,self._hi * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_11distribution, 0, __pyx_n_s_747, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_746)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__distribution, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3131 * return self._lo,self._hi * * def owns(self): # <<<<<<<<<<<<<< * return self._hi[0]>=0 * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_13owns, 0, __pyx_n_s_750, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_749)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__owns, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3134 * return self._hi[0]>=0 * * def get(self, key=None): # <<<<<<<<<<<<<< * # THIS OPERATION IS ONE-SIDED * # we expect key to be a single value or a slice, but might also be an */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_15get, 0, __pyx_n_s_754, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_752)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_753)); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__get, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3158 * return self._base.gather(index) * * def allget(self, key=None): # <<<<<<<<<<<<<< * """Like get(), but when all processes need the same piece. * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_17allget, 0, __pyx_n_s_758, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_756)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, ((PyObject *)__pyx_k_tuple_757)); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__allget, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3172 * return comm().bcast() * * def __getitem__(self, key): # <<<<<<<<<<<<<< * # THIS OPERATION IS COLLECTIVE * sync() */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_19__getitem__, 0, __pyx_n_s_761, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_760)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____getitem__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3181 * return self.allget(key) * * def __len__(self): # <<<<<<<<<<<<<< * return self.global_slice.size * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_21__len__, 0, __pyx_n_s_764, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_763)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____len__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3184 * return self.global_slice.size * * def put(self, key, value): # <<<<<<<<<<<<<< * # THIS OPERATION IS ONE-SIDED * # we expect key to be a single value or a slice, but might also be an */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_23put, 0, __pyx_n_s_767, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_766)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__put, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3214 * ga.scatter(self._base.handle, value, i) * * def __setitem__(self, key, value): # <<<<<<<<<<<<<< * # THIS OPERATION IS COLLECTIVE * sync() */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_25__setitem__, 0, __pyx_n_s_770, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_769)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____setitem__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3234 * sync() * * def next(self): # <<<<<<<<<<<<<< * if self._index < self._len: * tmp = self.base[self.coords] */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_27next, 0, __pyx_n_s_773, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_772)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__next, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3242 * raise StopIteration * * def access(self): # <<<<<<<<<<<<<< * """Return a copy of a 'local' portion.""" * if self._values is not None: */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_29access, 0, __pyx_n_s_776, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_775)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__access, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3254 * return self._values * * def release(self): # <<<<<<<<<<<<<< * self._values = None * */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_31release, 0, __pyx_n_s_779, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_778)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__release, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3257 * self._values = None * * def release_update(self): # <<<<<<<<<<<<<< * if self._values is not None: * lo,hi = self.distribution() */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_33release_update, 0, __pyx_n_s_782, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_781)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__release_update, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3264 * self._values = None * * def __repr__(self): # <<<<<<<<<<<<<< * result = "" * if 0 == me(): */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_35__repr__, 0, __pyx_n_s_785, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_784)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____repr__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3270 * return result * * def __str__(self): # <<<<<<<<<<<<<< * result = "" * if 0 == me(): */ __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_8flatiter_37__str__, 0, __pyx_n_s_788, NULL, __pyx_n_s_24, ((PyObject *)__pyx_k_codeobj_787)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3270; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____str__, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3270; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/core.pyx":3040 * true_divide = ufunc(np.true_divide) * * class flatiter(object): # <<<<<<<<<<<<<< * """Flat iterator object to iterate over arrays. * */ __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3040; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_builtin_object); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_builtin_object); __Pyx_GIVEREF(__pyx_builtin_object); if (PyDict_SetItemString(((PyObject *)__pyx_t_1), "__doc__", ((PyObject *)__pyx_kp_s_789)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3040; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_CreateClass(((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_1), __pyx_n_s__flatiter, __pyx_n_s__flatiter, __pyx_n_s_24); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3040; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__flatiter, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3040; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; /* "ga4py/gain/core.pyx":3276 * return result * * def zeros(shape, dtype=np.float, order='C'): # <<<<<<<<<<<<<< * """zeros(shape, dtype=float, order='C') * */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__float); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_k_84 = __pyx_t_3; __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_29zeros, NULL, __pyx_n_s_24); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s__zeros, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3336 * return a * * def asarray(a, dtype=None, order=None): # <<<<<<<<<<<<<< * if isinstance(a, (ndarray,flatiter,np.ndarray,np.generic)): * # we return ga.gain.ndarray instances for obvious reasons, but we */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_31asarray, NULL, __pyx_n_s_24); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3336; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s__asarray, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3336; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3350 * return npa # possibly a scalar or zero rank array * * def from_ga(g_a): # <<<<<<<<<<<<<< * """Create ndarray from a global array.""" * dtype = ga.inquire_dtype(g_a) */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_33from_ga, NULL, __pyx_n_s_24); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s__from_ga, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3357 * * cdef extern MPI_Comm GA_MPI_Comm_pgroup_default() * def comm(): # <<<<<<<<<<<<<< * """Returns the MPI_Comm instance associated with the process group.""" * cdef MPI.Comm communicator = MPI.Comm() */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_35comm, NULL, __pyx_n_s_24); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3357; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s__comm, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3357; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":3378 * # print s * # * def print_sync(what): # <<<<<<<<<<<<<< * #if DEBUG: * if True: */ __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4core_37print_sync, NULL, __pyx_n_s_24); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s__print_sync, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/core.pyx":1 * # cython: profile=True # <<<<<<<<<<<<<< * cimport mpi4py.MPI as MPI * from mpi4py.mpi_c cimport * */ __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_800), ((PyObject *)__pyx_kp_u_801)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_802), ((PyObject *)__pyx_kp_u_803)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_804), ((PyObject *)__pyx_kp_u_805)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_806), ((PyObject *)__pyx_kp_u_807)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_808), ((PyObject *)__pyx_kp_u_809)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_810), ((PyObject *)__pyx_kp_u_811)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_812), ((PyObject *)__pyx_kp_u_813)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_814), ((PyObject *)__pyx_kp_u_815)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_816), ((PyObject *)__pyx_kp_u_817)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_818), ((PyObject *)__pyx_kp_u_819)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_820), ((PyObject *)__pyx_kp_u_821)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_822), ((PyObject *)__pyx_kp_u_823)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_824), ((PyObject *)__pyx_kp_u_825)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_826), ((PyObject *)__pyx_kp_u_827)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_828), ((PyObject *)__pyx_kp_u_829)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_830), ((PyObject *)__pyx_kp_u_831)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_832), ((PyObject *)__pyx_kp_u_833)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_834), ((PyObject *)__pyx_kp_u_835)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_836), ((PyObject *)__pyx_kp_u_837)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_838), ((PyObject *)__pyx_kp_u_839)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_d, __pyx_n_s____test__, ((PyObject *)__pyx_t_3)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; /* "numpy.pxd":975 * arr.base = baseptr * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< * if arr.base is NULL: * return None */ goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); if (__pyx_m) { __Pyx_AddTraceback("init ga4py.gain.core", __pyx_clineno, __pyx_lineno, __pyx_filename); Py_DECREF(__pyx_m); __pyx_m = 0; } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_ImportError, "init ga4py.gain.core"); } __pyx_L0:; __Pyx_RefNannyFinishContext(); #if PY_MAJOR_VERSION < 3 return; #else return __pyx_m; #endif } /* Runtime support code */ #if CYTHON_REFNANNY static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { PyObject *m = NULL, *p = NULL; void *r = NULL; m = PyImport_ImportModule((char *)modname); if (!m) goto end; p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); if (!p) goto end; r = PyLong_AsVoidPtr(p); end: Py_XDECREF(p); Py_XDECREF(m); return (__Pyx_RefNannyAPIStruct *)r; } #endif /* CYTHON_REFNANNY */ static PyObject *__Pyx_GetBuiltinName(PyObject *name) { PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); if (unlikely(!result)) { PyErr_Format(PyExc_NameError, #if PY_MAJOR_VERSION >= 3 "name '%U' is not defined", name); #else "name '%s' is not defined", PyString_AS_STRING(name)); #endif } return result; } #if CYTHON_PROFILE static int __Pyx_TraceSetupAndCall(PyCodeObject** code, PyFrameObject** frame, const char *funcname, const char *srcfile, int firstlineno) { int retval; PyThreadState* tstate = PyThreadState_GET(); if (*frame == NULL || !CYTHON_PROFILE_REUSE_FRAME) { if (*code == NULL) { *code = __Pyx_createFrameCodeObject(funcname, srcfile, firstlineno); if (*code == NULL) return 0; } *frame = PyFrame_New( tstate, /*PyThreadState *tstate*/ *code, /*PyCodeObject *code*/ __pyx_d, /*PyObject *globals*/ 0 /*PyObject *locals*/ ); if (*frame == NULL) return 0; if (CYTHON_TRACE && (*frame)->f_trace == NULL) { Py_INCREF(Py_None); (*frame)->f_trace = Py_None; } } else { (*frame)->f_tstate = tstate; } (*frame)->f_lineno = firstlineno; tstate->use_tracing = 0; #if CYTHON_TRACE if (tstate->c_tracefunc) tstate->c_tracefunc(tstate->c_traceobj, *frame, PyTrace_CALL, NULL); if (!tstate->c_profilefunc) retval = 1; else #endif retval = tstate->c_profilefunc(tstate->c_profileobj, *frame, PyTrace_CALL, NULL) == 0; tstate->use_tracing = (tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc)); return tstate->use_tracing && retval; } static PyCodeObject *__Pyx_createFrameCodeObject(const char *funcname, const char *srcfile, int firstlineno) { PyObject *py_srcfile = 0; PyObject *py_funcname = 0; PyCodeObject *py_code = 0; #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromString(funcname); py_srcfile = PyString_FromString(srcfile); #else py_funcname = PyUnicode_FromString(funcname); py_srcfile = PyUnicode_FromString(srcfile); #endif if (!py_funcname | !py_srcfile) goto bad; py_code = PyCode_New( 0, /*int argcount,*/ #if PY_MAJOR_VERSION >= 3 0, /*int kwonlyargcount,*/ #endif 0, /*int nlocals,*/ 0, /*int stacksize,*/ 0, /*int flags,*/ __pyx_empty_bytes, /*PyObject *code,*/ __pyx_empty_tuple, /*PyObject *consts,*/ __pyx_empty_tuple, /*PyObject *names,*/ __pyx_empty_tuple, /*PyObject *varnames,*/ __pyx_empty_tuple, /*PyObject *freevars,*/ __pyx_empty_tuple, /*PyObject *cellvars,*/ py_srcfile, /*PyObject *filename,*/ py_funcname, /*PyObject *name,*/ firstlineno, /*int firstlineno,*/ __pyx_empty_bytes /*PyObject *lnotab*/ ); bad: Py_XDECREF(py_srcfile); Py_XDECREF(py_funcname); return py_code; } #endif /* CYTHON_PROFILE */ static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { PyObject *result; #if CYTHON_COMPILING_IN_CPYTHON result = PyDict_GetItem(__pyx_d, name); if (result) { Py_INCREF(result); } else { #else result = PyObject_GetItem(__pyx_d, name); if (!result) { PyErr_Clear(); #endif result = __Pyx_GetBuiltinName(name); } return result; } static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { #if CYTHON_COMPILING_IN_CPYTHON PyObject *tmp_type, *tmp_value, *tmp_tb; PyThreadState *tstate = PyThreadState_GET(); tmp_type = tstate->curexc_type; tmp_value = tstate->curexc_value; tmp_tb = tstate->curexc_traceback; tstate->curexc_type = type; tstate->curexc_value = value; tstate->curexc_traceback = tb; Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); #else PyErr_Restore(type, value, tb); #endif } static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { #if CYTHON_COMPILING_IN_CPYTHON PyThreadState *tstate = PyThreadState_GET(); *type = tstate->curexc_type; *value = tstate->curexc_value; *tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; #else PyErr_Fetch(type, value, tb); #endif } static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno, CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename) { PyObject *old_exc, *old_val, *old_tb; PyObject *ctx; __Pyx_ErrFetch(&old_exc, &old_val, &old_tb); #if PY_MAJOR_VERSION < 3 ctx = PyString_FromString(name); #else ctx = PyUnicode_FromString(name); #endif __Pyx_ErrRestore(old_exc, old_val, old_tb); if (!ctx) { PyErr_WriteUnraisable(Py_None); } else { PyErr_WriteUnraisable(ctx); Py_DECREF(ctx); } } static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) { PyObject *local_type, *local_value, *local_tb; #if CYTHON_COMPILING_IN_CPYTHON PyObject *tmp_type, *tmp_value, *tmp_tb; PyThreadState *tstate = PyThreadState_GET(); local_type = tstate->curexc_type; local_value = tstate->curexc_value; local_tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; #else PyErr_Fetch(&local_type, &local_value, &local_tb); #endif PyErr_NormalizeException(&local_type, &local_value, &local_tb); #if CYTHON_COMPILING_IN_CPYTHON if (unlikely(tstate->curexc_type)) #else if (unlikely(PyErr_Occurred())) #endif goto bad; #if PY_MAJOR_VERSION >= 3 if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) goto bad; #endif Py_INCREF(local_type); Py_INCREF(local_value); Py_INCREF(local_tb); *type = local_type; *value = local_value; *tb = local_tb; #if CYTHON_COMPILING_IN_CPYTHON tmp_type = tstate->exc_type; tmp_value = tstate->exc_value; tmp_tb = tstate->exc_traceback; tstate->exc_type = local_type; tstate->exc_value = local_value; tstate->exc_traceback = local_tb; /* Make sure tstate is in a consistent state when we XDECREF these objects (DECREF may run arbitrary code). */ Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); #else PyErr_SetExcInfo(local_type, local_value, local_tb); #endif return 0; bad: *type = 0; *value = 0; *tb = 0; Py_XDECREF(local_type); Py_XDECREF(local_value); Py_XDECREF(local_tb); return -1; } static void __Pyx_RaiseArgtupleInvalid( const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found) { Py_ssize_t num_expected; const char *more_or_less; if (num_found < num_min) { num_expected = num_min; more_or_less = "at least"; } else { num_expected = num_max; more_or_less = "at most"; } if (exact) { more_or_less = "exactly"; } PyErr_Format(PyExc_TypeError, "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)", func_name, more_or_less, num_expected, (num_expected == 1) ? "" : "s", num_found); } static void __Pyx_RaiseDoubleKeywordsError( const char* func_name, PyObject* kw_name) { PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION >= 3 "%s() got multiple values for keyword argument '%U'", func_name, kw_name); #else "%s() got multiple values for keyword argument '%s'", func_name, PyString_AsString(kw_name)); #endif } static int __Pyx_ParseOptionalKeywords( PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name) { PyObject *key = 0, *value = 0; Py_ssize_t pos = 0; PyObject*** name; PyObject*** first_kw_arg = argnames + num_pos_args; while (PyDict_Next(kwds, &pos, &key, &value)) { name = first_kw_arg; while (*name && (**name != key)) name++; if (*name) { values[name-argnames] = value; continue; } name = first_kw_arg; #if PY_MAJOR_VERSION < 3 if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { while (*name) { if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) && _PyString_Eq(**name, key)) { values[name-argnames] = value; break; } name++; } if (*name) continue; else { PyObject*** argname = argnames; while (argname != first_kw_arg) { if ((**argname == key) || ( (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) && _PyString_Eq(**argname, key))) { goto arg_passed_twice; } argname++; } } } else #endif if (likely(PyUnicode_Check(key))) { while (*name) { int cmp = (**name == key) ? 0 : #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : #endif PyUnicode_Compare(**name, key); if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; if (cmp == 0) { values[name-argnames] = value; break; } name++; } if (*name) continue; else { PyObject*** argname = argnames; while (argname != first_kw_arg) { int cmp = (**argname == key) ? 0 : #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : #endif PyUnicode_Compare(**argname, key); if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; if (cmp == 0) goto arg_passed_twice; argname++; } } } else goto invalid_keyword_type; if (kwds2) { if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; } else { goto invalid_keyword; } } return 0; arg_passed_twice: __Pyx_RaiseDoubleKeywordsError(function_name, key); goto bad; invalid_keyword_type: PyErr_Format(PyExc_TypeError, "%s() keywords must be strings", function_name); goto bad; invalid_keyword: PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION < 3 "%s() got an unexpected keyword argument '%s'", function_name, PyString_AsString(key)); #else "%s() got an unexpected keyword argument '%U'", function_name, key); #endif bad: return -1; } #if PY_MAJOR_VERSION < 3 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, CYTHON_UNUSED PyObject *cause) { Py_XINCREF(type); if (!value || value == Py_None) value = NULL; else Py_INCREF(value); if (!tb || tb == Py_None) tb = NULL; else { Py_INCREF(tb); if (!PyTraceBack_Check(tb)) { PyErr_SetString(PyExc_TypeError, "raise: arg 3 must be a traceback or None"); goto raise_error; } } #if PY_VERSION_HEX < 0x02050000 if (PyClass_Check(type)) { #else if (PyType_Check(type)) { #endif #if CYTHON_COMPILING_IN_PYPY if (!value) { Py_INCREF(Py_None); value = Py_None; } #endif PyErr_NormalizeException(&type, &value, &tb); } else { if (value) { PyErr_SetString(PyExc_TypeError, "instance exception may not have a separate value"); goto raise_error; } value = type; #if PY_VERSION_HEX < 0x02050000 if (PyInstance_Check(type)) { type = (PyObject*) ((PyInstanceObject*)type)->in_class; Py_INCREF(type); } else { type = 0; PyErr_SetString(PyExc_TypeError, "raise: exception must be an old-style class or instance"); goto raise_error; } #else type = (PyObject*) Py_TYPE(type); Py_INCREF(type); if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { PyErr_SetString(PyExc_TypeError, "raise: exception class must be a subclass of BaseException"); goto raise_error; } #endif } __Pyx_ErrRestore(type, value, tb); return; raise_error: Py_XDECREF(value); Py_XDECREF(type); Py_XDECREF(tb); return; } #else /* Python 3+ */ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { PyObject* owned_instance = NULL; if (tb == Py_None) { tb = 0; } else if (tb && !PyTraceBack_Check(tb)) { PyErr_SetString(PyExc_TypeError, "raise: arg 3 must be a traceback or None"); goto bad; } if (value == Py_None) value = 0; if (PyExceptionInstance_Check(type)) { if (value) { PyErr_SetString(PyExc_TypeError, "instance exception may not have a separate value"); goto bad; } value = type; type = (PyObject*) Py_TYPE(value); } else if (PyExceptionClass_Check(type)) { PyObject *args; if (!value) args = PyTuple_New(0); else if (PyTuple_Check(value)) { Py_INCREF(value); args = value; } else args = PyTuple_Pack(1, value); if (!args) goto bad; owned_instance = PyEval_CallObject(type, args); Py_DECREF(args); if (!owned_instance) goto bad; value = owned_instance; if (!PyExceptionInstance_Check(value)) { PyErr_Format(PyExc_TypeError, "calling %R should have returned an instance of " "BaseException, not %R", type, Py_TYPE(value)); goto bad; } } else { PyErr_SetString(PyExc_TypeError, "raise: exception class must be a subclass of BaseException"); goto bad; } #if PY_VERSION_HEX >= 0x03030000 if (cause) { #else if (cause && cause != Py_None) { #endif PyObject *fixed_cause; if (cause == Py_None) { fixed_cause = NULL; } else if (PyExceptionClass_Check(cause)) { fixed_cause = PyObject_CallObject(cause, NULL); if (fixed_cause == NULL) goto bad; } else if (PyExceptionInstance_Check(cause)) { fixed_cause = cause; Py_INCREF(fixed_cause); } else { PyErr_SetString(PyExc_TypeError, "exception causes must derive from " "BaseException"); goto bad; } PyException_SetCause(value, fixed_cause); } PyErr_SetObject(type, value); if (tb) { PyThreadState *tstate = PyThreadState_GET(); PyObject* tmp_tb = tstate->curexc_traceback; if (tb != tmp_tb) { Py_INCREF(tb); tstate->curexc_traceback = tb; Py_XDECREF(tmp_tb); } } bad: Py_XDECREF(owned_instance); return; } #endif static CYTHON_INLINE PyObject* __Pyx_PyObject_Pop(PyObject* L) { #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x02040000 if (likely(PyList_CheckExact(L)) && likely(PyList_GET_SIZE(L) > (((PyListObject*)L)->allocated >> 1))) { Py_SIZE(L) -= 1; return PyList_GET_ITEM(L, PyList_GET_SIZE(L)); } #if PY_VERSION_HEX >= 0x02050000 else if (Py_TYPE(L) == (&PySet_Type)) { return PySet_Pop(L); } #endif #endif return __Pyx_PyObject_CallMethod0(L, __pyx_n_s__pop); } static CYTHON_INLINE PyObject* __Pyx_PyObject_Append(PyObject* L, PyObject* x) { if (likely(PyList_CheckExact(L))) { if (unlikely(__Pyx_PyList_Append(L, x) < 0)) return NULL; Py_INCREF(Py_None); return Py_None; /* this is just to have an accurate signature */ } else { return __Pyx_PyObject_CallMethod1(L, __pyx_n_s__append, x); } } static CYTHON_INLINE int __Pyx_PyObject_SetSlice( PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop, PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) { #if CYTHON_COMPILING_IN_CPYTHON PyMappingMethods* mp; #if PY_MAJOR_VERSION < 3 PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; if (likely(ms && ms->sq_ass_slice)) { if (!has_cstart) { if (_py_start && (*_py_start != Py_None)) { cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; } else cstart = 0; } if (!has_cstop) { if (_py_stop && (*_py_stop != Py_None)) { cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; } else cstop = PY_SSIZE_T_MAX; } if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { Py_ssize_t l = ms->sq_length(obj); if (likely(l >= 0)) { if (cstop < 0) { cstop += l; if (cstop < 0) cstop = 0; } if (cstart < 0) { cstart += l; if (cstart < 0) cstart = 0; } } else { if (PyErr_ExceptionMatches(PyExc_OverflowError)) PyErr_Clear(); else goto bad; } } return ms->sq_ass_slice(obj, cstart, cstop, value); } #endif mp = Py_TYPE(obj)->tp_as_mapping; if (likely(mp && mp->mp_ass_subscript)) #endif { int result; PyObject *py_slice, *py_start, *py_stop; if (_py_slice) { py_slice = *_py_slice; } else { PyObject* owned_start = NULL; PyObject* owned_stop = NULL; if (_py_start) { py_start = *_py_start; } else { if (has_cstart) { owned_start = py_start = PyInt_FromSsize_t(cstart); if (unlikely(!py_start)) goto bad; } else py_start = Py_None; } if (_py_stop) { py_stop = *_py_stop; } else { if (has_cstop) { owned_stop = py_stop = PyInt_FromSsize_t(cstop); if (unlikely(!py_stop)) { Py_XDECREF(owned_start); goto bad; } } else py_stop = Py_None; } py_slice = PySlice_New(py_start, py_stop, Py_None); Py_XDECREF(owned_start); Py_XDECREF(owned_stop); if (unlikely(!py_slice)) goto bad; } #if CYTHON_COMPILING_IN_CPYTHON result = mp->mp_ass_subscript(obj, py_slice, value); #else result = value ? PyObject_SetItem(obj, py_slice, value) : PyObject_DelItem(obj, py_slice); #endif if (!_py_slice) { Py_DECREF(py_slice); } return result; } PyErr_Format(PyExc_TypeError, "'%.200s' object does not support slice %s", Py_TYPE(obj)->tp_name, value ? "assignment" : "deletion"); bad: return -1; } static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { PyObject *r; if (!j) return NULL; r = PyObject_GetItem(o, j); Py_DECREF(j); return r; } static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, int wraparound, int boundscheck) { #if CYTHON_COMPILING_IN_CPYTHON if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o); if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) { PyObject *r = PyList_GET_ITEM(o, i); Py_INCREF(r); return r; } return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); #else return PySequence_GetItem(o, i); #endif } static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, int wraparound, int boundscheck) { #if CYTHON_COMPILING_IN_CPYTHON if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o); if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) { PyObject *r = PyTuple_GET_ITEM(o, i); Py_INCREF(r); return r; } return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); #else return PySequence_GetItem(o, i); #endif } static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, int wraparound, int boundscheck) { #if CYTHON_COMPILING_IN_CPYTHON if (is_list || PyList_CheckExact(o)) { Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) { PyObject *r = PyList_GET_ITEM(o, n); Py_INCREF(r); return r; } } else if (PyTuple_CheckExact(o)) { Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) { PyObject *r = PyTuple_GET_ITEM(o, n); Py_INCREF(r); return r; } } else { PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; if (likely(m && m->sq_item)) { if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { Py_ssize_t l = m->sq_length(o); if (likely(l >= 0)) { i += l; } else { if (PyErr_ExceptionMatches(PyExc_OverflowError)) PyErr_Clear(); else return NULL; } } return m->sq_item(o, i); } } #else if (is_list || PySequence_Check(o)) { return PySequence_GetItem(o, i); } #endif return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); } static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { PyErr_Format(PyExc_ValueError, "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); } static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { PyErr_Format(PyExc_ValueError, "need more than %" CYTHON_FORMAT_SSIZE_T "d value%s to unpack", index, (index == 1) ? "" : "s"); } static CYTHON_INLINE int __Pyx_IterFinish(void) { #if CYTHON_COMPILING_IN_CPYTHON PyThreadState *tstate = PyThreadState_GET(); PyObject* exc_type = tstate->curexc_type; if (unlikely(exc_type)) { if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) { PyObject *exc_value, *exc_tb; exc_value = tstate->curexc_value; exc_tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; Py_DECREF(exc_type); Py_XDECREF(exc_value); Py_XDECREF(exc_tb); return 0; } else { return -1; } } return 0; #else if (unlikely(PyErr_Occurred())) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { PyErr_Clear(); return 0; } else { return -1; } } return 0; #endif } static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { if (unlikely(retval)) { Py_DECREF(retval); __Pyx_RaiseTooManyValuesError(expected); return -1; } else { return __Pyx_IterFinish(); } return 0; } static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) { #if CYTHON_COMPILING_IN_CPYTHON PyMappingMethods* mp; #if PY_MAJOR_VERSION < 3 PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; if (likely(ms && ms->sq_slice)) { if (!has_cstart) { if (_py_start && (*_py_start != Py_None)) { cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; } else cstart = 0; } if (!has_cstop) { if (_py_stop && (*_py_stop != Py_None)) { cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; } else cstop = PY_SSIZE_T_MAX; } if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { Py_ssize_t l = ms->sq_length(obj); if (likely(l >= 0)) { if (cstop < 0) { cstop += l; if (cstop < 0) cstop = 0; } if (cstart < 0) { cstart += l; if (cstart < 0) cstart = 0; } } else { if (PyErr_ExceptionMatches(PyExc_OverflowError)) PyErr_Clear(); else goto bad; } } return ms->sq_slice(obj, cstart, cstop); } #endif mp = Py_TYPE(obj)->tp_as_mapping; if (likely(mp && mp->mp_subscript)) #endif { PyObject* result; PyObject *py_slice, *py_start, *py_stop; if (_py_slice) { py_slice = *_py_slice; } else { PyObject* owned_start = NULL; PyObject* owned_stop = NULL; if (_py_start) { py_start = *_py_start; } else { if (has_cstart) { owned_start = py_start = PyInt_FromSsize_t(cstart); if (unlikely(!py_start)) goto bad; } else py_start = Py_None; } if (_py_stop) { py_stop = *_py_stop; } else { if (has_cstop) { owned_stop = py_stop = PyInt_FromSsize_t(cstop); if (unlikely(!py_stop)) { Py_XDECREF(owned_start); goto bad; } } else py_stop = Py_None; } py_slice = PySlice_New(py_start, py_stop, Py_None); Py_XDECREF(owned_start); Py_XDECREF(owned_stop); if (unlikely(!py_slice)) goto bad; } #if CYTHON_COMPILING_IN_CPYTHON result = mp->mp_subscript(obj, py_slice); #else result = PyObject_GetItem(obj, py_slice); #endif if (!_py_slice) { Py_DECREF(py_slice); } return result; } PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name); bad: return NULL; } static PyObject * __Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) { if (unlikely(op->func_doc == NULL)) { if (op->func.m_ml->ml_doc) { #if PY_MAJOR_VERSION >= 3 op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); #else op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); #endif if (unlikely(op->func_doc == NULL)) return NULL; } else { Py_INCREF(Py_None); return Py_None; } } Py_INCREF(op->func_doc); return op->func_doc; } static int __Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value) { PyObject *tmp = op->func_doc; if (value == NULL) value = Py_None; /* Mark as deleted */ Py_INCREF(value); op->func_doc = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op) { if (unlikely(op->func_name == NULL)) { #if PY_MAJOR_VERSION >= 3 op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); #else op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); #endif if (unlikely(op->func_name == NULL)) return NULL; } Py_INCREF(op->func_name); return op->func_name; } static int __Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value) { PyObject *tmp; #if PY_MAJOR_VERSION >= 3 if (unlikely(value == NULL || !PyUnicode_Check(value))) { #else if (unlikely(value == NULL || !PyString_Check(value))) { #endif PyErr_SetString(PyExc_TypeError, "__name__ must be set to a string object"); return -1; } tmp = op->func_name; Py_INCREF(value); op->func_name = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op) { Py_INCREF(op->func_qualname); return op->func_qualname; } static int __Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value) { PyObject *tmp; #if PY_MAJOR_VERSION >= 3 if (unlikely(value == NULL || !PyUnicode_Check(value))) { #else if (unlikely(value == NULL || !PyString_Check(value))) { #endif PyErr_SetString(PyExc_TypeError, "__qualname__ must be set to a string object"); return -1; } tmp = op->func_qualname; Py_INCREF(value); op->func_qualname = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) { PyObject *self; self = m->func_closure; if (self == NULL) self = Py_None; Py_INCREF(self); return self; } static PyObject * __Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op) { if (unlikely(op->func_dict == NULL)) { op->func_dict = PyDict_New(); if (unlikely(op->func_dict == NULL)) return NULL; } Py_INCREF(op->func_dict); return op->func_dict; } static int __Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value) { PyObject *tmp; if (unlikely(value == NULL)) { PyErr_SetString(PyExc_TypeError, "function's dictionary may not be deleted"); return -1; } if (unlikely(!PyDict_Check(value))) { PyErr_SetString(PyExc_TypeError, "setting function's dictionary to a non-dict"); return -1; } tmp = op->func_dict; Py_INCREF(value); op->func_dict = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_globals(CYTHON_UNUSED __pyx_CyFunctionObject *op) { PyObject* dict = PyModule_GetDict(__pyx_m); Py_XINCREF(dict); return dict; } static PyObject * __Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op) { Py_INCREF(Py_None); return Py_None; } static PyObject * __Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op) { PyObject* result = (op->func_code) ? op->func_code : Py_None; Py_INCREF(result); return result; } static int __Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { PyObject *res = op->defaults_getter((PyObject *) op); if (unlikely(!res)) return -1; op->defaults_tuple = PyTuple_GET_ITEM(res, 0); Py_INCREF(op->defaults_tuple); op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); Py_INCREF(op->defaults_kwdict); Py_DECREF(res); return 0; } static int __Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value) { PyObject* tmp; if (!value) { value = Py_None; } else if (value != Py_None && !PyTuple_Check(value)) { PyErr_SetString(PyExc_TypeError, "__defaults__ must be set to a tuple object"); return -1; } Py_INCREF(value); tmp = op->defaults_tuple; op->defaults_tuple = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op) { PyObject* result = op->defaults_tuple; if (unlikely(!result)) { if (op->defaults_getter) { if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; result = op->defaults_tuple; } else { result = Py_None; } } Py_INCREF(result); return result; } static int __Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value) { PyObject* tmp; if (!value) { value = Py_None; } else if (value != Py_None && !PyDict_Check(value)) { PyErr_SetString(PyExc_TypeError, "__kwdefaults__ must be set to a dict object"); return -1; } Py_INCREF(value); tmp = op->defaults_kwdict; op->defaults_kwdict = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op) { PyObject* result = op->defaults_kwdict; if (unlikely(!result)) { if (op->defaults_getter) { if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; result = op->defaults_kwdict; } else { result = Py_None; } } Py_INCREF(result); return result; } static int __Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value) { PyObject* tmp; if (!value || value == Py_None) { value = NULL; } else if (!PyDict_Check(value)) { PyErr_SetString(PyExc_TypeError, "__annotations__ must be set to a dict object"); return -1; } Py_XINCREF(value); tmp = op->func_annotations; op->func_annotations = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op) { PyObject* result = op->func_annotations; if (unlikely(!result)) { result = PyDict_New(); if (unlikely(!result)) return NULL; op->func_annotations = result; } Py_INCREF(result); return result; } static PyGetSetDef __pyx_CyFunction_getsets[] = { {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, {0, 0, 0, 0, 0} }; #ifndef PY_WRITE_RESTRICTED /* < Py2.5 */ #define PY_WRITE_RESTRICTED WRITE_RESTRICTED #endif static PyMemberDef __pyx_CyFunction_members[] = { {(char *) "__module__", T_OBJECT, offsetof(__pyx_CyFunctionObject, func.m_module), PY_WRITE_RESTRICTED, 0}, {0, 0, 0, 0, 0} }; static PyObject * __Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) { #if PY_MAJOR_VERSION >= 3 return PyUnicode_FromString(m->func.m_ml->ml_name); #else return PyString_FromString(m->func.m_ml->ml_name); #endif } static PyMethodDef __pyx_CyFunction_methods[] = { {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, {0, 0, 0, 0} }; static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname, PyObject *closure, PyObject *module, PyObject* code) { __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type); if (op == NULL) return NULL; op->flags = flags; op->func_weakreflist = NULL; op->func.m_ml = ml; op->func.m_self = (PyObject *) op; Py_XINCREF(closure); op->func_closure = closure; Py_XINCREF(module); op->func.m_module = module; op->func_dict = NULL; op->func_name = NULL; Py_INCREF(qualname); op->func_qualname = qualname; op->func_doc = NULL; op->func_classobj = NULL; Py_XINCREF(code); op->func_code = code; op->defaults_pyobjects = 0; op->defaults = NULL; op->defaults_tuple = NULL; op->defaults_kwdict = NULL; op->defaults_getter = NULL; op->func_annotations = NULL; PyObject_GC_Track(op); return (PyObject *) op; } static int __Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) { Py_CLEAR(m->func_closure); Py_CLEAR(m->func.m_module); Py_CLEAR(m->func_dict); Py_CLEAR(m->func_name); Py_CLEAR(m->func_qualname); Py_CLEAR(m->func_doc); Py_CLEAR(m->func_code); Py_CLEAR(m->func_classobj); Py_CLEAR(m->defaults_tuple); Py_CLEAR(m->defaults_kwdict); Py_CLEAR(m->func_annotations); if (m->defaults) { PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); int i; for (i = 0; i < m->defaults_pyobjects; i++) Py_XDECREF(pydefaults[i]); PyMem_Free(m->defaults); m->defaults = NULL; } return 0; } static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) { PyObject_GC_UnTrack(m); if (m->func_weakreflist != NULL) PyObject_ClearWeakRefs((PyObject *) m); __Pyx_CyFunction_clear(m); PyObject_GC_Del(m); } static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) { Py_VISIT(m->func_closure); Py_VISIT(m->func.m_module); Py_VISIT(m->func_dict); Py_VISIT(m->func_name); Py_VISIT(m->func_qualname); Py_VISIT(m->func_doc); Py_VISIT(m->func_code); Py_VISIT(m->func_classobj); Py_VISIT(m->defaults_tuple); Py_VISIT(m->defaults_kwdict); if (m->defaults) { PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); int i; for (i = 0; i < m->defaults_pyobjects; i++) Py_VISIT(pydefaults[i]); } return 0; } static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) { __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { Py_INCREF(func); return func; } if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { if (type == NULL) type = (PyObject *)(Py_TYPE(obj)); return PyMethod_New(func, type, (PyObject *)(Py_TYPE(type))); } if (obj == Py_None) obj = NULL; return PyMethod_New(func, obj, type); } static PyObject* __Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) { #if PY_MAJOR_VERSION >= 3 return PyUnicode_FromFormat("", op->func_qualname, (void *)op); #else return PyString_FromFormat("", PyString_AsString(op->func_qualname), (void *)op); #endif } #if CYTHON_COMPILING_IN_PYPY static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { PyCFunctionObject* f = (PyCFunctionObject*)func; PyCFunction meth = PyCFunction_GET_FUNCTION(func); PyObject *self = PyCFunction_GET_SELF(func); Py_ssize_t size; switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) { case METH_VARARGS: if (likely(kw == NULL) || PyDict_Size(kw) == 0) return (*meth)(self, arg); break; case METH_VARARGS | METH_KEYWORDS: return (*(PyCFunctionWithKeywords)meth)(self, arg, kw); case METH_NOARGS: if (likely(kw == NULL) || PyDict_Size(kw) == 0) { size = PyTuple_GET_SIZE(arg); if (size == 0) return (*meth)(self, NULL); PyErr_Format(PyExc_TypeError, "%.200s() takes no arguments (%zd given)", f->m_ml->ml_name, size); return NULL; } break; case METH_O: if (likely(kw == NULL) || PyDict_Size(kw) == 0) { size = PyTuple_GET_SIZE(arg); if (size == 1) return (*meth)(self, PyTuple_GET_ITEM(arg, 0)); PyErr_Format(PyExc_TypeError, "%.200s() takes exactly one argument (%zd given)", f->m_ml->ml_name, size); return NULL; } break; default: PyErr_SetString(PyExc_SystemError, "Bad call flags in " "__Pyx_CyFunction_Call. METH_OLDARGS is no " "longer supported!"); return NULL; } PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", f->m_ml->ml_name); return NULL; } #else static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { return PyCFunction_Call(func, arg, kw); } #endif static PyTypeObject __pyx_CyFunctionType_type = { PyVarObject_HEAD_INIT(0, 0) __Pyx_NAMESTR("cython_function_or_method"), /*tp_name*/ sizeof(__pyx_CyFunctionObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor) __Pyx_CyFunction_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ #else 0, /*reserved*/ #endif (reprfunc) __Pyx_CyFunction_repr, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ __Pyx_CyFunction_Call, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags*/ 0, /*tp_doc*/ (traverseproc) __Pyx_CyFunction_traverse, /*tp_traverse*/ (inquiry) __Pyx_CyFunction_clear, /*tp_clear*/ 0, /*tp_richcompare*/ offsetof(__pyx_CyFunctionObject, func_weakreflist), /* tp_weaklistoffse */ 0, /*tp_iter*/ 0, /*tp_iternext*/ __pyx_CyFunction_methods, /*tp_methods*/ __pyx_CyFunction_members, /*tp_members*/ __pyx_CyFunction_getsets, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ __Pyx_CyFunction_descr_get, /*tp_descr_get*/ 0, /*tp_descr_set*/ offsetof(__pyx_CyFunctionObject, func_dict),/*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ 0, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ 0, /*tp_mro*/ 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ 0, /*tp_del*/ #if PY_VERSION_HEX >= 0x02060000 0, /*tp_version_tag*/ #endif #if PY_VERSION_HEX >= 0x030400a1 && defined(Py_TPFLAGS_HAVE_FINALIZE) 0, /*tp_finalize*/ #endif }; static int __Pyx_CyFunction_init(void) { #if !CYTHON_COMPILING_IN_PYPY __pyx_CyFunctionType_type.tp_call = PyCFunction_Call; #endif if (PyType_Ready(&__pyx_CyFunctionType_type) < 0) return -1; __pyx_CyFunctionType = &__pyx_CyFunctionType_type; return 0; } static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; m->defaults = PyMem_Malloc(size); if (!m->defaults) return PyErr_NoMemory(); memset(m->defaults, 0, size); m->defaults_pyobjects = pyobjects; return m->defaults; } static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; m->defaults_tuple = tuple; Py_INCREF(tuple); } static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; m->defaults_kwdict = dict; Py_INCREF(dict); } static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; m->func_annotations = dict; Py_INCREF(dict); } static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); } static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); } static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { if (unlikely(!type)) { PyErr_Format(PyExc_SystemError, "Missing type object"); return 0; } if (likely(PyObject_TypeCheck(obj, type))) return 1; PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", Py_TYPE(obj)->tp_name, type->tp_name); return 0; } static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { PyErr_Format(PyExc_ImportError, #if PY_MAJOR_VERSION < 3 "cannot import name %.230s", PyString_AS_STRING(name)); #else "cannot import name %S", name); #endif } return value; } static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) { #if CYTHON_COMPILING_IN_CPYTHON PyThreadState *tstate = PyThreadState_GET(); *type = tstate->exc_type; *value = tstate->exc_value; *tb = tstate->exc_traceback; Py_XINCREF(*type); Py_XINCREF(*value); Py_XINCREF(*tb); #else PyErr_GetExcInfo(type, value, tb); #endif } static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) { #if CYTHON_COMPILING_IN_CPYTHON PyObject *tmp_type, *tmp_value, *tmp_tb; PyThreadState *tstate = PyThreadState_GET(); tmp_type = tstate->exc_type; tmp_value = tstate->exc_value; tmp_tb = tstate->exc_traceback; tstate->exc_type = type; tstate->exc_value = value; tstate->exc_traceback = tb; Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); #else PyErr_SetExcInfo(type, value, tb); #endif } static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { PyObject *empty_list = 0; PyObject *module = 0; PyObject *global_dict = 0; PyObject *empty_dict = 0; PyObject *list; #if PY_VERSION_HEX < 0x03030000 PyObject *py_import; py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s____import__); if (!py_import) goto bad; #endif if (from_list) list = from_list; else { empty_list = PyList_New(0); if (!empty_list) goto bad; list = empty_list; } global_dict = PyModule_GetDict(__pyx_m); if (!global_dict) goto bad; empty_dict = PyDict_New(); if (!empty_dict) goto bad; #if PY_VERSION_HEX >= 0x02050000 { #if PY_MAJOR_VERSION >= 3 if (level == -1) { if (strchr(__Pyx_MODULE_NAME, '.')) { #if PY_VERSION_HEX < 0x03030000 PyObject *py_level = PyInt_FromLong(1); if (!py_level) goto bad; module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, py_level, NULL); Py_DECREF(py_level); #else module = PyImport_ImportModuleLevelObject( name, global_dict, empty_dict, list, 1); #endif if (!module) { if (!PyErr_ExceptionMatches(PyExc_ImportError)) goto bad; PyErr_Clear(); } } level = 0; /* try absolute import on failure */ } #endif if (!module) { #if PY_VERSION_HEX < 0x03030000 PyObject *py_level = PyInt_FromLong(level); if (!py_level) goto bad; module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, py_level, NULL); Py_DECREF(py_level); #else module = PyImport_ImportModuleLevelObject( name, global_dict, empty_dict, list, level); #endif } } #else if (level>0) { PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); goto bad; } module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, NULL); #endif bad: #if PY_VERSION_HEX < 0x03030000 Py_XDECREF(py_import); #endif Py_XDECREF(empty_list); Py_XDECREF(empty_dict); return module; } static PyObject *__Pyx_FindPy2Metaclass(PyObject *bases) { PyObject *metaclass; #if PY_MAJOR_VERSION < 3 if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) { PyObject *base = PyTuple_GET_ITEM(bases, 0); metaclass = __Pyx_PyObject_GetAttrStr(base, __pyx_n_s____class__); if (!metaclass) { PyErr_Clear(); metaclass = (PyObject*) Py_TYPE(base); } } else { metaclass = (PyObject *) &PyClass_Type; } #else if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) { PyObject *base = PyTuple_GET_ITEM(bases, 0); metaclass = (PyObject*) Py_TYPE(base); } else { metaclass = (PyObject *) &PyType_Type; } #endif Py_INCREF(metaclass); return metaclass; } static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, PyObject *qualname, PyObject *modname) { PyObject *result; PyObject *metaclass; if (PyDict_SetItem(dict, __pyx_n_s____module__, modname) < 0) return NULL; if (PyDict_SetItem(dict, __pyx_n_s____qualname__, qualname) < 0) return NULL; metaclass = PyDict_GetItem(dict, __pyx_n_s____metaclass__); if (metaclass) { Py_INCREF(metaclass); } else { metaclass = __Pyx_FindPy2Metaclass(bases); } result = PyObject_CallFunctionObjArgs(metaclass, name, bases, dict, NULL); Py_DECREF(metaclass); return result; } #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 static PyObject *__Pyx_GetStdout(void) { PyObject *f = PySys_GetObject((char *)"stdout"); if (!f) { PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); } return f; } static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) { int i; if (!f) { if (!(f = __Pyx_GetStdout())) return -1; } Py_INCREF(f); for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) { PyObject* v; if (PyFile_SoftSpace(f, 1)) { if (PyFile_WriteString(" ", f) < 0) goto error; } v = PyTuple_GET_ITEM(arg_tuple, i); if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0) goto error; if (PyString_Check(v)) { char *s = PyString_AsString(v); Py_ssize_t len = PyString_Size(v); if (len > 0 && isspace(Py_CHARMASK(s[len-1])) && s[len-1] != ' ') PyFile_SoftSpace(f, 0); } } if (newline) { if (PyFile_WriteString("\n", f) < 0) goto error; PyFile_SoftSpace(f, 0); } Py_DECREF(f); return 0; error: Py_DECREF(f); return -1; } #else /* Python 3 has a print function */ static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) { PyObject* kwargs = 0; PyObject* result = 0; PyObject* end_string; if (unlikely(!__pyx_print)) { __pyx_print = PyObject_GetAttr(__pyx_b, __pyx_n_s__print); if (!__pyx_print) return -1; } if (stream) { kwargs = PyDict_New(); if (unlikely(!kwargs)) return -1; if (unlikely(PyDict_SetItem(kwargs, __pyx_n_s__file, stream) < 0)) goto bad; if (!newline) { end_string = PyUnicode_FromStringAndSize(" ", 1); if (unlikely(!end_string)) goto bad; if (PyDict_SetItem(kwargs, __pyx_n_s__end, end_string) < 0) { Py_DECREF(end_string); goto bad; } Py_DECREF(end_string); } } else if (!newline) { if (unlikely(!__pyx_print_kwargs)) { __pyx_print_kwargs = PyDict_New(); if (unlikely(!__pyx_print_kwargs)) return -1; end_string = PyUnicode_FromStringAndSize(" ", 1); if (unlikely(!end_string)) return -1; if (PyDict_SetItem(__pyx_print_kwargs, __pyx_n_s__end, end_string) < 0) { Py_DECREF(end_string); return -1; } Py_DECREF(end_string); } kwargs = __pyx_print_kwargs; } result = PyObject_Call(__pyx_print, arg_tuple, kwargs); if (unlikely(kwargs) && (kwargs != __pyx_print_kwargs)) Py_DECREF(kwargs); if (!result) return -1; Py_DECREF(result); return 0; bad: if (kwargs != __pyx_print_kwargs) Py_XDECREF(kwargs); return -1; } #endif #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 static int __Pyx_PrintOne(PyObject* f, PyObject *o) { if (!f) { if (!(f = __Pyx_GetStdout())) return -1; } Py_INCREF(f); if (PyFile_SoftSpace(f, 0)) { if (PyFile_WriteString(" ", f) < 0) goto error; } if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0) goto error; if (PyFile_WriteString("\n", f) < 0) goto error; Py_DECREF(f); return 0; error: Py_DECREF(f); return -1; /* the line below is just to avoid C compiler * warnings about unused functions */ return __Pyx_Print(f, NULL, 0); } #else /* Python 3 has a print function */ static int __Pyx_PrintOne(PyObject* stream, PyObject *o) { int res; PyObject* arg_tuple = PyTuple_Pack(1, o); if (unlikely(!arg_tuple)) return -1; res = __Pyx_Print(stream, arg_tuple, 1); Py_DECREF(arg_tuple); return res; } #endif #if CYTHON_CCOMPLEX #ifdef __cplusplus static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { return ::std::complex< float >(x, y); } #else static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { return x + y*(__pyx_t_float_complex)_Complex_I; } #endif #else static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { __pyx_t_float_complex z; z.real = x; z.imag = y; return z; } #endif #if CYTHON_CCOMPLEX #else static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) { return (a.real == b.real) && (a.imag == b.imag); } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; z.real = a.real + b.real; z.imag = a.imag + b.imag; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; z.real = a.real - b.real; z.imag = a.imag - b.imag; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; z.real = a.real * b.real - a.imag * b.imag; z.imag = a.real * b.imag + a.imag * b.real; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; float denom = b.real * b.real + b.imag * b.imag; z.real = (a.real * b.real + a.imag * b.imag) / denom; z.imag = (a.imag * b.real - a.real * b.imag) / denom; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) { __pyx_t_float_complex z; z.real = -a.real; z.imag = -a.imag; return z; } static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) { return (a.real == 0) && (a.imag == 0); } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) { __pyx_t_float_complex z; z.real = a.real; z.imag = -a.imag; return z; } #if 1 static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) { #if !defined(HAVE_HYPOT) || defined(_MSC_VER) return sqrtf(z.real*z.real + z.imag*z.imag); #else return hypotf(z.real, z.imag); #endif } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; float r, lnr, theta, z_r, z_theta; if (b.imag == 0 && b.real == (int)b.real) { if (b.real < 0) { float denom = a.real * a.real + a.imag * a.imag; a.real = a.real / denom; a.imag = -a.imag / denom; b.real = -b.real; } switch ((int)b.real) { case 0: z.real = 1; z.imag = 0; return z; case 1: return a; case 2: z = __Pyx_c_prodf(a, a); return __Pyx_c_prodf(a, a); case 3: z = __Pyx_c_prodf(a, a); return __Pyx_c_prodf(z, a); case 4: z = __Pyx_c_prodf(a, a); return __Pyx_c_prodf(z, z); } } if (a.imag == 0) { if (a.real == 0) { return a; } r = a.real; theta = 0; } else { r = __Pyx_c_absf(a); theta = atan2f(a.imag, a.real); } lnr = logf(r); z_r = expf(lnr * b.real - theta * b.imag); z_theta = theta * b.real + lnr * b.imag; z.real = z_r * cosf(z_theta); z.imag = z_r * sinf(z_theta); return z; } #endif #endif #if CYTHON_CCOMPLEX #ifdef __cplusplus static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { return ::std::complex< double >(x, y); } #else static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { return x + y*(__pyx_t_double_complex)_Complex_I; } #endif #else static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { __pyx_t_double_complex z; z.real = x; z.imag = y; return z; } #endif #if CYTHON_CCOMPLEX #else static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) { return (a.real == b.real) && (a.imag == b.imag); } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; z.real = a.real + b.real; z.imag = a.imag + b.imag; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; z.real = a.real - b.real; z.imag = a.imag - b.imag; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; z.real = a.real * b.real - a.imag * b.imag; z.imag = a.real * b.imag + a.imag * b.real; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; double denom = b.real * b.real + b.imag * b.imag; z.real = (a.real * b.real + a.imag * b.imag) / denom; z.imag = (a.imag * b.real - a.real * b.imag) / denom; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) { __pyx_t_double_complex z; z.real = -a.real; z.imag = -a.imag; return z; } static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) { return (a.real == 0) && (a.imag == 0); } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) { __pyx_t_double_complex z; z.real = a.real; z.imag = -a.imag; return z; } #if 1 static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) { #if !defined(HAVE_HYPOT) || defined(_MSC_VER) return sqrt(z.real*z.real + z.imag*z.imag); #else return hypot(z.real, z.imag); #endif } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; double r, lnr, theta, z_r, z_theta; if (b.imag == 0 && b.real == (int)b.real) { if (b.real < 0) { double denom = a.real * a.real + a.imag * a.imag; a.real = a.real / denom; a.imag = -a.imag / denom; b.real = -b.real; } switch ((int)b.real) { case 0: z.real = 1; z.imag = 0; return z; case 1: return a; case 2: z = __Pyx_c_prod(a, a); return __Pyx_c_prod(a, a); case 3: z = __Pyx_c_prod(a, a); return __Pyx_c_prod(z, a); case 4: z = __Pyx_c_prod(a, a); return __Pyx_c_prod(z, z); } } if (a.imag == 0) { if (a.real == 0) { return a; } r = a.real; theta = 0; } else { r = __Pyx_c_abs(a); theta = atan2(a.imag, a.real); } lnr = log(r); z_r = exp(lnr * b.real - theta * b.imag); z_theta = theta * b.real + lnr * b.imag; z.real = z_r * cos(z_theta); z.imag = z_r * sin(z_theta); return z; } #endif #endif static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) { const unsigned char neg_one = (unsigned char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned char" : "value too large to convert to unsigned char"); } return (unsigned char)-1; } return (unsigned char)val; } return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) { const unsigned short neg_one = (unsigned short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned short" : "value too large to convert to unsigned short"); } return (unsigned short)-1; } return (unsigned short)val; } return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) { const unsigned int neg_one = (unsigned int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned int" : "value too large to convert to unsigned int"); } return (unsigned int)-1; } return (unsigned int)val; } return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) { const char neg_one = (char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to char" : "value too large to convert to char"); } return (char)-1; } return (char)val; } return (char)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) { const short neg_one = (short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to short" : "value too large to convert to short"); } return (short)-1; } return (short)val; } return (short)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) { const int neg_one = (int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to int" : "value too large to convert to int"); } return (int)-1; } return (int)val; } return (int)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) { const signed char neg_one = (signed char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed char" : "value too large to convert to signed char"); } return (signed char)-1; } return (signed char)val; } return (signed char)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) { const signed short neg_one = (signed short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed short" : "value too large to convert to signed short"); } return (signed short)-1; } return (signed short)val; } return (signed short)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) { const signed int neg_one = (signed int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed int" : "value too large to convert to signed int"); } return (signed int)-1; } return (signed int)val; } return (signed int)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) { const int neg_one = (int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to int" : "value too large to convert to int"); } return (int)-1; } return (int)val; } return (int)__Pyx_PyInt_AsLong(x); } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) { const unsigned long neg_one = (unsigned long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned long"); return (unsigned long)-1; } return (unsigned long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (unsigned long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned long"); return (unsigned long)-1; } return (unsigned long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(unsigned long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(unsigned long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (unsigned long)PyLong_AsLong(x); } } else { unsigned long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (unsigned long)-1; val = __Pyx_PyInt_AsUnsignedLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) { const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned PY_LONG_LONG"); return (unsigned PY_LONG_LONG)-1; } return (unsigned PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned PY_LONG_LONG"); return (unsigned PY_LONG_LONG)-1; } return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x); } } else { unsigned PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (unsigned PY_LONG_LONG)-1; val = __Pyx_PyInt_AsUnsignedLongLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) { const long neg_one = (long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to long"); return (long)-1; } return (long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to long"); return (long)-1; } return (long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (long)PyLong_AsLong(x); } } else { long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (long)-1; val = __Pyx_PyInt_AsLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) { const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to PY_LONG_LONG"); return (PY_LONG_LONG)-1; } return (PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to PY_LONG_LONG"); return (PY_LONG_LONG)-1; } return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (PY_LONG_LONG)PyLong_AsLongLong(x); } } else { PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (PY_LONG_LONG)-1; val = __Pyx_PyInt_AsLongLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) { const signed long neg_one = (signed long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed long"); return (signed long)-1; } return (signed long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (signed long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed long"); return (signed long)-1; } return (signed long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(signed long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(signed long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (signed long)PyLong_AsLong(x); } } else { signed long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (signed long)-1; val = __Pyx_PyInt_AsSignedLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) { const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed PY_LONG_LONG"); return (signed PY_LONG_LONG)-1; } return (signed PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed PY_LONG_LONG"); return (signed PY_LONG_LONG)-1; } return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (signed PY_LONG_LONG)PyLong_AsLongLong(x); } } else { signed PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (signed PY_LONG_LONG)-1; val = __Pyx_PyInt_AsSignedLongLong(tmp); Py_DECREF(tmp); return val; } } static int __Pyx_check_binary_version(void) { char ctversion[4], rtversion[4]; PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { char message[200]; PyOS_snprintf(message, sizeof(message), "compiletime version %s of module '%.100s' " "does not match runtime version %s", ctversion, __Pyx_MODULE_NAME, rtversion); #if PY_VERSION_HEX < 0x02050000 return PyErr_Warn(NULL, message); #else return PyErr_WarnEx(NULL, message, 1); #endif } return 0; } #ifndef __PYX_HAVE_RT_ImportModule #define __PYX_HAVE_RT_ImportModule static PyObject *__Pyx_ImportModule(const char *name) { PyObject *py_name = 0; PyObject *py_module = 0; py_name = __Pyx_PyIdentifier_FromString(name); if (!py_name) goto bad; py_module = PyImport_Import(py_name); Py_DECREF(py_name); return py_module; bad: Py_XDECREF(py_name); return 0; } #endif #ifndef __PYX_HAVE_RT_ImportType #define __PYX_HAVE_RT_ImportType static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict) { PyObject *py_module = 0; PyObject *result = 0; PyObject *py_name = 0; char warning[200]; Py_ssize_t basicsize; #ifdef Py_LIMITED_API PyObject *py_basicsize; #endif py_module = __Pyx_ImportModule(module_name); if (!py_module) goto bad; py_name = __Pyx_PyIdentifier_FromString(class_name); if (!py_name) goto bad; result = PyObject_GetAttr(py_module, py_name); Py_DECREF(py_name); py_name = 0; Py_DECREF(py_module); py_module = 0; if (!result) goto bad; if (!PyType_Check(result)) { PyErr_Format(PyExc_TypeError, "%s.%s is not a type object", module_name, class_name); goto bad; } #ifndef Py_LIMITED_API basicsize = ((PyTypeObject *)result)->tp_basicsize; #else py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); if (!py_basicsize) goto bad; basicsize = PyLong_AsSsize_t(py_basicsize); Py_DECREF(py_basicsize); py_basicsize = 0; if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) goto bad; #endif if (!strict && (size_t)basicsize > size) { PyOS_snprintf(warning, sizeof(warning), "%s.%s size changed, may indicate binary incompatibility", module_name, class_name); #if PY_VERSION_HEX < 0x02050000 if (PyErr_Warn(NULL, warning) < 0) goto bad; #else if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; #endif } else if ((size_t)basicsize != size) { PyErr_Format(PyExc_ValueError, "%s.%s has the wrong size, try recompiling", module_name, class_name); goto bad; } return (PyTypeObject *)result; bad: Py_XDECREF(py_module); Py_XDECREF(result); return NULL; } #endif static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { int start = 0, mid = 0, end = count - 1; if (end >= 0 && code_line > entries[end].code_line) { return count; } while (start < end) { mid = (start + end) / 2; if (code_line < entries[mid].code_line) { end = mid; } else if (code_line > entries[mid].code_line) { start = mid + 1; } else { return mid; } } if (code_line <= entries[mid].code_line) { return mid; } else { return mid + 1; } } static PyCodeObject *__pyx_find_code_object(int code_line) { PyCodeObject* code_object; int pos; if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { return NULL; } pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { return NULL; } code_object = __pyx_code_cache.entries[pos].code_object; Py_INCREF(code_object); return code_object; } static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { int pos, i; __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; if (unlikely(!code_line)) { return; } if (unlikely(!entries)) { entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); if (likely(entries)) { __pyx_code_cache.entries = entries; __pyx_code_cache.max_count = 64; __pyx_code_cache.count = 1; entries[0].code_line = code_line; entries[0].code_object = code_object; Py_INCREF(code_object); } return; } pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { PyCodeObject* tmp = entries[pos].code_object; entries[pos].code_object = code_object; Py_DECREF(tmp); return; } if (__pyx_code_cache.count == __pyx_code_cache.max_count) { int new_max = __pyx_code_cache.max_count + 64; entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); if (unlikely(!entries)) { return; } __pyx_code_cache.entries = entries; __pyx_code_cache.max_count = new_max; } for (i=__pyx_code_cache.count; i>pos; i--) { entries[i] = entries[i-1]; } entries[pos].code_line = code_line; entries[pos].code_object = code_object; __pyx_code_cache.count++; Py_INCREF(code_object); } #include "compile.h" #include "frameobject.h" #include "traceback.h" static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( const char *funcname, int c_line, int py_line, const char *filename) { PyCodeObject *py_code = 0; PyObject *py_srcfile = 0; PyObject *py_funcname = 0; #if PY_MAJOR_VERSION < 3 py_srcfile = PyString_FromString(filename); #else py_srcfile = PyUnicode_FromString(filename); #endif if (!py_srcfile) goto bad; if (c_line) { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); #else py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); #endif } else { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromString(funcname); #else py_funcname = PyUnicode_FromString(funcname); #endif } if (!py_funcname) goto bad; py_code = __Pyx_PyCode_New( 0, /*int argcount,*/ 0, /*int kwonlyargcount,*/ 0, /*int nlocals,*/ 0, /*int stacksize,*/ 0, /*int flags,*/ __pyx_empty_bytes, /*PyObject *code,*/ __pyx_empty_tuple, /*PyObject *consts,*/ __pyx_empty_tuple, /*PyObject *names,*/ __pyx_empty_tuple, /*PyObject *varnames,*/ __pyx_empty_tuple, /*PyObject *freevars,*/ __pyx_empty_tuple, /*PyObject *cellvars,*/ py_srcfile, /*PyObject *filename,*/ py_funcname, /*PyObject *name,*/ py_line, /*int firstlineno,*/ __pyx_empty_bytes /*PyObject *lnotab*/ ); Py_DECREF(py_srcfile); Py_DECREF(py_funcname); return py_code; bad: Py_XDECREF(py_srcfile); Py_XDECREF(py_funcname); return NULL; } static void __Pyx_AddTraceback(const char *funcname, int c_line, int py_line, const char *filename) { PyCodeObject *py_code = 0; PyObject *py_globals = 0; PyFrameObject *py_frame = 0; py_code = __pyx_find_code_object(c_line ? c_line : py_line); if (!py_code) { py_code = __Pyx_CreateCodeObjectForTraceback( funcname, c_line, py_line, filename); if (!py_code) goto bad; __pyx_insert_code_object(c_line ? c_line : py_line, py_code); } py_globals = PyModule_GetDict(__pyx_m); if (!py_globals) goto bad; py_frame = PyFrame_New( PyThreadState_GET(), /*PyThreadState *tstate,*/ py_code, /*PyCodeObject *code,*/ py_globals, /*PyObject *globals,*/ 0 /*PyObject *locals*/ ); if (!py_frame) goto bad; py_frame->f_lineno = py_line; PyTraceBack_Here(py_frame); bad: Py_XDECREF(py_code); Py_XDECREF(py_frame); } static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { while (t->p) { #if PY_MAJOR_VERSION < 3 if (t->is_unicode) { *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); } else if (t->intern) { *t->p = PyString_InternFromString(t->s); } else { *t->p = PyString_FromStringAndSize(t->s, t->n - 1); } #else /* Python 3+ has unicode identifiers */ if (t->is_unicode | t->is_str) { if (t->intern) { *t->p = PyUnicode_InternFromString(t->s); } else if (t->encoding) { *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); } else { *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); } } else { *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); } #endif if (!*t->p) return -1; ++t; } return 0; } static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); } static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { Py_ssize_t ignore; return __Pyx_PyObject_AsStringAndSize(o, &ignore); } static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT if ( #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII __Pyx_sys_getdefaultencoding_not_ascii && #endif PyUnicode_Check(o)) { #if PY_VERSION_HEX < 0x03030000 char* defenc_c; PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); if (!defenc) return NULL; defenc_c = PyBytes_AS_STRING(defenc); #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII { char* end = defenc_c + PyBytes_GET_SIZE(defenc); char* c; for (c = defenc_c; c < end; c++) { if ((unsigned char) (*c) >= 128) { PyUnicode_AsASCIIString(o); return NULL; } } } #endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ *length = PyBytes_GET_SIZE(defenc); return defenc_c; #else /* PY_VERSION_HEX < 0x03030000 */ if (PyUnicode_READY(o) == -1) return NULL; #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII if (PyUnicode_IS_ASCII(o)) { *length = PyUnicode_GET_DATA_SIZE(o); return PyUnicode_AsUTF8(o); } else { PyUnicode_AsASCIIString(o); return NULL; } #else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ return PyUnicode_AsUTF8AndSize(o, length); #endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ #endif /* PY_VERSION_HEX < 0x03030000 */ } else #endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ { char* result; int r = PyBytes_AsStringAndSize(o, &result, length); if (r < 0) { return NULL; } else { return result; } } } static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { int is_true = x == Py_True; if (is_true | (x == Py_False) | (x == Py_None)) return is_true; else return PyObject_IsTrue(x); } static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { PyNumberMethods *m; const char *name = NULL; PyObject *res = NULL; #if PY_MAJOR_VERSION < 3 if (PyInt_Check(x) || PyLong_Check(x)) #else if (PyLong_Check(x)) #endif return Py_INCREF(x), x; m = Py_TYPE(x)->tp_as_number; #if PY_MAJOR_VERSION < 3 if (m && m->nb_int) { name = "int"; res = PyNumber_Int(x); } else if (m && m->nb_long) { name = "long"; res = PyNumber_Long(x); } #else if (m && m->nb_int) { name = "int"; res = PyNumber_Long(x); } #endif if (res) { #if PY_MAJOR_VERSION < 3 if (!PyInt_Check(res) && !PyLong_Check(res)) { #else if (!PyLong_Check(res)) { #endif PyErr_Format(PyExc_TypeError, "__%s__ returned non-%s (type %.200s)", name, name, Py_TYPE(res)->tp_name); Py_DECREF(res); return NULL; } } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_TypeError, "an integer is required"); } return res; } static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { Py_ssize_t ival; PyObject* x = PyNumber_Index(b); if (!x) return -1; ival = PyInt_AsSsize_t(x); Py_DECREF(x); return ival; } static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { #if PY_VERSION_HEX < 0x02050000 if (ival <= LONG_MAX) return PyInt_FromLong((long)ival); else { unsigned char *bytes = (unsigned char *) &ival; int one = 1; int little = (int)*(unsigned char*)&one; return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); } #else return PyInt_FromSize_t(ival); #endif } static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) { unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x); if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) { if ((val != (unsigned PY_LONG_LONG)-1) || !PyErr_Occurred()) PyErr_SetString(PyExc_OverflowError, "value too large to convert to size_t"); return (size_t)-1; } return (size_t)val; } #endif /* Py_PYTHON_H */ ga-5-3/python/ga4py/gain/util.c0000640005473000001440000333414612275260602015220 0ustar d3n000users/* Generated by Cython 0.19.2 on Fri Feb 7 14:43:13 2014 */ #define PY_SSIZE_T_CLEAN #ifndef CYTHON_USE_PYLONG_INTERNALS #ifdef PYLONG_BITS_IN_DIGIT #define CYTHON_USE_PYLONG_INTERNALS 0 #else #include "pyconfig.h" #ifdef PYLONG_BITS_IN_DIGIT #define CYTHON_USE_PYLONG_INTERNALS 1 #else #define CYTHON_USE_PYLONG_INTERNALS 0 #endif #endif #endif #include "Python.h" #ifndef Py_PYTHON_H #error Python headers needed to compile C extensions, please install development version of Python. #elif PY_VERSION_HEX < 0x02040000 #error Cython requires Python 2.4+. #else #include /* For offsetof */ #ifndef offsetof #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) #endif #if !defined(WIN32) && !defined(MS_WINDOWS) #ifndef __stdcall #define __stdcall #endif #ifndef __cdecl #define __cdecl #endif #ifndef __fastcall #define __fastcall #endif #endif #ifndef DL_IMPORT #define DL_IMPORT(t) t #endif #ifndef DL_EXPORT #define DL_EXPORT(t) t #endif #ifndef PY_LONG_LONG #define PY_LONG_LONG LONG_LONG #endif #ifndef Py_HUGE_VAL #define Py_HUGE_VAL HUGE_VAL #endif #ifdef PYPY_VERSION #define CYTHON_COMPILING_IN_PYPY 1 #define CYTHON_COMPILING_IN_CPYTHON 0 #else #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 1 #endif #if PY_VERSION_HEX < 0x02050000 typedef int Py_ssize_t; #define PY_SSIZE_T_MAX INT_MAX #define PY_SSIZE_T_MIN INT_MIN #define PY_FORMAT_SIZE_T "" #define CYTHON_FORMAT_SSIZE_T "" #define PyInt_FromSsize_t(z) PyInt_FromLong(z) #define PyInt_AsSsize_t(o) __Pyx_PyInt_AsInt(o) #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ (PyErr_Format(PyExc_TypeError, \ "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ (PyObject*)0)) #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ !PyComplex_Check(o)) #define PyIndex_Check __Pyx_PyIndex_Check #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) #define __PYX_BUILD_PY_SSIZE_T "i" #else #define __PYX_BUILD_PY_SSIZE_T "n" #define CYTHON_FORMAT_SSIZE_T "z" #define __Pyx_PyIndex_Check PyIndex_Check #endif #if PY_VERSION_HEX < 0x02060000 #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) #define PyVarObject_HEAD_INIT(type, size) \ PyObject_HEAD_INIT(type) size, #define PyType_Modified(t) typedef struct { void *buf; PyObject *obj; Py_ssize_t len; Py_ssize_t itemsize; int readonly; int ndim; char *format; Py_ssize_t *shape; Py_ssize_t *strides; Py_ssize_t *suboffsets; void *internal; } Py_buffer; #define PyBUF_SIMPLE 0 #define PyBUF_WRITABLE 0x0001 #define PyBUF_FORMAT 0x0004 #define PyBUF_ND 0x0008 #define PyBUF_STRIDES (0x0010 | PyBUF_ND) #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); typedef void (*releasebufferproc)(PyObject *, Py_buffer *); #endif #if PY_MAJOR_VERSION < 3 #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else #define __Pyx_BUILTIN_MODULE_NAME "builtins" #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #endif #if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6 #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") #endif #if PY_MAJOR_VERSION >= 3 #define Py_TPFLAGS_CHECKTYPES 0 #define Py_TPFLAGS_HAVE_INDEX 0 #endif #if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) #define Py_TPFLAGS_HAVE_NEWBUFFER 0 #endif #if PY_VERSION_HEX < 0x02060000 #define Py_TPFLAGS_HAVE_VERSION_TAG 0 #endif #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) #define CYTHON_PEP393_ENABLED 1 #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ 0 : _PyUnicode_Ready((PyObject *)(op))) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) #else #define CYTHON_PEP393_ENABLED 0 #define __Pyx_PyUnicode_READY(op) (0) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) #define __Pyx_PyUnicode_READ(k, d, i) ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i])) #endif #if PY_MAJOR_VERSION >= 3 #define PyBaseString_Type PyUnicode_Type #define PyStringObject PyUnicodeObject #define PyString_Type PyUnicode_Type #define PyString_Check PyUnicode_Check #define PyString_CheckExact PyUnicode_CheckExact #endif #if PY_VERSION_HEX < 0x02060000 #define PyBytesObject PyStringObject #define PyBytes_Type PyString_Type #define PyBytes_Check PyString_Check #define PyBytes_CheckExact PyString_CheckExact #define PyBytes_FromString PyString_FromString #define PyBytes_FromStringAndSize PyString_FromStringAndSize #define PyBytes_FromFormat PyString_FromFormat #define PyBytes_DecodeEscape PyString_DecodeEscape #define PyBytes_AsString PyString_AsString #define PyBytes_AsStringAndSize PyString_AsStringAndSize #define PyBytes_Size PyString_Size #define PyBytes_AS_STRING PyString_AS_STRING #define PyBytes_GET_SIZE PyString_GET_SIZE #define PyBytes_Repr PyString_Repr #define PyBytes_Concat PyString_Concat #define PyBytes_ConcatAndDel PyString_ConcatAndDel #endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) #else #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ PyString_Check(obj) || PyUnicode_Check(obj)) #define __Pyx_PyBaseString_CheckExact(obj) (Py_TYPE(obj) == &PyBaseString_Type) #endif #if PY_VERSION_HEX < 0x02060000 #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) #endif #ifndef PySet_CheckExact #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) #endif #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) #if PY_MAJOR_VERSION >= 3 #define PyIntObject PyLongObject #define PyInt_Type PyLong_Type #define PyInt_Check(op) PyLong_Check(op) #define PyInt_CheckExact(op) PyLong_CheckExact(op) #define PyInt_FromString PyLong_FromString #define PyInt_FromUnicode PyLong_FromUnicode #define PyInt_FromLong PyLong_FromLong #define PyInt_FromSize_t PyLong_FromSize_t #define PyInt_FromSsize_t PyLong_FromSsize_t #define PyInt_AsLong PyLong_AsLong #define PyInt_AS_LONG PyLong_AS_LONG #define PyInt_AsSsize_t PyLong_AsSsize_t #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask #endif #if PY_MAJOR_VERSION >= 3 #define PyBoolObject PyLongObject #endif #if PY_VERSION_HEX < 0x03020000 typedef long Py_hash_t; #define __Pyx_PyInt_FromHash_t PyInt_FromLong #define __Pyx_PyInt_AsHash_t PyInt_AsLong #else #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t #endif #if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) #else #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) #endif #if PY_MAJOR_VERSION >= 3 #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) #endif #if PY_VERSION_HEX < 0x02050000 #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) #else #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) #endif #if PY_VERSION_HEX < 0x02050000 #define __Pyx_NAMESTR(n) ((char *)(n)) #define __Pyx_DOCSTR(n) ((char *)(n)) #else #define __Pyx_NAMESTR(n) (n) #define __Pyx_DOCSTR(n) (n) #endif #ifndef CYTHON_INLINE #if defined(__GNUC__) #define CYTHON_INLINE __inline__ #elif defined(_MSC_VER) #define CYTHON_INLINE __inline #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CYTHON_INLINE inline #else #define CYTHON_INLINE #endif #endif #ifndef CYTHON_RESTRICT #if defined(__GNUC__) #define CYTHON_RESTRICT __restrict__ #elif defined(_MSC_VER) && _MSC_VER >= 1400 #define CYTHON_RESTRICT __restrict #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CYTHON_RESTRICT restrict #else #define CYTHON_RESTRICT #endif #endif #ifdef NAN #define __PYX_NAN() ((float) NAN) #else static CYTHON_INLINE float __PYX_NAN() { /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is a quiet NaN. */ float value; memset(&value, 0xFF, sizeof(value)); return value; } #endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) #else #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) #endif #ifndef __PYX_EXTERN_C #ifdef __cplusplus #define __PYX_EXTERN_C extern "C" #else #define __PYX_EXTERN_C extern #endif #endif #if defined(WIN32) || defined(MS_WINDOWS) #define _USE_MATH_DEFINES #endif #include #define __PYX_HAVE__ga4py__gain__util #define __PYX_HAVE_API__ga4py__gain__util #ifdef _OPENMP #include #endif /* _OPENMP */ #ifdef PYREX_WITHOUT_ASSERTIONS #define CYTHON_WITHOUT_ASSERTIONS #endif #ifndef CYTHON_UNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) # define CYTHON_UNUSED __attribute__ ((__unused__)) # else # define CYTHON_UNUSED # endif # elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) # define CYTHON_UNUSED __attribute__ ((__unused__)) # else # define CYTHON_UNUSED # endif #endif typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ #define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 #define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 #define __PYX_DEFAULT_STRING_ENCODING "" #define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString #define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); #define __Pyx_PyBytes_FromString PyBytes_FromString #define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); #if PY_MAJOR_VERSION < 3 #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize #else #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize #endif #define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) #define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) #define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) #define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) #if PY_MAJOR_VERSION < 3 static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { const Py_UNICODE *u_end = u; while (*u_end++) ; return u_end - u - 1; } #else #define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen #endif #define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) #define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode #define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode #define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) #define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*); #if CYTHON_COMPILING_IN_CPYTHON #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) #else #define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) #endif #define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII static int __Pyx_sys_getdefaultencoding_not_ascii; static int __Pyx_init_sys_getdefaultencoding_params() { PyObject* sys = NULL; PyObject* default_encoding = NULL; PyObject* ascii_chars_u = NULL; PyObject* ascii_chars_b = NULL; sys = PyImport_ImportModule("sys"); if (sys == NULL) goto bad; default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); if (default_encoding == NULL) goto bad; if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { __Pyx_sys_getdefaultencoding_not_ascii = 0; } else { const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); char ascii_chars[128]; int c; for (c = 0; c < 128; c++) { ascii_chars[c] = c; } __Pyx_sys_getdefaultencoding_not_ascii = 1; ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); if (ascii_chars_u == NULL) goto bad; ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { PyErr_Format( PyExc_ValueError, "This module compiled with c_string_encoding=ascii, but default encoding '%s' is not a superset of ascii.", default_encoding_c); goto bad; } } Py_XDECREF(sys); Py_XDECREF(default_encoding); Py_XDECREF(ascii_chars_u); Py_XDECREF(ascii_chars_b); return 0; bad: Py_XDECREF(sys); Py_XDECREF(default_encoding); Py_XDECREF(ascii_chars_u); Py_XDECREF(ascii_chars_b); return -1; } #endif #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) #else #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT static char* __PYX_DEFAULT_STRING_ENCODING; static int __Pyx_init_sys_getdefaultencoding_params() { PyObject* sys = NULL; PyObject* default_encoding = NULL; char* default_encoding_c; sys = PyImport_ImportModule("sys"); if (sys == NULL) goto bad; default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); if (default_encoding == NULL) goto bad; default_encoding_c = PyBytes_AS_STRING(default_encoding); __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); Py_DECREF(sys); Py_DECREF(default_encoding); return 0; bad: Py_XDECREF(sys); Py_XDECREF(default_encoding); return -1; } #endif #endif #ifdef __GNUC__ /* Test for GCC > 2.95 */ #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #else /* __GNUC__ > 2 ... */ #define likely(x) (x) #define unlikely(x) (x) #endif /* __GNUC__ > 2 ... */ #else /* __GNUC__ */ #define likely(x) (x) #define unlikely(x) (x) #endif /* __GNUC__ */ static PyObject *__pyx_m; static PyObject *__pyx_d; static PyObject *__pyx_b; static PyObject *__pyx_empty_tuple; static PyObject *__pyx_empty_bytes; static int __pyx_lineno; static int __pyx_clineno = 0; static const char * __pyx_cfilenm= __FILE__; static const char *__pyx_filename; static const char *__pyx_f[] = { "util.pyx", }; /*--- Type declarations ---*/ #ifndef CYTHON_REFNANNY #define CYTHON_REFNANNY 0 #endif #if CYTHON_REFNANNY typedef struct { void (*INCREF)(void*, PyObject*, int); void (*DECREF)(void*, PyObject*, int); void (*GOTREF)(void*, PyObject*, int); void (*GIVEREF)(void*, PyObject*, int); void* (*SetupContext)(const char*, int, const char*); void (*FinishContext)(void**); } __Pyx_RefNannyAPIStruct; static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; #ifdef WITH_THREAD #define __Pyx_RefNannySetupContext(name, acquire_gil) \ if (acquire_gil) { \ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ PyGILState_Release(__pyx_gilstate_save); \ } else { \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ } #else #define __Pyx_RefNannySetupContext(name, acquire_gil) \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) #endif #define __Pyx_RefNannyFinishContext() \ __Pyx_RefNanny->FinishContext(&__pyx_refnanny) #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) #else #define __Pyx_RefNannyDeclarations #define __Pyx_RefNannySetupContext(name, acquire_gil) #define __Pyx_RefNannyFinishContext() #define __Pyx_INCREF(r) Py_INCREF(r) #define __Pyx_DECREF(r) Py_DECREF(r) #define __Pyx_GOTREF(r) #define __Pyx_GIVEREF(r) #define __Pyx_XINCREF(r) Py_XINCREF(r) #define __Pyx_XDECREF(r) Py_XDECREF(r) #define __Pyx_XGOTREF(r) #define __Pyx_XGIVEREF(r) #endif /* CYTHON_REFNANNY */ #define __Pyx_XDECREF_SET(r, v) do { \ PyObject *tmp = (PyObject *) r; \ r = v; __Pyx_XDECREF(tmp); \ } while (0) #define __Pyx_DECREF_SET(r, v) do { \ PyObject *tmp = (PyObject *) r; \ r = v; __Pyx_DECREF(tmp); \ } while (0) #define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) #define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { PyTypeObject* tp = Py_TYPE(obj); if (likely(tp->tp_getattro)) return tp->tp_getattro(obj, attr_name); #if PY_MAJOR_VERSION < 3 if (likely(tp->tp_getattr)) return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); #endif return PyObject_GetAttr(obj, attr_name); } #else #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) #endif static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ #ifndef CYTHON_PROFILE #define CYTHON_PROFILE 1 #endif #ifndef CYTHON_TRACE #define CYTHON_TRACE 0 #endif #if CYTHON_TRACE #undef CYTHON_PROFILE_REUSE_FRAME #endif #ifndef CYTHON_PROFILE_REUSE_FRAME #define CYTHON_PROFILE_REUSE_FRAME 0 #endif #if CYTHON_PROFILE || CYTHON_TRACE #include "compile.h" #include "frameobject.h" #include "traceback.h" #if CYTHON_PROFILE_REUSE_FRAME #define CYTHON_FRAME_MODIFIER static #define CYTHON_FRAME_DEL #else #define CYTHON_FRAME_MODIFIER #define CYTHON_FRAME_DEL Py_CLEAR(__pyx_frame) #endif #define __Pyx_TraceDeclarations \ static PyCodeObject *__pyx_frame_code = NULL; \ CYTHON_FRAME_MODIFIER PyFrameObject *__pyx_frame = NULL; \ int __Pyx_use_tracing = 0; #define __Pyx_TraceCall(funcname, srcfile, firstlineno) \ if (unlikely(PyThreadState_GET()->use_tracing && \ (PyThreadState_GET()->c_profilefunc || (CYTHON_TRACE && PyThreadState_GET()->c_tracefunc)))) { \ __Pyx_use_tracing = __Pyx_TraceSetupAndCall(&__pyx_frame_code, &__pyx_frame, funcname, srcfile, firstlineno); \ } #define __Pyx_TraceException() \ if (unlikely(__Pyx_use_tracing) && PyThreadState_GET()->use_tracing && \ (PyThreadState_GET()->c_profilefunc || (CYTHON_TRACE && PyThreadState_GET()->c_tracefunc))) { \ PyThreadState* tstate = PyThreadState_GET(); \ tstate->use_tracing = 0; \ PyObject *exc_info = __Pyx_GetExceptionTuple(); \ if (exc_info) { \ if (CYTHON_TRACE && tstate->c_tracefunc) \ tstate->c_tracefunc( \ tstate->c_traceobj, __pyx_frame, PyTrace_EXCEPTION, exc_info); \ tstate->c_profilefunc( \ tstate->c_profileobj, __pyx_frame, PyTrace_EXCEPTION, exc_info); \ Py_DECREF(exc_info); \ } \ tstate->use_tracing = 1; \ } #define __Pyx_TraceReturn(result) \ if (unlikely(__Pyx_use_tracing) && PyThreadState_GET()->use_tracing) { \ PyThreadState* tstate = PyThreadState_GET(); \ tstate->use_tracing = 0; \ if (CYTHON_TRACE && tstate->c_tracefunc) \ tstate->c_tracefunc( \ tstate->c_traceobj, __pyx_frame, PyTrace_RETURN, (PyObject*)result); \ if (tstate->c_profilefunc) \ tstate->c_profilefunc( \ tstate->c_profileobj, __pyx_frame, PyTrace_RETURN, (PyObject*)result); \ CYTHON_FRAME_DEL; \ tstate->use_tracing = 1; \ } static PyCodeObject *__Pyx_createFrameCodeObject(const char *funcname, const char *srcfile, int firstlineno); /*proto*/ static int __Pyx_TraceSetupAndCall(PyCodeObject** code, PyFrameObject** frame, const char *funcname, const char *srcfile, int firstlineno); /*proto*/ #else #define __Pyx_TraceDeclarations #define __Pyx_TraceCall(funcname, srcfile, firstlineno) #define __Pyx_TraceException() #define __Pyx_TraceReturn(result) #endif /* CYTHON_PROFILE */ #if CYTHON_TRACE #define __Pyx_TraceLine(lineno) \ if (unlikely(__Pyx_use_tracing) && unlikely(PyThreadState_GET()->use_tracing && PyThreadState_GET()->c_tracefunc)) { \ PyThreadState* tstate = PyThreadState_GET(); \ __pyx_frame->f_lineno = lineno; \ tstate->use_tracing = 0; \ tstate->c_tracefunc(tstate->c_traceobj, __pyx_frame, PyTrace_LINE, NULL); \ tstate->use_tracing = 1; \ } #else #define __Pyx_TraceLine(lineno) #endif static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ #if CYTHON_COMPILING_IN_CPYTHON #define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL) static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { PyTypeObject* tp = Py_TYPE(obj); if (likely(tp->tp_setattro)) return tp->tp_setattro(obj, attr_name, value); #if PY_MAJOR_VERSION < 3 if (likely(tp->tp_setattr)) return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); #endif return PyObject_SetAttr(obj, attr_name, value); } #else #define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) #define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) #endif static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ const char* function_name); /*proto*/ static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/ #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { PyListObject* L = (PyListObject*) list; Py_ssize_t len = Py_SIZE(list); if (likely(L->allocated > len)) { Py_INCREF(x); PyList_SET_ITEM(list, len, x); Py_SIZE(list) = len+1; return 0; } return PyList_Append(list, x); } #else #define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) #endif #define __Pyx_CyFunction_USED 1 #include #define __Pyx_CYFUNCTION_STATICMETHOD 0x01 #define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 #define __Pyx_CYFUNCTION_CCLASS 0x04 #define __Pyx_CyFunction_GetClosure(f) \ (((__pyx_CyFunctionObject *) (f))->func_closure) #define __Pyx_CyFunction_GetClassObj(f) \ (((__pyx_CyFunctionObject *) (f))->func_classobj) #define __Pyx_CyFunction_Defaults(type, f) \ ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) #define __Pyx_CyFunction_SetDefaultsGetter(f, g) \ ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) typedef struct { PyCFunctionObject func; int flags; PyObject *func_dict; PyObject *func_weakreflist; PyObject *func_name; PyObject *func_qualname; PyObject *func_doc; PyObject *func_code; PyObject *func_closure; PyObject *func_classobj; /* No-args super() class cell */ void *defaults; int defaults_pyobjects; PyObject *defaults_tuple; /* Const defaults tuple */ PyObject *defaults_kwdict; /* Const kwonly defaults dict */ PyObject *(*defaults_getter)(PyObject *); PyObject *func_annotations; /* function annotations dict */ } __pyx_CyFunctionObject; static PyTypeObject *__pyx_CyFunctionType = 0; #define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, code) \ __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, code) static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml, int flags, PyObject* qualname, PyObject *self, PyObject *module, PyObject* code); static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, size_t size, int pyobjects); static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, PyObject *tuple); static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, PyObject *dict); static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, PyObject *dict); static int __Pyx_CyFunction_init(void); static CYTHON_INLINE int __Pyx_PySequence_Contains(PyObject* item, PyObject* seq, int eq) { int result = PySequence_Contains(seq, item); return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); } #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { PyListObject* L = (PyListObject*) list; Py_ssize_t len = Py_SIZE(list); if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { Py_INCREF(x); PyList_SET_ITEM(list, len, x); Py_SIZE(list) = len+1; return 0; } return PyList_Append(list, x); } #else #define __Pyx_PyList_Append(L,x) PyList_Append(L,x) #endif static PyObject* __Pyx_PyObject_CallMethodTuple(PyObject* obj, PyObject* method_name, PyObject* args) { PyObject *method, *result = NULL; if (unlikely(!args)) return NULL; method = __Pyx_PyObject_GetAttrStr(obj, method_name); if (unlikely(!method)) goto bad; result = PyObject_Call(method, args, NULL); Py_DECREF(method); bad: Py_DECREF(args); return result; } #define __Pyx_PyObject_CallMethod3(obj, name, arg1, arg2, arg3) \ __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(3, arg1, arg2, arg3)) #define __Pyx_PyObject_CallMethod2(obj, name, arg1, arg2) \ __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(2, arg1, arg2)) #define __Pyx_PyObject_CallMethod1(obj, name, arg1) \ __Pyx_PyObject_CallMethodTuple(obj, name, PyTuple_Pack(1, arg1)) #define __Pyx_PyObject_CallMethod0(obj, name) \ __Pyx_PyObject_CallMethodTuple(obj, name, (Py_INCREF(__pyx_empty_tuple), __pyx_empty_tuple)) static CYTHON_INLINE PyObject* __Pyx_PyObject_Append(PyObject* L, PyObject* x); /*proto*/ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, PyObject** py_start, PyObject** py_stop, PyObject** py_slice, int has_cstart, int has_cstop, int wraparound); static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ static PyObject *__Pyx_FindPy2Metaclass(PyObject *bases); /*proto*/ static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, PyObject *qualname, PyObject *modname); /*proto*/ static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *); static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *); static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *); static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *); static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *); static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *); static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *); static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *); static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *); static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *); static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *); static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *); static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *); static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *); static int __Pyx_check_binary_version(void); typedef struct { int code_line; PyCodeObject* code_object; } __Pyx_CodeObjectCacheEntry; struct __Pyx_CodeObjectCache { int count; int max_count; __Pyx_CodeObjectCacheEntry* entries; }; static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); static PyCodeObject *__pyx_find_code_object(int code_line); static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); static void __Pyx_AddTraceback(const char *funcname, int c_line, int py_line, const char *filename); /*proto*/ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ /* Module declarations from 'ga4py.gain.util' */ static PyObject *__pyx_f_5ga4py_4gain_4util_listify(PyObject *, int __pyx_skip_dispatch); /*proto*/ #define __Pyx_MODULE_NAME "ga4py.gain.util" int __pyx_module_is_main_ga4py__gain__util = 0; /* Implementation of 'ga4py.gain.util' */ static PyObject *__pyx_builtin_object; static PyObject *__pyx_builtin_property; static PyObject *__pyx_builtin_NotImplementedError; static PyObject *__pyx_builtin_IndexError; static PyObject *__pyx_builtin_AttributeError; static PyObject *__pyx_builtin_TypeError; static PyObject *__pyx_builtin_ValueError; static PyObject *__pyx_builtin_enumerate; static PyObject *__pyx_builtin_range; static PyObject *__pyx_builtin_reduce; static PyObject *__pyx_builtin_Ellipsis; static PyObject *__pyx_builtin_reversed; static PyObject *__pyx_builtin_map; static PyObject *__pyx_builtin_zip; static PyObject *__pyx_pf_5ga4py_4gain_4util_listify(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thing); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_3Key___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_3Key_2__eq__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_other); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_3Key_4__getitem__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_key); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_3Key_6__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_3Key_8__str__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_3Key_10bound_by_lohi(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_lo, CYTHON_UNUSED PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_3Key_12get_size(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_3Key_14pyobj(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_7NoneKey___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_7NoneKey_2__eq__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_7NoneKey_4__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_7NoneKey_6__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_7NoneKey_8__str__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_7NoneKey_10bound_by_lohi(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_lo, CYTHON_UNUSED PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_7NoneKey_12get_size(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_7NoneKey_14pyobj(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_value, PyObject *__pyx_v_origin); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_2__eq__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_4__getitem__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_key); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_6__int__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_8__long__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_10__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_12__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_14bound_by_lohi(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_16get_size(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_18pyobj(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8RangeKey___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_stop, PyObject *__pyx_v_step, PyObject *__pyx_v_origin); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8RangeKey_2__eq__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8RangeKey_4__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8RangeKey_6__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8RangeKey_8__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8RangeKey_10bound_by_lohi(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8RangeKey_12get_size(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8RangeKey_14pyobj(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_shape, PyObject *__pyx_v_data, PyObject *__pyx_v_fixed, PyObject *__pyx_v_T, PyObject *__pyx_v_TT); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_2__eq__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_4__iter__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_6__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_8__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_10_count_instances(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_args); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_12_get_instances(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_args); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_14_get_origins_within_data(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_16get_origin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_18get_sorted_origin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_20get_original_ndim(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_22get_shape(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_lambda_funcdef_lambda1(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_24get_size(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_26get_ndim(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_28pyobj(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_30replace_ellipsis(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_32__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_34bound_by_lohi(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_36lohi_T(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_38None_key(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_40get_lo_hi_skip_adjust(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_42access_key(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_44get_key(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_46transpose(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_axes); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_15broadcast_shape_worker(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_2broadcast_shape(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_first, PyObject *__pyx_v_second); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_4broadcast_chomp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_smaller_key, PyObject *__pyx_v_larger_key); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4util_6unravel_index(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x, PyObject *__pyx_v_dims); /* proto */ static char __pyx_k_1[] = "subclasses must define this"; static char __pyx_k_2[] = "Key()"; static char __pyx_k_3[] = "bad slice for NoneKey: %s"; static char __pyx_k_4[] = "index out of bounds"; static char __pyx_k_5[] = "NoneKey()"; static char __pyx_k_6[] = "bound_by_lohi nonsensical for NoneKey"; static char __pyx_k_7[] = "cannot index a FixedKey"; static char __pyx_k_8[] = "FixedKey(%s)"; static char __pyx_k_9[] = "lo/hi out of bounds %s <= %s < %s"; static char __pyx_k_10[] = "long() argument must be a string or a number, not %s"; static char __pyx_k_11[] = "invalid index"; static char __pyx_k_12[] = "RangeKey(%s,%s,%s)"; static char __pyx_k_13[] = "start >= hi (out of bounds)"; static char __pyx_k_14[] = "stop <= lo (out of bounds)"; static char __pyx_k_15[] = "negative step, start < lo (out of bounds)"; static char __pyx_k_16[] = "negative step, stop >= hi (out of bounds)"; static char __pyx_k_17[] = "bound_by_lohi resulted in 0 length"; static char __pyx_k_18[] = "specify either shape or data"; static char __pyx_k_19[] = "_get_origins_within_data"; static char __pyx_k_20[] = "MasterKey.get_size.."; static char __pyx_k_21[] = "ga4py.gain.util"; static char __pyx_k_23[] = "invalid index %s[%s]"; static char __pyx_k_26[] = "FixedKey found in MasterKey"; static char __pyx_k_27[] = "unrecognized item in MasterKey"; static char __pyx_k_32[] = "unhandled piece of MasterKey"; static char __pyx_k_34[] = "MasterKey contained unknown object"; static char __pyx_k_35[] = "shape mismatch: objects cannot be broadcast to a single shape"; static char __pyx_k_38[] = "/home/d3n000/ga/hpc_website/globalarrays/download/ga-5-3/python/ga4py/gain/util.pyx"; static char __pyx_k_39[] = "broadcast_shape..worker"; static char __pyx_k_41[] = "Invalid index, must be 0 <= x <= number of elements."; static char __pyx_k_47[] = "Contains index- and slice-related operations needed for bookkeeping.\n\nProbably the most import set of classes are the Key-related ones including\nKey, NoneKey, FixedKey, RangeKey, and MasterKey. These classes perform all of\nthe index arithmetic and index translation to make GAiN work.\n\nThe data distribution provided by Global Arrays is static. For a distributed\nimplementation of NumPy, this poses additional challenges on top of the\nchallenge of no longer having a single address space. The Key class contains\nan attribute 'origin' which refers back to the GA dimension it was originally\nassociated with. This allows us to determine transpose operations.\n\n"; static char __pyx_k_50[] = "Key.__init__"; static char __pyx_k_53[] = "Key.__eq__"; static char __pyx_k_56[] = "Key.__getitem__"; static char __pyx_k_59[] = "Key.__repr__"; static char __pyx_k_62[] = "Key.__str__"; static char __pyx_k_65[] = "Key.bound_by_lohi"; static char __pyx_k_68[] = "Key.get_size"; static char __pyx_k_71[] = "Key.pyobj"; static char __pyx_k_72[] = "An abstract base class for an index into an ndarray.\n\n You can index an array using an integer, a slice, or a None which are\n represented by the subclasses FixedKey, RangeKey, and NoneKey,\n respectively.\n \n Key instances may refer to an original dimension index using the 'origin'\n attribute. The 'origin' attribute only makes sense for the FixedKey and\n RangeKey subclasses.\n\n Subclasses should define __eq__, __getitem__, size, and pyobj.\n\n Attributes\n ----------\n origin : int, or None\n The original index this Key refers to.\n size : int\n shorthand for get_size() method\n \n "; static char __pyx_k_75[] = "NoneKey.__init__"; static char __pyx_k_78[] = "NoneKey.__eq__"; static char __pyx_k_81[] = "NoneKey.__getitem__"; static char __pyx_k_84[] = "NoneKey.__repr__"; static char __pyx_k_87[] = "NoneKey.__str__"; static char __pyx_k_90[] = "NoneKey.bound_by_lohi"; static char __pyx_k_93[] = "NoneKey.get_size"; static char __pyx_k_96[] = "NoneKey.pyobj"; static char __pyx_k_97[] = "A None with additional Key methods.\n \n Slicing a None is allowed. A None (newaxis) can be removed by slicing it\n with a value of 0. Slicing a None returns None which indicates the\n dimension should be removed.\n\n NoneKey instances should never have their origin attribute set since a\n None for an axis should never refer back to an original GA shape.\n \n "; static char __pyx_k__T[] = "T"; static char __pyx_k__h[] = "h"; static char __pyx_k__i[] = "i"; static char __pyx_k__l[] = "l"; static char __pyx_k__s[] = "s"; static char __pyx_k__x[] = "x"; static char __pyx_k__y[] = "y"; static char __pyx_k_100[] = "FixedKey.__init__"; static char __pyx_k_103[] = "FixedKey.__eq__"; static char __pyx_k_106[] = "FixedKey.__getitem__"; static char __pyx_k_109[] = "FixedKey.__int__"; static char __pyx_k_112[] = "FixedKey.__long__"; static char __pyx_k_115[] = "FixedKey.__repr__"; static char __pyx_k_118[] = "FixedKey.__str__"; static char __pyx_k_121[] = "FixedKey.bound_by_lohi"; static char __pyx_k_124[] = "FixedKey.get_size"; static char __pyx_k_127[] = "FixedKey.pyobj"; static char __pyx_k_128[] = "An integer with additional Key methods.\n \n There must be a valid 'value' at all times. Anything that can be\n transformed into an int or long is allowed. long is prefered.\n\n FixedKey instances must always refer to an original GA dimension using the\n 'origin' attribute. It does not make sense for a FixedKey to be without an\n 'origin'.\n\n Attributes\n ----------\n origin : int, or None\n The original index this FixedKey refers to.\n size : int\n shorthand for get_size() method\n \n "; static char __pyx_k_132[] = "RangeKey.__init__"; static char __pyx_k_135[] = "RangeKey.__eq__"; static char __pyx_k_138[] = "RangeKey.__getitem__"; static char __pyx_k_141[] = "RangeKey.__str__"; static char __pyx_k_144[] = "RangeKey.__repr__"; static char __pyx_k_147[] = "RangeKey.bound_by_lohi"; static char __pyx_k_150[] = "RangeKey.get_size"; static char __pyx_k_153[] = "RangeKey.pyobj"; static char __pyx_k_154[] = "A Python slice (w/o the indices function) with additional Key methods.\n \n RangeKey instances must always refer to an original GA dimension using the\n 'origin' attribute. It does not make sense for a RangeKey to be without an\n 'origin'.\n\n\n "; static char __pyx_k_158[] = "MasterKey.__init__"; static char __pyx_k_161[] = "MasterKey.__eq__"; static char __pyx_k_164[] = "MasterKey.__iter__"; static char __pyx_k_167[] = "MasterKey.__str__"; static char __pyx_k_170[] = "MasterKey.__repr__"; static char __pyx_k_173[] = "MasterKey._count_instances"; static char __pyx_k_176[] = "MasterKey._get_instances"; static char __pyx_k_179[] = "MasterKey._get_origins_within_data"; static char __pyx_k_182[] = "MasterKey.get_origin"; static char __pyx_k_185[] = "MasterKey.get_sorted_origin"; static char __pyx_k_188[] = "MasterKey.get_original_ndim"; static char __pyx_k_191[] = "MasterKey.get_shape"; static char __pyx_k_194[] = "MasterKey.get_size"; static char __pyx_k_197[] = "MasterKey.get_ndim"; static char __pyx_k_200[] = "MasterKey.pyobj"; static char __pyx_k_203[] = "MasterKey.replace_ellipsis"; static char __pyx_k_206[] = "MasterKey.__getitem__"; static char __pyx_k_209[] = "MasterKey.bound_by_lohi"; static char __pyx_k_212[] = "MasterKey.lohi_T"; static char __pyx_k_215[] = "MasterKey.None_key"; static char __pyx_k_218[] = "get_lo_hi_skip_adjust"; static char __pyx_k_219[] = "MasterKey.get_lo_hi_skip_adjust"; static char __pyx_k_222[] = "MasterKey.access_key"; static char __pyx_k_225[] = "MasterKey.get_key"; static char __pyx_k_228[] = "MasterKey.transpose"; static char __pyx_k_229[] = "A list of Key instances with some extra methods.\n\n Represents one or more indices into an array. Contains methods to\n calculate shape, constrain the indices to lo/hi bounds of various types.\n\n Also contains attributes T and TT to represent axes to transpose as well\n as the inverse of the axes so that the transpose can be undone. The T and\n TT attributes will always be set in tandem -- both will be None or both\n will be set to a tuple of integers. Certain methods will query the T and\n TT attributes and change their behavior appropriately. Slicing a\n transposed MasterKey is one such example.\n\n "; static char __pyx_k_236[] = "RangeKey.bound_by_lohi (line 339)"; static char __pyx_k_237[] = "Return a new RangeKey modified to fit between lo and hi.\n\n Raises\n ------\n IndexError if start/stop/step is out of the bounds of lo/hi .\n\n Returns\n -------\n A new RangeKey between the values of lo and hi.\n\n Examples\n --------\n >>> RangeKey(1,10,2).bound_by_lohi(4,20)\n RangeKey(5,10,2)\n >>> RangeKey(1,10,2).bound_by_lohi(1,20)\n RangeKey(1,10,2)\n >>> RangeKey(1,10,2).bound_by_lohi(4,10)\n RangeKey(5,10,2)\n >>> RangeKey(1,10,2).bound_by_lohi(4,9)\n RangeKey(5,9,2)\n\n "; static char __pyx_k_238[] = "MasterKey.bound_by_lohi (line 593)"; static char __pyx_k_239[] = "Calculate new MasterKey for the subarray denoted by lo and hi.\n \n returns a list of slice objects representing the piece of the subarray\n that the lo and hi bounds maintain after applying bounds to\n global_slice.\n\n raises IndexError if the lo and hi bounds don't get a piece of the\n subarray\n \n Examples\n --------\n >>> j = MasterKey((10,15,20,25))\n >>> k = j[1:10:2, 10:1:-3, 2, None, 10]\n >>> k.bound_by_lohi([4,4,0,5], [10,9,3,20])\n [RangeKey(5,10,2), RangeKey(7,3,-3)]\n\n "; static char __pyx_k_240[] = "MasterKey.lohi_T (line 630)"; static char __pyx_k_241[] = "Return the current order of origin including fixed dimensions.\n\n This produces a tranpose suitable for a lo or hi.\n\n Examples\n --------\n >>> lo,hi = [0,0,0], [2,3,4]\n >>> k = MasterKey((2,3,4))\n >>> k_T = k.transpose((2,1,0))\n >>> k_T1 = k_T[:,1]\n >>> k_T1.lohi_T()\n\n "; static char __pyx_k_242[] = "MasterKey.None_key (line 646)"; static char __pyx_k_243[] = "Return a key based on current None's in this MasterKey.\n\n Examples\n --------\n >>> k = MasterKey((2,3,4))\n >>> k1 = k[None, :, None, :, None, :, None]\n >>> k1.None_key()\n [None, slice(None,None,None), \n\n "; static char __pyx_k_244[] = "MasterKey.transpose (line 736)"; static char __pyx_k_245[] = "Swap the axes of this MasterKey given axes.\n\n Returns the inverse of the axes in addition to the new MasterKey\n instance.\n\n Parameters\n ----------\n axes : list of ints\n `i` in the `j`-th place in the tuple means `a`'s `i`-th axis becomes\n `a.transpose()`'s `j`-th axis.\n \n Examples\n --------\n >>> k = MasterKey((40,30,20))\n >>> k = k[2:34:1, 4, None, 10:2:-1]\n >>> inv,new_k = k.transpose((1,2,0))\n >>> print inv\n [2, 0, 1]\n >>> print new_k\n\n "; static char __pyx_k__TT[] = "TT"; static char __pyx_k__ad[] = "ad"; static char __pyx_k__hi[] = "hi"; static char __pyx_k__lo[] = "lo"; static char __pyx_k__np[] = "np"; static char __pyx_k__ro[] = "ro"; static char __pyx_k__sk[] = "sk"; static char __pyx_k__Key[] = "Key"; static char __pyx_k___nx[] = "_nx"; static char __pyx_k__any[] = "any"; static char __pyx_k__idx[] = "idx"; static char __pyx_k__key[] = "key"; static char __pyx_k__map[] = "map"; static char __pyx_k__max[] = "max"; static char __pyx_k__nlo[] = "nlo"; static char __pyx_k__val[] = "val"; static char __pyx_k__zip[] = "zip"; static char __pyx_k__args[] = "args"; static char __pyx_k__axes[] = "axes"; static char __pyx_k__data[] = "data"; static char __pyx_k__dims[] = "dims"; static char __pyx_k__item[] = "item"; static char __pyx_k__ndim[] = "ndim"; static char __pyx_k__next[] = "next"; static char __pyx_k__prod[] = "prod"; static char __pyx_k__self[] = "self"; static char __pyx_k__size[] = "size"; static char __pyx_k__step[] = "step"; static char __pyx_k__stop[] = "stop"; static char __pyx_k___step[] = "_step"; static char __pyx_k___stop[] = "_stop"; static char __pyx_k__count[] = "count"; static char __pyx_k__datum[] = "datum"; static char __pyx_k__dtype[] = "dtype"; static char __pyx_k__first[] = "first"; static char __pyx_k__fixed[] = "fixed"; static char __pyx_k__guess[] = "guess"; static char __pyx_k__index[] = "index"; static char __pyx_k__int64[] = "int64"; static char __pyx_k__numpy[] = "numpy"; static char __pyx_k__other[] = "other"; static char __pyx_k__pyobj[] = "pyobj"; static char __pyx_k__range[] = "range"; static char __pyx_k__shape[] = "shape"; static char __pyx_k__start[] = "start"; static char __pyx_k__value[] = "value"; static char __pyx_k____eq__[] = "__eq__"; static char __pyx_k___start[] = "_start"; static char __pyx_k__append[] = "append"; static char __pyx_k__length[] = "length"; static char __pyx_k__lohi_T[] = "lohi_T"; static char __pyx_k__object[] = "object"; static char __pyx_k__offset[] = "offset"; static char __pyx_k__origin[] = "origin"; static char __pyx_k__ranged[] = "ranged"; static char __pyx_k__reduce[] = "reduce"; static char __pyx_k__remove[] = "remove"; static char __pyx_k__result[] = "result"; static char __pyx_k__second[] = "second"; static char __pyx_k__worker[] = "worker"; static char __pyx_k__NoneKey[] = "NoneKey"; static char __pyx_k____int__[] = "__int__"; static char __pyx_k____str__[] = "__str__"; static char __pyx_k__asarray[] = "asarray"; static char __pyx_k__cumprod[] = "cumprod"; static char __pyx_k__get_key[] = "get_key"; static char __pyx_k__indices[] = "indices"; static char __pyx_k__inverse[] = "inverse"; static char __pyx_k__new_key[] = "new_key"; static char __pyx_k__origins[] = "origins"; static char __pyx_k__shifted[] = "shifted"; static char __pyx_k__Ellipsis[] = "Ellipsis"; static char __pyx_k__FixedKey[] = "FixedKey"; static char __pyx_k__None_key[] = "None_key"; static char __pyx_k__RangeKey[] = "RangeKey"; static char __pyx_k____init__[] = "__init__"; static char __pyx_k____iter__[] = "__iter__"; static char __pyx_k____long__[] = "__long__"; static char __pyx_k____main__[] = "__main__"; static char __pyx_k____repr__[] = "__repr__"; static char __pyx_k____test__[] = "__test__"; static char __pyx_k__dim_prod[] = "dim_prod"; static char __pyx_k__get_ndim[] = "get_ndim"; static char __pyx_k__get_size[] = "get_size"; static char __pyx_k__key_iter[] = "key_iter"; static char __pyx_k__new_data[] = "new_data"; static char __pyx_k__new_stop[] = "new_stop"; static char __pyx_k__next_key[] = "next_key"; static char __pyx_k__property[] = "property"; static char __pyx_k__reversed[] = "reversed"; static char __pyx_k__MasterKey[] = "MasterKey"; static char __pyx_k__TypeError[] = "TypeError"; static char __pyx_k____class__[] = "__class__"; static char __pyx_k__enumerate[] = "enumerate"; static char __pyx_k__get_shape[] = "get_shape"; static char __pyx_k__new_fixed[] = "new_fixed"; static char __pyx_k__new_start[] = "new_start"; static char __pyx_k__transpose[] = "transpose"; static char __pyx_k__IndexError[] = "IndexError"; static char __pyx_k__ValueError[] = "ValueError"; static char __pyx_k____import__[] = "__import__"; static char __pyx_k____module__[] = "__module__"; static char __pyx_k__access_key[] = "access_key"; static char __pyx_k__empty_like[] = "empty_like"; static char __pyx_k__get_origin[] = "get_origin"; static char __pyx_k__larger_key[] = "larger_key"; static char __pyx_k____getitem__[] = "__getitem__"; static char __pyx_k__smaller_key[] = "smaller_key"; static char __pyx_k____qualname__[] = "__qualname__"; static char __pyx_k__iter_origins[] = "iter_origins"; static char __pyx_k__need_strided[] = "need_strided"; static char __pyx_k____metaclass__[] = "__metaclass__"; static char __pyx_k__bound_by_lohi[] = "bound_by_lohi"; static char __pyx_k__sorted_origin[] = "sorted_origin"; static char __pyx_k__unravel_index[] = "unravel_index"; static char __pyx_k__AttributeError[] = "AttributeError"; static char __pyx_k___get_instances[] = "_get_instances"; static char __pyx_k__ellipsis_count[] = "ellipsis_count"; static char __pyx_k__ellipsis_index[] = "ellipsis_index"; static char __pyx_k__broadcast_chomp[] = "broadcast_chomp"; static char __pyx_k__broadcast_shape[] = "broadcast_shape"; static char __pyx_k__count_real_keys[] = "count_real_keys"; static char __pyx_k___count_instances[] = "_count_instances"; static char __pyx_k__replace_ellipsis[] = "replace_ellipsis"; static char __pyx_k__get_original_ndim[] = "get_original_ndim"; static char __pyx_k__get_sorted_origin[] = "get_sorted_origin"; static char __pyx_k__iter_ranged_origin[] = "iter_ranged_origin"; static char __pyx_k__NotImplementedError[] = "NotImplementedError"; static PyObject *__pyx_kp_s_1; static PyObject *__pyx_kp_s_10; static PyObject *__pyx_n_s_100; static PyObject *__pyx_n_s_103; static PyObject *__pyx_n_s_106; static PyObject *__pyx_n_s_109; static PyObject *__pyx_kp_s_11; static PyObject *__pyx_n_s_112; static PyObject *__pyx_n_s_115; static PyObject *__pyx_n_s_118; static PyObject *__pyx_kp_s_12; static PyObject *__pyx_n_s_121; static PyObject *__pyx_n_s_124; static PyObject *__pyx_n_s_127; static PyObject *__pyx_kp_s_128; static PyObject *__pyx_kp_s_13; static PyObject *__pyx_n_s_132; static PyObject *__pyx_n_s_135; static PyObject *__pyx_n_s_138; static PyObject *__pyx_kp_s_14; static PyObject *__pyx_n_s_141; static PyObject *__pyx_n_s_144; static PyObject *__pyx_n_s_147; static PyObject *__pyx_kp_s_15; static PyObject *__pyx_n_s_150; static PyObject *__pyx_n_s_153; static PyObject *__pyx_kp_s_154; static PyObject *__pyx_n_s_158; static PyObject *__pyx_kp_s_16; static PyObject *__pyx_n_s_161; static PyObject *__pyx_n_s_164; static PyObject *__pyx_n_s_167; static PyObject *__pyx_kp_s_17; static PyObject *__pyx_n_s_170; static PyObject *__pyx_n_s_173; static PyObject *__pyx_n_s_176; static PyObject *__pyx_n_s_179; static PyObject *__pyx_kp_s_18; static PyObject *__pyx_n_s_182; static PyObject *__pyx_n_s_185; static PyObject *__pyx_n_s_188; static PyObject *__pyx_n_s_19; static PyObject *__pyx_n_s_191; static PyObject *__pyx_n_s_194; static PyObject *__pyx_n_s_197; static PyObject *__pyx_kp_s_2; static PyObject *__pyx_n_s_20; static PyObject *__pyx_n_s_200; static PyObject *__pyx_n_s_203; static PyObject *__pyx_n_s_206; static PyObject *__pyx_n_s_209; static PyObject *__pyx_n_s_21; static PyObject *__pyx_n_s_212; static PyObject *__pyx_n_s_215; static PyObject *__pyx_n_s_218; static PyObject *__pyx_n_s_219; static PyObject *__pyx_n_s_222; static PyObject *__pyx_n_s_225; static PyObject *__pyx_n_s_228; static PyObject *__pyx_kp_s_229; static PyObject *__pyx_kp_s_23; static PyObject *__pyx_kp_u_236; static PyObject *__pyx_kp_u_237; static PyObject *__pyx_kp_u_238; static PyObject *__pyx_kp_u_239; static PyObject *__pyx_kp_u_240; static PyObject *__pyx_kp_u_241; static PyObject *__pyx_kp_u_242; static PyObject *__pyx_kp_u_243; static PyObject *__pyx_kp_u_244; static PyObject *__pyx_kp_u_245; static PyObject *__pyx_kp_s_26; static PyObject *__pyx_kp_s_27; static PyObject *__pyx_kp_s_3; static PyObject *__pyx_kp_s_32; static PyObject *__pyx_kp_s_34; static PyObject *__pyx_kp_s_35; static PyObject *__pyx_kp_s_38; static PyObject *__pyx_n_s_39; static PyObject *__pyx_kp_s_4; static PyObject *__pyx_kp_s_41; static PyObject *__pyx_kp_s_5; static PyObject *__pyx_n_s_50; static PyObject *__pyx_n_s_53; static PyObject *__pyx_n_s_56; static PyObject *__pyx_n_s_59; static PyObject *__pyx_kp_s_6; static PyObject *__pyx_n_s_62; static PyObject *__pyx_n_s_65; static PyObject *__pyx_n_s_68; static PyObject *__pyx_kp_s_7; static PyObject *__pyx_n_s_71; static PyObject *__pyx_kp_s_72; static PyObject *__pyx_n_s_75; static PyObject *__pyx_n_s_78; static PyObject *__pyx_kp_s_8; static PyObject *__pyx_n_s_81; static PyObject *__pyx_n_s_84; static PyObject *__pyx_n_s_87; static PyObject *__pyx_kp_s_9; static PyObject *__pyx_n_s_90; static PyObject *__pyx_n_s_93; static PyObject *__pyx_n_s_96; static PyObject *__pyx_kp_s_97; static PyObject *__pyx_n_s__AttributeError; static PyObject *__pyx_n_s__Ellipsis; static PyObject *__pyx_n_s__FixedKey; static PyObject *__pyx_n_s__IndexError; static PyObject *__pyx_n_s__Key; static PyObject *__pyx_n_s__MasterKey; static PyObject *__pyx_n_s__NoneKey; static PyObject *__pyx_n_s__None_key; static PyObject *__pyx_n_s__NotImplementedError; static PyObject *__pyx_n_s__RangeKey; static PyObject *__pyx_n_s__T; static PyObject *__pyx_n_s__TT; static PyObject *__pyx_n_s__TypeError; static PyObject *__pyx_n_s__ValueError; static PyObject *__pyx_n_s____class__; static PyObject *__pyx_n_s____eq__; static PyObject *__pyx_n_s____getitem__; static PyObject *__pyx_n_s____import__; static PyObject *__pyx_n_s____init__; static PyObject *__pyx_n_s____int__; static PyObject *__pyx_n_s____iter__; static PyObject *__pyx_n_s____long__; static PyObject *__pyx_n_s____main__; static PyObject *__pyx_n_s____metaclass__; static PyObject *__pyx_n_s____module__; static PyObject *__pyx_n_s____qualname__; static PyObject *__pyx_n_s____repr__; static PyObject *__pyx_n_s____str__; static PyObject *__pyx_n_s____test__; static PyObject *__pyx_n_s___count_instances; static PyObject *__pyx_n_s___get_instances; static PyObject *__pyx_n_s___nx; static PyObject *__pyx_n_s___start; static PyObject *__pyx_n_s___step; static PyObject *__pyx_n_s___stop; static PyObject *__pyx_n_s__access_key; static PyObject *__pyx_n_s__ad; static PyObject *__pyx_n_s__any; static PyObject *__pyx_n_s__append; static PyObject *__pyx_n_s__args; static PyObject *__pyx_n_s__asarray; static PyObject *__pyx_n_s__axes; static PyObject *__pyx_n_s__bound_by_lohi; static PyObject *__pyx_n_s__broadcast_chomp; static PyObject *__pyx_n_s__broadcast_shape; static PyObject *__pyx_n_s__count; static PyObject *__pyx_n_s__count_real_keys; static PyObject *__pyx_n_s__cumprod; static PyObject *__pyx_n_s__data; static PyObject *__pyx_n_s__datum; static PyObject *__pyx_n_s__dim_prod; static PyObject *__pyx_n_s__dims; static PyObject *__pyx_n_s__dtype; static PyObject *__pyx_n_s__ellipsis_count; static PyObject *__pyx_n_s__ellipsis_index; static PyObject *__pyx_n_s__empty_like; static PyObject *__pyx_n_s__enumerate; static PyObject *__pyx_n_s__first; static PyObject *__pyx_n_s__fixed; static PyObject *__pyx_n_s__get_key; static PyObject *__pyx_n_s__get_ndim; static PyObject *__pyx_n_s__get_origin; static PyObject *__pyx_n_s__get_original_ndim; static PyObject *__pyx_n_s__get_shape; static PyObject *__pyx_n_s__get_size; static PyObject *__pyx_n_s__get_sorted_origin; static PyObject *__pyx_n_s__guess; static PyObject *__pyx_n_s__h; static PyObject *__pyx_n_s__hi; static PyObject *__pyx_n_s__i; static PyObject *__pyx_n_s__idx; static PyObject *__pyx_n_s__index; static PyObject *__pyx_n_s__indices; static PyObject *__pyx_n_s__int64; static PyObject *__pyx_n_s__inverse; static PyObject *__pyx_n_s__item; static PyObject *__pyx_n_s__iter_origins; static PyObject *__pyx_n_s__iter_ranged_origin; static PyObject *__pyx_n_s__key; static PyObject *__pyx_n_s__key_iter; static PyObject *__pyx_n_s__l; static PyObject *__pyx_n_s__larger_key; static PyObject *__pyx_n_s__length; static PyObject *__pyx_n_s__lo; static PyObject *__pyx_n_s__lohi_T; static PyObject *__pyx_n_s__map; static PyObject *__pyx_n_s__max; static PyObject *__pyx_n_s__ndim; static PyObject *__pyx_n_s__need_strided; static PyObject *__pyx_n_s__new_data; static PyObject *__pyx_n_s__new_fixed; static PyObject *__pyx_n_s__new_key; static PyObject *__pyx_n_s__new_start; static PyObject *__pyx_n_s__new_stop; static PyObject *__pyx_n_s__next; static PyObject *__pyx_n_s__next_key; static PyObject *__pyx_n_s__nlo; static PyObject *__pyx_n_s__np; static PyObject *__pyx_n_s__numpy; static PyObject *__pyx_n_s__object; static PyObject *__pyx_n_s__offset; static PyObject *__pyx_n_s__origin; static PyObject *__pyx_n_s__origins; static PyObject *__pyx_n_s__other; static PyObject *__pyx_n_s__prod; static PyObject *__pyx_n_s__property; static PyObject *__pyx_n_s__pyobj; static PyObject *__pyx_n_s__range; static PyObject *__pyx_n_s__ranged; static PyObject *__pyx_n_s__reduce; static PyObject *__pyx_n_s__remove; static PyObject *__pyx_n_s__replace_ellipsis; static PyObject *__pyx_n_s__result; static PyObject *__pyx_n_s__reversed; static PyObject *__pyx_n_s__ro; static PyObject *__pyx_n_s__s; static PyObject *__pyx_n_s__second; static PyObject *__pyx_n_s__self; static PyObject *__pyx_n_s__shape; static PyObject *__pyx_n_s__shifted; static PyObject *__pyx_n_s__size; static PyObject *__pyx_n_s__sk; static PyObject *__pyx_n_s__smaller_key; static PyObject *__pyx_n_s__sorted_origin; static PyObject *__pyx_n_s__start; static PyObject *__pyx_n_s__step; static PyObject *__pyx_n_s__stop; static PyObject *__pyx_n_s__transpose; static PyObject *__pyx_n_s__unravel_index; static PyObject *__pyx_n_s__val; static PyObject *__pyx_n_s__value; static PyObject *__pyx_n_s__worker; static PyObject *__pyx_n_s__x; static PyObject *__pyx_n_s__y; static PyObject *__pyx_n_s__zip; static PyObject *__pyx_int_0; static PyObject *__pyx_int_0L; static PyObject *__pyx_int_1; static PyObject *__pyx_int_neg_1; static PyObject *__pyx_k_slice_25; static PyObject *__pyx_k_slice_43; static PyObject *__pyx_k_slice_44; static PyObject *__pyx_k_slice_45; static PyObject *__pyx_k_tuple_22; static PyObject *__pyx_k_tuple_24; static PyObject *__pyx_k_tuple_28; static PyObject *__pyx_k_tuple_29; static PyObject *__pyx_k_tuple_30; static PyObject *__pyx_k_tuple_31; static PyObject *__pyx_k_tuple_33; static PyObject *__pyx_k_tuple_36; static PyObject *__pyx_k_tuple_40; static PyObject *__pyx_k_tuple_42; static PyObject *__pyx_k_tuple_46; static PyObject *__pyx_k_tuple_48; static PyObject *__pyx_k_tuple_51; static PyObject *__pyx_k_tuple_54; static PyObject *__pyx_k_tuple_57; static PyObject *__pyx_k_tuple_60; static PyObject *__pyx_k_tuple_63; static PyObject *__pyx_k_tuple_66; static PyObject *__pyx_k_tuple_69; static PyObject *__pyx_k_tuple_73; static PyObject *__pyx_k_tuple_76; static PyObject *__pyx_k_tuple_79; static PyObject *__pyx_k_tuple_82; static PyObject *__pyx_k_tuple_85; static PyObject *__pyx_k_tuple_88; static PyObject *__pyx_k_tuple_91; static PyObject *__pyx_k_tuple_94; static PyObject *__pyx_k_tuple_98; static PyObject *__pyx_k_tuple_101; static PyObject *__pyx_k_tuple_104; static PyObject *__pyx_k_tuple_107; static PyObject *__pyx_k_tuple_110; static PyObject *__pyx_k_tuple_113; static PyObject *__pyx_k_tuple_116; static PyObject *__pyx_k_tuple_119; static PyObject *__pyx_k_tuple_122; static PyObject *__pyx_k_tuple_125; static PyObject *__pyx_k_tuple_129; static PyObject *__pyx_k_tuple_131; static PyObject *__pyx_k_tuple_133; static PyObject *__pyx_k_tuple_136; static PyObject *__pyx_k_tuple_139; static PyObject *__pyx_k_tuple_142; static PyObject *__pyx_k_tuple_145; static PyObject *__pyx_k_tuple_148; static PyObject *__pyx_k_tuple_151; static PyObject *__pyx_k_tuple_155; static PyObject *__pyx_k_tuple_157; static PyObject *__pyx_k_tuple_159; static PyObject *__pyx_k_tuple_162; static PyObject *__pyx_k_tuple_165; static PyObject *__pyx_k_tuple_168; static PyObject *__pyx_k_tuple_171; static PyObject *__pyx_k_tuple_174; static PyObject *__pyx_k_tuple_177; static PyObject *__pyx_k_tuple_180; static PyObject *__pyx_k_tuple_183; static PyObject *__pyx_k_tuple_186; static PyObject *__pyx_k_tuple_189; static PyObject *__pyx_k_tuple_192; static PyObject *__pyx_k_tuple_195; static PyObject *__pyx_k_tuple_198; static PyObject *__pyx_k_tuple_201; static PyObject *__pyx_k_tuple_204; static PyObject *__pyx_k_tuple_207; static PyObject *__pyx_k_tuple_210; static PyObject *__pyx_k_tuple_213; static PyObject *__pyx_k_tuple_216; static PyObject *__pyx_k_tuple_220; static PyObject *__pyx_k_tuple_223; static PyObject *__pyx_k_tuple_226; static PyObject *__pyx_k_tuple_230; static PyObject *__pyx_k_tuple_232; static PyObject *__pyx_k_tuple_234; static PyObject *__pyx_k_codeobj_37; static PyObject *__pyx_k_codeobj_49; static PyObject *__pyx_k_codeobj_52; static PyObject *__pyx_k_codeobj_55; static PyObject *__pyx_k_codeobj_58; static PyObject *__pyx_k_codeobj_61; static PyObject *__pyx_k_codeobj_64; static PyObject *__pyx_k_codeobj_67; static PyObject *__pyx_k_codeobj_70; static PyObject *__pyx_k_codeobj_74; static PyObject *__pyx_k_codeobj_77; static PyObject *__pyx_k_codeobj_80; static PyObject *__pyx_k_codeobj_83; static PyObject *__pyx_k_codeobj_86; static PyObject *__pyx_k_codeobj_89; static PyObject *__pyx_k_codeobj_92; static PyObject *__pyx_k_codeobj_95; static PyObject *__pyx_k_codeobj_99; static PyObject *__pyx_k_codeobj_102; static PyObject *__pyx_k_codeobj_105; static PyObject *__pyx_k_codeobj_108; static PyObject *__pyx_k_codeobj_111; static PyObject *__pyx_k_codeobj_114; static PyObject *__pyx_k_codeobj_117; static PyObject *__pyx_k_codeobj_120; static PyObject *__pyx_k_codeobj_123; static PyObject *__pyx_k_codeobj_126; static PyObject *__pyx_k_codeobj_130; static PyObject *__pyx_k_codeobj_134; static PyObject *__pyx_k_codeobj_137; static PyObject *__pyx_k_codeobj_140; static PyObject *__pyx_k_codeobj_143; static PyObject *__pyx_k_codeobj_146; static PyObject *__pyx_k_codeobj_149; static PyObject *__pyx_k_codeobj_152; static PyObject *__pyx_k_codeobj_156; static PyObject *__pyx_k_codeobj_160; static PyObject *__pyx_k_codeobj_163; static PyObject *__pyx_k_codeobj_166; static PyObject *__pyx_k_codeobj_169; static PyObject *__pyx_k_codeobj_172; static PyObject *__pyx_k_codeobj_175; static PyObject *__pyx_k_codeobj_178; static PyObject *__pyx_k_codeobj_181; static PyObject *__pyx_k_codeobj_184; static PyObject *__pyx_k_codeobj_187; static PyObject *__pyx_k_codeobj_190; static PyObject *__pyx_k_codeobj_193; static PyObject *__pyx_k_codeobj_196; static PyObject *__pyx_k_codeobj_199; static PyObject *__pyx_k_codeobj_202; static PyObject *__pyx_k_codeobj_205; static PyObject *__pyx_k_codeobj_208; static PyObject *__pyx_k_codeobj_211; static PyObject *__pyx_k_codeobj_214; static PyObject *__pyx_k_codeobj_217; static PyObject *__pyx_k_codeobj_221; static PyObject *__pyx_k_codeobj_224; static PyObject *__pyx_k_codeobj_227; static PyObject *__pyx_k_codeobj_231; static PyObject *__pyx_k_codeobj_233; static PyObject *__pyx_k_codeobj_235; /* "ga4py/gain/util.pyx":17 * import numpy as np * * cpdef list listify(thing): # <<<<<<<<<<<<<< * try: * return list(thing) */ static PyObject *__pyx_pw_5ga4py_4gain_4util_1listify(PyObject *__pyx_self, PyObject *__pyx_v_thing); /*proto*/ static PyObject *__pyx_f_5ga4py_4gain_4util_listify(PyObject *__pyx_v_thing, CYTHON_UNUSED int __pyx_skip_dispatch) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("listify", 0); __Pyx_TraceCall("listify", __pyx_f[0], 17); /* "ga4py/gain/util.pyx":18 * * cpdef list listify(thing): * try: # <<<<<<<<<<<<<< * return list(thing) * except: */ { __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { /* "ga4py/gain/util.pyx":19 * cpdef list listify(thing): * try: * return list(thing) # <<<<<<<<<<<<<< * except: * return [thing] */ __Pyx_XDECREF(((PyObject *)__pyx_r)); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_thing); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_thing); __Pyx_GIVEREF(__pyx_v_thing); __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_r = ((PyObject*)__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L7_try_return; } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L10_try_end; __pyx_L7_try_return:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L0; __pyx_L3_error:; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/util.pyx":20 * try: * return list(thing) * except: # <<<<<<<<<<<<<< * return [thing] * */ /*except:*/ { __Pyx_AddTraceback("ga4py.gain.util.listify", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_4); __Pyx_GOTREF(__pyx_t_6); /* "ga4py/gain/util.pyx":21 * return list(thing) * except: * return [thing] # <<<<<<<<<<<<<< * * class Key(object): */ __Pyx_XDECREF(((PyObject *)__pyx_r)); __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_thing); PyList_SET_ITEM(__pyx_t_7, 0, __pyx_v_thing); __Pyx_GIVEREF(__pyx_v_thing); __pyx_r = ((PyObject*)__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L6_except_return; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L4_exception_handled; } __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L1_error; __pyx_L6_except_return:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L0; __pyx_L4_exception_handled:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); __pyx_L10_try_end:; } __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("ga4py.gain.util.listify", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_1listify(PyObject *__pyx_self, PyObject *__pyx_v_thing); /*proto*/ static PyObject *__pyx_pw_5ga4py_4gain_4util_1listify(PyObject *__pyx_self, PyObject *__pyx_v_thing) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("listify (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_listify(__pyx_self, ((PyObject *)__pyx_v_thing)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":17 * import numpy as np * * cpdef list listify(thing): # <<<<<<<<<<<<<< * try: * return list(thing) */ static PyObject *__pyx_pf_5ga4py_4gain_4util_listify(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thing) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("listify", 0); __Pyx_TraceCall("listify", __pyx_f[0], 17); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_4gain_4util_listify(__pyx_v_thing, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.util.listify", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_3Key_1__init__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_3Key___init__[] = "Create a new Key with origin=None."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_3Key_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_3Key_1__init__, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_3Key___init__)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_3Key_1__init__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_3Key___init__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":44 * * """ * def __init__(self): # <<<<<<<<<<<<<< * """Create a new Key with origin=None.""" * self.origin = None */ static PyObject *__pyx_pf_5ga4py_4gain_4util_3Key___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__init__", 0); __Pyx_TraceCall("__init__", __pyx_f[0], 44); /* "ga4py/gain/util.pyx":46 * def __init__(self): * """Create a new Key with origin=None.""" * self.origin = None # <<<<<<<<<<<<<< * * def __eq__(self, other): */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__origin, Py_None) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.util.Key.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_3Key_3__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_3Key_2__eq__[] = "x.__eq__(y) <==> x==y\n\n Raises\n ------\n NotImplementedError :\n subclasses must define this\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_3Key_3__eq__ = {__Pyx_NAMESTR("__eq__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_3Key_3__eq__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_3Key_2__eq__)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_3Key_3__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_other = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__other,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__other)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__eq__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_other = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.Key.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_3Key_2__eq__(__pyx_self, __pyx_v_self, __pyx_v_other); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":48 * self.origin = None * * def __eq__(self, other): # <<<<<<<<<<<<<< * """x.__eq__(y) <==> x==y * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_3Key_2__eq__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_other) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__eq__", 0); __Pyx_TraceCall("__eq__", __pyx_f[0], 48); /* "ga4py/gain/util.pyx":57 * * """ * raise NotImplementedError, "subclasses must define this" # <<<<<<<<<<<<<< * * def __getitem__(self, key): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_kp_s_1), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.util.Key.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_3Key_5__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_3Key_4__getitem__[] = "x.__getitem__(y) <==> x[y]\n \n The given key is assumed to be a Python object.\n\n Raises\n ------\n NotImplementedError :\n subclasses must define this\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_3Key_5__getitem__ = {__Pyx_NAMESTR("__getitem__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_3Key_5__getitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_3Key_4__getitem__)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_3Key_5__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_key = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__getitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_key = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.Key.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_3Key_4__getitem__(__pyx_self, __pyx_v_self, __pyx_v_key); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":59 * raise NotImplementedError, "subclasses must define this" * * def __getitem__(self, key): # <<<<<<<<<<<<<< * """x.__getitem__(y) <==> x[y] * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_3Key_4__getitem__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_key) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__getitem__", 0); __Pyx_TraceCall("__getitem__", __pyx_f[0], 59); /* "ga4py/gain/util.pyx":70 * * """ * raise NotImplementedError, "subclasses must define this" # <<<<<<<<<<<<<< * * def __repr__(self): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_kp_s_1), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.util.Key.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_3Key_7__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_3Key_7__repr__ = {__Pyx_NAMESTR("__repr__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_3Key_7__repr__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_3Key_7__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_3Key_6__repr__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":72 * raise NotImplementedError, "subclasses must define this" * * def __repr__(self): # <<<<<<<<<<<<<< * return str(self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_3Key_6__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__repr__", 0); __Pyx_TraceCall("__repr__", __pyx_f[0], 72); /* "ga4py/gain/util.pyx":73 * * def __repr__(self): * return str(self) # <<<<<<<<<<<<<< * * def __str__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.util.Key.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_3Key_9__str__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_3Key_9__str__ = {__Pyx_NAMESTR("__str__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_3Key_9__str__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_3Key_9__str__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_3Key_8__str__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":75 * return str(self) * * def __str__(self): # <<<<<<<<<<<<<< * return "Key()" * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_3Key_8__str__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__str__", 0); __Pyx_TraceCall("__str__", __pyx_f[0], 75); /* "ga4py/gain/util.pyx":76 * * def __str__(self): * return "Key()" # <<<<<<<<<<<<<< * * def bound_by_lohi(self, lo, hi): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_kp_s_2)); __pyx_r = ((PyObject *)__pyx_kp_s_2); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_3Key_11bound_by_lohi(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_3Key_10bound_by_lohi[] = "Return a new Key modified to fit between lo and hi.\n\n Raises\n ------\n NotImplementedError :\n subclasses must define this\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_3Key_11bound_by_lohi = {__Pyx_NAMESTR("bound_by_lohi"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_3Key_11bound_by_lohi, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_3Key_10bound_by_lohi)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_3Key_11bound_by_lohi(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_lo = 0; CYTHON_UNUSED PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("bound_by_lohi (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("bound_by_lohi", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("bound_by_lohi", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bound_by_lohi") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_self = values[0]; __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("bound_by_lohi", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.Key.bound_by_lohi", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_3Key_10bound_by_lohi(__pyx_self, __pyx_v_self, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":78 * return "Key()" * * def bound_by_lohi(self, lo, hi): # <<<<<<<<<<<<<< * """Return a new Key modified to fit between lo and hi. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_3Key_10bound_by_lohi(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_lo, CYTHON_UNUSED PyObject *__pyx_v_hi) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("bound_by_lohi", 0); __Pyx_TraceCall("bound_by_lohi", __pyx_f[0], 78); /* "ga4py/gain/util.pyx":87 * * """ * raise NotImplementedError, "subclasses must define this" # <<<<<<<<<<<<<< * * def get_size(self): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_kp_s_1), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.util.Key.bound_by_lohi", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_3Key_13get_size(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_3Key_12get_size[] = "Returns number of elements represented by this Key.\n \n See Also\n --------\n size : Attribute getter for get_size method.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_3Key_13get_size = {__Pyx_NAMESTR("get_size"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_3Key_13get_size, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_3Key_12get_size)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_3Key_13get_size(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_size (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_3Key_12get_size(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":89 * raise NotImplementedError, "subclasses must define this" * * def get_size(self): # <<<<<<<<<<<<<< * """Returns number of elements represented by this Key. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_3Key_12get_size(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_size", 0); __Pyx_TraceCall("get_size", __pyx_f[0], 89); /* "ga4py/gain/util.pyx":97 * * """ * raise NotImplementedError, "subclasses must define this" # <<<<<<<<<<<<<< * size = property(get_size) * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_kp_s_1), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.util.Key.get_size", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_3Key_15pyobj(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_3Key_14pyobj[] = "Returns a Python object based on this Key e.g. slice, int, None.\n \n Raises\n ------\n NotImplementedError :\n subclasses must define this\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_3Key_15pyobj = {__Pyx_NAMESTR("pyobj"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_3Key_15pyobj, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_3Key_14pyobj)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_3Key_15pyobj(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pyobj (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_3Key_14pyobj(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":100 * size = property(get_size) * * def pyobj(self): # <<<<<<<<<<<<<< * """Returns a Python object based on this Key e.g. slice, int, None. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_3Key_14pyobj(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("pyobj", 0); __Pyx_TraceCall("pyobj", __pyx_f[0], 100); /* "ga4py/gain/util.pyx":109 * * """ * raise NotImplementedError, "subclasses must define this" # <<<<<<<<<<<<<< * * class NoneKey(Key): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_kp_s_1), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.util.Key.pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_7NoneKey_1__init__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_7NoneKey_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_7NoneKey_1__init__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_7NoneKey_1__init__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_7NoneKey___init__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":122 * * """ * def __init__(self): # <<<<<<<<<<<<<< * Key.__init__(self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_7NoneKey___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__init__", 0); __Pyx_TraceCall("__init__", __pyx_f[0], 122); /* "ga4py/gain/util.pyx":123 * """ * def __init__(self): * Key.__init__(self) # <<<<<<<<<<<<<< * * def __eq__(self, other): */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__Key); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____init__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.util.NoneKey.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_7NoneKey_3__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_7NoneKey_2__eq__[] = "Returns True of other is None or a NoneKey."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_7NoneKey_3__eq__ = {__Pyx_NAMESTR("__eq__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_7NoneKey_3__eq__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_7NoneKey_2__eq__)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_7NoneKey_3__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; PyObject *__pyx_v_other = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__other,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__other)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__eq__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_other = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.NoneKey.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_7NoneKey_2__eq__(__pyx_self, __pyx_v_self, __pyx_v_other); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":125 * Key.__init__(self) * * def __eq__(self, other): # <<<<<<<<<<<<<< * """Returns True of other is None or a NoneKey.""" * return isinstance(other, (type(None),NoneKey)) */ static PyObject *__pyx_pf_5ga4py_4gain_4util_7NoneKey_2__eq__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_other) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__eq__", 0); __Pyx_TraceCall("__eq__", __pyx_f[0], 125); /* "ga4py/gain/util.pyx":127 * def __eq__(self, other): * """Returns True of other is None or a NoneKey.""" * return isinstance(other, (type(None),NoneKey)) # <<<<<<<<<<<<<< * * def __getitem__(self, key): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__NoneKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)Py_TYPE(Py_None))); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(Py_None))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(Py_None))); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = PyObject_IsInstance(__pyx_v_other, ((PyObject *)__pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.util.NoneKey.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_7NoneKey_5__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_7NoneKey_4__getitem__[] = "x.__getitem__(y) <==> x[y]\n \n An index of 0 is allowed, or a slice starting from 0.\n \n Returns None if an index of 0 is passed because this effectively\n removes this Key from an index.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_7NoneKey_5__getitem__ = {__Pyx_NAMESTR("__getitem__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_7NoneKey_5__getitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_7NoneKey_4__getitem__)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_7NoneKey_5__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_key = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__getitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_key = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.NoneKey.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_7NoneKey_4__getitem__(__pyx_self, __pyx_v_self, __pyx_v_key); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":129 * return isinstance(other, (type(None),NoneKey)) * * def __getitem__(self, key): # <<<<<<<<<<<<<< * """x.__getitem__(y) <==> x[y] * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_7NoneKey_4__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) { PyObject *__pyx_v_start = NULL; PyObject *__pyx_v_stop = NULL; PyObject *__pyx_v_step = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_t_4; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *(*__pyx_t_8)(PyObject *); int __pyx_t_9; int __pyx_t_10; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__getitem__", 0); __Pyx_TraceCall("__getitem__", __pyx_f[0], 129); __Pyx_INCREF(__pyx_v_key); /* "ga4py/gain/util.pyx":138 * * """ * if isinstance(key, (RangeKey,slice)): # <<<<<<<<<<<<<< * if isinstance(key, slice): * start,stop,step = key.indices(self.size) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__RangeKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)((PyObject*)(&PySlice_Type)))); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)((PyObject*)(&PySlice_Type)))); __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PySlice_Type)))); __pyx_t_1 = 0; __pyx_t_3 = PyObject_IsInstance(__pyx_v_key, ((PyObject *)__pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { /* "ga4py/gain/util.pyx":139 * """ * if isinstance(key, (RangeKey,slice)): * if isinstance(key, slice): # <<<<<<<<<<<<<< * start,stop,step = key.indices(self.size) * else: */ __pyx_t_4 = PySlice_Check(__pyx_v_key); __pyx_t_3 = (__pyx_t_4 != 0); if (__pyx_t_3) { /* "ga4py/gain/util.pyx":140 * if isinstance(key, (RangeKey,slice)): * if isinstance(key, slice): * start,stop,step = key.indices(self.size) # <<<<<<<<<<<<<< * else: * start,stop,step = key.start,key.stop,key.step */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s__indices); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 3)) { if (size > 3) __Pyx_RaiseTooManyValuesError(3); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); } else { __pyx_t_5 = PyList_GET_ITEM(sequence, 0); __pyx_t_2 = PyList_GET_ITEM(sequence, 1); __pyx_t_6 = PyList_GET_ITEM(sequence, 2); } __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); index = 1; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L6_unpacking_done:; } __pyx_v_start = __pyx_t_5; __pyx_t_5 = 0; __pyx_v_stop = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_step = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L4; } /*else*/ { /* "ga4py/gain/util.pyx":142 * start,stop,step = key.indices(self.size) * else: * start,stop,step = key.start,key.stop,key.step # <<<<<<<<<<<<<< * if start != 0 or stop != 1 or step != 1: * raise IndexError, "bad slice for NoneKey: %s" % key */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s__start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s__stop); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s__step); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_start = __pyx_t_1; __pyx_t_1 = 0; __pyx_v_stop = __pyx_t_6; __pyx_t_6 = 0; __pyx_v_step = __pyx_t_2; __pyx_t_2 = 0; } __pyx_L4:; /* "ga4py/gain/util.pyx":143 * else: * start,stop,step = key.start,key.stop,key.step * if start != 0 or stop != 1 or step != 1: # <<<<<<<<<<<<<< * raise IndexError, "bad slice for NoneKey: %s" % key * return self */ __pyx_t_2 = PyObject_RichCompare(__pyx_v_start, __pyx_int_0, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!__pyx_t_3) { __pyx_t_2 = PyObject_RichCompare(__pyx_v_stop, __pyx_int_1, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!__pyx_t_4) { __pyx_t_2 = PyObject_RichCompare(__pyx_v_step, __pyx_int_1, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_10 = __pyx_t_9; } else { __pyx_t_10 = __pyx_t_4; } __pyx_t_4 = __pyx_t_10; } else { __pyx_t_4 = __pyx_t_3; } if (__pyx_t_4) { /* "ga4py/gain/util.pyx":144 * start,stop,step = key.start,key.stop,key.step * if start != 0 or stop != 1 or step != 1: * raise IndexError, "bad slice for NoneKey: %s" % key # <<<<<<<<<<<<<< * return self * else: */ __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_3), __pyx_v_key); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_t_2), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; /* "ga4py/gain/util.pyx":145 * if start != 0 or stop != 1 or step != 1: * raise IndexError, "bad slice for NoneKey: %s" % key * return self # <<<<<<<<<<<<<< * else: * key = long(key) */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self); __pyx_r = __pyx_v_self; goto __pyx_L0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/util.pyx":147 * return self * else: * key = long(key) # <<<<<<<<<<<<<< * if key not in [0,0L]: # probably don't need '0' due to cast * raise IndexError, "index out of bounds" */ __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_key); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_key); __Pyx_GIVEREF(__pyx_v_key); __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)(&PyLong_Type))), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/util.pyx":148 * else: * key = long(key) * if key not in [0,0L]: # probably don't need '0' due to cast # <<<<<<<<<<<<<< * raise IndexError, "index out of bounds" * return None # on purpose not self -- indicates index removal */ __Pyx_INCREF(__pyx_v_key); __pyx_t_6 = __pyx_v_key; __pyx_t_2 = PyObject_RichCompare(__pyx_t_6, __pyx_int_0, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (((int)__pyx_t_4)) { __pyx_t_2 = PyObject_RichCompare(__pyx_t_6, __pyx_int_0L, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_10 = ((int)__pyx_t_3); } else { __pyx_t_10 = ((int)__pyx_t_4); } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_4 = (__pyx_t_10 != 0); if (__pyx_t_4) { /* "ga4py/gain/util.pyx":149 * key = long(key) * if key not in [0,0L]: # probably don't need '0' due to cast * raise IndexError, "index out of bounds" # <<<<<<<<<<<<<< * return None # on purpose not self -- indicates index removal * */ __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_kp_s_4), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; /* "ga4py/gain/util.pyx":150 * if key not in [0,0L]: # probably don't need '0' due to cast * raise IndexError, "index out of bounds" * return None # on purpose not self -- indicates index removal # <<<<<<<<<<<<<< * * def __repr__(self): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_None); __pyx_r = Py_None; goto __pyx_L0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("ga4py.gain.util.NoneKey.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_start); __Pyx_XDECREF(__pyx_v_stop); __Pyx_XDECREF(__pyx_v_step); __Pyx_XDECREF(__pyx_v_key); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_7NoneKey_7__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_7NoneKey_7__repr__ = {__Pyx_NAMESTR("__repr__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_7NoneKey_7__repr__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_7NoneKey_7__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_7NoneKey_6__repr__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":152 * return None # on purpose not self -- indicates index removal * * def __repr__(self): # <<<<<<<<<<<<<< * return str(self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_7NoneKey_6__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__repr__", 0); __Pyx_TraceCall("__repr__", __pyx_f[0], 152); /* "ga4py/gain/util.pyx":153 * * def __repr__(self): * return str(self) # <<<<<<<<<<<<<< * * def __str__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.util.NoneKey.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_7NoneKey_9__str__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_7NoneKey_9__str__ = {__Pyx_NAMESTR("__str__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_7NoneKey_9__str__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_7NoneKey_9__str__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_7NoneKey_8__str__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":155 * return str(self) * * def __str__(self): # <<<<<<<<<<<<<< * return "NoneKey()" * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_7NoneKey_8__str__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__str__", 0); __Pyx_TraceCall("__str__", __pyx_f[0], 155); /* "ga4py/gain/util.pyx":156 * * def __str__(self): * return "NoneKey()" # <<<<<<<<<<<<<< * * def bound_by_lohi(self, lo, hi): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); __pyx_r = ((PyObject *)__pyx_kp_s_5); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_7NoneKey_11bound_by_lohi(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_7NoneKey_10bound_by_lohi[] = "Always raises NotImplementedError."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_7NoneKey_11bound_by_lohi = {__Pyx_NAMESTR("bound_by_lohi"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_7NoneKey_11bound_by_lohi, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_7NoneKey_10bound_by_lohi)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_7NoneKey_11bound_by_lohi(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_lo = 0; CYTHON_UNUSED PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("bound_by_lohi (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("bound_by_lohi", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("bound_by_lohi", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bound_by_lohi") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_self = values[0]; __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("bound_by_lohi", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.NoneKey.bound_by_lohi", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_7NoneKey_10bound_by_lohi(__pyx_self, __pyx_v_self, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":158 * return "NoneKey()" * * def bound_by_lohi(self, lo, hi): # <<<<<<<<<<<<<< * """Always raises NotImplementedError.""" * raise NotImplementedError, "bound_by_lohi nonsensical for NoneKey" */ static PyObject *__pyx_pf_5ga4py_4gain_4util_7NoneKey_10bound_by_lohi(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_lo, CYTHON_UNUSED PyObject *__pyx_v_hi) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("bound_by_lohi", 0); __Pyx_TraceCall("bound_by_lohi", __pyx_f[0], 158); /* "ga4py/gain/util.pyx":160 * def bound_by_lohi(self, lo, hi): * """Always raises NotImplementedError.""" * raise NotImplementedError, "bound_by_lohi nonsensical for NoneKey" # <<<<<<<<<<<<<< * * def get_size(self): */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_kp_s_6), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.util.NoneKey.bound_by_lohi", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_7NoneKey_13get_size(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_7NoneKey_12get_size[] = "Always returns 1."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_7NoneKey_13get_size = {__Pyx_NAMESTR("get_size"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_7NoneKey_13get_size, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_7NoneKey_12get_size)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_7NoneKey_13get_size(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_size (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_7NoneKey_12get_size(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":162 * raise NotImplementedError, "bound_by_lohi nonsensical for NoneKey" * * def get_size(self): # <<<<<<<<<<<<<< * """Always returns 1.""" * return 1 */ static PyObject *__pyx_pf_5ga4py_4gain_4util_7NoneKey_12get_size(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_size", 0); __Pyx_TraceCall("get_size", __pyx_f[0], 162); /* "ga4py/gain/util.pyx":164 * def get_size(self): * """Always returns 1.""" * return 1 # <<<<<<<<<<<<<< * * size = property(get_size) */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_int_1); __pyx_r = __pyx_int_1; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_7NoneKey_15pyobj(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_7NoneKey_14pyobj[] = "Returns a Python object based on this Key (always None)."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_7NoneKey_15pyobj = {__Pyx_NAMESTR("pyobj"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_7NoneKey_15pyobj, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_7NoneKey_14pyobj)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_7NoneKey_15pyobj(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pyobj (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_7NoneKey_14pyobj(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":168 * size = property(get_size) * * def pyobj(self): # <<<<<<<<<<<<<< * """Returns a Python object based on this Key (always None).""" * return None */ static PyObject *__pyx_pf_5ga4py_4gain_4util_7NoneKey_14pyobj(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("pyobj", 0); __Pyx_TraceCall("pyobj", __pyx_f[0], 168); /* "ga4py/gain/util.pyx":170 * def pyobj(self): * """Returns a Python object based on this Key (always None).""" * return None # <<<<<<<<<<<<<< * * class FixedKey(Key): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_None); __pyx_r = Py_None; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_8FixedKey___init__[] = "A integer value and an integer origin must be given.\n\n The given 'value' must be >= 0.\n The given 'origin' must be >= 0.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8FixedKey_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8FixedKey_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_8FixedKey___init__)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_value = 0; PyObject *__pyx_v_origin = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__value,&__pyx_n_s__origin,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__origin)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_self = values[0]; __pyx_v_value = values[1]; __pyx_v_origin = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.FixedKey.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_8FixedKey___init__(__pyx_self, __pyx_v_self, __pyx_v_value, __pyx_v_origin); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":190 * * """ * def __init__(self, value, origin): # <<<<<<<<<<<<<< * """A integer value and an integer origin must be given. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_value, PyObject *__pyx_v_origin) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__init__", 0); __Pyx_TraceCall("__init__", __pyx_f[0], 190); /* "ga4py/gain/util.pyx":197 * * """ * Key.__init__(self) # <<<<<<<<<<<<<< * self.value = long(value) * self.origin = origin */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__Key); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____init__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":198 * """ * Key.__init__(self) * self.value = long(value) # <<<<<<<<<<<<<< * self.origin = origin * assert self.value >= 0 */ __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_value); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyLong_Type))), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__value, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":199 * Key.__init__(self) * self.value = long(value) * self.origin = origin # <<<<<<<<<<<<<< * assert self.value >= 0 * assert self.origin >= 0 */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__origin, __pyx_v_origin) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":200 * self.value = long(value) * self.origin = origin * assert self.value >= 0 # <<<<<<<<<<<<<< * assert self.origin >= 0 * */ #ifndef CYTHON_WITHOUT_ASSERTIONS __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_4)) { PyErr_SetNone(PyExc_AssertionError); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #endif /* "ga4py/gain/util.pyx":201 * self.origin = origin * assert self.value >= 0 * assert self.origin >= 0 # <<<<<<<<<<<<<< * * def __eq__(self, other): */ #ifndef CYTHON_WITHOUT_ASSERTIONS __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__origin); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (unlikely(!__pyx_t_4)) { PyErr_SetNone(PyExc_AssertionError); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #endif __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.util.FixedKey.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_3__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_8FixedKey_2__eq__[] = "Compares the 'value' attributes."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8FixedKey_3__eq__ = {__Pyx_NAMESTR("__eq__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8FixedKey_3__eq__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_8FixedKey_2__eq__)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_3__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_other = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__other,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__other)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__eq__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_other = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.FixedKey.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_8FixedKey_2__eq__(__pyx_self, __pyx_v_self, __pyx_v_other); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":203 * assert self.origin >= 0 * * def __eq__(self, other): # <<<<<<<<<<<<<< * """Compares the 'value' attributes.""" * if hasattr(other,'value'): */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_2__eq__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__eq__", 0); __Pyx_TraceCall("__eq__", __pyx_f[0], 203); /* "ga4py/gain/util.pyx":205 * def __eq__(self, other): * """Compares the 'value' attributes.""" * if hasattr(other,'value'): # <<<<<<<<<<<<<< * return self.value == other.value * return False */ __pyx_t_1 = PyObject_HasAttr(__pyx_v_other, ((PyObject *)__pyx_n_s__value)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/gain/util.pyx":206 * """Compares the 'value' attributes.""" * if hasattr(other,'value'): * return self.value == other.value # <<<<<<<<<<<<<< * return False * */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__value); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s__value); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/util.pyx":207 * if hasattr(other,'value'): * return self.value == other.value * return False # <<<<<<<<<<<<<< * * def __getitem__(self, key): */ __Pyx_XDECREF(__pyx_r); __pyx_t_5 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("ga4py.gain.util.FixedKey.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_5__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_8FixedKey_4__getitem__[] = "You cannot index a FixedKey.\n \n Raises\n ------\n IndexError : \n cannot index a FixedKey\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8FixedKey_5__getitem__ = {__Pyx_NAMESTR("__getitem__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8FixedKey_5__getitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_8FixedKey_4__getitem__)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_5__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_self = 0; CYTHON_UNUSED PyObject *__pyx_v_key = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__getitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_key = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.FixedKey.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_8FixedKey_4__getitem__(__pyx_self, __pyx_v_self, __pyx_v_key); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":209 * return False * * def __getitem__(self, key): # <<<<<<<<<<<<<< * """You cannot index a FixedKey. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_4__getitem__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_key) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__getitem__", 0); __Pyx_TraceCall("__getitem__", __pyx_f[0], 209); /* "ga4py/gain/util.pyx":218 * * """ * raise IndexError, "cannot index a FixedKey" # <<<<<<<<<<<<<< * * def __int__(self): */ __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_kp_s_7), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.util.FixedKey.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_7__int__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8FixedKey_7__int__ = {__Pyx_NAMESTR("__int__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8FixedKey_7__int__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_7__int__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__int__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_8FixedKey_6__int__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":220 * raise IndexError, "cannot index a FixedKey" * * def __int__(self): # <<<<<<<<<<<<<< * return int(self.value) * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_6__int__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__int__", 0); __Pyx_TraceCall("__int__", __pyx_f[0], 220); /* "ga4py/gain/util.pyx":221 * * def __int__(self): * return int(self.value) # <<<<<<<<<<<<<< * * def __long__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyInt_Type))), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.util.FixedKey.__int__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_9__long__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8FixedKey_9__long__ = {__Pyx_NAMESTR("__long__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8FixedKey_9__long__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_9__long__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__long__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_8FixedKey_8__long__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":223 * return int(self.value) * * def __long__(self): # <<<<<<<<<<<<<< * return long(self.value) * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_8__long__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__long__", 0); __Pyx_TraceCall("__long__", __pyx_f[0], 223); /* "ga4py/gain/util.pyx":224 * * def __long__(self): * return long(self.value) # <<<<<<<<<<<<<< * * def __repr__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyLong_Type))), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.util.FixedKey.__long__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_11__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8FixedKey_11__repr__ = {__Pyx_NAMESTR("__repr__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8FixedKey_11__repr__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_11__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_8FixedKey_10__repr__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":226 * return long(self.value) * * def __repr__(self): # <<<<<<<<<<<<<< * return str(self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_10__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__repr__", 0); __Pyx_TraceCall("__repr__", __pyx_f[0], 226); /* "ga4py/gain/util.pyx":227 * * def __repr__(self): * return str(self) # <<<<<<<<<<<<<< * * def __str__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.util.FixedKey.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_13__str__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8FixedKey_13__str__ = {__Pyx_NAMESTR("__str__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8FixedKey_13__str__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_13__str__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_8FixedKey_12__str__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":229 * return str(self) * * def __str__(self): # <<<<<<<<<<<<<< * return "FixedKey(%s)" % self.value * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_12__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__str__", 0); __Pyx_TraceCall("__str__", __pyx_f[0], 229); /* "ga4py/gain/util.pyx":230 * * def __str__(self): * return "FixedKey(%s)" % self.value # <<<<<<<<<<<<<< * * def bound_by_lohi(self, lo, hi): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = ((PyObject *)__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.util.FixedKey.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_15bound_by_lohi(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_8FixedKey_14bound_by_lohi[] = "Returns self but raises IndexError if value is not within range.\n \n Raises\n ------\n IndexError : \n if not (lo <= self.value < hi)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8FixedKey_15bound_by_lohi = {__Pyx_NAMESTR("bound_by_lohi"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8FixedKey_15bound_by_lohi, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_8FixedKey_14bound_by_lohi)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_15bound_by_lohi(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("bound_by_lohi (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("bound_by_lohi", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("bound_by_lohi", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bound_by_lohi") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_self = values[0]; __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("bound_by_lohi", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.FixedKey.bound_by_lohi", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_8FixedKey_14bound_by_lohi(__pyx_self, __pyx_v_self, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":232 * return "FixedKey(%s)" % self.value * * def bound_by_lohi(self, lo, hi): # <<<<<<<<<<<<<< * """Returns self but raises IndexError if value is not within range. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_14bound_by_lohi(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("bound_by_lohi", 0); __Pyx_TraceCall("bound_by_lohi", __pyx_f[0], 232); /* "ga4py/gain/util.pyx":241 * * """ * if not (lo <= self.value < hi): # <<<<<<<<<<<<<< * raise IndexError, "lo/hi out of bounds %s <= %s < %s" % ( * lo, self.value, hi) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_RichCompare(__pyx_v_lo, __pyx_t_1, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__Pyx_PyObject_IsTrue(__pyx_t_2)) { __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_v_hi, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = ((!__pyx_t_3) != 0); if (__pyx_t_4) { /* "ga4py/gain/util.pyx":243 * if not (lo <= self.value < hi): * raise IndexError, "lo/hi out of bounds %s <= %s < %s" % ( * lo, self.value, hi) # <<<<<<<<<<<<<< * return self * */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__value); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_t_2), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/util.pyx":244 * raise IndexError, "lo/hi out of bounds %s <= %s < %s" % ( * lo, self.value, hi) * return self # <<<<<<<<<<<<<< * * def get_size(self): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self); __pyx_r = __pyx_v_self; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.util.FixedKey.bound_by_lohi", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_17get_size(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_8FixedKey_16get_size[] = "Always returns 1 even though 0 is more correct.\n\n FixedKey instances don't count towards the shape of an array because\n FixedKey instances remove dimensions. However, since it is often\n convenient to calculate the shape of multiple Key instances using a\n reduction of the sizes of the Key instances, we return 1 here instead\n of 0.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8FixedKey_17get_size = {__Pyx_NAMESTR("get_size"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8FixedKey_17get_size, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_8FixedKey_16get_size)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_17get_size(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_size (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_8FixedKey_16get_size(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":246 * return self * * def get_size(self): # <<<<<<<<<<<<<< * """Always returns 1 even though 0 is more correct. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_16get_size(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_size", 0); __Pyx_TraceCall("get_size", __pyx_f[0], 246); /* "ga4py/gain/util.pyx":256 * * """ * return 1 # <<<<<<<<<<<<<< * size = property(get_size) * */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_int_1); __pyx_r = __pyx_int_1; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_19pyobj(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_8FixedKey_18pyobj[] = "Returns a Python object based on this Key (long 'value' attr)."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8FixedKey_19pyobj = {__Pyx_NAMESTR("pyobj"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8FixedKey_19pyobj, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_8FixedKey_18pyobj)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8FixedKey_19pyobj(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pyobj (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_8FixedKey_18pyobj(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":259 * size = property(get_size) * * def pyobj(self): # <<<<<<<<<<<<<< * """Returns a Python object based on this Key (long 'value' attr).""" * return self.value */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8FixedKey_18pyobj(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("pyobj", 0); __Pyx_TraceCall("pyobj", __pyx_f[0], 259); /* "ga4py/gain/util.pyx":261 * def pyobj(self): * """Returns a Python object based on this Key (long 'value' attr).""" * return self.value # <<<<<<<<<<<<<< * * class RangeKey(Key): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.util.FixedKey.pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8RangeKey_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_8RangeKey___init__[] = "Creates given either a slice or an explicit start, stop, and step.\n\n Asserts that the start, stop, and step are not None.\n An 'origin' is required. The given 'origin' must be >= 0.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8RangeKey_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8RangeKey_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_8RangeKey___init__)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8RangeKey_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_start = 0; PyObject *__pyx_v_stop = 0; PyObject *__pyx_v_step = 0; PyObject *__pyx_v_origin = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__start,&__pyx_n_s__stop,&__pyx_n_s__step,&__pyx_n_s__origin,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/gain/util.pyx":272 * * """ * def __init__(self, start, stop=None, step=None, origin=None): # <<<<<<<<<<<<<< * """Creates given either a slice or an explicit start, stop, and step. * */ values[2] = ((PyObject *)((PyObject *)Py_None)); values[3] = ((PyObject *)((PyObject *)Py_None)); values[4] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__start)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__stop); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__step); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__origin); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_start = values[1]; __pyx_v_stop = values[2]; __pyx_v_step = values[3]; __pyx_v_origin = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.RangeKey.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_8RangeKey___init__(__pyx_self, __pyx_v_self, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_origin); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4util_8RangeKey___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_stop, PyObject *__pyx_v_step, PyObject *__pyx_v_origin) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__init__", 0); __Pyx_TraceCall("__init__", __pyx_f[0], 272); /* "ga4py/gain/util.pyx":279 * * """ * Key.__init__(self) # <<<<<<<<<<<<<< * if isinstance(start, slice): * self.start = start.start */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__Key); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s____init__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":280 * """ * Key.__init__(self) * if isinstance(start, slice): # <<<<<<<<<<<<<< * self.start = start.start * self.stop = start.stop */ __pyx_t_4 = PySlice_Check(__pyx_v_start); __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/util.pyx":281 * Key.__init__(self) * if isinstance(start, slice): * self.start = start.start # <<<<<<<<<<<<<< * self.stop = start.stop * self.step = start.step */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_start, __pyx_n_s__start); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__start, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":282 * if isinstance(start, slice): * self.start = start.start * self.stop = start.stop # <<<<<<<<<<<<<< * self.step = start.step * assert stop is None */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_start, __pyx_n_s__stop); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__stop, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":283 * self.start = start.start * self.stop = start.stop * self.step = start.step # <<<<<<<<<<<<<< * assert stop is None * assert step is None */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_start, __pyx_n_s__step); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__step, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":284 * self.stop = start.stop * self.step = start.step * assert stop is None # <<<<<<<<<<<<<< * assert step is None * else: */ #ifndef CYTHON_WITHOUT_ASSERTIONS __pyx_t_5 = (__pyx_v_stop == Py_None); if (unlikely(!(__pyx_t_5 != 0))) { PyErr_SetNone(PyExc_AssertionError); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #endif /* "ga4py/gain/util.pyx":285 * self.step = start.step * assert stop is None * assert step is None # <<<<<<<<<<<<<< * else: * self.start = start */ #ifndef CYTHON_WITHOUT_ASSERTIONS __pyx_t_5 = (__pyx_v_step == Py_None); if (unlikely(!(__pyx_t_5 != 0))) { PyErr_SetNone(PyExc_AssertionError); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #endif goto __pyx_L3; } /*else*/ { /* "ga4py/gain/util.pyx":287 * assert step is None * else: * self.start = start # <<<<<<<<<<<<<< * self.stop = stop * self.step = step */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__start, __pyx_v_start) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":288 * else: * self.start = start * self.stop = stop # <<<<<<<<<<<<<< * self.step = step * assert start is not None */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__stop, __pyx_v_stop) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":289 * self.start = start * self.stop = stop * self.step = step # <<<<<<<<<<<<<< * assert start is not None * assert stop is not None */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__step, __pyx_v_step) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L3:; /* "ga4py/gain/util.pyx":290 * self.stop = stop * self.step = step * assert start is not None # <<<<<<<<<<<<<< * assert stop is not None * assert step is not None */ #ifndef CYTHON_WITHOUT_ASSERTIONS __pyx_t_5 = (__pyx_v_start != Py_None); if (unlikely(!(__pyx_t_5 != 0))) { PyErr_SetNone(PyExc_AssertionError); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #endif /* "ga4py/gain/util.pyx":291 * self.step = step * assert start is not None * assert stop is not None # <<<<<<<<<<<<<< * assert step is not None * assert origin is not None */ #ifndef CYTHON_WITHOUT_ASSERTIONS __pyx_t_5 = (__pyx_v_stop != Py_None); if (unlikely(!(__pyx_t_5 != 0))) { PyErr_SetNone(PyExc_AssertionError); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #endif /* "ga4py/gain/util.pyx":292 * assert start is not None * assert stop is not None * assert step is not None # <<<<<<<<<<<<<< * assert origin is not None * assert origin >= 0 */ #ifndef CYTHON_WITHOUT_ASSERTIONS __pyx_t_5 = (__pyx_v_step != Py_None); if (unlikely(!(__pyx_t_5 != 0))) { PyErr_SetNone(PyExc_AssertionError); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #endif /* "ga4py/gain/util.pyx":293 * assert stop is not None * assert step is not None * assert origin is not None # <<<<<<<<<<<<<< * assert origin >= 0 * self.origin = origin */ #ifndef CYTHON_WITHOUT_ASSERTIONS __pyx_t_5 = (__pyx_v_origin != Py_None); if (unlikely(!(__pyx_t_5 != 0))) { PyErr_SetNone(PyExc_AssertionError); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #endif /* "ga4py/gain/util.pyx":294 * assert step is not None * assert origin is not None * assert origin >= 0 # <<<<<<<<<<<<<< * self.origin = origin * */ #ifndef CYTHON_WITHOUT_ASSERTIONS __pyx_t_3 = PyObject_RichCompare(__pyx_v_origin, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_5)) { PyErr_SetNone(PyExc_AssertionError); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #endif /* "ga4py/gain/util.pyx":295 * assert origin is not None * assert origin >= 0 * self.origin = origin # <<<<<<<<<<<<<< * * def __eq__(self, other): */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__origin, __pyx_v_origin) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.util.RangeKey.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8RangeKey_3__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_8RangeKey_2__eq__[] = "Returns true if all start, stop, and step values match other."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8RangeKey_3__eq__ = {__Pyx_NAMESTR("__eq__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8RangeKey_3__eq__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_8RangeKey_2__eq__)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8RangeKey_3__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_other = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__other,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__other)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__eq__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_other = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.RangeKey.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_8RangeKey_2__eq__(__pyx_self, __pyx_v_self, __pyx_v_other); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":297 * self.origin = origin * * def __eq__(self, other): # <<<<<<<<<<<<<< * """Returns true if all start, stop, and step values match other.""" * try: */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8RangeKey_2__eq__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; int __pyx_t_10; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__eq__", 0); __Pyx_TraceCall("__eq__", __pyx_f[0], 297); /* "ga4py/gain/util.pyx":299 * def __eq__(self, other): * """Returns true if all start, stop, and step values match other.""" * try: # <<<<<<<<<<<<<< * return (self.start == other.start * and self.stop == other.stop */ { __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { /* "ga4py/gain/util.pyx":300 * """Returns true if all start, stop, and step values match other.""" * try: * return (self.start == other.start # <<<<<<<<<<<<<< * and self.stop == other.stop * and self.step == other.step) */ __Pyx_XDECREF(__pyx_r); /* "ga4py/gain/util.pyx":301 * try: * return (self.start == other.start * and self.stop == other.stop # <<<<<<<<<<<<<< * and self.step == other.step) * except AttributeError: */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); /* "ga4py/gain/util.pyx":300 * """Returns true if all start, stop, and step values match other.""" * try: * return (self.start == other.start # <<<<<<<<<<<<<< * and self.stop == other.stop * and self.step == other.step) */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s__start); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L3_error;} if (__pyx_t_7) { __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/util.pyx":301 * try: * return (self.start == other.start * and self.stop == other.stop # <<<<<<<<<<<<<< * and self.step == other.step) * except AttributeError: */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__stop); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s__stop); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L3_error;} if (__pyx_t_7) { __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; /* "ga4py/gain/util.pyx":302 * return (self.start == other.start * and self.stop == other.stop * and self.step == other.step) # <<<<<<<<<<<<<< * except AttributeError: * return False */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s__step); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_9 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __pyx_t_9; __pyx_t_9 = 0; } else { __pyx_t_5 = __pyx_t_8; __pyx_t_8 = 0; } __pyx_t_8 = __pyx_t_5; __pyx_t_5 = 0; } else { __pyx_t_8 = __pyx_t_6; __pyx_t_6 = 0; } __pyx_r = __pyx_t_8; __pyx_t_8 = 0; goto __pyx_L7_try_return; } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L10_try_end; __pyx_L7_try_return:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L0; __pyx_L3_error:; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; /* "ga4py/gain/util.pyx":303 * and self.stop == other.stop * and self.step == other.step) * except AttributeError: # <<<<<<<<<<<<<< * return False * */ __pyx_t_10 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError); if (__pyx_t_10) { __Pyx_AddTraceback("ga4py.gain.util.RangeKey.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_6, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_5); /* "ga4py/gain/util.pyx":304 * and self.step == other.step) * except AttributeError: * return False # <<<<<<<<<<<<<< * * def __getitem__(self, key): */ __Pyx_XDECREF(__pyx_r); __pyx_t_9 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_r = __pyx_t_9; __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L6_except_return; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L4_exception_handled; } __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L1_error; __pyx_L6_except_return:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L0; __pyx_L4_exception_handled:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); __pyx_L10_try_end:; } __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("ga4py.gain.util.RangeKey.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8RangeKey_5__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_8RangeKey_4__getitem__[] = "You can index using either a slice, RangeKey, or integer."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8RangeKey_5__getitem__ = {__Pyx_NAMESTR("__getitem__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8RangeKey_5__getitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_8RangeKey_4__getitem__)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8RangeKey_5__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_key = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__getitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_key = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.RangeKey.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_8RangeKey_4__getitem__(__pyx_self, __pyx_v_self, __pyx_v_key); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":306 * return False * * def __getitem__(self, key): # <<<<<<<<<<<<<< * """You can index using either a slice, RangeKey, or integer.""" * if isinstance(key, (RangeKey,slice)): */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8RangeKey_4__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) { PyObject *__pyx_v__start = NULL; PyObject *__pyx_v__stop = NULL; PyObject *__pyx_v__step = NULL; PyObject *__pyx_v_start = NULL; PyObject *__pyx_v_stop = NULL; PyObject *__pyx_v_step = NULL; PyObject *__pyx_v_shifted = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_t_4; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *(*__pyx_t_8)(PyObject *); PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; int __pyx_t_12; int __pyx_t_13; int __pyx_t_14; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__getitem__", 0); __Pyx_TraceCall("__getitem__", __pyx_f[0], 306); __Pyx_INCREF(__pyx_v_key); /* "ga4py/gain/util.pyx":308 * def __getitem__(self, key): * """You can index using either a slice, RangeKey, or integer.""" * if isinstance(key, (RangeKey,slice)): # <<<<<<<<<<<<<< * if isinstance(key, slice): * _start,_stop,_step = key.indices(self.size) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__RangeKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)((PyObject*)(&PySlice_Type)))); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)((PyObject*)(&PySlice_Type)))); __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PySlice_Type)))); __pyx_t_1 = 0; __pyx_t_3 = PyObject_IsInstance(__pyx_v_key, ((PyObject *)__pyx_t_2)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { /* "ga4py/gain/util.pyx":309 * """You can index using either a slice, RangeKey, or integer.""" * if isinstance(key, (RangeKey,slice)): * if isinstance(key, slice): # <<<<<<<<<<<<<< * _start,_stop,_step = key.indices(self.size) * else: */ __pyx_t_4 = PySlice_Check(__pyx_v_key); __pyx_t_3 = (__pyx_t_4 != 0); if (__pyx_t_3) { /* "ga4py/gain/util.pyx":310 * if isinstance(key, (RangeKey,slice)): * if isinstance(key, slice): * _start,_stop,_step = key.indices(self.size) # <<<<<<<<<<<<<< * else: * _start,_stop,_step = key.start,key.stop,key.step */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s__indices); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 3)) { if (size > 3) __Pyx_RaiseTooManyValuesError(3); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); } else { __pyx_t_5 = PyList_GET_ITEM(sequence, 0); __pyx_t_2 = PyList_GET_ITEM(sequence, 1); __pyx_t_6 = PyList_GET_ITEM(sequence, 2); } __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); index = 1; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L6_unpacking_done:; } __pyx_v__start = __pyx_t_5; __pyx_t_5 = 0; __pyx_v__stop = __pyx_t_2; __pyx_t_2 = 0; __pyx_v__step = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L4; } /*else*/ { /* "ga4py/gain/util.pyx":312 * _start,_stop,_step = key.indices(self.size) * else: * _start,_stop,_step = key.start,key.stop,key.step # <<<<<<<<<<<<<< * start = ((_start*self.step) + self.start) * stop = ((_stop*self.step) + self.start) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s__start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s__stop); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s__step); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v__start = __pyx_t_1; __pyx_t_1 = 0; __pyx_v__stop = __pyx_t_6; __pyx_t_6 = 0; __pyx_v__step = __pyx_t_2; __pyx_t_2 = 0; } __pyx_L4:; /* "ga4py/gain/util.pyx":313 * else: * _start,_stop,_step = key.start,key.stop,key.step * start = ((_start*self.step) + self.start) # <<<<<<<<<<<<<< * stop = ((_stop*self.step) + self.start) * step = _step * self.step */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyNumber_Multiply(__pyx_v__start, __pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_start = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":314 * _start,_stop,_step = key.start,key.stop,key.step * start = ((_start*self.step) + self.start) * stop = ((_stop*self.step) + self.start) # <<<<<<<<<<<<<< * step = _step * self.step * return RangeKey(start,stop,step,origin=self.origin) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Multiply(__pyx_v__stop, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_stop = __pyx_t_6; __pyx_t_6 = 0; /* "ga4py/gain/util.pyx":315 * start = ((_start*self.step) + self.start) * stop = ((_stop*self.step) + self.start) * step = _step * self.step # <<<<<<<<<<<<<< * return RangeKey(start,stop,step,origin=self.origin) * else: */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = PyNumber_Multiply(__pyx_v__step, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_step = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":316 * stop = ((_stop*self.step) + self.start) * step = _step * self.step * return RangeKey(start,stop,step,origin=self.origin) # <<<<<<<<<<<<<< * else: * try: */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__RangeKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_start); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_start); __Pyx_GIVEREF(__pyx_v_start); __Pyx_INCREF(__pyx_v_stop); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_stop); __Pyx_GIVEREF(__pyx_v_stop); __Pyx_INCREF(__pyx_v_step); PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_step); __Pyx_GIVEREF(__pyx_v_step); __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__origin); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__origin), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/util.pyx":318 * return RangeKey(start,stop,step,origin=self.origin) * else: * try: # <<<<<<<<<<<<<< * key = long(key) * except TypeError: */ { __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); __Pyx_XGOTREF(__pyx_t_9); __Pyx_XGOTREF(__pyx_t_10); __Pyx_XGOTREF(__pyx_t_11); /*try:*/ { /* "ga4py/gain/util.pyx":319 * else: * try: * key = long(key) # <<<<<<<<<<<<<< * except TypeError: * raise TypeError, ("long() argument must be a string or a " */ __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L7_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_key); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_key); __Pyx_GIVEREF(__pyx_v_key); __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyLong_Type))), ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L7_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_2); __pyx_t_2 = 0; } __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L14_try_end; __pyx_L7_error:; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":320 * try: * key = long(key) * except TypeError: # <<<<<<<<<<<<<< * raise TypeError, ("long() argument must be a string or a " * "number, not %s" % key) */ __pyx_t_12 = PyErr_ExceptionMatches(__pyx_builtin_TypeError); if (__pyx_t_12) { __Pyx_AddTraceback("ga4py.gain.util.RangeKey.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_5, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_6); /* "ga4py/gain/util.pyx":322 * except TypeError: * raise TypeError, ("long() argument must be a string or a " * "number, not %s" % key) # <<<<<<<<<<<<<< * if key < 0: * key += self.size */ __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_10), __pyx_v_key); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_t_1), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L8_exception_handled; } __pyx_L9_except_error:; __Pyx_XGIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_XGIVEREF(__pyx_t_11); __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); goto __pyx_L1_error; __pyx_L8_exception_handled:; __Pyx_XGIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_XGIVEREF(__pyx_t_11); __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); __pyx_L14_try_end:; } /* "ga4py/gain/util.pyx":323 * raise TypeError, ("long() argument must be a string or a " * "number, not %s" % key) * if key < 0: # <<<<<<<<<<<<<< * key += self.size * if key >= self.size or key < 0: */ __pyx_t_6 = PyObject_RichCompare(__pyx_v_key, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_3) { /* "ga4py/gain/util.pyx":324 * "number, not %s" % key) * if key < 0: * key += self.size # <<<<<<<<<<<<<< * if key >= self.size or key < 0: * raise IndexError, "invalid index" */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__size); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_v_key, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_5); __pyx_t_5 = 0; goto __pyx_L17; } __pyx_L17:; /* "ga4py/gain/util.pyx":325 * if key < 0: * key += self.size * if key >= self.size or key < 0: # <<<<<<<<<<<<<< * raise IndexError, "invalid index" * shifted = (key*self.step) + self.start */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__size); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PyObject_RichCompare(__pyx_v_key, __pyx_t_5, Py_GE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (!__pyx_t_3) { __pyx_t_6 = PyObject_RichCompare(__pyx_v_key, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_13 = __pyx_t_4; } else { __pyx_t_13 = __pyx_t_3; } if (__pyx_t_13) { /* "ga4py/gain/util.pyx":326 * key += self.size * if key >= self.size or key < 0: * raise IndexError, "invalid index" # <<<<<<<<<<<<<< * shifted = (key*self.step) + self.start * if (self.step < 0 and shifted <= self.stop */ __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_kp_s_11), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L18; } __pyx_L18:; /* "ga4py/gain/util.pyx":327 * if key >= self.size or key < 0: * raise IndexError, "invalid index" * shifted = (key*self.step) + self.start # <<<<<<<<<<<<<< * if (self.step < 0 and shifted <= self.stop * or self.step > 0 and shifted >= self.stop): */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PyNumber_Multiply(__pyx_v_key, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_shifted = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":328 * raise IndexError, "invalid index" * shifted = (key*self.step) + self.start * if (self.step < 0 and shifted <= self.stop # <<<<<<<<<<<<<< * or self.step > 0 and shifted >= self.stop): * raise IndexError */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyObject_RichCompare(__pyx_t_2, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_13 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_13) { __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__stop); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = PyObject_RichCompare(__pyx_v_shifted, __pyx_t_6, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __pyx_t_3; } else { __pyx_t_4 = __pyx_t_13; } if (!__pyx_t_4) { /* "ga4py/gain/util.pyx":329 * shifted = (key*self.step) + self.start * if (self.step < 0 and shifted <= self.stop * or self.step > 0 and shifted >= self.stop): # <<<<<<<<<<<<<< * raise IndexError * return FixedKey(shifted, self.origin) */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyObject_RichCompare(__pyx_t_2, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_13 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_13) { __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__stop); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = PyObject_RichCompare(__pyx_v_shifted, __pyx_t_6, Py_GE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_14 = __pyx_t_3; } else { __pyx_t_14 = __pyx_t_13; } __pyx_t_13 = __pyx_t_14; } else { __pyx_t_13 = __pyx_t_4; } if (__pyx_t_13) { /* "ga4py/gain/util.pyx":330 * if (self.step < 0 and shifted <= self.stop * or self.step > 0 and shifted >= self.stop): * raise IndexError # <<<<<<<<<<<<<< * return FixedKey(shifted, self.origin) * */ __Pyx_Raise(__pyx_builtin_IndexError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L19; } __pyx_L19:; /* "ga4py/gain/util.pyx":331 * or self.step > 0 and shifted >= self.stop): * raise IndexError * return FixedKey(shifted, self.origin) # <<<<<<<<<<<<<< * * def __str__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__FixedKey); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__origin); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_shifted); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_shifted); __Pyx_GIVEREF(__pyx_v_shifted); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("ga4py.gain.util.RangeKey.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v__start); __Pyx_XDECREF(__pyx_v__stop); __Pyx_XDECREF(__pyx_v__step); __Pyx_XDECREF(__pyx_v_start); __Pyx_XDECREF(__pyx_v_stop); __Pyx_XDECREF(__pyx_v_step); __Pyx_XDECREF(__pyx_v_shifted); __Pyx_XDECREF(__pyx_v_key); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8RangeKey_7__str__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8RangeKey_7__str__ = {__Pyx_NAMESTR("__str__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8RangeKey_7__str__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8RangeKey_7__str__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_8RangeKey_6__str__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":333 * return FixedKey(shifted, self.origin) * * def __str__(self): # <<<<<<<<<<<<<< * return "RangeKey(%s,%s,%s)" % (self.start,self.stop,self.step) * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8RangeKey_6__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__str__", 0); __Pyx_TraceCall("__str__", __pyx_f[0], 333); /* "ga4py/gain/util.pyx":334 * * def __str__(self): * return "RangeKey(%s,%s,%s)" % (self.start,self.stop,self.step) # <<<<<<<<<<<<<< * * def __repr__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__stop); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_12), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_r = ((PyObject *)__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.util.RangeKey.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8RangeKey_9__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8RangeKey_9__repr__ = {__Pyx_NAMESTR("__repr__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8RangeKey_9__repr__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8RangeKey_9__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_8RangeKey_8__repr__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":336 * return "RangeKey(%s,%s,%s)" % (self.start,self.stop,self.step) * * def __repr__(self): # <<<<<<<<<<<<<< * return str(self) * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8RangeKey_8__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__repr__", 0); __Pyx_TraceCall("__repr__", __pyx_f[0], 336); /* "ga4py/gain/util.pyx":337 * * def __repr__(self): * return str(self) # <<<<<<<<<<<<<< * * def bound_by_lohi(self, lo, hi): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.util.RangeKey.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8RangeKey_11bound_by_lohi(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_8RangeKey_10bound_by_lohi[] = "Return a new RangeKey modified to fit between lo and hi.\n\n Raises\n ------\n IndexError if start/stop/step is out of the bounds of lo/hi .\n\n Returns\n -------\n A new RangeKey between the values of lo and hi.\n\n Examples\n --------\n >>> RangeKey(1,10,2).bound_by_lohi(4,20)\n RangeKey(5,10,2)\n >>> RangeKey(1,10,2).bound_by_lohi(1,20)\n RangeKey(1,10,2)\n >>> RangeKey(1,10,2).bound_by_lohi(4,10)\n RangeKey(5,10,2)\n >>> RangeKey(1,10,2).bound_by_lohi(4,9)\n RangeKey(5,9,2)\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8RangeKey_11bound_by_lohi = {__Pyx_NAMESTR("bound_by_lohi"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8RangeKey_11bound_by_lohi, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_8RangeKey_10bound_by_lohi)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8RangeKey_11bound_by_lohi(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("bound_by_lohi (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("bound_by_lohi", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("bound_by_lohi", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bound_by_lohi") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_self = values[0]; __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("bound_by_lohi", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.RangeKey.bound_by_lohi", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_8RangeKey_10bound_by_lohi(__pyx_self, __pyx_v_self, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":339 * return str(self) * * def bound_by_lohi(self, lo, hi): # <<<<<<<<<<<<<< * """Return a new RangeKey modified to fit between lo and hi. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8RangeKey_10bound_by_lohi(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyObject *__pyx_v_new_start = NULL; PyObject *__pyx_v_new_stop = NULL; PyObject *__pyx_v_guess = NULL; PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("bound_by_lohi", 0); __Pyx_TraceCall("bound_by_lohi", __pyx_f[0], 339); /* "ga4py/gain/util.pyx":362 * * """ * new_start = 0 # <<<<<<<<<<<<<< * new_stop = 0 * if self.step > 0: */ __Pyx_INCREF(__pyx_int_0); __pyx_v_new_start = __pyx_int_0; /* "ga4py/gain/util.pyx":363 * """ * new_start = 0 * new_stop = 0 # <<<<<<<<<<<<<< * if self.step > 0: * if self.start >= hi: */ __Pyx_INCREF(__pyx_int_0); __pyx_v_new_stop = __pyx_int_0; /* "ga4py/gain/util.pyx":364 * new_start = 0 * new_stop = 0 * if self.step > 0: # <<<<<<<<<<<<<< * if self.start >= hi: * raise IndexError, "start >= hi (out of bounds)" */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_3) { /* "ga4py/gain/util.pyx":365 * new_stop = 0 * if self.step > 0: * if self.start >= hi: # <<<<<<<<<<<<<< * raise IndexError, "start >= hi (out of bounds)" * elif self.start >= lo: # start < hi is implied */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_v_hi, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/util.pyx":366 * if self.step > 0: * if self.start >= hi: * raise IndexError, "start >= hi (out of bounds)" # <<<<<<<<<<<<<< * elif self.start >= lo: # start < hi is implied * new_start = self.start */ __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_kp_s_13), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L4; } /* "ga4py/gain/util.pyx":367 * if self.start >= hi: * raise IndexError, "start >= hi (out of bounds)" * elif self.start >= lo: # start < hi is implied # <<<<<<<<<<<<<< * new_start = self.start * else: # start < lo < hi is implied */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_v_lo, Py_GE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_3) { /* "ga4py/gain/util.pyx":368 * raise IndexError, "start >= hi (out of bounds)" * elif self.start >= lo: # start < hi is implied * new_start = self.start # <<<<<<<<<<<<<< * else: # start < lo < hi is implied * guess = (lo-self.start)//self.step */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF_SET(__pyx_v_new_start, __pyx_t_2); __pyx_t_2 = 0; goto __pyx_L4; } /*else*/ { /* "ga4py/gain/util.pyx":370 * new_start = self.start * else: # start < lo < hi is implied * guess = (lo-self.start)//self.step # <<<<<<<<<<<<<< * new_start = guess*self.step + self.start * while new_start < lo: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_Subtract(__pyx_v_lo, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyNumber_FloorDivide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_guess = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/util.pyx":371 * else: # start < lo < hi is implied * guess = (lo-self.start)//self.step * new_start = guess*self.step + self.start # <<<<<<<<<<<<<< * while new_start < lo: * guess += 1 */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyNumber_Multiply(__pyx_v_guess, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_new_start, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":372 * guess = (lo-self.start)//self.step * new_start = guess*self.step + self.start * while new_start < lo: # <<<<<<<<<<<<<< * guess += 1 * new_start = guess*self.step + self.start */ while (1) { __pyx_t_1 = PyObject_RichCompare(__pyx_v_new_start, __pyx_v_lo, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!__pyx_t_3) break; /* "ga4py/gain/util.pyx":373 * new_start = guess*self.step + self.start * while new_start < lo: * guess += 1 # <<<<<<<<<<<<<< * new_start = guess*self.step + self.start * if self.stop <= lo: */ __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_guess, __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_guess, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":374 * while new_start < lo: * guess += 1 * new_start = guess*self.step + self.start # <<<<<<<<<<<<<< * if self.stop <= lo: * raise IndexError, "stop <= lo (out of bounds)" */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyNumber_Multiply(__pyx_v_guess, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Add(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_new_start, __pyx_t_2); __pyx_t_2 = 0; } } __pyx_L4:; /* "ga4py/gain/util.pyx":375 * guess += 1 * new_start = guess*self.step + self.start * if self.stop <= lo: # <<<<<<<<<<<<<< * raise IndexError, "stop <= lo (out of bounds)" * elif self.stop <= hi: # lo < stop is implied */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__stop); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_v_lo, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/util.pyx":376 * new_start = guess*self.step + self.start * if self.stop <= lo: * raise IndexError, "stop <= lo (out of bounds)" # <<<<<<<<<<<<<< * elif self.stop <= hi: # lo < stop is implied * new_stop = self.stop */ __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_kp_s_14), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } /* "ga4py/gain/util.pyx":377 * if self.stop <= lo: * raise IndexError, "stop <= lo (out of bounds)" * elif self.stop <= hi: # lo < stop is implied # <<<<<<<<<<<<<< * new_stop = self.stop * else: # lo < hi < stop is implied */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__stop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_v_hi, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_3) { /* "ga4py/gain/util.pyx":378 * raise IndexError, "stop <= lo (out of bounds)" * elif self.stop <= hi: # lo < stop is implied * new_stop = self.stop # <<<<<<<<<<<<<< * else: # lo < hi < stop is implied * new_stop = hi # this should be good enough */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__stop); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF_SET(__pyx_v_new_stop, __pyx_t_2); __pyx_t_2 = 0; goto __pyx_L7; } /*else*/ { /* "ga4py/gain/util.pyx":380 * new_stop = self.stop * else: # lo < hi < stop is implied * new_stop = hi # this should be good enough # <<<<<<<<<<<<<< * else: * if self.start < lo: */ __Pyx_INCREF(__pyx_v_hi); __Pyx_DECREF_SET(__pyx_v_new_stop, __pyx_v_hi); } __pyx_L7:; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/util.pyx":382 * new_stop = hi # this should be good enough * else: * if self.start < lo: # <<<<<<<<<<<<<< * raise IndexError, "negative step, start < lo (out of bounds)" * elif self.start < hi: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_v_lo, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/util.pyx":383 * else: * if self.start < lo: * raise IndexError, "negative step, start < lo (out of bounds)" # <<<<<<<<<<<<<< * elif self.start < hi: * new_start = self.start */ __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_kp_s_15), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } /* "ga4py/gain/util.pyx":384 * if self.start < lo: * raise IndexError, "negative step, start < lo (out of bounds)" * elif self.start < hi: # <<<<<<<<<<<<<< * new_start = self.start * else: # start >= hi >= lo */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_v_hi, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_3) { /* "ga4py/gain/util.pyx":385 * raise IndexError, "negative step, start < lo (out of bounds)" * elif self.start < hi: * new_start = self.start # <<<<<<<<<<<<<< * else: # start >= hi >= lo * guess = (hi-self.start)//self.step */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF_SET(__pyx_v_new_start, __pyx_t_2); __pyx_t_2 = 0; goto __pyx_L8; } /*else*/ { /* "ga4py/gain/util.pyx":387 * new_start = self.start * else: # start >= hi >= lo * guess = (hi-self.start)//self.step # <<<<<<<<<<<<<< * new_start = guess*self.step + self.start * while new_start >= hi: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_Subtract(__pyx_v_hi, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyNumber_FloorDivide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_guess = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/util.pyx":388 * else: # start >= hi >= lo * guess = (hi-self.start)//self.step * new_start = guess*self.step + self.start # <<<<<<<<<<<<<< * while new_start >= hi: * guess += 1 */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyNumber_Multiply(__pyx_v_guess, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_new_start, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":389 * guess = (hi-self.start)//self.step * new_start = guess*self.step + self.start * while new_start >= hi: # <<<<<<<<<<<<<< * guess += 1 * new_start = guess*self.step + self.start */ while (1) { __pyx_t_1 = PyObject_RichCompare(__pyx_v_new_start, __pyx_v_hi, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!__pyx_t_3) break; /* "ga4py/gain/util.pyx":390 * new_start = guess*self.step + self.start * while new_start >= hi: * guess += 1 # <<<<<<<<<<<<<< * new_start = guess*self.step + self.start * if self.stop >= hi: */ __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_guess, __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_guess, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":391 * while new_start >= hi: * guess += 1 * new_start = guess*self.step + self.start # <<<<<<<<<<<<<< * if self.stop >= hi: * raise IndexError, "negative step, stop >= hi (out of bounds)" */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = PyNumber_Multiply(__pyx_v_guess, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Add(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_new_start, __pyx_t_2); __pyx_t_2 = 0; } } __pyx_L8:; /* "ga4py/gain/util.pyx":392 * guess += 1 * new_start = guess*self.step + self.start * if self.stop >= hi: # <<<<<<<<<<<<<< * raise IndexError, "negative step, stop >= hi (out of bounds)" * elif self.stop >= (lo-1): */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__stop); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_v_hi, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_3) { /* "ga4py/gain/util.pyx":393 * new_start = guess*self.step + self.start * if self.stop >= hi: * raise IndexError, "negative step, stop >= hi (out of bounds)" # <<<<<<<<<<<<<< * elif self.stop >= (lo-1): * new_stop = self.stop */ __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_kp_s_16), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L11; } /* "ga4py/gain/util.pyx":394 * if self.stop >= hi: * raise IndexError, "negative step, stop >= hi (out of bounds)" * elif self.stop >= (lo-1): # <<<<<<<<<<<<<< * new_stop = self.stop * else: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__stop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Subtract(__pyx_v_lo, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_3) { /* "ga4py/gain/util.pyx":395 * raise IndexError, "negative step, stop >= hi (out of bounds)" * elif self.stop >= (lo-1): * new_stop = self.stop # <<<<<<<<<<<<<< * else: * new_stop = lo-1 # this should be good enough */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__stop); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF_SET(__pyx_v_new_stop, __pyx_t_4); __pyx_t_4 = 0; goto __pyx_L11; } /*else*/ { /* "ga4py/gain/util.pyx":397 * new_stop = self.stop * else: * new_stop = lo-1 # this should be good enough # <<<<<<<<<<<<<< * result = RangeKey(new_start,new_stop,self.step,self.origin) * if result.size <= 0: */ __pyx_t_4 = PyNumber_Subtract(__pyx_v_lo, __pyx_int_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF_SET(__pyx_v_new_stop, __pyx_t_4); __pyx_t_4 = 0; } __pyx_L11:; } __pyx_L3:; /* "ga4py/gain/util.pyx":398 * else: * new_stop = lo-1 # this should be good enough * result = RangeKey(new_start,new_stop,self.step,self.origin) # <<<<<<<<<<<<<< * if result.size <= 0: * raise IndexError, "bound_by_lohi resulted in 0 length" */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__RangeKey); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__origin); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_new_start); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_new_start); __Pyx_GIVEREF(__pyx_v_new_start); __Pyx_INCREF(__pyx_v_new_stop); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_new_stop); __Pyx_GIVEREF(__pyx_v_new_stop); PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_v_result = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":399 * new_stop = lo-1 # this should be good enough * result = RangeKey(new_start,new_stop,self.step,self.origin) * if result.size <= 0: # <<<<<<<<<<<<<< * raise IndexError, "bound_by_lohi resulted in 0 length" * return result */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_int_0, Py_LE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_3) { /* "ga4py/gain/util.pyx":400 * result = RangeKey(new_start,new_stop,self.step,self.origin) * if result.size <= 0: * raise IndexError, "bound_by_lohi resulted in 0 length" # <<<<<<<<<<<<<< * return result * */ __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_kp_s_17), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L12; } __pyx_L12:; /* "ga4py/gain/util.pyx":401 * if result.size <= 0: * raise IndexError, "bound_by_lohi resulted in 0 length" * return result # <<<<<<<<<<<<<< * * def get_size(self): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_result); __pyx_r = __pyx_v_result; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("ga4py.gain.util.RangeKey.bound_by_lohi", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_new_start); __Pyx_XDECREF(__pyx_v_new_stop); __Pyx_XDECREF(__pyx_v_guess); __Pyx_XDECREF(__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8RangeKey_13get_size(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_8RangeKey_12get_size[] = "Returns the length of the range."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8RangeKey_13get_size = {__Pyx_NAMESTR("get_size"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8RangeKey_13get_size, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_8RangeKey_12get_size)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8RangeKey_13get_size(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_size (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_8RangeKey_12get_size(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":403 * return result * * def get_size(self): # <<<<<<<<<<<<<< * """Returns the length of the range.""" * start,stop,step = self.start,self.stop,self.step # for brevity */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8RangeKey_12get_size(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_start = NULL; PyObject *__pyx_v_stop = NULL; PyObject *__pyx_v_step = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_size", 0); __Pyx_TraceCall("get_size", __pyx_f[0], 403); /* "ga4py/gain/util.pyx":405 * def get_size(self): * """Returns the length of the range.""" * start,stop,step = self.start,self.stop,self.step # for brevity # <<<<<<<<<<<<<< * if (step < 0 and stop >= start) or (step > 0 and start >= stop): * return 0 */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__stop); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_v_start = __pyx_t_1; __pyx_t_1 = 0; __pyx_v_stop = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_step = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":406 * """Returns the length of the range.""" * start,stop,step = self.start,self.stop,self.step # for brevity * if (step < 0 and stop >= start) or (step > 0 and start >= stop): # <<<<<<<<<<<<<< * return 0 * elif step < 0: */ __pyx_t_3 = PyObject_RichCompare(__pyx_v_step, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_4) { __pyx_t_3 = PyObject_RichCompare(__pyx_v_stop, __pyx_v_start, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = __pyx_t_5; } else { __pyx_t_6 = __pyx_t_4; } if (!__pyx_t_6) { __pyx_t_3 = PyObject_RichCompare(__pyx_v_step, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_4) { __pyx_t_3 = PyObject_RichCompare(__pyx_v_start, __pyx_v_stop, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __pyx_t_5; } else { __pyx_t_7 = __pyx_t_4; } __pyx_t_4 = __pyx_t_7; } else { __pyx_t_4 = __pyx_t_6; } if (__pyx_t_4) { /* "ga4py/gain/util.pyx":407 * start,stop,step = self.start,self.stop,self.step # for brevity * if (step < 0 and stop >= start) or (step > 0 and start >= stop): * return 0 # <<<<<<<<<<<<<< * elif step < 0: * return (stop - start + 1) / (step) + 1 */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_int_0); __pyx_r = __pyx_int_0; goto __pyx_L0; goto __pyx_L3; } /* "ga4py/gain/util.pyx":408 * if (step < 0 and stop >= start) or (step > 0 and start >= stop): * return 0 * elif step < 0: # <<<<<<<<<<<<<< * return (stop - start + 1) / (step) + 1 * else: */ __pyx_t_3 = PyObject_RichCompare(__pyx_v_step, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_4) { /* "ga4py/gain/util.pyx":409 * return 0 * elif step < 0: * return (stop - start + 1) / (step) + 1 # <<<<<<<<<<<<<< * else: * return (stop - start - 1) / (step) + 1 */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = PyNumber_Subtract(__pyx_v_stop, __pyx_v_start); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_v_step); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/util.pyx":411 * return (stop - start + 1) / (step) + 1 * else: * return (stop - start - 1) / (step) + 1 # <<<<<<<<<<<<<< * size = property(get_size) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = PyNumber_Subtract(__pyx_v_stop, __pyx_v_start); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyNumber_Subtract(__pyx_t_2, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_v_step); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.util.RangeKey.get_size", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_start); __Pyx_XDECREF(__pyx_v_stop); __Pyx_XDECREF(__pyx_v_step); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_8RangeKey_15pyobj(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_8RangeKey_14pyobj[] = "Returns a Python object based on this Key (a slice)."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_8RangeKey_15pyobj = {__Pyx_NAMESTR("pyobj"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_8RangeKey_15pyobj, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_8RangeKey_14pyobj)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_8RangeKey_15pyobj(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pyobj (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_8RangeKey_14pyobj(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":414 * size = property(get_size) * * def pyobj(self): # <<<<<<<<<<<<<< * """Returns a Python object based on this Key (a slice).""" * return slice(self.start,self.stop,self.step) */ static PyObject *__pyx_pf_5ga4py_4gain_4util_8RangeKey_14pyobj(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("pyobj", 0); __Pyx_TraceCall("pyobj", __pyx_f[0], 414); /* "ga4py/gain/util.pyx":416 * def pyobj(self): * """Returns a Python object based on this Key (a slice).""" * return slice(self.start,self.stop,self.step) # <<<<<<<<<<<<<< * * class MasterKey(object): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__stop); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__step); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.util.RangeKey.pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_shape = 0; PyObject *__pyx_v_data = 0; PyObject *__pyx_v_fixed = 0; PyObject *__pyx_v_T = 0; PyObject *__pyx_v_TT = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__shape,&__pyx_n_s__data,&__pyx_n_s__fixed,&__pyx_n_s__T,&__pyx_n_s__TT,0}; PyObject* values[6] = {0,0,0,0,0,0}; /* "ga4py/gain/util.pyx":432 * * """ * def __init__(self, shape=None, data=None, fixed=None, T=None, TT=None): # <<<<<<<<<<<<<< * if shape is None and data is None: * raise ValueError, "specify either shape or data" */ values[1] = ((PyObject *)((PyObject *)Py_None)); values[2] = ((PyObject *)((PyObject *)Py_None)); values[3] = ((PyObject *)((PyObject *)Py_None)); values[4] = ((PyObject *)((PyObject *)Py_None)); values[5] = ((PyObject *)((PyObject *)Py_None)); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__shape); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fixed); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__T); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__TT); if (value) { values[5] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_self = values[0]; __pyx_v_shape = values[1]; __pyx_v_data = values[2]; __pyx_v_fixed = values[3]; __pyx_v_T = values[4]; __pyx_v_TT = values[5]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.MasterKey.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey___init__(__pyx_self, __pyx_v_self, __pyx_v_shape, __pyx_v_data, __pyx_v_fixed, __pyx_v_T, __pyx_v_TT); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_shape, PyObject *__pyx_v_data, PyObject *__pyx_v_fixed, PyObject *__pyx_v_T, PyObject *__pyx_v_TT) { PyObject *__pyx_v_datum = NULL; PyObject *__pyx_v_i = NULL; PyObject *__pyx_v_x = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; Py_ssize_t __pyx_t_7; PyObject *(*__pyx_t_8)(PyObject *); PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__init__", 0); __Pyx_TraceCall("__init__", __pyx_f[0], 432); /* "ga4py/gain/util.pyx":433 * """ * def __init__(self, shape=None, data=None, fixed=None, T=None, TT=None): * if shape is None and data is None: # <<<<<<<<<<<<<< * raise ValueError, "specify either shape or data" * elif shape is not None: */ __pyx_t_1 = (__pyx_v_shape == Py_None); if ((__pyx_t_1 != 0)) { __pyx_t_2 = (__pyx_v_data == Py_None); __pyx_t_3 = (__pyx_t_2 != 0); } else { __pyx_t_3 = (__pyx_t_1 != 0); } if (__pyx_t_3) { /* "ga4py/gain/util.pyx":434 * def __init__(self, shape=None, data=None, fixed=None, T=None, TT=None): * if shape is None and data is None: * raise ValueError, "specify either shape or data" # <<<<<<<<<<<<<< * elif shape is not None: * self.data = [RangeKey(0,x,1,origin=i) */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_18), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } /* "ga4py/gain/util.pyx":435 * if shape is None and data is None: * raise ValueError, "specify either shape or data" * elif shape is not None: # <<<<<<<<<<<<<< * self.data = [RangeKey(0,x,1,origin=i) * for i,x in enumerate(shape)] */ __pyx_t_3 = (__pyx_v_shape != Py_None); __pyx_t_1 = (__pyx_t_3 != 0); if (__pyx_t_1) { /* "ga4py/gain/util.pyx":436 * raise ValueError, "specify either shape or data" * elif shape is not None: * self.data = [RangeKey(0,x,1,origin=i) # <<<<<<<<<<<<<< * for i,x in enumerate(shape)] * elif data is not None: */ __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_int_0); __pyx_t_5 = __pyx_int_0; /* "ga4py/gain/util.pyx":437 * elif shape is not None: * self.data = [RangeKey(0,x,1,origin=i) * for i,x in enumerate(shape)] # <<<<<<<<<<<<<< * elif data is not None: * for datum in data: */ if (PyList_CheckExact(__pyx_v_shape) || PyTuple_CheckExact(__pyx_v_shape)) { __pyx_t_6 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = 0; __pyx_t_8 = NULL; } else { __pyx_t_7 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_shape); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = Py_TYPE(__pyx_t_6)->tp_iternext; } for (;;) { if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_6)) { if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_9 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_9 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_6)) { if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_9 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_9 = __pyx_t_8(__pyx_t_6); if (unlikely(!__pyx_t_9)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_9); } __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_9); __pyx_t_9 = 0; __Pyx_INCREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_5); __pyx_t_9 = PyNumber_Add(__pyx_t_5, __pyx_int_1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = __pyx_t_9; __pyx_t_9 = 0; /* "ga4py/gain/util.pyx":436 * raise ValueError, "specify either shape or data" * elif shape is not None: * self.data = [RangeKey(0,x,1,origin=i) # <<<<<<<<<<<<<< * for i,x in enumerate(shape)] * elif data is not None: */ __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s__RangeKey); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_INCREF(__pyx_int_0); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_int_0); __Pyx_GIVEREF(__pyx_int_0); __Pyx_INCREF(__pyx_v_x); PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_x); __Pyx_GIVEREF(__pyx_v_x); __Pyx_INCREF(__pyx_int_1); PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_int_1); __Pyx_GIVEREF(__pyx_int_1); __pyx_t_11 = PyDict_New(); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_11)); if (PyDict_SetItem(__pyx_t_11, ((PyObject *)__pyx_n_s__origin), __pyx_v_i) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_12 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_10), ((PyObject *)__pyx_t_11)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_12))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__data, ((PyObject *)__pyx_t_4)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; goto __pyx_L3; } /* "ga4py/gain/util.pyx":438 * self.data = [RangeKey(0,x,1,origin=i) * for i,x in enumerate(shape)] * elif data is not None: # <<<<<<<<<<<<<< * for datum in data: * assert isinstance(datum, Key) */ __pyx_t_1 = (__pyx_v_data != Py_None); __pyx_t_3 = (__pyx_t_1 != 0); if (__pyx_t_3) { /* "ga4py/gain/util.pyx":439 * for i,x in enumerate(shape)] * elif data is not None: * for datum in data: # <<<<<<<<<<<<<< * assert isinstance(datum, Key) * self.data = data */ if (PyList_CheckExact(__pyx_v_data) || PyTuple_CheckExact(__pyx_v_data)) { __pyx_t_4 = __pyx_v_data; __Pyx_INCREF(__pyx_t_4); __pyx_t_7 = 0; __pyx_t_8 = NULL; } else { __pyx_t_7 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_data); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext; } for (;;) { if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_4)) { if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_4)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_4)) { if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_4)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_5 = __pyx_t_8(__pyx_t_4); if (unlikely(!__pyx_t_5)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_5); } __Pyx_XDECREF_SET(__pyx_v_datum, __pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/util.pyx":440 * elif data is not None: * for datum in data: * assert isinstance(datum, Key) # <<<<<<<<<<<<<< * self.data = data * else: */ #ifndef CYTHON_WITHOUT_ASSERTIONS __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__Key); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_IsInstance(__pyx_v_datum, __pyx_t_5); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!(__pyx_t_3 != 0))) { PyErr_SetNone(PyExc_AssertionError); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #endif } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/util.pyx":441 * for datum in data: * assert isinstance(datum, Key) * self.data = data # <<<<<<<<<<<<<< * else: * raise ValueError, "specify either shape or data" */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__data, __pyx_v_data) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } /*else*/ { /* "ga4py/gain/util.pyx":443 * self.data = data * else: * raise ValueError, "specify either shape or data" # <<<<<<<<<<<<<< * self.T = T * self.TT = TT */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_18), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L3:; /* "ga4py/gain/util.pyx":444 * else: * raise ValueError, "specify either shape or data" * self.T = T # <<<<<<<<<<<<<< * self.TT = TT * if fixed is None: */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__T, __pyx_v_T) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":445 * raise ValueError, "specify either shape or data" * self.T = T * self.TT = TT # <<<<<<<<<<<<<< * if fixed is None: * self.fixed = [] */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__TT, __pyx_v_TT) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":446 * self.T = T * self.TT = TT * if fixed is None: # <<<<<<<<<<<<<< * self.fixed = [] * else: */ __pyx_t_3 = (__pyx_v_fixed == Py_None); __pyx_t_1 = (__pyx_t_3 != 0); if (__pyx_t_1) { /* "ga4py/gain/util.pyx":447 * self.TT = TT * if fixed is None: * self.fixed = [] # <<<<<<<<<<<<<< * else: * self.fixed = fixed */ __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__fixed, ((PyObject *)__pyx_t_4)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; goto __pyx_L8; } /*else*/ { /* "ga4py/gain/util.pyx":449 * self.fixed = [] * else: * self.fixed = fixed # <<<<<<<<<<<<<< * * def __eq__(self, other): */ if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s__fixed, __pyx_v_fixed) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L8:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_11); __Pyx_XDECREF(__pyx_t_12); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_datum); __Pyx_XDECREF(__pyx_v_i); __Pyx_XDECREF(__pyx_v_x); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_3__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_3__eq__ = {__Pyx_NAMESTR("__eq__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_3__eq__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_3__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_other = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__other,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__other)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__eq__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_other = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.MasterKey.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_2__eq__(__pyx_self, __pyx_v_self, __pyx_v_other); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":451 * self.fixed = fixed * * def __eq__(self, other): # <<<<<<<<<<<<<< * try: * return (self.data == other.data) and (self.fixed == other.fixed) */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_2__eq__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; int __pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__eq__", 0); __Pyx_TraceCall("__eq__", __pyx_f[0], 451); /* "ga4py/gain/util.pyx":452 * * def __eq__(self, other): * try: # <<<<<<<<<<<<<< * return (self.data == other.data) and (self.fixed == other.fixed) * except AttributeError: */ { __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { /* "ga4py/gain/util.pyx":453 * def __eq__(self, other): * try: * return (self.data == other.data) and (self.fixed == other.fixed) # <<<<<<<<<<<<<< * except AttributeError: * return False */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__data); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s__data); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L3_error;} if (__pyx_t_7) { __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__fixed); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s__fixed); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __pyx_t_8; __pyx_t_8 = 0; } else { __pyx_t_4 = __pyx_t_6; __pyx_t_6 = 0; } __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L7_try_return; } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L10_try_end; __pyx_L7_try_return:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L0; __pyx_L3_error:; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/util.pyx":454 * try: * return (self.data == other.data) and (self.fixed == other.fixed) * except AttributeError: # <<<<<<<<<<<<<< * return False * */ __pyx_t_9 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError); if (__pyx_t_9) { __Pyx_AddTraceback("ga4py.gain.util.MasterKey.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_8); /* "ga4py/gain/util.pyx":455 * return (self.data == other.data) and (self.fixed == other.fixed) * except AttributeError: * return False # <<<<<<<<<<<<<< * * def __iter__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_5 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_r = __pyx_t_5; __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L6_except_return; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L4_exception_handled; } __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L1_error; __pyx_L6_except_return:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L0; __pyx_L4_exception_handled:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); __pyx_L10_try_end:; } __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_5__iter__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_5__iter__ = {__Pyx_NAMESTR("__iter__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_5__iter__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_5__iter__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_4__iter__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":457 * return False * * def __iter__(self): # <<<<<<<<<<<<<< * return iter(self.data) * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_4__iter__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__iter__", 0); __Pyx_TraceCall("__iter__", __pyx_f[0], 457); /* "ga4py/gain/util.pyx":458 * * def __iter__(self): * return iter(self.data) # <<<<<<<<<<<<<< * * def __str__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__data); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_7__str__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_7__str__ = {__Pyx_NAMESTR("__str__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_7__str__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_7__str__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_6__str__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":460 * return iter(self.data) * * def __str__(self): # <<<<<<<<<<<<<< * return str(self.data) * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_6__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__str__", 0); __Pyx_TraceCall("__str__", __pyx_f[0], 460); /* "ga4py/gain/util.pyx":461 * * def __str__(self): * return str(self.data) # <<<<<<<<<<<<<< * * def __repr__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__data); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_9__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_9__repr__ = {__Pyx_NAMESTR("__repr__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_9__repr__, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_9__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_8__repr__(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":463 * return str(self.data) * * def __repr__(self): # <<<<<<<<<<<<<< * return repr(self.data) * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_8__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__repr__", 0); __Pyx_TraceCall("__repr__", __pyx_f[0], 463); /* "ga4py/gain/util.pyx":464 * * def __repr__(self): * return repr(self.data) # <<<<<<<<<<<<<< * * def _count_instances(self, *args): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__data); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Repr(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_11_count_instances(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_9MasterKey_10_count_instances[] = "Return the number of instances of the given type."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_11_count_instances = {__Pyx_NAMESTR("_count_instances"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_11_count_instances, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_9MasterKey_10_count_instances)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_11_count_instances(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_args = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_count_instances (wrapper)", 0); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "_count_instances") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_count_instances", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_AddTraceback("ga4py.gain.util.MasterKey._count_instances", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_10_count_instances(__pyx_self, __pyx_v_self, __pyx_v_args); __Pyx_XDECREF(__pyx_v_args); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":466 * return repr(self.data) * * def _count_instances(self, *args): # <<<<<<<<<<<<<< * """Return the number of instances of the given type.""" * return len(self._get_instances(args)) */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_10_count_instances(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_args) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; Py_ssize_t __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_count_instances", 0); __Pyx_TraceCall("_count_instances", __pyx_f[0], 466); /* "ga4py/gain/util.pyx":468 * def _count_instances(self, *args): * """Return the number of instances of the given type.""" * return len(self._get_instances(args)) # <<<<<<<<<<<<<< * * def _get_instances(self, *args): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___get_instances); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_v_args)); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_args)); __Pyx_GIVEREF(((PyObject *)__pyx_v_args)); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_4 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.util.MasterKey._count_instances", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_13_get_instances(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_13_get_instances = {__Pyx_NAMESTR("_get_instances"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_13_get_instances, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_13_get_instances(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_args = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_instances (wrapper)", 0); if (PyTuple_GET_SIZE(__pyx_args) > 1) { __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); if (unlikely(!__pyx_v_args)) { __Pyx_RefNannyFinishContext(); return NULL; } __Pyx_GOTREF(__pyx_v_args); } else { __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); } { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { default: case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "_get_instances") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_self = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("_get_instances", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; __Pyx_AddTraceback("ga4py.gain.util.MasterKey._get_instances", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_12_get_instances(__pyx_self, __pyx_v_self, __pyx_v_args); __Pyx_XDECREF(__pyx_v_args); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":470 * return len(self._get_instances(args)) * * def _get_instances(self, *args): # <<<<<<<<<<<<<< * return [item for item in self.data if isinstance(item, args)] * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_12_get_instances(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_args) { PyObject *__pyx_v_item = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; Py_ssize_t __pyx_t_4; PyObject *(*__pyx_t_5)(PyObject *); int __pyx_t_6; int __pyx_t_7; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_instances", 0); __Pyx_TraceCall("_get_instances", __pyx_f[0], 470); /* "ga4py/gain/util.pyx":471 * * def _get_instances(self, *args): * return [item for item in self.data if isinstance(item, args)] # <<<<<<<<<<<<<< * * def _get_origins_within_data(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__data); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_3)) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_3)) { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_2 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_2)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_2); } __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = PyObject_IsInstance(__pyx_v_item, ((PyObject *)__pyx_v_args)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = (__pyx_t_6 != 0); if (__pyx_t_7) { if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_v_item))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } __pyx_L5:; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = ((PyObject *)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.util.MasterKey._get_instances", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_item); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_15_get_origins_within_data(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_9MasterKey_14_get_origins_within_data[] = "Return list of keys which have their origin set."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_15_get_origins_within_data = {__Pyx_NAMESTR("_get_origins_within_data"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_15_get_origins_within_data, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_9MasterKey_14_get_origins_within_data)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_15_get_origins_within_data(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_origins_within_data (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_14_get_origins_within_data(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":473 * return [item for item in self.data if isinstance(item, args)] * * def _get_origins_within_data(self): # <<<<<<<<<<<<<< * """Return list of keys which have their origin set.""" * return [item for item in self.data if item.origin is not None] */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_14_get_origins_within_data(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_item = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; Py_ssize_t __pyx_t_4; PyObject *(*__pyx_t_5)(PyObject *); int __pyx_t_6; int __pyx_t_7; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_get_origins_within_data", 0); __Pyx_TraceCall("_get_origins_within_data", __pyx_f[0], 473); /* "ga4py/gain/util.pyx":475 * def _get_origins_within_data(self): * """Return list of keys which have their origin set.""" * return [item for item in self.data if item.origin is not None] # <<<<<<<<<<<<<< * * def get_origin(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__data); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_3)) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_3)) { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_2 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_2)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_2); } __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__origin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = (__pyx_t_2 != Py_None); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_7 = (__pyx_t_6 != 0); if (__pyx_t_7) { if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_v_item))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } __pyx_L5:; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = ((PyObject *)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.util.MasterKey._get_origins_within_data", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_item); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_17get_origin(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_9MasterKey_16get_origin[] = "Return current list of FixedKey and RangeKey instances.\n\n The returned list is in the current (possibly transposed) order.\n\n See Also\n --------\n get_sorted_origin() : sorts the list by 'origin' property\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_17get_origin = {__Pyx_NAMESTR("get_origin"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_17get_origin, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_9MasterKey_16get_origin)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_17get_origin(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_origin (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_16get_origin(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":477 * return [item for item in self.data if item.origin is not None] * * def get_origin(self): # <<<<<<<<<<<<<< * """Return current list of FixedKey and RangeKey instances. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_16get_origin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_origins = NULL; PyObject *__pyx_v_result = NULL; PyObject *__pyx_v_fixed = NULL; PyObject *__pyx_v_iter_origins = NULL; PyObject *__pyx_v_i = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; Py_ssize_t __pyx_t_3; Py_ssize_t __pyx_t_4; PyObject *(*__pyx_t_5)(PyObject *); int __pyx_t_6; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_origin", 0); __Pyx_TraceCall("get_origin", __pyx_f[0], 477); /* "ga4py/gain/util.pyx":487 * * """ * origins = self._get_origins_within_data() # <<<<<<<<<<<<<< * result = [None]*(len(self.fixed)+len(origins)) * for fixed in self.fixed: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_19); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_origins = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":488 * """ * origins = self._get_origins_within_data() * result = [None]*(len(self.fixed)+len(origins)) # <<<<<<<<<<<<<< * for fixed in self.fixed: * result[fixed.origin] = fixed */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__fixed); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = PyObject_Length(__pyx_v_origins); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = PyList_New(1 * (((__pyx_t_3 + __pyx_t_4)<0) ? 0:(__pyx_t_3 + __pyx_t_4))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (__pyx_t_3 + __pyx_t_4); __pyx_temp++) { __Pyx_INCREF(Py_None); PyList_SET_ITEM(__pyx_t_2, __pyx_temp, Py_None); __Pyx_GIVEREF(Py_None); } } __pyx_v_result = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":489 * origins = self._get_origins_within_data() * result = [None]*(len(self.fixed)+len(origins)) * for fixed in self.fixed: # <<<<<<<<<<<<<< * result[fixed.origin] = fixed * iter_origins = iter(origins) */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__fixed); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_1)) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_1)) { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_2 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_2)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_2); } __Pyx_XDECREF_SET(__pyx_v_fixed, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":490 * result = [None]*(len(self.fixed)+len(origins)) * for fixed in self.fixed: * result[fixed.origin] = fixed # <<<<<<<<<<<<<< * iter_origins = iter(origins) * for i in range(len(result)): */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_fixed, __pyx_n_s__origin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(((PyObject *)__pyx_v_result), __pyx_t_2, __pyx_v_fixed) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":491 * for fixed in self.fixed: * result[fixed.origin] = fixed * iter_origins = iter(origins) # <<<<<<<<<<<<<< * for i in range(len(result)): * if result[i] is None: */ __pyx_t_1 = PyObject_GetIter(__pyx_v_origins); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_iter_origins = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":492 * result[fixed.origin] = fixed * iter_origins = iter(origins) * for i in range(len(result)): # <<<<<<<<<<<<<< * if result[i] is None: * result[i] = iter_origins.next() */ __pyx_t_4 = PyList_GET_SIZE(((PyObject *)__pyx_v_result)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_2)) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_2)) { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_1 = __pyx_t_5(__pyx_t_2); if (unlikely(!__pyx_t_1)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_1); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":493 * iter_origins = iter(origins) * for i in range(len(result)): * if result[i] is None: # <<<<<<<<<<<<<< * result[i] = iter_origins.next() * return result */ __pyx_t_1 = PyObject_GetItem(((PyObject *)__pyx_v_result), __pyx_v_i); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = (__pyx_t_1 == Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_7 = (__pyx_t_6 != 0); if (__pyx_t_7) { /* "ga4py/gain/util.pyx":494 * for i in range(len(result)): * if result[i] is None: * result[i] = iter_origins.next() # <<<<<<<<<<<<<< * return result * */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_iter_origins, __pyx_n_s__next); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyObject_SetItem(((PyObject *)__pyx_v_result), __pyx_v_i, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L7; } __pyx_L7:; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":495 * if result[i] is None: * result[i] = iter_origins.next() * return result # <<<<<<<<<<<<<< * * def get_sorted_origin(self): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_result)); __pyx_r = ((PyObject *)__pyx_v_result); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.get_origin", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_origins); __Pyx_XDECREF(__pyx_v_result); __Pyx_XDECREF(__pyx_v_fixed); __Pyx_XDECREF(__pyx_v_iter_origins); __Pyx_XDECREF(__pyx_v_i); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_19get_sorted_origin(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_9MasterKey_18get_sorted_origin[] = "Return sorted list of FixedKey and RangeKey instances.\n\n The returned list is in the current (possibly transposed) order.\n\n See Also\n --------\n get_origin() : does not sort the list by 'origin' property\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_19get_sorted_origin = {__Pyx_NAMESTR("get_sorted_origin"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_19get_sorted_origin, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_9MasterKey_18get_sorted_origin)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_19get_sorted_origin(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_sorted_origin (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_18get_sorted_origin(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":497 * return result * * def get_sorted_origin(self): # <<<<<<<<<<<<<< * """Return sorted list of FixedKey and RangeKey instances. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_18get_sorted_origin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_origins = NULL; PyObject *__pyx_v_result = NULL; PyObject *__pyx_v_fixed = NULL; PyObject *__pyx_v_datum = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; Py_ssize_t __pyx_t_3; Py_ssize_t __pyx_t_4; PyObject *(*__pyx_t_5)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_sorted_origin", 0); __Pyx_TraceCall("get_sorted_origin", __pyx_f[0], 497); /* "ga4py/gain/util.pyx":507 * * """ * origins = self._get_origins_within_data() # <<<<<<<<<<<<<< * result = [None]*(len(self.fixed)+len(origins)) * for fixed in self.fixed: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_19); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_origins = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":508 * """ * origins = self._get_origins_within_data() * result = [None]*(len(self.fixed)+len(origins)) # <<<<<<<<<<<<<< * for fixed in self.fixed: * result[fixed.origin] = fixed */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__fixed); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = PyObject_Length(__pyx_v_origins); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = PyList_New(1 * (((__pyx_t_3 + __pyx_t_4)<0) ? 0:(__pyx_t_3 + __pyx_t_4))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (__pyx_t_3 + __pyx_t_4); __pyx_temp++) { __Pyx_INCREF(Py_None); PyList_SET_ITEM(__pyx_t_2, __pyx_temp, Py_None); __Pyx_GIVEREF(Py_None); } } __pyx_v_result = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":509 * origins = self._get_origins_within_data() * result = [None]*(len(self.fixed)+len(origins)) * for fixed in self.fixed: # <<<<<<<<<<<<<< * result[fixed.origin] = fixed * for datum in origins: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__fixed); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_1)) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_1)) { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_2 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_2)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_2); } __Pyx_XDECREF_SET(__pyx_v_fixed, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":510 * result = [None]*(len(self.fixed)+len(origins)) * for fixed in self.fixed: * result[fixed.origin] = fixed # <<<<<<<<<<<<<< * for datum in origins: * result[datum.origin] = datum */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_fixed, __pyx_n_s__origin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(((PyObject *)__pyx_v_result), __pyx_t_2, __pyx_v_fixed) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":511 * for fixed in self.fixed: * result[fixed.origin] = fixed * for datum in origins: # <<<<<<<<<<<<<< * result[datum.origin] = datum * return result */ if (PyList_CheckExact(__pyx_v_origins) || PyTuple_CheckExact(__pyx_v_origins)) { __pyx_t_1 = __pyx_v_origins; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_origins); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; } for (;;) { if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_1)) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_1)) { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_2 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_2)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_2); } __Pyx_XDECREF_SET(__pyx_v_datum, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":512 * result[fixed.origin] = fixed * for datum in origins: * result[datum.origin] = datum # <<<<<<<<<<<<<< * return result * */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_datum, __pyx_n_s__origin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(((PyObject *)__pyx_v_result), __pyx_t_2, __pyx_v_datum) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":513 * for datum in origins: * result[datum.origin] = datum * return result # <<<<<<<<<<<<<< * * def get_original_ndim(self): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_result)); __pyx_r = ((PyObject *)__pyx_v_result); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.get_sorted_origin", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_origins); __Pyx_XDECREF(__pyx_v_result); __Pyx_XDECREF(__pyx_v_fixed); __Pyx_XDECREF(__pyx_v_datum); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_21get_original_ndim(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_21get_original_ndim = {__Pyx_NAMESTR("get_original_ndim"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_21get_original_ndim, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_21get_original_ndim(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_original_ndim (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_20get_original_ndim(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":515 * return result * * def get_original_ndim(self): # <<<<<<<<<<<<<< * return len(self.get_origin()) * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_20get_original_ndim(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; Py_ssize_t __pyx_t_3; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_original_ndim", 0); __Pyx_TraceCall("get_original_ndim", __pyx_f[0], 515); /* "ga4py/gain/util.pyx":516 * * def get_original_ndim(self): * return len(self.get_origin()) # <<<<<<<<<<<<<< * * def get_shape(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__get_origin); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.get_original_ndim", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_23get_shape(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_23get_shape = {__Pyx_NAMESTR("get_shape"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_23get_shape, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_23get_shape(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_shape (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_22get_shape(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":518 * return len(self.get_origin()) * * def get_shape(self): # <<<<<<<<<<<<<< * return tuple( * [item.size for item in self._get_instances(NoneKey,RangeKey)]) */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_22get_shape(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_item = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; Py_ssize_t __pyx_t_6; PyObject *(*__pyx_t_7)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_shape", 0); __Pyx_TraceCall("get_shape", __pyx_f[0], 518); /* "ga4py/gain/util.pyx":519 * * def get_shape(self): * return tuple( # <<<<<<<<<<<<<< * [item.size for item in self._get_instances(NoneKey,RangeKey)]) * shape = property(get_shape) */ __Pyx_XDECREF(__pyx_r); /* "ga4py/gain/util.pyx":520 * def get_shape(self): * return tuple( * [item.size for item in self._get_instances(NoneKey,RangeKey)]) # <<<<<<<<<<<<<< * shape = property(get_shape) * */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___get_instances); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__NoneKey); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__RangeKey); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; if (PyList_CheckExact(__pyx_t_4) || PyTuple_CheckExact(__pyx_t_4)) { __pyx_t_5 = __pyx_t_4; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0; __pyx_t_7 = NULL; } else { __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext; } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; for (;;) { if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_5)) { if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_4 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_5)) { if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_5)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_4 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_4 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_4)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_4); } __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__size); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = ((PyObject *)PyList_AsTuple(((PyObject*)__pyx_t_1))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = ((PyObject *)__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.get_shape", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_item); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_25get_size(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_25get_size = {__Pyx_NAMESTR("get_size"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_25get_size, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_25get_size(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_size (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_24get_size(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_8get_size_lambda1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_8get_size_lambda1 = {__Pyx_NAMESTR("lambda1"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_8get_size_lambda1, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_8get_size_lambda1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_x = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("lambda1 (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("lambda1", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "lambda1") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_x = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("lambda1", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.MasterKey.get_size.lambda1", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_lambda_funcdef_lambda1(__pyx_self, __pyx_v_x, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":524 * * def get_size(self): * return reduce(lambda x,y: x*y, self.shape, 1) # <<<<<<<<<<<<<< * size = property(get_size) * */ static PyObject *__pyx_lambda_funcdef_lambda1(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("lambda1", 0); __Pyx_TraceCall("lambda1", __pyx_f[0], 524); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyNumber_Multiply(__pyx_v_x, __pyx_v_y); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.get_size.lambda1", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":523 * shape = property(get_shape) * * def get_size(self): # <<<<<<<<<<<<<< * return reduce(lambda x,y: x*y, self.shape, 1) * size = property(get_size) */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_24get_size(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_size", 0); __Pyx_TraceCall("get_size", __pyx_f[0], 523); /* "ga4py/gain/util.pyx":524 * * def get_size(self): * return reduce(lambda x,y: x*y, self.shape, 1) # <<<<<<<<<<<<<< * size = property(get_size) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_8get_size_lambda1, 0, __pyx_n_s_20, NULL, __pyx_n_s_21, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_INCREF(__pyx_int_1); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_int_1); __Pyx_GIVEREF(__pyx_int_1); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_reduce, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.get_size", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_27get_ndim(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_27get_ndim = {__Pyx_NAMESTR("get_ndim"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_27get_ndim, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_27get_ndim(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_ndim (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_26get_ndim(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":527 * size = property(get_size) * * def get_ndim(self): # <<<<<<<<<<<<<< * return self._count_instances(NoneKey,RangeKey) * ndim = property(get_ndim) */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_26get_ndim(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_ndim", 0); __Pyx_TraceCall("get_ndim", __pyx_f[0], 527); /* "ga4py/gain/util.pyx":528 * * def get_ndim(self): * return self._count_instances(NoneKey,RangeKey) # <<<<<<<<<<<<<< * ndim = property(get_ndim) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s___count_instances); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__NoneKey); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__RangeKey); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.get_ndim", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_29pyobj(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_29pyobj = {__Pyx_NAMESTR("pyobj"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_29pyobj, METH_O, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_29pyobj(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pyobj (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_28pyobj(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":531 * ndim = property(get_ndim) * * def pyobj(self): # <<<<<<<<<<<<<< * return [x.pyobj() for x in self.data] * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_28pyobj(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_x = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; Py_ssize_t __pyx_t_4; PyObject *(*__pyx_t_5)(PyObject *); PyObject *__pyx_t_6 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("pyobj", 0); __Pyx_TraceCall("pyobj", __pyx_f[0], 531); /* "ga4py/gain/util.pyx":532 * * def pyobj(self): * return [x.pyobj() for x in self.data] # <<<<<<<<<<<<<< * * def replace_ellipsis(self, key): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__data); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_3)) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_3)) { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_2 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_2)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_2); } __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s__pyobj); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_6))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = ((PyObject *)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_x); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_31replace_ellipsis(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_9MasterKey_30replace_ellipsis[] = "Given key, replace one or more Ellipsis based on this MasterKey.\n\n Assumes key is a list, and if not, makes it a list.\n Raises IndexError if the key is too large.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_31replace_ellipsis = {__Pyx_NAMESTR("replace_ellipsis"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_31replace_ellipsis, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_9MasterKey_30replace_ellipsis)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_31replace_ellipsis(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_key = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("replace_ellipsis (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("replace_ellipsis", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "replace_ellipsis") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_key = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("replace_ellipsis", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.MasterKey.replace_ellipsis", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_30replace_ellipsis(__pyx_self, __pyx_v_self, __pyx_v_key); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":534 * return [x.pyobj() for x in self.data] * * def replace_ellipsis(self, key): # <<<<<<<<<<<<<< * """Given key, replace one or more Ellipsis based on this MasterKey. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_30replace_ellipsis(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) { PyObject *__pyx_v_ndim = NULL; PyObject *__pyx_v_count_real_keys = NULL; PyObject *__pyx_v_ellipsis_index = NULL; PyObject *__pyx_v_ellipsis_count = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; Py_ssize_t __pyx_t_4; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; int __pyx_t_7; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("replace_ellipsis", 0); __Pyx_TraceCall("replace_ellipsis", __pyx_f[0], 534); __Pyx_INCREF(__pyx_v_key); /* "ga4py/gain/util.pyx":541 * * """ * if type(key) != type([]): # <<<<<<<<<<<<<< * key = [key] * ndim = self.ndim */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_key)), ((PyObject *)Py_TYPE(((PyObject *)__pyx_t_1))), Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_3) { /* "ga4py/gain/util.pyx":542 * """ * if type(key) != type([]): * key = [key] # <<<<<<<<<<<<<< * ndim = self.ndim * count_real_keys = len(key)-key.count(None)-key.count(Ellipsis) */ __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_key); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_v_key); __Pyx_GIVEREF(__pyx_v_key); __Pyx_DECREF_SET(__pyx_v_key, ((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/util.pyx":543 * if type(key) != type([]): * key = [key] * ndim = self.ndim # <<<<<<<<<<<<<< * count_real_keys = len(key)-key.count(None)-key.count(Ellipsis) * if count_real_keys > ndim: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__ndim); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_ndim = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":544 * key = [key] * ndim = self.ndim * count_real_keys = len(key)-key.count(None)-key.count(Ellipsis) # <<<<<<<<<<<<<< * if count_real_keys > ndim: * raise IndexError, "invalid index %s[%s]" % (self,key) */ __pyx_t_4 = PyObject_Length(__pyx_v_key); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s__count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_k_tuple_22), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyNumber_Subtract(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s__count); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_builtin_Ellipsis); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_Ellipsis); __Pyx_GIVEREF(__pyx_builtin_Ellipsis); __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_count_real_keys = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":545 * ndim = self.ndim * count_real_keys = len(key)-key.count(None)-key.count(Ellipsis) * if count_real_keys > ndim: # <<<<<<<<<<<<<< * raise IndexError, "invalid index %s[%s]" % (self,key) * # implicit Ellipsis at end of key if one wasn't given */ __pyx_t_2 = PyObject_RichCompare(__pyx_v_count_real_keys, __pyx_v_ndim, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_3) { /* "ga4py/gain/util.pyx":546 * count_real_keys = len(key)-key.count(None)-key.count(Ellipsis) * if count_real_keys > ndim: * raise IndexError, "invalid index %s[%s]" % (self,key) # <<<<<<<<<<<<<< * # implicit Ellipsis at end of key if one wasn't given * if Ellipsis not in key: */ __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); __Pyx_GIVEREF(__pyx_v_self); __Pyx_INCREF(__pyx_v_key); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_key); __Pyx_GIVEREF(__pyx_v_key); __pyx_t_6 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_23), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_6)); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_t_6), 0, 0); __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/util.pyx":548 * raise IndexError, "invalid index %s[%s]" % (self,key) * # implicit Ellipsis at end of key if one wasn't given * if Ellipsis not in key: # <<<<<<<<<<<<<< * key.append(Ellipsis) * # first Ellipsis replaced with as many slice(None,None,None) as needed */ __pyx_t_3 = (__Pyx_PySequence_Contains(__pyx_builtin_Ellipsis, __pyx_v_key, Py_NE)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = (__pyx_t_3 != 0); if (__pyx_t_7) { /* "ga4py/gain/util.pyx":549 * # implicit Ellipsis at end of key if one wasn't given * if Ellipsis not in key: * key.append(Ellipsis) # <<<<<<<<<<<<<< * # first Ellipsis replaced with as many slice(None,None,None) as needed * ellipsis_index = key.index(Ellipsis) */ __pyx_t_6 = __Pyx_PyObject_Append(__pyx_v_key, __pyx_builtin_Ellipsis); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L5; } __pyx_L5:; /* "ga4py/gain/util.pyx":551 * key.append(Ellipsis) * # first Ellipsis replaced with as many slice(None,None,None) as needed * ellipsis_index = key.index(Ellipsis) # <<<<<<<<<<<<<< * ellipsis_count = key.count(Ellipsis) * key = (key[:ellipsis_index] */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s__index); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 551; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 551; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_builtin_Ellipsis); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_Ellipsis); __Pyx_GIVEREF(__pyx_builtin_Ellipsis); __pyx_t_1 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 551; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_ellipsis_index = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":552 * # first Ellipsis replaced with as many slice(None,None,None) as needed * ellipsis_index = key.index(Ellipsis) * ellipsis_count = key.count(Ellipsis) # <<<<<<<<<<<<<< * key = (key[:ellipsis_index] * + ([slice(None,None,None)] * (ndim-count_real_keys)) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s__count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_builtin_Ellipsis); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_Ellipsis); __Pyx_GIVEREF(__pyx_builtin_Ellipsis); __pyx_t_6 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_ellipsis_count = __pyx_t_6; __pyx_t_6 = 0; /* "ga4py/gain/util.pyx":553 * ellipsis_index = key.index(Ellipsis) * ellipsis_count = key.count(Ellipsis) * key = (key[:ellipsis_index] # <<<<<<<<<<<<<< * + ([slice(None,None,None)] * (ndim-count_real_keys)) * + key[ellipsis_index+1:]) */ __pyx_t_6 = __Pyx_PyObject_GetSlice(__pyx_v_key, 0, 0, NULL, &__pyx_v_ellipsis_index, NULL, 0, 0, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); /* "ga4py/gain/util.pyx":554 * ellipsis_count = key.count(Ellipsis) * key = (key[:ellipsis_index] * + ([slice(None,None,None)] * (ndim-count_real_keys)) # <<<<<<<<<<<<<< * + key[ellipsis_index+1:]) * # remove all remaining Ellipsis from key */ __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_k_tuple_24), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_Subtract(__pyx_v_ndim, __pyx_v_count_real_keys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); { PyObject* __pyx_temp = PyNumber_InPlaceMultiply(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_temp)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_temp); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = __pyx_temp; } __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyNumber_Add(__pyx_t_6, ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; /* "ga4py/gain/util.pyx":555 * key = (key[:ellipsis_index] * + ([slice(None,None,None)] * (ndim-count_real_keys)) * + key[ellipsis_index+1:]) # <<<<<<<<<<<<<< * # remove all remaining Ellipsis from key * ellipsis_count -= 1 */ __pyx_t_5 = PyNumber_Add(__pyx_v_ellipsis_index, __pyx_int_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetSlice(__pyx_v_key, 0, 0, &__pyx_t_5, NULL, NULL, 0, 0, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/util.pyx":557 * + key[ellipsis_index+1:]) * # remove all remaining Ellipsis from key * ellipsis_count -= 1 # <<<<<<<<<<<<<< * while ellipsis_count > 0: * key.remove(Ellipsis) */ __pyx_t_5 = PyNumber_InPlaceSubtract(__pyx_v_ellipsis_count, __pyx_int_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF_SET(__pyx_v_ellipsis_count, __pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/util.pyx":558 * # remove all remaining Ellipsis from key * ellipsis_count -= 1 * while ellipsis_count > 0: # <<<<<<<<<<<<<< * key.remove(Ellipsis) * ellipsis_count -= 1 */ while (1) { __pyx_t_5 = PyObject_RichCompare(__pyx_v_ellipsis_count, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (!__pyx_t_7) break; /* "ga4py/gain/util.pyx":559 * ellipsis_count -= 1 * while ellipsis_count > 0: * key.remove(Ellipsis) # <<<<<<<<<<<<<< * ellipsis_count -= 1 * return key */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_key, __pyx_n_s__remove); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_builtin_Ellipsis); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_builtin_Ellipsis); __Pyx_GIVEREF(__pyx_builtin_Ellipsis); __pyx_t_1 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":560 * while ellipsis_count > 0: * key.remove(Ellipsis) * ellipsis_count -= 1 # <<<<<<<<<<<<<< * return key * */ __pyx_t_1 = PyNumber_InPlaceSubtract(__pyx_v_ellipsis_count, __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_ellipsis_count, __pyx_t_1); __pyx_t_1 = 0; } /* "ga4py/gain/util.pyx":561 * key.remove(Ellipsis) * ellipsis_count -= 1 * return key # <<<<<<<<<<<<<< * * def __getitem__(self, key): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_key); __pyx_r = __pyx_v_key; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.replace_ellipsis", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_ndim); __Pyx_XDECREF(__pyx_v_count_real_keys); __Pyx_XDECREF(__pyx_v_ellipsis_index); __Pyx_XDECREF(__pyx_v_ellipsis_count); __Pyx_XDECREF(__pyx_v_key); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_33__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_9MasterKey_32__getitem__[] = "Slices this MasterKey and returns a new MasterKey."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_33__getitem__ = {__Pyx_NAMESTR("__getitem__"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_33__getitem__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_9MasterKey_32__getitem__)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_33__getitem__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_key = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__key,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__key)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__getitem__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_key = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.MasterKey.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_32__getitem__(__pyx_self, __pyx_v_self, __pyx_v_key); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":563 * return key * * def __getitem__(self, key): # <<<<<<<<<<<<<< * """Slices this MasterKey and returns a new MasterKey.""" * key = self.replace_ellipsis(key) */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_32__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_key) { PyObject *__pyx_v_new_data = NULL; PyObject *__pyx_v_new_fixed = NULL; PyObject *__pyx_v_key_iter = NULL; PyObject *__pyx_v_item = NULL; PyObject *__pyx_v_next_key = NULL; PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; Py_ssize_t __pyx_t_4; PyObject *(*__pyx_t_5)(PyObject *); PyObject *__pyx_t_6 = NULL; int __pyx_t_7; int __pyx_t_8; int __pyx_t_9; int __pyx_t_10; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__getitem__", 0); __Pyx_TraceCall("__getitem__", __pyx_f[0], 563); __Pyx_INCREF(__pyx_v_key); /* "ga4py/gain/util.pyx":565 * def __getitem__(self, key): * """Slices this MasterKey and returns a new MasterKey.""" * key = self.replace_ellipsis(key) # <<<<<<<<<<<<<< * new_data = [] * new_fixed = self.fixed[:] # copy fixed dimensions */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__replace_ellipsis); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_key); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_key); __Pyx_GIVEREF(__pyx_v_key); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":566 * """Slices this MasterKey and returns a new MasterKey.""" * key = self.replace_ellipsis(key) * new_data = [] # <<<<<<<<<<<<<< * new_fixed = self.fixed[:] # copy fixed dimensions * key_iter = iter(key) */ __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_v_new_data = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":567 * key = self.replace_ellipsis(key) * new_data = [] * new_fixed = self.fixed[:] # copy fixed dimensions # <<<<<<<<<<<<<< * key_iter = iter(key) * for item in self.data: */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__fixed); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_t_3, 0, 0, NULL, NULL, &__pyx_k_slice_25, 0, 0, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_new_fixed = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":568 * new_data = [] * new_fixed = self.fixed[:] # copy fixed dimensions * key_iter = iter(key) # <<<<<<<<<<<<<< * for item in self.data: * if isinstance(item, (RangeKey,NoneKey)): */ __pyx_t_2 = PyObject_GetIter(__pyx_v_key); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_key_iter = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":569 * new_fixed = self.fixed[:] # copy fixed dimensions * key_iter = iter(key) * for item in self.data: # <<<<<<<<<<<<<< * if isinstance(item, (RangeKey,NoneKey)): * next_key = key_iter.next() */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__data); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_3)) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_3)) { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_2 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_2)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_2); } __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":570 * key_iter = iter(key) * for item in self.data: * if isinstance(item, (RangeKey,NoneKey)): # <<<<<<<<<<<<<< * next_key = key_iter.next() * while next_key is None: */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__RangeKey); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__NoneKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_7 = PyObject_IsInstance(__pyx_v_item, ((PyObject *)__pyx_t_6)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __pyx_t_8 = (__pyx_t_7 != 0); if (__pyx_t_8) { /* "ga4py/gain/util.pyx":571 * for item in self.data: * if isinstance(item, (RangeKey,NoneKey)): * next_key = key_iter.next() # <<<<<<<<<<<<<< * while next_key is None: * new_data.append(NoneKey()) */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_iter, __pyx_n_s__next); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF_SET(__pyx_v_next_key, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":572 * if isinstance(item, (RangeKey,NoneKey)): * next_key = key_iter.next() * while next_key is None: # <<<<<<<<<<<<<< * new_data.append(NoneKey()) * next_key = key_iter.next() */ while (1) { __pyx_t_8 = (__pyx_v_next_key == Py_None); __pyx_t_7 = (__pyx_t_8 != 0); if (!__pyx_t_7) break; /* "ga4py/gain/util.pyx":573 * next_key = key_iter.next() * while next_key is None: * new_data.append(NoneKey()) # <<<<<<<<<<<<<< * next_key = key_iter.next() * result = item[next_key] */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__NoneKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_new_data, __pyx_t_6); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/util.pyx":574 * while next_key is None: * new_data.append(NoneKey()) * next_key = key_iter.next() # <<<<<<<<<<<<<< * result = item[next_key] * if isinstance(item, RangeKey) and isinstance(result, FixedKey): */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_key_iter, __pyx_n_s__next); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_next_key, __pyx_t_1); __pyx_t_1 = 0; } /* "ga4py/gain/util.pyx":575 * new_data.append(NoneKey()) * next_key = key_iter.next() * result = item[next_key] # <<<<<<<<<<<<<< * if isinstance(item, RangeKey) and isinstance(result, FixedKey): * # went from range to fixed, add to fixed keys */ __pyx_t_1 = PyObject_GetItem(__pyx_v_item, __pyx_v_next_key); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":576 * next_key = key_iter.next() * result = item[next_key] * if isinstance(item, RangeKey) and isinstance(result, FixedKey): # <<<<<<<<<<<<<< * # went from range to fixed, add to fixed keys * new_fixed.append(result) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__RangeKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyObject_IsInstance(__pyx_v_item, __pyx_t_1); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if ((__pyx_t_7 != 0)) { __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__FixedKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_8 = PyObject_IsInstance(__pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = (__pyx_t_8 != 0); } else { __pyx_t_10 = (__pyx_t_7 != 0); } if (__pyx_t_10) { /* "ga4py/gain/util.pyx":578 * if isinstance(item, RangeKey) and isinstance(result, FixedKey): * # went from range to fixed, add to fixed keys * new_fixed.append(result) # <<<<<<<<<<<<<< * elif result is not None: * new_data.append(result) */ __pyx_t_1 = __Pyx_PyObject_Append(__pyx_v_new_fixed, __pyx_v_result); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L8; } /* "ga4py/gain/util.pyx":579 * # went from range to fixed, add to fixed keys * new_fixed.append(result) * elif result is not None: # <<<<<<<<<<<<<< * new_data.append(result) * elif isinstance(item, FixedKey): */ __pyx_t_10 = (__pyx_v_result != Py_None); __pyx_t_7 = (__pyx_t_10 != 0); if (__pyx_t_7) { /* "ga4py/gain/util.pyx":580 * new_fixed.append(result) * elif result is not None: * new_data.append(result) # <<<<<<<<<<<<<< * elif isinstance(item, FixedKey): * raise TypeError, "FixedKey found in MasterKey" */ __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_new_data, __pyx_v_result); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; goto __pyx_L5; } /* "ga4py/gain/util.pyx":581 * elif result is not None: * new_data.append(result) * elif isinstance(item, FixedKey): # <<<<<<<<<<<<<< * raise TypeError, "FixedKey found in MasterKey" * else: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__FixedKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyObject_IsInstance(__pyx_v_item, __pyx_t_1); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = (__pyx_t_7 != 0); if (__pyx_t_10) { /* "ga4py/gain/util.pyx":582 * new_data.append(result) * elif isinstance(item, FixedKey): * raise TypeError, "FixedKey found in MasterKey" # <<<<<<<<<<<<<< * else: * raise TypeError, "unrecognized item in MasterKey" */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_26), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } /*else*/ { /* "ga4py/gain/util.pyx":584 * raise TypeError, "FixedKey found in MasterKey" * else: * raise TypeError, "unrecognized item in MasterKey" # <<<<<<<<<<<<<< * # there might be some items left in the key_iter * # the only valid items that can remain are None */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_27), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L5:; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":587 * # there might be some items left in the key_iter * # the only valid items that can remain are None * for next_key in key_iter: # <<<<<<<<<<<<<< * assert next_key is None * new_data.append(NoneKey()) */ if (PyList_CheckExact(__pyx_v_key_iter) || PyTuple_CheckExact(__pyx_v_key_iter)) { __pyx_t_3 = __pyx_v_key_iter; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_key_iter); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; } for (;;) { if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_3)) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_3)) { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_1 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_1)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_1); } __Pyx_XDECREF_SET(__pyx_v_next_key, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":588 * # the only valid items that can remain are None * for next_key in key_iter: * assert next_key is None # <<<<<<<<<<<<<< * new_data.append(NoneKey()) * result = MasterKey(None, new_data, new_fixed, self.T, self.TT) */ #ifndef CYTHON_WITHOUT_ASSERTIONS __pyx_t_10 = (__pyx_v_next_key == Py_None); if (unlikely(!(__pyx_t_10 != 0))) { PyErr_SetNone(PyExc_AssertionError); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #endif /* "ga4py/gain/util.pyx":589 * for next_key in key_iter: * assert next_key is None * new_data.append(NoneKey()) # <<<<<<<<<<<<<< * result = MasterKey(None, new_data, new_fixed, self.T, self.TT) * return result */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__NoneKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_new_data, __pyx_t_6); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":590 * assert next_key is None * new_data.append(NoneKey()) * result = MasterKey(None, new_data, new_fixed, self.T, self.TT) # <<<<<<<<<<<<<< * return result * */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__MasterKey); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__T); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__TT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(Py_None); PyTuple_SET_ITEM(__pyx_t_2, 0, Py_None); __Pyx_GIVEREF(Py_None); __Pyx_INCREF(((PyObject *)__pyx_v_new_data)); PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_new_data)); __Pyx_GIVEREF(((PyObject *)__pyx_v_new_data)); __Pyx_INCREF(__pyx_v_new_fixed); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_new_fixed); __Pyx_GIVEREF(__pyx_v_new_fixed); PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_6 = 0; __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":591 * new_data.append(NoneKey()) * result = MasterKey(None, new_data, new_fixed, self.T, self.TT) * return result # <<<<<<<<<<<<<< * * def bound_by_lohi(self, lo, hi): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_result); __pyx_r = __pyx_v_result; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_new_data); __Pyx_XDECREF(__pyx_v_new_fixed); __Pyx_XDECREF(__pyx_v_key_iter); __Pyx_XDECREF(__pyx_v_item); __Pyx_XDECREF(__pyx_v_next_key); __Pyx_XDECREF(__pyx_v_result); __Pyx_XDECREF(__pyx_v_key); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_35bound_by_lohi(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_9MasterKey_34bound_by_lohi[] = "Calculate new MasterKey for the subarray denoted by lo and hi.\n \n returns a list of slice objects representing the piece of the subarray\n that the lo and hi bounds maintain after applying bounds to\n global_slice.\n\n raises IndexError if the lo and hi bounds don't get a piece of the\n subarray\n \n Examples\n --------\n >>> j = MasterKey((10,15,20,25))\n >>> k = j[1:10:2, 10:1:-3, 2, None, 10]\n >>> k.bound_by_lohi([4,4,0,5], [10,9,3,20])\n [RangeKey(5,10,2), RangeKey(7,3,-3)]\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_35bound_by_lohi = {__Pyx_NAMESTR("bound_by_lohi"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_35bound_by_lohi, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_9MasterKey_34bound_by_lohi)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_35bound_by_lohi(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("bound_by_lohi (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("bound_by_lohi", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("bound_by_lohi", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bound_by_lohi") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_self = values[0]; __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("bound_by_lohi", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.MasterKey.bound_by_lohi", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_34bound_by_lohi(__pyx_self, __pyx_v_self, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":593 * return result * * def bound_by_lohi(self, lo, hi): # <<<<<<<<<<<<<< * """Calculate new MasterKey for the subarray denoted by lo and hi. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_34bound_by_lohi(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyObject *__pyx_v_result = NULL; PyObject *__pyx_v_item = NULL; PyObject *__pyx_v_l = NULL; PyObject *__pyx_v_h = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; Py_ssize_t __pyx_t_3; PyObject *(*__pyx_t_4)(PyObject *); PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; int __pyx_t_8; int __pyx_t_9; int __pyx_t_10; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("bound_by_lohi", 0); __Pyx_TraceCall("bound_by_lohi", __pyx_f[0], 593); __Pyx_INCREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); /* "ga4py/gain/util.pyx":611 * * """ * result = [] # <<<<<<<<<<<<<< * lo = [l for l in lo] * hi = [h for h in hi] */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_result = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":612 * """ * result = [] * lo = [l for l in lo] # <<<<<<<<<<<<<< * hi = [h for h in hi] * assert len(lo) == len(hi) == self.get_original_ndim() */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyList_CheckExact(__pyx_v_lo) || PyTuple_CheckExact(__pyx_v_lo)) { __pyx_t_2 = __pyx_v_lo; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_lo); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; } for (;;) { if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) { if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) { if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_5 = __pyx_t_4(__pyx_t_2); if (unlikely(!__pyx_t_5)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_5); } __Pyx_XDECREF_SET(__pyx_v_l, __pyx_t_5); __pyx_t_5 = 0; if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_v_l))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_lo, ((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":613 * result = [] * lo = [l for l in lo] * hi = [h for h in hi] # <<<<<<<<<<<<<< * assert len(lo) == len(hi) == self.get_original_ndim() * # verify fixed dimensions within bounds; raises IndexError otherwise */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyList_CheckExact(__pyx_v_hi) || PyTuple_CheckExact(__pyx_v_hi)) { __pyx_t_2 = __pyx_v_hi; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_hi); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; } for (;;) { if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) { if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) { if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_5 = __pyx_t_4(__pyx_t_2); if (unlikely(!__pyx_t_5)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_5); } __Pyx_XDECREF_SET(__pyx_v_h, __pyx_t_5); __pyx_t_5 = 0; if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_v_h))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_hi, ((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":614 * lo = [l for l in lo] * hi = [h for h in hi] * assert len(lo) == len(hi) == self.get_original_ndim() # <<<<<<<<<<<<<< * # verify fixed dimensions within bounds; raises IndexError otherwise * for item in self.fixed: */ #ifndef CYTHON_WITHOUT_ASSERTIONS __pyx_t_3 = PyObject_Length(__pyx_v_lo); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyObject_Length(__pyx_v_hi); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__Pyx_PyObject_IsTrue(__pyx_t_5)) { __Pyx_DECREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__get_original_ndim); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_5 = PyObject_RichCompare(__pyx_t_2, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_8)) { PyErr_SetNone(PyExc_AssertionError); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #endif /* "ga4py/gain/util.pyx":616 * assert len(lo) == len(hi) == self.get_original_ndim() * # verify fixed dimensions within bounds; raises IndexError otherwise * for item in self.fixed: # <<<<<<<<<<<<<< * item.bound_by_lohi(lo[item.origin], hi[item.origin]) * for item in self.data: */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__fixed); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); if (PyList_CheckExact(__pyx_t_5) || PyTuple_CheckExact(__pyx_t_5)) { __pyx_t_2 = __pyx_t_5; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; for (;;) { if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) { if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) { if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_5 = __pyx_t_4(__pyx_t_2); if (unlikely(!__pyx_t_5)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_5); } __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/util.pyx":617 * # verify fixed dimensions within bounds; raises IndexError otherwise * for item in self.fixed: * item.bound_by_lohi(lo[item.origin], hi[item.origin]) # <<<<<<<<<<<<<< * for item in self.data: * if isinstance(item, RangeKey): */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__bound_by_lohi); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__origin); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyObject_GetItem(__pyx_v_lo, __pyx_t_1); if (!__pyx_t_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__origin); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = PyObject_GetItem(__pyx_v_hi, __pyx_t_1); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":618 * for item in self.fixed: * item.bound_by_lohi(lo[item.origin], hi[item.origin]) * for item in self.data: # <<<<<<<<<<<<<< * if isinstance(item, RangeKey): * result.append( */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__data); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_6 = __pyx_t_2; __Pyx_INCREF(__pyx_t_6); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = Py_TYPE(__pyx_t_6)->tp_iternext; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_6)) { if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_6)) { if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_2 = __pyx_t_4(__pyx_t_6); if (unlikely(!__pyx_t_2)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_2); } __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":619 * item.bound_by_lohi(lo[item.origin], hi[item.origin]) * for item in self.data: * if isinstance(item, RangeKey): # <<<<<<<<<<<<<< * result.append( * item.bound_by_lohi(lo[item.origin], hi[item.origin])) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__RangeKey); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_8 = PyObject_IsInstance(__pyx_v_item, __pyx_t_2); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_9 = (__pyx_t_8 != 0); if (__pyx_t_9) { /* "ga4py/gain/util.pyx":621 * if isinstance(item, RangeKey): * result.append( * item.bound_by_lohi(lo[item.origin], hi[item.origin])) # <<<<<<<<<<<<<< * elif isinstance(item, NoneKey): * pass */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__bound_by_lohi); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__origin); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyObject_GetItem(__pyx_v_lo, __pyx_t_1); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__origin); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyObject_GetItem(__pyx_v_hi, __pyx_t_1); if (!__pyx_t_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); __pyx_t_5 = 0; __pyx_t_7 = 0; __pyx_t_7 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_7); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L11; } /* "ga4py/gain/util.pyx":622 * result.append( * item.bound_by_lohi(lo[item.origin], hi[item.origin])) * elif isinstance(item, NoneKey): # <<<<<<<<<<<<<< * pass * elif isinstance(item, FixedKey): */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__NoneKey); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = PyObject_IsInstance(__pyx_v_item, __pyx_t_7); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = (__pyx_t_9 != 0); if (__pyx_t_8) { goto __pyx_L11; } /* "ga4py/gain/util.pyx":624 * elif isinstance(item, NoneKey): * pass * elif isinstance(item, FixedKey): # <<<<<<<<<<<<<< * raise TypeError, "FixedKey found in MasterKey" * else: */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__FixedKey); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = PyObject_IsInstance(__pyx_v_item, __pyx_t_7); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = (__pyx_t_8 != 0); if (__pyx_t_9) { /* "ga4py/gain/util.pyx":625 * pass * elif isinstance(item, FixedKey): * raise TypeError, "FixedKey found in MasterKey" # <<<<<<<<<<<<<< * else: * raise TypeError, "unrecognized item in MasterKey" */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_26), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L11; } /*else*/ { /* "ga4py/gain/util.pyx":627 * raise TypeError, "FixedKey found in MasterKey" * else: * raise TypeError, "unrecognized item in MasterKey" # <<<<<<<<<<<<<< * return result * */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_27), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L11:; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/util.pyx":628 * else: * raise TypeError, "unrecognized item in MasterKey" * return result # <<<<<<<<<<<<<< * * def lohi_T(self): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_result)); __pyx_r = ((PyObject *)__pyx_v_result); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.bound_by_lohi", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_result); __Pyx_XDECREF(__pyx_v_item); __Pyx_XDECREF(__pyx_v_l); __Pyx_XDECREF(__pyx_v_h); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_37lohi_T(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_9MasterKey_36lohi_T[] = "Return the current order of origin including fixed dimensions.\n\n This produces a tranpose suitable for a lo or hi.\n\n Examples\n --------\n >>> lo,hi = [0,0,0], [2,3,4]\n >>> k = MasterKey((2,3,4))\n >>> k_T = k.transpose((2,1,0))\n >>> k_T1 = k_T[:,1]\n >>> k_T1.lohi_T()\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_37lohi_T = {__Pyx_NAMESTR("lohi_T"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_37lohi_T, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_9MasterKey_36lohi_T)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_37lohi_T(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("lohi_T (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_36lohi_T(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":630 * return result * * def lohi_T(self): # <<<<<<<<<<<<<< * """Return the current order of origin including fixed dimensions. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_36lohi_T(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_item = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; Py_ssize_t __pyx_t_4; PyObject *(*__pyx_t_5)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("lohi_T", 0); __Pyx_TraceCall("lohi_T", __pyx_f[0], 630); /* "ga4py/gain/util.pyx":644 * * """ * return [item.origin for item in self.get_origin()] # <<<<<<<<<<<<<< * * def None_key(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__get_origin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) { __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; for (;;) { if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_2)) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_2)) { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_3 = __pyx_t_5(__pyx_t_2); if (unlikely(!__pyx_t_3)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_3); } __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__origin); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_3))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = ((PyObject *)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.lohi_T", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_item); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_39None_key(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_9MasterKey_38None_key[] = "Return a key based on current None's in this MasterKey.\n\n Examples\n --------\n >>> k = MasterKey((2,3,4))\n >>> k1 = k[None, :, None, :, None, :, None]\n >>> k1.None_key()\n [None, slice(None,None,None), \n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_39None_key = {__Pyx_NAMESTR("None_key"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_39None_key, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_9MasterKey_38None_key)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_39None_key(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("None_key (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_38None_key(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":646 * return [item.origin for item in self.get_origin()] * * def None_key(self): # <<<<<<<<<<<<<< * """Return a key based on current None's in this MasterKey. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_38None_key(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_datum = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; Py_ssize_t __pyx_t_4; PyObject *(*__pyx_t_5)(PyObject *); PyObject *__pyx_t_6 = NULL; int __pyx_t_7; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("None_key", 0); __Pyx_TraceCall("None_key", __pyx_f[0], 646); /* "ga4py/gain/util.pyx":657 * * """ * return [None if isinstance(datum, NoneKey) else slice(None,None,None) # <<<<<<<<<<<<<< * for datum in self.data] * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); /* "ga4py/gain/util.pyx":658 * """ * return [None if isinstance(datum, NoneKey) else slice(None,None,None) * for datum in self.data] # <<<<<<<<<<<<<< * * def get_lo_hi_skip_adjust(self): */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__data); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_3)) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_3)) { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_2 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_2)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_2); } __Pyx_XDECREF_SET(__pyx_v_datum, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":657 * * """ * return [None if isinstance(datum, NoneKey) else slice(None,None,None) # <<<<<<<<<<<<<< * for datum in self.data] * */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__NoneKey); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = PyObject_IsInstance(__pyx_v_datum, __pyx_t_6); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if ((__pyx_t_7 != 0)) { __Pyx_INCREF(Py_None); __pyx_t_2 = Py_None; } else { __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_k_tuple_28), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_2 = __pyx_t_6; __pyx_t_6 = 0; } if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = ((PyObject *)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.None_key", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_datum); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_41get_lo_hi_skip_adjust(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_9MasterKey_40get_lo_hi_skip_adjust[] = "Return lo/hi/skip/adjust needed for successful ga.strided_get()."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_41get_lo_hi_skip_adjust = {__Pyx_NAMESTR("get_lo_hi_skip_adjust"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_41get_lo_hi_skip_adjust, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_9MasterKey_40get_lo_hi_skip_adjust)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_41get_lo_hi_skip_adjust(PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_lo_hi_skip_adjust (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_40get_lo_hi_skip_adjust(__pyx_self, ((PyObject *)__pyx_v_self)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":660 * for datum in self.data] * * def get_lo_hi_skip_adjust(self): # <<<<<<<<<<<<<< * """Return lo/hi/skip/adjust needed for successful ga.strided_get().""" * sorted_origin = self.get_sorted_origin() */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_40get_lo_hi_skip_adjust(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { PyObject *__pyx_v_sorted_origin = NULL; PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_v_sk = NULL; PyObject *__pyx_v_ad = NULL; int __pyx_v_need_strided; PyObject *__pyx_v_item = NULL; PyObject *__pyx_v_length = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; Py_ssize_t __pyx_t_3; PyObject *(*__pyx_t_4)(PyObject *); int __pyx_t_5; int __pyx_t_6; PyObject *__pyx_t_7 = NULL; int __pyx_t_8; int __pyx_t_9; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_lo_hi_skip_adjust", 0); __Pyx_TraceCall("get_lo_hi_skip_adjust", __pyx_f[0], 660); /* "ga4py/gain/util.pyx":662 * def get_lo_hi_skip_adjust(self): * """Return lo/hi/skip/adjust needed for successful ga.strided_get().""" * sorted_origin = self.get_sorted_origin() # <<<<<<<<<<<<<< * lo = [] * hi = [] */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__get_sorted_origin); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_sorted_origin = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":663 * """Return lo/hi/skip/adjust needed for successful ga.strided_get().""" * sorted_origin = self.get_sorted_origin() * lo = [] # <<<<<<<<<<<<<< * hi = [] * sk = [] */ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 663; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_lo = ((PyObject *)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":664 * sorted_origin = self.get_sorted_origin() * lo = [] * hi = [] # <<<<<<<<<<<<<< * sk = [] * ad = [] */ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 664; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_hi = ((PyObject *)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":665 * lo = [] * hi = [] * sk = [] # <<<<<<<<<<<<<< * ad = [] * need_strided = False */ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_sk = ((PyObject *)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":666 * hi = [] * sk = [] * ad = [] # <<<<<<<<<<<<<< * need_strided = False * for item in sorted_origin: */ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_ad = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":667 * sk = [] * ad = [] * need_strided = False # <<<<<<<<<<<<<< * for item in sorted_origin: * if isinstance(item, FixedKey): */ __pyx_v_need_strided = 0; /* "ga4py/gain/util.pyx":668 * ad = [] * need_strided = False * for item in sorted_origin: # <<<<<<<<<<<<<< * if isinstance(item, FixedKey): * lo.append(item.value) */ if (PyList_CheckExact(__pyx_v_sorted_origin) || PyTuple_CheckExact(__pyx_v_sorted_origin)) { __pyx_t_2 = __pyx_v_sorted_origin; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_sorted_origin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; } for (;;) { if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) { if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) { if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_1 = __pyx_t_4(__pyx_t_2); if (unlikely(!__pyx_t_1)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_1); } __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":669 * need_strided = False * for item in sorted_origin: * if isinstance(item, FixedKey): # <<<<<<<<<<<<<< * lo.append(item.value) * hi.append(item.value+1) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__FixedKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = PyObject_IsInstance(__pyx_v_item, __pyx_t_1); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_6 = (__pyx_t_5 != 0); if (__pyx_t_6) { /* "ga4py/gain/util.pyx":670 * for item in sorted_origin: * if isinstance(item, FixedKey): * lo.append(item.value) # <<<<<<<<<<<<<< * hi.append(item.value+1) * sk.append(1) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_lo, __pyx_t_1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/util.pyx":671 * if isinstance(item, FixedKey): * lo.append(item.value) * hi.append(item.value+1) # <<<<<<<<<<<<<< * sk.append(1) * ad.append(slice(0,None,None)) */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__value); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = PyNumber_Add(__pyx_t_7, __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_hi, __pyx_t_1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/util.pyx":672 * lo.append(item.value) * hi.append(item.value+1) * sk.append(1) # <<<<<<<<<<<<<< * ad.append(slice(0,None,None)) * elif isinstance(item, RangeKey): */ __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_sk, __pyx_int_1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/util.pyx":673 * hi.append(item.value+1) * sk.append(1) * ad.append(slice(0,None,None)) # <<<<<<<<<<<<<< * elif isinstance(item, RangeKey): * if item.step > 1 or item.step < -1: */ __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_k_tuple_29), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_ad, __pyx_t_7); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L5; } /* "ga4py/gain/util.pyx":674 * sk.append(1) * ad.append(slice(0,None,None)) * elif isinstance(item, RangeKey): # <<<<<<<<<<<<<< * if item.step > 1 or item.step < -1: * need_strided = True */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__RangeKey); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_6 = PyObject_IsInstance(__pyx_v_item, __pyx_t_7); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = (__pyx_t_6 != 0); if (__pyx_t_5) { /* "ga4py/gain/util.pyx":675 * ad.append(slice(0,None,None)) * elif isinstance(item, RangeKey): * if item.step > 1 or item.step < -1: # <<<<<<<<<<<<<< * need_strided = True * if item.step < 0: */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__step); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = PyObject_RichCompare(__pyx_t_7, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!__pyx_t_5) { __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyObject_RichCompare(__pyx_t_1, __pyx_int_neg_1, Py_LT); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = __pyx_t_6; } else { __pyx_t_9 = __pyx_t_5; } if (__pyx_t_9) { /* "ga4py/gain/util.pyx":676 * elif isinstance(item, RangeKey): * if item.step > 1 or item.step < -1: * need_strided = True # <<<<<<<<<<<<<< * if item.step < 0: * length = item.size-1 */ __pyx_v_need_strided = 1; goto __pyx_L6; } __pyx_L6:; /* "ga4py/gain/util.pyx":677 * if item.step > 1 or item.step < -1: * need_strided = True * if item.step < 0: # <<<<<<<<<<<<<< * length = item.size-1 * lo.append(item.step*length + item.start) */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__step); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 677; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = PyObject_RichCompare(__pyx_t_7, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 677; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 677; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_9) { /* "ga4py/gain/util.pyx":678 * need_strided = True * if item.step < 0: * length = item.size-1 # <<<<<<<<<<<<<< * lo.append(item.step*length + item.start) * hi.append(item.start+1) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyNumber_Subtract(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/util.pyx":679 * if item.step < 0: * length = item.size-1 * lo.append(item.step*length + item.start) # <<<<<<<<<<<<<< * hi.append(item.start+1) * sk.append(-item.step) */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__step); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = PyNumber_Multiply(__pyx_t_7, __pyx_v_length); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__start); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_10 = PyNumber_Add(__pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_lo, __pyx_t_10); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/util.pyx":680 * length = item.size-1 * lo.append(item.step*length + item.start) * hi.append(item.start+1) # <<<<<<<<<<<<<< * sk.append(-item.step) * ad.append(slice(None,None,-1)) */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__start); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_10 = PyNumber_Add(__pyx_t_7, __pyx_int_1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_hi, __pyx_t_10); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/util.pyx":681 * lo.append(item.step*length + item.start) * hi.append(item.start+1) * sk.append(-item.step) # <<<<<<<<<<<<<< * ad.append(slice(None,None,-1)) * else: */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__step); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_10 = PyNumber_Negative(__pyx_t_7); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_sk, __pyx_t_10); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/util.pyx":682 * hi.append(item.start+1) * sk.append(-item.step) * ad.append(slice(None,None,-1)) # <<<<<<<<<<<<<< * else: * lo.append(item.start) */ __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_k_tuple_30), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_ad, __pyx_t_7); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L7; } /*else*/ { /* "ga4py/gain/util.pyx":684 * ad.append(slice(None,None,-1)) * else: * lo.append(item.start) # <<<<<<<<<<<<<< * hi.append(item.stop) * sk.append(item.step) */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__start); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 684; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_lo, __pyx_t_7); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 684; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/gain/util.pyx":685 * else: * lo.append(item.start) * hi.append(item.stop) # <<<<<<<<<<<<<< * sk.append(item.step) * ad.append(slice(0,None,None)) */ __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__stop); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 685; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_hi, __pyx_t_10); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 685; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/util.pyx":686 * lo.append(item.start) * hi.append(item.stop) * sk.append(item.step) # <<<<<<<<<<<<<< * ad.append(slice(0,None,None)) * else: */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s__step); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 686; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_sk, __pyx_t_7); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 686; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/gain/util.pyx":687 * hi.append(item.stop) * sk.append(item.step) * ad.append(slice(0,None,None)) # <<<<<<<<<<<<<< * else: * raise TypeError, "unhandled piece of MasterKey" */ __pyx_t_10 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_k_tuple_31), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 687; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_ad, __pyx_t_10); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 687; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } __pyx_L7:; goto __pyx_L5; } /*else*/ { /* "ga4py/gain/util.pyx":689 * ad.append(slice(0,None,None)) * else: * raise TypeError, "unhandled piece of MasterKey" # <<<<<<<<<<<<<< * lo = np.asarray(lo, dtype=np.int64) * hi = np.asarray(hi, dtype=np.int64) */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_32), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L5:; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":690 * else: * raise TypeError, "unhandled piece of MasterKey" * lo = np.asarray(lo, dtype=np.int64) # <<<<<<<<<<<<<< * hi = np.asarray(hi, dtype=np.int64) * sk = np.asarray(sk, dtype=np.int64) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__asarray); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_7)); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__int64); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), __pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF_SET(__pyx_v_lo, __pyx_t_11); __pyx_t_11 = 0; /* "ga4py/gain/util.pyx":691 * raise TypeError, "unhandled piece of MasterKey" * lo = np.asarray(lo, dtype=np.int64) * hi = np.asarray(hi, dtype=np.int64) # <<<<<<<<<<<<<< * sk = np.asarray(sk, dtype=np.int64) * return lo,hi,sk,ad,need_strided */ __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 691; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s__asarray); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 691; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 691; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 691; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 691; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s__int64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 691; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 691; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 691; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_hi, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":692 * lo = np.asarray(lo, dtype=np.int64) * hi = np.asarray(hi, dtype=np.int64) * sk = np.asarray(sk, dtype=np.int64) # <<<<<<<<<<<<<< * return lo,hi,sk,ad,need_strided * */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 692; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__asarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 692; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 692; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_sk); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_sk); __Pyx_GIVEREF(__pyx_v_sk); __pyx_t_11 = PyDict_New(); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 692; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_11)); __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 692; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__int64); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 692; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (PyDict_SetItem(__pyx_t_11, ((PyObject *)__pyx_n_s__dtype), __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 692; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_11)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 692; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; __Pyx_DECREF_SET(__pyx_v_sk, __pyx_t_10); __pyx_t_10 = 0; /* "ga4py/gain/util.pyx":693 * hi = np.asarray(hi, dtype=np.int64) * sk = np.asarray(sk, dtype=np.int64) * return lo,hi,sk,ad,need_strided # <<<<<<<<<<<<<< * * def access_key(self, lo, hi): */ __Pyx_XDECREF(__pyx_r); __pyx_t_10 = __Pyx_PyBool_FromLong(__pyx_v_need_strided); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 693; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = PyTuple_New(5); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 693; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __Pyx_INCREF(__pyx_v_sk); PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_v_sk); __Pyx_GIVEREF(__pyx_v_sk); __Pyx_INCREF(((PyObject *)__pyx_v_ad)); PyTuple_SET_ITEM(__pyx_t_11, 3, ((PyObject *)__pyx_v_ad)); __Pyx_GIVEREF(((PyObject *)__pyx_v_ad)); PyTuple_SET_ITEM(__pyx_t_11, 4, __pyx_t_10); __Pyx_GIVEREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_r = ((PyObject *)__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_11); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.get_lo_hi_skip_adjust", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_sorted_origin); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XDECREF(__pyx_v_sk); __Pyx_XDECREF(__pyx_v_ad); __Pyx_XDECREF(__pyx_v_item); __Pyx_XDECREF(__pyx_v_length); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_43access_key(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_9MasterKey_42access_key[] = "Converts from MasterKey to list appropriate for ga.access()[list].\n\n Does NOT return a new MasterKey or any Key subclasses. The returned\n list contains one or more of slice, int, long, etc which an\n access()ed ndarray can iterpret.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_43access_key = {__Pyx_NAMESTR("access_key"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_43access_key, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_9MasterKey_42access_key)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_43access_key(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("access_key (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("access_key", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("access_key", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "access_key") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_self = values[0]; __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("access_key", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.MasterKey.access_key", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_42access_key(__pyx_self, __pyx_v_self, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":695 * return lo,hi,sk,ad,need_strided * * def access_key(self, lo, hi): # <<<<<<<<<<<<<< * """Converts from MasterKey to list appropriate for ga.access()[list]. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_42access_key(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyObject *__pyx_v_result = NULL; PyObject *__pyx_v_fixed = NULL; PyObject *__pyx_v_iter_ranged_origin = NULL; PyObject *__pyx_v_i = NULL; PyObject *__pyx_v_ranged = NULL; PyObject *__pyx_v_nlo = NULL; PyObject *__pyx_v_start = NULL; PyObject *__pyx_v_stop = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; Py_ssize_t __pyx_t_3; PyObject *(*__pyx_t_4)(PyObject *); PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; int __pyx_t_7; int __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("access_key", 0); __Pyx_TraceCall("access_key", __pyx_f[0], 695); /* "ga4py/gain/util.pyx":703 * * """ * result = [None]*self.get_original_ndim() # <<<<<<<<<<<<<< * for fixed in self.fixed: * result[fixed.origin] = fixed.value-lo[fixed.origin] */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__get_original_ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(Py_None); PyList_SET_ITEM(__pyx_t_1, 0, Py_None); __Pyx_GIVEREF(Py_None); { PyObject* __pyx_temp = PyNumber_InPlaceMultiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_temp)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_temp); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = __pyx_temp; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_result = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":704 * """ * result = [None]*self.get_original_ndim() * for fixed in self.fixed: # <<<<<<<<<<<<<< * result[fixed.origin] = fixed.value-lo[fixed.origin] * iter_ranged_origin = iter(self.bound_by_lohi(lo, hi)) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__fixed); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) { if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) { if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_1 = __pyx_t_4(__pyx_t_2); if (unlikely(!__pyx_t_1)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_1); } __Pyx_XDECREF_SET(__pyx_v_fixed, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":705 * result = [None]*self.get_original_ndim() * for fixed in self.fixed: * result[fixed.origin] = fixed.value-lo[fixed.origin] # <<<<<<<<<<<<<< * iter_ranged_origin = iter(self.bound_by_lohi(lo, hi)) * for i in range(len(result)): */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_fixed, __pyx_n_s__value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_fixed, __pyx_n_s__origin); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PyObject_GetItem(__pyx_v_lo, __pyx_t_5); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyNumber_Subtract(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_fixed, __pyx_n_s__origin); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); if (PyObject_SetItem(((PyObject *)__pyx_v_result), __pyx_t_6, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":706 * for fixed in self.fixed: * result[fixed.origin] = fixed.value-lo[fixed.origin] * iter_ranged_origin = iter(self.bound_by_lohi(lo, hi)) # <<<<<<<<<<<<<< * for i in range(len(result)): * if result[i] is None: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__bound_by_lohi); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 706; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 706; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_6 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 706; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 706; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_iter_ranged_origin = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/gain/util.pyx":707 * result[fixed.origin] = fixed.value-lo[fixed.origin] * iter_ranged_origin = iter(self.bound_by_lohi(lo, hi)) * for i in range(len(result)): # <<<<<<<<<<<<<< * if result[i] is None: * ranged = iter_ranged_origin.next() */ __pyx_t_3 = PyList_GET_SIZE(((PyObject *)__pyx_v_result)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; if (PyList_CheckExact(__pyx_t_5) || PyTuple_CheckExact(__pyx_t_5)) { __pyx_t_6 = __pyx_t_5; __Pyx_INCREF(__pyx_t_6); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = Py_TYPE(__pyx_t_6)->tp_iternext; } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; for (;;) { if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_6)) { if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_6)) { if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_5 = __pyx_t_4(__pyx_t_6); if (unlikely(!__pyx_t_5)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_5); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/util.pyx":708 * iter_ranged_origin = iter(self.bound_by_lohi(lo, hi)) * for i in range(len(result)): * if result[i] is None: # <<<<<<<<<<<<<< * ranged = iter_ranged_origin.next() * nlo = lo[ranged.origin] */ __pyx_t_5 = PyObject_GetItem(((PyObject *)__pyx_v_result), __pyx_v_i); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = (__pyx_t_5 == Py_None); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_8 = (__pyx_t_7 != 0); if (__pyx_t_8) { /* "ga4py/gain/util.pyx":709 * for i in range(len(result)): * if result[i] is None: * ranged = iter_ranged_origin.next() # <<<<<<<<<<<<<< * nlo = lo[ranged.origin] * start = ranged.start-nlo */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_iter_ranged_origin, __pyx_n_s__next); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 709; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 709; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF_SET(__pyx_v_ranged, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":710 * if result[i] is None: * ranged = iter_ranged_origin.next() * nlo = lo[ranged.origin] # <<<<<<<<<<<<<< * start = ranged.start-nlo * stop = ranged.stop-nlo */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_ranged, __pyx_n_s__origin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyObject_GetItem(__pyx_v_lo, __pyx_t_2); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF_SET(__pyx_v_nlo, __pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/util.pyx":711 * ranged = iter_ranged_origin.next() * nlo = lo[ranged.origin] * start = ranged.start-nlo # <<<<<<<<<<<<<< * stop = ranged.stop-nlo * if start < 0: start = None */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_ranged, __pyx_n_s__start); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 711; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = PyNumber_Subtract(__pyx_t_5, __pyx_v_nlo); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 711; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF_SET(__pyx_v_start, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":712 * nlo = lo[ranged.origin] * start = ranged.start-nlo * stop = ranged.stop-nlo # <<<<<<<<<<<<<< * if start < 0: start = None * if stop < 0: stop = None */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_ranged, __pyx_n_s__stop); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 712; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyNumber_Subtract(__pyx_t_2, __pyx_v_nlo); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 712; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF_SET(__pyx_v_stop, __pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/util.pyx":713 * start = ranged.start-nlo * stop = ranged.stop-nlo * if start < 0: start = None # <<<<<<<<<<<<<< * if stop < 0: stop = None * result[i] = slice(start,stop,ranged.step) */ __pyx_t_5 = PyObject_RichCompare(__pyx_v_start, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_8) { __Pyx_INCREF(Py_None); __Pyx_DECREF_SET(__pyx_v_start, Py_None); goto __pyx_L8; } __pyx_L8:; /* "ga4py/gain/util.pyx":714 * stop = ranged.stop-nlo * if start < 0: start = None * if stop < 0: stop = None # <<<<<<<<<<<<<< * result[i] = slice(start,stop,ranged.step) * return result */ __pyx_t_5 = PyObject_RichCompare(__pyx_v_stop, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_8) { __Pyx_INCREF(Py_None); __Pyx_DECREF_SET(__pyx_v_stop, Py_None); goto __pyx_L9; } __pyx_L9:; /* "ga4py/gain/util.pyx":715 * if start < 0: start = None * if stop < 0: stop = None * result[i] = slice(start,stop,ranged.step) # <<<<<<<<<<<<<< * return result * */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_ranged, __pyx_n_s__step); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_start); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_start); __Pyx_GIVEREF(__pyx_v_start); __Pyx_INCREF(__pyx_v_stop); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_stop); __Pyx_GIVEREF(__pyx_v_stop); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (PyObject_SetItem(((PyObject *)__pyx_v_result), __pyx_v_i, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L7; } __pyx_L7:; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/util.pyx":716 * if stop < 0: stop = None * result[i] = slice(start,stop,ranged.step) * return result # <<<<<<<<<<<<<< * * def get_key(self, lo, hi): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_result)); __pyx_r = ((PyObject *)__pyx_v_result); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.access_key", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_result); __Pyx_XDECREF(__pyx_v_fixed); __Pyx_XDECREF(__pyx_v_iter_ranged_origin); __Pyx_XDECREF(__pyx_v_i); __Pyx_XDECREF(__pyx_v_ranged); __Pyx_XDECREF(__pyx_v_nlo); __Pyx_XDECREF(__pyx_v_start); __Pyx_XDECREF(__pyx_v_stop); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_45get_key(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_9MasterKey_44get_key[] = "Converts from MasterKey to list appropriate for ga.get()[list]."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_45get_key = {__Pyx_NAMESTR("get_key"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_45get_key, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_9MasterKey_44get_key)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_45get_key(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_lo = 0; PyObject *__pyx_v_hi = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_key (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__lo,&__pyx_n_s__hi,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lo)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("get_key", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__hi)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("get_key", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_key") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_self = values[0]; __pyx_v_lo = values[1]; __pyx_v_hi = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("get_key", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.MasterKey.get_key", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_44get_key(__pyx_self, __pyx_v_self, __pyx_v_lo, __pyx_v_hi); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":718 * return result * * def get_key(self, lo, hi): # <<<<<<<<<<<<<< * """Converts from MasterKey to list appropriate for ga.get()[list].""" * iter_ranged_origin = iter(self.bound_by_lohi(lo, hi)) */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_44get_key(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_lo, PyObject *__pyx_v_hi) { PyObject *__pyx_v_iter_ranged_origin = NULL; PyObject *__pyx_v_result = NULL; PyObject *__pyx_v_datum = NULL; PyObject *__pyx_v_ro = NULL; PyObject *__pyx_v_offset = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; Py_ssize_t __pyx_t_4; PyObject *(*__pyx_t_5)(PyObject *); int __pyx_t_6; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; int __pyx_t_12; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_key", 0); __Pyx_TraceCall("get_key", __pyx_f[0], 718); /* "ga4py/gain/util.pyx":720 * def get_key(self, lo, hi): * """Converts from MasterKey to list appropriate for ga.get()[list].""" * iter_ranged_origin = iter(self.bound_by_lohi(lo, hi)) # <<<<<<<<<<<<<< * result = [] * for datum in self.data: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__bound_by_lohi); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_iter_ranged_origin = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":721 * """Converts from MasterKey to list appropriate for ga.get()[list].""" * iter_ranged_origin = iter(self.bound_by_lohi(lo, hi)) * result = [] # <<<<<<<<<<<<<< * for datum in self.data: * if isinstance(datum, FixedKey): */ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_result = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":722 * iter_ranged_origin = iter(self.bound_by_lohi(lo, hi)) * result = [] * for datum in self.data: # <<<<<<<<<<<<<< * if isinstance(datum, FixedKey): * raise TypeError, "FixedKey found in MasterKey" */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__data); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_3)) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_3)) { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_2 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_2)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_2); } __Pyx_XDECREF_SET(__pyx_v_datum, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":723 * result = [] * for datum in self.data: * if isinstance(datum, FixedKey): # <<<<<<<<<<<<<< * raise TypeError, "FixedKey found in MasterKey" * elif isinstance(datum, RangeKey): */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__FixedKey); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 723; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyObject_IsInstance(__pyx_v_datum, __pyx_t_2); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 723; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_7 = (__pyx_t_6 != 0); if (__pyx_t_7) { /* "ga4py/gain/util.pyx":724 * for datum in self.data: * if isinstance(datum, FixedKey): * raise TypeError, "FixedKey found in MasterKey" # <<<<<<<<<<<<<< * elif isinstance(datum, RangeKey): * ro = iter_ranged_origin.next() */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_26), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } /* "ga4py/gain/util.pyx":725 * if isinstance(datum, FixedKey): * raise TypeError, "FixedKey found in MasterKey" * elif isinstance(datum, RangeKey): # <<<<<<<<<<<<<< * ro = iter_ranged_origin.next() * offset = RangeKey( */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__RangeKey); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = PyObject_IsInstance(__pyx_v_datum, __pyx_t_2); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = (__pyx_t_7 != 0); if (__pyx_t_6) { /* "ga4py/gain/util.pyx":726 * raise TypeError, "FixedKey found in MasterKey" * elif isinstance(datum, RangeKey): * ro = iter_ranged_origin.next() # <<<<<<<<<<<<<< * offset = RangeKey( * datum.start,ro.start,datum.step,datum.origin).size */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_iter_ranged_origin, __pyx_n_s__next); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF_SET(__pyx_v_ro, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":727 * elif isinstance(datum, RangeKey): * ro = iter_ranged_origin.next() * offset = RangeKey( # <<<<<<<<<<<<<< * datum.start,ro.start,datum.step,datum.origin).size * result.append(slice(offset, offset+ro.size, 1)) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__RangeKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); /* "ga4py/gain/util.pyx":728 * ro = iter_ranged_origin.next() * offset = RangeKey( * datum.start,ro.start,datum.step,datum.origin).size # <<<<<<<<<<<<<< * result.append(slice(offset, offset+ro.size, 1)) * elif isinstance(datum, NoneKey): */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_datum, __pyx_n_s__start); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 728; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_ro, __pyx_n_s__start); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 728; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_datum, __pyx_n_s__step); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 728; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_datum, __pyx_n_s__origin); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 728; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = PyTuple_New(4); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_8); __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_9); __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_t_10); __Pyx_GIVEREF(__pyx_t_10); __pyx_t_2 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_10 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s__size); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 728; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF_SET(__pyx_v_offset, __pyx_t_11); __pyx_t_11 = 0; /* "ga4py/gain/util.pyx":729 * offset = RangeKey( * datum.start,ro.start,datum.step,datum.origin).size * result.append(slice(offset, offset+ro.size, 1)) # <<<<<<<<<<<<<< * elif isinstance(datum, NoneKey): * result.append(slice(None,None,None)) */ __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_ro, __pyx_n_s__size); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_10 = PyNumber_Add(__pyx_v_offset, __pyx_t_11); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_INCREF(__pyx_v_offset); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_offset); __Pyx_GIVEREF(__pyx_v_offset); PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_10); __Pyx_GIVEREF(__pyx_t_10); __Pyx_INCREF(__pyx_int_1); PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_int_1); __Pyx_GIVEREF(__pyx_int_1); __pyx_t_10 = 0; __pyx_t_10 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_10); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L5; } /* "ga4py/gain/util.pyx":730 * datum.start,ro.start,datum.step,datum.origin).size * result.append(slice(offset, offset+ro.size, 1)) * elif isinstance(datum, NoneKey): # <<<<<<<<<<<<<< * result.append(slice(None,None,None)) * else: */ __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s__NoneKey); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_6 = PyObject_IsInstance(__pyx_v_datum, __pyx_t_10); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_7 = (__pyx_t_6 != 0); if (__pyx_t_7) { /* "ga4py/gain/util.pyx":731 * result.append(slice(offset, offset+ro.size, 1)) * elif isinstance(datum, NoneKey): * result.append(slice(None,None,None)) # <<<<<<<<<<<<<< * else: * raise ValueError, "MasterKey contained unknown object" */ __pyx_t_10 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_k_tuple_33), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_10); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L5; } /*else*/ { /* "ga4py/gain/util.pyx":733 * result.append(slice(None,None,None)) * else: * raise ValueError, "MasterKey contained unknown object" # <<<<<<<<<<<<<< * return result * */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_34), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L5:; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":734 * else: * raise ValueError, "MasterKey contained unknown object" * return result # <<<<<<<<<<<<<< * * def transpose(self, axes): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_result)); __pyx_r = ((PyObject *)__pyx_v_result); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_11); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.get_key", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_iter_ranged_origin); __Pyx_XDECREF(__pyx_v_result); __Pyx_XDECREF(__pyx_v_datum); __Pyx_XDECREF(__pyx_v_ro); __Pyx_XDECREF(__pyx_v_offset); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_47transpose(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_9MasterKey_46transpose[] = "Swap the axes of this MasterKey given axes.\n\n Returns the inverse of the axes in addition to the new MasterKey\n instance.\n\n Parameters\n ----------\n axes : list of ints\n `i` in the `j`-th place in the tuple means `a`'s `i`-th axis becomes\n `a.transpose()`'s `j`-th axis.\n \n Examples\n --------\n >>> k = MasterKey((40,30,20))\n >>> k = k[2:34:1, 4, None, 10:2:-1]\n >>> inv,new_k = k.transpose((1,2,0))\n >>> print inv\n [2, 0, 1]\n >>> print new_k\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_9MasterKey_47transpose = {__Pyx_NAMESTR("transpose"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_9MasterKey_47transpose, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_9MasterKey_46transpose)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_9MasterKey_47transpose(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_axes = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("transpose (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__self,&__pyx_n_s__axes,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__self)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axes)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("transpose", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "transpose") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_self = values[0]; __pyx_v_axes = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("transpose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.MasterKey.transpose", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_9MasterKey_46transpose(__pyx_self, __pyx_v_self, __pyx_v_axes); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":736 * return result * * def transpose(self, axes): # <<<<<<<<<<<<<< * """Swap the axes of this MasterKey given axes. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_9MasterKey_46transpose(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_axes) { PyObject *__pyx_v_inverse = NULL; PyObject *__pyx_v_i = NULL; PyObject *__pyx_v_val = NULL; PyObject *__pyx_v_new_data = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; Py_ssize_t __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *(*__pyx_t_4)(PyObject *); PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("transpose", 0); __Pyx_TraceCall("transpose", __pyx_f[0], 736); __Pyx_INCREF(__pyx_v_axes); /* "ga4py/gain/util.pyx":759 * """ * # normalize the inputs, making sure they're all iterable * axes = listify(axes) # <<<<<<<<<<<<<< * # create the inverse of the given axes * inverse = [None]*len(axes) */ __pyx_t_1 = ((PyObject *)__pyx_f_5ga4py_4gain_4util_listify(__pyx_v_axes, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF_SET(__pyx_v_axes, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":761 * axes = listify(axes) * # create the inverse of the given axes * inverse = [None]*len(axes) # <<<<<<<<<<<<<< * for i,val in enumerate(axes): * inverse[val] = i */ __pyx_t_2 = PyObject_Length(__pyx_v_axes); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 761; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = PyList_New(1 * ((__pyx_t_2<0) ? 0:__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 761; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < __pyx_t_2; __pyx_temp++) { __Pyx_INCREF(Py_None); PyList_SET_ITEM(__pyx_t_1, __pyx_temp, Py_None); __Pyx_GIVEREF(Py_None); } } __pyx_v_inverse = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":762 * # create the inverse of the given axes * inverse = [None]*len(axes) * for i,val in enumerate(axes): # <<<<<<<<<<<<<< * inverse[val] = i * # modify the given axes based on this MasterKey */ __Pyx_INCREF(__pyx_int_0); __pyx_t_1 = __pyx_int_0; if (PyList_CheckExact(__pyx_v_axes) || PyTuple_CheckExact(__pyx_v_axes)) { __pyx_t_3 = __pyx_v_axes; __Pyx_INCREF(__pyx_t_3); __pyx_t_2 = 0; __pyx_t_4 = NULL; } else { __pyx_t_2 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_axes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = Py_TYPE(__pyx_t_3)->tp_iternext; } for (;;) { if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_3)) { if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_3)) { if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_5 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_5)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_5); } __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_5); __pyx_t_5 = 0; __Pyx_INCREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1); __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/gain/util.pyx":763 * inverse = [None]*len(axes) * for i,val in enumerate(axes): * inverse[val] = i # <<<<<<<<<<<<<< * # modify the given axes based on this MasterKey * new_data = [self.data[i] for i in axes] */ if (PyObject_SetItem(((PyObject *)__pyx_v_inverse), __pyx_v_val, __pyx_v_i) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":765 * inverse[val] = i * # modify the given axes based on this MasterKey * new_data = [self.data[i] for i in axes] # <<<<<<<<<<<<<< * return MasterKey(None, new_data, self.fixed, axes, inverse) * */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyList_CheckExact(__pyx_v_axes) || PyTuple_CheckExact(__pyx_v_axes)) { __pyx_t_3 = __pyx_v_axes; __Pyx_INCREF(__pyx_t_3); __pyx_t_2 = 0; __pyx_t_4 = NULL; } else { __pyx_t_2 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_axes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = Py_TYPE(__pyx_t_3)->tp_iternext; } for (;;) { if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_3)) { if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_3)) { if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_5 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_5)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_5); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__data); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PyObject_GetItem(__pyx_t_5, __pyx_v_i); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_6))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_new_data = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":766 * # modify the given axes based on this MasterKey * new_data = [self.data[i] for i in axes] * return MasterKey(None, new_data, self.fixed, axes, inverse) # <<<<<<<<<<<<<< * * def broadcast_shape(first, second): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__MasterKey); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s__fixed); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = PyTuple_New(5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(Py_None); PyTuple_SET_ITEM(__pyx_t_6, 0, Py_None); __Pyx_GIVEREF(Py_None); __Pyx_INCREF(((PyObject *)__pyx_v_new_data)); PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_new_data)); __Pyx_GIVEREF(((PyObject *)__pyx_v_new_data)); PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_axes); PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_v_axes); __Pyx_GIVEREF(__pyx_v_axes); __Pyx_INCREF(((PyObject *)__pyx_v_inverse)); PyTuple_SET_ITEM(__pyx_t_6, 4, ((PyObject *)__pyx_v_inverse)); __Pyx_GIVEREF(((PyObject *)__pyx_v_inverse)); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.util.MasterKey.transpose", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_inverse); __Pyx_XDECREF(__pyx_v_i); __Pyx_XDECREF(__pyx_v_val); __Pyx_XDECREF(__pyx_v_new_data); __Pyx_XDECREF(__pyx_v_axes); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_3broadcast_shape(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_2broadcast_shape[] = "Return the broadcasted version of shapes first and second."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_3broadcast_shape = {__Pyx_NAMESTR("broadcast_shape"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_3broadcast_shape, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_2broadcast_shape)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_3broadcast_shape(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_first = 0; PyObject *__pyx_v_second = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("broadcast_shape (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__first,&__pyx_n_s__second,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__first)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__second)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("broadcast_shape", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "broadcast_shape") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_first = values[0]; __pyx_v_second = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("broadcast_shape", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.broadcast_shape", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_2broadcast_shape(__pyx_self, __pyx_v_first, __pyx_v_second); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_15broadcast_shape_1worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_15broadcast_shape_1worker = {__Pyx_NAMESTR("worker"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_15broadcast_shape_1worker, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_15broadcast_shape_1worker(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_x = 0; PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("worker (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("worker", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 770; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "worker") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 770; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_x = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("worker", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 770; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.broadcast_shape.worker", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_15broadcast_shape_worker(__pyx_self, __pyx_v_x, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":770 * def broadcast_shape(first, second): * """Return the broadcasted version of shapes first and second.""" * def worker(x,y): # <<<<<<<<<<<<<< * if x is None: x = 1 * if y is None: y = 1 */ static PyObject *__pyx_pf_5ga4py_4gain_4util_15broadcast_shape_worker(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("worker", 0); __Pyx_TraceCall("worker", __pyx_f[0], 770); __Pyx_INCREF(__pyx_v_x); __Pyx_INCREF(__pyx_v_y); /* "ga4py/gain/util.pyx":771 * """Return the broadcasted version of shapes first and second.""" * def worker(x,y): * if x is None: x = 1 # <<<<<<<<<<<<<< * if y is None: y = 1 * if x != 1 and y != 1 and x != y: */ __pyx_t_1 = (__pyx_v_x == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { __Pyx_INCREF(__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_x, __pyx_int_1); goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/util.pyx":772 * def worker(x,y): * if x is None: x = 1 * if y is None: y = 1 # <<<<<<<<<<<<<< * if x != 1 and y != 1 and x != y: * raise ValueError, ("shape mismatch:" */ __pyx_t_2 = (__pyx_v_y == Py_None); __pyx_t_1 = (__pyx_t_2 != 0); if (__pyx_t_1) { __Pyx_INCREF(__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_y, __pyx_int_1); goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/util.pyx":773 * if x is None: x = 1 * if y is None: y = 1 * if x != 1 and y != 1 and x != y: # <<<<<<<<<<<<<< * raise ValueError, ("shape mismatch:" * " objects cannot be broadcast to a single shape") */ __pyx_t_3 = PyObject_RichCompare(__pyx_v_x, __pyx_int_1, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 773; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 773; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_1) { __pyx_t_3 = PyObject_RichCompare(__pyx_v_y, __pyx_int_1, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 773; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 773; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_2) { __pyx_t_3 = PyObject_RichCompare(__pyx_v_x, __pyx_v_y, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 773; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 773; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = __pyx_t_4; } else { __pyx_t_5 = __pyx_t_2; } __pyx_t_2 = __pyx_t_5; } else { __pyx_t_2 = __pyx_t_1; } if (__pyx_t_2) { /* "ga4py/gain/util.pyx":774 * if y is None: y = 1 * if x != 1 and y != 1 and x != y: * raise ValueError, ("shape mismatch:" # <<<<<<<<<<<<<< * " objects cannot be broadcast to a single shape") * return max(x,y) */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_35), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } __pyx_L5:; /* "ga4py/gain/util.pyx":776 * raise ValueError, ("shape mismatch:" * " objects cannot be broadcast to a single shape") * return max(x,y) # <<<<<<<<<<<<<< * return tuple(reversed(map(worker, reversed(first), reversed(second)))) * */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_y); __pyx_t_3 = __pyx_v_y; __Pyx_INCREF(__pyx_v_x); __pyx_t_6 = __pyx_v_x; __pyx_t_8 = PyObject_RichCompare(__pyx_t_3, __pyx_t_6, Py_GT); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 776; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 776; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (__pyx_t_2) { __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = __pyx_t_3; } else { __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = __pyx_t_6; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_INCREF(__pyx_t_7); __pyx_r = __pyx_t_7; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("ga4py.gain.util.broadcast_shape.worker", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_x); __Pyx_XDECREF(__pyx_v_y); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":768 * return MasterKey(None, new_data, self.fixed, axes, inverse) * * def broadcast_shape(first, second): # <<<<<<<<<<<<<< * """Return the broadcasted version of shapes first and second.""" * def worker(x,y): */ static PyObject *__pyx_pf_5ga4py_4gain_4util_2broadcast_shape(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_first, PyObject *__pyx_v_second) { PyObject *__pyx_v_worker = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("broadcast_shape", 0); __Pyx_TraceCall("broadcast_shape", __pyx_f[0], 768); /* "ga4py/gain/util.pyx":770 * def broadcast_shape(first, second): * """Return the broadcasted version of shapes first and second.""" * def worker(x,y): # <<<<<<<<<<<<<< * if x is None: x = 1 * if y is None: y = 1 */ __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_15broadcast_shape_1worker, 0, __pyx_n_s_39, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_37)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 770; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_worker = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":777 * " objects cannot be broadcast to a single shape") * return max(x,y) * return tuple(reversed(map(worker, reversed(first), reversed(second)))) # <<<<<<<<<<<<<< * * def broadcast_chomp(smaller_key, larger_key): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_first); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_first); __Pyx_GIVEREF(__pyx_v_first); __pyx_t_2 = PyObject_Call(__pyx_builtin_reversed, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_second); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_second); __Pyx_GIVEREF(__pyx_v_second); __pyx_t_3 = PyObject_Call(__pyx_builtin_reversed, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_worker); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_worker); __Pyx_GIVEREF(__pyx_v_worker); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_map, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_reversed, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PyTuple_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.util.broadcast_shape", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_worker); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_5broadcast_chomp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_4broadcast_chomp[] = "Return a key appropriate for the given shape."; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_5broadcast_chomp = {__Pyx_NAMESTR("broadcast_chomp"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_5broadcast_chomp, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_4broadcast_chomp)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_5broadcast_chomp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_smaller_key = 0; PyObject *__pyx_v_larger_key = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("broadcast_chomp (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__smaller_key,&__pyx_n_s__larger_key,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__smaller_key)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__larger_key)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("broadcast_chomp", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "broadcast_chomp") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_smaller_key = values[0]; __pyx_v_larger_key = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("broadcast_chomp", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.broadcast_chomp", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_4broadcast_chomp(__pyx_self, __pyx_v_smaller_key, __pyx_v_larger_key); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":779 * return tuple(reversed(map(worker, reversed(first), reversed(second)))) * * def broadcast_chomp(smaller_key, larger_key): # <<<<<<<<<<<<<< * """Return a key appropriate for the given shape.""" * new_key = [] */ static PyObject *__pyx_pf_5ga4py_4gain_4util_4broadcast_chomp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_smaller_key, PyObject *__pyx_v_larger_key) { PyObject *__pyx_v_new_key = NULL; PyObject *__pyx_v_s = NULL; PyObject *__pyx_v_l = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; Py_ssize_t __pyx_t_4; PyObject *(*__pyx_t_5)(PyObject *); PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *(*__pyx_t_8)(PyObject *); int __pyx_t_9; int __pyx_t_10; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("broadcast_chomp", 0); __Pyx_TraceCall("broadcast_chomp", __pyx_f[0], 779); /* "ga4py/gain/util.pyx":781 * def broadcast_chomp(smaller_key, larger_key): * """Return a key appropriate for the given shape.""" * new_key = [] # <<<<<<<<<<<<<< * for s,l in zip(reversed(smaller_key),reversed(larger_key)): * if s == 1: */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_new_key = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":782 * """Return a key appropriate for the given shape.""" * new_key = [] * for s,l in zip(reversed(smaller_key),reversed(larger_key)): # <<<<<<<<<<<<<< * if s == 1: * new_key.append(slice(0,1,1)) */ __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_smaller_key); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_smaller_key); __Pyx_GIVEREF(__pyx_v_smaller_key); __pyx_t_2 = PyObject_Call(__pyx_builtin_reversed, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_larger_key); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_larger_key); __Pyx_GIVEREF(__pyx_v_larger_key); __pyx_t_3 = PyObject_Call(__pyx_builtin_reversed, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_zip, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) { __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; for (;;) { if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_1)) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_1)) { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_3 = __pyx_t_5(__pyx_t_1); if (unlikely(!__pyx_t_3)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_3); } if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); __pyx_t_6 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_6); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L6_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_s, __pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF_SET(__pyx_v_l, __pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/util.pyx":783 * new_key = [] * for s,l in zip(reversed(smaller_key),reversed(larger_key)): * if s == 1: # <<<<<<<<<<<<<< * new_key.append(slice(0,1,1)) * else: */ __pyx_t_3 = PyObject_RichCompare(__pyx_v_s, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_9) { /* "ga4py/gain/util.pyx":784 * for s,l in zip(reversed(smaller_key),reversed(larger_key)): * if s == 1: * new_key.append(slice(0,1,1)) # <<<<<<<<<<<<<< * else: * new_key.append(l) */ __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_k_tuple_40), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_new_key, __pyx_t_3); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L7; } /*else*/ { /* "ga4py/gain/util.pyx":786 * new_key.append(slice(0,1,1)) * else: * new_key.append(l) # <<<<<<<<<<<<<< * new_key.reverse() * return new_key */ __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_new_key, __pyx_v_l); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L7:; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":787 * else: * new_key.append(l) * new_key.reverse() # <<<<<<<<<<<<<< * return new_key * */ __pyx_t_10 = PyList_Reverse(__pyx_v_new_key); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":788 * new_key.append(l) * new_key.reverse() * return new_key # <<<<<<<<<<<<<< * * def unravel_index(x,dims): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_new_key)); __pyx_r = ((PyObject *)__pyx_v_new_key); goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("ga4py.gain.util.broadcast_chomp", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_new_key); __Pyx_XDECREF(__pyx_v_s); __Pyx_XDECREF(__pyx_v_l); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4util_7unravel_index(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4util_6unravel_index[] = "Like np.unravel_index, but 'x' can be an integer array.\n\n Yeah, I know, numpy 1.6.0 has this already, but we're based on 1.5.1.\n I copied the code and modified it from 1.5.1.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4util_7unravel_index = {__Pyx_NAMESTR("unravel_index"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_7unravel_index, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4util_6unravel_index)}; static PyObject *__pyx_pw_5ga4py_4gain_4util_7unravel_index(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_x = 0; PyObject *__pyx_v_dims = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("unravel_index (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__dims,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dims)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("unravel_index", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "unravel_index") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_x = values[0]; __pyx_v_dims = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("unravel_index", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.util.unravel_index", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4util_6unravel_index(__pyx_self, __pyx_v_x, __pyx_v_dims); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/util.pyx":790 * return new_key * * def unravel_index(x,dims): # <<<<<<<<<<<<<< * """Like np.unravel_index, but 'x' can be an integer array. * */ static PyObject *__pyx_pf_5ga4py_4gain_4util_6unravel_index(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x, PyObject *__pyx_v_dims) { PyObject *__pyx_v__nx = NULL; PyObject *__pyx_v_max = NULL; CYTHON_UNUSED PyObject *__pyx_v_idx = NULL; PyObject *__pyx_v_dim_prod = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; PyObject *__pyx_t_7 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("unravel_index", 0); __Pyx_TraceCall("unravel_index", __pyx_f[0], 790); __Pyx_INCREF(__pyx_v_x); /* "ga4py/gain/util.pyx":797 * * """ * import numpy as _nx # <<<<<<<<<<<<<< * x = _nx.asarray(x) * if x.ndim == 0: */ __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 797; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v__nx = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":798 * """ * import numpy as _nx * x = _nx.asarray(x) # <<<<<<<<<<<<<< * if x.ndim == 0: * return _nx.unravel_index(x,dims) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v__nx, __pyx_n_s__asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_x); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_x); __Pyx_GIVEREF(__pyx_v_x); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":799 * import numpy as _nx * x = _nx.asarray(x) * if x.ndim == 0: # <<<<<<<<<<<<<< * return _nx.unravel_index(x,dims) * max = _nx.prod(dims)-1 */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s__ndim); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_4) { /* "ga4py/gain/util.pyx":800 * x = _nx.asarray(x) * if x.ndim == 0: * return _nx.unravel_index(x,dims) # <<<<<<<<<<<<<< * max = _nx.prod(dims)-1 * if _nx.any(x>max) or _nx.any(x<0): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v__nx, __pyx_n_s__unravel_index); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_x); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_x); __Pyx_GIVEREF(__pyx_v_x); __Pyx_INCREF(__pyx_v_dims); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_dims); __Pyx_GIVEREF(__pyx_v_dims); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/util.pyx":801 * if x.ndim == 0: * return _nx.unravel_index(x,dims) * max = _nx.prod(dims)-1 # <<<<<<<<<<<<<< * if _nx.any(x>max) or _nx.any(x<0): * raise ValueError("Invalid index, must be 0 <= x <= number of elements.") */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v__nx, __pyx_n_s__prod); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_dims); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_dims); __Pyx_GIVEREF(__pyx_v_dims); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Subtract(__pyx_t_2, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_max = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":802 * return _nx.unravel_index(x,dims) * max = _nx.prod(dims)-1 * if _nx.any(x>max) or _nx.any(x<0): # <<<<<<<<<<<<<< * raise ValueError("Invalid index, must be 0 <= x <= number of elements.") * idx = _nx.empty_like(dims) */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v__nx, __pyx_n_s__any); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyObject_RichCompare(__pyx_v_x, __pyx_v_max, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!__pyx_t_4) { __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v__nx, __pyx_n_s__any); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_RichCompare(__pyx_v_x, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_6 = __pyx_t_5; } else { __pyx_t_6 = __pyx_t_4; } if (__pyx_t_6) { /* "ga4py/gain/util.pyx":803 * max = _nx.prod(dims)-1 * if _nx.any(x>max) or _nx.any(x<0): * raise ValueError("Invalid index, must be 0 <= x <= number of elements.") # <<<<<<<<<<<<<< * idx = _nx.empty_like(dims) * */ __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_42), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/util.pyx":804 * if _nx.any(x>max) or _nx.any(x<0): * raise ValueError("Invalid index, must be 0 <= x <= number of elements.") * idx = _nx.empty_like(dims) # <<<<<<<<<<<<<< * * # Take dimensions */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v__nx, __pyx_n_s__empty_like); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_dims); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_dims); __Pyx_GIVEREF(__pyx_v_dims); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_idx = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":816 * # Reverse * # [dcb,dc,d,1] * dim_prod = _nx.cumprod([1] + list(dims)[:0:-1])[::-1] # <<<<<<<<<<<<<< * # Indices become [x/dcb % a, x/dc % b, x/d % c, x/1 % d] * return tuple(x[:,None]//dim_prod % dims) */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v__nx, __pyx_n_s__cumprod); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_int_1); PyList_SET_ITEM(__pyx_t_3, 0, __pyx_int_1); __Pyx_GIVEREF(__pyx_int_1); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_dims); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_dims); __Pyx_GIVEREF(__pyx_v_dims); __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyObject_GetItem(__pyx_t_7, __pyx_k_slice_43); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyNumber_Add(((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_7)); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_t_7)); __Pyx_GIVEREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __pyx_t_7 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyObject_GetItem(__pyx_t_7, __pyx_k_slice_44); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_dim_prod = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":818 * dim_prod = _nx.cumprod([1] + list(dims)[:0:-1])[::-1] * # Indices become [x/dcb % a, x/dc % b, x/d % c, x/1 % d] * return tuple(x[:,None]//dim_prod % dims) # <<<<<<<<<<<<<< */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyObject_GetItem(__pyx_v_x, ((PyObject *)__pyx_k_tuple_46)); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 818; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyNumber_FloorDivide(__pyx_t_1, __pyx_v_dim_prod); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 818; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyNumber_Remainder(__pyx_t_7, __pyx_v_dims); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 818; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 818; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyTuple_Type))), ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 818; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("ga4py.gain.util.unravel_index", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v__nx); __Pyx_XDECREF(__pyx_v_max); __Pyx_XDECREF(__pyx_v_idx); __Pyx_XDECREF(__pyx_v_dim_prod); __Pyx_XDECREF(__pyx_v_x); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyMethodDef __pyx_methods[] = { {__Pyx_NAMESTR("listify"), (PyCFunction)__pyx_pw_5ga4py_4gain_4util_1listify, METH_O, __Pyx_DOCSTR(0)}, {0, 0, 0, 0} }; #if PY_MAJOR_VERSION >= 3 static struct PyModuleDef __pyx_moduledef = { #if PY_VERSION_HEX < 0x03020000 { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, #else PyModuleDef_HEAD_INIT, #endif __Pyx_NAMESTR("util"), __Pyx_DOCSTR(__pyx_k_47), /* m_doc */ -1, /* m_size */ __pyx_methods /* m_methods */, NULL, /* m_reload */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL /* m_free */ }; #endif static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0}, {&__pyx_kp_s_10, __pyx_k_10, sizeof(__pyx_k_10), 0, 0, 1, 0}, {&__pyx_n_s_100, __pyx_k_100, sizeof(__pyx_k_100), 0, 0, 1, 1}, {&__pyx_n_s_103, __pyx_k_103, sizeof(__pyx_k_103), 0, 0, 1, 1}, {&__pyx_n_s_106, __pyx_k_106, sizeof(__pyx_k_106), 0, 0, 1, 1}, {&__pyx_n_s_109, __pyx_k_109, sizeof(__pyx_k_109), 0, 0, 1, 1}, {&__pyx_kp_s_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 0, 1, 0}, {&__pyx_n_s_112, __pyx_k_112, sizeof(__pyx_k_112), 0, 0, 1, 1}, {&__pyx_n_s_115, __pyx_k_115, sizeof(__pyx_k_115), 0, 0, 1, 1}, {&__pyx_n_s_118, __pyx_k_118, sizeof(__pyx_k_118), 0, 0, 1, 1}, {&__pyx_kp_s_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 0, 1, 0}, {&__pyx_n_s_121, __pyx_k_121, sizeof(__pyx_k_121), 0, 0, 1, 1}, {&__pyx_n_s_124, __pyx_k_124, sizeof(__pyx_k_124), 0, 0, 1, 1}, {&__pyx_n_s_127, __pyx_k_127, sizeof(__pyx_k_127), 0, 0, 1, 1}, {&__pyx_kp_s_128, __pyx_k_128, sizeof(__pyx_k_128), 0, 0, 1, 0}, {&__pyx_kp_s_13, __pyx_k_13, sizeof(__pyx_k_13), 0, 0, 1, 0}, {&__pyx_n_s_132, __pyx_k_132, sizeof(__pyx_k_132), 0, 0, 1, 1}, {&__pyx_n_s_135, __pyx_k_135, sizeof(__pyx_k_135), 0, 0, 1, 1}, {&__pyx_n_s_138, __pyx_k_138, sizeof(__pyx_k_138), 0, 0, 1, 1}, {&__pyx_kp_s_14, __pyx_k_14, sizeof(__pyx_k_14), 0, 0, 1, 0}, {&__pyx_n_s_141, __pyx_k_141, sizeof(__pyx_k_141), 0, 0, 1, 1}, {&__pyx_n_s_144, __pyx_k_144, sizeof(__pyx_k_144), 0, 0, 1, 1}, {&__pyx_n_s_147, __pyx_k_147, sizeof(__pyx_k_147), 0, 0, 1, 1}, {&__pyx_kp_s_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 0, 1, 0}, {&__pyx_n_s_150, __pyx_k_150, sizeof(__pyx_k_150), 0, 0, 1, 1}, {&__pyx_n_s_153, __pyx_k_153, sizeof(__pyx_k_153), 0, 0, 1, 1}, {&__pyx_kp_s_154, __pyx_k_154, sizeof(__pyx_k_154), 0, 0, 1, 0}, {&__pyx_n_s_158, __pyx_k_158, sizeof(__pyx_k_158), 0, 0, 1, 1}, {&__pyx_kp_s_16, __pyx_k_16, sizeof(__pyx_k_16), 0, 0, 1, 0}, {&__pyx_n_s_161, __pyx_k_161, sizeof(__pyx_k_161), 0, 0, 1, 1}, {&__pyx_n_s_164, __pyx_k_164, sizeof(__pyx_k_164), 0, 0, 1, 1}, {&__pyx_n_s_167, __pyx_k_167, sizeof(__pyx_k_167), 0, 0, 1, 1}, {&__pyx_kp_s_17, __pyx_k_17, sizeof(__pyx_k_17), 0, 0, 1, 0}, {&__pyx_n_s_170, __pyx_k_170, sizeof(__pyx_k_170), 0, 0, 1, 1}, {&__pyx_n_s_173, __pyx_k_173, sizeof(__pyx_k_173), 0, 0, 1, 1}, {&__pyx_n_s_176, __pyx_k_176, sizeof(__pyx_k_176), 0, 0, 1, 1}, {&__pyx_n_s_179, __pyx_k_179, sizeof(__pyx_k_179), 0, 0, 1, 1}, {&__pyx_kp_s_18, __pyx_k_18, sizeof(__pyx_k_18), 0, 0, 1, 0}, {&__pyx_n_s_182, __pyx_k_182, sizeof(__pyx_k_182), 0, 0, 1, 1}, {&__pyx_n_s_185, __pyx_k_185, sizeof(__pyx_k_185), 0, 0, 1, 1}, {&__pyx_n_s_188, __pyx_k_188, sizeof(__pyx_k_188), 0, 0, 1, 1}, {&__pyx_n_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 1}, {&__pyx_n_s_191, __pyx_k_191, sizeof(__pyx_k_191), 0, 0, 1, 1}, {&__pyx_n_s_194, __pyx_k_194, sizeof(__pyx_k_194), 0, 0, 1, 1}, {&__pyx_n_s_197, __pyx_k_197, sizeof(__pyx_k_197), 0, 0, 1, 1}, {&__pyx_kp_s_2, __pyx_k_2, sizeof(__pyx_k_2), 0, 0, 1, 0}, {&__pyx_n_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 1}, {&__pyx_n_s_200, __pyx_k_200, sizeof(__pyx_k_200), 0, 0, 1, 1}, {&__pyx_n_s_203, __pyx_k_203, sizeof(__pyx_k_203), 0, 0, 1, 1}, {&__pyx_n_s_206, __pyx_k_206, sizeof(__pyx_k_206), 0, 0, 1, 1}, {&__pyx_n_s_209, __pyx_k_209, sizeof(__pyx_k_209), 0, 0, 1, 1}, {&__pyx_n_s_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 1, 1}, {&__pyx_n_s_212, __pyx_k_212, sizeof(__pyx_k_212), 0, 0, 1, 1}, {&__pyx_n_s_215, __pyx_k_215, sizeof(__pyx_k_215), 0, 0, 1, 1}, {&__pyx_n_s_218, __pyx_k_218, sizeof(__pyx_k_218), 0, 0, 1, 1}, {&__pyx_n_s_219, __pyx_k_219, sizeof(__pyx_k_219), 0, 0, 1, 1}, {&__pyx_n_s_222, __pyx_k_222, sizeof(__pyx_k_222), 0, 0, 1, 1}, {&__pyx_n_s_225, __pyx_k_225, sizeof(__pyx_k_225), 0, 0, 1, 1}, {&__pyx_n_s_228, __pyx_k_228, sizeof(__pyx_k_228), 0, 0, 1, 1}, {&__pyx_kp_s_229, __pyx_k_229, sizeof(__pyx_k_229), 0, 0, 1, 0}, {&__pyx_kp_s_23, __pyx_k_23, sizeof(__pyx_k_23), 0, 0, 1, 0}, {&__pyx_kp_u_236, __pyx_k_236, sizeof(__pyx_k_236), 0, 1, 0, 0}, {&__pyx_kp_u_237, __pyx_k_237, sizeof(__pyx_k_237), 0, 1, 0, 0}, {&__pyx_kp_u_238, __pyx_k_238, sizeof(__pyx_k_238), 0, 1, 0, 0}, {&__pyx_kp_u_239, __pyx_k_239, sizeof(__pyx_k_239), 0, 1, 0, 0}, {&__pyx_kp_u_240, __pyx_k_240, sizeof(__pyx_k_240), 0, 1, 0, 0}, {&__pyx_kp_u_241, __pyx_k_241, sizeof(__pyx_k_241), 0, 1, 0, 0}, {&__pyx_kp_u_242, __pyx_k_242, sizeof(__pyx_k_242), 0, 1, 0, 0}, {&__pyx_kp_u_243, __pyx_k_243, sizeof(__pyx_k_243), 0, 1, 0, 0}, {&__pyx_kp_u_244, __pyx_k_244, sizeof(__pyx_k_244), 0, 1, 0, 0}, {&__pyx_kp_u_245, __pyx_k_245, sizeof(__pyx_k_245), 0, 1, 0, 0}, {&__pyx_kp_s_26, __pyx_k_26, sizeof(__pyx_k_26), 0, 0, 1, 0}, {&__pyx_kp_s_27, __pyx_k_27, sizeof(__pyx_k_27), 0, 0, 1, 0}, {&__pyx_kp_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 0}, {&__pyx_kp_s_32, __pyx_k_32, sizeof(__pyx_k_32), 0, 0, 1, 0}, {&__pyx_kp_s_34, __pyx_k_34, sizeof(__pyx_k_34), 0, 0, 1, 0}, {&__pyx_kp_s_35, __pyx_k_35, sizeof(__pyx_k_35), 0, 0, 1, 0}, {&__pyx_kp_s_38, __pyx_k_38, sizeof(__pyx_k_38), 0, 0, 1, 0}, {&__pyx_n_s_39, __pyx_k_39, sizeof(__pyx_k_39), 0, 0, 1, 1}, {&__pyx_kp_s_4, __pyx_k_4, sizeof(__pyx_k_4), 0, 0, 1, 0}, {&__pyx_kp_s_41, __pyx_k_41, sizeof(__pyx_k_41), 0, 0, 1, 0}, {&__pyx_kp_s_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 0, 1, 0}, {&__pyx_n_s_50, __pyx_k_50, sizeof(__pyx_k_50), 0, 0, 1, 1}, {&__pyx_n_s_53, __pyx_k_53, sizeof(__pyx_k_53), 0, 0, 1, 1}, {&__pyx_n_s_56, __pyx_k_56, sizeof(__pyx_k_56), 0, 0, 1, 1}, {&__pyx_n_s_59, __pyx_k_59, sizeof(__pyx_k_59), 0, 0, 1, 1}, {&__pyx_kp_s_6, __pyx_k_6, sizeof(__pyx_k_6), 0, 0, 1, 0}, {&__pyx_n_s_62, __pyx_k_62, sizeof(__pyx_k_62), 0, 0, 1, 1}, {&__pyx_n_s_65, __pyx_k_65, sizeof(__pyx_k_65), 0, 0, 1, 1}, {&__pyx_n_s_68, __pyx_k_68, sizeof(__pyx_k_68), 0, 0, 1, 1}, {&__pyx_kp_s_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 0, 1, 0}, {&__pyx_n_s_71, __pyx_k_71, sizeof(__pyx_k_71), 0, 0, 1, 1}, {&__pyx_kp_s_72, __pyx_k_72, sizeof(__pyx_k_72), 0, 0, 1, 0}, {&__pyx_n_s_75, __pyx_k_75, sizeof(__pyx_k_75), 0, 0, 1, 1}, {&__pyx_n_s_78, __pyx_k_78, sizeof(__pyx_k_78), 0, 0, 1, 1}, {&__pyx_kp_s_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 0, 1, 0}, {&__pyx_n_s_81, __pyx_k_81, sizeof(__pyx_k_81), 0, 0, 1, 1}, {&__pyx_n_s_84, __pyx_k_84, sizeof(__pyx_k_84), 0, 0, 1, 1}, {&__pyx_n_s_87, __pyx_k_87, sizeof(__pyx_k_87), 0, 0, 1, 1}, {&__pyx_kp_s_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 0, 1, 0}, {&__pyx_n_s_90, __pyx_k_90, sizeof(__pyx_k_90), 0, 0, 1, 1}, {&__pyx_n_s_93, __pyx_k_93, sizeof(__pyx_k_93), 0, 0, 1, 1}, {&__pyx_n_s_96, __pyx_k_96, sizeof(__pyx_k_96), 0, 0, 1, 1}, {&__pyx_kp_s_97, __pyx_k_97, sizeof(__pyx_k_97), 0, 0, 1, 0}, {&__pyx_n_s__AttributeError, __pyx_k__AttributeError, sizeof(__pyx_k__AttributeError), 0, 0, 1, 1}, {&__pyx_n_s__Ellipsis, __pyx_k__Ellipsis, sizeof(__pyx_k__Ellipsis), 0, 0, 1, 1}, {&__pyx_n_s__FixedKey, __pyx_k__FixedKey, sizeof(__pyx_k__FixedKey), 0, 0, 1, 1}, {&__pyx_n_s__IndexError, __pyx_k__IndexError, sizeof(__pyx_k__IndexError), 0, 0, 1, 1}, {&__pyx_n_s__Key, __pyx_k__Key, sizeof(__pyx_k__Key), 0, 0, 1, 1}, {&__pyx_n_s__MasterKey, __pyx_k__MasterKey, sizeof(__pyx_k__MasterKey), 0, 0, 1, 1}, {&__pyx_n_s__NoneKey, __pyx_k__NoneKey, sizeof(__pyx_k__NoneKey), 0, 0, 1, 1}, {&__pyx_n_s__None_key, __pyx_k__None_key, sizeof(__pyx_k__None_key), 0, 0, 1, 1}, {&__pyx_n_s__NotImplementedError, __pyx_k__NotImplementedError, sizeof(__pyx_k__NotImplementedError), 0, 0, 1, 1}, {&__pyx_n_s__RangeKey, __pyx_k__RangeKey, sizeof(__pyx_k__RangeKey), 0, 0, 1, 1}, {&__pyx_n_s__T, __pyx_k__T, sizeof(__pyx_k__T), 0, 0, 1, 1}, {&__pyx_n_s__TT, __pyx_k__TT, sizeof(__pyx_k__TT), 0, 0, 1, 1}, {&__pyx_n_s__TypeError, __pyx_k__TypeError, sizeof(__pyx_k__TypeError), 0, 0, 1, 1}, {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1}, {&__pyx_n_s____class__, __pyx_k____class__, sizeof(__pyx_k____class__), 0, 0, 1, 1}, {&__pyx_n_s____eq__, __pyx_k____eq__, sizeof(__pyx_k____eq__), 0, 0, 1, 1}, {&__pyx_n_s____getitem__, __pyx_k____getitem__, sizeof(__pyx_k____getitem__), 0, 0, 1, 1}, {&__pyx_n_s____import__, __pyx_k____import__, sizeof(__pyx_k____import__), 0, 0, 1, 1}, {&__pyx_n_s____init__, __pyx_k____init__, sizeof(__pyx_k____init__), 0, 0, 1, 1}, {&__pyx_n_s____int__, __pyx_k____int__, sizeof(__pyx_k____int__), 0, 0, 1, 1}, {&__pyx_n_s____iter__, __pyx_k____iter__, sizeof(__pyx_k____iter__), 0, 0, 1, 1}, {&__pyx_n_s____long__, __pyx_k____long__, sizeof(__pyx_k____long__), 0, 0, 1, 1}, {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, {&__pyx_n_s____metaclass__, __pyx_k____metaclass__, sizeof(__pyx_k____metaclass__), 0, 0, 1, 1}, {&__pyx_n_s____module__, __pyx_k____module__, sizeof(__pyx_k____module__), 0, 0, 1, 1}, {&__pyx_n_s____qualname__, __pyx_k____qualname__, sizeof(__pyx_k____qualname__), 0, 0, 1, 1}, {&__pyx_n_s____repr__, __pyx_k____repr__, sizeof(__pyx_k____repr__), 0, 0, 1, 1}, {&__pyx_n_s____str__, __pyx_k____str__, sizeof(__pyx_k____str__), 0, 0, 1, 1}, {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, {&__pyx_n_s___count_instances, __pyx_k___count_instances, sizeof(__pyx_k___count_instances), 0, 0, 1, 1}, {&__pyx_n_s___get_instances, __pyx_k___get_instances, sizeof(__pyx_k___get_instances), 0, 0, 1, 1}, {&__pyx_n_s___nx, __pyx_k___nx, sizeof(__pyx_k___nx), 0, 0, 1, 1}, {&__pyx_n_s___start, __pyx_k___start, sizeof(__pyx_k___start), 0, 0, 1, 1}, {&__pyx_n_s___step, __pyx_k___step, sizeof(__pyx_k___step), 0, 0, 1, 1}, {&__pyx_n_s___stop, __pyx_k___stop, sizeof(__pyx_k___stop), 0, 0, 1, 1}, {&__pyx_n_s__access_key, __pyx_k__access_key, sizeof(__pyx_k__access_key), 0, 0, 1, 1}, {&__pyx_n_s__ad, __pyx_k__ad, sizeof(__pyx_k__ad), 0, 0, 1, 1}, {&__pyx_n_s__any, __pyx_k__any, sizeof(__pyx_k__any), 0, 0, 1, 1}, {&__pyx_n_s__append, __pyx_k__append, sizeof(__pyx_k__append), 0, 0, 1, 1}, {&__pyx_n_s__args, __pyx_k__args, sizeof(__pyx_k__args), 0, 0, 1, 1}, {&__pyx_n_s__asarray, __pyx_k__asarray, sizeof(__pyx_k__asarray), 0, 0, 1, 1}, {&__pyx_n_s__axes, __pyx_k__axes, sizeof(__pyx_k__axes), 0, 0, 1, 1}, {&__pyx_n_s__bound_by_lohi, __pyx_k__bound_by_lohi, sizeof(__pyx_k__bound_by_lohi), 0, 0, 1, 1}, {&__pyx_n_s__broadcast_chomp, __pyx_k__broadcast_chomp, sizeof(__pyx_k__broadcast_chomp), 0, 0, 1, 1}, {&__pyx_n_s__broadcast_shape, __pyx_k__broadcast_shape, sizeof(__pyx_k__broadcast_shape), 0, 0, 1, 1}, {&__pyx_n_s__count, __pyx_k__count, sizeof(__pyx_k__count), 0, 0, 1, 1}, {&__pyx_n_s__count_real_keys, __pyx_k__count_real_keys, sizeof(__pyx_k__count_real_keys), 0, 0, 1, 1}, {&__pyx_n_s__cumprod, __pyx_k__cumprod, sizeof(__pyx_k__cumprod), 0, 0, 1, 1}, {&__pyx_n_s__data, __pyx_k__data, sizeof(__pyx_k__data), 0, 0, 1, 1}, {&__pyx_n_s__datum, __pyx_k__datum, sizeof(__pyx_k__datum), 0, 0, 1, 1}, {&__pyx_n_s__dim_prod, __pyx_k__dim_prod, sizeof(__pyx_k__dim_prod), 0, 0, 1, 1}, {&__pyx_n_s__dims, __pyx_k__dims, sizeof(__pyx_k__dims), 0, 0, 1, 1}, {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1}, {&__pyx_n_s__ellipsis_count, __pyx_k__ellipsis_count, sizeof(__pyx_k__ellipsis_count), 0, 0, 1, 1}, {&__pyx_n_s__ellipsis_index, __pyx_k__ellipsis_index, sizeof(__pyx_k__ellipsis_index), 0, 0, 1, 1}, {&__pyx_n_s__empty_like, __pyx_k__empty_like, sizeof(__pyx_k__empty_like), 0, 0, 1, 1}, {&__pyx_n_s__enumerate, __pyx_k__enumerate, sizeof(__pyx_k__enumerate), 0, 0, 1, 1}, {&__pyx_n_s__first, __pyx_k__first, sizeof(__pyx_k__first), 0, 0, 1, 1}, {&__pyx_n_s__fixed, __pyx_k__fixed, sizeof(__pyx_k__fixed), 0, 0, 1, 1}, {&__pyx_n_s__get_key, __pyx_k__get_key, sizeof(__pyx_k__get_key), 0, 0, 1, 1}, {&__pyx_n_s__get_ndim, __pyx_k__get_ndim, sizeof(__pyx_k__get_ndim), 0, 0, 1, 1}, {&__pyx_n_s__get_origin, __pyx_k__get_origin, sizeof(__pyx_k__get_origin), 0, 0, 1, 1}, {&__pyx_n_s__get_original_ndim, __pyx_k__get_original_ndim, sizeof(__pyx_k__get_original_ndim), 0, 0, 1, 1}, {&__pyx_n_s__get_shape, __pyx_k__get_shape, sizeof(__pyx_k__get_shape), 0, 0, 1, 1}, {&__pyx_n_s__get_size, __pyx_k__get_size, sizeof(__pyx_k__get_size), 0, 0, 1, 1}, {&__pyx_n_s__get_sorted_origin, __pyx_k__get_sorted_origin, sizeof(__pyx_k__get_sorted_origin), 0, 0, 1, 1}, {&__pyx_n_s__guess, __pyx_k__guess, sizeof(__pyx_k__guess), 0, 0, 1, 1}, {&__pyx_n_s__h, __pyx_k__h, sizeof(__pyx_k__h), 0, 0, 1, 1}, {&__pyx_n_s__hi, __pyx_k__hi, sizeof(__pyx_k__hi), 0, 0, 1, 1}, {&__pyx_n_s__i, __pyx_k__i, sizeof(__pyx_k__i), 0, 0, 1, 1}, {&__pyx_n_s__idx, __pyx_k__idx, sizeof(__pyx_k__idx), 0, 0, 1, 1}, {&__pyx_n_s__index, __pyx_k__index, sizeof(__pyx_k__index), 0, 0, 1, 1}, {&__pyx_n_s__indices, __pyx_k__indices, sizeof(__pyx_k__indices), 0, 0, 1, 1}, {&__pyx_n_s__int64, __pyx_k__int64, sizeof(__pyx_k__int64), 0, 0, 1, 1}, {&__pyx_n_s__inverse, __pyx_k__inverse, sizeof(__pyx_k__inverse), 0, 0, 1, 1}, {&__pyx_n_s__item, __pyx_k__item, sizeof(__pyx_k__item), 0, 0, 1, 1}, {&__pyx_n_s__iter_origins, __pyx_k__iter_origins, sizeof(__pyx_k__iter_origins), 0, 0, 1, 1}, {&__pyx_n_s__iter_ranged_origin, __pyx_k__iter_ranged_origin, sizeof(__pyx_k__iter_ranged_origin), 0, 0, 1, 1}, {&__pyx_n_s__key, __pyx_k__key, sizeof(__pyx_k__key), 0, 0, 1, 1}, {&__pyx_n_s__key_iter, __pyx_k__key_iter, sizeof(__pyx_k__key_iter), 0, 0, 1, 1}, {&__pyx_n_s__l, __pyx_k__l, sizeof(__pyx_k__l), 0, 0, 1, 1}, {&__pyx_n_s__larger_key, __pyx_k__larger_key, sizeof(__pyx_k__larger_key), 0, 0, 1, 1}, {&__pyx_n_s__length, __pyx_k__length, sizeof(__pyx_k__length), 0, 0, 1, 1}, {&__pyx_n_s__lo, __pyx_k__lo, sizeof(__pyx_k__lo), 0, 0, 1, 1}, {&__pyx_n_s__lohi_T, __pyx_k__lohi_T, sizeof(__pyx_k__lohi_T), 0, 0, 1, 1}, {&__pyx_n_s__map, __pyx_k__map, sizeof(__pyx_k__map), 0, 0, 1, 1}, {&__pyx_n_s__max, __pyx_k__max, sizeof(__pyx_k__max), 0, 0, 1, 1}, {&__pyx_n_s__ndim, __pyx_k__ndim, sizeof(__pyx_k__ndim), 0, 0, 1, 1}, {&__pyx_n_s__need_strided, __pyx_k__need_strided, sizeof(__pyx_k__need_strided), 0, 0, 1, 1}, {&__pyx_n_s__new_data, __pyx_k__new_data, sizeof(__pyx_k__new_data), 0, 0, 1, 1}, {&__pyx_n_s__new_fixed, __pyx_k__new_fixed, sizeof(__pyx_k__new_fixed), 0, 0, 1, 1}, {&__pyx_n_s__new_key, __pyx_k__new_key, sizeof(__pyx_k__new_key), 0, 0, 1, 1}, {&__pyx_n_s__new_start, __pyx_k__new_start, sizeof(__pyx_k__new_start), 0, 0, 1, 1}, {&__pyx_n_s__new_stop, __pyx_k__new_stop, sizeof(__pyx_k__new_stop), 0, 0, 1, 1}, {&__pyx_n_s__next, __pyx_k__next, sizeof(__pyx_k__next), 0, 0, 1, 1}, {&__pyx_n_s__next_key, __pyx_k__next_key, sizeof(__pyx_k__next_key), 0, 0, 1, 1}, {&__pyx_n_s__nlo, __pyx_k__nlo, sizeof(__pyx_k__nlo), 0, 0, 1, 1}, {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1}, {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1}, {&__pyx_n_s__object, __pyx_k__object, sizeof(__pyx_k__object), 0, 0, 1, 1}, {&__pyx_n_s__offset, __pyx_k__offset, sizeof(__pyx_k__offset), 0, 0, 1, 1}, {&__pyx_n_s__origin, __pyx_k__origin, sizeof(__pyx_k__origin), 0, 0, 1, 1}, {&__pyx_n_s__origins, __pyx_k__origins, sizeof(__pyx_k__origins), 0, 0, 1, 1}, {&__pyx_n_s__other, __pyx_k__other, sizeof(__pyx_k__other), 0, 0, 1, 1}, {&__pyx_n_s__prod, __pyx_k__prod, sizeof(__pyx_k__prod), 0, 0, 1, 1}, {&__pyx_n_s__property, __pyx_k__property, sizeof(__pyx_k__property), 0, 0, 1, 1}, {&__pyx_n_s__pyobj, __pyx_k__pyobj, sizeof(__pyx_k__pyobj), 0, 0, 1, 1}, {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1}, {&__pyx_n_s__ranged, __pyx_k__ranged, sizeof(__pyx_k__ranged), 0, 0, 1, 1}, {&__pyx_n_s__reduce, __pyx_k__reduce, sizeof(__pyx_k__reduce), 0, 0, 1, 1}, {&__pyx_n_s__remove, __pyx_k__remove, sizeof(__pyx_k__remove), 0, 0, 1, 1}, {&__pyx_n_s__replace_ellipsis, __pyx_k__replace_ellipsis, sizeof(__pyx_k__replace_ellipsis), 0, 0, 1, 1}, {&__pyx_n_s__result, __pyx_k__result, sizeof(__pyx_k__result), 0, 0, 1, 1}, {&__pyx_n_s__reversed, __pyx_k__reversed, sizeof(__pyx_k__reversed), 0, 0, 1, 1}, {&__pyx_n_s__ro, __pyx_k__ro, sizeof(__pyx_k__ro), 0, 0, 1, 1}, {&__pyx_n_s__s, __pyx_k__s, sizeof(__pyx_k__s), 0, 0, 1, 1}, {&__pyx_n_s__second, __pyx_k__second, sizeof(__pyx_k__second), 0, 0, 1, 1}, {&__pyx_n_s__self, __pyx_k__self, sizeof(__pyx_k__self), 0, 0, 1, 1}, {&__pyx_n_s__shape, __pyx_k__shape, sizeof(__pyx_k__shape), 0, 0, 1, 1}, {&__pyx_n_s__shifted, __pyx_k__shifted, sizeof(__pyx_k__shifted), 0, 0, 1, 1}, {&__pyx_n_s__size, __pyx_k__size, sizeof(__pyx_k__size), 0, 0, 1, 1}, {&__pyx_n_s__sk, __pyx_k__sk, sizeof(__pyx_k__sk), 0, 0, 1, 1}, {&__pyx_n_s__smaller_key, __pyx_k__smaller_key, sizeof(__pyx_k__smaller_key), 0, 0, 1, 1}, {&__pyx_n_s__sorted_origin, __pyx_k__sorted_origin, sizeof(__pyx_k__sorted_origin), 0, 0, 1, 1}, {&__pyx_n_s__start, __pyx_k__start, sizeof(__pyx_k__start), 0, 0, 1, 1}, {&__pyx_n_s__step, __pyx_k__step, sizeof(__pyx_k__step), 0, 0, 1, 1}, {&__pyx_n_s__stop, __pyx_k__stop, sizeof(__pyx_k__stop), 0, 0, 1, 1}, {&__pyx_n_s__transpose, __pyx_k__transpose, sizeof(__pyx_k__transpose), 0, 0, 1, 1}, {&__pyx_n_s__unravel_index, __pyx_k__unravel_index, sizeof(__pyx_k__unravel_index), 0, 0, 1, 1}, {&__pyx_n_s__val, __pyx_k__val, sizeof(__pyx_k__val), 0, 0, 1, 1}, {&__pyx_n_s__value, __pyx_k__value, sizeof(__pyx_k__value), 0, 0, 1, 1}, {&__pyx_n_s__worker, __pyx_k__worker, sizeof(__pyx_k__worker), 0, 0, 1, 1}, {&__pyx_n_s__x, __pyx_k__x, sizeof(__pyx_k__x), 0, 0, 1, 1}, {&__pyx_n_s__y, __pyx_k__y, sizeof(__pyx_k__y), 0, 0, 1, 1}, {&__pyx_n_s__zip, __pyx_k__zip, sizeof(__pyx_k__zip), 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0} }; static int __Pyx_InitCachedBuiltins(void) { __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s__object); if (!__pyx_builtin_object) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_property = __Pyx_GetBuiltinName(__pyx_n_s__property); if (!__pyx_builtin_property) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s__NotImplementedError); if (!__pyx_builtin_NotImplementedError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s__IndexError); if (!__pyx_builtin_IndexError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s__AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s__TypeError); if (!__pyx_builtin_TypeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s__enumerate); if (!__pyx_builtin_enumerate) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_reduce = __Pyx_GetBuiltinName(__pyx_n_s__reduce); if (!__pyx_builtin_reduce) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s__Ellipsis); if (!__pyx_builtin_Ellipsis) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_reversed = __Pyx_GetBuiltinName(__pyx_n_s__reversed); if (!__pyx_builtin_reversed) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_map = __Pyx_GetBuiltinName(__pyx_n_s__map); if (!__pyx_builtin_map) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_zip = __Pyx_GetBuiltinName(__pyx_n_s__zip); if (!__pyx_builtin_zip) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} return 0; __pyx_L1_error:; return -1; } static int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); /* "ga4py/gain/util.pyx":544 * key = [key] * ndim = self.ndim * count_real_keys = len(key)-key.count(None)-key.count(Ellipsis) # <<<<<<<<<<<<<< * if count_real_keys > ndim: * raise IndexError, "invalid index %s[%s]" % (self,key) */ __pyx_k_tuple_22 = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_k_tuple_22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_22); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_22)); /* "ga4py/gain/util.pyx":554 * ellipsis_count = key.count(Ellipsis) * key = (key[:ellipsis_index] * + ([slice(None,None,None)] * (ndim-count_real_keys)) # <<<<<<<<<<<<<< * + key[ellipsis_index+1:]) * # remove all remaining Ellipsis from key */ __pyx_k_tuple_24 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_tuple_24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_24); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_24)); /* "ga4py/gain/util.pyx":567 * key = self.replace_ellipsis(key) * new_data = [] * new_fixed = self.fixed[:] # copy fixed dimensions # <<<<<<<<<<<<<< * key_iter = iter(key) * for item in self.data: */ __pyx_k_slice_25 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_25); __Pyx_GIVEREF(__pyx_k_slice_25); /* "ga4py/gain/util.pyx":657 * * """ * return [None if isinstance(datum, NoneKey) else slice(None,None,None) # <<<<<<<<<<<<<< * for datum in self.data] * */ __pyx_k_tuple_28 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_tuple_28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_28); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_28)); /* "ga4py/gain/util.pyx":673 * hi.append(item.value+1) * sk.append(1) * ad.append(slice(0,None,None)) # <<<<<<<<<<<<<< * elif isinstance(item, RangeKey): * if item.step > 1 or item.step < -1: */ __pyx_k_tuple_29 = PyTuple_Pack(3, __pyx_int_0, Py_None, Py_None); if (unlikely(!__pyx_k_tuple_29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_29); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_29)); /* "ga4py/gain/util.pyx":682 * hi.append(item.start+1) * sk.append(-item.step) * ad.append(slice(None,None,-1)) # <<<<<<<<<<<<<< * else: * lo.append(item.start) */ __pyx_k_tuple_30 = PyTuple_Pack(3, Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_k_tuple_30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_30); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_30)); /* "ga4py/gain/util.pyx":687 * hi.append(item.stop) * sk.append(item.step) * ad.append(slice(0,None,None)) # <<<<<<<<<<<<<< * else: * raise TypeError, "unhandled piece of MasterKey" */ __pyx_k_tuple_31 = PyTuple_Pack(3, __pyx_int_0, Py_None, Py_None); if (unlikely(!__pyx_k_tuple_31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 687; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_31); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_31)); /* "ga4py/gain/util.pyx":731 * result.append(slice(offset, offset+ro.size, 1)) * elif isinstance(datum, NoneKey): * result.append(slice(None,None,None)) # <<<<<<<<<<<<<< * else: * raise ValueError, "MasterKey contained unknown object" */ __pyx_k_tuple_33 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_tuple_33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_33); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_33)); /* "ga4py/gain/util.pyx":770 * def broadcast_shape(first, second): * """Return the broadcasted version of shapes first and second.""" * def worker(x,y): # <<<<<<<<<<<<<< * if x is None: x = 1 * if y is None: y = 1 */ __pyx_k_tuple_36 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__x), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 770; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_36); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_36)); __pyx_k_codeobj_37 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__worker, 770, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 770; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":784 * for s,l in zip(reversed(smaller_key),reversed(larger_key)): * if s == 1: * new_key.append(slice(0,1,1)) # <<<<<<<<<<<<<< * else: * new_key.append(l) */ __pyx_k_tuple_40 = PyTuple_Pack(3, __pyx_int_0, __pyx_int_1, __pyx_int_1); if (unlikely(!__pyx_k_tuple_40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_40); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_40)); /* "ga4py/gain/util.pyx":803 * max = _nx.prod(dims)-1 * if _nx.any(x>max) or _nx.any(x<0): * raise ValueError("Invalid index, must be 0 <= x <= number of elements.") # <<<<<<<<<<<<<< * idx = _nx.empty_like(dims) * */ __pyx_k_tuple_42 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_41)); if (unlikely(!__pyx_k_tuple_42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_42); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_42)); /* "ga4py/gain/util.pyx":816 * # Reverse * # [dcb,dc,d,1] * dim_prod = _nx.cumprod([1] + list(dims)[:0:-1])[::-1] # <<<<<<<<<<<<<< * # Indices become [x/dcb % a, x/dc % b, x/d % c, x/1 % d] * return tuple(x[:,None]//dim_prod % dims) */ __pyx_k_slice_43 = PySlice_New(Py_None, __pyx_int_0, __pyx_int_neg_1); if (unlikely(!__pyx_k_slice_43)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_43); __Pyx_GIVEREF(__pyx_k_slice_43); __pyx_k_slice_44 = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_k_slice_44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_44); __Pyx_GIVEREF(__pyx_k_slice_44); /* "ga4py/gain/util.pyx":818 * dim_prod = _nx.cumprod([1] + list(dims)[:0:-1])[::-1] * # Indices become [x/dcb % a, x/dc % b, x/d % c, x/1 % d] * return tuple(x[:,None]//dim_prod % dims) # <<<<<<<<<<<<<< */ __pyx_k_slice_45 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 818; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_45); __Pyx_GIVEREF(__pyx_k_slice_45); __pyx_k_tuple_46 = PyTuple_Pack(2, __pyx_k_slice_45, Py_None); if (unlikely(!__pyx_k_tuple_46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 818; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_46); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_46)); /* "ga4py/gain/util.pyx":44 * * """ * def __init__(self): # <<<<<<<<<<<<<< * """Create a new Key with origin=None.""" * self.origin = None */ __pyx_k_tuple_48 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_48); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_48)); __pyx_k_codeobj_49 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____init__, 44, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":48 * self.origin = None * * def __eq__(self, other): # <<<<<<<<<<<<<< * """x.__eq__(y) <==> x==y * */ __pyx_k_tuple_51 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__other)); if (unlikely(!__pyx_k_tuple_51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_51); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_51)); __pyx_k_codeobj_52 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____eq__, 48, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":59 * raise NotImplementedError, "subclasses must define this" * * def __getitem__(self, key): # <<<<<<<<<<<<<< * """x.__getitem__(y) <==> x[y] * */ __pyx_k_tuple_54 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key)); if (unlikely(!__pyx_k_tuple_54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_54); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_54)); __pyx_k_codeobj_55 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_54, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____getitem__, 59, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":72 * raise NotImplementedError, "subclasses must define this" * * def __repr__(self): # <<<<<<<<<<<<<< * return str(self) * */ __pyx_k_tuple_57 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_57); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_57)); __pyx_k_codeobj_58 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____repr__, 72, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":75 * return str(self) * * def __str__(self): # <<<<<<<<<<<<<< * return "Key()" * */ __pyx_k_tuple_60 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_60); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_60)); __pyx_k_codeobj_61 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_60, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____str__, 75, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":78 * return "Key()" * * def bound_by_lohi(self, lo, hi): # <<<<<<<<<<<<<< * """Return a new Key modified to fit between lo and hi. * */ __pyx_k_tuple_63 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi)); if (unlikely(!__pyx_k_tuple_63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_63); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_63)); __pyx_k_codeobj_64 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_63, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__bound_by_lohi, 78, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_64)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":89 * raise NotImplementedError, "subclasses must define this" * * def get_size(self): # <<<<<<<<<<<<<< * """Returns number of elements represented by this Key. * */ __pyx_k_tuple_66 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_66)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_66); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_66)); __pyx_k_codeobj_67 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_66, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__get_size, 89, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_67)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":100 * size = property(get_size) * * def pyobj(self): # <<<<<<<<<<<<<< * """Returns a Python object based on this Key e.g. slice, int, None. * */ __pyx_k_tuple_69 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_69)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_69); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_69)); __pyx_k_codeobj_70 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_69, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__pyobj, 100, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_70)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":122 * * """ * def __init__(self): # <<<<<<<<<<<<<< * Key.__init__(self) * */ __pyx_k_tuple_73 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_73)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_73); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_73)); __pyx_k_codeobj_74 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_73, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____init__, 122, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_74)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":125 * Key.__init__(self) * * def __eq__(self, other): # <<<<<<<<<<<<<< * """Returns True of other is None or a NoneKey.""" * return isinstance(other, (type(None),NoneKey)) */ __pyx_k_tuple_76 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__other)); if (unlikely(!__pyx_k_tuple_76)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_76); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_76)); __pyx_k_codeobj_77 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_76, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____eq__, 125, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_77)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":129 * return isinstance(other, (type(None),NoneKey)) * * def __getitem__(self, key): # <<<<<<<<<<<<<< * """x.__getitem__(y) <==> x[y] * */ __pyx_k_tuple_79 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key), ((PyObject *)__pyx_n_s__start), ((PyObject *)__pyx_n_s__stop), ((PyObject *)__pyx_n_s__step)); if (unlikely(!__pyx_k_tuple_79)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_79); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_79)); __pyx_k_codeobj_80 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_79, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____getitem__, 129, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_80)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":152 * return None # on purpose not self -- indicates index removal * * def __repr__(self): # <<<<<<<<<<<<<< * return str(self) * */ __pyx_k_tuple_82 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_82)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_82); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_82)); __pyx_k_codeobj_83 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_82, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____repr__, 152, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_83)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":155 * return str(self) * * def __str__(self): # <<<<<<<<<<<<<< * return "NoneKey()" * */ __pyx_k_tuple_85 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_85)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_85); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_85)); __pyx_k_codeobj_86 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_85, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____str__, 155, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_86)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":158 * return "NoneKey()" * * def bound_by_lohi(self, lo, hi): # <<<<<<<<<<<<<< * """Always raises NotImplementedError.""" * raise NotImplementedError, "bound_by_lohi nonsensical for NoneKey" */ __pyx_k_tuple_88 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi)); if (unlikely(!__pyx_k_tuple_88)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_88); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_88)); __pyx_k_codeobj_89 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_88, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__bound_by_lohi, 158, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_89)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":162 * raise NotImplementedError, "bound_by_lohi nonsensical for NoneKey" * * def get_size(self): # <<<<<<<<<<<<<< * """Always returns 1.""" * return 1 */ __pyx_k_tuple_91 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_91)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_91); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_91)); __pyx_k_codeobj_92 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_91, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__get_size, 162, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_92)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":168 * size = property(get_size) * * def pyobj(self): # <<<<<<<<<<<<<< * """Returns a Python object based on this Key (always None).""" * return None */ __pyx_k_tuple_94 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_94)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_94); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_94)); __pyx_k_codeobj_95 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_94, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__pyobj, 168, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_95)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":190 * * """ * def __init__(self, value, origin): # <<<<<<<<<<<<<< * """A integer value and an integer origin must be given. * */ __pyx_k_tuple_98 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__value), ((PyObject *)__pyx_n_s__origin)); if (unlikely(!__pyx_k_tuple_98)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_98); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_98)); __pyx_k_codeobj_99 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_98, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____init__, 190, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_99)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":203 * assert self.origin >= 0 * * def __eq__(self, other): # <<<<<<<<<<<<<< * """Compares the 'value' attributes.""" * if hasattr(other,'value'): */ __pyx_k_tuple_101 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__other)); if (unlikely(!__pyx_k_tuple_101)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_101); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_101)); __pyx_k_codeobj_102 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_101, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____eq__, 203, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_102)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":209 * return False * * def __getitem__(self, key): # <<<<<<<<<<<<<< * """You cannot index a FixedKey. * */ __pyx_k_tuple_104 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key)); if (unlikely(!__pyx_k_tuple_104)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_104); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_104)); __pyx_k_codeobj_105 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_104, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____getitem__, 209, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_105)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":220 * raise IndexError, "cannot index a FixedKey" * * def __int__(self): # <<<<<<<<<<<<<< * return int(self.value) * */ __pyx_k_tuple_107 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_107)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_107); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_107)); __pyx_k_codeobj_108 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_107, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____int__, 220, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_108)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":223 * return int(self.value) * * def __long__(self): # <<<<<<<<<<<<<< * return long(self.value) * */ __pyx_k_tuple_110 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_110)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_110); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_110)); __pyx_k_codeobj_111 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_110, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____long__, 223, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_111)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":226 * return long(self.value) * * def __repr__(self): # <<<<<<<<<<<<<< * return str(self) * */ __pyx_k_tuple_113 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_113)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_113); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_113)); __pyx_k_codeobj_114 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_113, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____repr__, 226, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_114)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":229 * return str(self) * * def __str__(self): # <<<<<<<<<<<<<< * return "FixedKey(%s)" % self.value * */ __pyx_k_tuple_116 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_116)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_116); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_116)); __pyx_k_codeobj_117 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_116, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____str__, 229, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_117)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":232 * return "FixedKey(%s)" % self.value * * def bound_by_lohi(self, lo, hi): # <<<<<<<<<<<<<< * """Returns self but raises IndexError if value is not within range. * */ __pyx_k_tuple_119 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi)); if (unlikely(!__pyx_k_tuple_119)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_119); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_119)); __pyx_k_codeobj_120 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_119, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__bound_by_lohi, 232, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_120)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":246 * return self * * def get_size(self): # <<<<<<<<<<<<<< * """Always returns 1 even though 0 is more correct. * */ __pyx_k_tuple_122 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_122)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_122); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_122)); __pyx_k_codeobj_123 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_122, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__get_size, 246, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_123)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":259 * size = property(get_size) * * def pyobj(self): # <<<<<<<<<<<<<< * """Returns a Python object based on this Key (long 'value' attr).""" * return self.value */ __pyx_k_tuple_125 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_125)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_125); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_125)); __pyx_k_codeobj_126 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_125, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__pyobj, 259, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_126)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":272 * * """ * def __init__(self, start, stop=None, step=None, origin=None): # <<<<<<<<<<<<<< * """Creates given either a slice or an explicit start, stop, and step. * */ __pyx_k_tuple_129 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__start), ((PyObject *)__pyx_n_s__stop), ((PyObject *)__pyx_n_s__step), ((PyObject *)__pyx_n_s__origin)); if (unlikely(!__pyx_k_tuple_129)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_129); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_129)); __pyx_k_codeobj_130 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_129, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____init__, 272, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_130)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_131 = PyTuple_Pack(3, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_131)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_131); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_131)); /* "ga4py/gain/util.pyx":297 * self.origin = origin * * def __eq__(self, other): # <<<<<<<<<<<<<< * """Returns true if all start, stop, and step values match other.""" * try: */ __pyx_k_tuple_133 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__other)); if (unlikely(!__pyx_k_tuple_133)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_133); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_133)); __pyx_k_codeobj_134 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_133, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____eq__, 297, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_134)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":306 * return False * * def __getitem__(self, key): # <<<<<<<<<<<<<< * """You can index using either a slice, RangeKey, or integer.""" * if isinstance(key, (RangeKey,slice)): */ __pyx_k_tuple_136 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key), ((PyObject *)__pyx_n_s___start), ((PyObject *)__pyx_n_s___stop), ((PyObject *)__pyx_n_s___step), ((PyObject *)__pyx_n_s__start), ((PyObject *)__pyx_n_s__stop), ((PyObject *)__pyx_n_s__step), ((PyObject *)__pyx_n_s__shifted)); if (unlikely(!__pyx_k_tuple_136)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_136); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_136)); __pyx_k_codeobj_137 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_136, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____getitem__, 306, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_137)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":333 * return FixedKey(shifted, self.origin) * * def __str__(self): # <<<<<<<<<<<<<< * return "RangeKey(%s,%s,%s)" % (self.start,self.stop,self.step) * */ __pyx_k_tuple_139 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_139)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_139); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_139)); __pyx_k_codeobj_140 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_139, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____str__, 333, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_140)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":336 * return "RangeKey(%s,%s,%s)" % (self.start,self.stop,self.step) * * def __repr__(self): # <<<<<<<<<<<<<< * return str(self) * */ __pyx_k_tuple_142 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_142)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_142); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_142)); __pyx_k_codeobj_143 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_142, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____repr__, 336, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_143)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":339 * return str(self) * * def bound_by_lohi(self, lo, hi): # <<<<<<<<<<<<<< * """Return a new RangeKey modified to fit between lo and hi. * */ __pyx_k_tuple_145 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__new_start), ((PyObject *)__pyx_n_s__new_stop), ((PyObject *)__pyx_n_s__guess), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_145)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_145); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_145)); __pyx_k_codeobj_146 = (PyObject*)__Pyx_PyCode_New(3, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_145, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__bound_by_lohi, 339, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_146)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":403 * return result * * def get_size(self): # <<<<<<<<<<<<<< * """Returns the length of the range.""" * start,stop,step = self.start,self.stop,self.step # for brevity */ __pyx_k_tuple_148 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__start), ((PyObject *)__pyx_n_s__stop), ((PyObject *)__pyx_n_s__step)); if (unlikely(!__pyx_k_tuple_148)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_148); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_148)); __pyx_k_codeobj_149 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_148, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__get_size, 403, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_149)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":414 * size = property(get_size) * * def pyobj(self): # <<<<<<<<<<<<<< * """Returns a Python object based on this Key (a slice).""" * return slice(self.start,self.stop,self.step) */ __pyx_k_tuple_151 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_151)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_151); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_151)); __pyx_k_codeobj_152 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_151, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__pyobj, 414, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_152)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":432 * * """ * def __init__(self, shape=None, data=None, fixed=None, T=None, TT=None): # <<<<<<<<<<<<<< * if shape is None and data is None: * raise ValueError, "specify either shape or data" */ __pyx_k_tuple_155 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__shape), ((PyObject *)__pyx_n_s__data), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__T), ((PyObject *)__pyx_n_s__TT), ((PyObject *)__pyx_n_s__datum), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__x)); if (unlikely(!__pyx_k_tuple_155)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_155); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_155)); __pyx_k_codeobj_156 = (PyObject*)__Pyx_PyCode_New(6, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_155, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____init__, 432, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_156)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_k_tuple_157 = PyTuple_Pack(5, ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None), ((PyObject *)Py_None)); if (unlikely(!__pyx_k_tuple_157)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_157); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_157)); /* "ga4py/gain/util.pyx":451 * self.fixed = fixed * * def __eq__(self, other): # <<<<<<<<<<<<<< * try: * return (self.data == other.data) and (self.fixed == other.fixed) */ __pyx_k_tuple_159 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__other)); if (unlikely(!__pyx_k_tuple_159)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_159); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_159)); __pyx_k_codeobj_160 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_159, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____eq__, 451, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_160)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":457 * return False * * def __iter__(self): # <<<<<<<<<<<<<< * return iter(self.data) * */ __pyx_k_tuple_162 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_162)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_162); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_162)); __pyx_k_codeobj_163 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_162, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____iter__, 457, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_163)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":460 * return iter(self.data) * * def __str__(self): # <<<<<<<<<<<<<< * return str(self.data) * */ __pyx_k_tuple_165 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_165)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_165); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_165)); __pyx_k_codeobj_166 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_165, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____str__, 460, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_166)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":463 * return str(self.data) * * def __repr__(self): # <<<<<<<<<<<<<< * return repr(self.data) * */ __pyx_k_tuple_168 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_168)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_168); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_168)); __pyx_k_codeobj_169 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_168, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____repr__, 463, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_169)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":466 * return repr(self.data) * * def _count_instances(self, *args): # <<<<<<<<<<<<<< * """Return the number of instances of the given type.""" * return len(self._get_instances(args)) */ __pyx_k_tuple_171 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__args)); if (unlikely(!__pyx_k_tuple_171)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_171); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_171)); __pyx_k_codeobj_172 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_171, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s___count_instances, 466, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_172)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":470 * return len(self._get_instances(args)) * * def _get_instances(self, *args): # <<<<<<<<<<<<<< * return [item for item in self.data if isinstance(item, args)] * */ __pyx_k_tuple_174 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__item)); if (unlikely(!__pyx_k_tuple_174)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_174); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_174)); __pyx_k_codeobj_175 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_174, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s___get_instances, 470, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_175)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":473 * return [item for item in self.data if isinstance(item, args)] * * def _get_origins_within_data(self): # <<<<<<<<<<<<<< * """Return list of keys which have their origin set.""" * return [item for item in self.data if item.origin is not None] */ __pyx_k_tuple_177 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__item)); if (unlikely(!__pyx_k_tuple_177)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_177); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_177)); __pyx_k_codeobj_178 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_177, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s_19, 473, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_178)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":477 * return [item for item in self.data if item.origin is not None] * * def get_origin(self): # <<<<<<<<<<<<<< * """Return current list of FixedKey and RangeKey instances. * */ __pyx_k_tuple_180 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__origins), ((PyObject *)__pyx_n_s__result), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__iter_origins), ((PyObject *)__pyx_n_s__i)); if (unlikely(!__pyx_k_tuple_180)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_180); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_180)); __pyx_k_codeobj_181 = (PyObject*)__Pyx_PyCode_New(1, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_180, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__get_origin, 477, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_181)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":497 * return result * * def get_sorted_origin(self): # <<<<<<<<<<<<<< * """Return sorted list of FixedKey and RangeKey instances. * */ __pyx_k_tuple_183 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__origins), ((PyObject *)__pyx_n_s__result), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__datum)); if (unlikely(!__pyx_k_tuple_183)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_183); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_183)); __pyx_k_codeobj_184 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_183, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__get_sorted_origin, 497, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_184)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":515 * return result * * def get_original_ndim(self): # <<<<<<<<<<<<<< * return len(self.get_origin()) * */ __pyx_k_tuple_186 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_186)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_186); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_186)); __pyx_k_codeobj_187 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_186, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__get_original_ndim, 515, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_187)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":518 * return len(self.get_origin()) * * def get_shape(self): # <<<<<<<<<<<<<< * return tuple( * [item.size for item in self._get_instances(NoneKey,RangeKey)]) */ __pyx_k_tuple_189 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__item)); if (unlikely(!__pyx_k_tuple_189)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_189); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_189)); __pyx_k_codeobj_190 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_189, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__get_shape, 518, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_190)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":523 * shape = property(get_shape) * * def get_size(self): # <<<<<<<<<<<<<< * return reduce(lambda x,y: x*y, self.shape, 1) * size = property(get_size) */ __pyx_k_tuple_192 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_192)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_192); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_192)); __pyx_k_codeobj_193 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_192, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__get_size, 523, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_193)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":527 * size = property(get_size) * * def get_ndim(self): # <<<<<<<<<<<<<< * return self._count_instances(NoneKey,RangeKey) * ndim = property(get_ndim) */ __pyx_k_tuple_195 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__self)); if (unlikely(!__pyx_k_tuple_195)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_195); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_195)); __pyx_k_codeobj_196 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_195, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__get_ndim, 527, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_196)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":531 * ndim = property(get_ndim) * * def pyobj(self): # <<<<<<<<<<<<<< * return [x.pyobj() for x in self.data] * */ __pyx_k_tuple_198 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__x)); if (unlikely(!__pyx_k_tuple_198)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_198); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_198)); __pyx_k_codeobj_199 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_198, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__pyobj, 531, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_199)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":534 * return [x.pyobj() for x in self.data] * * def replace_ellipsis(self, key): # <<<<<<<<<<<<<< * """Given key, replace one or more Ellipsis based on this MasterKey. * */ __pyx_k_tuple_201 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key), ((PyObject *)__pyx_n_s__ndim), ((PyObject *)__pyx_n_s__count_real_keys), ((PyObject *)__pyx_n_s__ellipsis_index), ((PyObject *)__pyx_n_s__ellipsis_count)); if (unlikely(!__pyx_k_tuple_201)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_201); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_201)); __pyx_k_codeobj_202 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_201, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__replace_ellipsis, 534, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_202)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":563 * return key * * def __getitem__(self, key): # <<<<<<<<<<<<<< * """Slices this MasterKey and returns a new MasterKey.""" * key = self.replace_ellipsis(key) */ __pyx_k_tuple_204 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__key), ((PyObject *)__pyx_n_s__new_data), ((PyObject *)__pyx_n_s__new_fixed), ((PyObject *)__pyx_n_s__key_iter), ((PyObject *)__pyx_n_s__item), ((PyObject *)__pyx_n_s__next_key), ((PyObject *)__pyx_n_s__result)); if (unlikely(!__pyx_k_tuple_204)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_204); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_204)); __pyx_k_codeobj_205 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_204, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s____getitem__, 563, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_205)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":593 * return result * * def bound_by_lohi(self, lo, hi): # <<<<<<<<<<<<<< * """Calculate new MasterKey for the subarray denoted by lo and hi. * */ __pyx_k_tuple_207 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__result), ((PyObject *)__pyx_n_s__item), ((PyObject *)__pyx_n_s__l), ((PyObject *)__pyx_n_s__h)); if (unlikely(!__pyx_k_tuple_207)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_207); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_207)); __pyx_k_codeobj_208 = (PyObject*)__Pyx_PyCode_New(3, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_207, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__bound_by_lohi, 593, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_208)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":630 * return result * * def lohi_T(self): # <<<<<<<<<<<<<< * """Return the current order of origin including fixed dimensions. * */ __pyx_k_tuple_210 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__item)); if (unlikely(!__pyx_k_tuple_210)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_210); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_210)); __pyx_k_codeobj_211 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_210, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__lohi_T, 630, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_211)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":646 * return [item.origin for item in self.get_origin()] * * def None_key(self): # <<<<<<<<<<<<<< * """Return a key based on current None's in this MasterKey. * */ __pyx_k_tuple_213 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__datum)); if (unlikely(!__pyx_k_tuple_213)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_213); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_213)); __pyx_k_codeobj_214 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_213, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__None_key, 646, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_214)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":660 * for datum in self.data] * * def get_lo_hi_skip_adjust(self): # <<<<<<<<<<<<<< * """Return lo/hi/skip/adjust needed for successful ga.strided_get().""" * sorted_origin = self.get_sorted_origin() */ __pyx_k_tuple_216 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__sorted_origin), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__sk), ((PyObject *)__pyx_n_s__ad), ((PyObject *)__pyx_n_s__need_strided), ((PyObject *)__pyx_n_s__item), ((PyObject *)__pyx_n_s__length)); if (unlikely(!__pyx_k_tuple_216)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_216); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_216)); __pyx_k_codeobj_217 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_216, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s_218, 660, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_217)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":695 * return lo,hi,sk,ad,need_strided * * def access_key(self, lo, hi): # <<<<<<<<<<<<<< * """Converts from MasterKey to list appropriate for ga.access()[list]. * */ __pyx_k_tuple_220 = PyTuple_Pack(11, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__result), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__iter_ranged_origin), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__ranged), ((PyObject *)__pyx_n_s__nlo), ((PyObject *)__pyx_n_s__start), ((PyObject *)__pyx_n_s__stop)); if (unlikely(!__pyx_k_tuple_220)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_220); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_220)); __pyx_k_codeobj_221 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_220, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__access_key, 695, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_221)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":718 * return result * * def get_key(self, lo, hi): # <<<<<<<<<<<<<< * """Converts from MasterKey to list appropriate for ga.get()[list].""" * iter_ranged_origin = iter(self.bound_by_lohi(lo, hi)) */ __pyx_k_tuple_223 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__iter_ranged_origin), ((PyObject *)__pyx_n_s__result), ((PyObject *)__pyx_n_s__datum), ((PyObject *)__pyx_n_s__ro), ((PyObject *)__pyx_n_s__offset)); if (unlikely(!__pyx_k_tuple_223)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_223); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_223)); __pyx_k_codeobj_224 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_223, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__get_key, 718, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_224)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":736 * return result * * def transpose(self, axes): # <<<<<<<<<<<<<< * """Swap the axes of this MasterKey given axes. * */ __pyx_k_tuple_226 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__self), ((PyObject *)__pyx_n_s__axes), ((PyObject *)__pyx_n_s__inverse), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__val), ((PyObject *)__pyx_n_s__new_data)); if (unlikely(!__pyx_k_tuple_226)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_226); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_226)); __pyx_k_codeobj_227 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_226, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__transpose, 736, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_227)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":768 * return MasterKey(None, new_data, self.fixed, axes, inverse) * * def broadcast_shape(first, second): # <<<<<<<<<<<<<< * """Return the broadcasted version of shapes first and second.""" * def worker(x,y): */ __pyx_k_tuple_230 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__first), ((PyObject *)__pyx_n_s__second), ((PyObject *)__pyx_n_s__worker), ((PyObject *)__pyx_n_s__worker)); if (unlikely(!__pyx_k_tuple_230)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_230); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_230)); __pyx_k_codeobj_231 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_230, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__broadcast_shape, 768, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_231)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":779 * return tuple(reversed(map(worker, reversed(first), reversed(second)))) * * def broadcast_chomp(smaller_key, larger_key): # <<<<<<<<<<<<<< * """Return a key appropriate for the given shape.""" * new_key = [] */ __pyx_k_tuple_232 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__smaller_key), ((PyObject *)__pyx_n_s__larger_key), ((PyObject *)__pyx_n_s__new_key), ((PyObject *)__pyx_n_s__s), ((PyObject *)__pyx_n_s__l)); if (unlikely(!__pyx_k_tuple_232)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_232); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_232)); __pyx_k_codeobj_233 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_232, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__broadcast_chomp, 779, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_233)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/util.pyx":790 * return new_key * * def unravel_index(x,dims): # <<<<<<<<<<<<<< * """Like np.unravel_index, but 'x' can be an integer array. * */ __pyx_k_tuple_234 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__x), ((PyObject *)__pyx_n_s__dims), ((PyObject *)__pyx_n_s___nx), ((PyObject *)__pyx_n_s__max), ((PyObject *)__pyx_n_s__idx), ((PyObject *)__pyx_n_s__dim_prod)); if (unlikely(!__pyx_k_tuple_234)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_234); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_234)); __pyx_k_codeobj_235 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_234, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_38, __pyx_n_s__unravel_index, 790, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_235)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; __Pyx_RefNannyFinishContext(); return -1; } static int __Pyx_InitGlobals(void) { if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_0L = PyLong_FromString((char *)"0", 0, 0); if (unlikely(!__pyx_int_0L)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; return 0; __pyx_L1_error:; return -1; } #if PY_MAJOR_VERSION < 3 PyMODINIT_FUNC initutil(void); /*proto*/ PyMODINIT_FUNC initutil(void) #else PyMODINIT_FUNC PyInit_util(void); /*proto*/ PyMODINIT_FUNC PyInit_util(void) #endif { PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannyDeclarations #if CYTHON_REFNANNY __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); if (!__Pyx_RefNanny) { PyErr_Clear(); __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); if (!__Pyx_RefNanny) Py_FatalError("failed to import 'refnanny' module"); } #endif __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_util(void)", 0); if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #ifdef __Pyx_CyFunction_USED if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif #ifdef __Pyx_FusedFunction_USED if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif #ifdef __Pyx_Generator_USED if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif /*--- Library function declarations ---*/ /*--- Threads initialization code ---*/ #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS #ifdef WITH_THREAD /* Python build with threading support? */ PyEval_InitThreads(); #endif #endif /*--- Module creation code ---*/ #if PY_MAJOR_VERSION < 3 __pyx_m = Py_InitModule4(__Pyx_NAMESTR("util"), __pyx_methods, __Pyx_DOCSTR(__pyx_k_47), 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); #else __pyx_m = PyModule_Create(&__pyx_moduledef); #endif if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} Py_INCREF(__pyx_d); #if PY_MAJOR_VERSION >= 3 { PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!PyDict_GetItemString(modules, "ga4py.gain.util")) { if (unlikely(PyDict_SetItemString(modules, "ga4py.gain.util", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } } #endif __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #if CYTHON_COMPILING_IN_PYPY Py_INCREF(__pyx_b); #endif if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; /*--- Initialize various global constants etc. ---*/ if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif if (__pyx_module_is_main_ga4py__gain__util) { if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; } /*--- Builtin init code ---*/ if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Constants init code ---*/ if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Global init code ---*/ /*--- Variable export code ---*/ /*--- Function export code ---*/ /*--- Type init code ---*/ /*--- Type import code ---*/ /*--- Variable import code ---*/ /*--- Function import code ---*/ /*--- Execution code ---*/ /* "ga4py/gain/util.pyx":15 * * """ * import numpy as np # <<<<<<<<<<<<<< * * cpdef list listify(thing): */ __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":23 * return [thing] * * class Key(object): # <<<<<<<<<<<<<< * """An abstract base class for an index into an ndarray. * */ __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); /* "ga4py/gain/util.pyx":44 * * """ * def __init__(self): # <<<<<<<<<<<<<< * """Create a new Key with origin=None.""" * self.origin = None */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_3Key_1__init__, 0, __pyx_n_s_50, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_49)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____init__, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":48 * self.origin = None * * def __eq__(self, other): # <<<<<<<<<<<<<< * """x.__eq__(y) <==> x==y * */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_3Key_3__eq__, 0, __pyx_n_s_53, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_52)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____eq__, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":59 * raise NotImplementedError, "subclasses must define this" * * def __getitem__(self, key): # <<<<<<<<<<<<<< * """x.__getitem__(y) <==> x[y] * */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_3Key_5__getitem__, 0, __pyx_n_s_56, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_55)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____getitem__, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":72 * raise NotImplementedError, "subclasses must define this" * * def __repr__(self): # <<<<<<<<<<<<<< * return str(self) * */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_3Key_7__repr__, 0, __pyx_n_s_59, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_58)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____repr__, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":75 * return str(self) * * def __str__(self): # <<<<<<<<<<<<<< * return "Key()" * */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_3Key_9__str__, 0, __pyx_n_s_62, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_61)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____str__, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":78 * return "Key()" * * def bound_by_lohi(self, lo, hi): # <<<<<<<<<<<<<< * """Return a new Key modified to fit between lo and hi. * */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_3Key_11bound_by_lohi, 0, __pyx_n_s_65, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_64)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__bound_by_lohi, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":89 * raise NotImplementedError, "subclasses must define this" * * def get_size(self): # <<<<<<<<<<<<<< * """Returns number of elements represented by this Key. * */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_3Key_13get_size, 0, __pyx_n_s_68, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_67)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__get_size, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":98 * """ * raise NotImplementedError, "subclasses must define this" * size = property(get_size) # <<<<<<<<<<<<<< * * def pyobj(self): */ __pyx_t_2 = PyObject_GetItem(__pyx_t_1, __pyx_n_s__get_size); if (unlikely(!__pyx_t_2)) { PyErr_Clear(); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__get_size); } if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__size, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":100 * size = property(get_size) * * def pyobj(self): # <<<<<<<<<<<<<< * """Returns a Python object based on this Key e.g. slice, int, None. * */ __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_3Key_15pyobj, 0, __pyx_n_s_71, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_70)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__pyobj, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/util.pyx":23 * return [thing] * * class Key(object): # <<<<<<<<<<<<<< * """An abstract base class for an index into an ndarray. * */ __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_builtin_object); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object); __Pyx_GIVEREF(__pyx_builtin_object); if (PyDict_SetItemString(((PyObject *)__pyx_t_1), "__doc__", ((PyObject *)__pyx_kp_s_72)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_CreateClass(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_1), __pyx_n_s__Key, __pyx_n_s__Key, __pyx_n_s_21); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__Key, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":111 * raise NotImplementedError, "subclasses must define this" * * class NoneKey(Key): # <<<<<<<<<<<<<< * """A None with additional Key methods. * */ __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); /* "ga4py/gain/util.pyx":122 * * """ * def __init__(self): # <<<<<<<<<<<<<< * Key.__init__(self) * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_7NoneKey_1__init__, 0, __pyx_n_s_75, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_74)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____init__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":125 * Key.__init__(self) * * def __eq__(self, other): # <<<<<<<<<<<<<< * """Returns True of other is None or a NoneKey.""" * return isinstance(other, (type(None),NoneKey)) */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_7NoneKey_3__eq__, 0, __pyx_n_s_78, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_77)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____eq__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":129 * return isinstance(other, (type(None),NoneKey)) * * def __getitem__(self, key): # <<<<<<<<<<<<<< * """x.__getitem__(y) <==> x[y] * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_7NoneKey_5__getitem__, 0, __pyx_n_s_81, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_80)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____getitem__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":152 * return None # on purpose not self -- indicates index removal * * def __repr__(self): # <<<<<<<<<<<<<< * return str(self) * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_7NoneKey_7__repr__, 0, __pyx_n_s_84, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_83)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____repr__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":155 * return str(self) * * def __str__(self): # <<<<<<<<<<<<<< * return "NoneKey()" * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_7NoneKey_9__str__, 0, __pyx_n_s_87, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_86)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____str__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":158 * return "NoneKey()" * * def bound_by_lohi(self, lo, hi): # <<<<<<<<<<<<<< * """Always raises NotImplementedError.""" * raise NotImplementedError, "bound_by_lohi nonsensical for NoneKey" */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_7NoneKey_11bound_by_lohi, 0, __pyx_n_s_90, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_89)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__bound_by_lohi, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":162 * raise NotImplementedError, "bound_by_lohi nonsensical for NoneKey" * * def get_size(self): # <<<<<<<<<<<<<< * """Always returns 1.""" * return 1 */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_7NoneKey_13get_size, 0, __pyx_n_s_93, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_92)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__get_size, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":166 * return 1 * * size = property(get_size) # <<<<<<<<<<<<<< * * def pyobj(self): */ __pyx_t_3 = PyObject_GetItem(__pyx_t_1, __pyx_n_s__get_size); if (unlikely(!__pyx_t_3)) { PyErr_Clear(); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__get_size); } if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__size, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":168 * size = property(get_size) * * def pyobj(self): # <<<<<<<<<<<<<< * """Returns a Python object based on this Key (always None).""" * return None */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_7NoneKey_15pyobj, 0, __pyx_n_s_96, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_95)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__pyobj, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":111 * raise NotImplementedError, "subclasses must define this" * * class NoneKey(Key): # <<<<<<<<<<<<<< * """A None with additional Key methods. * */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__Key); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; if (PyDict_SetItemString(((PyObject *)__pyx_t_1), "__doc__", ((PyObject *)__pyx_kp_s_97)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_CreateClass(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_1), __pyx_n_s__NoneKey, __pyx_n_s__NoneKey, __pyx_n_s_21); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__NoneKey, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":172 * return None * * class FixedKey(Key): # <<<<<<<<<<<<<< * """An integer with additional Key methods. * */ __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); /* "ga4py/gain/util.pyx":190 * * """ * def __init__(self, value, origin): # <<<<<<<<<<<<<< * """A integer value and an integer origin must be given. * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8FixedKey_1__init__, 0, __pyx_n_s_100, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_99)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____init__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":203 * assert self.origin >= 0 * * def __eq__(self, other): # <<<<<<<<<<<<<< * """Compares the 'value' attributes.""" * if hasattr(other,'value'): */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8FixedKey_3__eq__, 0, __pyx_n_s_103, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_102)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____eq__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":209 * return False * * def __getitem__(self, key): # <<<<<<<<<<<<<< * """You cannot index a FixedKey. * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8FixedKey_5__getitem__, 0, __pyx_n_s_106, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_105)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____getitem__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":220 * raise IndexError, "cannot index a FixedKey" * * def __int__(self): # <<<<<<<<<<<<<< * return int(self.value) * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8FixedKey_7__int__, 0, __pyx_n_s_109, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_108)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____int__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":223 * return int(self.value) * * def __long__(self): # <<<<<<<<<<<<<< * return long(self.value) * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8FixedKey_9__long__, 0, __pyx_n_s_112, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_111)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____long__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":226 * return long(self.value) * * def __repr__(self): # <<<<<<<<<<<<<< * return str(self) * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8FixedKey_11__repr__, 0, __pyx_n_s_115, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_114)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____repr__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":229 * return str(self) * * def __str__(self): # <<<<<<<<<<<<<< * return "FixedKey(%s)" % self.value * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8FixedKey_13__str__, 0, __pyx_n_s_118, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_117)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____str__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":232 * return "FixedKey(%s)" % self.value * * def bound_by_lohi(self, lo, hi): # <<<<<<<<<<<<<< * """Returns self but raises IndexError if value is not within range. * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8FixedKey_15bound_by_lohi, 0, __pyx_n_s_121, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_120)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__bound_by_lohi, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":246 * return self * * def get_size(self): # <<<<<<<<<<<<<< * """Always returns 1 even though 0 is more correct. * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8FixedKey_17get_size, 0, __pyx_n_s_124, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_123)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__get_size, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":257 * """ * return 1 * size = property(get_size) # <<<<<<<<<<<<<< * * def pyobj(self): */ __pyx_t_3 = PyObject_GetItem(__pyx_t_1, __pyx_n_s__get_size); if (unlikely(!__pyx_t_3)) { PyErr_Clear(); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__get_size); } if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__size, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":259 * size = property(get_size) * * def pyobj(self): # <<<<<<<<<<<<<< * """Returns a Python object based on this Key (long 'value' attr).""" * return self.value */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8FixedKey_19pyobj, 0, __pyx_n_s_127, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_126)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__pyobj, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":172 * return None * * class FixedKey(Key): # <<<<<<<<<<<<<< * """An integer with additional Key methods. * */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__Key); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; if (PyDict_SetItemString(((PyObject *)__pyx_t_1), "__doc__", ((PyObject *)__pyx_kp_s_128)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_CreateClass(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_1), __pyx_n_s__FixedKey, __pyx_n_s__FixedKey, __pyx_n_s_21); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__FixedKey, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":263 * return self.value * * class RangeKey(Key): # <<<<<<<<<<<<<< * """A Python slice (w/o the indices function) with additional Key methods. * */ __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); /* "ga4py/gain/util.pyx":272 * * """ * def __init__(self, start, stop=None, step=None, origin=None): # <<<<<<<<<<<<<< * """Creates given either a slice or an explicit start, stop, and step. * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8RangeKey_1__init__, 0, __pyx_n_s_132, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_130)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_3, ((PyObject *)__pyx_k_tuple_131)); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____init__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":297 * self.origin = origin * * def __eq__(self, other): # <<<<<<<<<<<<<< * """Returns true if all start, stop, and step values match other.""" * try: */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8RangeKey_3__eq__, 0, __pyx_n_s_135, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_134)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____eq__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":306 * return False * * def __getitem__(self, key): # <<<<<<<<<<<<<< * """You can index using either a slice, RangeKey, or integer.""" * if isinstance(key, (RangeKey,slice)): */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8RangeKey_5__getitem__, 0, __pyx_n_s_138, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_137)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____getitem__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":333 * return FixedKey(shifted, self.origin) * * def __str__(self): # <<<<<<<<<<<<<< * return "RangeKey(%s,%s,%s)" % (self.start,self.stop,self.step) * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8RangeKey_7__str__, 0, __pyx_n_s_141, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_140)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____str__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":336 * return "RangeKey(%s,%s,%s)" % (self.start,self.stop,self.step) * * def __repr__(self): # <<<<<<<<<<<<<< * return str(self) * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8RangeKey_9__repr__, 0, __pyx_n_s_144, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_143)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____repr__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":339 * return str(self) * * def bound_by_lohi(self, lo, hi): # <<<<<<<<<<<<<< * """Return a new RangeKey modified to fit between lo and hi. * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8RangeKey_11bound_by_lohi, 0, __pyx_n_s_147, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_146)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__bound_by_lohi, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":403 * return result * * def get_size(self): # <<<<<<<<<<<<<< * """Returns the length of the range.""" * start,stop,step = self.start,self.stop,self.step # for brevity */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8RangeKey_13get_size, 0, __pyx_n_s_150, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_149)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__get_size, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":412 * else: * return (stop - start - 1) / (step) + 1 * size = property(get_size) # <<<<<<<<<<<<<< * * def pyobj(self): */ __pyx_t_3 = PyObject_GetItem(__pyx_t_1, __pyx_n_s__get_size); if (unlikely(!__pyx_t_3)) { PyErr_Clear(); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__get_size); } if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__size, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":414 * size = property(get_size) * * def pyobj(self): # <<<<<<<<<<<<<< * """Returns a Python object based on this Key (a slice).""" * return slice(self.start,self.stop,self.step) */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_8RangeKey_15pyobj, 0, __pyx_n_s_153, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_152)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__pyobj, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":263 * return self.value * * class RangeKey(Key): # <<<<<<<<<<<<<< * """A Python slice (w/o the indices function) with additional Key methods. * */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__Key); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; if (PyDict_SetItemString(((PyObject *)__pyx_t_1), "__doc__", ((PyObject *)__pyx_kp_s_154)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_CreateClass(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_1), __pyx_n_s__RangeKey, __pyx_n_s__RangeKey, __pyx_n_s_21); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__RangeKey, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":418 * return slice(self.start,self.stop,self.step) * * class MasterKey(object): # <<<<<<<<<<<<<< * """A list of Key instances with some extra methods. * */ __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); /* "ga4py/gain/util.pyx":432 * * """ * def __init__(self, shape=None, data=None, fixed=None, T=None, TT=None): # <<<<<<<<<<<<<< * if shape is None and data is None: * raise ValueError, "specify either shape or data" */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_1__init__, 0, __pyx_n_s_158, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_156)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_3, ((PyObject *)__pyx_k_tuple_157)); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____init__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":451 * self.fixed = fixed * * def __eq__(self, other): # <<<<<<<<<<<<<< * try: * return (self.data == other.data) and (self.fixed == other.fixed) */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_3__eq__, 0, __pyx_n_s_161, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_160)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____eq__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":457 * return False * * def __iter__(self): # <<<<<<<<<<<<<< * return iter(self.data) * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_5__iter__, 0, __pyx_n_s_164, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_163)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____iter__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":460 * return iter(self.data) * * def __str__(self): # <<<<<<<<<<<<<< * return str(self.data) * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_7__str__, 0, __pyx_n_s_167, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_166)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____str__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":463 * return str(self.data) * * def __repr__(self): # <<<<<<<<<<<<<< * return repr(self.data) * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_9__repr__, 0, __pyx_n_s_170, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_169)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____repr__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":466 * return repr(self.data) * * def _count_instances(self, *args): # <<<<<<<<<<<<<< * """Return the number of instances of the given type.""" * return len(self._get_instances(args)) */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_11_count_instances, 0, __pyx_n_s_173, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_172)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s___count_instances, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":470 * return len(self._get_instances(args)) * * def _get_instances(self, *args): # <<<<<<<<<<<<<< * return [item for item in self.data if isinstance(item, args)] * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_13_get_instances, 0, __pyx_n_s_176, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_175)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s___get_instances, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":473 * return [item for item in self.data if isinstance(item, args)] * * def _get_origins_within_data(self): # <<<<<<<<<<<<<< * """Return list of keys which have their origin set.""" * return [item for item in self.data if item.origin is not None] */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_15_get_origins_within_data, 0, __pyx_n_s_179, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_178)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_19, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":477 * return [item for item in self.data if item.origin is not None] * * def get_origin(self): # <<<<<<<<<<<<<< * """Return current list of FixedKey and RangeKey instances. * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_17get_origin, 0, __pyx_n_s_182, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_181)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__get_origin, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":497 * return result * * def get_sorted_origin(self): # <<<<<<<<<<<<<< * """Return sorted list of FixedKey and RangeKey instances. * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_19get_sorted_origin, 0, __pyx_n_s_185, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_184)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__get_sorted_origin, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":515 * return result * * def get_original_ndim(self): # <<<<<<<<<<<<<< * return len(self.get_origin()) * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_21get_original_ndim, 0, __pyx_n_s_188, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_187)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__get_original_ndim, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":518 * return len(self.get_origin()) * * def get_shape(self): # <<<<<<<<<<<<<< * return tuple( * [item.size for item in self._get_instances(NoneKey,RangeKey)]) */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_23get_shape, 0, __pyx_n_s_191, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_190)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__get_shape, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":521 * return tuple( * [item.size for item in self._get_instances(NoneKey,RangeKey)]) * shape = property(get_shape) # <<<<<<<<<<<<<< * * def get_size(self): */ __pyx_t_3 = PyObject_GetItem(__pyx_t_1, __pyx_n_s__get_shape); if (unlikely(!__pyx_t_3)) { PyErr_Clear(); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__get_shape); } if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__shape, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":523 * shape = property(get_shape) * * def get_size(self): # <<<<<<<<<<<<<< * return reduce(lambda x,y: x*y, self.shape, 1) * size = property(get_size) */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_25get_size, 0, __pyx_n_s_194, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_193)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__get_size, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":525 * def get_size(self): * return reduce(lambda x,y: x*y, self.shape, 1) * size = property(get_size) # <<<<<<<<<<<<<< * * def get_ndim(self): */ __pyx_t_3 = PyObject_GetItem(__pyx_t_1, __pyx_n_s__get_size); if (unlikely(!__pyx_t_3)) { PyErr_Clear(); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__get_size); } if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__size, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":527 * size = property(get_size) * * def get_ndim(self): # <<<<<<<<<<<<<< * return self._count_instances(NoneKey,RangeKey) * ndim = property(get_ndim) */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_27get_ndim, 0, __pyx_n_s_197, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_196)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__get_ndim, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":529 * def get_ndim(self): * return self._count_instances(NoneKey,RangeKey) * ndim = property(get_ndim) # <<<<<<<<<<<<<< * * def pyobj(self): */ __pyx_t_3 = PyObject_GetItem(__pyx_t_1, __pyx_n_s__get_ndim); if (unlikely(!__pyx_t_3)) { PyErr_Clear(); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__get_ndim); } if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_builtin_property, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__ndim, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":531 * ndim = property(get_ndim) * * def pyobj(self): # <<<<<<<<<<<<<< * return [x.pyobj() for x in self.data] * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_29pyobj, 0, __pyx_n_s_200, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_199)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__pyobj, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":534 * return [x.pyobj() for x in self.data] * * def replace_ellipsis(self, key): # <<<<<<<<<<<<<< * """Given key, replace one or more Ellipsis based on this MasterKey. * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_31replace_ellipsis, 0, __pyx_n_s_203, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_202)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__replace_ellipsis, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":563 * return key * * def __getitem__(self, key): # <<<<<<<<<<<<<< * """Slices this MasterKey and returns a new MasterKey.""" * key = self.replace_ellipsis(key) */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_33__getitem__, 0, __pyx_n_s_206, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_205)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s____getitem__, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":593 * return result * * def bound_by_lohi(self, lo, hi): # <<<<<<<<<<<<<< * """Calculate new MasterKey for the subarray denoted by lo and hi. * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_35bound_by_lohi, 0, __pyx_n_s_209, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_208)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__bound_by_lohi, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":630 * return result * * def lohi_T(self): # <<<<<<<<<<<<<< * """Return the current order of origin including fixed dimensions. * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_37lohi_T, 0, __pyx_n_s_212, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_211)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__lohi_T, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":646 * return [item.origin for item in self.get_origin()] * * def None_key(self): # <<<<<<<<<<<<<< * """Return a key based on current None's in this MasterKey. * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_39None_key, 0, __pyx_n_s_215, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_214)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__None_key, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":660 * for datum in self.data] * * def get_lo_hi_skip_adjust(self): # <<<<<<<<<<<<<< * """Return lo/hi/skip/adjust needed for successful ga.strided_get().""" * sorted_origin = self.get_sorted_origin() */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_41get_lo_hi_skip_adjust, 0, __pyx_n_s_219, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_217)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_218, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":695 * return lo,hi,sk,ad,need_strided * * def access_key(self, lo, hi): # <<<<<<<<<<<<<< * """Converts from MasterKey to list appropriate for ga.access()[list]. * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_43access_key, 0, __pyx_n_s_222, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_221)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__access_key, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":718 * return result * * def get_key(self, lo, hi): # <<<<<<<<<<<<<< * """Converts from MasterKey to list appropriate for ga.get()[list].""" * iter_ranged_origin = iter(self.bound_by_lohi(lo, hi)) */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_45get_key, 0, __pyx_n_s_225, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_224)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__get_key, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":736 * return result * * def transpose(self, axes): # <<<<<<<<<<<<<< * """Swap the axes of this MasterKey given axes. * */ __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_9MasterKey_47transpose, 0, __pyx_n_s_228, NULL, __pyx_n_s_21, ((PyObject *)__pyx_k_codeobj_227)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyObject_SetItem(__pyx_t_1, __pyx_n_s__transpose, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/util.pyx":418 * return slice(self.start,self.stop,self.step) * * class MasterKey(object): # <<<<<<<<<<<<<< * """A list of Key instances with some extra methods. * */ __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_builtin_object); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object); __Pyx_GIVEREF(__pyx_builtin_object); if (PyDict_SetItemString(((PyObject *)__pyx_t_1), "__doc__", ((PyObject *)__pyx_kp_s_229)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = __Pyx_CreateClass(((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1), __pyx_n_s__MasterKey, __pyx_n_s__MasterKey, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; if (PyDict_SetItem(__pyx_d, __pyx_n_s__MasterKey, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":768 * return MasterKey(None, new_data, self.fixed, axes, inverse) * * def broadcast_shape(first, second): # <<<<<<<<<<<<<< * """Return the broadcasted version of shapes first and second.""" * def worker(x,y): */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_3broadcast_shape, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__broadcast_shape, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":779 * return tuple(reversed(map(worker, reversed(first), reversed(second)))) * * def broadcast_chomp(smaller_key, larger_key): # <<<<<<<<<<<<<< * """Return a key appropriate for the given shape.""" * new_key = [] */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_5broadcast_chomp, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__broadcast_chomp, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":790 * return new_key * * def unravel_index(x,dims): # <<<<<<<<<<<<<< * """Like np.unravel_index, but 'x' can be an integer array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4util_7unravel_index, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__unravel_index, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/util.pyx":1 * # cython: profile=True # <<<<<<<<<<<<<< * """Contains index- and slice-related operations needed for bookkeeping. * */ __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_236), ((PyObject *)__pyx_kp_u_237)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_238), ((PyObject *)__pyx_kp_u_239)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_240), ((PyObject *)__pyx_kp_u_241)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_242), ((PyObject *)__pyx_kp_u_243)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_244), ((PyObject *)__pyx_kp_u_245)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_d, __pyx_n_s____test__, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); if (__pyx_m) { __Pyx_AddTraceback("init ga4py.gain.util", __pyx_clineno, __pyx_lineno, __pyx_filename); Py_DECREF(__pyx_m); __pyx_m = 0; } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_ImportError, "init ga4py.gain.util"); } __pyx_L0:; __Pyx_RefNannyFinishContext(); #if PY_MAJOR_VERSION < 3 return; #else return __pyx_m; #endif } /* Runtime support code */ #if CYTHON_REFNANNY static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { PyObject *m = NULL, *p = NULL; void *r = NULL; m = PyImport_ImportModule((char *)modname); if (!m) goto end; p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); if (!p) goto end; r = PyLong_AsVoidPtr(p); end: Py_XDECREF(p); Py_XDECREF(m); return (__Pyx_RefNannyAPIStruct *)r; } #endif /* CYTHON_REFNANNY */ static PyObject *__Pyx_GetBuiltinName(PyObject *name) { PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); if (unlikely(!result)) { PyErr_Format(PyExc_NameError, #if PY_MAJOR_VERSION >= 3 "name '%U' is not defined", name); #else "name '%s' is not defined", PyString_AS_STRING(name)); #endif } return result; } #if CYTHON_PROFILE static int __Pyx_TraceSetupAndCall(PyCodeObject** code, PyFrameObject** frame, const char *funcname, const char *srcfile, int firstlineno) { int retval; PyThreadState* tstate = PyThreadState_GET(); if (*frame == NULL || !CYTHON_PROFILE_REUSE_FRAME) { if (*code == NULL) { *code = __Pyx_createFrameCodeObject(funcname, srcfile, firstlineno); if (*code == NULL) return 0; } *frame = PyFrame_New( tstate, /*PyThreadState *tstate*/ *code, /*PyCodeObject *code*/ __pyx_d, /*PyObject *globals*/ 0 /*PyObject *locals*/ ); if (*frame == NULL) return 0; if (CYTHON_TRACE && (*frame)->f_trace == NULL) { Py_INCREF(Py_None); (*frame)->f_trace = Py_None; } } else { (*frame)->f_tstate = tstate; } (*frame)->f_lineno = firstlineno; tstate->use_tracing = 0; #if CYTHON_TRACE if (tstate->c_tracefunc) tstate->c_tracefunc(tstate->c_traceobj, *frame, PyTrace_CALL, NULL); if (!tstate->c_profilefunc) retval = 1; else #endif retval = tstate->c_profilefunc(tstate->c_profileobj, *frame, PyTrace_CALL, NULL) == 0; tstate->use_tracing = (tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc)); return tstate->use_tracing && retval; } static PyCodeObject *__Pyx_createFrameCodeObject(const char *funcname, const char *srcfile, int firstlineno) { PyObject *py_srcfile = 0; PyObject *py_funcname = 0; PyCodeObject *py_code = 0; #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromString(funcname); py_srcfile = PyString_FromString(srcfile); #else py_funcname = PyUnicode_FromString(funcname); py_srcfile = PyUnicode_FromString(srcfile); #endif if (!py_funcname | !py_srcfile) goto bad; py_code = PyCode_New( 0, /*int argcount,*/ #if PY_MAJOR_VERSION >= 3 0, /*int kwonlyargcount,*/ #endif 0, /*int nlocals,*/ 0, /*int stacksize,*/ 0, /*int flags,*/ __pyx_empty_bytes, /*PyObject *code,*/ __pyx_empty_tuple, /*PyObject *consts,*/ __pyx_empty_tuple, /*PyObject *names,*/ __pyx_empty_tuple, /*PyObject *varnames,*/ __pyx_empty_tuple, /*PyObject *freevars,*/ __pyx_empty_tuple, /*PyObject *cellvars,*/ py_srcfile, /*PyObject *filename,*/ py_funcname, /*PyObject *name,*/ firstlineno, /*int firstlineno,*/ __pyx_empty_bytes /*PyObject *lnotab*/ ); bad: Py_XDECREF(py_srcfile); Py_XDECREF(py_funcname); return py_code; } #endif /* CYTHON_PROFILE */ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) { PyObject *local_type, *local_value, *local_tb; #if CYTHON_COMPILING_IN_CPYTHON PyObject *tmp_type, *tmp_value, *tmp_tb; PyThreadState *tstate = PyThreadState_GET(); local_type = tstate->curexc_type; local_value = tstate->curexc_value; local_tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; #else PyErr_Fetch(&local_type, &local_value, &local_tb); #endif PyErr_NormalizeException(&local_type, &local_value, &local_tb); #if CYTHON_COMPILING_IN_CPYTHON if (unlikely(tstate->curexc_type)) #else if (unlikely(PyErr_Occurred())) #endif goto bad; #if PY_MAJOR_VERSION >= 3 if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) goto bad; #endif Py_INCREF(local_type); Py_INCREF(local_value); Py_INCREF(local_tb); *type = local_type; *value = local_value; *tb = local_tb; #if CYTHON_COMPILING_IN_CPYTHON tmp_type = tstate->exc_type; tmp_value = tstate->exc_value; tmp_tb = tstate->exc_traceback; tstate->exc_type = local_type; tstate->exc_value = local_value; tstate->exc_traceback = local_tb; /* Make sure tstate is in a consistent state when we XDECREF these objects (DECREF may run arbitrary code). */ Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); #else PyErr_SetExcInfo(local_type, local_value, local_tb); #endif return 0; bad: *type = 0; *value = 0; *tb = 0; Py_XDECREF(local_type); Py_XDECREF(local_value); Py_XDECREF(local_tb); return -1; } static void __Pyx_RaiseArgtupleInvalid( const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found) { Py_ssize_t num_expected; const char *more_or_less; if (num_found < num_min) { num_expected = num_min; more_or_less = "at least"; } else { num_expected = num_max; more_or_less = "at most"; } if (exact) { more_or_less = "exactly"; } PyErr_Format(PyExc_TypeError, "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)", func_name, more_or_less, num_expected, (num_expected == 1) ? "" : "s", num_found); } static void __Pyx_RaiseDoubleKeywordsError( const char* func_name, PyObject* kw_name) { PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION >= 3 "%s() got multiple values for keyword argument '%U'", func_name, kw_name); #else "%s() got multiple values for keyword argument '%s'", func_name, PyString_AsString(kw_name)); #endif } static int __Pyx_ParseOptionalKeywords( PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name) { PyObject *key = 0, *value = 0; Py_ssize_t pos = 0; PyObject*** name; PyObject*** first_kw_arg = argnames + num_pos_args; while (PyDict_Next(kwds, &pos, &key, &value)) { name = first_kw_arg; while (*name && (**name != key)) name++; if (*name) { values[name-argnames] = value; continue; } name = first_kw_arg; #if PY_MAJOR_VERSION < 3 if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { while (*name) { if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) && _PyString_Eq(**name, key)) { values[name-argnames] = value; break; } name++; } if (*name) continue; else { PyObject*** argname = argnames; while (argname != first_kw_arg) { if ((**argname == key) || ( (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) && _PyString_Eq(**argname, key))) { goto arg_passed_twice; } argname++; } } } else #endif if (likely(PyUnicode_Check(key))) { while (*name) { int cmp = (**name == key) ? 0 : #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : #endif PyUnicode_Compare(**name, key); if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; if (cmp == 0) { values[name-argnames] = value; break; } name++; } if (*name) continue; else { PyObject*** argname = argnames; while (argname != first_kw_arg) { int cmp = (**argname == key) ? 0 : #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : #endif PyUnicode_Compare(**argname, key); if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; if (cmp == 0) goto arg_passed_twice; argname++; } } } else goto invalid_keyword_type; if (kwds2) { if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; } else { goto invalid_keyword; } } return 0; arg_passed_twice: __Pyx_RaiseDoubleKeywordsError(function_name, key); goto bad; invalid_keyword_type: PyErr_Format(PyExc_TypeError, "%s() keywords must be strings", function_name); goto bad; invalid_keyword: PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION < 3 "%s() got an unexpected keyword argument '%s'", function_name, PyString_AsString(key)); #else "%s() got an unexpected keyword argument '%U'", function_name, key); #endif bad: return -1; } static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { #if CYTHON_COMPILING_IN_CPYTHON PyObject *tmp_type, *tmp_value, *tmp_tb; PyThreadState *tstate = PyThreadState_GET(); tmp_type = tstate->curexc_type; tmp_value = tstate->curexc_value; tmp_tb = tstate->curexc_traceback; tstate->curexc_type = type; tstate->curexc_value = value; tstate->curexc_traceback = tb; Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); #else PyErr_Restore(type, value, tb); #endif } static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { #if CYTHON_COMPILING_IN_CPYTHON PyThreadState *tstate = PyThreadState_GET(); *type = tstate->curexc_type; *value = tstate->curexc_value; *tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; #else PyErr_Fetch(type, value, tb); #endif } #if PY_MAJOR_VERSION < 3 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, CYTHON_UNUSED PyObject *cause) { Py_XINCREF(type); if (!value || value == Py_None) value = NULL; else Py_INCREF(value); if (!tb || tb == Py_None) tb = NULL; else { Py_INCREF(tb); if (!PyTraceBack_Check(tb)) { PyErr_SetString(PyExc_TypeError, "raise: arg 3 must be a traceback or None"); goto raise_error; } } #if PY_VERSION_HEX < 0x02050000 if (PyClass_Check(type)) { #else if (PyType_Check(type)) { #endif #if CYTHON_COMPILING_IN_PYPY if (!value) { Py_INCREF(Py_None); value = Py_None; } #endif PyErr_NormalizeException(&type, &value, &tb); } else { if (value) { PyErr_SetString(PyExc_TypeError, "instance exception may not have a separate value"); goto raise_error; } value = type; #if PY_VERSION_HEX < 0x02050000 if (PyInstance_Check(type)) { type = (PyObject*) ((PyInstanceObject*)type)->in_class; Py_INCREF(type); } else { type = 0; PyErr_SetString(PyExc_TypeError, "raise: exception must be an old-style class or instance"); goto raise_error; } #else type = (PyObject*) Py_TYPE(type); Py_INCREF(type); if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { PyErr_SetString(PyExc_TypeError, "raise: exception class must be a subclass of BaseException"); goto raise_error; } #endif } __Pyx_ErrRestore(type, value, tb); return; raise_error: Py_XDECREF(value); Py_XDECREF(type); Py_XDECREF(tb); return; } #else /* Python 3+ */ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { PyObject* owned_instance = NULL; if (tb == Py_None) { tb = 0; } else if (tb && !PyTraceBack_Check(tb)) { PyErr_SetString(PyExc_TypeError, "raise: arg 3 must be a traceback or None"); goto bad; } if (value == Py_None) value = 0; if (PyExceptionInstance_Check(type)) { if (value) { PyErr_SetString(PyExc_TypeError, "instance exception may not have a separate value"); goto bad; } value = type; type = (PyObject*) Py_TYPE(value); } else if (PyExceptionClass_Check(type)) { PyObject *args; if (!value) args = PyTuple_New(0); else if (PyTuple_Check(value)) { Py_INCREF(value); args = value; } else args = PyTuple_Pack(1, value); if (!args) goto bad; owned_instance = PyEval_CallObject(type, args); Py_DECREF(args); if (!owned_instance) goto bad; value = owned_instance; if (!PyExceptionInstance_Check(value)) { PyErr_Format(PyExc_TypeError, "calling %R should have returned an instance of " "BaseException, not %R", type, Py_TYPE(value)); goto bad; } } else { PyErr_SetString(PyExc_TypeError, "raise: exception class must be a subclass of BaseException"); goto bad; } #if PY_VERSION_HEX >= 0x03030000 if (cause) { #else if (cause && cause != Py_None) { #endif PyObject *fixed_cause; if (cause == Py_None) { fixed_cause = NULL; } else if (PyExceptionClass_Check(cause)) { fixed_cause = PyObject_CallObject(cause, NULL); if (fixed_cause == NULL) goto bad; } else if (PyExceptionInstance_Check(cause)) { fixed_cause = cause; Py_INCREF(fixed_cause); } else { PyErr_SetString(PyExc_TypeError, "exception causes must derive from " "BaseException"); goto bad; } PyException_SetCause(value, fixed_cause); } PyErr_SetObject(type, value); if (tb) { PyThreadState *tstate = PyThreadState_GET(); PyObject* tmp_tb = tstate->curexc_traceback; if (tb != tmp_tb) { Py_INCREF(tb); tstate->curexc_traceback = tb; Py_XDECREF(tmp_tb); } } bad: Py_XDECREF(owned_instance); return; } #endif static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { PyObject *result; #if CYTHON_COMPILING_IN_CPYTHON result = PyDict_GetItem(__pyx_d, name); if (result) { Py_INCREF(result); } else { #else result = PyObject_GetItem(__pyx_d, name); if (!result) { PyErr_Clear(); #endif result = __Pyx_GetBuiltinName(name); } return result; } static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { PyErr_Format(PyExc_ValueError, "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); } static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { PyErr_Format(PyExc_ValueError, "need more than %" CYTHON_FORMAT_SSIZE_T "d value%s to unpack", index, (index == 1) ? "" : "s"); } static CYTHON_INLINE int __Pyx_IterFinish(void) { #if CYTHON_COMPILING_IN_CPYTHON PyThreadState *tstate = PyThreadState_GET(); PyObject* exc_type = tstate->curexc_type; if (unlikely(exc_type)) { if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) { PyObject *exc_value, *exc_tb; exc_value = tstate->curexc_value; exc_tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; Py_DECREF(exc_type); Py_XDECREF(exc_value); Py_XDECREF(exc_tb); return 0; } else { return -1; } } return 0; #else if (unlikely(PyErr_Occurred())) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { PyErr_Clear(); return 0; } else { return -1; } } return 0; #endif } static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { if (unlikely(retval)) { Py_DECREF(retval); __Pyx_RaiseTooManyValuesError(expected); return -1; } else { return __Pyx_IterFinish(); } return 0; } static PyObject * __Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) { if (unlikely(op->func_doc == NULL)) { if (op->func.m_ml->ml_doc) { #if PY_MAJOR_VERSION >= 3 op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); #else op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); #endif if (unlikely(op->func_doc == NULL)) return NULL; } else { Py_INCREF(Py_None); return Py_None; } } Py_INCREF(op->func_doc); return op->func_doc; } static int __Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value) { PyObject *tmp = op->func_doc; if (value == NULL) value = Py_None; /* Mark as deleted */ Py_INCREF(value); op->func_doc = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op) { if (unlikely(op->func_name == NULL)) { #if PY_MAJOR_VERSION >= 3 op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); #else op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); #endif if (unlikely(op->func_name == NULL)) return NULL; } Py_INCREF(op->func_name); return op->func_name; } static int __Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value) { PyObject *tmp; #if PY_MAJOR_VERSION >= 3 if (unlikely(value == NULL || !PyUnicode_Check(value))) { #else if (unlikely(value == NULL || !PyString_Check(value))) { #endif PyErr_SetString(PyExc_TypeError, "__name__ must be set to a string object"); return -1; } tmp = op->func_name; Py_INCREF(value); op->func_name = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op) { Py_INCREF(op->func_qualname); return op->func_qualname; } static int __Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value) { PyObject *tmp; #if PY_MAJOR_VERSION >= 3 if (unlikely(value == NULL || !PyUnicode_Check(value))) { #else if (unlikely(value == NULL || !PyString_Check(value))) { #endif PyErr_SetString(PyExc_TypeError, "__qualname__ must be set to a string object"); return -1; } tmp = op->func_qualname; Py_INCREF(value); op->func_qualname = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) { PyObject *self; self = m->func_closure; if (self == NULL) self = Py_None; Py_INCREF(self); return self; } static PyObject * __Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op) { if (unlikely(op->func_dict == NULL)) { op->func_dict = PyDict_New(); if (unlikely(op->func_dict == NULL)) return NULL; } Py_INCREF(op->func_dict); return op->func_dict; } static int __Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value) { PyObject *tmp; if (unlikely(value == NULL)) { PyErr_SetString(PyExc_TypeError, "function's dictionary may not be deleted"); return -1; } if (unlikely(!PyDict_Check(value))) { PyErr_SetString(PyExc_TypeError, "setting function's dictionary to a non-dict"); return -1; } tmp = op->func_dict; Py_INCREF(value); op->func_dict = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_globals(CYTHON_UNUSED __pyx_CyFunctionObject *op) { PyObject* dict = PyModule_GetDict(__pyx_m); Py_XINCREF(dict); return dict; } static PyObject * __Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op) { Py_INCREF(Py_None); return Py_None; } static PyObject * __Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op) { PyObject* result = (op->func_code) ? op->func_code : Py_None; Py_INCREF(result); return result; } static int __Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { PyObject *res = op->defaults_getter((PyObject *) op); if (unlikely(!res)) return -1; op->defaults_tuple = PyTuple_GET_ITEM(res, 0); Py_INCREF(op->defaults_tuple); op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); Py_INCREF(op->defaults_kwdict); Py_DECREF(res); return 0; } static int __Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value) { PyObject* tmp; if (!value) { value = Py_None; } else if (value != Py_None && !PyTuple_Check(value)) { PyErr_SetString(PyExc_TypeError, "__defaults__ must be set to a tuple object"); return -1; } Py_INCREF(value); tmp = op->defaults_tuple; op->defaults_tuple = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op) { PyObject* result = op->defaults_tuple; if (unlikely(!result)) { if (op->defaults_getter) { if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; result = op->defaults_tuple; } else { result = Py_None; } } Py_INCREF(result); return result; } static int __Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value) { PyObject* tmp; if (!value) { value = Py_None; } else if (value != Py_None && !PyDict_Check(value)) { PyErr_SetString(PyExc_TypeError, "__kwdefaults__ must be set to a dict object"); return -1; } Py_INCREF(value); tmp = op->defaults_kwdict; op->defaults_kwdict = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op) { PyObject* result = op->defaults_kwdict; if (unlikely(!result)) { if (op->defaults_getter) { if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; result = op->defaults_kwdict; } else { result = Py_None; } } Py_INCREF(result); return result; } static int __Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value) { PyObject* tmp; if (!value || value == Py_None) { value = NULL; } else if (!PyDict_Check(value)) { PyErr_SetString(PyExc_TypeError, "__annotations__ must be set to a dict object"); return -1; } Py_XINCREF(value); tmp = op->func_annotations; op->func_annotations = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op) { PyObject* result = op->func_annotations; if (unlikely(!result)) { result = PyDict_New(); if (unlikely(!result)) return NULL; op->func_annotations = result; } Py_INCREF(result); return result; } static PyGetSetDef __pyx_CyFunction_getsets[] = { {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, {0, 0, 0, 0, 0} }; #ifndef PY_WRITE_RESTRICTED /* < Py2.5 */ #define PY_WRITE_RESTRICTED WRITE_RESTRICTED #endif static PyMemberDef __pyx_CyFunction_members[] = { {(char *) "__module__", T_OBJECT, offsetof(__pyx_CyFunctionObject, func.m_module), PY_WRITE_RESTRICTED, 0}, {0, 0, 0, 0, 0} }; static PyObject * __Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) { #if PY_MAJOR_VERSION >= 3 return PyUnicode_FromString(m->func.m_ml->ml_name); #else return PyString_FromString(m->func.m_ml->ml_name); #endif } static PyMethodDef __pyx_CyFunction_methods[] = { {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, {0, 0, 0, 0} }; static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname, PyObject *closure, PyObject *module, PyObject* code) { __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type); if (op == NULL) return NULL; op->flags = flags; op->func_weakreflist = NULL; op->func.m_ml = ml; op->func.m_self = (PyObject *) op; Py_XINCREF(closure); op->func_closure = closure; Py_XINCREF(module); op->func.m_module = module; op->func_dict = NULL; op->func_name = NULL; Py_INCREF(qualname); op->func_qualname = qualname; op->func_doc = NULL; op->func_classobj = NULL; Py_XINCREF(code); op->func_code = code; op->defaults_pyobjects = 0; op->defaults = NULL; op->defaults_tuple = NULL; op->defaults_kwdict = NULL; op->defaults_getter = NULL; op->func_annotations = NULL; PyObject_GC_Track(op); return (PyObject *) op; } static int __Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) { Py_CLEAR(m->func_closure); Py_CLEAR(m->func.m_module); Py_CLEAR(m->func_dict); Py_CLEAR(m->func_name); Py_CLEAR(m->func_qualname); Py_CLEAR(m->func_doc); Py_CLEAR(m->func_code); Py_CLEAR(m->func_classobj); Py_CLEAR(m->defaults_tuple); Py_CLEAR(m->defaults_kwdict); Py_CLEAR(m->func_annotations); if (m->defaults) { PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); int i; for (i = 0; i < m->defaults_pyobjects; i++) Py_XDECREF(pydefaults[i]); PyMem_Free(m->defaults); m->defaults = NULL; } return 0; } static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) { PyObject_GC_UnTrack(m); if (m->func_weakreflist != NULL) PyObject_ClearWeakRefs((PyObject *) m); __Pyx_CyFunction_clear(m); PyObject_GC_Del(m); } static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) { Py_VISIT(m->func_closure); Py_VISIT(m->func.m_module); Py_VISIT(m->func_dict); Py_VISIT(m->func_name); Py_VISIT(m->func_qualname); Py_VISIT(m->func_doc); Py_VISIT(m->func_code); Py_VISIT(m->func_classobj); Py_VISIT(m->defaults_tuple); Py_VISIT(m->defaults_kwdict); if (m->defaults) { PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); int i; for (i = 0; i < m->defaults_pyobjects; i++) Py_VISIT(pydefaults[i]); } return 0; } static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) { __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { Py_INCREF(func); return func; } if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { if (type == NULL) type = (PyObject *)(Py_TYPE(obj)); return PyMethod_New(func, type, (PyObject *)(Py_TYPE(type))); } if (obj == Py_None) obj = NULL; return PyMethod_New(func, obj, type); } static PyObject* __Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) { #if PY_MAJOR_VERSION >= 3 return PyUnicode_FromFormat("", op->func_qualname, (void *)op); #else return PyString_FromFormat("", PyString_AsString(op->func_qualname), (void *)op); #endif } #if CYTHON_COMPILING_IN_PYPY static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { PyCFunctionObject* f = (PyCFunctionObject*)func; PyCFunction meth = PyCFunction_GET_FUNCTION(func); PyObject *self = PyCFunction_GET_SELF(func); Py_ssize_t size; switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) { case METH_VARARGS: if (likely(kw == NULL) || PyDict_Size(kw) == 0) return (*meth)(self, arg); break; case METH_VARARGS | METH_KEYWORDS: return (*(PyCFunctionWithKeywords)meth)(self, arg, kw); case METH_NOARGS: if (likely(kw == NULL) || PyDict_Size(kw) == 0) { size = PyTuple_GET_SIZE(arg); if (size == 0) return (*meth)(self, NULL); PyErr_Format(PyExc_TypeError, "%.200s() takes no arguments (%zd given)", f->m_ml->ml_name, size); return NULL; } break; case METH_O: if (likely(kw == NULL) || PyDict_Size(kw) == 0) { size = PyTuple_GET_SIZE(arg); if (size == 1) return (*meth)(self, PyTuple_GET_ITEM(arg, 0)); PyErr_Format(PyExc_TypeError, "%.200s() takes exactly one argument (%zd given)", f->m_ml->ml_name, size); return NULL; } break; default: PyErr_SetString(PyExc_SystemError, "Bad call flags in " "__Pyx_CyFunction_Call. METH_OLDARGS is no " "longer supported!"); return NULL; } PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", f->m_ml->ml_name); return NULL; } #else static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { return PyCFunction_Call(func, arg, kw); } #endif static PyTypeObject __pyx_CyFunctionType_type = { PyVarObject_HEAD_INIT(0, 0) __Pyx_NAMESTR("cython_function_or_method"), /*tp_name*/ sizeof(__pyx_CyFunctionObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor) __Pyx_CyFunction_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ #else 0, /*reserved*/ #endif (reprfunc) __Pyx_CyFunction_repr, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ __Pyx_CyFunction_Call, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags*/ 0, /*tp_doc*/ (traverseproc) __Pyx_CyFunction_traverse, /*tp_traverse*/ (inquiry) __Pyx_CyFunction_clear, /*tp_clear*/ 0, /*tp_richcompare*/ offsetof(__pyx_CyFunctionObject, func_weakreflist), /* tp_weaklistoffse */ 0, /*tp_iter*/ 0, /*tp_iternext*/ __pyx_CyFunction_methods, /*tp_methods*/ __pyx_CyFunction_members, /*tp_members*/ __pyx_CyFunction_getsets, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ __Pyx_CyFunction_descr_get, /*tp_descr_get*/ 0, /*tp_descr_set*/ offsetof(__pyx_CyFunctionObject, func_dict),/*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ 0, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ 0, /*tp_mro*/ 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ 0, /*tp_del*/ #if PY_VERSION_HEX >= 0x02060000 0, /*tp_version_tag*/ #endif #if PY_VERSION_HEX >= 0x030400a1 && defined(Py_TPFLAGS_HAVE_FINALIZE) 0, /*tp_finalize*/ #endif }; static int __Pyx_CyFunction_init(void) { #if !CYTHON_COMPILING_IN_PYPY __pyx_CyFunctionType_type.tp_call = PyCFunction_Call; #endif if (PyType_Ready(&__pyx_CyFunctionType_type) < 0) return -1; __pyx_CyFunctionType = &__pyx_CyFunctionType_type; return 0; } static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; m->defaults = PyMem_Malloc(size); if (!m->defaults) return PyErr_NoMemory(); memset(m->defaults, 0, size); m->defaults_pyobjects = pyobjects; return m->defaults; } static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; m->defaults_tuple = tuple; Py_INCREF(tuple); } static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; m->defaults_kwdict = dict; Py_INCREF(dict); } static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; m->func_annotations = dict; Py_INCREF(dict); } static CYTHON_INLINE PyObject* __Pyx_PyObject_Append(PyObject* L, PyObject* x) { if (likely(PyList_CheckExact(L))) { if (unlikely(__Pyx_PyList_Append(L, x) < 0)) return NULL; Py_INCREF(Py_None); return Py_None; /* this is just to have an accurate signature */ } else { return __Pyx_PyObject_CallMethod1(L, __pyx_n_s__append, x); } } static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) { #if CYTHON_COMPILING_IN_CPYTHON PyMappingMethods* mp; #if PY_MAJOR_VERSION < 3 PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; if (likely(ms && ms->sq_slice)) { if (!has_cstart) { if (_py_start && (*_py_start != Py_None)) { cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; } else cstart = 0; } if (!has_cstop) { if (_py_stop && (*_py_stop != Py_None)) { cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; } else cstop = PY_SSIZE_T_MAX; } if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { Py_ssize_t l = ms->sq_length(obj); if (likely(l >= 0)) { if (cstop < 0) { cstop += l; if (cstop < 0) cstop = 0; } if (cstart < 0) { cstart += l; if (cstart < 0) cstart = 0; } } else { if (PyErr_ExceptionMatches(PyExc_OverflowError)) PyErr_Clear(); else goto bad; } } return ms->sq_slice(obj, cstart, cstop); } #endif mp = Py_TYPE(obj)->tp_as_mapping; if (likely(mp && mp->mp_subscript)) #endif { PyObject* result; PyObject *py_slice, *py_start, *py_stop; if (_py_slice) { py_slice = *_py_slice; } else { PyObject* owned_start = NULL; PyObject* owned_stop = NULL; if (_py_start) { py_start = *_py_start; } else { if (has_cstart) { owned_start = py_start = PyInt_FromSsize_t(cstart); if (unlikely(!py_start)) goto bad; } else py_start = Py_None; } if (_py_stop) { py_stop = *_py_stop; } else { if (has_cstop) { owned_stop = py_stop = PyInt_FromSsize_t(cstop); if (unlikely(!py_stop)) { Py_XDECREF(owned_start); goto bad; } } else py_stop = Py_None; } py_slice = PySlice_New(py_start, py_stop, Py_None); Py_XDECREF(owned_start); Py_XDECREF(owned_stop); if (unlikely(!py_slice)) goto bad; } #if CYTHON_COMPILING_IN_CPYTHON result = mp->mp_subscript(obj, py_slice); #else result = PyObject_GetItem(obj, py_slice); #endif if (!_py_slice) { Py_DECREF(py_slice); } return result; } PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name); bad: return NULL; } static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) { #if CYTHON_COMPILING_IN_CPYTHON PyThreadState *tstate = PyThreadState_GET(); *type = tstate->exc_type; *value = tstate->exc_value; *tb = tstate->exc_traceback; Py_XINCREF(*type); Py_XINCREF(*value); Py_XINCREF(*tb); #else PyErr_GetExcInfo(type, value, tb); #endif } static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) { #if CYTHON_COMPILING_IN_CPYTHON PyObject *tmp_type, *tmp_value, *tmp_tb; PyThreadState *tstate = PyThreadState_GET(); tmp_type = tstate->exc_type; tmp_value = tstate->exc_value; tmp_tb = tstate->exc_traceback; tstate->exc_type = type; tstate->exc_value = value; tstate->exc_traceback = tb; Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); #else PyErr_SetExcInfo(type, value, tb); #endif } static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { PyObject *empty_list = 0; PyObject *module = 0; PyObject *global_dict = 0; PyObject *empty_dict = 0; PyObject *list; #if PY_VERSION_HEX < 0x03030000 PyObject *py_import; py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s____import__); if (!py_import) goto bad; #endif if (from_list) list = from_list; else { empty_list = PyList_New(0); if (!empty_list) goto bad; list = empty_list; } global_dict = PyModule_GetDict(__pyx_m); if (!global_dict) goto bad; empty_dict = PyDict_New(); if (!empty_dict) goto bad; #if PY_VERSION_HEX >= 0x02050000 { #if PY_MAJOR_VERSION >= 3 if (level == -1) { if (strchr(__Pyx_MODULE_NAME, '.')) { #if PY_VERSION_HEX < 0x03030000 PyObject *py_level = PyInt_FromLong(1); if (!py_level) goto bad; module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, py_level, NULL); Py_DECREF(py_level); #else module = PyImport_ImportModuleLevelObject( name, global_dict, empty_dict, list, 1); #endif if (!module) { if (!PyErr_ExceptionMatches(PyExc_ImportError)) goto bad; PyErr_Clear(); } } level = 0; /* try absolute import on failure */ } #endif if (!module) { #if PY_VERSION_HEX < 0x03030000 PyObject *py_level = PyInt_FromLong(level); if (!py_level) goto bad; module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, py_level, NULL); Py_DECREF(py_level); #else module = PyImport_ImportModuleLevelObject( name, global_dict, empty_dict, list, level); #endif } } #else if (level>0) { PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); goto bad; } module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, NULL); #endif bad: #if PY_VERSION_HEX < 0x03030000 Py_XDECREF(py_import); #endif Py_XDECREF(empty_list); Py_XDECREF(empty_dict); return module; } static PyObject *__Pyx_FindPy2Metaclass(PyObject *bases) { PyObject *metaclass; #if PY_MAJOR_VERSION < 3 if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) { PyObject *base = PyTuple_GET_ITEM(bases, 0); metaclass = __Pyx_PyObject_GetAttrStr(base, __pyx_n_s____class__); if (!metaclass) { PyErr_Clear(); metaclass = (PyObject*) Py_TYPE(base); } } else { metaclass = (PyObject *) &PyClass_Type; } #else if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) { PyObject *base = PyTuple_GET_ITEM(bases, 0); metaclass = (PyObject*) Py_TYPE(base); } else { metaclass = (PyObject *) &PyType_Type; } #endif Py_INCREF(metaclass); return metaclass; } static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, PyObject *qualname, PyObject *modname) { PyObject *result; PyObject *metaclass; if (PyDict_SetItem(dict, __pyx_n_s____module__, modname) < 0) return NULL; if (PyDict_SetItem(dict, __pyx_n_s____qualname__, qualname) < 0) return NULL; metaclass = PyDict_GetItem(dict, __pyx_n_s____metaclass__); if (metaclass) { Py_INCREF(metaclass); } else { metaclass = __Pyx_FindPy2Metaclass(bases); } result = PyObject_CallFunctionObjArgs(metaclass, name, bases, dict, NULL); Py_DECREF(metaclass); return result; } static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) { const unsigned char neg_one = (unsigned char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned char" : "value too large to convert to unsigned char"); } return (unsigned char)-1; } return (unsigned char)val; } return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) { const unsigned short neg_one = (unsigned short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned short" : "value too large to convert to unsigned short"); } return (unsigned short)-1; } return (unsigned short)val; } return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) { const unsigned int neg_one = (unsigned int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned int" : "value too large to convert to unsigned int"); } return (unsigned int)-1; } return (unsigned int)val; } return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) { const char neg_one = (char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to char" : "value too large to convert to char"); } return (char)-1; } return (char)val; } return (char)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) { const short neg_one = (short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to short" : "value too large to convert to short"); } return (short)-1; } return (short)val; } return (short)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) { const int neg_one = (int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to int" : "value too large to convert to int"); } return (int)-1; } return (int)val; } return (int)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) { const signed char neg_one = (signed char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed char" : "value too large to convert to signed char"); } return (signed char)-1; } return (signed char)val; } return (signed char)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) { const signed short neg_one = (signed short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed short" : "value too large to convert to signed short"); } return (signed short)-1; } return (signed short)val; } return (signed short)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) { const signed int neg_one = (signed int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed int" : "value too large to convert to signed int"); } return (signed int)-1; } return (signed int)val; } return (signed int)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) { const int neg_one = (int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to int" : "value too large to convert to int"); } return (int)-1; } return (int)val; } return (int)__Pyx_PyInt_AsLong(x); } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) { const unsigned long neg_one = (unsigned long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned long"); return (unsigned long)-1; } return (unsigned long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (unsigned long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned long"); return (unsigned long)-1; } return (unsigned long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(unsigned long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(unsigned long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (unsigned long)PyLong_AsLong(x); } } else { unsigned long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (unsigned long)-1; val = __Pyx_PyInt_AsUnsignedLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) { const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned PY_LONG_LONG"); return (unsigned PY_LONG_LONG)-1; } return (unsigned PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned PY_LONG_LONG"); return (unsigned PY_LONG_LONG)-1; } return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x); } } else { unsigned PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (unsigned PY_LONG_LONG)-1; val = __Pyx_PyInt_AsUnsignedLongLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) { const long neg_one = (long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to long"); return (long)-1; } return (long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to long"); return (long)-1; } return (long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (long)PyLong_AsLong(x); } } else { long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (long)-1; val = __Pyx_PyInt_AsLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) { const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to PY_LONG_LONG"); return (PY_LONG_LONG)-1; } return (PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to PY_LONG_LONG"); return (PY_LONG_LONG)-1; } return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (PY_LONG_LONG)PyLong_AsLongLong(x); } } else { PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (PY_LONG_LONG)-1; val = __Pyx_PyInt_AsLongLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) { const signed long neg_one = (signed long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed long"); return (signed long)-1; } return (signed long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (signed long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed long"); return (signed long)-1; } return (signed long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(signed long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(signed long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (signed long)PyLong_AsLong(x); } } else { signed long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (signed long)-1; val = __Pyx_PyInt_AsSignedLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) { const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed PY_LONG_LONG"); return (signed PY_LONG_LONG)-1; } return (signed PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed PY_LONG_LONG"); return (signed PY_LONG_LONG)-1; } return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (signed PY_LONG_LONG)PyLong_AsLongLong(x); } } else { signed PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (signed PY_LONG_LONG)-1; val = __Pyx_PyInt_AsSignedLongLong(tmp); Py_DECREF(tmp); return val; } } static int __Pyx_check_binary_version(void) { char ctversion[4], rtversion[4]; PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { char message[200]; PyOS_snprintf(message, sizeof(message), "compiletime version %s of module '%.100s' " "does not match runtime version %s", ctversion, __Pyx_MODULE_NAME, rtversion); #if PY_VERSION_HEX < 0x02050000 return PyErr_Warn(NULL, message); #else return PyErr_WarnEx(NULL, message, 1); #endif } return 0; } static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { int start = 0, mid = 0, end = count - 1; if (end >= 0 && code_line > entries[end].code_line) { return count; } while (start < end) { mid = (start + end) / 2; if (code_line < entries[mid].code_line) { end = mid; } else if (code_line > entries[mid].code_line) { start = mid + 1; } else { return mid; } } if (code_line <= entries[mid].code_line) { return mid; } else { return mid + 1; } } static PyCodeObject *__pyx_find_code_object(int code_line) { PyCodeObject* code_object; int pos; if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { return NULL; } pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { return NULL; } code_object = __pyx_code_cache.entries[pos].code_object; Py_INCREF(code_object); return code_object; } static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { int pos, i; __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; if (unlikely(!code_line)) { return; } if (unlikely(!entries)) { entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); if (likely(entries)) { __pyx_code_cache.entries = entries; __pyx_code_cache.max_count = 64; __pyx_code_cache.count = 1; entries[0].code_line = code_line; entries[0].code_object = code_object; Py_INCREF(code_object); } return; } pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { PyCodeObject* tmp = entries[pos].code_object; entries[pos].code_object = code_object; Py_DECREF(tmp); return; } if (__pyx_code_cache.count == __pyx_code_cache.max_count) { int new_max = __pyx_code_cache.max_count + 64; entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); if (unlikely(!entries)) { return; } __pyx_code_cache.entries = entries; __pyx_code_cache.max_count = new_max; } for (i=__pyx_code_cache.count; i>pos; i--) { entries[i] = entries[i-1]; } entries[pos].code_line = code_line; entries[pos].code_object = code_object; __pyx_code_cache.count++; Py_INCREF(code_object); } #include "compile.h" #include "frameobject.h" #include "traceback.h" static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( const char *funcname, int c_line, int py_line, const char *filename) { PyCodeObject *py_code = 0; PyObject *py_srcfile = 0; PyObject *py_funcname = 0; #if PY_MAJOR_VERSION < 3 py_srcfile = PyString_FromString(filename); #else py_srcfile = PyUnicode_FromString(filename); #endif if (!py_srcfile) goto bad; if (c_line) { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); #else py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); #endif } else { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromString(funcname); #else py_funcname = PyUnicode_FromString(funcname); #endif } if (!py_funcname) goto bad; py_code = __Pyx_PyCode_New( 0, /*int argcount,*/ 0, /*int kwonlyargcount,*/ 0, /*int nlocals,*/ 0, /*int stacksize,*/ 0, /*int flags,*/ __pyx_empty_bytes, /*PyObject *code,*/ __pyx_empty_tuple, /*PyObject *consts,*/ __pyx_empty_tuple, /*PyObject *names,*/ __pyx_empty_tuple, /*PyObject *varnames,*/ __pyx_empty_tuple, /*PyObject *freevars,*/ __pyx_empty_tuple, /*PyObject *cellvars,*/ py_srcfile, /*PyObject *filename,*/ py_funcname, /*PyObject *name,*/ py_line, /*int firstlineno,*/ __pyx_empty_bytes /*PyObject *lnotab*/ ); Py_DECREF(py_srcfile); Py_DECREF(py_funcname); return py_code; bad: Py_XDECREF(py_srcfile); Py_XDECREF(py_funcname); return NULL; } static void __Pyx_AddTraceback(const char *funcname, int c_line, int py_line, const char *filename) { PyCodeObject *py_code = 0; PyObject *py_globals = 0; PyFrameObject *py_frame = 0; py_code = __pyx_find_code_object(c_line ? c_line : py_line); if (!py_code) { py_code = __Pyx_CreateCodeObjectForTraceback( funcname, c_line, py_line, filename); if (!py_code) goto bad; __pyx_insert_code_object(c_line ? c_line : py_line, py_code); } py_globals = PyModule_GetDict(__pyx_m); if (!py_globals) goto bad; py_frame = PyFrame_New( PyThreadState_GET(), /*PyThreadState *tstate,*/ py_code, /*PyCodeObject *code,*/ py_globals, /*PyObject *globals,*/ 0 /*PyObject *locals*/ ); if (!py_frame) goto bad; py_frame->f_lineno = py_line; PyTraceBack_Here(py_frame); bad: Py_XDECREF(py_code); Py_XDECREF(py_frame); } static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { while (t->p) { #if PY_MAJOR_VERSION < 3 if (t->is_unicode) { *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); } else if (t->intern) { *t->p = PyString_InternFromString(t->s); } else { *t->p = PyString_FromStringAndSize(t->s, t->n - 1); } #else /* Python 3+ has unicode identifiers */ if (t->is_unicode | t->is_str) { if (t->intern) { *t->p = PyUnicode_InternFromString(t->s); } else if (t->encoding) { *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); } else { *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); } } else { *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); } #endif if (!*t->p) return -1; ++t; } return 0; } static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); } static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { Py_ssize_t ignore; return __Pyx_PyObject_AsStringAndSize(o, &ignore); } static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT if ( #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII __Pyx_sys_getdefaultencoding_not_ascii && #endif PyUnicode_Check(o)) { #if PY_VERSION_HEX < 0x03030000 char* defenc_c; PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); if (!defenc) return NULL; defenc_c = PyBytes_AS_STRING(defenc); #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII { char* end = defenc_c + PyBytes_GET_SIZE(defenc); char* c; for (c = defenc_c; c < end; c++) { if ((unsigned char) (*c) >= 128) { PyUnicode_AsASCIIString(o); return NULL; } } } #endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ *length = PyBytes_GET_SIZE(defenc); return defenc_c; #else /* PY_VERSION_HEX < 0x03030000 */ if (PyUnicode_READY(o) == -1) return NULL; #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII if (PyUnicode_IS_ASCII(o)) { *length = PyUnicode_GET_DATA_SIZE(o); return PyUnicode_AsUTF8(o); } else { PyUnicode_AsASCIIString(o); return NULL; } #else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ return PyUnicode_AsUTF8AndSize(o, length); #endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ #endif /* PY_VERSION_HEX < 0x03030000 */ } else #endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ { char* result; int r = PyBytes_AsStringAndSize(o, &result, length); if (r < 0) { return NULL; } else { return result; } } } static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { int is_true = x == Py_True; if (is_true | (x == Py_False) | (x == Py_None)) return is_true; else return PyObject_IsTrue(x); } static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { PyNumberMethods *m; const char *name = NULL; PyObject *res = NULL; #if PY_MAJOR_VERSION < 3 if (PyInt_Check(x) || PyLong_Check(x)) #else if (PyLong_Check(x)) #endif return Py_INCREF(x), x; m = Py_TYPE(x)->tp_as_number; #if PY_MAJOR_VERSION < 3 if (m && m->nb_int) { name = "int"; res = PyNumber_Int(x); } else if (m && m->nb_long) { name = "long"; res = PyNumber_Long(x); } #else if (m && m->nb_int) { name = "int"; res = PyNumber_Long(x); } #endif if (res) { #if PY_MAJOR_VERSION < 3 if (!PyInt_Check(res) && !PyLong_Check(res)) { #else if (!PyLong_Check(res)) { #endif PyErr_Format(PyExc_TypeError, "__%s__ returned non-%s (type %.200s)", name, name, Py_TYPE(res)->tp_name); Py_DECREF(res); return NULL; } } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_TypeError, "an integer is required"); } return res; } static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { Py_ssize_t ival; PyObject* x = PyNumber_Index(b); if (!x) return -1; ival = PyInt_AsSsize_t(x); Py_DECREF(x); return ival; } static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { #if PY_VERSION_HEX < 0x02050000 if (ival <= LONG_MAX) return PyInt_FromLong((long)ival); else { unsigned char *bytes = (unsigned char *) &ival; int one = 1; int little = (int)*(unsigned char*)&one; return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); } #else return PyInt_FromSize_t(ival); #endif } static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) { unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x); if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) { if ((val != (unsigned PY_LONG_LONG)-1) || !PyErr_Occurred()) PyErr_SetString(PyExc_OverflowError, "value too large to convert to size_t"); return (size_t)-1; } return (size_t)val; } #endif /* Py_PYTHON_H */ ga-5-3/python/ga4py/gain/__init__.py0000640005473000001440000000171711613721612016176 0ustar d3n000usersimport mpi4py.MPI from core import * from misc import * import random if __name__ != '__main__': import inspect as _inspect import sys import numpy # imports from 'numpy' module every missing attribute into 'gain' module self_module = sys.modules[__name__] # import all classes not already overridden for name in dir(numpy): if not hasattr(self_module, name): attr = getattr(numpy, name) if _inspect.isclass(attr): setattr(self_module, name, attr) # import some other numpy functions directly from numpy import alen from numpy import newaxis class PrintZero(object): def __init__(self): self.me = ga.nodeid() self.stdout = sys.stdout def write(self, something): if not self.me: self.stdout.write(something) def flush(self): if not self.me: self.stdout.flush() import sys _stdout = sys.stdout sys.stdout = PrintZero() ga-5-3/python/ga4py/gain/random.c0000640005473000001440000035343412275260607015526 0ustar d3n000users/* Generated by Cython 0.19.2 on Fri Feb 7 14:43:18 2014 */ #define PY_SSIZE_T_CLEAN #ifndef CYTHON_USE_PYLONG_INTERNALS #ifdef PYLONG_BITS_IN_DIGIT #define CYTHON_USE_PYLONG_INTERNALS 0 #else #include "pyconfig.h" #ifdef PYLONG_BITS_IN_DIGIT #define CYTHON_USE_PYLONG_INTERNALS 1 #else #define CYTHON_USE_PYLONG_INTERNALS 0 #endif #endif #endif #include "Python.h" #ifndef Py_PYTHON_H #error Python headers needed to compile C extensions, please install development version of Python. #elif PY_VERSION_HEX < 0x02040000 #error Cython requires Python 2.4+. #else #include /* For offsetof */ #ifndef offsetof #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) #endif #if !defined(WIN32) && !defined(MS_WINDOWS) #ifndef __stdcall #define __stdcall #endif #ifndef __cdecl #define __cdecl #endif #ifndef __fastcall #define __fastcall #endif #endif #ifndef DL_IMPORT #define DL_IMPORT(t) t #endif #ifndef DL_EXPORT #define DL_EXPORT(t) t #endif #ifndef PY_LONG_LONG #define PY_LONG_LONG LONG_LONG #endif #ifndef Py_HUGE_VAL #define Py_HUGE_VAL HUGE_VAL #endif #ifdef PYPY_VERSION #define CYTHON_COMPILING_IN_PYPY 1 #define CYTHON_COMPILING_IN_CPYTHON 0 #else #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 1 #endif #if PY_VERSION_HEX < 0x02050000 typedef int Py_ssize_t; #define PY_SSIZE_T_MAX INT_MAX #define PY_SSIZE_T_MIN INT_MIN #define PY_FORMAT_SIZE_T "" #define CYTHON_FORMAT_SSIZE_T "" #define PyInt_FromSsize_t(z) PyInt_FromLong(z) #define PyInt_AsSsize_t(o) __Pyx_PyInt_AsInt(o) #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ (PyErr_Format(PyExc_TypeError, \ "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ (PyObject*)0)) #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ !PyComplex_Check(o)) #define PyIndex_Check __Pyx_PyIndex_Check #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) #define __PYX_BUILD_PY_SSIZE_T "i" #else #define __PYX_BUILD_PY_SSIZE_T "n" #define CYTHON_FORMAT_SSIZE_T "z" #define __Pyx_PyIndex_Check PyIndex_Check #endif #if PY_VERSION_HEX < 0x02060000 #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) #define PyVarObject_HEAD_INIT(type, size) \ PyObject_HEAD_INIT(type) size, #define PyType_Modified(t) typedef struct { void *buf; PyObject *obj; Py_ssize_t len; Py_ssize_t itemsize; int readonly; int ndim; char *format; Py_ssize_t *shape; Py_ssize_t *strides; Py_ssize_t *suboffsets; void *internal; } Py_buffer; #define PyBUF_SIMPLE 0 #define PyBUF_WRITABLE 0x0001 #define PyBUF_FORMAT 0x0004 #define PyBUF_ND 0x0008 #define PyBUF_STRIDES (0x0010 | PyBUF_ND) #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); typedef void (*releasebufferproc)(PyObject *, Py_buffer *); #endif #if PY_MAJOR_VERSION < 3 #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else #define __Pyx_BUILTIN_MODULE_NAME "builtins" #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #endif #if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6 #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") #endif #if PY_MAJOR_VERSION >= 3 #define Py_TPFLAGS_CHECKTYPES 0 #define Py_TPFLAGS_HAVE_INDEX 0 #endif #if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) #define Py_TPFLAGS_HAVE_NEWBUFFER 0 #endif #if PY_VERSION_HEX < 0x02060000 #define Py_TPFLAGS_HAVE_VERSION_TAG 0 #endif #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) #define CYTHON_PEP393_ENABLED 1 #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ 0 : _PyUnicode_Ready((PyObject *)(op))) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) #else #define CYTHON_PEP393_ENABLED 0 #define __Pyx_PyUnicode_READY(op) (0) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) #define __Pyx_PyUnicode_READ(k, d, i) ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i])) #endif #if PY_MAJOR_VERSION >= 3 #define PyBaseString_Type PyUnicode_Type #define PyStringObject PyUnicodeObject #define PyString_Type PyUnicode_Type #define PyString_Check PyUnicode_Check #define PyString_CheckExact PyUnicode_CheckExact #endif #if PY_VERSION_HEX < 0x02060000 #define PyBytesObject PyStringObject #define PyBytes_Type PyString_Type #define PyBytes_Check PyString_Check #define PyBytes_CheckExact PyString_CheckExact #define PyBytes_FromString PyString_FromString #define PyBytes_FromStringAndSize PyString_FromStringAndSize #define PyBytes_FromFormat PyString_FromFormat #define PyBytes_DecodeEscape PyString_DecodeEscape #define PyBytes_AsString PyString_AsString #define PyBytes_AsStringAndSize PyString_AsStringAndSize #define PyBytes_Size PyString_Size #define PyBytes_AS_STRING PyString_AS_STRING #define PyBytes_GET_SIZE PyString_GET_SIZE #define PyBytes_Repr PyString_Repr #define PyBytes_Concat PyString_Concat #define PyBytes_ConcatAndDel PyString_ConcatAndDel #endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) #else #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ PyString_Check(obj) || PyUnicode_Check(obj)) #define __Pyx_PyBaseString_CheckExact(obj) (Py_TYPE(obj) == &PyBaseString_Type) #endif #if PY_VERSION_HEX < 0x02060000 #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) #endif #ifndef PySet_CheckExact #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) #endif #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) #if PY_MAJOR_VERSION >= 3 #define PyIntObject PyLongObject #define PyInt_Type PyLong_Type #define PyInt_Check(op) PyLong_Check(op) #define PyInt_CheckExact(op) PyLong_CheckExact(op) #define PyInt_FromString PyLong_FromString #define PyInt_FromUnicode PyLong_FromUnicode #define PyInt_FromLong PyLong_FromLong #define PyInt_FromSize_t PyLong_FromSize_t #define PyInt_FromSsize_t PyLong_FromSsize_t #define PyInt_AsLong PyLong_AsLong #define PyInt_AS_LONG PyLong_AS_LONG #define PyInt_AsSsize_t PyLong_AsSsize_t #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask #endif #if PY_MAJOR_VERSION >= 3 #define PyBoolObject PyLongObject #endif #if PY_VERSION_HEX < 0x03020000 typedef long Py_hash_t; #define __Pyx_PyInt_FromHash_t PyInt_FromLong #define __Pyx_PyInt_AsHash_t PyInt_AsLong #else #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t #endif #if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) #else #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) #endif #if PY_MAJOR_VERSION >= 3 #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) #endif #if PY_VERSION_HEX < 0x02050000 #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) #else #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) #endif #if PY_VERSION_HEX < 0x02050000 #define __Pyx_NAMESTR(n) ((char *)(n)) #define __Pyx_DOCSTR(n) ((char *)(n)) #else #define __Pyx_NAMESTR(n) (n) #define __Pyx_DOCSTR(n) (n) #endif #ifndef CYTHON_INLINE #if defined(__GNUC__) #define CYTHON_INLINE __inline__ #elif defined(_MSC_VER) #define CYTHON_INLINE __inline #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CYTHON_INLINE inline #else #define CYTHON_INLINE #endif #endif #ifndef CYTHON_RESTRICT #if defined(__GNUC__) #define CYTHON_RESTRICT __restrict__ #elif defined(_MSC_VER) && _MSC_VER >= 1400 #define CYTHON_RESTRICT __restrict #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CYTHON_RESTRICT restrict #else #define CYTHON_RESTRICT #endif #endif #ifdef NAN #define __PYX_NAN() ((float) NAN) #else static CYTHON_INLINE float __PYX_NAN() { /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is a quiet NaN. */ float value; memset(&value, 0xFF, sizeof(value)); return value; } #endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) #else #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) #endif #ifndef __PYX_EXTERN_C #ifdef __cplusplus #define __PYX_EXTERN_C extern "C" #else #define __PYX_EXTERN_C extern #endif #endif #if defined(WIN32) || defined(MS_WINDOWS) #define _USE_MATH_DEFINES #endif #include #define __PYX_HAVE__ga4py__gain__random #define __PYX_HAVE_API__ga4py__gain__random #ifdef _OPENMP #include #endif /* _OPENMP */ #ifdef PYREX_WITHOUT_ASSERTIONS #define CYTHON_WITHOUT_ASSERTIONS #endif #ifndef CYTHON_UNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) # define CYTHON_UNUSED __attribute__ ((__unused__)) # else # define CYTHON_UNUSED # endif # elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) # define CYTHON_UNUSED __attribute__ ((__unused__)) # else # define CYTHON_UNUSED # endif #endif typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ #define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 #define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 #define __PYX_DEFAULT_STRING_ENCODING "" #define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString #define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); #define __Pyx_PyBytes_FromString PyBytes_FromString #define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); #if PY_MAJOR_VERSION < 3 #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize #else #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize #endif #define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) #define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) #define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) #define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) #if PY_MAJOR_VERSION < 3 static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { const Py_UNICODE *u_end = u; while (*u_end++) ; return u_end - u - 1; } #else #define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen #endif #define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) #define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode #define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode #define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) #define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*); #if CYTHON_COMPILING_IN_CPYTHON #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) #else #define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) #endif #define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII static int __Pyx_sys_getdefaultencoding_not_ascii; static int __Pyx_init_sys_getdefaultencoding_params() { PyObject* sys = NULL; PyObject* default_encoding = NULL; PyObject* ascii_chars_u = NULL; PyObject* ascii_chars_b = NULL; sys = PyImport_ImportModule("sys"); if (sys == NULL) goto bad; default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); if (default_encoding == NULL) goto bad; if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { __Pyx_sys_getdefaultencoding_not_ascii = 0; } else { const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); char ascii_chars[128]; int c; for (c = 0; c < 128; c++) { ascii_chars[c] = c; } __Pyx_sys_getdefaultencoding_not_ascii = 1; ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); if (ascii_chars_u == NULL) goto bad; ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { PyErr_Format( PyExc_ValueError, "This module compiled with c_string_encoding=ascii, but default encoding '%s' is not a superset of ascii.", default_encoding_c); goto bad; } } Py_XDECREF(sys); Py_XDECREF(default_encoding); Py_XDECREF(ascii_chars_u); Py_XDECREF(ascii_chars_b); return 0; bad: Py_XDECREF(sys); Py_XDECREF(default_encoding); Py_XDECREF(ascii_chars_u); Py_XDECREF(ascii_chars_b); return -1; } #endif #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) #else #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT static char* __PYX_DEFAULT_STRING_ENCODING; static int __Pyx_init_sys_getdefaultencoding_params() { PyObject* sys = NULL; PyObject* default_encoding = NULL; char* default_encoding_c; sys = PyImport_ImportModule("sys"); if (sys == NULL) goto bad; default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); if (default_encoding == NULL) goto bad; default_encoding_c = PyBytes_AS_STRING(default_encoding); __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); Py_DECREF(sys); Py_DECREF(default_encoding); return 0; bad: Py_XDECREF(sys); Py_XDECREF(default_encoding); return -1; } #endif #endif #ifdef __GNUC__ /* Test for GCC > 2.95 */ #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #else /* __GNUC__ > 2 ... */ #define likely(x) (x) #define unlikely(x) (x) #endif /* __GNUC__ > 2 ... */ #else /* __GNUC__ */ #define likely(x) (x) #define unlikely(x) (x) #endif /* __GNUC__ */ static PyObject *__pyx_m; static PyObject *__pyx_d; static PyObject *__pyx_b; static PyObject *__pyx_empty_tuple; static PyObject *__pyx_empty_bytes; static int __pyx_lineno; static int __pyx_clineno = 0; static const char * __pyx_cfilenm= __FILE__; static const char *__pyx_filename; static const char *__pyx_f[] = { "random.pyx", }; /*--- Type declarations ---*/ #ifndef CYTHON_REFNANNY #define CYTHON_REFNANNY 0 #endif #if CYTHON_REFNANNY typedef struct { void (*INCREF)(void*, PyObject*, int); void (*DECREF)(void*, PyObject*, int); void (*GOTREF)(void*, PyObject*, int); void (*GIVEREF)(void*, PyObject*, int); void* (*SetupContext)(const char*, int, const char*); void (*FinishContext)(void**); } __Pyx_RefNannyAPIStruct; static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; #ifdef WITH_THREAD #define __Pyx_RefNannySetupContext(name, acquire_gil) \ if (acquire_gil) { \ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ PyGILState_Release(__pyx_gilstate_save); \ } else { \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ } #else #define __Pyx_RefNannySetupContext(name, acquire_gil) \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) #endif #define __Pyx_RefNannyFinishContext() \ __Pyx_RefNanny->FinishContext(&__pyx_refnanny) #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) #else #define __Pyx_RefNannyDeclarations #define __Pyx_RefNannySetupContext(name, acquire_gil) #define __Pyx_RefNannyFinishContext() #define __Pyx_INCREF(r) Py_INCREF(r) #define __Pyx_DECREF(r) Py_DECREF(r) #define __Pyx_GOTREF(r) #define __Pyx_GIVEREF(r) #define __Pyx_XINCREF(r) Py_XINCREF(r) #define __Pyx_XDECREF(r) Py_XDECREF(r) #define __Pyx_XGOTREF(r) #define __Pyx_XGIVEREF(r) #endif /* CYTHON_REFNANNY */ #define __Pyx_XDECREF_SET(r, v) do { \ PyObject *tmp = (PyObject *) r; \ r = v; __Pyx_XDECREF(tmp); \ } while (0) #define __Pyx_DECREF_SET(r, v) do { \ PyObject *tmp = (PyObject *) r; \ r = v; __Pyx_DECREF(tmp); \ } while (0) #define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) #define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ const char* function_name); /*proto*/ static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { PyTypeObject* tp = Py_TYPE(obj); if (likely(tp->tp_getattro)) return tp->tp_getattro(obj, attr_name); #if PY_MAJOR_VERSION < 3 if (likely(tp->tp_getattr)) return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); #endif return PyObject_GetAttr(obj, attr_name); } #else #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) #endif static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ #define __Pyx_PyObject_DelSlice(obj, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound) \ __Pyx_PyObject_SetSlice(obj, (PyObject*)NULL, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound) static CYTHON_INLINE int __Pyx_PyObject_SetSlice( PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop, PyObject** py_start, PyObject** py_stop, PyObject** py_slice, int has_cstart, int has_cstop, int wraparound); static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /*proto*/ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *); static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *); static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *); static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *); static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *); static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *); static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *); static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *); static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *); static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *); static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *); static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *); static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *); static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *); static int __Pyx_check_binary_version(void); typedef struct { int code_line; PyCodeObject* code_object; } __Pyx_CodeObjectCacheEntry; struct __Pyx_CodeObjectCache { int count; int max_count; __Pyx_CodeObjectCacheEntry* entries; }; static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); static PyCodeObject *__pyx_find_code_object(int code_line); static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); static void __Pyx_AddTraceback(const char *funcname, int c_line, int py_line, const char *filename); /*proto*/ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ /* Module declarations from 'ga4py.gain.random' */ #define __Pyx_MODULE_NAME "ga4py.gain.random" int __pyx_module_is_main_ga4py__gain__random = 0; /* Implementation of 'ga4py.gain.random' */ static PyObject *__pyx_pf_5ga4py_4gain_6random_random_sample(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_size); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_6random_2seed(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seed); /* proto */ static char __pyx_k_4[] = "/home/d3n000/ga/hpc_website/globalarrays/download/ga-5-3/python/ga4py/gain/random.pyx"; static char __pyx_k_5[] = "ga4py.gain.random"; static char __pyx_k_8[] = "random_sample (line 9)"; static char __pyx_k_9[] = "random_sample(size=None)\n\n Return random floats in the half-open interval [0.0, 1.0).\n\n Results are from the \"continuous uniform\" distribution over the\n stated interval. To sample :math:`Unif[a, b), b > a` multiply\n the output of `random_sample` by `(b-a)` and add `a`::\n\n (b - a) * random_sample() + a\n\n Parameters\n ----------\n size : int or tuple of ints, optional\n Defines the shape of the returned array of random floats. If None\n (the default), returns a single float.\n\n Returns\n -------\n out : float or ndarray of floats\n Array of random floats of shape `size` (unless ``size=None``, in which\n case a single float is returned).\n\n Examples\n --------\n >>> np.random.random_sample()\n 0.47108547995356098\n >>> type(np.random.random_sample())\n \n >>> np.random.random_sample((5,))\n array([ 0.30220482, 0.86820401, 0.1654503 , 0.11659149, 0.54323428])\n\n Three-by-two array of random numbers from [-5, 0):\n\n >>> 5 * np.random.random_sample((3, 2)) - 5\n array([[-3.99149989, -0.52338984],\n [-2.99091858, -0.79479508],\n [-1.23204345, -1.75224494]])\n\n "; static char __pyx_k__a[] = "a"; static char __pyx_k__me[] = "me"; static char __pyx_k__np[] = "np"; static char __pyx_k__MPI[] = "MPI"; static char __pyx_k__buf[] = "buf"; static char __pyx_k__core[] = "core"; static char __pyx_k__seed[] = "seed"; static char __pyx_k__size[] = "size"; static char __pyx_k__bcast[] = "bcast"; static char __pyx_k__dtype[] = "dtype"; static char __pyx_k__numpy[] = "numpy"; static char __pyx_k__shape[] = "shape"; static char __pyx_k__access[] = "access"; static char __pyx_k__mpi4py[] = "mpi4py"; static char __pyx_k__random[] = "random"; static char __pyx_k__asarray[] = "asarray"; static char __pyx_k__ndarray[] = "ndarray"; static char __pyx_k____main__[] = "__main__"; static char __pyx_k____test__[] = "__test__"; static char __pyx_k__COMM_WORLD[] = "COMM_WORLD"; static char __pyx_k____import__[] = "__import__"; static char __pyx_k__random_sample[] = "random_sample"; static char __pyx_k__release_update[] = "release_update"; static PyObject *__pyx_kp_s_4; static PyObject *__pyx_n_s_5; static PyObject *__pyx_kp_u_8; static PyObject *__pyx_kp_u_9; static PyObject *__pyx_n_s__COMM_WORLD; static PyObject *__pyx_n_s__MPI; static PyObject *__pyx_n_s____import__; static PyObject *__pyx_n_s____main__; static PyObject *__pyx_n_s____test__; static PyObject *__pyx_n_s__a; static PyObject *__pyx_n_s__access; static PyObject *__pyx_n_s__asarray; static PyObject *__pyx_n_s__bcast; static PyObject *__pyx_n_s__buf; static PyObject *__pyx_n_s__core; static PyObject *__pyx_n_s__dtype; static PyObject *__pyx_n_s__me; static PyObject *__pyx_n_s__mpi4py; static PyObject *__pyx_n_s__ndarray; static PyObject *__pyx_n_s__np; static PyObject *__pyx_n_s__numpy; static PyObject *__pyx_n_s__random; static PyObject *__pyx_n_s__random_sample; static PyObject *__pyx_n_s__release_update; static PyObject *__pyx_n_s__seed; static PyObject *__pyx_n_s__shape; static PyObject *__pyx_n_s__size; static PyObject *__pyx_int_0; static PyObject *__pyx_k_slice_1; static PyObject *__pyx_k_tuple_2; static PyObject *__pyx_k_tuple_6; static PyObject *__pyx_k_codeobj_3; static PyObject *__pyx_k_codeobj_7; /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_6random_1random_sample(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_6random_random_sample[] = "random_sample(size=None)\n\n Return random floats in the half-open interval [0.0, 1.0).\n\n Results are from the \"continuous uniform\" distribution over the\n stated interval. To sample :math:`Unif[a, b), b > a` multiply\n the output of `random_sample` by `(b-a)` and add `a`::\n\n (b - a) * random_sample() + a\n\n Parameters\n ----------\n size : int or tuple of ints, optional\n Defines the shape of the returned array of random floats. If None\n (the default), returns a single float.\n\n Returns\n -------\n out : float or ndarray of floats\n Array of random floats of shape `size` (unless ``size=None``, in which\n case a single float is returned).\n\n Examples\n --------\n >>> np.random.random_sample()\n 0.47108547995356098\n >>> type(np.random.random_sample())\n \n >>> np.random.random_sample((5,))\n array([ 0.30220482, 0.86820401, 0.1654503 , 0.11659149, 0.54323428])\n\n Three-by-two array of random numbers from [-5, 0):\n\n >>> 5 * np.random.random_sample((3, 2)) - 5\n array([[-3.99149989, -0.52338984],\n [-2.99091858, -0.79479508],\n [-1.23204345, -1.75224494]])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_6random_1random_sample = {__Pyx_NAMESTR("random_sample"), (PyCFunction)__pyx_pw_5ga4py_4gain_6random_1random_sample, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_6random_random_sample)}; static PyObject *__pyx_pw_5ga4py_4gain_6random_1random_sample(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_size = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("random_sample (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,0}; PyObject* values[1] = {0}; /* "ga4py/gain/random.pyx":9 * import numpy as np * * def random_sample(size=None): # <<<<<<<<<<<<<< * """random_sample(size=None) * */ values[0] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__size); if (value) { values[0] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "random_sample") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_size = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("random_sample", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.random.random_sample", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_6random_random_sample(__pyx_self, __pyx_v_size); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_6random_random_sample(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_size) { PyObject *__pyx_v_a = NULL; PyObject *__pyx_v_buf = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("random_sample", 0); /* "ga4py/gain/random.pyx":56 * #else: * # return asarray(a) * a = None # <<<<<<<<<<<<<< * if size is None: * a = np.random.random_sample(size) */ __Pyx_INCREF(Py_None); __pyx_v_a = Py_None; /* "ga4py/gain/random.pyx":57 * # return asarray(a) * a = None * if size is None: # <<<<<<<<<<<<<< * a = np.random.random_sample(size) * a = MPI.COMM_WORLD.bcast(a, 0) */ __pyx_t_1 = (__pyx_v_size == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/gain/random.pyx":58 * a = None * if size is None: * a = np.random.random_sample(size) # <<<<<<<<<<<<<< * a = MPI.COMM_WORLD.bcast(a, 0) * else: */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__random); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__random_sample); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_size); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_size); __Pyx_GIVEREF(__pyx_v_size); __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_a, __pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/random.pyx":59 * if size is None: * a = np.random.random_sample(size) * a = MPI.COMM_WORLD.bcast(a, 0) # <<<<<<<<<<<<<< * else: * a = ndarray(size, dtype=float) */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__MPI); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__COMM_WORLD); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__bcast); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __Pyx_INCREF(__pyx_int_0); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_0); __Pyx_GIVEREF(__pyx_int_0); __pyx_t_3 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_a, __pyx_t_3); __pyx_t_3 = 0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/random.pyx":61 * a = MPI.COMM_WORLD.bcast(a, 0) * else: * a = ndarray(size, dtype=float) # <<<<<<<<<<<<<< * buf = a.access() * if buf is not None: */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_size); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_size); __Pyx_GIVEREF(__pyx_v_size); __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), ((PyObject *)((PyObject*)(&PyFloat_Type)))) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_a, __pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/random.pyx":62 * else: * a = ndarray(size, dtype=float) * buf = a.access() # <<<<<<<<<<<<<< * if buf is not None: * buf[:] = np.random.random_sample(buf.shape) */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__access); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_buf = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/gain/random.pyx":63 * a = ndarray(size, dtype=float) * buf = a.access() * if buf is not None: # <<<<<<<<<<<<<< * buf[:] = np.random.random_sample(buf.shape) * a.release_update() */ __pyx_t_2 = (__pyx_v_buf != Py_None); __pyx_t_1 = (__pyx_t_2 != 0); if (__pyx_t_1) { /* "ga4py/gain/random.pyx":64 * buf = a.access() * if buf is not None: * buf[:] = np.random.random_sample(buf.shape) # <<<<<<<<<<<<<< * a.release_update() * return a */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s__random); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__random_sample); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_buf, __pyx_n_s__shape); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (__Pyx_PyObject_SetSlice(__pyx_v_buf, __pyx_t_6, 0, 0, NULL, NULL, &__pyx_k_slice_1, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/random.pyx":65 * if buf is not None: * buf[:] = np.random.random_sample(buf.shape) * a.release_update() # <<<<<<<<<<<<<< * return a * */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__release_update); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } __pyx_L3:; /* "ga4py/gain/random.pyx":66 * buf[:] = np.random.random_sample(buf.shape) * a.release_update() * return a # <<<<<<<<<<<<<< * * def seed(seed=None): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_a); __pyx_r = __pyx_v_a; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.random.random_sample", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_buf); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_6random_3seed(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_6random_2seed[] = "seed(seed=None)\n\n Seed the generator.\n\n This method is called when `RandomState` is initialized. It can be\n called again to re-seed the generator. For details, see `RandomState`.\n\n Parameters\n ----------\n seed : int or array_like, optional\n Seed for `RandomState`.\n\n See Also\n --------\n RandomState\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_6random_3seed = {__Pyx_NAMESTR("seed"), (PyCFunction)__pyx_pw_5ga4py_4gain_6random_3seed, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_6random_2seed)}; static PyObject *__pyx_pw_5ga4py_4gain_6random_3seed(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_seed = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("seed (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__seed,0}; PyObject* values[1] = {0}; /* "ga4py/gain/random.pyx":68 * return a * * def seed(seed=None): # <<<<<<<<<<<<<< * """seed(seed=None) * */ values[0] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__seed); if (value) { values[0] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "seed") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_seed = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("seed", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.random.seed", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_6random_2seed(__pyx_self, __pyx_v_seed); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_6random_2seed(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_seed) { PyObject *__pyx_v_a = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("seed", 0); /* "ga4py/gain/random.pyx":87 * """ * #np.random.seed(seed) * if seed is None: # <<<<<<<<<<<<<< * np.random.seed() * elif isinstance(seed,int): */ __pyx_t_1 = (__pyx_v_seed == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/gain/random.pyx":88 * #np.random.seed(seed) * if seed is None: * np.random.seed() # <<<<<<<<<<<<<< * elif isinstance(seed,int): * np.random.seed(seed+me()) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__random); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__seed); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L3; } /* "ga4py/gain/random.pyx":89 * if seed is None: * np.random.seed() * elif isinstance(seed,int): # <<<<<<<<<<<<<< * np.random.seed(seed+me()) * else: */ __pyx_t_2 = PyInt_Check(__pyx_v_seed); __pyx_t_1 = (__pyx_t_2 != 0); if (__pyx_t_1) { /* "ga4py/gain/random.pyx":90 * np.random.seed() * elif isinstance(seed,int): * np.random.seed(seed+me()) # <<<<<<<<<<<<<< * else: * a = np.asarray(seed) */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__random); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__seed); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__me); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Add(__pyx_v_seed, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L3; } /*else*/ { /* "ga4py/gain/random.pyx":92 * np.random.seed(seed+me()) * else: * a = np.asarray(seed) # <<<<<<<<<<<<<< * a += me() * np.random.seed(a) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__asarray); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_seed); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_seed); __Pyx_GIVEREF(__pyx_v_seed); __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_a = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/random.pyx":93 * else: * a = np.asarray(seed) * a += me() # <<<<<<<<<<<<<< * np.random.seed(a) */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__me); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_a, __pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/random.pyx":94 * a = np.asarray(seed) * a += me() * np.random.seed(a) # <<<<<<<<<<<<<< */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__random); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__seed); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("ga4py.gain.random.seed", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_a); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyMethodDef __pyx_methods[] = { {0, 0, 0, 0} }; #if PY_MAJOR_VERSION >= 3 static struct PyModuleDef __pyx_moduledef = { #if PY_VERSION_HEX < 0x03020000 { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, #else PyModuleDef_HEAD_INIT, #endif __Pyx_NAMESTR("random"), 0, /* m_doc */ -1, /* m_size */ __pyx_methods /* m_methods */, NULL, /* m_reload */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL /* m_free */ }; #endif static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_kp_s_4, __pyx_k_4, sizeof(__pyx_k_4), 0, 0, 1, 0}, {&__pyx_n_s_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 0, 1, 1}, {&__pyx_kp_u_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 1, 0, 0}, {&__pyx_kp_u_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 1, 0, 0}, {&__pyx_n_s__COMM_WORLD, __pyx_k__COMM_WORLD, sizeof(__pyx_k__COMM_WORLD), 0, 0, 1, 1}, {&__pyx_n_s__MPI, __pyx_k__MPI, sizeof(__pyx_k__MPI), 0, 0, 1, 1}, {&__pyx_n_s____import__, __pyx_k____import__, sizeof(__pyx_k____import__), 0, 0, 1, 1}, {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, {&__pyx_n_s__a, __pyx_k__a, sizeof(__pyx_k__a), 0, 0, 1, 1}, {&__pyx_n_s__access, __pyx_k__access, sizeof(__pyx_k__access), 0, 0, 1, 1}, {&__pyx_n_s__asarray, __pyx_k__asarray, sizeof(__pyx_k__asarray), 0, 0, 1, 1}, {&__pyx_n_s__bcast, __pyx_k__bcast, sizeof(__pyx_k__bcast), 0, 0, 1, 1}, {&__pyx_n_s__buf, __pyx_k__buf, sizeof(__pyx_k__buf), 0, 0, 1, 1}, {&__pyx_n_s__core, __pyx_k__core, sizeof(__pyx_k__core), 0, 0, 1, 1}, {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1}, {&__pyx_n_s__me, __pyx_k__me, sizeof(__pyx_k__me), 0, 0, 1, 1}, {&__pyx_n_s__mpi4py, __pyx_k__mpi4py, sizeof(__pyx_k__mpi4py), 0, 0, 1, 1}, {&__pyx_n_s__ndarray, __pyx_k__ndarray, sizeof(__pyx_k__ndarray), 0, 0, 1, 1}, {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1}, {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1}, {&__pyx_n_s__random, __pyx_k__random, sizeof(__pyx_k__random), 0, 0, 1, 1}, {&__pyx_n_s__random_sample, __pyx_k__random_sample, sizeof(__pyx_k__random_sample), 0, 0, 1, 1}, {&__pyx_n_s__release_update, __pyx_k__release_update, sizeof(__pyx_k__release_update), 0, 0, 1, 1}, {&__pyx_n_s__seed, __pyx_k__seed, sizeof(__pyx_k__seed), 0, 0, 1, 1}, {&__pyx_n_s__shape, __pyx_k__shape, sizeof(__pyx_k__shape), 0, 0, 1, 1}, {&__pyx_n_s__size, __pyx_k__size, sizeof(__pyx_k__size), 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0} }; static int __Pyx_InitCachedBuiltins(void) { return 0; } static int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); /* "ga4py/gain/random.pyx":64 * buf = a.access() * if buf is not None: * buf[:] = np.random.random_sample(buf.shape) # <<<<<<<<<<<<<< * a.release_update() * return a */ __pyx_k_slice_1 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_1); __Pyx_GIVEREF(__pyx_k_slice_1); /* "ga4py/gain/random.pyx":9 * import numpy as np * * def random_sample(size=None): # <<<<<<<<<<<<<< * """random_sample(size=None) * */ __pyx_k_tuple_2 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__size), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__buf)); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_2); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2)); __pyx_k_codeobj_3 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_2, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_4, __pyx_n_s__random_sample, 9, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/random.pyx":68 * return a * * def seed(seed=None): # <<<<<<<<<<<<<< * """seed(seed=None) * */ __pyx_k_tuple_6 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__seed), ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_6); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6)); __pyx_k_codeobj_7 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_6, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_4, __pyx_n_s__seed, 68, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; __Pyx_RefNannyFinishContext(); return -1; } static int __Pyx_InitGlobals(void) { if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; return 0; __pyx_L1_error:; return -1; } #if PY_MAJOR_VERSION < 3 PyMODINIT_FUNC initrandom(void); /*proto*/ PyMODINIT_FUNC initrandom(void) #else PyMODINIT_FUNC PyInit_random(void); /*proto*/ PyMODINIT_FUNC PyInit_random(void) #endif { PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannyDeclarations #if CYTHON_REFNANNY __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); if (!__Pyx_RefNanny) { PyErr_Clear(); __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); if (!__Pyx_RefNanny) Py_FatalError("failed to import 'refnanny' module"); } #endif __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_random(void)", 0); if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #ifdef __Pyx_CyFunction_USED if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif #ifdef __Pyx_FusedFunction_USED if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif #ifdef __Pyx_Generator_USED if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif /*--- Library function declarations ---*/ /*--- Threads initialization code ---*/ #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS #ifdef WITH_THREAD /* Python build with threading support? */ PyEval_InitThreads(); #endif #endif /*--- Module creation code ---*/ #if PY_MAJOR_VERSION < 3 __pyx_m = Py_InitModule4(__Pyx_NAMESTR("random"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); #else __pyx_m = PyModule_Create(&__pyx_moduledef); #endif if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} Py_INCREF(__pyx_d); #if PY_MAJOR_VERSION >= 3 { PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!PyDict_GetItemString(modules, "ga4py.gain.random")) { if (unlikely(PyDict_SetItemString(modules, "ga4py.gain.random", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } } #endif __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #if CYTHON_COMPILING_IN_PYPY Py_INCREF(__pyx_b); #endif if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; /*--- Initialize various global constants etc. ---*/ if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif if (__pyx_module_is_main_ga4py__gain__random) { if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; } /*--- Builtin init code ---*/ if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Constants init code ---*/ if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Global init code ---*/ /*--- Variable export code ---*/ /*--- Function export code ---*/ /*--- Type init code ---*/ /*--- Type import code ---*/ /*--- Variable import code ---*/ /*--- Function import code ---*/ /*--- Execution code ---*/ /* "ga4py/gain/random.pyx":1 * from core import asarray # <<<<<<<<<<<<<< * from core import ndarray * from core import me */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_n_s__asarray)); PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__asarray)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__asarray)); __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__core), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s__asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__asarray, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/random.pyx":2 * from core import asarray * from core import ndarray # <<<<<<<<<<<<<< * from core import me * */ __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_n_s__ndarray)); PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__ndarray)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ndarray)); __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__core), ((PyObject *)__pyx_t_2), -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s__ndarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ndarray, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/random.pyx":3 * from core import asarray * from core import ndarray * from core import me # <<<<<<<<<<<<<< * * from mpi4py import MPI */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_n_s__me)); PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__me)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__me)); __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__core), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s__me); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__me, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/random.pyx":5 * from core import me * * from mpi4py import MPI # <<<<<<<<<<<<<< * * import numpy as np */ __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_n_s__MPI)); PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__MPI)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__MPI)); __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__mpi4py), ((PyObject *)__pyx_t_2), -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s__MPI); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__MPI, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/random.pyx":7 * from mpi4py import MPI * * import numpy as np # <<<<<<<<<<<<<< * * def random_sample(size=None): */ __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/random.pyx":9 * import numpy as np * * def random_sample(size=None): # <<<<<<<<<<<<<< * """random_sample(size=None) * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_6random_1random_sample, NULL, __pyx_n_s_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__random_sample, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/random.pyx":68 * return a * * def seed(seed=None): # <<<<<<<<<<<<<< * """seed(seed=None) * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_6random_3seed, NULL, __pyx_n_s_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__seed, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/random.pyx":1 * from core import asarray # <<<<<<<<<<<<<< * from core import ndarray * from core import me */ __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_8), ((PyObject *)__pyx_kp_u_9)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_d, __pyx_n_s____test__, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); if (__pyx_m) { __Pyx_AddTraceback("init ga4py.gain.random", __pyx_clineno, __pyx_lineno, __pyx_filename); Py_DECREF(__pyx_m); __pyx_m = 0; } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_ImportError, "init ga4py.gain.random"); } __pyx_L0:; __Pyx_RefNannyFinishContext(); #if PY_MAJOR_VERSION < 3 return; #else return __pyx_m; #endif } /* Runtime support code */ #if CYTHON_REFNANNY static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { PyObject *m = NULL, *p = NULL; void *r = NULL; m = PyImport_ImportModule((char *)modname); if (!m) goto end; p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); if (!p) goto end; r = PyLong_AsVoidPtr(p); end: Py_XDECREF(p); Py_XDECREF(m); return (__Pyx_RefNannyAPIStruct *)r; } #endif /* CYTHON_REFNANNY */ static void __Pyx_RaiseDoubleKeywordsError( const char* func_name, PyObject* kw_name) { PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION >= 3 "%s() got multiple values for keyword argument '%U'", func_name, kw_name); #else "%s() got multiple values for keyword argument '%s'", func_name, PyString_AsString(kw_name)); #endif } static int __Pyx_ParseOptionalKeywords( PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name) { PyObject *key = 0, *value = 0; Py_ssize_t pos = 0; PyObject*** name; PyObject*** first_kw_arg = argnames + num_pos_args; while (PyDict_Next(kwds, &pos, &key, &value)) { name = first_kw_arg; while (*name && (**name != key)) name++; if (*name) { values[name-argnames] = value; continue; } name = first_kw_arg; #if PY_MAJOR_VERSION < 3 if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { while (*name) { if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) && _PyString_Eq(**name, key)) { values[name-argnames] = value; break; } name++; } if (*name) continue; else { PyObject*** argname = argnames; while (argname != first_kw_arg) { if ((**argname == key) || ( (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) && _PyString_Eq(**argname, key))) { goto arg_passed_twice; } argname++; } } } else #endif if (likely(PyUnicode_Check(key))) { while (*name) { int cmp = (**name == key) ? 0 : #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : #endif PyUnicode_Compare(**name, key); if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; if (cmp == 0) { values[name-argnames] = value; break; } name++; } if (*name) continue; else { PyObject*** argname = argnames; while (argname != first_kw_arg) { int cmp = (**argname == key) ? 0 : #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : #endif PyUnicode_Compare(**argname, key); if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; if (cmp == 0) goto arg_passed_twice; argname++; } } } else goto invalid_keyword_type; if (kwds2) { if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; } else { goto invalid_keyword; } } return 0; arg_passed_twice: __Pyx_RaiseDoubleKeywordsError(function_name, key); goto bad; invalid_keyword_type: PyErr_Format(PyExc_TypeError, "%s() keywords must be strings", function_name); goto bad; invalid_keyword: PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION < 3 "%s() got an unexpected keyword argument '%s'", function_name, PyString_AsString(key)); #else "%s() got an unexpected keyword argument '%U'", function_name, key); #endif bad: return -1; } static void __Pyx_RaiseArgtupleInvalid( const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found) { Py_ssize_t num_expected; const char *more_or_less; if (num_found < num_min) { num_expected = num_min; more_or_less = "at least"; } else { num_expected = num_max; more_or_less = "at most"; } if (exact) { more_or_less = "exactly"; } PyErr_Format(PyExc_TypeError, "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)", func_name, more_or_less, num_expected, (num_expected == 1) ? "" : "s", num_found); } static PyObject *__Pyx_GetBuiltinName(PyObject *name) { PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); if (unlikely(!result)) { PyErr_Format(PyExc_NameError, #if PY_MAJOR_VERSION >= 3 "name '%U' is not defined", name); #else "name '%s' is not defined", PyString_AS_STRING(name)); #endif } return result; } static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { PyObject *result; #if CYTHON_COMPILING_IN_CPYTHON result = PyDict_GetItem(__pyx_d, name); if (result) { Py_INCREF(result); } else { #else result = PyObject_GetItem(__pyx_d, name); if (!result) { PyErr_Clear(); #endif result = __Pyx_GetBuiltinName(name); } return result; } static CYTHON_INLINE int __Pyx_PyObject_SetSlice( PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop, PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) { #if CYTHON_COMPILING_IN_CPYTHON PyMappingMethods* mp; #if PY_MAJOR_VERSION < 3 PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; if (likely(ms && ms->sq_ass_slice)) { if (!has_cstart) { if (_py_start && (*_py_start != Py_None)) { cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; } else cstart = 0; } if (!has_cstop) { if (_py_stop && (*_py_stop != Py_None)) { cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; } else cstop = PY_SSIZE_T_MAX; } if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { Py_ssize_t l = ms->sq_length(obj); if (likely(l >= 0)) { if (cstop < 0) { cstop += l; if (cstop < 0) cstop = 0; } if (cstart < 0) { cstart += l; if (cstart < 0) cstart = 0; } } else { if (PyErr_ExceptionMatches(PyExc_OverflowError)) PyErr_Clear(); else goto bad; } } return ms->sq_ass_slice(obj, cstart, cstop, value); } #endif mp = Py_TYPE(obj)->tp_as_mapping; if (likely(mp && mp->mp_ass_subscript)) #endif { int result; PyObject *py_slice, *py_start, *py_stop; if (_py_slice) { py_slice = *_py_slice; } else { PyObject* owned_start = NULL; PyObject* owned_stop = NULL; if (_py_start) { py_start = *_py_start; } else { if (has_cstart) { owned_start = py_start = PyInt_FromSsize_t(cstart); if (unlikely(!py_start)) goto bad; } else py_start = Py_None; } if (_py_stop) { py_stop = *_py_stop; } else { if (has_cstop) { owned_stop = py_stop = PyInt_FromSsize_t(cstop); if (unlikely(!py_stop)) { Py_XDECREF(owned_start); goto bad; } } else py_stop = Py_None; } py_slice = PySlice_New(py_start, py_stop, Py_None); Py_XDECREF(owned_start); Py_XDECREF(owned_stop); if (unlikely(!py_slice)) goto bad; } #if CYTHON_COMPILING_IN_CPYTHON result = mp->mp_ass_subscript(obj, py_slice, value); #else result = value ? PyObject_SetItem(obj, py_slice, value) : PyObject_DelItem(obj, py_slice); #endif if (!_py_slice) { Py_DECREF(py_slice); } return result; } PyErr_Format(PyExc_TypeError, "'%.200s' object does not support slice %s", Py_TYPE(obj)->tp_name, value ? "assignment" : "deletion"); bad: return -1; } static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { PyErr_Format(PyExc_ImportError, #if PY_MAJOR_VERSION < 3 "cannot import name %.230s", PyString_AS_STRING(name)); #else "cannot import name %S", name); #endif } return value; } static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { PyObject *empty_list = 0; PyObject *module = 0; PyObject *global_dict = 0; PyObject *empty_dict = 0; PyObject *list; #if PY_VERSION_HEX < 0x03030000 PyObject *py_import; py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s____import__); if (!py_import) goto bad; #endif if (from_list) list = from_list; else { empty_list = PyList_New(0); if (!empty_list) goto bad; list = empty_list; } global_dict = PyModule_GetDict(__pyx_m); if (!global_dict) goto bad; empty_dict = PyDict_New(); if (!empty_dict) goto bad; #if PY_VERSION_HEX >= 0x02050000 { #if PY_MAJOR_VERSION >= 3 if (level == -1) { if (strchr(__Pyx_MODULE_NAME, '.')) { #if PY_VERSION_HEX < 0x03030000 PyObject *py_level = PyInt_FromLong(1); if (!py_level) goto bad; module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, py_level, NULL); Py_DECREF(py_level); #else module = PyImport_ImportModuleLevelObject( name, global_dict, empty_dict, list, 1); #endif if (!module) { if (!PyErr_ExceptionMatches(PyExc_ImportError)) goto bad; PyErr_Clear(); } } level = 0; /* try absolute import on failure */ } #endif if (!module) { #if PY_VERSION_HEX < 0x03030000 PyObject *py_level = PyInt_FromLong(level); if (!py_level) goto bad; module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, py_level, NULL); Py_DECREF(py_level); #else module = PyImport_ImportModuleLevelObject( name, global_dict, empty_dict, list, level); #endif } } #else if (level>0) { PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); goto bad; } module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, NULL); #endif bad: #if PY_VERSION_HEX < 0x03030000 Py_XDECREF(py_import); #endif Py_XDECREF(empty_list); Py_XDECREF(empty_dict); return module; } static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) { const unsigned char neg_one = (unsigned char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned char" : "value too large to convert to unsigned char"); } return (unsigned char)-1; } return (unsigned char)val; } return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) { const unsigned short neg_one = (unsigned short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned short" : "value too large to convert to unsigned short"); } return (unsigned short)-1; } return (unsigned short)val; } return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) { const unsigned int neg_one = (unsigned int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned int" : "value too large to convert to unsigned int"); } return (unsigned int)-1; } return (unsigned int)val; } return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) { const char neg_one = (char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to char" : "value too large to convert to char"); } return (char)-1; } return (char)val; } return (char)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) { const short neg_one = (short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to short" : "value too large to convert to short"); } return (short)-1; } return (short)val; } return (short)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) { const int neg_one = (int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to int" : "value too large to convert to int"); } return (int)-1; } return (int)val; } return (int)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) { const signed char neg_one = (signed char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed char" : "value too large to convert to signed char"); } return (signed char)-1; } return (signed char)val; } return (signed char)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) { const signed short neg_one = (signed short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed short" : "value too large to convert to signed short"); } return (signed short)-1; } return (signed short)val; } return (signed short)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) { const signed int neg_one = (signed int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed int" : "value too large to convert to signed int"); } return (signed int)-1; } return (signed int)val; } return (signed int)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) { const int neg_one = (int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to int" : "value too large to convert to int"); } return (int)-1; } return (int)val; } return (int)__Pyx_PyInt_AsLong(x); } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) { const unsigned long neg_one = (unsigned long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned long"); return (unsigned long)-1; } return (unsigned long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (unsigned long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned long"); return (unsigned long)-1; } return (unsigned long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(unsigned long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(unsigned long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (unsigned long)PyLong_AsLong(x); } } else { unsigned long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (unsigned long)-1; val = __Pyx_PyInt_AsUnsignedLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) { const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned PY_LONG_LONG"); return (unsigned PY_LONG_LONG)-1; } return (unsigned PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned PY_LONG_LONG"); return (unsigned PY_LONG_LONG)-1; } return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x); } } else { unsigned PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (unsigned PY_LONG_LONG)-1; val = __Pyx_PyInt_AsUnsignedLongLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) { const long neg_one = (long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to long"); return (long)-1; } return (long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to long"); return (long)-1; } return (long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (long)PyLong_AsLong(x); } } else { long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (long)-1; val = __Pyx_PyInt_AsLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) { const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to PY_LONG_LONG"); return (PY_LONG_LONG)-1; } return (PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to PY_LONG_LONG"); return (PY_LONG_LONG)-1; } return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (PY_LONG_LONG)PyLong_AsLongLong(x); } } else { PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (PY_LONG_LONG)-1; val = __Pyx_PyInt_AsLongLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) { const signed long neg_one = (signed long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed long"); return (signed long)-1; } return (signed long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (signed long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed long"); return (signed long)-1; } return (signed long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(signed long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(signed long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (signed long)PyLong_AsLong(x); } } else { signed long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (signed long)-1; val = __Pyx_PyInt_AsSignedLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) { const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed PY_LONG_LONG"); return (signed PY_LONG_LONG)-1; } return (signed PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed PY_LONG_LONG"); return (signed PY_LONG_LONG)-1; } return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (signed PY_LONG_LONG)PyLong_AsLongLong(x); } } else { signed PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (signed PY_LONG_LONG)-1; val = __Pyx_PyInt_AsSignedLongLong(tmp); Py_DECREF(tmp); return val; } } static int __Pyx_check_binary_version(void) { char ctversion[4], rtversion[4]; PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { char message[200]; PyOS_snprintf(message, sizeof(message), "compiletime version %s of module '%.100s' " "does not match runtime version %s", ctversion, __Pyx_MODULE_NAME, rtversion); #if PY_VERSION_HEX < 0x02050000 return PyErr_Warn(NULL, message); #else return PyErr_WarnEx(NULL, message, 1); #endif } return 0; } static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { int start = 0, mid = 0, end = count - 1; if (end >= 0 && code_line > entries[end].code_line) { return count; } while (start < end) { mid = (start + end) / 2; if (code_line < entries[mid].code_line) { end = mid; } else if (code_line > entries[mid].code_line) { start = mid + 1; } else { return mid; } } if (code_line <= entries[mid].code_line) { return mid; } else { return mid + 1; } } static PyCodeObject *__pyx_find_code_object(int code_line) { PyCodeObject* code_object; int pos; if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { return NULL; } pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { return NULL; } code_object = __pyx_code_cache.entries[pos].code_object; Py_INCREF(code_object); return code_object; } static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { int pos, i; __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; if (unlikely(!code_line)) { return; } if (unlikely(!entries)) { entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); if (likely(entries)) { __pyx_code_cache.entries = entries; __pyx_code_cache.max_count = 64; __pyx_code_cache.count = 1; entries[0].code_line = code_line; entries[0].code_object = code_object; Py_INCREF(code_object); } return; } pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { PyCodeObject* tmp = entries[pos].code_object; entries[pos].code_object = code_object; Py_DECREF(tmp); return; } if (__pyx_code_cache.count == __pyx_code_cache.max_count) { int new_max = __pyx_code_cache.max_count + 64; entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); if (unlikely(!entries)) { return; } __pyx_code_cache.entries = entries; __pyx_code_cache.max_count = new_max; } for (i=__pyx_code_cache.count; i>pos; i--) { entries[i] = entries[i-1]; } entries[pos].code_line = code_line; entries[pos].code_object = code_object; __pyx_code_cache.count++; Py_INCREF(code_object); } #include "compile.h" #include "frameobject.h" #include "traceback.h" static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( const char *funcname, int c_line, int py_line, const char *filename) { PyCodeObject *py_code = 0; PyObject *py_srcfile = 0; PyObject *py_funcname = 0; #if PY_MAJOR_VERSION < 3 py_srcfile = PyString_FromString(filename); #else py_srcfile = PyUnicode_FromString(filename); #endif if (!py_srcfile) goto bad; if (c_line) { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); #else py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); #endif } else { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromString(funcname); #else py_funcname = PyUnicode_FromString(funcname); #endif } if (!py_funcname) goto bad; py_code = __Pyx_PyCode_New( 0, /*int argcount,*/ 0, /*int kwonlyargcount,*/ 0, /*int nlocals,*/ 0, /*int stacksize,*/ 0, /*int flags,*/ __pyx_empty_bytes, /*PyObject *code,*/ __pyx_empty_tuple, /*PyObject *consts,*/ __pyx_empty_tuple, /*PyObject *names,*/ __pyx_empty_tuple, /*PyObject *varnames,*/ __pyx_empty_tuple, /*PyObject *freevars,*/ __pyx_empty_tuple, /*PyObject *cellvars,*/ py_srcfile, /*PyObject *filename,*/ py_funcname, /*PyObject *name,*/ py_line, /*int firstlineno,*/ __pyx_empty_bytes /*PyObject *lnotab*/ ); Py_DECREF(py_srcfile); Py_DECREF(py_funcname); return py_code; bad: Py_XDECREF(py_srcfile); Py_XDECREF(py_funcname); return NULL; } static void __Pyx_AddTraceback(const char *funcname, int c_line, int py_line, const char *filename) { PyCodeObject *py_code = 0; PyObject *py_globals = 0; PyFrameObject *py_frame = 0; py_code = __pyx_find_code_object(c_line ? c_line : py_line); if (!py_code) { py_code = __Pyx_CreateCodeObjectForTraceback( funcname, c_line, py_line, filename); if (!py_code) goto bad; __pyx_insert_code_object(c_line ? c_line : py_line, py_code); } py_globals = PyModule_GetDict(__pyx_m); if (!py_globals) goto bad; py_frame = PyFrame_New( PyThreadState_GET(), /*PyThreadState *tstate,*/ py_code, /*PyCodeObject *code,*/ py_globals, /*PyObject *globals,*/ 0 /*PyObject *locals*/ ); if (!py_frame) goto bad; py_frame->f_lineno = py_line; PyTraceBack_Here(py_frame); bad: Py_XDECREF(py_code); Py_XDECREF(py_frame); } static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { while (t->p) { #if PY_MAJOR_VERSION < 3 if (t->is_unicode) { *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); } else if (t->intern) { *t->p = PyString_InternFromString(t->s); } else { *t->p = PyString_FromStringAndSize(t->s, t->n - 1); } #else /* Python 3+ has unicode identifiers */ if (t->is_unicode | t->is_str) { if (t->intern) { *t->p = PyUnicode_InternFromString(t->s); } else if (t->encoding) { *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); } else { *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); } } else { *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); } #endif if (!*t->p) return -1; ++t; } return 0; } static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); } static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { Py_ssize_t ignore; return __Pyx_PyObject_AsStringAndSize(o, &ignore); } static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT if ( #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII __Pyx_sys_getdefaultencoding_not_ascii && #endif PyUnicode_Check(o)) { #if PY_VERSION_HEX < 0x03030000 char* defenc_c; PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); if (!defenc) return NULL; defenc_c = PyBytes_AS_STRING(defenc); #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII { char* end = defenc_c + PyBytes_GET_SIZE(defenc); char* c; for (c = defenc_c; c < end; c++) { if ((unsigned char) (*c) >= 128) { PyUnicode_AsASCIIString(o); return NULL; } } } #endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ *length = PyBytes_GET_SIZE(defenc); return defenc_c; #else /* PY_VERSION_HEX < 0x03030000 */ if (PyUnicode_READY(o) == -1) return NULL; #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII if (PyUnicode_IS_ASCII(o)) { *length = PyUnicode_GET_DATA_SIZE(o); return PyUnicode_AsUTF8(o); } else { PyUnicode_AsASCIIString(o); return NULL; } #else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ return PyUnicode_AsUTF8AndSize(o, length); #endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ #endif /* PY_VERSION_HEX < 0x03030000 */ } else #endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ { char* result; int r = PyBytes_AsStringAndSize(o, &result, length); if (r < 0) { return NULL; } else { return result; } } } static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { int is_true = x == Py_True; if (is_true | (x == Py_False) | (x == Py_None)) return is_true; else return PyObject_IsTrue(x); } static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { PyNumberMethods *m; const char *name = NULL; PyObject *res = NULL; #if PY_MAJOR_VERSION < 3 if (PyInt_Check(x) || PyLong_Check(x)) #else if (PyLong_Check(x)) #endif return Py_INCREF(x), x; m = Py_TYPE(x)->tp_as_number; #if PY_MAJOR_VERSION < 3 if (m && m->nb_int) { name = "int"; res = PyNumber_Int(x); } else if (m && m->nb_long) { name = "long"; res = PyNumber_Long(x); } #else if (m && m->nb_int) { name = "int"; res = PyNumber_Long(x); } #endif if (res) { #if PY_MAJOR_VERSION < 3 if (!PyInt_Check(res) && !PyLong_Check(res)) { #else if (!PyLong_Check(res)) { #endif PyErr_Format(PyExc_TypeError, "__%s__ returned non-%s (type %.200s)", name, name, Py_TYPE(res)->tp_name); Py_DECREF(res); return NULL; } } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_TypeError, "an integer is required"); } return res; } static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { Py_ssize_t ival; PyObject* x = PyNumber_Index(b); if (!x) return -1; ival = PyInt_AsSsize_t(x); Py_DECREF(x); return ival; } static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { #if PY_VERSION_HEX < 0x02050000 if (ival <= LONG_MAX) return PyInt_FromLong((long)ival); else { unsigned char *bytes = (unsigned char *) &ival; int one = 1; int little = (int)*(unsigned char*)&one; return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); } #else return PyInt_FromSize_t(ival); #endif } static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) { unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x); if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) { if ((val != (unsigned PY_LONG_LONG)-1) || !PyErr_Occurred()) PyErr_SetString(PyExc_OverflowError, "value too large to convert to size_t"); return (size_t)-1; } return (size_t)val; } #endif /* Py_PYTHON_H */ ga-5-3/python/ga4py/gain/random.pyx0000640005473000001440000000505711603113457016111 0ustar d3n000usersfrom core import asarray from core import ndarray from core import me from mpi4py import MPI import numpy as np def random_sample(size=None): """random_sample(size=None) Return random floats in the half-open interval [0.0, 1.0). Results are from the "continuous uniform" distribution over the stated interval. To sample :math:`Unif[a, b), b > a` multiply the output of `random_sample` by `(b-a)` and add `a`:: (b - a) * random_sample() + a Parameters ---------- size : int or tuple of ints, optional Defines the shape of the returned array of random floats. If None (the default), returns a single float. Returns ------- out : float or ndarray of floats Array of random floats of shape `size` (unless ``size=None``, in which case a single float is returned). Examples -------- >>> np.random.random_sample() 0.47108547995356098 >>> type(np.random.random_sample()) >>> np.random.random_sample((5,)) array([ 0.30220482, 0.86820401, 0.1654503 , 0.11659149, 0.54323428]) Three-by-two array of random numbers from [-5, 0): >>> 5 * np.random.random_sample((3, 2)) - 5 array([[-3.99149989, -0.52338984], [-2.99091858, -0.79479508], [-1.23204345, -1.75224494]]) """ # this was my first implementation # but each process does a lot of unnecessary work #a = np.random.random_sample(size) #if size is None: # return a #else: # return asarray(a) a = None if size is None: a = np.random.random_sample(size) a = MPI.COMM_WORLD.bcast(a, 0) else: a = ndarray(size, dtype=float) buf = a.access() if buf is not None: buf[:] = np.random.random_sample(buf.shape) a.release_update() return a def seed(seed=None): """seed(seed=None) Seed the generator. This method is called when `RandomState` is initialized. It can be called again to re-seed the generator. For details, see `RandomState`. Parameters ---------- seed : int or array_like, optional Seed for `RandomState`. See Also -------- RandomState """ #np.random.seed(seed) if seed is None: np.random.seed() elif isinstance(seed,int): np.random.seed(seed+me()) else: a = np.asarray(seed) a += me() np.random.seed(a) ga-5-3/python/ga4py/gain/notimplemented.c0000640005473000001440001217102712275260611017264 0ustar d3n000users/* Generated by Cython 0.19.2 on Fri Feb 7 14:43:19 2014 */ #define PY_SSIZE_T_CLEAN #ifndef CYTHON_USE_PYLONG_INTERNALS #ifdef PYLONG_BITS_IN_DIGIT #define CYTHON_USE_PYLONG_INTERNALS 0 #else #include "pyconfig.h" #ifdef PYLONG_BITS_IN_DIGIT #define CYTHON_USE_PYLONG_INTERNALS 1 #else #define CYTHON_USE_PYLONG_INTERNALS 0 #endif #endif #endif #include "Python.h" #ifndef Py_PYTHON_H #error Python headers needed to compile C extensions, please install development version of Python. #elif PY_VERSION_HEX < 0x02040000 #error Cython requires Python 2.4+. #else #include /* For offsetof */ #ifndef offsetof #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) #endif #if !defined(WIN32) && !defined(MS_WINDOWS) #ifndef __stdcall #define __stdcall #endif #ifndef __cdecl #define __cdecl #endif #ifndef __fastcall #define __fastcall #endif #endif #ifndef DL_IMPORT #define DL_IMPORT(t) t #endif #ifndef DL_EXPORT #define DL_EXPORT(t) t #endif #ifndef PY_LONG_LONG #define PY_LONG_LONG LONG_LONG #endif #ifndef Py_HUGE_VAL #define Py_HUGE_VAL HUGE_VAL #endif #ifdef PYPY_VERSION #define CYTHON_COMPILING_IN_PYPY 1 #define CYTHON_COMPILING_IN_CPYTHON 0 #else #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 1 #endif #if PY_VERSION_HEX < 0x02050000 typedef int Py_ssize_t; #define PY_SSIZE_T_MAX INT_MAX #define PY_SSIZE_T_MIN INT_MIN #define PY_FORMAT_SIZE_T "" #define CYTHON_FORMAT_SSIZE_T "" #define PyInt_FromSsize_t(z) PyInt_FromLong(z) #define PyInt_AsSsize_t(o) __Pyx_PyInt_AsInt(o) #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ (PyErr_Format(PyExc_TypeError, \ "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ (PyObject*)0)) #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ !PyComplex_Check(o)) #define PyIndex_Check __Pyx_PyIndex_Check #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) #define __PYX_BUILD_PY_SSIZE_T "i" #else #define __PYX_BUILD_PY_SSIZE_T "n" #define CYTHON_FORMAT_SSIZE_T "z" #define __Pyx_PyIndex_Check PyIndex_Check #endif #if PY_VERSION_HEX < 0x02060000 #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) #define PyVarObject_HEAD_INIT(type, size) \ PyObject_HEAD_INIT(type) size, #define PyType_Modified(t) typedef struct { void *buf; PyObject *obj; Py_ssize_t len; Py_ssize_t itemsize; int readonly; int ndim; char *format; Py_ssize_t *shape; Py_ssize_t *strides; Py_ssize_t *suboffsets; void *internal; } Py_buffer; #define PyBUF_SIMPLE 0 #define PyBUF_WRITABLE 0x0001 #define PyBUF_FORMAT 0x0004 #define PyBUF_ND 0x0008 #define PyBUF_STRIDES (0x0010 | PyBUF_ND) #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); typedef void (*releasebufferproc)(PyObject *, Py_buffer *); #endif #if PY_MAJOR_VERSION < 3 #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else #define __Pyx_BUILTIN_MODULE_NAME "builtins" #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #endif #if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6 #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") #endif #if PY_MAJOR_VERSION >= 3 #define Py_TPFLAGS_CHECKTYPES 0 #define Py_TPFLAGS_HAVE_INDEX 0 #endif #if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) #define Py_TPFLAGS_HAVE_NEWBUFFER 0 #endif #if PY_VERSION_HEX < 0x02060000 #define Py_TPFLAGS_HAVE_VERSION_TAG 0 #endif #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) #define CYTHON_PEP393_ENABLED 1 #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ 0 : _PyUnicode_Ready((PyObject *)(op))) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) #else #define CYTHON_PEP393_ENABLED 0 #define __Pyx_PyUnicode_READY(op) (0) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) #define __Pyx_PyUnicode_READ(k, d, i) ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i])) #endif #if PY_MAJOR_VERSION >= 3 #define PyBaseString_Type PyUnicode_Type #define PyStringObject PyUnicodeObject #define PyString_Type PyUnicode_Type #define PyString_Check PyUnicode_Check #define PyString_CheckExact PyUnicode_CheckExact #endif #if PY_VERSION_HEX < 0x02060000 #define PyBytesObject PyStringObject #define PyBytes_Type PyString_Type #define PyBytes_Check PyString_Check #define PyBytes_CheckExact PyString_CheckExact #define PyBytes_FromString PyString_FromString #define PyBytes_FromStringAndSize PyString_FromStringAndSize #define PyBytes_FromFormat PyString_FromFormat #define PyBytes_DecodeEscape PyString_DecodeEscape #define PyBytes_AsString PyString_AsString #define PyBytes_AsStringAndSize PyString_AsStringAndSize #define PyBytes_Size PyString_Size #define PyBytes_AS_STRING PyString_AS_STRING #define PyBytes_GET_SIZE PyString_GET_SIZE #define PyBytes_Repr PyString_Repr #define PyBytes_Concat PyString_Concat #define PyBytes_ConcatAndDel PyString_ConcatAndDel #endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) #else #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ PyString_Check(obj) || PyUnicode_Check(obj)) #define __Pyx_PyBaseString_CheckExact(obj) (Py_TYPE(obj) == &PyBaseString_Type) #endif #if PY_VERSION_HEX < 0x02060000 #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) #endif #ifndef PySet_CheckExact #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) #endif #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) #if PY_MAJOR_VERSION >= 3 #define PyIntObject PyLongObject #define PyInt_Type PyLong_Type #define PyInt_Check(op) PyLong_Check(op) #define PyInt_CheckExact(op) PyLong_CheckExact(op) #define PyInt_FromString PyLong_FromString #define PyInt_FromUnicode PyLong_FromUnicode #define PyInt_FromLong PyLong_FromLong #define PyInt_FromSize_t PyLong_FromSize_t #define PyInt_FromSsize_t PyLong_FromSsize_t #define PyInt_AsLong PyLong_AsLong #define PyInt_AS_LONG PyLong_AS_LONG #define PyInt_AsSsize_t PyLong_AsSsize_t #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask #endif #if PY_MAJOR_VERSION >= 3 #define PyBoolObject PyLongObject #endif #if PY_VERSION_HEX < 0x03020000 typedef long Py_hash_t; #define __Pyx_PyInt_FromHash_t PyInt_FromLong #define __Pyx_PyInt_AsHash_t PyInt_AsLong #else #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t #endif #if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) #else #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) #endif #if PY_MAJOR_VERSION >= 3 #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) #endif #if PY_VERSION_HEX < 0x02050000 #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) #else #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) #endif #if PY_VERSION_HEX < 0x02050000 #define __Pyx_NAMESTR(n) ((char *)(n)) #define __Pyx_DOCSTR(n) ((char *)(n)) #else #define __Pyx_NAMESTR(n) (n) #define __Pyx_DOCSTR(n) (n) #endif #ifndef CYTHON_INLINE #if defined(__GNUC__) #define CYTHON_INLINE __inline__ #elif defined(_MSC_VER) #define CYTHON_INLINE __inline #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CYTHON_INLINE inline #else #define CYTHON_INLINE #endif #endif #ifndef CYTHON_RESTRICT #if defined(__GNUC__) #define CYTHON_RESTRICT __restrict__ #elif defined(_MSC_VER) && _MSC_VER >= 1400 #define CYTHON_RESTRICT __restrict #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CYTHON_RESTRICT restrict #else #define CYTHON_RESTRICT #endif #endif #ifdef NAN #define __PYX_NAN() ((float) NAN) #else static CYTHON_INLINE float __PYX_NAN() { /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is a quiet NaN. */ float value; memset(&value, 0xFF, sizeof(value)); return value; } #endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) #else #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) #endif #ifndef __PYX_EXTERN_C #ifdef __cplusplus #define __PYX_EXTERN_C extern "C" #else #define __PYX_EXTERN_C extern #endif #endif #if defined(WIN32) || defined(MS_WINDOWS) #define _USE_MATH_DEFINES #endif #include #define __PYX_HAVE__ga4py__gain__notimplemented #define __PYX_HAVE_API__ga4py__gain__notimplemented #include "string.h" #include "stdio.h" #include "stdlib.h" #include "numpy/arrayobject.h" #include "numpy/ufuncobject.h" #ifdef _OPENMP #include #endif /* _OPENMP */ #ifdef PYREX_WITHOUT_ASSERTIONS #define CYTHON_WITHOUT_ASSERTIONS #endif #ifndef CYTHON_UNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) # define CYTHON_UNUSED __attribute__ ((__unused__)) # else # define CYTHON_UNUSED # endif # elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) # define CYTHON_UNUSED __attribute__ ((__unused__)) # else # define CYTHON_UNUSED # endif #endif typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ #define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 #define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 #define __PYX_DEFAULT_STRING_ENCODING "" #define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString #define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); #define __Pyx_PyBytes_FromString PyBytes_FromString #define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); #if PY_MAJOR_VERSION < 3 #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize #else #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize #endif #define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) #define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) #define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) #define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) #if PY_MAJOR_VERSION < 3 static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { const Py_UNICODE *u_end = u; while (*u_end++) ; return u_end - u - 1; } #else #define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen #endif #define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) #define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode #define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode #define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) #define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*); #if CYTHON_COMPILING_IN_CPYTHON #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) #else #define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) #endif #define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII static int __Pyx_sys_getdefaultencoding_not_ascii; static int __Pyx_init_sys_getdefaultencoding_params() { PyObject* sys = NULL; PyObject* default_encoding = NULL; PyObject* ascii_chars_u = NULL; PyObject* ascii_chars_b = NULL; sys = PyImport_ImportModule("sys"); if (sys == NULL) goto bad; default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); if (default_encoding == NULL) goto bad; if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { __Pyx_sys_getdefaultencoding_not_ascii = 0; } else { const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); char ascii_chars[128]; int c; for (c = 0; c < 128; c++) { ascii_chars[c] = c; } __Pyx_sys_getdefaultencoding_not_ascii = 1; ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); if (ascii_chars_u == NULL) goto bad; ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { PyErr_Format( PyExc_ValueError, "This module compiled with c_string_encoding=ascii, but default encoding '%s' is not a superset of ascii.", default_encoding_c); goto bad; } } Py_XDECREF(sys); Py_XDECREF(default_encoding); Py_XDECREF(ascii_chars_u); Py_XDECREF(ascii_chars_b); return 0; bad: Py_XDECREF(sys); Py_XDECREF(default_encoding); Py_XDECREF(ascii_chars_u); Py_XDECREF(ascii_chars_b); return -1; } #endif #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) #else #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT static char* __PYX_DEFAULT_STRING_ENCODING; static int __Pyx_init_sys_getdefaultencoding_params() { PyObject* sys = NULL; PyObject* default_encoding = NULL; char* default_encoding_c; sys = PyImport_ImportModule("sys"); if (sys == NULL) goto bad; default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); if (default_encoding == NULL) goto bad; default_encoding_c = PyBytes_AS_STRING(default_encoding); __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); Py_DECREF(sys); Py_DECREF(default_encoding); return 0; bad: Py_XDECREF(sys); Py_XDECREF(default_encoding); return -1; } #endif #endif #ifdef __GNUC__ /* Test for GCC > 2.95 */ #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #else /* __GNUC__ > 2 ... */ #define likely(x) (x) #define unlikely(x) (x) #endif /* __GNUC__ > 2 ... */ #else /* __GNUC__ */ #define likely(x) (x) #define unlikely(x) (x) #endif /* __GNUC__ */ static PyObject *__pyx_m; static PyObject *__pyx_d; static PyObject *__pyx_b; static PyObject *__pyx_empty_tuple; static PyObject *__pyx_empty_bytes; static int __pyx_lineno; static int __pyx_clineno = 0; static const char * __pyx_cfilenm= __FILE__; static const char *__pyx_filename; #if !defined(CYTHON_CCOMPLEX) #if defined(__cplusplus) #define CYTHON_CCOMPLEX 1 #elif defined(_Complex_I) #define CYTHON_CCOMPLEX 1 #else #define CYTHON_CCOMPLEX 0 #endif #endif #if CYTHON_CCOMPLEX #ifdef __cplusplus #include #else #include #endif #endif #if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) #undef _Complex_I #define _Complex_I 1.0fj #endif static const char *__pyx_f[] = { "notimplemented.pyx", "numpy.pxd", "type.pxd", }; /* "numpy.pxd":723 * # in Cython to enable them only on the right systems. * * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t */ typedef npy_int8 __pyx_t_5numpy_int8_t; /* "numpy.pxd":724 * * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t */ typedef npy_int16 __pyx_t_5numpy_int16_t; /* "numpy.pxd":725 * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< * ctypedef npy_int64 int64_t * #ctypedef npy_int96 int96_t */ typedef npy_int32 __pyx_t_5numpy_int32_t; /* "numpy.pxd":726 * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< * #ctypedef npy_int96 int96_t * #ctypedef npy_int128 int128_t */ typedef npy_int64 __pyx_t_5numpy_int64_t; /* "numpy.pxd":730 * #ctypedef npy_int128 int128_t * * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t */ typedef npy_uint8 __pyx_t_5numpy_uint8_t; /* "numpy.pxd":731 * * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t */ typedef npy_uint16 __pyx_t_5numpy_uint16_t; /* "numpy.pxd":732 * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< * ctypedef npy_uint64 uint64_t * #ctypedef npy_uint96 uint96_t */ typedef npy_uint32 __pyx_t_5numpy_uint32_t; /* "numpy.pxd":733 * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< * #ctypedef npy_uint96 uint96_t * #ctypedef npy_uint128 uint128_t */ typedef npy_uint64 __pyx_t_5numpy_uint64_t; /* "numpy.pxd":737 * #ctypedef npy_uint128 uint128_t * * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< * ctypedef npy_float64 float64_t * #ctypedef npy_float80 float80_t */ typedef npy_float32 __pyx_t_5numpy_float32_t; /* "numpy.pxd":738 * * ctypedef npy_float32 float32_t * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< * #ctypedef npy_float80 float80_t * #ctypedef npy_float128 float128_t */ typedef npy_float64 __pyx_t_5numpy_float64_t; /* "numpy.pxd":747 * # The int types are mapped a bit surprising -- * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t # <<<<<<<<<<<<<< * ctypedef npy_longlong long_t * ctypedef npy_longlong longlong_t */ typedef npy_long __pyx_t_5numpy_int_t; /* "numpy.pxd":748 * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< * ctypedef npy_longlong longlong_t * */ typedef npy_longlong __pyx_t_5numpy_long_t; /* "numpy.pxd":749 * ctypedef npy_long int_t * ctypedef npy_longlong long_t * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< * * ctypedef npy_ulong uint_t */ typedef npy_longlong __pyx_t_5numpy_longlong_t; /* "numpy.pxd":751 * ctypedef npy_longlong longlong_t * * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< * ctypedef npy_ulonglong ulong_t * ctypedef npy_ulonglong ulonglong_t */ typedef npy_ulong __pyx_t_5numpy_uint_t; /* "numpy.pxd":752 * * ctypedef npy_ulong uint_t * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< * ctypedef npy_ulonglong ulonglong_t * */ typedef npy_ulonglong __pyx_t_5numpy_ulong_t; /* "numpy.pxd":753 * ctypedef npy_ulong uint_t * ctypedef npy_ulonglong ulong_t * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< * * ctypedef npy_intp intp_t */ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; /* "numpy.pxd":755 * ctypedef npy_ulonglong ulonglong_t * * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< * ctypedef npy_uintp uintp_t * */ typedef npy_intp __pyx_t_5numpy_intp_t; /* "numpy.pxd":756 * * ctypedef npy_intp intp_t * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< * * ctypedef npy_double float_t */ typedef npy_uintp __pyx_t_5numpy_uintp_t; /* "numpy.pxd":758 * ctypedef npy_uintp uintp_t * * ctypedef npy_double float_t # <<<<<<<<<<<<<< * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t */ typedef npy_double __pyx_t_5numpy_float_t; /* "numpy.pxd":759 * * ctypedef npy_double float_t * ctypedef npy_double double_t # <<<<<<<<<<<<<< * ctypedef npy_longdouble longdouble_t * */ typedef npy_double __pyx_t_5numpy_double_t; /* "numpy.pxd":760 * ctypedef npy_double float_t * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< * * ctypedef npy_cfloat cfloat_t */ typedef npy_longdouble __pyx_t_5numpy_longdouble_t; #if CYTHON_CCOMPLEX #ifdef __cplusplus typedef ::std::complex< float > __pyx_t_float_complex; #else typedef float _Complex __pyx_t_float_complex; #endif #else typedef struct { float real, imag; } __pyx_t_float_complex; #endif #if CYTHON_CCOMPLEX #ifdef __cplusplus typedef ::std::complex< double > __pyx_t_double_complex; #else typedef double _Complex __pyx_t_double_complex; #endif #else typedef struct { double real, imag; } __pyx_t_double_complex; #endif /*--- Type declarations ---*/ /* "numpy.pxd":762 * ctypedef npy_longdouble longdouble_t * * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< * ctypedef npy_cdouble cdouble_t * ctypedef npy_clongdouble clongdouble_t */ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; /* "numpy.pxd":763 * * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< * ctypedef npy_clongdouble clongdouble_t * */ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; /* "numpy.pxd":764 * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< * * ctypedef npy_cdouble complex_t */ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; /* "numpy.pxd":766 * ctypedef npy_clongdouble clongdouble_t * * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew1(a): */ typedef npy_cdouble __pyx_t_5numpy_complex_t; #ifndef CYTHON_REFNANNY #define CYTHON_REFNANNY 0 #endif #if CYTHON_REFNANNY typedef struct { void (*INCREF)(void*, PyObject*, int); void (*DECREF)(void*, PyObject*, int); void (*GOTREF)(void*, PyObject*, int); void (*GIVEREF)(void*, PyObject*, int); void* (*SetupContext)(const char*, int, const char*); void (*FinishContext)(void**); } __Pyx_RefNannyAPIStruct; static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; #ifdef WITH_THREAD #define __Pyx_RefNannySetupContext(name, acquire_gil) \ if (acquire_gil) { \ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ PyGILState_Release(__pyx_gilstate_save); \ } else { \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ } #else #define __Pyx_RefNannySetupContext(name, acquire_gil) \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) #endif #define __Pyx_RefNannyFinishContext() \ __Pyx_RefNanny->FinishContext(&__pyx_refnanny) #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) #else #define __Pyx_RefNannyDeclarations #define __Pyx_RefNannySetupContext(name, acquire_gil) #define __Pyx_RefNannyFinishContext() #define __Pyx_INCREF(r) Py_INCREF(r) #define __Pyx_DECREF(r) Py_DECREF(r) #define __Pyx_GOTREF(r) #define __Pyx_GIVEREF(r) #define __Pyx_XINCREF(r) Py_XINCREF(r) #define __Pyx_XDECREF(r) Py_XDECREF(r) #define __Pyx_XGOTREF(r) #define __Pyx_XGIVEREF(r) #endif /* CYTHON_REFNANNY */ #define __Pyx_XDECREF_SET(r, v) do { \ PyObject *tmp = (PyObject *) r; \ r = v; __Pyx_XDECREF(tmp); \ } while (0) #define __Pyx_DECREF_SET(r, v) do { \ PyObject *tmp = (PyObject *) r; \ r = v; __Pyx_DECREF(tmp); \ } while (0) #define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) #define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { PyTypeObject* tp = Py_TYPE(obj); if (likely(tp->tp_getattro)) return tp->tp_getattro(obj, attr_name); #if PY_MAJOR_VERSION < 3 if (likely(tp->tp_getattr)) return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); #endif return PyObject_GetAttr(obj, attr_name); } #else #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) #endif static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ const char* function_name); /*proto*/ static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ static CYTHON_INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed); /*proto*/ static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/ static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ #if CYTHON_CCOMPLEX #ifdef __cplusplus #define __Pyx_CREAL(z) ((z).real()) #define __Pyx_CIMAG(z) ((z).imag()) #else #define __Pyx_CREAL(z) (__real__(z)) #define __Pyx_CIMAG(z) (__imag__(z)) #endif #else #define __Pyx_CREAL(z) ((z).real) #define __Pyx_CIMAG(z) ((z).imag) #endif #if defined(_WIN32) && defined(__cplusplus) && CYTHON_CCOMPLEX #define __Pyx_SET_CREAL(z,x) ((z).real(x)) #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) #else #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) #endif static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); #if CYTHON_CCOMPLEX #define __Pyx_c_eqf(a, b) ((a)==(b)) #define __Pyx_c_sumf(a, b) ((a)+(b)) #define __Pyx_c_difff(a, b) ((a)-(b)) #define __Pyx_c_prodf(a, b) ((a)*(b)) #define __Pyx_c_quotf(a, b) ((a)/(b)) #define __Pyx_c_negf(a) (-(a)) #ifdef __cplusplus #define __Pyx_c_is_zerof(z) ((z)==(float)0) #define __Pyx_c_conjf(z) (::std::conj(z)) #if 1 #define __Pyx_c_absf(z) (::std::abs(z)) #define __Pyx_c_powf(a, b) (::std::pow(a, b)) #endif #else #define __Pyx_c_is_zerof(z) ((z)==0) #define __Pyx_c_conjf(z) (conjf(z)) #if 1 #define __Pyx_c_absf(z) (cabsf(z)) #define __Pyx_c_powf(a, b) (cpowf(a, b)) #endif #endif #else static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex); static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex); #if 1 static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex); #endif #endif static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); #if CYTHON_CCOMPLEX #define __Pyx_c_eq(a, b) ((a)==(b)) #define __Pyx_c_sum(a, b) ((a)+(b)) #define __Pyx_c_diff(a, b) ((a)-(b)) #define __Pyx_c_prod(a, b) ((a)*(b)) #define __Pyx_c_quot(a, b) ((a)/(b)) #define __Pyx_c_neg(a) (-(a)) #ifdef __cplusplus #define __Pyx_c_is_zero(z) ((z)==(double)0) #define __Pyx_c_conj(z) (::std::conj(z)) #if 1 #define __Pyx_c_abs(z) (::std::abs(z)) #define __Pyx_c_pow(a, b) (::std::pow(a, b)) #endif #else #define __Pyx_c_is_zero(z) ((z)==0) #define __Pyx_c_conj(z) (conj(z)) #if 1 #define __Pyx_c_abs(z) (cabs(z)) #define __Pyx_c_pow(a, b) (cpow(a, b)) #endif #endif #else static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex); static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex); #if 1 static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex); #endif #endif static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *); static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *); static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *); static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *); static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *); static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *); static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *); static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *); static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *); static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *); static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *); static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *); static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *); static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *); static int __Pyx_check_binary_version(void); #if !defined(__Pyx_PyIdentifier_FromString) #if PY_MAJOR_VERSION < 3 #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s) #else #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s) #endif #endif static PyObject *__Pyx_ImportModule(const char *name); /*proto*/ static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict); /*proto*/ typedef struct { int code_line; PyCodeObject* code_object; } __Pyx_CodeObjectCacheEntry; struct __Pyx_CodeObjectCache { int count; int max_count; __Pyx_CodeObjectCacheEntry* entries; }; static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); static PyCodeObject *__pyx_find_code_object(int code_line); static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); static void __Pyx_AddTraceback(const char *funcname, int c_line, int py_line, const char *filename); /*proto*/ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ /* Module declarations from 'cpython.buffer' */ /* Module declarations from 'cpython.ref' */ /* Module declarations from 'libc.string' */ /* Module declarations from 'libc.stdio' */ /* Module declarations from 'cpython.object' */ /* Module declarations from '__builtin__' */ /* Module declarations from 'cpython.type' */ static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; /* Module declarations from 'libc.stdlib' */ /* Module declarations from 'numpy' */ /* Module declarations from 'numpy' */ static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ /* Module declarations from 'ga4py.gain.notimplemented' */ #define __Pyx_MODULE_NAME "ga4py.gain.notimplemented" int __pyx_module_is_main_ga4py__gain__notimplemented = 0; /* Implementation of 'ga4py.gain.notimplemented' */ static PyObject *__pyx_builtin_NotImplementedError; static PyObject *__pyx_builtin_ValueError; static PyObject *__pyx_builtin_range; static PyObject *__pyx_builtin_RuntimeError; static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_docstring(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_docstring); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_2add_newdoc(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_place, CYTHON_UNUSED PyObject *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_doc); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_4all(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_6allclose(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_b, CYTHON_UNUSED PyObject *__pyx_v_rtol, CYTHON_UNUSED PyObject *__pyx_v_atol); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_8alltrue(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_10alterdot(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_12amax(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_14amin(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_16angle(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_z, CYTHON_UNUSED PyObject *__pyx_v_deg); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_18any(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_20append(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arr, CYTHON_UNUSED PyObject *__pyx_v_values, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_22apply_along_axis(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_func1d, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_arr); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_24apply_over_axes(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_func, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axes); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_26argmax(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_28argmin(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_30argsort(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_kind, CYTHON_UNUSED PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_32argwhere(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_34around(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_decimals, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_36array(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_object, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_copy, CYTHON_UNUSED PyObject *__pyx_v_order, CYTHON_UNUSED PyObject *__pyx_v_subok, CYTHON_UNUSED PyObject *__pyx_v_ndmin); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_38array2string(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_max_line_width, CYTHON_UNUSED PyObject *__pyx_v_precision, CYTHON_UNUSED PyObject *__pyx_v_suppress_small, CYTHON_UNUSED PyObject *__pyx_v_separator, CYTHON_UNUSED PyObject *__pyx_v_prefix, CYTHON_UNUSED PyObject *__pyx_v_style); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_40array_equal(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a1, CYTHON_UNUSED PyObject *__pyx_v_a2); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_42array_equiv(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a1, CYTHON_UNUSED PyObject *__pyx_v_a2); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_44array_repr(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arr, CYTHON_UNUSED PyObject *__pyx_v_max_line_width, CYTHON_UNUSED PyObject *__pyx_v_precision, CYTHON_UNUSED PyObject *__pyx_v_suppress_small); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_46array_split(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ary, CYTHON_UNUSED PyObject *__pyx_v_indices_or_sections, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_48array_str(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_max_line_width, CYTHON_UNUSED PyObject *__pyx_v_precision, CYTHON_UNUSED PyObject *__pyx_v_suppress_small); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_50asanyarray(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_52asarray_chkfinite(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_54ascontiguousarray(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_dtype); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_56asfarray(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_dtype); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_58asfortranarray(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_dtype); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_60asmatrix(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_data, CYTHON_UNUSED PyObject *__pyx_v_dtype); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_62asscalar(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_64atleast_1d(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_66atleast_2d(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_68atleast_3d(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_70average(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_weights, CYTHON_UNUSED PyObject *__pyx_v_returned); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_72bartlett(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_M); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_74base_repr(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_number, CYTHON_UNUSED PyObject *__pyx_v_base, CYTHON_UNUSED PyObject *__pyx_v_padding); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_76binary_repr(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_num, CYTHON_UNUSED PyObject *__pyx_v_width); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_78bincount(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_weights, CYTHON_UNUSED PyObject *__pyx_v_minlength); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_80blackman(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_M); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_82bmat(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_ldict, CYTHON_UNUSED PyObject *__pyx_v_gdict); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_84broadcast_arrays(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_86byte_bounds(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_88can_cast(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_90choose(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_choices, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_mode); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_92column_stack(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_tup); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_94common_type(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_96compare_chararrays(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_98compress(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_condition, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_100concatenate(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_102convolve(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_v, CYTHON_UNUSED PyObject *__pyx_v_mode); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_104copy(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_106corrcoef(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_y, CYTHON_UNUSED PyObject *__pyx_v_rowvar, CYTHON_UNUSED PyObject *__pyx_v_bias, CYTHON_UNUSED PyObject *__pyx_v_ddof); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_108correlate(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_v, CYTHON_UNUSED PyObject *__pyx_v_mode, CYTHON_UNUSED PyObject *__pyx_v_old_behavior); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_110count_nonzero(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_112cov(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_m, CYTHON_UNUSED PyObject *__pyx_v_y, CYTHON_UNUSED PyObject *__pyx_v_rowvar, CYTHON_UNUSED PyObject *__pyx_v_bias, CYTHON_UNUSED PyObject *__pyx_v_ddof); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_114cross(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_b, CYTHON_UNUSED PyObject *__pyx_v_axisa, CYTHON_UNUSED PyObject *__pyx_v_axisb, CYTHON_UNUSED PyObject *__pyx_v_axisc, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_116cumprod(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_118cumproduct(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_120cumsum(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_122datetime_data(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_dtype); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_124delete(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arr, CYTHON_UNUSED PyObject *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_126deprecate(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_128deprecate_with_doc(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_msg); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_130diag_indices(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_n, CYTHON_UNUSED PyObject *__pyx_v_ndim); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_132diag_indices_from(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arr); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_134diagflat(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_v, CYTHON_UNUSED PyObject *__pyx_v_k); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_136diff(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_n, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_138digitize(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_bins); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_140disp(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_mesg, CYTHON_UNUSED PyObject *__pyx_v_device, CYTHON_UNUSED PyObject *__pyx_v_linefeed); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_142dsplit(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ary, CYTHON_UNUSED PyObject *__pyx_v_indices_or_sections); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_144dstack(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_tup); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_146ediff1d(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ary, CYTHON_UNUSED PyObject *__pyx_v_to_end, CYTHON_UNUSED PyObject *__pyx_v_to_begin); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_148einsum(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_150expand_dims(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_152extract(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_condition, CYTHON_UNUSED PyObject *__pyx_v_arr); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_154_fastCopyAndTranspose(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_156fill_diagonal(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_val); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_158find_common_type(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_array_types, CYTHON_UNUSED PyObject *__pyx_v_scalar_types); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_160fix(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_162flatnonzero(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_164fliplr(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_m); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_166flipud(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_m); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_168frombuffer(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_buffer, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_count, CYTHON_UNUSED PyObject *__pyx_v_offset); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_170fromfile(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_file, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_count, CYTHON_UNUSED PyObject *__pyx_v_sep); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_172fromiter(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_iterable, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_count); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_174frompyfunc(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_func, CYTHON_UNUSED PyObject *__pyx_v_nin, CYTHON_UNUSED PyObject *__pyx_v_nout); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_176fromregex(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_file, CYTHON_UNUSED PyObject *__pyx_v_regexp, CYTHON_UNUSED PyObject *__pyx_v_dtype); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_178fromstring(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_string, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_count, CYTHON_UNUSED PyObject *__pyx_v_sep); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_180fv(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rate, CYTHON_UNUSED PyObject *__pyx_v_nper, CYTHON_UNUSED PyObject *__pyx_v_pmt, CYTHON_UNUSED PyObject *__pyx_v_pv, CYTHON_UNUSED PyObject *__pyx_v_when); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_182genfromtxt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_fname, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_comments, CYTHON_UNUSED PyObject *__pyx_v_delimiter, CYTHON_UNUSED PyObject *__pyx_v_skiprows, CYTHON_UNUSED PyObject *__pyx_v_skip_header, CYTHON_UNUSED PyObject *__pyx_v_skip_footer, CYTHON_UNUSED PyObject *__pyx_v_converters, CYTHON_UNUSED PyObject *__pyx_v_missing, CYTHON_UNUSED PyObject *__pyx_v_missing_values, CYTHON_UNUSED PyObject *__pyx_v_filling_values, CYTHON_UNUSED PyObject *__pyx_v_usecols, CYTHON_UNUSED PyObject *__pyx_v_names, CYTHON_UNUSED PyObject *__pyx_v_excludelist, CYTHON_UNUSED PyObject *__pyx_v_deletechars, CYTHON_UNUSED PyObject *__pyx_v_replace_space, CYTHON_UNUSED PyObject *__pyx_v_autostrip, CYTHON_UNUSED PyObject *__pyx_v_case_sensitive, CYTHON_UNUSED PyObject *__pyx_v_defaultfmt, CYTHON_UNUSED PyObject *__pyx_v_unpack, CYTHON_UNUSED PyObject *__pyx_v_usemask, CYTHON_UNUSED PyObject *__pyx_v_loose, CYTHON_UNUSED PyObject *__pyx_v_invalid_raise); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_184get_array_wrap(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_186get_include(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_188get_numarray_include(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_type); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_190get_printoptions(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_192getbuffer(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_194getbufsize(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_196geterr(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_198geterrcall(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_200geterrobj(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_202gradient(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_f); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_204hamming(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_M); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_206hanning(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_M); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_208histogram(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_bins, CYTHON_UNUSED PyObject *__pyx_v_range, CYTHON_UNUSED PyObject *__pyx_v_normed, CYTHON_UNUSED PyObject *__pyx_v_weights, CYTHON_UNUSED PyObject *__pyx_v_density); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_210histogram2d(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_y, CYTHON_UNUSED PyObject *__pyx_v_bins, CYTHON_UNUSED PyObject *__pyx_v_range, CYTHON_UNUSED PyObject *__pyx_v_normed, CYTHON_UNUSED PyObject *__pyx_v_weights); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_212histogramdd(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_sample, CYTHON_UNUSED PyObject *__pyx_v_bins, CYTHON_UNUSED PyObject *__pyx_v_range, CYTHON_UNUSED PyObject *__pyx_v_normed, CYTHON_UNUSED PyObject *__pyx_v_weights); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_214hsplit(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ary, CYTHON_UNUSED PyObject *__pyx_v_indices_or_sections); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_216hstack(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_tup); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_218i0(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_220imag(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_val); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_222in1d(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ar1, CYTHON_UNUSED PyObject *__pyx_v_ar2, CYTHON_UNUSED PyObject *__pyx_v_assume_unique); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_224indices(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_dimensions, CYTHON_UNUSED PyObject *__pyx_v_dtype); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_226info(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_object, CYTHON_UNUSED PyObject *__pyx_v_maxwidth, CYTHON_UNUSED PyObject *__pyx_v_output, CYTHON_UNUSED PyObject *__pyx_v_toplevel); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_228inner(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_b); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_230insert(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arr, CYTHON_UNUSED PyObject *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_values, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_232int_asbuffer(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_234interp(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_xp, CYTHON_UNUSED PyObject *__pyx_v_fp, CYTHON_UNUSED PyObject *__pyx_v_left, CYTHON_UNUSED PyObject *__pyx_v_right); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_236intersect1d(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ar1, CYTHON_UNUSED PyObject *__pyx_v_ar2, CYTHON_UNUSED PyObject *__pyx_v_assume_unique); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_238ipmt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rate, CYTHON_UNUSED PyObject *__pyx_v_per, CYTHON_UNUSED PyObject *__pyx_v_nper, CYTHON_UNUSED PyObject *__pyx_v_pv, CYTHON_UNUSED PyObject *__pyx_v_fv, CYTHON_UNUSED PyObject *__pyx_v_when); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_240irr(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_values); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_242iscomplex(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_244iscomplexobj(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_246isfortran(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_248isneginf(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_250isposinf(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_252isreal(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_254isrealobj(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_256isscalar(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_num); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_258issctype(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rep); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_260issubclass_(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arg1, CYTHON_UNUSED PyObject *__pyx_v_arg2); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_262issubdtype(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arg1, CYTHON_UNUSED PyObject *__pyx_v_arg2); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_264issubsctype(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arg1, CYTHON_UNUSED PyObject *__pyx_v_arg2); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_266iterable(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_268ix_(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_270kaiser(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_M, CYTHON_UNUSED PyObject *__pyx_v_beta); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_272kron(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_b); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_274lexsort(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_keys, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_276load(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_file, CYTHON_UNUSED PyObject *__pyx_v_mmap_mode); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_278loads(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_280loadtxt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_fname, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_comments, CYTHON_UNUSED PyObject *__pyx_v_delimiter, CYTHON_UNUSED PyObject *__pyx_v_converters, CYTHON_UNUSED PyObject *__pyx_v_skiprows, CYTHON_UNUSED PyObject *__pyx_v_usecols, CYTHON_UNUSED PyObject *__pyx_v_unpack, CYTHON_UNUSED PyObject *__pyx_v_ndmin); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_282lookfor(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_what, CYTHON_UNUSED PyObject *__pyx_v_module, CYTHON_UNUSED PyObject *__pyx_v_import_modules, CYTHON_UNUSED PyObject *__pyx_v_regenerate, CYTHON_UNUSED PyObject *__pyx_v_output); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_284mafromtxt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_fname); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_286mask_indices(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_n, CYTHON_UNUSED PyObject *__pyx_v_mask_func, CYTHON_UNUSED PyObject *__pyx_v_k); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_288mat(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_data, CYTHON_UNUSED PyObject *__pyx_v_dtype); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_290max(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_292maximum_sctype(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_t); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_294may_share_memory(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_b); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_296mean(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_298median(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_overwrite_input); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_300meshgrid(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_y); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_302min(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_304min_scalar_type(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_306mintypecode(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_typechars, CYTHON_UNUSED PyObject *__pyx_v_typeset, CYTHON_UNUSED PyObject *__pyx_v_default); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_308mirr(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_values, CYTHON_UNUSED PyObject *__pyx_v_finance_rate, CYTHON_UNUSED PyObject *__pyx_v_reinvest_rate); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_310msort(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_312nan_to_num(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_314nanargmax(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_316nanargmin(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_318nanmax(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_320nanmin(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_322nansum(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_324ndfromtxt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_fname); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_326ndim(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_328nested_iters(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_330newbuffer(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_size); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_332nonzero(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_334nper(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rate, CYTHON_UNUSED PyObject *__pyx_v_pmt, CYTHON_UNUSED PyObject *__pyx_v_pv, CYTHON_UNUSED PyObject *__pyx_v_fv, CYTHON_UNUSED PyObject *__pyx_v_when); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_336npv(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rate, CYTHON_UNUSED PyObject *__pyx_v_values); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_338obj2sctype(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rep, CYTHON_UNUSED PyObject *__pyx_v_default); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_340outer(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_b); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_342packbits(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_myarray, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_344percentile(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_q, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_overwrite_input); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_346piecewise(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_condlist, CYTHON_UNUSED PyObject *__pyx_v_funclist); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_348pkgload(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_350place(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arr, CYTHON_UNUSED PyObject *__pyx_v_mask, CYTHON_UNUSED PyObject *__pyx_v_vals); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_352pmt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rate, CYTHON_UNUSED PyObject *__pyx_v_nper, CYTHON_UNUSED PyObject *__pyx_v_pv, CYTHON_UNUSED PyObject *__pyx_v_fv, CYTHON_UNUSED PyObject *__pyx_v_when); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_354poly(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_seq_of_zeros); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_356polyadd(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a1, CYTHON_UNUSED PyObject *__pyx_v_a2); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_358polyder(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_p, CYTHON_UNUSED PyObject *__pyx_v_m); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_360polydiv(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_u, CYTHON_UNUSED PyObject *__pyx_v_v); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_362polyfit(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_y, CYTHON_UNUSED PyObject *__pyx_v_deg, CYTHON_UNUSED PyObject *__pyx_v_rcond, CYTHON_UNUSED PyObject *__pyx_v_full); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_364polyint(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_p, CYTHON_UNUSED PyObject *__pyx_v_m, CYTHON_UNUSED PyObject *__pyx_v_k); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_366polymul(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a1, CYTHON_UNUSED PyObject *__pyx_v_a2); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_368polysub(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a1, CYTHON_UNUSED PyObject *__pyx_v_a2); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_370polyval(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_p, CYTHON_UNUSED PyObject *__pyx_v_x); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_372ppmt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rate, CYTHON_UNUSED PyObject *__pyx_v_per, CYTHON_UNUSED PyObject *__pyx_v_nper, CYTHON_UNUSED PyObject *__pyx_v_pv, CYTHON_UNUSED PyObject *__pyx_v_fv, CYTHON_UNUSED PyObject *__pyx_v_when); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_374prod(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_376product(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_378promote_types(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_type1, CYTHON_UNUSED PyObject *__pyx_v_type2); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_380ptp(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_382put(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_ind, CYTHON_UNUSED PyObject *__pyx_v_v, CYTHON_UNUSED PyObject *__pyx_v_mode); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_384putmask(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_mask, CYTHON_UNUSED PyObject *__pyx_v_values); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_386pv(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rate, CYTHON_UNUSED PyObject *__pyx_v_nper, CYTHON_UNUSED PyObject *__pyx_v_pmt, CYTHON_UNUSED PyObject *__pyx_v_fv, CYTHON_UNUSED PyObject *__pyx_v_when); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_388rank(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_390rate(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_nper, CYTHON_UNUSED PyObject *__pyx_v_pmt, CYTHON_UNUSED PyObject *__pyx_v_pv, CYTHON_UNUSED PyObject *__pyx_v_fv, CYTHON_UNUSED PyObject *__pyx_v_when, CYTHON_UNUSED PyObject *__pyx_v_guess, CYTHON_UNUSED PyObject *__pyx_v_tol, CYTHON_UNUSED PyObject *__pyx_v_maxiter); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_392ravel(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_394ravel_multi_index(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_multi_index, CYTHON_UNUSED PyObject *__pyx_v_dims, CYTHON_UNUSED PyObject *__pyx_v_mode, CYTHON_UNUSED PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_396real(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_val); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_398real_if_close(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_tol); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_400recfromcsv(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_fname); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_402recfromtxt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_fname); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_404repeat(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_repeats, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_406require(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_requirements); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_408reshape(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_newshape, CYTHON_UNUSED PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_410resize(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_new_shape); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_412restoredot(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_414result_type(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arrays_and_dtypes); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_416roll(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_shift, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_418rollaxis(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_start); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_420roots(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_p); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_422rot90(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_m, CYTHON_UNUSED PyObject *__pyx_v_k); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_424round(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_decimals, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_426round_(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_decimals, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_428row_stack(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_tup); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_430safe_eval(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_source); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_432save(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_file, CYTHON_UNUSED PyObject *__pyx_v_arr); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_434savetxt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_fname, CYTHON_UNUSED PyObject *__pyx_v_X, CYTHON_UNUSED PyObject *__pyx_v_fmt, CYTHON_UNUSED PyObject *__pyx_v_delimiter, CYTHON_UNUSED PyObject *__pyx_v_newline); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_436savez(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_file); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_438savez_compressed(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_file); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_440sctype2char(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_sctype); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_442searchsorted(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_v, CYTHON_UNUSED PyObject *__pyx_v_side); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_444select(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_condlist, CYTHON_UNUSED PyObject *__pyx_v_choicelist, CYTHON_UNUSED PyObject *__pyx_v_default); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_446set_numeric_ops(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_448set_printoptions(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_precision, CYTHON_UNUSED PyObject *__pyx_v_threshold, CYTHON_UNUSED PyObject *__pyx_v_edgeitems, CYTHON_UNUSED PyObject *__pyx_v_linewidth, CYTHON_UNUSED PyObject *__pyx_v_suppress, CYTHON_UNUSED PyObject *__pyx_v_nanstr, CYTHON_UNUSED PyObject *__pyx_v_infstr); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_450set_string_function(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_f, CYTHON_UNUSED PyObject *__pyx_v_repr); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_452setbufsize(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_size); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_454setdiff1d(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ar1, CYTHON_UNUSED PyObject *__pyx_v_ar2, CYTHON_UNUSED PyObject *__pyx_v_assume_unique); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_456seterr(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_all, CYTHON_UNUSED PyObject *__pyx_v_divide, CYTHON_UNUSED PyObject *__pyx_v_over, CYTHON_UNUSED PyObject *__pyx_v_under, CYTHON_UNUSED PyObject *__pyx_v_invalid); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_458seterrcall(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_func); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_460seterrobj(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_errobj); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_462setxor1d(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ar1, CYTHON_UNUSED PyObject *__pyx_v_ar2, CYTHON_UNUSED PyObject *__pyx_v_assume_unique); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_464show_config(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_466sinc(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_468size(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_470sometrue(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_472sort(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_kind, CYTHON_UNUSED PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_474sort_complex(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_476source(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_object, CYTHON_UNUSED PyObject *__pyx_v_output); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_478split(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ary, CYTHON_UNUSED PyObject *__pyx_v_indices_or_sections, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_480squeeze(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_482std(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_ddof); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_484sum(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_486swapaxes(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis1, CYTHON_UNUSED PyObject *__pyx_v_axis2); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_488take(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_indices, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_mode); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_490tensordot(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_b, CYTHON_UNUSED PyObject *__pyx_v_axes); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_492tile(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_A, CYTHON_UNUSED PyObject *__pyx_v_reps); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_494trace(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_offset, CYTHON_UNUSED PyObject *__pyx_v_axis1, CYTHON_UNUSED PyObject *__pyx_v_axis2, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_496transpose(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axes); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_498trapz(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_y, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_dx, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_500tri(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_N, CYTHON_UNUSED PyObject *__pyx_v_M, CYTHON_UNUSED PyObject *__pyx_v_k, CYTHON_UNUSED PyObject *__pyx_v_dtype); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_502tril(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_m, CYTHON_UNUSED PyObject *__pyx_v_k); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_504tril_indices(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_n, CYTHON_UNUSED PyObject *__pyx_v_k); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_506tril_indices_from(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arr, CYTHON_UNUSED PyObject *__pyx_v_k); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_508trim_zeros(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_filt, CYTHON_UNUSED PyObject *__pyx_v_trim); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_510triu(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_m, CYTHON_UNUSED PyObject *__pyx_v_k); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_512triu_indices(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_n, CYTHON_UNUSED PyObject *__pyx_v_k); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_514triu_indices_from(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arr, CYTHON_UNUSED PyObject *__pyx_v_k); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_516typename(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_char_); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_518union1d(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ar1, CYTHON_UNUSED PyObject *__pyx_v_ar2); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_520unique(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ar, CYTHON_UNUSED PyObject *__pyx_v_return_index, CYTHON_UNUSED PyObject *__pyx_v_return_inverse); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_522unpackbits(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_myarray, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_524unravel_index(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_indices, CYTHON_UNUSED PyObject *__pyx_v_dims, CYTHON_UNUSED PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_526unwrap(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_p, CYTHON_UNUSED PyObject *__pyx_v_discont, CYTHON_UNUSED PyObject *__pyx_v_axis); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_528vander(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_N); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_530var(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_ddof); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_532vdot(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_534vsplit(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ary, CYTHON_UNUSED PyObject *__pyx_v_indices_or_sections); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_536vstack(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_tup); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_538where(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_540who(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_vardict); /* proto */ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */ static char __pyx_k_5[] = " "; static char __pyx_k_6[] = ""; static char __pyx_k_16[] = "#"; static char __pyx_k_19[] = "f%i"; static char __pyx_k_42[] = "%.18e"; static char __pyx_k_43[] = "\n"; static char __pyx_k_53[] = "ndarray is not C contiguous"; static char __pyx_k_55[] = "ndarray is not Fortran contiguous"; static char __pyx_k_57[] = "Non-native byte order not supported"; static char __pyx_k_59[] = "unknown dtype code in numpy.pxd (%d)"; static char __pyx_k_60[] = "Format string allocated too short, see comment in numpy.pxd"; static char __pyx_k_63[] = "Format string allocated too short."; static char __pyx_k_67[] = "/home/d3n000/ga/hpc_website/globalarrays/download/ga-5-3/python/ga4py/gain/notimplemented.pyx"; static char __pyx_k_68[] = "ga4py.gain.notimplemented"; static char __pyx_k__A[] = "A"; static char __pyx_k__B[] = "B"; static char __pyx_k__C[] = "C"; static char __pyx_k__H[] = "H"; static char __pyx_k__I[] = "I"; static char __pyx_k__L[] = "L"; static char __pyx_k__M[] = "M"; static char __pyx_k__N[] = "N"; static char __pyx_k__O[] = "O"; static char __pyx_k__Q[] = "Q"; static char __pyx_k__X[] = "X"; static char __pyx_k___[] = "_"; static char __pyx_k__a[] = "a"; static char __pyx_k__b[] = "b"; static char __pyx_k__d[] = "d"; static char __pyx_k__f[] = "f"; static char __pyx_k__g[] = "g"; static char __pyx_k__h[] = "h"; static char __pyx_k__i[] = "i"; static char __pyx_k__k[] = "k"; static char __pyx_k__l[] = "l"; static char __pyx_k__m[] = "m"; static char __pyx_k__n[] = "n"; static char __pyx_k__p[] = "p"; static char __pyx_k__q[] = "q"; static char __pyx_k__t[] = "t"; static char __pyx_k__u[] = "u"; static char __pyx_k__v[] = "v"; static char __pyx_k__x[] = "x"; static char __pyx_k__y[] = "y"; static char __pyx_k__z[] = "z"; static char __pyx_k_212[] = "_fastCopyAndTranspose"; static char __pyx_k_245[] = "get_numarray_include"; static char __pyx_k_582[] = "all (line 40)"; static char __pyx_k_583[] = "Test whether all array elements along a given axis evaluate to True.\n\n Parameters\n ----------\n a : array_like\n Input array or object that can be converted to an array.\n axis : int, optional\n Axis along which a logical AND is performed.\n The default (`axis` = `None`) is to perform a logical AND\n over a flattened input array. `axis` may be negative, in which\n case it counts from the last to the first axis.\n out : ndarray, optional\n Alternate output array in which to place the result.\n It must have the same shape as the expected output and its\n type is preserved (e.g., if ``dtype(out)`` is float, the result\n will consist of 0.0's and 1.0's). See `doc.ufuncs` (Section\n \"Output arguments\") for more details.\n\n Returns\n -------\n all : ndarray, bool\n A new boolean or array is returned unless `out` is specified,\n in which case a reference to `out` is returned.\n\n See Also\n --------\n ndarray.all : equivalent method\n\n any : Test whether any element along a given axis evaluates to True.\n\n Notes\n -----\n Not a Number (NaN), positive infinity and negative infinity\n evaluate to `True` because these are not equal to zero.\n\n Examples\n --------\n >>> np.all([[True,False],[True,True]])\n False\n\n >>> np.all([[True,False],[True,True]], axis=0)\n array([ True, False], dtype=bool)\n\n >>> np.all([-1, 4, 5])\n True\n\n >>> np.all([1.0, np.nan])\n True\n\n >>> o=np.array([False])\n >>> z=np.all([-1, 4, 5], out=o)\n >>> id(z), id(o), z # doctest: +SKIP\n (28293632, 28293632, array([ True], dtype=bool))\n \n "; static char __pyx_k_584[] = "allclose (line 99)"; static char __pyx_k_585[] = "Returns True if two arrays are element-wise equal within a tolerance.\n\n The tolerance values are positive, typically very small numbers. The\n relative difference (`rtol` * abs(`b`)) and the absolute difference\n `atol` are added together to compare against the absolute difference\n between `a` and `b`.\n\n Parameters\n ----------\n a, b : array_like\n Input arrays to compare.\n rtol : float\n The relative tolerance parameter (see Notes).\n atol : float\n The absolute tolerance parameter (see Notes).\n\n Returns\n -------\n y : bool\n Returns True if the two arrays are equal within the given\n tolerance; False otherwise. If either array contains NaN, then\n False is returned.\n\n See Also\n --------\n all, any, alltrue, sometrue\n\n Notes\n -----\n If the following equation is element-wise True, then allclose returns\n True.\n\n absolute(`a` - `b`) <= (`atol` + `rtol` * absolute(`b`))\n\n The above equation is not symmetric in `a` and `b`, so that\n `allclose(a, b)` might be different from `allclose(b, a)` in\n some rare cases.\n\n Examples\n --------\n >>> np.allclose([1e10,1e-7], [1.00001e10,1e-8])\n False\n >>> np.allclose([1e10,1e-8], [1.00001e10,1e-9])\n True\n >>> np.allclose([1e10,1e-8], [1.0001e10,1e-9])\n False\n >>> np.allclose([1.0, np.nan], [1.0, np.nan])\n False\n \n "; static char __pyx_k_586[] = "amax (line 187)"; static char __pyx_k_587[] = "Return the maximum of an array or maximum along an axis.\n\n Parameters\n ----------\n a : array_like\n Input data.\n axis : int, optional\n Axis along which to operate. By default flattened input is used.\n out : ndarray, optional\n Alternate output array in which to place the result. Must be of\n the same shape and buffer length as the expected output. See\n `doc.ufuncs` (Section \"Output arguments\") for more details.\n\n Returns\n -------\n amax : ndarray or scalar\n Maximum of `a`. If `axis` is None, the result is a scalar value.\n If `axis` is given, the result is an array of dimension\n ``a.ndim - 1``.\n\n See Also\n --------\n nanmax : NaN values are ignored instead of being propagated.\n fmax : same behavior as the C99 fmax function.\n argmax : indices of the maximum values.\n\n Notes\n -----\n NaN values are propagated, that is if at least one item is NaN, the\n corresponding max value will be NaN as well. To ignore NaN values\n (MATLAB behavior), please use nanmax.\n\n Examples\n --------\n >>> a = np.arange(4).reshape((2,2))\n >>> a\n array([[0, 1],\n [2, 3]])\n >>> np.amax(a)\n 3\n >>> np.amax(a, axis=0)\n array([2, 3])\n >>> np.amax(a, axis=1)\n array([1, 3])\n\n >>> b = np.arange(5, dtype=np.float)\n >>> b[2] = np.NaN\n >>> np.amax(b)\n nan\n >>> np.nanmax(b)\n 4.0\n \n "; static char __pyx_k_588[] = "amin (line 244)"; static char __pyx_k_589[] = "Return the minimum of an array or minimum along an axis.\n\n Parameters\n ----------\n a : array_like\n Input data.\n axis : int, optional\n Axis along which to operate. By default a flattened input is used.\n out : ndarray, optional\n Alternative output array in which to place the result. Must\n be of the same shape and buffer length as the expected output.\n See `doc.ufuncs` (Section \"Output arguments\") for more details.\n\n Returns\n -------\n amin : ndarray\n A new array or a scalar array with the result.\n\n See Also\n --------\n nanmin: nan values are ignored instead of being propagated\n fmin: same behavior as the C99 fmin function\n argmin: Return the indices of the minimum values.\n\n amax, nanmax, fmax\n\n Notes\n -----\n NaN values are propagated, that is if at least one item is nan, the\n corresponding min value will be nan as well. To ignore NaN values (matlab\n behavior), please use nanmin.\n\n Examples\n --------\n >>> a = np.arange(4).reshape((2,2))\n >>> a\n array([[0, 1],\n [2, 3]])\n >>> np.amin(a) # Minimum of the flattened array\n 0\n >>> np.amin(a, axis=0) # Minima along the first axis\n array([0, 1])\n >>> np.amin(a, axis=1) # Minima along the second axis\n array([0, 2])\n\n >>> b = np.arange(5, dtype=np.float)\n >>> b[2] = np.NaN\n >>> np.amin(b)\n nan\n >>> np.nanmin(b)\n 0.0\n \n "; static char __pyx_k_590[] = "angle (line 301)"; static char __pyx_k_591[] = "Return the angle of the complex argument.\n\n Parameters\n ----------\n z : array_like\n A complex number or sequence of complex numbers.\n deg : bool, optional\n Return angle in degrees if True, radians if False (default).\n\n Returns\n -------\n angle : {ndarray, scalar}\n The counterclockwise angle from the positive real axis on\n the complex plane, with dtype as numpy.float64.\n\n See Also\n --------\n arctan2\n absolute\n\n\n\n Examples\n --------\n >>> np.angle([1.0, 1.0j, 1+1j]) # in radians\n array([ 0. , 1.57079633, 0.78539816])\n >>> np.angle(1+1j, deg=True) # in degrees\n 45.0\n \n "; static char __pyx_k_592[] = "any (line 335)"; static char __pyx_k_593[] = "Test whether any array element along a given axis evaluates to True.\n\n Returns single boolean unless `axis` is not ``None``\n\n Parameters\n ----------\n a : array_like\n Input array or object that can be converted to an array.\n axis : int, optional\n Axis along which a logical OR is performed. The default\n (`axis` = `None`) is to perform a logical OR over a flattened\n input array. `axis` may be negative, in which case it counts\n from the last to the first axis.\n out : ndarray, optional\n Alternate output array in which to place the result. It must have\n the same shape as the expected output and its type is preserved\n (e.g., if it is of type float, then it will remain so, returning\n 1.0 for True and 0.0 for False, regardless of the type of `a`).\n See `doc.ufuncs` (Section \"Output arguments\") for details.\n\n Returns\n -------\n any : bool or ndarray\n A new boolean or `ndarray` is returned unless `out` is specified,\n in which case a reference to `out` is returned.\n\n See Also\n --------\n ndarray.any : equivalent method\n\n all : Test whether all elements along a given axis evaluate to True.\n\n Notes\n -----\n Not a Number (NaN), positive infinity and negative infinity evaluate\n to `True` because these are not equal to zero.\n\n Examples\n --------\n >>> np.any([[True, False], [True, True]])\n True\n\n >>> np.any([[True, False], [False, False]], axis=0)\n array([ True, False], dtype=bool)\n\n >>> np.any([-1, 0, 5])\n True\n\n >>> np.any(np.nan)\n True\n\n >>> o=np.array([False])\n >>> z=np.any([-1, 4, 5], out=o)\n >>> z, o\n (array([ True], dtype=bool), array([ True], dtype=bool))\n >>> # Check now that z is a reference to o\n >>> z is o\n True\n >>> id(z), id(o) # identity of z and o # doctest: +SKIP\n (191614240, 191614240)\n \n "; static char __pyx_k_594[] = "append (line 401)"; static char __pyx_k_595[] = "Append values to the end of an array.\n\n Parameters\n ----------\n arr : array_like\n Values are appended to a copy of this array.\n values : array_like\n These values are appended to a copy of `arr`. It must be of the\n correct shape (the same shape as `arr`, excluding `axis`). If `axis`\n is not specified, `values` can be any shape and will be flattened\n before use.\n axis : int, optional\n The axis along which `values` are appended. If `axis` is not given,\n both `arr` and `values` are flattened before use.\n\n Returns\n -------\n out : ndarray\n A copy of `arr` with `values` appended to `axis`. Note that `append`\n does not occur in-place: a new array is allocated and filled. If\n `axis` is None, `out` is a flattened array.\n\n See Also\n --------\n insert : Insert elements into an array.\n delete : Delete elements from an array.\n\n Examples\n --------\n >>> np.append([1, 2, 3], [[4, 5, 6], [7, 8, 9]])\n array([1, 2, 3, 4, 5, 6, 7, 8, 9])\n\n When `axis` is specified, `values` must have the correct shape.\n\n >>> np.append([[1, 2, 3], [4, 5, 6]], [[7, 8, 9]], axis=0)\n array([[1, 2, 3],\n [4, 5, 6],\n [7, 8, 9]])\n >>> np.append([[1, 2, 3], [4, 5, 6]], [7, 8, 9], axis=0)\n Traceback (most recent call last):\n ...\n ValueError: arrays must have same number of dimensions\n \n "; static char __pyx_k_596[] = "apply_along_axis (line 449)"; static char __pyx_k_597[] = "Apply a function to 1-D slices along the given axis.\n\n Execute `func1d(a, *args)` where `func1d` operates on 1-D arrays and `a`\n is a 1-D slice of `arr` along `axis`.\n\n Parameters\n ----------\n func1d : function\n This function should accept 1-D arrays. It is applied to 1-D\n slices of `arr` along the specified axis.\n axis : integer\n Axis along which `arr` is sliced.\n arr : ndarray\n Input array.\n args : any\n Additional arguments to `func1d`.\n\n Returns\n -------\n outarr : ndarray\n The output array. The shape of `outarr` is identical to the shape of\n `arr`, except along the `axis` dimension, where the length of `outarr`\n is equal to the size of the return value of `func1d`. If `func1d`\n returns a scalar `outarr` will have one fewer dimensions than `arr`.\n\n See Also\n --------\n apply_over_axes : Apply a function repeatedly over multiple axes.\n\n Examples\n --------\n >>> def my_func(a):\n ... '''Average first and last element of a 1-D array'''\n ... return (a[0] + a[-1]) * 0.5\n >>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])\n >>> np.apply_along_axis(my_func, 0, b)\n array([ 4., 5., 6.])\n >>> np.apply_along_axis(my_func, 1, b)\n array([ 2., 5., 8.])\n\n For a function that doesn't return a scalar, the number of dimensions in\n `outarr` is the same as `arr`.\n\n >>> def new_func(a):\n ... '''Divide elements of a by 2.'''\n ... return a * 0.5\n >>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])\n >>> np.apply_along_axis(new_func, 0, b)\n array([[ 0.5, 1. , 1.5],\n [ 2. , 2.5, 3. ],\n [ 3.5, 4. , 4.5]])\n \n "; static char __pyx_k_598[] = "apply_over_axes (line 506)"; static char __pyx_k_599[] = "Apply a function repeatedly over multiple axes.\n\n `func` is called as `res = func(a, axis)`, where `axis` is the first\n element of `axes`. The result `res` of the function call must have\n either the same dimensions as `a` or one less dimension. If `res`\n has one less dimension than `a`, a dimension is inserted before\n `axis`. The call to `func` is then repeated for each axis in `axes`,\n with `res` as the first argument.\n\n Parameters\n ----------\n func : function\n This function must take two arguments, `func(a, axis)`.\n a : array_like\n Input array.\n axes : array_like\n Axes over which `func` is applied; the elements must be integers.\n\n Returns\n -------\n val : ndarray\n The output array. The number of dimensions is the same as `a`,\n but the shape can be different. This depends on whether `func`\n changes the shape of its output with respect to its input.\n\n See Also\n --------\n apply_along_axis :\n Apply a function to 1-D slices of an array along the given axis.\n\n Examples\n --------\n >>> a = np.arange(24).reshape(2,3,4)\n >>> a\n array([[[ 0, 1, 2, 3],\n [ 4, 5, 6, 7],\n [ 8, 9, 10, 11]],\n [[12, 13, 14, 15],\n [16, 17, 18, 19],\n [20, 21, 22, 23]]])\n\n Sum over axes 0 and 2. The result has same number of dimensions\n as the original array:\n\n >>> np.apply_over_axes(np.sum, a, [0,2])\n array([[[ 60],\n [ 92],\n [124]]])\n \n "; static char __pyx_k_600[] = "argmax (line 560)"; static char __pyx_k_601[] = "Indices of the maximum values along an axis.\n\n Parameters\n ----------\n a : array_like\n Input array.\n axis : int, optional\n By default, the index is into the flattened array, otherwise\n along the specified axis.\n\n Returns\n -------\n index_array : ndarray of ints\n Array of indices into the array. It has the same shape as `a.shape`\n with the dimension along `axis` removed.\n\n See Also\n --------\n ndarray.argmax, argmin\n amax : The maximum value along a given axis.\n unravel_index : Convert a flat index into an index tuple.\n\n Notes\n -----\n In case of multiple occurrences of the maximum values, the indices\n corresponding to the first occurrence are returned.\n\n Examples\n --------\n >>> a = np.arange(6).reshape(2,3)\n >>> a\n array([[0, 1, 2],\n [3, 4, 5]])\n >>> np.argmax(a)\n 5\n >>> np.argmax(a, axis=0)\n array([1, 1, 1])\n >>> np.argmax(a, axis=1)\n array([2, 2])\n\n >>> b = np.arange(6)\n >>> b[1] = 5\n >>> b\n array([0, 5, 2, 3, 4, 5])\n >>> np.argmax(b) # Only the first occurrence is returned.\n 1\n \n "; static char __pyx_k_602[] = "argsort (line 624)"; static char __pyx_k_603[] = "Returns the indices that would sort an array.\n\n Perform an indirect sort along the given axis using the algorithm specified\n by the `kind` keyword. It returns an array of indices of the same shape as\n `a` that index data along the given axis in sorted order.\n\n Parameters\n ----------\n a : array_like\n Array to sort.\n axis : int or None, optional\n Axis along which to sort. The default is -1 (the last axis). If None,\n the flattened array is used.\n kind : {'quicksort', 'mergesort', 'heapsort'}, optional\n Sorting algorithm.\n order : list, optional\n When `a` is an array with fields defined, this argument specifies\n which fields to compare first, second, etc. Not all fields need be\n specified.\n\n Returns\n -------\n index_array : ndarray, int\n Array of indices that sort `a` along the specified axis.\n In other words, ``a[index_array]`` yields a sorted `a`.\n\n See Also\n --------\n sort : Describes sorting algorithms used.\n lexsort : Indirect stable sort with multiple keys.\n ndarray.sort : Inplace sort.\n\n Notes\n -----\n See `sort` for notes on the different sorting algorithms.\n\n As of NumPy 1.4.0 `argsort` works with real/complex arrays containing\n nan values. The enhanced sort order is documented in `sort`.\n\n Examples\n --------\n One dimensional array:\n\n >>> x = np.array([3, 1, 2])\n >>> np.argsort(x)\n array([1, 2, 0])\n\n Two-dimensional array:\n\n >>> x = np.array([[0, 3], [2, 2]])\n >>> x\n array([[0, 3],\n [2, 2]])\n\n >>> np.argsort(x, axis=0)\n array([[0, 1],\n [1, 0]])\n\n >>> np.argsort(x, axis=1)\n array([[0, 1],\n [0, 1]])\n\n Sorting with keys:\n\n >>> x = np.array([(1, 0), (0, 1)], dtype=[('x', '>> x\n array([(1, 0), (0, 1)],\n dtype=[('x', '>> np.argsor""t(x, order=('x','y'))\n array([1, 0])\n\n >>> np.argsort(x, order=('y','x'))\n array([0, 1])\n \n "; static char __pyx_k_604[] = "argwhere (line 704)"; static char __pyx_k_605[] = "Find the indices of array elements that are non-zero, grouped by element.\n\n Parameters\n ----------\n a : array_like\n Input data.\n\n Returns\n -------\n index_array : ndarray\n Indices of elements that are non-zero. Indices are grouped by element.\n\n See Also\n --------\n where, nonzero\n\n Notes\n -----\n ``np.argwhere(a)`` is the same as ``np.transpose(np.nonzero(a))``.\n\n The output of ``argwhere`` is not suitable for indexing arrays.\n For this purpose use ``where(a)`` instead.\n\n Examples\n --------\n >>> x = np.arange(6).reshape(2,3)\n >>> x\n array([[0, 1, 2],\n [3, 4, 5]])\n >>> np.argwhere(x>1)\n array([[0, 2],\n [1, 0],\n [1, 1],\n [1, 2]])\n \n "; static char __pyx_k_606[] = "around (line 744)"; static char __pyx_k_607[] = "Evenly round to the given number of decimals.\n\n Parameters\n ----------\n a : array_like\n Input data.\n decimals : int, optional\n Number of decimal places to round to (default: 0). If\n decimals is negative, it specifies the number of positions to\n the left of the decimal point.\n out : ndarray, optional\n Alternative output array in which to place the result. It must have\n the same shape as the expected output, but the type of the output\n values will be cast if necessary. See `doc.ufuncs` (Section\n \"Output arguments\") for details.\n\n Returns\n -------\n rounded_array : ndarray\n An array of the same type as `a`, containing the rounded values.\n Unless `out` was specified, a new array is created. A reference to\n the result is returned.\n\n The real and imaginary parts of complex numbers are rounded\n separately. The result of rounding a float is a float.\n\n See Also\n --------\n ndarray.round : equivalent method\n\n ceil, fix, floor, rint, trunc\n\n\n Notes\n -----\n For values exactly halfway between rounded decimal values, Numpy\n rounds to the nearest even value. Thus 1.5 and 2.5 round to 2.0,\n -0.5 and 0.5 round to 0.0, etc. Results may also be surprising due\n to the inexact representation of decimal fractions in the IEEE\n floating point standard [1]_ and errors introduced when scaling\n by powers of ten.\n\n References\n ----------\n .. [1] \"Lecture Notes on the Status of IEEE 754\", William Kahan,\n http://www.cs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF\n .. [2] \"How Futile are Mindless Assessments of\n Roundoff in Floating-Point Computation?\", William Kahan,\n http://www.cs.berkeley.edu/~wkahan/Mindless.pdf\n\n Examples\n --------\n >>> np.around([0.37, 1.64])\n array([ 0., 2.])\n >>> np.around([0.37, 1.64], decimals=1)\n ""array([ 0.4, 1.6])\n >>> np.around([.5, 1.5, 2.5, 3.5, 4.5]) # rounds to nearest even value\n array([ 0., 2., 2., 4., 4.])\n >>> np.around([1,2,3,11], decimals=1) # ndarray of ints is returned\n array([ 1, 2, 3, 11])\n >>> np.around([1,2,3,11], decimals=-1)\n array([ 0, 0, 0, 10])\n \n "; static char __pyx_k_608[] = "array (line 812)"; static char __pyx_k_609[] = "array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)\n\n Create an array.\n\n Parameters\n ----------\n object : array_like\n An array, any object exposing the array interface, an\n object whose __array__ method returns an array, or any\n (nested) sequence.\n dtype : data-type, optional\n The desired data-type for the array. If not given, then\n the type will be determined as the minimum type required\n to hold the objects in the sequence. This argument can only\n be used to 'upcast' the array. For downcasting, use the\n .astype(t) method.\n copy : bool, optional\n If true (default), then the object is copied. Otherwise, a copy\n will only be made if __array__ returns a copy, if obj is a\n nested sequence, or if a copy is needed to satisfy any of the other\n requirements (`dtype`, `order`, etc.).\n order : {'C', 'F', 'A'}, optional\n Specify the order of the array. If order is 'C' (default), then the\n array will be in C-contiguous order (last-index varies the\n fastest). If order is 'F', then the returned array\n will be in Fortran-contiguous order (first-index varies the\n fastest). If order is 'A', then the returned array may\n be in any order (either C-, Fortran-contiguous, or even\n discontiguous).\n subok : bool, optional\n If True, then sub-classes will be passed-through, otherwise\n the returned array will be forced to be a base-class array (default).\n ndmin : int, optional\n Specifies the minimum number of dimensions that the resulting\n array should have. Ones will be pre-pended to the shape as\n needed to meet this requirement.\n\n Returns\n -------\n out : ndarray\n An array object satisfying the specified requirements.\n\n See Also\n --------\n empty, empty_like, zeros, zeros_like, ones, ones_like, fill\n\n ""Examples\n --------\n >>> np.array([1, 2, 3])\n array([1, 2, 3])\n\n Upcasting:\n\n >>> np.array([1, 2, 3.0])\n array([ 1., 2., 3.])\n\n More than one dimension:\n\n >>> np.array([[1, 2], [3, 4]])\n array([[1, 2],\n [3, 4]])\n\n Minimum dimensions 2:\n\n >>> np.array([1, 2, 3], ndmin=2)\n array([[1, 2, 3]])\n\n Type provided:\n\n >>> np.array([1, 2, 3], dtype=complex)\n array([ 1.+0.j, 2.+0.j, 3.+0.j])\n\n Data-type consisting of more than one element:\n\n >>> x = np.array([(1,2),(3,4)],dtype=[('a','>> x['a']\n array([1, 3])\n\n Creating an array from sub-classes:\n\n >>> np.array(np.mat('1 2; 3 4'))\n array([[1, 2],\n [3, 4]])\n\n >>> np.array(np.mat('1 2; 3 4'), subok=True)\n matrix([[1, 2],\n [3, 4]])\n \n "; static char __pyx_k_610[] = "array2string (line 906)"; static char __pyx_k_611[] = "Return a string representation of an array.\n\n Parameters\n ----------\n a : ndarray\n Input array.\n max_line_width : int, optional\n The maximum number of columns the string should span. Newline\n characters splits the string appropriately after array elements.\n precision : int, optional\n Floating point precision. Default is the current printing\n precision (usually 8), which can be altered using `set_printoptions`.\n suppress_small : bool, optional\n Represent very small numbers as zero. A number is \"very small\" if it\n is smaller than the current printing precision.\n separator : str, optional\n Inserted between elements.\n prefix : str, optional\n An array is typically printed as::\n\n 'prefix(' + array2string(a) + ')'\n\n The length of the prefix string is used to align the\n output correctly.\n style : function, optional\n A function that accepts an ndarray and returns a string. Used only\n when the shape of `a` is equal to ().\n\n Returns\n -------\n array_str : str\n String representation of the array.\n\n See Also\n --------\n array_str, array_repr, set_printoptions\n\n Examples\n --------\n >>> x = np.array([1e-16,1,2,3])\n >>> print np.array2string(x, precision=2, separator=',',\n ... suppress_small=True)\n [ 0., 1., 2., 3.]\n \n "; static char __pyx_k_612[] = "array_equal (line 955)"; static char __pyx_k_613[] = "True if two arrays have the same shape and elements, False otherwise.\n\n Parameters\n ----------\n a1, a2 : array_like\n Input arrays.\n\n Returns\n -------\n b : bool\n Returns True if the arrays are equal.\n\n See Also\n --------\n allclose: Returns True if two arrays are element-wise equal within a\n tolerance.\n array_equiv: Returns True if input arrays are shape consistent and all\n elements equal.\n\n Examples\n --------\n >>> np.array_equal([1, 2], [1, 2])\n True\n >>> np.array_equal(np.array([1, 2]), np.array([1, 2]))\n True\n >>> np.array_equal([1, 2], [1, 2, 3])\n False\n >>> np.array_equal([1, 2], [1, 4])\n False\n \n "; static char __pyx_k_614[] = "array_equiv (line 990)"; static char __pyx_k_615[] = "Returns True if input arrays are shape consistent and all elements equal.\n\n Shape consistent means they are either the same shape, or one input array\n can be broadcasted to create the same shape as the other one.\n\n Parameters\n ----------\n a1, a2 : array_like\n Input arrays.\n\n Returns\n -------\n out : bool\n True if equivalent, False otherwise.\n\n Examples\n --------\n >>> np.array_equiv([1, 2], [1, 2])\n True\n >>> np.array_equiv([1, 2], [1, 3])\n False\n\n Showing the shape equivalence:\n\n >>> np.array_equiv([1, 2], [[1, 2], [1, 2]])\n True\n >>> np.array_equiv([1, 2], [[1, 2, 1, 2], [1, 2, 1, 2]])\n False\n\n >>> np.array_equiv([1, 2], [[1, 2], [1, 3]])\n False\n \n "; static char __pyx_k_616[] = "array_repr (line 1027)"; static char __pyx_k_617[] = "Return the string representation of an array.\n\n Parameters\n ----------\n arr : ndarray\n Input array.\n max_line_width : int, optional\n The maximum number of columns the string should span. Newline\n characters split the string appropriately after array elements.\n precision : int, optional\n Floating point precision. Default is the current printing precision\n (usually 8), which can be altered using `set_printoptions`.\n suppress_small : bool, optional\n Represent very small numbers as zero, default is False. Very small\n is defined by `precision`, if the precision is 8 then\n numbers smaller than 5e-9 are represented as zero.\n\n Returns\n -------\n string : str\n The string representation of an array.\n\n See Also\n --------\n array_str, array2string, set_printoptions\n\n Examples\n --------\n >>> np.array_repr(np.array([1,2]))\n 'array([1, 2])'\n >>> np.array_repr(np.ma.array([0.]))\n 'MaskedArray([ 0.])'\n >>> np.array_repr(np.array([], np.int32))\n 'array([], dtype=int32)'\n\n >>> x = np.array([1e-6, 4e-7, 2, 3])\n >>> np.array_repr(x, precision=6, suppress_small=True)\n 'array([ 0.000001, 0. , 2. , 3. ])'\n \n "; static char __pyx_k_618[] = "array_split (line 1071)"; static char __pyx_k_619[] = "Split an array into multiple sub-arrays of equal or near-equal size.\n\n Please refer to the ``split`` documentation. The only difference\n between these functions is that ``array_split`` allows\n `indices_or_sections` to be an integer that does *not* equally\n divide the axis.\n\n See Also\n --------\n split : Split array into multiple sub-arrays of equal size.\n\n Examples\n --------\n >>> x = np.arange(8.0)\n >>> np.array_split(x, 3)\n [array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7.])]\n \n "; static char __pyx_k_620[] = "array_str (line 1093)"; static char __pyx_k_621[] = "Return a string representation of the data in an array.\n\n The data in the array is returned as a single string. This function is\n similar to `array_repr`, the difference being that `array_repr` also\n returns information on the kind of array and its data type.\n\n Parameters\n ----------\n a : ndarray\n Input array.\n max_line_width : int, optional\n Inserts newlines if text is longer than `max_line_width`. The\n default is, indirectly, 75.\n precision : int, optional\n Floating point precision. Default is the current printing precision\n (usually 8), which can be altered using `set_printoptions`.\n suppress_small : bool, optional\n Represent numbers \"very close\" to zero as zero; default is False.\n Very close is defined by precision: if the precision is 8, e.g.,\n numbers smaller (in absolute value) than 5e-9 are represented as\n zero.\n\n See Also\n --------\n array2string, array_repr, set_printoptions\n\n Examples\n --------\n >>> np.array_str(np.arange(3))\n '[0 1 2]'\n \n "; static char __pyx_k_622[] = "asanyarray (line 1129)"; static char __pyx_k_623[] = "Convert the input to an ndarray, but pass ndarray subclasses through.\n\n Parameters\n ----------\n a : array_like\n Input data, in any form that can be converted to an array. This\n includes scalars, lists, lists of tuples, tuples, tuples of tuples,\n tuples of lists, and ndarrays.\n dtype : data-type, optional\n By default, the data-type is inferred from the input data.\n order : {'C', 'F'}, optional\n Whether to use row-major ('C') or column-major ('F') memory\n representation. Defaults to 'C'.\n\n Returns\n -------\n out : ndarray or an ndarray subclass\n Array interpretation of `a`. If `a` is an ndarray or a subclass\n of ndarray, it is returned as-is and no copy is performed.\n\n See Also\n --------\n asarray : Similar function which always returns ndarrays.\n ascontiguousarray : Convert input to a contiguous array.\n asfarray : Convert input to a floating point ndarray.\n asfortranarray : Convert input to an ndarray with column-major\n memory order.\n asarray_chkfinite : Similar function which checks input for NaNs and\n Infs.\n fromiter : Create an array from an iterator.\n fromfunction : Construct an array by executing a function on grid\n positions.\n\n Examples\n --------\n Convert a list into an array:\n\n >>> a = [1, 2]\n >>> np.asanyarray(a)\n array([1, 2])\n\n Instances of `ndarray` subclasses are passed through as-is:\n\n >>> a = np.matrix([1, 2])\n >>> np.asanyarray(a) is a\n True\n \n "; static char __pyx_k_624[] = "asarray_chkfinite (line 1181)"; static char __pyx_k_625[] = "Convert the input to an array, checking for NaNs or Infs.\n\n Parameters\n ----------\n a : array_like\n Input data, in any form that can be converted to an array. This\n includes lists, lists of tuples, tuples, tuples of tuples, tuples\n of lists and ndarrays. Success requires no NaNs or Infs.\n dtype : data-type, optional\n By default, the data-type is inferred from the input data.\n order : {'C', 'F'}, optional\n Whether to use row-major ('C') or column-major ('FORTRAN') memory\n representation. Defaults to 'C'.\n\n Returns\n -------\n out : ndarray\n Array interpretation of `a`. No copy is performed if the input\n is already an ndarray. If `a` is a subclass of ndarray, a base\n class ndarray is returned.\n\n Raises\n ------\n ValueError\n Raises ValueError if `a` contains NaN (Not a Number) or Inf (Infinity).\n\n See Also\n --------\n asarray : Create and array.\n asanyarray : Similar function which passes through subclasses.\n ascontiguousarray : Convert input to a contiguous array.\n asfarray : Convert input to a floating point ndarray.\n asfortranarray : Convert input to an ndarray with column-major\n memory order.\n fromiter : Create an array from an iterator.\n fromfunction : Construct an array by executing a function on grid\n positions.\n\n Examples\n --------\n Convert a list into an array. If all elements are finite\n ``asarray_chkfinite`` is identical to ``asarray``.\n\n >>> a = [1, 2]\n >>> np.asarray_chkfinite(a)\n array([1, 2])\n\n Raises ValueError if array_like contains Nans or Infs.\n\n >>> a = [1, 2, np.inf]\n >>> try:\n ... np.asarray_chkfinite(a)\n ... except ValueError:\n ... print 'ValueError'\n ...\n ValueError\n \n "; static char __pyx_k_626[] = "ascontiguousarray (line 1243)"; static char __pyx_k_627[] = "Return a contiguous array in memory (C order).\n\n Parameters\n ----------\n a : array_like\n Input array.\n dtype : str or dtype object, optional\n Data-type of returned array.\n\n Returns\n -------\n out : ndarray\n Contiguous array of same shape and content as `a`, with type `dtype`\n if specified.\n\n See Also\n --------\n asfortranarray : Convert input to an ndarray with column-major\n memory order.\n require : Return an ndarray that satisfies requirements.\n ndarray.flags : Information about the memory layout of the array.\n\n Examples\n --------\n >>> x = np.arange(6).reshape(2,3)\n >>> np.ascontiguousarray(x, dtype=np.float32)\n array([[ 0., 1., 2.],\n [ 3., 4., 5.]], dtype=float32)\n >>> x.flags['C_CONTIGUOUS']\n True\n \n "; static char __pyx_k_628[] = "asfarray (line 1279)"; static char __pyx_k_629[] = "Return an array converted to a float type.\n\n Parameters\n ----------\n a : array_like\n The input array.\n dtype : str or dtype object, optional\n Float type code to coerce input array `a`. If `dtype` is one of the\n 'int' dtypes, it is replaced with float64.\n\n Returns\n -------\n out : ndarray\n The input `a` as a float ndarray.\n\n Examples\n --------\n >>> np.asfarray([2, 3])\n array([ 2., 3.])\n >>> np.asfarray([2, 3], dtype='float')\n array([ 2., 3.])\n >>> np.asfarray([2, 3], dtype='int8')\n array([ 2., 3.])\n \n "; static char __pyx_k_630[] = "asfortranarray (line 1308)"; static char __pyx_k_631[] = "Return an array laid out in Fortran order in memory.\n\n Parameters\n ----------\n a : array_like\n Input array.\n dtype : str or dtype object, optional\n By default, the data-type is inferred from the input data.\n\n Returns\n -------\n out : ndarray\n The input `a` in Fortran, or column-major, order.\n\n See Also\n --------\n ascontiguousarray : Convert input to a contiguous (C order) array.\n asanyarray : Convert input to an ndarray with either row or\n column-major memory order.\n require : Return an ndarray that satisfies requirements.\n ndarray.flags : Information about the memory layout of the array.\n\n Examples\n --------\n >>> x = np.arange(6).reshape(2,3)\n >>> y = np.asfortranarray(x)\n >>> x.flags['F_CONTIGUOUS']\n False\n >>> y.flags['F_CONTIGUOUS']\n True\n \n "; static char __pyx_k_632[] = "asmatrix (line 1344)"; static char __pyx_k_633[] = "Interpret the input as a matrix.\n\n Unlike `matrix`, `asmatrix` does not make a copy if the input is already\n a matrix or an ndarray. Equivalent to ``matrix(data, copy=False)``.\n\n Parameters\n ----------\n data : array_like\n Input data.\n\n Returns\n -------\n mat : matrix\n `data` interpreted as a matrix.\n\n Examples\n --------\n >>> x = np.array([[1, 2], [3, 4]])\n\n >>> m = np.asmatrix(x)\n\n >>> x[0,0] = 5\n\n >>> m\n matrix([[5, 2],\n [3, 4]])\n \n "; static char __pyx_k_634[] = "asscalar (line 1376)"; static char __pyx_k_635[] = "Convert an array of size 1 to its scalar equivalent.\n\n Parameters\n ----------\n a : ndarray\n Input array of size 1.\n\n Returns\n -------\n out : scalar\n Scalar representation of `a`. The input data type is preserved.\n\n Examples\n --------\n >>> np.asscalar(np.array([24]))\n 24\n \n "; static char __pyx_k_636[] = "atleast_1d (line 1398)"; static char __pyx_k_637[] = "Convert inputs to arrays with at least one dimension.\n\n Scalar inputs are converted to 1-dimensional arrays, whilst\n higher-dimensional inputs are preserved.\n\n Parameters\n ----------\n array1, array2, ... : array_like\n One or more input arrays.\n\n Returns\n -------\n ret : ndarray\n An array, or sequence of arrays, each with ``a.ndim >= 1``.\n Copies are made only if necessary.\n\n See Also\n --------\n atleast_2d, atleast_3d\n\n Examples\n --------\n >>> np.atleast_1d(1.0)\n array([ 1.])\n\n >>> x = np.arange(9.0).reshape(3,3)\n >>> np.atleast_1d(x)\n array([[ 0., 1., 2.],\n [ 3., 4., 5.],\n [ 6., 7., 8.]])\n >>> np.atleast_1d(x) is x\n True\n\n >>> np.atleast_1d(1, [3, 4])\n [array([1]), array([3, 4])]\n \n "; static char __pyx_k_638[] = "atleast_2d (line 1439)"; static char __pyx_k_639[] = "View inputs as arrays with at least two dimensions.\n\n Parameters\n ----------\n array1, array2, ... : array_like\n One or more array-like sequences. Non-array inputs are converted\n to arrays. Arrays that already have two or more dimensions are\n preserved.\n\n Returns\n -------\n res, res2, ... : ndarray\n An array, or tuple of arrays, each with ``a.ndim >= 2``.\n Copies are avoided where possible, and views with two or more\n dimensions are returned.\n\n See Also\n --------\n atleast_1d, atleast_3d\n\n Examples\n --------\n >>> np.atleast_2d(3.0)\n array([[ 3.]])\n\n >>> x = np.arange(3.0)\n >>> np.atleast_2d(x)\n array([[ 0., 1., 2.]])\n >>> np.atleast_2d(x).base is x\n True\n\n >>> np.atleast_2d(1, [1, 2], [[1, 2]])\n [array([[1]]), array([[1, 2]]), array([[1, 2]])]\n \n "; static char __pyx_k_640[] = "atleast_3d (line 1478)"; static char __pyx_k_641[] = "View inputs as arrays with at least three dimensions.\n\n Parameters\n ----------\n array1, array2, ... : array_like\n One or more array-like sequences. Non-array inputs are converted to\n arrays. Arrays that already have three or more dimensions are\n preserved.\n\n Returns\n -------\n res1, res2, ... : ndarray\n An array, or tuple of arrays, each with ``a.ndim >= 3``. Copies are\n avoided where possible, and views with three or more dimensions are\n returned. For example, a 1-D array of shape ``(N,)`` becomes a view\n of shape ``(1, N, 1)``, and a 2-D array of shape ``(M, N)`` becomes a\n view of shape ``(M, N, 1)``.\n\n See Also\n --------\n atleast_1d, atleast_2d\n\n Examples\n --------\n >>> np.atleast_3d(3.0)\n array([[[ 3.]]])\n\n >>> x = np.arange(3.0)\n >>> np.atleast_3d(x).shape\n (1, 3, 1)\n\n >>> x = np.arange(12.0).reshape(4,3)\n >>> np.atleast_3d(x).shape\n (4, 3, 1)\n >>> np.atleast_3d(x).base is x\n True\n\n >>> for arr in np.atleast_3d([1, 2], [[1, 2]], [[[1, 2]]]):\n ... print arr, arr.shape\n ...\n [[[1]\n [2]]] (1, 2, 1)\n [[[1]\n [2]]] (1, 2, 1)\n [[[1 2]]] (1, 1, 2)\n \n "; static char __pyx_k_642[] = "average (line 1529)"; static char __pyx_k_643[] = "Compute the weighted average along the specified axis.\n\n Parameters\n ----------\n a : array_like\n Array containing data to be averaged. If `a` is not an array, a\n conversion is attempted.\n axis : int, optional\n Axis along which to average `a`. If `None`, averaging is done over\n the flattened array.\n weights : array_like, optional\n An array of weights associated with the values in `a`. Each value in\n `a` contributes to the average according to its associated weight.\n The weights array can either be 1-D (in which case its length must be\n the size of `a` along the given axis) or of the same shape as `a`.\n If `weights=None`, then all data in `a` are assumed to have a\n weight equal to one.\n returned : bool, optional\n Default is `False`. If `True`, the tuple (`average`, `sum_of_weights`)\n is returned, otherwise only the average is returned.\n If `weights=None`, `sum_of_weights` is equivalent to the number of\n elements over which the average is taken.\n\n\n Returns\n -------\n average, [sum_of_weights] : {array_type, double}\n Return the average along the specified axis. When returned is `True`,\n return a tuple with the average as the first element and the sum\n of the weights as the second element. The return type is `Float`\n if `a` is of integer type, otherwise it is of the same type as `a`.\n `sum_of_weights` is of the same type as `average`.\n\n Raises\n ------\n ZeroDivisionError\n When all weights along axis are zero. See `numpy.ma.average` for a\n version robust to this type of error.\n TypeError\n When the length of 1D `weights` is not the same as the shape of `a`\n along axis.\n\n See Also\n --------\n mean\n\n ma.average : average for masked arrays\n\n Examples\n --------\n >>> data = range(1,5)\n >>> data\n [1, 2, 3, 4""]\n >>> np.average(data)\n 2.5\n >>> np.average(range(1,11), weights=range(10,0,-1))\n 4.0\n\n >>> data = np.arange(6).reshape((3,2))\n >>> data\n array([[0, 1],\n [2, 3],\n [4, 5]])\n >>> np.average(data, axis=1, weights=[1./4, 3./4])\n array([ 0.75, 2.75, 4.75])\n >>> np.average(data, weights=[1./4, 3./4])\n Traceback (most recent call last):\n ...\n TypeError: Axis must be specified when shapes of a and weights differ.\n \n "; static char __pyx_k_644[] = "bartlett (line 1604)"; static char __pyx_k_645[] = "Return the Bartlett window.\n\n The Bartlett window is very similar to a triangular window, except\n that the end points are at zero. It is often used in signal\n processing for tapering a signal, without generating too much\n ripple in the frequency domain.\n\n Parameters\n ----------\n M : int\n Number of points in the output window. If zero or less, an\n empty array is returned.\n\n Returns\n -------\n out : array\n The triangular window, normalized to one (the value one\n appears only if the number of samples is odd), with the first\n and last samples equal to zero.\n\n See Also\n --------\n blackman, hamming, hanning, kaiser\n\n Notes\n -----\n The Bartlett window is defined as\n\n .. math:: w(n) = \014rac{2}{M-1} \\left(\n \014rac{M-1}{2} - \\left|n - \014rac{M-1}{2}\right|\n \right)\n\n Most references to the Bartlett window come from the signal\n processing literature, where it is used as one of many windowing\n functions for smoothing values. Note that convolution with this\n window produces linear interpolation. It is also known as an\n apodization (which means\"removing the foot\", i.e. smoothing\n discontinuities at the beginning and end of the sampled signal) or\n tapering function. The fourier transform of the Bartlett is the product\n of two sinc functions.\n Note the excellent discussion in Kanasewich.\n\n References\n ----------\n .. [1] M.S. Bartlett, \"Periodogram Analysis and Continuous Spectra\",\n Biometrika 37, 1-16, 1950.\n .. [2] E.R. Kanasewich, \"Time Sequence Analysis in Geophysics\",\n The University of Alberta Press, 1975, pp. 109-110.\n .. [3] A.V. Oppenheim and R.W. Schafer, \"Discrete-Time Signal\n Processing\", Prentice-Hall, 1999, pp. 468-471.\n .. [4] Wikipedia, \"Window function\",\n http://en.wikipedia.org/wiki/Window_function\n "".. [5] W.H. Press, B.P. Flannery, S.A. Teukolsky, and W.T. Vetterling,\n \"Numerical Recipes\", Cambridge University Press, 1986, page 429.\n\n\n Examples\n --------\n >>> np.bartlett(12)\n array([ 0. , 0.18181818, 0.36363636, 0.54545455, 0.72727273,\n 0.90909091, 0.90909091, 0.72727273, 0.54545455, 0.36363636,\n 0.18181818, 0. ])\n\n Plot the window and its frequency response (requires SciPy and matplotlib):\n\n >>> from numpy import clip, log10, array, bartlett, linspace\n >>> from numpy.fft import fft, fftshift\n >>> import matplotlib.pyplot as plt\n\n >>> window = bartlett(51)\n >>> plt.plot(window)\n []\n >>> plt.title(\"Bartlett window\")\n \n >>> plt.ylabel(\"Amplitude\")\n \n >>> plt.xlabel(\"Sample\")\n \n >>> plt.show()\n\n >>> plt.figure()\n \n >>> A = fft(window, 2048) / 25.5\n >>> mag = abs(fftshift(A))\n >>> freq = linspace(-0.5,0.5,len(A))\n >>> response = 20*log10(mag)\n >>> response = clip(response,-100,100)\n >>> plt.plot(freq, response)\n []\n >>> plt.title(\"Frequency response of Bartlett window\")\n \n >>> plt.ylabel(\"Magnitude [dB]\")\n \n >>> plt.xlabel(\"Normalized frequency [cycles per sample]\")\n \n >>> plt.axis('tight')\n (-0.5, 0.5, -100.0, ...)\n >>> plt.show()\n \n "; static char __pyx_k_646[] = "base_repr (line 1708)"; static char __pyx_k_647[] = "Return a string representation of a number in the given base system.\n\n Parameters\n ----------\n number : int\n The value to convert. Only positive values are handled.\n base : int, optional\n Convert `number` to the `base` number system. The valid range is 2-36,\n the default value is 2.\n padding : int, optional\n Number of zeros padded on the left. Default is 0 (no padding).\n\n Returns\n -------\n out : str\n String representation of `number` in `base` system.\n\n See Also\n --------\n binary_repr : Faster version of `base_repr` for base 2.\n\n Examples\n --------\n >>> np.base_repr(5)\n '101'\n >>> np.base_repr(6, 5)\n '11'\n >>> np.base_repr(7, base=5, padding=3)\n '00012'\n\n >>> np.base_repr(10, base=16)\n 'A'\n >>> np.base_repr(32, base=16)\n '20'\n \n "; static char __pyx_k_648[] = "binary_repr (line 1748)"; static char __pyx_k_649[] = "Return the binary representation of the input number as a string.\n\n For negative numbers, if width is not given, a minus sign is added to the\n front. If width is given, the two's complement of the number is\n returned, with respect to that width.\n\n In a two's-complement system negative numbers are represented by the two's\n complement of the absolute value. This is the most common method of\n representing signed integers on computers [1]_. A N-bit two's-complement\n system can represent every integer in the range\n :math:`-2^{N-1}` to :math:`+2^{N-1}-1`.\n\n Parameters\n ----------\n num : int\n Only an integer decimal number can be used.\n width : int, optional\n The length of the returned string if `num` is positive, the length of\n the two's complement if `num` is negative.\n\n Returns\n -------\n bin : str\n Binary representation of `num` or two's complement of `num`.\n\n See Also\n --------\n base_repr: Return a string representation of a number in the given base\n system.\n\n Notes\n -----\n `binary_repr` is equivalent to using `base_repr` with base 2, but about 25x\n faster.\n\n References\n ----------\n .. [1] Wikipedia, \"Two's complement\",\n http://en.wikipedia.org/wiki/Two's_complement\n\n Examples\n --------\n >>> np.binary_repr(3)\n '11'\n >>> np.binary_repr(-3)\n '-11'\n >>> np.binary_repr(3, width=4)\n '0011'\n\n The two's complement is returned when the input number is negative and\n width is specified:\n\n >>> np.binary_repr(-3, width=4)\n '1101'\n \n "; static char __pyx_k_650[] = "bincount (line 1808)"; static char __pyx_k_651[] = "bincount(x, weights=None, minlength=None)\n\n Count number of occurrences of each value in array of non-negative ints.\n\n The number of bins (of size 1) is one larger than the largest value in\n `x`. If `minlength` is specified, there will be at least this number\n of bins in the output array (though it will be longer if necessary,\n depending on the contents of `x`).\n Each bin gives the number of occurrences of its index value in `x`.\n If `weights` is specified the input array is weighted by it, i.e. if a\n value ``n`` is found at position ``i``, ``out[n] += weight[i]`` instead\n of ``out[n] += 1``.\n\n Parameters\n ----------\n x : array_like, 1 dimension, nonnegative ints\n Input array.\n weights : array_like, optional\n Weights, array of the same shape as `x`.\n minlength : int, optional\n .. versionadded:: 1.6.0\n\n A minimum number of bins for the output array.\n\n Returns\n -------\n out : ndarray of ints\n The result of binning the input array.\n The length of `out` is equal to ``np.amax(x)+1``.\n\n Raises\n ------\n ValueError\n If the input is not 1-dimensional, or contains elements with negative\n values, or if `minlength` is non-positive.\n TypeError\n If the type of the input is float or complex.\n\n See Also\n --------\n histogram, digitize, unique\n\n Examples\n --------\n >>> np.bincount(np.arange(5))\n array([1, 1, 1, 1, 1])\n >>> np.bincount(np.array([0, 1, 1, 3, 2, 1, 7]))\n array([1, 3, 1, 1, 0, 0, 0, 1])\n\n >>> x = np.array([0, 1, 1, 3, 2, 1, 7, 23])\n >>> np.bincount(x).size == np.amax(x)+1\n True\n\n The input array needs to be of integer dtype, otherwise a\n TypeError is raised:\n\n >>> np.bincount(np.arange(5, dtype=np.float))\n Traceback (most recent call last):\n File \"\", line 1, in \n TypeError: array cannot be safely cast to required type""\n\n A possible use of ``bincount`` is to perform sums over\n variable-size chunks of an array, using the ``weights`` keyword.\n\n >>> w = np.array([0.3, 0.5, 0.2, 0.7, 1., -0.6]) # weights\n >>> x = np.array([0, 1, 1, 2, 2, 2])\n >>> np.bincount(x, weights=w)\n array([ 0.3, 0.7, 1.1])\n \n "; static char __pyx_k_652[] = "blackman (line 1883)"; static char __pyx_k_653[] = "Return the Blackman window.\n\n The Blackman window is a taper formed by using the the first three\n terms of a summation of cosines. It was designed to have close to the\n minimal leakage possible. It is close to optimal, only slightly worse\n than a Kaiser window.\n\n Parameters\n ----------\n M : int\n Number of points in the output window. If zero or less, an empty\n array is returned.\n\n Returns\n -------\n out : ndarray\n The window, normalized to one (the value one appears only if the\n number of samples is odd).\n\n See Also\n --------\n bartlett, hamming, hanning, kaiser\n\n Notes\n -----\n The Blackman window is defined as\n\n .. math:: w(n) = 0.42 - 0.5 \\cos(2\\pi n/M) + 0.08 \\cos(4\\pi n/M)\n\n Most references to the Blackman window come from the signal processing\n literature, where it is used as one of many windowing functions for\n smoothing values. It is also known as an apodization (which means\n \"removing the foot\", i.e. smoothing discontinuities at the beginning\n and end of the sampled signal) or tapering function. It is known as a\n \"near optimal\" tapering function, almost as good (by some measures)\n as the kaiser window.\n\n References\n ----------\n Blackman, R.B. and Tukey, J.W., (1958) The measurement of power spectra,\n Dover Publications, New York.\n\n Oppenheim, A.V., and R.W. Schafer. Discrete-Time Signal Processing.\n Upper Saddle River, NJ: Prentice-Hall, 1999, pp. 468-471.\n\n Examples\n --------\n >>> from numpy import blackman\n >>> blackman(12)\n array([ -1.38777878e-17, 3.26064346e-02, 1.59903635e-01,\n 4.14397981e-01, 7.36045180e-01, 9.67046769e-01,\n 9.67046769e-01, 7.36045180e-01, 4.14397981e-01,\n 1.59903635e-01, 3.26064346e-02, -1.38777878e-17])\n\n\n Plot the window and the frequency response:\n\n >>> from numpy import clip, lo""g10, array, blackman, linspace\n >>> from numpy.fft import fft, fftshift\n >>> import matplotlib.pyplot as plt\n\n >>> window = blackman(51)\n >>> plt.plot(window)\n []\n >>> plt.title(\"Blackman window\")\n \n >>> plt.ylabel(\"Amplitude\")\n \n >>> plt.xlabel(\"Sample\")\n \n >>> plt.show()\n\n >>> plt.figure()\n \n >>> A = fft(window, 2048) / 25.5\n >>> mag = abs(fftshift(A))\n >>> freq = linspace(-0.5,0.5,len(A))\n >>> response = 20*log10(mag)\n >>> response = clip(response,-100,100)\n >>> plt.plot(freq, response)\n []\n >>> plt.title(\"Frequency response of Blackman window\")\n \n >>> plt.ylabel(\"Magnitude [dB]\")\n \n >>> plt.xlabel(\"Normalized frequency [cycles per sample]\")\n \n >>> plt.axis('tight')\n (-0.5, 0.5, -100.0, ...)\n >>> plt.show()\n \n "; static char __pyx_k_654[] = "bmat (line 1979)"; static char __pyx_k_655[] = "Build a matrix object from a string, nested sequence, or array.\n\n Parameters\n ----------\n obj : str or array_like\n Input data. Names of variables in the current scope may be\n referenced, even if `obj` is a string.\n\n Returns\n -------\n out : matrix\n Returns a matrix object, which is a specialized 2-D array.\n\n See Also\n --------\n matrix\n\n Examples\n --------\n >>> A = np.mat('1 1; 1 1')\n >>> B = np.mat('2 2; 2 2')\n >>> C = np.mat('3 4; 5 6')\n >>> D = np.mat('7 8; 9 0')\n\n All the following expressions construct the same block matrix:\n\n >>> np.bmat([[A, B], [C, D]])\n matrix([[1, 1, 2, 2],\n [1, 1, 2, 2],\n [3, 4, 7, 8],\n [5, 6, 9, 0]])\n >>> np.bmat(np.r_[np.c_[A, B], np.c_[C, D]])\n matrix([[1, 1, 2, 2],\n [1, 1, 2, 2],\n [3, 4, 7, 8],\n [5, 6, 9, 0]])\n >>> np.bmat('A,B; C,D')\n matrix([[1, 1, 2, 2],\n [1, 1, 2, 2],\n [3, 4, 7, 8],\n [5, 6, 9, 0]])\n \n "; static char __pyx_k_656[] = "broadcast_arrays (line 2026)"; static char __pyx_k_657[] = "Broadcast any number of arrays against each other.\n\n Parameters\n ----------\n `*args` : array_likes\n The arrays to broadcast.\n\n Returns\n -------\n broadcasted : list of arrays\n These arrays are views on the original arrays. They are typically\n not contiguous. Furthermore, more than one element of a\n broadcasted array may refer to a single memory location. If you\n need to write to the arrays, make copies first.\n\n Examples\n --------\n >>> x = np.array([[1,2,3]])\n >>> y = np.array([[1],[2],[3]])\n >>> np.broadcast_arrays(x, y)\n [array([[1, 2, 3],\n [1, 2, 3],\n [1, 2, 3]]), array([[1, 1, 1],\n [2, 2, 2],\n [3, 3, 3]])]\n\n Here is a useful idiom for getting contiguous copies instead of\n non-contiguous views.\n\n >>> map(np.array, np.broadcast_arrays(x, y))\n [array([[1, 2, 3],\n [1, 2, 3],\n [1, 2, 3]]), array([[1, 1, 1],\n [2, 2, 2],\n [3, 3, 3]])]\n \n "; static char __pyx_k_658[] = "byte_bounds (line 2067)"; static char __pyx_k_659[] = "Returns pointers to the end-points of an array.\n\n Parameters\n ----------\n a : ndarray\n Input array. It must conform to the Python-side of the array interface.\n\n Returns\n -------\n (low, high) : tuple of 2 integers\n The first integer is the first byte of the array, the second integer is\n just past the last byte of the array. If `a` is not contiguous it\n will not use every byte between the (`low`, `high`) values.\n\n Examples\n --------\n >>> I = np.eye(2, dtype='f'); I.dtype\n dtype('float32')\n >>> low, high = np.byte_bounds(I)\n >>> high - low == I.size*I.itemsize\n True\n >>> I = np.eye(2, dtype='G'); I.dtype\n dtype('complex192')\n >>> low, high = np.byte_bounds(I)\n >>> high - low == I.size*I.itemsize\n True\n \n "; static char __pyx_k_660[] = "can_cast (line 2099)"; static char __pyx_k_661[] = "can_cast(from, totype, casting = 'safe')\n\n Returns True if cast between data types can occur according to the\n casting rule. If from is a scalar or array scalar, also returns\n True if the scalar value can be cast without overflow or truncation\n to an integer.\n\n Parameters\n ----------\n from : dtype, dtype specifier, scalar, or array\n Data type, scalar, or array to cast from.\n totype : dtype or dtype specifier\n Data type to cast to.\n casting : {'no', 'equiv', 'safe', 'same_kind', 'unsafe'}, optional\n Controls what kind of data casting may occur.\n\n * 'no' means the data types should not be cast at all.\n * 'equiv' means only byte-order changes are allowed.\n * 'safe' means only casts which can preserve values are allowed.\n * 'same_kind' means only safe casts or casts within a kind,\n like float64 to float32, are allowed.\n * 'unsafe' means any data conversions may be done.\n\n Returns\n -------\n out : bool\n True if cast can occur according to the casting rule.\n\n See also\n --------\n dtype, result_type\n\n Examples\n --------\n\n Basic examples\n\n >>> np.can_cast(np.int32, np.int64)\n True\n >>> np.can_cast(np.float64, np.complex)\n True\n >>> np.can_cast(np.complex, np.float)\n False\n\n >>> np.can_cast('i8', 'f8')\n True\n >>> np.can_cast('i8', 'f4')\n False\n >>> np.can_cast('i4', 'S4')\n True\n\n Casting scalars\n\n >>> np.can_cast(100, 'i1')\n True\n >>> np.can_cast(150, 'i1')\n False\n >>> np.can_cast(150, 'u1')\n True\n\n >>> np.can_cast(3.5e100, np.float32)\n False\n >>> np.can_cast(1000.0, np.float32)\n True\n\n Array scalar checks the value, array does not\n\n >>> np.can_cast(np.array(1000.0), np.float32)\n True\n >>> np.can_cast(np.array([1000.0]), np.float32)\n False\n\n Using the casting rules\n\n >>> np.can_c""ast('i8', 'i8', 'no')\n True\n >>> np.can_cast('i8', 'no')\n False\n\n >>> np.can_cast('i8', 'equiv')\n True\n >>> np.can_cast('i8', 'equiv')\n False\n\n >>> np.can_cast('i8', 'safe')\n True\n >>> np.can_cast('i4', 'safe')\n False\n\n >>> np.can_cast('i4', 'same_kind')\n True\n >>> np.can_cast('u4', 'same_kind')\n False\n\n >>> np.can_cast('u4', 'unsafe')\n True\n \n "; static char __pyx_k_662[] = "choose (line 2202)"; static char __pyx_k_663[] = "Construct an array from an index array and a set of arrays to choose from.\n\n First of all, if confused or uncertain, definitely look at the Examples -\n in its full generality, this function is less simple than it might\n seem from the following code description (below ndi =\n `numpy.lib.index_tricks`):\n\n ``np.choose(a,c) == np.array([c[a[I]][I] for I in ndi.ndindex(a.shape)])``.\n\n But this omits some subtleties. Here is a fully general summary:\n\n Given an \"index\" array (`a`) of integers and a sequence of `n` arrays\n (`choices`), `a` and each choice array are first broadcast, as necessary,\n to arrays of a common shape; calling these *Ba* and *Bchoices[i], i =\n 0,...,n-1* we have that, necessarily, ``Ba.shape == Bchoices[i].shape``\n for each `i`. Then, a new array with shape ``Ba.shape`` is created as\n follows:\n\n * if ``mode=raise`` (the default), then, first of all, each element of\n `a` (and thus `Ba`) must be in the range `[0, n-1]`; now, suppose that\n `i` (in that range) is the value at the `(j0, j1, ..., jm)` position\n in `Ba` - then the value at the same position in the new array is the\n value in `Bchoices[i]` at that same position;\n\n * if ``mode=wrap``, values in `a` (and thus `Ba`) may be any (signed)\n integer; modular arithmetic is used to map integers outside the range\n `[0, n-1]` back into that range; and then the new array is constructed\n as above;\n\n * if ``mode=clip``, values in `a` (and thus `Ba`) may be any (signed)\n integer; negative integers are mapped to 0; values greater than `n-1`\n are mapped to `n-1`; and then the new array is constructed as above.\n\n Parameters\n ----------\n a : int array\n This array must contain integers in `[0, n-1]`, where `n` is the number\n of choices, unless ``mode=wrap`` or ``mode=clip``, in which cases any\n integers are permissible.\n choices : sequence of arrays""\n Choice arrays. `a` and all of the choices must be broadcastable to the\n same shape. If `choices` is itself an array (not recommended), then\n its outermost dimension (i.e., the one corresponding to\n ``choices.shape[0]``) is taken as defining the \"sequence\".\n out : array, optional\n If provided, the result will be inserted into this array. It should\n be of the appropriate shape and dtype.\n mode : {'raise' (default), 'wrap', 'clip'}, optional\n Specifies how indices outside `[0, n-1]` will be treated:\n\n * 'raise' : an exception is raised\n * 'wrap' : value becomes value mod `n`\n * 'clip' : values < 0 are mapped to 0, values > n-1 are mapped to n-1\n\n Returns\n -------\n merged_array : array\n The merged result.\n\n Raises\n ------\n ValueError: shape mismatch\n If `a` and each choice array are not all broadcastable to the same\n shape.\n\n See Also\n --------\n ndarray.choose : equivalent method\n\n Notes\n -----\n To reduce the chance of misinterpretation, even though the following\n \"abuse\" is nominally supported, `choices` should neither be, nor be\n thought of as, a single array, i.e., the outermost sequence-like container\n should be either a list or a tuple.\n\n Examples\n --------\n\n >>> choices = [[0, 1, 2, 3], [10, 11, 12, 13],\n ... [20, 21, 22, 23], [30, 31, 32, 33]]\n >>> np.choose([2, 3, 1, 0], choices\n ... # the first element of the result will be the first element of the\n ... # third (2+1) \"array\" in choices, namely, 20; the second element\n ... # will be the second element of the fourth (3+1) choice array, i.e.,\n ... # 31, etc.\n ... )\n array([20, 31, 12, 3])\n >>> np.choose([2, 4, 1, 0], choices, mode='clip') # 4 goes to 3 (4-1)\n array([20, 31, 12, 3])\n >>> # because there are 4 choice arrays\n >>> np.choose([2, 4, 1, 0], choices, m""ode='wrap') # 4 goes to (4 mod 4)\n array([20, 1, 12, 3])\n >>> # i.e., 0\n\n A couple examples illustrating how choose broadcasts:\n\n >>> a = [[1, 0, 1], [0, 1, 0], [1, 0, 1]]\n >>> choices = [-10, 10]\n >>> np.choose(a, choices)\n array([[ 10, -10, 10],\n [-10, 10, -10],\n [ 10, -10, 10]])\n\n >>> # With thanks to Anne Archibald\n >>> a = np.array([0, 1]).reshape((2,1,1))\n >>> c1 = np.array([1, 2, 3]).reshape((1,3,1))\n >>> c2 = np.array([-1, -2, -3, -4, -5]).reshape((1,1,5))\n >>> np.choose(a, (c1, c2)) # result is 2x3x5, res[0,:,:]=c1, res[1,:,:]=c2\n array([[[ 1, 1, 1, 1, 1],\n [ 2, 2, 2, 2, 2],\n [ 3, 3, 3, 3, 3]],\n [[-1, -2, -3, -4, -5],\n [-1, -2, -3, -4, -5],\n [-1, -2, -3, -4, -5]]])\n \n "; static char __pyx_k_664[] = "column_stack (line 2323)"; static char __pyx_k_665[] = "Stack 1-D arrays as columns into a 2-D array.\n\n Take a sequence of 1-D arrays and stack them as columns\n to make a single 2-D array. 2-D arrays are stacked as-is,\n just like with `hstack`. 1-D arrays are turned into 2-D columns\n first.\n\n Parameters\n ----------\n tup : sequence of 1-D or 2-D arrays.\n Arrays to stack. All of them must have the same first dimension.\n\n Returns\n -------\n stacked : 2-D array\n The array formed by stacking the given arrays.\n\n See Also\n --------\n hstack, vstack, concatenate\n\n Notes\n -----\n This function is equivalent to ``np.vstack(tup).T``.\n\n Examples\n --------\n >>> a = np.array((1,2,3))\n >>> b = np.array((2,3,4))\n >>> np.column_stack((a,b))\n array([[1, 2],\n [2, 3],\n [3, 4]])\n \n "; static char __pyx_k_666[] = "common_type (line 2362)"; static char __pyx_k_667[] = "Return a scalar type which is common to the input arrays.\n\n The return type will always be an inexact (i.e. floating point) scalar\n type, even if all the arrays are integer arrays. If one of the inputs is\n an integer array, the minimum precision type that is returned is a\n 64-bit floating point dtype.\n\n All input arrays can be safely cast to the returned dtype without loss\n of information.\n\n Parameters\n ----------\n array1, array2, ... : ndarrays\n Input arrays.\n\n Returns\n -------\n out : data type code\n Data type code.\n\n See Also\n --------\n dtype, mintypecode\n\n Examples\n --------\n >>> np.common_type(np.arange(2, dtype=np.float32))\n \n >>> np.common_type(np.arange(2, dtype=np.float32), np.arange(2))\n \n >>> np.common_type(np.arange(4), np.array([45, 6.j]), np.array([45.0]))\n \n \n "; static char __pyx_k_668[] = "compress (line 2408)"; static char __pyx_k_669[] = "Return selected slices of an array along given axis.\n\n When working along a given axis, a slice along that axis is returned in\n `output` for each index where `condition` evaluates to True. When\n working on a 1-D array, `compress` is equivalent to `extract`.\n\n Parameters\n ----------\n condition : 1-D array of bools\n Array that selects which entries to return. If len(condition)\n is less than the size of `a` along the given axis, then output is\n truncated to the length of the condition array.\n a : array_like\n Array from which to extract a part.\n axis : int, optional\n Axis along which to take slices. If None (default), work on the\n flattened array.\n out : ndarray, optional\n Output array. Its type is preserved and it must be of the right\n shape to hold the output.\n\n Returns\n -------\n compressed_array : ndarray\n A copy of `a` without the slices along axis for which `condition`\n is false.\n\n See Also\n --------\n take, choose, diag, diagonal, select\n ndarray.compress : Equivalent method.\n numpy.doc.ufuncs : Section \"Output arguments\"\n\n Examples\n --------\n >>> a = np.array([[1, 2], [3, 4], [5, 6]])\n >>> a\n array([[1, 2],\n [3, 4],\n [5, 6]])\n >>> np.compress([0, 1], a, axis=0)\n array([[3, 4]])\n >>> np.compress([False, True, True], a, axis=0)\n array([[3, 4],\n [5, 6]])\n >>> np.compress([False, True], a, axis=1)\n array([[2],\n [4],\n [6]])\n\n Working on the flattened array does not return slices along an axis but\n selects elements.\n\n >>> np.compress([False, True], a)\n array([2])\n \n "; static char __pyx_k_670[] = "concatenate (line 2469)"; static char __pyx_k_671[] = "concatenate((a1, a2, ...), axis=0)\n\n Join a sequence of arrays together.\n\n Parameters\n ----------\n a1, a2, ... : sequence of array_like\n The arrays must have the same shape, except in the dimension\n corresponding to `axis` (the first, by default).\n axis : int, optional\n The axis along which the arrays will be joined. Default is 0.\n\n Returns\n -------\n res : ndarray\n The concatenated array.\n\n See Also\n --------\n ma.concatenate : Concatenate function that preserves input masks.\n array_split : Split an array into multiple sub-arrays of equal or\n near-equal size.\n split : Split array into a list of multiple sub-arrays of equal size.\n hsplit : Split array into multiple sub-arrays horizontally (column wise)\n vsplit : Split array into multiple sub-arrays vertically (row wise)\n dsplit : Split array into multiple sub-arrays along the 3rd axis (depth).\n hstack : Stack arrays in sequence horizontally (column wise)\n vstack : Stack arrays in sequence vertically (row wise)\n dstack : Stack arrays in sequence depth wise (along third dimension)\n\n Notes\n -----\n When one or more of the arrays to be concatenated is a MaskedArray,\n this function will return a MaskedArray object instead of an ndarray,\n but the input masks are *not* preserved. In cases where a MaskedArray\n is expected as input, use the ma.concatenate function from the masked\n array module instead.\n\n Examples\n --------\n >>> a = np.array([[1, 2], [3, 4]])\n >>> b = np.array([[5, 6]])\n >>> np.concatenate((a, b), axis=0)\n array([[1, 2],\n [3, 4],\n [5, 6]])\n >>> np.concatenate((a, b.T), axis=1)\n array([[1, 2, 5],\n [3, 4, 6]])\n\n This function will not preserve masking of MaskedArray inputs.\n\n >>> a = np.ma.arange(3)\n >>> a[1] = np.ma.masked\n >>> b = np.arange(2, 5)\n >>> a\n masked_arr""ay(data = [0 -- 2],\n mask = [False True False],\n fill_value = 999999)\n >>> b\n array([2, 3, 4])\n >>> np.concatenate([a, b])\n masked_array(data = [0 1 2 2 3 4],\n mask = False,\n fill_value = 999999)\n >>> np.ma.concatenate([a, b])\n masked_array(data = [0 -- 2 2 3 4],\n mask = [False True False False False False],\n fill_value = 999999)\n \n "; static char __pyx_k_672[] = "convolve (line 2545)"; static char __pyx_k_673[] = "Returns the discrete, linear convolution of two one-dimensional sequences.\n\n The convolution operator is often seen in signal processing, where it\n models the effect of a linear time-invariant system on a signal [1]_. In\n probability theory, the sum of two independent random variables is\n distributed according to the convolution of their individual\n distributions.\n\n Parameters\n ----------\n a : (N,) array_like\n First one-dimensional input array.\n v : (M,) array_like\n Second one-dimensional input array.\n mode : {'full', 'valid', 'same'}, optional\n 'full':\n By default, mode is 'full'. This returns the convolution\n at each point of overlap, with an output shape of (N+M-1,). At\n the end-points of the convolution, the signals do not overlap\n completely, and boundary effects may be seen.\n\n 'same':\n Mode `same` returns output of length ``max(M, N)``. Boundary\n effects are still visible.\n\n 'valid':\n Mode `valid` returns output of length\n ``max(M, N) - min(M, N) + 1``. The convolution product is only given\n for points where the signals overlap completely. Values outside\n the signal boundary have no effect.\n\n Returns\n -------\n out : ndarray\n Discrete, linear convolution of `a` and `v`.\n\n See Also\n --------\n scipy.signal.fftconvolve : Convolve two arrays using the Fast Fourier\n Transform.\n scipy.linalg.toeplitz : Used to construct the convolution operator.\n\n Notes\n -----\n The discrete convolution operation is defined as\n\n .. math:: (f * g)[n] = \\sum_{m = -\\infty}^{\\infty} f[m] g[n - m]\n\n It can be shown that a convolution :math:`x(t) * y(t)` in time/space\n is equivalent to the multiplication :math:`X(f) Y(f)` in the Fourier\n domain, after appropriate padding (padding is necessary to prevent""\n circular convolution). Since multiplication is more efficient (faster)\n than convolution, the function `scipy.signal.fftconvolve` exploits the\n FFT to calculate the convolution of large data-sets.\n\n References\n ----------\n .. [1] Wikipedia, \"Convolution\", http://en.wikipedia.org/wiki/Convolution.\n\n Examples\n --------\n Note how the convolution operator flips the second array\n before \"sliding\" the two across one another:\n\n >>> np.convolve([1, 2, 3], [0, 1, 0.5])\n array([ 0. , 1. , 2.5, 4. , 1.5])\n\n Only return the middle values of the convolution.\n Contains boundary effects, where zeros are taken\n into account:\n\n >>> np.convolve([1,2,3],[0,1,0.5], 'same')\n array([ 1. , 2.5, 4. ])\n\n The two arrays are of the same length, so there\n is only one position where they completely overlap:\n\n >>> np.convolve([1,2,3],[0,1,0.5], 'valid')\n array([ 2.5])\n \n "; static char __pyx_k_674[] = "copy (line 2630)"; static char __pyx_k_675[] = "Return an array copy of the given object.\n\n Parameters\n ----------\n a : array_like\n Input data.\n\n Returns\n -------\n arr : ndarray\n Array interpretation of `a`.\n\n Notes\n -----\n This is equivalent to\n\n >>> np.array(a, copy=True) #doctest: +SKIP\n\n Examples\n --------\n Create an array x, with a reference y and a copy z:\n\n >>> x = np.array([1, 2, 3])\n >>> y = x\n >>> z = np.copy(x)\n\n Note that, when we modify x, y changes, but not z:\n\n >>> x[0] = 10\n >>> x[0] == y[0]\n True\n >>> x[0] == z[0]\n False\n \n "; static char __pyx_k_676[] = "correlate (line 2718)"; static char __pyx_k_677[] = "Cross-correlation of two 1-dimensional sequences.\n\n This function computes the correlation as generally defined in signal\n processing texts::\n\n z[k] = sum_n a[n] * conj(v[n+k])\n\n with a and v sequences being zero-padded where necessary and conj being\n the conjugate.\n\n Parameters\n ----------\n a, v : array_like\n Input sequences.\n mode : {'valid', 'same', 'full'}, optional\n Refer to the `convolve` docstring. Note that the default\n is `valid`, unlike `convolve`, which uses `full`.\n old_behavior : bool\n If True, uses the old behavior from Numeric, (correlate(a,v) == correlate(v,\n a), and the conjugate is not taken for complex arrays). If False, uses\n the conventional signal processing definition (see note).\n\n See Also\n --------\n convolve : Discrete, linear convolution of two one-dimensional sequences.\n\n Examples\n --------\n >>> np.correlate([1, 2, 3], [0, 1, 0.5])\n array([ 3.5])\n >>> np.correlate([1, 2, 3], [0, 1, 0.5], \"same\")\n array([ 2. , 3.5, 3. ])\n >>> np.correlate([1, 2, 3], [0, 1, 0.5], \"full\")\n array([ 0.5, 2. , 3.5, 3. , 0. ])\n \n "; static char __pyx_k_678[] = "count_nonzero (line 2758)"; static char __pyx_k_679[] = "count_nonzero(a)\n\n Counts the number of non-zero values in the array ``a``.\n\n Parameters\n ----------\n a : array_like\n The array for which to count non-zeros.\n\n Returns\n -------\n count : int\n Number of non-zero values in the array.\n\n See Also\n --------\n nonzero : Return the coordinates of all the non-zero values.\n\n Examples\n --------\n >>> np.count_nonzero(np.eye(4))\n 4\n\n >>> np.count_nonzero([[0,1,7,0,0],[3,0,0,2,19]])\n 5\n \n "; static char __pyx_k_680[] = "cov (line 2790)"; static char __pyx_k_681[] = "Estimate a covariance matrix, given data.\n\n Covariance indicates the level to which two variables vary together.\n If we examine N-dimensional samples, :math:`X = [x_1, x_2, ... x_N]^T`,\n then the covariance matrix element :math:`C_{ij}` is the covariance of\n :math:`x_i` and :math:`x_j`. The element :math:`C_{ii}` is the variance\n of :math:`x_i`.\n\n Parameters\n ----------\n m : array_like\n A 1-D or 2-D array containing multiple variables and observations.\n Each row of `m` represents a variable, and each column a single\n observation of all those variables. Also see `rowvar` below.\n y : array_like, optional\n An additional set of variables and observations. `y` has the same\n form as that of `m`.\n rowvar : int, optional\n If `rowvar` is non-zero (default), then each row represents a\n variable, with observations in the columns. Otherwise, the relationship\n is transposed: each column represents a variable, while the rows\n contain observations.\n bias : int, optional\n Default normalization is by ``(N - 1)``, where ``N`` is the number of\n observations given (unbiased estimate). If `bias` is 1, then\n normalization is by ``N``. These values can be overridden by using\n the keyword ``ddof`` in numpy versions >= 1.5.\n ddof : int, optional\n .. versionadded:: 1.5\n If not ``None`` normalization is by ``(N - ddof)``, where ``N`` is\n the number of observations; this overrides the value implied by\n ``bias``. The default value is ``None``.\n\n Returns\n -------\n out : ndarray\n The covariance matrix of the variables.\n\n See Also\n --------\n corrcoef : Normalized covariance matrix\n\n Examples\n --------\n Consider two variables, :math:`x_0` and :math:`x_1`, which\n correlate perfectly, but in opposite directions:\n\n >>> x = np.array([[0, 2], [1, 1], [2, 0]]).T\n "" >>> x\n array([[0, 1, 2],\n [2, 1, 0]])\n\n Note how :math:`x_0` increases while :math:`x_1` decreases. The covariance\n matrix shows this clearly:\n\n >>> np.cov(x)\n array([[ 1., -1.],\n [-1., 1.]])\n\n Note that element :math:`C_{0,1}`, which shows the correlation between\n :math:`x_0` and :math:`x_1`, is negative.\n\n Further, note how `x` and `y` are combined:\n\n >>> x = [-2.1, -1, 4.3]\n >>> y = [3, 1.1, 0.12]\n >>> X = np.vstack((x,y))\n >>> print np.cov(X)\n [[ 11.71 -4.286 ]\n [ -4.286 2.14413333]]\n >>> print np.cov(x, y)\n [[ 11.71 -4.286 ]\n [ -4.286 2.14413333]]\n >>> print np.cov(x)\n 11.71\n \n "; static char __pyx_k_682[] = "cross (line 2871)"; static char __pyx_k_683[] = "Return the cross product of two (arrays of) vectors.\n\n The cross product of `a` and `b` in :math:`R^3` is a vector perpendicular\n to both `a` and `b`. If `a` and `b` are arrays of vectors, the vectors\n are defined by the last axis of `a` and `b` by default, and these axes\n can have dimensions 2 or 3. Where the dimension of either `a` or `b` is\n 2, the third component of the input vector is assumed to be zero and the\n cross product calculated accordingly. In cases where both input vectors\n have dimension 2, the z-component of the cross product is returned.\n\n Parameters\n ----------\n a : array_like\n Components of the first vector(s).\n b : array_like\n Components of the second vector(s).\n axisa : int, optional\n Axis of `a` that defines the vector(s). By default, the last axis.\n axisb : int, optional\n Axis of `b` that defines the vector(s). By default, the last axis.\n axisc : int, optional\n Axis of `c` containing the cross product vector(s). By default, the\n last axis.\n axis : int, optional\n If defined, the axis of `a`, `b` and `c` that defines the vector(s)\n and cross product(s). Overrides `axisa`, `axisb` and `axisc`.\n\n Returns\n -------\n c : ndarray\n Vector cross product(s).\n\n Raises\n ------\n ValueError\n When the dimension of the vector(s) in `a` and/or `b` does not\n equal 2 or 3.\n\n See Also\n --------\n inner : Inner product\n outer : Outer product.\n ix_ : Construct index arrays.\n\n Examples\n --------\n Vector cross-product.\n\n >>> x = [1, 2, 3]\n >>> y = [4, 5, 6]\n >>> np.cross(x, y)\n array([-3, 6, -3])\n\n One vector with dimension 2.\n\n >>> x = [1, 2]\n >>> y = [4, 5, 6]\n >>> np.cross(x, y)\n array([12, -6, -3])\n\n Equivalently:\n\n >>> x = [1, 2, 0]\n >>> y = [4, 5, 6]\n >>> np.cross(x, y)\n array([12, -6, -3""])\n\n Both vectors with dimension 2.\n\n >>> x = [1,2]\n >>> y = [4,5]\n >>> np.cross(x, y)\n -3\n\n Multiple vector cross-products. Note that the direction of the cross\n product vector is defined by the `right-hand rule`.\n\n >>> x = np.array([[1,2,3], [4,5,6]])\n >>> y = np.array([[4,5,6], [1,2,3]])\n >>> np.cross(x, y)\n array([[-3, 6, -3],\n [ 3, -6, 3]])\n\n The orientation of `c` can be changed using the `axisc` keyword.\n\n >>> np.cross(x, y, axisc=0)\n array([[-3, 3],\n [ 6, -6],\n [-3, 3]])\n\n Change the vector definition of `x` and `y` using `axisa` and `axisb`.\n\n >>> x = np.array([[1,2,3], [4,5,6], [7, 8, 9]])\n >>> y = np.array([[7, 8, 9], [4,5,6], [1,2,3]])\n >>> np.cross(x, y)\n array([[ -6, 12, -6],\n [ 0, 0, 0],\n [ 6, -12, 6]])\n >>> np.cross(x, y, axisa=0, axisb=0)\n array([[-24, 48, -24],\n [-30, 60, -30],\n [-36, 72, -36]])\n \n "; static char __pyx_k_684[] = "cumprod (line 2979)"; static char __pyx_k_685[] = "Return the cumulative product of elements along a given axis.\n\n Parameters\n ----------\n a : array_like\n Input array.\n axis : int, optional\n Axis along which the cumulative product is computed. By default\n the input is flattened.\n dtype : dtype, optional\n Type of the returned array, as well as of the accumulator in which\n the elements are multiplied. If *dtype* is not specified, it\n defaults to the dtype of `a`, unless `a` has an integer dtype with\n a precision less than that of the default platform integer. In\n that case, the default platform integer is used instead.\n out : ndarray, optional\n Alternative output array in which to place the result. It must\n have the same shape and buffer length as the expected output\n but the type of the resulting values will be cast if necessary.\n\n Returns\n -------\n cumprod : ndarray\n A new array holding the result is returned unless `out` is\n specified, in which case a reference to out is returned.\n\n See Also\n --------\n numpy.doc.ufuncs : Section \"Output arguments\"\n\n Notes\n -----\n Arithmetic is modular when using integer types, and no error is\n raised on overflow.\n\n Examples\n --------\n >>> a = np.array([1,2,3])\n >>> np.cumprod(a) # intermediate results 1, 1*2\n ... # total product 1*2*3 = 6\n array([1, 2, 6])\n >>> a = np.array([[1, 2, 3], [4, 5, 6]])\n >>> np.cumprod(a, dtype=float) # specify type of output\n array([ 1., 2., 6., 24., 120., 720.])\n\n The cumulative product for each column (i.e., over the rows) of `a`:\n\n >>> np.cumprod(a, axis=0)\n array([[ 1, 2, 3],\n [ 4, 10, 18]])\n\n The cumulative product for each row (i.e. over the columns) of `a`:\n\n >>> np.cumprod(a,axis=1)\n array([[ 1, 2, 6],\n [ 4, 20, 120]])\n \n "; static char __pyx_k_686[] = "cumsum (line 3053)"; static char __pyx_k_687[] = "Return the cumulative sum of the elements along a given axis.\n\n Parameters\n ----------\n a : array_like\n Input array.\n axis : int, optional\n Axis along which the cumulative sum is computed. The default\n (None) is to compute the cumsum over the flattened array.\n dtype : dtype, optional\n Type of the returned array and of the accumulator in which the\n elements are summed. If `dtype` is not specified, it defaults\n to the dtype of `a`, unless `a` has an integer dtype with a\n precision less than that of the default platform integer. In\n that case, the default platform integer is used.\n out : ndarray, optional\n Alternative output array in which to place the result. It must\n have the same shape and buffer length as the expected output\n but the type will be cast if necessary. See `doc.ufuncs`\n (Section \"Output arguments\") for more details.\n\n Returns\n -------\n cumsum_along_axis : ndarray.\n A new array holding the result is returned unless `out` is\n specified, in which case a reference to `out` is returned. The\n result has the same size as `a`, and the same shape as `a` if\n `axis` is not None or `a` is a 1-d array.\n\n\n See Also\n --------\n sum : Sum array elements.\n\n trapz : Integration of array values using the composite trapezoidal rule.\n\n Notes\n -----\n Arithmetic is modular when using integer types, and no error is\n raised on overflow.\n\n Examples\n --------\n >>> a = np.array([[1,2,3], [4,5,6]])\n >>> a\n array([[1, 2, 3],\n [4, 5, 6]])\n >>> np.cumsum(a)\n array([ 1, 3, 6, 10, 15, 21])\n >>> np.cumsum(a, dtype=float) # specifies type of output value(s)\n array([ 1., 3., 6., 10., 15., 21.])\n\n >>> np.cumsum(a,axis=0) # sum over rows for each of the 3 columns\n array([[1, 2, 3],\n [5, 7, 9]])\n >>> ""np.cumsum(a,axis=1) # sum over columns for each of the 2 rows\n array([[ 1, 3, 6],\n [ 4, 9, 15]])\n \n "; static char __pyx_k_688[] = "delete (line 3124)"; static char __pyx_k_689[] = "Return a new array with sub-arrays along an axis deleted.\n\n Parameters\n ----------\n arr : array_like\n Input array.\n obj : slice, int or array of ints\n Indicate which sub-arrays to remove.\n axis : int, optional\n The axis along which to delete the subarray defined by `obj`.\n If `axis` is None, `obj` is applied to the flattened array.\n\n Returns\n -------\n out : ndarray\n A copy of `arr` with the elements specified by `obj` removed. Note\n that `delete` does not occur in-place. If `axis` is None, `out` is\n a flattened array.\n\n See Also\n --------\n insert : Insert elements into an array.\n append : Append elements at the end of an array.\n\n Examples\n --------\n >>> arr = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])\n >>> arr\n array([[ 1, 2, 3, 4],\n [ 5, 6, 7, 8],\n [ 9, 10, 11, 12]])\n >>> np.delete(arr, 1, 0)\n array([[ 1, 2, 3, 4],\n [ 9, 10, 11, 12]])\n\n >>> np.delete(arr, np.s_[::2], 1)\n array([[ 2, 4],\n [ 6, 8],\n [10, 12]])\n >>> np.delete(arr, [1,3,5], None)\n array([ 1, 3, 5, 7, 8, 9, 10, 11, 12])\n \n "; static char __pyx_k_690[] = "deprecate (line 3171)"; static char __pyx_k_691[] = "Issues a DeprecationWarning, adds warning to `old_name`'s\n docstring, rebinds ``old_name.__name__`` and returns the new\n function object.\n\n This function may also be used as a decorator.\n\n Parameters\n ----------\n func : function\n The function to be deprecated.\n old_name : str, optional\n The name of the function to be deprecated. Default is None, in which\n case the name of `func` is used.\n new_name : str, optional\n The new name for the function. Default is None, in which case\n the deprecation message is that `old_name` is deprecated. If given,\n the deprecation message is that `old_name` is deprecated and `new_name`\n should be used instead.\n message : str, optional\n Additional explanation of the deprecation. Displayed in the docstring\n after the warning.\n\n Returns\n -------\n old_func : function\n The deprecated function.\n\n Examples\n --------\n Note that ``olduint`` returns a value after printing Deprecation Warning:\n\n >>> olduint = np.deprecate(np.uint)\n >>> olduint(6)\n /usr/lib/python2.5/site-packages/numpy/lib/utils.py:114:\n DeprecationWarning: uint32 is deprecated\n warnings.warn(str1, DeprecationWarning)\n 6\n \n "; static char __pyx_k_692[] = "diag_indices (line 3221)"; static char __pyx_k_693[] = "Return the indices to access the main diagonal of an array.\n\n This returns a tuple of indices that can be used to access the main\n diagonal of an array `a` with ``a.ndim >= 2`` dimensions and shape\n (n, n, ..., n). For ``a.ndim = 2`` this is the usual diagonal, for\n ``a.ndim > 2`` this is the set of indices to access ``a[i, i, ..., i]``\n for ``i = [0..n-1]``.\n\n Parameters\n ----------\n n : int\n The size, along each dimension, of the arrays for which the returned\n indices can be used.\n\n ndim : int, optional\n The number of dimensions.\n\n See also\n --------\n diag_indices_from\n\n Notes\n -----\n .. versionadded:: 1.4.0\n\n Examples\n --------\n Create a set of indices to access the diagonal of a (4, 4) array:\n\n >>> di = np.diag_indices(4)\n >>> di\n (array([0, 1, 2, 3]), array([0, 1, 2, 3]))\n >>> a = np.arange(16).reshape(4, 4)\n >>> a\n array([[ 0, 1, 2, 3],\n [ 4, 5, 6, 7],\n [ 8, 9, 10, 11],\n [12, 13, 14, 15]])\n >>> a[di] = 100\n >>> a\n array([[100, 1, 2, 3],\n [ 4, 100, 6, 7],\n [ 8, 9, 100, 11],\n [ 12, 13, 14, 100]])\n\n Now, we create indices to manipulate a 3-D array:\n\n >>> d3 = np.diag_indices(2, 3)\n >>> d3\n (array([0, 1]), array([0, 1]), array([0, 1]))\n\n And use it to set the diagonal of an array of zeros to 1:\n\n >>> a = np.zeros((2, 2, 2), dtype=np.int)\n >>> a[d3] = 1\n >>> a\n array([[[1, 0],\n [0, 0]],\n [[0, 0],\n [0, 1]]])\n \n "; static char __pyx_k_694[] = "diagflat (line 3308)"; static char __pyx_k_695[] = "Create a two-dimensional array with the flattened input as a diagonal.\n\n Parameters\n ----------\n v : array_like\n Input data, which is flattened and set as the `k`-th\n diagonal of the output.\n k : int, optional\n Diagonal to set; 0, the default, corresponds to the \"main\" diagonal,\n a positive (negative) `k` giving the number of the diagonal above\n (below) the main.\n\n Returns\n -------\n out : ndarray\n The 2-D output array.\n\n See Also\n --------\n diag : MATLAB work-alike for 1-D and 2-D arrays.\n diagonal : Return specified diagonals.\n trace : Sum along diagonals.\n\n Examples\n --------\n >>> np.diagflat([[1,2], [3,4]])\n array([[1, 0, 0, 0],\n [0, 2, 0, 0],\n [0, 0, 3, 0],\n [0, 0, 0, 4]])\n\n >>> np.diagflat([1,2], 1)\n array([[0, 1, 0],\n [0, 0, 2],\n [0, 0, 0]])\n \n "; static char __pyx_k_696[] = "diff (line 3349)"; static char __pyx_k_697[] = "Calculate the n-th order discrete difference along given axis.\n\n The first order difference is given by ``out[n] = a[n+1] - a[n]`` along\n the given axis, higher order differences are calculated by using `diff`\n recursively.\n\n Parameters\n ----------\n a : array_like\n Input array\n n : int, optional\n The number of times values are differenced.\n axis : int, optional\n The axis along which the difference is taken, default is the last axis.\n\n Returns\n -------\n out : ndarray\n The `n` order differences. The shape of the output is the same as `a`\n except along `axis` where the dimension is smaller by `n`.\n\n See Also\n --------\n gradient, ediff1d\n\n Examples\n --------\n >>> x = np.array([1, 2, 4, 7, 0])\n >>> np.diff(x)\n array([ 1, 2, 3, -7])\n >>> np.diff(x, n=2)\n array([ 1, 1, -10])\n\n >>> x = np.array([[1, 3, 6, 10], [0, 5, 6, 8]])\n >>> np.diff(x)\n array([[2, 3, 4],\n [5, 1, 2]])\n >>> np.diff(x, axis=0)\n array([[-1, 2, 0, -2]])\n \n "; static char __pyx_k_698[] = "digitize (line 3394)"; static char __pyx_k_699[] = "digitize(x, bins)\n\n Return the indices of the bins to which each value in input array belongs.\n\n Each index ``i`` returned is such that ``bins[i-1] <= x < bins[i]`` if\n `bins` is monotonically increasing, or ``bins[i-1] > x >= bins[i]`` if\n `bins` is monotonically decreasing. If values in `x` are beyond the\n bounds of `bins`, 0 or ``len(bins)`` is returned as appropriate.\n\n Parameters\n ----------\n x : array_like\n Input array to be binned. It has to be 1-dimensional.\n bins : array_like\n Array of bins. It has to be 1-dimensional and monotonic.\n\n Returns\n -------\n out : ndarray of ints\n Output array of indices, of same shape as `x`.\n\n Raises\n ------\n ValueError\n If the input is not 1-dimensional, or if `bins` is not monotonic.\n TypeError\n If the type of the input is complex.\n\n See Also\n --------\n bincount, histogram, unique\n\n Notes\n -----\n If values in `x` are such that they fall outside the bin range,\n attempting to index `bins` with the indices that `digitize` returns\n will result in an IndexError.\n\n Examples\n --------\n >>> x = np.array([0.2, 6.4, 3.0, 1.6])\n >>> bins = np.array([0.0, 1.0, 2.5, 4.0, 10.0])\n >>> inds = np.digitize(x, bins)\n >>> inds\n array([1, 4, 3, 2])\n >>> for n in range(x.size):\n ... print bins[inds[n]-1], \"<=\", x[n], \"<\", bins[inds[n]]\n ...\n 0.0 <= 0.2 < 1.0\n 4.0 <= 6.4 < 10.0\n 2.5 <= 3.0 < 4.0\n 1.0 <= 1.6 < 2.5\n \n "; static char __pyx_k_700[] = "disp (line 3453)"; static char __pyx_k_701[] = "Display a message on a device.\n\n Parameters\n ----------\n mesg : str\n Message to display.\n device : object\n Device to write message. If None, defaults to ``sys.stdout`` which is\n very similar to ``print``. `device` needs to have ``write()`` and\n ``flush()`` methods.\n linefeed : bool, optional\n Option whether to print a line feed or not. Defaults to True.\n\n Raises\n ------\n AttributeError\n If `device` does not have a ``write()`` or ``flush()`` method.\n\n Examples\n --------\n Besides ``sys.stdout``, a file-like object can also be used as it has\n both required methods:\n\n >>> from StringIO import StringIO\n >>> buf = StringIO()\n >>> np.disp('\"Display\" in a file', device=buf)\n >>> buf.getvalue()\n '\"Display\" in a file\n'\n \n "; static char __pyx_k_702[] = "dsplit (line 3487)"; static char __pyx_k_703[] = "Split array into multiple sub-arrays along the 3rd axis (depth).\n\n Please refer to the `split` documentation. `dsplit` is equivalent\n to `split` with ``axis=2``, the array is always split along the third\n axis provided the array dimension is greater than or equal to 3.\n\n See Also\n --------\n split : Split an array into multiple sub-arrays of equal size.\n\n Examples\n --------\n >>> x = np.arange(16.0).reshape(2, 2, 4)\n >>> x\n array([[[ 0., 1., 2., 3.],\n [ 4., 5., 6., 7.]],\n [[ 8., 9., 10., 11.],\n [ 12., 13., 14., 15.]]])\n >>> np.dsplit(x, 2)\n [array([[[ 0., 1.],\n [ 4., 5.]],\n [[ 8., 9.],\n [ 12., 13.]]]),\n array([[[ 2., 3.],\n [ 6., 7.]],\n [[ 10., 11.],\n [ 14., 15.]]])]\n >>> np.dsplit(x, np.array([3, 6]))\n [array([[[ 0., 1., 2.],\n [ 4., 5., 6.]],\n [[ 8., 9., 10.],\n [ 12., 13., 14.]]]),\n array([[[ 3.],\n [ 7.]],\n [[ 11.],\n [ 15.]]]),\n array([], dtype=float64)]\n \n "; static char __pyx_k_704[] = "dstack (line 3530)"; static char __pyx_k_705[] = "Stack arrays in sequence depth wise (along third axis).\n\n Takes a sequence of arrays and stack them along the third axis\n to make a single array. Rebuilds arrays divided by `dsplit`.\n This is a simple way to stack 2D arrays (images) into a single\n 3D array for processing.\n\n Parameters\n ----------\n tup : sequence of arrays\n Arrays to stack. All of them must have the same shape along all\n but the third axis.\n\n Returns\n -------\n stacked : ndarray\n The array formed by stacking the given arrays.\n\n See Also\n --------\n vstack : Stack along first axis.\n hstack : Stack along second axis.\n concatenate : Join arrays.\n dsplit : Split array along third axis.\n\n Notes\n -----\n Equivalent to ``np.concatenate(tup, axis=2)``.\n\n Examples\n --------\n >>> a = np.array((1,2,3))\n >>> b = np.array((2,3,4))\n >>> np.dstack((a,b))\n array([[[1, 2],\n [2, 3],\n [3, 4]]])\n\n >>> a = np.array([[1],[2],[3]])\n >>> b = np.array([[2],[3],[4]])\n >>> np.dstack((a,b))\n array([[[1, 2]],\n [[2, 3]],\n [[3, 4]]])\n \n "; static char __pyx_k_706[] = "ediff1d (line 3580)"; static char __pyx_k_707[] = "The differences between consecutive elements of an array.\n\n Parameters\n ----------\n ary : array_like\n If necessary, will be flattened before the differences are taken.\n to_end : array_like, optional\n Number(s) to append at the end of the returned differences.\n to_begin : array_like, optional\n Number(s) to prepend at the beginning of the returned differences.\n\n Returns\n -------\n ed : ndarray\n The differences. Loosely, this is ``ary.flat[1:] - ary.flat[:-1]``.\n\n See Also\n --------\n diff, gradient\n\n Notes\n -----\n When applied to masked arrays, this function drops the mask information\n if the `to_begin` and/or `to_end` parameters are used.\n\n Examples\n --------\n >>> x = np.array([1, 2, 4, 7, 0])\n >>> np.ediff1d(x)\n array([ 1, 2, 3, -7])\n\n >>> np.ediff1d(x, to_begin=-99, to_end=np.array([88, 99]))\n array([-99, 1, 2, 3, -7, 88, 99])\n\n The returned array is always 1D.\n\n >>> y = [[1, 2, 4], [1, 6, 24]]\n >>> np.ediff1d(y)\n array([ 1, 2, -3, 5, 18])\n \n "; static char __pyx_k_708[] = "einsum (line 3625)"; static char __pyx_k_709[] = "einsum(subscripts, *operands, out=None, dtype=None, order='K', casting='safe')\n\n Evaluates the Einstein summation convention on the operands.\n\n Using the Einstein summation convention, many common multi-dimensional\n array operations can be represented in a simple fashion. This function\n provides a way compute such summations. The best way to understand this\n function is to try the examples below, which show how many common NumPy\n functions can be implemented as calls to `einsum`.\n\n Parameters\n ----------\n subscripts : str\n Specifies the subscripts for summation.\n operands : list of array_like\n These are the arrays for the operation.\n out : ndarray, optional\n If provided, the calculation is done into this array.\n dtype : data-type, optional\n If provided, forces the calculation to use the data type specified.\n Note that you may have to also give a more liberal `casting`\n parameter to allow the conversions.\n order : {'C', 'F', 'A', or 'K'}, optional\n Controls the memory layout of the output. 'C' means it should\n be C contiguous. 'F' means it should be Fortran contiguous,\n 'A' means it should be 'F' if the inputs are all 'F', 'C' otherwise.\n 'K' means it should be as close to the layout as the inputs as\n is possible, including arbitrarily permuted axes.\n Default is 'K'.\n casting : {'no', 'equiv', 'safe', 'same_kind', 'unsafe'}, optional\n Controls what kind of data casting may occur. Setting this to\n 'unsafe' is not recommended, as it can adversely affect accumulations.\n\n * 'no' means the data types should not be cast at all.\n * 'equiv' means only byte-order changes are allowed.\n * 'safe' means only casts which can preserve values are allowed.\n * 'same_kind' means only safe casts or casts within a kind,\n like float64 to float32, are allowed.\n "" * 'unsafe' means any data conversions may be done.\n\n Returns\n -------\n output : ndarray\n The calculation based on the Einstein summation convention.\n\n See Also\n --------\n dot, inner, outer, tensordot\n\n Notes\n -----\n .. versionadded:: 1.6.0\n\n The subscripts string is a comma-separated list of subscript labels,\n where each label refers to a dimension of the corresponding operand.\n Repeated subscripts labels in one operand take the diagonal. For example,\n ``np.einsum('ii', a)`` is equivalent to ``np.trace(a)``.\n\n Whenever a label is repeated, it is summed, so ``np.einsum('i,i', a, b)``\n is equivalent to ``np.inner(a,b)``. If a label appears only once,\n it is not summed, so ``np.einsum('i', a)`` produces a view of ``a``\n with no changes.\n\n The order of labels in the output is by default alphabetical. This\n means that ``np.einsum('ij', a)`` doesn't affect a 2D array, while\n ``np.einsum('ji', a)`` takes its transpose.\n\n The output can be controlled by specifying output subscript labels\n as well. This specifies the label order, and allows summing to\n be disallowed or forced when desired. The call ``np.einsum('i->', a)``\n is like ``np.sum(a, axis=-1)``, and ``np.einsum('ii->i', a)``\n is like ``np.diag(a)``. The difference is that `einsum` does not\n allow broadcasting by default.\n\n To enable and control broadcasting, use an ellipsis. Default\n NumPy-style broadcasting is done by adding an ellipsis\n to the left of each term, like ``np.einsum('...ii->...i', a)``.\n To take the trace along the first and last axes,\n you can do ``np.einsum('i...i', a)``, or to do a matrix-matrix\n product with the left-most indices instead of rightmost, you can do\n ``np.einsum('ij...,jk...->ik...', a, b)``.\n\n When there is only one operand, no axes are summed, and no output\n parameter is provided, a view into the operand is returned i""nstead\n of a new array. Thus, taking the diagonal as ``np.einsum('ii->i', a)``\n produces a view.\n\n An alternative way to provide the subscripts and operands is as\n ``einsum(op0, sublist0, op1, sublist1, ..., [sublistout])``. The examples\n below have corresponding `einsum` calls with the two parameter methods.\n\n Examples\n --------\n >>> a = np.arange(25).reshape(5,5)\n >>> b = np.arange(5)\n >>> c = np.arange(6).reshape(2,3)\n\n >>> np.einsum('ii', a)\n 60\n >>> np.einsum(a, [0,0])\n 60\n >>> np.trace(a)\n 60\n\n >>> np.einsum('ii->i', a)\n array([ 0, 6, 12, 18, 24])\n >>> np.einsum(a, [0,0], [0])\n array([ 0, 6, 12, 18, 24])\n >>> np.diag(a)\n array([ 0, 6, 12, 18, 24])\n\n >>> np.einsum('ij,j', a, b)\n array([ 30, 80, 130, 180, 230])\n >>> np.einsum(a, [0,1], b, [1])\n array([ 30, 80, 130, 180, 230])\n >>> np.dot(a, b)\n array([ 30, 80, 130, 180, 230])\n\n >>> np.einsum('ji', c)\n array([[0, 3],\n [1, 4],\n [2, 5]])\n >>> np.einsum(c, [1,0])\n array([[0, 3],\n [1, 4],\n [2, 5]])\n >>> c.T\n array([[0, 3],\n [1, 4],\n [2, 5]])\n\n >>> np.einsum('..., ...', 3, c)\n array([[ 0, 3, 6],\n [ 9, 12, 15]])\n >>> np.einsum(3, [Ellipsis], c, [Ellipsis])\n array([[ 0, 3, 6],\n [ 9, 12, 15]])\n >>> np.multiply(3, c)\n array([[ 0, 3, 6],\n [ 9, 12, 15]])\n\n >>> np.einsum('i,i', b, b)\n 30\n >>> np.einsum(b, [0], b, [0])\n 30\n >>> np.inner(b,b)\n 30\n\n >>> np.einsum('i,j', np.arange(2)+1, b)\n array([[0, 1, 2, 3, 4],\n [0, 2, 4, 6, 8]])\n >>> np.einsum(np.arange(2)+1, [0], b, [1])\n array([[0, 1, 2, 3, 4],\n [0, 2, 4, 6, 8]])\n >>> np.outer(np.arange(2)+1, b)\n array([[0, 1, 2, 3, 4],\n [0, 2, 4, 6, 8]])\n\n >>> np.einsum('i...->...', a)\n array([50, 55, 60, 65, 70])\n >>> n""p.einsum(a, [0,Ellipsis], [Ellipsis])\n array([50, 55, 60, 65, 70])\n >>> np.sum(a, axis=0)\n array([50, 55, 60, 65, 70])\n\n >>> a = np.arange(60.).reshape(3,4,5)\n >>> b = np.arange(24.).reshape(4,3,2)\n >>> np.einsum('ijk,jil->kl', a, b)\n array([[ 4400., 4730.],\n [ 4532., 4874.],\n [ 4664., 5018.],\n [ 4796., 5162.],\n [ 4928., 5306.]])\n >>> np.einsum(a, [0,1,2], b, [1,0,3], [2,3])\n array([[ 4400., 4730.],\n [ 4532., 4874.],\n [ 4664., 5018.],\n [ 4796., 5162.],\n [ 4928., 5306.]])\n >>> np.tensordot(a,b, axes=([1,0],[0,1]))\n array([[ 4400., 4730.],\n [ 4532., 4874.],\n [ 4664., 5018.],\n [ 4796., 5162.],\n [ 4928., 5306.]])\n \n "; static char __pyx_k_710[] = "expand_dims (line 3817)"; static char __pyx_k_711[] = "Expand the shape of an array.\n\n Insert a new axis, corresponding to a given position in the array shape.\n\n Parameters\n ----------\n a : array_like\n Input array.\n axis : int\n Position (amongst axes) where new axis is to be inserted.\n\n Returns\n -------\n res : ndarray\n Output array. The number of dimensions is one greater than that of\n the input array.\n\n See Also\n --------\n doc.indexing, atleast_1d, atleast_2d, atleast_3d\n\n Examples\n --------\n >>> x = np.array([1,2])\n >>> x.shape\n (2,)\n\n The following is equivalent to ``x[np.newaxis,:]`` or ``x[np.newaxis]``:\n\n >>> y = np.expand_dims(x, axis=0)\n >>> y\n array([[1, 2]])\n >>> y.shape\n (1, 2)\n\n >>> y = np.expand_dims(x, axis=1) # Equivalent to x[:,newaxis]\n >>> y\n array([[1],\n [2]])\n >>> y.shape\n (2, 1)\n\n Note that some examples may use ``None`` instead of ``np.newaxis``. These\n are the same objects:\n\n >>> np.newaxis is None\n True\n \n "; static char __pyx_k_712[] = "extract (line 3870)"; static char __pyx_k_713[] = "Return the elements of an array that satisfy some condition.\n\n This is equivalent to ``np.compress(ravel(condition), ravel(arr))``. If\n `condition` is boolean ``np.extract`` is equivalent to ``arr[condition]``.\n\n Parameters\n ----------\n condition : array_like\n An array whose nonzero or True entries indicate the elements of `arr`\n to extract.\n arr : array_like\n Input array of the same size as `condition`.\n\n See Also\n --------\n take, put, putmask, compress\n\n Examples\n --------\n >>> arr = np.arange(12).reshape((3, 4))\n >>> arr\n array([[ 0, 1, 2, 3],\n [ 4, 5, 6, 7],\n [ 8, 9, 10, 11]])\n >>> condition = np.mod(arr, 3)==0\n >>> condition\n array([[ True, False, False, True],\n [False, False, True, False],\n [False, True, False, False]], dtype=bool)\n >>> np.extract(condition, arr)\n array([0, 3, 6, 9])\n\n\n If `condition` is boolean:\n\n >>> arr[condition]\n array([0, 3, 6, 9])\n \n "; static char __pyx_k_714[] = "fill_diagonal (line 3921)"; static char __pyx_k_715[] = "Fill the main diagonal of the given array of any dimensionality.\n\n For an array `a` with ``a.ndim > 2``, the diagonal is the list of\n locations with indices ``a[i, i, ..., i]`` all identical. This function\n modifies the input array in-place, it does not return a value.\n\n Parameters\n ----------\n a : array, at least 2-D.\n Array whose diagonal is to be filled, it gets modified in-place.\n\n val : scalar\n Value to be written on the diagonal, its type must be compatible with\n that of the array a.\n\n See also\n --------\n diag_indices, diag_indices_from\n\n Notes\n -----\n .. versionadded:: 1.4.0\n\n This functionality can be obtained via `diag_indices`, but internally\n this version uses a much faster implementation that never constructs the\n indices and uses simple slicing.\n\n Examples\n --------\n >>> a = np.zeros((3, 3), int)\n >>> np.fill_diagonal(a, 5)\n >>> a\n array([[5, 0, 0],\n [0, 5, 0],\n [0, 0, 5]])\n\n The same function can operate on a 4-D array:\n\n >>> a = np.zeros((3, 3, 3, 3), int)\n >>> np.fill_diagonal(a, 4)\n\n We only show a few blocks for clarity:\n\n >>> a[0, 0]\n array([[4, 0, 0],\n [0, 0, 0],\n [0, 0, 0]])\n >>> a[1, 1]\n array([[0, 0, 0],\n [0, 4, 0],\n [0, 0, 0]])\n >>> a[2, 2]\n array([[0, 0, 0],\n [0, 0, 0],\n [0, 0, 4]])\n \n "; static char __pyx_k_716[] = "find_common_type (line 3982)"; static char __pyx_k_717[] = "Determine common type following standard coercion rules.\n\n Parameters\n ----------\n array_types : sequence\n A list of dtypes or dtype convertible objects representing arrays.\n scalar_types : sequence\n A list of dtypes or dtype convertible objects representing scalars.\n\n Returns\n -------\n datatype : dtype\n The common data type, which is the maximum of `array_types` ignoring\n `scalar_types`, unless the maximum of `scalar_types` is of a\n different kind (`dtype.kind`). If the kind is not understood, then\n None is returned.\n\n See Also\n --------\n dtype, common_type, can_cast, mintypecode\n\n Examples\n --------\n >>> np.find_common_type([], [np.int64, np.float32, np.complex])\n dtype('complex128')\n >>> np.find_common_type([np.int64, np.float32], [])\n dtype('float64')\n\n The standard casting rules ensure that a scalar cannot up-cast an\n array unless the scalar is of a fundamentally different kind of data\n (i.e. under a different hierarchy in the data type hierarchy) then\n the array:\n\n >>> np.find_common_type([np.float32], [np.int64, np.float64])\n dtype('float32')\n\n Complex is of a different type, so it up-casts the float in the\n `array_types` argument:\n\n >>> np.find_common_type([np.float32], [np.complex])\n dtype('complex128')\n\n Type specifier strings are convertible to dtypes and can therefore\n be used instead of dtypes:\n\n >>> np.find_common_type(['f4', 'f4', 'i4'], ['c8'])\n dtype('complex128')\n \n "; static char __pyx_k_718[] = "fix (line 4035)"; static char __pyx_k_719[] = "Round to nearest integer towards zero.\n\n Round an array of floats element-wise to nearest integer towards zero.\n The rounded values are returned as floats.\n\n Parameters\n ----------\n x : array_like\n An array of floats to be rounded\n y : ndarray, optional\n Output array\n\n Returns\n -------\n out : ndarray of floats\n The array of rounded numbers\n\n See Also\n --------\n trunc, floor, ceil\n around : Round to given number of decimals\n\n Examples\n --------\n >>> np.fix(3.14)\n 3.0\n >>> np.fix(3)\n 3.0\n >>> np.fix([2.1, 2.9, -2.1, -2.9])\n array([ 2., 2., -2., -2.])\n \n "; static char __pyx_k_720[] = "flatnonzero (line 4071)"; static char __pyx_k_721[] = "Return indices that are non-zero in the flattened version of a.\n\n This is equivalent to a.ravel().nonzero()[0].\n\n Parameters\n ----------\n a : ndarray\n Input array.\n\n Returns\n -------\n res : ndarray\n Output array, containing the indices of the elements of `a.ravel()`\n that are non-zero.\n\n See Also\n --------\n nonzero : Return the indices of the non-zero elements of the input array.\n ravel : Return a 1-D array containing the elements of the input array.\n\n Examples\n --------\n >>> x = np.arange(-2, 3)\n >>> x\n array([-2, -1, 0, 1, 2])\n >>> np.flatnonzero(x)\n array([0, 1, 3, 4])\n\n Use the indices of the non-zero elements as an index array to extract\n these elements:\n\n >>> x.ravel()[np.flatnonzero(x)]\n array([-2, -1, 1, 2])\n \n "; static char __pyx_k_722[] = "fliplr (line 4110)"; static char __pyx_k_723[] = "Flip array in the left/right direction.\n\n Flip the entries in each row in the left/right direction.\n Columns are preserved, but appear in a different order than before.\n\n Parameters\n ----------\n m : array_like\n Input array.\n\n Returns\n -------\n f : ndarray\n A view of `m` with the columns reversed. Since a view\n is returned, this operation is :math:`\\mathcal O(1)`.\n\n See Also\n --------\n flipud : Flip array in the up/down direction.\n rot90 : Rotate array counterclockwise.\n\n Notes\n -----\n Equivalent to A[:,::-1]. Does not require the array to be\n two-dimensional.\n\n Examples\n --------\n >>> A = np.diag([1.,2.,3.])\n >>> A\n array([[ 1., 0., 0.],\n [ 0., 2., 0.],\n [ 0., 0., 3.]])\n >>> np.fliplr(A)\n array([[ 0., 0., 1.],\n [ 0., 2., 0.],\n [ 3., 0., 0.]])\n\n >>> A = np.random.randn(2,3,5)\n >>> np.all(np.fliplr(A)==A[:,::-1,...])\n True\n \n "; static char __pyx_k_724[] = "flipud (line 4157)"; static char __pyx_k_725[] = "Flip array in the up/down direction.\n\n Flip the entries in each column in the up/down direction.\n Rows are preserved, but appear in a different order than before.\n\n Parameters\n ----------\n m : array_like\n Input array.\n\n Returns\n -------\n out : array_like\n A view of `m` with the rows reversed. Since a view is\n returned, this operation is :math:`\\mathcal O(1)`.\n\n See Also\n --------\n fliplr : Flip array in the left/right direction.\n rot90 : Rotate array counterclockwise.\n\n Notes\n -----\n Equivalent to ``A[::-1,...]``.\n Does not require the array to be two-dimensional.\n\n Examples\n --------\n >>> A = np.diag([1.0, 2, 3])\n >>> A\n array([[ 1., 0., 0.],\n [ 0., 2., 0.],\n [ 0., 0., 3.]])\n >>> np.flipud(A)\n array([[ 0., 0., 3.],\n [ 0., 2., 0.],\n [ 1., 0., 0.]])\n\n >>> A = np.random.randn(2,3,5)\n >>> np.all(np.flipud(A)==A[::-1,...])\n True\n\n >>> np.flipud([1,2])\n array([2, 1])\n \n "; static char __pyx_k_726[] = "frombuffer (line 4207)"; static char __pyx_k_727[] = "frombuffer(buffer, dtype=float, count=-1, offset=0)\n\n Interpret a buffer as a 1-dimensional array.\n\n Parameters\n ----------\n buffer : buffer_like\n An object that exposes the buffer interface.\n dtype : data-type, optional\n Data-type of the returned array; default: float.\n count : int, optional\n Number of items to read. ``-1`` means all data in the buffer.\n offset : int, optional\n Start reading the buffer from this offset; default: 0.\n\n Notes\n -----\n If the buffer has data that is not in machine byte-order, this should\n be specified as part of the data-type, e.g.::\n\n >>> dt = np.dtype(int)\n >>> dt = dt.newbyteorder('>')\n >>> np.frombuffer(buf, dtype=dt)\n\n The data of the resulting array will not be byteswapped, but will be\n interpreted correctly.\n\n Examples\n --------\n >>> s = 'hello world'\n >>> np.frombuffer(s, dtype='S1', count=5, offset=6)\n array(['w', 'o', 'r', 'l', 'd'],\n dtype='|S1')\n \n "; static char __pyx_k_728[] = "fromfile (line 4247)"; static char __pyx_k_729[] = "fromfile(file, dtype=float, count=-1, sep='')\n\n Construct an array from data in a text or binary file.\n\n A highly efficient way of reading binary data with a known data-type,\n as well as parsing simply formatted text files. Data written using the\n `tofile` method can be read using this function.\n\n Parameters\n ----------\n file : file or str\n Open file object or filename.\n dtype : data-type\n Data type of the returned array.\n For binary files, it is used to determine the size and byte-order\n of the items in the file.\n count : int\n Number of items to read. ``-1`` means all items (i.e., the complete\n file).\n sep : str\n Separator between items if file is a text file.\n Empty (\"\") separator means the file should be treated as binary.\n Spaces (\" \") in the separator match zero or more whitespace characters.\n A separator consisting only of spaces must match at least one\n whitespace.\n\n See also\n --------\n load, save\n ndarray.tofile\n loadtxt : More flexible way of loading data from a text file.\n\n Notes\n -----\n Do not rely on the combination of `tofile` and `fromfile` for\n data storage, as the binary files generated are are not platform\n independent. In particular, no byte-order or data-type information is\n saved. Data can be stored in the platform independent ``.npy`` format\n using `save` and `load` instead.\n\n Examples\n --------\n Construct an ndarray:\n\n >>> dt = np.dtype([('time', [('min', int), ('sec', int)]),\n ... ('temp', float)])\n >>> x = np.zeros((1,), dtype=dt)\n >>> x['time']['min'] = 10; x['temp'] = 98.25\n >>> x\n array([((10, 0), 98.25)],\n dtype=[('time', [('min', '>> import os\n >>> fname = os.tmpnam()\n >>> x.tofile(fname)\n\n Read"" the raw data from disk:\n\n >>> np.fromfile(fname, dtype=dt)\n array([((10, 0), 98.25)],\n dtype=[('time', [('min', '>> np.save(fname, x)\n >>> np.load(fname + '.npy')\n array([((10, 0), 98.25)],\n dtype=[('time', [('min', '>> f.close()\n\n >>> regexp = r\"(\\d+)\\s+(...)\" # match [digits, whitespace, anything]\n >>> output = np.fromregex('test.dat', regexp,\n ... [('num', np.int64), ('key', 'S3')])\n >>> output\n array([(1312L, 'foo'), (1534L, 'bar'), (444L, 'qux')],\n dtype=[('num', '>> output['num']\n array([1312, 1534, 444], dtype=int64)\n \n "; static char __pyx_k_736[] = "fromstring (line 4459)"; static char __pyx_k_737[] = "fromstring(string, dtype=float, count=-1, sep='')\n\n A new 1-D array initialized from raw binary or text data in a string.\n\n Parameters\n ----------\n string : str\n A string containing the data.\n dtype : data-type, optional\n The data type of the array; default: float. For binary input data,\n the data must be in exactly this format.\n count : int, optional\n Read this number of `dtype` elements from the data. If this is\n negative (the default), the count will be determined from the\n length of the data.\n sep : str, optional\n If not provided or, equivalently, the empty string, the data will\n be interpreted as binary data; otherwise, as ASCII text with\n decimal numbers. Also in this latter case, this argument is\n interpreted as the string separating numbers in the data; extra\n whitespace between elements is also ignored.\n\n Returns\n -------\n arr : ndarray\n The constructed array.\n\n Raises\n ------\n ValueError\n If the string is not the correct size to satisfy the requested\n `dtype` and `count`.\n\n See Also\n --------\n frombuffer, fromfile, fromiter\n\n Examples\n --------\n >>> np.fromstring('\001\002', dtype=np.uint8)\n array([1, 2], dtype=uint8)\n >>> np.fromstring('1 2', dtype=int, sep=' ')\n array([1, 2])\n >>> np.fromstring('1, 2', dtype=int, sep=',')\n array([1, 2])\n >>> np.fromstring('\001\002\003\004\005', dtype=np.uint8, count=3)\n array([1, 2, 3], dtype=uint8)\n \n "; static char __pyx_k_738[] = "fv (line 4513)"; static char __pyx_k_739[] = "Compute the future value.\n\n Given:\n * a present value, `pv`\n * an interest `rate` compounded once per period, of which\n there are\n * `nper` total\n * a (fixed) payment, `pmt`, paid either\n * at the beginning (`when` = {'begin', 1}) or the end\n (`when` = {'end', 0}) of each period\n\n Return:\n the value at the end of the `nper` periods\n\n Parameters\n ----------\n rate : scalar or array_like of shape(M, )\n Rate of interest as decimal (not per cent) per period\n nper : scalar or array_like of shape(M, )\n Number of compounding periods\n pmt : scalar or array_like of shape(M, )\n Payment\n pv : scalar or array_like of shape(M, )\n Present value\n when : {{'begin', 1}, {'end', 0}}, {string, int}, optional\n When payments are due ('begin' (1) or 'end' (0)).\n Defaults to {'end', 0}.\n\n Returns\n -------\n out : ndarray\n Future values. If all input is scalar, returns a scalar float. If\n any input is array_like, returns future values for each input element.\n If multiple inputs are array_like, they all must have the same shape.\n\n Notes\n -----\n The future value is computed by solving the equation::\n\n fv +\n pv*(1+rate)**nper +\n pmt*(1 + rate*when)/rate*((1 + rate)**nper - 1) == 0\n\n or, when ``rate == 0``::\n\n fv + pv + pmt * nper == 0\n\n References\n ----------\n .. [WRW] Wheeler, D. A., E. Rathke, and R. Weir (Eds.) (2009, May).\n Open Document Format for Office Applications (OpenDocument)v1.2,\n Part 2: Recalculated Formula (OpenFormula) Format - Annotated Version,\n Pre-Draft 12. Organization for the Advancement of Structured Information\n Standards (OASIS). Billerica, MA, USA. [ODT Document].\n Available:\n http://www.oasis-open.org/committees/documents.php?wg_abbrev=office-formula\n OpenDocument-formula-20090508.odt\n\n Example""s\n --------\n What is the future value after 10 years of saving $100 now, with\n an additional monthly savings of $100. Assume the interest rate is\n 5% (annually) compounded monthly?\n\n >>> np.fv(0.05/12, 10*12, -100, -100)\n 15692.928894335748\n\n By convention, the negative sign represents cash flow out (i.e. money not\n available today). Thus, saving $100 a month at 5% annual interest leads\n to $15,692.93 available to spend in 10 years.\n\n If any input is array_like, returns an array of equal shape. Let's\n compare different interest rates from the example above.\n\n >>> a = np.array((0.05, 0.06, 0.07))/12\n >>> np.fv(a, 10*12, -100, -100)\n array([ 15692.92889434, 16569.87435405, 17509.44688102])\n \n "; static char __pyx_k_740[] = "genfromtxt (line 4596)"; static char __pyx_k_741[] = "Load data from a text file, with missing values handled as specified.\n\n Each line past the first `skip_header` lines is split at the `delimiter`\n character, and characters following the `comments` character are discarded.\n\n Parameters\n ----------\n fname : file or str\n File, filename, or generator to read. If the filename extension is\n `.gz` or `.bz2`, the file is first decompressed. Note that\n generators must return byte strings in Python 3k.\n dtype : dtype, optional\n Data type of the resulting array.\n If None, the dtypes will be determined by the contents of each\n column, individually.\n comments : str, optional\n The character used to indicate the start of a comment.\n All the characters occurring on a line after a comment are discarded\n delimiter : str, int, or sequence, optional\n The string used to separate values. By default, any consecutive\n whitespaces act as delimiter. An integer or sequence of integers\n can also be provided as width(s) of each field.\n skip_header : int, optional\n The numbers of lines to skip at the beginning of the file.\n skip_footer : int, optional\n The numbers of lines to skip at the end of the file\n converters : variable, optional\n The set of functions that convert the data of a column to a value.\n The converters can also be used to provide a default value\n for missing data: ``converters = {3: lambda s: float(s or 0)}``.\n missing_values : variable, optional\n The set of strings corresponding to missing data.\n filling_values : variable, optional\n The set of values to be used as default when the data are missing.\n usecols : sequence, optional\n Which columns to read, with 0 being the first. For example,\n ``usecols = (1, 4, 5)`` will extract the 2nd, 5th and 6th columns.\n names : {None, True, str, sequence}, optional\n "" If `names` is True, the field names are read from the first valid line\n after the first `skip_header` lines.\n If `names` is a sequence or a single-string of comma-separated names,\n the names will be used to define the field names in a structured dtype.\n If `names` is None, the names of the dtype fields will be used, if any.\n excludelist : sequence, optional\n A list of names to exclude. This list is appended to the default list\n ['return','file','print']. Excluded names are appended an underscore:\n for example, `file` would become `file_`.\n deletechars : str, optional\n A string combining invalid characters that must be deleted from the\n names.\n defaultfmt : str, optional\n A format used to define default field names, such as \"f%i\" or \"f_%02i\".\n autostrip : bool, optional\n Whether to automatically strip white spaces from the variables.\n replace_space : char, optional\n Character(s) used in replacement of white spaces in the variables names.\n By default, use a '_'.\n case_sensitive : {True, False, 'upper', 'lower'}, optional\n If True, field names are case sensitive.\n If False or 'upper', field names are converted to upper case.\n If 'lower', field names are converted to lower case.\n unpack : bool, optional\n If True, the returned array is transposed, so that arguments may be\n unpacked using ``x, y, z = loadtxt(...)``\n usemask : bool, optional\n If True, return a masked array.\n If False, return a regular array.\n invalid_raise : bool, optional\n If True, an exception is raised if an inconsistency is detected in the\n number of columns.\n If False, a warning is emitted and the offending lines are skipped.\n\n Returns\n -------\n out : ndarray\n Data read from the text file. If `usemask` is True, this is a\n masked array.\n\n See Als""o\n --------\n numpy.loadtxt : equivalent function when no data is missing.\n\n Notes\n -----\n * When spaces are used as delimiters, or when no delimiter has been given\n as input, there should not be any missing data between two fields.\n * When the variables are named (either by a flexible dtype or with `names`,\n there must not be any header in the file (else a ValueError\n exception is raised).\n * Individual values are not stripped of spaces by default.\n When using a custom converter, make sure the function does remove spaces.\n\n Examples\n ---------\n >>> from StringIO import StringIO\n >>> import numpy as np\n\n Comma delimited file with mixed dtype\n\n >>> s = StringIO(\"1,1.3,abcde\")\n >>> data = np.genfromtxt(s, dtype=[('myint','i8'),('myfloat','f8'),\n ... ('mystring','S5')], delimiter=\",\")\n >>> data\n array((1, 1.3, 'abcde'),\n dtype=[('myint', '>> s.seek(0) # needed for StringIO example only\n >>> data = np.genfromtxt(s, dtype=None,\n ... names = ['myint','myfloat','mystring'], delimiter=\",\")\n >>> data\n array((1, 1.3, 'abcde'),\n dtype=[('myint', '>> s.seek(0)\n >>> data = np.genfromtxt(s, dtype=\"i8,f8,S5\",\n ... names=['myint','myfloat','mystring'], delimiter=\",\")\n >>> data\n array((1, 1.3, 'abcde'),\n dtype=[('myint', '>> s = StringIO(\"11.3abcde\")\n >>> data = np.genfromtxt(s, dtype=None, names=['intvar','fltvar','strvar'],\n ... delimiter=[1,3,5])\n >>> data\n array((1, 1.3, 'abcde'),\n dtype=[('intvar', '>> np.geterr()\n {'over': 'warn', 'divide': 'warn', 'invalid': 'warn',\n 'under': 'ignore'}\n >>> np.arange(3.) / np.arange(3.)\n array([ NaN, 1., 1.])\n\n >>> oldsettings = np.seterr(all='warn', over='raise')\n >>> np.geterr()\n {'over': 'raise', 'divide': 'warn', 'invalid': 'warn', 'under': 'warn'}\n >>> np.arange(3.) / np.arange(3.)\n __main__:1: RuntimeWarning: invalid value encountered in divide\n array([ NaN, 1., 1.])\n \n "; static char __pyx_k_746[] = "geterrcall (line 4908)"; static char __pyx_k_747[] = "Return the current callback function used on floating-point errors.\n\n When the error handling for a floating-point error (one of \"divide\",\n \"over\", \"under\", or \"invalid\") is set to 'call' or 'log', the function\n that is called or the log instance that is written to is returned by\n `geterrcall`. This function or log instance has been set with\n `seterrcall`.\n\n Returns\n -------\n errobj : callable, log instance or None\n The current error handler. If no handler was set through `seterrcall`,\n ``None`` is returned.\n\n See Also\n --------\n seterrcall, seterr, geterr\n\n Notes\n -----\n For complete documentation of the types of floating-point exceptions and\n treatment options, see `seterr`.\n\n Examples\n --------\n >>> np.geterrcall() # we did not yet set a handler, returns None\n\n >>> oldsettings = np.seterr(all='call')\n >>> def err_handler(type, flag):\n ... print \"Floating point error (%s), with flag %s\" % (type, flag)\n >>> oldhandler = np.seterrcall(err_handler)\n >>> np.array([1, 2, 3]) / 0.0\n Floating point error (divide by zero), with flag 1\n array([ Inf, Inf, Inf])\n\n >>> cur_handler = np.geterrcall()\n >>> cur_handler is err_handler\n True\n \n "; static char __pyx_k_748[] = "geterrobj (line 4952)"; static char __pyx_k_749[] = "geterrobj()\n\n Return the current object that defines floating-point error handling.\n\n The error object contains all information that defines the error handling\n behavior in Numpy. `geterrobj` is used internally by the other\n functions that get and set error handling behavior (`geterr`, `seterr`,\n `geterrcall`, `seterrcall`).\n\n Returns\n -------\n errobj : list\n The error object, a list containing three elements:\n [internal numpy buffer size, error mask, error callback function].\n\n The error mask is a single integer that holds the treatment information\n on all four floating point errors. The information for each error type\n is contained in three bits of the integer. If we print it in base 8, we\n can see what treatment is set for \"invalid\", \"under\", \"over\", and\n \"divide\" (in that order). The printed string can be interpreted with\n\n * 0 : 'ignore'\n * 1 : 'warn'\n * 2 : 'raise'\n * 3 : 'call'\n * 4 : 'print'\n * 5 : 'log'\n\n See Also\n --------\n seterrobj, seterr, geterr, seterrcall, geterrcall\n getbufsize, setbufsize\n\n Notes\n -----\n For complete documentation of the types of floating-point exceptions and\n treatment options, see `seterr`.\n\n Examples\n --------\n >>> np.geterrobj() # first get the defaults\n [10000, 0, None]\n\n >>> def err_handler(type, flag):\n ... print \"Floating point error (%s), with flag %s\" % (type, flag)\n ...\n >>> old_bufsize = np.setbufsize(20000)\n >>> old_err = np.seterr(divide='raise')\n >>> old_handler = np.seterrcall(err_handler)\n >>> np.geterrobj()\n [20000, 2, ]\n\n >>> old_err = np.seterr(all='ignore')\n >>> np.base_repr(np.geterrobj()[1], 8)\n '0'\n >>> old_err = np.seterr(divide='warn', over='log', under='call',\n invalid='print')\n >>> np.b""ase_repr(np.geterrobj()[1], 8)\n '4351'\n \n "; static char __pyx_k_750[] = "gradient (line 5018)"; static char __pyx_k_751[] = "Return the gradient of an N-dimensional array.\n\n The gradient is computed using central differences in the interior\n and first differences at the boundaries. The returned gradient hence has\n the same shape as the input array.\n\n Parameters\n ----------\n f : array_like\n An N-dimensional array containing samples of a scalar function.\n `*varargs` : scalars\n 0, 1, or N scalars specifying the sample distances in each direction,\n that is: `dx`, `dy`, `dz`, ... The default distance is 1.\n\n\n Returns\n -------\n g : ndarray\n N arrays of the same shape as `f` giving the derivative of `f` with\n respect to each dimension.\n\n Examples\n --------\n >>> x = np.array([1, 2, 4, 7, 11, 16], dtype=np.float)\n >>> np.gradient(x)\n array([ 1. , 1.5, 2.5, 3.5, 4.5, 5. ])\n >>> np.gradient(x, 2)\n array([ 0.5 , 0.75, 1.25, 1.75, 2.25, 2.5 ])\n\n >>> np.gradient(np.array([[1, 2, 6], [3, 4, 5]], dtype=np.float))\n [array([[ 2., 2., -1.],\n [ 2., 2., -1.]]),\n array([[ 1. , 2.5, 4. ],\n [ 1. , 1. , 1. ]])]\n \n "; static char __pyx_k_752[] = "hamming (line 5058)"; static char __pyx_k_753[] = "Return the Hamming window.\n\n The Hamming window is a taper formed by using a weighted cosine.\n\n Parameters\n ----------\n M : int\n Number of points in the output window. If zero or less, an\n empty array is returned.\n\n Returns\n -------\n out : ndarray\n The window, normalized to one (the value one\n appears only if the number of samples is odd).\n\n See Also\n --------\n bartlett, blackman, hanning, kaiser\n\n Notes\n -----\n The Hamming window is defined as\n\n .. math:: w(n) = 0.54 + 0.46cos\\left(\014rac{2\\pi{n}}{M-1}\right)\n \\qquad 0 \\leq n \\leq M-1\n\n The Hamming was named for R. W. Hamming, an associate of J. W. Tukey and\n is described in Blackman and Tukey. It was recommended for smoothing the\n truncated autocovariance function in the time domain.\n Most references to the Hamming window come from the signal processing\n literature, where it is used as one of many windowing functions for\n smoothing values. It is also known as an apodization (which means\n \"removing the foot\", i.e. smoothing discontinuities at the beginning\n and end of the sampled signal) or tapering function.\n\n References\n ----------\n .. [1] Blackman, R.B. and Tukey, J.W., (1958) The measurement of power\n spectra, Dover Publications, New York.\n .. [2] E.R. Kanasewich, \"Time Sequence Analysis in Geophysics\", The\n University of Alberta Press, 1975, pp. 109-110.\n .. [3] Wikipedia, \"Window function\",\n http://en.wikipedia.org/wiki/Window_function\n .. [4] W.H. Press, B.P. Flannery, S.A. Teukolsky, and W.T. Vetterling,\n \"Numerical Recipes\", Cambridge University Press, 1986, page 425.\n\n Examples\n --------\n >>> np.hamming(12)\n array([ 0.08 , 0.15302337, 0.34890909, 0.60546483, 0.84123594,\n 0.98136677, 0.98136677, 0.84123594, 0.60546483, 0.34890909,\n "" 0.15302337, 0.08 ])\n\n Plot the window and the frequency response:\n\n >>> from numpy.fft import fft, fftshift\n >>> import matplotlib.pyplot as plt\n\n >>> window = np.hamming(51)\n >>> plt.plot(window)\n []\n >>> plt.title(\"Hamming window\")\n \n >>> plt.ylabel(\"Amplitude\")\n \n >>> plt.xlabel(\"Sample\")\n \n >>> plt.show()\n\n >>> plt.figure()\n \n >>> A = fft(window, 2048) / 25.5\n >>> mag = np.abs(fftshift(A))\n >>> freq = np.linspace(-0.5, 0.5, len(A))\n >>> response = 20 * np.log10(mag)\n >>> response = np.clip(response, -100, 100)\n >>> plt.plot(freq, response)\n []\n >>> plt.title(\"Frequency response of Hamming window\")\n \n >>> plt.ylabel(\"Magnitude [dB]\")\n \n >>> plt.xlabel(\"Normalized frequency [cycles per sample]\")\n \n >>> plt.axis('tight')\n (-0.5, 0.5, -100.0, ...)\n >>> plt.show()\n \n "; static char __pyx_k_754[] = "hanning (line 5152)"; static char __pyx_k_755[] = "Return the Hanning window.\n\n The Hanning window is a taper formed by using a weighted cosine.\n\n Parameters\n ----------\n M : int\n Number of points in the output window. If zero or less, an\n empty array is returned.\n\n Returns\n -------\n out : ndarray, shape(M,)\n The window, normalized to one (the value one\n appears only if `M` is odd).\n\n See Also\n --------\n bartlett, blackman, hamming, kaiser\n\n Notes\n -----\n The Hanning window is defined as\n\n .. math:: w(n) = 0.5 - 0.5cos\\left(\014rac{2\\pi{n}}{M-1}\right)\n \\qquad 0 \\leq n \\leq M-1\n\n The Hanning was named for Julius van Hann, an Austrian meterologist. It is\n also known as the Cosine Bell. Some authors prefer that it be called a\n Hann window, to help avoid confusion with the very similar Hamming window.\n\n Most references to the Hanning window come from the signal processing\n literature, where it is used as one of many windowing functions for\n smoothing values. It is also known as an apodization (which means\n \"removing the foot\", i.e. smoothing discontinuities at the beginning\n and end of the sampled signal) or tapering function.\n\n References\n ----------\n .. [1] Blackman, R.B. and Tukey, J.W., (1958) The measurement of power\n spectra, Dover Publications, New York.\n .. [2] E.R. Kanasewich, \"Time Sequence Analysis in Geophysics\",\n The University of Alberta Press, 1975, pp. 106-108.\n .. [3] Wikipedia, \"Window function\",\n http://en.wikipedia.org/wiki/Window_function\n .. [4] W.H. Press, B.P. Flannery, S.A. Teukolsky, and W.T. Vetterling,\n \"Numerical Recipes\", Cambridge University Press, 1986, page 425.\n\n Examples\n --------\n >>> from numpy import hanning\n >>> hanning(12)\n array([ 0. , 0.07937323, 0.29229249, 0.57115742, 0.82743037,\n 0.97974649, 0.97974649, 0.""82743037, 0.57115742, 0.29229249,\n 0.07937323, 0. ])\n\n Plot the window and its frequency response:\n\n >>> from numpy.fft import fft, fftshift\n >>> import matplotlib.pyplot as plt\n\n >>> window = np.hanning(51)\n >>> plt.plot(window)\n []\n >>> plt.title(\"Hann window\")\n \n >>> plt.ylabel(\"Amplitude\")\n \n >>> plt.xlabel(\"Sample\")\n \n >>> plt.show()\n\n >>> plt.figure()\n \n >>> A = fft(window, 2048) / 25.5\n >>> mag = abs(fftshift(A))\n >>> freq = np.linspace(-0.5,0.5,len(A))\n >>> response = 20*np.log10(mag)\n >>> response = np.clip(response,-100,100)\n >>> plt.plot(freq, response)\n []\n >>> plt.title(\"Frequency response of the Hann window\")\n \n >>> plt.ylabel(\"Magnitude [dB]\")\n \n >>> plt.xlabel(\"Normalized frequency [cycles per sample]\")\n \n >>> plt.axis('tight')\n (-0.5, 0.5, -100.0, ...)\n >>> plt.show()\n \n "; static char __pyx_k_756[] = "histogram (line 5248)"; static char __pyx_k_757[] = "Compute the histogram of a set of data.\n\n Parameters\n ----------\n a : array_like\n Input data. The histogram is computed over the flattened array.\n bins : int or sequence of scalars, optional\n If `bins` is an int, it defines the number of equal-width\n bins in the given range (10, by default). If `bins` is a sequence,\n it defines the bin edges, including the rightmost edge, allowing\n for non-uniform bin widths.\n range : (float, float), optional\n The lower and upper range of the bins. If not provided, range\n is simply ``(a.min(), a.max())``. Values outside the range are\n ignored.\n normed : bool, optional\n This keyword is deprecated in Numpy 1.6 due to confusing/buggy\n behavior. It will be removed in Numpy 2.0. Use the density keyword\n instead.\n If False, the result will contain the number of samples\n in each bin. If True, the result is the value of the\n probability *density* function at the bin, normalized such that\n the *integral* over the range is 1. Note that this latter behavior is\n known to be buggy with unequal bin widths; use `density` instead.\n weights : array_like, optional\n An array of weights, of the same shape as `a`. Each value in `a`\n only contributes its associated weight towards the bin count\n (instead of 1). If `normed` is True, the weights are normalized,\n so that the integral of the density over the range remains 1\n density : bool, optional\n If False, the result will contain the number of samples\n in each bin. If True, the result is the value of the\n probability *density* function at the bin, normalized such that\n the *integral* over the range is 1. Note that the sum of the\n histogram values will not be equal to 1 unless bins of unity\n width are chosen; it is not a probability *mass* function.\n Overr""ides the `normed` keyword if given.\n\n Returns\n -------\n hist : array\n The values of the histogram. See `normed` and `weights` for a\n description of the possible semantics.\n bin_edges : array of dtype float\n Return the bin edges ``(length(hist)+1)``.\n\n\n See Also\n --------\n histogramdd, bincount, searchsorted, digitize\n\n Notes\n -----\n All but the last (righthand-most) bin is half-open. In other words, if\n `bins` is::\n\n [1, 2, 3, 4]\n\n then the first bin is ``[1, 2)`` (including 1, but excluding 2) and the\n second ``[2, 3)``. The last bin, however, is ``[3, 4]``, which *includes*\n 4.\n\n Examples\n --------\n >>> np.histogram([1, 2, 1], bins=[0, 1, 2, 3])\n (array([0, 2, 1]), array([0, 1, 2, 3]))\n >>> np.histogram(np.arange(4), bins=np.arange(5), density=True)\n (array([ 0.25, 0.25, 0.25, 0.25]), array([0, 1, 2, 3, 4]))\n >>> np.histogram([[1, 2, 1], [1, 0, 1]], bins=[0,1,2,3])\n (array([1, 4, 1]), array([0, 1, 2, 3]))\n\n >>> a = np.arange(5)\n >>> hist, bin_edges = np.histogram(a, density=True)\n >>> hist\n array([ 0.5, 0. , 0.5, 0. , 0. , 0.5, 0. , 0.5, 0. , 0.5])\n >>> hist.sum()\n 2.4999999999999996\n >>> np.sum(hist*np.diff(bin_edges))\n 1.0\n \n "; static char __pyx_k_758[] = "histogram2d (line 5333)"; static char __pyx_k_759[] = "Compute the bi-dimensional histogram of two data samples.\n\n Parameters\n ----------\n x : array_like, shape(N,)\n A sequence of values to be histogrammed along the first dimension.\n y : array_like, shape(M,)\n A sequence of values to be histogrammed along the second dimension.\n bins : int or [int, int] or array_like or [array, array], optional\n The bin specification:\n\n * If int, the number of bins for the two dimensions (nx=ny=bins).\n * If [int, int], the number of bins in each dimension (nx, ny = bins).\n * If array_like, the bin edges for the two dimensions (x_edges=y_edges=bins).\n * If [array, array], the bin edges in each dimension (x_edges, y_edges = bins).\n\n range : array_like, shape(2,2), optional\n The leftmost and rightmost edges of the bins along each dimension\n (if not specified explicitly in the `bins` parameters):\n ``[[xmin, xmax], [ymin, ymax]]``. All values outside of this range\n will be considered outliers and not tallied in the histogram.\n normed : bool, optional\n If False, returns the number of samples in each bin. If True, returns\n the bin density, i.e. the bin count divided by the bin area.\n weights : array_like, shape(N,), optional\n An array of values ``w_i`` weighing each sample ``(x_i, y_i)``. Weights\n are normalized to 1 if `normed` is True. If `normed` is False, the\n values of the returned histogram are equal to the sum of the weights\n belonging to the samples falling into each bin.\n\n Returns\n -------\n H : ndarray, shape(nx, ny)\n The bi-dimensional histogram of samples `x` and `y`. Values in `x`\n are histogrammed along the first dimension and values in `y` are\n histogrammed along the second dimension.\n xedges : ndarray, shape(nx,)\n The bin edges along the first dimension.\n yedges : ndarray, shape(ny,)\n The bin e""dges along the second dimension.\n\n See Also\n --------\n histogram: 1D histogram\n histogramdd: Multidimensional histogram\n\n Notes\n -----\n When `normed` is True, then the returned histogram is the sample density,\n defined such that:\n\n .. math::\n \\sum_{i=0}^{nx-1} \\sum_{j=0}^{ny-1} H_{i,j} \\Delta x_i \\Delta y_j = 1\n\n where `H` is the histogram array and :math:`\\Delta x_i \\Delta y_i`\n the area of bin `{i,j}`.\n\n Please note that the histogram does not follow the Cartesian convention\n where `x` values are on the abcissa and `y` values on the ordinate axis.\n Rather, `x` is histogrammed along the first dimension of the array\n (vertical), and `y` along the second dimension of the array (horizontal).\n This ensures compatibility with `histogramdd`.\n\n Examples\n --------\n >>> x, y = np.random.randn(2, 100)\n >>> H, xedges, yedges = np.histogram2d(x, y, bins=(5, 8))\n >>> H.shape, xedges.shape, yedges.shape\n ((5, 8), (6,), (9,))\n\n We can now use the Matplotlib to visualize this 2-dimensional histogram:\n\n >>> extent = [yedges[0], yedges[-1], xedges[-1], xedges[0]]\n >>> import matplotlib.pyplot as plt\n >>> plt.imshow(H, extent=extent, interpolation='nearest')\n \n >>> plt.colorbar()\n \n >>> plt.show()\n \n "; static char __pyx_k_760[] = "histogramdd (line 5418)"; static char __pyx_k_761[] = "Compute the multidimensional histogram of some data.\n\n Parameters\n ----------\n sample : array_like\n The data to be histogrammed. It must be an (N,D) array or data\n that can be converted to such. The rows of the resulting array\n are the coordinates of points in a D dimensional polytope.\n bins : sequence or int, optional\n The bin specification:\n\n * A sequence of arrays describing the bin edges along each dimension.\n * The number of bins for each dimension (nx, ny, ... =bins)\n * The number of bins for all dimensions (nx=ny=...=bins).\n\n range : sequence, optional\n A sequence of lower and upper bin edges to be used if the edges are\n not given explicitely in `bins`. Defaults to the minimum and maximum\n values along each dimension.\n normed : bool, optional\n If False, returns the number of samples in each bin. If True, returns\n the bin density, ie, the bin count divided by the bin hypervolume.\n weights : array_like (N,), optional\n An array of values `w_i` weighing each sample `(x_i, y_i, z_i, ...)`.\n Weights are normalized to 1 if normed is True. If normed is False, the\n values of the returned histogram are equal to the sum of the weights\n belonging to the samples falling into each bin.\n\n Returns\n -------\n H : ndarray\n The multidimensional histogram of sample x. See normed and weights for\n the different possible semantics.\n edges : list\n A list of D arrays describing the bin edges for each dimension.\n\n See Also\n --------\n histogram: 1-D histogram\n histogram2d: 2-D histogram\n\n Examples\n --------\n >>> r = np.random.randn(100,3)\n >>> H, edges = np.histogramdd(r, bins = (5, 8, 4))\n >>> H.shape, edges[0].size, edges[1].size, edges[2].size\n ((5, 8, 4), 6, 9, 5)\n \n "; static char __pyx_k_762[] = "hsplit (line 5471)"; static char __pyx_k_763[] = "Split an array into multiple sub-arrays horizontally (column-wise).\n\n Please refer to the `split` documentation. `hsplit` is equivalent\n to `split` with ``axis=1``, the array is always split along the second\n axis regardless of the array dimension.\n\n See Also\n --------\n split : Split an array into multiple sub-arrays of equal size.\n\n Examples\n --------\n >>> x = np.arange(16.0).reshape(4, 4)\n >>> x\n array([[ 0., 1., 2., 3.],\n [ 4., 5., 6., 7.],\n [ 8., 9., 10., 11.],\n [ 12., 13., 14., 15.]])\n >>> np.hsplit(x, 2)\n [array([[ 0., 1.],\n [ 4., 5.],\n [ 8., 9.],\n [ 12., 13.]]),\n array([[ 2., 3.],\n [ 6., 7.],\n [ 10., 11.],\n [ 14., 15.]])]\n >>> np.hsplit(x, np.array([3, 6]))\n [array([[ 0., 1., 2.],\n [ 4., 5., 6.],\n [ 8., 9., 10.],\n [ 12., 13., 14.]]),\n array([[ 3.],\n [ 7.],\n [ 11.],\n [ 15.]]),\n array([], dtype=float64)]\n\n With a higher dimensional array the split is still along the second axis.\n\n >>> x = np.arange(8.0).reshape(2, 2, 2)\n >>> x\n array([[[ 0., 1.],\n [ 2., 3.]],\n [[ 4., 5.],\n [ 6., 7.]]])\n >>> np.hsplit(x, 2)\n [array([[[ 0., 1.]],\n [[ 4., 5.]]]),\n array([[[ 2., 3.]],\n [[ 6., 7.]]])]\n \n "; static char __pyx_k_764[] = "hstack (line 5528)"; static char __pyx_k_765[] = "Stack arrays in sequence horizontally (column wise).\n\n Take a sequence of arrays and stack them horizontally to make\n a single array. Rebuild arrays divided by `hsplit`.\n\n Parameters\n ----------\n tup : sequence of ndarrays\n All arrays must have the same shape along all but the second axis.\n\n Returns\n -------\n stacked : ndarray\n The array formed by stacking the given arrays.\n\n See Also\n --------\n vstack : Stack arrays in sequence vertically (row wise).\n dstack : Stack arrays in sequence depth wise (along third axis).\n concatenate : Join a sequence of arrays together.\n hsplit : Split array along second axis.\n\n Notes\n -----\n Equivalent to ``np.concatenate(tup, axis=1)``\n\n Examples\n --------\n >>> a = np.array((1,2,3))\n >>> b = np.array((2,3,4))\n >>> np.hstack((a,b))\n array([1, 2, 3, 2, 3, 4])\n >>> a = np.array([[1],[2],[3]])\n >>> b = np.array([[2],[3],[4]])\n >>> np.hstack((a,b))\n array([[1, 2],\n [2, 3],\n [3, 4]])\n \n "; static char __pyx_k_766[] = "i0 (line 5572)"; static char __pyx_k_767[] = "Modified Bessel function of the first kind, order 0.\n\n Usually denoted :math:`I_0`. This function does broadcast, but will *not*\n \"up-cast\" int dtype arguments unless accompanied by at least one float or\n complex dtype argument (see Raises below).\n\n Parameters\n ----------\n x : array_like, dtype float or complex\n Argument of the Bessel function.\n\n Returns\n -------\n out : ndarray, shape = x.shape, dtype = x.dtype\n The modified Bessel function evaluated at each of the elements of `x`.\n\n Raises\n ------\n TypeError: array cannot be safely cast to required type\n If argument consists exclusively of int dtypes.\n\n See Also\n --------\n scipy.special.iv, scipy.special.ive\n\n Notes\n -----\n We use the algorithm published by Clenshaw [1]_ and referenced by\n Abramowitz and Stegun [2]_, for which the function domain is partitioned\n into the two intervals [0,8] and (8,inf), and Chebyshev polynomial\n expansions are employed in each interval. Relative error on the domain\n [0,30] using IEEE arithmetic is documented [3]_ as having a peak of 5.8e-16\n with an rms of 1.4e-16 (n = 30000).\n\n References\n ----------\n .. [1] C. W. Clenshaw, \"Chebyshev series for mathematical functions,\" in\n *National Physical Laboratory Mathematical Tables*, vol. 5, London:\n Her Majesty's Stationery Office, 1962.\n .. [2] M. Abramowitz and I. A. Stegun, *Handbook of Mathematical\n Functions*, 10th printing, New York: Dover, 1964, pp. 379.\n http://www.math.sfu.ca/~cbm/aands/page_379.htm\n .. [3] http://kobesearch.cpan.org/htdocs/Math-Cephes/Math/Cephes.html\n\n Examples\n --------\n >>> np.i0([0.])\n array(1.0)\n >>> np.i0([0., 1. + 2j])\n array([ 1.00000000+0.j , 0.18785373+0.64616944j])\n \n "; static char __pyx_k_768[] = "imag (line 5628)"; static char __pyx_k_769[] = "Return the imaginary part of the elements of the array.\n\n Parameters\n ----------\n val : array_like\n Input array.\n\n Returns\n -------\n out : ndarray\n Output array. If `val` is real, the type of `val` is used for the\n output. If `val` has complex elements, the returned type is float.\n\n See Also\n --------\n real, angle, real_if_close\n\n Examples\n --------\n >>> a = np.array([1+2j, 3+4j, 5+6j])\n >>> a.imag\n array([ 2., 4., 6.])\n >>> a.imag = np.array([8, 10, 12])\n >>> a\n array([ 1. +8.j, 3.+10.j, 5.+12.j])\n \n "; static char __pyx_k_770[] = "in1d (line 5659)"; static char __pyx_k_771[] = "Test whether each element of a 1D array is also present in a second array.\n\n Returns a boolean array the same length as `ar1` that is True\n where an element of `ar1` is in `ar2` and False otherwise.\n\n Parameters\n ----------\n ar1 : array_like, shape (M,)\n Input array.\n ar2 : array_like\n The values against which to test each value of `ar1`.\n assume_unique : bool, optional\n If True, the input arrays are both assumed to be unique, which\n can speed up the calculation. Default is False.\n\n Returns\n -------\n mask : ndarray of bools, shape(M,)\n The values `ar1[mask]` are in `ar2`.\n\n See Also\n --------\n numpy.lib.arraysetops : Module with a number of other functions for\n performing set operations on arrays.\n\n Notes\n -----\n `in1d` can be considered as an element-wise function version of the\n python keyword `in`, for 1D sequences. ``in1d(a, b)`` is roughly\n equivalent to ``np.array([item in b for item in a])``.\n\n .. versionadded:: 1.4.0\n\n Examples\n --------\n >>> test = np.array([0, 1, 2, 5, 0])\n >>> states = [0, 2]\n >>> mask = np.in1d(test, states)\n >>> mask\n array([ True, False, True, False, True], dtype=bool)\n >>> test[mask]\n array([0, 2, 0])\n \n "; static char __pyx_k_772[] = "indices (line 5707)"; static char __pyx_k_773[] = "Return an array representing the indices of a grid.\n\n Compute an array where the subarrays contain index values 0,1,...\n varying only along the corresponding axis.\n\n Parameters\n ----------\n dimensions : sequence of ints\n The shape of the grid.\n dtype : dtype, optional\n Data type of the result.\n\n Returns\n -------\n grid : ndarray\n The array of grid indices,\n ``grid.shape = (len(dimensions),) + tuple(dimensions)``.\n\n See Also\n --------\n mgrid, meshgrid\n\n Notes\n -----\n The output shape is obtained by prepending the number of dimensions\n in front of the tuple of dimensions, i.e. if `dimensions` is a tuple\n ``(r0, ..., rN-1)`` of length ``N``, the output shape is\n ``(N,r0,...,rN-1)``.\n\n The subarrays ``grid[k]`` contains the N-D array of indices along the\n ``k-th`` axis. Explicitly::\n\n grid[k,i0,i1,...,iN-1] = ik\n\n Examples\n --------\n >>> grid = np.indices((2, 3))\n >>> grid.shape\n (2, 2, 3)\n >>> grid[0] # row indices\n array([[0, 0, 0],\n [1, 1, 1]])\n >>> grid[1] # column indices\n array([[0, 1, 2],\n [0, 1, 2]])\n\n The indices can be used as an index into an array.\n\n >>> x = np.arange(20).reshape(5, 4)\n >>> row, col = np.indices((2, 3))\n >>> x[row, col]\n array([[0, 1, 2],\n [4, 5, 6]])\n\n Note that it would be more straightforward in the above example to\n extract the required elements directly with ``x[:2, :3]``.\n \n "; static char __pyx_k_774[] = "info (line 5769)"; static char __pyx_k_775[] = "Get help information for a function, class, or module.\n\n Parameters\n ----------\n object : object or str, optional\n Input object or name to get information about. If `object` is a\n numpy object, its docstring is given. If it is a string, available\n modules are searched for matching objects.\n If None, information about `info` itself is returned.\n maxwidth : int, optional\n Printing width.\n output : file like object, optional\n File like object that the output is written to, default is ``stdout``.\n The object has to be opened in 'w' or 'a' mode.\n toplevel : str, optional\n Start search at this level.\n\n See Also\n --------\n source, lookfor\n\n Notes\n -----\n When used interactively with an object, ``np.info(obj)`` is equivalent to\n ``help(obj)`` on the Python prompt or ``obj?`` on the IPython prompt.\n\n Examples\n --------\n >>> np.info(np.polyval) # doctest: +SKIP\n polyval(p, x)\n Evaluate the polynomial p at x.\n ...\n\n When using a string for `object` it is possible to get multiple results.\n\n >>> np.info('fft') # doctest: +SKIP\n *** Found in numpy ***\n Core FFT routines\n ...\n *** Found in numpy.fft ***\n fft(a, n=None, axis=-1)\n ...\n *** Repeat reference found in numpy.fft.fftpack ***\n *** Total of 3 references found. ***\n \n "; static char __pyx_k_776[] = "inner (line 5819)"; static char __pyx_k_777[] = "inner(a, b)\n\n Inner product of two arrays.\n\n Ordinary inner product of vectors for 1-D arrays (without complex\n conjugation), in higher dimensions a sum product over the last axes.\n\n Parameters\n ----------\n a, b : array_like\n If `a` and `b` are nonscalar, their last dimensions of must match.\n\n Returns\n -------\n out : ndarray\n `out.shape = a.shape[:-1] + b.shape[:-1]`\n\n Raises\n ------\n ValueError\n If the last dimension of `a` and `b` has different size.\n\n See Also\n --------\n tensordot : Sum products over arbitrary axes.\n dot : Generalised matrix product, using second last dimension of `b`.\n einsum : Einstein summation convention.\n\n Notes\n -----\n For vectors (1-D arrays) it computes the ordinary inner-product::\n\n np.inner(a, b) = sum(a[:]*b[:])\n\n More generally, if `ndim(a) = r > 0` and `ndim(b) = s > 0`::\n\n np.inner(a, b) = np.tensordot(a, b, axes=(-1,-1))\n\n or explicitly::\n\n np.inner(a, b)[i0,...,ir-1,j0,...,js-1]\n = sum(a[i0,...,ir-1,:]*b[j0,...,js-1,:])\n\n In addition `a` or `b` may be scalars, in which case::\n\n np.inner(a,b) = a*b\n\n Examples\n --------\n Ordinary inner product for vectors:\n\n >>> a = np.array([1,2,3])\n >>> b = np.array([0,1,0])\n >>> np.inner(a, b)\n 2\n\n A multidimensional example:\n\n >>> a = np.arange(24).reshape((2,3,4))\n >>> b = np.arange(4)\n >>> np.inner(a, b)\n array([[ 14, 38, 62],\n [ 86, 110, 134]])\n\n An example where `b` is a scalar:\n\n >>> np.inner(np.eye(2), 7)\n array([[ 7., 0.],\n [ 0., 7.]])\n \n "; static char __pyx_k_778[] = "insert (line 5895)"; static char __pyx_k_779[] = "Insert values along the given axis before the given indices.\n\n Parameters\n ----------\n arr : array_like\n Input array.\n obj : int, slice or sequence of ints\n Object that defines the index or indices before which `values` is\n inserted.\n values : array_like\n Values to insert into `arr`. If the type of `values` is different\n from that of `arr`, `values` is converted to the type of `arr`.\n axis : int, optional\n Axis along which to insert `values`. If `axis` is None then `arr`\n is flattened first.\n\n Returns\n -------\n out : ndarray\n A copy of `arr` with `values` inserted. Note that `insert`\n does not occur in-place: a new array is returned. If\n `axis` is None, `out` is a flattened array.\n\n See Also\n --------\n append : Append elements at the end of an array.\n delete : Delete elements from an array.\n\n Examples\n --------\n >>> a = np.array([[1, 1], [2, 2], [3, 3]])\n >>> a\n array([[1, 1],\n [2, 2],\n [3, 3]])\n >>> np.insert(a, 1, 5)\n array([1, 5, 1, 2, 2, 3, 3])\n >>> np.insert(a, 1, 5, axis=1)\n array([[1, 5, 1],\n [2, 5, 2],\n [3, 5, 3]])\n\n >>> b = a.flatten()\n >>> b\n array([1, 1, 2, 2, 3, 3])\n >>> np.insert(b, [2, 2], [5, 6])\n array([1, 1, 5, 6, 2, 2, 3, 3])\n\n >>> np.insert(b, slice(2, 4), [5, 6])\n array([1, 1, 5, 2, 6, 2, 3, 3])\n\n >>> np.insert(b, [2, 2], [7.13, False]) # type casting\n array([1, 1, 7, 0, 2, 2, 3, 3])\n\n >>> x = np.arange(8).reshape(2, 4)\n >>> idx = (1, 3)\n >>> np.insert(x, idx, 999, axis=1)\n array([[ 0, 999, 1, 2, 999, 3],\n [ 4, 999, 5, 6, 999, 7]])\n \n "; static char __pyx_k_780[] = "interp (line 5968)"; static char __pyx_k_781[] = "One-dimensional linear interpolation.\n\n Returns the one-dimensional piecewise linear interpolant to a function\n with given values at discrete data-points.\n\n Parameters\n ----------\n x : array_like\n The x-coordinates of the interpolated values.\n\n xp : 1-D sequence of floats\n The x-coordinates of the data points, must be increasing.\n\n fp : 1-D sequence of floats\n The y-coordinates of the data points, same length as `xp`.\n\n left : float, optional\n Value to return for `x < xp[0]`, default is `fp[0]`.\n\n right : float, optional\n Value to return for `x > xp[-1]`, defaults is `fp[-1]`.\n\n Returns\n -------\n y : {float, ndarray}\n The interpolated values, same shape as `x`.\n\n Raises\n ------\n ValueError\n If `xp` and `fp` have different length\n\n Notes\n -----\n Does not check that the x-coordinate sequence `xp` is increasing.\n If `xp` is not increasing, the results are nonsense.\n A simple check for increasingness is::\n\n np.all(np.diff(xp) > 0)\n\n\n Examples\n --------\n >>> xp = [1, 2, 3]\n >>> fp = [3, 2, 0]\n >>> np.interp(2.5, xp, fp)\n 1.0\n >>> np.interp([0, 1, 1.5, 2.72, 3.14], xp, fp)\n array([ 3. , 3. , 2.5 , 0.56, 0. ])\n >>> UNDEF = -99.0\n >>> np.interp(3.14, xp, fp, right=UNDEF)\n -99.0\n\n Plot an interpolant to the sine function:\n\n >>> x = np.linspace(0, 2*np.pi, 10)\n >>> y = np.sin(x)\n >>> xvals = np.linspace(0, 2*np.pi, 50)\n >>> yinterp = np.interp(xvals, x, y)\n >>> import matplotlib.pyplot as plt\n >>> plt.plot(x, y, 'o')\n []\n >>> plt.plot(xvals, yinterp, '-x')\n []\n >>> plt.show()\n \n "; static char __pyx_k_782[] = "intersect1d (line 6039)"; static char __pyx_k_783[] = "Find the intersection of two arrays.\n\n Return the sorted, unique values that are in both of the input arrays.\n\n Parameters\n ----------\n ar1, ar2 : array_like\n Input arrays.\n assume_unique : bool\n If True, the input arrays are both assumed to be unique, which\n can speed up the calculation. Default is False.\n\n Returns\n -------\n out : ndarray\n Sorted 1D array of common and unique elements.\n\n See Also\n --------\n numpy.lib.arraysetops : Module with a number of other functions for\n performing set operations on arrays.\n\n Examples\n --------\n >>> np.intersect1d([1, 3, 4, 3], [3, 1, 2, 1])\n array([1, 3])\n \n "; static char __pyx_k_784[] = "irr (line 6113)"; static char __pyx_k_785[] = "Return the Internal Rate of Return (IRR).\n\n This is the \"average\" periodically compounded rate of return\n that gives a net present value of 0.0; for a more complete explanation,\n see Notes below.\n\n Parameters\n ----------\n values : array_like, shape(N,)\n Input cash flows per time period. By convention, net \"deposits\"\n are negative and net \"withdrawals\" are positive. Thus, for example,\n at least the first element of `values`, which represents the initial\n investment, will typically be negative.\n\n Returns\n -------\n out : float\n Internal Rate of Return for periodic input values.\n\n Notes\n -----\n The IRR is perhaps best understood through an example (illustrated\n using np.irr in the Examples section below). Suppose one invests\n 100 units and then makes the following withdrawals at regular\n (fixed) intervals: 39, 59, 55, 20. Assuming the ending value is 0,\n one's 100 unit investment yields 173 units; however, due to the\n combination of compounding and the periodic withdrawals, the\n \"average\" rate of return is neither simply 0.73/4 nor (1.73)^0.25-1.\n Rather, it is the solution (for :math:`r`) of the equation:\n\n .. math:: -100 + \014rac{39}{1+r} + \014rac{59}{(1+r)^2}\n + \014rac{55}{(1+r)^3} + \014rac{20}{(1+r)^4} = 0\n\n In general, for `values` :math:`= [v_0, v_1, ... v_M]`,\n irr is the solution of the equation: [G]_\n\n .. math:: \\sum_{t=0}^M{\014rac{v_t}{(1+irr)^{t}}} = 0\n\n References\n ----------\n .. [G] L. J. Gitman, \"Principles of Managerial Finance, Brief,\" 3rd ed.,\n Addison-Wesley, 2003, pg. 348.\n\n Examples\n --------\n >>> np.irr([-100, 39, 59, 55, 20])\n 0.2809484211599611\n\n (Compare with the Example given for numpy.lib.financial.npv)\n \n "; static char __pyx_k_786[] = "iscomplex (line 6168)"; static char __pyx_k_787[] = "Returns a bool array, where True if input element is complex.\n\n What is tested is whether the input has a non-zero imaginary part, not if\n the input type is complex.\n\n Parameters\n ----------\n x : array_like\n Input array.\n\n Returns\n -------\n out : ndarray of bools\n Output array.\n\n See Also\n --------\n isreal\n iscomplexobj : Return True if x is a complex type or an array of complex\n numbers.\n\n Examples\n --------\n >>> np.iscomplex([1+1j, 1+0j, 4.5, 3, 2, 2j])\n array([ True, False, False, False, False, True], dtype=bool)\n \n "; static char __pyx_k_788[] = "iscomplexobj (line 6199)"; static char __pyx_k_789[] = "Return True if x is a complex type or an array of complex numbers.\n\n The type of the input is checked, not the value. So even if the input\n has an imaginary part equal to zero, `iscomplexobj` evaluates to True\n if the data type is complex.\n\n Parameters\n ----------\n x : any\n The input can be of any type and shape.\n\n Returns\n -------\n y : bool\n The return value, True if `x` is of a complex type.\n\n See Also\n --------\n isrealobj, iscomplex\n\n Examples\n --------\n >>> np.iscomplexobj(1)\n False\n >>> np.iscomplexobj(1+0j)\n True\n >>> np.iscomplexobj([3, 1+0j, True])\n True\n \n "; static char __pyx_k_790[] = "isfortran (line 6233)"; static char __pyx_k_791[] = "Returns True if array is arranged in Fortran-order in memory\n and dimension > 1.\n\n Parameters\n ----------\n a : ndarray\n Input array.\n\n\n Examples\n --------\n\n np.array allows to specify whether the array is written in C-contiguous\n order (last index varies the fastest), or FORTRAN-contiguous order in\n memory (first index varies the fastest).\n\n >>> a = np.array([[1, 2, 3], [4, 5, 6]], order='C')\n >>> a\n array([[1, 2, 3],\n [4, 5, 6]])\n >>> np.isfortran(a)\n False\n\n >>> b = np.array([[1, 2, 3], [4, 5, 6]], order='FORTRAN')\n >>> b\n array([[1, 2, 3],\n [4, 5, 6]])\n >>> np.isfortran(b)\n True\n\n\n The transpose of a C-ordered array is a FORTRAN-ordered array.\n\n >>> a = np.array([[1, 2, 3], [4, 5, 6]], order='C')\n >>> a\n array([[1, 2, 3],\n [4, 5, 6]])\n >>> np.isfortran(a)\n False\n >>> b = a.T\n >>> b\n array([[1, 4],\n [2, 5],\n [3, 6]])\n >>> np.isfortran(b)\n True\n\n 1-D arrays always evaluate as False.\n\n >>> np.isfortran(np.array([1, 2], order='FORTRAN'))\n False\n \n "; static char __pyx_k_792[] = "isneginf (line 6290)"; static char __pyx_k_793[] = "Test element-wise for negative infinity, return result as bool array.\n\n Parameters\n ----------\n x : array_like\n The input array.\n y : array_like, optional\n A boolean array with the same shape and type as `x` to store the\n result.\n\n Returns\n -------\n y : ndarray\n A boolean array with the same dimensions as the input.\n If second argument is not supplied then a numpy boolean array is\n returned with values True where the corresponding element of the\n input is negative infinity and values False where the element of\n the input is not negative infinity.\n\n If a second argument is supplied the result is stored there. If the\n type of that array is a numeric type the result is represented as\n zeros and ones, if the type is boolean then as False and True. The\n return value `y` is then a reference to that array.\n\n See Also\n --------\n isinf, isposinf, isnan, isfinite\n\n Notes\n -----\n Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic\n (IEEE 754).\n\n Errors result if the second argument is also supplied when x is a scalar\n input, or if first and second arguments have different shapes.\n\n Examples\n --------\n >>> np.isneginf(np.NINF)\n array(True, dtype=bool)\n >>> np.isneginf(np.inf)\n array(False, dtype=bool)\n >>> np.isneginf(np.PINF)\n array(False, dtype=bool)\n >>> np.isneginf([-np.inf, 0., np.inf])\n array([ True, False, False], dtype=bool)\n\n >>> x = np.array([-np.inf, 0., np.inf])\n >>> y = np.array([2, 2, 2])\n >>> np.isneginf(x, y)\n array([1, 0, 0])\n >>> y\n array([1, 0, 0])\n \n "; static char __pyx_k_794[] = "isposinf (line 6349)"; static char __pyx_k_795[] = "Test element-wise for positive infinity, return result as bool array.\n\n Parameters\n ----------\n x : array_like\n The input array.\n y : array_like, optional\n A boolean array with the same shape as `x` to store the result.\n\n Returns\n -------\n y : ndarray\n A boolean array with the same dimensions as the input.\n If second argument is not supplied then a boolean array is returned\n with values True where the corresponding element of the input is\n positive infinity and values False where the element of the input is\n not positive infinity.\n\n If a second argument is supplied the result is stored there. If the\n type of that array is a numeric type the result is represented as zeros\n and ones, if the type is boolean then as False and True.\n The return value `y` is then a reference to that array.\n\n See Also\n --------\n isinf, isneginf, isfinite, isnan\n\n Notes\n -----\n Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic\n (IEEE 754).\n\n Errors result if the second argument is also supplied when `x` is a\n scalar input, or if first and second arguments have different shapes.\n\n Examples\n --------\n >>> np.isposinf(np.PINF)\n array(True, dtype=bool)\n >>> np.isposinf(np.inf)\n array(True, dtype=bool)\n >>> np.isposinf(np.NINF)\n array(False, dtype=bool)\n >>> np.isposinf([-np.inf, 0., np.inf])\n array([False, False, True], dtype=bool)\n\n >>> x = np.array([-np.inf, 0., np.inf])\n >>> y = np.array([2, 2, 2])\n >>> np.isposinf(x, y)\n array([0, 0, 1])\n >>> y\n array([0, 0, 1])\n \n "; static char __pyx_k_796[] = "isreal (line 6407)"; static char __pyx_k_797[] = "Returns a bool array, where True if input element is real.\n\n If element has complex type with zero complex part, the return value\n for that element is True.\n\n Parameters\n ----------\n x : array_like\n Input array.\n\n Returns\n -------\n out : ndarray, bool\n Boolean array of same shape as `x`.\n\n See Also\n --------\n iscomplex\n isrealobj : Return True if x is not a complex type.\n\n Examples\n --------\n >>> np.isreal([1+1j, 1+0j, 4.5, 3, 2, 2j])\n array([False, True, True, True, True, False], dtype=bool)\n \n "; static char __pyx_k_798[] = "isrealobj (line 6437)"; static char __pyx_k_799[] = "Return True if x is a not complex type or an array of complex numbers.\n\n The type of the input is checked, not the value. So even if the input\n has an imaginary part equal to zero, `isrealobj` evaluates to False\n if the data type is complex.\n\n Parameters\n ----------\n x : any\n The input can be of any type and shape.\n\n Returns\n -------\n y : bool\n The return value, False if `x` is of a complex type.\n\n See Also\n --------\n iscomplexobj, isreal\n\n Examples\n --------\n >>> np.isrealobj(1)\n True\n >>> np.isrealobj(1+0j)\n False\n >>> np.isrealobj([3, 1+0j, True])\n False\n \n "; static char __pyx_k_800[] = "isscalar (line 6471)"; static char __pyx_k_801[] = "Returns True if the type of `num` is a scalar type.\n\n Parameters\n ----------\n num : any\n Input argument, can be of any type and shape.\n\n Returns\n -------\n val : bool\n True if `num` is a scalar type, False if it is not.\n\n Examples\n --------\n >>> np.isscalar(3.1)\n True\n >>> np.isscalar([3.1])\n False\n >>> np.isscalar(False)\n True\n \n "; static char __pyx_k_802[] = "issctype (line 6497)"; static char __pyx_k_803[] = "Determines whether the given object represents a scalar data-type.\n\n Parameters\n ----------\n rep : any\n If `rep` is an instance of a scalar dtype, True is returned. If not,\n False is returned.\n\n Returns\n -------\n out : bool\n Boolean result of check whether `rep` is a scalar dtype.\n\n See Also\n --------\n issubsctype, issubdtype, obj2sctype, sctype2char\n\n Examples\n --------\n >>> np.issctype(np.int32)\n True\n >>> np.issctype(list)\n False\n >>> np.issctype(1.1)\n False\n\n Strings are also a scalar type:\n\n >>> np.issctype(np.dtype('str'))\n True\n \n "; static char __pyx_k_804[] = "issubclass_ (line 6533)"; static char __pyx_k_805[] = "Determine if a class is a subclass of a second class.\n\n `issubclass_` is equivalent to the Python built-in ``issubclass``,\n except that it returns False instead of raising a TypeError is one\n of the arguments is not a class.\n\n Parameters\n ----------\n arg1 : class\n Input class. True is returned if `arg1` is a subclass of `arg2`.\n arg2 : class or tuple of classes.\n Input class. If a tuple of classes, True is returned if `arg1` is a\n subclass of any of the tuple elements.\n\n Returns\n -------\n out : bool\n Whether `arg1` is a subclass of `arg2` or not.\n\n See Also\n --------\n issubsctype, issubdtype, issctype\n\n Examples\n --------\n >>> np.issubclass_(np.int32, np.int)\n True\n >>> np.issubclass_(np.int32, np.float)\n False\n \n "; static char __pyx_k_806[] = "issubdtype (line 6568)"; static char __pyx_k_807[] = "Returns True if first argument is a typecode lower/equal in type hierarchy.\n\n Parameters\n ----------\n arg1, arg2 : dtype_like\n dtype or string representing a typecode.\n\n Returns\n -------\n out : bool\n\n See Also\n --------\n issubsctype, issubclass_\n numpy.core.numerictypes : Overview of numpy type hierarchy.\n\n Examples\n --------\n >>> np.issubdtype('S1', str)\n True\n >>> np.issubdtype(np.float64, np.float32)\n False\n \n "; static char __pyx_k_808[] = "issubsctype (line 6596)"; static char __pyx_k_809[] = "Determine if the first argument is a subclass of the second argument.\n\n Parameters\n ----------\n arg1, arg2 : dtype or dtype specifier\n Data-types.\n\n Returns\n -------\n out : bool\n The result.\n\n See Also\n --------\n issctype, issubdtype,obj2sctype\n\n Examples\n --------\n >>> np.issubsctype('S8', str)\n True\n >>> np.issubsctype(np.array([1]), np.int)\n True\n >>> np.issubsctype(np.array([1]), np.float)\n False\n \n "; static char __pyx_k_810[] = "iterable (line 6626)"; static char __pyx_k_811[] = "Check whether or not an object can be iterated over.\n\n Parameters\n ----------\n y : object\n Input object.\n\n Returns\n -------\n b : {0, 1}\n Return 1 if the object has an iterator method or is a sequence,\n and 0 otherwise.\n\n\n Examples\n --------\n >>> np.iterable([1, 2, 3])\n 1\n >>> np.iterable(2)\n 0\n \n "; static char __pyx_k_812[] = "ix_ (line 6652)"; static char __pyx_k_813[] = "Construct an open mesh from multiple sequences.\n\n This function takes N 1-D sequences and returns N outputs with N\n dimensions each, such that the shape is 1 in all but one dimension\n and the dimension with the non-unit shape value cycles through all\n N dimensions.\n\n Using `ix_` one can quickly construct index arrays that will index\n the cross product. ``a[np.ix_([1,3],[2,5])]`` returns the array\n ``[[a[1,2] a[1,5]], [a[3,2] a[3,5]]]``.\n\n Parameters\n ----------\n args : 1-D sequences\n\n Returns\n -------\n out : tuple of ndarrays\n N arrays with N dimensions each, with N the number of input\n sequences. Together these arrays form an open mesh.\n\n See Also\n --------\n ogrid, mgrid, meshgrid\n\n Examples\n --------\n >>> a = np.arange(10).reshape(2, 5)\n >>> a\n array([[0, 1, 2, 3, 4],\n [5, 6, 7, 8, 9]])\n >>> ixgrid = np.ix_([0,1], [2,4])\n >>> ixgrid\n (array([[0],\n [1]]), array([[2, 4]]))\n >>> ixgrid[0].shape, ixgrid[1].shape\n ((2, 1), (1, 2))\n >>> a[ixgrid]\n array([[2, 4],\n [7, 9]])\n \n "; static char __pyx_k_814[] = "kaiser (line 6698)"; static char __pyx_k_815[] = "Return the Kaiser window.\n\n The Kaiser window is a taper formed by using a Bessel function.\n\n Parameters\n ----------\n M : int\n Number of points in the output window. If zero or less, an\n empty array is returned.\n beta : float\n Shape parameter for window.\n\n Returns\n -------\n out : array\n The window, normalized to one (the value one\n appears only if the number of samples is odd).\n\n See Also\n --------\n bartlett, blackman, hamming, hanning\n\n Notes\n -----\n The Kaiser window is defined as\n\n .. math:: w(n) = I_0\\left( \010eta \\sqrt{1-\014rac{4n^2}{(M-1)^2}}\n \right)/I_0(\010eta)\n\n with\n\n .. math:: \\quad -\014rac{M-1}{2} \\leq n \\leq \014rac{M-1}{2},\n\n where :math:`I_0` is the modified zeroth-order Bessel function.\n\n The Kaiser was named for Jim Kaiser, who discovered a simple approximation\n to the DPSS window based on Bessel functions.\n The Kaiser window is a very good approximation to the Digital Prolate\n Spheroidal Sequence, or Slepian window, which is the transform which\n maximizes the energy in the main lobe of the window relative to total\n energy.\n\n The Kaiser can approximate many other windows by varying the beta\n parameter.\n\n ==== =======================\n beta Window shape\n ==== =======================\n 0 Rectangular\n 5 Similar to a Hamming\n 6 Similar to a Hanning\n 8.6 Similar to a Blackman\n ==== =======================\n\n A beta value of 14 is probably a good starting point. Note that as beta\n gets large, the window narrows, and so the number of samples needs to be\n large enough to sample the increasingly narrow spike, otherwise nans will\n get returned.\n\n\n Most references to the Kaiser window come from the signal processing\n literature, where it is used as one of many windowing functions for\n smoothing values. It"" is also known as an apodization (which means\n \"removing the foot\", i.e. smoothing discontinuities at the beginning\n and end of the sampled signal) or tapering function.\n\n References\n ----------\n .. [1] J. F. Kaiser, \"Digital Filters\" - Ch 7 in \"Systems analysis by\n digital computer\", Editors: F.F. Kuo and J.F. Kaiser, p 218-285.\n John Wiley and Sons, New York, (1966).\n .. [2] E.R. Kanasewich, \"Time Sequence Analysis in Geophysics\", The\n University of Alberta Press, 1975, pp. 177-178.\n .. [3] Wikipedia, \"Window function\",\n http://en.wikipedia.org/wiki/Window_function\n\n Examples\n --------\n >>> from numpy import kaiser\n >>> kaiser(12, 14)\n array([ 7.72686684e-06, 3.46009194e-03, 4.65200189e-02,\n 2.29737120e-01, 5.99885316e-01, 9.45674898e-01,\n 9.45674898e-01, 5.99885316e-01, 2.29737120e-01,\n 4.65200189e-02, 3.46009194e-03, 7.72686684e-06])\n\n\n Plot the window and the frequency response:\n\n >>> from numpy import clip, log10, array, kaiser, linspace\n >>> from numpy.fft import fft, fftshift\n >>> import matplotlib.pyplot as plt\n\n >>> window = kaiser(51, 14)\n >>> plt.plot(window)\n []\n >>> plt.title(\"Kaiser window\")\n \n >>> plt.ylabel(\"Amplitude\")\n \n >>> plt.xlabel(\"Sample\")\n \n >>> plt.show()\n\n >>> plt.figure()\n \n >>> A = fft(window, 2048) / 25.5\n >>> mag = abs(fftshift(A))\n >>> freq = linspace(-0.5,0.5,len(A))\n >>> response = 20*log10(mag)\n >>> response = clip(response,-100,100)\n >>> plt.plot(freq, response)\n []\n >>> plt.title(\"Frequency response of Kaiser window\")\n \n >>> plt.ylabel(\"Magnitude [dB]\")\n \n >>> plt.xlabel(\"Normalized frequency [cycles per sample]\")\n \n >>> plt.axis('tight')\n (-0.5, 0.5, -100.0, ...)\n >>> plt.show()\n \n "; static char __pyx_k_816[] = "kron (line 6825)"; static char __pyx_k_817[] = "Kronecker product of two arrays.\n\n Computes the Kronecker product, a composite array made of blocks of the\n second array scaled by the first.\n\n Parameters\n ----------\n a, b : array_like\n\n Returns\n -------\n out : ndarray\n\n See Also\n --------\n\n outer : The outer product\n\n Notes\n -----\n\n The function assumes that the number of dimenensions of `a` and `b`\n are the same, if necessary prepending the smallest with ones.\n If `a.shape = (r0,r1,..,rN)` and `b.shape = (s0,s1,...,sN)`,\n the Kronecker product has shape `(r0*s0, r1*s1, ..., rN*SN)`.\n The elements are products of elements from `a` and `b`, organized\n explicitly by::\n\n kron(a,b)[k0,k1,...,kN] = a[i0,i1,...,iN] * b[j0,j1,...,jN]\n\n where::\n\n kt = it * st + jt, t = 0,...,N\n\n In the common 2-D case (N=1), the block structure can be visualized::\n\n [[ a[0,0]*b, a[0,1]*b, ... , a[0,-1]*b ],\n [ ... ... ],\n [ a[-1,0]*b, a[-1,1]*b, ... , a[-1,-1]*b ]]\n\n\n Examples\n --------\n >>> np.kron([1,10,100], [5,6,7])\n array([ 5, 6, 7, 50, 60, 70, 500, 600, 700])\n >>> np.kron([5,6,7], [1,10,100])\n array([ 5, 50, 500, 6, 60, 600, 7, 70, 700])\n\n >>> np.kron(np.eye(2), np.ones((2,2)))\n array([[ 1., 1., 0., 0.],\n [ 1., 1., 0., 0.],\n [ 0., 0., 1., 1.],\n [ 0., 0., 1., 1.]])\n\n >>> a = np.arange(100).reshape((2,5,2,5))\n >>> b = np.arange(24).reshape((2,3,4))\n >>> c = np.kron(a,b)\n >>> c.shape\n (2, 10, 6, 20)\n >>> I = (1,3,0,2)\n >>> J = (0,2,1)\n >>> J1 = (0,) + J # extend to ndim=4\n >>> S1 = (1,) + b.shape\n >>> K = tuple(np.array(I) * np.array(S1) + np.array(J1))\n >>> c[K] == a[I]*b[J]\n True\n \n "; static char __pyx_k_818[] = "lexsort (line 6897)"; static char __pyx_k_819[] = "lexsort(keys, axis=-1)\n\n Perform an indirect sort using a sequence of keys.\n\n Given multiple sorting keys, which can be interpreted as columns in a\n spreadsheet, lexsort returns an array of integer indices that describes\n the sort order by multiple columns. The last key in the sequence is used\n for the primary sort order, the second-to-last key for the secondary sort\n order, and so on. The keys argument must be a sequence of objects that\n can be converted to arrays of the same shape. If a 2D array is provided\n for the keys argument, it's rows are interpreted as the sorting keys and\n sorting is according to the last row, second last row etc.\n\n Parameters\n ----------\n keys : (k,N) array or tuple containing k (N,)-shaped sequences\n The `k` different \"columns\" to be sorted. The last column (or row if\n `keys` is a 2D array) is the primary sort key.\n axis : int, optional\n Axis to be indirectly sorted. By default, sort over the last axis.\n\n Returns\n -------\n indices : (N,) ndarray of ints\n Array of indices that sort the keys along the specified axis.\n\n See Also\n --------\n argsort : Indirect sort.\n ndarray.sort : In-place sort.\n sort : Return a sorted copy of an array.\n\n Examples\n --------\n Sort names: first by surname, then by name.\n\n >>> surnames = ('Hertz', 'Galilei', 'Hertz')\n >>> first_names = ('Heinrich', 'Galileo', 'Gustav')\n >>> ind = np.lexsort((first_names, surnames))\n >>> ind\n array([1, 2, 0])\n\n >>> [surnames[i] + \", \" + first_names[i] for i in ind]\n ['Galilei, Galileo', 'Hertz, Gustav', 'Hertz, Heinrich']\n\n Sort two columns of numbers:\n\n >>> a = [1,5,1,4,3,4,4] # First column\n >>> b = [9,4,0,4,0,2,1] # Second column\n >>> ind = np.lexsort((b,a)) # Sort by a, then by b\n >>> print ind\n [2 0 4 6 5 3 1]\n\n >>> [(a[i],b[i]) for i in ind]\n [(1, 0), (1, 9), (3, 0)"", (4, 1), (4, 2), (4, 4), (5, 4)]\n\n Note that sorting is first according to the elements of ``a``.\n Secondary sorting is according to the elements of ``b``.\n\n A normal ``argsort`` would have yielded:\n\n >>> [(a[i],b[i]) for i in np.argsort(a)]\n [(1, 9), (1, 0), (3, 0), (4, 4), (4, 2), (4, 1), (5, 4)]\n\n Structured arrays are sorted lexically by ``argsort``:\n\n >>> x = np.array([(1,9), (5,4), (1,0), (4,4), (3,0), (4,2), (4,1)],\n ... dtype=np.dtype([('x', int), ('y', int)]))\n\n >>> np.argsort(x) # or np.argsort(x, order=('x', 'y'))\n array([2, 0, 4, 6, 5, 3, 1])\n \n "; static char __pyx_k_820[] = "load (line 6975)"; static char __pyx_k_821[] = "Load a pickled, ``.npy``, or ``.npz`` binary file.\n\n Parameters\n ----------\n file : file-like object or string\n The file to read. It must support ``seek()`` and ``read()`` methods.\n If the filename extension is ``.gz``, the file is first decompressed.\n mmap_mode: {None, 'r+', 'r', 'w+', 'c'}, optional\n If not None, then memory-map the file, using the given mode\n (see `numpy.memmap`). The mode has no effect for pickled or\n zipped files.\n A memory-mapped array is stored on disk, and not directly loaded\n into memory. However, it can be accessed and sliced like any\n ndarray. Memory mapping is especially useful for accessing\n small fragments of large files without reading the entire file\n into memory.\n\n Returns\n -------\n result : array, tuple, dict, etc.\n Data stored in the file.\n\n Raises\n ------\n IOError\n If the input file does not exist or cannot be read.\n\n See Also\n --------\n save, savez, loadtxt\n memmap : Create a memory-map to an array stored in a file on disk.\n\n Notes\n -----\n - If the file contains pickle data, then whatever is stored in the\n pickle is returned.\n - If the file is a ``.npy`` file, then an array is returned.\n - If the file is a ``.npz`` file, then a dictionary-like object is\n returned, containing ``{filename: array}`` key-value pairs, one for\n each file in the archive.\n\n Examples\n --------\n Store data to disk, and load it again:\n\n >>> np.save('/tmp/123', np.array([[1, 2, 3], [4, 5, 6]]))\n >>> np.load('/tmp/123.npy')\n array([[1, 2, 3],\n [4, 5, 6]])\n\n Mem-map the stored array, and then access the second row\n directly from disk:\n\n >>> X = np.load('/tmp/123.npy', mmap_mode='r')\n >>> X[1, :]\n memmap([4, 5, 6])\n \n "; static char __pyx_k_822[] = "loadtxt (line 7045)"; static char __pyx_k_823[] = "Load data from a text file.\n\n Each row in the text file must have the same number of values.\n\n Parameters\n ----------\n fname : file or str\n File, filename, or generator to read. If the filename extension is\n ``.gz`` or ``.bz2``, the file is first decompressed. Note that\n generators should return byte strings for Python 3k.\n dtype : data-type, optional\n Data-type of the resulting array; default: float. If this is a\n record data-type, the resulting array will be 1-dimensional, and\n each row will be interpreted as an element of the array. In this\n case, the number of columns used must match the number of fields in\n the data-type.\n comments : str, optional\n The character used to indicate the start of a comment;\n default: '#'.\n delimiter : str, optional\n The string used to separate values. By default, this is any\n whitespace.\n converters : dict, optional\n A dictionary mapping column number to a function that will convert\n that column to a float. E.g., if column 0 is a date string:\n ``converters = {0: datestr2num}``. Converters can also be used to\n provide a default value for missing data (but see also `genfromtxt`):\n ``converters = {3: lambda s: float(s.strip() or 0)}``. Default: None.\n skiprows : int, optional\n Skip the first `skiprows` lines; default: 0.\n usecols : sequence, optional\n Which columns to read, with 0 being the first. For example,\n ``usecols = (1,4,5)`` will extract the 2nd, 5th and 6th columns.\n The default, None, results in all columns being read.\n unpack : bool, optional\n If True, the returned array is transposed, so that arguments may be\n unpacked using ``x, y, z = loadtxt(...)``. When used with a record\n data-type, arrays are returned for each field. Default is False.\n ndmin : int, optional\n The ""returned array will have at least `ndmin` dimensions.\n Otherwise mono-dimensional axes will be squeezed. \n Legal values: 0 (default), 1 or 2.\n .. versionadded:: 1.6.0\n\n Returns\n -------\n out : ndarray\n Data read from the text file.\n\n See Also\n --------\n load, fromstring, fromregex\n genfromtxt : Load data with missing values handled as specified.\n scipy.io.loadmat : reads MATLAB data files\n\n Notes\n -----\n This function aims to be a fast reader for simply formatted files. The\n `genfromtxt` function provides more sophisticated handling of, e.g.,\n lines with missing values.\n\n Examples\n --------\n >>> from StringIO import StringIO # StringIO behaves like a file object\n >>> c = StringIO(\"0 1\n2 3\")\n >>> np.loadtxt(c)\n array([[ 0., 1.],\n [ 2., 3.]])\n\n >>> d = StringIO(\"M 21 72\nF 35 58\")\n >>> np.loadtxt(d, dtype={'names': ('gender', 'age', 'weight'),\n ... 'formats': ('S1', 'i4', 'f4')})\n array([('M', 21, 72.0), ('F', 35, 58.0)],\n dtype=[('gender', '|S1'), ('age', '>> c = StringIO(\"1,0,2\n3,0,4\")\n >>> x, y = np.loadtxt(c, delimiter=',', usecols=(0, 2), unpack=True)\n >>> x\n array([ 1., 3.])\n >>> y\n array([ 2., 4.])\n \n "; static char __pyx_k_824[] = "lookfor (line 7132)"; static char __pyx_k_825[] = "Do a keyword search on docstrings.\n\n A list of of objects that matched the search is displayed,\n sorted by relevance. All given keywords need to be found in the\n docstring for it to be returned as a result, but the order does\n not matter.\n\n Parameters\n ----------\n what : str\n String containing words to look for.\n module : str or list, optional\n Name of module(s) whose docstrings to go through.\n import_modules : bool, optional\n Whether to import sub-modules in packages. Default is True.\n regenerate : bool, optional\n Whether to re-generate the docstring cache. Default is False.\n output : file-like, optional\n File-like object to write the output to. If omitted, use a pager.\n\n See Also\n --------\n source, info\n\n Notes\n -----\n Relevance is determined only roughly, by checking if the keywords occur\n in the function name, at the start of a docstring, etc.\n\n Examples\n --------\n >>> np.lookfor('binary representation')\n Search results for 'binary representation'\n ------------------------------------------\n numpy.binary_repr\n Return the binary representation of the input number as a string.\n numpy.core.setup_common.long_double_representation\n Given a binary dump as given by GNU od -b, look for long double\n numpy.base_repr\n Return a string representation of a number in the given base system.\n ...\n \n "; static char __pyx_k_826[] = "mask_indices (line 7192)"; static char __pyx_k_827[] = "Return the indices to access (n, n) arrays, given a masking function.\n\n Assume `mask_func` is a function that, for a square array a of size\n ``(n, n)`` with a possible offset argument `k`, when called as\n ``mask_func(a, k)`` returns a new array with zeros in certain locations\n (functions like `triu` or `tril` do precisely this). Then this function\n returns the indices where the non-zero values would be located.\n\n Parameters\n ----------\n n : int\n The returned indices will be valid to access arrays of shape (n, n).\n mask_func : callable\n A function whose call signature is similar to that of `triu`, `tril`.\n That is, ``mask_func(x, k)`` returns a boolean array, shaped like `x`.\n `k` is an optional argument to the function.\n k : scalar\n An optional argument which is passed through to `mask_func`. Functions\n like `triu`, `tril` take a second argument that is interpreted as an\n offset.\n\n Returns\n -------\n indices : tuple of arrays.\n The `n` arrays of indices corresponding to the locations where\n ``mask_func(np.ones((n, n)), k)`` is True.\n\n See Also\n --------\n triu, tril, triu_indices, tril_indices\n\n Notes\n -----\n .. versionadded:: 1.4.0\n\n Examples\n --------\n These are the indices that would allow you to access the upper triangular\n part of any 3x3 array:\n\n >>> iu = np.mask_indices(3, np.triu)\n\n For example, if `a` is a 3x3 array:\n\n >>> a = np.arange(9).reshape(3, 3)\n >>> a\n array([[0, 1, 2],\n [3, 4, 5],\n [6, 7, 8]])\n >>> a[iu]\n array([0, 1, 2, 4, 5, 8])\n\n An offset can be passed also to the masking function. This gets us the\n indices starting on the first diagonal right of the main one:\n\n >>> iu1 = np.mask_indices(3, np.triu, 1)\n\n with which we now extract only three elements:\n\n >>> a[iu1]\n array([1, 2, 5])\n \n "; static char __pyx_k_828[] = "mat (line 7259)"; static char __pyx_k_829[] = "max (line 7291)"; static char __pyx_k_830[] = "maximum_sctype (line 7348)"; static char __pyx_k_831[] = "Return the scalar type of highest precision of the same kind as the input.\n\n Parameters\n ----------\n t : dtype or dtype specifier\n The input data type. This can be a `dtype` object or an object that\n is convertible to a `dtype`.\n\n Returns\n -------\n out : dtype\n The highest precision data type of the same kind (`dtype.kind`) as `t`.\n\n See Also\n --------\n obj2sctype, mintypecode, sctype2char\n dtype\n\n Examples\n --------\n >>> np.maximum_sctype(np.int)\n \n >>> np.maximum_sctype(np.uint8)\n \n >>> np.maximum_sctype(np.complex)\n \n\n >>> np.maximum_sctype(str)\n \n\n >>> np.maximum_sctype('i2')\n \n >>> np.maximum_sctype('f4')\n \n \n "; static char __pyx_k_832[] = "may_share_memory (line 7388)"; static char __pyx_k_833[] = "Determine if two arrays can share memory\n\n The memory-bounds of a and b are computed. If they overlap then\n this function returns True. Otherwise, it returns False.\n\n A return of True does not necessarily mean that the two arrays\n share any element. It just means that they *might*.\n\n Parameters\n ----------\n a, b : ndarray\n\n Returns\n -------\n out : bool\n\n Examples\n --------\n >>> np.may_share_memory(np.array([1,2]), np.array([5,8,9]))\n False\n \n "; static char __pyx_k_834[] = "mean (line 7414)"; static char __pyx_k_835[] = "Compute the arithmetic mean along the specified axis.\n\n Returns the average of the array elements. The average is taken over\n the flattened array by default, otherwise over the specified axis.\n `float64` intermediate and return values are used for integer inputs.\n\n Parameters\n ----------\n a : array_like\n Array containing numbers whose mean is desired. If `a` is not an\n array, a conversion is attempted.\n axis : int, optional\n Axis along which the means are computed. The default is to compute\n the mean of the flattened array.\n dtype : data-type, optional\n Type to use in computing the mean. For integer inputs, the default\n is `float64`; for floating point inputs, it is the same as the\n input dtype.\n out : ndarray, optional\n Alternate output array in which to place the result. The default\n is ``None``; if provided, it must have the same shape as the\n expected output, but the type will be cast if necessary.\n See `doc.ufuncs` for details.\n\n Returns\n -------\n m : ndarray, see dtype parameter above\n If `out=None`, returns a new array containing the mean values,\n otherwise a reference to the output array is returned.\n\n See Also\n --------\n average : Weighted average\n\n Notes\n -----\n The arithmetic mean is the sum of the elements along the axis divided\n by the number of elements.\n\n Note that for floating-point input, the mean is computed using the\n same precision the input has. Depending on the input data, this can\n cause the results to be inaccurate, especially for `float32` (see\n example below). Specifying a higher-precision accumulator using the\n `dtype` keyword can alleviate this issue.\n\n Examples\n --------\n >>> a = np.array([[1, 2], [3, 4]])\n >>> np.mean(a)\n 2.5\n >>> np.mean(a, axis=0)\n array([ 2., 3.])\n >>> np.mean(a, axis=1)\n ""array([ 1.5, 3.5])\n\n In single precision, `mean` can be inaccurate:\n\n >>> a = np.zeros((2, 512*512), dtype=np.float32)\n >>> a[0, :] = 1.0\n >>> a[1, :] = 0.1\n >>> np.mean(a)\n 0.546875\n\n Computing the mean in float64 is more accurate:\n\n >>> np.mean(a, dtype=np.float64)\n 0.55000000074505806\n \n "; static char __pyx_k_836[] = "median (line 7487)"; static char __pyx_k_837[] = "Compute the median along the specified axis.\n\n Returns the median of the array elements.\n\n Parameters\n ----------\n a : array_like\n Input array or object that can be converted to an array.\n axis : {None, int}, optional\n Axis along which the medians are computed. The default (axis=None)\n is to compute the median along a flattened version of the array.\n out : ndarray, optional\n Alternative output array in which to place the result. It must\n have the same shape and buffer length as the expected output,\n but the type (of the output) will be cast if necessary.\n overwrite_input : {False, True}, optional\n If True, then allow use of memory of input array (a) for\n calculations. The input array will be modified by the call to\n median. This will save memory when you do not need to preserve\n the contents of the input array. Treat the input as undefined,\n but it will probably be fully or partially sorted. Default is\n False. Note that, if `overwrite_input` is True and the input\n is not already an ndarray, an error will be raised.\n\n Returns\n -------\n median : ndarray\n A new array holding the result (unless `out` is specified, in\n which case that array is returned instead). If the input contains\n integers, or floats of smaller precision than 64, then the output\n data-type is float64. Otherwise, the output data-type is the same\n as that of the input.\n\n See Also\n --------\n mean, percentile\n\n Notes\n -----\n Given a vector V of length N, the median of V is the middle value of\n a sorted copy of V, ``V_sorted`` - i.e., ``V_sorted[(N-1)/2]``, when N is\n odd. When N is even, it is the average of the two middle values of\n ``V_sorted``.\n\n Examples\n --------\n >>> a = np.array([[10, 7, 4], [3, 2, 1]])\n >>> a\n array([[10, 7, 4],\n [ 3, 2, 1]])""\n >>> np.median(a)\n 3.5\n >>> np.median(a, axis=0)\n array([ 6.5, 4.5, 2.5])\n >>> np.median(a, axis=1)\n array([ 7., 2.])\n >>> m = np.median(a, axis=0)\n >>> out = np.zeros_like(m)\n >>> np.median(a, axis=0, out=m)\n array([ 6.5, 4.5, 2.5])\n >>> m\n array([ 6.5, 4.5, 2.5])\n >>> b = a.copy()\n >>> np.median(b, axis=1, overwrite_input=True)\n array([ 7., 2.])\n >>> assert not np.all(a==b)\n >>> b = a.copy()\n >>> np.median(b, axis=None, overwrite_input=True)\n 3.5\n >>> assert not np.all(a==b)\n \n "; static char __pyx_k_838[] = "meshgrid (line 7563)"; static char __pyx_k_839[] = "Return coordinate matrices from two coordinate vectors.\n\n Parameters\n ----------\n x, y : ndarray\n Two 1-D arrays representing the x and y coordinates of a grid.\n\n Returns\n -------\n X, Y : ndarray\n For vectors `x`, `y` with lengths ``Nx=len(x)`` and ``Ny=len(y)``,\n return `X`, `Y` where `X` and `Y` are ``(Ny, Nx)`` shaped arrays\n with the elements of `x` and y repeated to fill the matrix along\n the first dimension for `x`, the second for `y`.\n\n See Also\n --------\n index_tricks.mgrid : Construct a multi-dimensional \"meshgrid\"\n using indexing notation.\n index_tricks.ogrid : Construct an open multi-dimensional \"meshgrid\"\n using indexing notation.\n\n Examples\n --------\n >>> X, Y = np.meshgrid([1,2,3], [4,5,6,7])\n >>> X\n array([[1, 2, 3],\n [1, 2, 3],\n [1, 2, 3],\n [1, 2, 3]])\n >>> Y\n array([[4, 4, 4],\n [5, 5, 5],\n [6, 6, 6],\n [7, 7, 7]])\n\n `meshgrid` is very useful to evaluate functions on a grid.\n\n >>> x = np.arange(-5, 5, 0.1)\n >>> y = np.arange(-5, 5, 0.1)\n >>> xx, yy = np.meshgrid(x, y)\n >>> z = np.sin(xx**2+yy**2)/(xx**2+yy**2)\n \n "; static char __pyx_k_840[] = "min (line 7611)"; static char __pyx_k_841[] = "min_scalar_type (line 7668)"; static char __pyx_k_842[] = "min_scalar_type(a)\n\n For scalar ``a``, returns the data type with the smallest size\n and smallest scalar kind which can hold its value. For non-scalar\n array ``a``, returns the vector's dtype unmodified.\n\n Floating point values are not demoted to integers,\n and complex values are not demoted to floats.\n\n Parameters\n ----------\n a : scalar or array_like\n The value whose minimal data type is to be found.\n\n Returns\n -------\n out : dtype\n The minimal data type.\n\n Notes\n -----\n .. versionadded:: 1.6.0\n\n See Also\n --------\n result_type, promote_types, dtype, can_cast\n\n Examples\n --------\n >>> np.min_scalar_type(10)\n dtype('uint8')\n\n >>> np.min_scalar_type(-260)\n dtype('int16')\n\n >>> np.min_scalar_type(3.1)\n dtype('float16')\n\n >>> np.min_scalar_type(1e50)\n dtype('float64')\n\n >>> np.min_scalar_type(np.arange(4,dtype='f8'))\n dtype('float64')\n \n "; static char __pyx_k_843[] = "mintypecode (line 7718)"; static char __pyx_k_844[] = "Return the character for the minimum-size type to which given types can\n be safely cast.\n\n The returned type character must represent the smallest size dtype such\n that an array of the returned type can handle the data from an array of\n all types in `typechars` (or if `typechars` is an array, then its\n dtype.char).\n\n Parameters\n ----------\n typechars : list of str or array_like\n If a list of strings, each string should represent a dtype.\n If array_like, the character representation of the array dtype is used.\n typeset : str or list of str, optional\n The set of characters that the returned character is chosen from.\n The default set is 'GDFgdf'.\n default : str, optional\n The default character, this is returned if none of the characters in\n `typechars` matches a character in `typeset`.\n\n Returns\n -------\n typechar : str\n The character representing the minimum-size type that was found.\n\n See Also\n --------\n dtype, sctype2char, maximum_sctype\n\n Examples\n --------\n >>> np.mintypecode(['d', 'f', 'S'])\n 'd'\n >>> x = np.array([1.1, 2-3.j])\n >>> np.mintypecode(x)\n 'D'\n\n >>> np.mintypecode('abceh', default='G')\n 'G'\n \n "; static char __pyx_k_845[] = "nan_to_num (line 7810)"; static char __pyx_k_846[] = "Replace nan with zero and inf with finite numbers.\n\n Returns an array or scalar replacing Not a Number (NaN) with zero,\n (positive) infinity with a very large number and negative infinity\n with a very small (or negative) number.\n\n Parameters\n ----------\n x : array_like\n Input data.\n\n Returns\n -------\n out : ndarray, float\n Array with the same shape as `x` and dtype of the element in `x` with\n the greatest precision. NaN is replaced by zero, and infinity\n (-infinity) is replaced by the largest (smallest or most negative)\n floating point value that fits in the output dtype. All finite numbers\n are upcast to the output dtype (default float64).\n\n See Also\n --------\n isinf : Shows which elements are negative or negative infinity.\n isneginf : Shows which elements are negative infinity.\n isposinf : Shows which elements are positive infinity.\n isnan : Shows which elements are Not a Number (NaN).\n isfinite : Shows which elements are finite (not NaN, not infinity)\n\n Notes\n -----\n Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic\n (IEEE 754). This means that Not a Number is not equivalent to infinity.\n\n\n Examples\n --------\n >>> np.set_printoptions(precision=8)\n >>> x = np.array([np.inf, -np.inf, np.nan, -128, 128])\n >>> np.nan_to_num(x)\n array([ 1.79769313e+308, -1.79769313e+308, 0.00000000e+000,\n -1.28000000e+002, 1.28000000e+002])\n \n "; static char __pyx_k_847[] = "nanargmax (line 7857)"; static char __pyx_k_848[] = "Return indices of the maximum values over an axis, ignoring NaNs.\n\n Parameters\n ----------\n a : array_like\n Input data.\n axis : int, optional\n Axis along which to operate. By default flattened input is used.\n\n Returns\n -------\n index_array : ndarray\n An array of indices or a single index value.\n\n See Also\n --------\n argmax, nanargmin\n\n Examples\n --------\n >>> a = np.array([[np.nan, 4], [2, 3]])\n >>> np.argmax(a)\n 0\n >>> np.nanargmax(a)\n 1\n >>> np.nanargmax(a, axis=0)\n array([1, 0])\n >>> np.nanargmax(a, axis=1)\n array([1, 1])\n \n "; static char __pyx_k_849[] = "nanargmin (line 7892)"; static char __pyx_k_850[] = "Return indices of the minimum values over an axis, ignoring NaNs.\n\n Parameters\n ----------\n a : array_like\n Input data.\n axis : int, optional\n Axis along which to operate. By default flattened input is used.\n\n Returns\n -------\n index_array : ndarray\n An array of indices or a single index value.\n\n See Also\n --------\n argmin, nanargmax\n\n Examples\n --------\n >>> a = np.array([[np.nan, 4], [2, 3]])\n >>> np.argmin(a)\n 0\n >>> np.nanargmin(a)\n 2\n >>> np.nanargmin(a, axis=0)\n array([1, 1])\n >>> np.nanargmin(a, axis=1)\n array([1, 0])\n \n "; static char __pyx_k_851[] = "nanmax (line 7927)"; static char __pyx_k_852[] = "Return the maximum of an array or maximum along an axis ignoring any NaNs.\n\n Parameters\n ----------\n a : array_like\n Array containing numbers whose maximum is desired. If `a` is not\n an array, a conversion is attempted.\n axis : int, optional\n Axis along which the maximum is computed. The default is to compute\n the maximum of the flattened array.\n\n Returns\n -------\n nanmax : ndarray\n An array with the same shape as `a`, with the specified axis removed.\n If `a` is a 0-d array, or if axis is None, a ndarray scalar is\n returned. The the same dtype as `a` is returned.\n\n See Also\n --------\n numpy.amax : Maximum across array including any Not a Numbers.\n numpy.nanmin : Minimum across array ignoring any Not a Numbers.\n isnan : Shows which elements are Not a Number (NaN).\n isfinite: Shows which elements are not: Not a Number, positive and\n negative infinity\n\n Notes\n -----\n Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic\n (IEEE 754). This means that Not a Number is not equivalent to infinity.\n Positive infinity is treated as a very large number and negative infinity\n is treated as a very small (i.e. negative) number.\n\n If the input has a integer type the function is equivalent to np.max.\n\n Examples\n --------\n >>> a = np.array([[1, 2], [3, np.nan]])\n >>> np.nanmax(a)\n 3.0\n >>> np.nanmax(a, axis=0)\n array([ 3., 2.])\n >>> np.nanmax(a, axis=1)\n array([ 2., 3.])\n\n When positive infinity and negative infinity are present:\n\n >>> np.nanmax([1, 2, np.nan, np.NINF])\n 2.0\n >>> np.nanmax([1, 2, np.nan, np.inf])\n inf\n \n "; static char __pyx_k_853[] = "nanmin (line 7984)"; static char __pyx_k_854[] = "Return the minimum of an array or minimum along an axis ignoring any NaNs.\n\n Parameters\n ----------\n a : array_like\n Array containing numbers whose minimum is desired.\n axis : int, optional\n Axis along which the minimum is computed.The default is to compute\n the minimum of the flattened array.\n\n Returns\n -------\n nanmin : ndarray\n A new array or a scalar array with the result.\n\n See Also\n --------\n numpy.amin : Minimum across array including any Not a Numbers.\n numpy.nanmax : Maximum across array ignoring any Not a Numbers.\n isnan : Shows which elements are Not a Number (NaN).\n isfinite: Shows which elements are not: Not a Number, positive and\n negative infinity\n\n Notes\n -----\n Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic\n (IEEE 754). This means that Not a Number is not equivalent to infinity.\n Positive infinity is treated as a very large number and negative infinity\n is treated as a very small (i.e. negative) number.\n\n If the input has a integer type the function is equivalent to np.min.\n\n\n Examples\n --------\n >>> a = np.array([[1, 2], [3, np.nan]])\n >>> np.nanmin(a)\n 1.0\n >>> np.nanmin(a, axis=0)\n array([ 1., 2.])\n >>> np.nanmin(a, axis=1)\n array([ 1., 3.])\n\n When positive infinity and negative infinity are present:\n\n >>> np.nanmin([1, 2, np.nan, np.inf])\n 1.0\n >>> np.nanmin([1, 2, np.nan, np.NINF])\n -inf\n \n "; static char __pyx_k_855[] = "nansum (line 8039)"; static char __pyx_k_856[] = "Return the sum of array elements over a given axis treating\n Not a Numbers (NaNs) as zero.\n\n Parameters\n ----------\n a : array_like\n Array containing numbers whose sum is desired. If `a` is not an\n array, a conversion is attempted.\n axis : int, optional\n Axis along which the sum is computed. The default is to compute\n the sum of the flattened array.\n\n Returns\n -------\n y : ndarray\n An array with the same shape as a, with the specified axis removed.\n If a is a 0-d array, or if axis is None, a scalar is returned with\n the same dtype as `a`.\n\n See Also\n --------\n numpy.sum : Sum across array including Not a Numbers.\n isnan : Shows which elements are Not a Number (NaN).\n isfinite: Shows which elements are not: Not a Number, positive and\n negative infinity\n\n Notes\n -----\n Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic\n (IEEE 754). This means that Not a Number is not equivalent to infinity.\n If positive or negative infinity are present the result is positive or\n negative infinity. But if both positive and negative infinity are present,\n the result is Not A Number (NaN).\n\n Arithmetic is modular when using integer types (all elements of `a` must\n be finite i.e. no elements that are NaNs, positive infinity and negative\n infinity because NaNs are floating point types), and no error is raised\n on overflow.\n\n\n Examples\n --------\n >>> np.nansum(1)\n 1\n >>> np.nansum([1])\n 1\n >>> np.nansum([1, np.nan])\n 1.0\n >>> a = np.array([[1, 1], [1, np.nan]])\n >>> np.nansum(a)\n 3.0\n >>> np.nansum(a, axis=0)\n array([ 2., 1.])\n\n When positive infinity and negative infinity are present\n\n >>> np.nansum([1, np.nan, np.inf])\n inf\n >>> np.nansum([1, np.nan, np.NINF])\n -inf\n >>> np.nansum([1, np.nan, np.inf, np.NINF])\n nan\n "" \n "; static char __pyx_k_857[] = "ndim (line 8121)"; static char __pyx_k_858[] = "Return the number of dimensions of an array.\n\n Parameters\n ----------\n a : array_like\n Input array. If it is not already an ndarray, a conversion is\n attempted.\n\n Returns\n -------\n number_of_dimensions : int\n The number of dimensions in `a`. Scalars are zero-dimensional.\n\n See Also\n --------\n ndarray.ndim : equivalent method\n shape : dimensions of array\n ndarray.shape : dimensions of array\n\n Examples\n --------\n >>> np.ndim([[1,2,3],[4,5,6]])\n 2\n >>> np.ndim(np.array([[1,2,3],[4,5,6]]))\n 2\n >>> np.ndim(1)\n 0\n \n "; static char __pyx_k_859[] = "nonzero (line 8172)"; static char __pyx_k_860[] = "Return the indices of the elements that are non-zero.\n\n Returns a tuple of arrays, one for each dimension of `a`, containing\n the indices of the non-zero elements in that dimension. The\n corresponding non-zero values can be obtained with::\n\n a[nonzero(a)]\n\n To group the indices by element, rather than dimension, use::\n\n transpose(nonzero(a))\n\n The result of this is always a 2-D array, with a row for\n each non-zero element.\n\n Parameters\n ----------\n a : array_like\n Input array.\n\n Returns\n -------\n tuple_of_arrays : tuple\n Indices of elements that are non-zero.\n\n See Also\n --------\n flatnonzero :\n Return indices that are non-zero in the flattened version of the input\n array.\n ndarray.nonzero :\n Equivalent ndarray method.\n count_nonzero :\n Counts the number of non-zero elements in the input array.\n\n Examples\n --------\n >>> x = np.eye(3)\n >>> x\n array([[ 1., 0., 0.],\n [ 0., 1., 0.],\n [ 0., 0., 1.]])\n >>> np.nonzero(x)\n (array([0, 1, 2]), array([0, 1, 2]))\n\n >>> x[np.nonzero(x)]\n array([ 1., 1., 1.])\n >>> np.transpose(np.nonzero(x))\n array([[0, 0],\n [1, 1],\n [2, 2]])\n\n A common use for ``nonzero`` is to find the indices of an array, where\n a condition is True. Given an array `a`, the condition `a` > 3 is a\n boolean array and since False is interpreted as 0, np.nonzero(a > 3)\n yields the indices of the `a` where the condition is true.\n\n >>> a = np.array([[1,2,3],[4,5,6],[7,8,9]])\n >>> a > 3\n array([[False, False, False],\n [ True, True, True],\n [ True, True, True]], dtype=bool)\n >>> np.nonzero(a > 3)\n (array([1, 1, 1, 2, 2, 2]), array([0, 1, 2, 0, 1, 2]))\n\n The ``nonzero`` method of the boolean array can also be called.\n\n >>> (a > 3).nonzero()\n (array([1, 1, 1, ""2, 2, 2]), array([0, 1, 2, 0, 1, 2]))\n \n "; static char __pyx_k_861[] = "nper (line 8247)"; static char __pyx_k_862[] = "Compute the number of periodic payments.\n\n Parameters\n ----------\n rate : array_like\n Rate of interest (per period)\n pmt : array_like\n Payment\n pv : array_like\n Present value\n fv : array_like, optional\n Future value\n when : {{'begin', 1}, {'end', 0}}, {string, int}, optional\n When payments are due ('begin' (1) or 'end' (0))\n\n Notes\n -----\n The number of periods ``nper`` is computed by solving the equation::\n\n fv + pv*(1+rate)**nper + pmt*(1+rate*when)/rate*((1+rate)**nper-1) = 0\n\n but if ``rate = 0`` then::\n\n fv + pv + pmt*nper = 0\n\n Examples\n --------\n If you only had $150/month to pay towards the loan, how long would it take\n to pay-off a loan of $8,000 at 7% annual interest?\n\n >>> np.nper(0.07/12, -150, 8000)\n 64.073348770661852\n\n So, over 64 months would be required to pay off the loan.\n\n The same analysis could be done with several different interest rates\n and/or payments and/or total amounts to produce an entire table.\n\n >>> np.nper(*(np.ogrid[0.07/12: 0.08/12: 0.01/12,\n ... -150 : -99 : 50 ,\n ... 8000 : 9001 : 1000]))\n array([[[ 64.07334877, 74.06368256],\n [ 108.07548412, 127.99022654]],\n [[ 66.12443902, 76.87897353],\n [ 114.70165583, 137.90124779]]])\n \n "; static char __pyx_k_863[] = "npv (line 8298)"; static char __pyx_k_864[] = "Returns the NPV (Net Present Value) of a cash flow series.\n\n Parameters\n ----------\n rate : scalar\n The discount rate.\n values : array_like, shape(M, )\n The values of the time series of cash flows. The (fixed) time\n interval between cash flow \"events\" must be the same as that\n for which `rate` is given (i.e., if `rate` is per year, then\n precisely a year is understood to elapse between each cash flow\n event). By convention, investments or \"deposits\" are negative,\n income or \"withdrawals\" are positive; `values` must begin with\n the initial investment, thus `values[0]` will typically be\n negative.\n\n Returns\n -------\n out : float\n The NPV of the input cash flow series `values` at the discount `rate`.\n\n Notes\n -----\n Returns the result of: [G]_\n\n .. math :: \\sum_{t=0}^M{\014rac{values_t}{(1+rate)^{t}}}\n\n References\n ----------\n .. [G] L. J. Gitman, \"Principles of Managerial Finance, Brief,\" 3rd ed.,\n Addison-Wesley, 2003, pg. 346.\n\n Examples\n --------\n >>> np.npv(0.281,[-100, 39, 59, 55, 20])\n -0.0066187288356340801\n\n (Compare with the Example given for numpy.lib.financial.irr)\n \n "; static char __pyx_k_865[] = "obj2sctype (line 8342)"; static char __pyx_k_866[] = "Return the scalar dtype or NumPy equivalent of Python type of an object.\n\n Parameters\n ----------\n rep : any\n The object of which the type is returned.\n default : any, optional\n If given, this is returned for objects whose types can not be\n determined. If not given, None is returned for those objects.\n\n Returns\n -------\n dtype : dtype or Python type\n The data type of `rep`.\n\n See Also\n --------\n sctype2char, issctype, issubsctype, issubdtype, maximum_sctype\n\n Examples\n --------\n >>> np.obj2sctype(np.int32)\n \n >>> np.obj2sctype(np.array([1., 2.]))\n \n >>> np.obj2sctype(np.array([1.j]))\n \n\n >>> np.obj2sctype(dict)\n \n >>> np.obj2sctype('string')\n \n\n >>> np.obj2sctype(1, default=list)\n \n \n "; static char __pyx_k_867[] = "outer (line 8383)"; static char __pyx_k_868[] = "Compute the outer product of two vectors.\n\n Given two vectors, ``a = [a0, a1, ..., aM]`` and\n ``b = [b0, b1, ..., bN]``,\n the outer product [1]_ is::\n\n [[a0*b0 a0*b1 ... a0*bN ]\n [a1*b0 .\n [ ... .\n [aM*b0 aM*bN ]]\n\n Parameters\n ----------\n a, b : array_like, shape (M,), (N,)\n First and second input vectors. Inputs are flattened if they\n are not already 1-dimensional.\n\n Returns\n -------\n out : ndarray, shape (M, N)\n ``out[i, j] = a[i] * b[j]``\n\n See also\n --------\n inner, einsum\n\n References\n ----------\n .. [1] : G. H. Golub and C. F. van Loan, *Matrix Computations*, 3rd\n ed., Baltimore, MD, Johns Hopkins University Press, 1996,\n pg. 8.\n\n Examples\n --------\n Make a (*very* coarse) grid for computing a Mandelbrot set:\n\n >>> rl = np.outer(np.ones((5,)), np.linspace(-2, 2, 5))\n >>> rl\n array([[-2., -1., 0., 1., 2.],\n [-2., -1., 0., 1., 2.],\n [-2., -1., 0., 1., 2.],\n [-2., -1., 0., 1., 2.],\n [-2., -1., 0., 1., 2.]])\n >>> im = np.outer(1j*np.linspace(2, -2, 5), np.ones((5,)))\n >>> im\n array([[ 0.+2.j, 0.+2.j, 0.+2.j, 0.+2.j, 0.+2.j],\n [ 0.+1.j, 0.+1.j, 0.+1.j, 0.+1.j, 0.+1.j],\n [ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],\n [ 0.-1.j, 0.-1.j, 0.-1.j, 0.-1.j, 0.-1.j],\n [ 0.-2.j, 0.-2.j, 0.-2.j, 0.-2.j, 0.-2.j]])\n >>> grid = rl + im\n >>> grid\n array([[-2.+2.j, -1.+2.j, 0.+2.j, 1.+2.j, 2.+2.j],\n [-2.+1.j, -1.+1.j, 0.+1.j, 1.+1.j, 2.+1.j],\n [-2.+0.j, -1.+0.j, 0.+0.j, 1.+0.j, 2.+0.j],\n [-2.-1.j, -1.-1.j, 0.-1.j, 1.-1.j, 2.-1.j],\n [-2.-2.j, -1.-2.j, 0.-2.j, 1.-2.j, 2.-2.j]])\n\n An example using a \"vector\" of letters:\n\n >>> x = np.array(['a', 'b', 'c'], dtype=object)\n >>> np.""outer(x, [1, 2, 3])\n array([[a, aa, aaa],\n [b, bb, bbb],\n [c, cc, ccc]], dtype=object)\n \n "; static char __pyx_k_869[] = "packbits (line 8454)"; static char __pyx_k_870[] = "packbits(myarray, axis=None)\n\n Packs the elements of a binary-valued array into bits in a uint8 array.\n\n The result is padded to full bytes by inserting zero bits at the end.\n\n Parameters\n ----------\n myarray : array_like\n An integer type array whose elements should be packed to bits.\n axis : int, optional\n The dimension over which bit-packing is done.\n ``None`` implies packing the flattened array.\n\n Returns\n -------\n packed : ndarray\n Array of type uint8 whose elements represent bits corresponding to the\n logical (0 or nonzero) value of the input elements. The shape of\n `packed` has the same number of dimensions as the input (unless `axis`\n is None, in which case the output is 1-D).\n\n See Also\n --------\n unpackbits: Unpacks elements of a uint8 array into a binary-valued output\n array.\n\n Examples\n --------\n >>> a = np.array([[[1,0,1],\n ... [0,1,0]],\n ... [[1,1,0],\n ... [0,0,1]]])\n >>> b = np.packbits(a, axis=-1)\n >>> b\n array([[[160],[64]],[[192],[32]]], dtype=uint8)\n\n Note that in binary 160 = 1010 0000, 64 = 0100 0000, 192 = 1100 0000,\n and 32 = 0010 0000.\n \n "; static char __pyx_k_871[] = "percentile (line 8500)"; static char __pyx_k_872[] = "Compute the qth percentile of the data along the specified axis.\n\n Returns the qth percentile of the array elements.\n\n Parameters\n ----------\n a : array_like\n Input array or object that can be converted to an array.\n q : float in range of [0,100] (or sequence of floats)\n Percentile to compute which must be between 0 and 100 inclusive.\n axis : int, optional\n Axis along which the percentiles are computed. The default (None)\n is to compute the median along a flattened version of the array.\n out : ndarray, optional\n Alternative output array in which to place the result. It must\n have the same shape and buffer length as the expected output,\n but the type (of the output) will be cast if necessary.\n overwrite_input : bool, optional\n If True, then allow use of memory of input array `a` for\n calculations. The input array will be modified by the call to\n median. This will save memory when you do not need to preserve\n the contents of the input array. Treat the input as undefined,\n but it will probably be fully or partially sorted.\n Default is False. Note that, if `overwrite_input` is True and the\n input is not already an array, an error will be raised.\n\n Returns\n -------\n pcntile : ndarray\n A new array holding the result (unless `out` is specified, in\n which case that array is returned instead). If the input contains\n integers, or floats of smaller precision than 64, then the output\n data-type is float64. Otherwise, the output data-type is the same\n as that of the input.\n\n See Also\n --------\n mean, median\n\n Notes\n -----\n Given a vector V of length N, the qth percentile of V is the qth ranked\n value in a sorted copy of V. A weighted average of the two nearest\n neighbors is used if the normalized ranking does not match q exactly.\n The same as the med""ian if ``q=0.5``, the same as the minimum if ``q=0``\n and the same as the maximum if ``q=1``.\n\n Examples\n --------\n >>> a = np.array([[10, 7, 4], [3, 2, 1]])\n >>> a\n array([[10, 7, 4],\n [ 3, 2, 1]])\n >>> np.percentile(a, 50)\n 3.5\n >>> np.percentile(a, 0.5, axis=0)\n array([ 6.5, 4.5, 2.5])\n >>> np.percentile(a, 50, axis=1)\n array([ 7., 2.])\n\n >>> m = np.percentile(a, 50, axis=0)\n >>> out = np.zeros_like(m)\n >>> np.percentile(a, 50, axis=0, out=m)\n array([ 6.5, 4.5, 2.5])\n >>> m\n array([ 6.5, 4.5, 2.5])\n\n >>> b = a.copy()\n >>> np.percentile(b, 50, axis=1, overwrite_input=True)\n array([ 7., 2.])\n >>> assert not np.all(a==b)\n >>> b = a.copy()\n >>> np.percentile(b, 50, axis=None, overwrite_input=True)\n 3.5\n \n "; static char __pyx_k_873[] = "piecewise (line 8580)"; static char __pyx_k_874[] = "Evaluate a piecewise-defined function.\n\n Given a set of conditions and corresponding functions, evaluate each\n function on the input data wherever its condition is true.\n\n Parameters\n ----------\n x : ndarray\n The input domain.\n condlist : list of bool arrays\n Each boolean array corresponds to a function in `funclist`. Wherever\n `condlist[i]` is True, `funclist[i](x)` is used as the output value.\n\n Each boolean array in `condlist` selects a piece of `x`,\n and should therefore be of the same shape as `x`.\n\n The length of `condlist` must correspond to that of `funclist`.\n If one extra function is given, i.e. if\n ``len(funclist) - len(condlist) == 1``, then that extra function\n is the default value, used wherever all conditions are false.\n funclist : list of callables, f(x,*args,**kw), or scalars\n Each function is evaluated over `x` wherever its corresponding\n condition is True. It should take an array as input and give an array\n or a scalar value as output. If, instead of a callable,\n a scalar is provided then a constant function (``lambda x: scalar``) is\n assumed.\n args : tuple, optional\n Any further arguments given to `piecewise` are passed to the functions\n upon execution, i.e., if called ``piecewise(..., ..., 1, 'a')``, then\n each function is called as ``f(x, 1, 'a')``.\n kw : dict, optional\n Keyword arguments used in calling `piecewise` are passed to the\n functions upon execution, i.e., if called\n ``piecewise(..., ..., lambda=1)``, then each function is called as\n ``f(x, lambda=1)``.\n\n Returns\n -------\n out : ndarray\n The output is the same shape and type as x and is found by\n calling the functions in `funclist` on the appropriate portions of `x`,\n as defined by the boolean arrays in `condlist`. Portions not covered\n "" by any condition have undefined values.\n\n\n See Also\n --------\n choose, select, where\n\n Notes\n -----\n This is similar to choose or select, except that functions are\n evaluated on elements of `x` that satisfy the corresponding condition from\n `condlist`.\n\n The result is::\n\n |--\n |funclist[0](x[condlist[0]])\n out = |funclist[1](x[condlist[1]])\n |...\n |funclist[n2](x[condlist[n2]])\n |--\n\n Examples\n --------\n Define the sigma function, which is -1 for ``x < 0`` and +1 for ``x >= 0``.\n\n >>> x = np.arange(6) - 2.5\n >>> np.piecewise(x, [x < 0, x >= 0], [-1, 1])\n array([-1., -1., -1., 1., 1., 1.])\n\n Define the absolute value, which is ``-x`` for ``x <0`` and ``x`` for\n ``x >= 0``.\n\n >>> np.piecewise(x, [x < 0, x >= 0], [lambda x: -x, lambda x: x])\n array([ 2.5, 1.5, 0.5, 0.5, 1.5, 2.5])\n \n "; static char __pyx_k_875[] = "place (line 8702)"; static char __pyx_k_876[] = "Change elements of an array based on conditional and input values.\n\n Similar to ``np.putmask(arr, mask, vals)``, the difference is that `place`\n uses the first N elements of `vals`, where N is the number of True values\n in `mask`, while `putmask` uses the elements where `mask` is True.\n\n Note that `extract` does the exact opposite of `place`.\n\n Parameters\n ----------\n arr : array_like\n Array to put data into.\n mask : array_like\n Boolean mask array. Must have the same size as `a`.\n vals : 1-D sequence\n Values to put into `a`. Only the first N elements are used, where\n N is the number of True values in `mask`. If `vals` is smaller\n than N it will be repeated.\n\n See Also\n --------\n putmask, put, take, extract\n\n Examples\n --------\n >>> arr = np.arange(6).reshape(2, 3)\n >>> np.place(arr, arr>2, [44, 55])\n >>> arr\n array([[ 0, 1, 2],\n [44, 55, 44]])\n \n "; static char __pyx_k_877[] = "pmt (line 8738)"; static char __pyx_k_878[] = "Compute the payment against loan principal plus interest.\n\n Given:\n * a present value, `pv` (e.g., an amount borrowed)\n * a future value, `fv` (e.g., 0)\n * an interest `rate` compounded once per period, of which\n there are\n * `nper` total\n * and (optional) specification of whether payment is made\n at the beginning (`when` = {'begin', 1}) or the end\n (`when` = {'end', 0}) of each period\n\n Return:\n the (fixed) periodic payment.\n\n Parameters\n ----------\n rate : array_like\n Rate of interest (per period)\n nper : array_like\n Number of compounding periods\n pv : array_like\n Present value\n fv : array_like (optional)\n Future value (default = 0)\n when : {{'begin', 1}, {'end', 0}}, {string, int}\n When payments are due ('begin' (1) or 'end' (0))\n\n Returns\n -------\n out : ndarray\n Payment against loan plus interest. If all input is scalar, returns a\n scalar float. If any input is array_like, returns payment for each\n input element. If multiple inputs are array_like, they all must have\n the same shape.\n\n Notes\n -----\n The payment is computed by solving the equation::\n\n fv +\n pv*(1 + rate)**nper +\n pmt*(1 + rate*when)/rate*((1 + rate)**nper - 1) == 0\n\n or, when ``rate == 0``::\n\n fv + pv + pmt * nper == 0\n\n for ``pmt``.\n\n Note that computing a monthly mortgage payment is only\n one use for this function. For example, pmt returns the\n periodic deposit one must make to achieve a specified\n future balance given an initial deposit, a fixed,\n periodically compounded interest rate, and the total\n number of periods.\n\n References\n ----------\n .. [WRW] Wheeler, D. A., E. Rathke, and R. Weir (Eds.) (2009, May).\n Open Document Format for Office Applications (OpenDocument)v1.2,\n Part 2: Recalculated Formula (OpenFormula) F""ormat - Annotated Version,\n Pre-Draft 12. Organization for the Advancement of Structured Information\n Standards (OASIS). Billerica, MA, USA. [ODT Document].\n Available:\n http://www.oasis-open.org/committees/documents.php\n ?wg_abbrev=office-formulaOpenDocument-formula-20090508.odt\n\n Examples\n --------\n What is the monthly payment needed to pay off a $200,000 loan in 15\n years at an annual interest rate of 7.5%?\n\n >>> np.pmt(0.075/12, 12*15, 200000)\n -1854.0247200054619\n\n In order to pay-off (i.e., have a future-value of 0) the $200,000 obtained\n today, a monthly payment of $1,854.02 would be required. Note that this\n example illustrates usage of `fv` having a default value of 0.\n \n "; static char __pyx_k_879[] = "poly (line 8823)"; static char __pyx_k_880[] = "Find the coefficients of a polynomial with the given sequence of roots.\n\n Returns the coefficients of the polynomial whose leading coefficient\n is one for the given sequence of zeros (multiple roots must be included\n in the sequence as many times as their multiplicity; see Examples).\n A square matrix (or array, which will be treated as a matrix) can also\n be given, in which case the coefficients of the characteristic polynomial\n of the matrix are returned.\n\n Parameters\n ----------\n seq_of_zeros : array_like, shape (N,) or (N, N)\n A sequence of polynomial roots, or a square array or matrix object.\n\n Returns\n -------\n c : ndarray\n 1D array of polynomial coefficients from highest to lowest degree:\n\n ``c[0] * x**(N) + c[1] * x**(N-1) + ... + c[N-1] * x + c[N]``\n where c[0] always equals 1.\n\n Raises\n ------\n ValueError\n If input is the wrong shape (the input must be a 1-D or square\n 2-D array).\n\n See Also\n --------\n polyval : Evaluate a polynomial at a point.\n roots : Return the roots of a polynomial.\n polyfit : Least squares polynomial fit.\n poly1d : A one-dimensional polynomial class.\n\n Notes\n -----\n Specifying the roots of a polynomial still leaves one degree of\n freedom, typically represented by an undetermined leading\n coefficient. [1]_ In the case of this function, that coefficient -\n the first one in the returned array - is always taken as one. (If\n for some reason you have one other point, the only automatic way\n presently to leverage that information is to use ``polyfit``.)\n\n The characteristic polynomial, :math:`p_a(t)`, of an `n`-by-`n`\n matrix **A** is given by\n\n :math:`p_a(t) = \\mathrm{det}(t\\, \\mathbf{I} - \\mathbf{A})`,\n\n where **I** is the `n`-by-`n` identity matrix. [2]_\n\n References\n ----------\n .. [1] M. Sullivan and M. Sullivan, III, \"Algebra a""nd Trignometry,\n Enhanced With Graphing Utilities,\" Prentice-Hall, pg. 318, 1996.\n\n .. [2] G. Strang, \"Linear Algebra and Its Applications, 2nd Edition,\"\n Academic Press, pg. 182, 1980.\n\n Examples\n --------\n Given a sequence of a polynomial's zeros:\n\n >>> np.poly((0, 0, 0)) # Multiple root example\n array([1, 0, 0, 0])\n \n The line above represents z**3 + 0*z**2 + 0*z + 0.\n\n >>> np.poly((-1./2, 0, 1./2))\n array([ 1. , 0. , -0.25, 0. ])\n \n The line above represents z**3 - z/4\n\n >>> np.poly((np.random.random(1.)[0], 0, np.random.random(1.)[0]))\n array([ 1. , -0.77086955, 0.08618131, 0. ]) #random\n\n Given a square array object:\n\n >>> P = np.array([[0, 1./3], [-1./2, 0]])\n >>> np.poly(P)\n array([ 1. , 0. , 0.16666667])\n\n Or a square matrix object:\n\n >>> np.poly(np.matrix(P))\n array([ 1. , 0. , 0.16666667])\n\n Note how in all cases the leading coefficient is always 1.\n \n "; static char __pyx_k_881[] = "polyadd (line 8917)"; static char __pyx_k_882[] = "Find the sum of two polynomials.\n\n Returns the polynomial resulting from the sum of two input polynomials.\n Each input must be either a poly1d object or a 1D sequence of polynomial\n coefficients, from highest to lowest degree.\n\n Parameters\n ----------\n a1, a2 : array_like or poly1d object\n Input polynomials.\n\n Returns\n -------\n out : ndarray or poly1d object\n The sum of the inputs. If either input is a poly1d object, then the\n output is also a poly1d object. Otherwise, it is a 1D array of\n polynomial coefficients from highest to lowest degree.\n\n See Also\n --------\n poly1d : A one-dimensional polynomial class.\n poly, polyadd, polyder, polydiv, polyfit, polyint, polysub, polyval\n\n Examples\n --------\n >>> np.polyadd([1, 2], [9, 5, 4])\n array([9, 6, 6])\n\n Using poly1d objects:\n\n >>> p1 = np.poly1d([1, 2])\n >>> p2 = np.poly1d([9, 5, 4])\n >>> print p1\n 1 x + 2\n >>> print p2\n 2\n 9 x + 5 x + 4\n >>> print np.polyadd(p1, p2)\n 2\n 9 x + 6 x + 6\n \n "; static char __pyx_k_883[] = "polyder (line 8963)"; static char __pyx_k_884[] = "Return the derivative of the specified order of a polynomial.\n\n Parameters\n ----------\n p : poly1d or sequence\n Polynomial to differentiate.\n A sequence is interpreted as polynomial coefficients, see `poly1d`.\n m : int, optional\n Order of differentiation (default: 1)\n\n Returns\n -------\n der : poly1d\n A new polynomial representing the derivative.\n\n See Also\n --------\n polyint : Anti-derivative of a polynomial.\n poly1d : Class for one-dimensional polynomials.\n\n Examples\n --------\n The derivative of the polynomial :math:`x^3 + x^2 + x^1 + 1` is:\n\n >>> p = np.poly1d([1,1,1,1])\n >>> p2 = np.polyder(p)\n >>> p2\n poly1d([3, 2, 1])\n\n which evaluates to:\n\n >>> p2(2.)\n 17.0\n\n We can verify this, approximating the derivative with\n ``(f(x + h) - f(x))/h``:\n\n >>> (p(2. + 0.001) - p(2.)) / 0.001\n 17.007000999997857\n\n The fourth-order derivative of a 3rd-order polynomial is zero:\n\n >>> np.polyder(p, 2)\n poly1d([6, 2])\n >>> np.polyder(p, 3)\n poly1d([6])\n >>> np.polyder(p, 4)\n poly1d([ 0.])\n \n "; static char __pyx_k_885[] = "polydiv (line 9017)"; static char __pyx_k_886[] = "Returns the quotient and remainder of polynomial division.\n\n The input arrays are the coefficients (including any coefficients\n equal to zero) of the \"numerator\" (dividend) and \"denominator\"\n (divisor) polynomials, respectively.\n\n Parameters\n ----------\n u : array_like or poly1d\n Dividend polynomial's coefficients.\n\n v : array_like or poly1d\n Divisor polynomial's coefficients.\n\n Returns\n -------\n q : ndarray\n Coefficients, including those equal to zero, of the quotient.\n r : ndarray\n Coefficients, including those equal to zero, of the remainder.\n\n See Also\n --------\n poly, polyadd, polyder, polydiv, polyfit, polyint, polymul, polysub,\n polyval\n\n Notes\n -----\n Both `u` and `v` must be 0-d or 1-d (ndim = 0 or 1), but `u.ndim` need\n not equal `v.ndim`. In other words, all four possible combinations -\n ``u.ndim = v.ndim = 0``, ``u.ndim = v.ndim = 1``,\n ``u.ndim = 1, v.ndim = 0``, and ``u.ndim = 0, v.ndim = 1`` - work.\n\n Examples\n --------\n .. math:: \014rac{3x^2 + 5x + 2}{2x + 1} = 1.5x + 1.75, remainder 0.25\n\n >>> x = np.array([3.0, 5.0, 2.0])\n >>> y = np.array([2.0, 1.0])\n >>> np.polydiv(x, y)\n (array([ 1.5 , 1.75]), array([ 0.25]))\n \n "; static char __pyx_k_887[] = "polyfit (line 9064)"; static char __pyx_k_888[] = "Least squares polynomial fit.\n\n Fit a polynomial ``p(x) = p[0] * x**deg + ... + p[deg]`` of degree `deg`\n to points `(x, y)`. Returns a vector of coefficients `p` that minimises\n the squared error.\n\n Parameters\n ----------\n x : array_like, shape (M,)\n x-coordinates of the M sample points ``(x[i], y[i])``.\n y : array_like, shape (M,) or (M, K)\n y-coordinates of the sample points. Several data sets of sample\n points sharing the same x-coordinates can be fitted at once by\n passing in a 2D-array that contains one dataset per column.\n deg : int\n Degree of the fitting polynomial\n rcond : float, optional\n Relative condition number of the fit. Singular values smaller than this\n relative to the largest singular value will be ignored. The default\n value is len(x)*eps, where eps is the relative precision of the float\n type, about 2e-16 in most cases.\n full : bool, optional\n Switch determining nature of return value. When it is\n False (the default) just the coefficients are returned, when True\n diagnostic information from the singular value decomposition is also\n returned.\n\n Returns\n -------\n p : ndarray, shape (M,) or (M, K)\n Polynomial coefficients, highest power first.\n If `y` was 2-D, the coefficients for `k`-th data set are in ``p[:,k]``.\n\n residuals, rank, singular_values, rcond : present only if `full` = True\n Residuals of the least-squares fit, the effective rank of the scaled\n Vandermonde coefficient matrix, its singular values, and the specified\n value of `rcond`. For more details, see `linalg.lstsq`.\n\n Warns\n -----\n RankWarning\n The rank of the coefficient matrix in the least-squares fit is\n deficient. The warning is only raised if `full` = False.\n\n The warnings can be turned off by\n\n >>> import warnings\n >>> war""nings.simplefilter('ignore', np.RankWarning)\n\n See Also\n --------\n polyval : Computes polynomial values.\n linalg.lstsq : Computes a least-squares fit.\n scipy.interpolate.UnivariateSpline : Computes spline fits.\n\n Notes\n -----\n The solution minimizes the squared error\n\n .. math ::\n E = \\sum_{j=0}^k |p(x_j) - y_j|^2\n\n in the equations::\n\n x[0]**n * p[n] + ... + x[0] * p[1] + p[0] = y[0]\n x[1]**n * p[n] + ... + x[1] * p[1] + p[0] = y[1]\n ...\n x[k]**n * p[n] + ... + x[k] * p[1] + p[0] = y[k]\n\n The coefficient matrix of the coefficients `p` is a Vandermonde matrix.\n\n `polyfit` issues a `RankWarning` when the least-squares fit is badly\n conditioned. This implies that the best fit is not well-defined due\n to numerical error. The results may be improved by lowering the polynomial\n degree or by replacing `x` by `x` - `x`.mean(). The `rcond` parameter\n can also be set to a value smaller than its default, but the resulting\n fit may be spurious: including contributions from the small singular\n values can add numerical noise to the result.\n\n Note that fitting polynomial coefficients is inherently badly conditioned\n when the degree of the polynomial is large or the interval of sample points\n is badly centered. The quality of the fit should always be checked in these\n cases. When polynomial fits are not satisfactory, splines may be a good\n alternative.\n\n References\n ----------\n .. [1] Wikipedia, \"Curve fitting\",\n http://en.wikipedia.org/wiki/Curve_fitting\n .. [2] Wikipedia, \"Polynomial interpolation\",\n http://en.wikipedia.org/wiki/Polynomial_interpolation\n\n Examples\n --------\n >>> x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])\n >>> y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])\n >>> z = np.polyfit(x, y, 3)\n >>> z\n array([ 0.08703704, -0.81349206, 1.69312169, -0.03968254]"")\n\n It is convenient to use `poly1d` objects for dealing with polynomials:\n\n >>> p = np.poly1d(z)\n >>> p(0.5)\n 0.6143849206349179\n >>> p(3.5)\n -0.34732142857143039\n >>> p(10)\n 22.579365079365115\n\n High-order polynomials may oscillate wildly:\n\n >>> p30 = np.poly1d(np.polyfit(x, y, 30))\n /... RankWarning: Polyfit may be poorly conditioned...\n >>> p30(4)\n -0.80000000000000204\n >>> p30(5)\n -0.99999999999999445\n >>> p30(4.5)\n -0.10547061179440398\n\n Illustration:\n\n >>> import matplotlib.pyplot as plt\n >>> xp = np.linspace(-2, 6, 100)\n >>> plt.plot(x, y, '.', xp, p(xp), '-', xp, p30(xp), '--')\n [, , ]\n >>> plt.ylim(-2,2)\n (-2, 2)\n >>> plt.show()\n \n "; static char __pyx_k_889[] = "polyint (line 9200)"; static char __pyx_k_890[] = "Return an antiderivative (indefinite integral) of a polynomial.\n\n The returned order `m` antiderivative `P` of polynomial `p` satisfies\n :math:`\014rac{d^m}{dx^m}P(x) = p(x)` and is defined up to `m - 1`\n integration constants `k`. The constants determine the low-order\n polynomial part\n\n .. math:: \014rac{k_{m-1}}{0!} x^0 + \\ldots + \014rac{k_0}{(m-1)!}x^{m-1}\n\n of `P` so that :math:`P^{(j)}(0) = k_{m-j-1}`.\n\n Parameters\n ----------\n p : {array_like, poly1d}\n Polynomial to differentiate.\n A sequence is interpreted as polynomial coefficients, see `poly1d`.\n m : int, optional\n Order of the antiderivative. (Default: 1)\n k : {None, list of `m` scalars, scalar}, optional\n Integration constants. They are given in the order of integration:\n those corresponding to highest-order terms come first.\n\n If ``None`` (default), all constants are assumed to be zero.\n If `m = 1`, a single scalar can be given instead of a list.\n\n See Also\n --------\n polyder : derivative of a polynomial\n poly1d.integ : equivalent method\n\n Examples\n --------\n The defining property of the antiderivative:\n\n >>> p = np.poly1d([1,1,1])\n >>> P = np.polyint(p)\n >>> P\n poly1d([ 0.33333333, 0.5 , 1. , 0. ])\n >>> np.polyder(P) == p\n True\n\n The integration constants default to zero, but can be specified:\n\n >>> P = np.polyint(p, 3)\n >>> P(0)\n 0.0\n >>> np.polyder(P)(0)\n 0.0\n >>> np.polyder(P, 2)(0)\n 0.0\n >>> P = np.polyint(p, 3, k=[6,5,3])\n >>> P\n poly1d([ 0.01666667, 0.04166667, 0.16666667, 3. , 5. , 3. ])\n\n Note that 3 = 6 / 2!, and that the constants are given in the order of\n integrations. Constant of the highest-order polynomial term comes first:\n\n >>> np.polyder(P, 2)(0)\n 6.0\n >>> np.polyder(P, 1)(0)\n 5.0\n >>> P(0)\n 3.0\n \n "; static char __pyx_k_891[] = "polymul (line 9269)"; static char __pyx_k_892[] = "Find the product of two polynomials.\n\n Finds the polynomial resulting from the multiplication of the two input\n polynomials. Each input must be either a poly1d object or a 1D sequence\n of polynomial coefficients, from highest to lowest degree.\n\n Parameters\n ----------\n a1, a2 : array_like or poly1d object\n Input polynomials.\n\n Returns\n -------\n out : ndarray or poly1d object\n The polynomial resulting from the multiplication of the inputs. If\n either inputs is a poly1d object, then the output is also a poly1d\n object. Otherwise, it is a 1D array of polynomial coefficients from\n highest to lowest degree.\n\n See Also\n --------\n poly1d : A one-dimensional polynomial class.\n poly, polyadd, polyder, polydiv, polyfit, polyint, polysub,\n polyval\n\n Examples\n --------\n >>> np.polymul([1, 2, 3], [9, 5, 1])\n array([ 9, 23, 38, 17, 3])\n\n Using poly1d objects:\n\n >>> p1 = np.poly1d([1, 2, 3])\n >>> p2 = np.poly1d([9, 5, 1])\n >>> print p1\n 2\n 1 x + 2 x + 3\n >>> print p2\n 2\n 9 x + 5 x + 1\n >>> print np.polymul(p1, p2)\n 4 3 2\n 9 x + 23 x + 38 x + 17 x + 3\n \n "; static char __pyx_k_893[] = "polysub (line 9318)"; static char __pyx_k_894[] = "Difference (subtraction) of two polynomials.\n\n Given two polynomials `a1` and `a2`, returns ``a1 - a2``.\n `a1` and `a2` can be either array_like sequences of the polynomials'\n coefficients (including coefficients equal to zero), or `poly1d` objects.\n\n Parameters\n ----------\n a1, a2 : array_like or poly1d\n Minuend and subtrahend polynomials, respectively.\n\n Returns\n -------\n out : ndarray or poly1d\n Array or `poly1d` object of the difference polynomial's coefficients.\n\n See Also\n --------\n polyval, polydiv, polymul, polyadd\n\n Examples\n --------\n .. math:: (2 x^2 + 10 x - 2) - (3 x^2 + 10 x -4) = (-x^2 + 2)\n\n >>> np.polysub([2, 10, -2], [3, 10, -4])\n array([-1, 0, 2])\n \n "; static char __pyx_k_895[] = "polyval (line 9350)"; static char __pyx_k_896[] = "Evaluate a polynomial at specific values.\n\n If `p` is of length N, this function returns the value:\n\n ``p[0]*x**(N-1) + p[1]*x**(N-2) + ... + p[N-2]*x + p[N-1]``\n\n If `x` is a sequence, then `p(x)` is returned for each element of `x`.\n If `x` is another polynomial then the composite polynomial `p(x(t))`\n is returned.\n\n Parameters\n ----------\n p : array_like or poly1d object\n 1D array of polynomial coefficients (including coefficients equal\n to zero) from highest degree to the constant term, or an\n instance of poly1d.\n x : array_like or poly1d object\n A number, a 1D array of numbers, or an instance of poly1d, \"at\"\n which to evaluate `p`.\n\n Returns\n -------\n values : ndarray or poly1d\n If `x` is a poly1d instance, the result is the composition of the two\n polynomials, i.e., `x` is \"substituted\" in `p` and the simplified\n result is returned. In addition, the type of `x` - array_like or\n poly1d - governs the type of the output: `x` array_like => `values`\n array_like, `x` a poly1d object => `values` is also.\n\n See Also\n --------\n poly1d: A polynomial class.\n\n Notes\n -----\n Horner's scheme [1]_ is used to evaluate the polynomial. Even so,\n for polynomials of high degree the values may be inaccurate due to\n rounding errors. Use carefully.\n\n References\n ----------\n .. [1] I. N. Bronshtein, K. A. Semendyayev, and K. A. Hirsch (Eng.\n trans. Ed.), *Handbook of Mathematics*, New York, Van Nostrand\n Reinhold Co., 1985, pg. 720.\n\n Examples\n --------\n >>> np.polyval([3,0,1], 5) # 3 * 5**2 + 0 * 5**1 + 1\n 76\n >>> np.polyval([3,0,1], np.poly1d(5))\n poly1d([ 76.])\n >>> np.polyval(np.poly1d([3,0,1]), 5)\n 76\n >>> np.polyval(np.poly1d([3,0,1]), np.poly1d(5))\n poly1d([ 76.])\n \n "; static char __pyx_k_897[] = "prod (line 9438)"; static char __pyx_k_898[] = "Return the product of array elements over a given axis.\n\n Parameters\n ----------\n a : array_like\n Input data.\n axis : int, optional\n Axis over which the product is taken. By default, the product\n of all elements is calculated.\n dtype : data-type, optional\n The data-type of the returned array, as well as of the accumulator\n in which the elements are multiplied. By default, if `a` is of\n integer type, `dtype` is the default platform integer. (Note: if\n the type of `a` is unsigned, then so is `dtype`.) Otherwise,\n the dtype is the same as that of `a`.\n out : ndarray, optional\n Alternative output array in which to place the result. It must have\n the same shape as the expected output, but the type of the\n output values will be cast if necessary.\n\n Returns\n -------\n product_along_axis : ndarray, see `dtype` parameter above.\n An array shaped as `a` but with the specified axis removed.\n Returns a reference to `out` if specified.\n\n See Also\n --------\n ndarray.prod : equivalent method\n numpy.doc.ufuncs : Section \"Output arguments\"\n\n Notes\n -----\n Arithmetic is modular when using integer types, and no error is\n raised on overflow. That means that, on a 32-bit platform:\n\n >>> x = np.array([536870910, 536870910, 536870910, 536870910])\n >>> np.prod(x) #random\n 16\n\n Examples\n --------\n By default, calculate the product of all elements:\n\n >>> np.prod([1.,2.])\n 2.0\n\n Even when the input array is two-dimensional:\n\n >>> np.prod([[1.,2.],[3.,4.]])\n 24.0\n\n But we can also specify the axis over which to multiply:\n\n >>> np.prod([[1.,2.],[3.,4.]], axis=1)\n array([ 2., 12.])\n\n If the type of `x` is unsigned, then the output type is\n the unsigned platform integer:\n\n >>> x = np.array([1, 2, 3], dtype=np.uint8)\n >>> np.prod(x).dtype ""== np.uint\n True\n\n If `x` is of a signed integer type, then the output type\n is the default platform integer:\n\n >>> x = np.array([1, 2, 3], dtype=np.int8)\n >>> np.prod(x).dtype == np.int\n True\n \n "; static char __pyx_k_899[] = "promote_types (line 9525)"; static char __pyx_k_900[] = "promote_types(type1, type2)\n\n Returns the data type with the smallest size and smallest scalar\n kind to which both ``type1`` and ``type2`` may be safely cast.\n The returned data type is always in native byte order.\n\n This function is symmetric and associative.\n\n Parameters\n ----------\n type1 : dtype or dtype specifier\n First data type.\n type2 : dtype or dtype specifier\n Second data type.\n\n Returns\n -------\n out : dtype\n The promoted data type.\n\n Notes\n -----\n .. versionadded:: 1.6.0\n\n See Also\n --------\n result_type, dtype, can_cast\n\n Examples\n --------\n >>> np.promote_types('f4', 'f8')\n dtype('float64')\n\n >>> np.promote_types('i8', 'f4')\n dtype('float64')\n\n >>> np.promote_types('>i8', '>> np.promote_types('i1', 'S8')\n Traceback (most recent call last):\n File \"\", line 1, in \n TypeError: invalid type promotion\n \n "; static char __pyx_k_901[] = "ptp (line 9575)"; static char __pyx_k_902[] = "Range of values (maximum - minimum) along an axis.\n\n The name of the function comes from the acronym for 'peak to peak'.\n\n Parameters\n ----------\n a : array_like\n Input values.\n axis : int, optional\n Axis along which to find the peaks. By default, flatten the\n array.\n out : array_like\n Alternative output array in which to place the result. It must\n have the same shape and buffer length as the expected output,\n but the type of the output values will be cast if necessary.\n\n Returns\n -------\n ptp : ndarray\n A new array holding the result, unless `out` was\n specified, in which case a reference to `out` is returned.\n\n Examples\n --------\n >>> x = np.arange(4).reshape((2,2))\n >>> x\n array([[0, 1],\n [2, 3]])\n\n >>> np.ptp(x, axis=0)\n array([2, 2])\n\n >>> np.ptp(x, axis=1)\n array([1, 1])\n \n "; static char __pyx_k_903[] = "put (line 9615)"; static char __pyx_k_904[] = "Replaces specified elements of an array with given values.\n\n The indexing works on the flattened target array. `put` is roughly\n equivalent to:\n\n ::\n\n a.flat[ind] = v\n\n Parameters\n ----------\n a : ndarray\n Target array.\n ind : array_like\n Target indices, interpreted as integers.\n v : array_like\n Values to place in `a` at target indices. If `v` is shorter than\n `ind` it will be repeated as necessary.\n mode : {'raise', 'wrap', 'clip'}, optional\n Specifies how out-of-bounds indices will behave.\n\n * 'raise' -- raise an error (default)\n * 'wrap' -- wrap around\n * 'clip' -- clip to the range\n\n 'clip' mode means that all indices that are too large are replaced\n by the index that addresses the last element along that axis. Note\n that this disables indexing with negative numbers.\n\n See Also\n --------\n putmask, place\n\n Examples\n --------\n >>> a = np.arange(5)\n >>> np.put(a, [0, 2], [-44, -55])\n >>> a\n array([-44, 1, -55, 3, 4])\n\n >>> a = np.arange(5)\n >>> np.put(a, 22, -5, mode='clip')\n >>> a\n array([ 0, 1, 2, 3, -5])\n \n "; static char __pyx_k_905[] = "putmask (line 9665)"; static char __pyx_k_906[] = "putmask(a, mask, values)\n\n Changes elements of an array based on conditional and input values.\n\n Sets ``a.flat[n] = values[n]`` for each n where ``mask.flat[n]==True``.\n\n If `values` is not the same size as `a` and `mask` then it will repeat.\n This gives behavior different from ``a[mask] = values``.\n\n Parameters\n ----------\n a : array_like\n Target array.\n mask : array_like\n Boolean mask array. It has to be the same shape as `a`.\n values : array_like\n Values to put into `a` where `mask` is True. If `values` is smaller\n than `a` it will be repeated.\n\n See Also\n --------\n place, put, take\n\n Examples\n --------\n >>> x = np.arange(6).reshape(2, 3)\n >>> np.putmask(x, x>2, x**2)\n >>> x\n array([[ 0, 1, 2],\n [ 9, 16, 25]])\n\n If `values` is smaller than `a` it is repeated:\n\n >>> x = np.arange(5)\n >>> np.putmask(x, x>1, [-33, -44])\n >>> x\n array([ 0, 1, -33, -44, -33])\n \n "; static char __pyx_k_907[] = "pv (line 9709)"; static char __pyx_k_908[] = "Compute the present value.\n\n Given:\n * a future value, `fv`\n * an interest `rate` compounded once per period, of which\n there are\n * `nper` total\n * a (fixed) payment, `pmt`, paid either\n * at the beginning (`when` = {'begin', 1}) or the end\n (`when` = {'end', 0}) of each period\n\n Return:\n the value now\n\n Parameters\n ----------\n rate : array_like\n Rate of interest (per period)\n nper : array_like\n Number of compounding periods\n pmt : array_like\n Payment\n fv : array_like, optional\n Future value\n when : {{'begin', 1}, {'end', 0}}, {string, int}, optional\n When payments are due ('begin' (1) or 'end' (0))\n\n Returns\n -------\n out : ndarray, float\n Present value of a series of payments or investments.\n\n Notes\n -----\n The present value is computed by solving the equation::\n\n fv +\n pv*(1 + rate)**nper +\n pmt*(1 + rate*when)/rate*((1 + rate)**nper - 1) = 0\n\n or, when ``rate = 0``::\n\n fv + pv + pmt * nper = 0\n\n for `pv`, which is then returned.\n\n References\n ----------\n .. [WRW] Wheeler, D. A., E. Rathke, and R. Weir (Eds.) (2009, May).\n Open Document Format for Office Applications (OpenDocument)v1.2,\n Part 2: Recalculated Formula (OpenFormula) Format - Annotated Version,\n Pre-Draft 12. Organization for the Advancement of Structured Information\n Standards (OASIS). Billerica, MA, USA. [ODT Document].\n Available:\n http://www.oasis-open.org/committees/documents.php?wg_abbrev=office-formula\n OpenDocument-formula-20090508.odt\n\n Examples\n --------\n What is the present value (e.g., the initial investment)\n of an investment that needs to total $15692.93\n after 10 years of saving $100 every month? Assume the\n interest rate is 5% (annually) compounded monthly.\n\n >>> np.pv(0.05/12, 10*12, -100, 15692.93)\n "" -100.00067131625819\n\n By convention, the negative sign represents cash flow out\n (i.e., money not available today). Thus, to end up with\n $15,692.93 in 10 years saving $100 a month at 5% annual\n interest, one's initial deposit should also be $100.\n\n If any input is array_like, ``pv`` returns an array of equal shape.\n Let's compare different interest rates in the example above:\n\n >>> a = np.array((0.05, 0.04, 0.03))/12\n >>> np.pv(a, 10*12, -100, 15692.93)\n array([ -100.00067132, -649.26771385, -1273.78633713])\n\n So, to end up with the same $15692.93 under the same $100 per month\n \"savings plan,\" for annual interest rates of 4% and 3%, one would\n need initial investments of $649.27 and $1273.79, respectively.\n \n "; static char __pyx_k_909[] = "rank (line 9797)"; static char __pyx_k_910[] = "Return the number of dimensions of an array.\n\n If `a` is not already an array, a conversion is attempted.\n Scalars are zero dimensional.\n\n Parameters\n ----------\n a : array_like\n Array whose number of dimensions is desired. If `a` is not an array,\n a conversion is attempted.\n\n Returns\n -------\n number_of_dimensions : int\n The number of dimensions in the array.\n\n See Also\n --------\n ndim : equivalent function\n ndarray.ndim : equivalent property\n shape : dimensions of array\n ndarray.shape : dimensions of array\n\n Notes\n -----\n In the old Numeric package, `rank` was the term used for the number of\n dimensions, but in Numpy `ndim` is used instead.\n\n Examples\n --------\n >>> np.rank([1,2,3])\n 1\n >>> np.rank(np.array([[1,2,3],[4,5,6]]))\n 2\n >>> np.rank(1)\n 0\n \n "; static char __pyx_k_911[] = "ravel (line 9884)"; static char __pyx_k_912[] = "Return a flattened array.\n\n A 1-D array, containing the elements of the input, is returned. A copy is\n made only if needed.\n\n Parameters\n ----------\n a : array_like\n Input array. The elements in ``a`` are read in the order specified by\n `order`, and packed as a 1-D array.\n order : {'C','F', 'A', 'K'}, optional\n The elements of ``a`` are read in this order. 'C' means to view\n the elements in C (row-major) order. 'F' means to view the elements\n in Fortran (column-major) order. 'A' means to view the elements\n in 'F' order if a is Fortran contiguous, 'C' order otherwise.\n 'K' means to view the elements in the order they occur in memory,\n except for reversing the data when strides are negative.\n By default, 'C' order is used.\n\n Returns\n -------\n 1d_array : ndarray\n Output of the same dtype as `a`, and of shape ``(a.size(),)``.\n\n See Also\n --------\n ndarray.flat : 1-D iterator over an array.\n ndarray.flatten : 1-D array copy of the elements of an array\n in row-major order.\n\n Notes\n -----\n In row-major order, the row index varies the slowest, and the column\n index the quickest. This can be generalized to multiple dimensions,\n where row-major order implies that the index along the first axis\n varies slowest, and the index along the last quickest. The opposite holds\n for Fortran-, or column-major, mode.\n\n Examples\n --------\n It is equivalent to ``reshape(-1, order=order)``.\n\n >>> x = np.array([[1, 2, 3], [4, 5, 6]])\n >>> print np.ravel(x)\n [1 2 3 4 5 6]\n\n >>> print x.reshape(-1)\n [1 2 3 4 5 6]\n\n >>> print np.ravel(x, order='F')\n [1 4 2 5 3 6]\n\n When ``order`` is 'A', it will preserve the array's 'C' or 'F' ordering:\n\n >>> print np.ravel(x.T)\n [1 4 2 5 3 6]\n >>> print np.ravel(x.T, order='A')\n [1 2 3 4 5 6]\n\n When ``or""der`` is 'K', it will preserve orderings that are neither 'C'\n nor 'F', but won't reverse axes:\n\n >>> a = np.arange(3)[::-1]; a\n array([2, 1, 0])\n >>> a.ravel(order='C')\n array([2, 1, 0])\n >>> a.ravel(order='K')\n array([2, 1, 0])\n\n >>> a = np.arange(12).reshape(2,3,2).swapaxes(1,2); a\n array([[[ 0, 2, 4],\n [ 1, 3, 5]],\n [[ 6, 8, 10],\n [ 7, 9, 11]]])\n >>> a.ravel(order='C')\n array([ 0, 2, 4, 1, 3, 5, 6, 8, 10, 7, 9, 11])\n >>> a.ravel(order='K')\n array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])\n \n "; static char __pyx_k_913[] = "ravel_multi_index (line 9968)"; static char __pyx_k_914[] = "ravel_multi_index(multi_index, dims, mode='raise', order='C')\n\n Converts a tuple of index arrays into an array of flat\n indices, applying boundary modes to the multi-index.\n\n Parameters\n ----------\n multi_index : tuple of array_like\n A tuple of integer arrays, one array for each dimension.\n dims : tuple of ints\n The shape of array into which the indices from ``multi_index`` apply.\n mode : {'raise', 'wrap', 'clip'}, optional\n Specifies how out-of-bounds indices are handled. Can specify\n either one mode or a tuple of modes, one mode per index.\n\n * 'raise' -- raise an error (default)\n * 'wrap' -- wrap around\n * 'clip' -- clip to the range\n\n In 'clip' mode, a negative index which would normally\n wrap will clip to 0 instead.\n order : {'C', 'F'}, optional\n Determines whether the multi-index should be viewed as indexing in\n C (row-major) order or FORTRAN (column-major) order.\n\n Returns\n -------\n raveled_indices : ndarray\n An array of indices into the flattened version of an array\n of dimensions ``dims``.\n\n See Also\n --------\n unravel_index\n\n Notes\n -----\n .. versionadded:: 1.6.0\n\n Examples\n --------\n >>> arr = np.array([[3,6,6],[4,5,1]])\n >>> np.ravel_multi_index(arr, (7,6))\n array([22, 41, 37])\n >>> np.ravel_multi_index(arr, (7,6), order='F')\n array([31, 41, 13])\n >>> np.ravel_multi_index(arr, (4,6), mode='clip')\n array([22, 23, 19])\n >>> np.ravel_multi_index(arr, (4,4), mode=('clip','wrap'))\n array([12, 13, 13])\n\n >>> np.ravel_multi_index((3,1,4,1), (6,7,8,9))\n 1621\n \n "; static char __pyx_k_915[] = "real (line 10028)"; static char __pyx_k_916[] = "Return the real part of the elements of the array.\n\n Parameters\n ----------\n val : array_like\n Input array.\n\n Returns\n -------\n out : ndarray\n Output array. If `val` is real, the type of `val` is used for the\n output. If `val` has complex elements, the returned type is float.\n\n See Also\n --------\n real_if_close, imag, angle\n\n Examples\n --------\n >>> a = np.array([1+2j, 3+4j, 5+6j])\n >>> a.real\n array([ 1., 3., 5.])\n >>> a.real = 9\n >>> a\n array([ 9.+2.j, 9.+4.j, 9.+6.j])\n >>> a.real = np.array([9, 8, 7])\n >>> a\n array([ 9.+2.j, 8.+4.j, 7.+6.j])\n \n "; static char __pyx_k_917[] = "real_if_close (line 10062)"; static char __pyx_k_918[] = "If complex input returns a real array if complex parts are close to zero.\n\n \"Close to zero\" is defined as `tol` * (machine epsilon of the type for\n `a`).\n\n Parameters\n ----------\n a : array_like\n Input array.\n tol : float\n Tolerance in machine epsilons for the complex part of the elements\n in the array.\n\n Returns\n -------\n out : ndarray\n If `a` is real, the type of `a` is used for the output. If `a`\n has complex elements, the returned type is float.\n\n See Also\n --------\n real, imag, angle\n\n Notes\n -----\n Machine epsilon varies from machine to machine and between data types\n but Python floats on most platforms have a machine epsilon equal to\n 2.2204460492503131e-16. You can use 'np.finfo(np.float).eps' to print\n out the machine epsilon for floats.\n\n Examples\n --------\n >>> np.finfo(np.float).eps\n 2.2204460492503131e-16\n\n >>> np.real_if_close([2.1 + 4e-14j], tol=1000)\n array([ 2.1])\n >>> np.real_if_close([2.1 + 4e-13j], tol=1000)\n array([ 2.1 +4.00000000e-13j])\n \n "; static char __pyx_k_919[] = "repeat (line 10146)"; static char __pyx_k_920[] = "Repeat elements of an array.\n\n Parameters\n ----------\n a : array_like\n Input array.\n repeats : {int, array of ints}\n The number of repetitions for each element. `repeats` is broadcasted\n to fit the shape of the given axis.\n axis : int, optional\n The axis along which to repeat values. By default, use the\n flattened input array, and return a flat output array.\n\n Returns\n -------\n repeated_array : ndarray\n Output array which has the same shape as `a`, except along\n the given axis.\n\n See Also\n --------\n tile : Tile an array.\n\n Examples\n --------\n >>> x = np.array([[1,2],[3,4]])\n >>> np.repeat(x, 2)\n array([1, 1, 2, 2, 3, 3, 4, 4])\n >>> np.repeat(x, 3, axis=1)\n array([[1, 1, 1, 2, 2, 2],\n [3, 3, 3, 4, 4, 4]])\n >>> np.repeat(x, [1, 2], axis=0)\n array([[1, 2],\n [3, 4],\n [3, 4]])\n \n "; static char __pyx_k_921[] = "require (line 10187)"; static char __pyx_k_922[] = "Return an ndarray of the provided type that satisfies requirements.\n\n This function is useful to be sure that an array with the correct flags\n is returned for passing to compiled code (perhaps through ctypes).\n\n Parameters\n ----------\n a : array_like\n The object to be converted to a type-and-requirement-satisfying array.\n dtype : data-type\n The required data-type, the default data-type is float64).\n requirements : str or list of str\n The requirements list can be any of the following\n\n * 'F_CONTIGUOUS' ('F') - ensure a Fortran-contiguous array\n * 'C_CONTIGUOUS' ('C') - ensure a C-contiguous array\n * 'ALIGNED' ('A') - ensure a data-type aligned array\n * 'WRITEABLE' ('W') - ensure a writable array\n * 'OWNDATA' ('O') - ensure an array that owns its own data\n\n See Also\n --------\n asarray : Convert input to an ndarray.\n asanyarray : Convert to an ndarray, but pass through ndarray subclasses.\n ascontiguousarray : Convert input to a contiguous array.\n asfortranarray : Convert input to an ndarray with column-major\n memory order.\n ndarray.flags : Information about the memory layout of the array.\n\n Notes\n -----\n The returned array will be guaranteed to have the listed requirements\n by making a copy if needed.\n\n Examples\n --------\n >>> x = np.arange(6).reshape(2,3)\n >>> x.flags\n C_CONTIGUOUS : True\n F_CONTIGUOUS : False\n OWNDATA : False\n WRITEABLE : True\n ALIGNED : True\n UPDATEIFCOPY : False\n\n >>> y = np.require(x, dtype=np.float32, requirements=['A', 'O', 'W', 'F'])\n >>> y.flags\n C_CONTIGUOUS : False\n F_CONTIGUOUS : True\n OWNDATA : True\n WRITEABLE : True\n ALIGNED : True\n UPDATEIFCOPY : False\n \n "; static char __pyx_k_923[] = "reshape (line 10246)"; static char __pyx_k_924[] = "Gives a new shape to an array without changing its data.\n\n Parameters\n ----------\n a : array_like\n Array to be reshaped.\n newshape : int or tuple of ints\n The new shape should be compatible with the original shape. If\n an integer, then the result will be a 1-D array of that length.\n One shape dimension can be -1. In this case, the value is inferred\n from the length of the array and remaining dimensions.\n order : {'C', 'F', 'A'}, optional\n Determines whether the array data should be viewed as in C\n (row-major) order, FORTRAN (column-major) order, or the C/FORTRAN\n order should be preserved.\n\n Returns\n -------\n reshaped_array : ndarray\n This will be a new view object if possible; otherwise, it will\n be a copy.\n\n\n See Also\n --------\n ndarray.reshape : Equivalent method.\n\n Notes\n -----\n\n It is not always possible to change the shape of an array without\n copying the data. If you want an error to be raise if the data is copied,\n you should assign the new shape to the shape attribute of the array::\n\n >>> a = np.zeros((10, 2))\n # A transpose make the array non-contiguous\n >>> b = a.T\n # Taking a view makes it possible to modify the shape without modiying the\n # initial object.\n >>> c = b.view()\n >>> c.shape = (20)\n AttributeError: incompatible shape for a non-contiguous array\n\n\n Examples\n --------\n >>> a = np.array([[1,2,3], [4,5,6]])\n >>> np.reshape(a, 6)\n array([1, 2, 3, 4, 5, 6])\n >>> np.reshape(a, 6, order='F')\n array([1, 4, 2, 5, 3, 6])\n\n >>> np.reshape(a, (3,-1)) # the unspecified value is inferred to be 2\n array([[1, 2],\n [3, 4],\n [5, 6]])\n \n "; static char __pyx_k_925[] = "resize (line 10308)"; static char __pyx_k_926[] = "Return a new array with the specified shape.\n\n If the new array is larger than the original array, then the new\n array is filled with repeated copies of `a`. Note that this behavior\n is different from a.resize(new_shape) which fills with zeros instead\n of repeated copies of `a`.\n\n Parameters\n ----------\n a : array_like\n Array to be resized.\n\n new_shape : int or tuple of int\n Shape of resized array.\n\n Returns\n -------\n reshaped_array : ndarray\n The new array is formed from the data in the old array, repeated\n if necessary to fill out the required number of elements. The\n data are repeated in the order that they are stored in memory.\n\n See Also\n --------\n ndarray.resize : resize an array in-place.\n\n Examples\n --------\n >>> a=np.array([[0,1],[2,3]])\n >>> np.resize(a,(1,4))\n array([[0, 1, 2, 3]])\n >>> np.resize(a,(2,4))\n array([[0, 1, 2, 3],\n [0, 1, 2, 3]])\n \n "; static char __pyx_k_927[] = "result_type (line 10366)"; static char __pyx_k_928[] = "result_type(*arrays_and_dtypes)\n\n Returns the type that results from applying the NumPy\n type promotion rules to the arguments.\n\n Type promotion in NumPy works similarly to the rules in languages\n like C++, with some slight differences. When both scalars and\n arrays are used, the array's type takes precedence and the actual value\n of the scalar is taken into account.\n\n For example, calculating 3*a, where a is an array of 32-bit floats,\n intuitively should result in a 32-bit float output. If the 3 is a\n 32-bit integer, the NumPy rules indicate it can't convert losslessly\n into a 32-bit float, so a 64-bit float should be the result type.\n By examining the value of the constant, '3', we see that it fits in\n an 8-bit integer, which can be cast losslessly into the 32-bit float.\n\n Parameters\n ----------\n arrays_and_dtypes : list of arrays and dtypes\n The operands of some operation whose result type is needed.\n\n Returns\n -------\n out : dtype\n The result type.\n\n See also\n --------\n dtype, promote_types, min_scalar_type, can_cast\n\n Notes\n -----\n .. versionadded:: 1.6.0\n\n The specific algorithm used is as follows.\n\n Categories are determined by first checking which of boolean,\n integer (int/uint), or floating point (float/complex) the maximum\n kind of all the arrays and the scalars are.\n \n If there are only scalars or the maximum category of the scalars\n is higher than the maximum category of the arrays,\n the data types are combined with :func:`promote_types`\n to produce the return value.\n\n Otherwise, `min_scalar_type` is called on each array, and\n the resulting data types are all combined with :func:`promote_types`\n to produce the return value.\n\n The set of int values is not a subset of the uint values for types\n with the same number of bits, something not reflected in\n :func:`min_scalar_type`"", but handled as a special case in `result_type`.\n\n Examples\n --------\n >>> np.result_type(3, np.arange(7, dtype='i1'))\n dtype('int8')\n\n >>> np.result_type('i4', 'c8')\n dtype('complex128')\n\n >>> np.result_type(3.0, -2)\n dtype('float64')\n \n "; static char __pyx_k_929[] = "roll (line 10437)"; static char __pyx_k_930[] = "Roll array elements along a given axis.\n\n Elements that roll beyond the last position are re-introduced at\n the first.\n\n Parameters\n ----------\n a : array_like\n Input array.\n shift : int\n The number of places by which elements are shifted.\n axis : int, optional\n The axis along which elements are shifted. By default, the array\n is flattened before shifting, after which the original\n shape is restored.\n\n Returns\n -------\n res : ndarray\n Output array, with the same shape as `a`.\n\n See Also\n --------\n rollaxis : Roll the specified axis backwards, until it lies in a\n given position.\n\n Examples\n --------\n >>> x = np.arange(10)\n >>> np.roll(x, 2)\n array([8, 9, 0, 1, 2, 3, 4, 5, 6, 7])\n\n >>> x2 = np.reshape(x, (2,5))\n >>> x2\n array([[0, 1, 2, 3, 4],\n [5, 6, 7, 8, 9]])\n >>> np.roll(x2, 1)\n array([[9, 0, 1, 2, 3],\n [4, 5, 6, 7, 8]])\n >>> np.roll(x2, 1, axis=0)\n array([[5, 6, 7, 8, 9],\n [0, 1, 2, 3, 4]])\n >>> np.roll(x2, 1, axis=1)\n array([[4, 0, 1, 2, 3],\n [9, 5, 6, 7, 8]])\n \n "; static char __pyx_k_931[] = "rollaxis (line 10488)"; static char __pyx_k_932[] = "Roll the specified axis backwards, until it lies in a given position.\n\n Parameters\n ----------\n a : ndarray\n Input array.\n axis : int\n The axis to roll backwards. The positions of the other axes do not\n change relative to one another.\n start : int, optional\n The axis is rolled until it lies before this position. The default,\n 0, results in a \"complete\" roll.\n\n Returns\n -------\n res : ndarray\n Output array.\n\n See Also\n --------\n roll : Roll the elements of an array by a number of positions along a\n given axis.\n\n Examples\n --------\n >>> a = np.ones((3,4,5,6))\n >>> np.rollaxis(a, 3, 1).shape\n (3, 6, 4, 5)\n >>> np.rollaxis(a, 2).shape\n (5, 3, 4, 6)\n >>> np.rollaxis(a, 1, 4).shape\n (3, 5, 6, 4)\n \n "; static char __pyx_k_933[] = "roots (line 10526)"; static char __pyx_k_934[] = "Return the roots of a polynomial with coefficients given in p.\n\n The values in the rank-1 array `p` are coefficients of a polynomial.\n If the length of `p` is n+1 then the polynomial is described by::\n\n p[0] * x**n + p[1] * x**(n-1) + ... + p[n-1]*x + p[n]\n\n Parameters\n ----------\n p : array_like\n Rank-1 array of polynomial coefficients.\n\n Returns\n -------\n out : ndarray\n An array containing the complex roots of the polynomial.\n\n Raises\n ------\n ValueError :\n When `p` cannot be converted to a rank-1 array.\n\n See also\n --------\n poly : Find the coefficients of a polynomial with a given sequence\n of roots.\n polyval : Evaluate a polynomial at a point.\n polyfit : Least squares polynomial fit.\n poly1d : A one-dimensional polynomial class.\n\n Notes\n -----\n The algorithm relies on computing the eigenvalues of the\n companion matrix [1]_.\n\n References\n ----------\n .. [1] R. A. Horn & C. R. Johnson, *Matrix Analysis*. Cambridge, UK:\n Cambridge University Press, 1999, pp. 146-7.\n\n Examples\n --------\n >>> coeff = [3.2, 2, 1]\n >>> np.roots(coeff)\n array([-0.3125+0.46351241j, -0.3125-0.46351241j])\n \n "; static char __pyx_k_935[] = "rot90 (line 10577)"; static char __pyx_k_936[] = "Rotate an array by 90 degrees in the counter-clockwise direction.\n\n The first two dimensions are rotated; therefore, the array must be at\n least 2-D.\n\n Parameters\n ----------\n m : array_like\n Array of two or more dimensions.\n k : integer\n Number of times the array is rotated by 90 degrees.\n\n Returns\n -------\n y : ndarray\n Rotated array.\n\n See Also\n --------\n fliplr : Flip an array horizontally.\n flipud : Flip an array vertically.\n\n Examples\n --------\n >>> m = np.array([[1,2],[3,4]], int)\n >>> m\n array([[1, 2],\n [3, 4]])\n >>> np.rot90(m)\n array([[2, 4],\n [1, 3]])\n >>> np.rot90(m, 2)\n array([[4, 3],\n [2, 1]])\n \n "; static char __pyx_k_937[] = "row_stack (line 10643)"; static char __pyx_k_938[] = "Stack arrays in sequence vertically (row wise).\n\n Take a sequence of arrays and stack them vertically to make a single\n array. Rebuild arrays divided by `vsplit`.\n\n Parameters\n ----------\n tup : sequence of ndarrays\n Tuple containing arrays to be stacked. The arrays must have the same\n shape along all but the first axis.\n\n Returns\n -------\n stacked : ndarray\n The array formed by stacking the given arrays.\n\n See Also\n --------\n hstack : Stack arrays in sequence horizontally (column wise).\n dstack : Stack arrays in sequence depth wise (along third dimension).\n concatenate : Join a sequence of arrays together.\n vsplit : Split array into a list of multiple sub-arrays vertically.\n\n\n Notes\n -----\n Equivalent to ``np.concatenate(tup, axis=0)``\n\n Examples\n --------\n >>> a = np.array([1, 2, 3])\n >>> b = np.array([2, 3, 4])\n >>> np.vstack((a,b))\n array([[1, 2, 3],\n [2, 3, 4]])\n\n >>> a = np.array([[1], [2], [3]])\n >>> b = np.array([[2], [3], [4]])\n >>> np.vstack((a,b))\n array([[1],\n [2],\n [3],\n [2],\n [3],\n [4]])\n \n "; static char __pyx_k_939[] = "safe_eval (line 10694)"; static char __pyx_k_940[] = "Protected string evaluation.\n\n Evaluate a string containing a Python literal expression without\n allowing the execution of arbitrary non-literal code.\n\n Parameters\n ----------\n source : str\n The string to evaluate.\n\n Returns\n -------\n obj : object\n The result of evaluating `source`.\n\n Raises\n ------\n SyntaxError\n If the code has invalid Python syntax, or if it contains non-literal\n code.\n\n Examples\n --------\n >>> np.safe_eval('1')\n 1\n >>> np.safe_eval('[1, 2, 3]')\n [1, 2, 3]\n >>> np.safe_eval('{\"foo\": (\"bar\", 10.0)}')\n {'foo': ('bar', 10.0)}\n\n >>> np.safe_eval('import os')\n Traceback (most recent call last):\n ...\n SyntaxError: invalid syntax\n\n >>> np.safe_eval('open(\"/home/user/.ssh/id_dsa\").read()')\n Traceback (most recent call last):\n ...\n SyntaxError: Unsupported source construct: compiler.ast.CallFunc\n \n "; static char __pyx_k_941[] = "save (line 10739)"; static char __pyx_k_942[] = "Save an array to a binary file in NumPy ``.npy`` format.\n\n Parameters\n ----------\n file : file or str\n File or filename to which the data is saved. If file is a file-object,\n then the filename is unchanged. If file is a string, a ``.npy``\n extension will be appended to the file name if it does not already\n have one.\n arr : array_like\n Array data to be saved.\n\n See Also\n --------\n savez : Save several arrays into a ``.npz`` archive\n savetxt, load\n\n Notes\n -----\n For a description of the ``.npy`` format, see `format`.\n\n Examples\n --------\n >>> from tempfile import TemporaryFile\n >>> outfile = TemporaryFile()\n\n >>> x = np.arange(10)\n >>> np.save(outfile, x)\n\n >>> outfile.seek(0) # Only needed here to simulate closing & reopening file\n >>> np.load(outfile)\n array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\n \n "; static char __pyx_k_943[] = "savetxt (line 10777)"; static char __pyx_k_944[] = "Save an array to a text file.\n\n Parameters\n ----------\n fname : filename or file handle\n If the filename ends in ``.gz``, the file is automatically saved in\n compressed gzip format. `loadtxt` understands gzipped files\n transparently.\n X : array_like\n Data to be saved to a text file.\n fmt : str or sequence of strs\n A single format (%10.5f), a sequence of formats, or a\n multi-format string, e.g. 'Iteration %d -- %10.5f', in which\n case `delimiter` is ignored.\n delimiter : str\n Character separating columns.\n newline : str\n .. versionadded:: 1.5.0\n\n Character separating lines.\n\n\n See Also\n --------\n save : Save an array to a binary file in NumPy ``.npy`` format\n savez : Save several arrays into a ``.npz`` compressed archive\n\n Notes\n -----\n Further explanation of the `fmt` parameter\n (``%[flag]width[.precision]specifier``):\n\n flags:\n ``-`` : left justify\n\n ``+`` : Forces to preceed result with + or -.\n\n ``0`` : Left pad the number with zeros instead of space (see width).\n\n width:\n Minimum number of characters to be printed. The value is not truncated\n if it has more characters.\n\n precision:\n - For integer specifiers (eg. ``d,i,o,x``), the minimum number of\n digits.\n - For ``e, E`` and ``f`` specifiers, the number of digits to print\n after the decimal point.\n - For ``g`` and ``G``, the maximum number of significant digits.\n - For ``s``, the maximum number of characters.\n\n specifiers:\n ``c`` : character\n\n ``d`` or ``i`` : signed decimal integer\n\n ``e`` or ``E`` : scientific notation with ``e`` or ``E``.\n\n ``f`` : decimal floating point\n\n ``g,G`` : use the shorter of ``e,E`` or ``f``\n\n ``o`` : signed octal\n\n ``s`` : string of characters\n\n ``u`` : un""signed decimal integer\n\n ``x,X`` : unsigned hexadecimal integer\n\n This explanation of ``fmt`` is not complete, for an exhaustive\n specification see [1]_.\n\n References\n ----------\n .. [1] `Format Specification Mini-Language\n `_, Python Documentation.\n\n Examples\n --------\n >>> x = y = z = np.arange(0.0,5.0,1.0)\n >>> np.savetxt('test.out', x, delimiter=',') # X is an array\n >>> np.savetxt('test.out', (x,y,z)) # x,y,z equal sized 1D arrays\n >>> np.savetxt('test.out', x, fmt='%1.4e') # use exponential notation\n \n "; static char __pyx_k_945[] = "savez (line 10868)"; static char __pyx_k_946[] = "Save several arrays into a single file in uncompressed ``.npz`` format.\n\n If arguments are passed in with no keywords, the corresponding variable\n names, in the .npz file, are 'arr_0', 'arr_1', etc. If keyword arguments\n are given, the corresponding variable names, in the ``.npz`` file will\n match the keyword names.\n\n Parameters\n ----------\n file : str or file\n Either the file name (string) or an open file (file-like object)\n where the data will be saved. If file is a string, the ``.npz``\n extension will be appended to the file name if it is not already there.\n *args : Arguments, optional\n Arrays to save to the file. Since it is not possible for Python to\n know the names of the arrays outside `savez`, the arrays will be saved\n with names \"arr_0\", \"arr_1\", and so on. These arguments can be any\n expression.\n **kwds : Keyword arguments, optional\n Arrays to save to the file. Arrays will be saved in the file with the\n keyword names.\n\n Returns\n -------\n None\n\n See Also\n --------\n save : Save a single array to a binary file in NumPy format.\n savetxt : Save an array to a file as plain text.\n\n Notes\n -----\n The ``.npz`` file format is a zipped archive of files named after the\n variables they contain. The archive is not compressed and each file\n in the archive contains one variable in ``.npy`` format. For a\n description of the ``.npy`` format, see `format`.\n\n When opening the saved ``.npz`` file with `load` a `NpzFile` object is\n returned. This is a dictionary-like object which can be queried for\n its list of arrays (with the ``.files`` attribute), and for the arrays\n themselves.\n\n Examples\n --------\n >>> from tempfile import TemporaryFile\n >>> outfile = TemporaryFile()\n >>> x = np.arange(10)\n >>> y = np.sin(x)\n\n Using `savez` with *args, the arrays are saved wit""h default names.\n\n >>> np.savez(outfile, x, y)\n >>> outfile.seek(0) # Only needed here to simulate closing & reopening file\n >>> npzfile = np.load(outfile)\n >>> npzfile.files\n ['arr_1', 'arr_0']\n >>> npzfile['arr_0']\n array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\n\n Using `savez` with **kwds, the arrays are saved with the keyword names.\n\n >>> outfile = TemporaryFile()\n >>> np.savez(outfile, x=x, y=y)\n >>> outfile.seek(0)\n >>> npzfile = np.load(outfile)\n >>> npzfile.files\n ['y', 'x']\n >>> npzfile['x']\n array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\n\n See Also\n --------\n numpy.savez_compressed : Save several arrays into a compressed .npz file format\n \n "; static char __pyx_k_947[] = "sctype2char (line 10972)"; static char __pyx_k_948[] = "Return the string representation of a scalar dtype.\n\n Parameters\n ----------\n sctype : scalar dtype or object\n If a scalar dtype, the corresponding string character is\n returned. If an object, `sctype2char` tries to infer its scalar type\n and then return the corresponding string character.\n\n Returns\n -------\n typechar : str\n The string character corresponding to the scalar type.\n\n Raises\n ------\n ValueError\n If `sctype` is an object for which the type can not be inferred.\n\n See Also\n --------\n obj2sctype, issctype, issubsctype, mintypecode\n\n Examples\n --------\n >>> for sctype in [np.int32, np.float, np.complex, np.string_, np.ndarray]:\n ... print np.sctype2char(sctype)\n l\n d\n D\n S\n O\n\n >>> x = np.array([1., 2-1.j])\n >>> np.sctype2char(x)\n 'D'\n >>> np.sctype2char(list)\n 'O'\n \n "; static char __pyx_k_949[] = "searchsorted (line 11016)"; static char __pyx_k_950[] = "Find indices where elements should be inserted to maintain order.\n\n Find the indices into a sorted array `a` such that, if the corresponding\n elements in `v` were inserted before the indices, the order of `a` would\n be preserved.\n\n Parameters\n ----------\n a : 1-D array_like\n Input array, sorted in ascending order.\n v : array_like\n Values to insert into `a`.\n side : {'left', 'right'}, optional\n If 'left', the index of the first suitable location found is given. If\n 'right', return the last such index. If there is no suitable\n index, return either 0 or N (where N is the length of `a`).\n\n Returns\n -------\n indices : array of ints\n Array of insertion points with the same shape as `v`.\n\n See Also\n --------\n sort : Return a sorted copy of an array.\n histogram : Produce histogram from 1-D data.\n\n Notes\n -----\n Binary search is used to find the required insertion points.\n\n As of Numpy 1.4.0 `searchsorted` works with real/complex arrays containing\n `nan` values. The enhanced sort order is documented in `sort`.\n\n Examples\n --------\n >>> np.searchsorted([1,2,3,4,5], 3)\n 2\n >>> np.searchsorted([1,2,3,4,5], 3, side='right')\n 3\n >>> np.searchsorted([1,2,3,4,5], [-10, 10, 2, 3])\n array([0, 5, 1, 2])\n \n "; static char __pyx_k_951[] = "select (line 11064)"; static char __pyx_k_952[] = "Return an array drawn from elements in choicelist, depending on conditions.\n\n Parameters\n ----------\n condlist : list of bool ndarrays\n The list of conditions which determine from which array in `choicelist`\n the output elements are taken. When multiple conditions are satisfied,\n the first one encountered in `condlist` is used.\n choicelist : list of ndarrays\n The list of arrays from which the output elements are taken. It has\n to be of the same length as `condlist`.\n default : scalar, optional\n The element inserted in `output` when all conditions evaluate to False.\n\n Returns\n -------\n output : ndarray\n The output at position m is the m-th element of the array in\n `choicelist` where the m-th element of the corresponding array in\n `condlist` is True.\n\n See Also\n --------\n where : Return elements from one of two arrays depending on condition.\n take, choose, compress, diag, diagonal\n\n Examples\n --------\n >>> x = np.arange(10)\n >>> condlist = [x<3, x>5]\n >>> choicelist = [x, x**2]\n >>> np.select(condlist, choicelist)\n array([ 0, 1, 2, 0, 0, 0, 36, 49, 64, 81])\n \n "; static char __pyx_k_953[] = "set_numeric_ops (line 11103)"; static char __pyx_k_954[] = "set_numeric_ops(op1=func1, op2=func2, ...)\n\n Set numerical operators for array objects.\n\n Parameters\n ----------\n op1, op2, ... : callable\n Each ``op = func`` pair describes an operator to be replaced.\n For example, ``add = lambda x, y: np.add(x, y) % 5`` would replace\n addition by modulus 5 addition.\n\n Returns\n -------\n saved_ops : list of callables\n A list of all operators, stored before making replacements.\n\n Notes\n -----\n .. WARNING::\n Use with care! Incorrect usage may lead to memory errors.\n\n A function replacing an operator cannot make use of that operator.\n For example, when replacing add, you may not use ``+``. Instead,\n directly call ufuncs.\n\n Examples\n --------\n >>> def add_mod5(x, y):\n ... return np.add(x, y) % 5\n ...\n >>> old_funcs = np.set_numeric_ops(add=add_mod5)\n\n >>> x = np.arange(12).reshape((3, 4))\n >>> x + x\n array([[0, 2, 4, 1],\n [3, 0, 2, 4],\n [1, 3, 0, 2]])\n\n >>> ignore = np.set_numeric_ops(**old_funcs) # restore operators\n \n "; static char __pyx_k_955[] = "set_printoptions (line 11149)"; static char __pyx_k_956[] = "Set printing options.\n\n These options determine the way floating point numbers, arrays and\n other NumPy objects are displayed.\n\n Parameters\n ----------\n precision : int, optional\n Number of digits of precision for floating point output (default 8).\n threshold : int, optional\n Total number of array elements which trigger summarization\n rather than full repr (default 1000).\n edgeitems : int, optional\n Number of array items in summary at beginning and end of\n each dimension (default 3).\n linewidth : int, optional\n The number of characters per line for the purpose of inserting\n line breaks (default 75).\n suppress : bool, optional\n Whether or not suppress printing of small floating point values\n using scientific notation (default False).\n nanstr : str, optional\n String representation of floating point not-a-number (default nan).\n infstr : str, optional\n String representation of floating point infinity (default inf).\n\n See Also\n --------\n get_printoptions, set_string_function\n\n Examples\n --------\n Floating point precision can be set:\n\n >>> np.set_printoptions(precision=4)\n >>> print np.array([1.123456789])\n [ 1.1235]\n\n Long arrays can be summarised:\n\n >>> np.set_printoptions(threshold=5)\n >>> print np.arange(10)\n [0 1 2 ..., 7 8 9]\n\n Small results can be suppressed:\n\n >>> eps = np.finfo(float).eps\n >>> x = np.arange(4.)\n >>> x**2 - (x + eps)**2\n array([ -4.9304e-32, -4.4409e-16, 0.0000e+00, 0.0000e+00])\n >>> np.set_printoptions(suppress=True)\n >>> x**2 - (x + eps)**2\n array([-0., -0., 0., 0.])\n\n To put back the default options, you can use:\n\n >>> np.set_printoptions(edgeitems=3,infstr='Inf',\n ... linewidth=75, nanstr='NaN', precision=8,\n ... suppress=False, threshold=1000)\n \n "; static char __pyx_k_957[] = "set_string_function (line 11214)"; static char __pyx_k_958[] = "Set a Python function to be used when pretty printing arrays.\n\n Parameters\n ----------\n f : function or None\n Function to be used to pretty print arrays. The function should expect\n a single array argument and return a string of the representation of\n the array. If None, the function is reset to the default NumPy function\n to print arrays.\n repr : bool, optional\n If True (default), the function for pretty printing (``__repr__``)\n is set, if False the function that returns the default string\n representation (``__str__``) is set.\n\n See Also\n --------\n set_printoptions, get_printoptions\n\n Examples\n --------\n >>> def pprint(arr):\n ... return 'HA! - What are you going to do now?'\n ...\n >>> np.set_string_function(pprint)\n >>> a = np.arange(10)\n >>> a\n HA! - What are you going to do now?\n >>> print a\n [0 1 2 3 4 5 6 7 8 9]\n\n We can reset the function to the default:\n\n >>> np.set_string_function(None)\n >>> a\n array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\n\n `repr` affects either pretty printing or normal string representation.\n Note that ``__repr__`` is still affected by setting ``__str__``\n because the width of each array element in the returned string becomes\n equal to the length of the result of ``__str__()``.\n\n >>> x = np.arange(4)\n >>> np.set_string_function(lambda x:'random', repr=False)\n >>> x.__str__()\n 'random'\n >>> x.__repr__()\n 'array([ 0, 1, 2, 3])'\n \n "; static char __pyx_k_959[] = "setdiff1d (line 11279)"; static char __pyx_k_960[] = "Find the set difference of two arrays.\n\n Return the sorted, unique values in `ar1` that are not in `ar2`.\n\n Parameters\n ----------\n ar1 : array_like\n Input array.\n ar2 : array_like\n Input comparison array.\n assume_unique : bool\n If True, the input arrays are both assumed to be unique, which\n can speed up the calculation. Default is False.\n\n Returns\n -------\n difference : ndarray\n Sorted 1D array of values in `ar1` that are not in `ar2`.\n\n See Also\n --------\n numpy.lib.arraysetops : Module with a number of other functions for\n performing set operations on arrays.\n\n Examples\n --------\n >>> a = np.array([1, 2, 3, 2, 4, 1])\n >>> b = np.array([3, 4, 5, 6])\n >>> np.setdiff1d(a, b)\n array([1, 2])\n \n "; static char __pyx_k_961[] = "seterr (line 11315)"; static char __pyx_k_962[] = "Set how floating-point errors are handled.\n\n Note that operations on integer scalar types (such as `int16`) are\n handled like floating point, and are affected by these settings.\n\n Parameters\n ----------\n all : {'ignore', 'warn', 'raise', 'call', 'print', 'log'}, optional\n Set treatment for all types of floating-point errors at once:\n\n - ignore: Take no action when the exception occurs.\n - warn: Print a `RuntimeWarning` (via the Python `warnings` module).\n - raise: Raise a `FloatingPointError`.\n - call: Call a function specified using the `seterrcall` function.\n - print: Print a warning directly to ``stdout``.\n - log: Record error in a Log object specified by `seterrcall`.\n\n The default is not to change the current behavior.\n divide : {'ignore', 'warn', 'raise', 'call', 'print', 'log'}, optional\n Treatment for division by zero.\n over : {'ignore', 'warn', 'raise', 'call', 'print', 'log'}, optional\n Treatment for floating-point overflow.\n under : {'ignore', 'warn', 'raise', 'call', 'print', 'log'}, optional\n Treatment for floating-point underflow.\n invalid : {'ignore', 'warn', 'raise', 'call', 'print', 'log'}, optional\n Treatment for invalid floating-point operation.\n\n Returns\n -------\n old_settings : dict\n Dictionary containing the old settings.\n\n See also\n --------\n seterrcall : Set a callback function for the 'call' mode.\n geterr, geterrcall\n\n Notes\n -----\n The floating-point exceptions are defined in the IEEE 754 standard [1]:\n\n - Division by zero: infinite result obtained from finite numbers.\n - Overflow: result too large to be expressed.\n - Underflow: result so close to zero that some precision\n was lost.\n - Invalid operation: result is not an expressible number, typically\n indicates that a NaN was produced.\n\n .. [1] http://en.wikipedia.org/wiki/""IEEE_754\n\n Examples\n --------\n >>> old_settings = np.seterr(all='ignore') #seterr to known value\n >>> np.seterr(over='raise')\n {'over': 'ignore', 'divide': 'ignore', 'invalid': 'ignore',\n 'under': 'ignore'}\n >>> np.seterr(all='ignore') # reset to default\n {'over': 'raise', 'divide': 'ignore', 'invalid': 'ignore', 'under': 'ignore'}\n\n >>> np.int16(32000) * np.int16(3)\n 30464\n >>> old_settings = np.seterr(all='warn', over='raise')\n >>> np.int16(32000) * np.int16(3)\n Traceback (most recent call last):\n File \"\", line 1, in \n FloatingPointError: overflow encountered in short_scalars\n\n >>> old_settings = np.seterr(all='print')\n >>> np.geterr()\n {'over': 'print', 'divide': 'print', 'invalid': 'print', 'under': 'print'}\n >>> np.int16(32000) * np.int16(3)\n Warning: overflow encountered in short_scalars\n 30464\n \n "; static char __pyx_k_963[] = "seterrcall (line 11394)"; static char __pyx_k_964[] = "Set the floating-point error callback function or log object.\n\n There are two ways to capture floating-point error messages. The first\n is to set the error-handler to 'call', using `seterr`. Then, set\n the function to call using this function.\n\n The second is to set the error-handler to 'log', using `seterr`.\n Floating-point errors then trigger a call to the 'write' method of\n the provided object.\n\n Parameters\n ----------\n func : callable f(err, flag) or object with write method\n Function to call upon floating-point errors ('call'-mode) or\n object whose 'write' method is used to log such message ('log'-mode).\n\n The call function takes two arguments. The first is the\n type of error (one of \"divide\", \"over\", \"under\", or \"invalid\"),\n and the second is the status flag. The flag is a byte, whose\n least-significant bits indicate the status::\n\n [0 0 0 0 invalid over under invalid]\n\n In other words, ``flags = divide + 2*over + 4*under + 8*invalid``.\n\n If an object is provided, its write method should take one argument,\n a string.\n\n Returns\n -------\n h : callable, log instance or None\n The old error handler.\n\n See Also\n --------\n seterr, geterr, geterrcall\n\n Examples\n --------\n Callback upon error:\n\n >>> def err_handler(type, flag):\n ... print \"Floating point error (%s), with flag %s\" % (type, flag)\n ...\n\n >>> saved_handler = np.seterrcall(err_handler)\n >>> save_err = np.seterr(all='call')\n\n >>> np.array([1, 2, 3]) / 0.0\n Floating point error (divide by zero), with flag 1\n array([ Inf, Inf, Inf])\n\n >>> np.seterrcall(saved_handler)\n \n >>> np.seterr(**save_err)\n {'over': 'call', 'divide': 'call', 'invalid': 'call', 'under': 'call'}\n\n Log error message:\n\n >>> class Log(object):\n ... def writ""e(self, msg):\n ... print \"LOG: %s\" % msg\n ...\n\n >>> log = Log()\n >>> saved_handler = np.seterrcall(log)\n >>> save_err = np.seterr(all='log')\n\n >>> np.array([1, 2, 3]) / 0.0\n LOG: Warning: divide by zero encountered in divide\n \n array([ Inf, Inf, Inf])\n\n >>> np.seterrcall(saved_handler)\n <__main__.Log object at 0x...>\n >>> np.seterr(**save_err)\n {'over': 'log', 'divide': 'log', 'invalid': 'log', 'under': 'log'}\n \n "; static char __pyx_k_965[] = "seterrobj (line 11477)"; static char __pyx_k_966[] = "seterrobj(errobj)\n\n Set the object that defines floating-point error handling.\n\n The error object contains all information that defines the error handling\n behavior in Numpy. `seterrobj` is used internally by the other\n functions that set error handling behavior (`seterr`, `seterrcall`).\n\n Parameters\n ----------\n errobj : list\n The error object, a list containing three elements:\n [internal numpy buffer size, error mask, error callback function].\n\n The error mask is a single integer that holds the treatment information\n on all four floating point errors. The information for each error type\n is contained in three bits of the integer. If we print it in base 8, we\n can see what treatment is set for \"invalid\", \"under\", \"over\", and\n \"divide\" (in that order). The printed string can be interpreted with\n\n * 0 : 'ignore'\n * 1 : 'warn'\n * 2 : 'raise'\n * 3 : 'call'\n * 4 : 'print'\n * 5 : 'log'\n\n See Also\n --------\n geterrobj, seterr, geterr, seterrcall, geterrcall\n getbufsize, setbufsize\n\n Notes\n -----\n For complete documentation of the types of floating-point exceptions and\n treatment options, see `seterr`.\n\n Examples\n --------\n >>> old_errobj = np.geterrobj() # first get the defaults\n >>> old_errobj\n [10000, 0, None]\n\n >>> def err_handler(type, flag):\n ... print \"Floating point error (%s), with flag %s\" % (type, flag)\n ...\n >>> new_errobj = [20000, 12, err_handler]\n >>> np.seterrobj(new_errobj)\n >>> np.base_repr(12, 8) # int for divide=4 ('print') and over=1 ('warn')\n '14'\n >>> np.geterr()\n {'over': 'warn', 'divide': 'print', 'invalid': 'ignore', 'under': 'ignore'}\n >>> np.geterrcall() is err_handler\n True\n \n "; static char __pyx_k_967[] = "setxor1d (line 11538)"; static char __pyx_k_968[] = "Find the set exclusive-or of two arrays.\n\n Return the sorted, unique values that are in only one (not both) of the\n input arrays.\n\n Parameters\n ----------\n ar1, ar2 : array_like\n Input arrays.\n assume_unique : bool\n If True, the input arrays are both assumed to be unique, which\n can speed up the calculation. Default is False.\n\n Returns\n -------\n xor : ndarray\n Sorted 1D array of unique values that are in only one of the input\n arrays.\n\n Examples\n --------\n >>> a = np.array([1, 2, 3, 2, 4])\n >>> b = np.array([2, 3, 5, 7, 5])\n >>> np.setxor1d(a,b)\n array([1, 4, 5, 7])\n \n "; static char __pyx_k_969[] = "sinc (line 11576)"; static char __pyx_k_970[] = "Return the sinc function.\n\n The sinc function is :math:`\\sin(\\pi x)/(\\pi x)`.\n\n Parameters\n ----------\n x : ndarray\n Array (possibly multi-dimensional) of values for which to to\n calculate ``sinc(x)``.\n\n Returns\n -------\n out : ndarray\n ``sinc(x)``, which has the same shape as the input.\n\n Notes\n -----\n ``sinc(0)`` is the limit value 1.\n\n The name sinc is short for \"sine cardinal\" or \"sinus cardinalis\".\n\n The sinc function is used in various signal processing applications,\n including in anti-aliasing, in the construction of a\n Lanczos resampling filter, and in interpolation.\n\n For bandlimited interpolation of discrete-time signals, the ideal\n interpolation kernel is proportional to the sinc function.\n\n References\n ----------\n .. [1] Weisstein, Eric W. \"Sinc Function.\" From MathWorld--A Wolfram Web\n Resource. http://mathworld.wolfram.com/SincFunction.html\n .. [2] Wikipedia, \"Sinc function\",\n http://en.wikipedia.org/wiki/Sinc_function\n\n Examples\n --------\n >>> x = np.arange(-20., 21.)/5.\n >>> np.sinc(x)\n array([ -3.89804309e-17, -4.92362781e-02, -8.40918587e-02,\n -8.90384387e-02, -5.84680802e-02, 3.89804309e-17,\n 6.68206631e-02, 1.16434881e-01, 1.26137788e-01,\n 8.50444803e-02, -3.89804309e-17, -1.03943254e-01,\n -1.89206682e-01, -2.16236208e-01, -1.55914881e-01,\n 3.89804309e-17, 2.33872321e-01, 5.04551152e-01,\n 7.56826729e-01, 9.35489284e-01, 1.00000000e+00,\n 9.35489284e-01, 7.56826729e-01, 5.04551152e-01,\n 2.33872321e-01, 3.89804309e-17, -1.55914881e-01,\n -2.16236208e-01, -1.89206682e-01, -1.03943254e-01,\n -3.89804309e-17, 8.50444803e-02, 1.26137788e-01,\n 1.16434881e-01, 6.68206631e-02, 3.89804309e-17,\n -5.84680802e-02,"" -8.90384387e-02, -8.40918587e-02,\n -4.92362781e-02, -3.89804309e-17])\n\n >>> import matplotlib.pyplot as plt\n >>> plt.plot(x, np.sinc(x))\n []\n >>> plt.title(\"Sinc Function\")\n \n >>> plt.ylabel(\"Amplitude\")\n \n >>> plt.xlabel(\"X\")\n \n >>> plt.show()\n\n It works in 2-D as well:\n\n >>> x = np.arange(-200., 201.)/50.\n >>> xx = np.outer(x, x)\n >>> plt.imshow(np.sinc(xx))\n \n \n "; static char __pyx_k_971[] = "size (line 11653)"; static char __pyx_k_972[] = "Return the number of elements along a given axis.\n\n Parameters\n ----------\n a : array_like\n Input data.\n axis : int, optional\n Axis along which the elements are counted. By default, give\n the total number of elements.\n\n Returns\n -------\n element_count : int\n Number of elements along the specified axis.\n\n See Also\n --------\n shape : dimensions of array\n ndarray.shape : dimensions of array\n ndarray.size : number of elements in array\n\n Examples\n --------\n >>> a = np.array([[1,2,3],[4,5,6]])\n >>> np.size(a)\n 6\n >>> np.size(a,1)\n 3\n >>> np.size(a,0)\n 2\n \n "; static char __pyx_k_973[] = "sort (line 11702)"; static char __pyx_k_974[] = "Return a sorted copy of an array.\n\n Parameters\n ----------\n a : array_like\n Array to be sorted.\n axis : int or None, optional\n Axis along which to sort. If None, the array is flattened before\n sorting. The default is -1, which sorts along the last axis.\n kind : {'quicksort', 'mergesort', 'heapsort'}, optional\n Sorting algorithm. Default is 'quicksort'.\n order : list, optional\n When `a` is a structured array, this argument specifies which fields\n to compare first, second, and so on. This list does not need to\n include all of the fields.\n\n Returns\n -------\n sorted_array : ndarray\n Array of the same type and shape as `a`.\n\n See Also\n --------\n ndarray.sort : Method to sort an array in-place.\n argsort : Indirect sort.\n lexsort : Indirect stable sort on multiple keys.\n searchsorted : Find elements in a sorted array.\n\n Notes\n -----\n The various sorting algorithms are characterized by their average speed,\n worst case performance, work space size, and whether they are stable. A\n stable sort keeps items with the same key in the same relative\n order. The three available algorithms have the following\n properties:\n\n =========== ======= ============= ============ =======\n kind speed worst case work space stable\n =========== ======= ============= ============ =======\n 'quicksort' 1 O(n^2) 0 no\n 'mergesort' 2 O(n*log(n)) ~n/2 yes\n 'heapsort' 3 O(n*log(n)) 0 no\n =========== ======= ============= ============ =======\n\n All the sort algorithms make temporary copies of the data when\n sorting along any but the last axis. Consequently, sorting along\n the last axis is faster and uses less space than sorting along\n any other axis.\n\n The sort order for complex numbers is lexicographic. If both the real""\n and imaginary parts are non-nan then the order is determined by the\n real parts except when they are equal, in which case the order is\n determined by the imaginary parts.\n\n Previous to numpy 1.4.0 sorting real and complex arrays containing nan\n values led to undefined behaviour. In numpy versions >= 1.4.0 nan\n values are sorted to the end. The extended sort order is:\n\n * Real: [R, nan]\n * Complex: [R + Rj, R + nanj, nan + Rj, nan + nanj]\n\n where R is a non-nan real value. Complex values with the same nan\n placements are sorted according to the non-nan part if it exists.\n Non-nan values are sorted as before.\n\n Examples\n --------\n >>> a = np.array([[1,4],[3,1]])\n >>> np.sort(a) # sort along the last axis\n array([[1, 4],\n [1, 3]])\n >>> np.sort(a, axis=None) # sort the flattened array\n array([1, 1, 3, 4])\n >>> np.sort(a, axis=0) # sort along the first axis\n array([[1, 1],\n [3, 4]])\n\n Use the `order` keyword to specify a field to use when sorting a\n structured array:\n\n >>> dtype = [('name', 'S10'), ('height', float), ('age', int)]\n >>> values = [('Arthur', 1.8, 41), ('Lancelot', 1.9, 38),\n ... ('Galahad', 1.7, 38)]\n >>> a = np.array(values, dtype=dtype) # create a structured array\n >>> np.sort(a, order='height') # doctest: +SKIP\n array([('Galahad', 1.7, 38), ('Arthur', 1.8, 41),\n ('Lancelot', 1.8999999999999999, 38)],\n dtype=[('name', '|S10'), ('height', '>> np.sort(a, order=['age', 'height']) # doctest: +SKIP\n array([('Galahad', 1.7, 38), ('Lancelot', 1.8999999999999999, 38),\n ('Arthur', 1.8, 41)],\n dtype=[('name', '|S10'), ('height', '>> np.split(x, [3, 5, 6, 10])\n [array([ 0., 1., 2.]),\n array([ 3., 4.]),\n array([ 5.]),\n array([ 6., 7.]),\n array([], dtype=float64)]\n \n "; static char __pyx_k_981[] = "squeeze (line 11935)"; static char __pyx_k_982[] = "Remove single-dimensional entries from the shape of an array.\n\n Parameters\n ----------\n a : array_like\n Input data.\n\n Returns\n -------\n squeezed : ndarray\n The input array, but with with all dimensions of length 1\n removed. Whenever possible, a view on `a` is returned.\n\n Examples\n --------\n >>> x = np.array([[[0], [1], [2]]])\n >>> x.shape\n (1, 3, 1)\n >>> np.squeeze(x).shape\n (3,)\n \n "; static char __pyx_k_983[] = "std (line 11961)"; static char __pyx_k_984[] = "Compute the standard deviation along the specified axis.\n\n Returns the standard deviation, a measure of the spread of a distribution,\n of the array elements. The standard deviation is computed for the\n flattened array by default, otherwise over the specified axis.\n\n Parameters\n ----------\n a : array_like\n Calculate the standard deviation of these values.\n axis : int, optional\n Axis along which the standard deviation is computed. The default is\n to compute the standard deviation of the flattened array.\n dtype : dtype, optional\n Type to use in computing the standard deviation. For arrays of\n integer type the default is float64, for arrays of float types it is\n the same as the array type.\n out : ndarray, optional\n Alternative output array in which to place the result. It must have\n the same shape as the expected output but the type (of the calculated\n values) will be cast if necessary.\n ddof : int, optional\n Means Delta Degrees of Freedom. The divisor used in calculations\n is ``N - ddof``, where ``N`` represents the number of elements.\n By default `ddof` is zero.\n\n Returns\n -------\n standard_deviation : ndarray, see dtype parameter above.\n If `out` is None, return a new array containing the standard deviation,\n otherwise return a reference to the output array.\n\n See Also\n --------\n var, mean\n numpy.doc.ufuncs : Section \"Output arguments\"\n\n Notes\n -----\n The standard deviation is the square root of the average of the squared\n deviations from the mean, i.e., ``std = sqrt(mean(abs(x - x.mean())**2))``.\n\n The average squared deviation is normally calculated as ``x.sum() / N``, where\n ``N = len(x)``. If, however, `ddof` is specified, the divisor ``N - ddof``\n is used instead. In standard statistical practice, ``ddof=1`` provides an\n unbiased estimator of t""he variance of the infinite population. ``ddof=0``\n provides a maximum likelihood estimate of the variance for normally\n distributed variables. The standard deviation computed in this function\n is the square root of the estimated variance, so even with ``ddof=1``, it\n will not be an unbiased estimate of the standard deviation per se.\n\n Note that, for complex numbers, `std` takes the absolute\n value before squaring, so that the result is always real and nonnegative.\n\n For floating-point input, the *std* is computed using the same\n precision the input has. Depending on the input data, this can cause\n the results to be inaccurate, especially for float32 (see example below).\n Specifying a higher-accuracy accumulator using the `dtype` keyword can\n alleviate this issue.\n\n Examples\n --------\n >>> a = np.array([[1, 2], [3, 4]])\n >>> np.std(a)\n 1.1180339887498949\n >>> np.std(a, axis=0)\n array([ 1., 1.])\n >>> np.std(a, axis=1)\n array([ 0.5, 0.5])\n\n In single precision, std() can be inaccurate:\n\n >>> a = np.zeros((2,512*512), dtype=np.float32)\n >>> a[0,:] = 1.0\n >>> a[1,:] = 0.1\n >>> np.std(a)\n 0.45172946707416706\n\n Computing the standard deviation in float64 is more accurate:\n\n >>> np.std(a, dtype=np.float64)\n 0.44999999925552653\n \n "; static char __pyx_k_985[] = "sum (line 12049)"; static char __pyx_k_986[] = "Sum of array elements over a given axis.\n\n Parameters\n ----------\n a : array_like\n Elements to sum.\n axis : integer, optional\n Axis over which the sum is taken. By default `axis` is None,\n and all elements are summed.\n dtype : dtype, optional\n The type of the returned array and of the accumulator in which\n the elements are summed. By default, the dtype of `a` is used.\n An exception is when `a` has an integer type with less precision\n than the default platform integer. In that case, the default\n platform integer is used instead.\n out : ndarray, optional\n Array into which the output is placed. By default, a new array is\n created. If `out` is given, it must be of the appropriate shape\n (the shape of `a` with `axis` removed, i.e.,\n ``numpy.delete(a.shape, axis)``). Its type is preserved. See\n `doc.ufuncs` (Section \"Output arguments\") for more details.\n\n Returns\n -------\n sum_along_axis : ndarray\n An array with the same shape as `a`, with the specified\n axis removed. If `a` is a 0-d array, or if `axis` is None, a scalar\n is returned. If an output array is specified, a reference to\n `out` is returned.\n\n See Also\n --------\n ndarray.sum : Equivalent method.\n\n cumsum : Cumulative sum of array elements.\n\n trapz : Integration of array values using the composite trapezoidal rule.\n\n mean, average\n\n Notes\n -----\n Arithmetic is modular when using integer types, and no error is\n raised on overflow.\n\n Examples\n --------\n >>> np.sum([0.5, 1.5])\n 2.0\n >>> np.sum([0.5, 0.7, 0.2, 1.5], dtype=np.int32)\n 1\n >>> np.sum([[0, 1], [0, 5]])\n 6\n >>> np.sum([[0, 1], [0, 5]], axis=0)\n array([0, 6])\n >>> np.sum([[0, 1], [0, 5]], axis=1)\n array([1, 5])\n\n If the accumulator is too small, overflow occurs:\n\n >>> np.one""s(128, dtype=np.int8).sum(dtype=np.int8)\n -128\n \n "; static char __pyx_k_987[] = "swapaxes (line 12117)"; static char __pyx_k_988[] = "Interchange two axes of an array.\n\n Parameters\n ----------\n a : array_like\n Input array.\n axis1 : int\n First axis.\n axis2 : int\n Second axis.\n\n Returns\n -------\n a_swapped : ndarray\n If `a` is an ndarray, then a view of `a` is returned; otherwise\n a new array is created.\n\n Examples\n --------\n >>> x = np.array([[1,2,3]])\n >>> np.swapaxes(x,0,1)\n array([[1],\n [2],\n [3]])\n\n >>> x = np.array([[[0,1],[2,3]],[[4,5],[6,7]]])\n >>> x\n array([[[0, 1],\n [2, 3]],\n [[4, 5],\n [6, 7]]])\n\n >>> np.swapaxes(x,0,2)\n array([[[0, 4],\n [2, 6]],\n [[1, 5],\n [3, 7]]])\n \n "; static char __pyx_k_989[] = "take (line 12160)"; static char __pyx_k_990[] = "Take elements from an array along an axis.\n\n This function does the same thing as \"fancy\" indexing (indexing arrays\n using arrays); however, it can be easier to use if you need elements\n along a given axis.\n\n Parameters\n ----------\n a : array_like\n The source array.\n indices : array_like\n The indices of the values to extract.\n axis : int, optional\n The axis over which to select values. By default, the flattened\n input array is used.\n out : ndarray, optional\n If provided, the result will be placed in this array. It should\n be of the appropriate shape and dtype.\n mode : {'raise', 'wrap', 'clip'}, optional\n Specifies how out-of-bounds indices will behave.\n\n * 'raise' -- raise an error (default)\n * 'wrap' -- wrap around\n * 'clip' -- clip to the range\n\n 'clip' mode means that all indices that are too large are replaced\n by the index that addresses the last element along that axis. Note\n that this disables indexing with negative numbers.\n\n Returns\n -------\n subarray : ndarray\n The returned array has the same type as `a`.\n\n See Also\n --------\n ndarray.take : equivalent method\n\n Examples\n --------\n >>> a = [4, 3, 5, 7, 6, 8]\n >>> indices = [0, 1, 4]\n >>> np.take(a, indices)\n array([4, 3, 6])\n\n In this example if `a` is an ndarray, \"fancy\" indexing can be used.\n\n >>> a = np.array(a)\n >>> a[indices]\n array([4, 3, 6])\n \n "; static char __pyx_k_991[] = "tensordot (line 12216)"; static char __pyx_k_992[] = "Compute tensor dot product along specified axes for arrays >= 1-D.\n\n Given two tensors (arrays of dimension greater than or equal to one),\n ``a`` and ``b``, and an array_like object containing two array_like\n objects, ``(a_axes, b_axes)``, sum the products of ``a``'s and ``b``'s\n elements (components) over the axes specified by ``a_axes`` and\n ``b_axes``. The third argument can be a single non-negative\n integer_like scalar, ``N``; if it is such, then the last ``N``\n dimensions of ``a`` and the first ``N`` dimensions of ``b`` are summed\n over.\n\n Parameters\n ----------\n a, b : array_like, len(shape) >= 1\n Tensors to \"dot\".\n\n axes : variable type\n\n * integer_like scalar\n Number of axes to sum over (applies to both arrays); or\n\n * array_like, shape = (2,), both elements array_like\n Axes to be summed over, first sequence applying to ``a``, second\n to ``b``.\n\n See Also\n --------\n dot, einsum\n\n Notes\n -----\n When there is more than one axis to sum over - and they are not the last\n (first) axes of ``a`` (``b``) - the argument ``axes`` should consist of\n two sequences of the same length, with the first axis to sum over given\n first in both sequences, the second axis second, and so forth.\n\n Examples\n --------\n A \"traditional\" example:\n\n >>> a = np.arange(60.).reshape(3,4,5)\n >>> b = np.arange(24.).reshape(4,3,2)\n >>> c = np.tensordot(a,b, axes=([1,0],[0,1]))\n >>> c.shape\n (5, 2)\n >>> c\n array([[ 4400., 4730.],\n [ 4532., 4874.],\n [ 4664., 5018.],\n [ 4796., 5162.],\n [ 4928., 5306.]])\n >>> # A slower but equivalent way of computing the same...\n >>> d = np.zeros((5,2))\n >>> for i in range(5):\n ... for j in range(2):\n ... for k in range(3):\n ... for n in range(4):\n ... d[i,j] += a[k,n,i] * b[n,k,j]\n >>> c == d""\n array([[ True, True],\n [ True, True],\n [ True, True],\n [ True, True],\n [ True, True]], dtype=bool)\n\n An extended example taking advantage of the overloading of + and \\*:\n\n >>> a = np.array(range(1, 9))\n >>> a.shape = (2, 2, 2)\n >>> A = np.array(('a', 'b', 'c', 'd'), dtype=object)\n >>> A.shape = (2, 2)\n >>> a; A\n array([[[1, 2],\n [3, 4]],\n [[5, 6],\n [7, 8]]])\n array([[a, b],\n [c, d]], dtype=object)\n\n >>> np.tensordot(a, A) # third argument default is 2\n array([abbcccdddd, aaaaabbbbbbcccccccdddddddd], dtype=object)\n\n >>> np.tensordot(a, A, 1)\n array([[[acc, bdd],\n [aaacccc, bbbdddd]],\n [[aaaaacccccc, bbbbbdddddd],\n [aaaaaaacccccccc, bbbbbbbdddddddd]]], dtype=object)\n\n >>> np.tensordot(a, A, 0) # \"Left for reader\" (result too long to incl.)\n array([[[[[a, b],\n [c, d]],\n ...\n\n >>> np.tensordot(a, A, (0, 1))\n array([[[abbbbb, cddddd],\n [aabbbbbb, ccdddddd]],\n [[aaabbbbbbb, cccddddddd],\n [aaaabbbbbbbb, ccccdddddddd]]], dtype=object)\n\n >>> np.tensordot(a, A, (2, 1))\n array([[[abb, cdd],\n [aaabbbb, cccdddd]],\n [[aaaaabbbbbb, cccccdddddd],\n [aaaaaaabbbbbbbb, cccccccdddddddd]]], dtype=object)\n\n >>> np.tensordot(a, A, ((0, 1), (0, 1)))\n array([abbbcccccddddddd, aabbbbccccccdddddddd], dtype=object)\n\n >>> np.tensordot(a, A, ((2, 1), (1, 0)))\n array([acccbbdddd, aaaaacccccccbbbbbbdddddddd], dtype=object)\n \n "; static char __pyx_k_993[] = "tile (line 12332)"; static char __pyx_k_994[] = "Construct an array by repeating A the number of times given by reps.\n\n If `reps` has length ``d``, the result will have dimension of\n ``max(d, A.ndim)``.\n\n If ``A.ndim < d``, `A` is promoted to be d-dimensional by prepending new\n axes. So a shape (3,) array is promoted to (1, 3) for 2-D replication,\n or shape (1, 1, 3) for 3-D replication. If this is not the desired\n behavior, promote `A` to d-dimensions manually before calling this\n function.\n\n If ``A.ndim > d``, `reps` is promoted to `A`.ndim by pre-pending 1's to it.\n Thus for an `A` of shape (2, 3, 4, 5), a `reps` of (2, 2) is treated as\n (1, 1, 2, 2).\n\n Parameters\n ----------\n A : array_like\n The input array.\n reps : array_like\n The number of repetitions of `A` along each axis.\n\n Returns\n -------\n c : ndarray\n The tiled output array.\n\n See Also\n --------\n repeat : Repeat elements of an array.\n\n Examples\n --------\n >>> a = np.array([0, 1, 2])\n >>> np.tile(a, 2)\n array([0, 1, 2, 0, 1, 2])\n >>> np.tile(a, (2, 2))\n array([[0, 1, 2, 0, 1, 2],\n [0, 1, 2, 0, 1, 2]])\n >>> np.tile(a, (2, 1, 2))\n array([[[0, 1, 2, 0, 1, 2]],\n [[0, 1, 2, 0, 1, 2]]])\n\n >>> b = np.array([[1, 2], [3, 4]])\n >>> np.tile(b, 2)\n array([[1, 2, 1, 2],\n [3, 4, 3, 4]])\n >>> np.tile(b, (2, 1))\n array([[1, 2],\n [3, 4],\n [1, 2],\n [3, 4]])\n \n "; static char __pyx_k_995[] = "trace (line 12390)"; static char __pyx_k_996[] = "Return the sum along diagonals of the array.\n\n If `a` is 2-D, the sum along its diagonal with the given offset\n is returned, i.e., the sum of elements ``a[i,i+offset]`` for all i.\n\n If `a` has more than two dimensions, then the axes specified by axis1 and\n axis2 are used to determine the 2-D sub-arrays whose traces are returned.\n The shape of the resulting array is the same as that of `a` with `axis1`\n and `axis2` removed.\n\n Parameters\n ----------\n a : array_like\n Input array, from which the diagonals are taken.\n offset : int, optional\n Offset of the diagonal from the main diagonal. Can be both positive\n and negative. Defaults to 0.\n axis1, axis2 : int, optional\n Axes to be used as the first and second axis of the 2-D sub-arrays\n from which the diagonals should be taken. Defaults are the first two\n axes of `a`.\n dtype : dtype, optional\n Determines the data-type of the returned array and of the accumulator\n where the elements are summed. If dtype has the value None and `a` is\n of integer type of precision less than the default integer\n precision, then the default integer precision is used. Otherwise,\n the precision is the same as that of `a`.\n out : ndarray, optional\n Array into which the output is placed. Its type is preserved and\n it must be of the right shape to hold the output.\n\n Returns\n -------\n sum_along_diagonals : ndarray\n If `a` is 2-D, the sum along the diagonal is returned. If `a` has\n larger dimensions, then an array of sums along diagonals is returned.\n\n See Also\n --------\n diag, diagonal, diagflat\n\n Examples\n --------\n >>> np.trace(np.eye(3))\n 3.0\n >>> a = np.arange(8).reshape((2,2,2))\n >>> np.trace(a)\n array([6, 8])\n\n >>> a = np.arange(24).reshape((2,2,2,3))\n >>> np.trace(a).shape\n (2, 3)\n \n "; static char __pyx_k_997[] = "transpose (line 12448)"; static char __pyx_k_998[] = "Permute the dimensions of an array.\n\n Parameters\n ----------\n a : array_like\n Input array.\n axes : list of ints, optional\n By default, reverse the dimensions, otherwise permute the axes\n according to the values given.\n\n Returns\n -------\n p : ndarray\n `a` with its axes permuted. A view is returned whenever\n possible.\n\n See Also\n --------\n rollaxis\n\n Examples\n --------\n >>> x = np.arange(4).reshape((2,2))\n >>> x\n array([[0, 1],\n [2, 3]])\n\n >>> np.transpose(x)\n array([[0, 2],\n [1, 3]])\n\n >>> x = np.ones((1, 2, 3))\n >>> np.transpose(x, (1, 0, 2)).shape\n (2, 1, 3)\n \n "; static char __pyx_k_999[] = "trapz (line 12488)"; static char __pyx_k__Zd[] = "Zd"; static char __pyx_k__Zf[] = "Zf"; static char __pyx_k__Zg[] = "Zg"; static char __pyx_k__a1[] = "a1"; static char __pyx_k__a2[] = "a2"; static char __pyx_k__ar[] = "ar"; static char __pyx_k__dx[] = "dx"; static char __pyx_k__fb[] = "fb"; static char __pyx_k__fp[] = "fp"; static char __pyx_k__fv[] = "fv"; static char __pyx_k__i0[] = "i0"; static char __pyx_k__np[] = "np"; static char __pyx_k__pv[] = "pv"; static char __pyx_k__xp[] = "xp"; static char __pyx_k_1000[] = "Integrate along the given axis using the composite trapezoidal rule.\n\n Integrate `y` (`x`) along given axis.\n\n Parameters\n ----------\n y : array_like\n Input array to integrate.\n x : array_like, optional\n If `x` is None, then spacing between all `y` elements is `dx`.\n dx : scalar, optional\n If `x` is None, spacing given by `dx` is assumed. Default is 1.\n axis : int, optional\n Specify the axis.\n\n Returns\n -------\n out : float\n Definite integral as approximated by trapezoidal rule.\n\n See Also\n --------\n sum, cumsum\n\n Notes\n -----\n Image [2]_ illustrates trapezoidal rule -- y-axis locations of points will\n be taken from `y` array, by default x-axis distances between points will be\n 1.0, alternatively they can be provided with `x` array or with `dx` scalar.\n Return value will be equal to combined area under the red lines.\n\n\n References\n ----------\n .. [1] Wikipedia page: http://en.wikipedia.org/wiki/Trapezoidal_rule\n\n .. [2] Illustration image:\n http://en.wikipedia.org/wiki/File:Composite_trapezoidal_rule_illustration.png\n\n Examples\n --------\n >>> np.trapz([1,2,3])\n 4.0\n >>> np.trapz([1,2,3], x=[4,6,8])\n 8.0\n >>> np.trapz([1,2,3], dx=2)\n 8.0\n >>> a = np.arange(6).reshape(2, 3)\n >>> a\n array([[0, 1, 2],\n [3, 4, 5]])\n >>> np.trapz(a, axis=0)\n array([ 1.5, 2.5, 3.5])\n >>> np.trapz(a, axis=1)\n array([ 2., 8.])\n \n "; static char __pyx_k_1001[] = "tri (line 12549)"; static char __pyx_k_1002[] = "An array with ones at and below the given diagonal and zeros elsewhere.\n\n Parameters\n ----------\n N : int\n Number of rows in the array.\n M : int, optional\n Number of columns in the array.\n By default, `M` is taken equal to `N`.\n k : int, optional\n The sub-diagonal at and below which the array is filled.\n `k` = 0 is the main diagonal, while `k` < 0 is below it,\n and `k` > 0 is above. The default is 0.\n dtype : dtype, optional\n Data type of the returned array. The default is float.\n\n Returns\n -------\n T : ndarray of shape (N, M)\n Array with its lower triangle filled with ones and zero elsewhere;\n in other words ``T[i,j] == 1`` for ``i <= j + k``, 0 otherwise.\n\n Examples\n --------\n >>> np.tri(3, 5, 2, dtype=int)\n array([[1, 1, 1, 0, 0],\n [1, 1, 1, 1, 0],\n [1, 1, 1, 1, 1]])\n\n >>> np.tri(3, 5, -1)\n array([[ 0., 0., 0., 0., 0.],\n [ 1., 0., 0., 0., 0.],\n [ 1., 1., 0., 0., 0.]])\n \n "; static char __pyx_k_1003[] = "tril (line 12588)"; static char __pyx_k_1004[] = "Lower triangle of an array.\n\n Return a copy of an array with elements above the `k`-th diagonal zeroed.\n\n Parameters\n ----------\n m : array_like, shape (M, N)\n Input array.\n k : int, optional\n Diagonal above which to zero elements. `k = 0` (the default) is the\n main diagonal, `k < 0` is below it and `k > 0` is above.\n\n Returns\n -------\n L : ndarray, shape (M, N)\n Lower triangle of `m`, of same shape and data-type as `m`.\n\n See Also\n --------\n triu : same thing, only for the upper triangle\n\n Examples\n --------\n >>> np.tril([[1,2,3],[4,5,6],[7,8,9],[10,11,12]], -1)\n array([[ 0, 0, 0],\n [ 4, 0, 0],\n [ 7, 8, 0],\n [10, 11, 12]])\n \n "; static char __pyx_k_1005[] = "tril_indices (line 12622)"; static char __pyx_k_1006[] = "Return the indices for the lower-triangle of an (n, n) array.\n\n Parameters\n ----------\n n : int\n The row dimension of the square arrays for which the returned\n indices will be valid.\n k : int, optional\n Diagonal offset (see `tril` for details).\n\n Returns\n -------\n inds : tuple of arrays\n The indices for the triangle. The returned tuple contains two arrays,\n each with the indices along one dimension of the array.\n\n See also\n --------\n triu_indices : similar function, for upper-triangular.\n mask_indices : generic function accepting an arbitrary mask function.\n tril, triu\n\n Notes\n -----\n .. versionadded:: 1.4.0\n\n Examples\n --------\n Compute two different sets of indices to access 4x4 arrays, one for the\n lower triangular part starting at the main diagonal, and one starting two\n diagonals further right:\n\n >>> il1 = np.tril_indices(4)\n >>> il2 = np.tril_indices(4, 2)\n\n Here is how they can be used with a sample array:\n\n >>> a = np.arange(16).reshape(4, 4)\n >>> a\n array([[ 0, 1, 2, 3],\n [ 4, 5, 6, 7],\n [ 8, 9, 10, 11],\n [12, 13, 14, 15]])\n\n Both for indexing:\n\n >>> a[il1]\n array([ 0, 4, 5, 8, 9, 10, 12, 13, 14, 15])\n\n And for assigning values:\n\n >>> a[il1] = -1\n >>> a\n array([[-1, 1, 2, 3],\n [-1, -1, 6, 7],\n [-1, -1, -1, 11],\n [-1, -1, -1, -1]])\n\n These cover almost the whole array (two diagonals right of the main one):\n\n >>> a[il2] = -10\n >>> a\n array([[-10, -10, -10, 3],\n [-10, -10, -10, -10],\n [-10, -10, -10, -10],\n [-10, -10, -10, -10]])\n \n "; static char __pyx_k_1007[] = "trim_zeros (line 12719)"; static char __pyx_k_1008[] = "Trim the leading and/or trailing zeros from a 1-D array or sequence.\n\n Parameters\n ----------\n filt : 1-D array or sequence\n Input array.\n trim : str, optional\n A string with 'f' representing trim from front and 'b' to trim from\n back. Default is 'fb', trim zeros from both front and back of the\n array.\n\n Returns\n -------\n trimmed : 1-D array or sequence\n The result of trimming the input. The input data type is preserved.\n\n Examples\n --------\n >>> a = np.array((0, 0, 0, 1, 2, 3, 0, 2, 1, 0))\n >>> np.trim_zeros(a)\n array([1, 2, 3, 0, 2, 1])\n\n >>> np.trim_zeros(a, 'b')\n array([0, 0, 0, 1, 2, 3, 0, 2, 1])\n\n The input data type is preserved, list/tuple in means list/tuple out.\n\n >>> np.trim_zeros([0, 1, 2, 0])\n [1, 2]\n \n "; static char __pyx_k_1009[] = "triu (line 12754)"; static char __pyx_k_1010[] = "Upper triangle of an array.\n\n Return a copy of a matrix with the elements below the `k`-th diagonal\n zeroed.\n\n Please refer to the documentation for `tril` for further details.\n\n See Also\n --------\n tril : lower triangle of an array\n\n Examples\n --------\n >>> np.triu([[1,2,3],[4,5,6],[7,8,9],[10,11,12]], -1)\n array([[ 1, 2, 3],\n [ 4, 5, 6],\n [ 0, 8, 9],\n [ 0, 0, 12]])\n \n "; static char __pyx_k_1011[] = "triu_indices (line 12778)"; static char __pyx_k_1012[] = "Return the indices for the upper-triangle of an (n, n) array.\n\n Parameters\n ----------\n n : int\n The size of the arrays for which the returned indices will\n be valid.\n k : int, optional\n Diagonal offset (see `triu` for details).\n\n Returns\n -------\n inds : tuple of arrays\n The indices for the triangle. The returned tuple contains two arrays,\n each with the indices along one dimension of the array.\n\n See also\n --------\n tril_indices : similar function, for lower-triangular.\n mask_indices : generic function accepting an arbitrary mask function.\n triu, tril\n\n Notes\n -----\n .. versionadded:: 1.4.0\n\n Examples\n --------\n Compute two different sets of indices to access 4x4 arrays, one for the\n upper triangular part starting at the main diagonal, and one starting two\n diagonals further right:\n\n >>> iu1 = np.triu_indices(4)\n >>> iu2 = np.triu_indices(4, 2)\n\n Here is how they can be used with a sample array:\n\n >>> a = np.arange(16).reshape(4, 4)\n >>> a\n array([[ 0, 1, 2, 3],\n [ 4, 5, 6, 7],\n [ 8, 9, 10, 11],\n [12, 13, 14, 15]])\n\n Both for indexing:\n\n >>> a[iu1]\n array([ 0, 1, 2, 3, 5, 6, 7, 10, 11, 15])\n\n And for assigning values:\n\n >>> a[iu1] = -1\n >>> a\n array([[-1, -1, -1, -1],\n [ 4, -1, -1, -1],\n [ 8, 9, -1, -1],\n [12, 13, 14, -1]])\n\n These cover only a small part of the whole array (two diagonals right\n of the main one):\n\n >>> a[iu2] = -10\n >>> a\n array([[ -1, -1, -10, -10],\n [ 4, -1, -1, -10],\n [ 8, 9, -1, -1],\n [ 12, 13, 14, -1]])\n \n "; static char __pyx_k_1013[] = "typename (line 12876)"; static char __pyx_k_1014[] = "Return a description for the given data type code.\n\n Parameters\n ----------\n char : str\n Data type code.\n\n Returns\n -------\n out : str\n Description of the input data type code.\n\n See Also\n --------\n dtype, typecodes\n\n Examples\n --------\n >>> typechars = ['S1', '?', 'B', 'D', 'G', 'F', 'I', 'H', 'L', 'O', 'Q',\n ... 'S', 'U', 'V', 'b', 'd', 'g', 'f', 'i', 'h', 'l', 'q']\n >>> for typechar in typechars:\n ... print typechar, ' : ', np.typename(typechar)\n ...\n S1 : character\n ? : bool\n B : unsigned char\n D : complex double precision\n G : complex long double precision\n F : complex single precision\n I : unsigned integer\n H : unsigned short\n L : unsigned long integer\n O : object\n Q : unsigned long long integer\n S : string\n U : unicode\n V : void\n b : signed char\n d : double precision\n g : long precision\n f : single precision\n i : integer\n h : short\n l : long integer\n q : long long integer\n \n "; static char __pyx_k_1015[] = "union1d (line 12927)"; static char __pyx_k_1016[] = "Find the union of two arrays.\n\n Return the unique, sorted array of values that are in either of the two\n input arrays.\n\n Parameters\n ----------\n ar1, ar2 : array_like\n Input arrays. They are flattened if they are not already 1D.\n\n Returns\n -------\n union : ndarray\n Unique, sorted union of the input arrays.\n\n See Also\n --------\n numpy.lib.arraysetops : Module with a number of other functions for\n performing set operations on arrays.\n\n Examples\n --------\n >>> np.union1d([-1, 0, 1], [-2, 0, 2])\n array([-2, -1, 0, 1, 2])\n \n "; static char __pyx_k_1017[] = "unique (line 12957)"; static char __pyx_k_1018[] = "Find the unique elements of an array.\n\n Returns the sorted unique elements of an array. There are two optional\n outputs in addition to the unique elements: the indices of the input array\n that give the unique values, and the indices of the unique array that\n reconstruct the input array.\n\n Parameters\n ----------\n ar : array_like\n Input array. This will be flattened if it is not already 1-D.\n return_index : bool, optional\n If True, also return the indices of `ar` that result in the unique\n array.\n return_inverse : bool, optional\n If True, also return the indices of the unique array that can be used\n to reconstruct `ar`.\n\n Returns\n -------\n unique : ndarray\n The sorted unique values.\n unique_indices : ndarray, optional\n The indices of the unique values in the (flattened) original array.\n Only provided if `return_index` is True.\n unique_inverse : ndarray, optional\n The indices to reconstruct the (flattened) original array from the\n unique array. Only provided if `return_inverse` is True.\n\n See Also\n --------\n numpy.lib.arraysetops : Module with a number of other functions for\n performing set operations on arrays.\n\n Examples\n --------\n >>> np.unique([1, 1, 2, 2, 3, 3])\n array([1, 2, 3])\n >>> a = np.array([[1, 1], [2, 3]])\n >>> np.unique(a)\n array([1, 2, 3])\n\n Return the indices of the original array that give the unique values:\n\n >>> a = np.array(['a', 'b', 'b', 'c', 'a'])\n >>> u, indices = np.unique(a, return_index=True)\n >>> u\n array(['a', 'b', 'c'],\n dtype='|S1')\n >>> indices\n array([0, 1, 3])\n >>> a[indices]\n array(['a', 'b', 'c'],\n dtype='|S1')\n\n Reconstruct the input array from the unique values:\n\n >>> a = np.array([1, 2, 6, 4, 2, 3, 2])\n >>> u, indices = np.unique(a, return_inverse=True"")\n >>> u\n array([1, 2, 3, 4, 6])\n >>> indices\n array([0, 1, 4, 3, 1, 2, 1])\n >>> u[indices]\n array([1, 2, 6, 4, 2, 3, 2])\n \n "; static char __pyx_k_1019[] = "unpackbits (line 13028)"; static char __pyx_k_1020[] = "unpackbits(myarray, axis=None)\n\n Unpacks elements of a uint8 array into a binary-valued output array.\n\n Each element of `myarray` represents a bit-field that should be unpacked\n into a binary-valued output array. The shape of the output array is either\n 1-D (if `axis` is None) or the same shape as the input array with unpacking\n done along the axis specified.\n\n Parameters\n ----------\n myarray : ndarray, uint8 type\n Input array.\n axis : int, optional\n Unpacks along this axis.\n\n Returns\n -------\n unpacked : ndarray, uint8 type\n The elements are binary-valued (0 or 1).\n\n See Also\n --------\n packbits : Packs the elements of a binary-valued array into bits in a uint8\n array.\n\n Examples\n --------\n >>> a = np.array([[2], [7], [23]], dtype=np.uint8)\n >>> a\n array([[ 2],\n [ 7],\n [23]], dtype=uint8)\n >>> b = np.unpackbits(a, axis=1)\n >>> b\n array([[0, 0, 0, 0, 0, 0, 1, 0],\n [0, 0, 0, 0, 0, 1, 1, 1],\n [0, 0, 0, 1, 0, 1, 1, 1]], dtype=uint8)\n \n "; static char __pyx_k_1021[] = "unravel_index (line 13073)"; static char __pyx_k_1022[] = "unravel_index(indices, dims, order='C')\n\n Converts a flat index or array of flat indices into a tuple\n of coordinate arrays.\n\n Parameters\n ----------\n indices : array_like\n An integer array whose elements are indices into the flattened\n version of an array of dimensions ``dims``. Before version 1.6.0,\n this function accepted just one index value.\n dims : tuple of ints\n The shape of the array to use for unraveling ``indices``.\n order : {'C', 'F'}, optional\n .. versionadded:: 1.6.0\n\n Determines whether the indices should be viewed as indexing in\n C (row-major) order or FORTRAN (column-major) order.\n\n Returns\n -------\n unraveled_coords : tuple of ndarray\n Each array in the tuple has the same shape as the ``indices``\n array.\n\n See Also\n --------\n ravel_multi_index\n\n Examples\n --------\n >>> np.unravel_index([22, 41, 37], (7,6))\n (array([3, 6, 6]), array([4, 5, 1]))\n >>> np.unravel_index([31, 41, 13], (7,6), order='F')\n (array([3, 6, 6]), array([4, 5, 1]))\n\n >>> np.unravel_index(1621, (6,7,8,9))\n (3, 1, 4, 1)\n \n "; static char __pyx_k_1023[] = "unwrap (line 13118)"; static char __pyx_k_1024[] = "Unwrap by changing deltas between values to 2*pi complement.\n\n Unwrap radian phase `p` by changing absolute jumps greater than\n `discont` to their 2*pi complement along the given axis.\n\n Parameters\n ----------\n p : array_like\n Input array.\n discont : float, optional\n Maximum discontinuity between values, default is ``pi``.\n axis : int, optional\n Axis along which unwrap will operate, default is the last axis.\n\n Returns\n -------\n out : ndarray\n Output array.\n\n See Also\n --------\n rad2deg, deg2rad\n\n Notes\n -----\n If the discontinuity in `p` is smaller than ``pi``, but larger than\n `discont`, no unwrapping is done because taking the 2*pi complement\n would only make the discontinuity larger.\n\n Examples\n --------\n >>> phase = np.linspace(0, np.pi, num=5)\n >>> phase[3:] += np.pi\n >>> phase\n array([ 0. , 0.78539816, 1.57079633, 5.49778714, 6.28318531])\n >>> np.unwrap(phase)\n array([ 0. , 0.78539816, 1.57079633, -0.78539816, 0. ])\n \n "; static char __pyx_k_1025[] = "vander (line 13161)"; static char __pyx_k_1026[] = "Generate a Van der Monde matrix.\n\n The columns of the output matrix are decreasing powers of the input\n vector. Specifically, the `i`-th output column is the input vector\n raised element-wise to the power of ``N - i - 1``. Such a matrix with\n a geometric progression in each row is named for Alexandre-Theophile\n Vandermonde.\n\n Parameters\n ----------\n x : array_like\n 1-D input array.\n N : int, optional\n Order of (number of columns in) the output. If `N` is not specified,\n a square array is returned (``N = len(x)``).\n\n Returns\n -------\n out : ndarray\n Van der Monde matrix of order `N`. The first column is ``x^(N-1)``,\n the second ``x^(N-2)`` and so forth.\n\n Examples\n --------\n >>> x = np.array([1, 2, 3, 5])\n >>> N = 3\n >>> np.vander(x, N)\n array([[ 1, 1, 1],\n [ 4, 2, 1],\n [ 9, 3, 1],\n [25, 5, 1]])\n\n >>> np.column_stack([x**(N-1-i) for i in range(N)])\n array([[ 1, 1, 1],\n [ 4, 2, 1],\n [ 9, 3, 1],\n [25, 5, 1]])\n\n >>> x = np.array([1, 2, 3, 5])\n >>> np.vander(x)\n array([[ 1, 1, 1, 1],\n [ 8, 4, 2, 1],\n [ 27, 9, 3, 1],\n [125, 25, 5, 1]])\n\n The determinant of a square Vandermonde matrix is the product\n of the differences between the values of the input vector:\n\n >>> np.linalg.det(np.vander(x))\n 48.000000000000043\n >>> (5-3)*(5-2)*(5-1)*(3-2)*(3-1)*(2-1)\n 48\n \n "; static char __pyx_k_1027[] = "var (line 13219)"; static char __pyx_k_1028[] = "Compute the variance along the specified axis.\n\n Returns the variance of the array elements, a measure of the spread of a\n distribution. The variance is computed for the flattened array by\n default, otherwise over the specified axis.\n\n Parameters\n ----------\n a : array_like\n Array containing numbers whose variance is desired. If `a` is not an\n array, a conversion is attempted.\n axis : int, optional\n Axis along which the variance is computed. The default is to compute\n the variance of the flattened array.\n dtype : data-type, optional\n Type to use in computing the variance. For arrays of integer type\n the default is `float32`; for arrays of float types it is the same as\n the array type.\n out : ndarray, optional\n Alternate output array in which to place the result. It must have\n the same shape as the expected output, but the type is cast if\n necessary.\n ddof : int, optional\n \"Delta Degrees of Freedom\": the divisor used in the calculation is\n ``N - ddof``, where ``N`` represents the number of elements. By\n default `ddof` is zero.\n\n Returns\n -------\n variance : ndarray, see dtype parameter above\n If ``out=None``, returns a new array containing the variance;\n otherwise, a reference to the output array is returned.\n\n See Also\n --------\n std : Standard deviation\n mean : Average\n numpy.doc.ufuncs : Section \"Output arguments\"\n\n Notes\n -----\n The variance is the average of the squared deviations from the mean,\n i.e., ``var = mean(abs(x - x.mean())**2)``.\n\n The mean is normally calculated as ``x.sum() / N``, where ``N = len(x)``.\n If, however, `ddof` is specified, the divisor ``N - ddof`` is used\n instead. In standard statistical practice, ``ddof=1`` provides an\n unbiased estimator of the variance of a hypothetical infinite population.\n ""``ddof=0`` provides a maximum likelihood estimate of the variance for\n normally distributed variables.\n\n Note that for complex numbers, the absolute value is taken before\n squaring, so that the result is always real and nonnegative.\n\n For floating-point input, the variance is computed using the same\n precision the input has. Depending on the input data, this can cause\n the results to be inaccurate, especially for `float32` (see example\n below). Specifying a higher-accuracy accumulator using the ``dtype``\n keyword can alleviate this issue.\n\n Examples\n --------\n >>> a = np.array([[1,2],[3,4]])\n >>> np.var(a)\n 1.25\n >>> np.var(a,0)\n array([ 1., 1.])\n >>> np.var(a,1)\n array([ 0.25, 0.25])\n\n In single precision, var() can be inaccurate:\n\n >>> a = np.zeros((2,512*512), dtype=np.float32)\n >>> a[0,:] = 1.0\n >>> a[1,:] = 0.1\n >>> np.var(a)\n 0.20405951142311096\n\n Computing the standard deviation in float64 is more accurate:\n\n >>> np.var(a, dtype=np.float64)\n 0.20249999932997387\n >>> ((1-0.55)**2 + (0.1-0.55)**2)/2\n 0.20250000000000001\n \n "; static char __pyx_k_1029[] = "vdot (line 13309)"; static char __pyx_k_1030[] = "Return the dot product of two vectors.\n\n The vdot(`a`, `b`) function handles complex numbers differently than\n dot(`a`, `b`). If the first argument is complex the complex conjugate\n of the first argument is used for the calculation of the dot product.\n\n Note that `vdot` handles multidimensional arrays differently than `dot`:\n it does *not* perform a matrix product, but flattens input arguments\n to 1-D vectors first. Consequently, it should only be used for vectors.\n\n Parameters\n ----------\n a : array_like\n If `a` is complex the complex conjugate is taken before calculation\n of the dot product.\n b : array_like\n Second argument to the dot product.\n\n Returns\n -------\n output : ndarray\n Dot product of `a` and `b`. Can be an int, float, or\n complex depending on the types of `a` and `b`.\n\n See Also\n --------\n dot : Return the dot product without using the complex conjugate of the\n first argument.\n\n Examples\n --------\n >>> a = np.array([1+2j,3+4j])\n >>> b = np.array([5+6j,7+8j])\n >>> np.vdot(a, b)\n (70-8j)\n >>> np.vdot(b, a)\n (70+8j)\n\n Note that higher-dimensional arrays are flattened!\n\n >>> a = np.array([[1, 4], [5, 6]])\n >>> b = np.array([[4, 1], [2, 2]])\n >>> np.vdot(a, b)\n 30\n >>> np.vdot(b, a)\n 30\n >>> 1*4 + 4*1 + 5*2 + 6*2\n 30\n \n "; static char __pyx_k_1031[] = "vsplit (line 13364)"; static char __pyx_k_1032[] = "Split an array into multiple sub-arrays vertically (row-wise).\n\n Please refer to the ``split`` documentation. ``vsplit`` is equivalent\n to ``split`` with `axis=0` (default), the array is always split along the\n first axis regardless of the array dimension.\n\n See Also\n --------\n split : Split an array into multiple sub-arrays of equal size.\n\n Examples\n --------\n >>> x = np.arange(16.0).reshape(4, 4)\n >>> x\n array([[ 0., 1., 2., 3.],\n [ 4., 5., 6., 7.],\n [ 8., 9., 10., 11.],\n [ 12., 13., 14., 15.]])\n >>> np.vsplit(x, 2)\n [array([[ 0., 1., 2., 3.],\n [ 4., 5., 6., 7.]]),\n array([[ 8., 9., 10., 11.],\n [ 12., 13., 14., 15.]])]\n >>> np.vsplit(x, np.array([3, 6]))\n [array([[ 0., 1., 2., 3.],\n [ 4., 5., 6., 7.],\n [ 8., 9., 10., 11.]]),\n array([[ 12., 13., 14., 15.]]),\n array([], dtype=float64)]\n\n With a higher dimensional array the split is still along the first axis.\n\n >>> x = np.arange(8.0).reshape(2, 2, 2)\n >>> x\n array([[[ 0., 1.],\n [ 2., 3.]],\n [[ 4., 5.],\n [ 6., 7.]]])\n >>> np.vsplit(x, 2)\n [array([[[ 0., 1.],\n [ 2., 3.]]]),\n array([[[ 4., 5.],\n [ 6., 7.]]])]\n \n "; static char __pyx_k_1033[] = "vstack (line 13413)"; static char __pyx_k_1034[] = "where (line 13464)"; static char __pyx_k_1035[] = "where(condition, [x, y])\n\n Return elements, either from `x` or `y`, depending on `condition`.\n\n If only `condition` is given, return ``condition.nonzero()``.\n\n Parameters\n ----------\n condition : array_like, bool\n When True, yield `x`, otherwise yield `y`.\n x, y : array_like, optional\n Values from which to choose. `x` and `y` need to have the same\n shape as `condition`.\n\n Returns\n -------\n out : ndarray or tuple of ndarrays\n If both `x` and `y` are specified, the output array contains\n elements of `x` where `condition` is True, and elements from\n `y` elsewhere.\n\n If only `condition` is given, return the tuple\n ``condition.nonzero()``, the indices where `condition` is True.\n\n See Also\n --------\n nonzero, choose\n\n Notes\n -----\n If `x` and `y` are given and input arrays are 1-D, `where` is\n equivalent to::\n\n [xv if c else yv for (c,xv,yv) in zip(condition,x,y)]\n\n Examples\n --------\n >>> np.where([[True, False], [True, True]],\n ... [[1, 2], [3, 4]],\n ... [[9, 8], [7, 6]])\n array([[1, 8],\n [3, 4]])\n\n >>> np.where([[0, 1], [1, 0]])\n (array([0, 1]), array([1, 0]))\n\n >>> x = np.arange(9.).reshape(3, 3)\n >>> np.where( x > 5 )\n (array([2, 2, 2]), array([0, 1, 2]))\n >>> x[np.where( x > 3.0 )] # Note: result is 1D.\n array([ 4., 5., 6., 7., 8.])\n >>> np.where(x < 5, x, -1) # Note: broadcasting.\n array([[ 0., 1., 2.],\n [ 3., 4., -1.],\n [-1., -1., -1.]])\n \n "; static char __pyx_k_1036[] = "who (line 13526)"; static char __pyx_k_1037[] = "Print the Numpy arrays in the given dictionary.\n\n If there is no dictionary passed in or `vardict` is None then returns\n Numpy arrays in the globals() dictionary (all Numpy arrays in the\n namespace).\n\n Parameters\n ----------\n vardict : dict, optional\n A dictionary possibly containing ndarrays. Default is globals().\n\n Returns\n -------\n out : None\n Returns 'None'.\n\n Notes\n -----\n Prints out the name, shape, bytes and type of all of the ndarrays present\n in `vardict`.\n\n Examples\n --------\n >>> a = np.arange(10)\n >>> b = np.ones(20)\n >>> np.who()\n Name Shape Bytes Type\n ===========================================================\n a 10 40 int32\n b 20 160 float64\n Upper bound on total bytes = 200\n\n >>> d = {'x': np.arange(2.0), 'y': np.arange(3.0), 'txt': 'Some str',\n ... 'idx':5}\n >>> np.who(d)\n Name Shape Bytes Type\n ===========================================================\n y 3 24 float64\n x 2 16 float64\n Upper bound on total bytes = 40\n \n "; static char __pyx_k__all[] = "all"; static char __pyx_k__any[] = "any"; static char __pyx_k__ar1[] = "ar1"; static char __pyx_k__ar2[] = "ar2"; static char __pyx_k__arr[] = "arr"; static char __pyx_k__ary[] = "ary"; static char __pyx_k__cov[] = "cov"; static char __pyx_k__deg[] = "deg"; static char __pyx_k__doc[] = "doc"; static char __pyx_k__end[] = "end"; static char __pyx_k__fix[] = "fix"; static char __pyx_k__fmt[] = "fmt"; static char __pyx_k__ind[] = "ind"; static char __pyx_k__irr[] = "irr"; static char __pyx_k__ix_[] = "ix_"; static char __pyx_k__mat[] = "mat"; static char __pyx_k__max[] = "max"; static char __pyx_k__min[] = "min"; static char __pyx_k__msg[] = "msg"; static char __pyx_k__nin[] = "nin"; static char __pyx_k__npv[] = "npv"; static char __pyx_k__num[] = "num"; static char __pyx_k__obj[] = "obj"; static char __pyx_k__out[] = "out"; static char __pyx_k__per[] = "per"; static char __pyx_k__pmt[] = "pmt"; static char __pyx_k__ptp[] = "ptp"; static char __pyx_k__put[] = "put"; static char __pyx_k__rep[] = "rep"; static char __pyx_k__sep[] = "sep"; static char __pyx_k__std[] = "std"; static char __pyx_k__sum[] = "sum"; static char __pyx_k__sys[] = "sys"; static char __pyx_k__tol[] = "tol"; static char __pyx_k__tri[] = "tri"; static char __pyx_k__tup[] = "tup"; static char __pyx_k__val[] = "val"; static char __pyx_k__var[] = "var"; static char __pyx_k__who[] = "who"; static char __pyx_k__amax[] = "amax"; static char __pyx_k__amin[] = "amin"; static char __pyx_k__arg1[] = "arg1"; static char __pyx_k__arg2[] = "arg2"; static char __pyx_k__atol[] = "atol"; static char __pyx_k__axes[] = "axes"; static char __pyx_k__axis[] = "axis"; static char __pyx_k__base[] = "base"; static char __pyx_k__beta[] = "beta"; static char __pyx_k__bias[] = "bias"; static char __pyx_k__bins[] = "bins"; static char __pyx_k__bmat[] = "bmat"; static char __pyx_k__copy[] = "copy"; static char __pyx_k__data[] = "data"; static char __pyx_k__ddof[] = "ddof"; static char __pyx_k__diff[] = "diff"; static char __pyx_k__dims[] = "dims"; static char __pyx_k__disp[] = "disp"; static char __pyx_k__file[] = "file"; static char __pyx_k__filt[] = "filt"; static char __pyx_k__full[] = "full"; static char __pyx_k__func[] = "func"; static char __pyx_k__imag[] = "imag"; static char __pyx_k__in1d[] = "in1d"; static char __pyx_k__info[] = "info"; static char __pyx_k__ipmt[] = "ipmt"; static char __pyx_k__keys[] = "keys"; static char __pyx_k__kind[] = "kind"; static char __pyx_k__kron[] = "kron"; static char __pyx_k__left[] = "left"; static char __pyx_k__load[] = "load"; static char __pyx_k__mask[] = "mask"; static char __pyx_k__mean[] = "mean"; static char __pyx_k__mesg[] = "mesg"; static char __pyx_k__mirr[] = "mirr"; static char __pyx_k__mode[] = "mode"; static char __pyx_k__ndim[] = "ndim"; static char __pyx_k__nout[] = "nout"; static char __pyx_k__nper[] = "nper"; static char __pyx_k__over[] = "over"; static char __pyx_k__poly[] = "poly"; static char __pyx_k__ppmt[] = "ppmt"; static char __pyx_k__prod[] = "prod"; static char __pyx_k__rank[] = "rank"; static char __pyx_k__rate[] = "rate"; static char __pyx_k__real[] = "real"; static char __pyx_k__repr[] = "repr"; static char __pyx_k__reps[] = "reps"; static char __pyx_k__roll[] = "roll"; static char __pyx_k__rtol[] = "rtol"; static char __pyx_k__save[] = "save"; static char __pyx_k__side[] = "side"; static char __pyx_k__sinc[] = "sinc"; static char __pyx_k__size[] = "size"; static char __pyx_k__sort[] = "sort"; static char __pyx_k__take[] = "take"; static char __pyx_k__tile[] = "tile"; static char __pyx_k__tril[] = "tril"; static char __pyx_k__trim[] = "trim"; static char __pyx_k__triu[] = "triu"; static char __pyx_k__type[] = "type"; static char __pyx_k__vals[] = "vals"; static char __pyx_k__vdot[] = "vdot"; static char __pyx_k__what[] = "what"; static char __pyx_k__when[] = "when"; static char __pyx_k__angle[] = "angle"; static char __pyx_k__array[] = "array"; static char __pyx_k__axis1[] = "axis1"; static char __pyx_k__axis2[] = "axis2"; static char __pyx_k__axisa[] = "axisa"; static char __pyx_k__axisb[] = "axisb"; static char __pyx_k__axisc[] = "axisc"; static char __pyx_k__char_[] = "char_"; static char __pyx_k__count[] = "count"; static char __pyx_k__cross[] = "cross"; static char __pyx_k__dtype[] = "dtype"; static char __pyx_k__fname[] = "fname"; static char __pyx_k__gdict[] = "gdict"; static char __pyx_k__guess[] = "guess"; static char __pyx_k__inner[] = "inner"; static char __pyx_k__ldict[] = "ldict"; static char __pyx_k__loads[] = "loads"; static char __pyx_k__loose[] = "loose"; static char __pyx_k__msort[] = "msort"; static char __pyx_k__names[] = "names"; static char __pyx_k__ndmin[] = "ndmin"; static char __pyx_k__numpy[] = "numpy"; static char __pyx_k__order[] = "order"; static char __pyx_k__outer[] = "outer"; static char __pyx_k__place[] = "place"; static char __pyx_k__raise[] = "raise"; static char __pyx_k__range[] = "range"; static char __pyx_k__ravel[] = "ravel"; static char __pyx_k__rcond[] = "rcond"; static char __pyx_k__right[] = "right"; static char __pyx_k__roots[] = "roots"; static char __pyx_k__rot90[] = "rot90"; static char __pyx_k__round[] = "round"; static char __pyx_k__savez[] = "savez"; static char __pyx_k__shift[] = "shift"; static char __pyx_k__split[] = "split"; static char __pyx_k__start[] = "start"; static char __pyx_k__style[] = "style"; static char __pyx_k__subok[] = "subok"; static char __pyx_k__trace[] = "trace"; static char __pyx_k__trapz[] = "trapz"; static char __pyx_k__type1[] = "type1"; static char __pyx_k__type2[] = "type2"; static char __pyx_k__under[] = "under"; static char __pyx_k__valid[] = "valid"; static char __pyx_k__where[] = "where"; static char __pyx_k__width[] = "width"; static char __pyx_k__GDFgdf[] = "GDFgdf"; static char __pyx_k__append[] = "append"; static char __pyx_k__argmax[] = "argmax"; static char __pyx_k__argmin[] = "argmin"; static char __pyx_k__around[] = "around"; static char __pyx_k__buffer[] = "buffer"; static char __pyx_k__choose[] = "choose"; static char __pyx_k__cumsum[] = "cumsum"; static char __pyx_k__delete[] = "delete"; static char __pyx_k__device[] = "device"; static char __pyx_k__divide[] = "divide"; static char __pyx_k__dsplit[] = "dsplit"; static char __pyx_k__dstack[] = "dstack"; static char __pyx_k__einsum[] = "einsum"; static char __pyx_k__errobj[] = "errobj"; static char __pyx_k__fliplr[] = "fliplr"; static char __pyx_k__flipud[] = "flipud"; static char __pyx_k__func1d[] = "func1d"; static char __pyx_k__geterr[] = "geterr"; static char __pyx_k__hsplit[] = "hsplit"; static char __pyx_k__hstack[] = "hstack"; static char __pyx_k__infstr[] = "infstr"; static char __pyx_k__insert[] = "insert"; static char __pyx_k__interp[] = "interp"; static char __pyx_k__isreal[] = "isreal"; static char __pyx_k__kaiser[] = "kaiser"; static char __pyx_k__median[] = "median"; static char __pyx_k__module[] = "module"; static char __pyx_k__nanmax[] = "nanmax"; static char __pyx_k__nanmin[] = "nanmin"; static char __pyx_k__nanstr[] = "nanstr"; static char __pyx_k__nansum[] = "nansum"; static char __pyx_k__normed[] = "normed"; static char __pyx_k__number[] = "number"; static char __pyx_k__object[] = "object"; static char __pyx_k__offset[] = "offset"; static char __pyx_k__output[] = "output"; static char __pyx_k__prefix[] = "prefix"; static char __pyx_k__regexp[] = "regexp"; static char __pyx_k__repeat[] = "repeat"; static char __pyx_k__resize[] = "resize"; static char __pyx_k__round_[] = "round_"; static char __pyx_k__rowvar[] = "rowvar"; static char __pyx_k__sample[] = "sample"; static char __pyx_k__sctype[] = "sctype"; static char __pyx_k__select[] = "select"; static char __pyx_k__seterr[] = "seterr"; static char __pyx_k__source[] = "source"; static char __pyx_k__stdout[] = "stdout"; static char __pyx_k__string[] = "string"; static char __pyx_k__to_end[] = "to_end"; static char __pyx_k__unique[] = "unique"; static char __pyx_k__unpack[] = "unpack"; static char __pyx_k__unwrap[] = "unwrap"; static char __pyx_k__values[] = "values"; static char __pyx_k__vander[] = "vander"; static char __pyx_k__vsplit[] = "vsplit"; static char __pyx_k__vstack[] = "vstack"; static char __pyx_k__alltrue[] = "alltrue"; static char __pyx_k__argsort[] = "argsort"; static char __pyx_k__average[] = "average"; static char __pyx_k__choices[] = "choices"; static char __pyx_k__cumprod[] = "cumprod"; static char __pyx_k__default[] = "default"; static char __pyx_k__density[] = "density"; static char __pyx_k__discont[] = "discont"; static char __pyx_k__ediff1d[] = "ediff1d"; static char __pyx_k__extract[] = "extract"; static char __pyx_k__float64[] = "float64"; static char __pyx_k__hamming[] = "hamming"; static char __pyx_k__hanning[] = "hanning"; static char __pyx_k__indices[] = "indices"; static char __pyx_k__invalid[] = "invalid"; static char __pyx_k__lexsort[] = "lexsort"; static char __pyx_k__loadtxt[] = "loadtxt"; static char __pyx_k__lookfor[] = "lookfor"; static char __pyx_k__maxiter[] = "maxiter"; static char __pyx_k__missing[] = "missing"; static char __pyx_k__myarray[] = "myarray"; static char __pyx_k__newline[] = "newline"; static char __pyx_k__nonzero[] = "nonzero"; static char __pyx_k__padding[] = "padding"; static char __pyx_k__pkgload[] = "pkgload"; static char __pyx_k__polyadd[] = "polyadd"; static char __pyx_k__polyder[] = "polyder"; static char __pyx_k__polydiv[] = "polydiv"; static char __pyx_k__polyfit[] = "polyfit"; static char __pyx_k__polyint[] = "polyint"; static char __pyx_k__polymul[] = "polymul"; static char __pyx_k__polysub[] = "polysub"; static char __pyx_k__polyval[] = "polyval"; static char __pyx_k__product[] = "product"; static char __pyx_k__putmask[] = "putmask"; static char __pyx_k__repeats[] = "repeats"; static char __pyx_k__require[] = "require"; static char __pyx_k__reshape[] = "reshape"; static char __pyx_k__savetxt[] = "savetxt"; static char __pyx_k__squeeze[] = "squeeze"; static char __pyx_k__typeset[] = "typeset"; static char __pyx_k__union1d[] = "union1d"; static char __pyx_k__usecols[] = "usecols"; static char __pyx_k__usemask[] = "usemask"; static char __pyx_k__vardict[] = "vardict"; static char __pyx_k__weights[] = "weights"; static char __pyx_k____main__[] = "__main__"; static char __pyx_k____test__[] = "__test__"; static char __pyx_k__allclose[] = "allclose"; static char __pyx_k__alterdot[] = "alterdot"; static char __pyx_k__argwhere[] = "argwhere"; static char __pyx_k__asfarray[] = "asfarray"; static char __pyx_k__asmatrix[] = "asmatrix"; static char __pyx_k__asscalar[] = "asscalar"; static char __pyx_k__bartlett[] = "bartlett"; static char __pyx_k__bincount[] = "bincount"; static char __pyx_k__blackman[] = "blackman"; static char __pyx_k__can_cast[] = "can_cast"; static char __pyx_k__comments[] = "comments"; static char __pyx_k__compress[] = "compress"; static char __pyx_k__condlist[] = "condlist"; static char __pyx_k__convolve[] = "convolve"; static char __pyx_k__corrcoef[] = "corrcoef"; static char __pyx_k__decimals[] = "decimals"; static char __pyx_k__diagflat[] = "diagflat"; static char __pyx_k__digitize[] = "digitize"; static char __pyx_k__fromfile[] = "fromfile"; static char __pyx_k__fromiter[] = "fromiter"; static char __pyx_k__funclist[] = "funclist"; static char __pyx_k__gradient[] = "gradient"; static char __pyx_k__isneginf[] = "isneginf"; static char __pyx_k__isposinf[] = "isposinf"; static char __pyx_k__isscalar[] = "isscalar"; static char __pyx_k__issctype[] = "issctype"; static char __pyx_k__iterable[] = "iterable"; static char __pyx_k__linefeed[] = "linefeed"; static char __pyx_k__maxwidth[] = "maxwidth"; static char __pyx_k__meshgrid[] = "meshgrid"; static char __pyx_k__newshape[] = "newshape"; static char __pyx_k__packbits[] = "packbits"; static char __pyx_k__returned[] = "returned"; static char __pyx_k__rollaxis[] = "rollaxis"; static char __pyx_k__setxor1d[] = "setxor1d"; static char __pyx_k__skiprows[] = "skiprows"; static char __pyx_k__sometrue[] = "sometrue"; static char __pyx_k__suppress[] = "suppress"; static char __pyx_k__swapaxes[] = "swapaxes"; static char __pyx_k__to_begin[] = "to_begin"; static char __pyx_k__toplevel[] = "toplevel"; static char __pyx_k__typename[] = "typename"; static char __pyx_k__array_str[] = "array_str"; static char __pyx_k__autostrip[] = "autostrip"; static char __pyx_k__base_repr[] = "base_repr"; static char __pyx_k__condition[] = "condition"; static char __pyx_k__correlate[] = "correlate"; static char __pyx_k__delimiter[] = "delimiter"; static char __pyx_k__deprecate[] = "deprecate"; static char __pyx_k__docstring[] = "docstring"; static char __pyx_k__edgeitems[] = "edgeitems"; static char __pyx_k__fromregex[] = "fromregex"; static char __pyx_k__getbuffer[] = "getbuffer"; static char __pyx_k__geterrobj[] = "geterrobj"; static char __pyx_k__histogram[] = "histogram"; static char __pyx_k__iscomplex[] = "iscomplex"; static char __pyx_k__isfortran[] = "isfortran"; static char __pyx_k__isrealobj[] = "isrealobj"; static char __pyx_k__linewidth[] = "linewidth"; static char __pyx_k__mafromtxt[] = "mafromtxt"; static char __pyx_k__mask_func[] = "mask_func"; static char __pyx_k__minlength[] = "minlength"; static char __pyx_k__mmap_mode[] = "mmap_mode"; static char __pyx_k__nanargmax[] = "nanargmax"; static char __pyx_k__nanargmin[] = "nanargmin"; static char __pyx_k__ndfromtxt[] = "ndfromtxt"; static char __pyx_k__new_shape[] = "new_shape"; static char __pyx_k__newbuffer[] = "newbuffer"; static char __pyx_k__piecewise[] = "piecewise"; static char __pyx_k__precision[] = "precision"; static char __pyx_k__quicksort[] = "quicksort"; static char __pyx_k__row_stack[] = "row_stack"; static char __pyx_k__safe_eval[] = "safe_eval"; static char __pyx_k__separator[] = "separator"; static char __pyx_k__setdiff1d[] = "setdiff1d"; static char __pyx_k__seterrobj[] = "seterrobj"; static char __pyx_k__tensordot[] = "tensordot"; static char __pyx_k__threshold[] = "threshold"; static char __pyx_k__transpose[] = "transpose"; static char __pyx_k__typechars[] = "typechars"; static char __pyx_k__ValueError[] = "ValueError"; static char __pyx_k____import__[] = "__import__"; static char __pyx_k__add_newdoc[] = "add_newdoc"; static char __pyx_k__array_repr[] = "array_repr"; static char __pyx_k__asanyarray[] = "asanyarray"; static char __pyx_k__atleast_1d[] = "atleast_1d"; static char __pyx_k__atleast_2d[] = "atleast_2d"; static char __pyx_k__atleast_3d[] = "atleast_3d"; static char __pyx_k__choicelist[] = "choicelist"; static char __pyx_k__converters[] = "converters"; static char __pyx_k__cumproduct[] = "cumproduct"; static char __pyx_k__defaultfmt[] = "defaultfmt"; static char __pyx_k__dimensions[] = "dimensions"; static char __pyx_k__frombuffer[] = "frombuffer"; static char __pyx_k__frompyfunc[] = "frompyfunc"; static char __pyx_k__fromstring[] = "fromstring"; static char __pyx_k__genfromtxt[] = "genfromtxt"; static char __pyx_k__getbufsize[] = "getbufsize"; static char __pyx_k__geterrcall[] = "geterrcall"; static char __pyx_k__issubdtype[] = "issubdtype"; static char __pyx_k__nan_to_num[] = "nan_to_num"; static char __pyx_k__obj2sctype[] = "obj2sctype"; static char __pyx_k__percentile[] = "percentile"; static char __pyx_k__recfromcsv[] = "recfromcsv"; static char __pyx_k__recfromtxt[] = "recfromtxt"; static char __pyx_k__regenerate[] = "regenerate"; static char __pyx_k__restoredot[] = "restoredot"; static char __pyx_k__setbufsize[] = "setbufsize"; static char __pyx_k__seterrcall[] = "seterrcall"; static char __pyx_k__trim_zeros[] = "trim_zeros"; static char __pyx_k__unpackbits[] = "unpackbits"; static char __pyx_k__array_equal[] = "array_equal"; static char __pyx_k__array_equiv[] = "array_equiv"; static char __pyx_k__array_split[] = "array_split"; static char __pyx_k__array_types[] = "array_types"; static char __pyx_k__binary_repr[] = "binary_repr"; static char __pyx_k__byte_bounds[] = "byte_bounds"; static char __pyx_k__common_type[] = "common_type"; static char __pyx_k__concatenate[] = "concatenate"; static char __pyx_k__deletechars[] = "deletechars"; static char __pyx_k__excludelist[] = "excludelist"; static char __pyx_k__expand_dims[] = "expand_dims"; static char __pyx_k__flatnonzero[] = "flatnonzero"; static char __pyx_k__get_include[] = "get_include"; static char __pyx_k__histogram2d[] = "histogram2d"; static char __pyx_k__histogramdd[] = "histogramdd"; static char __pyx_k__intersect1d[] = "intersect1d"; static char __pyx_k__issubclass_[] = "issubclass_"; static char __pyx_k__issubsctype[] = "issubsctype"; static char __pyx_k__mintypecode[] = "mintypecode"; static char __pyx_k__multi_index[] = "multi_index"; static char __pyx_k__result_type[] = "result_type"; static char __pyx_k__sctype2char[] = "sctype2char"; static char __pyx_k__show_config[] = "show_config"; static char __pyx_k__skip_footer[] = "skip_footer"; static char __pyx_k__skip_header[] = "skip_header"; static char __pyx_k__RuntimeError[] = "RuntimeError"; static char __pyx_k__array2string[] = "array2string"; static char __pyx_k__column_stack[] = "column_stack"; static char __pyx_k__diag_indices[] = "diag_indices"; static char __pyx_k__finance_rate[] = "finance_rate"; static char __pyx_k__int_asbuffer[] = "int_asbuffer"; static char __pyx_k__iscomplexobj[] = "iscomplexobj"; static char __pyx_k__mask_indices[] = "mask_indices"; static char __pyx_k__nested_iters[] = "nested_iters"; static char __pyx_k__old_behavior[] = "old_behavior"; static char __pyx_k__requirements[] = "requirements"; static char __pyx_k__return_index[] = "return_index"; static char __pyx_k__scalar_types[] = "scalar_types"; static char __pyx_k__searchsorted[] = "searchsorted"; static char __pyx_k__seq_of_zeros[] = "seq_of_zeros"; static char __pyx_k__sort_complex[] = "sort_complex"; static char __pyx_k__tril_indices[] = "tril_indices"; static char __pyx_k__triu_indices[] = "triu_indices"; static char __pyx_k__assume_unique[] = "assume_unique"; static char __pyx_k__count_nonzero[] = "count_nonzero"; static char __pyx_k__datetime_data[] = "datetime_data"; static char __pyx_k__fill_diagonal[] = "fill_diagonal"; static char __pyx_k__invalid_raise[] = "invalid_raise"; static char __pyx_k__promote_types[] = "promote_types"; static char __pyx_k__real_if_close[] = "real_if_close"; static char __pyx_k__reinvest_rate[] = "reinvest_rate"; static char __pyx_k__replace_space[] = "replace_space"; static char __pyx_k__unravel_index[] = "unravel_index"; static char __pyx_k__asfortranarray[] = "asfortranarray"; static char __pyx_k__case_sensitive[] = "case_sensitive"; static char __pyx_k__filling_values[] = "filling_values"; static char __pyx_k__get_array_wrap[] = "get_array_wrap"; static char __pyx_k__import_modules[] = "import_modules"; static char __pyx_k__max_line_width[] = "max_line_width"; static char __pyx_k__maximum_sctype[] = "maximum_sctype"; static char __pyx_k__missing_values[] = "missing_values"; static char __pyx_k__return_inverse[] = "return_inverse"; static char __pyx_k__suppress_small[] = "suppress_small"; static char __pyx_k__apply_over_axes[] = "apply_over_axes"; static char __pyx_k__min_scalar_type[] = "min_scalar_type"; static char __pyx_k__overwrite_input[] = "overwrite_input"; static char __pyx_k__set_numeric_ops[] = "set_numeric_ops"; static char __pyx_k__apply_along_axis[] = "apply_along_axis"; static char __pyx_k__broadcast_arrays[] = "broadcast_arrays"; static char __pyx_k__find_common_type[] = "find_common_type"; static char __pyx_k__get_printoptions[] = "get_printoptions"; static char __pyx_k__may_share_memory[] = "may_share_memory"; static char __pyx_k__savez_compressed[] = "savez_compressed"; static char __pyx_k__set_printoptions[] = "set_printoptions"; static char __pyx_k__arrays_and_dtypes[] = "arrays_and_dtypes"; static char __pyx_k__asarray_chkfinite[] = "asarray_chkfinite"; static char __pyx_k__ascontiguousarray[] = "ascontiguousarray"; static char __pyx_k__diag_indices_from[] = "diag_indices_from"; static char __pyx_k__ravel_multi_index[] = "ravel_multi_index"; static char __pyx_k__tril_indices_from[] = "tril_indices_from"; static char __pyx_k__triu_indices_from[] = "triu_indices_from"; static char __pyx_k__compare_chararrays[] = "compare_chararrays"; static char __pyx_k__deprecate_with_doc[] = "deprecate_with_doc"; static char __pyx_k__NotImplementedError[] = "NotImplementedError"; static char __pyx_k__indices_or_sections[] = "indices_or_sections"; static char __pyx_k__set_string_function[] = "set_string_function"; static PyObject *__pyx_kp_u_1000; static PyObject *__pyx_kp_u_1001; static PyObject *__pyx_kp_u_1002; static PyObject *__pyx_kp_u_1003; static PyObject *__pyx_kp_u_1004; static PyObject *__pyx_kp_u_1005; static PyObject *__pyx_kp_u_1006; static PyObject *__pyx_kp_u_1007; static PyObject *__pyx_kp_u_1008; static PyObject *__pyx_kp_u_1009; static PyObject *__pyx_kp_u_1010; static PyObject *__pyx_kp_u_1011; static PyObject *__pyx_kp_u_1012; static PyObject *__pyx_kp_u_1013; static PyObject *__pyx_kp_u_1014; static PyObject *__pyx_kp_u_1015; static PyObject *__pyx_kp_u_1016; static PyObject *__pyx_kp_u_1017; static PyObject *__pyx_kp_u_1018; static PyObject *__pyx_kp_u_1019; static PyObject *__pyx_kp_u_1020; static PyObject *__pyx_kp_u_1021; static PyObject *__pyx_kp_u_1022; static PyObject *__pyx_kp_u_1023; static PyObject *__pyx_kp_u_1024; static PyObject *__pyx_kp_u_1025; static PyObject *__pyx_kp_u_1026; static PyObject *__pyx_kp_u_1027; static PyObject *__pyx_kp_u_1028; static PyObject *__pyx_kp_u_1029; static PyObject *__pyx_kp_u_1030; static PyObject *__pyx_kp_u_1031; static PyObject *__pyx_kp_u_1032; static PyObject *__pyx_kp_u_1033; static PyObject *__pyx_kp_u_1034; static PyObject *__pyx_kp_u_1035; static PyObject *__pyx_kp_u_1036; static PyObject *__pyx_kp_u_1037; static PyObject *__pyx_kp_s_16; static PyObject *__pyx_kp_s_19; static PyObject *__pyx_n_s_212; static PyObject *__pyx_n_s_245; static PyObject *__pyx_kp_s_42; static PyObject *__pyx_kp_s_43; static PyObject *__pyx_kp_s_5; static PyObject *__pyx_kp_u_53; static PyObject *__pyx_kp_u_55; static PyObject *__pyx_kp_u_57; static PyObject *__pyx_kp_u_582; static PyObject *__pyx_kp_u_583; static PyObject *__pyx_kp_u_584; static PyObject *__pyx_kp_u_585; static PyObject *__pyx_kp_u_586; static PyObject *__pyx_kp_u_587; static PyObject *__pyx_kp_u_588; static PyObject *__pyx_kp_u_589; static PyObject *__pyx_kp_u_59; static PyObject *__pyx_kp_u_590; static PyObject *__pyx_kp_u_591; static PyObject *__pyx_kp_u_592; static PyObject *__pyx_kp_u_593; static PyObject *__pyx_kp_u_594; static PyObject *__pyx_kp_u_595; static PyObject *__pyx_kp_u_596; static PyObject *__pyx_kp_u_597; static PyObject *__pyx_kp_u_598; static PyObject *__pyx_kp_u_599; static PyObject *__pyx_kp_s_6; static PyObject *__pyx_kp_u_60; static PyObject *__pyx_kp_u_600; static PyObject *__pyx_kp_u_601; static PyObject *__pyx_kp_u_602; static PyObject *__pyx_kp_u_603; static PyObject *__pyx_kp_u_604; static PyObject *__pyx_kp_u_605; static PyObject *__pyx_kp_u_606; static PyObject *__pyx_kp_u_607; static PyObject *__pyx_kp_u_608; static PyObject *__pyx_kp_u_609; static PyObject *__pyx_kp_u_610; static PyObject *__pyx_kp_u_611; static PyObject *__pyx_kp_u_612; static PyObject *__pyx_kp_u_613; static PyObject *__pyx_kp_u_614; static PyObject *__pyx_kp_u_615; static PyObject *__pyx_kp_u_616; static PyObject *__pyx_kp_u_617; static PyObject *__pyx_kp_u_618; static PyObject *__pyx_kp_u_619; static PyObject *__pyx_kp_u_620; static PyObject *__pyx_kp_u_621; static PyObject *__pyx_kp_u_622; static PyObject *__pyx_kp_u_623; static PyObject *__pyx_kp_u_624; static PyObject *__pyx_kp_u_625; static PyObject *__pyx_kp_u_626; static PyObject *__pyx_kp_u_627; static PyObject *__pyx_kp_u_628; static PyObject *__pyx_kp_u_629; static PyObject *__pyx_kp_u_63; static PyObject *__pyx_kp_u_630; static PyObject *__pyx_kp_u_631; static PyObject *__pyx_kp_u_632; static PyObject *__pyx_kp_u_633; static PyObject *__pyx_kp_u_634; static PyObject *__pyx_kp_u_635; static PyObject *__pyx_kp_u_636; static PyObject *__pyx_kp_u_637; static PyObject *__pyx_kp_u_638; static PyObject *__pyx_kp_u_639; static PyObject *__pyx_kp_u_640; static PyObject *__pyx_kp_u_641; static PyObject *__pyx_kp_u_642; static PyObject *__pyx_kp_u_643; static PyObject *__pyx_kp_u_644; static PyObject *__pyx_kp_u_645; static PyObject *__pyx_kp_u_646; static PyObject *__pyx_kp_u_647; static PyObject *__pyx_kp_u_648; static PyObject *__pyx_kp_u_649; static PyObject *__pyx_kp_u_650; static PyObject *__pyx_kp_u_651; static PyObject *__pyx_kp_u_652; static PyObject *__pyx_kp_u_653; static PyObject *__pyx_kp_u_654; static PyObject *__pyx_kp_u_655; static PyObject *__pyx_kp_u_656; static PyObject *__pyx_kp_u_657; static PyObject *__pyx_kp_u_658; static PyObject *__pyx_kp_u_659; static PyObject *__pyx_kp_u_660; static PyObject *__pyx_kp_u_661; static PyObject *__pyx_kp_u_662; static PyObject *__pyx_kp_u_663; static PyObject *__pyx_kp_u_664; static PyObject *__pyx_kp_u_665; static PyObject *__pyx_kp_u_666; static PyObject *__pyx_kp_u_667; static PyObject *__pyx_kp_u_668; static PyObject *__pyx_kp_u_669; static PyObject *__pyx_kp_s_67; static PyObject *__pyx_kp_u_670; static PyObject *__pyx_kp_u_671; static PyObject *__pyx_kp_u_672; static PyObject *__pyx_kp_u_673; static PyObject *__pyx_kp_u_674; static PyObject *__pyx_kp_u_675; static PyObject *__pyx_kp_u_676; static PyObject *__pyx_kp_u_677; static PyObject *__pyx_kp_u_678; static PyObject *__pyx_kp_u_679; static PyObject *__pyx_n_s_68; static PyObject *__pyx_kp_u_680; static PyObject *__pyx_kp_u_681; static PyObject *__pyx_kp_u_682; static PyObject *__pyx_kp_u_683; static PyObject *__pyx_kp_u_684; static PyObject *__pyx_kp_u_685; static PyObject *__pyx_kp_u_686; static PyObject *__pyx_kp_u_687; static PyObject *__pyx_kp_u_688; static PyObject *__pyx_kp_u_689; static PyObject *__pyx_kp_u_690; static PyObject *__pyx_kp_u_691; static PyObject *__pyx_kp_u_692; static PyObject *__pyx_kp_u_693; static PyObject *__pyx_kp_u_694; static PyObject *__pyx_kp_u_695; static PyObject *__pyx_kp_u_696; static PyObject *__pyx_kp_u_697; static PyObject *__pyx_kp_u_698; static PyObject *__pyx_kp_u_699; static PyObject *__pyx_kp_u_700; static PyObject *__pyx_kp_u_701; static PyObject *__pyx_kp_u_702; static PyObject *__pyx_kp_u_703; static PyObject *__pyx_kp_u_704; static PyObject *__pyx_kp_u_705; static PyObject *__pyx_kp_u_706; static PyObject *__pyx_kp_u_707; static PyObject *__pyx_kp_u_708; static PyObject *__pyx_kp_u_709; static PyObject *__pyx_kp_u_710; static PyObject *__pyx_kp_u_711; static PyObject *__pyx_kp_u_712; static PyObject *__pyx_kp_u_713; static PyObject *__pyx_kp_u_714; static PyObject *__pyx_kp_u_715; static PyObject *__pyx_kp_u_716; static PyObject *__pyx_kp_u_717; static PyObject *__pyx_kp_u_718; static PyObject *__pyx_kp_u_719; static PyObject *__pyx_kp_u_720; static PyObject *__pyx_kp_u_721; static PyObject *__pyx_kp_u_722; static PyObject *__pyx_kp_u_723; static PyObject *__pyx_kp_u_724; static PyObject *__pyx_kp_u_725; static PyObject *__pyx_kp_u_726; static PyObject *__pyx_kp_u_727; static PyObject *__pyx_kp_u_728; static PyObject *__pyx_kp_u_729; static PyObject *__pyx_kp_u_730; static PyObject *__pyx_kp_u_731; static PyObject *__pyx_kp_u_732; static PyObject *__pyx_kp_u_733; static PyObject *__pyx_kp_u_734; static PyObject *__pyx_kp_u_735; static PyObject *__pyx_kp_u_736; static PyObject *__pyx_kp_u_737; static PyObject *__pyx_kp_u_738; static PyObject *__pyx_kp_u_739; static PyObject *__pyx_kp_u_740; static PyObject *__pyx_kp_u_741; static PyObject *__pyx_kp_u_742; static PyObject *__pyx_kp_u_743; static PyObject *__pyx_kp_u_744; static PyObject *__pyx_kp_u_745; static PyObject *__pyx_kp_u_746; static PyObject *__pyx_kp_u_747; static PyObject *__pyx_kp_u_748; static PyObject *__pyx_kp_u_749; static PyObject *__pyx_kp_u_750; static PyObject *__pyx_kp_u_751; static PyObject *__pyx_kp_u_752; static PyObject *__pyx_kp_u_753; static PyObject *__pyx_kp_u_754; static PyObject *__pyx_kp_u_755; static PyObject *__pyx_kp_u_756; static PyObject *__pyx_kp_u_757; static PyObject *__pyx_kp_u_758; static PyObject *__pyx_kp_u_759; static PyObject *__pyx_kp_u_760; static PyObject *__pyx_kp_u_761; static PyObject *__pyx_kp_u_762; static PyObject *__pyx_kp_u_763; static PyObject *__pyx_kp_u_764; static PyObject *__pyx_kp_u_765; static PyObject *__pyx_kp_u_766; static PyObject *__pyx_kp_u_767; static PyObject *__pyx_kp_u_768; static PyObject *__pyx_kp_u_769; static PyObject *__pyx_kp_u_770; static PyObject *__pyx_kp_u_771; static PyObject *__pyx_kp_u_772; static PyObject *__pyx_kp_u_773; static PyObject *__pyx_kp_u_774; static PyObject *__pyx_kp_u_775; static PyObject *__pyx_kp_u_776; static PyObject *__pyx_kp_u_777; static PyObject *__pyx_kp_u_778; static PyObject *__pyx_kp_u_779; static PyObject *__pyx_kp_u_780; static PyObject *__pyx_kp_u_781; static PyObject *__pyx_kp_u_782; static PyObject *__pyx_kp_u_783; static PyObject *__pyx_kp_u_784; static PyObject *__pyx_kp_u_785; static PyObject *__pyx_kp_u_786; static PyObject *__pyx_kp_u_787; static PyObject *__pyx_kp_u_788; static PyObject *__pyx_kp_u_789; static PyObject *__pyx_kp_u_790; static PyObject *__pyx_kp_u_791; static PyObject *__pyx_kp_u_792; static PyObject *__pyx_kp_u_793; static PyObject *__pyx_kp_u_794; static PyObject *__pyx_kp_u_795; static PyObject *__pyx_kp_u_796; static PyObject *__pyx_kp_u_797; static PyObject *__pyx_kp_u_798; static PyObject *__pyx_kp_u_799; static PyObject *__pyx_kp_u_800; static PyObject *__pyx_kp_u_801; static PyObject *__pyx_kp_u_802; static PyObject *__pyx_kp_u_803; static PyObject *__pyx_kp_u_804; static PyObject *__pyx_kp_u_805; static PyObject *__pyx_kp_u_806; static PyObject *__pyx_kp_u_807; static PyObject *__pyx_kp_u_808; static PyObject *__pyx_kp_u_809; static PyObject *__pyx_kp_u_810; static PyObject *__pyx_kp_u_811; static PyObject *__pyx_kp_u_812; static PyObject *__pyx_kp_u_813; static PyObject *__pyx_kp_u_814; static PyObject *__pyx_kp_u_815; static PyObject *__pyx_kp_u_816; static PyObject *__pyx_kp_u_817; static PyObject *__pyx_kp_u_818; static PyObject *__pyx_kp_u_819; static PyObject *__pyx_kp_u_820; static PyObject *__pyx_kp_u_821; static PyObject *__pyx_kp_u_822; static PyObject *__pyx_kp_u_823; static PyObject *__pyx_kp_u_824; static PyObject *__pyx_kp_u_825; static PyObject *__pyx_kp_u_826; static PyObject *__pyx_kp_u_827; static PyObject *__pyx_kp_u_828; static PyObject *__pyx_kp_u_829; static PyObject *__pyx_kp_u_830; static PyObject *__pyx_kp_u_831; static PyObject *__pyx_kp_u_832; static PyObject *__pyx_kp_u_833; static PyObject *__pyx_kp_u_834; static PyObject *__pyx_kp_u_835; static PyObject *__pyx_kp_u_836; static PyObject *__pyx_kp_u_837; static PyObject *__pyx_kp_u_838; static PyObject *__pyx_kp_u_839; static PyObject *__pyx_kp_u_840; static PyObject *__pyx_kp_u_841; static PyObject *__pyx_kp_u_842; static PyObject *__pyx_kp_u_843; static PyObject *__pyx_kp_u_844; static PyObject *__pyx_kp_u_845; static PyObject *__pyx_kp_u_846; static PyObject *__pyx_kp_u_847; static PyObject *__pyx_kp_u_848; static PyObject *__pyx_kp_u_849; static PyObject *__pyx_kp_u_850; static PyObject *__pyx_kp_u_851; static PyObject *__pyx_kp_u_852; static PyObject *__pyx_kp_u_853; static PyObject *__pyx_kp_u_854; static PyObject *__pyx_kp_u_855; static PyObject *__pyx_kp_u_856; static PyObject *__pyx_kp_u_857; static PyObject *__pyx_kp_u_858; static PyObject *__pyx_kp_u_859; static PyObject *__pyx_kp_u_860; static PyObject *__pyx_kp_u_861; static PyObject *__pyx_kp_u_862; static PyObject *__pyx_kp_u_863; static PyObject *__pyx_kp_u_864; static PyObject *__pyx_kp_u_865; static PyObject *__pyx_kp_u_866; static PyObject *__pyx_kp_u_867; static PyObject *__pyx_kp_u_868; static PyObject *__pyx_kp_u_869; static PyObject *__pyx_kp_u_870; static PyObject *__pyx_kp_u_871; static PyObject *__pyx_kp_u_872; static PyObject *__pyx_kp_u_873; static PyObject *__pyx_kp_u_874; static PyObject *__pyx_kp_u_875; static PyObject *__pyx_kp_u_876; static PyObject *__pyx_kp_u_877; static PyObject *__pyx_kp_u_878; static PyObject *__pyx_kp_u_879; static PyObject *__pyx_kp_u_880; static PyObject *__pyx_kp_u_881; static PyObject *__pyx_kp_u_882; static PyObject *__pyx_kp_u_883; static PyObject *__pyx_kp_u_884; static PyObject *__pyx_kp_u_885; static PyObject *__pyx_kp_u_886; static PyObject *__pyx_kp_u_887; static PyObject *__pyx_kp_u_888; static PyObject *__pyx_kp_u_889; static PyObject *__pyx_kp_u_890; static PyObject *__pyx_kp_u_891; static PyObject *__pyx_kp_u_892; static PyObject *__pyx_kp_u_893; static PyObject *__pyx_kp_u_894; static PyObject *__pyx_kp_u_895; static PyObject *__pyx_kp_u_896; static PyObject *__pyx_kp_u_897; static PyObject *__pyx_kp_u_898; static PyObject *__pyx_kp_u_899; static PyObject *__pyx_kp_u_900; static PyObject *__pyx_kp_u_901; static PyObject *__pyx_kp_u_902; static PyObject *__pyx_kp_u_903; static PyObject *__pyx_kp_u_904; static PyObject *__pyx_kp_u_905; static PyObject *__pyx_kp_u_906; static PyObject *__pyx_kp_u_907; static PyObject *__pyx_kp_u_908; static PyObject *__pyx_kp_u_909; static PyObject *__pyx_kp_u_910; static PyObject *__pyx_kp_u_911; static PyObject *__pyx_kp_u_912; static PyObject *__pyx_kp_u_913; static PyObject *__pyx_kp_u_914; static PyObject *__pyx_kp_u_915; static PyObject *__pyx_kp_u_916; static PyObject *__pyx_kp_u_917; static PyObject *__pyx_kp_u_918; static PyObject *__pyx_kp_u_919; static PyObject *__pyx_kp_u_920; static PyObject *__pyx_kp_u_921; static PyObject *__pyx_kp_u_922; static PyObject *__pyx_kp_u_923; static PyObject *__pyx_kp_u_924; static PyObject *__pyx_kp_u_925; static PyObject *__pyx_kp_u_926; static PyObject *__pyx_kp_u_927; static PyObject *__pyx_kp_u_928; static PyObject *__pyx_kp_u_929; static PyObject *__pyx_kp_u_930; static PyObject *__pyx_kp_u_931; static PyObject *__pyx_kp_u_932; static PyObject *__pyx_kp_u_933; static PyObject *__pyx_kp_u_934; static PyObject *__pyx_kp_u_935; static PyObject *__pyx_kp_u_936; static PyObject *__pyx_kp_u_937; static PyObject *__pyx_kp_u_938; static PyObject *__pyx_kp_u_939; static PyObject *__pyx_kp_u_940; static PyObject *__pyx_kp_u_941; static PyObject *__pyx_kp_u_942; static PyObject *__pyx_kp_u_943; static PyObject *__pyx_kp_u_944; static PyObject *__pyx_kp_u_945; static PyObject *__pyx_kp_u_946; static PyObject *__pyx_kp_u_947; static PyObject *__pyx_kp_u_948; static PyObject *__pyx_kp_u_949; static PyObject *__pyx_kp_u_950; static PyObject *__pyx_kp_u_951; static PyObject *__pyx_kp_u_952; static PyObject *__pyx_kp_u_953; static PyObject *__pyx_kp_u_954; static PyObject *__pyx_kp_u_955; static PyObject *__pyx_kp_u_956; static PyObject *__pyx_kp_u_957; static PyObject *__pyx_kp_u_958; static PyObject *__pyx_kp_u_959; static PyObject *__pyx_kp_u_960; static PyObject *__pyx_kp_u_961; static PyObject *__pyx_kp_u_962; static PyObject *__pyx_kp_u_963; static PyObject *__pyx_kp_u_964; static PyObject *__pyx_kp_u_965; static PyObject *__pyx_kp_u_966; static PyObject *__pyx_kp_u_967; static PyObject *__pyx_kp_u_968; static PyObject *__pyx_kp_u_969; static PyObject *__pyx_kp_u_970; static PyObject *__pyx_kp_u_971; static PyObject *__pyx_kp_u_972; static PyObject *__pyx_kp_u_973; static PyObject *__pyx_kp_u_974; static PyObject *__pyx_kp_u_975; static PyObject *__pyx_kp_u_976; static PyObject *__pyx_kp_u_977; static PyObject *__pyx_kp_u_978; static PyObject *__pyx_kp_u_979; static PyObject *__pyx_kp_u_980; static PyObject *__pyx_kp_u_981; static PyObject *__pyx_kp_u_982; static PyObject *__pyx_kp_u_983; static PyObject *__pyx_kp_u_984; static PyObject *__pyx_kp_u_985; static PyObject *__pyx_kp_u_986; static PyObject *__pyx_kp_u_987; static PyObject *__pyx_kp_u_988; static PyObject *__pyx_kp_u_989; static PyObject *__pyx_kp_u_990; static PyObject *__pyx_kp_u_991; static PyObject *__pyx_kp_u_992; static PyObject *__pyx_kp_u_993; static PyObject *__pyx_kp_u_994; static PyObject *__pyx_kp_u_995; static PyObject *__pyx_kp_u_996; static PyObject *__pyx_kp_u_997; static PyObject *__pyx_kp_u_998; static PyObject *__pyx_kp_u_999; static PyObject *__pyx_n_s__A; static PyObject *__pyx_n_s__C; static PyObject *__pyx_n_s__GDFgdf; static PyObject *__pyx_n_s__M; static PyObject *__pyx_n_s__N; static PyObject *__pyx_n_s__NotImplementedError; static PyObject *__pyx_n_s__RuntimeError; static PyObject *__pyx_n_s__ValueError; static PyObject *__pyx_n_s__X; static PyObject *__pyx_n_s___; static PyObject *__pyx_n_s____import__; static PyObject *__pyx_n_s____main__; static PyObject *__pyx_n_s____test__; static PyObject *__pyx_n_s__a; static PyObject *__pyx_n_s__a1; static PyObject *__pyx_n_s__a2; static PyObject *__pyx_n_s__add_newdoc; static PyObject *__pyx_n_s__all; static PyObject *__pyx_n_s__allclose; static PyObject *__pyx_n_s__alltrue; static PyObject *__pyx_n_s__alterdot; static PyObject *__pyx_n_s__amax; static PyObject *__pyx_n_s__amin; static PyObject *__pyx_n_s__angle; static PyObject *__pyx_n_s__any; static PyObject *__pyx_n_s__append; static PyObject *__pyx_n_s__apply_along_axis; static PyObject *__pyx_n_s__apply_over_axes; static PyObject *__pyx_n_s__ar; static PyObject *__pyx_n_s__ar1; static PyObject *__pyx_n_s__ar2; static PyObject *__pyx_n_s__arg1; static PyObject *__pyx_n_s__arg2; static PyObject *__pyx_n_s__argmax; static PyObject *__pyx_n_s__argmin; static PyObject *__pyx_n_s__argsort; static PyObject *__pyx_n_s__argwhere; static PyObject *__pyx_n_s__around; static PyObject *__pyx_n_s__arr; static PyObject *__pyx_n_s__array; static PyObject *__pyx_n_s__array2string; static PyObject *__pyx_n_s__array_equal; static PyObject *__pyx_n_s__array_equiv; static PyObject *__pyx_n_s__array_repr; static PyObject *__pyx_n_s__array_split; static PyObject *__pyx_n_s__array_str; static PyObject *__pyx_n_s__array_types; static PyObject *__pyx_n_s__arrays_and_dtypes; static PyObject *__pyx_n_s__ary; static PyObject *__pyx_n_s__asanyarray; static PyObject *__pyx_n_s__asarray_chkfinite; static PyObject *__pyx_n_s__ascontiguousarray; static PyObject *__pyx_n_s__asfarray; static PyObject *__pyx_n_s__asfortranarray; static PyObject *__pyx_n_s__asmatrix; static PyObject *__pyx_n_s__asscalar; static PyObject *__pyx_n_s__assume_unique; static PyObject *__pyx_n_s__atleast_1d; static PyObject *__pyx_n_s__atleast_2d; static PyObject *__pyx_n_s__atleast_3d; static PyObject *__pyx_n_s__atol; static PyObject *__pyx_n_s__autostrip; static PyObject *__pyx_n_s__average; static PyObject *__pyx_n_s__axes; static PyObject *__pyx_n_s__axis; static PyObject *__pyx_n_s__axis1; static PyObject *__pyx_n_s__axis2; static PyObject *__pyx_n_s__axisa; static PyObject *__pyx_n_s__axisb; static PyObject *__pyx_n_s__axisc; static PyObject *__pyx_n_s__b; static PyObject *__pyx_n_s__bartlett; static PyObject *__pyx_n_s__base; static PyObject *__pyx_n_s__base_repr; static PyObject *__pyx_n_s__beta; static PyObject *__pyx_n_s__bias; static PyObject *__pyx_n_s__binary_repr; static PyObject *__pyx_n_s__bincount; static PyObject *__pyx_n_s__bins; static PyObject *__pyx_n_s__blackman; static PyObject *__pyx_n_s__bmat; static PyObject *__pyx_n_s__broadcast_arrays; static PyObject *__pyx_n_s__buffer; static PyObject *__pyx_n_s__byte_bounds; static PyObject *__pyx_n_s__can_cast; static PyObject *__pyx_n_s__case_sensitive; static PyObject *__pyx_n_s__char_; static PyObject *__pyx_n_s__choicelist; static PyObject *__pyx_n_s__choices; static PyObject *__pyx_n_s__choose; static PyObject *__pyx_n_s__column_stack; static PyObject *__pyx_n_s__comments; static PyObject *__pyx_n_s__common_type; static PyObject *__pyx_n_s__compare_chararrays; static PyObject *__pyx_n_s__compress; static PyObject *__pyx_n_s__concatenate; static PyObject *__pyx_n_s__condition; static PyObject *__pyx_n_s__condlist; static PyObject *__pyx_n_s__converters; static PyObject *__pyx_n_s__convolve; static PyObject *__pyx_n_s__copy; static PyObject *__pyx_n_s__corrcoef; static PyObject *__pyx_n_s__correlate; static PyObject *__pyx_n_s__count; static PyObject *__pyx_n_s__count_nonzero; static PyObject *__pyx_n_s__cov; static PyObject *__pyx_n_s__cross; static PyObject *__pyx_n_s__cumprod; static PyObject *__pyx_n_s__cumproduct; static PyObject *__pyx_n_s__cumsum; static PyObject *__pyx_n_s__d; static PyObject *__pyx_n_s__data; static PyObject *__pyx_n_s__datetime_data; static PyObject *__pyx_n_s__ddof; static PyObject *__pyx_n_s__decimals; static PyObject *__pyx_n_s__default; static PyObject *__pyx_n_s__defaultfmt; static PyObject *__pyx_n_s__deg; static PyObject *__pyx_n_s__delete; static PyObject *__pyx_n_s__deletechars; static PyObject *__pyx_n_s__delimiter; static PyObject *__pyx_n_s__density; static PyObject *__pyx_n_s__deprecate; static PyObject *__pyx_n_s__deprecate_with_doc; static PyObject *__pyx_n_s__device; static PyObject *__pyx_n_s__diag_indices; static PyObject *__pyx_n_s__diag_indices_from; static PyObject *__pyx_n_s__diagflat; static PyObject *__pyx_n_s__diff; static PyObject *__pyx_n_s__digitize; static PyObject *__pyx_n_s__dimensions; static PyObject *__pyx_n_s__dims; static PyObject *__pyx_n_s__discont; static PyObject *__pyx_n_s__disp; static PyObject *__pyx_n_s__divide; static PyObject *__pyx_n_s__doc; static PyObject *__pyx_n_s__docstring; static PyObject *__pyx_n_s__dsplit; static PyObject *__pyx_n_s__dstack; static PyObject *__pyx_n_s__dtype; static PyObject *__pyx_n_s__dx; static PyObject *__pyx_n_s__edgeitems; static PyObject *__pyx_n_s__ediff1d; static PyObject *__pyx_n_s__einsum; static PyObject *__pyx_n_s__end; static PyObject *__pyx_n_s__errobj; static PyObject *__pyx_n_s__excludelist; static PyObject *__pyx_n_s__expand_dims; static PyObject *__pyx_n_s__extract; static PyObject *__pyx_n_s__f; static PyObject *__pyx_n_s__fb; static PyObject *__pyx_n_s__file; static PyObject *__pyx_n_s__fill_diagonal; static PyObject *__pyx_n_s__filling_values; static PyObject *__pyx_n_s__filt; static PyObject *__pyx_n_s__finance_rate; static PyObject *__pyx_n_s__find_common_type; static PyObject *__pyx_n_s__fix; static PyObject *__pyx_n_s__flatnonzero; static PyObject *__pyx_n_s__fliplr; static PyObject *__pyx_n_s__flipud; static PyObject *__pyx_n_s__float64; static PyObject *__pyx_n_s__fmt; static PyObject *__pyx_n_s__fname; static PyObject *__pyx_n_s__fp; static PyObject *__pyx_n_s__frombuffer; static PyObject *__pyx_n_s__fromfile; static PyObject *__pyx_n_s__fromiter; static PyObject *__pyx_n_s__frompyfunc; static PyObject *__pyx_n_s__fromregex; static PyObject *__pyx_n_s__fromstring; static PyObject *__pyx_n_s__full; static PyObject *__pyx_n_s__func; static PyObject *__pyx_n_s__func1d; static PyObject *__pyx_n_s__funclist; static PyObject *__pyx_n_s__fv; static PyObject *__pyx_n_s__gdict; static PyObject *__pyx_n_s__genfromtxt; static PyObject *__pyx_n_s__get_array_wrap; static PyObject *__pyx_n_s__get_include; static PyObject *__pyx_n_s__get_printoptions; static PyObject *__pyx_n_s__getbuffer; static PyObject *__pyx_n_s__getbufsize; static PyObject *__pyx_n_s__geterr; static PyObject *__pyx_n_s__geterrcall; static PyObject *__pyx_n_s__geterrobj; static PyObject *__pyx_n_s__gradient; static PyObject *__pyx_n_s__guess; static PyObject *__pyx_n_s__hamming; static PyObject *__pyx_n_s__hanning; static PyObject *__pyx_n_s__histogram; static PyObject *__pyx_n_s__histogram2d; static PyObject *__pyx_n_s__histogramdd; static PyObject *__pyx_n_s__hsplit; static PyObject *__pyx_n_s__hstack; static PyObject *__pyx_n_s__i0; static PyObject *__pyx_n_s__imag; static PyObject *__pyx_n_s__import_modules; static PyObject *__pyx_n_s__in1d; static PyObject *__pyx_n_s__ind; static PyObject *__pyx_n_s__indices; static PyObject *__pyx_n_s__indices_or_sections; static PyObject *__pyx_n_s__info; static PyObject *__pyx_n_s__infstr; static PyObject *__pyx_n_s__inner; static PyObject *__pyx_n_s__insert; static PyObject *__pyx_n_s__int_asbuffer; static PyObject *__pyx_n_s__interp; static PyObject *__pyx_n_s__intersect1d; static PyObject *__pyx_n_s__invalid; static PyObject *__pyx_n_s__invalid_raise; static PyObject *__pyx_n_s__ipmt; static PyObject *__pyx_n_s__irr; static PyObject *__pyx_n_s__iscomplex; static PyObject *__pyx_n_s__iscomplexobj; static PyObject *__pyx_n_s__isfortran; static PyObject *__pyx_n_s__isneginf; static PyObject *__pyx_n_s__isposinf; static PyObject *__pyx_n_s__isreal; static PyObject *__pyx_n_s__isrealobj; static PyObject *__pyx_n_s__isscalar; static PyObject *__pyx_n_s__issctype; static PyObject *__pyx_n_s__issubclass_; static PyObject *__pyx_n_s__issubdtype; static PyObject *__pyx_n_s__issubsctype; static PyObject *__pyx_n_s__iterable; static PyObject *__pyx_n_s__ix_; static PyObject *__pyx_n_s__k; static PyObject *__pyx_n_s__kaiser; static PyObject *__pyx_n_s__keys; static PyObject *__pyx_n_s__kind; static PyObject *__pyx_n_s__kron; static PyObject *__pyx_n_s__ldict; static PyObject *__pyx_n_s__left; static PyObject *__pyx_n_s__lexsort; static PyObject *__pyx_n_s__linefeed; static PyObject *__pyx_n_s__linewidth; static PyObject *__pyx_n_s__load; static PyObject *__pyx_n_s__loads; static PyObject *__pyx_n_s__loadtxt; static PyObject *__pyx_n_s__lookfor; static PyObject *__pyx_n_s__loose; static PyObject *__pyx_n_s__m; static PyObject *__pyx_n_s__mafromtxt; static PyObject *__pyx_n_s__mask; static PyObject *__pyx_n_s__mask_func; static PyObject *__pyx_n_s__mask_indices; static PyObject *__pyx_n_s__mat; static PyObject *__pyx_n_s__max; static PyObject *__pyx_n_s__max_line_width; static PyObject *__pyx_n_s__maximum_sctype; static PyObject *__pyx_n_s__maxiter; static PyObject *__pyx_n_s__maxwidth; static PyObject *__pyx_n_s__may_share_memory; static PyObject *__pyx_n_s__mean; static PyObject *__pyx_n_s__median; static PyObject *__pyx_n_s__mesg; static PyObject *__pyx_n_s__meshgrid; static PyObject *__pyx_n_s__min; static PyObject *__pyx_n_s__min_scalar_type; static PyObject *__pyx_n_s__minlength; static PyObject *__pyx_n_s__mintypecode; static PyObject *__pyx_n_s__mirr; static PyObject *__pyx_n_s__missing; static PyObject *__pyx_n_s__missing_values; static PyObject *__pyx_n_s__mmap_mode; static PyObject *__pyx_n_s__mode; static PyObject *__pyx_n_s__module; static PyObject *__pyx_n_s__msg; static PyObject *__pyx_n_s__msort; static PyObject *__pyx_n_s__multi_index; static PyObject *__pyx_n_s__myarray; static PyObject *__pyx_n_s__n; static PyObject *__pyx_n_s__names; static PyObject *__pyx_n_s__nan_to_num; static PyObject *__pyx_n_s__nanargmax; static PyObject *__pyx_n_s__nanargmin; static PyObject *__pyx_n_s__nanmax; static PyObject *__pyx_n_s__nanmin; static PyObject *__pyx_n_s__nanstr; static PyObject *__pyx_n_s__nansum; static PyObject *__pyx_n_s__ndfromtxt; static PyObject *__pyx_n_s__ndim; static PyObject *__pyx_n_s__ndmin; static PyObject *__pyx_n_s__nested_iters; static PyObject *__pyx_n_s__new_shape; static PyObject *__pyx_n_s__newbuffer; static PyObject *__pyx_n_s__newline; static PyObject *__pyx_n_s__newshape; static PyObject *__pyx_n_s__nin; static PyObject *__pyx_n_s__nonzero; static PyObject *__pyx_n_s__normed; static PyObject *__pyx_n_s__nout; static PyObject *__pyx_n_s__np; static PyObject *__pyx_n_s__nper; static PyObject *__pyx_n_s__npv; static PyObject *__pyx_n_s__num; static PyObject *__pyx_n_s__number; static PyObject *__pyx_n_s__numpy; static PyObject *__pyx_n_s__obj; static PyObject *__pyx_n_s__obj2sctype; static PyObject *__pyx_n_s__object; static PyObject *__pyx_n_s__offset; static PyObject *__pyx_n_s__old_behavior; static PyObject *__pyx_n_s__order; static PyObject *__pyx_n_s__out; static PyObject *__pyx_n_s__outer; static PyObject *__pyx_n_s__output; static PyObject *__pyx_n_s__over; static PyObject *__pyx_n_s__overwrite_input; static PyObject *__pyx_n_s__p; static PyObject *__pyx_n_s__packbits; static PyObject *__pyx_n_s__padding; static PyObject *__pyx_n_s__per; static PyObject *__pyx_n_s__percentile; static PyObject *__pyx_n_s__piecewise; static PyObject *__pyx_n_s__pkgload; static PyObject *__pyx_n_s__place; static PyObject *__pyx_n_s__pmt; static PyObject *__pyx_n_s__poly; static PyObject *__pyx_n_s__polyadd; static PyObject *__pyx_n_s__polyder; static PyObject *__pyx_n_s__polydiv; static PyObject *__pyx_n_s__polyfit; static PyObject *__pyx_n_s__polyint; static PyObject *__pyx_n_s__polymul; static PyObject *__pyx_n_s__polysub; static PyObject *__pyx_n_s__polyval; static PyObject *__pyx_n_s__ppmt; static PyObject *__pyx_n_s__precision; static PyObject *__pyx_n_s__prefix; static PyObject *__pyx_n_s__prod; static PyObject *__pyx_n_s__product; static PyObject *__pyx_n_s__promote_types; static PyObject *__pyx_n_s__ptp; static PyObject *__pyx_n_s__put; static PyObject *__pyx_n_s__putmask; static PyObject *__pyx_n_s__pv; static PyObject *__pyx_n_s__q; static PyObject *__pyx_n_s__quicksort; static PyObject *__pyx_n_s__raise; static PyObject *__pyx_n_s__range; static PyObject *__pyx_n_s__rank; static PyObject *__pyx_n_s__rate; static PyObject *__pyx_n_s__ravel; static PyObject *__pyx_n_s__ravel_multi_index; static PyObject *__pyx_n_s__rcond; static PyObject *__pyx_n_s__real; static PyObject *__pyx_n_s__real_if_close; static PyObject *__pyx_n_s__recfromcsv; static PyObject *__pyx_n_s__recfromtxt; static PyObject *__pyx_n_s__regenerate; static PyObject *__pyx_n_s__regexp; static PyObject *__pyx_n_s__reinvest_rate; static PyObject *__pyx_n_s__rep; static PyObject *__pyx_n_s__repeat; static PyObject *__pyx_n_s__repeats; static PyObject *__pyx_n_s__replace_space; static PyObject *__pyx_n_s__repr; static PyObject *__pyx_n_s__reps; static PyObject *__pyx_n_s__require; static PyObject *__pyx_n_s__requirements; static PyObject *__pyx_n_s__reshape; static PyObject *__pyx_n_s__resize; static PyObject *__pyx_n_s__restoredot; static PyObject *__pyx_n_s__result_type; static PyObject *__pyx_n_s__return_index; static PyObject *__pyx_n_s__return_inverse; static PyObject *__pyx_n_s__returned; static PyObject *__pyx_n_s__right; static PyObject *__pyx_n_s__roll; static PyObject *__pyx_n_s__rollaxis; static PyObject *__pyx_n_s__roots; static PyObject *__pyx_n_s__rot90; static PyObject *__pyx_n_s__round; static PyObject *__pyx_n_s__round_; static PyObject *__pyx_n_s__row_stack; static PyObject *__pyx_n_s__rowvar; static PyObject *__pyx_n_s__rtol; static PyObject *__pyx_n_s__safe_eval; static PyObject *__pyx_n_s__sample; static PyObject *__pyx_n_s__save; static PyObject *__pyx_n_s__savetxt; static PyObject *__pyx_n_s__savez; static PyObject *__pyx_n_s__savez_compressed; static PyObject *__pyx_n_s__scalar_types; static PyObject *__pyx_n_s__sctype; static PyObject *__pyx_n_s__sctype2char; static PyObject *__pyx_n_s__searchsorted; static PyObject *__pyx_n_s__select; static PyObject *__pyx_n_s__sep; static PyObject *__pyx_n_s__separator; static PyObject *__pyx_n_s__seq_of_zeros; static PyObject *__pyx_n_s__set_numeric_ops; static PyObject *__pyx_n_s__set_printoptions; static PyObject *__pyx_n_s__set_string_function; static PyObject *__pyx_n_s__setbufsize; static PyObject *__pyx_n_s__setdiff1d; static PyObject *__pyx_n_s__seterr; static PyObject *__pyx_n_s__seterrcall; static PyObject *__pyx_n_s__seterrobj; static PyObject *__pyx_n_s__setxor1d; static PyObject *__pyx_n_s__shift; static PyObject *__pyx_n_s__show_config; static PyObject *__pyx_n_s__side; static PyObject *__pyx_n_s__sinc; static PyObject *__pyx_n_s__size; static PyObject *__pyx_n_s__skip_footer; static PyObject *__pyx_n_s__skip_header; static PyObject *__pyx_n_s__skiprows; static PyObject *__pyx_n_s__sometrue; static PyObject *__pyx_n_s__sort; static PyObject *__pyx_n_s__sort_complex; static PyObject *__pyx_n_s__source; static PyObject *__pyx_n_s__split; static PyObject *__pyx_n_s__squeeze; static PyObject *__pyx_n_s__start; static PyObject *__pyx_n_s__std; static PyObject *__pyx_n_s__stdout; static PyObject *__pyx_n_s__string; static PyObject *__pyx_n_s__style; static PyObject *__pyx_n_s__subok; static PyObject *__pyx_n_s__sum; static PyObject *__pyx_n_s__suppress; static PyObject *__pyx_n_s__suppress_small; static PyObject *__pyx_n_s__swapaxes; static PyObject *__pyx_n_s__sys; static PyObject *__pyx_n_s__t; static PyObject *__pyx_n_s__take; static PyObject *__pyx_n_s__tensordot; static PyObject *__pyx_n_s__threshold; static PyObject *__pyx_n_s__tile; static PyObject *__pyx_n_s__to_begin; static PyObject *__pyx_n_s__to_end; static PyObject *__pyx_n_s__tol; static PyObject *__pyx_n_s__toplevel; static PyObject *__pyx_n_s__trace; static PyObject *__pyx_n_s__transpose; static PyObject *__pyx_n_s__trapz; static PyObject *__pyx_n_s__tri; static PyObject *__pyx_n_s__tril; static PyObject *__pyx_n_s__tril_indices; static PyObject *__pyx_n_s__tril_indices_from; static PyObject *__pyx_n_s__trim; static PyObject *__pyx_n_s__trim_zeros; static PyObject *__pyx_n_s__triu; static PyObject *__pyx_n_s__triu_indices; static PyObject *__pyx_n_s__triu_indices_from; static PyObject *__pyx_n_s__tup; static PyObject *__pyx_n_s__type; static PyObject *__pyx_n_s__type1; static PyObject *__pyx_n_s__type2; static PyObject *__pyx_n_s__typechars; static PyObject *__pyx_n_s__typename; static PyObject *__pyx_n_s__typeset; static PyObject *__pyx_n_s__u; static PyObject *__pyx_n_s__under; static PyObject *__pyx_n_s__union1d; static PyObject *__pyx_n_s__unique; static PyObject *__pyx_n_s__unpack; static PyObject *__pyx_n_s__unpackbits; static PyObject *__pyx_n_s__unravel_index; static PyObject *__pyx_n_s__unwrap; static PyObject *__pyx_n_s__usecols; static PyObject *__pyx_n_s__usemask; static PyObject *__pyx_n_s__v; static PyObject *__pyx_n_s__val; static PyObject *__pyx_n_s__valid; static PyObject *__pyx_n_s__vals; static PyObject *__pyx_n_s__values; static PyObject *__pyx_n_s__vander; static PyObject *__pyx_n_s__var; static PyObject *__pyx_n_s__vardict; static PyObject *__pyx_n_s__vdot; static PyObject *__pyx_n_s__vsplit; static PyObject *__pyx_n_s__vstack; static PyObject *__pyx_n_s__weights; static PyObject *__pyx_n_s__what; static PyObject *__pyx_n_s__when; static PyObject *__pyx_n_s__where; static PyObject *__pyx_n_s__who; static PyObject *__pyx_n_s__width; static PyObject *__pyx_n_s__x; static PyObject *__pyx_n_s__xp; static PyObject *__pyx_n_s__y; static PyObject *__pyx_n_s__z; static PyObject *__pyx_int_0; static PyObject *__pyx_int_1; static PyObject *__pyx_int_2; static PyObject *__pyx_int_neg_1; static PyObject *__pyx_int_10; static PyObject *__pyx_int_15; static PyObject *__pyx_int_76; static PyObject *__pyx_int_100; static PyObject *__pyx_k_1; static PyObject *__pyx_k_2; static PyObject *__pyx_k_3; static PyObject *__pyx_k_4; static PyObject *__pyx_k_7; static PyObject *__pyx_k_8; static PyObject *__pyx_k_9; static PyObject *__pyx_k_10; static PyObject *__pyx_k_11; static PyObject *__pyx_k_12; static PyObject *__pyx_k_13; static PyObject *__pyx_k_14; static PyObject *__pyx_k_15; static PyObject *__pyx_k_17; static PyObject *__pyx_k_18; static PyObject *__pyx_k_20; static PyObject *__pyx_k_21; static PyObject *__pyx_k_22; static PyObject *__pyx_k_23; static PyObject *__pyx_k_24; static PyObject *__pyx_k_25; static PyObject *__pyx_k_26; static PyObject *__pyx_k_27; static PyObject *__pyx_k_28; static PyObject *__pyx_k_29; static PyObject *__pyx_k_30; static PyObject *__pyx_k_31; static PyObject *__pyx_k_32; static PyObject *__pyx_k_33; static PyObject *__pyx_k_34; static PyObject *__pyx_k_35; static PyObject *__pyx_k_36; static PyObject *__pyx_k_37; static PyObject *__pyx_k_38; static PyObject *__pyx_k_39; static PyObject *__pyx_k_40; static PyObject *__pyx_k_41; static PyObject *__pyx_k_44; static PyObject *__pyx_k_45; static PyObject *__pyx_k_46; static PyObject *__pyx_k_47; static PyObject *__pyx_k_48; static PyObject *__pyx_k_49; static PyObject *__pyx_k_50; static PyObject *__pyx_k_51; static PyObject *__pyx_k_52; static PyObject *__pyx_k_tuple_54; static PyObject *__pyx_k_tuple_56; static PyObject *__pyx_k_tuple_58; static PyObject *__pyx_k_tuple_61; static PyObject *__pyx_k_tuple_62; static PyObject *__pyx_k_tuple_64; static PyObject *__pyx_k_tuple_65; static PyObject *__pyx_k_tuple_69; static PyObject *__pyx_k_tuple_71; static PyObject *__pyx_k_tuple_73; static PyObject *__pyx_k_tuple_75; static PyObject *__pyx_k_tuple_78; static PyObject *__pyx_k_tuple_80; static PyObject *__pyx_k_tuple_82; static PyObject *__pyx_k_tuple_84; static PyObject *__pyx_k_tuple_86; static PyObject *__pyx_k_tuple_88; static PyObject *__pyx_k_tuple_90; static PyObject *__pyx_k_tuple_92; static PyObject *__pyx_k_tuple_94; static PyObject *__pyx_k_tuple_96; static PyObject *__pyx_k_tuple_98; static PyObject *__pyx_k_tuple_100; static PyObject *__pyx_k_tuple_102; static PyObject *__pyx_k_tuple_104; static PyObject *__pyx_k_tuple_106; static PyObject *__pyx_k_tuple_108; static PyObject *__pyx_k_tuple_110; static PyObject *__pyx_k_tuple_112; static PyObject *__pyx_k_tuple_114; static PyObject *__pyx_k_tuple_116; static PyObject *__pyx_k_tuple_118; static PyObject *__pyx_k_tuple_120; static PyObject *__pyx_k_tuple_122; static PyObject *__pyx_k_tuple_124; static PyObject *__pyx_k_tuple_126; static PyObject *__pyx_k_tuple_128; static PyObject *__pyx_k_tuple_133; static PyObject *__pyx_k_tuple_135; static PyObject *__pyx_k_tuple_137; static PyObject *__pyx_k_tuple_139; static PyObject *__pyx_k_tuple_141; static PyObject *__pyx_k_tuple_143; static PyObject *__pyx_k_tuple_145; static PyObject *__pyx_k_tuple_148; static PyObject *__pyx_k_tuple_151; static PyObject *__pyx_k_tuple_153; static PyObject *__pyx_k_tuple_157; static PyObject *__pyx_k_tuple_160; static PyObject *__pyx_k_tuple_162; static PyObject *__pyx_k_tuple_164; static PyObject *__pyx_k_tuple_166; static PyObject *__pyx_k_tuple_168; static PyObject *__pyx_k_tuple_170; static PyObject *__pyx_k_tuple_172; static PyObject *__pyx_k_tuple_174; static PyObject *__pyx_k_tuple_176; static PyObject *__pyx_k_tuple_178; static PyObject *__pyx_k_tuple_180; static PyObject *__pyx_k_tuple_182; static PyObject *__pyx_k_tuple_185; static PyObject *__pyx_k_tuple_187; static PyObject *__pyx_k_tuple_189; static PyObject *__pyx_k_tuple_191; static PyObject *__pyx_k_tuple_193; static PyObject *__pyx_k_tuple_195; static PyObject *__pyx_k_tuple_197; static PyObject *__pyx_k_tuple_199; static PyObject *__pyx_k_tuple_201; static PyObject *__pyx_k_tuple_203; static PyObject *__pyx_k_tuple_206; static PyObject *__pyx_k_tuple_208; static PyObject *__pyx_k_tuple_210; static PyObject *__pyx_k_tuple_213; static PyObject *__pyx_k_tuple_215; static PyObject *__pyx_k_tuple_217; static PyObject *__pyx_k_tuple_219; static PyObject *__pyx_k_tuple_221; static PyObject *__pyx_k_tuple_223; static PyObject *__pyx_k_tuple_225; static PyObject *__pyx_k_tuple_227; static PyObject *__pyx_k_tuple_229; static PyObject *__pyx_k_tuple_231; static PyObject *__pyx_k_tuple_233; static PyObject *__pyx_k_tuple_235; static PyObject *__pyx_k_tuple_237; static PyObject *__pyx_k_tuple_239; static PyObject *__pyx_k_tuple_243; static PyObject *__pyx_k_tuple_252; static PyObject *__pyx_k_tuple_254; static PyObject *__pyx_k_tuple_256; static PyObject *__pyx_k_tuple_258; static PyObject *__pyx_k_tuple_260; static PyObject *__pyx_k_tuple_262; static PyObject *__pyx_k_tuple_264; static PyObject *__pyx_k_tuple_266; static PyObject *__pyx_k_tuple_268; static PyObject *__pyx_k_tuple_270; static PyObject *__pyx_k_tuple_272; static PyObject *__pyx_k_tuple_274; static PyObject *__pyx_k_tuple_276; static PyObject *__pyx_k_tuple_278; static PyObject *__pyx_k_tuple_280; static PyObject *__pyx_k_tuple_283; static PyObject *__pyx_k_tuple_285; static PyObject *__pyx_k_tuple_287; static PyObject *__pyx_k_tuple_289; static PyObject *__pyx_k_tuple_291; static PyObject *__pyx_k_tuple_293; static PyObject *__pyx_k_tuple_295; static PyObject *__pyx_k_tuple_297; static PyObject *__pyx_k_tuple_299; static PyObject *__pyx_k_tuple_301; static PyObject *__pyx_k_tuple_303; static PyObject *__pyx_k_tuple_305; static PyObject *__pyx_k_tuple_307; static PyObject *__pyx_k_tuple_309; static PyObject *__pyx_k_tuple_311; static PyObject *__pyx_k_tuple_313; static PyObject *__pyx_k_tuple_315; static PyObject *__pyx_k_tuple_318; static PyObject *__pyx_k_tuple_320; static PyObject *__pyx_k_tuple_322; static PyObject *__pyx_k_tuple_324; static PyObject *__pyx_k_tuple_327; static PyObject *__pyx_k_tuple_329; static PyObject *__pyx_k_tuple_331; static PyObject *__pyx_k_tuple_333; static PyObject *__pyx_k_tuple_335; static PyObject *__pyx_k_tuple_337; static PyObject *__pyx_k_tuple_339; static PyObject *__pyx_k_tuple_341; static PyObject *__pyx_k_tuple_343; static PyObject *__pyx_k_tuple_345; static PyObject *__pyx_k_tuple_347; static PyObject *__pyx_k_tuple_349; static PyObject *__pyx_k_tuple_351; static PyObject *__pyx_k_tuple_353; static PyObject *__pyx_k_tuple_355; static PyObject *__pyx_k_tuple_357; static PyObject *__pyx_k_tuple_359; static PyObject *__pyx_k_tuple_361; static PyObject *__pyx_k_tuple_363; static PyObject *__pyx_k_tuple_365; static PyObject *__pyx_k_tuple_367; static PyObject *__pyx_k_tuple_369; static PyObject *__pyx_k_tuple_371; static PyObject *__pyx_k_tuple_373; static PyObject *__pyx_k_tuple_376; static PyObject *__pyx_k_tuple_378; static PyObject *__pyx_k_tuple_380; static PyObject *__pyx_k_tuple_382; static PyObject *__pyx_k_tuple_384; static PyObject *__pyx_k_tuple_386; static PyObject *__pyx_k_tuple_388; static PyObject *__pyx_k_tuple_390; static PyObject *__pyx_k_tuple_392; static PyObject *__pyx_k_tuple_395; static PyObject *__pyx_k_tuple_397; static PyObject *__pyx_k_tuple_399; static PyObject *__pyx_k_tuple_401; static PyObject *__pyx_k_tuple_403; static PyObject *__pyx_k_tuple_405; static PyObject *__pyx_k_tuple_407; static PyObject *__pyx_k_tuple_409; static PyObject *__pyx_k_tuple_411; static PyObject *__pyx_k_tuple_413; static PyObject *__pyx_k_tuple_415; static PyObject *__pyx_k_tuple_417; static PyObject *__pyx_k_tuple_419; static PyObject *__pyx_k_tuple_421; static PyObject *__pyx_k_tuple_423; static PyObject *__pyx_k_tuple_425; static PyObject *__pyx_k_tuple_427; static PyObject *__pyx_k_tuple_429; static PyObject *__pyx_k_tuple_431; static PyObject *__pyx_k_tuple_433; static PyObject *__pyx_k_tuple_435; static PyObject *__pyx_k_tuple_437; static PyObject *__pyx_k_tuple_439; static PyObject *__pyx_k_tuple_441; static PyObject *__pyx_k_tuple_443; static PyObject *__pyx_k_tuple_445; static PyObject *__pyx_k_tuple_447; static PyObject *__pyx_k_tuple_449; static PyObject *__pyx_k_tuple_451; static PyObject *__pyx_k_tuple_453; static PyObject *__pyx_k_tuple_455; static PyObject *__pyx_k_tuple_458; static PyObject *__pyx_k_tuple_460; static PyObject *__pyx_k_tuple_462; static PyObject *__pyx_k_tuple_464; static PyObject *__pyx_k_tuple_466; static PyObject *__pyx_k_tuple_468; static PyObject *__pyx_k_tuple_470; static PyObject *__pyx_k_tuple_472; static PyObject *__pyx_k_tuple_474; static PyObject *__pyx_k_tuple_476; static PyObject *__pyx_k_tuple_478; static PyObject *__pyx_k_tuple_480; static PyObject *__pyx_k_tuple_482; static PyObject *__pyx_k_tuple_484; static PyObject *__pyx_k_tuple_486; static PyObject *__pyx_k_tuple_488; static PyObject *__pyx_k_tuple_491; static PyObject *__pyx_k_tuple_493; static PyObject *__pyx_k_tuple_495; static PyObject *__pyx_k_tuple_497; static PyObject *__pyx_k_tuple_499; static PyObject *__pyx_k_tuple_501; static PyObject *__pyx_k_tuple_503; static PyObject *__pyx_k_tuple_505; static PyObject *__pyx_k_tuple_508; static PyObject *__pyx_k_tuple_510; static PyObject *__pyx_k_tuple_512; static PyObject *__pyx_k_tuple_514; static PyObject *__pyx_k_tuple_516; static PyObject *__pyx_k_tuple_518; static PyObject *__pyx_k_tuple_520; static PyObject *__pyx_k_tuple_522; static PyObject *__pyx_k_tuple_524; static PyObject *__pyx_k_tuple_526; static PyObject *__pyx_k_tuple_528; static PyObject *__pyx_k_tuple_530; static PyObject *__pyx_k_tuple_532; static PyObject *__pyx_k_tuple_534; static PyObject *__pyx_k_tuple_536; static PyObject *__pyx_k_tuple_538; static PyObject *__pyx_k_tuple_540; static PyObject *__pyx_k_tuple_542; static PyObject *__pyx_k_tuple_544; static PyObject *__pyx_k_tuple_546; static PyObject *__pyx_k_tuple_548; static PyObject *__pyx_k_tuple_550; static PyObject *__pyx_k_tuple_552; static PyObject *__pyx_k_tuple_554; static PyObject *__pyx_k_tuple_556; static PyObject *__pyx_k_tuple_558; static PyObject *__pyx_k_tuple_560; static PyObject *__pyx_k_tuple_562; static PyObject *__pyx_k_tuple_564; static PyObject *__pyx_k_tuple_566; static PyObject *__pyx_k_tuple_568; static PyObject *__pyx_k_tuple_570; static PyObject *__pyx_k_tuple_572; static PyObject *__pyx_k_tuple_575; static PyObject *__pyx_k_tuple_577; static PyObject *__pyx_k_tuple_580; static PyObject *__pyx_k_codeobj_66; static PyObject *__pyx_k_codeobj_70; static PyObject *__pyx_k_codeobj_72; static PyObject *__pyx_k_codeobj_74; static PyObject *__pyx_k_codeobj_76; static PyObject *__pyx_k_codeobj_77; static PyObject *__pyx_k_codeobj_79; static PyObject *__pyx_k_codeobj_81; static PyObject *__pyx_k_codeobj_83; static PyObject *__pyx_k_codeobj_85; static PyObject *__pyx_k_codeobj_87; static PyObject *__pyx_k_codeobj_89; static PyObject *__pyx_k_codeobj_91; static PyObject *__pyx_k_codeobj_93; static PyObject *__pyx_k_codeobj_95; static PyObject *__pyx_k_codeobj_97; static PyObject *__pyx_k_codeobj_99; static PyObject *__pyx_k_codeobj_101; static PyObject *__pyx_k_codeobj_103; static PyObject *__pyx_k_codeobj_105; static PyObject *__pyx_k_codeobj_107; static PyObject *__pyx_k_codeobj_109; static PyObject *__pyx_k_codeobj_111; static PyObject *__pyx_k_codeobj_113; static PyObject *__pyx_k_codeobj_115; static PyObject *__pyx_k_codeobj_117; static PyObject *__pyx_k_codeobj_119; static PyObject *__pyx_k_codeobj_121; static PyObject *__pyx_k_codeobj_123; static PyObject *__pyx_k_codeobj_125; static PyObject *__pyx_k_codeobj_127; static PyObject *__pyx_k_codeobj_129; static PyObject *__pyx_k_codeobj_130; static PyObject *__pyx_k_codeobj_131; static PyObject *__pyx_k_codeobj_132; static PyObject *__pyx_k_codeobj_134; static PyObject *__pyx_k_codeobj_136; static PyObject *__pyx_k_codeobj_138; static PyObject *__pyx_k_codeobj_140; static PyObject *__pyx_k_codeobj_142; static PyObject *__pyx_k_codeobj_144; static PyObject *__pyx_k_codeobj_146; static PyObject *__pyx_k_codeobj_147; static PyObject *__pyx_k_codeobj_149; static PyObject *__pyx_k_codeobj_150; static PyObject *__pyx_k_codeobj_152; static PyObject *__pyx_k_codeobj_154; static PyObject *__pyx_k_codeobj_155; static PyObject *__pyx_k_codeobj_156; static PyObject *__pyx_k_codeobj_158; static PyObject *__pyx_k_codeobj_159; static PyObject *__pyx_k_codeobj_161; static PyObject *__pyx_k_codeobj_163; static PyObject *__pyx_k_codeobj_165; static PyObject *__pyx_k_codeobj_167; static PyObject *__pyx_k_codeobj_169; static PyObject *__pyx_k_codeobj_171; static PyObject *__pyx_k_codeobj_173; static PyObject *__pyx_k_codeobj_175; static PyObject *__pyx_k_codeobj_177; static PyObject *__pyx_k_codeobj_179; static PyObject *__pyx_k_codeobj_181; static PyObject *__pyx_k_codeobj_183; static PyObject *__pyx_k_codeobj_184; static PyObject *__pyx_k_codeobj_186; static PyObject *__pyx_k_codeobj_188; static PyObject *__pyx_k_codeobj_190; static PyObject *__pyx_k_codeobj_192; static PyObject *__pyx_k_codeobj_194; static PyObject *__pyx_k_codeobj_196; static PyObject *__pyx_k_codeobj_198; static PyObject *__pyx_k_codeobj_200; static PyObject *__pyx_k_codeobj_202; static PyObject *__pyx_k_codeobj_204; static PyObject *__pyx_k_codeobj_205; static PyObject *__pyx_k_codeobj_207; static PyObject *__pyx_k_codeobj_209; static PyObject *__pyx_k_codeobj_211; static PyObject *__pyx_k_codeobj_214; static PyObject *__pyx_k_codeobj_216; static PyObject *__pyx_k_codeobj_218; static PyObject *__pyx_k_codeobj_220; static PyObject *__pyx_k_codeobj_222; static PyObject *__pyx_k_codeobj_224; static PyObject *__pyx_k_codeobj_226; static PyObject *__pyx_k_codeobj_228; static PyObject *__pyx_k_codeobj_230; static PyObject *__pyx_k_codeobj_232; static PyObject *__pyx_k_codeobj_234; static PyObject *__pyx_k_codeobj_236; static PyObject *__pyx_k_codeobj_238; static PyObject *__pyx_k_codeobj_240; static PyObject *__pyx_k_codeobj_241; static PyObject *__pyx_k_codeobj_242; static PyObject *__pyx_k_codeobj_244; static PyObject *__pyx_k_codeobj_246; static PyObject *__pyx_k_codeobj_247; static PyObject *__pyx_k_codeobj_248; static PyObject *__pyx_k_codeobj_249; static PyObject *__pyx_k_codeobj_250; static PyObject *__pyx_k_codeobj_251; static PyObject *__pyx_k_codeobj_253; static PyObject *__pyx_k_codeobj_255; static PyObject *__pyx_k_codeobj_257; static PyObject *__pyx_k_codeobj_259; static PyObject *__pyx_k_codeobj_261; static PyObject *__pyx_k_codeobj_263; static PyObject *__pyx_k_codeobj_265; static PyObject *__pyx_k_codeobj_267; static PyObject *__pyx_k_codeobj_269; static PyObject *__pyx_k_codeobj_271; static PyObject *__pyx_k_codeobj_273; static PyObject *__pyx_k_codeobj_275; static PyObject *__pyx_k_codeobj_277; static PyObject *__pyx_k_codeobj_279; static PyObject *__pyx_k_codeobj_281; static PyObject *__pyx_k_codeobj_282; static PyObject *__pyx_k_codeobj_284; static PyObject *__pyx_k_codeobj_286; static PyObject *__pyx_k_codeobj_288; static PyObject *__pyx_k_codeobj_290; static PyObject *__pyx_k_codeobj_292; static PyObject *__pyx_k_codeobj_294; static PyObject *__pyx_k_codeobj_296; static PyObject *__pyx_k_codeobj_298; static PyObject *__pyx_k_codeobj_300; static PyObject *__pyx_k_codeobj_302; static PyObject *__pyx_k_codeobj_304; static PyObject *__pyx_k_codeobj_306; static PyObject *__pyx_k_codeobj_308; static PyObject *__pyx_k_codeobj_310; static PyObject *__pyx_k_codeobj_312; static PyObject *__pyx_k_codeobj_314; static PyObject *__pyx_k_codeobj_316; static PyObject *__pyx_k_codeobj_317; static PyObject *__pyx_k_codeobj_319; static PyObject *__pyx_k_codeobj_321; static PyObject *__pyx_k_codeobj_323; static PyObject *__pyx_k_codeobj_325; static PyObject *__pyx_k_codeobj_326; static PyObject *__pyx_k_codeobj_328; static PyObject *__pyx_k_codeobj_330; static PyObject *__pyx_k_codeobj_332; static PyObject *__pyx_k_codeobj_334; static PyObject *__pyx_k_codeobj_336; static PyObject *__pyx_k_codeobj_338; static PyObject *__pyx_k_codeobj_340; static PyObject *__pyx_k_codeobj_342; static PyObject *__pyx_k_codeobj_344; static PyObject *__pyx_k_codeobj_346; static PyObject *__pyx_k_codeobj_348; static PyObject *__pyx_k_codeobj_350; static PyObject *__pyx_k_codeobj_352; static PyObject *__pyx_k_codeobj_354; static PyObject *__pyx_k_codeobj_356; static PyObject *__pyx_k_codeobj_358; static PyObject *__pyx_k_codeobj_360; static PyObject *__pyx_k_codeobj_362; static PyObject *__pyx_k_codeobj_364; static PyObject *__pyx_k_codeobj_366; static PyObject *__pyx_k_codeobj_368; static PyObject *__pyx_k_codeobj_370; static PyObject *__pyx_k_codeobj_372; static PyObject *__pyx_k_codeobj_374; static PyObject *__pyx_k_codeobj_375; static PyObject *__pyx_k_codeobj_377; static PyObject *__pyx_k_codeobj_379; static PyObject *__pyx_k_codeobj_381; static PyObject *__pyx_k_codeobj_383; static PyObject *__pyx_k_codeobj_385; static PyObject *__pyx_k_codeobj_387; static PyObject *__pyx_k_codeobj_389; static PyObject *__pyx_k_codeobj_391; static PyObject *__pyx_k_codeobj_393; static PyObject *__pyx_k_codeobj_394; static PyObject *__pyx_k_codeobj_396; static PyObject *__pyx_k_codeobj_398; static PyObject *__pyx_k_codeobj_400; static PyObject *__pyx_k_codeobj_402; static PyObject *__pyx_k_codeobj_404; static PyObject *__pyx_k_codeobj_406; static PyObject *__pyx_k_codeobj_408; static PyObject *__pyx_k_codeobj_410; static PyObject *__pyx_k_codeobj_412; static PyObject *__pyx_k_codeobj_414; static PyObject *__pyx_k_codeobj_416; static PyObject *__pyx_k_codeobj_418; static PyObject *__pyx_k_codeobj_420; static PyObject *__pyx_k_codeobj_422; static PyObject *__pyx_k_codeobj_424; static PyObject *__pyx_k_codeobj_426; static PyObject *__pyx_k_codeobj_428; static PyObject *__pyx_k_codeobj_430; static PyObject *__pyx_k_codeobj_432; static PyObject *__pyx_k_codeobj_434; static PyObject *__pyx_k_codeobj_436; static PyObject *__pyx_k_codeobj_438; static PyObject *__pyx_k_codeobj_440; static PyObject *__pyx_k_codeobj_442; static PyObject *__pyx_k_codeobj_444; static PyObject *__pyx_k_codeobj_446; static PyObject *__pyx_k_codeobj_448; static PyObject *__pyx_k_codeobj_450; static PyObject *__pyx_k_codeobj_452; static PyObject *__pyx_k_codeobj_454; static PyObject *__pyx_k_codeobj_456; static PyObject *__pyx_k_codeobj_457; static PyObject *__pyx_k_codeobj_459; static PyObject *__pyx_k_codeobj_461; static PyObject *__pyx_k_codeobj_463; static PyObject *__pyx_k_codeobj_465; static PyObject *__pyx_k_codeobj_467; static PyObject *__pyx_k_codeobj_469; static PyObject *__pyx_k_codeobj_471; static PyObject *__pyx_k_codeobj_473; static PyObject *__pyx_k_codeobj_475; static PyObject *__pyx_k_codeobj_477; static PyObject *__pyx_k_codeobj_479; static PyObject *__pyx_k_codeobj_481; static PyObject *__pyx_k_codeobj_483; static PyObject *__pyx_k_codeobj_485; static PyObject *__pyx_k_codeobj_487; static PyObject *__pyx_k_codeobj_489; static PyObject *__pyx_k_codeobj_490; static PyObject *__pyx_k_codeobj_492; static PyObject *__pyx_k_codeobj_494; static PyObject *__pyx_k_codeobj_496; static PyObject *__pyx_k_codeobj_498; static PyObject *__pyx_k_codeobj_500; static PyObject *__pyx_k_codeobj_502; static PyObject *__pyx_k_codeobj_504; static PyObject *__pyx_k_codeobj_506; static PyObject *__pyx_k_codeobj_507; static PyObject *__pyx_k_codeobj_509; static PyObject *__pyx_k_codeobj_511; static PyObject *__pyx_k_codeobj_513; static PyObject *__pyx_k_codeobj_515; static PyObject *__pyx_k_codeobj_517; static PyObject *__pyx_k_codeobj_519; static PyObject *__pyx_k_codeobj_521; static PyObject *__pyx_k_codeobj_523; static PyObject *__pyx_k_codeobj_525; static PyObject *__pyx_k_codeobj_527; static PyObject *__pyx_k_codeobj_529; static PyObject *__pyx_k_codeobj_531; static PyObject *__pyx_k_codeobj_533; static PyObject *__pyx_k_codeobj_535; static PyObject *__pyx_k_codeobj_537; static PyObject *__pyx_k_codeobj_539; static PyObject *__pyx_k_codeobj_541; static PyObject *__pyx_k_codeobj_543; static PyObject *__pyx_k_codeobj_545; static PyObject *__pyx_k_codeobj_547; static PyObject *__pyx_k_codeobj_549; static PyObject *__pyx_k_codeobj_551; static PyObject *__pyx_k_codeobj_553; static PyObject *__pyx_k_codeobj_555; static PyObject *__pyx_k_codeobj_557; static PyObject *__pyx_k_codeobj_559; static PyObject *__pyx_k_codeobj_561; static PyObject *__pyx_k_codeobj_563; static PyObject *__pyx_k_codeobj_565; static PyObject *__pyx_k_codeobj_567; static PyObject *__pyx_k_codeobj_569; static PyObject *__pyx_k_codeobj_571; static PyObject *__pyx_k_codeobj_573; static PyObject *__pyx_k_codeobj_574; static PyObject *__pyx_k_codeobj_576; static PyObject *__pyx_k_codeobj_578; static PyObject *__pyx_k_codeobj_579; static PyObject *__pyx_k_codeobj_581; /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_1docstring(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_docstring[] = "docstring(obj, docstring)\n\n Add a docstring to a built-in obj if possible.\n If the obj already has a docstring raise a RuntimeError\n If this routine does not know how to add a docstring to the object\n raise a TypeError\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_1docstring = {__Pyx_NAMESTR("docstring"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_1docstring, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_docstring)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_1docstring(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_obj = 0; CYTHON_UNUSED PyObject *__pyx_v_docstring = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("docstring (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__docstring,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__docstring)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("docstring", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "docstring") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_obj = values[0]; __pyx_v_docstring = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("docstring", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.docstring", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_docstring(__pyx_self, __pyx_v_obj, __pyx_v_docstring); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":8 * * * def docstring(obj, docstring): # <<<<<<<<<<<<<< * """docstring(obj, docstring) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_docstring(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_docstring) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("docstring", 0); /* "ga4py/gain/notimplemented.pyx":18 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.docstring", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_3add_newdoc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_2add_newdoc[] = "Adds documentation to obj which is in module place.\n\n If doc is a string add it to obj as a docstring\n\n If doc is a tuple, then the first element is interpreted as\n an attribute of obj and the second as the docstring\n (method, docstring)\n\n If doc is a list, then each element of the list should be a\n sequence of length two --> [(method1, docstring1),\n (method2, docstring2), ...]\n\n This routine never raises an error.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_3add_newdoc = {__Pyx_NAMESTR("add_newdoc"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_3add_newdoc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_2add_newdoc)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_3add_newdoc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_place = 0; CYTHON_UNUSED PyObject *__pyx_v_obj = 0; CYTHON_UNUSED PyObject *__pyx_v_doc = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("add_newdoc (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__place,&__pyx_n_s__obj,&__pyx_n_s__doc,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__place)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("add_newdoc", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__doc)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("add_newdoc", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "add_newdoc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_place = values[0]; __pyx_v_obj = values[1]; __pyx_v_doc = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("add_newdoc", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.add_newdoc", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_2add_newdoc(__pyx_self, __pyx_v_place, __pyx_v_obj, __pyx_v_doc); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":21 * * * def add_newdoc(place, obj, doc): # <<<<<<<<<<<<<< * """Adds documentation to obj which is in module place. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_2add_newdoc(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_place, CYTHON_UNUSED PyObject *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_doc) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("add_newdoc", 0); /* "ga4py/gain/notimplemented.pyx":37 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.add_newdoc", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_5all(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_4all[] = "Test whether all array elements along a given axis evaluate to True.\n\n Parameters\n ----------\n a : array_like\n Input array or object that can be converted to an array.\n axis : int, optional\n Axis along which a logical AND is performed.\n The default (`axis` = `None`) is to perform a logical AND\n over a flattened input array. `axis` may be negative, in which\n case it counts from the last to the first axis.\n out : ndarray, optional\n Alternate output array in which to place the result.\n It must have the same shape as the expected output and its\n type is preserved (e.g., if ``dtype(out)`` is float, the result\n will consist of 0.0's and 1.0's). See `doc.ufuncs` (Section\n \"Output arguments\") for more details.\n\n Returns\n -------\n all : ndarray, bool\n A new boolean or array is returned unless `out` is specified,\n in which case a reference to `out` is returned.\n\n See Also\n --------\n ndarray.all : equivalent method\n\n any : Test whether any element along a given axis evaluates to True.\n\n Notes\n -----\n Not a Number (NaN), positive infinity and negative infinity\n evaluate to `True` because these are not equal to zero.\n\n Examples\n --------\n >>> np.all([[True,False],[True,True]])\n False\n\n >>> np.all([[True,False],[True,True]], axis=0)\n array([ True, False], dtype=bool)\n\n >>> np.all([-1, 4, 5])\n True\n\n >>> np.all([1.0, np.nan])\n True\n\n >>> o=np.array([False])\n >>> z=np.all([-1, 4, 5], out=o)\n >>> id(z), id(o), z # doctest: +SKIP\n (28293632, 28293632, array([ True], dtype=bool))\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_5all = {__Pyx_NAMESTR("all"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_5all, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_4all)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_5all(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("all (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":40 * * * def all(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Test whether all array elements along a given axis evaluate to True. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "all") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("all", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.all", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_4all(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_4all(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("all", 0); /* "ga4py/gain/notimplemented.pyx":96 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.all", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_7allclose(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_6allclose[] = "Returns True if two arrays are element-wise equal within a tolerance.\n\n The tolerance values are positive, typically very small numbers. The\n relative difference (`rtol` * abs(`b`)) and the absolute difference\n `atol` are added together to compare against the absolute difference\n between `a` and `b`.\n\n Parameters\n ----------\n a, b : array_like\n Input arrays to compare.\n rtol : float\n The relative tolerance parameter (see Notes).\n atol : float\n The absolute tolerance parameter (see Notes).\n\n Returns\n -------\n y : bool\n Returns True if the two arrays are equal within the given\n tolerance; False otherwise. If either array contains NaN, then\n False is returned.\n\n See Also\n --------\n all, any, alltrue, sometrue\n\n Notes\n -----\n If the following equation is element-wise True, then allclose returns\n True.\n\n absolute(`a` - `b`) <= (`atol` + `rtol` * absolute(`b`))\n\n The above equation is not symmetric in `a` and `b`, so that\n `allclose(a, b)` might be different from `allclose(b, a)` in\n some rare cases.\n\n Examples\n --------\n >>> np.allclose([1e10,1e-7], [1.00001e10,1e-8])\n False\n >>> np.allclose([1e10,1e-8], [1.00001e10,1e-9])\n True\n >>> np.allclose([1e10,1e-8], [1.0001e10,1e-9])\n False\n >>> np.allclose([1.0, np.nan], [1.0, np.nan])\n False\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_7allclose = {__Pyx_NAMESTR("allclose"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_7allclose, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_6allclose)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_7allclose(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_b = 0; CYTHON_UNUSED PyObject *__pyx_v_rtol = 0; CYTHON_UNUSED PyObject *__pyx_v_atol = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("allclose (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__b,&__pyx_n_s__rtol,&__pyx_n_s__atol,0}; PyObject* values[4] = {0,0,0,0}; values[2] = __pyx_k_1; values[3] = __pyx_k_2; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("allclose", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__rtol); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__atol); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "allclose") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_b = values[1]; __pyx_v_rtol = values[2]; __pyx_v_atol = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("allclose", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.allclose", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_6allclose(__pyx_self, __pyx_v_a, __pyx_v_b, __pyx_v_rtol, __pyx_v_atol); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":99 * * * def allclose(a, b, rtol=1e-05, atol=1e-08): # <<<<<<<<<<<<<< * """Returns True if two arrays are element-wise equal within a tolerance. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_6allclose(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_b, CYTHON_UNUSED PyObject *__pyx_v_rtol, CYTHON_UNUSED PyObject *__pyx_v_atol) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("allclose", 0); /* "ga4py/gain/notimplemented.pyx":150 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.allclose", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_9alltrue(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_8alltrue[] = "Check if all elements of input array are true.\n\n See Also\n --------\n numpy.all : Equivalent function; see for details.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_9alltrue = {__Pyx_NAMESTR("alltrue"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_9alltrue, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_8alltrue)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_9alltrue(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("alltrue (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":153 * * * def alltrue(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Check if all elements of input array are true. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "alltrue") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("alltrue", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.alltrue", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_8alltrue(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_8alltrue(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("alltrue", 0); /* "ga4py/gain/notimplemented.pyx":161 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.alltrue", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_11alterdot(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_10alterdot[] = "Change `dot`, `vdot`, and `innerproduct` to use accelerated BLAS functions.\n\n Typically, as a user of Numpy, you do not explicitly call this function. If\n Numpy is built with an accelerated BLAS, this function is automatically\n called when Numpy is imported.\n\n When Numpy is built with an accelerated BLAS like ATLAS, these functions\n are replaced to make use of the faster implementations. The faster\n implementations only affect float32, float64, complex64, and complex128\n arrays. Furthermore, the BLAS API only includes matrix-matrix,\n matrix-vector, and vector-vector products. Products of arrays with larger\n dimensionalities use the built in functions and are not accelerated.\n\n See Also\n --------\n restoredot : `restoredot` undoes the effects of `alterdot`.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_11alterdot = {__Pyx_NAMESTR("alterdot"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_11alterdot, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_10alterdot)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_11alterdot(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("alterdot (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_10alterdot(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":164 * * * def alterdot(): # <<<<<<<<<<<<<< * """Change `dot`, `vdot`, and `innerproduct` to use accelerated BLAS functions. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_10alterdot(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("alterdot", 0); /* "ga4py/gain/notimplemented.pyx":184 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.alterdot", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_13amax(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_12amax[] = "Return the maximum of an array or maximum along an axis.\n\n Parameters\n ----------\n a : array_like\n Input data.\n axis : int, optional\n Axis along which to operate. By default flattened input is used.\n out : ndarray, optional\n Alternate output array in which to place the result. Must be of\n the same shape and buffer length as the expected output. See\n `doc.ufuncs` (Section \"Output arguments\") for more details.\n\n Returns\n -------\n amax : ndarray or scalar\n Maximum of `a`. If `axis` is None, the result is a scalar value.\n If `axis` is given, the result is an array of dimension\n ``a.ndim - 1``.\n\n See Also\n --------\n nanmax : NaN values are ignored instead of being propagated.\n fmax : same behavior as the C99 fmax function.\n argmax : indices of the maximum values.\n\n Notes\n -----\n NaN values are propagated, that is if at least one item is NaN, the\n corresponding max value will be NaN as well. To ignore NaN values\n (MATLAB behavior), please use nanmax.\n\n Examples\n --------\n >>> a = np.arange(4).reshape((2,2))\n >>> a\n array([[0, 1],\n [2, 3]])\n >>> np.amax(a)\n 3\n >>> np.amax(a, axis=0)\n array([2, 3])\n >>> np.amax(a, axis=1)\n array([1, 3])\n\n >>> b = np.arange(5, dtype=np.float)\n >>> b[2] = np.NaN\n >>> np.amax(b)\n nan\n >>> np.nanmax(b)\n 4.0\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_13amax = {__Pyx_NAMESTR("amax"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_13amax, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_12amax)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_13amax(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("amax (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":187 * * * def amax(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the maximum of an array or maximum along an axis. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "amax") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("amax", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.amax", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_12amax(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_12amax(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("amax", 0); /* "ga4py/gain/notimplemented.pyx":241 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.amax", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_15amin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_14amin[] = "Return the minimum of an array or minimum along an axis.\n\n Parameters\n ----------\n a : array_like\n Input data.\n axis : int, optional\n Axis along which to operate. By default a flattened input is used.\n out : ndarray, optional\n Alternative output array in which to place the result. Must\n be of the same shape and buffer length as the expected output.\n See `doc.ufuncs` (Section \"Output arguments\") for more details.\n\n Returns\n -------\n amin : ndarray\n A new array or a scalar array with the result.\n\n See Also\n --------\n nanmin: nan values are ignored instead of being propagated\n fmin: same behavior as the C99 fmin function\n argmin: Return the indices of the minimum values.\n\n amax, nanmax, fmax\n\n Notes\n -----\n NaN values are propagated, that is if at least one item is nan, the\n corresponding min value will be nan as well. To ignore NaN values (matlab\n behavior), please use nanmin.\n\n Examples\n --------\n >>> a = np.arange(4).reshape((2,2))\n >>> a\n array([[0, 1],\n [2, 3]])\n >>> np.amin(a) # Minimum of the flattened array\n 0\n >>> np.amin(a, axis=0) # Minima along the first axis\n array([0, 1])\n >>> np.amin(a, axis=1) # Minima along the second axis\n array([0, 2])\n\n >>> b = np.arange(5, dtype=np.float)\n >>> b[2] = np.NaN\n >>> np.amin(b)\n nan\n >>> np.nanmin(b)\n 0.0\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_15amin = {__Pyx_NAMESTR("amin"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_15amin, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_14amin)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_15amin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("amin (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":244 * * * def amin(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the minimum of an array or minimum along an axis. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "amin") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("amin", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.amin", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_14amin(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_14amin(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("amin", 0); /* "ga4py/gain/notimplemented.pyx":298 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.amin", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_17angle(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_16angle[] = "Return the angle of the complex argument.\n\n Parameters\n ----------\n z : array_like\n A complex number or sequence of complex numbers.\n deg : bool, optional\n Return angle in degrees if True, radians if False (default).\n\n Returns\n -------\n angle : {ndarray, scalar}\n The counterclockwise angle from the positive real axis on\n the complex plane, with dtype as numpy.float64.\n\n See Also\n --------\n arctan2\n absolute\n\n\n\n Examples\n --------\n >>> np.angle([1.0, 1.0j, 1+1j]) # in radians\n array([ 0. , 1.57079633, 0.78539816])\n >>> np.angle(1+1j, deg=True) # in degrees\n 45.0\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_17angle = {__Pyx_NAMESTR("angle"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_17angle, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_16angle)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_17angle(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_z = 0; CYTHON_UNUSED PyObject *__pyx_v_deg = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("angle (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__z,&__pyx_n_s__deg,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__z)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__deg); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "angle") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_z = values[0]; __pyx_v_deg = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("angle", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.angle", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_16angle(__pyx_self, __pyx_v_z, __pyx_v_deg); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":301 * * * def angle(z, deg=0): # <<<<<<<<<<<<<< * """Return the angle of the complex argument. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_16angle(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_z, CYTHON_UNUSED PyObject *__pyx_v_deg) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("angle", 0); /* "ga4py/gain/notimplemented.pyx":332 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.angle", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_19any(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_18any[] = "Test whether any array element along a given axis evaluates to True.\n\n Returns single boolean unless `axis` is not ``None``\n\n Parameters\n ----------\n a : array_like\n Input array or object that can be converted to an array.\n axis : int, optional\n Axis along which a logical OR is performed. The default\n (`axis` = `None`) is to perform a logical OR over a flattened\n input array. `axis` may be negative, in which case it counts\n from the last to the first axis.\n out : ndarray, optional\n Alternate output array in which to place the result. It must have\n the same shape as the expected output and its type is preserved\n (e.g., if it is of type float, then it will remain so, returning\n 1.0 for True and 0.0 for False, regardless of the type of `a`).\n See `doc.ufuncs` (Section \"Output arguments\") for details.\n\n Returns\n -------\n any : bool or ndarray\n A new boolean or `ndarray` is returned unless `out` is specified,\n in which case a reference to `out` is returned.\n\n See Also\n --------\n ndarray.any : equivalent method\n\n all : Test whether all elements along a given axis evaluate to True.\n\n Notes\n -----\n Not a Number (NaN), positive infinity and negative infinity evaluate\n to `True` because these are not equal to zero.\n\n Examples\n --------\n >>> np.any([[True, False], [True, True]])\n True\n\n >>> np.any([[True, False], [False, False]], axis=0)\n array([ True, False], dtype=bool)\n\n >>> np.any([-1, 0, 5])\n True\n\n >>> np.any(np.nan)\n True\n\n >>> o=np.array([False])\n >>> z=np.any([-1, 4, 5], out=o)\n >>> z, o\n (array([ True], dtype=bool), array([ True], dtype=bool))\n >>> # Check now that z is a reference to o\n >>> z is o\n True\n >>> id(z), id(o) # identity of z and o # doctest: +SKIP\n (191614240, 191614240)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_19any = {__Pyx_NAMESTR("any"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_19any, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_18any)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_19any(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("any (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":335 * * * def any(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Test whether any array element along a given axis evaluates to True. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "any") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("any", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.any", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_18any(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_18any(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("any", 0); /* "ga4py/gain/notimplemented.pyx":398 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.any", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_21append(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_20append[] = "Append values to the end of an array.\n\n Parameters\n ----------\n arr : array_like\n Values are appended to a copy of this array.\n values : array_like\n These values are appended to a copy of `arr`. It must be of the\n correct shape (the same shape as `arr`, excluding `axis`). If `axis`\n is not specified, `values` can be any shape and will be flattened\n before use.\n axis : int, optional\n The axis along which `values` are appended. If `axis` is not given,\n both `arr` and `values` are flattened before use.\n\n Returns\n -------\n out : ndarray\n A copy of `arr` with `values` appended to `axis`. Note that `append`\n does not occur in-place: a new array is allocated and filled. If\n `axis` is None, `out` is a flattened array.\n\n See Also\n --------\n insert : Insert elements into an array.\n delete : Delete elements from an array.\n\n Examples\n --------\n >>> np.append([1, 2, 3], [[4, 5, 6], [7, 8, 9]])\n array([1, 2, 3, 4, 5, 6, 7, 8, 9])\n\n When `axis` is specified, `values` must have the correct shape.\n\n >>> np.append([[1, 2, 3], [4, 5, 6]], [[7, 8, 9]], axis=0)\n array([[1, 2, 3],\n [4, 5, 6],\n [7, 8, 9]])\n >>> np.append([[1, 2, 3], [4, 5, 6]], [7, 8, 9], axis=0)\n Traceback (most recent call last):\n ...\n ValueError: arrays must have same number of dimensions\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_21append = {__Pyx_NAMESTR("append"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_21append, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_20append)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_21append(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_arr = 0; CYTHON_UNUSED PyObject *__pyx_v_values = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("append (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__arr,&__pyx_n_s__values,&__pyx_n_s__axis,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":401 * * * def append(arr, values, axis=None): # <<<<<<<<<<<<<< * """Append values to the end of an array. * */ values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arr)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__values)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("append", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "append") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_arr = values[0]; __pyx_v_values = values[1]; __pyx_v_axis = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("append", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.append", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_20append(__pyx_self, __pyx_v_arr, __pyx_v_values, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_20append(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arr, CYTHON_UNUSED PyObject *__pyx_v_values, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("append", 0); /* "ga4py/gain/notimplemented.pyx":446 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.append", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_23apply_along_axis(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_22apply_along_axis[] = "Apply a function to 1-D slices along the given axis.\n\n Execute `func1d(a, *args)` where `func1d` operates on 1-D arrays and `a`\n is a 1-D slice of `arr` along `axis`.\n\n Parameters\n ----------\n func1d : function\n This function should accept 1-D arrays. It is applied to 1-D\n slices of `arr` along the specified axis.\n axis : integer\n Axis along which `arr` is sliced.\n arr : ndarray\n Input array.\n args : any\n Additional arguments to `func1d`.\n\n Returns\n -------\n outarr : ndarray\n The output array. The shape of `outarr` is identical to the shape of\n `arr`, except along the `axis` dimension, where the length of `outarr`\n is equal to the size of the return value of `func1d`. If `func1d`\n returns a scalar `outarr` will have one fewer dimensions than `arr`.\n\n See Also\n --------\n apply_over_axes : Apply a function repeatedly over multiple axes.\n\n Examples\n --------\n >>> def my_func(a):\n ... '''Average first and last element of a 1-D array'''\n ... return (a[0] + a[-1]) * 0.5\n >>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])\n >>> np.apply_along_axis(my_func, 0, b)\n array([ 4., 5., 6.])\n >>> np.apply_along_axis(my_func, 1, b)\n array([ 2., 5., 8.])\n\n For a function that doesn't return a scalar, the number of dimensions in\n `outarr` is the same as `arr`.\n\n >>> def new_func(a):\n ... '''Divide elements of a by 2.'''\n ... return a * 0.5\n >>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])\n >>> np.apply_along_axis(new_func, 0, b)\n array([[ 0.5, 1. , 1.5],\n [ 2. , 2.5, 3. ],\n [ 3.5, 4. , 4.5]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_23apply_along_axis = {__Pyx_NAMESTR("apply_along_axis"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_23apply_along_axis, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_22apply_along_axis)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_23apply_along_axis(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_func1d = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_arr = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("apply_along_axis (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__func1d,&__pyx_n_s__axis,&__pyx_n_s__arr,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__func1d)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("apply_along_axis", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arr)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("apply_along_axis", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "apply_along_axis") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_func1d = values[0]; __pyx_v_axis = values[1]; __pyx_v_arr = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("apply_along_axis", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.apply_along_axis", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_22apply_along_axis(__pyx_self, __pyx_v_func1d, __pyx_v_axis, __pyx_v_arr); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":449 * * * def apply_along_axis(func1d, axis, arr): # <<<<<<<<<<<<<< * """Apply a function to 1-D slices along the given axis. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_22apply_along_axis(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_func1d, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_arr) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("apply_along_axis", 0); /* "ga4py/gain/notimplemented.pyx":503 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.apply_along_axis", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_25apply_over_axes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_24apply_over_axes[] = "Apply a function repeatedly over multiple axes.\n\n `func` is called as `res = func(a, axis)`, where `axis` is the first\n element of `axes`. The result `res` of the function call must have\n either the same dimensions as `a` or one less dimension. If `res`\n has one less dimension than `a`, a dimension is inserted before\n `axis`. The call to `func` is then repeated for each axis in `axes`,\n with `res` as the first argument.\n\n Parameters\n ----------\n func : function\n This function must take two arguments, `func(a, axis)`.\n a : array_like\n Input array.\n axes : array_like\n Axes over which `func` is applied; the elements must be integers.\n\n Returns\n -------\n val : ndarray\n The output array. The number of dimensions is the same as `a`,\n but the shape can be different. This depends on whether `func`\n changes the shape of its output with respect to its input.\n\n See Also\n --------\n apply_along_axis :\n Apply a function to 1-D slices of an array along the given axis.\n\n Examples\n --------\n >>> a = np.arange(24).reshape(2,3,4)\n >>> a\n array([[[ 0, 1, 2, 3],\n [ 4, 5, 6, 7],\n [ 8, 9, 10, 11]],\n [[12, 13, 14, 15],\n [16, 17, 18, 19],\n [20, 21, 22, 23]]])\n\n Sum over axes 0 and 2. The result has same number of dimensions\n as the original array:\n\n >>> np.apply_over_axes(np.sum, a, [0,2])\n array([[[ 60],\n [ 92],\n [124]]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_25apply_over_axes = {__Pyx_NAMESTR("apply_over_axes"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_25apply_over_axes, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_24apply_over_axes)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_25apply_over_axes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_func = 0; CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axes = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("apply_over_axes (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__func,&__pyx_n_s__a,&__pyx_n_s__axes,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__func)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("apply_over_axes", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axes)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("apply_over_axes", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "apply_over_axes") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_func = values[0]; __pyx_v_a = values[1]; __pyx_v_axes = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("apply_over_axes", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.apply_over_axes", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_24apply_over_axes(__pyx_self, __pyx_v_func, __pyx_v_a, __pyx_v_axes); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":506 * * * def apply_over_axes(func, a, axes): # <<<<<<<<<<<<<< * """Apply a function repeatedly over multiple axes. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_24apply_over_axes(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_func, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axes) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("apply_over_axes", 0); /* "ga4py/gain/notimplemented.pyx":557 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.apply_over_axes", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_27argmax(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_26argmax[] = "Indices of the maximum values along an axis.\n\n Parameters\n ----------\n a : array_like\n Input array.\n axis : int, optional\n By default, the index is into the flattened array, otherwise\n along the specified axis.\n\n Returns\n -------\n index_array : ndarray of ints\n Array of indices into the array. It has the same shape as `a.shape`\n with the dimension along `axis` removed.\n\n See Also\n --------\n ndarray.argmax, argmin\n amax : The maximum value along a given axis.\n unravel_index : Convert a flat index into an index tuple.\n\n Notes\n -----\n In case of multiple occurrences of the maximum values, the indices\n corresponding to the first occurrence are returned.\n\n Examples\n --------\n >>> a = np.arange(6).reshape(2,3)\n >>> a\n array([[0, 1, 2],\n [3, 4, 5]])\n >>> np.argmax(a)\n 5\n >>> np.argmax(a, axis=0)\n array([1, 1, 1])\n >>> np.argmax(a, axis=1)\n array([2, 2])\n\n >>> b = np.arange(6)\n >>> b[1] = 5\n >>> b\n array([0, 5, 2, 3, 4, 5])\n >>> np.argmax(b) # Only the first occurrence is returned.\n 1\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_27argmax = {__Pyx_NAMESTR("argmax"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_27argmax, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_26argmax)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_27argmax(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("argmax (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":560 * * * def argmax(a, axis=None): # <<<<<<<<<<<<<< * """Indices of the maximum values along an axis. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "argmax") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("argmax", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.argmax", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_26argmax(__pyx_self, __pyx_v_a, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_26argmax(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("argmax", 0); /* "ga4py/gain/notimplemented.pyx":609 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.argmax", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_29argmin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_28argmin[] = "Return the indices of the minimum values along an axis.\n\n See Also\n --------\n argmax : Similar function. Please refer to `numpy.argmax` for detailed\n documentation.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_29argmin = {__Pyx_NAMESTR("argmin"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_29argmin, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_28argmin)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_29argmin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("argmin (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":612 * * * def argmin(a, axis=None): # <<<<<<<<<<<<<< * """Return the indices of the minimum values along an axis. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "argmin") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("argmin", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.argmin", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_28argmin(__pyx_self, __pyx_v_a, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_28argmin(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("argmin", 0); /* "ga4py/gain/notimplemented.pyx":621 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.argmin", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_31argsort(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_30argsort[] = "Returns the indices that would sort an array.\n\n Perform an indirect sort along the given axis using the algorithm specified\n by the `kind` keyword. It returns an array of indices of the same shape as\n `a` that index data along the given axis in sorted order.\n\n Parameters\n ----------\n a : array_like\n Array to sort.\n axis : int or None, optional\n Axis along which to sort. The default is -1 (the last axis). If None,\n the flattened array is used.\n kind : {'quicksort', 'mergesort', 'heapsort'}, optional\n Sorting algorithm.\n order : list, optional\n When `a` is an array with fields defined, this argument specifies\n which fields to compare first, second, etc. Not all fields need be\n specified.\n\n Returns\n -------\n index_array : ndarray, int\n Array of indices that sort `a` along the specified axis.\n In other words, ``a[index_array]`` yields a sorted `a`.\n\n See Also\n --------\n sort : Describes sorting algorithms used.\n lexsort : Indirect stable sort with multiple keys.\n ndarray.sort : Inplace sort.\n\n Notes\n -----\n See `sort` for notes on the different sorting algorithms.\n\n As of NumPy 1.4.0 `argsort` works with real/complex arrays containing\n nan values. The enhanced sort order is documented in `sort`.\n\n Examples\n --------\n One dimensional array:\n\n >>> x = np.array([3, 1, 2])\n >>> np.argsort(x)\n array([1, 2, 0])\n\n Two-dimensional array:\n\n >>> x = np.array([[0, 3], [2, 2]])\n >>> x\n array([[0, 3],\n [2, 2]])\n\n >>> np.argsort(x, axis=0)\n array([[0, 1],\n [1, 0]])\n\n >>> np.argsort(x, axis=1)\n array([[0, 1],\n [0, 1]])\n\n Sorting with keys:\n\n >>> x = np.array([(1, 0), (0, 1)], dtype=[('x', '>> x\n array([(1, 0), (0, 1)],\n dtype=[('x', '>> np.argsor""t(x, order=('x','y'))\n array([1, 0])\n\n >>> np.argsort(x, order=('y','x'))\n array([0, 1])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_31argsort = {__Pyx_NAMESTR("argsort"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_31argsort, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_30argsort)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_31argsort(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_kind = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("argsort (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__kind,&__pyx_n_s__order,0}; PyObject* values[4] = {0,0,0,0}; values[1] = ((PyObject *)__pyx_int_neg_1); values[2] = ((PyObject *)__pyx_n_s__quicksort); /* "ga4py/gain/notimplemented.pyx":624 * * * def argsort(a, axis=-1, kind='quicksort', order=None): # <<<<<<<<<<<<<< * """Returns the indices that would sort an array. * */ values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__kind); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "argsort") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_kind = values[2]; __pyx_v_order = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("argsort", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.argsort", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_30argsort(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_kind, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_30argsort(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_kind, CYTHON_UNUSED PyObject *__pyx_v_order) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("argsort", 0); /* "ga4py/gain/notimplemented.pyx":701 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 701; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.argsort", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_33argwhere(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_32argwhere[] = "Find the indices of array elements that are non-zero, grouped by element.\n\n Parameters\n ----------\n a : array_like\n Input data.\n\n Returns\n -------\n index_array : ndarray\n Indices of elements that are non-zero. Indices are grouped by element.\n\n See Also\n --------\n where, nonzero\n\n Notes\n -----\n ``np.argwhere(a)`` is the same as ``np.transpose(np.nonzero(a))``.\n\n The output of ``argwhere`` is not suitable for indexing arrays.\n For this purpose use ``where(a)`` instead.\n\n Examples\n --------\n >>> x = np.arange(6).reshape(2,3)\n >>> x\n array([[0, 1, 2],\n [3, 4, 5]])\n >>> np.argwhere(x>1)\n array([[0, 2],\n [1, 0],\n [1, 1],\n [1, 2]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_33argwhere = {__Pyx_NAMESTR("argwhere"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_33argwhere, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_32argwhere)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_33argwhere(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("argwhere (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_32argwhere(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":704 * * * def argwhere(a): # <<<<<<<<<<<<<< * """Find the indices of array elements that are non-zero, grouped by element. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_32argwhere(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("argwhere", 0); /* "ga4py/gain/notimplemented.pyx":741 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.argwhere", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_35around(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_34around[] = "Evenly round to the given number of decimals.\n\n Parameters\n ----------\n a : array_like\n Input data.\n decimals : int, optional\n Number of decimal places to round to (default: 0). If\n decimals is negative, it specifies the number of positions to\n the left of the decimal point.\n out : ndarray, optional\n Alternative output array in which to place the result. It must have\n the same shape as the expected output, but the type of the output\n values will be cast if necessary. See `doc.ufuncs` (Section\n \"Output arguments\") for details.\n\n Returns\n -------\n rounded_array : ndarray\n An array of the same type as `a`, containing the rounded values.\n Unless `out` was specified, a new array is created. A reference to\n the result is returned.\n\n The real and imaginary parts of complex numbers are rounded\n separately. The result of rounding a float is a float.\n\n See Also\n --------\n ndarray.round : equivalent method\n\n ceil, fix, floor, rint, trunc\n\n\n Notes\n -----\n For values exactly halfway between rounded decimal values, Numpy\n rounds to the nearest even value. Thus 1.5 and 2.5 round to 2.0,\n -0.5 and 0.5 round to 0.0, etc. Results may also be surprising due\n to the inexact representation of decimal fractions in the IEEE\n floating point standard [1]_ and errors introduced when scaling\n by powers of ten.\n\n References\n ----------\n .. [1] \"Lecture Notes on the Status of IEEE 754\", William Kahan,\n http://www.cs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF\n .. [2] \"How Futile are Mindless Assessments of\n Roundoff in Floating-Point Computation?\", William Kahan,\n http://www.cs.berkeley.edu/~wkahan/Mindless.pdf\n\n Examples\n --------\n >>> np.around([0.37, 1.64])\n array([ 0., 2.])\n >>> np.around([0.37, 1.64], decimals=1)\n ""array([ 0.4, 1.6])\n >>> np.around([.5, 1.5, 2.5, 3.5, 4.5]) # rounds to nearest even value\n array([ 0., 2., 2., 4., 4.])\n >>> np.around([1,2,3,11], decimals=1) # ndarray of ints is returned\n array([ 1, 2, 3, 11])\n >>> np.around([1,2,3,11], decimals=-1)\n array([ 0, 0, 0, 10])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_35around = {__Pyx_NAMESTR("around"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_35around, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_34around)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_35around(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_decimals = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("around (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__decimals,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; values[1] = ((PyObject *)__pyx_int_0); /* "ga4py/gain/notimplemented.pyx":744 * * * def around(a, decimals=0, out=None): # <<<<<<<<<<<<<< * """Evenly round to the given number of decimals. * */ values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__decimals); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "around") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_decimals = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("around", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.around", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_34around(__pyx_self, __pyx_v_a, __pyx_v_decimals, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_34around(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_decimals, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("around", 0); /* "ga4py/gain/notimplemented.pyx":809 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.around", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_37array(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_36array[] = "array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)\n\n Create an array.\n\n Parameters\n ----------\n object : array_like\n An array, any object exposing the array interface, an\n object whose __array__ method returns an array, or any\n (nested) sequence.\n dtype : data-type, optional\n The desired data-type for the array. If not given, then\n the type will be determined as the minimum type required\n to hold the objects in the sequence. This argument can only\n be used to 'upcast' the array. For downcasting, use the\n .astype(t) method.\n copy : bool, optional\n If true (default), then the object is copied. Otherwise, a copy\n will only be made if __array__ returns a copy, if obj is a\n nested sequence, or if a copy is needed to satisfy any of the other\n requirements (`dtype`, `order`, etc.).\n order : {'C', 'F', 'A'}, optional\n Specify the order of the array. If order is 'C' (default), then the\n array will be in C-contiguous order (last-index varies the\n fastest). If order is 'F', then the returned array\n will be in Fortran-contiguous order (first-index varies the\n fastest). If order is 'A', then the returned array may\n be in any order (either C-, Fortran-contiguous, or even\n discontiguous).\n subok : bool, optional\n If True, then sub-classes will be passed-through, otherwise\n the returned array will be forced to be a base-class array (default).\n ndmin : int, optional\n Specifies the minimum number of dimensions that the resulting\n array should have. Ones will be pre-pended to the shape as\n needed to meet this requirement.\n\n Returns\n -------\n out : ndarray\n An array object satisfying the specified requirements.\n\n See Also\n --------\n empty, empty_like, zeros, zeros_like, ones, ones_like, fill\n\n ""Examples\n --------\n >>> np.array([1, 2, 3])\n array([1, 2, 3])\n\n Upcasting:\n\n >>> np.array([1, 2, 3.0])\n array([ 1., 2., 3.])\n\n More than one dimension:\n\n >>> np.array([[1, 2], [3, 4]])\n array([[1, 2],\n [3, 4]])\n\n Minimum dimensions 2:\n\n >>> np.array([1, 2, 3], ndmin=2)\n array([[1, 2, 3]])\n\n Type provided:\n\n >>> np.array([1, 2, 3], dtype=complex)\n array([ 1.+0.j, 2.+0.j, 3.+0.j])\n\n Data-type consisting of more than one element:\n\n >>> x = np.array([(1,2),(3,4)],dtype=[('a','>> x['a']\n array([1, 3])\n\n Creating an array from sub-classes:\n\n >>> np.array(np.mat('1 2; 3 4'))\n array([[1, 2],\n [3, 4]])\n\n >>> np.array(np.mat('1 2; 3 4'), subok=True)\n matrix([[1, 2],\n [3, 4]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_37array = {__Pyx_NAMESTR("array"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_37array, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_36array)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_37array(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_object = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_copy = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; CYTHON_UNUSED PyObject *__pyx_v_subok = 0; CYTHON_UNUSED PyObject *__pyx_v_ndmin = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("array (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__object,&__pyx_n_s__dtype,&__pyx_n_s__copy,&__pyx_n_s__order,&__pyx_n_s__subok,&__pyx_n_s__ndmin,0}; PyObject* values[6] = {0,0,0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":812 * * * def array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0): # <<<<<<<<<<<<<< * """array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0) * */ values[1] = ((PyObject *)Py_None); values[2] = __pyx_k_3; values[3] = ((PyObject *)Py_None); values[4] = __pyx_k_4; values[5] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__object)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__copy); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__subok); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ndmin); if (value) { values[5] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "array") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_object = values[0]; __pyx_v_dtype = values[1]; __pyx_v_copy = values[2]; __pyx_v_order = values[3]; __pyx_v_subok = values[4]; __pyx_v_ndmin = values[5]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("array", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.array", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_36array(__pyx_self, __pyx_v_object, __pyx_v_dtype, __pyx_v_copy, __pyx_v_order, __pyx_v_subok, __pyx_v_ndmin); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_36array(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_object, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_copy, CYTHON_UNUSED PyObject *__pyx_v_order, CYTHON_UNUSED PyObject *__pyx_v_subok, CYTHON_UNUSED PyObject *__pyx_v_ndmin) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("array", 0); /* "ga4py/gain/notimplemented.pyx":903 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 903; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.array", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_39array2string(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_38array2string[] = "Return a string representation of an array.\n\n Parameters\n ----------\n a : ndarray\n Input array.\n max_line_width : int, optional\n The maximum number of columns the string should span. Newline\n characters splits the string appropriately after array elements.\n precision : int, optional\n Floating point precision. Default is the current printing\n precision (usually 8), which can be altered using `set_printoptions`.\n suppress_small : bool, optional\n Represent very small numbers as zero. A number is \"very small\" if it\n is smaller than the current printing precision.\n separator : str, optional\n Inserted between elements.\n prefix : str, optional\n An array is typically printed as::\n\n 'prefix(' + array2string(a) + ')'\n\n The length of the prefix string is used to align the\n output correctly.\n style : function, optional\n A function that accepts an ndarray and returns a string. Used only\n when the shape of `a` is equal to ().\n\n Returns\n -------\n array_str : str\n String representation of the array.\n\n See Also\n --------\n array_str, array_repr, set_printoptions\n\n Examples\n --------\n >>> x = np.array([1e-16,1,2,3])\n >>> print np.array2string(x, precision=2, separator=',',\n ... suppress_small=True)\n [ 0., 1., 2., 3.]\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_39array2string = {__Pyx_NAMESTR("array2string"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_39array2string, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_38array2string)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_39array2string(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_max_line_width = 0; CYTHON_UNUSED PyObject *__pyx_v_precision = 0; CYTHON_UNUSED PyObject *__pyx_v_suppress_small = 0; CYTHON_UNUSED PyObject *__pyx_v_separator = 0; CYTHON_UNUSED PyObject *__pyx_v_prefix = 0; CYTHON_UNUSED PyObject *__pyx_v_style = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("array2string (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__max_line_width,&__pyx_n_s__precision,&__pyx_n_s__suppress_small,&__pyx_n_s__separator,&__pyx_n_s__prefix,&__pyx_n_s__style,0}; PyObject* values[7] = {0,0,0,0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":906 * * * def array2string(a, max_line_width=None, precision=None, suppress_small=None, separator=' ', prefix='', style=repr): # <<<<<<<<<<<<<< * """Return a string representation of an array. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)__pyx_kp_s_5); values[5] = ((PyObject *)__pyx_kp_s_6); values[6] = __pyx_k_7; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__max_line_width); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__precision); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__suppress_small); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__separator); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__prefix); if (value) { values[5] = value; kw_args--; } } case 6: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__style); if (value) { values[6] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "array2string") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 906; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_max_line_width = values[1]; __pyx_v_precision = values[2]; __pyx_v_suppress_small = values[3]; __pyx_v_separator = values[4]; __pyx_v_prefix = values[5]; __pyx_v_style = values[6]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("array2string", 0, 1, 7, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 906; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.array2string", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_38array2string(__pyx_self, __pyx_v_a, __pyx_v_max_line_width, __pyx_v_precision, __pyx_v_suppress_small, __pyx_v_separator, __pyx_v_prefix, __pyx_v_style); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_38array2string(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_max_line_width, CYTHON_UNUSED PyObject *__pyx_v_precision, CYTHON_UNUSED PyObject *__pyx_v_suppress_small, CYTHON_UNUSED PyObject *__pyx_v_separator, CYTHON_UNUSED PyObject *__pyx_v_prefix, CYTHON_UNUSED PyObject *__pyx_v_style) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("array2string", 0); /* "ga4py/gain/notimplemented.pyx":952 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 952; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.array2string", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_41array_equal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_40array_equal[] = "True if two arrays have the same shape and elements, False otherwise.\n\n Parameters\n ----------\n a1, a2 : array_like\n Input arrays.\n\n Returns\n -------\n b : bool\n Returns True if the arrays are equal.\n\n See Also\n --------\n allclose: Returns True if two arrays are element-wise equal within a\n tolerance.\n array_equiv: Returns True if input arrays are shape consistent and all\n elements equal.\n\n Examples\n --------\n >>> np.array_equal([1, 2], [1, 2])\n True\n >>> np.array_equal(np.array([1, 2]), np.array([1, 2]))\n True\n >>> np.array_equal([1, 2], [1, 2, 3])\n False\n >>> np.array_equal([1, 2], [1, 4])\n False\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_41array_equal = {__Pyx_NAMESTR("array_equal"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_41array_equal, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_40array_equal)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_41array_equal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a1 = 0; CYTHON_UNUSED PyObject *__pyx_v_a2 = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("array_equal (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a1,&__pyx_n_s__a2,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a1)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("array_equal", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "array_equal") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_a1 = values[0]; __pyx_v_a2 = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("array_equal", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.array_equal", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_40array_equal(__pyx_self, __pyx_v_a1, __pyx_v_a2); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":955 * * * def array_equal(a1, a2): # <<<<<<<<<<<<<< * """True if two arrays have the same shape and elements, False otherwise. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_40array_equal(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a1, CYTHON_UNUSED PyObject *__pyx_v_a2) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("array_equal", 0); /* "ga4py/gain/notimplemented.pyx":987 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 987; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.array_equal", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_43array_equiv(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_42array_equiv[] = "Returns True if input arrays are shape consistent and all elements equal.\n\n Shape consistent means they are either the same shape, or one input array\n can be broadcasted to create the same shape as the other one.\n\n Parameters\n ----------\n a1, a2 : array_like\n Input arrays.\n\n Returns\n -------\n out : bool\n True if equivalent, False otherwise.\n\n Examples\n --------\n >>> np.array_equiv([1, 2], [1, 2])\n True\n >>> np.array_equiv([1, 2], [1, 3])\n False\n\n Showing the shape equivalence:\n\n >>> np.array_equiv([1, 2], [[1, 2], [1, 2]])\n True\n >>> np.array_equiv([1, 2], [[1, 2, 1, 2], [1, 2, 1, 2]])\n False\n\n >>> np.array_equiv([1, 2], [[1, 2], [1, 3]])\n False\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_43array_equiv = {__Pyx_NAMESTR("array_equiv"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_43array_equiv, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_42array_equiv)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_43array_equiv(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a1 = 0; CYTHON_UNUSED PyObject *__pyx_v_a2 = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("array_equiv (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a1,&__pyx_n_s__a2,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a1)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("array_equiv", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 990; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "array_equiv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 990; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_a1 = values[0]; __pyx_v_a2 = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("array_equiv", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 990; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.array_equiv", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_42array_equiv(__pyx_self, __pyx_v_a1, __pyx_v_a2); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":990 * * * def array_equiv(a1, a2): # <<<<<<<<<<<<<< * """Returns True if input arrays are shape consistent and all elements equal. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_42array_equiv(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a1, CYTHON_UNUSED PyObject *__pyx_v_a2) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("array_equiv", 0); /* "ga4py/gain/notimplemented.pyx":1024 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1024; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.array_equiv", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_45array_repr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_44array_repr[] = "Return the string representation of an array.\n\n Parameters\n ----------\n arr : ndarray\n Input array.\n max_line_width : int, optional\n The maximum number of columns the string should span. Newline\n characters split the string appropriately after array elements.\n precision : int, optional\n Floating point precision. Default is the current printing precision\n (usually 8), which can be altered using `set_printoptions`.\n suppress_small : bool, optional\n Represent very small numbers as zero, default is False. Very small\n is defined by `precision`, if the precision is 8 then\n numbers smaller than 5e-9 are represented as zero.\n\n Returns\n -------\n string : str\n The string representation of an array.\n\n See Also\n --------\n array_str, array2string, set_printoptions\n\n Examples\n --------\n >>> np.array_repr(np.array([1,2]))\n 'array([1, 2])'\n >>> np.array_repr(np.ma.array([0.]))\n 'MaskedArray([ 0.])'\n >>> np.array_repr(np.array([], np.int32))\n 'array([], dtype=int32)'\n\n >>> x = np.array([1e-6, 4e-7, 2, 3])\n >>> np.array_repr(x, precision=6, suppress_small=True)\n 'array([ 0.000001, 0. , 2. , 3. ])'\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_45array_repr = {__Pyx_NAMESTR("array_repr"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_45array_repr, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_44array_repr)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_45array_repr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_arr = 0; CYTHON_UNUSED PyObject *__pyx_v_max_line_width = 0; CYTHON_UNUSED PyObject *__pyx_v_precision = 0; CYTHON_UNUSED PyObject *__pyx_v_suppress_small = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("array_repr (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__arr,&__pyx_n_s__max_line_width,&__pyx_n_s__precision,&__pyx_n_s__suppress_small,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":1027 * * * def array_repr(arr, max_line_width=None, precision=None, suppress_small=None): # <<<<<<<<<<<<<< * """Return the string representation of an array. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arr)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__max_line_width); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__precision); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__suppress_small); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "array_repr") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_arr = values[0]; __pyx_v_max_line_width = values[1]; __pyx_v_precision = values[2]; __pyx_v_suppress_small = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("array_repr", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.array_repr", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_44array_repr(__pyx_self, __pyx_v_arr, __pyx_v_max_line_width, __pyx_v_precision, __pyx_v_suppress_small); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_44array_repr(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arr, CYTHON_UNUSED PyObject *__pyx_v_max_line_width, CYTHON_UNUSED PyObject *__pyx_v_precision, CYTHON_UNUSED PyObject *__pyx_v_suppress_small) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("array_repr", 0); /* "ga4py/gain/notimplemented.pyx":1068 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1068; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.array_repr", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_47array_split(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_46array_split[] = "Split an array into multiple sub-arrays of equal or near-equal size.\n\n Please refer to the ``split`` documentation. The only difference\n between these functions is that ``array_split`` allows\n `indices_or_sections` to be an integer that does *not* equally\n divide the axis.\n\n See Also\n --------\n split : Split array into multiple sub-arrays of equal size.\n\n Examples\n --------\n >>> x = np.arange(8.0)\n >>> np.array_split(x, 3)\n [array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7.])]\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_47array_split = {__Pyx_NAMESTR("array_split"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_47array_split, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_46array_split)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_47array_split(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_ary = 0; CYTHON_UNUSED PyObject *__pyx_v_indices_or_sections = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("array_split (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__ary,&__pyx_n_s__indices_or_sections,&__pyx_n_s__axis,0}; PyObject* values[3] = {0,0,0}; values[2] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ary)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__indices_or_sections)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("array_split", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1071; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "array_split") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1071; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_ary = values[0]; __pyx_v_indices_or_sections = values[1]; __pyx_v_axis = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("array_split", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1071; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.array_split", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_46array_split(__pyx_self, __pyx_v_ary, __pyx_v_indices_or_sections, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":1071 * * * def array_split(ary, indices_or_sections, axis=0): # <<<<<<<<<<<<<< * """Split an array into multiple sub-arrays of equal or near-equal size. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_46array_split(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ary, CYTHON_UNUSED PyObject *__pyx_v_indices_or_sections, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("array_split", 0); /* "ga4py/gain/notimplemented.pyx":1090 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1090; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.array_split", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_49array_str(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_48array_str[] = "Return a string representation of the data in an array.\n\n The data in the array is returned as a single string. This function is\n similar to `array_repr`, the difference being that `array_repr` also\n returns information on the kind of array and its data type.\n\n Parameters\n ----------\n a : ndarray\n Input array.\n max_line_width : int, optional\n Inserts newlines if text is longer than `max_line_width`. The\n default is, indirectly, 75.\n precision : int, optional\n Floating point precision. Default is the current printing precision\n (usually 8), which can be altered using `set_printoptions`.\n suppress_small : bool, optional\n Represent numbers \"very close\" to zero as zero; default is False.\n Very close is defined by precision: if the precision is 8, e.g.,\n numbers smaller (in absolute value) than 5e-9 are represented as\n zero.\n\n See Also\n --------\n array2string, array_repr, set_printoptions\n\n Examples\n --------\n >>> np.array_str(np.arange(3))\n '[0 1 2]'\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_49array_str = {__Pyx_NAMESTR("array_str"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_49array_str, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_48array_str)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_49array_str(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_max_line_width = 0; CYTHON_UNUSED PyObject *__pyx_v_precision = 0; CYTHON_UNUSED PyObject *__pyx_v_suppress_small = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("array_str (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__max_line_width,&__pyx_n_s__precision,&__pyx_n_s__suppress_small,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":1093 * * * def array_str(a, max_line_width=None, precision=None, suppress_small=None): # <<<<<<<<<<<<<< * """Return a string representation of the data in an array. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__max_line_width); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__precision); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__suppress_small); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "array_str") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_max_line_width = values[1]; __pyx_v_precision = values[2]; __pyx_v_suppress_small = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("array_str", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.array_str", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_48array_str(__pyx_self, __pyx_v_a, __pyx_v_max_line_width, __pyx_v_precision, __pyx_v_suppress_small); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_48array_str(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_max_line_width, CYTHON_UNUSED PyObject *__pyx_v_precision, CYTHON_UNUSED PyObject *__pyx_v_suppress_small) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("array_str", 0); /* "ga4py/gain/notimplemented.pyx":1126 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.array_str", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_51asanyarray(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_50asanyarray[] = "Convert the input to an ndarray, but pass ndarray subclasses through.\n\n Parameters\n ----------\n a : array_like\n Input data, in any form that can be converted to an array. This\n includes scalars, lists, lists of tuples, tuples, tuples of tuples,\n tuples of lists, and ndarrays.\n dtype : data-type, optional\n By default, the data-type is inferred from the input data.\n order : {'C', 'F'}, optional\n Whether to use row-major ('C') or column-major ('F') memory\n representation. Defaults to 'C'.\n\n Returns\n -------\n out : ndarray or an ndarray subclass\n Array interpretation of `a`. If `a` is an ndarray or a subclass\n of ndarray, it is returned as-is and no copy is performed.\n\n See Also\n --------\n asarray : Similar function which always returns ndarrays.\n ascontiguousarray : Convert input to a contiguous array.\n asfarray : Convert input to a floating point ndarray.\n asfortranarray : Convert input to an ndarray with column-major\n memory order.\n asarray_chkfinite : Similar function which checks input for NaNs and\n Infs.\n fromiter : Create an array from an iterator.\n fromfunction : Construct an array by executing a function on grid\n positions.\n\n Examples\n --------\n Convert a list into an array:\n\n >>> a = [1, 2]\n >>> np.asanyarray(a)\n array([1, 2])\n\n Instances of `ndarray` subclasses are passed through as-is:\n\n >>> a = np.matrix([1, 2])\n >>> np.asanyarray(a) is a\n True\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_51asanyarray = {__Pyx_NAMESTR("asanyarray"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_51asanyarray, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_50asanyarray)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_51asanyarray(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("asanyarray (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__dtype,&__pyx_n_s__order,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":1129 * * * def asanyarray(a, dtype=None, order=None): # <<<<<<<<<<<<<< * """Convert the input to an ndarray, but pass ndarray subclasses through. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "asanyarray") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_dtype = values[1]; __pyx_v_order = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("asanyarray", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.asanyarray", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_50asanyarray(__pyx_self, __pyx_v_a, __pyx_v_dtype, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_50asanyarray(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_order) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("asanyarray", 0); /* "ga4py/gain/notimplemented.pyx":1178 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.asanyarray", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_53asarray_chkfinite(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_52asarray_chkfinite[] = "Convert the input to an array, checking for NaNs or Infs.\n\n Parameters\n ----------\n a : array_like\n Input data, in any form that can be converted to an array. This\n includes lists, lists of tuples, tuples, tuples of tuples, tuples\n of lists and ndarrays. Success requires no NaNs or Infs.\n dtype : data-type, optional\n By default, the data-type is inferred from the input data.\n order : {'C', 'F'}, optional\n Whether to use row-major ('C') or column-major ('FORTRAN') memory\n representation. Defaults to 'C'.\n\n Returns\n -------\n out : ndarray\n Array interpretation of `a`. No copy is performed if the input\n is already an ndarray. If `a` is a subclass of ndarray, a base\n class ndarray is returned.\n\n Raises\n ------\n ValueError\n Raises ValueError if `a` contains NaN (Not a Number) or Inf (Infinity).\n\n See Also\n --------\n asarray : Create and array.\n asanyarray : Similar function which passes through subclasses.\n ascontiguousarray : Convert input to a contiguous array.\n asfarray : Convert input to a floating point ndarray.\n asfortranarray : Convert input to an ndarray with column-major\n memory order.\n fromiter : Create an array from an iterator.\n fromfunction : Construct an array by executing a function on grid\n positions.\n\n Examples\n --------\n Convert a list into an array. If all elements are finite\n ``asarray_chkfinite`` is identical to ``asarray``.\n\n >>> a = [1, 2]\n >>> np.asarray_chkfinite(a)\n array([1, 2])\n\n Raises ValueError if array_like contains Nans or Infs.\n\n >>> a = [1, 2, np.inf]\n >>> try:\n ... np.asarray_chkfinite(a)\n ... except ValueError:\n ... print 'ValueError'\n ...\n ValueError\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_53asarray_chkfinite = {__Pyx_NAMESTR("asarray_chkfinite"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_53asarray_chkfinite, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_52asarray_chkfinite)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_53asarray_chkfinite(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("asarray_chkfinite (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_52asarray_chkfinite(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":1181 * * * def asarray_chkfinite(a): # <<<<<<<<<<<<<< * """Convert the input to an array, checking for NaNs or Infs. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_52asarray_chkfinite(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("asarray_chkfinite", 0); /* "ga4py/gain/notimplemented.pyx":1240 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1240; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.asarray_chkfinite", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_55ascontiguousarray(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_54ascontiguousarray[] = "Return a contiguous array in memory (C order).\n\n Parameters\n ----------\n a : array_like\n Input array.\n dtype : str or dtype object, optional\n Data-type of returned array.\n\n Returns\n -------\n out : ndarray\n Contiguous array of same shape and content as `a`, with type `dtype`\n if specified.\n\n See Also\n --------\n asfortranarray : Convert input to an ndarray with column-major\n memory order.\n require : Return an ndarray that satisfies requirements.\n ndarray.flags : Information about the memory layout of the array.\n\n Examples\n --------\n >>> x = np.arange(6).reshape(2,3)\n >>> np.ascontiguousarray(x, dtype=np.float32)\n array([[ 0., 1., 2.],\n [ 3., 4., 5.]], dtype=float32)\n >>> x.flags['C_CONTIGUOUS']\n True\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_55ascontiguousarray = {__Pyx_NAMESTR("ascontiguousarray"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_55ascontiguousarray, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_54ascontiguousarray)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_55ascontiguousarray(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("ascontiguousarray (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__dtype,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":1243 * * * def ascontiguousarray(a, dtype=None): # <<<<<<<<<<<<<< * """Return a contiguous array in memory (C order). * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ascontiguousarray") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1243; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_dtype = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("ascontiguousarray", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1243; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ascontiguousarray", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_54ascontiguousarray(__pyx_self, __pyx_v_a, __pyx_v_dtype); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_54ascontiguousarray(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_dtype) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("ascontiguousarray", 0); /* "ga4py/gain/notimplemented.pyx":1276 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ascontiguousarray", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_57asfarray(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_56asfarray[] = "Return an array converted to a float type.\n\n Parameters\n ----------\n a : array_like\n The input array.\n dtype : str or dtype object, optional\n Float type code to coerce input array `a`. If `dtype` is one of the\n 'int' dtypes, it is replaced with float64.\n\n Returns\n -------\n out : ndarray\n The input `a` as a float ndarray.\n\n Examples\n --------\n >>> np.asfarray([2, 3])\n array([ 2., 3.])\n >>> np.asfarray([2, 3], dtype='float')\n array([ 2., 3.])\n >>> np.asfarray([2, 3], dtype='int8')\n array([ 2., 3.])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_57asfarray = {__Pyx_NAMESTR("asfarray"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_57asfarray, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_56asfarray)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_57asfarray(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("asfarray (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__dtype,0}; PyObject* values[2] = {0,0}; values[1] = __pyx_k_8; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "asfarray") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1279; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_dtype = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("asfarray", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1279; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.asfarray", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_56asfarray(__pyx_self, __pyx_v_a, __pyx_v_dtype); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":1279 * * * def asfarray(a, dtype=np.float64): # <<<<<<<<<<<<<< * """Return an array converted to a float type. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_56asfarray(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_dtype) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("asfarray", 0); /* "ga4py/gain/notimplemented.pyx":1305 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.asfarray", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_59asfortranarray(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_58asfortranarray[] = "Return an array laid out in Fortran order in memory.\n\n Parameters\n ----------\n a : array_like\n Input array.\n dtype : str or dtype object, optional\n By default, the data-type is inferred from the input data.\n\n Returns\n -------\n out : ndarray\n The input `a` in Fortran, or column-major, order.\n\n See Also\n --------\n ascontiguousarray : Convert input to a contiguous (C order) array.\n asanyarray : Convert input to an ndarray with either row or\n column-major memory order.\n require : Return an ndarray that satisfies requirements.\n ndarray.flags : Information about the memory layout of the array.\n\n Examples\n --------\n >>> x = np.arange(6).reshape(2,3)\n >>> y = np.asfortranarray(x)\n >>> x.flags['F_CONTIGUOUS']\n False\n >>> y.flags['F_CONTIGUOUS']\n True\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_59asfortranarray = {__Pyx_NAMESTR("asfortranarray"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_59asfortranarray, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_58asfortranarray)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_59asfortranarray(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("asfortranarray (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__dtype,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":1308 * * * def asfortranarray(a, dtype=None): # <<<<<<<<<<<<<< * """Return an array laid out in Fortran order in memory. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "asfortranarray") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_dtype = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("asfortranarray", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.asfortranarray", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_58asfortranarray(__pyx_self, __pyx_v_a, __pyx_v_dtype); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_58asfortranarray(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_dtype) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("asfortranarray", 0); /* "ga4py/gain/notimplemented.pyx":1341 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1341; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.asfortranarray", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_61asmatrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_60asmatrix[] = "Interpret the input as a matrix.\n\n Unlike `matrix`, `asmatrix` does not make a copy if the input is already\n a matrix or an ndarray. Equivalent to ``matrix(data, copy=False)``.\n\n Parameters\n ----------\n data : array_like\n Input data.\n\n Returns\n -------\n mat : matrix\n `data` interpreted as a matrix.\n\n Examples\n --------\n >>> x = np.array([[1, 2], [3, 4]])\n\n >>> m = np.asmatrix(x)\n\n >>> x[0,0] = 5\n\n >>> m\n matrix([[5, 2],\n [3, 4]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_61asmatrix = {__Pyx_NAMESTR("asmatrix"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_61asmatrix, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_60asmatrix)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_61asmatrix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_data = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("asmatrix (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__data,&__pyx_n_s__dtype,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":1344 * * * def asmatrix(data, dtype=None): # <<<<<<<<<<<<<< * """Interpret the input as a matrix. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "asmatrix") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1344; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_data = values[0]; __pyx_v_dtype = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("asmatrix", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1344; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.asmatrix", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_60asmatrix(__pyx_self, __pyx_v_data, __pyx_v_dtype); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_60asmatrix(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_data, CYTHON_UNUSED PyObject *__pyx_v_dtype) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("asmatrix", 0); /* "ga4py/gain/notimplemented.pyx":1373 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.asmatrix", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_63asscalar(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_62asscalar[] = "Convert an array of size 1 to its scalar equivalent.\n\n Parameters\n ----------\n a : ndarray\n Input array of size 1.\n\n Returns\n -------\n out : scalar\n Scalar representation of `a`. The input data type is preserved.\n\n Examples\n --------\n >>> np.asscalar(np.array([24]))\n 24\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_63asscalar = {__Pyx_NAMESTR("asscalar"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_63asscalar, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_62asscalar)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_63asscalar(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("asscalar (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_62asscalar(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":1376 * * * def asscalar(a): # <<<<<<<<<<<<<< * """Convert an array of size 1 to its scalar equivalent. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_62asscalar(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("asscalar", 0); /* "ga4py/gain/notimplemented.pyx":1395 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1395; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.asscalar", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_65atleast_1d(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_64atleast_1d[] = "Convert inputs to arrays with at least one dimension.\n\n Scalar inputs are converted to 1-dimensional arrays, whilst\n higher-dimensional inputs are preserved.\n\n Parameters\n ----------\n array1, array2, ... : array_like\n One or more input arrays.\n\n Returns\n -------\n ret : ndarray\n An array, or sequence of arrays, each with ``a.ndim >= 1``.\n Copies are made only if necessary.\n\n See Also\n --------\n atleast_2d, atleast_3d\n\n Examples\n --------\n >>> np.atleast_1d(1.0)\n array([ 1.])\n\n >>> x = np.arange(9.0).reshape(3,3)\n >>> np.atleast_1d(x)\n array([[ 0., 1., 2.],\n [ 3., 4., 5.],\n [ 6., 7., 8.]])\n >>> np.atleast_1d(x) is x\n True\n\n >>> np.atleast_1d(1, [3, 4])\n [array([1]), array([3, 4])]\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_65atleast_1d = {__Pyx_NAMESTR("atleast_1d"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_65atleast_1d, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_64atleast_1d)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_65atleast_1d(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("atleast_1d (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_64atleast_1d(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":1398 * * * def atleast_1d(): # <<<<<<<<<<<<<< * """Convert inputs to arrays with at least one dimension. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_64atleast_1d(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("atleast_1d", 0); /* "ga4py/gain/notimplemented.pyx":1436 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.atleast_1d", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_67atleast_2d(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_66atleast_2d[] = "View inputs as arrays with at least two dimensions.\n\n Parameters\n ----------\n array1, array2, ... : array_like\n One or more array-like sequences. Non-array inputs are converted\n to arrays. Arrays that already have two or more dimensions are\n preserved.\n\n Returns\n -------\n res, res2, ... : ndarray\n An array, or tuple of arrays, each with ``a.ndim >= 2``.\n Copies are avoided where possible, and views with two or more\n dimensions are returned.\n\n See Also\n --------\n atleast_1d, atleast_3d\n\n Examples\n --------\n >>> np.atleast_2d(3.0)\n array([[ 3.]])\n\n >>> x = np.arange(3.0)\n >>> np.atleast_2d(x)\n array([[ 0., 1., 2.]])\n >>> np.atleast_2d(x).base is x\n True\n\n >>> np.atleast_2d(1, [1, 2], [[1, 2]])\n [array([[1]]), array([[1, 2]]), array([[1, 2]])]\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_67atleast_2d = {__Pyx_NAMESTR("atleast_2d"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_67atleast_2d, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_66atleast_2d)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_67atleast_2d(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("atleast_2d (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_66atleast_2d(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":1439 * * * def atleast_2d(): # <<<<<<<<<<<<<< * """View inputs as arrays with at least two dimensions. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_66atleast_2d(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("atleast_2d", 0); /* "ga4py/gain/notimplemented.pyx":1475 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.atleast_2d", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_69atleast_3d(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_68atleast_3d[] = "View inputs as arrays with at least three dimensions.\n\n Parameters\n ----------\n array1, array2, ... : array_like\n One or more array-like sequences. Non-array inputs are converted to\n arrays. Arrays that already have three or more dimensions are\n preserved.\n\n Returns\n -------\n res1, res2, ... : ndarray\n An array, or tuple of arrays, each with ``a.ndim >= 3``. Copies are\n avoided where possible, and views with three or more dimensions are\n returned. For example, a 1-D array of shape ``(N,)`` becomes a view\n of shape ``(1, N, 1)``, and a 2-D array of shape ``(M, N)`` becomes a\n view of shape ``(M, N, 1)``.\n\n See Also\n --------\n atleast_1d, atleast_2d\n\n Examples\n --------\n >>> np.atleast_3d(3.0)\n array([[[ 3.]]])\n\n >>> x = np.arange(3.0)\n >>> np.atleast_3d(x).shape\n (1, 3, 1)\n\n >>> x = np.arange(12.0).reshape(4,3)\n >>> np.atleast_3d(x).shape\n (4, 3, 1)\n >>> np.atleast_3d(x).base is x\n True\n\n >>> for arr in np.atleast_3d([1, 2], [[1, 2]], [[[1, 2]]]):\n ... print arr, arr.shape\n ...\n [[[1]\n [2]]] (1, 2, 1)\n [[[1]\n [2]]] (1, 2, 1)\n [[[1 2]]] (1, 1, 2)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_69atleast_3d = {__Pyx_NAMESTR("atleast_3d"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_69atleast_3d, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_68atleast_3d)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_69atleast_3d(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("atleast_3d (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_68atleast_3d(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":1478 * * * def atleast_3d(): # <<<<<<<<<<<<<< * """View inputs as arrays with at least three dimensions. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_68atleast_3d(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("atleast_3d", 0); /* "ga4py/gain/notimplemented.pyx":1526 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1526; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.atleast_3d", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_71average(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_70average[] = "Compute the weighted average along the specified axis.\n\n Parameters\n ----------\n a : array_like\n Array containing data to be averaged. If `a` is not an array, a\n conversion is attempted.\n axis : int, optional\n Axis along which to average `a`. If `None`, averaging is done over\n the flattened array.\n weights : array_like, optional\n An array of weights associated with the values in `a`. Each value in\n `a` contributes to the average according to its associated weight.\n The weights array can either be 1-D (in which case its length must be\n the size of `a` along the given axis) or of the same shape as `a`.\n If `weights=None`, then all data in `a` are assumed to have a\n weight equal to one.\n returned : bool, optional\n Default is `False`. If `True`, the tuple (`average`, `sum_of_weights`)\n is returned, otherwise only the average is returned.\n If `weights=None`, `sum_of_weights` is equivalent to the number of\n elements over which the average is taken.\n\n\n Returns\n -------\n average, [sum_of_weights] : {array_type, double}\n Return the average along the specified axis. When returned is `True`,\n return a tuple with the average as the first element and the sum\n of the weights as the second element. The return type is `Float`\n if `a` is of integer type, otherwise it is of the same type as `a`.\n `sum_of_weights` is of the same type as `average`.\n\n Raises\n ------\n ZeroDivisionError\n When all weights along axis are zero. See `numpy.ma.average` for a\n version robust to this type of error.\n TypeError\n When the length of 1D `weights` is not the same as the shape of `a`\n along axis.\n\n See Also\n --------\n mean\n\n ma.average : average for masked arrays\n\n Examples\n --------\n >>> data = range(1,5)\n >>> data\n [1, 2, 3, 4""]\n >>> np.average(data)\n 2.5\n >>> np.average(range(1,11), weights=range(10,0,-1))\n 4.0\n\n >>> data = np.arange(6).reshape((3,2))\n >>> data\n array([[0, 1],\n [2, 3],\n [4, 5]])\n >>> np.average(data, axis=1, weights=[1./4, 3./4])\n array([ 0.75, 2.75, 4.75])\n >>> np.average(data, weights=[1./4, 3./4])\n Traceback (most recent call last):\n ...\n TypeError: Axis must be specified when shapes of a and weights differ.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_71average = {__Pyx_NAMESTR("average"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_71average, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_70average)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_71average(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_weights = 0; CYTHON_UNUSED PyObject *__pyx_v_returned = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("average (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__weights,&__pyx_n_s__returned,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":1529 * * * def average(a, axis=None, weights=None, returned=False): # <<<<<<<<<<<<<< * """Compute the weighted average along the specified axis. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = __pyx_k_9; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__weights); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__returned); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "average") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1529; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_weights = values[2]; __pyx_v_returned = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("average", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1529; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.average", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_70average(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_weights, __pyx_v_returned); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_70average(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_weights, CYTHON_UNUSED PyObject *__pyx_v_returned) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("average", 0); /* "ga4py/gain/notimplemented.pyx":1601 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1601; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.average", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_73bartlett(PyObject *__pyx_self, PyObject *__pyx_v_M); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_72bartlett[] = "Return the Bartlett window.\n\n The Bartlett window is very similar to a triangular window, except\n that the end points are at zero. It is often used in signal\n processing for tapering a signal, without generating too much\n ripple in the frequency domain.\n\n Parameters\n ----------\n M : int\n Number of points in the output window. If zero or less, an\n empty array is returned.\n\n Returns\n -------\n out : array\n The triangular window, normalized to one (the value one\n appears only if the number of samples is odd), with the first\n and last samples equal to zero.\n\n See Also\n --------\n blackman, hamming, hanning, kaiser\n\n Notes\n -----\n The Bartlett window is defined as\n\n .. math:: w(n) = \014rac{2}{M-1} \\left(\n \014rac{M-1}{2} - \\left|n - \014rac{M-1}{2}\right|\n \right)\n\n Most references to the Bartlett window come from the signal\n processing literature, where it is used as one of many windowing\n functions for smoothing values. Note that convolution with this\n window produces linear interpolation. It is also known as an\n apodization (which means\"removing the foot\", i.e. smoothing\n discontinuities at the beginning and end of the sampled signal) or\n tapering function. The fourier transform of the Bartlett is the product\n of two sinc functions.\n Note the excellent discussion in Kanasewich.\n\n References\n ----------\n .. [1] M.S. Bartlett, \"Periodogram Analysis and Continuous Spectra\",\n Biometrika 37, 1-16, 1950.\n .. [2] E.R. Kanasewich, \"Time Sequence Analysis in Geophysics\",\n The University of Alberta Press, 1975, pp. 109-110.\n .. [3] A.V. Oppenheim and R.W. Schafer, \"Discrete-Time Signal\n Processing\", Prentice-Hall, 1999, pp. 468-471.\n .. [4] Wikipedia, \"Window function\",\n http://en.wikipedia.org/wiki/Window_function\n "".. [5] W.H. Press, B.P. Flannery, S.A. Teukolsky, and W.T. Vetterling,\n \"Numerical Recipes\", Cambridge University Press, 1986, page 429.\n\n\n Examples\n --------\n >>> np.bartlett(12)\n array([ 0. , 0.18181818, 0.36363636, 0.54545455, 0.72727273,\n 0.90909091, 0.90909091, 0.72727273, 0.54545455, 0.36363636,\n 0.18181818, 0. ])\n\n Plot the window and its frequency response (requires SciPy and matplotlib):\n\n >>> from numpy import clip, log10, array, bartlett, linspace\n >>> from numpy.fft import fft, fftshift\n >>> import matplotlib.pyplot as plt\n\n >>> window = bartlett(51)\n >>> plt.plot(window)\n []\n >>> plt.title(\"Bartlett window\")\n \n >>> plt.ylabel(\"Amplitude\")\n \n >>> plt.xlabel(\"Sample\")\n \n >>> plt.show()\n\n >>> plt.figure()\n \n >>> A = fft(window, 2048) / 25.5\n >>> mag = abs(fftshift(A))\n >>> freq = linspace(-0.5,0.5,len(A))\n >>> response = 20*log10(mag)\n >>> response = clip(response,-100,100)\n >>> plt.plot(freq, response)\n []\n >>> plt.title(\"Frequency response of Bartlett window\")\n \n >>> plt.ylabel(\"Magnitude [dB]\")\n \n >>> plt.xlabel(\"Normalized frequency [cycles per sample]\")\n \n >>> plt.axis('tight')\n (-0.5, 0.5, -100.0, ...)\n >>> plt.show()\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_73bartlett = {__Pyx_NAMESTR("bartlett"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_73bartlett, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_72bartlett)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_73bartlett(PyObject *__pyx_self, PyObject *__pyx_v_M) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("bartlett (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_72bartlett(__pyx_self, ((PyObject *)__pyx_v_M)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":1604 * * * def bartlett(M): # <<<<<<<<<<<<<< * """Return the Bartlett window. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_72bartlett(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_M) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("bartlett", 0); /* "ga4py/gain/notimplemented.pyx":1705 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1705; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.bartlett", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_75base_repr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_74base_repr[] = "Return a string representation of a number in the given base system.\n\n Parameters\n ----------\n number : int\n The value to convert. Only positive values are handled.\n base : int, optional\n Convert `number` to the `base` number system. The valid range is 2-36,\n the default value is 2.\n padding : int, optional\n Number of zeros padded on the left. Default is 0 (no padding).\n\n Returns\n -------\n out : str\n String representation of `number` in `base` system.\n\n See Also\n --------\n binary_repr : Faster version of `base_repr` for base 2.\n\n Examples\n --------\n >>> np.base_repr(5)\n '101'\n >>> np.base_repr(6, 5)\n '11'\n >>> np.base_repr(7, base=5, padding=3)\n '00012'\n\n >>> np.base_repr(10, base=16)\n 'A'\n >>> np.base_repr(32, base=16)\n '20'\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_75base_repr = {__Pyx_NAMESTR("base_repr"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_75base_repr, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_74base_repr)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_75base_repr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_number = 0; CYTHON_UNUSED PyObject *__pyx_v_base = 0; CYTHON_UNUSED PyObject *__pyx_v_padding = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("base_repr (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__number,&__pyx_n_s__base,&__pyx_n_s__padding,0}; PyObject* values[3] = {0,0,0}; values[1] = ((PyObject *)__pyx_int_2); values[2] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__number)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__base); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__padding); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "base_repr") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1708; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_number = values[0]; __pyx_v_base = values[1]; __pyx_v_padding = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("base_repr", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1708; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.base_repr", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_74base_repr(__pyx_self, __pyx_v_number, __pyx_v_base, __pyx_v_padding); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":1708 * * * def base_repr(number, base=2, padding=0): # <<<<<<<<<<<<<< * """Return a string representation of a number in the given base system. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_74base_repr(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_number, CYTHON_UNUSED PyObject *__pyx_v_base, CYTHON_UNUSED PyObject *__pyx_v_padding) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("base_repr", 0); /* "ga4py/gain/notimplemented.pyx":1745 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1745; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.base_repr", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_77binary_repr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_76binary_repr[] = "Return the binary representation of the input number as a string.\n\n For negative numbers, if width is not given, a minus sign is added to the\n front. If width is given, the two's complement of the number is\n returned, with respect to that width.\n\n In a two's-complement system negative numbers are represented by the two's\n complement of the absolute value. This is the most common method of\n representing signed integers on computers [1]_. A N-bit two's-complement\n system can represent every integer in the range\n :math:`-2^{N-1}` to :math:`+2^{N-1}-1`.\n\n Parameters\n ----------\n num : int\n Only an integer decimal number can be used.\n width : int, optional\n The length of the returned string if `num` is positive, the length of\n the two's complement if `num` is negative.\n\n Returns\n -------\n bin : str\n Binary representation of `num` or two's complement of `num`.\n\n See Also\n --------\n base_repr: Return a string representation of a number in the given base\n system.\n\n Notes\n -----\n `binary_repr` is equivalent to using `base_repr` with base 2, but about 25x\n faster.\n\n References\n ----------\n .. [1] Wikipedia, \"Two's complement\",\n http://en.wikipedia.org/wiki/Two's_complement\n\n Examples\n --------\n >>> np.binary_repr(3)\n '11'\n >>> np.binary_repr(-3)\n '-11'\n >>> np.binary_repr(3, width=4)\n '0011'\n\n The two's complement is returned when the input number is negative and\n width is specified:\n\n >>> np.binary_repr(-3, width=4)\n '1101'\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_77binary_repr = {__Pyx_NAMESTR("binary_repr"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_77binary_repr, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_76binary_repr)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_77binary_repr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_num = 0; CYTHON_UNUSED PyObject *__pyx_v_width = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("binary_repr (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__num,&__pyx_n_s__width,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":1748 * * * def binary_repr(num, width=None): # <<<<<<<<<<<<<< * """Return the binary representation of the input number as a string. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__num)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__width); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "binary_repr") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1748; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_num = values[0]; __pyx_v_width = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("binary_repr", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1748; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.binary_repr", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_76binary_repr(__pyx_self, __pyx_v_num, __pyx_v_width); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_76binary_repr(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_num, CYTHON_UNUSED PyObject *__pyx_v_width) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("binary_repr", 0); /* "ga4py/gain/notimplemented.pyx":1805 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1805; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.binary_repr", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_79bincount(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_78bincount[] = "bincount(x, weights=None, minlength=None)\n\n Count number of occurrences of each value in array of non-negative ints.\n\n The number of bins (of size 1) is one larger than the largest value in\n `x`. If `minlength` is specified, there will be at least this number\n of bins in the output array (though it will be longer if necessary,\n depending on the contents of `x`).\n Each bin gives the number of occurrences of its index value in `x`.\n If `weights` is specified the input array is weighted by it, i.e. if a\n value ``n`` is found at position ``i``, ``out[n] += weight[i]`` instead\n of ``out[n] += 1``.\n\n Parameters\n ----------\n x : array_like, 1 dimension, nonnegative ints\n Input array.\n weights : array_like, optional\n Weights, array of the same shape as `x`.\n minlength : int, optional\n .. versionadded:: 1.6.0\n\n A minimum number of bins for the output array.\n\n Returns\n -------\n out : ndarray of ints\n The result of binning the input array.\n The length of `out` is equal to ``np.amax(x)+1``.\n\n Raises\n ------\n ValueError\n If the input is not 1-dimensional, or contains elements with negative\n values, or if `minlength` is non-positive.\n TypeError\n If the type of the input is float or complex.\n\n See Also\n --------\n histogram, digitize, unique\n\n Examples\n --------\n >>> np.bincount(np.arange(5))\n array([1, 1, 1, 1, 1])\n >>> np.bincount(np.array([0, 1, 1, 3, 2, 1, 7]))\n array([1, 3, 1, 1, 0, 0, 0, 1])\n\n >>> x = np.array([0, 1, 1, 3, 2, 1, 7, 23])\n >>> np.bincount(x).size == np.amax(x)+1\n True\n\n The input array needs to be of integer dtype, otherwise a\n TypeError is raised:\n\n >>> np.bincount(np.arange(5, dtype=np.float))\n Traceback (most recent call last):\n File \"\", line 1, in \n TypeError: array cannot be safely cast to required type""\n\n A possible use of ``bincount`` is to perform sums over\n variable-size chunks of an array, using the ``weights`` keyword.\n\n >>> w = np.array([0.3, 0.5, 0.2, 0.7, 1., -0.6]) # weights\n >>> x = np.array([0, 1, 1, 2, 2, 2])\n >>> np.bincount(x, weights=w)\n array([ 0.3, 0.7, 1.1])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_79bincount = {__Pyx_NAMESTR("bincount"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_79bincount, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_78bincount)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_79bincount(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_x = 0; CYTHON_UNUSED PyObject *__pyx_v_weights = 0; CYTHON_UNUSED PyObject *__pyx_v_minlength = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("bincount (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__weights,&__pyx_n_s__minlength,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":1808 * * * def bincount(x, weights=None, minlength=None): # <<<<<<<<<<<<<< * """bincount(x, weights=None, minlength=None) * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__weights); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__minlength); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bincount") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1808; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_x = values[0]; __pyx_v_weights = values[1]; __pyx_v_minlength = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("bincount", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1808; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.bincount", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_78bincount(__pyx_self, __pyx_v_x, __pyx_v_weights, __pyx_v_minlength); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_78bincount(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_weights, CYTHON_UNUSED PyObject *__pyx_v_minlength) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("bincount", 0); /* "ga4py/gain/notimplemented.pyx":1880 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1880; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.bincount", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_81blackman(PyObject *__pyx_self, PyObject *__pyx_v_M); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_80blackman[] = "Return the Blackman window.\n\n The Blackman window is a taper formed by using the the first three\n terms of a summation of cosines. It was designed to have close to the\n minimal leakage possible. It is close to optimal, only slightly worse\n than a Kaiser window.\n\n Parameters\n ----------\n M : int\n Number of points in the output window. If zero or less, an empty\n array is returned.\n\n Returns\n -------\n out : ndarray\n The window, normalized to one (the value one appears only if the\n number of samples is odd).\n\n See Also\n --------\n bartlett, hamming, hanning, kaiser\n\n Notes\n -----\n The Blackman window is defined as\n\n .. math:: w(n) = 0.42 - 0.5 \\cos(2\\pi n/M) + 0.08 \\cos(4\\pi n/M)\n\n Most references to the Blackman window come from the signal processing\n literature, where it is used as one of many windowing functions for\n smoothing values. It is also known as an apodization (which means\n \"removing the foot\", i.e. smoothing discontinuities at the beginning\n and end of the sampled signal) or tapering function. It is known as a\n \"near optimal\" tapering function, almost as good (by some measures)\n as the kaiser window.\n\n References\n ----------\n Blackman, R.B. and Tukey, J.W., (1958) The measurement of power spectra,\n Dover Publications, New York.\n\n Oppenheim, A.V., and R.W. Schafer. Discrete-Time Signal Processing.\n Upper Saddle River, NJ: Prentice-Hall, 1999, pp. 468-471.\n\n Examples\n --------\n >>> from numpy import blackman\n >>> blackman(12)\n array([ -1.38777878e-17, 3.26064346e-02, 1.59903635e-01,\n 4.14397981e-01, 7.36045180e-01, 9.67046769e-01,\n 9.67046769e-01, 7.36045180e-01, 4.14397981e-01,\n 1.59903635e-01, 3.26064346e-02, -1.38777878e-17])\n\n\n Plot the window and the frequency response:\n\n >>> from numpy import clip, lo""g10, array, blackman, linspace\n >>> from numpy.fft import fft, fftshift\n >>> import matplotlib.pyplot as plt\n\n >>> window = blackman(51)\n >>> plt.plot(window)\n []\n >>> plt.title(\"Blackman window\")\n \n >>> plt.ylabel(\"Amplitude\")\n \n >>> plt.xlabel(\"Sample\")\n \n >>> plt.show()\n\n >>> plt.figure()\n \n >>> A = fft(window, 2048) / 25.5\n >>> mag = abs(fftshift(A))\n >>> freq = linspace(-0.5,0.5,len(A))\n >>> response = 20*log10(mag)\n >>> response = clip(response,-100,100)\n >>> plt.plot(freq, response)\n []\n >>> plt.title(\"Frequency response of Blackman window\")\n \n >>> plt.ylabel(\"Magnitude [dB]\")\n \n >>> plt.xlabel(\"Normalized frequency [cycles per sample]\")\n \n >>> plt.axis('tight')\n (-0.5, 0.5, -100.0, ...)\n >>> plt.show()\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_81blackman = {__Pyx_NAMESTR("blackman"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_81blackman, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_80blackman)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_81blackman(PyObject *__pyx_self, PyObject *__pyx_v_M) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("blackman (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_80blackman(__pyx_self, ((PyObject *)__pyx_v_M)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":1883 * * * def blackman(M): # <<<<<<<<<<<<<< * """Return the Blackman window. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_80blackman(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_M) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("blackman", 0); /* "ga4py/gain/notimplemented.pyx":1976 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.blackman", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_83bmat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_82bmat[] = "Build a matrix object from a string, nested sequence, or array.\n\n Parameters\n ----------\n obj : str or array_like\n Input data. Names of variables in the current scope may be\n referenced, even if `obj` is a string.\n\n Returns\n -------\n out : matrix\n Returns a matrix object, which is a specialized 2-D array.\n\n See Also\n --------\n matrix\n\n Examples\n --------\n >>> A = np.mat('1 1; 1 1')\n >>> B = np.mat('2 2; 2 2')\n >>> C = np.mat('3 4; 5 6')\n >>> D = np.mat('7 8; 9 0')\n\n All the following expressions construct the same block matrix:\n\n >>> np.bmat([[A, B], [C, D]])\n matrix([[1, 1, 2, 2],\n [1, 1, 2, 2],\n [3, 4, 7, 8],\n [5, 6, 9, 0]])\n >>> np.bmat(np.r_[np.c_[A, B], np.c_[C, D]])\n matrix([[1, 1, 2, 2],\n [1, 1, 2, 2],\n [3, 4, 7, 8],\n [5, 6, 9, 0]])\n >>> np.bmat('A,B; C,D')\n matrix([[1, 1, 2, 2],\n [1, 1, 2, 2],\n [3, 4, 7, 8],\n [5, 6, 9, 0]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_83bmat = {__Pyx_NAMESTR("bmat"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_83bmat, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_82bmat)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_83bmat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_obj = 0; CYTHON_UNUSED PyObject *__pyx_v_ldict = 0; CYTHON_UNUSED PyObject *__pyx_v_gdict = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("bmat (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__obj,&__pyx_n_s__ldict,&__pyx_n_s__gdict,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":1979 * * * def bmat(obj, ldict=None, gdict=None): # <<<<<<<<<<<<<< * """Build a matrix object from a string, nested sequence, or array. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ldict); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__gdict); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bmat") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_obj = values[0]; __pyx_v_ldict = values[1]; __pyx_v_gdict = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("bmat", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.bmat", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_82bmat(__pyx_self, __pyx_v_obj, __pyx_v_ldict, __pyx_v_gdict); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_82bmat(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_ldict, CYTHON_UNUSED PyObject *__pyx_v_gdict) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("bmat", 0); /* "ga4py/gain/notimplemented.pyx":2023 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2023; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.bmat", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_85broadcast_arrays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_84broadcast_arrays[] = "Broadcast any number of arrays against each other.\n\n Parameters\n ----------\n `*args` : array_likes\n The arrays to broadcast.\n\n Returns\n -------\n broadcasted : list of arrays\n These arrays are views on the original arrays. They are typically\n not contiguous. Furthermore, more than one element of a\n broadcasted array may refer to a single memory location. If you\n need to write to the arrays, make copies first.\n\n Examples\n --------\n >>> x = np.array([[1,2,3]])\n >>> y = np.array([[1],[2],[3]])\n >>> np.broadcast_arrays(x, y)\n [array([[1, 2, 3],\n [1, 2, 3],\n [1, 2, 3]]), array([[1, 1, 1],\n [2, 2, 2],\n [3, 3, 3]])]\n\n Here is a useful idiom for getting contiguous copies instead of\n non-contiguous views.\n\n >>> map(np.array, np.broadcast_arrays(x, y))\n [array([[1, 2, 3],\n [1, 2, 3],\n [1, 2, 3]]), array([[1, 1, 1],\n [2, 2, 2],\n [3, 3, 3]])]\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_85broadcast_arrays = {__Pyx_NAMESTR("broadcast_arrays"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_85broadcast_arrays, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_84broadcast_arrays)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_85broadcast_arrays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("broadcast_arrays (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_84broadcast_arrays(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":2026 * * * def broadcast_arrays(): # <<<<<<<<<<<<<< * """Broadcast any number of arrays against each other. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_84broadcast_arrays(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("broadcast_arrays", 0); /* "ga4py/gain/notimplemented.pyx":2064 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.broadcast_arrays", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_87byte_bounds(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_86byte_bounds[] = "Returns pointers to the end-points of an array.\n\n Parameters\n ----------\n a : ndarray\n Input array. It must conform to the Python-side of the array interface.\n\n Returns\n -------\n (low, high) : tuple of 2 integers\n The first integer is the first byte of the array, the second integer is\n just past the last byte of the array. If `a` is not contiguous it\n will not use every byte between the (`low`, `high`) values.\n\n Examples\n --------\n >>> I = np.eye(2, dtype='f'); I.dtype\n dtype('float32')\n >>> low, high = np.byte_bounds(I)\n >>> high - low == I.size*I.itemsize\n True\n >>> I = np.eye(2, dtype='G'); I.dtype\n dtype('complex192')\n >>> low, high = np.byte_bounds(I)\n >>> high - low == I.size*I.itemsize\n True\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_87byte_bounds = {__Pyx_NAMESTR("byte_bounds"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_87byte_bounds, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_86byte_bounds)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_87byte_bounds(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("byte_bounds (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_86byte_bounds(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":2067 * * * def byte_bounds(a): # <<<<<<<<<<<<<< * """Returns pointers to the end-points of an array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_86byte_bounds(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("byte_bounds", 0); /* "ga4py/gain/notimplemented.pyx":2096 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2096; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.byte_bounds", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_89can_cast(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_88can_cast[] = "can_cast(from, totype, casting = 'safe')\n\n Returns True if cast between data types can occur according to the\n casting rule. If from is a scalar or array scalar, also returns\n True if the scalar value can be cast without overflow or truncation\n to an integer.\n\n Parameters\n ----------\n from : dtype, dtype specifier, scalar, or array\n Data type, scalar, or array to cast from.\n totype : dtype or dtype specifier\n Data type to cast to.\n casting : {'no', 'equiv', 'safe', 'same_kind', 'unsafe'}, optional\n Controls what kind of data casting may occur.\n\n * 'no' means the data types should not be cast at all.\n * 'equiv' means only byte-order changes are allowed.\n * 'safe' means only casts which can preserve values are allowed.\n * 'same_kind' means only safe casts or casts within a kind,\n like float64 to float32, are allowed.\n * 'unsafe' means any data conversions may be done.\n\n Returns\n -------\n out : bool\n True if cast can occur according to the casting rule.\n\n See also\n --------\n dtype, result_type\n\n Examples\n --------\n\n Basic examples\n\n >>> np.can_cast(np.int32, np.int64)\n True\n >>> np.can_cast(np.float64, np.complex)\n True\n >>> np.can_cast(np.complex, np.float)\n False\n\n >>> np.can_cast('i8', 'f8')\n True\n >>> np.can_cast('i8', 'f4')\n False\n >>> np.can_cast('i4', 'S4')\n True\n\n Casting scalars\n\n >>> np.can_cast(100, 'i1')\n True\n >>> np.can_cast(150, 'i1')\n False\n >>> np.can_cast(150, 'u1')\n True\n\n >>> np.can_cast(3.5e100, np.float32)\n False\n >>> np.can_cast(1000.0, np.float32)\n True\n\n Array scalar checks the value, array does not\n\n >>> np.can_cast(np.array(1000.0), np.float32)\n True\n >>> np.can_cast(np.array([1000.0]), np.float32)\n False\n\n Using the casting rules\n\n >>> np.can_c""ast('i8', 'i8', 'no')\n True\n >>> np.can_cast('i8', 'no')\n False\n\n >>> np.can_cast('i8', 'equiv')\n True\n >>> np.can_cast('i8', 'equiv')\n False\n\n >>> np.can_cast('i8', 'safe')\n True\n >>> np.can_cast('i4', 'safe')\n False\n\n >>> np.can_cast('i4', 'same_kind')\n True\n >>> np.can_cast('u4', 'same_kind')\n False\n\n >>> np.can_cast('u4', 'unsafe')\n True\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_89can_cast = {__Pyx_NAMESTR("can_cast"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_89can_cast, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_88can_cast)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_89can_cast(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("can_cast (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_88can_cast(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":2099 * * * def can_cast(): # <<<<<<<<<<<<<< * """can_cast(from, totype, casting = 'safe') * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_88can_cast(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("can_cast", 0); /* "ga4py/gain/notimplemented.pyx":2199 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.can_cast", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_91choose(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_90choose[] = "Construct an array from an index array and a set of arrays to choose from.\n\n First of all, if confused or uncertain, definitely look at the Examples -\n in its full generality, this function is less simple than it might\n seem from the following code description (below ndi =\n `numpy.lib.index_tricks`):\n\n ``np.choose(a,c) == np.array([c[a[I]][I] for I in ndi.ndindex(a.shape)])``.\n\n But this omits some subtleties. Here is a fully general summary:\n\n Given an \"index\" array (`a`) of integers and a sequence of `n` arrays\n (`choices`), `a` and each choice array are first broadcast, as necessary,\n to arrays of a common shape; calling these *Ba* and *Bchoices[i], i =\n 0,...,n-1* we have that, necessarily, ``Ba.shape == Bchoices[i].shape``\n for each `i`. Then, a new array with shape ``Ba.shape`` is created as\n follows:\n\n * if ``mode=raise`` (the default), then, first of all, each element of\n `a` (and thus `Ba`) must be in the range `[0, n-1]`; now, suppose that\n `i` (in that range) is the value at the `(j0, j1, ..., jm)` position\n in `Ba` - then the value at the same position in the new array is the\n value in `Bchoices[i]` at that same position;\n\n * if ``mode=wrap``, values in `a` (and thus `Ba`) may be any (signed)\n integer; modular arithmetic is used to map integers outside the range\n `[0, n-1]` back into that range; and then the new array is constructed\n as above;\n\n * if ``mode=clip``, values in `a` (and thus `Ba`) may be any (signed)\n integer; negative integers are mapped to 0; values greater than `n-1`\n are mapped to `n-1`; and then the new array is constructed as above.\n\n Parameters\n ----------\n a : int array\n This array must contain integers in `[0, n-1]`, where `n` is the number\n of choices, unless ``mode=wrap`` or ``mode=clip``, in which cases any\n integers are permissible.\n choices : sequence of arrays""\n Choice arrays. `a` and all of the choices must be broadcastable to the\n same shape. If `choices` is itself an array (not recommended), then\n its outermost dimension (i.e., the one corresponding to\n ``choices.shape[0]``) is taken as defining the \"sequence\".\n out : array, optional\n If provided, the result will be inserted into this array. It should\n be of the appropriate shape and dtype.\n mode : {'raise' (default), 'wrap', 'clip'}, optional\n Specifies how indices outside `[0, n-1]` will be treated:\n\n * 'raise' : an exception is raised\n * 'wrap' : value becomes value mod `n`\n * 'clip' : values < 0 are mapped to 0, values > n-1 are mapped to n-1\n\n Returns\n -------\n merged_array : array\n The merged result.\n\n Raises\n ------\n ValueError: shape mismatch\n If `a` and each choice array are not all broadcastable to the same\n shape.\n\n See Also\n --------\n ndarray.choose : equivalent method\n\n Notes\n -----\n To reduce the chance of misinterpretation, even though the following\n \"abuse\" is nominally supported, `choices` should neither be, nor be\n thought of as, a single array, i.e., the outermost sequence-like container\n should be either a list or a tuple.\n\n Examples\n --------\n\n >>> choices = [[0, 1, 2, 3], [10, 11, 12, 13],\n ... [20, 21, 22, 23], [30, 31, 32, 33]]\n >>> np.choose([2, 3, 1, 0], choices\n ... # the first element of the result will be the first element of the\n ... # third (2+1) \"array\" in choices, namely, 20; the second element\n ... # will be the second element of the fourth (3+1) choice array, i.e.,\n ... # 31, etc.\n ... )\n array([20, 31, 12, 3])\n >>> np.choose([2, 4, 1, 0], choices, mode='clip') # 4 goes to 3 (4-1)\n array([20, 31, 12, 3])\n >>> # because there are 4 choice arrays\n >>> np.choose([2, 4, 1, 0], choices, m""ode='wrap') # 4 goes to (4 mod 4)\n array([20, 1, 12, 3])\n >>> # i.e., 0\n\n A couple examples illustrating how choose broadcasts:\n\n >>> a = [[1, 0, 1], [0, 1, 0], [1, 0, 1]]\n >>> choices = [-10, 10]\n >>> np.choose(a, choices)\n array([[ 10, -10, 10],\n [-10, 10, -10],\n [ 10, -10, 10]])\n\n >>> # With thanks to Anne Archibald\n >>> a = np.array([0, 1]).reshape((2,1,1))\n >>> c1 = np.array([1, 2, 3]).reshape((1,3,1))\n >>> c2 = np.array([-1, -2, -3, -4, -5]).reshape((1,1,5))\n >>> np.choose(a, (c1, c2)) # result is 2x3x5, res[0,:,:]=c1, res[1,:,:]=c2\n array([[[ 1, 1, 1, 1, 1],\n [ 2, 2, 2, 2, 2],\n [ 3, 3, 3, 3, 3]],\n [[-1, -2, -3, -4, -5],\n [-1, -2, -3, -4, -5],\n [-1, -2, -3, -4, -5]]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_91choose = {__Pyx_NAMESTR("choose"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_91choose, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_90choose)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_91choose(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_choices = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; CYTHON_UNUSED PyObject *__pyx_v_mode = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("choose (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__choices,&__pyx_n_s__out,&__pyx_n_s__mode,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":2202 * * * def choose(a, choices, out=None, mode='raise'): # <<<<<<<<<<<<<< * """Construct an array from an index array and a set of arrays to choose from. * */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)__pyx_n_s__raise); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__choices)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("choose", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2202; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "choose") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2202; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_choices = values[1]; __pyx_v_out = values[2]; __pyx_v_mode = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("choose", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2202; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.choose", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_90choose(__pyx_self, __pyx_v_a, __pyx_v_choices, __pyx_v_out, __pyx_v_mode); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_90choose(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_choices, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_mode) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("choose", 0); /* "ga4py/gain/notimplemented.pyx":2320 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2320; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.choose", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_93column_stack(PyObject *__pyx_self, PyObject *__pyx_v_tup); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_92column_stack[] = "Stack 1-D arrays as columns into a 2-D array.\n\n Take a sequence of 1-D arrays and stack them as columns\n to make a single 2-D array. 2-D arrays are stacked as-is,\n just like with `hstack`. 1-D arrays are turned into 2-D columns\n first.\n\n Parameters\n ----------\n tup : sequence of 1-D or 2-D arrays.\n Arrays to stack. All of them must have the same first dimension.\n\n Returns\n -------\n stacked : 2-D array\n The array formed by stacking the given arrays.\n\n See Also\n --------\n hstack, vstack, concatenate\n\n Notes\n -----\n This function is equivalent to ``np.vstack(tup).T``.\n\n Examples\n --------\n >>> a = np.array((1,2,3))\n >>> b = np.array((2,3,4))\n >>> np.column_stack((a,b))\n array([[1, 2],\n [2, 3],\n [3, 4]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_93column_stack = {__Pyx_NAMESTR("column_stack"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_93column_stack, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_92column_stack)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_93column_stack(PyObject *__pyx_self, PyObject *__pyx_v_tup) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("column_stack (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_92column_stack(__pyx_self, ((PyObject *)__pyx_v_tup)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":2323 * * * def column_stack(tup): # <<<<<<<<<<<<<< * """Stack 1-D arrays as columns into a 2-D array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_92column_stack(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_tup) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("column_stack", 0); /* "ga4py/gain/notimplemented.pyx":2359 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.column_stack", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_95common_type(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_94common_type[] = "Return a scalar type which is common to the input arrays.\n\n The return type will always be an inexact (i.e. floating point) scalar\n type, even if all the arrays are integer arrays. If one of the inputs is\n an integer array, the minimum precision type that is returned is a\n 64-bit floating point dtype.\n\n All input arrays can be safely cast to the returned dtype without loss\n of information.\n\n Parameters\n ----------\n array1, array2, ... : ndarrays\n Input arrays.\n\n Returns\n -------\n out : data type code\n Data type code.\n\n See Also\n --------\n dtype, mintypecode\n\n Examples\n --------\n >>> np.common_type(np.arange(2, dtype=np.float32))\n \n >>> np.common_type(np.arange(2, dtype=np.float32), np.arange(2))\n \n >>> np.common_type(np.arange(4), np.array([45, 6.j]), np.array([45.0]))\n \n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_95common_type = {__Pyx_NAMESTR("common_type"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_95common_type, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_94common_type)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_95common_type(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("common_type (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_94common_type(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":2362 * * * def common_type(): # <<<<<<<<<<<<<< * """Return a scalar type which is common to the input arrays. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_94common_type(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("common_type", 0); /* "ga4py/gain/notimplemented.pyx":2397 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2397; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.common_type", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_97compare_chararrays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_96compare_chararrays[] = "\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_97compare_chararrays = {__Pyx_NAMESTR("compare_chararrays"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_97compare_chararrays, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_96compare_chararrays)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_97compare_chararrays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("compare_chararrays (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_96compare_chararrays(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":2400 * * * def compare_chararrays(): # <<<<<<<<<<<<<< * """ * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_96compare_chararrays(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("compare_chararrays", 0); /* "ga4py/gain/notimplemented.pyx":2405 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.compare_chararrays", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_99compress(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_98compress[] = "Return selected slices of an array along given axis.\n\n When working along a given axis, a slice along that axis is returned in\n `output` for each index where `condition` evaluates to True. When\n working on a 1-D array, `compress` is equivalent to `extract`.\n\n Parameters\n ----------\n condition : 1-D array of bools\n Array that selects which entries to return. If len(condition)\n is less than the size of `a` along the given axis, then output is\n truncated to the length of the condition array.\n a : array_like\n Array from which to extract a part.\n axis : int, optional\n Axis along which to take slices. If None (default), work on the\n flattened array.\n out : ndarray, optional\n Output array. Its type is preserved and it must be of the right\n shape to hold the output.\n\n Returns\n -------\n compressed_array : ndarray\n A copy of `a` without the slices along axis for which `condition`\n is false.\n\n See Also\n --------\n take, choose, diag, diagonal, select\n ndarray.compress : Equivalent method.\n numpy.doc.ufuncs : Section \"Output arguments\"\n\n Examples\n --------\n >>> a = np.array([[1, 2], [3, 4], [5, 6]])\n >>> a\n array([[1, 2],\n [3, 4],\n [5, 6]])\n >>> np.compress([0, 1], a, axis=0)\n array([[3, 4]])\n >>> np.compress([False, True, True], a, axis=0)\n array([[3, 4],\n [5, 6]])\n >>> np.compress([False, True], a, axis=1)\n array([[2],\n [4],\n [6]])\n\n Working on the flattened array does not return slices along an axis but\n selects elements.\n\n >>> np.compress([False, True], a)\n array([2])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_99compress = {__Pyx_NAMESTR("compress"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_99compress, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_98compress)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_99compress(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_condition = 0; CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("compress (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__condition,&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":2408 * * * def compress(condition, a, axis=None, out=None): # <<<<<<<<<<<<<< * """Return selected slices of an array along given axis. * */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__condition)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("compress", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2408; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "compress") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2408; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_condition = values[0]; __pyx_v_a = values[1]; __pyx_v_axis = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("compress", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2408; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.compress", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_98compress(__pyx_self, __pyx_v_condition, __pyx_v_a, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_98compress(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_condition, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("compress", 0); /* "ga4py/gain/notimplemented.pyx":2466 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.compress", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_101concatenate(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_100concatenate[] = "concatenate((a1, a2, ...), axis=0)\n\n Join a sequence of arrays together.\n\n Parameters\n ----------\n a1, a2, ... : sequence of array_like\n The arrays must have the same shape, except in the dimension\n corresponding to `axis` (the first, by default).\n axis : int, optional\n The axis along which the arrays will be joined. Default is 0.\n\n Returns\n -------\n res : ndarray\n The concatenated array.\n\n See Also\n --------\n ma.concatenate : Concatenate function that preserves input masks.\n array_split : Split an array into multiple sub-arrays of equal or\n near-equal size.\n split : Split array into a list of multiple sub-arrays of equal size.\n hsplit : Split array into multiple sub-arrays horizontally (column wise)\n vsplit : Split array into multiple sub-arrays vertically (row wise)\n dsplit : Split array into multiple sub-arrays along the 3rd axis (depth).\n hstack : Stack arrays in sequence horizontally (column wise)\n vstack : Stack arrays in sequence vertically (row wise)\n dstack : Stack arrays in sequence depth wise (along third dimension)\n\n Notes\n -----\n When one or more of the arrays to be concatenated is a MaskedArray,\n this function will return a MaskedArray object instead of an ndarray,\n but the input masks are *not* preserved. In cases where a MaskedArray\n is expected as input, use the ma.concatenate function from the masked\n array module instead.\n\n Examples\n --------\n >>> a = np.array([[1, 2], [3, 4]])\n >>> b = np.array([[5, 6]])\n >>> np.concatenate((a, b), axis=0)\n array([[1, 2],\n [3, 4],\n [5, 6]])\n >>> np.concatenate((a, b.T), axis=1)\n array([[1, 2, 5],\n [3, 4, 6]])\n\n This function will not preserve masking of MaskedArray inputs.\n\n >>> a = np.ma.arange(3)\n >>> a[1] = np.ma.masked\n >>> b = np.arange(2, 5)\n >>> a\n masked_arr""ay(data = [0 -- 2],\n mask = [False True False],\n fill_value = 999999)\n >>> b\n array([2, 3, 4])\n >>> np.concatenate([a, b])\n masked_array(data = [0 1 2 2 3 4],\n mask = False,\n fill_value = 999999)\n >>> np.ma.concatenate([a, b])\n masked_array(data = [0 -- 2 2 3 4],\n mask = [False True False False False False],\n fill_value = 999999)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_101concatenate = {__Pyx_NAMESTR("concatenate"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_101concatenate, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_100concatenate)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_101concatenate(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("concatenate (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_100concatenate(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":2469 * * * def concatenate(): # <<<<<<<<<<<<<< * """concatenate((a1, a2, ...), axis=0) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_100concatenate(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("concatenate", 0); /* "ga4py/gain/notimplemented.pyx":2542 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.concatenate", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_103convolve(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_102convolve[] = "Returns the discrete, linear convolution of two one-dimensional sequences.\n\n The convolution operator is often seen in signal processing, where it\n models the effect of a linear time-invariant system on a signal [1]_. In\n probability theory, the sum of two independent random variables is\n distributed according to the convolution of their individual\n distributions.\n\n Parameters\n ----------\n a : (N,) array_like\n First one-dimensional input array.\n v : (M,) array_like\n Second one-dimensional input array.\n mode : {'full', 'valid', 'same'}, optional\n 'full':\n By default, mode is 'full'. This returns the convolution\n at each point of overlap, with an output shape of (N+M-1,). At\n the end-points of the convolution, the signals do not overlap\n completely, and boundary effects may be seen.\n\n 'same':\n Mode `same` returns output of length ``max(M, N)``. Boundary\n effects are still visible.\n\n 'valid':\n Mode `valid` returns output of length\n ``max(M, N) - min(M, N) + 1``. The convolution product is only given\n for points where the signals overlap completely. Values outside\n the signal boundary have no effect.\n\n Returns\n -------\n out : ndarray\n Discrete, linear convolution of `a` and `v`.\n\n See Also\n --------\n scipy.signal.fftconvolve : Convolve two arrays using the Fast Fourier\n Transform.\n scipy.linalg.toeplitz : Used to construct the convolution operator.\n\n Notes\n -----\n The discrete convolution operation is defined as\n\n .. math:: (f * g)[n] = \\sum_{m = -\\infty}^{\\infty} f[m] g[n - m]\n\n It can be shown that a convolution :math:`x(t) * y(t)` in time/space\n is equivalent to the multiplication :math:`X(f) Y(f)` in the Fourier\n domain, after appropriate padding (padding is necessary to prevent""\n circular convolution). Since multiplication is more efficient (faster)\n than convolution, the function `scipy.signal.fftconvolve` exploits the\n FFT to calculate the convolution of large data-sets.\n\n References\n ----------\n .. [1] Wikipedia, \"Convolution\", http://en.wikipedia.org/wiki/Convolution.\n\n Examples\n --------\n Note how the convolution operator flips the second array\n before \"sliding\" the two across one another:\n\n >>> np.convolve([1, 2, 3], [0, 1, 0.5])\n array([ 0. , 1. , 2.5, 4. , 1.5])\n\n Only return the middle values of the convolution.\n Contains boundary effects, where zeros are taken\n into account:\n\n >>> np.convolve([1,2,3],[0,1,0.5], 'same')\n array([ 1. , 2.5, 4. ])\n\n The two arrays are of the same length, so there\n is only one position where they completely overlap:\n\n >>> np.convolve([1,2,3],[0,1,0.5], 'valid')\n array([ 2.5])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_103convolve = {__Pyx_NAMESTR("convolve"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_103convolve, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_102convolve)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_103convolve(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_v = 0; CYTHON_UNUSED PyObject *__pyx_v_mode = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("convolve (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__v,&__pyx_n_s__mode,0}; PyObject* values[3] = {0,0,0}; values[2] = ((PyObject *)__pyx_n_s__full); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__v)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("convolve", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2545; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2545; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_v = values[1]; __pyx_v_mode = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("convolve", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2545; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.convolve", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_102convolve(__pyx_self, __pyx_v_a, __pyx_v_v, __pyx_v_mode); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":2545 * * * def convolve(a, v, mode='full'): # <<<<<<<<<<<<<< * """Returns the discrete, linear convolution of two one-dimensional sequences. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_102convolve(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_v, CYTHON_UNUSED PyObject *__pyx_v_mode) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("convolve", 0); /* "ga4py/gain/notimplemented.pyx":2627 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2627; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.convolve", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_105copy(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_104copy[] = "Return an array copy of the given object.\n\n Parameters\n ----------\n a : array_like\n Input data.\n\n Returns\n -------\n arr : ndarray\n Array interpretation of `a`.\n\n Notes\n -----\n This is equivalent to\n\n >>> np.array(a, copy=True) #doctest: +SKIP\n\n Examples\n --------\n Create an array x, with a reference y and a copy z:\n\n >>> x = np.array([1, 2, 3])\n >>> y = x\n >>> z = np.copy(x)\n\n Note that, when we modify x, y changes, but not z:\n\n >>> x[0] = 10\n >>> x[0] == y[0]\n True\n >>> x[0] == z[0]\n False\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_105copy = {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_105copy, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_104copy)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_105copy(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("copy (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_104copy(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":2630 * * * def copy(a): # <<<<<<<<<<<<<< * """Return an array copy of the given object. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_104copy(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("copy", 0); /* "ga4py/gain/notimplemented.pyx":2666 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2666; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_107corrcoef(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_106corrcoef[] = "Return correlation coefficients.\n\n Please refer to the documentation for `cov` for more detail. The\n relationship between the correlation coefficient matrix, `P`, and the\n covariance matrix, `C`, is\n\n .. math:: P_{ij} = \014rac{ C_{ij} } { \\sqrt{ C_{ii} * C_{jj} } }\n\n The values of `P` are between -1 and 1, inclusive.\n\n Parameters\n ----------\n x : array_like\n A 1-D or 2-D array containing multiple variables and observations.\n Each row of `m` represents a variable, and each column a single\n observation of all those variables. Also see `rowvar` below.\n y : array_like, optional\n An additional set of variables and observations. `y` has the same\n shape as `m`.\n rowvar : int, optional\n If `rowvar` is non-zero (default), then each row represents a\n variable, with observations in the columns. Otherwise, the relationship\n is transposed: each column represents a variable, while the rows\n contain observations.\n bias : int, optional\n Default normalization is by ``(N - 1)``, where ``N`` is the number of\n observations (unbiased estimate). If `bias` is 1, then\n normalization is by ``N``. These values can be overridden by using\n the keyword ``ddof`` in numpy versions >= 1.5.\n ddof : {None, int}, optional\n .. versionadded:: 1.5\n If not ``None`` normalization is by ``(N - ddof)``, where ``N`` is\n the number of observations; this overrides the value implied by\n ``bias``. The default value is ``None``.\n\n Returns\n -------\n out : ndarray\n The correlation coefficient matrix of the variables.\n\n See Also\n --------\n cov : Covariance matrix\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_107corrcoef = {__Pyx_NAMESTR("corrcoef"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_107corrcoef, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_106corrcoef)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_107corrcoef(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_x = 0; CYTHON_UNUSED PyObject *__pyx_v_y = 0; CYTHON_UNUSED PyObject *__pyx_v_rowvar = 0; CYTHON_UNUSED PyObject *__pyx_v_bias = 0; CYTHON_UNUSED PyObject *__pyx_v_ddof = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("corrcoef (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__y,&__pyx_n_s__rowvar,&__pyx_n_s__bias,&__pyx_n_s__ddof,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":2669 * * * def corrcoef(x, y=None, rowvar=1, bias=0, ddof=None): # <<<<<<<<<<<<<< * """Return correlation coefficients. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)__pyx_int_1); values[3] = ((PyObject *)__pyx_int_0); values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__rowvar); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bias); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ddof); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "corrcoef") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2669; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_x = values[0]; __pyx_v_y = values[1]; __pyx_v_rowvar = values[2]; __pyx_v_bias = values[3]; __pyx_v_ddof = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("corrcoef", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2669; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.corrcoef", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_106corrcoef(__pyx_self, __pyx_v_x, __pyx_v_y, __pyx_v_rowvar, __pyx_v_bias, __pyx_v_ddof); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_106corrcoef(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_y, CYTHON_UNUSED PyObject *__pyx_v_rowvar, CYTHON_UNUSED PyObject *__pyx_v_bias, CYTHON_UNUSED PyObject *__pyx_v_ddof) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("corrcoef", 0); /* "ga4py/gain/notimplemented.pyx":2715 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2715; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.corrcoef", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_109correlate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_108correlate[] = "Cross-correlation of two 1-dimensional sequences.\n\n This function computes the correlation as generally defined in signal\n processing texts::\n\n z[k] = sum_n a[n] * conj(v[n+k])\n\n with a and v sequences being zero-padded where necessary and conj being\n the conjugate.\n\n Parameters\n ----------\n a, v : array_like\n Input sequences.\n mode : {'valid', 'same', 'full'}, optional\n Refer to the `convolve` docstring. Note that the default\n is `valid`, unlike `convolve`, which uses `full`.\n old_behavior : bool\n If True, uses the old behavior from Numeric, (correlate(a,v) == correlate(v,\n a), and the conjugate is not taken for complex arrays). If False, uses\n the conventional signal processing definition (see note).\n\n See Also\n --------\n convolve : Discrete, linear convolution of two one-dimensional sequences.\n\n Examples\n --------\n >>> np.correlate([1, 2, 3], [0, 1, 0.5])\n array([ 3.5])\n >>> np.correlate([1, 2, 3], [0, 1, 0.5], \"same\")\n array([ 2. , 3.5, 3. ])\n >>> np.correlate([1, 2, 3], [0, 1, 0.5], \"full\")\n array([ 0.5, 2. , 3.5, 3. , 0. ])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_109correlate = {__Pyx_NAMESTR("correlate"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_109correlate, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_108correlate)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_109correlate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_v = 0; CYTHON_UNUSED PyObject *__pyx_v_mode = 0; CYTHON_UNUSED PyObject *__pyx_v_old_behavior = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("correlate (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__v,&__pyx_n_s__mode,&__pyx_n_s__old_behavior,0}; PyObject* values[4] = {0,0,0,0}; values[2] = ((PyObject *)__pyx_n_s__valid); values[3] = __pyx_k_10; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__v)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("correlate", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2718; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__old_behavior); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "correlate") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2718; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_v = values[1]; __pyx_v_mode = values[2]; __pyx_v_old_behavior = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("correlate", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2718; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.correlate", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_108correlate(__pyx_self, __pyx_v_a, __pyx_v_v, __pyx_v_mode, __pyx_v_old_behavior); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":2718 * * * def correlate(a, v, mode='valid', old_behavior=False): # <<<<<<<<<<<<<< * """Cross-correlation of two 1-dimensional sequences. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_108correlate(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_v, CYTHON_UNUSED PyObject *__pyx_v_mode, CYTHON_UNUSED PyObject *__pyx_v_old_behavior) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("correlate", 0); /* "ga4py/gain/notimplemented.pyx":2755 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2755; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.correlate", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_111count_nonzero(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_110count_nonzero[] = "count_nonzero(a)\n\n Counts the number of non-zero values in the array ``a``.\n\n Parameters\n ----------\n a : array_like\n The array for which to count non-zeros.\n\n Returns\n -------\n count : int\n Number of non-zero values in the array.\n\n See Also\n --------\n nonzero : Return the coordinates of all the non-zero values.\n\n Examples\n --------\n >>> np.count_nonzero(np.eye(4))\n 4\n\n >>> np.count_nonzero([[0,1,7,0,0],[3,0,0,2,19]])\n 5\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_111count_nonzero = {__Pyx_NAMESTR("count_nonzero"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_111count_nonzero, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_110count_nonzero)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_111count_nonzero(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("count_nonzero (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_110count_nonzero(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":2758 * * * def count_nonzero(a): # <<<<<<<<<<<<<< * """count_nonzero(a) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_110count_nonzero(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("count_nonzero", 0); /* "ga4py/gain/notimplemented.pyx":2787 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2787; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.count_nonzero", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_113cov(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_112cov[] = "Estimate a covariance matrix, given data.\n\n Covariance indicates the level to which two variables vary together.\n If we examine N-dimensional samples, :math:`X = [x_1, x_2, ... x_N]^T`,\n then the covariance matrix element :math:`C_{ij}` is the covariance of\n :math:`x_i` and :math:`x_j`. The element :math:`C_{ii}` is the variance\n of :math:`x_i`.\n\n Parameters\n ----------\n m : array_like\n A 1-D or 2-D array containing multiple variables and observations.\n Each row of `m` represents a variable, and each column a single\n observation of all those variables. Also see `rowvar` below.\n y : array_like, optional\n An additional set of variables and observations. `y` has the same\n form as that of `m`.\n rowvar : int, optional\n If `rowvar` is non-zero (default), then each row represents a\n variable, with observations in the columns. Otherwise, the relationship\n is transposed: each column represents a variable, while the rows\n contain observations.\n bias : int, optional\n Default normalization is by ``(N - 1)``, where ``N`` is the number of\n observations given (unbiased estimate). If `bias` is 1, then\n normalization is by ``N``. These values can be overridden by using\n the keyword ``ddof`` in numpy versions >= 1.5.\n ddof : int, optional\n .. versionadded:: 1.5\n If not ``None`` normalization is by ``(N - ddof)``, where ``N`` is\n the number of observations; this overrides the value implied by\n ``bias``. The default value is ``None``.\n\n Returns\n -------\n out : ndarray\n The covariance matrix of the variables.\n\n See Also\n --------\n corrcoef : Normalized covariance matrix\n\n Examples\n --------\n Consider two variables, :math:`x_0` and :math:`x_1`, which\n correlate perfectly, but in opposite directions:\n\n >>> x = np.array([[0, 2], [1, 1], [2, 0]]).T\n "" >>> x\n array([[0, 1, 2],\n [2, 1, 0]])\n\n Note how :math:`x_0` increases while :math:`x_1` decreases. The covariance\n matrix shows this clearly:\n\n >>> np.cov(x)\n array([[ 1., -1.],\n [-1., 1.]])\n\n Note that element :math:`C_{0,1}`, which shows the correlation between\n :math:`x_0` and :math:`x_1`, is negative.\n\n Further, note how `x` and `y` are combined:\n\n >>> x = [-2.1, -1, 4.3]\n >>> y = [3, 1.1, 0.12]\n >>> X = np.vstack((x,y))\n >>> print np.cov(X)\n [[ 11.71 -4.286 ]\n [ -4.286 2.14413333]]\n >>> print np.cov(x, y)\n [[ 11.71 -4.286 ]\n [ -4.286 2.14413333]]\n >>> print np.cov(x)\n 11.71\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_113cov = {__Pyx_NAMESTR("cov"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_113cov, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_112cov)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_113cov(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_m = 0; CYTHON_UNUSED PyObject *__pyx_v_y = 0; CYTHON_UNUSED PyObject *__pyx_v_rowvar = 0; CYTHON_UNUSED PyObject *__pyx_v_bias = 0; CYTHON_UNUSED PyObject *__pyx_v_ddof = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("cov (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__m,&__pyx_n_s__y,&__pyx_n_s__rowvar,&__pyx_n_s__bias,&__pyx_n_s__ddof,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":2790 * * * def cov(m, y=None, rowvar=1, bias=0, ddof=None): # <<<<<<<<<<<<<< * """Estimate a covariance matrix, given data. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)__pyx_int_1); values[3] = ((PyObject *)__pyx_int_0); values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__m)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__rowvar); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bias); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ddof); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cov") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_m = values[0]; __pyx_v_y = values[1]; __pyx_v_rowvar = values[2]; __pyx_v_bias = values[3]; __pyx_v_ddof = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("cov", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2790; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.cov", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_112cov(__pyx_self, __pyx_v_m, __pyx_v_y, __pyx_v_rowvar, __pyx_v_bias, __pyx_v_ddof); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_112cov(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_m, CYTHON_UNUSED PyObject *__pyx_v_y, CYTHON_UNUSED PyObject *__pyx_v_rowvar, CYTHON_UNUSED PyObject *__pyx_v_bias, CYTHON_UNUSED PyObject *__pyx_v_ddof) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("cov", 0); /* "ga4py/gain/notimplemented.pyx":2868 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2868; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.cov", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_115cross(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_114cross[] = "Return the cross product of two (arrays of) vectors.\n\n The cross product of `a` and `b` in :math:`R^3` is a vector perpendicular\n to both `a` and `b`. If `a` and `b` are arrays of vectors, the vectors\n are defined by the last axis of `a` and `b` by default, and these axes\n can have dimensions 2 or 3. Where the dimension of either `a` or `b` is\n 2, the third component of the input vector is assumed to be zero and the\n cross product calculated accordingly. In cases where both input vectors\n have dimension 2, the z-component of the cross product is returned.\n\n Parameters\n ----------\n a : array_like\n Components of the first vector(s).\n b : array_like\n Components of the second vector(s).\n axisa : int, optional\n Axis of `a` that defines the vector(s). By default, the last axis.\n axisb : int, optional\n Axis of `b` that defines the vector(s). By default, the last axis.\n axisc : int, optional\n Axis of `c` containing the cross product vector(s). By default, the\n last axis.\n axis : int, optional\n If defined, the axis of `a`, `b` and `c` that defines the vector(s)\n and cross product(s). Overrides `axisa`, `axisb` and `axisc`.\n\n Returns\n -------\n c : ndarray\n Vector cross product(s).\n\n Raises\n ------\n ValueError\n When the dimension of the vector(s) in `a` and/or `b` does not\n equal 2 or 3.\n\n See Also\n --------\n inner : Inner product\n outer : Outer product.\n ix_ : Construct index arrays.\n\n Examples\n --------\n Vector cross-product.\n\n >>> x = [1, 2, 3]\n >>> y = [4, 5, 6]\n >>> np.cross(x, y)\n array([-3, 6, -3])\n\n One vector with dimension 2.\n\n >>> x = [1, 2]\n >>> y = [4, 5, 6]\n >>> np.cross(x, y)\n array([12, -6, -3])\n\n Equivalently:\n\n >>> x = [1, 2, 0]\n >>> y = [4, 5, 6]\n >>> np.cross(x, y)\n array([12, -6, -3""])\n\n Both vectors with dimension 2.\n\n >>> x = [1,2]\n >>> y = [4,5]\n >>> np.cross(x, y)\n -3\n\n Multiple vector cross-products. Note that the direction of the cross\n product vector is defined by the `right-hand rule`.\n\n >>> x = np.array([[1,2,3], [4,5,6]])\n >>> y = np.array([[4,5,6], [1,2,3]])\n >>> np.cross(x, y)\n array([[-3, 6, -3],\n [ 3, -6, 3]])\n\n The orientation of `c` can be changed using the `axisc` keyword.\n\n >>> np.cross(x, y, axisc=0)\n array([[-3, 3],\n [ 6, -6],\n [-3, 3]])\n\n Change the vector definition of `x` and `y` using `axisa` and `axisb`.\n\n >>> x = np.array([[1,2,3], [4,5,6], [7, 8, 9]])\n >>> y = np.array([[7, 8, 9], [4,5,6], [1,2,3]])\n >>> np.cross(x, y)\n array([[ -6, 12, -6],\n [ 0, 0, 0],\n [ 6, -12, 6]])\n >>> np.cross(x, y, axisa=0, axisb=0)\n array([[-24, 48, -24],\n [-30, 60, -30],\n [-36, 72, -36]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_115cross = {__Pyx_NAMESTR("cross"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_115cross, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_114cross)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_115cross(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_b = 0; CYTHON_UNUSED PyObject *__pyx_v_axisa = 0; CYTHON_UNUSED PyObject *__pyx_v_axisb = 0; CYTHON_UNUSED PyObject *__pyx_v_axisc = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("cross (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__b,&__pyx_n_s__axisa,&__pyx_n_s__axisb,&__pyx_n_s__axisc,&__pyx_n_s__axis,0}; PyObject* values[6] = {0,0,0,0,0,0}; values[2] = ((PyObject *)__pyx_int_neg_1); values[3] = ((PyObject *)__pyx_int_neg_1); values[4] = ((PyObject *)__pyx_int_neg_1); /* "ga4py/gain/notimplemented.pyx":2871 * * * def cross(a, b, axisa=-1, axisb=-1, axisc=-1, axis=None): # <<<<<<<<<<<<<< * """Return the cross product of two (arrays of) vectors. * */ values[5] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("cross", 0, 2, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2871; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axisa); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axisb); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axisc); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[5] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cross") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2871; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_b = values[1]; __pyx_v_axisa = values[2]; __pyx_v_axisb = values[3]; __pyx_v_axisc = values[4]; __pyx_v_axis = values[5]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("cross", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2871; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.cross", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_114cross(__pyx_self, __pyx_v_a, __pyx_v_b, __pyx_v_axisa, __pyx_v_axisb, __pyx_v_axisc, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_114cross(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_b, CYTHON_UNUSED PyObject *__pyx_v_axisa, CYTHON_UNUSED PyObject *__pyx_v_axisb, CYTHON_UNUSED PyObject *__pyx_v_axisc, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("cross", 0); /* "ga4py/gain/notimplemented.pyx":2976 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.cross", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_117cumprod(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_116cumprod[] = "Return the cumulative product of elements along a given axis.\n\n Parameters\n ----------\n a : array_like\n Input array.\n axis : int, optional\n Axis along which the cumulative product is computed. By default\n the input is flattened.\n dtype : dtype, optional\n Type of the returned array, as well as of the accumulator in which\n the elements are multiplied. If *dtype* is not specified, it\n defaults to the dtype of `a`, unless `a` has an integer dtype with\n a precision less than that of the default platform integer. In\n that case, the default platform integer is used instead.\n out : ndarray, optional\n Alternative output array in which to place the result. It must\n have the same shape and buffer length as the expected output\n but the type of the resulting values will be cast if necessary.\n\n Returns\n -------\n cumprod : ndarray\n A new array holding the result is returned unless `out` is\n specified, in which case a reference to out is returned.\n\n See Also\n --------\n numpy.doc.ufuncs : Section \"Output arguments\"\n\n Notes\n -----\n Arithmetic is modular when using integer types, and no error is\n raised on overflow.\n\n Examples\n --------\n >>> a = np.array([1,2,3])\n >>> np.cumprod(a) # intermediate results 1, 1*2\n ... # total product 1*2*3 = 6\n array([1, 2, 6])\n >>> a = np.array([[1, 2, 3], [4, 5, 6]])\n >>> np.cumprod(a, dtype=float) # specify type of output\n array([ 1., 2., 6., 24., 120., 720.])\n\n The cumulative product for each column (i.e., over the rows) of `a`:\n\n >>> np.cumprod(a, axis=0)\n array([[ 1, 2, 3],\n [ 4, 10, 18]])\n\n The cumulative product for each row (i.e. over the columns) of `a`:\n\n >>> np.cumprod(a,axis=1)\n array([[ 1, 2, 6],\n [ 4, 20, 120]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_117cumprod = {__Pyx_NAMESTR("cumprod"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_117cumprod, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_116cumprod)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_117cumprod(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("cumprod (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":2979 * * * def cumprod(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the cumulative product of elements along a given axis. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cumprod") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_dtype = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("cumprod", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.cumprod", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_116cumprod(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_116cumprod(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("cumprod", 0); /* "ga4py/gain/notimplemented.pyx":3038 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3038; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.cumprod", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_119cumproduct(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_118cumproduct[] = "Return the cumulative product over the given axis.\n\n\n See Also\n --------\n cumprod : equivalent function; see for details.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_119cumproduct = {__Pyx_NAMESTR("cumproduct"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_119cumproduct, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_118cumproduct)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_119cumproduct(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("cumproduct (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":3041 * * * def cumproduct(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the cumulative product over the given axis. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cumproduct") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3041; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_dtype = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("cumproduct", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3041; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.cumproduct", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_118cumproduct(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_118cumproduct(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("cumproduct", 0); /* "ga4py/gain/notimplemented.pyx":3050 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3050; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.cumproduct", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_121cumsum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_120cumsum[] = "Return the cumulative sum of the elements along a given axis.\n\n Parameters\n ----------\n a : array_like\n Input array.\n axis : int, optional\n Axis along which the cumulative sum is computed. The default\n (None) is to compute the cumsum over the flattened array.\n dtype : dtype, optional\n Type of the returned array and of the accumulator in which the\n elements are summed. If `dtype` is not specified, it defaults\n to the dtype of `a`, unless `a` has an integer dtype with a\n precision less than that of the default platform integer. In\n that case, the default platform integer is used.\n out : ndarray, optional\n Alternative output array in which to place the result. It must\n have the same shape and buffer length as the expected output\n but the type will be cast if necessary. See `doc.ufuncs`\n (Section \"Output arguments\") for more details.\n\n Returns\n -------\n cumsum_along_axis : ndarray.\n A new array holding the result is returned unless `out` is\n specified, in which case a reference to `out` is returned. The\n result has the same size as `a`, and the same shape as `a` if\n `axis` is not None or `a` is a 1-d array.\n\n\n See Also\n --------\n sum : Sum array elements.\n\n trapz : Integration of array values using the composite trapezoidal rule.\n\n Notes\n -----\n Arithmetic is modular when using integer types, and no error is\n raised on overflow.\n\n Examples\n --------\n >>> a = np.array([[1,2,3], [4,5,6]])\n >>> a\n array([[1, 2, 3],\n [4, 5, 6]])\n >>> np.cumsum(a)\n array([ 1, 3, 6, 10, 15, 21])\n >>> np.cumsum(a, dtype=float) # specifies type of output value(s)\n array([ 1., 3., 6., 10., 15., 21.])\n\n >>> np.cumsum(a,axis=0) # sum over rows for each of the 3 columns\n array([[1, 2, 3],\n [5, 7, 9]])\n >>> ""np.cumsum(a,axis=1) # sum over columns for each of the 2 rows\n array([[ 1, 3, 6],\n [ 4, 9, 15]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_121cumsum = {__Pyx_NAMESTR("cumsum"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_121cumsum, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_120cumsum)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_121cumsum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("cumsum (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":3053 * * * def cumsum(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the cumulative sum of the elements along a given axis. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cumsum") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3053; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_dtype = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("cumsum", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3053; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.cumsum", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_120cumsum(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_120cumsum(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("cumsum", 0); /* "ga4py/gain/notimplemented.pyx":3114 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.cumsum", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_123datetime_data(PyObject *__pyx_self, PyObject *__pyx_v_dtype); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_122datetime_data[] = "Return (unit, numerator, denominator, events) from a datetime dtype\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_123datetime_data = {__Pyx_NAMESTR("datetime_data"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_123datetime_data, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_122datetime_data)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_123datetime_data(PyObject *__pyx_self, PyObject *__pyx_v_dtype) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("datetime_data (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_122datetime_data(__pyx_self, ((PyObject *)__pyx_v_dtype)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":3117 * * * def datetime_data(dtype): # <<<<<<<<<<<<<< * """Return (unit, numerator, denominator, events) from a datetime dtype * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_122datetime_data(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_dtype) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("datetime_data", 0); /* "ga4py/gain/notimplemented.pyx":3121 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.datetime_data", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_125delete(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_124delete[] = "Return a new array with sub-arrays along an axis deleted.\n\n Parameters\n ----------\n arr : array_like\n Input array.\n obj : slice, int or array of ints\n Indicate which sub-arrays to remove.\n axis : int, optional\n The axis along which to delete the subarray defined by `obj`.\n If `axis` is None, `obj` is applied to the flattened array.\n\n Returns\n -------\n out : ndarray\n A copy of `arr` with the elements specified by `obj` removed. Note\n that `delete` does not occur in-place. If `axis` is None, `out` is\n a flattened array.\n\n See Also\n --------\n insert : Insert elements into an array.\n append : Append elements at the end of an array.\n\n Examples\n --------\n >>> arr = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])\n >>> arr\n array([[ 1, 2, 3, 4],\n [ 5, 6, 7, 8],\n [ 9, 10, 11, 12]])\n >>> np.delete(arr, 1, 0)\n array([[ 1, 2, 3, 4],\n [ 9, 10, 11, 12]])\n\n >>> np.delete(arr, np.s_[::2], 1)\n array([[ 2, 4],\n [ 6, 8],\n [10, 12]])\n >>> np.delete(arr, [1,3,5], None)\n array([ 1, 3, 5, 7, 8, 9, 10, 11, 12])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_125delete = {__Pyx_NAMESTR("delete"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_125delete, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_124delete)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_125delete(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_arr = 0; CYTHON_UNUSED PyObject *__pyx_v_obj = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("delete (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__arr,&__pyx_n_s__obj,&__pyx_n_s__axis,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":3124 * * * def delete(arr, obj, axis=None): # <<<<<<<<<<<<<< * """Return a new array with sub-arrays along an axis deleted. * */ values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arr)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("delete", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3124; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "delete") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3124; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_arr = values[0]; __pyx_v_obj = values[1]; __pyx_v_axis = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("delete", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3124; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.delete", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_124delete(__pyx_self, __pyx_v_arr, __pyx_v_obj, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_124delete(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arr, CYTHON_UNUSED PyObject *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("delete", 0); /* "ga4py/gain/notimplemented.pyx":3168 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.delete", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_127deprecate(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_126deprecate[] = "Issues a DeprecationWarning, adds warning to `old_name`'s\n docstring, rebinds ``old_name.__name__`` and returns the new\n function object.\n\n This function may also be used as a decorator.\n\n Parameters\n ----------\n func : function\n The function to be deprecated.\n old_name : str, optional\n The name of the function to be deprecated. Default is None, in which\n case the name of `func` is used.\n new_name : str, optional\n The new name for the function. Default is None, in which case\n the deprecation message is that `old_name` is deprecated. If given,\n the deprecation message is that `old_name` is deprecated and `new_name`\n should be used instead.\n message : str, optional\n Additional explanation of the deprecation. Displayed in the docstring\n after the warning.\n\n Returns\n -------\n old_func : function\n The deprecated function.\n\n Examples\n --------\n Note that ``olduint`` returns a value after printing Deprecation Warning:\n\n >>> olduint = np.deprecate(np.uint)\n >>> olduint(6)\n /usr/lib/python2.5/site-packages/numpy/lib/utils.py:114:\n DeprecationWarning: uint32 is deprecated\n warnings.warn(str1, DeprecationWarning)\n 6\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_127deprecate = {__Pyx_NAMESTR("deprecate"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_127deprecate, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_126deprecate)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_127deprecate(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("deprecate (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_126deprecate(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":3171 * * * def deprecate(): # <<<<<<<<<<<<<< * """Issues a DeprecationWarning, adds warning to `old_name`'s * docstring, rebinds ``old_name.__name__`` and returns the new */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_126deprecate(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("deprecate", 0); /* "ga4py/gain/notimplemented.pyx":3211 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.deprecate", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_129deprecate_with_doc(PyObject *__pyx_self, PyObject *__pyx_v_msg); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_128deprecate_with_doc[] = "message\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_129deprecate_with_doc = {__Pyx_NAMESTR("deprecate_with_doc"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_129deprecate_with_doc, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_128deprecate_with_doc)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_129deprecate_with_doc(PyObject *__pyx_self, PyObject *__pyx_v_msg) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("deprecate_with_doc (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_128deprecate_with_doc(__pyx_self, ((PyObject *)__pyx_v_msg)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":3214 * * * def deprecate_with_doc(msg): # <<<<<<<<<<<<<< * """message * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_128deprecate_with_doc(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_msg) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("deprecate_with_doc", 0); /* "ga4py/gain/notimplemented.pyx":3218 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.deprecate_with_doc", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_131diag_indices(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_130diag_indices[] = "Return the indices to access the main diagonal of an array.\n\n This returns a tuple of indices that can be used to access the main\n diagonal of an array `a` with ``a.ndim >= 2`` dimensions and shape\n (n, n, ..., n). For ``a.ndim = 2`` this is the usual diagonal, for\n ``a.ndim > 2`` this is the set of indices to access ``a[i, i, ..., i]``\n for ``i = [0..n-1]``.\n\n Parameters\n ----------\n n : int\n The size, along each dimension, of the arrays for which the returned\n indices can be used.\n\n ndim : int, optional\n The number of dimensions.\n\n See also\n --------\n diag_indices_from\n\n Notes\n -----\n .. versionadded:: 1.4.0\n\n Examples\n --------\n Create a set of indices to access the diagonal of a (4, 4) array:\n\n >>> di = np.diag_indices(4)\n >>> di\n (array([0, 1, 2, 3]), array([0, 1, 2, 3]))\n >>> a = np.arange(16).reshape(4, 4)\n >>> a\n array([[ 0, 1, 2, 3],\n [ 4, 5, 6, 7],\n [ 8, 9, 10, 11],\n [12, 13, 14, 15]])\n >>> a[di] = 100\n >>> a\n array([[100, 1, 2, 3],\n [ 4, 100, 6, 7],\n [ 8, 9, 100, 11],\n [ 12, 13, 14, 100]])\n\n Now, we create indices to manipulate a 3-D array:\n\n >>> d3 = np.diag_indices(2, 3)\n >>> d3\n (array([0, 1]), array([0, 1]), array([0, 1]))\n\n And use it to set the diagonal of an array of zeros to 1:\n\n >>> a = np.zeros((2, 2, 2), dtype=np.int)\n >>> a[d3] = 1\n >>> a\n array([[[1, 0],\n [0, 0]],\n [[0, 0],\n [0, 1]]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_131diag_indices = {__Pyx_NAMESTR("diag_indices"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_131diag_indices, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_130diag_indices)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_131diag_indices(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_n = 0; CYTHON_UNUSED PyObject *__pyx_v_ndim = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("diag_indices (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__n,&__pyx_n_s__ndim,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)__pyx_int_2); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__n)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ndim); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "diag_indices") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_n = values[0]; __pyx_v_ndim = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("diag_indices", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.diag_indices", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_130diag_indices(__pyx_self, __pyx_v_n, __pyx_v_ndim); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":3221 * * * def diag_indices(n, ndim=2): # <<<<<<<<<<<<<< * """Return the indices to access the main diagonal of an array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_130diag_indices(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_n, CYTHON_UNUSED PyObject *__pyx_v_ndim) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("diag_indices", 0); /* "ga4py/gain/notimplemented.pyx":3284 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.diag_indices", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_133diag_indices_from(PyObject *__pyx_self, PyObject *__pyx_v_arr); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_132diag_indices_from[] = "Return the indices to access the main diagonal of an n-dimensional array.\n\n See `diag_indices` for full details.\n\n Parameters\n ----------\n arr : array, at least 2-D\n\n See Also\n --------\n diag_indices\n\n Notes\n -----\n .. versionadded:: 1.4.0\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_133diag_indices_from = {__Pyx_NAMESTR("diag_indices_from"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_133diag_indices_from, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_132diag_indices_from)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_133diag_indices_from(PyObject *__pyx_self, PyObject *__pyx_v_arr) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("diag_indices_from (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_132diag_indices_from(__pyx_self, ((PyObject *)__pyx_v_arr)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":3287 * * * def diag_indices_from(arr): # <<<<<<<<<<<<<< * """Return the indices to access the main diagonal of an n-dimensional array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_132diag_indices_from(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arr) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("diag_indices_from", 0); /* "ga4py/gain/notimplemented.pyx":3305 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.diag_indices_from", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_135diagflat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_134diagflat[] = "Create a two-dimensional array with the flattened input as a diagonal.\n\n Parameters\n ----------\n v : array_like\n Input data, which is flattened and set as the `k`-th\n diagonal of the output.\n k : int, optional\n Diagonal to set; 0, the default, corresponds to the \"main\" diagonal,\n a positive (negative) `k` giving the number of the diagonal above\n (below) the main.\n\n Returns\n -------\n out : ndarray\n The 2-D output array.\n\n See Also\n --------\n diag : MATLAB work-alike for 1-D and 2-D arrays.\n diagonal : Return specified diagonals.\n trace : Sum along diagonals.\n\n Examples\n --------\n >>> np.diagflat([[1,2], [3,4]])\n array([[1, 0, 0, 0],\n [0, 2, 0, 0],\n [0, 0, 3, 0],\n [0, 0, 0, 4]])\n\n >>> np.diagflat([1,2], 1)\n array([[0, 1, 0],\n [0, 0, 2],\n [0, 0, 0]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_135diagflat = {__Pyx_NAMESTR("diagflat"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_135diagflat, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_134diagflat)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_135diagflat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_v = 0; CYTHON_UNUSED PyObject *__pyx_v_k = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("diagflat (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__v,&__pyx_n_s__k,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__v)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__k); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "diagflat") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3308; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_v = values[0]; __pyx_v_k = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("diagflat", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3308; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.diagflat", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_134diagflat(__pyx_self, __pyx_v_v, __pyx_v_k); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":3308 * * * def diagflat(v, k=0): # <<<<<<<<<<<<<< * """Create a two-dimensional array with the flattened input as a diagonal. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_134diagflat(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_v, CYTHON_UNUSED PyObject *__pyx_v_k) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("diagflat", 0); /* "ga4py/gain/notimplemented.pyx":3346 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.diagflat", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_137diff(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_136diff[] = "Calculate the n-th order discrete difference along given axis.\n\n The first order difference is given by ``out[n] = a[n+1] - a[n]`` along\n the given axis, higher order differences are calculated by using `diff`\n recursively.\n\n Parameters\n ----------\n a : array_like\n Input array\n n : int, optional\n The number of times values are differenced.\n axis : int, optional\n The axis along which the difference is taken, default is the last axis.\n\n Returns\n -------\n out : ndarray\n The `n` order differences. The shape of the output is the same as `a`\n except along `axis` where the dimension is smaller by `n`.\n\n See Also\n --------\n gradient, ediff1d\n\n Examples\n --------\n >>> x = np.array([1, 2, 4, 7, 0])\n >>> np.diff(x)\n array([ 1, 2, 3, -7])\n >>> np.diff(x, n=2)\n array([ 1, 1, -10])\n\n >>> x = np.array([[1, 3, 6, 10], [0, 5, 6, 8]])\n >>> np.diff(x)\n array([[2, 3, 4],\n [5, 1, 2]])\n >>> np.diff(x, axis=0)\n array([[-1, 2, 0, -2]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_137diff = {__Pyx_NAMESTR("diff"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_137diff, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_136diff)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_137diff(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_n = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("diff (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__n,&__pyx_n_s__axis,0}; PyObject* values[3] = {0,0,0}; values[1] = ((PyObject *)__pyx_int_1); values[2] = ((PyObject *)__pyx_int_neg_1); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__n); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "diff") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3349; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_n = values[1]; __pyx_v_axis = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("diff", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3349; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.diff", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_136diff(__pyx_self, __pyx_v_a, __pyx_v_n, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":3349 * * * def diff(a, n=1, axis=-1): # <<<<<<<<<<<<<< * """Calculate the n-th order discrete difference along given axis. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_136diff(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_n, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("diff", 0); /* "ga4py/gain/notimplemented.pyx":3391 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3391; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.diff", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_139digitize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_138digitize[] = "digitize(x, bins)\n\n Return the indices of the bins to which each value in input array belongs.\n\n Each index ``i`` returned is such that ``bins[i-1] <= x < bins[i]`` if\n `bins` is monotonically increasing, or ``bins[i-1] > x >= bins[i]`` if\n `bins` is monotonically decreasing. If values in `x` are beyond the\n bounds of `bins`, 0 or ``len(bins)`` is returned as appropriate.\n\n Parameters\n ----------\n x : array_like\n Input array to be binned. It has to be 1-dimensional.\n bins : array_like\n Array of bins. It has to be 1-dimensional and monotonic.\n\n Returns\n -------\n out : ndarray of ints\n Output array of indices, of same shape as `x`.\n\n Raises\n ------\n ValueError\n If the input is not 1-dimensional, or if `bins` is not monotonic.\n TypeError\n If the type of the input is complex.\n\n See Also\n --------\n bincount, histogram, unique\n\n Notes\n -----\n If values in `x` are such that they fall outside the bin range,\n attempting to index `bins` with the indices that `digitize` returns\n will result in an IndexError.\n\n Examples\n --------\n >>> x = np.array([0.2, 6.4, 3.0, 1.6])\n >>> bins = np.array([0.0, 1.0, 2.5, 4.0, 10.0])\n >>> inds = np.digitize(x, bins)\n >>> inds\n array([1, 4, 3, 2])\n >>> for n in range(x.size):\n ... print bins[inds[n]-1], \"<=\", x[n], \"<\", bins[inds[n]]\n ...\n 0.0 <= 0.2 < 1.0\n 4.0 <= 6.4 < 10.0\n 2.5 <= 3.0 < 4.0\n 1.0 <= 1.6 < 2.5\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_139digitize = {__Pyx_NAMESTR("digitize"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_139digitize, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_138digitize)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_139digitize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_x = 0; CYTHON_UNUSED PyObject *__pyx_v_bins = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("digitize (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__bins,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bins)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("digitize", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3394; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "digitize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3394; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_x = values[0]; __pyx_v_bins = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("digitize", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3394; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.digitize", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_138digitize(__pyx_self, __pyx_v_x, __pyx_v_bins); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":3394 * * * def digitize(x, bins): # <<<<<<<<<<<<<< * """digitize(x, bins) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_138digitize(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_bins) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("digitize", 0); /* "ga4py/gain/notimplemented.pyx":3450 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.digitize", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_141disp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_140disp[] = "Display a message on a device.\n\n Parameters\n ----------\n mesg : str\n Message to display.\n device : object\n Device to write message. If None, defaults to ``sys.stdout`` which is\n very similar to ``print``. `device` needs to have ``write()`` and\n ``flush()`` methods.\n linefeed : bool, optional\n Option whether to print a line feed or not. Defaults to True.\n\n Raises\n ------\n AttributeError\n If `device` does not have a ``write()`` or ``flush()`` method.\n\n Examples\n --------\n Besides ``sys.stdout``, a file-like object can also be used as it has\n both required methods:\n\n >>> from StringIO import StringIO\n >>> buf = StringIO()\n >>> np.disp('\"Display\" in a file', device=buf)\n >>> buf.getvalue()\n '\"Display\" in a file\n'\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_141disp = {__Pyx_NAMESTR("disp"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_141disp, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_140disp)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_141disp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_mesg = 0; CYTHON_UNUSED PyObject *__pyx_v_device = 0; CYTHON_UNUSED PyObject *__pyx_v_linefeed = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("disp (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__mesg,&__pyx_n_s__device,&__pyx_n_s__linefeed,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":3453 * * * def disp(mesg, device=None, linefeed=True): # <<<<<<<<<<<<<< * """Display a message on a device. * */ values[1] = ((PyObject *)Py_None); values[2] = __pyx_k_11; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mesg)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__device); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__linefeed); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "disp") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3453; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_mesg = values[0]; __pyx_v_device = values[1]; __pyx_v_linefeed = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("disp", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3453; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.disp", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_140disp(__pyx_self, __pyx_v_mesg, __pyx_v_device, __pyx_v_linefeed); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_140disp(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_mesg, CYTHON_UNUSED PyObject *__pyx_v_device, CYTHON_UNUSED PyObject *__pyx_v_linefeed) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("disp", 0); /* "ga4py/gain/notimplemented.pyx":3484 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3484; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.disp", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_143dsplit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_142dsplit[] = "Split array into multiple sub-arrays along the 3rd axis (depth).\n\n Please refer to the `split` documentation. `dsplit` is equivalent\n to `split` with ``axis=2``, the array is always split along the third\n axis provided the array dimension is greater than or equal to 3.\n\n See Also\n --------\n split : Split an array into multiple sub-arrays of equal size.\n\n Examples\n --------\n >>> x = np.arange(16.0).reshape(2, 2, 4)\n >>> x\n array([[[ 0., 1., 2., 3.],\n [ 4., 5., 6., 7.]],\n [[ 8., 9., 10., 11.],\n [ 12., 13., 14., 15.]]])\n >>> np.dsplit(x, 2)\n [array([[[ 0., 1.],\n [ 4., 5.]],\n [[ 8., 9.],\n [ 12., 13.]]]),\n array([[[ 2., 3.],\n [ 6., 7.]],\n [[ 10., 11.],\n [ 14., 15.]]])]\n >>> np.dsplit(x, np.array([3, 6]))\n [array([[[ 0., 1., 2.],\n [ 4., 5., 6.]],\n [[ 8., 9., 10.],\n [ 12., 13., 14.]]]),\n array([[[ 3.],\n [ 7.]],\n [[ 11.],\n [ 15.]]]),\n array([], dtype=float64)]\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_143dsplit = {__Pyx_NAMESTR("dsplit"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_143dsplit, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_142dsplit)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_143dsplit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_ary = 0; CYTHON_UNUSED PyObject *__pyx_v_indices_or_sections = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("dsplit (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__ary,&__pyx_n_s__indices_or_sections,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ary)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__indices_or_sections)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("dsplit", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3487; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dsplit") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3487; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_ary = values[0]; __pyx_v_indices_or_sections = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("dsplit", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3487; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.dsplit", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_142dsplit(__pyx_self, __pyx_v_ary, __pyx_v_indices_or_sections); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":3487 * * * def dsplit(ary, indices_or_sections): # <<<<<<<<<<<<<< * """Split array into multiple sub-arrays along the 3rd axis (depth). * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_142dsplit(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ary, CYTHON_UNUSED PyObject *__pyx_v_indices_or_sections) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("dsplit", 0); /* "ga4py/gain/notimplemented.pyx":3527 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.dsplit", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_145dstack(PyObject *__pyx_self, PyObject *__pyx_v_tup); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_144dstack[] = "Stack arrays in sequence depth wise (along third axis).\n\n Takes a sequence of arrays and stack them along the third axis\n to make a single array. Rebuilds arrays divided by `dsplit`.\n This is a simple way to stack 2D arrays (images) into a single\n 3D array for processing.\n\n Parameters\n ----------\n tup : sequence of arrays\n Arrays to stack. All of them must have the same shape along all\n but the third axis.\n\n Returns\n -------\n stacked : ndarray\n The array formed by stacking the given arrays.\n\n See Also\n --------\n vstack : Stack along first axis.\n hstack : Stack along second axis.\n concatenate : Join arrays.\n dsplit : Split array along third axis.\n\n Notes\n -----\n Equivalent to ``np.concatenate(tup, axis=2)``.\n\n Examples\n --------\n >>> a = np.array((1,2,3))\n >>> b = np.array((2,3,4))\n >>> np.dstack((a,b))\n array([[[1, 2],\n [2, 3],\n [3, 4]]])\n\n >>> a = np.array([[1],[2],[3]])\n >>> b = np.array([[2],[3],[4]])\n >>> np.dstack((a,b))\n array([[[1, 2]],\n [[2, 3]],\n [[3, 4]]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_145dstack = {__Pyx_NAMESTR("dstack"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_145dstack, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_144dstack)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_145dstack(PyObject *__pyx_self, PyObject *__pyx_v_tup) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("dstack (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_144dstack(__pyx_self, ((PyObject *)__pyx_v_tup)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":3530 * * * def dstack(tup): # <<<<<<<<<<<<<< * """Stack arrays in sequence depth wise (along third axis). * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_144dstack(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_tup) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("dstack", 0); /* "ga4py/gain/notimplemented.pyx":3577 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.dstack", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_147ediff1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_146ediff1d[] = "The differences between consecutive elements of an array.\n\n Parameters\n ----------\n ary : array_like\n If necessary, will be flattened before the differences are taken.\n to_end : array_like, optional\n Number(s) to append at the end of the returned differences.\n to_begin : array_like, optional\n Number(s) to prepend at the beginning of the returned differences.\n\n Returns\n -------\n ed : ndarray\n The differences. Loosely, this is ``ary.flat[1:] - ary.flat[:-1]``.\n\n See Also\n --------\n diff, gradient\n\n Notes\n -----\n When applied to masked arrays, this function drops the mask information\n if the `to_begin` and/or `to_end` parameters are used.\n\n Examples\n --------\n >>> x = np.array([1, 2, 4, 7, 0])\n >>> np.ediff1d(x)\n array([ 1, 2, 3, -7])\n\n >>> np.ediff1d(x, to_begin=-99, to_end=np.array([88, 99]))\n array([-99, 1, 2, 3, -7, 88, 99])\n\n The returned array is always 1D.\n\n >>> y = [[1, 2, 4], [1, 6, 24]]\n >>> np.ediff1d(y)\n array([ 1, 2, -3, 5, 18])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_147ediff1d = {__Pyx_NAMESTR("ediff1d"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_147ediff1d, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_146ediff1d)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_147ediff1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_ary = 0; CYTHON_UNUSED PyObject *__pyx_v_to_end = 0; CYTHON_UNUSED PyObject *__pyx_v_to_begin = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("ediff1d (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__ary,&__pyx_n_s__to_end,&__pyx_n_s__to_begin,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":3580 * * * def ediff1d(ary, to_end=None, to_begin=None): # <<<<<<<<<<<<<< * """The differences between consecutive elements of an array. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ary)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__to_end); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__to_begin); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ediff1d") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3580; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_ary = values[0]; __pyx_v_to_end = values[1]; __pyx_v_to_begin = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("ediff1d", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3580; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ediff1d", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_146ediff1d(__pyx_self, __pyx_v_ary, __pyx_v_to_end, __pyx_v_to_begin); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_146ediff1d(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ary, CYTHON_UNUSED PyObject *__pyx_v_to_end, CYTHON_UNUSED PyObject *__pyx_v_to_begin) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("ediff1d", 0); /* "ga4py/gain/notimplemented.pyx":3622 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3622; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ediff1d", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_149einsum(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_148einsum[] = "einsum(subscripts, *operands, out=None, dtype=None, order='K', casting='safe')\n\n Evaluates the Einstein summation convention on the operands.\n\n Using the Einstein summation convention, many common multi-dimensional\n array operations can be represented in a simple fashion. This function\n provides a way compute such summations. The best way to understand this\n function is to try the examples below, which show how many common NumPy\n functions can be implemented as calls to `einsum`.\n\n Parameters\n ----------\n subscripts : str\n Specifies the subscripts for summation.\n operands : list of array_like\n These are the arrays for the operation.\n out : ndarray, optional\n If provided, the calculation is done into this array.\n dtype : data-type, optional\n If provided, forces the calculation to use the data type specified.\n Note that you may have to also give a more liberal `casting`\n parameter to allow the conversions.\n order : {'C', 'F', 'A', or 'K'}, optional\n Controls the memory layout of the output. 'C' means it should\n be C contiguous. 'F' means it should be Fortran contiguous,\n 'A' means it should be 'F' if the inputs are all 'F', 'C' otherwise.\n 'K' means it should be as close to the layout as the inputs as\n is possible, including arbitrarily permuted axes.\n Default is 'K'.\n casting : {'no', 'equiv', 'safe', 'same_kind', 'unsafe'}, optional\n Controls what kind of data casting may occur. Setting this to\n 'unsafe' is not recommended, as it can adversely affect accumulations.\n\n * 'no' means the data types should not be cast at all.\n * 'equiv' means only byte-order changes are allowed.\n * 'safe' means only casts which can preserve values are allowed.\n * 'same_kind' means only safe casts or casts within a kind,\n like float64 to float32, are allowed.\n "" * 'unsafe' means any data conversions may be done.\n\n Returns\n -------\n output : ndarray\n The calculation based on the Einstein summation convention.\n\n See Also\n --------\n dot, inner, outer, tensordot\n\n Notes\n -----\n .. versionadded:: 1.6.0\n\n The subscripts string is a comma-separated list of subscript labels,\n where each label refers to a dimension of the corresponding operand.\n Repeated subscripts labels in one operand take the diagonal. For example,\n ``np.einsum('ii', a)`` is equivalent to ``np.trace(a)``.\n\n Whenever a label is repeated, it is summed, so ``np.einsum('i,i', a, b)``\n is equivalent to ``np.inner(a,b)``. If a label appears only once,\n it is not summed, so ``np.einsum('i', a)`` produces a view of ``a``\n with no changes.\n\n The order of labels in the output is by default alphabetical. This\n means that ``np.einsum('ij', a)`` doesn't affect a 2D array, while\n ``np.einsum('ji', a)`` takes its transpose.\n\n The output can be controlled by specifying output subscript labels\n as well. This specifies the label order, and allows summing to\n be disallowed or forced when desired. The call ``np.einsum('i->', a)``\n is like ``np.sum(a, axis=-1)``, and ``np.einsum('ii->i', a)``\n is like ``np.diag(a)``. The difference is that `einsum` does not\n allow broadcasting by default.\n\n To enable and control broadcasting, use an ellipsis. Default\n NumPy-style broadcasting is done by adding an ellipsis\n to the left of each term, like ``np.einsum('...ii->...i', a)``.\n To take the trace along the first and last axes,\n you can do ``np.einsum('i...i', a)``, or to do a matrix-matrix\n product with the left-most indices instead of rightmost, you can do\n ``np.einsum('ij...,jk...->ik...', a, b)``.\n\n When there is only one operand, no axes are summed, and no output\n parameter is provided, a view into the operand is returned i""nstead\n of a new array. Thus, taking the diagonal as ``np.einsum('ii->i', a)``\n produces a view.\n\n An alternative way to provide the subscripts and operands is as\n ``einsum(op0, sublist0, op1, sublist1, ..., [sublistout])``. The examples\n below have corresponding `einsum` calls with the two parameter methods.\n\n Examples\n --------\n >>> a = np.arange(25).reshape(5,5)\n >>> b = np.arange(5)\n >>> c = np.arange(6).reshape(2,3)\n\n >>> np.einsum('ii', a)\n 60\n >>> np.einsum(a, [0,0])\n 60\n >>> np.trace(a)\n 60\n\n >>> np.einsum('ii->i', a)\n array([ 0, 6, 12, 18, 24])\n >>> np.einsum(a, [0,0], [0])\n array([ 0, 6, 12, 18, 24])\n >>> np.diag(a)\n array([ 0, 6, 12, 18, 24])\n\n >>> np.einsum('ij,j', a, b)\n array([ 30, 80, 130, 180, 230])\n >>> np.einsum(a, [0,1], b, [1])\n array([ 30, 80, 130, 180, 230])\n >>> np.dot(a, b)\n array([ 30, 80, 130, 180, 230])\n\n >>> np.einsum('ji', c)\n array([[0, 3],\n [1, 4],\n [2, 5]])\n >>> np.einsum(c, [1,0])\n array([[0, 3],\n [1, 4],\n [2, 5]])\n >>> c.T\n array([[0, 3],\n [1, 4],\n [2, 5]])\n\n >>> np.einsum('..., ...', 3, c)\n array([[ 0, 3, 6],\n [ 9, 12, 15]])\n >>> np.einsum(3, [Ellipsis], c, [Ellipsis])\n array([[ 0, 3, 6],\n [ 9, 12, 15]])\n >>> np.multiply(3, c)\n array([[ 0, 3, 6],\n [ 9, 12, 15]])\n\n >>> np.einsum('i,i', b, b)\n 30\n >>> np.einsum(b, [0], b, [0])\n 30\n >>> np.inner(b,b)\n 30\n\n >>> np.einsum('i,j', np.arange(2)+1, b)\n array([[0, 1, 2, 3, 4],\n [0, 2, 4, 6, 8]])\n >>> np.einsum(np.arange(2)+1, [0], b, [1])\n array([[0, 1, 2, 3, 4],\n [0, 2, 4, 6, 8]])\n >>> np.outer(np.arange(2)+1, b)\n array([[0, 1, 2, 3, 4],\n [0, 2, 4, 6, 8]])\n\n >>> np.einsum('i...->...', a)\n array([50, 55, 60, 65, 70])\n >>> n""p.einsum(a, [0,Ellipsis], [Ellipsis])\n array([50, 55, 60, 65, 70])\n >>> np.sum(a, axis=0)\n array([50, 55, 60, 65, 70])\n\n >>> a = np.arange(60.).reshape(3,4,5)\n >>> b = np.arange(24.).reshape(4,3,2)\n >>> np.einsum('ijk,jil->kl', a, b)\n array([[ 4400., 4730.],\n [ 4532., 4874.],\n [ 4664., 5018.],\n [ 4796., 5162.],\n [ 4928., 5306.]])\n >>> np.einsum(a, [0,1,2], b, [1,0,3], [2,3])\n array([[ 4400., 4730.],\n [ 4532., 4874.],\n [ 4664., 5018.],\n [ 4796., 5162.],\n [ 4928., 5306.]])\n >>> np.tensordot(a,b, axes=([1,0],[0,1]))\n array([[ 4400., 4730.],\n [ 4532., 4874.],\n [ 4664., 5018.],\n [ 4796., 5162.],\n [ 4928., 5306.]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_149einsum = {__Pyx_NAMESTR("einsum"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_149einsum, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_148einsum)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_149einsum(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("einsum (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_148einsum(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":3625 * * * def einsum(): # <<<<<<<<<<<<<< * """einsum(subscripts, *operands, out=None, dtype=None, order='K', casting='safe') * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_148einsum(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("einsum", 0); /* "ga4py/gain/notimplemented.pyx":3814 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3814; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.einsum", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_151expand_dims(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_150expand_dims[] = "Expand the shape of an array.\n\n Insert a new axis, corresponding to a given position in the array shape.\n\n Parameters\n ----------\n a : array_like\n Input array.\n axis : int\n Position (amongst axes) where new axis is to be inserted.\n\n Returns\n -------\n res : ndarray\n Output array. The number of dimensions is one greater than that of\n the input array.\n\n See Also\n --------\n doc.indexing, atleast_1d, atleast_2d, atleast_3d\n\n Examples\n --------\n >>> x = np.array([1,2])\n >>> x.shape\n (2,)\n\n The following is equivalent to ``x[np.newaxis,:]`` or ``x[np.newaxis]``:\n\n >>> y = np.expand_dims(x, axis=0)\n >>> y\n array([[1, 2]])\n >>> y.shape\n (1, 2)\n\n >>> y = np.expand_dims(x, axis=1) # Equivalent to x[:,newaxis]\n >>> y\n array([[1],\n [2]])\n >>> y.shape\n (2, 1)\n\n Note that some examples may use ``None`` instead of ``np.newaxis``. These\n are the same objects:\n\n >>> np.newaxis is None\n True\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_151expand_dims = {__Pyx_NAMESTR("expand_dims"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_151expand_dims, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_150expand_dims)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_151expand_dims(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("expand_dims (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("expand_dims", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3817; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "expand_dims") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3817; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("expand_dims", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3817; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.expand_dims", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_150expand_dims(__pyx_self, __pyx_v_a, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":3817 * * * def expand_dims(a, axis): # <<<<<<<<<<<<<< * """Expand the shape of an array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_150expand_dims(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("expand_dims", 0); /* "ga4py/gain/notimplemented.pyx":3867 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.expand_dims", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_153extract(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_152extract[] = "Return the elements of an array that satisfy some condition.\n\n This is equivalent to ``np.compress(ravel(condition), ravel(arr))``. If\n `condition` is boolean ``np.extract`` is equivalent to ``arr[condition]``.\n\n Parameters\n ----------\n condition : array_like\n An array whose nonzero or True entries indicate the elements of `arr`\n to extract.\n arr : array_like\n Input array of the same size as `condition`.\n\n See Also\n --------\n take, put, putmask, compress\n\n Examples\n --------\n >>> arr = np.arange(12).reshape((3, 4))\n >>> arr\n array([[ 0, 1, 2, 3],\n [ 4, 5, 6, 7],\n [ 8, 9, 10, 11]])\n >>> condition = np.mod(arr, 3)==0\n >>> condition\n array([[ True, False, False, True],\n [False, False, True, False],\n [False, True, False, False]], dtype=bool)\n >>> np.extract(condition, arr)\n array([0, 3, 6, 9])\n\n\n If `condition` is boolean:\n\n >>> arr[condition]\n array([0, 3, 6, 9])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_153extract = {__Pyx_NAMESTR("extract"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_153extract, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_152extract)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_153extract(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_condition = 0; CYTHON_UNUSED PyObject *__pyx_v_arr = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("extract (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__condition,&__pyx_n_s__arr,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__condition)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arr)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("extract", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3870; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "extract") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3870; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_condition = values[0]; __pyx_v_arr = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("extract", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3870; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.extract", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_152extract(__pyx_self, __pyx_v_condition, __pyx_v_arr); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":3870 * * * def extract(condition, arr): # <<<<<<<<<<<<<< * """Return the elements of an array that satisfy some condition. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_152extract(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_condition, CYTHON_UNUSED PyObject *__pyx_v_arr) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("extract", 0); /* "ga4py/gain/notimplemented.pyx":3910 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3910; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.extract", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_155_fastCopyAndTranspose(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_154_fastCopyAndTranspose[] = "_fastCopyAndTranspose(a)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_155_fastCopyAndTranspose = {__Pyx_NAMESTR("_fastCopyAndTranspose"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_155_fastCopyAndTranspose, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_154_fastCopyAndTranspose)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_155_fastCopyAndTranspose(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_fastCopyAndTranspose (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_154_fastCopyAndTranspose(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":3913 * * * def _fastCopyAndTranspose(a): # <<<<<<<<<<<<<< * """_fastCopyAndTranspose(a) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_154_fastCopyAndTranspose(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_fastCopyAndTranspose", 0); /* "ga4py/gain/notimplemented.pyx":3918 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3918; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented._fastCopyAndTranspose", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_157fill_diagonal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_156fill_diagonal[] = "Fill the main diagonal of the given array of any dimensionality.\n\n For an array `a` with ``a.ndim > 2``, the diagonal is the list of\n locations with indices ``a[i, i, ..., i]`` all identical. This function\n modifies the input array in-place, it does not return a value.\n\n Parameters\n ----------\n a : array, at least 2-D.\n Array whose diagonal is to be filled, it gets modified in-place.\n\n val : scalar\n Value to be written on the diagonal, its type must be compatible with\n that of the array a.\n\n See also\n --------\n diag_indices, diag_indices_from\n\n Notes\n -----\n .. versionadded:: 1.4.0\n\n This functionality can be obtained via `diag_indices`, but internally\n this version uses a much faster implementation that never constructs the\n indices and uses simple slicing.\n\n Examples\n --------\n >>> a = np.zeros((3, 3), int)\n >>> np.fill_diagonal(a, 5)\n >>> a\n array([[5, 0, 0],\n [0, 5, 0],\n [0, 0, 5]])\n\n The same function can operate on a 4-D array:\n\n >>> a = np.zeros((3, 3, 3, 3), int)\n >>> np.fill_diagonal(a, 4)\n\n We only show a few blocks for clarity:\n\n >>> a[0, 0]\n array([[4, 0, 0],\n [0, 0, 0],\n [0, 0, 0]])\n >>> a[1, 1]\n array([[0, 0, 0],\n [0, 4, 0],\n [0, 0, 0]])\n >>> a[2, 2]\n array([[0, 0, 0],\n [0, 0, 0],\n [0, 0, 4]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_157fill_diagonal = {__Pyx_NAMESTR("fill_diagonal"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_157fill_diagonal, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_156fill_diagonal)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_157fill_diagonal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_val = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("fill_diagonal (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__val,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("fill_diagonal", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3921; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fill_diagonal") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3921; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_a = values[0]; __pyx_v_val = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("fill_diagonal", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3921; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.fill_diagonal", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_156fill_diagonal(__pyx_self, __pyx_v_a, __pyx_v_val); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":3921 * * * def fill_diagonal(a, val): # <<<<<<<<<<<<<< * """Fill the main diagonal of the given array of any dimensionality. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_156fill_diagonal(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_val) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("fill_diagonal", 0); /* "ga4py/gain/notimplemented.pyx":3979 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.fill_diagonal", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_159find_common_type(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_158find_common_type[] = "Determine common type following standard coercion rules.\n\n Parameters\n ----------\n array_types : sequence\n A list of dtypes or dtype convertible objects representing arrays.\n scalar_types : sequence\n A list of dtypes or dtype convertible objects representing scalars.\n\n Returns\n -------\n datatype : dtype\n The common data type, which is the maximum of `array_types` ignoring\n `scalar_types`, unless the maximum of `scalar_types` is of a\n different kind (`dtype.kind`). If the kind is not understood, then\n None is returned.\n\n See Also\n --------\n dtype, common_type, can_cast, mintypecode\n\n Examples\n --------\n >>> np.find_common_type([], [np.int64, np.float32, np.complex])\n dtype('complex128')\n >>> np.find_common_type([np.int64, np.float32], [])\n dtype('float64')\n\n The standard casting rules ensure that a scalar cannot up-cast an\n array unless the scalar is of a fundamentally different kind of data\n (i.e. under a different hierarchy in the data type hierarchy) then\n the array:\n\n >>> np.find_common_type([np.float32], [np.int64, np.float64])\n dtype('float32')\n\n Complex is of a different type, so it up-casts the float in the\n `array_types` argument:\n\n >>> np.find_common_type([np.float32], [np.complex])\n dtype('complex128')\n\n Type specifier strings are convertible to dtypes and can therefore\n be used instead of dtypes:\n\n >>> np.find_common_type(['f4', 'f4', 'i4'], ['c8'])\n dtype('complex128')\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_159find_common_type = {__Pyx_NAMESTR("find_common_type"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_159find_common_type, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_158find_common_type)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_159find_common_type(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_array_types = 0; CYTHON_UNUSED PyObject *__pyx_v_scalar_types = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("find_common_type (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__array_types,&__pyx_n_s__scalar_types,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__array_types)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__scalar_types)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("find_common_type", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3982; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "find_common_type") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3982; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_array_types = values[0]; __pyx_v_scalar_types = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("find_common_type", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3982; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.find_common_type", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_158find_common_type(__pyx_self, __pyx_v_array_types, __pyx_v_scalar_types); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":3982 * * * def find_common_type(array_types, scalar_types): # <<<<<<<<<<<<<< * """Determine common type following standard coercion rules. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_158find_common_type(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_array_types, CYTHON_UNUSED PyObject *__pyx_v_scalar_types) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("find_common_type", 0); /* "ga4py/gain/notimplemented.pyx":4032 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4032; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.find_common_type", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_161fix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_160fix[] = "Round to nearest integer towards zero.\n\n Round an array of floats element-wise to nearest integer towards zero.\n The rounded values are returned as floats.\n\n Parameters\n ----------\n x : array_like\n An array of floats to be rounded\n y : ndarray, optional\n Output array\n\n Returns\n -------\n out : ndarray of floats\n The array of rounded numbers\n\n See Also\n --------\n trunc, floor, ceil\n around : Round to given number of decimals\n\n Examples\n --------\n >>> np.fix(3.14)\n 3.0\n >>> np.fix(3)\n 3.0\n >>> np.fix([2.1, 2.9, -2.1, -2.9])\n array([ 2., 2., -2., -2.])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_161fix = {__Pyx_NAMESTR("fix"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_161fix, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_160fix)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_161fix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_x = 0; CYTHON_UNUSED PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("fix (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":4035 * * * def fix(x, y=None): # <<<<<<<<<<<<<< * """Round to nearest integer towards zero. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fix") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4035; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_x = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("fix", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4035; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.fix", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_160fix(__pyx_self, __pyx_v_x, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_160fix(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("fix", 0); /* "ga4py/gain/notimplemented.pyx":4068 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4068; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.fix", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_163flatnonzero(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_162flatnonzero[] = "Return indices that are non-zero in the flattened version of a.\n\n This is equivalent to a.ravel().nonzero()[0].\n\n Parameters\n ----------\n a : ndarray\n Input array.\n\n Returns\n -------\n res : ndarray\n Output array, containing the indices of the elements of `a.ravel()`\n that are non-zero.\n\n See Also\n --------\n nonzero : Return the indices of the non-zero elements of the input array.\n ravel : Return a 1-D array containing the elements of the input array.\n\n Examples\n --------\n >>> x = np.arange(-2, 3)\n >>> x\n array([-2, -1, 0, 1, 2])\n >>> np.flatnonzero(x)\n array([0, 1, 3, 4])\n\n Use the indices of the non-zero elements as an index array to extract\n these elements:\n\n >>> x.ravel()[np.flatnonzero(x)]\n array([-2, -1, 1, 2])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_163flatnonzero = {__Pyx_NAMESTR("flatnonzero"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_163flatnonzero, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_162flatnonzero)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_163flatnonzero(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("flatnonzero (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_162flatnonzero(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4071 * * * def flatnonzero(a): # <<<<<<<<<<<<<< * """Return indices that are non-zero in the flattened version of a. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_162flatnonzero(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("flatnonzero", 0); /* "ga4py/gain/notimplemented.pyx":4107 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.flatnonzero", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_165fliplr(PyObject *__pyx_self, PyObject *__pyx_v_m); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_164fliplr[] = "Flip array in the left/right direction.\n\n Flip the entries in each row in the left/right direction.\n Columns are preserved, but appear in a different order than before.\n\n Parameters\n ----------\n m : array_like\n Input array.\n\n Returns\n -------\n f : ndarray\n A view of `m` with the columns reversed. Since a view\n is returned, this operation is :math:`\\mathcal O(1)`.\n\n See Also\n --------\n flipud : Flip array in the up/down direction.\n rot90 : Rotate array counterclockwise.\n\n Notes\n -----\n Equivalent to A[:,::-1]. Does not require the array to be\n two-dimensional.\n\n Examples\n --------\n >>> A = np.diag([1.,2.,3.])\n >>> A\n array([[ 1., 0., 0.],\n [ 0., 2., 0.],\n [ 0., 0., 3.]])\n >>> np.fliplr(A)\n array([[ 0., 0., 1.],\n [ 0., 2., 0.],\n [ 3., 0., 0.]])\n\n >>> A = np.random.randn(2,3,5)\n >>> np.all(np.fliplr(A)==A[:,::-1,...])\n True\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_165fliplr = {__Pyx_NAMESTR("fliplr"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_165fliplr, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_164fliplr)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_165fliplr(PyObject *__pyx_self, PyObject *__pyx_v_m) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("fliplr (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_164fliplr(__pyx_self, ((PyObject *)__pyx_v_m)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4110 * * * def fliplr(m): # <<<<<<<<<<<<<< * """Flip array in the left/right direction. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_164fliplr(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_m) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("fliplr", 0); /* "ga4py/gain/notimplemented.pyx":4154 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.fliplr", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_167flipud(PyObject *__pyx_self, PyObject *__pyx_v_m); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_166flipud[] = "Flip array in the up/down direction.\n\n Flip the entries in each column in the up/down direction.\n Rows are preserved, but appear in a different order than before.\n\n Parameters\n ----------\n m : array_like\n Input array.\n\n Returns\n -------\n out : array_like\n A view of `m` with the rows reversed. Since a view is\n returned, this operation is :math:`\\mathcal O(1)`.\n\n See Also\n --------\n fliplr : Flip array in the left/right direction.\n rot90 : Rotate array counterclockwise.\n\n Notes\n -----\n Equivalent to ``A[::-1,...]``.\n Does not require the array to be two-dimensional.\n\n Examples\n --------\n >>> A = np.diag([1.0, 2, 3])\n >>> A\n array([[ 1., 0., 0.],\n [ 0., 2., 0.],\n [ 0., 0., 3.]])\n >>> np.flipud(A)\n array([[ 0., 0., 3.],\n [ 0., 2., 0.],\n [ 1., 0., 0.]])\n\n >>> A = np.random.randn(2,3,5)\n >>> np.all(np.flipud(A)==A[::-1,...])\n True\n\n >>> np.flipud([1,2])\n array([2, 1])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_167flipud = {__Pyx_NAMESTR("flipud"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_167flipud, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_166flipud)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_167flipud(PyObject *__pyx_self, PyObject *__pyx_v_m) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("flipud (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_166flipud(__pyx_self, ((PyObject *)__pyx_v_m)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4157 * * * def flipud(m): # <<<<<<<<<<<<<< * """Flip array in the up/down direction. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_166flipud(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_m) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("flipud", 0); /* "ga4py/gain/notimplemented.pyx":4204 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4204; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.flipud", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_169frombuffer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_168frombuffer[] = "frombuffer(buffer, dtype=float, count=-1, offset=0)\n\n Interpret a buffer as a 1-dimensional array.\n\n Parameters\n ----------\n buffer : buffer_like\n An object that exposes the buffer interface.\n dtype : data-type, optional\n Data-type of the returned array; default: float.\n count : int, optional\n Number of items to read. ``-1`` means all data in the buffer.\n offset : int, optional\n Start reading the buffer from this offset; default: 0.\n\n Notes\n -----\n If the buffer has data that is not in machine byte-order, this should\n be specified as part of the data-type, e.g.::\n\n >>> dt = np.dtype(int)\n >>> dt = dt.newbyteorder('>')\n >>> np.frombuffer(buf, dtype=dt)\n\n The data of the resulting array will not be byteswapped, but will be\n interpreted correctly.\n\n Examples\n --------\n >>> s = 'hello world'\n >>> np.frombuffer(s, dtype='S1', count=5, offset=6)\n array(['w', 'o', 'r', 'l', 'd'],\n dtype='|S1')\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_169frombuffer = {__Pyx_NAMESTR("frombuffer"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_169frombuffer, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_168frombuffer)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_169frombuffer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_buffer = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_count = 0; CYTHON_UNUSED PyObject *__pyx_v_offset = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("frombuffer (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__buffer,&__pyx_n_s__dtype,&__pyx_n_s__count,&__pyx_n_s__offset,0}; PyObject* values[4] = {0,0,0,0}; values[1] = __pyx_k_12; values[2] = ((PyObject *)__pyx_int_neg_1); values[3] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__count); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__offset); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "frombuffer") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4207; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_buffer = values[0]; __pyx_v_dtype = values[1]; __pyx_v_count = values[2]; __pyx_v_offset = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("frombuffer", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4207; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.frombuffer", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_168frombuffer(__pyx_self, __pyx_v_buffer, __pyx_v_dtype, __pyx_v_count, __pyx_v_offset); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4207 * * * def frombuffer(buffer, dtype=float, count=-1, offset=0): # <<<<<<<<<<<<<< * """frombuffer(buffer, dtype=float, count=-1, offset=0) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_168frombuffer(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_buffer, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_count, CYTHON_UNUSED PyObject *__pyx_v_offset) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("frombuffer", 0); /* "ga4py/gain/notimplemented.pyx":4244 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.frombuffer", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_171fromfile(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_170fromfile[] = "fromfile(file, dtype=float, count=-1, sep='')\n\n Construct an array from data in a text or binary file.\n\n A highly efficient way of reading binary data with a known data-type,\n as well as parsing simply formatted text files. Data written using the\n `tofile` method can be read using this function.\n\n Parameters\n ----------\n file : file or str\n Open file object or filename.\n dtype : data-type\n Data type of the returned array.\n For binary files, it is used to determine the size and byte-order\n of the items in the file.\n count : int\n Number of items to read. ``-1`` means all items (i.e., the complete\n file).\n sep : str\n Separator between items if file is a text file.\n Empty (\"\") separator means the file should be treated as binary.\n Spaces (\" \") in the separator match zero or more whitespace characters.\n A separator consisting only of spaces must match at least one\n whitespace.\n\n See also\n --------\n load, save\n ndarray.tofile\n loadtxt : More flexible way of loading data from a text file.\n\n Notes\n -----\n Do not rely on the combination of `tofile` and `fromfile` for\n data storage, as the binary files generated are are not platform\n independent. In particular, no byte-order or data-type information is\n saved. Data can be stored in the platform independent ``.npy`` format\n using `save` and `load` instead.\n\n Examples\n --------\n Construct an ndarray:\n\n >>> dt = np.dtype([('time', [('min', int), ('sec', int)]),\n ... ('temp', float)])\n >>> x = np.zeros((1,), dtype=dt)\n >>> x['time']['min'] = 10; x['temp'] = 98.25\n >>> x\n array([((10, 0), 98.25)],\n dtype=[('time', [('min', '>> import os\n >>> fname = os.tmpnam()\n >>> x.tofile(fname)\n\n Read"" the raw data from disk:\n\n >>> np.fromfile(fname, dtype=dt)\n array([((10, 0), 98.25)],\n dtype=[('time', [('min', '>> np.save(fname, x)\n >>> np.load(fname + '.npy')\n array([((10, 0), 98.25)],\n dtype=[('time', [('min', ' 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__count); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sep); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fromfile") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4247; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_file = values[0]; __pyx_v_dtype = values[1]; __pyx_v_count = values[2]; __pyx_v_sep = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("fromfile", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4247; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.fromfile", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_170fromfile(__pyx_self, __pyx_v_file, __pyx_v_dtype, __pyx_v_count, __pyx_v_sep); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4247 * * * def fromfile(file, dtype=float, count=-1, sep=''): # <<<<<<<<<<<<<< * """fromfile(file, dtype=float, count=-1, sep='') * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_170fromfile(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_file, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_count, CYTHON_UNUSED PyObject *__pyx_v_sep) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("fromfile", 0); /* "ga4py/gain/notimplemented.pyx":4321 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.fromfile", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_173fromiter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_172fromiter[] = "fromiter(iterable, dtype, count=-1)\n\n Create a new 1-dimensional array from an iterable object.\n\n Parameters\n ----------\n iterable : iterable object\n An iterable object providing data for the array.\n dtype : data-type\n The data-type of the returned array.\n count : int, optional\n The number of items to read from *iterable*. The default is -1,\n which means all data is read.\n\n Returns\n -------\n out : ndarray\n The output array.\n\n Notes\n -----\n Specify `count` to improve performance. It allows ``fromiter`` to\n pre-allocate the output array, instead of resizing it on demand.\n\n Examples\n --------\n >>> iterable = (x*x for x in range(5))\n >>> np.fromiter(iterable, np.float)\n array([ 0., 1., 4., 9., 16.])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_173fromiter = {__Pyx_NAMESTR("fromiter"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_173fromiter, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_172fromiter)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_173fromiter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_iterable = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_count = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("fromiter (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__iterable,&__pyx_n_s__dtype,&__pyx_n_s__count,0}; PyObject* values[3] = {0,0,0}; values[2] = ((PyObject *)__pyx_int_neg_1); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__iterable)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("fromiter", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__count); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fromiter") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_iterable = values[0]; __pyx_v_dtype = values[1]; __pyx_v_count = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("fromiter", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.fromiter", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_172fromiter(__pyx_self, __pyx_v_iterable, __pyx_v_dtype, __pyx_v_count); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4324 * * * def fromiter(iterable, dtype, count=-1): # <<<<<<<<<<<<<< * """fromiter(iterable, dtype, count=-1) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_172fromiter(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_iterable, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_count) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("fromiter", 0); /* "ga4py/gain/notimplemented.pyx":4357 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4357; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.fromiter", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_175frompyfunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_174frompyfunc[] = "frompyfunc(func, nin, nout)\n\n Takes an arbitrary Python function and returns a Numpy ufunc.\n\n Can be used, for example, to add broadcasting to a built-in Python\n function (see Examples section).\n\n Parameters\n ----------\n func : Python function object\n An arbitrary Python function.\n nin : int\n The number of input arguments.\n nout : int\n The number of objects returned by `func`.\n\n Returns\n -------\n out : ufunc\n Returns a Numpy universal function (``ufunc``) object.\n\n Notes\n -----\n The returned ufunc always returns PyObject arrays.\n\n Examples\n --------\n Use frompyfunc to add broadcasting to the Python function ``oct``:\n\n >>> oct_array = np.frompyfunc(oct, 1, 1)\n >>> oct_array(np.array((10, 30, 100)))\n array([012, 036, 0144], dtype=object)\n >>> np.array((oct(10), oct(30), oct(100))) # for comparison\n array(['012', '036', '0144'],\n dtype='|S4')\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_175frompyfunc = {__Pyx_NAMESTR("frompyfunc"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_175frompyfunc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_174frompyfunc)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_175frompyfunc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_func = 0; CYTHON_UNUSED PyObject *__pyx_v_nin = 0; CYTHON_UNUSED PyObject *__pyx_v_nout = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("frompyfunc (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__func,&__pyx_n_s__nin,&__pyx_n_s__nout,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__func)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nin)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("frompyfunc", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4360; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nout)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("frompyfunc", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4360; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "frompyfunc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4360; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_func = values[0]; __pyx_v_nin = values[1]; __pyx_v_nout = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("frompyfunc", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4360; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.frompyfunc", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_174frompyfunc(__pyx_self, __pyx_v_func, __pyx_v_nin, __pyx_v_nout); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4360 * * * def frompyfunc(func, nin, nout): # <<<<<<<<<<<<<< * """frompyfunc(func, nin, nout) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_174frompyfunc(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_func, CYTHON_UNUSED PyObject *__pyx_v_nin, CYTHON_UNUSED PyObject *__pyx_v_nout) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("frompyfunc", 0); /* "ga4py/gain/notimplemented.pyx":4399 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.frompyfunc", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_177fromregex(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_176fromregex[] = "Construct an array from a text file, using regular expression parsing.\n\n The returned array is always a structured array, and is constructed from\n all matches of the regular expression in the file. Groups in the regular\n expression are converted to fields of the structured array.\n\n Parameters\n ----------\n file : str or file\n File name or file object to read.\n regexp : str or regexp\n Regular expression used to parse the file.\n Groups in the regular expression correspond to fields in the dtype.\n dtype : dtype or list of dtypes\n Dtype for the structured array.\n\n Returns\n -------\n output : ndarray\n The output array, containing the part of the content of `file` that\n was matched by `regexp`. `output` is always a structured array.\n\n Raises\n ------\n TypeError\n When `dtype` is not a valid dtype for a structured array.\n\n See Also\n --------\n fromstring, loadtxt\n\n Notes\n -----\n Dtypes for structured arrays can be specified in several forms, but all\n forms specify at least the data type and field name. For details see\n `doc.structured_arrays`.\n\n Examples\n --------\n >>> f = open('test.dat', 'w')\n >>> f.write(\"1312 foo\n1534 bar\n444 qux\")\n >>> f.close()\n\n >>> regexp = r\"(\\d+)\\s+(...)\" # match [digits, whitespace, anything]\n >>> output = np.fromregex('test.dat', regexp,\n ... [('num', np.int64), ('key', 'S3')])\n >>> output\n array([(1312L, 'foo'), (1534L, 'bar'), (444L, 'qux')],\n dtype=[('num', '>> output['num']\n array([1312, 1534, 444], dtype=int64)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_177fromregex = {__Pyx_NAMESTR("fromregex"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_177fromregex, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_176fromregex)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_177fromregex(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_file = 0; CYTHON_UNUSED PyObject *__pyx_v_regexp = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("fromregex (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__file,&__pyx_n_s__regexp,&__pyx_n_s__dtype,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__file)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__regexp)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("fromregex", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4402; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("fromregex", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4402; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fromregex") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4402; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_file = values[0]; __pyx_v_regexp = values[1]; __pyx_v_dtype = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("fromregex", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4402; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.fromregex", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_176fromregex(__pyx_self, __pyx_v_file, __pyx_v_regexp, __pyx_v_dtype); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4402 * * * def fromregex(file, regexp, dtype): # <<<<<<<<<<<<<< * """Construct an array from a text file, using regular expression parsing. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_176fromregex(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_file, CYTHON_UNUSED PyObject *__pyx_v_regexp, CYTHON_UNUSED PyObject *__pyx_v_dtype) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("fromregex", 0); /* "ga4py/gain/notimplemented.pyx":4456 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.fromregex", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_179fromstring(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_178fromstring[] = "fromstring(string, dtype=float, count=-1, sep='')\n\n A new 1-D array initialized from raw binary or text data in a string.\n\n Parameters\n ----------\n string : str\n A string containing the data.\n dtype : data-type, optional\n The data type of the array; default: float. For binary input data,\n the data must be in exactly this format.\n count : int, optional\n Read this number of `dtype` elements from the data. If this is\n negative (the default), the count will be determined from the\n length of the data.\n sep : str, optional\n If not provided or, equivalently, the empty string, the data will\n be interpreted as binary data; otherwise, as ASCII text with\n decimal numbers. Also in this latter case, this argument is\n interpreted as the string separating numbers in the data; extra\n whitespace between elements is also ignored.\n\n Returns\n -------\n arr : ndarray\n The constructed array.\n\n Raises\n ------\n ValueError\n If the string is not the correct size to satisfy the requested\n `dtype` and `count`.\n\n See Also\n --------\n frombuffer, fromfile, fromiter\n\n Examples\n --------\n >>> np.fromstring('\001\002', dtype=np.uint8)\n array([1, 2], dtype=uint8)\n >>> np.fromstring('1 2', dtype=int, sep=' ')\n array([1, 2])\n >>> np.fromstring('1, 2', dtype=int, sep=',')\n array([1, 2])\n >>> np.fromstring('\001\002\003\004\005', dtype=np.uint8, count=3)\n array([1, 2, 3], dtype=uint8)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_179fromstring = {__Pyx_NAMESTR("fromstring"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_179fromstring, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_178fromstring)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_179fromstring(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_string = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_count = 0; CYTHON_UNUSED PyObject *__pyx_v_sep = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("fromstring (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__string,&__pyx_n_s__dtype,&__pyx_n_s__count,&__pyx_n_s__sep,0}; PyObject* values[4] = {0,0,0,0}; values[1] = __pyx_k_14; values[2] = ((PyObject *)__pyx_int_neg_1); values[3] = ((PyObject *)__pyx_kp_s_6); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__string)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__count); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sep); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fromstring") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4459; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_string = values[0]; __pyx_v_dtype = values[1]; __pyx_v_count = values[2]; __pyx_v_sep = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("fromstring", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4459; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.fromstring", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_178fromstring(__pyx_self, __pyx_v_string, __pyx_v_dtype, __pyx_v_count, __pyx_v_sep); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4459 * * * def fromstring(string, dtype=float, count=-1, sep=''): # <<<<<<<<<<<<<< * """fromstring(string, dtype=float, count=-1, sep='') * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_178fromstring(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_string, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_count, CYTHON_UNUSED PyObject *__pyx_v_sep) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("fromstring", 0); /* "ga4py/gain/notimplemented.pyx":4510 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4510; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.fromstring", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_181fv(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_180fv[] = "Compute the future value.\n\n Given:\n * a present value, `pv`\n * an interest `rate` compounded once per period, of which\n there are\n * `nper` total\n * a (fixed) payment, `pmt`, paid either\n * at the beginning (`when` = {'begin', 1}) or the end\n (`when` = {'end', 0}) of each period\n\n Return:\n the value at the end of the `nper` periods\n\n Parameters\n ----------\n rate : scalar or array_like of shape(M, )\n Rate of interest as decimal (not per cent) per period\n nper : scalar or array_like of shape(M, )\n Number of compounding periods\n pmt : scalar or array_like of shape(M, )\n Payment\n pv : scalar or array_like of shape(M, )\n Present value\n when : {{'begin', 1}, {'end', 0}}, {string, int}, optional\n When payments are due ('begin' (1) or 'end' (0)).\n Defaults to {'end', 0}.\n\n Returns\n -------\n out : ndarray\n Future values. If all input is scalar, returns a scalar float. If\n any input is array_like, returns future values for each input element.\n If multiple inputs are array_like, they all must have the same shape.\n\n Notes\n -----\n The future value is computed by solving the equation::\n\n fv +\n pv*(1+rate)**nper +\n pmt*(1 + rate*when)/rate*((1 + rate)**nper - 1) == 0\n\n or, when ``rate == 0``::\n\n fv + pv + pmt * nper == 0\n\n References\n ----------\n .. [WRW] Wheeler, D. A., E. Rathke, and R. Weir (Eds.) (2009, May).\n Open Document Format for Office Applications (OpenDocument)v1.2,\n Part 2: Recalculated Formula (OpenFormula) Format - Annotated Version,\n Pre-Draft 12. Organization for the Advancement of Structured Information\n Standards (OASIS). Billerica, MA, USA. [ODT Document].\n Available:\n http://www.oasis-open.org/committees/documents.php?wg_abbrev=office-formula\n OpenDocument-formula-20090508.odt\n\n Example""s\n --------\n What is the future value after 10 years of saving $100 now, with\n an additional monthly savings of $100. Assume the interest rate is\n 5% (annually) compounded monthly?\n\n >>> np.fv(0.05/12, 10*12, -100, -100)\n 15692.928894335748\n\n By convention, the negative sign represents cash flow out (i.e. money not\n available today). Thus, saving $100 a month at 5% annual interest leads\n to $15,692.93 available to spend in 10 years.\n\n If any input is array_like, returns an array of equal shape. Let's\n compare different interest rates from the example above.\n\n >>> a = np.array((0.05, 0.06, 0.07))/12\n >>> np.fv(a, 10*12, -100, -100)\n array([ 15692.92889434, 16569.87435405, 17509.44688102])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_181fv = {__Pyx_NAMESTR("fv"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_181fv, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_180fv)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_181fv(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_rate = 0; CYTHON_UNUSED PyObject *__pyx_v_nper = 0; CYTHON_UNUSED PyObject *__pyx_v_pmt = 0; CYTHON_UNUSED PyObject *__pyx_v_pv = 0; CYTHON_UNUSED PyObject *__pyx_v_when = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("fv (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__rate,&__pyx_n_s__nper,&__pyx_n_s__pmt,&__pyx_n_s__pv,&__pyx_n_s__when,0}; PyObject* values[5] = {0,0,0,0,0}; values[4] = ((PyObject *)__pyx_n_s__end); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__rate)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nper)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("fv", 0, 4, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4513; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pmt)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("fv", 0, 4, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4513; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pv)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("fv", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4513; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__when); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4513; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_rate = values[0]; __pyx_v_nper = values[1]; __pyx_v_pmt = values[2]; __pyx_v_pv = values[3]; __pyx_v_when = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("fv", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4513; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.fv", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_180fv(__pyx_self, __pyx_v_rate, __pyx_v_nper, __pyx_v_pmt, __pyx_v_pv, __pyx_v_when); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4513 * * * def fv(rate, nper, pmt, pv, when='end'): # <<<<<<<<<<<<<< * """Compute the future value. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_180fv(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rate, CYTHON_UNUSED PyObject *__pyx_v_nper, CYTHON_UNUSED PyObject *__pyx_v_pmt, CYTHON_UNUSED PyObject *__pyx_v_pv, CYTHON_UNUSED PyObject *__pyx_v_when) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("fv", 0); /* "ga4py/gain/notimplemented.pyx":4593 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4593; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.fv", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_183genfromtxt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_182genfromtxt[] = "Load data from a text file, with missing values handled as specified.\n\n Each line past the first `skip_header` lines is split at the `delimiter`\n character, and characters following the `comments` character are discarded.\n\n Parameters\n ----------\n fname : file or str\n File, filename, or generator to read. If the filename extension is\n `.gz` or `.bz2`, the file is first decompressed. Note that\n generators must return byte strings in Python 3k.\n dtype : dtype, optional\n Data type of the resulting array.\n If None, the dtypes will be determined by the contents of each\n column, individually.\n comments : str, optional\n The character used to indicate the start of a comment.\n All the characters occurring on a line after a comment are discarded\n delimiter : str, int, or sequence, optional\n The string used to separate values. By default, any consecutive\n whitespaces act as delimiter. An integer or sequence of integers\n can also be provided as width(s) of each field.\n skip_header : int, optional\n The numbers of lines to skip at the beginning of the file.\n skip_footer : int, optional\n The numbers of lines to skip at the end of the file\n converters : variable, optional\n The set of functions that convert the data of a column to a value.\n The converters can also be used to provide a default value\n for missing data: ``converters = {3: lambda s: float(s or 0)}``.\n missing_values : variable, optional\n The set of strings corresponding to missing data.\n filling_values : variable, optional\n The set of values to be used as default when the data are missing.\n usecols : sequence, optional\n Which columns to read, with 0 being the first. For example,\n ``usecols = (1, 4, 5)`` will extract the 2nd, 5th and 6th columns.\n names : {None, True, str, sequence}, optional\n "" If `names` is True, the field names are read from the first valid line\n after the first `skip_header` lines.\n If `names` is a sequence or a single-string of comma-separated names,\n the names will be used to define the field names in a structured dtype.\n If `names` is None, the names of the dtype fields will be used, if any.\n excludelist : sequence, optional\n A list of names to exclude. This list is appended to the default list\n ['return','file','print']. Excluded names are appended an underscore:\n for example, `file` would become `file_`.\n deletechars : str, optional\n A string combining invalid characters that must be deleted from the\n names.\n defaultfmt : str, optional\n A format used to define default field names, such as \"f%i\" or \"f_%02i\".\n autostrip : bool, optional\n Whether to automatically strip white spaces from the variables.\n replace_space : char, optional\n Character(s) used in replacement of white spaces in the variables names.\n By default, use a '_'.\n case_sensitive : {True, False, 'upper', 'lower'}, optional\n If True, field names are case sensitive.\n If False or 'upper', field names are converted to upper case.\n If 'lower', field names are converted to lower case.\n unpack : bool, optional\n If True, the returned array is transposed, so that arguments may be\n unpacked using ``x, y, z = loadtxt(...)``\n usemask : bool, optional\n If True, return a masked array.\n If False, return a regular array.\n invalid_raise : bool, optional\n If True, an exception is raised if an inconsistency is detected in the\n number of columns.\n If False, a warning is emitted and the offending lines are skipped.\n\n Returns\n -------\n out : ndarray\n Data read from the text file. If `usemask` is True, this is a\n masked array.\n\n See Als""o\n --------\n numpy.loadtxt : equivalent function when no data is missing.\n\n Notes\n -----\n * When spaces are used as delimiters, or when no delimiter has been given\n as input, there should not be any missing data between two fields.\n * When the variables are named (either by a flexible dtype or with `names`,\n there must not be any header in the file (else a ValueError\n exception is raised).\n * Individual values are not stripped of spaces by default.\n When using a custom converter, make sure the function does remove spaces.\n\n Examples\n ---------\n >>> from StringIO import StringIO\n >>> import numpy as np\n\n Comma delimited file with mixed dtype\n\n >>> s = StringIO(\"1,1.3,abcde\")\n >>> data = np.genfromtxt(s, dtype=[('myint','i8'),('myfloat','f8'),\n ... ('mystring','S5')], delimiter=\",\")\n >>> data\n array((1, 1.3, 'abcde'),\n dtype=[('myint', '>> s.seek(0) # needed for StringIO example only\n >>> data = np.genfromtxt(s, dtype=None,\n ... names = ['myint','myfloat','mystring'], delimiter=\",\")\n >>> data\n array((1, 1.3, 'abcde'),\n dtype=[('myint', '>> s.seek(0)\n >>> data = np.genfromtxt(s, dtype=\"i8,f8,S5\",\n ... names=['myint','myfloat','mystring'], delimiter=\",\")\n >>> data\n array((1, 1.3, 'abcde'),\n dtype=[('myint', '>> s = StringIO(\"11.3abcde\")\n >>> data = np.genfromtxt(s, dtype=None, names=['intvar','fltvar','strvar'],\n ... delimiter=[1,3,5])\n >>> data\n array((1, 1.3, 'abcde'),\n dtype=[('intvar', ' 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__comments); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__delimiter); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__skiprows); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__skip_header); if (value) { values[5] = value; kw_args--; } } case 6: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__skip_footer); if (value) { values[6] = value; kw_args--; } } case 7: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__converters); if (value) { values[7] = value; kw_args--; } } case 8: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__missing); if (value) { values[8] = value; kw_args--; } } case 9: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__missing_values); if (value) { values[9] = value; kw_args--; } } case 10: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__filling_values); if (value) { values[10] = value; kw_args--; } } case 11: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__usecols); if (value) { values[11] = value; kw_args--; } } case 12: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__names); if (value) { values[12] = value; kw_args--; } } case 13: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__excludelist); if (value) { values[13] = value; kw_args--; } } case 14: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__deletechars); if (value) { values[14] = value; kw_args--; } } case 15: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__replace_space); if (value) { values[15] = value; kw_args--; } } case 16: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__autostrip); if (value) { values[16] = value; kw_args--; } } case 17: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__case_sensitive); if (value) { values[17] = value; kw_args--; } } case 18: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__defaultfmt); if (value) { values[18] = value; kw_args--; } } case 19: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__unpack); if (value) { values[19] = value; kw_args--; } } case 20: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__usemask); if (value) { values[20] = value; kw_args--; } } case 21: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__loose); if (value) { values[21] = value; kw_args--; } } case 22: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__invalid_raise); if (value) { values[22] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "genfromtxt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4596; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 23: values[22] = PyTuple_GET_ITEM(__pyx_args, 22); case 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21); case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20); case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19); case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18); case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17); case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16); case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_fname = values[0]; __pyx_v_dtype = values[1]; __pyx_v_comments = values[2]; __pyx_v_delimiter = values[3]; __pyx_v_skiprows = values[4]; __pyx_v_skip_header = values[5]; __pyx_v_skip_footer = values[6]; __pyx_v_converters = values[7]; __pyx_v_missing = values[8]; __pyx_v_missing_values = values[9]; __pyx_v_filling_values = values[10]; __pyx_v_usecols = values[11]; __pyx_v_names = values[12]; __pyx_v_excludelist = values[13]; __pyx_v_deletechars = values[14]; __pyx_v_replace_space = values[15]; __pyx_v_autostrip = values[16]; __pyx_v_case_sensitive = values[17]; __pyx_v_defaultfmt = values[18]; __pyx_v_unpack = values[19]; __pyx_v_usemask = values[20]; __pyx_v_loose = values[21]; __pyx_v_invalid_raise = values[22]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("genfromtxt", 0, 1, 23, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4596; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.genfromtxt", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_182genfromtxt(__pyx_self, __pyx_v_fname, __pyx_v_dtype, __pyx_v_comments, __pyx_v_delimiter, __pyx_v_skiprows, __pyx_v_skip_header, __pyx_v_skip_footer, __pyx_v_converters, __pyx_v_missing, __pyx_v_missing_values, __pyx_v_filling_values, __pyx_v_usecols, __pyx_v_names, __pyx_v_excludelist, __pyx_v_deletechars, __pyx_v_replace_space, __pyx_v_autostrip, __pyx_v_case_sensitive, __pyx_v_defaultfmt, __pyx_v_unpack, __pyx_v_usemask, __pyx_v_loose, __pyx_v_invalid_raise); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_182genfromtxt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_fname, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_comments, CYTHON_UNUSED PyObject *__pyx_v_delimiter, CYTHON_UNUSED PyObject *__pyx_v_skiprows, CYTHON_UNUSED PyObject *__pyx_v_skip_header, CYTHON_UNUSED PyObject *__pyx_v_skip_footer, CYTHON_UNUSED PyObject *__pyx_v_converters, CYTHON_UNUSED PyObject *__pyx_v_missing, CYTHON_UNUSED PyObject *__pyx_v_missing_values, CYTHON_UNUSED PyObject *__pyx_v_filling_values, CYTHON_UNUSED PyObject *__pyx_v_usecols, CYTHON_UNUSED PyObject *__pyx_v_names, CYTHON_UNUSED PyObject *__pyx_v_excludelist, CYTHON_UNUSED PyObject *__pyx_v_deletechars, CYTHON_UNUSED PyObject *__pyx_v_replace_space, CYTHON_UNUSED PyObject *__pyx_v_autostrip, CYTHON_UNUSED PyObject *__pyx_v_case_sensitive, CYTHON_UNUSED PyObject *__pyx_v_defaultfmt, CYTHON_UNUSED PyObject *__pyx_v_unpack, CYTHON_UNUSED PyObject *__pyx_v_usemask, CYTHON_UNUSED PyObject *__pyx_v_loose, CYTHON_UNUSED PyObject *__pyx_v_invalid_raise) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("genfromtxt", 0); /* "ga4py/gain/notimplemented.pyx":4731 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.genfromtxt", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_185get_array_wrap(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_184get_array_wrap[] = "Find the wrapper for the array with the highest priority.\n\n In case of ties, leftmost wins. If no wrapper is found, return None\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_185get_array_wrap = {__Pyx_NAMESTR("get_array_wrap"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_185get_array_wrap, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_184get_array_wrap)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_185get_array_wrap(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_array_wrap (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_184get_array_wrap(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4734 * * * def get_array_wrap(): # <<<<<<<<<<<<<< * """Find the wrapper for the array with the highest priority. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_184get_array_wrap(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("get_array_wrap", 0); /* "ga4py/gain/notimplemented.pyx":4740 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4740; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.get_array_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_187get_include(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_186get_include[] = "Return the directory that contains the NumPy \\*.h header files.\n\n Extension modules that need to compile against NumPy should use this\n function to locate the appropriate include directory.\n\n Notes\n -----\n When using ``distutils``, for example in ``setup.py``.\n ::\n\n import numpy as np\n ...\n Extension('extension_name', ...\n include_dirs=[np.get_include()])\n ...\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_187get_include = {__Pyx_NAMESTR("get_include"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_187get_include, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_186get_include)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_187get_include(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_include (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_186get_include(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4743 * * * def get_include(): # <<<<<<<<<<<<<< * """Return the directory that contains the NumPy \*.h header files. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_186get_include(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("get_include", 0); /* "ga4py/gain/notimplemented.pyx":4761 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4761; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.get_include", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_189get_numarray_include(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_188get_numarray_include[] = "Return the directory that contains the numarray \\*.h header files.\n\n Extension modules that need to compile against numarray should use this\n function to locate the appropriate include directory.\n\n Parameters\n ----------\n type : any, optional\n If `type` is not None, the location of the NumPy headers is returned\n as well.\n\n Returns\n -------\n dirs : str or list of str\n If `type` is None, `dirs` is a string containing the path to the\n numarray headers.\n If `type` is not None, `dirs` is a list of strings with first the\n path(s) to the numarray headers, followed by the path to the NumPy\n headers.\n\n Notes\n -----\n Useful when using ``distutils``, for example in ``setup.py``.\n ::\n\n import numpy as np\n ...\n Extension('extension_name', ...\n include_dirs=[np.get_numarray_include()])\n ...\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_189get_numarray_include = {__Pyx_NAMESTR("get_numarray_include"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_189get_numarray_include, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_188get_numarray_include)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_189get_numarray_include(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_type = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_numarray_include (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__type,0}; PyObject* values[1] = {0}; /* "ga4py/gain/notimplemented.pyx":4764 * * * def get_numarray_include(type=None): # <<<<<<<<<<<<<< * """Return the directory that contains the numarray \*.h header files. * */ values[0] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__type); if (value) { values[0] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_numarray_include") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4764; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_type = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("get_numarray_include", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4764; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.get_numarray_include", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_188get_numarray_include(__pyx_self, __pyx_v_type); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_188get_numarray_include(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_type) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("get_numarray_include", 0); /* "ga4py/gain/notimplemented.pyx":4797 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4797; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.get_numarray_include", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_191get_printoptions(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_190get_printoptions[] = "Return the current print options.\n\n Returns\n -------\n print_opts : dict\n Dictionary of current print options with keys\n\n - precision : int\n - threshold : int\n - edgeitems : int\n - linewidth : int\n - suppress : bool\n - nanstr : str\n - infstr : str\n\n For a full description of these options, see `set_printoptions`.\n\n See Also\n --------\n set_printoptions, set_string_function\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_191get_printoptions = {__Pyx_NAMESTR("get_printoptions"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_191get_printoptions, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_190get_printoptions)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_191get_printoptions(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_printoptions (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_190get_printoptions(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4800 * * * def get_printoptions(): # <<<<<<<<<<<<<< * """Return the current print options. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_190get_printoptions(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("get_printoptions", 0); /* "ga4py/gain/notimplemented.pyx":4823 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.get_printoptions", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_193getbuffer(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_192getbuffer[] = "getbuffer(obj [,offset[, size]])\n\n Create a buffer object from the given object referencing a slice of\n length size starting at offset.\n\n Default is the entire buffer. A read-write buffer is attempted followed\n by a read-only buffer.\n\n Parameters\n ----------\n obj : object\n\n offset : int, optional\n\n size : int, optional\n\n Returns\n -------\n buffer_obj : buffer\n\n Examples\n --------\n >>> buf = np.getbuffer(np.ones(5), 1, 3)\n >>> len(buf)\n 3\n >>> buf[0]\n '\000'\n >>> buf\n \n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_193getbuffer = {__Pyx_NAMESTR("getbuffer"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_193getbuffer, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_192getbuffer)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_193getbuffer(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("getbuffer (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_192getbuffer(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4826 * * * def getbuffer(): # <<<<<<<<<<<<<< * """getbuffer(obj [,offset[, size]]) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_192getbuffer(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("getbuffer", 0); /* "ga4py/gain/notimplemented.pyx":4859 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4859; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.getbuffer", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_195getbufsize(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_194getbufsize[] = "Return the size of the buffer used in ufuncs.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_195getbufsize = {__Pyx_NAMESTR("getbufsize"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_195getbufsize, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_194getbufsize)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_195getbufsize(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("getbufsize (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_194getbufsize(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4862 * * * def getbufsize(): # <<<<<<<<<<<<<< * """Return the size of the buffer used in ufuncs. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_194getbufsize(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("getbufsize", 0); /* "ga4py/gain/notimplemented.pyx":4866 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4866; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.getbufsize", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_197geterr(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_196geterr[] = "Get the current way of handling floating-point errors.\n\n Returns\n -------\n res : dict\n A dictionary with keys \"divide\", \"over\", \"under\", and \"invalid\",\n whose values are from the strings \"ignore\", \"print\", \"log\", \"warn\",\n \"raise\", and \"call\". The keys represent possible floating-point\n exceptions, and the values define how these exceptions are handled.\n\n See Also\n --------\n geterrcall, seterr, seterrcall\n\n Notes\n -----\n For complete documentation of the types of floating-point exceptions and\n treatment options, see `seterr`.\n\n Examples\n --------\n >>> np.geterr()\n {'over': 'warn', 'divide': 'warn', 'invalid': 'warn',\n 'under': 'ignore'}\n >>> np.arange(3.) / np.arange(3.)\n array([ NaN, 1., 1.])\n\n >>> oldsettings = np.seterr(all='warn', over='raise')\n >>> np.geterr()\n {'over': 'raise', 'divide': 'warn', 'invalid': 'warn', 'under': 'warn'}\n >>> np.arange(3.) / np.arange(3.)\n __main__:1: RuntimeWarning: invalid value encountered in divide\n array([ NaN, 1., 1.])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_197geterr = {__Pyx_NAMESTR("geterr"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_197geterr, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_196geterr)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_197geterr(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("geterr (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_196geterr(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4869 * * * def geterr(): # <<<<<<<<<<<<<< * """Get the current way of handling floating-point errors. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_196geterr(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("geterr", 0); /* "ga4py/gain/notimplemented.pyx":4905 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4905; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.geterr", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_199geterrcall(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_198geterrcall[] = "Return the current callback function used on floating-point errors.\n\n When the error handling for a floating-point error (one of \"divide\",\n \"over\", \"under\", or \"invalid\") is set to 'call' or 'log', the function\n that is called or the log instance that is written to is returned by\n `geterrcall`. This function or log instance has been set with\n `seterrcall`.\n\n Returns\n -------\n errobj : callable, log instance or None\n The current error handler. If no handler was set through `seterrcall`,\n ``None`` is returned.\n\n See Also\n --------\n seterrcall, seterr, geterr\n\n Notes\n -----\n For complete documentation of the types of floating-point exceptions and\n treatment options, see `seterr`.\n\n Examples\n --------\n >>> np.geterrcall() # we did not yet set a handler, returns None\n\n >>> oldsettings = np.seterr(all='call')\n >>> def err_handler(type, flag):\n ... print \"Floating point error (%s), with flag %s\" % (type, flag)\n >>> oldhandler = np.seterrcall(err_handler)\n >>> np.array([1, 2, 3]) / 0.0\n Floating point error (divide by zero), with flag 1\n array([ Inf, Inf, Inf])\n\n >>> cur_handler = np.geterrcall()\n >>> cur_handler is err_handler\n True\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_199geterrcall = {__Pyx_NAMESTR("geterrcall"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_199geterrcall, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_198geterrcall)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_199geterrcall(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("geterrcall (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_198geterrcall(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4908 * * * def geterrcall(): # <<<<<<<<<<<<<< * """Return the current callback function used on floating-point errors. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_198geterrcall(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("geterrcall", 0); /* "ga4py/gain/notimplemented.pyx":4949 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4949; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.geterrcall", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_201geterrobj(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_200geterrobj[] = "geterrobj()\n\n Return the current object that defines floating-point error handling.\n\n The error object contains all information that defines the error handling\n behavior in Numpy. `geterrobj` is used internally by the other\n functions that get and set error handling behavior (`geterr`, `seterr`,\n `geterrcall`, `seterrcall`).\n\n Returns\n -------\n errobj : list\n The error object, a list containing three elements:\n [internal numpy buffer size, error mask, error callback function].\n\n The error mask is a single integer that holds the treatment information\n on all four floating point errors. The information for each error type\n is contained in three bits of the integer. If we print it in base 8, we\n can see what treatment is set for \"invalid\", \"under\", \"over\", and\n \"divide\" (in that order). The printed string can be interpreted with\n\n * 0 : 'ignore'\n * 1 : 'warn'\n * 2 : 'raise'\n * 3 : 'call'\n * 4 : 'print'\n * 5 : 'log'\n\n See Also\n --------\n seterrobj, seterr, geterr, seterrcall, geterrcall\n getbufsize, setbufsize\n\n Notes\n -----\n For complete documentation of the types of floating-point exceptions and\n treatment options, see `seterr`.\n\n Examples\n --------\n >>> np.geterrobj() # first get the defaults\n [10000, 0, None]\n\n >>> def err_handler(type, flag):\n ... print \"Floating point error (%s), with flag %s\" % (type, flag)\n ...\n >>> old_bufsize = np.setbufsize(20000)\n >>> old_err = np.seterr(divide='raise')\n >>> old_handler = np.seterrcall(err_handler)\n >>> np.geterrobj()\n [20000, 2, ]\n\n >>> old_err = np.seterr(all='ignore')\n >>> np.base_repr(np.geterrobj()[1], 8)\n '0'\n >>> old_err = np.seterr(divide='warn', over='log', under='call',\n invalid='print')\n >>> np.b""ase_repr(np.geterrobj()[1], 8)\n '4351'\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_201geterrobj = {__Pyx_NAMESTR("geterrobj"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_201geterrobj, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_200geterrobj)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_201geterrobj(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("geterrobj (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_200geterrobj(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":4952 * * * def geterrobj(): # <<<<<<<<<<<<<< * """geterrobj() * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_200geterrobj(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("geterrobj", 0); /* "ga4py/gain/notimplemented.pyx":5015 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5015; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.geterrobj", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_203gradient(PyObject *__pyx_self, PyObject *__pyx_v_f); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_202gradient[] = "Return the gradient of an N-dimensional array.\n\n The gradient is computed using central differences in the interior\n and first differences at the boundaries. The returned gradient hence has\n the same shape as the input array.\n\n Parameters\n ----------\n f : array_like\n An N-dimensional array containing samples of a scalar function.\n `*varargs` : scalars\n 0, 1, or N scalars specifying the sample distances in each direction,\n that is: `dx`, `dy`, `dz`, ... The default distance is 1.\n\n\n Returns\n -------\n g : ndarray\n N arrays of the same shape as `f` giving the derivative of `f` with\n respect to each dimension.\n\n Examples\n --------\n >>> x = np.array([1, 2, 4, 7, 11, 16], dtype=np.float)\n >>> np.gradient(x)\n array([ 1. , 1.5, 2.5, 3.5, 4.5, 5. ])\n >>> np.gradient(x, 2)\n array([ 0.5 , 0.75, 1.25, 1.75, 2.25, 2.5 ])\n\n >>> np.gradient(np.array([[1, 2, 6], [3, 4, 5]], dtype=np.float))\n [array([[ 2., 2., -1.],\n [ 2., 2., -1.]]),\n array([[ 1. , 2.5, 4. ],\n [ 1. , 1. , 1. ]])]\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_203gradient = {__Pyx_NAMESTR("gradient"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_203gradient, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_202gradient)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_203gradient(PyObject *__pyx_self, PyObject *__pyx_v_f) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("gradient (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_202gradient(__pyx_self, ((PyObject *)__pyx_v_f)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":5018 * * * def gradient(f): # <<<<<<<<<<<<<< * """Return the gradient of an N-dimensional array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_202gradient(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_f) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("gradient", 0); /* "ga4py/gain/notimplemented.pyx":5055 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5055; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.gradient", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_205hamming(PyObject *__pyx_self, PyObject *__pyx_v_M); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_204hamming[] = "Return the Hamming window.\n\n The Hamming window is a taper formed by using a weighted cosine.\n\n Parameters\n ----------\n M : int\n Number of points in the output window. If zero or less, an\n empty array is returned.\n\n Returns\n -------\n out : ndarray\n The window, normalized to one (the value one\n appears only if the number of samples is odd).\n\n See Also\n --------\n bartlett, blackman, hanning, kaiser\n\n Notes\n -----\n The Hamming window is defined as\n\n .. math:: w(n) = 0.54 + 0.46cos\\left(\014rac{2\\pi{n}}{M-1}\right)\n \\qquad 0 \\leq n \\leq M-1\n\n The Hamming was named for R. W. Hamming, an associate of J. W. Tukey and\n is described in Blackman and Tukey. It was recommended for smoothing the\n truncated autocovariance function in the time domain.\n Most references to the Hamming window come from the signal processing\n literature, where it is used as one of many windowing functions for\n smoothing values. It is also known as an apodization (which means\n \"removing the foot\", i.e. smoothing discontinuities at the beginning\n and end of the sampled signal) or tapering function.\n\n References\n ----------\n .. [1] Blackman, R.B. and Tukey, J.W., (1958) The measurement of power\n spectra, Dover Publications, New York.\n .. [2] E.R. Kanasewich, \"Time Sequence Analysis in Geophysics\", The\n University of Alberta Press, 1975, pp. 109-110.\n .. [3] Wikipedia, \"Window function\",\n http://en.wikipedia.org/wiki/Window_function\n .. [4] W.H. Press, B.P. Flannery, S.A. Teukolsky, and W.T. Vetterling,\n \"Numerical Recipes\", Cambridge University Press, 1986, page 425.\n\n Examples\n --------\n >>> np.hamming(12)\n array([ 0.08 , 0.15302337, 0.34890909, 0.60546483, 0.84123594,\n 0.98136677, 0.98136677, 0.84123594, 0.60546483, 0.34890909,\n "" 0.15302337, 0.08 ])\n\n Plot the window and the frequency response:\n\n >>> from numpy.fft import fft, fftshift\n >>> import matplotlib.pyplot as plt\n\n >>> window = np.hamming(51)\n >>> plt.plot(window)\n []\n >>> plt.title(\"Hamming window\")\n \n >>> plt.ylabel(\"Amplitude\")\n \n >>> plt.xlabel(\"Sample\")\n \n >>> plt.show()\n\n >>> plt.figure()\n \n >>> A = fft(window, 2048) / 25.5\n >>> mag = np.abs(fftshift(A))\n >>> freq = np.linspace(-0.5, 0.5, len(A))\n >>> response = 20 * np.log10(mag)\n >>> response = np.clip(response, -100, 100)\n >>> plt.plot(freq, response)\n []\n >>> plt.title(\"Frequency response of Hamming window\")\n \n >>> plt.ylabel(\"Magnitude [dB]\")\n \n >>> plt.xlabel(\"Normalized frequency [cycles per sample]\")\n \n >>> plt.axis('tight')\n (-0.5, 0.5, -100.0, ...)\n >>> plt.show()\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_205hamming = {__Pyx_NAMESTR("hamming"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_205hamming, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_204hamming)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_205hamming(PyObject *__pyx_self, PyObject *__pyx_v_M) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("hamming (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_204hamming(__pyx_self, ((PyObject *)__pyx_v_M)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":5058 * * * def hamming(M): # <<<<<<<<<<<<<< * """Return the Hamming window. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_204hamming(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_M) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("hamming", 0); /* "ga4py/gain/notimplemented.pyx":5149 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.hamming", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_207hanning(PyObject *__pyx_self, PyObject *__pyx_v_M); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_206hanning[] = "Return the Hanning window.\n\n The Hanning window is a taper formed by using a weighted cosine.\n\n Parameters\n ----------\n M : int\n Number of points in the output window. If zero or less, an\n empty array is returned.\n\n Returns\n -------\n out : ndarray, shape(M,)\n The window, normalized to one (the value one\n appears only if `M` is odd).\n\n See Also\n --------\n bartlett, blackman, hamming, kaiser\n\n Notes\n -----\n The Hanning window is defined as\n\n .. math:: w(n) = 0.5 - 0.5cos\\left(\014rac{2\\pi{n}}{M-1}\right)\n \\qquad 0 \\leq n \\leq M-1\n\n The Hanning was named for Julius van Hann, an Austrian meterologist. It is\n also known as the Cosine Bell. Some authors prefer that it be called a\n Hann window, to help avoid confusion with the very similar Hamming window.\n\n Most references to the Hanning window come from the signal processing\n literature, where it is used as one of many windowing functions for\n smoothing values. It is also known as an apodization (which means\n \"removing the foot\", i.e. smoothing discontinuities at the beginning\n and end of the sampled signal) or tapering function.\n\n References\n ----------\n .. [1] Blackman, R.B. and Tukey, J.W., (1958) The measurement of power\n spectra, Dover Publications, New York.\n .. [2] E.R. Kanasewich, \"Time Sequence Analysis in Geophysics\",\n The University of Alberta Press, 1975, pp. 106-108.\n .. [3] Wikipedia, \"Window function\",\n http://en.wikipedia.org/wiki/Window_function\n .. [4] W.H. Press, B.P. Flannery, S.A. Teukolsky, and W.T. Vetterling,\n \"Numerical Recipes\", Cambridge University Press, 1986, page 425.\n\n Examples\n --------\n >>> from numpy import hanning\n >>> hanning(12)\n array([ 0. , 0.07937323, 0.29229249, 0.57115742, 0.82743037,\n 0.97974649, 0.97974649, 0.""82743037, 0.57115742, 0.29229249,\n 0.07937323, 0. ])\n\n Plot the window and its frequency response:\n\n >>> from numpy.fft import fft, fftshift\n >>> import matplotlib.pyplot as plt\n\n >>> window = np.hanning(51)\n >>> plt.plot(window)\n []\n >>> plt.title(\"Hann window\")\n \n >>> plt.ylabel(\"Amplitude\")\n \n >>> plt.xlabel(\"Sample\")\n \n >>> plt.show()\n\n >>> plt.figure()\n \n >>> A = fft(window, 2048) / 25.5\n >>> mag = abs(fftshift(A))\n >>> freq = np.linspace(-0.5,0.5,len(A))\n >>> response = 20*np.log10(mag)\n >>> response = np.clip(response,-100,100)\n >>> plt.plot(freq, response)\n []\n >>> plt.title(\"Frequency response of the Hann window\")\n \n >>> plt.ylabel(\"Magnitude [dB]\")\n \n >>> plt.xlabel(\"Normalized frequency [cycles per sample]\")\n \n >>> plt.axis('tight')\n (-0.5, 0.5, -100.0, ...)\n >>> plt.show()\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_207hanning = {__Pyx_NAMESTR("hanning"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_207hanning, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_206hanning)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_207hanning(PyObject *__pyx_self, PyObject *__pyx_v_M) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("hanning (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_206hanning(__pyx_self, ((PyObject *)__pyx_v_M)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":5152 * * * def hanning(M): # <<<<<<<<<<<<<< * """Return the Hanning window. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_206hanning(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_M) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("hanning", 0); /* "ga4py/gain/notimplemented.pyx":5245 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.hanning", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_209histogram(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_208histogram[] = "Compute the histogram of a set of data.\n\n Parameters\n ----------\n a : array_like\n Input data. The histogram is computed over the flattened array.\n bins : int or sequence of scalars, optional\n If `bins` is an int, it defines the number of equal-width\n bins in the given range (10, by default). If `bins` is a sequence,\n it defines the bin edges, including the rightmost edge, allowing\n for non-uniform bin widths.\n range : (float, float), optional\n The lower and upper range of the bins. If not provided, range\n is simply ``(a.min(), a.max())``. Values outside the range are\n ignored.\n normed : bool, optional\n This keyword is deprecated in Numpy 1.6 due to confusing/buggy\n behavior. It will be removed in Numpy 2.0. Use the density keyword\n instead.\n If False, the result will contain the number of samples\n in each bin. If True, the result is the value of the\n probability *density* function at the bin, normalized such that\n the *integral* over the range is 1. Note that this latter behavior is\n known to be buggy with unequal bin widths; use `density` instead.\n weights : array_like, optional\n An array of weights, of the same shape as `a`. Each value in `a`\n only contributes its associated weight towards the bin count\n (instead of 1). If `normed` is True, the weights are normalized,\n so that the integral of the density over the range remains 1\n density : bool, optional\n If False, the result will contain the number of samples\n in each bin. If True, the result is the value of the\n probability *density* function at the bin, normalized such that\n the *integral* over the range is 1. Note that the sum of the\n histogram values will not be equal to 1 unless bins of unity\n width are chosen; it is not a probability *mass* function.\n Overr""ides the `normed` keyword if given.\n\n Returns\n -------\n hist : array\n The values of the histogram. See `normed` and `weights` for a\n description of the possible semantics.\n bin_edges : array of dtype float\n Return the bin edges ``(length(hist)+1)``.\n\n\n See Also\n --------\n histogramdd, bincount, searchsorted, digitize\n\n Notes\n -----\n All but the last (righthand-most) bin is half-open. In other words, if\n `bins` is::\n\n [1, 2, 3, 4]\n\n then the first bin is ``[1, 2)`` (including 1, but excluding 2) and the\n second ``[2, 3)``. The last bin, however, is ``[3, 4]``, which *includes*\n 4.\n\n Examples\n --------\n >>> np.histogram([1, 2, 1], bins=[0, 1, 2, 3])\n (array([0, 2, 1]), array([0, 1, 2, 3]))\n >>> np.histogram(np.arange(4), bins=np.arange(5), density=True)\n (array([ 0.25, 0.25, 0.25, 0.25]), array([0, 1, 2, 3, 4]))\n >>> np.histogram([[1, 2, 1], [1, 0, 1]], bins=[0,1,2,3])\n (array([1, 4, 1]), array([0, 1, 2, 3]))\n\n >>> a = np.arange(5)\n >>> hist, bin_edges = np.histogram(a, density=True)\n >>> hist\n array([ 0.5, 0. , 0.5, 0. , 0. , 0.5, 0. , 0.5, 0. , 0.5])\n >>> hist.sum()\n 2.4999999999999996\n >>> np.sum(hist*np.diff(bin_edges))\n 1.0\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_209histogram = {__Pyx_NAMESTR("histogram"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_209histogram, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_208histogram)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_209histogram(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_bins = 0; CYTHON_UNUSED PyObject *__pyx_v_range = 0; CYTHON_UNUSED PyObject *__pyx_v_normed = 0; CYTHON_UNUSED PyObject *__pyx_v_weights = 0; CYTHON_UNUSED PyObject *__pyx_v_density = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("histogram (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__bins,&__pyx_n_s__range,&__pyx_n_s__normed,&__pyx_n_s__weights,&__pyx_n_s__density,0}; PyObject* values[6] = {0,0,0,0,0,0}; values[1] = ((PyObject *)__pyx_int_10); /* "ga4py/gain/notimplemented.pyx":5248 * * * def histogram(a, bins=10, range=None, normed=False, weights=None, density=None): # <<<<<<<<<<<<<< * """Compute the histogram of a set of data. * */ values[2] = ((PyObject *)Py_None); values[3] = __pyx_k_23; values[4] = ((PyObject *)Py_None); values[5] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bins); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__range); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__normed); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__weights); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__density); if (value) { values[5] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "histogram") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5248; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_bins = values[1]; __pyx_v_range = values[2]; __pyx_v_normed = values[3]; __pyx_v_weights = values[4]; __pyx_v_density = values[5]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("histogram", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5248; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.histogram", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_208histogram(__pyx_self, __pyx_v_a, __pyx_v_bins, __pyx_v_range, __pyx_v_normed, __pyx_v_weights, __pyx_v_density); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_208histogram(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_bins, CYTHON_UNUSED PyObject *__pyx_v_range, CYTHON_UNUSED PyObject *__pyx_v_normed, CYTHON_UNUSED PyObject *__pyx_v_weights, CYTHON_UNUSED PyObject *__pyx_v_density) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("histogram", 0); /* "ga4py/gain/notimplemented.pyx":5330 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.histogram", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_211histogram2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_210histogram2d[] = "Compute the bi-dimensional histogram of two data samples.\n\n Parameters\n ----------\n x : array_like, shape(N,)\n A sequence of values to be histogrammed along the first dimension.\n y : array_like, shape(M,)\n A sequence of values to be histogrammed along the second dimension.\n bins : int or [int, int] or array_like or [array, array], optional\n The bin specification:\n\n * If int, the number of bins for the two dimensions (nx=ny=bins).\n * If [int, int], the number of bins in each dimension (nx, ny = bins).\n * If array_like, the bin edges for the two dimensions (x_edges=y_edges=bins).\n * If [array, array], the bin edges in each dimension (x_edges, y_edges = bins).\n\n range : array_like, shape(2,2), optional\n The leftmost and rightmost edges of the bins along each dimension\n (if not specified explicitly in the `bins` parameters):\n ``[[xmin, xmax], [ymin, ymax]]``. All values outside of this range\n will be considered outliers and not tallied in the histogram.\n normed : bool, optional\n If False, returns the number of samples in each bin. If True, returns\n the bin density, i.e. the bin count divided by the bin area.\n weights : array_like, shape(N,), optional\n An array of values ``w_i`` weighing each sample ``(x_i, y_i)``. Weights\n are normalized to 1 if `normed` is True. If `normed` is False, the\n values of the returned histogram are equal to the sum of the weights\n belonging to the samples falling into each bin.\n\n Returns\n -------\n H : ndarray, shape(nx, ny)\n The bi-dimensional histogram of samples `x` and `y`. Values in `x`\n are histogrammed along the first dimension and values in `y` are\n histogrammed along the second dimension.\n xedges : ndarray, shape(nx,)\n The bin edges along the first dimension.\n yedges : ndarray, shape(ny,)\n The bin e""dges along the second dimension.\n\n See Also\n --------\n histogram: 1D histogram\n histogramdd: Multidimensional histogram\n\n Notes\n -----\n When `normed` is True, then the returned histogram is the sample density,\n defined such that:\n\n .. math::\n \\sum_{i=0}^{nx-1} \\sum_{j=0}^{ny-1} H_{i,j} \\Delta x_i \\Delta y_j = 1\n\n where `H` is the histogram array and :math:`\\Delta x_i \\Delta y_i`\n the area of bin `{i,j}`.\n\n Please note that the histogram does not follow the Cartesian convention\n where `x` values are on the abcissa and `y` values on the ordinate axis.\n Rather, `x` is histogrammed along the first dimension of the array\n (vertical), and `y` along the second dimension of the array (horizontal).\n This ensures compatibility with `histogramdd`.\n\n Examples\n --------\n >>> x, y = np.random.randn(2, 100)\n >>> H, xedges, yedges = np.histogram2d(x, y, bins=(5, 8))\n >>> H.shape, xedges.shape, yedges.shape\n ((5, 8), (6,), (9,))\n\n We can now use the Matplotlib to visualize this 2-dimensional histogram:\n\n >>> extent = [yedges[0], yedges[-1], xedges[-1], xedges[0]]\n >>> import matplotlib.pyplot as plt\n >>> plt.imshow(H, extent=extent, interpolation='nearest')\n \n >>> plt.colorbar()\n \n >>> plt.show()\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_211histogram2d = {__Pyx_NAMESTR("histogram2d"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_211histogram2d, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_210histogram2d)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_211histogram2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_x = 0; CYTHON_UNUSED PyObject *__pyx_v_y = 0; CYTHON_UNUSED PyObject *__pyx_v_bins = 0; CYTHON_UNUSED PyObject *__pyx_v_range = 0; CYTHON_UNUSED PyObject *__pyx_v_normed = 0; CYTHON_UNUSED PyObject *__pyx_v_weights = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("histogram2d (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__y,&__pyx_n_s__bins,&__pyx_n_s__range,&__pyx_n_s__normed,&__pyx_n_s__weights,0}; PyObject* values[6] = {0,0,0,0,0,0}; values[2] = ((PyObject *)__pyx_int_10); /* "ga4py/gain/notimplemented.pyx":5333 * * * def histogram2d(x, y, bins=10, range=None, normed=False, weights=None): # <<<<<<<<<<<<<< * """Compute the bi-dimensional histogram of two data samples. * */ values[3] = ((PyObject *)Py_None); values[4] = __pyx_k_24; values[5] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("histogram2d", 0, 2, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5333; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bins); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__range); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__normed); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__weights); if (value) { values[5] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "histogram2d") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5333; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_x = values[0]; __pyx_v_y = values[1]; __pyx_v_bins = values[2]; __pyx_v_range = values[3]; __pyx_v_normed = values[4]; __pyx_v_weights = values[5]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("histogram2d", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5333; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.histogram2d", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_210histogram2d(__pyx_self, __pyx_v_x, __pyx_v_y, __pyx_v_bins, __pyx_v_range, __pyx_v_normed, __pyx_v_weights); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_210histogram2d(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_y, CYTHON_UNUSED PyObject *__pyx_v_bins, CYTHON_UNUSED PyObject *__pyx_v_range, CYTHON_UNUSED PyObject *__pyx_v_normed, CYTHON_UNUSED PyObject *__pyx_v_weights) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("histogram2d", 0); /* "ga4py/gain/notimplemented.pyx":5415 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5415; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.histogram2d", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_213histogramdd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_212histogramdd[] = "Compute the multidimensional histogram of some data.\n\n Parameters\n ----------\n sample : array_like\n The data to be histogrammed. It must be an (N,D) array or data\n that can be converted to such. The rows of the resulting array\n are the coordinates of points in a D dimensional polytope.\n bins : sequence or int, optional\n The bin specification:\n\n * A sequence of arrays describing the bin edges along each dimension.\n * The number of bins for each dimension (nx, ny, ... =bins)\n * The number of bins for all dimensions (nx=ny=...=bins).\n\n range : sequence, optional\n A sequence of lower and upper bin edges to be used if the edges are\n not given explicitely in `bins`. Defaults to the minimum and maximum\n values along each dimension.\n normed : bool, optional\n If False, returns the number of samples in each bin. If True, returns\n the bin density, ie, the bin count divided by the bin hypervolume.\n weights : array_like (N,), optional\n An array of values `w_i` weighing each sample `(x_i, y_i, z_i, ...)`.\n Weights are normalized to 1 if normed is True. If normed is False, the\n values of the returned histogram are equal to the sum of the weights\n belonging to the samples falling into each bin.\n\n Returns\n -------\n H : ndarray\n The multidimensional histogram of sample x. See normed and weights for\n the different possible semantics.\n edges : list\n A list of D arrays describing the bin edges for each dimension.\n\n See Also\n --------\n histogram: 1-D histogram\n histogram2d: 2-D histogram\n\n Examples\n --------\n >>> r = np.random.randn(100,3)\n >>> H, edges = np.histogramdd(r, bins = (5, 8, 4))\n >>> H.shape, edges[0].size, edges[1].size, edges[2].size\n ((5, 8, 4), 6, 9, 5)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_213histogramdd = {__Pyx_NAMESTR("histogramdd"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_213histogramdd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_212histogramdd)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_213histogramdd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_sample = 0; CYTHON_UNUSED PyObject *__pyx_v_bins = 0; CYTHON_UNUSED PyObject *__pyx_v_range = 0; CYTHON_UNUSED PyObject *__pyx_v_normed = 0; CYTHON_UNUSED PyObject *__pyx_v_weights = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("histogramdd (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__sample,&__pyx_n_s__bins,&__pyx_n_s__range,&__pyx_n_s__normed,&__pyx_n_s__weights,0}; PyObject* values[5] = {0,0,0,0,0}; values[1] = ((PyObject *)__pyx_int_10); /* "ga4py/gain/notimplemented.pyx":5418 * * * def histogramdd(sample, bins=10, range=None, normed=False, weights=None): # <<<<<<<<<<<<<< * """Compute the multidimensional histogram of some data. * */ values[2] = ((PyObject *)Py_None); values[3] = __pyx_k_25; values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sample)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__bins); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__range); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__normed); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__weights); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "histogramdd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5418; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_sample = values[0]; __pyx_v_bins = values[1]; __pyx_v_range = values[2]; __pyx_v_normed = values[3]; __pyx_v_weights = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("histogramdd", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5418; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.histogramdd", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_212histogramdd(__pyx_self, __pyx_v_sample, __pyx_v_bins, __pyx_v_range, __pyx_v_normed, __pyx_v_weights); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_212histogramdd(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_sample, CYTHON_UNUSED PyObject *__pyx_v_bins, CYTHON_UNUSED PyObject *__pyx_v_range, CYTHON_UNUSED PyObject *__pyx_v_normed, CYTHON_UNUSED PyObject *__pyx_v_weights) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("histogramdd", 0); /* "ga4py/gain/notimplemented.pyx":5468 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5468; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.histogramdd", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_215hsplit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_214hsplit[] = "Split an array into multiple sub-arrays horizontally (column-wise).\n\n Please refer to the `split` documentation. `hsplit` is equivalent\n to `split` with ``axis=1``, the array is always split along the second\n axis regardless of the array dimension.\n\n See Also\n --------\n split : Split an array into multiple sub-arrays of equal size.\n\n Examples\n --------\n >>> x = np.arange(16.0).reshape(4, 4)\n >>> x\n array([[ 0., 1., 2., 3.],\n [ 4., 5., 6., 7.],\n [ 8., 9., 10., 11.],\n [ 12., 13., 14., 15.]])\n >>> np.hsplit(x, 2)\n [array([[ 0., 1.],\n [ 4., 5.],\n [ 8., 9.],\n [ 12., 13.]]),\n array([[ 2., 3.],\n [ 6., 7.],\n [ 10., 11.],\n [ 14., 15.]])]\n >>> np.hsplit(x, np.array([3, 6]))\n [array([[ 0., 1., 2.],\n [ 4., 5., 6.],\n [ 8., 9., 10.],\n [ 12., 13., 14.]]),\n array([[ 3.],\n [ 7.],\n [ 11.],\n [ 15.]]),\n array([], dtype=float64)]\n\n With a higher dimensional array the split is still along the second axis.\n\n >>> x = np.arange(8.0).reshape(2, 2, 2)\n >>> x\n array([[[ 0., 1.],\n [ 2., 3.]],\n [[ 4., 5.],\n [ 6., 7.]]])\n >>> np.hsplit(x, 2)\n [array([[[ 0., 1.]],\n [[ 4., 5.]]]),\n array([[[ 2., 3.]],\n [[ 6., 7.]]])]\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_215hsplit = {__Pyx_NAMESTR("hsplit"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_215hsplit, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_214hsplit)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_215hsplit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_ary = 0; CYTHON_UNUSED PyObject *__pyx_v_indices_or_sections = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("hsplit (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__ary,&__pyx_n_s__indices_or_sections,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ary)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__indices_or_sections)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("hsplit", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5471; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "hsplit") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5471; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_ary = values[0]; __pyx_v_indices_or_sections = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("hsplit", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5471; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.hsplit", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_214hsplit(__pyx_self, __pyx_v_ary, __pyx_v_indices_or_sections); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":5471 * * * def hsplit(ary, indices_or_sections): # <<<<<<<<<<<<<< * """Split an array into multiple sub-arrays horizontally (column-wise). * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_214hsplit(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ary, CYTHON_UNUSED PyObject *__pyx_v_indices_or_sections) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("hsplit", 0); /* "ga4py/gain/notimplemented.pyx":5525 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5525; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.hsplit", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_217hstack(PyObject *__pyx_self, PyObject *__pyx_v_tup); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_216hstack[] = "Stack arrays in sequence horizontally (column wise).\n\n Take a sequence of arrays and stack them horizontally to make\n a single array. Rebuild arrays divided by `hsplit`.\n\n Parameters\n ----------\n tup : sequence of ndarrays\n All arrays must have the same shape along all but the second axis.\n\n Returns\n -------\n stacked : ndarray\n The array formed by stacking the given arrays.\n\n See Also\n --------\n vstack : Stack arrays in sequence vertically (row wise).\n dstack : Stack arrays in sequence depth wise (along third axis).\n concatenate : Join a sequence of arrays together.\n hsplit : Split array along second axis.\n\n Notes\n -----\n Equivalent to ``np.concatenate(tup, axis=1)``\n\n Examples\n --------\n >>> a = np.array((1,2,3))\n >>> b = np.array((2,3,4))\n >>> np.hstack((a,b))\n array([1, 2, 3, 2, 3, 4])\n >>> a = np.array([[1],[2],[3]])\n >>> b = np.array([[2],[3],[4]])\n >>> np.hstack((a,b))\n array([[1, 2],\n [2, 3],\n [3, 4]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_217hstack = {__Pyx_NAMESTR("hstack"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_217hstack, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_216hstack)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_217hstack(PyObject *__pyx_self, PyObject *__pyx_v_tup) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("hstack (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_216hstack(__pyx_self, ((PyObject *)__pyx_v_tup)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":5528 * * * def hstack(tup): # <<<<<<<<<<<<<< * """Stack arrays in sequence horizontally (column wise). * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_216hstack(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_tup) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("hstack", 0); /* "ga4py/gain/notimplemented.pyx":5569 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.hstack", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_219i0(PyObject *__pyx_self, PyObject *__pyx_v_x); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_218i0[] = "Modified Bessel function of the first kind, order 0.\n\n Usually denoted :math:`I_0`. This function does broadcast, but will *not*\n \"up-cast\" int dtype arguments unless accompanied by at least one float or\n complex dtype argument (see Raises below).\n\n Parameters\n ----------\n x : array_like, dtype float or complex\n Argument of the Bessel function.\n\n Returns\n -------\n out : ndarray, shape = x.shape, dtype = x.dtype\n The modified Bessel function evaluated at each of the elements of `x`.\n\n Raises\n ------\n TypeError: array cannot be safely cast to required type\n If argument consists exclusively of int dtypes.\n\n See Also\n --------\n scipy.special.iv, scipy.special.ive\n\n Notes\n -----\n We use the algorithm published by Clenshaw [1]_ and referenced by\n Abramowitz and Stegun [2]_, for which the function domain is partitioned\n into the two intervals [0,8] and (8,inf), and Chebyshev polynomial\n expansions are employed in each interval. Relative error on the domain\n [0,30] using IEEE arithmetic is documented [3]_ as having a peak of 5.8e-16\n with an rms of 1.4e-16 (n = 30000).\n\n References\n ----------\n .. [1] C. W. Clenshaw, \"Chebyshev series for mathematical functions,\" in\n *National Physical Laboratory Mathematical Tables*, vol. 5, London:\n Her Majesty's Stationery Office, 1962.\n .. [2] M. Abramowitz and I. A. Stegun, *Handbook of Mathematical\n Functions*, 10th printing, New York: Dover, 1964, pp. 379.\n http://www.math.sfu.ca/~cbm/aands/page_379.htm\n .. [3] http://kobesearch.cpan.org/htdocs/Math-Cephes/Math/Cephes.html\n\n Examples\n --------\n >>> np.i0([0.])\n array(1.0)\n >>> np.i0([0., 1. + 2j])\n array([ 1.00000000+0.j , 0.18785373+0.64616944j])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_219i0 = {__Pyx_NAMESTR("i0"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_219i0, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_218i0)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_219i0(PyObject *__pyx_self, PyObject *__pyx_v_x) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("i0 (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_218i0(__pyx_self, ((PyObject *)__pyx_v_x)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":5572 * * * def i0(x): # <<<<<<<<<<<<<< * """Modified Bessel function of the first kind, order 0. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_218i0(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("i0", 0); /* "ga4py/gain/notimplemented.pyx":5625 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.i0", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_221imag(PyObject *__pyx_self, PyObject *__pyx_v_val); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_220imag[] = "Return the imaginary part of the elements of the array.\n\n Parameters\n ----------\n val : array_like\n Input array.\n\n Returns\n -------\n out : ndarray\n Output array. If `val` is real, the type of `val` is used for the\n output. If `val` has complex elements, the returned type is float.\n\n See Also\n --------\n real, angle, real_if_close\n\n Examples\n --------\n >>> a = np.array([1+2j, 3+4j, 5+6j])\n >>> a.imag\n array([ 2., 4., 6.])\n >>> a.imag = np.array([8, 10, 12])\n >>> a\n array([ 1. +8.j, 3.+10.j, 5.+12.j])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_221imag = {__Pyx_NAMESTR("imag"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_221imag, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_220imag)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_221imag(PyObject *__pyx_self, PyObject *__pyx_v_val) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("imag (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_220imag(__pyx_self, ((PyObject *)__pyx_v_val)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":5628 * * * def imag(val): # <<<<<<<<<<<<<< * """Return the imaginary part of the elements of the array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_220imag(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_val) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("imag", 0); /* "ga4py/gain/notimplemented.pyx":5656 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5656; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.imag", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_223in1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_222in1d[] = "Test whether each element of a 1D array is also present in a second array.\n\n Returns a boolean array the same length as `ar1` that is True\n where an element of `ar1` is in `ar2` and False otherwise.\n\n Parameters\n ----------\n ar1 : array_like, shape (M,)\n Input array.\n ar2 : array_like\n The values against which to test each value of `ar1`.\n assume_unique : bool, optional\n If True, the input arrays are both assumed to be unique, which\n can speed up the calculation. Default is False.\n\n Returns\n -------\n mask : ndarray of bools, shape(M,)\n The values `ar1[mask]` are in `ar2`.\n\n See Also\n --------\n numpy.lib.arraysetops : Module with a number of other functions for\n performing set operations on arrays.\n\n Notes\n -----\n `in1d` can be considered as an element-wise function version of the\n python keyword `in`, for 1D sequences. ``in1d(a, b)`` is roughly\n equivalent to ``np.array([item in b for item in a])``.\n\n .. versionadded:: 1.4.0\n\n Examples\n --------\n >>> test = np.array([0, 1, 2, 5, 0])\n >>> states = [0, 2]\n >>> mask = np.in1d(test, states)\n >>> mask\n array([ True, False, True, False, True], dtype=bool)\n >>> test[mask]\n array([0, 2, 0])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_223in1d = {__Pyx_NAMESTR("in1d"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_223in1d, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_222in1d)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_223in1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_ar1 = 0; CYTHON_UNUSED PyObject *__pyx_v_ar2 = 0; CYTHON_UNUSED PyObject *__pyx_v_assume_unique = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("in1d (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__ar1,&__pyx_n_s__ar2,&__pyx_n_s__assume_unique,0}; PyObject* values[3] = {0,0,0}; values[2] = __pyx_k_26; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ar1)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ar2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("in1d", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5659; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__assume_unique); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "in1d") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5659; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_ar1 = values[0]; __pyx_v_ar2 = values[1]; __pyx_v_assume_unique = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("in1d", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5659; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.in1d", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_222in1d(__pyx_self, __pyx_v_ar1, __pyx_v_ar2, __pyx_v_assume_unique); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":5659 * * * def in1d(ar1, ar2, assume_unique=False): # <<<<<<<<<<<<<< * """Test whether each element of a 1D array is also present in a second array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_222in1d(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ar1, CYTHON_UNUSED PyObject *__pyx_v_ar2, CYTHON_UNUSED PyObject *__pyx_v_assume_unique) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("in1d", 0); /* "ga4py/gain/notimplemented.pyx":5704 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5704; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.in1d", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_225indices(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_224indices[] = "Return an array representing the indices of a grid.\n\n Compute an array where the subarrays contain index values 0,1,...\n varying only along the corresponding axis.\n\n Parameters\n ----------\n dimensions : sequence of ints\n The shape of the grid.\n dtype : dtype, optional\n Data type of the result.\n\n Returns\n -------\n grid : ndarray\n The array of grid indices,\n ``grid.shape = (len(dimensions),) + tuple(dimensions)``.\n\n See Also\n --------\n mgrid, meshgrid\n\n Notes\n -----\n The output shape is obtained by prepending the number of dimensions\n in front of the tuple of dimensions, i.e. if `dimensions` is a tuple\n ``(r0, ..., rN-1)`` of length ``N``, the output shape is\n ``(N,r0,...,rN-1)``.\n\n The subarrays ``grid[k]`` contains the N-D array of indices along the\n ``k-th`` axis. Explicitly::\n\n grid[k,i0,i1,...,iN-1] = ik\n\n Examples\n --------\n >>> grid = np.indices((2, 3))\n >>> grid.shape\n (2, 2, 3)\n >>> grid[0] # row indices\n array([[0, 0, 0],\n [1, 1, 1]])\n >>> grid[1] # column indices\n array([[0, 1, 2],\n [0, 1, 2]])\n\n The indices can be used as an index into an array.\n\n >>> x = np.arange(20).reshape(5, 4)\n >>> row, col = np.indices((2, 3))\n >>> x[row, col]\n array([[0, 1, 2],\n [4, 5, 6]])\n\n Note that it would be more straightforward in the above example to\n extract the required elements directly with ``x[:2, :3]``.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_225indices = {__Pyx_NAMESTR("indices"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_225indices, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_224indices)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_225indices(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_dimensions = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("indices (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__dimensions,&__pyx_n_s__dtype,0}; PyObject* values[2] = {0,0}; values[1] = __pyx_k_27; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dimensions)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "indices") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5707; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_dimensions = values[0]; __pyx_v_dtype = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("indices", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5707; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.indices", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_224indices(__pyx_self, __pyx_v_dimensions, __pyx_v_dtype); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":5707 * * * def indices(dimensions, dtype=int): # <<<<<<<<<<<<<< * """Return an array representing the indices of a grid. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_224indices(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_dimensions, CYTHON_UNUSED PyObject *__pyx_v_dtype) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("indices", 0); /* "ga4py/gain/notimplemented.pyx":5766 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5766; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.indices", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_227info(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_226info[] = "Get help information for a function, class, or module.\n\n Parameters\n ----------\n object : object or str, optional\n Input object or name to get information about. If `object` is a\n numpy object, its docstring is given. If it is a string, available\n modules are searched for matching objects.\n If None, information about `info` itself is returned.\n maxwidth : int, optional\n Printing width.\n output : file like object, optional\n File like object that the output is written to, default is ``stdout``.\n The object has to be opened in 'w' or 'a' mode.\n toplevel : str, optional\n Start search at this level.\n\n See Also\n --------\n source, lookfor\n\n Notes\n -----\n When used interactively with an object, ``np.info(obj)`` is equivalent to\n ``help(obj)`` on the Python prompt or ``obj?`` on the IPython prompt.\n\n Examples\n --------\n >>> np.info(np.polyval) # doctest: +SKIP\n polyval(p, x)\n Evaluate the polynomial p at x.\n ...\n\n When using a string for `object` it is possible to get multiple results.\n\n >>> np.info('fft') # doctest: +SKIP\n *** Found in numpy ***\n Core FFT routines\n ...\n *** Found in numpy.fft ***\n fft(a, n=None, axis=-1)\n ...\n *** Repeat reference found in numpy.fft.fftpack ***\n *** Total of 3 references found. ***\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_227info = {__Pyx_NAMESTR("info"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_227info, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_226info)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_227info(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_object = 0; CYTHON_UNUSED PyObject *__pyx_v_maxwidth = 0; CYTHON_UNUSED PyObject *__pyx_v_output = 0; CYTHON_UNUSED PyObject *__pyx_v_toplevel = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("info (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__object,&__pyx_n_s__maxwidth,&__pyx_n_s__output,&__pyx_n_s__toplevel,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":5769 * * * def info(object=None, maxwidth=76, output=sys.stdout, toplevel='numpy'): # <<<<<<<<<<<<<< * """Get help information for a function, class, or module. * */ values[0] = ((PyObject *)Py_None); values[1] = ((PyObject *)__pyx_int_76); values[2] = __pyx_k_28; values[3] = ((PyObject *)__pyx_n_s__numpy); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__object); if (value) { values[0] = value; kw_args--; } } case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__maxwidth); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__output); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__toplevel); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "info") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5769; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_object = values[0]; __pyx_v_maxwidth = values[1]; __pyx_v_output = values[2]; __pyx_v_toplevel = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("info", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5769; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.info", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_226info(__pyx_self, __pyx_v_object, __pyx_v_maxwidth, __pyx_v_output, __pyx_v_toplevel); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_226info(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_object, CYTHON_UNUSED PyObject *__pyx_v_maxwidth, CYTHON_UNUSED PyObject *__pyx_v_output, CYTHON_UNUSED PyObject *__pyx_v_toplevel) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("info", 0); /* "ga4py/gain/notimplemented.pyx":5816 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.info", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_229inner(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_228inner[] = "inner(a, b)\n\n Inner product of two arrays.\n\n Ordinary inner product of vectors for 1-D arrays (without complex\n conjugation), in higher dimensions a sum product over the last axes.\n\n Parameters\n ----------\n a, b : array_like\n If `a` and `b` are nonscalar, their last dimensions of must match.\n\n Returns\n -------\n out : ndarray\n `out.shape = a.shape[:-1] + b.shape[:-1]`\n\n Raises\n ------\n ValueError\n If the last dimension of `a` and `b` has different size.\n\n See Also\n --------\n tensordot : Sum products over arbitrary axes.\n dot : Generalised matrix product, using second last dimension of `b`.\n einsum : Einstein summation convention.\n\n Notes\n -----\n For vectors (1-D arrays) it computes the ordinary inner-product::\n\n np.inner(a, b) = sum(a[:]*b[:])\n\n More generally, if `ndim(a) = r > 0` and `ndim(b) = s > 0`::\n\n np.inner(a, b) = np.tensordot(a, b, axes=(-1,-1))\n\n or explicitly::\n\n np.inner(a, b)[i0,...,ir-1,j0,...,js-1]\n = sum(a[i0,...,ir-1,:]*b[j0,...,js-1,:])\n\n In addition `a` or `b` may be scalars, in which case::\n\n np.inner(a,b) = a*b\n\n Examples\n --------\n Ordinary inner product for vectors:\n\n >>> a = np.array([1,2,3])\n >>> b = np.array([0,1,0])\n >>> np.inner(a, b)\n 2\n\n A multidimensional example:\n\n >>> a = np.arange(24).reshape((2,3,4))\n >>> b = np.arange(4)\n >>> np.inner(a, b)\n array([[ 14, 38, 62],\n [ 86, 110, 134]])\n\n An example where `b` is a scalar:\n\n >>> np.inner(np.eye(2), 7)\n array([[ 7., 0.],\n [ 0., 7.]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_229inner = {__Pyx_NAMESTR("inner"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_229inner, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_228inner)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_229inner(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_b = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("inner (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__b,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("inner", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5819; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "inner") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5819; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_a = values[0]; __pyx_v_b = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("inner", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5819; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.inner", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_228inner(__pyx_self, __pyx_v_a, __pyx_v_b); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":5819 * * * def inner(a, b): # <<<<<<<<<<<<<< * """inner(a, b) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_228inner(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_b) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("inner", 0); /* "ga4py/gain/notimplemented.pyx":5892 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5892; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.inner", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_231insert(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_230insert[] = "Insert values along the given axis before the given indices.\n\n Parameters\n ----------\n arr : array_like\n Input array.\n obj : int, slice or sequence of ints\n Object that defines the index or indices before which `values` is\n inserted.\n values : array_like\n Values to insert into `arr`. If the type of `values` is different\n from that of `arr`, `values` is converted to the type of `arr`.\n axis : int, optional\n Axis along which to insert `values`. If `axis` is None then `arr`\n is flattened first.\n\n Returns\n -------\n out : ndarray\n A copy of `arr` with `values` inserted. Note that `insert`\n does not occur in-place: a new array is returned. If\n `axis` is None, `out` is a flattened array.\n\n See Also\n --------\n append : Append elements at the end of an array.\n delete : Delete elements from an array.\n\n Examples\n --------\n >>> a = np.array([[1, 1], [2, 2], [3, 3]])\n >>> a\n array([[1, 1],\n [2, 2],\n [3, 3]])\n >>> np.insert(a, 1, 5)\n array([1, 5, 1, 2, 2, 3, 3])\n >>> np.insert(a, 1, 5, axis=1)\n array([[1, 5, 1],\n [2, 5, 2],\n [3, 5, 3]])\n\n >>> b = a.flatten()\n >>> b\n array([1, 1, 2, 2, 3, 3])\n >>> np.insert(b, [2, 2], [5, 6])\n array([1, 1, 5, 6, 2, 2, 3, 3])\n\n >>> np.insert(b, slice(2, 4), [5, 6])\n array([1, 1, 5, 2, 6, 2, 3, 3])\n\n >>> np.insert(b, [2, 2], [7.13, False]) # type casting\n array([1, 1, 7, 0, 2, 2, 3, 3])\n\n >>> x = np.arange(8).reshape(2, 4)\n >>> idx = (1, 3)\n >>> np.insert(x, idx, 999, axis=1)\n array([[ 0, 999, 1, 2, 999, 3],\n [ 4, 999, 5, 6, 999, 7]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_231insert = {__Pyx_NAMESTR("insert"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_231insert, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_230insert)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_231insert(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_arr = 0; CYTHON_UNUSED PyObject *__pyx_v_obj = 0; CYTHON_UNUSED PyObject *__pyx_v_values = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("insert (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__arr,&__pyx_n_s__obj,&__pyx_n_s__values,&__pyx_n_s__axis,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":5895 * * * def insert(arr, obj, values, axis=None): # <<<<<<<<<<<<<< * """Insert values along the given axis before the given indices. * */ values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arr)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__obj)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("insert", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5895; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__values)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("insert", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5895; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insert") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5895; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_arr = values[0]; __pyx_v_obj = values[1]; __pyx_v_values = values[2]; __pyx_v_axis = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("insert", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5895; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.insert", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_230insert(__pyx_self, __pyx_v_arr, __pyx_v_obj, __pyx_v_values, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_230insert(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arr, CYTHON_UNUSED PyObject *__pyx_v_obj, CYTHON_UNUSED PyObject *__pyx_v_values, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("insert", 0); /* "ga4py/gain/notimplemented.pyx":5957 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.insert", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_233int_asbuffer(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_232int_asbuffer[] = "\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_233int_asbuffer = {__Pyx_NAMESTR("int_asbuffer"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_233int_asbuffer, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_232int_asbuffer)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_233int_asbuffer(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("int_asbuffer (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_232int_asbuffer(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":5960 * * * def int_asbuffer(): # <<<<<<<<<<<<<< * """ * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_232int_asbuffer(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("int_asbuffer", 0); /* "ga4py/gain/notimplemented.pyx":5965 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5965; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.int_asbuffer", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_235interp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_234interp[] = "One-dimensional linear interpolation.\n\n Returns the one-dimensional piecewise linear interpolant to a function\n with given values at discrete data-points.\n\n Parameters\n ----------\n x : array_like\n The x-coordinates of the interpolated values.\n\n xp : 1-D sequence of floats\n The x-coordinates of the data points, must be increasing.\n\n fp : 1-D sequence of floats\n The y-coordinates of the data points, same length as `xp`.\n\n left : float, optional\n Value to return for `x < xp[0]`, default is `fp[0]`.\n\n right : float, optional\n Value to return for `x > xp[-1]`, defaults is `fp[-1]`.\n\n Returns\n -------\n y : {float, ndarray}\n The interpolated values, same shape as `x`.\n\n Raises\n ------\n ValueError\n If `xp` and `fp` have different length\n\n Notes\n -----\n Does not check that the x-coordinate sequence `xp` is increasing.\n If `xp` is not increasing, the results are nonsense.\n A simple check for increasingness is::\n\n np.all(np.diff(xp) > 0)\n\n\n Examples\n --------\n >>> xp = [1, 2, 3]\n >>> fp = [3, 2, 0]\n >>> np.interp(2.5, xp, fp)\n 1.0\n >>> np.interp([0, 1, 1.5, 2.72, 3.14], xp, fp)\n array([ 3. , 3. , 2.5 , 0.56, 0. ])\n >>> UNDEF = -99.0\n >>> np.interp(3.14, xp, fp, right=UNDEF)\n -99.0\n\n Plot an interpolant to the sine function:\n\n >>> x = np.linspace(0, 2*np.pi, 10)\n >>> y = np.sin(x)\n >>> xvals = np.linspace(0, 2*np.pi, 50)\n >>> yinterp = np.interp(xvals, x, y)\n >>> import matplotlib.pyplot as plt\n >>> plt.plot(x, y, 'o')\n []\n >>> plt.plot(xvals, yinterp, '-x')\n []\n >>> plt.show()\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_235interp = {__Pyx_NAMESTR("interp"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_235interp, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_234interp)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_235interp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_x = 0; CYTHON_UNUSED PyObject *__pyx_v_xp = 0; CYTHON_UNUSED PyObject *__pyx_v_fp = 0; CYTHON_UNUSED PyObject *__pyx_v_left = 0; CYTHON_UNUSED PyObject *__pyx_v_right = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("interp (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__xp,&__pyx_n_s__fp,&__pyx_n_s__left,&__pyx_n_s__right,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":5968 * * * def interp(x, xp, fp, left=None, right=None): # <<<<<<<<<<<<<< * """One-dimensional linear interpolation. * */ values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__xp)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("interp", 0, 3, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5968; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fp)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("interp", 0, 3, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5968; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__left); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__right); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "interp") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5968; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_x = values[0]; __pyx_v_xp = values[1]; __pyx_v_fp = values[2]; __pyx_v_left = values[3]; __pyx_v_right = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("interp", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5968; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.interp", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_234interp(__pyx_self, __pyx_v_x, __pyx_v_xp, __pyx_v_fp, __pyx_v_left, __pyx_v_right); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_234interp(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_xp, CYTHON_UNUSED PyObject *__pyx_v_fp, CYTHON_UNUSED PyObject *__pyx_v_left, CYTHON_UNUSED PyObject *__pyx_v_right) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("interp", 0); /* "ga4py/gain/notimplemented.pyx":6036 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6036; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.interp", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_237intersect1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_236intersect1d[] = "Find the intersection of two arrays.\n\n Return the sorted, unique values that are in both of the input arrays.\n\n Parameters\n ----------\n ar1, ar2 : array_like\n Input arrays.\n assume_unique : bool\n If True, the input arrays are both assumed to be unique, which\n can speed up the calculation. Default is False.\n\n Returns\n -------\n out : ndarray\n Sorted 1D array of common and unique elements.\n\n See Also\n --------\n numpy.lib.arraysetops : Module with a number of other functions for\n performing set operations on arrays.\n\n Examples\n --------\n >>> np.intersect1d([1, 3, 4, 3], [3, 1, 2, 1])\n array([1, 3])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_237intersect1d = {__Pyx_NAMESTR("intersect1d"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_237intersect1d, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_236intersect1d)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_237intersect1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_ar1 = 0; CYTHON_UNUSED PyObject *__pyx_v_ar2 = 0; CYTHON_UNUSED PyObject *__pyx_v_assume_unique = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("intersect1d (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__ar1,&__pyx_n_s__ar2,&__pyx_n_s__assume_unique,0}; PyObject* values[3] = {0,0,0}; values[2] = __pyx_k_29; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ar1)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ar2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("intersect1d", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6039; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__assume_unique); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "intersect1d") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6039; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_ar1 = values[0]; __pyx_v_ar2 = values[1]; __pyx_v_assume_unique = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("intersect1d", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6039; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.intersect1d", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_236intersect1d(__pyx_self, __pyx_v_ar1, __pyx_v_ar2, __pyx_v_assume_unique); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6039 * * * def intersect1d(ar1, ar2, assume_unique=False): # <<<<<<<<<<<<<< * """Find the intersection of two arrays. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_236intersect1d(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ar1, CYTHON_UNUSED PyObject *__pyx_v_ar2, CYTHON_UNUSED PyObject *__pyx_v_assume_unique) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("intersect1d", 0); /* "ga4py/gain/notimplemented.pyx":6068 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6068; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.intersect1d", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_239ipmt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_238ipmt[] = "Not implemented. Compute the payment portion for loan interest.\n\n Parameters\n ----------\n rate : scalar or array_like of shape(M, )\n Rate of interest as decimal (not per cent) per period\n per : scalar or array_like of shape(M, )\n Interest paid against the loan changes during the life or the loan.\n The `per` is the payment period to calculate the interest amount.\n nper : scalar or array_like of shape(M, )\n Number of compounding periods\n pv : scalar or array_like of shape(M, )\n Present value\n fv : scalar or array_like of shape(M, ), optional\n Future value\n when : {{'begin', 1}, {'end', 0}}, {string, int}, optional\n When payments are due ('begin' (1) or 'end' (0)).\n Defaults to {'end', 0}.\n\n Returns\n -------\n out : ndarray\n Interest portion of payment. If all input is scalar, returns a scalar\n float. If any input is array_like, returns interest payment for each\n input element. If multiple inputs are array_like, they all must have\n the same shape.\n\n See Also\n --------\n ppmt, pmt, pv\n\n Notes\n -----\n The total payment is made up of payment against principal plus interest.\n\n ``pmt = ppmt + ipmt``\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_239ipmt = {__Pyx_NAMESTR("ipmt"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_239ipmt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_238ipmt)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_239ipmt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_rate = 0; CYTHON_UNUSED PyObject *__pyx_v_per = 0; CYTHON_UNUSED PyObject *__pyx_v_nper = 0; CYTHON_UNUSED PyObject *__pyx_v_pv = 0; CYTHON_UNUSED PyObject *__pyx_v_fv = 0; CYTHON_UNUSED PyObject *__pyx_v_when = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("ipmt (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__rate,&__pyx_n_s__per,&__pyx_n_s__nper,&__pyx_n_s__pv,&__pyx_n_s__fv,&__pyx_n_s__when,0}; PyObject* values[6] = {0,0,0,0,0,0}; values[4] = __pyx_k_30; values[5] = ((PyObject *)__pyx_n_s__end); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__rate)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__per)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("ipmt", 0, 4, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6071; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nper)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("ipmt", 0, 4, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6071; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pv)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("ipmt", 0, 4, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6071; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fv); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__when); if (value) { values[5] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ipmt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6071; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_rate = values[0]; __pyx_v_per = values[1]; __pyx_v_nper = values[2]; __pyx_v_pv = values[3]; __pyx_v_fv = values[4]; __pyx_v_when = values[5]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("ipmt", 0, 4, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6071; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ipmt", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_238ipmt(__pyx_self, __pyx_v_rate, __pyx_v_per, __pyx_v_nper, __pyx_v_pv, __pyx_v_fv, __pyx_v_when); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6071 * * * def ipmt(rate, per, nper, pv, fv=0.0, when='end'): # <<<<<<<<<<<<<< * """Not implemented. Compute the payment portion for loan interest. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_238ipmt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rate, CYTHON_UNUSED PyObject *__pyx_v_per, CYTHON_UNUSED PyObject *__pyx_v_nper, CYTHON_UNUSED PyObject *__pyx_v_pv, CYTHON_UNUSED PyObject *__pyx_v_fv, CYTHON_UNUSED PyObject *__pyx_v_when) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("ipmt", 0); /* "ga4py/gain/notimplemented.pyx":6110 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ipmt", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_241irr(PyObject *__pyx_self, PyObject *__pyx_v_values); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_240irr[] = "Return the Internal Rate of Return (IRR).\n\n This is the \"average\" periodically compounded rate of return\n that gives a net present value of 0.0; for a more complete explanation,\n see Notes below.\n\n Parameters\n ----------\n values : array_like, shape(N,)\n Input cash flows per time period. By convention, net \"deposits\"\n are negative and net \"withdrawals\" are positive. Thus, for example,\n at least the first element of `values`, which represents the initial\n investment, will typically be negative.\n\n Returns\n -------\n out : float\n Internal Rate of Return for periodic input values.\n\n Notes\n -----\n The IRR is perhaps best understood through an example (illustrated\n using np.irr in the Examples section below). Suppose one invests\n 100 units and then makes the following withdrawals at regular\n (fixed) intervals: 39, 59, 55, 20. Assuming the ending value is 0,\n one's 100 unit investment yields 173 units; however, due to the\n combination of compounding and the periodic withdrawals, the\n \"average\" rate of return is neither simply 0.73/4 nor (1.73)^0.25-1.\n Rather, it is the solution (for :math:`r`) of the equation:\n\n .. math:: -100 + \014rac{39}{1+r} + \014rac{59}{(1+r)^2}\n + \014rac{55}{(1+r)^3} + \014rac{20}{(1+r)^4} = 0\n\n In general, for `values` :math:`= [v_0, v_1, ... v_M]`,\n irr is the solution of the equation: [G]_\n\n .. math:: \\sum_{t=0}^M{\014rac{v_t}{(1+irr)^{t}}} = 0\n\n References\n ----------\n .. [G] L. J. Gitman, \"Principles of Managerial Finance, Brief,\" 3rd ed.,\n Addison-Wesley, 2003, pg. 348.\n\n Examples\n --------\n >>> np.irr([-100, 39, 59, 55, 20])\n 0.2809484211599611\n\n (Compare with the Example given for numpy.lib.financial.npv)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_241irr = {__Pyx_NAMESTR("irr"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_241irr, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_240irr)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_241irr(PyObject *__pyx_self, PyObject *__pyx_v_values) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("irr (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_240irr(__pyx_self, ((PyObject *)__pyx_v_values)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6113 * * * def irr(values): # <<<<<<<<<<<<<< * """Return the Internal Rate of Return (IRR). * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_240irr(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_values) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("irr", 0); /* "ga4py/gain/notimplemented.pyx":6165 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.irr", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_243iscomplex(PyObject *__pyx_self, PyObject *__pyx_v_x); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_242iscomplex[] = "Returns a bool array, where True if input element is complex.\n\n What is tested is whether the input has a non-zero imaginary part, not if\n the input type is complex.\n\n Parameters\n ----------\n x : array_like\n Input array.\n\n Returns\n -------\n out : ndarray of bools\n Output array.\n\n See Also\n --------\n isreal\n iscomplexobj : Return True if x is a complex type or an array of complex\n numbers.\n\n Examples\n --------\n >>> np.iscomplex([1+1j, 1+0j, 4.5, 3, 2, 2j])\n array([ True, False, False, False, False, True], dtype=bool)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_243iscomplex = {__Pyx_NAMESTR("iscomplex"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_243iscomplex, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_242iscomplex)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_243iscomplex(PyObject *__pyx_self, PyObject *__pyx_v_x) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("iscomplex (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_242iscomplex(__pyx_self, ((PyObject *)__pyx_v_x)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6168 * * * def iscomplex(x): # <<<<<<<<<<<<<< * """Returns a bool array, where True if input element is complex. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_242iscomplex(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("iscomplex", 0); /* "ga4py/gain/notimplemented.pyx":6196 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.iscomplex", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_245iscomplexobj(PyObject *__pyx_self, PyObject *__pyx_v_x); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_244iscomplexobj[] = "Return True if x is a complex type or an array of complex numbers.\n\n The type of the input is checked, not the value. So even if the input\n has an imaginary part equal to zero, `iscomplexobj` evaluates to True\n if the data type is complex.\n\n Parameters\n ----------\n x : any\n The input can be of any type and shape.\n\n Returns\n -------\n y : bool\n The return value, True if `x` is of a complex type.\n\n See Also\n --------\n isrealobj, iscomplex\n\n Examples\n --------\n >>> np.iscomplexobj(1)\n False\n >>> np.iscomplexobj(1+0j)\n True\n >>> np.iscomplexobj([3, 1+0j, True])\n True\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_245iscomplexobj = {__Pyx_NAMESTR("iscomplexobj"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_245iscomplexobj, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_244iscomplexobj)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_245iscomplexobj(PyObject *__pyx_self, PyObject *__pyx_v_x) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("iscomplexobj (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_244iscomplexobj(__pyx_self, ((PyObject *)__pyx_v_x)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6199 * * * def iscomplexobj(x): # <<<<<<<<<<<<<< * """Return True if x is a complex type or an array of complex numbers. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_244iscomplexobj(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("iscomplexobj", 0); /* "ga4py/gain/notimplemented.pyx":6230 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.iscomplexobj", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_247isfortran(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_246isfortran[] = "Returns True if array is arranged in Fortran-order in memory\n and dimension > 1.\n\n Parameters\n ----------\n a : ndarray\n Input array.\n\n\n Examples\n --------\n\n np.array allows to specify whether the array is written in C-contiguous\n order (last index varies the fastest), or FORTRAN-contiguous order in\n memory (first index varies the fastest).\n\n >>> a = np.array([[1, 2, 3], [4, 5, 6]], order='C')\n >>> a\n array([[1, 2, 3],\n [4, 5, 6]])\n >>> np.isfortran(a)\n False\n\n >>> b = np.array([[1, 2, 3], [4, 5, 6]], order='FORTRAN')\n >>> b\n array([[1, 2, 3],\n [4, 5, 6]])\n >>> np.isfortran(b)\n True\n\n\n The transpose of a C-ordered array is a FORTRAN-ordered array.\n\n >>> a = np.array([[1, 2, 3], [4, 5, 6]], order='C')\n >>> a\n array([[1, 2, 3],\n [4, 5, 6]])\n >>> np.isfortran(a)\n False\n >>> b = a.T\n >>> b\n array([[1, 4],\n [2, 5],\n [3, 6]])\n >>> np.isfortran(b)\n True\n\n 1-D arrays always evaluate as False.\n\n >>> np.isfortran(np.array([1, 2], order='FORTRAN'))\n False\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_247isfortran = {__Pyx_NAMESTR("isfortran"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_247isfortran, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_246isfortran)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_247isfortran(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("isfortran (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_246isfortran(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6233 * * * def isfortran(a): # <<<<<<<<<<<<<< * """Returns True if array is arranged in Fortran-order in memory * and dimension > 1. */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_246isfortran(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("isfortran", 0); /* "ga4py/gain/notimplemented.pyx":6287 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6287; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.isfortran", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_249isneginf(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_248isneginf[] = "Test element-wise for negative infinity, return result as bool array.\n\n Parameters\n ----------\n x : array_like\n The input array.\n y : array_like, optional\n A boolean array with the same shape and type as `x` to store the\n result.\n\n Returns\n -------\n y : ndarray\n A boolean array with the same dimensions as the input.\n If second argument is not supplied then a numpy boolean array is\n returned with values True where the corresponding element of the\n input is negative infinity and values False where the element of\n the input is not negative infinity.\n\n If a second argument is supplied the result is stored there. If the\n type of that array is a numeric type the result is represented as\n zeros and ones, if the type is boolean then as False and True. The\n return value `y` is then a reference to that array.\n\n See Also\n --------\n isinf, isposinf, isnan, isfinite\n\n Notes\n -----\n Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic\n (IEEE 754).\n\n Errors result if the second argument is also supplied when x is a scalar\n input, or if first and second arguments have different shapes.\n\n Examples\n --------\n >>> np.isneginf(np.NINF)\n array(True, dtype=bool)\n >>> np.isneginf(np.inf)\n array(False, dtype=bool)\n >>> np.isneginf(np.PINF)\n array(False, dtype=bool)\n >>> np.isneginf([-np.inf, 0., np.inf])\n array([ True, False, False], dtype=bool)\n\n >>> x = np.array([-np.inf, 0., np.inf])\n >>> y = np.array([2, 2, 2])\n >>> np.isneginf(x, y)\n array([1, 0, 0])\n >>> y\n array([1, 0, 0])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_249isneginf = {__Pyx_NAMESTR("isneginf"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_249isneginf, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_248isneginf)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_249isneginf(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_x = 0; CYTHON_UNUSED PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("isneginf (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":6290 * * * def isneginf(x, y=None): # <<<<<<<<<<<<<< * """Test element-wise for negative infinity, return result as bool array. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isneginf") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6290; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_x = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("isneginf", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6290; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.isneginf", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_248isneginf(__pyx_self, __pyx_v_x, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_248isneginf(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("isneginf", 0); /* "ga4py/gain/notimplemented.pyx":6346 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.isneginf", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_251isposinf(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_250isposinf[] = "Test element-wise for positive infinity, return result as bool array.\n\n Parameters\n ----------\n x : array_like\n The input array.\n y : array_like, optional\n A boolean array with the same shape as `x` to store the result.\n\n Returns\n -------\n y : ndarray\n A boolean array with the same dimensions as the input.\n If second argument is not supplied then a boolean array is returned\n with values True where the corresponding element of the input is\n positive infinity and values False where the element of the input is\n not positive infinity.\n\n If a second argument is supplied the result is stored there. If the\n type of that array is a numeric type the result is represented as zeros\n and ones, if the type is boolean then as False and True.\n The return value `y` is then a reference to that array.\n\n See Also\n --------\n isinf, isneginf, isfinite, isnan\n\n Notes\n -----\n Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic\n (IEEE 754).\n\n Errors result if the second argument is also supplied when `x` is a\n scalar input, or if first and second arguments have different shapes.\n\n Examples\n --------\n >>> np.isposinf(np.PINF)\n array(True, dtype=bool)\n >>> np.isposinf(np.inf)\n array(True, dtype=bool)\n >>> np.isposinf(np.NINF)\n array(False, dtype=bool)\n >>> np.isposinf([-np.inf, 0., np.inf])\n array([False, False, True], dtype=bool)\n\n >>> x = np.array([-np.inf, 0., np.inf])\n >>> y = np.array([2, 2, 2])\n >>> np.isposinf(x, y)\n array([0, 0, 1])\n >>> y\n array([0, 0, 1])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_251isposinf = {__Pyx_NAMESTR("isposinf"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_251isposinf, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_250isposinf)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_251isposinf(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_x = 0; CYTHON_UNUSED PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("isposinf (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":6349 * * * def isposinf(x, y=None): # <<<<<<<<<<<<<< * """Test element-wise for positive infinity, return result as bool array. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isposinf") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6349; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_x = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("isposinf", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6349; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.isposinf", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_250isposinf(__pyx_self, __pyx_v_x, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_250isposinf(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("isposinf", 0); /* "ga4py/gain/notimplemented.pyx":6404 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6404; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.isposinf", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_253isreal(PyObject *__pyx_self, PyObject *__pyx_v_x); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_252isreal[] = "Returns a bool array, where True if input element is real.\n\n If element has complex type with zero complex part, the return value\n for that element is True.\n\n Parameters\n ----------\n x : array_like\n Input array.\n\n Returns\n -------\n out : ndarray, bool\n Boolean array of same shape as `x`.\n\n See Also\n --------\n iscomplex\n isrealobj : Return True if x is not a complex type.\n\n Examples\n --------\n >>> np.isreal([1+1j, 1+0j, 4.5, 3, 2, 2j])\n array([False, True, True, True, True, False], dtype=bool)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_253isreal = {__Pyx_NAMESTR("isreal"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_253isreal, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_252isreal)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_253isreal(PyObject *__pyx_self, PyObject *__pyx_v_x) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("isreal (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_252isreal(__pyx_self, ((PyObject *)__pyx_v_x)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6407 * * * def isreal(x): # <<<<<<<<<<<<<< * """Returns a bool array, where True if input element is real. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_252isreal(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("isreal", 0); /* "ga4py/gain/notimplemented.pyx":6434 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.isreal", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_255isrealobj(PyObject *__pyx_self, PyObject *__pyx_v_x); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_254isrealobj[] = "Return True if x is a not complex type or an array of complex numbers.\n\n The type of the input is checked, not the value. So even if the input\n has an imaginary part equal to zero, `isrealobj` evaluates to False\n if the data type is complex.\n\n Parameters\n ----------\n x : any\n The input can be of any type and shape.\n\n Returns\n -------\n y : bool\n The return value, False if `x` is of a complex type.\n\n See Also\n --------\n iscomplexobj, isreal\n\n Examples\n --------\n >>> np.isrealobj(1)\n True\n >>> np.isrealobj(1+0j)\n False\n >>> np.isrealobj([3, 1+0j, True])\n False\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_255isrealobj = {__Pyx_NAMESTR("isrealobj"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_255isrealobj, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_254isrealobj)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_255isrealobj(PyObject *__pyx_self, PyObject *__pyx_v_x) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("isrealobj (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_254isrealobj(__pyx_self, ((PyObject *)__pyx_v_x)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6437 * * * def isrealobj(x): # <<<<<<<<<<<<<< * """Return True if x is a not complex type or an array of complex numbers. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_254isrealobj(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("isrealobj", 0); /* "ga4py/gain/notimplemented.pyx":6468 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6468; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.isrealobj", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_257isscalar(PyObject *__pyx_self, PyObject *__pyx_v_num); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_256isscalar[] = "Returns True if the type of `num` is a scalar type.\n\n Parameters\n ----------\n num : any\n Input argument, can be of any type and shape.\n\n Returns\n -------\n val : bool\n True if `num` is a scalar type, False if it is not.\n\n Examples\n --------\n >>> np.isscalar(3.1)\n True\n >>> np.isscalar([3.1])\n False\n >>> np.isscalar(False)\n True\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_257isscalar = {__Pyx_NAMESTR("isscalar"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_257isscalar, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_256isscalar)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_257isscalar(PyObject *__pyx_self, PyObject *__pyx_v_num) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("isscalar (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_256isscalar(__pyx_self, ((PyObject *)__pyx_v_num)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6471 * * * def isscalar(num): # <<<<<<<<<<<<<< * """Returns True if the type of `num` is a scalar type. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_256isscalar(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_num) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("isscalar", 0); /* "ga4py/gain/notimplemented.pyx":6494 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6494; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.isscalar", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_259issctype(PyObject *__pyx_self, PyObject *__pyx_v_rep); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_258issctype[] = "Determines whether the given object represents a scalar data-type.\n\n Parameters\n ----------\n rep : any\n If `rep` is an instance of a scalar dtype, True is returned. If not,\n False is returned.\n\n Returns\n -------\n out : bool\n Boolean result of check whether `rep` is a scalar dtype.\n\n See Also\n --------\n issubsctype, issubdtype, obj2sctype, sctype2char\n\n Examples\n --------\n >>> np.issctype(np.int32)\n True\n >>> np.issctype(list)\n False\n >>> np.issctype(1.1)\n False\n\n Strings are also a scalar type:\n\n >>> np.issctype(np.dtype('str'))\n True\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_259issctype = {__Pyx_NAMESTR("issctype"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_259issctype, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_258issctype)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_259issctype(PyObject *__pyx_self, PyObject *__pyx_v_rep) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("issctype (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_258issctype(__pyx_self, ((PyObject *)__pyx_v_rep)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6497 * * * def issctype(rep): # <<<<<<<<<<<<<< * """Determines whether the given object represents a scalar data-type. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_258issctype(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rep) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("issctype", 0); /* "ga4py/gain/notimplemented.pyx":6530 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.issctype", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_261issubclass_(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_260issubclass_[] = "Determine if a class is a subclass of a second class.\n\n `issubclass_` is equivalent to the Python built-in ``issubclass``,\n except that it returns False instead of raising a TypeError is one\n of the arguments is not a class.\n\n Parameters\n ----------\n arg1 : class\n Input class. True is returned if `arg1` is a subclass of `arg2`.\n arg2 : class or tuple of classes.\n Input class. If a tuple of classes, True is returned if `arg1` is a\n subclass of any of the tuple elements.\n\n Returns\n -------\n out : bool\n Whether `arg1` is a subclass of `arg2` or not.\n\n See Also\n --------\n issubsctype, issubdtype, issctype\n\n Examples\n --------\n >>> np.issubclass_(np.int32, np.int)\n True\n >>> np.issubclass_(np.int32, np.float)\n False\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_261issubclass_ = {__Pyx_NAMESTR("issubclass_"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_261issubclass_, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_260issubclass_)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_261issubclass_(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_arg1 = 0; CYTHON_UNUSED PyObject *__pyx_v_arg2 = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("issubclass_ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__arg1,&__pyx_n_s__arg2,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arg1)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arg2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("issubclass_", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6533; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "issubclass_") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6533; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_arg1 = values[0]; __pyx_v_arg2 = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("issubclass_", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6533; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.issubclass_", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_260issubclass_(__pyx_self, __pyx_v_arg1, __pyx_v_arg2); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6533 * * * def issubclass_(arg1, arg2): # <<<<<<<<<<<<<< * """Determine if a class is a subclass of a second class. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_260issubclass_(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arg1, CYTHON_UNUSED PyObject *__pyx_v_arg2) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("issubclass_", 0); /* "ga4py/gain/notimplemented.pyx":6565 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6565; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.issubclass_", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_263issubdtype(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_262issubdtype[] = "Returns True if first argument is a typecode lower/equal in type hierarchy.\n\n Parameters\n ----------\n arg1, arg2 : dtype_like\n dtype or string representing a typecode.\n\n Returns\n -------\n out : bool\n\n See Also\n --------\n issubsctype, issubclass_\n numpy.core.numerictypes : Overview of numpy type hierarchy.\n\n Examples\n --------\n >>> np.issubdtype('S1', str)\n True\n >>> np.issubdtype(np.float64, np.float32)\n False\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_263issubdtype = {__Pyx_NAMESTR("issubdtype"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_263issubdtype, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_262issubdtype)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_263issubdtype(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_arg1 = 0; CYTHON_UNUSED PyObject *__pyx_v_arg2 = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("issubdtype (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__arg1,&__pyx_n_s__arg2,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arg1)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arg2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("issubdtype", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6568; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "issubdtype") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6568; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_arg1 = values[0]; __pyx_v_arg2 = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("issubdtype", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6568; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.issubdtype", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_262issubdtype(__pyx_self, __pyx_v_arg1, __pyx_v_arg2); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6568 * * * def issubdtype(arg1, arg2): # <<<<<<<<<<<<<< * """Returns True if first argument is a typecode lower/equal in type hierarchy. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_262issubdtype(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arg1, CYTHON_UNUSED PyObject *__pyx_v_arg2) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("issubdtype", 0); /* "ga4py/gain/notimplemented.pyx":6593 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6593; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.issubdtype", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_265issubsctype(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_264issubsctype[] = "Determine if the first argument is a subclass of the second argument.\n\n Parameters\n ----------\n arg1, arg2 : dtype or dtype specifier\n Data-types.\n\n Returns\n -------\n out : bool\n The result.\n\n See Also\n --------\n issctype, issubdtype,obj2sctype\n\n Examples\n --------\n >>> np.issubsctype('S8', str)\n True\n >>> np.issubsctype(np.array([1]), np.int)\n True\n >>> np.issubsctype(np.array([1]), np.float)\n False\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_265issubsctype = {__Pyx_NAMESTR("issubsctype"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_265issubsctype, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_264issubsctype)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_265issubsctype(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_arg1 = 0; CYTHON_UNUSED PyObject *__pyx_v_arg2 = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("issubsctype (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__arg1,&__pyx_n_s__arg2,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arg1)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arg2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("issubsctype", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6596; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "issubsctype") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6596; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_arg1 = values[0]; __pyx_v_arg2 = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("issubsctype", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6596; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.issubsctype", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_264issubsctype(__pyx_self, __pyx_v_arg1, __pyx_v_arg2); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6596 * * * def issubsctype(arg1, arg2): # <<<<<<<<<<<<<< * """Determine if the first argument is a subclass of the second argument. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_264issubsctype(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arg1, CYTHON_UNUSED PyObject *__pyx_v_arg2) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("issubsctype", 0); /* "ga4py/gain/notimplemented.pyx":6623 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6623; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.issubsctype", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_267iterable(PyObject *__pyx_self, PyObject *__pyx_v_y); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_266iterable[] = "Check whether or not an object can be iterated over.\n\n Parameters\n ----------\n y : object\n Input object.\n\n Returns\n -------\n b : {0, 1}\n Return 1 if the object has an iterator method or is a sequence,\n and 0 otherwise.\n\n\n Examples\n --------\n >>> np.iterable([1, 2, 3])\n 1\n >>> np.iterable(2)\n 0\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_267iterable = {__Pyx_NAMESTR("iterable"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_267iterable, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_266iterable)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_267iterable(PyObject *__pyx_self, PyObject *__pyx_v_y) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("iterable (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_266iterable(__pyx_self, ((PyObject *)__pyx_v_y)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6626 * * * def iterable(y): # <<<<<<<<<<<<<< * """Check whether or not an object can be iterated over. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_266iterable(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("iterable", 0); /* "ga4py/gain/notimplemented.pyx":6649 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6649; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.iterable", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_269ix_(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_268ix_[] = "Construct an open mesh from multiple sequences.\n\n This function takes N 1-D sequences and returns N outputs with N\n dimensions each, such that the shape is 1 in all but one dimension\n and the dimension with the non-unit shape value cycles through all\n N dimensions.\n\n Using `ix_` one can quickly construct index arrays that will index\n the cross product. ``a[np.ix_([1,3],[2,5])]`` returns the array\n ``[[a[1,2] a[1,5]], [a[3,2] a[3,5]]]``.\n\n Parameters\n ----------\n args : 1-D sequences\n\n Returns\n -------\n out : tuple of ndarrays\n N arrays with N dimensions each, with N the number of input\n sequences. Together these arrays form an open mesh.\n\n See Also\n --------\n ogrid, mgrid, meshgrid\n\n Examples\n --------\n >>> a = np.arange(10).reshape(2, 5)\n >>> a\n array([[0, 1, 2, 3, 4],\n [5, 6, 7, 8, 9]])\n >>> ixgrid = np.ix_([0,1], [2,4])\n >>> ixgrid\n (array([[0],\n [1]]), array([[2, 4]]))\n >>> ixgrid[0].shape, ixgrid[1].shape\n ((2, 1), (1, 2))\n >>> a[ixgrid]\n array([[2, 4],\n [7, 9]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_269ix_ = {__Pyx_NAMESTR("ix_"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_269ix_, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_268ix_)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_269ix_(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("ix_ (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_268ix_(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6652 * * * def ix_(): # <<<<<<<<<<<<<< * """Construct an open mesh from multiple sequences. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_268ix_(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("ix_", 0); /* "ga4py/gain/notimplemented.pyx":6695 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6695; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ix_", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_271kaiser(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_270kaiser[] = "Return the Kaiser window.\n\n The Kaiser window is a taper formed by using a Bessel function.\n\n Parameters\n ----------\n M : int\n Number of points in the output window. If zero or less, an\n empty array is returned.\n beta : float\n Shape parameter for window.\n\n Returns\n -------\n out : array\n The window, normalized to one (the value one\n appears only if the number of samples is odd).\n\n See Also\n --------\n bartlett, blackman, hamming, hanning\n\n Notes\n -----\n The Kaiser window is defined as\n\n .. math:: w(n) = I_0\\left( \010eta \\sqrt{1-\014rac{4n^2}{(M-1)^2}}\n \right)/I_0(\010eta)\n\n with\n\n .. math:: \\quad -\014rac{M-1}{2} \\leq n \\leq \014rac{M-1}{2},\n\n where :math:`I_0` is the modified zeroth-order Bessel function.\n\n The Kaiser was named for Jim Kaiser, who discovered a simple approximation\n to the DPSS window based on Bessel functions.\n The Kaiser window is a very good approximation to the Digital Prolate\n Spheroidal Sequence, or Slepian window, which is the transform which\n maximizes the energy in the main lobe of the window relative to total\n energy.\n\n The Kaiser can approximate many other windows by varying the beta\n parameter.\n\n ==== =======================\n beta Window shape\n ==== =======================\n 0 Rectangular\n 5 Similar to a Hamming\n 6 Similar to a Hanning\n 8.6 Similar to a Blackman\n ==== =======================\n\n A beta value of 14 is probably a good starting point. Note that as beta\n gets large, the window narrows, and so the number of samples needs to be\n large enough to sample the increasingly narrow spike, otherwise nans will\n get returned.\n\n\n Most references to the Kaiser window come from the signal processing\n literature, where it is used as one of many windowing functions for\n smoothing values. It"" is also known as an apodization (which means\n \"removing the foot\", i.e. smoothing discontinuities at the beginning\n and end of the sampled signal) or tapering function.\n\n References\n ----------\n .. [1] J. F. Kaiser, \"Digital Filters\" - Ch 7 in \"Systems analysis by\n digital computer\", Editors: F.F. Kuo and J.F. Kaiser, p 218-285.\n John Wiley and Sons, New York, (1966).\n .. [2] E.R. Kanasewich, \"Time Sequence Analysis in Geophysics\", The\n University of Alberta Press, 1975, pp. 177-178.\n .. [3] Wikipedia, \"Window function\",\n http://en.wikipedia.org/wiki/Window_function\n\n Examples\n --------\n >>> from numpy import kaiser\n >>> kaiser(12, 14)\n array([ 7.72686684e-06, 3.46009194e-03, 4.65200189e-02,\n 2.29737120e-01, 5.99885316e-01, 9.45674898e-01,\n 9.45674898e-01, 5.99885316e-01, 2.29737120e-01,\n 4.65200189e-02, 3.46009194e-03, 7.72686684e-06])\n\n\n Plot the window and the frequency response:\n\n >>> from numpy import clip, log10, array, kaiser, linspace\n >>> from numpy.fft import fft, fftshift\n >>> import matplotlib.pyplot as plt\n\n >>> window = kaiser(51, 14)\n >>> plt.plot(window)\n []\n >>> plt.title(\"Kaiser window\")\n \n >>> plt.ylabel(\"Amplitude\")\n \n >>> plt.xlabel(\"Sample\")\n \n >>> plt.show()\n\n >>> plt.figure()\n \n >>> A = fft(window, 2048) / 25.5\n >>> mag = abs(fftshift(A))\n >>> freq = linspace(-0.5,0.5,len(A))\n >>> response = 20*log10(mag)\n >>> response = clip(response,-100,100)\n >>> plt.plot(freq, response)\n []\n >>> plt.title(\"Frequency response of Kaiser window\")\n \n >>> plt.ylabel(\"Magnitude [dB]\")\n \n >>> plt.xlabel(\"Normalized frequency [cycles per sample]\")\n \n >>> plt.axis('tight')\n (-0.5, 0.5, -100.0, ...)\n >>> plt.show()\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_271kaiser = {__Pyx_NAMESTR("kaiser"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_271kaiser, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_270kaiser)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_271kaiser(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_M = 0; CYTHON_UNUSED PyObject *__pyx_v_beta = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("kaiser (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__M,&__pyx_n_s__beta,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__M)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__beta)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("kaiser", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6698; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "kaiser") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6698; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_M = values[0]; __pyx_v_beta = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("kaiser", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6698; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.kaiser", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_270kaiser(__pyx_self, __pyx_v_M, __pyx_v_beta); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6698 * * * def kaiser(M, beta): # <<<<<<<<<<<<<< * """Return the Kaiser window. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_270kaiser(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_M, CYTHON_UNUSED PyObject *__pyx_v_beta) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("kaiser", 0); /* "ga4py/gain/notimplemented.pyx":6822 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.kaiser", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_273kron(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_272kron[] = "Kronecker product of two arrays.\n\n Computes the Kronecker product, a composite array made of blocks of the\n second array scaled by the first.\n\n Parameters\n ----------\n a, b : array_like\n\n Returns\n -------\n out : ndarray\n\n See Also\n --------\n\n outer : The outer product\n\n Notes\n -----\n\n The function assumes that the number of dimenensions of `a` and `b`\n are the same, if necessary prepending the smallest with ones.\n If `a.shape = (r0,r1,..,rN)` and `b.shape = (s0,s1,...,sN)`,\n the Kronecker product has shape `(r0*s0, r1*s1, ..., rN*SN)`.\n The elements are products of elements from `a` and `b`, organized\n explicitly by::\n\n kron(a,b)[k0,k1,...,kN] = a[i0,i1,...,iN] * b[j0,j1,...,jN]\n\n where::\n\n kt = it * st + jt, t = 0,...,N\n\n In the common 2-D case (N=1), the block structure can be visualized::\n\n [[ a[0,0]*b, a[0,1]*b, ... , a[0,-1]*b ],\n [ ... ... ],\n [ a[-1,0]*b, a[-1,1]*b, ... , a[-1,-1]*b ]]\n\n\n Examples\n --------\n >>> np.kron([1,10,100], [5,6,7])\n array([ 5, 6, 7, 50, 60, 70, 500, 600, 700])\n >>> np.kron([5,6,7], [1,10,100])\n array([ 5, 50, 500, 6, 60, 600, 7, 70, 700])\n\n >>> np.kron(np.eye(2), np.ones((2,2)))\n array([[ 1., 1., 0., 0.],\n [ 1., 1., 0., 0.],\n [ 0., 0., 1., 1.],\n [ 0., 0., 1., 1.]])\n\n >>> a = np.arange(100).reshape((2,5,2,5))\n >>> b = np.arange(24).reshape((2,3,4))\n >>> c = np.kron(a,b)\n >>> c.shape\n (2, 10, 6, 20)\n >>> I = (1,3,0,2)\n >>> J = (0,2,1)\n >>> J1 = (0,) + J # extend to ndim=4\n >>> S1 = (1,) + b.shape\n >>> K = tuple(np.array(I) * np.array(S1) + np.array(J1))\n >>> c[K] == a[I]*b[J]\n True\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_273kron = {__Pyx_NAMESTR("kron"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_273kron, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_272kron)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_273kron(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_b = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("kron (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__b,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("kron", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6825; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "kron") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6825; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_a = values[0]; __pyx_v_b = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("kron", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6825; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.kron", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_272kron(__pyx_self, __pyx_v_a, __pyx_v_b); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6825 * * * def kron(a, b): # <<<<<<<<<<<<<< * """Kronecker product of two arrays. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_272kron(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_b) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("kron", 0); /* "ga4py/gain/notimplemented.pyx":6894 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6894; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.kron", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_275lexsort(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_274lexsort[] = "lexsort(keys, axis=-1)\n\n Perform an indirect sort using a sequence of keys.\n\n Given multiple sorting keys, which can be interpreted as columns in a\n spreadsheet, lexsort returns an array of integer indices that describes\n the sort order by multiple columns. The last key in the sequence is used\n for the primary sort order, the second-to-last key for the secondary sort\n order, and so on. The keys argument must be a sequence of objects that\n can be converted to arrays of the same shape. If a 2D array is provided\n for the keys argument, it's rows are interpreted as the sorting keys and\n sorting is according to the last row, second last row etc.\n\n Parameters\n ----------\n keys : (k,N) array or tuple containing k (N,)-shaped sequences\n The `k` different \"columns\" to be sorted. The last column (or row if\n `keys` is a 2D array) is the primary sort key.\n axis : int, optional\n Axis to be indirectly sorted. By default, sort over the last axis.\n\n Returns\n -------\n indices : (N,) ndarray of ints\n Array of indices that sort the keys along the specified axis.\n\n See Also\n --------\n argsort : Indirect sort.\n ndarray.sort : In-place sort.\n sort : Return a sorted copy of an array.\n\n Examples\n --------\n Sort names: first by surname, then by name.\n\n >>> surnames = ('Hertz', 'Galilei', 'Hertz')\n >>> first_names = ('Heinrich', 'Galileo', 'Gustav')\n >>> ind = np.lexsort((first_names, surnames))\n >>> ind\n array([1, 2, 0])\n\n >>> [surnames[i] + \", \" + first_names[i] for i in ind]\n ['Galilei, Galileo', 'Hertz, Gustav', 'Hertz, Heinrich']\n\n Sort two columns of numbers:\n\n >>> a = [1,5,1,4,3,4,4] # First column\n >>> b = [9,4,0,4,0,2,1] # Second column\n >>> ind = np.lexsort((b,a)) # Sort by a, then by b\n >>> print ind\n [2 0 4 6 5 3 1]\n\n >>> [(a[i],b[i]) for i in ind]\n [(1, 0), (1, 9), (3, 0)"", (4, 1), (4, 2), (4, 4), (5, 4)]\n\n Note that sorting is first according to the elements of ``a``.\n Secondary sorting is according to the elements of ``b``.\n\n A normal ``argsort`` would have yielded:\n\n >>> [(a[i],b[i]) for i in np.argsort(a)]\n [(1, 9), (1, 0), (3, 0), (4, 4), (4, 2), (4, 1), (5, 4)]\n\n Structured arrays are sorted lexically by ``argsort``:\n\n >>> x = np.array([(1,9), (5,4), (1,0), (4,4), (3,0), (4,2), (4,1)],\n ... dtype=np.dtype([('x', int), ('y', int)]))\n\n >>> np.argsort(x) # or np.argsort(x, order=('x', 'y'))\n array([2, 0, 4, 6, 5, 3, 1])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_275lexsort = {__Pyx_NAMESTR("lexsort"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_275lexsort, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_274lexsort)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_275lexsort(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_keys = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("lexsort (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__keys,&__pyx_n_s__axis,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)__pyx_int_neg_1); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__keys)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "lexsort") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6897; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_keys = values[0]; __pyx_v_axis = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("lexsort", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6897; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.lexsort", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_274lexsort(__pyx_self, __pyx_v_keys, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":6897 * * * def lexsort(keys, axis=-1): # <<<<<<<<<<<<<< * """lexsort(keys, axis=-1) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_274lexsort(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_keys, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("lexsort", 0); /* "ga4py/gain/notimplemented.pyx":6972 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.lexsort", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_277load(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_276load[] = "Load a pickled, ``.npy``, or ``.npz`` binary file.\n\n Parameters\n ----------\n file : file-like object or string\n The file to read. It must support ``seek()`` and ``read()`` methods.\n If the filename extension is ``.gz``, the file is first decompressed.\n mmap_mode: {None, 'r+', 'r', 'w+', 'c'}, optional\n If not None, then memory-map the file, using the given mode\n (see `numpy.memmap`). The mode has no effect for pickled or\n zipped files.\n A memory-mapped array is stored on disk, and not directly loaded\n into memory. However, it can be accessed and sliced like any\n ndarray. Memory mapping is especially useful for accessing\n small fragments of large files without reading the entire file\n into memory.\n\n Returns\n -------\n result : array, tuple, dict, etc.\n Data stored in the file.\n\n Raises\n ------\n IOError\n If the input file does not exist or cannot be read.\n\n See Also\n --------\n save, savez, loadtxt\n memmap : Create a memory-map to an array stored in a file on disk.\n\n Notes\n -----\n - If the file contains pickle data, then whatever is stored in the\n pickle is returned.\n - If the file is a ``.npy`` file, then an array is returned.\n - If the file is a ``.npz`` file, then a dictionary-like object is\n returned, containing ``{filename: array}`` key-value pairs, one for\n each file in the archive.\n\n Examples\n --------\n Store data to disk, and load it again:\n\n >>> np.save('/tmp/123', np.array([[1, 2, 3], [4, 5, 6]]))\n >>> np.load('/tmp/123.npy')\n array([[1, 2, 3],\n [4, 5, 6]])\n\n Mem-map the stored array, and then access the second row\n directly from disk:\n\n >>> X = np.load('/tmp/123.npy', mmap_mode='r')\n >>> X[1, :]\n memmap([4, 5, 6])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_277load = {__Pyx_NAMESTR("load"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_277load, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_276load)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_277load(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_file = 0; CYTHON_UNUSED PyObject *__pyx_v_mmap_mode = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("load (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__file,&__pyx_n_s__mmap_mode,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":6975 * * * def load(file, mmap_mode=None): # <<<<<<<<<<<<<< * """Load a pickled, ``.npy``, or ``.npz`` binary file. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__file)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mmap_mode); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "load") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6975; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_file = values[0]; __pyx_v_mmap_mode = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("load", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6975; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.load", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_276load(__pyx_self, __pyx_v_file, __pyx_v_mmap_mode); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_276load(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_file, CYTHON_UNUSED PyObject *__pyx_v_mmap_mode) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("load", 0); /* "ga4py/gain/notimplemented.pyx":7034 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7034; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.load", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_279loads(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_278loads[] = "loads(string) -- Load a pickle from the given string\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_279loads = {__Pyx_NAMESTR("loads"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_279loads, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_278loads)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_279loads(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("loads (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_278loads(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":7037 * * * def loads(): # <<<<<<<<<<<<<< * """loads(string) -- Load a pickle from the given string * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_278loads(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("loads", 0); /* "ga4py/gain/notimplemented.pyx":7042 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7042; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.loads", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_281loadtxt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_280loadtxt[] = "Load data from a text file.\n\n Each row in the text file must have the same number of values.\n\n Parameters\n ----------\n fname : file or str\n File, filename, or generator to read. If the filename extension is\n ``.gz`` or ``.bz2``, the file is first decompressed. Note that\n generators should return byte strings for Python 3k.\n dtype : data-type, optional\n Data-type of the resulting array; default: float. If this is a\n record data-type, the resulting array will be 1-dimensional, and\n each row will be interpreted as an element of the array. In this\n case, the number of columns used must match the number of fields in\n the data-type.\n comments : str, optional\n The character used to indicate the start of a comment;\n default: '#'.\n delimiter : str, optional\n The string used to separate values. By default, this is any\n whitespace.\n converters : dict, optional\n A dictionary mapping column number to a function that will convert\n that column to a float. E.g., if column 0 is a date string:\n ``converters = {0: datestr2num}``. Converters can also be used to\n provide a default value for missing data (but see also `genfromtxt`):\n ``converters = {3: lambda s: float(s.strip() or 0)}``. Default: None.\n skiprows : int, optional\n Skip the first `skiprows` lines; default: 0.\n usecols : sequence, optional\n Which columns to read, with 0 being the first. For example,\n ``usecols = (1,4,5)`` will extract the 2nd, 5th and 6th columns.\n The default, None, results in all columns being read.\n unpack : bool, optional\n If True, the returned array is transposed, so that arguments may be\n unpacked using ``x, y, z = loadtxt(...)``. When used with a record\n data-type, arrays are returned for each field. Default is False.\n ndmin : int, optional\n The ""returned array will have at least `ndmin` dimensions.\n Otherwise mono-dimensional axes will be squeezed. \n Legal values: 0 (default), 1 or 2.\n .. versionadded:: 1.6.0\n\n Returns\n -------\n out : ndarray\n Data read from the text file.\n\n See Also\n --------\n load, fromstring, fromregex\n genfromtxt : Load data with missing values handled as specified.\n scipy.io.loadmat : reads MATLAB data files\n\n Notes\n -----\n This function aims to be a fast reader for simply formatted files. The\n `genfromtxt` function provides more sophisticated handling of, e.g.,\n lines with missing values.\n\n Examples\n --------\n >>> from StringIO import StringIO # StringIO behaves like a file object\n >>> c = StringIO(\"0 1\n2 3\")\n >>> np.loadtxt(c)\n array([[ 0., 1.],\n [ 2., 3.]])\n\n >>> d = StringIO(\"M 21 72\nF 35 58\")\n >>> np.loadtxt(d, dtype={'names': ('gender', 'age', 'weight'),\n ... 'formats': ('S1', 'i4', 'f4')})\n array([('M', 21, 72.0), ('F', 35, 58.0)],\n dtype=[('gender', '|S1'), ('age', '>> c = StringIO(\"1,0,2\n3,0,4\")\n >>> x, y = np.loadtxt(c, delimiter=',', usecols=(0, 2), unpack=True)\n >>> x\n array([ 1., 3.])\n >>> y\n array([ 2., 4.])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_281loadtxt = {__Pyx_NAMESTR("loadtxt"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_281loadtxt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_280loadtxt)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_281loadtxt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_fname = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_comments = 0; CYTHON_UNUSED PyObject *__pyx_v_delimiter = 0; CYTHON_UNUSED PyObject *__pyx_v_converters = 0; CYTHON_UNUSED PyObject *__pyx_v_skiprows = 0; CYTHON_UNUSED PyObject *__pyx_v_usecols = 0; CYTHON_UNUSED PyObject *__pyx_v_unpack = 0; CYTHON_UNUSED PyObject *__pyx_v_ndmin = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("loadtxt (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fname,&__pyx_n_s__dtype,&__pyx_n_s__comments,&__pyx_n_s__delimiter,&__pyx_n_s__converters,&__pyx_n_s__skiprows,&__pyx_n_s__usecols,&__pyx_n_s__unpack,&__pyx_n_s__ndmin,0}; PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; values[1] = __pyx_k_31; values[2] = ((PyObject *)__pyx_kp_s_16); /* "ga4py/gain/notimplemented.pyx":7045 * * * def loadtxt(fname, dtype=float, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0): # <<<<<<<<<<<<<< * """Load data from a text file. * */ values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); values[5] = ((PyObject *)__pyx_int_0); values[6] = ((PyObject *)Py_None); values[7] = __pyx_k_32; values[8] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fname)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__comments); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__delimiter); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__converters); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__skiprows); if (value) { values[5] = value; kw_args--; } } case 6: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__usecols); if (value) { values[6] = value; kw_args--; } } case 7: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__unpack); if (value) { values[7] = value; kw_args--; } } case 8: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ndmin); if (value) { values[8] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "loadtxt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7045; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_fname = values[0]; __pyx_v_dtype = values[1]; __pyx_v_comments = values[2]; __pyx_v_delimiter = values[3]; __pyx_v_converters = values[4]; __pyx_v_skiprows = values[5]; __pyx_v_usecols = values[6]; __pyx_v_unpack = values[7]; __pyx_v_ndmin = values[8]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("loadtxt", 0, 1, 9, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7045; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.loadtxt", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_280loadtxt(__pyx_self, __pyx_v_fname, __pyx_v_dtype, __pyx_v_comments, __pyx_v_delimiter, __pyx_v_converters, __pyx_v_skiprows, __pyx_v_usecols, __pyx_v_unpack, __pyx_v_ndmin); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_280loadtxt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_fname, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_comments, CYTHON_UNUSED PyObject *__pyx_v_delimiter, CYTHON_UNUSED PyObject *__pyx_v_converters, CYTHON_UNUSED PyObject *__pyx_v_skiprows, CYTHON_UNUSED PyObject *__pyx_v_usecols, CYTHON_UNUSED PyObject *__pyx_v_unpack, CYTHON_UNUSED PyObject *__pyx_v_ndmin) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("loadtxt", 0); /* "ga4py/gain/notimplemented.pyx":7129 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.loadtxt", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_283lookfor(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_282lookfor[] = "Do a keyword search on docstrings.\n\n A list of of objects that matched the search is displayed,\n sorted by relevance. All given keywords need to be found in the\n docstring for it to be returned as a result, but the order does\n not matter.\n\n Parameters\n ----------\n what : str\n String containing words to look for.\n module : str or list, optional\n Name of module(s) whose docstrings to go through.\n import_modules : bool, optional\n Whether to import sub-modules in packages. Default is True.\n regenerate : bool, optional\n Whether to re-generate the docstring cache. Default is False.\n output : file-like, optional\n File-like object to write the output to. If omitted, use a pager.\n\n See Also\n --------\n source, info\n\n Notes\n -----\n Relevance is determined only roughly, by checking if the keywords occur\n in the function name, at the start of a docstring, etc.\n\n Examples\n --------\n >>> np.lookfor('binary representation')\n Search results for 'binary representation'\n ------------------------------------------\n numpy.binary_repr\n Return the binary representation of the input number as a string.\n numpy.core.setup_common.long_double_representation\n Given a binary dump as given by GNU od -b, look for long double\n numpy.base_repr\n Return a string representation of a number in the given base system.\n ...\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_283lookfor = {__Pyx_NAMESTR("lookfor"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_283lookfor, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_282lookfor)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_283lookfor(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_what = 0; CYTHON_UNUSED PyObject *__pyx_v_module = 0; CYTHON_UNUSED PyObject *__pyx_v_import_modules = 0; CYTHON_UNUSED PyObject *__pyx_v_regenerate = 0; CYTHON_UNUSED PyObject *__pyx_v_output = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("lookfor (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__what,&__pyx_n_s__module,&__pyx_n_s__import_modules,&__pyx_n_s__regenerate,&__pyx_n_s__output,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":7132 * * * def lookfor(what, module=None, import_modules=True, regenerate=False, output=None): # <<<<<<<<<<<<<< * """Do a keyword search on docstrings. * */ values[1] = ((PyObject *)Py_None); values[2] = __pyx_k_33; values[3] = __pyx_k_34; values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__what)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__module); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__import_modules); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__regenerate); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__output); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "lookfor") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7132; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_what = values[0]; __pyx_v_module = values[1]; __pyx_v_import_modules = values[2]; __pyx_v_regenerate = values[3]; __pyx_v_output = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("lookfor", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7132; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.lookfor", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_282lookfor(__pyx_self, __pyx_v_what, __pyx_v_module, __pyx_v_import_modules, __pyx_v_regenerate, __pyx_v_output); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_282lookfor(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_what, CYTHON_UNUSED PyObject *__pyx_v_module, CYTHON_UNUSED PyObject *__pyx_v_import_modules, CYTHON_UNUSED PyObject *__pyx_v_regenerate, CYTHON_UNUSED PyObject *__pyx_v_output) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("lookfor", 0); /* "ga4py/gain/notimplemented.pyx":7176 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.lookfor", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_285mafromtxt(PyObject *__pyx_self, PyObject *__pyx_v_fname); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_284mafromtxt[] = "Load ASCII data stored in a text file and return a masked array.\n\n For a complete description of all the input parameters, see `genfromtxt`.\n\n See Also\n --------\n numpy.genfromtxt : generic function to load ASCII data.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_285mafromtxt = {__Pyx_NAMESTR("mafromtxt"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_285mafromtxt, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_284mafromtxt)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_285mafromtxt(PyObject *__pyx_self, PyObject *__pyx_v_fname) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mafromtxt (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_284mafromtxt(__pyx_self, ((PyObject *)__pyx_v_fname)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":7179 * * * def mafromtxt(fname): # <<<<<<<<<<<<<< * """Load ASCII data stored in a text file and return a masked array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_284mafromtxt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_fname) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("mafromtxt", 0); /* "ga4py/gain/notimplemented.pyx":7189 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.mafromtxt", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_287mask_indices(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_286mask_indices[] = "Return the indices to access (n, n) arrays, given a masking function.\n\n Assume `mask_func` is a function that, for a square array a of size\n ``(n, n)`` with a possible offset argument `k`, when called as\n ``mask_func(a, k)`` returns a new array with zeros in certain locations\n (functions like `triu` or `tril` do precisely this). Then this function\n returns the indices where the non-zero values would be located.\n\n Parameters\n ----------\n n : int\n The returned indices will be valid to access arrays of shape (n, n).\n mask_func : callable\n A function whose call signature is similar to that of `triu`, `tril`.\n That is, ``mask_func(x, k)`` returns a boolean array, shaped like `x`.\n `k` is an optional argument to the function.\n k : scalar\n An optional argument which is passed through to `mask_func`. Functions\n like `triu`, `tril` take a second argument that is interpreted as an\n offset.\n\n Returns\n -------\n indices : tuple of arrays.\n The `n` arrays of indices corresponding to the locations where\n ``mask_func(np.ones((n, n)), k)`` is True.\n\n See Also\n --------\n triu, tril, triu_indices, tril_indices\n\n Notes\n -----\n .. versionadded:: 1.4.0\n\n Examples\n --------\n These are the indices that would allow you to access the upper triangular\n part of any 3x3 array:\n\n >>> iu = np.mask_indices(3, np.triu)\n\n For example, if `a` is a 3x3 array:\n\n >>> a = np.arange(9).reshape(3, 3)\n >>> a\n array([[0, 1, 2],\n [3, 4, 5],\n [6, 7, 8]])\n >>> a[iu]\n array([0, 1, 2, 4, 5, 8])\n\n An offset can be passed also to the masking function. This gets us the\n indices starting on the first diagonal right of the main one:\n\n >>> iu1 = np.mask_indices(3, np.triu, 1)\n\n with which we now extract only three elements:\n\n >>> a[iu1]\n array([1, 2, 5])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_287mask_indices = {__Pyx_NAMESTR("mask_indices"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_287mask_indices, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_286mask_indices)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_287mask_indices(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_n = 0; CYTHON_UNUSED PyObject *__pyx_v_mask_func = 0; CYTHON_UNUSED PyObject *__pyx_v_k = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mask_indices (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__n,&__pyx_n_s__mask_func,&__pyx_n_s__k,0}; PyObject* values[3] = {0,0,0}; values[2] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__n)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mask_func)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("mask_indices", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7192; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__k); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mask_indices") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7192; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_n = values[0]; __pyx_v_mask_func = values[1]; __pyx_v_k = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mask_indices", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7192; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.mask_indices", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_286mask_indices(__pyx_self, __pyx_v_n, __pyx_v_mask_func, __pyx_v_k); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":7192 * * * def mask_indices(n, mask_func, k=0): # <<<<<<<<<<<<<< * """Return the indices to access (n, n) arrays, given a masking function. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_286mask_indices(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_n, CYTHON_UNUSED PyObject *__pyx_v_mask_func, CYTHON_UNUSED PyObject *__pyx_v_k) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("mask_indices", 0); /* "ga4py/gain/notimplemented.pyx":7256 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7256; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.mask_indices", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_289mat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_288mat[] = "Interpret the input as a matrix.\n\n Unlike `matrix`, `asmatrix` does not make a copy if the input is already\n a matrix or an ndarray. Equivalent to ``matrix(data, copy=False)``.\n\n Parameters\n ----------\n data : array_like\n Input data.\n\n Returns\n -------\n mat : matrix\n `data` interpreted as a matrix.\n\n Examples\n --------\n >>> x = np.array([[1, 2], [3, 4]])\n\n >>> m = np.asmatrix(x)\n\n >>> x[0,0] = 5\n\n >>> m\n matrix([[5, 2],\n [3, 4]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_289mat = {__Pyx_NAMESTR("mat"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_289mat, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_288mat)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_289mat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_data = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mat (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__data,&__pyx_n_s__dtype,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":7259 * * * def mat(data, dtype=None): # <<<<<<<<<<<<<< * """Interpret the input as a matrix. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mat") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7259; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_data = values[0]; __pyx_v_dtype = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mat", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7259; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.mat", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_288mat(__pyx_self, __pyx_v_data, __pyx_v_dtype); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_288mat(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_data, CYTHON_UNUSED PyObject *__pyx_v_dtype) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("mat", 0); /* "ga4py/gain/notimplemented.pyx":7288 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.mat", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_291max(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_290max[] = "Return the maximum of an array or maximum along an axis.\n\n Parameters\n ----------\n a : array_like\n Input data.\n axis : int, optional\n Axis along which to operate. By default flattened input is used.\n out : ndarray, optional\n Alternate output array in which to place the result. Must be of\n the same shape and buffer length as the expected output. See\n `doc.ufuncs` (Section \"Output arguments\") for more details.\n\n Returns\n -------\n amax : ndarray or scalar\n Maximum of `a`. If `axis` is None, the result is a scalar value.\n If `axis` is given, the result is an array of dimension\n ``a.ndim - 1``.\n\n See Also\n --------\n nanmax : NaN values are ignored instead of being propagated.\n fmax : same behavior as the C99 fmax function.\n argmax : indices of the maximum values.\n\n Notes\n -----\n NaN values are propagated, that is if at least one item is NaN, the\n corresponding max value will be NaN as well. To ignore NaN values\n (MATLAB behavior), please use nanmax.\n\n Examples\n --------\n >>> a = np.arange(4).reshape((2,2))\n >>> a\n array([[0, 1],\n [2, 3]])\n >>> np.amax(a)\n 3\n >>> np.amax(a, axis=0)\n array([2, 3])\n >>> np.amax(a, axis=1)\n array([1, 3])\n\n >>> b = np.arange(5, dtype=np.float)\n >>> b[2] = np.NaN\n >>> np.amax(b)\n nan\n >>> np.nanmax(b)\n 4.0\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_291max = {__Pyx_NAMESTR("max"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_291max, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_290max)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_291max(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("max (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":7291 * * * def max(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the maximum of an array or maximum along an axis. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "max") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7291; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("max", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7291; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.max", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_290max(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_290max(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("max", 0); /* "ga4py/gain/notimplemented.pyx":7345 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.max", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_293maximum_sctype(PyObject *__pyx_self, PyObject *__pyx_v_t); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_292maximum_sctype[] = "Return the scalar type of highest precision of the same kind as the input.\n\n Parameters\n ----------\n t : dtype or dtype specifier\n The input data type. This can be a `dtype` object or an object that\n is convertible to a `dtype`.\n\n Returns\n -------\n out : dtype\n The highest precision data type of the same kind (`dtype.kind`) as `t`.\n\n See Also\n --------\n obj2sctype, mintypecode, sctype2char\n dtype\n\n Examples\n --------\n >>> np.maximum_sctype(np.int)\n \n >>> np.maximum_sctype(np.uint8)\n \n >>> np.maximum_sctype(np.complex)\n \n\n >>> np.maximum_sctype(str)\n \n\n >>> np.maximum_sctype('i2')\n \n >>> np.maximum_sctype('f4')\n \n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_293maximum_sctype = {__Pyx_NAMESTR("maximum_sctype"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_293maximum_sctype, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_292maximum_sctype)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_293maximum_sctype(PyObject *__pyx_self, PyObject *__pyx_v_t) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("maximum_sctype (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_292maximum_sctype(__pyx_self, ((PyObject *)__pyx_v_t)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":7348 * * * def maximum_sctype(t): # <<<<<<<<<<<<<< * """Return the scalar type of highest precision of the same kind as the input. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_292maximum_sctype(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_t) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("maximum_sctype", 0); /* "ga4py/gain/notimplemented.pyx":7385 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.maximum_sctype", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_295may_share_memory(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_294may_share_memory[] = "Determine if two arrays can share memory\n\n The memory-bounds of a and b are computed. If they overlap then\n this function returns True. Otherwise, it returns False.\n\n A return of True does not necessarily mean that the two arrays\n share any element. It just means that they *might*.\n\n Parameters\n ----------\n a, b : ndarray\n\n Returns\n -------\n out : bool\n\n Examples\n --------\n >>> np.may_share_memory(np.array([1,2]), np.array([5,8,9]))\n False\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_295may_share_memory = {__Pyx_NAMESTR("may_share_memory"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_295may_share_memory, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_294may_share_memory)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_295may_share_memory(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_b = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("may_share_memory (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__b,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("may_share_memory", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7388; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "may_share_memory") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7388; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_a = values[0]; __pyx_v_b = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("may_share_memory", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7388; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.may_share_memory", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_294may_share_memory(__pyx_self, __pyx_v_a, __pyx_v_b); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":7388 * * * def may_share_memory(a, b): # <<<<<<<<<<<<<< * """Determine if two arrays can share memory * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_294may_share_memory(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_b) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("may_share_memory", 0); /* "ga4py/gain/notimplemented.pyx":7411 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.may_share_memory", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_297mean(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_296mean[] = "Compute the arithmetic mean along the specified axis.\n\n Returns the average of the array elements. The average is taken over\n the flattened array by default, otherwise over the specified axis.\n `float64` intermediate and return values are used for integer inputs.\n\n Parameters\n ----------\n a : array_like\n Array containing numbers whose mean is desired. If `a` is not an\n array, a conversion is attempted.\n axis : int, optional\n Axis along which the means are computed. The default is to compute\n the mean of the flattened array.\n dtype : data-type, optional\n Type to use in computing the mean. For integer inputs, the default\n is `float64`; for floating point inputs, it is the same as the\n input dtype.\n out : ndarray, optional\n Alternate output array in which to place the result. The default\n is ``None``; if provided, it must have the same shape as the\n expected output, but the type will be cast if necessary.\n See `doc.ufuncs` for details.\n\n Returns\n -------\n m : ndarray, see dtype parameter above\n If `out=None`, returns a new array containing the mean values,\n otherwise a reference to the output array is returned.\n\n See Also\n --------\n average : Weighted average\n\n Notes\n -----\n The arithmetic mean is the sum of the elements along the axis divided\n by the number of elements.\n\n Note that for floating-point input, the mean is computed using the\n same precision the input has. Depending on the input data, this can\n cause the results to be inaccurate, especially for `float32` (see\n example below). Specifying a higher-precision accumulator using the\n `dtype` keyword can alleviate this issue.\n\n Examples\n --------\n >>> a = np.array([[1, 2], [3, 4]])\n >>> np.mean(a)\n 2.5\n >>> np.mean(a, axis=0)\n array([ 2., 3.])\n >>> np.mean(a, axis=1)\n ""array([ 1.5, 3.5])\n\n In single precision, `mean` can be inaccurate:\n\n >>> a = np.zeros((2, 512*512), dtype=np.float32)\n >>> a[0, :] = 1.0\n >>> a[1, :] = 0.1\n >>> np.mean(a)\n 0.546875\n\n Computing the mean in float64 is more accurate:\n\n >>> np.mean(a, dtype=np.float64)\n 0.55000000074505806\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_297mean = {__Pyx_NAMESTR("mean"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_297mean, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_296mean)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_297mean(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mean (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":7414 * * * def mean(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Compute the arithmetic mean along the specified axis. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mean") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7414; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_dtype = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mean", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7414; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.mean", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_296mean(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_296mean(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("mean", 0); /* "ga4py/gain/notimplemented.pyx":7484 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7484; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.mean", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_299median(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_298median[] = "Compute the median along the specified axis.\n\n Returns the median of the array elements.\n\n Parameters\n ----------\n a : array_like\n Input array or object that can be converted to an array.\n axis : {None, int}, optional\n Axis along which the medians are computed. The default (axis=None)\n is to compute the median along a flattened version of the array.\n out : ndarray, optional\n Alternative output array in which to place the result. It must\n have the same shape and buffer length as the expected output,\n but the type (of the output) will be cast if necessary.\n overwrite_input : {False, True}, optional\n If True, then allow use of memory of input array (a) for\n calculations. The input array will be modified by the call to\n median. This will save memory when you do not need to preserve\n the contents of the input array. Treat the input as undefined,\n but it will probably be fully or partially sorted. Default is\n False. Note that, if `overwrite_input` is True and the input\n is not already an ndarray, an error will be raised.\n\n Returns\n -------\n median : ndarray\n A new array holding the result (unless `out` is specified, in\n which case that array is returned instead). If the input contains\n integers, or floats of smaller precision than 64, then the output\n data-type is float64. Otherwise, the output data-type is the same\n as that of the input.\n\n See Also\n --------\n mean, percentile\n\n Notes\n -----\n Given a vector V of length N, the median of V is the middle value of\n a sorted copy of V, ``V_sorted`` - i.e., ``V_sorted[(N-1)/2]``, when N is\n odd. When N is even, it is the average of the two middle values of\n ``V_sorted``.\n\n Examples\n --------\n >>> a = np.array([[10, 7, 4], [3, 2, 1]])\n >>> a\n array([[10, 7, 4],\n [ 3, 2, 1]])""\n >>> np.median(a)\n 3.5\n >>> np.median(a, axis=0)\n array([ 6.5, 4.5, 2.5])\n >>> np.median(a, axis=1)\n array([ 7., 2.])\n >>> m = np.median(a, axis=0)\n >>> out = np.zeros_like(m)\n >>> np.median(a, axis=0, out=m)\n array([ 6.5, 4.5, 2.5])\n >>> m\n array([ 6.5, 4.5, 2.5])\n >>> b = a.copy()\n >>> np.median(b, axis=1, overwrite_input=True)\n array([ 7., 2.])\n >>> assert not np.all(a==b)\n >>> b = a.copy()\n >>> np.median(b, axis=None, overwrite_input=True)\n 3.5\n >>> assert not np.all(a==b)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_299median = {__Pyx_NAMESTR("median"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_299median, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_298median)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_299median(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; CYTHON_UNUSED PyObject *__pyx_v_overwrite_input = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("median (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__out,&__pyx_n_s__overwrite_input,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":7487 * * * def median(a, axis=None, out=None, overwrite_input=False): # <<<<<<<<<<<<<< * """Compute the median along the specified axis. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = __pyx_k_35; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__overwrite_input); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "median") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7487; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; __pyx_v_overwrite_input = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("median", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7487; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.median", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_298median(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_out, __pyx_v_overwrite_input); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_298median(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_overwrite_input) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("median", 0); /* "ga4py/gain/notimplemented.pyx":7560 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7560; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.median", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_301meshgrid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_300meshgrid[] = "Return coordinate matrices from two coordinate vectors.\n\n Parameters\n ----------\n x, y : ndarray\n Two 1-D arrays representing the x and y coordinates of a grid.\n\n Returns\n -------\n X, Y : ndarray\n For vectors `x`, `y` with lengths ``Nx=len(x)`` and ``Ny=len(y)``,\n return `X`, `Y` where `X` and `Y` are ``(Ny, Nx)`` shaped arrays\n with the elements of `x` and y repeated to fill the matrix along\n the first dimension for `x`, the second for `y`.\n\n See Also\n --------\n index_tricks.mgrid : Construct a multi-dimensional \"meshgrid\"\n using indexing notation.\n index_tricks.ogrid : Construct an open multi-dimensional \"meshgrid\"\n using indexing notation.\n\n Examples\n --------\n >>> X, Y = np.meshgrid([1,2,3], [4,5,6,7])\n >>> X\n array([[1, 2, 3],\n [1, 2, 3],\n [1, 2, 3],\n [1, 2, 3]])\n >>> Y\n array([[4, 4, 4],\n [5, 5, 5],\n [6, 6, 6],\n [7, 7, 7]])\n\n `meshgrid` is very useful to evaluate functions on a grid.\n\n >>> x = np.arange(-5, 5, 0.1)\n >>> y = np.arange(-5, 5, 0.1)\n >>> xx, yy = np.meshgrid(x, y)\n >>> z = np.sin(xx**2+yy**2)/(xx**2+yy**2)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_301meshgrid = {__Pyx_NAMESTR("meshgrid"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_301meshgrid, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_300meshgrid)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_301meshgrid(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_x = 0; CYTHON_UNUSED PyObject *__pyx_v_y = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("meshgrid (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__y,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("meshgrid", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7563; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "meshgrid") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7563; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_x = values[0]; __pyx_v_y = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("meshgrid", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7563; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.meshgrid", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_300meshgrid(__pyx_self, __pyx_v_x, __pyx_v_y); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":7563 * * * def meshgrid(x, y): # <<<<<<<<<<<<<< * """Return coordinate matrices from two coordinate vectors. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_300meshgrid(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_y) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("meshgrid", 0); /* "ga4py/gain/notimplemented.pyx":7608 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7608; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.meshgrid", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_303min(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_302min[] = "Return the minimum of an array or minimum along an axis.\n\n Parameters\n ----------\n a : array_like\n Input data.\n axis : int, optional\n Axis along which to operate. By default a flattened input is used.\n out : ndarray, optional\n Alternative output array in which to place the result. Must\n be of the same shape and buffer length as the expected output.\n See `doc.ufuncs` (Section \"Output arguments\") for more details.\n\n Returns\n -------\n amin : ndarray\n A new array or a scalar array with the result.\n\n See Also\n --------\n nanmin: nan values are ignored instead of being propagated\n fmin: same behavior as the C99 fmin function\n argmin: Return the indices of the minimum values.\n\n amax, nanmax, fmax\n\n Notes\n -----\n NaN values are propagated, that is if at least one item is nan, the\n corresponding min value will be nan as well. To ignore NaN values (matlab\n behavior), please use nanmin.\n\n Examples\n --------\n >>> a = np.arange(4).reshape((2,2))\n >>> a\n array([[0, 1],\n [2, 3]])\n >>> np.amin(a) # Minimum of the flattened array\n 0\n >>> np.amin(a, axis=0) # Minima along the first axis\n array([0, 1])\n >>> np.amin(a, axis=1) # Minima along the second axis\n array([0, 2])\n\n >>> b = np.arange(5, dtype=np.float)\n >>> b[2] = np.NaN\n >>> np.amin(b)\n nan\n >>> np.nanmin(b)\n 0.0\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_303min = {__Pyx_NAMESTR("min"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_303min, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_302min)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_303min(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("min (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":7611 * * * def min(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the minimum of an array or minimum along an axis. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "min") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7611; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("min", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7611; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.min", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_302min(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_302min(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("min", 0); /* "ga4py/gain/notimplemented.pyx":7665 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7665; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.min", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_305min_scalar_type(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_304min_scalar_type[] = "min_scalar_type(a)\n\n For scalar ``a``, returns the data type with the smallest size\n and smallest scalar kind which can hold its value. For non-scalar\n array ``a``, returns the vector's dtype unmodified.\n\n Floating point values are not demoted to integers,\n and complex values are not demoted to floats.\n\n Parameters\n ----------\n a : scalar or array_like\n The value whose minimal data type is to be found.\n\n Returns\n -------\n out : dtype\n The minimal data type.\n\n Notes\n -----\n .. versionadded:: 1.6.0\n\n See Also\n --------\n result_type, promote_types, dtype, can_cast\n\n Examples\n --------\n >>> np.min_scalar_type(10)\n dtype('uint8')\n\n >>> np.min_scalar_type(-260)\n dtype('int16')\n\n >>> np.min_scalar_type(3.1)\n dtype('float16')\n\n >>> np.min_scalar_type(1e50)\n dtype('float64')\n\n >>> np.min_scalar_type(np.arange(4,dtype='f8'))\n dtype('float64')\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_305min_scalar_type = {__Pyx_NAMESTR("min_scalar_type"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_305min_scalar_type, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_304min_scalar_type)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_305min_scalar_type(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("min_scalar_type (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_304min_scalar_type(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":7668 * * * def min_scalar_type(a): # <<<<<<<<<<<<<< * """min_scalar_type(a) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_304min_scalar_type(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("min_scalar_type", 0); /* "ga4py/gain/notimplemented.pyx":7715 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7715; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.min_scalar_type", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_307mintypecode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_306mintypecode[] = "Return the character for the minimum-size type to which given types can\n be safely cast.\n\n The returned type character must represent the smallest size dtype such\n that an array of the returned type can handle the data from an array of\n all types in `typechars` (or if `typechars` is an array, then its\n dtype.char).\n\n Parameters\n ----------\n typechars : list of str or array_like\n If a list of strings, each string should represent a dtype.\n If array_like, the character representation of the array dtype is used.\n typeset : str or list of str, optional\n The set of characters that the returned character is chosen from.\n The default set is 'GDFgdf'.\n default : str, optional\n The default character, this is returned if none of the characters in\n `typechars` matches a character in `typeset`.\n\n Returns\n -------\n typechar : str\n The character representing the minimum-size type that was found.\n\n See Also\n --------\n dtype, sctype2char, maximum_sctype\n\n Examples\n --------\n >>> np.mintypecode(['d', 'f', 'S'])\n 'd'\n >>> x = np.array([1.1, 2-3.j])\n >>> np.mintypecode(x)\n 'D'\n\n >>> np.mintypecode('abceh', default='G')\n 'G'\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_307mintypecode = {__Pyx_NAMESTR("mintypecode"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_307mintypecode, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_306mintypecode)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_307mintypecode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_typechars = 0; CYTHON_UNUSED PyObject *__pyx_v_typeset = 0; CYTHON_UNUSED PyObject *__pyx_v_default = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mintypecode (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__typechars,&__pyx_n_s__typeset,&__pyx_n_s__default,0}; PyObject* values[3] = {0,0,0}; values[1] = ((PyObject *)__pyx_n_s__GDFgdf); values[2] = ((PyObject *)__pyx_n_s__d); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__typechars)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__typeset); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__default); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mintypecode") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7718; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_typechars = values[0]; __pyx_v_typeset = values[1]; __pyx_v_default = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mintypecode", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7718; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.mintypecode", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_306mintypecode(__pyx_self, __pyx_v_typechars, __pyx_v_typeset, __pyx_v_default); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":7718 * * * def mintypecode(typechars, typeset='GDFgdf', default='d'): # <<<<<<<<<<<<<< * """Return the character for the minimum-size type to which given types can * be safely cast. */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_306mintypecode(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_typechars, CYTHON_UNUSED PyObject *__pyx_v_typeset, CYTHON_UNUSED PyObject *__pyx_v_default) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("mintypecode", 0); /* "ga4py/gain/notimplemented.pyx":7760 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7760; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.mintypecode", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_309mirr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_308mirr[] = "Modified internal rate of return.\n\n Parameters\n ----------\n values : array_like\n Cash flows (must contain at least one positive and one negative value)\n or nan is returned. The first value is considered a sunk cost at time zero.\n finance_rate : scalar\n Interest rate paid on the cash flows\n reinvest_rate : scalar\n Interest rate received on the cash flows upon reinvestment\n\n Returns\n -------\n out : float\n Modified internal rate of return\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_309mirr = {__Pyx_NAMESTR("mirr"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_309mirr, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_308mirr)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_309mirr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_values = 0; CYTHON_UNUSED PyObject *__pyx_v_finance_rate = 0; CYTHON_UNUSED PyObject *__pyx_v_reinvest_rate = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mirr (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__values,&__pyx_n_s__finance_rate,&__pyx_n_s__reinvest_rate,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__values)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__finance_rate)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("mirr", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7763; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__reinvest_rate)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("mirr", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7763; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mirr") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7763; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_values = values[0]; __pyx_v_finance_rate = values[1]; __pyx_v_reinvest_rate = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("mirr", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7763; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.mirr", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_308mirr(__pyx_self, __pyx_v_values, __pyx_v_finance_rate, __pyx_v_reinvest_rate); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":7763 * * * def mirr(values, finance_rate, reinvest_rate): # <<<<<<<<<<<<<< * """Modified internal rate of return. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_308mirr(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_values, CYTHON_UNUSED PyObject *__pyx_v_finance_rate, CYTHON_UNUSED PyObject *__pyx_v_reinvest_rate) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("mirr", 0); /* "ga4py/gain/notimplemented.pyx":7782 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7782; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.mirr", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_311msort(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_310msort[] = "Return a copy of an array sorted along the first axis.\n\n Parameters\n ----------\n a : array_like\n Array to be sorted.\n\n Returns\n -------\n sorted_array : ndarray\n Array of the same type and shape as `a`.\n\n See Also\n --------\n sort\n\n Notes\n -----\n ``np.msort(a)`` is equivalent to ``np.sort(a, axis=0)``.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_311msort = {__Pyx_NAMESTR("msort"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_311msort, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_310msort)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_311msort(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("msort (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_310msort(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":7785 * * * def msort(a): # <<<<<<<<<<<<<< * """Return a copy of an array sorted along the first axis. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_310msort(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("msort", 0); /* "ga4py/gain/notimplemented.pyx":7807 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7807; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.msort", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_313nan_to_num(PyObject *__pyx_self, PyObject *__pyx_v_x); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_312nan_to_num[] = "Replace nan with zero and inf with finite numbers.\n\n Returns an array or scalar replacing Not a Number (NaN) with zero,\n (positive) infinity with a very large number and negative infinity\n with a very small (or negative) number.\n\n Parameters\n ----------\n x : array_like\n Input data.\n\n Returns\n -------\n out : ndarray, float\n Array with the same shape as `x` and dtype of the element in `x` with\n the greatest precision. NaN is replaced by zero, and infinity\n (-infinity) is replaced by the largest (smallest or most negative)\n floating point value that fits in the output dtype. All finite numbers\n are upcast to the output dtype (default float64).\n\n See Also\n --------\n isinf : Shows which elements are negative or negative infinity.\n isneginf : Shows which elements are negative infinity.\n isposinf : Shows which elements are positive infinity.\n isnan : Shows which elements are Not a Number (NaN).\n isfinite : Shows which elements are finite (not NaN, not infinity)\n\n Notes\n -----\n Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic\n (IEEE 754). This means that Not a Number is not equivalent to infinity.\n\n\n Examples\n --------\n >>> np.set_printoptions(precision=8)\n >>> x = np.array([np.inf, -np.inf, np.nan, -128, 128])\n >>> np.nan_to_num(x)\n array([ 1.79769313e+308, -1.79769313e+308, 0.00000000e+000,\n -1.28000000e+002, 1.28000000e+002])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_313nan_to_num = {__Pyx_NAMESTR("nan_to_num"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_313nan_to_num, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_312nan_to_num)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_313nan_to_num(PyObject *__pyx_self, PyObject *__pyx_v_x) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nan_to_num (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_312nan_to_num(__pyx_self, ((PyObject *)__pyx_v_x)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":7810 * * * def nan_to_num(x): # <<<<<<<<<<<<<< * """Replace nan with zero and inf with finite numbers. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_312nan_to_num(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("nan_to_num", 0); /* "ga4py/gain/notimplemented.pyx":7854 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7854; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.nan_to_num", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_315nanargmax(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_314nanargmax[] = "Return indices of the maximum values over an axis, ignoring NaNs.\n\n Parameters\n ----------\n a : array_like\n Input data.\n axis : int, optional\n Axis along which to operate. By default flattened input is used.\n\n Returns\n -------\n index_array : ndarray\n An array of indices or a single index value.\n\n See Also\n --------\n argmax, nanargmin\n\n Examples\n --------\n >>> a = np.array([[np.nan, 4], [2, 3]])\n >>> np.argmax(a)\n 0\n >>> np.nanargmax(a)\n 1\n >>> np.nanargmax(a, axis=0)\n array([1, 0])\n >>> np.nanargmax(a, axis=1)\n array([1, 1])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_315nanargmax = {__Pyx_NAMESTR("nanargmax"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_315nanargmax, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_314nanargmax)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_315nanargmax(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nanargmax (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":7857 * * * def nanargmax(a, axis=None): # <<<<<<<<<<<<<< * """Return indices of the maximum values over an axis, ignoring NaNs. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "nanargmax") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7857; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("nanargmax", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7857; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.nanargmax", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_314nanargmax(__pyx_self, __pyx_v_a, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_314nanargmax(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("nanargmax", 0); /* "ga4py/gain/notimplemented.pyx":7889 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7889; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.nanargmax", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_317nanargmin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_316nanargmin[] = "Return indices of the minimum values over an axis, ignoring NaNs.\n\n Parameters\n ----------\n a : array_like\n Input data.\n axis : int, optional\n Axis along which to operate. By default flattened input is used.\n\n Returns\n -------\n index_array : ndarray\n An array of indices or a single index value.\n\n See Also\n --------\n argmin, nanargmax\n\n Examples\n --------\n >>> a = np.array([[np.nan, 4], [2, 3]])\n >>> np.argmin(a)\n 0\n >>> np.nanargmin(a)\n 2\n >>> np.nanargmin(a, axis=0)\n array([1, 1])\n >>> np.nanargmin(a, axis=1)\n array([1, 0])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_317nanargmin = {__Pyx_NAMESTR("nanargmin"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_317nanargmin, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_316nanargmin)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_317nanargmin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nanargmin (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":7892 * * * def nanargmin(a, axis=None): # <<<<<<<<<<<<<< * """Return indices of the minimum values over an axis, ignoring NaNs. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "nanargmin") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7892; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("nanargmin", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7892; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.nanargmin", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_316nanargmin(__pyx_self, __pyx_v_a, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_316nanargmin(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("nanargmin", 0); /* "ga4py/gain/notimplemented.pyx":7924 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7924; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.nanargmin", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_319nanmax(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_318nanmax[] = "Return the maximum of an array or maximum along an axis ignoring any NaNs.\n\n Parameters\n ----------\n a : array_like\n Array containing numbers whose maximum is desired. If `a` is not\n an array, a conversion is attempted.\n axis : int, optional\n Axis along which the maximum is computed. The default is to compute\n the maximum of the flattened array.\n\n Returns\n -------\n nanmax : ndarray\n An array with the same shape as `a`, with the specified axis removed.\n If `a` is a 0-d array, or if axis is None, a ndarray scalar is\n returned. The the same dtype as `a` is returned.\n\n See Also\n --------\n numpy.amax : Maximum across array including any Not a Numbers.\n numpy.nanmin : Minimum across array ignoring any Not a Numbers.\n isnan : Shows which elements are Not a Number (NaN).\n isfinite: Shows which elements are not: Not a Number, positive and\n negative infinity\n\n Notes\n -----\n Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic\n (IEEE 754). This means that Not a Number is not equivalent to infinity.\n Positive infinity is treated as a very large number and negative infinity\n is treated as a very small (i.e. negative) number.\n\n If the input has a integer type the function is equivalent to np.max.\n\n Examples\n --------\n >>> a = np.array([[1, 2], [3, np.nan]])\n >>> np.nanmax(a)\n 3.0\n >>> np.nanmax(a, axis=0)\n array([ 3., 2.])\n >>> np.nanmax(a, axis=1)\n array([ 2., 3.])\n\n When positive infinity and negative infinity are present:\n\n >>> np.nanmax([1, 2, np.nan, np.NINF])\n 2.0\n >>> np.nanmax([1, 2, np.nan, np.inf])\n inf\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_319nanmax = {__Pyx_NAMESTR("nanmax"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_319nanmax, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_318nanmax)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_319nanmax(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nanmax (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":7927 * * * def nanmax(a, axis=None): # <<<<<<<<<<<<<< * """Return the maximum of an array or maximum along an axis ignoring any NaNs. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "nanmax") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7927; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("nanmax", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7927; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.nanmax", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_318nanmax(__pyx_self, __pyx_v_a, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_318nanmax(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("nanmax", 0); /* "ga4py/gain/notimplemented.pyx":7981 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7981; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.nanmax", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_321nanmin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_320nanmin[] = "Return the minimum of an array or minimum along an axis ignoring any NaNs.\n\n Parameters\n ----------\n a : array_like\n Array containing numbers whose minimum is desired.\n axis : int, optional\n Axis along which the minimum is computed.The default is to compute\n the minimum of the flattened array.\n\n Returns\n -------\n nanmin : ndarray\n A new array or a scalar array with the result.\n\n See Also\n --------\n numpy.amin : Minimum across array including any Not a Numbers.\n numpy.nanmax : Maximum across array ignoring any Not a Numbers.\n isnan : Shows which elements are Not a Number (NaN).\n isfinite: Shows which elements are not: Not a Number, positive and\n negative infinity\n\n Notes\n -----\n Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic\n (IEEE 754). This means that Not a Number is not equivalent to infinity.\n Positive infinity is treated as a very large number and negative infinity\n is treated as a very small (i.e. negative) number.\n\n If the input has a integer type the function is equivalent to np.min.\n\n\n Examples\n --------\n >>> a = np.array([[1, 2], [3, np.nan]])\n >>> np.nanmin(a)\n 1.0\n >>> np.nanmin(a, axis=0)\n array([ 1., 2.])\n >>> np.nanmin(a, axis=1)\n array([ 1., 3.])\n\n When positive infinity and negative infinity are present:\n\n >>> np.nanmin([1, 2, np.nan, np.inf])\n 1.0\n >>> np.nanmin([1, 2, np.nan, np.NINF])\n -inf\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_321nanmin = {__Pyx_NAMESTR("nanmin"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_321nanmin, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_320nanmin)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_321nanmin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nanmin (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":7984 * * * def nanmin(a, axis=None): # <<<<<<<<<<<<<< * """Return the minimum of an array or minimum along an axis ignoring any NaNs. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "nanmin") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7984; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("nanmin", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7984; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.nanmin", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_320nanmin(__pyx_self, __pyx_v_a, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_320nanmin(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("nanmin", 0); /* "ga4py/gain/notimplemented.pyx":8036 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8036; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.nanmin", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_323nansum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_322nansum[] = "Return the sum of array elements over a given axis treating\n Not a Numbers (NaNs) as zero.\n\n Parameters\n ----------\n a : array_like\n Array containing numbers whose sum is desired. If `a` is not an\n array, a conversion is attempted.\n axis : int, optional\n Axis along which the sum is computed. The default is to compute\n the sum of the flattened array.\n\n Returns\n -------\n y : ndarray\n An array with the same shape as a, with the specified axis removed.\n If a is a 0-d array, or if axis is None, a scalar is returned with\n the same dtype as `a`.\n\n See Also\n --------\n numpy.sum : Sum across array including Not a Numbers.\n isnan : Shows which elements are Not a Number (NaN).\n isfinite: Shows which elements are not: Not a Number, positive and\n negative infinity\n\n Notes\n -----\n Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic\n (IEEE 754). This means that Not a Number is not equivalent to infinity.\n If positive or negative infinity are present the result is positive or\n negative infinity. But if both positive and negative infinity are present,\n the result is Not A Number (NaN).\n\n Arithmetic is modular when using integer types (all elements of `a` must\n be finite i.e. no elements that are NaNs, positive infinity and negative\n infinity because NaNs are floating point types), and no error is raised\n on overflow.\n\n\n Examples\n --------\n >>> np.nansum(1)\n 1\n >>> np.nansum([1])\n 1\n >>> np.nansum([1, np.nan])\n 1.0\n >>> a = np.array([[1, 1], [1, np.nan]])\n >>> np.nansum(a)\n 3.0\n >>> np.nansum(a, axis=0)\n array([ 2., 1.])\n\n When positive infinity and negative infinity are present\n\n >>> np.nansum([1, np.nan, np.inf])\n inf\n >>> np.nansum([1, np.nan, np.NINF])\n -inf\n >>> np.nansum([1, np.nan, np.inf, np.NINF])\n nan\n "" \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_323nansum = {__Pyx_NAMESTR("nansum"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_323nansum, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_322nansum)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_323nansum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nansum (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":8039 * * * def nansum(a, axis=None): # <<<<<<<<<<<<<< * """Return the sum of array elements over a given axis treating * Not a Numbers (NaNs) as zero. */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "nansum") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8039; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("nansum", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8039; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.nansum", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_322nansum(__pyx_self, __pyx_v_a, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_322nansum(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("nansum", 0); /* "ga4py/gain/notimplemented.pyx":8104 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.nansum", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_325ndfromtxt(PyObject *__pyx_self, PyObject *__pyx_v_fname); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_324ndfromtxt[] = "Load ASCII data stored in a file and return it as a single array.\n\n Complete description of all the optional input parameters is available in\n the docstring of the `genfromtxt` function.\n\n See Also\n --------\n numpy.genfromtxt : generic function.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_325ndfromtxt = {__Pyx_NAMESTR("ndfromtxt"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_325ndfromtxt, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_324ndfromtxt)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_325ndfromtxt(PyObject *__pyx_self, PyObject *__pyx_v_fname) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("ndfromtxt (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_324ndfromtxt(__pyx_self, ((PyObject *)__pyx_v_fname)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":8107 * * * def ndfromtxt(fname): # <<<<<<<<<<<<<< * """Load ASCII data stored in a file and return it as a single array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_324ndfromtxt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_fname) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("ndfromtxt", 0); /* "ga4py/gain/notimplemented.pyx":8118 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ndfromtxt", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_327ndim(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_326ndim[] = "Return the number of dimensions of an array.\n\n Parameters\n ----------\n a : array_like\n Input array. If it is not already an ndarray, a conversion is\n attempted.\n\n Returns\n -------\n number_of_dimensions : int\n The number of dimensions in `a`. Scalars are zero-dimensional.\n\n See Also\n --------\n ndarray.ndim : equivalent method\n shape : dimensions of array\n ndarray.shape : dimensions of array\n\n Examples\n --------\n >>> np.ndim([[1,2,3],[4,5,6]])\n 2\n >>> np.ndim(np.array([[1,2,3],[4,5,6]]))\n 2\n >>> np.ndim(1)\n 0\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_327ndim = {__Pyx_NAMESTR("ndim"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_327ndim, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_326ndim)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_327ndim(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("ndim (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_326ndim(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":8121 * * * def ndim(a): # <<<<<<<<<<<<<< * """Return the number of dimensions of an array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_326ndim(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("ndim", 0); /* "ga4py/gain/notimplemented.pyx":8151 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ndim", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_329nested_iters(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_328nested_iters[] = "\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_329nested_iters = {__Pyx_NAMESTR("nested_iters"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_329nested_iters, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_328nested_iters)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_329nested_iters(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nested_iters (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_328nested_iters(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":8154 * * * def nested_iters(): # <<<<<<<<<<<<<< * """ * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_328nested_iters(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("nested_iters", 0); /* "ga4py/gain/notimplemented.pyx":8159 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8159; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.nested_iters", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_331newbuffer(PyObject *__pyx_self, PyObject *__pyx_v_size); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_330newbuffer[] = "newbuffer(size)\n\n Return a new uninitialized buffer object of size bytes\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_331newbuffer = {__Pyx_NAMESTR("newbuffer"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_331newbuffer, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_330newbuffer)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_331newbuffer(PyObject *__pyx_self, PyObject *__pyx_v_size) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("newbuffer (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_330newbuffer(__pyx_self, ((PyObject *)__pyx_v_size)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":8162 * * * def newbuffer(size): # <<<<<<<<<<<<<< * """newbuffer(size) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_330newbuffer(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_size) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("newbuffer", 0); /* "ga4py/gain/notimplemented.pyx":8169 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.newbuffer", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_333nonzero(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_332nonzero[] = "Return the indices of the elements that are non-zero.\n\n Returns a tuple of arrays, one for each dimension of `a`, containing\n the indices of the non-zero elements in that dimension. The\n corresponding non-zero values can be obtained with::\n\n a[nonzero(a)]\n\n To group the indices by element, rather than dimension, use::\n\n transpose(nonzero(a))\n\n The result of this is always a 2-D array, with a row for\n each non-zero element.\n\n Parameters\n ----------\n a : array_like\n Input array.\n\n Returns\n -------\n tuple_of_arrays : tuple\n Indices of elements that are non-zero.\n\n See Also\n --------\n flatnonzero :\n Return indices that are non-zero in the flattened version of the input\n array.\n ndarray.nonzero :\n Equivalent ndarray method.\n count_nonzero :\n Counts the number of non-zero elements in the input array.\n\n Examples\n --------\n >>> x = np.eye(3)\n >>> x\n array([[ 1., 0., 0.],\n [ 0., 1., 0.],\n [ 0., 0., 1.]])\n >>> np.nonzero(x)\n (array([0, 1, 2]), array([0, 1, 2]))\n\n >>> x[np.nonzero(x)]\n array([ 1., 1., 1.])\n >>> np.transpose(np.nonzero(x))\n array([[0, 0],\n [1, 1],\n [2, 2]])\n\n A common use for ``nonzero`` is to find the indices of an array, where\n a condition is True. Given an array `a`, the condition `a` > 3 is a\n boolean array and since False is interpreted as 0, np.nonzero(a > 3)\n yields the indices of the `a` where the condition is true.\n\n >>> a = np.array([[1,2,3],[4,5,6],[7,8,9]])\n >>> a > 3\n array([[False, False, False],\n [ True, True, True],\n [ True, True, True]], dtype=bool)\n >>> np.nonzero(a > 3)\n (array([1, 1, 1, 2, 2, 2]), array([0, 1, 2, 0, 1, 2]))\n\n The ``nonzero`` method of the boolean array can also be called.\n\n >>> (a > 3).nonzero()\n (array([1, 1, 1, ""2, 2, 2]), array([0, 1, 2, 0, 1, 2]))\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_333nonzero = {__Pyx_NAMESTR("nonzero"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_333nonzero, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_332nonzero)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_333nonzero(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nonzero (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_332nonzero(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":8172 * * * def nonzero(a): # <<<<<<<<<<<<<< * """Return the indices of the elements that are non-zero. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_332nonzero(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("nonzero", 0); /* "ga4py/gain/notimplemented.pyx":8244 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.nonzero", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_335nper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_334nper[] = "Compute the number of periodic payments.\n\n Parameters\n ----------\n rate : array_like\n Rate of interest (per period)\n pmt : array_like\n Payment\n pv : array_like\n Present value\n fv : array_like, optional\n Future value\n when : {{'begin', 1}, {'end', 0}}, {string, int}, optional\n When payments are due ('begin' (1) or 'end' (0))\n\n Notes\n -----\n The number of periods ``nper`` is computed by solving the equation::\n\n fv + pv*(1+rate)**nper + pmt*(1+rate*when)/rate*((1+rate)**nper-1) = 0\n\n but if ``rate = 0`` then::\n\n fv + pv + pmt*nper = 0\n\n Examples\n --------\n If you only had $150/month to pay towards the loan, how long would it take\n to pay-off a loan of $8,000 at 7% annual interest?\n\n >>> np.nper(0.07/12, -150, 8000)\n 64.073348770661852\n\n So, over 64 months would be required to pay off the loan.\n\n The same analysis could be done with several different interest rates\n and/or payments and/or total amounts to produce an entire table.\n\n >>> np.nper(*(np.ogrid[0.07/12: 0.08/12: 0.01/12,\n ... -150 : -99 : 50 ,\n ... 8000 : 9001 : 1000]))\n array([[[ 64.07334877, 74.06368256],\n [ 108.07548412, 127.99022654]],\n [[ 66.12443902, 76.87897353],\n [ 114.70165583, 137.90124779]]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_335nper = {__Pyx_NAMESTR("nper"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_335nper, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_334nper)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_335nper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_rate = 0; CYTHON_UNUSED PyObject *__pyx_v_pmt = 0; CYTHON_UNUSED PyObject *__pyx_v_pv = 0; CYTHON_UNUSED PyObject *__pyx_v_fv = 0; CYTHON_UNUSED PyObject *__pyx_v_when = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("nper (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__rate,&__pyx_n_s__pmt,&__pyx_n_s__pv,&__pyx_n_s__fv,&__pyx_n_s__when,0}; PyObject* values[5] = {0,0,0,0,0}; values[3] = ((PyObject *)__pyx_int_0); values[4] = ((PyObject *)__pyx_n_s__end); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__rate)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pmt)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("nper", 0, 3, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8247; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pv)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("nper", 0, 3, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8247; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fv); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__when); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "nper") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8247; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_rate = values[0]; __pyx_v_pmt = values[1]; __pyx_v_pv = values[2]; __pyx_v_fv = values[3]; __pyx_v_when = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("nper", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8247; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.nper", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_334nper(__pyx_self, __pyx_v_rate, __pyx_v_pmt, __pyx_v_pv, __pyx_v_fv, __pyx_v_when); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":8247 * * * def nper(rate, pmt, pv, fv=0, when='end'): # <<<<<<<<<<<<<< * """Compute the number of periodic payments. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_334nper(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rate, CYTHON_UNUSED PyObject *__pyx_v_pmt, CYTHON_UNUSED PyObject *__pyx_v_pv, CYTHON_UNUSED PyObject *__pyx_v_fv, CYTHON_UNUSED PyObject *__pyx_v_when) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("nper", 0); /* "ga4py/gain/notimplemented.pyx":8295 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.nper", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_337npv(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_336npv[] = "Returns the NPV (Net Present Value) of a cash flow series.\n\n Parameters\n ----------\n rate : scalar\n The discount rate.\n values : array_like, shape(M, )\n The values of the time series of cash flows. The (fixed) time\n interval between cash flow \"events\" must be the same as that\n for which `rate` is given (i.e., if `rate` is per year, then\n precisely a year is understood to elapse between each cash flow\n event). By convention, investments or \"deposits\" are negative,\n income or \"withdrawals\" are positive; `values` must begin with\n the initial investment, thus `values[0]` will typically be\n negative.\n\n Returns\n -------\n out : float\n The NPV of the input cash flow series `values` at the discount `rate`.\n\n Notes\n -----\n Returns the result of: [G]_\n\n .. math :: \\sum_{t=0}^M{\014rac{values_t}{(1+rate)^{t}}}\n\n References\n ----------\n .. [G] L. J. Gitman, \"Principles of Managerial Finance, Brief,\" 3rd ed.,\n Addison-Wesley, 2003, pg. 346.\n\n Examples\n --------\n >>> np.npv(0.281,[-100, 39, 59, 55, 20])\n -0.0066187288356340801\n\n (Compare with the Example given for numpy.lib.financial.irr)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_337npv = {__Pyx_NAMESTR("npv"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_337npv, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_336npv)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_337npv(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_rate = 0; CYTHON_UNUSED PyObject *__pyx_v_values = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("npv (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__rate,&__pyx_n_s__values,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__rate)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__values)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("npv", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8298; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "npv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8298; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_rate = values[0]; __pyx_v_values = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("npv", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8298; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.npv", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_336npv(__pyx_self, __pyx_v_rate, __pyx_v_values); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":8298 * * * def npv(rate, values): # <<<<<<<<<<<<<< * """Returns the NPV (Net Present Value) of a cash flow series. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_336npv(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rate, CYTHON_UNUSED PyObject *__pyx_v_values) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("npv", 0); /* "ga4py/gain/notimplemented.pyx":8339 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8339; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.npv", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_339obj2sctype(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_338obj2sctype[] = "Return the scalar dtype or NumPy equivalent of Python type of an object.\n\n Parameters\n ----------\n rep : any\n The object of which the type is returned.\n default : any, optional\n If given, this is returned for objects whose types can not be\n determined. If not given, None is returned for those objects.\n\n Returns\n -------\n dtype : dtype or Python type\n The data type of `rep`.\n\n See Also\n --------\n sctype2char, issctype, issubsctype, issubdtype, maximum_sctype\n\n Examples\n --------\n >>> np.obj2sctype(np.int32)\n \n >>> np.obj2sctype(np.array([1., 2.]))\n \n >>> np.obj2sctype(np.array([1.j]))\n \n\n >>> np.obj2sctype(dict)\n \n >>> np.obj2sctype('string')\n \n\n >>> np.obj2sctype(1, default=list)\n \n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_339obj2sctype = {__Pyx_NAMESTR("obj2sctype"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_339obj2sctype, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_338obj2sctype)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_339obj2sctype(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_rep = 0; CYTHON_UNUSED PyObject *__pyx_v_default = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("obj2sctype (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__rep,&__pyx_n_s__default,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":8342 * * * def obj2sctype(rep, default=None): # <<<<<<<<<<<<<< * """Return the scalar dtype or NumPy equivalent of Python type of an object. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__rep)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__default); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "obj2sctype") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8342; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_rep = values[0]; __pyx_v_default = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("obj2sctype", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8342; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.obj2sctype", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_338obj2sctype(__pyx_self, __pyx_v_rep, __pyx_v_default); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_338obj2sctype(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rep, CYTHON_UNUSED PyObject *__pyx_v_default) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("obj2sctype", 0); /* "ga4py/gain/notimplemented.pyx":8380 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8380; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.obj2sctype", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_341outer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_340outer[] = "Compute the outer product of two vectors.\n\n Given two vectors, ``a = [a0, a1, ..., aM]`` and\n ``b = [b0, b1, ..., bN]``,\n the outer product [1]_ is::\n\n [[a0*b0 a0*b1 ... a0*bN ]\n [a1*b0 .\n [ ... .\n [aM*b0 aM*bN ]]\n\n Parameters\n ----------\n a, b : array_like, shape (M,), (N,)\n First and second input vectors. Inputs are flattened if they\n are not already 1-dimensional.\n\n Returns\n -------\n out : ndarray, shape (M, N)\n ``out[i, j] = a[i] * b[j]``\n\n See also\n --------\n inner, einsum\n\n References\n ----------\n .. [1] : G. H. Golub and C. F. van Loan, *Matrix Computations*, 3rd\n ed., Baltimore, MD, Johns Hopkins University Press, 1996,\n pg. 8.\n\n Examples\n --------\n Make a (*very* coarse) grid for computing a Mandelbrot set:\n\n >>> rl = np.outer(np.ones((5,)), np.linspace(-2, 2, 5))\n >>> rl\n array([[-2., -1., 0., 1., 2.],\n [-2., -1., 0., 1., 2.],\n [-2., -1., 0., 1., 2.],\n [-2., -1., 0., 1., 2.],\n [-2., -1., 0., 1., 2.]])\n >>> im = np.outer(1j*np.linspace(2, -2, 5), np.ones((5,)))\n >>> im\n array([[ 0.+2.j, 0.+2.j, 0.+2.j, 0.+2.j, 0.+2.j],\n [ 0.+1.j, 0.+1.j, 0.+1.j, 0.+1.j, 0.+1.j],\n [ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],\n [ 0.-1.j, 0.-1.j, 0.-1.j, 0.-1.j, 0.-1.j],\n [ 0.-2.j, 0.-2.j, 0.-2.j, 0.-2.j, 0.-2.j]])\n >>> grid = rl + im\n >>> grid\n array([[-2.+2.j, -1.+2.j, 0.+2.j, 1.+2.j, 2.+2.j],\n [-2.+1.j, -1.+1.j, 0.+1.j, 1.+1.j, 2.+1.j],\n [-2.+0.j, -1.+0.j, 0.+0.j, 1.+0.j, 2.+0.j],\n [-2.-1.j, -1.-1.j, 0.-1.j, 1.-1.j, 2.-1.j],\n [-2.-2.j, -1.-2.j, 0.-2.j, 1.-2.j, 2.-2.j]])\n\n An example using a \"vector\" of letters:\n\n >>> x = np.array(['a', 'b', 'c'], dtype=object)\n >>> np.""outer(x, [1, 2, 3])\n array([[a, aa, aaa],\n [b, bb, bbb],\n [c, cc, ccc]], dtype=object)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_341outer = {__Pyx_NAMESTR("outer"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_341outer, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_340outer)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_341outer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_b = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("outer (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__b,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("outer", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8383; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "outer") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8383; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_a = values[0]; __pyx_v_b = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("outer", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8383; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.outer", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_340outer(__pyx_self, __pyx_v_a, __pyx_v_b); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":8383 * * * def outer(a, b): # <<<<<<<<<<<<<< * """Compute the outer product of two vectors. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_340outer(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_b) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("outer", 0); /* "ga4py/gain/notimplemented.pyx":8451 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8451; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.outer", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_343packbits(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_342packbits[] = "packbits(myarray, axis=None)\n\n Packs the elements of a binary-valued array into bits in a uint8 array.\n\n The result is padded to full bytes by inserting zero bits at the end.\n\n Parameters\n ----------\n myarray : array_like\n An integer type array whose elements should be packed to bits.\n axis : int, optional\n The dimension over which bit-packing is done.\n ``None`` implies packing the flattened array.\n\n Returns\n -------\n packed : ndarray\n Array of type uint8 whose elements represent bits corresponding to the\n logical (0 or nonzero) value of the input elements. The shape of\n `packed` has the same number of dimensions as the input (unless `axis`\n is None, in which case the output is 1-D).\n\n See Also\n --------\n unpackbits: Unpacks elements of a uint8 array into a binary-valued output\n array.\n\n Examples\n --------\n >>> a = np.array([[[1,0,1],\n ... [0,1,0]],\n ... [[1,1,0],\n ... [0,0,1]]])\n >>> b = np.packbits(a, axis=-1)\n >>> b\n array([[[160],[64]],[[192],[32]]], dtype=uint8)\n\n Note that in binary 160 = 1010 0000, 64 = 0100 0000, 192 = 1100 0000,\n and 32 = 0010 0000.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_343packbits = {__Pyx_NAMESTR("packbits"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_343packbits, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_342packbits)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_343packbits(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_myarray = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("packbits (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__myarray,&__pyx_n_s__axis,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":8454 * * * def packbits(myarray, axis=None): # <<<<<<<<<<<<<< * """packbits(myarray, axis=None) * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__myarray)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "packbits") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8454; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_myarray = values[0]; __pyx_v_axis = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("packbits", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8454; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.packbits", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_342packbits(__pyx_self, __pyx_v_myarray, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_342packbits(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_myarray, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("packbits", 0); /* "ga4py/gain/notimplemented.pyx":8497 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8497; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.packbits", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_345percentile(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_344percentile[] = "Compute the qth percentile of the data along the specified axis.\n\n Returns the qth percentile of the array elements.\n\n Parameters\n ----------\n a : array_like\n Input array or object that can be converted to an array.\n q : float in range of [0,100] (or sequence of floats)\n Percentile to compute which must be between 0 and 100 inclusive.\n axis : int, optional\n Axis along which the percentiles are computed. The default (None)\n is to compute the median along a flattened version of the array.\n out : ndarray, optional\n Alternative output array in which to place the result. It must\n have the same shape and buffer length as the expected output,\n but the type (of the output) will be cast if necessary.\n overwrite_input : bool, optional\n If True, then allow use of memory of input array `a` for\n calculations. The input array will be modified by the call to\n median. This will save memory when you do not need to preserve\n the contents of the input array. Treat the input as undefined,\n but it will probably be fully or partially sorted.\n Default is False. Note that, if `overwrite_input` is True and the\n input is not already an array, an error will be raised.\n\n Returns\n -------\n pcntile : ndarray\n A new array holding the result (unless `out` is specified, in\n which case that array is returned instead). If the input contains\n integers, or floats of smaller precision than 64, then the output\n data-type is float64. Otherwise, the output data-type is the same\n as that of the input.\n\n See Also\n --------\n mean, median\n\n Notes\n -----\n Given a vector V of length N, the qth percentile of V is the qth ranked\n value in a sorted copy of V. A weighted average of the two nearest\n neighbors is used if the normalized ranking does not match q exactly.\n The same as the med""ian if ``q=0.5``, the same as the minimum if ``q=0``\n and the same as the maximum if ``q=1``.\n\n Examples\n --------\n >>> a = np.array([[10, 7, 4], [3, 2, 1]])\n >>> a\n array([[10, 7, 4],\n [ 3, 2, 1]])\n >>> np.percentile(a, 50)\n 3.5\n >>> np.percentile(a, 0.5, axis=0)\n array([ 6.5, 4.5, 2.5])\n >>> np.percentile(a, 50, axis=1)\n array([ 7., 2.])\n\n >>> m = np.percentile(a, 50, axis=0)\n >>> out = np.zeros_like(m)\n >>> np.percentile(a, 50, axis=0, out=m)\n array([ 6.5, 4.5, 2.5])\n >>> m\n array([ 6.5, 4.5, 2.5])\n\n >>> b = a.copy()\n >>> np.percentile(b, 50, axis=1, overwrite_input=True)\n array([ 7., 2.])\n >>> assert not np.all(a==b)\n >>> b = a.copy()\n >>> np.percentile(b, 50, axis=None, overwrite_input=True)\n 3.5\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_345percentile = {__Pyx_NAMESTR("percentile"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_345percentile, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_344percentile)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_345percentile(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_q = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; CYTHON_UNUSED PyObject *__pyx_v_overwrite_input = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("percentile (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__q,&__pyx_n_s__axis,&__pyx_n_s__out,&__pyx_n_s__overwrite_input,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":8500 * * * def percentile(a, q, axis=None, out=None, overwrite_input=False): # <<<<<<<<<<<<<< * """Compute the qth percentile of the data along the specified axis. * */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = __pyx_k_36; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__q)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("percentile", 0, 2, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8500; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__overwrite_input); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "percentile") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8500; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_q = values[1]; __pyx_v_axis = values[2]; __pyx_v_out = values[3]; __pyx_v_overwrite_input = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("percentile", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8500; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.percentile", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_344percentile(__pyx_self, __pyx_v_a, __pyx_v_q, __pyx_v_axis, __pyx_v_out, __pyx_v_overwrite_input); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_344percentile(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_q, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_overwrite_input) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("percentile", 0); /* "ga4py/gain/notimplemented.pyx":8577 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.percentile", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_347piecewise(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_346piecewise[] = "Evaluate a piecewise-defined function.\n\n Given a set of conditions and corresponding functions, evaluate each\n function on the input data wherever its condition is true.\n\n Parameters\n ----------\n x : ndarray\n The input domain.\n condlist : list of bool arrays\n Each boolean array corresponds to a function in `funclist`. Wherever\n `condlist[i]` is True, `funclist[i](x)` is used as the output value.\n\n Each boolean array in `condlist` selects a piece of `x`,\n and should therefore be of the same shape as `x`.\n\n The length of `condlist` must correspond to that of `funclist`.\n If one extra function is given, i.e. if\n ``len(funclist) - len(condlist) == 1``, then that extra function\n is the default value, used wherever all conditions are false.\n funclist : list of callables, f(x,*args,**kw), or scalars\n Each function is evaluated over `x` wherever its corresponding\n condition is True. It should take an array as input and give an array\n or a scalar value as output. If, instead of a callable,\n a scalar is provided then a constant function (``lambda x: scalar``) is\n assumed.\n args : tuple, optional\n Any further arguments given to `piecewise` are passed to the functions\n upon execution, i.e., if called ``piecewise(..., ..., 1, 'a')``, then\n each function is called as ``f(x, 1, 'a')``.\n kw : dict, optional\n Keyword arguments used in calling `piecewise` are passed to the\n functions upon execution, i.e., if called\n ``piecewise(..., ..., lambda=1)``, then each function is called as\n ``f(x, lambda=1)``.\n\n Returns\n -------\n out : ndarray\n The output is the same shape and type as x and is found by\n calling the functions in `funclist` on the appropriate portions of `x`,\n as defined by the boolean arrays in `condlist`. Portions not covered\n "" by any condition have undefined values.\n\n\n See Also\n --------\n choose, select, where\n\n Notes\n -----\n This is similar to choose or select, except that functions are\n evaluated on elements of `x` that satisfy the corresponding condition from\n `condlist`.\n\n The result is::\n\n |--\n |funclist[0](x[condlist[0]])\n out = |funclist[1](x[condlist[1]])\n |...\n |funclist[n2](x[condlist[n2]])\n |--\n\n Examples\n --------\n Define the sigma function, which is -1 for ``x < 0`` and +1 for ``x >= 0``.\n\n >>> x = np.arange(6) - 2.5\n >>> np.piecewise(x, [x < 0, x >= 0], [-1, 1])\n array([-1., -1., -1., 1., 1., 1.])\n\n Define the absolute value, which is ``-x`` for ``x <0`` and ``x`` for\n ``x >= 0``.\n\n >>> np.piecewise(x, [x < 0, x >= 0], [lambda x: -x, lambda x: x])\n array([ 2.5, 1.5, 0.5, 0.5, 1.5, 2.5])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_347piecewise = {__Pyx_NAMESTR("piecewise"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_347piecewise, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_346piecewise)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_347piecewise(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_x = 0; CYTHON_UNUSED PyObject *__pyx_v_condlist = 0; CYTHON_UNUSED PyObject *__pyx_v_funclist = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("piecewise (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__condlist,&__pyx_n_s__funclist,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__condlist)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("piecewise", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8580; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__funclist)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("piecewise", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8580; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "piecewise") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8580; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_x = values[0]; __pyx_v_condlist = values[1]; __pyx_v_funclist = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("piecewise", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8580; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.piecewise", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_346piecewise(__pyx_self, __pyx_v_x, __pyx_v_condlist, __pyx_v_funclist); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":8580 * * * def piecewise(x, condlist, funclist): # <<<<<<<<<<<<<< * """Evaluate a piecewise-defined function. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_346piecewise(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_condlist, CYTHON_UNUSED PyObject *__pyx_v_funclist) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("piecewise", 0); /* "ga4py/gain/notimplemented.pyx":8660 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8660; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.piecewise", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_349pkgload(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_348pkgload[] = "Load one or more packages into parent package top-level namespace.\n\n This function is intended to shorten the need to import many\n subpackages, say of scipy, constantly with statements such as\n\n import scipy.linalg, scipy.fftpack, scipy.etc...\n\n Instead, you can say:\n\n import scipy\n scipy.pkgload('linalg','fftpack',...)\n\n or\n\n scipy.pkgload()\n\n to load all of them in one call.\n\n If a name which doesn't exist in scipy's namespace is\n given, a warning is shown.\n\n Parameters\n ----------\n *packages : arg-tuple\n the names (one or more strings) of all the modules one\n wishes to load into the top-level namespace.\n verbose= : integer\n verbosity level [default: -1].\n verbose=-1 will suspend also warnings.\n force= : bool\n when True, force reloading loaded packages [default: False].\n postpone= : bool\n when True, don't load packages [default: False]\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_349pkgload = {__Pyx_NAMESTR("pkgload"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_349pkgload, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_348pkgload)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_349pkgload(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pkgload (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_348pkgload(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":8663 * * * def pkgload(): # <<<<<<<<<<<<<< * """Load one or more packages into parent package top-level namespace. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_348pkgload(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pkgload", 0); /* "ga4py/gain/notimplemented.pyx":8699 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8699; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.pkgload", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_351place(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_350place[] = "Change elements of an array based on conditional and input values.\n\n Similar to ``np.putmask(arr, mask, vals)``, the difference is that `place`\n uses the first N elements of `vals`, where N is the number of True values\n in `mask`, while `putmask` uses the elements where `mask` is True.\n\n Note that `extract` does the exact opposite of `place`.\n\n Parameters\n ----------\n arr : array_like\n Array to put data into.\n mask : array_like\n Boolean mask array. Must have the same size as `a`.\n vals : 1-D sequence\n Values to put into `a`. Only the first N elements are used, where\n N is the number of True values in `mask`. If `vals` is smaller\n than N it will be repeated.\n\n See Also\n --------\n putmask, put, take, extract\n\n Examples\n --------\n >>> arr = np.arange(6).reshape(2, 3)\n >>> np.place(arr, arr>2, [44, 55])\n >>> arr\n array([[ 0, 1, 2],\n [44, 55, 44]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_351place = {__Pyx_NAMESTR("place"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_351place, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_350place)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_351place(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_arr = 0; CYTHON_UNUSED PyObject *__pyx_v_mask = 0; CYTHON_UNUSED PyObject *__pyx_v_vals = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("place (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__arr,&__pyx_n_s__mask,&__pyx_n_s__vals,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arr)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mask)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("place", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8702; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__vals)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("place", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8702; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "place") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8702; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_arr = values[0]; __pyx_v_mask = values[1]; __pyx_v_vals = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("place", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8702; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.place", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_350place(__pyx_self, __pyx_v_arr, __pyx_v_mask, __pyx_v_vals); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":8702 * * * def place(arr, mask, vals): # <<<<<<<<<<<<<< * """Change elements of an array based on conditional and input values. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_350place(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arr, CYTHON_UNUSED PyObject *__pyx_v_mask, CYTHON_UNUSED PyObject *__pyx_v_vals) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("place", 0); /* "ga4py/gain/notimplemented.pyx":8735 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.place", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_353pmt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_352pmt[] = "Compute the payment against loan principal plus interest.\n\n Given:\n * a present value, `pv` (e.g., an amount borrowed)\n * a future value, `fv` (e.g., 0)\n * an interest `rate` compounded once per period, of which\n there are\n * `nper` total\n * and (optional) specification of whether payment is made\n at the beginning (`when` = {'begin', 1}) or the end\n (`when` = {'end', 0}) of each period\n\n Return:\n the (fixed) periodic payment.\n\n Parameters\n ----------\n rate : array_like\n Rate of interest (per period)\n nper : array_like\n Number of compounding periods\n pv : array_like\n Present value\n fv : array_like (optional)\n Future value (default = 0)\n when : {{'begin', 1}, {'end', 0}}, {string, int}\n When payments are due ('begin' (1) or 'end' (0))\n\n Returns\n -------\n out : ndarray\n Payment against loan plus interest. If all input is scalar, returns a\n scalar float. If any input is array_like, returns payment for each\n input element. If multiple inputs are array_like, they all must have\n the same shape.\n\n Notes\n -----\n The payment is computed by solving the equation::\n\n fv +\n pv*(1 + rate)**nper +\n pmt*(1 + rate*when)/rate*((1 + rate)**nper - 1) == 0\n\n or, when ``rate == 0``::\n\n fv + pv + pmt * nper == 0\n\n for ``pmt``.\n\n Note that computing a monthly mortgage payment is only\n one use for this function. For example, pmt returns the\n periodic deposit one must make to achieve a specified\n future balance given an initial deposit, a fixed,\n periodically compounded interest rate, and the total\n number of periods.\n\n References\n ----------\n .. [WRW] Wheeler, D. A., E. Rathke, and R. Weir (Eds.) (2009, May).\n Open Document Format for Office Applications (OpenDocument)v1.2,\n Part 2: Recalculated Formula (OpenFormula) F""ormat - Annotated Version,\n Pre-Draft 12. Organization for the Advancement of Structured Information\n Standards (OASIS). Billerica, MA, USA. [ODT Document].\n Available:\n http://www.oasis-open.org/committees/documents.php\n ?wg_abbrev=office-formulaOpenDocument-formula-20090508.odt\n\n Examples\n --------\n What is the monthly payment needed to pay off a $200,000 loan in 15\n years at an annual interest rate of 7.5%?\n\n >>> np.pmt(0.075/12, 12*15, 200000)\n -1854.0247200054619\n\n In order to pay-off (i.e., have a future-value of 0) the $200,000 obtained\n today, a monthly payment of $1,854.02 would be required. Note that this\n example illustrates usage of `fv` having a default value of 0.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_353pmt = {__Pyx_NAMESTR("pmt"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_353pmt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_352pmt)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_353pmt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_rate = 0; CYTHON_UNUSED PyObject *__pyx_v_nper = 0; CYTHON_UNUSED PyObject *__pyx_v_pv = 0; CYTHON_UNUSED PyObject *__pyx_v_fv = 0; CYTHON_UNUSED PyObject *__pyx_v_when = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pmt (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__rate,&__pyx_n_s__nper,&__pyx_n_s__pv,&__pyx_n_s__fv,&__pyx_n_s__when,0}; PyObject* values[5] = {0,0,0,0,0}; values[3] = ((PyObject *)__pyx_int_0); values[4] = ((PyObject *)__pyx_n_s__end); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__rate)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nper)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pmt", 0, 3, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8738; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pv)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pmt", 0, 3, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8738; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fv); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__when); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pmt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8738; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_rate = values[0]; __pyx_v_nper = values[1]; __pyx_v_pv = values[2]; __pyx_v_fv = values[3]; __pyx_v_when = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pmt", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8738; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.pmt", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_352pmt(__pyx_self, __pyx_v_rate, __pyx_v_nper, __pyx_v_pv, __pyx_v_fv, __pyx_v_when); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":8738 * * * def pmt(rate, nper, pv, fv=0, when='end'): # <<<<<<<<<<<<<< * """Compute the payment against loan principal plus interest. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_352pmt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rate, CYTHON_UNUSED PyObject *__pyx_v_nper, CYTHON_UNUSED PyObject *__pyx_v_pv, CYTHON_UNUSED PyObject *__pyx_v_fv, CYTHON_UNUSED PyObject *__pyx_v_when) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pmt", 0); /* "ga4py/gain/notimplemented.pyx":8820 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8820; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.pmt", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_355poly(PyObject *__pyx_self, PyObject *__pyx_v_seq_of_zeros); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_354poly[] = "Find the coefficients of a polynomial with the given sequence of roots.\n\n Returns the coefficients of the polynomial whose leading coefficient\n is one for the given sequence of zeros (multiple roots must be included\n in the sequence as many times as their multiplicity; see Examples).\n A square matrix (or array, which will be treated as a matrix) can also\n be given, in which case the coefficients of the characteristic polynomial\n of the matrix are returned.\n\n Parameters\n ----------\n seq_of_zeros : array_like, shape (N,) or (N, N)\n A sequence of polynomial roots, or a square array or matrix object.\n\n Returns\n -------\n c : ndarray\n 1D array of polynomial coefficients from highest to lowest degree:\n\n ``c[0] * x**(N) + c[1] * x**(N-1) + ... + c[N-1] * x + c[N]``\n where c[0] always equals 1.\n\n Raises\n ------\n ValueError\n If input is the wrong shape (the input must be a 1-D or square\n 2-D array).\n\n See Also\n --------\n polyval : Evaluate a polynomial at a point.\n roots : Return the roots of a polynomial.\n polyfit : Least squares polynomial fit.\n poly1d : A one-dimensional polynomial class.\n\n Notes\n -----\n Specifying the roots of a polynomial still leaves one degree of\n freedom, typically represented by an undetermined leading\n coefficient. [1]_ In the case of this function, that coefficient -\n the first one in the returned array - is always taken as one. (If\n for some reason you have one other point, the only automatic way\n presently to leverage that information is to use ``polyfit``.)\n\n The characteristic polynomial, :math:`p_a(t)`, of an `n`-by-`n`\n matrix **A** is given by\n\n :math:`p_a(t) = \\mathrm{det}(t\\, \\mathbf{I} - \\mathbf{A})`,\n\n where **I** is the `n`-by-`n` identity matrix. [2]_\n\n References\n ----------\n .. [1] M. Sullivan and M. Sullivan, III, \"Algebra a""nd Trignometry,\n Enhanced With Graphing Utilities,\" Prentice-Hall, pg. 318, 1996.\n\n .. [2] G. Strang, \"Linear Algebra and Its Applications, 2nd Edition,\"\n Academic Press, pg. 182, 1980.\n\n Examples\n --------\n Given a sequence of a polynomial's zeros:\n\n >>> np.poly((0, 0, 0)) # Multiple root example\n array([1, 0, 0, 0])\n \n The line above represents z**3 + 0*z**2 + 0*z + 0.\n\n >>> np.poly((-1./2, 0, 1./2))\n array([ 1. , 0. , -0.25, 0. ])\n \n The line above represents z**3 - z/4\n\n >>> np.poly((np.random.random(1.)[0], 0, np.random.random(1.)[0]))\n array([ 1. , -0.77086955, 0.08618131, 0. ]) #random\n\n Given a square array object:\n\n >>> P = np.array([[0, 1./3], [-1./2, 0]])\n >>> np.poly(P)\n array([ 1. , 0. , 0.16666667])\n\n Or a square matrix object:\n\n >>> np.poly(np.matrix(P))\n array([ 1. , 0. , 0.16666667])\n\n Note how in all cases the leading coefficient is always 1.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_355poly = {__Pyx_NAMESTR("poly"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_355poly, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_354poly)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_355poly(PyObject *__pyx_self, PyObject *__pyx_v_seq_of_zeros) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("poly (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_354poly(__pyx_self, ((PyObject *)__pyx_v_seq_of_zeros)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":8823 * * * def poly(seq_of_zeros): # <<<<<<<<<<<<<< * """Find the coefficients of a polynomial with the given sequence of roots. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_354poly(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_seq_of_zeros) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("poly", 0); /* "ga4py/gain/notimplemented.pyx":8914 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8914; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.poly", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_357polyadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_356polyadd[] = "Find the sum of two polynomials.\n\n Returns the polynomial resulting from the sum of two input polynomials.\n Each input must be either a poly1d object or a 1D sequence of polynomial\n coefficients, from highest to lowest degree.\n\n Parameters\n ----------\n a1, a2 : array_like or poly1d object\n Input polynomials.\n\n Returns\n -------\n out : ndarray or poly1d object\n The sum of the inputs. If either input is a poly1d object, then the\n output is also a poly1d object. Otherwise, it is a 1D array of\n polynomial coefficients from highest to lowest degree.\n\n See Also\n --------\n poly1d : A one-dimensional polynomial class.\n poly, polyadd, polyder, polydiv, polyfit, polyint, polysub, polyval\n\n Examples\n --------\n >>> np.polyadd([1, 2], [9, 5, 4])\n array([9, 6, 6])\n\n Using poly1d objects:\n\n >>> p1 = np.poly1d([1, 2])\n >>> p2 = np.poly1d([9, 5, 4])\n >>> print p1\n 1 x + 2\n >>> print p2\n 2\n 9 x + 5 x + 4\n >>> print np.polyadd(p1, p2)\n 2\n 9 x + 6 x + 6\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_357polyadd = {__Pyx_NAMESTR("polyadd"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_357polyadd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_356polyadd)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_357polyadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a1 = 0; CYTHON_UNUSED PyObject *__pyx_v_a2 = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("polyadd (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a1,&__pyx_n_s__a2,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a1)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("polyadd", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8917; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "polyadd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8917; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_a1 = values[0]; __pyx_v_a2 = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("polyadd", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8917; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.polyadd", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_356polyadd(__pyx_self, __pyx_v_a1, __pyx_v_a2); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":8917 * * * def polyadd(a1, a2): # <<<<<<<<<<<<<< * """Find the sum of two polynomials. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_356polyadd(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a1, CYTHON_UNUSED PyObject *__pyx_v_a2) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("polyadd", 0); /* "ga4py/gain/notimplemented.pyx":8960 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.polyadd", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_359polyder(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_358polyder[] = "Return the derivative of the specified order of a polynomial.\n\n Parameters\n ----------\n p : poly1d or sequence\n Polynomial to differentiate.\n A sequence is interpreted as polynomial coefficients, see `poly1d`.\n m : int, optional\n Order of differentiation (default: 1)\n\n Returns\n -------\n der : poly1d\n A new polynomial representing the derivative.\n\n See Also\n --------\n polyint : Anti-derivative of a polynomial.\n poly1d : Class for one-dimensional polynomials.\n\n Examples\n --------\n The derivative of the polynomial :math:`x^3 + x^2 + x^1 + 1` is:\n\n >>> p = np.poly1d([1,1,1,1])\n >>> p2 = np.polyder(p)\n >>> p2\n poly1d([3, 2, 1])\n\n which evaluates to:\n\n >>> p2(2.)\n 17.0\n\n We can verify this, approximating the derivative with\n ``(f(x + h) - f(x))/h``:\n\n >>> (p(2. + 0.001) - p(2.)) / 0.001\n 17.007000999997857\n\n The fourth-order derivative of a 3rd-order polynomial is zero:\n\n >>> np.polyder(p, 2)\n poly1d([6, 2])\n >>> np.polyder(p, 3)\n poly1d([6])\n >>> np.polyder(p, 4)\n poly1d([ 0.])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_359polyder = {__Pyx_NAMESTR("polyder"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_359polyder, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_358polyder)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_359polyder(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_p = 0; CYTHON_UNUSED PyObject *__pyx_v_m = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("polyder (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p,&__pyx_n_s__m,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)__pyx_int_1); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__m); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "polyder") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8963; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_p = values[0]; __pyx_v_m = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("polyder", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8963; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.polyder", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_358polyder(__pyx_self, __pyx_v_p, __pyx_v_m); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":8963 * * * def polyder(p, m=1): # <<<<<<<<<<<<<< * """Return the derivative of the specified order of a polynomial. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_358polyder(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_p, CYTHON_UNUSED PyObject *__pyx_v_m) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("polyder", 0); /* "ga4py/gain/notimplemented.pyx":9014 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9014; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.polyder", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_361polydiv(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_360polydiv[] = "Returns the quotient and remainder of polynomial division.\n\n The input arrays are the coefficients (including any coefficients\n equal to zero) of the \"numerator\" (dividend) and \"denominator\"\n (divisor) polynomials, respectively.\n\n Parameters\n ----------\n u : array_like or poly1d\n Dividend polynomial's coefficients.\n\n v : array_like or poly1d\n Divisor polynomial's coefficients.\n\n Returns\n -------\n q : ndarray\n Coefficients, including those equal to zero, of the quotient.\n r : ndarray\n Coefficients, including those equal to zero, of the remainder.\n\n See Also\n --------\n poly, polyadd, polyder, polydiv, polyfit, polyint, polymul, polysub,\n polyval\n\n Notes\n -----\n Both `u` and `v` must be 0-d or 1-d (ndim = 0 or 1), but `u.ndim` need\n not equal `v.ndim`. In other words, all four possible combinations -\n ``u.ndim = v.ndim = 0``, ``u.ndim = v.ndim = 1``,\n ``u.ndim = 1, v.ndim = 0``, and ``u.ndim = 0, v.ndim = 1`` - work.\n\n Examples\n --------\n .. math:: \014rac{3x^2 + 5x + 2}{2x + 1} = 1.5x + 1.75, remainder 0.25\n\n >>> x = np.array([3.0, 5.0, 2.0])\n >>> y = np.array([2.0, 1.0])\n >>> np.polydiv(x, y)\n (array([ 1.5 , 1.75]), array([ 0.25]))\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_361polydiv = {__Pyx_NAMESTR("polydiv"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_361polydiv, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_360polydiv)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_361polydiv(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_u = 0; CYTHON_UNUSED PyObject *__pyx_v_v = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("polydiv (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__u,&__pyx_n_s__v,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__u)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__v)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("polydiv", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9017; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "polydiv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9017; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_u = values[0]; __pyx_v_v = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("polydiv", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9017; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.polydiv", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_360polydiv(__pyx_self, __pyx_v_u, __pyx_v_v); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":9017 * * * def polydiv(u, v): # <<<<<<<<<<<<<< * """Returns the quotient and remainder of polynomial division. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_360polydiv(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_u, CYTHON_UNUSED PyObject *__pyx_v_v) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("polydiv", 0); /* "ga4py/gain/notimplemented.pyx":9061 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9061; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.polydiv", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_363polyfit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_362polyfit[] = "Least squares polynomial fit.\n\n Fit a polynomial ``p(x) = p[0] * x**deg + ... + p[deg]`` of degree `deg`\n to points `(x, y)`. Returns a vector of coefficients `p` that minimises\n the squared error.\n\n Parameters\n ----------\n x : array_like, shape (M,)\n x-coordinates of the M sample points ``(x[i], y[i])``.\n y : array_like, shape (M,) or (M, K)\n y-coordinates of the sample points. Several data sets of sample\n points sharing the same x-coordinates can be fitted at once by\n passing in a 2D-array that contains one dataset per column.\n deg : int\n Degree of the fitting polynomial\n rcond : float, optional\n Relative condition number of the fit. Singular values smaller than this\n relative to the largest singular value will be ignored. The default\n value is len(x)*eps, where eps is the relative precision of the float\n type, about 2e-16 in most cases.\n full : bool, optional\n Switch determining nature of return value. When it is\n False (the default) just the coefficients are returned, when True\n diagnostic information from the singular value decomposition is also\n returned.\n\n Returns\n -------\n p : ndarray, shape (M,) or (M, K)\n Polynomial coefficients, highest power first.\n If `y` was 2-D, the coefficients for `k`-th data set are in ``p[:,k]``.\n\n residuals, rank, singular_values, rcond : present only if `full` = True\n Residuals of the least-squares fit, the effective rank of the scaled\n Vandermonde coefficient matrix, its singular values, and the specified\n value of `rcond`. For more details, see `linalg.lstsq`.\n\n Warns\n -----\n RankWarning\n The rank of the coefficient matrix in the least-squares fit is\n deficient. The warning is only raised if `full` = False.\n\n The warnings can be turned off by\n\n >>> import warnings\n >>> war""nings.simplefilter('ignore', np.RankWarning)\n\n See Also\n --------\n polyval : Computes polynomial values.\n linalg.lstsq : Computes a least-squares fit.\n scipy.interpolate.UnivariateSpline : Computes spline fits.\n\n Notes\n -----\n The solution minimizes the squared error\n\n .. math ::\n E = \\sum_{j=0}^k |p(x_j) - y_j|^2\n\n in the equations::\n\n x[0]**n * p[n] + ... + x[0] * p[1] + p[0] = y[0]\n x[1]**n * p[n] + ... + x[1] * p[1] + p[0] = y[1]\n ...\n x[k]**n * p[n] + ... + x[k] * p[1] + p[0] = y[k]\n\n The coefficient matrix of the coefficients `p` is a Vandermonde matrix.\n\n `polyfit` issues a `RankWarning` when the least-squares fit is badly\n conditioned. This implies that the best fit is not well-defined due\n to numerical error. The results may be improved by lowering the polynomial\n degree or by replacing `x` by `x` - `x`.mean(). The `rcond` parameter\n can also be set to a value smaller than its default, but the resulting\n fit may be spurious: including contributions from the small singular\n values can add numerical noise to the result.\n\n Note that fitting polynomial coefficients is inherently badly conditioned\n when the degree of the polynomial is large or the interval of sample points\n is badly centered. The quality of the fit should always be checked in these\n cases. When polynomial fits are not satisfactory, splines may be a good\n alternative.\n\n References\n ----------\n .. [1] Wikipedia, \"Curve fitting\",\n http://en.wikipedia.org/wiki/Curve_fitting\n .. [2] Wikipedia, \"Polynomial interpolation\",\n http://en.wikipedia.org/wiki/Polynomial_interpolation\n\n Examples\n --------\n >>> x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])\n >>> y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])\n >>> z = np.polyfit(x, y, 3)\n >>> z\n array([ 0.08703704, -0.81349206, 1.69312169, -0.03968254]"")\n\n It is convenient to use `poly1d` objects for dealing with polynomials:\n\n >>> p = np.poly1d(z)\n >>> p(0.5)\n 0.6143849206349179\n >>> p(3.5)\n -0.34732142857143039\n >>> p(10)\n 22.579365079365115\n\n High-order polynomials may oscillate wildly:\n\n >>> p30 = np.poly1d(np.polyfit(x, y, 30))\n /... RankWarning: Polyfit may be poorly conditioned...\n >>> p30(4)\n -0.80000000000000204\n >>> p30(5)\n -0.99999999999999445\n >>> p30(4.5)\n -0.10547061179440398\n\n Illustration:\n\n >>> import matplotlib.pyplot as plt\n >>> xp = np.linspace(-2, 6, 100)\n >>> plt.plot(x, y, '.', xp, p(xp), '-', xp, p30(xp), '--')\n [, , ]\n >>> plt.ylim(-2,2)\n (-2, 2)\n >>> plt.show()\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_363polyfit = {__Pyx_NAMESTR("polyfit"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_363polyfit, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_362polyfit)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_363polyfit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_x = 0; CYTHON_UNUSED PyObject *__pyx_v_y = 0; CYTHON_UNUSED PyObject *__pyx_v_deg = 0; CYTHON_UNUSED PyObject *__pyx_v_rcond = 0; CYTHON_UNUSED PyObject *__pyx_v_full = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("polyfit (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__y,&__pyx_n_s__deg,&__pyx_n_s__rcond,&__pyx_n_s__full,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":9064 * * * def polyfit(x, y, deg, rcond=None, full=False): # <<<<<<<<<<<<<< * """Least squares polynomial fit. * */ values[3] = ((PyObject *)Py_None); values[4] = __pyx_k_37; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("polyfit", 0, 3, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9064; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__deg)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("polyfit", 0, 3, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9064; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__rcond); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__full); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "polyfit") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9064; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_x = values[0]; __pyx_v_y = values[1]; __pyx_v_deg = values[2]; __pyx_v_rcond = values[3]; __pyx_v_full = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("polyfit", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9064; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.polyfit", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_362polyfit(__pyx_self, __pyx_v_x, __pyx_v_y, __pyx_v_deg, __pyx_v_rcond, __pyx_v_full); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_362polyfit(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_y, CYTHON_UNUSED PyObject *__pyx_v_deg, CYTHON_UNUSED PyObject *__pyx_v_rcond, CYTHON_UNUSED PyObject *__pyx_v_full) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("polyfit", 0); /* "ga4py/gain/notimplemented.pyx":9197 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.polyfit", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_365polyint(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_364polyint[] = "Return an antiderivative (indefinite integral) of a polynomial.\n\n The returned order `m` antiderivative `P` of polynomial `p` satisfies\n :math:`\014rac{d^m}{dx^m}P(x) = p(x)` and is defined up to `m - 1`\n integration constants `k`. The constants determine the low-order\n polynomial part\n\n .. math:: \014rac{k_{m-1}}{0!} x^0 + \\ldots + \014rac{k_0}{(m-1)!}x^{m-1}\n\n of `P` so that :math:`P^{(j)}(0) = k_{m-j-1}`.\n\n Parameters\n ----------\n p : {array_like, poly1d}\n Polynomial to differentiate.\n A sequence is interpreted as polynomial coefficients, see `poly1d`.\n m : int, optional\n Order of the antiderivative. (Default: 1)\n k : {None, list of `m` scalars, scalar}, optional\n Integration constants. They are given in the order of integration:\n those corresponding to highest-order terms come first.\n\n If ``None`` (default), all constants are assumed to be zero.\n If `m = 1`, a single scalar can be given instead of a list.\n\n See Also\n --------\n polyder : derivative of a polynomial\n poly1d.integ : equivalent method\n\n Examples\n --------\n The defining property of the antiderivative:\n\n >>> p = np.poly1d([1,1,1])\n >>> P = np.polyint(p)\n >>> P\n poly1d([ 0.33333333, 0.5 , 1. , 0. ])\n >>> np.polyder(P) == p\n True\n\n The integration constants default to zero, but can be specified:\n\n >>> P = np.polyint(p, 3)\n >>> P(0)\n 0.0\n >>> np.polyder(P)(0)\n 0.0\n >>> np.polyder(P, 2)(0)\n 0.0\n >>> P = np.polyint(p, 3, k=[6,5,3])\n >>> P\n poly1d([ 0.01666667, 0.04166667, 0.16666667, 3. , 5. , 3. ])\n\n Note that 3 = 6 / 2!, and that the constants are given in the order of\n integrations. Constant of the highest-order polynomial term comes first:\n\n >>> np.polyder(P, 2)(0)\n 6.0\n >>> np.polyder(P, 1)(0)\n 5.0\n >>> P(0)\n 3.0\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_365polyint = {__Pyx_NAMESTR("polyint"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_365polyint, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_364polyint)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_365polyint(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_p = 0; CYTHON_UNUSED PyObject *__pyx_v_m = 0; CYTHON_UNUSED PyObject *__pyx_v_k = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("polyint (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p,&__pyx_n_s__m,&__pyx_n_s__k,0}; PyObject* values[3] = {0,0,0}; values[1] = ((PyObject *)__pyx_int_1); /* "ga4py/gain/notimplemented.pyx":9200 * * * def polyint(p, m=1, k=None): # <<<<<<<<<<<<<< * """Return an antiderivative (indefinite integral) of a polynomial. * */ values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__m); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__k); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "polyint") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9200; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_p = values[0]; __pyx_v_m = values[1]; __pyx_v_k = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("polyint", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9200; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.polyint", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_364polyint(__pyx_self, __pyx_v_p, __pyx_v_m, __pyx_v_k); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_364polyint(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_p, CYTHON_UNUSED PyObject *__pyx_v_m, CYTHON_UNUSED PyObject *__pyx_v_k) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("polyint", 0); /* "ga4py/gain/notimplemented.pyx":9266 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.polyint", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_367polymul(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_366polymul[] = "Find the product of two polynomials.\n\n Finds the polynomial resulting from the multiplication of the two input\n polynomials. Each input must be either a poly1d object or a 1D sequence\n of polynomial coefficients, from highest to lowest degree.\n\n Parameters\n ----------\n a1, a2 : array_like or poly1d object\n Input polynomials.\n\n Returns\n -------\n out : ndarray or poly1d object\n The polynomial resulting from the multiplication of the inputs. If\n either inputs is a poly1d object, then the output is also a poly1d\n object. Otherwise, it is a 1D array of polynomial coefficients from\n highest to lowest degree.\n\n See Also\n --------\n poly1d : A one-dimensional polynomial class.\n poly, polyadd, polyder, polydiv, polyfit, polyint, polysub,\n polyval\n\n Examples\n --------\n >>> np.polymul([1, 2, 3], [9, 5, 1])\n array([ 9, 23, 38, 17, 3])\n\n Using poly1d objects:\n\n >>> p1 = np.poly1d([1, 2, 3])\n >>> p2 = np.poly1d([9, 5, 1])\n >>> print p1\n 2\n 1 x + 2 x + 3\n >>> print p2\n 2\n 9 x + 5 x + 1\n >>> print np.polymul(p1, p2)\n 4 3 2\n 9 x + 23 x + 38 x + 17 x + 3\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_367polymul = {__Pyx_NAMESTR("polymul"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_367polymul, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_366polymul)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_367polymul(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a1 = 0; CYTHON_UNUSED PyObject *__pyx_v_a2 = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("polymul (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a1,&__pyx_n_s__a2,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a1)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("polymul", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9269; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "polymul") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9269; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_a1 = values[0]; __pyx_v_a2 = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("polymul", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9269; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.polymul", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_366polymul(__pyx_self, __pyx_v_a1, __pyx_v_a2); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":9269 * * * def polymul(a1, a2): # <<<<<<<<<<<<<< * """Find the product of two polynomials. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_366polymul(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a1, CYTHON_UNUSED PyObject *__pyx_v_a2) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("polymul", 0); /* "ga4py/gain/notimplemented.pyx":9315 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.polymul", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_369polysub(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_368polysub[] = "Difference (subtraction) of two polynomials.\n\n Given two polynomials `a1` and `a2`, returns ``a1 - a2``.\n `a1` and `a2` can be either array_like sequences of the polynomials'\n coefficients (including coefficients equal to zero), or `poly1d` objects.\n\n Parameters\n ----------\n a1, a2 : array_like or poly1d\n Minuend and subtrahend polynomials, respectively.\n\n Returns\n -------\n out : ndarray or poly1d\n Array or `poly1d` object of the difference polynomial's coefficients.\n\n See Also\n --------\n polyval, polydiv, polymul, polyadd\n\n Examples\n --------\n .. math:: (2 x^2 + 10 x - 2) - (3 x^2 + 10 x -4) = (-x^2 + 2)\n\n >>> np.polysub([2, 10, -2], [3, 10, -4])\n array([-1, 0, 2])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_369polysub = {__Pyx_NAMESTR("polysub"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_369polysub, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_368polysub)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_369polysub(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a1 = 0; CYTHON_UNUSED PyObject *__pyx_v_a2 = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("polysub (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a1,&__pyx_n_s__a2,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a1)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("polysub", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9318; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "polysub") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9318; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_a1 = values[0]; __pyx_v_a2 = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("polysub", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9318; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.polysub", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_368polysub(__pyx_self, __pyx_v_a1, __pyx_v_a2); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":9318 * * * def polysub(a1, a2): # <<<<<<<<<<<<<< * """Difference (subtraction) of two polynomials. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_368polysub(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a1, CYTHON_UNUSED PyObject *__pyx_v_a2) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("polysub", 0); /* "ga4py/gain/notimplemented.pyx":9347 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.polysub", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_371polyval(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_370polyval[] = "Evaluate a polynomial at specific values.\n\n If `p` is of length N, this function returns the value:\n\n ``p[0]*x**(N-1) + p[1]*x**(N-2) + ... + p[N-2]*x + p[N-1]``\n\n If `x` is a sequence, then `p(x)` is returned for each element of `x`.\n If `x` is another polynomial then the composite polynomial `p(x(t))`\n is returned.\n\n Parameters\n ----------\n p : array_like or poly1d object\n 1D array of polynomial coefficients (including coefficients equal\n to zero) from highest degree to the constant term, or an\n instance of poly1d.\n x : array_like or poly1d object\n A number, a 1D array of numbers, or an instance of poly1d, \"at\"\n which to evaluate `p`.\n\n Returns\n -------\n values : ndarray or poly1d\n If `x` is a poly1d instance, the result is the composition of the two\n polynomials, i.e., `x` is \"substituted\" in `p` and the simplified\n result is returned. In addition, the type of `x` - array_like or\n poly1d - governs the type of the output: `x` array_like => `values`\n array_like, `x` a poly1d object => `values` is also.\n\n See Also\n --------\n poly1d: A polynomial class.\n\n Notes\n -----\n Horner's scheme [1]_ is used to evaluate the polynomial. Even so,\n for polynomials of high degree the values may be inaccurate due to\n rounding errors. Use carefully.\n\n References\n ----------\n .. [1] I. N. Bronshtein, K. A. Semendyayev, and K. A. Hirsch (Eng.\n trans. Ed.), *Handbook of Mathematics*, New York, Van Nostrand\n Reinhold Co., 1985, pg. 720.\n\n Examples\n --------\n >>> np.polyval([3,0,1], 5) # 3 * 5**2 + 0 * 5**1 + 1\n 76\n >>> np.polyval([3,0,1], np.poly1d(5))\n poly1d([ 76.])\n >>> np.polyval(np.poly1d([3,0,1]), 5)\n 76\n >>> np.polyval(np.poly1d([3,0,1]), np.poly1d(5))\n poly1d([ 76.])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_371polyval = {__Pyx_NAMESTR("polyval"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_371polyval, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_370polyval)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_371polyval(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_p = 0; CYTHON_UNUSED PyObject *__pyx_v_x = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("polyval (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p,&__pyx_n_s__x,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("polyval", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9350; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "polyval") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9350; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_p = values[0]; __pyx_v_x = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("polyval", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9350; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.polyval", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_370polyval(__pyx_self, __pyx_v_p, __pyx_v_x); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":9350 * * * def polyval(p, x): # <<<<<<<<<<<<<< * """Evaluate a polynomial at specific values. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_370polyval(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_p, CYTHON_UNUSED PyObject *__pyx_v_x) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("polyval", 0); /* "ga4py/gain/notimplemented.pyx":9408 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.polyval", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_373ppmt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_372ppmt[] = "Not implemented. Compute the payment against loan principal.\n\n Parameters\n ----------\n rate : array_like\n Rate of interest (per period)\n per : array_like, int\n Amount paid against the loan changes. The `per` is the period of\n interest.\n nper : array_like\n Number of compounding periods\n pv : array_like\n Present value\n fv : array_like, optional\n Future value\n when : {{'begin', 1}, {'end', 0}}, {string, int}\n When payments are due ('begin' (1) or 'end' (0))\n\n See Also\n --------\n pmt, pv, ipmt\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_373ppmt = {__Pyx_NAMESTR("ppmt"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_373ppmt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_372ppmt)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_373ppmt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_rate = 0; CYTHON_UNUSED PyObject *__pyx_v_per = 0; CYTHON_UNUSED PyObject *__pyx_v_nper = 0; CYTHON_UNUSED PyObject *__pyx_v_pv = 0; CYTHON_UNUSED PyObject *__pyx_v_fv = 0; CYTHON_UNUSED PyObject *__pyx_v_when = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("ppmt (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__rate,&__pyx_n_s__per,&__pyx_n_s__nper,&__pyx_n_s__pv,&__pyx_n_s__fv,&__pyx_n_s__when,0}; PyObject* values[6] = {0,0,0,0,0,0}; values[4] = __pyx_k_38; values[5] = ((PyObject *)__pyx_n_s__end); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__rate)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__per)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("ppmt", 0, 4, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9411; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nper)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("ppmt", 0, 4, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9411; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pv)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("ppmt", 0, 4, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9411; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fv); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__when); if (value) { values[5] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ppmt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9411; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_rate = values[0]; __pyx_v_per = values[1]; __pyx_v_nper = values[2]; __pyx_v_pv = values[3]; __pyx_v_fv = values[4]; __pyx_v_when = values[5]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("ppmt", 0, 4, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9411; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ppmt", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_372ppmt(__pyx_self, __pyx_v_rate, __pyx_v_per, __pyx_v_nper, __pyx_v_pv, __pyx_v_fv, __pyx_v_when); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":9411 * * * def ppmt(rate, per, nper, pv, fv=0.0, when='end'): # <<<<<<<<<<<<<< * """Not implemented. Compute the payment against loan principal. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_372ppmt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rate, CYTHON_UNUSED PyObject *__pyx_v_per, CYTHON_UNUSED PyObject *__pyx_v_nper, CYTHON_UNUSED PyObject *__pyx_v_pv, CYTHON_UNUSED PyObject *__pyx_v_fv, CYTHON_UNUSED PyObject *__pyx_v_when) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("ppmt", 0); /* "ga4py/gain/notimplemented.pyx":9435 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ppmt", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_375prod(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_374prod[] = "Return the product of array elements over a given axis.\n\n Parameters\n ----------\n a : array_like\n Input data.\n axis : int, optional\n Axis over which the product is taken. By default, the product\n of all elements is calculated.\n dtype : data-type, optional\n The data-type of the returned array, as well as of the accumulator\n in which the elements are multiplied. By default, if `a` is of\n integer type, `dtype` is the default platform integer. (Note: if\n the type of `a` is unsigned, then so is `dtype`.) Otherwise,\n the dtype is the same as that of `a`.\n out : ndarray, optional\n Alternative output array in which to place the result. It must have\n the same shape as the expected output, but the type of the\n output values will be cast if necessary.\n\n Returns\n -------\n product_along_axis : ndarray, see `dtype` parameter above.\n An array shaped as `a` but with the specified axis removed.\n Returns a reference to `out` if specified.\n\n See Also\n --------\n ndarray.prod : equivalent method\n numpy.doc.ufuncs : Section \"Output arguments\"\n\n Notes\n -----\n Arithmetic is modular when using integer types, and no error is\n raised on overflow. That means that, on a 32-bit platform:\n\n >>> x = np.array([536870910, 536870910, 536870910, 536870910])\n >>> np.prod(x) #random\n 16\n\n Examples\n --------\n By default, calculate the product of all elements:\n\n >>> np.prod([1.,2.])\n 2.0\n\n Even when the input array is two-dimensional:\n\n >>> np.prod([[1.,2.],[3.,4.]])\n 24.0\n\n But we can also specify the axis over which to multiply:\n\n >>> np.prod([[1.,2.],[3.,4.]], axis=1)\n array([ 2., 12.])\n\n If the type of `x` is unsigned, then the output type is\n the unsigned platform integer:\n\n >>> x = np.array([1, 2, 3], dtype=np.uint8)\n >>> np.prod(x).dtype ""== np.uint\n True\n\n If `x` is of a signed integer type, then the output type\n is the default platform integer:\n\n >>> x = np.array([1, 2, 3], dtype=np.int8)\n >>> np.prod(x).dtype == np.int\n True\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_375prod = {__Pyx_NAMESTR("prod"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_375prod, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_374prod)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_375prod(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("prod (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":9438 * * * def prod(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the product of array elements over a given axis. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "prod") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9438; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_dtype = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("prod", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9438; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.prod", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_374prod(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_374prod(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("prod", 0); /* "ga4py/gain/notimplemented.pyx":9511 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9511; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.prod", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_377product(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_376product[] = "Return the product of array elements over a given axis.\n\n See Also\n --------\n prod : equivalent function; see for details.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_377product = {__Pyx_NAMESTR("product"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_377product, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_376product)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_377product(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("product (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":9514 * * * def product(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the product of array elements over a given axis. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "product") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9514; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_dtype = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("product", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9514; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.product", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_376product(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_376product(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("product", 0); /* "ga4py/gain/notimplemented.pyx":9522 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9522; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.product", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_379promote_types(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_378promote_types[] = "promote_types(type1, type2)\n\n Returns the data type with the smallest size and smallest scalar\n kind to which both ``type1`` and ``type2`` may be safely cast.\n The returned data type is always in native byte order.\n\n This function is symmetric and associative.\n\n Parameters\n ----------\n type1 : dtype or dtype specifier\n First data type.\n type2 : dtype or dtype specifier\n Second data type.\n\n Returns\n -------\n out : dtype\n The promoted data type.\n\n Notes\n -----\n .. versionadded:: 1.6.0\n\n See Also\n --------\n result_type, dtype, can_cast\n\n Examples\n --------\n >>> np.promote_types('f4', 'f8')\n dtype('float64')\n\n >>> np.promote_types('i8', 'f4')\n dtype('float64')\n\n >>> np.promote_types('>i8', '>> np.promote_types('i1', 'S8')\n Traceback (most recent call last):\n File \"\", line 1, in \n TypeError: invalid type promotion\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_379promote_types = {__Pyx_NAMESTR("promote_types"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_379promote_types, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_378promote_types)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_379promote_types(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_type1 = 0; CYTHON_UNUSED PyObject *__pyx_v_type2 = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("promote_types (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__type1,&__pyx_n_s__type2,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__type1)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__type2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("promote_types", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9525; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "promote_types") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9525; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_type1 = values[0]; __pyx_v_type2 = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("promote_types", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9525; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.promote_types", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_378promote_types(__pyx_self, __pyx_v_type1, __pyx_v_type2); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":9525 * * * def promote_types(type1, type2): # <<<<<<<<<<<<<< * """promote_types(type1, type2) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_378promote_types(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_type1, CYTHON_UNUSED PyObject *__pyx_v_type2) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("promote_types", 0); /* "ga4py/gain/notimplemented.pyx":9572 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.promote_types", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_381ptp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_380ptp[] = "Range of values (maximum - minimum) along an axis.\n\n The name of the function comes from the acronym for 'peak to peak'.\n\n Parameters\n ----------\n a : array_like\n Input values.\n axis : int, optional\n Axis along which to find the peaks. By default, flatten the\n array.\n out : array_like\n Alternative output array in which to place the result. It must\n have the same shape and buffer length as the expected output,\n but the type of the output values will be cast if necessary.\n\n Returns\n -------\n ptp : ndarray\n A new array holding the result, unless `out` was\n specified, in which case a reference to `out` is returned.\n\n Examples\n --------\n >>> x = np.arange(4).reshape((2,2))\n >>> x\n array([[0, 1],\n [2, 3]])\n\n >>> np.ptp(x, axis=0)\n array([2, 2])\n\n >>> np.ptp(x, axis=1)\n array([1, 1])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_381ptp = {__Pyx_NAMESTR("ptp"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_381ptp, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_380ptp)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_381ptp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("ptp (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":9575 * * * def ptp(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Range of values (maximum - minimum) along an axis. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ptp") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9575; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("ptp", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9575; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ptp", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_380ptp(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_380ptp(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("ptp", 0); /* "ga4py/gain/notimplemented.pyx":9612 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ptp", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_383put(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_382put[] = "Replaces specified elements of an array with given values.\n\n The indexing works on the flattened target array. `put` is roughly\n equivalent to:\n\n ::\n\n a.flat[ind] = v\n\n Parameters\n ----------\n a : ndarray\n Target array.\n ind : array_like\n Target indices, interpreted as integers.\n v : array_like\n Values to place in `a` at target indices. If `v` is shorter than\n `ind` it will be repeated as necessary.\n mode : {'raise', 'wrap', 'clip'}, optional\n Specifies how out-of-bounds indices will behave.\n\n * 'raise' -- raise an error (default)\n * 'wrap' -- wrap around\n * 'clip' -- clip to the range\n\n 'clip' mode means that all indices that are too large are replaced\n by the index that addresses the last element along that axis. Note\n that this disables indexing with negative numbers.\n\n See Also\n --------\n putmask, place\n\n Examples\n --------\n >>> a = np.arange(5)\n >>> np.put(a, [0, 2], [-44, -55])\n >>> a\n array([-44, 1, -55, 3, 4])\n\n >>> a = np.arange(5)\n >>> np.put(a, 22, -5, mode='clip')\n >>> a\n array([ 0, 1, 2, 3, -5])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_383put = {__Pyx_NAMESTR("put"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_383put, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_382put)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_383put(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_ind = 0; CYTHON_UNUSED PyObject *__pyx_v_v = 0; CYTHON_UNUSED PyObject *__pyx_v_mode = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("put (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__ind,&__pyx_n_s__v,&__pyx_n_s__mode,0}; PyObject* values[4] = {0,0,0,0}; values[3] = ((PyObject *)__pyx_n_s__raise); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ind)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9615; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__v)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("put", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9615; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "put") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9615; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_ind = values[1]; __pyx_v_v = values[2]; __pyx_v_mode = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("put", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9615; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.put", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_382put(__pyx_self, __pyx_v_a, __pyx_v_ind, __pyx_v_v, __pyx_v_mode); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":9615 * * * def put(a, ind, v, mode='raise'): # <<<<<<<<<<<<<< * """Replaces specified elements of an array with given values. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_382put(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_ind, CYTHON_UNUSED PyObject *__pyx_v_v, CYTHON_UNUSED PyObject *__pyx_v_mode) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("put", 0); /* "ga4py/gain/notimplemented.pyx":9662 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9662; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.put", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_385putmask(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_384putmask[] = "putmask(a, mask, values)\n\n Changes elements of an array based on conditional and input values.\n\n Sets ``a.flat[n] = values[n]`` for each n where ``mask.flat[n]==True``.\n\n If `values` is not the same size as `a` and `mask` then it will repeat.\n This gives behavior different from ``a[mask] = values``.\n\n Parameters\n ----------\n a : array_like\n Target array.\n mask : array_like\n Boolean mask array. It has to be the same shape as `a`.\n values : array_like\n Values to put into `a` where `mask` is True. If `values` is smaller\n than `a` it will be repeated.\n\n See Also\n --------\n place, put, take\n\n Examples\n --------\n >>> x = np.arange(6).reshape(2, 3)\n >>> np.putmask(x, x>2, x**2)\n >>> x\n array([[ 0, 1, 2],\n [ 9, 16, 25]])\n\n If `values` is smaller than `a` it is repeated:\n\n >>> x = np.arange(5)\n >>> np.putmask(x, x>1, [-33, -44])\n >>> x\n array([ 0, 1, -33, -44, -33])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_385putmask = {__Pyx_NAMESTR("putmask"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_385putmask, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_384putmask)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_385putmask(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_mask = 0; CYTHON_UNUSED PyObject *__pyx_v_values = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("putmask (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__mask,&__pyx_n_s__values,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mask)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("putmask", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9665; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__values)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("putmask", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9665; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "putmask") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9665; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_a = values[0]; __pyx_v_mask = values[1]; __pyx_v_values = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("putmask", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9665; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.putmask", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_384putmask(__pyx_self, __pyx_v_a, __pyx_v_mask, __pyx_v_values); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":9665 * * * def putmask(a, mask, values): # <<<<<<<<<<<<<< * """putmask(a, mask, values) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_384putmask(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_mask, CYTHON_UNUSED PyObject *__pyx_v_values) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("putmask", 0); /* "ga4py/gain/notimplemented.pyx":9706 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9706; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.putmask", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_387pv(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_386pv[] = "Compute the present value.\n\n Given:\n * a future value, `fv`\n * an interest `rate` compounded once per period, of which\n there are\n * `nper` total\n * a (fixed) payment, `pmt`, paid either\n * at the beginning (`when` = {'begin', 1}) or the end\n (`when` = {'end', 0}) of each period\n\n Return:\n the value now\n\n Parameters\n ----------\n rate : array_like\n Rate of interest (per period)\n nper : array_like\n Number of compounding periods\n pmt : array_like\n Payment\n fv : array_like, optional\n Future value\n when : {{'begin', 1}, {'end', 0}}, {string, int}, optional\n When payments are due ('begin' (1) or 'end' (0))\n\n Returns\n -------\n out : ndarray, float\n Present value of a series of payments or investments.\n\n Notes\n -----\n The present value is computed by solving the equation::\n\n fv +\n pv*(1 + rate)**nper +\n pmt*(1 + rate*when)/rate*((1 + rate)**nper - 1) = 0\n\n or, when ``rate = 0``::\n\n fv + pv + pmt * nper = 0\n\n for `pv`, which is then returned.\n\n References\n ----------\n .. [WRW] Wheeler, D. A., E. Rathke, and R. Weir (Eds.) (2009, May).\n Open Document Format for Office Applications (OpenDocument)v1.2,\n Part 2: Recalculated Formula (OpenFormula) Format - Annotated Version,\n Pre-Draft 12. Organization for the Advancement of Structured Information\n Standards (OASIS). Billerica, MA, USA. [ODT Document].\n Available:\n http://www.oasis-open.org/committees/documents.php?wg_abbrev=office-formula\n OpenDocument-formula-20090508.odt\n\n Examples\n --------\n What is the present value (e.g., the initial investment)\n of an investment that needs to total $15692.93\n after 10 years of saving $100 every month? Assume the\n interest rate is 5% (annually) compounded monthly.\n\n >>> np.pv(0.05/12, 10*12, -100, 15692.93)\n "" -100.00067131625819\n\n By convention, the negative sign represents cash flow out\n (i.e., money not available today). Thus, to end up with\n $15,692.93 in 10 years saving $100 a month at 5% annual\n interest, one's initial deposit should also be $100.\n\n If any input is array_like, ``pv`` returns an array of equal shape.\n Let's compare different interest rates in the example above:\n\n >>> a = np.array((0.05, 0.04, 0.03))/12\n >>> np.pv(a, 10*12, -100, 15692.93)\n array([ -100.00067132, -649.26771385, -1273.78633713])\n\n So, to end up with the same $15692.93 under the same $100 per month\n \"savings plan,\" for annual interest rates of 4% and 3%, one would\n need initial investments of $649.27 and $1273.79, respectively.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_387pv = {__Pyx_NAMESTR("pv"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_387pv, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_386pv)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_387pv(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_rate = 0; CYTHON_UNUSED PyObject *__pyx_v_nper = 0; CYTHON_UNUSED PyObject *__pyx_v_pmt = 0; CYTHON_UNUSED PyObject *__pyx_v_fv = 0; CYTHON_UNUSED PyObject *__pyx_v_when = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("pv (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__rate,&__pyx_n_s__nper,&__pyx_n_s__pmt,&__pyx_n_s__fv,&__pyx_n_s__when,0}; PyObject* values[5] = {0,0,0,0,0}; values[3] = __pyx_k_39; values[4] = ((PyObject *)__pyx_n_s__end); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__rate)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nper)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pv", 0, 3, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9709; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pmt)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("pv", 0, 3, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9709; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fv); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__when); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9709; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_rate = values[0]; __pyx_v_nper = values[1]; __pyx_v_pmt = values[2]; __pyx_v_fv = values[3]; __pyx_v_when = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("pv", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9709; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.pv", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_386pv(__pyx_self, __pyx_v_rate, __pyx_v_nper, __pyx_v_pmt, __pyx_v_fv, __pyx_v_when); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":9709 * * * def pv(rate, nper, pmt, fv=0.0, when='end'): # <<<<<<<<<<<<<< * """Compute the present value. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_386pv(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_rate, CYTHON_UNUSED PyObject *__pyx_v_nper, CYTHON_UNUSED PyObject *__pyx_v_pmt, CYTHON_UNUSED PyObject *__pyx_v_fv, CYTHON_UNUSED PyObject *__pyx_v_when) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("pv", 0); /* "ga4py/gain/notimplemented.pyx":9794 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.pv", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_389rank(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_388rank[] = "Return the number of dimensions of an array.\n\n If `a` is not already an array, a conversion is attempted.\n Scalars are zero dimensional.\n\n Parameters\n ----------\n a : array_like\n Array whose number of dimensions is desired. If `a` is not an array,\n a conversion is attempted.\n\n Returns\n -------\n number_of_dimensions : int\n The number of dimensions in the array.\n\n See Also\n --------\n ndim : equivalent function\n ndarray.ndim : equivalent property\n shape : dimensions of array\n ndarray.shape : dimensions of array\n\n Notes\n -----\n In the old Numeric package, `rank` was the term used for the number of\n dimensions, but in Numpy `ndim` is used instead.\n\n Examples\n --------\n >>> np.rank([1,2,3])\n 1\n >>> np.rank(np.array([[1,2,3],[4,5,6]]))\n 2\n >>> np.rank(1)\n 0\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_389rank = {__Pyx_NAMESTR("rank"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_389rank, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_388rank)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_389rank(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("rank (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_388rank(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":9797 * * * def rank(a): # <<<<<<<<<<<<<< * """Return the number of dimensions of an array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_388rank(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("rank", 0); /* "ga4py/gain/notimplemented.pyx":9836 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.rank", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_391rate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_390rate[] = "Compute the rate of interest per period.\n\n Parameters\n ----------\n nper : array_like\n Number of compounding periods\n pmt : array_like\n Payment\n pv : array_like\n Present value\n fv : array_like\n Future value\n when : {{'begin', 1}, {'end', 0}}, {string, int}, optional\n When payments are due ('begin' (1) or 'end' (0))\n guess : float, optional\n Starting guess for solving the rate of interest\n tol : float, optional\n Required tolerance for the solution\n maxiter : int, optional\n Maximum iterations in finding the solution\n\n Notes\n -----\n The rate of interest is computed by iteratively solving the\n (non-linear) equation::\n\n fv + pv*(1+rate)**nper + pmt*(1+rate*when)/rate * ((1+rate)**nper - 1) = 0\n\n for ``rate``.\n\n References\n ----------\n Wheeler, D. A., E. Rathke, and R. Weir (Eds.) (2009, May). Open Document\n Format for Office Applications (OpenDocument)v1.2, Part 2: Recalculated\n Formula (OpenFormula) Format - Annotated Version, Pre-Draft 12.\n Organization for the Advancement of Structured Information Standards\n (OASIS). Billerica, MA, USA. [ODT Document]. Available:\n http://www.oasis-open.org/committees/documents.php?wg_abbrev=office-formula\n OpenDocument-formula-20090508.odt\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_391rate = {__Pyx_NAMESTR("rate"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_391rate, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_390rate)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_391rate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_nper = 0; CYTHON_UNUSED PyObject *__pyx_v_pmt = 0; CYTHON_UNUSED PyObject *__pyx_v_pv = 0; CYTHON_UNUSED PyObject *__pyx_v_fv = 0; CYTHON_UNUSED PyObject *__pyx_v_when = 0; CYTHON_UNUSED PyObject *__pyx_v_guess = 0; CYTHON_UNUSED PyObject *__pyx_v_tol = 0; CYTHON_UNUSED PyObject *__pyx_v_maxiter = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("rate (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__nper,&__pyx_n_s__pmt,&__pyx_n_s__pv,&__pyx_n_s__fv,&__pyx_n_s__when,&__pyx_n_s__guess,&__pyx_n_s__tol,&__pyx_n_s__maxiter,0}; PyObject* values[8] = {0,0,0,0,0,0,0,0}; values[4] = ((PyObject *)__pyx_n_s__end); values[5] = __pyx_k_40; values[6] = __pyx_k_41; values[7] = ((PyObject *)__pyx_int_100); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nper)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pmt)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("rate", 0, 4, 8, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9839; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pv)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("rate", 0, 4, 8, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9839; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fv)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("rate", 0, 4, 8, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9839; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__when); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__guess); if (value) { values[5] = value; kw_args--; } } case 6: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__tol); if (value) { values[6] = value; kw_args--; } } case 7: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__maxiter); if (value) { values[7] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rate") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9839; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_nper = values[0]; __pyx_v_pmt = values[1]; __pyx_v_pv = values[2]; __pyx_v_fv = values[3]; __pyx_v_when = values[4]; __pyx_v_guess = values[5]; __pyx_v_tol = values[6]; __pyx_v_maxiter = values[7]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("rate", 0, 4, 8, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9839; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.rate", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_390rate(__pyx_self, __pyx_v_nper, __pyx_v_pmt, __pyx_v_pv, __pyx_v_fv, __pyx_v_when, __pyx_v_guess, __pyx_v_tol, __pyx_v_maxiter); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":9839 * * * def rate(nper, pmt, pv, fv, when='end', guess=0.1, tol=1e-06, maxiter=100): # <<<<<<<<<<<<<< * """Compute the rate of interest per period. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_390rate(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_nper, CYTHON_UNUSED PyObject *__pyx_v_pmt, CYTHON_UNUSED PyObject *__pyx_v_pv, CYTHON_UNUSED PyObject *__pyx_v_fv, CYTHON_UNUSED PyObject *__pyx_v_when, CYTHON_UNUSED PyObject *__pyx_v_guess, CYTHON_UNUSED PyObject *__pyx_v_tol, CYTHON_UNUSED PyObject *__pyx_v_maxiter) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("rate", 0); /* "ga4py/gain/notimplemented.pyx":9881 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9881; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.rate", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_393ravel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_392ravel[] = "Return a flattened array.\n\n A 1-D array, containing the elements of the input, is returned. A copy is\n made only if needed.\n\n Parameters\n ----------\n a : array_like\n Input array. The elements in ``a`` are read in the order specified by\n `order`, and packed as a 1-D array.\n order : {'C','F', 'A', 'K'}, optional\n The elements of ``a`` are read in this order. 'C' means to view\n the elements in C (row-major) order. 'F' means to view the elements\n in Fortran (column-major) order. 'A' means to view the elements\n in 'F' order if a is Fortran contiguous, 'C' order otherwise.\n 'K' means to view the elements in the order they occur in memory,\n except for reversing the data when strides are negative.\n By default, 'C' order is used.\n\n Returns\n -------\n 1d_array : ndarray\n Output of the same dtype as `a`, and of shape ``(a.size(),)``.\n\n See Also\n --------\n ndarray.flat : 1-D iterator over an array.\n ndarray.flatten : 1-D array copy of the elements of an array\n in row-major order.\n\n Notes\n -----\n In row-major order, the row index varies the slowest, and the column\n index the quickest. This can be generalized to multiple dimensions,\n where row-major order implies that the index along the first axis\n varies slowest, and the index along the last quickest. The opposite holds\n for Fortran-, or column-major, mode.\n\n Examples\n --------\n It is equivalent to ``reshape(-1, order=order)``.\n\n >>> x = np.array([[1, 2, 3], [4, 5, 6]])\n >>> print np.ravel(x)\n [1 2 3 4 5 6]\n\n >>> print x.reshape(-1)\n [1 2 3 4 5 6]\n\n >>> print np.ravel(x, order='F')\n [1 4 2 5 3 6]\n\n When ``order`` is 'A', it will preserve the array's 'C' or 'F' ordering:\n\n >>> print np.ravel(x.T)\n [1 4 2 5 3 6]\n >>> print np.ravel(x.T, order='A')\n [1 2 3 4 5 6]\n\n When ``or""der`` is 'K', it will preserve orderings that are neither 'C'\n nor 'F', but won't reverse axes:\n\n >>> a = np.arange(3)[::-1]; a\n array([2, 1, 0])\n >>> a.ravel(order='C')\n array([2, 1, 0])\n >>> a.ravel(order='K')\n array([2, 1, 0])\n\n >>> a = np.arange(12).reshape(2,3,2).swapaxes(1,2); a\n array([[[ 0, 2, 4],\n [ 1, 3, 5]],\n [[ 6, 8, 10],\n [ 7, 9, 11]]])\n >>> a.ravel(order='C')\n array([ 0, 2, 4, 1, 3, 5, 6, 8, 10, 7, 9, 11])\n >>> a.ravel(order='K')\n array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_393ravel = {__Pyx_NAMESTR("ravel"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_393ravel, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_392ravel)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_393ravel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("ravel (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__order,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)__pyx_n_s__C); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ravel") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9884; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_order = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("ravel", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9884; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ravel", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_392ravel(__pyx_self, __pyx_v_a, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":9884 * * * def ravel(a, order='C'): # <<<<<<<<<<<<<< * """Return a flattened array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_392ravel(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_order) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("ravel", 0); /* "ga4py/gain/notimplemented.pyx":9965 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9965; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ravel", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_395ravel_multi_index(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_394ravel_multi_index[] = "ravel_multi_index(multi_index, dims, mode='raise', order='C')\n\n Converts a tuple of index arrays into an array of flat\n indices, applying boundary modes to the multi-index.\n\n Parameters\n ----------\n multi_index : tuple of array_like\n A tuple of integer arrays, one array for each dimension.\n dims : tuple of ints\n The shape of array into which the indices from ``multi_index`` apply.\n mode : {'raise', 'wrap', 'clip'}, optional\n Specifies how out-of-bounds indices are handled. Can specify\n either one mode or a tuple of modes, one mode per index.\n\n * 'raise' -- raise an error (default)\n * 'wrap' -- wrap around\n * 'clip' -- clip to the range\n\n In 'clip' mode, a negative index which would normally\n wrap will clip to 0 instead.\n order : {'C', 'F'}, optional\n Determines whether the multi-index should be viewed as indexing in\n C (row-major) order or FORTRAN (column-major) order.\n\n Returns\n -------\n raveled_indices : ndarray\n An array of indices into the flattened version of an array\n of dimensions ``dims``.\n\n See Also\n --------\n unravel_index\n\n Notes\n -----\n .. versionadded:: 1.6.0\n\n Examples\n --------\n >>> arr = np.array([[3,6,6],[4,5,1]])\n >>> np.ravel_multi_index(arr, (7,6))\n array([22, 41, 37])\n >>> np.ravel_multi_index(arr, (7,6), order='F')\n array([31, 41, 13])\n >>> np.ravel_multi_index(arr, (4,6), mode='clip')\n array([22, 23, 19])\n >>> np.ravel_multi_index(arr, (4,4), mode=('clip','wrap'))\n array([12, 13, 13])\n\n >>> np.ravel_multi_index((3,1,4,1), (6,7,8,9))\n 1621\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_395ravel_multi_index = {__Pyx_NAMESTR("ravel_multi_index"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_395ravel_multi_index, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_394ravel_multi_index)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_395ravel_multi_index(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_multi_index = 0; CYTHON_UNUSED PyObject *__pyx_v_dims = 0; CYTHON_UNUSED PyObject *__pyx_v_mode = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("ravel_multi_index (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__multi_index,&__pyx_n_s__dims,&__pyx_n_s__mode,&__pyx_n_s__order,0}; PyObject* values[4] = {0,0,0,0}; values[2] = ((PyObject *)__pyx_n_s__raise); values[3] = ((PyObject *)__pyx_n_s__C); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__multi_index)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dims)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("ravel_multi_index", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9968; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ravel_multi_index") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9968; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_multi_index = values[0]; __pyx_v_dims = values[1]; __pyx_v_mode = values[2]; __pyx_v_order = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("ravel_multi_index", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9968; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ravel_multi_index", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_394ravel_multi_index(__pyx_self, __pyx_v_multi_index, __pyx_v_dims, __pyx_v_mode, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":9968 * * * def ravel_multi_index(multi_index, dims, mode='raise', order='C'): # <<<<<<<<<<<<<< * """ravel_multi_index(multi_index, dims, mode='raise', order='C') * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_394ravel_multi_index(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_multi_index, CYTHON_UNUSED PyObject *__pyx_v_dims, CYTHON_UNUSED PyObject *__pyx_v_mode, CYTHON_UNUSED PyObject *__pyx_v_order) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("ravel_multi_index", 0); /* "ga4py/gain/notimplemented.pyx":10025 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10025; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.ravel_multi_index", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_397real(PyObject *__pyx_self, PyObject *__pyx_v_val); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_396real[] = "Return the real part of the elements of the array.\n\n Parameters\n ----------\n val : array_like\n Input array.\n\n Returns\n -------\n out : ndarray\n Output array. If `val` is real, the type of `val` is used for the\n output. If `val` has complex elements, the returned type is float.\n\n See Also\n --------\n real_if_close, imag, angle\n\n Examples\n --------\n >>> a = np.array([1+2j, 3+4j, 5+6j])\n >>> a.real\n array([ 1., 3., 5.])\n >>> a.real = 9\n >>> a\n array([ 9.+2.j, 9.+4.j, 9.+6.j])\n >>> a.real = np.array([9, 8, 7])\n >>> a\n array([ 9.+2.j, 8.+4.j, 7.+6.j])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_397real = {__Pyx_NAMESTR("real"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_397real, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_396real)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_397real(PyObject *__pyx_self, PyObject *__pyx_v_val) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("real (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_396real(__pyx_self, ((PyObject *)__pyx_v_val)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10028 * * * def real(val): # <<<<<<<<<<<<<< * """Return the real part of the elements of the array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_396real(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_val) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("real", 0); /* "ga4py/gain/notimplemented.pyx":10059 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10059; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.real", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_399real_if_close(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_398real_if_close[] = "If complex input returns a real array if complex parts are close to zero.\n\n \"Close to zero\" is defined as `tol` * (machine epsilon of the type for\n `a`).\n\n Parameters\n ----------\n a : array_like\n Input array.\n tol : float\n Tolerance in machine epsilons for the complex part of the elements\n in the array.\n\n Returns\n -------\n out : ndarray\n If `a` is real, the type of `a` is used for the output. If `a`\n has complex elements, the returned type is float.\n\n See Also\n --------\n real, imag, angle\n\n Notes\n -----\n Machine epsilon varies from machine to machine and between data types\n but Python floats on most platforms have a machine epsilon equal to\n 2.2204460492503131e-16. You can use 'np.finfo(np.float).eps' to print\n out the machine epsilon for floats.\n\n Examples\n --------\n >>> np.finfo(np.float).eps\n 2.2204460492503131e-16\n\n >>> np.real_if_close([2.1 + 4e-14j], tol=1000)\n array([ 2.1])\n >>> np.real_if_close([2.1 + 4e-13j], tol=1000)\n array([ 2.1 +4.00000000e-13j])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_399real_if_close = {__Pyx_NAMESTR("real_if_close"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_399real_if_close, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_398real_if_close)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_399real_if_close(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_tol = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("real_if_close (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__tol,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)__pyx_int_100); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__tol); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "real_if_close") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10062; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_tol = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("real_if_close", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10062; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.real_if_close", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_398real_if_close(__pyx_self, __pyx_v_a, __pyx_v_tol); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10062 * * * def real_if_close(a, tol=100): # <<<<<<<<<<<<<< * """If complex input returns a real array if complex parts are close to zero. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_398real_if_close(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_tol) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("real_if_close", 0); /* "ga4py/gain/notimplemented.pyx":10104 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.real_if_close", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_401recfromcsv(PyObject *__pyx_self, PyObject *__pyx_v_fname); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_400recfromcsv[] = "Load ASCII data stored in a comma-separated file.\n\n The returned array is a record array (if ``usemask=False``, see\n `recarray`) or a masked record array (if ``usemask=True``,\n see `ma.mrecords.MaskedRecords`).\n\n For a complete description of all the input parameters, see `genfromtxt`.\n\n See Also\n --------\n numpy.genfromtxt : generic function to load ASCII data.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_401recfromcsv = {__Pyx_NAMESTR("recfromcsv"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_401recfromcsv, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_400recfromcsv)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_401recfromcsv(PyObject *__pyx_self, PyObject *__pyx_v_fname) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("recfromcsv (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_400recfromcsv(__pyx_self, ((PyObject *)__pyx_v_fname)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10107 * * * def recfromcsv(fname): # <<<<<<<<<<<<<< * """Load ASCII data stored in a comma-separated file. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_400recfromcsv(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_fname) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("recfromcsv", 0); /* "ga4py/gain/notimplemented.pyx":10121 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.recfromcsv", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_403recfromtxt(PyObject *__pyx_self, PyObject *__pyx_v_fname); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_402recfromtxt[] = "Load ASCII data from a file and return it in a record array.\n\n If ``usemask=False`` a standard `recarray` is returned,\n if ``usemask=True`` a MaskedRecords array is returned.\n\n Complete description of all the optional input parameters is available in\n the docstring of the `genfromtxt` function.\n\n See Also\n --------\n numpy.genfromtxt : generic function\n\n Notes\n -----\n By default, `dtype` is None, which means that the data-type of the output\n array will be determined from the data.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_403recfromtxt = {__Pyx_NAMESTR("recfromtxt"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_403recfromtxt, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_402recfromtxt)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_403recfromtxt(PyObject *__pyx_self, PyObject *__pyx_v_fname) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("recfromtxt (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_402recfromtxt(__pyx_self, ((PyObject *)__pyx_v_fname)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10124 * * * def recfromtxt(fname): # <<<<<<<<<<<<<< * """Load ASCII data from a file and return it in a record array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_402recfromtxt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_fname) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("recfromtxt", 0); /* "ga4py/gain/notimplemented.pyx":10143 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.recfromtxt", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_405repeat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_404repeat[] = "Repeat elements of an array.\n\n Parameters\n ----------\n a : array_like\n Input array.\n repeats : {int, array of ints}\n The number of repetitions for each element. `repeats` is broadcasted\n to fit the shape of the given axis.\n axis : int, optional\n The axis along which to repeat values. By default, use the\n flattened input array, and return a flat output array.\n\n Returns\n -------\n repeated_array : ndarray\n Output array which has the same shape as `a`, except along\n the given axis.\n\n See Also\n --------\n tile : Tile an array.\n\n Examples\n --------\n >>> x = np.array([[1,2],[3,4]])\n >>> np.repeat(x, 2)\n array([1, 1, 2, 2, 3, 3, 4, 4])\n >>> np.repeat(x, 3, axis=1)\n array([[1, 1, 1, 2, 2, 2],\n [3, 3, 3, 4, 4, 4]])\n >>> np.repeat(x, [1, 2], axis=0)\n array([[1, 2],\n [3, 4],\n [3, 4]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_405repeat = {__Pyx_NAMESTR("repeat"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_405repeat, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_404repeat)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_405repeat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_repeats = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("repeat (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__repeats,&__pyx_n_s__axis,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":10146 * * * def repeat(a, repeats, axis=None): # <<<<<<<<<<<<<< * """Repeat elements of an array. * */ values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__repeats)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("repeat", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10146; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "repeat") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10146; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_repeats = values[1]; __pyx_v_axis = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("repeat", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10146; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.repeat", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_404repeat(__pyx_self, __pyx_v_a, __pyx_v_repeats, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_404repeat(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_repeats, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("repeat", 0); /* "ga4py/gain/notimplemented.pyx":10184 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.repeat", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_407require(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_406require[] = "Return an ndarray of the provided type that satisfies requirements.\n\n This function is useful to be sure that an array with the correct flags\n is returned for passing to compiled code (perhaps through ctypes).\n\n Parameters\n ----------\n a : array_like\n The object to be converted to a type-and-requirement-satisfying array.\n dtype : data-type\n The required data-type, the default data-type is float64).\n requirements : str or list of str\n The requirements list can be any of the following\n\n * 'F_CONTIGUOUS' ('F') - ensure a Fortran-contiguous array\n * 'C_CONTIGUOUS' ('C') - ensure a C-contiguous array\n * 'ALIGNED' ('A') - ensure a data-type aligned array\n * 'WRITEABLE' ('W') - ensure a writable array\n * 'OWNDATA' ('O') - ensure an array that owns its own data\n\n See Also\n --------\n asarray : Convert input to an ndarray.\n asanyarray : Convert to an ndarray, but pass through ndarray subclasses.\n ascontiguousarray : Convert input to a contiguous array.\n asfortranarray : Convert input to an ndarray with column-major\n memory order.\n ndarray.flags : Information about the memory layout of the array.\n\n Notes\n -----\n The returned array will be guaranteed to have the listed requirements\n by making a copy if needed.\n\n Examples\n --------\n >>> x = np.arange(6).reshape(2,3)\n >>> x.flags\n C_CONTIGUOUS : True\n F_CONTIGUOUS : False\n OWNDATA : False\n WRITEABLE : True\n ALIGNED : True\n UPDATEIFCOPY : False\n\n >>> y = np.require(x, dtype=np.float32, requirements=['A', 'O', 'W', 'F'])\n >>> y.flags\n C_CONTIGUOUS : False\n F_CONTIGUOUS : True\n OWNDATA : True\n WRITEABLE : True\n ALIGNED : True\n UPDATEIFCOPY : False\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_407require = {__Pyx_NAMESTR("require"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_407require, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_406require)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_407require(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_requirements = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("require (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__dtype,&__pyx_n_s__requirements,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":10187 * * * def require(a, dtype=None, requirements=None): # <<<<<<<<<<<<<< * """Return an ndarray of the provided type that satisfies requirements. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__requirements); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "require") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10187; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_dtype = values[1]; __pyx_v_requirements = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("require", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10187; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.require", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_406require(__pyx_self, __pyx_v_a, __pyx_v_dtype, __pyx_v_requirements); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_406require(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_requirements) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("require", 0); /* "ga4py/gain/notimplemented.pyx":10243 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.require", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_409reshape(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_408reshape[] = "Gives a new shape to an array without changing its data.\n\n Parameters\n ----------\n a : array_like\n Array to be reshaped.\n newshape : int or tuple of ints\n The new shape should be compatible with the original shape. If\n an integer, then the result will be a 1-D array of that length.\n One shape dimension can be -1. In this case, the value is inferred\n from the length of the array and remaining dimensions.\n order : {'C', 'F', 'A'}, optional\n Determines whether the array data should be viewed as in C\n (row-major) order, FORTRAN (column-major) order, or the C/FORTRAN\n order should be preserved.\n\n Returns\n -------\n reshaped_array : ndarray\n This will be a new view object if possible; otherwise, it will\n be a copy.\n\n\n See Also\n --------\n ndarray.reshape : Equivalent method.\n\n Notes\n -----\n\n It is not always possible to change the shape of an array without\n copying the data. If you want an error to be raise if the data is copied,\n you should assign the new shape to the shape attribute of the array::\n\n >>> a = np.zeros((10, 2))\n # A transpose make the array non-contiguous\n >>> b = a.T\n # Taking a view makes it possible to modify the shape without modiying the\n # initial object.\n >>> c = b.view()\n >>> c.shape = (20)\n AttributeError: incompatible shape for a non-contiguous array\n\n\n Examples\n --------\n >>> a = np.array([[1,2,3], [4,5,6]])\n >>> np.reshape(a, 6)\n array([1, 2, 3, 4, 5, 6])\n >>> np.reshape(a, 6, order='F')\n array([1, 4, 2, 5, 3, 6])\n\n >>> np.reshape(a, (3,-1)) # the unspecified value is inferred to be 2\n array([[1, 2],\n [3, 4],\n [5, 6]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_409reshape = {__Pyx_NAMESTR("reshape"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_409reshape, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_408reshape)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_409reshape(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_newshape = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("reshape (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__newshape,&__pyx_n_s__order,0}; PyObject* values[3] = {0,0,0}; values[2] = ((PyObject *)__pyx_n_s__C); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__newshape)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("reshape", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10246; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "reshape") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10246; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_newshape = values[1]; __pyx_v_order = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("reshape", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10246; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.reshape", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_408reshape(__pyx_self, __pyx_v_a, __pyx_v_newshape, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10246 * * * def reshape(a, newshape, order='C'): # <<<<<<<<<<<<<< * """Gives a new shape to an array without changing its data. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_408reshape(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_newshape, CYTHON_UNUSED PyObject *__pyx_v_order) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("reshape", 0); /* "ga4py/gain/notimplemented.pyx":10305 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.reshape", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_411resize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_410resize[] = "Return a new array with the specified shape.\n\n If the new array is larger than the original array, then the new\n array is filled with repeated copies of `a`. Note that this behavior\n is different from a.resize(new_shape) which fills with zeros instead\n of repeated copies of `a`.\n\n Parameters\n ----------\n a : array_like\n Array to be resized.\n\n new_shape : int or tuple of int\n Shape of resized array.\n\n Returns\n -------\n reshaped_array : ndarray\n The new array is formed from the data in the old array, repeated\n if necessary to fill out the required number of elements. The\n data are repeated in the order that they are stored in memory.\n\n See Also\n --------\n ndarray.resize : resize an array in-place.\n\n Examples\n --------\n >>> a=np.array([[0,1],[2,3]])\n >>> np.resize(a,(1,4))\n array([[0, 1, 2, 3]])\n >>> np.resize(a,(2,4))\n array([[0, 1, 2, 3],\n [0, 1, 2, 3]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_411resize = {__Pyx_NAMESTR("resize"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_411resize, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_410resize)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_411resize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_new_shape = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("resize (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__new_shape,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__new_shape)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("resize", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10308; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "resize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10308; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_a = values[0]; __pyx_v_new_shape = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("resize", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10308; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.resize", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_410resize(__pyx_self, __pyx_v_a, __pyx_v_new_shape); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10308 * * * def resize(a, new_shape): # <<<<<<<<<<<<<< * """Return a new array with the specified shape. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_410resize(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_new_shape) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("resize", 0); /* "ga4py/gain/notimplemented.pyx":10345 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.resize", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_413restoredot(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_412restoredot[] = "Restore `dot`, `vdot`, and `innerproduct` to the default non-BLAS\n implementations.\n\n Typically, the user will only need to call this when troubleshooting and\n installation problem, reproducing the conditions of a build without an\n accelerated BLAS, or when being very careful about benchmarking linear\n algebra operations.\n\n See Also\n --------\n alterdot : `restoredot` undoes the effects of `alterdot`.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_413restoredot = {__Pyx_NAMESTR("restoredot"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_413restoredot, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_412restoredot)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_413restoredot(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("restoredot (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_412restoredot(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10348 * * * def restoredot(): # <<<<<<<<<<<<<< * """Restore `dot`, `vdot`, and `innerproduct` to the default non-BLAS * implementations. */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_412restoredot(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("restoredot", 0); /* "ga4py/gain/notimplemented.pyx":10363 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.restoredot", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_415result_type(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_414result_type[] = "result_type(*arrays_and_dtypes)\n\n Returns the type that results from applying the NumPy\n type promotion rules to the arguments.\n\n Type promotion in NumPy works similarly to the rules in languages\n like C++, with some slight differences. When both scalars and\n arrays are used, the array's type takes precedence and the actual value\n of the scalar is taken into account.\n\n For example, calculating 3*a, where a is an array of 32-bit floats,\n intuitively should result in a 32-bit float output. If the 3 is a\n 32-bit integer, the NumPy rules indicate it can't convert losslessly\n into a 32-bit float, so a 64-bit float should be the result type.\n By examining the value of the constant, '3', we see that it fits in\n an 8-bit integer, which can be cast losslessly into the 32-bit float.\n\n Parameters\n ----------\n arrays_and_dtypes : list of arrays and dtypes\n The operands of some operation whose result type is needed.\n\n Returns\n -------\n out : dtype\n The result type.\n\n See also\n --------\n dtype, promote_types, min_scalar_type, can_cast\n\n Notes\n -----\n .. versionadded:: 1.6.0\n\n The specific algorithm used is as follows.\n\n Categories are determined by first checking which of boolean,\n integer (int/uint), or floating point (float/complex) the maximum\n kind of all the arrays and the scalars are.\n \n If there are only scalars or the maximum category of the scalars\n is higher than the maximum category of the arrays,\n the data types are combined with :func:`promote_types`\n to produce the return value.\n\n Otherwise, `min_scalar_type` is called on each array, and\n the resulting data types are all combined with :func:`promote_types`\n to produce the return value.\n\n The set of int values is not a subset of the uint values for types\n with the same number of bits, something not reflected in\n :func:`min_scalar_type`"", but handled as a special case in `result_type`.\n\n Examples\n --------\n >>> np.result_type(3, np.arange(7, dtype='i1'))\n dtype('int8')\n\n >>> np.result_type('i4', 'c8')\n dtype('complex128')\n\n >>> np.result_type(3.0, -2)\n dtype('float64')\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_415result_type = {__Pyx_NAMESTR("result_type"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_415result_type, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_414result_type)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_415result_type(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_arrays_and_dtypes = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("result_type (wrapper)", 0); if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "result_type", 0))) return NULL; __Pyx_INCREF(__pyx_args); __pyx_v_arrays_and_dtypes = __pyx_args; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_414result_type(__pyx_self, __pyx_v_arrays_and_dtypes); __Pyx_XDECREF(__pyx_v_arrays_and_dtypes); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10366 * * * def result_type(*arrays_and_dtypes): # <<<<<<<<<<<<<< * """result_type(*arrays_and_dtypes) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_414result_type(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arrays_and_dtypes) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("result_type", 0); /* "ga4py/gain/notimplemented.pyx":10434 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.result_type", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_417roll(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_416roll[] = "Roll array elements along a given axis.\n\n Elements that roll beyond the last position are re-introduced at\n the first.\n\n Parameters\n ----------\n a : array_like\n Input array.\n shift : int\n The number of places by which elements are shifted.\n axis : int, optional\n The axis along which elements are shifted. By default, the array\n is flattened before shifting, after which the original\n shape is restored.\n\n Returns\n -------\n res : ndarray\n Output array, with the same shape as `a`.\n\n See Also\n --------\n rollaxis : Roll the specified axis backwards, until it lies in a\n given position.\n\n Examples\n --------\n >>> x = np.arange(10)\n >>> np.roll(x, 2)\n array([8, 9, 0, 1, 2, 3, 4, 5, 6, 7])\n\n >>> x2 = np.reshape(x, (2,5))\n >>> x2\n array([[0, 1, 2, 3, 4],\n [5, 6, 7, 8, 9]])\n >>> np.roll(x2, 1)\n array([[9, 0, 1, 2, 3],\n [4, 5, 6, 7, 8]])\n >>> np.roll(x2, 1, axis=0)\n array([[5, 6, 7, 8, 9],\n [0, 1, 2, 3, 4]])\n >>> np.roll(x2, 1, axis=1)\n array([[4, 0, 1, 2, 3],\n [9, 5, 6, 7, 8]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_417roll = {__Pyx_NAMESTR("roll"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_417roll, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_416roll)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_417roll(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_shift = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("roll (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__shift,&__pyx_n_s__axis,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":10437 * * * def roll(a, shift, axis=None): # <<<<<<<<<<<<<< * """Roll array elements along a given axis. * */ values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__shift)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("roll", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10437; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "roll") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10437; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_shift = values[1]; __pyx_v_axis = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("roll", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10437; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.roll", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_416roll(__pyx_self, __pyx_v_a, __pyx_v_shift, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_416roll(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_shift, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("roll", 0); /* "ga4py/gain/notimplemented.pyx":10485 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.roll", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_419rollaxis(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_418rollaxis[] = "Roll the specified axis backwards, until it lies in a given position.\n\n Parameters\n ----------\n a : ndarray\n Input array.\n axis : int\n The axis to roll backwards. The positions of the other axes do not\n change relative to one another.\n start : int, optional\n The axis is rolled until it lies before this position. The default,\n 0, results in a \"complete\" roll.\n\n Returns\n -------\n res : ndarray\n Output array.\n\n See Also\n --------\n roll : Roll the elements of an array by a number of positions along a\n given axis.\n\n Examples\n --------\n >>> a = np.ones((3,4,5,6))\n >>> np.rollaxis(a, 3, 1).shape\n (3, 6, 4, 5)\n >>> np.rollaxis(a, 2).shape\n (5, 3, 4, 6)\n >>> np.rollaxis(a, 1, 4).shape\n (3, 5, 6, 4)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_419rollaxis = {__Pyx_NAMESTR("rollaxis"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_419rollaxis, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_418rollaxis)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_419rollaxis(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_start = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("rollaxis (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__start,0}; PyObject* values[3] = {0,0,0}; values[2] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("rollaxis", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10488; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__start); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rollaxis") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10488; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_start = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("rollaxis", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10488; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.rollaxis", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_418rollaxis(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_start); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10488 * * * def rollaxis(a, axis, start=0): # <<<<<<<<<<<<<< * """Roll the specified axis backwards, until it lies in a given position. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_418rollaxis(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_start) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("rollaxis", 0); /* "ga4py/gain/notimplemented.pyx":10523 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.rollaxis", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_421roots(PyObject *__pyx_self, PyObject *__pyx_v_p); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_420roots[] = "Return the roots of a polynomial with coefficients given in p.\n\n The values in the rank-1 array `p` are coefficients of a polynomial.\n If the length of `p` is n+1 then the polynomial is described by::\n\n p[0] * x**n + p[1] * x**(n-1) + ... + p[n-1]*x + p[n]\n\n Parameters\n ----------\n p : array_like\n Rank-1 array of polynomial coefficients.\n\n Returns\n -------\n out : ndarray\n An array containing the complex roots of the polynomial.\n\n Raises\n ------\n ValueError :\n When `p` cannot be converted to a rank-1 array.\n\n See also\n --------\n poly : Find the coefficients of a polynomial with a given sequence\n of roots.\n polyval : Evaluate a polynomial at a point.\n polyfit : Least squares polynomial fit.\n poly1d : A one-dimensional polynomial class.\n\n Notes\n -----\n The algorithm relies on computing the eigenvalues of the\n companion matrix [1]_.\n\n References\n ----------\n .. [1] R. A. Horn & C. R. Johnson, *Matrix Analysis*. Cambridge, UK:\n Cambridge University Press, 1999, pp. 146-7.\n\n Examples\n --------\n >>> coeff = [3.2, 2, 1]\n >>> np.roots(coeff)\n array([-0.3125+0.46351241j, -0.3125-0.46351241j])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_421roots = {__Pyx_NAMESTR("roots"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_421roots, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_420roots)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_421roots(PyObject *__pyx_self, PyObject *__pyx_v_p) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("roots (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_420roots(__pyx_self, ((PyObject *)__pyx_v_p)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10526 * * * def roots(p): # <<<<<<<<<<<<<< * """Return the roots of a polynomial with coefficients given in p. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_420roots(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_p) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("roots", 0); /* "ga4py/gain/notimplemented.pyx":10574 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10574; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.roots", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_423rot90(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_422rot90[] = "Rotate an array by 90 degrees in the counter-clockwise direction.\n\n The first two dimensions are rotated; therefore, the array must be at\n least 2-D.\n\n Parameters\n ----------\n m : array_like\n Array of two or more dimensions.\n k : integer\n Number of times the array is rotated by 90 degrees.\n\n Returns\n -------\n y : ndarray\n Rotated array.\n\n See Also\n --------\n fliplr : Flip an array horizontally.\n flipud : Flip an array vertically.\n\n Examples\n --------\n >>> m = np.array([[1,2],[3,4]], int)\n >>> m\n array([[1, 2],\n [3, 4]])\n >>> np.rot90(m)\n array([[2, 4],\n [1, 3]])\n >>> np.rot90(m, 2)\n array([[4, 3],\n [2, 1]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_423rot90 = {__Pyx_NAMESTR("rot90"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_423rot90, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_422rot90)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_423rot90(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_m = 0; CYTHON_UNUSED PyObject *__pyx_v_k = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("rot90 (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__m,&__pyx_n_s__k,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)__pyx_int_1); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__m)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__k); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rot90") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10577; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_m = values[0]; __pyx_v_k = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("rot90", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10577; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.rot90", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_422rot90(__pyx_self, __pyx_v_m, __pyx_v_k); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10577 * * * def rot90(m, k=1): # <<<<<<<<<<<<<< * """Rotate an array by 90 degrees in the counter-clockwise direction. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_422rot90(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_m, CYTHON_UNUSED PyObject *__pyx_v_k) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("rot90", 0); /* "ga4py/gain/notimplemented.pyx":10614 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.rot90", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_425round(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_424round[] = "Round an array to the given number of decimals.\n\n Refer to `around` for full documentation.\n\n See Also\n --------\n around : equivalent function\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_425round = {__Pyx_NAMESTR("round"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_425round, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_424round)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_425round(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_decimals = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("round (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__decimals,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; values[1] = ((PyObject *)__pyx_int_0); /* "ga4py/gain/notimplemented.pyx":10617 * * * def round(a, decimals=0, out=None): # <<<<<<<<<<<<<< * """Round an array to the given number of decimals. * */ values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__decimals); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "round") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10617; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_decimals = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("round", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10617; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.round", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_424round(__pyx_self, __pyx_v_a, __pyx_v_decimals, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_424round(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_decimals, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("round", 0); /* "ga4py/gain/notimplemented.pyx":10627 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10627; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.round", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_427round_(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_426round_[] = "Round an array to the given number of decimals.\n\n Refer to `around` for full documentation.\n\n See Also\n --------\n around : equivalent function\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_427round_ = {__Pyx_NAMESTR("round_"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_427round_, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_426round_)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_427round_(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_decimals = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("round_ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__decimals,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; values[1] = ((PyObject *)__pyx_int_0); /* "ga4py/gain/notimplemented.pyx":10630 * * * def round_(a, decimals=0, out=None): # <<<<<<<<<<<<<< * """Round an array to the given number of decimals. * */ values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__decimals); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "round_") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10630; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_decimals = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("round_", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10630; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.round_", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_426round_(__pyx_self, __pyx_v_a, __pyx_v_decimals, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_426round_(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_decimals, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("round_", 0); /* "ga4py/gain/notimplemented.pyx":10640 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10640; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.round_", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_429row_stack(PyObject *__pyx_self, PyObject *__pyx_v_tup); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_428row_stack[] = "Stack arrays in sequence vertically (row wise).\n\n Take a sequence of arrays and stack them vertically to make a single\n array. Rebuild arrays divided by `vsplit`.\n\n Parameters\n ----------\n tup : sequence of ndarrays\n Tuple containing arrays to be stacked. The arrays must have the same\n shape along all but the first axis.\n\n Returns\n -------\n stacked : ndarray\n The array formed by stacking the given arrays.\n\n See Also\n --------\n hstack : Stack arrays in sequence horizontally (column wise).\n dstack : Stack arrays in sequence depth wise (along third dimension).\n concatenate : Join a sequence of arrays together.\n vsplit : Split array into a list of multiple sub-arrays vertically.\n\n\n Notes\n -----\n Equivalent to ``np.concatenate(tup, axis=0)``\n\n Examples\n --------\n >>> a = np.array([1, 2, 3])\n >>> b = np.array([2, 3, 4])\n >>> np.vstack((a,b))\n array([[1, 2, 3],\n [2, 3, 4]])\n\n >>> a = np.array([[1], [2], [3]])\n >>> b = np.array([[2], [3], [4]])\n >>> np.vstack((a,b))\n array([[1],\n [2],\n [3],\n [2],\n [3],\n [4]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_429row_stack = {__Pyx_NAMESTR("row_stack"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_429row_stack, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_428row_stack)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_429row_stack(PyObject *__pyx_self, PyObject *__pyx_v_tup) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("row_stack (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_428row_stack(__pyx_self, ((PyObject *)__pyx_v_tup)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10643 * * * def row_stack(tup): # <<<<<<<<<<<<<< * """Stack arrays in sequence vertically (row wise). * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_428row_stack(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_tup) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("row_stack", 0); /* "ga4py/gain/notimplemented.pyx":10691 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10691; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.row_stack", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_431safe_eval(PyObject *__pyx_self, PyObject *__pyx_v_source); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_430safe_eval[] = "Protected string evaluation.\n\n Evaluate a string containing a Python literal expression without\n allowing the execution of arbitrary non-literal code.\n\n Parameters\n ----------\n source : str\n The string to evaluate.\n\n Returns\n -------\n obj : object\n The result of evaluating `source`.\n\n Raises\n ------\n SyntaxError\n If the code has invalid Python syntax, or if it contains non-literal\n code.\n\n Examples\n --------\n >>> np.safe_eval('1')\n 1\n >>> np.safe_eval('[1, 2, 3]')\n [1, 2, 3]\n >>> np.safe_eval('{\"foo\": (\"bar\", 10.0)}')\n {'foo': ('bar', 10.0)}\n\n >>> np.safe_eval('import os')\n Traceback (most recent call last):\n ...\n SyntaxError: invalid syntax\n\n >>> np.safe_eval('open(\"/home/user/.ssh/id_dsa\").read()')\n Traceback (most recent call last):\n ...\n SyntaxError: Unsupported source construct: compiler.ast.CallFunc\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_431safe_eval = {__Pyx_NAMESTR("safe_eval"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_431safe_eval, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_430safe_eval)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_431safe_eval(PyObject *__pyx_self, PyObject *__pyx_v_source) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("safe_eval (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_430safe_eval(__pyx_self, ((PyObject *)__pyx_v_source)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10694 * * * def safe_eval(source): # <<<<<<<<<<<<<< * """Protected string evaluation. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_430safe_eval(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_source) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("safe_eval", 0); /* "ga4py/gain/notimplemented.pyx":10736 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.safe_eval", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_433save(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_432save[] = "Save an array to a binary file in NumPy ``.npy`` format.\n\n Parameters\n ----------\n file : file or str\n File or filename to which the data is saved. If file is a file-object,\n then the filename is unchanged. If file is a string, a ``.npy``\n extension will be appended to the file name if it does not already\n have one.\n arr : array_like\n Array data to be saved.\n\n See Also\n --------\n savez : Save several arrays into a ``.npz`` archive\n savetxt, load\n\n Notes\n -----\n For a description of the ``.npy`` format, see `format`.\n\n Examples\n --------\n >>> from tempfile import TemporaryFile\n >>> outfile = TemporaryFile()\n\n >>> x = np.arange(10)\n >>> np.save(outfile, x)\n\n >>> outfile.seek(0) # Only needed here to simulate closing & reopening file\n >>> np.load(outfile)\n array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_433save = {__Pyx_NAMESTR("save"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_433save, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_432save)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_433save(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_file = 0; CYTHON_UNUSED PyObject *__pyx_v_arr = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("save (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__file,&__pyx_n_s__arr,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__file)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arr)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("save", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10739; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "save") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10739; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_file = values[0]; __pyx_v_arr = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("save", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10739; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.save", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_432save(__pyx_self, __pyx_v_file, __pyx_v_arr); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10739 * * * def save(file, arr): # <<<<<<<<<<<<<< * """Save an array to a binary file in NumPy ``.npy`` format. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_432save(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_file, CYTHON_UNUSED PyObject *__pyx_v_arr) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("save", 0); /* "ga4py/gain/notimplemented.pyx":10774 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10774; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.save", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_435savetxt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_434savetxt[] = "Save an array to a text file.\n\n Parameters\n ----------\n fname : filename or file handle\n If the filename ends in ``.gz``, the file is automatically saved in\n compressed gzip format. `loadtxt` understands gzipped files\n transparently.\n X : array_like\n Data to be saved to a text file.\n fmt : str or sequence of strs\n A single format (%10.5f), a sequence of formats, or a\n multi-format string, e.g. 'Iteration %d -- %10.5f', in which\n case `delimiter` is ignored.\n delimiter : str\n Character separating columns.\n newline : str\n .. versionadded:: 1.5.0\n\n Character separating lines.\n\n\n See Also\n --------\n save : Save an array to a binary file in NumPy ``.npy`` format\n savez : Save several arrays into a ``.npz`` compressed archive\n\n Notes\n -----\n Further explanation of the `fmt` parameter\n (``%[flag]width[.precision]specifier``):\n\n flags:\n ``-`` : left justify\n\n ``+`` : Forces to preceed result with + or -.\n\n ``0`` : Left pad the number with zeros instead of space (see width).\n\n width:\n Minimum number of characters to be printed. The value is not truncated\n if it has more characters.\n\n precision:\n - For integer specifiers (eg. ``d,i,o,x``), the minimum number of\n digits.\n - For ``e, E`` and ``f`` specifiers, the number of digits to print\n after the decimal point.\n - For ``g`` and ``G``, the maximum number of significant digits.\n - For ``s``, the maximum number of characters.\n\n specifiers:\n ``c`` : character\n\n ``d`` or ``i`` : signed decimal integer\n\n ``e`` or ``E`` : scientific notation with ``e`` or ``E``.\n\n ``f`` : decimal floating point\n\n ``g,G`` : use the shorter of ``e,E`` or ``f``\n\n ``o`` : signed octal\n\n ``s`` : string of characters\n\n ``u`` : un""signed decimal integer\n\n ``x,X`` : unsigned hexadecimal integer\n\n This explanation of ``fmt`` is not complete, for an exhaustive\n specification see [1]_.\n\n References\n ----------\n .. [1] `Format Specification Mini-Language\n `_, Python Documentation.\n\n Examples\n --------\n >>> x = y = z = np.arange(0.0,5.0,1.0)\n >>> np.savetxt('test.out', x, delimiter=',') # X is an array\n >>> np.savetxt('test.out', (x,y,z)) # x,y,z equal sized 1D arrays\n >>> np.savetxt('test.out', x, fmt='%1.4e') # use exponential notation\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_435savetxt = {__Pyx_NAMESTR("savetxt"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_435savetxt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_434savetxt)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_435savetxt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_fname = 0; CYTHON_UNUSED PyObject *__pyx_v_X = 0; CYTHON_UNUSED PyObject *__pyx_v_fmt = 0; CYTHON_UNUSED PyObject *__pyx_v_delimiter = 0; CYTHON_UNUSED PyObject *__pyx_v_newline = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("savetxt (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fname,&__pyx_n_s__X,&__pyx_n_s__fmt,&__pyx_n_s__delimiter,&__pyx_n_s__newline,0}; PyObject* values[5] = {0,0,0,0,0}; values[2] = ((PyObject *)__pyx_kp_s_42); values[3] = ((PyObject *)__pyx_kp_s_5); values[4] = ((PyObject *)__pyx_kp_s_43); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fname)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__X)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("savetxt", 0, 2, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10777; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fmt); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__delimiter); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__newline); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "savetxt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10777; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_fname = values[0]; __pyx_v_X = values[1]; __pyx_v_fmt = values[2]; __pyx_v_delimiter = values[3]; __pyx_v_newline = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("savetxt", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10777; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.savetxt", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_434savetxt(__pyx_self, __pyx_v_fname, __pyx_v_X, __pyx_v_fmt, __pyx_v_delimiter, __pyx_v_newline); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10777 * * * def savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n'): # <<<<<<<<<<<<<< * """Save an array to a text file. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_434savetxt(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_fname, CYTHON_UNUSED PyObject *__pyx_v_X, CYTHON_UNUSED PyObject *__pyx_v_fmt, CYTHON_UNUSED PyObject *__pyx_v_delimiter, CYTHON_UNUSED PyObject *__pyx_v_newline) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("savetxt", 0); /* "ga4py/gain/notimplemented.pyx":10865 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10865; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.savetxt", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_437savez(PyObject *__pyx_self, PyObject *__pyx_v_file); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_436savez[] = "Save several arrays into a single file in uncompressed ``.npz`` format.\n\n If arguments are passed in with no keywords, the corresponding variable\n names, in the .npz file, are 'arr_0', 'arr_1', etc. If keyword arguments\n are given, the corresponding variable names, in the ``.npz`` file will\n match the keyword names.\n\n Parameters\n ----------\n file : str or file\n Either the file name (string) or an open file (file-like object)\n where the data will be saved. If file is a string, the ``.npz``\n extension will be appended to the file name if it is not already there.\n *args : Arguments, optional\n Arrays to save to the file. Since it is not possible for Python to\n know the names of the arrays outside `savez`, the arrays will be saved\n with names \"arr_0\", \"arr_1\", and so on. These arguments can be any\n expression.\n **kwds : Keyword arguments, optional\n Arrays to save to the file. Arrays will be saved in the file with the\n keyword names.\n\n Returns\n -------\n None\n\n See Also\n --------\n save : Save a single array to a binary file in NumPy format.\n savetxt : Save an array to a file as plain text.\n\n Notes\n -----\n The ``.npz`` file format is a zipped archive of files named after the\n variables they contain. The archive is not compressed and each file\n in the archive contains one variable in ``.npy`` format. For a\n description of the ``.npy`` format, see `format`.\n\n When opening the saved ``.npz`` file with `load` a `NpzFile` object is\n returned. This is a dictionary-like object which can be queried for\n its list of arrays (with the ``.files`` attribute), and for the arrays\n themselves.\n\n Examples\n --------\n >>> from tempfile import TemporaryFile\n >>> outfile = TemporaryFile()\n >>> x = np.arange(10)\n >>> y = np.sin(x)\n\n Using `savez` with *args, the arrays are saved wit""h default names.\n\n >>> np.savez(outfile, x, y)\n >>> outfile.seek(0) # Only needed here to simulate closing & reopening file\n >>> npzfile = np.load(outfile)\n >>> npzfile.files\n ['arr_1', 'arr_0']\n >>> npzfile['arr_0']\n array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\n\n Using `savez` with **kwds, the arrays are saved with the keyword names.\n\n >>> outfile = TemporaryFile()\n >>> np.savez(outfile, x=x, y=y)\n >>> outfile.seek(0)\n >>> npzfile = np.load(outfile)\n >>> npzfile.files\n ['y', 'x']\n >>> npzfile['x']\n array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\n\n See Also\n --------\n numpy.savez_compressed : Save several arrays into a compressed .npz file format\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_437savez = {__Pyx_NAMESTR("savez"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_437savez, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_436savez)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_437savez(PyObject *__pyx_self, PyObject *__pyx_v_file) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("savez (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_436savez(__pyx_self, ((PyObject *)__pyx_v_file)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10868 * * * def savez(file): # <<<<<<<<<<<<<< * """Save several arrays into a single file in uncompressed ``.npz`` format. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_436savez(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_file) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("savez", 0); /* "ga4py/gain/notimplemented.pyx":10945 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10945; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.savez", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_439savez_compressed(PyObject *__pyx_self, PyObject *__pyx_v_file); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_438savez_compressed[] = "Save several arrays into a single file in compressed ``.npz`` format.\n\n If keyword arguments are given, then filenames are taken from the keywords.\n If arguments are passed in with no keywords, then stored file names are\n arr_0, arr_1, etc.\n\n Parameters\n ----------\n file : str\n File name of .npz file.\n args : Arguments\n Function arguments.\n kwds : Keyword arguments\n Keywords.\n\n See Also\n --------\n numpy.savez : Save several arrays into an uncompressed .npz file format\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_439savez_compressed = {__Pyx_NAMESTR("savez_compressed"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_439savez_compressed, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_438savez_compressed)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_439savez_compressed(PyObject *__pyx_self, PyObject *__pyx_v_file) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("savez_compressed (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_438savez_compressed(__pyx_self, ((PyObject *)__pyx_v_file)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10948 * * * def savez_compressed(file): # <<<<<<<<<<<<<< * """Save several arrays into a single file in compressed ``.npz`` format. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_438savez_compressed(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_file) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("savez_compressed", 0); /* "ga4py/gain/notimplemented.pyx":10969 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10969; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.savez_compressed", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_441sctype2char(PyObject *__pyx_self, PyObject *__pyx_v_sctype); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_440sctype2char[] = "Return the string representation of a scalar dtype.\n\n Parameters\n ----------\n sctype : scalar dtype or object\n If a scalar dtype, the corresponding string character is\n returned. If an object, `sctype2char` tries to infer its scalar type\n and then return the corresponding string character.\n\n Returns\n -------\n typechar : str\n The string character corresponding to the scalar type.\n\n Raises\n ------\n ValueError\n If `sctype` is an object for which the type can not be inferred.\n\n See Also\n --------\n obj2sctype, issctype, issubsctype, mintypecode\n\n Examples\n --------\n >>> for sctype in [np.int32, np.float, np.complex, np.string_, np.ndarray]:\n ... print np.sctype2char(sctype)\n l\n d\n D\n S\n O\n\n >>> x = np.array([1., 2-1.j])\n >>> np.sctype2char(x)\n 'D'\n >>> np.sctype2char(list)\n 'O'\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_441sctype2char = {__Pyx_NAMESTR("sctype2char"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_441sctype2char, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_440sctype2char)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_441sctype2char(PyObject *__pyx_self, PyObject *__pyx_v_sctype) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("sctype2char (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_440sctype2char(__pyx_self, ((PyObject *)__pyx_v_sctype)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":10972 * * * def sctype2char(sctype): # <<<<<<<<<<<<<< * """Return the string representation of a scalar dtype. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_440sctype2char(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_sctype) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("sctype2char", 0); /* "ga4py/gain/notimplemented.pyx":11013 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11013; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.sctype2char", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_443searchsorted(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_442searchsorted[] = "Find indices where elements should be inserted to maintain order.\n\n Find the indices into a sorted array `a` such that, if the corresponding\n elements in `v` were inserted before the indices, the order of `a` would\n be preserved.\n\n Parameters\n ----------\n a : 1-D array_like\n Input array, sorted in ascending order.\n v : array_like\n Values to insert into `a`.\n side : {'left', 'right'}, optional\n If 'left', the index of the first suitable location found is given. If\n 'right', return the last such index. If there is no suitable\n index, return either 0 or N (where N is the length of `a`).\n\n Returns\n -------\n indices : array of ints\n Array of insertion points with the same shape as `v`.\n\n See Also\n --------\n sort : Return a sorted copy of an array.\n histogram : Produce histogram from 1-D data.\n\n Notes\n -----\n Binary search is used to find the required insertion points.\n\n As of Numpy 1.4.0 `searchsorted` works with real/complex arrays containing\n `nan` values. The enhanced sort order is documented in `sort`.\n\n Examples\n --------\n >>> np.searchsorted([1,2,3,4,5], 3)\n 2\n >>> np.searchsorted([1,2,3,4,5], 3, side='right')\n 3\n >>> np.searchsorted([1,2,3,4,5], [-10, 10, 2, 3])\n array([0, 5, 1, 2])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_443searchsorted = {__Pyx_NAMESTR("searchsorted"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_443searchsorted, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_442searchsorted)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_443searchsorted(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_v = 0; CYTHON_UNUSED PyObject *__pyx_v_side = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("searchsorted (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__v,&__pyx_n_s__side,0}; PyObject* values[3] = {0,0,0}; values[2] = ((PyObject *)__pyx_n_s__left); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__v)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("searchsorted", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11016; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__side); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "searchsorted") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11016; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_v = values[1]; __pyx_v_side = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("searchsorted", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11016; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.searchsorted", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_442searchsorted(__pyx_self, __pyx_v_a, __pyx_v_v, __pyx_v_side); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":11016 * * * def searchsorted(a, v, side='left'): # <<<<<<<<<<<<<< * """Find indices where elements should be inserted to maintain order. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_442searchsorted(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_v, CYTHON_UNUSED PyObject *__pyx_v_side) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("searchsorted", 0); /* "ga4py/gain/notimplemented.pyx":11061 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11061; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.searchsorted", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_445select(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_444select[] = "Return an array drawn from elements in choicelist, depending on conditions.\n\n Parameters\n ----------\n condlist : list of bool ndarrays\n The list of conditions which determine from which array in `choicelist`\n the output elements are taken. When multiple conditions are satisfied,\n the first one encountered in `condlist` is used.\n choicelist : list of ndarrays\n The list of arrays from which the output elements are taken. It has\n to be of the same length as `condlist`.\n default : scalar, optional\n The element inserted in `output` when all conditions evaluate to False.\n\n Returns\n -------\n output : ndarray\n The output at position m is the m-th element of the array in\n `choicelist` where the m-th element of the corresponding array in\n `condlist` is True.\n\n See Also\n --------\n where : Return elements from one of two arrays depending on condition.\n take, choose, compress, diag, diagonal\n\n Examples\n --------\n >>> x = np.arange(10)\n >>> condlist = [x<3, x>5]\n >>> choicelist = [x, x**2]\n >>> np.select(condlist, choicelist)\n array([ 0, 1, 2, 0, 0, 0, 36, 49, 64, 81])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_445select = {__Pyx_NAMESTR("select"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_445select, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_444select)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_445select(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_condlist = 0; CYTHON_UNUSED PyObject *__pyx_v_choicelist = 0; CYTHON_UNUSED PyObject *__pyx_v_default = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("select (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__condlist,&__pyx_n_s__choicelist,&__pyx_n_s__default,0}; PyObject* values[3] = {0,0,0}; values[2] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__condlist)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__choicelist)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("select", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11064; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__default); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11064; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_condlist = values[0]; __pyx_v_choicelist = values[1]; __pyx_v_default = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("select", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11064; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.select", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_444select(__pyx_self, __pyx_v_condlist, __pyx_v_choicelist, __pyx_v_default); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":11064 * * * def select(condlist, choicelist, default=0): # <<<<<<<<<<<<<< * """Return an array drawn from elements in choicelist, depending on conditions. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_444select(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_condlist, CYTHON_UNUSED PyObject *__pyx_v_choicelist, CYTHON_UNUSED PyObject *__pyx_v_default) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("select", 0); /* "ga4py/gain/notimplemented.pyx":11100 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.select", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_447set_numeric_ops(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_446set_numeric_ops[] = "set_numeric_ops(op1=func1, op2=func2, ...)\n\n Set numerical operators for array objects.\n\n Parameters\n ----------\n op1, op2, ... : callable\n Each ``op = func`` pair describes an operator to be replaced.\n For example, ``add = lambda x, y: np.add(x, y) % 5`` would replace\n addition by modulus 5 addition.\n\n Returns\n -------\n saved_ops : list of callables\n A list of all operators, stored before making replacements.\n\n Notes\n -----\n .. WARNING::\n Use with care! Incorrect usage may lead to memory errors.\n\n A function replacing an operator cannot make use of that operator.\n For example, when replacing add, you may not use ``+``. Instead,\n directly call ufuncs.\n\n Examples\n --------\n >>> def add_mod5(x, y):\n ... return np.add(x, y) % 5\n ...\n >>> old_funcs = np.set_numeric_ops(add=add_mod5)\n\n >>> x = np.arange(12).reshape((3, 4))\n >>> x + x\n array([[0, 2, 4, 1],\n [3, 0, 2, 4],\n [1, 3, 0, 2]])\n\n >>> ignore = np.set_numeric_ops(**old_funcs) # restore operators\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_447set_numeric_ops = {__Pyx_NAMESTR("set_numeric_ops"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_447set_numeric_ops, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_446set_numeric_ops)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_447set_numeric_ops(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_numeric_ops (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_446set_numeric_ops(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":11103 * * * def set_numeric_ops(): # <<<<<<<<<<<<<< * """set_numeric_ops(op1=func1, op2=func2, ...) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_446set_numeric_ops(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("set_numeric_ops", 0); /* "ga4py/gain/notimplemented.pyx":11146 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.set_numeric_ops", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_449set_printoptions(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_448set_printoptions[] = "Set printing options.\n\n These options determine the way floating point numbers, arrays and\n other NumPy objects are displayed.\n\n Parameters\n ----------\n precision : int, optional\n Number of digits of precision for floating point output (default 8).\n threshold : int, optional\n Total number of array elements which trigger summarization\n rather than full repr (default 1000).\n edgeitems : int, optional\n Number of array items in summary at beginning and end of\n each dimension (default 3).\n linewidth : int, optional\n The number of characters per line for the purpose of inserting\n line breaks (default 75).\n suppress : bool, optional\n Whether or not suppress printing of small floating point values\n using scientific notation (default False).\n nanstr : str, optional\n String representation of floating point not-a-number (default nan).\n infstr : str, optional\n String representation of floating point infinity (default inf).\n\n See Also\n --------\n get_printoptions, set_string_function\n\n Examples\n --------\n Floating point precision can be set:\n\n >>> np.set_printoptions(precision=4)\n >>> print np.array([1.123456789])\n [ 1.1235]\n\n Long arrays can be summarised:\n\n >>> np.set_printoptions(threshold=5)\n >>> print np.arange(10)\n [0 1 2 ..., 7 8 9]\n\n Small results can be suppressed:\n\n >>> eps = np.finfo(float).eps\n >>> x = np.arange(4.)\n >>> x**2 - (x + eps)**2\n array([ -4.9304e-32, -4.4409e-16, 0.0000e+00, 0.0000e+00])\n >>> np.set_printoptions(suppress=True)\n >>> x**2 - (x + eps)**2\n array([-0., -0., 0., 0.])\n\n To put back the default options, you can use:\n\n >>> np.set_printoptions(edgeitems=3,infstr='Inf',\n ... linewidth=75, nanstr='NaN', precision=8,\n ... suppress=False, threshold=1000)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_449set_printoptions = {__Pyx_NAMESTR("set_printoptions"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_449set_printoptions, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_448set_printoptions)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_449set_printoptions(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_precision = 0; CYTHON_UNUSED PyObject *__pyx_v_threshold = 0; CYTHON_UNUSED PyObject *__pyx_v_edgeitems = 0; CYTHON_UNUSED PyObject *__pyx_v_linewidth = 0; CYTHON_UNUSED PyObject *__pyx_v_suppress = 0; CYTHON_UNUSED PyObject *__pyx_v_nanstr = 0; CYTHON_UNUSED PyObject *__pyx_v_infstr = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_printoptions (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__precision,&__pyx_n_s__threshold,&__pyx_n_s__edgeitems,&__pyx_n_s__linewidth,&__pyx_n_s__suppress,&__pyx_n_s__nanstr,&__pyx_n_s__infstr,0}; PyObject* values[7] = {0,0,0,0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":11149 * * * def set_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, suppress=None, nanstr=None, infstr=None): # <<<<<<<<<<<<<< * """Set printing options. * */ values[0] = ((PyObject *)Py_None); values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); values[5] = ((PyObject *)Py_None); values[6] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__precision); if (value) { values[0] = value; kw_args--; } } case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__threshold); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__edgeitems); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__linewidth); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__suppress); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nanstr); if (value) { values[5] = value; kw_args--; } } case 6: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__infstr); if (value) { values[6] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_printoptions") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11149; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_precision = values[0]; __pyx_v_threshold = values[1]; __pyx_v_edgeitems = values[2]; __pyx_v_linewidth = values[3]; __pyx_v_suppress = values[4]; __pyx_v_nanstr = values[5]; __pyx_v_infstr = values[6]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("set_printoptions", 0, 0, 7, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11149; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.set_printoptions", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_448set_printoptions(__pyx_self, __pyx_v_precision, __pyx_v_threshold, __pyx_v_edgeitems, __pyx_v_linewidth, __pyx_v_suppress, __pyx_v_nanstr, __pyx_v_infstr); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_448set_printoptions(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_precision, CYTHON_UNUSED PyObject *__pyx_v_threshold, CYTHON_UNUSED PyObject *__pyx_v_edgeitems, CYTHON_UNUSED PyObject *__pyx_v_linewidth, CYTHON_UNUSED PyObject *__pyx_v_suppress, CYTHON_UNUSED PyObject *__pyx_v_nanstr, CYTHON_UNUSED PyObject *__pyx_v_infstr) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("set_printoptions", 0); /* "ga4py/gain/notimplemented.pyx":11211 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.set_printoptions", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_451set_string_function(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_450set_string_function[] = "Set a Python function to be used when pretty printing arrays.\n\n Parameters\n ----------\n f : function or None\n Function to be used to pretty print arrays. The function should expect\n a single array argument and return a string of the representation of\n the array. If None, the function is reset to the default NumPy function\n to print arrays.\n repr : bool, optional\n If True (default), the function for pretty printing (``__repr__``)\n is set, if False the function that returns the default string\n representation (``__str__``) is set.\n\n See Also\n --------\n set_printoptions, get_printoptions\n\n Examples\n --------\n >>> def pprint(arr):\n ... return 'HA! - What are you going to do now?'\n ...\n >>> np.set_string_function(pprint)\n >>> a = np.arange(10)\n >>> a\n HA! - What are you going to do now?\n >>> print a\n [0 1 2 3 4 5 6 7 8 9]\n\n We can reset the function to the default:\n\n >>> np.set_string_function(None)\n >>> a\n array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\n\n `repr` affects either pretty printing or normal string representation.\n Note that ``__repr__`` is still affected by setting ``__str__``\n because the width of each array element in the returned string becomes\n equal to the length of the result of ``__str__()``.\n\n >>> x = np.arange(4)\n >>> np.set_string_function(lambda x:'random', repr=False)\n >>> x.__str__()\n 'random'\n >>> x.__repr__()\n 'array([ 0, 1, 2, 3])'\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_451set_string_function = {__Pyx_NAMESTR("set_string_function"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_451set_string_function, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_450set_string_function)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_451set_string_function(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_f = 0; CYTHON_UNUSED PyObject *__pyx_v_repr = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_string_function (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__f,&__pyx_n_s__repr,0}; PyObject* values[2] = {0,0}; values[1] = __pyx_k_44; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__repr); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_string_function") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11214; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_f = values[0]; __pyx_v_repr = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("set_string_function", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11214; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.set_string_function", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_450set_string_function(__pyx_self, __pyx_v_f, __pyx_v_repr); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":11214 * * * def set_string_function(f, repr=True): # <<<<<<<<<<<<<< * """Set a Python function to be used when pretty printing arrays. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_450set_string_function(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_f, CYTHON_UNUSED PyObject *__pyx_v_repr) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("set_string_function", 0); /* "ga4py/gain/notimplemented.pyx":11264 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.set_string_function", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_453setbufsize(PyObject *__pyx_self, PyObject *__pyx_v_size); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_452setbufsize[] = "Set the size of the buffer used in ufuncs.\n\n Parameters\n ----------\n size : int\n Size of buffer.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_453setbufsize = {__Pyx_NAMESTR("setbufsize"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_453setbufsize, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_452setbufsize)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_453setbufsize(PyObject *__pyx_self, PyObject *__pyx_v_size) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("setbufsize (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_452setbufsize(__pyx_self, ((PyObject *)__pyx_v_size)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":11267 * * * def setbufsize(size): # <<<<<<<<<<<<<< * """Set the size of the buffer used in ufuncs. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_452setbufsize(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_size) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("setbufsize", 0); /* "ga4py/gain/notimplemented.pyx":11276 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.setbufsize", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_455setdiff1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_454setdiff1d[] = "Find the set difference of two arrays.\n\n Return the sorted, unique values in `ar1` that are not in `ar2`.\n\n Parameters\n ----------\n ar1 : array_like\n Input array.\n ar2 : array_like\n Input comparison array.\n assume_unique : bool\n If True, the input arrays are both assumed to be unique, which\n can speed up the calculation. Default is False.\n\n Returns\n -------\n difference : ndarray\n Sorted 1D array of values in `ar1` that are not in `ar2`.\n\n See Also\n --------\n numpy.lib.arraysetops : Module with a number of other functions for\n performing set operations on arrays.\n\n Examples\n --------\n >>> a = np.array([1, 2, 3, 2, 4, 1])\n >>> b = np.array([3, 4, 5, 6])\n >>> np.setdiff1d(a, b)\n array([1, 2])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_455setdiff1d = {__Pyx_NAMESTR("setdiff1d"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_455setdiff1d, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_454setdiff1d)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_455setdiff1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_ar1 = 0; CYTHON_UNUSED PyObject *__pyx_v_ar2 = 0; CYTHON_UNUSED PyObject *__pyx_v_assume_unique = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("setdiff1d (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__ar1,&__pyx_n_s__ar2,&__pyx_n_s__assume_unique,0}; PyObject* values[3] = {0,0,0}; values[2] = __pyx_k_45; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ar1)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ar2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("setdiff1d", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11279; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__assume_unique); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setdiff1d") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11279; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_ar1 = values[0]; __pyx_v_ar2 = values[1]; __pyx_v_assume_unique = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("setdiff1d", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11279; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.setdiff1d", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_454setdiff1d(__pyx_self, __pyx_v_ar1, __pyx_v_ar2, __pyx_v_assume_unique); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":11279 * * * def setdiff1d(ar1, ar2, assume_unique=False): # <<<<<<<<<<<<<< * """Find the set difference of two arrays. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_454setdiff1d(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ar1, CYTHON_UNUSED PyObject *__pyx_v_ar2, CYTHON_UNUSED PyObject *__pyx_v_assume_unique) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("setdiff1d", 0); /* "ga4py/gain/notimplemented.pyx":11312 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.setdiff1d", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_457seterr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_456seterr[] = "Set how floating-point errors are handled.\n\n Note that operations on integer scalar types (such as `int16`) are\n handled like floating point, and are affected by these settings.\n\n Parameters\n ----------\n all : {'ignore', 'warn', 'raise', 'call', 'print', 'log'}, optional\n Set treatment for all types of floating-point errors at once:\n\n - ignore: Take no action when the exception occurs.\n - warn: Print a `RuntimeWarning` (via the Python `warnings` module).\n - raise: Raise a `FloatingPointError`.\n - call: Call a function specified using the `seterrcall` function.\n - print: Print a warning directly to ``stdout``.\n - log: Record error in a Log object specified by `seterrcall`.\n\n The default is not to change the current behavior.\n divide : {'ignore', 'warn', 'raise', 'call', 'print', 'log'}, optional\n Treatment for division by zero.\n over : {'ignore', 'warn', 'raise', 'call', 'print', 'log'}, optional\n Treatment for floating-point overflow.\n under : {'ignore', 'warn', 'raise', 'call', 'print', 'log'}, optional\n Treatment for floating-point underflow.\n invalid : {'ignore', 'warn', 'raise', 'call', 'print', 'log'}, optional\n Treatment for invalid floating-point operation.\n\n Returns\n -------\n old_settings : dict\n Dictionary containing the old settings.\n\n See also\n --------\n seterrcall : Set a callback function for the 'call' mode.\n geterr, geterrcall\n\n Notes\n -----\n The floating-point exceptions are defined in the IEEE 754 standard [1]:\n\n - Division by zero: infinite result obtained from finite numbers.\n - Overflow: result too large to be expressed.\n - Underflow: result so close to zero that some precision\n was lost.\n - Invalid operation: result is not an expressible number, typically\n indicates that a NaN was produced.\n\n .. [1] http://en.wikipedia.org/wiki/""IEEE_754\n\n Examples\n --------\n >>> old_settings = np.seterr(all='ignore') #seterr to known value\n >>> np.seterr(over='raise')\n {'over': 'ignore', 'divide': 'ignore', 'invalid': 'ignore',\n 'under': 'ignore'}\n >>> np.seterr(all='ignore') # reset to default\n {'over': 'raise', 'divide': 'ignore', 'invalid': 'ignore', 'under': 'ignore'}\n\n >>> np.int16(32000) * np.int16(3)\n 30464\n >>> old_settings = np.seterr(all='warn', over='raise')\n >>> np.int16(32000) * np.int16(3)\n Traceback (most recent call last):\n File \"\", line 1, in \n FloatingPointError: overflow encountered in short_scalars\n\n >>> old_settings = np.seterr(all='print')\n >>> np.geterr()\n {'over': 'print', 'divide': 'print', 'invalid': 'print', 'under': 'print'}\n >>> np.int16(32000) * np.int16(3)\n Warning: overflow encountered in short_scalars\n 30464\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_457seterr = {__Pyx_NAMESTR("seterr"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_457seterr, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_456seterr)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_457seterr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_all = 0; CYTHON_UNUSED PyObject *__pyx_v_divide = 0; CYTHON_UNUSED PyObject *__pyx_v_over = 0; CYTHON_UNUSED PyObject *__pyx_v_under = 0; CYTHON_UNUSED PyObject *__pyx_v_invalid = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("seterr (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__all,&__pyx_n_s__divide,&__pyx_n_s__over,&__pyx_n_s__under,&__pyx_n_s__invalid,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":11315 * * * def seterr(all=None, divide=None, over=None, under=None, invalid=None): # <<<<<<<<<<<<<< * """Set how floating-point errors are handled. * */ values[0] = ((PyObject *)Py_None); values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__all); if (value) { values[0] = value; kw_args--; } } case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__divide); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__over); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__under); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__invalid); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "seterr") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11315; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_all = values[0]; __pyx_v_divide = values[1]; __pyx_v_over = values[2]; __pyx_v_under = values[3]; __pyx_v_invalid = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("seterr", 0, 0, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11315; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.seterr", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_456seterr(__pyx_self, __pyx_v_all, __pyx_v_divide, __pyx_v_over, __pyx_v_under, __pyx_v_invalid); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_456seterr(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_all, CYTHON_UNUSED PyObject *__pyx_v_divide, CYTHON_UNUSED PyObject *__pyx_v_over, CYTHON_UNUSED PyObject *__pyx_v_under, CYTHON_UNUSED PyObject *__pyx_v_invalid) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("seterr", 0); /* "ga4py/gain/notimplemented.pyx":11391 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11391; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.seterr", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_459seterrcall(PyObject *__pyx_self, PyObject *__pyx_v_func); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_458seterrcall[] = "Set the floating-point error callback function or log object.\n\n There are two ways to capture floating-point error messages. The first\n is to set the error-handler to 'call', using `seterr`. Then, set\n the function to call using this function.\n\n The second is to set the error-handler to 'log', using `seterr`.\n Floating-point errors then trigger a call to the 'write' method of\n the provided object.\n\n Parameters\n ----------\n func : callable f(err, flag) or object with write method\n Function to call upon floating-point errors ('call'-mode) or\n object whose 'write' method is used to log such message ('log'-mode).\n\n The call function takes two arguments. The first is the\n type of error (one of \"divide\", \"over\", \"under\", or \"invalid\"),\n and the second is the status flag. The flag is a byte, whose\n least-significant bits indicate the status::\n\n [0 0 0 0 invalid over under invalid]\n\n In other words, ``flags = divide + 2*over + 4*under + 8*invalid``.\n\n If an object is provided, its write method should take one argument,\n a string.\n\n Returns\n -------\n h : callable, log instance or None\n The old error handler.\n\n See Also\n --------\n seterr, geterr, geterrcall\n\n Examples\n --------\n Callback upon error:\n\n >>> def err_handler(type, flag):\n ... print \"Floating point error (%s), with flag %s\" % (type, flag)\n ...\n\n >>> saved_handler = np.seterrcall(err_handler)\n >>> save_err = np.seterr(all='call')\n\n >>> np.array([1, 2, 3]) / 0.0\n Floating point error (divide by zero), with flag 1\n array([ Inf, Inf, Inf])\n\n >>> np.seterrcall(saved_handler)\n \n >>> np.seterr(**save_err)\n {'over': 'call', 'divide': 'call', 'invalid': 'call', 'under': 'call'}\n\n Log error message:\n\n >>> class Log(object):\n ... def writ""e(self, msg):\n ... print \"LOG: %s\" % msg\n ...\n\n >>> log = Log()\n >>> saved_handler = np.seterrcall(log)\n >>> save_err = np.seterr(all='log')\n\n >>> np.array([1, 2, 3]) / 0.0\n LOG: Warning: divide by zero encountered in divide\n \n array([ Inf, Inf, Inf])\n\n >>> np.seterrcall(saved_handler)\n <__main__.Log object at 0x...>\n >>> np.seterr(**save_err)\n {'over': 'log', 'divide': 'log', 'invalid': 'log', 'under': 'log'}\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_459seterrcall = {__Pyx_NAMESTR("seterrcall"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_459seterrcall, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_458seterrcall)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_459seterrcall(PyObject *__pyx_self, PyObject *__pyx_v_func) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("seterrcall (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_458seterrcall(__pyx_self, ((PyObject *)__pyx_v_func)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":11394 * * * def seterrcall(func): # <<<<<<<<<<<<<< * """Set the floating-point error callback function or log object. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_458seterrcall(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_func) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("seterrcall", 0); /* "ga4py/gain/notimplemented.pyx":11474 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11474; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.seterrcall", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_461seterrobj(PyObject *__pyx_self, PyObject *__pyx_v_errobj); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_460seterrobj[] = "seterrobj(errobj)\n\n Set the object that defines floating-point error handling.\n\n The error object contains all information that defines the error handling\n behavior in Numpy. `seterrobj` is used internally by the other\n functions that set error handling behavior (`seterr`, `seterrcall`).\n\n Parameters\n ----------\n errobj : list\n The error object, a list containing three elements:\n [internal numpy buffer size, error mask, error callback function].\n\n The error mask is a single integer that holds the treatment information\n on all four floating point errors. The information for each error type\n is contained in three bits of the integer. If we print it in base 8, we\n can see what treatment is set for \"invalid\", \"under\", \"over\", and\n \"divide\" (in that order). The printed string can be interpreted with\n\n * 0 : 'ignore'\n * 1 : 'warn'\n * 2 : 'raise'\n * 3 : 'call'\n * 4 : 'print'\n * 5 : 'log'\n\n See Also\n --------\n geterrobj, seterr, geterr, seterrcall, geterrcall\n getbufsize, setbufsize\n\n Notes\n -----\n For complete documentation of the types of floating-point exceptions and\n treatment options, see `seterr`.\n\n Examples\n --------\n >>> old_errobj = np.geterrobj() # first get the defaults\n >>> old_errobj\n [10000, 0, None]\n\n >>> def err_handler(type, flag):\n ... print \"Floating point error (%s), with flag %s\" % (type, flag)\n ...\n >>> new_errobj = [20000, 12, err_handler]\n >>> np.seterrobj(new_errobj)\n >>> np.base_repr(12, 8) # int for divide=4 ('print') and over=1 ('warn')\n '14'\n >>> np.geterr()\n {'over': 'warn', 'divide': 'print', 'invalid': 'ignore', 'under': 'ignore'}\n >>> np.geterrcall() is err_handler\n True\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_461seterrobj = {__Pyx_NAMESTR("seterrobj"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_461seterrobj, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_460seterrobj)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_461seterrobj(PyObject *__pyx_self, PyObject *__pyx_v_errobj) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("seterrobj (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_460seterrobj(__pyx_self, ((PyObject *)__pyx_v_errobj)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":11477 * * * def seterrobj(errobj): # <<<<<<<<<<<<<< * """seterrobj(errobj) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_460seterrobj(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_errobj) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("seterrobj", 0); /* "ga4py/gain/notimplemented.pyx":11535 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.seterrobj", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_463setxor1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_462setxor1d[] = "Find the set exclusive-or of two arrays.\n\n Return the sorted, unique values that are in only one (not both) of the\n input arrays.\n\n Parameters\n ----------\n ar1, ar2 : array_like\n Input arrays.\n assume_unique : bool\n If True, the input arrays are both assumed to be unique, which\n can speed up the calculation. Default is False.\n\n Returns\n -------\n xor : ndarray\n Sorted 1D array of unique values that are in only one of the input\n arrays.\n\n Examples\n --------\n >>> a = np.array([1, 2, 3, 2, 4])\n >>> b = np.array([2, 3, 5, 7, 5])\n >>> np.setxor1d(a,b)\n array([1, 4, 5, 7])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_463setxor1d = {__Pyx_NAMESTR("setxor1d"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_463setxor1d, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_462setxor1d)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_463setxor1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_ar1 = 0; CYTHON_UNUSED PyObject *__pyx_v_ar2 = 0; CYTHON_UNUSED PyObject *__pyx_v_assume_unique = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("setxor1d (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__ar1,&__pyx_n_s__ar2,&__pyx_n_s__assume_unique,0}; PyObject* values[3] = {0,0,0}; values[2] = __pyx_k_46; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ar1)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ar2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("setxor1d", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11538; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__assume_unique); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setxor1d") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11538; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_ar1 = values[0]; __pyx_v_ar2 = values[1]; __pyx_v_assume_unique = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("setxor1d", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11538; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.setxor1d", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_462setxor1d(__pyx_self, __pyx_v_ar1, __pyx_v_ar2, __pyx_v_assume_unique); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":11538 * * * def setxor1d(ar1, ar2, assume_unique=False): # <<<<<<<<<<<<<< * """Find the set exclusive-or of two arrays. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_462setxor1d(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ar1, CYTHON_UNUSED PyObject *__pyx_v_ar2, CYTHON_UNUSED PyObject *__pyx_v_assume_unique) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("setxor1d", 0); /* "ga4py/gain/notimplemented.pyx":11566 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11566; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.setxor1d", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_465show_config(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_464show_config[] = "\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_465show_config = {__Pyx_NAMESTR("show_config"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_465show_config, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_464show_config)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_465show_config(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("show_config (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_464show_config(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":11569 * * * def show_config(): # <<<<<<<<<<<<<< * """ * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_464show_config(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("show_config", 0); /* "ga4py/gain/notimplemented.pyx":11573 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11573; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.show_config", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_467sinc(PyObject *__pyx_self, PyObject *__pyx_v_x); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_466sinc[] = "Return the sinc function.\n\n The sinc function is :math:`\\sin(\\pi x)/(\\pi x)`.\n\n Parameters\n ----------\n x : ndarray\n Array (possibly multi-dimensional) of values for which to to\n calculate ``sinc(x)``.\n\n Returns\n -------\n out : ndarray\n ``sinc(x)``, which has the same shape as the input.\n\n Notes\n -----\n ``sinc(0)`` is the limit value 1.\n\n The name sinc is short for \"sine cardinal\" or \"sinus cardinalis\".\n\n The sinc function is used in various signal processing applications,\n including in anti-aliasing, in the construction of a\n Lanczos resampling filter, and in interpolation.\n\n For bandlimited interpolation of discrete-time signals, the ideal\n interpolation kernel is proportional to the sinc function.\n\n References\n ----------\n .. [1] Weisstein, Eric W. \"Sinc Function.\" From MathWorld--A Wolfram Web\n Resource. http://mathworld.wolfram.com/SincFunction.html\n .. [2] Wikipedia, \"Sinc function\",\n http://en.wikipedia.org/wiki/Sinc_function\n\n Examples\n --------\n >>> x = np.arange(-20., 21.)/5.\n >>> np.sinc(x)\n array([ -3.89804309e-17, -4.92362781e-02, -8.40918587e-02,\n -8.90384387e-02, -5.84680802e-02, 3.89804309e-17,\n 6.68206631e-02, 1.16434881e-01, 1.26137788e-01,\n 8.50444803e-02, -3.89804309e-17, -1.03943254e-01,\n -1.89206682e-01, -2.16236208e-01, -1.55914881e-01,\n 3.89804309e-17, 2.33872321e-01, 5.04551152e-01,\n 7.56826729e-01, 9.35489284e-01, 1.00000000e+00,\n 9.35489284e-01, 7.56826729e-01, 5.04551152e-01,\n 2.33872321e-01, 3.89804309e-17, -1.55914881e-01,\n -2.16236208e-01, -1.89206682e-01, -1.03943254e-01,\n -3.89804309e-17, 8.50444803e-02, 1.26137788e-01,\n 1.16434881e-01, 6.68206631e-02, 3.89804309e-17,\n -5.84680802e-02,"" -8.90384387e-02, -8.40918587e-02,\n -4.92362781e-02, -3.89804309e-17])\n\n >>> import matplotlib.pyplot as plt\n >>> plt.plot(x, np.sinc(x))\n []\n >>> plt.title(\"Sinc Function\")\n \n >>> plt.ylabel(\"Amplitude\")\n \n >>> plt.xlabel(\"X\")\n \n >>> plt.show()\n\n It works in 2-D as well:\n\n >>> x = np.arange(-200., 201.)/50.\n >>> xx = np.outer(x, x)\n >>> plt.imshow(np.sinc(xx))\n \n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_467sinc = {__Pyx_NAMESTR("sinc"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_467sinc, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_466sinc)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_467sinc(PyObject *__pyx_self, PyObject *__pyx_v_x) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("sinc (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_466sinc(__pyx_self, ((PyObject *)__pyx_v_x)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":11576 * * * def sinc(x): # <<<<<<<<<<<<<< * """Return the sinc function. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_466sinc(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("sinc", 0); /* "ga4py/gain/notimplemented.pyx":11650 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11650; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.sinc", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_469size(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_468size[] = "Return the number of elements along a given axis.\n\n Parameters\n ----------\n a : array_like\n Input data.\n axis : int, optional\n Axis along which the elements are counted. By default, give\n the total number of elements.\n\n Returns\n -------\n element_count : int\n Number of elements along the specified axis.\n\n See Also\n --------\n shape : dimensions of array\n ndarray.shape : dimensions of array\n ndarray.size : number of elements in array\n\n Examples\n --------\n >>> a = np.array([[1,2,3],[4,5,6]])\n >>> np.size(a)\n 6\n >>> np.size(a,1)\n 3\n >>> np.size(a,0)\n 2\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_469size = {__Pyx_NAMESTR("size"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_469size, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_468size)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_469size(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("size (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":11653 * * * def size(a, axis=None): # <<<<<<<<<<<<<< * """Return the number of elements along a given axis. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "size") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11653; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("size", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11653; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.size", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_468size(__pyx_self, __pyx_v_a, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_468size(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("size", 0); /* "ga4py/gain/notimplemented.pyx":11686 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11686; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.size", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_471sometrue(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_470sometrue[] = "Check whether some values are true.\n\n Refer to `any` for full documentation.\n\n See Also\n --------\n any : equivalent function\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_471sometrue = {__Pyx_NAMESTR("sometrue"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_471sometrue, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_470sometrue)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_471sometrue(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("sometrue (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/notimplemented.pyx":11689 * * * def sometrue(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Check whether some values are true. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sometrue") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11689; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("sometrue", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11689; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.sometrue", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_470sometrue(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_470sometrue(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("sometrue", 0); /* "ga4py/gain/notimplemented.pyx":11699 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11699; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.sometrue", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_473sort(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_472sort[] = "Return a sorted copy of an array.\n\n Parameters\n ----------\n a : array_like\n Array to be sorted.\n axis : int or None, optional\n Axis along which to sort. If None, the array is flattened before\n sorting. The default is -1, which sorts along the last axis.\n kind : {'quicksort', 'mergesort', 'heapsort'}, optional\n Sorting algorithm. Default is 'quicksort'.\n order : list, optional\n When `a` is a structured array, this argument specifies which fields\n to compare first, second, and so on. This list does not need to\n include all of the fields.\n\n Returns\n -------\n sorted_array : ndarray\n Array of the same type and shape as `a`.\n\n See Also\n --------\n ndarray.sort : Method to sort an array in-place.\n argsort : Indirect sort.\n lexsort : Indirect stable sort on multiple keys.\n searchsorted : Find elements in a sorted array.\n\n Notes\n -----\n The various sorting algorithms are characterized by their average speed,\n worst case performance, work space size, and whether they are stable. A\n stable sort keeps items with the same key in the same relative\n order. The three available algorithms have the following\n properties:\n\n =========== ======= ============= ============ =======\n kind speed worst case work space stable\n =========== ======= ============= ============ =======\n 'quicksort' 1 O(n^2) 0 no\n 'mergesort' 2 O(n*log(n)) ~n/2 yes\n 'heapsort' 3 O(n*log(n)) 0 no\n =========== ======= ============= ============ =======\n\n All the sort algorithms make temporary copies of the data when\n sorting along any but the last axis. Consequently, sorting along\n the last axis is faster and uses less space than sorting along\n any other axis.\n\n The sort order for complex numbers is lexicographic. If both the real""\n and imaginary parts are non-nan then the order is determined by the\n real parts except when they are equal, in which case the order is\n determined by the imaginary parts.\n\n Previous to numpy 1.4.0 sorting real and complex arrays containing nan\n values led to undefined behaviour. In numpy versions >= 1.4.0 nan\n values are sorted to the end. The extended sort order is:\n\n * Real: [R, nan]\n * Complex: [R + Rj, R + nanj, nan + Rj, nan + nanj]\n\n where R is a non-nan real value. Complex values with the same nan\n placements are sorted according to the non-nan part if it exists.\n Non-nan values are sorted as before.\n\n Examples\n --------\n >>> a = np.array([[1,4],[3,1]])\n >>> np.sort(a) # sort along the last axis\n array([[1, 4],\n [1, 3]])\n >>> np.sort(a, axis=None) # sort the flattened array\n array([1, 1, 3, 4])\n >>> np.sort(a, axis=0) # sort along the first axis\n array([[1, 1],\n [3, 4]])\n\n Use the `order` keyword to specify a field to use when sorting a\n structured array:\n\n >>> dtype = [('name', 'S10'), ('height', float), ('age', int)]\n >>> values = [('Arthur', 1.8, 41), ('Lancelot', 1.9, 38),\n ... ('Galahad', 1.7, 38)]\n >>> a = np.array(values, dtype=dtype) # create a structured array\n >>> np.sort(a, order='height') # doctest: +SKIP\n array([('Galahad', 1.7, 38), ('Arthur', 1.8, 41),\n ('Lancelot', 1.8999999999999999, 38)],\n dtype=[('name', '|S10'), ('height', '>> np.sort(a, order=['age', 'height']) # doctest: +SKIP\n array([('Galahad', 1.7, 38), ('Lancelot', 1.8999999999999999, 38),\n ('Arthur', 1.8, 41)],\n dtype=[('name', '|S10'), ('height', ' 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__kind); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sort") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11702; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_kind = values[2]; __pyx_v_order = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("sort", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11702; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.sort", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_472sort(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_kind, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_472sort(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_kind, CYTHON_UNUSED PyObject *__pyx_v_order) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("sort", 0); /* "ga4py/gain/notimplemented.pyx":11800 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.sort", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_475sort_complex(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_474sort_complex[] = "Sort a complex array using the real part first, then the imaginary part.\n\n Parameters\n ----------\n a : array_like\n Input array\n\n Returns\n -------\n out : complex ndarray\n Always returns a sorted complex array.\n\n Examples\n --------\n >>> np.sort_complex([5, 3, 6, 2, 1])\n array([ 1.+0.j, 2.+0.j, 3.+0.j, 5.+0.j, 6.+0.j])\n\n >>> np.sort_complex([1 + 2j, 2 - 1j, 3 - 2j, 3 - 3j, 3 + 5j])\n array([ 1.+2.j, 2.-1.j, 3.-3.j, 3.-2.j, 3.+5.j])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_475sort_complex = {__Pyx_NAMESTR("sort_complex"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_475sort_complex, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_474sort_complex)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_475sort_complex(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("sort_complex (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_474sort_complex(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":11803 * * * def sort_complex(a): # <<<<<<<<<<<<<< * """Sort a complex array using the real part first, then the imaginary part. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_474sort_complex(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("sort_complex", 0); /* "ga4py/gain/notimplemented.pyx":11825 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.sort_complex", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_477source(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_476source[] = "Print or write to a file the source code for a Numpy object.\n\n The source code is only returned for objects written in Python. Many\n functions and classes are defined in C and will therefore not return\n useful information.\n\n Parameters\n ----------\n object : numpy object\n Input object. This can be any object (function, class, module, ...).\n output : file object, optional\n If `output` not supplied then source code is printed to screen\n (sys.stdout). File object must be created with either write 'w' or\n append 'a' modes.\n\n See Also\n --------\n lookfor, info\n\n Examples\n --------\n >>> np.source(np.interp) #doctest: +SKIP\n In file: /usr/lib/python2.6/dist-packages/numpy/lib/function_base.py\n def interp(x, xp, fp, left=None, right=None):\n '''.... (full docstring printed)'''\n if isinstance(x, (float, int, number)):\n return compiled_interp([x], xp, fp, left, right).item()\n else:\n return compiled_interp(x, xp, fp, left, right)\n\n The source code is only returned for objects written in Python.\n\n >>> np.source(np.array) #doctest: +SKIP\n Not available for this object.\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_477source = {__Pyx_NAMESTR("source"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_477source, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_476source)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_477source(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_object = 0; CYTHON_UNUSED PyObject *__pyx_v_output = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("source (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__object,&__pyx_n_s__output,0}; PyObject* values[2] = {0,0}; values[1] = __pyx_k_47; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__object)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__output); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "source") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11828; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_object = values[0]; __pyx_v_output = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("source", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11828; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.source", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_476source(__pyx_self, __pyx_v_object, __pyx_v_output); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":11828 * * * def source(object, output=sys.stdout): # <<<<<<<<<<<<<< * """Print or write to a file the source code for a Numpy object. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_476source(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_object, CYTHON_UNUSED PyObject *__pyx_v_output) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("source", 0); /* "ga4py/gain/notimplemented.pyx":11865 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11865; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.source", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_479split(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_478split[] = "Split an array into multiple sub-arrays of equal size.\n\n Parameters\n ----------\n ary : ndarray\n Array to be divided into sub-arrays.\n indices_or_sections : int or 1-D array\n If `indices_or_sections` is an integer, N, the array will be divided\n into N equal arrays along `axis`. If such a split is not possible,\n an error is raised.\n\n If `indices_or_sections` is a 1-D array of sorted integers, the entries\n indicate where along `axis` the array is split. For example,\n ``[2, 3]`` would, for ``axis=0``, result in\n\n - ary[:2]\n - ary[2:3]\n - ary[3:]\n\n If an index exceeds the dimension of the array along `axis`,\n an empty sub-array is returned correspondingly.\n axis : int, optional\n The axis along which to split, default is 0.\n\n Returns\n -------\n sub-arrays : list of ndarrays\n A list of sub-arrays.\n\n Raises\n ------\n ValueError\n If `indices_or_sections` is given as an integer, but\n a split does not result in equal division.\n\n See Also\n --------\n array_split : Split an array into multiple sub-arrays of equal or\n near-equal size. Does not raise an exception if\n an equal division cannot be made.\n hsplit : Split array into multiple sub-arrays horizontally (column-wise).\n vsplit : Split array into multiple sub-arrays vertically (row wise).\n dsplit : Split array into multiple sub-arrays along the 3rd axis (depth).\n concatenate : Join arrays together.\n hstack : Stack arrays in sequence horizontally (column wise).\n vstack : Stack arrays in sequence vertically (row wise).\n dstack : Stack arrays in sequence depth wise (along third dimension).\n\n Examples\n --------\n >>> x = np.arange(9.0)\n >>> np.split(x, 3)\n [array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7., 8.])]\n\n >>> x = np.arange(8.""0)\n >>> np.split(x, [3, 5, 6, 10])\n [array([ 0., 1., 2.]),\n array([ 3., 4.]),\n array([ 5.]),\n array([ 6., 7.]),\n array([], dtype=float64)]\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_479split = {__Pyx_NAMESTR("split"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_479split, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_478split)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_479split(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_ary = 0; CYTHON_UNUSED PyObject *__pyx_v_indices_or_sections = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("split (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__ary,&__pyx_n_s__indices_or_sections,&__pyx_n_s__axis,0}; PyObject* values[3] = {0,0,0}; values[2] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ary)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__indices_or_sections)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("split", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11868; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "split") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11868; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_ary = values[0]; __pyx_v_indices_or_sections = values[1]; __pyx_v_axis = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("split", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11868; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.split", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_478split(__pyx_self, __pyx_v_ary, __pyx_v_indices_or_sections, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":11868 * * * def split(ary, indices_or_sections, axis=0): # <<<<<<<<<<<<<< * """Split an array into multiple sub-arrays of equal size. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_478split(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ary, CYTHON_UNUSED PyObject *__pyx_v_indices_or_sections, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("split", 0); /* "ga4py/gain/notimplemented.pyx":11932 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11932; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.split", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_481squeeze(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_480squeeze[] = "Remove single-dimensional entries from the shape of an array.\n\n Parameters\n ----------\n a : array_like\n Input data.\n\n Returns\n -------\n squeezed : ndarray\n The input array, but with with all dimensions of length 1\n removed. Whenever possible, a view on `a` is returned.\n\n Examples\n --------\n >>> x = np.array([[[0], [1], [2]]])\n >>> x.shape\n (1, 3, 1)\n >>> np.squeeze(x).shape\n (3,)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_481squeeze = {__Pyx_NAMESTR("squeeze"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_481squeeze, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_480squeeze)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_481squeeze(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("squeeze (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_480squeeze(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":11935 * * * def squeeze(a): # <<<<<<<<<<<<<< * """Remove single-dimensional entries from the shape of an array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_480squeeze(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("squeeze", 0); /* "ga4py/gain/notimplemented.pyx":11958 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.squeeze", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_483std(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_482std[] = "Compute the standard deviation along the specified axis.\n\n Returns the standard deviation, a measure of the spread of a distribution,\n of the array elements. The standard deviation is computed for the\n flattened array by default, otherwise over the specified axis.\n\n Parameters\n ----------\n a : array_like\n Calculate the standard deviation of these values.\n axis : int, optional\n Axis along which the standard deviation is computed. The default is\n to compute the standard deviation of the flattened array.\n dtype : dtype, optional\n Type to use in computing the standard deviation. For arrays of\n integer type the default is float64, for arrays of float types it is\n the same as the array type.\n out : ndarray, optional\n Alternative output array in which to place the result. It must have\n the same shape as the expected output but the type (of the calculated\n values) will be cast if necessary.\n ddof : int, optional\n Means Delta Degrees of Freedom. The divisor used in calculations\n is ``N - ddof``, where ``N`` represents the number of elements.\n By default `ddof` is zero.\n\n Returns\n -------\n standard_deviation : ndarray, see dtype parameter above.\n If `out` is None, return a new array containing the standard deviation,\n otherwise return a reference to the output array.\n\n See Also\n --------\n var, mean\n numpy.doc.ufuncs : Section \"Output arguments\"\n\n Notes\n -----\n The standard deviation is the square root of the average of the squared\n deviations from the mean, i.e., ``std = sqrt(mean(abs(x - x.mean())**2))``.\n\n The average squared deviation is normally calculated as ``x.sum() / N``, where\n ``N = len(x)``. If, however, `ddof` is specified, the divisor ``N - ddof``\n is used instead. In standard statistical practice, ``ddof=1`` provides an\n unbiased estimator of t""he variance of the infinite population. ``ddof=0``\n provides a maximum likelihood estimate of the variance for normally\n distributed variables. The standard deviation computed in this function\n is the square root of the estimated variance, so even with ``ddof=1``, it\n will not be an unbiased estimate of the standard deviation per se.\n\n Note that, for complex numbers, `std` takes the absolute\n value before squaring, so that the result is always real and nonnegative.\n\n For floating-point input, the *std* is computed using the same\n precision the input has. Depending on the input data, this can cause\n the results to be inaccurate, especially for float32 (see example below).\n Specifying a higher-accuracy accumulator using the `dtype` keyword can\n alleviate this issue.\n\n Examples\n --------\n >>> a = np.array([[1, 2], [3, 4]])\n >>> np.std(a)\n 1.1180339887498949\n >>> np.std(a, axis=0)\n array([ 1., 1.])\n >>> np.std(a, axis=1)\n array([ 0.5, 0.5])\n\n In single precision, std() can be inaccurate:\n\n >>> a = np.zeros((2,512*512), dtype=np.float32)\n >>> a[0,:] = 1.0\n >>> a[1,:] = 0.1\n >>> np.std(a)\n 0.45172946707416706\n\n Computing the standard deviation in float64 is more accurate:\n\n >>> np.std(a, dtype=np.float64)\n 0.44999999925552653\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_483std = {__Pyx_NAMESTR("std"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_483std, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_482std)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_483std(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; CYTHON_UNUSED PyObject *__pyx_v_ddof = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("std (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,&__pyx_n_s__ddof,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":11961 * * * def std(a, axis=None, dtype=None, out=None, ddof=0): # <<<<<<<<<<<<<< * """Compute the standard deviation along the specified axis. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ddof); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "std") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11961; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_dtype = values[2]; __pyx_v_out = values[3]; __pyx_v_ddof = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("std", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11961; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.std", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_482std(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out, __pyx_v_ddof); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_482std(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_ddof) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("std", 0); /* "ga4py/gain/notimplemented.pyx":12046 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12046; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.std", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_485sum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_484sum[] = "Sum of array elements over a given axis.\n\n Parameters\n ----------\n a : array_like\n Elements to sum.\n axis : integer, optional\n Axis over which the sum is taken. By default `axis` is None,\n and all elements are summed.\n dtype : dtype, optional\n The type of the returned array and of the accumulator in which\n the elements are summed. By default, the dtype of `a` is used.\n An exception is when `a` has an integer type with less precision\n than the default platform integer. In that case, the default\n platform integer is used instead.\n out : ndarray, optional\n Array into which the output is placed. By default, a new array is\n created. If `out` is given, it must be of the appropriate shape\n (the shape of `a` with `axis` removed, i.e.,\n ``numpy.delete(a.shape, axis)``). Its type is preserved. See\n `doc.ufuncs` (Section \"Output arguments\") for more details.\n\n Returns\n -------\n sum_along_axis : ndarray\n An array with the same shape as `a`, with the specified\n axis removed. If `a` is a 0-d array, or if `axis` is None, a scalar\n is returned. If an output array is specified, a reference to\n `out` is returned.\n\n See Also\n --------\n ndarray.sum : Equivalent method.\n\n cumsum : Cumulative sum of array elements.\n\n trapz : Integration of array values using the composite trapezoidal rule.\n\n mean, average\n\n Notes\n -----\n Arithmetic is modular when using integer types, and no error is\n raised on overflow.\n\n Examples\n --------\n >>> np.sum([0.5, 1.5])\n 2.0\n >>> np.sum([0.5, 0.7, 0.2, 1.5], dtype=np.int32)\n 1\n >>> np.sum([[0, 1], [0, 5]])\n 6\n >>> np.sum([[0, 1], [0, 5]], axis=0)\n array([0, 6])\n >>> np.sum([[0, 1], [0, 5]], axis=1)\n array([1, 5])\n\n If the accumulator is too small, overflow occurs:\n\n >>> np.one""s(128, dtype=np.int8).sum(dtype=np.int8)\n -128\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_485sum = {__Pyx_NAMESTR("sum"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_485sum, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_484sum)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_485sum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("sum (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":12049 * * * def sum(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Sum of array elements over a given axis. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sum") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12049; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_dtype = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("sum", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12049; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.sum", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_484sum(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_484sum(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("sum", 0); /* "ga4py/gain/notimplemented.pyx":12114 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.sum", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_487swapaxes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_486swapaxes[] = "Interchange two axes of an array.\n\n Parameters\n ----------\n a : array_like\n Input array.\n axis1 : int\n First axis.\n axis2 : int\n Second axis.\n\n Returns\n -------\n a_swapped : ndarray\n If `a` is an ndarray, then a view of `a` is returned; otherwise\n a new array is created.\n\n Examples\n --------\n >>> x = np.array([[1,2,3]])\n >>> np.swapaxes(x,0,1)\n array([[1],\n [2],\n [3]])\n\n >>> x = np.array([[[0,1],[2,3]],[[4,5],[6,7]]])\n >>> x\n array([[[0, 1],\n [2, 3]],\n [[4, 5],\n [6, 7]]])\n\n >>> np.swapaxes(x,0,2)\n array([[[0, 4],\n [2, 6]],\n [[1, 5],\n [3, 7]]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_487swapaxes = {__Pyx_NAMESTR("swapaxes"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_487swapaxes, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_486swapaxes)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_487swapaxes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis1 = 0; CYTHON_UNUSED PyObject *__pyx_v_axis2 = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("swapaxes (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis1,&__pyx_n_s__axis2,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis1)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("swapaxes", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("swapaxes", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "swapaxes") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_a = values[0]; __pyx_v_axis1 = values[1]; __pyx_v_axis2 = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("swapaxes", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.swapaxes", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_486swapaxes(__pyx_self, __pyx_v_a, __pyx_v_axis1, __pyx_v_axis2); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":12117 * * * def swapaxes(a, axis1, axis2): # <<<<<<<<<<<<<< * """Interchange two axes of an array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_486swapaxes(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis1, CYTHON_UNUSED PyObject *__pyx_v_axis2) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("swapaxes", 0); /* "ga4py/gain/notimplemented.pyx":12157 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.swapaxes", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_489take(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_488take[] = "Take elements from an array along an axis.\n\n This function does the same thing as \"fancy\" indexing (indexing arrays\n using arrays); however, it can be easier to use if you need elements\n along a given axis.\n\n Parameters\n ----------\n a : array_like\n The source array.\n indices : array_like\n The indices of the values to extract.\n axis : int, optional\n The axis over which to select values. By default, the flattened\n input array is used.\n out : ndarray, optional\n If provided, the result will be placed in this array. It should\n be of the appropriate shape and dtype.\n mode : {'raise', 'wrap', 'clip'}, optional\n Specifies how out-of-bounds indices will behave.\n\n * 'raise' -- raise an error (default)\n * 'wrap' -- wrap around\n * 'clip' -- clip to the range\n\n 'clip' mode means that all indices that are too large are replaced\n by the index that addresses the last element along that axis. Note\n that this disables indexing with negative numbers.\n\n Returns\n -------\n subarray : ndarray\n The returned array has the same type as `a`.\n\n See Also\n --------\n ndarray.take : equivalent method\n\n Examples\n --------\n >>> a = [4, 3, 5, 7, 6, 8]\n >>> indices = [0, 1, 4]\n >>> np.take(a, indices)\n array([4, 3, 6])\n\n In this example if `a` is an ndarray, \"fancy\" indexing can be used.\n\n >>> a = np.array(a)\n >>> a[indices]\n array([4, 3, 6])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_489take = {__Pyx_NAMESTR("take"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_489take, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_488take)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_489take(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_indices = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; CYTHON_UNUSED PyObject *__pyx_v_mode = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("take (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__indices,&__pyx_n_s__axis,&__pyx_n_s__out,&__pyx_n_s__mode,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":12160 * * * def take(a, indices, axis=None, out=None, mode='raise'): # <<<<<<<<<<<<<< * """Take elements from an array along an axis. * */ values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)__pyx_n_s__raise); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__indices)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("take", 0, 2, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12160; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "take") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12160; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_indices = values[1]; __pyx_v_axis = values[2]; __pyx_v_out = values[3]; __pyx_v_mode = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("take", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12160; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.take", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_488take(__pyx_self, __pyx_v_a, __pyx_v_indices, __pyx_v_axis, __pyx_v_out, __pyx_v_mode); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_488take(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_indices, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_mode) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("take", 0); /* "ga4py/gain/notimplemented.pyx":12213 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.take", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_491tensordot(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_490tensordot[] = "Compute tensor dot product along specified axes for arrays >= 1-D.\n\n Given two tensors (arrays of dimension greater than or equal to one),\n ``a`` and ``b``, and an array_like object containing two array_like\n objects, ``(a_axes, b_axes)``, sum the products of ``a``'s and ``b``'s\n elements (components) over the axes specified by ``a_axes`` and\n ``b_axes``. The third argument can be a single non-negative\n integer_like scalar, ``N``; if it is such, then the last ``N``\n dimensions of ``a`` and the first ``N`` dimensions of ``b`` are summed\n over.\n\n Parameters\n ----------\n a, b : array_like, len(shape) >= 1\n Tensors to \"dot\".\n\n axes : variable type\n\n * integer_like scalar\n Number of axes to sum over (applies to both arrays); or\n\n * array_like, shape = (2,), both elements array_like\n Axes to be summed over, first sequence applying to ``a``, second\n to ``b``.\n\n See Also\n --------\n dot, einsum\n\n Notes\n -----\n When there is more than one axis to sum over - and they are not the last\n (first) axes of ``a`` (``b``) - the argument ``axes`` should consist of\n two sequences of the same length, with the first axis to sum over given\n first in both sequences, the second axis second, and so forth.\n\n Examples\n --------\n A \"traditional\" example:\n\n >>> a = np.arange(60.).reshape(3,4,5)\n >>> b = np.arange(24.).reshape(4,3,2)\n >>> c = np.tensordot(a,b, axes=([1,0],[0,1]))\n >>> c.shape\n (5, 2)\n >>> c\n array([[ 4400., 4730.],\n [ 4532., 4874.],\n [ 4664., 5018.],\n [ 4796., 5162.],\n [ 4928., 5306.]])\n >>> # A slower but equivalent way of computing the same...\n >>> d = np.zeros((5,2))\n >>> for i in range(5):\n ... for j in range(2):\n ... for k in range(3):\n ... for n in range(4):\n ... d[i,j] += a[k,n,i] * b[n,k,j]\n >>> c == d""\n array([[ True, True],\n [ True, True],\n [ True, True],\n [ True, True],\n [ True, True]], dtype=bool)\n\n An extended example taking advantage of the overloading of + and \\*:\n\n >>> a = np.array(range(1, 9))\n >>> a.shape = (2, 2, 2)\n >>> A = np.array(('a', 'b', 'c', 'd'), dtype=object)\n >>> A.shape = (2, 2)\n >>> a; A\n array([[[1, 2],\n [3, 4]],\n [[5, 6],\n [7, 8]]])\n array([[a, b],\n [c, d]], dtype=object)\n\n >>> np.tensordot(a, A) # third argument default is 2\n array([abbcccdddd, aaaaabbbbbbcccccccdddddddd], dtype=object)\n\n >>> np.tensordot(a, A, 1)\n array([[[acc, bdd],\n [aaacccc, bbbdddd]],\n [[aaaaacccccc, bbbbbdddddd],\n [aaaaaaacccccccc, bbbbbbbdddddddd]]], dtype=object)\n\n >>> np.tensordot(a, A, 0) # \"Left for reader\" (result too long to incl.)\n array([[[[[a, b],\n [c, d]],\n ...\n\n >>> np.tensordot(a, A, (0, 1))\n array([[[abbbbb, cddddd],\n [aabbbbbb, ccdddddd]],\n [[aaabbbbbbb, cccddddddd],\n [aaaabbbbbbbb, ccccdddddddd]]], dtype=object)\n\n >>> np.tensordot(a, A, (2, 1))\n array([[[abb, cdd],\n [aaabbbb, cccdddd]],\n [[aaaaabbbbbb, cccccdddddd],\n [aaaaaaabbbbbbbb, cccccccdddddddd]]], dtype=object)\n\n >>> np.tensordot(a, A, ((0, 1), (0, 1)))\n array([abbbcccccddddddd, aabbbbccccccdddddddd], dtype=object)\n\n >>> np.tensordot(a, A, ((2, 1), (1, 0)))\n array([acccbbdddd, aaaaacccccccbbbbbbdddddddd], dtype=object)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_491tensordot = {__Pyx_NAMESTR("tensordot"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_491tensordot, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_490tensordot)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_491tensordot(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_b = 0; CYTHON_UNUSED PyObject *__pyx_v_axes = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("tensordot (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__b,&__pyx_n_s__axes,0}; PyObject* values[3] = {0,0,0}; values[2] = ((PyObject *)__pyx_int_2); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("tensordot", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12216; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axes); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tensordot") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12216; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_b = values[1]; __pyx_v_axes = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("tensordot", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12216; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.tensordot", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_490tensordot(__pyx_self, __pyx_v_a, __pyx_v_b, __pyx_v_axes); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":12216 * * * def tensordot(a, b, axes=2): # <<<<<<<<<<<<<< * """Compute tensor dot product along specified axes for arrays >= 1-D. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_490tensordot(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_b, CYTHON_UNUSED PyObject *__pyx_v_axes) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("tensordot", 0); /* "ga4py/gain/notimplemented.pyx":12329 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.tensordot", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_493tile(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_492tile[] = "Construct an array by repeating A the number of times given by reps.\n\n If `reps` has length ``d``, the result will have dimension of\n ``max(d, A.ndim)``.\n\n If ``A.ndim < d``, `A` is promoted to be d-dimensional by prepending new\n axes. So a shape (3,) array is promoted to (1, 3) for 2-D replication,\n or shape (1, 1, 3) for 3-D replication. If this is not the desired\n behavior, promote `A` to d-dimensions manually before calling this\n function.\n\n If ``A.ndim > d``, `reps` is promoted to `A`.ndim by pre-pending 1's to it.\n Thus for an `A` of shape (2, 3, 4, 5), a `reps` of (2, 2) is treated as\n (1, 1, 2, 2).\n\n Parameters\n ----------\n A : array_like\n The input array.\n reps : array_like\n The number of repetitions of `A` along each axis.\n\n Returns\n -------\n c : ndarray\n The tiled output array.\n\n See Also\n --------\n repeat : Repeat elements of an array.\n\n Examples\n --------\n >>> a = np.array([0, 1, 2])\n >>> np.tile(a, 2)\n array([0, 1, 2, 0, 1, 2])\n >>> np.tile(a, (2, 2))\n array([[0, 1, 2, 0, 1, 2],\n [0, 1, 2, 0, 1, 2]])\n >>> np.tile(a, (2, 1, 2))\n array([[[0, 1, 2, 0, 1, 2]],\n [[0, 1, 2, 0, 1, 2]]])\n\n >>> b = np.array([[1, 2], [3, 4]])\n >>> np.tile(b, 2)\n array([[1, 2, 1, 2],\n [3, 4, 3, 4]])\n >>> np.tile(b, (2, 1))\n array([[1, 2],\n [3, 4],\n [1, 2],\n [3, 4]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_493tile = {__Pyx_NAMESTR("tile"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_493tile, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_492tile)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_493tile(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_A = 0; CYTHON_UNUSED PyObject *__pyx_v_reps = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("tile (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__A,&__pyx_n_s__reps,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__A)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__reps)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("tile", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12332; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tile") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12332; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_A = values[0]; __pyx_v_reps = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("tile", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12332; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.tile", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_492tile(__pyx_self, __pyx_v_A, __pyx_v_reps); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":12332 * * * def tile(A, reps): # <<<<<<<<<<<<<< * """Construct an array by repeating A the number of times given by reps. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_492tile(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_A, CYTHON_UNUSED PyObject *__pyx_v_reps) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("tile", 0); /* "ga4py/gain/notimplemented.pyx":12387 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.tile", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_495trace(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_494trace[] = "Return the sum along diagonals of the array.\n\n If `a` is 2-D, the sum along its diagonal with the given offset\n is returned, i.e., the sum of elements ``a[i,i+offset]`` for all i.\n\n If `a` has more than two dimensions, then the axes specified by axis1 and\n axis2 are used to determine the 2-D sub-arrays whose traces are returned.\n The shape of the resulting array is the same as that of `a` with `axis1`\n and `axis2` removed.\n\n Parameters\n ----------\n a : array_like\n Input array, from which the diagonals are taken.\n offset : int, optional\n Offset of the diagonal from the main diagonal. Can be both positive\n and negative. Defaults to 0.\n axis1, axis2 : int, optional\n Axes to be used as the first and second axis of the 2-D sub-arrays\n from which the diagonals should be taken. Defaults are the first two\n axes of `a`.\n dtype : dtype, optional\n Determines the data-type of the returned array and of the accumulator\n where the elements are summed. If dtype has the value None and `a` is\n of integer type of precision less than the default integer\n precision, then the default integer precision is used. Otherwise,\n the precision is the same as that of `a`.\n out : ndarray, optional\n Array into which the output is placed. Its type is preserved and\n it must be of the right shape to hold the output.\n\n Returns\n -------\n sum_along_diagonals : ndarray\n If `a` is 2-D, the sum along the diagonal is returned. If `a` has\n larger dimensions, then an array of sums along diagonals is returned.\n\n See Also\n --------\n diag, diagonal, diagflat\n\n Examples\n --------\n >>> np.trace(np.eye(3))\n 3.0\n >>> a = np.arange(8).reshape((2,2,2))\n >>> np.trace(a)\n array([6, 8])\n\n >>> a = np.arange(24).reshape((2,2,2,3))\n >>> np.trace(a).shape\n (2, 3)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_495trace = {__Pyx_NAMESTR("trace"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_495trace, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_494trace)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_495trace(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_offset = 0; CYTHON_UNUSED PyObject *__pyx_v_axis1 = 0; CYTHON_UNUSED PyObject *__pyx_v_axis2 = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("trace (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__offset,&__pyx_n_s__axis1,&__pyx_n_s__axis2,&__pyx_n_s__dtype,&__pyx_n_s__out,0}; PyObject* values[6] = {0,0,0,0,0,0}; values[1] = ((PyObject *)__pyx_int_0); values[2] = ((PyObject *)__pyx_int_0); values[3] = ((PyObject *)__pyx_int_1); /* "ga4py/gain/notimplemented.pyx":12390 * * * def trace(a, offset=0, axis1=0, axis2=1, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the sum along diagonals of the array. * */ values[4] = ((PyObject *)Py_None); values[5] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__offset); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis1); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis2); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[4] = value; kw_args--; } } case 5: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[5] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "trace") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12390; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_offset = values[1]; __pyx_v_axis1 = values[2]; __pyx_v_axis2 = values[3]; __pyx_v_dtype = values[4]; __pyx_v_out = values[5]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("trace", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12390; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.trace", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_494trace(__pyx_self, __pyx_v_a, __pyx_v_offset, __pyx_v_axis1, __pyx_v_axis2, __pyx_v_dtype, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_494trace(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_offset, CYTHON_UNUSED PyObject *__pyx_v_axis1, CYTHON_UNUSED PyObject *__pyx_v_axis2, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("trace", 0); /* "ga4py/gain/notimplemented.pyx":12445 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12445; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.trace", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_497transpose(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_496transpose[] = "Permute the dimensions of an array.\n\n Parameters\n ----------\n a : array_like\n Input array.\n axes : list of ints, optional\n By default, reverse the dimensions, otherwise permute the axes\n according to the values given.\n\n Returns\n -------\n p : ndarray\n `a` with its axes permuted. A view is returned whenever\n possible.\n\n See Also\n --------\n rollaxis\n\n Examples\n --------\n >>> x = np.arange(4).reshape((2,2))\n >>> x\n array([[0, 1],\n [2, 3]])\n\n >>> np.transpose(x)\n array([[0, 2],\n [1, 3]])\n\n >>> x = np.ones((1, 2, 3))\n >>> np.transpose(x, (1, 0, 2)).shape\n (2, 1, 3)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_497transpose = {__Pyx_NAMESTR("transpose"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_497transpose, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_496transpose)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_497transpose(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axes = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("transpose (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axes,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":12448 * * * def transpose(a, axes=None): # <<<<<<<<<<<<<< * """Permute the dimensions of an array. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axes); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "transpose") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12448; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axes = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("transpose", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12448; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.transpose", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_496transpose(__pyx_self, __pyx_v_a, __pyx_v_axes); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_496transpose(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axes) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("transpose", 0); /* "ga4py/gain/notimplemented.pyx":12485 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12485; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.transpose", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_499trapz(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_498trapz[] = "Integrate along the given axis using the composite trapezoidal rule.\n\n Integrate `y` (`x`) along given axis.\n\n Parameters\n ----------\n y : array_like\n Input array to integrate.\n x : array_like, optional\n If `x` is None, then spacing between all `y` elements is `dx`.\n dx : scalar, optional\n If `x` is None, spacing given by `dx` is assumed. Default is 1.\n axis : int, optional\n Specify the axis.\n\n Returns\n -------\n out : float\n Definite integral as approximated by trapezoidal rule.\n\n See Also\n --------\n sum, cumsum\n\n Notes\n -----\n Image [2]_ illustrates trapezoidal rule -- y-axis locations of points will\n be taken from `y` array, by default x-axis distances between points will be\n 1.0, alternatively they can be provided with `x` array or with `dx` scalar.\n Return value will be equal to combined area under the red lines.\n\n\n References\n ----------\n .. [1] Wikipedia page: http://en.wikipedia.org/wiki/Trapezoidal_rule\n\n .. [2] Illustration image:\n http://en.wikipedia.org/wiki/File:Composite_trapezoidal_rule_illustration.png\n\n Examples\n --------\n >>> np.trapz([1,2,3])\n 4.0\n >>> np.trapz([1,2,3], x=[4,6,8])\n 8.0\n >>> np.trapz([1,2,3], dx=2)\n 8.0\n >>> a = np.arange(6).reshape(2, 3)\n >>> a\n array([[0, 1, 2],\n [3, 4, 5]])\n >>> np.trapz(a, axis=0)\n array([ 1.5, 2.5, 3.5])\n >>> np.trapz(a, axis=1)\n array([ 2., 8.])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_499trapz = {__Pyx_NAMESTR("trapz"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_499trapz, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_498trapz)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_499trapz(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_y = 0; CYTHON_UNUSED PyObject *__pyx_v_x = 0; CYTHON_UNUSED PyObject *__pyx_v_dx = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("trapz (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__y,&__pyx_n_s__x,&__pyx_n_s__dx,&__pyx_n_s__axis,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":12488 * * * def trapz(y, x=None, dx=1.0, axis=-1): # <<<<<<<<<<<<<< * """Integrate along the given axis using the composite trapezoidal rule. * */ values[1] = ((PyObject *)Py_None); values[2] = __pyx_k_48; values[3] = ((PyObject *)__pyx_int_neg_1); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dx); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "trapz") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12488; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_y = values[0]; __pyx_v_x = values[1]; __pyx_v_dx = values[2]; __pyx_v_axis = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("trapz", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12488; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.trapz", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_498trapz(__pyx_self, __pyx_v_y, __pyx_v_x, __pyx_v_dx, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_498trapz(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_y, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_dx, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("trapz", 0); /* "ga4py/gain/notimplemented.pyx":12546 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.trapz", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_501tri(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_500tri[] = "An array with ones at and below the given diagonal and zeros elsewhere.\n\n Parameters\n ----------\n N : int\n Number of rows in the array.\n M : int, optional\n Number of columns in the array.\n By default, `M` is taken equal to `N`.\n k : int, optional\n The sub-diagonal at and below which the array is filled.\n `k` = 0 is the main diagonal, while `k` < 0 is below it,\n and `k` > 0 is above. The default is 0.\n dtype : dtype, optional\n Data type of the returned array. The default is float.\n\n Returns\n -------\n T : ndarray of shape (N, M)\n Array with its lower triangle filled with ones and zero elsewhere;\n in other words ``T[i,j] == 1`` for ``i <= j + k``, 0 otherwise.\n\n Examples\n --------\n >>> np.tri(3, 5, 2, dtype=int)\n array([[1, 1, 1, 0, 0],\n [1, 1, 1, 1, 0],\n [1, 1, 1, 1, 1]])\n\n >>> np.tri(3, 5, -1)\n array([[ 0., 0., 0., 0., 0.],\n [ 1., 0., 0., 0., 0.],\n [ 1., 1., 0., 0., 0.]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_501tri = {__Pyx_NAMESTR("tri"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_501tri, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_500tri)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_501tri(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_N = 0; CYTHON_UNUSED PyObject *__pyx_v_M = 0; CYTHON_UNUSED PyObject *__pyx_v_k = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("tri (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__N,&__pyx_n_s__M,&__pyx_n_s__k,&__pyx_n_s__dtype,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":12549 * * * def tri(N, M=None, k=0, dtype=float): # <<<<<<<<<<<<<< * """An array with ones at and below the given diagonal and zeros elsewhere. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)__pyx_int_0); values[3] = __pyx_k_49; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__N)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__M); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__k); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tri") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12549; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_N = values[0]; __pyx_v_M = values[1]; __pyx_v_k = values[2]; __pyx_v_dtype = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("tri", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12549; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.tri", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_500tri(__pyx_self, __pyx_v_N, __pyx_v_M, __pyx_v_k, __pyx_v_dtype); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_500tri(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_N, CYTHON_UNUSED PyObject *__pyx_v_M, CYTHON_UNUSED PyObject *__pyx_v_k, CYTHON_UNUSED PyObject *__pyx_v_dtype) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("tri", 0); /* "ga4py/gain/notimplemented.pyx":12585 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12585; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.tri", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_503tril(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_502tril[] = "Lower triangle of an array.\n\n Return a copy of an array with elements above the `k`-th diagonal zeroed.\n\n Parameters\n ----------\n m : array_like, shape (M, N)\n Input array.\n k : int, optional\n Diagonal above which to zero elements. `k = 0` (the default) is the\n main diagonal, `k < 0` is below it and `k > 0` is above.\n\n Returns\n -------\n L : ndarray, shape (M, N)\n Lower triangle of `m`, of same shape and data-type as `m`.\n\n See Also\n --------\n triu : same thing, only for the upper triangle\n\n Examples\n --------\n >>> np.tril([[1,2,3],[4,5,6],[7,8,9],[10,11,12]], -1)\n array([[ 0, 0, 0],\n [ 4, 0, 0],\n [ 7, 8, 0],\n [10, 11, 12]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_503tril = {__Pyx_NAMESTR("tril"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_503tril, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_502tril)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_503tril(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_m = 0; CYTHON_UNUSED PyObject *__pyx_v_k = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("tril (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__m,&__pyx_n_s__k,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__m)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__k); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tril") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12588; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_m = values[0]; __pyx_v_k = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("tril", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12588; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.tril", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_502tril(__pyx_self, __pyx_v_m, __pyx_v_k); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":12588 * * * def tril(m, k=0): # <<<<<<<<<<<<<< * """Lower triangle of an array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_502tril(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_m, CYTHON_UNUSED PyObject *__pyx_v_k) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("tril", 0); /* "ga4py/gain/notimplemented.pyx":12619 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12619; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.tril", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_505tril_indices(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_504tril_indices[] = "Return the indices for the lower-triangle of an (n, n) array.\n\n Parameters\n ----------\n n : int\n The row dimension of the square arrays for which the returned\n indices will be valid.\n k : int, optional\n Diagonal offset (see `tril` for details).\n\n Returns\n -------\n inds : tuple of arrays\n The indices for the triangle. The returned tuple contains two arrays,\n each with the indices along one dimension of the array.\n\n See also\n --------\n triu_indices : similar function, for upper-triangular.\n mask_indices : generic function accepting an arbitrary mask function.\n tril, triu\n\n Notes\n -----\n .. versionadded:: 1.4.0\n\n Examples\n --------\n Compute two different sets of indices to access 4x4 arrays, one for the\n lower triangular part starting at the main diagonal, and one starting two\n diagonals further right:\n\n >>> il1 = np.tril_indices(4)\n >>> il2 = np.tril_indices(4, 2)\n\n Here is how they can be used with a sample array:\n\n >>> a = np.arange(16).reshape(4, 4)\n >>> a\n array([[ 0, 1, 2, 3],\n [ 4, 5, 6, 7],\n [ 8, 9, 10, 11],\n [12, 13, 14, 15]])\n\n Both for indexing:\n\n >>> a[il1]\n array([ 0, 4, 5, 8, 9, 10, 12, 13, 14, 15])\n\n And for assigning values:\n\n >>> a[il1] = -1\n >>> a\n array([[-1, 1, 2, 3],\n [-1, -1, 6, 7],\n [-1, -1, -1, 11],\n [-1, -1, -1, -1]])\n\n These cover almost the whole array (two diagonals right of the main one):\n\n >>> a[il2] = -10\n >>> a\n array([[-10, -10, -10, 3],\n [-10, -10, -10, -10],\n [-10, -10, -10, -10],\n [-10, -10, -10, -10]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_505tril_indices = {__Pyx_NAMESTR("tril_indices"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_505tril_indices, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_504tril_indices)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_505tril_indices(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_n = 0; CYTHON_UNUSED PyObject *__pyx_v_k = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("tril_indices (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__n,&__pyx_n_s__k,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__n)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__k); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tril_indices") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12622; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_n = values[0]; __pyx_v_k = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("tril_indices", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12622; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.tril_indices", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_504tril_indices(__pyx_self, __pyx_v_n, __pyx_v_k); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":12622 * * * def tril_indices(n, k=0): # <<<<<<<<<<<<<< * """Return the indices for the lower-triangle of an (n, n) array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_504tril_indices(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_n, CYTHON_UNUSED PyObject *__pyx_v_k) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("tril_indices", 0); /* "ga4py/gain/notimplemented.pyx":12691 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12691; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.tril_indices", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_507tril_indices_from(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_506tril_indices_from[] = "Return the indices for the lower-triangle of arr.\n\n See `tril_indices` for full details.\n\n Parameters\n ----------\n arr : array_like\n The indices will be valid for square arrays whose dimensions are\n the same as arr.\n k : int, optional\n Diagonal offset (see `tril` for details).\n\n See Also\n --------\n tril_indices, tril\n\n Notes\n -----\n .. versionadded:: 1.4.0\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_507tril_indices_from = {__Pyx_NAMESTR("tril_indices_from"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_507tril_indices_from, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_506tril_indices_from)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_507tril_indices_from(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_arr = 0; CYTHON_UNUSED PyObject *__pyx_v_k = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("tril_indices_from (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__arr,&__pyx_n_s__k,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arr)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__k); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tril_indices_from") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12694; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_arr = values[0]; __pyx_v_k = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("tril_indices_from", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12694; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.tril_indices_from", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_506tril_indices_from(__pyx_self, __pyx_v_arr, __pyx_v_k); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":12694 * * * def tril_indices_from(arr, k=0): # <<<<<<<<<<<<<< * """Return the indices for the lower-triangle of arr. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_506tril_indices_from(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arr, CYTHON_UNUSED PyObject *__pyx_v_k) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("tril_indices_from", 0); /* "ga4py/gain/notimplemented.pyx":12716 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12716; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.tril_indices_from", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_509trim_zeros(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_508trim_zeros[] = "Trim the leading and/or trailing zeros from a 1-D array or sequence.\n\n Parameters\n ----------\n filt : 1-D array or sequence\n Input array.\n trim : str, optional\n A string with 'f' representing trim from front and 'b' to trim from\n back. Default is 'fb', trim zeros from both front and back of the\n array.\n\n Returns\n -------\n trimmed : 1-D array or sequence\n The result of trimming the input. The input data type is preserved.\n\n Examples\n --------\n >>> a = np.array((0, 0, 0, 1, 2, 3, 0, 2, 1, 0))\n >>> np.trim_zeros(a)\n array([1, 2, 3, 0, 2, 1])\n\n >>> np.trim_zeros(a, 'b')\n array([0, 0, 0, 1, 2, 3, 0, 2, 1])\n\n The input data type is preserved, list/tuple in means list/tuple out.\n\n >>> np.trim_zeros([0, 1, 2, 0])\n [1, 2]\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_509trim_zeros = {__Pyx_NAMESTR("trim_zeros"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_509trim_zeros, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_508trim_zeros)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_509trim_zeros(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_filt = 0; CYTHON_UNUSED PyObject *__pyx_v_trim = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("trim_zeros (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__filt,&__pyx_n_s__trim,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)__pyx_n_s__fb); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__filt)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__trim); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "trim_zeros") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12719; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_filt = values[0]; __pyx_v_trim = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("trim_zeros", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12719; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.trim_zeros", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_508trim_zeros(__pyx_self, __pyx_v_filt, __pyx_v_trim); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":12719 * * * def trim_zeros(filt, trim='fb'): # <<<<<<<<<<<<<< * """Trim the leading and/or trailing zeros from a 1-D array or sequence. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_508trim_zeros(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_filt, CYTHON_UNUSED PyObject *__pyx_v_trim) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("trim_zeros", 0); /* "ga4py/gain/notimplemented.pyx":12751 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12751; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.trim_zeros", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_511triu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_510triu[] = "Upper triangle of an array.\n\n Return a copy of a matrix with the elements below the `k`-th diagonal\n zeroed.\n\n Please refer to the documentation for `tril` for further details.\n\n See Also\n --------\n tril : lower triangle of an array\n\n Examples\n --------\n >>> np.triu([[1,2,3],[4,5,6],[7,8,9],[10,11,12]], -1)\n array([[ 1, 2, 3],\n [ 4, 5, 6],\n [ 0, 8, 9],\n [ 0, 0, 12]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_511triu = {__Pyx_NAMESTR("triu"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_511triu, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_510triu)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_511triu(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_m = 0; CYTHON_UNUSED PyObject *__pyx_v_k = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("triu (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__m,&__pyx_n_s__k,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__m)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__k); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "triu") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12754; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_m = values[0]; __pyx_v_k = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("triu", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12754; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.triu", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_510triu(__pyx_self, __pyx_v_m, __pyx_v_k); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":12754 * * * def triu(m, k=0): # <<<<<<<<<<<<<< * """Upper triangle of an array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_510triu(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_m, CYTHON_UNUSED PyObject *__pyx_v_k) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("triu", 0); /* "ga4py/gain/notimplemented.pyx":12775 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.triu", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_513triu_indices(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_512triu_indices[] = "Return the indices for the upper-triangle of an (n, n) array.\n\n Parameters\n ----------\n n : int\n The size of the arrays for which the returned indices will\n be valid.\n k : int, optional\n Diagonal offset (see `triu` for details).\n\n Returns\n -------\n inds : tuple of arrays\n The indices for the triangle. The returned tuple contains two arrays,\n each with the indices along one dimension of the array.\n\n See also\n --------\n tril_indices : similar function, for lower-triangular.\n mask_indices : generic function accepting an arbitrary mask function.\n triu, tril\n\n Notes\n -----\n .. versionadded:: 1.4.0\n\n Examples\n --------\n Compute two different sets of indices to access 4x4 arrays, one for the\n upper triangular part starting at the main diagonal, and one starting two\n diagonals further right:\n\n >>> iu1 = np.triu_indices(4)\n >>> iu2 = np.triu_indices(4, 2)\n\n Here is how they can be used with a sample array:\n\n >>> a = np.arange(16).reshape(4, 4)\n >>> a\n array([[ 0, 1, 2, 3],\n [ 4, 5, 6, 7],\n [ 8, 9, 10, 11],\n [12, 13, 14, 15]])\n\n Both for indexing:\n\n >>> a[iu1]\n array([ 0, 1, 2, 3, 5, 6, 7, 10, 11, 15])\n\n And for assigning values:\n\n >>> a[iu1] = -1\n >>> a\n array([[-1, -1, -1, -1],\n [ 4, -1, -1, -1],\n [ 8, 9, -1, -1],\n [12, 13, 14, -1]])\n\n These cover only a small part of the whole array (two diagonals right\n of the main one):\n\n >>> a[iu2] = -10\n >>> a\n array([[ -1, -1, -10, -10],\n [ 4, -1, -1, -10],\n [ 8, 9, -1, -1],\n [ 12, 13, 14, -1]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_513triu_indices = {__Pyx_NAMESTR("triu_indices"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_513triu_indices, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_512triu_indices)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_513triu_indices(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_n = 0; CYTHON_UNUSED PyObject *__pyx_v_k = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("triu_indices (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__n,&__pyx_n_s__k,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__n)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__k); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "triu_indices") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12778; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_n = values[0]; __pyx_v_k = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("triu_indices", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12778; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.triu_indices", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_512triu_indices(__pyx_self, __pyx_v_n, __pyx_v_k); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":12778 * * * def triu_indices(n, k=0): # <<<<<<<<<<<<<< * """Return the indices for the upper-triangle of an (n, n) array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_512triu_indices(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_n, CYTHON_UNUSED PyObject *__pyx_v_k) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("triu_indices", 0); /* "ga4py/gain/notimplemented.pyx":12848 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12848; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.triu_indices", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_515triu_indices_from(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_514triu_indices_from[] = "Return the indices for the upper-triangle of an (n, n) array.\n\n See `triu_indices` for full details.\n\n Parameters\n ----------\n arr : array_like\n The indices will be valid for square arrays whose dimensions are\n the same as arr.\n k : int, optional\n Diagonal offset (see `triu` for details).\n\n See Also\n --------\n triu_indices, triu\n\n Notes\n -----\n .. versionadded:: 1.4.0\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_515triu_indices_from = {__Pyx_NAMESTR("triu_indices_from"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_515triu_indices_from, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_514triu_indices_from)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_515triu_indices_from(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_arr = 0; CYTHON_UNUSED PyObject *__pyx_v_k = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("triu_indices_from (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__arr,&__pyx_n_s__k,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__arr)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__k); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "triu_indices_from") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12851; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_arr = values[0]; __pyx_v_k = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("triu_indices_from", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12851; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.triu_indices_from", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_514triu_indices_from(__pyx_self, __pyx_v_arr, __pyx_v_k); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":12851 * * * def triu_indices_from(arr, k=0): # <<<<<<<<<<<<<< * """Return the indices for the upper-triangle of an (n, n) array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_514triu_indices_from(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_arr, CYTHON_UNUSED PyObject *__pyx_v_k) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("triu_indices_from", 0); /* "ga4py/gain/notimplemented.pyx":12873 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.triu_indices_from", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_517typename(PyObject *__pyx_self, PyObject *__pyx_v_char_); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_516typename[] = "Return a description for the given data type code.\n\n Parameters\n ----------\n char : str\n Data type code.\n\n Returns\n -------\n out : str\n Description of the input data type code.\n\n See Also\n --------\n dtype, typecodes\n\n Examples\n --------\n >>> typechars = ['S1', '?', 'B', 'D', 'G', 'F', 'I', 'H', 'L', 'O', 'Q',\n ... 'S', 'U', 'V', 'b', 'd', 'g', 'f', 'i', 'h', 'l', 'q']\n >>> for typechar in typechars:\n ... print typechar, ' : ', np.typename(typechar)\n ...\n S1 : character\n ? : bool\n B : unsigned char\n D : complex double precision\n G : complex long double precision\n F : complex single precision\n I : unsigned integer\n H : unsigned short\n L : unsigned long integer\n O : object\n Q : unsigned long long integer\n S : string\n U : unicode\n V : void\n b : signed char\n d : double precision\n g : long precision\n f : single precision\n i : integer\n h : short\n l : long integer\n q : long long integer\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_517typename = {__Pyx_NAMESTR("typename"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_517typename, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_516typename)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_517typename(PyObject *__pyx_self, PyObject *__pyx_v_char_) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("typename (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_516typename(__pyx_self, ((PyObject *)__pyx_v_char_)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":12876 * * * def typename(char_): # <<<<<<<<<<<<<< * """Return a description for the given data type code. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_516typename(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_char_) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("typename", 0); /* "ga4py/gain/notimplemented.pyx":12924 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12924; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.typename", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_519union1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_518union1d[] = "Find the union of two arrays.\n\n Return the unique, sorted array of values that are in either of the two\n input arrays.\n\n Parameters\n ----------\n ar1, ar2 : array_like\n Input arrays. They are flattened if they are not already 1D.\n\n Returns\n -------\n union : ndarray\n Unique, sorted union of the input arrays.\n\n See Also\n --------\n numpy.lib.arraysetops : Module with a number of other functions for\n performing set operations on arrays.\n\n Examples\n --------\n >>> np.union1d([-1, 0, 1], [-2, 0, 2])\n array([-2, -1, 0, 1, 2])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_519union1d = {__Pyx_NAMESTR("union1d"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_519union1d, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_518union1d)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_519union1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_ar1 = 0; CYTHON_UNUSED PyObject *__pyx_v_ar2 = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("union1d (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__ar1,&__pyx_n_s__ar2,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ar1)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ar2)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("union1d", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12927; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "union1d") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12927; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_ar1 = values[0]; __pyx_v_ar2 = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("union1d", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12927; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.union1d", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_518union1d(__pyx_self, __pyx_v_ar1, __pyx_v_ar2); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":12927 * * * def union1d(ar1, ar2): # <<<<<<<<<<<<<< * """Find the union of two arrays. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_518union1d(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ar1, CYTHON_UNUSED PyObject *__pyx_v_ar2) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("union1d", 0); /* "ga4py/gain/notimplemented.pyx":12954 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12954; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.union1d", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_521unique(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_520unique[] = "Find the unique elements of an array.\n\n Returns the sorted unique elements of an array. There are two optional\n outputs in addition to the unique elements: the indices of the input array\n that give the unique values, and the indices of the unique array that\n reconstruct the input array.\n\n Parameters\n ----------\n ar : array_like\n Input array. This will be flattened if it is not already 1-D.\n return_index : bool, optional\n If True, also return the indices of `ar` that result in the unique\n array.\n return_inverse : bool, optional\n If True, also return the indices of the unique array that can be used\n to reconstruct `ar`.\n\n Returns\n -------\n unique : ndarray\n The sorted unique values.\n unique_indices : ndarray, optional\n The indices of the unique values in the (flattened) original array.\n Only provided if `return_index` is True.\n unique_inverse : ndarray, optional\n The indices to reconstruct the (flattened) original array from the\n unique array. Only provided if `return_inverse` is True.\n\n See Also\n --------\n numpy.lib.arraysetops : Module with a number of other functions for\n performing set operations on arrays.\n\n Examples\n --------\n >>> np.unique([1, 1, 2, 2, 3, 3])\n array([1, 2, 3])\n >>> a = np.array([[1, 1], [2, 3]])\n >>> np.unique(a)\n array([1, 2, 3])\n\n Return the indices of the original array that give the unique values:\n\n >>> a = np.array(['a', 'b', 'b', 'c', 'a'])\n >>> u, indices = np.unique(a, return_index=True)\n >>> u\n array(['a', 'b', 'c'],\n dtype='|S1')\n >>> indices\n array([0, 1, 3])\n >>> a[indices]\n array(['a', 'b', 'c'],\n dtype='|S1')\n\n Reconstruct the input array from the unique values:\n\n >>> a = np.array([1, 2, 6, 4, 2, 3, 2])\n >>> u, indices = np.unique(a, return_inverse=True"")\n >>> u\n array([1, 2, 3, 4, 6])\n >>> indices\n array([0, 1, 4, 3, 1, 2, 1])\n >>> u[indices]\n array([1, 2, 6, 4, 2, 3, 2])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_521unique = {__Pyx_NAMESTR("unique"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_521unique, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_520unique)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_521unique(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_ar = 0; CYTHON_UNUSED PyObject *__pyx_v_return_index = 0; CYTHON_UNUSED PyObject *__pyx_v_return_inverse = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("unique (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__ar,&__pyx_n_s__return_index,&__pyx_n_s__return_inverse,0}; PyObject* values[3] = {0,0,0}; values[1] = __pyx_k_50; values[2] = __pyx_k_51; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ar)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__return_index); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__return_inverse); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "unique") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12957; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_ar = values[0]; __pyx_v_return_index = values[1]; __pyx_v_return_inverse = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("unique", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12957; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.unique", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_520unique(__pyx_self, __pyx_v_ar, __pyx_v_return_index, __pyx_v_return_inverse); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":12957 * * * def unique(ar, return_index=False, return_inverse=False): # <<<<<<<<<<<<<< * """Find the unique elements of an array. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_520unique(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ar, CYTHON_UNUSED PyObject *__pyx_v_return_index, CYTHON_UNUSED PyObject *__pyx_v_return_inverse) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("unique", 0); /* "ga4py/gain/notimplemented.pyx":13025 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13025; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.unique", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_523unpackbits(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_522unpackbits[] = "unpackbits(myarray, axis=None)\n\n Unpacks elements of a uint8 array into a binary-valued output array.\n\n Each element of `myarray` represents a bit-field that should be unpacked\n into a binary-valued output array. The shape of the output array is either\n 1-D (if `axis` is None) or the same shape as the input array with unpacking\n done along the axis specified.\n\n Parameters\n ----------\n myarray : ndarray, uint8 type\n Input array.\n axis : int, optional\n Unpacks along this axis.\n\n Returns\n -------\n unpacked : ndarray, uint8 type\n The elements are binary-valued (0 or 1).\n\n See Also\n --------\n packbits : Packs the elements of a binary-valued array into bits in a uint8\n array.\n\n Examples\n --------\n >>> a = np.array([[2], [7], [23]], dtype=np.uint8)\n >>> a\n array([[ 2],\n [ 7],\n [23]], dtype=uint8)\n >>> b = np.unpackbits(a, axis=1)\n >>> b\n array([[0, 0, 0, 0, 0, 0, 1, 0],\n [0, 0, 0, 0, 0, 1, 1, 1],\n [0, 0, 0, 1, 0, 1, 1, 1]], dtype=uint8)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_523unpackbits = {__Pyx_NAMESTR("unpackbits"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_523unpackbits, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_522unpackbits)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_523unpackbits(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_myarray = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("unpackbits (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__myarray,&__pyx_n_s__axis,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":13028 * * * def unpackbits(myarray, axis=None): # <<<<<<<<<<<<<< * """unpackbits(myarray, axis=None) * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__myarray)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "unpackbits") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13028; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_myarray = values[0]; __pyx_v_axis = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("unpackbits", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13028; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.unpackbits", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_522unpackbits(__pyx_self, __pyx_v_myarray, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_522unpackbits(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_myarray, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("unpackbits", 0); /* "ga4py/gain/notimplemented.pyx":13070 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13070; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.unpackbits", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_525unravel_index(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_524unravel_index[] = "unravel_index(indices, dims, order='C')\n\n Converts a flat index or array of flat indices into a tuple\n of coordinate arrays.\n\n Parameters\n ----------\n indices : array_like\n An integer array whose elements are indices into the flattened\n version of an array of dimensions ``dims``. Before version 1.6.0,\n this function accepted just one index value.\n dims : tuple of ints\n The shape of the array to use for unraveling ``indices``.\n order : {'C', 'F'}, optional\n .. versionadded:: 1.6.0\n\n Determines whether the indices should be viewed as indexing in\n C (row-major) order or FORTRAN (column-major) order.\n\n Returns\n -------\n unraveled_coords : tuple of ndarray\n Each array in the tuple has the same shape as the ``indices``\n array.\n\n See Also\n --------\n ravel_multi_index\n\n Examples\n --------\n >>> np.unravel_index([22, 41, 37], (7,6))\n (array([3, 6, 6]), array([4, 5, 1]))\n >>> np.unravel_index([31, 41, 13], (7,6), order='F')\n (array([3, 6, 6]), array([4, 5, 1]))\n\n >>> np.unravel_index(1621, (6,7,8,9))\n (3, 1, 4, 1)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_525unravel_index = {__Pyx_NAMESTR("unravel_index"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_525unravel_index, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_524unravel_index)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_525unravel_index(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_indices = 0; CYTHON_UNUSED PyObject *__pyx_v_dims = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("unravel_index (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__indices,&__pyx_n_s__dims,&__pyx_n_s__order,0}; PyObject* values[3] = {0,0,0}; values[2] = ((PyObject *)__pyx_n_s__C); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__indices)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dims)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("unravel_index", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13073; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "unravel_index") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13073; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_indices = values[0]; __pyx_v_dims = values[1]; __pyx_v_order = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("unravel_index", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13073; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.unravel_index", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_524unravel_index(__pyx_self, __pyx_v_indices, __pyx_v_dims, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":13073 * * * def unravel_index(indices, dims, order='C'): # <<<<<<<<<<<<<< * """unravel_index(indices, dims, order='C') * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_524unravel_index(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_indices, CYTHON_UNUSED PyObject *__pyx_v_dims, CYTHON_UNUSED PyObject *__pyx_v_order) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("unravel_index", 0); /* "ga4py/gain/notimplemented.pyx":13115 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.unravel_index", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_527unwrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_526unwrap[] = "Unwrap by changing deltas between values to 2*pi complement.\n\n Unwrap radian phase `p` by changing absolute jumps greater than\n `discont` to their 2*pi complement along the given axis.\n\n Parameters\n ----------\n p : array_like\n Input array.\n discont : float, optional\n Maximum discontinuity between values, default is ``pi``.\n axis : int, optional\n Axis along which unwrap will operate, default is the last axis.\n\n Returns\n -------\n out : ndarray\n Output array.\n\n See Also\n --------\n rad2deg, deg2rad\n\n Notes\n -----\n If the discontinuity in `p` is smaller than ``pi``, but larger than\n `discont`, no unwrapping is done because taking the 2*pi complement\n would only make the discontinuity larger.\n\n Examples\n --------\n >>> phase = np.linspace(0, np.pi, num=5)\n >>> phase[3:] += np.pi\n >>> phase\n array([ 0. , 0.78539816, 1.57079633, 5.49778714, 6.28318531])\n >>> np.unwrap(phase)\n array([ 0. , 0.78539816, 1.57079633, -0.78539816, 0. ])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_527unwrap = {__Pyx_NAMESTR("unwrap"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_527unwrap, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_526unwrap)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_527unwrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_p = 0; CYTHON_UNUSED PyObject *__pyx_v_discont = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("unwrap (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p,&__pyx_n_s__discont,&__pyx_n_s__axis,0}; PyObject* values[3] = {0,0,0}; values[1] = __pyx_k_52; values[2] = ((PyObject *)__pyx_int_neg_1); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__discont); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "unwrap") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13118; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_p = values[0]; __pyx_v_discont = values[1]; __pyx_v_axis = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("unwrap", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13118; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.unwrap", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_526unwrap(__pyx_self, __pyx_v_p, __pyx_v_discont, __pyx_v_axis); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":13118 * * * def unwrap(p, discont=3.14159265359, axis=-1): # <<<<<<<<<<<<<< * """Unwrap by changing deltas between values to 2*pi complement. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_526unwrap(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_p, CYTHON_UNUSED PyObject *__pyx_v_discont, CYTHON_UNUSED PyObject *__pyx_v_axis) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("unwrap", 0); /* "ga4py/gain/notimplemented.pyx":13158 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.unwrap", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_529vander(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_528vander[] = "Generate a Van der Monde matrix.\n\n The columns of the output matrix are decreasing powers of the input\n vector. Specifically, the `i`-th output column is the input vector\n raised element-wise to the power of ``N - i - 1``. Such a matrix with\n a geometric progression in each row is named for Alexandre-Theophile\n Vandermonde.\n\n Parameters\n ----------\n x : array_like\n 1-D input array.\n N : int, optional\n Order of (number of columns in) the output. If `N` is not specified,\n a square array is returned (``N = len(x)``).\n\n Returns\n -------\n out : ndarray\n Van der Monde matrix of order `N`. The first column is ``x^(N-1)``,\n the second ``x^(N-2)`` and so forth.\n\n Examples\n --------\n >>> x = np.array([1, 2, 3, 5])\n >>> N = 3\n >>> np.vander(x, N)\n array([[ 1, 1, 1],\n [ 4, 2, 1],\n [ 9, 3, 1],\n [25, 5, 1]])\n\n >>> np.column_stack([x**(N-1-i) for i in range(N)])\n array([[ 1, 1, 1],\n [ 4, 2, 1],\n [ 9, 3, 1],\n [25, 5, 1]])\n\n >>> x = np.array([1, 2, 3, 5])\n >>> np.vander(x)\n array([[ 1, 1, 1, 1],\n [ 8, 4, 2, 1],\n [ 27, 9, 3, 1],\n [125, 25, 5, 1]])\n\n The determinant of a square Vandermonde matrix is the product\n of the differences between the values of the input vector:\n\n >>> np.linalg.det(np.vander(x))\n 48.000000000000043\n >>> (5-3)*(5-2)*(5-1)*(3-2)*(3-1)*(2-1)\n 48\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_529vander = {__Pyx_NAMESTR("vander"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_529vander, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_528vander)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_529vander(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_x = 0; CYTHON_UNUSED PyObject *__pyx_v_N = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("vander (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__N,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/notimplemented.pyx":13161 * * * def vander(x, N=None): # <<<<<<<<<<<<<< * """Generate a Van der Monde matrix. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__N); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "vander") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13161; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_x = values[0]; __pyx_v_N = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("vander", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13161; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.vander", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_528vander(__pyx_self, __pyx_v_x, __pyx_v_N); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_528vander(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_N) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("vander", 0); /* "ga4py/gain/notimplemented.pyx":13216 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.vander", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_531var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_530var[] = "Compute the variance along the specified axis.\n\n Returns the variance of the array elements, a measure of the spread of a\n distribution. The variance is computed for the flattened array by\n default, otherwise over the specified axis.\n\n Parameters\n ----------\n a : array_like\n Array containing numbers whose variance is desired. If `a` is not an\n array, a conversion is attempted.\n axis : int, optional\n Axis along which the variance is computed. The default is to compute\n the variance of the flattened array.\n dtype : data-type, optional\n Type to use in computing the variance. For arrays of integer type\n the default is `float32`; for arrays of float types it is the same as\n the array type.\n out : ndarray, optional\n Alternate output array in which to place the result. It must have\n the same shape as the expected output, but the type is cast if\n necessary.\n ddof : int, optional\n \"Delta Degrees of Freedom\": the divisor used in the calculation is\n ``N - ddof``, where ``N`` represents the number of elements. By\n default `ddof` is zero.\n\n Returns\n -------\n variance : ndarray, see dtype parameter above\n If ``out=None``, returns a new array containing the variance;\n otherwise, a reference to the output array is returned.\n\n See Also\n --------\n std : Standard deviation\n mean : Average\n numpy.doc.ufuncs : Section \"Output arguments\"\n\n Notes\n -----\n The variance is the average of the squared deviations from the mean,\n i.e., ``var = mean(abs(x - x.mean())**2)``.\n\n The mean is normally calculated as ``x.sum() / N``, where ``N = len(x)``.\n If, however, `ddof` is specified, the divisor ``N - ddof`` is used\n instead. In standard statistical practice, ``ddof=1`` provides an\n unbiased estimator of the variance of a hypothetical infinite population.\n ""``ddof=0`` provides a maximum likelihood estimate of the variance for\n normally distributed variables.\n\n Note that for complex numbers, the absolute value is taken before\n squaring, so that the result is always real and nonnegative.\n\n For floating-point input, the variance is computed using the same\n precision the input has. Depending on the input data, this can cause\n the results to be inaccurate, especially for `float32` (see example\n below). Specifying a higher-accuracy accumulator using the ``dtype``\n keyword can alleviate this issue.\n\n Examples\n --------\n >>> a = np.array([[1,2],[3,4]])\n >>> np.var(a)\n 1.25\n >>> np.var(a,0)\n array([ 1., 1.])\n >>> np.var(a,1)\n array([ 0.25, 0.25])\n\n In single precision, var() can be inaccurate:\n\n >>> a = np.zeros((2,512*512), dtype=np.float32)\n >>> a[0,:] = 1.0\n >>> a[1,:] = 0.1\n >>> np.var(a)\n 0.20405951142311096\n\n Computing the standard deviation in float64 is more accurate:\n\n >>> np.var(a, dtype=np.float64)\n 0.20249999932997387\n >>> ((1-0.55)**2 + (0.1-0.55)**2)/2\n 0.20250000000000001\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_531var = {__Pyx_NAMESTR("var"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_531var, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_530var)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_531var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_axis = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_out = 0; CYTHON_UNUSED PyObject *__pyx_v_ddof = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("var (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__axis,&__pyx_n_s__dtype,&__pyx_n_s__out,&__pyx_n_s__ddof,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/gain/notimplemented.pyx":13219 * * * def var(a, axis=None, dtype=None, out=None, ddof=0): # <<<<<<<<<<<<<< * """Compute the variance along the specified axis. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ddof); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "var") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13219; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_axis = values[1]; __pyx_v_dtype = values[2]; __pyx_v_out = values[3]; __pyx_v_ddof = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("var", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13219; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.var", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_530var(__pyx_self, __pyx_v_a, __pyx_v_axis, __pyx_v_dtype, __pyx_v_out, __pyx_v_ddof); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_530var(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_axis, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_out, CYTHON_UNUSED PyObject *__pyx_v_ddof) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("var", 0); /* "ga4py/gain/notimplemented.pyx":13306 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.var", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_533vdot(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_532vdot[] = "Return the dot product of two vectors.\n\n The vdot(`a`, `b`) function handles complex numbers differently than\n dot(`a`, `b`). If the first argument is complex the complex conjugate\n of the first argument is used for the calculation of the dot product.\n\n Note that `vdot` handles multidimensional arrays differently than `dot`:\n it does *not* perform a matrix product, but flattens input arguments\n to 1-D vectors first. Consequently, it should only be used for vectors.\n\n Parameters\n ----------\n a : array_like\n If `a` is complex the complex conjugate is taken before calculation\n of the dot product.\n b : array_like\n Second argument to the dot product.\n\n Returns\n -------\n output : ndarray\n Dot product of `a` and `b`. Can be an int, float, or\n complex depending on the types of `a` and `b`.\n\n See Also\n --------\n dot : Return the dot product without using the complex conjugate of the\n first argument.\n\n Examples\n --------\n >>> a = np.array([1+2j,3+4j])\n >>> b = np.array([5+6j,7+8j])\n >>> np.vdot(a, b)\n (70-8j)\n >>> np.vdot(b, a)\n (70+8j)\n\n Note that higher-dimensional arrays are flattened!\n\n >>> a = np.array([[1, 4], [5, 6]])\n >>> b = np.array([[4, 1], [2, 2]])\n >>> np.vdot(a, b)\n 30\n >>> np.vdot(b, a)\n 30\n >>> 1*4 + 4*1 + 5*2 + 6*2\n 30\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_533vdot = {__Pyx_NAMESTR("vdot"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_533vdot, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_532vdot)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_533vdot(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("vdot (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_532vdot(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":13309 * * * def vdot(): # <<<<<<<<<<<<<< * """Return the dot product of two vectors. * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_532vdot(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("vdot", 0); /* "ga4py/gain/notimplemented.pyx":13361 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.vdot", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_535vsplit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_534vsplit[] = "Split an array into multiple sub-arrays vertically (row-wise).\n\n Please refer to the ``split`` documentation. ``vsplit`` is equivalent\n to ``split`` with `axis=0` (default), the array is always split along the\n first axis regardless of the array dimension.\n\n See Also\n --------\n split : Split an array into multiple sub-arrays of equal size.\n\n Examples\n --------\n >>> x = np.arange(16.0).reshape(4, 4)\n >>> x\n array([[ 0., 1., 2., 3.],\n [ 4., 5., 6., 7.],\n [ 8., 9., 10., 11.],\n [ 12., 13., 14., 15.]])\n >>> np.vsplit(x, 2)\n [array([[ 0., 1., 2., 3.],\n [ 4., 5., 6., 7.]]),\n array([[ 8., 9., 10., 11.],\n [ 12., 13., 14., 15.]])]\n >>> np.vsplit(x, np.array([3, 6]))\n [array([[ 0., 1., 2., 3.],\n [ 4., 5., 6., 7.],\n [ 8., 9., 10., 11.]]),\n array([[ 12., 13., 14., 15.]]),\n array([], dtype=float64)]\n\n With a higher dimensional array the split is still along the first axis.\n\n >>> x = np.arange(8.0).reshape(2, 2, 2)\n >>> x\n array([[[ 0., 1.],\n [ 2., 3.]],\n [[ 4., 5.],\n [ 6., 7.]]])\n >>> np.vsplit(x, 2)\n [array([[[ 0., 1.],\n [ 2., 3.]]]),\n array([[[ 4., 5.],\n [ 6., 7.]]])]\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_535vsplit = {__Pyx_NAMESTR("vsplit"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_535vsplit, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_534vsplit)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_535vsplit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_ary = 0; CYTHON_UNUSED PyObject *__pyx_v_indices_or_sections = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("vsplit (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__ary,&__pyx_n_s__indices_or_sections,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ary)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__indices_or_sections)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("vsplit", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13364; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "vsplit") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13364; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_ary = values[0]; __pyx_v_indices_or_sections = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("vsplit", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13364; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.vsplit", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_534vsplit(__pyx_self, __pyx_v_ary, __pyx_v_indices_or_sections); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":13364 * * * def vsplit(ary, indices_or_sections): # <<<<<<<<<<<<<< * """Split an array into multiple sub-arrays vertically (row-wise). * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_534vsplit(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_ary, CYTHON_UNUSED PyObject *__pyx_v_indices_or_sections) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("vsplit", 0); /* "ga4py/gain/notimplemented.pyx":13410 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.vsplit", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_537vstack(PyObject *__pyx_self, PyObject *__pyx_v_tup); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_536vstack[] = "Stack arrays in sequence vertically (row wise).\n\n Take a sequence of arrays and stack them vertically to make a single\n array. Rebuild arrays divided by `vsplit`.\n\n Parameters\n ----------\n tup : sequence of ndarrays\n Tuple containing arrays to be stacked. The arrays must have the same\n shape along all but the first axis.\n\n Returns\n -------\n stacked : ndarray\n The array formed by stacking the given arrays.\n\n See Also\n --------\n hstack : Stack arrays in sequence horizontally (column wise).\n dstack : Stack arrays in sequence depth wise (along third dimension).\n concatenate : Join a sequence of arrays together.\n vsplit : Split array into a list of multiple sub-arrays vertically.\n\n\n Notes\n -----\n Equivalent to ``np.concatenate(tup, axis=0)``\n\n Examples\n --------\n >>> a = np.array([1, 2, 3])\n >>> b = np.array([2, 3, 4])\n >>> np.vstack((a,b))\n array([[1, 2, 3],\n [2, 3, 4]])\n\n >>> a = np.array([[1], [2], [3]])\n >>> b = np.array([[2], [3], [4]])\n >>> np.vstack((a,b))\n array([[1],\n [2],\n [3],\n [2],\n [3],\n [4]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_537vstack = {__Pyx_NAMESTR("vstack"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_537vstack, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_536vstack)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_537vstack(PyObject *__pyx_self, PyObject *__pyx_v_tup) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("vstack (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_536vstack(__pyx_self, ((PyObject *)__pyx_v_tup)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":13413 * * * def vstack(tup): # <<<<<<<<<<<<<< * """Stack arrays in sequence vertically (row wise). * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_536vstack(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_tup) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("vstack", 0); /* "ga4py/gain/notimplemented.pyx":13461 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.vstack", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_539where(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_538where[] = "where(condition, [x, y])\n\n Return elements, either from `x` or `y`, depending on `condition`.\n\n If only `condition` is given, return ``condition.nonzero()``.\n\n Parameters\n ----------\n condition : array_like, bool\n When True, yield `x`, otherwise yield `y`.\n x, y : array_like, optional\n Values from which to choose. `x` and `y` need to have the same\n shape as `condition`.\n\n Returns\n -------\n out : ndarray or tuple of ndarrays\n If both `x` and `y` are specified, the output array contains\n elements of `x` where `condition` is True, and elements from\n `y` elsewhere.\n\n If only `condition` is given, return the tuple\n ``condition.nonzero()``, the indices where `condition` is True.\n\n See Also\n --------\n nonzero, choose\n\n Notes\n -----\n If `x` and `y` are given and input arrays are 1-D, `where` is\n equivalent to::\n\n [xv if c else yv for (c,xv,yv) in zip(condition,x,y)]\n\n Examples\n --------\n >>> np.where([[True, False], [True, True]],\n ... [[1, 2], [3, 4]],\n ... [[9, 8], [7, 6]])\n array([[1, 8],\n [3, 4]])\n\n >>> np.where([[0, 1], [1, 0]])\n (array([0, 1]), array([1, 0]))\n\n >>> x = np.arange(9.).reshape(3, 3)\n >>> np.where( x > 5 )\n (array([2, 2, 2]), array([0, 1, 2]))\n >>> x[np.where( x > 3.0 )] # Note: result is 1D.\n array([ 4., 5., 6., 7., 8.])\n >>> np.where(x < 5, x, -1) # Note: broadcasting.\n array([[ 0., 1., 2.],\n [ 3., 4., -1.],\n [-1., -1., -1.]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_539where = {__Pyx_NAMESTR("where"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_539where, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_538where)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_539where(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("where (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_538where(__pyx_self); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/notimplemented.pyx":13464 * * * def where(): # <<<<<<<<<<<<<< * """where(condition, [x, y]) * */ static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_538where(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("where", 0); /* "ga4py/gain/notimplemented.pyx":13523 * """ * # BUILTIN * raise NotImplementedError # <<<<<<<<<<<<<< * * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13523; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.where", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_541who(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_14notimplemented_540who[] = "Print the Numpy arrays in the given dictionary.\n\n If there is no dictionary passed in or `vardict` is None then returns\n Numpy arrays in the globals() dictionary (all Numpy arrays in the\n namespace).\n\n Parameters\n ----------\n vardict : dict, optional\n A dictionary possibly containing ndarrays. Default is globals().\n\n Returns\n -------\n out : None\n Returns 'None'.\n\n Notes\n -----\n Prints out the name, shape, bytes and type of all of the ndarrays present\n in `vardict`.\n\n Examples\n --------\n >>> a = np.arange(10)\n >>> b = np.ones(20)\n >>> np.who()\n Name Shape Bytes Type\n ===========================================================\n a 10 40 int32\n b 20 160 float64\n Upper bound on total bytes = 200\n\n >>> d = {'x': np.arange(2.0), 'y': np.arange(3.0), 'txt': 'Some str',\n ... 'idx':5}\n >>> np.who(d)\n Name Shape Bytes Type\n ===========================================================\n y 3 24 float64\n x 2 16 float64\n Upper bound on total bytes = 40\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_14notimplemented_541who = {__Pyx_NAMESTR("who"), (PyCFunction)__pyx_pw_5ga4py_4gain_14notimplemented_541who, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_14notimplemented_540who)}; static PyObject *__pyx_pw_5ga4py_4gain_14notimplemented_541who(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { CYTHON_UNUSED PyObject *__pyx_v_vardict = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("who (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__vardict,0}; PyObject* values[1] = {0}; /* "ga4py/gain/notimplemented.pyx":13526 * * * def who(vardict=None): # <<<<<<<<<<<<<< * """Print the Numpy arrays in the given dictionary. * */ values[0] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__vardict); if (value) { values[0] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "who") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13526; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_vardict = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("who", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13526; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.who", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_14notimplemented_540who(__pyx_self, __pyx_v_vardict); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_14notimplemented_540who(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_vardict) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("who", 0); /* "ga4py/gain/notimplemented.pyx":13569 * * """ * raise NotImplementedError # <<<<<<<<<<<<<< * */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("ga4py.gain.notimplemented.who", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":194 * # experimental exception made for __getbuffer__ and __releasebuffer__ * # -- the details of this may change. * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< * # This implementation of getbuffer is geared towards Cython * # requirements, and does not yet fullfill the PEP. */ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { int __pyx_v_copy_shape; int __pyx_v_i; int __pyx_v_ndim; int __pyx_v_endian_detector; int __pyx_v_little_endian; int __pyx_v_t; char *__pyx_v_f; PyArray_Descr *__pyx_v_descr = 0; int __pyx_v_offset; int __pyx_v_hasfields; int __pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; char *__pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__getbuffer__", 0); if (__pyx_v_info != NULL) { __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); __Pyx_GIVEREF(__pyx_v_info->obj); } /* "numpy.pxd":200 * # of flags * * if info == NULL: return # <<<<<<<<<<<<<< * * cdef int copy_shape, i, ndim */ __pyx_t_1 = ((__pyx_v_info == NULL) != 0); if (__pyx_t_1) { __pyx_r = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "numpy.pxd":203 * * cdef int copy_shape, i, ndim * cdef int endian_detector = 1 # <<<<<<<<<<<<<< * cdef bint little_endian = ((&endian_detector)[0] != 0) * */ __pyx_v_endian_detector = 1; /* "numpy.pxd":204 * cdef int copy_shape, i, ndim * cdef int endian_detector = 1 * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< * * ndim = PyArray_NDIM(self) */ __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); /* "numpy.pxd":206 * cdef bint little_endian = ((&endian_detector)[0] != 0) * * ndim = PyArray_NDIM(self) # <<<<<<<<<<<<<< * * if sizeof(npy_intp) != sizeof(Py_ssize_t): */ __pyx_v_ndim = PyArray_NDIM(__pyx_v_self); /* "numpy.pxd":208 * ndim = PyArray_NDIM(self) * * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< * copy_shape = 1 * else: */ __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); if (__pyx_t_1) { /* "numpy.pxd":209 * * if sizeof(npy_intp) != sizeof(Py_ssize_t): * copy_shape = 1 # <<<<<<<<<<<<<< * else: * copy_shape = 0 */ __pyx_v_copy_shape = 1; goto __pyx_L4; } /*else*/ { /* "numpy.pxd":211 * copy_shape = 1 * else: * copy_shape = 0 # <<<<<<<<<<<<<< * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) */ __pyx_v_copy_shape = 0; } __pyx_L4:; /* "numpy.pxd":213 * copy_shape = 0 * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") */ __pyx_t_1 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0); if (__pyx_t_1) { /* "numpy.pxd":214 * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): # <<<<<<<<<<<<<< * raise ValueError(u"ndarray is not C contiguous") * */ __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS) != 0)) != 0); __pyx_t_3 = __pyx_t_2; } else { __pyx_t_3 = __pyx_t_1; } if (__pyx_t_3) { /* "numpy.pxd":215 * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) */ __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_54), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } __pyx_L5:; /* "numpy.pxd":217 * raise ValueError(u"ndarray is not C contiguous") * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") */ __pyx_t_3 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0); if (__pyx_t_3) { /* "numpy.pxd":218 * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): # <<<<<<<<<<<<<< * raise ValueError(u"ndarray is not Fortran contiguous") * */ __pyx_t_1 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS) != 0)) != 0); __pyx_t_2 = __pyx_t_1; } else { __pyx_t_2 = __pyx_t_3; } if (__pyx_t_2) { /* "numpy.pxd":219 * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< * * info.buf = PyArray_DATA(self) */ __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_56), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; /* "numpy.pxd":221 * raise ValueError(u"ndarray is not Fortran contiguous") * * info.buf = PyArray_DATA(self) # <<<<<<<<<<<<<< * info.ndim = ndim * if copy_shape: */ __pyx_v_info->buf = PyArray_DATA(__pyx_v_self); /* "numpy.pxd":222 * * info.buf = PyArray_DATA(self) * info.ndim = ndim # <<<<<<<<<<<<<< * if copy_shape: * # Allocate new buffer for strides and shape info. */ __pyx_v_info->ndim = __pyx_v_ndim; /* "numpy.pxd":223 * info.buf = PyArray_DATA(self) * info.ndim = ndim * if copy_shape: # <<<<<<<<<<<<<< * # Allocate new buffer for strides and shape info. * # This is allocated as one block, strides first. */ __pyx_t_2 = (__pyx_v_copy_shape != 0); if (__pyx_t_2) { /* "numpy.pxd":226 * # Allocate new buffer for strides and shape info. * # This is allocated as one block, strides first. * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) # <<<<<<<<<<<<<< * info.shape = info.strides + ndim * for i in range(ndim): */ __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2))); /* "numpy.pxd":227 * # This is allocated as one block, strides first. * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) * info.shape = info.strides + ndim # <<<<<<<<<<<<<< * for i in range(ndim): * info.strides[i] = PyArray_STRIDES(self)[i] */ __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim); /* "numpy.pxd":228 * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) * info.shape = info.strides + ndim * for i in range(ndim): # <<<<<<<<<<<<<< * info.strides[i] = PyArray_STRIDES(self)[i] * info.shape[i] = PyArray_DIMS(self)[i] */ __pyx_t_5 = __pyx_v_ndim; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_i = __pyx_t_6; /* "numpy.pxd":229 * info.shape = info.strides + ndim * for i in range(ndim): * info.strides[i] = PyArray_STRIDES(self)[i] # <<<<<<<<<<<<<< * info.shape[i] = PyArray_DIMS(self)[i] * else: */ (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]); /* "numpy.pxd":230 * for i in range(ndim): * info.strides[i] = PyArray_STRIDES(self)[i] * info.shape[i] = PyArray_DIMS(self)[i] # <<<<<<<<<<<<<< * else: * info.strides = PyArray_STRIDES(self) */ (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]); } goto __pyx_L7; } /*else*/ { /* "numpy.pxd":232 * info.shape[i] = PyArray_DIMS(self)[i] * else: * info.strides = PyArray_STRIDES(self) # <<<<<<<<<<<<<< * info.shape = PyArray_DIMS(self) * info.suboffsets = NULL */ __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self)); /* "numpy.pxd":233 * else: * info.strides = PyArray_STRIDES(self) * info.shape = PyArray_DIMS(self) # <<<<<<<<<<<<<< * info.suboffsets = NULL * info.itemsize = PyArray_ITEMSIZE(self) */ __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self)); } __pyx_L7:; /* "numpy.pxd":234 * info.strides = PyArray_STRIDES(self) * info.shape = PyArray_DIMS(self) * info.suboffsets = NULL # <<<<<<<<<<<<<< * info.itemsize = PyArray_ITEMSIZE(self) * info.readonly = not PyArray_ISWRITEABLE(self) */ __pyx_v_info->suboffsets = NULL; /* "numpy.pxd":235 * info.shape = PyArray_DIMS(self) * info.suboffsets = NULL * info.itemsize = PyArray_ITEMSIZE(self) # <<<<<<<<<<<<<< * info.readonly = not PyArray_ISWRITEABLE(self) * */ __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self); /* "numpy.pxd":236 * info.suboffsets = NULL * info.itemsize = PyArray_ITEMSIZE(self) * info.readonly = not PyArray_ISWRITEABLE(self) # <<<<<<<<<<<<<< * * cdef int t */ __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0)); /* "numpy.pxd":239 * * cdef int t * cdef char* f = NULL # <<<<<<<<<<<<<< * cdef dtype descr = self.descr * cdef list stack */ __pyx_v_f = NULL; /* "numpy.pxd":240 * cdef int t * cdef char* f = NULL * cdef dtype descr = self.descr # <<<<<<<<<<<<<< * cdef list stack * cdef int offset */ __pyx_t_4 = ((PyObject *)__pyx_v_self->descr); __Pyx_INCREF(__pyx_t_4); __pyx_v_descr = ((PyArray_Descr *)__pyx_t_4); __pyx_t_4 = 0; /* "numpy.pxd":244 * cdef int offset * * cdef bint hasfields = PyDataType_HASFIELDS(descr) # <<<<<<<<<<<<<< * * if not hasfields and not copy_shape: */ __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr); /* "numpy.pxd":246 * cdef bint hasfields = PyDataType_HASFIELDS(descr) * * if not hasfields and not copy_shape: # <<<<<<<<<<<<<< * # do not call releasebuffer * info.obj = None */ __pyx_t_2 = ((!(__pyx_v_hasfields != 0)) != 0); if (__pyx_t_2) { __pyx_t_3 = ((!(__pyx_v_copy_shape != 0)) != 0); __pyx_t_1 = __pyx_t_3; } else { __pyx_t_1 = __pyx_t_2; } if (__pyx_t_1) { /* "numpy.pxd":248 * if not hasfields and not copy_shape: * # do not call releasebuffer * info.obj = None # <<<<<<<<<<<<<< * else: * # need to call releasebuffer */ __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = Py_None; goto __pyx_L10; } /*else*/ { /* "numpy.pxd":251 * else: * # need to call releasebuffer * info.obj = self # <<<<<<<<<<<<<< * * if not hasfields: */ __Pyx_INCREF(((PyObject *)__pyx_v_self)); __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = ((PyObject *)__pyx_v_self); } __pyx_L10:; /* "numpy.pxd":253 * info.obj = self * * if not hasfields: # <<<<<<<<<<<<<< * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or */ __pyx_t_1 = ((!(__pyx_v_hasfields != 0)) != 0); if (__pyx_t_1) { /* "numpy.pxd":254 * * if not hasfields: * t = descr.type_num # <<<<<<<<<<<<<< * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): */ __pyx_t_5 = __pyx_v_descr->type_num; __pyx_v_t = __pyx_t_5; /* "numpy.pxd":255 * if not hasfields: * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") */ __pyx_t_1 = ((__pyx_v_descr->byteorder == '>') != 0); if (__pyx_t_1) { __pyx_t_2 = (__pyx_v_little_endian != 0); } else { __pyx_t_2 = __pyx_t_1; } if (!__pyx_t_2) { /* "numpy.pxd":256 * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< * raise ValueError(u"Non-native byte order not supported") * if t == NPY_BYTE: f = "b" */ __pyx_t_1 = ((__pyx_v_descr->byteorder == '<') != 0); if (__pyx_t_1) { __pyx_t_3 = ((!(__pyx_v_little_endian != 0)) != 0); __pyx_t_7 = __pyx_t_3; } else { __pyx_t_7 = __pyx_t_1; } __pyx_t_1 = __pyx_t_7; } else { __pyx_t_1 = __pyx_t_2; } if (__pyx_t_1) { /* "numpy.pxd":257 * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" */ __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_58), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L12; } __pyx_L12:; /* "numpy.pxd":274 * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) */ switch (__pyx_v_t) { /* "numpy.pxd":258 * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") * if t == NPY_BYTE: f = "b" # <<<<<<<<<<<<<< * elif t == NPY_UBYTE: f = "B" * elif t == NPY_SHORT: f = "h" */ case NPY_BYTE: __pyx_v_f = __pyx_k__b; break; /* "numpy.pxd":259 * raise ValueError(u"Non-native byte order not supported") * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" # <<<<<<<<<<<<<< * elif t == NPY_SHORT: f = "h" * elif t == NPY_USHORT: f = "H" */ case NPY_UBYTE: __pyx_v_f = __pyx_k__B; break; /* "numpy.pxd":260 * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" * elif t == NPY_SHORT: f = "h" # <<<<<<<<<<<<<< * elif t == NPY_USHORT: f = "H" * elif t == NPY_INT: f = "i" */ case NPY_SHORT: __pyx_v_f = __pyx_k__h; break; /* "numpy.pxd":261 * elif t == NPY_UBYTE: f = "B" * elif t == NPY_SHORT: f = "h" * elif t == NPY_USHORT: f = "H" # <<<<<<<<<<<<<< * elif t == NPY_INT: f = "i" * elif t == NPY_UINT: f = "I" */ case NPY_USHORT: __pyx_v_f = __pyx_k__H; break; /* "numpy.pxd":262 * elif t == NPY_SHORT: f = "h" * elif t == NPY_USHORT: f = "H" * elif t == NPY_INT: f = "i" # <<<<<<<<<<<<<< * elif t == NPY_UINT: f = "I" * elif t == NPY_LONG: f = "l" */ case NPY_INT: __pyx_v_f = __pyx_k__i; break; /* "numpy.pxd":263 * elif t == NPY_USHORT: f = "H" * elif t == NPY_INT: f = "i" * elif t == NPY_UINT: f = "I" # <<<<<<<<<<<<<< * elif t == NPY_LONG: f = "l" * elif t == NPY_ULONG: f = "L" */ case NPY_UINT: __pyx_v_f = __pyx_k__I; break; /* "numpy.pxd":264 * elif t == NPY_INT: f = "i" * elif t == NPY_UINT: f = "I" * elif t == NPY_LONG: f = "l" # <<<<<<<<<<<<<< * elif t == NPY_ULONG: f = "L" * elif t == NPY_LONGLONG: f = "q" */ case NPY_LONG: __pyx_v_f = __pyx_k__l; break; /* "numpy.pxd":265 * elif t == NPY_UINT: f = "I" * elif t == NPY_LONG: f = "l" * elif t == NPY_ULONG: f = "L" # <<<<<<<<<<<<<< * elif t == NPY_LONGLONG: f = "q" * elif t == NPY_ULONGLONG: f = "Q" */ case NPY_ULONG: __pyx_v_f = __pyx_k__L; break; /* "numpy.pxd":266 * elif t == NPY_LONG: f = "l" * elif t == NPY_ULONG: f = "L" * elif t == NPY_LONGLONG: f = "q" # <<<<<<<<<<<<<< * elif t == NPY_ULONGLONG: f = "Q" * elif t == NPY_FLOAT: f = "f" */ case NPY_LONGLONG: __pyx_v_f = __pyx_k__q; break; /* "numpy.pxd":267 * elif t == NPY_ULONG: f = "L" * elif t == NPY_LONGLONG: f = "q" * elif t == NPY_ULONGLONG: f = "Q" # <<<<<<<<<<<<<< * elif t == NPY_FLOAT: f = "f" * elif t == NPY_DOUBLE: f = "d" */ case NPY_ULONGLONG: __pyx_v_f = __pyx_k__Q; break; /* "numpy.pxd":268 * elif t == NPY_LONGLONG: f = "q" * elif t == NPY_ULONGLONG: f = "Q" * elif t == NPY_FLOAT: f = "f" # <<<<<<<<<<<<<< * elif t == NPY_DOUBLE: f = "d" * elif t == NPY_LONGDOUBLE: f = "g" */ case NPY_FLOAT: __pyx_v_f = __pyx_k__f; break; /* "numpy.pxd":269 * elif t == NPY_ULONGLONG: f = "Q" * elif t == NPY_FLOAT: f = "f" * elif t == NPY_DOUBLE: f = "d" # <<<<<<<<<<<<<< * elif t == NPY_LONGDOUBLE: f = "g" * elif t == NPY_CFLOAT: f = "Zf" */ case NPY_DOUBLE: __pyx_v_f = __pyx_k__d; break; /* "numpy.pxd":270 * elif t == NPY_FLOAT: f = "f" * elif t == NPY_DOUBLE: f = "d" * elif t == NPY_LONGDOUBLE: f = "g" # <<<<<<<<<<<<<< * elif t == NPY_CFLOAT: f = "Zf" * elif t == NPY_CDOUBLE: f = "Zd" */ case NPY_LONGDOUBLE: __pyx_v_f = __pyx_k__g; break; /* "numpy.pxd":271 * elif t == NPY_DOUBLE: f = "d" * elif t == NPY_LONGDOUBLE: f = "g" * elif t == NPY_CFLOAT: f = "Zf" # <<<<<<<<<<<<<< * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" */ case NPY_CFLOAT: __pyx_v_f = __pyx_k__Zf; break; /* "numpy.pxd":272 * elif t == NPY_LONGDOUBLE: f = "g" * elif t == NPY_CFLOAT: f = "Zf" * elif t == NPY_CDOUBLE: f = "Zd" # <<<<<<<<<<<<<< * elif t == NPY_CLONGDOUBLE: f = "Zg" * elif t == NPY_OBJECT: f = "O" */ case NPY_CDOUBLE: __pyx_v_f = __pyx_k__Zd; break; /* "numpy.pxd":273 * elif t == NPY_CFLOAT: f = "Zf" * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" # <<<<<<<<<<<<<< * elif t == NPY_OBJECT: f = "O" * else: */ case NPY_CLONGDOUBLE: __pyx_v_f = __pyx_k__Zg; break; /* "numpy.pxd":274 * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) */ case NPY_OBJECT: __pyx_v_f = __pyx_k__O; break; default: /* "numpy.pxd":276 * elif t == NPY_OBJECT: f = "O" * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< * info.format = f * return */ __pyx_t_4 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_59), __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_8)); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_8)); __Pyx_GIVEREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __pyx_t_8 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} break; } /* "numpy.pxd":277 * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) * info.format = f # <<<<<<<<<<<<<< * return * else: */ __pyx_v_info->format = __pyx_v_f; /* "numpy.pxd":278 * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) * info.format = f * return # <<<<<<<<<<<<<< * else: * info.format = stdlib.malloc(_buffer_format_string_len) */ __pyx_r = 0; goto __pyx_L0; goto __pyx_L11; } /*else*/ { /* "numpy.pxd":280 * return * else: * info.format = stdlib.malloc(_buffer_format_string_len) # <<<<<<<<<<<<<< * info.format[0] = c'^' # Native data types, manual alignment * offset = 0 */ __pyx_v_info->format = ((char *)malloc(255)); /* "numpy.pxd":281 * else: * info.format = stdlib.malloc(_buffer_format_string_len) * info.format[0] = c'^' # Native data types, manual alignment # <<<<<<<<<<<<<< * offset = 0 * f = _util_dtypestring(descr, info.format + 1, */ (__pyx_v_info->format[0]) = '^'; /* "numpy.pxd":282 * info.format = stdlib.malloc(_buffer_format_string_len) * info.format[0] = c'^' # Native data types, manual alignment * offset = 0 # <<<<<<<<<<<<<< * f = _util_dtypestring(descr, info.format + 1, * info.format + _buffer_format_string_len, */ __pyx_v_offset = 0; /* "numpy.pxd":285 * f = _util_dtypestring(descr, info.format + 1, * info.format + _buffer_format_string_len, * &offset) # <<<<<<<<<<<<<< * f[0] = c'\0' # Terminate format string * */ __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_f = __pyx_t_9; /* "numpy.pxd":286 * info.format + _buffer_format_string_len, * &offset) * f[0] = c'\0' # Terminate format string # <<<<<<<<<<<<<< * * def __releasebuffer__(ndarray self, Py_buffer* info): */ (__pyx_v_f[0]) = '\x00'; } __pyx_L11:; __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) { __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL; } goto __pyx_L2; __pyx_L0:; if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) { __Pyx_GOTREF(Py_None); __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL; } __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_descr); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/ static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0); __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info)); __Pyx_RefNannyFinishContext(); } /* "numpy.pxd":288 * f[0] = c'\0' # Terminate format string * * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< * if PyArray_HASFIELDS(self): * stdlib.free(info.format) */ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) { __Pyx_RefNannyDeclarations int __pyx_t_1; __Pyx_RefNannySetupContext("__releasebuffer__", 0); /* "numpy.pxd":289 * * def __releasebuffer__(ndarray self, Py_buffer* info): * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< * stdlib.free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): */ __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0); if (__pyx_t_1) { /* "numpy.pxd":290 * def __releasebuffer__(ndarray self, Py_buffer* info): * if PyArray_HASFIELDS(self): * stdlib.free(info.format) # <<<<<<<<<<<<<< * if sizeof(npy_intp) != sizeof(Py_ssize_t): * stdlib.free(info.strides) */ free(__pyx_v_info->format); goto __pyx_L3; } __pyx_L3:; /* "numpy.pxd":291 * if PyArray_HASFIELDS(self): * stdlib.free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< * stdlib.free(info.strides) * # info.shape was stored after info.strides in the same block */ __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); if (__pyx_t_1) { /* "numpy.pxd":292 * stdlib.free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): * stdlib.free(info.strides) # <<<<<<<<<<<<<< * # info.shape was stored after info.strides in the same block * */ free(__pyx_v_info->strides); goto __pyx_L4; } __pyx_L4:; __Pyx_RefNannyFinishContext(); } /* "numpy.pxd":768 * ctypedef npy_cdouble complex_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(1, a) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0); /* "numpy.pxd":769 * * cdef inline object PyArray_MultiIterNew1(a): * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew2(a, b): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":771 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(2, a, b) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0); /* "numpy.pxd":772 * * cdef inline object PyArray_MultiIterNew2(a, b): * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew3(a, b, c): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":774 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(3, a, b, c) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0); /* "numpy.pxd":775 * * cdef inline object PyArray_MultiIterNew3(a, b, c): * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":777 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(4, a, b, c, d) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0); /* "numpy.pxd":778 * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":780 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(5, a, b, c, d, e) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0); /* "numpy.pxd":781 * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< * * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":783 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< * # Recursive utility function used in __getbuffer__ to get format * # string. The new location in the format string is returned. */ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) { PyArray_Descr *__pyx_v_child = 0; int __pyx_v_endian_detector; int __pyx_v_little_endian; PyObject *__pyx_v_fields = 0; PyObject *__pyx_v_childname = NULL; PyObject *__pyx_v_new_offset = NULL; PyObject *__pyx_v_t = NULL; char *__pyx_r; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; Py_ssize_t __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *(*__pyx_t_6)(PyObject *); int __pyx_t_7; int __pyx_t_8; int __pyx_t_9; int __pyx_t_10; long __pyx_t_11; char *__pyx_t_12; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_util_dtypestring", 0); /* "numpy.pxd":790 * cdef int delta_offset * cdef tuple i * cdef int endian_detector = 1 # <<<<<<<<<<<<<< * cdef bint little_endian = ((&endian_detector)[0] != 0) * cdef tuple fields */ __pyx_v_endian_detector = 1; /* "numpy.pxd":791 * cdef tuple i * cdef int endian_detector = 1 * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< * cdef tuple fields * */ __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); /* "numpy.pxd":794 * cdef tuple fields * * for childname in descr.names: # <<<<<<<<<<<<<< * fields = descr.fields[childname] * child, new_offset = fields */ if (unlikely(((PyObject *)__pyx_v_descr->names) == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_1 = ((PyObject *)__pyx_v_descr->names); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; for (;;) { if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3); __pyx_t_3 = 0; /* "numpy.pxd":795 * * for childname in descr.names: * fields = descr.fields[childname] # <<<<<<<<<<<<<< * child, new_offset = fields * */ __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (!__pyx_t_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0; /* "numpy.pxd":796 * for childname in descr.names: * fields = descr.fields[childname] * child, new_offset = fields # <<<<<<<<<<<<<< * * if (end - f) - (new_offset - offset[0]) < 15: */ if (likely(PyTuple_CheckExact(((PyObject *)__pyx_v_fields)))) { PyObject* sequence = ((PyObject *)__pyx_v_fields); #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); #else __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); #endif } else if (1) { __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else { Py_ssize_t index = -1; __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_fields)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = NULL; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L6_unpacking_done:; } if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_XDECREF_SET(__pyx_v_child, ((PyArray_Descr *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4); __pyx_t_4 = 0; /* "numpy.pxd":798 * child, new_offset = fields * * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") * */ __pyx_t_4 = PyInt_FromLong((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { /* "numpy.pxd":799 * * if (end - f) - (new_offset - offset[0]) < 15: * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< * * if ((child.byteorder == c'>' and little_endian) or */ __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_61), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; /* "numpy.pxd":801 * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") * * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< * (child.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") */ __pyx_t_7 = ((__pyx_v_child->byteorder == '>') != 0); if (__pyx_t_7) { __pyx_t_8 = (__pyx_v_little_endian != 0); } else { __pyx_t_8 = __pyx_t_7; } if (!__pyx_t_8) { /* "numpy.pxd":802 * * if ((child.byteorder == c'>' and little_endian) or * (child.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< * raise ValueError(u"Non-native byte order not supported") * # One could encode it in the format string and have Cython */ __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0); if (__pyx_t_7) { __pyx_t_9 = ((!(__pyx_v_little_endian != 0)) != 0); __pyx_t_10 = __pyx_t_9; } else { __pyx_t_10 = __pyx_t_7; } __pyx_t_7 = __pyx_t_10; } else { __pyx_t_7 = __pyx_t_8; } if (__pyx_t_7) { /* "numpy.pxd":803 * if ((child.byteorder == c'>' and little_endian) or * (child.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * # One could encode it in the format string and have Cython * # complain instead, BUT: < and > in format strings also imply */ __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_62), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; /* "numpy.pxd":813 * * # Output padding bytes * while offset[0] < new_offset: # <<<<<<<<<<<<<< * f[0] = 120 # "x"; pad byte * f += 1 */ while (1) { __pyx_t_5 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_7) break; /* "numpy.pxd":814 * # Output padding bytes * while offset[0] < new_offset: * f[0] = 120 # "x"; pad byte # <<<<<<<<<<<<<< * f += 1 * offset[0] += 1 */ (__pyx_v_f[0]) = 120; /* "numpy.pxd":815 * while offset[0] < new_offset: * f[0] = 120 # "x"; pad byte * f += 1 # <<<<<<<<<<<<<< * offset[0] += 1 * */ __pyx_v_f = (__pyx_v_f + 1); /* "numpy.pxd":816 * f[0] = 120 # "x"; pad byte * f += 1 * offset[0] += 1 # <<<<<<<<<<<<<< * * offset[0] += child.itemsize */ __pyx_t_11 = 0; (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + 1); } /* "numpy.pxd":818 * offset[0] += 1 * * offset[0] += child.itemsize # <<<<<<<<<<<<<< * * if not PyDataType_HASFIELDS(child): */ __pyx_t_11 = 0; (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + __pyx_v_child->elsize); /* "numpy.pxd":820 * offset[0] += child.itemsize * * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< * t = child.type_num * if end - f < 5: */ __pyx_t_7 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0); if (__pyx_t_7) { /* "numpy.pxd":821 * * if not PyDataType_HASFIELDS(child): * t = child.type_num # <<<<<<<<<<<<<< * if end - f < 5: * raise RuntimeError(u"Format string allocated too short.") */ __pyx_t_3 = PyInt_FromLong(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_3); __pyx_t_3 = 0; /* "numpy.pxd":822 * if not PyDataType_HASFIELDS(child): * t = child.type_num * if end - f < 5: # <<<<<<<<<<<<<< * raise RuntimeError(u"Format string allocated too short.") * */ __pyx_t_7 = (((__pyx_v_end - __pyx_v_f) < 5) != 0); if (__pyx_t_7) { /* "numpy.pxd":823 * t = child.type_num * if end - f < 5: * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< * * # Until ticket #99 is fixed, use integers to avoid warnings */ __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_64), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L12; } __pyx_L12:; /* "numpy.pxd":826 * * # Until ticket #99 is fixed, use integers to avoid warnings * if t == NPY_BYTE: f[0] = 98 #"b" # <<<<<<<<<<<<<< * elif t == NPY_UBYTE: f[0] = 66 #"B" * elif t == NPY_SHORT: f[0] = 104 #"h" */ __pyx_t_3 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 98; goto __pyx_L13; } /* "numpy.pxd":827 * # Until ticket #99 is fixed, use integers to avoid warnings * if t == NPY_BYTE: f[0] = 98 #"b" * elif t == NPY_UBYTE: f[0] = 66 #"B" # <<<<<<<<<<<<<< * elif t == NPY_SHORT: f[0] = 104 #"h" * elif t == NPY_USHORT: f[0] = 72 #"H" */ __pyx_t_5 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 66; goto __pyx_L13; } /* "numpy.pxd":828 * if t == NPY_BYTE: f[0] = 98 #"b" * elif t == NPY_UBYTE: f[0] = 66 #"B" * elif t == NPY_SHORT: f[0] = 104 #"h" # <<<<<<<<<<<<<< * elif t == NPY_USHORT: f[0] = 72 #"H" * elif t == NPY_INT: f[0] = 105 #"i" */ __pyx_t_3 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 104; goto __pyx_L13; } /* "numpy.pxd":829 * elif t == NPY_UBYTE: f[0] = 66 #"B" * elif t == NPY_SHORT: f[0] = 104 #"h" * elif t == NPY_USHORT: f[0] = 72 #"H" # <<<<<<<<<<<<<< * elif t == NPY_INT: f[0] = 105 #"i" * elif t == NPY_UINT: f[0] = 73 #"I" */ __pyx_t_5 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 72; goto __pyx_L13; } /* "numpy.pxd":830 * elif t == NPY_SHORT: f[0] = 104 #"h" * elif t == NPY_USHORT: f[0] = 72 #"H" * elif t == NPY_INT: f[0] = 105 #"i" # <<<<<<<<<<<<<< * elif t == NPY_UINT: f[0] = 73 #"I" * elif t == NPY_LONG: f[0] = 108 #"l" */ __pyx_t_3 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 105; goto __pyx_L13; } /* "numpy.pxd":831 * elif t == NPY_USHORT: f[0] = 72 #"H" * elif t == NPY_INT: f[0] = 105 #"i" * elif t == NPY_UINT: f[0] = 73 #"I" # <<<<<<<<<<<<<< * elif t == NPY_LONG: f[0] = 108 #"l" * elif t == NPY_ULONG: f[0] = 76 #"L" */ __pyx_t_5 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 73; goto __pyx_L13; } /* "numpy.pxd":832 * elif t == NPY_INT: f[0] = 105 #"i" * elif t == NPY_UINT: f[0] = 73 #"I" * elif t == NPY_LONG: f[0] = 108 #"l" # <<<<<<<<<<<<<< * elif t == NPY_ULONG: f[0] = 76 #"L" * elif t == NPY_LONGLONG: f[0] = 113 #"q" */ __pyx_t_3 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 108; goto __pyx_L13; } /* "numpy.pxd":833 * elif t == NPY_UINT: f[0] = 73 #"I" * elif t == NPY_LONG: f[0] = 108 #"l" * elif t == NPY_ULONG: f[0] = 76 #"L" # <<<<<<<<<<<<<< * elif t == NPY_LONGLONG: f[0] = 113 #"q" * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" */ __pyx_t_5 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 76; goto __pyx_L13; } /* "numpy.pxd":834 * elif t == NPY_LONG: f[0] = 108 #"l" * elif t == NPY_ULONG: f[0] = 76 #"L" * elif t == NPY_LONGLONG: f[0] = 113 #"q" # <<<<<<<<<<<<<< * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" * elif t == NPY_FLOAT: f[0] = 102 #"f" */ __pyx_t_3 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 113; goto __pyx_L13; } /* "numpy.pxd":835 * elif t == NPY_ULONG: f[0] = 76 #"L" * elif t == NPY_LONGLONG: f[0] = 113 #"q" * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" # <<<<<<<<<<<<<< * elif t == NPY_FLOAT: f[0] = 102 #"f" * elif t == NPY_DOUBLE: f[0] = 100 #"d" */ __pyx_t_5 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 81; goto __pyx_L13; } /* "numpy.pxd":836 * elif t == NPY_LONGLONG: f[0] = 113 #"q" * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" * elif t == NPY_FLOAT: f[0] = 102 #"f" # <<<<<<<<<<<<<< * elif t == NPY_DOUBLE: f[0] = 100 #"d" * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" */ __pyx_t_3 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 102; goto __pyx_L13; } /* "numpy.pxd":837 * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" * elif t == NPY_FLOAT: f[0] = 102 #"f" * elif t == NPY_DOUBLE: f[0] = 100 #"d" # <<<<<<<<<<<<<< * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf */ __pyx_t_5 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 100; goto __pyx_L13; } /* "numpy.pxd":838 * elif t == NPY_FLOAT: f[0] = 102 #"f" * elif t == NPY_DOUBLE: f[0] = 100 #"d" * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" # <<<<<<<<<<<<<< * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd */ __pyx_t_3 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 103; goto __pyx_L13; } /* "numpy.pxd":839 * elif t == NPY_DOUBLE: f[0] = 100 #"d" * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf # <<<<<<<<<<<<<< * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg */ __pyx_t_5 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 90; (__pyx_v_f[1]) = 102; __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L13; } /* "numpy.pxd":840 * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd # <<<<<<<<<<<<<< * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg * elif t == NPY_OBJECT: f[0] = 79 #"O" */ __pyx_t_3 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 90; (__pyx_v_f[1]) = 100; __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L13; } /* "numpy.pxd":841 * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg # <<<<<<<<<<<<<< * elif t == NPY_OBJECT: f[0] = 79 #"O" * else: */ __pyx_t_5 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 90; (__pyx_v_f[1]) = 103; __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L13; } /* "numpy.pxd":842 * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg * elif t == NPY_OBJECT: f[0] = 79 #"O" # <<<<<<<<<<<<<< * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) */ __pyx_t_3 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 79; goto __pyx_L13; } /*else*/ { /* "numpy.pxd":844 * elif t == NPY_OBJECT: f[0] = 79 #"O" * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< * f += 1 * else: */ __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_59), __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_5)); __Pyx_GIVEREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L13:; /* "numpy.pxd":845 * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) * f += 1 # <<<<<<<<<<<<<< * else: * # Cython ignores struct boundary information ("T{...}"), */ __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L11; } /*else*/ { /* "numpy.pxd":849 * # Cython ignores struct boundary information ("T{...}"), * # so don't output it * f = _util_dtypestring(child, f, end, offset) # <<<<<<<<<<<<<< * return f * */ __pyx_t_12 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_12 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_f = __pyx_t_12; } __pyx_L11:; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "numpy.pxd":850 * # so don't output it * f = _util_dtypestring(child, f, end, offset) * return f # <<<<<<<<<<<<<< * * */ __pyx_r = __pyx_v_f; goto __pyx_L0; __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_child); __Pyx_XDECREF(__pyx_v_fields); __Pyx_XDECREF(__pyx_v_childname); __Pyx_XDECREF(__pyx_v_new_offset); __Pyx_XDECREF(__pyx_v_t); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":965 * * * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< * cdef PyObject* baseptr * if base is None: */ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { PyObject *__pyx_v_baseptr; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; __Pyx_RefNannySetupContext("set_array_base", 0); /* "numpy.pxd":967 * cdef inline void set_array_base(ndarray arr, object base): * cdef PyObject* baseptr * if base is None: # <<<<<<<<<<<<<< * baseptr = NULL * else: */ __pyx_t_1 = (__pyx_v_base == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "numpy.pxd":968 * cdef PyObject* baseptr * if base is None: * baseptr = NULL # <<<<<<<<<<<<<< * else: * Py_INCREF(base) # important to do this before decref below! */ __pyx_v_baseptr = NULL; goto __pyx_L3; } /*else*/ { /* "numpy.pxd":970 * baseptr = NULL * else: * Py_INCREF(base) # important to do this before decref below! # <<<<<<<<<<<<<< * baseptr = base * Py_XDECREF(arr.base) */ Py_INCREF(__pyx_v_base); /* "numpy.pxd":971 * else: * Py_INCREF(base) # important to do this before decref below! * baseptr = base # <<<<<<<<<<<<<< * Py_XDECREF(arr.base) * arr.base = baseptr */ __pyx_v_baseptr = ((PyObject *)__pyx_v_base); } __pyx_L3:; /* "numpy.pxd":972 * Py_INCREF(base) # important to do this before decref below! * baseptr = base * Py_XDECREF(arr.base) # <<<<<<<<<<<<<< * arr.base = baseptr * */ Py_XDECREF(__pyx_v_arr->base); /* "numpy.pxd":973 * baseptr = base * Py_XDECREF(arr.base) * arr.base = baseptr # <<<<<<<<<<<<<< * * cdef inline object get_array_base(ndarray arr): */ __pyx_v_arr->base = __pyx_v_baseptr; __Pyx_RefNannyFinishContext(); } /* "numpy.pxd":975 * arr.base = baseptr * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< * if arr.base is NULL: * return None */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; __Pyx_RefNannySetupContext("get_array_base", 0); /* "numpy.pxd":976 * * cdef inline object get_array_base(ndarray arr): * if arr.base is NULL: # <<<<<<<<<<<<<< * return None * else: */ __pyx_t_1 = ((__pyx_v_arr->base == NULL) != 0); if (__pyx_t_1) { /* "numpy.pxd":977 * cdef inline object get_array_base(ndarray arr): * if arr.base is NULL: * return None # <<<<<<<<<<<<<< * else: * return arr.base */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_None); __pyx_r = Py_None; goto __pyx_L0; goto __pyx_L3; } /*else*/ { /* "numpy.pxd":979 * return None * else: * return arr.base # <<<<<<<<<<<<<< */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_arr->base)); __pyx_r = ((PyObject *)__pyx_v_arr->base); goto __pyx_L0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyMethodDef __pyx_methods[] = { {0, 0, 0, 0} }; #if PY_MAJOR_VERSION >= 3 static struct PyModuleDef __pyx_moduledef = { #if PY_VERSION_HEX < 0x03020000 { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, #else PyModuleDef_HEAD_INIT, #endif __Pyx_NAMESTR("notimplemented"), 0, /* m_doc */ -1, /* m_size */ __pyx_methods /* m_methods */, NULL, /* m_reload */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL /* m_free */ }; #endif static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_kp_u_1000, __pyx_k_1000, sizeof(__pyx_k_1000), 0, 1, 0, 0}, {&__pyx_kp_u_1001, __pyx_k_1001, sizeof(__pyx_k_1001), 0, 1, 0, 0}, {&__pyx_kp_u_1002, __pyx_k_1002, sizeof(__pyx_k_1002), 0, 1, 0, 0}, {&__pyx_kp_u_1003, __pyx_k_1003, sizeof(__pyx_k_1003), 0, 1, 0, 0}, {&__pyx_kp_u_1004, __pyx_k_1004, sizeof(__pyx_k_1004), 0, 1, 0, 0}, {&__pyx_kp_u_1005, __pyx_k_1005, sizeof(__pyx_k_1005), 0, 1, 0, 0}, {&__pyx_kp_u_1006, __pyx_k_1006, sizeof(__pyx_k_1006), 0, 1, 0, 0}, {&__pyx_kp_u_1007, __pyx_k_1007, sizeof(__pyx_k_1007), 0, 1, 0, 0}, {&__pyx_kp_u_1008, __pyx_k_1008, sizeof(__pyx_k_1008), 0, 1, 0, 0}, {&__pyx_kp_u_1009, __pyx_k_1009, sizeof(__pyx_k_1009), 0, 1, 0, 0}, {&__pyx_kp_u_1010, __pyx_k_1010, sizeof(__pyx_k_1010), 0, 1, 0, 0}, {&__pyx_kp_u_1011, __pyx_k_1011, sizeof(__pyx_k_1011), 0, 1, 0, 0}, {&__pyx_kp_u_1012, __pyx_k_1012, sizeof(__pyx_k_1012), 0, 1, 0, 0}, {&__pyx_kp_u_1013, __pyx_k_1013, sizeof(__pyx_k_1013), 0, 1, 0, 0}, {&__pyx_kp_u_1014, __pyx_k_1014, sizeof(__pyx_k_1014), 0, 1, 0, 0}, {&__pyx_kp_u_1015, __pyx_k_1015, sizeof(__pyx_k_1015), 0, 1, 0, 0}, {&__pyx_kp_u_1016, __pyx_k_1016, sizeof(__pyx_k_1016), 0, 1, 0, 0}, {&__pyx_kp_u_1017, __pyx_k_1017, sizeof(__pyx_k_1017), 0, 1, 0, 0}, {&__pyx_kp_u_1018, __pyx_k_1018, sizeof(__pyx_k_1018), 0, 1, 0, 0}, {&__pyx_kp_u_1019, __pyx_k_1019, sizeof(__pyx_k_1019), 0, 1, 0, 0}, {&__pyx_kp_u_1020, __pyx_k_1020, sizeof(__pyx_k_1020), 0, 1, 0, 0}, {&__pyx_kp_u_1021, __pyx_k_1021, sizeof(__pyx_k_1021), 0, 1, 0, 0}, {&__pyx_kp_u_1022, __pyx_k_1022, sizeof(__pyx_k_1022), 0, 1, 0, 0}, {&__pyx_kp_u_1023, __pyx_k_1023, sizeof(__pyx_k_1023), 0, 1, 0, 0}, {&__pyx_kp_u_1024, __pyx_k_1024, sizeof(__pyx_k_1024), 0, 1, 0, 0}, {&__pyx_kp_u_1025, __pyx_k_1025, sizeof(__pyx_k_1025), 0, 1, 0, 0}, {&__pyx_kp_u_1026, __pyx_k_1026, sizeof(__pyx_k_1026), 0, 1, 0, 0}, {&__pyx_kp_u_1027, __pyx_k_1027, sizeof(__pyx_k_1027), 0, 1, 0, 0}, {&__pyx_kp_u_1028, __pyx_k_1028, sizeof(__pyx_k_1028), 0, 1, 0, 0}, {&__pyx_kp_u_1029, __pyx_k_1029, sizeof(__pyx_k_1029), 0, 1, 0, 0}, {&__pyx_kp_u_1030, __pyx_k_1030, sizeof(__pyx_k_1030), 0, 1, 0, 0}, {&__pyx_kp_u_1031, __pyx_k_1031, sizeof(__pyx_k_1031), 0, 1, 0, 0}, {&__pyx_kp_u_1032, __pyx_k_1032, sizeof(__pyx_k_1032), 0, 1, 0, 0}, {&__pyx_kp_u_1033, __pyx_k_1033, sizeof(__pyx_k_1033), 0, 1, 0, 0}, {&__pyx_kp_u_1034, __pyx_k_1034, sizeof(__pyx_k_1034), 0, 1, 0, 0}, {&__pyx_kp_u_1035, __pyx_k_1035, sizeof(__pyx_k_1035), 0, 1, 0, 0}, {&__pyx_kp_u_1036, __pyx_k_1036, sizeof(__pyx_k_1036), 0, 1, 0, 0}, {&__pyx_kp_u_1037, __pyx_k_1037, sizeof(__pyx_k_1037), 0, 1, 0, 0}, {&__pyx_kp_s_16, __pyx_k_16, sizeof(__pyx_k_16), 0, 0, 1, 0}, {&__pyx_kp_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 0}, {&__pyx_n_s_212, __pyx_k_212, sizeof(__pyx_k_212), 0, 0, 1, 1}, {&__pyx_n_s_245, __pyx_k_245, sizeof(__pyx_k_245), 0, 0, 1, 1}, {&__pyx_kp_s_42, __pyx_k_42, sizeof(__pyx_k_42), 0, 0, 1, 0}, {&__pyx_kp_s_43, __pyx_k_43, sizeof(__pyx_k_43), 0, 0, 1, 0}, {&__pyx_kp_s_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 0, 1, 0}, {&__pyx_kp_u_53, __pyx_k_53, sizeof(__pyx_k_53), 0, 1, 0, 0}, {&__pyx_kp_u_55, __pyx_k_55, sizeof(__pyx_k_55), 0, 1, 0, 0}, {&__pyx_kp_u_57, __pyx_k_57, sizeof(__pyx_k_57), 0, 1, 0, 0}, {&__pyx_kp_u_582, __pyx_k_582, sizeof(__pyx_k_582), 0, 1, 0, 0}, {&__pyx_kp_u_583, __pyx_k_583, sizeof(__pyx_k_583), 0, 1, 0, 0}, {&__pyx_kp_u_584, __pyx_k_584, sizeof(__pyx_k_584), 0, 1, 0, 0}, {&__pyx_kp_u_585, __pyx_k_585, sizeof(__pyx_k_585), 0, 1, 0, 0}, {&__pyx_kp_u_586, __pyx_k_586, sizeof(__pyx_k_586), 0, 1, 0, 0}, {&__pyx_kp_u_587, __pyx_k_587, sizeof(__pyx_k_587), 0, 1, 0, 0}, {&__pyx_kp_u_588, __pyx_k_588, sizeof(__pyx_k_588), 0, 1, 0, 0}, {&__pyx_kp_u_589, __pyx_k_589, sizeof(__pyx_k_589), 0, 1, 0, 0}, {&__pyx_kp_u_59, __pyx_k_59, sizeof(__pyx_k_59), 0, 1, 0, 0}, {&__pyx_kp_u_590, __pyx_k_590, sizeof(__pyx_k_590), 0, 1, 0, 0}, {&__pyx_kp_u_591, __pyx_k_591, sizeof(__pyx_k_591), 0, 1, 0, 0}, {&__pyx_kp_u_592, __pyx_k_592, sizeof(__pyx_k_592), 0, 1, 0, 0}, {&__pyx_kp_u_593, __pyx_k_593, sizeof(__pyx_k_593), 0, 1, 0, 0}, {&__pyx_kp_u_594, __pyx_k_594, sizeof(__pyx_k_594), 0, 1, 0, 0}, {&__pyx_kp_u_595, __pyx_k_595, sizeof(__pyx_k_595), 0, 1, 0, 0}, {&__pyx_kp_u_596, __pyx_k_596, sizeof(__pyx_k_596), 0, 1, 0, 0}, {&__pyx_kp_u_597, __pyx_k_597, sizeof(__pyx_k_597), 0, 1, 0, 0}, {&__pyx_kp_u_598, __pyx_k_598, sizeof(__pyx_k_598), 0, 1, 0, 0}, {&__pyx_kp_u_599, __pyx_k_599, sizeof(__pyx_k_599), 0, 1, 0, 0}, {&__pyx_kp_s_6, __pyx_k_6, sizeof(__pyx_k_6), 0, 0, 1, 0}, {&__pyx_kp_u_60, __pyx_k_60, sizeof(__pyx_k_60), 0, 1, 0, 0}, {&__pyx_kp_u_600, __pyx_k_600, sizeof(__pyx_k_600), 0, 1, 0, 0}, {&__pyx_kp_u_601, __pyx_k_601, sizeof(__pyx_k_601), 0, 1, 0, 0}, {&__pyx_kp_u_602, __pyx_k_602, sizeof(__pyx_k_602), 0, 1, 0, 0}, {&__pyx_kp_u_603, __pyx_k_603, sizeof(__pyx_k_603), 0, 1, 0, 0}, {&__pyx_kp_u_604, __pyx_k_604, sizeof(__pyx_k_604), 0, 1, 0, 0}, {&__pyx_kp_u_605, __pyx_k_605, sizeof(__pyx_k_605), 0, 1, 0, 0}, {&__pyx_kp_u_606, __pyx_k_606, sizeof(__pyx_k_606), 0, 1, 0, 0}, {&__pyx_kp_u_607, __pyx_k_607, sizeof(__pyx_k_607), 0, 1, 0, 0}, {&__pyx_kp_u_608, __pyx_k_608, sizeof(__pyx_k_608), 0, 1, 0, 0}, {&__pyx_kp_u_609, __pyx_k_609, sizeof(__pyx_k_609), 0, 1, 0, 0}, {&__pyx_kp_u_610, __pyx_k_610, sizeof(__pyx_k_610), 0, 1, 0, 0}, {&__pyx_kp_u_611, __pyx_k_611, sizeof(__pyx_k_611), 0, 1, 0, 0}, {&__pyx_kp_u_612, __pyx_k_612, sizeof(__pyx_k_612), 0, 1, 0, 0}, {&__pyx_kp_u_613, __pyx_k_613, sizeof(__pyx_k_613), 0, 1, 0, 0}, {&__pyx_kp_u_614, __pyx_k_614, sizeof(__pyx_k_614), 0, 1, 0, 0}, {&__pyx_kp_u_615, __pyx_k_615, sizeof(__pyx_k_615), 0, 1, 0, 0}, {&__pyx_kp_u_616, __pyx_k_616, sizeof(__pyx_k_616), 0, 1, 0, 0}, {&__pyx_kp_u_617, __pyx_k_617, sizeof(__pyx_k_617), 0, 1, 0, 0}, {&__pyx_kp_u_618, __pyx_k_618, sizeof(__pyx_k_618), 0, 1, 0, 0}, {&__pyx_kp_u_619, __pyx_k_619, sizeof(__pyx_k_619), 0, 1, 0, 0}, {&__pyx_kp_u_620, __pyx_k_620, sizeof(__pyx_k_620), 0, 1, 0, 0}, {&__pyx_kp_u_621, __pyx_k_621, sizeof(__pyx_k_621), 0, 1, 0, 0}, {&__pyx_kp_u_622, __pyx_k_622, sizeof(__pyx_k_622), 0, 1, 0, 0}, {&__pyx_kp_u_623, __pyx_k_623, sizeof(__pyx_k_623), 0, 1, 0, 0}, {&__pyx_kp_u_624, __pyx_k_624, sizeof(__pyx_k_624), 0, 1, 0, 0}, {&__pyx_kp_u_625, __pyx_k_625, sizeof(__pyx_k_625), 0, 1, 0, 0}, {&__pyx_kp_u_626, __pyx_k_626, sizeof(__pyx_k_626), 0, 1, 0, 0}, {&__pyx_kp_u_627, __pyx_k_627, sizeof(__pyx_k_627), 0, 1, 0, 0}, {&__pyx_kp_u_628, __pyx_k_628, sizeof(__pyx_k_628), 0, 1, 0, 0}, {&__pyx_kp_u_629, __pyx_k_629, sizeof(__pyx_k_629), 0, 1, 0, 0}, {&__pyx_kp_u_63, __pyx_k_63, sizeof(__pyx_k_63), 0, 1, 0, 0}, {&__pyx_kp_u_630, __pyx_k_630, sizeof(__pyx_k_630), 0, 1, 0, 0}, {&__pyx_kp_u_631, __pyx_k_631, sizeof(__pyx_k_631), 0, 1, 0, 0}, {&__pyx_kp_u_632, __pyx_k_632, sizeof(__pyx_k_632), 0, 1, 0, 0}, {&__pyx_kp_u_633, __pyx_k_633, sizeof(__pyx_k_633), 0, 1, 0, 0}, {&__pyx_kp_u_634, __pyx_k_634, sizeof(__pyx_k_634), 0, 1, 0, 0}, {&__pyx_kp_u_635, __pyx_k_635, sizeof(__pyx_k_635), 0, 1, 0, 0}, {&__pyx_kp_u_636, __pyx_k_636, sizeof(__pyx_k_636), 0, 1, 0, 0}, {&__pyx_kp_u_637, __pyx_k_637, sizeof(__pyx_k_637), 0, 1, 0, 0}, {&__pyx_kp_u_638, __pyx_k_638, sizeof(__pyx_k_638), 0, 1, 0, 0}, {&__pyx_kp_u_639, __pyx_k_639, sizeof(__pyx_k_639), 0, 1, 0, 0}, {&__pyx_kp_u_640, __pyx_k_640, sizeof(__pyx_k_640), 0, 1, 0, 0}, {&__pyx_kp_u_641, __pyx_k_641, sizeof(__pyx_k_641), 0, 1, 0, 0}, {&__pyx_kp_u_642, __pyx_k_642, sizeof(__pyx_k_642), 0, 1, 0, 0}, {&__pyx_kp_u_643, __pyx_k_643, sizeof(__pyx_k_643), 0, 1, 0, 0}, {&__pyx_kp_u_644, __pyx_k_644, sizeof(__pyx_k_644), 0, 1, 0, 0}, {&__pyx_kp_u_645, __pyx_k_645, sizeof(__pyx_k_645), 0, 1, 0, 0}, {&__pyx_kp_u_646, __pyx_k_646, sizeof(__pyx_k_646), 0, 1, 0, 0}, {&__pyx_kp_u_647, __pyx_k_647, sizeof(__pyx_k_647), 0, 1, 0, 0}, {&__pyx_kp_u_648, __pyx_k_648, sizeof(__pyx_k_648), 0, 1, 0, 0}, {&__pyx_kp_u_649, __pyx_k_649, sizeof(__pyx_k_649), 0, 1, 0, 0}, {&__pyx_kp_u_650, __pyx_k_650, sizeof(__pyx_k_650), 0, 1, 0, 0}, {&__pyx_kp_u_651, __pyx_k_651, sizeof(__pyx_k_651), 0, 1, 0, 0}, {&__pyx_kp_u_652, __pyx_k_652, sizeof(__pyx_k_652), 0, 1, 0, 0}, {&__pyx_kp_u_653, __pyx_k_653, sizeof(__pyx_k_653), 0, 1, 0, 0}, {&__pyx_kp_u_654, __pyx_k_654, sizeof(__pyx_k_654), 0, 1, 0, 0}, {&__pyx_kp_u_655, __pyx_k_655, sizeof(__pyx_k_655), 0, 1, 0, 0}, {&__pyx_kp_u_656, __pyx_k_656, sizeof(__pyx_k_656), 0, 1, 0, 0}, {&__pyx_kp_u_657, __pyx_k_657, sizeof(__pyx_k_657), 0, 1, 0, 0}, {&__pyx_kp_u_658, __pyx_k_658, sizeof(__pyx_k_658), 0, 1, 0, 0}, {&__pyx_kp_u_659, __pyx_k_659, sizeof(__pyx_k_659), 0, 1, 0, 0}, {&__pyx_kp_u_660, __pyx_k_660, sizeof(__pyx_k_660), 0, 1, 0, 0}, {&__pyx_kp_u_661, __pyx_k_661, sizeof(__pyx_k_661), 0, 1, 0, 0}, {&__pyx_kp_u_662, __pyx_k_662, sizeof(__pyx_k_662), 0, 1, 0, 0}, {&__pyx_kp_u_663, __pyx_k_663, sizeof(__pyx_k_663), 0, 1, 0, 0}, {&__pyx_kp_u_664, __pyx_k_664, sizeof(__pyx_k_664), 0, 1, 0, 0}, {&__pyx_kp_u_665, __pyx_k_665, sizeof(__pyx_k_665), 0, 1, 0, 0}, {&__pyx_kp_u_666, __pyx_k_666, sizeof(__pyx_k_666), 0, 1, 0, 0}, {&__pyx_kp_u_667, __pyx_k_667, sizeof(__pyx_k_667), 0, 1, 0, 0}, {&__pyx_kp_u_668, __pyx_k_668, sizeof(__pyx_k_668), 0, 1, 0, 0}, {&__pyx_kp_u_669, __pyx_k_669, sizeof(__pyx_k_669), 0, 1, 0, 0}, {&__pyx_kp_s_67, __pyx_k_67, sizeof(__pyx_k_67), 0, 0, 1, 0}, {&__pyx_kp_u_670, __pyx_k_670, sizeof(__pyx_k_670), 0, 1, 0, 0}, {&__pyx_kp_u_671, __pyx_k_671, sizeof(__pyx_k_671), 0, 1, 0, 0}, {&__pyx_kp_u_672, __pyx_k_672, sizeof(__pyx_k_672), 0, 1, 0, 0}, {&__pyx_kp_u_673, __pyx_k_673, sizeof(__pyx_k_673), 0, 1, 0, 0}, {&__pyx_kp_u_674, __pyx_k_674, sizeof(__pyx_k_674), 0, 1, 0, 0}, {&__pyx_kp_u_675, __pyx_k_675, sizeof(__pyx_k_675), 0, 1, 0, 0}, {&__pyx_kp_u_676, __pyx_k_676, sizeof(__pyx_k_676), 0, 1, 0, 0}, {&__pyx_kp_u_677, __pyx_k_677, sizeof(__pyx_k_677), 0, 1, 0, 0}, {&__pyx_kp_u_678, __pyx_k_678, sizeof(__pyx_k_678), 0, 1, 0, 0}, {&__pyx_kp_u_679, __pyx_k_679, sizeof(__pyx_k_679), 0, 1, 0, 0}, {&__pyx_n_s_68, __pyx_k_68, sizeof(__pyx_k_68), 0, 0, 1, 1}, {&__pyx_kp_u_680, __pyx_k_680, sizeof(__pyx_k_680), 0, 1, 0, 0}, {&__pyx_kp_u_681, __pyx_k_681, sizeof(__pyx_k_681), 0, 1, 0, 0}, {&__pyx_kp_u_682, __pyx_k_682, sizeof(__pyx_k_682), 0, 1, 0, 0}, {&__pyx_kp_u_683, __pyx_k_683, sizeof(__pyx_k_683), 0, 1, 0, 0}, {&__pyx_kp_u_684, __pyx_k_684, sizeof(__pyx_k_684), 0, 1, 0, 0}, {&__pyx_kp_u_685, __pyx_k_685, sizeof(__pyx_k_685), 0, 1, 0, 0}, {&__pyx_kp_u_686, __pyx_k_686, sizeof(__pyx_k_686), 0, 1, 0, 0}, {&__pyx_kp_u_687, __pyx_k_687, sizeof(__pyx_k_687), 0, 1, 0, 0}, {&__pyx_kp_u_688, __pyx_k_688, sizeof(__pyx_k_688), 0, 1, 0, 0}, {&__pyx_kp_u_689, __pyx_k_689, sizeof(__pyx_k_689), 0, 1, 0, 0}, {&__pyx_kp_u_690, __pyx_k_690, sizeof(__pyx_k_690), 0, 1, 0, 0}, {&__pyx_kp_u_691, __pyx_k_691, sizeof(__pyx_k_691), 0, 1, 0, 0}, {&__pyx_kp_u_692, __pyx_k_692, sizeof(__pyx_k_692), 0, 1, 0, 0}, {&__pyx_kp_u_693, __pyx_k_693, sizeof(__pyx_k_693), 0, 1, 0, 0}, {&__pyx_kp_u_694, __pyx_k_694, sizeof(__pyx_k_694), 0, 1, 0, 0}, {&__pyx_kp_u_695, __pyx_k_695, sizeof(__pyx_k_695), 0, 1, 0, 0}, {&__pyx_kp_u_696, __pyx_k_696, sizeof(__pyx_k_696), 0, 1, 0, 0}, {&__pyx_kp_u_697, __pyx_k_697, sizeof(__pyx_k_697), 0, 1, 0, 0}, {&__pyx_kp_u_698, __pyx_k_698, sizeof(__pyx_k_698), 0, 1, 0, 0}, {&__pyx_kp_u_699, __pyx_k_699, sizeof(__pyx_k_699), 0, 1, 0, 0}, {&__pyx_kp_u_700, __pyx_k_700, sizeof(__pyx_k_700), 0, 1, 0, 0}, {&__pyx_kp_u_701, __pyx_k_701, sizeof(__pyx_k_701), 0, 1, 0, 0}, {&__pyx_kp_u_702, __pyx_k_702, sizeof(__pyx_k_702), 0, 1, 0, 0}, {&__pyx_kp_u_703, __pyx_k_703, sizeof(__pyx_k_703), 0, 1, 0, 0}, {&__pyx_kp_u_704, __pyx_k_704, sizeof(__pyx_k_704), 0, 1, 0, 0}, {&__pyx_kp_u_705, __pyx_k_705, sizeof(__pyx_k_705), 0, 1, 0, 0}, {&__pyx_kp_u_706, __pyx_k_706, sizeof(__pyx_k_706), 0, 1, 0, 0}, {&__pyx_kp_u_707, __pyx_k_707, sizeof(__pyx_k_707), 0, 1, 0, 0}, {&__pyx_kp_u_708, __pyx_k_708, sizeof(__pyx_k_708), 0, 1, 0, 0}, {&__pyx_kp_u_709, __pyx_k_709, sizeof(__pyx_k_709), 0, 1, 0, 0}, {&__pyx_kp_u_710, __pyx_k_710, sizeof(__pyx_k_710), 0, 1, 0, 0}, {&__pyx_kp_u_711, __pyx_k_711, sizeof(__pyx_k_711), 0, 1, 0, 0}, {&__pyx_kp_u_712, __pyx_k_712, sizeof(__pyx_k_712), 0, 1, 0, 0}, {&__pyx_kp_u_713, __pyx_k_713, sizeof(__pyx_k_713), 0, 1, 0, 0}, {&__pyx_kp_u_714, __pyx_k_714, sizeof(__pyx_k_714), 0, 1, 0, 0}, {&__pyx_kp_u_715, __pyx_k_715, sizeof(__pyx_k_715), 0, 1, 0, 0}, {&__pyx_kp_u_716, __pyx_k_716, sizeof(__pyx_k_716), 0, 1, 0, 0}, {&__pyx_kp_u_717, __pyx_k_717, sizeof(__pyx_k_717), 0, 1, 0, 0}, {&__pyx_kp_u_718, __pyx_k_718, sizeof(__pyx_k_718), 0, 1, 0, 0}, {&__pyx_kp_u_719, __pyx_k_719, sizeof(__pyx_k_719), 0, 1, 0, 0}, {&__pyx_kp_u_720, __pyx_k_720, sizeof(__pyx_k_720), 0, 1, 0, 0}, {&__pyx_kp_u_721, __pyx_k_721, sizeof(__pyx_k_721), 0, 1, 0, 0}, {&__pyx_kp_u_722, __pyx_k_722, sizeof(__pyx_k_722), 0, 1, 0, 0}, {&__pyx_kp_u_723, __pyx_k_723, sizeof(__pyx_k_723), 0, 1, 0, 0}, {&__pyx_kp_u_724, __pyx_k_724, sizeof(__pyx_k_724), 0, 1, 0, 0}, {&__pyx_kp_u_725, __pyx_k_725, sizeof(__pyx_k_725), 0, 1, 0, 0}, {&__pyx_kp_u_726, __pyx_k_726, sizeof(__pyx_k_726), 0, 1, 0, 0}, {&__pyx_kp_u_727, __pyx_k_727, sizeof(__pyx_k_727), 0, 1, 0, 0}, {&__pyx_kp_u_728, __pyx_k_728, sizeof(__pyx_k_728), 0, 1, 0, 0}, {&__pyx_kp_u_729, __pyx_k_729, sizeof(__pyx_k_729), 0, 1, 0, 0}, {&__pyx_kp_u_730, __pyx_k_730, sizeof(__pyx_k_730), 0, 1, 0, 0}, {&__pyx_kp_u_731, __pyx_k_731, sizeof(__pyx_k_731), 0, 1, 0, 0}, {&__pyx_kp_u_732, __pyx_k_732, sizeof(__pyx_k_732), 0, 1, 0, 0}, {&__pyx_kp_u_733, __pyx_k_733, sizeof(__pyx_k_733), 0, 1, 0, 0}, {&__pyx_kp_u_734, __pyx_k_734, sizeof(__pyx_k_734), 0, 1, 0, 0}, {&__pyx_kp_u_735, __pyx_k_735, sizeof(__pyx_k_735), 0, 1, 0, 0}, {&__pyx_kp_u_736, __pyx_k_736, sizeof(__pyx_k_736), 0, 1, 0, 0}, {&__pyx_kp_u_737, __pyx_k_737, sizeof(__pyx_k_737), 0, 1, 0, 0}, {&__pyx_kp_u_738, __pyx_k_738, sizeof(__pyx_k_738), 0, 1, 0, 0}, {&__pyx_kp_u_739, __pyx_k_739, sizeof(__pyx_k_739), 0, 1, 0, 0}, {&__pyx_kp_u_740, __pyx_k_740, sizeof(__pyx_k_740), 0, 1, 0, 0}, {&__pyx_kp_u_741, __pyx_k_741, sizeof(__pyx_k_741), 0, 1, 0, 0}, {&__pyx_kp_u_742, __pyx_k_742, sizeof(__pyx_k_742), 0, 1, 0, 0}, {&__pyx_kp_u_743, __pyx_k_743, sizeof(__pyx_k_743), 0, 1, 0, 0}, {&__pyx_kp_u_744, __pyx_k_744, sizeof(__pyx_k_744), 0, 1, 0, 0}, {&__pyx_kp_u_745, __pyx_k_745, sizeof(__pyx_k_745), 0, 1, 0, 0}, {&__pyx_kp_u_746, __pyx_k_746, sizeof(__pyx_k_746), 0, 1, 0, 0}, {&__pyx_kp_u_747, __pyx_k_747, sizeof(__pyx_k_747), 0, 1, 0, 0}, {&__pyx_kp_u_748, __pyx_k_748, sizeof(__pyx_k_748), 0, 1, 0, 0}, {&__pyx_kp_u_749, __pyx_k_749, sizeof(__pyx_k_749), 0, 1, 0, 0}, {&__pyx_kp_u_750, __pyx_k_750, sizeof(__pyx_k_750), 0, 1, 0, 0}, {&__pyx_kp_u_751, __pyx_k_751, sizeof(__pyx_k_751), 0, 1, 0, 0}, {&__pyx_kp_u_752, __pyx_k_752, sizeof(__pyx_k_752), 0, 1, 0, 0}, {&__pyx_kp_u_753, __pyx_k_753, sizeof(__pyx_k_753), 0, 1, 0, 0}, {&__pyx_kp_u_754, __pyx_k_754, sizeof(__pyx_k_754), 0, 1, 0, 0}, {&__pyx_kp_u_755, __pyx_k_755, sizeof(__pyx_k_755), 0, 1, 0, 0}, {&__pyx_kp_u_756, __pyx_k_756, sizeof(__pyx_k_756), 0, 1, 0, 0}, {&__pyx_kp_u_757, __pyx_k_757, sizeof(__pyx_k_757), 0, 1, 0, 0}, {&__pyx_kp_u_758, __pyx_k_758, sizeof(__pyx_k_758), 0, 1, 0, 0}, {&__pyx_kp_u_759, __pyx_k_759, sizeof(__pyx_k_759), 0, 1, 0, 0}, {&__pyx_kp_u_760, __pyx_k_760, sizeof(__pyx_k_760), 0, 1, 0, 0}, {&__pyx_kp_u_761, __pyx_k_761, sizeof(__pyx_k_761), 0, 1, 0, 0}, {&__pyx_kp_u_762, __pyx_k_762, sizeof(__pyx_k_762), 0, 1, 0, 0}, {&__pyx_kp_u_763, __pyx_k_763, sizeof(__pyx_k_763), 0, 1, 0, 0}, {&__pyx_kp_u_764, __pyx_k_764, sizeof(__pyx_k_764), 0, 1, 0, 0}, {&__pyx_kp_u_765, __pyx_k_765, sizeof(__pyx_k_765), 0, 1, 0, 0}, {&__pyx_kp_u_766, __pyx_k_766, sizeof(__pyx_k_766), 0, 1, 0, 0}, {&__pyx_kp_u_767, __pyx_k_767, sizeof(__pyx_k_767), 0, 1, 0, 0}, {&__pyx_kp_u_768, __pyx_k_768, sizeof(__pyx_k_768), 0, 1, 0, 0}, {&__pyx_kp_u_769, __pyx_k_769, sizeof(__pyx_k_769), 0, 1, 0, 0}, {&__pyx_kp_u_770, __pyx_k_770, sizeof(__pyx_k_770), 0, 1, 0, 0}, {&__pyx_kp_u_771, __pyx_k_771, sizeof(__pyx_k_771), 0, 1, 0, 0}, {&__pyx_kp_u_772, __pyx_k_772, sizeof(__pyx_k_772), 0, 1, 0, 0}, {&__pyx_kp_u_773, __pyx_k_773, sizeof(__pyx_k_773), 0, 1, 0, 0}, {&__pyx_kp_u_774, __pyx_k_774, sizeof(__pyx_k_774), 0, 1, 0, 0}, {&__pyx_kp_u_775, __pyx_k_775, sizeof(__pyx_k_775), 0, 1, 0, 0}, {&__pyx_kp_u_776, __pyx_k_776, sizeof(__pyx_k_776), 0, 1, 0, 0}, {&__pyx_kp_u_777, __pyx_k_777, sizeof(__pyx_k_777), 0, 1, 0, 0}, {&__pyx_kp_u_778, __pyx_k_778, sizeof(__pyx_k_778), 0, 1, 0, 0}, {&__pyx_kp_u_779, __pyx_k_779, sizeof(__pyx_k_779), 0, 1, 0, 0}, {&__pyx_kp_u_780, __pyx_k_780, sizeof(__pyx_k_780), 0, 1, 0, 0}, {&__pyx_kp_u_781, __pyx_k_781, sizeof(__pyx_k_781), 0, 1, 0, 0}, {&__pyx_kp_u_782, __pyx_k_782, sizeof(__pyx_k_782), 0, 1, 0, 0}, {&__pyx_kp_u_783, __pyx_k_783, sizeof(__pyx_k_783), 0, 1, 0, 0}, {&__pyx_kp_u_784, __pyx_k_784, sizeof(__pyx_k_784), 0, 1, 0, 0}, {&__pyx_kp_u_785, __pyx_k_785, sizeof(__pyx_k_785), 0, 1, 0, 0}, {&__pyx_kp_u_786, __pyx_k_786, sizeof(__pyx_k_786), 0, 1, 0, 0}, {&__pyx_kp_u_787, __pyx_k_787, sizeof(__pyx_k_787), 0, 1, 0, 0}, {&__pyx_kp_u_788, __pyx_k_788, sizeof(__pyx_k_788), 0, 1, 0, 0}, {&__pyx_kp_u_789, __pyx_k_789, sizeof(__pyx_k_789), 0, 1, 0, 0}, {&__pyx_kp_u_790, __pyx_k_790, sizeof(__pyx_k_790), 0, 1, 0, 0}, {&__pyx_kp_u_791, __pyx_k_791, sizeof(__pyx_k_791), 0, 1, 0, 0}, {&__pyx_kp_u_792, __pyx_k_792, sizeof(__pyx_k_792), 0, 1, 0, 0}, {&__pyx_kp_u_793, __pyx_k_793, sizeof(__pyx_k_793), 0, 1, 0, 0}, {&__pyx_kp_u_794, __pyx_k_794, sizeof(__pyx_k_794), 0, 1, 0, 0}, {&__pyx_kp_u_795, __pyx_k_795, sizeof(__pyx_k_795), 0, 1, 0, 0}, {&__pyx_kp_u_796, __pyx_k_796, sizeof(__pyx_k_796), 0, 1, 0, 0}, {&__pyx_kp_u_797, __pyx_k_797, sizeof(__pyx_k_797), 0, 1, 0, 0}, {&__pyx_kp_u_798, __pyx_k_798, sizeof(__pyx_k_798), 0, 1, 0, 0}, {&__pyx_kp_u_799, __pyx_k_799, sizeof(__pyx_k_799), 0, 1, 0, 0}, {&__pyx_kp_u_800, __pyx_k_800, sizeof(__pyx_k_800), 0, 1, 0, 0}, {&__pyx_kp_u_801, __pyx_k_801, sizeof(__pyx_k_801), 0, 1, 0, 0}, {&__pyx_kp_u_802, __pyx_k_802, sizeof(__pyx_k_802), 0, 1, 0, 0}, {&__pyx_kp_u_803, __pyx_k_803, sizeof(__pyx_k_803), 0, 1, 0, 0}, {&__pyx_kp_u_804, __pyx_k_804, sizeof(__pyx_k_804), 0, 1, 0, 0}, {&__pyx_kp_u_805, __pyx_k_805, sizeof(__pyx_k_805), 0, 1, 0, 0}, {&__pyx_kp_u_806, __pyx_k_806, sizeof(__pyx_k_806), 0, 1, 0, 0}, {&__pyx_kp_u_807, __pyx_k_807, sizeof(__pyx_k_807), 0, 1, 0, 0}, {&__pyx_kp_u_808, __pyx_k_808, sizeof(__pyx_k_808), 0, 1, 0, 0}, {&__pyx_kp_u_809, __pyx_k_809, sizeof(__pyx_k_809), 0, 1, 0, 0}, {&__pyx_kp_u_810, __pyx_k_810, sizeof(__pyx_k_810), 0, 1, 0, 0}, {&__pyx_kp_u_811, __pyx_k_811, sizeof(__pyx_k_811), 0, 1, 0, 0}, {&__pyx_kp_u_812, __pyx_k_812, sizeof(__pyx_k_812), 0, 1, 0, 0}, {&__pyx_kp_u_813, __pyx_k_813, sizeof(__pyx_k_813), 0, 1, 0, 0}, {&__pyx_kp_u_814, __pyx_k_814, sizeof(__pyx_k_814), 0, 1, 0, 0}, {&__pyx_kp_u_815, __pyx_k_815, sizeof(__pyx_k_815), 0, 1, 0, 0}, {&__pyx_kp_u_816, __pyx_k_816, sizeof(__pyx_k_816), 0, 1, 0, 0}, {&__pyx_kp_u_817, __pyx_k_817, sizeof(__pyx_k_817), 0, 1, 0, 0}, {&__pyx_kp_u_818, __pyx_k_818, sizeof(__pyx_k_818), 0, 1, 0, 0}, {&__pyx_kp_u_819, __pyx_k_819, sizeof(__pyx_k_819), 0, 1, 0, 0}, {&__pyx_kp_u_820, __pyx_k_820, sizeof(__pyx_k_820), 0, 1, 0, 0}, {&__pyx_kp_u_821, __pyx_k_821, sizeof(__pyx_k_821), 0, 1, 0, 0}, {&__pyx_kp_u_822, __pyx_k_822, sizeof(__pyx_k_822), 0, 1, 0, 0}, {&__pyx_kp_u_823, __pyx_k_823, sizeof(__pyx_k_823), 0, 1, 0, 0}, {&__pyx_kp_u_824, __pyx_k_824, sizeof(__pyx_k_824), 0, 1, 0, 0}, {&__pyx_kp_u_825, __pyx_k_825, sizeof(__pyx_k_825), 0, 1, 0, 0}, {&__pyx_kp_u_826, __pyx_k_826, sizeof(__pyx_k_826), 0, 1, 0, 0}, {&__pyx_kp_u_827, __pyx_k_827, sizeof(__pyx_k_827), 0, 1, 0, 0}, {&__pyx_kp_u_828, __pyx_k_828, sizeof(__pyx_k_828), 0, 1, 0, 0}, {&__pyx_kp_u_829, __pyx_k_829, sizeof(__pyx_k_829), 0, 1, 0, 0}, {&__pyx_kp_u_830, __pyx_k_830, sizeof(__pyx_k_830), 0, 1, 0, 0}, {&__pyx_kp_u_831, __pyx_k_831, sizeof(__pyx_k_831), 0, 1, 0, 0}, {&__pyx_kp_u_832, __pyx_k_832, sizeof(__pyx_k_832), 0, 1, 0, 0}, {&__pyx_kp_u_833, __pyx_k_833, sizeof(__pyx_k_833), 0, 1, 0, 0}, {&__pyx_kp_u_834, __pyx_k_834, sizeof(__pyx_k_834), 0, 1, 0, 0}, {&__pyx_kp_u_835, __pyx_k_835, sizeof(__pyx_k_835), 0, 1, 0, 0}, {&__pyx_kp_u_836, __pyx_k_836, sizeof(__pyx_k_836), 0, 1, 0, 0}, {&__pyx_kp_u_837, __pyx_k_837, sizeof(__pyx_k_837), 0, 1, 0, 0}, {&__pyx_kp_u_838, __pyx_k_838, sizeof(__pyx_k_838), 0, 1, 0, 0}, {&__pyx_kp_u_839, __pyx_k_839, sizeof(__pyx_k_839), 0, 1, 0, 0}, {&__pyx_kp_u_840, __pyx_k_840, sizeof(__pyx_k_840), 0, 1, 0, 0}, {&__pyx_kp_u_841, __pyx_k_841, sizeof(__pyx_k_841), 0, 1, 0, 0}, {&__pyx_kp_u_842, __pyx_k_842, sizeof(__pyx_k_842), 0, 1, 0, 0}, {&__pyx_kp_u_843, __pyx_k_843, sizeof(__pyx_k_843), 0, 1, 0, 0}, {&__pyx_kp_u_844, __pyx_k_844, sizeof(__pyx_k_844), 0, 1, 0, 0}, {&__pyx_kp_u_845, __pyx_k_845, sizeof(__pyx_k_845), 0, 1, 0, 0}, {&__pyx_kp_u_846, __pyx_k_846, sizeof(__pyx_k_846), 0, 1, 0, 0}, {&__pyx_kp_u_847, __pyx_k_847, sizeof(__pyx_k_847), 0, 1, 0, 0}, {&__pyx_kp_u_848, __pyx_k_848, sizeof(__pyx_k_848), 0, 1, 0, 0}, {&__pyx_kp_u_849, __pyx_k_849, sizeof(__pyx_k_849), 0, 1, 0, 0}, {&__pyx_kp_u_850, __pyx_k_850, sizeof(__pyx_k_850), 0, 1, 0, 0}, {&__pyx_kp_u_851, __pyx_k_851, sizeof(__pyx_k_851), 0, 1, 0, 0}, {&__pyx_kp_u_852, __pyx_k_852, sizeof(__pyx_k_852), 0, 1, 0, 0}, {&__pyx_kp_u_853, __pyx_k_853, sizeof(__pyx_k_853), 0, 1, 0, 0}, {&__pyx_kp_u_854, __pyx_k_854, sizeof(__pyx_k_854), 0, 1, 0, 0}, {&__pyx_kp_u_855, __pyx_k_855, sizeof(__pyx_k_855), 0, 1, 0, 0}, {&__pyx_kp_u_856, __pyx_k_856, sizeof(__pyx_k_856), 0, 1, 0, 0}, {&__pyx_kp_u_857, __pyx_k_857, sizeof(__pyx_k_857), 0, 1, 0, 0}, {&__pyx_kp_u_858, __pyx_k_858, sizeof(__pyx_k_858), 0, 1, 0, 0}, {&__pyx_kp_u_859, __pyx_k_859, sizeof(__pyx_k_859), 0, 1, 0, 0}, {&__pyx_kp_u_860, __pyx_k_860, sizeof(__pyx_k_860), 0, 1, 0, 0}, {&__pyx_kp_u_861, __pyx_k_861, sizeof(__pyx_k_861), 0, 1, 0, 0}, {&__pyx_kp_u_862, __pyx_k_862, sizeof(__pyx_k_862), 0, 1, 0, 0}, {&__pyx_kp_u_863, __pyx_k_863, sizeof(__pyx_k_863), 0, 1, 0, 0}, {&__pyx_kp_u_864, __pyx_k_864, sizeof(__pyx_k_864), 0, 1, 0, 0}, {&__pyx_kp_u_865, __pyx_k_865, sizeof(__pyx_k_865), 0, 1, 0, 0}, {&__pyx_kp_u_866, __pyx_k_866, sizeof(__pyx_k_866), 0, 1, 0, 0}, {&__pyx_kp_u_867, __pyx_k_867, sizeof(__pyx_k_867), 0, 1, 0, 0}, {&__pyx_kp_u_868, __pyx_k_868, sizeof(__pyx_k_868), 0, 1, 0, 0}, {&__pyx_kp_u_869, __pyx_k_869, sizeof(__pyx_k_869), 0, 1, 0, 0}, {&__pyx_kp_u_870, __pyx_k_870, sizeof(__pyx_k_870), 0, 1, 0, 0}, {&__pyx_kp_u_871, __pyx_k_871, sizeof(__pyx_k_871), 0, 1, 0, 0}, {&__pyx_kp_u_872, __pyx_k_872, sizeof(__pyx_k_872), 0, 1, 0, 0}, {&__pyx_kp_u_873, __pyx_k_873, sizeof(__pyx_k_873), 0, 1, 0, 0}, {&__pyx_kp_u_874, __pyx_k_874, sizeof(__pyx_k_874), 0, 1, 0, 0}, {&__pyx_kp_u_875, __pyx_k_875, sizeof(__pyx_k_875), 0, 1, 0, 0}, {&__pyx_kp_u_876, __pyx_k_876, sizeof(__pyx_k_876), 0, 1, 0, 0}, {&__pyx_kp_u_877, __pyx_k_877, sizeof(__pyx_k_877), 0, 1, 0, 0}, {&__pyx_kp_u_878, __pyx_k_878, sizeof(__pyx_k_878), 0, 1, 0, 0}, {&__pyx_kp_u_879, __pyx_k_879, sizeof(__pyx_k_879), 0, 1, 0, 0}, {&__pyx_kp_u_880, __pyx_k_880, sizeof(__pyx_k_880), 0, 1, 0, 0}, {&__pyx_kp_u_881, __pyx_k_881, sizeof(__pyx_k_881), 0, 1, 0, 0}, {&__pyx_kp_u_882, __pyx_k_882, sizeof(__pyx_k_882), 0, 1, 0, 0}, {&__pyx_kp_u_883, __pyx_k_883, sizeof(__pyx_k_883), 0, 1, 0, 0}, {&__pyx_kp_u_884, __pyx_k_884, sizeof(__pyx_k_884), 0, 1, 0, 0}, {&__pyx_kp_u_885, __pyx_k_885, sizeof(__pyx_k_885), 0, 1, 0, 0}, {&__pyx_kp_u_886, __pyx_k_886, sizeof(__pyx_k_886), 0, 1, 0, 0}, {&__pyx_kp_u_887, __pyx_k_887, sizeof(__pyx_k_887), 0, 1, 0, 0}, {&__pyx_kp_u_888, __pyx_k_888, sizeof(__pyx_k_888), 0, 1, 0, 0}, {&__pyx_kp_u_889, __pyx_k_889, sizeof(__pyx_k_889), 0, 1, 0, 0}, {&__pyx_kp_u_890, __pyx_k_890, sizeof(__pyx_k_890), 0, 1, 0, 0}, {&__pyx_kp_u_891, __pyx_k_891, sizeof(__pyx_k_891), 0, 1, 0, 0}, {&__pyx_kp_u_892, __pyx_k_892, sizeof(__pyx_k_892), 0, 1, 0, 0}, {&__pyx_kp_u_893, __pyx_k_893, sizeof(__pyx_k_893), 0, 1, 0, 0}, {&__pyx_kp_u_894, __pyx_k_894, sizeof(__pyx_k_894), 0, 1, 0, 0}, {&__pyx_kp_u_895, __pyx_k_895, sizeof(__pyx_k_895), 0, 1, 0, 0}, {&__pyx_kp_u_896, __pyx_k_896, sizeof(__pyx_k_896), 0, 1, 0, 0}, {&__pyx_kp_u_897, __pyx_k_897, sizeof(__pyx_k_897), 0, 1, 0, 0}, {&__pyx_kp_u_898, __pyx_k_898, sizeof(__pyx_k_898), 0, 1, 0, 0}, {&__pyx_kp_u_899, __pyx_k_899, sizeof(__pyx_k_899), 0, 1, 0, 0}, {&__pyx_kp_u_900, __pyx_k_900, sizeof(__pyx_k_900), 0, 1, 0, 0}, {&__pyx_kp_u_901, __pyx_k_901, sizeof(__pyx_k_901), 0, 1, 0, 0}, {&__pyx_kp_u_902, __pyx_k_902, sizeof(__pyx_k_902), 0, 1, 0, 0}, {&__pyx_kp_u_903, __pyx_k_903, sizeof(__pyx_k_903), 0, 1, 0, 0}, {&__pyx_kp_u_904, __pyx_k_904, sizeof(__pyx_k_904), 0, 1, 0, 0}, {&__pyx_kp_u_905, __pyx_k_905, sizeof(__pyx_k_905), 0, 1, 0, 0}, {&__pyx_kp_u_906, __pyx_k_906, sizeof(__pyx_k_906), 0, 1, 0, 0}, {&__pyx_kp_u_907, __pyx_k_907, sizeof(__pyx_k_907), 0, 1, 0, 0}, {&__pyx_kp_u_908, __pyx_k_908, sizeof(__pyx_k_908), 0, 1, 0, 0}, {&__pyx_kp_u_909, __pyx_k_909, sizeof(__pyx_k_909), 0, 1, 0, 0}, {&__pyx_kp_u_910, __pyx_k_910, sizeof(__pyx_k_910), 0, 1, 0, 0}, {&__pyx_kp_u_911, __pyx_k_911, sizeof(__pyx_k_911), 0, 1, 0, 0}, {&__pyx_kp_u_912, __pyx_k_912, sizeof(__pyx_k_912), 0, 1, 0, 0}, {&__pyx_kp_u_913, __pyx_k_913, sizeof(__pyx_k_913), 0, 1, 0, 0}, {&__pyx_kp_u_914, __pyx_k_914, sizeof(__pyx_k_914), 0, 1, 0, 0}, {&__pyx_kp_u_915, __pyx_k_915, sizeof(__pyx_k_915), 0, 1, 0, 0}, {&__pyx_kp_u_916, __pyx_k_916, sizeof(__pyx_k_916), 0, 1, 0, 0}, {&__pyx_kp_u_917, __pyx_k_917, sizeof(__pyx_k_917), 0, 1, 0, 0}, {&__pyx_kp_u_918, __pyx_k_918, sizeof(__pyx_k_918), 0, 1, 0, 0}, {&__pyx_kp_u_919, __pyx_k_919, sizeof(__pyx_k_919), 0, 1, 0, 0}, {&__pyx_kp_u_920, __pyx_k_920, sizeof(__pyx_k_920), 0, 1, 0, 0}, {&__pyx_kp_u_921, __pyx_k_921, sizeof(__pyx_k_921), 0, 1, 0, 0}, {&__pyx_kp_u_922, __pyx_k_922, sizeof(__pyx_k_922), 0, 1, 0, 0}, {&__pyx_kp_u_923, __pyx_k_923, sizeof(__pyx_k_923), 0, 1, 0, 0}, {&__pyx_kp_u_924, __pyx_k_924, sizeof(__pyx_k_924), 0, 1, 0, 0}, {&__pyx_kp_u_925, __pyx_k_925, sizeof(__pyx_k_925), 0, 1, 0, 0}, {&__pyx_kp_u_926, __pyx_k_926, sizeof(__pyx_k_926), 0, 1, 0, 0}, {&__pyx_kp_u_927, __pyx_k_927, sizeof(__pyx_k_927), 0, 1, 0, 0}, {&__pyx_kp_u_928, __pyx_k_928, sizeof(__pyx_k_928), 0, 1, 0, 0}, {&__pyx_kp_u_929, __pyx_k_929, sizeof(__pyx_k_929), 0, 1, 0, 0}, {&__pyx_kp_u_930, __pyx_k_930, sizeof(__pyx_k_930), 0, 1, 0, 0}, {&__pyx_kp_u_931, __pyx_k_931, sizeof(__pyx_k_931), 0, 1, 0, 0}, {&__pyx_kp_u_932, __pyx_k_932, sizeof(__pyx_k_932), 0, 1, 0, 0}, {&__pyx_kp_u_933, __pyx_k_933, sizeof(__pyx_k_933), 0, 1, 0, 0}, {&__pyx_kp_u_934, __pyx_k_934, sizeof(__pyx_k_934), 0, 1, 0, 0}, {&__pyx_kp_u_935, __pyx_k_935, sizeof(__pyx_k_935), 0, 1, 0, 0}, {&__pyx_kp_u_936, __pyx_k_936, sizeof(__pyx_k_936), 0, 1, 0, 0}, {&__pyx_kp_u_937, __pyx_k_937, sizeof(__pyx_k_937), 0, 1, 0, 0}, {&__pyx_kp_u_938, __pyx_k_938, sizeof(__pyx_k_938), 0, 1, 0, 0}, {&__pyx_kp_u_939, __pyx_k_939, sizeof(__pyx_k_939), 0, 1, 0, 0}, {&__pyx_kp_u_940, __pyx_k_940, sizeof(__pyx_k_940), 0, 1, 0, 0}, {&__pyx_kp_u_941, __pyx_k_941, sizeof(__pyx_k_941), 0, 1, 0, 0}, {&__pyx_kp_u_942, __pyx_k_942, sizeof(__pyx_k_942), 0, 1, 0, 0}, {&__pyx_kp_u_943, __pyx_k_943, sizeof(__pyx_k_943), 0, 1, 0, 0}, {&__pyx_kp_u_944, __pyx_k_944, sizeof(__pyx_k_944), 0, 1, 0, 0}, {&__pyx_kp_u_945, __pyx_k_945, sizeof(__pyx_k_945), 0, 1, 0, 0}, {&__pyx_kp_u_946, __pyx_k_946, sizeof(__pyx_k_946), 0, 1, 0, 0}, {&__pyx_kp_u_947, __pyx_k_947, sizeof(__pyx_k_947), 0, 1, 0, 0}, {&__pyx_kp_u_948, __pyx_k_948, sizeof(__pyx_k_948), 0, 1, 0, 0}, {&__pyx_kp_u_949, __pyx_k_949, sizeof(__pyx_k_949), 0, 1, 0, 0}, {&__pyx_kp_u_950, __pyx_k_950, sizeof(__pyx_k_950), 0, 1, 0, 0}, {&__pyx_kp_u_951, __pyx_k_951, sizeof(__pyx_k_951), 0, 1, 0, 0}, {&__pyx_kp_u_952, __pyx_k_952, sizeof(__pyx_k_952), 0, 1, 0, 0}, {&__pyx_kp_u_953, __pyx_k_953, sizeof(__pyx_k_953), 0, 1, 0, 0}, {&__pyx_kp_u_954, __pyx_k_954, sizeof(__pyx_k_954), 0, 1, 0, 0}, {&__pyx_kp_u_955, __pyx_k_955, sizeof(__pyx_k_955), 0, 1, 0, 0}, {&__pyx_kp_u_956, __pyx_k_956, sizeof(__pyx_k_956), 0, 1, 0, 0}, {&__pyx_kp_u_957, __pyx_k_957, sizeof(__pyx_k_957), 0, 1, 0, 0}, {&__pyx_kp_u_958, __pyx_k_958, sizeof(__pyx_k_958), 0, 1, 0, 0}, {&__pyx_kp_u_959, __pyx_k_959, sizeof(__pyx_k_959), 0, 1, 0, 0}, {&__pyx_kp_u_960, __pyx_k_960, sizeof(__pyx_k_960), 0, 1, 0, 0}, {&__pyx_kp_u_961, __pyx_k_961, sizeof(__pyx_k_961), 0, 1, 0, 0}, {&__pyx_kp_u_962, __pyx_k_962, sizeof(__pyx_k_962), 0, 1, 0, 0}, {&__pyx_kp_u_963, __pyx_k_963, sizeof(__pyx_k_963), 0, 1, 0, 0}, {&__pyx_kp_u_964, __pyx_k_964, sizeof(__pyx_k_964), 0, 1, 0, 0}, {&__pyx_kp_u_965, __pyx_k_965, sizeof(__pyx_k_965), 0, 1, 0, 0}, {&__pyx_kp_u_966, __pyx_k_966, sizeof(__pyx_k_966), 0, 1, 0, 0}, {&__pyx_kp_u_967, __pyx_k_967, sizeof(__pyx_k_967), 0, 1, 0, 0}, {&__pyx_kp_u_968, __pyx_k_968, sizeof(__pyx_k_968), 0, 1, 0, 0}, {&__pyx_kp_u_969, __pyx_k_969, sizeof(__pyx_k_969), 0, 1, 0, 0}, {&__pyx_kp_u_970, __pyx_k_970, sizeof(__pyx_k_970), 0, 1, 0, 0}, {&__pyx_kp_u_971, __pyx_k_971, sizeof(__pyx_k_971), 0, 1, 0, 0}, {&__pyx_kp_u_972, __pyx_k_972, sizeof(__pyx_k_972), 0, 1, 0, 0}, {&__pyx_kp_u_973, __pyx_k_973, sizeof(__pyx_k_973), 0, 1, 0, 0}, {&__pyx_kp_u_974, __pyx_k_974, sizeof(__pyx_k_974), 0, 1, 0, 0}, {&__pyx_kp_u_975, __pyx_k_975, sizeof(__pyx_k_975), 0, 1, 0, 0}, {&__pyx_kp_u_976, __pyx_k_976, sizeof(__pyx_k_976), 0, 1, 0, 0}, {&__pyx_kp_u_977, __pyx_k_977, sizeof(__pyx_k_977), 0, 1, 0, 0}, {&__pyx_kp_u_978, __pyx_k_978, sizeof(__pyx_k_978), 0, 1, 0, 0}, {&__pyx_kp_u_979, __pyx_k_979, sizeof(__pyx_k_979), 0, 1, 0, 0}, {&__pyx_kp_u_980, __pyx_k_980, sizeof(__pyx_k_980), 0, 1, 0, 0}, {&__pyx_kp_u_981, __pyx_k_981, sizeof(__pyx_k_981), 0, 1, 0, 0}, {&__pyx_kp_u_982, __pyx_k_982, sizeof(__pyx_k_982), 0, 1, 0, 0}, {&__pyx_kp_u_983, __pyx_k_983, sizeof(__pyx_k_983), 0, 1, 0, 0}, {&__pyx_kp_u_984, __pyx_k_984, sizeof(__pyx_k_984), 0, 1, 0, 0}, {&__pyx_kp_u_985, __pyx_k_985, sizeof(__pyx_k_985), 0, 1, 0, 0}, {&__pyx_kp_u_986, __pyx_k_986, sizeof(__pyx_k_986), 0, 1, 0, 0}, {&__pyx_kp_u_987, __pyx_k_987, sizeof(__pyx_k_987), 0, 1, 0, 0}, {&__pyx_kp_u_988, __pyx_k_988, sizeof(__pyx_k_988), 0, 1, 0, 0}, {&__pyx_kp_u_989, __pyx_k_989, sizeof(__pyx_k_989), 0, 1, 0, 0}, {&__pyx_kp_u_990, __pyx_k_990, sizeof(__pyx_k_990), 0, 1, 0, 0}, {&__pyx_kp_u_991, __pyx_k_991, sizeof(__pyx_k_991), 0, 1, 0, 0}, {&__pyx_kp_u_992, __pyx_k_992, sizeof(__pyx_k_992), 0, 1, 0, 0}, {&__pyx_kp_u_993, __pyx_k_993, sizeof(__pyx_k_993), 0, 1, 0, 0}, {&__pyx_kp_u_994, __pyx_k_994, sizeof(__pyx_k_994), 0, 1, 0, 0}, {&__pyx_kp_u_995, __pyx_k_995, sizeof(__pyx_k_995), 0, 1, 0, 0}, {&__pyx_kp_u_996, __pyx_k_996, sizeof(__pyx_k_996), 0, 1, 0, 0}, {&__pyx_kp_u_997, __pyx_k_997, sizeof(__pyx_k_997), 0, 1, 0, 0}, {&__pyx_kp_u_998, __pyx_k_998, sizeof(__pyx_k_998), 0, 1, 0, 0}, {&__pyx_kp_u_999, __pyx_k_999, sizeof(__pyx_k_999), 0, 1, 0, 0}, {&__pyx_n_s__A, __pyx_k__A, sizeof(__pyx_k__A), 0, 0, 1, 1}, {&__pyx_n_s__C, __pyx_k__C, sizeof(__pyx_k__C), 0, 0, 1, 1}, {&__pyx_n_s__GDFgdf, __pyx_k__GDFgdf, sizeof(__pyx_k__GDFgdf), 0, 0, 1, 1}, {&__pyx_n_s__M, __pyx_k__M, sizeof(__pyx_k__M), 0, 0, 1, 1}, {&__pyx_n_s__N, __pyx_k__N, sizeof(__pyx_k__N), 0, 0, 1, 1}, {&__pyx_n_s__NotImplementedError, __pyx_k__NotImplementedError, sizeof(__pyx_k__NotImplementedError), 0, 0, 1, 1}, {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1}, {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1}, {&__pyx_n_s__X, __pyx_k__X, sizeof(__pyx_k__X), 0, 0, 1, 1}, {&__pyx_n_s___, __pyx_k___, sizeof(__pyx_k___), 0, 0, 1, 1}, {&__pyx_n_s____import__, __pyx_k____import__, sizeof(__pyx_k____import__), 0, 0, 1, 1}, {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, {&__pyx_n_s__a, __pyx_k__a, sizeof(__pyx_k__a), 0, 0, 1, 1}, {&__pyx_n_s__a1, __pyx_k__a1, sizeof(__pyx_k__a1), 0, 0, 1, 1}, {&__pyx_n_s__a2, __pyx_k__a2, sizeof(__pyx_k__a2), 0, 0, 1, 1}, {&__pyx_n_s__add_newdoc, __pyx_k__add_newdoc, sizeof(__pyx_k__add_newdoc), 0, 0, 1, 1}, {&__pyx_n_s__all, __pyx_k__all, sizeof(__pyx_k__all), 0, 0, 1, 1}, {&__pyx_n_s__allclose, __pyx_k__allclose, sizeof(__pyx_k__allclose), 0, 0, 1, 1}, {&__pyx_n_s__alltrue, __pyx_k__alltrue, sizeof(__pyx_k__alltrue), 0, 0, 1, 1}, {&__pyx_n_s__alterdot, __pyx_k__alterdot, sizeof(__pyx_k__alterdot), 0, 0, 1, 1}, {&__pyx_n_s__amax, __pyx_k__amax, sizeof(__pyx_k__amax), 0, 0, 1, 1}, {&__pyx_n_s__amin, __pyx_k__amin, sizeof(__pyx_k__amin), 0, 0, 1, 1}, {&__pyx_n_s__angle, __pyx_k__angle, sizeof(__pyx_k__angle), 0, 0, 1, 1}, {&__pyx_n_s__any, __pyx_k__any, sizeof(__pyx_k__any), 0, 0, 1, 1}, {&__pyx_n_s__append, __pyx_k__append, sizeof(__pyx_k__append), 0, 0, 1, 1}, {&__pyx_n_s__apply_along_axis, __pyx_k__apply_along_axis, sizeof(__pyx_k__apply_along_axis), 0, 0, 1, 1}, {&__pyx_n_s__apply_over_axes, __pyx_k__apply_over_axes, sizeof(__pyx_k__apply_over_axes), 0, 0, 1, 1}, {&__pyx_n_s__ar, __pyx_k__ar, sizeof(__pyx_k__ar), 0, 0, 1, 1}, {&__pyx_n_s__ar1, __pyx_k__ar1, sizeof(__pyx_k__ar1), 0, 0, 1, 1}, {&__pyx_n_s__ar2, __pyx_k__ar2, sizeof(__pyx_k__ar2), 0, 0, 1, 1}, {&__pyx_n_s__arg1, __pyx_k__arg1, sizeof(__pyx_k__arg1), 0, 0, 1, 1}, {&__pyx_n_s__arg2, __pyx_k__arg2, sizeof(__pyx_k__arg2), 0, 0, 1, 1}, {&__pyx_n_s__argmax, __pyx_k__argmax, sizeof(__pyx_k__argmax), 0, 0, 1, 1}, {&__pyx_n_s__argmin, __pyx_k__argmin, sizeof(__pyx_k__argmin), 0, 0, 1, 1}, {&__pyx_n_s__argsort, __pyx_k__argsort, sizeof(__pyx_k__argsort), 0, 0, 1, 1}, {&__pyx_n_s__argwhere, __pyx_k__argwhere, sizeof(__pyx_k__argwhere), 0, 0, 1, 1}, {&__pyx_n_s__around, __pyx_k__around, sizeof(__pyx_k__around), 0, 0, 1, 1}, {&__pyx_n_s__arr, __pyx_k__arr, sizeof(__pyx_k__arr), 0, 0, 1, 1}, {&__pyx_n_s__array, __pyx_k__array, sizeof(__pyx_k__array), 0, 0, 1, 1}, {&__pyx_n_s__array2string, __pyx_k__array2string, sizeof(__pyx_k__array2string), 0, 0, 1, 1}, {&__pyx_n_s__array_equal, __pyx_k__array_equal, sizeof(__pyx_k__array_equal), 0, 0, 1, 1}, {&__pyx_n_s__array_equiv, __pyx_k__array_equiv, sizeof(__pyx_k__array_equiv), 0, 0, 1, 1}, {&__pyx_n_s__array_repr, __pyx_k__array_repr, sizeof(__pyx_k__array_repr), 0, 0, 1, 1}, {&__pyx_n_s__array_split, __pyx_k__array_split, sizeof(__pyx_k__array_split), 0, 0, 1, 1}, {&__pyx_n_s__array_str, __pyx_k__array_str, sizeof(__pyx_k__array_str), 0, 0, 1, 1}, {&__pyx_n_s__array_types, __pyx_k__array_types, sizeof(__pyx_k__array_types), 0, 0, 1, 1}, {&__pyx_n_s__arrays_and_dtypes, __pyx_k__arrays_and_dtypes, sizeof(__pyx_k__arrays_and_dtypes), 0, 0, 1, 1}, {&__pyx_n_s__ary, __pyx_k__ary, sizeof(__pyx_k__ary), 0, 0, 1, 1}, {&__pyx_n_s__asanyarray, __pyx_k__asanyarray, sizeof(__pyx_k__asanyarray), 0, 0, 1, 1}, {&__pyx_n_s__asarray_chkfinite, __pyx_k__asarray_chkfinite, sizeof(__pyx_k__asarray_chkfinite), 0, 0, 1, 1}, {&__pyx_n_s__ascontiguousarray, __pyx_k__ascontiguousarray, sizeof(__pyx_k__ascontiguousarray), 0, 0, 1, 1}, {&__pyx_n_s__asfarray, __pyx_k__asfarray, sizeof(__pyx_k__asfarray), 0, 0, 1, 1}, {&__pyx_n_s__asfortranarray, __pyx_k__asfortranarray, sizeof(__pyx_k__asfortranarray), 0, 0, 1, 1}, {&__pyx_n_s__asmatrix, __pyx_k__asmatrix, sizeof(__pyx_k__asmatrix), 0, 0, 1, 1}, {&__pyx_n_s__asscalar, __pyx_k__asscalar, sizeof(__pyx_k__asscalar), 0, 0, 1, 1}, {&__pyx_n_s__assume_unique, __pyx_k__assume_unique, sizeof(__pyx_k__assume_unique), 0, 0, 1, 1}, {&__pyx_n_s__atleast_1d, __pyx_k__atleast_1d, sizeof(__pyx_k__atleast_1d), 0, 0, 1, 1}, {&__pyx_n_s__atleast_2d, __pyx_k__atleast_2d, sizeof(__pyx_k__atleast_2d), 0, 0, 1, 1}, {&__pyx_n_s__atleast_3d, __pyx_k__atleast_3d, sizeof(__pyx_k__atleast_3d), 0, 0, 1, 1}, {&__pyx_n_s__atol, __pyx_k__atol, sizeof(__pyx_k__atol), 0, 0, 1, 1}, {&__pyx_n_s__autostrip, __pyx_k__autostrip, sizeof(__pyx_k__autostrip), 0, 0, 1, 1}, {&__pyx_n_s__average, __pyx_k__average, sizeof(__pyx_k__average), 0, 0, 1, 1}, {&__pyx_n_s__axes, __pyx_k__axes, sizeof(__pyx_k__axes), 0, 0, 1, 1}, {&__pyx_n_s__axis, __pyx_k__axis, sizeof(__pyx_k__axis), 0, 0, 1, 1}, {&__pyx_n_s__axis1, __pyx_k__axis1, sizeof(__pyx_k__axis1), 0, 0, 1, 1}, {&__pyx_n_s__axis2, __pyx_k__axis2, sizeof(__pyx_k__axis2), 0, 0, 1, 1}, {&__pyx_n_s__axisa, __pyx_k__axisa, sizeof(__pyx_k__axisa), 0, 0, 1, 1}, {&__pyx_n_s__axisb, __pyx_k__axisb, sizeof(__pyx_k__axisb), 0, 0, 1, 1}, {&__pyx_n_s__axisc, __pyx_k__axisc, sizeof(__pyx_k__axisc), 0, 0, 1, 1}, {&__pyx_n_s__b, __pyx_k__b, sizeof(__pyx_k__b), 0, 0, 1, 1}, {&__pyx_n_s__bartlett, __pyx_k__bartlett, sizeof(__pyx_k__bartlett), 0, 0, 1, 1}, {&__pyx_n_s__base, __pyx_k__base, sizeof(__pyx_k__base), 0, 0, 1, 1}, {&__pyx_n_s__base_repr, __pyx_k__base_repr, sizeof(__pyx_k__base_repr), 0, 0, 1, 1}, {&__pyx_n_s__beta, __pyx_k__beta, sizeof(__pyx_k__beta), 0, 0, 1, 1}, {&__pyx_n_s__bias, __pyx_k__bias, sizeof(__pyx_k__bias), 0, 0, 1, 1}, {&__pyx_n_s__binary_repr, __pyx_k__binary_repr, sizeof(__pyx_k__binary_repr), 0, 0, 1, 1}, {&__pyx_n_s__bincount, __pyx_k__bincount, sizeof(__pyx_k__bincount), 0, 0, 1, 1}, {&__pyx_n_s__bins, __pyx_k__bins, sizeof(__pyx_k__bins), 0, 0, 1, 1}, {&__pyx_n_s__blackman, __pyx_k__blackman, sizeof(__pyx_k__blackman), 0, 0, 1, 1}, {&__pyx_n_s__bmat, __pyx_k__bmat, sizeof(__pyx_k__bmat), 0, 0, 1, 1}, {&__pyx_n_s__broadcast_arrays, __pyx_k__broadcast_arrays, sizeof(__pyx_k__broadcast_arrays), 0, 0, 1, 1}, {&__pyx_n_s__buffer, __pyx_k__buffer, sizeof(__pyx_k__buffer), 0, 0, 1, 1}, {&__pyx_n_s__byte_bounds, __pyx_k__byte_bounds, sizeof(__pyx_k__byte_bounds), 0, 0, 1, 1}, {&__pyx_n_s__can_cast, __pyx_k__can_cast, sizeof(__pyx_k__can_cast), 0, 0, 1, 1}, {&__pyx_n_s__case_sensitive, __pyx_k__case_sensitive, sizeof(__pyx_k__case_sensitive), 0, 0, 1, 1}, {&__pyx_n_s__char_, __pyx_k__char_, sizeof(__pyx_k__char_), 0, 0, 1, 1}, {&__pyx_n_s__choicelist, __pyx_k__choicelist, sizeof(__pyx_k__choicelist), 0, 0, 1, 1}, {&__pyx_n_s__choices, __pyx_k__choices, sizeof(__pyx_k__choices), 0, 0, 1, 1}, {&__pyx_n_s__choose, __pyx_k__choose, sizeof(__pyx_k__choose), 0, 0, 1, 1}, {&__pyx_n_s__column_stack, __pyx_k__column_stack, sizeof(__pyx_k__column_stack), 0, 0, 1, 1}, {&__pyx_n_s__comments, __pyx_k__comments, sizeof(__pyx_k__comments), 0, 0, 1, 1}, {&__pyx_n_s__common_type, __pyx_k__common_type, sizeof(__pyx_k__common_type), 0, 0, 1, 1}, {&__pyx_n_s__compare_chararrays, __pyx_k__compare_chararrays, sizeof(__pyx_k__compare_chararrays), 0, 0, 1, 1}, {&__pyx_n_s__compress, __pyx_k__compress, sizeof(__pyx_k__compress), 0, 0, 1, 1}, {&__pyx_n_s__concatenate, __pyx_k__concatenate, sizeof(__pyx_k__concatenate), 0, 0, 1, 1}, {&__pyx_n_s__condition, __pyx_k__condition, sizeof(__pyx_k__condition), 0, 0, 1, 1}, {&__pyx_n_s__condlist, __pyx_k__condlist, sizeof(__pyx_k__condlist), 0, 0, 1, 1}, {&__pyx_n_s__converters, __pyx_k__converters, sizeof(__pyx_k__converters), 0, 0, 1, 1}, {&__pyx_n_s__convolve, __pyx_k__convolve, sizeof(__pyx_k__convolve), 0, 0, 1, 1}, {&__pyx_n_s__copy, __pyx_k__copy, sizeof(__pyx_k__copy), 0, 0, 1, 1}, {&__pyx_n_s__corrcoef, __pyx_k__corrcoef, sizeof(__pyx_k__corrcoef), 0, 0, 1, 1}, {&__pyx_n_s__correlate, __pyx_k__correlate, sizeof(__pyx_k__correlate), 0, 0, 1, 1}, {&__pyx_n_s__count, __pyx_k__count, sizeof(__pyx_k__count), 0, 0, 1, 1}, {&__pyx_n_s__count_nonzero, __pyx_k__count_nonzero, sizeof(__pyx_k__count_nonzero), 0, 0, 1, 1}, {&__pyx_n_s__cov, __pyx_k__cov, sizeof(__pyx_k__cov), 0, 0, 1, 1}, {&__pyx_n_s__cross, __pyx_k__cross, sizeof(__pyx_k__cross), 0, 0, 1, 1}, {&__pyx_n_s__cumprod, __pyx_k__cumprod, sizeof(__pyx_k__cumprod), 0, 0, 1, 1}, {&__pyx_n_s__cumproduct, __pyx_k__cumproduct, sizeof(__pyx_k__cumproduct), 0, 0, 1, 1}, {&__pyx_n_s__cumsum, __pyx_k__cumsum, sizeof(__pyx_k__cumsum), 0, 0, 1, 1}, {&__pyx_n_s__d, __pyx_k__d, sizeof(__pyx_k__d), 0, 0, 1, 1}, {&__pyx_n_s__data, __pyx_k__data, sizeof(__pyx_k__data), 0, 0, 1, 1}, {&__pyx_n_s__datetime_data, __pyx_k__datetime_data, sizeof(__pyx_k__datetime_data), 0, 0, 1, 1}, {&__pyx_n_s__ddof, __pyx_k__ddof, sizeof(__pyx_k__ddof), 0, 0, 1, 1}, {&__pyx_n_s__decimals, __pyx_k__decimals, sizeof(__pyx_k__decimals), 0, 0, 1, 1}, {&__pyx_n_s__default, __pyx_k__default, sizeof(__pyx_k__default), 0, 0, 1, 1}, {&__pyx_n_s__defaultfmt, __pyx_k__defaultfmt, sizeof(__pyx_k__defaultfmt), 0, 0, 1, 1}, {&__pyx_n_s__deg, __pyx_k__deg, sizeof(__pyx_k__deg), 0, 0, 1, 1}, {&__pyx_n_s__delete, __pyx_k__delete, sizeof(__pyx_k__delete), 0, 0, 1, 1}, {&__pyx_n_s__deletechars, __pyx_k__deletechars, sizeof(__pyx_k__deletechars), 0, 0, 1, 1}, {&__pyx_n_s__delimiter, __pyx_k__delimiter, sizeof(__pyx_k__delimiter), 0, 0, 1, 1}, {&__pyx_n_s__density, __pyx_k__density, sizeof(__pyx_k__density), 0, 0, 1, 1}, {&__pyx_n_s__deprecate, __pyx_k__deprecate, sizeof(__pyx_k__deprecate), 0, 0, 1, 1}, {&__pyx_n_s__deprecate_with_doc, __pyx_k__deprecate_with_doc, sizeof(__pyx_k__deprecate_with_doc), 0, 0, 1, 1}, {&__pyx_n_s__device, __pyx_k__device, sizeof(__pyx_k__device), 0, 0, 1, 1}, {&__pyx_n_s__diag_indices, __pyx_k__diag_indices, sizeof(__pyx_k__diag_indices), 0, 0, 1, 1}, {&__pyx_n_s__diag_indices_from, __pyx_k__diag_indices_from, sizeof(__pyx_k__diag_indices_from), 0, 0, 1, 1}, {&__pyx_n_s__diagflat, __pyx_k__diagflat, sizeof(__pyx_k__diagflat), 0, 0, 1, 1}, {&__pyx_n_s__diff, __pyx_k__diff, sizeof(__pyx_k__diff), 0, 0, 1, 1}, {&__pyx_n_s__digitize, __pyx_k__digitize, sizeof(__pyx_k__digitize), 0, 0, 1, 1}, {&__pyx_n_s__dimensions, __pyx_k__dimensions, sizeof(__pyx_k__dimensions), 0, 0, 1, 1}, {&__pyx_n_s__dims, __pyx_k__dims, sizeof(__pyx_k__dims), 0, 0, 1, 1}, {&__pyx_n_s__discont, __pyx_k__discont, sizeof(__pyx_k__discont), 0, 0, 1, 1}, {&__pyx_n_s__disp, __pyx_k__disp, sizeof(__pyx_k__disp), 0, 0, 1, 1}, {&__pyx_n_s__divide, __pyx_k__divide, sizeof(__pyx_k__divide), 0, 0, 1, 1}, {&__pyx_n_s__doc, __pyx_k__doc, sizeof(__pyx_k__doc), 0, 0, 1, 1}, {&__pyx_n_s__docstring, __pyx_k__docstring, sizeof(__pyx_k__docstring), 0, 0, 1, 1}, {&__pyx_n_s__dsplit, __pyx_k__dsplit, sizeof(__pyx_k__dsplit), 0, 0, 1, 1}, {&__pyx_n_s__dstack, __pyx_k__dstack, sizeof(__pyx_k__dstack), 0, 0, 1, 1}, {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1}, {&__pyx_n_s__dx, __pyx_k__dx, sizeof(__pyx_k__dx), 0, 0, 1, 1}, {&__pyx_n_s__edgeitems, __pyx_k__edgeitems, sizeof(__pyx_k__edgeitems), 0, 0, 1, 1}, {&__pyx_n_s__ediff1d, __pyx_k__ediff1d, sizeof(__pyx_k__ediff1d), 0, 0, 1, 1}, {&__pyx_n_s__einsum, __pyx_k__einsum, sizeof(__pyx_k__einsum), 0, 0, 1, 1}, {&__pyx_n_s__end, __pyx_k__end, sizeof(__pyx_k__end), 0, 0, 1, 1}, {&__pyx_n_s__errobj, __pyx_k__errobj, sizeof(__pyx_k__errobj), 0, 0, 1, 1}, {&__pyx_n_s__excludelist, __pyx_k__excludelist, sizeof(__pyx_k__excludelist), 0, 0, 1, 1}, {&__pyx_n_s__expand_dims, __pyx_k__expand_dims, sizeof(__pyx_k__expand_dims), 0, 0, 1, 1}, {&__pyx_n_s__extract, __pyx_k__extract, sizeof(__pyx_k__extract), 0, 0, 1, 1}, {&__pyx_n_s__f, __pyx_k__f, sizeof(__pyx_k__f), 0, 0, 1, 1}, {&__pyx_n_s__fb, __pyx_k__fb, sizeof(__pyx_k__fb), 0, 0, 1, 1}, {&__pyx_n_s__file, __pyx_k__file, sizeof(__pyx_k__file), 0, 0, 1, 1}, {&__pyx_n_s__fill_diagonal, __pyx_k__fill_diagonal, sizeof(__pyx_k__fill_diagonal), 0, 0, 1, 1}, {&__pyx_n_s__filling_values, __pyx_k__filling_values, sizeof(__pyx_k__filling_values), 0, 0, 1, 1}, {&__pyx_n_s__filt, __pyx_k__filt, sizeof(__pyx_k__filt), 0, 0, 1, 1}, {&__pyx_n_s__finance_rate, __pyx_k__finance_rate, sizeof(__pyx_k__finance_rate), 0, 0, 1, 1}, {&__pyx_n_s__find_common_type, __pyx_k__find_common_type, sizeof(__pyx_k__find_common_type), 0, 0, 1, 1}, {&__pyx_n_s__fix, __pyx_k__fix, sizeof(__pyx_k__fix), 0, 0, 1, 1}, {&__pyx_n_s__flatnonzero, __pyx_k__flatnonzero, sizeof(__pyx_k__flatnonzero), 0, 0, 1, 1}, {&__pyx_n_s__fliplr, __pyx_k__fliplr, sizeof(__pyx_k__fliplr), 0, 0, 1, 1}, {&__pyx_n_s__flipud, __pyx_k__flipud, sizeof(__pyx_k__flipud), 0, 0, 1, 1}, {&__pyx_n_s__float64, __pyx_k__float64, sizeof(__pyx_k__float64), 0, 0, 1, 1}, {&__pyx_n_s__fmt, __pyx_k__fmt, sizeof(__pyx_k__fmt), 0, 0, 1, 1}, {&__pyx_n_s__fname, __pyx_k__fname, sizeof(__pyx_k__fname), 0, 0, 1, 1}, {&__pyx_n_s__fp, __pyx_k__fp, sizeof(__pyx_k__fp), 0, 0, 1, 1}, {&__pyx_n_s__frombuffer, __pyx_k__frombuffer, sizeof(__pyx_k__frombuffer), 0, 0, 1, 1}, {&__pyx_n_s__fromfile, __pyx_k__fromfile, sizeof(__pyx_k__fromfile), 0, 0, 1, 1}, {&__pyx_n_s__fromiter, __pyx_k__fromiter, sizeof(__pyx_k__fromiter), 0, 0, 1, 1}, {&__pyx_n_s__frompyfunc, __pyx_k__frompyfunc, sizeof(__pyx_k__frompyfunc), 0, 0, 1, 1}, {&__pyx_n_s__fromregex, __pyx_k__fromregex, sizeof(__pyx_k__fromregex), 0, 0, 1, 1}, {&__pyx_n_s__fromstring, __pyx_k__fromstring, sizeof(__pyx_k__fromstring), 0, 0, 1, 1}, {&__pyx_n_s__full, __pyx_k__full, sizeof(__pyx_k__full), 0, 0, 1, 1}, {&__pyx_n_s__func, __pyx_k__func, sizeof(__pyx_k__func), 0, 0, 1, 1}, {&__pyx_n_s__func1d, __pyx_k__func1d, sizeof(__pyx_k__func1d), 0, 0, 1, 1}, {&__pyx_n_s__funclist, __pyx_k__funclist, sizeof(__pyx_k__funclist), 0, 0, 1, 1}, {&__pyx_n_s__fv, __pyx_k__fv, sizeof(__pyx_k__fv), 0, 0, 1, 1}, {&__pyx_n_s__gdict, __pyx_k__gdict, sizeof(__pyx_k__gdict), 0, 0, 1, 1}, {&__pyx_n_s__genfromtxt, __pyx_k__genfromtxt, sizeof(__pyx_k__genfromtxt), 0, 0, 1, 1}, {&__pyx_n_s__get_array_wrap, __pyx_k__get_array_wrap, sizeof(__pyx_k__get_array_wrap), 0, 0, 1, 1}, {&__pyx_n_s__get_include, __pyx_k__get_include, sizeof(__pyx_k__get_include), 0, 0, 1, 1}, {&__pyx_n_s__get_printoptions, __pyx_k__get_printoptions, sizeof(__pyx_k__get_printoptions), 0, 0, 1, 1}, {&__pyx_n_s__getbuffer, __pyx_k__getbuffer, sizeof(__pyx_k__getbuffer), 0, 0, 1, 1}, {&__pyx_n_s__getbufsize, __pyx_k__getbufsize, sizeof(__pyx_k__getbufsize), 0, 0, 1, 1}, {&__pyx_n_s__geterr, __pyx_k__geterr, sizeof(__pyx_k__geterr), 0, 0, 1, 1}, {&__pyx_n_s__geterrcall, __pyx_k__geterrcall, sizeof(__pyx_k__geterrcall), 0, 0, 1, 1}, {&__pyx_n_s__geterrobj, __pyx_k__geterrobj, sizeof(__pyx_k__geterrobj), 0, 0, 1, 1}, {&__pyx_n_s__gradient, __pyx_k__gradient, sizeof(__pyx_k__gradient), 0, 0, 1, 1}, {&__pyx_n_s__guess, __pyx_k__guess, sizeof(__pyx_k__guess), 0, 0, 1, 1}, {&__pyx_n_s__hamming, __pyx_k__hamming, sizeof(__pyx_k__hamming), 0, 0, 1, 1}, {&__pyx_n_s__hanning, __pyx_k__hanning, sizeof(__pyx_k__hanning), 0, 0, 1, 1}, {&__pyx_n_s__histogram, __pyx_k__histogram, sizeof(__pyx_k__histogram), 0, 0, 1, 1}, {&__pyx_n_s__histogram2d, __pyx_k__histogram2d, sizeof(__pyx_k__histogram2d), 0, 0, 1, 1}, {&__pyx_n_s__histogramdd, __pyx_k__histogramdd, sizeof(__pyx_k__histogramdd), 0, 0, 1, 1}, {&__pyx_n_s__hsplit, __pyx_k__hsplit, sizeof(__pyx_k__hsplit), 0, 0, 1, 1}, {&__pyx_n_s__hstack, __pyx_k__hstack, sizeof(__pyx_k__hstack), 0, 0, 1, 1}, {&__pyx_n_s__i0, __pyx_k__i0, sizeof(__pyx_k__i0), 0, 0, 1, 1}, {&__pyx_n_s__imag, __pyx_k__imag, sizeof(__pyx_k__imag), 0, 0, 1, 1}, {&__pyx_n_s__import_modules, __pyx_k__import_modules, sizeof(__pyx_k__import_modules), 0, 0, 1, 1}, {&__pyx_n_s__in1d, __pyx_k__in1d, sizeof(__pyx_k__in1d), 0, 0, 1, 1}, {&__pyx_n_s__ind, __pyx_k__ind, sizeof(__pyx_k__ind), 0, 0, 1, 1}, {&__pyx_n_s__indices, __pyx_k__indices, sizeof(__pyx_k__indices), 0, 0, 1, 1}, {&__pyx_n_s__indices_or_sections, __pyx_k__indices_or_sections, sizeof(__pyx_k__indices_or_sections), 0, 0, 1, 1}, {&__pyx_n_s__info, __pyx_k__info, sizeof(__pyx_k__info), 0, 0, 1, 1}, {&__pyx_n_s__infstr, __pyx_k__infstr, sizeof(__pyx_k__infstr), 0, 0, 1, 1}, {&__pyx_n_s__inner, __pyx_k__inner, sizeof(__pyx_k__inner), 0, 0, 1, 1}, {&__pyx_n_s__insert, __pyx_k__insert, sizeof(__pyx_k__insert), 0, 0, 1, 1}, {&__pyx_n_s__int_asbuffer, __pyx_k__int_asbuffer, sizeof(__pyx_k__int_asbuffer), 0, 0, 1, 1}, {&__pyx_n_s__interp, __pyx_k__interp, sizeof(__pyx_k__interp), 0, 0, 1, 1}, {&__pyx_n_s__intersect1d, __pyx_k__intersect1d, sizeof(__pyx_k__intersect1d), 0, 0, 1, 1}, {&__pyx_n_s__invalid, __pyx_k__invalid, sizeof(__pyx_k__invalid), 0, 0, 1, 1}, {&__pyx_n_s__invalid_raise, __pyx_k__invalid_raise, sizeof(__pyx_k__invalid_raise), 0, 0, 1, 1}, {&__pyx_n_s__ipmt, __pyx_k__ipmt, sizeof(__pyx_k__ipmt), 0, 0, 1, 1}, {&__pyx_n_s__irr, __pyx_k__irr, sizeof(__pyx_k__irr), 0, 0, 1, 1}, {&__pyx_n_s__iscomplex, __pyx_k__iscomplex, sizeof(__pyx_k__iscomplex), 0, 0, 1, 1}, {&__pyx_n_s__iscomplexobj, __pyx_k__iscomplexobj, sizeof(__pyx_k__iscomplexobj), 0, 0, 1, 1}, {&__pyx_n_s__isfortran, __pyx_k__isfortran, sizeof(__pyx_k__isfortran), 0, 0, 1, 1}, {&__pyx_n_s__isneginf, __pyx_k__isneginf, sizeof(__pyx_k__isneginf), 0, 0, 1, 1}, {&__pyx_n_s__isposinf, __pyx_k__isposinf, sizeof(__pyx_k__isposinf), 0, 0, 1, 1}, {&__pyx_n_s__isreal, __pyx_k__isreal, sizeof(__pyx_k__isreal), 0, 0, 1, 1}, {&__pyx_n_s__isrealobj, __pyx_k__isrealobj, sizeof(__pyx_k__isrealobj), 0, 0, 1, 1}, {&__pyx_n_s__isscalar, __pyx_k__isscalar, sizeof(__pyx_k__isscalar), 0, 0, 1, 1}, {&__pyx_n_s__issctype, __pyx_k__issctype, sizeof(__pyx_k__issctype), 0, 0, 1, 1}, {&__pyx_n_s__issubclass_, __pyx_k__issubclass_, sizeof(__pyx_k__issubclass_), 0, 0, 1, 1}, {&__pyx_n_s__issubdtype, __pyx_k__issubdtype, sizeof(__pyx_k__issubdtype), 0, 0, 1, 1}, {&__pyx_n_s__issubsctype, __pyx_k__issubsctype, sizeof(__pyx_k__issubsctype), 0, 0, 1, 1}, {&__pyx_n_s__iterable, __pyx_k__iterable, sizeof(__pyx_k__iterable), 0, 0, 1, 1}, {&__pyx_n_s__ix_, __pyx_k__ix_, sizeof(__pyx_k__ix_), 0, 0, 1, 1}, {&__pyx_n_s__k, __pyx_k__k, sizeof(__pyx_k__k), 0, 0, 1, 1}, {&__pyx_n_s__kaiser, __pyx_k__kaiser, sizeof(__pyx_k__kaiser), 0, 0, 1, 1}, {&__pyx_n_s__keys, __pyx_k__keys, sizeof(__pyx_k__keys), 0, 0, 1, 1}, {&__pyx_n_s__kind, __pyx_k__kind, sizeof(__pyx_k__kind), 0, 0, 1, 1}, {&__pyx_n_s__kron, __pyx_k__kron, sizeof(__pyx_k__kron), 0, 0, 1, 1}, {&__pyx_n_s__ldict, __pyx_k__ldict, sizeof(__pyx_k__ldict), 0, 0, 1, 1}, {&__pyx_n_s__left, __pyx_k__left, sizeof(__pyx_k__left), 0, 0, 1, 1}, {&__pyx_n_s__lexsort, __pyx_k__lexsort, sizeof(__pyx_k__lexsort), 0, 0, 1, 1}, {&__pyx_n_s__linefeed, __pyx_k__linefeed, sizeof(__pyx_k__linefeed), 0, 0, 1, 1}, {&__pyx_n_s__linewidth, __pyx_k__linewidth, sizeof(__pyx_k__linewidth), 0, 0, 1, 1}, {&__pyx_n_s__load, __pyx_k__load, sizeof(__pyx_k__load), 0, 0, 1, 1}, {&__pyx_n_s__loads, __pyx_k__loads, sizeof(__pyx_k__loads), 0, 0, 1, 1}, {&__pyx_n_s__loadtxt, __pyx_k__loadtxt, sizeof(__pyx_k__loadtxt), 0, 0, 1, 1}, {&__pyx_n_s__lookfor, __pyx_k__lookfor, sizeof(__pyx_k__lookfor), 0, 0, 1, 1}, {&__pyx_n_s__loose, __pyx_k__loose, sizeof(__pyx_k__loose), 0, 0, 1, 1}, {&__pyx_n_s__m, __pyx_k__m, sizeof(__pyx_k__m), 0, 0, 1, 1}, {&__pyx_n_s__mafromtxt, __pyx_k__mafromtxt, sizeof(__pyx_k__mafromtxt), 0, 0, 1, 1}, {&__pyx_n_s__mask, __pyx_k__mask, sizeof(__pyx_k__mask), 0, 0, 1, 1}, {&__pyx_n_s__mask_func, __pyx_k__mask_func, sizeof(__pyx_k__mask_func), 0, 0, 1, 1}, {&__pyx_n_s__mask_indices, __pyx_k__mask_indices, sizeof(__pyx_k__mask_indices), 0, 0, 1, 1}, {&__pyx_n_s__mat, __pyx_k__mat, sizeof(__pyx_k__mat), 0, 0, 1, 1}, {&__pyx_n_s__max, __pyx_k__max, sizeof(__pyx_k__max), 0, 0, 1, 1}, {&__pyx_n_s__max_line_width, __pyx_k__max_line_width, sizeof(__pyx_k__max_line_width), 0, 0, 1, 1}, {&__pyx_n_s__maximum_sctype, __pyx_k__maximum_sctype, sizeof(__pyx_k__maximum_sctype), 0, 0, 1, 1}, {&__pyx_n_s__maxiter, __pyx_k__maxiter, sizeof(__pyx_k__maxiter), 0, 0, 1, 1}, {&__pyx_n_s__maxwidth, __pyx_k__maxwidth, sizeof(__pyx_k__maxwidth), 0, 0, 1, 1}, {&__pyx_n_s__may_share_memory, __pyx_k__may_share_memory, sizeof(__pyx_k__may_share_memory), 0, 0, 1, 1}, {&__pyx_n_s__mean, __pyx_k__mean, sizeof(__pyx_k__mean), 0, 0, 1, 1}, {&__pyx_n_s__median, __pyx_k__median, sizeof(__pyx_k__median), 0, 0, 1, 1}, {&__pyx_n_s__mesg, __pyx_k__mesg, sizeof(__pyx_k__mesg), 0, 0, 1, 1}, {&__pyx_n_s__meshgrid, __pyx_k__meshgrid, sizeof(__pyx_k__meshgrid), 0, 0, 1, 1}, {&__pyx_n_s__min, __pyx_k__min, sizeof(__pyx_k__min), 0, 0, 1, 1}, {&__pyx_n_s__min_scalar_type, __pyx_k__min_scalar_type, sizeof(__pyx_k__min_scalar_type), 0, 0, 1, 1}, {&__pyx_n_s__minlength, __pyx_k__minlength, sizeof(__pyx_k__minlength), 0, 0, 1, 1}, {&__pyx_n_s__mintypecode, __pyx_k__mintypecode, sizeof(__pyx_k__mintypecode), 0, 0, 1, 1}, {&__pyx_n_s__mirr, __pyx_k__mirr, sizeof(__pyx_k__mirr), 0, 0, 1, 1}, {&__pyx_n_s__missing, __pyx_k__missing, sizeof(__pyx_k__missing), 0, 0, 1, 1}, {&__pyx_n_s__missing_values, __pyx_k__missing_values, sizeof(__pyx_k__missing_values), 0, 0, 1, 1}, {&__pyx_n_s__mmap_mode, __pyx_k__mmap_mode, sizeof(__pyx_k__mmap_mode), 0, 0, 1, 1}, {&__pyx_n_s__mode, __pyx_k__mode, sizeof(__pyx_k__mode), 0, 0, 1, 1}, {&__pyx_n_s__module, __pyx_k__module, sizeof(__pyx_k__module), 0, 0, 1, 1}, {&__pyx_n_s__msg, __pyx_k__msg, sizeof(__pyx_k__msg), 0, 0, 1, 1}, {&__pyx_n_s__msort, __pyx_k__msort, sizeof(__pyx_k__msort), 0, 0, 1, 1}, {&__pyx_n_s__multi_index, __pyx_k__multi_index, sizeof(__pyx_k__multi_index), 0, 0, 1, 1}, {&__pyx_n_s__myarray, __pyx_k__myarray, sizeof(__pyx_k__myarray), 0, 0, 1, 1}, {&__pyx_n_s__n, __pyx_k__n, sizeof(__pyx_k__n), 0, 0, 1, 1}, {&__pyx_n_s__names, __pyx_k__names, sizeof(__pyx_k__names), 0, 0, 1, 1}, {&__pyx_n_s__nan_to_num, __pyx_k__nan_to_num, sizeof(__pyx_k__nan_to_num), 0, 0, 1, 1}, {&__pyx_n_s__nanargmax, __pyx_k__nanargmax, sizeof(__pyx_k__nanargmax), 0, 0, 1, 1}, {&__pyx_n_s__nanargmin, __pyx_k__nanargmin, sizeof(__pyx_k__nanargmin), 0, 0, 1, 1}, {&__pyx_n_s__nanmax, __pyx_k__nanmax, sizeof(__pyx_k__nanmax), 0, 0, 1, 1}, {&__pyx_n_s__nanmin, __pyx_k__nanmin, sizeof(__pyx_k__nanmin), 0, 0, 1, 1}, {&__pyx_n_s__nanstr, __pyx_k__nanstr, sizeof(__pyx_k__nanstr), 0, 0, 1, 1}, {&__pyx_n_s__nansum, __pyx_k__nansum, sizeof(__pyx_k__nansum), 0, 0, 1, 1}, {&__pyx_n_s__ndfromtxt, __pyx_k__ndfromtxt, sizeof(__pyx_k__ndfromtxt), 0, 0, 1, 1}, {&__pyx_n_s__ndim, __pyx_k__ndim, sizeof(__pyx_k__ndim), 0, 0, 1, 1}, {&__pyx_n_s__ndmin, __pyx_k__ndmin, sizeof(__pyx_k__ndmin), 0, 0, 1, 1}, {&__pyx_n_s__nested_iters, __pyx_k__nested_iters, sizeof(__pyx_k__nested_iters), 0, 0, 1, 1}, {&__pyx_n_s__new_shape, __pyx_k__new_shape, sizeof(__pyx_k__new_shape), 0, 0, 1, 1}, {&__pyx_n_s__newbuffer, __pyx_k__newbuffer, sizeof(__pyx_k__newbuffer), 0, 0, 1, 1}, {&__pyx_n_s__newline, __pyx_k__newline, sizeof(__pyx_k__newline), 0, 0, 1, 1}, {&__pyx_n_s__newshape, __pyx_k__newshape, sizeof(__pyx_k__newshape), 0, 0, 1, 1}, {&__pyx_n_s__nin, __pyx_k__nin, sizeof(__pyx_k__nin), 0, 0, 1, 1}, {&__pyx_n_s__nonzero, __pyx_k__nonzero, sizeof(__pyx_k__nonzero), 0, 0, 1, 1}, {&__pyx_n_s__normed, __pyx_k__normed, sizeof(__pyx_k__normed), 0, 0, 1, 1}, {&__pyx_n_s__nout, __pyx_k__nout, sizeof(__pyx_k__nout), 0, 0, 1, 1}, {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1}, {&__pyx_n_s__nper, __pyx_k__nper, sizeof(__pyx_k__nper), 0, 0, 1, 1}, {&__pyx_n_s__npv, __pyx_k__npv, sizeof(__pyx_k__npv), 0, 0, 1, 1}, {&__pyx_n_s__num, __pyx_k__num, sizeof(__pyx_k__num), 0, 0, 1, 1}, {&__pyx_n_s__number, __pyx_k__number, sizeof(__pyx_k__number), 0, 0, 1, 1}, {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1}, {&__pyx_n_s__obj, __pyx_k__obj, sizeof(__pyx_k__obj), 0, 0, 1, 1}, {&__pyx_n_s__obj2sctype, __pyx_k__obj2sctype, sizeof(__pyx_k__obj2sctype), 0, 0, 1, 1}, {&__pyx_n_s__object, __pyx_k__object, sizeof(__pyx_k__object), 0, 0, 1, 1}, {&__pyx_n_s__offset, __pyx_k__offset, sizeof(__pyx_k__offset), 0, 0, 1, 1}, {&__pyx_n_s__old_behavior, __pyx_k__old_behavior, sizeof(__pyx_k__old_behavior), 0, 0, 1, 1}, {&__pyx_n_s__order, __pyx_k__order, sizeof(__pyx_k__order), 0, 0, 1, 1}, {&__pyx_n_s__out, __pyx_k__out, sizeof(__pyx_k__out), 0, 0, 1, 1}, {&__pyx_n_s__outer, __pyx_k__outer, sizeof(__pyx_k__outer), 0, 0, 1, 1}, {&__pyx_n_s__output, __pyx_k__output, sizeof(__pyx_k__output), 0, 0, 1, 1}, {&__pyx_n_s__over, __pyx_k__over, sizeof(__pyx_k__over), 0, 0, 1, 1}, {&__pyx_n_s__overwrite_input, __pyx_k__overwrite_input, sizeof(__pyx_k__overwrite_input), 0, 0, 1, 1}, {&__pyx_n_s__p, __pyx_k__p, sizeof(__pyx_k__p), 0, 0, 1, 1}, {&__pyx_n_s__packbits, __pyx_k__packbits, sizeof(__pyx_k__packbits), 0, 0, 1, 1}, {&__pyx_n_s__padding, __pyx_k__padding, sizeof(__pyx_k__padding), 0, 0, 1, 1}, {&__pyx_n_s__per, __pyx_k__per, sizeof(__pyx_k__per), 0, 0, 1, 1}, {&__pyx_n_s__percentile, __pyx_k__percentile, sizeof(__pyx_k__percentile), 0, 0, 1, 1}, {&__pyx_n_s__piecewise, __pyx_k__piecewise, sizeof(__pyx_k__piecewise), 0, 0, 1, 1}, {&__pyx_n_s__pkgload, __pyx_k__pkgload, sizeof(__pyx_k__pkgload), 0, 0, 1, 1}, {&__pyx_n_s__place, __pyx_k__place, sizeof(__pyx_k__place), 0, 0, 1, 1}, {&__pyx_n_s__pmt, __pyx_k__pmt, sizeof(__pyx_k__pmt), 0, 0, 1, 1}, {&__pyx_n_s__poly, __pyx_k__poly, sizeof(__pyx_k__poly), 0, 0, 1, 1}, {&__pyx_n_s__polyadd, __pyx_k__polyadd, sizeof(__pyx_k__polyadd), 0, 0, 1, 1}, {&__pyx_n_s__polyder, __pyx_k__polyder, sizeof(__pyx_k__polyder), 0, 0, 1, 1}, {&__pyx_n_s__polydiv, __pyx_k__polydiv, sizeof(__pyx_k__polydiv), 0, 0, 1, 1}, {&__pyx_n_s__polyfit, __pyx_k__polyfit, sizeof(__pyx_k__polyfit), 0, 0, 1, 1}, {&__pyx_n_s__polyint, __pyx_k__polyint, sizeof(__pyx_k__polyint), 0, 0, 1, 1}, {&__pyx_n_s__polymul, __pyx_k__polymul, sizeof(__pyx_k__polymul), 0, 0, 1, 1}, {&__pyx_n_s__polysub, __pyx_k__polysub, sizeof(__pyx_k__polysub), 0, 0, 1, 1}, {&__pyx_n_s__polyval, __pyx_k__polyval, sizeof(__pyx_k__polyval), 0, 0, 1, 1}, {&__pyx_n_s__ppmt, __pyx_k__ppmt, sizeof(__pyx_k__ppmt), 0, 0, 1, 1}, {&__pyx_n_s__precision, __pyx_k__precision, sizeof(__pyx_k__precision), 0, 0, 1, 1}, {&__pyx_n_s__prefix, __pyx_k__prefix, sizeof(__pyx_k__prefix), 0, 0, 1, 1}, {&__pyx_n_s__prod, __pyx_k__prod, sizeof(__pyx_k__prod), 0, 0, 1, 1}, {&__pyx_n_s__product, __pyx_k__product, sizeof(__pyx_k__product), 0, 0, 1, 1}, {&__pyx_n_s__promote_types, __pyx_k__promote_types, sizeof(__pyx_k__promote_types), 0, 0, 1, 1}, {&__pyx_n_s__ptp, __pyx_k__ptp, sizeof(__pyx_k__ptp), 0, 0, 1, 1}, {&__pyx_n_s__put, __pyx_k__put, sizeof(__pyx_k__put), 0, 0, 1, 1}, {&__pyx_n_s__putmask, __pyx_k__putmask, sizeof(__pyx_k__putmask), 0, 0, 1, 1}, {&__pyx_n_s__pv, __pyx_k__pv, sizeof(__pyx_k__pv), 0, 0, 1, 1}, {&__pyx_n_s__q, __pyx_k__q, sizeof(__pyx_k__q), 0, 0, 1, 1}, {&__pyx_n_s__quicksort, __pyx_k__quicksort, sizeof(__pyx_k__quicksort), 0, 0, 1, 1}, {&__pyx_n_s__raise, __pyx_k__raise, sizeof(__pyx_k__raise), 0, 0, 1, 1}, {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1}, {&__pyx_n_s__rank, __pyx_k__rank, sizeof(__pyx_k__rank), 0, 0, 1, 1}, {&__pyx_n_s__rate, __pyx_k__rate, sizeof(__pyx_k__rate), 0, 0, 1, 1}, {&__pyx_n_s__ravel, __pyx_k__ravel, sizeof(__pyx_k__ravel), 0, 0, 1, 1}, {&__pyx_n_s__ravel_multi_index, __pyx_k__ravel_multi_index, sizeof(__pyx_k__ravel_multi_index), 0, 0, 1, 1}, {&__pyx_n_s__rcond, __pyx_k__rcond, sizeof(__pyx_k__rcond), 0, 0, 1, 1}, {&__pyx_n_s__real, __pyx_k__real, sizeof(__pyx_k__real), 0, 0, 1, 1}, {&__pyx_n_s__real_if_close, __pyx_k__real_if_close, sizeof(__pyx_k__real_if_close), 0, 0, 1, 1}, {&__pyx_n_s__recfromcsv, __pyx_k__recfromcsv, sizeof(__pyx_k__recfromcsv), 0, 0, 1, 1}, {&__pyx_n_s__recfromtxt, __pyx_k__recfromtxt, sizeof(__pyx_k__recfromtxt), 0, 0, 1, 1}, {&__pyx_n_s__regenerate, __pyx_k__regenerate, sizeof(__pyx_k__regenerate), 0, 0, 1, 1}, {&__pyx_n_s__regexp, __pyx_k__regexp, sizeof(__pyx_k__regexp), 0, 0, 1, 1}, {&__pyx_n_s__reinvest_rate, __pyx_k__reinvest_rate, sizeof(__pyx_k__reinvest_rate), 0, 0, 1, 1}, {&__pyx_n_s__rep, __pyx_k__rep, sizeof(__pyx_k__rep), 0, 0, 1, 1}, {&__pyx_n_s__repeat, __pyx_k__repeat, sizeof(__pyx_k__repeat), 0, 0, 1, 1}, {&__pyx_n_s__repeats, __pyx_k__repeats, sizeof(__pyx_k__repeats), 0, 0, 1, 1}, {&__pyx_n_s__replace_space, __pyx_k__replace_space, sizeof(__pyx_k__replace_space), 0, 0, 1, 1}, {&__pyx_n_s__repr, __pyx_k__repr, sizeof(__pyx_k__repr), 0, 0, 1, 1}, {&__pyx_n_s__reps, __pyx_k__reps, sizeof(__pyx_k__reps), 0, 0, 1, 1}, {&__pyx_n_s__require, __pyx_k__require, sizeof(__pyx_k__require), 0, 0, 1, 1}, {&__pyx_n_s__requirements, __pyx_k__requirements, sizeof(__pyx_k__requirements), 0, 0, 1, 1}, {&__pyx_n_s__reshape, __pyx_k__reshape, sizeof(__pyx_k__reshape), 0, 0, 1, 1}, {&__pyx_n_s__resize, __pyx_k__resize, sizeof(__pyx_k__resize), 0, 0, 1, 1}, {&__pyx_n_s__restoredot, __pyx_k__restoredot, sizeof(__pyx_k__restoredot), 0, 0, 1, 1}, {&__pyx_n_s__result_type, __pyx_k__result_type, sizeof(__pyx_k__result_type), 0, 0, 1, 1}, {&__pyx_n_s__return_index, __pyx_k__return_index, sizeof(__pyx_k__return_index), 0, 0, 1, 1}, {&__pyx_n_s__return_inverse, __pyx_k__return_inverse, sizeof(__pyx_k__return_inverse), 0, 0, 1, 1}, {&__pyx_n_s__returned, __pyx_k__returned, sizeof(__pyx_k__returned), 0, 0, 1, 1}, {&__pyx_n_s__right, __pyx_k__right, sizeof(__pyx_k__right), 0, 0, 1, 1}, {&__pyx_n_s__roll, __pyx_k__roll, sizeof(__pyx_k__roll), 0, 0, 1, 1}, {&__pyx_n_s__rollaxis, __pyx_k__rollaxis, sizeof(__pyx_k__rollaxis), 0, 0, 1, 1}, {&__pyx_n_s__roots, __pyx_k__roots, sizeof(__pyx_k__roots), 0, 0, 1, 1}, {&__pyx_n_s__rot90, __pyx_k__rot90, sizeof(__pyx_k__rot90), 0, 0, 1, 1}, {&__pyx_n_s__round, __pyx_k__round, sizeof(__pyx_k__round), 0, 0, 1, 1}, {&__pyx_n_s__round_, __pyx_k__round_, sizeof(__pyx_k__round_), 0, 0, 1, 1}, {&__pyx_n_s__row_stack, __pyx_k__row_stack, sizeof(__pyx_k__row_stack), 0, 0, 1, 1}, {&__pyx_n_s__rowvar, __pyx_k__rowvar, sizeof(__pyx_k__rowvar), 0, 0, 1, 1}, {&__pyx_n_s__rtol, __pyx_k__rtol, sizeof(__pyx_k__rtol), 0, 0, 1, 1}, {&__pyx_n_s__safe_eval, __pyx_k__safe_eval, sizeof(__pyx_k__safe_eval), 0, 0, 1, 1}, {&__pyx_n_s__sample, __pyx_k__sample, sizeof(__pyx_k__sample), 0, 0, 1, 1}, {&__pyx_n_s__save, __pyx_k__save, sizeof(__pyx_k__save), 0, 0, 1, 1}, {&__pyx_n_s__savetxt, __pyx_k__savetxt, sizeof(__pyx_k__savetxt), 0, 0, 1, 1}, {&__pyx_n_s__savez, __pyx_k__savez, sizeof(__pyx_k__savez), 0, 0, 1, 1}, {&__pyx_n_s__savez_compressed, __pyx_k__savez_compressed, sizeof(__pyx_k__savez_compressed), 0, 0, 1, 1}, {&__pyx_n_s__scalar_types, __pyx_k__scalar_types, sizeof(__pyx_k__scalar_types), 0, 0, 1, 1}, {&__pyx_n_s__sctype, __pyx_k__sctype, sizeof(__pyx_k__sctype), 0, 0, 1, 1}, {&__pyx_n_s__sctype2char, __pyx_k__sctype2char, sizeof(__pyx_k__sctype2char), 0, 0, 1, 1}, {&__pyx_n_s__searchsorted, __pyx_k__searchsorted, sizeof(__pyx_k__searchsorted), 0, 0, 1, 1}, {&__pyx_n_s__select, __pyx_k__select, sizeof(__pyx_k__select), 0, 0, 1, 1}, {&__pyx_n_s__sep, __pyx_k__sep, sizeof(__pyx_k__sep), 0, 0, 1, 1}, {&__pyx_n_s__separator, __pyx_k__separator, sizeof(__pyx_k__separator), 0, 0, 1, 1}, {&__pyx_n_s__seq_of_zeros, __pyx_k__seq_of_zeros, sizeof(__pyx_k__seq_of_zeros), 0, 0, 1, 1}, {&__pyx_n_s__set_numeric_ops, __pyx_k__set_numeric_ops, sizeof(__pyx_k__set_numeric_ops), 0, 0, 1, 1}, {&__pyx_n_s__set_printoptions, __pyx_k__set_printoptions, sizeof(__pyx_k__set_printoptions), 0, 0, 1, 1}, {&__pyx_n_s__set_string_function, __pyx_k__set_string_function, sizeof(__pyx_k__set_string_function), 0, 0, 1, 1}, {&__pyx_n_s__setbufsize, __pyx_k__setbufsize, sizeof(__pyx_k__setbufsize), 0, 0, 1, 1}, {&__pyx_n_s__setdiff1d, __pyx_k__setdiff1d, sizeof(__pyx_k__setdiff1d), 0, 0, 1, 1}, {&__pyx_n_s__seterr, __pyx_k__seterr, sizeof(__pyx_k__seterr), 0, 0, 1, 1}, {&__pyx_n_s__seterrcall, __pyx_k__seterrcall, sizeof(__pyx_k__seterrcall), 0, 0, 1, 1}, {&__pyx_n_s__seterrobj, __pyx_k__seterrobj, sizeof(__pyx_k__seterrobj), 0, 0, 1, 1}, {&__pyx_n_s__setxor1d, __pyx_k__setxor1d, sizeof(__pyx_k__setxor1d), 0, 0, 1, 1}, {&__pyx_n_s__shift, __pyx_k__shift, sizeof(__pyx_k__shift), 0, 0, 1, 1}, {&__pyx_n_s__show_config, __pyx_k__show_config, sizeof(__pyx_k__show_config), 0, 0, 1, 1}, {&__pyx_n_s__side, __pyx_k__side, sizeof(__pyx_k__side), 0, 0, 1, 1}, {&__pyx_n_s__sinc, __pyx_k__sinc, sizeof(__pyx_k__sinc), 0, 0, 1, 1}, {&__pyx_n_s__size, __pyx_k__size, sizeof(__pyx_k__size), 0, 0, 1, 1}, {&__pyx_n_s__skip_footer, __pyx_k__skip_footer, sizeof(__pyx_k__skip_footer), 0, 0, 1, 1}, {&__pyx_n_s__skip_header, __pyx_k__skip_header, sizeof(__pyx_k__skip_header), 0, 0, 1, 1}, {&__pyx_n_s__skiprows, __pyx_k__skiprows, sizeof(__pyx_k__skiprows), 0, 0, 1, 1}, {&__pyx_n_s__sometrue, __pyx_k__sometrue, sizeof(__pyx_k__sometrue), 0, 0, 1, 1}, {&__pyx_n_s__sort, __pyx_k__sort, sizeof(__pyx_k__sort), 0, 0, 1, 1}, {&__pyx_n_s__sort_complex, __pyx_k__sort_complex, sizeof(__pyx_k__sort_complex), 0, 0, 1, 1}, {&__pyx_n_s__source, __pyx_k__source, sizeof(__pyx_k__source), 0, 0, 1, 1}, {&__pyx_n_s__split, __pyx_k__split, sizeof(__pyx_k__split), 0, 0, 1, 1}, {&__pyx_n_s__squeeze, __pyx_k__squeeze, sizeof(__pyx_k__squeeze), 0, 0, 1, 1}, {&__pyx_n_s__start, __pyx_k__start, sizeof(__pyx_k__start), 0, 0, 1, 1}, {&__pyx_n_s__std, __pyx_k__std, sizeof(__pyx_k__std), 0, 0, 1, 1}, {&__pyx_n_s__stdout, __pyx_k__stdout, sizeof(__pyx_k__stdout), 0, 0, 1, 1}, {&__pyx_n_s__string, __pyx_k__string, sizeof(__pyx_k__string), 0, 0, 1, 1}, {&__pyx_n_s__style, __pyx_k__style, sizeof(__pyx_k__style), 0, 0, 1, 1}, {&__pyx_n_s__subok, __pyx_k__subok, sizeof(__pyx_k__subok), 0, 0, 1, 1}, {&__pyx_n_s__sum, __pyx_k__sum, sizeof(__pyx_k__sum), 0, 0, 1, 1}, {&__pyx_n_s__suppress, __pyx_k__suppress, sizeof(__pyx_k__suppress), 0, 0, 1, 1}, {&__pyx_n_s__suppress_small, __pyx_k__suppress_small, sizeof(__pyx_k__suppress_small), 0, 0, 1, 1}, {&__pyx_n_s__swapaxes, __pyx_k__swapaxes, sizeof(__pyx_k__swapaxes), 0, 0, 1, 1}, {&__pyx_n_s__sys, __pyx_k__sys, sizeof(__pyx_k__sys), 0, 0, 1, 1}, {&__pyx_n_s__t, __pyx_k__t, sizeof(__pyx_k__t), 0, 0, 1, 1}, {&__pyx_n_s__take, __pyx_k__take, sizeof(__pyx_k__take), 0, 0, 1, 1}, {&__pyx_n_s__tensordot, __pyx_k__tensordot, sizeof(__pyx_k__tensordot), 0, 0, 1, 1}, {&__pyx_n_s__threshold, __pyx_k__threshold, sizeof(__pyx_k__threshold), 0, 0, 1, 1}, {&__pyx_n_s__tile, __pyx_k__tile, sizeof(__pyx_k__tile), 0, 0, 1, 1}, {&__pyx_n_s__to_begin, __pyx_k__to_begin, sizeof(__pyx_k__to_begin), 0, 0, 1, 1}, {&__pyx_n_s__to_end, __pyx_k__to_end, sizeof(__pyx_k__to_end), 0, 0, 1, 1}, {&__pyx_n_s__tol, __pyx_k__tol, sizeof(__pyx_k__tol), 0, 0, 1, 1}, {&__pyx_n_s__toplevel, __pyx_k__toplevel, sizeof(__pyx_k__toplevel), 0, 0, 1, 1}, {&__pyx_n_s__trace, __pyx_k__trace, sizeof(__pyx_k__trace), 0, 0, 1, 1}, {&__pyx_n_s__transpose, __pyx_k__transpose, sizeof(__pyx_k__transpose), 0, 0, 1, 1}, {&__pyx_n_s__trapz, __pyx_k__trapz, sizeof(__pyx_k__trapz), 0, 0, 1, 1}, {&__pyx_n_s__tri, __pyx_k__tri, sizeof(__pyx_k__tri), 0, 0, 1, 1}, {&__pyx_n_s__tril, __pyx_k__tril, sizeof(__pyx_k__tril), 0, 0, 1, 1}, {&__pyx_n_s__tril_indices, __pyx_k__tril_indices, sizeof(__pyx_k__tril_indices), 0, 0, 1, 1}, {&__pyx_n_s__tril_indices_from, __pyx_k__tril_indices_from, sizeof(__pyx_k__tril_indices_from), 0, 0, 1, 1}, {&__pyx_n_s__trim, __pyx_k__trim, sizeof(__pyx_k__trim), 0, 0, 1, 1}, {&__pyx_n_s__trim_zeros, __pyx_k__trim_zeros, sizeof(__pyx_k__trim_zeros), 0, 0, 1, 1}, {&__pyx_n_s__triu, __pyx_k__triu, sizeof(__pyx_k__triu), 0, 0, 1, 1}, {&__pyx_n_s__triu_indices, __pyx_k__triu_indices, sizeof(__pyx_k__triu_indices), 0, 0, 1, 1}, {&__pyx_n_s__triu_indices_from, __pyx_k__triu_indices_from, sizeof(__pyx_k__triu_indices_from), 0, 0, 1, 1}, {&__pyx_n_s__tup, __pyx_k__tup, sizeof(__pyx_k__tup), 0, 0, 1, 1}, {&__pyx_n_s__type, __pyx_k__type, sizeof(__pyx_k__type), 0, 0, 1, 1}, {&__pyx_n_s__type1, __pyx_k__type1, sizeof(__pyx_k__type1), 0, 0, 1, 1}, {&__pyx_n_s__type2, __pyx_k__type2, sizeof(__pyx_k__type2), 0, 0, 1, 1}, {&__pyx_n_s__typechars, __pyx_k__typechars, sizeof(__pyx_k__typechars), 0, 0, 1, 1}, {&__pyx_n_s__typename, __pyx_k__typename, sizeof(__pyx_k__typename), 0, 0, 1, 1}, {&__pyx_n_s__typeset, __pyx_k__typeset, sizeof(__pyx_k__typeset), 0, 0, 1, 1}, {&__pyx_n_s__u, __pyx_k__u, sizeof(__pyx_k__u), 0, 0, 1, 1}, {&__pyx_n_s__under, __pyx_k__under, sizeof(__pyx_k__under), 0, 0, 1, 1}, {&__pyx_n_s__union1d, __pyx_k__union1d, sizeof(__pyx_k__union1d), 0, 0, 1, 1}, {&__pyx_n_s__unique, __pyx_k__unique, sizeof(__pyx_k__unique), 0, 0, 1, 1}, {&__pyx_n_s__unpack, __pyx_k__unpack, sizeof(__pyx_k__unpack), 0, 0, 1, 1}, {&__pyx_n_s__unpackbits, __pyx_k__unpackbits, sizeof(__pyx_k__unpackbits), 0, 0, 1, 1}, {&__pyx_n_s__unravel_index, __pyx_k__unravel_index, sizeof(__pyx_k__unravel_index), 0, 0, 1, 1}, {&__pyx_n_s__unwrap, __pyx_k__unwrap, sizeof(__pyx_k__unwrap), 0, 0, 1, 1}, {&__pyx_n_s__usecols, __pyx_k__usecols, sizeof(__pyx_k__usecols), 0, 0, 1, 1}, {&__pyx_n_s__usemask, __pyx_k__usemask, sizeof(__pyx_k__usemask), 0, 0, 1, 1}, {&__pyx_n_s__v, __pyx_k__v, sizeof(__pyx_k__v), 0, 0, 1, 1}, {&__pyx_n_s__val, __pyx_k__val, sizeof(__pyx_k__val), 0, 0, 1, 1}, {&__pyx_n_s__valid, __pyx_k__valid, sizeof(__pyx_k__valid), 0, 0, 1, 1}, {&__pyx_n_s__vals, __pyx_k__vals, sizeof(__pyx_k__vals), 0, 0, 1, 1}, {&__pyx_n_s__values, __pyx_k__values, sizeof(__pyx_k__values), 0, 0, 1, 1}, {&__pyx_n_s__vander, __pyx_k__vander, sizeof(__pyx_k__vander), 0, 0, 1, 1}, {&__pyx_n_s__var, __pyx_k__var, sizeof(__pyx_k__var), 0, 0, 1, 1}, {&__pyx_n_s__vardict, __pyx_k__vardict, sizeof(__pyx_k__vardict), 0, 0, 1, 1}, {&__pyx_n_s__vdot, __pyx_k__vdot, sizeof(__pyx_k__vdot), 0, 0, 1, 1}, {&__pyx_n_s__vsplit, __pyx_k__vsplit, sizeof(__pyx_k__vsplit), 0, 0, 1, 1}, {&__pyx_n_s__vstack, __pyx_k__vstack, sizeof(__pyx_k__vstack), 0, 0, 1, 1}, {&__pyx_n_s__weights, __pyx_k__weights, sizeof(__pyx_k__weights), 0, 0, 1, 1}, {&__pyx_n_s__what, __pyx_k__what, sizeof(__pyx_k__what), 0, 0, 1, 1}, {&__pyx_n_s__when, __pyx_k__when, sizeof(__pyx_k__when), 0, 0, 1, 1}, {&__pyx_n_s__where, __pyx_k__where, sizeof(__pyx_k__where), 0, 0, 1, 1}, {&__pyx_n_s__who, __pyx_k__who, sizeof(__pyx_k__who), 0, 0, 1, 1}, {&__pyx_n_s__width, __pyx_k__width, sizeof(__pyx_k__width), 0, 0, 1, 1}, {&__pyx_n_s__x, __pyx_k__x, sizeof(__pyx_k__x), 0, 0, 1, 1}, {&__pyx_n_s__xp, __pyx_k__xp, sizeof(__pyx_k__xp), 0, 0, 1, 1}, {&__pyx_n_s__y, __pyx_k__y, sizeof(__pyx_k__y), 0, 0, 1, 1}, {&__pyx_n_s__z, __pyx_k__z, sizeof(__pyx_k__z), 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0} }; static int __Pyx_InitCachedBuiltins(void) { __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s__NotImplementedError); if (!__pyx_builtin_NotImplementedError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} return 0; __pyx_L1_error:; return -1; } static int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); /* "numpy.pxd":215 * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) */ __pyx_k_tuple_54 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_53)); if (unlikely(!__pyx_k_tuple_54)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_54); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_54)); /* "numpy.pxd":219 * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< * * info.buf = PyArray_DATA(self) */ __pyx_k_tuple_56 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_55)); if (unlikely(!__pyx_k_tuple_56)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_56); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_56)); /* "numpy.pxd":257 * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" */ __pyx_k_tuple_58 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_57)); if (unlikely(!__pyx_k_tuple_58)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_58); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_58)); /* "numpy.pxd":799 * * if (end - f) - (new_offset - offset[0]) < 15: * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< * * if ((child.byteorder == c'>' and little_endian) or */ __pyx_k_tuple_61 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_60)); if (unlikely(!__pyx_k_tuple_61)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_61); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_61)); /* "numpy.pxd":803 * if ((child.byteorder == c'>' and little_endian) or * (child.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * # One could encode it in the format string and have Cython * # complain instead, BUT: < and > in format strings also imply */ __pyx_k_tuple_62 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_57)); if (unlikely(!__pyx_k_tuple_62)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_62); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_62)); /* "numpy.pxd":823 * t = child.type_num * if end - f < 5: * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< * * # Until ticket #99 is fixed, use integers to avoid warnings */ __pyx_k_tuple_64 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_63)); if (unlikely(!__pyx_k_tuple_64)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_64); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_64)); /* "ga4py/gain/notimplemented.pyx":8 * * * def docstring(obj, docstring): # <<<<<<<<<<<<<< * """docstring(obj, docstring) * */ __pyx_k_tuple_65 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__obj), ((PyObject *)__pyx_n_s__docstring)); if (unlikely(!__pyx_k_tuple_65)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_65); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_65)); __pyx_k_codeobj_66 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_65, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__docstring, 8, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_66)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":21 * * * def add_newdoc(place, obj, doc): # <<<<<<<<<<<<<< * """Adds documentation to obj which is in module place. * */ __pyx_k_tuple_69 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__place), ((PyObject *)__pyx_n_s__obj), ((PyObject *)__pyx_n_s__doc)); if (unlikely(!__pyx_k_tuple_69)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_69); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_69)); __pyx_k_codeobj_70 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_69, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__add_newdoc, 21, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_70)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":40 * * * def all(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Test whether all array elements along a given axis evaluate to True. * */ __pyx_k_tuple_71 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_71)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_71); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_71)); __pyx_k_codeobj_72 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_71, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__all, 40, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_72)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":99 * * * def allclose(a, b, rtol=1e-05, atol=1e-08): # <<<<<<<<<<<<<< * """Returns True if two arrays are element-wise equal within a tolerance. * */ __pyx_k_tuple_73 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__b), ((PyObject *)__pyx_n_s__rtol), ((PyObject *)__pyx_n_s__atol)); if (unlikely(!__pyx_k_tuple_73)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_73); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_73)); __pyx_k_codeobj_74 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_73, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__allclose, 99, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_74)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":153 * * * def alltrue(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Check if all elements of input array are true. * */ __pyx_k_tuple_75 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_75)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_75); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_75)); __pyx_k_codeobj_76 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_75, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__alltrue, 153, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_76)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":164 * * * def alterdot(): # <<<<<<<<<<<<<< * """Change `dot`, `vdot`, and `innerproduct` to use accelerated BLAS functions. * */ __pyx_k_codeobj_77 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__alterdot, 164, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_77)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":187 * * * def amax(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the maximum of an array or maximum along an axis. * */ __pyx_k_tuple_78 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_78)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_78); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_78)); __pyx_k_codeobj_79 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_78, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__amax, 187, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_79)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":244 * * * def amin(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the minimum of an array or minimum along an axis. * */ __pyx_k_tuple_80 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_80)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_80); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_80)); __pyx_k_codeobj_81 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_80, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__amin, 244, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_81)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":301 * * * def angle(z, deg=0): # <<<<<<<<<<<<<< * """Return the angle of the complex argument. * */ __pyx_k_tuple_82 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__z), ((PyObject *)__pyx_n_s__deg)); if (unlikely(!__pyx_k_tuple_82)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_82); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_82)); __pyx_k_codeobj_83 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_82, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__angle, 301, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_83)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":335 * * * def any(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Test whether any array element along a given axis evaluates to True. * */ __pyx_k_tuple_84 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_84)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_84); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_84)); __pyx_k_codeobj_85 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__any, 335, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_85)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":401 * * * def append(arr, values, axis=None): # <<<<<<<<<<<<<< * """Append values to the end of an array. * */ __pyx_k_tuple_86 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__arr), ((PyObject *)__pyx_n_s__values), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_86)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_86); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_86)); __pyx_k_codeobj_87 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_86, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__append, 401, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_87)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":449 * * * def apply_along_axis(func1d, axis, arr): # <<<<<<<<<<<<<< * """Apply a function to 1-D slices along the given axis. * */ __pyx_k_tuple_88 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__func1d), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__arr)); if (unlikely(!__pyx_k_tuple_88)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_88); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_88)); __pyx_k_codeobj_89 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_88, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__apply_along_axis, 449, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_89)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":506 * * * def apply_over_axes(func, a, axes): # <<<<<<<<<<<<<< * """Apply a function repeatedly over multiple axes. * */ __pyx_k_tuple_90 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__func), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axes)); if (unlikely(!__pyx_k_tuple_90)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_90); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_90)); __pyx_k_codeobj_91 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_90, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__apply_over_axes, 506, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_91)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":560 * * * def argmax(a, axis=None): # <<<<<<<<<<<<<< * """Indices of the maximum values along an axis. * */ __pyx_k_tuple_92 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_92)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_92); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_92)); __pyx_k_codeobj_93 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_92, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__argmax, 560, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_93)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":612 * * * def argmin(a, axis=None): # <<<<<<<<<<<<<< * """Return the indices of the minimum values along an axis. * */ __pyx_k_tuple_94 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_94)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_94); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_94)); __pyx_k_codeobj_95 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_94, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__argmin, 612, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_95)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":624 * * * def argsort(a, axis=-1, kind='quicksort', order=None): # <<<<<<<<<<<<<< * """Returns the indices that would sort an array. * */ __pyx_k_tuple_96 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__kind), ((PyObject *)__pyx_n_s__order)); if (unlikely(!__pyx_k_tuple_96)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_96); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_96)); __pyx_k_codeobj_97 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_96, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__argsort, 624, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_97)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":704 * * * def argwhere(a): # <<<<<<<<<<<<<< * """Find the indices of array elements that are non-zero, grouped by element. * */ __pyx_k_tuple_98 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_98)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_98); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_98)); __pyx_k_codeobj_99 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_98, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__argwhere, 704, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_99)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":744 * * * def around(a, decimals=0, out=None): # <<<<<<<<<<<<<< * """Evenly round to the given number of decimals. * */ __pyx_k_tuple_100 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__decimals), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_100)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_100); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_100)); __pyx_k_codeobj_101 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_100, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__around, 744, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_101)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":812 * * * def array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0): # <<<<<<<<<<<<<< * """array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0) * */ __pyx_k_tuple_102 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__object), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__copy), ((PyObject *)__pyx_n_s__order), ((PyObject *)__pyx_n_s__subok), ((PyObject *)__pyx_n_s__ndmin)); if (unlikely(!__pyx_k_tuple_102)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_102); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_102)); __pyx_k_codeobj_103 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_102, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__array, 812, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_103)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":906 * * * def array2string(a, max_line_width=None, precision=None, suppress_small=None, separator=' ', prefix='', style=repr): # <<<<<<<<<<<<<< * """Return a string representation of an array. * */ __pyx_k_tuple_104 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__max_line_width), ((PyObject *)__pyx_n_s__precision), ((PyObject *)__pyx_n_s__suppress_small), ((PyObject *)__pyx_n_s__separator), ((PyObject *)__pyx_n_s__prefix), ((PyObject *)__pyx_n_s__style)); if (unlikely(!__pyx_k_tuple_104)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 906; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_104); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_104)); __pyx_k_codeobj_105 = (PyObject*)__Pyx_PyCode_New(7, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_104, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__array2string, 906, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_105)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 906; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":955 * * * def array_equal(a1, a2): # <<<<<<<<<<<<<< * """True if two arrays have the same shape and elements, False otherwise. * */ __pyx_k_tuple_106 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a1), ((PyObject *)__pyx_n_s__a2)); if (unlikely(!__pyx_k_tuple_106)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_106); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_106)); __pyx_k_codeobj_107 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_106, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__array_equal, 955, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_107)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":990 * * * def array_equiv(a1, a2): # <<<<<<<<<<<<<< * """Returns True if input arrays are shape consistent and all elements equal. * */ __pyx_k_tuple_108 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a1), ((PyObject *)__pyx_n_s__a2)); if (unlikely(!__pyx_k_tuple_108)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 990; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_108); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_108)); __pyx_k_codeobj_109 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_108, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__array_equiv, 990, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_109)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 990; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1027 * * * def array_repr(arr, max_line_width=None, precision=None, suppress_small=None): # <<<<<<<<<<<<<< * """Return the string representation of an array. * */ __pyx_k_tuple_110 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__arr), ((PyObject *)__pyx_n_s__max_line_width), ((PyObject *)__pyx_n_s__precision), ((PyObject *)__pyx_n_s__suppress_small)); if (unlikely(!__pyx_k_tuple_110)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_110); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_110)); __pyx_k_codeobj_111 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_110, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__array_repr, 1027, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_111)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1071 * * * def array_split(ary, indices_or_sections, axis=0): # <<<<<<<<<<<<<< * """Split an array into multiple sub-arrays of equal or near-equal size. * */ __pyx_k_tuple_112 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__ary), ((PyObject *)__pyx_n_s__indices_or_sections), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_112)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_112); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_112)); __pyx_k_codeobj_113 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_112, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__array_split, 1071, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_113)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1093 * * * def array_str(a, max_line_width=None, precision=None, suppress_small=None): # <<<<<<<<<<<<<< * """Return a string representation of the data in an array. * */ __pyx_k_tuple_114 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__max_line_width), ((PyObject *)__pyx_n_s__precision), ((PyObject *)__pyx_n_s__suppress_small)); if (unlikely(!__pyx_k_tuple_114)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_114); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_114)); __pyx_k_codeobj_115 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_114, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__array_str, 1093, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_115)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1129 * * * def asanyarray(a, dtype=None, order=None): # <<<<<<<<<<<<<< * """Convert the input to an ndarray, but pass ndarray subclasses through. * */ __pyx_k_tuple_116 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__order)); if (unlikely(!__pyx_k_tuple_116)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_116); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_116)); __pyx_k_codeobj_117 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_116, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__asanyarray, 1129, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_117)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1181 * * * def asarray_chkfinite(a): # <<<<<<<<<<<<<< * """Convert the input to an array, checking for NaNs or Infs. * */ __pyx_k_tuple_118 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_118)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_118); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_118)); __pyx_k_codeobj_119 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_118, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__asarray_chkfinite, 1181, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_119)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1243 * * * def ascontiguousarray(a, dtype=None): # <<<<<<<<<<<<<< * """Return a contiguous array in memory (C order). * */ __pyx_k_tuple_120 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__dtype)); if (unlikely(!__pyx_k_tuple_120)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_120); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_120)); __pyx_k_codeobj_121 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_120, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__ascontiguousarray, 1243, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_121)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1279 * * * def asfarray(a, dtype=np.float64): # <<<<<<<<<<<<<< * """Return an array converted to a float type. * */ __pyx_k_tuple_122 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__dtype)); if (unlikely(!__pyx_k_tuple_122)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_122); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_122)); __pyx_k_codeobj_123 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_122, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__asfarray, 1279, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_123)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1308 * * * def asfortranarray(a, dtype=None): # <<<<<<<<<<<<<< * """Return an array laid out in Fortran order in memory. * */ __pyx_k_tuple_124 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__dtype)); if (unlikely(!__pyx_k_tuple_124)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_124); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_124)); __pyx_k_codeobj_125 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_124, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__asfortranarray, 1308, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_125)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1344 * * * def asmatrix(data, dtype=None): # <<<<<<<<<<<<<< * """Interpret the input as a matrix. * */ __pyx_k_tuple_126 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__data), ((PyObject *)__pyx_n_s__dtype)); if (unlikely(!__pyx_k_tuple_126)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_126); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_126)); __pyx_k_codeobj_127 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_126, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__asmatrix, 1344, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_127)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1376 * * * def asscalar(a): # <<<<<<<<<<<<<< * """Convert an array of size 1 to its scalar equivalent. * */ __pyx_k_tuple_128 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_128)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_128); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_128)); __pyx_k_codeobj_129 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_128, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__asscalar, 1376, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_129)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1398 * * * def atleast_1d(): # <<<<<<<<<<<<<< * """Convert inputs to arrays with at least one dimension. * */ __pyx_k_codeobj_130 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__atleast_1d, 1398, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_130)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1439 * * * def atleast_2d(): # <<<<<<<<<<<<<< * """View inputs as arrays with at least two dimensions. * */ __pyx_k_codeobj_131 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__atleast_2d, 1439, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_131)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1478 * * * def atleast_3d(): # <<<<<<<<<<<<<< * """View inputs as arrays with at least three dimensions. * */ __pyx_k_codeobj_132 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__atleast_3d, 1478, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_132)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1478; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1529 * * * def average(a, axis=None, weights=None, returned=False): # <<<<<<<<<<<<<< * """Compute the weighted average along the specified axis. * */ __pyx_k_tuple_133 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__weights), ((PyObject *)__pyx_n_s__returned)); if (unlikely(!__pyx_k_tuple_133)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_133); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_133)); __pyx_k_codeobj_134 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_133, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__average, 1529, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_134)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1604 * * * def bartlett(M): # <<<<<<<<<<<<<< * """Return the Bartlett window. * */ __pyx_k_tuple_135 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__M)); if (unlikely(!__pyx_k_tuple_135)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_135); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_135)); __pyx_k_codeobj_136 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_135, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__bartlett, 1604, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_136)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1708 * * * def base_repr(number, base=2, padding=0): # <<<<<<<<<<<<<< * """Return a string representation of a number in the given base system. * */ __pyx_k_tuple_137 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__number), ((PyObject *)__pyx_n_s__base), ((PyObject *)__pyx_n_s__padding)); if (unlikely(!__pyx_k_tuple_137)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_137); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_137)); __pyx_k_codeobj_138 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_137, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__base_repr, 1708, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_138)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1748 * * * def binary_repr(num, width=None): # <<<<<<<<<<<<<< * """Return the binary representation of the input number as a string. * */ __pyx_k_tuple_139 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__num), ((PyObject *)__pyx_n_s__width)); if (unlikely(!__pyx_k_tuple_139)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1748; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_139); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_139)); __pyx_k_codeobj_140 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_139, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__binary_repr, 1748, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_140)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1748; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1808 * * * def bincount(x, weights=None, minlength=None): # <<<<<<<<<<<<<< * """bincount(x, weights=None, minlength=None) * */ __pyx_k_tuple_141 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__x), ((PyObject *)__pyx_n_s__weights), ((PyObject *)__pyx_n_s__minlength)); if (unlikely(!__pyx_k_tuple_141)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1808; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_141); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_141)); __pyx_k_codeobj_142 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_141, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__bincount, 1808, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_142)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1808; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1883 * * * def blackman(M): # <<<<<<<<<<<<<< * """Return the Blackman window. * */ __pyx_k_tuple_143 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__M)); if (unlikely(!__pyx_k_tuple_143)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1883; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_143); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_143)); __pyx_k_codeobj_144 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_143, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__blackman, 1883, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_144)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1883; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":1979 * * * def bmat(obj, ldict=None, gdict=None): # <<<<<<<<<<<<<< * """Build a matrix object from a string, nested sequence, or array. * */ __pyx_k_tuple_145 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__obj), ((PyObject *)__pyx_n_s__ldict), ((PyObject *)__pyx_n_s__gdict)); if (unlikely(!__pyx_k_tuple_145)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_145); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_145)); __pyx_k_codeobj_146 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_145, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__bmat, 1979, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_146)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2026 * * * def broadcast_arrays(): # <<<<<<<<<<<<<< * """Broadcast any number of arrays against each other. * */ __pyx_k_codeobj_147 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__broadcast_arrays, 2026, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_147)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2026; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2067 * * * def byte_bounds(a): # <<<<<<<<<<<<<< * """Returns pointers to the end-points of an array. * */ __pyx_k_tuple_148 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_148)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2067; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_148); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_148)); __pyx_k_codeobj_149 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_148, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__byte_bounds, 2067, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_149)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2067; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2099 * * * def can_cast(): # <<<<<<<<<<<<<< * """can_cast(from, totype, casting = 'safe') * */ __pyx_k_codeobj_150 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__can_cast, 2099, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_150)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2099; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2202 * * * def choose(a, choices, out=None, mode='raise'): # <<<<<<<<<<<<<< * """Construct an array from an index array and a set of arrays to choose from. * */ __pyx_k_tuple_151 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__choices), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__mode)); if (unlikely(!__pyx_k_tuple_151)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_151); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_151)); __pyx_k_codeobj_152 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_151, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__choose, 2202, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_152)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2323 * * * def column_stack(tup): # <<<<<<<<<<<<<< * """Stack 1-D arrays as columns into a 2-D array. * */ __pyx_k_tuple_153 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__tup)); if (unlikely(!__pyx_k_tuple_153)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2323; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_153); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_153)); __pyx_k_codeobj_154 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_153, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__column_stack, 2323, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_154)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2323; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2362 * * * def common_type(): # <<<<<<<<<<<<<< * """Return a scalar type which is common to the input arrays. * */ __pyx_k_codeobj_155 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__common_type, 2362, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_155)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2362; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2400 * * * def compare_chararrays(): # <<<<<<<<<<<<<< * """ * */ __pyx_k_codeobj_156 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__compare_chararrays, 2400, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_156)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2400; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2408 * * * def compress(condition, a, axis=None, out=None): # <<<<<<<<<<<<<< * """Return selected slices of an array along given axis. * */ __pyx_k_tuple_157 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__condition), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_157)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_157); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_157)); __pyx_k_codeobj_158 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_157, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__compress, 2408, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_158)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2469 * * * def concatenate(): # <<<<<<<<<<<<<< * """concatenate((a1, a2, ...), axis=0) * */ __pyx_k_codeobj_159 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__concatenate, 2469, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_159)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2545 * * * def convolve(a, v, mode='full'): # <<<<<<<<<<<<<< * """Returns the discrete, linear convolution of two one-dimensional sequences. * */ __pyx_k_tuple_160 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__v), ((PyObject *)__pyx_n_s__mode)); if (unlikely(!__pyx_k_tuple_160)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2545; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_160); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_160)); __pyx_k_codeobj_161 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_160, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__convolve, 2545, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_161)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2545; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2630 * * * def copy(a): # <<<<<<<<<<<<<< * """Return an array copy of the given object. * */ __pyx_k_tuple_162 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_162)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_162); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_162)); __pyx_k_codeobj_163 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_162, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__copy, 2630, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_163)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2669 * * * def corrcoef(x, y=None, rowvar=1, bias=0, ddof=None): # <<<<<<<<<<<<<< * """Return correlation coefficients. * */ __pyx_k_tuple_164 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__x), ((PyObject *)__pyx_n_s__y), ((PyObject *)__pyx_n_s__rowvar), ((PyObject *)__pyx_n_s__bias), ((PyObject *)__pyx_n_s__ddof)); if (unlikely(!__pyx_k_tuple_164)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2669; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_164); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_164)); __pyx_k_codeobj_165 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_164, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__corrcoef, 2669, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_165)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2669; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2718 * * * def correlate(a, v, mode='valid', old_behavior=False): # <<<<<<<<<<<<<< * """Cross-correlation of two 1-dimensional sequences. * */ __pyx_k_tuple_166 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__v), ((PyObject *)__pyx_n_s__mode), ((PyObject *)__pyx_n_s__old_behavior)); if (unlikely(!__pyx_k_tuple_166)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_166); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_166)); __pyx_k_codeobj_167 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_166, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__correlate, 2718, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_167)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2758 * * * def count_nonzero(a): # <<<<<<<<<<<<<< * """count_nonzero(a) * */ __pyx_k_tuple_168 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_168)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2758; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_168); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_168)); __pyx_k_codeobj_169 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_168, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__count_nonzero, 2758, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_169)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2758; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2790 * * * def cov(m, y=None, rowvar=1, bias=0, ddof=None): # <<<<<<<<<<<<<< * """Estimate a covariance matrix, given data. * */ __pyx_k_tuple_170 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__m), ((PyObject *)__pyx_n_s__y), ((PyObject *)__pyx_n_s__rowvar), ((PyObject *)__pyx_n_s__bias), ((PyObject *)__pyx_n_s__ddof)); if (unlikely(!__pyx_k_tuple_170)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_170); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_170)); __pyx_k_codeobj_171 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_170, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__cov, 2790, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_171)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2871 * * * def cross(a, b, axisa=-1, axisb=-1, axisc=-1, axis=None): # <<<<<<<<<<<<<< * """Return the cross product of two (arrays of) vectors. * */ __pyx_k_tuple_172 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__b), ((PyObject *)__pyx_n_s__axisa), ((PyObject *)__pyx_n_s__axisb), ((PyObject *)__pyx_n_s__axisc), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_172)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2871; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_172); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_172)); __pyx_k_codeobj_173 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_172, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__cross, 2871, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_173)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2871; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":2979 * * * def cumprod(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the cumulative product of elements along a given axis. * */ __pyx_k_tuple_174 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_174)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_174); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_174)); __pyx_k_codeobj_175 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_174, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__cumprod, 2979, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_175)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3041 * * * def cumproduct(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the cumulative product over the given axis. * */ __pyx_k_tuple_176 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_176)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3041; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_176); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_176)); __pyx_k_codeobj_177 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_176, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__cumproduct, 3041, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_177)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3041; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3053 * * * def cumsum(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the cumulative sum of the elements along a given axis. * */ __pyx_k_tuple_178 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_178)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3053; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_178); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_178)); __pyx_k_codeobj_179 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_178, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__cumsum, 3053, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_179)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3053; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3117 * * * def datetime_data(dtype): # <<<<<<<<<<<<<< * """Return (unit, numerator, denominator, events) from a datetime dtype * */ __pyx_k_tuple_180 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__dtype)); if (unlikely(!__pyx_k_tuple_180)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_180); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_180)); __pyx_k_codeobj_181 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_180, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__datetime_data, 3117, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_181)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3124 * * * def delete(arr, obj, axis=None): # <<<<<<<<<<<<<< * """Return a new array with sub-arrays along an axis deleted. * */ __pyx_k_tuple_182 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__arr), ((PyObject *)__pyx_n_s__obj), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_182)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_182); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_182)); __pyx_k_codeobj_183 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_182, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__delete, 3124, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_183)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3171 * * * def deprecate(): # <<<<<<<<<<<<<< * """Issues a DeprecationWarning, adds warning to `old_name`'s * docstring, rebinds ``old_name.__name__`` and returns the new */ __pyx_k_codeobj_184 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__deprecate, 3171, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_184)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3214 * * * def deprecate_with_doc(msg): # <<<<<<<<<<<<<< * """message * */ __pyx_k_tuple_185 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__msg)); if (unlikely(!__pyx_k_tuple_185)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_185); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_185)); __pyx_k_codeobj_186 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_185, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__deprecate_with_doc, 3214, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_186)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3221 * * * def diag_indices(n, ndim=2): # <<<<<<<<<<<<<< * """Return the indices to access the main diagonal of an array. * */ __pyx_k_tuple_187 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__ndim)); if (unlikely(!__pyx_k_tuple_187)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_187); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_187)); __pyx_k_codeobj_188 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_187, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__diag_indices, 3221, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_188)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3287 * * * def diag_indices_from(arr): # <<<<<<<<<<<<<< * """Return the indices to access the main diagonal of an n-dimensional array. * */ __pyx_k_tuple_189 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__arr)); if (unlikely(!__pyx_k_tuple_189)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3287; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_189); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_189)); __pyx_k_codeobj_190 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_189, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__diag_indices_from, 3287, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_190)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3287; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3308 * * * def diagflat(v, k=0): # <<<<<<<<<<<<<< * """Create a two-dimensional array with the flattened input as a diagonal. * */ __pyx_k_tuple_191 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__v), ((PyObject *)__pyx_n_s__k)); if (unlikely(!__pyx_k_tuple_191)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_191); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_191)); __pyx_k_codeobj_192 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_191, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__diagflat, 3308, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_192)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3349 * * * def diff(a, n=1, axis=-1): # <<<<<<<<<<<<<< * """Calculate the n-th order discrete difference along given axis. * */ __pyx_k_tuple_193 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_193)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_193); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_193)); __pyx_k_codeobj_194 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_193, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__diff, 3349, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_194)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3394 * * * def digitize(x, bins): # <<<<<<<<<<<<<< * """digitize(x, bins) * */ __pyx_k_tuple_195 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__x), ((PyObject *)__pyx_n_s__bins)); if (unlikely(!__pyx_k_tuple_195)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_195); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_195)); __pyx_k_codeobj_196 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_195, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__digitize, 3394, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_196)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3453 * * * def disp(mesg, device=None, linefeed=True): # <<<<<<<<<<<<<< * """Display a message on a device. * */ __pyx_k_tuple_197 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__mesg), ((PyObject *)__pyx_n_s__device), ((PyObject *)__pyx_n_s__linefeed)); if (unlikely(!__pyx_k_tuple_197)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3453; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_197); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_197)); __pyx_k_codeobj_198 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_197, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__disp, 3453, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_198)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3453; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3487 * * * def dsplit(ary, indices_or_sections): # <<<<<<<<<<<<<< * """Split array into multiple sub-arrays along the 3rd axis (depth). * */ __pyx_k_tuple_199 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__ary), ((PyObject *)__pyx_n_s__indices_or_sections)); if (unlikely(!__pyx_k_tuple_199)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_199); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_199)); __pyx_k_codeobj_200 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_199, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__dsplit, 3487, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_200)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3530 * * * def dstack(tup): # <<<<<<<<<<<<<< * """Stack arrays in sequence depth wise (along third axis). * */ __pyx_k_tuple_201 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__tup)); if (unlikely(!__pyx_k_tuple_201)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_201); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_201)); __pyx_k_codeobj_202 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_201, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__dstack, 3530, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_202)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3580 * * * def ediff1d(ary, to_end=None, to_begin=None): # <<<<<<<<<<<<<< * """The differences between consecutive elements of an array. * */ __pyx_k_tuple_203 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__ary), ((PyObject *)__pyx_n_s__to_end), ((PyObject *)__pyx_n_s__to_begin)); if (unlikely(!__pyx_k_tuple_203)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3580; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_203); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_203)); __pyx_k_codeobj_204 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_203, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__ediff1d, 3580, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_204)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3580; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3625 * * * def einsum(): # <<<<<<<<<<<<<< * """einsum(subscripts, *operands, out=None, dtype=None, order='K', casting='safe') * */ __pyx_k_codeobj_205 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__einsum, 3625, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_205)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3817 * * * def expand_dims(a, axis): # <<<<<<<<<<<<<< * """Expand the shape of an array. * */ __pyx_k_tuple_206 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_206)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_206); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_206)); __pyx_k_codeobj_207 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_206, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__expand_dims, 3817, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_207)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3870 * * * def extract(condition, arr): # <<<<<<<<<<<<<< * """Return the elements of an array that satisfy some condition. * */ __pyx_k_tuple_208 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__condition), ((PyObject *)__pyx_n_s__arr)); if (unlikely(!__pyx_k_tuple_208)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3870; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_208); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_208)); __pyx_k_codeobj_209 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_208, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__extract, 3870, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_209)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3870; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3913 * * * def _fastCopyAndTranspose(a): # <<<<<<<<<<<<<< * """_fastCopyAndTranspose(a) * */ __pyx_k_tuple_210 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_210)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3913; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_210); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_210)); __pyx_k_codeobj_211 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_210, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s_212, 3913, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_211)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3913; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3921 * * * def fill_diagonal(a, val): # <<<<<<<<<<<<<< * """Fill the main diagonal of the given array of any dimensionality. * */ __pyx_k_tuple_213 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__val)); if (unlikely(!__pyx_k_tuple_213)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3921; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_213); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_213)); __pyx_k_codeobj_214 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_213, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__fill_diagonal, 3921, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_214)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3921; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":3982 * * * def find_common_type(array_types, scalar_types): # <<<<<<<<<<<<<< * """Determine common type following standard coercion rules. * */ __pyx_k_tuple_215 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__array_types), ((PyObject *)__pyx_n_s__scalar_types)); if (unlikely(!__pyx_k_tuple_215)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3982; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_215); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_215)); __pyx_k_codeobj_216 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_215, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__find_common_type, 3982, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_216)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3982; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4035 * * * def fix(x, y=None): # <<<<<<<<<<<<<< * """Round to nearest integer towards zero. * */ __pyx_k_tuple_217 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__x), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_217)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_217); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_217)); __pyx_k_codeobj_218 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_217, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__fix, 4035, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_218)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4071 * * * def flatnonzero(a): # <<<<<<<<<<<<<< * """Return indices that are non-zero in the flattened version of a. * */ __pyx_k_tuple_219 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_219)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_219); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_219)); __pyx_k_codeobj_220 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_219, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__flatnonzero, 4071, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_220)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4110 * * * def fliplr(m): # <<<<<<<<<<<<<< * """Flip array in the left/right direction. * */ __pyx_k_tuple_221 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__m)); if (unlikely(!__pyx_k_tuple_221)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_221); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_221)); __pyx_k_codeobj_222 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_221, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__fliplr, 4110, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_222)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4157 * * * def flipud(m): # <<<<<<<<<<<<<< * """Flip array in the up/down direction. * */ __pyx_k_tuple_223 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__m)); if (unlikely(!__pyx_k_tuple_223)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_223); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_223)); __pyx_k_codeobj_224 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_223, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__flipud, 4157, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_224)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4207 * * * def frombuffer(buffer, dtype=float, count=-1, offset=0): # <<<<<<<<<<<<<< * """frombuffer(buffer, dtype=float, count=-1, offset=0) * */ __pyx_k_tuple_225 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__buffer), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__count), ((PyObject *)__pyx_n_s__offset)); if (unlikely(!__pyx_k_tuple_225)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_225); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_225)); __pyx_k_codeobj_226 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_225, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__frombuffer, 4207, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_226)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4247 * * * def fromfile(file, dtype=float, count=-1, sep=''): # <<<<<<<<<<<<<< * """fromfile(file, dtype=float, count=-1, sep='') * */ __pyx_k_tuple_227 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__file), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__count), ((PyObject *)__pyx_n_s__sep)); if (unlikely(!__pyx_k_tuple_227)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_227); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_227)); __pyx_k_codeobj_228 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_227, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__fromfile, 4247, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_228)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4324 * * * def fromiter(iterable, dtype, count=-1): # <<<<<<<<<<<<<< * """fromiter(iterable, dtype, count=-1) * */ __pyx_k_tuple_229 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__iterable), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__count)); if (unlikely(!__pyx_k_tuple_229)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_229); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_229)); __pyx_k_codeobj_230 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_229, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__fromiter, 4324, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_230)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4360 * * * def frompyfunc(func, nin, nout): # <<<<<<<<<<<<<< * """frompyfunc(func, nin, nout) * */ __pyx_k_tuple_231 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__func), ((PyObject *)__pyx_n_s__nin), ((PyObject *)__pyx_n_s__nout)); if (unlikely(!__pyx_k_tuple_231)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_231); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_231)); __pyx_k_codeobj_232 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_231, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__frompyfunc, 4360, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_232)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4402 * * * def fromregex(file, regexp, dtype): # <<<<<<<<<<<<<< * """Construct an array from a text file, using regular expression parsing. * */ __pyx_k_tuple_233 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__file), ((PyObject *)__pyx_n_s__regexp), ((PyObject *)__pyx_n_s__dtype)); if (unlikely(!__pyx_k_tuple_233)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_233); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_233)); __pyx_k_codeobj_234 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_233, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__fromregex, 4402, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_234)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4459 * * * def fromstring(string, dtype=float, count=-1, sep=''): # <<<<<<<<<<<<<< * """fromstring(string, dtype=float, count=-1, sep='') * */ __pyx_k_tuple_235 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__string), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__count), ((PyObject *)__pyx_n_s__sep)); if (unlikely(!__pyx_k_tuple_235)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_235); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_235)); __pyx_k_codeobj_236 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_235, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__fromstring, 4459, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_236)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4513 * * * def fv(rate, nper, pmt, pv, when='end'): # <<<<<<<<<<<<<< * """Compute the future value. * */ __pyx_k_tuple_237 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__rate), ((PyObject *)__pyx_n_s__nper), ((PyObject *)__pyx_n_s__pmt), ((PyObject *)__pyx_n_s__pv), ((PyObject *)__pyx_n_s__when)); if (unlikely(!__pyx_k_tuple_237)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4513; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_237); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_237)); __pyx_k_codeobj_238 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_237, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__fv, 4513, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_238)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4513; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4596 * * * def genfromtxt(fname, dtype=float, comments='#', delimiter=None, skiprows=0, skip_header=0, skip_footer=0, converters=None, missing='', missing_values=None, filling_values=None, usecols=None, names=None, excludelist=None, deletechars=None, replace_space='_', autostrip=False, case_sensitive=True, defaultfmt='f%i', unpack=None, usemask=False, loose=True, invalid_raise=True): # <<<<<<<<<<<<<< * """Load data from a text file, with missing values handled as specified. * */ __pyx_k_tuple_239 = PyTuple_Pack(23, ((PyObject *)__pyx_n_s__fname), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__comments), ((PyObject *)__pyx_n_s__delimiter), ((PyObject *)__pyx_n_s__skiprows), ((PyObject *)__pyx_n_s__skip_header), ((PyObject *)__pyx_n_s__skip_footer), ((PyObject *)__pyx_n_s__converters), ((PyObject *)__pyx_n_s__missing), ((PyObject *)__pyx_n_s__missing_values), ((PyObject *)__pyx_n_s__filling_values), ((PyObject *)__pyx_n_s__usecols), ((PyObject *)__pyx_n_s__names), ((PyObject *)__pyx_n_s__excludelist), ((PyObject *)__pyx_n_s__deletechars), ((PyObject *)__pyx_n_s__replace_space), ((PyObject *)__pyx_n_s__autostrip), ((PyObject *)__pyx_n_s__case_sensitive), ((PyObject *)__pyx_n_s__defaultfmt), ((PyObject *)__pyx_n_s__unpack), ((PyObject *)__pyx_n_s__usemask), ((PyObject *)__pyx_n_s__loose), ((PyObject *)__pyx_n_s__invalid_raise)); if (unlikely(!__pyx_k_tuple_239)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_239); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_239)); __pyx_k_codeobj_240 = (PyObject*)__Pyx_PyCode_New(23, 0, 23, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_239, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__genfromtxt, 4596, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_240)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4734 * * * def get_array_wrap(): # <<<<<<<<<<<<<< * """Find the wrapper for the array with the highest priority. * */ __pyx_k_codeobj_241 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__get_array_wrap, 4734, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_241)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4734; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4743 * * * def get_include(): # <<<<<<<<<<<<<< * """Return the directory that contains the NumPy \*.h header files. * */ __pyx_k_codeobj_242 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__get_include, 4743, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_242)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4743; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4764 * * * def get_numarray_include(type=None): # <<<<<<<<<<<<<< * """Return the directory that contains the numarray \*.h header files. * */ __pyx_k_tuple_243 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__type)); if (unlikely(!__pyx_k_tuple_243)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4764; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_243); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_243)); __pyx_k_codeobj_244 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_243, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s_245, 4764, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_244)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4764; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4800 * * * def get_printoptions(): # <<<<<<<<<<<<<< * """Return the current print options. * */ __pyx_k_codeobj_246 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__get_printoptions, 4800, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_246)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4826 * * * def getbuffer(): # <<<<<<<<<<<<<< * """getbuffer(obj [,offset[, size]]) * */ __pyx_k_codeobj_247 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__getbuffer, 4826, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_247)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4862 * * * def getbufsize(): # <<<<<<<<<<<<<< * """Return the size of the buffer used in ufuncs. * */ __pyx_k_codeobj_248 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__getbufsize, 4862, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_248)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4862; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4869 * * * def geterr(): # <<<<<<<<<<<<<< * """Get the current way of handling floating-point errors. * */ __pyx_k_codeobj_249 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__geterr, 4869, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_249)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4869; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4908 * * * def geterrcall(): # <<<<<<<<<<<<<< * """Return the current callback function used on floating-point errors. * */ __pyx_k_codeobj_250 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__geterrcall, 4908, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_250)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":4952 * * * def geterrobj(): # <<<<<<<<<<<<<< * """geterrobj() * */ __pyx_k_codeobj_251 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__geterrobj, 4952, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_251)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4952; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5018 * * * def gradient(f): # <<<<<<<<<<<<<< * """Return the gradient of an N-dimensional array. * */ __pyx_k_tuple_252 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__f)); if (unlikely(!__pyx_k_tuple_252)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_252); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_252)); __pyx_k_codeobj_253 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_252, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__gradient, 5018, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_253)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5058 * * * def hamming(M): # <<<<<<<<<<<<<< * """Return the Hamming window. * */ __pyx_k_tuple_254 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__M)); if (unlikely(!__pyx_k_tuple_254)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5058; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_254); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_254)); __pyx_k_codeobj_255 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_254, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__hamming, 5058, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_255)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5058; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5152 * * * def hanning(M): # <<<<<<<<<<<<<< * """Return the Hanning window. * */ __pyx_k_tuple_256 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__M)); if (unlikely(!__pyx_k_tuple_256)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_256); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_256)); __pyx_k_codeobj_257 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_256, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__hanning, 5152, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_257)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5248 * * * def histogram(a, bins=10, range=None, normed=False, weights=None, density=None): # <<<<<<<<<<<<<< * """Compute the histogram of a set of data. * */ __pyx_k_tuple_258 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__bins), ((PyObject *)__pyx_n_s__range), ((PyObject *)__pyx_n_s__normed), ((PyObject *)__pyx_n_s__weights), ((PyObject *)__pyx_n_s__density)); if (unlikely(!__pyx_k_tuple_258)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_258); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_258)); __pyx_k_codeobj_259 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_258, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__histogram, 5248, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_259)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5333 * * * def histogram2d(x, y, bins=10, range=None, normed=False, weights=None): # <<<<<<<<<<<<<< * """Compute the bi-dimensional histogram of two data samples. * */ __pyx_k_tuple_260 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__x), ((PyObject *)__pyx_n_s__y), ((PyObject *)__pyx_n_s__bins), ((PyObject *)__pyx_n_s__range), ((PyObject *)__pyx_n_s__normed), ((PyObject *)__pyx_n_s__weights)); if (unlikely(!__pyx_k_tuple_260)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_260); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_260)); __pyx_k_codeobj_261 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_260, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__histogram2d, 5333, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_261)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5418 * * * def histogramdd(sample, bins=10, range=None, normed=False, weights=None): # <<<<<<<<<<<<<< * """Compute the multidimensional histogram of some data. * */ __pyx_k_tuple_262 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__sample), ((PyObject *)__pyx_n_s__bins), ((PyObject *)__pyx_n_s__range), ((PyObject *)__pyx_n_s__normed), ((PyObject *)__pyx_n_s__weights)); if (unlikely(!__pyx_k_tuple_262)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_262); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_262)); __pyx_k_codeobj_263 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_262, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__histogramdd, 5418, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_263)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5471 * * * def hsplit(ary, indices_or_sections): # <<<<<<<<<<<<<< * """Split an array into multiple sub-arrays horizontally (column-wise). * */ __pyx_k_tuple_264 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__ary), ((PyObject *)__pyx_n_s__indices_or_sections)); if (unlikely(!__pyx_k_tuple_264)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_264); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_264)); __pyx_k_codeobj_265 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_264, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__hsplit, 5471, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_265)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5528 * * * def hstack(tup): # <<<<<<<<<<<<<< * """Stack arrays in sequence horizontally (column wise). * */ __pyx_k_tuple_266 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__tup)); if (unlikely(!__pyx_k_tuple_266)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_266); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_266)); __pyx_k_codeobj_267 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_266, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__hstack, 5528, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_267)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5572 * * * def i0(x): # <<<<<<<<<<<<<< * """Modified Bessel function of the first kind, order 0. * */ __pyx_k_tuple_268 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__x)); if (unlikely(!__pyx_k_tuple_268)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_268); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_268)); __pyx_k_codeobj_269 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_268, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__i0, 5572, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_269)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5628 * * * def imag(val): # <<<<<<<<<<<<<< * """Return the imaginary part of the elements of the array. * */ __pyx_k_tuple_270 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__val)); if (unlikely(!__pyx_k_tuple_270)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_270); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_270)); __pyx_k_codeobj_271 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_270, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__imag, 5628, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_271)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5659 * * * def in1d(ar1, ar2, assume_unique=False): # <<<<<<<<<<<<<< * """Test whether each element of a 1D array is also present in a second array. * */ __pyx_k_tuple_272 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__ar1), ((PyObject *)__pyx_n_s__ar2), ((PyObject *)__pyx_n_s__assume_unique)); if (unlikely(!__pyx_k_tuple_272)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_272); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_272)); __pyx_k_codeobj_273 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_272, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__in1d, 5659, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_273)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5707 * * * def indices(dimensions, dtype=int): # <<<<<<<<<<<<<< * """Return an array representing the indices of a grid. * */ __pyx_k_tuple_274 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__dimensions), ((PyObject *)__pyx_n_s__dtype)); if (unlikely(!__pyx_k_tuple_274)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_274); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_274)); __pyx_k_codeobj_275 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_274, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__indices, 5707, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_275)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5769 * * * def info(object=None, maxwidth=76, output=sys.stdout, toplevel='numpy'): # <<<<<<<<<<<<<< * """Get help information for a function, class, or module. * */ __pyx_k_tuple_276 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__object), ((PyObject *)__pyx_n_s__maxwidth), ((PyObject *)__pyx_n_s__output), ((PyObject *)__pyx_n_s__toplevel)); if (unlikely(!__pyx_k_tuple_276)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5769; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_276); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_276)); __pyx_k_codeobj_277 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_276, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__info, 5769, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_277)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5769; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5819 * * * def inner(a, b): # <<<<<<<<<<<<<< * """inner(a, b) * */ __pyx_k_tuple_278 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__b)); if (unlikely(!__pyx_k_tuple_278)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_278); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_278)); __pyx_k_codeobj_279 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_278, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__inner, 5819, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_279)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5895 * * * def insert(arr, obj, values, axis=None): # <<<<<<<<<<<<<< * """Insert values along the given axis before the given indices. * */ __pyx_k_tuple_280 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__arr), ((PyObject *)__pyx_n_s__obj), ((PyObject *)__pyx_n_s__values), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_280)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5895; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_280); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_280)); __pyx_k_codeobj_281 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_280, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__insert, 5895, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_281)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5895; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5960 * * * def int_asbuffer(): # <<<<<<<<<<<<<< * """ * */ __pyx_k_codeobj_282 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__int_asbuffer, 5960, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_282)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":5968 * * * def interp(x, xp, fp, left=None, right=None): # <<<<<<<<<<<<<< * """One-dimensional linear interpolation. * */ __pyx_k_tuple_283 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__x), ((PyObject *)__pyx_n_s__xp), ((PyObject *)__pyx_n_s__fp), ((PyObject *)__pyx_n_s__left), ((PyObject *)__pyx_n_s__right)); if (unlikely(!__pyx_k_tuple_283)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_283); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_283)); __pyx_k_codeobj_284 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_283, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__interp, 5968, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_284)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6039 * * * def intersect1d(ar1, ar2, assume_unique=False): # <<<<<<<<<<<<<< * """Find the intersection of two arrays. * */ __pyx_k_tuple_285 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__ar1), ((PyObject *)__pyx_n_s__ar2), ((PyObject *)__pyx_n_s__assume_unique)); if (unlikely(!__pyx_k_tuple_285)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6039; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_285); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_285)); __pyx_k_codeobj_286 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_285, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__intersect1d, 6039, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_286)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6039; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6071 * * * def ipmt(rate, per, nper, pv, fv=0.0, when='end'): # <<<<<<<<<<<<<< * """Not implemented. Compute the payment portion for loan interest. * */ __pyx_k_tuple_287 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__rate), ((PyObject *)__pyx_n_s__per), ((PyObject *)__pyx_n_s__nper), ((PyObject *)__pyx_n_s__pv), ((PyObject *)__pyx_n_s__fv), ((PyObject *)__pyx_n_s__when)); if (unlikely(!__pyx_k_tuple_287)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_287); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_287)); __pyx_k_codeobj_288 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_287, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__ipmt, 6071, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_288)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6113 * * * def irr(values): # <<<<<<<<<<<<<< * """Return the Internal Rate of Return (IRR). * */ __pyx_k_tuple_289 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__values)); if (unlikely(!__pyx_k_tuple_289)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_289); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_289)); __pyx_k_codeobj_290 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_289, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__irr, 6113, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_290)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6168 * * * def iscomplex(x): # <<<<<<<<<<<<<< * """Returns a bool array, where True if input element is complex. * */ __pyx_k_tuple_291 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__x)); if (unlikely(!__pyx_k_tuple_291)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_291); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_291)); __pyx_k_codeobj_292 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_291, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__iscomplex, 6168, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_292)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6199 * * * def iscomplexobj(x): # <<<<<<<<<<<<<< * """Return True if x is a complex type or an array of complex numbers. * */ __pyx_k_tuple_293 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__x)); if (unlikely(!__pyx_k_tuple_293)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_293); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_293)); __pyx_k_codeobj_294 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_293, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__iscomplexobj, 6199, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_294)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6233 * * * def isfortran(a): # <<<<<<<<<<<<<< * """Returns True if array is arranged in Fortran-order in memory * and dimension > 1. */ __pyx_k_tuple_295 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_295)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_295); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_295)); __pyx_k_codeobj_296 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_295, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__isfortran, 6233, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_296)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6290 * * * def isneginf(x, y=None): # <<<<<<<<<<<<<< * """Test element-wise for negative infinity, return result as bool array. * */ __pyx_k_tuple_297 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__x), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_297)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6290; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_297); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_297)); __pyx_k_codeobj_298 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_297, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__isneginf, 6290, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_298)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6290; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6349 * * * def isposinf(x, y=None): # <<<<<<<<<<<<<< * """Test element-wise for positive infinity, return result as bool array. * */ __pyx_k_tuple_299 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__x), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_299)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_299); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_299)); __pyx_k_codeobj_300 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_299, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__isposinf, 6349, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_300)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6407 * * * def isreal(x): # <<<<<<<<<<<<<< * """Returns a bool array, where True if input element is real. * */ __pyx_k_tuple_301 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__x)); if (unlikely(!__pyx_k_tuple_301)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_301); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_301)); __pyx_k_codeobj_302 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_301, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__isreal, 6407, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_302)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6437 * * * def isrealobj(x): # <<<<<<<<<<<<<< * """Return True if x is a not complex type or an array of complex numbers. * */ __pyx_k_tuple_303 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__x)); if (unlikely(!__pyx_k_tuple_303)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_303); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_303)); __pyx_k_codeobj_304 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_303, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__isrealobj, 6437, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_304)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6471 * * * def isscalar(num): # <<<<<<<<<<<<<< * """Returns True if the type of `num` is a scalar type. * */ __pyx_k_tuple_305 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__num)); if (unlikely(!__pyx_k_tuple_305)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_305); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_305)); __pyx_k_codeobj_306 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_305, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__isscalar, 6471, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_306)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6497 * * * def issctype(rep): # <<<<<<<<<<<<<< * """Determines whether the given object represents a scalar data-type. * */ __pyx_k_tuple_307 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__rep)); if (unlikely(!__pyx_k_tuple_307)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6497; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_307); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_307)); __pyx_k_codeobj_308 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_307, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__issctype, 6497, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_308)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6497; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6533 * * * def issubclass_(arg1, arg2): # <<<<<<<<<<<<<< * """Determine if a class is a subclass of a second class. * */ __pyx_k_tuple_309 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__arg1), ((PyObject *)__pyx_n_s__arg2)); if (unlikely(!__pyx_k_tuple_309)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_309); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_309)); __pyx_k_codeobj_310 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_309, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__issubclass_, 6533, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_310)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6568 * * * def issubdtype(arg1, arg2): # <<<<<<<<<<<<<< * """Returns True if first argument is a typecode lower/equal in type hierarchy. * */ __pyx_k_tuple_311 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__arg1), ((PyObject *)__pyx_n_s__arg2)); if (unlikely(!__pyx_k_tuple_311)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_311); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_311)); __pyx_k_codeobj_312 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_311, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__issubdtype, 6568, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_312)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6596 * * * def issubsctype(arg1, arg2): # <<<<<<<<<<<<<< * """Determine if the first argument is a subclass of the second argument. * */ __pyx_k_tuple_313 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__arg1), ((PyObject *)__pyx_n_s__arg2)); if (unlikely(!__pyx_k_tuple_313)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_313); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_313)); __pyx_k_codeobj_314 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_313, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__issubsctype, 6596, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_314)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6626 * * * def iterable(y): # <<<<<<<<<<<<<< * """Check whether or not an object can be iterated over. * */ __pyx_k_tuple_315 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_315)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_315); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_315)); __pyx_k_codeobj_316 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_315, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__iterable, 6626, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_316)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6652 * * * def ix_(): # <<<<<<<<<<<<<< * """Construct an open mesh from multiple sequences. * */ __pyx_k_codeobj_317 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__ix_, 6652, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_317)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6698 * * * def kaiser(M, beta): # <<<<<<<<<<<<<< * """Return the Kaiser window. * */ __pyx_k_tuple_318 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__M), ((PyObject *)__pyx_n_s__beta)); if (unlikely(!__pyx_k_tuple_318)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6698; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_318); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_318)); __pyx_k_codeobj_319 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_318, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__kaiser, 6698, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_319)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6698; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6825 * * * def kron(a, b): # <<<<<<<<<<<<<< * """Kronecker product of two arrays. * */ __pyx_k_tuple_320 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__b)); if (unlikely(!__pyx_k_tuple_320)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_320); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_320)); __pyx_k_codeobj_321 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_320, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__kron, 6825, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_321)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6897 * * * def lexsort(keys, axis=-1): # <<<<<<<<<<<<<< * """lexsort(keys, axis=-1) * */ __pyx_k_tuple_322 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__keys), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_322)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6897; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_322); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_322)); __pyx_k_codeobj_323 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_322, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__lexsort, 6897, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_323)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6897; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":6975 * * * def load(file, mmap_mode=None): # <<<<<<<<<<<<<< * """Load a pickled, ``.npy``, or ``.npz`` binary file. * */ __pyx_k_tuple_324 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__file), ((PyObject *)__pyx_n_s__mmap_mode)); if (unlikely(!__pyx_k_tuple_324)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_324); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_324)); __pyx_k_codeobj_325 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_324, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__load, 6975, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_325)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7037 * * * def loads(): # <<<<<<<<<<<<<< * """loads(string) -- Load a pickle from the given string * */ __pyx_k_codeobj_326 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__loads, 7037, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_326)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7037; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7045 * * * def loadtxt(fname, dtype=float, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0): # <<<<<<<<<<<<<< * """Load data from a text file. * */ __pyx_k_tuple_327 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__fname), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__comments), ((PyObject *)__pyx_n_s__delimiter), ((PyObject *)__pyx_n_s__converters), ((PyObject *)__pyx_n_s__skiprows), ((PyObject *)__pyx_n_s__usecols), ((PyObject *)__pyx_n_s__unpack), ((PyObject *)__pyx_n_s__ndmin)); if (unlikely(!__pyx_k_tuple_327)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7045; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_327); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_327)); __pyx_k_codeobj_328 = (PyObject*)__Pyx_PyCode_New(9, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_327, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__loadtxt, 7045, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_328)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7045; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7132 * * * def lookfor(what, module=None, import_modules=True, regenerate=False, output=None): # <<<<<<<<<<<<<< * """Do a keyword search on docstrings. * */ __pyx_k_tuple_329 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__what), ((PyObject *)__pyx_n_s__module), ((PyObject *)__pyx_n_s__import_modules), ((PyObject *)__pyx_n_s__regenerate), ((PyObject *)__pyx_n_s__output)); if (unlikely(!__pyx_k_tuple_329)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_329); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_329)); __pyx_k_codeobj_330 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_329, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__lookfor, 7132, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_330)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7179 * * * def mafromtxt(fname): # <<<<<<<<<<<<<< * """Load ASCII data stored in a text file and return a masked array. * */ __pyx_k_tuple_331 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__fname)); if (unlikely(!__pyx_k_tuple_331)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_331); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_331)); __pyx_k_codeobj_332 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_331, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__mafromtxt, 7179, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_332)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7192 * * * def mask_indices(n, mask_func, k=0): # <<<<<<<<<<<<<< * """Return the indices to access (n, n) arrays, given a masking function. * */ __pyx_k_tuple_333 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__mask_func), ((PyObject *)__pyx_n_s__k)); if (unlikely(!__pyx_k_tuple_333)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7192; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_333); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_333)); __pyx_k_codeobj_334 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_333, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__mask_indices, 7192, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_334)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7192; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7259 * * * def mat(data, dtype=None): # <<<<<<<<<<<<<< * """Interpret the input as a matrix. * */ __pyx_k_tuple_335 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__data), ((PyObject *)__pyx_n_s__dtype)); if (unlikely(!__pyx_k_tuple_335)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_335); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_335)); __pyx_k_codeobj_336 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_335, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__mat, 7259, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_336)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7291 * * * def max(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the maximum of an array or maximum along an axis. * */ __pyx_k_tuple_337 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_337)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_337); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_337)); __pyx_k_codeobj_338 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_337, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__max, 7291, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_338)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7348 * * * def maximum_sctype(t): # <<<<<<<<<<<<<< * """Return the scalar type of highest precision of the same kind as the input. * */ __pyx_k_tuple_339 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__t)); if (unlikely(!__pyx_k_tuple_339)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7348; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_339); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_339)); __pyx_k_codeobj_340 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_339, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__maximum_sctype, 7348, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_340)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7348; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7388 * * * def may_share_memory(a, b): # <<<<<<<<<<<<<< * """Determine if two arrays can share memory * */ __pyx_k_tuple_341 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__b)); if (unlikely(!__pyx_k_tuple_341)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_341); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_341)); __pyx_k_codeobj_342 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_341, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__may_share_memory, 7388, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_342)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7414 * * * def mean(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Compute the arithmetic mean along the specified axis. * */ __pyx_k_tuple_343 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_343)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_343); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_343)); __pyx_k_codeobj_344 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_343, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__mean, 7414, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_344)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7487 * * * def median(a, axis=None, out=None, overwrite_input=False): # <<<<<<<<<<<<<< * """Compute the median along the specified axis. * */ __pyx_k_tuple_345 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__overwrite_input)); if (unlikely(!__pyx_k_tuple_345)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_345); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_345)); __pyx_k_codeobj_346 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_345, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__median, 7487, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_346)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7563 * * * def meshgrid(x, y): # <<<<<<<<<<<<<< * """Return coordinate matrices from two coordinate vectors. * */ __pyx_k_tuple_347 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__x), ((PyObject *)__pyx_n_s__y)); if (unlikely(!__pyx_k_tuple_347)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7563; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_347); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_347)); __pyx_k_codeobj_348 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_347, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__meshgrid, 7563, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_348)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7563; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7611 * * * def min(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the minimum of an array or minimum along an axis. * */ __pyx_k_tuple_349 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_349)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7611; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_349); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_349)); __pyx_k_codeobj_350 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_349, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__min, 7611, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_350)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7611; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7668 * * * def min_scalar_type(a): # <<<<<<<<<<<<<< * """min_scalar_type(a) * */ __pyx_k_tuple_351 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_351)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_351); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_351)); __pyx_k_codeobj_352 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_351, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__min_scalar_type, 7668, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_352)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7718 * * * def mintypecode(typechars, typeset='GDFgdf', default='d'): # <<<<<<<<<<<<<< * """Return the character for the minimum-size type to which given types can * be safely cast. */ __pyx_k_tuple_353 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__typechars), ((PyObject *)__pyx_n_s__typeset), ((PyObject *)__pyx_n_s__default)); if (unlikely(!__pyx_k_tuple_353)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_353); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_353)); __pyx_k_codeobj_354 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_353, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__mintypecode, 7718, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_354)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7763 * * * def mirr(values, finance_rate, reinvest_rate): # <<<<<<<<<<<<<< * """Modified internal rate of return. * */ __pyx_k_tuple_355 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__values), ((PyObject *)__pyx_n_s__finance_rate), ((PyObject *)__pyx_n_s__reinvest_rate)); if (unlikely(!__pyx_k_tuple_355)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7763; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_355); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_355)); __pyx_k_codeobj_356 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_355, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__mirr, 7763, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_356)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7763; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7785 * * * def msort(a): # <<<<<<<<<<<<<< * """Return a copy of an array sorted along the first axis. * */ __pyx_k_tuple_357 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_357)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_357); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_357)); __pyx_k_codeobj_358 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_357, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__msort, 7785, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_358)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7810 * * * def nan_to_num(x): # <<<<<<<<<<<<<< * """Replace nan with zero and inf with finite numbers. * */ __pyx_k_tuple_359 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__x)); if (unlikely(!__pyx_k_tuple_359)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7810; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_359); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_359)); __pyx_k_codeobj_360 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_359, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__nan_to_num, 7810, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_360)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7810; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7857 * * * def nanargmax(a, axis=None): # <<<<<<<<<<<<<< * """Return indices of the maximum values over an axis, ignoring NaNs. * */ __pyx_k_tuple_361 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_361)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7857; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_361); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_361)); __pyx_k_codeobj_362 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_361, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__nanargmax, 7857, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_362)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7857; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7892 * * * def nanargmin(a, axis=None): # <<<<<<<<<<<<<< * """Return indices of the minimum values over an axis, ignoring NaNs. * */ __pyx_k_tuple_363 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_363)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7892; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_363); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_363)); __pyx_k_codeobj_364 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_363, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__nanargmin, 7892, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_364)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7892; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7927 * * * def nanmax(a, axis=None): # <<<<<<<<<<<<<< * """Return the maximum of an array or maximum along an axis ignoring any NaNs. * */ __pyx_k_tuple_365 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_365)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7927; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_365); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_365)); __pyx_k_codeobj_366 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_365, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__nanmax, 7927, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_366)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7927; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":7984 * * * def nanmin(a, axis=None): # <<<<<<<<<<<<<< * """Return the minimum of an array or minimum along an axis ignoring any NaNs. * */ __pyx_k_tuple_367 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_367)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_367); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_367)); __pyx_k_codeobj_368 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_367, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__nanmin, 7984, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_368)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8039 * * * def nansum(a, axis=None): # <<<<<<<<<<<<<< * """Return the sum of array elements over a given axis treating * Not a Numbers (NaNs) as zero. */ __pyx_k_tuple_369 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_369)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8039; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_369); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_369)); __pyx_k_codeobj_370 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_369, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__nansum, 8039, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_370)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8039; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8107 * * * def ndfromtxt(fname): # <<<<<<<<<<<<<< * """Load ASCII data stored in a file and return it as a single array. * */ __pyx_k_tuple_371 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__fname)); if (unlikely(!__pyx_k_tuple_371)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_371); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_371)); __pyx_k_codeobj_372 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_371, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__ndfromtxt, 8107, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_372)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8121 * * * def ndim(a): # <<<<<<<<<<<<<< * """Return the number of dimensions of an array. * */ __pyx_k_tuple_373 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_373)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_373); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_373)); __pyx_k_codeobj_374 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_373, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__ndim, 8121, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_374)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8154 * * * def nested_iters(): # <<<<<<<<<<<<<< * """ * */ __pyx_k_codeobj_375 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__nested_iters, 8154, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_375)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8162 * * * def newbuffer(size): # <<<<<<<<<<<<<< * """newbuffer(size) * */ __pyx_k_tuple_376 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__size)); if (unlikely(!__pyx_k_tuple_376)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_376); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_376)); __pyx_k_codeobj_377 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_376, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__newbuffer, 8162, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_377)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8172 * * * def nonzero(a): # <<<<<<<<<<<<<< * """Return the indices of the elements that are non-zero. * */ __pyx_k_tuple_378 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_378)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_378); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_378)); __pyx_k_codeobj_379 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_378, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__nonzero, 8172, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_379)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8247 * * * def nper(rate, pmt, pv, fv=0, when='end'): # <<<<<<<<<<<<<< * """Compute the number of periodic payments. * */ __pyx_k_tuple_380 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__rate), ((PyObject *)__pyx_n_s__pmt), ((PyObject *)__pyx_n_s__pv), ((PyObject *)__pyx_n_s__fv), ((PyObject *)__pyx_n_s__when)); if (unlikely(!__pyx_k_tuple_380)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_380); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_380)); __pyx_k_codeobj_381 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_380, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__nper, 8247, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_381)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8298 * * * def npv(rate, values): # <<<<<<<<<<<<<< * """Returns the NPV (Net Present Value) of a cash flow series. * */ __pyx_k_tuple_382 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__rate), ((PyObject *)__pyx_n_s__values)); if (unlikely(!__pyx_k_tuple_382)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_382); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_382)); __pyx_k_codeobj_383 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_382, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__npv, 8298, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_383)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8342 * * * def obj2sctype(rep, default=None): # <<<<<<<<<<<<<< * """Return the scalar dtype or NumPy equivalent of Python type of an object. * */ __pyx_k_tuple_384 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__rep), ((PyObject *)__pyx_n_s__default)); if (unlikely(!__pyx_k_tuple_384)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_384); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_384)); __pyx_k_codeobj_385 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_384, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__obj2sctype, 8342, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_385)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8383 * * * def outer(a, b): # <<<<<<<<<<<<<< * """Compute the outer product of two vectors. * */ __pyx_k_tuple_386 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__b)); if (unlikely(!__pyx_k_tuple_386)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_386); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_386)); __pyx_k_codeobj_387 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_386, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__outer, 8383, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_387)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8454 * * * def packbits(myarray, axis=None): # <<<<<<<<<<<<<< * """packbits(myarray, axis=None) * */ __pyx_k_tuple_388 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__myarray), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_388)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8454; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_388); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_388)); __pyx_k_codeobj_389 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_388, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__packbits, 8454, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_389)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8454; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8500 * * * def percentile(a, q, axis=None, out=None, overwrite_input=False): # <<<<<<<<<<<<<< * """Compute the qth percentile of the data along the specified axis. * */ __pyx_k_tuple_390 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__q), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__overwrite_input)); if (unlikely(!__pyx_k_tuple_390)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_390); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_390)); __pyx_k_codeobj_391 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_390, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__percentile, 8500, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_391)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8580 * * * def piecewise(x, condlist, funclist): # <<<<<<<<<<<<<< * """Evaluate a piecewise-defined function. * */ __pyx_k_tuple_392 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__x), ((PyObject *)__pyx_n_s__condlist), ((PyObject *)__pyx_n_s__funclist)); if (unlikely(!__pyx_k_tuple_392)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8580; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_392); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_392)); __pyx_k_codeobj_393 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_392, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__piecewise, 8580, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_393)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8580; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8663 * * * def pkgload(): # <<<<<<<<<<<<<< * """Load one or more packages into parent package top-level namespace. * */ __pyx_k_codeobj_394 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__pkgload, 8663, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_394)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8663; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8702 * * * def place(arr, mask, vals): # <<<<<<<<<<<<<< * """Change elements of an array based on conditional and input values. * */ __pyx_k_tuple_395 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__arr), ((PyObject *)__pyx_n_s__mask), ((PyObject *)__pyx_n_s__vals)); if (unlikely(!__pyx_k_tuple_395)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8702; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_395); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_395)); __pyx_k_codeobj_396 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_395, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__place, 8702, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_396)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8702; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8738 * * * def pmt(rate, nper, pv, fv=0, when='end'): # <<<<<<<<<<<<<< * """Compute the payment against loan principal plus interest. * */ __pyx_k_tuple_397 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__rate), ((PyObject *)__pyx_n_s__nper), ((PyObject *)__pyx_n_s__pv), ((PyObject *)__pyx_n_s__fv), ((PyObject *)__pyx_n_s__when)); if (unlikely(!__pyx_k_tuple_397)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8738; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_397); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_397)); __pyx_k_codeobj_398 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_397, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__pmt, 8738, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_398)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8738; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8823 * * * def poly(seq_of_zeros): # <<<<<<<<<<<<<< * """Find the coefficients of a polynomial with the given sequence of roots. * */ __pyx_k_tuple_399 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__seq_of_zeros)); if (unlikely(!__pyx_k_tuple_399)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_399); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_399)); __pyx_k_codeobj_400 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_399, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__poly, 8823, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_400)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8917 * * * def polyadd(a1, a2): # <<<<<<<<<<<<<< * """Find the sum of two polynomials. * */ __pyx_k_tuple_401 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a1), ((PyObject *)__pyx_n_s__a2)); if (unlikely(!__pyx_k_tuple_401)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8917; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_401); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_401)); __pyx_k_codeobj_402 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_401, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__polyadd, 8917, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_402)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8917; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":8963 * * * def polyder(p, m=1): # <<<<<<<<<<<<<< * """Return the derivative of the specified order of a polynomial. * */ __pyx_k_tuple_403 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__p), ((PyObject *)__pyx_n_s__m)); if (unlikely(!__pyx_k_tuple_403)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_403); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_403)); __pyx_k_codeobj_404 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_403, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__polyder, 8963, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_404)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9017 * * * def polydiv(u, v): # <<<<<<<<<<<<<< * """Returns the quotient and remainder of polynomial division. * */ __pyx_k_tuple_405 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__u), ((PyObject *)__pyx_n_s__v)); if (unlikely(!__pyx_k_tuple_405)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9017; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_405); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_405)); __pyx_k_codeobj_406 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_405, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__polydiv, 9017, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_406)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9017; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9064 * * * def polyfit(x, y, deg, rcond=None, full=False): # <<<<<<<<<<<<<< * """Least squares polynomial fit. * */ __pyx_k_tuple_407 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__x), ((PyObject *)__pyx_n_s__y), ((PyObject *)__pyx_n_s__deg), ((PyObject *)__pyx_n_s__rcond), ((PyObject *)__pyx_n_s__full)); if (unlikely(!__pyx_k_tuple_407)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_407); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_407)); __pyx_k_codeobj_408 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_407, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__polyfit, 9064, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_408)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9200 * * * def polyint(p, m=1, k=None): # <<<<<<<<<<<<<< * """Return an antiderivative (indefinite integral) of a polynomial. * */ __pyx_k_tuple_409 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__p), ((PyObject *)__pyx_n_s__m), ((PyObject *)__pyx_n_s__k)); if (unlikely(!__pyx_k_tuple_409)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_409); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_409)); __pyx_k_codeobj_410 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_409, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__polyint, 9200, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_410)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9269 * * * def polymul(a1, a2): # <<<<<<<<<<<<<< * """Find the product of two polynomials. * */ __pyx_k_tuple_411 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a1), ((PyObject *)__pyx_n_s__a2)); if (unlikely(!__pyx_k_tuple_411)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_411); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_411)); __pyx_k_codeobj_412 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_411, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__polymul, 9269, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_412)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9318 * * * def polysub(a1, a2): # <<<<<<<<<<<<<< * """Difference (subtraction) of two polynomials. * */ __pyx_k_tuple_413 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a1), ((PyObject *)__pyx_n_s__a2)); if (unlikely(!__pyx_k_tuple_413)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_413); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_413)); __pyx_k_codeobj_414 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_413, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__polysub, 9318, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_414)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9350 * * * def polyval(p, x): # <<<<<<<<<<<<<< * """Evaluate a polynomial at specific values. * */ __pyx_k_tuple_415 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__p), ((PyObject *)__pyx_n_s__x)); if (unlikely(!__pyx_k_tuple_415)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_415); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_415)); __pyx_k_codeobj_416 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_415, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__polyval, 9350, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_416)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9411 * * * def ppmt(rate, per, nper, pv, fv=0.0, when='end'): # <<<<<<<<<<<<<< * """Not implemented. Compute the payment against loan principal. * */ __pyx_k_tuple_417 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__rate), ((PyObject *)__pyx_n_s__per), ((PyObject *)__pyx_n_s__nper), ((PyObject *)__pyx_n_s__pv), ((PyObject *)__pyx_n_s__fv), ((PyObject *)__pyx_n_s__when)); if (unlikely(!__pyx_k_tuple_417)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_417); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_417)); __pyx_k_codeobj_418 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_417, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__ppmt, 9411, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_418)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9438 * * * def prod(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the product of array elements over a given axis. * */ __pyx_k_tuple_419 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_419)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9438; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_419); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_419)); __pyx_k_codeobj_420 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_419, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__prod, 9438, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_420)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9438; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9514 * * * def product(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the product of array elements over a given axis. * */ __pyx_k_tuple_421 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_421)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_421); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_421)); __pyx_k_codeobj_422 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_421, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__product, 9514, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_422)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9525 * * * def promote_types(type1, type2): # <<<<<<<<<<<<<< * """promote_types(type1, type2) * */ __pyx_k_tuple_423 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__type1), ((PyObject *)__pyx_n_s__type2)); if (unlikely(!__pyx_k_tuple_423)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9525; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_423); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_423)); __pyx_k_codeobj_424 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_423, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__promote_types, 9525, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_424)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9525; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9575 * * * def ptp(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Range of values (maximum - minimum) along an axis. * */ __pyx_k_tuple_425 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_425)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9575; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_425); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_425)); __pyx_k_codeobj_426 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_425, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__ptp, 9575, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_426)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9575; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9615 * * * def put(a, ind, v, mode='raise'): # <<<<<<<<<<<<<< * """Replaces specified elements of an array with given values. * */ __pyx_k_tuple_427 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__ind), ((PyObject *)__pyx_n_s__v), ((PyObject *)__pyx_n_s__mode)); if (unlikely(!__pyx_k_tuple_427)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_427); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_427)); __pyx_k_codeobj_428 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_427, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__put, 9615, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_428)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9665 * * * def putmask(a, mask, values): # <<<<<<<<<<<<<< * """putmask(a, mask, values) * */ __pyx_k_tuple_429 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__mask), ((PyObject *)__pyx_n_s__values)); if (unlikely(!__pyx_k_tuple_429)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9665; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_429); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_429)); __pyx_k_codeobj_430 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_429, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__putmask, 9665, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_430)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9665; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9709 * * * def pv(rate, nper, pmt, fv=0.0, when='end'): # <<<<<<<<<<<<<< * """Compute the present value. * */ __pyx_k_tuple_431 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__rate), ((PyObject *)__pyx_n_s__nper), ((PyObject *)__pyx_n_s__pmt), ((PyObject *)__pyx_n_s__fv), ((PyObject *)__pyx_n_s__when)); if (unlikely(!__pyx_k_tuple_431)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9709; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_431); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_431)); __pyx_k_codeobj_432 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_431, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__pv, 9709, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_432)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9709; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9797 * * * def rank(a): # <<<<<<<<<<<<<< * """Return the number of dimensions of an array. * */ __pyx_k_tuple_433 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_433)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9797; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_433); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_433)); __pyx_k_codeobj_434 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_433, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__rank, 9797, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_434)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9797; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9839 * * * def rate(nper, pmt, pv, fv, when='end', guess=0.1, tol=1e-06, maxiter=100): # <<<<<<<<<<<<<< * """Compute the rate of interest per period. * */ __pyx_k_tuple_435 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__nper), ((PyObject *)__pyx_n_s__pmt), ((PyObject *)__pyx_n_s__pv), ((PyObject *)__pyx_n_s__fv), ((PyObject *)__pyx_n_s__when), ((PyObject *)__pyx_n_s__guess), ((PyObject *)__pyx_n_s__tol), ((PyObject *)__pyx_n_s__maxiter)); if (unlikely(!__pyx_k_tuple_435)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_435); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_435)); __pyx_k_codeobj_436 = (PyObject*)__Pyx_PyCode_New(8, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_435, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__rate, 9839, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_436)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9884 * * * def ravel(a, order='C'): # <<<<<<<<<<<<<< * """Return a flattened array. * */ __pyx_k_tuple_437 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__order)); if (unlikely(!__pyx_k_tuple_437)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9884; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_437); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_437)); __pyx_k_codeobj_438 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_437, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__ravel, 9884, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_438)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9884; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":9968 * * * def ravel_multi_index(multi_index, dims, mode='raise', order='C'): # <<<<<<<<<<<<<< * """ravel_multi_index(multi_index, dims, mode='raise', order='C') * */ __pyx_k_tuple_439 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__multi_index), ((PyObject *)__pyx_n_s__dims), ((PyObject *)__pyx_n_s__mode), ((PyObject *)__pyx_n_s__order)); if (unlikely(!__pyx_k_tuple_439)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_439); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_439)); __pyx_k_codeobj_440 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_439, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__ravel_multi_index, 9968, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_440)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10028 * * * def real(val): # <<<<<<<<<<<<<< * """Return the real part of the elements of the array. * */ __pyx_k_tuple_441 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__val)); if (unlikely(!__pyx_k_tuple_441)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10028; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_441); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_441)); __pyx_k_codeobj_442 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_441, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__real, 10028, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_442)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10028; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10062 * * * def real_if_close(a, tol=100): # <<<<<<<<<<<<<< * """If complex input returns a real array if complex parts are close to zero. * */ __pyx_k_tuple_443 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__tol)); if (unlikely(!__pyx_k_tuple_443)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10062; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_443); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_443)); __pyx_k_codeobj_444 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_443, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__real_if_close, 10062, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_444)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10062; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10107 * * * def recfromcsv(fname): # <<<<<<<<<<<<<< * """Load ASCII data stored in a comma-separated file. * */ __pyx_k_tuple_445 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__fname)); if (unlikely(!__pyx_k_tuple_445)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_445); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_445)); __pyx_k_codeobj_446 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_445, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__recfromcsv, 10107, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_446)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10124 * * * def recfromtxt(fname): # <<<<<<<<<<<<<< * """Load ASCII data from a file and return it in a record array. * */ __pyx_k_tuple_447 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__fname)); if (unlikely(!__pyx_k_tuple_447)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_447); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_447)); __pyx_k_codeobj_448 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_447, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__recfromtxt, 10124, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_448)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10146 * * * def repeat(a, repeats, axis=None): # <<<<<<<<<<<<<< * """Repeat elements of an array. * */ __pyx_k_tuple_449 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__repeats), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_449)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_449); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_449)); __pyx_k_codeobj_450 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_449, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__repeat, 10146, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_450)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10187 * * * def require(a, dtype=None, requirements=None): # <<<<<<<<<<<<<< * """Return an ndarray of the provided type that satisfies requirements. * */ __pyx_k_tuple_451 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__requirements)); if (unlikely(!__pyx_k_tuple_451)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_451); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_451)); __pyx_k_codeobj_452 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_451, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__require, 10187, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_452)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10246 * * * def reshape(a, newshape, order='C'): # <<<<<<<<<<<<<< * """Gives a new shape to an array without changing its data. * */ __pyx_k_tuple_453 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__newshape), ((PyObject *)__pyx_n_s__order)); if (unlikely(!__pyx_k_tuple_453)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_453); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_453)); __pyx_k_codeobj_454 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_453, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__reshape, 10246, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_454)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10308 * * * def resize(a, new_shape): # <<<<<<<<<<<<<< * """Return a new array with the specified shape. * */ __pyx_k_tuple_455 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__new_shape)); if (unlikely(!__pyx_k_tuple_455)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_455); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_455)); __pyx_k_codeobj_456 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_455, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__resize, 10308, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_456)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10348 * * * def restoredot(): # <<<<<<<<<<<<<< * """Restore `dot`, `vdot`, and `innerproduct` to the default non-BLAS * implementations. */ __pyx_k_codeobj_457 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__restoredot, 10348, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_457)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10348; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10366 * * * def result_type(*arrays_and_dtypes): # <<<<<<<<<<<<<< * """result_type(*arrays_and_dtypes) * */ __pyx_k_tuple_458 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__arrays_and_dtypes), ((PyObject *)__pyx_n_s__arrays_and_dtypes)); if (unlikely(!__pyx_k_tuple_458)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_458); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_458)); __pyx_k_codeobj_459 = (PyObject*)__Pyx_PyCode_New(0, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_458, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__result_type, 10366, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_459)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10437 * * * def roll(a, shift, axis=None): # <<<<<<<<<<<<<< * """Roll array elements along a given axis. * */ __pyx_k_tuple_460 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__shift), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_460)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_460); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_460)); __pyx_k_codeobj_461 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_460, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__roll, 10437, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_461)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10488 * * * def rollaxis(a, axis, start=0): # <<<<<<<<<<<<<< * """Roll the specified axis backwards, until it lies in a given position. * */ __pyx_k_tuple_462 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__start)); if (unlikely(!__pyx_k_tuple_462)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_462); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_462)); __pyx_k_codeobj_463 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_462, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__rollaxis, 10488, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_463)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10526 * * * def roots(p): # <<<<<<<<<<<<<< * """Return the roots of a polynomial with coefficients given in p. * */ __pyx_k_tuple_464 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__p)); if (unlikely(!__pyx_k_tuple_464)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10526; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_464); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_464)); __pyx_k_codeobj_465 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_464, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__roots, 10526, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_465)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10526; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10577 * * * def rot90(m, k=1): # <<<<<<<<<<<<<< * """Rotate an array by 90 degrees in the counter-clockwise direction. * */ __pyx_k_tuple_466 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__m), ((PyObject *)__pyx_n_s__k)); if (unlikely(!__pyx_k_tuple_466)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_466); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_466)); __pyx_k_codeobj_467 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_466, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__rot90, 10577, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_467)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10617 * * * def round(a, decimals=0, out=None): # <<<<<<<<<<<<<< * """Round an array to the given number of decimals. * */ __pyx_k_tuple_468 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__decimals), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_468)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_468); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_468)); __pyx_k_codeobj_469 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_468, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__round, 10617, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_469)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10630 * * * def round_(a, decimals=0, out=None): # <<<<<<<<<<<<<< * """Round an array to the given number of decimals. * */ __pyx_k_tuple_470 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__decimals), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_470)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_470); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_470)); __pyx_k_codeobj_471 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_470, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__round_, 10630, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_471)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10643 * * * def row_stack(tup): # <<<<<<<<<<<<<< * """Stack arrays in sequence vertically (row wise). * */ __pyx_k_tuple_472 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__tup)); if (unlikely(!__pyx_k_tuple_472)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10643; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_472); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_472)); __pyx_k_codeobj_473 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_472, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__row_stack, 10643, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_473)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10643; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10694 * * * def safe_eval(source): # <<<<<<<<<<<<<< * """Protected string evaluation. * */ __pyx_k_tuple_474 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__source)); if (unlikely(!__pyx_k_tuple_474)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10694; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_474); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_474)); __pyx_k_codeobj_475 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_474, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__safe_eval, 10694, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_475)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10694; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10739 * * * def save(file, arr): # <<<<<<<<<<<<<< * """Save an array to a binary file in NumPy ``.npy`` format. * */ __pyx_k_tuple_476 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__file), ((PyObject *)__pyx_n_s__arr)); if (unlikely(!__pyx_k_tuple_476)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10739; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_476); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_476)); __pyx_k_codeobj_477 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_476, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__save, 10739, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_477)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10739; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10777 * * * def savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n'): # <<<<<<<<<<<<<< * """Save an array to a text file. * */ __pyx_k_tuple_478 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__fname), ((PyObject *)__pyx_n_s__X), ((PyObject *)__pyx_n_s__fmt), ((PyObject *)__pyx_n_s__delimiter), ((PyObject *)__pyx_n_s__newline)); if (unlikely(!__pyx_k_tuple_478)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_478); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_478)); __pyx_k_codeobj_479 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_478, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__savetxt, 10777, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_479)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10868 * * * def savez(file): # <<<<<<<<<<<<<< * """Save several arrays into a single file in uncompressed ``.npz`` format. * */ __pyx_k_tuple_480 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__file)); if (unlikely(!__pyx_k_tuple_480)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10868; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_480); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_480)); __pyx_k_codeobj_481 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_480, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__savez, 10868, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_481)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10868; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10948 * * * def savez_compressed(file): # <<<<<<<<<<<<<< * """Save several arrays into a single file in compressed ``.npz`` format. * */ __pyx_k_tuple_482 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__file)); if (unlikely(!__pyx_k_tuple_482)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10948; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_482); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_482)); __pyx_k_codeobj_483 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_482, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__savez_compressed, 10948, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_483)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10948; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":10972 * * * def sctype2char(sctype): # <<<<<<<<<<<<<< * """Return the string representation of a scalar dtype. * */ __pyx_k_tuple_484 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__sctype)); if (unlikely(!__pyx_k_tuple_484)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_484); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_484)); __pyx_k_codeobj_485 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_484, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__sctype2char, 10972, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_485)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11016 * * * def searchsorted(a, v, side='left'): # <<<<<<<<<<<<<< * """Find indices where elements should be inserted to maintain order. * */ __pyx_k_tuple_486 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__v), ((PyObject *)__pyx_n_s__side)); if (unlikely(!__pyx_k_tuple_486)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11016; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_486); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_486)); __pyx_k_codeobj_487 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_486, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__searchsorted, 11016, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_487)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11016; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11064 * * * def select(condlist, choicelist, default=0): # <<<<<<<<<<<<<< * """Return an array drawn from elements in choicelist, depending on conditions. * */ __pyx_k_tuple_488 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__condlist), ((PyObject *)__pyx_n_s__choicelist), ((PyObject *)__pyx_n_s__default)); if (unlikely(!__pyx_k_tuple_488)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_488); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_488)); __pyx_k_codeobj_489 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_488, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__select, 11064, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_489)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11103 * * * def set_numeric_ops(): # <<<<<<<<<<<<<< * """set_numeric_ops(op1=func1, op2=func2, ...) * */ __pyx_k_codeobj_490 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__set_numeric_ops, 11103, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_490)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11149 * * * def set_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, suppress=None, nanstr=None, infstr=None): # <<<<<<<<<<<<<< * """Set printing options. * */ __pyx_k_tuple_491 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__precision), ((PyObject *)__pyx_n_s__threshold), ((PyObject *)__pyx_n_s__edgeitems), ((PyObject *)__pyx_n_s__linewidth), ((PyObject *)__pyx_n_s__suppress), ((PyObject *)__pyx_n_s__nanstr), ((PyObject *)__pyx_n_s__infstr)); if (unlikely(!__pyx_k_tuple_491)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_491); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_491)); __pyx_k_codeobj_492 = (PyObject*)__Pyx_PyCode_New(7, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_491, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__set_printoptions, 11149, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_492)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11214 * * * def set_string_function(f, repr=True): # <<<<<<<<<<<<<< * """Set a Python function to be used when pretty printing arrays. * */ __pyx_k_tuple_493 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__repr)); if (unlikely(!__pyx_k_tuple_493)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_493); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_493)); __pyx_k_codeobj_494 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_493, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__set_string_function, 11214, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_494)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11267 * * * def setbufsize(size): # <<<<<<<<<<<<<< * """Set the size of the buffer used in ufuncs. * */ __pyx_k_tuple_495 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__size)); if (unlikely(!__pyx_k_tuple_495)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_495); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_495)); __pyx_k_codeobj_496 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_495, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__setbufsize, 11267, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_496)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11279 * * * def setdiff1d(ar1, ar2, assume_unique=False): # <<<<<<<<<<<<<< * """Find the set difference of two arrays. * */ __pyx_k_tuple_497 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__ar1), ((PyObject *)__pyx_n_s__ar2), ((PyObject *)__pyx_n_s__assume_unique)); if (unlikely(!__pyx_k_tuple_497)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_497); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_497)); __pyx_k_codeobj_498 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_497, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__setdiff1d, 11279, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_498)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11315 * * * def seterr(all=None, divide=None, over=None, under=None, invalid=None): # <<<<<<<<<<<<<< * """Set how floating-point errors are handled. * */ __pyx_k_tuple_499 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__all), ((PyObject *)__pyx_n_s__divide), ((PyObject *)__pyx_n_s__over), ((PyObject *)__pyx_n_s__under), ((PyObject *)__pyx_n_s__invalid)); if (unlikely(!__pyx_k_tuple_499)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_499); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_499)); __pyx_k_codeobj_500 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_499, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__seterr, 11315, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_500)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11394 * * * def seterrcall(func): # <<<<<<<<<<<<<< * """Set the floating-point error callback function or log object. * */ __pyx_k_tuple_501 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__func)); if (unlikely(!__pyx_k_tuple_501)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_501); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_501)); __pyx_k_codeobj_502 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_501, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__seterrcall, 11394, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_502)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11477 * * * def seterrobj(errobj): # <<<<<<<<<<<<<< * """seterrobj(errobj) * */ __pyx_k_tuple_503 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__errobj)); if (unlikely(!__pyx_k_tuple_503)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11477; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_503); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_503)); __pyx_k_codeobj_504 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_503, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__seterrobj, 11477, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_504)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11477; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11538 * * * def setxor1d(ar1, ar2, assume_unique=False): # <<<<<<<<<<<<<< * """Find the set exclusive-or of two arrays. * */ __pyx_k_tuple_505 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__ar1), ((PyObject *)__pyx_n_s__ar2), ((PyObject *)__pyx_n_s__assume_unique)); if (unlikely(!__pyx_k_tuple_505)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_505); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_505)); __pyx_k_codeobj_506 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_505, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__setxor1d, 11538, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_506)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11569 * * * def show_config(): # <<<<<<<<<<<<<< * """ * */ __pyx_k_codeobj_507 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__show_config, 11569, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_507)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11576 * * * def sinc(x): # <<<<<<<<<<<<<< * """Return the sinc function. * */ __pyx_k_tuple_508 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__x)); if (unlikely(!__pyx_k_tuple_508)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11576; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_508); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_508)); __pyx_k_codeobj_509 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_508, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__sinc, 11576, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_509)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11576; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11653 * * * def size(a, axis=None): # <<<<<<<<<<<<<< * """Return the number of elements along a given axis. * */ __pyx_k_tuple_510 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_510)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_510); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_510)); __pyx_k_codeobj_511 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_510, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__size, 11653, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_511)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11689 * * * def sometrue(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Check whether some values are true. * */ __pyx_k_tuple_512 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_512)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11689; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_512); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_512)); __pyx_k_codeobj_513 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_512, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__sometrue, 11689, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_513)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11689; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11702 * * * def sort(a, axis=-1, kind='quicksort', order=None): # <<<<<<<<<<<<<< * """Return a sorted copy of an array. * */ __pyx_k_tuple_514 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__kind), ((PyObject *)__pyx_n_s__order)); if (unlikely(!__pyx_k_tuple_514)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11702; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_514); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_514)); __pyx_k_codeobj_515 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_514, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__sort, 11702, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_515)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11702; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11803 * * * def sort_complex(a): # <<<<<<<<<<<<<< * """Sort a complex array using the real part first, then the imaginary part. * */ __pyx_k_tuple_516 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_516)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_516); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_516)); __pyx_k_codeobj_517 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_516, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__sort_complex, 11803, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_517)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11828 * * * def source(object, output=sys.stdout): # <<<<<<<<<<<<<< * """Print or write to a file the source code for a Numpy object. * */ __pyx_k_tuple_518 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__object), ((PyObject *)__pyx_n_s__output)); if (unlikely(!__pyx_k_tuple_518)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_518); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_518)); __pyx_k_codeobj_519 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_518, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__source, 11828, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_519)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11868 * * * def split(ary, indices_or_sections, axis=0): # <<<<<<<<<<<<<< * """Split an array into multiple sub-arrays of equal size. * */ __pyx_k_tuple_520 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__ary), ((PyObject *)__pyx_n_s__indices_or_sections), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_520)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11868; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_520); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_520)); __pyx_k_codeobj_521 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_520, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__split, 11868, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_521)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11868; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11935 * * * def squeeze(a): # <<<<<<<<<<<<<< * """Remove single-dimensional entries from the shape of an array. * */ __pyx_k_tuple_522 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_522)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11935; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_522); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_522)); __pyx_k_codeobj_523 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_522, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__squeeze, 11935, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_523)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11935; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":11961 * * * def std(a, axis=None, dtype=None, out=None, ddof=0): # <<<<<<<<<<<<<< * """Compute the standard deviation along the specified axis. * */ __pyx_k_tuple_524 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__ddof)); if (unlikely(!__pyx_k_tuple_524)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11961; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_524); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_524)); __pyx_k_codeobj_525 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_524, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__std, 11961, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_525)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11961; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12049 * * * def sum(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Sum of array elements over a given axis. * */ __pyx_k_tuple_526 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_526)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12049; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_526); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_526)); __pyx_k_codeobj_527 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_526, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__sum, 12049, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_527)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12049; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12117 * * * def swapaxes(a, axis1, axis2): # <<<<<<<<<<<<<< * """Interchange two axes of an array. * */ __pyx_k_tuple_528 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis1), ((PyObject *)__pyx_n_s__axis2)); if (unlikely(!__pyx_k_tuple_528)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_528); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_528)); __pyx_k_codeobj_529 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_528, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__swapaxes, 12117, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_529)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12160 * * * def take(a, indices, axis=None, out=None, mode='raise'): # <<<<<<<<<<<<<< * """Take elements from an array along an axis. * */ __pyx_k_tuple_530 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__indices), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__mode)); if (unlikely(!__pyx_k_tuple_530)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_530); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_530)); __pyx_k_codeobj_531 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_530, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__take, 12160, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_531)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12216 * * * def tensordot(a, b, axes=2): # <<<<<<<<<<<<<< * """Compute tensor dot product along specified axes for arrays >= 1-D. * */ __pyx_k_tuple_532 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__b), ((PyObject *)__pyx_n_s__axes)); if (unlikely(!__pyx_k_tuple_532)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_532); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_532)); __pyx_k_codeobj_533 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_532, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__tensordot, 12216, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_533)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12332 * * * def tile(A, reps): # <<<<<<<<<<<<<< * """Construct an array by repeating A the number of times given by reps. * */ __pyx_k_tuple_534 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__A), ((PyObject *)__pyx_n_s__reps)); if (unlikely(!__pyx_k_tuple_534)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_534); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_534)); __pyx_k_codeobj_535 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_534, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__tile, 12332, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_535)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12390 * * * def trace(a, offset=0, axis1=0, axis2=1, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the sum along diagonals of the array. * */ __pyx_k_tuple_536 = PyTuple_Pack(6, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__offset), ((PyObject *)__pyx_n_s__axis1), ((PyObject *)__pyx_n_s__axis2), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out)); if (unlikely(!__pyx_k_tuple_536)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12390; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_536); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_536)); __pyx_k_codeobj_537 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_536, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__trace, 12390, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_537)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12390; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12448 * * * def transpose(a, axes=None): # <<<<<<<<<<<<<< * """Permute the dimensions of an array. * */ __pyx_k_tuple_538 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axes)); if (unlikely(!__pyx_k_tuple_538)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_538); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_538)); __pyx_k_codeobj_539 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_538, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__transpose, 12448, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_539)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12488 * * * def trapz(y, x=None, dx=1.0, axis=-1): # <<<<<<<<<<<<<< * """Integrate along the given axis using the composite trapezoidal rule. * */ __pyx_k_tuple_540 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__y), ((PyObject *)__pyx_n_s__x), ((PyObject *)__pyx_n_s__dx), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_540)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_540); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_540)); __pyx_k_codeobj_541 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_540, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__trapz, 12488, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_541)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12549 * * * def tri(N, M=None, k=0, dtype=float): # <<<<<<<<<<<<<< * """An array with ones at and below the given diagonal and zeros elsewhere. * */ __pyx_k_tuple_542 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__N), ((PyObject *)__pyx_n_s__M), ((PyObject *)__pyx_n_s__k), ((PyObject *)__pyx_n_s__dtype)); if (unlikely(!__pyx_k_tuple_542)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_542); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_542)); __pyx_k_codeobj_543 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_542, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__tri, 12549, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_543)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12588 * * * def tril(m, k=0): # <<<<<<<<<<<<<< * """Lower triangle of an array. * */ __pyx_k_tuple_544 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__m), ((PyObject *)__pyx_n_s__k)); if (unlikely(!__pyx_k_tuple_544)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12588; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_544); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_544)); __pyx_k_codeobj_545 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_544, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__tril, 12588, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_545)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12588; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12622 * * * def tril_indices(n, k=0): # <<<<<<<<<<<<<< * """Return the indices for the lower-triangle of an (n, n) array. * */ __pyx_k_tuple_546 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__k)); if (unlikely(!__pyx_k_tuple_546)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12622; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_546); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_546)); __pyx_k_codeobj_547 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_546, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__tril_indices, 12622, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_547)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12622; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12694 * * * def tril_indices_from(arr, k=0): # <<<<<<<<<<<<<< * """Return the indices for the lower-triangle of arr. * */ __pyx_k_tuple_548 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__arr), ((PyObject *)__pyx_n_s__k)); if (unlikely(!__pyx_k_tuple_548)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12694; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_548); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_548)); __pyx_k_codeobj_549 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_548, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__tril_indices_from, 12694, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_549)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12694; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12719 * * * def trim_zeros(filt, trim='fb'): # <<<<<<<<<<<<<< * """Trim the leading and/or trailing zeros from a 1-D array or sequence. * */ __pyx_k_tuple_550 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__filt), ((PyObject *)__pyx_n_s__trim)); if (unlikely(!__pyx_k_tuple_550)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12719; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_550); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_550)); __pyx_k_codeobj_551 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_550, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__trim_zeros, 12719, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_551)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12719; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12754 * * * def triu(m, k=0): # <<<<<<<<<<<<<< * """Upper triangle of an array. * */ __pyx_k_tuple_552 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__m), ((PyObject *)__pyx_n_s__k)); if (unlikely(!__pyx_k_tuple_552)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12754; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_552); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_552)); __pyx_k_codeobj_553 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_552, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__triu, 12754, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_553)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12754; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12778 * * * def triu_indices(n, k=0): # <<<<<<<<<<<<<< * """Return the indices for the upper-triangle of an (n, n) array. * */ __pyx_k_tuple_554 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__k)); if (unlikely(!__pyx_k_tuple_554)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_554); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_554)); __pyx_k_codeobj_555 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_554, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__triu_indices, 12778, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_555)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12851 * * * def triu_indices_from(arr, k=0): # <<<<<<<<<<<<<< * """Return the indices for the upper-triangle of an (n, n) array. * */ __pyx_k_tuple_556 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__arr), ((PyObject *)__pyx_n_s__k)); if (unlikely(!__pyx_k_tuple_556)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_556); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_556)); __pyx_k_codeobj_557 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_556, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__triu_indices_from, 12851, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_557)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12876 * * * def typename(char_): # <<<<<<<<<<<<<< * """Return a description for the given data type code. * */ __pyx_k_tuple_558 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__char_)); if (unlikely(!__pyx_k_tuple_558)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_558); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_558)); __pyx_k_codeobj_559 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_558, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__typename, 12876, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_559)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12927 * * * def union1d(ar1, ar2): # <<<<<<<<<<<<<< * """Find the union of two arrays. * */ __pyx_k_tuple_560 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__ar1), ((PyObject *)__pyx_n_s__ar2)); if (unlikely(!__pyx_k_tuple_560)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12927; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_560); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_560)); __pyx_k_codeobj_561 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_560, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__union1d, 12927, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_561)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12927; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":12957 * * * def unique(ar, return_index=False, return_inverse=False): # <<<<<<<<<<<<<< * """Find the unique elements of an array. * */ __pyx_k_tuple_562 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__ar), ((PyObject *)__pyx_n_s__return_index), ((PyObject *)__pyx_n_s__return_inverse)); if (unlikely(!__pyx_k_tuple_562)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_562); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_562)); __pyx_k_codeobj_563 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_562, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__unique, 12957, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_563)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":13028 * * * def unpackbits(myarray, axis=None): # <<<<<<<<<<<<<< * """unpackbits(myarray, axis=None) * */ __pyx_k_tuple_564 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__myarray), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_564)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13028; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_564); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_564)); __pyx_k_codeobj_565 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_564, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__unpackbits, 13028, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_565)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13028; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":13073 * * * def unravel_index(indices, dims, order='C'): # <<<<<<<<<<<<<< * """unravel_index(indices, dims, order='C') * */ __pyx_k_tuple_566 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__indices), ((PyObject *)__pyx_n_s__dims), ((PyObject *)__pyx_n_s__order)); if (unlikely(!__pyx_k_tuple_566)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13073; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_566); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_566)); __pyx_k_codeobj_567 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_566, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__unravel_index, 13073, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_567)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13073; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":13118 * * * def unwrap(p, discont=3.14159265359, axis=-1): # <<<<<<<<<<<<<< * """Unwrap by changing deltas between values to 2*pi complement. * */ __pyx_k_tuple_568 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__p), ((PyObject *)__pyx_n_s__discont), ((PyObject *)__pyx_n_s__axis)); if (unlikely(!__pyx_k_tuple_568)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_568); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_568)); __pyx_k_codeobj_569 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_568, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__unwrap, 13118, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_569)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":13161 * * * def vander(x, N=None): # <<<<<<<<<<<<<< * """Generate a Van der Monde matrix. * */ __pyx_k_tuple_570 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__x), ((PyObject *)__pyx_n_s__N)); if (unlikely(!__pyx_k_tuple_570)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_570); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_570)); __pyx_k_codeobj_571 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_570, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__vander, 13161, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_571)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":13219 * * * def var(a, axis=None, dtype=None, out=None, ddof=0): # <<<<<<<<<<<<<< * """Compute the variance along the specified axis. * */ __pyx_k_tuple_572 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__axis), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__ddof)); if (unlikely(!__pyx_k_tuple_572)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_572); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_572)); __pyx_k_codeobj_573 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_572, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__var, 13219, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_573)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":13309 * * * def vdot(): # <<<<<<<<<<<<<< * """Return the dot product of two vectors. * */ __pyx_k_codeobj_574 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__vdot, 13309, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_574)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13309; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":13364 * * * def vsplit(ary, indices_or_sections): # <<<<<<<<<<<<<< * """Split an array into multiple sub-arrays vertically (row-wise). * */ __pyx_k_tuple_575 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__ary), ((PyObject *)__pyx_n_s__indices_or_sections)); if (unlikely(!__pyx_k_tuple_575)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_575); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_575)); __pyx_k_codeobj_576 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_575, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__vsplit, 13364, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_576)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":13413 * * * def vstack(tup): # <<<<<<<<<<<<<< * """Stack arrays in sequence vertically (row wise). * */ __pyx_k_tuple_577 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__tup)); if (unlikely(!__pyx_k_tuple_577)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_577); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_577)); __pyx_k_codeobj_578 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_577, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__vstack, 13413, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_578)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":13464 * * * def where(): # <<<<<<<<<<<<<< * """where(condition, [x, y]) * */ __pyx_k_codeobj_579 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__where, 13464, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_579)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13464; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/notimplemented.pyx":13526 * * * def who(vardict=None): # <<<<<<<<<<<<<< * """Print the Numpy arrays in the given dictionary. * */ __pyx_k_tuple_580 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__vardict)); if (unlikely(!__pyx_k_tuple_580)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13526; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_580); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_580)); __pyx_k_codeobj_581 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_580, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_67, __pyx_n_s__who, 13526, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_581)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13526; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; __Pyx_RefNannyFinishContext(); return -1; } static int __Pyx_InitGlobals(void) { if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_10 = PyInt_FromLong(10); if (unlikely(!__pyx_int_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_76 = PyInt_FromLong(76); if (unlikely(!__pyx_int_76)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_100 = PyInt_FromLong(100); if (unlikely(!__pyx_int_100)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; return 0; __pyx_L1_error:; return -1; } #if PY_MAJOR_VERSION < 3 PyMODINIT_FUNC initnotimplemented(void); /*proto*/ PyMODINIT_FUNC initnotimplemented(void) #else PyMODINIT_FUNC PyInit_notimplemented(void); /*proto*/ PyMODINIT_FUNC PyInit_notimplemented(void) #endif { PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannyDeclarations #if CYTHON_REFNANNY __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); if (!__Pyx_RefNanny) { PyErr_Clear(); __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); if (!__Pyx_RefNanny) Py_FatalError("failed to import 'refnanny' module"); } #endif __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_notimplemented(void)", 0); if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #ifdef __Pyx_CyFunction_USED if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif #ifdef __Pyx_FusedFunction_USED if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif #ifdef __Pyx_Generator_USED if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif /*--- Library function declarations ---*/ /*--- Threads initialization code ---*/ #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS #ifdef WITH_THREAD /* Python build with threading support? */ PyEval_InitThreads(); #endif #endif /*--- Module creation code ---*/ #if PY_MAJOR_VERSION < 3 __pyx_m = Py_InitModule4(__Pyx_NAMESTR("notimplemented"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); #else __pyx_m = PyModule_Create(&__pyx_moduledef); #endif if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} Py_INCREF(__pyx_d); #if PY_MAJOR_VERSION >= 3 { PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!PyDict_GetItemString(modules, "ga4py.gain.notimplemented")) { if (unlikely(PyDict_SetItemString(modules, "ga4py.gain.notimplemented", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } } #endif __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #if CYTHON_COMPILING_IN_PYPY Py_INCREF(__pyx_b); #endif if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; /*--- Initialize various global constants etc. ---*/ if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif if (__pyx_module_is_main_ga4py__gain__notimplemented) { if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; } /*--- Builtin init code ---*/ if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Constants init code ---*/ if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Global init code ---*/ /*--- Variable export code ---*/ /*--- Function export code ---*/ /*--- Type init code ---*/ /*--- Type import code ---*/ __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", #if CYTHON_COMPILING_IN_PYPY sizeof(PyTypeObject), #else sizeof(PyHeapTypeObject), #endif 0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Variable import code ---*/ /*--- Function import code ---*/ /*--- Execution code ---*/ /* "ga4py/gain/notimplemented.pyx":2 * * import sys # <<<<<<<<<<<<<< * * import numpy as np */ __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__sys), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__sys, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":4 * import sys * * import numpy as np # <<<<<<<<<<<<<< * cimport numpy as np * */ __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8 * * * def docstring(obj, docstring): # <<<<<<<<<<<<<< * """docstring(obj, docstring) * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_1docstring, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__docstring, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":21 * * * def add_newdoc(place, obj, doc): # <<<<<<<<<<<<<< * """Adds documentation to obj which is in module place. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_3add_newdoc, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__add_newdoc, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":40 * * * def all(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Test whether all array elements along a given axis evaluate to True. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_5all, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__all, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":99 * * * def allclose(a, b, rtol=1e-05, atol=1e-08): # <<<<<<<<<<<<<< * """Returns True if two arrays are element-wise equal within a tolerance. * */ __pyx_t_1 = PyFloat_FromDouble(1e-05); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_1 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyFloat_FromDouble(1e-08); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_2 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_7allclose, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__allclose, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":153 * * * def alltrue(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Check if all elements of input array are true. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_9alltrue, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__alltrue, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":164 * * * def alterdot(): # <<<<<<<<<<<<<< * """Change `dot`, `vdot`, and `innerproduct` to use accelerated BLAS functions. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_11alterdot, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__alterdot, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":187 * * * def amax(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the maximum of an array or maximum along an axis. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_13amax, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__amax, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":244 * * * def amin(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the minimum of an array or minimum along an axis. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_15amin, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__amin, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":301 * * * def angle(z, deg=0): # <<<<<<<<<<<<<< * """Return the angle of the complex argument. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_17angle, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__angle, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":335 * * * def any(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Test whether any array element along a given axis evaluates to True. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_19any, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__any, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":401 * * * def append(arr, values, axis=None): # <<<<<<<<<<<<<< * """Append values to the end of an array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_21append, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__append, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":449 * * * def apply_along_axis(func1d, axis, arr): # <<<<<<<<<<<<<< * """Apply a function to 1-D slices along the given axis. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_23apply_along_axis, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__apply_along_axis, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":506 * * * def apply_over_axes(func, a, axes): # <<<<<<<<<<<<<< * """Apply a function repeatedly over multiple axes. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_25apply_over_axes, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__apply_over_axes, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":560 * * * def argmax(a, axis=None): # <<<<<<<<<<<<<< * """Indices of the maximum values along an axis. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_27argmax, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__argmax, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":612 * * * def argmin(a, axis=None): # <<<<<<<<<<<<<< * """Return the indices of the minimum values along an axis. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_29argmin, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__argmin, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":624 * * * def argsort(a, axis=-1, kind='quicksort', order=None): # <<<<<<<<<<<<<< * """Returns the indices that would sort an array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_31argsort, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__argsort, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":704 * * * def argwhere(a): # <<<<<<<<<<<<<< * """Find the indices of array elements that are non-zero, grouped by element. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_33argwhere, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__argwhere, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":744 * * * def around(a, decimals=0, out=None): # <<<<<<<<<<<<<< * """Evenly round to the given number of decimals. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_35around, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__around, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":812 * * * def array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0): # <<<<<<<<<<<<<< * """array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0) * */ __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_3 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_4 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_37array, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__array, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":906 * * * def array2string(a, max_line_width=None, precision=None, suppress_small=None, separator=' ', prefix='', style=repr): # <<<<<<<<<<<<<< * """Return a string representation of an array. * */ __pyx_t_1 = __Pyx_GetBuiltinName(__pyx_n_s__repr); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 906; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_7 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_39array2string, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 906; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__array2string, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 906; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":955 * * * def array_equal(a1, a2): # <<<<<<<<<<<<<< * """True if two arrays have the same shape and elements, False otherwise. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_41array_equal, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__array_equal, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":990 * * * def array_equiv(a1, a2): # <<<<<<<<<<<<<< * """Returns True if input arrays are shape consistent and all elements equal. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_43array_equiv, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 990; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__array_equiv, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 990; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":1027 * * * def array_repr(arr, max_line_width=None, precision=None, suppress_small=None): # <<<<<<<<<<<<<< * """Return the string representation of an array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_45array_repr, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__array_repr, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":1071 * * * def array_split(ary, indices_or_sections, axis=0): # <<<<<<<<<<<<<< * """Split an array into multiple sub-arrays of equal or near-equal size. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_47array_split, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__array_split, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":1093 * * * def array_str(a, max_line_width=None, precision=None, suppress_small=None): # <<<<<<<<<<<<<< * """Return a string representation of the data in an array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_49array_str, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__array_str, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":1129 * * * def asanyarray(a, dtype=None, order=None): # <<<<<<<<<<<<<< * """Convert the input to an ndarray, but pass ndarray subclasses through. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_51asanyarray, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__asanyarray, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":1181 * * * def asarray_chkfinite(a): # <<<<<<<<<<<<<< * """Convert the input to an array, checking for NaNs or Infs. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_53asarray_chkfinite, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__asarray_chkfinite, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":1243 * * * def ascontiguousarray(a, dtype=None): # <<<<<<<<<<<<<< * """Return a contiguous array in memory (C order). * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_55ascontiguousarray, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ascontiguousarray, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":1279 * * * def asfarray(a, dtype=np.float64): # <<<<<<<<<<<<<< * """Return an array converted to a float type. * */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__float64); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_k_8 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_57asfarray, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__asfarray, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":1308 * * * def asfortranarray(a, dtype=None): # <<<<<<<<<<<<<< * """Return an array laid out in Fortran order in memory. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_59asfortranarray, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__asfortranarray, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":1344 * * * def asmatrix(data, dtype=None): # <<<<<<<<<<<<<< * """Interpret the input as a matrix. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_61asmatrix, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__asmatrix, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":1376 * * * def asscalar(a): # <<<<<<<<<<<<<< * """Convert an array of size 1 to its scalar equivalent. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_63asscalar, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__asscalar, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":1398 * * * def atleast_1d(): # <<<<<<<<<<<<<< * """Convert inputs to arrays with at least one dimension. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_65atleast_1d, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__atleast_1d, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":1439 * * * def atleast_2d(): # <<<<<<<<<<<<<< * """View inputs as arrays with at least two dimensions. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_67atleast_2d, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__atleast_2d, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":1478 * * * def atleast_3d(): # <<<<<<<<<<<<<< * """View inputs as arrays with at least three dimensions. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_69atleast_3d, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1478; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__atleast_3d, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1478; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":1529 * * * def average(a, axis=None, weights=None, returned=False): # <<<<<<<<<<<<<< * """Compute the weighted average along the specified axis. * */ __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_9 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_71average, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__average, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":1604 * * * def bartlett(M): # <<<<<<<<<<<<<< * """Return the Bartlett window. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_73bartlett, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__bartlett, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":1708 * * * def base_repr(number, base=2, padding=0): # <<<<<<<<<<<<<< * """Return a string representation of a number in the given base system. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_75base_repr, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__base_repr, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":1748 * * * def binary_repr(num, width=None): # <<<<<<<<<<<<<< * """Return the binary representation of the input number as a string. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_77binary_repr, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1748; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__binary_repr, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1748; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":1808 * * * def bincount(x, weights=None, minlength=None): # <<<<<<<<<<<<<< * """bincount(x, weights=None, minlength=None) * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_79bincount, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1808; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__bincount, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1808; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":1883 * * * def blackman(M): # <<<<<<<<<<<<<< * """Return the Blackman window. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_81blackman, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1883; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__blackman, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1883; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":1979 * * * def bmat(obj, ldict=None, gdict=None): # <<<<<<<<<<<<<< * """Build a matrix object from a string, nested sequence, or array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_83bmat, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__bmat, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2026 * * * def broadcast_arrays(): # <<<<<<<<<<<<<< * """Broadcast any number of arrays against each other. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_85broadcast_arrays, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2026; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__broadcast_arrays, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2026; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2067 * * * def byte_bounds(a): # <<<<<<<<<<<<<< * """Returns pointers to the end-points of an array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_87byte_bounds, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2067; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__byte_bounds, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2067; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2099 * * * def can_cast(): # <<<<<<<<<<<<<< * """can_cast(from, totype, casting = 'safe') * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_89can_cast, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2099; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__can_cast, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2099; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2202 * * * def choose(a, choices, out=None, mode='raise'): # <<<<<<<<<<<<<< * """Construct an array from an index array and a set of arrays to choose from. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_91choose, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__choose, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2323 * * * def column_stack(tup): # <<<<<<<<<<<<<< * """Stack 1-D arrays as columns into a 2-D array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_93column_stack, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2323; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__column_stack, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2323; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2362 * * * def common_type(): # <<<<<<<<<<<<<< * """Return a scalar type which is common to the input arrays. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_95common_type, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2362; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__common_type, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2362; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2400 * * * def compare_chararrays(): # <<<<<<<<<<<<<< * """ * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_97compare_chararrays, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2400; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__compare_chararrays, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2400; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2408 * * * def compress(condition, a, axis=None, out=None): # <<<<<<<<<<<<<< * """Return selected slices of an array along given axis. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_99compress, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__compress, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2469 * * * def concatenate(): # <<<<<<<<<<<<<< * """concatenate((a1, a2, ...), axis=0) * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_101concatenate, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__concatenate, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2545 * * * def convolve(a, v, mode='full'): # <<<<<<<<<<<<<< * """Returns the discrete, linear convolution of two one-dimensional sequences. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_103convolve, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2545; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__convolve, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2545; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2630 * * * def copy(a): # <<<<<<<<<<<<<< * """Return an array copy of the given object. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_105copy, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__copy, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2669 * * * def corrcoef(x, y=None, rowvar=1, bias=0, ddof=None): # <<<<<<<<<<<<<< * """Return correlation coefficients. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_107corrcoef, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2669; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__corrcoef, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2669; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2718 * * * def correlate(a, v, mode='valid', old_behavior=False): # <<<<<<<<<<<<<< * """Cross-correlation of two 1-dimensional sequences. * */ __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_10 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_109correlate, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__correlate, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2758 * * * def count_nonzero(a): # <<<<<<<<<<<<<< * """count_nonzero(a) * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_111count_nonzero, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2758; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__count_nonzero, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2758; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2790 * * * def cov(m, y=None, rowvar=1, bias=0, ddof=None): # <<<<<<<<<<<<<< * """Estimate a covariance matrix, given data. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_113cov, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__cov, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2790; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2871 * * * def cross(a, b, axisa=-1, axisb=-1, axisc=-1, axis=None): # <<<<<<<<<<<<<< * """Return the cross product of two (arrays of) vectors. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_115cross, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2871; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__cross, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2871; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2979 * * * def cumprod(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the cumulative product of elements along a given axis. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_117cumprod, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__cumprod, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2979; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3041 * * * def cumproduct(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the cumulative product over the given axis. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_119cumproduct, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3041; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__cumproduct, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3041; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3053 * * * def cumsum(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the cumulative sum of the elements along a given axis. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_121cumsum, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3053; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__cumsum, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3053; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3117 * * * def datetime_data(dtype): # <<<<<<<<<<<<<< * """Return (unit, numerator, denominator, events) from a datetime dtype * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_123datetime_data, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__datetime_data, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3124 * * * def delete(arr, obj, axis=None): # <<<<<<<<<<<<<< * """Return a new array with sub-arrays along an axis deleted. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_125delete, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__delete, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3171 * * * def deprecate(): # <<<<<<<<<<<<<< * """Issues a DeprecationWarning, adds warning to `old_name`'s * docstring, rebinds ``old_name.__name__`` and returns the new */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_127deprecate, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__deprecate, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3214 * * * def deprecate_with_doc(msg): # <<<<<<<<<<<<<< * """message * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_129deprecate_with_doc, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__deprecate_with_doc, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3221 * * * def diag_indices(n, ndim=2): # <<<<<<<<<<<<<< * """Return the indices to access the main diagonal of an array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_131diag_indices, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__diag_indices, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3287 * * * def diag_indices_from(arr): # <<<<<<<<<<<<<< * """Return the indices to access the main diagonal of an n-dimensional array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_133diag_indices_from, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3287; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__diag_indices_from, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3287; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3308 * * * def diagflat(v, k=0): # <<<<<<<<<<<<<< * """Create a two-dimensional array with the flattened input as a diagonal. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_135diagflat, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__diagflat, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3349 * * * def diff(a, n=1, axis=-1): # <<<<<<<<<<<<<< * """Calculate the n-th order discrete difference along given axis. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_137diff, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__diff, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3394 * * * def digitize(x, bins): # <<<<<<<<<<<<<< * """digitize(x, bins) * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_139digitize, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__digitize, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3453 * * * def disp(mesg, device=None, linefeed=True): # <<<<<<<<<<<<<< * """Display a message on a device. * */ __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3453; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_11 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_141disp, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3453; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__disp, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3453; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3487 * * * def dsplit(ary, indices_or_sections): # <<<<<<<<<<<<<< * """Split array into multiple sub-arrays along the 3rd axis (depth). * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_143dsplit, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__dsplit, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3530 * * * def dstack(tup): # <<<<<<<<<<<<<< * """Stack arrays in sequence depth wise (along third axis). * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_145dstack, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__dstack, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3580 * * * def ediff1d(ary, to_end=None, to_begin=None): # <<<<<<<<<<<<<< * """The differences between consecutive elements of an array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_147ediff1d, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3580; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ediff1d, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3580; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3625 * * * def einsum(): # <<<<<<<<<<<<<< * """einsum(subscripts, *operands, out=None, dtype=None, order='K', casting='safe') * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_149einsum, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__einsum, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3817 * * * def expand_dims(a, axis): # <<<<<<<<<<<<<< * """Expand the shape of an array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_151expand_dims, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__expand_dims, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3870 * * * def extract(condition, arr): # <<<<<<<<<<<<<< * """Return the elements of an array that satisfy some condition. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_153extract, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3870; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__extract, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3870; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3913 * * * def _fastCopyAndTranspose(a): # <<<<<<<<<<<<<< * """_fastCopyAndTranspose(a) * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_155_fastCopyAndTranspose, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3913; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_212, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3913; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3921 * * * def fill_diagonal(a, val): # <<<<<<<<<<<<<< * """Fill the main diagonal of the given array of any dimensionality. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_157fill_diagonal, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3921; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__fill_diagonal, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3921; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":3982 * * * def find_common_type(array_types, scalar_types): # <<<<<<<<<<<<<< * """Determine common type following standard coercion rules. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_159find_common_type, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3982; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__find_common_type, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3982; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4035 * * * def fix(x, y=None): # <<<<<<<<<<<<<< * """Round to nearest integer towards zero. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_161fix, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__fix, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4071 * * * def flatnonzero(a): # <<<<<<<<<<<<<< * """Return indices that are non-zero in the flattened version of a. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_163flatnonzero, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__flatnonzero, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4110 * * * def fliplr(m): # <<<<<<<<<<<<<< * """Flip array in the left/right direction. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_165fliplr, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__fliplr, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4157 * * * def flipud(m): # <<<<<<<<<<<<<< * """Flip array in the up/down direction. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_167flipud, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__flipud, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4207 * * * def frombuffer(buffer, dtype=float, count=-1, offset=0): # <<<<<<<<<<<<<< * """frombuffer(buffer, dtype=float, count=-1, offset=0) * */ __Pyx_INCREF(((PyObject *)((PyObject*)(&PyFloat_Type)))); __pyx_k_12 = ((PyObject *)((PyObject*)(&PyFloat_Type))); __Pyx_GIVEREF(((PyObject*)(&PyFloat_Type))); __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_169frombuffer, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__frombuffer, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4247 * * * def fromfile(file, dtype=float, count=-1, sep=''): # <<<<<<<<<<<<<< * """fromfile(file, dtype=float, count=-1, sep='') * */ __Pyx_INCREF(((PyObject *)((PyObject*)(&PyFloat_Type)))); __pyx_k_13 = ((PyObject *)((PyObject*)(&PyFloat_Type))); __Pyx_GIVEREF(((PyObject*)(&PyFloat_Type))); __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_171fromfile, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__fromfile, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4324 * * * def fromiter(iterable, dtype, count=-1): # <<<<<<<<<<<<<< * """fromiter(iterable, dtype, count=-1) * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_173fromiter, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__fromiter, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4360 * * * def frompyfunc(func, nin, nout): # <<<<<<<<<<<<<< * """frompyfunc(func, nin, nout) * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_175frompyfunc, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__frompyfunc, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4402 * * * def fromregex(file, regexp, dtype): # <<<<<<<<<<<<<< * """Construct an array from a text file, using regular expression parsing. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_177fromregex, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__fromregex, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4459 * * * def fromstring(string, dtype=float, count=-1, sep=''): # <<<<<<<<<<<<<< * """fromstring(string, dtype=float, count=-1, sep='') * */ __Pyx_INCREF(((PyObject *)((PyObject*)(&PyFloat_Type)))); __pyx_k_14 = ((PyObject *)((PyObject*)(&PyFloat_Type))); __Pyx_GIVEREF(((PyObject*)(&PyFloat_Type))); __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_179fromstring, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__fromstring, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4513 * * * def fv(rate, nper, pmt, pv, when='end'): # <<<<<<<<<<<<<< * """Compute the future value. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_181fv, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4513; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__fv, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4513; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4596 * * * def genfromtxt(fname, dtype=float, comments='#', delimiter=None, skiprows=0, skip_header=0, skip_footer=0, converters=None, missing='', missing_values=None, filling_values=None, usecols=None, names=None, excludelist=None, deletechars=None, replace_space='_', autostrip=False, case_sensitive=True, defaultfmt='f%i', unpack=None, usemask=False, loose=True, invalid_raise=True): # <<<<<<<<<<<<<< * """Load data from a text file, with missing values handled as specified. * */ __Pyx_INCREF(((PyObject *)((PyObject*)(&PyFloat_Type)))); __pyx_k_15 = ((PyObject *)((PyObject*)(&PyFloat_Type))); __Pyx_GIVEREF(((PyObject*)(&PyFloat_Type))); __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_17 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_18 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_20 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_21 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_22 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_183genfromtxt, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__genfromtxt, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4734 * * * def get_array_wrap(): # <<<<<<<<<<<<<< * """Find the wrapper for the array with the highest priority. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_185get_array_wrap, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4734; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__get_array_wrap, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4734; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4743 * * * def get_include(): # <<<<<<<<<<<<<< * """Return the directory that contains the NumPy \*.h header files. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_187get_include, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4743; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__get_include, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4743; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4764 * * * def get_numarray_include(type=None): # <<<<<<<<<<<<<< * """Return the directory that contains the numarray \*.h header files. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_189get_numarray_include, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4764; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_245, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4764; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4800 * * * def get_printoptions(): # <<<<<<<<<<<<<< * """Return the current print options. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_191get_printoptions, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__get_printoptions, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4826 * * * def getbuffer(): # <<<<<<<<<<<<<< * """getbuffer(obj [,offset[, size]]) * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_193getbuffer, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__getbuffer, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4862 * * * def getbufsize(): # <<<<<<<<<<<<<< * """Return the size of the buffer used in ufuncs. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_195getbufsize, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4862; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__getbufsize, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4862; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4869 * * * def geterr(): # <<<<<<<<<<<<<< * """Get the current way of handling floating-point errors. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_197geterr, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4869; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__geterr, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4869; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4908 * * * def geterrcall(): # <<<<<<<<<<<<<< * """Return the current callback function used on floating-point errors. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_199geterrcall, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__geterrcall, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":4952 * * * def geterrobj(): # <<<<<<<<<<<<<< * """geterrobj() * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_201geterrobj, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4952; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__geterrobj, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4952; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":5018 * * * def gradient(f): # <<<<<<<<<<<<<< * """Return the gradient of an N-dimensional array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_203gradient, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__gradient, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5018; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":5058 * * * def hamming(M): # <<<<<<<<<<<<<< * """Return the Hamming window. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_205hamming, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5058; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__hamming, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5058; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":5152 * * * def hanning(M): # <<<<<<<<<<<<<< * """Return the Hanning window. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_207hanning, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__hanning, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":5248 * * * def histogram(a, bins=10, range=None, normed=False, weights=None, density=None): # <<<<<<<<<<<<<< * """Compute the histogram of a set of data. * */ __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_23 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_209histogram, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__histogram, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":5333 * * * def histogram2d(x, y, bins=10, range=None, normed=False, weights=None): # <<<<<<<<<<<<<< * """Compute the bi-dimensional histogram of two data samples. * */ __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_24 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_211histogram2d, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__histogram2d, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":5418 * * * def histogramdd(sample, bins=10, range=None, normed=False, weights=None): # <<<<<<<<<<<<<< * """Compute the multidimensional histogram of some data. * */ __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_25 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_213histogramdd, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__histogramdd, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":5471 * * * def hsplit(ary, indices_or_sections): # <<<<<<<<<<<<<< * """Split an array into multiple sub-arrays horizontally (column-wise). * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_215hsplit, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__hsplit, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":5528 * * * def hstack(tup): # <<<<<<<<<<<<<< * """Stack arrays in sequence horizontally (column wise). * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_217hstack, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__hstack, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":5572 * * * def i0(x): # <<<<<<<<<<<<<< * """Modified Bessel function of the first kind, order 0. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_219i0, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__i0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":5628 * * * def imag(val): # <<<<<<<<<<<<<< * """Return the imaginary part of the elements of the array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_221imag, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__imag, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":5659 * * * def in1d(ar1, ar2, assume_unique=False): # <<<<<<<<<<<<<< * """Test whether each element of a 1D array is also present in a second array. * */ __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_26 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_223in1d, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__in1d, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5659; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":5707 * * * def indices(dimensions, dtype=int): # <<<<<<<<<<<<<< * """Return an array representing the indices of a grid. * */ __Pyx_INCREF(((PyObject *)((PyObject*)(&PyInt_Type)))); __pyx_k_27 = ((PyObject *)((PyObject*)(&PyInt_Type))); __Pyx_GIVEREF(((PyObject*)(&PyInt_Type))); __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_225indices, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__indices, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":5769 * * * def info(object=None, maxwidth=76, output=sys.stdout, toplevel='numpy'): # <<<<<<<<<<<<<< * """Get help information for a function, class, or module. * */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__sys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5769; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__stdout); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5769; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_k_28 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_227info, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5769; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__info, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5769; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":5819 * * * def inner(a, b): # <<<<<<<<<<<<<< * """inner(a, b) * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_229inner, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__inner, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5819; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":5895 * * * def insert(arr, obj, values, axis=None): # <<<<<<<<<<<<<< * """Insert values along the given axis before the given indices. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_231insert, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5895; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__insert, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5895; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":5960 * * * def int_asbuffer(): # <<<<<<<<<<<<<< * """ * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_233int_asbuffer, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__int_asbuffer, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5960; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":5968 * * * def interp(x, xp, fp, left=None, right=None): # <<<<<<<<<<<<<< * """One-dimensional linear interpolation. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_235interp, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__interp, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6039 * * * def intersect1d(ar1, ar2, assume_unique=False): # <<<<<<<<<<<<<< * """Find the intersection of two arrays. * */ __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6039; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_29 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_237intersect1d, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6039; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__intersect1d, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6039; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6071 * * * def ipmt(rate, per, nper, pv, fv=0.0, when='end'): # <<<<<<<<<<<<<< * """Not implemented. Compute the payment portion for loan interest. * */ __pyx_t_1 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_30 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_239ipmt, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ipmt, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6071; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6113 * * * def irr(values): # <<<<<<<<<<<<<< * """Return the Internal Rate of Return (IRR). * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_241irr, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__irr, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6168 * * * def iscomplex(x): # <<<<<<<<<<<<<< * """Returns a bool array, where True if input element is complex. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_243iscomplex, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__iscomplex, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6199 * * * def iscomplexobj(x): # <<<<<<<<<<<<<< * """Return True if x is a complex type or an array of complex numbers. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_245iscomplexobj, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__iscomplexobj, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6233 * * * def isfortran(a): # <<<<<<<<<<<<<< * """Returns True if array is arranged in Fortran-order in memory * and dimension > 1. */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_247isfortran, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__isfortran, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6290 * * * def isneginf(x, y=None): # <<<<<<<<<<<<<< * """Test element-wise for negative infinity, return result as bool array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_249isneginf, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6290; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__isneginf, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6290; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6349 * * * def isposinf(x, y=None): # <<<<<<<<<<<<<< * """Test element-wise for positive infinity, return result as bool array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_251isposinf, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__isposinf, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6407 * * * def isreal(x): # <<<<<<<<<<<<<< * """Returns a bool array, where True if input element is real. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_253isreal, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__isreal, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6437 * * * def isrealobj(x): # <<<<<<<<<<<<<< * """Return True if x is a not complex type or an array of complex numbers. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_255isrealobj, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__isrealobj, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6471 * * * def isscalar(num): # <<<<<<<<<<<<<< * """Returns True if the type of `num` is a scalar type. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_257isscalar, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__isscalar, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6471; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6497 * * * def issctype(rep): # <<<<<<<<<<<<<< * """Determines whether the given object represents a scalar data-type. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_259issctype, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6497; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__issctype, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6497; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6533 * * * def issubclass_(arg1, arg2): # <<<<<<<<<<<<<< * """Determine if a class is a subclass of a second class. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_261issubclass_, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__issubclass_, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6533; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6568 * * * def issubdtype(arg1, arg2): # <<<<<<<<<<<<<< * """Returns True if first argument is a typecode lower/equal in type hierarchy. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_263issubdtype, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__issubdtype, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6596 * * * def issubsctype(arg1, arg2): # <<<<<<<<<<<<<< * """Determine if the first argument is a subclass of the second argument. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_265issubsctype, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__issubsctype, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6596; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6626 * * * def iterable(y): # <<<<<<<<<<<<<< * """Check whether or not an object can be iterated over. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_267iterable, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__iterable, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6652 * * * def ix_(): # <<<<<<<<<<<<<< * """Construct an open mesh from multiple sequences. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_269ix_, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ix_, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6652; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6698 * * * def kaiser(M, beta): # <<<<<<<<<<<<<< * """Return the Kaiser window. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_271kaiser, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6698; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__kaiser, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6698; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6825 * * * def kron(a, b): # <<<<<<<<<<<<<< * """Kronecker product of two arrays. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_273kron, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__kron, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6825; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6897 * * * def lexsort(keys, axis=-1): # <<<<<<<<<<<<<< * """lexsort(keys, axis=-1) * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_275lexsort, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6897; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__lexsort, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6897; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":6975 * * * def load(file, mmap_mode=None): # <<<<<<<<<<<<<< * """Load a pickled, ``.npy``, or ``.npz`` binary file. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_277load, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__load, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6975; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7037 * * * def loads(): # <<<<<<<<<<<<<< * """loads(string) -- Load a pickle from the given string * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_279loads, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7037; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__loads, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7037; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7045 * * * def loadtxt(fname, dtype=float, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0): # <<<<<<<<<<<<<< * """Load data from a text file. * */ __Pyx_INCREF(((PyObject *)((PyObject*)(&PyFloat_Type)))); __pyx_k_31 = ((PyObject *)((PyObject*)(&PyFloat_Type))); __Pyx_GIVEREF(((PyObject*)(&PyFloat_Type))); __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7045; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_32 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_281loadtxt, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7045; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__loadtxt, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7045; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7132 * * * def lookfor(what, module=None, import_modules=True, regenerate=False, output=None): # <<<<<<<<<<<<<< * """Do a keyword search on docstrings. * */ __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_33 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_34 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_283lookfor, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__lookfor, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7179 * * * def mafromtxt(fname): # <<<<<<<<<<<<<< * """Load ASCII data stored in a text file and return a masked array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_285mafromtxt, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__mafromtxt, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7192 * * * def mask_indices(n, mask_func, k=0): # <<<<<<<<<<<<<< * """Return the indices to access (n, n) arrays, given a masking function. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_287mask_indices, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7192; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__mask_indices, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7192; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7259 * * * def mat(data, dtype=None): # <<<<<<<<<<<<<< * """Interpret the input as a matrix. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_289mat, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__mat, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7291 * * * def max(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the maximum of an array or maximum along an axis. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_291max, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__max, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7348 * * * def maximum_sctype(t): # <<<<<<<<<<<<<< * """Return the scalar type of highest precision of the same kind as the input. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_293maximum_sctype, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7348; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__maximum_sctype, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7348; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7388 * * * def may_share_memory(a, b): # <<<<<<<<<<<<<< * """Determine if two arrays can share memory * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_295may_share_memory, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__may_share_memory, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7414 * * * def mean(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Compute the arithmetic mean along the specified axis. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_297mean, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__mean, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7487 * * * def median(a, axis=None, out=None, overwrite_input=False): # <<<<<<<<<<<<<< * """Compute the median along the specified axis. * */ __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_35 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_299median, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__median, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7563 * * * def meshgrid(x, y): # <<<<<<<<<<<<<< * """Return coordinate matrices from two coordinate vectors. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_301meshgrid, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7563; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__meshgrid, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7563; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7611 * * * def min(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Return the minimum of an array or minimum along an axis. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_303min, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7611; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__min, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7611; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7668 * * * def min_scalar_type(a): # <<<<<<<<<<<<<< * """min_scalar_type(a) * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_305min_scalar_type, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__min_scalar_type, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7718 * * * def mintypecode(typechars, typeset='GDFgdf', default='d'): # <<<<<<<<<<<<<< * """Return the character for the minimum-size type to which given types can * be safely cast. */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_307mintypecode, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__mintypecode, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7763 * * * def mirr(values, finance_rate, reinvest_rate): # <<<<<<<<<<<<<< * """Modified internal rate of return. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_309mirr, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7763; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__mirr, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7763; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7785 * * * def msort(a): # <<<<<<<<<<<<<< * """Return a copy of an array sorted along the first axis. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_311msort, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__msort, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7785; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7810 * * * def nan_to_num(x): # <<<<<<<<<<<<<< * """Replace nan with zero and inf with finite numbers. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_313nan_to_num, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7810; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__nan_to_num, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7810; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7857 * * * def nanargmax(a, axis=None): # <<<<<<<<<<<<<< * """Return indices of the maximum values over an axis, ignoring NaNs. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_315nanargmax, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7857; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__nanargmax, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7857; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7892 * * * def nanargmin(a, axis=None): # <<<<<<<<<<<<<< * """Return indices of the minimum values over an axis, ignoring NaNs. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_317nanargmin, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7892; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__nanargmin, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7892; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7927 * * * def nanmax(a, axis=None): # <<<<<<<<<<<<<< * """Return the maximum of an array or maximum along an axis ignoring any NaNs. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_319nanmax, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7927; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__nanmax, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7927; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":7984 * * * def nanmin(a, axis=None): # <<<<<<<<<<<<<< * """Return the minimum of an array or minimum along an axis ignoring any NaNs. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_321nanmin, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__nanmin, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7984; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8039 * * * def nansum(a, axis=None): # <<<<<<<<<<<<<< * """Return the sum of array elements over a given axis treating * Not a Numbers (NaNs) as zero. */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_323nansum, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8039; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__nansum, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8039; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8107 * * * def ndfromtxt(fname): # <<<<<<<<<<<<<< * """Load ASCII data stored in a file and return it as a single array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_325ndfromtxt, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ndfromtxt, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8121 * * * def ndim(a): # <<<<<<<<<<<<<< * """Return the number of dimensions of an array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_327ndim, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ndim, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8154 * * * def nested_iters(): # <<<<<<<<<<<<<< * """ * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_329nested_iters, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__nested_iters, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8162 * * * def newbuffer(size): # <<<<<<<<<<<<<< * """newbuffer(size) * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_331newbuffer, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__newbuffer, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8172 * * * def nonzero(a): # <<<<<<<<<<<<<< * """Return the indices of the elements that are non-zero. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_333nonzero, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__nonzero, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8247 * * * def nper(rate, pmt, pv, fv=0, when='end'): # <<<<<<<<<<<<<< * """Compute the number of periodic payments. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_335nper, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__nper, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8298 * * * def npv(rate, values): # <<<<<<<<<<<<<< * """Returns the NPV (Net Present Value) of a cash flow series. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_337npv, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__npv, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8342 * * * def obj2sctype(rep, default=None): # <<<<<<<<<<<<<< * """Return the scalar dtype or NumPy equivalent of Python type of an object. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_339obj2sctype, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__obj2sctype, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8383 * * * def outer(a, b): # <<<<<<<<<<<<<< * """Compute the outer product of two vectors. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_341outer, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__outer, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8454 * * * def packbits(myarray, axis=None): # <<<<<<<<<<<<<< * """packbits(myarray, axis=None) * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_343packbits, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8454; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__packbits, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8454; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8500 * * * def percentile(a, q, axis=None, out=None, overwrite_input=False): # <<<<<<<<<<<<<< * """Compute the qth percentile of the data along the specified axis. * */ __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_36 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_345percentile, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__percentile, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8580 * * * def piecewise(x, condlist, funclist): # <<<<<<<<<<<<<< * """Evaluate a piecewise-defined function. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_347piecewise, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8580; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__piecewise, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8580; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8663 * * * def pkgload(): # <<<<<<<<<<<<<< * """Load one or more packages into parent package top-level namespace. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_349pkgload, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8663; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pkgload, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8663; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8702 * * * def place(arr, mask, vals): # <<<<<<<<<<<<<< * """Change elements of an array based on conditional and input values. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_351place, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8702; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__place, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8702; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8738 * * * def pmt(rate, nper, pv, fv=0, when='end'): # <<<<<<<<<<<<<< * """Compute the payment against loan principal plus interest. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_353pmt, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8738; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pmt, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8738; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8823 * * * def poly(seq_of_zeros): # <<<<<<<<<<<<<< * """Find the coefficients of a polynomial with the given sequence of roots. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_355poly, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__poly, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8917 * * * def polyadd(a1, a2): # <<<<<<<<<<<<<< * """Find the sum of two polynomials. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_357polyadd, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8917; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__polyadd, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8917; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":8963 * * * def polyder(p, m=1): # <<<<<<<<<<<<<< * """Return the derivative of the specified order of a polynomial. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_359polyder, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__polyder, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9017 * * * def polydiv(u, v): # <<<<<<<<<<<<<< * """Returns the quotient and remainder of polynomial division. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_361polydiv, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9017; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__polydiv, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9017; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9064 * * * def polyfit(x, y, deg, rcond=None, full=False): # <<<<<<<<<<<<<< * """Least squares polynomial fit. * */ __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_37 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_363polyfit, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__polyfit, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9200 * * * def polyint(p, m=1, k=None): # <<<<<<<<<<<<<< * """Return an antiderivative (indefinite integral) of a polynomial. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_365polyint, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__polyint, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9269 * * * def polymul(a1, a2): # <<<<<<<<<<<<<< * """Find the product of two polynomials. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_367polymul, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__polymul, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9318 * * * def polysub(a1, a2): # <<<<<<<<<<<<<< * """Difference (subtraction) of two polynomials. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_369polysub, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__polysub, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9350 * * * def polyval(p, x): # <<<<<<<<<<<<<< * """Evaluate a polynomial at specific values. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_371polyval, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__polyval, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9411 * * * def ppmt(rate, per, nper, pv, fv=0.0, when='end'): # <<<<<<<<<<<<<< * """Not implemented. Compute the payment against loan principal. * */ __pyx_t_1 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_38 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_373ppmt, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ppmt, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9438 * * * def prod(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the product of array elements over a given axis. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_375prod, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9438; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__prod, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9438; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9514 * * * def product(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the product of array elements over a given axis. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_377product, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__product, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9514; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9525 * * * def promote_types(type1, type2): # <<<<<<<<<<<<<< * """promote_types(type1, type2) * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_379promote_types, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9525; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__promote_types, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9525; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9575 * * * def ptp(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Range of values (maximum - minimum) along an axis. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_381ptp, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9575; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ptp, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9575; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9615 * * * def put(a, ind, v, mode='raise'): # <<<<<<<<<<<<<< * """Replaces specified elements of an array with given values. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_383put, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__put, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9665 * * * def putmask(a, mask, values): # <<<<<<<<<<<<<< * """putmask(a, mask, values) * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_385putmask, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9665; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__putmask, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9665; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9709 * * * def pv(rate, nper, pmt, fv=0.0, when='end'): # <<<<<<<<<<<<<< * """Compute the present value. * */ __pyx_t_1 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9709; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_39 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_387pv, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9709; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__pv, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9709; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9797 * * * def rank(a): # <<<<<<<<<<<<<< * """Return the number of dimensions of an array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_389rank, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9797; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__rank, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9797; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9839 * * * def rate(nper, pmt, pv, fv, when='end', guess=0.1, tol=1e-06, maxiter=100): # <<<<<<<<<<<<<< * """Compute the rate of interest per period. * */ __pyx_t_1 = PyFloat_FromDouble(0.1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_40 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyFloat_FromDouble(1e-06); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_41 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_391rate, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__rate, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9884 * * * def ravel(a, order='C'): # <<<<<<<<<<<<<< * """Return a flattened array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_393ravel, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9884; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ravel, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9884; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":9968 * * * def ravel_multi_index(multi_index, dims, mode='raise', order='C'): # <<<<<<<<<<<<<< * """ravel_multi_index(multi_index, dims, mode='raise', order='C') * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_395ravel_multi_index, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ravel_multi_index, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9968; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10028 * * * def real(val): # <<<<<<<<<<<<<< * """Return the real part of the elements of the array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_397real, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10028; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__real, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10028; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10062 * * * def real_if_close(a, tol=100): # <<<<<<<<<<<<<< * """If complex input returns a real array if complex parts are close to zero. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_399real_if_close, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10062; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__real_if_close, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10062; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10107 * * * def recfromcsv(fname): # <<<<<<<<<<<<<< * """Load ASCII data stored in a comma-separated file. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_401recfromcsv, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__recfromcsv, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10124 * * * def recfromtxt(fname): # <<<<<<<<<<<<<< * """Load ASCII data from a file and return it in a record array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_403recfromtxt, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__recfromtxt, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10146 * * * def repeat(a, repeats, axis=None): # <<<<<<<<<<<<<< * """Repeat elements of an array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_405repeat, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__repeat, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10187 * * * def require(a, dtype=None, requirements=None): # <<<<<<<<<<<<<< * """Return an ndarray of the provided type that satisfies requirements. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_407require, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__require, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10246 * * * def reshape(a, newshape, order='C'): # <<<<<<<<<<<<<< * """Gives a new shape to an array without changing its data. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_409reshape, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__reshape, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10308 * * * def resize(a, new_shape): # <<<<<<<<<<<<<< * """Return a new array with the specified shape. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_411resize, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__resize, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10348 * * * def restoredot(): # <<<<<<<<<<<<<< * """Restore `dot`, `vdot`, and `innerproduct` to the default non-BLAS * implementations. */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_413restoredot, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10348; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__restoredot, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10348; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10366 * * * def result_type(*arrays_and_dtypes): # <<<<<<<<<<<<<< * """result_type(*arrays_and_dtypes) * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_415result_type, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__result_type, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10437 * * * def roll(a, shift, axis=None): # <<<<<<<<<<<<<< * """Roll array elements along a given axis. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_417roll, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__roll, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10488 * * * def rollaxis(a, axis, start=0): # <<<<<<<<<<<<<< * """Roll the specified axis backwards, until it lies in a given position. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_419rollaxis, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__rollaxis, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10526 * * * def roots(p): # <<<<<<<<<<<<<< * """Return the roots of a polynomial with coefficients given in p. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_421roots, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10526; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__roots, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10526; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10577 * * * def rot90(m, k=1): # <<<<<<<<<<<<<< * """Rotate an array by 90 degrees in the counter-clockwise direction. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_423rot90, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__rot90, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10617 * * * def round(a, decimals=0, out=None): # <<<<<<<<<<<<<< * """Round an array to the given number of decimals. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_425round, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__round, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10630 * * * def round_(a, decimals=0, out=None): # <<<<<<<<<<<<<< * """Round an array to the given number of decimals. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_427round_, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__round_, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10643 * * * def row_stack(tup): # <<<<<<<<<<<<<< * """Stack arrays in sequence vertically (row wise). * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_429row_stack, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10643; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__row_stack, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10643; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10694 * * * def safe_eval(source): # <<<<<<<<<<<<<< * """Protected string evaluation. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_431safe_eval, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10694; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__safe_eval, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10694; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10739 * * * def save(file, arr): # <<<<<<<<<<<<<< * """Save an array to a binary file in NumPy ``.npy`` format. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_433save, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10739; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__save, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10739; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10777 * * * def savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n'): # <<<<<<<<<<<<<< * """Save an array to a text file. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_435savetxt, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__savetxt, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10868 * * * def savez(file): # <<<<<<<<<<<<<< * """Save several arrays into a single file in uncompressed ``.npz`` format. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_437savez, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10868; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__savez, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10868; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10948 * * * def savez_compressed(file): # <<<<<<<<<<<<<< * """Save several arrays into a single file in compressed ``.npz`` format. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_439savez_compressed, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10948; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__savez_compressed, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10948; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":10972 * * * def sctype2char(sctype): # <<<<<<<<<<<<<< * """Return the string representation of a scalar dtype. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_441sctype2char, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__sctype2char, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11016 * * * def searchsorted(a, v, side='left'): # <<<<<<<<<<<<<< * """Find indices where elements should be inserted to maintain order. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_443searchsorted, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11016; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__searchsorted, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11016; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11064 * * * def select(condlist, choicelist, default=0): # <<<<<<<<<<<<<< * """Return an array drawn from elements in choicelist, depending on conditions. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_445select, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__select, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11064; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11103 * * * def set_numeric_ops(): # <<<<<<<<<<<<<< * """set_numeric_ops(op1=func1, op2=func2, ...) * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_447set_numeric_ops, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__set_numeric_ops, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11149 * * * def set_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, suppress=None, nanstr=None, infstr=None): # <<<<<<<<<<<<<< * """Set printing options. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_449set_printoptions, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__set_printoptions, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11214 * * * def set_string_function(f, repr=True): # <<<<<<<<<<<<<< * """Set a Python function to be used when pretty printing arrays. * */ __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_44 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_451set_string_function, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__set_string_function, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11267 * * * def setbufsize(size): # <<<<<<<<<<<<<< * """Set the size of the buffer used in ufuncs. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_453setbufsize, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__setbufsize, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11279 * * * def setdiff1d(ar1, ar2, assume_unique=False): # <<<<<<<<<<<<<< * """Find the set difference of two arrays. * */ __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_45 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_455setdiff1d, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__setdiff1d, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11315 * * * def seterr(all=None, divide=None, over=None, under=None, invalid=None): # <<<<<<<<<<<<<< * """Set how floating-point errors are handled. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_457seterr, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__seterr, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11394 * * * def seterrcall(func): # <<<<<<<<<<<<<< * """Set the floating-point error callback function or log object. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_459seterrcall, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__seterrcall, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11477 * * * def seterrobj(errobj): # <<<<<<<<<<<<<< * """seterrobj(errobj) * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_461seterrobj, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11477; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__seterrobj, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11477; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11538 * * * def setxor1d(ar1, ar2, assume_unique=False): # <<<<<<<<<<<<<< * """Find the set exclusive-or of two arrays. * */ __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_46 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_463setxor1d, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__setxor1d, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11569 * * * def show_config(): # <<<<<<<<<<<<<< * """ * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_465show_config, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__show_config, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11576 * * * def sinc(x): # <<<<<<<<<<<<<< * """Return the sinc function. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_467sinc, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11576; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__sinc, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11576; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11653 * * * def size(a, axis=None): # <<<<<<<<<<<<<< * """Return the number of elements along a given axis. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_469size, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__size, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11689 * * * def sometrue(a, axis=None, out=None): # <<<<<<<<<<<<<< * """Check whether some values are true. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_471sometrue, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11689; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__sometrue, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11689; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11702 * * * def sort(a, axis=-1, kind='quicksort', order=None): # <<<<<<<<<<<<<< * """Return a sorted copy of an array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_473sort, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11702; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__sort, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11702; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11803 * * * def sort_complex(a): # <<<<<<<<<<<<<< * """Sort a complex array using the real part first, then the imaginary part. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_475sort_complex, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__sort_complex, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/notimplemented.pyx":11828 * * * def source(object, output=sys.stdout): # <<<<<<<<<<<<<< * """Print or write to a file the source code for a Numpy object. * */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__sys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__stdout); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_k_47 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_477source, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__source, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":11868 * * * def split(ary, indices_or_sections, axis=0): # <<<<<<<<<<<<<< * """Split an array into multiple sub-arrays of equal size. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_479split, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11868; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__split, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11868; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":11935 * * * def squeeze(a): # <<<<<<<<<<<<<< * """Remove single-dimensional entries from the shape of an array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_481squeeze, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11935; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__squeeze, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11935; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":11961 * * * def std(a, axis=None, dtype=None, out=None, ddof=0): # <<<<<<<<<<<<<< * """Compute the standard deviation along the specified axis. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_483std, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11961; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__std, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11961; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12049 * * * def sum(a, axis=None, dtype=None, out=None): # <<<<<<<<<<<<<< * """Sum of array elements over a given axis. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_485sum, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12049; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__sum, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12049; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12117 * * * def swapaxes(a, axis1, axis2): # <<<<<<<<<<<<<< * """Interchange two axes of an array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_487swapaxes, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__swapaxes, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12160 * * * def take(a, indices, axis=None, out=None, mode='raise'): # <<<<<<<<<<<<<< * """Take elements from an array along an axis. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_489take, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__take, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12216 * * * def tensordot(a, b, axes=2): # <<<<<<<<<<<<<< * """Compute tensor dot product along specified axes for arrays >= 1-D. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_491tensordot, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__tensordot, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12332 * * * def tile(A, reps): # <<<<<<<<<<<<<< * """Construct an array by repeating A the number of times given by reps. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_493tile, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__tile, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12390 * * * def trace(a, offset=0, axis1=0, axis2=1, dtype=None, out=None): # <<<<<<<<<<<<<< * """Return the sum along diagonals of the array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_495trace, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12390; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__trace, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12390; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12448 * * * def transpose(a, axes=None): # <<<<<<<<<<<<<< * """Permute the dimensions of an array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_497transpose, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__transpose, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12488 * * * def trapz(y, x=None, dx=1.0, axis=-1): # <<<<<<<<<<<<<< * """Integrate along the given axis using the composite trapezoidal rule. * */ __pyx_t_2 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_48 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_499trapz, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__trapz, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12488; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12549 * * * def tri(N, M=None, k=0, dtype=float): # <<<<<<<<<<<<<< * """An array with ones at and below the given diagonal and zeros elsewhere. * */ __Pyx_INCREF(((PyObject *)((PyObject*)(&PyFloat_Type)))); __pyx_k_49 = ((PyObject *)((PyObject*)(&PyFloat_Type))); __Pyx_GIVEREF(((PyObject*)(&PyFloat_Type))); __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_501tri, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__tri, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12588 * * * def tril(m, k=0): # <<<<<<<<<<<<<< * """Lower triangle of an array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_503tril, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12588; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__tril, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12588; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12622 * * * def tril_indices(n, k=0): # <<<<<<<<<<<<<< * """Return the indices for the lower-triangle of an (n, n) array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_505tril_indices, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12622; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__tril_indices, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12622; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12694 * * * def tril_indices_from(arr, k=0): # <<<<<<<<<<<<<< * """Return the indices for the lower-triangle of arr. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_507tril_indices_from, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12694; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__tril_indices_from, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12694; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12719 * * * def trim_zeros(filt, trim='fb'): # <<<<<<<<<<<<<< * """Trim the leading and/or trailing zeros from a 1-D array or sequence. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_509trim_zeros, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12719; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__trim_zeros, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12719; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12754 * * * def triu(m, k=0): # <<<<<<<<<<<<<< * """Upper triangle of an array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_511triu, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12754; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__triu, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12754; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12778 * * * def triu_indices(n, k=0): # <<<<<<<<<<<<<< * """Return the indices for the upper-triangle of an (n, n) array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_513triu_indices, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__triu_indices, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12851 * * * def triu_indices_from(arr, k=0): # <<<<<<<<<<<<<< * """Return the indices for the upper-triangle of an (n, n) array. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_515triu_indices_from, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__triu_indices_from, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12876 * * * def typename(char_): # <<<<<<<<<<<<<< * """Return a description for the given data type code. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_517typename, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__typename, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12927 * * * def union1d(ar1, ar2): # <<<<<<<<<<<<<< * """Find the union of two arrays. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_519union1d, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12927; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__union1d, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12927; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":12957 * * * def unique(ar, return_index=False, return_inverse=False): # <<<<<<<<<<<<<< * """Find the unique elements of an array. * */ __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_50 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_51 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_521unique, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__unique, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12957; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":13028 * * * def unpackbits(myarray, axis=None): # <<<<<<<<<<<<<< * """unpackbits(myarray, axis=None) * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_523unpackbits, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13028; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__unpackbits, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13028; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":13073 * * * def unravel_index(indices, dims, order='C'): # <<<<<<<<<<<<<< * """unravel_index(indices, dims, order='C') * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_525unravel_index, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13073; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__unravel_index, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13073; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":13118 * * * def unwrap(p, discont=3.14159265359, axis=-1): # <<<<<<<<<<<<<< * """Unwrap by changing deltas between values to 2*pi complement. * */ __pyx_t_2 = PyFloat_FromDouble(3.14159265359); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_52 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_527unwrap, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__unwrap, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":13161 * * * def vander(x, N=None): # <<<<<<<<<<<<<< * """Generate a Van der Monde matrix. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_529vander, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__vander, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":13219 * * * def var(a, axis=None, dtype=None, out=None, ddof=0): # <<<<<<<<<<<<<< * """Compute the variance along the specified axis. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_531var, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__var, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":13309 * * * def vdot(): # <<<<<<<<<<<<<< * """Return the dot product of two vectors. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_533vdot, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13309; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__vdot, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13309; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":13364 * * * def vsplit(ary, indices_or_sections): # <<<<<<<<<<<<<< * """Split an array into multiple sub-arrays vertically (row-wise). * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_535vsplit, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__vsplit, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":13413 * * * def vstack(tup): # <<<<<<<<<<<<<< * """Stack arrays in sequence vertically (row wise). * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_537vstack, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__vstack, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":13464 * * * def where(): # <<<<<<<<<<<<<< * """where(condition, [x, y]) * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_539where, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13464; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__where, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13464; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":13526 * * * def who(vardict=None): # <<<<<<<<<<<<<< * """Print the Numpy arrays in the given dictionary. * */ __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_14notimplemented_541who, NULL, __pyx_n_s_68); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13526; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__who, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13526; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/notimplemented.pyx":2 * * import sys # <<<<<<<<<<<<<< * * import numpy as np */ __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_582), ((PyObject *)__pyx_kp_u_583)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_584), ((PyObject *)__pyx_kp_u_585)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_586), ((PyObject *)__pyx_kp_u_587)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_588), ((PyObject *)__pyx_kp_u_589)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_590), ((PyObject *)__pyx_kp_u_591)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_592), ((PyObject *)__pyx_kp_u_593)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_594), ((PyObject *)__pyx_kp_u_595)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_596), ((PyObject *)__pyx_kp_u_597)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_598), ((PyObject *)__pyx_kp_u_599)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_600), ((PyObject *)__pyx_kp_u_601)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_602), ((PyObject *)__pyx_kp_u_603)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_604), ((PyObject *)__pyx_kp_u_605)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_606), ((PyObject *)__pyx_kp_u_607)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_608), ((PyObject *)__pyx_kp_u_609)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_610), ((PyObject *)__pyx_kp_u_611)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_612), ((PyObject *)__pyx_kp_u_613)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_614), ((PyObject *)__pyx_kp_u_615)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_616), ((PyObject *)__pyx_kp_u_617)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_618), ((PyObject *)__pyx_kp_u_619)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_620), ((PyObject *)__pyx_kp_u_621)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_622), ((PyObject *)__pyx_kp_u_623)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_624), ((PyObject *)__pyx_kp_u_625)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_626), ((PyObject *)__pyx_kp_u_627)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_628), ((PyObject *)__pyx_kp_u_629)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_630), ((PyObject *)__pyx_kp_u_631)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_632), ((PyObject *)__pyx_kp_u_633)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_634), ((PyObject *)__pyx_kp_u_635)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_636), ((PyObject *)__pyx_kp_u_637)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_638), ((PyObject *)__pyx_kp_u_639)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_640), ((PyObject *)__pyx_kp_u_641)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_642), ((PyObject *)__pyx_kp_u_643)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_644), ((PyObject *)__pyx_kp_u_645)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_646), ((PyObject *)__pyx_kp_u_647)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_648), ((PyObject *)__pyx_kp_u_649)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_650), ((PyObject *)__pyx_kp_u_651)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_652), ((PyObject *)__pyx_kp_u_653)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_654), ((PyObject *)__pyx_kp_u_655)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_656), ((PyObject *)__pyx_kp_u_657)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_658), ((PyObject *)__pyx_kp_u_659)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_660), ((PyObject *)__pyx_kp_u_661)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_662), ((PyObject *)__pyx_kp_u_663)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_664), ((PyObject *)__pyx_kp_u_665)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_666), ((PyObject *)__pyx_kp_u_667)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_668), ((PyObject *)__pyx_kp_u_669)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_670), ((PyObject *)__pyx_kp_u_671)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_672), ((PyObject *)__pyx_kp_u_673)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_674), ((PyObject *)__pyx_kp_u_675)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_676), ((PyObject *)__pyx_kp_u_677)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_678), ((PyObject *)__pyx_kp_u_679)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_680), ((PyObject *)__pyx_kp_u_681)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_682), ((PyObject *)__pyx_kp_u_683)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_684), ((PyObject *)__pyx_kp_u_685)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_686), ((PyObject *)__pyx_kp_u_687)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_688), ((PyObject *)__pyx_kp_u_689)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_690), ((PyObject *)__pyx_kp_u_691)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_692), ((PyObject *)__pyx_kp_u_693)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_694), ((PyObject *)__pyx_kp_u_695)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_696), ((PyObject *)__pyx_kp_u_697)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_698), ((PyObject *)__pyx_kp_u_699)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_700), ((PyObject *)__pyx_kp_u_701)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_702), ((PyObject *)__pyx_kp_u_703)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_704), ((PyObject *)__pyx_kp_u_705)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_706), ((PyObject *)__pyx_kp_u_707)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_708), ((PyObject *)__pyx_kp_u_709)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_710), ((PyObject *)__pyx_kp_u_711)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_712), ((PyObject *)__pyx_kp_u_713)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_714), ((PyObject *)__pyx_kp_u_715)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_716), ((PyObject *)__pyx_kp_u_717)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_718), ((PyObject *)__pyx_kp_u_719)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_720), ((PyObject *)__pyx_kp_u_721)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_722), ((PyObject *)__pyx_kp_u_723)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_724), ((PyObject *)__pyx_kp_u_725)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_726), ((PyObject *)__pyx_kp_u_727)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_728), ((PyObject *)__pyx_kp_u_729)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_730), ((PyObject *)__pyx_kp_u_731)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_732), ((PyObject *)__pyx_kp_u_733)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_734), ((PyObject *)__pyx_kp_u_735)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_736), ((PyObject *)__pyx_kp_u_737)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_738), ((PyObject *)__pyx_kp_u_739)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_740), ((PyObject *)__pyx_kp_u_741)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_742), ((PyObject *)__pyx_kp_u_743)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_744), ((PyObject *)__pyx_kp_u_745)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_746), ((PyObject *)__pyx_kp_u_747)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_748), ((PyObject *)__pyx_kp_u_749)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_750), ((PyObject *)__pyx_kp_u_751)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_752), ((PyObject *)__pyx_kp_u_753)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_754), ((PyObject *)__pyx_kp_u_755)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_756), ((PyObject *)__pyx_kp_u_757)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_758), ((PyObject *)__pyx_kp_u_759)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_760), ((PyObject *)__pyx_kp_u_761)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_762), ((PyObject *)__pyx_kp_u_763)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_764), ((PyObject *)__pyx_kp_u_765)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_766), ((PyObject *)__pyx_kp_u_767)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_768), ((PyObject *)__pyx_kp_u_769)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_770), ((PyObject *)__pyx_kp_u_771)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_772), ((PyObject *)__pyx_kp_u_773)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_774), ((PyObject *)__pyx_kp_u_775)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_776), ((PyObject *)__pyx_kp_u_777)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_778), ((PyObject *)__pyx_kp_u_779)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_780), ((PyObject *)__pyx_kp_u_781)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_782), ((PyObject *)__pyx_kp_u_783)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_784), ((PyObject *)__pyx_kp_u_785)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_786), ((PyObject *)__pyx_kp_u_787)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_788), ((PyObject *)__pyx_kp_u_789)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_790), ((PyObject *)__pyx_kp_u_791)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_792), ((PyObject *)__pyx_kp_u_793)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_794), ((PyObject *)__pyx_kp_u_795)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_796), ((PyObject *)__pyx_kp_u_797)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_798), ((PyObject *)__pyx_kp_u_799)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_800), ((PyObject *)__pyx_kp_u_801)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_802), ((PyObject *)__pyx_kp_u_803)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_804), ((PyObject *)__pyx_kp_u_805)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_806), ((PyObject *)__pyx_kp_u_807)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_808), ((PyObject *)__pyx_kp_u_809)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_810), ((PyObject *)__pyx_kp_u_811)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_812), ((PyObject *)__pyx_kp_u_813)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_814), ((PyObject *)__pyx_kp_u_815)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_816), ((PyObject *)__pyx_kp_u_817)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_818), ((PyObject *)__pyx_kp_u_819)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_820), ((PyObject *)__pyx_kp_u_821)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_822), ((PyObject *)__pyx_kp_u_823)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_824), ((PyObject *)__pyx_kp_u_825)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_826), ((PyObject *)__pyx_kp_u_827)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_828), ((PyObject *)__pyx_kp_u_633)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_829), ((PyObject *)__pyx_kp_u_587)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_830), ((PyObject *)__pyx_kp_u_831)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_832), ((PyObject *)__pyx_kp_u_833)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_834), ((PyObject *)__pyx_kp_u_835)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_836), ((PyObject *)__pyx_kp_u_837)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_838), ((PyObject *)__pyx_kp_u_839)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_840), ((PyObject *)__pyx_kp_u_589)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_841), ((PyObject *)__pyx_kp_u_842)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_843), ((PyObject *)__pyx_kp_u_844)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_845), ((PyObject *)__pyx_kp_u_846)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_847), ((PyObject *)__pyx_kp_u_848)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_849), ((PyObject *)__pyx_kp_u_850)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_851), ((PyObject *)__pyx_kp_u_852)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_853), ((PyObject *)__pyx_kp_u_854)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_855), ((PyObject *)__pyx_kp_u_856)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_857), ((PyObject *)__pyx_kp_u_858)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_859), ((PyObject *)__pyx_kp_u_860)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_861), ((PyObject *)__pyx_kp_u_862)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_863), ((PyObject *)__pyx_kp_u_864)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_865), ((PyObject *)__pyx_kp_u_866)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_867), ((PyObject *)__pyx_kp_u_868)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_869), ((PyObject *)__pyx_kp_u_870)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_871), ((PyObject *)__pyx_kp_u_872)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_873), ((PyObject *)__pyx_kp_u_874)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_875), ((PyObject *)__pyx_kp_u_876)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_877), ((PyObject *)__pyx_kp_u_878)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_879), ((PyObject *)__pyx_kp_u_880)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_881), ((PyObject *)__pyx_kp_u_882)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_883), ((PyObject *)__pyx_kp_u_884)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_885), ((PyObject *)__pyx_kp_u_886)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_887), ((PyObject *)__pyx_kp_u_888)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_889), ((PyObject *)__pyx_kp_u_890)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_891), ((PyObject *)__pyx_kp_u_892)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_893), ((PyObject *)__pyx_kp_u_894)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_895), ((PyObject *)__pyx_kp_u_896)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_897), ((PyObject *)__pyx_kp_u_898)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_899), ((PyObject *)__pyx_kp_u_900)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_901), ((PyObject *)__pyx_kp_u_902)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_903), ((PyObject *)__pyx_kp_u_904)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_905), ((PyObject *)__pyx_kp_u_906)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_907), ((PyObject *)__pyx_kp_u_908)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_909), ((PyObject *)__pyx_kp_u_910)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_911), ((PyObject *)__pyx_kp_u_912)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_913), ((PyObject *)__pyx_kp_u_914)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_915), ((PyObject *)__pyx_kp_u_916)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_917), ((PyObject *)__pyx_kp_u_918)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_919), ((PyObject *)__pyx_kp_u_920)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_921), ((PyObject *)__pyx_kp_u_922)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_923), ((PyObject *)__pyx_kp_u_924)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_925), ((PyObject *)__pyx_kp_u_926)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_927), ((PyObject *)__pyx_kp_u_928)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_929), ((PyObject *)__pyx_kp_u_930)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_931), ((PyObject *)__pyx_kp_u_932)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_933), ((PyObject *)__pyx_kp_u_934)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_935), ((PyObject *)__pyx_kp_u_936)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_937), ((PyObject *)__pyx_kp_u_938)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_939), ((PyObject *)__pyx_kp_u_940)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_941), ((PyObject *)__pyx_kp_u_942)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_943), ((PyObject *)__pyx_kp_u_944)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_945), ((PyObject *)__pyx_kp_u_946)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_947), ((PyObject *)__pyx_kp_u_948)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_949), ((PyObject *)__pyx_kp_u_950)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_951), ((PyObject *)__pyx_kp_u_952)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_953), ((PyObject *)__pyx_kp_u_954)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_955), ((PyObject *)__pyx_kp_u_956)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_957), ((PyObject *)__pyx_kp_u_958)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_959), ((PyObject *)__pyx_kp_u_960)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_961), ((PyObject *)__pyx_kp_u_962)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_963), ((PyObject *)__pyx_kp_u_964)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_965), ((PyObject *)__pyx_kp_u_966)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_967), ((PyObject *)__pyx_kp_u_968)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_969), ((PyObject *)__pyx_kp_u_970)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_971), ((PyObject *)__pyx_kp_u_972)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_973), ((PyObject *)__pyx_kp_u_974)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_975), ((PyObject *)__pyx_kp_u_976)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_977), ((PyObject *)__pyx_kp_u_978)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_979), ((PyObject *)__pyx_kp_u_980)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_981), ((PyObject *)__pyx_kp_u_982)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_983), ((PyObject *)__pyx_kp_u_984)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_985), ((PyObject *)__pyx_kp_u_986)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_987), ((PyObject *)__pyx_kp_u_988)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_989), ((PyObject *)__pyx_kp_u_990)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_991), ((PyObject *)__pyx_kp_u_992)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_993), ((PyObject *)__pyx_kp_u_994)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_995), ((PyObject *)__pyx_kp_u_996)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_997), ((PyObject *)__pyx_kp_u_998)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_999), ((PyObject *)__pyx_kp_u_1000)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1001), ((PyObject *)__pyx_kp_u_1002)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1003), ((PyObject *)__pyx_kp_u_1004)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1005), ((PyObject *)__pyx_kp_u_1006)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1007), ((PyObject *)__pyx_kp_u_1008)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1009), ((PyObject *)__pyx_kp_u_1010)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1011), ((PyObject *)__pyx_kp_u_1012)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1013), ((PyObject *)__pyx_kp_u_1014)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1015), ((PyObject *)__pyx_kp_u_1016)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1017), ((PyObject *)__pyx_kp_u_1018)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1019), ((PyObject *)__pyx_kp_u_1020)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1021), ((PyObject *)__pyx_kp_u_1022)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1023), ((PyObject *)__pyx_kp_u_1024)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1025), ((PyObject *)__pyx_kp_u_1026)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1027), ((PyObject *)__pyx_kp_u_1028)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1029), ((PyObject *)__pyx_kp_u_1030)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1031), ((PyObject *)__pyx_kp_u_1032)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1033), ((PyObject *)__pyx_kp_u_938)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1034), ((PyObject *)__pyx_kp_u_1035)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_kp_u_1036), ((PyObject *)__pyx_kp_u_1037)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_d, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; /* "numpy.pxd":975 * arr.base = baseptr * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< * if arr.base is NULL: * return None */ goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); if (__pyx_m) { __Pyx_AddTraceback("init ga4py.gain.notimplemented", __pyx_clineno, __pyx_lineno, __pyx_filename); Py_DECREF(__pyx_m); __pyx_m = 0; } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_ImportError, "init ga4py.gain.notimplemented"); } __pyx_L0:; __Pyx_RefNannyFinishContext(); #if PY_MAJOR_VERSION < 3 return; #else return __pyx_m; #endif } /* Runtime support code */ #if CYTHON_REFNANNY static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { PyObject *m = NULL, *p = NULL; void *r = NULL; m = PyImport_ImportModule((char *)modname); if (!m) goto end; p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); if (!p) goto end; r = PyLong_AsVoidPtr(p); end: Py_XDECREF(p); Py_XDECREF(m); return (__Pyx_RefNannyAPIStruct *)r; } #endif /* CYTHON_REFNANNY */ static PyObject *__Pyx_GetBuiltinName(PyObject *name) { PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); if (unlikely(!result)) { PyErr_Format(PyExc_NameError, #if PY_MAJOR_VERSION >= 3 "name '%U' is not defined", name); #else "name '%s' is not defined", PyString_AS_STRING(name)); #endif } return result; } static void __Pyx_RaiseArgtupleInvalid( const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found) { Py_ssize_t num_expected; const char *more_or_less; if (num_found < num_min) { num_expected = num_min; more_or_less = "at least"; } else { num_expected = num_max; more_or_less = "at most"; } if (exact) { more_or_less = "exactly"; } PyErr_Format(PyExc_TypeError, "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)", func_name, more_or_less, num_expected, (num_expected == 1) ? "" : "s", num_found); } static void __Pyx_RaiseDoubleKeywordsError( const char* func_name, PyObject* kw_name) { PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION >= 3 "%s() got multiple values for keyword argument '%U'", func_name, kw_name); #else "%s() got multiple values for keyword argument '%s'", func_name, PyString_AsString(kw_name)); #endif } static int __Pyx_ParseOptionalKeywords( PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name) { PyObject *key = 0, *value = 0; Py_ssize_t pos = 0; PyObject*** name; PyObject*** first_kw_arg = argnames + num_pos_args; while (PyDict_Next(kwds, &pos, &key, &value)) { name = first_kw_arg; while (*name && (**name != key)) name++; if (*name) { values[name-argnames] = value; continue; } name = first_kw_arg; #if PY_MAJOR_VERSION < 3 if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { while (*name) { if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) && _PyString_Eq(**name, key)) { values[name-argnames] = value; break; } name++; } if (*name) continue; else { PyObject*** argname = argnames; while (argname != first_kw_arg) { if ((**argname == key) || ( (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) && _PyString_Eq(**argname, key))) { goto arg_passed_twice; } argname++; } } } else #endif if (likely(PyUnicode_Check(key))) { while (*name) { int cmp = (**name == key) ? 0 : #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : #endif PyUnicode_Compare(**name, key); if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; if (cmp == 0) { values[name-argnames] = value; break; } name++; } if (*name) continue; else { PyObject*** argname = argnames; while (argname != first_kw_arg) { int cmp = (**argname == key) ? 0 : #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : #endif PyUnicode_Compare(**argname, key); if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; if (cmp == 0) goto arg_passed_twice; argname++; } } } else goto invalid_keyword_type; if (kwds2) { if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; } else { goto invalid_keyword; } } return 0; arg_passed_twice: __Pyx_RaiseDoubleKeywordsError(function_name, key); goto bad; invalid_keyword_type: PyErr_Format(PyExc_TypeError, "%s() keywords must be strings", function_name); goto bad; invalid_keyword: PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION < 3 "%s() got an unexpected keyword argument '%s'", function_name, PyString_AsString(key)); #else "%s() got an unexpected keyword argument '%U'", function_name, key); #endif bad: return -1; } static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { #if CYTHON_COMPILING_IN_CPYTHON PyObject *tmp_type, *tmp_value, *tmp_tb; PyThreadState *tstate = PyThreadState_GET(); tmp_type = tstate->curexc_type; tmp_value = tstate->curexc_value; tmp_tb = tstate->curexc_traceback; tstate->curexc_type = type; tstate->curexc_value = value; tstate->curexc_traceback = tb; Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); #else PyErr_Restore(type, value, tb); #endif } static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { #if CYTHON_COMPILING_IN_CPYTHON PyThreadState *tstate = PyThreadState_GET(); *type = tstate->curexc_type; *value = tstate->curexc_value; *tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; #else PyErr_Fetch(type, value, tb); #endif } #if PY_MAJOR_VERSION < 3 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, CYTHON_UNUSED PyObject *cause) { Py_XINCREF(type); if (!value || value == Py_None) value = NULL; else Py_INCREF(value); if (!tb || tb == Py_None) tb = NULL; else { Py_INCREF(tb); if (!PyTraceBack_Check(tb)) { PyErr_SetString(PyExc_TypeError, "raise: arg 3 must be a traceback or None"); goto raise_error; } } #if PY_VERSION_HEX < 0x02050000 if (PyClass_Check(type)) { #else if (PyType_Check(type)) { #endif #if CYTHON_COMPILING_IN_PYPY if (!value) { Py_INCREF(Py_None); value = Py_None; } #endif PyErr_NormalizeException(&type, &value, &tb); } else { if (value) { PyErr_SetString(PyExc_TypeError, "instance exception may not have a separate value"); goto raise_error; } value = type; #if PY_VERSION_HEX < 0x02050000 if (PyInstance_Check(type)) { type = (PyObject*) ((PyInstanceObject*)type)->in_class; Py_INCREF(type); } else { type = 0; PyErr_SetString(PyExc_TypeError, "raise: exception must be an old-style class or instance"); goto raise_error; } #else type = (PyObject*) Py_TYPE(type); Py_INCREF(type); if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { PyErr_SetString(PyExc_TypeError, "raise: exception class must be a subclass of BaseException"); goto raise_error; } #endif } __Pyx_ErrRestore(type, value, tb); return; raise_error: Py_XDECREF(value); Py_XDECREF(type); Py_XDECREF(tb); return; } #else /* Python 3+ */ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { PyObject* owned_instance = NULL; if (tb == Py_None) { tb = 0; } else if (tb && !PyTraceBack_Check(tb)) { PyErr_SetString(PyExc_TypeError, "raise: arg 3 must be a traceback or None"); goto bad; } if (value == Py_None) value = 0; if (PyExceptionInstance_Check(type)) { if (value) { PyErr_SetString(PyExc_TypeError, "instance exception may not have a separate value"); goto bad; } value = type; type = (PyObject*) Py_TYPE(value); } else if (PyExceptionClass_Check(type)) { PyObject *args; if (!value) args = PyTuple_New(0); else if (PyTuple_Check(value)) { Py_INCREF(value); args = value; } else args = PyTuple_Pack(1, value); if (!args) goto bad; owned_instance = PyEval_CallObject(type, args); Py_DECREF(args); if (!owned_instance) goto bad; value = owned_instance; if (!PyExceptionInstance_Check(value)) { PyErr_Format(PyExc_TypeError, "calling %R should have returned an instance of " "BaseException, not %R", type, Py_TYPE(value)); goto bad; } } else { PyErr_SetString(PyExc_TypeError, "raise: exception class must be a subclass of BaseException"); goto bad; } #if PY_VERSION_HEX >= 0x03030000 if (cause) { #else if (cause && cause != Py_None) { #endif PyObject *fixed_cause; if (cause == Py_None) { fixed_cause = NULL; } else if (PyExceptionClass_Check(cause)) { fixed_cause = PyObject_CallObject(cause, NULL); if (fixed_cause == NULL) goto bad; } else if (PyExceptionInstance_Check(cause)) { fixed_cause = cause; Py_INCREF(fixed_cause); } else { PyErr_SetString(PyExc_TypeError, "exception causes must derive from " "BaseException"); goto bad; } PyException_SetCause(value, fixed_cause); } PyErr_SetObject(type, value); if (tb) { PyThreadState *tstate = PyThreadState_GET(); PyObject* tmp_tb = tstate->curexc_traceback; if (tb != tmp_tb) { Py_INCREF(tb); tstate->curexc_traceback = tb; Py_XDECREF(tmp_tb); } } bad: Py_XDECREF(owned_instance); return; } #endif static CYTHON_INLINE int __Pyx_CheckKeywordStrings( PyObject *kwdict, const char* function_name, int kw_allowed) { PyObject* key = 0; Py_ssize_t pos = 0; #if CPYTHON_COMPILING_IN_PYPY if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0)) goto invalid_keyword; return 1; #else while (PyDict_Next(kwdict, &pos, &key, 0)) { #if PY_MAJOR_VERSION < 3 if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) #endif if (unlikely(!PyUnicode_Check(key))) goto invalid_keyword_type; } if ((!kw_allowed) && unlikely(key)) goto invalid_keyword; return 1; invalid_keyword_type: PyErr_Format(PyExc_TypeError, "%s() keywords must be strings", function_name); return 0; #endif invalid_keyword: PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION < 3 "%s() got an unexpected keyword argument '%s'", function_name, PyString_AsString(key)); #else "%s() got an unexpected keyword argument '%U'", function_name, key); #endif return 0; } static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { PyErr_Format(PyExc_ValueError, "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); } static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { PyErr_Format(PyExc_ValueError, "need more than %" CYTHON_FORMAT_SSIZE_T "d value%s to unpack", index, (index == 1) ? "" : "s"); } static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); } static CYTHON_INLINE int __Pyx_IterFinish(void) { #if CYTHON_COMPILING_IN_CPYTHON PyThreadState *tstate = PyThreadState_GET(); PyObject* exc_type = tstate->curexc_type; if (unlikely(exc_type)) { if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) { PyObject *exc_value, *exc_tb; exc_value = tstate->curexc_value; exc_tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; Py_DECREF(exc_type); Py_XDECREF(exc_value); Py_XDECREF(exc_tb); return 0; } else { return -1; } } return 0; #else if (unlikely(PyErr_Occurred())) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { PyErr_Clear(); return 0; } else { return -1; } } return 0; #endif } static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { if (unlikely(retval)) { Py_DECREF(retval); __Pyx_RaiseTooManyValuesError(expected); return -1; } else { return __Pyx_IterFinish(); } return 0; } static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { if (unlikely(!type)) { PyErr_Format(PyExc_SystemError, "Missing type object"); return 0; } if (likely(PyObject_TypeCheck(obj, type))) return 1; PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", Py_TYPE(obj)->tp_name, type->tp_name); return 0; } static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { PyObject *result; #if CYTHON_COMPILING_IN_CPYTHON result = PyDict_GetItem(__pyx_d, name); if (result) { Py_INCREF(result); } else { #else result = PyObject_GetItem(__pyx_d, name); if (!result) { PyErr_Clear(); #endif result = __Pyx_GetBuiltinName(name); } return result; } static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { PyObject *empty_list = 0; PyObject *module = 0; PyObject *global_dict = 0; PyObject *empty_dict = 0; PyObject *list; #if PY_VERSION_HEX < 0x03030000 PyObject *py_import; py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s____import__); if (!py_import) goto bad; #endif if (from_list) list = from_list; else { empty_list = PyList_New(0); if (!empty_list) goto bad; list = empty_list; } global_dict = PyModule_GetDict(__pyx_m); if (!global_dict) goto bad; empty_dict = PyDict_New(); if (!empty_dict) goto bad; #if PY_VERSION_HEX >= 0x02050000 { #if PY_MAJOR_VERSION >= 3 if (level == -1) { if (strchr(__Pyx_MODULE_NAME, '.')) { #if PY_VERSION_HEX < 0x03030000 PyObject *py_level = PyInt_FromLong(1); if (!py_level) goto bad; module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, py_level, NULL); Py_DECREF(py_level); #else module = PyImport_ImportModuleLevelObject( name, global_dict, empty_dict, list, 1); #endif if (!module) { if (!PyErr_ExceptionMatches(PyExc_ImportError)) goto bad; PyErr_Clear(); } } level = 0; /* try absolute import on failure */ } #endif if (!module) { #if PY_VERSION_HEX < 0x03030000 PyObject *py_level = PyInt_FromLong(level); if (!py_level) goto bad; module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, py_level, NULL); Py_DECREF(py_level); #else module = PyImport_ImportModuleLevelObject( name, global_dict, empty_dict, list, level); #endif } } #else if (level>0) { PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); goto bad; } module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, NULL); #endif bad: #if PY_VERSION_HEX < 0x03030000 Py_XDECREF(py_import); #endif Py_XDECREF(empty_list); Py_XDECREF(empty_dict); return module; } #if CYTHON_CCOMPLEX #ifdef __cplusplus static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { return ::std::complex< float >(x, y); } #else static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { return x + y*(__pyx_t_float_complex)_Complex_I; } #endif #else static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { __pyx_t_float_complex z; z.real = x; z.imag = y; return z; } #endif #if CYTHON_CCOMPLEX #else static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) { return (a.real == b.real) && (a.imag == b.imag); } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; z.real = a.real + b.real; z.imag = a.imag + b.imag; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; z.real = a.real - b.real; z.imag = a.imag - b.imag; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; z.real = a.real * b.real - a.imag * b.imag; z.imag = a.real * b.imag + a.imag * b.real; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; float denom = b.real * b.real + b.imag * b.imag; z.real = (a.real * b.real + a.imag * b.imag) / denom; z.imag = (a.imag * b.real - a.real * b.imag) / denom; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) { __pyx_t_float_complex z; z.real = -a.real; z.imag = -a.imag; return z; } static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) { return (a.real == 0) && (a.imag == 0); } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) { __pyx_t_float_complex z; z.real = a.real; z.imag = -a.imag; return z; } #if 1 static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) { #if !defined(HAVE_HYPOT) || defined(_MSC_VER) return sqrtf(z.real*z.real + z.imag*z.imag); #else return hypotf(z.real, z.imag); #endif } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; float r, lnr, theta, z_r, z_theta; if (b.imag == 0 && b.real == (int)b.real) { if (b.real < 0) { float denom = a.real * a.real + a.imag * a.imag; a.real = a.real / denom; a.imag = -a.imag / denom; b.real = -b.real; } switch ((int)b.real) { case 0: z.real = 1; z.imag = 0; return z; case 1: return a; case 2: z = __Pyx_c_prodf(a, a); return __Pyx_c_prodf(a, a); case 3: z = __Pyx_c_prodf(a, a); return __Pyx_c_prodf(z, a); case 4: z = __Pyx_c_prodf(a, a); return __Pyx_c_prodf(z, z); } } if (a.imag == 0) { if (a.real == 0) { return a; } r = a.real; theta = 0; } else { r = __Pyx_c_absf(a); theta = atan2f(a.imag, a.real); } lnr = logf(r); z_r = expf(lnr * b.real - theta * b.imag); z_theta = theta * b.real + lnr * b.imag; z.real = z_r * cosf(z_theta); z.imag = z_r * sinf(z_theta); return z; } #endif #endif #if CYTHON_CCOMPLEX #ifdef __cplusplus static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { return ::std::complex< double >(x, y); } #else static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { return x + y*(__pyx_t_double_complex)_Complex_I; } #endif #else static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { __pyx_t_double_complex z; z.real = x; z.imag = y; return z; } #endif #if CYTHON_CCOMPLEX #else static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) { return (a.real == b.real) && (a.imag == b.imag); } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; z.real = a.real + b.real; z.imag = a.imag + b.imag; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; z.real = a.real - b.real; z.imag = a.imag - b.imag; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; z.real = a.real * b.real - a.imag * b.imag; z.imag = a.real * b.imag + a.imag * b.real; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; double denom = b.real * b.real + b.imag * b.imag; z.real = (a.real * b.real + a.imag * b.imag) / denom; z.imag = (a.imag * b.real - a.real * b.imag) / denom; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) { __pyx_t_double_complex z; z.real = -a.real; z.imag = -a.imag; return z; } static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) { return (a.real == 0) && (a.imag == 0); } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) { __pyx_t_double_complex z; z.real = a.real; z.imag = -a.imag; return z; } #if 1 static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) { #if !defined(HAVE_HYPOT) || defined(_MSC_VER) return sqrt(z.real*z.real + z.imag*z.imag); #else return hypot(z.real, z.imag); #endif } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; double r, lnr, theta, z_r, z_theta; if (b.imag == 0 && b.real == (int)b.real) { if (b.real < 0) { double denom = a.real * a.real + a.imag * a.imag; a.real = a.real / denom; a.imag = -a.imag / denom; b.real = -b.real; } switch ((int)b.real) { case 0: z.real = 1; z.imag = 0; return z; case 1: return a; case 2: z = __Pyx_c_prod(a, a); return __Pyx_c_prod(a, a); case 3: z = __Pyx_c_prod(a, a); return __Pyx_c_prod(z, a); case 4: z = __Pyx_c_prod(a, a); return __Pyx_c_prod(z, z); } } if (a.imag == 0) { if (a.real == 0) { return a; } r = a.real; theta = 0; } else { r = __Pyx_c_abs(a); theta = atan2(a.imag, a.real); } lnr = log(r); z_r = exp(lnr * b.real - theta * b.imag); z_theta = theta * b.real + lnr * b.imag; z.real = z_r * cos(z_theta); z.imag = z_r * sin(z_theta); return z; } #endif #endif static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) { const unsigned char neg_one = (unsigned char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned char" : "value too large to convert to unsigned char"); } return (unsigned char)-1; } return (unsigned char)val; } return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) { const unsigned short neg_one = (unsigned short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned short" : "value too large to convert to unsigned short"); } return (unsigned short)-1; } return (unsigned short)val; } return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) { const unsigned int neg_one = (unsigned int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned int" : "value too large to convert to unsigned int"); } return (unsigned int)-1; } return (unsigned int)val; } return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) { const char neg_one = (char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to char" : "value too large to convert to char"); } return (char)-1; } return (char)val; } return (char)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) { const short neg_one = (short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to short" : "value too large to convert to short"); } return (short)-1; } return (short)val; } return (short)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) { const int neg_one = (int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to int" : "value too large to convert to int"); } return (int)-1; } return (int)val; } return (int)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) { const signed char neg_one = (signed char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed char" : "value too large to convert to signed char"); } return (signed char)-1; } return (signed char)val; } return (signed char)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) { const signed short neg_one = (signed short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed short" : "value too large to convert to signed short"); } return (signed short)-1; } return (signed short)val; } return (signed short)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) { const signed int neg_one = (signed int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed int" : "value too large to convert to signed int"); } return (signed int)-1; } return (signed int)val; } return (signed int)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) { const int neg_one = (int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to int" : "value too large to convert to int"); } return (int)-1; } return (int)val; } return (int)__Pyx_PyInt_AsLong(x); } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) { const unsigned long neg_one = (unsigned long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned long"); return (unsigned long)-1; } return (unsigned long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (unsigned long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned long"); return (unsigned long)-1; } return (unsigned long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(unsigned long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(unsigned long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (unsigned long)PyLong_AsLong(x); } } else { unsigned long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (unsigned long)-1; val = __Pyx_PyInt_AsUnsignedLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) { const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned PY_LONG_LONG"); return (unsigned PY_LONG_LONG)-1; } return (unsigned PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned PY_LONG_LONG"); return (unsigned PY_LONG_LONG)-1; } return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x); } } else { unsigned PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (unsigned PY_LONG_LONG)-1; val = __Pyx_PyInt_AsUnsignedLongLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) { const long neg_one = (long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to long"); return (long)-1; } return (long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to long"); return (long)-1; } return (long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (long)PyLong_AsLong(x); } } else { long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (long)-1; val = __Pyx_PyInt_AsLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) { const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to PY_LONG_LONG"); return (PY_LONG_LONG)-1; } return (PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to PY_LONG_LONG"); return (PY_LONG_LONG)-1; } return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (PY_LONG_LONG)PyLong_AsLongLong(x); } } else { PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (PY_LONG_LONG)-1; val = __Pyx_PyInt_AsLongLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) { const signed long neg_one = (signed long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed long"); return (signed long)-1; } return (signed long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (signed long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed long"); return (signed long)-1; } return (signed long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(signed long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(signed long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (signed long)PyLong_AsLong(x); } } else { signed long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (signed long)-1; val = __Pyx_PyInt_AsSignedLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) { const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed PY_LONG_LONG"); return (signed PY_LONG_LONG)-1; } return (signed PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed PY_LONG_LONG"); return (signed PY_LONG_LONG)-1; } return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (signed PY_LONG_LONG)PyLong_AsLongLong(x); } } else { signed PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (signed PY_LONG_LONG)-1; val = __Pyx_PyInt_AsSignedLongLong(tmp); Py_DECREF(tmp); return val; } } static int __Pyx_check_binary_version(void) { char ctversion[4], rtversion[4]; PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { char message[200]; PyOS_snprintf(message, sizeof(message), "compiletime version %s of module '%.100s' " "does not match runtime version %s", ctversion, __Pyx_MODULE_NAME, rtversion); #if PY_VERSION_HEX < 0x02050000 return PyErr_Warn(NULL, message); #else return PyErr_WarnEx(NULL, message, 1); #endif } return 0; } #ifndef __PYX_HAVE_RT_ImportModule #define __PYX_HAVE_RT_ImportModule static PyObject *__Pyx_ImportModule(const char *name) { PyObject *py_name = 0; PyObject *py_module = 0; py_name = __Pyx_PyIdentifier_FromString(name); if (!py_name) goto bad; py_module = PyImport_Import(py_name); Py_DECREF(py_name); return py_module; bad: Py_XDECREF(py_name); return 0; } #endif #ifndef __PYX_HAVE_RT_ImportType #define __PYX_HAVE_RT_ImportType static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict) { PyObject *py_module = 0; PyObject *result = 0; PyObject *py_name = 0; char warning[200]; Py_ssize_t basicsize; #ifdef Py_LIMITED_API PyObject *py_basicsize; #endif py_module = __Pyx_ImportModule(module_name); if (!py_module) goto bad; py_name = __Pyx_PyIdentifier_FromString(class_name); if (!py_name) goto bad; result = PyObject_GetAttr(py_module, py_name); Py_DECREF(py_name); py_name = 0; Py_DECREF(py_module); py_module = 0; if (!result) goto bad; if (!PyType_Check(result)) { PyErr_Format(PyExc_TypeError, "%s.%s is not a type object", module_name, class_name); goto bad; } #ifndef Py_LIMITED_API basicsize = ((PyTypeObject *)result)->tp_basicsize; #else py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); if (!py_basicsize) goto bad; basicsize = PyLong_AsSsize_t(py_basicsize); Py_DECREF(py_basicsize); py_basicsize = 0; if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) goto bad; #endif if (!strict && (size_t)basicsize > size) { PyOS_snprintf(warning, sizeof(warning), "%s.%s size changed, may indicate binary incompatibility", module_name, class_name); #if PY_VERSION_HEX < 0x02050000 if (PyErr_Warn(NULL, warning) < 0) goto bad; #else if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; #endif } else if ((size_t)basicsize != size) { PyErr_Format(PyExc_ValueError, "%s.%s has the wrong size, try recompiling", module_name, class_name); goto bad; } return (PyTypeObject *)result; bad: Py_XDECREF(py_module); Py_XDECREF(result); return NULL; } #endif static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { int start = 0, mid = 0, end = count - 1; if (end >= 0 && code_line > entries[end].code_line) { return count; } while (start < end) { mid = (start + end) / 2; if (code_line < entries[mid].code_line) { end = mid; } else if (code_line > entries[mid].code_line) { start = mid + 1; } else { return mid; } } if (code_line <= entries[mid].code_line) { return mid; } else { return mid + 1; } } static PyCodeObject *__pyx_find_code_object(int code_line) { PyCodeObject* code_object; int pos; if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { return NULL; } pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { return NULL; } code_object = __pyx_code_cache.entries[pos].code_object; Py_INCREF(code_object); return code_object; } static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { int pos, i; __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; if (unlikely(!code_line)) { return; } if (unlikely(!entries)) { entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); if (likely(entries)) { __pyx_code_cache.entries = entries; __pyx_code_cache.max_count = 64; __pyx_code_cache.count = 1; entries[0].code_line = code_line; entries[0].code_object = code_object; Py_INCREF(code_object); } return; } pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { PyCodeObject* tmp = entries[pos].code_object; entries[pos].code_object = code_object; Py_DECREF(tmp); return; } if (__pyx_code_cache.count == __pyx_code_cache.max_count) { int new_max = __pyx_code_cache.max_count + 64; entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); if (unlikely(!entries)) { return; } __pyx_code_cache.entries = entries; __pyx_code_cache.max_count = new_max; } for (i=__pyx_code_cache.count; i>pos; i--) { entries[i] = entries[i-1]; } entries[pos].code_line = code_line; entries[pos].code_object = code_object; __pyx_code_cache.count++; Py_INCREF(code_object); } #include "compile.h" #include "frameobject.h" #include "traceback.h" static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( const char *funcname, int c_line, int py_line, const char *filename) { PyCodeObject *py_code = 0; PyObject *py_srcfile = 0; PyObject *py_funcname = 0; #if PY_MAJOR_VERSION < 3 py_srcfile = PyString_FromString(filename); #else py_srcfile = PyUnicode_FromString(filename); #endif if (!py_srcfile) goto bad; if (c_line) { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); #else py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); #endif } else { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromString(funcname); #else py_funcname = PyUnicode_FromString(funcname); #endif } if (!py_funcname) goto bad; py_code = __Pyx_PyCode_New( 0, /*int argcount,*/ 0, /*int kwonlyargcount,*/ 0, /*int nlocals,*/ 0, /*int stacksize,*/ 0, /*int flags,*/ __pyx_empty_bytes, /*PyObject *code,*/ __pyx_empty_tuple, /*PyObject *consts,*/ __pyx_empty_tuple, /*PyObject *names,*/ __pyx_empty_tuple, /*PyObject *varnames,*/ __pyx_empty_tuple, /*PyObject *freevars,*/ __pyx_empty_tuple, /*PyObject *cellvars,*/ py_srcfile, /*PyObject *filename,*/ py_funcname, /*PyObject *name,*/ py_line, /*int firstlineno,*/ __pyx_empty_bytes /*PyObject *lnotab*/ ); Py_DECREF(py_srcfile); Py_DECREF(py_funcname); return py_code; bad: Py_XDECREF(py_srcfile); Py_XDECREF(py_funcname); return NULL; } static void __Pyx_AddTraceback(const char *funcname, int c_line, int py_line, const char *filename) { PyCodeObject *py_code = 0; PyObject *py_globals = 0; PyFrameObject *py_frame = 0; py_code = __pyx_find_code_object(c_line ? c_line : py_line); if (!py_code) { py_code = __Pyx_CreateCodeObjectForTraceback( funcname, c_line, py_line, filename); if (!py_code) goto bad; __pyx_insert_code_object(c_line ? c_line : py_line, py_code); } py_globals = PyModule_GetDict(__pyx_m); if (!py_globals) goto bad; py_frame = PyFrame_New( PyThreadState_GET(), /*PyThreadState *tstate,*/ py_code, /*PyCodeObject *code,*/ py_globals, /*PyObject *globals,*/ 0 /*PyObject *locals*/ ); if (!py_frame) goto bad; py_frame->f_lineno = py_line; PyTraceBack_Here(py_frame); bad: Py_XDECREF(py_code); Py_XDECREF(py_frame); } static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { while (t->p) { #if PY_MAJOR_VERSION < 3 if (t->is_unicode) { *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); } else if (t->intern) { *t->p = PyString_InternFromString(t->s); } else { *t->p = PyString_FromStringAndSize(t->s, t->n - 1); } #else /* Python 3+ has unicode identifiers */ if (t->is_unicode | t->is_str) { if (t->intern) { *t->p = PyUnicode_InternFromString(t->s); } else if (t->encoding) { *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); } else { *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); } } else { *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); } #endif if (!*t->p) return -1; ++t; } return 0; } static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); } static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { Py_ssize_t ignore; return __Pyx_PyObject_AsStringAndSize(o, &ignore); } static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT if ( #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII __Pyx_sys_getdefaultencoding_not_ascii && #endif PyUnicode_Check(o)) { #if PY_VERSION_HEX < 0x03030000 char* defenc_c; PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); if (!defenc) return NULL; defenc_c = PyBytes_AS_STRING(defenc); #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII { char* end = defenc_c + PyBytes_GET_SIZE(defenc); char* c; for (c = defenc_c; c < end; c++) { if ((unsigned char) (*c) >= 128) { PyUnicode_AsASCIIString(o); return NULL; } } } #endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ *length = PyBytes_GET_SIZE(defenc); return defenc_c; #else /* PY_VERSION_HEX < 0x03030000 */ if (PyUnicode_READY(o) == -1) return NULL; #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII if (PyUnicode_IS_ASCII(o)) { *length = PyUnicode_GET_DATA_SIZE(o); return PyUnicode_AsUTF8(o); } else { PyUnicode_AsASCIIString(o); return NULL; } #else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ return PyUnicode_AsUTF8AndSize(o, length); #endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ #endif /* PY_VERSION_HEX < 0x03030000 */ } else #endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ { char* result; int r = PyBytes_AsStringAndSize(o, &result, length); if (r < 0) { return NULL; } else { return result; } } } static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { int is_true = x == Py_True; if (is_true | (x == Py_False) | (x == Py_None)) return is_true; else return PyObject_IsTrue(x); } static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { PyNumberMethods *m; const char *name = NULL; PyObject *res = NULL; #if PY_MAJOR_VERSION < 3 if (PyInt_Check(x) || PyLong_Check(x)) #else if (PyLong_Check(x)) #endif return Py_INCREF(x), x; m = Py_TYPE(x)->tp_as_number; #if PY_MAJOR_VERSION < 3 if (m && m->nb_int) { name = "int"; res = PyNumber_Int(x); } else if (m && m->nb_long) { name = "long"; res = PyNumber_Long(x); } #else if (m && m->nb_int) { name = "int"; res = PyNumber_Long(x); } #endif if (res) { #if PY_MAJOR_VERSION < 3 if (!PyInt_Check(res) && !PyLong_Check(res)) { #else if (!PyLong_Check(res)) { #endif PyErr_Format(PyExc_TypeError, "__%s__ returned non-%s (type %.200s)", name, name, Py_TYPE(res)->tp_name); Py_DECREF(res); return NULL; } } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_TypeError, "an integer is required"); } return res; } static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { Py_ssize_t ival; PyObject* x = PyNumber_Index(b); if (!x) return -1; ival = PyInt_AsSsize_t(x); Py_DECREF(x); return ival; } static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { #if PY_VERSION_HEX < 0x02050000 if (ival <= LONG_MAX) return PyInt_FromLong((long)ival); else { unsigned char *bytes = (unsigned char *) &ival; int one = 1; int little = (int)*(unsigned char*)&one; return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); } #else return PyInt_FromSize_t(ival); #endif } static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) { unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x); if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) { if ((val != (unsigned PY_LONG_LONG)-1) || !PyErr_Occurred()) PyErr_SetString(PyExc_OverflowError, "value too large to convert to size_t"); return (size_t)-1; } return (size_t)val; } #endif /* Py_PYTHON_H */ ga-5-3/python/ga4py/gain/notimplemented.pyx0000640005473000001440000137315711613644352017673 0ustar d3n000users import sys import numpy as np cimport numpy as np def docstring(obj, docstring): """docstring(obj, docstring) Add a docstring to a built-in obj if possible. If the obj already has a docstring raise a RuntimeError If this routine does not know how to add a docstring to the object raise a TypeError """ # BUILTIN raise NotImplementedError def add_newdoc(place, obj, doc): """Adds documentation to obj which is in module place. If doc is a string add it to obj as a docstring If doc is a tuple, then the first element is interpreted as an attribute of obj and the second as the docstring (method, docstring) If doc is a list, then each element of the list should be a sequence of length two --> [(method1, docstring1), (method2, docstring2), ...] This routine never raises an error. """ raise NotImplementedError def all(a, axis=None, out=None): """Test whether all array elements along a given axis evaluate to True. Parameters ---------- a : array_like Input array or object that can be converted to an array. axis : int, optional Axis along which a logical AND is performed. The default (`axis` = `None`) is to perform a logical AND over a flattened input array. `axis` may be negative, in which case it counts from the last to the first axis. out : ndarray, optional Alternate output array in which to place the result. It must have the same shape as the expected output and its type is preserved (e.g., if ``dtype(out)`` is float, the result will consist of 0.0's and 1.0's). See `doc.ufuncs` (Section "Output arguments") for more details. Returns ------- all : ndarray, bool A new boolean or array is returned unless `out` is specified, in which case a reference to `out` is returned. See Also -------- ndarray.all : equivalent method any : Test whether any element along a given axis evaluates to True. Notes ----- Not a Number (NaN), positive infinity and negative infinity evaluate to `True` because these are not equal to zero. Examples -------- >>> np.all([[True,False],[True,True]]) False >>> np.all([[True,False],[True,True]], axis=0) array([ True, False], dtype=bool) >>> np.all([-1, 4, 5]) True >>> np.all([1.0, np.nan]) True >>> o=np.array([False]) >>> z=np.all([-1, 4, 5], out=o) >>> id(z), id(o), z # doctest: +SKIP (28293632, 28293632, array([ True], dtype=bool)) """ raise NotImplementedError def allclose(a, b, rtol=1e-05, atol=1e-08): """Returns True if two arrays are element-wise equal within a tolerance. The tolerance values are positive, typically very small numbers. The relative difference (`rtol` * abs(`b`)) and the absolute difference `atol` are added together to compare against the absolute difference between `a` and `b`. Parameters ---------- a, b : array_like Input arrays to compare. rtol : float The relative tolerance parameter (see Notes). atol : float The absolute tolerance parameter (see Notes). Returns ------- y : bool Returns True if the two arrays are equal within the given tolerance; False otherwise. If either array contains NaN, then False is returned. See Also -------- all, any, alltrue, sometrue Notes ----- If the following equation is element-wise True, then allclose returns True. absolute(`a` - `b`) <= (`atol` + `rtol` * absolute(`b`)) The above equation is not symmetric in `a` and `b`, so that `allclose(a, b)` might be different from `allclose(b, a)` in some rare cases. Examples -------- >>> np.allclose([1e10,1e-7], [1.00001e10,1e-8]) False >>> np.allclose([1e10,1e-8], [1.00001e10,1e-9]) True >>> np.allclose([1e10,1e-8], [1.0001e10,1e-9]) False >>> np.allclose([1.0, np.nan], [1.0, np.nan]) False """ raise NotImplementedError def alltrue(a, axis=None, out=None): """Check if all elements of input array are true. See Also -------- numpy.all : Equivalent function; see for details. """ raise NotImplementedError def alterdot(): """Change `dot`, `vdot`, and `innerproduct` to use accelerated BLAS functions. Typically, as a user of Numpy, you do not explicitly call this function. If Numpy is built with an accelerated BLAS, this function is automatically called when Numpy is imported. When Numpy is built with an accelerated BLAS like ATLAS, these functions are replaced to make use of the faster implementations. The faster implementations only affect float32, float64, complex64, and complex128 arrays. Furthermore, the BLAS API only includes matrix-matrix, matrix-vector, and vector-vector products. Products of arrays with larger dimensionalities use the built in functions and are not accelerated. See Also -------- restoredot : `restoredot` undoes the effects of `alterdot`. """ # BUILTIN raise NotImplementedError def amax(a, axis=None, out=None): """Return the maximum of an array or maximum along an axis. Parameters ---------- a : array_like Input data. axis : int, optional Axis along which to operate. By default flattened input is used. out : ndarray, optional Alternate output array in which to place the result. Must be of the same shape and buffer length as the expected output. See `doc.ufuncs` (Section "Output arguments") for more details. Returns ------- amax : ndarray or scalar Maximum of `a`. If `axis` is None, the result is a scalar value. If `axis` is given, the result is an array of dimension ``a.ndim - 1``. See Also -------- nanmax : NaN values are ignored instead of being propagated. fmax : same behavior as the C99 fmax function. argmax : indices of the maximum values. Notes ----- NaN values are propagated, that is if at least one item is NaN, the corresponding max value will be NaN as well. To ignore NaN values (MATLAB behavior), please use nanmax. Examples -------- >>> a = np.arange(4).reshape((2,2)) >>> a array([[0, 1], [2, 3]]) >>> np.amax(a) 3 >>> np.amax(a, axis=0) array([2, 3]) >>> np.amax(a, axis=1) array([1, 3]) >>> b = np.arange(5, dtype=np.float) >>> b[2] = np.NaN >>> np.amax(b) nan >>> np.nanmax(b) 4.0 """ raise NotImplementedError def amin(a, axis=None, out=None): """Return the minimum of an array or minimum along an axis. Parameters ---------- a : array_like Input data. axis : int, optional Axis along which to operate. By default a flattened input is used. out : ndarray, optional Alternative output array in which to place the result. Must be of the same shape and buffer length as the expected output. See `doc.ufuncs` (Section "Output arguments") for more details. Returns ------- amin : ndarray A new array or a scalar array with the result. See Also -------- nanmin: nan values are ignored instead of being propagated fmin: same behavior as the C99 fmin function argmin: Return the indices of the minimum values. amax, nanmax, fmax Notes ----- NaN values are propagated, that is if at least one item is nan, the corresponding min value will be nan as well. To ignore NaN values (matlab behavior), please use nanmin. Examples -------- >>> a = np.arange(4).reshape((2,2)) >>> a array([[0, 1], [2, 3]]) >>> np.amin(a) # Minimum of the flattened array 0 >>> np.amin(a, axis=0) # Minima along the first axis array([0, 1]) >>> np.amin(a, axis=1) # Minima along the second axis array([0, 2]) >>> b = np.arange(5, dtype=np.float) >>> b[2] = np.NaN >>> np.amin(b) nan >>> np.nanmin(b) 0.0 """ raise NotImplementedError def angle(z, deg=0): """Return the angle of the complex argument. Parameters ---------- z : array_like A complex number or sequence of complex numbers. deg : bool, optional Return angle in degrees if True, radians if False (default). Returns ------- angle : {ndarray, scalar} The counterclockwise angle from the positive real axis on the complex plane, with dtype as numpy.float64. See Also -------- arctan2 absolute Examples -------- >>> np.angle([1.0, 1.0j, 1+1j]) # in radians array([ 0. , 1.57079633, 0.78539816]) >>> np.angle(1+1j, deg=True) # in degrees 45.0 """ raise NotImplementedError def any(a, axis=None, out=None): """Test whether any array element along a given axis evaluates to True. Returns single boolean unless `axis` is not ``None`` Parameters ---------- a : array_like Input array or object that can be converted to an array. axis : int, optional Axis along which a logical OR is performed. The default (`axis` = `None`) is to perform a logical OR over a flattened input array. `axis` may be negative, in which case it counts from the last to the first axis. out : ndarray, optional Alternate output array in which to place the result. It must have the same shape as the expected output and its type is preserved (e.g., if it is of type float, then it will remain so, returning 1.0 for True and 0.0 for False, regardless of the type of `a`). See `doc.ufuncs` (Section "Output arguments") for details. Returns ------- any : bool or ndarray A new boolean or `ndarray` is returned unless `out` is specified, in which case a reference to `out` is returned. See Also -------- ndarray.any : equivalent method all : Test whether all elements along a given axis evaluate to True. Notes ----- Not a Number (NaN), positive infinity and negative infinity evaluate to `True` because these are not equal to zero. Examples -------- >>> np.any([[True, False], [True, True]]) True >>> np.any([[True, False], [False, False]], axis=0) array([ True, False], dtype=bool) >>> np.any([-1, 0, 5]) True >>> np.any(np.nan) True >>> o=np.array([False]) >>> z=np.any([-1, 4, 5], out=o) >>> z, o (array([ True], dtype=bool), array([ True], dtype=bool)) >>> # Check now that z is a reference to o >>> z is o True >>> id(z), id(o) # identity of z and o # doctest: +SKIP (191614240, 191614240) """ raise NotImplementedError def append(arr, values, axis=None): """Append values to the end of an array. Parameters ---------- arr : array_like Values are appended to a copy of this array. values : array_like These values are appended to a copy of `arr`. It must be of the correct shape (the same shape as `arr`, excluding `axis`). If `axis` is not specified, `values` can be any shape and will be flattened before use. axis : int, optional The axis along which `values` are appended. If `axis` is not given, both `arr` and `values` are flattened before use. Returns ------- out : ndarray A copy of `arr` with `values` appended to `axis`. Note that `append` does not occur in-place: a new array is allocated and filled. If `axis` is None, `out` is a flattened array. See Also -------- insert : Insert elements into an array. delete : Delete elements from an array. Examples -------- >>> np.append([1, 2, 3], [[4, 5, 6], [7, 8, 9]]) array([1, 2, 3, 4, 5, 6, 7, 8, 9]) When `axis` is specified, `values` must have the correct shape. >>> np.append([[1, 2, 3], [4, 5, 6]], [[7, 8, 9]], axis=0) array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> np.append([[1, 2, 3], [4, 5, 6]], [7, 8, 9], axis=0) Traceback (most recent call last): ... ValueError: arrays must have same number of dimensions """ raise NotImplementedError def apply_along_axis(func1d, axis, arr): """Apply a function to 1-D slices along the given axis. Execute `func1d(a, *args)` where `func1d` operates on 1-D arrays and `a` is a 1-D slice of `arr` along `axis`. Parameters ---------- func1d : function This function should accept 1-D arrays. It is applied to 1-D slices of `arr` along the specified axis. axis : integer Axis along which `arr` is sliced. arr : ndarray Input array. args : any Additional arguments to `func1d`. Returns ------- outarr : ndarray The output array. The shape of `outarr` is identical to the shape of `arr`, except along the `axis` dimension, where the length of `outarr` is equal to the size of the return value of `func1d`. If `func1d` returns a scalar `outarr` will have one fewer dimensions than `arr`. See Also -------- apply_over_axes : Apply a function repeatedly over multiple axes. Examples -------- >>> def my_func(a): ... '''Average first and last element of a 1-D array''' ... return (a[0] + a[-1]) * 0.5 >>> b = np.array([[1,2,3], [4,5,6], [7,8,9]]) >>> np.apply_along_axis(my_func, 0, b) array([ 4., 5., 6.]) >>> np.apply_along_axis(my_func, 1, b) array([ 2., 5., 8.]) For a function that doesn't return a scalar, the number of dimensions in `outarr` is the same as `arr`. >>> def new_func(a): ... '''Divide elements of a by 2.''' ... return a * 0.5 >>> b = np.array([[1,2,3], [4,5,6], [7,8,9]]) >>> np.apply_along_axis(new_func, 0, b) array([[ 0.5, 1. , 1.5], [ 2. , 2.5, 3. ], [ 3.5, 4. , 4.5]]) """ raise NotImplementedError def apply_over_axes(func, a, axes): """Apply a function repeatedly over multiple axes. `func` is called as `res = func(a, axis)`, where `axis` is the first element of `axes`. The result `res` of the function call must have either the same dimensions as `a` or one less dimension. If `res` has one less dimension than `a`, a dimension is inserted before `axis`. The call to `func` is then repeated for each axis in `axes`, with `res` as the first argument. Parameters ---------- func : function This function must take two arguments, `func(a, axis)`. a : array_like Input array. axes : array_like Axes over which `func` is applied; the elements must be integers. Returns ------- val : ndarray The output array. The number of dimensions is the same as `a`, but the shape can be different. This depends on whether `func` changes the shape of its output with respect to its input. See Also -------- apply_along_axis : Apply a function to 1-D slices of an array along the given axis. Examples -------- >>> a = np.arange(24).reshape(2,3,4) >>> a array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]) Sum over axes 0 and 2. The result has same number of dimensions as the original array: >>> np.apply_over_axes(np.sum, a, [0,2]) array([[[ 60], [ 92], [124]]]) """ raise NotImplementedError def argmax(a, axis=None): """Indices of the maximum values along an axis. Parameters ---------- a : array_like Input array. axis : int, optional By default, the index is into the flattened array, otherwise along the specified axis. Returns ------- index_array : ndarray of ints Array of indices into the array. It has the same shape as `a.shape` with the dimension along `axis` removed. See Also -------- ndarray.argmax, argmin amax : The maximum value along a given axis. unravel_index : Convert a flat index into an index tuple. Notes ----- In case of multiple occurrences of the maximum values, the indices corresponding to the first occurrence are returned. Examples -------- >>> a = np.arange(6).reshape(2,3) >>> a array([[0, 1, 2], [3, 4, 5]]) >>> np.argmax(a) 5 >>> np.argmax(a, axis=0) array([1, 1, 1]) >>> np.argmax(a, axis=1) array([2, 2]) >>> b = np.arange(6) >>> b[1] = 5 >>> b array([0, 5, 2, 3, 4, 5]) >>> np.argmax(b) # Only the first occurrence is returned. 1 """ raise NotImplementedError def argmin(a, axis=None): """Return the indices of the minimum values along an axis. See Also -------- argmax : Similar function. Please refer to `numpy.argmax` for detailed documentation. """ raise NotImplementedError def argsort(a, axis=-1, kind='quicksort', order=None): """Returns the indices that would sort an array. Perform an indirect sort along the given axis using the algorithm specified by the `kind` keyword. It returns an array of indices of the same shape as `a` that index data along the given axis in sorted order. Parameters ---------- a : array_like Array to sort. axis : int or None, optional Axis along which to sort. The default is -1 (the last axis). If None, the flattened array is used. kind : {'quicksort', 'mergesort', 'heapsort'}, optional Sorting algorithm. order : list, optional When `a` is an array with fields defined, this argument specifies which fields to compare first, second, etc. Not all fields need be specified. Returns ------- index_array : ndarray, int Array of indices that sort `a` along the specified axis. In other words, ``a[index_array]`` yields a sorted `a`. See Also -------- sort : Describes sorting algorithms used. lexsort : Indirect stable sort with multiple keys. ndarray.sort : Inplace sort. Notes ----- See `sort` for notes on the different sorting algorithms. As of NumPy 1.4.0 `argsort` works with real/complex arrays containing nan values. The enhanced sort order is documented in `sort`. Examples -------- One dimensional array: >>> x = np.array([3, 1, 2]) >>> np.argsort(x) array([1, 2, 0]) Two-dimensional array: >>> x = np.array([[0, 3], [2, 2]]) >>> x array([[0, 3], [2, 2]]) >>> np.argsort(x, axis=0) array([[0, 1], [1, 0]]) >>> np.argsort(x, axis=1) array([[0, 1], [0, 1]]) Sorting with keys: >>> x = np.array([(1, 0), (0, 1)], dtype=[('x', '>> x array([(1, 0), (0, 1)], dtype=[('x', '>> np.argsort(x, order=('x','y')) array([1, 0]) >>> np.argsort(x, order=('y','x')) array([0, 1]) """ raise NotImplementedError def argwhere(a): """Find the indices of array elements that are non-zero, grouped by element. Parameters ---------- a : array_like Input data. Returns ------- index_array : ndarray Indices of elements that are non-zero. Indices are grouped by element. See Also -------- where, nonzero Notes ----- ``np.argwhere(a)`` is the same as ``np.transpose(np.nonzero(a))``. The output of ``argwhere`` is not suitable for indexing arrays. For this purpose use ``where(a)`` instead. Examples -------- >>> x = np.arange(6).reshape(2,3) >>> x array([[0, 1, 2], [3, 4, 5]]) >>> np.argwhere(x>1) array([[0, 2], [1, 0], [1, 1], [1, 2]]) """ raise NotImplementedError def around(a, decimals=0, out=None): """Evenly round to the given number of decimals. Parameters ---------- a : array_like Input data. decimals : int, optional Number of decimal places to round to (default: 0). If decimals is negative, it specifies the number of positions to the left of the decimal point. out : ndarray, optional Alternative output array in which to place the result. It must have the same shape as the expected output, but the type of the output values will be cast if necessary. See `doc.ufuncs` (Section "Output arguments") for details. Returns ------- rounded_array : ndarray An array of the same type as `a`, containing the rounded values. Unless `out` was specified, a new array is created. A reference to the result is returned. The real and imaginary parts of complex numbers are rounded separately. The result of rounding a float is a float. See Also -------- ndarray.round : equivalent method ceil, fix, floor, rint, trunc Notes ----- For values exactly halfway between rounded decimal values, Numpy rounds to the nearest even value. Thus 1.5 and 2.5 round to 2.0, -0.5 and 0.5 round to 0.0, etc. Results may also be surprising due to the inexact representation of decimal fractions in the IEEE floating point standard [1]_ and errors introduced when scaling by powers of ten. References ---------- .. [1] "Lecture Notes on the Status of IEEE 754", William Kahan, http://www.cs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF .. [2] "How Futile are Mindless Assessments of Roundoff in Floating-Point Computation?", William Kahan, http://www.cs.berkeley.edu/~wkahan/Mindless.pdf Examples -------- >>> np.around([0.37, 1.64]) array([ 0., 2.]) >>> np.around([0.37, 1.64], decimals=1) array([ 0.4, 1.6]) >>> np.around([.5, 1.5, 2.5, 3.5, 4.5]) # rounds to nearest even value array([ 0., 2., 2., 4., 4.]) >>> np.around([1,2,3,11], decimals=1) # ndarray of ints is returned array([ 1, 2, 3, 11]) >>> np.around([1,2,3,11], decimals=-1) array([ 0, 0, 0, 10]) """ raise NotImplementedError def array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0): """array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0) Create an array. Parameters ---------- object : array_like An array, any object exposing the array interface, an object whose __array__ method returns an array, or any (nested) sequence. dtype : data-type, optional The desired data-type for the array. If not given, then the type will be determined as the minimum type required to hold the objects in the sequence. This argument can only be used to 'upcast' the array. For downcasting, use the .astype(t) method. copy : bool, optional If true (default), then the object is copied. Otherwise, a copy will only be made if __array__ returns a copy, if obj is a nested sequence, or if a copy is needed to satisfy any of the other requirements (`dtype`, `order`, etc.). order : {'C', 'F', 'A'}, optional Specify the order of the array. If order is 'C' (default), then the array will be in C-contiguous order (last-index varies the fastest). If order is 'F', then the returned array will be in Fortran-contiguous order (first-index varies the fastest). If order is 'A', then the returned array may be in any order (either C-, Fortran-contiguous, or even discontiguous). subok : bool, optional If True, then sub-classes will be passed-through, otherwise the returned array will be forced to be a base-class array (default). ndmin : int, optional Specifies the minimum number of dimensions that the resulting array should have. Ones will be pre-pended to the shape as needed to meet this requirement. Returns ------- out : ndarray An array object satisfying the specified requirements. See Also -------- empty, empty_like, zeros, zeros_like, ones, ones_like, fill Examples -------- >>> np.array([1, 2, 3]) array([1, 2, 3]) Upcasting: >>> np.array([1, 2, 3.0]) array([ 1., 2., 3.]) More than one dimension: >>> np.array([[1, 2], [3, 4]]) array([[1, 2], [3, 4]]) Minimum dimensions 2: >>> np.array([1, 2, 3], ndmin=2) array([[1, 2, 3]]) Type provided: >>> np.array([1, 2, 3], dtype=complex) array([ 1.+0.j, 2.+0.j, 3.+0.j]) Data-type consisting of more than one element: >>> x = np.array([(1,2),(3,4)],dtype=[('a','>> x['a'] array([1, 3]) Creating an array from sub-classes: >>> np.array(np.mat('1 2; 3 4')) array([[1, 2], [3, 4]]) >>> np.array(np.mat('1 2; 3 4'), subok=True) matrix([[1, 2], [3, 4]]) """ # BUILTIN raise NotImplementedError def array2string(a, max_line_width=None, precision=None, suppress_small=None, separator=' ', prefix='', style=repr): """Return a string representation of an array. Parameters ---------- a : ndarray Input array. max_line_width : int, optional The maximum number of columns the string should span. Newline characters splits the string appropriately after array elements. precision : int, optional Floating point precision. Default is the current printing precision (usually 8), which can be altered using `set_printoptions`. suppress_small : bool, optional Represent very small numbers as zero. A number is "very small" if it is smaller than the current printing precision. separator : str, optional Inserted between elements. prefix : str, optional An array is typically printed as:: 'prefix(' + array2string(a) + ')' The length of the prefix string is used to align the output correctly. style : function, optional A function that accepts an ndarray and returns a string. Used only when the shape of `a` is equal to (). Returns ------- array_str : str String representation of the array. See Also -------- array_str, array_repr, set_printoptions Examples -------- >>> x = np.array([1e-16,1,2,3]) >>> print np.array2string(x, precision=2, separator=',', ... suppress_small=True) [ 0., 1., 2., 3.] """ raise NotImplementedError def array_equal(a1, a2): """True if two arrays have the same shape and elements, False otherwise. Parameters ---------- a1, a2 : array_like Input arrays. Returns ------- b : bool Returns True if the arrays are equal. See Also -------- allclose: Returns True if two arrays are element-wise equal within a tolerance. array_equiv: Returns True if input arrays are shape consistent and all elements equal. Examples -------- >>> np.array_equal([1, 2], [1, 2]) True >>> np.array_equal(np.array([1, 2]), np.array([1, 2])) True >>> np.array_equal([1, 2], [1, 2, 3]) False >>> np.array_equal([1, 2], [1, 4]) False """ raise NotImplementedError def array_equiv(a1, a2): """Returns True if input arrays are shape consistent and all elements equal. Shape consistent means they are either the same shape, or one input array can be broadcasted to create the same shape as the other one. Parameters ---------- a1, a2 : array_like Input arrays. Returns ------- out : bool True if equivalent, False otherwise. Examples -------- >>> np.array_equiv([1, 2], [1, 2]) True >>> np.array_equiv([1, 2], [1, 3]) False Showing the shape equivalence: >>> np.array_equiv([1, 2], [[1, 2], [1, 2]]) True >>> np.array_equiv([1, 2], [[1, 2, 1, 2], [1, 2, 1, 2]]) False >>> np.array_equiv([1, 2], [[1, 2], [1, 3]]) False """ raise NotImplementedError def array_repr(arr, max_line_width=None, precision=None, suppress_small=None): """Return the string representation of an array. Parameters ---------- arr : ndarray Input array. max_line_width : int, optional The maximum number of columns the string should span. Newline characters split the string appropriately after array elements. precision : int, optional Floating point precision. Default is the current printing precision (usually 8), which can be altered using `set_printoptions`. suppress_small : bool, optional Represent very small numbers as zero, default is False. Very small is defined by `precision`, if the precision is 8 then numbers smaller than 5e-9 are represented as zero. Returns ------- string : str The string representation of an array. See Also -------- array_str, array2string, set_printoptions Examples -------- >>> np.array_repr(np.array([1,2])) 'array([1, 2])' >>> np.array_repr(np.ma.array([0.])) 'MaskedArray([ 0.])' >>> np.array_repr(np.array([], np.int32)) 'array([], dtype=int32)' >>> x = np.array([1e-6, 4e-7, 2, 3]) >>> np.array_repr(x, precision=6, suppress_small=True) 'array([ 0.000001, 0. , 2. , 3. ])' """ raise NotImplementedError def array_split(ary, indices_or_sections, axis=0): """Split an array into multiple sub-arrays of equal or near-equal size. Please refer to the ``split`` documentation. The only difference between these functions is that ``array_split`` allows `indices_or_sections` to be an integer that does *not* equally divide the axis. See Also -------- split : Split array into multiple sub-arrays of equal size. Examples -------- >>> x = np.arange(8.0) >>> np.array_split(x, 3) [array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7.])] """ raise NotImplementedError def array_str(a, max_line_width=None, precision=None, suppress_small=None): """Return a string representation of the data in an array. The data in the array is returned as a single string. This function is similar to `array_repr`, the difference being that `array_repr` also returns information on the kind of array and its data type. Parameters ---------- a : ndarray Input array. max_line_width : int, optional Inserts newlines if text is longer than `max_line_width`. The default is, indirectly, 75. precision : int, optional Floating point precision. Default is the current printing precision (usually 8), which can be altered using `set_printoptions`. suppress_small : bool, optional Represent numbers "very close" to zero as zero; default is False. Very close is defined by precision: if the precision is 8, e.g., numbers smaller (in absolute value) than 5e-9 are represented as zero. See Also -------- array2string, array_repr, set_printoptions Examples -------- >>> np.array_str(np.arange(3)) '[0 1 2]' """ raise NotImplementedError def asanyarray(a, dtype=None, order=None): """Convert the input to an ndarray, but pass ndarray subclasses through. Parameters ---------- a : array_like Input data, in any form that can be converted to an array. This includes scalars, lists, lists of tuples, tuples, tuples of tuples, tuples of lists, and ndarrays. dtype : data-type, optional By default, the data-type is inferred from the input data. order : {'C', 'F'}, optional Whether to use row-major ('C') or column-major ('F') memory representation. Defaults to 'C'. Returns ------- out : ndarray or an ndarray subclass Array interpretation of `a`. If `a` is an ndarray or a subclass of ndarray, it is returned as-is and no copy is performed. See Also -------- asarray : Similar function which always returns ndarrays. ascontiguousarray : Convert input to a contiguous array. asfarray : Convert input to a floating point ndarray. asfortranarray : Convert input to an ndarray with column-major memory order. asarray_chkfinite : Similar function which checks input for NaNs and Infs. fromiter : Create an array from an iterator. fromfunction : Construct an array by executing a function on grid positions. Examples -------- Convert a list into an array: >>> a = [1, 2] >>> np.asanyarray(a) array([1, 2]) Instances of `ndarray` subclasses are passed through as-is: >>> a = np.matrix([1, 2]) >>> np.asanyarray(a) is a True """ raise NotImplementedError def asarray_chkfinite(a): """Convert the input to an array, checking for NaNs or Infs. Parameters ---------- a : array_like Input data, in any form that can be converted to an array. This includes lists, lists of tuples, tuples, tuples of tuples, tuples of lists and ndarrays. Success requires no NaNs or Infs. dtype : data-type, optional By default, the data-type is inferred from the input data. order : {'C', 'F'}, optional Whether to use row-major ('C') or column-major ('FORTRAN') memory representation. Defaults to 'C'. Returns ------- out : ndarray Array interpretation of `a`. No copy is performed if the input is already an ndarray. If `a` is a subclass of ndarray, a base class ndarray is returned. Raises ------ ValueError Raises ValueError if `a` contains NaN (Not a Number) or Inf (Infinity). See Also -------- asarray : Create and array. asanyarray : Similar function which passes through subclasses. ascontiguousarray : Convert input to a contiguous array. asfarray : Convert input to a floating point ndarray. asfortranarray : Convert input to an ndarray with column-major memory order. fromiter : Create an array from an iterator. fromfunction : Construct an array by executing a function on grid positions. Examples -------- Convert a list into an array. If all elements are finite ``asarray_chkfinite`` is identical to ``asarray``. >>> a = [1, 2] >>> np.asarray_chkfinite(a) array([1, 2]) Raises ValueError if array_like contains Nans or Infs. >>> a = [1, 2, np.inf] >>> try: ... np.asarray_chkfinite(a) ... except ValueError: ... print 'ValueError' ... ValueError """ raise NotImplementedError def ascontiguousarray(a, dtype=None): """Return a contiguous array in memory (C order). Parameters ---------- a : array_like Input array. dtype : str or dtype object, optional Data-type of returned array. Returns ------- out : ndarray Contiguous array of same shape and content as `a`, with type `dtype` if specified. See Also -------- asfortranarray : Convert input to an ndarray with column-major memory order. require : Return an ndarray that satisfies requirements. ndarray.flags : Information about the memory layout of the array. Examples -------- >>> x = np.arange(6).reshape(2,3) >>> np.ascontiguousarray(x, dtype=np.float32) array([[ 0., 1., 2.], [ 3., 4., 5.]], dtype=float32) >>> x.flags['C_CONTIGUOUS'] True """ raise NotImplementedError def asfarray(a, dtype=np.float64): """Return an array converted to a float type. Parameters ---------- a : array_like The input array. dtype : str or dtype object, optional Float type code to coerce input array `a`. If `dtype` is one of the 'int' dtypes, it is replaced with float64. Returns ------- out : ndarray The input `a` as a float ndarray. Examples -------- >>> np.asfarray([2, 3]) array([ 2., 3.]) >>> np.asfarray([2, 3], dtype='float') array([ 2., 3.]) >>> np.asfarray([2, 3], dtype='int8') array([ 2., 3.]) """ raise NotImplementedError def asfortranarray(a, dtype=None): """Return an array laid out in Fortran order in memory. Parameters ---------- a : array_like Input array. dtype : str or dtype object, optional By default, the data-type is inferred from the input data. Returns ------- out : ndarray The input `a` in Fortran, or column-major, order. See Also -------- ascontiguousarray : Convert input to a contiguous (C order) array. asanyarray : Convert input to an ndarray with either row or column-major memory order. require : Return an ndarray that satisfies requirements. ndarray.flags : Information about the memory layout of the array. Examples -------- >>> x = np.arange(6).reshape(2,3) >>> y = np.asfortranarray(x) >>> x.flags['F_CONTIGUOUS'] False >>> y.flags['F_CONTIGUOUS'] True """ raise NotImplementedError def asmatrix(data, dtype=None): """Interpret the input as a matrix. Unlike `matrix`, `asmatrix` does not make a copy if the input is already a matrix or an ndarray. Equivalent to ``matrix(data, copy=False)``. Parameters ---------- data : array_like Input data. Returns ------- mat : matrix `data` interpreted as a matrix. Examples -------- >>> x = np.array([[1, 2], [3, 4]]) >>> m = np.asmatrix(x) >>> x[0,0] = 5 >>> m matrix([[5, 2], [3, 4]]) """ raise NotImplementedError def asscalar(a): """Convert an array of size 1 to its scalar equivalent. Parameters ---------- a : ndarray Input array of size 1. Returns ------- out : scalar Scalar representation of `a`. The input data type is preserved. Examples -------- >>> np.asscalar(np.array([24])) 24 """ raise NotImplementedError def atleast_1d(): """Convert inputs to arrays with at least one dimension. Scalar inputs are converted to 1-dimensional arrays, whilst higher-dimensional inputs are preserved. Parameters ---------- array1, array2, ... : array_like One or more input arrays. Returns ------- ret : ndarray An array, or sequence of arrays, each with ``a.ndim >= 1``. Copies are made only if necessary. See Also -------- atleast_2d, atleast_3d Examples -------- >>> np.atleast_1d(1.0) array([ 1.]) >>> x = np.arange(9.0).reshape(3,3) >>> np.atleast_1d(x) array([[ 0., 1., 2.], [ 3., 4., 5.], [ 6., 7., 8.]]) >>> np.atleast_1d(x) is x True >>> np.atleast_1d(1, [3, 4]) [array([1]), array([3, 4])] """ raise NotImplementedError def atleast_2d(): """View inputs as arrays with at least two dimensions. Parameters ---------- array1, array2, ... : array_like One or more array-like sequences. Non-array inputs are converted to arrays. Arrays that already have two or more dimensions are preserved. Returns ------- res, res2, ... : ndarray An array, or tuple of arrays, each with ``a.ndim >= 2``. Copies are avoided where possible, and views with two or more dimensions are returned. See Also -------- atleast_1d, atleast_3d Examples -------- >>> np.atleast_2d(3.0) array([[ 3.]]) >>> x = np.arange(3.0) >>> np.atleast_2d(x) array([[ 0., 1., 2.]]) >>> np.atleast_2d(x).base is x True >>> np.atleast_2d(1, [1, 2], [[1, 2]]) [array([[1]]), array([[1, 2]]), array([[1, 2]])] """ raise NotImplementedError def atleast_3d(): """View inputs as arrays with at least three dimensions. Parameters ---------- array1, array2, ... : array_like One or more array-like sequences. Non-array inputs are converted to arrays. Arrays that already have three or more dimensions are preserved. Returns ------- res1, res2, ... : ndarray An array, or tuple of arrays, each with ``a.ndim >= 3``. Copies are avoided where possible, and views with three or more dimensions are returned. For example, a 1-D array of shape ``(N,)`` becomes a view of shape ``(1, N, 1)``, and a 2-D array of shape ``(M, N)`` becomes a view of shape ``(M, N, 1)``. See Also -------- atleast_1d, atleast_2d Examples -------- >>> np.atleast_3d(3.0) array([[[ 3.]]]) >>> x = np.arange(3.0) >>> np.atleast_3d(x).shape (1, 3, 1) >>> x = np.arange(12.0).reshape(4,3) >>> np.atleast_3d(x).shape (4, 3, 1) >>> np.atleast_3d(x).base is x True >>> for arr in np.atleast_3d([1, 2], [[1, 2]], [[[1, 2]]]): ... print arr, arr.shape ... [[[1] [2]]] (1, 2, 1) [[[1] [2]]] (1, 2, 1) [[[1 2]]] (1, 1, 2) """ raise NotImplementedError def average(a, axis=None, weights=None, returned=False): """Compute the weighted average along the specified axis. Parameters ---------- a : array_like Array containing data to be averaged. If `a` is not an array, a conversion is attempted. axis : int, optional Axis along which to average `a`. If `None`, averaging is done over the flattened array. weights : array_like, optional An array of weights associated with the values in `a`. Each value in `a` contributes to the average according to its associated weight. The weights array can either be 1-D (in which case its length must be the size of `a` along the given axis) or of the same shape as `a`. If `weights=None`, then all data in `a` are assumed to have a weight equal to one. returned : bool, optional Default is `False`. If `True`, the tuple (`average`, `sum_of_weights`) is returned, otherwise only the average is returned. If `weights=None`, `sum_of_weights` is equivalent to the number of elements over which the average is taken. Returns ------- average, [sum_of_weights] : {array_type, double} Return the average along the specified axis. When returned is `True`, return a tuple with the average as the first element and the sum of the weights as the second element. The return type is `Float` if `a` is of integer type, otherwise it is of the same type as `a`. `sum_of_weights` is of the same type as `average`. Raises ------ ZeroDivisionError When all weights along axis are zero. See `numpy.ma.average` for a version robust to this type of error. TypeError When the length of 1D `weights` is not the same as the shape of `a` along axis. See Also -------- mean ma.average : average for masked arrays Examples -------- >>> data = range(1,5) >>> data [1, 2, 3, 4] >>> np.average(data) 2.5 >>> np.average(range(1,11), weights=range(10,0,-1)) 4.0 >>> data = np.arange(6).reshape((3,2)) >>> data array([[0, 1], [2, 3], [4, 5]]) >>> np.average(data, axis=1, weights=[1./4, 3./4]) array([ 0.75, 2.75, 4.75]) >>> np.average(data, weights=[1./4, 3./4]) Traceback (most recent call last): ... TypeError: Axis must be specified when shapes of a and weights differ. """ raise NotImplementedError def bartlett(M): """Return the Bartlett window. The Bartlett window is very similar to a triangular window, except that the end points are at zero. It is often used in signal processing for tapering a signal, without generating too much ripple in the frequency domain. Parameters ---------- M : int Number of points in the output window. If zero or less, an empty array is returned. Returns ------- out : array The triangular window, normalized to one (the value one appears only if the number of samples is odd), with the first and last samples equal to zero. See Also -------- blackman, hamming, hanning, kaiser Notes ----- The Bartlett window is defined as .. math:: w(n) = \frac{2}{M-1} \left( \frac{M-1}{2} - \left|n - \frac{M-1}{2}\right| \right) Most references to the Bartlett window come from the signal processing literature, where it is used as one of many windowing functions for smoothing values. Note that convolution with this window produces linear interpolation. It is also known as an apodization (which means"removing the foot", i.e. smoothing discontinuities at the beginning and end of the sampled signal) or tapering function. The fourier transform of the Bartlett is the product of two sinc functions. Note the excellent discussion in Kanasewich. References ---------- .. [1] M.S. Bartlett, "Periodogram Analysis and Continuous Spectra", Biometrika 37, 1-16, 1950. .. [2] E.R. Kanasewich, "Time Sequence Analysis in Geophysics", The University of Alberta Press, 1975, pp. 109-110. .. [3] A.V. Oppenheim and R.W. Schafer, "Discrete-Time Signal Processing", Prentice-Hall, 1999, pp. 468-471. .. [4] Wikipedia, "Window function", http://en.wikipedia.org/wiki/Window_function .. [5] W.H. Press, B.P. Flannery, S.A. Teukolsky, and W.T. Vetterling, "Numerical Recipes", Cambridge University Press, 1986, page 429. Examples -------- >>> np.bartlett(12) array([ 0. , 0.18181818, 0.36363636, 0.54545455, 0.72727273, 0.90909091, 0.90909091, 0.72727273, 0.54545455, 0.36363636, 0.18181818, 0. ]) Plot the window and its frequency response (requires SciPy and matplotlib): >>> from numpy import clip, log10, array, bartlett, linspace >>> from numpy.fft import fft, fftshift >>> import matplotlib.pyplot as plt >>> window = bartlett(51) >>> plt.plot(window) [] >>> plt.title("Bartlett window") >>> plt.ylabel("Amplitude") >>> plt.xlabel("Sample") >>> plt.show() >>> plt.figure() >>> A = fft(window, 2048) / 25.5 >>> mag = abs(fftshift(A)) >>> freq = linspace(-0.5,0.5,len(A)) >>> response = 20*log10(mag) >>> response = clip(response,-100,100) >>> plt.plot(freq, response) [] >>> plt.title("Frequency response of Bartlett window") >>> plt.ylabel("Magnitude [dB]") >>> plt.xlabel("Normalized frequency [cycles per sample]") >>> plt.axis('tight') (-0.5, 0.5, -100.0, ...) >>> plt.show() """ raise NotImplementedError def base_repr(number, base=2, padding=0): """Return a string representation of a number in the given base system. Parameters ---------- number : int The value to convert. Only positive values are handled. base : int, optional Convert `number` to the `base` number system. The valid range is 2-36, the default value is 2. padding : int, optional Number of zeros padded on the left. Default is 0 (no padding). Returns ------- out : str String representation of `number` in `base` system. See Also -------- binary_repr : Faster version of `base_repr` for base 2. Examples -------- >>> np.base_repr(5) '101' >>> np.base_repr(6, 5) '11' >>> np.base_repr(7, base=5, padding=3) '00012' >>> np.base_repr(10, base=16) 'A' >>> np.base_repr(32, base=16) '20' """ raise NotImplementedError def binary_repr(num, width=None): """Return the binary representation of the input number as a string. For negative numbers, if width is not given, a minus sign is added to the front. If width is given, the two's complement of the number is returned, with respect to that width. In a two's-complement system negative numbers are represented by the two's complement of the absolute value. This is the most common method of representing signed integers on computers [1]_. A N-bit two's-complement system can represent every integer in the range :math:`-2^{N-1}` to :math:`+2^{N-1}-1`. Parameters ---------- num : int Only an integer decimal number can be used. width : int, optional The length of the returned string if `num` is positive, the length of the two's complement if `num` is negative. Returns ------- bin : str Binary representation of `num` or two's complement of `num`. See Also -------- base_repr: Return a string representation of a number in the given base system. Notes ----- `binary_repr` is equivalent to using `base_repr` with base 2, but about 25x faster. References ---------- .. [1] Wikipedia, "Two's complement", http://en.wikipedia.org/wiki/Two's_complement Examples -------- >>> np.binary_repr(3) '11' >>> np.binary_repr(-3) '-11' >>> np.binary_repr(3, width=4) '0011' The two's complement is returned when the input number is negative and width is specified: >>> np.binary_repr(-3, width=4) '1101' """ raise NotImplementedError def bincount(x, weights=None, minlength=None): """bincount(x, weights=None, minlength=None) Count number of occurrences of each value in array of non-negative ints. The number of bins (of size 1) is one larger than the largest value in `x`. If `minlength` is specified, there will be at least this number of bins in the output array (though it will be longer if necessary, depending on the contents of `x`). Each bin gives the number of occurrences of its index value in `x`. If `weights` is specified the input array is weighted by it, i.e. if a value ``n`` is found at position ``i``, ``out[n] += weight[i]`` instead of ``out[n] += 1``. Parameters ---------- x : array_like, 1 dimension, nonnegative ints Input array. weights : array_like, optional Weights, array of the same shape as `x`. minlength : int, optional .. versionadded:: 1.6.0 A minimum number of bins for the output array. Returns ------- out : ndarray of ints The result of binning the input array. The length of `out` is equal to ``np.amax(x)+1``. Raises ------ ValueError If the input is not 1-dimensional, or contains elements with negative values, or if `minlength` is non-positive. TypeError If the type of the input is float or complex. See Also -------- histogram, digitize, unique Examples -------- >>> np.bincount(np.arange(5)) array([1, 1, 1, 1, 1]) >>> np.bincount(np.array([0, 1, 1, 3, 2, 1, 7])) array([1, 3, 1, 1, 0, 0, 0, 1]) >>> x = np.array([0, 1, 1, 3, 2, 1, 7, 23]) >>> np.bincount(x).size == np.amax(x)+1 True The input array needs to be of integer dtype, otherwise a TypeError is raised: >>> np.bincount(np.arange(5, dtype=np.float)) Traceback (most recent call last): File "", line 1, in TypeError: array cannot be safely cast to required type A possible use of ``bincount`` is to perform sums over variable-size chunks of an array, using the ``weights`` keyword. >>> w = np.array([0.3, 0.5, 0.2, 0.7, 1., -0.6]) # weights >>> x = np.array([0, 1, 1, 2, 2, 2]) >>> np.bincount(x, weights=w) array([ 0.3, 0.7, 1.1]) """ # BUILTIN raise NotImplementedError def blackman(M): """Return the Blackman window. The Blackman window is a taper formed by using the the first three terms of a summation of cosines. It was designed to have close to the minimal leakage possible. It is close to optimal, only slightly worse than a Kaiser window. Parameters ---------- M : int Number of points in the output window. If zero or less, an empty array is returned. Returns ------- out : ndarray The window, normalized to one (the value one appears only if the number of samples is odd). See Also -------- bartlett, hamming, hanning, kaiser Notes ----- The Blackman window is defined as .. math:: w(n) = 0.42 - 0.5 \cos(2\pi n/M) + 0.08 \cos(4\pi n/M) Most references to the Blackman window come from the signal processing literature, where it is used as one of many windowing functions for smoothing values. It is also known as an apodization (which means "removing the foot", i.e. smoothing discontinuities at the beginning and end of the sampled signal) or tapering function. It is known as a "near optimal" tapering function, almost as good (by some measures) as the kaiser window. References ---------- Blackman, R.B. and Tukey, J.W., (1958) The measurement of power spectra, Dover Publications, New York. Oppenheim, A.V., and R.W. Schafer. Discrete-Time Signal Processing. Upper Saddle River, NJ: Prentice-Hall, 1999, pp. 468-471. Examples -------- >>> from numpy import blackman >>> blackman(12) array([ -1.38777878e-17, 3.26064346e-02, 1.59903635e-01, 4.14397981e-01, 7.36045180e-01, 9.67046769e-01, 9.67046769e-01, 7.36045180e-01, 4.14397981e-01, 1.59903635e-01, 3.26064346e-02, -1.38777878e-17]) Plot the window and the frequency response: >>> from numpy import clip, log10, array, blackman, linspace >>> from numpy.fft import fft, fftshift >>> import matplotlib.pyplot as plt >>> window = blackman(51) >>> plt.plot(window) [] >>> plt.title("Blackman window") >>> plt.ylabel("Amplitude") >>> plt.xlabel("Sample") >>> plt.show() >>> plt.figure() >>> A = fft(window, 2048) / 25.5 >>> mag = abs(fftshift(A)) >>> freq = linspace(-0.5,0.5,len(A)) >>> response = 20*log10(mag) >>> response = clip(response,-100,100) >>> plt.plot(freq, response) [] >>> plt.title("Frequency response of Blackman window") >>> plt.ylabel("Magnitude [dB]") >>> plt.xlabel("Normalized frequency [cycles per sample]") >>> plt.axis('tight') (-0.5, 0.5, -100.0, ...) >>> plt.show() """ raise NotImplementedError def bmat(obj, ldict=None, gdict=None): """Build a matrix object from a string, nested sequence, or array. Parameters ---------- obj : str or array_like Input data. Names of variables in the current scope may be referenced, even if `obj` is a string. Returns ------- out : matrix Returns a matrix object, which is a specialized 2-D array. See Also -------- matrix Examples -------- >>> A = np.mat('1 1; 1 1') >>> B = np.mat('2 2; 2 2') >>> C = np.mat('3 4; 5 6') >>> D = np.mat('7 8; 9 0') All the following expressions construct the same block matrix: >>> np.bmat([[A, B], [C, D]]) matrix([[1, 1, 2, 2], [1, 1, 2, 2], [3, 4, 7, 8], [5, 6, 9, 0]]) >>> np.bmat(np.r_[np.c_[A, B], np.c_[C, D]]) matrix([[1, 1, 2, 2], [1, 1, 2, 2], [3, 4, 7, 8], [5, 6, 9, 0]]) >>> np.bmat('A,B; C,D') matrix([[1, 1, 2, 2], [1, 1, 2, 2], [3, 4, 7, 8], [5, 6, 9, 0]]) """ raise NotImplementedError def broadcast_arrays(): """Broadcast any number of arrays against each other. Parameters ---------- `*args` : array_likes The arrays to broadcast. Returns ------- broadcasted : list of arrays These arrays are views on the original arrays. They are typically not contiguous. Furthermore, more than one element of a broadcasted array may refer to a single memory location. If you need to write to the arrays, make copies first. Examples -------- >>> x = np.array([[1,2,3]]) >>> y = np.array([[1],[2],[3]]) >>> np.broadcast_arrays(x, y) [array([[1, 2, 3], [1, 2, 3], [1, 2, 3]]), array([[1, 1, 1], [2, 2, 2], [3, 3, 3]])] Here is a useful idiom for getting contiguous copies instead of non-contiguous views. >>> map(np.array, np.broadcast_arrays(x, y)) [array([[1, 2, 3], [1, 2, 3], [1, 2, 3]]), array([[1, 1, 1], [2, 2, 2], [3, 3, 3]])] """ raise NotImplementedError def byte_bounds(a): """Returns pointers to the end-points of an array. Parameters ---------- a : ndarray Input array. It must conform to the Python-side of the array interface. Returns ------- (low, high) : tuple of 2 integers The first integer is the first byte of the array, the second integer is just past the last byte of the array. If `a` is not contiguous it will not use every byte between the (`low`, `high`) values. Examples -------- >>> I = np.eye(2, dtype='f'); I.dtype dtype('float32') >>> low, high = np.byte_bounds(I) >>> high - low == I.size*I.itemsize True >>> I = np.eye(2, dtype='G'); I.dtype dtype('complex192') >>> low, high = np.byte_bounds(I) >>> high - low == I.size*I.itemsize True """ raise NotImplementedError def can_cast(): """can_cast(from, totype, casting = 'safe') Returns True if cast between data types can occur according to the casting rule. If from is a scalar or array scalar, also returns True if the scalar value can be cast without overflow or truncation to an integer. Parameters ---------- from : dtype, dtype specifier, scalar, or array Data type, scalar, or array to cast from. totype : dtype or dtype specifier Data type to cast to. casting : {'no', 'equiv', 'safe', 'same_kind', 'unsafe'}, optional Controls what kind of data casting may occur. * 'no' means the data types should not be cast at all. * 'equiv' means only byte-order changes are allowed. * 'safe' means only casts which can preserve values are allowed. * 'same_kind' means only safe casts or casts within a kind, like float64 to float32, are allowed. * 'unsafe' means any data conversions may be done. Returns ------- out : bool True if cast can occur according to the casting rule. See also -------- dtype, result_type Examples -------- Basic examples >>> np.can_cast(np.int32, np.int64) True >>> np.can_cast(np.float64, np.complex) True >>> np.can_cast(np.complex, np.float) False >>> np.can_cast('i8', 'f8') True >>> np.can_cast('i8', 'f4') False >>> np.can_cast('i4', 'S4') True Casting scalars >>> np.can_cast(100, 'i1') True >>> np.can_cast(150, 'i1') False >>> np.can_cast(150, 'u1') True >>> np.can_cast(3.5e100, np.float32) False >>> np.can_cast(1000.0, np.float32) True Array scalar checks the value, array does not >>> np.can_cast(np.array(1000.0), np.float32) True >>> np.can_cast(np.array([1000.0]), np.float32) False Using the casting rules >>> np.can_cast('i8', 'i8', 'no') True >>> np.can_cast('i8', 'no') False >>> np.can_cast('i8', 'equiv') True >>> np.can_cast('i8', 'equiv') False >>> np.can_cast('i8', 'safe') True >>> np.can_cast('i4', 'safe') False >>> np.can_cast('i4', 'same_kind') True >>> np.can_cast('u4', 'same_kind') False >>> np.can_cast('u4', 'unsafe') True """ # BUILTIN raise NotImplementedError def choose(a, choices, out=None, mode='raise'): """Construct an array from an index array and a set of arrays to choose from. First of all, if confused or uncertain, definitely look at the Examples - in its full generality, this function is less simple than it might seem from the following code description (below ndi = `numpy.lib.index_tricks`): ``np.choose(a,c) == np.array([c[a[I]][I] for I in ndi.ndindex(a.shape)])``. But this omits some subtleties. Here is a fully general summary: Given an "index" array (`a`) of integers and a sequence of `n` arrays (`choices`), `a` and each choice array are first broadcast, as necessary, to arrays of a common shape; calling these *Ba* and *Bchoices[i], i = 0,...,n-1* we have that, necessarily, ``Ba.shape == Bchoices[i].shape`` for each `i`. Then, a new array with shape ``Ba.shape`` is created as follows: * if ``mode=raise`` (the default), then, first of all, each element of `a` (and thus `Ba`) must be in the range `[0, n-1]`; now, suppose that `i` (in that range) is the value at the `(j0, j1, ..., jm)` position in `Ba` - then the value at the same position in the new array is the value in `Bchoices[i]` at that same position; * if ``mode=wrap``, values in `a` (and thus `Ba`) may be any (signed) integer; modular arithmetic is used to map integers outside the range `[0, n-1]` back into that range; and then the new array is constructed as above; * if ``mode=clip``, values in `a` (and thus `Ba`) may be any (signed) integer; negative integers are mapped to 0; values greater than `n-1` are mapped to `n-1`; and then the new array is constructed as above. Parameters ---------- a : int array This array must contain integers in `[0, n-1]`, where `n` is the number of choices, unless ``mode=wrap`` or ``mode=clip``, in which cases any integers are permissible. choices : sequence of arrays Choice arrays. `a` and all of the choices must be broadcastable to the same shape. If `choices` is itself an array (not recommended), then its outermost dimension (i.e., the one corresponding to ``choices.shape[0]``) is taken as defining the "sequence". out : array, optional If provided, the result will be inserted into this array. It should be of the appropriate shape and dtype. mode : {'raise' (default), 'wrap', 'clip'}, optional Specifies how indices outside `[0, n-1]` will be treated: * 'raise' : an exception is raised * 'wrap' : value becomes value mod `n` * 'clip' : values < 0 are mapped to 0, values > n-1 are mapped to n-1 Returns ------- merged_array : array The merged result. Raises ------ ValueError: shape mismatch If `a` and each choice array are not all broadcastable to the same shape. See Also -------- ndarray.choose : equivalent method Notes ----- To reduce the chance of misinterpretation, even though the following "abuse" is nominally supported, `choices` should neither be, nor be thought of as, a single array, i.e., the outermost sequence-like container should be either a list or a tuple. Examples -------- >>> choices = [[0, 1, 2, 3], [10, 11, 12, 13], ... [20, 21, 22, 23], [30, 31, 32, 33]] >>> np.choose([2, 3, 1, 0], choices ... # the first element of the result will be the first element of the ... # third (2+1) "array" in choices, namely, 20; the second element ... # will be the second element of the fourth (3+1) choice array, i.e., ... # 31, etc. ... ) array([20, 31, 12, 3]) >>> np.choose([2, 4, 1, 0], choices, mode='clip') # 4 goes to 3 (4-1) array([20, 31, 12, 3]) >>> # because there are 4 choice arrays >>> np.choose([2, 4, 1, 0], choices, mode='wrap') # 4 goes to (4 mod 4) array([20, 1, 12, 3]) >>> # i.e., 0 A couple examples illustrating how choose broadcasts: >>> a = [[1, 0, 1], [0, 1, 0], [1, 0, 1]] >>> choices = [-10, 10] >>> np.choose(a, choices) array([[ 10, -10, 10], [-10, 10, -10], [ 10, -10, 10]]) >>> # With thanks to Anne Archibald >>> a = np.array([0, 1]).reshape((2,1,1)) >>> c1 = np.array([1, 2, 3]).reshape((1,3,1)) >>> c2 = np.array([-1, -2, -3, -4, -5]).reshape((1,1,5)) >>> np.choose(a, (c1, c2)) # result is 2x3x5, res[0,:,:]=c1, res[1,:,:]=c2 array([[[ 1, 1, 1, 1, 1], [ 2, 2, 2, 2, 2], [ 3, 3, 3, 3, 3]], [[-1, -2, -3, -4, -5], [-1, -2, -3, -4, -5], [-1, -2, -3, -4, -5]]]) """ raise NotImplementedError def column_stack(tup): """Stack 1-D arrays as columns into a 2-D array. Take a sequence of 1-D arrays and stack them as columns to make a single 2-D array. 2-D arrays are stacked as-is, just like with `hstack`. 1-D arrays are turned into 2-D columns first. Parameters ---------- tup : sequence of 1-D or 2-D arrays. Arrays to stack. All of them must have the same first dimension. Returns ------- stacked : 2-D array The array formed by stacking the given arrays. See Also -------- hstack, vstack, concatenate Notes ----- This function is equivalent to ``np.vstack(tup).T``. Examples -------- >>> a = np.array((1,2,3)) >>> b = np.array((2,3,4)) >>> np.column_stack((a,b)) array([[1, 2], [2, 3], [3, 4]]) """ raise NotImplementedError def common_type(): """Return a scalar type which is common to the input arrays. The return type will always be an inexact (i.e. floating point) scalar type, even if all the arrays are integer arrays. If one of the inputs is an integer array, the minimum precision type that is returned is a 64-bit floating point dtype. All input arrays can be safely cast to the returned dtype without loss of information. Parameters ---------- array1, array2, ... : ndarrays Input arrays. Returns ------- out : data type code Data type code. See Also -------- dtype, mintypecode Examples -------- >>> np.common_type(np.arange(2, dtype=np.float32)) >>> np.common_type(np.arange(2, dtype=np.float32), np.arange(2)) >>> np.common_type(np.arange(4), np.array([45, 6.j]), np.array([45.0])) """ raise NotImplementedError def compare_chararrays(): """ """ # BUILTIN raise NotImplementedError def compress(condition, a, axis=None, out=None): """Return selected slices of an array along given axis. When working along a given axis, a slice along that axis is returned in `output` for each index where `condition` evaluates to True. When working on a 1-D array, `compress` is equivalent to `extract`. Parameters ---------- condition : 1-D array of bools Array that selects which entries to return. If len(condition) is less than the size of `a` along the given axis, then output is truncated to the length of the condition array. a : array_like Array from which to extract a part. axis : int, optional Axis along which to take slices. If None (default), work on the flattened array. out : ndarray, optional Output array. Its type is preserved and it must be of the right shape to hold the output. Returns ------- compressed_array : ndarray A copy of `a` without the slices along axis for which `condition` is false. See Also -------- take, choose, diag, diagonal, select ndarray.compress : Equivalent method. numpy.doc.ufuncs : Section "Output arguments" Examples -------- >>> a = np.array([[1, 2], [3, 4], [5, 6]]) >>> a array([[1, 2], [3, 4], [5, 6]]) >>> np.compress([0, 1], a, axis=0) array([[3, 4]]) >>> np.compress([False, True, True], a, axis=0) array([[3, 4], [5, 6]]) >>> np.compress([False, True], a, axis=1) array([[2], [4], [6]]) Working on the flattened array does not return slices along an axis but selects elements. >>> np.compress([False, True], a) array([2]) """ raise NotImplementedError def concatenate(): """concatenate((a1, a2, ...), axis=0) Join a sequence of arrays together. Parameters ---------- a1, a2, ... : sequence of array_like The arrays must have the same shape, except in the dimension corresponding to `axis` (the first, by default). axis : int, optional The axis along which the arrays will be joined. Default is 0. Returns ------- res : ndarray The concatenated array. See Also -------- ma.concatenate : Concatenate function that preserves input masks. array_split : Split an array into multiple sub-arrays of equal or near-equal size. split : Split array into a list of multiple sub-arrays of equal size. hsplit : Split array into multiple sub-arrays horizontally (column wise) vsplit : Split array into multiple sub-arrays vertically (row wise) dsplit : Split array into multiple sub-arrays along the 3rd axis (depth). hstack : Stack arrays in sequence horizontally (column wise) vstack : Stack arrays in sequence vertically (row wise) dstack : Stack arrays in sequence depth wise (along third dimension) Notes ----- When one or more of the arrays to be concatenated is a MaskedArray, this function will return a MaskedArray object instead of an ndarray, but the input masks are *not* preserved. In cases where a MaskedArray is expected as input, use the ma.concatenate function from the masked array module instead. Examples -------- >>> a = np.array([[1, 2], [3, 4]]) >>> b = np.array([[5, 6]]) >>> np.concatenate((a, b), axis=0) array([[1, 2], [3, 4], [5, 6]]) >>> np.concatenate((a, b.T), axis=1) array([[1, 2, 5], [3, 4, 6]]) This function will not preserve masking of MaskedArray inputs. >>> a = np.ma.arange(3) >>> a[1] = np.ma.masked >>> b = np.arange(2, 5) >>> a masked_array(data = [0 -- 2], mask = [False True False], fill_value = 999999) >>> b array([2, 3, 4]) >>> np.concatenate([a, b]) masked_array(data = [0 1 2 2 3 4], mask = False, fill_value = 999999) >>> np.ma.concatenate([a, b]) masked_array(data = [0 -- 2 2 3 4], mask = [False True False False False False], fill_value = 999999) """ # BUILTIN raise NotImplementedError def convolve(a, v, mode='full'): """Returns the discrete, linear convolution of two one-dimensional sequences. The convolution operator is often seen in signal processing, where it models the effect of a linear time-invariant system on a signal [1]_. In probability theory, the sum of two independent random variables is distributed according to the convolution of their individual distributions. Parameters ---------- a : (N,) array_like First one-dimensional input array. v : (M,) array_like Second one-dimensional input array. mode : {'full', 'valid', 'same'}, optional 'full': By default, mode is 'full'. This returns the convolution at each point of overlap, with an output shape of (N+M-1,). At the end-points of the convolution, the signals do not overlap completely, and boundary effects may be seen. 'same': Mode `same` returns output of length ``max(M, N)``. Boundary effects are still visible. 'valid': Mode `valid` returns output of length ``max(M, N) - min(M, N) + 1``. The convolution product is only given for points where the signals overlap completely. Values outside the signal boundary have no effect. Returns ------- out : ndarray Discrete, linear convolution of `a` and `v`. See Also -------- scipy.signal.fftconvolve : Convolve two arrays using the Fast Fourier Transform. scipy.linalg.toeplitz : Used to construct the convolution operator. Notes ----- The discrete convolution operation is defined as .. math:: (f * g)[n] = \sum_{m = -\infty}^{\infty} f[m] g[n - m] It can be shown that a convolution :math:`x(t) * y(t)` in time/space is equivalent to the multiplication :math:`X(f) Y(f)` in the Fourier domain, after appropriate padding (padding is necessary to prevent circular convolution). Since multiplication is more efficient (faster) than convolution, the function `scipy.signal.fftconvolve` exploits the FFT to calculate the convolution of large data-sets. References ---------- .. [1] Wikipedia, "Convolution", http://en.wikipedia.org/wiki/Convolution. Examples -------- Note how the convolution operator flips the second array before "sliding" the two across one another: >>> np.convolve([1, 2, 3], [0, 1, 0.5]) array([ 0. , 1. , 2.5, 4. , 1.5]) Only return the middle values of the convolution. Contains boundary effects, where zeros are taken into account: >>> np.convolve([1,2,3],[0,1,0.5], 'same') array([ 1. , 2.5, 4. ]) The two arrays are of the same length, so there is only one position where they completely overlap: >>> np.convolve([1,2,3],[0,1,0.5], 'valid') array([ 2.5]) """ raise NotImplementedError def copy(a): """Return an array copy of the given object. Parameters ---------- a : array_like Input data. Returns ------- arr : ndarray Array interpretation of `a`. Notes ----- This is equivalent to >>> np.array(a, copy=True) #doctest: +SKIP Examples -------- Create an array x, with a reference y and a copy z: >>> x = np.array([1, 2, 3]) >>> y = x >>> z = np.copy(x) Note that, when we modify x, y changes, but not z: >>> x[0] = 10 >>> x[0] == y[0] True >>> x[0] == z[0] False """ raise NotImplementedError def corrcoef(x, y=None, rowvar=1, bias=0, ddof=None): """Return correlation coefficients. Please refer to the documentation for `cov` for more detail. The relationship between the correlation coefficient matrix, `P`, and the covariance matrix, `C`, is .. math:: P_{ij} = \frac{ C_{ij} } { \sqrt{ C_{ii} * C_{jj} } } The values of `P` are between -1 and 1, inclusive. Parameters ---------- x : array_like A 1-D or 2-D array containing multiple variables and observations. Each row of `m` represents a variable, and each column a single observation of all those variables. Also see `rowvar` below. y : array_like, optional An additional set of variables and observations. `y` has the same shape as `m`. rowvar : int, optional If `rowvar` is non-zero (default), then each row represents a variable, with observations in the columns. Otherwise, the relationship is transposed: each column represents a variable, while the rows contain observations. bias : int, optional Default normalization is by ``(N - 1)``, where ``N`` is the number of observations (unbiased estimate). If `bias` is 1, then normalization is by ``N``. These values can be overridden by using the keyword ``ddof`` in numpy versions >= 1.5. ddof : {None, int}, optional .. versionadded:: 1.5 If not ``None`` normalization is by ``(N - ddof)``, where ``N`` is the number of observations; this overrides the value implied by ``bias``. The default value is ``None``. Returns ------- out : ndarray The correlation coefficient matrix of the variables. See Also -------- cov : Covariance matrix """ raise NotImplementedError def correlate(a, v, mode='valid', old_behavior=False): """Cross-correlation of two 1-dimensional sequences. This function computes the correlation as generally defined in signal processing texts:: z[k] = sum_n a[n] * conj(v[n+k]) with a and v sequences being zero-padded where necessary and conj being the conjugate. Parameters ---------- a, v : array_like Input sequences. mode : {'valid', 'same', 'full'}, optional Refer to the `convolve` docstring. Note that the default is `valid`, unlike `convolve`, which uses `full`. old_behavior : bool If True, uses the old behavior from Numeric, (correlate(a,v) == correlate(v, a), and the conjugate is not taken for complex arrays). If False, uses the conventional signal processing definition (see note). See Also -------- convolve : Discrete, linear convolution of two one-dimensional sequences. Examples -------- >>> np.correlate([1, 2, 3], [0, 1, 0.5]) array([ 3.5]) >>> np.correlate([1, 2, 3], [0, 1, 0.5], "same") array([ 2. , 3.5, 3. ]) >>> np.correlate([1, 2, 3], [0, 1, 0.5], "full") array([ 0.5, 2. , 3.5, 3. , 0. ]) """ raise NotImplementedError def count_nonzero(a): """count_nonzero(a) Counts the number of non-zero values in the array ``a``. Parameters ---------- a : array_like The array for which to count non-zeros. Returns ------- count : int Number of non-zero values in the array. See Also -------- nonzero : Return the coordinates of all the non-zero values. Examples -------- >>> np.count_nonzero(np.eye(4)) 4 >>> np.count_nonzero([[0,1,7,0,0],[3,0,0,2,19]]) 5 """ # BUILTIN raise NotImplementedError def cov(m, y=None, rowvar=1, bias=0, ddof=None): """Estimate a covariance matrix, given data. Covariance indicates the level to which two variables vary together. If we examine N-dimensional samples, :math:`X = [x_1, x_2, ... x_N]^T`, then the covariance matrix element :math:`C_{ij}` is the covariance of :math:`x_i` and :math:`x_j`. The element :math:`C_{ii}` is the variance of :math:`x_i`. Parameters ---------- m : array_like A 1-D or 2-D array containing multiple variables and observations. Each row of `m` represents a variable, and each column a single observation of all those variables. Also see `rowvar` below. y : array_like, optional An additional set of variables and observations. `y` has the same form as that of `m`. rowvar : int, optional If `rowvar` is non-zero (default), then each row represents a variable, with observations in the columns. Otherwise, the relationship is transposed: each column represents a variable, while the rows contain observations. bias : int, optional Default normalization is by ``(N - 1)``, where ``N`` is the number of observations given (unbiased estimate). If `bias` is 1, then normalization is by ``N``. These values can be overridden by using the keyword ``ddof`` in numpy versions >= 1.5. ddof : int, optional .. versionadded:: 1.5 If not ``None`` normalization is by ``(N - ddof)``, where ``N`` is the number of observations; this overrides the value implied by ``bias``. The default value is ``None``. Returns ------- out : ndarray The covariance matrix of the variables. See Also -------- corrcoef : Normalized covariance matrix Examples -------- Consider two variables, :math:`x_0` and :math:`x_1`, which correlate perfectly, but in opposite directions: >>> x = np.array([[0, 2], [1, 1], [2, 0]]).T >>> x array([[0, 1, 2], [2, 1, 0]]) Note how :math:`x_0` increases while :math:`x_1` decreases. The covariance matrix shows this clearly: >>> np.cov(x) array([[ 1., -1.], [-1., 1.]]) Note that element :math:`C_{0,1}`, which shows the correlation between :math:`x_0` and :math:`x_1`, is negative. Further, note how `x` and `y` are combined: >>> x = [-2.1, -1, 4.3] >>> y = [3, 1.1, 0.12] >>> X = np.vstack((x,y)) >>> print np.cov(X) [[ 11.71 -4.286 ] [ -4.286 2.14413333]] >>> print np.cov(x, y) [[ 11.71 -4.286 ] [ -4.286 2.14413333]] >>> print np.cov(x) 11.71 """ raise NotImplementedError def cross(a, b, axisa=-1, axisb=-1, axisc=-1, axis=None): """Return the cross product of two (arrays of) vectors. The cross product of `a` and `b` in :math:`R^3` is a vector perpendicular to both `a` and `b`. If `a` and `b` are arrays of vectors, the vectors are defined by the last axis of `a` and `b` by default, and these axes can have dimensions 2 or 3. Where the dimension of either `a` or `b` is 2, the third component of the input vector is assumed to be zero and the cross product calculated accordingly. In cases where both input vectors have dimension 2, the z-component of the cross product is returned. Parameters ---------- a : array_like Components of the first vector(s). b : array_like Components of the second vector(s). axisa : int, optional Axis of `a` that defines the vector(s). By default, the last axis. axisb : int, optional Axis of `b` that defines the vector(s). By default, the last axis. axisc : int, optional Axis of `c` containing the cross product vector(s). By default, the last axis. axis : int, optional If defined, the axis of `a`, `b` and `c` that defines the vector(s) and cross product(s). Overrides `axisa`, `axisb` and `axisc`. Returns ------- c : ndarray Vector cross product(s). Raises ------ ValueError When the dimension of the vector(s) in `a` and/or `b` does not equal 2 or 3. See Also -------- inner : Inner product outer : Outer product. ix_ : Construct index arrays. Examples -------- Vector cross-product. >>> x = [1, 2, 3] >>> y = [4, 5, 6] >>> np.cross(x, y) array([-3, 6, -3]) One vector with dimension 2. >>> x = [1, 2] >>> y = [4, 5, 6] >>> np.cross(x, y) array([12, -6, -3]) Equivalently: >>> x = [1, 2, 0] >>> y = [4, 5, 6] >>> np.cross(x, y) array([12, -6, -3]) Both vectors with dimension 2. >>> x = [1,2] >>> y = [4,5] >>> np.cross(x, y) -3 Multiple vector cross-products. Note that the direction of the cross product vector is defined by the `right-hand rule`. >>> x = np.array([[1,2,3], [4,5,6]]) >>> y = np.array([[4,5,6], [1,2,3]]) >>> np.cross(x, y) array([[-3, 6, -3], [ 3, -6, 3]]) The orientation of `c` can be changed using the `axisc` keyword. >>> np.cross(x, y, axisc=0) array([[-3, 3], [ 6, -6], [-3, 3]]) Change the vector definition of `x` and `y` using `axisa` and `axisb`. >>> x = np.array([[1,2,3], [4,5,6], [7, 8, 9]]) >>> y = np.array([[7, 8, 9], [4,5,6], [1,2,3]]) >>> np.cross(x, y) array([[ -6, 12, -6], [ 0, 0, 0], [ 6, -12, 6]]) >>> np.cross(x, y, axisa=0, axisb=0) array([[-24, 48, -24], [-30, 60, -30], [-36, 72, -36]]) """ raise NotImplementedError def cumprod(a, axis=None, dtype=None, out=None): """Return the cumulative product of elements along a given axis. Parameters ---------- a : array_like Input array. axis : int, optional Axis along which the cumulative product is computed. By default the input is flattened. dtype : dtype, optional Type of the returned array, as well as of the accumulator in which the elements are multiplied. If *dtype* is not specified, it defaults to the dtype of `a`, unless `a` has an integer dtype with a precision less than that of the default platform integer. In that case, the default platform integer is used instead. out : ndarray, optional Alternative output array in which to place the result. It must have the same shape and buffer length as the expected output but the type of the resulting values will be cast if necessary. Returns ------- cumprod : ndarray A new array holding the result is returned unless `out` is specified, in which case a reference to out is returned. See Also -------- numpy.doc.ufuncs : Section "Output arguments" Notes ----- Arithmetic is modular when using integer types, and no error is raised on overflow. Examples -------- >>> a = np.array([1,2,3]) >>> np.cumprod(a) # intermediate results 1, 1*2 ... # total product 1*2*3 = 6 array([1, 2, 6]) >>> a = np.array([[1, 2, 3], [4, 5, 6]]) >>> np.cumprod(a, dtype=float) # specify type of output array([ 1., 2., 6., 24., 120., 720.]) The cumulative product for each column (i.e., over the rows) of `a`: >>> np.cumprod(a, axis=0) array([[ 1, 2, 3], [ 4, 10, 18]]) The cumulative product for each row (i.e. over the columns) of `a`: >>> np.cumprod(a,axis=1) array([[ 1, 2, 6], [ 4, 20, 120]]) """ raise NotImplementedError def cumproduct(a, axis=None, dtype=None, out=None): """Return the cumulative product over the given axis. See Also -------- cumprod : equivalent function; see for details. """ raise NotImplementedError def cumsum(a, axis=None, dtype=None, out=None): """Return the cumulative sum of the elements along a given axis. Parameters ---------- a : array_like Input array. axis : int, optional Axis along which the cumulative sum is computed. The default (None) is to compute the cumsum over the flattened array. dtype : dtype, optional Type of the returned array and of the accumulator in which the elements are summed. If `dtype` is not specified, it defaults to the dtype of `a`, unless `a` has an integer dtype with a precision less than that of the default platform integer. In that case, the default platform integer is used. out : ndarray, optional Alternative output array in which to place the result. It must have the same shape and buffer length as the expected output but the type will be cast if necessary. See `doc.ufuncs` (Section "Output arguments") for more details. Returns ------- cumsum_along_axis : ndarray. A new array holding the result is returned unless `out` is specified, in which case a reference to `out` is returned. The result has the same size as `a`, and the same shape as `a` if `axis` is not None or `a` is a 1-d array. See Also -------- sum : Sum array elements. trapz : Integration of array values using the composite trapezoidal rule. Notes ----- Arithmetic is modular when using integer types, and no error is raised on overflow. Examples -------- >>> a = np.array([[1,2,3], [4,5,6]]) >>> a array([[1, 2, 3], [4, 5, 6]]) >>> np.cumsum(a) array([ 1, 3, 6, 10, 15, 21]) >>> np.cumsum(a, dtype=float) # specifies type of output value(s) array([ 1., 3., 6., 10., 15., 21.]) >>> np.cumsum(a,axis=0) # sum over rows for each of the 3 columns array([[1, 2, 3], [5, 7, 9]]) >>> np.cumsum(a,axis=1) # sum over columns for each of the 2 rows array([[ 1, 3, 6], [ 4, 9, 15]]) """ raise NotImplementedError def datetime_data(dtype): """Return (unit, numerator, denominator, events) from a datetime dtype """ raise NotImplementedError def delete(arr, obj, axis=None): """Return a new array with sub-arrays along an axis deleted. Parameters ---------- arr : array_like Input array. obj : slice, int or array of ints Indicate which sub-arrays to remove. axis : int, optional The axis along which to delete the subarray defined by `obj`. If `axis` is None, `obj` is applied to the flattened array. Returns ------- out : ndarray A copy of `arr` with the elements specified by `obj` removed. Note that `delete` does not occur in-place. If `axis` is None, `out` is a flattened array. See Also -------- insert : Insert elements into an array. append : Append elements at the end of an array. Examples -------- >>> arr = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]]) >>> arr array([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12]]) >>> np.delete(arr, 1, 0) array([[ 1, 2, 3, 4], [ 9, 10, 11, 12]]) >>> np.delete(arr, np.s_[::2], 1) array([[ 2, 4], [ 6, 8], [10, 12]]) >>> np.delete(arr, [1,3,5], None) array([ 1, 3, 5, 7, 8, 9, 10, 11, 12]) """ raise NotImplementedError def deprecate(): """Issues a DeprecationWarning, adds warning to `old_name`'s docstring, rebinds ``old_name.__name__`` and returns the new function object. This function may also be used as a decorator. Parameters ---------- func : function The function to be deprecated. old_name : str, optional The name of the function to be deprecated. Default is None, in which case the name of `func` is used. new_name : str, optional The new name for the function. Default is None, in which case the deprecation message is that `old_name` is deprecated. If given, the deprecation message is that `old_name` is deprecated and `new_name` should be used instead. message : str, optional Additional explanation of the deprecation. Displayed in the docstring after the warning. Returns ------- old_func : function The deprecated function. Examples -------- Note that ``olduint`` returns a value after printing Deprecation Warning: >>> olduint = np.deprecate(np.uint) >>> olduint(6) /usr/lib/python2.5/site-packages/numpy/lib/utils.py:114: DeprecationWarning: uint32 is deprecated warnings.warn(str1, DeprecationWarning) 6 """ raise NotImplementedError def deprecate_with_doc(msg): """message """ raise NotImplementedError def diag_indices(n, ndim=2): """Return the indices to access the main diagonal of an array. This returns a tuple of indices that can be used to access the main diagonal of an array `a` with ``a.ndim >= 2`` dimensions and shape (n, n, ..., n). For ``a.ndim = 2`` this is the usual diagonal, for ``a.ndim > 2`` this is the set of indices to access ``a[i, i, ..., i]`` for ``i = [0..n-1]``. Parameters ---------- n : int The size, along each dimension, of the arrays for which the returned indices can be used. ndim : int, optional The number of dimensions. See also -------- diag_indices_from Notes ----- .. versionadded:: 1.4.0 Examples -------- Create a set of indices to access the diagonal of a (4, 4) array: >>> di = np.diag_indices(4) >>> di (array([0, 1, 2, 3]), array([0, 1, 2, 3])) >>> a = np.arange(16).reshape(4, 4) >>> a array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15]]) >>> a[di] = 100 >>> a array([[100, 1, 2, 3], [ 4, 100, 6, 7], [ 8, 9, 100, 11], [ 12, 13, 14, 100]]) Now, we create indices to manipulate a 3-D array: >>> d3 = np.diag_indices(2, 3) >>> d3 (array([0, 1]), array([0, 1]), array([0, 1])) And use it to set the diagonal of an array of zeros to 1: >>> a = np.zeros((2, 2, 2), dtype=np.int) >>> a[d3] = 1 >>> a array([[[1, 0], [0, 0]], [[0, 0], [0, 1]]]) """ raise NotImplementedError def diag_indices_from(arr): """Return the indices to access the main diagonal of an n-dimensional array. See `diag_indices` for full details. Parameters ---------- arr : array, at least 2-D See Also -------- diag_indices Notes ----- .. versionadded:: 1.4.0 """ raise NotImplementedError def diagflat(v, k=0): """Create a two-dimensional array with the flattened input as a diagonal. Parameters ---------- v : array_like Input data, which is flattened and set as the `k`-th diagonal of the output. k : int, optional Diagonal to set; 0, the default, corresponds to the "main" diagonal, a positive (negative) `k` giving the number of the diagonal above (below) the main. Returns ------- out : ndarray The 2-D output array. See Also -------- diag : MATLAB work-alike for 1-D and 2-D arrays. diagonal : Return specified diagonals. trace : Sum along diagonals. Examples -------- >>> np.diagflat([[1,2], [3,4]]) array([[1, 0, 0, 0], [0, 2, 0, 0], [0, 0, 3, 0], [0, 0, 0, 4]]) >>> np.diagflat([1,2], 1) array([[0, 1, 0], [0, 0, 2], [0, 0, 0]]) """ raise NotImplementedError def diff(a, n=1, axis=-1): """Calculate the n-th order discrete difference along given axis. The first order difference is given by ``out[n] = a[n+1] - a[n]`` along the given axis, higher order differences are calculated by using `diff` recursively. Parameters ---------- a : array_like Input array n : int, optional The number of times values are differenced. axis : int, optional The axis along which the difference is taken, default is the last axis. Returns ------- out : ndarray The `n` order differences. The shape of the output is the same as `a` except along `axis` where the dimension is smaller by `n`. See Also -------- gradient, ediff1d Examples -------- >>> x = np.array([1, 2, 4, 7, 0]) >>> np.diff(x) array([ 1, 2, 3, -7]) >>> np.diff(x, n=2) array([ 1, 1, -10]) >>> x = np.array([[1, 3, 6, 10], [0, 5, 6, 8]]) >>> np.diff(x) array([[2, 3, 4], [5, 1, 2]]) >>> np.diff(x, axis=0) array([[-1, 2, 0, -2]]) """ raise NotImplementedError def digitize(x, bins): """digitize(x, bins) Return the indices of the bins to which each value in input array belongs. Each index ``i`` returned is such that ``bins[i-1] <= x < bins[i]`` if `bins` is monotonically increasing, or ``bins[i-1] > x >= bins[i]`` if `bins` is monotonically decreasing. If values in `x` are beyond the bounds of `bins`, 0 or ``len(bins)`` is returned as appropriate. Parameters ---------- x : array_like Input array to be binned. It has to be 1-dimensional. bins : array_like Array of bins. It has to be 1-dimensional and monotonic. Returns ------- out : ndarray of ints Output array of indices, of same shape as `x`. Raises ------ ValueError If the input is not 1-dimensional, or if `bins` is not monotonic. TypeError If the type of the input is complex. See Also -------- bincount, histogram, unique Notes ----- If values in `x` are such that they fall outside the bin range, attempting to index `bins` with the indices that `digitize` returns will result in an IndexError. Examples -------- >>> x = np.array([0.2, 6.4, 3.0, 1.6]) >>> bins = np.array([0.0, 1.0, 2.5, 4.0, 10.0]) >>> inds = np.digitize(x, bins) >>> inds array([1, 4, 3, 2]) >>> for n in range(x.size): ... print bins[inds[n]-1], "<=", x[n], "<", bins[inds[n]] ... 0.0 <= 0.2 < 1.0 4.0 <= 6.4 < 10.0 2.5 <= 3.0 < 4.0 1.0 <= 1.6 < 2.5 """ # BUILTIN raise NotImplementedError def disp(mesg, device=None, linefeed=True): """Display a message on a device. Parameters ---------- mesg : str Message to display. device : object Device to write message. If None, defaults to ``sys.stdout`` which is very similar to ``print``. `device` needs to have ``write()`` and ``flush()`` methods. linefeed : bool, optional Option whether to print a line feed or not. Defaults to True. Raises ------ AttributeError If `device` does not have a ``write()`` or ``flush()`` method. Examples -------- Besides ``sys.stdout``, a file-like object can also be used as it has both required methods: >>> from StringIO import StringIO >>> buf = StringIO() >>> np.disp('"Display" in a file', device=buf) >>> buf.getvalue() '"Display" in a file\n' """ raise NotImplementedError def dsplit(ary, indices_or_sections): """Split array into multiple sub-arrays along the 3rd axis (depth). Please refer to the `split` documentation. `dsplit` is equivalent to `split` with ``axis=2``, the array is always split along the third axis provided the array dimension is greater than or equal to 3. See Also -------- split : Split an array into multiple sub-arrays of equal size. Examples -------- >>> x = np.arange(16.0).reshape(2, 2, 4) >>> x array([[[ 0., 1., 2., 3.], [ 4., 5., 6., 7.]], [[ 8., 9., 10., 11.], [ 12., 13., 14., 15.]]]) >>> np.dsplit(x, 2) [array([[[ 0., 1.], [ 4., 5.]], [[ 8., 9.], [ 12., 13.]]]), array([[[ 2., 3.], [ 6., 7.]], [[ 10., 11.], [ 14., 15.]]])] >>> np.dsplit(x, np.array([3, 6])) [array([[[ 0., 1., 2.], [ 4., 5., 6.]], [[ 8., 9., 10.], [ 12., 13., 14.]]]), array([[[ 3.], [ 7.]], [[ 11.], [ 15.]]]), array([], dtype=float64)] """ raise NotImplementedError def dstack(tup): """Stack arrays in sequence depth wise (along third axis). Takes a sequence of arrays and stack them along the third axis to make a single array. Rebuilds arrays divided by `dsplit`. This is a simple way to stack 2D arrays (images) into a single 3D array for processing. Parameters ---------- tup : sequence of arrays Arrays to stack. All of them must have the same shape along all but the third axis. Returns ------- stacked : ndarray The array formed by stacking the given arrays. See Also -------- vstack : Stack along first axis. hstack : Stack along second axis. concatenate : Join arrays. dsplit : Split array along third axis. Notes ----- Equivalent to ``np.concatenate(tup, axis=2)``. Examples -------- >>> a = np.array((1,2,3)) >>> b = np.array((2,3,4)) >>> np.dstack((a,b)) array([[[1, 2], [2, 3], [3, 4]]]) >>> a = np.array([[1],[2],[3]]) >>> b = np.array([[2],[3],[4]]) >>> np.dstack((a,b)) array([[[1, 2]], [[2, 3]], [[3, 4]]]) """ raise NotImplementedError def ediff1d(ary, to_end=None, to_begin=None): """The differences between consecutive elements of an array. Parameters ---------- ary : array_like If necessary, will be flattened before the differences are taken. to_end : array_like, optional Number(s) to append at the end of the returned differences. to_begin : array_like, optional Number(s) to prepend at the beginning of the returned differences. Returns ------- ed : ndarray The differences. Loosely, this is ``ary.flat[1:] - ary.flat[:-1]``. See Also -------- diff, gradient Notes ----- When applied to masked arrays, this function drops the mask information if the `to_begin` and/or `to_end` parameters are used. Examples -------- >>> x = np.array([1, 2, 4, 7, 0]) >>> np.ediff1d(x) array([ 1, 2, 3, -7]) >>> np.ediff1d(x, to_begin=-99, to_end=np.array([88, 99])) array([-99, 1, 2, 3, -7, 88, 99]) The returned array is always 1D. >>> y = [[1, 2, 4], [1, 6, 24]] >>> np.ediff1d(y) array([ 1, 2, -3, 5, 18]) """ raise NotImplementedError def einsum(): """einsum(subscripts, *operands, out=None, dtype=None, order='K', casting='safe') Evaluates the Einstein summation convention on the operands. Using the Einstein summation convention, many common multi-dimensional array operations can be represented in a simple fashion. This function provides a way compute such summations. The best way to understand this function is to try the examples below, which show how many common NumPy functions can be implemented as calls to `einsum`. Parameters ---------- subscripts : str Specifies the subscripts for summation. operands : list of array_like These are the arrays for the operation. out : ndarray, optional If provided, the calculation is done into this array. dtype : data-type, optional If provided, forces the calculation to use the data type specified. Note that you may have to also give a more liberal `casting` parameter to allow the conversions. order : {'C', 'F', 'A', or 'K'}, optional Controls the memory layout of the output. 'C' means it should be C contiguous. 'F' means it should be Fortran contiguous, 'A' means it should be 'F' if the inputs are all 'F', 'C' otherwise. 'K' means it should be as close to the layout as the inputs as is possible, including arbitrarily permuted axes. Default is 'K'. casting : {'no', 'equiv', 'safe', 'same_kind', 'unsafe'}, optional Controls what kind of data casting may occur. Setting this to 'unsafe' is not recommended, as it can adversely affect accumulations. * 'no' means the data types should not be cast at all. * 'equiv' means only byte-order changes are allowed. * 'safe' means only casts which can preserve values are allowed. * 'same_kind' means only safe casts or casts within a kind, like float64 to float32, are allowed. * 'unsafe' means any data conversions may be done. Returns ------- output : ndarray The calculation based on the Einstein summation convention. See Also -------- dot, inner, outer, tensordot Notes ----- .. versionadded:: 1.6.0 The subscripts string is a comma-separated list of subscript labels, where each label refers to a dimension of the corresponding operand. Repeated subscripts labels in one operand take the diagonal. For example, ``np.einsum('ii', a)`` is equivalent to ``np.trace(a)``. Whenever a label is repeated, it is summed, so ``np.einsum('i,i', a, b)`` is equivalent to ``np.inner(a,b)``. If a label appears only once, it is not summed, so ``np.einsum('i', a)`` produces a view of ``a`` with no changes. The order of labels in the output is by default alphabetical. This means that ``np.einsum('ij', a)`` doesn't affect a 2D array, while ``np.einsum('ji', a)`` takes its transpose. The output can be controlled by specifying output subscript labels as well. This specifies the label order, and allows summing to be disallowed or forced when desired. The call ``np.einsum('i->', a)`` is like ``np.sum(a, axis=-1)``, and ``np.einsum('ii->i', a)`` is like ``np.diag(a)``. The difference is that `einsum` does not allow broadcasting by default. To enable and control broadcasting, use an ellipsis. Default NumPy-style broadcasting is done by adding an ellipsis to the left of each term, like ``np.einsum('...ii->...i', a)``. To take the trace along the first and last axes, you can do ``np.einsum('i...i', a)``, or to do a matrix-matrix product with the left-most indices instead of rightmost, you can do ``np.einsum('ij...,jk...->ik...', a, b)``. When there is only one operand, no axes are summed, and no output parameter is provided, a view into the operand is returned instead of a new array. Thus, taking the diagonal as ``np.einsum('ii->i', a)`` produces a view. An alternative way to provide the subscripts and operands is as ``einsum(op0, sublist0, op1, sublist1, ..., [sublistout])``. The examples below have corresponding `einsum` calls with the two parameter methods. Examples -------- >>> a = np.arange(25).reshape(5,5) >>> b = np.arange(5) >>> c = np.arange(6).reshape(2,3) >>> np.einsum('ii', a) 60 >>> np.einsum(a, [0,0]) 60 >>> np.trace(a) 60 >>> np.einsum('ii->i', a) array([ 0, 6, 12, 18, 24]) >>> np.einsum(a, [0,0], [0]) array([ 0, 6, 12, 18, 24]) >>> np.diag(a) array([ 0, 6, 12, 18, 24]) >>> np.einsum('ij,j', a, b) array([ 30, 80, 130, 180, 230]) >>> np.einsum(a, [0,1], b, [1]) array([ 30, 80, 130, 180, 230]) >>> np.dot(a, b) array([ 30, 80, 130, 180, 230]) >>> np.einsum('ji', c) array([[0, 3], [1, 4], [2, 5]]) >>> np.einsum(c, [1,0]) array([[0, 3], [1, 4], [2, 5]]) >>> c.T array([[0, 3], [1, 4], [2, 5]]) >>> np.einsum('..., ...', 3, c) array([[ 0, 3, 6], [ 9, 12, 15]]) >>> np.einsum(3, [Ellipsis], c, [Ellipsis]) array([[ 0, 3, 6], [ 9, 12, 15]]) >>> np.multiply(3, c) array([[ 0, 3, 6], [ 9, 12, 15]]) >>> np.einsum('i,i', b, b) 30 >>> np.einsum(b, [0], b, [0]) 30 >>> np.inner(b,b) 30 >>> np.einsum('i,j', np.arange(2)+1, b) array([[0, 1, 2, 3, 4], [0, 2, 4, 6, 8]]) >>> np.einsum(np.arange(2)+1, [0], b, [1]) array([[0, 1, 2, 3, 4], [0, 2, 4, 6, 8]]) >>> np.outer(np.arange(2)+1, b) array([[0, 1, 2, 3, 4], [0, 2, 4, 6, 8]]) >>> np.einsum('i...->...', a) array([50, 55, 60, 65, 70]) >>> np.einsum(a, [0,Ellipsis], [Ellipsis]) array([50, 55, 60, 65, 70]) >>> np.sum(a, axis=0) array([50, 55, 60, 65, 70]) >>> a = np.arange(60.).reshape(3,4,5) >>> b = np.arange(24.).reshape(4,3,2) >>> np.einsum('ijk,jil->kl', a, b) array([[ 4400., 4730.], [ 4532., 4874.], [ 4664., 5018.], [ 4796., 5162.], [ 4928., 5306.]]) >>> np.einsum(a, [0,1,2], b, [1,0,3], [2,3]) array([[ 4400., 4730.], [ 4532., 4874.], [ 4664., 5018.], [ 4796., 5162.], [ 4928., 5306.]]) >>> np.tensordot(a,b, axes=([1,0],[0,1])) array([[ 4400., 4730.], [ 4532., 4874.], [ 4664., 5018.], [ 4796., 5162.], [ 4928., 5306.]]) """ # BUILTIN raise NotImplementedError def expand_dims(a, axis): """Expand the shape of an array. Insert a new axis, corresponding to a given position in the array shape. Parameters ---------- a : array_like Input array. axis : int Position (amongst axes) where new axis is to be inserted. Returns ------- res : ndarray Output array. The number of dimensions is one greater than that of the input array. See Also -------- doc.indexing, atleast_1d, atleast_2d, atleast_3d Examples -------- >>> x = np.array([1,2]) >>> x.shape (2,) The following is equivalent to ``x[np.newaxis,:]`` or ``x[np.newaxis]``: >>> y = np.expand_dims(x, axis=0) >>> y array([[1, 2]]) >>> y.shape (1, 2) >>> y = np.expand_dims(x, axis=1) # Equivalent to x[:,newaxis] >>> y array([[1], [2]]) >>> y.shape (2, 1) Note that some examples may use ``None`` instead of ``np.newaxis``. These are the same objects: >>> np.newaxis is None True """ raise NotImplementedError def extract(condition, arr): """Return the elements of an array that satisfy some condition. This is equivalent to ``np.compress(ravel(condition), ravel(arr))``. If `condition` is boolean ``np.extract`` is equivalent to ``arr[condition]``. Parameters ---------- condition : array_like An array whose nonzero or True entries indicate the elements of `arr` to extract. arr : array_like Input array of the same size as `condition`. See Also -------- take, put, putmask, compress Examples -------- >>> arr = np.arange(12).reshape((3, 4)) >>> arr array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> condition = np.mod(arr, 3)==0 >>> condition array([[ True, False, False, True], [False, False, True, False], [False, True, False, False]], dtype=bool) >>> np.extract(condition, arr) array([0, 3, 6, 9]) If `condition` is boolean: >>> arr[condition] array([0, 3, 6, 9]) """ raise NotImplementedError def _fastCopyAndTranspose(a): """_fastCopyAndTranspose(a) """ # BUILTIN raise NotImplementedError def fill_diagonal(a, val): """Fill the main diagonal of the given array of any dimensionality. For an array `a` with ``a.ndim > 2``, the diagonal is the list of locations with indices ``a[i, i, ..., i]`` all identical. This function modifies the input array in-place, it does not return a value. Parameters ---------- a : array, at least 2-D. Array whose diagonal is to be filled, it gets modified in-place. val : scalar Value to be written on the diagonal, its type must be compatible with that of the array a. See also -------- diag_indices, diag_indices_from Notes ----- .. versionadded:: 1.4.0 This functionality can be obtained via `diag_indices`, but internally this version uses a much faster implementation that never constructs the indices and uses simple slicing. Examples -------- >>> a = np.zeros((3, 3), int) >>> np.fill_diagonal(a, 5) >>> a array([[5, 0, 0], [0, 5, 0], [0, 0, 5]]) The same function can operate on a 4-D array: >>> a = np.zeros((3, 3, 3, 3), int) >>> np.fill_diagonal(a, 4) We only show a few blocks for clarity: >>> a[0, 0] array([[4, 0, 0], [0, 0, 0], [0, 0, 0]]) >>> a[1, 1] array([[0, 0, 0], [0, 4, 0], [0, 0, 0]]) >>> a[2, 2] array([[0, 0, 0], [0, 0, 0], [0, 0, 4]]) """ raise NotImplementedError def find_common_type(array_types, scalar_types): """Determine common type following standard coercion rules. Parameters ---------- array_types : sequence A list of dtypes or dtype convertible objects representing arrays. scalar_types : sequence A list of dtypes or dtype convertible objects representing scalars. Returns ------- datatype : dtype The common data type, which is the maximum of `array_types` ignoring `scalar_types`, unless the maximum of `scalar_types` is of a different kind (`dtype.kind`). If the kind is not understood, then None is returned. See Also -------- dtype, common_type, can_cast, mintypecode Examples -------- >>> np.find_common_type([], [np.int64, np.float32, np.complex]) dtype('complex128') >>> np.find_common_type([np.int64, np.float32], []) dtype('float64') The standard casting rules ensure that a scalar cannot up-cast an array unless the scalar is of a fundamentally different kind of data (i.e. under a different hierarchy in the data type hierarchy) then the array: >>> np.find_common_type([np.float32], [np.int64, np.float64]) dtype('float32') Complex is of a different type, so it up-casts the float in the `array_types` argument: >>> np.find_common_type([np.float32], [np.complex]) dtype('complex128') Type specifier strings are convertible to dtypes and can therefore be used instead of dtypes: >>> np.find_common_type(['f4', 'f4', 'i4'], ['c8']) dtype('complex128') """ raise NotImplementedError def fix(x, y=None): """Round to nearest integer towards zero. Round an array of floats element-wise to nearest integer towards zero. The rounded values are returned as floats. Parameters ---------- x : array_like An array of floats to be rounded y : ndarray, optional Output array Returns ------- out : ndarray of floats The array of rounded numbers See Also -------- trunc, floor, ceil around : Round to given number of decimals Examples -------- >>> np.fix(3.14) 3.0 >>> np.fix(3) 3.0 >>> np.fix([2.1, 2.9, -2.1, -2.9]) array([ 2., 2., -2., -2.]) """ raise NotImplementedError def flatnonzero(a): """Return indices that are non-zero in the flattened version of a. This is equivalent to a.ravel().nonzero()[0]. Parameters ---------- a : ndarray Input array. Returns ------- res : ndarray Output array, containing the indices of the elements of `a.ravel()` that are non-zero. See Also -------- nonzero : Return the indices of the non-zero elements of the input array. ravel : Return a 1-D array containing the elements of the input array. Examples -------- >>> x = np.arange(-2, 3) >>> x array([-2, -1, 0, 1, 2]) >>> np.flatnonzero(x) array([0, 1, 3, 4]) Use the indices of the non-zero elements as an index array to extract these elements: >>> x.ravel()[np.flatnonzero(x)] array([-2, -1, 1, 2]) """ raise NotImplementedError def fliplr(m): """Flip array in the left/right direction. Flip the entries in each row in the left/right direction. Columns are preserved, but appear in a different order than before. Parameters ---------- m : array_like Input array. Returns ------- f : ndarray A view of `m` with the columns reversed. Since a view is returned, this operation is :math:`\mathcal O(1)`. See Also -------- flipud : Flip array in the up/down direction. rot90 : Rotate array counterclockwise. Notes ----- Equivalent to A[:,::-1]. Does not require the array to be two-dimensional. Examples -------- >>> A = np.diag([1.,2.,3.]) >>> A array([[ 1., 0., 0.], [ 0., 2., 0.], [ 0., 0., 3.]]) >>> np.fliplr(A) array([[ 0., 0., 1.], [ 0., 2., 0.], [ 3., 0., 0.]]) >>> A = np.random.randn(2,3,5) >>> np.all(np.fliplr(A)==A[:,::-1,...]) True """ raise NotImplementedError def flipud(m): """Flip array in the up/down direction. Flip the entries in each column in the up/down direction. Rows are preserved, but appear in a different order than before. Parameters ---------- m : array_like Input array. Returns ------- out : array_like A view of `m` with the rows reversed. Since a view is returned, this operation is :math:`\mathcal O(1)`. See Also -------- fliplr : Flip array in the left/right direction. rot90 : Rotate array counterclockwise. Notes ----- Equivalent to ``A[::-1,...]``. Does not require the array to be two-dimensional. Examples -------- >>> A = np.diag([1.0, 2, 3]) >>> A array([[ 1., 0., 0.], [ 0., 2., 0.], [ 0., 0., 3.]]) >>> np.flipud(A) array([[ 0., 0., 3.], [ 0., 2., 0.], [ 1., 0., 0.]]) >>> A = np.random.randn(2,3,5) >>> np.all(np.flipud(A)==A[::-1,...]) True >>> np.flipud([1,2]) array([2, 1]) """ raise NotImplementedError def frombuffer(buffer, dtype=float, count=-1, offset=0): """frombuffer(buffer, dtype=float, count=-1, offset=0) Interpret a buffer as a 1-dimensional array. Parameters ---------- buffer : buffer_like An object that exposes the buffer interface. dtype : data-type, optional Data-type of the returned array; default: float. count : int, optional Number of items to read. ``-1`` means all data in the buffer. offset : int, optional Start reading the buffer from this offset; default: 0. Notes ----- If the buffer has data that is not in machine byte-order, this should be specified as part of the data-type, e.g.:: >>> dt = np.dtype(int) >>> dt = dt.newbyteorder('>') >>> np.frombuffer(buf, dtype=dt) The data of the resulting array will not be byteswapped, but will be interpreted correctly. Examples -------- >>> s = 'hello world' >>> np.frombuffer(s, dtype='S1', count=5, offset=6) array(['w', 'o', 'r', 'l', 'd'], dtype='|S1') """ # BUILTIN raise NotImplementedError def fromfile(file, dtype=float, count=-1, sep=''): """fromfile(file, dtype=float, count=-1, sep='') Construct an array from data in a text or binary file. A highly efficient way of reading binary data with a known data-type, as well as parsing simply formatted text files. Data written using the `tofile` method can be read using this function. Parameters ---------- file : file or str Open file object or filename. dtype : data-type Data type of the returned array. For binary files, it is used to determine the size and byte-order of the items in the file. count : int Number of items to read. ``-1`` means all items (i.e., the complete file). sep : str Separator between items if file is a text file. Empty ("") separator means the file should be treated as binary. Spaces (" ") in the separator match zero or more whitespace characters. A separator consisting only of spaces must match at least one whitespace. See also -------- load, save ndarray.tofile loadtxt : More flexible way of loading data from a text file. Notes ----- Do not rely on the combination of `tofile` and `fromfile` for data storage, as the binary files generated are are not platform independent. In particular, no byte-order or data-type information is saved. Data can be stored in the platform independent ``.npy`` format using `save` and `load` instead. Examples -------- Construct an ndarray: >>> dt = np.dtype([('time', [('min', int), ('sec', int)]), ... ('temp', float)]) >>> x = np.zeros((1,), dtype=dt) >>> x['time']['min'] = 10; x['temp'] = 98.25 >>> x array([((10, 0), 98.25)], dtype=[('time', [('min', '>> import os >>> fname = os.tmpnam() >>> x.tofile(fname) Read the raw data from disk: >>> np.fromfile(fname, dtype=dt) array([((10, 0), 98.25)], dtype=[('time', [('min', '>> np.save(fname, x) >>> np.load(fname + '.npy') array([((10, 0), 98.25)], dtype=[('time', [('min', '>> iterable = (x*x for x in range(5)) >>> np.fromiter(iterable, np.float) array([ 0., 1., 4., 9., 16.]) """ # BUILTIN raise NotImplementedError def frompyfunc(func, nin, nout): """frompyfunc(func, nin, nout) Takes an arbitrary Python function and returns a Numpy ufunc. Can be used, for example, to add broadcasting to a built-in Python function (see Examples section). Parameters ---------- func : Python function object An arbitrary Python function. nin : int The number of input arguments. nout : int The number of objects returned by `func`. Returns ------- out : ufunc Returns a Numpy universal function (``ufunc``) object. Notes ----- The returned ufunc always returns PyObject arrays. Examples -------- Use frompyfunc to add broadcasting to the Python function ``oct``: >>> oct_array = np.frompyfunc(oct, 1, 1) >>> oct_array(np.array((10, 30, 100))) array([012, 036, 0144], dtype=object) >>> np.array((oct(10), oct(30), oct(100))) # for comparison array(['012', '036', '0144'], dtype='|S4') """ # BUILTIN raise NotImplementedError def fromregex(file, regexp, dtype): """Construct an array from a text file, using regular expression parsing. The returned array is always a structured array, and is constructed from all matches of the regular expression in the file. Groups in the regular expression are converted to fields of the structured array. Parameters ---------- file : str or file File name or file object to read. regexp : str or regexp Regular expression used to parse the file. Groups in the regular expression correspond to fields in the dtype. dtype : dtype or list of dtypes Dtype for the structured array. Returns ------- output : ndarray The output array, containing the part of the content of `file` that was matched by `regexp`. `output` is always a structured array. Raises ------ TypeError When `dtype` is not a valid dtype for a structured array. See Also -------- fromstring, loadtxt Notes ----- Dtypes for structured arrays can be specified in several forms, but all forms specify at least the data type and field name. For details see `doc.structured_arrays`. Examples -------- >>> f = open('test.dat', 'w') >>> f.write("1312 foo\n1534 bar\n444 qux") >>> f.close() >>> regexp = r"(\d+)\s+(...)" # match [digits, whitespace, anything] >>> output = np.fromregex('test.dat', regexp, ... [('num', np.int64), ('key', 'S3')]) >>> output array([(1312L, 'foo'), (1534L, 'bar'), (444L, 'qux')], dtype=[('num', '>> output['num'] array([1312, 1534, 444], dtype=int64) """ raise NotImplementedError def fromstring(string, dtype=float, count=-1, sep=''): """fromstring(string, dtype=float, count=-1, sep='') A new 1-D array initialized from raw binary or text data in a string. Parameters ---------- string : str A string containing the data. dtype : data-type, optional The data type of the array; default: float. For binary input data, the data must be in exactly this format. count : int, optional Read this number of `dtype` elements from the data. If this is negative (the default), the count will be determined from the length of the data. sep : str, optional If not provided or, equivalently, the empty string, the data will be interpreted as binary data; otherwise, as ASCII text with decimal numbers. Also in this latter case, this argument is interpreted as the string separating numbers in the data; extra whitespace between elements is also ignored. Returns ------- arr : ndarray The constructed array. Raises ------ ValueError If the string is not the correct size to satisfy the requested `dtype` and `count`. See Also -------- frombuffer, fromfile, fromiter Examples -------- >>> np.fromstring('\x01\x02', dtype=np.uint8) array([1, 2], dtype=uint8) >>> np.fromstring('1 2', dtype=int, sep=' ') array([1, 2]) >>> np.fromstring('1, 2', dtype=int, sep=',') array([1, 2]) >>> np.fromstring('\x01\x02\x03\x04\x05', dtype=np.uint8, count=3) array([1, 2, 3], dtype=uint8) """ # BUILTIN raise NotImplementedError def fv(rate, nper, pmt, pv, when='end'): """Compute the future value. Given: * a present value, `pv` * an interest `rate` compounded once per period, of which there are * `nper` total * a (fixed) payment, `pmt`, paid either * at the beginning (`when` = {'begin', 1}) or the end (`when` = {'end', 0}) of each period Return: the value at the end of the `nper` periods Parameters ---------- rate : scalar or array_like of shape(M, ) Rate of interest as decimal (not per cent) per period nper : scalar or array_like of shape(M, ) Number of compounding periods pmt : scalar or array_like of shape(M, ) Payment pv : scalar or array_like of shape(M, ) Present value when : {{'begin', 1}, {'end', 0}}, {string, int}, optional When payments are due ('begin' (1) or 'end' (0)). Defaults to {'end', 0}. Returns ------- out : ndarray Future values. If all input is scalar, returns a scalar float. If any input is array_like, returns future values for each input element. If multiple inputs are array_like, they all must have the same shape. Notes ----- The future value is computed by solving the equation:: fv + pv*(1+rate)**nper + pmt*(1 + rate*when)/rate*((1 + rate)**nper - 1) == 0 or, when ``rate == 0``:: fv + pv + pmt * nper == 0 References ---------- .. [WRW] Wheeler, D. A., E. Rathke, and R. Weir (Eds.) (2009, May). Open Document Format for Office Applications (OpenDocument)v1.2, Part 2: Recalculated Formula (OpenFormula) Format - Annotated Version, Pre-Draft 12. Organization for the Advancement of Structured Information Standards (OASIS). Billerica, MA, USA. [ODT Document]. Available: http://www.oasis-open.org/committees/documents.php?wg_abbrev=office-formula OpenDocument-formula-20090508.odt Examples -------- What is the future value after 10 years of saving $100 now, with an additional monthly savings of $100. Assume the interest rate is 5% (annually) compounded monthly? >>> np.fv(0.05/12, 10*12, -100, -100) 15692.928894335748 By convention, the negative sign represents cash flow out (i.e. money not available today). Thus, saving $100 a month at 5% annual interest leads to $15,692.93 available to spend in 10 years. If any input is array_like, returns an array of equal shape. Let's compare different interest rates from the example above. >>> a = np.array((0.05, 0.06, 0.07))/12 >>> np.fv(a, 10*12, -100, -100) array([ 15692.92889434, 16569.87435405, 17509.44688102]) """ raise NotImplementedError def genfromtxt(fname, dtype=float, comments='#', delimiter=None, skiprows=0, skip_header=0, skip_footer=0, converters=None, missing='', missing_values=None, filling_values=None, usecols=None, names=None, excludelist=None, deletechars=None, replace_space='_', autostrip=False, case_sensitive=True, defaultfmt='f%i', unpack=None, usemask=False, loose=True, invalid_raise=True): """Load data from a text file, with missing values handled as specified. Each line past the first `skip_header` lines is split at the `delimiter` character, and characters following the `comments` character are discarded. Parameters ---------- fname : file or str File, filename, or generator to read. If the filename extension is `.gz` or `.bz2`, the file is first decompressed. Note that generators must return byte strings in Python 3k. dtype : dtype, optional Data type of the resulting array. If None, the dtypes will be determined by the contents of each column, individually. comments : str, optional The character used to indicate the start of a comment. All the characters occurring on a line after a comment are discarded delimiter : str, int, or sequence, optional The string used to separate values. By default, any consecutive whitespaces act as delimiter. An integer or sequence of integers can also be provided as width(s) of each field. skip_header : int, optional The numbers of lines to skip at the beginning of the file. skip_footer : int, optional The numbers of lines to skip at the end of the file converters : variable, optional The set of functions that convert the data of a column to a value. The converters can also be used to provide a default value for missing data: ``converters = {3: lambda s: float(s or 0)}``. missing_values : variable, optional The set of strings corresponding to missing data. filling_values : variable, optional The set of values to be used as default when the data are missing. usecols : sequence, optional Which columns to read, with 0 being the first. For example, ``usecols = (1, 4, 5)`` will extract the 2nd, 5th and 6th columns. names : {None, True, str, sequence}, optional If `names` is True, the field names are read from the first valid line after the first `skip_header` lines. If `names` is a sequence or a single-string of comma-separated names, the names will be used to define the field names in a structured dtype. If `names` is None, the names of the dtype fields will be used, if any. excludelist : sequence, optional A list of names to exclude. This list is appended to the default list ['return','file','print']. Excluded names are appended an underscore: for example, `file` would become `file_`. deletechars : str, optional A string combining invalid characters that must be deleted from the names. defaultfmt : str, optional A format used to define default field names, such as "f%i" or "f_%02i". autostrip : bool, optional Whether to automatically strip white spaces from the variables. replace_space : char, optional Character(s) used in replacement of white spaces in the variables names. By default, use a '_'. case_sensitive : {True, False, 'upper', 'lower'}, optional If True, field names are case sensitive. If False or 'upper', field names are converted to upper case. If 'lower', field names are converted to lower case. unpack : bool, optional If True, the returned array is transposed, so that arguments may be unpacked using ``x, y, z = loadtxt(...)`` usemask : bool, optional If True, return a masked array. If False, return a regular array. invalid_raise : bool, optional If True, an exception is raised if an inconsistency is detected in the number of columns. If False, a warning is emitted and the offending lines are skipped. Returns ------- out : ndarray Data read from the text file. If `usemask` is True, this is a masked array. See Also -------- numpy.loadtxt : equivalent function when no data is missing. Notes ----- * When spaces are used as delimiters, or when no delimiter has been given as input, there should not be any missing data between two fields. * When the variables are named (either by a flexible dtype or with `names`, there must not be any header in the file (else a ValueError exception is raised). * Individual values are not stripped of spaces by default. When using a custom converter, make sure the function does remove spaces. Examples --------- >>> from StringIO import StringIO >>> import numpy as np Comma delimited file with mixed dtype >>> s = StringIO("1,1.3,abcde") >>> data = np.genfromtxt(s, dtype=[('myint','i8'),('myfloat','f8'), ... ('mystring','S5')], delimiter=",") >>> data array((1, 1.3, 'abcde'), dtype=[('myint', '>> s.seek(0) # needed for StringIO example only >>> data = np.genfromtxt(s, dtype=None, ... names = ['myint','myfloat','mystring'], delimiter=",") >>> data array((1, 1.3, 'abcde'), dtype=[('myint', '>> s.seek(0) >>> data = np.genfromtxt(s, dtype="i8,f8,S5", ... names=['myint','myfloat','mystring'], delimiter=",") >>> data array((1, 1.3, 'abcde'), dtype=[('myint', '>> s = StringIO("11.3abcde") >>> data = np.genfromtxt(s, dtype=None, names=['intvar','fltvar','strvar'], ... delimiter=[1,3,5]) >>> data array((1, 1.3, 'abcde'), dtype=[('intvar', '>> buf = np.getbuffer(np.ones(5), 1, 3) >>> len(buf) 3 >>> buf[0] '\x00' >>> buf """ # BUILTIN raise NotImplementedError def getbufsize(): """Return the size of the buffer used in ufuncs. """ raise NotImplementedError def geterr(): """Get the current way of handling floating-point errors. Returns ------- res : dict A dictionary with keys "divide", "over", "under", and "invalid", whose values are from the strings "ignore", "print", "log", "warn", "raise", and "call". The keys represent possible floating-point exceptions, and the values define how these exceptions are handled. See Also -------- geterrcall, seterr, seterrcall Notes ----- For complete documentation of the types of floating-point exceptions and treatment options, see `seterr`. Examples -------- >>> np.geterr() {'over': 'warn', 'divide': 'warn', 'invalid': 'warn', 'under': 'ignore'} >>> np.arange(3.) / np.arange(3.) array([ NaN, 1., 1.]) >>> oldsettings = np.seterr(all='warn', over='raise') >>> np.geterr() {'over': 'raise', 'divide': 'warn', 'invalid': 'warn', 'under': 'warn'} >>> np.arange(3.) / np.arange(3.) __main__:1: RuntimeWarning: invalid value encountered in divide array([ NaN, 1., 1.]) """ raise NotImplementedError def geterrcall(): """Return the current callback function used on floating-point errors. When the error handling for a floating-point error (one of "divide", "over", "under", or "invalid") is set to 'call' or 'log', the function that is called or the log instance that is written to is returned by `geterrcall`. This function or log instance has been set with `seterrcall`. Returns ------- errobj : callable, log instance or None The current error handler. If no handler was set through `seterrcall`, ``None`` is returned. See Also -------- seterrcall, seterr, geterr Notes ----- For complete documentation of the types of floating-point exceptions and treatment options, see `seterr`. Examples -------- >>> np.geterrcall() # we did not yet set a handler, returns None >>> oldsettings = np.seterr(all='call') >>> def err_handler(type, flag): ... print "Floating point error (%s), with flag %s" % (type, flag) >>> oldhandler = np.seterrcall(err_handler) >>> np.array([1, 2, 3]) / 0.0 Floating point error (divide by zero), with flag 1 array([ Inf, Inf, Inf]) >>> cur_handler = np.geterrcall() >>> cur_handler is err_handler True """ raise NotImplementedError def geterrobj(): """geterrobj() Return the current object that defines floating-point error handling. The error object contains all information that defines the error handling behavior in Numpy. `geterrobj` is used internally by the other functions that get and set error handling behavior (`geterr`, `seterr`, `geterrcall`, `seterrcall`). Returns ------- errobj : list The error object, a list containing three elements: [internal numpy buffer size, error mask, error callback function]. The error mask is a single integer that holds the treatment information on all four floating point errors. The information for each error type is contained in three bits of the integer. If we print it in base 8, we can see what treatment is set for "invalid", "under", "over", and "divide" (in that order). The printed string can be interpreted with * 0 : 'ignore' * 1 : 'warn' * 2 : 'raise' * 3 : 'call' * 4 : 'print' * 5 : 'log' See Also -------- seterrobj, seterr, geterr, seterrcall, geterrcall getbufsize, setbufsize Notes ----- For complete documentation of the types of floating-point exceptions and treatment options, see `seterr`. Examples -------- >>> np.geterrobj() # first get the defaults [10000, 0, None] >>> def err_handler(type, flag): ... print "Floating point error (%s), with flag %s" % (type, flag) ... >>> old_bufsize = np.setbufsize(20000) >>> old_err = np.seterr(divide='raise') >>> old_handler = np.seterrcall(err_handler) >>> np.geterrobj() [20000, 2, ] >>> old_err = np.seterr(all='ignore') >>> np.base_repr(np.geterrobj()[1], 8) '0' >>> old_err = np.seterr(divide='warn', over='log', under='call', invalid='print') >>> np.base_repr(np.geterrobj()[1], 8) '4351' """ # BUILTIN raise NotImplementedError def gradient(f): """Return the gradient of an N-dimensional array. The gradient is computed using central differences in the interior and first differences at the boundaries. The returned gradient hence has the same shape as the input array. Parameters ---------- f : array_like An N-dimensional array containing samples of a scalar function. `*varargs` : scalars 0, 1, or N scalars specifying the sample distances in each direction, that is: `dx`, `dy`, `dz`, ... The default distance is 1. Returns ------- g : ndarray N arrays of the same shape as `f` giving the derivative of `f` with respect to each dimension. Examples -------- >>> x = np.array([1, 2, 4, 7, 11, 16], dtype=np.float) >>> np.gradient(x) array([ 1. , 1.5, 2.5, 3.5, 4.5, 5. ]) >>> np.gradient(x, 2) array([ 0.5 , 0.75, 1.25, 1.75, 2.25, 2.5 ]) >>> np.gradient(np.array([[1, 2, 6], [3, 4, 5]], dtype=np.float)) [array([[ 2., 2., -1.], [ 2., 2., -1.]]), array([[ 1. , 2.5, 4. ], [ 1. , 1. , 1. ]])] """ raise NotImplementedError def hamming(M): """Return the Hamming window. The Hamming window is a taper formed by using a weighted cosine. Parameters ---------- M : int Number of points in the output window. If zero or less, an empty array is returned. Returns ------- out : ndarray The window, normalized to one (the value one appears only if the number of samples is odd). See Also -------- bartlett, blackman, hanning, kaiser Notes ----- The Hamming window is defined as .. math:: w(n) = 0.54 + 0.46cos\left(\frac{2\pi{n}}{M-1}\right) \qquad 0 \leq n \leq M-1 The Hamming was named for R. W. Hamming, an associate of J. W. Tukey and is described in Blackman and Tukey. It was recommended for smoothing the truncated autocovariance function in the time domain. Most references to the Hamming window come from the signal processing literature, where it is used as one of many windowing functions for smoothing values. It is also known as an apodization (which means "removing the foot", i.e. smoothing discontinuities at the beginning and end of the sampled signal) or tapering function. References ---------- .. [1] Blackman, R.B. and Tukey, J.W., (1958) The measurement of power spectra, Dover Publications, New York. .. [2] E.R. Kanasewich, "Time Sequence Analysis in Geophysics", The University of Alberta Press, 1975, pp. 109-110. .. [3] Wikipedia, "Window function", http://en.wikipedia.org/wiki/Window_function .. [4] W.H. Press, B.P. Flannery, S.A. Teukolsky, and W.T. Vetterling, "Numerical Recipes", Cambridge University Press, 1986, page 425. Examples -------- >>> np.hamming(12) array([ 0.08 , 0.15302337, 0.34890909, 0.60546483, 0.84123594, 0.98136677, 0.98136677, 0.84123594, 0.60546483, 0.34890909, 0.15302337, 0.08 ]) Plot the window and the frequency response: >>> from numpy.fft import fft, fftshift >>> import matplotlib.pyplot as plt >>> window = np.hamming(51) >>> plt.plot(window) [] >>> plt.title("Hamming window") >>> plt.ylabel("Amplitude") >>> plt.xlabel("Sample") >>> plt.show() >>> plt.figure() >>> A = fft(window, 2048) / 25.5 >>> mag = np.abs(fftshift(A)) >>> freq = np.linspace(-0.5, 0.5, len(A)) >>> response = 20 * np.log10(mag) >>> response = np.clip(response, -100, 100) >>> plt.plot(freq, response) [] >>> plt.title("Frequency response of Hamming window") >>> plt.ylabel("Magnitude [dB]") >>> plt.xlabel("Normalized frequency [cycles per sample]") >>> plt.axis('tight') (-0.5, 0.5, -100.0, ...) >>> plt.show() """ raise NotImplementedError def hanning(M): """Return the Hanning window. The Hanning window is a taper formed by using a weighted cosine. Parameters ---------- M : int Number of points in the output window. If zero or less, an empty array is returned. Returns ------- out : ndarray, shape(M,) The window, normalized to one (the value one appears only if `M` is odd). See Also -------- bartlett, blackman, hamming, kaiser Notes ----- The Hanning window is defined as .. math:: w(n) = 0.5 - 0.5cos\left(\frac{2\pi{n}}{M-1}\right) \qquad 0 \leq n \leq M-1 The Hanning was named for Julius van Hann, an Austrian meterologist. It is also known as the Cosine Bell. Some authors prefer that it be called a Hann window, to help avoid confusion with the very similar Hamming window. Most references to the Hanning window come from the signal processing literature, where it is used as one of many windowing functions for smoothing values. It is also known as an apodization (which means "removing the foot", i.e. smoothing discontinuities at the beginning and end of the sampled signal) or tapering function. References ---------- .. [1] Blackman, R.B. and Tukey, J.W., (1958) The measurement of power spectra, Dover Publications, New York. .. [2] E.R. Kanasewich, "Time Sequence Analysis in Geophysics", The University of Alberta Press, 1975, pp. 106-108. .. [3] Wikipedia, "Window function", http://en.wikipedia.org/wiki/Window_function .. [4] W.H. Press, B.P. Flannery, S.A. Teukolsky, and W.T. Vetterling, "Numerical Recipes", Cambridge University Press, 1986, page 425. Examples -------- >>> from numpy import hanning >>> hanning(12) array([ 0. , 0.07937323, 0.29229249, 0.57115742, 0.82743037, 0.97974649, 0.97974649, 0.82743037, 0.57115742, 0.29229249, 0.07937323, 0. ]) Plot the window and its frequency response: >>> from numpy.fft import fft, fftshift >>> import matplotlib.pyplot as plt >>> window = np.hanning(51) >>> plt.plot(window) [] >>> plt.title("Hann window") >>> plt.ylabel("Amplitude") >>> plt.xlabel("Sample") >>> plt.show() >>> plt.figure() >>> A = fft(window, 2048) / 25.5 >>> mag = abs(fftshift(A)) >>> freq = np.linspace(-0.5,0.5,len(A)) >>> response = 20*np.log10(mag) >>> response = np.clip(response,-100,100) >>> plt.plot(freq, response) [] >>> plt.title("Frequency response of the Hann window") >>> plt.ylabel("Magnitude [dB]") >>> plt.xlabel("Normalized frequency [cycles per sample]") >>> plt.axis('tight') (-0.5, 0.5, -100.0, ...) >>> plt.show() """ raise NotImplementedError def histogram(a, bins=10, range=None, normed=False, weights=None, density=None): """Compute the histogram of a set of data. Parameters ---------- a : array_like Input data. The histogram is computed over the flattened array. bins : int or sequence of scalars, optional If `bins` is an int, it defines the number of equal-width bins in the given range (10, by default). If `bins` is a sequence, it defines the bin edges, including the rightmost edge, allowing for non-uniform bin widths. range : (float, float), optional The lower and upper range of the bins. If not provided, range is simply ``(a.min(), a.max())``. Values outside the range are ignored. normed : bool, optional This keyword is deprecated in Numpy 1.6 due to confusing/buggy behavior. It will be removed in Numpy 2.0. Use the density keyword instead. If False, the result will contain the number of samples in each bin. If True, the result is the value of the probability *density* function at the bin, normalized such that the *integral* over the range is 1. Note that this latter behavior is known to be buggy with unequal bin widths; use `density` instead. weights : array_like, optional An array of weights, of the same shape as `a`. Each value in `a` only contributes its associated weight towards the bin count (instead of 1). If `normed` is True, the weights are normalized, so that the integral of the density over the range remains 1 density : bool, optional If False, the result will contain the number of samples in each bin. If True, the result is the value of the probability *density* function at the bin, normalized such that the *integral* over the range is 1. Note that the sum of the histogram values will not be equal to 1 unless bins of unity width are chosen; it is not a probability *mass* function. Overrides the `normed` keyword if given. Returns ------- hist : array The values of the histogram. See `normed` and `weights` for a description of the possible semantics. bin_edges : array of dtype float Return the bin edges ``(length(hist)+1)``. See Also -------- histogramdd, bincount, searchsorted, digitize Notes ----- All but the last (righthand-most) bin is half-open. In other words, if `bins` is:: [1, 2, 3, 4] then the first bin is ``[1, 2)`` (including 1, but excluding 2) and the second ``[2, 3)``. The last bin, however, is ``[3, 4]``, which *includes* 4. Examples -------- >>> np.histogram([1, 2, 1], bins=[0, 1, 2, 3]) (array([0, 2, 1]), array([0, 1, 2, 3])) >>> np.histogram(np.arange(4), bins=np.arange(5), density=True) (array([ 0.25, 0.25, 0.25, 0.25]), array([0, 1, 2, 3, 4])) >>> np.histogram([[1, 2, 1], [1, 0, 1]], bins=[0,1,2,3]) (array([1, 4, 1]), array([0, 1, 2, 3])) >>> a = np.arange(5) >>> hist, bin_edges = np.histogram(a, density=True) >>> hist array([ 0.5, 0. , 0.5, 0. , 0. , 0.5, 0. , 0.5, 0. , 0.5]) >>> hist.sum() 2.4999999999999996 >>> np.sum(hist*np.diff(bin_edges)) 1.0 """ raise NotImplementedError def histogram2d(x, y, bins=10, range=None, normed=False, weights=None): """Compute the bi-dimensional histogram of two data samples. Parameters ---------- x : array_like, shape(N,) A sequence of values to be histogrammed along the first dimension. y : array_like, shape(M,) A sequence of values to be histogrammed along the second dimension. bins : int or [int, int] or array_like or [array, array], optional The bin specification: * If int, the number of bins for the two dimensions (nx=ny=bins). * If [int, int], the number of bins in each dimension (nx, ny = bins). * If array_like, the bin edges for the two dimensions (x_edges=y_edges=bins). * If [array, array], the bin edges in each dimension (x_edges, y_edges = bins). range : array_like, shape(2,2), optional The leftmost and rightmost edges of the bins along each dimension (if not specified explicitly in the `bins` parameters): ``[[xmin, xmax], [ymin, ymax]]``. All values outside of this range will be considered outliers and not tallied in the histogram. normed : bool, optional If False, returns the number of samples in each bin. If True, returns the bin density, i.e. the bin count divided by the bin area. weights : array_like, shape(N,), optional An array of values ``w_i`` weighing each sample ``(x_i, y_i)``. Weights are normalized to 1 if `normed` is True. If `normed` is False, the values of the returned histogram are equal to the sum of the weights belonging to the samples falling into each bin. Returns ------- H : ndarray, shape(nx, ny) The bi-dimensional histogram of samples `x` and `y`. Values in `x` are histogrammed along the first dimension and values in `y` are histogrammed along the second dimension. xedges : ndarray, shape(nx,) The bin edges along the first dimension. yedges : ndarray, shape(ny,) The bin edges along the second dimension. See Also -------- histogram: 1D histogram histogramdd: Multidimensional histogram Notes ----- When `normed` is True, then the returned histogram is the sample density, defined such that: .. math:: \sum_{i=0}^{nx-1} \sum_{j=0}^{ny-1} H_{i,j} \Delta x_i \Delta y_j = 1 where `H` is the histogram array and :math:`\Delta x_i \Delta y_i` the area of bin `{i,j}`. Please note that the histogram does not follow the Cartesian convention where `x` values are on the abcissa and `y` values on the ordinate axis. Rather, `x` is histogrammed along the first dimension of the array (vertical), and `y` along the second dimension of the array (horizontal). This ensures compatibility with `histogramdd`. Examples -------- >>> x, y = np.random.randn(2, 100) >>> H, xedges, yedges = np.histogram2d(x, y, bins=(5, 8)) >>> H.shape, xedges.shape, yedges.shape ((5, 8), (6,), (9,)) We can now use the Matplotlib to visualize this 2-dimensional histogram: >>> extent = [yedges[0], yedges[-1], xedges[-1], xedges[0]] >>> import matplotlib.pyplot as plt >>> plt.imshow(H, extent=extent, interpolation='nearest') >>> plt.colorbar() >>> plt.show() """ raise NotImplementedError def histogramdd(sample, bins=10, range=None, normed=False, weights=None): """Compute the multidimensional histogram of some data. Parameters ---------- sample : array_like The data to be histogrammed. It must be an (N,D) array or data that can be converted to such. The rows of the resulting array are the coordinates of points in a D dimensional polytope. bins : sequence or int, optional The bin specification: * A sequence of arrays describing the bin edges along each dimension. * The number of bins for each dimension (nx, ny, ... =bins) * The number of bins for all dimensions (nx=ny=...=bins). range : sequence, optional A sequence of lower and upper bin edges to be used if the edges are not given explicitely in `bins`. Defaults to the minimum and maximum values along each dimension. normed : bool, optional If False, returns the number of samples in each bin. If True, returns the bin density, ie, the bin count divided by the bin hypervolume. weights : array_like (N,), optional An array of values `w_i` weighing each sample `(x_i, y_i, z_i, ...)`. Weights are normalized to 1 if normed is True. If normed is False, the values of the returned histogram are equal to the sum of the weights belonging to the samples falling into each bin. Returns ------- H : ndarray The multidimensional histogram of sample x. See normed and weights for the different possible semantics. edges : list A list of D arrays describing the bin edges for each dimension. See Also -------- histogram: 1-D histogram histogram2d: 2-D histogram Examples -------- >>> r = np.random.randn(100,3) >>> H, edges = np.histogramdd(r, bins = (5, 8, 4)) >>> H.shape, edges[0].size, edges[1].size, edges[2].size ((5, 8, 4), 6, 9, 5) """ raise NotImplementedError def hsplit(ary, indices_or_sections): """Split an array into multiple sub-arrays horizontally (column-wise). Please refer to the `split` documentation. `hsplit` is equivalent to `split` with ``axis=1``, the array is always split along the second axis regardless of the array dimension. See Also -------- split : Split an array into multiple sub-arrays of equal size. Examples -------- >>> x = np.arange(16.0).reshape(4, 4) >>> x array([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.], [ 12., 13., 14., 15.]]) >>> np.hsplit(x, 2) [array([[ 0., 1.], [ 4., 5.], [ 8., 9.], [ 12., 13.]]), array([[ 2., 3.], [ 6., 7.], [ 10., 11.], [ 14., 15.]])] >>> np.hsplit(x, np.array([3, 6])) [array([[ 0., 1., 2.], [ 4., 5., 6.], [ 8., 9., 10.], [ 12., 13., 14.]]), array([[ 3.], [ 7.], [ 11.], [ 15.]]), array([], dtype=float64)] With a higher dimensional array the split is still along the second axis. >>> x = np.arange(8.0).reshape(2, 2, 2) >>> x array([[[ 0., 1.], [ 2., 3.]], [[ 4., 5.], [ 6., 7.]]]) >>> np.hsplit(x, 2) [array([[[ 0., 1.]], [[ 4., 5.]]]), array([[[ 2., 3.]], [[ 6., 7.]]])] """ raise NotImplementedError def hstack(tup): """Stack arrays in sequence horizontally (column wise). Take a sequence of arrays and stack them horizontally to make a single array. Rebuild arrays divided by `hsplit`. Parameters ---------- tup : sequence of ndarrays All arrays must have the same shape along all but the second axis. Returns ------- stacked : ndarray The array formed by stacking the given arrays. See Also -------- vstack : Stack arrays in sequence vertically (row wise). dstack : Stack arrays in sequence depth wise (along third axis). concatenate : Join a sequence of arrays together. hsplit : Split array along second axis. Notes ----- Equivalent to ``np.concatenate(tup, axis=1)`` Examples -------- >>> a = np.array((1,2,3)) >>> b = np.array((2,3,4)) >>> np.hstack((a,b)) array([1, 2, 3, 2, 3, 4]) >>> a = np.array([[1],[2],[3]]) >>> b = np.array([[2],[3],[4]]) >>> np.hstack((a,b)) array([[1, 2], [2, 3], [3, 4]]) """ raise NotImplementedError def i0(x): """Modified Bessel function of the first kind, order 0. Usually denoted :math:`I_0`. This function does broadcast, but will *not* "up-cast" int dtype arguments unless accompanied by at least one float or complex dtype argument (see Raises below). Parameters ---------- x : array_like, dtype float or complex Argument of the Bessel function. Returns ------- out : ndarray, shape = x.shape, dtype = x.dtype The modified Bessel function evaluated at each of the elements of `x`. Raises ------ TypeError: array cannot be safely cast to required type If argument consists exclusively of int dtypes. See Also -------- scipy.special.iv, scipy.special.ive Notes ----- We use the algorithm published by Clenshaw [1]_ and referenced by Abramowitz and Stegun [2]_, for which the function domain is partitioned into the two intervals [0,8] and (8,inf), and Chebyshev polynomial expansions are employed in each interval. Relative error on the domain [0,30] using IEEE arithmetic is documented [3]_ as having a peak of 5.8e-16 with an rms of 1.4e-16 (n = 30000). References ---------- .. [1] C. W. Clenshaw, "Chebyshev series for mathematical functions," in *National Physical Laboratory Mathematical Tables*, vol. 5, London: Her Majesty's Stationery Office, 1962. .. [2] M. Abramowitz and I. A. Stegun, *Handbook of Mathematical Functions*, 10th printing, New York: Dover, 1964, pp. 379. http://www.math.sfu.ca/~cbm/aands/page_379.htm .. [3] http://kobesearch.cpan.org/htdocs/Math-Cephes/Math/Cephes.html Examples -------- >>> np.i0([0.]) array(1.0) >>> np.i0([0., 1. + 2j]) array([ 1.00000000+0.j , 0.18785373+0.64616944j]) """ raise NotImplementedError def imag(val): """Return the imaginary part of the elements of the array. Parameters ---------- val : array_like Input array. Returns ------- out : ndarray Output array. If `val` is real, the type of `val` is used for the output. If `val` has complex elements, the returned type is float. See Also -------- real, angle, real_if_close Examples -------- >>> a = np.array([1+2j, 3+4j, 5+6j]) >>> a.imag array([ 2., 4., 6.]) >>> a.imag = np.array([8, 10, 12]) >>> a array([ 1. +8.j, 3.+10.j, 5.+12.j]) """ raise NotImplementedError def in1d(ar1, ar2, assume_unique=False): """Test whether each element of a 1D array is also present in a second array. Returns a boolean array the same length as `ar1` that is True where an element of `ar1` is in `ar2` and False otherwise. Parameters ---------- ar1 : array_like, shape (M,) Input array. ar2 : array_like The values against which to test each value of `ar1`. assume_unique : bool, optional If True, the input arrays are both assumed to be unique, which can speed up the calculation. Default is False. Returns ------- mask : ndarray of bools, shape(M,) The values `ar1[mask]` are in `ar2`. See Also -------- numpy.lib.arraysetops : Module with a number of other functions for performing set operations on arrays. Notes ----- `in1d` can be considered as an element-wise function version of the python keyword `in`, for 1D sequences. ``in1d(a, b)`` is roughly equivalent to ``np.array([item in b for item in a])``. .. versionadded:: 1.4.0 Examples -------- >>> test = np.array([0, 1, 2, 5, 0]) >>> states = [0, 2] >>> mask = np.in1d(test, states) >>> mask array([ True, False, True, False, True], dtype=bool) >>> test[mask] array([0, 2, 0]) """ raise NotImplementedError def indices(dimensions, dtype=int): """Return an array representing the indices of a grid. Compute an array where the subarrays contain index values 0,1,... varying only along the corresponding axis. Parameters ---------- dimensions : sequence of ints The shape of the grid. dtype : dtype, optional Data type of the result. Returns ------- grid : ndarray The array of grid indices, ``grid.shape = (len(dimensions),) + tuple(dimensions)``. See Also -------- mgrid, meshgrid Notes ----- The output shape is obtained by prepending the number of dimensions in front of the tuple of dimensions, i.e. if `dimensions` is a tuple ``(r0, ..., rN-1)`` of length ``N``, the output shape is ``(N,r0,...,rN-1)``. The subarrays ``grid[k]`` contains the N-D array of indices along the ``k-th`` axis. Explicitly:: grid[k,i0,i1,...,iN-1] = ik Examples -------- >>> grid = np.indices((2, 3)) >>> grid.shape (2, 2, 3) >>> grid[0] # row indices array([[0, 0, 0], [1, 1, 1]]) >>> grid[1] # column indices array([[0, 1, 2], [0, 1, 2]]) The indices can be used as an index into an array. >>> x = np.arange(20).reshape(5, 4) >>> row, col = np.indices((2, 3)) >>> x[row, col] array([[0, 1, 2], [4, 5, 6]]) Note that it would be more straightforward in the above example to extract the required elements directly with ``x[:2, :3]``. """ raise NotImplementedError def info(object=None, maxwidth=76, output=sys.stdout, toplevel='numpy'): """Get help information for a function, class, or module. Parameters ---------- object : object or str, optional Input object or name to get information about. If `object` is a numpy object, its docstring is given. If it is a string, available modules are searched for matching objects. If None, information about `info` itself is returned. maxwidth : int, optional Printing width. output : file like object, optional File like object that the output is written to, default is ``stdout``. The object has to be opened in 'w' or 'a' mode. toplevel : str, optional Start search at this level. See Also -------- source, lookfor Notes ----- When used interactively with an object, ``np.info(obj)`` is equivalent to ``help(obj)`` on the Python prompt or ``obj?`` on the IPython prompt. Examples -------- >>> np.info(np.polyval) # doctest: +SKIP polyval(p, x) Evaluate the polynomial p at x. ... When using a string for `object` it is possible to get multiple results. >>> np.info('fft') # doctest: +SKIP *** Found in numpy *** Core FFT routines ... *** Found in numpy.fft *** fft(a, n=None, axis=-1) ... *** Repeat reference found in numpy.fft.fftpack *** *** Total of 3 references found. *** """ raise NotImplementedError def inner(a, b): """inner(a, b) Inner product of two arrays. Ordinary inner product of vectors for 1-D arrays (without complex conjugation), in higher dimensions a sum product over the last axes. Parameters ---------- a, b : array_like If `a` and `b` are nonscalar, their last dimensions of must match. Returns ------- out : ndarray `out.shape = a.shape[:-1] + b.shape[:-1]` Raises ------ ValueError If the last dimension of `a` and `b` has different size. See Also -------- tensordot : Sum products over arbitrary axes. dot : Generalised matrix product, using second last dimension of `b`. einsum : Einstein summation convention. Notes ----- For vectors (1-D arrays) it computes the ordinary inner-product:: np.inner(a, b) = sum(a[:]*b[:]) More generally, if `ndim(a) = r > 0` and `ndim(b) = s > 0`:: np.inner(a, b) = np.tensordot(a, b, axes=(-1,-1)) or explicitly:: np.inner(a, b)[i0,...,ir-1,j0,...,js-1] = sum(a[i0,...,ir-1,:]*b[j0,...,js-1,:]) In addition `a` or `b` may be scalars, in which case:: np.inner(a,b) = a*b Examples -------- Ordinary inner product for vectors: >>> a = np.array([1,2,3]) >>> b = np.array([0,1,0]) >>> np.inner(a, b) 2 A multidimensional example: >>> a = np.arange(24).reshape((2,3,4)) >>> b = np.arange(4) >>> np.inner(a, b) array([[ 14, 38, 62], [ 86, 110, 134]]) An example where `b` is a scalar: >>> np.inner(np.eye(2), 7) array([[ 7., 0.], [ 0., 7.]]) """ # BUILTIN raise NotImplementedError def insert(arr, obj, values, axis=None): """Insert values along the given axis before the given indices. Parameters ---------- arr : array_like Input array. obj : int, slice or sequence of ints Object that defines the index or indices before which `values` is inserted. values : array_like Values to insert into `arr`. If the type of `values` is different from that of `arr`, `values` is converted to the type of `arr`. axis : int, optional Axis along which to insert `values`. If `axis` is None then `arr` is flattened first. Returns ------- out : ndarray A copy of `arr` with `values` inserted. Note that `insert` does not occur in-place: a new array is returned. If `axis` is None, `out` is a flattened array. See Also -------- append : Append elements at the end of an array. delete : Delete elements from an array. Examples -------- >>> a = np.array([[1, 1], [2, 2], [3, 3]]) >>> a array([[1, 1], [2, 2], [3, 3]]) >>> np.insert(a, 1, 5) array([1, 5, 1, 2, 2, 3, 3]) >>> np.insert(a, 1, 5, axis=1) array([[1, 5, 1], [2, 5, 2], [3, 5, 3]]) >>> b = a.flatten() >>> b array([1, 1, 2, 2, 3, 3]) >>> np.insert(b, [2, 2], [5, 6]) array([1, 1, 5, 6, 2, 2, 3, 3]) >>> np.insert(b, slice(2, 4), [5, 6]) array([1, 1, 5, 2, 6, 2, 3, 3]) >>> np.insert(b, [2, 2], [7.13, False]) # type casting array([1, 1, 7, 0, 2, 2, 3, 3]) >>> x = np.arange(8).reshape(2, 4) >>> idx = (1, 3) >>> np.insert(x, idx, 999, axis=1) array([[ 0, 999, 1, 2, 999, 3], [ 4, 999, 5, 6, 999, 7]]) """ raise NotImplementedError def int_asbuffer(): """ """ # BUILTIN raise NotImplementedError def interp(x, xp, fp, left=None, right=None): """One-dimensional linear interpolation. Returns the one-dimensional piecewise linear interpolant to a function with given values at discrete data-points. Parameters ---------- x : array_like The x-coordinates of the interpolated values. xp : 1-D sequence of floats The x-coordinates of the data points, must be increasing. fp : 1-D sequence of floats The y-coordinates of the data points, same length as `xp`. left : float, optional Value to return for `x < xp[0]`, default is `fp[0]`. right : float, optional Value to return for `x > xp[-1]`, defaults is `fp[-1]`. Returns ------- y : {float, ndarray} The interpolated values, same shape as `x`. Raises ------ ValueError If `xp` and `fp` have different length Notes ----- Does not check that the x-coordinate sequence `xp` is increasing. If `xp` is not increasing, the results are nonsense. A simple check for increasingness is:: np.all(np.diff(xp) > 0) Examples -------- >>> xp = [1, 2, 3] >>> fp = [3, 2, 0] >>> np.interp(2.5, xp, fp) 1.0 >>> np.interp([0, 1, 1.5, 2.72, 3.14], xp, fp) array([ 3. , 3. , 2.5 , 0.56, 0. ]) >>> UNDEF = -99.0 >>> np.interp(3.14, xp, fp, right=UNDEF) -99.0 Plot an interpolant to the sine function: >>> x = np.linspace(0, 2*np.pi, 10) >>> y = np.sin(x) >>> xvals = np.linspace(0, 2*np.pi, 50) >>> yinterp = np.interp(xvals, x, y) >>> import matplotlib.pyplot as plt >>> plt.plot(x, y, 'o') [] >>> plt.plot(xvals, yinterp, '-x') [] >>> plt.show() """ raise NotImplementedError def intersect1d(ar1, ar2, assume_unique=False): """Find the intersection of two arrays. Return the sorted, unique values that are in both of the input arrays. Parameters ---------- ar1, ar2 : array_like Input arrays. assume_unique : bool If True, the input arrays are both assumed to be unique, which can speed up the calculation. Default is False. Returns ------- out : ndarray Sorted 1D array of common and unique elements. See Also -------- numpy.lib.arraysetops : Module with a number of other functions for performing set operations on arrays. Examples -------- >>> np.intersect1d([1, 3, 4, 3], [3, 1, 2, 1]) array([1, 3]) """ raise NotImplementedError def ipmt(rate, per, nper, pv, fv=0.0, when='end'): """Not implemented. Compute the payment portion for loan interest. Parameters ---------- rate : scalar or array_like of shape(M, ) Rate of interest as decimal (not per cent) per period per : scalar or array_like of shape(M, ) Interest paid against the loan changes during the life or the loan. The `per` is the payment period to calculate the interest amount. nper : scalar or array_like of shape(M, ) Number of compounding periods pv : scalar or array_like of shape(M, ) Present value fv : scalar or array_like of shape(M, ), optional Future value when : {{'begin', 1}, {'end', 0}}, {string, int}, optional When payments are due ('begin' (1) or 'end' (0)). Defaults to {'end', 0}. Returns ------- out : ndarray Interest portion of payment. If all input is scalar, returns a scalar float. If any input is array_like, returns interest payment for each input element. If multiple inputs are array_like, they all must have the same shape. See Also -------- ppmt, pmt, pv Notes ----- The total payment is made up of payment against principal plus interest. ``pmt = ppmt + ipmt`` """ raise NotImplementedError def irr(values): """Return the Internal Rate of Return (IRR). This is the "average" periodically compounded rate of return that gives a net present value of 0.0; for a more complete explanation, see Notes below. Parameters ---------- values : array_like, shape(N,) Input cash flows per time period. By convention, net "deposits" are negative and net "withdrawals" are positive. Thus, for example, at least the first element of `values`, which represents the initial investment, will typically be negative. Returns ------- out : float Internal Rate of Return for periodic input values. Notes ----- The IRR is perhaps best understood through an example (illustrated using np.irr in the Examples section below). Suppose one invests 100 units and then makes the following withdrawals at regular (fixed) intervals: 39, 59, 55, 20. Assuming the ending value is 0, one's 100 unit investment yields 173 units; however, due to the combination of compounding and the periodic withdrawals, the "average" rate of return is neither simply 0.73/4 nor (1.73)^0.25-1. Rather, it is the solution (for :math:`r`) of the equation: .. math:: -100 + \frac{39}{1+r} + \frac{59}{(1+r)^2} + \frac{55}{(1+r)^3} + \frac{20}{(1+r)^4} = 0 In general, for `values` :math:`= [v_0, v_1, ... v_M]`, irr is the solution of the equation: [G]_ .. math:: \sum_{t=0}^M{\frac{v_t}{(1+irr)^{t}}} = 0 References ---------- .. [G] L. J. Gitman, "Principles of Managerial Finance, Brief," 3rd ed., Addison-Wesley, 2003, pg. 348. Examples -------- >>> np.irr([-100, 39, 59, 55, 20]) 0.2809484211599611 (Compare with the Example given for numpy.lib.financial.npv) """ raise NotImplementedError def iscomplex(x): """Returns a bool array, where True if input element is complex. What is tested is whether the input has a non-zero imaginary part, not if the input type is complex. Parameters ---------- x : array_like Input array. Returns ------- out : ndarray of bools Output array. See Also -------- isreal iscomplexobj : Return True if x is a complex type or an array of complex numbers. Examples -------- >>> np.iscomplex([1+1j, 1+0j, 4.5, 3, 2, 2j]) array([ True, False, False, False, False, True], dtype=bool) """ raise NotImplementedError def iscomplexobj(x): """Return True if x is a complex type or an array of complex numbers. The type of the input is checked, not the value. So even if the input has an imaginary part equal to zero, `iscomplexobj` evaluates to True if the data type is complex. Parameters ---------- x : any The input can be of any type and shape. Returns ------- y : bool The return value, True if `x` is of a complex type. See Also -------- isrealobj, iscomplex Examples -------- >>> np.iscomplexobj(1) False >>> np.iscomplexobj(1+0j) True >>> np.iscomplexobj([3, 1+0j, True]) True """ raise NotImplementedError def isfortran(a): """Returns True if array is arranged in Fortran-order in memory and dimension > 1. Parameters ---------- a : ndarray Input array. Examples -------- np.array allows to specify whether the array is written in C-contiguous order (last index varies the fastest), or FORTRAN-contiguous order in memory (first index varies the fastest). >>> a = np.array([[1, 2, 3], [4, 5, 6]], order='C') >>> a array([[1, 2, 3], [4, 5, 6]]) >>> np.isfortran(a) False >>> b = np.array([[1, 2, 3], [4, 5, 6]], order='FORTRAN') >>> b array([[1, 2, 3], [4, 5, 6]]) >>> np.isfortran(b) True The transpose of a C-ordered array is a FORTRAN-ordered array. >>> a = np.array([[1, 2, 3], [4, 5, 6]], order='C') >>> a array([[1, 2, 3], [4, 5, 6]]) >>> np.isfortran(a) False >>> b = a.T >>> b array([[1, 4], [2, 5], [3, 6]]) >>> np.isfortran(b) True 1-D arrays always evaluate as False. >>> np.isfortran(np.array([1, 2], order='FORTRAN')) False """ raise NotImplementedError def isneginf(x, y=None): """Test element-wise for negative infinity, return result as bool array. Parameters ---------- x : array_like The input array. y : array_like, optional A boolean array with the same shape and type as `x` to store the result. Returns ------- y : ndarray A boolean array with the same dimensions as the input. If second argument is not supplied then a numpy boolean array is returned with values True where the corresponding element of the input is negative infinity and values False where the element of the input is not negative infinity. If a second argument is supplied the result is stored there. If the type of that array is a numeric type the result is represented as zeros and ones, if the type is boolean then as False and True. The return value `y` is then a reference to that array. See Also -------- isinf, isposinf, isnan, isfinite Notes ----- Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic (IEEE 754). Errors result if the second argument is also supplied when x is a scalar input, or if first and second arguments have different shapes. Examples -------- >>> np.isneginf(np.NINF) array(True, dtype=bool) >>> np.isneginf(np.inf) array(False, dtype=bool) >>> np.isneginf(np.PINF) array(False, dtype=bool) >>> np.isneginf([-np.inf, 0., np.inf]) array([ True, False, False], dtype=bool) >>> x = np.array([-np.inf, 0., np.inf]) >>> y = np.array([2, 2, 2]) >>> np.isneginf(x, y) array([1, 0, 0]) >>> y array([1, 0, 0]) """ raise NotImplementedError def isposinf(x, y=None): """Test element-wise for positive infinity, return result as bool array. Parameters ---------- x : array_like The input array. y : array_like, optional A boolean array with the same shape as `x` to store the result. Returns ------- y : ndarray A boolean array with the same dimensions as the input. If second argument is not supplied then a boolean array is returned with values True where the corresponding element of the input is positive infinity and values False where the element of the input is not positive infinity. If a second argument is supplied the result is stored there. If the type of that array is a numeric type the result is represented as zeros and ones, if the type is boolean then as False and True. The return value `y` is then a reference to that array. See Also -------- isinf, isneginf, isfinite, isnan Notes ----- Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic (IEEE 754). Errors result if the second argument is also supplied when `x` is a scalar input, or if first and second arguments have different shapes. Examples -------- >>> np.isposinf(np.PINF) array(True, dtype=bool) >>> np.isposinf(np.inf) array(True, dtype=bool) >>> np.isposinf(np.NINF) array(False, dtype=bool) >>> np.isposinf([-np.inf, 0., np.inf]) array([False, False, True], dtype=bool) >>> x = np.array([-np.inf, 0., np.inf]) >>> y = np.array([2, 2, 2]) >>> np.isposinf(x, y) array([0, 0, 1]) >>> y array([0, 0, 1]) """ raise NotImplementedError def isreal(x): """Returns a bool array, where True if input element is real. If element has complex type with zero complex part, the return value for that element is True. Parameters ---------- x : array_like Input array. Returns ------- out : ndarray, bool Boolean array of same shape as `x`. See Also -------- iscomplex isrealobj : Return True if x is not a complex type. Examples -------- >>> np.isreal([1+1j, 1+0j, 4.5, 3, 2, 2j]) array([False, True, True, True, True, False], dtype=bool) """ raise NotImplementedError def isrealobj(x): """Return True if x is a not complex type or an array of complex numbers. The type of the input is checked, not the value. So even if the input has an imaginary part equal to zero, `isrealobj` evaluates to False if the data type is complex. Parameters ---------- x : any The input can be of any type and shape. Returns ------- y : bool The return value, False if `x` is of a complex type. See Also -------- iscomplexobj, isreal Examples -------- >>> np.isrealobj(1) True >>> np.isrealobj(1+0j) False >>> np.isrealobj([3, 1+0j, True]) False """ raise NotImplementedError def isscalar(num): """Returns True if the type of `num` is a scalar type. Parameters ---------- num : any Input argument, can be of any type and shape. Returns ------- val : bool True if `num` is a scalar type, False if it is not. Examples -------- >>> np.isscalar(3.1) True >>> np.isscalar([3.1]) False >>> np.isscalar(False) True """ raise NotImplementedError def issctype(rep): """Determines whether the given object represents a scalar data-type. Parameters ---------- rep : any If `rep` is an instance of a scalar dtype, True is returned. If not, False is returned. Returns ------- out : bool Boolean result of check whether `rep` is a scalar dtype. See Also -------- issubsctype, issubdtype, obj2sctype, sctype2char Examples -------- >>> np.issctype(np.int32) True >>> np.issctype(list) False >>> np.issctype(1.1) False Strings are also a scalar type: >>> np.issctype(np.dtype('str')) True """ raise NotImplementedError def issubclass_(arg1, arg2): """Determine if a class is a subclass of a second class. `issubclass_` is equivalent to the Python built-in ``issubclass``, except that it returns False instead of raising a TypeError is one of the arguments is not a class. Parameters ---------- arg1 : class Input class. True is returned if `arg1` is a subclass of `arg2`. arg2 : class or tuple of classes. Input class. If a tuple of classes, True is returned if `arg1` is a subclass of any of the tuple elements. Returns ------- out : bool Whether `arg1` is a subclass of `arg2` or not. See Also -------- issubsctype, issubdtype, issctype Examples -------- >>> np.issubclass_(np.int32, np.int) True >>> np.issubclass_(np.int32, np.float) False """ raise NotImplementedError def issubdtype(arg1, arg2): """Returns True if first argument is a typecode lower/equal in type hierarchy. Parameters ---------- arg1, arg2 : dtype_like dtype or string representing a typecode. Returns ------- out : bool See Also -------- issubsctype, issubclass_ numpy.core.numerictypes : Overview of numpy type hierarchy. Examples -------- >>> np.issubdtype('S1', str) True >>> np.issubdtype(np.float64, np.float32) False """ raise NotImplementedError def issubsctype(arg1, arg2): """Determine if the first argument is a subclass of the second argument. Parameters ---------- arg1, arg2 : dtype or dtype specifier Data-types. Returns ------- out : bool The result. See Also -------- issctype, issubdtype,obj2sctype Examples -------- >>> np.issubsctype('S8', str) True >>> np.issubsctype(np.array([1]), np.int) True >>> np.issubsctype(np.array([1]), np.float) False """ raise NotImplementedError def iterable(y): """Check whether or not an object can be iterated over. Parameters ---------- y : object Input object. Returns ------- b : {0, 1} Return 1 if the object has an iterator method or is a sequence, and 0 otherwise. Examples -------- >>> np.iterable([1, 2, 3]) 1 >>> np.iterable(2) 0 """ raise NotImplementedError def ix_(): """Construct an open mesh from multiple sequences. This function takes N 1-D sequences and returns N outputs with N dimensions each, such that the shape is 1 in all but one dimension and the dimension with the non-unit shape value cycles through all N dimensions. Using `ix_` one can quickly construct index arrays that will index the cross product. ``a[np.ix_([1,3],[2,5])]`` returns the array ``[[a[1,2] a[1,5]], [a[3,2] a[3,5]]]``. Parameters ---------- args : 1-D sequences Returns ------- out : tuple of ndarrays N arrays with N dimensions each, with N the number of input sequences. Together these arrays form an open mesh. See Also -------- ogrid, mgrid, meshgrid Examples -------- >>> a = np.arange(10).reshape(2, 5) >>> a array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]) >>> ixgrid = np.ix_([0,1], [2,4]) >>> ixgrid (array([[0], [1]]), array([[2, 4]])) >>> ixgrid[0].shape, ixgrid[1].shape ((2, 1), (1, 2)) >>> a[ixgrid] array([[2, 4], [7, 9]]) """ raise NotImplementedError def kaiser(M, beta): """Return the Kaiser window. The Kaiser window is a taper formed by using a Bessel function. Parameters ---------- M : int Number of points in the output window. If zero or less, an empty array is returned. beta : float Shape parameter for window. Returns ------- out : array The window, normalized to one (the value one appears only if the number of samples is odd). See Also -------- bartlett, blackman, hamming, hanning Notes ----- The Kaiser window is defined as .. math:: w(n) = I_0\left( \beta \sqrt{1-\frac{4n^2}{(M-1)^2}} \right)/I_0(\beta) with .. math:: \quad -\frac{M-1}{2} \leq n \leq \frac{M-1}{2}, where :math:`I_0` is the modified zeroth-order Bessel function. The Kaiser was named for Jim Kaiser, who discovered a simple approximation to the DPSS window based on Bessel functions. The Kaiser window is a very good approximation to the Digital Prolate Spheroidal Sequence, or Slepian window, which is the transform which maximizes the energy in the main lobe of the window relative to total energy. The Kaiser can approximate many other windows by varying the beta parameter. ==== ======================= beta Window shape ==== ======================= 0 Rectangular 5 Similar to a Hamming 6 Similar to a Hanning 8.6 Similar to a Blackman ==== ======================= A beta value of 14 is probably a good starting point. Note that as beta gets large, the window narrows, and so the number of samples needs to be large enough to sample the increasingly narrow spike, otherwise nans will get returned. Most references to the Kaiser window come from the signal processing literature, where it is used as one of many windowing functions for smoothing values. It is also known as an apodization (which means "removing the foot", i.e. smoothing discontinuities at the beginning and end of the sampled signal) or tapering function. References ---------- .. [1] J. F. Kaiser, "Digital Filters" - Ch 7 in "Systems analysis by digital computer", Editors: F.F. Kuo and J.F. Kaiser, p 218-285. John Wiley and Sons, New York, (1966). .. [2] E.R. Kanasewich, "Time Sequence Analysis in Geophysics", The University of Alberta Press, 1975, pp. 177-178. .. [3] Wikipedia, "Window function", http://en.wikipedia.org/wiki/Window_function Examples -------- >>> from numpy import kaiser >>> kaiser(12, 14) array([ 7.72686684e-06, 3.46009194e-03, 4.65200189e-02, 2.29737120e-01, 5.99885316e-01, 9.45674898e-01, 9.45674898e-01, 5.99885316e-01, 2.29737120e-01, 4.65200189e-02, 3.46009194e-03, 7.72686684e-06]) Plot the window and the frequency response: >>> from numpy import clip, log10, array, kaiser, linspace >>> from numpy.fft import fft, fftshift >>> import matplotlib.pyplot as plt >>> window = kaiser(51, 14) >>> plt.plot(window) [] >>> plt.title("Kaiser window") >>> plt.ylabel("Amplitude") >>> plt.xlabel("Sample") >>> plt.show() >>> plt.figure() >>> A = fft(window, 2048) / 25.5 >>> mag = abs(fftshift(A)) >>> freq = linspace(-0.5,0.5,len(A)) >>> response = 20*log10(mag) >>> response = clip(response,-100,100) >>> plt.plot(freq, response) [] >>> plt.title("Frequency response of Kaiser window") >>> plt.ylabel("Magnitude [dB]") >>> plt.xlabel("Normalized frequency [cycles per sample]") >>> plt.axis('tight') (-0.5, 0.5, -100.0, ...) >>> plt.show() """ raise NotImplementedError def kron(a, b): """Kronecker product of two arrays. Computes the Kronecker product, a composite array made of blocks of the second array scaled by the first. Parameters ---------- a, b : array_like Returns ------- out : ndarray See Also -------- outer : The outer product Notes ----- The function assumes that the number of dimenensions of `a` and `b` are the same, if necessary prepending the smallest with ones. If `a.shape = (r0,r1,..,rN)` and `b.shape = (s0,s1,...,sN)`, the Kronecker product has shape `(r0*s0, r1*s1, ..., rN*SN)`. The elements are products of elements from `a` and `b`, organized explicitly by:: kron(a,b)[k0,k1,...,kN] = a[i0,i1,...,iN] * b[j0,j1,...,jN] where:: kt = it * st + jt, t = 0,...,N In the common 2-D case (N=1), the block structure can be visualized:: [[ a[0,0]*b, a[0,1]*b, ... , a[0,-1]*b ], [ ... ... ], [ a[-1,0]*b, a[-1,1]*b, ... , a[-1,-1]*b ]] Examples -------- >>> np.kron([1,10,100], [5,6,7]) array([ 5, 6, 7, 50, 60, 70, 500, 600, 700]) >>> np.kron([5,6,7], [1,10,100]) array([ 5, 50, 500, 6, 60, 600, 7, 70, 700]) >>> np.kron(np.eye(2), np.ones((2,2))) array([[ 1., 1., 0., 0.], [ 1., 1., 0., 0.], [ 0., 0., 1., 1.], [ 0., 0., 1., 1.]]) >>> a = np.arange(100).reshape((2,5,2,5)) >>> b = np.arange(24).reshape((2,3,4)) >>> c = np.kron(a,b) >>> c.shape (2, 10, 6, 20) >>> I = (1,3,0,2) >>> J = (0,2,1) >>> J1 = (0,) + J # extend to ndim=4 >>> S1 = (1,) + b.shape >>> K = tuple(np.array(I) * np.array(S1) + np.array(J1)) >>> c[K] == a[I]*b[J] True """ raise NotImplementedError def lexsort(keys, axis=-1): """lexsort(keys, axis=-1) Perform an indirect sort using a sequence of keys. Given multiple sorting keys, which can be interpreted as columns in a spreadsheet, lexsort returns an array of integer indices that describes the sort order by multiple columns. The last key in the sequence is used for the primary sort order, the second-to-last key for the secondary sort order, and so on. The keys argument must be a sequence of objects that can be converted to arrays of the same shape. If a 2D array is provided for the keys argument, it's rows are interpreted as the sorting keys and sorting is according to the last row, second last row etc. Parameters ---------- keys : (k,N) array or tuple containing k (N,)-shaped sequences The `k` different "columns" to be sorted. The last column (or row if `keys` is a 2D array) is the primary sort key. axis : int, optional Axis to be indirectly sorted. By default, sort over the last axis. Returns ------- indices : (N,) ndarray of ints Array of indices that sort the keys along the specified axis. See Also -------- argsort : Indirect sort. ndarray.sort : In-place sort. sort : Return a sorted copy of an array. Examples -------- Sort names: first by surname, then by name. >>> surnames = ('Hertz', 'Galilei', 'Hertz') >>> first_names = ('Heinrich', 'Galileo', 'Gustav') >>> ind = np.lexsort((first_names, surnames)) >>> ind array([1, 2, 0]) >>> [surnames[i] + ", " + first_names[i] for i in ind] ['Galilei, Galileo', 'Hertz, Gustav', 'Hertz, Heinrich'] Sort two columns of numbers: >>> a = [1,5,1,4,3,4,4] # First column >>> b = [9,4,0,4,0,2,1] # Second column >>> ind = np.lexsort((b,a)) # Sort by a, then by b >>> print ind [2 0 4 6 5 3 1] >>> [(a[i],b[i]) for i in ind] [(1, 0), (1, 9), (3, 0), (4, 1), (4, 2), (4, 4), (5, 4)] Note that sorting is first according to the elements of ``a``. Secondary sorting is according to the elements of ``b``. A normal ``argsort`` would have yielded: >>> [(a[i],b[i]) for i in np.argsort(a)] [(1, 9), (1, 0), (3, 0), (4, 4), (4, 2), (4, 1), (5, 4)] Structured arrays are sorted lexically by ``argsort``: >>> x = np.array([(1,9), (5,4), (1,0), (4,4), (3,0), (4,2), (4,1)], ... dtype=np.dtype([('x', int), ('y', int)])) >>> np.argsort(x) # or np.argsort(x, order=('x', 'y')) array([2, 0, 4, 6, 5, 3, 1]) """ # BUILTIN raise NotImplementedError def load(file, mmap_mode=None): """Load a pickled, ``.npy``, or ``.npz`` binary file. Parameters ---------- file : file-like object or string The file to read. It must support ``seek()`` and ``read()`` methods. If the filename extension is ``.gz``, the file is first decompressed. mmap_mode: {None, 'r+', 'r', 'w+', 'c'}, optional If not None, then memory-map the file, using the given mode (see `numpy.memmap`). The mode has no effect for pickled or zipped files. A memory-mapped array is stored on disk, and not directly loaded into memory. However, it can be accessed and sliced like any ndarray. Memory mapping is especially useful for accessing small fragments of large files without reading the entire file into memory. Returns ------- result : array, tuple, dict, etc. Data stored in the file. Raises ------ IOError If the input file does not exist or cannot be read. See Also -------- save, savez, loadtxt memmap : Create a memory-map to an array stored in a file on disk. Notes ----- - If the file contains pickle data, then whatever is stored in the pickle is returned. - If the file is a ``.npy`` file, then an array is returned. - If the file is a ``.npz`` file, then a dictionary-like object is returned, containing ``{filename: array}`` key-value pairs, one for each file in the archive. Examples -------- Store data to disk, and load it again: >>> np.save('/tmp/123', np.array([[1, 2, 3], [4, 5, 6]])) >>> np.load('/tmp/123.npy') array([[1, 2, 3], [4, 5, 6]]) Mem-map the stored array, and then access the second row directly from disk: >>> X = np.load('/tmp/123.npy', mmap_mode='r') >>> X[1, :] memmap([4, 5, 6]) """ raise NotImplementedError def loads(): """loads(string) -- Load a pickle from the given string """ # BUILTIN raise NotImplementedError def loadtxt(fname, dtype=float, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0): """Load data from a text file. Each row in the text file must have the same number of values. Parameters ---------- fname : file or str File, filename, or generator to read. If the filename extension is ``.gz`` or ``.bz2``, the file is first decompressed. Note that generators should return byte strings for Python 3k. dtype : data-type, optional Data-type of the resulting array; default: float. If this is a record data-type, the resulting array will be 1-dimensional, and each row will be interpreted as an element of the array. In this case, the number of columns used must match the number of fields in the data-type. comments : str, optional The character used to indicate the start of a comment; default: '#'. delimiter : str, optional The string used to separate values. By default, this is any whitespace. converters : dict, optional A dictionary mapping column number to a function that will convert that column to a float. E.g., if column 0 is a date string: ``converters = {0: datestr2num}``. Converters can also be used to provide a default value for missing data (but see also `genfromtxt`): ``converters = {3: lambda s: float(s.strip() or 0)}``. Default: None. skiprows : int, optional Skip the first `skiprows` lines; default: 0. usecols : sequence, optional Which columns to read, with 0 being the first. For example, ``usecols = (1,4,5)`` will extract the 2nd, 5th and 6th columns. The default, None, results in all columns being read. unpack : bool, optional If True, the returned array is transposed, so that arguments may be unpacked using ``x, y, z = loadtxt(...)``. When used with a record data-type, arrays are returned for each field. Default is False. ndmin : int, optional The returned array will have at least `ndmin` dimensions. Otherwise mono-dimensional axes will be squeezed. Legal values: 0 (default), 1 or 2. .. versionadded:: 1.6.0 Returns ------- out : ndarray Data read from the text file. See Also -------- load, fromstring, fromregex genfromtxt : Load data with missing values handled as specified. scipy.io.loadmat : reads MATLAB data files Notes ----- This function aims to be a fast reader for simply formatted files. The `genfromtxt` function provides more sophisticated handling of, e.g., lines with missing values. Examples -------- >>> from StringIO import StringIO # StringIO behaves like a file object >>> c = StringIO("0 1\n2 3") >>> np.loadtxt(c) array([[ 0., 1.], [ 2., 3.]]) >>> d = StringIO("M 21 72\nF 35 58") >>> np.loadtxt(d, dtype={'names': ('gender', 'age', 'weight'), ... 'formats': ('S1', 'i4', 'f4')}) array([('M', 21, 72.0), ('F', 35, 58.0)], dtype=[('gender', '|S1'), ('age', '>> c = StringIO("1,0,2\n3,0,4") >>> x, y = np.loadtxt(c, delimiter=',', usecols=(0, 2), unpack=True) >>> x array([ 1., 3.]) >>> y array([ 2., 4.]) """ raise NotImplementedError def lookfor(what, module=None, import_modules=True, regenerate=False, output=None): """Do a keyword search on docstrings. A list of of objects that matched the search is displayed, sorted by relevance. All given keywords need to be found in the docstring for it to be returned as a result, but the order does not matter. Parameters ---------- what : str String containing words to look for. module : str or list, optional Name of module(s) whose docstrings to go through. import_modules : bool, optional Whether to import sub-modules in packages. Default is True. regenerate : bool, optional Whether to re-generate the docstring cache. Default is False. output : file-like, optional File-like object to write the output to. If omitted, use a pager. See Also -------- source, info Notes ----- Relevance is determined only roughly, by checking if the keywords occur in the function name, at the start of a docstring, etc. Examples -------- >>> np.lookfor('binary representation') Search results for 'binary representation' ------------------------------------------ numpy.binary_repr Return the binary representation of the input number as a string. numpy.core.setup_common.long_double_representation Given a binary dump as given by GNU od -b, look for long double numpy.base_repr Return a string representation of a number in the given base system. ... """ raise NotImplementedError def mafromtxt(fname): """Load ASCII data stored in a text file and return a masked array. For a complete description of all the input parameters, see `genfromtxt`. See Also -------- numpy.genfromtxt : generic function to load ASCII data. """ raise NotImplementedError def mask_indices(n, mask_func, k=0): """Return the indices to access (n, n) arrays, given a masking function. Assume `mask_func` is a function that, for a square array a of size ``(n, n)`` with a possible offset argument `k`, when called as ``mask_func(a, k)`` returns a new array with zeros in certain locations (functions like `triu` or `tril` do precisely this). Then this function returns the indices where the non-zero values would be located. Parameters ---------- n : int The returned indices will be valid to access arrays of shape (n, n). mask_func : callable A function whose call signature is similar to that of `triu`, `tril`. That is, ``mask_func(x, k)`` returns a boolean array, shaped like `x`. `k` is an optional argument to the function. k : scalar An optional argument which is passed through to `mask_func`. Functions like `triu`, `tril` take a second argument that is interpreted as an offset. Returns ------- indices : tuple of arrays. The `n` arrays of indices corresponding to the locations where ``mask_func(np.ones((n, n)), k)`` is True. See Also -------- triu, tril, triu_indices, tril_indices Notes ----- .. versionadded:: 1.4.0 Examples -------- These are the indices that would allow you to access the upper triangular part of any 3x3 array: >>> iu = np.mask_indices(3, np.triu) For example, if `a` is a 3x3 array: >>> a = np.arange(9).reshape(3, 3) >>> a array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> a[iu] array([0, 1, 2, 4, 5, 8]) An offset can be passed also to the masking function. This gets us the indices starting on the first diagonal right of the main one: >>> iu1 = np.mask_indices(3, np.triu, 1) with which we now extract only three elements: >>> a[iu1] array([1, 2, 5]) """ raise NotImplementedError def mat(data, dtype=None): """Interpret the input as a matrix. Unlike `matrix`, `asmatrix` does not make a copy if the input is already a matrix or an ndarray. Equivalent to ``matrix(data, copy=False)``. Parameters ---------- data : array_like Input data. Returns ------- mat : matrix `data` interpreted as a matrix. Examples -------- >>> x = np.array([[1, 2], [3, 4]]) >>> m = np.asmatrix(x) >>> x[0,0] = 5 >>> m matrix([[5, 2], [3, 4]]) """ raise NotImplementedError def max(a, axis=None, out=None): """Return the maximum of an array or maximum along an axis. Parameters ---------- a : array_like Input data. axis : int, optional Axis along which to operate. By default flattened input is used. out : ndarray, optional Alternate output array in which to place the result. Must be of the same shape and buffer length as the expected output. See `doc.ufuncs` (Section "Output arguments") for more details. Returns ------- amax : ndarray or scalar Maximum of `a`. If `axis` is None, the result is a scalar value. If `axis` is given, the result is an array of dimension ``a.ndim - 1``. See Also -------- nanmax : NaN values are ignored instead of being propagated. fmax : same behavior as the C99 fmax function. argmax : indices of the maximum values. Notes ----- NaN values are propagated, that is if at least one item is NaN, the corresponding max value will be NaN as well. To ignore NaN values (MATLAB behavior), please use nanmax. Examples -------- >>> a = np.arange(4).reshape((2,2)) >>> a array([[0, 1], [2, 3]]) >>> np.amax(a) 3 >>> np.amax(a, axis=0) array([2, 3]) >>> np.amax(a, axis=1) array([1, 3]) >>> b = np.arange(5, dtype=np.float) >>> b[2] = np.NaN >>> np.amax(b) nan >>> np.nanmax(b) 4.0 """ raise NotImplementedError def maximum_sctype(t): """Return the scalar type of highest precision of the same kind as the input. Parameters ---------- t : dtype or dtype specifier The input data type. This can be a `dtype` object or an object that is convertible to a `dtype`. Returns ------- out : dtype The highest precision data type of the same kind (`dtype.kind`) as `t`. See Also -------- obj2sctype, mintypecode, sctype2char dtype Examples -------- >>> np.maximum_sctype(np.int) >>> np.maximum_sctype(np.uint8) >>> np.maximum_sctype(np.complex) >>> np.maximum_sctype(str) >>> np.maximum_sctype('i2') >>> np.maximum_sctype('f4') """ raise NotImplementedError def may_share_memory(a, b): """Determine if two arrays can share memory The memory-bounds of a and b are computed. If they overlap then this function returns True. Otherwise, it returns False. A return of True does not necessarily mean that the two arrays share any element. It just means that they *might*. Parameters ---------- a, b : ndarray Returns ------- out : bool Examples -------- >>> np.may_share_memory(np.array([1,2]), np.array([5,8,9])) False """ raise NotImplementedError def mean(a, axis=None, dtype=None, out=None): """Compute the arithmetic mean along the specified axis. Returns the average of the array elements. The average is taken over the flattened array by default, otherwise over the specified axis. `float64` intermediate and return values are used for integer inputs. Parameters ---------- a : array_like Array containing numbers whose mean is desired. If `a` is not an array, a conversion is attempted. axis : int, optional Axis along which the means are computed. The default is to compute the mean of the flattened array. dtype : data-type, optional Type to use in computing the mean. For integer inputs, the default is `float64`; for floating point inputs, it is the same as the input dtype. out : ndarray, optional Alternate output array in which to place the result. The default is ``None``; if provided, it must have the same shape as the expected output, but the type will be cast if necessary. See `doc.ufuncs` for details. Returns ------- m : ndarray, see dtype parameter above If `out=None`, returns a new array containing the mean values, otherwise a reference to the output array is returned. See Also -------- average : Weighted average Notes ----- The arithmetic mean is the sum of the elements along the axis divided by the number of elements. Note that for floating-point input, the mean is computed using the same precision the input has. Depending on the input data, this can cause the results to be inaccurate, especially for `float32` (see example below). Specifying a higher-precision accumulator using the `dtype` keyword can alleviate this issue. Examples -------- >>> a = np.array([[1, 2], [3, 4]]) >>> np.mean(a) 2.5 >>> np.mean(a, axis=0) array([ 2., 3.]) >>> np.mean(a, axis=1) array([ 1.5, 3.5]) In single precision, `mean` can be inaccurate: >>> a = np.zeros((2, 512*512), dtype=np.float32) >>> a[0, :] = 1.0 >>> a[1, :] = 0.1 >>> np.mean(a) 0.546875 Computing the mean in float64 is more accurate: >>> np.mean(a, dtype=np.float64) 0.55000000074505806 """ raise NotImplementedError def median(a, axis=None, out=None, overwrite_input=False): """Compute the median along the specified axis. Returns the median of the array elements. Parameters ---------- a : array_like Input array or object that can be converted to an array. axis : {None, int}, optional Axis along which the medians are computed. The default (axis=None) is to compute the median along a flattened version of the array. out : ndarray, optional Alternative output array in which to place the result. It must have the same shape and buffer length as the expected output, but the type (of the output) will be cast if necessary. overwrite_input : {False, True}, optional If True, then allow use of memory of input array (a) for calculations. The input array will be modified by the call to median. This will save memory when you do not need to preserve the contents of the input array. Treat the input as undefined, but it will probably be fully or partially sorted. Default is False. Note that, if `overwrite_input` is True and the input is not already an ndarray, an error will be raised. Returns ------- median : ndarray A new array holding the result (unless `out` is specified, in which case that array is returned instead). If the input contains integers, or floats of smaller precision than 64, then the output data-type is float64. Otherwise, the output data-type is the same as that of the input. See Also -------- mean, percentile Notes ----- Given a vector V of length N, the median of V is the middle value of a sorted copy of V, ``V_sorted`` - i.e., ``V_sorted[(N-1)/2]``, when N is odd. When N is even, it is the average of the two middle values of ``V_sorted``. Examples -------- >>> a = np.array([[10, 7, 4], [3, 2, 1]]) >>> a array([[10, 7, 4], [ 3, 2, 1]]) >>> np.median(a) 3.5 >>> np.median(a, axis=0) array([ 6.5, 4.5, 2.5]) >>> np.median(a, axis=1) array([ 7., 2.]) >>> m = np.median(a, axis=0) >>> out = np.zeros_like(m) >>> np.median(a, axis=0, out=m) array([ 6.5, 4.5, 2.5]) >>> m array([ 6.5, 4.5, 2.5]) >>> b = a.copy() >>> np.median(b, axis=1, overwrite_input=True) array([ 7., 2.]) >>> assert not np.all(a==b) >>> b = a.copy() >>> np.median(b, axis=None, overwrite_input=True) 3.5 >>> assert not np.all(a==b) """ raise NotImplementedError def meshgrid(x, y): """Return coordinate matrices from two coordinate vectors. Parameters ---------- x, y : ndarray Two 1-D arrays representing the x and y coordinates of a grid. Returns ------- X, Y : ndarray For vectors `x`, `y` with lengths ``Nx=len(x)`` and ``Ny=len(y)``, return `X`, `Y` where `X` and `Y` are ``(Ny, Nx)`` shaped arrays with the elements of `x` and y repeated to fill the matrix along the first dimension for `x`, the second for `y`. See Also -------- index_tricks.mgrid : Construct a multi-dimensional "meshgrid" using indexing notation. index_tricks.ogrid : Construct an open multi-dimensional "meshgrid" using indexing notation. Examples -------- >>> X, Y = np.meshgrid([1,2,3], [4,5,6,7]) >>> X array([[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]) >>> Y array([[4, 4, 4], [5, 5, 5], [6, 6, 6], [7, 7, 7]]) `meshgrid` is very useful to evaluate functions on a grid. >>> x = np.arange(-5, 5, 0.1) >>> y = np.arange(-5, 5, 0.1) >>> xx, yy = np.meshgrid(x, y) >>> z = np.sin(xx**2+yy**2)/(xx**2+yy**2) """ raise NotImplementedError def min(a, axis=None, out=None): """Return the minimum of an array or minimum along an axis. Parameters ---------- a : array_like Input data. axis : int, optional Axis along which to operate. By default a flattened input is used. out : ndarray, optional Alternative output array in which to place the result. Must be of the same shape and buffer length as the expected output. See `doc.ufuncs` (Section "Output arguments") for more details. Returns ------- amin : ndarray A new array or a scalar array with the result. See Also -------- nanmin: nan values are ignored instead of being propagated fmin: same behavior as the C99 fmin function argmin: Return the indices of the minimum values. amax, nanmax, fmax Notes ----- NaN values are propagated, that is if at least one item is nan, the corresponding min value will be nan as well. To ignore NaN values (matlab behavior), please use nanmin. Examples -------- >>> a = np.arange(4).reshape((2,2)) >>> a array([[0, 1], [2, 3]]) >>> np.amin(a) # Minimum of the flattened array 0 >>> np.amin(a, axis=0) # Minima along the first axis array([0, 1]) >>> np.amin(a, axis=1) # Minima along the second axis array([0, 2]) >>> b = np.arange(5, dtype=np.float) >>> b[2] = np.NaN >>> np.amin(b) nan >>> np.nanmin(b) 0.0 """ raise NotImplementedError def min_scalar_type(a): """min_scalar_type(a) For scalar ``a``, returns the data type with the smallest size and smallest scalar kind which can hold its value. For non-scalar array ``a``, returns the vector's dtype unmodified. Floating point values are not demoted to integers, and complex values are not demoted to floats. Parameters ---------- a : scalar or array_like The value whose minimal data type is to be found. Returns ------- out : dtype The minimal data type. Notes ----- .. versionadded:: 1.6.0 See Also -------- result_type, promote_types, dtype, can_cast Examples -------- >>> np.min_scalar_type(10) dtype('uint8') >>> np.min_scalar_type(-260) dtype('int16') >>> np.min_scalar_type(3.1) dtype('float16') >>> np.min_scalar_type(1e50) dtype('float64') >>> np.min_scalar_type(np.arange(4,dtype='f8')) dtype('float64') """ # BUILTIN raise NotImplementedError def mintypecode(typechars, typeset='GDFgdf', default='d'): """Return the character for the minimum-size type to which given types can be safely cast. The returned type character must represent the smallest size dtype such that an array of the returned type can handle the data from an array of all types in `typechars` (or if `typechars` is an array, then its dtype.char). Parameters ---------- typechars : list of str or array_like If a list of strings, each string should represent a dtype. If array_like, the character representation of the array dtype is used. typeset : str or list of str, optional The set of characters that the returned character is chosen from. The default set is 'GDFgdf'. default : str, optional The default character, this is returned if none of the characters in `typechars` matches a character in `typeset`. Returns ------- typechar : str The character representing the minimum-size type that was found. See Also -------- dtype, sctype2char, maximum_sctype Examples -------- >>> np.mintypecode(['d', 'f', 'S']) 'd' >>> x = np.array([1.1, 2-3.j]) >>> np.mintypecode(x) 'D' >>> np.mintypecode('abceh', default='G') 'G' """ raise NotImplementedError def mirr(values, finance_rate, reinvest_rate): """Modified internal rate of return. Parameters ---------- values : array_like Cash flows (must contain at least one positive and one negative value) or nan is returned. The first value is considered a sunk cost at time zero. finance_rate : scalar Interest rate paid on the cash flows reinvest_rate : scalar Interest rate received on the cash flows upon reinvestment Returns ------- out : float Modified internal rate of return """ raise NotImplementedError def msort(a): """Return a copy of an array sorted along the first axis. Parameters ---------- a : array_like Array to be sorted. Returns ------- sorted_array : ndarray Array of the same type and shape as `a`. See Also -------- sort Notes ----- ``np.msort(a)`` is equivalent to ``np.sort(a, axis=0)``. """ raise NotImplementedError def nan_to_num(x): """Replace nan with zero and inf with finite numbers. Returns an array or scalar replacing Not a Number (NaN) with zero, (positive) infinity with a very large number and negative infinity with a very small (or negative) number. Parameters ---------- x : array_like Input data. Returns ------- out : ndarray, float Array with the same shape as `x` and dtype of the element in `x` with the greatest precision. NaN is replaced by zero, and infinity (-infinity) is replaced by the largest (smallest or most negative) floating point value that fits in the output dtype. All finite numbers are upcast to the output dtype (default float64). See Also -------- isinf : Shows which elements are negative or negative infinity. isneginf : Shows which elements are negative infinity. isposinf : Shows which elements are positive infinity. isnan : Shows which elements are Not a Number (NaN). isfinite : Shows which elements are finite (not NaN, not infinity) Notes ----- Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic (IEEE 754). This means that Not a Number is not equivalent to infinity. Examples -------- >>> np.set_printoptions(precision=8) >>> x = np.array([np.inf, -np.inf, np.nan, -128, 128]) >>> np.nan_to_num(x) array([ 1.79769313e+308, -1.79769313e+308, 0.00000000e+000, -1.28000000e+002, 1.28000000e+002]) """ raise NotImplementedError def nanargmax(a, axis=None): """Return indices of the maximum values over an axis, ignoring NaNs. Parameters ---------- a : array_like Input data. axis : int, optional Axis along which to operate. By default flattened input is used. Returns ------- index_array : ndarray An array of indices or a single index value. See Also -------- argmax, nanargmin Examples -------- >>> a = np.array([[np.nan, 4], [2, 3]]) >>> np.argmax(a) 0 >>> np.nanargmax(a) 1 >>> np.nanargmax(a, axis=0) array([1, 0]) >>> np.nanargmax(a, axis=1) array([1, 1]) """ raise NotImplementedError def nanargmin(a, axis=None): """Return indices of the minimum values over an axis, ignoring NaNs. Parameters ---------- a : array_like Input data. axis : int, optional Axis along which to operate. By default flattened input is used. Returns ------- index_array : ndarray An array of indices or a single index value. See Also -------- argmin, nanargmax Examples -------- >>> a = np.array([[np.nan, 4], [2, 3]]) >>> np.argmin(a) 0 >>> np.nanargmin(a) 2 >>> np.nanargmin(a, axis=0) array([1, 1]) >>> np.nanargmin(a, axis=1) array([1, 0]) """ raise NotImplementedError def nanmax(a, axis=None): """Return the maximum of an array or maximum along an axis ignoring any NaNs. Parameters ---------- a : array_like Array containing numbers whose maximum is desired. If `a` is not an array, a conversion is attempted. axis : int, optional Axis along which the maximum is computed. The default is to compute the maximum of the flattened array. Returns ------- nanmax : ndarray An array with the same shape as `a`, with the specified axis removed. If `a` is a 0-d array, or if axis is None, a ndarray scalar is returned. The the same dtype as `a` is returned. See Also -------- numpy.amax : Maximum across array including any Not a Numbers. numpy.nanmin : Minimum across array ignoring any Not a Numbers. isnan : Shows which elements are Not a Number (NaN). isfinite: Shows which elements are not: Not a Number, positive and negative infinity Notes ----- Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic (IEEE 754). This means that Not a Number is not equivalent to infinity. Positive infinity is treated as a very large number and negative infinity is treated as a very small (i.e. negative) number. If the input has a integer type the function is equivalent to np.max. Examples -------- >>> a = np.array([[1, 2], [3, np.nan]]) >>> np.nanmax(a) 3.0 >>> np.nanmax(a, axis=0) array([ 3., 2.]) >>> np.nanmax(a, axis=1) array([ 2., 3.]) When positive infinity and negative infinity are present: >>> np.nanmax([1, 2, np.nan, np.NINF]) 2.0 >>> np.nanmax([1, 2, np.nan, np.inf]) inf """ raise NotImplementedError def nanmin(a, axis=None): """Return the minimum of an array or minimum along an axis ignoring any NaNs. Parameters ---------- a : array_like Array containing numbers whose minimum is desired. axis : int, optional Axis along which the minimum is computed.The default is to compute the minimum of the flattened array. Returns ------- nanmin : ndarray A new array or a scalar array with the result. See Also -------- numpy.amin : Minimum across array including any Not a Numbers. numpy.nanmax : Maximum across array ignoring any Not a Numbers. isnan : Shows which elements are Not a Number (NaN). isfinite: Shows which elements are not: Not a Number, positive and negative infinity Notes ----- Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic (IEEE 754). This means that Not a Number is not equivalent to infinity. Positive infinity is treated as a very large number and negative infinity is treated as a very small (i.e. negative) number. If the input has a integer type the function is equivalent to np.min. Examples -------- >>> a = np.array([[1, 2], [3, np.nan]]) >>> np.nanmin(a) 1.0 >>> np.nanmin(a, axis=0) array([ 1., 2.]) >>> np.nanmin(a, axis=1) array([ 1., 3.]) When positive infinity and negative infinity are present: >>> np.nanmin([1, 2, np.nan, np.inf]) 1.0 >>> np.nanmin([1, 2, np.nan, np.NINF]) -inf """ raise NotImplementedError def nansum(a, axis=None): """Return the sum of array elements over a given axis treating Not a Numbers (NaNs) as zero. Parameters ---------- a : array_like Array containing numbers whose sum is desired. If `a` is not an array, a conversion is attempted. axis : int, optional Axis along which the sum is computed. The default is to compute the sum of the flattened array. Returns ------- y : ndarray An array with the same shape as a, with the specified axis removed. If a is a 0-d array, or if axis is None, a scalar is returned with the same dtype as `a`. See Also -------- numpy.sum : Sum across array including Not a Numbers. isnan : Shows which elements are Not a Number (NaN). isfinite: Shows which elements are not: Not a Number, positive and negative infinity Notes ----- Numpy uses the IEEE Standard for Binary Floating-Point for Arithmetic (IEEE 754). This means that Not a Number is not equivalent to infinity. If positive or negative infinity are present the result is positive or negative infinity. But if both positive and negative infinity are present, the result is Not A Number (NaN). Arithmetic is modular when using integer types (all elements of `a` must be finite i.e. no elements that are NaNs, positive infinity and negative infinity because NaNs are floating point types), and no error is raised on overflow. Examples -------- >>> np.nansum(1) 1 >>> np.nansum([1]) 1 >>> np.nansum([1, np.nan]) 1.0 >>> a = np.array([[1, 1], [1, np.nan]]) >>> np.nansum(a) 3.0 >>> np.nansum(a, axis=0) array([ 2., 1.]) When positive infinity and negative infinity are present >>> np.nansum([1, np.nan, np.inf]) inf >>> np.nansum([1, np.nan, np.NINF]) -inf >>> np.nansum([1, np.nan, np.inf, np.NINF]) nan """ raise NotImplementedError def ndfromtxt(fname): """Load ASCII data stored in a file and return it as a single array. Complete description of all the optional input parameters is available in the docstring of the `genfromtxt` function. See Also -------- numpy.genfromtxt : generic function. """ raise NotImplementedError def ndim(a): """Return the number of dimensions of an array. Parameters ---------- a : array_like Input array. If it is not already an ndarray, a conversion is attempted. Returns ------- number_of_dimensions : int The number of dimensions in `a`. Scalars are zero-dimensional. See Also -------- ndarray.ndim : equivalent method shape : dimensions of array ndarray.shape : dimensions of array Examples -------- >>> np.ndim([[1,2,3],[4,5,6]]) 2 >>> np.ndim(np.array([[1,2,3],[4,5,6]])) 2 >>> np.ndim(1) 0 """ raise NotImplementedError def nested_iters(): """ """ # BUILTIN raise NotImplementedError def newbuffer(size): """newbuffer(size) Return a new uninitialized buffer object of size bytes """ # BUILTIN raise NotImplementedError def nonzero(a): """Return the indices of the elements that are non-zero. Returns a tuple of arrays, one for each dimension of `a`, containing the indices of the non-zero elements in that dimension. The corresponding non-zero values can be obtained with:: a[nonzero(a)] To group the indices by element, rather than dimension, use:: transpose(nonzero(a)) The result of this is always a 2-D array, with a row for each non-zero element. Parameters ---------- a : array_like Input array. Returns ------- tuple_of_arrays : tuple Indices of elements that are non-zero. See Also -------- flatnonzero : Return indices that are non-zero in the flattened version of the input array. ndarray.nonzero : Equivalent ndarray method. count_nonzero : Counts the number of non-zero elements in the input array. Examples -------- >>> x = np.eye(3) >>> x array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]]) >>> np.nonzero(x) (array([0, 1, 2]), array([0, 1, 2])) >>> x[np.nonzero(x)] array([ 1., 1., 1.]) >>> np.transpose(np.nonzero(x)) array([[0, 0], [1, 1], [2, 2]]) A common use for ``nonzero`` is to find the indices of an array, where a condition is True. Given an array `a`, the condition `a` > 3 is a boolean array and since False is interpreted as 0, np.nonzero(a > 3) yields the indices of the `a` where the condition is true. >>> a = np.array([[1,2,3],[4,5,6],[7,8,9]]) >>> a > 3 array([[False, False, False], [ True, True, True], [ True, True, True]], dtype=bool) >>> np.nonzero(a > 3) (array([1, 1, 1, 2, 2, 2]), array([0, 1, 2, 0, 1, 2])) The ``nonzero`` method of the boolean array can also be called. >>> (a > 3).nonzero() (array([1, 1, 1, 2, 2, 2]), array([0, 1, 2, 0, 1, 2])) """ raise NotImplementedError def nper(rate, pmt, pv, fv=0, when='end'): """Compute the number of periodic payments. Parameters ---------- rate : array_like Rate of interest (per period) pmt : array_like Payment pv : array_like Present value fv : array_like, optional Future value when : {{'begin', 1}, {'end', 0}}, {string, int}, optional When payments are due ('begin' (1) or 'end' (0)) Notes ----- The number of periods ``nper`` is computed by solving the equation:: fv + pv*(1+rate)**nper + pmt*(1+rate*when)/rate*((1+rate)**nper-1) = 0 but if ``rate = 0`` then:: fv + pv + pmt*nper = 0 Examples -------- If you only had $150/month to pay towards the loan, how long would it take to pay-off a loan of $8,000 at 7% annual interest? >>> np.nper(0.07/12, -150, 8000) 64.073348770661852 So, over 64 months would be required to pay off the loan. The same analysis could be done with several different interest rates and/or payments and/or total amounts to produce an entire table. >>> np.nper(*(np.ogrid[0.07/12: 0.08/12: 0.01/12, ... -150 : -99 : 50 , ... 8000 : 9001 : 1000])) array([[[ 64.07334877, 74.06368256], [ 108.07548412, 127.99022654]], [[ 66.12443902, 76.87897353], [ 114.70165583, 137.90124779]]]) """ raise NotImplementedError def npv(rate, values): """Returns the NPV (Net Present Value) of a cash flow series. Parameters ---------- rate : scalar The discount rate. values : array_like, shape(M, ) The values of the time series of cash flows. The (fixed) time interval between cash flow "events" must be the same as that for which `rate` is given (i.e., if `rate` is per year, then precisely a year is understood to elapse between each cash flow event). By convention, investments or "deposits" are negative, income or "withdrawals" are positive; `values` must begin with the initial investment, thus `values[0]` will typically be negative. Returns ------- out : float The NPV of the input cash flow series `values` at the discount `rate`. Notes ----- Returns the result of: [G]_ .. math :: \sum_{t=0}^M{\frac{values_t}{(1+rate)^{t}}} References ---------- .. [G] L. J. Gitman, "Principles of Managerial Finance, Brief," 3rd ed., Addison-Wesley, 2003, pg. 346. Examples -------- >>> np.npv(0.281,[-100, 39, 59, 55, 20]) -0.0066187288356340801 (Compare with the Example given for numpy.lib.financial.irr) """ raise NotImplementedError def obj2sctype(rep, default=None): """Return the scalar dtype or NumPy equivalent of Python type of an object. Parameters ---------- rep : any The object of which the type is returned. default : any, optional If given, this is returned for objects whose types can not be determined. If not given, None is returned for those objects. Returns ------- dtype : dtype or Python type The data type of `rep`. See Also -------- sctype2char, issctype, issubsctype, issubdtype, maximum_sctype Examples -------- >>> np.obj2sctype(np.int32) >>> np.obj2sctype(np.array([1., 2.])) >>> np.obj2sctype(np.array([1.j])) >>> np.obj2sctype(dict) >>> np.obj2sctype('string') >>> np.obj2sctype(1, default=list) """ raise NotImplementedError def outer(a, b): """Compute the outer product of two vectors. Given two vectors, ``a = [a0, a1, ..., aM]`` and ``b = [b0, b1, ..., bN]``, the outer product [1]_ is:: [[a0*b0 a0*b1 ... a0*bN ] [a1*b0 . [ ... . [aM*b0 aM*bN ]] Parameters ---------- a, b : array_like, shape (M,), (N,) First and second input vectors. Inputs are flattened if they are not already 1-dimensional. Returns ------- out : ndarray, shape (M, N) ``out[i, j] = a[i] * b[j]`` See also -------- inner, einsum References ---------- .. [1] : G. H. Golub and C. F. van Loan, *Matrix Computations*, 3rd ed., Baltimore, MD, Johns Hopkins University Press, 1996, pg. 8. Examples -------- Make a (*very* coarse) grid for computing a Mandelbrot set: >>> rl = np.outer(np.ones((5,)), np.linspace(-2, 2, 5)) >>> rl array([[-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.]]) >>> im = np.outer(1j*np.linspace(2, -2, 5), np.ones((5,))) >>> im array([[ 0.+2.j, 0.+2.j, 0.+2.j, 0.+2.j, 0.+2.j], [ 0.+1.j, 0.+1.j, 0.+1.j, 0.+1.j, 0.+1.j], [ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j], [ 0.-1.j, 0.-1.j, 0.-1.j, 0.-1.j, 0.-1.j], [ 0.-2.j, 0.-2.j, 0.-2.j, 0.-2.j, 0.-2.j]]) >>> grid = rl + im >>> grid array([[-2.+2.j, -1.+2.j, 0.+2.j, 1.+2.j, 2.+2.j], [-2.+1.j, -1.+1.j, 0.+1.j, 1.+1.j, 2.+1.j], [-2.+0.j, -1.+0.j, 0.+0.j, 1.+0.j, 2.+0.j], [-2.-1.j, -1.-1.j, 0.-1.j, 1.-1.j, 2.-1.j], [-2.-2.j, -1.-2.j, 0.-2.j, 1.-2.j, 2.-2.j]]) An example using a "vector" of letters: >>> x = np.array(['a', 'b', 'c'], dtype=object) >>> np.outer(x, [1, 2, 3]) array([[a, aa, aaa], [b, bb, bbb], [c, cc, ccc]], dtype=object) """ raise NotImplementedError def packbits(myarray, axis=None): """packbits(myarray, axis=None) Packs the elements of a binary-valued array into bits in a uint8 array. The result is padded to full bytes by inserting zero bits at the end. Parameters ---------- myarray : array_like An integer type array whose elements should be packed to bits. axis : int, optional The dimension over which bit-packing is done. ``None`` implies packing the flattened array. Returns ------- packed : ndarray Array of type uint8 whose elements represent bits corresponding to the logical (0 or nonzero) value of the input elements. The shape of `packed` has the same number of dimensions as the input (unless `axis` is None, in which case the output is 1-D). See Also -------- unpackbits: Unpacks elements of a uint8 array into a binary-valued output array. Examples -------- >>> a = np.array([[[1,0,1], ... [0,1,0]], ... [[1,1,0], ... [0,0,1]]]) >>> b = np.packbits(a, axis=-1) >>> b array([[[160],[64]],[[192],[32]]], dtype=uint8) Note that in binary 160 = 1010 0000, 64 = 0100 0000, 192 = 1100 0000, and 32 = 0010 0000. """ # BUILTIN raise NotImplementedError def percentile(a, q, axis=None, out=None, overwrite_input=False): """Compute the qth percentile of the data along the specified axis. Returns the qth percentile of the array elements. Parameters ---------- a : array_like Input array or object that can be converted to an array. q : float in range of [0,100] (or sequence of floats) Percentile to compute which must be between 0 and 100 inclusive. axis : int, optional Axis along which the percentiles are computed. The default (None) is to compute the median along a flattened version of the array. out : ndarray, optional Alternative output array in which to place the result. It must have the same shape and buffer length as the expected output, but the type (of the output) will be cast if necessary. overwrite_input : bool, optional If True, then allow use of memory of input array `a` for calculations. The input array will be modified by the call to median. This will save memory when you do not need to preserve the contents of the input array. Treat the input as undefined, but it will probably be fully or partially sorted. Default is False. Note that, if `overwrite_input` is True and the input is not already an array, an error will be raised. Returns ------- pcntile : ndarray A new array holding the result (unless `out` is specified, in which case that array is returned instead). If the input contains integers, or floats of smaller precision than 64, then the output data-type is float64. Otherwise, the output data-type is the same as that of the input. See Also -------- mean, median Notes ----- Given a vector V of length N, the qth percentile of V is the qth ranked value in a sorted copy of V. A weighted average of the two nearest neighbors is used if the normalized ranking does not match q exactly. The same as the median if ``q=0.5``, the same as the minimum if ``q=0`` and the same as the maximum if ``q=1``. Examples -------- >>> a = np.array([[10, 7, 4], [3, 2, 1]]) >>> a array([[10, 7, 4], [ 3, 2, 1]]) >>> np.percentile(a, 50) 3.5 >>> np.percentile(a, 0.5, axis=0) array([ 6.5, 4.5, 2.5]) >>> np.percentile(a, 50, axis=1) array([ 7., 2.]) >>> m = np.percentile(a, 50, axis=0) >>> out = np.zeros_like(m) >>> np.percentile(a, 50, axis=0, out=m) array([ 6.5, 4.5, 2.5]) >>> m array([ 6.5, 4.5, 2.5]) >>> b = a.copy() >>> np.percentile(b, 50, axis=1, overwrite_input=True) array([ 7., 2.]) >>> assert not np.all(a==b) >>> b = a.copy() >>> np.percentile(b, 50, axis=None, overwrite_input=True) 3.5 """ raise NotImplementedError def piecewise(x, condlist, funclist): """Evaluate a piecewise-defined function. Given a set of conditions and corresponding functions, evaluate each function on the input data wherever its condition is true. Parameters ---------- x : ndarray The input domain. condlist : list of bool arrays Each boolean array corresponds to a function in `funclist`. Wherever `condlist[i]` is True, `funclist[i](x)` is used as the output value. Each boolean array in `condlist` selects a piece of `x`, and should therefore be of the same shape as `x`. The length of `condlist` must correspond to that of `funclist`. If one extra function is given, i.e. if ``len(funclist) - len(condlist) == 1``, then that extra function is the default value, used wherever all conditions are false. funclist : list of callables, f(x,*args,**kw), or scalars Each function is evaluated over `x` wherever its corresponding condition is True. It should take an array as input and give an array or a scalar value as output. If, instead of a callable, a scalar is provided then a constant function (``lambda x: scalar``) is assumed. args : tuple, optional Any further arguments given to `piecewise` are passed to the functions upon execution, i.e., if called ``piecewise(..., ..., 1, 'a')``, then each function is called as ``f(x, 1, 'a')``. kw : dict, optional Keyword arguments used in calling `piecewise` are passed to the functions upon execution, i.e., if called ``piecewise(..., ..., lambda=1)``, then each function is called as ``f(x, lambda=1)``. Returns ------- out : ndarray The output is the same shape and type as x and is found by calling the functions in `funclist` on the appropriate portions of `x`, as defined by the boolean arrays in `condlist`. Portions not covered by any condition have undefined values. See Also -------- choose, select, where Notes ----- This is similar to choose or select, except that functions are evaluated on elements of `x` that satisfy the corresponding condition from `condlist`. The result is:: |-- |funclist[0](x[condlist[0]]) out = |funclist[1](x[condlist[1]]) |... |funclist[n2](x[condlist[n2]]) |-- Examples -------- Define the sigma function, which is -1 for ``x < 0`` and +1 for ``x >= 0``. >>> x = np.arange(6) - 2.5 >>> np.piecewise(x, [x < 0, x >= 0], [-1, 1]) array([-1., -1., -1., 1., 1., 1.]) Define the absolute value, which is ``-x`` for ``x <0`` and ``x`` for ``x >= 0``. >>> np.piecewise(x, [x < 0, x >= 0], [lambda x: -x, lambda x: x]) array([ 2.5, 1.5, 0.5, 0.5, 1.5, 2.5]) """ raise NotImplementedError def pkgload(): """Load one or more packages into parent package top-level namespace. This function is intended to shorten the need to import many subpackages, say of scipy, constantly with statements such as import scipy.linalg, scipy.fftpack, scipy.etc... Instead, you can say: import scipy scipy.pkgload('linalg','fftpack',...) or scipy.pkgload() to load all of them in one call. If a name which doesn't exist in scipy's namespace is given, a warning is shown. Parameters ---------- *packages : arg-tuple the names (one or more strings) of all the modules one wishes to load into the top-level namespace. verbose= : integer verbosity level [default: -1]. verbose=-1 will suspend also warnings. force= : bool when True, force reloading loaded packages [default: False]. postpone= : bool when True, don't load packages [default: False] """ raise NotImplementedError def place(arr, mask, vals): """Change elements of an array based on conditional and input values. Similar to ``np.putmask(arr, mask, vals)``, the difference is that `place` uses the first N elements of `vals`, where N is the number of True values in `mask`, while `putmask` uses the elements where `mask` is True. Note that `extract` does the exact opposite of `place`. Parameters ---------- arr : array_like Array to put data into. mask : array_like Boolean mask array. Must have the same size as `a`. vals : 1-D sequence Values to put into `a`. Only the first N elements are used, where N is the number of True values in `mask`. If `vals` is smaller than N it will be repeated. See Also -------- putmask, put, take, extract Examples -------- >>> arr = np.arange(6).reshape(2, 3) >>> np.place(arr, arr>2, [44, 55]) >>> arr array([[ 0, 1, 2], [44, 55, 44]]) """ raise NotImplementedError def pmt(rate, nper, pv, fv=0, when='end'): """Compute the payment against loan principal plus interest. Given: * a present value, `pv` (e.g., an amount borrowed) * a future value, `fv` (e.g., 0) * an interest `rate` compounded once per period, of which there are * `nper` total * and (optional) specification of whether payment is made at the beginning (`when` = {'begin', 1}) or the end (`when` = {'end', 0}) of each period Return: the (fixed) periodic payment. Parameters ---------- rate : array_like Rate of interest (per period) nper : array_like Number of compounding periods pv : array_like Present value fv : array_like (optional) Future value (default = 0) when : {{'begin', 1}, {'end', 0}}, {string, int} When payments are due ('begin' (1) or 'end' (0)) Returns ------- out : ndarray Payment against loan plus interest. If all input is scalar, returns a scalar float. If any input is array_like, returns payment for each input element. If multiple inputs are array_like, they all must have the same shape. Notes ----- The payment is computed by solving the equation:: fv + pv*(1 + rate)**nper + pmt*(1 + rate*when)/rate*((1 + rate)**nper - 1) == 0 or, when ``rate == 0``:: fv + pv + pmt * nper == 0 for ``pmt``. Note that computing a monthly mortgage payment is only one use for this function. For example, pmt returns the periodic deposit one must make to achieve a specified future balance given an initial deposit, a fixed, periodically compounded interest rate, and the total number of periods. References ---------- .. [WRW] Wheeler, D. A., E. Rathke, and R. Weir (Eds.) (2009, May). Open Document Format for Office Applications (OpenDocument)v1.2, Part 2: Recalculated Formula (OpenFormula) Format - Annotated Version, Pre-Draft 12. Organization for the Advancement of Structured Information Standards (OASIS). Billerica, MA, USA. [ODT Document]. Available: http://www.oasis-open.org/committees/documents.php ?wg_abbrev=office-formulaOpenDocument-formula-20090508.odt Examples -------- What is the monthly payment needed to pay off a $200,000 loan in 15 years at an annual interest rate of 7.5%? >>> np.pmt(0.075/12, 12*15, 200000) -1854.0247200054619 In order to pay-off (i.e., have a future-value of 0) the $200,000 obtained today, a monthly payment of $1,854.02 would be required. Note that this example illustrates usage of `fv` having a default value of 0. """ raise NotImplementedError def poly(seq_of_zeros): """Find the coefficients of a polynomial with the given sequence of roots. Returns the coefficients of the polynomial whose leading coefficient is one for the given sequence of zeros (multiple roots must be included in the sequence as many times as their multiplicity; see Examples). A square matrix (or array, which will be treated as a matrix) can also be given, in which case the coefficients of the characteristic polynomial of the matrix are returned. Parameters ---------- seq_of_zeros : array_like, shape (N,) or (N, N) A sequence of polynomial roots, or a square array or matrix object. Returns ------- c : ndarray 1D array of polynomial coefficients from highest to lowest degree: ``c[0] * x**(N) + c[1] * x**(N-1) + ... + c[N-1] * x + c[N]`` where c[0] always equals 1. Raises ------ ValueError If input is the wrong shape (the input must be a 1-D or square 2-D array). See Also -------- polyval : Evaluate a polynomial at a point. roots : Return the roots of a polynomial. polyfit : Least squares polynomial fit. poly1d : A one-dimensional polynomial class. Notes ----- Specifying the roots of a polynomial still leaves one degree of freedom, typically represented by an undetermined leading coefficient. [1]_ In the case of this function, that coefficient - the first one in the returned array - is always taken as one. (If for some reason you have one other point, the only automatic way presently to leverage that information is to use ``polyfit``.) The characteristic polynomial, :math:`p_a(t)`, of an `n`-by-`n` matrix **A** is given by :math:`p_a(t) = \mathrm{det}(t\, \mathbf{I} - \mathbf{A})`, where **I** is the `n`-by-`n` identity matrix. [2]_ References ---------- .. [1] M. Sullivan and M. Sullivan, III, "Algebra and Trignometry, Enhanced With Graphing Utilities," Prentice-Hall, pg. 318, 1996. .. [2] G. Strang, "Linear Algebra and Its Applications, 2nd Edition," Academic Press, pg. 182, 1980. Examples -------- Given a sequence of a polynomial's zeros: >>> np.poly((0, 0, 0)) # Multiple root example array([1, 0, 0, 0]) The line above represents z**3 + 0*z**2 + 0*z + 0. >>> np.poly((-1./2, 0, 1./2)) array([ 1. , 0. , -0.25, 0. ]) The line above represents z**3 - z/4 >>> np.poly((np.random.random(1.)[0], 0, np.random.random(1.)[0])) array([ 1. , -0.77086955, 0.08618131, 0. ]) #random Given a square array object: >>> P = np.array([[0, 1./3], [-1./2, 0]]) >>> np.poly(P) array([ 1. , 0. , 0.16666667]) Or a square matrix object: >>> np.poly(np.matrix(P)) array([ 1. , 0. , 0.16666667]) Note how in all cases the leading coefficient is always 1. """ raise NotImplementedError def polyadd(a1, a2): """Find the sum of two polynomials. Returns the polynomial resulting from the sum of two input polynomials. Each input must be either a poly1d object or a 1D sequence of polynomial coefficients, from highest to lowest degree. Parameters ---------- a1, a2 : array_like or poly1d object Input polynomials. Returns ------- out : ndarray or poly1d object The sum of the inputs. If either input is a poly1d object, then the output is also a poly1d object. Otherwise, it is a 1D array of polynomial coefficients from highest to lowest degree. See Also -------- poly1d : A one-dimensional polynomial class. poly, polyadd, polyder, polydiv, polyfit, polyint, polysub, polyval Examples -------- >>> np.polyadd([1, 2], [9, 5, 4]) array([9, 6, 6]) Using poly1d objects: >>> p1 = np.poly1d([1, 2]) >>> p2 = np.poly1d([9, 5, 4]) >>> print p1 1 x + 2 >>> print p2 2 9 x + 5 x + 4 >>> print np.polyadd(p1, p2) 2 9 x + 6 x + 6 """ raise NotImplementedError def polyder(p, m=1): """Return the derivative of the specified order of a polynomial. Parameters ---------- p : poly1d or sequence Polynomial to differentiate. A sequence is interpreted as polynomial coefficients, see `poly1d`. m : int, optional Order of differentiation (default: 1) Returns ------- der : poly1d A new polynomial representing the derivative. See Also -------- polyint : Anti-derivative of a polynomial. poly1d : Class for one-dimensional polynomials. Examples -------- The derivative of the polynomial :math:`x^3 + x^2 + x^1 + 1` is: >>> p = np.poly1d([1,1,1,1]) >>> p2 = np.polyder(p) >>> p2 poly1d([3, 2, 1]) which evaluates to: >>> p2(2.) 17.0 We can verify this, approximating the derivative with ``(f(x + h) - f(x))/h``: >>> (p(2. + 0.001) - p(2.)) / 0.001 17.007000999997857 The fourth-order derivative of a 3rd-order polynomial is zero: >>> np.polyder(p, 2) poly1d([6, 2]) >>> np.polyder(p, 3) poly1d([6]) >>> np.polyder(p, 4) poly1d([ 0.]) """ raise NotImplementedError def polydiv(u, v): """Returns the quotient and remainder of polynomial division. The input arrays are the coefficients (including any coefficients equal to zero) of the "numerator" (dividend) and "denominator" (divisor) polynomials, respectively. Parameters ---------- u : array_like or poly1d Dividend polynomial's coefficients. v : array_like or poly1d Divisor polynomial's coefficients. Returns ------- q : ndarray Coefficients, including those equal to zero, of the quotient. r : ndarray Coefficients, including those equal to zero, of the remainder. See Also -------- poly, polyadd, polyder, polydiv, polyfit, polyint, polymul, polysub, polyval Notes ----- Both `u` and `v` must be 0-d or 1-d (ndim = 0 or 1), but `u.ndim` need not equal `v.ndim`. In other words, all four possible combinations - ``u.ndim = v.ndim = 0``, ``u.ndim = v.ndim = 1``, ``u.ndim = 1, v.ndim = 0``, and ``u.ndim = 0, v.ndim = 1`` - work. Examples -------- .. math:: \frac{3x^2 + 5x + 2}{2x + 1} = 1.5x + 1.75, remainder 0.25 >>> x = np.array([3.0, 5.0, 2.0]) >>> y = np.array([2.0, 1.0]) >>> np.polydiv(x, y) (array([ 1.5 , 1.75]), array([ 0.25])) """ raise NotImplementedError def polyfit(x, y, deg, rcond=None, full=False): """Least squares polynomial fit. Fit a polynomial ``p(x) = p[0] * x**deg + ... + p[deg]`` of degree `deg` to points `(x, y)`. Returns a vector of coefficients `p` that minimises the squared error. Parameters ---------- x : array_like, shape (M,) x-coordinates of the M sample points ``(x[i], y[i])``. y : array_like, shape (M,) or (M, K) y-coordinates of the sample points. Several data sets of sample points sharing the same x-coordinates can be fitted at once by passing in a 2D-array that contains one dataset per column. deg : int Degree of the fitting polynomial rcond : float, optional Relative condition number of the fit. Singular values smaller than this relative to the largest singular value will be ignored. The default value is len(x)*eps, where eps is the relative precision of the float type, about 2e-16 in most cases. full : bool, optional Switch determining nature of return value. When it is False (the default) just the coefficients are returned, when True diagnostic information from the singular value decomposition is also returned. Returns ------- p : ndarray, shape (M,) or (M, K) Polynomial coefficients, highest power first. If `y` was 2-D, the coefficients for `k`-th data set are in ``p[:,k]``. residuals, rank, singular_values, rcond : present only if `full` = True Residuals of the least-squares fit, the effective rank of the scaled Vandermonde coefficient matrix, its singular values, and the specified value of `rcond`. For more details, see `linalg.lstsq`. Warns ----- RankWarning The rank of the coefficient matrix in the least-squares fit is deficient. The warning is only raised if `full` = False. The warnings can be turned off by >>> import warnings >>> warnings.simplefilter('ignore', np.RankWarning) See Also -------- polyval : Computes polynomial values. linalg.lstsq : Computes a least-squares fit. scipy.interpolate.UnivariateSpline : Computes spline fits. Notes ----- The solution minimizes the squared error .. math :: E = \sum_{j=0}^k |p(x_j) - y_j|^2 in the equations:: x[0]**n * p[n] + ... + x[0] * p[1] + p[0] = y[0] x[1]**n * p[n] + ... + x[1] * p[1] + p[0] = y[1] ... x[k]**n * p[n] + ... + x[k] * p[1] + p[0] = y[k] The coefficient matrix of the coefficients `p` is a Vandermonde matrix. `polyfit` issues a `RankWarning` when the least-squares fit is badly conditioned. This implies that the best fit is not well-defined due to numerical error. The results may be improved by lowering the polynomial degree or by replacing `x` by `x` - `x`.mean(). The `rcond` parameter can also be set to a value smaller than its default, but the resulting fit may be spurious: including contributions from the small singular values can add numerical noise to the result. Note that fitting polynomial coefficients is inherently badly conditioned when the degree of the polynomial is large or the interval of sample points is badly centered. The quality of the fit should always be checked in these cases. When polynomial fits are not satisfactory, splines may be a good alternative. References ---------- .. [1] Wikipedia, "Curve fitting", http://en.wikipedia.org/wiki/Curve_fitting .. [2] Wikipedia, "Polynomial interpolation", http://en.wikipedia.org/wiki/Polynomial_interpolation Examples -------- >>> x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]) >>> y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0]) >>> z = np.polyfit(x, y, 3) >>> z array([ 0.08703704, -0.81349206, 1.69312169, -0.03968254]) It is convenient to use `poly1d` objects for dealing with polynomials: >>> p = np.poly1d(z) >>> p(0.5) 0.6143849206349179 >>> p(3.5) -0.34732142857143039 >>> p(10) 22.579365079365115 High-order polynomials may oscillate wildly: >>> p30 = np.poly1d(np.polyfit(x, y, 30)) /... RankWarning: Polyfit may be poorly conditioned... >>> p30(4) -0.80000000000000204 >>> p30(5) -0.99999999999999445 >>> p30(4.5) -0.10547061179440398 Illustration: >>> import matplotlib.pyplot as plt >>> xp = np.linspace(-2, 6, 100) >>> plt.plot(x, y, '.', xp, p(xp), '-', xp, p30(xp), '--') [, , ] >>> plt.ylim(-2,2) (-2, 2) >>> plt.show() """ raise NotImplementedError def polyint(p, m=1, k=None): """Return an antiderivative (indefinite integral) of a polynomial. The returned order `m` antiderivative `P` of polynomial `p` satisfies :math:`\frac{d^m}{dx^m}P(x) = p(x)` and is defined up to `m - 1` integration constants `k`. The constants determine the low-order polynomial part .. math:: \frac{k_{m-1}}{0!} x^0 + \ldots + \frac{k_0}{(m-1)!}x^{m-1} of `P` so that :math:`P^{(j)}(0) = k_{m-j-1}`. Parameters ---------- p : {array_like, poly1d} Polynomial to differentiate. A sequence is interpreted as polynomial coefficients, see `poly1d`. m : int, optional Order of the antiderivative. (Default: 1) k : {None, list of `m` scalars, scalar}, optional Integration constants. They are given in the order of integration: those corresponding to highest-order terms come first. If ``None`` (default), all constants are assumed to be zero. If `m = 1`, a single scalar can be given instead of a list. See Also -------- polyder : derivative of a polynomial poly1d.integ : equivalent method Examples -------- The defining property of the antiderivative: >>> p = np.poly1d([1,1,1]) >>> P = np.polyint(p) >>> P poly1d([ 0.33333333, 0.5 , 1. , 0. ]) >>> np.polyder(P) == p True The integration constants default to zero, but can be specified: >>> P = np.polyint(p, 3) >>> P(0) 0.0 >>> np.polyder(P)(0) 0.0 >>> np.polyder(P, 2)(0) 0.0 >>> P = np.polyint(p, 3, k=[6,5,3]) >>> P poly1d([ 0.01666667, 0.04166667, 0.16666667, 3. , 5. , 3. ]) Note that 3 = 6 / 2!, and that the constants are given in the order of integrations. Constant of the highest-order polynomial term comes first: >>> np.polyder(P, 2)(0) 6.0 >>> np.polyder(P, 1)(0) 5.0 >>> P(0) 3.0 """ raise NotImplementedError def polymul(a1, a2): """Find the product of two polynomials. Finds the polynomial resulting from the multiplication of the two input polynomials. Each input must be either a poly1d object or a 1D sequence of polynomial coefficients, from highest to lowest degree. Parameters ---------- a1, a2 : array_like or poly1d object Input polynomials. Returns ------- out : ndarray or poly1d object The polynomial resulting from the multiplication of the inputs. If either inputs is a poly1d object, then the output is also a poly1d object. Otherwise, it is a 1D array of polynomial coefficients from highest to lowest degree. See Also -------- poly1d : A one-dimensional polynomial class. poly, polyadd, polyder, polydiv, polyfit, polyint, polysub, polyval Examples -------- >>> np.polymul([1, 2, 3], [9, 5, 1]) array([ 9, 23, 38, 17, 3]) Using poly1d objects: >>> p1 = np.poly1d([1, 2, 3]) >>> p2 = np.poly1d([9, 5, 1]) >>> print p1 2 1 x + 2 x + 3 >>> print p2 2 9 x + 5 x + 1 >>> print np.polymul(p1, p2) 4 3 2 9 x + 23 x + 38 x + 17 x + 3 """ raise NotImplementedError def polysub(a1, a2): """Difference (subtraction) of two polynomials. Given two polynomials `a1` and `a2`, returns ``a1 - a2``. `a1` and `a2` can be either array_like sequences of the polynomials' coefficients (including coefficients equal to zero), or `poly1d` objects. Parameters ---------- a1, a2 : array_like or poly1d Minuend and subtrahend polynomials, respectively. Returns ------- out : ndarray or poly1d Array or `poly1d` object of the difference polynomial's coefficients. See Also -------- polyval, polydiv, polymul, polyadd Examples -------- .. math:: (2 x^2 + 10 x - 2) - (3 x^2 + 10 x -4) = (-x^2 + 2) >>> np.polysub([2, 10, -2], [3, 10, -4]) array([-1, 0, 2]) """ raise NotImplementedError def polyval(p, x): """Evaluate a polynomial at specific values. If `p` is of length N, this function returns the value: ``p[0]*x**(N-1) + p[1]*x**(N-2) + ... + p[N-2]*x + p[N-1]`` If `x` is a sequence, then `p(x)` is returned for each element of `x`. If `x` is another polynomial then the composite polynomial `p(x(t))` is returned. Parameters ---------- p : array_like or poly1d object 1D array of polynomial coefficients (including coefficients equal to zero) from highest degree to the constant term, or an instance of poly1d. x : array_like or poly1d object A number, a 1D array of numbers, or an instance of poly1d, "at" which to evaluate `p`. Returns ------- values : ndarray or poly1d If `x` is a poly1d instance, the result is the composition of the two polynomials, i.e., `x` is "substituted" in `p` and the simplified result is returned. In addition, the type of `x` - array_like or poly1d - governs the type of the output: `x` array_like => `values` array_like, `x` a poly1d object => `values` is also. See Also -------- poly1d: A polynomial class. Notes ----- Horner's scheme [1]_ is used to evaluate the polynomial. Even so, for polynomials of high degree the values may be inaccurate due to rounding errors. Use carefully. References ---------- .. [1] I. N. Bronshtein, K. A. Semendyayev, and K. A. Hirsch (Eng. trans. Ed.), *Handbook of Mathematics*, New York, Van Nostrand Reinhold Co., 1985, pg. 720. Examples -------- >>> np.polyval([3,0,1], 5) # 3 * 5**2 + 0 * 5**1 + 1 76 >>> np.polyval([3,0,1], np.poly1d(5)) poly1d([ 76.]) >>> np.polyval(np.poly1d([3,0,1]), 5) 76 >>> np.polyval(np.poly1d([3,0,1]), np.poly1d(5)) poly1d([ 76.]) """ raise NotImplementedError def ppmt(rate, per, nper, pv, fv=0.0, when='end'): """Not implemented. Compute the payment against loan principal. Parameters ---------- rate : array_like Rate of interest (per period) per : array_like, int Amount paid against the loan changes. The `per` is the period of interest. nper : array_like Number of compounding periods pv : array_like Present value fv : array_like, optional Future value when : {{'begin', 1}, {'end', 0}}, {string, int} When payments are due ('begin' (1) or 'end' (0)) See Also -------- pmt, pv, ipmt """ raise NotImplementedError def prod(a, axis=None, dtype=None, out=None): """Return the product of array elements over a given axis. Parameters ---------- a : array_like Input data. axis : int, optional Axis over which the product is taken. By default, the product of all elements is calculated. dtype : data-type, optional The data-type of the returned array, as well as of the accumulator in which the elements are multiplied. By default, if `a` is of integer type, `dtype` is the default platform integer. (Note: if the type of `a` is unsigned, then so is `dtype`.) Otherwise, the dtype is the same as that of `a`. out : ndarray, optional Alternative output array in which to place the result. It must have the same shape as the expected output, but the type of the output values will be cast if necessary. Returns ------- product_along_axis : ndarray, see `dtype` parameter above. An array shaped as `a` but with the specified axis removed. Returns a reference to `out` if specified. See Also -------- ndarray.prod : equivalent method numpy.doc.ufuncs : Section "Output arguments" Notes ----- Arithmetic is modular when using integer types, and no error is raised on overflow. That means that, on a 32-bit platform: >>> x = np.array([536870910, 536870910, 536870910, 536870910]) >>> np.prod(x) #random 16 Examples -------- By default, calculate the product of all elements: >>> np.prod([1.,2.]) 2.0 Even when the input array is two-dimensional: >>> np.prod([[1.,2.],[3.,4.]]) 24.0 But we can also specify the axis over which to multiply: >>> np.prod([[1.,2.],[3.,4.]], axis=1) array([ 2., 12.]) If the type of `x` is unsigned, then the output type is the unsigned platform integer: >>> x = np.array([1, 2, 3], dtype=np.uint8) >>> np.prod(x).dtype == np.uint True If `x` is of a signed integer type, then the output type is the default platform integer: >>> x = np.array([1, 2, 3], dtype=np.int8) >>> np.prod(x).dtype == np.int True """ raise NotImplementedError def product(a, axis=None, dtype=None, out=None): """Return the product of array elements over a given axis. See Also -------- prod : equivalent function; see for details. """ raise NotImplementedError def promote_types(type1, type2): """promote_types(type1, type2) Returns the data type with the smallest size and smallest scalar kind to which both ``type1`` and ``type2`` may be safely cast. The returned data type is always in native byte order. This function is symmetric and associative. Parameters ---------- type1 : dtype or dtype specifier First data type. type2 : dtype or dtype specifier Second data type. Returns ------- out : dtype The promoted data type. Notes ----- .. versionadded:: 1.6.0 See Also -------- result_type, dtype, can_cast Examples -------- >>> np.promote_types('f4', 'f8') dtype('float64') >>> np.promote_types('i8', 'f4') dtype('float64') >>> np.promote_types('>i8', '>> np.promote_types('i1', 'S8') Traceback (most recent call last): File "", line 1, in TypeError: invalid type promotion """ # BUILTIN raise NotImplementedError def ptp(a, axis=None, out=None): """Range of values (maximum - minimum) along an axis. The name of the function comes from the acronym for 'peak to peak'. Parameters ---------- a : array_like Input values. axis : int, optional Axis along which to find the peaks. By default, flatten the array. out : array_like Alternative output array in which to place the result. It must have the same shape and buffer length as the expected output, but the type of the output values will be cast if necessary. Returns ------- ptp : ndarray A new array holding the result, unless `out` was specified, in which case a reference to `out` is returned. Examples -------- >>> x = np.arange(4).reshape((2,2)) >>> x array([[0, 1], [2, 3]]) >>> np.ptp(x, axis=0) array([2, 2]) >>> np.ptp(x, axis=1) array([1, 1]) """ raise NotImplementedError def put(a, ind, v, mode='raise'): """Replaces specified elements of an array with given values. The indexing works on the flattened target array. `put` is roughly equivalent to: :: a.flat[ind] = v Parameters ---------- a : ndarray Target array. ind : array_like Target indices, interpreted as integers. v : array_like Values to place in `a` at target indices. If `v` is shorter than `ind` it will be repeated as necessary. mode : {'raise', 'wrap', 'clip'}, optional Specifies how out-of-bounds indices will behave. * 'raise' -- raise an error (default) * 'wrap' -- wrap around * 'clip' -- clip to the range 'clip' mode means that all indices that are too large are replaced by the index that addresses the last element along that axis. Note that this disables indexing with negative numbers. See Also -------- putmask, place Examples -------- >>> a = np.arange(5) >>> np.put(a, [0, 2], [-44, -55]) >>> a array([-44, 1, -55, 3, 4]) >>> a = np.arange(5) >>> np.put(a, 22, -5, mode='clip') >>> a array([ 0, 1, 2, 3, -5]) """ raise NotImplementedError def putmask(a, mask, values): """putmask(a, mask, values) Changes elements of an array based on conditional and input values. Sets ``a.flat[n] = values[n]`` for each n where ``mask.flat[n]==True``. If `values` is not the same size as `a` and `mask` then it will repeat. This gives behavior different from ``a[mask] = values``. Parameters ---------- a : array_like Target array. mask : array_like Boolean mask array. It has to be the same shape as `a`. values : array_like Values to put into `a` where `mask` is True. If `values` is smaller than `a` it will be repeated. See Also -------- place, put, take Examples -------- >>> x = np.arange(6).reshape(2, 3) >>> np.putmask(x, x>2, x**2) >>> x array([[ 0, 1, 2], [ 9, 16, 25]]) If `values` is smaller than `a` it is repeated: >>> x = np.arange(5) >>> np.putmask(x, x>1, [-33, -44]) >>> x array([ 0, 1, -33, -44, -33]) """ # BUILTIN raise NotImplementedError def pv(rate, nper, pmt, fv=0.0, when='end'): """Compute the present value. Given: * a future value, `fv` * an interest `rate` compounded once per period, of which there are * `nper` total * a (fixed) payment, `pmt`, paid either * at the beginning (`when` = {'begin', 1}) or the end (`when` = {'end', 0}) of each period Return: the value now Parameters ---------- rate : array_like Rate of interest (per period) nper : array_like Number of compounding periods pmt : array_like Payment fv : array_like, optional Future value when : {{'begin', 1}, {'end', 0}}, {string, int}, optional When payments are due ('begin' (1) or 'end' (0)) Returns ------- out : ndarray, float Present value of a series of payments or investments. Notes ----- The present value is computed by solving the equation:: fv + pv*(1 + rate)**nper + pmt*(1 + rate*when)/rate*((1 + rate)**nper - 1) = 0 or, when ``rate = 0``:: fv + pv + pmt * nper = 0 for `pv`, which is then returned. References ---------- .. [WRW] Wheeler, D. A., E. Rathke, and R. Weir (Eds.) (2009, May). Open Document Format for Office Applications (OpenDocument)v1.2, Part 2: Recalculated Formula (OpenFormula) Format - Annotated Version, Pre-Draft 12. Organization for the Advancement of Structured Information Standards (OASIS). Billerica, MA, USA. [ODT Document]. Available: http://www.oasis-open.org/committees/documents.php?wg_abbrev=office-formula OpenDocument-formula-20090508.odt Examples -------- What is the present value (e.g., the initial investment) of an investment that needs to total $15692.93 after 10 years of saving $100 every month? Assume the interest rate is 5% (annually) compounded monthly. >>> np.pv(0.05/12, 10*12, -100, 15692.93) -100.00067131625819 By convention, the negative sign represents cash flow out (i.e., money not available today). Thus, to end up with $15,692.93 in 10 years saving $100 a month at 5% annual interest, one's initial deposit should also be $100. If any input is array_like, ``pv`` returns an array of equal shape. Let's compare different interest rates in the example above: >>> a = np.array((0.05, 0.04, 0.03))/12 >>> np.pv(a, 10*12, -100, 15692.93) array([ -100.00067132, -649.26771385, -1273.78633713]) So, to end up with the same $15692.93 under the same $100 per month "savings plan," for annual interest rates of 4% and 3%, one would need initial investments of $649.27 and $1273.79, respectively. """ raise NotImplementedError def rank(a): """Return the number of dimensions of an array. If `a` is not already an array, a conversion is attempted. Scalars are zero dimensional. Parameters ---------- a : array_like Array whose number of dimensions is desired. If `a` is not an array, a conversion is attempted. Returns ------- number_of_dimensions : int The number of dimensions in the array. See Also -------- ndim : equivalent function ndarray.ndim : equivalent property shape : dimensions of array ndarray.shape : dimensions of array Notes ----- In the old Numeric package, `rank` was the term used for the number of dimensions, but in Numpy `ndim` is used instead. Examples -------- >>> np.rank([1,2,3]) 1 >>> np.rank(np.array([[1,2,3],[4,5,6]])) 2 >>> np.rank(1) 0 """ raise NotImplementedError def rate(nper, pmt, pv, fv, when='end', guess=0.1, tol=1e-06, maxiter=100): """Compute the rate of interest per period. Parameters ---------- nper : array_like Number of compounding periods pmt : array_like Payment pv : array_like Present value fv : array_like Future value when : {{'begin', 1}, {'end', 0}}, {string, int}, optional When payments are due ('begin' (1) or 'end' (0)) guess : float, optional Starting guess for solving the rate of interest tol : float, optional Required tolerance for the solution maxiter : int, optional Maximum iterations in finding the solution Notes ----- The rate of interest is computed by iteratively solving the (non-linear) equation:: fv + pv*(1+rate)**nper + pmt*(1+rate*when)/rate * ((1+rate)**nper - 1) = 0 for ``rate``. References ---------- Wheeler, D. A., E. Rathke, and R. Weir (Eds.) (2009, May). Open Document Format for Office Applications (OpenDocument)v1.2, Part 2: Recalculated Formula (OpenFormula) Format - Annotated Version, Pre-Draft 12. Organization for the Advancement of Structured Information Standards (OASIS). Billerica, MA, USA. [ODT Document]. Available: http://www.oasis-open.org/committees/documents.php?wg_abbrev=office-formula OpenDocument-formula-20090508.odt """ raise NotImplementedError def ravel(a, order='C'): """Return a flattened array. A 1-D array, containing the elements of the input, is returned. A copy is made only if needed. Parameters ---------- a : array_like Input array. The elements in ``a`` are read in the order specified by `order`, and packed as a 1-D array. order : {'C','F', 'A', 'K'}, optional The elements of ``a`` are read in this order. 'C' means to view the elements in C (row-major) order. 'F' means to view the elements in Fortran (column-major) order. 'A' means to view the elements in 'F' order if a is Fortran contiguous, 'C' order otherwise. 'K' means to view the elements in the order they occur in memory, except for reversing the data when strides are negative. By default, 'C' order is used. Returns ------- 1d_array : ndarray Output of the same dtype as `a`, and of shape ``(a.size(),)``. See Also -------- ndarray.flat : 1-D iterator over an array. ndarray.flatten : 1-D array copy of the elements of an array in row-major order. Notes ----- In row-major order, the row index varies the slowest, and the column index the quickest. This can be generalized to multiple dimensions, where row-major order implies that the index along the first axis varies slowest, and the index along the last quickest. The opposite holds for Fortran-, or column-major, mode. Examples -------- It is equivalent to ``reshape(-1, order=order)``. >>> x = np.array([[1, 2, 3], [4, 5, 6]]) >>> print np.ravel(x) [1 2 3 4 5 6] >>> print x.reshape(-1) [1 2 3 4 5 6] >>> print np.ravel(x, order='F') [1 4 2 5 3 6] When ``order`` is 'A', it will preserve the array's 'C' or 'F' ordering: >>> print np.ravel(x.T) [1 4 2 5 3 6] >>> print np.ravel(x.T, order='A') [1 2 3 4 5 6] When ``order`` is 'K', it will preserve orderings that are neither 'C' nor 'F', but won't reverse axes: >>> a = np.arange(3)[::-1]; a array([2, 1, 0]) >>> a.ravel(order='C') array([2, 1, 0]) >>> a.ravel(order='K') array([2, 1, 0]) >>> a = np.arange(12).reshape(2,3,2).swapaxes(1,2); a array([[[ 0, 2, 4], [ 1, 3, 5]], [[ 6, 8, 10], [ 7, 9, 11]]]) >>> a.ravel(order='C') array([ 0, 2, 4, 1, 3, 5, 6, 8, 10, 7, 9, 11]) >>> a.ravel(order='K') array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) """ raise NotImplementedError def ravel_multi_index(multi_index, dims, mode='raise', order='C'): """ravel_multi_index(multi_index, dims, mode='raise', order='C') Converts a tuple of index arrays into an array of flat indices, applying boundary modes to the multi-index. Parameters ---------- multi_index : tuple of array_like A tuple of integer arrays, one array for each dimension. dims : tuple of ints The shape of array into which the indices from ``multi_index`` apply. mode : {'raise', 'wrap', 'clip'}, optional Specifies how out-of-bounds indices are handled. Can specify either one mode or a tuple of modes, one mode per index. * 'raise' -- raise an error (default) * 'wrap' -- wrap around * 'clip' -- clip to the range In 'clip' mode, a negative index which would normally wrap will clip to 0 instead. order : {'C', 'F'}, optional Determines whether the multi-index should be viewed as indexing in C (row-major) order or FORTRAN (column-major) order. Returns ------- raveled_indices : ndarray An array of indices into the flattened version of an array of dimensions ``dims``. See Also -------- unravel_index Notes ----- .. versionadded:: 1.6.0 Examples -------- >>> arr = np.array([[3,6,6],[4,5,1]]) >>> np.ravel_multi_index(arr, (7,6)) array([22, 41, 37]) >>> np.ravel_multi_index(arr, (7,6), order='F') array([31, 41, 13]) >>> np.ravel_multi_index(arr, (4,6), mode='clip') array([22, 23, 19]) >>> np.ravel_multi_index(arr, (4,4), mode=('clip','wrap')) array([12, 13, 13]) >>> np.ravel_multi_index((3,1,4,1), (6,7,8,9)) 1621 """ # BUILTIN raise NotImplementedError def real(val): """Return the real part of the elements of the array. Parameters ---------- val : array_like Input array. Returns ------- out : ndarray Output array. If `val` is real, the type of `val` is used for the output. If `val` has complex elements, the returned type is float. See Also -------- real_if_close, imag, angle Examples -------- >>> a = np.array([1+2j, 3+4j, 5+6j]) >>> a.real array([ 1., 3., 5.]) >>> a.real = 9 >>> a array([ 9.+2.j, 9.+4.j, 9.+6.j]) >>> a.real = np.array([9, 8, 7]) >>> a array([ 9.+2.j, 8.+4.j, 7.+6.j]) """ raise NotImplementedError def real_if_close(a, tol=100): """If complex input returns a real array if complex parts are close to zero. "Close to zero" is defined as `tol` * (machine epsilon of the type for `a`). Parameters ---------- a : array_like Input array. tol : float Tolerance in machine epsilons for the complex part of the elements in the array. Returns ------- out : ndarray If `a` is real, the type of `a` is used for the output. If `a` has complex elements, the returned type is float. See Also -------- real, imag, angle Notes ----- Machine epsilon varies from machine to machine and between data types but Python floats on most platforms have a machine epsilon equal to 2.2204460492503131e-16. You can use 'np.finfo(np.float).eps' to print out the machine epsilon for floats. Examples -------- >>> np.finfo(np.float).eps 2.2204460492503131e-16 >>> np.real_if_close([2.1 + 4e-14j], tol=1000) array([ 2.1]) >>> np.real_if_close([2.1 + 4e-13j], tol=1000) array([ 2.1 +4.00000000e-13j]) """ raise NotImplementedError def recfromcsv(fname): """Load ASCII data stored in a comma-separated file. The returned array is a record array (if ``usemask=False``, see `recarray`) or a masked record array (if ``usemask=True``, see `ma.mrecords.MaskedRecords`). For a complete description of all the input parameters, see `genfromtxt`. See Also -------- numpy.genfromtxt : generic function to load ASCII data. """ raise NotImplementedError def recfromtxt(fname): """Load ASCII data from a file and return it in a record array. If ``usemask=False`` a standard `recarray` is returned, if ``usemask=True`` a MaskedRecords array is returned. Complete description of all the optional input parameters is available in the docstring of the `genfromtxt` function. See Also -------- numpy.genfromtxt : generic function Notes ----- By default, `dtype` is None, which means that the data-type of the output array will be determined from the data. """ raise NotImplementedError def repeat(a, repeats, axis=None): """Repeat elements of an array. Parameters ---------- a : array_like Input array. repeats : {int, array of ints} The number of repetitions for each element. `repeats` is broadcasted to fit the shape of the given axis. axis : int, optional The axis along which to repeat values. By default, use the flattened input array, and return a flat output array. Returns ------- repeated_array : ndarray Output array which has the same shape as `a`, except along the given axis. See Also -------- tile : Tile an array. Examples -------- >>> x = np.array([[1,2],[3,4]]) >>> np.repeat(x, 2) array([1, 1, 2, 2, 3, 3, 4, 4]) >>> np.repeat(x, 3, axis=1) array([[1, 1, 1, 2, 2, 2], [3, 3, 3, 4, 4, 4]]) >>> np.repeat(x, [1, 2], axis=0) array([[1, 2], [3, 4], [3, 4]]) """ raise NotImplementedError def require(a, dtype=None, requirements=None): """Return an ndarray of the provided type that satisfies requirements. This function is useful to be sure that an array with the correct flags is returned for passing to compiled code (perhaps through ctypes). Parameters ---------- a : array_like The object to be converted to a type-and-requirement-satisfying array. dtype : data-type The required data-type, the default data-type is float64). requirements : str or list of str The requirements list can be any of the following * 'F_CONTIGUOUS' ('F') - ensure a Fortran-contiguous array * 'C_CONTIGUOUS' ('C') - ensure a C-contiguous array * 'ALIGNED' ('A') - ensure a data-type aligned array * 'WRITEABLE' ('W') - ensure a writable array * 'OWNDATA' ('O') - ensure an array that owns its own data See Also -------- asarray : Convert input to an ndarray. asanyarray : Convert to an ndarray, but pass through ndarray subclasses. ascontiguousarray : Convert input to a contiguous array. asfortranarray : Convert input to an ndarray with column-major memory order. ndarray.flags : Information about the memory layout of the array. Notes ----- The returned array will be guaranteed to have the listed requirements by making a copy if needed. Examples -------- >>> x = np.arange(6).reshape(2,3) >>> x.flags C_CONTIGUOUS : True F_CONTIGUOUS : False OWNDATA : False WRITEABLE : True ALIGNED : True UPDATEIFCOPY : False >>> y = np.require(x, dtype=np.float32, requirements=['A', 'O', 'W', 'F']) >>> y.flags C_CONTIGUOUS : False F_CONTIGUOUS : True OWNDATA : True WRITEABLE : True ALIGNED : True UPDATEIFCOPY : False """ raise NotImplementedError def reshape(a, newshape, order='C'): """Gives a new shape to an array without changing its data. Parameters ---------- a : array_like Array to be reshaped. newshape : int or tuple of ints The new shape should be compatible with the original shape. If an integer, then the result will be a 1-D array of that length. One shape dimension can be -1. In this case, the value is inferred from the length of the array and remaining dimensions. order : {'C', 'F', 'A'}, optional Determines whether the array data should be viewed as in C (row-major) order, FORTRAN (column-major) order, or the C/FORTRAN order should be preserved. Returns ------- reshaped_array : ndarray This will be a new view object if possible; otherwise, it will be a copy. See Also -------- ndarray.reshape : Equivalent method. Notes ----- It is not always possible to change the shape of an array without copying the data. If you want an error to be raise if the data is copied, you should assign the new shape to the shape attribute of the array:: >>> a = np.zeros((10, 2)) # A transpose make the array non-contiguous >>> b = a.T # Taking a view makes it possible to modify the shape without modiying the # initial object. >>> c = b.view() >>> c.shape = (20) AttributeError: incompatible shape for a non-contiguous array Examples -------- >>> a = np.array([[1,2,3], [4,5,6]]) >>> np.reshape(a, 6) array([1, 2, 3, 4, 5, 6]) >>> np.reshape(a, 6, order='F') array([1, 4, 2, 5, 3, 6]) >>> np.reshape(a, (3,-1)) # the unspecified value is inferred to be 2 array([[1, 2], [3, 4], [5, 6]]) """ raise NotImplementedError def resize(a, new_shape): """Return a new array with the specified shape. If the new array is larger than the original array, then the new array is filled with repeated copies of `a`. Note that this behavior is different from a.resize(new_shape) which fills with zeros instead of repeated copies of `a`. Parameters ---------- a : array_like Array to be resized. new_shape : int or tuple of int Shape of resized array. Returns ------- reshaped_array : ndarray The new array is formed from the data in the old array, repeated if necessary to fill out the required number of elements. The data are repeated in the order that they are stored in memory. See Also -------- ndarray.resize : resize an array in-place. Examples -------- >>> a=np.array([[0,1],[2,3]]) >>> np.resize(a,(1,4)) array([[0, 1, 2, 3]]) >>> np.resize(a,(2,4)) array([[0, 1, 2, 3], [0, 1, 2, 3]]) """ raise NotImplementedError def restoredot(): """Restore `dot`, `vdot`, and `innerproduct` to the default non-BLAS implementations. Typically, the user will only need to call this when troubleshooting and installation problem, reproducing the conditions of a build without an accelerated BLAS, or when being very careful about benchmarking linear algebra operations. See Also -------- alterdot : `restoredot` undoes the effects of `alterdot`. """ # BUILTIN raise NotImplementedError def result_type(*arrays_and_dtypes): """result_type(*arrays_and_dtypes) Returns the type that results from applying the NumPy type promotion rules to the arguments. Type promotion in NumPy works similarly to the rules in languages like C++, with some slight differences. When both scalars and arrays are used, the array's type takes precedence and the actual value of the scalar is taken into account. For example, calculating 3*a, where a is an array of 32-bit floats, intuitively should result in a 32-bit float output. If the 3 is a 32-bit integer, the NumPy rules indicate it can't convert losslessly into a 32-bit float, so a 64-bit float should be the result type. By examining the value of the constant, '3', we see that it fits in an 8-bit integer, which can be cast losslessly into the 32-bit float. Parameters ---------- arrays_and_dtypes : list of arrays and dtypes The operands of some operation whose result type is needed. Returns ------- out : dtype The result type. See also -------- dtype, promote_types, min_scalar_type, can_cast Notes ----- .. versionadded:: 1.6.0 The specific algorithm used is as follows. Categories are determined by first checking which of boolean, integer (int/uint), or floating point (float/complex) the maximum kind of all the arrays and the scalars are. If there are only scalars or the maximum category of the scalars is higher than the maximum category of the arrays, the data types are combined with :func:`promote_types` to produce the return value. Otherwise, `min_scalar_type` is called on each array, and the resulting data types are all combined with :func:`promote_types` to produce the return value. The set of int values is not a subset of the uint values for types with the same number of bits, something not reflected in :func:`min_scalar_type`, but handled as a special case in `result_type`. Examples -------- >>> np.result_type(3, np.arange(7, dtype='i1')) dtype('int8') >>> np.result_type('i4', 'c8') dtype('complex128') >>> np.result_type(3.0, -2) dtype('float64') """ # BUILTIN raise NotImplementedError def roll(a, shift, axis=None): """Roll array elements along a given axis. Elements that roll beyond the last position are re-introduced at the first. Parameters ---------- a : array_like Input array. shift : int The number of places by which elements are shifted. axis : int, optional The axis along which elements are shifted. By default, the array is flattened before shifting, after which the original shape is restored. Returns ------- res : ndarray Output array, with the same shape as `a`. See Also -------- rollaxis : Roll the specified axis backwards, until it lies in a given position. Examples -------- >>> x = np.arange(10) >>> np.roll(x, 2) array([8, 9, 0, 1, 2, 3, 4, 5, 6, 7]) >>> x2 = np.reshape(x, (2,5)) >>> x2 array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]) >>> np.roll(x2, 1) array([[9, 0, 1, 2, 3], [4, 5, 6, 7, 8]]) >>> np.roll(x2, 1, axis=0) array([[5, 6, 7, 8, 9], [0, 1, 2, 3, 4]]) >>> np.roll(x2, 1, axis=1) array([[4, 0, 1, 2, 3], [9, 5, 6, 7, 8]]) """ raise NotImplementedError def rollaxis(a, axis, start=0): """Roll the specified axis backwards, until it lies in a given position. Parameters ---------- a : ndarray Input array. axis : int The axis to roll backwards. The positions of the other axes do not change relative to one another. start : int, optional The axis is rolled until it lies before this position. The default, 0, results in a "complete" roll. Returns ------- res : ndarray Output array. See Also -------- roll : Roll the elements of an array by a number of positions along a given axis. Examples -------- >>> a = np.ones((3,4,5,6)) >>> np.rollaxis(a, 3, 1).shape (3, 6, 4, 5) >>> np.rollaxis(a, 2).shape (5, 3, 4, 6) >>> np.rollaxis(a, 1, 4).shape (3, 5, 6, 4) """ raise NotImplementedError def roots(p): """Return the roots of a polynomial with coefficients given in p. The values in the rank-1 array `p` are coefficients of a polynomial. If the length of `p` is n+1 then the polynomial is described by:: p[0] * x**n + p[1] * x**(n-1) + ... + p[n-1]*x + p[n] Parameters ---------- p : array_like Rank-1 array of polynomial coefficients. Returns ------- out : ndarray An array containing the complex roots of the polynomial. Raises ------ ValueError : When `p` cannot be converted to a rank-1 array. See also -------- poly : Find the coefficients of a polynomial with a given sequence of roots. polyval : Evaluate a polynomial at a point. polyfit : Least squares polynomial fit. poly1d : A one-dimensional polynomial class. Notes ----- The algorithm relies on computing the eigenvalues of the companion matrix [1]_. References ---------- .. [1] R. A. Horn & C. R. Johnson, *Matrix Analysis*. Cambridge, UK: Cambridge University Press, 1999, pp. 146-7. Examples -------- >>> coeff = [3.2, 2, 1] >>> np.roots(coeff) array([-0.3125+0.46351241j, -0.3125-0.46351241j]) """ raise NotImplementedError def rot90(m, k=1): """Rotate an array by 90 degrees in the counter-clockwise direction. The first two dimensions are rotated; therefore, the array must be at least 2-D. Parameters ---------- m : array_like Array of two or more dimensions. k : integer Number of times the array is rotated by 90 degrees. Returns ------- y : ndarray Rotated array. See Also -------- fliplr : Flip an array horizontally. flipud : Flip an array vertically. Examples -------- >>> m = np.array([[1,2],[3,4]], int) >>> m array([[1, 2], [3, 4]]) >>> np.rot90(m) array([[2, 4], [1, 3]]) >>> np.rot90(m, 2) array([[4, 3], [2, 1]]) """ raise NotImplementedError def round(a, decimals=0, out=None): """Round an array to the given number of decimals. Refer to `around` for full documentation. See Also -------- around : equivalent function """ raise NotImplementedError def round_(a, decimals=0, out=None): """Round an array to the given number of decimals. Refer to `around` for full documentation. See Also -------- around : equivalent function """ raise NotImplementedError def row_stack(tup): """Stack arrays in sequence vertically (row wise). Take a sequence of arrays and stack them vertically to make a single array. Rebuild arrays divided by `vsplit`. Parameters ---------- tup : sequence of ndarrays Tuple containing arrays to be stacked. The arrays must have the same shape along all but the first axis. Returns ------- stacked : ndarray The array formed by stacking the given arrays. See Also -------- hstack : Stack arrays in sequence horizontally (column wise). dstack : Stack arrays in sequence depth wise (along third dimension). concatenate : Join a sequence of arrays together. vsplit : Split array into a list of multiple sub-arrays vertically. Notes ----- Equivalent to ``np.concatenate(tup, axis=0)`` Examples -------- >>> a = np.array([1, 2, 3]) >>> b = np.array([2, 3, 4]) >>> np.vstack((a,b)) array([[1, 2, 3], [2, 3, 4]]) >>> a = np.array([[1], [2], [3]]) >>> b = np.array([[2], [3], [4]]) >>> np.vstack((a,b)) array([[1], [2], [3], [2], [3], [4]]) """ raise NotImplementedError def safe_eval(source): """Protected string evaluation. Evaluate a string containing a Python literal expression without allowing the execution of arbitrary non-literal code. Parameters ---------- source : str The string to evaluate. Returns ------- obj : object The result of evaluating `source`. Raises ------ SyntaxError If the code has invalid Python syntax, or if it contains non-literal code. Examples -------- >>> np.safe_eval('1') 1 >>> np.safe_eval('[1, 2, 3]') [1, 2, 3] >>> np.safe_eval('{"foo": ("bar", 10.0)}') {'foo': ('bar', 10.0)} >>> np.safe_eval('import os') Traceback (most recent call last): ... SyntaxError: invalid syntax >>> np.safe_eval('open("/home/user/.ssh/id_dsa").read()') Traceback (most recent call last): ... SyntaxError: Unsupported source construct: compiler.ast.CallFunc """ raise NotImplementedError def save(file, arr): """Save an array to a binary file in NumPy ``.npy`` format. Parameters ---------- file : file or str File or filename to which the data is saved. If file is a file-object, then the filename is unchanged. If file is a string, a ``.npy`` extension will be appended to the file name if it does not already have one. arr : array_like Array data to be saved. See Also -------- savez : Save several arrays into a ``.npz`` archive savetxt, load Notes ----- For a description of the ``.npy`` format, see `format`. Examples -------- >>> from tempfile import TemporaryFile >>> outfile = TemporaryFile() >>> x = np.arange(10) >>> np.save(outfile, x) >>> outfile.seek(0) # Only needed here to simulate closing & reopening file >>> np.load(outfile) array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) """ raise NotImplementedError def savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n'): """Save an array to a text file. Parameters ---------- fname : filename or file handle If the filename ends in ``.gz``, the file is automatically saved in compressed gzip format. `loadtxt` understands gzipped files transparently. X : array_like Data to be saved to a text file. fmt : str or sequence of strs A single format (%10.5f), a sequence of formats, or a multi-format string, e.g. 'Iteration %d -- %10.5f', in which case `delimiter` is ignored. delimiter : str Character separating columns. newline : str .. versionadded:: 1.5.0 Character separating lines. See Also -------- save : Save an array to a binary file in NumPy ``.npy`` format savez : Save several arrays into a ``.npz`` compressed archive Notes ----- Further explanation of the `fmt` parameter (``%[flag]width[.precision]specifier``): flags: ``-`` : left justify ``+`` : Forces to preceed result with + or -. ``0`` : Left pad the number with zeros instead of space (see width). width: Minimum number of characters to be printed. The value is not truncated if it has more characters. precision: - For integer specifiers (eg. ``d,i,o,x``), the minimum number of digits. - For ``e, E`` and ``f`` specifiers, the number of digits to print after the decimal point. - For ``g`` and ``G``, the maximum number of significant digits. - For ``s``, the maximum number of characters. specifiers: ``c`` : character ``d`` or ``i`` : signed decimal integer ``e`` or ``E`` : scientific notation with ``e`` or ``E``. ``f`` : decimal floating point ``g,G`` : use the shorter of ``e,E`` or ``f`` ``o`` : signed octal ``s`` : string of characters ``u`` : unsigned decimal integer ``x,X`` : unsigned hexadecimal integer This explanation of ``fmt`` is not complete, for an exhaustive specification see [1]_. References ---------- .. [1] `Format Specification Mini-Language `_, Python Documentation. Examples -------- >>> x = y = z = np.arange(0.0,5.0,1.0) >>> np.savetxt('test.out', x, delimiter=',') # X is an array >>> np.savetxt('test.out', (x,y,z)) # x,y,z equal sized 1D arrays >>> np.savetxt('test.out', x, fmt='%1.4e') # use exponential notation """ raise NotImplementedError def savez(file): """Save several arrays into a single file in uncompressed ``.npz`` format. If arguments are passed in with no keywords, the corresponding variable names, in the .npz file, are 'arr_0', 'arr_1', etc. If keyword arguments are given, the corresponding variable names, in the ``.npz`` file will match the keyword names. Parameters ---------- file : str or file Either the file name (string) or an open file (file-like object) where the data will be saved. If file is a string, the ``.npz`` extension will be appended to the file name if it is not already there. *args : Arguments, optional Arrays to save to the file. Since it is not possible for Python to know the names of the arrays outside `savez`, the arrays will be saved with names "arr_0", "arr_1", and so on. These arguments can be any expression. **kwds : Keyword arguments, optional Arrays to save to the file. Arrays will be saved in the file with the keyword names. Returns ------- None See Also -------- save : Save a single array to a binary file in NumPy format. savetxt : Save an array to a file as plain text. Notes ----- The ``.npz`` file format is a zipped archive of files named after the variables they contain. The archive is not compressed and each file in the archive contains one variable in ``.npy`` format. For a description of the ``.npy`` format, see `format`. When opening the saved ``.npz`` file with `load` a `NpzFile` object is returned. This is a dictionary-like object which can be queried for its list of arrays (with the ``.files`` attribute), and for the arrays themselves. Examples -------- >>> from tempfile import TemporaryFile >>> outfile = TemporaryFile() >>> x = np.arange(10) >>> y = np.sin(x) Using `savez` with *args, the arrays are saved with default names. >>> np.savez(outfile, x, y) >>> outfile.seek(0) # Only needed here to simulate closing & reopening file >>> npzfile = np.load(outfile) >>> npzfile.files ['arr_1', 'arr_0'] >>> npzfile['arr_0'] array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) Using `savez` with **kwds, the arrays are saved with the keyword names. >>> outfile = TemporaryFile() >>> np.savez(outfile, x=x, y=y) >>> outfile.seek(0) >>> npzfile = np.load(outfile) >>> npzfile.files ['y', 'x'] >>> npzfile['x'] array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) See Also -------- numpy.savez_compressed : Save several arrays into a compressed .npz file format """ raise NotImplementedError def savez_compressed(file): """Save several arrays into a single file in compressed ``.npz`` format. If keyword arguments are given, then filenames are taken from the keywords. If arguments are passed in with no keywords, then stored file names are arr_0, arr_1, etc. Parameters ---------- file : str File name of .npz file. args : Arguments Function arguments. kwds : Keyword arguments Keywords. See Also -------- numpy.savez : Save several arrays into an uncompressed .npz file format """ raise NotImplementedError def sctype2char(sctype): """Return the string representation of a scalar dtype. Parameters ---------- sctype : scalar dtype or object If a scalar dtype, the corresponding string character is returned. If an object, `sctype2char` tries to infer its scalar type and then return the corresponding string character. Returns ------- typechar : str The string character corresponding to the scalar type. Raises ------ ValueError If `sctype` is an object for which the type can not be inferred. See Also -------- obj2sctype, issctype, issubsctype, mintypecode Examples -------- >>> for sctype in [np.int32, np.float, np.complex, np.string_, np.ndarray]: ... print np.sctype2char(sctype) l d D S O >>> x = np.array([1., 2-1.j]) >>> np.sctype2char(x) 'D' >>> np.sctype2char(list) 'O' """ raise NotImplementedError def searchsorted(a, v, side='left'): """Find indices where elements should be inserted to maintain order. Find the indices into a sorted array `a` such that, if the corresponding elements in `v` were inserted before the indices, the order of `a` would be preserved. Parameters ---------- a : 1-D array_like Input array, sorted in ascending order. v : array_like Values to insert into `a`. side : {'left', 'right'}, optional If 'left', the index of the first suitable location found is given. If 'right', return the last such index. If there is no suitable index, return either 0 or N (where N is the length of `a`). Returns ------- indices : array of ints Array of insertion points with the same shape as `v`. See Also -------- sort : Return a sorted copy of an array. histogram : Produce histogram from 1-D data. Notes ----- Binary search is used to find the required insertion points. As of Numpy 1.4.0 `searchsorted` works with real/complex arrays containing `nan` values. The enhanced sort order is documented in `sort`. Examples -------- >>> np.searchsorted([1,2,3,4,5], 3) 2 >>> np.searchsorted([1,2,3,4,5], 3, side='right') 3 >>> np.searchsorted([1,2,3,4,5], [-10, 10, 2, 3]) array([0, 5, 1, 2]) """ raise NotImplementedError def select(condlist, choicelist, default=0): """Return an array drawn from elements in choicelist, depending on conditions. Parameters ---------- condlist : list of bool ndarrays The list of conditions which determine from which array in `choicelist` the output elements are taken. When multiple conditions are satisfied, the first one encountered in `condlist` is used. choicelist : list of ndarrays The list of arrays from which the output elements are taken. It has to be of the same length as `condlist`. default : scalar, optional The element inserted in `output` when all conditions evaluate to False. Returns ------- output : ndarray The output at position m is the m-th element of the array in `choicelist` where the m-th element of the corresponding array in `condlist` is True. See Also -------- where : Return elements from one of two arrays depending on condition. take, choose, compress, diag, diagonal Examples -------- >>> x = np.arange(10) >>> condlist = [x<3, x>5] >>> choicelist = [x, x**2] >>> np.select(condlist, choicelist) array([ 0, 1, 2, 0, 0, 0, 36, 49, 64, 81]) """ raise NotImplementedError def set_numeric_ops(): """set_numeric_ops(op1=func1, op2=func2, ...) Set numerical operators for array objects. Parameters ---------- op1, op2, ... : callable Each ``op = func`` pair describes an operator to be replaced. For example, ``add = lambda x, y: np.add(x, y) % 5`` would replace addition by modulus 5 addition. Returns ------- saved_ops : list of callables A list of all operators, stored before making replacements. Notes ----- .. WARNING:: Use with care! Incorrect usage may lead to memory errors. A function replacing an operator cannot make use of that operator. For example, when replacing add, you may not use ``+``. Instead, directly call ufuncs. Examples -------- >>> def add_mod5(x, y): ... return np.add(x, y) % 5 ... >>> old_funcs = np.set_numeric_ops(add=add_mod5) >>> x = np.arange(12).reshape((3, 4)) >>> x + x array([[0, 2, 4, 1], [3, 0, 2, 4], [1, 3, 0, 2]]) >>> ignore = np.set_numeric_ops(**old_funcs) # restore operators """ # BUILTIN raise NotImplementedError def set_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, suppress=None, nanstr=None, infstr=None): """Set printing options. These options determine the way floating point numbers, arrays and other NumPy objects are displayed. Parameters ---------- precision : int, optional Number of digits of precision for floating point output (default 8). threshold : int, optional Total number of array elements which trigger summarization rather than full repr (default 1000). edgeitems : int, optional Number of array items in summary at beginning and end of each dimension (default 3). linewidth : int, optional The number of characters per line for the purpose of inserting line breaks (default 75). suppress : bool, optional Whether or not suppress printing of small floating point values using scientific notation (default False). nanstr : str, optional String representation of floating point not-a-number (default nan). infstr : str, optional String representation of floating point infinity (default inf). See Also -------- get_printoptions, set_string_function Examples -------- Floating point precision can be set: >>> np.set_printoptions(precision=4) >>> print np.array([1.123456789]) [ 1.1235] Long arrays can be summarised: >>> np.set_printoptions(threshold=5) >>> print np.arange(10) [0 1 2 ..., 7 8 9] Small results can be suppressed: >>> eps = np.finfo(float).eps >>> x = np.arange(4.) >>> x**2 - (x + eps)**2 array([ -4.9304e-32, -4.4409e-16, 0.0000e+00, 0.0000e+00]) >>> np.set_printoptions(suppress=True) >>> x**2 - (x + eps)**2 array([-0., -0., 0., 0.]) To put back the default options, you can use: >>> np.set_printoptions(edgeitems=3,infstr='Inf', ... linewidth=75, nanstr='NaN', precision=8, ... suppress=False, threshold=1000) """ raise NotImplementedError def set_string_function(f, repr=True): """Set a Python function to be used when pretty printing arrays. Parameters ---------- f : function or None Function to be used to pretty print arrays. The function should expect a single array argument and return a string of the representation of the array. If None, the function is reset to the default NumPy function to print arrays. repr : bool, optional If True (default), the function for pretty printing (``__repr__``) is set, if False the function that returns the default string representation (``__str__``) is set. See Also -------- set_printoptions, get_printoptions Examples -------- >>> def pprint(arr): ... return 'HA! - What are you going to do now?' ... >>> np.set_string_function(pprint) >>> a = np.arange(10) >>> a HA! - What are you going to do now? >>> print a [0 1 2 3 4 5 6 7 8 9] We can reset the function to the default: >>> np.set_string_function(None) >>> a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) `repr` affects either pretty printing or normal string representation. Note that ``__repr__`` is still affected by setting ``__str__`` because the width of each array element in the returned string becomes equal to the length of the result of ``__str__()``. >>> x = np.arange(4) >>> np.set_string_function(lambda x:'random', repr=False) >>> x.__str__() 'random' >>> x.__repr__() 'array([ 0, 1, 2, 3])' """ raise NotImplementedError def setbufsize(size): """Set the size of the buffer used in ufuncs. Parameters ---------- size : int Size of buffer. """ raise NotImplementedError def setdiff1d(ar1, ar2, assume_unique=False): """Find the set difference of two arrays. Return the sorted, unique values in `ar1` that are not in `ar2`. Parameters ---------- ar1 : array_like Input array. ar2 : array_like Input comparison array. assume_unique : bool If True, the input arrays are both assumed to be unique, which can speed up the calculation. Default is False. Returns ------- difference : ndarray Sorted 1D array of values in `ar1` that are not in `ar2`. See Also -------- numpy.lib.arraysetops : Module with a number of other functions for performing set operations on arrays. Examples -------- >>> a = np.array([1, 2, 3, 2, 4, 1]) >>> b = np.array([3, 4, 5, 6]) >>> np.setdiff1d(a, b) array([1, 2]) """ raise NotImplementedError def seterr(all=None, divide=None, over=None, under=None, invalid=None): """Set how floating-point errors are handled. Note that operations on integer scalar types (such as `int16`) are handled like floating point, and are affected by these settings. Parameters ---------- all : {'ignore', 'warn', 'raise', 'call', 'print', 'log'}, optional Set treatment for all types of floating-point errors at once: - ignore: Take no action when the exception occurs. - warn: Print a `RuntimeWarning` (via the Python `warnings` module). - raise: Raise a `FloatingPointError`. - call: Call a function specified using the `seterrcall` function. - print: Print a warning directly to ``stdout``. - log: Record error in a Log object specified by `seterrcall`. The default is not to change the current behavior. divide : {'ignore', 'warn', 'raise', 'call', 'print', 'log'}, optional Treatment for division by zero. over : {'ignore', 'warn', 'raise', 'call', 'print', 'log'}, optional Treatment for floating-point overflow. under : {'ignore', 'warn', 'raise', 'call', 'print', 'log'}, optional Treatment for floating-point underflow. invalid : {'ignore', 'warn', 'raise', 'call', 'print', 'log'}, optional Treatment for invalid floating-point operation. Returns ------- old_settings : dict Dictionary containing the old settings. See also -------- seterrcall : Set a callback function for the 'call' mode. geterr, geterrcall Notes ----- The floating-point exceptions are defined in the IEEE 754 standard [1]: - Division by zero: infinite result obtained from finite numbers. - Overflow: result too large to be expressed. - Underflow: result so close to zero that some precision was lost. - Invalid operation: result is not an expressible number, typically indicates that a NaN was produced. .. [1] http://en.wikipedia.org/wiki/IEEE_754 Examples -------- >>> old_settings = np.seterr(all='ignore') #seterr to known value >>> np.seterr(over='raise') {'over': 'ignore', 'divide': 'ignore', 'invalid': 'ignore', 'under': 'ignore'} >>> np.seterr(all='ignore') # reset to default {'over': 'raise', 'divide': 'ignore', 'invalid': 'ignore', 'under': 'ignore'} >>> np.int16(32000) * np.int16(3) 30464 >>> old_settings = np.seterr(all='warn', over='raise') >>> np.int16(32000) * np.int16(3) Traceback (most recent call last): File "", line 1, in FloatingPointError: overflow encountered in short_scalars >>> old_settings = np.seterr(all='print') >>> np.geterr() {'over': 'print', 'divide': 'print', 'invalid': 'print', 'under': 'print'} >>> np.int16(32000) * np.int16(3) Warning: overflow encountered in short_scalars 30464 """ raise NotImplementedError def seterrcall(func): """Set the floating-point error callback function or log object. There are two ways to capture floating-point error messages. The first is to set the error-handler to 'call', using `seterr`. Then, set the function to call using this function. The second is to set the error-handler to 'log', using `seterr`. Floating-point errors then trigger a call to the 'write' method of the provided object. Parameters ---------- func : callable f(err, flag) or object with write method Function to call upon floating-point errors ('call'-mode) or object whose 'write' method is used to log such message ('log'-mode). The call function takes two arguments. The first is the type of error (one of "divide", "over", "under", or "invalid"), and the second is the status flag. The flag is a byte, whose least-significant bits indicate the status:: [0 0 0 0 invalid over under invalid] In other words, ``flags = divide + 2*over + 4*under + 8*invalid``. If an object is provided, its write method should take one argument, a string. Returns ------- h : callable, log instance or None The old error handler. See Also -------- seterr, geterr, geterrcall Examples -------- Callback upon error: >>> def err_handler(type, flag): ... print "Floating point error (%s), with flag %s" % (type, flag) ... >>> saved_handler = np.seterrcall(err_handler) >>> save_err = np.seterr(all='call') >>> np.array([1, 2, 3]) / 0.0 Floating point error (divide by zero), with flag 1 array([ Inf, Inf, Inf]) >>> np.seterrcall(saved_handler) >>> np.seterr(**save_err) {'over': 'call', 'divide': 'call', 'invalid': 'call', 'under': 'call'} Log error message: >>> class Log(object): ... def write(self, msg): ... print "LOG: %s" % msg ... >>> log = Log() >>> saved_handler = np.seterrcall(log) >>> save_err = np.seterr(all='log') >>> np.array([1, 2, 3]) / 0.0 LOG: Warning: divide by zero encountered in divide array([ Inf, Inf, Inf]) >>> np.seterrcall(saved_handler) <__main__.Log object at 0x...> >>> np.seterr(**save_err) {'over': 'log', 'divide': 'log', 'invalid': 'log', 'under': 'log'} """ raise NotImplementedError def seterrobj(errobj): """seterrobj(errobj) Set the object that defines floating-point error handling. The error object contains all information that defines the error handling behavior in Numpy. `seterrobj` is used internally by the other functions that set error handling behavior (`seterr`, `seterrcall`). Parameters ---------- errobj : list The error object, a list containing three elements: [internal numpy buffer size, error mask, error callback function]. The error mask is a single integer that holds the treatment information on all four floating point errors. The information for each error type is contained in three bits of the integer. If we print it in base 8, we can see what treatment is set for "invalid", "under", "over", and "divide" (in that order). The printed string can be interpreted with * 0 : 'ignore' * 1 : 'warn' * 2 : 'raise' * 3 : 'call' * 4 : 'print' * 5 : 'log' See Also -------- geterrobj, seterr, geterr, seterrcall, geterrcall getbufsize, setbufsize Notes ----- For complete documentation of the types of floating-point exceptions and treatment options, see `seterr`. Examples -------- >>> old_errobj = np.geterrobj() # first get the defaults >>> old_errobj [10000, 0, None] >>> def err_handler(type, flag): ... print "Floating point error (%s), with flag %s" % (type, flag) ... >>> new_errobj = [20000, 12, err_handler] >>> np.seterrobj(new_errobj) >>> np.base_repr(12, 8) # int for divide=4 ('print') and over=1 ('warn') '14' >>> np.geterr() {'over': 'warn', 'divide': 'print', 'invalid': 'ignore', 'under': 'ignore'} >>> np.geterrcall() is err_handler True """ # BUILTIN raise NotImplementedError def setxor1d(ar1, ar2, assume_unique=False): """Find the set exclusive-or of two arrays. Return the sorted, unique values that are in only one (not both) of the input arrays. Parameters ---------- ar1, ar2 : array_like Input arrays. assume_unique : bool If True, the input arrays are both assumed to be unique, which can speed up the calculation. Default is False. Returns ------- xor : ndarray Sorted 1D array of unique values that are in only one of the input arrays. Examples -------- >>> a = np.array([1, 2, 3, 2, 4]) >>> b = np.array([2, 3, 5, 7, 5]) >>> np.setxor1d(a,b) array([1, 4, 5, 7]) """ raise NotImplementedError def show_config(): """ """ raise NotImplementedError def sinc(x): """Return the sinc function. The sinc function is :math:`\sin(\pi x)/(\pi x)`. Parameters ---------- x : ndarray Array (possibly multi-dimensional) of values for which to to calculate ``sinc(x)``. Returns ------- out : ndarray ``sinc(x)``, which has the same shape as the input. Notes ----- ``sinc(0)`` is the limit value 1. The name sinc is short for "sine cardinal" or "sinus cardinalis". The sinc function is used in various signal processing applications, including in anti-aliasing, in the construction of a Lanczos resampling filter, and in interpolation. For bandlimited interpolation of discrete-time signals, the ideal interpolation kernel is proportional to the sinc function. References ---------- .. [1] Weisstein, Eric W. "Sinc Function." From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/SincFunction.html .. [2] Wikipedia, "Sinc function", http://en.wikipedia.org/wiki/Sinc_function Examples -------- >>> x = np.arange(-20., 21.)/5. >>> np.sinc(x) array([ -3.89804309e-17, -4.92362781e-02, -8.40918587e-02, -8.90384387e-02, -5.84680802e-02, 3.89804309e-17, 6.68206631e-02, 1.16434881e-01, 1.26137788e-01, 8.50444803e-02, -3.89804309e-17, -1.03943254e-01, -1.89206682e-01, -2.16236208e-01, -1.55914881e-01, 3.89804309e-17, 2.33872321e-01, 5.04551152e-01, 7.56826729e-01, 9.35489284e-01, 1.00000000e+00, 9.35489284e-01, 7.56826729e-01, 5.04551152e-01, 2.33872321e-01, 3.89804309e-17, -1.55914881e-01, -2.16236208e-01, -1.89206682e-01, -1.03943254e-01, -3.89804309e-17, 8.50444803e-02, 1.26137788e-01, 1.16434881e-01, 6.68206631e-02, 3.89804309e-17, -5.84680802e-02, -8.90384387e-02, -8.40918587e-02, -4.92362781e-02, -3.89804309e-17]) >>> import matplotlib.pyplot as plt >>> plt.plot(x, np.sinc(x)) [] >>> plt.title("Sinc Function") >>> plt.ylabel("Amplitude") >>> plt.xlabel("X") >>> plt.show() It works in 2-D as well: >>> x = np.arange(-200., 201.)/50. >>> xx = np.outer(x, x) >>> plt.imshow(np.sinc(xx)) """ raise NotImplementedError def size(a, axis=None): """Return the number of elements along a given axis. Parameters ---------- a : array_like Input data. axis : int, optional Axis along which the elements are counted. By default, give the total number of elements. Returns ------- element_count : int Number of elements along the specified axis. See Also -------- shape : dimensions of array ndarray.shape : dimensions of array ndarray.size : number of elements in array Examples -------- >>> a = np.array([[1,2,3],[4,5,6]]) >>> np.size(a) 6 >>> np.size(a,1) 3 >>> np.size(a,0) 2 """ raise NotImplementedError def sometrue(a, axis=None, out=None): """Check whether some values are true. Refer to `any` for full documentation. See Also -------- any : equivalent function """ raise NotImplementedError def sort(a, axis=-1, kind='quicksort', order=None): """Return a sorted copy of an array. Parameters ---------- a : array_like Array to be sorted. axis : int or None, optional Axis along which to sort. If None, the array is flattened before sorting. The default is -1, which sorts along the last axis. kind : {'quicksort', 'mergesort', 'heapsort'}, optional Sorting algorithm. Default is 'quicksort'. order : list, optional When `a` is a structured array, this argument specifies which fields to compare first, second, and so on. This list does not need to include all of the fields. Returns ------- sorted_array : ndarray Array of the same type and shape as `a`. See Also -------- ndarray.sort : Method to sort an array in-place. argsort : Indirect sort. lexsort : Indirect stable sort on multiple keys. searchsorted : Find elements in a sorted array. Notes ----- The various sorting algorithms are characterized by their average speed, worst case performance, work space size, and whether they are stable. A stable sort keeps items with the same key in the same relative order. The three available algorithms have the following properties: =========== ======= ============= ============ ======= kind speed worst case work space stable =========== ======= ============= ============ ======= 'quicksort' 1 O(n^2) 0 no 'mergesort' 2 O(n*log(n)) ~n/2 yes 'heapsort' 3 O(n*log(n)) 0 no =========== ======= ============= ============ ======= All the sort algorithms make temporary copies of the data when sorting along any but the last axis. Consequently, sorting along the last axis is faster and uses less space than sorting along any other axis. The sort order for complex numbers is lexicographic. If both the real and imaginary parts are non-nan then the order is determined by the real parts except when they are equal, in which case the order is determined by the imaginary parts. Previous to numpy 1.4.0 sorting real and complex arrays containing nan values led to undefined behaviour. In numpy versions >= 1.4.0 nan values are sorted to the end. The extended sort order is: * Real: [R, nan] * Complex: [R + Rj, R + nanj, nan + Rj, nan + nanj] where R is a non-nan real value. Complex values with the same nan placements are sorted according to the non-nan part if it exists. Non-nan values are sorted as before. Examples -------- >>> a = np.array([[1,4],[3,1]]) >>> np.sort(a) # sort along the last axis array([[1, 4], [1, 3]]) >>> np.sort(a, axis=None) # sort the flattened array array([1, 1, 3, 4]) >>> np.sort(a, axis=0) # sort along the first axis array([[1, 1], [3, 4]]) Use the `order` keyword to specify a field to use when sorting a structured array: >>> dtype = [('name', 'S10'), ('height', float), ('age', int)] >>> values = [('Arthur', 1.8, 41), ('Lancelot', 1.9, 38), ... ('Galahad', 1.7, 38)] >>> a = np.array(values, dtype=dtype) # create a structured array >>> np.sort(a, order='height') # doctest: +SKIP array([('Galahad', 1.7, 38), ('Arthur', 1.8, 41), ('Lancelot', 1.8999999999999999, 38)], dtype=[('name', '|S10'), ('height', '>> np.sort(a, order=['age', 'height']) # doctest: +SKIP array([('Galahad', 1.7, 38), ('Lancelot', 1.8999999999999999, 38), ('Arthur', 1.8, 41)], dtype=[('name', '|S10'), ('height', '>> np.sort_complex([5, 3, 6, 2, 1]) array([ 1.+0.j, 2.+0.j, 3.+0.j, 5.+0.j, 6.+0.j]) >>> np.sort_complex([1 + 2j, 2 - 1j, 3 - 2j, 3 - 3j, 3 + 5j]) array([ 1.+2.j, 2.-1.j, 3.-3.j, 3.-2.j, 3.+5.j]) """ raise NotImplementedError def source(object, output=sys.stdout): """Print or write to a file the source code for a Numpy object. The source code is only returned for objects written in Python. Many functions and classes are defined in C and will therefore not return useful information. Parameters ---------- object : numpy object Input object. This can be any object (function, class, module, ...). output : file object, optional If `output` not supplied then source code is printed to screen (sys.stdout). File object must be created with either write 'w' or append 'a' modes. See Also -------- lookfor, info Examples -------- >>> np.source(np.interp) #doctest: +SKIP In file: /usr/lib/python2.6/dist-packages/numpy/lib/function_base.py def interp(x, xp, fp, left=None, right=None): '''.... (full docstring printed)''' if isinstance(x, (float, int, number)): return compiled_interp([x], xp, fp, left, right).item() else: return compiled_interp(x, xp, fp, left, right) The source code is only returned for objects written in Python. >>> np.source(np.array) #doctest: +SKIP Not available for this object. """ raise NotImplementedError def split(ary, indices_or_sections, axis=0): """Split an array into multiple sub-arrays of equal size. Parameters ---------- ary : ndarray Array to be divided into sub-arrays. indices_or_sections : int or 1-D array If `indices_or_sections` is an integer, N, the array will be divided into N equal arrays along `axis`. If such a split is not possible, an error is raised. If `indices_or_sections` is a 1-D array of sorted integers, the entries indicate where along `axis` the array is split. For example, ``[2, 3]`` would, for ``axis=0``, result in - ary[:2] - ary[2:3] - ary[3:] If an index exceeds the dimension of the array along `axis`, an empty sub-array is returned correspondingly. axis : int, optional The axis along which to split, default is 0. Returns ------- sub-arrays : list of ndarrays A list of sub-arrays. Raises ------ ValueError If `indices_or_sections` is given as an integer, but a split does not result in equal division. See Also -------- array_split : Split an array into multiple sub-arrays of equal or near-equal size. Does not raise an exception if an equal division cannot be made. hsplit : Split array into multiple sub-arrays horizontally (column-wise). vsplit : Split array into multiple sub-arrays vertically (row wise). dsplit : Split array into multiple sub-arrays along the 3rd axis (depth). concatenate : Join arrays together. hstack : Stack arrays in sequence horizontally (column wise). vstack : Stack arrays in sequence vertically (row wise). dstack : Stack arrays in sequence depth wise (along third dimension). Examples -------- >>> x = np.arange(9.0) >>> np.split(x, 3) [array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7., 8.])] >>> x = np.arange(8.0) >>> np.split(x, [3, 5, 6, 10]) [array([ 0., 1., 2.]), array([ 3., 4.]), array([ 5.]), array([ 6., 7.]), array([], dtype=float64)] """ raise NotImplementedError def squeeze(a): """Remove single-dimensional entries from the shape of an array. Parameters ---------- a : array_like Input data. Returns ------- squeezed : ndarray The input array, but with with all dimensions of length 1 removed. Whenever possible, a view on `a` is returned. Examples -------- >>> x = np.array([[[0], [1], [2]]]) >>> x.shape (1, 3, 1) >>> np.squeeze(x).shape (3,) """ raise NotImplementedError def std(a, axis=None, dtype=None, out=None, ddof=0): """Compute the standard deviation along the specified axis. Returns the standard deviation, a measure of the spread of a distribution, of the array elements. The standard deviation is computed for the flattened array by default, otherwise over the specified axis. Parameters ---------- a : array_like Calculate the standard deviation of these values. axis : int, optional Axis along which the standard deviation is computed. The default is to compute the standard deviation of the flattened array. dtype : dtype, optional Type to use in computing the standard deviation. For arrays of integer type the default is float64, for arrays of float types it is the same as the array type. out : ndarray, optional Alternative output array in which to place the result. It must have the same shape as the expected output but the type (of the calculated values) will be cast if necessary. ddof : int, optional Means Delta Degrees of Freedom. The divisor used in calculations is ``N - ddof``, where ``N`` represents the number of elements. By default `ddof` is zero. Returns ------- standard_deviation : ndarray, see dtype parameter above. If `out` is None, return a new array containing the standard deviation, otherwise return a reference to the output array. See Also -------- var, mean numpy.doc.ufuncs : Section "Output arguments" Notes ----- The standard deviation is the square root of the average of the squared deviations from the mean, i.e., ``std = sqrt(mean(abs(x - x.mean())**2))``. The average squared deviation is normally calculated as ``x.sum() / N``, where ``N = len(x)``. If, however, `ddof` is specified, the divisor ``N - ddof`` is used instead. In standard statistical practice, ``ddof=1`` provides an unbiased estimator of the variance of the infinite population. ``ddof=0`` provides a maximum likelihood estimate of the variance for normally distributed variables. The standard deviation computed in this function is the square root of the estimated variance, so even with ``ddof=1``, it will not be an unbiased estimate of the standard deviation per se. Note that, for complex numbers, `std` takes the absolute value before squaring, so that the result is always real and nonnegative. For floating-point input, the *std* is computed using the same precision the input has. Depending on the input data, this can cause the results to be inaccurate, especially for float32 (see example below). Specifying a higher-accuracy accumulator using the `dtype` keyword can alleviate this issue. Examples -------- >>> a = np.array([[1, 2], [3, 4]]) >>> np.std(a) 1.1180339887498949 >>> np.std(a, axis=0) array([ 1., 1.]) >>> np.std(a, axis=1) array([ 0.5, 0.5]) In single precision, std() can be inaccurate: >>> a = np.zeros((2,512*512), dtype=np.float32) >>> a[0,:] = 1.0 >>> a[1,:] = 0.1 >>> np.std(a) 0.45172946707416706 Computing the standard deviation in float64 is more accurate: >>> np.std(a, dtype=np.float64) 0.44999999925552653 """ raise NotImplementedError def sum(a, axis=None, dtype=None, out=None): """Sum of array elements over a given axis. Parameters ---------- a : array_like Elements to sum. axis : integer, optional Axis over which the sum is taken. By default `axis` is None, and all elements are summed. dtype : dtype, optional The type of the returned array and of the accumulator in which the elements are summed. By default, the dtype of `a` is used. An exception is when `a` has an integer type with less precision than the default platform integer. In that case, the default platform integer is used instead. out : ndarray, optional Array into which the output is placed. By default, a new array is created. If `out` is given, it must be of the appropriate shape (the shape of `a` with `axis` removed, i.e., ``numpy.delete(a.shape, axis)``). Its type is preserved. See `doc.ufuncs` (Section "Output arguments") for more details. Returns ------- sum_along_axis : ndarray An array with the same shape as `a`, with the specified axis removed. If `a` is a 0-d array, or if `axis` is None, a scalar is returned. If an output array is specified, a reference to `out` is returned. See Also -------- ndarray.sum : Equivalent method. cumsum : Cumulative sum of array elements. trapz : Integration of array values using the composite trapezoidal rule. mean, average Notes ----- Arithmetic is modular when using integer types, and no error is raised on overflow. Examples -------- >>> np.sum([0.5, 1.5]) 2.0 >>> np.sum([0.5, 0.7, 0.2, 1.5], dtype=np.int32) 1 >>> np.sum([[0, 1], [0, 5]]) 6 >>> np.sum([[0, 1], [0, 5]], axis=0) array([0, 6]) >>> np.sum([[0, 1], [0, 5]], axis=1) array([1, 5]) If the accumulator is too small, overflow occurs: >>> np.ones(128, dtype=np.int8).sum(dtype=np.int8) -128 """ raise NotImplementedError def swapaxes(a, axis1, axis2): """Interchange two axes of an array. Parameters ---------- a : array_like Input array. axis1 : int First axis. axis2 : int Second axis. Returns ------- a_swapped : ndarray If `a` is an ndarray, then a view of `a` is returned; otherwise a new array is created. Examples -------- >>> x = np.array([[1,2,3]]) >>> np.swapaxes(x,0,1) array([[1], [2], [3]]) >>> x = np.array([[[0,1],[2,3]],[[4,5],[6,7]]]) >>> x array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]]) >>> np.swapaxes(x,0,2) array([[[0, 4], [2, 6]], [[1, 5], [3, 7]]]) """ raise NotImplementedError def take(a, indices, axis=None, out=None, mode='raise'): """Take elements from an array along an axis. This function does the same thing as "fancy" indexing (indexing arrays using arrays); however, it can be easier to use if you need elements along a given axis. Parameters ---------- a : array_like The source array. indices : array_like The indices of the values to extract. axis : int, optional The axis over which to select values. By default, the flattened input array is used. out : ndarray, optional If provided, the result will be placed in this array. It should be of the appropriate shape and dtype. mode : {'raise', 'wrap', 'clip'}, optional Specifies how out-of-bounds indices will behave. * 'raise' -- raise an error (default) * 'wrap' -- wrap around * 'clip' -- clip to the range 'clip' mode means that all indices that are too large are replaced by the index that addresses the last element along that axis. Note that this disables indexing with negative numbers. Returns ------- subarray : ndarray The returned array has the same type as `a`. See Also -------- ndarray.take : equivalent method Examples -------- >>> a = [4, 3, 5, 7, 6, 8] >>> indices = [0, 1, 4] >>> np.take(a, indices) array([4, 3, 6]) In this example if `a` is an ndarray, "fancy" indexing can be used. >>> a = np.array(a) >>> a[indices] array([4, 3, 6]) """ raise NotImplementedError def tensordot(a, b, axes=2): """Compute tensor dot product along specified axes for arrays >= 1-D. Given two tensors (arrays of dimension greater than or equal to one), ``a`` and ``b``, and an array_like object containing two array_like objects, ``(a_axes, b_axes)``, sum the products of ``a``'s and ``b``'s elements (components) over the axes specified by ``a_axes`` and ``b_axes``. The third argument can be a single non-negative integer_like scalar, ``N``; if it is such, then the last ``N`` dimensions of ``a`` and the first ``N`` dimensions of ``b`` are summed over. Parameters ---------- a, b : array_like, len(shape) >= 1 Tensors to "dot". axes : variable type * integer_like scalar Number of axes to sum over (applies to both arrays); or * array_like, shape = (2,), both elements array_like Axes to be summed over, first sequence applying to ``a``, second to ``b``. See Also -------- dot, einsum Notes ----- When there is more than one axis to sum over - and they are not the last (first) axes of ``a`` (``b``) - the argument ``axes`` should consist of two sequences of the same length, with the first axis to sum over given first in both sequences, the second axis second, and so forth. Examples -------- A "traditional" example: >>> a = np.arange(60.).reshape(3,4,5) >>> b = np.arange(24.).reshape(4,3,2) >>> c = np.tensordot(a,b, axes=([1,0],[0,1])) >>> c.shape (5, 2) >>> c array([[ 4400., 4730.], [ 4532., 4874.], [ 4664., 5018.], [ 4796., 5162.], [ 4928., 5306.]]) >>> # A slower but equivalent way of computing the same... >>> d = np.zeros((5,2)) >>> for i in range(5): ... for j in range(2): ... for k in range(3): ... for n in range(4): ... d[i,j] += a[k,n,i] * b[n,k,j] >>> c == d array([[ True, True], [ True, True], [ True, True], [ True, True], [ True, True]], dtype=bool) An extended example taking advantage of the overloading of + and \*: >>> a = np.array(range(1, 9)) >>> a.shape = (2, 2, 2) >>> A = np.array(('a', 'b', 'c', 'd'), dtype=object) >>> A.shape = (2, 2) >>> a; A array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) array([[a, b], [c, d]], dtype=object) >>> np.tensordot(a, A) # third argument default is 2 array([abbcccdddd, aaaaabbbbbbcccccccdddddddd], dtype=object) >>> np.tensordot(a, A, 1) array([[[acc, bdd], [aaacccc, bbbdddd]], [[aaaaacccccc, bbbbbdddddd], [aaaaaaacccccccc, bbbbbbbdddddddd]]], dtype=object) >>> np.tensordot(a, A, 0) # "Left for reader" (result too long to incl.) array([[[[[a, b], [c, d]], ... >>> np.tensordot(a, A, (0, 1)) array([[[abbbbb, cddddd], [aabbbbbb, ccdddddd]], [[aaabbbbbbb, cccddddddd], [aaaabbbbbbbb, ccccdddddddd]]], dtype=object) >>> np.tensordot(a, A, (2, 1)) array([[[abb, cdd], [aaabbbb, cccdddd]], [[aaaaabbbbbb, cccccdddddd], [aaaaaaabbbbbbbb, cccccccdddddddd]]], dtype=object) >>> np.tensordot(a, A, ((0, 1), (0, 1))) array([abbbcccccddddddd, aabbbbccccccdddddddd], dtype=object) >>> np.tensordot(a, A, ((2, 1), (1, 0))) array([acccbbdddd, aaaaacccccccbbbbbbdddddddd], dtype=object) """ raise NotImplementedError def tile(A, reps): """Construct an array by repeating A the number of times given by reps. If `reps` has length ``d``, the result will have dimension of ``max(d, A.ndim)``. If ``A.ndim < d``, `A` is promoted to be d-dimensional by prepending new axes. So a shape (3,) array is promoted to (1, 3) for 2-D replication, or shape (1, 1, 3) for 3-D replication. If this is not the desired behavior, promote `A` to d-dimensions manually before calling this function. If ``A.ndim > d``, `reps` is promoted to `A`.ndim by pre-pending 1's to it. Thus for an `A` of shape (2, 3, 4, 5), a `reps` of (2, 2) is treated as (1, 1, 2, 2). Parameters ---------- A : array_like The input array. reps : array_like The number of repetitions of `A` along each axis. Returns ------- c : ndarray The tiled output array. See Also -------- repeat : Repeat elements of an array. Examples -------- >>> a = np.array([0, 1, 2]) >>> np.tile(a, 2) array([0, 1, 2, 0, 1, 2]) >>> np.tile(a, (2, 2)) array([[0, 1, 2, 0, 1, 2], [0, 1, 2, 0, 1, 2]]) >>> np.tile(a, (2, 1, 2)) array([[[0, 1, 2, 0, 1, 2]], [[0, 1, 2, 0, 1, 2]]]) >>> b = np.array([[1, 2], [3, 4]]) >>> np.tile(b, 2) array([[1, 2, 1, 2], [3, 4, 3, 4]]) >>> np.tile(b, (2, 1)) array([[1, 2], [3, 4], [1, 2], [3, 4]]) """ raise NotImplementedError def trace(a, offset=0, axis1=0, axis2=1, dtype=None, out=None): """Return the sum along diagonals of the array. If `a` is 2-D, the sum along its diagonal with the given offset is returned, i.e., the sum of elements ``a[i,i+offset]`` for all i. If `a` has more than two dimensions, then the axes specified by axis1 and axis2 are used to determine the 2-D sub-arrays whose traces are returned. The shape of the resulting array is the same as that of `a` with `axis1` and `axis2` removed. Parameters ---------- a : array_like Input array, from which the diagonals are taken. offset : int, optional Offset of the diagonal from the main diagonal. Can be both positive and negative. Defaults to 0. axis1, axis2 : int, optional Axes to be used as the first and second axis of the 2-D sub-arrays from which the diagonals should be taken. Defaults are the first two axes of `a`. dtype : dtype, optional Determines the data-type of the returned array and of the accumulator where the elements are summed. If dtype has the value None and `a` is of integer type of precision less than the default integer precision, then the default integer precision is used. Otherwise, the precision is the same as that of `a`. out : ndarray, optional Array into which the output is placed. Its type is preserved and it must be of the right shape to hold the output. Returns ------- sum_along_diagonals : ndarray If `a` is 2-D, the sum along the diagonal is returned. If `a` has larger dimensions, then an array of sums along diagonals is returned. See Also -------- diag, diagonal, diagflat Examples -------- >>> np.trace(np.eye(3)) 3.0 >>> a = np.arange(8).reshape((2,2,2)) >>> np.trace(a) array([6, 8]) >>> a = np.arange(24).reshape((2,2,2,3)) >>> np.trace(a).shape (2, 3) """ raise NotImplementedError def transpose(a, axes=None): """Permute the dimensions of an array. Parameters ---------- a : array_like Input array. axes : list of ints, optional By default, reverse the dimensions, otherwise permute the axes according to the values given. Returns ------- p : ndarray `a` with its axes permuted. A view is returned whenever possible. See Also -------- rollaxis Examples -------- >>> x = np.arange(4).reshape((2,2)) >>> x array([[0, 1], [2, 3]]) >>> np.transpose(x) array([[0, 2], [1, 3]]) >>> x = np.ones((1, 2, 3)) >>> np.transpose(x, (1, 0, 2)).shape (2, 1, 3) """ raise NotImplementedError def trapz(y, x=None, dx=1.0, axis=-1): """Integrate along the given axis using the composite trapezoidal rule. Integrate `y` (`x`) along given axis. Parameters ---------- y : array_like Input array to integrate. x : array_like, optional If `x` is None, then spacing between all `y` elements is `dx`. dx : scalar, optional If `x` is None, spacing given by `dx` is assumed. Default is 1. axis : int, optional Specify the axis. Returns ------- out : float Definite integral as approximated by trapezoidal rule. See Also -------- sum, cumsum Notes ----- Image [2]_ illustrates trapezoidal rule -- y-axis locations of points will be taken from `y` array, by default x-axis distances between points will be 1.0, alternatively they can be provided with `x` array or with `dx` scalar. Return value will be equal to combined area under the red lines. References ---------- .. [1] Wikipedia page: http://en.wikipedia.org/wiki/Trapezoidal_rule .. [2] Illustration image: http://en.wikipedia.org/wiki/File:Composite_trapezoidal_rule_illustration.png Examples -------- >>> np.trapz([1,2,3]) 4.0 >>> np.trapz([1,2,3], x=[4,6,8]) 8.0 >>> np.trapz([1,2,3], dx=2) 8.0 >>> a = np.arange(6).reshape(2, 3) >>> a array([[0, 1, 2], [3, 4, 5]]) >>> np.trapz(a, axis=0) array([ 1.5, 2.5, 3.5]) >>> np.trapz(a, axis=1) array([ 2., 8.]) """ raise NotImplementedError def tri(N, M=None, k=0, dtype=float): """An array with ones at and below the given diagonal and zeros elsewhere. Parameters ---------- N : int Number of rows in the array. M : int, optional Number of columns in the array. By default, `M` is taken equal to `N`. k : int, optional The sub-diagonal at and below which the array is filled. `k` = 0 is the main diagonal, while `k` < 0 is below it, and `k` > 0 is above. The default is 0. dtype : dtype, optional Data type of the returned array. The default is float. Returns ------- T : ndarray of shape (N, M) Array with its lower triangle filled with ones and zero elsewhere; in other words ``T[i,j] == 1`` for ``i <= j + k``, 0 otherwise. Examples -------- >>> np.tri(3, 5, 2, dtype=int) array([[1, 1, 1, 0, 0], [1, 1, 1, 1, 0], [1, 1, 1, 1, 1]]) >>> np.tri(3, 5, -1) array([[ 0., 0., 0., 0., 0.], [ 1., 0., 0., 0., 0.], [ 1., 1., 0., 0., 0.]]) """ raise NotImplementedError def tril(m, k=0): """Lower triangle of an array. Return a copy of an array with elements above the `k`-th diagonal zeroed. Parameters ---------- m : array_like, shape (M, N) Input array. k : int, optional Diagonal above which to zero elements. `k = 0` (the default) is the main diagonal, `k < 0` is below it and `k > 0` is above. Returns ------- L : ndarray, shape (M, N) Lower triangle of `m`, of same shape and data-type as `m`. See Also -------- triu : same thing, only for the upper triangle Examples -------- >>> np.tril([[1,2,3],[4,5,6],[7,8,9],[10,11,12]], -1) array([[ 0, 0, 0], [ 4, 0, 0], [ 7, 8, 0], [10, 11, 12]]) """ raise NotImplementedError def tril_indices(n, k=0): """Return the indices for the lower-triangle of an (n, n) array. Parameters ---------- n : int The row dimension of the square arrays for which the returned indices will be valid. k : int, optional Diagonal offset (see `tril` for details). Returns ------- inds : tuple of arrays The indices for the triangle. The returned tuple contains two arrays, each with the indices along one dimension of the array. See also -------- triu_indices : similar function, for upper-triangular. mask_indices : generic function accepting an arbitrary mask function. tril, triu Notes ----- .. versionadded:: 1.4.0 Examples -------- Compute two different sets of indices to access 4x4 arrays, one for the lower triangular part starting at the main diagonal, and one starting two diagonals further right: >>> il1 = np.tril_indices(4) >>> il2 = np.tril_indices(4, 2) Here is how they can be used with a sample array: >>> a = np.arange(16).reshape(4, 4) >>> a array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15]]) Both for indexing: >>> a[il1] array([ 0, 4, 5, 8, 9, 10, 12, 13, 14, 15]) And for assigning values: >>> a[il1] = -1 >>> a array([[-1, 1, 2, 3], [-1, -1, 6, 7], [-1, -1, -1, 11], [-1, -1, -1, -1]]) These cover almost the whole array (two diagonals right of the main one): >>> a[il2] = -10 >>> a array([[-10, -10, -10, 3], [-10, -10, -10, -10], [-10, -10, -10, -10], [-10, -10, -10, -10]]) """ raise NotImplementedError def tril_indices_from(arr, k=0): """Return the indices for the lower-triangle of arr. See `tril_indices` for full details. Parameters ---------- arr : array_like The indices will be valid for square arrays whose dimensions are the same as arr. k : int, optional Diagonal offset (see `tril` for details). See Also -------- tril_indices, tril Notes ----- .. versionadded:: 1.4.0 """ raise NotImplementedError def trim_zeros(filt, trim='fb'): """Trim the leading and/or trailing zeros from a 1-D array or sequence. Parameters ---------- filt : 1-D array or sequence Input array. trim : str, optional A string with 'f' representing trim from front and 'b' to trim from back. Default is 'fb', trim zeros from both front and back of the array. Returns ------- trimmed : 1-D array or sequence The result of trimming the input. The input data type is preserved. Examples -------- >>> a = np.array((0, 0, 0, 1, 2, 3, 0, 2, 1, 0)) >>> np.trim_zeros(a) array([1, 2, 3, 0, 2, 1]) >>> np.trim_zeros(a, 'b') array([0, 0, 0, 1, 2, 3, 0, 2, 1]) The input data type is preserved, list/tuple in means list/tuple out. >>> np.trim_zeros([0, 1, 2, 0]) [1, 2] """ raise NotImplementedError def triu(m, k=0): """Upper triangle of an array. Return a copy of a matrix with the elements below the `k`-th diagonal zeroed. Please refer to the documentation for `tril` for further details. See Also -------- tril : lower triangle of an array Examples -------- >>> np.triu([[1,2,3],[4,5,6],[7,8,9],[10,11,12]], -1) array([[ 1, 2, 3], [ 4, 5, 6], [ 0, 8, 9], [ 0, 0, 12]]) """ raise NotImplementedError def triu_indices(n, k=0): """Return the indices for the upper-triangle of an (n, n) array. Parameters ---------- n : int The size of the arrays for which the returned indices will be valid. k : int, optional Diagonal offset (see `triu` for details). Returns ------- inds : tuple of arrays The indices for the triangle. The returned tuple contains two arrays, each with the indices along one dimension of the array. See also -------- tril_indices : similar function, for lower-triangular. mask_indices : generic function accepting an arbitrary mask function. triu, tril Notes ----- .. versionadded:: 1.4.0 Examples -------- Compute two different sets of indices to access 4x4 arrays, one for the upper triangular part starting at the main diagonal, and one starting two diagonals further right: >>> iu1 = np.triu_indices(4) >>> iu2 = np.triu_indices(4, 2) Here is how they can be used with a sample array: >>> a = np.arange(16).reshape(4, 4) >>> a array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15]]) Both for indexing: >>> a[iu1] array([ 0, 1, 2, 3, 5, 6, 7, 10, 11, 15]) And for assigning values: >>> a[iu1] = -1 >>> a array([[-1, -1, -1, -1], [ 4, -1, -1, -1], [ 8, 9, -1, -1], [12, 13, 14, -1]]) These cover only a small part of the whole array (two diagonals right of the main one): >>> a[iu2] = -10 >>> a array([[ -1, -1, -10, -10], [ 4, -1, -1, -10], [ 8, 9, -1, -1], [ 12, 13, 14, -1]]) """ raise NotImplementedError def triu_indices_from(arr, k=0): """Return the indices for the upper-triangle of an (n, n) array. See `triu_indices` for full details. Parameters ---------- arr : array_like The indices will be valid for square arrays whose dimensions are the same as arr. k : int, optional Diagonal offset (see `triu` for details). See Also -------- triu_indices, triu Notes ----- .. versionadded:: 1.4.0 """ raise NotImplementedError def typename(char_): """Return a description for the given data type code. Parameters ---------- char : str Data type code. Returns ------- out : str Description of the input data type code. See Also -------- dtype, typecodes Examples -------- >>> typechars = ['S1', '?', 'B', 'D', 'G', 'F', 'I', 'H', 'L', 'O', 'Q', ... 'S', 'U', 'V', 'b', 'd', 'g', 'f', 'i', 'h', 'l', 'q'] >>> for typechar in typechars: ... print typechar, ' : ', np.typename(typechar) ... S1 : character ? : bool B : unsigned char D : complex double precision G : complex long double precision F : complex single precision I : unsigned integer H : unsigned short L : unsigned long integer O : object Q : unsigned long long integer S : string U : unicode V : void b : signed char d : double precision g : long precision f : single precision i : integer h : short l : long integer q : long long integer """ raise NotImplementedError def union1d(ar1, ar2): """Find the union of two arrays. Return the unique, sorted array of values that are in either of the two input arrays. Parameters ---------- ar1, ar2 : array_like Input arrays. They are flattened if they are not already 1D. Returns ------- union : ndarray Unique, sorted union of the input arrays. See Also -------- numpy.lib.arraysetops : Module with a number of other functions for performing set operations on arrays. Examples -------- >>> np.union1d([-1, 0, 1], [-2, 0, 2]) array([-2, -1, 0, 1, 2]) """ raise NotImplementedError def unique(ar, return_index=False, return_inverse=False): """Find the unique elements of an array. Returns the sorted unique elements of an array. There are two optional outputs in addition to the unique elements: the indices of the input array that give the unique values, and the indices of the unique array that reconstruct the input array. Parameters ---------- ar : array_like Input array. This will be flattened if it is not already 1-D. return_index : bool, optional If True, also return the indices of `ar` that result in the unique array. return_inverse : bool, optional If True, also return the indices of the unique array that can be used to reconstruct `ar`. Returns ------- unique : ndarray The sorted unique values. unique_indices : ndarray, optional The indices of the unique values in the (flattened) original array. Only provided if `return_index` is True. unique_inverse : ndarray, optional The indices to reconstruct the (flattened) original array from the unique array. Only provided if `return_inverse` is True. See Also -------- numpy.lib.arraysetops : Module with a number of other functions for performing set operations on arrays. Examples -------- >>> np.unique([1, 1, 2, 2, 3, 3]) array([1, 2, 3]) >>> a = np.array([[1, 1], [2, 3]]) >>> np.unique(a) array([1, 2, 3]) Return the indices of the original array that give the unique values: >>> a = np.array(['a', 'b', 'b', 'c', 'a']) >>> u, indices = np.unique(a, return_index=True) >>> u array(['a', 'b', 'c'], dtype='|S1') >>> indices array([0, 1, 3]) >>> a[indices] array(['a', 'b', 'c'], dtype='|S1') Reconstruct the input array from the unique values: >>> a = np.array([1, 2, 6, 4, 2, 3, 2]) >>> u, indices = np.unique(a, return_inverse=True) >>> u array([1, 2, 3, 4, 6]) >>> indices array([0, 1, 4, 3, 1, 2, 1]) >>> u[indices] array([1, 2, 6, 4, 2, 3, 2]) """ raise NotImplementedError def unpackbits(myarray, axis=None): """unpackbits(myarray, axis=None) Unpacks elements of a uint8 array into a binary-valued output array. Each element of `myarray` represents a bit-field that should be unpacked into a binary-valued output array. The shape of the output array is either 1-D (if `axis` is None) or the same shape as the input array with unpacking done along the axis specified. Parameters ---------- myarray : ndarray, uint8 type Input array. axis : int, optional Unpacks along this axis. Returns ------- unpacked : ndarray, uint8 type The elements are binary-valued (0 or 1). See Also -------- packbits : Packs the elements of a binary-valued array into bits in a uint8 array. Examples -------- >>> a = np.array([[2], [7], [23]], dtype=np.uint8) >>> a array([[ 2], [ 7], [23]], dtype=uint8) >>> b = np.unpackbits(a, axis=1) >>> b array([[0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 1, 0, 1, 1, 1]], dtype=uint8) """ # BUILTIN raise NotImplementedError def unravel_index(indices, dims, order='C'): """unravel_index(indices, dims, order='C') Converts a flat index or array of flat indices into a tuple of coordinate arrays. Parameters ---------- indices : array_like An integer array whose elements are indices into the flattened version of an array of dimensions ``dims``. Before version 1.6.0, this function accepted just one index value. dims : tuple of ints The shape of the array to use for unraveling ``indices``. order : {'C', 'F'}, optional .. versionadded:: 1.6.0 Determines whether the indices should be viewed as indexing in C (row-major) order or FORTRAN (column-major) order. Returns ------- unraveled_coords : tuple of ndarray Each array in the tuple has the same shape as the ``indices`` array. See Also -------- ravel_multi_index Examples -------- >>> np.unravel_index([22, 41, 37], (7,6)) (array([3, 6, 6]), array([4, 5, 1])) >>> np.unravel_index([31, 41, 13], (7,6), order='F') (array([3, 6, 6]), array([4, 5, 1])) >>> np.unravel_index(1621, (6,7,8,9)) (3, 1, 4, 1) """ # BUILTIN raise NotImplementedError def unwrap(p, discont=3.14159265359, axis=-1): """Unwrap by changing deltas between values to 2*pi complement. Unwrap radian phase `p` by changing absolute jumps greater than `discont` to their 2*pi complement along the given axis. Parameters ---------- p : array_like Input array. discont : float, optional Maximum discontinuity between values, default is ``pi``. axis : int, optional Axis along which unwrap will operate, default is the last axis. Returns ------- out : ndarray Output array. See Also -------- rad2deg, deg2rad Notes ----- If the discontinuity in `p` is smaller than ``pi``, but larger than `discont`, no unwrapping is done because taking the 2*pi complement would only make the discontinuity larger. Examples -------- >>> phase = np.linspace(0, np.pi, num=5) >>> phase[3:] += np.pi >>> phase array([ 0. , 0.78539816, 1.57079633, 5.49778714, 6.28318531]) >>> np.unwrap(phase) array([ 0. , 0.78539816, 1.57079633, -0.78539816, 0. ]) """ raise NotImplementedError def vander(x, N=None): """Generate a Van der Monde matrix. The columns of the output matrix are decreasing powers of the input vector. Specifically, the `i`-th output column is the input vector raised element-wise to the power of ``N - i - 1``. Such a matrix with a geometric progression in each row is named for Alexandre-Theophile Vandermonde. Parameters ---------- x : array_like 1-D input array. N : int, optional Order of (number of columns in) the output. If `N` is not specified, a square array is returned (``N = len(x)``). Returns ------- out : ndarray Van der Monde matrix of order `N`. The first column is ``x^(N-1)``, the second ``x^(N-2)`` and so forth. Examples -------- >>> x = np.array([1, 2, 3, 5]) >>> N = 3 >>> np.vander(x, N) array([[ 1, 1, 1], [ 4, 2, 1], [ 9, 3, 1], [25, 5, 1]]) >>> np.column_stack([x**(N-1-i) for i in range(N)]) array([[ 1, 1, 1], [ 4, 2, 1], [ 9, 3, 1], [25, 5, 1]]) >>> x = np.array([1, 2, 3, 5]) >>> np.vander(x) array([[ 1, 1, 1, 1], [ 8, 4, 2, 1], [ 27, 9, 3, 1], [125, 25, 5, 1]]) The determinant of a square Vandermonde matrix is the product of the differences between the values of the input vector: >>> np.linalg.det(np.vander(x)) 48.000000000000043 >>> (5-3)*(5-2)*(5-1)*(3-2)*(3-1)*(2-1) 48 """ raise NotImplementedError def var(a, axis=None, dtype=None, out=None, ddof=0): """Compute the variance along the specified axis. Returns the variance of the array elements, a measure of the spread of a distribution. The variance is computed for the flattened array by default, otherwise over the specified axis. Parameters ---------- a : array_like Array containing numbers whose variance is desired. If `a` is not an array, a conversion is attempted. axis : int, optional Axis along which the variance is computed. The default is to compute the variance of the flattened array. dtype : data-type, optional Type to use in computing the variance. For arrays of integer type the default is `float32`; for arrays of float types it is the same as the array type. out : ndarray, optional Alternate output array in which to place the result. It must have the same shape as the expected output, but the type is cast if necessary. ddof : int, optional "Delta Degrees of Freedom": the divisor used in the calculation is ``N - ddof``, where ``N`` represents the number of elements. By default `ddof` is zero. Returns ------- variance : ndarray, see dtype parameter above If ``out=None``, returns a new array containing the variance; otherwise, a reference to the output array is returned. See Also -------- std : Standard deviation mean : Average numpy.doc.ufuncs : Section "Output arguments" Notes ----- The variance is the average of the squared deviations from the mean, i.e., ``var = mean(abs(x - x.mean())**2)``. The mean is normally calculated as ``x.sum() / N``, where ``N = len(x)``. If, however, `ddof` is specified, the divisor ``N - ddof`` is used instead. In standard statistical practice, ``ddof=1`` provides an unbiased estimator of the variance of a hypothetical infinite population. ``ddof=0`` provides a maximum likelihood estimate of the variance for normally distributed variables. Note that for complex numbers, the absolute value is taken before squaring, so that the result is always real and nonnegative. For floating-point input, the variance is computed using the same precision the input has. Depending on the input data, this can cause the results to be inaccurate, especially for `float32` (see example below). Specifying a higher-accuracy accumulator using the ``dtype`` keyword can alleviate this issue. Examples -------- >>> a = np.array([[1,2],[3,4]]) >>> np.var(a) 1.25 >>> np.var(a,0) array([ 1., 1.]) >>> np.var(a,1) array([ 0.25, 0.25]) In single precision, var() can be inaccurate: >>> a = np.zeros((2,512*512), dtype=np.float32) >>> a[0,:] = 1.0 >>> a[1,:] = 0.1 >>> np.var(a) 0.20405951142311096 Computing the standard deviation in float64 is more accurate: >>> np.var(a, dtype=np.float64) 0.20249999932997387 >>> ((1-0.55)**2 + (0.1-0.55)**2)/2 0.20250000000000001 """ raise NotImplementedError def vdot(): """Return the dot product of two vectors. The vdot(`a`, `b`) function handles complex numbers differently than dot(`a`, `b`). If the first argument is complex the complex conjugate of the first argument is used for the calculation of the dot product. Note that `vdot` handles multidimensional arrays differently than `dot`: it does *not* perform a matrix product, but flattens input arguments to 1-D vectors first. Consequently, it should only be used for vectors. Parameters ---------- a : array_like If `a` is complex the complex conjugate is taken before calculation of the dot product. b : array_like Second argument to the dot product. Returns ------- output : ndarray Dot product of `a` and `b`. Can be an int, float, or complex depending on the types of `a` and `b`. See Also -------- dot : Return the dot product without using the complex conjugate of the first argument. Examples -------- >>> a = np.array([1+2j,3+4j]) >>> b = np.array([5+6j,7+8j]) >>> np.vdot(a, b) (70-8j) >>> np.vdot(b, a) (70+8j) Note that higher-dimensional arrays are flattened! >>> a = np.array([[1, 4], [5, 6]]) >>> b = np.array([[4, 1], [2, 2]]) >>> np.vdot(a, b) 30 >>> np.vdot(b, a) 30 >>> 1*4 + 4*1 + 5*2 + 6*2 30 """ # BUILTIN raise NotImplementedError def vsplit(ary, indices_or_sections): """Split an array into multiple sub-arrays vertically (row-wise). Please refer to the ``split`` documentation. ``vsplit`` is equivalent to ``split`` with `axis=0` (default), the array is always split along the first axis regardless of the array dimension. See Also -------- split : Split an array into multiple sub-arrays of equal size. Examples -------- >>> x = np.arange(16.0).reshape(4, 4) >>> x array([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.], [ 12., 13., 14., 15.]]) >>> np.vsplit(x, 2) [array([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.]]), array([[ 8., 9., 10., 11.], [ 12., 13., 14., 15.]])] >>> np.vsplit(x, np.array([3, 6])) [array([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.]]), array([[ 12., 13., 14., 15.]]), array([], dtype=float64)] With a higher dimensional array the split is still along the first axis. >>> x = np.arange(8.0).reshape(2, 2, 2) >>> x array([[[ 0., 1.], [ 2., 3.]], [[ 4., 5.], [ 6., 7.]]]) >>> np.vsplit(x, 2) [array([[[ 0., 1.], [ 2., 3.]]]), array([[[ 4., 5.], [ 6., 7.]]])] """ raise NotImplementedError def vstack(tup): """Stack arrays in sequence vertically (row wise). Take a sequence of arrays and stack them vertically to make a single array. Rebuild arrays divided by `vsplit`. Parameters ---------- tup : sequence of ndarrays Tuple containing arrays to be stacked. The arrays must have the same shape along all but the first axis. Returns ------- stacked : ndarray The array formed by stacking the given arrays. See Also -------- hstack : Stack arrays in sequence horizontally (column wise). dstack : Stack arrays in sequence depth wise (along third dimension). concatenate : Join a sequence of arrays together. vsplit : Split array into a list of multiple sub-arrays vertically. Notes ----- Equivalent to ``np.concatenate(tup, axis=0)`` Examples -------- >>> a = np.array([1, 2, 3]) >>> b = np.array([2, 3, 4]) >>> np.vstack((a,b)) array([[1, 2, 3], [2, 3, 4]]) >>> a = np.array([[1], [2], [3]]) >>> b = np.array([[2], [3], [4]]) >>> np.vstack((a,b)) array([[1], [2], [3], [2], [3], [4]]) """ raise NotImplementedError def where(): """where(condition, [x, y]) Return elements, either from `x` or `y`, depending on `condition`. If only `condition` is given, return ``condition.nonzero()``. Parameters ---------- condition : array_like, bool When True, yield `x`, otherwise yield `y`. x, y : array_like, optional Values from which to choose. `x` and `y` need to have the same shape as `condition`. Returns ------- out : ndarray or tuple of ndarrays If both `x` and `y` are specified, the output array contains elements of `x` where `condition` is True, and elements from `y` elsewhere. If only `condition` is given, return the tuple ``condition.nonzero()``, the indices where `condition` is True. See Also -------- nonzero, choose Notes ----- If `x` and `y` are given and input arrays are 1-D, `where` is equivalent to:: [xv if c else yv for (c,xv,yv) in zip(condition,x,y)] Examples -------- >>> np.where([[True, False], [True, True]], ... [[1, 2], [3, 4]], ... [[9, 8], [7, 6]]) array([[1, 8], [3, 4]]) >>> np.where([[0, 1], [1, 0]]) (array([0, 1]), array([1, 0])) >>> x = np.arange(9.).reshape(3, 3) >>> np.where( x > 5 ) (array([2, 2, 2]), array([0, 1, 2])) >>> x[np.where( x > 3.0 )] # Note: result is 1D. array([ 4., 5., 6., 7., 8.]) >>> np.where(x < 5, x, -1) # Note: broadcasting. array([[ 0., 1., 2.], [ 3., 4., -1.], [-1., -1., -1.]]) """ # BUILTIN raise NotImplementedError def who(vardict=None): """Print the Numpy arrays in the given dictionary. If there is no dictionary passed in or `vardict` is None then returns Numpy arrays in the globals() dictionary (all Numpy arrays in the namespace). Parameters ---------- vardict : dict, optional A dictionary possibly containing ndarrays. Default is globals(). Returns ------- out : None Returns 'None'. Notes ----- Prints out the name, shape, bytes and type of all of the ndarrays present in `vardict`. Examples -------- >>> a = np.arange(10) >>> b = np.ones(20) >>> np.who() Name Shape Bytes Type =========================================================== a 10 40 int32 b 20 160 float64 Upper bound on total bytes = 200 >>> d = {'x': np.arange(2.0), 'y': np.arange(3.0), 'txt': 'Some str', ... 'idx':5} >>> np.who(d) Name Shape Bytes Type =========================================================== y 3 24 float64 x 2 16 float64 Upper bound on total bytes = 40 """ raise NotImplementedError ga-5-3/python/ga4py/gain/misc.c0000640005473000001440000260703712275260613015201 0ustar d3n000users/* Generated by Cython 0.19.2 on Fri Feb 7 14:43:22 2014 */ #define PY_SSIZE_T_CLEAN #ifndef CYTHON_USE_PYLONG_INTERNALS #ifdef PYLONG_BITS_IN_DIGIT #define CYTHON_USE_PYLONG_INTERNALS 0 #else #include "pyconfig.h" #ifdef PYLONG_BITS_IN_DIGIT #define CYTHON_USE_PYLONG_INTERNALS 1 #else #define CYTHON_USE_PYLONG_INTERNALS 0 #endif #endif #endif #include "Python.h" #ifndef Py_PYTHON_H #error Python headers needed to compile C extensions, please install development version of Python. #elif PY_VERSION_HEX < 0x02040000 #error Cython requires Python 2.4+. #else #include /* For offsetof */ #ifndef offsetof #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) #endif #if !defined(WIN32) && !defined(MS_WINDOWS) #ifndef __stdcall #define __stdcall #endif #ifndef __cdecl #define __cdecl #endif #ifndef __fastcall #define __fastcall #endif #endif #ifndef DL_IMPORT #define DL_IMPORT(t) t #endif #ifndef DL_EXPORT #define DL_EXPORT(t) t #endif #ifndef PY_LONG_LONG #define PY_LONG_LONG LONG_LONG #endif #ifndef Py_HUGE_VAL #define Py_HUGE_VAL HUGE_VAL #endif #ifdef PYPY_VERSION #define CYTHON_COMPILING_IN_PYPY 1 #define CYTHON_COMPILING_IN_CPYTHON 0 #else #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 1 #endif #if PY_VERSION_HEX < 0x02050000 typedef int Py_ssize_t; #define PY_SSIZE_T_MAX INT_MAX #define PY_SSIZE_T_MIN INT_MIN #define PY_FORMAT_SIZE_T "" #define CYTHON_FORMAT_SSIZE_T "" #define PyInt_FromSsize_t(z) PyInt_FromLong(z) #define PyInt_AsSsize_t(o) __Pyx_PyInt_AsInt(o) #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ (PyErr_Format(PyExc_TypeError, \ "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ (PyObject*)0)) #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ !PyComplex_Check(o)) #define PyIndex_Check __Pyx_PyIndex_Check #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) #define __PYX_BUILD_PY_SSIZE_T "i" #else #define __PYX_BUILD_PY_SSIZE_T "n" #define CYTHON_FORMAT_SSIZE_T "z" #define __Pyx_PyIndex_Check PyIndex_Check #endif #if PY_VERSION_HEX < 0x02060000 #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) #define PyVarObject_HEAD_INIT(type, size) \ PyObject_HEAD_INIT(type) size, #define PyType_Modified(t) typedef struct { void *buf; PyObject *obj; Py_ssize_t len; Py_ssize_t itemsize; int readonly; int ndim; char *format; Py_ssize_t *shape; Py_ssize_t *strides; Py_ssize_t *suboffsets; void *internal; } Py_buffer; #define PyBUF_SIMPLE 0 #define PyBUF_WRITABLE 0x0001 #define PyBUF_FORMAT 0x0004 #define PyBUF_ND 0x0008 #define PyBUF_STRIDES (0x0010 | PyBUF_ND) #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); typedef void (*releasebufferproc)(PyObject *, Py_buffer *); #endif #if PY_MAJOR_VERSION < 3 #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else #define __Pyx_BUILTIN_MODULE_NAME "builtins" #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #endif #if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6 #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") #endif #if PY_MAJOR_VERSION >= 3 #define Py_TPFLAGS_CHECKTYPES 0 #define Py_TPFLAGS_HAVE_INDEX 0 #endif #if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) #define Py_TPFLAGS_HAVE_NEWBUFFER 0 #endif #if PY_VERSION_HEX < 0x02060000 #define Py_TPFLAGS_HAVE_VERSION_TAG 0 #endif #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) #define CYTHON_PEP393_ENABLED 1 #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ 0 : _PyUnicode_Ready((PyObject *)(op))) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) #else #define CYTHON_PEP393_ENABLED 0 #define __Pyx_PyUnicode_READY(op) (0) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) #define __Pyx_PyUnicode_READ(k, d, i) ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i])) #endif #if PY_MAJOR_VERSION >= 3 #define PyBaseString_Type PyUnicode_Type #define PyStringObject PyUnicodeObject #define PyString_Type PyUnicode_Type #define PyString_Check PyUnicode_Check #define PyString_CheckExact PyUnicode_CheckExact #endif #if PY_VERSION_HEX < 0x02060000 #define PyBytesObject PyStringObject #define PyBytes_Type PyString_Type #define PyBytes_Check PyString_Check #define PyBytes_CheckExact PyString_CheckExact #define PyBytes_FromString PyString_FromString #define PyBytes_FromStringAndSize PyString_FromStringAndSize #define PyBytes_FromFormat PyString_FromFormat #define PyBytes_DecodeEscape PyString_DecodeEscape #define PyBytes_AsString PyString_AsString #define PyBytes_AsStringAndSize PyString_AsStringAndSize #define PyBytes_Size PyString_Size #define PyBytes_AS_STRING PyString_AS_STRING #define PyBytes_GET_SIZE PyString_GET_SIZE #define PyBytes_Repr PyString_Repr #define PyBytes_Concat PyString_Concat #define PyBytes_ConcatAndDel PyString_ConcatAndDel #endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) #else #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ PyString_Check(obj) || PyUnicode_Check(obj)) #define __Pyx_PyBaseString_CheckExact(obj) (Py_TYPE(obj) == &PyBaseString_Type) #endif #if PY_VERSION_HEX < 0x02060000 #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) #endif #ifndef PySet_CheckExact #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) #endif #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) #if PY_MAJOR_VERSION >= 3 #define PyIntObject PyLongObject #define PyInt_Type PyLong_Type #define PyInt_Check(op) PyLong_Check(op) #define PyInt_CheckExact(op) PyLong_CheckExact(op) #define PyInt_FromString PyLong_FromString #define PyInt_FromUnicode PyLong_FromUnicode #define PyInt_FromLong PyLong_FromLong #define PyInt_FromSize_t PyLong_FromSize_t #define PyInt_FromSsize_t PyLong_FromSsize_t #define PyInt_AsLong PyLong_AsLong #define PyInt_AS_LONG PyLong_AS_LONG #define PyInt_AsSsize_t PyLong_AsSsize_t #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask #endif #if PY_MAJOR_VERSION >= 3 #define PyBoolObject PyLongObject #endif #if PY_VERSION_HEX < 0x03020000 typedef long Py_hash_t; #define __Pyx_PyInt_FromHash_t PyInt_FromLong #define __Pyx_PyInt_AsHash_t PyInt_AsLong #else #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t #endif #if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) #else #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) #endif #if PY_MAJOR_VERSION >= 3 #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) #endif #if PY_VERSION_HEX < 0x02050000 #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) #else #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) #endif #if PY_VERSION_HEX < 0x02050000 #define __Pyx_NAMESTR(n) ((char *)(n)) #define __Pyx_DOCSTR(n) ((char *)(n)) #else #define __Pyx_NAMESTR(n) (n) #define __Pyx_DOCSTR(n) (n) #endif #ifndef CYTHON_INLINE #if defined(__GNUC__) #define CYTHON_INLINE __inline__ #elif defined(_MSC_VER) #define CYTHON_INLINE __inline #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CYTHON_INLINE inline #else #define CYTHON_INLINE #endif #endif #ifndef CYTHON_RESTRICT #if defined(__GNUC__) #define CYTHON_RESTRICT __restrict__ #elif defined(_MSC_VER) && _MSC_VER >= 1400 #define CYTHON_RESTRICT __restrict #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CYTHON_RESTRICT restrict #else #define CYTHON_RESTRICT #endif #endif #ifdef NAN #define __PYX_NAN() ((float) NAN) #else static CYTHON_INLINE float __PYX_NAN() { /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is a quiet NaN. */ float value; memset(&value, 0xFF, sizeof(value)); return value; } #endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) #else #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) #endif #ifndef __PYX_EXTERN_C #ifdef __cplusplus #define __PYX_EXTERN_C extern "C" #else #define __PYX_EXTERN_C extern #endif #endif #if defined(WIN32) || defined(MS_WINDOWS) #define _USE_MATH_DEFINES #endif #include #define __PYX_HAVE__ga4py__gain__misc #define __PYX_HAVE_API__ga4py__gain__misc #include "string.h" #include "stdio.h" #include "stdlib.h" #include "numpy/arrayobject.h" #include "numpy/ufuncobject.h" #ifdef _OPENMP #include #endif /* _OPENMP */ #ifdef PYREX_WITHOUT_ASSERTIONS #define CYTHON_WITHOUT_ASSERTIONS #endif #ifndef CYTHON_UNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) # define CYTHON_UNUSED __attribute__ ((__unused__)) # else # define CYTHON_UNUSED # endif # elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) # define CYTHON_UNUSED __attribute__ ((__unused__)) # else # define CYTHON_UNUSED # endif #endif typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ #define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 #define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 #define __PYX_DEFAULT_STRING_ENCODING "" #define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString #define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); #define __Pyx_PyBytes_FromString PyBytes_FromString #define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); #if PY_MAJOR_VERSION < 3 #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize #else #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize #endif #define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) #define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) #define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) #define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) #if PY_MAJOR_VERSION < 3 static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { const Py_UNICODE *u_end = u; while (*u_end++) ; return u_end - u - 1; } #else #define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen #endif #define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) #define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode #define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode #define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) #define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*); #if CYTHON_COMPILING_IN_CPYTHON #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) #else #define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) #endif #define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII static int __Pyx_sys_getdefaultencoding_not_ascii; static int __Pyx_init_sys_getdefaultencoding_params() { PyObject* sys = NULL; PyObject* default_encoding = NULL; PyObject* ascii_chars_u = NULL; PyObject* ascii_chars_b = NULL; sys = PyImport_ImportModule("sys"); if (sys == NULL) goto bad; default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); if (default_encoding == NULL) goto bad; if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { __Pyx_sys_getdefaultencoding_not_ascii = 0; } else { const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); char ascii_chars[128]; int c; for (c = 0; c < 128; c++) { ascii_chars[c] = c; } __Pyx_sys_getdefaultencoding_not_ascii = 1; ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); if (ascii_chars_u == NULL) goto bad; ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { PyErr_Format( PyExc_ValueError, "This module compiled with c_string_encoding=ascii, but default encoding '%s' is not a superset of ascii.", default_encoding_c); goto bad; } } Py_XDECREF(sys); Py_XDECREF(default_encoding); Py_XDECREF(ascii_chars_u); Py_XDECREF(ascii_chars_b); return 0; bad: Py_XDECREF(sys); Py_XDECREF(default_encoding); Py_XDECREF(ascii_chars_u); Py_XDECREF(ascii_chars_b); return -1; } #endif #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) #else #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT static char* __PYX_DEFAULT_STRING_ENCODING; static int __Pyx_init_sys_getdefaultencoding_params() { PyObject* sys = NULL; PyObject* default_encoding = NULL; char* default_encoding_c; sys = PyImport_ImportModule("sys"); if (sys == NULL) goto bad; default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); if (default_encoding == NULL) goto bad; default_encoding_c = PyBytes_AS_STRING(default_encoding); __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); Py_DECREF(sys); Py_DECREF(default_encoding); return 0; bad: Py_XDECREF(sys); Py_XDECREF(default_encoding); return -1; } #endif #endif #ifdef __GNUC__ /* Test for GCC > 2.95 */ #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #else /* __GNUC__ > 2 ... */ #define likely(x) (x) #define unlikely(x) (x) #endif /* __GNUC__ > 2 ... */ #else /* __GNUC__ */ #define likely(x) (x) #define unlikely(x) (x) #endif /* __GNUC__ */ static PyObject *__pyx_m; static PyObject *__pyx_d; static PyObject *__pyx_b; static PyObject *__pyx_empty_tuple; static PyObject *__pyx_empty_bytes; static int __pyx_lineno; static int __pyx_clineno = 0; static const char * __pyx_cfilenm= __FILE__; static const char *__pyx_filename; #if !defined(CYTHON_CCOMPLEX) #if defined(__cplusplus) #define CYTHON_CCOMPLEX 1 #elif defined(_Complex_I) #define CYTHON_CCOMPLEX 1 #else #define CYTHON_CCOMPLEX 0 #endif #endif #if CYTHON_CCOMPLEX #ifdef __cplusplus #include #else #include #endif #endif #if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) #undef _Complex_I #define _Complex_I 1.0fj #endif static const char *__pyx_f[] = { "misc.pyx", "numpy.pxd", "type.pxd", }; /* "numpy.pxd":723 * # in Cython to enable them only on the right systems. * * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t */ typedef npy_int8 __pyx_t_5numpy_int8_t; /* "numpy.pxd":724 * * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t */ typedef npy_int16 __pyx_t_5numpy_int16_t; /* "numpy.pxd":725 * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< * ctypedef npy_int64 int64_t * #ctypedef npy_int96 int96_t */ typedef npy_int32 __pyx_t_5numpy_int32_t; /* "numpy.pxd":726 * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< * #ctypedef npy_int96 int96_t * #ctypedef npy_int128 int128_t */ typedef npy_int64 __pyx_t_5numpy_int64_t; /* "numpy.pxd":730 * #ctypedef npy_int128 int128_t * * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t */ typedef npy_uint8 __pyx_t_5numpy_uint8_t; /* "numpy.pxd":731 * * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t */ typedef npy_uint16 __pyx_t_5numpy_uint16_t; /* "numpy.pxd":732 * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< * ctypedef npy_uint64 uint64_t * #ctypedef npy_uint96 uint96_t */ typedef npy_uint32 __pyx_t_5numpy_uint32_t; /* "numpy.pxd":733 * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< * #ctypedef npy_uint96 uint96_t * #ctypedef npy_uint128 uint128_t */ typedef npy_uint64 __pyx_t_5numpy_uint64_t; /* "numpy.pxd":737 * #ctypedef npy_uint128 uint128_t * * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< * ctypedef npy_float64 float64_t * #ctypedef npy_float80 float80_t */ typedef npy_float32 __pyx_t_5numpy_float32_t; /* "numpy.pxd":738 * * ctypedef npy_float32 float32_t * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< * #ctypedef npy_float80 float80_t * #ctypedef npy_float128 float128_t */ typedef npy_float64 __pyx_t_5numpy_float64_t; /* "numpy.pxd":747 * # The int types are mapped a bit surprising -- * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t # <<<<<<<<<<<<<< * ctypedef npy_longlong long_t * ctypedef npy_longlong longlong_t */ typedef npy_long __pyx_t_5numpy_int_t; /* "numpy.pxd":748 * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< * ctypedef npy_longlong longlong_t * */ typedef npy_longlong __pyx_t_5numpy_long_t; /* "numpy.pxd":749 * ctypedef npy_long int_t * ctypedef npy_longlong long_t * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< * * ctypedef npy_ulong uint_t */ typedef npy_longlong __pyx_t_5numpy_longlong_t; /* "numpy.pxd":751 * ctypedef npy_longlong longlong_t * * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< * ctypedef npy_ulonglong ulong_t * ctypedef npy_ulonglong ulonglong_t */ typedef npy_ulong __pyx_t_5numpy_uint_t; /* "numpy.pxd":752 * * ctypedef npy_ulong uint_t * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< * ctypedef npy_ulonglong ulonglong_t * */ typedef npy_ulonglong __pyx_t_5numpy_ulong_t; /* "numpy.pxd":753 * ctypedef npy_ulong uint_t * ctypedef npy_ulonglong ulong_t * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< * * ctypedef npy_intp intp_t */ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; /* "numpy.pxd":755 * ctypedef npy_ulonglong ulonglong_t * * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< * ctypedef npy_uintp uintp_t * */ typedef npy_intp __pyx_t_5numpy_intp_t; /* "numpy.pxd":756 * * ctypedef npy_intp intp_t * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< * * ctypedef npy_double float_t */ typedef npy_uintp __pyx_t_5numpy_uintp_t; /* "numpy.pxd":758 * ctypedef npy_uintp uintp_t * * ctypedef npy_double float_t # <<<<<<<<<<<<<< * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t */ typedef npy_double __pyx_t_5numpy_float_t; /* "numpy.pxd":759 * * ctypedef npy_double float_t * ctypedef npy_double double_t # <<<<<<<<<<<<<< * ctypedef npy_longdouble longdouble_t * */ typedef npy_double __pyx_t_5numpy_double_t; /* "numpy.pxd":760 * ctypedef npy_double float_t * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< * * ctypedef npy_cfloat cfloat_t */ typedef npy_longdouble __pyx_t_5numpy_longdouble_t; #if CYTHON_CCOMPLEX #ifdef __cplusplus typedef ::std::complex< float > __pyx_t_float_complex; #else typedef float _Complex __pyx_t_float_complex; #endif #else typedef struct { float real, imag; } __pyx_t_float_complex; #endif #if CYTHON_CCOMPLEX #ifdef __cplusplus typedef ::std::complex< double > __pyx_t_double_complex; #else typedef double _Complex __pyx_t_double_complex; #endif #else typedef struct { double real, imag; } __pyx_t_double_complex; #endif /*--- Type declarations ---*/ /* "numpy.pxd":762 * ctypedef npy_longdouble longdouble_t * * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< * ctypedef npy_cdouble cdouble_t * ctypedef npy_clongdouble clongdouble_t */ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; /* "numpy.pxd":763 * * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< * ctypedef npy_clongdouble clongdouble_t * */ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; /* "numpy.pxd":764 * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< * * ctypedef npy_cdouble complex_t */ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; /* "numpy.pxd":766 * ctypedef npy_clongdouble clongdouble_t * * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew1(a): */ typedef npy_cdouble __pyx_t_5numpy_complex_t; #ifndef CYTHON_REFNANNY #define CYTHON_REFNANNY 0 #endif #if CYTHON_REFNANNY typedef struct { void (*INCREF)(void*, PyObject*, int); void (*DECREF)(void*, PyObject*, int); void (*GOTREF)(void*, PyObject*, int); void (*GIVEREF)(void*, PyObject*, int); void* (*SetupContext)(const char*, int, const char*); void (*FinishContext)(void**); } __Pyx_RefNannyAPIStruct; static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; #ifdef WITH_THREAD #define __Pyx_RefNannySetupContext(name, acquire_gil) \ if (acquire_gil) { \ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ PyGILState_Release(__pyx_gilstate_save); \ } else { \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ } #else #define __Pyx_RefNannySetupContext(name, acquire_gil) \ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) #endif #define __Pyx_RefNannyFinishContext() \ __Pyx_RefNanny->FinishContext(&__pyx_refnanny) #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) #else #define __Pyx_RefNannyDeclarations #define __Pyx_RefNannySetupContext(name, acquire_gil) #define __Pyx_RefNannyFinishContext() #define __Pyx_INCREF(r) Py_INCREF(r) #define __Pyx_DECREF(r) Py_DECREF(r) #define __Pyx_GOTREF(r) #define __Pyx_GIVEREF(r) #define __Pyx_XINCREF(r) Py_XINCREF(r) #define __Pyx_XDECREF(r) Py_XDECREF(r) #define __Pyx_XGOTREF(r) #define __Pyx_XGIVEREF(r) #endif /* CYTHON_REFNANNY */ #define __Pyx_XDECREF_SET(r, v) do { \ PyObject *tmp = (PyObject *) r; \ r = v; __Pyx_XDECREF(tmp); \ } while (0) #define __Pyx_DECREF_SET(r, v) do { \ PyObject *tmp = (PyObject *) r; \ r = v; __Pyx_DECREF(tmp); \ } while (0) #define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) #define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { PyTypeObject* tp = Py_TYPE(obj); if (likely(tp->tp_getattro)) return tp->tp_getattro(obj, attr_name); #if PY_MAJOR_VERSION < 3 if (likely(tp->tp_getattr)) return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); #endif return PyObject_GetAttr(obj, attr_name); } #else #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) #endif static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ const char* function_name); /*proto*/ static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ #ifndef CYTHON_PROFILE #define CYTHON_PROFILE 1 #endif #ifndef CYTHON_TRACE #define CYTHON_TRACE 0 #endif #if CYTHON_TRACE #undef CYTHON_PROFILE_REUSE_FRAME #endif #ifndef CYTHON_PROFILE_REUSE_FRAME #define CYTHON_PROFILE_REUSE_FRAME 0 #endif #if CYTHON_PROFILE || CYTHON_TRACE #include "compile.h" #include "frameobject.h" #include "traceback.h" #if CYTHON_PROFILE_REUSE_FRAME #define CYTHON_FRAME_MODIFIER static #define CYTHON_FRAME_DEL #else #define CYTHON_FRAME_MODIFIER #define CYTHON_FRAME_DEL Py_CLEAR(__pyx_frame) #endif #define __Pyx_TraceDeclarations \ static PyCodeObject *__pyx_frame_code = NULL; \ CYTHON_FRAME_MODIFIER PyFrameObject *__pyx_frame = NULL; \ int __Pyx_use_tracing = 0; #define __Pyx_TraceCall(funcname, srcfile, firstlineno) \ if (unlikely(PyThreadState_GET()->use_tracing && \ (PyThreadState_GET()->c_profilefunc || (CYTHON_TRACE && PyThreadState_GET()->c_tracefunc)))) { \ __Pyx_use_tracing = __Pyx_TraceSetupAndCall(&__pyx_frame_code, &__pyx_frame, funcname, srcfile, firstlineno); \ } #define __Pyx_TraceException() \ if (unlikely(__Pyx_use_tracing) && PyThreadState_GET()->use_tracing && \ (PyThreadState_GET()->c_profilefunc || (CYTHON_TRACE && PyThreadState_GET()->c_tracefunc))) { \ PyThreadState* tstate = PyThreadState_GET(); \ tstate->use_tracing = 0; \ PyObject *exc_info = __Pyx_GetExceptionTuple(); \ if (exc_info) { \ if (CYTHON_TRACE && tstate->c_tracefunc) \ tstate->c_tracefunc( \ tstate->c_traceobj, __pyx_frame, PyTrace_EXCEPTION, exc_info); \ tstate->c_profilefunc( \ tstate->c_profileobj, __pyx_frame, PyTrace_EXCEPTION, exc_info); \ Py_DECREF(exc_info); \ } \ tstate->use_tracing = 1; \ } #define __Pyx_TraceReturn(result) \ if (unlikely(__Pyx_use_tracing) && PyThreadState_GET()->use_tracing) { \ PyThreadState* tstate = PyThreadState_GET(); \ tstate->use_tracing = 0; \ if (CYTHON_TRACE && tstate->c_tracefunc) \ tstate->c_tracefunc( \ tstate->c_traceobj, __pyx_frame, PyTrace_RETURN, (PyObject*)result); \ if (tstate->c_profilefunc) \ tstate->c_profilefunc( \ tstate->c_profileobj, __pyx_frame, PyTrace_RETURN, (PyObject*)result); \ CYTHON_FRAME_DEL; \ tstate->use_tracing = 1; \ } static PyCodeObject *__Pyx_createFrameCodeObject(const char *funcname, const char *srcfile, int firstlineno); /*proto*/ static int __Pyx_TraceSetupAndCall(PyCodeObject** code, PyFrameObject** frame, const char *funcname, const char *srcfile, int firstlineno); /*proto*/ #else #define __Pyx_TraceDeclarations #define __Pyx_TraceCall(funcname, srcfile, firstlineno) #define __Pyx_TraceException() #define __Pyx_TraceReturn(result) #endif /* CYTHON_PROFILE */ #if CYTHON_TRACE #define __Pyx_TraceLine(lineno) \ if (unlikely(__Pyx_use_tracing) && unlikely(PyThreadState_GET()->use_tracing && PyThreadState_GET()->c_tracefunc)) { \ PyThreadState* tstate = PyThreadState_GET(); \ __pyx_frame->f_lineno = lineno; \ tstate->use_tracing = 0; \ tstate->c_tracefunc(tstate->c_traceobj, __pyx_frame, PyTrace_LINE, NULL); \ tstate->use_tracing = 1; \ } #else #define __Pyx_TraceLine(lineno) #endif static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ #define __Pyx_PyObject_DelSlice(obj, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound) \ __Pyx_PyObject_SetSlice(obj, (PyObject*)NULL, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound) static CYTHON_INLINE int __Pyx_PyObject_SetSlice( PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop, PyObject** py_start, PyObject** py_stop, PyObject** py_slice, int has_cstart, int has_cstop, int wraparound); static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/ #define __Pyx_GetItemInt(o, i, size, to_py_func, is_list, wraparound, boundscheck) \ (((size) <= sizeof(Py_ssize_t)) ? \ __Pyx_GetItemInt_Fast(o, i, is_list, wraparound, boundscheck) : \ __Pyx_GetItemInt_Generic(o, to_py_func(i))) #define __Pyx_GetItemInt_List(o, i, size, to_py_func, is_list, wraparound, boundscheck) \ (((size) <= sizeof(Py_ssize_t)) ? \ __Pyx_GetItemInt_List_Fast(o, i, wraparound, boundscheck) : \ __Pyx_GetItemInt_Generic(o, to_py_func(i))) static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, int wraparound, int boundscheck); #define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func, is_list, wraparound, boundscheck) \ (((size) <= sizeof(Py_ssize_t)) ? \ __Pyx_GetItemInt_Tuple_Fast(o, i, wraparound, boundscheck) : \ __Pyx_GetItemInt_Generic(o, to_py_func(i))) static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, int wraparound, int boundscheck); static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, int wraparound, int boundscheck); #define __Pyx_SetItemInt(o, i, v, size, to_py_func, is_list, wraparound, boundscheck) \ (((size) <= sizeof(Py_ssize_t)) ? \ __Pyx_SetItemInt_Fast(o, i, v, is_list, wraparound, boundscheck) : \ __Pyx_SetItemInt_Generic(o, to_py_func(i), v)) static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v); static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list, int wraparound, int boundscheck); static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ #if CYTHON_COMPILING_IN_CPYTHON #define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL) static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { PyTypeObject* tp = Py_TYPE(obj); if (likely(tp->tp_setattro)) return tp->tp_setattro(obj, attr_name, value); #if PY_MAJOR_VERSION < 3 if (likely(tp->tp_setattr)) return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); #endif return PyObject_SetAttr(obj, attr_name, value); } #else #define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) #define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) #endif static CYTHON_INLINE int __Pyx_PySequence_Contains(PyObject* item, PyObject* seq, int eq) { int result = PySequence_Contains(seq, item); return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); } #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { PyListObject* L = (PyListObject*) list; Py_ssize_t len = Py_SIZE(list); if (likely(L->allocated > len)) { Py_INCREF(x); PyList_SET_ITEM(list, len, x); Py_SIZE(list) = len+1; return 0; } return PyList_Append(list, x); } #else #define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) #endif static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /*proto*/ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ #if CYTHON_CCOMPLEX #ifdef __cplusplus #define __Pyx_CREAL(z) ((z).real()) #define __Pyx_CIMAG(z) ((z).imag()) #else #define __Pyx_CREAL(z) (__real__(z)) #define __Pyx_CIMAG(z) (__imag__(z)) #endif #else #define __Pyx_CREAL(z) ((z).real) #define __Pyx_CIMAG(z) ((z).imag) #endif #if defined(_WIN32) && defined(__cplusplus) && CYTHON_CCOMPLEX #define __Pyx_SET_CREAL(z,x) ((z).real(x)) #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) #else #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) #endif static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); #if CYTHON_CCOMPLEX #define __Pyx_c_eqf(a, b) ((a)==(b)) #define __Pyx_c_sumf(a, b) ((a)+(b)) #define __Pyx_c_difff(a, b) ((a)-(b)) #define __Pyx_c_prodf(a, b) ((a)*(b)) #define __Pyx_c_quotf(a, b) ((a)/(b)) #define __Pyx_c_negf(a) (-(a)) #ifdef __cplusplus #define __Pyx_c_is_zerof(z) ((z)==(float)0) #define __Pyx_c_conjf(z) (::std::conj(z)) #if 1 #define __Pyx_c_absf(z) (::std::abs(z)) #define __Pyx_c_powf(a, b) (::std::pow(a, b)) #endif #else #define __Pyx_c_is_zerof(z) ((z)==0) #define __Pyx_c_conjf(z) (conjf(z)) #if 1 #define __Pyx_c_absf(z) (cabsf(z)) #define __Pyx_c_powf(a, b) (cpowf(a, b)) #endif #endif #else static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex); static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex); #if 1 static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex); #endif #endif static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); #if CYTHON_CCOMPLEX #define __Pyx_c_eq(a, b) ((a)==(b)) #define __Pyx_c_sum(a, b) ((a)+(b)) #define __Pyx_c_diff(a, b) ((a)-(b)) #define __Pyx_c_prod(a, b) ((a)*(b)) #define __Pyx_c_quot(a, b) ((a)/(b)) #define __Pyx_c_neg(a) (-(a)) #ifdef __cplusplus #define __Pyx_c_is_zero(z) ((z)==(double)0) #define __Pyx_c_conj(z) (::std::conj(z)) #if 1 #define __Pyx_c_abs(z) (::std::abs(z)) #define __Pyx_c_pow(a, b) (::std::pow(a, b)) #endif #else #define __Pyx_c_is_zero(z) ((z)==0) #define __Pyx_c_conj(z) (conj(z)) #if 1 #define __Pyx_c_abs(z) (cabs(z)) #define __Pyx_c_pow(a, b) (cpow(a, b)) #endif #endif #else static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex); static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex); #if 1 static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex); #endif #endif static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *); static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *); static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *); static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *); static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *); static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *); static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *); static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *); static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *); static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *); static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *); static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *); static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *); static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *); static int __Pyx_check_binary_version(void); #if !defined(__Pyx_PyIdentifier_FromString) #if PY_MAJOR_VERSION < 3 #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s) #else #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s) #endif #endif static PyObject *__Pyx_ImportModule(const char *name); /*proto*/ static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict); /*proto*/ typedef struct { int code_line; PyCodeObject* code_object; } __Pyx_CodeObjectCacheEntry; struct __Pyx_CodeObjectCache { int count; int max_count; __Pyx_CodeObjectCacheEntry* entries; }; static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); static PyCodeObject *__pyx_find_code_object(int code_line); static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); static void __Pyx_AddTraceback(const char *funcname, int c_line, int py_line, const char *filename); /*proto*/ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ /* Module declarations from 'cpython.buffer' */ /* Module declarations from 'cpython.ref' */ /* Module declarations from 'libc.string' */ /* Module declarations from 'libc.stdio' */ /* Module declarations from 'cpython.object' */ /* Module declarations from '__builtin__' */ /* Module declarations from 'cpython.type' */ static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; /* Module declarations from 'libc.stdlib' */ /* Module declarations from 'numpy' */ /* Module declarations from 'numpy' */ static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ /* Module declarations from 'ga4py.gain.misc' */ #define __Pyx_MODULE_NAME "ga4py.gain.misc" int __pyx_module_is_main_ga4py__gain__misc = 0; /* Implementation of 'ga4py.gain.misc' */ static PyObject *__pyx_builtin_xrange; static PyObject *__pyx_builtin_ValueError; static PyObject *__pyx_builtin_NotImplementedError; static PyObject *__pyx_builtin_TypeError; static PyObject *__pyx_builtin_range; static PyObject *__pyx_builtin_RuntimeError; static PyObject *__pyx_pf_5ga4py_4gain_4misc_zeros_like(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_order, CYTHON_UNUSED PyObject *__pyx_v_subok); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_2ones(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_shape, PyObject *__pyx_v_dtype, PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_4ones_like(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_6empty(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_shape, PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_order); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_8empty_like(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_order, CYTHON_UNUSED PyObject *__pyx_v_subok); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_10eye(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_N, PyObject *__pyx_v_M, PyObject *__pyx_v_k, PyObject *__pyx_v_dtype); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_12identity(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_n, PyObject *__pyx_v_dtype); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_14fromfunction(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_shape, PyObject *__pyx_v_kwargs); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_16arange(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_start, PyObject *__pyx_v_stop, PyObject *__pyx_v_step, PyObject *__pyx_v_dtype, PyObject *__pyx_v_shape); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_18linspace(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_start, PyObject *__pyx_v_stop, PyObject *__pyx_v_num, PyObject *__pyx_v_endpoint, PyObject *__pyx_v_retstep); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_20logspace(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_start, PyObject *__pyx_v_stop, PyObject *__pyx_v_num, PyObject *__pyx_v_endpoint, PyObject *__pyx_v_base); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_22dot(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_24diag(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_v, PyObject *__pyx_v_k); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_26clip(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_a_min, PyObject *__pyx_v_a_max, PyObject *__pyx_v_out); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_28indices(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dimensions, PyObject *__pyx_v_dtype); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_30shape(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a); /* proto */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_32diagonal(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_offset, PyObject *__pyx_v_axis1, PyObject *__pyx_v_axis2); /* proto */ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */ static char __pyx_k_8[] = "step size of 0 not allowed"; static char __pyx_k_9[] = "total size of new array must be unchanged"; static char __pyx_k_16[] = "objects are not aligned"; static char __pyx_k_17[] = "arbitrary dot"; static char __pyx_k_18[] = "output must be an array"; static char __pyx_k_19[] = "clip: Output array must have thesame shape as the input."; static char __pyx_k_20[] = "_npin_piece_based_on_out"; static char __pyx_k_21[] = "flatiter version of clip"; static char __pyx_k_25[] = "ndarray is not C contiguous"; static char __pyx_k_27[] = "ndarray is not Fortran contiguous"; static char __pyx_k_29[] = "Non-native byte order not supported"; static char __pyx_k_31[] = "unknown dtype code in numpy.pxd (%d)"; static char __pyx_k_32[] = "Format string allocated too short, see comment in numpy.pxd"; static char __pyx_k_35[] = "Format string allocated too short."; static char __pyx_k_39[] = "/home/d3n000/ga/hpc_website/globalarrays/download/ga-5-3/python/ga4py/gain/misc.pyx"; static char __pyx_k_40[] = "ga4py.gain.misc"; static char __pyx_k_73[] = "zeros_like (line 21)"; static char __pyx_k_74[] = "Return an array of zeros with the same shape and type as a given array.\n\n Equivalent to ``a.copy().fill(0)``.\n\n Parameters\n ----------\n a : array_like\n The shape and data-type of `a` define the parameters of\n the returned array.\n\n Returns\n -------\n out : ndarray\n Array of zeros with same shape and type as `a`.\n\n See Also\n --------\n ones_like : Return an array of ones with shape and type of input.\n empty_like : Return an empty array with shape and type of input.\n zeros : Return a new array setting values to zero.\n ones : Return a new array setting values to one.\n empty : Return a new uninitialized array.\n\n Examples\n --------\n >>> x = np.arange(6)\n >>> x = x.reshape((2, 3))\n >>> x\n array([[0, 1, 2],\n [3, 4, 5]])\n >>> np.zeros_like(x)\n array([[0, 0, 0],\n [0, 0, 0]])\n\n >>> y = np.arange(3, dtype=np.float)\n >>> y\n array([ 0., 1., 2.])\n >>> np.zeros_like(y)\n array([ 0., 0., 0.])\n\n "; static char __pyx_k_75[] = "ones (line 65)"; static char __pyx_k_76[] = "Return a new array of given shape and type, filled with ones.\n\n Please refer to the documentation for `zeros`.\n\n See Also\n --------\n zeros\n\n Examples\n --------\n >>> np.ones(5)\n array([ 1., 1., 1., 1., 1.])\n\n >>> np.ones((5,), dtype=np.int)\n array([1, 1, 1, 1, 1])\n\n >>> np.ones((2, 1))\n array([[ 1.],\n [ 1.]])\n\n >>> s = (2,2)\n >>> np.ones(s)\n array([[ 1., 1.],\n [ 1., 1.]])\n \n "; static char __pyx_k_77[] = "ones_like (line 101)"; static char __pyx_k_78[] = "ones_like(x[, out])\n\n Returns an array of ones with the same shape and type as a given array.\n\n Equivalent to ``a.copy().fill(1)``.\n\n Please refer to the documentation for `zeros_like`.\n\n See Also\n --------\n zeros_like\n\n Examples\n --------\n >>> a = np.array([[1, 2, 3], [4, 5, 6]])\n >>> np.ones_like(a)\n array([[1, 1, 1],\n [1, 1, 1]])\n\n "; static char __pyx_k_79[] = "empty (line 124)"; static char __pyx_k_80[] = "empty(shape, dtype=float, order='C')\n\n Return a new array of given shape and type, without initializing entries.\n\n Parameters\n ----------\n shape : int or tuple of int\n Shape of the empty array\n dtype : data-type, optional\n Desired output data-type.\n order : {'C', 'F'}, optional\n Whether to store multi-dimensional data in C (row-major) or\n Fortran (column-major) order in memory.\n\n See Also\n --------\n empty_like, zeros, ones\n\n Notes\n -----\n `empty`, unlike `zeros`, does not set the array values to zero,\n and may therefore be marginally faster. On the other hand, it requires\n the user to manually set all the values in the array, and should be\n used with caution.\n\n Examples\n --------\n >>> np.empty([2, 2])\n array([[ -9.74499359e+001, 6.69583040e-309], #random data\n [ 2.13182611e-314, 3.06959433e-309]])\n\n >>> np.empty([2, 2], dtype=int)\n array([[-1073741821, -1067949133], #random data\n [ 496041986, 19249760]])\n\n "; static char __pyx_k_81[] = "empty_like (line 163)"; static char __pyx_k_82[] = " Return a new array with the same shape and type as a given array.\n\n Parameters\n ----------\n a : array_like\n The shape and data-type of `a` define the parameters of the\n returned array.\n\n Returns\n -------\n out : ndarray\n Array of random data with the same shape and type as `a`.\n\n See Also\n --------\n ones_like : Return an array of ones with shape and type of input.\n zeros_like : Return an array of zeros with shape and type of input.\n empty : Return a new uninitialized array.\n ones : Return a new array setting values to one.\n zeros : Return a new array setting values to zero.\n\n Notes\n -----\n This function does *not* initialize the returned array; to do that use\n `zeros_like` or `ones_like` instead. It may be marginally faster than the\n functions that do set the array values.\n\n Examples\n --------\n >>> a = ([1,2,3], [4,5,6]) # a is array-like\n >>> np.empty_like(a)\n array([[-1073741821, -1073741821, 3], #random\n [ 0, 0, -1073741821]])\n >>> a = np.array([[1., 2., 3.],[4.,5.,6.]])\n >>> np.empty_like(a)\n array([[ -2.00000715e+000, 1.48219694e-323, -2.00000572e+000], #random\n [ 4.38791518e-305, -2.00000715e+000, 4.17269252e-309]])\n \n "; static char __pyx_k_83[] = "eye (line 205)"; static char __pyx_k_84[] = "Return a 2-D array with ones on the diagonal and zeros elsewhere.\n\n Parameters\n ----------\n N : int\n Number of rows in the output.\n M : int, optional\n Number of columns in the output. If None, defaults to `N`.\n k : int, optional\n Index of the diagonal: 0 refers to the main diagonal, a positive value\n refers to an upper diagonal, and a negative value to a lower diagonal.\n dtype : dtype, optional\n Data-type of the returned array.\n\n Returns\n -------\n I : ndarray (N,M)\n An array where all elements are equal to zero, except for the `k`-th\n diagonal, whose values are equal to one.\n\n See Also\n --------\n diag : Return a diagonal 2-D array using a 1-D array specified by the user.\n\n Examples\n --------\n >>> np.eye(2, dtype=int)\n array([[1, 0],\n [0, 1]])\n >>> np.eye(3, k=1)\n array([[ 0., 1., 0.],\n [ 0., 0., 1.],\n [ 0., 0., 0.]])\n \n "; static char __pyx_k_85[] = "identity (line 257)"; static char __pyx_k_86[] = "Return the identity array.\n\n The identity array is a square array with ones on\n the main diagonal.\n\n Parameters\n ----------\n n : int\n Number of rows (and columns) in `n` x `n` output.\n dtype : data-type, optional\n Data-type of the output. Defaults to ``float``.\n\n Returns\n -------\n out : ndarray\n `n` x `n` array with its main diagonal set to one,\n and all other elements 0.\n\n Examples\n --------\n >>> np.identity(3)\n array([[ 1., 0., 0.],\n [ 0., 1., 0.],\n [ 0., 0., 1.]])\n\n "; static char __pyx_k_87[] = "fromfunction (line 288)"; static char __pyx_k_88[] = "Construct an array by executing a function over each coordinate.\n\n The resulting array therefore has a value ``fn(x, y, z)`` at\n coordinate ``(x, y, z)``.\n\n Parameters\n ----------\n function : callable\n The function is called with N parameters, each of which\n represents the coordinates of the array varying along a\n specific axis. For example, if `shape` were ``(2, 2)``, then\n the parameters would be two arrays, ``[[0, 0], [1, 1]]`` and\n ``[[0, 1], [0, 1]]``. `function` must be capable of operating on\n arrays, and should return a scalar value.\n shape : (N,) tuple of ints\n Shape of the output array, which also determines the shape of\n the coordinate arrays passed to `function`.\n dtype : data-type, optional\n Data-type of the coordinate arrays passed to `function`.\n By default, `dtype` is float.\n\n Returns\n -------\n out : any\n The result of the call to `function` is passed back directly.\n Therefore the type and shape of `out` is completely determined by\n `function`.\n\n See Also\n --------\n indices, meshgrid\n\n Notes\n -----\n Keywords other than `shape` and `dtype` are passed to `function`.\n\n Examples\n --------\n >>> np.fromfunction(lambda i, j: i == j, (3, 3), dtype=int)\n array([[ True, False, False],\n [False, True, False],\n [False, False, True]], dtype=bool)\n\n >>> np.fromfunction(lambda i, j: i + j, (3, 3), dtype=int)\n array([[0, 1, 2],\n [1, 2, 3],\n [2, 3, 4]])\n \n "; static char __pyx_k_89[] = "arange (line 360)"; static char __pyx_k_90[] = "Return evenly spaced values within a given interval.\n\n Values are generated within the half-open interval ``[start, stop)``\n (in other words, the interval including `start` but excluding `stop`).\n For integer arguments the function is equivalent to the Python built-in\n `range `_ function,\n but returns a ndarray rather than a list.\n\n Parameters\n ----------\n start : number, optional\n Start of interval. The interval includes this value. The default\n start value is 0.\n stop : number\n End of interval. The interval does not include this value.\n step : number, optional\n Spacing between values. For any output `out`, this is the distance\n between two adjacent values, ``out[i+1] - out[i]``. The default\n step size is 1. If `step` is specified, `start` must also be given.\n dtype : dtype\n The type of the output array. If `dtype` is not given, infer the data\n type from the other input arguments.\n\n Hack Parameters\n ---------------\n shape : tuple of ints\n Useful shortcut when doing something like np.arange(...).reshape(...)\n\n Returns\n -------\n out : ndarray\n Array of evenly spaced values.\n\n For floating point arguments, the length of the result is\n ``ceil((stop - start)/step)``. Because of floating point overflow,\n this rule may result in the last element of `out` being greater\n than `stop`.\n\n See Also\n --------\n linspace : Evenly spaced numbers with careful handling of endpoints.\n ogrid: Arrays of evenly spaced numbers in N-dimensions\n mgrid: Grid-shaped arrays of evenly spaced numbers in N-dimensions\n\n Examples\n --------\n >>> np.arange(3)\n array([0, 1, 2])\n >>> np.arange(3.0)\n array([ 0., 1., 2.])\n >>> np.arange(3,7)\n array([3, 4, 5, 6])\n >>> np.arange(3,7,2)\n array([3, 5])\n ""\n "; static char __pyx_k_91[] = "linspace (line 465)"; static char __pyx_k_92[] = "Return evenly spaced numbers over a specified interval.\n\n Returns `num` evenly spaced samples, calculated over the\n interval [`start`, `stop` ].\n\n The endpoint of the interval can optionally be excluded.\n\n Parameters\n ----------\n start : scalar\n The starting value of the sequence.\n stop : scalar\n The end value of the sequence, unless `endpoint` is set to False.\n In that case, the sequence consists of all but the last of ``num + 1``\n evenly spaced samples, so that `stop` is excluded. Note that the step\n size changes when `endpoint` is False.\n num : int, optional\n Number of samples to generate. Default is 50.\n endpoint : bool, optional\n If True, `stop` is the last sample. Otherwise, it is not included.\n Default is True.\n retstep : bool, optional\n If True, return (`samples`, `step`), where `step` is the spacing\n between samples.\n\n Returns\n -------\n samples : ndarray\n There are `num` equally spaced samples in the closed interval\n ``[start, stop]`` or the half-open interval ``[start, stop)``\n (depending on whether `endpoint` is True or False).\n step : float (only if `retstep` is True)\n Size of spacing between samples.\n\n\n See Also\n --------\n arange : Similiar to `linspace`, but uses a step size (instead of the\n number of samples).\n logspace : Samples uniformly distributed in log space.\n\n Examples\n --------\n >>> np.linspace(2.0, 3.0, num=5)\n array([ 2. , 2.25, 2.5 , 2.75, 3. ])\n >>> np.linspace(2.0, 3.0, num=5, endpoint=False)\n array([ 2. , 2.2, 2.4, 2.6, 2.8])\n >>> np.linspace(2.0, 3.0, num=5, retstep=True)\n (array([ 2. , 2.25, 2.5 , 2.75, 3. ]), 0.25)\n\n Graphical illustration:\n\n >>> import matplotlib.pyplot as plt\n >>> N = 8\n >>> y = np.zeros(N)\n >>> x1 = np.linspace(0, 10, N, endpoint=Tru""e)\n >>> x2 = np.linspace(0, 10, N, endpoint=False)\n >>> plt.plot(x1, y, 'o')\n >>> plt.plot(x2, y + 0.5, 'o')\n >>> plt.ylim([-0.5, 1])\n >>> plt.show()\n\n "; static char __pyx_k_93[] = "logspace (line 549)"; static char __pyx_k_94[] = "Return numbers spaced evenly on a log scale.\n\n In linear space, the sequence starts at ``base ** start``\n (`base` to the power of `start`) and ends with ``base ** stop``\n (see `endpoint` below).\n\n Parameters\n ----------\n start : float\n ``base ** start`` is the starting value of the sequence.\n stop : float\n ``base ** stop`` is the final value of the sequence, unless `endpoint`\n is False. In that case, ``num + 1`` values are spaced over the\n interval in log-space, of which all but the last (a sequence of\n length ``num``) are returned.\n num : integer, optional\n Number of samples to generate. Default is 50.\n endpoint : boolean, optional\n If true, `stop` is the last sample. Otherwise, it is not included.\n Default is True.\n base : float, optional\n The base of the log space. The step size between the elements in\n ``ln(samples) / ln(base)`` (or ``log_base(samples)``) is uniform.\n Default is 10.0.\n\n Returns\n -------\n samples : ndarray\n `num` samples, equally spaced on a log scale.\n\n See Also\n --------\n arange : Similiar to linspace, with the step size specified instead of the\n number of samples. Note that, when used with a float endpoint, the\n endpoint may or may not be included.\n linspace : Similar to logspace, but with the samples uniformly distributed\n in linear space, instead of log space.\n\n Notes\n -----\n Logspace is equivalent to the code\n\n >>> y = linspace(start, stop, num=num, endpoint=endpoint)\n >>> power(base, y)\n\n Examples\n --------\n >>> np.logspace(2.0, 3.0, num=4)\n array([ 100. , 215.443469 , 464.15888336, 1000. ])\n >>> np.logspace(2.0, 3.0, num=4, endpoint=False)\n array([ 100. , 177.827941 , 316.22776602, 562.34132519])\n >>> np.logspace(2.0, 3.0, num=4, base=2.0)""\n array([ 4. , 5.0396842 , 6.34960421, 8. ])\n\n Graphical illustration:\n\n >>> import matplotlib.pyplot as plt\n >>> N = 10\n >>> x1 = np.logspace(0.1, 1, N, endpoint=True)\n >>> x2 = np.logspace(0.1, 1, N, endpoint=False)\n >>> y = np.zeros(N)\n >>> plt.plot(x1, y, 'o')\n >>> plt.plot(x2, y + 0.5, 'o')\n >>> plt.ylim([-0.5, 1])\n >>> plt.show()\n \n "; static char __pyx_k_95[] = "dot (line 635)"; static char __pyx_k_96[] = "dot(a, b)\n\n Dot product of two arrays.\n\n For 2-D arrays it is equivalent to matrix multiplication, and for 1-D\n arrays to inner product of vectors (without complex conjugation). For\n N dimensions it is a sum product over the last axis of `a` and\n the second-to-last of `b`::\n\n dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])\n\n Parameters\n ----------\n a : array_like\n First argument.\n b : array_like\n Second argument.\n\n Returns\n -------\n output : ndarray\n Returns the dot product of `a` and `b`. If `a` and `b` are both\n scalars or both 1-D arrays then a scalar is returned; otherwise\n an array is returned.\n\n Raises\n ------\n ValueError\n If the last dimension of `a` is not the same size as\n the second-to-last dimension of `b`.\n\n See Also\n --------\n vdot : Complex-conjugating dot product.\n tensordot : Sum products over arbitrary axes.\n\n Examples\n --------\n >>> np.dot(3, 4)\n 12\n\n Neither argument is complex-conjugated:\n\n >>> np.dot([2j, 3j], [2j, 3j])\n (-13+0j)\n\n For 2-D arrays it's the matrix product:\n\n >>> a = [[1, 0], [0, 1]]\n >>> b = [[4, 1], [2, 2]]\n >>> np.dot(a, b)\n array([[4, 1],\n [2, 2]])\n\n >>> a = np.arange(3*4*5*6).reshape((3,4,5,6))\n >>> b = np.arange(3*4*5*6)[::-1].reshape((5,4,6,3))\n >>> np.dot(a, b)[2,3,2,1,2,2]\n 499128\n >>> sum(a[2,3,2,:] * b[1,2,:,2])\n 499128\n\n "; static char __pyx_k_97[] = "diag (line 744)"; static char __pyx_k_98[] = "Extract a diagonal or construct a diagonal array.\n\n Parameters\n ----------\n v : array_like\n If `v` is a 2-D array, return a copy of its `k`-th diagonal.\n If `v` is a 1-D array, return a 2-D array with `v` on the `k`-th\n diagonal.\n k : int, optional\n Diagonal in question. The default is 0. Use `k>0` for diagonals\n above the main diagonal, and `k<0` for diagonals below the main\n diagonal.\n\n Returns\n -------\n out : ndarray\n The extracted diagonal or constructed diagonal array.\n\n See Also\n --------\n diagonal : Return specified diagonals.\n diagflat : Create a 2-D array with the flattened input as a diagonal.\n trace : Sum along diagonals.\n triu : Upper triangle of an array.\n tril : Lower triange of an array.\n\n Examples\n --------\n >>> x = np.arange(9).reshape((3,3))\n >>> x\n array([[0, 1, 2],\n [3, 4, 5],\n [6, 7, 8]])\n\n >>> np.diag(x)\n array([0, 4, 8])\n >>> np.diag(x, k=1)\n array([1, 5])\n >>> np.diag(x, k=-1)\n array([3, 7])\n\n >>> np.diag(np.diag(x))\n array([[0, 0, 0],\n [0, 4, 0],\n [0, 0, 8]])\n\n "; static char __pyx_k_99[] = "clip (line 824)"; static char __pyx_k__B[] = "B"; static char __pyx_k__C[] = "C"; static char __pyx_k__H[] = "H"; static char __pyx_k__I[] = "I"; static char __pyx_k__K[] = "K"; static char __pyx_k__L[] = "L"; static char __pyx_k__M[] = "M"; static char __pyx_k__N[] = "N"; static char __pyx_k__O[] = "O"; static char __pyx_k__Q[] = "Q"; static char __pyx_k__T[] = "T"; static char __pyx_k__a[] = "a"; static char __pyx_k__b[] = "b"; static char __pyx_k__d[] = "d"; static char __pyx_k__f[] = "f"; static char __pyx_k__g[] = "g"; static char __pyx_k__h[] = "h"; static char __pyx_k__i[] = "i"; static char __pyx_k__k[] = "k"; static char __pyx_k__l[] = "l"; static char __pyx_k__n[] = "n"; static char __pyx_k__q[] = "q"; static char __pyx_k__v[] = "v"; static char __pyx_k__x[] = "x"; static char __pyx_k_100[] = "Clip (limit) the values in an array.\n\n Given an interval, values outside the interval are clipped to\n the interval edges. For example, if an interval of ``[0, 1]``\n is specified, values smaller than 0 become 0, and values larger\n than 1 become 1.\n\n Parameters\n ----------\n a : array_like\n Array containing elements to clip.\n a_min : scalar or array_like\n Minimum value.\n a_max : scalar or array_like\n Maximum value. If `a_min` or `a_max` are array_like, then they will\n be broadcasted to the shape of `a`.\n out : ndarray, optional\n The results will be placed in this array. It may be the input\n array for in-place clipping. `out` must be of the right shape\n to hold the output. Its type is preserved.\n\n Returns\n -------\n clipped_array : ndarray\n An array with the elements of `a`, but where values\n < `a_min` are replaced with `a_min`, and those > `a_max`\n with `a_max`.\n\n See Also\n --------\n numpy.doc.ufuncs : Section \"Output arguments\"\n\n Examples\n --------\n >>> a = np.arange(10)\n >>> np.clip(a, 1, 8)\n array([1, 1, 2, 3, 4, 5, 6, 7, 8, 8])\n >>> a\n array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\n >>> np.clip(a, 3, 6, out=a)\n array([3, 3, 3, 3, 4, 5, 6, 6, 6, 6])\n >>> a = np.arange(10)\n >>> a\n array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\n >>> np.clip(a, [3,4,1,1,1,4,4,4,4,4], 8)\n array([3, 4, 2, 3, 4, 5, 6, 7, 8, 8])\n\n "; static char __pyx_k_101[] = "indices (line 976)"; static char __pyx_k_102[] = "Return an array representing the indices of a grid.\n\n Compute an array where the subarrays contain index values 0,1,...\n varying only along the corresponding axis.\n\n Parameters\n ----------\n dimensions : sequence of ints\n The shape of the grid.\n dtype : dtype, optional\n Data type of the result.\n\n Returns\n -------\n grid : ndarray\n The array of grid indices,\n ``grid.shape = (len(dimensions),) + tuple(dimensions)``.\n\n See Also\n --------\n mgrid, meshgrid\n\n Notes\n -----\n The output shape is obtained by prepending the number of dimensions\n in front of the tuple of dimensions, i.e. if `dimensions` is a tuple\n ``(r0, ..., rN-1)`` of length ``N``, the output shape is\n ``(N,r0,...,rN-1)``.\n\n The subarrays ``grid[k]`` contains the N-D array of indices along the\n ``k-th`` axis. Explicitly::\n\n grid[k,i0,i1,...,iN-1] = ik\n\n Examples\n --------\n >>> grid = np.indices((2, 3))\n >>> grid.shape\n (2, 2, 3)\n >>> grid[0] # row indices\n array([[0, 0, 0],\n [1, 1, 1]])\n >>> grid[1] # column indices\n array([[0, 1, 2],\n [0, 1, 2]])\n\n The indices can be used as an index into an array.\n\n >>> x = np.arange(20).reshape(5, 4)\n >>> row, col = np.indices((2, 3))\n >>> x[row, col]\n array([[0, 1, 2],\n [4, 5, 6]])\n\n Note that it would be more straightforward in the above example to\n extract the required elements directly with ``x[:2, :3]``.\n\n "; static char __pyx_k_103[] = "shape (line 1054)"; static char __pyx_k_104[] = "Return the shape of an array.\n\n Parameters\n ----------\n a : array_like\n Input array.\n\n Returns\n -------\n shape : tuple of ints\n The elements of the shape tuple give the lengths of the\n corresponding array dimensions.\n\n See Also\n --------\n alen\n ndarray.shape : Equivalent array method.\n\n Examples\n --------\n >>> np.shape(np.eye(3))\n (3, 3)\n >>> np.shape([[1, 2]])\n (1, 2)\n >>> np.shape([0])\n (1,)\n >>> np.shape(0)\n ()\n\n >>> a = np.array([(1, 2), (3, 4)], dtype=[('x', 'i4'), ('y', 'i4')])\n >>> np.shape(a)\n (2,)\n >>> a.shape\n (2,)\n \n "; static char __pyx_k_105[] = "diagonal (line 1093)"; static char __pyx_k_106[] = "Return specified diagonals.\n\n If `a` is 2-D, returns the diagonal of `a` with the given offset,\n i.e., the collection of elements of the form ``a[i, i+offset]``. If\n `a` has more than two dimensions, then the axes specified by `axis1`\n and `axis2` are used to determine the 2-D sub-array whose diagonal is\n returned. The shape of the resulting array can be determined by\n removing `axis1` and `axis2` and appending an index to the right equal\n to the size of the resulting diagonals.\n\n Parameters\n ----------\n a : array_like\n Array from which the diagonals are taken.\n offset : int, optional\n Offset of the diagonal from the main diagonal. Can be positive or\n negative. Defaults to main diagonal (0).\n axis1 : int, optional\n Axis to be used as the first axis of the 2-D sub-arrays from which\n the diagonals should be taken. Defaults to first axis (0).\n axis2 : int, optional\n Axis to be used as the second axis of the 2-D sub-arrays from\n which the diagonals should be taken. Defaults to second axis (1).\n\n Returns\n -------\n array_of_diagonals : ndarray\n If `a` is 2-D, a 1-D array containing the diagonal is returned.\n If the dimension of `a` is larger, then an array of diagonals is\n returned, \"packed\" from left-most dimension to right-most (e.g.,\n if `a` is 3-D, then the diagonals are \"packed\" along rows).\n\n Raises\n ------\n ValueError\n If the dimension of `a` is less than 2.\n\n See Also\n --------\n diag : MATLAB work-a-like for 1-D and 2-D arrays.\n diagflat : Create diagonal arrays.\n trace : Sum along diagonals.\n\n Examples\n --------\n >>> a = np.arange(4).reshape(2,2)\n >>> a\n array([[0, 1],\n [2, 3]])\n >>> a.diagonal()\n array([0, 3])\n >>> a.diagonal(1)\n array([1])\n\n A 3-D example:\n\n >>> a = np.arange(8).reshape(2,2,2); a\n ""array([[[0, 1],\n [2, 3]],\n [[4, 5],\n [6, 7]]])\n >>> a.diagonal(0, # Main diagonals of two arrays created by skipping\n ... 0, # across the outer(left)-most axis last and\n ... 1) # the \"middle\" (row) axis first.\n array([[0, 6],\n [1, 7]])\n\n The sub-arrays whose main diagonals we just obtained; note that each\n corresponds to fixing the right-most (column) axis, and that the\n diagonals are \"packed\" in rows.\n\n >>> a[:,:,0] # main diagonal is [0 6]\n array([[0, 2],\n [4, 6]])\n >>> a[:,:,1] # main diagonal is [1 7]\n array([[1, 3],\n [5, 7]])\n \n "; static char __pyx_k__Zd[] = "Zd"; static char __pyx_k__Zf[] = "Zf"; static char __pyx_k__Zg[] = "Zg"; static char __pyx_k__ga[] = "ga"; static char __pyx_k__hi[] = "hi"; static char __pyx_k__lo[] = "lo"; static char __pyx_k__np[] = "np"; static char __pyx_k__add[] = "add"; static char __pyx_k__buf[] = "buf"; static char __pyx_k__dim[] = "dim"; static char __pyx_k__dot[] = "dot"; static char __pyx_k__eye[] = "eye"; static char __pyx_k__nda[] = "nda"; static char __pyx_k__npa[] = "npa"; static char __pyx_k__num[] = "num"; static char __pyx_k__out[] = "out"; static char __pyx_k__pop[] = "pop"; static char __pyx_k__sum[] = "sum"; static char __pyx_k__tmp[] = "tmp"; static char __pyx_k__vec[] = "vec"; static char __pyx_k__TODO[] = "TODO"; static char __pyx_k__args[] = "args"; static char __pyx_k__axis[] = "axis"; static char __pyx_k__base[] = "base"; static char __pyx_k__ceil[] = "ceil"; static char __pyx_k__clip[] = "clip"; static char __pyx_k__core[] = "core"; static char __pyx_k__diag[] = "diag"; static char __pyx_k__flat[] = "flat"; static char __pyx_k__func[] = "func"; static char __pyx_k__gemm[] = "gemm"; static char __pyx_k__math[] = "math"; static char __pyx_k__ndim[] = "ndim"; static char __pyx_k__ones[] = "ones"; static char __pyx_k__prod[] = "prod"; static char __pyx_k__step[] = "step"; static char __pyx_k__stop[] = "stop"; static char __pyx_k__sync[] = "sync"; static char __pyx_k___base[] = "_base"; static char __pyx_k__a_max[] = "a_max"; static char __pyx_k__a_min[] = "a_min"; static char __pyx_k__axis1[] = "axis1"; static char __pyx_k__axis2[] = "axis2"; static char __pyx_k__dtype[] = "dtype"; static char __pyx_k__empty[] = "empty"; static char __pyx_k__float[] = "float"; static char __pyx_k__ga4py[] = "ga4py"; static char __pyx_k__index[] = "index"; static char __pyx_k__int64[] = "int64"; static char __pyx_k__ndtmp[] = "ndtmp"; static char __pyx_k__npout[] = "npout"; static char __pyx_k__numpy[] = "numpy"; static char __pyx_k__order[] = "order"; static char __pyx_k__range[] = "range"; static char __pyx_k__shape[] = "shape"; static char __pyx_k__start[] = "start"; static char __pyx_k__subok[] = "subok"; static char __pyx_k__zeros[] = "zeros"; static char __pyx_k__access[] = "access"; static char __pyx_k__allget[] = "allget"; static char __pyx_k__arange[] = "arange"; static char __pyx_k__bindex[] = "bindex"; static char __pyx_k__handle[] = "handle"; static char __pyx_k__kwargs[] = "kwargs"; static char __pyx_k__length[] = "length"; static char __pyx_k__lshape[] = "lshape"; static char __pyx_k__offset[] = "offset"; static char __pyx_k__reduce[] = "reduce"; static char __pyx_k__values[] = "values"; static char __pyx_k__xrange[] = "xrange"; static char __pyx_k__a_local[] = "a_local"; static char __pyx_k__a_shape[] = "a_shape"; static char __pyx_k__asarray[] = "asarray"; static char __pyx_k__float32[] = "float32"; static char __pyx_k__float64[] = "float64"; static char __pyx_k__gop_add[] = "gop_add"; static char __pyx_k__indices[] = "indices"; static char __pyx_k__nda_max[] = "nda_max"; static char __pyx_k__nda_min[] = "nda_min"; static char __pyx_k__ndarray[] = "ndarray"; static char __pyx_k__npa_max[] = "npa_max"; static char __pyx_k__npa_min[] = "npa_min"; static char __pyx_k__release[] = "release"; static char __pyx_k__reshape[] = "reshape"; static char __pyx_k__retstep[] = "retstep"; static char __pyx_k__strides[] = "strides"; static char __pyx_k__vec_mod[] = "vec_mod"; static char __pyx_k____main__[] = "__main__"; static char __pyx_k____test__[] = "__test__"; static char __pyx_k__diagonal[] = "diagonal"; static char __pyx_k__endpoint[] = "endpoint"; static char __pyx_k__flatiter[] = "flatiter"; static char __pyx_k__identity[] = "identity"; static char __pyx_k__is_array[] = "is_array"; static char __pyx_k__itemsize[] = "itemsize"; static char __pyx_k__linspace[] = "linspace"; static char __pyx_k__logspace[] = "logspace"; static char __pyx_k__multiply[] = "multiply"; static char __pyx_k__TypeError[] = "TypeError"; static char __pyx_k__complex64[] = "complex64"; static char __pyx_k__get_dtype[] = "get_dtype"; static char __pyx_k__get_shape[] = "get_shape"; static char __pyx_k__local_sum[] = "local_sum"; static char __pyx_k__ones_like[] = "ones_like"; static char __pyx_k__release_a[] = "release_a"; static char __pyx_k__ValueError[] = "ValueError"; static char __pyx_k____import__[] = "__import__"; static char __pyx_k__complex128[] = "complex128"; static char __pyx_k__dimensions[] = "dimensions"; static char __pyx_k__empty_like[] = "empty_like"; static char __pyx_k__lohi_shape[] = "lohi_shape"; static char __pyx_k__orig_shape[] = "orig_shape"; static char __pyx_k__zeros_like[] = "zeros_like"; static char __pyx_k__a_max_shape[] = "a_max_shape"; static char __pyx_k__a_min_shape[] = "a_min_shape"; static char __pyx_k__local_array[] = "local_array"; static char __pyx_k__local_shape[] = "local_shape"; static char __pyx_k__valid_types[] = "valid_types"; static char __pyx_k__RuntimeError[] = "RuntimeError"; static char __pyx_k__distribution[] = "distribution"; static char __pyx_k__fromfunction[] = "fromfunction"; static char __pyx_k__release_a_max[] = "release_a_max"; static char __pyx_k__release_a_min[] = "release_a_min"; static char __pyx_k__is_distributed[] = "is_distributed"; static char __pyx_k__release_update[] = "release_update"; static char __pyx_k__should_distribute[] = "should_distribute"; static char __pyx_k__NotImplementedError[] = "NotImplementedError"; static PyObject *__pyx_kp_u_100; static PyObject *__pyx_kp_u_101; static PyObject *__pyx_kp_u_102; static PyObject *__pyx_kp_u_103; static PyObject *__pyx_kp_u_104; static PyObject *__pyx_kp_u_105; static PyObject *__pyx_kp_u_106; static PyObject *__pyx_kp_s_16; static PyObject *__pyx_kp_s_17; static PyObject *__pyx_kp_s_18; static PyObject *__pyx_kp_s_19; static PyObject *__pyx_n_s_20; static PyObject *__pyx_kp_s_21; static PyObject *__pyx_kp_u_25; static PyObject *__pyx_kp_u_27; static PyObject *__pyx_kp_u_29; static PyObject *__pyx_kp_u_31; static PyObject *__pyx_kp_u_32; static PyObject *__pyx_kp_u_35; static PyObject *__pyx_kp_s_39; static PyObject *__pyx_n_s_40; static PyObject *__pyx_kp_u_73; static PyObject *__pyx_kp_u_74; static PyObject *__pyx_kp_u_75; static PyObject *__pyx_kp_u_76; static PyObject *__pyx_kp_u_77; static PyObject *__pyx_kp_u_78; static PyObject *__pyx_kp_u_79; static PyObject *__pyx_kp_s_8; static PyObject *__pyx_kp_u_80; static PyObject *__pyx_kp_u_81; static PyObject *__pyx_kp_u_82; static PyObject *__pyx_kp_u_83; static PyObject *__pyx_kp_u_84; static PyObject *__pyx_kp_u_85; static PyObject *__pyx_kp_u_86; static PyObject *__pyx_kp_u_87; static PyObject *__pyx_kp_u_88; static PyObject *__pyx_kp_u_89; static PyObject *__pyx_kp_s_9; static PyObject *__pyx_kp_u_90; static PyObject *__pyx_kp_u_91; static PyObject *__pyx_kp_u_92; static PyObject *__pyx_kp_u_93; static PyObject *__pyx_kp_u_94; static PyObject *__pyx_kp_u_95; static PyObject *__pyx_kp_u_96; static PyObject *__pyx_kp_u_97; static PyObject *__pyx_kp_u_98; static PyObject *__pyx_kp_u_99; static PyObject *__pyx_n_s__C; static PyObject *__pyx_n_s__K; static PyObject *__pyx_n_s__M; static PyObject *__pyx_n_s__N; static PyObject *__pyx_n_s__NotImplementedError; static PyObject *__pyx_n_s__RuntimeError; static PyObject *__pyx_n_s__T; static PyObject *__pyx_n_s__TODO; static PyObject *__pyx_n_s__TypeError; static PyObject *__pyx_n_s__ValueError; static PyObject *__pyx_n_s____import__; static PyObject *__pyx_n_s____main__; static PyObject *__pyx_n_s____test__; static PyObject *__pyx_n_s___base; static PyObject *__pyx_n_s__a; static PyObject *__pyx_n_s__a_local; static PyObject *__pyx_n_s__a_max; static PyObject *__pyx_n_s__a_max_shape; static PyObject *__pyx_n_s__a_min; static PyObject *__pyx_n_s__a_min_shape; static PyObject *__pyx_n_s__a_shape; static PyObject *__pyx_n_s__access; static PyObject *__pyx_n_s__add; static PyObject *__pyx_n_s__allget; static PyObject *__pyx_n_s__arange; static PyObject *__pyx_n_s__args; static PyObject *__pyx_n_s__asarray; static PyObject *__pyx_n_s__axis; static PyObject *__pyx_n_s__axis1; static PyObject *__pyx_n_s__axis2; static PyObject *__pyx_n_s__b; static PyObject *__pyx_n_s__base; static PyObject *__pyx_n_s__bindex; static PyObject *__pyx_n_s__buf; static PyObject *__pyx_n_s__ceil; static PyObject *__pyx_n_s__clip; static PyObject *__pyx_n_s__complex128; static PyObject *__pyx_n_s__complex64; static PyObject *__pyx_n_s__core; static PyObject *__pyx_n_s__diag; static PyObject *__pyx_n_s__diagonal; static PyObject *__pyx_n_s__dim; static PyObject *__pyx_n_s__dimensions; static PyObject *__pyx_n_s__distribution; static PyObject *__pyx_n_s__dot; static PyObject *__pyx_n_s__dtype; static PyObject *__pyx_n_s__empty; static PyObject *__pyx_n_s__empty_like; static PyObject *__pyx_n_s__endpoint; static PyObject *__pyx_n_s__eye; static PyObject *__pyx_n_s__flat; static PyObject *__pyx_n_s__flatiter; static PyObject *__pyx_n_s__float; static PyObject *__pyx_n_s__float32; static PyObject *__pyx_n_s__float64; static PyObject *__pyx_n_s__fromfunction; static PyObject *__pyx_n_s__func; static PyObject *__pyx_n_s__ga; static PyObject *__pyx_n_s__ga4py; static PyObject *__pyx_n_s__gemm; static PyObject *__pyx_n_s__get_dtype; static PyObject *__pyx_n_s__get_shape; static PyObject *__pyx_n_s__gop_add; static PyObject *__pyx_n_s__handle; static PyObject *__pyx_n_s__hi; static PyObject *__pyx_n_s__i; static PyObject *__pyx_n_s__identity; static PyObject *__pyx_n_s__index; static PyObject *__pyx_n_s__indices; static PyObject *__pyx_n_s__int64; static PyObject *__pyx_n_s__is_array; static PyObject *__pyx_n_s__is_distributed; static PyObject *__pyx_n_s__itemsize; static PyObject *__pyx_n_s__k; static PyObject *__pyx_n_s__kwargs; static PyObject *__pyx_n_s__length; static PyObject *__pyx_n_s__linspace; static PyObject *__pyx_n_s__lo; static PyObject *__pyx_n_s__local_array; static PyObject *__pyx_n_s__local_shape; static PyObject *__pyx_n_s__local_sum; static PyObject *__pyx_n_s__logspace; static PyObject *__pyx_n_s__lohi_shape; static PyObject *__pyx_n_s__lshape; static PyObject *__pyx_n_s__math; static PyObject *__pyx_n_s__multiply; static PyObject *__pyx_n_s__n; static PyObject *__pyx_n_s__nda; static PyObject *__pyx_n_s__nda_max; static PyObject *__pyx_n_s__nda_min; static PyObject *__pyx_n_s__ndarray; static PyObject *__pyx_n_s__ndim; static PyObject *__pyx_n_s__ndtmp; static PyObject *__pyx_n_s__np; static PyObject *__pyx_n_s__npa; static PyObject *__pyx_n_s__npa_max; static PyObject *__pyx_n_s__npa_min; static PyObject *__pyx_n_s__npout; static PyObject *__pyx_n_s__num; static PyObject *__pyx_n_s__numpy; static PyObject *__pyx_n_s__offset; static PyObject *__pyx_n_s__ones; static PyObject *__pyx_n_s__ones_like; static PyObject *__pyx_n_s__order; static PyObject *__pyx_n_s__orig_shape; static PyObject *__pyx_n_s__out; static PyObject *__pyx_n_s__pop; static PyObject *__pyx_n_s__prod; static PyObject *__pyx_n_s__range; static PyObject *__pyx_n_s__reduce; static PyObject *__pyx_n_s__release; static PyObject *__pyx_n_s__release_a; static PyObject *__pyx_n_s__release_a_max; static PyObject *__pyx_n_s__release_a_min; static PyObject *__pyx_n_s__release_update; static PyObject *__pyx_n_s__reshape; static PyObject *__pyx_n_s__retstep; static PyObject *__pyx_n_s__shape; static PyObject *__pyx_n_s__should_distribute; static PyObject *__pyx_n_s__start; static PyObject *__pyx_n_s__step; static PyObject *__pyx_n_s__stop; static PyObject *__pyx_n_s__strides; static PyObject *__pyx_n_s__subok; static PyObject *__pyx_n_s__sum; static PyObject *__pyx_n_s__sync; static PyObject *__pyx_n_s__tmp; static PyObject *__pyx_n_s__v; static PyObject *__pyx_n_s__valid_types; static PyObject *__pyx_n_s__values; static PyObject *__pyx_n_s__vec; static PyObject *__pyx_n_s__vec_mod; static PyObject *__pyx_n_s__x; static PyObject *__pyx_n_s__xrange; static PyObject *__pyx_n_s__zeros; static PyObject *__pyx_n_s__zeros_like; static PyObject *__pyx_int_0; static PyObject *__pyx_int_1; static PyObject *__pyx_int_2; static PyObject *__pyx_int_neg_1; static PyObject *__pyx_int_15; static PyObject *__pyx_int_50; static PyObject *__pyx_k_1; static PyObject *__pyx_k_2; static PyObject *__pyx_k_4; static PyObject *__pyx_k_5; static PyObject *__pyx_k_6; static PyObject *__pyx_k_10; static PyObject *__pyx_k_11; static PyObject *__pyx_k_13; static PyObject *__pyx_k_14; static PyObject *__pyx_k_22; static PyObject *__pyx_k_slice_3; static PyObject *__pyx_k_slice_7; static PyObject *__pyx_k_slice_12; static PyObject *__pyx_k_slice_15; static PyObject *__pyx_k_slice_24; static PyObject *__pyx_k_tuple_23; static PyObject *__pyx_k_tuple_26; static PyObject *__pyx_k_tuple_28; static PyObject *__pyx_k_tuple_30; static PyObject *__pyx_k_tuple_33; static PyObject *__pyx_k_tuple_34; static PyObject *__pyx_k_tuple_36; static PyObject *__pyx_k_tuple_37; static PyObject *__pyx_k_tuple_41; static PyObject *__pyx_k_tuple_43; static PyObject *__pyx_k_tuple_45; static PyObject *__pyx_k_tuple_47; static PyObject *__pyx_k_tuple_49; static PyObject *__pyx_k_tuple_51; static PyObject *__pyx_k_tuple_53; static PyObject *__pyx_k_tuple_55; static PyObject *__pyx_k_tuple_57; static PyObject *__pyx_k_tuple_59; static PyObject *__pyx_k_tuple_61; static PyObject *__pyx_k_tuple_63; static PyObject *__pyx_k_tuple_65; static PyObject *__pyx_k_tuple_67; static PyObject *__pyx_k_tuple_69; static PyObject *__pyx_k_tuple_71; static PyObject *__pyx_k_codeobj_38; static PyObject *__pyx_k_codeobj_42; static PyObject *__pyx_k_codeobj_44; static PyObject *__pyx_k_codeobj_46; static PyObject *__pyx_k_codeobj_48; static PyObject *__pyx_k_codeobj_50; static PyObject *__pyx_k_codeobj_52; static PyObject *__pyx_k_codeobj_54; static PyObject *__pyx_k_codeobj_56; static PyObject *__pyx_k_codeobj_58; static PyObject *__pyx_k_codeobj_60; static PyObject *__pyx_k_codeobj_62; static PyObject *__pyx_k_codeobj_64; static PyObject *__pyx_k_codeobj_66; static PyObject *__pyx_k_codeobj_68; static PyObject *__pyx_k_codeobj_70; static PyObject *__pyx_k_codeobj_72; /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_1zeros_like(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_zeros_like[] = "Return an array of zeros with the same shape and type as a given array.\n\n Equivalent to ``a.copy().fill(0)``.\n\n Parameters\n ----------\n a : array_like\n The shape and data-type of `a` define the parameters of\n the returned array.\n\n Returns\n -------\n out : ndarray\n Array of zeros with same shape and type as `a`.\n\n See Also\n --------\n ones_like : Return an array of ones with shape and type of input.\n empty_like : Return an empty array with shape and type of input.\n zeros : Return a new array setting values to zero.\n ones : Return a new array setting values to one.\n empty : Return a new uninitialized array.\n\n Examples\n --------\n >>> x = np.arange(6)\n >>> x = x.reshape((2, 3))\n >>> x\n array([[0, 1, 2],\n [3, 4, 5]])\n >>> np.zeros_like(x)\n array([[0, 0, 0],\n [0, 0, 0]])\n\n >>> y = np.arange(3, dtype=np.float)\n >>> y\n array([ 0., 1., 2.])\n >>> np.zeros_like(y)\n array([ 0., 0., 0.])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_1zeros_like = {__Pyx_NAMESTR("zeros_like"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_1zeros_like, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_zeros_like)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_1zeros_like(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_a = 0; CYTHON_UNUSED PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; CYTHON_UNUSED PyObject *__pyx_v_subok = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("zeros_like (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__dtype,&__pyx_n_s__order,&__pyx_n_s__subok,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/misc.pyx":21 * cimport numpy as np * * def zeros_like(a, dtype=None, order='K', subok=True): # <<<<<<<<<<<<<< * """Return an array of zeros with the same shape and type as a given array. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)__pyx_n_s__K); values[3] = __pyx_k_1; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__subok); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zeros_like") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_dtype = values[1]; __pyx_v_order = values[2]; __pyx_v_subok = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("zeros_like", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.misc.zeros_like", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4misc_zeros_like(__pyx_self, __pyx_v_a, __pyx_v_dtype, __pyx_v_order, __pyx_v_subok); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4misc_zeros_like(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, CYTHON_UNUSED PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_order, CYTHON_UNUSED PyObject *__pyx_v_subok) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("zeros_like", 0); __Pyx_TraceCall("zeros_like", __pyx_f[0], 21); /* "ga4py/gain/misc.pyx":63 * * """ * return zeros(a.shape, dtype=a.dtype) # <<<<<<<<<<<<<< * * def ones(shape, dtype=np.float, order='C'): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__zeros); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.misc.zeros_like", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_3ones(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_2ones[] = "Return a new array of given shape and type, filled with ones.\n\n Please refer to the documentation for `zeros`.\n\n See Also\n --------\n zeros\n\n Examples\n --------\n >>> np.ones(5)\n array([ 1., 1., 1., 1., 1.])\n\n >>> np.ones((5,), dtype=np.int)\n array([1, 1, 1, 1, 1])\n\n >>> np.ones((2, 1))\n array([[ 1.],\n [ 1.]])\n\n >>> s = (2,2)\n >>> np.ones(s)\n array([[ 1., 1.],\n [ 1., 1.]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_3ones = {__Pyx_NAMESTR("ones"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_3ones, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_2ones)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_3ones(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_shape = 0; PyObject *__pyx_v_dtype = 0; PyObject *__pyx_v_order = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("ones (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__shape,&__pyx_n_s__dtype,&__pyx_n_s__order,0}; PyObject* values[3] = {0,0,0}; values[1] = __pyx_k_2; values[2] = ((PyObject *)__pyx_n_s__C); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__shape)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ones") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_shape = values[0]; __pyx_v_dtype = values[1]; __pyx_v_order = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("ones", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.misc.ones", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4misc_2ones(__pyx_self, __pyx_v_shape, __pyx_v_dtype, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/misc.pyx":65 * return zeros(a.shape, dtype=a.dtype) * * def ones(shape, dtype=np.float, order='C'): # <<<<<<<<<<<<<< * """Return a new array of given shape and type, filled with ones. * */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_2ones(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_shape, PyObject *__pyx_v_dtype, PyObject *__pyx_v_order) { PyObject *__pyx_v_a = NULL; PyObject *__pyx_v_buf = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("ones", 0); __Pyx_TraceCall("ones", __pyx_f[0], 65); /* "ga4py/gain/misc.pyx":92 * * """ * if not should_distribute(shape): # <<<<<<<<<<<<<< * return np.ones(shape, dtype, order) * a = ndarray(shape, dtype) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__should_distribute); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = ((!__pyx_t_4) != 0); if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":93 * """ * if not should_distribute(shape): * return np.ones(shape, dtype, order) # <<<<<<<<<<<<<< * a = ndarray(shape, dtype) * buf = a.access() */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__ones); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __Pyx_INCREF(__pyx_v_order); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_order); __Pyx_GIVEREF(__pyx_v_order); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/misc.pyx":94 * if not should_distribute(shape): * return np.ones(shape, dtype, order) * a = ndarray(shape, dtype) # <<<<<<<<<<<<<< * buf = a.access() * if buf is not None: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_a = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":95 * return np.ones(shape, dtype, order) * a = ndarray(shape, dtype) * buf = a.access() # <<<<<<<<<<<<<< * if buf is not None: * buf[:] = 1 */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__access); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_buf = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/misc.pyx":96 * a = ndarray(shape, dtype) * buf = a.access() * if buf is not None: # <<<<<<<<<<<<<< * buf[:] = 1 * a.release_update() */ __pyx_t_5 = (__pyx_v_buf != Py_None); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":97 * buf = a.access() * if buf is not None: * buf[:] = 1 # <<<<<<<<<<<<<< * a.release_update() * return a */ if (__Pyx_PyObject_SetSlice(__pyx_v_buf, __pyx_int_1, 0, 0, NULL, NULL, &__pyx_k_slice_3, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":98 * if buf is not None: * buf[:] = 1 * a.release_update() # <<<<<<<<<<<<<< * return a * */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__release_update); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/misc.pyx":99 * buf[:] = 1 * a.release_update() * return a # <<<<<<<<<<<<<< * * def ones_like(x): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_a); __pyx_r = __pyx_v_a; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.misc.ones", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_buf); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_5ones_like(PyObject *__pyx_self, PyObject *__pyx_v_x); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_4ones_like[] = "ones_like(x[, out])\n\n Returns an array of ones with the same shape and type as a given array.\n\n Equivalent to ``a.copy().fill(1)``.\n\n Please refer to the documentation for `zeros_like`.\n\n See Also\n --------\n zeros_like\n\n Examples\n --------\n >>> a = np.array([[1, 2, 3], [4, 5, 6]])\n >>> np.ones_like(a)\n array([[1, 1, 1],\n [1, 1, 1]])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_5ones_like = {__Pyx_NAMESTR("ones_like"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_5ones_like, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_4ones_like)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_5ones_like(PyObject *__pyx_self, PyObject *__pyx_v_x) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("ones_like (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4misc_4ones_like(__pyx_self, ((PyObject *)__pyx_v_x)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/misc.pyx":101 * return a * * def ones_like(x): # <<<<<<<<<<<<<< * """ones_like(x[, out]) * */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_4ones_like(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("ones_like", 0); __Pyx_TraceCall("ones_like", __pyx_f[0], 101); /* "ga4py/gain/misc.pyx":122 * * """ * return ones(x.shape, dtype=x.dtype) # <<<<<<<<<<<<<< * * def empty(shape, dtype=float, order='C'): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ones); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("ga4py.gain.misc.ones_like", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_7empty(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_6empty[] = "empty(shape, dtype=float, order='C')\n\n Return a new array of given shape and type, without initializing entries.\n\n Parameters\n ----------\n shape : int or tuple of int\n Shape of the empty array\n dtype : data-type, optional\n Desired output data-type.\n order : {'C', 'F'}, optional\n Whether to store multi-dimensional data in C (row-major) or\n Fortran (column-major) order in memory.\n\n See Also\n --------\n empty_like, zeros, ones\n\n Notes\n -----\n `empty`, unlike `zeros`, does not set the array values to zero,\n and may therefore be marginally faster. On the other hand, it requires\n the user to manually set all the values in the array, and should be\n used with caution.\n\n Examples\n --------\n >>> np.empty([2, 2])\n array([[ -9.74499359e+001, 6.69583040e-309], #random data\n [ 2.13182611e-314, 3.06959433e-309]])\n\n >>> np.empty([2, 2], dtype=int)\n array([[-1073741821, -1067949133], #random data\n [ 496041986, 19249760]])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_7empty = {__Pyx_NAMESTR("empty"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_7empty, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_6empty)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_7empty(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_shape = 0; PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("empty (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__shape,&__pyx_n_s__dtype,&__pyx_n_s__order,0}; PyObject* values[3] = {0,0,0}; values[1] = __pyx_k_4; values[2] = ((PyObject *)__pyx_n_s__C); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__shape)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "empty") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_shape = values[0]; __pyx_v_dtype = values[1]; __pyx_v_order = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("empty", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.misc.empty", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4misc_6empty(__pyx_self, __pyx_v_shape, __pyx_v_dtype, __pyx_v_order); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/misc.pyx":124 * return ones(x.shape, dtype=x.dtype) * * def empty(shape, dtype=float, order='C'): # <<<<<<<<<<<<<< * """empty(shape, dtype=float, order='C') * */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_6empty(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_shape, PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_order) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("empty", 0); __Pyx_TraceCall("empty", __pyx_f[0], 124); /* "ga4py/gain/misc.pyx":161 * * """ * return ndarray(shape, dtype) # <<<<<<<<<<<<<< * * def empty_like(a, dtype=None, order='K', subok=True): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.misc.empty", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_9empty_like(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_8empty_like[] = " Return a new array with the same shape and type as a given array.\n\n Parameters\n ----------\n a : array_like\n The shape and data-type of `a` define the parameters of the\n returned array.\n\n Returns\n -------\n out : ndarray\n Array of random data with the same shape and type as `a`.\n\n See Also\n --------\n ones_like : Return an array of ones with shape and type of input.\n zeros_like : Return an array of zeros with shape and type of input.\n empty : Return a new uninitialized array.\n ones : Return a new array setting values to one.\n zeros : Return a new array setting values to zero.\n\n Notes\n -----\n This function does *not* initialize the returned array; to do that use\n `zeros_like` or `ones_like` instead. It may be marginally faster than the\n functions that do set the array values.\n\n Examples\n --------\n >>> a = ([1,2,3], [4,5,6]) # a is array-like\n >>> np.empty_like(a)\n array([[-1073741821, -1073741821, 3], #random\n [ 0, 0, -1073741821]])\n >>> a = np.array([[1., 2., 3.],[4.,5.,6.]])\n >>> np.empty_like(a)\n array([[ -2.00000715e+000, 1.48219694e-323, -2.00000572e+000], #random\n [ 4.38791518e-305, -2.00000715e+000, 4.17269252e-309]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_9empty_like = {__Pyx_NAMESTR("empty_like"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_9empty_like, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_8empty_like)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_9empty_like(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_a = 0; PyObject *__pyx_v_dtype = 0; CYTHON_UNUSED PyObject *__pyx_v_order = 0; CYTHON_UNUSED PyObject *__pyx_v_subok = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("empty_like (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__dtype,&__pyx_n_s__order,&__pyx_n_s__subok,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/misc.pyx":163 * return ndarray(shape, dtype) * * def empty_like(a, dtype=None, order='K', subok=True): # <<<<<<<<<<<<<< * """ Return a new array with the same shape and type as a given array. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)__pyx_n_s__K); values[3] = __pyx_k_5; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__order); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__subok); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "empty_like") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_dtype = values[1]; __pyx_v_order = values[2]; __pyx_v_subok = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("empty_like", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.misc.empty_like", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4misc_8empty_like(__pyx_self, __pyx_v_a, __pyx_v_dtype, __pyx_v_order, __pyx_v_subok); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4misc_8empty_like(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_dtype, CYTHON_UNUSED PyObject *__pyx_v_order, CYTHON_UNUSED PyObject *__pyx_v_subok) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("empty_like", 0); __Pyx_TraceCall("empty_like", __pyx_f[0], 163); /* "ga4py/gain/misc.pyx":203 * * """ * return empty(a.shape, dtype or a.dtype) # <<<<<<<<<<<<<< * * def eye(N, M=None, k=0, dtype=float): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_dtype); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!__pyx_t_3) { __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __pyx_t_4; __pyx_t_4 = 0; } else { __Pyx_INCREF(__pyx_v_dtype); __pyx_t_5 = __pyx_v_dtype; } __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_2 = 0; __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("ga4py.gain.misc.empty_like", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_11eye(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_10eye[] = "Return a 2-D array with ones on the diagonal and zeros elsewhere.\n\n Parameters\n ----------\n N : int\n Number of rows in the output.\n M : int, optional\n Number of columns in the output. If None, defaults to `N`.\n k : int, optional\n Index of the diagonal: 0 refers to the main diagonal, a positive value\n refers to an upper diagonal, and a negative value to a lower diagonal.\n dtype : dtype, optional\n Data-type of the returned array.\n\n Returns\n -------\n I : ndarray (N,M)\n An array where all elements are equal to zero, except for the `k`-th\n diagonal, whose values are equal to one.\n\n See Also\n --------\n diag : Return a diagonal 2-D array using a 1-D array specified by the user.\n\n Examples\n --------\n >>> np.eye(2, dtype=int)\n array([[1, 0],\n [0, 1]])\n >>> np.eye(3, k=1)\n array([[ 0., 1., 0.],\n [ 0., 0., 1.],\n [ 0., 0., 0.]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_11eye = {__Pyx_NAMESTR("eye"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_11eye, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_10eye)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_11eye(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_N = 0; PyObject *__pyx_v_M = 0; PyObject *__pyx_v_k = 0; PyObject *__pyx_v_dtype = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("eye (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__N,&__pyx_n_s__M,&__pyx_n_s__k,&__pyx_n_s__dtype,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/misc.pyx":205 * return empty(a.shape, dtype or a.dtype) * * def eye(N, M=None, k=0, dtype=float): # <<<<<<<<<<<<<< * """Return a 2-D array with ones on the diagonal and zeros elsewhere. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)__pyx_int_0); values[3] = __pyx_k_6; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__N)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__M); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__k); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "eye") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_N = values[0]; __pyx_v_M = values[1]; __pyx_v_k = values[2]; __pyx_v_dtype = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("eye", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.misc.eye", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4misc_10eye(__pyx_self, __pyx_v_N, __pyx_v_M, __pyx_v_k, __pyx_v_dtype); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4misc_10eye(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_N, PyObject *__pyx_v_M, PyObject *__pyx_v_k, PyObject *__pyx_v_dtype) { PyObject *__pyx_v_a = NULL; PyObject *__pyx_v_nda = NULL; PyObject *__pyx_v_lo = NULL; CYTHON_UNUSED PyObject *__pyx_v_hi = NULL; PyObject *__pyx_v_indices = NULL; PyObject *__pyx_v_bindex = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *(*__pyx_t_7)(PyObject *); Py_ssize_t __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("eye", 0); __Pyx_TraceCall("eye", __pyx_f[0], 205); __Pyx_INCREF(__pyx_v_M); /* "ga4py/gain/misc.pyx":241 * * """ * if M is None: # <<<<<<<<<<<<<< * M = N * if not should_distribute((N,M)): */ __pyx_t_1 = (__pyx_v_M == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/gain/misc.pyx":242 * """ * if M is None: * M = N # <<<<<<<<<<<<<< * if not should_distribute((N,M)): * return np.eye(N,M,k,dtype) */ __Pyx_INCREF(__pyx_v_N); __Pyx_DECREF_SET(__pyx_v_M, __pyx_v_N); goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/misc.pyx":243 * if M is None: * M = N * if not should_distribute((N,M)): # <<<<<<<<<<<<<< * return np.eye(N,M,k,dtype) * a = zeros((N,M), dtype=dtype) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__should_distribute); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_N); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_N); __Pyx_GIVEREF(__pyx_v_N); __Pyx_INCREF(__pyx_v_M); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_M); __Pyx_GIVEREF(__pyx_v_M); __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_4)); __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_1 = ((!__pyx_t_2) != 0); if (__pyx_t_1) { /* "ga4py/gain/misc.pyx":244 * M = N * if not should_distribute((N,M)): * return np.eye(N,M,k,dtype) # <<<<<<<<<<<<<< * a = zeros((N,M), dtype=dtype) * nda = a.access() */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__eye); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_N); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_N); __Pyx_GIVEREF(__pyx_v_N); __Pyx_INCREF(__pyx_v_M); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_M); __Pyx_GIVEREF(__pyx_v_M); __Pyx_INCREF(__pyx_v_k); PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_k); __Pyx_GIVEREF(__pyx_v_k); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_3 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/misc.pyx":245 * if not should_distribute((N,M)): * return np.eye(N,M,k,dtype) * a = zeros((N,M), dtype=dtype) # <<<<<<<<<<<<<< * nda = a.access() * if nda is not None: */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_N); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_N); __Pyx_GIVEREF(__pyx_v_N); __Pyx_INCREF(__pyx_v_M); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_M); __Pyx_GIVEREF(__pyx_v_M); __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_4)); __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_v_dtype) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_5), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_v_a = __pyx_t_6; __pyx_t_6 = 0; /* "ga4py/gain/misc.pyx":246 * return np.eye(N,M,k,dtype) * a = zeros((N,M), dtype=dtype) * nda = a.access() # <<<<<<<<<<<<<< * if nda is not None: * lo,hi = a.distribution() */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__access); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_nda = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/misc.pyx":247 * a = zeros((N,M), dtype=dtype) * nda = a.access() * if nda is not None: # <<<<<<<<<<<<<< * lo,hi = a.distribution() * indices = np.indices(nda.shape) */ __pyx_t_1 = (__pyx_v_nda != Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/gain/misc.pyx":248 * nda = a.access() * if nda is not None: * lo,hi = a.distribution() # <<<<<<<<<<<<<< * indices = np.indices(nda.shape) * indices[0] += lo[0] */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__distribution); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { PyObject* sequence = __pyx_t_6; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_5 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else { Py_ssize_t index = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_3); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_3); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_5); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_3), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L7_unpacking_done:; } __pyx_v_lo = __pyx_t_4; __pyx_t_4 = 0; __pyx_v_hi = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/gain/misc.pyx":249 * if nda is not None: * lo,hi = a.distribution() * indices = np.indices(nda.shape) # <<<<<<<<<<<<<< * indices[0] += lo[0] * indices[1] += lo[1]-k */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__indices); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_nda, __pyx_n_s__shape); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_v_indices = __pyx_t_6; __pyx_t_6 = 0; /* "ga4py/gain/misc.pyx":250 * lo,hi = a.distribution() * indices = np.indices(nda.shape) * indices[0] += lo[0] # <<<<<<<<<<<<<< * indices[1] += lo[1]-k * bindex = (indices[0] == indices[1]) */ __pyx_t_8 = 0; __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_indices, __pyx_t_8, sizeof(Py_ssize_t), PyInt_FromSsize_t, 0, 1, 1); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_lo, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__Pyx_SetItemInt(__pyx_v_indices, __pyx_t_8, __pyx_t_5, sizeof(Py_ssize_t), PyInt_FromSsize_t, 0, 1, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "ga4py/gain/misc.pyx":251 * indices = np.indices(nda.shape) * indices[0] += lo[0] * indices[1] += lo[1]-k # <<<<<<<<<<<<<< * bindex = (indices[0] == indices[1]) * nda[bindex] = 1 */ __pyx_t_8 = 1; __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_indices, __pyx_t_8, sizeof(Py_ssize_t), PyInt_FromSsize_t, 0, 1, 1); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_lo, 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = PyNumber_Subtract(__pyx_t_4, __pyx_v_k); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__Pyx_SetItemInt(__pyx_v_indices, __pyx_t_8, __pyx_t_4, sizeof(Py_ssize_t), PyInt_FromSsize_t, 0, 1, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/misc.pyx":252 * indices[0] += lo[0] * indices[1] += lo[1]-k * bindex = (indices[0] == indices[1]) # <<<<<<<<<<<<<< * nda[bindex] = 1 * a.release_update() */ __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_indices, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_indices, 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_bindex = __pyx_t_5; __pyx_t_5 = 0; /* "ga4py/gain/misc.pyx":253 * indices[1] += lo[1]-k * bindex = (indices[0] == indices[1]) * nda[bindex] = 1 # <<<<<<<<<<<<<< * a.release_update() * return a */ if (PyObject_SetItem(__pyx_v_nda, __pyx_v_bindex, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":254 * bindex = (indices[0] == indices[1]) * nda[bindex] = 1 * a.release_update() # <<<<<<<<<<<<<< * return a * */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__release_update); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L5; } __pyx_L5:; /* "ga4py/gain/misc.pyx":255 * nda[bindex] = 1 * a.release_update() * return a # <<<<<<<<<<<<<< * * def identity(n, dtype=None): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_a); __pyx_r = __pyx_v_a; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.misc.eye", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_nda); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XDECREF(__pyx_v_indices); __Pyx_XDECREF(__pyx_v_bindex); __Pyx_XDECREF(__pyx_v_M); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_13identity(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_12identity[] = "Return the identity array.\n\n The identity array is a square array with ones on\n the main diagonal.\n\n Parameters\n ----------\n n : int\n Number of rows (and columns) in `n` x `n` output.\n dtype : data-type, optional\n Data-type of the output. Defaults to ``float``.\n\n Returns\n -------\n out : ndarray\n `n` x `n` array with its main diagonal set to one,\n and all other elements 0.\n\n Examples\n --------\n >>> np.identity(3)\n array([[ 1., 0., 0.],\n [ 0., 1., 0.],\n [ 0., 0., 1.]])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_13identity = {__Pyx_NAMESTR("identity"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_13identity, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_12identity)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_13identity(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_n = 0; PyObject *__pyx_v_dtype = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("identity (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__n,&__pyx_n_s__dtype,0}; PyObject* values[2] = {0,0}; /* "ga4py/gain/misc.pyx":257 * return a * * def identity(n, dtype=None): # <<<<<<<<<<<<<< * """Return the identity array. * */ values[1] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__n)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "identity") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_n = values[0]; __pyx_v_dtype = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("identity", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.misc.identity", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4misc_12identity(__pyx_self, __pyx_v_n, __pyx_v_dtype); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4misc_12identity(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_n, PyObject *__pyx_v_dtype) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("identity", 0); __Pyx_TraceCall("identity", __pyx_f[0], 257); __Pyx_INCREF(__pyx_v_dtype); /* "ga4py/gain/misc.pyx":284 * * """ * if dtype is None: # <<<<<<<<<<<<<< * dtype = np.dtype(float) * return eye(n,n,dtype=dtype) */ __pyx_t_1 = (__pyx_v_dtype == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "ga4py/gain/misc.pyx":285 * """ * if dtype is None: * dtype = np.dtype(float) # <<<<<<<<<<<<<< * return eye(n,n,dtype=dtype) * */ __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)((PyObject*)(&PyFloat_Type)))); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)((PyObject*)(&PyFloat_Type)))); __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyFloat_Type)))); __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_dtype, __pyx_t_4); __pyx_t_4 = 0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/misc.pyx":286 * if dtype is None: * dtype = np.dtype(float) * return eye(n,n,dtype=dtype) # <<<<<<<<<<<<<< * * def fromfunction(func, shape, **kwargs): */ __Pyx_XDECREF(__pyx_r); __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__eye); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_n); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_n); __Pyx_GIVEREF(__pyx_v_n); __Pyx_INCREF(__pyx_v_n); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_n); __Pyx_GIVEREF(__pyx_v_n); __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_v_dtype) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.misc.identity", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_dtype); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_15fromfunction(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_14fromfunction[] = "Construct an array by executing a function over each coordinate.\n\n The resulting array therefore has a value ``fn(x, y, z)`` at\n coordinate ``(x, y, z)``.\n\n Parameters\n ----------\n function : callable\n The function is called with N parameters, each of which\n represents the coordinates of the array varying along a\n specific axis. For example, if `shape` were ``(2, 2)``, then\n the parameters would be two arrays, ``[[0, 0], [1, 1]]`` and\n ``[[0, 1], [0, 1]]``. `function` must be capable of operating on\n arrays, and should return a scalar value.\n shape : (N,) tuple of ints\n Shape of the output array, which also determines the shape of\n the coordinate arrays passed to `function`.\n dtype : data-type, optional\n Data-type of the coordinate arrays passed to `function`.\n By default, `dtype` is float.\n\n Returns\n -------\n out : any\n The result of the call to `function` is passed back directly.\n Therefore the type and shape of `out` is completely determined by\n `function`.\n\n See Also\n --------\n indices, meshgrid\n\n Notes\n -----\n Keywords other than `shape` and `dtype` are passed to `function`.\n\n Examples\n --------\n >>> np.fromfunction(lambda i, j: i == j, (3, 3), dtype=int)\n array([[ True, False, False],\n [False, True, False],\n [False, False, True]], dtype=bool)\n\n >>> np.fromfunction(lambda i, j: i + j, (3, 3), dtype=int)\n array([[0, 1, 2],\n [1, 2, 3],\n [2, 3, 4]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_15fromfunction = {__Pyx_NAMESTR("fromfunction"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_15fromfunction, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_14fromfunction)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_15fromfunction(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_func = 0; PyObject *__pyx_v_shape = 0; PyObject *__pyx_v_kwargs = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("fromfunction (wrapper)", 0); __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; __Pyx_GOTREF(__pyx_v_kwargs); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__func,&__pyx_n_s__shape,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__func)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__shape)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("fromfunction", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "fromfunction") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_func = values[0]; __pyx_v_shape = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("fromfunction", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; __Pyx_AddTraceback("ga4py.gain.misc.fromfunction", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4misc_14fromfunction(__pyx_self, __pyx_v_func, __pyx_v_shape, __pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/misc.pyx":288 * return eye(n,n,dtype=dtype) * * def fromfunction(func, shape, **kwargs): # <<<<<<<<<<<<<< * """Construct an array by executing a function over each coordinate. * */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_14fromfunction(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_shape, PyObject *__pyx_v_kwargs) { PyObject *__pyx_v_dtype = NULL; PyObject *__pyx_v_a = NULL; PyObject *__pyx_v_local_array = NULL; PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_v_local_shape = NULL; PyObject *__pyx_v_args = NULL; PyObject *__pyx_v_index = NULL; PyObject *__pyx_v_buf = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *(*__pyx_t_7)(PyObject *); Py_ssize_t __pyx_t_8; PyObject *(*__pyx_t_9)(PyObject *); PyObject *__pyx_t_10 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("fromfunction", 0); __Pyx_TraceCall("fromfunction", __pyx_f[0], 288); /* "ga4py/gain/misc.pyx":338 * * """ * if not should_distribute(shape): # <<<<<<<<<<<<<< * return np.fromfunction(func, shape, **kwargs) * dtype = kwargs.pop('dtype', np.float32) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__should_distribute); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = ((!__pyx_t_4) != 0); if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":339 * """ * if not should_distribute(shape): * return np.fromfunction(func, shape, **kwargs) # <<<<<<<<<<<<<< * dtype = kwargs.pop('dtype', np.float32) * # create the new GA (collective operation) */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__fromfunction); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_func); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_func); __Pyx_GIVEREF(__pyx_v_func); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __pyx_t_1 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/misc.pyx":340 * if not should_distribute(shape): * return np.fromfunction(func, shape, **kwargs) * dtype = kwargs.pop('dtype', np.float32) # <<<<<<<<<<<<<< * # create the new GA (collective operation) * a = ndarray(shape, dtype) */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_kwargs), __pyx_n_s__pop); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__float32); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_n_s__dtype)); PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__dtype)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__dtype)); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_v_dtype = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/misc.pyx":342 * dtype = kwargs.pop('dtype', np.float32) * # create the new GA (collective operation) * a = ndarray(shape, dtype) # <<<<<<<<<<<<<< * # determine which part of 'a' we maintain * local_array = ga.access(a.handle) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_v_a = __pyx_t_6; __pyx_t_6 = 0; /* "ga4py/gain/misc.pyx":344 * a = ndarray(shape, dtype) * # determine which part of 'a' we maintain * local_array = ga.access(a.handle) # <<<<<<<<<<<<<< * if local_array is not None: * lo,hi = a.distribution() */ __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s__access); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__handle); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_local_array = __pyx_t_6; __pyx_t_6 = 0; /* "ga4py/gain/misc.pyx":345 * # determine which part of 'a' we maintain * local_array = ga.access(a.handle) * if local_array is not None: # <<<<<<<<<<<<<< * lo,hi = a.distribution() * local_shape = hi-lo */ __pyx_t_5 = (__pyx_v_local_array != Py_None); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":346 * local_array = ga.access(a.handle) * if local_array is not None: * lo,hi = a.distribution() # <<<<<<<<<<<<<< * local_shape = hi-lo * # create a numpy indices array */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__distribution); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_6 = PyList_GET_ITEM(sequence, 0); __pyx_t_1 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx_t_1); #else __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; index = 0; __pyx_t_6 = __pyx_t_7(__pyx_t_2); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); index = 1; __pyx_t_1 = __pyx_t_7(__pyx_t_2); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_2), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L6_unpacking_done:; } __pyx_v_lo = __pyx_t_6; __pyx_t_6 = 0; __pyx_v_hi = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":347 * if local_array is not None: * lo,hi = a.distribution() * local_shape = hi-lo # <<<<<<<<<<<<<< * # create a numpy indices array * args = np.indices(local_shape, dtype=dtype) */ __pyx_t_3 = PyNumber_Subtract(__pyx_v_hi, __pyx_v_lo); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_v_local_shape = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/misc.pyx":349 * local_shape = hi-lo * # create a numpy indices array * args = np.indices(local_shape, dtype=dtype) # <<<<<<<<<<<<<< * # modify the indices arrays based on our distribution * for index in xrange(len(lo)): */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__indices); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_local_shape); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_local_shape); __Pyx_GIVEREF(__pyx_v_local_shape); __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_6)); if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_v_dtype) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __pyx_v_args = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":351 * args = np.indices(local_shape, dtype=dtype) * # modify the indices arrays based on our distribution * for index in xrange(len(lo)): # <<<<<<<<<<<<<< * args[index] += lo[index] * # call the passed function */ __pyx_t_8 = PyObject_Length(__pyx_v_lo); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_xrange, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_6 = __pyx_t_2; __Pyx_INCREF(__pyx_t_6); __pyx_t_8 = 0; __pyx_t_9 = NULL; } else { __pyx_t_8 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __pyx_t_9 = Py_TYPE(__pyx_t_6)->tp_iternext; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_6)) { if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_6)) { if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_2 = __pyx_t_9(__pyx_t_6); if (unlikely(!__pyx_t_2)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_2); } __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":352 * # modify the indices arrays based on our distribution * for index in xrange(len(lo)): * args[index] += lo[index] # <<<<<<<<<<<<<< * # call the passed function * buf = func(*args, **kwargs) */ __Pyx_INCREF(__pyx_v_index); __pyx_t_2 = __pyx_v_index; __pyx_t_3 = PyObject_GetItem(__pyx_v_args, __pyx_t_2); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyObject_GetItem(__pyx_v_lo, __pyx_v_index); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_10 = PyNumber_InPlaceAdd(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (PyObject_SetItem(__pyx_v_args, __pyx_t_2, __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* "ga4py/gain/misc.pyx":354 * args[index] += lo[index] * # call the passed function * buf = func(*args, **kwargs) # <<<<<<<<<<<<<< * # now put the data into the global array * local_array[:] = buf */ __pyx_t_6 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_6)); __pyx_t_2 = ((PyObject *)__pyx_v_kwargs); __Pyx_INCREF(__pyx_t_2); __pyx_t_10 = PyObject_Call(__pyx_v_func, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_buf = __pyx_t_10; __pyx_t_10 = 0; /* "ga4py/gain/misc.pyx":356 * buf = func(*args, **kwargs) * # now put the data into the global array * local_array[:] = buf # <<<<<<<<<<<<<< * #sync() * return a */ if (__Pyx_PyObject_SetSlice(__pyx_v_local_array, __pyx_v_buf, 0, 0, NULL, NULL, &__pyx_k_slice_7, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/misc.pyx":358 * local_array[:] = buf * #sync() * return a # <<<<<<<<<<<<<< * * def arange(start, stop=None, step=None, dtype=None, shape=None): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_a); __pyx_r = __pyx_v_a; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("ga4py.gain.misc.fromfunction", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_dtype); __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_local_array); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XDECREF(__pyx_v_local_shape); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_index); __Pyx_XDECREF(__pyx_v_buf); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_17arange(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_16arange[] = "Return evenly spaced values within a given interval.\n\n Values are generated within the half-open interval ``[start, stop)``\n (in other words, the interval including `start` but excluding `stop`).\n For integer arguments the function is equivalent to the Python built-in\n `range `_ function,\n but returns a ndarray rather than a list.\n\n Parameters\n ----------\n start : number, optional\n Start of interval. The interval includes this value. The default\n start value is 0.\n stop : number\n End of interval. The interval does not include this value.\n step : number, optional\n Spacing between values. For any output `out`, this is the distance\n between two adjacent values, ``out[i+1] - out[i]``. The default\n step size is 1. If `step` is specified, `start` must also be given.\n dtype : dtype\n The type of the output array. If `dtype` is not given, infer the data\n type from the other input arguments.\n\n Hack Parameters\n ---------------\n shape : tuple of ints\n Useful shortcut when doing something like np.arange(...).reshape(...)\n\n Returns\n -------\n out : ndarray\n Array of evenly spaced values.\n\n For floating point arguments, the length of the result is\n ``ceil((stop - start)/step)``. Because of floating point overflow,\n this rule may result in the last element of `out` being greater\n than `stop`.\n\n See Also\n --------\n linspace : Evenly spaced numbers with careful handling of endpoints.\n ogrid: Arrays of evenly spaced numbers in N-dimensions\n mgrid: Grid-shaped arrays of evenly spaced numbers in N-dimensions\n\n Examples\n --------\n >>> np.arange(3)\n array([0, 1, 2])\n >>> np.arange(3.0)\n array([ 0., 1., 2.])\n >>> np.arange(3,7)\n array([3, 4, 5, 6])\n >>> np.arange(3,7,2)\n array([3, 5])\n ""\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_17arange = {__Pyx_NAMESTR("arange"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_17arange, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_16arange)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_17arange(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_start = 0; PyObject *__pyx_v_stop = 0; PyObject *__pyx_v_step = 0; PyObject *__pyx_v_dtype = 0; PyObject *__pyx_v_shape = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("arange (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__start,&__pyx_n_s__stop,&__pyx_n_s__step,&__pyx_n_s__dtype,&__pyx_n_s__shape,0}; PyObject* values[5] = {0,0,0,0,0}; /* "ga4py/gain/misc.pyx":360 * return a * * def arange(start, stop=None, step=None, dtype=None, shape=None): # <<<<<<<<<<<<<< * """Return evenly spaced values within a given interval. * */ values[1] = ((PyObject *)Py_None); values[2] = ((PyObject *)Py_None); values[3] = ((PyObject *)Py_None); values[4] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__start)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__stop); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__step); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__shape); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "arange") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_start = values[0]; __pyx_v_stop = values[1]; __pyx_v_step = values[2]; __pyx_v_dtype = values[3]; __pyx_v_shape = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("arange", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.misc.arange", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4misc_16arange(__pyx_self, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_dtype, __pyx_v_shape); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4misc_16arange(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_start, PyObject *__pyx_v_stop, PyObject *__pyx_v_step, PyObject *__pyx_v_dtype, PyObject *__pyx_v_shape) { PyObject *__pyx_v_length = NULL; PyObject *__pyx_v_a = NULL; PyObject *__pyx_v_a_local = NULL; PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_v_lshape = NULL; PyObject *__pyx_v_v = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; int __pyx_t_6; PyObject *__pyx_t_7 = NULL; int __pyx_t_8; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyObject *(*__pyx_t_11)(PyObject *); Py_ssize_t __pyx_t_12; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("arange", 0); __Pyx_TraceCall("arange", __pyx_f[0], 360); __Pyx_INCREF(__pyx_v_start); __Pyx_INCREF(__pyx_v_stop); __Pyx_INCREF(__pyx_v_step); __Pyx_INCREF(__pyx_v_dtype); __Pyx_INCREF(__pyx_v_shape); /* "ga4py/gain/misc.pyx":417 * * """ * if step == 0: # <<<<<<<<<<<<<< * raise ValueError, "step size of 0 not allowed" * if not step: */ __pyx_t_1 = PyObject_RichCompare(__pyx_v_step, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* "ga4py/gain/misc.pyx":418 * """ * if step == 0: * raise ValueError, "step size of 0 not allowed" # <<<<<<<<<<<<<< * if not step: * step = 1 */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_8), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/misc.pyx":419 * if step == 0: * raise ValueError, "step size of 0 not allowed" * if not step: # <<<<<<<<<<<<<< * step = 1 * if not stop: */ __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_step); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = ((!__pyx_t_2) != 0); if (__pyx_t_3) { /* "ga4py/gain/misc.pyx":420 * raise ValueError, "step size of 0 not allowed" * if not step: * step = 1 # <<<<<<<<<<<<<< * if not stop: * start,stop = 0,start */ __Pyx_INCREF(__pyx_int_1); __Pyx_DECREF_SET(__pyx_v_step, __pyx_int_1); goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/misc.pyx":421 * if not step: * step = 1 * if not stop: # <<<<<<<<<<<<<< * start,stop = 0,start * length = 0 */ __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_stop); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = ((!__pyx_t_3) != 0); if (__pyx_t_2) { /* "ga4py/gain/misc.pyx":422 * step = 1 * if not stop: * start,stop = 0,start # <<<<<<<<<<<<<< * length = 0 * if ((step < 0 and stop >= start) or (step > 0 and start >= stop)): */ __pyx_t_1 = __pyx_int_0; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = __pyx_v_start; __Pyx_INCREF(__pyx_t_4); __Pyx_DECREF_SET(__pyx_v_start, __pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_stop, __pyx_t_4); __pyx_t_4 = 0; goto __pyx_L5; } __pyx_L5:; /* "ga4py/gain/misc.pyx":423 * if not stop: * start,stop = 0,start * length = 0 # <<<<<<<<<<<<<< * if ((step < 0 and stop >= start) or (step > 0 and start >= stop)): * length = 0 */ __Pyx_INCREF(__pyx_int_0); __pyx_v_length = __pyx_int_0; /* "ga4py/gain/misc.pyx":424 * start,stop = 0,start * length = 0 * if ((step < 0 and stop >= start) or (step > 0 and start >= stop)): # <<<<<<<<<<<<<< * length = 0 * else: */ __pyx_t_4 = PyObject_RichCompare(__pyx_v_step, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_2) { __pyx_t_4 = PyObject_RichCompare(__pyx_v_stop, __pyx_v_start, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = __pyx_t_3; } else { __pyx_t_5 = __pyx_t_2; } if (!__pyx_t_5) { __pyx_t_4 = PyObject_RichCompare(__pyx_v_step, __pyx_int_0, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_2) { __pyx_t_4 = PyObject_RichCompare(__pyx_v_start, __pyx_v_stop, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = __pyx_t_3; } else { __pyx_t_6 = __pyx_t_2; } __pyx_t_2 = __pyx_t_6; } else { __pyx_t_2 = __pyx_t_5; } if (__pyx_t_2) { /* "ga4py/gain/misc.pyx":425 * length = 0 * if ((step < 0 and stop >= start) or (step > 0 and start >= stop)): * length = 0 # <<<<<<<<<<<<<< * else: * # true division, otherwise off by one */ __Pyx_INCREF(__pyx_int_0); __Pyx_DECREF_SET(__pyx_v_length, __pyx_int_0); goto __pyx_L6; } /*else*/ { /* "ga4py/gain/misc.pyx":428 * else: * # true division, otherwise off by one * length = int(math.ceil((stop-start)/step)) # <<<<<<<<<<<<<< * # bail if threshold not met * if not should_distribute(length): */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__math); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__ceil); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyNumber_Subtract(__pyx_v_stop, __pyx_v_start); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_v_step); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)(&PyInt_Type))), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_length, __pyx_t_7); __pyx_t_7 = 0; } __pyx_L6:; /* "ga4py/gain/misc.pyx":430 * length = int(math.ceil((stop-start)/step)) * # bail if threshold not met * if not should_distribute(length): # <<<<<<<<<<<<<< * return np.arange(start,stop,step,dtype) * if dtype is None: */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__should_distribute); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_length); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_length); __Pyx_GIVEREF(__pyx_v_length); __pyx_t_1 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = ((!__pyx_t_2) != 0); if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":431 * # bail if threshold not met * if not should_distribute(length): * return np.arange(start,stop,step,dtype) # <<<<<<<<<<<<<< * if dtype is None: * if (isinstance(start, (int,long)) */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__arange); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_start); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_start); __Pyx_GIVEREF(__pyx_v_start); __Pyx_INCREF(__pyx_v_stop); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_stop); __Pyx_GIVEREF(__pyx_v_stop); __Pyx_INCREF(__pyx_v_step); PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_step); __Pyx_GIVEREF(__pyx_v_step); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_7 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = __pyx_t_7; __pyx_t_7 = 0; goto __pyx_L0; goto __pyx_L7; } __pyx_L7:; /* "ga4py/gain/misc.pyx":432 * if not should_distribute(length): * return np.arange(start,stop,step,dtype) * if dtype is None: # <<<<<<<<<<<<<< * if (isinstance(start, (int,long)) * and isinstance(stop, (int,long)) */ __pyx_t_5 = (__pyx_v_dtype == Py_None); __pyx_t_2 = (__pyx_t_5 != 0); if (__pyx_t_2) { /* "ga4py/gain/misc.pyx":433 * return np.arange(start,stop,step,dtype) * if dtype is None: * if (isinstance(start, (int,long)) # <<<<<<<<<<<<<< * and isinstance(stop, (int,long)) * and isinstance(step, (int,long))): */ __Pyx_INCREF(__pyx_v_start); __pyx_t_7 = __pyx_v_start; __pyx_t_2 = PyInt_Check(__pyx_t_7); if (!__pyx_t_2) { __pyx_t_5 = PyLong_Check(__pyx_t_7); __pyx_t_6 = __pyx_t_5; } else { __pyx_t_6 = __pyx_t_2; } __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if ((__pyx_t_6 != 0)) { /* "ga4py/gain/misc.pyx":434 * if dtype is None: * if (isinstance(start, (int,long)) * and isinstance(stop, (int,long)) # <<<<<<<<<<<<<< * and isinstance(step, (int,long))): * dtype = np.int64 */ __Pyx_INCREF(__pyx_v_stop); __pyx_t_7 = __pyx_v_stop; __pyx_t_2 = PyInt_Check(__pyx_t_7); if (!__pyx_t_2) { __pyx_t_5 = PyLong_Check(__pyx_t_7); __pyx_t_3 = __pyx_t_5; } else { __pyx_t_3 = __pyx_t_2; } __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if ((__pyx_t_3 != 0)) { /* "ga4py/gain/misc.pyx":435 * if (isinstance(start, (int,long)) * and isinstance(stop, (int,long)) * and isinstance(step, (int,long))): # <<<<<<<<<<<<<< * dtype = np.int64 * else: */ __Pyx_INCREF(__pyx_v_step); __pyx_t_7 = __pyx_v_step; __pyx_t_2 = PyInt_Check(__pyx_t_7); if (!__pyx_t_2) { __pyx_t_5 = PyLong_Check(__pyx_t_7); __pyx_t_8 = __pyx_t_5; } else { __pyx_t_8 = __pyx_t_2; } __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_2 = (__pyx_t_8 != 0); } else { __pyx_t_2 = (__pyx_t_3 != 0); } __pyx_t_3 = __pyx_t_2; } else { __pyx_t_3 = (__pyx_t_6 != 0); } if (__pyx_t_3) { /* "ga4py/gain/misc.pyx":436 * and isinstance(stop, (int,long)) * and isinstance(step, (int,long))): * dtype = np.int64 # <<<<<<<<<<<<<< * else: * dtype = np.float64 */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__int64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF_SET(__pyx_v_dtype, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L9; } /*else*/ { /* "ga4py/gain/misc.pyx":438 * dtype = np.int64 * else: * dtype = np.float64 # <<<<<<<<<<<<<< * a = None * if shape is not None: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__float64); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_dtype, __pyx_t_7); __pyx_t_7 = 0; } __pyx_L9:; goto __pyx_L8; } __pyx_L8:; /* "ga4py/gain/misc.pyx":439 * else: * dtype = np.float64 * a = None # <<<<<<<<<<<<<< * if shape is not None: * shape = np.asarray(shape,dtype=np.int64) */ __Pyx_INCREF(Py_None); __pyx_v_a = Py_None; /* "ga4py/gain/misc.pyx":440 * dtype = np.float64 * a = None * if shape is not None: # <<<<<<<<<<<<<< * shape = np.asarray(shape,dtype=np.int64) * if np.prod(shape) != length: */ __pyx_t_3 = (__pyx_v_shape != Py_None); __pyx_t_6 = (__pyx_t_3 != 0); if (__pyx_t_6) { /* "ga4py/gain/misc.pyx":441 * a = None * if shape is not None: * shape = np.asarray(shape,dtype=np.int64) # <<<<<<<<<<<<<< * if np.prod(shape) != length: * raise ValueError, "total size of new array must be unchanged" */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s__int64); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF_SET(__pyx_v_shape, __pyx_t_10); __pyx_t_10 = 0; /* "ga4py/gain/misc.pyx":442 * if shape is not None: * shape = np.asarray(shape,dtype=np.int64) * if np.prod(shape) != length: # <<<<<<<<<<<<<< * raise ValueError, "total size of new array must be unchanged" * a = ndarray(shape, dtype) */ __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s__prod); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __pyx_t_7 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0; __pyx_t_10 = PyObject_RichCompare(__pyx_t_7, __pyx_v_length, Py_NE); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (__pyx_t_6) { /* "ga4py/gain/misc.pyx":443 * shape = np.asarray(shape,dtype=np.int64) * if np.prod(shape) != length: * raise ValueError, "total size of new array must be unchanged" # <<<<<<<<<<<<<< * a = ndarray(shape, dtype) * a_local = a.access() */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_9), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L11; } __pyx_L11:; /* "ga4py/gain/misc.pyx":444 * if np.prod(shape) != length: * raise ValueError, "total size of new array must be unchanged" * a = ndarray(shape, dtype) # <<<<<<<<<<<<<< * a_local = a.access() * if a_local is not None: */ __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_4 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __Pyx_DECREF_SET(__pyx_v_a, __pyx_t_4); __pyx_t_4 = 0; /* "ga4py/gain/misc.pyx":445 * raise ValueError, "total size of new array must be unchanged" * a = ndarray(shape, dtype) * a_local = a.access() # <<<<<<<<<<<<<< * if a_local is not None: * lo,hi = a.distribution() */ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__access); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_a_local = __pyx_t_7; __pyx_t_7 = 0; /* "ga4py/gain/misc.pyx":446 * a = ndarray(shape, dtype) * a_local = a.access() * if a_local is not None: # <<<<<<<<<<<<<< * lo,hi = a.distribution() * lshape = hi-lo */ __pyx_t_6 = (__pyx_v_a_local != Py_None); __pyx_t_3 = (__pyx_t_6 != 0); if (__pyx_t_3) { /* "ga4py/gain/misc.pyx":447 * a_local = a.access() * if a_local is not None: * lo,hi = a.distribution() # <<<<<<<<<<<<<< * lshape = hi-lo * v = np.add.reduce( */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__distribution); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) { PyObject* sequence = __pyx_t_4; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_7 = PyList_GET_ITEM(sequence, 0); __pyx_t_10 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(__pyx_t_10); #else __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); #endif __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { Py_ssize_t index = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_11 = Py_TYPE(__pyx_t_1)->tp_iternext; index = 0; __pyx_t_7 = __pyx_t_11(__pyx_t_1); if (unlikely(!__pyx_t_7)) goto __pyx_L13_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); index = 1; __pyx_t_10 = __pyx_t_11(__pyx_t_1); if (unlikely(!__pyx_t_10)) goto __pyx_L13_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_1), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_11 = NULL; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L14_unpacking_done; __pyx_L13_unpacking_failed:; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_11 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L14_unpacking_done:; } __pyx_v_lo = __pyx_t_7; __pyx_t_7 = 0; __pyx_v_hi = __pyx_t_10; __pyx_t_10 = 0; /* "ga4py/gain/misc.pyx":448 * if a_local is not None: * lo,hi = a.distribution() * lshape = hi-lo # <<<<<<<<<<<<<< * v = np.add.reduce( * (np.indices(lshape).reshape(len(lshape),-1).T + lo) */ __pyx_t_4 = PyNumber_Subtract(__pyx_v_hi, __pyx_v_lo); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_v_lshape = __pyx_t_4; __pyx_t_4 = 0; /* "ga4py/gain/misc.pyx":449 * lo,hi = a.distribution() * lshape = hi-lo * v = np.add.reduce( # <<<<<<<<<<<<<< * (np.indices(lshape).reshape(len(lshape),-1).T + lo) * * (np.asarray(a.strides)/a.itemsize), axis=1) */ __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s__add); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s__reduce); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; /* "ga4py/gain/misc.pyx":450 * lshape = hi-lo * v = np.add.reduce( * (np.indices(lshape).reshape(len(lshape),-1).T + lo) # <<<<<<<<<<<<<< * * (np.asarray(a.strides)/a.itemsize), axis=1) * a_local.flat = v*step + start */ __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s__indices); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_INCREF(__pyx_v_lshape); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_lshape); __Pyx_GIVEREF(__pyx_v_lshape); __pyx_t_1 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0; __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__reshape); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_12 = PyObject_Length(__pyx_v_lshape); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_12); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_INCREF(__pyx_int_neg_1); PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_int_neg_1); __Pyx_GIVEREF(__pyx_int_neg_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__T); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyNumber_Add(__pyx_t_7, __pyx_v_lo); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "ga4py/gain/misc.pyx":451 * v = np.add.reduce( * (np.indices(lshape).reshape(len(lshape),-1).T + lo) * * (np.asarray(a.strides)/a.itemsize), axis=1) # <<<<<<<<<<<<<< * a_local.flat = v*step + start * a.release_update() */ __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__asarray); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__strides); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__itemsize); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = __Pyx_PyNumber_Divide(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = PyNumber_Multiply(__pyx_t_1, __pyx_t_10); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __Pyx_GIVEREF(__pyx_t_9); __pyx_t_9 = 0; /* "ga4py/gain/misc.pyx":449 * lo,hi = a.distribution() * lshape = hi-lo * v = np.add.reduce( # <<<<<<<<<<<<<< * (np.indices(lshape).reshape(len(lshape),-1).T + lo) * * (np.asarray(a.strides)/a.itemsize), axis=1) */ __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_9)); if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__axis), __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_10), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; __pyx_v_v = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":452 * (np.indices(lshape).reshape(len(lshape),-1).T + lo) * * (np.asarray(a.strides)/a.itemsize), axis=1) * a_local.flat = v*step + start # <<<<<<<<<<<<<< * a.release_update() * else: */ __pyx_t_1 = PyNumber_Multiply(__pyx_v_v, __pyx_v_step); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = PyNumber_Add(__pyx_t_1, __pyx_v_start); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__Pyx_PyObject_SetAttrStr(__pyx_v_a_local, __pyx_n_s__flat, __pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; /* "ga4py/gain/misc.pyx":453 * * (np.asarray(a.strides)/a.itemsize), axis=1) * a_local.flat = v*step + start * a.release_update() # <<<<<<<<<<<<<< * else: * a = ndarray(length, dtype) */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__release_update); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L12; } __pyx_L12:; goto __pyx_L10; } /*else*/ { /* "ga4py/gain/misc.pyx":455 * a.release_update() * else: * a = ndarray(length, dtype) # <<<<<<<<<<<<<< * a_local = a.access() * if a_local is not None: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_INCREF(__pyx_v_length); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_length); __Pyx_GIVEREF(__pyx_v_length); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_10 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; __Pyx_DECREF_SET(__pyx_v_a, __pyx_t_10); __pyx_t_10 = 0; /* "ga4py/gain/misc.pyx":456 * else: * a = ndarray(length, dtype) * a_local = a.access() # <<<<<<<<<<<<<< * if a_local is not None: * lo,hi = a.distribution() */ __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__access); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_9 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_v_a_local = __pyx_t_9; __pyx_t_9 = 0; /* "ga4py/gain/misc.pyx":457 * a = ndarray(length, dtype) * a_local = a.access() * if a_local is not None: # <<<<<<<<<<<<<< * lo,hi = a.distribution() * a_local[...] = np.arange(lo[0],hi[0]) */ __pyx_t_3 = (__pyx_v_a_local != Py_None); __pyx_t_6 = (__pyx_t_3 != 0); if (__pyx_t_6) { /* "ga4py/gain/misc.pyx":458 * a_local = a.access() * if a_local is not None: * lo,hi = a.distribution() # <<<<<<<<<<<<<< * a_local[...] = np.arange(lo[0],hi[0]) * a_local *= step */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__distribution); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_10))) || (PyList_CheckExact(__pyx_t_10))) { PyObject* sequence = __pyx_t_10; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_9 = PyList_GET_ITEM(sequence, 0); __pyx_t_1 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_1); #else __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); #endif __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } else { Py_ssize_t index = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_11 = Py_TYPE(__pyx_t_4)->tp_iternext; index = 0; __pyx_t_9 = __pyx_t_11(__pyx_t_4); if (unlikely(!__pyx_t_9)) goto __pyx_L16_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_1 = __pyx_t_11(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L16_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_11 = NULL; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L17_unpacking_done; __pyx_L16_unpacking_failed:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_11 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L17_unpacking_done:; } __pyx_v_lo = __pyx_t_9; __pyx_t_9 = 0; __pyx_v_hi = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":459 * if a_local is not None: * lo,hi = a.distribution() * a_local[...] = np.arange(lo[0],hi[0]) # <<<<<<<<<<<<<< * a_local *= step * a_local += start */ __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s__arange); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_lo, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_hi, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_10); __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_9); __Pyx_GIVEREF(__pyx_t_9); __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; if (PyObject_SetItem(__pyx_v_a_local, Py_Ellipsis, __pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; /* "ga4py/gain/misc.pyx":460 * lo,hi = a.distribution() * a_local[...] = np.arange(lo[0],hi[0]) * a_local *= step # <<<<<<<<<<<<<< * a_local += start * a.release_update() */ __pyx_t_9 = PyNumber_InPlaceMultiply(__pyx_v_a_local, __pyx_v_step); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF_SET(__pyx_v_a_local, __pyx_t_9); __pyx_t_9 = 0; /* "ga4py/gain/misc.pyx":461 * a_local[...] = np.arange(lo[0],hi[0]) * a_local *= step * a_local += start # <<<<<<<<<<<<<< * a.release_update() * return a */ __pyx_t_9 = PyNumber_InPlaceAdd(__pyx_v_a_local, __pyx_v_start); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF_SET(__pyx_v_a_local, __pyx_t_9); __pyx_t_9 = 0; /* "ga4py/gain/misc.pyx":462 * a_local *= step * a_local += start * a.release_update() # <<<<<<<<<<<<<< * return a * */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__release_update); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_4 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L15; } __pyx_L15:; } __pyx_L10:; /* "ga4py/gain/misc.pyx":463 * a_local += start * a.release_update() * return a # <<<<<<<<<<<<<< * * def linspace(start, stop, num=50, endpoint=True, retstep=False): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_a); __pyx_r = __pyx_v_a; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("ga4py.gain.misc.arange", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_length); __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_a_local); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XDECREF(__pyx_v_lshape); __Pyx_XDECREF(__pyx_v_v); __Pyx_XDECREF(__pyx_v_start); __Pyx_XDECREF(__pyx_v_stop); __Pyx_XDECREF(__pyx_v_step); __Pyx_XDECREF(__pyx_v_dtype); __Pyx_XDECREF(__pyx_v_shape); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_19linspace(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_18linspace[] = "Return evenly spaced numbers over a specified interval.\n\n Returns `num` evenly spaced samples, calculated over the\n interval [`start`, `stop` ].\n\n The endpoint of the interval can optionally be excluded.\n\n Parameters\n ----------\n start : scalar\n The starting value of the sequence.\n stop : scalar\n The end value of the sequence, unless `endpoint` is set to False.\n In that case, the sequence consists of all but the last of ``num + 1``\n evenly spaced samples, so that `stop` is excluded. Note that the step\n size changes when `endpoint` is False.\n num : int, optional\n Number of samples to generate. Default is 50.\n endpoint : bool, optional\n If True, `stop` is the last sample. Otherwise, it is not included.\n Default is True.\n retstep : bool, optional\n If True, return (`samples`, `step`), where `step` is the spacing\n between samples.\n\n Returns\n -------\n samples : ndarray\n There are `num` equally spaced samples in the closed interval\n ``[start, stop]`` or the half-open interval ``[start, stop)``\n (depending on whether `endpoint` is True or False).\n step : float (only if `retstep` is True)\n Size of spacing between samples.\n\n\n See Also\n --------\n arange : Similiar to `linspace`, but uses a step size (instead of the\n number of samples).\n logspace : Samples uniformly distributed in log space.\n\n Examples\n --------\n >>> np.linspace(2.0, 3.0, num=5)\n array([ 2. , 2.25, 2.5 , 2.75, 3. ])\n >>> np.linspace(2.0, 3.0, num=5, endpoint=False)\n array([ 2. , 2.2, 2.4, 2.6, 2.8])\n >>> np.linspace(2.0, 3.0, num=5, retstep=True)\n (array([ 2. , 2.25, 2.5 , 2.75, 3. ]), 0.25)\n\n Graphical illustration:\n\n >>> import matplotlib.pyplot as plt\n >>> N = 8\n >>> y = np.zeros(N)\n >>> x1 = np.linspace(0, 10, N, endpoint=Tru""e)\n >>> x2 = np.linspace(0, 10, N, endpoint=False)\n >>> plt.plot(x1, y, 'o')\n >>> plt.plot(x2, y + 0.5, 'o')\n >>> plt.ylim([-0.5, 1])\n >>> plt.show()\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_19linspace = {__Pyx_NAMESTR("linspace"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_19linspace, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_18linspace)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_19linspace(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_start = 0; PyObject *__pyx_v_stop = 0; PyObject *__pyx_v_num = 0; PyObject *__pyx_v_endpoint = 0; PyObject *__pyx_v_retstep = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("linspace (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__start,&__pyx_n_s__stop,&__pyx_n_s__num,&__pyx_n_s__endpoint,&__pyx_n_s__retstep,0}; PyObject* values[5] = {0,0,0,0,0}; values[2] = ((PyObject *)__pyx_int_50); values[3] = __pyx_k_10; values[4] = __pyx_k_11; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__start)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__stop)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("linspace", 0, 2, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__num); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__endpoint); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__retstep); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "linspace") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_start = values[0]; __pyx_v_stop = values[1]; __pyx_v_num = values[2]; __pyx_v_endpoint = values[3]; __pyx_v_retstep = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("linspace", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.misc.linspace", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4misc_18linspace(__pyx_self, __pyx_v_start, __pyx_v_stop, __pyx_v_num, __pyx_v_endpoint, __pyx_v_retstep); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/misc.pyx":465 * return a * * def linspace(start, stop, num=50, endpoint=True, retstep=False): # <<<<<<<<<<<<<< * """Return evenly spaced numbers over a specified interval. * */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_18linspace(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_start, PyObject *__pyx_v_stop, PyObject *__pyx_v_num, PyObject *__pyx_v_endpoint, PyObject *__pyx_v_retstep) { PyObject *__pyx_v_a = NULL; PyObject *__pyx_v_step = NULL; PyObject *__pyx_v_buf = NULL; PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *(*__pyx_t_7)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("linspace", 0); __Pyx_TraceCall("linspace", __pyx_f[0], 465); /* "ga4py/gain/misc.pyx":530 * """ * # bail if threshold not met * if not should_distribute(num): # <<<<<<<<<<<<<< * return np.linspace(start,stop,num,endpoint,retstep) * a = ndarray(num) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__should_distribute); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_num); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_num); __Pyx_GIVEREF(__pyx_v_num); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = ((!__pyx_t_4) != 0); if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":531 * # bail if threshold not met * if not should_distribute(num): * return np.linspace(start,stop,num,endpoint,retstep) # <<<<<<<<<<<<<< * a = ndarray(num) * step = None */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__linspace); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_start); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_start); __Pyx_GIVEREF(__pyx_v_start); __Pyx_INCREF(__pyx_v_stop); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_stop); __Pyx_GIVEREF(__pyx_v_stop); __Pyx_INCREF(__pyx_v_num); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_num); __Pyx_GIVEREF(__pyx_v_num); __Pyx_INCREF(__pyx_v_endpoint); PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_endpoint); __Pyx_GIVEREF(__pyx_v_endpoint); __Pyx_INCREF(__pyx_v_retstep); PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_v_retstep); __Pyx_GIVEREF(__pyx_v_retstep); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/misc.pyx":532 * if not should_distribute(num): * return np.linspace(start,stop,num,endpoint,retstep) * a = ndarray(num) # <<<<<<<<<<<<<< * step = None * if endpoint: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_num); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_num); __Pyx_GIVEREF(__pyx_v_num); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_a = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":533 * return np.linspace(start,stop,num,endpoint,retstep) * a = ndarray(num) * step = None # <<<<<<<<<<<<<< * if endpoint: * step = (stop-start)/(num-1) */ __Pyx_INCREF(Py_None); __pyx_v_step = Py_None; /* "ga4py/gain/misc.pyx":534 * a = ndarray(num) * step = None * if endpoint: # <<<<<<<<<<<<<< * step = (stop-start)/(num-1) * else: */ __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_endpoint); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":535 * step = None * if endpoint: * step = (stop-start)/(num-1) # <<<<<<<<<<<<<< * else: * step = (stop-start)/num */ __pyx_t_2 = PyNumber_Subtract(__pyx_v_stop, __pyx_v_start); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyNumber_Subtract(__pyx_v_num, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_step, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L4; } /*else*/ { /* "ga4py/gain/misc.pyx":537 * step = (stop-start)/(num-1) * else: * step = (stop-start)/num # <<<<<<<<<<<<<< * buf = a.access() * if buf is not None: */ __pyx_t_1 = PyNumber_Subtract(__pyx_v_stop, __pyx_v_start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_v_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_step, __pyx_t_3); __pyx_t_3 = 0; } __pyx_L4:; /* "ga4py/gain/misc.pyx":538 * else: * step = (stop-start)/num * buf = a.access() # <<<<<<<<<<<<<< * if buf is not None: * lo,hi = a.distribution() */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__access); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_buf = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":539 * step = (stop-start)/num * buf = a.access() * if buf is not None: # <<<<<<<<<<<<<< * lo,hi = a.distribution() * lo,hi = lo[0],hi[0] */ __pyx_t_5 = (__pyx_v_buf != Py_None); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":540 * buf = a.access() * if buf is not None: * lo,hi = a.distribution() # <<<<<<<<<<<<<< * lo,hi = lo[0],hi[0] * buf[:] = np.arange(lo,hi)*step+start */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__distribution); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_1 = PyList_GET_ITEM(sequence, 0); __pyx_t_2 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_2); #else __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; index = 0; __pyx_t_1 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_1)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); index = 1; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L7_unpacking_done:; } __pyx_v_lo = __pyx_t_1; __pyx_t_1 = 0; __pyx_v_hi = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":541 * if buf is not None: * lo,hi = a.distribution() * lo,hi = lo[0],hi[0] # <<<<<<<<<<<<<< * buf[:] = np.arange(lo,hi)*step+start * a.release_update() */ __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_lo, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_hi, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF_SET(__pyx_v_lo, __pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_hi, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":542 * lo,hi = a.distribution() * lo,hi = lo[0],hi[0] * buf[:] = np.arange(lo,hi)*step+start # <<<<<<<<<<<<<< * a.release_update() * #sync() */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__arange); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_v_step); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_v_start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__Pyx_PyObject_SetSlice(__pyx_v_buf, __pyx_t_1, 0, 0, NULL, NULL, &__pyx_k_slice_12, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":543 * lo,hi = lo[0],hi[0] * buf[:] = np.arange(lo,hi)*step+start * a.release_update() # <<<<<<<<<<<<<< * #sync() * if retstep: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__release_update); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L5; } __pyx_L5:; /* "ga4py/gain/misc.pyx":545 * a.release_update() * #sync() * if retstep: # <<<<<<<<<<<<<< * return a,step * return a */ __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_retstep); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":546 * #sync() * if retstep: * return a,step # <<<<<<<<<<<<<< * return a * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __Pyx_INCREF(__pyx_v_step); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_step); __Pyx_GIVEREF(__pyx_v_step); __pyx_r = ((PyObject *)__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L8; } __pyx_L8:; /* "ga4py/gain/misc.pyx":547 * if retstep: * return a,step * return a # <<<<<<<<<<<<<< * * def logspace(start, stop, num=50, endpoint=True, base=10.0): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_a); __pyx_r = __pyx_v_a; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.misc.linspace", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_step); __Pyx_XDECREF(__pyx_v_buf); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_21logspace(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_20logspace[] = "Return numbers spaced evenly on a log scale.\n\n In linear space, the sequence starts at ``base ** start``\n (`base` to the power of `start`) and ends with ``base ** stop``\n (see `endpoint` below).\n\n Parameters\n ----------\n start : float\n ``base ** start`` is the starting value of the sequence.\n stop : float\n ``base ** stop`` is the final value of the sequence, unless `endpoint`\n is False. In that case, ``num + 1`` values are spaced over the\n interval in log-space, of which all but the last (a sequence of\n length ``num``) are returned.\n num : integer, optional\n Number of samples to generate. Default is 50.\n endpoint : boolean, optional\n If true, `stop` is the last sample. Otherwise, it is not included.\n Default is True.\n base : float, optional\n The base of the log space. The step size between the elements in\n ``ln(samples) / ln(base)`` (or ``log_base(samples)``) is uniform.\n Default is 10.0.\n\n Returns\n -------\n samples : ndarray\n `num` samples, equally spaced on a log scale.\n\n See Also\n --------\n arange : Similiar to linspace, with the step size specified instead of the\n number of samples. Note that, when used with a float endpoint, the\n endpoint may or may not be included.\n linspace : Similar to logspace, but with the samples uniformly distributed\n in linear space, instead of log space.\n\n Notes\n -----\n Logspace is equivalent to the code\n\n >>> y = linspace(start, stop, num=num, endpoint=endpoint)\n >>> power(base, y)\n\n Examples\n --------\n >>> np.logspace(2.0, 3.0, num=4)\n array([ 100. , 215.443469 , 464.15888336, 1000. ])\n >>> np.logspace(2.0, 3.0, num=4, endpoint=False)\n array([ 100. , 177.827941 , 316.22776602, 562.34132519])\n >>> np.logspace(2.0, 3.0, num=4, base=2.0)""\n array([ 4. , 5.0396842 , 6.34960421, 8. ])\n\n Graphical illustration:\n\n >>> import matplotlib.pyplot as plt\n >>> N = 10\n >>> x1 = np.logspace(0.1, 1, N, endpoint=True)\n >>> x2 = np.logspace(0.1, 1, N, endpoint=False)\n >>> y = np.zeros(N)\n >>> plt.plot(x1, y, 'o')\n >>> plt.plot(x2, y + 0.5, 'o')\n >>> plt.ylim([-0.5, 1])\n >>> plt.show()\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_21logspace = {__Pyx_NAMESTR("logspace"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_21logspace, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_20logspace)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_21logspace(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_start = 0; PyObject *__pyx_v_stop = 0; PyObject *__pyx_v_num = 0; PyObject *__pyx_v_endpoint = 0; PyObject *__pyx_v_base = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("logspace (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__start,&__pyx_n_s__stop,&__pyx_n_s__num,&__pyx_n_s__endpoint,&__pyx_n_s__base,0}; PyObject* values[5] = {0,0,0,0,0}; values[2] = ((PyObject *)__pyx_int_50); values[3] = __pyx_k_13; values[4] = __pyx_k_14; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__start)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__stop)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("logspace", 0, 2, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__num); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__endpoint); if (value) { values[3] = value; kw_args--; } } case 4: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__base); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "logspace") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_start = values[0]; __pyx_v_stop = values[1]; __pyx_v_num = values[2]; __pyx_v_endpoint = values[3]; __pyx_v_base = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("logspace", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.misc.logspace", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4misc_20logspace(__pyx_self, __pyx_v_start, __pyx_v_stop, __pyx_v_num, __pyx_v_endpoint, __pyx_v_base); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/misc.pyx":549 * return a * * def logspace(start, stop, num=50, endpoint=True, base=10.0): # <<<<<<<<<<<<<< * """Return numbers spaced evenly on a log scale. * */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_20logspace(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_start, PyObject *__pyx_v_stop, PyObject *__pyx_v_num, PyObject *__pyx_v_endpoint, PyObject *__pyx_v_base) { PyObject *__pyx_v_a = NULL; PyObject *__pyx_v_step = NULL; PyObject *__pyx_v_buf = NULL; PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *(*__pyx_t_7)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("logspace", 0); __Pyx_TraceCall("logspace", __pyx_f[0], 549); /* "ga4py/gain/misc.pyx":618 * """ * # bail if threshold not met * if not should_distribute(num): # <<<<<<<<<<<<<< * return np.logspace(start,stop,num,endpoint,base) * a = ndarray(num) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__should_distribute); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_num); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_num); __Pyx_GIVEREF(__pyx_v_num); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = ((!__pyx_t_4) != 0); if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":619 * # bail if threshold not met * if not should_distribute(num): * return np.logspace(start,stop,num,endpoint,base) # <<<<<<<<<<<<<< * a = ndarray(num) * step = None */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__logspace); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_start); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_start); __Pyx_GIVEREF(__pyx_v_start); __Pyx_INCREF(__pyx_v_stop); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_stop); __Pyx_GIVEREF(__pyx_v_stop); __Pyx_INCREF(__pyx_v_num); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_num); __Pyx_GIVEREF(__pyx_v_num); __Pyx_INCREF(__pyx_v_endpoint); PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_endpoint); __Pyx_GIVEREF(__pyx_v_endpoint); __Pyx_INCREF(__pyx_v_base); PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_v_base); __Pyx_GIVEREF(__pyx_v_base); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/misc.pyx":620 * if not should_distribute(num): * return np.logspace(start,stop,num,endpoint,base) * a = ndarray(num) # <<<<<<<<<<<<<< * step = None * if endpoint: */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_num); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_num); __Pyx_GIVEREF(__pyx_v_num); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_a = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":621 * return np.logspace(start,stop,num,endpoint,base) * a = ndarray(num) * step = None # <<<<<<<<<<<<<< * if endpoint: * step = (stop-start)/(num-1) */ __Pyx_INCREF(Py_None); __pyx_v_step = Py_None; /* "ga4py/gain/misc.pyx":622 * a = ndarray(num) * step = None * if endpoint: # <<<<<<<<<<<<<< * step = (stop-start)/(num-1) * else: */ __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_endpoint); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":623 * step = None * if endpoint: * step = (stop-start)/(num-1) # <<<<<<<<<<<<<< * else: * step = (stop-start)/num */ __pyx_t_2 = PyNumber_Subtract(__pyx_v_stop, __pyx_v_start); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyNumber_Subtract(__pyx_v_num, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_step, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L4; } /*else*/ { /* "ga4py/gain/misc.pyx":625 * step = (stop-start)/(num-1) * else: * step = (stop-start)/num # <<<<<<<<<<<<<< * buf = a.access() * if buf is not None: */ __pyx_t_1 = PyNumber_Subtract(__pyx_v_stop, __pyx_v_start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_v_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_step, __pyx_t_3); __pyx_t_3 = 0; } __pyx_L4:; /* "ga4py/gain/misc.pyx":626 * else: * step = (stop-start)/num * buf = a.access() # <<<<<<<<<<<<<< * if buf is not None: * lo,hi = a.distribution() */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__access); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_buf = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":627 * step = (stop-start)/num * buf = a.access() * if buf is not None: # <<<<<<<<<<<<<< * lo,hi = a.distribution() * lo,hi = lo[0],hi[0] */ __pyx_t_5 = (__pyx_v_buf != Py_None); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":628 * buf = a.access() * if buf is not None: * lo,hi = a.distribution() # <<<<<<<<<<<<<< * lo,hi = lo[0],hi[0] * buf[:] = base**(np.arange(lo,hi)*step+start) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__distribution); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_1 = PyList_GET_ITEM(sequence, 0); __pyx_t_2 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_2); #else __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; index = 0; __pyx_t_1 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_1)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); index = 1; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = NULL; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L7_unpacking_done; __pyx_L6_unpacking_failed:; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L7_unpacking_done:; } __pyx_v_lo = __pyx_t_1; __pyx_t_1 = 0; __pyx_v_hi = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":629 * if buf is not None: * lo,hi = a.distribution() * lo,hi = lo[0],hi[0] # <<<<<<<<<<<<<< * buf[:] = base**(np.arange(lo,hi)*step+start) * a.release_update() */ __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_lo, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_hi, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF_SET(__pyx_v_lo, __pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_hi, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":630 * lo,hi = a.distribution() * lo,hi = lo[0],hi[0] * buf[:] = base**(np.arange(lo,hi)*step+start) # <<<<<<<<<<<<<< * a.release_update() * #sync() */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__arange); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_lo); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_lo); __Pyx_GIVEREF(__pyx_v_lo); __Pyx_INCREF(__pyx_v_hi); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_hi); __Pyx_GIVEREF(__pyx_v_hi); __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_v_step); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_v_start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Power(__pyx_v_base, __pyx_t_1, Py_None); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__Pyx_PyObject_SetSlice(__pyx_v_buf, __pyx_t_2, 0, 0, NULL, NULL, &__pyx_k_slice_15, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":631 * lo,hi = lo[0],hi[0] * buf[:] = base**(np.arange(lo,hi)*step+start) * a.release_update() # <<<<<<<<<<<<<< * #sync() * return a */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__release_update); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L5; } __pyx_L5:; /* "ga4py/gain/misc.pyx":633 * a.release_update() * #sync() * return a # <<<<<<<<<<<<<< * * def dot(a, b, out=None): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_a); __pyx_r = __pyx_v_a; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("ga4py.gain.misc.logspace", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_step); __Pyx_XDECREF(__pyx_v_buf); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_23dot(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_22dot[] = "dot(a, b)\n\n Dot product of two arrays.\n\n For 2-D arrays it is equivalent to matrix multiplication, and for 1-D\n arrays to inner product of vectors (without complex conjugation). For\n N dimensions it is a sum product over the last axis of `a` and\n the second-to-last of `b`::\n\n dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])\n\n Parameters\n ----------\n a : array_like\n First argument.\n b : array_like\n Second argument.\n\n Returns\n -------\n output : ndarray\n Returns the dot product of `a` and `b`. If `a` and `b` are both\n scalars or both 1-D arrays then a scalar is returned; otherwise\n an array is returned.\n\n Raises\n ------\n ValueError\n If the last dimension of `a` is not the same size as\n the second-to-last dimension of `b`.\n\n See Also\n --------\n vdot : Complex-conjugating dot product.\n tensordot : Sum products over arbitrary axes.\n\n Examples\n --------\n >>> np.dot(3, 4)\n 12\n\n Neither argument is complex-conjugated:\n\n >>> np.dot([2j, 3j], [2j, 3j])\n (-13+0j)\n\n For 2-D arrays it's the matrix product:\n\n >>> a = [[1, 0], [0, 1]]\n >>> b = [[4, 1], [2, 2]]\n >>> np.dot(a, b)\n array([[4, 1],\n [2, 2]])\n\n >>> a = np.arange(3*4*5*6).reshape((3,4,5,6))\n >>> b = np.arange(3*4*5*6)[::-1].reshape((5,4,6,3))\n >>> np.dot(a, b)[2,3,2,1,2,2]\n 499128\n >>> sum(a[2,3,2,:] * b[1,2,:,2])\n 499128\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_23dot = {__Pyx_NAMESTR("dot"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_23dot, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_22dot)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_23dot(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_a = 0; PyObject *__pyx_v_b = 0; PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("dot (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__b,&__pyx_n_s__out,0}; PyObject* values[3] = {0,0,0}; /* "ga4py/gain/misc.pyx":635 * return a * * def dot(a, b, out=None): # <<<<<<<<<<<<<< * """dot(a, b) * */ values[2] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("dot", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dot") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_b = values[1]; __pyx_v_out = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("dot", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.misc.dot", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4misc_22dot(__pyx_self, __pyx_v_a, __pyx_v_b, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4misc_22dot(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_out) { PyObject *__pyx_v_tmp = NULL; PyObject *__pyx_v_ndtmp = NULL; PyObject *__pyx_v_local_sum = NULL; PyObject *__pyx_v_valid_types = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; Py_ssize_t __pyx_t_8; Py_ssize_t __pyx_t_9; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; int __pyx_t_12; PyObject *__pyx_t_13 = NULL; PyObject *__pyx_t_14 = NULL; PyObject *__pyx_t_15 = NULL; PyObject *__pyx_t_16 = NULL; PyObject *__pyx_t_17 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("dot", 0); __Pyx_TraceCall("dot", __pyx_f[0], 635); __Pyx_INCREF(__pyx_v_a); __Pyx_INCREF(__pyx_v_b); __Pyx_INCREF(__pyx_v_out); /* "ga4py/gain/misc.pyx":698 * * """ * a = asarray(a) # <<<<<<<<<<<<<< * b = asarray(b) * if not (is_distributed(a) or is_distributed(b)): */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_a, __pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/misc.pyx":699 * """ * a = asarray(a) * b = asarray(b) # <<<<<<<<<<<<<< * if not (is_distributed(a) or is_distributed(b)): * # numpy pass through */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__asarray); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 699; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 699; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_b); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_b); __Pyx_GIVEREF(__pyx_v_b); __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 699; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_b, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":700 * a = asarray(a) * b = asarray(b) * if not (is_distributed(a) or is_distributed(b)): # <<<<<<<<<<<<<< * # numpy pass through * return np.dot(a,b) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__is_distributed); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_4) { __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__is_distributed); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_b); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_b); __Pyx_GIVEREF(__pyx_v_b); __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_6 = __pyx_t_5; } else { __pyx_t_6 = __pyx_t_4; } __pyx_t_4 = ((!__pyx_t_6) != 0); if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":702 * if not (is_distributed(a) or is_distributed(b)): * # numpy pass through * return np.dot(a,b) # <<<<<<<<<<<<<< * # working with flatiter instances can be expensive, try this opt * if (isinstance(a,flatiter) */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__dot); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __Pyx_INCREF(__pyx_v_b); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_b); __Pyx_GIVEREF(__pyx_v_b); __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/misc.pyx":704 * return np.dot(a,b) * # working with flatiter instances can be expensive, try this opt * if (isinstance(a,flatiter) # <<<<<<<<<<<<<< * and isinstance(b,flatiter) * and a._base is b._base): */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__flatiter); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_IsInstance(__pyx_v_a, __pyx_t_3); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if ((__pyx_t_4 != 0)) { /* "ga4py/gain/misc.pyx":705 * # working with flatiter instances can be expensive, try this opt * if (isinstance(a,flatiter) * and isinstance(b,flatiter) # <<<<<<<<<<<<<< * and a._base is b._base): * return (a._base * b._base).sum() */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__flatiter); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = PyObject_IsInstance(__pyx_v_b, __pyx_t_3); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if ((__pyx_t_6 != 0)) { /* "ga4py/gain/misc.pyx":706 * if (isinstance(a,flatiter) * and isinstance(b,flatiter) * and a._base is b._base): # <<<<<<<<<<<<<< * return (a._base * b._base).sum() * if ((isinstance(a,flatiter) or a.ndim == 1) */ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s___base); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 706; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_b, __pyx_n_s___base); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 706; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = (__pyx_t_3 == __pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_7 = (__pyx_t_5 != 0); } else { __pyx_t_7 = (__pyx_t_6 != 0); } __pyx_t_6 = __pyx_t_7; } else { __pyx_t_6 = (__pyx_t_4 != 0); } if (__pyx_t_6) { /* "ga4py/gain/misc.pyx":707 * and isinstance(b,flatiter) * and a._base is b._base): * return (a._base * b._base).sum() # <<<<<<<<<<<<<< * if ((isinstance(a,flatiter) or a.ndim == 1) * and (isinstance(b,flatiter) or b.ndim == 1)): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s___base); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_b, __pyx_n_s___base); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__sum); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/misc.pyx":708 * and a._base is b._base): * return (a._base * b._base).sum() * if ((isinstance(a,flatiter) or a.ndim == 1) # <<<<<<<<<<<<<< * and (isinstance(b,flatiter) or b.ndim == 1)): * if len(a) != len(b): */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__flatiter); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyObject_IsInstance(__pyx_v_a, __pyx_t_2); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!__pyx_t_6) { __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__ndim); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __pyx_t_4; } else { __pyx_t_7 = __pyx_t_6; } if (__pyx_t_7) { /* "ga4py/gain/misc.pyx":709 * return (a._base * b._base).sum() * if ((isinstance(a,flatiter) or a.ndim == 1) * and (isinstance(b,flatiter) or b.ndim == 1)): # <<<<<<<<<<<<<< * if len(a) != len(b): * raise ValueError, "objects are not aligned" */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__flatiter); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 709; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = PyObject_IsInstance(__pyx_v_b, __pyx_t_3); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 709; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_6) { __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_b, __pyx_n_s__ndim); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 709; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_int_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 709; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 709; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = __pyx_t_4; } else { __pyx_t_5 = __pyx_t_6; } __pyx_t_6 = __pyx_t_5; } else { __pyx_t_6 = __pyx_t_7; } if (__pyx_t_6) { /* "ga4py/gain/misc.pyx":710 * if ((isinstance(a,flatiter) or a.ndim == 1) * and (isinstance(b,flatiter) or b.ndim == 1)): * if len(a) != len(b): # <<<<<<<<<<<<<< * raise ValueError, "objects are not aligned" * tmp = multiply(a,b) */ __pyx_t_8 = PyObject_Length(__pyx_v_a); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = PyObject_Length(__pyx_v_b); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = ((__pyx_t_8 != __pyx_t_9) != 0); if (__pyx_t_6) { /* "ga4py/gain/misc.pyx":711 * and (isinstance(b,flatiter) or b.ndim == 1)): * if len(a) != len(b): * raise ValueError, "objects are not aligned" # <<<<<<<<<<<<<< * tmp = multiply(a,b) * ndtmp = tmp.access() */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_16), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 711; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; /* "ga4py/gain/misc.pyx":712 * if len(a) != len(b): * raise ValueError, "objects are not aligned" * tmp = multiply(a,b) # <<<<<<<<<<<<<< * ndtmp = tmp.access() * local_sum = None */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__multiply); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 712; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 712; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __Pyx_INCREF(__pyx_v_b); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_b); __Pyx_GIVEREF(__pyx_v_b); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 712; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_tmp = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":713 * raise ValueError, "objects are not aligned" * tmp = multiply(a,b) * ndtmp = tmp.access() # <<<<<<<<<<<<<< * local_sum = None * if ndtmp is None: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_tmp, __pyx_n_s__access); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_ndtmp = __pyx_t_3; __pyx_t_3 = 0; /* "ga4py/gain/misc.pyx":714 * tmp = multiply(a,b) * ndtmp = tmp.access() * local_sum = None # <<<<<<<<<<<<<< * if ndtmp is None: * local_sum = np.add.reduce(np.asarray([0], dtype=tmp.dtype)) */ __Pyx_INCREF(Py_None); __pyx_v_local_sum = Py_None; /* "ga4py/gain/misc.pyx":715 * ndtmp = tmp.access() * local_sum = None * if ndtmp is None: # <<<<<<<<<<<<<< * local_sum = np.add.reduce(np.asarray([0], dtype=tmp.dtype)) * else: */ __pyx_t_6 = (__pyx_v_ndtmp == Py_None); __pyx_t_7 = (__pyx_t_6 != 0); if (__pyx_t_7) { /* "ga4py/gain/misc.pyx":716 * local_sum = None * if ndtmp is None: * local_sum = np.add.reduce(np.asarray([0], dtype=tmp.dtype)) # <<<<<<<<<<<<<< * else: * local_sum = np.add.reduce(ndtmp) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__add); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__reduce); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__asarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_int_0); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_int_0); __Pyx_GIVEREF(__pyx_int_0); __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_10, 0, ((PyObject *)__pyx_t_1)); __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_tmp, __pyx_n_s__dtype); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_10), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_11); __Pyx_GIVEREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_local_sum, __pyx_t_11); __pyx_t_11 = 0; goto __pyx_L7; } /*else*/ { /* "ga4py/gain/misc.pyx":718 * local_sum = np.add.reduce(np.asarray([0], dtype=tmp.dtype)) * else: * local_sum = np.add.reduce(ndtmp) # <<<<<<<<<<<<<< * return ga.gop_add(local_sum) * elif a.ndim == 2 and b.ndim == 2: */ __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s__add); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__reduce); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_ndtmp); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_ndtmp); __Pyx_GIVEREF(__pyx_v_ndtmp); __pyx_t_3 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_local_sum, __pyx_t_3); __pyx_t_3 = 0; } __pyx_L7:; /* "ga4py/gain/misc.pyx":719 * else: * local_sum = np.add.reduce(ndtmp) * return ga.gop_add(local_sum) # <<<<<<<<<<<<<< * elif a.ndim == 2 and b.ndim == 2: * if a.shape[1] != b.shape[0]: */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__gop_add); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_local_sum); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_local_sum); __Pyx_GIVEREF(__pyx_v_local_sum); __pyx_t_11 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_11; __pyx_t_11 = 0; goto __pyx_L0; goto __pyx_L5; } /* "ga4py/gain/misc.pyx":720 * local_sum = np.add.reduce(ndtmp) * return ga.gop_add(local_sum) * elif a.ndim == 2 and b.ndim == 2: # <<<<<<<<<<<<<< * if a.shape[1] != b.shape[0]: * raise ValueError, "objects are not aligned" */ __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__ndim); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_3 = PyObject_RichCompare(__pyx_t_11, __pyx_int_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_b, __pyx_n_s__ndim); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_11 = PyObject_RichCompare(__pyx_t_3, __pyx_int_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_5 = __pyx_t_6; } else { __pyx_t_5 = __pyx_t_7; } if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":721 * return ga.gop_add(local_sum) * elif a.ndim == 2 and b.ndim == 2: * if a.shape[1] != b.shape[0]: # <<<<<<<<<<<<<< * raise ValueError, "objects are not aligned" * # use GA gemm if certain conditions apply */ __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__shape); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_11, 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_b, __pyx_n_s__shape); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_11, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyObject_RichCompare(__pyx_t_3, __pyx_t_1, Py_NE); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":722 * elif a.ndim == 2 and b.ndim == 2: * if a.shape[1] != b.shape[0]: * raise ValueError, "objects are not aligned" # <<<<<<<<<<<<<< * # use GA gemm if certain conditions apply * valid_types = [np.dtype(np.float32), */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_16), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; /* "ga4py/gain/misc.pyx":724 * raise ValueError, "objects are not aligned" * # use GA gemm if certain conditions apply * valid_types = [np.dtype(np.float32), # <<<<<<<<<<<<<< * np.dtype(np.float64), * np.dtype(np.complex64), */ __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s__float32); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; /* "ga4py/gain/misc.pyx":725 * # use GA gemm if certain conditions apply * valid_types = [np.dtype(np.float32), * np.dtype(np.float64), # <<<<<<<<<<<<<< * np.dtype(np.complex64), * np.dtype(np.complex128)] */ __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s__float64); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; /* "ga4py/gain/misc.pyx":726 * valid_types = [np.dtype(np.float32), * np.dtype(np.float64), * np.dtype(np.complex64), # <<<<<<<<<<<<<< * np.dtype(np.complex128)] * if (a.base is None and b.base is None */ __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s__complex64); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); __Pyx_GIVEREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; /* "ga4py/gain/misc.pyx":727 * np.dtype(np.float64), * np.dtype(np.complex64), * np.dtype(np.complex128)] # <<<<<<<<<<<<<< * if (a.base is None and b.base is None * and a.dtype == b.dtype and a.dtype in valid_types): */ __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s__complex128); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5numpy_dtype)), ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; __pyx_t_11 = PyList_New(4); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); PyList_SET_ITEM(__pyx_t_11, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyList_SET_ITEM(__pyx_t_11, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); PyList_SET_ITEM(__pyx_t_11, 2, __pyx_t_10); __Pyx_GIVEREF(__pyx_t_10); PyList_SET_ITEM(__pyx_t_11, 3, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_10 = 0; __pyx_t_2 = 0; __pyx_v_valid_types = ((PyObject*)__pyx_t_11); __pyx_t_11 = 0; /* "ga4py/gain/misc.pyx":728 * np.dtype(np.complex64), * np.dtype(np.complex128)] * if (a.base is None and b.base is None # <<<<<<<<<<<<<< * and a.dtype == b.dtype and a.dtype in valid_types): * out = zeros((a.shape[0],b.shape[1]), a.dtype) */ __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__base); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 728; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_5 = (__pyx_t_11 == Py_None); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":729 * np.dtype(np.complex128)] * if (a.base is None and b.base is None * and a.dtype == b.dtype and a.dtype in valid_types): # <<<<<<<<<<<<<< * out = zeros((a.shape[0],b.shape[1]), a.dtype) * ga.gemm(False, False, a.shape[0], b.shape[1], b.shape[0], */ __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_b, __pyx_n_s__base); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 728; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); /* "ga4py/gain/misc.pyx":728 * np.dtype(np.complex64), * np.dtype(np.complex128)] * if (a.base is None and b.base is None # <<<<<<<<<<<<<< * and a.dtype == b.dtype and a.dtype in valid_types): * out = zeros((a.shape[0],b.shape[1]), a.dtype) */ __pyx_t_7 = (__pyx_t_11 == Py_None); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (__pyx_t_7) { /* "ga4py/gain/misc.pyx":729 * np.dtype(np.complex128)] * if (a.base is None and b.base is None * and a.dtype == b.dtype and a.dtype in valid_types): # <<<<<<<<<<<<<< * out = zeros((a.shape[0],b.shape[1]), a.dtype) * ga.gemm(False, False, a.shape[0], b.shape[1], b.shape[0], */ __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__dtype); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_b, __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_10 = PyObject_RichCompare(__pyx_t_11, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (__pyx_t_6) { __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__dtype); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_4 = (__Pyx_PySequence_Contains(__pyx_t_10, ((PyObject *)__pyx_v_valid_types), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_12 = __pyx_t_4; } else { __pyx_t_12 = __pyx_t_6; } __pyx_t_6 = __pyx_t_12; } else { __pyx_t_6 = __pyx_t_7; } __pyx_t_7 = __pyx_t_6; } else { __pyx_t_7 = __pyx_t_5; } if (__pyx_t_7) { /* "ga4py/gain/misc.pyx":730 * if (a.base is None and b.base is None * and a.dtype == b.dtype and a.dtype in valid_types): * out = zeros((a.shape[0],b.shape[1]), a.dtype) # <<<<<<<<<<<<<< * ga.gemm(False, False, a.shape[0], b.shape[1], b.shape[0], * 1, a.handle, b.handle, 1, out.handle) */ __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s__zeros); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_2, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_11) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_b, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_11); __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_11 = 0; __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__dtype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_11, 0, ((PyObject *)__pyx_t_2)); __Pyx_GIVEREF(((PyObject *)__pyx_t_2)); PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; __Pyx_DECREF_SET(__pyx_v_out, __pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/misc.pyx":731 * and a.dtype == b.dtype and a.dtype in valid_types): * out = zeros((a.shape[0],b.shape[1]), a.dtype) * ga.gemm(False, False, a.shape[0], b.shape[1], b.shape[0], # <<<<<<<<<<<<<< * 1, a.handle, b.handle, 1, out.handle) * return out */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ga); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__gemm); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_10 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_10); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_b, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_13 = __Pyx_GetItemInt(__pyx_t_2, 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_13) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_b, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_14 = __Pyx_GetItemInt(__pyx_t_2, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_14) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":732 * out = zeros((a.shape[0],b.shape[1]), a.dtype) * ga.gemm(False, False, a.shape[0], b.shape[1], b.shape[0], * 1, a.handle, b.handle, 1, out.handle) # <<<<<<<<<<<<<< * return out * else: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__handle); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_b, __pyx_n_s__handle); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_15); __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__handle); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_17 = PyTuple_New(10); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_10); __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_17, 2, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_17, 3, __pyx_t_13); __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_17, 4, __pyx_t_14); __Pyx_GIVEREF(__pyx_t_14); __Pyx_INCREF(__pyx_int_1); PyTuple_SET_ITEM(__pyx_t_17, 5, __pyx_int_1); __Pyx_GIVEREF(__pyx_int_1); PyTuple_SET_ITEM(__pyx_t_17, 6, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_17, 7, __pyx_t_15); __Pyx_GIVEREF(__pyx_t_15); __Pyx_INCREF(__pyx_int_1); PyTuple_SET_ITEM(__pyx_t_17, 8, __pyx_int_1); __Pyx_GIVEREF(__pyx_int_1); PyTuple_SET_ITEM(__pyx_t_17, 9, __pyx_t_16); __Pyx_GIVEREF(__pyx_t_16); __pyx_t_3 = 0; __pyx_t_10 = 0; __pyx_t_1 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_2 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_16 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_t_17), NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_17)); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; /* "ga4py/gain/misc.pyx":733 * ga.gemm(False, False, a.shape[0], b.shape[1], b.shape[0], * 1, a.handle, b.handle, 1, out.handle) * return out # <<<<<<<<<<<<<< * else: * raise NotImplementedError */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_out); __pyx_r = __pyx_v_out; goto __pyx_L0; goto __pyx_L9; } /*else*/ { /* "ga4py/gain/misc.pyx":735 * return out * else: * raise NotImplementedError # <<<<<<<<<<<<<< * elif isinstance(a,(ndarray,flatiter)) and isinstance(b,(ndarray,flatiter)): * if a.shape[1] != b.shape[0]: */ __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L9:; goto __pyx_L5; } /* "ga4py/gain/misc.pyx":736 * else: * raise NotImplementedError * elif isinstance(a,(ndarray,flatiter)) and isinstance(b,(ndarray,flatiter)): # <<<<<<<<<<<<<< * if a.shape[1] != b.shape[0]: * raise ValueError, "objects are not aligned" */ __pyx_t_16 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s__flatiter); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_16); __Pyx_GIVEREF(__pyx_t_16); PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_17); __Pyx_GIVEREF(__pyx_t_17); __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_7 = PyObject_IsInstance(__pyx_v_a, ((PyObject *)__pyx_t_11)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; if ((__pyx_t_7 != 0)) { __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s__flatiter); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_11); __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_17); __Pyx_GIVEREF(__pyx_t_17); __pyx_t_11 = 0; __pyx_t_17 = 0; __pyx_t_5 = PyObject_IsInstance(__pyx_v_b, ((PyObject *)__pyx_t_16)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_16)); __pyx_t_16 = 0; __pyx_t_6 = (__pyx_t_5 != 0); } else { __pyx_t_6 = (__pyx_t_7 != 0); } if (__pyx_t_6) { /* "ga4py/gain/misc.pyx":737 * raise NotImplementedError * elif isinstance(a,(ndarray,flatiter)) and isinstance(b,(ndarray,flatiter)): * if a.shape[1] != b.shape[0]: # <<<<<<<<<<<<<< * raise ValueError, "objects are not aligned" * raise NotImplementedError, "arbitrary dot" */ __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__shape); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_17 = __Pyx_GetItemInt(__pyx_t_16, 1, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_b, __pyx_n_s__shape); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_16, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_11) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __pyx_t_16 = PyObject_RichCompare(__pyx_t_17, __pyx_t_11, Py_NE); __Pyx_XGOTREF(__pyx_t_16); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_16); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; if (__pyx_t_6) { /* "ga4py/gain/misc.pyx":738 * elif isinstance(a,(ndarray,flatiter)) and isinstance(b,(ndarray,flatiter)): * if a.shape[1] != b.shape[0]: * raise ValueError, "objects are not aligned" # <<<<<<<<<<<<<< * raise NotImplementedError, "arbitrary dot" * else: */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_16), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 738; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L10; } __pyx_L10:; /* "ga4py/gain/misc.pyx":739 * if a.shape[1] != b.shape[0]: * raise ValueError, "objects are not aligned" * raise NotImplementedError, "arbitrary dot" # <<<<<<<<<<<<<< * else: * # assume we have a scalar somewhere, so just multiply */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_kp_s_17), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } /*else*/ { /* "ga4py/gain/misc.pyx":742 * else: * # assume we have a scalar somewhere, so just multiply * return multiply(a,b) # <<<<<<<<<<<<<< * * def diag(v, k=0): */ __Pyx_XDECREF(__pyx_r); __pyx_t_16 = __Pyx_GetModuleGlobalName(__pyx_n_s__multiply); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 742; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_16); __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 742; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_11); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __Pyx_INCREF(__pyx_v_b); PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_b); __Pyx_GIVEREF(__pyx_v_b); __pyx_t_17 = PyObject_Call(__pyx_t_16, ((PyObject *)__pyx_t_11), NULL); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 742; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0; __pyx_r = __pyx_t_17; __pyx_t_17 = 0; goto __pyx_L0; } __pyx_L5:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_11); __Pyx_XDECREF(__pyx_t_13); __Pyx_XDECREF(__pyx_t_14); __Pyx_XDECREF(__pyx_t_15); __Pyx_XDECREF(__pyx_t_16); __Pyx_XDECREF(__pyx_t_17); __Pyx_AddTraceback("ga4py.gain.misc.dot", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_tmp); __Pyx_XDECREF(__pyx_v_ndtmp); __Pyx_XDECREF(__pyx_v_local_sum); __Pyx_XDECREF(__pyx_v_valid_types); __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_b); __Pyx_XDECREF(__pyx_v_out); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_25diag(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_24diag[] = "Extract a diagonal or construct a diagonal array.\n\n Parameters\n ----------\n v : array_like\n If `v` is a 2-D array, return a copy of its `k`-th diagonal.\n If `v` is a 1-D array, return a 2-D array with `v` on the `k`-th\n diagonal.\n k : int, optional\n Diagonal in question. The default is 0. Use `k>0` for diagonals\n above the main diagonal, and `k<0` for diagonals below the main\n diagonal.\n\n Returns\n -------\n out : ndarray\n The extracted diagonal or constructed diagonal array.\n\n See Also\n --------\n diagonal : Return specified diagonals.\n diagflat : Create a 2-D array with the flattened input as a diagonal.\n trace : Sum along diagonals.\n triu : Upper triangle of an array.\n tril : Lower triange of an array.\n\n Examples\n --------\n >>> x = np.arange(9).reshape((3,3))\n >>> x\n array([[0, 1, 2],\n [3, 4, 5],\n [6, 7, 8]])\n\n >>> np.diag(x)\n array([0, 4, 8])\n >>> np.diag(x, k=1)\n array([1, 5])\n >>> np.diag(x, k=-1)\n array([3, 7])\n\n >>> np.diag(np.diag(x))\n array([[0, 0, 0],\n [0, 4, 0],\n [0, 0, 8]])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_25diag = {__Pyx_NAMESTR("diag"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_25diag, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_24diag)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_25diag(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_v = 0; PyObject *__pyx_v_k = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("diag (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__v,&__pyx_n_s__k,0}; PyObject* values[2] = {0,0}; values[1] = ((PyObject *)__pyx_int_0); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__v)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__k); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "diag") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_v = values[0]; __pyx_v_k = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("diag", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.misc.diag", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4misc_24diag(__pyx_self, __pyx_v_v, __pyx_v_k); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/misc.pyx":744 * return multiply(a,b) * * def diag(v, k=0): # <<<<<<<<<<<<<< * """Extract a diagonal or construct a diagonal array. * */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_24diag(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_v, PyObject *__pyx_v_k) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("diag", 0); __Pyx_TraceCall("diag", __pyx_f[0], 744); __Pyx_INCREF(__pyx_v_v); /* "ga4py/gain/misc.pyx":792 * * """ * v = asarray(v) # <<<<<<<<<<<<<< * if isinstance(v, ndarray): * raise NotImplementedError, "TODO" */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 792; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 792; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_v); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_v); __Pyx_GIVEREF(__pyx_v_v); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 792; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_v, __pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/misc.pyx":793 * """ * v = asarray(v) * if isinstance(v, ndarray): # <<<<<<<<<<<<<< * raise NotImplementedError, "TODO" * # the following isn't right. */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_IsInstance(__pyx_v_v, __pyx_t_3); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":794 * v = asarray(v) * if isinstance(v, ndarray): * raise NotImplementedError, "TODO" # <<<<<<<<<<<<<< * # the following isn't right. * # We want to scatter the values from the given diagonal into a brand */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_n_s__TODO), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L3; } /*else*/ { /* "ga4py/gain/misc.pyx":822 * # raise ValueError, "Input must be 1- or 2-d." * else: * return np.diag(v,k) # <<<<<<<<<<<<<< * * def clip(a, a_min, a_max, out=None): */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__diag); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_v); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_v); __Pyx_GIVEREF(__pyx_v_v); __Pyx_INCREF(__pyx_v_k); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_k); __Pyx_GIVEREF(__pyx_v_k); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.misc.diag", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_v); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_27clip(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_26clip[] = "Clip (limit) the values in an array.\n\n Given an interval, values outside the interval are clipped to\n the interval edges. For example, if an interval of ``[0, 1]``\n is specified, values smaller than 0 become 0, and values larger\n than 1 become 1.\n\n Parameters\n ----------\n a : array_like\n Array containing elements to clip.\n a_min : scalar or array_like\n Minimum value.\n a_max : scalar or array_like\n Maximum value. If `a_min` or `a_max` are array_like, then they will\n be broadcasted to the shape of `a`.\n out : ndarray, optional\n The results will be placed in this array. It may be the input\n array for in-place clipping. `out` must be of the right shape\n to hold the output. Its type is preserved.\n\n Returns\n -------\n clipped_array : ndarray\n An array with the elements of `a`, but where values\n < `a_min` are replaced with `a_min`, and those > `a_max`\n with `a_max`.\n\n See Also\n --------\n numpy.doc.ufuncs : Section \"Output arguments\"\n\n Examples\n --------\n >>> a = np.arange(10)\n >>> np.clip(a, 1, 8)\n array([1, 1, 2, 3, 4, 5, 6, 7, 8, 8])\n >>> a\n array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\n >>> np.clip(a, 3, 6, out=a)\n array([3, 3, 3, 3, 4, 5, 6, 6, 6, 6])\n >>> a = np.arange(10)\n >>> a\n array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\n >>> np.clip(a, [3,4,1,1,1,4,4,4,4,4], 8)\n array([3, 4, 2, 3, 4, 5, 6, 7, 8, 8])\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_27clip = {__Pyx_NAMESTR("clip"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_27clip, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_26clip)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_27clip(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_a = 0; PyObject *__pyx_v_a_min = 0; PyObject *__pyx_v_a_max = 0; PyObject *__pyx_v_out = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("clip (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__a_min,&__pyx_n_s__a_max,&__pyx_n_s__out,0}; PyObject* values[4] = {0,0,0,0}; /* "ga4py/gain/misc.pyx":824 * return np.diag(v,k) * * def clip(a, a_min, a_max, out=None): # <<<<<<<<<<<<<< * """Clip (limit) the values in an array. * */ values[3] = ((PyObject *)Py_None); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a_min)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("clip", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a_max)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("clip", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__out); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "clip") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_a_min = values[1]; __pyx_v_a_max = values[2]; __pyx_v_out = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("clip", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.misc.clip", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4misc_26clip(__pyx_self, __pyx_v_a, __pyx_v_a_min, __pyx_v_a_max, __pyx_v_out); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5ga4py_4gain_4misc_26clip(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_a_min, PyObject *__pyx_v_a_max, PyObject *__pyx_v_out) { PyObject *__pyx_v_a_shape = NULL; PyObject *__pyx_v_a_min_shape = NULL; PyObject *__pyx_v_a_max_shape = NULL; PyObject *__pyx_v_npout = NULL; PyObject *__pyx_v_npa = NULL; PyObject *__pyx_v_release_a = NULL; PyObject *__pyx_v_npa_min = NULL; PyObject *__pyx_v_release_a_min = NULL; PyObject *__pyx_v_npa_max = NULL; PyObject *__pyx_v_release_a_max = NULL; PyObject *__pyx_v_nda = NULL; PyObject *__pyx_v_nda_min = NULL; PyObject *__pyx_v_nda_max = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; int __pyx_t_8; PyObject *__pyx_t_9 = NULL; PyObject *(*__pyx_t_10)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("clip", 0); __Pyx_TraceCall("clip", __pyx_f[0], 824); __Pyx_INCREF(__pyx_v_a); __Pyx_INCREF(__pyx_v_a_min); __Pyx_INCREF(__pyx_v_a_max); __Pyx_INCREF(__pyx_v_out); /* "ga4py/gain/misc.pyx":874 * """ * # just in case * a = asarray(a) # <<<<<<<<<<<<<< * a_min = asarray(a_min) * a_max = asarray(a_max) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_a, __pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/misc.pyx":875 * # just in case * a = asarray(a) * a_min = asarray(a_min) # <<<<<<<<<<<<<< * a_max = asarray(a_max) * if not (is_distributed(a) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__asarray); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_a_min); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a_min); __Pyx_GIVEREF(__pyx_v_a_min); __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_a_min, __pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":876 * a = asarray(a) * a_min = asarray(a_min) * a_max = asarray(a_max) # <<<<<<<<<<<<<< * if not (is_distributed(a) * or is_distributed(a_min) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_a_max); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a_max); __Pyx_GIVEREF(__pyx_v_a_max); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_a_max, __pyx_t_3); __pyx_t_3 = 0; /* "ga4py/gain/misc.pyx":877 * a_min = asarray(a_min) * a_max = asarray(a_max) * if not (is_distributed(a) # <<<<<<<<<<<<<< * or is_distributed(a_min) * or is_distributed(a_max) */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__is_distributed); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 877; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 877; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 877; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 877; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!__pyx_t_4) { /* "ga4py/gain/misc.pyx":878 * a_max = asarray(a_max) * if not (is_distributed(a) * or is_distributed(a_min) # <<<<<<<<<<<<<< * or is_distributed(a_max) * or is_distributed(out)): */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__is_distributed); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_a_min); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a_min); __Pyx_GIVEREF(__pyx_v_a_min); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_5) { /* "ga4py/gain/misc.pyx":879 * if not (is_distributed(a) * or is_distributed(a_min) * or is_distributed(a_max) # <<<<<<<<<<<<<< * or is_distributed(out)): * # no ndarray instances used, pass through immediately to numpy */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__is_distributed); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_a_max); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a_max); __Pyx_GIVEREF(__pyx_v_a_max); __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!__pyx_t_6) { /* "ga4py/gain/misc.pyx":880 * or is_distributed(a_min) * or is_distributed(a_max) * or is_distributed(out)): # <<<<<<<<<<<<<< * # no ndarray instances used, pass through immediately to numpy * return np.clip(a, a_min, a_max, out) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__is_distributed); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 880; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 880; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 880; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 880; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_8 = __pyx_t_7; } else { __pyx_t_8 = __pyx_t_6; } __pyx_t_6 = __pyx_t_8; } else { __pyx_t_6 = __pyx_t_5; } __pyx_t_5 = __pyx_t_6; } else { __pyx_t_5 = __pyx_t_4; } __pyx_t_4 = ((!__pyx_t_5) != 0); if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":882 * or is_distributed(out)): * # no ndarray instances used, pass through immediately to numpy * return np.clip(a, a_min, a_max, out) # <<<<<<<<<<<<<< * a_shape = get_shape(a) * a_min_shape = get_shape(a_min) */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 882; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__clip); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 882; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 882; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __Pyx_INCREF(__pyx_v_a_min); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_a_min); __Pyx_GIVEREF(__pyx_v_a_min); __Pyx_INCREF(__pyx_v_a_max); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_a_max); __Pyx_GIVEREF(__pyx_v_a_max); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 882; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "ga4py/gain/misc.pyx":883 * # no ndarray instances used, pass through immediately to numpy * return np.clip(a, a_min, a_max, out) * a_shape = get_shape(a) # <<<<<<<<<<<<<< * a_min_shape = get_shape(a_min) * a_max_shape = get_shape(a_max) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__get_shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_a_shape = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":884 * return np.clip(a, a_min, a_max, out) * a_shape = get_shape(a) * a_min_shape = get_shape(a_min) # <<<<<<<<<<<<<< * a_max_shape = get_shape(a_max) * if out is None: */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__get_shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_a_min); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_a_min); __Pyx_GIVEREF(__pyx_v_a_min); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_a_min_shape = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":885 * a_shape = get_shape(a) * a_min_shape = get_shape(a_min) * a_max_shape = get_shape(a_max) # <<<<<<<<<<<<<< * if out is None: * out = ndarray(a_shape, get_dtype(a)) */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__get_shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_a_max); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_a_max); __Pyx_GIVEREF(__pyx_v_a_max); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_v_a_max_shape = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":886 * a_min_shape = get_shape(a_min) * a_max_shape = get_shape(a_max) * if out is None: # <<<<<<<<<<<<<< * out = ndarray(a_shape, get_dtype(a)) * # sanity checks */ __pyx_t_4 = (__pyx_v_out == Py_None); __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":887 * a_max_shape = get_shape(a_max) * if out is None: * out = ndarray(a_shape, get_dtype(a)) # <<<<<<<<<<<<<< * # sanity checks * if not is_array(out): */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__get_dtype); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __pyx_t_9 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_a_shape); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_a_shape); __Pyx_GIVEREF(__pyx_v_a_shape); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_9); __Pyx_GIVEREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_out, __pyx_t_9); __pyx_t_9 = 0; goto __pyx_L4; } __pyx_L4:; /* "ga4py/gain/misc.pyx":889 * out = ndarray(a_shape, get_dtype(a)) * # sanity checks * if not is_array(out): # <<<<<<<<<<<<<< * raise TypeError, "output must be an array" * if out.shape != a.shape: */ __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s__is_array); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __pyx_t_2 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = ((!__pyx_t_5) != 0); if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":890 * # sanity checks * if not is_array(out): * raise TypeError, "output must be an array" # <<<<<<<<<<<<<< * if out.shape != a.shape: * raise ValueError, ("clip: Output array must have thesame shape as " */ __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_kp_s_18), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 890; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } __pyx_L5:; /* "ga4py/gain/misc.pyx":891 * if not is_array(out): * raise TypeError, "output must be an array" * if out.shape != a.shape: # <<<<<<<<<<<<<< * raise ValueError, ("clip: Output array must have thesame shape as " * "the input.") */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_NE); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":892 * raise TypeError, "output must be an array" * if out.shape != a.shape: * raise ValueError, ("clip: Output array must have thesame shape as " # <<<<<<<<<<<<<< * "the input.") * # Now figure out what to do... */ __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_19), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 892; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; /* "ga4py/gain/misc.pyx":895 * "the input.") * # Now figure out what to do... * if isinstance(out, ndarray): # <<<<<<<<<<<<<< * sync() * # get out as an np.ndarray first */ __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s__ndarray); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 895; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_4 = PyObject_IsInstance(__pyx_v_out, __pyx_t_9); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 895; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":896 * # Now figure out what to do... * if isinstance(out, ndarray): * sync() # <<<<<<<<<<<<<< * # get out as an np.ndarray first * npout = out.access() */ __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s__sync); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":898 * sync() * # get out as an np.ndarray first * npout = out.access() # <<<<<<<<<<<<<< * if npout is not None: # this proc owns data * # get matching and compatible portions of input arrays */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__access); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 898; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 898; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_npout = __pyx_t_9; __pyx_t_9 = 0; /* "ga4py/gain/misc.pyx":899 * # get out as an np.ndarray first * npout = out.access() * if npout is not None: # this proc owns data # <<<<<<<<<<<<<< * # get matching and compatible portions of input arrays * # broadcasting rules (may) apply */ __pyx_t_5 = (__pyx_v_npout != Py_None); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":902 * # get matching and compatible portions of input arrays * # broadcasting rules (may) apply * if a is out: # <<<<<<<<<<<<<< * npa,release_a = npout,False * else: */ __pyx_t_4 = (__pyx_v_a == __pyx_v_out); __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":903 * # broadcasting rules (may) apply * if a is out: * npa,release_a = npout,False # <<<<<<<<<<<<<< * else: * npa,release_a = _npin_piece_based_on_out(a,out,a_shape) */ __pyx_t_9 = __pyx_v_npout; __Pyx_INCREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 903; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_npa = __pyx_t_9; __pyx_t_9 = 0; __pyx_v_release_a = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L9; } /*else*/ { /* "ga4py/gain/misc.pyx":905 * npa,release_a = npout,False * else: * npa,release_a = _npin_piece_based_on_out(a,out,a_shape) # <<<<<<<<<<<<<< * if a_min is out: * npa_min,release_a_min = npout,False */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_20); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __Pyx_INCREF(__pyx_v_a_shape); PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_v_a_shape); __Pyx_GIVEREF(__pyx_v_a_shape); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { PyObject* sequence = __pyx_t_2; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_9 = PyList_GET_ITEM(sequence, 0); __pyx_t_1 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_1); #else __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); #endif __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { Py_ssize_t index = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_10 = Py_TYPE(__pyx_t_3)->tp_iternext; index = 0; __pyx_t_9 = __pyx_t_10(__pyx_t_3); if (unlikely(!__pyx_t_9)) goto __pyx_L10_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_1 = __pyx_t_10(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L10_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_3), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_10 = NULL; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L11_unpacking_done; __pyx_L10_unpacking_failed:; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_10 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L11_unpacking_done:; } __pyx_v_npa = __pyx_t_9; __pyx_t_9 = 0; __pyx_v_release_a = __pyx_t_1; __pyx_t_1 = 0; } __pyx_L9:; /* "ga4py/gain/misc.pyx":906 * else: * npa,release_a = _npin_piece_based_on_out(a,out,a_shape) * if a_min is out: # <<<<<<<<<<<<<< * npa_min,release_a_min = npout,False * elif a_min is a: */ __pyx_t_5 = (__pyx_v_a_min == __pyx_v_out); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":907 * npa,release_a = _npin_piece_based_on_out(a,out,a_shape) * if a_min is out: * npa_min,release_a_min = npout,False # <<<<<<<<<<<<<< * elif a_min is a: * npa_min,release_a_min = npa,False */ __pyx_t_2 = __pyx_v_npout; __Pyx_INCREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 907; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_npa_min = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_release_a_min = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L12; } /* "ga4py/gain/misc.pyx":908 * if a_min is out: * npa_min,release_a_min = npout,False * elif a_min is a: # <<<<<<<<<<<<<< * npa_min,release_a_min = npa,False * else: */ __pyx_t_4 = (__pyx_v_a_min == __pyx_v_a); __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":909 * npa_min,release_a_min = npout,False * elif a_min is a: * npa_min,release_a_min = npa,False # <<<<<<<<<<<<<< * else: * npa_min,release_a_min = _npin_piece_based_on_out( */ __pyx_t_1 = __pyx_v_npa; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 909; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_npa_min = __pyx_t_1; __pyx_t_1 = 0; __pyx_v_release_a_min = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L12; } /*else*/ { /* "ga4py/gain/misc.pyx":911 * npa_min,release_a_min = npa,False * else: * npa_min,release_a_min = _npin_piece_based_on_out( # <<<<<<<<<<<<<< * a_min,out,a_min_shape) * if a_max is out: */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_20); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 911; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); /* "ga4py/gain/misc.pyx":912 * else: * npa_min,release_a_min = _npin_piece_based_on_out( * a_min,out,a_min_shape) # <<<<<<<<<<<<<< * if a_max is out: * npa_max,release_a_max = npout,False */ __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 911; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_a_min); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_a_min); __Pyx_GIVEREF(__pyx_v_a_min); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __Pyx_INCREF(__pyx_v_a_min_shape); PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_a_min_shape); __Pyx_GIVEREF(__pyx_v_a_min_shape); __pyx_t_9 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 911; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_9))) || (PyList_CheckExact(__pyx_t_9))) { PyObject* sequence = __pyx_t_9; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 911; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_1 = PyList_GET_ITEM(sequence, 0); __pyx_t_2 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_2); #else __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 911; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 911; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); #endif __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } else { Py_ssize_t index = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 911; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_10 = Py_TYPE(__pyx_t_3)->tp_iternext; index = 0; __pyx_t_1 = __pyx_t_10(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L13_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); index = 1; __pyx_t_2 = __pyx_t_10(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L13_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_3), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 911; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_10 = NULL; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L14_unpacking_done; __pyx_L13_unpacking_failed:; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_10 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 911; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L14_unpacking_done:; } /* "ga4py/gain/misc.pyx":911 * npa_min,release_a_min = npa,False * else: * npa_min,release_a_min = _npin_piece_based_on_out( # <<<<<<<<<<<<<< * a_min,out,a_min_shape) * if a_max is out: */ __pyx_v_npa_min = __pyx_t_1; __pyx_t_1 = 0; __pyx_v_release_a_min = __pyx_t_2; __pyx_t_2 = 0; } __pyx_L12:; /* "ga4py/gain/misc.pyx":913 * npa_min,release_a_min = _npin_piece_based_on_out( * a_min,out,a_min_shape) * if a_max is out: # <<<<<<<<<<<<<< * npa_max,release_a_max = npout,False * elif a_max is a: */ __pyx_t_5 = (__pyx_v_a_max == __pyx_v_out); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":914 * a_min,out,a_min_shape) * if a_max is out: * npa_max,release_a_max = npout,False # <<<<<<<<<<<<<< * elif a_max is a: * npa_max,release_a_max = npa,False */ __pyx_t_9 = __pyx_v_npout; __Pyx_INCREF(__pyx_t_9); __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 914; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_npa_max = __pyx_t_9; __pyx_t_9 = 0; __pyx_v_release_a_max = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L15; } /* "ga4py/gain/misc.pyx":915 * if a_max is out: * npa_max,release_a_max = npout,False * elif a_max is a: # <<<<<<<<<<<<<< * npa_max,release_a_max = npa,False * elif a_max is a_min: */ __pyx_t_4 = (__pyx_v_a_max == __pyx_v_a); __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":916 * npa_max,release_a_max = npout,False * elif a_max is a: * npa_max,release_a_max = npa,False # <<<<<<<<<<<<<< * elif a_max is a_min: * npa_max,release_a_max = npa_min,False */ __pyx_t_2 = __pyx_v_npa; __Pyx_INCREF(__pyx_t_2); __pyx_t_9 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_v_npa_max = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_release_a_max = __pyx_t_9; __pyx_t_9 = 0; goto __pyx_L15; } /* "ga4py/gain/misc.pyx":917 * elif a_max is a: * npa_max,release_a_max = npa,False * elif a_max is a_min: # <<<<<<<<<<<<<< * npa_max,release_a_max = npa_min,False * else: */ __pyx_t_5 = (__pyx_v_a_max == __pyx_v_a_min); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":918 * npa_max,release_a_max = npa,False * elif a_max is a_min: * npa_max,release_a_max = npa_min,False # <<<<<<<<<<<<<< * else: * npa_max,release_a_max = _npin_piece_based_on_out( */ __pyx_t_9 = __pyx_v_npa_min; __Pyx_INCREF(__pyx_t_9); __pyx_t_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 918; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_v_npa_max = __pyx_t_9; __pyx_t_9 = 0; __pyx_v_release_a_max = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L15; } /*else*/ { /* "ga4py/gain/misc.pyx":920 * npa_max,release_a_max = npa_min,False * else: * npa_max,release_a_max = _npin_piece_based_on_out( # <<<<<<<<<<<<<< * a_max,out,a_max_shape) * np.clip(npa, npa_min, npa_max, npout) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_20); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); /* "ga4py/gain/misc.pyx":921 * else: * npa_max,release_a_max = _npin_piece_based_on_out( * a_max,out,a_max_shape) # <<<<<<<<<<<<<< * np.clip(npa, npa_min, npa_max, npout) * if release_a: */ __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_INCREF(__pyx_v_a_max); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_a_max); __Pyx_GIVEREF(__pyx_v_a_max); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __Pyx_INCREF(__pyx_v_a_max_shape); PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_v_a_max_shape); __Pyx_GIVEREF(__pyx_v_a_max_shape); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_9 = PyList_GET_ITEM(sequence, 0); __pyx_t_2 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(__pyx_t_2); #else __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = Py_TYPE(__pyx_t_3)->tp_iternext; index = 0; __pyx_t_9 = __pyx_t_10(__pyx_t_3); if (unlikely(!__pyx_t_9)) goto __pyx_L16_unpacking_failed; __Pyx_GOTREF(__pyx_t_9); index = 1; __pyx_t_2 = __pyx_t_10(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L16_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_3), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_10 = NULL; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L17_unpacking_done; __pyx_L16_unpacking_failed:; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_10 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L17_unpacking_done:; } /* "ga4py/gain/misc.pyx":920 * npa_max,release_a_max = npa_min,False * else: * npa_max,release_a_max = _npin_piece_based_on_out( # <<<<<<<<<<<<<< * a_max,out,a_max_shape) * np.clip(npa, npa_min, npa_max, npout) */ __pyx_v_npa_max = __pyx_t_9; __pyx_t_9 = 0; __pyx_v_release_a_max = __pyx_t_2; __pyx_t_2 = 0; } __pyx_L15:; /* "ga4py/gain/misc.pyx":922 * npa_max,release_a_max = _npin_piece_based_on_out( * a_max,out,a_max_shape) * np.clip(npa, npa_min, npa_max, npout) # <<<<<<<<<<<<<< * if release_a: * a.release() */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__clip); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_npa); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_npa); __Pyx_GIVEREF(__pyx_v_npa); __Pyx_INCREF(__pyx_v_npa_min); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_npa_min); __Pyx_GIVEREF(__pyx_v_npa_min); __Pyx_INCREF(__pyx_v_npa_max); PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_npa_max); __Pyx_GIVEREF(__pyx_v_npa_max); __Pyx_INCREF(__pyx_v_npout); PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_npout); __Pyx_GIVEREF(__pyx_v_npout); __pyx_t_9 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; /* "ga4py/gain/misc.pyx":923 * a_max,out,a_max_shape) * np.clip(npa, npa_min, npa_max, npout) * if release_a: # <<<<<<<<<<<<<< * a.release() * if release_a_min: */ __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_release_a); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":924 * np.clip(npa, npa_min, npa_max, npout) * if release_a: * a.release() # <<<<<<<<<<<<<< * if release_a_min: * a_min.release() */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__release); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L18; } __pyx_L18:; /* "ga4py/gain/misc.pyx":925 * if release_a: * a.release() * if release_a_min: # <<<<<<<<<<<<<< * a_min.release() * if release_a_max: */ __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_release_a_min); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 925; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":926 * a.release() * if release_a_min: * a_min.release() # <<<<<<<<<<<<<< * if release_a_max: * a_max.release() */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_a_min, __pyx_n_s__release); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L19; } __pyx_L19:; /* "ga4py/gain/misc.pyx":927 * if release_a_min: * a_min.release() * if release_a_max: # <<<<<<<<<<<<<< * a_max.release() * out.release_update() */ __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_release_a_max); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":928 * a_min.release() * if release_a_max: * a_max.release() # <<<<<<<<<<<<<< * out.release_update() * #sync() */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_a_max, __pyx_n_s__release); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L20; } __pyx_L20:; /* "ga4py/gain/misc.pyx":929 * if release_a_max: * a_max.release() * out.release_update() # <<<<<<<<<<<<<< * #sync() * elif isinstance(out, flatiter): */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s__release_update); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 929; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 929; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L8; } __pyx_L8:; goto __pyx_L7; } /* "ga4py/gain/misc.pyx":931 * out.release_update() * #sync() * elif isinstance(out, flatiter): # <<<<<<<<<<<<<< * raise NotImplementedError, "flatiter version of clip" * #sync() */ __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s__flatiter); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_4 = PyObject_IsInstance(__pyx_v_out, __pyx_t_9); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":932 * #sync() * elif isinstance(out, flatiter): * raise NotImplementedError, "flatiter version of clip" # <<<<<<<<<<<<<< * #sync() * ## first op: first and second and out are same object */ __Pyx_Raise(__pyx_builtin_NotImplementedError, ((PyObject *)__pyx_kp_s_21), 0, 0); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 932; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } /*else*/ { /* "ga4py/gain/misc.pyx":955 * #sync() * else: * sync() # <<<<<<<<<<<<<< * # out is not distributed * nda = a */ __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s__sync); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 955; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":957 * sync() * # out is not distributed * nda = a # <<<<<<<<<<<<<< * if is_distributed(a): * nda = a.allget() */ __Pyx_INCREF(__pyx_v_a); __pyx_v_nda = __pyx_v_a; /* "ga4py/gain/misc.pyx":958 * # out is not distributed * nda = a * if is_distributed(a): # <<<<<<<<<<<<<< * nda = a.allget() * nda_min = a_min */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__is_distributed); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_9), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0; __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":959 * nda = a * if is_distributed(a): * nda = a.allget() # <<<<<<<<<<<<<< * nda_min = a_min * if a is a_min: */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__allget); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_9 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 959; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_nda, __pyx_t_9); __pyx_t_9 = 0; goto __pyx_L21; } __pyx_L21:; /* "ga4py/gain/misc.pyx":960 * if is_distributed(a): * nda = a.allget() * nda_min = a_min # <<<<<<<<<<<<<< * if a is a_min: * nda_min = nda */ __Pyx_INCREF(__pyx_v_a_min); __pyx_v_nda_min = __pyx_v_a_min; /* "ga4py/gain/misc.pyx":961 * nda = a.allget() * nda_min = a_min * if a is a_min: # <<<<<<<<<<<<<< * nda_min = nda * elif is_distributed(a_min): */ __pyx_t_5 = (__pyx_v_a == __pyx_v_a_min); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":962 * nda_min = a_min * if a is a_min: * nda_min = nda # <<<<<<<<<<<<<< * elif is_distributed(a_min): * nda_min = a_min.allget() */ __Pyx_INCREF(__pyx_v_nda); __Pyx_DECREF_SET(__pyx_v_nda_min, __pyx_v_nda); goto __pyx_L22; } /* "ga4py/gain/misc.pyx":963 * if a is a_min: * nda_min = nda * elif is_distributed(a_min): # <<<<<<<<<<<<<< * nda_min = a_min.allget() * nda_max = a_max */ __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s__is_distributed); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_a_min); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a_min); __Pyx_GIVEREF(__pyx_v_a_min); __pyx_t_1 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 963; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":964 * nda_min = nda * elif is_distributed(a_min): * nda_min = a_min.allget() # <<<<<<<<<<<<<< * nda_max = a_max * if a is a_max: */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_a_min, __pyx_n_s__allget); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_nda_min, __pyx_t_2); __pyx_t_2 = 0; goto __pyx_L22; } __pyx_L22:; /* "ga4py/gain/misc.pyx":965 * elif is_distributed(a_min): * nda_min = a_min.allget() * nda_max = a_max # <<<<<<<<<<<<<< * if a is a_max: * nda_max = nda */ __Pyx_INCREF(__pyx_v_a_max); __pyx_v_nda_max = __pyx_v_a_max; /* "ga4py/gain/misc.pyx":966 * nda_min = a_min.allget() * nda_max = a_max * if a is a_max: # <<<<<<<<<<<<<< * nda_max = nda * elif a_max is a_min: */ __pyx_t_4 = (__pyx_v_a == __pyx_v_a_max); __pyx_t_5 = (__pyx_t_4 != 0); if (__pyx_t_5) { /* "ga4py/gain/misc.pyx":967 * nda_max = a_max * if a is a_max: * nda_max = nda # <<<<<<<<<<<<<< * elif a_max is a_min: * nda_max = nda_min */ __Pyx_INCREF(__pyx_v_nda); __Pyx_DECREF_SET(__pyx_v_nda_max, __pyx_v_nda); goto __pyx_L23; } /* "ga4py/gain/misc.pyx":968 * if a is a_max: * nda_max = nda * elif a_max is a_min: # <<<<<<<<<<<<<< * nda_max = nda_min * elif is_distributed(a_max): */ __pyx_t_5 = (__pyx_v_a_max == __pyx_v_a_min); __pyx_t_4 = (__pyx_t_5 != 0); if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":969 * nda_max = nda * elif a_max is a_min: * nda_max = nda_min # <<<<<<<<<<<<<< * elif is_distributed(a_max): * nda_max = a_max.allget() */ __Pyx_INCREF(__pyx_v_nda_min); __Pyx_DECREF_SET(__pyx_v_nda_max, __pyx_v_nda_min); goto __pyx_L23; } /* "ga4py/gain/misc.pyx":970 * elif a_max is a_min: * nda_max = nda_min * elif is_distributed(a_max): # <<<<<<<<<<<<<< * nda_max = a_max.allget() * np.clip(a, nda_min, nda_max, out) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__is_distributed); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_a_max); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_a_max); __Pyx_GIVEREF(__pyx_v_a_max); __pyx_t_9 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (__pyx_t_4) { /* "ga4py/gain/misc.pyx":971 * nda_max = nda_min * elif is_distributed(a_max): * nda_max = a_max.allget() # <<<<<<<<<<<<<< * np.clip(a, nda_min, nda_max, out) * #sync() # I don't think we need this one */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_a_max, __pyx_n_s__allget); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF_SET(__pyx_v_nda_max, __pyx_t_1); __pyx_t_1 = 0; goto __pyx_L23; } __pyx_L23:; /* "ga4py/gain/misc.pyx":972 * elif is_distributed(a_max): * nda_max = a_max.allget() * np.clip(a, nda_min, nda_max, out) # <<<<<<<<<<<<<< * #sync() # I don't think we need this one * return out */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__clip); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __Pyx_INCREF(__pyx_v_nda_min); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_nda_min); __Pyx_GIVEREF(__pyx_v_nda_min); __Pyx_INCREF(__pyx_v_nda_max); PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_nda_max); __Pyx_GIVEREF(__pyx_v_nda_max); __Pyx_INCREF(__pyx_v_out); PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_out); __Pyx_GIVEREF(__pyx_v_out); __pyx_t_2 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __pyx_L7:; /* "ga4py/gain/misc.pyx":974 * np.clip(a, nda_min, nda_max, out) * #sync() # I don't think we need this one * return out # <<<<<<<<<<<<<< * * def indices(dimensions, dtype=int): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_out); __pyx_r = __pyx_v_out; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("ga4py.gain.misc.clip", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_a_shape); __Pyx_XDECREF(__pyx_v_a_min_shape); __Pyx_XDECREF(__pyx_v_a_max_shape); __Pyx_XDECREF(__pyx_v_npout); __Pyx_XDECREF(__pyx_v_npa); __Pyx_XDECREF(__pyx_v_release_a); __Pyx_XDECREF(__pyx_v_npa_min); __Pyx_XDECREF(__pyx_v_release_a_min); __Pyx_XDECREF(__pyx_v_npa_max); __Pyx_XDECREF(__pyx_v_release_a_max); __Pyx_XDECREF(__pyx_v_nda); __Pyx_XDECREF(__pyx_v_nda_min); __Pyx_XDECREF(__pyx_v_nda_max); __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_a_min); __Pyx_XDECREF(__pyx_v_a_max); __Pyx_XDECREF(__pyx_v_out); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_29indices(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_28indices[] = "Return an array representing the indices of a grid.\n\n Compute an array where the subarrays contain index values 0,1,...\n varying only along the corresponding axis.\n\n Parameters\n ----------\n dimensions : sequence of ints\n The shape of the grid.\n dtype : dtype, optional\n Data type of the result.\n\n Returns\n -------\n grid : ndarray\n The array of grid indices,\n ``grid.shape = (len(dimensions),) + tuple(dimensions)``.\n\n See Also\n --------\n mgrid, meshgrid\n\n Notes\n -----\n The output shape is obtained by prepending the number of dimensions\n in front of the tuple of dimensions, i.e. if `dimensions` is a tuple\n ``(r0, ..., rN-1)`` of length ``N``, the output shape is\n ``(N,r0,...,rN-1)``.\n\n The subarrays ``grid[k]`` contains the N-D array of indices along the\n ``k-th`` axis. Explicitly::\n\n grid[k,i0,i1,...,iN-1] = ik\n\n Examples\n --------\n >>> grid = np.indices((2, 3))\n >>> grid.shape\n (2, 2, 3)\n >>> grid[0] # row indices\n array([[0, 0, 0],\n [1, 1, 1]])\n >>> grid[1] # column indices\n array([[0, 1, 2],\n [0, 1, 2]])\n\n The indices can be used as an index into an array.\n\n >>> x = np.arange(20).reshape(5, 4)\n >>> row, col = np.indices((2, 3))\n >>> x[row, col]\n array([[0, 1, 2],\n [4, 5, 6]])\n\n Note that it would be more straightforward in the above example to\n extract the required elements directly with ``x[:2, :3]``.\n\n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_29indices = {__Pyx_NAMESTR("indices"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_29indices, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_28indices)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_29indices(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_dimensions = 0; PyObject *__pyx_v_dtype = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("indices (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__dimensions,&__pyx_n_s__dtype,0}; PyObject* values[2] = {0,0}; values[1] = __pyx_k_22; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dimensions)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dtype); if (value) { values[1] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "indices") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_dimensions = values[0]; __pyx_v_dtype = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("indices", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.misc.indices", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4misc_28indices(__pyx_self, __pyx_v_dimensions, __pyx_v_dtype); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/misc.pyx":976 * return out * * def indices(dimensions, dtype=int): # <<<<<<<<<<<<<< * """Return an array representing the indices of a grid. * */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_28indices(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dimensions, PyObject *__pyx_v_dtype) { PyObject *__pyx_v_orig_shape = NULL; PyObject *__pyx_v_shape = NULL; PyObject *__pyx_v_a = NULL; PyObject *__pyx_v_buf = NULL; PyObject *__pyx_v_lo = NULL; PyObject *__pyx_v_hi = NULL; PyObject *__pyx_v_lohi_shape = NULL; PyObject *__pyx_v_i = NULL; PyObject *__pyx_v_vec = NULL; PyObject *__pyx_v_vec_mod = NULL; PyObject *__pyx_v_values = NULL; PyObject *__pyx_v_dim = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; Py_ssize_t __pyx_t_3; PyObject *(*__pyx_t_4)(PyObject *); PyObject *__pyx_t_5 = NULL; int __pyx_t_6; PyObject *__pyx_t_7 = NULL; int __pyx_t_8; PyObject *(*__pyx_t_9)(PyObject *); Py_ssize_t __pyx_t_10; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("indices", 0); __Pyx_TraceCall("indices", __pyx_f[0], 976); /* "ga4py/gain/misc.pyx":1035 * * """ * orig_shape = [dim for dim in dimensions] # <<<<<<<<<<<<<< * shape = [len(orig_shape)] + orig_shape * if should_distribute(shape): */ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyList_CheckExact(__pyx_v_dimensions) || PyTuple_CheckExact(__pyx_v_dimensions)) { __pyx_t_2 = __pyx_v_dimensions; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_dimensions); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; } for (;;) { if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) { if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) { if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_5 = __pyx_t_4(__pyx_t_2); if (unlikely(!__pyx_t_5)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_5); } __Pyx_XDECREF_SET(__pyx_v_dim, __pyx_t_5); __pyx_t_5 = 0; if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_v_dim))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_orig_shape = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":1036 * """ * orig_shape = [dim for dim in dimensions] * shape = [len(orig_shape)] + orig_shape # <<<<<<<<<<<<<< * if should_distribute(shape): * a = zeros(shape, dtype=dtype) */ __pyx_t_3 = PyList_GET_SIZE(((PyObject *)__pyx_v_orig_shape)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1036; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1036; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1036; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyNumber_Add(((PyObject *)__pyx_t_2), ((PyObject *)__pyx_v_orig_shape)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1036; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_v_shape = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":1037 * orig_shape = [dim for dim in dimensions] * shape = [len(orig_shape)] + orig_shape * if should_distribute(shape): # <<<<<<<<<<<<<< * a = zeros(shape, dtype=dtype) * buf = a.access() */ __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__should_distribute); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1037; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1037; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_v_shape)); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_shape)); __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1037; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1037; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_6) { /* "ga4py/gain/misc.pyx":1038 * shape = [len(orig_shape)] + orig_shape * if should_distribute(shape): * a = zeros(shape, dtype=dtype) # <<<<<<<<<<<<<< * buf = a.access() * if buf is not None: */ __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__zeros); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_v_shape)); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_shape)); __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_v_dtype) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_7 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_v_a = __pyx_t_7; __pyx_t_7 = 0; /* "ga4py/gain/misc.pyx":1039 * if should_distribute(shape): * a = zeros(shape, dtype=dtype) * buf = a.access() # <<<<<<<<<<<<<< * if buf is not None: * lo,hi = a.distribution() */ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__access); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1039; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_1 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1039; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_buf = __pyx_t_1; __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":1040 * a = zeros(shape, dtype=dtype) * buf = a.access() * if buf is not None: # <<<<<<<<<<<<<< * lo,hi = a.distribution() * lohi_shape = hi-lo */ __pyx_t_6 = (__pyx_v_buf != Py_None); __pyx_t_8 = (__pyx_t_6 != 0); if (__pyx_t_8) { /* "ga4py/gain/misc.pyx":1041 * buf = a.access() * if buf is not None: * lo,hi = a.distribution() # <<<<<<<<<<<<<< * lohi_shape = hi-lo * for i in range(lo[0],hi[0]): */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__distribution); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1041; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1041; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) { PyObject* sequence = __pyx_t_7; #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1041; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_1 = PyList_GET_ITEM(sequence, 0); __pyx_t_2 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_2); #else __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1041; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1041; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); #endif __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } else { Py_ssize_t index = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1041; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_9 = Py_TYPE(__pyx_t_5)->tp_iternext; index = 0; __pyx_t_1 = __pyx_t_9(__pyx_t_5); if (unlikely(!__pyx_t_1)) goto __pyx_L7_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); index = 1; __pyx_t_2 = __pyx_t_9(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L7_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1041; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_9 = NULL; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L8_unpacking_done; __pyx_L7_unpacking_failed:; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1041; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L8_unpacking_done:; } __pyx_v_lo = __pyx_t_1; __pyx_t_1 = 0; __pyx_v_hi = __pyx_t_2; __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":1042 * if buf is not None: * lo,hi = a.distribution() * lohi_shape = hi-lo # <<<<<<<<<<<<<< * for i in range(lo[0],hi[0]): * vec = np.arange(lohi_shape[i+1])+lo[i+1] */ __pyx_t_7 = PyNumber_Subtract(__pyx_v_hi, __pyx_v_lo); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_v_lohi_shape = __pyx_t_7; __pyx_t_7 = 0; /* "ga4py/gain/misc.pyx":1043 * lo,hi = a.distribution() * lohi_shape = hi-lo * for i in range(lo[0],hi[0]): # <<<<<<<<<<<<<< * vec = np.arange(lohi_shape[i+1])+lo[i+1] * vec_mod = [None]*len(orig_shape) */ __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_lo, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_hi, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_7 = 0; __pyx_t_2 = 0; __pyx_t_2 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = Py_TYPE(__pyx_t_1)->tp_iternext; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_1)) { if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_1)) { if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif } else { __pyx_t_2 = __pyx_t_4(__pyx_t_1); if (unlikely(!__pyx_t_2)) { if (PyErr_Occurred()) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear(); else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } break; } __Pyx_GOTREF(__pyx_t_2); } __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":1044 * lohi_shape = hi-lo * for i in range(lo[0],hi[0]): * vec = np.arange(lohi_shape[i+1])+lo[i+1] # <<<<<<<<<<<<<< * vec_mod = [None]*len(orig_shape) * vec_mod[i] = slice(None,None,None) */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__arange); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Add(__pyx_v_i, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = PyObject_GetItem(__pyx_v_lohi_shape, __pyx_t_2); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Add(__pyx_v_i, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = PyObject_GetItem(__pyx_v_lo, __pyx_t_2); if (!__pyx_t_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Add(__pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF_SET(__pyx_v_vec, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":1045 * for i in range(lo[0],hi[0]): * vec = np.arange(lohi_shape[i+1])+lo[i+1] * vec_mod = [None]*len(orig_shape) # <<<<<<<<<<<<<< * vec_mod[i] = slice(None,None,None) * values = vec[vec_mod] */ __pyx_t_10 = PyList_GET_SIZE(((PyObject *)__pyx_v_orig_shape)); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_2 = PyList_New(1 * ((__pyx_t_10<0) ? 0:__pyx_t_10)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < __pyx_t_10; __pyx_temp++) { __Pyx_INCREF(Py_None); PyList_SET_ITEM(__pyx_t_2, __pyx_temp, Py_None); __Pyx_GIVEREF(Py_None); } } __Pyx_XDECREF_SET(__pyx_v_vec_mod, ((PyObject*)__pyx_t_2)); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":1046 * vec = np.arange(lohi_shape[i+1])+lo[i+1] * vec_mod = [None]*len(orig_shape) * vec_mod[i] = slice(None,None,None) # <<<<<<<<<<<<<< * values = vec[vec_mod] * buf[i-lo[0]][:] = values */ __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PySlice_Type))), ((PyObject *)__pyx_k_tuple_23), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1046; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyObject_SetItem(((PyObject *)__pyx_v_vec_mod), __pyx_v_i, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1046; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":1047 * vec_mod = [None]*len(orig_shape) * vec_mod[i] = slice(None,None,None) * values = vec[vec_mod] # <<<<<<<<<<<<<< * buf[i-lo[0]][:] = values * a.release_update() */ __pyx_t_2 = PyObject_GetItem(__pyx_v_vec, ((PyObject *)__pyx_v_vec_mod)); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_XDECREF_SET(__pyx_v_values, __pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":1048 * vec_mod[i] = slice(None,None,None) * values = vec[vec_mod] * buf[i-lo[0]][:] = values # <<<<<<<<<<<<<< * a.release_update() * else: */ __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_lo, 0, sizeof(long), PyInt_FromLong, 0, 0, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = PyNumber_Subtract(__pyx_v_i, __pyx_t_2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyObject_GetItem(__pyx_v_buf, __pyx_t_7); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (__Pyx_PyObject_SetSlice(__pyx_t_2, __pyx_v_values, 0, 0, NULL, NULL, &__pyx_k_slice_24, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":1049 * values = vec[vec_mod] * buf[i-lo[0]][:] = values * a.release_update() # <<<<<<<<<<<<<< * else: * return np.indices(orig_shape,dtype) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_a, __pyx_n_s__release_update); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1049; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1049; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L6; } __pyx_L6:; goto __pyx_L5; } /*else*/ { /* "ga4py/gain/misc.pyx":1051 * a.release_update() * else: * return np.indices(orig_shape,dtype) # <<<<<<<<<<<<<< * return a * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1051; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__indices); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1051; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1051; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_v_orig_shape)); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_orig_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_v_orig_shape)); __Pyx_INCREF(__pyx_v_dtype); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_dtype); __Pyx_GIVEREF(__pyx_v_dtype); __pyx_t_7 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1051; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_r = __pyx_t_7; __pyx_t_7 = 0; goto __pyx_L0; } __pyx_L5:; /* "ga4py/gain/misc.pyx":1052 * else: * return np.indices(orig_shape,dtype) * return a # <<<<<<<<<<<<<< * * def shape(a): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_a); __pyx_r = __pyx_v_a; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("ga4py.gain.misc.indices", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_orig_shape); __Pyx_XDECREF(__pyx_v_shape); __Pyx_XDECREF(__pyx_v_a); __Pyx_XDECREF(__pyx_v_buf); __Pyx_XDECREF(__pyx_v_lo); __Pyx_XDECREF(__pyx_v_hi); __Pyx_XDECREF(__pyx_v_lohi_shape); __Pyx_XDECREF(__pyx_v_i); __Pyx_XDECREF(__pyx_v_vec); __Pyx_XDECREF(__pyx_v_vec_mod); __Pyx_XDECREF(__pyx_v_values); __Pyx_XDECREF(__pyx_v_dim); __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_31shape(PyObject *__pyx_self, PyObject *__pyx_v_a); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_30shape[] = "Return the shape of an array.\n\n Parameters\n ----------\n a : array_like\n Input array.\n\n Returns\n -------\n shape : tuple of ints\n The elements of the shape tuple give the lengths of the\n corresponding array dimensions.\n\n See Also\n --------\n alen\n ndarray.shape : Equivalent array method.\n\n Examples\n --------\n >>> np.shape(np.eye(3))\n (3, 3)\n >>> np.shape([[1, 2]])\n (1, 2)\n >>> np.shape([0])\n (1,)\n >>> np.shape(0)\n ()\n\n >>> a = np.array([(1, 2), (3, 4)], dtype=[('x', 'i4'), ('y', 'i4')])\n >>> np.shape(a)\n (2,)\n >>> a.shape\n (2,)\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_31shape = {__Pyx_NAMESTR("shape"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_31shape, METH_O, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_30shape)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_31shape(PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("shape (wrapper)", 0); __pyx_r = __pyx_pf_5ga4py_4gain_4misc_30shape(__pyx_self, ((PyObject *)__pyx_v_a)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/misc.pyx":1054 * return a * * def shape(a): # <<<<<<<<<<<<<< * """Return the shape of an array. * */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_30shape(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("shape", 0); __Pyx_TraceCall("shape", __pyx_f[0], 1054); /* "ga4py/gain/misc.pyx":1091 * * """ * return asarray(a).shape # <<<<<<<<<<<<<< * * def diagonal(a, offset=0, axis1=0, axis2=1): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1091; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.misc.shape", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_pw_5ga4py_4gain_4misc_33diagonal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5ga4py_4gain_4misc_32diagonal[] = "Return specified diagonals.\n\n If `a` is 2-D, returns the diagonal of `a` with the given offset,\n i.e., the collection of elements of the form ``a[i, i+offset]``. If\n `a` has more than two dimensions, then the axes specified by `axis1`\n and `axis2` are used to determine the 2-D sub-array whose diagonal is\n returned. The shape of the resulting array can be determined by\n removing `axis1` and `axis2` and appending an index to the right equal\n to the size of the resulting diagonals.\n\n Parameters\n ----------\n a : array_like\n Array from which the diagonals are taken.\n offset : int, optional\n Offset of the diagonal from the main diagonal. Can be positive or\n negative. Defaults to main diagonal (0).\n axis1 : int, optional\n Axis to be used as the first axis of the 2-D sub-arrays from which\n the diagonals should be taken. Defaults to first axis (0).\n axis2 : int, optional\n Axis to be used as the second axis of the 2-D sub-arrays from\n which the diagonals should be taken. Defaults to second axis (1).\n\n Returns\n -------\n array_of_diagonals : ndarray\n If `a` is 2-D, a 1-D array containing the diagonal is returned.\n If the dimension of `a` is larger, then an array of diagonals is\n returned, \"packed\" from left-most dimension to right-most (e.g.,\n if `a` is 3-D, then the diagonals are \"packed\" along rows).\n\n Raises\n ------\n ValueError\n If the dimension of `a` is less than 2.\n\n See Also\n --------\n diag : MATLAB work-a-like for 1-D and 2-D arrays.\n diagflat : Create diagonal arrays.\n trace : Sum along diagonals.\n\n Examples\n --------\n >>> a = np.arange(4).reshape(2,2)\n >>> a\n array([[0, 1],\n [2, 3]])\n >>> a.diagonal()\n array([0, 3])\n >>> a.diagonal(1)\n array([1])\n\n A 3-D example:\n\n >>> a = np.arange(8).reshape(2,2,2); a\n ""array([[[0, 1],\n [2, 3]],\n [[4, 5],\n [6, 7]]])\n >>> a.diagonal(0, # Main diagonals of two arrays created by skipping\n ... 0, # across the outer(left)-most axis last and\n ... 1) # the \"middle\" (row) axis first.\n array([[0, 6],\n [1, 7]])\n\n The sub-arrays whose main diagonals we just obtained; note that each\n corresponds to fixing the right-most (column) axis, and that the\n diagonals are \"packed\" in rows.\n\n >>> a[:,:,0] # main diagonal is [0 6]\n array([[0, 2],\n [4, 6]])\n >>> a[:,:,1] # main diagonal is [1 7]\n array([[1, 3],\n [5, 7]])\n \n "; static PyMethodDef __pyx_mdef_5ga4py_4gain_4misc_33diagonal = {__Pyx_NAMESTR("diagonal"), (PyCFunction)__pyx_pw_5ga4py_4gain_4misc_33diagonal, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5ga4py_4gain_4misc_32diagonal)}; static PyObject *__pyx_pw_5ga4py_4gain_4misc_33diagonal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_a = 0; PyObject *__pyx_v_offset = 0; PyObject *__pyx_v_axis1 = 0; PyObject *__pyx_v_axis2 = 0; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("diagonal (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__offset,&__pyx_n_s__axis1,&__pyx_n_s__axis2,0}; PyObject* values[4] = {0,0,0,0}; values[1] = ((PyObject *)__pyx_int_0); values[2] = ((PyObject *)__pyx_int_0); values[3] = ((PyObject *)__pyx_int_1); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; case 1: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__offset); if (value) { values[1] = value; kw_args--; } } case 2: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis1); if (value) { values[2] = value; kw_args--; } } case 3: if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__axis2); if (value) { values[3] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "diagonal") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_a = values[0]; __pyx_v_offset = values[1]; __pyx_v_axis1 = values[2]; __pyx_v_axis2 = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("diagonal", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("ga4py.gain.misc.diagonal", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5ga4py_4gain_4misc_32diagonal(__pyx_self, __pyx_v_a, __pyx_v_offset, __pyx_v_axis1, __pyx_v_axis2); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "ga4py/gain/misc.pyx":1093 * return asarray(a).shape * * def diagonal(a, offset=0, axis1=0, axis2=1): # <<<<<<<<<<<<<< * """Return specified diagonals. * */ static PyObject *__pyx_pf_5ga4py_4gain_4misc_32diagonal(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_a, PyObject *__pyx_v_offset, PyObject *__pyx_v_axis1, PyObject *__pyx_v_axis2) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("diagonal", 0); __Pyx_TraceCall("diagonal", __pyx_f[0], 1093); /* "ga4py/gain/misc.pyx":1173 * * """ * return asarray(a).diagonal(offset, axis1, axis2) # <<<<<<<<<<<<<< */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_a); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_a); __Pyx_GIVEREF(__pyx_v_a); __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__diagonal); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_offset); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_offset); __Pyx_GIVEREF(__pyx_v_offset); __Pyx_INCREF(__pyx_v_axis1); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_axis1); __Pyx_GIVEREF(__pyx_v_axis1); __Pyx_INCREF(__pyx_v_axis2); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_axis2); __Pyx_GIVEREF(__pyx_v_axis2); __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("ga4py.gain.misc.diagonal", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":194 * # experimental exception made for __getbuffer__ and __releasebuffer__ * # -- the details of this may change. * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< * # This implementation of getbuffer is geared towards Cython * # requirements, and does not yet fullfill the PEP. */ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { int __pyx_v_copy_shape; int __pyx_v_i; int __pyx_v_ndim; int __pyx_v_endian_detector; int __pyx_v_little_endian; int __pyx_v_t; char *__pyx_v_f; PyArray_Descr *__pyx_v_descr = 0; int __pyx_v_offset; int __pyx_v_hasfields; int __pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; char *__pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__getbuffer__", 0); if (__pyx_v_info != NULL) { __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); __Pyx_GIVEREF(__pyx_v_info->obj); } __Pyx_TraceCall("__getbuffer__", __pyx_f[1], 194); /* "numpy.pxd":200 * # of flags * * if info == NULL: return # <<<<<<<<<<<<<< * * cdef int copy_shape, i, ndim */ __pyx_t_1 = ((__pyx_v_info == NULL) != 0); if (__pyx_t_1) { __pyx_r = 0; goto __pyx_L0; goto __pyx_L3; } __pyx_L3:; /* "numpy.pxd":203 * * cdef int copy_shape, i, ndim * cdef int endian_detector = 1 # <<<<<<<<<<<<<< * cdef bint little_endian = ((&endian_detector)[0] != 0) * */ __pyx_v_endian_detector = 1; /* "numpy.pxd":204 * cdef int copy_shape, i, ndim * cdef int endian_detector = 1 * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< * * ndim = PyArray_NDIM(self) */ __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); /* "numpy.pxd":206 * cdef bint little_endian = ((&endian_detector)[0] != 0) * * ndim = PyArray_NDIM(self) # <<<<<<<<<<<<<< * * if sizeof(npy_intp) != sizeof(Py_ssize_t): */ __pyx_v_ndim = PyArray_NDIM(__pyx_v_self); /* "numpy.pxd":208 * ndim = PyArray_NDIM(self) * * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< * copy_shape = 1 * else: */ __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); if (__pyx_t_1) { /* "numpy.pxd":209 * * if sizeof(npy_intp) != sizeof(Py_ssize_t): * copy_shape = 1 # <<<<<<<<<<<<<< * else: * copy_shape = 0 */ __pyx_v_copy_shape = 1; goto __pyx_L4; } /*else*/ { /* "numpy.pxd":211 * copy_shape = 1 * else: * copy_shape = 0 # <<<<<<<<<<<<<< * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) */ __pyx_v_copy_shape = 0; } __pyx_L4:; /* "numpy.pxd":213 * copy_shape = 0 * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") */ __pyx_t_1 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0); if (__pyx_t_1) { /* "numpy.pxd":214 * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): # <<<<<<<<<<<<<< * raise ValueError(u"ndarray is not C contiguous") * */ __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS) != 0)) != 0); __pyx_t_3 = __pyx_t_2; } else { __pyx_t_3 = __pyx_t_1; } if (__pyx_t_3) { /* "numpy.pxd":215 * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) */ __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_26), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L5; } __pyx_L5:; /* "numpy.pxd":217 * raise ValueError(u"ndarray is not C contiguous") * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") */ __pyx_t_3 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0); if (__pyx_t_3) { /* "numpy.pxd":218 * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): # <<<<<<<<<<<<<< * raise ValueError(u"ndarray is not Fortran contiguous") * */ __pyx_t_1 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS) != 0)) != 0); __pyx_t_2 = __pyx_t_1; } else { __pyx_t_2 = __pyx_t_3; } if (__pyx_t_2) { /* "numpy.pxd":219 * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< * * info.buf = PyArray_DATA(self) */ __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_28), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; /* "numpy.pxd":221 * raise ValueError(u"ndarray is not Fortran contiguous") * * info.buf = PyArray_DATA(self) # <<<<<<<<<<<<<< * info.ndim = ndim * if copy_shape: */ __pyx_v_info->buf = PyArray_DATA(__pyx_v_self); /* "numpy.pxd":222 * * info.buf = PyArray_DATA(self) * info.ndim = ndim # <<<<<<<<<<<<<< * if copy_shape: * # Allocate new buffer for strides and shape info. */ __pyx_v_info->ndim = __pyx_v_ndim; /* "numpy.pxd":223 * info.buf = PyArray_DATA(self) * info.ndim = ndim * if copy_shape: # <<<<<<<<<<<<<< * # Allocate new buffer for strides and shape info. * # This is allocated as one block, strides first. */ __pyx_t_2 = (__pyx_v_copy_shape != 0); if (__pyx_t_2) { /* "numpy.pxd":226 * # Allocate new buffer for strides and shape info. * # This is allocated as one block, strides first. * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) # <<<<<<<<<<<<<< * info.shape = info.strides + ndim * for i in range(ndim): */ __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2))); /* "numpy.pxd":227 * # This is allocated as one block, strides first. * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) * info.shape = info.strides + ndim # <<<<<<<<<<<<<< * for i in range(ndim): * info.strides[i] = PyArray_STRIDES(self)[i] */ __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim); /* "numpy.pxd":228 * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) * info.shape = info.strides + ndim * for i in range(ndim): # <<<<<<<<<<<<<< * info.strides[i] = PyArray_STRIDES(self)[i] * info.shape[i] = PyArray_DIMS(self)[i] */ __pyx_t_5 = __pyx_v_ndim; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_i = __pyx_t_6; /* "numpy.pxd":229 * info.shape = info.strides + ndim * for i in range(ndim): * info.strides[i] = PyArray_STRIDES(self)[i] # <<<<<<<<<<<<<< * info.shape[i] = PyArray_DIMS(self)[i] * else: */ (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]); /* "numpy.pxd":230 * for i in range(ndim): * info.strides[i] = PyArray_STRIDES(self)[i] * info.shape[i] = PyArray_DIMS(self)[i] # <<<<<<<<<<<<<< * else: * info.strides = PyArray_STRIDES(self) */ (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]); } goto __pyx_L7; } /*else*/ { /* "numpy.pxd":232 * info.shape[i] = PyArray_DIMS(self)[i] * else: * info.strides = PyArray_STRIDES(self) # <<<<<<<<<<<<<< * info.shape = PyArray_DIMS(self) * info.suboffsets = NULL */ __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self)); /* "numpy.pxd":233 * else: * info.strides = PyArray_STRIDES(self) * info.shape = PyArray_DIMS(self) # <<<<<<<<<<<<<< * info.suboffsets = NULL * info.itemsize = PyArray_ITEMSIZE(self) */ __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self)); } __pyx_L7:; /* "numpy.pxd":234 * info.strides = PyArray_STRIDES(self) * info.shape = PyArray_DIMS(self) * info.suboffsets = NULL # <<<<<<<<<<<<<< * info.itemsize = PyArray_ITEMSIZE(self) * info.readonly = not PyArray_ISWRITEABLE(self) */ __pyx_v_info->suboffsets = NULL; /* "numpy.pxd":235 * info.shape = PyArray_DIMS(self) * info.suboffsets = NULL * info.itemsize = PyArray_ITEMSIZE(self) # <<<<<<<<<<<<<< * info.readonly = not PyArray_ISWRITEABLE(self) * */ __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self); /* "numpy.pxd":236 * info.suboffsets = NULL * info.itemsize = PyArray_ITEMSIZE(self) * info.readonly = not PyArray_ISWRITEABLE(self) # <<<<<<<<<<<<<< * * cdef int t */ __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0)); /* "numpy.pxd":239 * * cdef int t * cdef char* f = NULL # <<<<<<<<<<<<<< * cdef dtype descr = self.descr * cdef list stack */ __pyx_v_f = NULL; /* "numpy.pxd":240 * cdef int t * cdef char* f = NULL * cdef dtype descr = self.descr # <<<<<<<<<<<<<< * cdef list stack * cdef int offset */ __pyx_t_4 = ((PyObject *)__pyx_v_self->descr); __Pyx_INCREF(__pyx_t_4); __pyx_v_descr = ((PyArray_Descr *)__pyx_t_4); __pyx_t_4 = 0; /* "numpy.pxd":244 * cdef int offset * * cdef bint hasfields = PyDataType_HASFIELDS(descr) # <<<<<<<<<<<<<< * * if not hasfields and not copy_shape: */ __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr); /* "numpy.pxd":246 * cdef bint hasfields = PyDataType_HASFIELDS(descr) * * if not hasfields and not copy_shape: # <<<<<<<<<<<<<< * # do not call releasebuffer * info.obj = None */ __pyx_t_2 = ((!(__pyx_v_hasfields != 0)) != 0); if (__pyx_t_2) { __pyx_t_3 = ((!(__pyx_v_copy_shape != 0)) != 0); __pyx_t_1 = __pyx_t_3; } else { __pyx_t_1 = __pyx_t_2; } if (__pyx_t_1) { /* "numpy.pxd":248 * if not hasfields and not copy_shape: * # do not call releasebuffer * info.obj = None # <<<<<<<<<<<<<< * else: * # need to call releasebuffer */ __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = Py_None; goto __pyx_L10; } /*else*/ { /* "numpy.pxd":251 * else: * # need to call releasebuffer * info.obj = self # <<<<<<<<<<<<<< * * if not hasfields: */ __Pyx_INCREF(((PyObject *)__pyx_v_self)); __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = ((PyObject *)__pyx_v_self); } __pyx_L10:; /* "numpy.pxd":253 * info.obj = self * * if not hasfields: # <<<<<<<<<<<<<< * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or */ __pyx_t_1 = ((!(__pyx_v_hasfields != 0)) != 0); if (__pyx_t_1) { /* "numpy.pxd":254 * * if not hasfields: * t = descr.type_num # <<<<<<<<<<<<<< * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): */ __pyx_t_5 = __pyx_v_descr->type_num; __pyx_v_t = __pyx_t_5; /* "numpy.pxd":255 * if not hasfields: * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") */ __pyx_t_1 = ((__pyx_v_descr->byteorder == '>') != 0); if (__pyx_t_1) { __pyx_t_2 = (__pyx_v_little_endian != 0); } else { __pyx_t_2 = __pyx_t_1; } if (!__pyx_t_2) { /* "numpy.pxd":256 * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< * raise ValueError(u"Non-native byte order not supported") * if t == NPY_BYTE: f = "b" */ __pyx_t_1 = ((__pyx_v_descr->byteorder == '<') != 0); if (__pyx_t_1) { __pyx_t_3 = ((!(__pyx_v_little_endian != 0)) != 0); __pyx_t_7 = __pyx_t_3; } else { __pyx_t_7 = __pyx_t_1; } __pyx_t_1 = __pyx_t_7; } else { __pyx_t_1 = __pyx_t_2; } if (__pyx_t_1) { /* "numpy.pxd":257 * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" */ __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_30), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L12; } __pyx_L12:; /* "numpy.pxd":274 * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) */ switch (__pyx_v_t) { /* "numpy.pxd":258 * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") * if t == NPY_BYTE: f = "b" # <<<<<<<<<<<<<< * elif t == NPY_UBYTE: f = "B" * elif t == NPY_SHORT: f = "h" */ case NPY_BYTE: __pyx_v_f = __pyx_k__b; break; /* "numpy.pxd":259 * raise ValueError(u"Non-native byte order not supported") * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" # <<<<<<<<<<<<<< * elif t == NPY_SHORT: f = "h" * elif t == NPY_USHORT: f = "H" */ case NPY_UBYTE: __pyx_v_f = __pyx_k__B; break; /* "numpy.pxd":260 * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" * elif t == NPY_SHORT: f = "h" # <<<<<<<<<<<<<< * elif t == NPY_USHORT: f = "H" * elif t == NPY_INT: f = "i" */ case NPY_SHORT: __pyx_v_f = __pyx_k__h; break; /* "numpy.pxd":261 * elif t == NPY_UBYTE: f = "B" * elif t == NPY_SHORT: f = "h" * elif t == NPY_USHORT: f = "H" # <<<<<<<<<<<<<< * elif t == NPY_INT: f = "i" * elif t == NPY_UINT: f = "I" */ case NPY_USHORT: __pyx_v_f = __pyx_k__H; break; /* "numpy.pxd":262 * elif t == NPY_SHORT: f = "h" * elif t == NPY_USHORT: f = "H" * elif t == NPY_INT: f = "i" # <<<<<<<<<<<<<< * elif t == NPY_UINT: f = "I" * elif t == NPY_LONG: f = "l" */ case NPY_INT: __pyx_v_f = __pyx_k__i; break; /* "numpy.pxd":263 * elif t == NPY_USHORT: f = "H" * elif t == NPY_INT: f = "i" * elif t == NPY_UINT: f = "I" # <<<<<<<<<<<<<< * elif t == NPY_LONG: f = "l" * elif t == NPY_ULONG: f = "L" */ case NPY_UINT: __pyx_v_f = __pyx_k__I; break; /* "numpy.pxd":264 * elif t == NPY_INT: f = "i" * elif t == NPY_UINT: f = "I" * elif t == NPY_LONG: f = "l" # <<<<<<<<<<<<<< * elif t == NPY_ULONG: f = "L" * elif t == NPY_LONGLONG: f = "q" */ case NPY_LONG: __pyx_v_f = __pyx_k__l; break; /* "numpy.pxd":265 * elif t == NPY_UINT: f = "I" * elif t == NPY_LONG: f = "l" * elif t == NPY_ULONG: f = "L" # <<<<<<<<<<<<<< * elif t == NPY_LONGLONG: f = "q" * elif t == NPY_ULONGLONG: f = "Q" */ case NPY_ULONG: __pyx_v_f = __pyx_k__L; break; /* "numpy.pxd":266 * elif t == NPY_LONG: f = "l" * elif t == NPY_ULONG: f = "L" * elif t == NPY_LONGLONG: f = "q" # <<<<<<<<<<<<<< * elif t == NPY_ULONGLONG: f = "Q" * elif t == NPY_FLOAT: f = "f" */ case NPY_LONGLONG: __pyx_v_f = __pyx_k__q; break; /* "numpy.pxd":267 * elif t == NPY_ULONG: f = "L" * elif t == NPY_LONGLONG: f = "q" * elif t == NPY_ULONGLONG: f = "Q" # <<<<<<<<<<<<<< * elif t == NPY_FLOAT: f = "f" * elif t == NPY_DOUBLE: f = "d" */ case NPY_ULONGLONG: __pyx_v_f = __pyx_k__Q; break; /* "numpy.pxd":268 * elif t == NPY_LONGLONG: f = "q" * elif t == NPY_ULONGLONG: f = "Q" * elif t == NPY_FLOAT: f = "f" # <<<<<<<<<<<<<< * elif t == NPY_DOUBLE: f = "d" * elif t == NPY_LONGDOUBLE: f = "g" */ case NPY_FLOAT: __pyx_v_f = __pyx_k__f; break; /* "numpy.pxd":269 * elif t == NPY_ULONGLONG: f = "Q" * elif t == NPY_FLOAT: f = "f" * elif t == NPY_DOUBLE: f = "d" # <<<<<<<<<<<<<< * elif t == NPY_LONGDOUBLE: f = "g" * elif t == NPY_CFLOAT: f = "Zf" */ case NPY_DOUBLE: __pyx_v_f = __pyx_k__d; break; /* "numpy.pxd":270 * elif t == NPY_FLOAT: f = "f" * elif t == NPY_DOUBLE: f = "d" * elif t == NPY_LONGDOUBLE: f = "g" # <<<<<<<<<<<<<< * elif t == NPY_CFLOAT: f = "Zf" * elif t == NPY_CDOUBLE: f = "Zd" */ case NPY_LONGDOUBLE: __pyx_v_f = __pyx_k__g; break; /* "numpy.pxd":271 * elif t == NPY_DOUBLE: f = "d" * elif t == NPY_LONGDOUBLE: f = "g" * elif t == NPY_CFLOAT: f = "Zf" # <<<<<<<<<<<<<< * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" */ case NPY_CFLOAT: __pyx_v_f = __pyx_k__Zf; break; /* "numpy.pxd":272 * elif t == NPY_LONGDOUBLE: f = "g" * elif t == NPY_CFLOAT: f = "Zf" * elif t == NPY_CDOUBLE: f = "Zd" # <<<<<<<<<<<<<< * elif t == NPY_CLONGDOUBLE: f = "Zg" * elif t == NPY_OBJECT: f = "O" */ case NPY_CDOUBLE: __pyx_v_f = __pyx_k__Zd; break; /* "numpy.pxd":273 * elif t == NPY_CFLOAT: f = "Zf" * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" # <<<<<<<<<<<<<< * elif t == NPY_OBJECT: f = "O" * else: */ case NPY_CLONGDOUBLE: __pyx_v_f = __pyx_k__Zg; break; /* "numpy.pxd":274 * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) */ case NPY_OBJECT: __pyx_v_f = __pyx_k__O; break; default: /* "numpy.pxd":276 * elif t == NPY_OBJECT: f = "O" * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< * info.format = f * return */ __pyx_t_4 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_31), __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_8)); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_8)); __Pyx_GIVEREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0; __pyx_t_8 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} break; } /* "numpy.pxd":277 * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) * info.format = f # <<<<<<<<<<<<<< * return * else: */ __pyx_v_info->format = __pyx_v_f; /* "numpy.pxd":278 * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) * info.format = f * return # <<<<<<<<<<<<<< * else: * info.format = stdlib.malloc(_buffer_format_string_len) */ __pyx_r = 0; goto __pyx_L0; goto __pyx_L11; } /*else*/ { /* "numpy.pxd":280 * return * else: * info.format = stdlib.malloc(_buffer_format_string_len) # <<<<<<<<<<<<<< * info.format[0] = c'^' # Native data types, manual alignment * offset = 0 */ __pyx_v_info->format = ((char *)malloc(255)); /* "numpy.pxd":281 * else: * info.format = stdlib.malloc(_buffer_format_string_len) * info.format[0] = c'^' # Native data types, manual alignment # <<<<<<<<<<<<<< * offset = 0 * f = _util_dtypestring(descr, info.format + 1, */ (__pyx_v_info->format[0]) = '^'; /* "numpy.pxd":282 * info.format = stdlib.malloc(_buffer_format_string_len) * info.format[0] = c'^' # Native data types, manual alignment * offset = 0 # <<<<<<<<<<<<<< * f = _util_dtypestring(descr, info.format + 1, * info.format + _buffer_format_string_len, */ __pyx_v_offset = 0; /* "numpy.pxd":285 * f = _util_dtypestring(descr, info.format + 1, * info.format + _buffer_format_string_len, * &offset) # <<<<<<<<<<<<<< * f[0] = c'\0' # Terminate format string * */ __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_f = __pyx_t_9; /* "numpy.pxd":286 * info.format + _buffer_format_string_len, * &offset) * f[0] = c'\0' # Terminate format string # <<<<<<<<<<<<<< * * def __releasebuffer__(ndarray self, Py_buffer* info): */ (__pyx_v_f[0]) = '\x00'; } __pyx_L11:; __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) { __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL; } goto __pyx_L2; __pyx_L0:; if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) { __Pyx_GOTREF(Py_None); __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL; } __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_descr); __Pyx_TraceReturn(Py_None); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/ static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0); __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info)); __Pyx_RefNannyFinishContext(); } /* "numpy.pxd":288 * f[0] = c'\0' # Terminate format string * * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< * if PyArray_HASFIELDS(self): * stdlib.free(info.format) */ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) { __Pyx_RefNannyDeclarations int __pyx_t_1; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("__releasebuffer__", 0); __Pyx_TraceCall("__releasebuffer__", __pyx_f[1], 288); /* "numpy.pxd":289 * * def __releasebuffer__(ndarray self, Py_buffer* info): * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< * stdlib.free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): */ __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0); if (__pyx_t_1) { /* "numpy.pxd":290 * def __releasebuffer__(ndarray self, Py_buffer* info): * if PyArray_HASFIELDS(self): * stdlib.free(info.format) # <<<<<<<<<<<<<< * if sizeof(npy_intp) != sizeof(Py_ssize_t): * stdlib.free(info.strides) */ free(__pyx_v_info->format); goto __pyx_L3; } __pyx_L3:; /* "numpy.pxd":291 * if PyArray_HASFIELDS(self): * stdlib.free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< * stdlib.free(info.strides) * # info.shape was stored after info.strides in the same block */ __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); if (__pyx_t_1) { /* "numpy.pxd":292 * stdlib.free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): * stdlib.free(info.strides) # <<<<<<<<<<<<<< * # info.shape was stored after info.strides in the same block * */ free(__pyx_v_info->strides); goto __pyx_L4; } __pyx_L4:; __Pyx_TraceReturn(Py_None); __Pyx_RefNannyFinishContext(); } /* "numpy.pxd":768 * ctypedef npy_cdouble complex_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(1, a) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0); __Pyx_TraceCall("PyArray_MultiIterNew1", __pyx_f[1], 768); /* "numpy.pxd":769 * * cdef inline object PyArray_MultiIterNew1(a): * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew2(a, b): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":771 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(2, a, b) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0); __Pyx_TraceCall("PyArray_MultiIterNew2", __pyx_f[1], 771); /* "numpy.pxd":772 * * cdef inline object PyArray_MultiIterNew2(a, b): * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew3(a, b, c): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":774 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(3, a, b, c) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0); __Pyx_TraceCall("PyArray_MultiIterNew3", __pyx_f[1], 774); /* "numpy.pxd":775 * * cdef inline object PyArray_MultiIterNew3(a, b, c): * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":777 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(4, a, b, c, d) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0); __Pyx_TraceCall("PyArray_MultiIterNew4", __pyx_f[1], 777); /* "numpy.pxd":778 * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":780 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(5, a, b, c, d, e) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0); __Pyx_TraceCall("PyArray_MultiIterNew5", __pyx_f[1], 780); /* "numpy.pxd":781 * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< * * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":783 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< * # Recursive utility function used in __getbuffer__ to get format * # string. The new location in the format string is returned. */ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) { PyArray_Descr *__pyx_v_child = 0; int __pyx_v_endian_detector; int __pyx_v_little_endian; PyObject *__pyx_v_fields = 0; PyObject *__pyx_v_childname = NULL; PyObject *__pyx_v_new_offset = NULL; PyObject *__pyx_v_t = NULL; char *__pyx_r; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; Py_ssize_t __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *(*__pyx_t_6)(PyObject *); int __pyx_t_7; int __pyx_t_8; int __pyx_t_9; int __pyx_t_10; long __pyx_t_11; char *__pyx_t_12; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("_util_dtypestring", 0); __Pyx_TraceCall("_util_dtypestring", __pyx_f[1], 783); /* "numpy.pxd":790 * cdef int delta_offset * cdef tuple i * cdef int endian_detector = 1 # <<<<<<<<<<<<<< * cdef bint little_endian = ((&endian_detector)[0] != 0) * cdef tuple fields */ __pyx_v_endian_detector = 1; /* "numpy.pxd":791 * cdef tuple i * cdef int endian_detector = 1 * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< * cdef tuple fields * */ __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); /* "numpy.pxd":794 * cdef tuple fields * * for childname in descr.names: # <<<<<<<<<<<<<< * fields = descr.fields[childname] * child, new_offset = fields */ if (unlikely(((PyObject *)__pyx_v_descr->names) == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_1 = ((PyObject *)__pyx_v_descr->names); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; for (;;) { if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3); __pyx_t_3 = 0; /* "numpy.pxd":795 * * for childname in descr.names: * fields = descr.fields[childname] # <<<<<<<<<<<<<< * child, new_offset = fields * */ __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (!__pyx_t_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0; /* "numpy.pxd":796 * for childname in descr.names: * fields = descr.fields[childname] * child, new_offset = fields # <<<<<<<<<<<<<< * * if (end - f) - (new_offset - offset[0]) < 15: */ if (likely(PyTuple_CheckExact(((PyObject *)__pyx_v_fields)))) { PyObject* sequence = ((PyObject *)__pyx_v_fields); #if CYTHON_COMPILING_IN_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); #else __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); #endif } else if (1) { __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else { Py_ssize_t index = -1; __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_fields)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_6 = NULL; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_L6_unpacking_done:; } if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_XDECREF_SET(__pyx_v_child, ((PyArray_Descr *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4); __pyx_t_4 = 0; /* "numpy.pxd":798 * child, new_offset = fields * * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") * */ __pyx_t_4 = PyInt_FromLong((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { /* "numpy.pxd":799 * * if (end - f) - (new_offset - offset[0]) < 15: * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< * * if ((child.byteorder == c'>' and little_endian) or */ __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_33), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; /* "numpy.pxd":801 * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") * * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< * (child.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") */ __pyx_t_7 = ((__pyx_v_child->byteorder == '>') != 0); if (__pyx_t_7) { __pyx_t_8 = (__pyx_v_little_endian != 0); } else { __pyx_t_8 = __pyx_t_7; } if (!__pyx_t_8) { /* "numpy.pxd":802 * * if ((child.byteorder == c'>' and little_endian) or * (child.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< * raise ValueError(u"Non-native byte order not supported") * # One could encode it in the format string and have Cython */ __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0); if (__pyx_t_7) { __pyx_t_9 = ((!(__pyx_v_little_endian != 0)) != 0); __pyx_t_10 = __pyx_t_9; } else { __pyx_t_10 = __pyx_t_7; } __pyx_t_7 = __pyx_t_10; } else { __pyx_t_7 = __pyx_t_8; } if (__pyx_t_7) { /* "numpy.pxd":803 * if ((child.byteorder == c'>' and little_endian) or * (child.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * # One could encode it in the format string and have Cython * # complain instead, BUT: < and > in format strings also imply */ __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_34), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; /* "numpy.pxd":813 * * # Output padding bytes * while offset[0] < new_offset: # <<<<<<<<<<<<<< * f[0] = 120 # "x"; pad byte * f += 1 */ while (1) { __pyx_t_5 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!__pyx_t_7) break; /* "numpy.pxd":814 * # Output padding bytes * while offset[0] < new_offset: * f[0] = 120 # "x"; pad byte # <<<<<<<<<<<<<< * f += 1 * offset[0] += 1 */ (__pyx_v_f[0]) = 120; /* "numpy.pxd":815 * while offset[0] < new_offset: * f[0] = 120 # "x"; pad byte * f += 1 # <<<<<<<<<<<<<< * offset[0] += 1 * */ __pyx_v_f = (__pyx_v_f + 1); /* "numpy.pxd":816 * f[0] = 120 # "x"; pad byte * f += 1 * offset[0] += 1 # <<<<<<<<<<<<<< * * offset[0] += child.itemsize */ __pyx_t_11 = 0; (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + 1); } /* "numpy.pxd":818 * offset[0] += 1 * * offset[0] += child.itemsize # <<<<<<<<<<<<<< * * if not PyDataType_HASFIELDS(child): */ __pyx_t_11 = 0; (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + __pyx_v_child->elsize); /* "numpy.pxd":820 * offset[0] += child.itemsize * * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< * t = child.type_num * if end - f < 5: */ __pyx_t_7 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0); if (__pyx_t_7) { /* "numpy.pxd":821 * * if not PyDataType_HASFIELDS(child): * t = child.type_num # <<<<<<<<<<<<<< * if end - f < 5: * raise RuntimeError(u"Format string allocated too short.") */ __pyx_t_3 = PyInt_FromLong(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_3); __pyx_t_3 = 0; /* "numpy.pxd":822 * if not PyDataType_HASFIELDS(child): * t = child.type_num * if end - f < 5: # <<<<<<<<<<<<<< * raise RuntimeError(u"Format string allocated too short.") * */ __pyx_t_7 = (((__pyx_v_end - __pyx_v_f) < 5) != 0); if (__pyx_t_7) { /* "numpy.pxd":823 * t = child.type_num * if end - f < 5: * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< * * # Until ticket #99 is fixed, use integers to avoid warnings */ __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_36), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L12; } __pyx_L12:; /* "numpy.pxd":826 * * # Until ticket #99 is fixed, use integers to avoid warnings * if t == NPY_BYTE: f[0] = 98 #"b" # <<<<<<<<<<<<<< * elif t == NPY_UBYTE: f[0] = 66 #"B" * elif t == NPY_SHORT: f[0] = 104 #"h" */ __pyx_t_3 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 98; goto __pyx_L13; } /* "numpy.pxd":827 * # Until ticket #99 is fixed, use integers to avoid warnings * if t == NPY_BYTE: f[0] = 98 #"b" * elif t == NPY_UBYTE: f[0] = 66 #"B" # <<<<<<<<<<<<<< * elif t == NPY_SHORT: f[0] = 104 #"h" * elif t == NPY_USHORT: f[0] = 72 #"H" */ __pyx_t_5 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 66; goto __pyx_L13; } /* "numpy.pxd":828 * if t == NPY_BYTE: f[0] = 98 #"b" * elif t == NPY_UBYTE: f[0] = 66 #"B" * elif t == NPY_SHORT: f[0] = 104 #"h" # <<<<<<<<<<<<<< * elif t == NPY_USHORT: f[0] = 72 #"H" * elif t == NPY_INT: f[0] = 105 #"i" */ __pyx_t_3 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 104; goto __pyx_L13; } /* "numpy.pxd":829 * elif t == NPY_UBYTE: f[0] = 66 #"B" * elif t == NPY_SHORT: f[0] = 104 #"h" * elif t == NPY_USHORT: f[0] = 72 #"H" # <<<<<<<<<<<<<< * elif t == NPY_INT: f[0] = 105 #"i" * elif t == NPY_UINT: f[0] = 73 #"I" */ __pyx_t_5 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 72; goto __pyx_L13; } /* "numpy.pxd":830 * elif t == NPY_SHORT: f[0] = 104 #"h" * elif t == NPY_USHORT: f[0] = 72 #"H" * elif t == NPY_INT: f[0] = 105 #"i" # <<<<<<<<<<<<<< * elif t == NPY_UINT: f[0] = 73 #"I" * elif t == NPY_LONG: f[0] = 108 #"l" */ __pyx_t_3 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 105; goto __pyx_L13; } /* "numpy.pxd":831 * elif t == NPY_USHORT: f[0] = 72 #"H" * elif t == NPY_INT: f[0] = 105 #"i" * elif t == NPY_UINT: f[0] = 73 #"I" # <<<<<<<<<<<<<< * elif t == NPY_LONG: f[0] = 108 #"l" * elif t == NPY_ULONG: f[0] = 76 #"L" */ __pyx_t_5 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 73; goto __pyx_L13; } /* "numpy.pxd":832 * elif t == NPY_INT: f[0] = 105 #"i" * elif t == NPY_UINT: f[0] = 73 #"I" * elif t == NPY_LONG: f[0] = 108 #"l" # <<<<<<<<<<<<<< * elif t == NPY_ULONG: f[0] = 76 #"L" * elif t == NPY_LONGLONG: f[0] = 113 #"q" */ __pyx_t_3 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 108; goto __pyx_L13; } /* "numpy.pxd":833 * elif t == NPY_UINT: f[0] = 73 #"I" * elif t == NPY_LONG: f[0] = 108 #"l" * elif t == NPY_ULONG: f[0] = 76 #"L" # <<<<<<<<<<<<<< * elif t == NPY_LONGLONG: f[0] = 113 #"q" * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" */ __pyx_t_5 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 76; goto __pyx_L13; } /* "numpy.pxd":834 * elif t == NPY_LONG: f[0] = 108 #"l" * elif t == NPY_ULONG: f[0] = 76 #"L" * elif t == NPY_LONGLONG: f[0] = 113 #"q" # <<<<<<<<<<<<<< * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" * elif t == NPY_FLOAT: f[0] = 102 #"f" */ __pyx_t_3 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 113; goto __pyx_L13; } /* "numpy.pxd":835 * elif t == NPY_ULONG: f[0] = 76 #"L" * elif t == NPY_LONGLONG: f[0] = 113 #"q" * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" # <<<<<<<<<<<<<< * elif t == NPY_FLOAT: f[0] = 102 #"f" * elif t == NPY_DOUBLE: f[0] = 100 #"d" */ __pyx_t_5 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 81; goto __pyx_L13; } /* "numpy.pxd":836 * elif t == NPY_LONGLONG: f[0] = 113 #"q" * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" * elif t == NPY_FLOAT: f[0] = 102 #"f" # <<<<<<<<<<<<<< * elif t == NPY_DOUBLE: f[0] = 100 #"d" * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" */ __pyx_t_3 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 102; goto __pyx_L13; } /* "numpy.pxd":837 * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" * elif t == NPY_FLOAT: f[0] = 102 #"f" * elif t == NPY_DOUBLE: f[0] = 100 #"d" # <<<<<<<<<<<<<< * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf */ __pyx_t_5 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 100; goto __pyx_L13; } /* "numpy.pxd":838 * elif t == NPY_FLOAT: f[0] = 102 #"f" * elif t == NPY_DOUBLE: f[0] = 100 #"d" * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" # <<<<<<<<<<<<<< * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd */ __pyx_t_3 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 103; goto __pyx_L13; } /* "numpy.pxd":839 * elif t == NPY_DOUBLE: f[0] = 100 #"d" * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf # <<<<<<<<<<<<<< * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg */ __pyx_t_5 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 90; (__pyx_v_f[1]) = 102; __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L13; } /* "numpy.pxd":840 * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd # <<<<<<<<<<<<<< * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg * elif t == NPY_OBJECT: f[0] = 79 #"O" */ __pyx_t_3 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 90; (__pyx_v_f[1]) = 100; __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L13; } /* "numpy.pxd":841 * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg # <<<<<<<<<<<<<< * elif t == NPY_OBJECT: f[0] = 79 #"O" * else: */ __pyx_t_5 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 90; (__pyx_v_f[1]) = 103; __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L13; } /* "numpy.pxd":842 * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg * elif t == NPY_OBJECT: f[0] = 79 #"O" # <<<<<<<<<<<<<< * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) */ __pyx_t_3 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_7) { (__pyx_v_f[0]) = 79; goto __pyx_L13; } /*else*/ { /* "numpy.pxd":844 * elif t == NPY_OBJECT: f[0] = 79 #"O" * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< * f += 1 * else: */ __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_31), __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_5)); __Pyx_GIVEREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_L13:; /* "numpy.pxd":845 * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) * f += 1 # <<<<<<<<<<<<<< * else: * # Cython ignores struct boundary information ("T{...}"), */ __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L11; } /*else*/ { /* "numpy.pxd":849 * # Cython ignores struct boundary information ("T{...}"), * # so don't output it * f = _util_dtypestring(child, f, end, offset) # <<<<<<<<<<<<<< * return f * */ __pyx_t_12 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_12 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_f = __pyx_t_12; } __pyx_L11:; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "numpy.pxd":850 * # so don't output it * f = _util_dtypestring(child, f, end, offset) * return f # <<<<<<<<<<<<<< * * */ __pyx_r = __pyx_v_f; goto __pyx_L0; __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_child); __Pyx_XDECREF(__pyx_v_fields); __Pyx_XDECREF(__pyx_v_childname); __Pyx_XDECREF(__pyx_v_new_offset); __Pyx_XDECREF(__pyx_v_t); __Pyx_TraceReturn(Py_None); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "numpy.pxd":965 * * * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< * cdef PyObject* baseptr * if base is None: */ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { PyObject *__pyx_v_baseptr; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("set_array_base", 0); __Pyx_TraceCall("set_array_base", __pyx_f[1], 965); /* "numpy.pxd":967 * cdef inline void set_array_base(ndarray arr, object base): * cdef PyObject* baseptr * if base is None: # <<<<<<<<<<<<<< * baseptr = NULL * else: */ __pyx_t_1 = (__pyx_v_base == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "numpy.pxd":968 * cdef PyObject* baseptr * if base is None: * baseptr = NULL # <<<<<<<<<<<<<< * else: * Py_INCREF(base) # important to do this before decref below! */ __pyx_v_baseptr = NULL; goto __pyx_L3; } /*else*/ { /* "numpy.pxd":970 * baseptr = NULL * else: * Py_INCREF(base) # important to do this before decref below! # <<<<<<<<<<<<<< * baseptr = base * Py_XDECREF(arr.base) */ Py_INCREF(__pyx_v_base); /* "numpy.pxd":971 * else: * Py_INCREF(base) # important to do this before decref below! * baseptr = base # <<<<<<<<<<<<<< * Py_XDECREF(arr.base) * arr.base = baseptr */ __pyx_v_baseptr = ((PyObject *)__pyx_v_base); } __pyx_L3:; /* "numpy.pxd":972 * Py_INCREF(base) # important to do this before decref below! * baseptr = base * Py_XDECREF(arr.base) # <<<<<<<<<<<<<< * arr.base = baseptr * */ Py_XDECREF(__pyx_v_arr->base); /* "numpy.pxd":973 * baseptr = base * Py_XDECREF(arr.base) * arr.base = baseptr # <<<<<<<<<<<<<< * * cdef inline object get_array_base(ndarray arr): */ __pyx_v_arr->base = __pyx_v_baseptr; __Pyx_TraceReturn(Py_None); __Pyx_RefNannyFinishContext(); } /* "numpy.pxd":975 * arr.base = baseptr * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< * if arr.base is NULL: * return None */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; __Pyx_TraceDeclarations __Pyx_RefNannySetupContext("get_array_base", 0); __Pyx_TraceCall("get_array_base", __pyx_f[1], 975); /* "numpy.pxd":976 * * cdef inline object get_array_base(ndarray arr): * if arr.base is NULL: # <<<<<<<<<<<<<< * return None * else: */ __pyx_t_1 = ((__pyx_v_arr->base == NULL) != 0); if (__pyx_t_1) { /* "numpy.pxd":977 * cdef inline object get_array_base(ndarray arr): * if arr.base is NULL: * return None # <<<<<<<<<<<<<< * else: * return arr.base */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_None); __pyx_r = Py_None; goto __pyx_L0; goto __pyx_L3; } /*else*/ { /* "numpy.pxd":979 * return None * else: * return arr.base # <<<<<<<<<<<<<< */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_arr->base)); __pyx_r = ((PyObject *)__pyx_v_arr->base); goto __pyx_L0; } __pyx_L3:; __pyx_r = Py_None; __Pyx_INCREF(Py_None); __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_TraceReturn(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyMethodDef __pyx_methods[] = { {0, 0, 0, 0} }; #if PY_MAJOR_VERSION >= 3 static struct PyModuleDef __pyx_moduledef = { #if PY_VERSION_HEX < 0x03020000 { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, #else PyModuleDef_HEAD_INIT, #endif __Pyx_NAMESTR("misc"), 0, /* m_doc */ -1, /* m_size */ __pyx_methods /* m_methods */, NULL, /* m_reload */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL /* m_free */ }; #endif static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_kp_u_100, __pyx_k_100, sizeof(__pyx_k_100), 0, 1, 0, 0}, {&__pyx_kp_u_101, __pyx_k_101, sizeof(__pyx_k_101), 0, 1, 0, 0}, {&__pyx_kp_u_102, __pyx_k_102, sizeof(__pyx_k_102), 0, 1, 0, 0}, {&__pyx_kp_u_103, __pyx_k_103, sizeof(__pyx_k_103), 0, 1, 0, 0}, {&__pyx_kp_u_104, __pyx_k_104, sizeof(__pyx_k_104), 0, 1, 0, 0}, {&__pyx_kp_u_105, __pyx_k_105, sizeof(__pyx_k_105), 0, 1, 0, 0}, {&__pyx_kp_u_106, __pyx_k_106, sizeof(__pyx_k_106), 0, 1, 0, 0}, {&__pyx_kp_s_16, __pyx_k_16, sizeof(__pyx_k_16), 0, 0, 1, 0}, {&__pyx_kp_s_17, __pyx_k_17, sizeof(__pyx_k_17), 0, 0, 1, 0}, {&__pyx_kp_s_18, __pyx_k_18, sizeof(__pyx_k_18), 0, 0, 1, 0}, {&__pyx_kp_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 0}, {&__pyx_n_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 1}, {&__pyx_kp_s_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 1, 0}, {&__pyx_kp_u_25, __pyx_k_25, sizeof(__pyx_k_25), 0, 1, 0, 0}, {&__pyx_kp_u_27, __pyx_k_27, sizeof(__pyx_k_27), 0, 1, 0, 0}, {&__pyx_kp_u_29, __pyx_k_29, sizeof(__pyx_k_29), 0, 1, 0, 0}, {&__pyx_kp_u_31, __pyx_k_31, sizeof(__pyx_k_31), 0, 1, 0, 0}, {&__pyx_kp_u_32, __pyx_k_32, sizeof(__pyx_k_32), 0, 1, 0, 0}, {&__pyx_kp_u_35, __pyx_k_35, sizeof(__pyx_k_35), 0, 1, 0, 0}, {&__pyx_kp_s_39, __pyx_k_39, sizeof(__pyx_k_39), 0, 0, 1, 0}, {&__pyx_n_s_40, __pyx_k_40, sizeof(__pyx_k_40), 0, 0, 1, 1}, {&__pyx_kp_u_73, __pyx_k_73, sizeof(__pyx_k_73), 0, 1, 0, 0}, {&__pyx_kp_u_74, __pyx_k_74, sizeof(__pyx_k_74), 0, 1, 0, 0}, {&__pyx_kp_u_75, __pyx_k_75, sizeof(__pyx_k_75), 0, 1, 0, 0}, {&__pyx_kp_u_76, __pyx_k_76, sizeof(__pyx_k_76), 0, 1, 0, 0}, {&__pyx_kp_u_77, __pyx_k_77, sizeof(__pyx_k_77), 0, 1, 0, 0}, {&__pyx_kp_u_78, __pyx_k_78, sizeof(__pyx_k_78), 0, 1, 0, 0}, {&__pyx_kp_u_79, __pyx_k_79, sizeof(__pyx_k_79), 0, 1, 0, 0}, {&__pyx_kp_s_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 0, 1, 0}, {&__pyx_kp_u_80, __pyx_k_80, sizeof(__pyx_k_80), 0, 1, 0, 0}, {&__pyx_kp_u_81, __pyx_k_81, sizeof(__pyx_k_81), 0, 1, 0, 0}, {&__pyx_kp_u_82, __pyx_k_82, sizeof(__pyx_k_82), 0, 1, 0, 0}, {&__pyx_kp_u_83, __pyx_k_83, sizeof(__pyx_k_83), 0, 1, 0, 0}, {&__pyx_kp_u_84, __pyx_k_84, sizeof(__pyx_k_84), 0, 1, 0, 0}, {&__pyx_kp_u_85, __pyx_k_85, sizeof(__pyx_k_85), 0, 1, 0, 0}, {&__pyx_kp_u_86, __pyx_k_86, sizeof(__pyx_k_86), 0, 1, 0, 0}, {&__pyx_kp_u_87, __pyx_k_87, sizeof(__pyx_k_87), 0, 1, 0, 0}, {&__pyx_kp_u_88, __pyx_k_88, sizeof(__pyx_k_88), 0, 1, 0, 0}, {&__pyx_kp_u_89, __pyx_k_89, sizeof(__pyx_k_89), 0, 1, 0, 0}, {&__pyx_kp_s_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 0, 1, 0}, {&__pyx_kp_u_90, __pyx_k_90, sizeof(__pyx_k_90), 0, 1, 0, 0}, {&__pyx_kp_u_91, __pyx_k_91, sizeof(__pyx_k_91), 0, 1, 0, 0}, {&__pyx_kp_u_92, __pyx_k_92, sizeof(__pyx_k_92), 0, 1, 0, 0}, {&__pyx_kp_u_93, __pyx_k_93, sizeof(__pyx_k_93), 0, 1, 0, 0}, {&__pyx_kp_u_94, __pyx_k_94, sizeof(__pyx_k_94), 0, 1, 0, 0}, {&__pyx_kp_u_95, __pyx_k_95, sizeof(__pyx_k_95), 0, 1, 0, 0}, {&__pyx_kp_u_96, __pyx_k_96, sizeof(__pyx_k_96), 0, 1, 0, 0}, {&__pyx_kp_u_97, __pyx_k_97, sizeof(__pyx_k_97), 0, 1, 0, 0}, {&__pyx_kp_u_98, __pyx_k_98, sizeof(__pyx_k_98), 0, 1, 0, 0}, {&__pyx_kp_u_99, __pyx_k_99, sizeof(__pyx_k_99), 0, 1, 0, 0}, {&__pyx_n_s__C, __pyx_k__C, sizeof(__pyx_k__C), 0, 0, 1, 1}, {&__pyx_n_s__K, __pyx_k__K, sizeof(__pyx_k__K), 0, 0, 1, 1}, {&__pyx_n_s__M, __pyx_k__M, sizeof(__pyx_k__M), 0, 0, 1, 1}, {&__pyx_n_s__N, __pyx_k__N, sizeof(__pyx_k__N), 0, 0, 1, 1}, {&__pyx_n_s__NotImplementedError, __pyx_k__NotImplementedError, sizeof(__pyx_k__NotImplementedError), 0, 0, 1, 1}, {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1}, {&__pyx_n_s__T, __pyx_k__T, sizeof(__pyx_k__T), 0, 0, 1, 1}, {&__pyx_n_s__TODO, __pyx_k__TODO, sizeof(__pyx_k__TODO), 0, 0, 1, 1}, {&__pyx_n_s__TypeError, __pyx_k__TypeError, sizeof(__pyx_k__TypeError), 0, 0, 1, 1}, {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1}, {&__pyx_n_s____import__, __pyx_k____import__, sizeof(__pyx_k____import__), 0, 0, 1, 1}, {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, {&__pyx_n_s___base, __pyx_k___base, sizeof(__pyx_k___base), 0, 0, 1, 1}, {&__pyx_n_s__a, __pyx_k__a, sizeof(__pyx_k__a), 0, 0, 1, 1}, {&__pyx_n_s__a_local, __pyx_k__a_local, sizeof(__pyx_k__a_local), 0, 0, 1, 1}, {&__pyx_n_s__a_max, __pyx_k__a_max, sizeof(__pyx_k__a_max), 0, 0, 1, 1}, {&__pyx_n_s__a_max_shape, __pyx_k__a_max_shape, sizeof(__pyx_k__a_max_shape), 0, 0, 1, 1}, {&__pyx_n_s__a_min, __pyx_k__a_min, sizeof(__pyx_k__a_min), 0, 0, 1, 1}, {&__pyx_n_s__a_min_shape, __pyx_k__a_min_shape, sizeof(__pyx_k__a_min_shape), 0, 0, 1, 1}, {&__pyx_n_s__a_shape, __pyx_k__a_shape, sizeof(__pyx_k__a_shape), 0, 0, 1, 1}, {&__pyx_n_s__access, __pyx_k__access, sizeof(__pyx_k__access), 0, 0, 1, 1}, {&__pyx_n_s__add, __pyx_k__add, sizeof(__pyx_k__add), 0, 0, 1, 1}, {&__pyx_n_s__allget, __pyx_k__allget, sizeof(__pyx_k__allget), 0, 0, 1, 1}, {&__pyx_n_s__arange, __pyx_k__arange, sizeof(__pyx_k__arange), 0, 0, 1, 1}, {&__pyx_n_s__args, __pyx_k__args, sizeof(__pyx_k__args), 0, 0, 1, 1}, {&__pyx_n_s__asarray, __pyx_k__asarray, sizeof(__pyx_k__asarray), 0, 0, 1, 1}, {&__pyx_n_s__axis, __pyx_k__axis, sizeof(__pyx_k__axis), 0, 0, 1, 1}, {&__pyx_n_s__axis1, __pyx_k__axis1, sizeof(__pyx_k__axis1), 0, 0, 1, 1}, {&__pyx_n_s__axis2, __pyx_k__axis2, sizeof(__pyx_k__axis2), 0, 0, 1, 1}, {&__pyx_n_s__b, __pyx_k__b, sizeof(__pyx_k__b), 0, 0, 1, 1}, {&__pyx_n_s__base, __pyx_k__base, sizeof(__pyx_k__base), 0, 0, 1, 1}, {&__pyx_n_s__bindex, __pyx_k__bindex, sizeof(__pyx_k__bindex), 0, 0, 1, 1}, {&__pyx_n_s__buf, __pyx_k__buf, sizeof(__pyx_k__buf), 0, 0, 1, 1}, {&__pyx_n_s__ceil, __pyx_k__ceil, sizeof(__pyx_k__ceil), 0, 0, 1, 1}, {&__pyx_n_s__clip, __pyx_k__clip, sizeof(__pyx_k__clip), 0, 0, 1, 1}, {&__pyx_n_s__complex128, __pyx_k__complex128, sizeof(__pyx_k__complex128), 0, 0, 1, 1}, {&__pyx_n_s__complex64, __pyx_k__complex64, sizeof(__pyx_k__complex64), 0, 0, 1, 1}, {&__pyx_n_s__core, __pyx_k__core, sizeof(__pyx_k__core), 0, 0, 1, 1}, {&__pyx_n_s__diag, __pyx_k__diag, sizeof(__pyx_k__diag), 0, 0, 1, 1}, {&__pyx_n_s__diagonal, __pyx_k__diagonal, sizeof(__pyx_k__diagonal), 0, 0, 1, 1}, {&__pyx_n_s__dim, __pyx_k__dim, sizeof(__pyx_k__dim), 0, 0, 1, 1}, {&__pyx_n_s__dimensions, __pyx_k__dimensions, sizeof(__pyx_k__dimensions), 0, 0, 1, 1}, {&__pyx_n_s__distribution, __pyx_k__distribution, sizeof(__pyx_k__distribution), 0, 0, 1, 1}, {&__pyx_n_s__dot, __pyx_k__dot, sizeof(__pyx_k__dot), 0, 0, 1, 1}, {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1}, {&__pyx_n_s__empty, __pyx_k__empty, sizeof(__pyx_k__empty), 0, 0, 1, 1}, {&__pyx_n_s__empty_like, __pyx_k__empty_like, sizeof(__pyx_k__empty_like), 0, 0, 1, 1}, {&__pyx_n_s__endpoint, __pyx_k__endpoint, sizeof(__pyx_k__endpoint), 0, 0, 1, 1}, {&__pyx_n_s__eye, __pyx_k__eye, sizeof(__pyx_k__eye), 0, 0, 1, 1}, {&__pyx_n_s__flat, __pyx_k__flat, sizeof(__pyx_k__flat), 0, 0, 1, 1}, {&__pyx_n_s__flatiter, __pyx_k__flatiter, sizeof(__pyx_k__flatiter), 0, 0, 1, 1}, {&__pyx_n_s__float, __pyx_k__float, sizeof(__pyx_k__float), 0, 0, 1, 1}, {&__pyx_n_s__float32, __pyx_k__float32, sizeof(__pyx_k__float32), 0, 0, 1, 1}, {&__pyx_n_s__float64, __pyx_k__float64, sizeof(__pyx_k__float64), 0, 0, 1, 1}, {&__pyx_n_s__fromfunction, __pyx_k__fromfunction, sizeof(__pyx_k__fromfunction), 0, 0, 1, 1}, {&__pyx_n_s__func, __pyx_k__func, sizeof(__pyx_k__func), 0, 0, 1, 1}, {&__pyx_n_s__ga, __pyx_k__ga, sizeof(__pyx_k__ga), 0, 0, 1, 1}, {&__pyx_n_s__ga4py, __pyx_k__ga4py, sizeof(__pyx_k__ga4py), 0, 0, 1, 1}, {&__pyx_n_s__gemm, __pyx_k__gemm, sizeof(__pyx_k__gemm), 0, 0, 1, 1}, {&__pyx_n_s__get_dtype, __pyx_k__get_dtype, sizeof(__pyx_k__get_dtype), 0, 0, 1, 1}, {&__pyx_n_s__get_shape, __pyx_k__get_shape, sizeof(__pyx_k__get_shape), 0, 0, 1, 1}, {&__pyx_n_s__gop_add, __pyx_k__gop_add, sizeof(__pyx_k__gop_add), 0, 0, 1, 1}, {&__pyx_n_s__handle, __pyx_k__handle, sizeof(__pyx_k__handle), 0, 0, 1, 1}, {&__pyx_n_s__hi, __pyx_k__hi, sizeof(__pyx_k__hi), 0, 0, 1, 1}, {&__pyx_n_s__i, __pyx_k__i, sizeof(__pyx_k__i), 0, 0, 1, 1}, {&__pyx_n_s__identity, __pyx_k__identity, sizeof(__pyx_k__identity), 0, 0, 1, 1}, {&__pyx_n_s__index, __pyx_k__index, sizeof(__pyx_k__index), 0, 0, 1, 1}, {&__pyx_n_s__indices, __pyx_k__indices, sizeof(__pyx_k__indices), 0, 0, 1, 1}, {&__pyx_n_s__int64, __pyx_k__int64, sizeof(__pyx_k__int64), 0, 0, 1, 1}, {&__pyx_n_s__is_array, __pyx_k__is_array, sizeof(__pyx_k__is_array), 0, 0, 1, 1}, {&__pyx_n_s__is_distributed, __pyx_k__is_distributed, sizeof(__pyx_k__is_distributed), 0, 0, 1, 1}, {&__pyx_n_s__itemsize, __pyx_k__itemsize, sizeof(__pyx_k__itemsize), 0, 0, 1, 1}, {&__pyx_n_s__k, __pyx_k__k, sizeof(__pyx_k__k), 0, 0, 1, 1}, {&__pyx_n_s__kwargs, __pyx_k__kwargs, sizeof(__pyx_k__kwargs), 0, 0, 1, 1}, {&__pyx_n_s__length, __pyx_k__length, sizeof(__pyx_k__length), 0, 0, 1, 1}, {&__pyx_n_s__linspace, __pyx_k__linspace, sizeof(__pyx_k__linspace), 0, 0, 1, 1}, {&__pyx_n_s__lo, __pyx_k__lo, sizeof(__pyx_k__lo), 0, 0, 1, 1}, {&__pyx_n_s__local_array, __pyx_k__local_array, sizeof(__pyx_k__local_array), 0, 0, 1, 1}, {&__pyx_n_s__local_shape, __pyx_k__local_shape, sizeof(__pyx_k__local_shape), 0, 0, 1, 1}, {&__pyx_n_s__local_sum, __pyx_k__local_sum, sizeof(__pyx_k__local_sum), 0, 0, 1, 1}, {&__pyx_n_s__logspace, __pyx_k__logspace, sizeof(__pyx_k__logspace), 0, 0, 1, 1}, {&__pyx_n_s__lohi_shape, __pyx_k__lohi_shape, sizeof(__pyx_k__lohi_shape), 0, 0, 1, 1}, {&__pyx_n_s__lshape, __pyx_k__lshape, sizeof(__pyx_k__lshape), 0, 0, 1, 1}, {&__pyx_n_s__math, __pyx_k__math, sizeof(__pyx_k__math), 0, 0, 1, 1}, {&__pyx_n_s__multiply, __pyx_k__multiply, sizeof(__pyx_k__multiply), 0, 0, 1, 1}, {&__pyx_n_s__n, __pyx_k__n, sizeof(__pyx_k__n), 0, 0, 1, 1}, {&__pyx_n_s__nda, __pyx_k__nda, sizeof(__pyx_k__nda), 0, 0, 1, 1}, {&__pyx_n_s__nda_max, __pyx_k__nda_max, sizeof(__pyx_k__nda_max), 0, 0, 1, 1}, {&__pyx_n_s__nda_min, __pyx_k__nda_min, sizeof(__pyx_k__nda_min), 0, 0, 1, 1}, {&__pyx_n_s__ndarray, __pyx_k__ndarray, sizeof(__pyx_k__ndarray), 0, 0, 1, 1}, {&__pyx_n_s__ndim, __pyx_k__ndim, sizeof(__pyx_k__ndim), 0, 0, 1, 1}, {&__pyx_n_s__ndtmp, __pyx_k__ndtmp, sizeof(__pyx_k__ndtmp), 0, 0, 1, 1}, {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1}, {&__pyx_n_s__npa, __pyx_k__npa, sizeof(__pyx_k__npa), 0, 0, 1, 1}, {&__pyx_n_s__npa_max, __pyx_k__npa_max, sizeof(__pyx_k__npa_max), 0, 0, 1, 1}, {&__pyx_n_s__npa_min, __pyx_k__npa_min, sizeof(__pyx_k__npa_min), 0, 0, 1, 1}, {&__pyx_n_s__npout, __pyx_k__npout, sizeof(__pyx_k__npout), 0, 0, 1, 1}, {&__pyx_n_s__num, __pyx_k__num, sizeof(__pyx_k__num), 0, 0, 1, 1}, {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1}, {&__pyx_n_s__offset, __pyx_k__offset, sizeof(__pyx_k__offset), 0, 0, 1, 1}, {&__pyx_n_s__ones, __pyx_k__ones, sizeof(__pyx_k__ones), 0, 0, 1, 1}, {&__pyx_n_s__ones_like, __pyx_k__ones_like, sizeof(__pyx_k__ones_like), 0, 0, 1, 1}, {&__pyx_n_s__order, __pyx_k__order, sizeof(__pyx_k__order), 0, 0, 1, 1}, {&__pyx_n_s__orig_shape, __pyx_k__orig_shape, sizeof(__pyx_k__orig_shape), 0, 0, 1, 1}, {&__pyx_n_s__out, __pyx_k__out, sizeof(__pyx_k__out), 0, 0, 1, 1}, {&__pyx_n_s__pop, __pyx_k__pop, sizeof(__pyx_k__pop), 0, 0, 1, 1}, {&__pyx_n_s__prod, __pyx_k__prod, sizeof(__pyx_k__prod), 0, 0, 1, 1}, {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1}, {&__pyx_n_s__reduce, __pyx_k__reduce, sizeof(__pyx_k__reduce), 0, 0, 1, 1}, {&__pyx_n_s__release, __pyx_k__release, sizeof(__pyx_k__release), 0, 0, 1, 1}, {&__pyx_n_s__release_a, __pyx_k__release_a, sizeof(__pyx_k__release_a), 0, 0, 1, 1}, {&__pyx_n_s__release_a_max, __pyx_k__release_a_max, sizeof(__pyx_k__release_a_max), 0, 0, 1, 1}, {&__pyx_n_s__release_a_min, __pyx_k__release_a_min, sizeof(__pyx_k__release_a_min), 0, 0, 1, 1}, {&__pyx_n_s__release_update, __pyx_k__release_update, sizeof(__pyx_k__release_update), 0, 0, 1, 1}, {&__pyx_n_s__reshape, __pyx_k__reshape, sizeof(__pyx_k__reshape), 0, 0, 1, 1}, {&__pyx_n_s__retstep, __pyx_k__retstep, sizeof(__pyx_k__retstep), 0, 0, 1, 1}, {&__pyx_n_s__shape, __pyx_k__shape, sizeof(__pyx_k__shape), 0, 0, 1, 1}, {&__pyx_n_s__should_distribute, __pyx_k__should_distribute, sizeof(__pyx_k__should_distribute), 0, 0, 1, 1}, {&__pyx_n_s__start, __pyx_k__start, sizeof(__pyx_k__start), 0, 0, 1, 1}, {&__pyx_n_s__step, __pyx_k__step, sizeof(__pyx_k__step), 0, 0, 1, 1}, {&__pyx_n_s__stop, __pyx_k__stop, sizeof(__pyx_k__stop), 0, 0, 1, 1}, {&__pyx_n_s__strides, __pyx_k__strides, sizeof(__pyx_k__strides), 0, 0, 1, 1}, {&__pyx_n_s__subok, __pyx_k__subok, sizeof(__pyx_k__subok), 0, 0, 1, 1}, {&__pyx_n_s__sum, __pyx_k__sum, sizeof(__pyx_k__sum), 0, 0, 1, 1}, {&__pyx_n_s__sync, __pyx_k__sync, sizeof(__pyx_k__sync), 0, 0, 1, 1}, {&__pyx_n_s__tmp, __pyx_k__tmp, sizeof(__pyx_k__tmp), 0, 0, 1, 1}, {&__pyx_n_s__v, __pyx_k__v, sizeof(__pyx_k__v), 0, 0, 1, 1}, {&__pyx_n_s__valid_types, __pyx_k__valid_types, sizeof(__pyx_k__valid_types), 0, 0, 1, 1}, {&__pyx_n_s__values, __pyx_k__values, sizeof(__pyx_k__values), 0, 0, 1, 1}, {&__pyx_n_s__vec, __pyx_k__vec, sizeof(__pyx_k__vec), 0, 0, 1, 1}, {&__pyx_n_s__vec_mod, __pyx_k__vec_mod, sizeof(__pyx_k__vec_mod), 0, 0, 1, 1}, {&__pyx_n_s__x, __pyx_k__x, sizeof(__pyx_k__x), 0, 0, 1, 1}, {&__pyx_n_s__xrange, __pyx_k__xrange, sizeof(__pyx_k__xrange), 0, 0, 1, 1}, {&__pyx_n_s__zeros, __pyx_k__zeros, sizeof(__pyx_k__zeros), 0, 0, 1, 1}, {&__pyx_n_s__zeros_like, __pyx_k__zeros_like, sizeof(__pyx_k__zeros_like), 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0} }; static int __Pyx_InitCachedBuiltins(void) { #if PY_MAJOR_VERSION >= 3 __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s__range); if (!__pyx_builtin_xrange) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #else __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s__xrange); if (!__pyx_builtin_xrange) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s__NotImplementedError); if (!__pyx_builtin_NotImplementedError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s__TypeError); if (!__pyx_builtin_TypeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 890; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} return 0; __pyx_L1_error:; return -1; } static int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); /* "ga4py/gain/misc.pyx":97 * buf = a.access() * if buf is not None: * buf[:] = 1 # <<<<<<<<<<<<<< * a.release_update() * return a */ __pyx_k_slice_3 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_3); __Pyx_GIVEREF(__pyx_k_slice_3); /* "ga4py/gain/misc.pyx":356 * buf = func(*args, **kwargs) * # now put the data into the global array * local_array[:] = buf # <<<<<<<<<<<<<< * #sync() * return a */ __pyx_k_slice_7 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_7); __Pyx_GIVEREF(__pyx_k_slice_7); /* "ga4py/gain/misc.pyx":542 * lo,hi = a.distribution() * lo,hi = lo[0],hi[0] * buf[:] = np.arange(lo,hi)*step+start # <<<<<<<<<<<<<< * a.release_update() * #sync() */ __pyx_k_slice_12 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_12); __Pyx_GIVEREF(__pyx_k_slice_12); /* "ga4py/gain/misc.pyx":630 * lo,hi = a.distribution() * lo,hi = lo[0],hi[0] * buf[:] = base**(np.arange(lo,hi)*step+start) # <<<<<<<<<<<<<< * a.release_update() * #sync() */ __pyx_k_slice_15 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_15); __Pyx_GIVEREF(__pyx_k_slice_15); /* "ga4py/gain/misc.pyx":1046 * vec = np.arange(lohi_shape[i+1])+lo[i+1] * vec_mod = [None]*len(orig_shape) * vec_mod[i] = slice(None,None,None) # <<<<<<<<<<<<<< * values = vec[vec_mod] * buf[i-lo[0]][:] = values */ __pyx_k_tuple_23 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_tuple_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1046; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_23); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_23)); /* "ga4py/gain/misc.pyx":1048 * vec_mod[i] = slice(None,None,None) * values = vec[vec_mod] * buf[i-lo[0]][:] = values # <<<<<<<<<<<<<< * a.release_update() * else: */ __pyx_k_slice_24 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_k_slice_24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_slice_24); __Pyx_GIVEREF(__pyx_k_slice_24); /* "numpy.pxd":215 * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) */ __pyx_k_tuple_26 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_25)); if (unlikely(!__pyx_k_tuple_26)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_26); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_26)); /* "numpy.pxd":219 * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< * * info.buf = PyArray_DATA(self) */ __pyx_k_tuple_28 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_27)); if (unlikely(!__pyx_k_tuple_28)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_28); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_28)); /* "numpy.pxd":257 * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" */ __pyx_k_tuple_30 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_29)); if (unlikely(!__pyx_k_tuple_30)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_30); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_30)); /* "numpy.pxd":799 * * if (end - f) - (new_offset - offset[0]) < 15: * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< * * if ((child.byteorder == c'>' and little_endian) or */ __pyx_k_tuple_33 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_32)); if (unlikely(!__pyx_k_tuple_33)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_33); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_33)); /* "numpy.pxd":803 * if ((child.byteorder == c'>' and little_endian) or * (child.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * # One could encode it in the format string and have Cython * # complain instead, BUT: < and > in format strings also imply */ __pyx_k_tuple_34 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_29)); if (unlikely(!__pyx_k_tuple_34)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_34); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_34)); /* "numpy.pxd":823 * t = child.type_num * if end - f < 5: * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< * * # Until ticket #99 is fixed, use integers to avoid warnings */ __pyx_k_tuple_36 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_35)); if (unlikely(!__pyx_k_tuple_36)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_36); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_36)); /* "ga4py/gain/misc.pyx":21 * cimport numpy as np * * def zeros_like(a, dtype=None, order='K', subok=True): # <<<<<<<<<<<<<< * """Return an array of zeros with the same shape and type as a given array. * */ __pyx_k_tuple_37 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__order), ((PyObject *)__pyx_n_s__subok)); if (unlikely(!__pyx_k_tuple_37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_37); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_37)); __pyx_k_codeobj_38 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__zeros_like, 21, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":65 * return zeros(a.shape, dtype=a.dtype) * * def ones(shape, dtype=np.float, order='C'): # <<<<<<<<<<<<<< * """Return a new array of given shape and type, filled with ones. * */ __pyx_k_tuple_41 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__shape), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__order), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__buf)); if (unlikely(!__pyx_k_tuple_41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_41); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_41)); __pyx_k_codeobj_42 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__ones, 65, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":101 * return a * * def ones_like(x): # <<<<<<<<<<<<<< * """ones_like(x[, out]) * */ __pyx_k_tuple_43 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__x)); if (unlikely(!__pyx_k_tuple_43)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_43); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_43)); __pyx_k_codeobj_44 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__ones_like, 101, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":124 * return ones(x.shape, dtype=x.dtype) * * def empty(shape, dtype=float, order='C'): # <<<<<<<<<<<<<< * """empty(shape, dtype=float, order='C') * */ __pyx_k_tuple_45 = PyTuple_Pack(3, ((PyObject *)__pyx_n_s__shape), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__order)); if (unlikely(!__pyx_k_tuple_45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_45); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_45)); __pyx_k_codeobj_46 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__empty, 124, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":163 * return ndarray(shape, dtype) * * def empty_like(a, dtype=None, order='K', subok=True): # <<<<<<<<<<<<<< * """ Return a new array with the same shape and type as a given array. * */ __pyx_k_tuple_47 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__order), ((PyObject *)__pyx_n_s__subok)); if (unlikely(!__pyx_k_tuple_47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_47); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_47)); __pyx_k_codeobj_48 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__empty_like, 163, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":205 * return empty(a.shape, dtype or a.dtype) * * def eye(N, M=None, k=0, dtype=float): # <<<<<<<<<<<<<< * """Return a 2-D array with ones on the diagonal and zeros elsewhere. * */ __pyx_k_tuple_49 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__N), ((PyObject *)__pyx_n_s__M), ((PyObject *)__pyx_n_s__k), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__nda), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__indices), ((PyObject *)__pyx_n_s__bindex)); if (unlikely(!__pyx_k_tuple_49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_49); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_49)); __pyx_k_codeobj_50 = (PyObject*)__Pyx_PyCode_New(4, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__eye, 205, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":257 * return a * * def identity(n, dtype=None): # <<<<<<<<<<<<<< * """Return the identity array. * */ __pyx_k_tuple_51 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__dtype)); if (unlikely(!__pyx_k_tuple_51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_51); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_51)); __pyx_k_codeobj_52 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__identity, 257, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":288 * return eye(n,n,dtype=dtype) * * def fromfunction(func, shape, **kwargs): # <<<<<<<<<<<<<< * """Construct an array by executing a function over each coordinate. * */ __pyx_k_tuple_53 = PyTuple_Pack(13, ((PyObject *)__pyx_n_s__func), ((PyObject *)__pyx_n_s__shape), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__kwargs), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__local_array), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__local_shape), ((PyObject *)__pyx_n_s__args), ((PyObject *)__pyx_n_s__index), ((PyObject *)__pyx_n_s__buf)); if (unlikely(!__pyx_k_tuple_53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_53); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_53)); __pyx_k_codeobj_54 = (PyObject*)__Pyx_PyCode_New(2, 0, 13, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__fromfunction, 288, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":360 * return a * * def arange(start, stop=None, step=None, dtype=None, shape=None): # <<<<<<<<<<<<<< * """Return evenly spaced values within a given interval. * */ __pyx_k_tuple_55 = PyTuple_Pack(12, ((PyObject *)__pyx_n_s__start), ((PyObject *)__pyx_n_s__stop), ((PyObject *)__pyx_n_s__step), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__shape), ((PyObject *)__pyx_n_s__length), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__a_local), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__lshape), ((PyObject *)__pyx_n_s__v)); if (unlikely(!__pyx_k_tuple_55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_55); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_55)); __pyx_k_codeobj_56 = (PyObject*)__Pyx_PyCode_New(5, 0, 12, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__arange, 360, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":465 * return a * * def linspace(start, stop, num=50, endpoint=True, retstep=False): # <<<<<<<<<<<<<< * """Return evenly spaced numbers over a specified interval. * */ __pyx_k_tuple_57 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__start), ((PyObject *)__pyx_n_s__stop), ((PyObject *)__pyx_n_s__num), ((PyObject *)__pyx_n_s__endpoint), ((PyObject *)__pyx_n_s__retstep), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__step), ((PyObject *)__pyx_n_s__buf), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi)); if (unlikely(!__pyx_k_tuple_57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_57); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_57)); __pyx_k_codeobj_58 = (PyObject*)__Pyx_PyCode_New(5, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__linspace, 465, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":549 * return a * * def logspace(start, stop, num=50, endpoint=True, base=10.0): # <<<<<<<<<<<<<< * """Return numbers spaced evenly on a log scale. * */ __pyx_k_tuple_59 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__start), ((PyObject *)__pyx_n_s__stop), ((PyObject *)__pyx_n_s__num), ((PyObject *)__pyx_n_s__endpoint), ((PyObject *)__pyx_n_s__base), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__step), ((PyObject *)__pyx_n_s__buf), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi)); if (unlikely(!__pyx_k_tuple_59)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_59); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_59)); __pyx_k_codeobj_60 = (PyObject*)__Pyx_PyCode_New(5, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__logspace, 549, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":635 * return a * * def dot(a, b, out=None): # <<<<<<<<<<<<<< * """dot(a, b) * */ __pyx_k_tuple_61 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__b), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__tmp), ((PyObject *)__pyx_n_s__ndtmp), ((PyObject *)__pyx_n_s__local_sum), ((PyObject *)__pyx_n_s__valid_types)); if (unlikely(!__pyx_k_tuple_61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_61); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_61)); __pyx_k_codeobj_62 = (PyObject*)__Pyx_PyCode_New(3, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__dot, 635, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_62)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":744 * return multiply(a,b) * * def diag(v, k=0): # <<<<<<<<<<<<<< * """Extract a diagonal or construct a diagonal array. * */ __pyx_k_tuple_63 = PyTuple_Pack(2, ((PyObject *)__pyx_n_s__v), ((PyObject *)__pyx_n_s__k)); if (unlikely(!__pyx_k_tuple_63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_63); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_63)); __pyx_k_codeobj_64 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_63, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__diag, 744, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_64)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":824 * return np.diag(v,k) * * def clip(a, a_min, a_max, out=None): # <<<<<<<<<<<<<< * """Clip (limit) the values in an array. * */ __pyx_k_tuple_65 = PyTuple_Pack(17, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__a_min), ((PyObject *)__pyx_n_s__a_max), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__a_shape), ((PyObject *)__pyx_n_s__a_min_shape), ((PyObject *)__pyx_n_s__a_max_shape), ((PyObject *)__pyx_n_s__npout), ((PyObject *)__pyx_n_s__npa), ((PyObject *)__pyx_n_s__release_a), ((PyObject *)__pyx_n_s__npa_min), ((PyObject *)__pyx_n_s__release_a_min), ((PyObject *)__pyx_n_s__npa_max), ((PyObject *)__pyx_n_s__release_a_max), ((PyObject *)__pyx_n_s__nda), ((PyObject *)__pyx_n_s__nda_min), ((PyObject *)__pyx_n_s__nda_max)); if (unlikely(!__pyx_k_tuple_65)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_65); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_65)); __pyx_k_codeobj_66 = (PyObject*)__Pyx_PyCode_New(4, 0, 17, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_65, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__clip, 824, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_66)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":976 * return out * * def indices(dimensions, dtype=int): # <<<<<<<<<<<<<< * """Return an array representing the indices of a grid. * */ __pyx_k_tuple_67 = PyTuple_Pack(14, ((PyObject *)__pyx_n_s__dimensions), ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_n_s__orig_shape), ((PyObject *)__pyx_n_s__shape), ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__buf), ((PyObject *)__pyx_n_s__lo), ((PyObject *)__pyx_n_s__hi), ((PyObject *)__pyx_n_s__lohi_shape), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__vec), ((PyObject *)__pyx_n_s__vec_mod), ((PyObject *)__pyx_n_s__values), ((PyObject *)__pyx_n_s__dim)); if (unlikely(!__pyx_k_tuple_67)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_67); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_67)); __pyx_k_codeobj_68 = (PyObject*)__Pyx_PyCode_New(2, 0, 14, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_67, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__indices, 976, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_68)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":1054 * return a * * def shape(a): # <<<<<<<<<<<<<< * """Return the shape of an array. * */ __pyx_k_tuple_69 = PyTuple_Pack(1, ((PyObject *)__pyx_n_s__a)); if (unlikely(!__pyx_k_tuple_69)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1054; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_69); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_69)); __pyx_k_codeobj_70 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_69, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__shape, 1054, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_70)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1054; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /* "ga4py/gain/misc.pyx":1093 * return asarray(a).shape * * def diagonal(a, offset=0, axis1=0, axis2=1): # <<<<<<<<<<<<<< * """Return specified diagonals. * */ __pyx_k_tuple_71 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__a), ((PyObject *)__pyx_n_s__offset), ((PyObject *)__pyx_n_s__axis1), ((PyObject *)__pyx_n_s__axis2)); if (unlikely(!__pyx_k_tuple_71)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_k_tuple_71); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_71)); __pyx_k_codeobj_72 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_71, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_39, __pyx_n_s__diagonal, 1093, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_72)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; __Pyx_RefNannyFinishContext(); return -1; } static int __Pyx_InitGlobals(void) { if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; __pyx_int_50 = PyInt_FromLong(50); if (unlikely(!__pyx_int_50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; return 0; __pyx_L1_error:; return -1; } #if PY_MAJOR_VERSION < 3 PyMODINIT_FUNC initmisc(void); /*proto*/ PyMODINIT_FUNC initmisc(void) #else PyMODINIT_FUNC PyInit_misc(void); /*proto*/ PyMODINIT_FUNC PyInit_misc(void) #endif { PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannyDeclarations #if CYTHON_REFNANNY __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); if (!__Pyx_RefNanny) { PyErr_Clear(); __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); if (!__Pyx_RefNanny) Py_FatalError("failed to import 'refnanny' module"); } #endif __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_misc(void)", 0); if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #ifdef __Pyx_CyFunction_USED if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif #ifdef __Pyx_FusedFunction_USED if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif #ifdef __Pyx_Generator_USED if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif /*--- Library function declarations ---*/ /*--- Threads initialization code ---*/ #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS #ifdef WITH_THREAD /* Python build with threading support? */ PyEval_InitThreads(); #endif #endif /*--- Module creation code ---*/ #if PY_MAJOR_VERSION < 3 __pyx_m = Py_InitModule4(__Pyx_NAMESTR("misc"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); #else __pyx_m = PyModule_Create(&__pyx_moduledef); #endif if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} Py_INCREF(__pyx_d); #if PY_MAJOR_VERSION >= 3 { PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (!PyDict_GetItemString(modules, "ga4py.gain.misc")) { if (unlikely(PyDict_SetItemString(modules, "ga4py.gain.misc", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } } #endif __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #if CYTHON_COMPILING_IN_PYPY Py_INCREF(__pyx_b); #endif if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; /*--- Initialize various global constants etc. ---*/ if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} #endif if (__pyx_module_is_main_ga4py__gain__misc) { if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; } /*--- Builtin init code ---*/ if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Constants init code ---*/ if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Global init code ---*/ /*--- Variable export code ---*/ /*--- Function export code ---*/ /*--- Type init code ---*/ /*--- Type import code ---*/ __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", #if CYTHON_COMPILING_IN_PYPY sizeof(PyTypeObject), #else sizeof(PyHeapTypeObject), #endif 0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;} /*--- Variable import code ---*/ /*--- Function import code ---*/ /*--- Execution code ---*/ /* "ga4py/gain/misc.pyx":2 * # cython: profile=True * import math # <<<<<<<<<<<<<< * * from ga4py import ga */ __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__math), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__math, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":4 * import math * * from ga4py import ga # <<<<<<<<<<<<<< * from core import asarray * from core import flatiter */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_n_s__ga)); PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__ga)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ga)); __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__ga4py), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s__ga); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ga, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":5 * * from ga4py import ga * from core import asarray # <<<<<<<<<<<<<< * from core import flatiter * from core import get_dtype */ __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_n_s__asarray)); PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__asarray)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__asarray)); __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__core), ((PyObject *)__pyx_t_2), -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s__asarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__asarray, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":6 * from ga4py import ga * from core import asarray * from core import flatiter # <<<<<<<<<<<<<< * from core import get_dtype * from core import get_shape */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_n_s__flatiter)); PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__flatiter)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__flatiter)); __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__core), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s__flatiter); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__flatiter, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":7 * from core import asarray * from core import flatiter * from core import get_dtype # <<<<<<<<<<<<<< * from core import get_shape * from core import is_array */ __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_n_s__get_dtype)); PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__get_dtype)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__get_dtype)); __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__core), ((PyObject *)__pyx_t_2), -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s__get_dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__get_dtype, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":8 * from core import flatiter * from core import get_dtype * from core import get_shape # <<<<<<<<<<<<<< * from core import is_array * from core import is_distributed */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_n_s__get_shape)); PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__get_shape)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__get_shape)); __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__core), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s__get_shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__get_shape, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":9 * from core import get_dtype * from core import get_shape * from core import is_array # <<<<<<<<<<<<<< * from core import is_distributed * from core import multiply */ __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_n_s__is_array)); PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__is_array)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__is_array)); __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__core), ((PyObject *)__pyx_t_2), -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s__is_array); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__is_array, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":10 * from core import get_shape * from core import is_array * from core import is_distributed # <<<<<<<<<<<<<< * from core import multiply * from core import ndarray */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_n_s__is_distributed)); PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__is_distributed)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__is_distributed)); __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__core), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s__is_distributed); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__is_distributed, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":11 * from core import is_array * from core import is_distributed * from core import multiply # <<<<<<<<<<<<<< * from core import ndarray * from core import _npin_piece_based_on_out */ __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_n_s__multiply)); PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__multiply)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__multiply)); __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__core), ((PyObject *)__pyx_t_2), -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s__multiply); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__multiply, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":12 * from core import is_distributed * from core import multiply * from core import ndarray # <<<<<<<<<<<<<< * from core import _npin_piece_based_on_out * from core import should_distribute */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_n_s__ndarray)); PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__ndarray)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ndarray)); __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__core), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s__ndarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ndarray, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":13 * from core import multiply * from core import ndarray * from core import _npin_piece_based_on_out # <<<<<<<<<<<<<< * from core import should_distribute * from core import sync */ __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_n_s_20)); PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s_20)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s_20)); __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__core), ((PyObject *)__pyx_t_2), -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_20); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_20, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":14 * from core import ndarray * from core import _npin_piece_based_on_out * from core import should_distribute # <<<<<<<<<<<<<< * from core import sync * from core import zeros */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_n_s__should_distribute)); PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__should_distribute)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__should_distribute)); __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__core), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s__should_distribute); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__should_distribute, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":15 * from core import _npin_piece_based_on_out * from core import should_distribute * from core import sync # <<<<<<<<<<<<<< * from core import zeros * */ __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_n_s__sync)); PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__sync)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__sync)); __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__core), ((PyObject *)__pyx_t_2), -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s__sync); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__sync, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":16 * from core import should_distribute * from core import sync * from core import zeros # <<<<<<<<<<<<<< * * import numpy as np */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_n_s__zeros)); PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__zeros)); __Pyx_GIVEREF(((PyObject *)__pyx_n_s__zeros)); __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__core), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s__zeros); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__zeros, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":18 * from core import zeros * * import numpy as np # <<<<<<<<<<<<<< * cimport numpy as np * */ __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__np, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":21 * cimport numpy as np * * def zeros_like(a, dtype=None, order='K', subok=True): # <<<<<<<<<<<<<< * """Return an array of zeros with the same shape and type as a given array. * */ __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_k_1 = __pyx_t_2; __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_1zeros_like, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s__zeros_like, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "ga4py/gain/misc.pyx":65 * return zeros(a.shape, dtype=a.dtype) * * def ones(shape, dtype=np.float, order='C'): # <<<<<<<<<<<<<< * """Return a new array of given shape and type, filled with ones. * */ __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__float); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_k_2 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_3ones, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ones, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":101 * return a * * def ones_like(x): # <<<<<<<<<<<<<< * """ones_like(x[, out]) * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_5ones_like, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__ones_like, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":124 * return ones(x.shape, dtype=x.dtype) * * def empty(shape, dtype=float, order='C'): # <<<<<<<<<<<<<< * """empty(shape, dtype=float, order='C') * */ __Pyx_INCREF(((PyObject *)((PyObject*)(&PyFloat_Type)))); __pyx_k_4 = ((PyObject *)((PyObject*)(&PyFloat_Type))); __Pyx_GIVEREF(((PyObject*)(&PyFloat_Type))); __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_7empty, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__empty, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":163 * return ndarray(shape, dtype) * * def empty_like(a, dtype=None, order='K', subok=True): # <<<<<<<<<<<<<< * """ Return a new array with the same shape and type as a given array. * */ __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_5 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_9empty_like, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__empty_like, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":205 * return empty(a.shape, dtype or a.dtype) * * def eye(N, M=None, k=0, dtype=float): # <<<<<<<<<<<<<< * """Return a 2-D array with ones on the diagonal and zeros elsewhere. * */ __Pyx_INCREF(((PyObject *)((PyObject*)(&PyFloat_Type)))); __pyx_k_6 = ((PyObject *)((PyObject*)(&PyFloat_Type))); __Pyx_GIVEREF(((PyObject*)(&PyFloat_Type))); __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_11eye, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__eye, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":257 * return a * * def identity(n, dtype=None): # <<<<<<<<<<<<<< * """Return the identity array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_13identity, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__identity, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":288 * return eye(n,n,dtype=dtype) * * def fromfunction(func, shape, **kwargs): # <<<<<<<<<<<<<< * """Construct an array by executing a function over each coordinate. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_15fromfunction, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__fromfunction, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":360 * return a * * def arange(start, stop=None, step=None, dtype=None, shape=None): # <<<<<<<<<<<<<< * """Return evenly spaced values within a given interval. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_17arange, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__arange, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":465 * return a * * def linspace(start, stop, num=50, endpoint=True, retstep=False): # <<<<<<<<<<<<<< * """Return evenly spaced numbers over a specified interval. * */ __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_10 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_11 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_19linspace, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__linspace, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":549 * return a * * def logspace(start, stop, num=50, endpoint=True, base=10.0): # <<<<<<<<<<<<<< * """Return numbers spaced evenly on a log scale. * */ __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_13 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyFloat_FromDouble(10.0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_14 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_21logspace, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__logspace, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":635 * return a * * def dot(a, b, out=None): # <<<<<<<<<<<<<< * """dot(a, b) * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_23dot, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__dot, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":744 * return multiply(a,b) * * def diag(v, k=0): # <<<<<<<<<<<<<< * """Extract a diagonal or construct a diagonal array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_25diag, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__diag, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":824 * return np.diag(v,k) * * def clip(a, a_min, a_max, out=None): # <<<<<<<<<<<<<< * """Clip (limit) the values in an array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_27clip, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__clip, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":976 * return out * * def indices(dimensions, dtype=int): # <<<<<<<<<<<<<< * """Return an array representing the indices of a grid. * */ __Pyx_INCREF(((PyObject *)((PyObject*)(&PyInt_Type)))); __pyx_k_22 = ((PyObject *)((PyObject*)(&PyInt_Type))); __Pyx_GIVEREF(((PyObject*)(&PyInt_Type))); __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_29indices, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__indices, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":1054 * return a * * def shape(a): # <<<<<<<<<<<<<< * """Return the shape of an array. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_31shape, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1054; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__shape, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1054; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":1093 * return asarray(a).shape * * def diagonal(a, offset=0, axis1=0, axis2=1): # <<<<<<<<<<<<<< * """Return specified diagonals. * */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ga4py_4gain_4misc_33diagonal, NULL, __pyx_n_s_40); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s__diagonal, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1093; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "ga4py/gain/misc.pyx":1 * # cython: profile=True # <<<<<<<<<<<<<< * import math * */ __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_73), ((PyObject *)__pyx_kp_u_74)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_75), ((PyObject *)__pyx_kp_u_76)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_77), ((PyObject *)__pyx_kp_u_78)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_79), ((PyObject *)__pyx_kp_u_80)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_81), ((PyObject *)__pyx_kp_u_82)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_83), ((PyObject *)__pyx_kp_u_84)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_85), ((PyObject *)__pyx_kp_u_86)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_87), ((PyObject *)__pyx_kp_u_88)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_89), ((PyObject *)__pyx_kp_u_90)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_91), ((PyObject *)__pyx_kp_u_92)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_93), ((PyObject *)__pyx_kp_u_94)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_95), ((PyObject *)__pyx_kp_u_96)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_97), ((PyObject *)__pyx_kp_u_98)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_99), ((PyObject *)__pyx_kp_u_100)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_101), ((PyObject *)__pyx_kp_u_102)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_103), ((PyObject *)__pyx_kp_u_104)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_105), ((PyObject *)__pyx_kp_u_106)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (PyDict_SetItem(__pyx_d, __pyx_n_s____test__, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; /* "numpy.pxd":975 * arr.base = baseptr * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< * if arr.base is NULL: * return None */ goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); if (__pyx_m) { __Pyx_AddTraceback("init ga4py.gain.misc", __pyx_clineno, __pyx_lineno, __pyx_filename); Py_DECREF(__pyx_m); __pyx_m = 0; } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_ImportError, "init ga4py.gain.misc"); } __pyx_L0:; __Pyx_RefNannyFinishContext(); #if PY_MAJOR_VERSION < 3 return; #else return __pyx_m; #endif } /* Runtime support code */ #if CYTHON_REFNANNY static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { PyObject *m = NULL, *p = NULL; void *r = NULL; m = PyImport_ImportModule((char *)modname); if (!m) goto end; p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); if (!p) goto end; r = PyLong_AsVoidPtr(p); end: Py_XDECREF(p); Py_XDECREF(m); return (__Pyx_RefNannyAPIStruct *)r; } #endif /* CYTHON_REFNANNY */ static PyObject *__Pyx_GetBuiltinName(PyObject *name) { PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); if (unlikely(!result)) { PyErr_Format(PyExc_NameError, #if PY_MAJOR_VERSION >= 3 "name '%U' is not defined", name); #else "name '%s' is not defined", PyString_AS_STRING(name)); #endif } return result; } static void __Pyx_RaiseDoubleKeywordsError( const char* func_name, PyObject* kw_name) { PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION >= 3 "%s() got multiple values for keyword argument '%U'", func_name, kw_name); #else "%s() got multiple values for keyword argument '%s'", func_name, PyString_AsString(kw_name)); #endif } static int __Pyx_ParseOptionalKeywords( PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name) { PyObject *key = 0, *value = 0; Py_ssize_t pos = 0; PyObject*** name; PyObject*** first_kw_arg = argnames + num_pos_args; while (PyDict_Next(kwds, &pos, &key, &value)) { name = first_kw_arg; while (*name && (**name != key)) name++; if (*name) { values[name-argnames] = value; continue; } name = first_kw_arg; #if PY_MAJOR_VERSION < 3 if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { while (*name) { if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) && _PyString_Eq(**name, key)) { values[name-argnames] = value; break; } name++; } if (*name) continue; else { PyObject*** argname = argnames; while (argname != first_kw_arg) { if ((**argname == key) || ( (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) && _PyString_Eq(**argname, key))) { goto arg_passed_twice; } argname++; } } } else #endif if (likely(PyUnicode_Check(key))) { while (*name) { int cmp = (**name == key) ? 0 : #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : #endif PyUnicode_Compare(**name, key); if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; if (cmp == 0) { values[name-argnames] = value; break; } name++; } if (*name) continue; else { PyObject*** argname = argnames; while (argname != first_kw_arg) { int cmp = (**argname == key) ? 0 : #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : #endif PyUnicode_Compare(**argname, key); if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; if (cmp == 0) goto arg_passed_twice; argname++; } } } else goto invalid_keyword_type; if (kwds2) { if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; } else { goto invalid_keyword; } } return 0; arg_passed_twice: __Pyx_RaiseDoubleKeywordsError(function_name, key); goto bad; invalid_keyword_type: PyErr_Format(PyExc_TypeError, "%s() keywords must be strings", function_name); goto bad; invalid_keyword: PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION < 3 "%s() got an unexpected keyword argument '%s'", function_name, PyString_AsString(key)); #else "%s() got an unexpected keyword argument '%U'", function_name, key); #endif bad: return -1; } static void __Pyx_RaiseArgtupleInvalid( const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found) { Py_ssize_t num_expected; const char *more_or_less; if (num_found < num_min) { num_expected = num_min; more_or_less = "at least"; } else { num_expected = num_max; more_or_less = "at most"; } if (exact) { more_or_less = "exactly"; } PyErr_Format(PyExc_TypeError, "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)", func_name, more_or_less, num_expected, (num_expected == 1) ? "" : "s", num_found); } #if CYTHON_PROFILE static int __Pyx_TraceSetupAndCall(PyCodeObject** code, PyFrameObject** frame, const char *funcname, const char *srcfile, int firstlineno) { int retval; PyThreadState* tstate = PyThreadState_GET(); if (*frame == NULL || !CYTHON_PROFILE_REUSE_FRAME) { if (*code == NULL) { *code = __Pyx_createFrameCodeObject(funcname, srcfile, firstlineno); if (*code == NULL) return 0; } *frame = PyFrame_New( tstate, /*PyThreadState *tstate*/ *code, /*PyCodeObject *code*/ __pyx_d, /*PyObject *globals*/ 0 /*PyObject *locals*/ ); if (*frame == NULL) return 0; if (CYTHON_TRACE && (*frame)->f_trace == NULL) { Py_INCREF(Py_None); (*frame)->f_trace = Py_None; } } else { (*frame)->f_tstate = tstate; } (*frame)->f_lineno = firstlineno; tstate->use_tracing = 0; #if CYTHON_TRACE if (tstate->c_tracefunc) tstate->c_tracefunc(tstate->c_traceobj, *frame, PyTrace_CALL, NULL); if (!tstate->c_profilefunc) retval = 1; else #endif retval = tstate->c_profilefunc(tstate->c_profileobj, *frame, PyTrace_CALL, NULL) == 0; tstate->use_tracing = (tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc)); return tstate->use_tracing && retval; } static PyCodeObject *__Pyx_createFrameCodeObject(const char *funcname, const char *srcfile, int firstlineno) { PyObject *py_srcfile = 0; PyObject *py_funcname = 0; PyCodeObject *py_code = 0; #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromString(funcname); py_srcfile = PyString_FromString(srcfile); #else py_funcname = PyUnicode_FromString(funcname); py_srcfile = PyUnicode_FromString(srcfile); #endif if (!py_funcname | !py_srcfile) goto bad; py_code = PyCode_New( 0, /*int argcount,*/ #if PY_MAJOR_VERSION >= 3 0, /*int kwonlyargcount,*/ #endif 0, /*int nlocals,*/ 0, /*int stacksize,*/ 0, /*int flags,*/ __pyx_empty_bytes, /*PyObject *code,*/ __pyx_empty_tuple, /*PyObject *consts,*/ __pyx_empty_tuple, /*PyObject *names,*/ __pyx_empty_tuple, /*PyObject *varnames,*/ __pyx_empty_tuple, /*PyObject *freevars,*/ __pyx_empty_tuple, /*PyObject *cellvars,*/ py_srcfile, /*PyObject *filename,*/ py_funcname, /*PyObject *name,*/ firstlineno, /*int firstlineno,*/ __pyx_empty_bytes /*PyObject *lnotab*/ ); bad: Py_XDECREF(py_srcfile); Py_XDECREF(py_funcname); return py_code; } #endif /* CYTHON_PROFILE */ static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { PyObject *result; #if CYTHON_COMPILING_IN_CPYTHON result = PyDict_GetItem(__pyx_d, name); if (result) { Py_INCREF(result); } else { #else result = PyObject_GetItem(__pyx_d, name); if (!result) { PyErr_Clear(); #endif result = __Pyx_GetBuiltinName(name); } return result; } static CYTHON_INLINE int __Pyx_PyObject_SetSlice( PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop, PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) { #if CYTHON_COMPILING_IN_CPYTHON PyMappingMethods* mp; #if PY_MAJOR_VERSION < 3 PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; if (likely(ms && ms->sq_ass_slice)) { if (!has_cstart) { if (_py_start && (*_py_start != Py_None)) { cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; } else cstart = 0; } if (!has_cstop) { if (_py_stop && (*_py_stop != Py_None)) { cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; } else cstop = PY_SSIZE_T_MAX; } if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { Py_ssize_t l = ms->sq_length(obj); if (likely(l >= 0)) { if (cstop < 0) { cstop += l; if (cstop < 0) cstop = 0; } if (cstart < 0) { cstart += l; if (cstart < 0) cstart = 0; } } else { if (PyErr_ExceptionMatches(PyExc_OverflowError)) PyErr_Clear(); else goto bad; } } return ms->sq_ass_slice(obj, cstart, cstop, value); } #endif mp = Py_TYPE(obj)->tp_as_mapping; if (likely(mp && mp->mp_ass_subscript)) #endif { int result; PyObject *py_slice, *py_start, *py_stop; if (_py_slice) { py_slice = *_py_slice; } else { PyObject* owned_start = NULL; PyObject* owned_stop = NULL; if (_py_start) { py_start = *_py_start; } else { if (has_cstart) { owned_start = py_start = PyInt_FromSsize_t(cstart); if (unlikely(!py_start)) goto bad; } else py_start = Py_None; } if (_py_stop) { py_stop = *_py_stop; } else { if (has_cstop) { owned_stop = py_stop = PyInt_FromSsize_t(cstop); if (unlikely(!py_stop)) { Py_XDECREF(owned_start); goto bad; } } else py_stop = Py_None; } py_slice = PySlice_New(py_start, py_stop, Py_None); Py_XDECREF(owned_start); Py_XDECREF(owned_stop); if (unlikely(!py_slice)) goto bad; } #if CYTHON_COMPILING_IN_CPYTHON result = mp->mp_ass_subscript(obj, py_slice, value); #else result = value ? PyObject_SetItem(obj, py_slice, value) : PyObject_DelItem(obj, py_slice); #endif if (!_py_slice) { Py_DECREF(py_slice); } return result; } PyErr_Format(PyExc_TypeError, "'%.200s' object does not support slice %s", Py_TYPE(obj)->tp_name, value ? "assignment" : "deletion"); bad: return -1; } static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { PyErr_Format(PyExc_ValueError, "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); } static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { PyErr_Format(PyExc_ValueError, "need more than %" CYTHON_FORMAT_SSIZE_T "d value%s to unpack", index, (index == 1) ? "" : "s"); } static CYTHON_INLINE int __Pyx_IterFinish(void) { #if CYTHON_COMPILING_IN_CPYTHON PyThreadState *tstate = PyThreadState_GET(); PyObject* exc_type = tstate->curexc_type; if (unlikely(exc_type)) { if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) { PyObject *exc_value, *exc_tb; exc_value = tstate->curexc_value; exc_tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; Py_DECREF(exc_type); Py_XDECREF(exc_value); Py_XDECREF(exc_tb); return 0; } else { return -1; } } return 0; #else if (unlikely(PyErr_Occurred())) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { PyErr_Clear(); return 0; } else { return -1; } } return 0; #endif } static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { if (unlikely(retval)) { Py_DECREF(retval); __Pyx_RaiseTooManyValuesError(expected); return -1; } else { return __Pyx_IterFinish(); } return 0; } static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { PyObject *r; if (!j) return NULL; r = PyObject_GetItem(o, j); Py_DECREF(j); return r; } static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, int wraparound, int boundscheck) { #if CYTHON_COMPILING_IN_CPYTHON if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o); if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) { PyObject *r = PyList_GET_ITEM(o, i); Py_INCREF(r); return r; } return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); #else return PySequence_GetItem(o, i); #endif } static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, int wraparound, int boundscheck) { #if CYTHON_COMPILING_IN_CPYTHON if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o); if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) { PyObject *r = PyTuple_GET_ITEM(o, i); Py_INCREF(r); return r; } return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); #else return PySequence_GetItem(o, i); #endif } static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, int wraparound, int boundscheck) { #if CYTHON_COMPILING_IN_CPYTHON if (is_list || PyList_CheckExact(o)) { Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) { PyObject *r = PyList_GET_ITEM(o, n); Py_INCREF(r); return r; } } else if (PyTuple_CheckExact(o)) { Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) { PyObject *r = PyTuple_GET_ITEM(o, n); Py_INCREF(r); return r; } } else { PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; if (likely(m && m->sq_item)) { if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { Py_ssize_t l = m->sq_length(o); if (likely(l >= 0)) { i += l; } else { if (PyErr_ExceptionMatches(PyExc_OverflowError)) PyErr_Clear(); else return NULL; } } return m->sq_item(o, i); } } #else if (is_list || PySequence_Check(o)) { return PySequence_GetItem(o, i); } #endif return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); } static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) { int r; if (!j) return -1; r = PyObject_SetItem(o, j, v); Py_DECREF(j); return r; } static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list, int wraparound, int boundscheck) { #if CYTHON_COMPILING_IN_CPYTHON if (is_list || PyList_CheckExact(o)) { Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o)); if ((!boundscheck) || likely((n >= 0) & (n < PyList_GET_SIZE(o)))) { PyObject* old = PyList_GET_ITEM(o, n); Py_INCREF(v); PyList_SET_ITEM(o, n, v); Py_DECREF(old); return 1; } } else { PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; if (likely(m && m->sq_ass_item)) { if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { Py_ssize_t l = m->sq_length(o); if (likely(l >= 0)) { i += l; } else { if (PyErr_ExceptionMatches(PyExc_OverflowError)) PyErr_Clear(); else return -1; } } return m->sq_ass_item(o, i, v); } } #else #if CYTHON_COMPILING_IN_PYPY if (is_list || (PySequence_Check(o) && !PyDict_Check(o))) { #else if (is_list || PySequence_Check(o)) { #endif return PySequence_SetItem(o, i, v); } #endif return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v); } static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { #if CYTHON_COMPILING_IN_CPYTHON PyObject *tmp_type, *tmp_value, *tmp_tb; PyThreadState *tstate = PyThreadState_GET(); tmp_type = tstate->curexc_type; tmp_value = tstate->curexc_value; tmp_tb = tstate->curexc_traceback; tstate->curexc_type = type; tstate->curexc_value = value; tstate->curexc_traceback = tb; Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); #else PyErr_Restore(type, value, tb); #endif } static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { #if CYTHON_COMPILING_IN_CPYTHON PyThreadState *tstate = PyThreadState_GET(); *type = tstate->curexc_type; *value = tstate->curexc_value; *tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; #else PyErr_Fetch(type, value, tb); #endif } #if PY_MAJOR_VERSION < 3 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, CYTHON_UNUSED PyObject *cause) { Py_XINCREF(type); if (!value || value == Py_None) value = NULL; else Py_INCREF(value); if (!tb || tb == Py_None) tb = NULL; else { Py_INCREF(tb); if (!PyTraceBack_Check(tb)) { PyErr_SetString(PyExc_TypeError, "raise: arg 3 must be a traceback or None"); goto raise_error; } } #if PY_VERSION_HEX < 0x02050000 if (PyClass_Check(type)) { #else if (PyType_Check(type)) { #endif #if CYTHON_COMPILING_IN_PYPY if (!value) { Py_INCREF(Py_None); value = Py_None; } #endif PyErr_NormalizeException(&type, &value, &tb); } else { if (value) { PyErr_SetString(PyExc_TypeError, "instance exception may not have a separate value"); goto raise_error; } value = type; #if PY_VERSION_HEX < 0x02050000 if (PyInstance_Check(type)) { type = (PyObject*) ((PyInstanceObject*)type)->in_class; Py_INCREF(type); } else { type = 0; PyErr_SetString(PyExc_TypeError, "raise: exception must be an old-style class or instance"); goto raise_error; } #else type = (PyObject*) Py_TYPE(type); Py_INCREF(type); if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { PyErr_SetString(PyExc_TypeError, "raise: exception class must be a subclass of BaseException"); goto raise_error; } #endif } __Pyx_ErrRestore(type, value, tb); return; raise_error: Py_XDECREF(value); Py_XDECREF(type); Py_XDECREF(tb); return; } #else /* Python 3+ */ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { PyObject* owned_instance = NULL; if (tb == Py_None) { tb = 0; } else if (tb && !PyTraceBack_Check(tb)) { PyErr_SetString(PyExc_TypeError, "raise: arg 3 must be a traceback or None"); goto bad; } if (value == Py_None) value = 0; if (PyExceptionInstance_Check(type)) { if (value) { PyErr_SetString(PyExc_TypeError, "instance exception may not have a separate value"); goto bad; } value = type; type = (PyObject*) Py_TYPE(value); } else if (PyExceptionClass_Check(type)) { PyObject *args; if (!value) args = PyTuple_New(0); else if (PyTuple_Check(value)) { Py_INCREF(value); args = value; } else args = PyTuple_Pack(1, value); if (!args) goto bad; owned_instance = PyEval_CallObject(type, args); Py_DECREF(args); if (!owned_instance) goto bad; value = owned_instance; if (!PyExceptionInstance_Check(value)) { PyErr_Format(PyExc_TypeError, "calling %R should have returned an instance of " "BaseException, not %R", type, Py_TYPE(value)); goto bad; } } else { PyErr_SetString(PyExc_TypeError, "raise: exception class must be a subclass of BaseException"); goto bad; } #if PY_VERSION_HEX >= 0x03030000 if (cause) { #else if (cause && cause != Py_None) { #endif PyObject *fixed_cause; if (cause == Py_None) { fixed_cause = NULL; } else if (PyExceptionClass_Check(cause)) { fixed_cause = PyObject_CallObject(cause, NULL); if (fixed_cause == NULL) goto bad; } else if (PyExceptionInstance_Check(cause)) { fixed_cause = cause; Py_INCREF(fixed_cause); } else { PyErr_SetString(PyExc_TypeError, "exception causes must derive from " "BaseException"); goto bad; } PyException_SetCause(value, fixed_cause); } PyErr_SetObject(type, value); if (tb) { PyThreadState *tstate = PyThreadState_GET(); PyObject* tmp_tb = tstate->curexc_traceback; if (tb != tmp_tb) { Py_INCREF(tb); tstate->curexc_traceback = tb; Py_XDECREF(tmp_tb); } } bad: Py_XDECREF(owned_instance); return; } #endif static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); } static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { if (unlikely(!type)) { PyErr_Format(PyExc_SystemError, "Missing type object"); return 0; } if (likely(PyObject_TypeCheck(obj, type))) return 1; PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", Py_TYPE(obj)->tp_name, type->tp_name); return 0; } static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { PyErr_Format(PyExc_ImportError, #if PY_MAJOR_VERSION < 3 "cannot import name %.230s", PyString_AS_STRING(name)); #else "cannot import name %S", name); #endif } return value; } static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { PyObject *empty_list = 0; PyObject *module = 0; PyObject *global_dict = 0; PyObject *empty_dict = 0; PyObject *list; #if PY_VERSION_HEX < 0x03030000 PyObject *py_import; py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s____import__); if (!py_import) goto bad; #endif if (from_list) list = from_list; else { empty_list = PyList_New(0); if (!empty_list) goto bad; list = empty_list; } global_dict = PyModule_GetDict(__pyx_m); if (!global_dict) goto bad; empty_dict = PyDict_New(); if (!empty_dict) goto bad; #if PY_VERSION_HEX >= 0x02050000 { #if PY_MAJOR_VERSION >= 3 if (level == -1) { if (strchr(__Pyx_MODULE_NAME, '.')) { #if PY_VERSION_HEX < 0x03030000 PyObject *py_level = PyInt_FromLong(1); if (!py_level) goto bad; module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, py_level, NULL); Py_DECREF(py_level); #else module = PyImport_ImportModuleLevelObject( name, global_dict, empty_dict, list, 1); #endif if (!module) { if (!PyErr_ExceptionMatches(PyExc_ImportError)) goto bad; PyErr_Clear(); } } level = 0; /* try absolute import on failure */ } #endif if (!module) { #if PY_VERSION_HEX < 0x03030000 PyObject *py_level = PyInt_FromLong(level); if (!py_level) goto bad; module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, py_level, NULL); Py_DECREF(py_level); #else module = PyImport_ImportModuleLevelObject( name, global_dict, empty_dict, list, level); #endif } } #else if (level>0) { PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); goto bad; } module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, NULL); #endif bad: #if PY_VERSION_HEX < 0x03030000 Py_XDECREF(py_import); #endif Py_XDECREF(empty_list); Py_XDECREF(empty_dict); return module; } #if CYTHON_CCOMPLEX #ifdef __cplusplus static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { return ::std::complex< float >(x, y); } #else static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { return x + y*(__pyx_t_float_complex)_Complex_I; } #endif #else static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { __pyx_t_float_complex z; z.real = x; z.imag = y; return z; } #endif #if CYTHON_CCOMPLEX #else static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) { return (a.real == b.real) && (a.imag == b.imag); } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; z.real = a.real + b.real; z.imag = a.imag + b.imag; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; z.real = a.real - b.real; z.imag = a.imag - b.imag; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; z.real = a.real * b.real - a.imag * b.imag; z.imag = a.real * b.imag + a.imag * b.real; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; float denom = b.real * b.real + b.imag * b.imag; z.real = (a.real * b.real + a.imag * b.imag) / denom; z.imag = (a.imag * b.real - a.real * b.imag) / denom; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) { __pyx_t_float_complex z; z.real = -a.real; z.imag = -a.imag; return z; } static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) { return (a.real == 0) && (a.imag == 0); } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) { __pyx_t_float_complex z; z.real = a.real; z.imag = -a.imag; return z; } #if 1 static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) { #if !defined(HAVE_HYPOT) || defined(_MSC_VER) return sqrtf(z.real*z.real + z.imag*z.imag); #else return hypotf(z.real, z.imag); #endif } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; float r, lnr, theta, z_r, z_theta; if (b.imag == 0 && b.real == (int)b.real) { if (b.real < 0) { float denom = a.real * a.real + a.imag * a.imag; a.real = a.real / denom; a.imag = -a.imag / denom; b.real = -b.real; } switch ((int)b.real) { case 0: z.real = 1; z.imag = 0; return z; case 1: return a; case 2: z = __Pyx_c_prodf(a, a); return __Pyx_c_prodf(a, a); case 3: z = __Pyx_c_prodf(a, a); return __Pyx_c_prodf(z, a); case 4: z = __Pyx_c_prodf(a, a); return __Pyx_c_prodf(z, z); } } if (a.imag == 0) { if (a.real == 0) { return a; } r = a.real; theta = 0; } else { r = __Pyx_c_absf(a); theta = atan2f(a.imag, a.real); } lnr = logf(r); z_r = expf(lnr * b.real - theta * b.imag); z_theta = theta * b.real + lnr * b.imag; z.real = z_r * cosf(z_theta); z.imag = z_r * sinf(z_theta); return z; } #endif #endif #if CYTHON_CCOMPLEX #ifdef __cplusplus static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { return ::std::complex< double >(x, y); } #else static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { return x + y*(__pyx_t_double_complex)_Complex_I; } #endif #else static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { __pyx_t_double_complex z; z.real = x; z.imag = y; return z; } #endif #if CYTHON_CCOMPLEX #else static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) { return (a.real == b.real) && (a.imag == b.imag); } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; z.real = a.real + b.real; z.imag = a.imag + b.imag; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; z.real = a.real - b.real; z.imag = a.imag - b.imag; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; z.real = a.real * b.real - a.imag * b.imag; z.imag = a.real * b.imag + a.imag * b.real; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; double denom = b.real * b.real + b.imag * b.imag; z.real = (a.real * b.real + a.imag * b.imag) / denom; z.imag = (a.imag * b.real - a.real * b.imag) / denom; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) { __pyx_t_double_complex z; z.real = -a.real; z.imag = -a.imag; return z; } static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) { return (a.real == 0) && (a.imag == 0); } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) { __pyx_t_double_complex z; z.real = a.real; z.imag = -a.imag; return z; } #if 1 static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) { #if !defined(HAVE_HYPOT) || defined(_MSC_VER) return sqrt(z.real*z.real + z.imag*z.imag); #else return hypot(z.real, z.imag); #endif } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; double r, lnr, theta, z_r, z_theta; if (b.imag == 0 && b.real == (int)b.real) { if (b.real < 0) { double denom = a.real * a.real + a.imag * a.imag; a.real = a.real / denom; a.imag = -a.imag / denom; b.real = -b.real; } switch ((int)b.real) { case 0: z.real = 1; z.imag = 0; return z; case 1: return a; case 2: z = __Pyx_c_prod(a, a); return __Pyx_c_prod(a, a); case 3: z = __Pyx_c_prod(a, a); return __Pyx_c_prod(z, a); case 4: z = __Pyx_c_prod(a, a); return __Pyx_c_prod(z, z); } } if (a.imag == 0) { if (a.real == 0) { return a; } r = a.real; theta = 0; } else { r = __Pyx_c_abs(a); theta = atan2(a.imag, a.real); } lnr = log(r); z_r = exp(lnr * b.real - theta * b.imag); z_theta = theta * b.real + lnr * b.imag; z.real = z_r * cos(z_theta); z.imag = z_r * sin(z_theta); return z; } #endif #endif static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) { const unsigned char neg_one = (unsigned char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned char" : "value too large to convert to unsigned char"); } return (unsigned char)-1; } return (unsigned char)val; } return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) { const unsigned short neg_one = (unsigned short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned short" : "value too large to convert to unsigned short"); } return (unsigned short)-1; } return (unsigned short)val; } return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) { const unsigned int neg_one = (unsigned int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(unsigned int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(unsigned int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to unsigned int" : "value too large to convert to unsigned int"); } return (unsigned int)-1; } return (unsigned int)val; } return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x); } static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) { const char neg_one = (char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to char" : "value too large to convert to char"); } return (char)-1; } return (char)val; } return (char)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) { const short neg_one = (short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to short" : "value too large to convert to short"); } return (short)-1; } return (short)val; } return (short)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) { const int neg_one = (int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to int" : "value too large to convert to int"); } return (int)-1; } return (int)val; } return (int)__Pyx_PyInt_AsLong(x); } static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) { const signed char neg_one = (signed char)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed char) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed char)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed char" : "value too large to convert to signed char"); } return (signed char)-1; } return (signed char)val; } return (signed char)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) { const signed short neg_one = (signed short)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed short) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed short)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed short" : "value too large to convert to signed short"); } return (signed short)-1; } return (signed short)val; } return (signed short)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) { const signed int neg_one = (signed int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(signed int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(signed int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to signed int" : "value too large to convert to signed int"); } return (signed int)-1; } return (signed int)val; } return (signed int)__Pyx_PyInt_AsSignedLong(x); } static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) { const int neg_one = (int)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; if (sizeof(int) < sizeof(long)) { long val = __Pyx_PyInt_AsLong(x); if (unlikely(val != (long)(int)val)) { if (!unlikely(val == -1 && PyErr_Occurred())) { PyErr_SetString(PyExc_OverflowError, (is_unsigned && unlikely(val < 0)) ? "can't convert negative value to int" : "value too large to convert to int"); } return (int)-1; } return (int)val; } return (int)__Pyx_PyInt_AsLong(x); } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) { const unsigned long neg_one = (unsigned long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned long"); return (unsigned long)-1; } return (unsigned long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (unsigned long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned long"); return (unsigned long)-1; } return (unsigned long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(unsigned long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(unsigned long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (unsigned long)PyLong_AsLong(x); } } else { unsigned long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (unsigned long)-1; val = __Pyx_PyInt_AsUnsignedLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) { const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned PY_LONG_LONG"); return (unsigned PY_LONG_LONG)-1; } return (unsigned PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to unsigned PY_LONG_LONG"); return (unsigned PY_LONG_LONG)-1; } return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x); } } else { unsigned PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (unsigned PY_LONG_LONG)-1; val = __Pyx_PyInt_AsUnsignedLongLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) { const long neg_one = (long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to long"); return (long)-1; } return (long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to long"); return (long)-1; } return (long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (long)PyLong_AsLong(x); } } else { long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (long)-1; val = __Pyx_PyInt_AsLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) { const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to PY_LONG_LONG"); return (PY_LONG_LONG)-1; } return (PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to PY_LONG_LONG"); return (PY_LONG_LONG)-1; } return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (PY_LONG_LONG)PyLong_AsLongLong(x); } } else { PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (PY_LONG_LONG)-1; val = __Pyx_PyInt_AsLongLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) { const signed long neg_one = (signed long)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed long"); return (signed long)-1; } return (signed long)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (signed long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed long"); return (signed long)-1; } return (signed long)PyLong_AsUnsignedLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed long)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(signed long) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(signed long) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (signed long)PyLong_AsLong(x); } } else { signed long val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (signed long)-1; val = __Pyx_PyInt_AsSignedLong(tmp); Py_DECREF(tmp); return val; } } #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #endif #endif static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) { const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed PY_LONG_LONG"); return (signed PY_LONG_LONG)-1; } return (signed PY_LONG_LONG)val; } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return (signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif if (unlikely(Py_SIZE(x) < 0)) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value to signed PY_LONG_LONG"); return (signed PY_LONG_LONG)-1; } return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); } else { #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 #if CYTHON_USE_PYLONG_INTERNALS if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) { switch (Py_SIZE(x)) { case 0: return 0; case 1: return +(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; case -1: return -(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0]; } } #endif #endif return (signed PY_LONG_LONG)PyLong_AsLongLong(x); } } else { signed PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_Int(x); if (!tmp) return (signed PY_LONG_LONG)-1; val = __Pyx_PyInt_AsSignedLongLong(tmp); Py_DECREF(tmp); return val; } } static int __Pyx_check_binary_version(void) { char ctversion[4], rtversion[4]; PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { char message[200]; PyOS_snprintf(message, sizeof(message), "compiletime version %s of module '%.100s' " "does not match runtime version %s", ctversion, __Pyx_MODULE_NAME, rtversion); #if PY_VERSION_HEX < 0x02050000 return PyErr_Warn(NULL, message); #else return PyErr_WarnEx(NULL, message, 1); #endif } return 0; } #ifndef __PYX_HAVE_RT_ImportModule #define __PYX_HAVE_RT_ImportModule static PyObject *__Pyx_ImportModule(const char *name) { PyObject *py_name = 0; PyObject *py_module = 0; py_name = __Pyx_PyIdentifier_FromString(name); if (!py_name) goto bad; py_module = PyImport_Import(py_name); Py_DECREF(py_name); return py_module; bad: Py_XDECREF(py_name); return 0; } #endif #ifndef __PYX_HAVE_RT_ImportType #define __PYX_HAVE_RT_ImportType static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict) { PyObject *py_module = 0; PyObject *result = 0; PyObject *py_name = 0; char warning[200]; Py_ssize_t basicsize; #ifdef Py_LIMITED_API PyObject *py_basicsize; #endif py_module = __Pyx_ImportModule(module_name); if (!py_module) goto bad; py_name = __Pyx_PyIdentifier_FromString(class_name); if (!py_name) goto bad; result = PyObject_GetAttr(py_module, py_name); Py_DECREF(py_name); py_name = 0; Py_DECREF(py_module); py_module = 0; if (!result) goto bad; if (!PyType_Check(result)) { PyErr_Format(PyExc_TypeError, "%s.%s is not a type object", module_name, class_name); goto bad; } #ifndef Py_LIMITED_API basicsize = ((PyTypeObject *)result)->tp_basicsize; #else py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); if (!py_basicsize) goto bad; basicsize = PyLong_AsSsize_t(py_basicsize); Py_DECREF(py_basicsize); py_basicsize = 0; if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) goto bad; #endif if (!strict && (size_t)basicsize > size) { PyOS_snprintf(warning, sizeof(warning), "%s.%s size changed, may indicate binary incompatibility", module_name, class_name); #if PY_VERSION_HEX < 0x02050000 if (PyErr_Warn(NULL, warning) < 0) goto bad; #else if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; #endif } else if ((size_t)basicsize != size) { PyErr_Format(PyExc_ValueError, "%s.%s has the wrong size, try recompiling", module_name, class_name); goto bad; } return (PyTypeObject *)result; bad: Py_XDECREF(py_module); Py_XDECREF(result); return NULL; } #endif static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { int start = 0, mid = 0, end = count - 1; if (end >= 0 && code_line > entries[end].code_line) { return count; } while (start < end) { mid = (start + end) / 2; if (code_line < entries[mid].code_line) { end = mid; } else if (code_line > entries[mid].code_line) { start = mid + 1; } else { return mid; } } if (code_line <= entries[mid].code_line) { return mid; } else { return mid + 1; } } static PyCodeObject *__pyx_find_code_object(int code_line) { PyCodeObject* code_object; int pos; if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { return NULL; } pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { return NULL; } code_object = __pyx_code_cache.entries[pos].code_object; Py_INCREF(code_object); return code_object; } static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { int pos, i; __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; if (unlikely(!code_line)) { return; } if (unlikely(!entries)) { entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); if (likely(entries)) { __pyx_code_cache.entries = entries; __pyx_code_cache.max_count = 64; __pyx_code_cache.count = 1; entries[0].code_line = code_line; entries[0].code_object = code_object; Py_INCREF(code_object); } return; } pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { PyCodeObject* tmp = entries[pos].code_object; entries[pos].code_object = code_object; Py_DECREF(tmp); return; } if (__pyx_code_cache.count == __pyx_code_cache.max_count) { int new_max = __pyx_code_cache.max_count + 64; entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); if (unlikely(!entries)) { return; } __pyx_code_cache.entries = entries; __pyx_code_cache.max_count = new_max; } for (i=__pyx_code_cache.count; i>pos; i--) { entries[i] = entries[i-1]; } entries[pos].code_line = code_line; entries[pos].code_object = code_object; __pyx_code_cache.count++; Py_INCREF(code_object); } #include "compile.h" #include "frameobject.h" #include "traceback.h" static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( const char *funcname, int c_line, int py_line, const char *filename) { PyCodeObject *py_code = 0; PyObject *py_srcfile = 0; PyObject *py_funcname = 0; #if PY_MAJOR_VERSION < 3 py_srcfile = PyString_FromString(filename); #else py_srcfile = PyUnicode_FromString(filename); #endif if (!py_srcfile) goto bad; if (c_line) { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); #else py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); #endif } else { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromString(funcname); #else py_funcname = PyUnicode_FromString(funcname); #endif } if (!py_funcname) goto bad; py_code = __Pyx_PyCode_New( 0, /*int argcount,*/ 0, /*int kwonlyargcount,*/ 0, /*int nlocals,*/ 0, /*int stacksize,*/ 0, /*int flags,*/ __pyx_empty_bytes, /*PyObject *code,*/ __pyx_empty_tuple, /*PyObject *consts,*/ __pyx_empty_tuple, /*PyObject *names,*/ __pyx_empty_tuple, /*PyObject *varnames,*/ __pyx_empty_tuple, /*PyObject *freevars,*/ __pyx_empty_tuple, /*PyObject *cellvars,*/ py_srcfile, /*PyObject *filename,*/ py_funcname, /*PyObject *name,*/ py_line, /*int firstlineno,*/ __pyx_empty_bytes /*PyObject *lnotab*/ ); Py_DECREF(py_srcfile); Py_DECREF(py_funcname); return py_code; bad: Py_XDECREF(py_srcfile); Py_XDECREF(py_funcname); return NULL; } static void __Pyx_AddTraceback(const char *funcname, int c_line, int py_line, const char *filename) { PyCodeObject *py_code = 0; PyObject *py_globals = 0; PyFrameObject *py_frame = 0; py_code = __pyx_find_code_object(c_line ? c_line : py_line); if (!py_code) { py_code = __Pyx_CreateCodeObjectForTraceback( funcname, c_line, py_line, filename); if (!py_code) goto bad; __pyx_insert_code_object(c_line ? c_line : py_line, py_code); } py_globals = PyModule_GetDict(__pyx_m); if (!py_globals) goto bad; py_frame = PyFrame_New( PyThreadState_GET(), /*PyThreadState *tstate,*/ py_code, /*PyCodeObject *code,*/ py_globals, /*PyObject *globals,*/ 0 /*PyObject *locals*/ ); if (!py_frame) goto bad; py_frame->f_lineno = py_line; PyTraceBack_Here(py_frame); bad: Py_XDECREF(py_code); Py_XDECREF(py_frame); } static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { while (t->p) { #if PY_MAJOR_VERSION < 3 if (t->is_unicode) { *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); } else if (t->intern) { *t->p = PyString_InternFromString(t->s); } else { *t->p = PyString_FromStringAndSize(t->s, t->n - 1); } #else /* Python 3+ has unicode identifiers */ if (t->is_unicode | t->is_str) { if (t->intern) { *t->p = PyUnicode_InternFromString(t->s); } else if (t->encoding) { *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); } else { *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); } } else { *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); } #endif if (!*t->p) return -1; ++t; } return 0; } static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); } static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { Py_ssize_t ignore; return __Pyx_PyObject_AsStringAndSize(o, &ignore); } static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT if ( #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII __Pyx_sys_getdefaultencoding_not_ascii && #endif PyUnicode_Check(o)) { #if PY_VERSION_HEX < 0x03030000 char* defenc_c; PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); if (!defenc) return NULL; defenc_c = PyBytes_AS_STRING(defenc); #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII { char* end = defenc_c + PyBytes_GET_SIZE(defenc); char* c; for (c = defenc_c; c < end; c++) { if ((unsigned char) (*c) >= 128) { PyUnicode_AsASCIIString(o); return NULL; } } } #endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ *length = PyBytes_GET_SIZE(defenc); return defenc_c; #else /* PY_VERSION_HEX < 0x03030000 */ if (PyUnicode_READY(o) == -1) return NULL; #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII if (PyUnicode_IS_ASCII(o)) { *length = PyUnicode_GET_DATA_SIZE(o); return PyUnicode_AsUTF8(o); } else { PyUnicode_AsASCIIString(o); return NULL; } #else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ return PyUnicode_AsUTF8AndSize(o, length); #endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ #endif /* PY_VERSION_HEX < 0x03030000 */ } else #endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ { char* result; int r = PyBytes_AsStringAndSize(o, &result, length); if (r < 0) { return NULL; } else { return result; } } } static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { int is_true = x == Py_True; if (is_true | (x == Py_False) | (x == Py_None)) return is_true; else return PyObject_IsTrue(x); } static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { PyNumberMethods *m; const char *name = NULL; PyObject *res = NULL; #if PY_MAJOR_VERSION < 3 if (PyInt_Check(x) || PyLong_Check(x)) #else if (PyLong_Check(x)) #endif return Py_INCREF(x), x; m = Py_TYPE(x)->tp_as_number; #if PY_MAJOR_VERSION < 3 if (m && m->nb_int) { name = "int"; res = PyNumber_Int(x); } else if (m && m->nb_long) { name = "long"; res = PyNumber_Long(x); } #else if (m && m->nb_int) { name = "int"; res = PyNumber_Long(x); } #endif if (res) { #if PY_MAJOR_VERSION < 3 if (!PyInt_Check(res) && !PyLong_Check(res)) { #else if (!PyLong_Check(res)) { #endif PyErr_Format(PyExc_TypeError, "__%s__ returned non-%s (type %.200s)", name, name, Py_TYPE(res)->tp_name); Py_DECREF(res); return NULL; } } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_TypeError, "an integer is required"); } return res; } static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { Py_ssize_t ival; PyObject* x = PyNumber_Index(b); if (!x) return -1; ival = PyInt_AsSsize_t(x); Py_DECREF(x); return ival; } static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { #if PY_VERSION_HEX < 0x02050000 if (ival <= LONG_MAX) return PyInt_FromLong((long)ival); else { unsigned char *bytes = (unsigned char *) &ival; int one = 1; int little = (int)*(unsigned char*)&one; return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); } #else return PyInt_FromSize_t(ival); #endif } static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) { unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x); if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) { if ((val != (unsigned PY_LONG_LONG)-1) || !PyErr_Occurred()) PyErr_SetString(PyExc_OverflowError, "value too large to convert to size_t"); return (size_t)-1; } return (size_t)val; } #endif /* Py_PYTHON_H */ ga-5-3/python/ga4py/gain/misc.pyx0000640005473000001440000010573112000110051015537 0ustar d3n000users# cython: profile=True import math from ga4py import ga from core import asarray from core import flatiter from core import get_dtype from core import get_shape from core import is_array from core import is_distributed from core import multiply from core import ndarray from core import _npin_piece_based_on_out from core import should_distribute from core import sync from core import zeros import numpy as np cimport numpy as np def zeros_like(a, dtype=None, order='K', subok=True): """Return an array of zeros with the same shape and type as a given array. Equivalent to ``a.copy().fill(0)``. Parameters ---------- a : array_like The shape and data-type of `a` define the parameters of the returned array. Returns ------- out : ndarray Array of zeros with same shape and type as `a`. See Also -------- ones_like : Return an array of ones with shape and type of input. empty_like : Return an empty array with shape and type of input. zeros : Return a new array setting values to zero. ones : Return a new array setting values to one. empty : Return a new uninitialized array. Examples -------- >>> x = np.arange(6) >>> x = x.reshape((2, 3)) >>> x array([[0, 1, 2], [3, 4, 5]]) >>> np.zeros_like(x) array([[0, 0, 0], [0, 0, 0]]) >>> y = np.arange(3, dtype=np.float) >>> y array([ 0., 1., 2.]) >>> np.zeros_like(y) array([ 0., 0., 0.]) """ return zeros(a.shape, dtype=a.dtype) def ones(shape, dtype=np.float, order='C'): """Return a new array of given shape and type, filled with ones. Please refer to the documentation for `zeros`. See Also -------- zeros Examples -------- >>> np.ones(5) array([ 1., 1., 1., 1., 1.]) >>> np.ones((5,), dtype=np.int) array([1, 1, 1, 1, 1]) >>> np.ones((2, 1)) array([[ 1.], [ 1.]]) >>> s = (2,2) >>> np.ones(s) array([[ 1., 1.], [ 1., 1.]]) """ if not should_distribute(shape): return np.ones(shape, dtype, order) a = ndarray(shape, dtype) buf = a.access() if buf is not None: buf[:] = 1 a.release_update() return a def ones_like(x): """ones_like(x[, out]) Returns an array of ones with the same shape and type as a given array. Equivalent to ``a.copy().fill(1)``. Please refer to the documentation for `zeros_like`. See Also -------- zeros_like Examples -------- >>> a = np.array([[1, 2, 3], [4, 5, 6]]) >>> np.ones_like(a) array([[1, 1, 1], [1, 1, 1]]) """ return ones(x.shape, dtype=x.dtype) def empty(shape, dtype=float, order='C'): """empty(shape, dtype=float, order='C') Return a new array of given shape and type, without initializing entries. Parameters ---------- shape : int or tuple of int Shape of the empty array dtype : data-type, optional Desired output data-type. order : {'C', 'F'}, optional Whether to store multi-dimensional data in C (row-major) or Fortran (column-major) order in memory. See Also -------- empty_like, zeros, ones Notes ----- `empty`, unlike `zeros`, does not set the array values to zero, and may therefore be marginally faster. On the other hand, it requires the user to manually set all the values in the array, and should be used with caution. Examples -------- >>> np.empty([2, 2]) array([[ -9.74499359e+001, 6.69583040e-309], #random data [ 2.13182611e-314, 3.06959433e-309]]) >>> np.empty([2, 2], dtype=int) array([[-1073741821, -1067949133], #random data [ 496041986, 19249760]]) """ return ndarray(shape, dtype) def empty_like(a, dtype=None, order='K', subok=True): """ Return a new array with the same shape and type as a given array. Parameters ---------- a : array_like The shape and data-type of `a` define the parameters of the returned array. Returns ------- out : ndarray Array of random data with the same shape and type as `a`. See Also -------- ones_like : Return an array of ones with shape and type of input. zeros_like : Return an array of zeros with shape and type of input. empty : Return a new uninitialized array. ones : Return a new array setting values to one. zeros : Return a new array setting values to zero. Notes ----- This function does *not* initialize the returned array; to do that use `zeros_like` or `ones_like` instead. It may be marginally faster than the functions that do set the array values. Examples -------- >>> a = ([1,2,3], [4,5,6]) # a is array-like >>> np.empty_like(a) array([[-1073741821, -1073741821, 3], #random [ 0, 0, -1073741821]]) >>> a = np.array([[1., 2., 3.],[4.,5.,6.]]) >>> np.empty_like(a) array([[ -2.00000715e+000, 1.48219694e-323, -2.00000572e+000], #random [ 4.38791518e-305, -2.00000715e+000, 4.17269252e-309]]) """ return empty(a.shape, dtype or a.dtype) def eye(N, M=None, k=0, dtype=float): """Return a 2-D array with ones on the diagonal and zeros elsewhere. Parameters ---------- N : int Number of rows in the output. M : int, optional Number of columns in the output. If None, defaults to `N`. k : int, optional Index of the diagonal: 0 refers to the main diagonal, a positive value refers to an upper diagonal, and a negative value to a lower diagonal. dtype : dtype, optional Data-type of the returned array. Returns ------- I : ndarray (N,M) An array where all elements are equal to zero, except for the `k`-th diagonal, whose values are equal to one. See Also -------- diag : Return a diagonal 2-D array using a 1-D array specified by the user. Examples -------- >>> np.eye(2, dtype=int) array([[1, 0], [0, 1]]) >>> np.eye(3, k=1) array([[ 0., 1., 0.], [ 0., 0., 1.], [ 0., 0., 0.]]) """ if M is None: M = N if not should_distribute((N,M)): return np.eye(N,M,k,dtype) a = zeros((N,M), dtype=dtype) nda = a.access() if nda is not None: lo,hi = a.distribution() indices = np.indices(nda.shape) indices[0] += lo[0] indices[1] += lo[1]-k bindex = (indices[0] == indices[1]) nda[bindex] = 1 a.release_update() return a def identity(n, dtype=None): """Return the identity array. The identity array is a square array with ones on the main diagonal. Parameters ---------- n : int Number of rows (and columns) in `n` x `n` output. dtype : data-type, optional Data-type of the output. Defaults to ``float``. Returns ------- out : ndarray `n` x `n` array with its main diagonal set to one, and all other elements 0. Examples -------- >>> np.identity(3) array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]]) """ if dtype is None: dtype = np.dtype(float) return eye(n,n,dtype=dtype) def fromfunction(func, shape, **kwargs): """Construct an array by executing a function over each coordinate. The resulting array therefore has a value ``fn(x, y, z)`` at coordinate ``(x, y, z)``. Parameters ---------- function : callable The function is called with N parameters, each of which represents the coordinates of the array varying along a specific axis. For example, if `shape` were ``(2, 2)``, then the parameters would be two arrays, ``[[0, 0], [1, 1]]`` and ``[[0, 1], [0, 1]]``. `function` must be capable of operating on arrays, and should return a scalar value. shape : (N,) tuple of ints Shape of the output array, which also determines the shape of the coordinate arrays passed to `function`. dtype : data-type, optional Data-type of the coordinate arrays passed to `function`. By default, `dtype` is float. Returns ------- out : any The result of the call to `function` is passed back directly. Therefore the type and shape of `out` is completely determined by `function`. See Also -------- indices, meshgrid Notes ----- Keywords other than `shape` and `dtype` are passed to `function`. Examples -------- >>> np.fromfunction(lambda i, j: i == j, (3, 3), dtype=int) array([[ True, False, False], [False, True, False], [False, False, True]], dtype=bool) >>> np.fromfunction(lambda i, j: i + j, (3, 3), dtype=int) array([[0, 1, 2], [1, 2, 3], [2, 3, 4]]) """ if not should_distribute(shape): return np.fromfunction(func, shape, **kwargs) dtype = kwargs.pop('dtype', np.float32) # create the new GA (collective operation) a = ndarray(shape, dtype) # determine which part of 'a' we maintain local_array = ga.access(a.handle) if local_array is not None: lo,hi = a.distribution() local_shape = hi-lo # create a numpy indices array args = np.indices(local_shape, dtype=dtype) # modify the indices arrays based on our distribution for index in xrange(len(lo)): args[index] += lo[index] # call the passed function buf = func(*args, **kwargs) # now put the data into the global array local_array[:] = buf #sync() return a def arange(start, stop=None, step=None, dtype=None, shape=None): """Return evenly spaced values within a given interval. Values are generated within the half-open interval ``[start, stop)`` (in other words, the interval including `start` but excluding `stop`). For integer arguments the function is equivalent to the Python built-in `range `_ function, but returns a ndarray rather than a list. Parameters ---------- start : number, optional Start of interval. The interval includes this value. The default start value is 0. stop : number End of interval. The interval does not include this value. step : number, optional Spacing between values. For any output `out`, this is the distance between two adjacent values, ``out[i+1] - out[i]``. The default step size is 1. If `step` is specified, `start` must also be given. dtype : dtype The type of the output array. If `dtype` is not given, infer the data type from the other input arguments. Hack Parameters --------------- shape : tuple of ints Useful shortcut when doing something like np.arange(...).reshape(...) Returns ------- out : ndarray Array of evenly spaced values. For floating point arguments, the length of the result is ``ceil((stop - start)/step)``. Because of floating point overflow, this rule may result in the last element of `out` being greater than `stop`. See Also -------- linspace : Evenly spaced numbers with careful handling of endpoints. ogrid: Arrays of evenly spaced numbers in N-dimensions mgrid: Grid-shaped arrays of evenly spaced numbers in N-dimensions Examples -------- >>> np.arange(3) array([0, 1, 2]) >>> np.arange(3.0) array([ 0., 1., 2.]) >>> np.arange(3,7) array([3, 4, 5, 6]) >>> np.arange(3,7,2) array([3, 5]) """ if step == 0: raise ValueError, "step size of 0 not allowed" if not step: step = 1 if not stop: start,stop = 0,start length = 0 if ((step < 0 and stop >= start) or (step > 0 and start >= stop)): length = 0 else: # true division, otherwise off by one length = int(math.ceil((stop-start)/step)) # bail if threshold not met if not should_distribute(length): return np.arange(start,stop,step,dtype) if dtype is None: if (isinstance(start, (int,long)) and isinstance(stop, (int,long)) and isinstance(step, (int,long))): dtype = np.int64 else: dtype = np.float64 a = None if shape is not None: shape = np.asarray(shape,dtype=np.int64) if np.prod(shape) != length: raise ValueError, "total size of new array must be unchanged" a = ndarray(shape, dtype) a_local = a.access() if a_local is not None: lo,hi = a.distribution() lshape = hi-lo v = np.add.reduce( (np.indices(lshape).reshape(len(lshape),-1).T + lo) * (np.asarray(a.strides)/a.itemsize), axis=1) a_local.flat = v*step + start a.release_update() else: a = ndarray(length, dtype) a_local = a.access() if a_local is not None: lo,hi = a.distribution() a_local[...] = np.arange(lo[0],hi[0]) a_local *= step a_local += start a.release_update() return a def linspace(start, stop, num=50, endpoint=True, retstep=False): """Return evenly spaced numbers over a specified interval. Returns `num` evenly spaced samples, calculated over the interval [`start`, `stop` ]. The endpoint of the interval can optionally be excluded. Parameters ---------- start : scalar The starting value of the sequence. stop : scalar The end value of the sequence, unless `endpoint` is set to False. In that case, the sequence consists of all but the last of ``num + 1`` evenly spaced samples, so that `stop` is excluded. Note that the step size changes when `endpoint` is False. num : int, optional Number of samples to generate. Default is 50. endpoint : bool, optional If True, `stop` is the last sample. Otherwise, it is not included. Default is True. retstep : bool, optional If True, return (`samples`, `step`), where `step` is the spacing between samples. Returns ------- samples : ndarray There are `num` equally spaced samples in the closed interval ``[start, stop]`` or the half-open interval ``[start, stop)`` (depending on whether `endpoint` is True or False). step : float (only if `retstep` is True) Size of spacing between samples. See Also -------- arange : Similiar to `linspace`, but uses a step size (instead of the number of samples). logspace : Samples uniformly distributed in log space. Examples -------- >>> np.linspace(2.0, 3.0, num=5) array([ 2. , 2.25, 2.5 , 2.75, 3. ]) >>> np.linspace(2.0, 3.0, num=5, endpoint=False) array([ 2. , 2.2, 2.4, 2.6, 2.8]) >>> np.linspace(2.0, 3.0, num=5, retstep=True) (array([ 2. , 2.25, 2.5 , 2.75, 3. ]), 0.25) Graphical illustration: >>> import matplotlib.pyplot as plt >>> N = 8 >>> y = np.zeros(N) >>> x1 = np.linspace(0, 10, N, endpoint=True) >>> x2 = np.linspace(0, 10, N, endpoint=False) >>> plt.plot(x1, y, 'o') >>> plt.plot(x2, y + 0.5, 'o') >>> plt.ylim([-0.5, 1]) >>> plt.show() """ # bail if threshold not met if not should_distribute(num): return np.linspace(start,stop,num,endpoint,retstep) a = ndarray(num) step = None if endpoint: step = (stop-start)/(num-1) else: step = (stop-start)/num buf = a.access() if buf is not None: lo,hi = a.distribution() lo,hi = lo[0],hi[0] buf[:] = np.arange(lo,hi)*step+start a.release_update() #sync() if retstep: return a,step return a def logspace(start, stop, num=50, endpoint=True, base=10.0): """Return numbers spaced evenly on a log scale. In linear space, the sequence starts at ``base ** start`` (`base` to the power of `start`) and ends with ``base ** stop`` (see `endpoint` below). Parameters ---------- start : float ``base ** start`` is the starting value of the sequence. stop : float ``base ** stop`` is the final value of the sequence, unless `endpoint` is False. In that case, ``num + 1`` values are spaced over the interval in log-space, of which all but the last (a sequence of length ``num``) are returned. num : integer, optional Number of samples to generate. Default is 50. endpoint : boolean, optional If true, `stop` is the last sample. Otherwise, it is not included. Default is True. base : float, optional The base of the log space. The step size between the elements in ``ln(samples) / ln(base)`` (or ``log_base(samples)``) is uniform. Default is 10.0. Returns ------- samples : ndarray `num` samples, equally spaced on a log scale. See Also -------- arange : Similiar to linspace, with the step size specified instead of the number of samples. Note that, when used with a float endpoint, the endpoint may or may not be included. linspace : Similar to logspace, but with the samples uniformly distributed in linear space, instead of log space. Notes ----- Logspace is equivalent to the code >>> y = linspace(start, stop, num=num, endpoint=endpoint) >>> power(base, y) Examples -------- >>> np.logspace(2.0, 3.0, num=4) array([ 100. , 215.443469 , 464.15888336, 1000. ]) >>> np.logspace(2.0, 3.0, num=4, endpoint=False) array([ 100. , 177.827941 , 316.22776602, 562.34132519]) >>> np.logspace(2.0, 3.0, num=4, base=2.0) array([ 4. , 5.0396842 , 6.34960421, 8. ]) Graphical illustration: >>> import matplotlib.pyplot as plt >>> N = 10 >>> x1 = np.logspace(0.1, 1, N, endpoint=True) >>> x2 = np.logspace(0.1, 1, N, endpoint=False) >>> y = np.zeros(N) >>> plt.plot(x1, y, 'o') >>> plt.plot(x2, y + 0.5, 'o') >>> plt.ylim([-0.5, 1]) >>> plt.show() """ # bail if threshold not met if not should_distribute(num): return np.logspace(start,stop,num,endpoint,base) a = ndarray(num) step = None if endpoint: step = (stop-start)/(num-1) else: step = (stop-start)/num buf = a.access() if buf is not None: lo,hi = a.distribution() lo,hi = lo[0],hi[0] buf[:] = base**(np.arange(lo,hi)*step+start) a.release_update() #sync() return a def dot(a, b, out=None): """dot(a, b) Dot product of two arrays. For 2-D arrays it is equivalent to matrix multiplication, and for 1-D arrays to inner product of vectors (without complex conjugation). For N dimensions it is a sum product over the last axis of `a` and the second-to-last of `b`:: dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m]) Parameters ---------- a : array_like First argument. b : array_like Second argument. Returns ------- output : ndarray Returns the dot product of `a` and `b`. If `a` and `b` are both scalars or both 1-D arrays then a scalar is returned; otherwise an array is returned. Raises ------ ValueError If the last dimension of `a` is not the same size as the second-to-last dimension of `b`. See Also -------- vdot : Complex-conjugating dot product. tensordot : Sum products over arbitrary axes. Examples -------- >>> np.dot(3, 4) 12 Neither argument is complex-conjugated: >>> np.dot([2j, 3j], [2j, 3j]) (-13+0j) For 2-D arrays it's the matrix product: >>> a = [[1, 0], [0, 1]] >>> b = [[4, 1], [2, 2]] >>> np.dot(a, b) array([[4, 1], [2, 2]]) >>> a = np.arange(3*4*5*6).reshape((3,4,5,6)) >>> b = np.arange(3*4*5*6)[::-1].reshape((5,4,6,3)) >>> np.dot(a, b)[2,3,2,1,2,2] 499128 >>> sum(a[2,3,2,:] * b[1,2,:,2]) 499128 """ a = asarray(a) b = asarray(b) if not (is_distributed(a) or is_distributed(b)): # numpy pass through return np.dot(a,b) # working with flatiter instances can be expensive, try this opt if (isinstance(a,flatiter) and isinstance(b,flatiter) and a._base is b._base): return (a._base * b._base).sum() if ((isinstance(a,flatiter) or a.ndim == 1) and (isinstance(b,flatiter) or b.ndim == 1)): if len(a) != len(b): raise ValueError, "objects are not aligned" tmp = multiply(a,b) ndtmp = tmp.access() local_sum = None if ndtmp is None: local_sum = np.add.reduce(np.asarray([0], dtype=tmp.dtype)) else: local_sum = np.add.reduce(ndtmp) return ga.gop_add(local_sum) elif a.ndim == 2 and b.ndim == 2: if a.shape[1] != b.shape[0]: raise ValueError, "objects are not aligned" # use GA gemm if certain conditions apply valid_types = [np.dtype(np.float32), np.dtype(np.float64), np.dtype(np.complex64), np.dtype(np.complex128)] if (a.base is None and b.base is None and a.dtype == b.dtype and a.dtype in valid_types): out = zeros((a.shape[0],b.shape[1]), a.dtype) ga.gemm(False, False, a.shape[0], b.shape[1], b.shape[0], 1, a.handle, b.handle, 1, out.handle) return out else: raise NotImplementedError elif isinstance(a,(ndarray,flatiter)) and isinstance(b,(ndarray,flatiter)): if a.shape[1] != b.shape[0]: raise ValueError, "objects are not aligned" raise NotImplementedError, "arbitrary dot" else: # assume we have a scalar somewhere, so just multiply return multiply(a,b) def diag(v, k=0): """Extract a diagonal or construct a diagonal array. Parameters ---------- v : array_like If `v` is a 2-D array, return a copy of its `k`-th diagonal. If `v` is a 1-D array, return a 2-D array with `v` on the `k`-th diagonal. k : int, optional Diagonal in question. The default is 0. Use `k>0` for diagonals above the main diagonal, and `k<0` for diagonals below the main diagonal. Returns ------- out : ndarray The extracted diagonal or constructed diagonal array. See Also -------- diagonal : Return specified diagonals. diagflat : Create a 2-D array with the flattened input as a diagonal. trace : Sum along diagonals. triu : Upper triangle of an array. tril : Lower triange of an array. Examples -------- >>> x = np.arange(9).reshape((3,3)) >>> x array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> np.diag(x) array([0, 4, 8]) >>> np.diag(x, k=1) array([1, 5]) >>> np.diag(x, k=-1) array([3, 7]) >>> np.diag(np.diag(x)) array([[0, 0, 0], [0, 4, 0], [0, 0, 8]]) """ v = asarray(v) if isinstance(v, ndarray): raise NotImplementedError, "TODO" # the following isn't right. # We want to scatter the values from the given diagonal into a brand # new distributed array, but how to compute the indices for the # scatter operation? Or should we "access" the newly created array # and "gather" values from the given diagonal? #if v.ndim == 1: # k_fabs = math.fabs(k) # N = k_fabs + len(v) # a = zeros((N,N), dtype=v.dtype) # ndv = v.access() # if ndv is not None: # lo,hi = v.distribution() # count = hi[0]-lo[0] # indices = np.ndarray(count*2,dtype=int) # if k >= 0: # indices[0::2] = np.arange(count)+lo[0] # indices[1::2] = np.arange(count)+lo[0]+k # else: # indices[0::2] = np.arange(count)+lo[0]+k_fabs # indices[1::2] = np.arange(count)+lo[0] # a.scatter( # return a #elif v.ndim == 2: # pass #else: # raise ValueError, "Input must be 1- or 2-d." else: return np.diag(v,k) def clip(a, a_min, a_max, out=None): """Clip (limit) the values in an array. Given an interval, values outside the interval are clipped to the interval edges. For example, if an interval of ``[0, 1]`` is specified, values smaller than 0 become 0, and values larger than 1 become 1. Parameters ---------- a : array_like Array containing elements to clip. a_min : scalar or array_like Minimum value. a_max : scalar or array_like Maximum value. If `a_min` or `a_max` are array_like, then they will be broadcasted to the shape of `a`. out : ndarray, optional The results will be placed in this array. It may be the input array for in-place clipping. `out` must be of the right shape to hold the output. Its type is preserved. Returns ------- clipped_array : ndarray An array with the elements of `a`, but where values < `a_min` are replaced with `a_min`, and those > `a_max` with `a_max`. See Also -------- numpy.doc.ufuncs : Section "Output arguments" Examples -------- >>> a = np.arange(10) >>> np.clip(a, 1, 8) array([1, 1, 2, 3, 4, 5, 6, 7, 8, 8]) >>> a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> np.clip(a, 3, 6, out=a) array([3, 3, 3, 3, 4, 5, 6, 6, 6, 6]) >>> a = np.arange(10) >>> a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> np.clip(a, [3,4,1,1,1,4,4,4,4,4], 8) array([3, 4, 2, 3, 4, 5, 6, 7, 8, 8]) """ # just in case a = asarray(a) a_min = asarray(a_min) a_max = asarray(a_max) if not (is_distributed(a) or is_distributed(a_min) or is_distributed(a_max) or is_distributed(out)): # no ndarray instances used, pass through immediately to numpy return np.clip(a, a_min, a_max, out) a_shape = get_shape(a) a_min_shape = get_shape(a_min) a_max_shape = get_shape(a_max) if out is None: out = ndarray(a_shape, get_dtype(a)) # sanity checks if not is_array(out): raise TypeError, "output must be an array" if out.shape != a.shape: raise ValueError, ("clip: Output array must have thesame shape as " "the input.") # Now figure out what to do... if isinstance(out, ndarray): sync() # get out as an np.ndarray first npout = out.access() if npout is not None: # this proc owns data # get matching and compatible portions of input arrays # broadcasting rules (may) apply if a is out: npa,release_a = npout,False else: npa,release_a = _npin_piece_based_on_out(a,out,a_shape) if a_min is out: npa_min,release_a_min = npout,False elif a_min is a: npa_min,release_a_min = npa,False else: npa_min,release_a_min = _npin_piece_based_on_out( a_min,out,a_min_shape) if a_max is out: npa_max,release_a_max = npout,False elif a_max is a: npa_max,release_a_max = npa,False elif a_max is a_min: npa_max,release_a_max = npa_min,False else: npa_max,release_a_max = _npin_piece_based_on_out( a_max,out,a_max_shape) np.clip(npa, npa_min, npa_max, npout) if release_a: a.release() if release_a_min: a_min.release() if release_a_max: a_max.release() out.release_update() #sync() elif isinstance(out, flatiter): raise NotImplementedError, "flatiter version of clip" #sync() ## first op: first and second and out are same object #if first is second is out: # self._binary_call(out.base,out.base,out.base,*args,**kwargs) # return out.copy() #else: # npout = out.access() # if npout is not None: # this proc 'owns' data # if is_distributed(first): # npfirst = first.get(out._range) # else: # npfirst = first[out._range] # if second is first: # npsecond = npfirst # elif is_distributed(second): # npsecond = second.get(out._range) # else: # npsecond = second[out._range] # self.func(npfirst, npsecond, npout, *args, **kwargs) # out.release_update() #sync() else: sync() # out is not distributed nda = a if is_distributed(a): nda = a.allget() nda_min = a_min if a is a_min: nda_min = nda elif is_distributed(a_min): nda_min = a_min.allget() nda_max = a_max if a is a_max: nda_max = nda elif a_max is a_min: nda_max = nda_min elif is_distributed(a_max): nda_max = a_max.allget() np.clip(a, nda_min, nda_max, out) #sync() # I don't think we need this one return out def indices(dimensions, dtype=int): """Return an array representing the indices of a grid. Compute an array where the subarrays contain index values 0,1,... varying only along the corresponding axis. Parameters ---------- dimensions : sequence of ints The shape of the grid. dtype : dtype, optional Data type of the result. Returns ------- grid : ndarray The array of grid indices, ``grid.shape = (len(dimensions),) + tuple(dimensions)``. See Also -------- mgrid, meshgrid Notes ----- The output shape is obtained by prepending the number of dimensions in front of the tuple of dimensions, i.e. if `dimensions` is a tuple ``(r0, ..., rN-1)`` of length ``N``, the output shape is ``(N,r0,...,rN-1)``. The subarrays ``grid[k]`` contains the N-D array of indices along the ``k-th`` axis. Explicitly:: grid[k,i0,i1,...,iN-1] = ik Examples -------- >>> grid = np.indices((2, 3)) >>> grid.shape (2, 2, 3) >>> grid[0] # row indices array([[0, 0, 0], [1, 1, 1]]) >>> grid[1] # column indices array([[0, 1, 2], [0, 1, 2]]) The indices can be used as an index into an array. >>> x = np.arange(20).reshape(5, 4) >>> row, col = np.indices((2, 3)) >>> x[row, col] array([[0, 1, 2], [4, 5, 6]]) Note that it would be more straightforward in the above example to extract the required elements directly with ``x[:2, :3]``. """ orig_shape = [dim for dim in dimensions] shape = [len(orig_shape)] + orig_shape if should_distribute(shape): a = zeros(shape, dtype=dtype) buf = a.access() if buf is not None: lo,hi = a.distribution() lohi_shape = hi-lo for i in range(lo[0],hi[0]): vec = np.arange(lohi_shape[i+1])+lo[i+1] vec_mod = [None]*len(orig_shape) vec_mod[i] = slice(None,None,None) values = vec[vec_mod] buf[i-lo[0]][:] = values a.release_update() else: return np.indices(orig_shape,dtype) return a def shape(a): """Return the shape of an array. Parameters ---------- a : array_like Input array. Returns ------- shape : tuple of ints The elements of the shape tuple give the lengths of the corresponding array dimensions. See Also -------- alen ndarray.shape : Equivalent array method. Examples -------- >>> np.shape(np.eye(3)) (3, 3) >>> np.shape([[1, 2]]) (1, 2) >>> np.shape([0]) (1,) >>> np.shape(0) () >>> a = np.array([(1, 2), (3, 4)], dtype=[('x', 'i4'), ('y', 'i4')]) >>> np.shape(a) (2,) >>> a.shape (2,) """ return asarray(a).shape def diagonal(a, offset=0, axis1=0, axis2=1): """Return specified diagonals. If `a` is 2-D, returns the diagonal of `a` with the given offset, i.e., the collection of elements of the form ``a[i, i+offset]``. If `a` has more than two dimensions, then the axes specified by `axis1` and `axis2` are used to determine the 2-D sub-array whose diagonal is returned. The shape of the resulting array can be determined by removing `axis1` and `axis2` and appending an index to the right equal to the size of the resulting diagonals. Parameters ---------- a : array_like Array from which the diagonals are taken. offset : int, optional Offset of the diagonal from the main diagonal. Can be positive or negative. Defaults to main diagonal (0). axis1 : int, optional Axis to be used as the first axis of the 2-D sub-arrays from which the diagonals should be taken. Defaults to first axis (0). axis2 : int, optional Axis to be used as the second axis of the 2-D sub-arrays from which the diagonals should be taken. Defaults to second axis (1). Returns ------- array_of_diagonals : ndarray If `a` is 2-D, a 1-D array containing the diagonal is returned. If the dimension of `a` is larger, then an array of diagonals is returned, "packed" from left-most dimension to right-most (e.g., if `a` is 3-D, then the diagonals are "packed" along rows). Raises ------ ValueError If the dimension of `a` is less than 2. See Also -------- diag : MATLAB work-a-like for 1-D and 2-D arrays. diagflat : Create diagonal arrays. trace : Sum along diagonals. Examples -------- >>> a = np.arange(4).reshape(2,2) >>> a array([[0, 1], [2, 3]]) >>> a.diagonal() array([0, 3]) >>> a.diagonal(1) array([1]) A 3-D example: >>> a = np.arange(8).reshape(2,2,2); a array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]]) >>> a.diagonal(0, # Main diagonals of two arrays created by skipping ... 0, # across the outer(left)-most axis last and ... 1) # the "middle" (row) axis first. array([[0, 6], [1, 7]]) The sub-arrays whose main diagonals we just obtained; note that each corresponds to fixing the right-most (column) axis, and that the diagonals are "packed" in rows. >>> a[:,:,0] # main diagonal is [0 6] array([[0, 2], [4, 6]]) >>> a[:,:,1] # main diagonal is [1 7] array([[1, 3], [5, 7]]) """ return asarray(a).diagonal(offset, axis1, axis2) ga-5-3/python/ga4py/gah.pxd0000640005473000001440000007302311535773525014437 0ustar d3n000usersfrom libc.stdio cimport FILE from libc.stdint cimport int64_t cdef extern from "typesf2c.h": ctypedef int Integer ctypedef float Real ctypedef double DoublePrecision ctypedef struct DoubleComplex: DoublePrecision real DoublePrecision imag ctypedef struct SingleComplex: Real real Real imag cdef extern from "ga.h": ctypedef Integer ga_nbhdl_t void GA_Abs_value(int g_a) void GA_Abs_value_patch(int g_a, int *lo, int *hi) void GA_Add_constant(int g_a, void* alpha) void GA_Add_constant_patch(int g,int *lo,int *hi,void *alpha) void GA_Add_diagonal(int g_a, int g_v) void GA_Add(void *alpha, int g_a, void* beta, int g_b, int g_c) int GA_Allocate(int g_a) int GA_Assemble_duplicate(int g_a, char *name, void *ptr) void GA_Brdcst(void *buf, int lenbuf, int root) SingleComplex GA_Cdot(int g_a, int g_b) void GA_Cgop(SingleComplex x[], int n, char *op) void GA_Cgemm(char ta, char tb, int m, int n, int k, SingleComplex alpha, int g_a, int g_b, SingleComplex beta, int g_c ) void GA_Check_handle(int g_a, char *string) int GA_Cluster_nnodes() int GA_Cluster_nodeid() int GA_Cluster_nprocs(int x) int GA_Cluster_procid(int x, int y) int GA_Cluster_proc_nodeid(int proc) int GA_Compare_distr(int g_a, int g_b) void GA_Copy(int g_a, int g_b) int GA_Create_handle() int GA_Create_mutexes(int number) double GA_Ddot(int g_a, int g_b) void GA_Destroy(int g_a) int GA_Destroy_mutexes() void GA_Dgemm(char ta, char tb, int m, int n, int k, double alpha, int g_a, int g_b, double beta, int g_c ) void GA_Dgop(double x[], int n, char *op) void GA_Diag(int g_a, int g_s, int g_v, void *eval) void GA_Diag_reuse(int reuse, int g_a, int g_s, int g_v, void *eval) void GA_Diag_seq(int g_a, int g_s, int g_v, void *eval) void GA_Diag_std(int g_a, int g_v, void *eval) void GA_Diag_std_seq(int g_a, int g_v, void *eval) int GA_Duplicate(int g_a, char* array_name) void GA_Elem_divide(int g_a, int g_b, int g_c) void GA_Elem_divide_patch(int g_a,int *alo,int *ahi, int g_b,int *blo,int *bhi,int g_c,int *clo,int *chi) void GA_Elem_maximum(int g_a, int g_b, int g_c) void GA_Elem_maximum_patch(int g_a,int *alo,int *ahi, int g_b,int *blo,int *bhi,int g_c,int *clo,int *chi) void GA_Elem_minimum(int g_a, int g_b, int g_c) void GA_Elem_minimum_patch(int g_a,int *alo,int *ahi, int g_b,int *blo,int *bhi,int g_c,int *clo,int *chi) void GA_Elem_multiply(int g_a, int g_b, int g_c) void GA_Elem_multiply_patch(int g_a,int *alo,int *ahi, int g_b,int *blo,int *bhi,int g_c,int *clo,int *chi) void GA_Error(char *str, int code) float GA_Fdot(int g_a, int g_b) void GA_Fence() void GA_Fgop(float x[], int n, char *op) void GA_Fill(int g_a, void *value) void GA_Freemem(void* ptr) void GA_Get_block_info(int g_a, int num_blocks[], int block_dims[]) int GA_Get_debug() void GA_Get_diag(int g_a, int g_v) int GA_Get_dimension(int g_a) void* GA_Getmem(int type, int nelem, int grp_id) int GA_Get_pgroup(int g_a) int GA_Get_pgroup_size(int grp_id) void GA_Get_proc_grid(int g_a, int dims[]) void GA_Get_proc_index(int g_a, int iproc, int subscript[]) void GA_Gop(int type, void *x, int n, char *op) int GA_Has_ghosts(int g_a) int GA_Idot(int g_a, int g_b) void GA_Igop(int x[], int n, char *op) void GA_Init_fence() void GA_Initialize_args(int *argc, char ***argv) void GA_Initialize_ltd(size_t limit) void GA_Initialize() size_t GA_Inquire_memory() char* GA_Inquire_name(int g_a) int GA_Is_mirrored(int g_a) void GA_List_nodeid(int *list, int nprocs) long GA_Ldot(int g_a, int g_b) void GA_Lgop(long x[], int n, char *op) long long GA_Lldot(int g_a, int g_b) void GA_Llgop(long long x[], int n, char *op) int GA_Llt_solve(int g_a, int g_b) void GA_Lock(int mutex) void GA_Lu_solve(char tran, int g_a, int g_b) void GA_Mask_sync(int first, int last) void GA_Matmul_patch(char transa, char transb, void* alpha, void *beta, int g_a, int ailo, int aihi, int ajlo, int ajhi, int g_b, int bilo, int bihi, int bjlo, int bjhi, int g_c, int cilo, int cihi, int cjlo, int cjhi) void GA_Median(int g_a, int g_b, int g_c, int g_m) void GA_Median_patch(int g_a, int *alo, int *ahi, int g_b, int *blo, int *bhi, int g_c, int *clo, int *chi, int g_m, int *mlo, int *mhi) size_t GA_Memory_avail() int GA_Memory_limited() void GA_Merge_mirrored(int g_a) void GA_Nblock(int g_a, int *nblock) int GA_Ndim(int g_a) int GA_Nnodes() int GA_Nodeid() void GA_Norm1(int g_a, double *nm) void GA_Norm_infinity(int g_a, double *nm) int GA_Pgroup_absolute_id(int pgroup, int pid) void GA_Pgroup_brdcst(int grp, void *buf, int lenbuf, int root) void GA_Pgroup_cgop(int grp, SingleComplex x[], int n, char *op) int GA_Pgroup_create(int *list, int count) int GA_Pgroup_destroy(int grp) void GA_Pgroup_dgop(int grp, double x[], int n, char *op) void GA_Pgroup_fgop(int grp, float x[], int n, char *op) int GA_Pgroup_get_default() int GA_Pgroup_get_mirror() int GA_Pgroup_get_world() void GA_Pgroup_igop(int grp, int x[], int n, char *op) void GA_Pgroup_lgop(int grp, long x[], int n, char *op) void GA_Pgroup_llgop(int grp, long long x[], int n, char *op) int GA_Pgroup_nnodes(int grp_id) int GA_Pgroup_nodeid(int grp_id) void GA_Pgroup_set_default(int p_handle) int GA_Pgroup_split(int grp_id, int num_group) int GA_Pgroup_split_irreg(int grp_id, int color) void GA_Pgroup_sync(int grp_id) void GA_Pgroup_zgop(int grp, DoubleComplex x[], int n, char *op) void GA_Print_distribution(int g_a) void GA_Print_file(FILE *file, int g_a) void GA_Print(int g_a) void GA_Print_patch(int g_a,int ilo,int ihi,int jlo,int jhi,int pretty) void GA_Print_stats() void GA_Randomize(int g_a, void *value) void GA_Recip(int g_a) void GA_Recip_patch(int g_a,int *lo, int *hi) void GA_Register_stack_memory(void * (*ext_alloc)(size_t, int, char *), void (*ext_free)(void *)) void GA_Scale_cols(int g_a, int g_v) void GA_Scale(int g_a, void *value) void GA_Scale_rows(int g_a, int g_v) void GA_Scan_add(int g_a, int g_b, int g_sbit, int lo, int hi, int excl) void GA_Scan_copy(int g_a, int g_b, int g_sbit, int lo, int hi) void GA_Set_array_name(int g_a, char *name) void GA_Set_block_cyclic(int g_a, int dims[]) void GA_Set_block_cyclic_proc_grid(int g_a, int block[], int proc_grid[]) void GA_Set_chunk(int g_a, int chunk[]) void GA_Set_data(int g_a, int ndim, int dims[], int type) void GA_Set_debug(int flag) void GA_Set_diagonal(int g_a, int g_v) void GA_Set_ghost_corner_flag(int g_a, int flag) void GA_Set_ghosts(int g_a, int width[]) void GA_Set_irreg_distr(int g_a, int map[], int block[]) void GA_Set_irreg_flag(int g_a, int flag) void GA_Set_memory_limit(size_t limit) void GA_Set_pgroup(int g_a, int p_handle) void GA_Set_restricted(int g_a, int list[], int size) void GA_Set_restricted_range(int g_a, int lo_proc, int hi_proc) void GA_Sgemm(char ta, char tb, int m, int n, int k, float alpha, int g_a, int g_b, float beta, int g_c ) void GA_Shift_diagonal(int g_a, void *c) int GA_Solve(int g_a, int g_b) int GA_Spd_invert(int g_a) void GA_Step_bound_info(int g_xx, int g_vv, int g_xxll, int g_xxuu, void *boundmin, void *wolfemin, void *boundmax) void GA_Step_bound_info_patch(int g_xx, int *xxlo, int *xxhi, int g_vv, int *vvlo, int *vvhi, int g_xxll, int *xxlllo, int *xxllhi, int g_xxuu, int *xxuulo, int *xxuuhi, void *boundmin, void *wolfemin, void *boundmax) void GA_Step_max(int g_a, int g_b, void *step) void GA_Step_max_patch(int g_a, int *alo, int *ahi, int g_b, int *blo, int *bhi, void *step) void GA_Summarize(int verbose) void GA_Symmetrize(int g_a) void GA_Sync() void GA_Terminate() int GA_Total_blocks(int g_a) void GA_Transpose(int g_a, int g_b) void GA_Unlock(int mutex) void GA_Update_ghosts(int g_a) int GA_Uses_fapi() int GA_Uses_ma() int GA_Uses_proc_grid(int g_a) int GA_Valid_handle(int g_a) int GA_Verify_handle(int g_a) double GA_Wtime() DoubleComplex GA_Zdot(int g_a, int g_b) void GA_Zgop(DoubleComplex x[], int n, char *op) void GA_Zero_diagonal(int g_a) void GA_Zero(int g_a) void GA_Zgemm(char ta, char tb, int m, int n, int k, DoubleComplex alpha, int g_a, int g_b, DoubleComplex beta, int g_c ) void NGA_Access_block_grid(int g_a, int index[], void *ptr, int ld[]) void NGA_Access_block(int g_a, int idx, void *ptr, int ld[]) void NGA_Access_block_segment(int g_a, int proc, void *ptr, int *len) void NGA_Access_ghost_element(int g_a, void *ptr, int subscript[], int ld[]) void NGA_Access_ghosts(int g_a, int dims[], void *ptr, int ld[]) void NGA_Access(int g_a, int lo[], int hi[], void *ptr, int ld[]) void NGA_Acc(int g_a, int lo[], int hi[],void* buf,int ld[],void* alpha) void NGA_Add_patch(void * alpha, int g_a, int alo[], int ahi[], void * beta, int g_b, int blo[], int bhi[], int g_c, int clo[], int chi[]) SingleComplex NGA_Cdot_patch(int g_a, char t_a, int alo[], int ahi[], int g_b, char t_b, int blo[], int bhi[]) int NGA_Compare_distr(int g_a, int g_b) void NGA_Copy_patch(char trans, int g_a, int alo[], int ahi[], int g_b, int blo[], int bhi[]) int NGA_Create_config(int type,int ndim,int dims[], char *name, int chunk[], int p_handle) int NGA_Create_ghosts_config(int type,int ndim,int dims[], int width[], char *name, int chunk[], int p_handle) int NGA_Create_ghosts(int type,int ndim,int dims[], int width[], char *name, int chunk[]) int NGA_Create_ghosts_irreg_config(int type,int ndim,int dims[], int width[], char *name, int map[], int nblock[], int p_handle) int NGA_Create_ghosts_irreg(int type,int ndim,int dims[], int width[], char *name, int map[], int nblock[]) int NGA_Create(int type,int ndim,int dims[], char *name, int chunk[]) int NGA_Create(int type,int ndim,int dims[], char *name, int chunk[]) int NGA_Create_irreg_config(int type,int ndim,int dims[],char *name, int map[], int block[], int p_handle) int NGA_Create_irreg(int type,int ndim,int dims[],char *name, int map[], int block[]) int NGA_Create_handle() int NGA_Deregister_type(int type) void NGA_Destroy(int g_a) int NGA_Destroy_mutexes() double NGA_Ddot_patch(int g_a, char t_a, int alo[], int ahi[], int g_b, char t_b, int blo[], int bhi[]) void NGA_Distribution(int g_a, int iproc, int lo[], int hi[]) int NGA_Duplicate(int g_a, char* array_name) void NGA_Error(char *str, int code) float NGA_Fdot_patch(int g_a, char t_a, int alo[], int ahi[], int g_b, char t_b, int blo[], int bhi[]) void NGA_Fence() void NGA_Fill(int g_a, void *value) void NGA_Fill_patch(int g_a, int lo[], int hi[], void *val) void NGA_Gather(int g_a, void *v, int* subsArray[], int n) void NGA_Gather_flat(int g_a, void *v, int subsArray[], int n) void NGA_Get(int g_a, int lo[], int hi[], void* buf, int ld[]) void NGA_Get_block_info(int g_a, int num_blocks[], int block_dims[]) int NGA_Get_debug() int NGA_Get_dimension(int g_a) void NGA_Get_field(int g_a, int *lo, int *hi, int foff, int fsize, void *buf, int *ld) void NGA_Get_ghost_block(int g_a, int lo[], int hi[], void *buf, int ld[]) int NGA_Get_pgroup(int g_a) int NGA_Get_pgroup_size(int grp_id) void NGA_Get_proc_grid(int g_a, int dims[]) void NGA_Get_proc_index(int g_a, int iproc, int subscript[]) int NGA_Has_ghosts(int g_a) int NGA_Idot_patch(int g_a, char t_a, int alo[], int ahi[], int g_b, char t_b, int blo[], int bhi[]) void NGA_Init_fence() void NGA_Initialize() void NGA_Initialize_ltd(size_t limit) void NGA_Inquire(int g_a, int *type, int *ndim, int dims[]) size_t NGA_Inquire_memory() char* NGA_Inquire_name(int g_a) int NGA_Is_mirrored(int g_a) void NGA_List_nodeid(int *list, int nprocs) long NGA_Ldot_patch(int g_a, char t_a, int alo[], int ahi[], int g_b, char t_b, int blo[], int bhi[]) long long NGA_Lldot_patch(int g_a, char t_a, int alo[], int ahi[], int g_b, char t_b, int blo[], int bhi[]) int NGA_Locate(int g_a, int subscript[]) int NGA_Locate_num_blocks(int g_a, int lo[], int hi[]) int NGA_Locate_nnodes(int g_a, int lo[], int hi[]) int NGA_Locate_region(int g_a,int lo[],int hi[],int map[],int procs[]) void NGA_Lock(int mutex) void NGA_Mask_sync(int first, int last) void NGA_Matmul_patch(char transa, char transb, void* alpha, void *beta, int g_a, int alo[], int ahi[], int g_b, int blo[], int bhi[], int g_c, int clo[], int chi[]) size_t NGA_Memory_avail() int NGA_Memory_limited() void NGA_Merge_distr_patch(int g_a, int alo[], int ahi[], int g_b, int blo[], int bhi[]) void NGA_Merge_mirrored(int g_a) void NGA_Nblock(int g_a, int *nblock) void NGA_NbAcc(int g_a,int lo[], int hi[],void* buf,int ld[],void* alpha, ga_nbhdl_t* nbhandle) void NGA_NbGet_ghost_dir(int g_a, int mask[], ga_nbhdl_t* handle) void NGA_NbGet(int g_a, int lo[], int hi[], void* buf, int ld[], ga_nbhdl_t* nbhandle) void NGA_Nbget_field(int g_a, int *lo, int *hi, int foff, int fsize,void *buf, int *ld, ga_nbhdl_t *nbhandle) void NGA_Nbput_field(int g_a, int *lo, int *hi, int foff, int fsize, void *buf, int *ld, ga_nbhdl_t *nbhandle) void NGA_NbPut(int g_a, int lo[], int hi[], void* buf, int ld[], ga_nbhdl_t* nbhandle) int NGA_NbTest(ga_nbhdl_t* nbhandle) void NGA_NbWait(ga_nbhdl_t* nbhandle) int NGA_Ndim(int g_a) int NGA_Nnodes() int NGA_Nodeid() void NGA_Periodic_acc(int g_a, int lo[], int hi[],void* buf,int ld[],void* alpha) void NGA_Periodic_get(int g_a, int lo[], int hi[], void* buf, int ld[]) void NGA_Periodic_put(int g_a, int lo[], int hi[], void* buf, int ld[]) int NGA_Pgroup_absolute_id(int pgroup, int pid) int NGA_Pgroup_create(int *list, int count) int NGA_Pgroup_destroy(int grp) int NGA_Pgroup_get_default() int NGA_Pgroup_get_mirror() int NGA_Pgroup_get_world() int NGA_Pgroup_nnodes(int grp_id) int NGA_Pgroup_nodeid(int grp_id) void NGA_Pgroup_set_default(int p_handle) int NGA_Pgroup_split(int grp_id, int num_group) int NGA_Pgroup_split_irreg(int grp_id, int color) void NGA_Pgroup_sync(int grp_id) void NGA_Print_patch(int g_a, int lo[], int hi[], int pretty) void NGA_Proc_topology(int g_a, int proc, int coord[]) void NGA_Put(int g_a, int lo[], int hi[], void* buf, int ld[]) void NGA_Put_field(int g_a, int *lo, int *hi, int foff, int fsize, void *buf, int *ld) void NGA_Randomize(int g_a, void *value) long NGA_Read_inc(int g_a, int subscript[], long inc) int NGA_Register_type(size_t bytes) void NGA_Release_block_grid(int g_a, int index[]) void NGA_Release_block(int g_a, int idx) void NGA_Release_block_segment(int g_a, int idx) void NGA_Release_ghost_element(int g_a, int index[]) void NGA_Release_ghosts(int g_a) void NGA_Release(int g_a, int lo[], int hi[]) void NGA_Release_update_block_grid(int g_a, int index[]) void NGA_Release_update_block(int g_a, int idx) void NGA_Release_update_block_segment(int g_a, int idx) void NGA_Release_update_ghost_element(int g_a, int index[]) void NGA_Release_update_ghosts(int g_a) void NGA_Release_update(int g_a, int lo[], int hi[]) void NGA_Scale_patch(int g_a, int lo[], int hi[], void *alpha) void NGA_Scatter_acc(int g_a, void *v, int* subsArray[], int n, void *alpha) void NGA_Scatter_acc_flat(int g_a, void *v, int subsArray[], int n, void *alpha) void NGA_Scatter(int g_a, void *v, int* subsArray[], int n) void NGA_Scatter_flat(int g_a, void *v, int subsArray[], int n) void NGA_Select_elem(int g_a, char* op, void* val, int *index) void NGA_Set_array_name(int g_a, char *name) void NGA_Set_block_cyclic(int g_a, int dims[]) void NGA_Set_block_cyclic_proc_grid(int g_a, int block[], int proc_grid[]) void NGA_Set_chunk(int g_a, int chunk[]) void NGA_Set_data(int g_a, int ndim, int dims[], int type) void NGA_Set_debug(int flag) void NGA_Set_ghosts(int g_a, int width[]) void NGA_Set_irreg_distr(int g_a, int map[], int block[]) void NGA_Set_irreg_flag(int g_a, int flag) void NGA_Set_memory_limit(size_t limit) void NGA_Set_pgroup(int g_a, int p_handle) void NGA_Set_restricted(int g_a, int list[], int size) void NGA_Set_restricted_range(int g_a, int lo_proc, int hi_proc) void NGA_Strided_acc(int g_a, int lo[], int hi[], int skip[], void* buf, int ld[], void *alpha) void NGA_Strided_get(int g_a, int lo[], int hi[], int skip[], void* buf, int ld[]) void NGA_Strided_put(int g_a, int lo[], int hi[], int skip[], void* buf, int ld[]) void NGA_Sync() void NGA_Terminate() int NGA_Total_blocks(int g_a) void NGA_Unlock(int mutex) int NGA_Update_ghost_dir(int g_a, int dimension, int idir, int flag) int NGA_Uses_ma() int NGA_Uses_proc_grid(int g_a) int NGA_Valid_handle(int g_a) int NGA_Verify_handle(int g_a) DoubleComplex NGA_Zdot_patch(int g_a, char t_a, int alo[], int ahi[], int g_b, char t_b, int blo[], int bhi[]) void NGA_Zero_patch(int g_a, int lo[], int hi[]) void GA_Abs_value_patch64(int g_a, int64_t *lo, int64_t *hi) void GA_Add_constant_patch64(int g,int64_t *lo,int64_t *hi,void *alpha) void GA_Cgemm64(char ta, char tb, int64_t m, int64_t n, int64_t k, SingleComplex alpha, int g_a, int g_b, SingleComplex beta, int g_c ) void GA_Dgemm64(char ta, char tb, int64_t m, int64_t n, int64_t k, double alpha, int g_a, int g_b, double beta, int g_c ) void GA_Elem_divide_patch64(int g_a, int64_t alo[], int64_t ahi[], int g_b, int64_t blo[], int64_t bhi[], int g_c, int64_t clo[], int64_t chi[]) void GA_Elem_maximum_patch64(int g_a,int64_t *alo,int64_t *ahi, int g_b,int64_t *blo,int64_t *bhi, int g_c,int64_t *clo,int64_t *chi) void GA_Elem_minimum_patch64(int g_a,int64_t *alo,int64_t *ahi, int g_b,int64_t *blo,int64_t *bhi, int g_c,int64_t *clo,int64_t *chi) void GA_Elem_multiply_patch64(int g_a, int64_t alo[], int64_t ahi[], int g_b, int64_t blo[], int64_t bhi[], int g_c, int64_t clo[], int64_t chi[]) void GA_Matmul_patch64(char transa, char transb, void* alpha, void *beta, int g_a, int64_t ailo, int64_t aihi, int64_t ajlo, int64_t ajhi, int g_b, int64_t bilo, int64_t bihi, int64_t bjlo, int64_t bjhi, int g_c, int64_t cilo, int64_t cihi, int64_t cjlo, int64_t cjhi) void GA_Median_patch64(int g_a, int64_t *alo, int64_t *ahi, int g_b, int64_t *blo, int64_t *bhi, int g_c, int64_t *clo, int64_t *chi, int g_m, int64_t *mlo, int64_t *mhi) void GA_Pack64(int g_src, int g_dest, int g_mask, int64_t lo, int64_t hi, int64_t *icount) void GA_Pack(int g_src, int g_dest, int g_mask, int lo, int hi, int *icount) void GA_Patch_enum64(int g_a, int64_t lo, int64_t hi, void *start, void *inc) void GA_Patch_enum(int g_a, int lo, int hi, void *start, void *inc) void GA_Recip_patch64(int g_a,int64_t *lo, int64_t *hi) void GA_Scan_add64(int g_a, int g_b, int g_sbit, int64_t lo, int64_t hi, int excl) void GA_Scan_copy64(int g_a, int g_b, int g_sbit, int64_t lo, int64_t hi) void GA_Set_chunk64(int g_a, int64_t chunk[]) void GA_Set_data64(int g_a, int ndim, int64_t dims[], int type) void GA_Set_ghosts64(int g_a, int64_t width[]) void GA_Set_irreg_distr64(int g_a, int64_t map[], int64_t block[]) void GA_Sgemm64(char ta, char tb, int64_t m, int64_t n, int64_t k, float alpha, int g_a, int g_b, float beta, int g_c ) void GA_Step_bound_info_patch64(int g_xx, int64_t xxlo[], int64_t xxhi[], int g_vv, int64_t vvlo[], int64_t vvhi[], int g_xxll, int64_t xxlllo[], int64_t xxllhi[], int64_t g_xxuu, int64_t xxuulo[], int64_t xxuuhi[], void *boundmin, void *wolfemin, void *boundmax) void GA_Step_max_patch64(int g_a, int64_t alo[], int64_t ahi[], int g_b, int64_t blo[], int64_t bhi[], void *step) void GA_Unpack64(int g_src, int g_dest, int g_mask, int64_t lo, int64_t hi, int64_t *icount) void GA_Unpack(int g_src, int g_dest, int g_mask, int lo, int hi, int *icount) void GA_Zgemm64(char ta, char tb, int64_t m, int64_t n, int64_t k, DoubleComplex alpha, int g_a, int g_b, DoubleComplex beta, int g_c ) void NGA_Acc64(int g_a, int64_t lo[], int64_t hi[],void* buf,int64_t ld[],void* alpha) void NGA_Access64(int g_a, int64_t lo[], int64_t hi[], void *ptr, int64_t ld[]) void NGA_Access_block64(int g_a, int64_t idx, void *ptr, int64_t ld[]) void NGA_Access_block_grid64(int g_a, int64_t index[], void *ptr, int64_t ld[]) void NGA_Access_block_segment64(int g_a, int proc, void *ptr, int64_t *len) void NGA_Access_ghost_element64(int g_a, void *ptr, int64_t subscript[], int64_t ld[]) void NGA_Access_ghosts64(int g_a, int64_t dims[], void *ptr, int64_t ld[]) void NGA_Add_patch64(void * alpha, int g_a, int64_t alo[], int64_t ahi[], void * beta, int g_b, int64_t blo[], int64_t bhi[], int g_c, int64_t clo[], int64_t chi[]) SingleComplex NGA_Cdot_patch64(int g_a, char t_a, int64_t alo[], int64_t ahi[], int g_b, char t_b, int64_t blo[], int64_t bhi[]) void NGA_Copy_patch64(char trans, int g_a, int64_t alo[], int64_t ahi[], int g_b, int64_t blo[], int64_t bhi[]) int NGA_Create64(int type,int ndim,int64_t dims[], char *name, int64_t chunk[]) int NGA_Create_config64(int type,int ndim,int64_t dims[], char *name, int64_t chunk[], int p_handle) int NGA_Create_ghosts64(int type,int ndim,int64_t dims[], int64_t width[], char *name, int64_t chunk[]) int NGA_Create_ghosts_config64(int type,int ndim,int64_t dims[], int64_t width[], char *name, int64_t chunk[], int p_handle) int NGA_Create_ghosts_irreg64(int type,int ndim,int64_t dims[], int64_t width[], char *name, int64_t map[], int64_t nblock[]) int NGA_Create_ghosts_irreg_config64(int type,int ndim,int64_t dims[], int64_t width[], char *name, int64_t map[], int64_t nblock[], int p_handle) int NGA_Create_irreg64(int type,int ndim,int64_t dims[],char *name, int64_t map[], int64_t block[]) int NGA_Create_irreg_config64(int type,int ndim,int64_t dims[],char *name, int64_t map[], int64_t block[], int p_handle) double NGA_Ddot_patch64(int g_a, char t_a, int64_t alo[], int64_t ahi[], int g_b, char t_b, int64_t blo[], int64_t bhi[]) void NGA_Distribution64(int g_a, int iproc, int64_t lo[], int64_t hi[]) float NGA_Fdot_patch64(int g_a, char t_a, int64_t alo[], int64_t ahi[], int g_b, char t_b, int64_t blo[], int64_t bhi[]) void NGA_Fill_patch64(int g_a, int64_t lo[], int64_t hi[], void *val) void NGA_Gather64(int g_a, void *v, int64_t* subsArray[], int64_t n) void NGA_Gather_flat64(int g_a, void *v, int64_t subsArray[], int64_t n) void NGA_Get64(int g_a, int64_t lo[], int64_t hi[], void* buf, int64_t ld[]) void NGA_Get_ghost_block64(int g_a, int64_t lo[], int64_t hi[], void* buf, int64_t ld[]) int NGA_Idot_patch64(int g_a, char t_a, int64_t alo[], int64_t ahi[], int g_b, char t_b, int64_t blo[], int64_t bhi[]) void NGA_Inquire64(int g_a, int *type, int *ndim, int64_t dims[]) long NGA_Ldot_patch64(int g_a, char t_a, int64_t alo[], int64_t ahi[], int g_b, char t_b, int64_t blo[], int64_t bhi[]) long long NGA_Lldot_patch64(int g_a, char t_a, int64_t alo[], int64_t ahi[], int g_b, char t_b, int64_t blo[], int64_t bhi[]) int NGA_Locate64(int g_a, int64_t subscript[]) int NGA_Locate_nnodes64(int g_a, int64_t lo[], int64_t hi[]) int NGA_Locate_region64(int g_a,int64_t lo[],int64_t hi[],int64_t map[],int procs[]) void NGA_Matmul_patch64(char transa, char transb, void* alpha, void *beta, int g_a, int64_t alo[], int64_t ahi[], int g_b, int64_t blo[], int64_t bhi[], int g_c, int64_t clo[], int64_t chi[]) void NGA_Merge_distr_patch64(int g_a, int64_t alo[], int64_t ahi[], int g_b, int64_t blo[], int64_t bhi[]) void NGA_NbAcc64(int g_a,int64_t lo[],int64_t hi[],void* buf,int64_t ld[],void* alpha, ga_nbhdl_t* nbhandle) void NGA_NbGet64(int g_a, int64_t lo[], int64_t hi[], void* buf, int64_t ld[], ga_nbhdl_t* nbhandle) void NGA_NbGet_ghost_dir64(int g_a, int64_t mask[], ga_nbhdl_t* handle) void NGA_NbPut64(int g_a, int64_t lo[], int64_t hi[], void* buf, int64_t ld[], ga_nbhdl_t* nbhandle) void NGA_Periodic_acc64(int g_a, int64_t lo[], int64_t hi[],void* buf,int64_t ld[],void* alpha) void NGA_Periodic_get64(int g_a, int64_t lo[], int64_t hi[], void* buf, int64_t ld[]) void NGA_Periodic_put64(int g_a, int64_t lo[], int64_t hi[], void* buf, int64_t ld[]) void NGA_Print_patch64(int g_a, int64_t lo[], int64_t hi[], int pretty) void NGA_Put64(int g_a, int64_t lo[], int64_t hi[], void* buf, int64_t ld[]) long NGA_Read_inc64(int g_a, int64_t subscript[], long inc) void NGA_Release64(int g_a, int64_t lo[], int64_t hi[]) void NGA_Release_ghost_element64(int g_a, int64_t index[]) void NGA_Release_update64(int g_a, int64_t lo[], int64_t hi[]) void NGA_Release_update_ghost_element64(int g_a, int64_t index[]) void NGA_Scale_patch64(int g_a, int64_t lo[], int64_t hi[], void *alpha) void NGA_Scatter64(int g_a, void *v, int64_t* subsArray[], int64_t n) void NGA_Scatter_flat64(int g_a, void *v, int64_t subsArray[], int64_t n) void NGA_Scatter_acc64(int g_a, void *v, int64_t* subsArray[], int64_t n, void *alpha) void NGA_Scatter_acc_flat64(int g_a, void *v, int64_t subsArray[], int64_t n, void *alpha) void NGA_Select_elem64(int g_a, char* op, void* val, int64_t* index) void NGA_Set_data64(int g_a, int ndim, int64_t dims[], int type) void NGA_Set_ghosts64(int g_a, int64_t width[]) void NGA_Set_irreg_distr64(int g_a, int64_t map[], int64_t block[]) void NGA_Strided_acc64(int g_a, int64_t lo[], int64_t hi[], int64_t skip[], void* buf, int64_t ld[], void *alpha) void NGA_Strided_get64(int g_a, int64_t lo[], int64_t hi[], int64_t skip[], void* buf, int64_t ld[]) void NGA_Strided_put64(int g_a, int64_t lo[], int64_t hi[], int64_t skip[], void* buf, int64_t ld[]) DoubleComplex NGA_Zdot_patch64(int g_a, char t_a, int64_t alo[], int64_t ahi[], int g_b, char t_b, int64_t blo[], int64_t bhi[]) void NGA_Zero_patch64(int g_a, int64_t lo[], int64_t hi[]) ga-5-3/python/docs/0000750005473000001440000000000012275260523013050 5ustar d3n000usersga-5-3/python/docs/scipy_11/0000750005473000001440000000000012275260523014500 5ustar d3n000usersga-5-3/python/docs/scipy_11/papers/0000750005473000001440000000000012275260523015772 5ustar d3n000usersga-5-3/python/docs/scipy_11/papers/00_vanderwalt/0000750005473000001440000000000012275260523020440 5ustar d3n000usersga-5-3/python/docs/scipy_11/papers/00_vanderwalt/00_vanderwalt.rst0000640005473000001440000001233411576434157023655 0ustar d3n000users:author: Gaius Caesar :email: jj@rome.it :institution: Senate House :author: Mark Anthony :email: mark37@rome.it :institution: Egyptian Embassy ------------------------------------------------ A Numerical Perspective to Terraforming a Desert ------------------------------------------------ .. class:: abstract A short version of the long version that is way too long to be written as a short version anyway. Still, when considering the facts from first principles, we find that the outcomes of this introspective approach is compatible with the guidelines previously established. In such an experiment, it is then clearl that the potential for further development not only depends on previous relationships found but also on connections made during exploitation of this novel new experimental protocol. .. class:: keywords terraforming, desert, numerical perspective Introduction ------------ Twelve hundred years ago, in a galaxy just across the hill... Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum sapien tortor, bibendum et pretium molestie, dapibus ac ante. Nam odio orci, interdum sit amet placerat non, molestie sed dui. Pellentesque eu quam ac mauris tristique sodales. Fusce sodales laoreet nulla, id pellentesque risus convallis eget. Nam id ante gravida justo eleifend semper vel ut nisi. Phasellus adipiscing risus quis dui facilisis fermentum. Duis quis sodales neque. Aliquam ut tellus dolor. Etiam ac elit nec risus lobortis tempus id nec erat. Morbi eu purus enim. Integer et velit vitae arcu interdum aliquet at eget purus. Integer quis nisi neque. Morbi ac odio et leo dignissim sodales. Pellentesque nec nibh nulla. Donec faucibus purus leo. Nullam vel lorem eget enim blandit ultrices. Ut urna lacus, scelerisque nec pellentesque quis, laoreet eu magna. Quisque ac justo vitae odio tincidunt tempus at vitae tortor. Of course, no paper would be complete without some source code. Without highlighting, it would look like this:: def sum(a, b): """Sum two numbers.""" return a + b With code-highlighting: .. code-block:: python def sum(a, b): """Sum two numbers.""" return a + b Maybe also in another language, and with line numbers: .. code-block:: c :linenos: int main() { for (int i = 0; i < 10; i++) { /* do something */ } return 0; } Or a snippet from the above code, starting at the correct line number: .. code-block:: c :linenos: :linenostart: 2 for (int i = 0; i < 10; i++) { /* do something */ } Important Part -------------- It is well known [Atr03]_ that Spice grows on the planet Dune. Test some maths, for example :math:`e^{\pi i} + 3 \delta`. Or maybe an equation on a separate line: .. math:: g(x) = \int_0^\infty f(x) dx The area of a circle and volume of a sphere are given as .. math:: :label: circarea A(r) = \pi r^2. .. math:: :label: spherevol V(r) = \frac{4}{3} \pi r^3 We can then refer back to Equation (:ref:`circarea`) or (:ref:`spherevol`) later. Mauris purus enim, volutpat non dapibus et, gravida sit amet sapien. In at consectetur lacus. Praesent orci nulla, blandit eu egestas nec, facilisis vel lacus. Fusce non ante vitae justo faucibus facilisis. Nam venenatis lacinia turpis. Donec eu ultrices mauris. Ut pulvinar viverra rhoncus. Vivamus adipiscing faucibus ligula, in porta orci vehicula in. Suspendisse quis augue arcu, sit amet accumsan diam. Vestibulum lacinia luctus dui. Aliquam odio arcu, faucibus non laoreet ac, condimentum eu quam. Quisque et nunc non diam consequat iaculis ut quis leo. Integer suscipit accumsan ligula. Sed nec eros a orci aliquam dictum sed ac felis. Suspendisse sit amet dui ut ligula iaculis sollicitudin vel id velit. Pellentesque hendrerit sapien ac ante facilisis lacinia. Nunc sit amet sem sem. In tellus metus, elementum vitae tincidunt ac, volutpat sit amet mauris. Maecenas diam turpis, placerat at adipiscing ac, pulvinar id metus. .. figure:: figure1.png This is the caption. :label:`egfig` .. figure:: figure1.png :scale: 20% :figclass: bht This is the caption on a smaller figure that will be placed by default at the bottom of the page, and failing that it will be placed inline or at the top. Note that for now, scale is relative to a completely arbitrary original reference size which might be the original size of your image - you probably have to play with it. :label:`egfig2` As you can see in Figures :ref:`egfig` and :ref:`egfig2`, this is how you reference auto-numbered figures. .. table:: This is the caption for the materials table. :label:`mtable` +------------+-------+ | Material | Units | +------------+-------+ | Stone | 3 | +------------+-------+ | Water | 12 | +------------+-------+ We show the different quantities of materials required in Table :ref:`mtable`. .. Customised LaTeX packages .. ------------------------- .. Please avoid using this feature, unless agreed upon with the .. proceedings editors. .. :: .. .. latex:: .. :usepackage: somepackage .. Some custom LaTeX source here. References ---------- .. [Atr03] P. Atreides. *How to catch a sandworm*, Transactions on Terraforming, 21(3):261-300, August 2003. ga-5-3/python/docs/scipy_11/papers/00_vanderwalt/figure1.png0000640005473000001440000004476411576434157022541 0ustar d3n000usersPNG  IHDR XvpsBIT|d pHYsaa?i IDATxp7AtmăR9MkR[6 B`(b"J )M9mtu,P6,N=aÏ"aL rj7R h&y%@Ϗk&3'繾uD"$I$) R I$)yX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@$I$ED$IRX@?)))) 8[?q<_=|_eΝ}R$Im"H$رc|\s5{{|3g3f V"--^x^k_ZK$I SL+`РA+|K/ĢEػw/cǎ[nk7x#%IElڴݻw/ݮꫯq߿?۷~J$I1rǏgɒ%ZaÆu}o&_җ><33CZFI$)\vXO/~G{w߸{% H^y~_&j)(('IKi&~c% yh"o1tPN:ٳghii+ 552dlȐ!}M7A _Ckɒ%]6?&vm|bfꂏݦ;É'я~ď~Ou]Ǵi/~qgffrO=?x }__/|[oR㫏 4ȟK .6͟O"X[?fXݦPUUE~>~DXjvb۶m>}:O<oM6 7߃$I.][<?…W]] y\uU| ߿9 RVV[oxGycժU\K9r^{-j߇$IzQ9~;(+sNX<wΪ@gg'rWRYYInn.EEEL:ǏuVhǖ$IR7UT1p4Z>6l{gxD$I1 χ v#N$Ibѣ~ee0wn؉[\$IRL1ci|$ $IbB{;XӦ׿l< ;z#X$I ݉kҥj, $I UM AGTVa'R_rK$ID`:Ɂ# , $I`jb(*;aذS)$IRT> 3f@SWJH$)jۃ uudd$IRCa,x~S) `I$O;`E, $I3UU0{6 0n\؉6G$I"B!##8b!H$w ˗Îv* G$Ik=y**`԰)ָ"I^Av6B}Cg$Ie9s.o|#8j^5*TU`I$56̙Ui)"8i|X@$IvXM`yffةH$I'N@~>:YKzzD$I@^tt@e%v"%*G$IX$ANtSpĮC}"IZ[ŋ`ذS)9%I3 ˃+)\$IJ2p,. $IRCa,xطNd$IR8v,(E.,_;v@ZZة$G$I΁'OBELv"鿸"I@~3ΆT|(X@$I3p!|iW{¨Qa>,I83gWce$Ic۷Ü90p cƄH0G$IPg'0vlpĮCI8 GI C++NX@$I~߇[{N$] 4iÇ+$551cư~wƍĉQH/IM$l0Bˇ+ ]hii_" >ӧOyf,X'(..蟱qFy6xྊ,IT[<?G?UWJ4.䐓sγロvdddp뭷UDI F~;(+sN$]Gzk#HHDVQlu4Z>, DhooԩSlݺKv?W\qC aƌ:tJD+Vil< ;; RZZ @y(**{>O9x V";;2_Iԅ' ?^֬K\_ jjjɓeyGΟgW_=k⮻bРA^~~>mH8PSyya'Jn7of<;uw料޽CO=ȿ3lذw AK\"xyxVr?3%{줩5TIZ[ŋ,Jljѣ{?OTVVrwQ2Io3)X ;, ]x'4h ÛoɪUHIIg ے$I1 apO],%, HxO~{ǵ^˗e6mĜ9s>~]gg'1zh6l@cc#gϞeСL0+WxD$%?e`Z=֯k ;=nB!nj$);f âEosD$) ƍ ;O$ICHpĉ %7 $IRii~/; --TR$IG< 0uj؉ $IR/ ;RS!% $IR/9s.o|#8j^5*TRlqK$46̙Ui) χ_5k`Ro5zD$/@^tt@e%v")8%IDpu7kzD$%`jb(**6,TRbrK$%Ça hj`JRqD$%ruu), $)|!|0k<a#X$);`E+ED$%*= j7.DRqK$%H$PpDص|HᰀH>.,_;v@ZZة$IJXG< 0uj؉$"I~ِ )VX@$IRB9s.o|#8j^5*T>$IJ0sf0zUZ =RH};̙ž=0fL؉$#X$)uvBI L cGZ> $I[PP~@q1, $).x}غ'D$IR\D w\(`D$ō6?,BؽF;pK$ŅG[͏2;7D.+ $)UT'[AmCgIa 6 rs癙at9$I1qχ]`X[ͥD`$I1*+aI-`Iu7kD$ń`jb(**6,Tz#X$)tG65Ayy0~%)1"IBU^!%: $I Ň’%0kLAzzة$5G$IR;`E+% $I*= j7.D,I^ 'BFFpĮCJ>IZZakHK ;08%Iԁ'OBELv"IarD$2ΆT|HH>p ,\] FJR,pK$F93*-]I"Iz0g {1a'k$IJJ`d;68b!|\$I Տ(.? $Id=n{ ;X$"`w 64X>$uD$H[̟ @a! #FJRpK$uѣG Νv"II-VmmP[kti, $a 6 rs癙a$I]:~a.X.VsI"IΫ*+aIJ`IsD"nM7GZ>$ H~_3i$ΕW^Ijj*cƌaz'xGIMM_*;wԒ$]`jb(**6,T#X]hii_" >ӧOyf,X'(..gΜa„ {[4^x^^{5E;${mj`Jz 999=, /2b޽;s-l2x>.IROã7B]HRrW_%==п طoov_F$>,Y`ط!oY@."ΩSxٺu+K.{|M/}y~С>*IRO;暰SIJt`]… )--U{ wezѳ*IRz1`TWøqa',, Q\\7MZZZزe +V?賿sɒ% 4g)IJHpmp͐v*)6m޼͛7ԩS!I>|8Ç 77o~ \!C~Gφ rsڵz뭗\s#Ayi?TR: dee(1X@z(++N, 8pS<@FFFf$=y**`԰IJVnBjѣ|o˾}>~ΦMnFTI(+lHMzˇp҅'|Ainneee,[1Bx뭷>zGycժU\K9r^{-oKDΜ  F^z :T YYY'?k_26mbΜ9N"ϮJ*++YlEEE|[r]wHLc#̜^cA~a$9+Tmjw$ms+0fL؉.{@$IJPR'ر`{$)47CAAQRŐnjbD8aV瞰IRlD8#ͼ!)Y@$ICmm0>,X{7v*I8G$I3G9\28wn؉$\$)TT'[AmCRHa 6 rs癙asKw8î]f ,]DVSyy0~|؉$8%IR D`:Ɂn ص|HJIbLkk0rx1AU v*I`ICmj`J+ $ňruuI"IR>,Y`طN%I},IBtXP$X@$I:`jb(**6,T$mj`J;\$/m|HRoH|!,Yf)oJ#XwXP$)VY@$Iq χ v#N%I#Xuhp#%s熝Ht1HREEpU[Z>$)^X@$IqVi_6gfJ]`I㐟v5tKRHBM AGTVa'$] G$I1-u 'F ص|HRHbVkk0rx1Ν0lXة$I,IRL:|88b ˃+IRsDs@f IDATۂ uuIJ$IRCXf͂)S=N%IM`Ib±cA 6/Z, UU0`TWøqa'$G$ID`j822#v-, P׎v*IR_tW9+뮻ɓ'gϞwƍĉQH/I3&ڲ};$)҅sIp7crssپ};36nH'oY>*>?[F$!s$%%F9롰#v%)YZZZؿ?7|s^sW0df̘C8$Ş[w`x1ˇ$%3 H<|_ugyٴi555^7dggs(puvBI L cB}=deJ~H$vxrJ}Y^xx3ꫯ5 deeq]w1hРs~/??K.I GI CyI37of<;uw料޽= PRR³>s=wIn 777x㢯]vAK[=Z[S&M ;$]}ƺt~u%%%-_<7KJTw [>$Ifgyr?QYYɸqz)$Ŏ6?,NڽF;$)9Յ|{Tvv6[o1|pxrrr[g>ÛoɪUHIIg"I}Q1 .;7DXf/KǶmضm9ׯ_?:::줳?zh6l@cc#gϞeСL0+W2z~ԗ**`$Ic$r <8̛vw/v*IR2qKDc#̜ PX賀HRض ~쁬I#X:;Ǝ {X>$IarDTs3A ).?v$"I .qt0~5iR؉$I Y$%HJK;a`!I%IJmm0>,Xp{7v*I$%G[͏ .;7D$+ **ڠ!ImISbL&v*I.,ICǏC~>kҥj.II355PY LJHsKD$AN IRHRhm F/"ع ;$I=$ŸÇ#v<$)^"I1n-`^Wg$? $Šga5 L HO;$I,I1ǎC}E$I"I!kiakHK ;$I},I с'O–-sI+ 2ΆT|HDxq7/8fw^5*T$E#XE0s&<CaGJDd6xaZسN$IR9%I}JJ``C\> }{PB!ŏ~$II"I}.qt0~5iR؉$I IR/D F,$, ԋ`|X 8jn1"T$G$=j~Hpܹa'$)"I"8٪ jk-$u"IVi`ؿ23N%IRrK.㐟v5tKt1I55PY LJH$@$AN Iz"I\-^ EEs' v*I#X G65Ayy0~%IzIr`y]Ca.= KY0eJpGzzة$Io`Iy;=-]IzD> fφƍ ;$I,IO^ 'BFFpĮCe$O˃; --T$%G$%#vO-[ $o")Av6B}CfΜycvQN%IRsKRil3AX =bWhHJ*۶õž=v"I#XBg'}ر~ˇ$I }{PB!ŏ_$I DRB {>_Mv"IvW9+뮻ɓ'gϞnĉ<#\կ~;wqjID F,$҅?|;kKUU{&L@UU֭c˖- :{w(}RjkaݻaĈSI$pK/iii<4iG#77:t{2vXƏ-²ex74̎ n5?r$dpܰI H>Y>*>?}WIOO|ߟoy%AEEpU[Z>$IEhiia||ݛoɗO=СC}OJVbL&&Ib#X=OP\\|׽ ٩SBJ8, PRR³>s=O P^0`@ة$IROX@{|}G}o<6okC=đ#GXzuߎۂ uuI҅_׏m۶m۶s~_~tttIgg'H߿+dٲeWn]wCwg²egp5a$I҅nnÆ lذSظqc/˱cCo[yĮ$I")&UU+@u5v"I")D"z5L`$)X@$Ō>/v쀴SIp̘'O–-0eJ؉$IR_pDRʂSS!IR"H ͙30o̚{¨Qa$I},Ihl3nBؕ$)X@$EݶmpgdeH$E#XJJ``C hnؾ=(!ŐG $% >WW8}:4)D$),~(D"PZ w C#WIDRhkaݻaĈSI9%=j~Hpܹa'$II"8٪ jk-$\IVi`ؿ23N%Ib#X.㐟v5tKH,55PY LJH$2G$]H֭9,$, z5Z`N6,T$)8%Gmj`J$\mpm:ˇ$I9 :{,Y`ʔ~SIx :v z 6/Z$Y@$u fφƍ ;$Iw`IHV!##8b!IzD9ZZ`tX<ڱN%I#X>v@pɓeK\$7" 2ΆT|Haܙ30o^p޽0jTة$IRrKJb0s&<CaGJeԶmpgdeH$%G$ %%p}0vl!I)47CAlbHcIE)I=NƯ&M ;$IJF~)%HJK;a`!IbX[̟ '\ #FJ$%3Guhp#%s熝H$)!UT'[AmC$ @a 6 &L!33T$I,)A?P] ?!$)>Y@WUgÀƅH$9%ŨHV!##8b!IDA--0}:,_|iia$I|`I1ݓ'a2%D$I)Av6\s [>$IRⱀH1xq7/p^SFJ$9%f΄az(,]I, Rmk={ ++D$I},)PR|H ePP۷%R(@$% Euu~ӧIN$I]~*EA$p0thpC$%# `|X 8jnưSI$,=j~Hpܹa'$I + RNjkZˇ$IX@^+Vi0aa$I `Iqχjᩧ\$/Y@^RSyyv"It"X.(#GGZ>$Ir,[I&qדBIII޻qFRRRuĉ>Nhim F/o} vaN%Iwy/ӧӟ~=߸q#<٩SBJ8, Qt 7oq׭]֍1̓<4v*I-% Hzzݓ'a2%D$IMQ?Jƹ Avv!Iԛ\[ri}:+'\]}RVV[ox[n3 o&V"%%gy&G];s&O??8N%IX, OS?N~7Hgg'1zh6l@cc#gϞeСL0+W2z谾uf΄az(,'$Iz"?\56l`Æ <[vm_ER/۶ ~I$(iuvBI w_磾!I\QRjnؾ=(!Őb$Is%`դIa'$IJ~櫤@i)y'  Ih()G.Xp{7xcة$I#XJxG9\28wn؉$I+ JhVmmP[k$I D Vi`ؿ23N%I$Gp|z[%IbD *+!''D$IK`)!D"n]P8F ص|H$ ^kk0rx1|[s' v*I$#XkG65Ayy0~%I Vy9v[!I, ;g’%0kLv*I$u#X+ǎC}+IO, UU0{6 1n\؉$IS`)E"z5LIdQLkidU]#$y[[@9t TlaYNK*UͲI&c)m& 4LE :lY? Y|7&^]8\\<۵|}]{y>LicvUh)`!hY=wN˓ƌq"W@rrTkW* *55ҿ-Mlpwt]nW,''˥,it j  ۶I<#rgvE[઺:O랏R@( \SQ!M$mnE$/ @=.^_ed]7QHWK>(a՜q@KS3'\-Ź],8;fdgݮn ledK .\:T:xPJLt*-Xř3ĉRQ/Vs@`{qkפ|ݮ-Xh3H+WZo_mr5w4gTP vU6lB9b=bIi&kU6m n0?p hWy vUvlB<>@=G 04KaSM7Y<О 1Fz]i0)!z.EߪƎ,>;vH11nW-XzsR^4f= n('GJMvJK h=SS#4yu޽]w]B[ȉғOJRV4}:@!OK"#%']B [:F(-%|\**I>h%&A~ji6)#ij ~= t0.ISJ3gZOڽ[s*tl@~zcK}pزE8к? ZiBǥGn}H***'v͚5:|ۧIҐ!Ct}i*.._z+M*Z%ED+ 04͛7+>>!|HRXX&M>}ӧ֮5k :tHIIIOLL$>|Ο/,TVV{?VQQ+WH#5/ ~IDATՉpႾ!A/zMp?ȑ#˗/\IE "Ǐ$#.&%'']?/zO]FDATT*++;^,**u#FкuԧOEp@йr劎?#F]JEAbbʮ;^^^.IJHHhrmݦgy:iiinЮq 233uQ4պu딚={XuV]xQ$U_|$iъӕ~I{$M6MVҸq|rEGG룏>ұcǴk.׾61k,?^ӧOQnnƏ &ܹs:5zWHxx󕞞_|QFW_}%c̙7={VSLQttt颴4];j͛7OЀOvv^og:Pyh󕑑hy^|3;jM{ܹS'NT߾}H5J{ h=c􆹱? [ҥ37G ڵk~'IZvm׋Qvvխ[7ZJ;wԠA4qDmذ]SSCP+WT^^z衑#Gȶь;V999ZdmpeggѧG0yΟ?,]zU$O/avךcv쑕]vڥ]|Y*,,ٱWkzSGUU^XB~K%%%i̙ZtߵM 믿6|獎gddXsڵ]jx_@3;jn{9scW\1wq6lߵ̎Z={s2\͛խ[77SԩSڿߵJIIi8I&DO5gim̎Z?cuYs~Wk{7gEFF9M@lt!O^o?DIM&%%]w<LkSoԩOЗ ̎stAy̎M=^… ZfnݪW^yex ***tw_w~fEE VVV63LkzK֭˵|rj޽ 8oٺ|-Z|=裊כo͛7Xg-^Xׯׇ~]9anh"͘1CUUU… uE-YBFQQQM&ʆomy]?MٳU\\&eٱҥKl2͚5ogv4i{{nx[zz^y͘1Czjr s2b$9rDuuuKn611Qeeed-ӚǑm1;v|>_gavђ'99Yuuu:y anZbLUWW7=^vvbcc=1GUIIIñZ[NٳmuwOSN:| <-D31;Ӷ~m|>Zxq7ManWTT&ܴk 222LMVV)((0?xc^oqOKkȐ!׏m8q^kzk͚5&--DFF0ig}[g-so[9aZn4~OgFWC?PK!&  _rels/.rels (N0 HCn ]n0$J<=aJf?b)X%rZDbt{Hl y(u6$U\R1)hT@.w| ?%*;j@5[ n і1dGZ"E[b\NEyr 4Vӣ׻,i y$ ahDSB`"lrǎ#)Sx~g&'Y}PK!c\#7 ppt/slides/_rels/slide1.xml.relsj0D{$;Re_B Sq>`ֶ- 꿯6zN.xQbZV ț`5 gIJ ]{h~h\B<ȢPV_sPK!K=7 ppt/slides/_rels/slide3.xml.rels 0DnR=HS/"D?`ImMB6{s xN}xxQb@7:iN-rQ_i\BܻȢPV_sPK!K=7 ppt/slides/_rels/slide4.xml.rels 0DnR=HS/"D?`ImMB6{s xN}xxQb@7:iN-rQ_i\BܻȢPV_sPK!K=7 ppt/slides/_rels/slide5.xml.rels 0DnR=HS/"D?`ImMB6{s xN}xxQb@7:iN-rQ_i\BܻȢPV_sPK!K=7 ppt/slides/_rels/slide6.xml.rels 0DnR=HS/"D?`ImMB6{s xN}xxQb@7:iN-rQ_i\BܻȢPV_sPK!AMppt/_rels/presentation.xml.rels (N0 ;PNv?h.i$dEIk V[D=QO_v`,W2'id*.뜼nHdJBN`ɼ`?[mU9@-0+ O64ahjYjYLi EfrbUhj%<a$^@dAl-`gy^IHgfxt>=БE<"]x ȇ Ӂv ԇni%Kptkh/N5}X!tvLƔnN;=_WA;X PK!h ppt/presentation.xmln0'"_n!4"T[J: c D~hR w?>?3KJDwcptYmA^F B+^aӼk-W: Fٜd\e;.5WmAl`/E8PJ.|$^o6?4k$L41\u]UۓdԼ7iYź;xӳM[ƨKi$+f1,o dViC8,i7Ln(_NGV/5K[j֖'xG$ӏ ls |dLeV?uiO[=(ʓ[cb4V/}1رCAl;԰UV4lmva'n/4t_&W_]hETӀ-[>y՟ij$n}m!Q]`*8F1zo"H̀[-7GalnQ~m(v_ ќ+ӣp}ysrAs0A(ϱ,iB>4JhM2= J(L2(^F*(j .?;HtO_OLx@,PK!Մppt/slides/slide6.xml][oF~_`Y~dhӠq4Ej)Rh_ߙ!1X2¼$8ss?>l2cu/fֿ̙I\7W߄3cW2Ί<]ُ̾?oli|7۪/.vmw*i{,o.e|Z7مm&^%:I*MW2 -ݮM6qMRlz/ҶbvWKo6,vŪg87$E_g͞LwiOVUݚԽ}I TI^J?-LST%tfM]7bpq<~V9xX̀//Ce$kr[G Ђ3N}(avjH>&1zUŌjSF"p8kF%n42nv|@}3M- y:#h-l|2j஼JcgY`vFŅb@|;p㵃|ywz8ݲ56oҷeYߦxg8a쀶; c- 4lm4 % v}-ԶUbcbKlR/aeY'ϙdjHL2 c]WMu5hX{ܸ_"X¸cH6U|ىtdu8\_W:xy/FfzxW,PK?w߸~,>[|/,֡lW}d)k >_~wLY^kLi .9| |C _Cl  ׿buE~i!H1J? D-K/M~TEI1P¬RC\J$Š b;\D| bliMRL4NC[S(}[b÷(5i;*(5Ħ%*Ԝz)%kú>7ݮ.rlй4wQ#0s*&ވT乨#*rh#^S[8mބ UHw$Fbg#T*ɶbJECo kJO"ݑl k)v6RL"y"v)tH-s[(1/ ]lDXCþnˆLbųݖ>~cDjމ"#k':V`@*R,mF|0 v%T#>JBT>}RL5HqRl- HEj,zDCEj,! 'mf' cn;tx,vk;t7{1prp2?yA'DŽ=1J,q/)N% z8?ϗgْtZK`k3S5[o?YVķ L:$y-peWTbG+HZ@@(GwaLHfXUUps[~"?GHvWzcʥɣVtWY~HQM'ꦈJ9Lu>/ Ȗ8S)8CN>L;bKN3⦅Xz聾[HZCxuNX#z.Լ-hNrl1VH*&mľ8Ar*;.ğ-O %#՗-H5fmRTs|$r,!6_%p&iS.2W"#4ЂΣ1Ed`(NQDFF [#cPp} BI6j^ML(PýNfv"dFƏ3|gj ׵hdLRE{D.-WZϘ2i2^- i j(3" mLϠ IJ rm#XMz2 G342G|Q J1A  $a)^ )cx9aG %P'ݐ6g46(7"Q6dgWʍ<:ͣ1Ilțҟp-wY9lhMhMFޚkiB82QNXQnVsZnL"pTGlvs<NxYL|VzFGE 7 {š"S_ÞpؘMQEe\|NrSbC]Ua԰3>moj]Jl dS{:ṦFccPZ' ,!ZS<2|=Q%dsyQ[Oؘ6^XoMSņS_S((7>yQ?EccrrCE蟢19l((r$ RǂN9aMQxQO^OFC46&'7^䰡ߚSF!7ršv(ϟ2 }Ccl('/p_ȟ&zQxQO^Bnh;x((ңSFohl VzPQmN0ϣ('/SjߥamX 7^XOn0ؘ((?k%69K| YS؟޸,2MH-Y5/#Ļ*-:!ɂ"TPK!6.(ppt/slides/slide4.xml[o8?YuNF;Lc9wJb,NVLrtiIǦ-eQ׵wWզW5r\??&]W6˲4vv҃w7Y9on;{v7۪]mue[~V(ҷrۗsuZT?nT#mU|jZ[/^ܺlvfYoUdc3wsmf%Yf=uݭk[/f{lYgjWw]׮.oj%p4@N۪G݇v{=o;or _ۯU>}WΠxrVwB=?.n~zoo0~hJbv%iNs}Ii&/RDQYG&^pEF3~}<ȁ0z#P H"Ya7 H΀@o-hEduQwfMym|Ժ5u%A( ѫ`""OTLj,Qc4dϤAa$E0(51vL9mU]ܵחguݕ'(x2sj=b5n^V^TowjX7C;g;ϸvADե mw݇j_wTK`߀inQ7ާ_$N |<\oZk+kMj] ?rwB6lU*?5K{؂>~uG]_J躑VZt}?@F1N?אyVĜOf6A?Py`x'3rjضG),ضO3@B5ϥmvs s1bWc\,1(vƘgc.m;bk= Xu;Lg h8n YZQTDC} n> RS>'2.ƙ#Tb\dhK$a˔k#nVyT; Rks܄)Э:qu : Rlk#w zAtcu!õmyA%'弞??$"BAn\~h+7AGNܡA&@Ǚ#0eu$9$521TC[ ׃ S&n9ʈ#'hMБݪ7A$t0ښ/LΑrF[SqsWpdH#*5Fk҈6%akvVfrs1GYȇd @h;lv>G2sG\xOe@8Uw*#nrs0ٚU79VsVDxnrs0ٚǔ $)`577QWnL4"[c6-͵-QQl؃xPڍp"!Yđ` @8 d:[X`R[G\xOe@8Uw*#nb4`5AJq\mkjS3sG縉9@#`k#nnHP1:҈ l!l}d+19GB9މ@8s$P{KXrs= !@8L-c9@#[u&[9@#dks<59pus|*s g59nruiM\رku>7`*sBHp֑ dKuNI2["&ClMv Zp}9[Gqar1 ׭:GSqsGzbrsVT9@s9R157P%{li_Ehm [|ol&I9q;Q< \1:|l@8z s|"sBsVީ9@s9)Э:qsRdkss0ٚ∛{*&[G=?z.bѹW7^/s1]+g+ޑaj WSDQVq/ xEq,?m>T~[-:?e^:n6?v~p٧~M=nmM-;]w= ?Vܯ7^rvp)Y] !՝keۖߥ'a=~N^lje[dʫJ^|ϲO]xgk)hU^`<}[Ox.EKr]ij('Zu3H_s'ǰ?h|Yd <+GŰIT@"ݡ7uH#ONj"+K%"MSo4cPQF*9[ԫ%ꮽ<[Z7^V7ާ_$U]vp]]s{e} szѵ`)ݽTh~,w7OW6Ki*:s3ߕ(_y6' 1OQ+tH8 B 'Ƹa-NZQz~,_ªL[{0 bR4) &HoO Ժ{ \Edq\o!TJ}#>? R> |Rq v1N96GĢ^vul'jEŇǰ.ưV" !߈$pZ"҂F 47kMmX\Soś~ZlDZ$)} k9mX\SXi⢤)ү78uN%=ML7a-.|}y>S8 ֆqEIKRހ;4ú X q &$aG3uѧXE%y.HsNs" 1kq uBzSXi⢤>6,.QnKV>_o0rN(70+¹=],.Qnu>%7n8g7,. ZI(Bf_ f% 0p?0/'hfqьq@9kuRH A/ja][o>z zC) aqQ 6tpN)+8%hNEU2 u{TͳY_ٺ=PeXV}J1 8@Uj:iYU}n-.SrQ6 kù$S:ב)N RX\4䢆Oam70} hاn8(,. Zӆ^\xu~i7(^ݰ5O7z_ aqтY8uO-HE, aqQGk6ӆE R.Ր=mX\T;C˹^6%5| sQǸh\Bސ>,=arQ 6d}6ӆE〒Xiq@/f=m\4HV6L.uV6L.\T!|=m\4HSo87L.z_l7x곖 SԞGaӆEA+ڐ>Eydm \㔾k=mX\4zmaӆECJ.:6x0s-RrQk=aqQ Z)7\ECJ.jֆsڰ(hnh}S,.RrQǰi#hHEz_ aqQ O}6 ( wn/ Gco82~Nt7w_AUߛ+!"(8TEAniEZ_{ H;"%{o 0~6kZt>~By|kvï|^Ԗ۹lڮ>s??vD- wֻ{+x>ml~ռK\-v[wguU6|ww; M=҄7. gooYmǓM˃Q%h ab1/V%.Es4P%)wu!%X XʿvjQ}C/ F-kh: mJ-&le4k,~k䭖s?ICzvvmP ZZ?j",b0"LCU^-n~W0J,B;oVFc8r}hWHX}LٿH:䙭"ҙD- {ӧuGpNvhx#Oī;$f^V^o}0H ݇wͲ%!S{(_M:es(HA|6,+R abԊmQ&ʆ6֤E1%v1| ʏ]`Hi7tr\mpIWDLGC8V k9+EݧVq 88Ѥrt0"AIۍj}0"A8E~8`m^7'HЧD RyH\.y#oV"La~,썵(hPHspRP7wJi>cXbXH0솺CO ݧ6ӆ7T6tpN߈))xcǰ7bJKpr-:&f檌Y|WҧE])Xn!58ݹh7`+ RBՈs{0A#߇,XL̾Ԇ7@+} ǰ7"oDSXiBֆsڰFD7O: oX;soH¹=)־6MS>kv*K0f_ (k r"HR1sNsvE9uE%pMA7t1sv pN -lj>J>4Cf_) -| /Wak#-,} f?'}} }n2C38 >7Aѫ|#kOQUN k=a G $6,Po>ǺO9X|#ҧl7XheS|<{>ek=m35Xi#,Lg)zmaӆ7P+t1G9k=m|?ȧ}k=m|#,(So8bm-QnOam8 oVbO1FXP ǰiaA_V4pM Һ=Z/ֆkso|C1{ڰhp-fam o|CpOP'PqQݧ0poISXiSXi9)}q zFN7z_ ak A+>pN72Rf=mX|Bg7, a2Crdm>WO 3od|C)úfC>6,Z!ԆVCy_S^Srod|C1skQܭV톬K Q2}9X{6\Sz_l7h7ngb{n;ɟpⷻ[-~ c*Xw7^luѠUߛ+e"KEo@(HԶr-$b8-bu}KXkCY{`բʻ_'-gKf-^<~~ujo6M{mWmVwn;h;]w=<?ies=͟\\ xm˼ݺ;'廻KlZLS4ͽp&<yٖ"_" Œ}(Tq,b1tXvjQ}$''^_$Gg#M _.=OfְQY)L~h7[NeWS;`lgZc{4# A(ϩ*aif0BeQZ-gߕ)}O-}q~ }[~[u55{#CRFcFBH0ʥayq`7 Hi/k3mоo`E(]~u~ ^F:aj-`q SdE pLaHSaU R\WK߫+>+WO`WŒ~:QCOY`x̟I3ޘOPjpuaȶfWq|eA&<_>'EntBNUE[uEhʅq>x.Ou; ey̿v9*-ZeJ% ?Z웄]V!ј(gvMiBGÀ̮i>H CDPќ >B1iN]Ӵ -iv]i9As6Y|ț􀈃Dx4Aaב 7 |ǜa$1m;îpz3.'}W]#`gvi%I%,!H1B ahpİkNSX4@8z@|*<hpuAd1g5E۞X#!my>yn􀈃,b |J 4>@cD<ϧ2ϱԤIn9̘[4@8vMҶ[Cݶ<<  &9-!HîIգ` yŰHc?zngN߁*h{ /V~|s,Na_kiFP{Q(" ,#̐Y+ⴈcxohfჹV(~u-|kw/>vmWmVwn;hoYYﺋe@!/겹U [.Bݺ;?仺қ{Ͳl$okUl?l^U0 }n/)>;2j9})8qd!Ox.0 ^ߕfD,򴀗m,n~ VF ١?Gp$ XY}$Q*'@IܫeY(&i@Sw a/)HڅQ$.E{i*9[ԫ%ꮽ<[hZ7^V7'$U]vpyk}aN/V 30:A9"JEX?fkcwd*GmҍiY6̥$jNIqk=mSePO *2.0٧LnOam8Sk˫&*rqbֆkڰӄܧgJ\8eTukbzMS݈X )|r+ֆs0ouLo ^7X:-q5J@+1`6,. Z!)Ȁq6-HS8unaqт>6,. w!pNvpQSzcX$0Ȣ!2N(qJ\B S_ֆ0(jPt^}9H eW\4˃1r&EQ+vʝ/֢&EjC):SL.1Bm>6L.\T) arQ⣴ҧ/&MC ad\4]f )Xٗ wjy hNiI hj#mxR}9 V ~8/֢ECJ.ja]aCVSXi⢠Bm>6,.RrQS}X\4)zk)%tJ"V:6bx6,. Zӆ^,. a4s(%z$vaqQ 6tpo`U>,5ӆ^+bm8 V贡|=ZkHNdY\4F/ֆsv⢠:!}P6,.QrQ'c#ǰ̾^`5.c-JE,GǰhZpZ/ֆs N/2FLEu1k+*Րdݰ(h0N} EcR.9mX\T.GSkank9mX\4䢉^6,.N8Zm#ǰ̾IV`zm.wƤ\Tp.ưOֵ(hPOam8 Vֆsڰ z/aӆE)}6ӆEehbm8 J.f9r aqQA/* f_h⢂>k9X\f9] ka][o$jCy_ V B&BmȺ}/aӆEJ.jbm8 &\Ԩژ6u؞{S2}~s% ;;o@3]ՕYeGCX8W9-qZj/Z:sP"r6n6?Z}=Uh;ï|^Ԗ۹lڮ>s??vD- wֻ{+x>ml~ռK(j[2olItmwT+z o]m5U5-x1uap0~CǼ~21$y 'LbY*)&\~I*Xmb{\&_щ!5)6eHz N$Rº_sT|yO$Zn$/wlA37xZKG^$D=ct=Er]d.տO@{D+zC]zcA;쏴QZ!Kz_",MG;o؁u0@.n/+O \4:"-`vp-]~u~ k 9r),O@?cOpMJZzN4jP)ReCYٍqRn>9p' AzS 58@fjا$ Ĭ f =F)E1  5&õ0[ SZDqJuYٍkQ~6dİ|vsq a 8 ox,. Z[ƑEV?Vi'R6ܴ%=)Ǎa}oݠ䢆O96} 0 B>Z g{ڠʧ7ӆEIρQ> '#}p EIρ! 84K縨uHhB#`"ڰ(90qFMmX\ç7eza#Hρur\m0:@%=) 8`_(^bqQs`OW#}J7ng7,.JzL\$I{9u3(90"(3}m Az\n8i7s`eNS2z=߰΁>`u6|Qs` p}"=F)̾p |QS} #} v9' 8ô|)E-.Jz^8mX\HpZs` 9Zs` pNV(90ҧ |EIρ1}=Z8kQ8ÈaIρQ>EoD)h⢤8碬 aבcX) &\TrdmO9@zmֆ{qEᄱȧ0pm'X5P/Bmh5$o8g7Rk=hPZ/ֆ{ڰ(hP2NǍa9NyZ}JJyQ8mX\T;]2}6[Z\%)Z#ǰSU'og$eu\1v⢠BmhYòO9@(^`q6,.QYXŰHS8u.hFE pNN֢Oam)>ٗ|EA+vC%f6,. Z!%}1Oy]ۋl'6wC y뭖s?]KXw7^bmr{xziୠ#h~N[rϱ&",|&0 p?^Ezo އjoE'wȽ /ϫV_O} { ?v7򽶫6d4a  ЏZzW͛?/|oj;m˼ݺ;'廻KlZLS4ͽ,:[Ul?n*` ΁J$Heqe/s-RIE*X(6ӤA)cuKPSRիE]pDߟzz~i_Fk41|0:TJylJ~qQ/_wr]WgYrlPK!Yx-3g ppt/slides/slide3.xmlYoH/pǹS)>WWKaʃLK2 rͧ$̐B4A[%SbFdD/##~ܹϋj9y厜|9]nד?/~i$-5hO45&8X͠E]QoL/8D[㔩HM-LW_1;kF- uzwq=Di#Jql~ nˏ¹ѹ+AVZ,juxw;᭺uY>dEvg3}!6ǻ~o6* 0lu Pٺؔ¡D)*5rsx G0tV5ƫJhu/oQu OGȒMvh?Uv_KehHvj%~{]B*X$`T ła`)w7\K牋$]$V嶂Y0"") 6%YEsݘ0G ES°eLÔvlᮩ#>k`Pa[tua e~Z^aK= +-s}]FpnfGۡ7tp61I{7K_s.q(K]sAʲ9GÑZ}wؓذ0θÞ qv},{X^;Aذ0CC@${R>ܡ V5̱:F: F59T!&w6{&h(k_NCV\h]#ܢam^EA60ܢajd7+ ~Cgt}BņipiPnѰV5SH(hX)w$[4`w܃ܑ`nϝWsGEZ0cܢajF ߔ5[~s[nFϗX(+W#pU,y@$\욐81j&7G%X4m] 0{/iZ7|}mu !kKPb_}݂k[p}mu n!}mu=KT IؔMi=Ojubs(Ėi pKS>[9ؒ*W=퉨rRP ><0UK4q3e1Mm<-' z!DB1mtv[yd5sPse6\6O j {;5Wg{Vsn{a!tslq'UZҙS҂~o q^O\0YIbQm2"{Pg}~R J5>^|C]NkT6~)>=$Jg|8u?km4_ m|uZn3zIjۿD/GSJ iDe~z2g%^.ֳh9z9Mbϴp3xvI5FWڸLgcZ#r-|6r9>^_M# sK H$f+%~܋"I>ќ6y+22Lo#1ɀR?kҋqF$nRǽH'ı28KGJê)VX2{bq[ےZ6?E3/$ _)^L0WJDJ1b~Fj.lG^nǻaWR_)q![I9d E*O֎laꦀ%[/fyK![6bwXl硸LHmpv17@՗=M (1[ÌMm55t?d P/[U(qʍ.+7}(=![}M-q![I9d "9_8dkBpVjTW6قh;lud;-XFk}$1[62\c ^9Ă5m }{ͶHZtz9mE:ТoR656e.2 ^-sA\9 :z0J$PK\qy0/mE:ТՑ[PCK&#oKBVZH gx-g˺%:on?q^~c5'\㇫bA?WWWqHpBKuymB//|J1E/Oh]ljЋhꃲ7%}z_#j1&l1^ݩAXogeSh?o1͗η(E~-m7"o:)HfgVbutev;G0I|8_;_\'b] L?dkc|tw̺m'M>7BA,ٗΡQ_+Ԣ6x*2Pʜԗ[SbOUlt]"!+D2ULR/bkTaՐU:*ڏl;;qAf7dNAcBVQT=YEVգ,hM-TqVV4)*('YYXE;⤪4EߝU' rRUT|qu;'L9TEߍ* ~wV *֧-8ul{i0FRQwYd'A n]v:q'UEA ywD|IUQ9hA*ӖqάJtch;U$p 9q+xRUTZt>v)WXƓrЂf| GCjbLH^Cl9^L@^D}P|T'0&9^5#uM5ͳt'u&9[7d[HޘU ǜ͇u~G@7VPؼhݱokĜKPkD9Gpi NU&j.*U:s7N;U g]M< nyQ}u mU7}|$l^vM$GE뎮u#݄g],6S|tz6F~'flNؼx{#auG:\F|VW+c0 CL&Q rggӛJj,|z()DiSMY %f QNR |} JbY#PI f}~vwkh!^\+GzݝTZ9u ZuL[N8a%=,?YH;YVbѺ!k?1H;1r l~@1cAvKͿ| {t|䍝:UE(;uGHؙ Nv:JRl6/kY&oE_|Fa_ n2\~c5'\臫bA+q E'ޡy(jx{P{:HۧwȻ9s7~QM L0}O$8cnhں΍]k޴Qo }M~I}muM㾦{4-g^u_}R6}mK5۱)5ћ/{Z|hWK([":ܧ)-MniJ`K'M<2tm(ܿi_jݴ f"1 lӇeeɖדJb8 $#9+yl5 ls_i3˝j,șxz®D`9]Ё^s,. v%o vAڶz`aۼh 5օȆk`X` (]Ё DvqqLѩfX`9]Ё^s? $g7D# v[v v vAZj.gD:iU+MR?L28՜D:&W5Q C z"n'量_I=v6cF5#4ėZ|z()كGzi&|mUx4L f374Ԑ6RqW)u,2e%axDh qQExSa>aZQ#ìW(t?J㱾'݌[vYogdHɸq РMx$QVY0jn~jx bX}#ws6j~4PFw=ٿFbMF#WGcQ>Иc,oQ,xTáX-gJz]fsd!}QL#GwY\h s&[1O۪޵!u$l~ 6-J3MĢ>KHJOu=z٧:ZgFSj;:֙c'::{xR;nh]>SIbaS-:(Z<,7v>^MEzUzYmw^Nl]ol]lAxJcaEONbdZg Pl)m]M5*:~w ߺtҡ UGb>@y@|l>lFfvIIW x5MD&uMТմhݐSҰ'@nZ)iؓoUC:NIîO$+Z7d4h݀.ZPOFbSۙ /QMwOG~Wl׌1Ո*Q纰y%qnj ͇E}[nZ'Bu6bSי֙«uFⰛyXauG:NIq-[+l?8fNؼغ:"6/Zׂ=7f|q\%dN\bFؼ\{.26/ZwtR; Na[))vu߉Q26/ 1 ;qJ ;qJ ;<yѺd@Q杭#wV =$hzC}_MO?H0<+O+=DAz[;_%IBJtC  Buw(-btG -vgUPP4kgwdQ{v|!CTb;iyvN2TjώmN8^]{ozh"ܲ1]D;eWJR=K{W B3w(x)|{vtGow%QSԂRRq4 4zsSXuuC $B,vʞ=YѸ;oyCvvh!'N?+QiDhώmb;g;YѸC<㝢N~V4Ɠg^Ĩ[3ަT9UW+<,4>LGƇI;fgӛ(5٧7Jg&QTS4FY:EJ:pdtu4Ѭ@%qުeݝ|XC%yvݝhVRu>d,8"5$NayX)?`[svvw=I!{&vwb`yXuCukOȿ|s҃nuR&*ZՀL#ÊjbLl|zz6o"’ U-:x"ij`UF {'{8$r͋;c4r͋]%\auG:FI#WؼhѵGHى/6?rb9 +jU,Gx4.Qlyo.uB&5_ Y>ewJDQ+q E'ޡynB}/lqtb{#s7~Qx_}p| #-⍚sմQon_ӽ_~j_}¸k[Hc_}"Yƾ{E쾶%~ kcSj#7_-H׉:FѮP'4EtOS@[9Ҕ'(B^Q̗f|SFMGALY4 MP}^9*ًjC7oZ&](NЎ~k4䅲^{Vs[/7'Vs}"js\S9M7>,n 1(OƵȧ;FD I⼤ʻ`ĢK" R1[jPhԯuwD}FKb }p4;(_?ϣT2Mc<^usoQη=Fݳo|(byo^?DoGJgh5BjO mPPp+KsqӸƊ<~x ir<1r%+U?~+W^08 :됎d'n/?z> M\?ҺC>ϭWnubu>$A@~D14V;cX)m됨+rBU*$fk2NYl2,GN6^"d,MțC,5ۭWڮrƮdZ#8|6r9>^)[\~aK<2oa*]]vG$c ="ay̏{AQdBÆI+e~"ZKv+enf hŠ2bے"J+ۮWCG'2̱dnhR!.Ndޟ5VmvJ+^ɼka2_8;JR2{JUd3RŢ4%TؘOj4~hjviVl~TUM!"ki@CT`M>-g?ĖgHղ I:<KtE]`Wol >B5 .oZmyޛyneLz<KnlMۜz)& Fo$r Hς]n5M7S4)]G7$BaKkʰDvo o3+DH[歂]ChpɼUanjeC҆V^v>V#>L.7󜁏Ո] |{Z(s{Vo^ Hσ] a1[]fή0G) bÀI3E>  > lP Ց=b>-<V!Mp_6DЁ A1hQz)s>-ܴzcZz9k[myޗy3 >vq |@Zz)&G.@2Ց̟FS.2k5H2 > ,B>-P]Ѓ+d:Т s>-ܴ [h#>VieeSx3 :жm*pJ5Ȝ@2KDhzJ`WG2jM k+`#h|"i |@vX~BId3hQHd3 >L.VzV"d#l|moz4me~oaj(|9/Fǿoשq*feI6vfÛ4*qg߿€_g4˪L/.2Y&໛XXԺN/ .*3}~s'uU"I Z^.Wm=Nunf7P*]U_Xm53Ȧ#YE^7fujY^)t}HʤO~bu}W%%~5[S9-`%YP굟WEUvYl6 OZFiEE]3bpq)noO?S~c;3_xl+c?>/(;_(}Z޴P4?em s_%G?q[ڔ7p&?Ȗ{śx^cxsB}?Q`{4BrM_Ï0riŇUb]Zq:3:oݷ~]\(&t8v= `=/wܰ52n"X&Jܚ;gUbIZ.4;;jSe sx$6eŰ!/c7tz]X?9Ц b ? 03#Y+Iځ'قW);8m-Ŧ &jo]2*I&5( S\M33qUJ,%>(V"NIdy5@Z06(Cc vĜRW=8!&*q d\| l"^X{vmHUd +$ޱA^#j;66#P{mPd (4 xxA8w'p\|a;R(&^eybDo#;s֝/O> Pkd_aUӟ{ }VHS܅ߒ媚*x7m,zzz|lBA7TO[lM`FV[4k79YW}P5PO@5f97"& cىP_P#P5z|,Ǔc[yٽofNuPG:kY(;M:NxRQEPtN(*f*fGd' 6y3G7};!FKxX*wB7"O:;AlXBUMtN4}PIg?O9aZ H1qs̫&yG?En,;3,/&#шsHctyf` .nRv!܊e8tZ8Bm/~J01L HKN(ҞVEڀK/mU _@Pd9Q[s+tB7bn@N8o@~")mG$uT9 ǁSyF8H|yߣAG/D/fH|m!ٽ[ao*pp瓭vpkwKQ >RF-^_aD=Fd^کD-_>Ѩ ^%D-/Y; R\ڪ<Ѩ59]Kj*QC85d~d9]YAnVk ӻķ[g~7Qɵ?!yӫH ӓaHTC;!F 3KycG Ev$ĆLaGV 1"&T2I B;HړPK@C bCchH2{'ĈP_P&!P$BCQO;aC$7y6\̈́T, x|YXc A~scl%mSYEl wq-s,:6А~h~WVI*8]hrX-%gXެxfpl8'ƃ5eaіRJI%V4lW_U wD׮Ղ*UZP7vV UZ*Y/zŻ wV,Ћ=駽e@f4 Q [YRu8>K$|5dk<2]cahT5̐ߖrvʂhMAl|8aPplZ 8" @9V(K98^8KgTw0X:GRqnXfAl0uEHRDA7ƿ\ UD{l,> Fpm߮̂ox8S<~#Ufb6 7_?568~6. mk>Q+yma)о=*8l}(/PεmN#8eٍñќbL7!de‰g`TrYY|E hYVCQ7*ACH E7DBw@D(gB(mD(="m@=^h􀆢lC*B/|BqP΄Pa×_t! "VC9yMHD(C$kH]CLɢyJf6a2:|iٍP v 7K36n"mxCJ6z`C6! Sb86qRܐ8E/6nnxCS2A {XFl($xRҌ Pyg|iٍñ*;!Ҽ%XS,Av6}T߀IK36no"6z`C7A Sb86}^;zC oi4a =K36SoJ=l)fl8o\o)Y4anoVÆK36no8CE36no8"6z`C7! Sb86}Rߐ8E/6no8S`Kq_%W7! 1grbydksmSF}<)jӏiv d*Ttvɾ.nc8BLH 5x)713-8:k`׶ݐ{v1Gڙ_ 0_Vn]EӘʹmfZlK{lDͯw8M~.aċ![w7w,E23*7qnZ}6#۱c ftSe (*ċ:g}Y. WMutJS]Zә%*dT[ޓ:3bxkhdޯo5W\lꎩm1Zp3쟻JҲ k %[|0)bf&ٛ? ֪5}PTxM;.<;u9|>P|~AVen-E"94PDvo?3(*IUc(b~۲0leyU6'tfoRv!܊Ɗ(ES@\Q9~G0AECPd .EZ F݇.''08(`a*V./ݭ'"46)Ƀv|:wrҋdI"@5zL>)AB0Y3`2;GœkKm;Xk8axS^As8HM*/g:HZ;a+>7'|n}vl"i 3_os8xb1 CGQ|}!-HGң@W[|apv, ^UT|n!4YoC"JژnPj` RXg**:BK }v"a֊AQ}Yfmy6st vZӃ-oapY1u`Wv1NP6 0v#f V) ?$C# Q͑)|ީ!AAld"[(9%9i.[>GE &Hd:vY;gM9*$uXk~;G5\WKA<N\ E"^>4+0خi7$Ĉx_`+0٠LnYI,1x*4`~utݕ_-)SHkilKw: ݳÖbx/ߴMMg jXӨc& ނ,O#Ms #M^6ݬg:DIP͑kg[QIx6^~`hMKcqwgbJrd~ۓwfmi?lEyY}%Y\y6\(yeEhO hH1-`Pt}"P#~ H=)(geap^w|NN u0XAѠ0^Q GP АH^tx  n A`:Wh'L[ +"q̠Y6f~ ur((FSJ[\HXeh <@#^( iUݟyƅbd֔w]%hF#W ,zLE{ Ԣm{@fWx*Pffp'̬5*>abc`tFRG89ff0,'Mu̬E.S:"X׮6Y֫h_o"AMy"u"yNMzbUi[1"TD>lj64-(b-pWKcB6V t1֩XAӂ"V @MX%@(65 p)Y."Q W@ChJ^qhY4W*"V ++>JPS޼J`P%sJlS6%||p7lXJPmjf n`tjSkPV +,V9W LBھW*zA"kAaئf b=aZK`x,(6UjZ}j!\p}7{?\oYx:A:#V8כbH=Ƶ< k19ĩS!=5jۨUHmce^= hܛdr^NKW*ˤb{; -' mܱi^= ƵS"9S:m滟ܱ+sj+prHH?Tc@#fFcUL,,5\'zMzX#@8Wl@MzX#@(61a8 Ĭ5 P4Ĭ50PkWI< gjƛ/$N_#Jj/$Y,`g>Vg>X$̬E0Pl3l0G݈qM)jmf&B V:Ņ_tH0tHPzHPmf"Bq(ӵ"EⱠ"Ax"?D:)@@#/ F}X}DmM6 /KWJ^Cfie!i!O'XY["q$HY["q$Bj>P-RֆyNmXF Au C{̷a(*b7בJ>jQUYn`b@Fs1\qqDD D?Ĺs`<'09W@sugɝOy-|<>.6%90e[fC%]Ds5)S:Z15].\tԀ4|߄MS@N36[nxPoy͇D.(as= WN#|#<9S r-t,WS 8X) |jZSu[-`T[<& }W.t5|HPt j)pնK,إiXȓv%KvE[ ,ZM{mOvOS }WR4ash-ɚ̧!e#=i]6#G-Mv[_2˂]A@qK*WJ,-_"|8@;М߼9iN$e#WܗKwA^hS'5Ԝt7,]ԍ^-l&hR< K+șsyMV> Jb*.IfClFW)mPЯyyb|&8$e囘d]V7ѧЉOjt?ed)w *rGartգO m]@'+Ґz7( ~ >IIݍZ9&EO[MA-&¤'H/!+y,.@RJPl7Yѡ3B|9 ׾YA۷&aVW]VKQax[{ (ߨepgU|!I}ĝ\]A fЯd*AJ`,$fOAf".鞧S $M"<6ZJϓ+O*Bіʄ.`-0(:jxy0&o< 1+-~)+hY\hqhJw(Ze'T68{E&hYV%WZg*_fC5R]+-^݂$#p%rAfqJS^Y\>+cYNH:buxx4 f'`K"BW㖡霉휵y 7H 7efs2Rp }Ĺ,϶Aorefu .ýM. N%ZGh;^$C4%f^Ǒ˪)"*%l 5FFWqhqh J^2!{ܐaqWfzue)E"{IgSh[YUpj=<5j["TPb:HBG,=Z'\0ԁb:}|,}\,Bѫc;˔d $eB@Y^H+SNT#LYzܐi4tR%GS$I$~O#tsVq0-TڽRb: HB[,/}%HRpesN?PnLYz1W) @Gj^ݑ) WI1Z\,=q$hqpz,y4rzݳI,T5#I*alEFQlJܹJڹUXXNFX2c1Aj /xMDУlXX]EH,Np ^ F.}qs9fhLkm8#G5>.3--^O&80Gu#[L`L #fK1=ᬚqŶXOQ 4d%ec:rT#XXα@j}\f,=qѫcK W91qze,Y4z]ׄ@GU32:ʎTo2d蕲$F2e1T##dУtH)Spv:&cLYz8ThS,qGqe.w#qTor0ucGj}\,=ZI1ZFCI*ׅMHR dgT5#IwHvzr}BrlF0 ׿.nb/?J%&o;$6!2l|ZKx̷U}1x2rPG) WB|#L`G2e{Cj\$!S-$@!nȔG^Ixuhq$e蕲:q0z,c) WI1ZGCI*׽XW@P"w$2,M&k"~t\G*۟5Md:"ʼnr$ V 8(r-jT%W ,s*R**:Fo٘yiK㜧;Eo;xV=)R1oh,_!%X38tCs}8vLsFA!$iIգ_ܓrL HU2sUcP~)AH0v7.>y,Gs>d5WRs4b *8 4Cfh3[¦/S3':in ''/ 3-InƁ֟0W 嘣M/`0:` !ǂ9!M E9x9X4c7b)I+4¹zBO9y1's~9(!H6Ɋ}R"PK!,&y,nppt/slides/slide2.xml][s6~?U?ŵʩ$:Udj>}H=koHQ1#A |>,}Vo|:qnO,z:≵|.o쯵|uubqKbB#^Fb8?‡FƏm' /倆v^,u;TA^0N\jl],n.ӢDd{a":Ds>]hu%ʋO7i~Tŷ,5!oVǻl >c=1Ԯ@00u9+]L'3izۺH׳${b]-PiF ly3 bWMw5h|Xַ$ @:4cO GHMz8s/u.5n|#UwzK]<+-W W_t"zVkb]Wx=MN?kD< .%XhL`[A%O~BH+-_4X&$ 0cƢ4 sۏSn8l"LL%i0a" t`4E{0F2Ƃ P°e aHb;M:Lp7<#p鸆DK?:LXIFƲw<a~:LXIF!!^iy%iɼ~nv 5_3;q샥#0پ39'%8Skqٿ3In ~`fƂ0v3=.+,?O0밑0d"fG-,A2=F,7?0}{ Yn'c.G4x,p )kmejXGQNDk/ކ@"SیDq0H&U0UH&0HtNL3{AIL3{AIL3{AIL3 xJzw v!(\5Sdb2|`$D5k M@ȮFb/H4]!} GubȮFb/H4]! t `$D5k^H|kG @GM8Q$<;k9\5-ɉYJ,E=rHOC,9W5-백0ՏzRU+y%Ƃ0zH9$NVGSFp @X&3YGsa&me)8G8V[&|tx[?B箌 ܭ>.+b5NqJGX,7#*8e YnFX3YYnFX3YYnFX/J2a&3a&3a&3{)TT8bU~-(֣K2F!X'?[P(DD# n~vwy;5^Rh샦0p O!?O}ڱCt7]q#ٳHSݠ<[&;O}kGd77Oؼd~{cO+J/X6Fxa7Oya=}7FBV;d9֬,,R_W^,oVr"n\pҚnsvO 8]kB'3VAF_`S{+CqQ, o&L|;vm쳛_*kU$AH /Nť S텉#4kOUz?]fX= جwP4g nT-25ePiYNij>뉕.dV-vv-OҺOa=$)#,osWRLg#/lBe'" /ՓɖxXdWW0nr)iDL[=,1l~KuMTT:yF<LJ2aTo#IQ=0Wq$,Q{%:cq%'rV)bMbQZK=c%C{ZN܆Io]`]XX7d8_Vǩ^MzHb:)ju=B,G%ް1ϩp[ivp b˱]7E-f3[1092.5$Cy@.G53593[WfHm359̖q4v\W05f '9)ϾwՙCZ$&qfFuf8مV9~9f '9߄ljkka|?e>M̭QԌS1[8ߥNfF;uf83gZ)pAңҊ8pF{ HgHsPbk2k̙̍.`C{Fr`PTN(ס̙J"j2gk 9v4_DvQ<9K=a`"ִ\J? ɮ+P? 2ՓK|25yn]@ %Ցlܙ!bk3.`ydg]@2gk27.`C)A <&`_Dvy;dKK5J3. l T1l PLv hdd^G5U;ngk(7.vSGcؑ6 9]CAvʜɮA ed en]>]cXw.e^]4(|[1k ;Y~G_KһPoWWWt^$T"zU (eMz6C;;vm1dN`Ǿ >B}IB&wuSDvr 6 ӵ%9cǤ9HtPS=#Rf$1nN8aqişbkY+h/&k mr`64/J~( f44ӧ"nJ5aih@?FPhG'6Чa44s(wu"C 'I>A' 4NA@wdMJځЖɜSR zANQ\a#hx[?BGAvf2-% R(n֊iEQܚ>P.4^1&ΝɜAإP(n֊iEQ@P92:2^85wdbMo ri "T"k"kŎhx[?ۋ\ۣJڶ0OWtmGQܚv7" tGZٯɜ"莠hx[?[3 œ3ІŗGz̑sn"p"Qj;(ŏw4Z o}iE7Np#sD%A {f_PlMxEbGP4-Ȳ(MǣyMo rE@Z#(ޖG 4jP<5^1-ٗVT}Gߋy6wU15yAN4G[ZP R*n}W(lv!Q E1E?ҼuMwByϵ%*o#] =EU_*XZt1̐]H5?yRNXWE:` -77Ц;C̄8 򙻮&1y"JH"dBck5=,Iu)p\s/MR4]d[,y}wYuM<(Xb&cqPX)¡rsZ̤{+. Hbb& Gk!6:=b- . PCH|c+޼v]zo`hz<ʀjͻD3iz- %kQ64,?A9#[2:΄a6:L»,>ȱ^j;[yylَ3kg-6-f}f# %SEAxe tx3{f(YFwY3y^W"Έi~=d,(rQv5!e@PJ3}ZL%mCuZfUQ.GЊXn)`n7im[f|T3A#L8Dbd1yME0#]_`6}\yn͢G|`l֍1` p֛Ook-H 6m[յ5mhk-YmM[lk-kk/Jikڱ*5ѫjJɶB E %PלP?d)ڻ({#;7EÝޛE}'^QNz5S7 4r [ ƑߍCOS9kWꑬ[>/u5̈́+q{CXlH 1;嶤9ĐXzvd\™zkCA'6 'qqIZDV֚{ k} S3AH']M'Wrczbene9OY=4fI=t}#]ߙV}yg2/l>nOWxO+@ N.'V-.Y0?ocRegX比9&s=2WwbRXh2=orX比9=u2nqk,+dtne(篛h Mz7=2amUBźy>rgu(!­IOBTE~dJ-듉.A䎙 KD̛Lv>C+нg`]@FSz!WIWځAvʜɮAs:9]Av]]25,{n]vdHTF#>^-4.`C{dWOEdWCvwxs w PedכS#"QS'!ȮDv t(s&zR{ɮ eΑ]Av\5n]!]dN"t8U|0 _?]#%" n Zsd#k7.C5BdRvhdɤnB)2.#d0ݤuSYh;N eӻľl;[~/tUń:~*܀~ǃ%-zfr%>~vd֔ێVK.^I(Gyz^O"NӅhDguc\5/vb!~t?z?њ-rtn Bneq?q] d=O0ɶzX̿C^/}&_i/MRGvG,ۊ޷,y}' |5-B b:<=S5OHN(( A Cq_:~ŃB1vr VlIAQUEa s((JBY 40: (ꮼjEaAEVd(ПVIh@Q0f(unP0ВnB/底 4  N?PDxjZ= &>(fVt#ŝ+Llm C'NP5xP4-aw1ֈ m^~(n@3srGqK]'EٗV 4Chz[)n2T[yS LoK- tiEGqK]+2O m1Ox$ۮ1È9ffA:xY(Dq(uP(Q œӊE'WTĎ?'W֊o=Av3`lO昕oz[Pz/^1P'gMoQ ZQ5E6>MoQPT'%4(nAwEb;((nhb;(("莴mF2G c2Դ"թo ("F+"Bg 1iEU VT 49'EQZ@ tGF CjE@3ON+ޖ(MyH(j79'E3 E-x#mx[A(AQ œӊo˯e]z"vʺ^1NЁ*{'xN|~:RO7gw26 Ldds3Sso,G>rM 0[ucytæSaGֶ[i[ևİmӺikImmۺfښv J[۶n)z[~UV$Z;Vf?"zUZ s糭o5R>UogKU:{[R罻 Jom2sUy`KUE⅛) EQ tVD TȪXS9IP3o2~A(DD#2Qrv1O[kYF}FS#O}ڱCY6]q#y?l9Ѕ[[Tjhᄉ#07EÝޛE}'^QNz3XOY#N ~1|+m9@@TkIړ S%aضOHD,|*AY(i4CtIv8-3>.(0멏 cy4,/Gc`o4{j ?|l;cȂ{̹8qgIIg9307ʜRXei2SyQ]sC2R5Y۱d;(sj(dƞdoY惑9,Po$Xꞅu{vS(sY/TJKg^ ?C;uAHs+]]IQђ]Ava`Ҭk7Q"&P PLv Pꆈ`Av\  Knmў35Hn]]?fed]]㗹Avs& u";X35p+!? QsE%bTdR7D ʆ(6.`C35Dd0С̙ Pngk0 b&86Ȯɮ u;o dNu(s&3.`C3Փ_م*5Gc|ȮQ]]FG1ԣ|gGz"UӨF3ՓݻPh]Lv~CD"yden]F.tscIKcew^VY$Ru>_oӭ=҉| oӼx9kWzE. {\N(6l"v(R! V/$٢=]q/LUV~nkք_PK!>3`d!ppt/slideLayouts/slideLayout4.xmlXn6?i`e&各!*|LG:Es&qJVl¦I綶9WNL[JYy~%7E2l<4gbF S|EK~[V8Y)UƭLV/ gVUܶRi֋S,2ɺ L$PrҲ)twMxQ2M5pւōIn'K)&.pWuPğnxIA233A$TJ˵"R?)',5 Sm {{~A!x'1\➣g h#Y.!Ī_D9/g¬ffhV:A3_`[~kpD118 mV"BI=<&d59n M!ڢ֜E(AΪagI8ةͯK+Km 5kW?4zXMXjsӭ6| $Ts1ON<ܯsHB(xj8yrG$")cԔ43,{>ph{B,d DQ)"xL3"m\{QvzPRL]c kG0 va'm@dl5957o)ɴATo >08 c-X1>O`Z`ǰ16:akֺI'M.m^]:Lr'Ug&pH9I8K%'Л,;~&!`Py;yvn7k5 ܧ28ثkЕ Z7 -~/lF轰аulacEtkV7uo3zg F&v&؝tнD0ÿ3OTd߮Yغ4N~*jw%UwgUYy! Nn6Cod֦Sd%e٦)YRVTnȍ⚫ ?7F5:&x5!gNsXCUFP69gAC쬮oh'7?zV(jsHvi'Z3Uv~s@kҊk aK>,sMf ש>ު._, ر;AM?ű!L#NnqzmC(E\+~66;!xjsQUwa1'ϭ¨<Bhl+#38Z:~Bqp'~ā1~d<`x5f.//Y>7oVB}ƞmc [ LЇ9dPK!4͹,ppt/slideMasters/_rels/slideMaster1.xml.relsj AŘ5=ŽFwDڱ0H`s|}wmRV//O; %Er©x|8a'dvħ(ˡqn8Pj{a=_*mzt凨fiS3̀bIΒ9Kƀ\g]^{T3ZbWcqH麝NKÖ-is4n+6K2(Т+BUV!:lmb6!YSdۘmHox.$ǔC2xFgo PK!wYg.!ppt/slideMasters/slideMaster1.xmlZkn6_w-\[/[6)'HwMzZm5ԣ&[;E=ʞ3CJ{A") D|_}w kevϢLt#!C{8Dx"@Ђ',b~HFhv m4;YCݮ6՛_ǭs( ">E L"e 8Rr eɨz‡-yHT"!A9[c sp ~%2ݾ:mxeFQ*+X)IgCI*$DzK\R Nj>@OYKI gR#Dז-'2`,QJdE,y_0lDDdiEڬN^NMmrj 6r@{PHխhA=Bx"YbAIbH%#Ֆ1˗<ʳ|Ij2j}[qLr0S+>fj5@@kұ/<,c# &]/;:W 8n-{%^VQ"B8hLL b>A?tнX$>MHiّJ2^ !1mM/gp/)kwNF}ǭ[GNNs{oT)iATd:\?8It9KC44N f#s~qL S 83 ;a m s\ʨ[HR%]FvJ'/fh&j&Tzr?{wrݷjNt䟴Ρ:8a:.Q2?kS+yx?‚"JЎi>Id!#XvȩW˲^ۀ#p|NX1Ax GGvy>r4,qYPQ]hLm> IU2Ll r^EVxUc/%Be?`OJ BIِm&k؆^6ѐQٿІĶNuL.!\~wVC?PK!P3!ppt/slideLayouts/slideLayout5.xmlYnFwܻJ,1X!R6{nl;>>I9!qH.Vj|f|q&Ƃ"?XPDqv?0?/[ieKD8Ƀ"J̕Y9S*"D3m*d|HGNcYv̬Mi SD)yҰ ]Jg,V2VJ >V)LxP`B˘c{u!c~׆@D#'ɓjN%e ZLJ-j`D԰$kV}Uj`u3j`uj`uj`u/j`ѓŗDrA4 nZz`,"# i]zЏgl^=+ΥK5kl[vdsxf7κZƻY|q91gJ(4*7ָ۵0&Cj}Vy}VӚoVxY{*eGK١ym#e|{y|sų;PkVwckֶ "Vk ]G鮻_praI_h}?hYӷFþ}ꎜ֨뺭swZ#8:YmFઊS~%+ٟ Z6ٛEo;K>a~):T d? mD:"wIqzNvBZx {CfKB.^gZgײ=CvH;C]0l$cbrBJ"HvinWh  $Ľ.Uh2:ςI2&iŽ$ƽ䨗&i΁-;/fוůKUS.a 13mn.7Jx]dgauѰC[vUSdƋJ̟BEi|WxQ {ã :J|N^4hxps5돕澁%)kOyО&PK!c!ppt/slideLayouts/slideLayout7.xmlUn0;DRf[kV\i#NhAH{-x= NֽsŖ3JR $=* 7{`a&;Wi]❬B#<7Ɣ( 5P,gTag,L,^^yATSaE6пn8y *"y f@0@{J/Z 9=N kY(U*C}޶K:,-0滋] {w`/9d2O`˰A](JJT,^ >IEh+>c.yہôP4A%grfLvn6FIZ:Sl`ЍdU^| Ta@N{BeDÔ\-ow*7^#}fl|1}ŎS&E[Anَe1b,͎Q0()_;h6tLi㸛Iλi)j NźR20)04f(3i#3< c}׈3Pd 'PV'c 2e߽̥4ȯ$p'7S::_ѣ*,YQ't \4Nw7Ѩ;:4 ttQL'YzxW[י}f֍nsM^&d.k8n} 4q^f1b/OPK!q>!ppt/slideLayouts/slideLayout8.xmlXnFwwxX%@J$* nw<ЪҾV8$f!IrQ)">s=5UƋ9EӬX[;P%I ڷ~᪌+ޑ-_IE;*YҜTxI x6"'E'p:Nz>g dB$2"ja˓6t9ONx^,cjͺoD7.y^Tk$:gʓE1RwXk)E6[IZGφlcaH <ܖ>XH`/ȡ5$pc S&hHJ*ʩT/B/_? :̓a"f.!ihӷn$Jdp,'Xʲ=׸3$JB?{ڐ)}DujpCtLHAᆞsÞTd0 b㚹憧[đ"YrYgVɉ2H3ٚa0fgP$N7Uٷ$if!p&1>`)#J+haVr('9,yB#f} 鸁e]=4%-G"2jYİ3 usa<2%g)ᾮI{Af8c :AxJvn(v]&&Sդ(ӞrnSUc 5'v6`sXl`sXl!Xa,)F7|-u^"E)kA{2uC\~W_[}Ug0T|fS})oFՋ 0 -8Dꡦ$G_Lt+U7ݰ0n;W ܝ>bdE uLܪi@LTXD%o ѭH#ծ߁6hÇw/r#% <;u#0%|GmB_;ONȁGoA|?t9M:~\%IHkk(_O I!yH>Ǒs;ǁ78rq4<7|~ ,b%Jj9M[A?O0D)N-ꬽ?'5^uzX;49 _Hh"2aYJ*ťq7"@}24g%;:wۡ?#ۣh^]VSvI~O_>5e~ .E&>aG05z[%'(3DqNPK!x-!ppt/slideLayouts/slideLayout9.xmln8`e! 0@W#uZ0`Qu ZinkrJ'ҡ[Dhc8yK82QY7wAXfQƧ4(R70~& }iо2Z"\ﲜ2 UZcYVBԨKgeqn"_д$P0Kr@,b˽0۾iPd&q("[J$4 7HVi&肃3`bˆRx5;d9BR {MsX+ j14p#nLPn#c&#Ԙ" ptC|*ԇT8BT0Z05apz6}I4-E2?a N3c^vpX2/-G3%g>XU0> f`'_>l5 mF|&%qz||7zLJ] z敎w]I7nkjMEJtmѥ iΠ83grvD(_AsDl'*PB[~As4GLłE"GQW&aQ,GZH&rH R,TP)cAXl6+7`<^z[]Ӑ3&tU)h@@.넹.y2h:jy6&˥bAU5i҂$^:ɉ6$Eb=8.Lv<E.9G *Hky=UGs?'RkCO7f=ix1Im"kϺ.z幖y7r'o ms<Olg#됼Zޚ߾۷/_Y'|G?nKȧk =A~3PK!}כ!ppt/slideLayouts/slideLayout1.xmlXQn6/;_%Yd!"@6 m (TEV{=ΐ)-@Pq 9mIäK1vwCH,֍4`cgǔ~wWUxvGwe `бѺJz=nXAջbޭJYP r$ 0ЖSLj&O HBO92z2yLtIXk*$&zB^ ʷLdTҏy4ChZ}Y~Ң^9s "®t~[qehֶӗ3Ԭ?`ۛ\qWWP@C=PWfwN铉WPK!š !ppt/slideLayouts/slideLayout2.xmlVmn6_w %q EĨ)bv{8{)i)` Y"gg y~+8j6LQD%Q9Qqd,9JQ&x?*3z{zN; θ+a s=ab؛yv<#D崡x%Ӈ_:P³MtPv [=! /-lA1/Y~S{pr~ Nӛ.f2Mûd8bp=LigЉXZ&mjMjw<@_ŷ2Ԋ(_ܴ8om.,rzotju Vc +:g9EX49nO9x:si<N:4xl &7747qK؞~ =.K\CO C?MPw_w鳉PK![jm "ppt/slideLayouts/slideLayout11.xmlW6_`*eIB >J3o8vZUjgN0TF\{qr~sTQU2)^.DfLlާOa?1/aQ7 m:/Ŵ-iٺH)N+/R_2u9z*5;'_ gOob&X;֝ip(|5{zuIkٙ35\ml ǟ9~oi48$$iG$q J,3)3$ՉgvChtv[!M jq̤4~z:kjy~a+8Q趌t# 2v{LxXqF8%OQOƓip4 ڞ|=kOn;=:(| @?P2&9`OPK!fppt/theme/theme1.xmlYoE#?N4Tc7Ц;jf7qAZKkEP ] CZy>c8N:$BR6ZHfp׽ paS D76}:^W1ITf+/,3» V( G7a Bi'`@CzZeQ(0xL!Z5q$ 6:k6fDGU ^4 6/\r`)rzvmoLM:NS/CR[ ݮ-.iVb٘¯Vހ,~y hm+ހ,~e ߽p3Lu@\{ p텯|'(Ȇ2Y\t +"5mh_P=^'rjHυd(h{//'*G"rxb\I_OcZLXQ3 {p-2x_@o:b;݊9kqeᖞBsoQo6NvFNSَc.éC;~@:Pp =;4ڦ e3ps8yE]$Tf{94#NXX>#":RAqԉ>tw8qBۘ*rcd>>M*=y).W>w+D?Cp:3)q}v7GIoFBӄswMA%}m."o[xm}{|UvI9vl2ƌܖf,a0I,ywpC \}@U 6@+\PK8an Ge}x@b#;3B,;Cs-&Z lZܾdumܳՍi9.C ]M؉ ؿ+pVS!3i"\D Qu$!r+lM2RН͒5 l#LZΟ9I.LHewXZ-fg`Sd4n 'Tf홵ht?p0`2΄T[X6U*Ꙭ lM X )YvCKj+#;wB>RD곑~TQ \i+杦zepv,yW*EYT1|n;+/˕j\"ndF^*Ѕ]-p |6 r5guڣC$(,'*B[2wzX,Wd2b̬}rHXO݃Cn;s^AޣT!ik޸bN%t&zV?+oċ5~1%5p| 0\Ykmǚxq081 m?*Bf?2"f`CWtW þdҪ,GV,֗Q-=ElxrNe3pmfR =]04(!&0T?@oUOJ2'Sٮ08ɤ]pm3Ft GɄ-!Y"ӉV . `עv,.%вKasUSƭvMz`9S=K=(1PL) o:೤p47&e7PK !^dD8;L RGBUniwersalny profil RGBdescGeneric RGB ProfileGeneric RGB ProfileXYZ Zus4XYZ RXYZ tM=XYZ (6curvtextCopyright 2007 Apple Inc., all rights reserved.sf32 B&ltExifMM*>F(iNHHCC }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (jo0j^᧌nொ:6Zx>=kSዿO ^Y4Zh__6ex^$էO xS@ml`/m54?l=5a xS-߳~j|wO.wþZ' ÷1e|wi~+~<0-;ůx[N>>xof_׀~c`fg./vwOdžƗᩧ{q w~4Tu BOӼ;p| ?gZG]'Q'M+6V~Ѵ5H,.!uQY}Cxoźrm!5Oj֜@n.mhIXĥ$/33 xᯅ55=2B2/<];_4{N]|AOsMa*K'zS,ͱ@w_־ $fxW񩷇I—!tyk)_Ǫi^w? xB՟߆Sx{G4;Y~I on{"Wfgr('m*mzS;}>M^}f{ht亜ڌz|vR^l҈j~:X隟/Y?wn}_~iZiWchzL Mjh7#ⱊmz=WL-UmkXMMߏ>š/-D(:KסҼc?=CuM;Q`mn]_>ڍToKҼqGQ`JiegMss3G N@Q_Wj07)Ow:u7BX+85K[y.hC3o<"$Z~M n|S#ݾ\ͫJu-2KIMׅt hi\KmB[@3n.m<ωMzIaүk,-vTP@P@P@P@ek3zݴ+]+Q*9x,)JUȎ:ك?d#|~_~3κ?_fCo5d*wŚݟ|7jSU?þ[E y}_d_&ەサ{/F??3qٷ^k~/Z ]KM+E4=:K[_^Η_O=]EWuF'w^*cku|AԯuueY׸4ح4}6C4c's7%+>C{ 1|_s?gc@wxܱ/|7_ =SW]B|\>OexCRc|'}vqk {_|Ϛk'ݏ*mO់~;?_#/x>;xz{i%ީyq_jR_%Zm-_o][oV|?k'|;o+A?Ϗ~x ~5yoK'l,&&N}D[_^G9(zѽݻ_>35]w.q~ -.tO|+Exp%o x@Ѯ=2qK-o蓿PM{7ϯ<4Ox?CM]+=O@&~WzWKN9xe<77|/tKCAAy-G/aM|EY>5kٚak\_.&_g?]>+~|@<%ğ5qτ ~_G#֕bÞ2H4i@կF4]nj3nڎm[Vz$?g:?dx7><i>|OO_~ x ?E;P҅_VZ_$/n;AI+?+>[{Oүڻ?k/_|5ۿ oBҴ1M_M3h|ERI>(xrox/㯈hs(~:cOwZ;O: ^}wVƇ$-h7ˣܗ'wQ?_yN`~'xjo?π63]kkrԾ \x_3^y:.s{ɭ.|Uq_w%{6]>@z{߭ BŚh`?࠿  Wø !a_[|4<'DD~l^}}K^k::IZn_q{G{guRXP@P@P@P@s-F¾&&qNU!q#$: " "7!|. 5?nzw?a&cM6֡~iֶ 4h5Kf_{d[NQ/vmo܂'LMtYË ͬKA{eFD^F U9ц KSVԇ חV߻׻;=o~#ub~چ77-&.溓òjMq,^5WVX [xi}W^Zݐ~˟ uڛ]?s[|Bm'~+g4$E 7WoI<_]OqiSi+mI8|5mZV_eߛ#?gGK?f~?Kuտ7/X&XKmsN{&ԤѮ't:lm%˦]Ȕֺt}Y_G隧쀚{į~ٿ [߃n<2koXn5-ӵfQ[ n ]5BM/Gfg0X<1l?~x}x&&gǧRυ |#M:=GIP/ΏiMjkwg|֭Z]5Ij+;=nF}1?"A9 qu8"/|CO|3df9'xC\_\ZAfYGkwkoqE7zW{;[U}{u?# h?N߱ߋ5A7/jG'ƯZ G&j˥M} {{}B6wguN~KoCncUcڥƑ7Z[a8|;i{֪zP渾{i e_kww*o_<[Gd ƷߋMwxCmO5  cIy$w,|L-5a]b]S??s-妘-mt9EjSW6zj~߳#j?7jgs]ZKw[ow_ϧ=nw&}5*~?iWNG>.x^;?ү {éj{۫ ,LoְޣCmi? - qx ? u⹴:KoNl?ve'K)2{/_Q,Kgߤi%P@P@P@PZnր?O/]3Ӵ{W>_n%GKGR,ԿV&^9G?txIKk'4onz]ĩ}S_-qb<26+y{f?|btٱnokPg]&56_h|O5&xzIOrjvׇacro"/|/l_~ǫr~>&m[Wi~ :σ'MtQ7@\⶞ii.1fK]Io\~]ooރ_I|E2|)Gmq{uŽaco.iD7zW{7g]~CM6NJQ&Oa $Vlmxf+Uؗ=ğoaӮWy}ֿ4r~+'_]]j<ͧVqZKFˡ\.^wާ|q s =%oϋ5O|Ps7C[O ?5 BM3¯4 ~)VfC3 *m!InvKlq-|ݾ_$k^>9!<uW3]z'_+Eu6#M{]MJP!0d~D0jr77loU7c .m}dxLc!zլt ;nEݾe_س韴i߷'3eӿmCHBWer.nm [_]ꚥլ _e-w/"⿭ ( ( ( Ei=7gsJ!DKy(VҖQ f?x߁?l?ۇ wJWgu sDn>o}O|NV񵼃\g|el-^V[ϗ&ѽ{x3{ n| o39д+qxV(-q܍ŷV> хKCE ֺۯpj7;Z.Xh/(Nq% F/7m*7Zg"|5hhh˫ho=6)tK;Q/&_6WqZ7};|_iПH_zRO~?x'JGn,|.׾-WźE/ __x)oOPZͫuZ;hבn |@ %}߇;о'xOo?}[>ծns|0Z-?i'VR'ZkIGME~~*|[ ᷌3K~m/#?</;-?U|=h>_m*4fl/A%ȴMV%=__soĿ4-xG2뿶_V4MfDyuOٯGſj7].Ko ֙T!r}~hm}1 jk?h_?f| Oo>|:ǂKc~6+ .O@_| ;?IOUo9m={◍?h_w<Pg<1|)xg3ɦ"]VZo4^Sxz^kb֍wujm^]'=LTg,x+g>7B5<>XmO#-4x8ԭ~x 6WG!֯"燣5+N{}Bϧgs[tΟ#x9?>)i?f˟\x[X VW>8kh&|CӼCs W?Il}mqwˣx/? P>|0aUxgS7?kwW^4x?WOmZ<#]QքAj~[2e|K( z?_<7}=eyk}BG?D]Sx'㖷/"y_T:|z&x+K_+?Χc3WQi>ͫՓ:wJ_PP@P@P@P@% y!,JQErK,B$q.Tb&??`; C>1~Ȗ><^~ ZK6OWZ%k=ЦڕrFV|׳R 802&Eɣ> ]lҠcՆ#Md-V155۬BukA5+gw#A?Ư$G'x_ɢ8WY:ՈbuM6[>A'ut}f?AO/音l>jF=z-ko3_jN0j7wl-.dF.MiR"Y ?dƟ+3m Ζ~_|MԮ@noջӠԊi{(͖bMiQ$}ObվB Z7'mY# _uߊg?&P&y_?O1M]$BJ=W[yNZ=mgђx?~ u-K]-w 4y5 %>0mFKn-_Mec?a;7wӯ.wkxࠚ>2~Ǐ źcj %]&K\d[C*adݙ.l$YgyV:Ʒ'?8~Ҭw[f⫽KMWii]_Y7O3n-+k|=g˳Cʾ1|ru(쩡>#ZgK y_xw/][Ѽ)k5cjճ_kAdIz-_G~|Rx3i&~ *~Yecm>m<]ZiXj1Omh/ T[\i'viz~Diy72~ǖ#V&~[Vj~o|1ut`^ 7[ȉIu[}Õ?bώaO|ctO5]  ZMxfĶIKN:W\0.ymiXE Qk|Ozha#P}+]#ጰk~I]7]i%aE,<.W.tOCuh^"SUżI޲_EZj>=IA@P@P@P@xx-|){=$0AZm̒4(YQK1@Wo ק6xoQXIh J֣Wo#\iۦm,+z[]ϚCuB; q>7ū)a(|=į+ hֿNjӖ`kukA4{G8-ibY||dCMH<`~kkm>-RD+ڳlN]?f|pi 5kߌ >IXxz= ÒxFg[ȹmV#Mߛ{h'qCK<%54Iujzܦzt)ί}~KkcEV&|KO,#?::ZOWg?\V^]iJ;D[$֚uO}mOڃA|<|THxX_~;$]濧ZxSM7^{^Wu t6(A-WVcmϧz{J_E? òKcgW(ǿVZgu׼ |$O<' ]wIW9 cź7<;۽Au]Vtm;>F{ ;_H#SO(( ( ( (1|H'uFI4]QKΪ 33@$~߱u]kK#-[?XNu=?G52R\bN;{䷙derFV|׳Uc'c-?hl߰O/o7[~}%tEƥì\f#Q7uMgi߱;z?gy p}ax[7x OR/ǀSRv(YڞGƗow]}ݞd_Wtٱ<=I~?a4ω^{i*XoQ-7O>}ăɷ4Yɭ5_DS +~ؿOY W=ߴC_Doğ\&/|NFT"Kr-լLdц$֚uOLj?gx+'?-GAI Y_~-!4^𶁨$?mԵ hv.mcEluVJUn ;{ߪg,; hcXxS?>&fk>& ۡmc;Mf/&K ˛oZ@-vn_T\} xi/)sK^:<~!JJjgMJ}6 va4!]j}|י+ʶOXQ wōHC2:a;>2tg .o&V3iqrY]s^U. k {ߎoOo5մs R|-7D xgY3YkVVZΑsiz(_@mU NoofYeZ\ɯ_ƙc|Oį|UZ]P-Λ=ՕWZBUiIw[m2YdŞ?i'#=ik?!-5O>}CÚϋ`ukTS6~ ;n7 M_l>Y|d?Ϳ7}u|ux\1Iה̪F~o Pq514N$8uT5)SQYMJ2Os"*g<Igv%Q!a$:(joGE N6,g7znPt-*1h?4xľ=n='OmTͣWC-6֗}}!f/xGSgt?"£=`]R4]kY mg7l/W^ k}K_5PMqYWv΋:|z6Ew\궺zNeolfE9'յ/|D1G?2,)Ѵd: [χy.xjf=I`{M:5zՕ#TNMJ~<[˩]ZZH[&_i_x὜Vz7υ>~xC~'/i~R_'5&jZ+|9>=wƺs'76_]./ ;şf|7/? [xWWϋ*}=WN뺘ֵKu[$@/k$D%@4?_ō C{G~{O{xTwh &igi$մO^~?[Sn|@>Ҡ>9_DY54|=xχ? +x[u |$5~(6iDY  ƹo[x6џ3DkzOA9S6ɸc+d O /:3J\ʖaVf`f!®eN+| >l>8-K*0ϳiONK/w[ENV\?8 ( ( ( (<>@m5F55~1/ 8U ODךe&e翚J!,[㸇[TsZoaܟ2>CPuc2Xe6氵13)K7)_^/ [R*{jNgg9EjulnWq"!_(K%nG?}Ą͍x_ o)Nťǟ=oYx@;x_!VME? 4go 64*ɿ;?!f!?@8C >B|bƏY7'D,<?᝼/CHO_&Z\yЇt߀"|*ş {|{>*<\t&Ne\SV; ;\+#KKF?ck*xLN2n>)|"~<=R1U4,*<ʧ$qrZNxh%lj4߇?W5XћĚq6[huN_ۋ=MٹռQw5՝siכq\ 1lIҍ< Jtq8| jpsBV>]N5e\+Yv? 8sS$1#R> SR唥*+aiՖ _#֥u/>%2/|;𶁧Z$[ۥD@=Cb"\uFkObgU%l,N(NQ՟5ILT[8G[2`xiUkZ%^ܥT#/3 Y7' 4go 64*ɿ;?!f!?@8C >B|bƏY7'D,<?᝼/CHO_&Z\yЇt߳-C5[9[;Q{ކ^|H]+" ~pD|F\&/>:0\ZI49硔N֞#\ et<\ٚ\zx_žNezg49Yl"+;HdSJmĬ]Ldy..eiF%8{.9]ʲ*j BzsI.zfRiUVRVs)IiY6ec9?ӭ՝j\4N)B(rӥMF8Q]zP@P@P@P@P@P@&? |E5}JSO??m%1|Gʊk19f2ٖ-𳃱|;~*x|e,.#ᏭQOGkBUʤTe&gO|{x=bã^ 􋋏f7p]o[kccqqǦR%y|.K/~#Hk6oi_ ZԼ[>=]S>#~?Vw?6oD..<ycǍ?X!xzOØ"L%g=[R: ΝmyMWE|F?ୟgoI|D{?d[]b|7yuwt˟i9߁MH2~NvI#jj]CN|9_xQ jwំ|G}t-oj3x.OxI?ӼWo oC7S/%l) x^k~_:g|+cjkxRiҍ2?Ac!nA);7g?c co7/L>&BoW~=~^)_w{ixfCuSFSMC쩥)v{&cWl]OH?^/>;"V1еzY/o@׵w.l~ m.W n /ح3o?Oh>.|A_7 #EѴ}Z?xzgqsŚqXtѨBejvwվ]㩡xGM?g7/m?|Y㯏=H<}w௅*nkWTSBՇύ/|]ύ?F:_wh66Qx_~)xJco^>xNЯt?L.ֺնև?*s~~ wOڳÞ9_zO}EG=[?U>M>\>#K񯍾,ɟ4+o~'kl^]CxKԼaXW:$mq;ﶽ)_noݾ:y& ƣio-{XI]\, l-$kP@P@P@P@~b~Z]յ;ovn6gCd/n;cw2VS4ʄg꿲獬|KWšL.%,5OշJ}:woAcKuR ]dNwS(}k4Ku|buoS7[ Moc_ڣcN4݋m{^4F<ڜYj `7ozG^v-?lSMb x[L!ݦG5oCP%k{~"Ҽ;s#J.-7#r^}fY2?'ׇ,bKjyiCZZ?-\k-$rkS_Ca%r^ml>2~ڇ/b vO#S4b<'>`=oPk7n_=Bwr^~>̩ide~^m?PG5u}cW]7طolbj-$6tma mxm$ޚ}ר►wcϿxW]N<zUx_TĚ 1{?jtQq꺌Z76sAO#Qrv`Eڇت]k,Ɓy~6Q]V/k:іÓZ6淬ìA{jך-4 \j6#rzaeg_NϺ-~l߉_SLC6KTOTj ;uҵM7k qc>7F^W#.&qwShoڤwr}g?'sU7ڏU7Z|esBOڣ—Tsj7BH|GϸKM5ۼtqwg }o|x7g{hR\3igc|_'43š,jSuO]G4R]7[LIm-ߦ￟$FOi.? Gav_ J ]0f"8L(*( ( ( ( ( %?Lnm6+F/^3AwxBֶ^nMWKop`G22'#վomSேF't[-Wv\i6~~h-^+ 2XNiy>ٮwg{tFwO'IwGofR__14[%mj^m._ًA_k> KMHj-._kitz.-Wy Z<mkʿ=nRkwW'Y~xkLMكD a 'Cueoiz ҵ-Dw]_u y?2'ؼe?~_4;jئL~[ hY0kkk"Lu]qne}wkie Vg_ďVğ] +Re?k}o^#4f= t7WD6'Dy4]jhcn~u~eK?ym,I+Ѕ>^hgM}Ak?:d.ҋ}TL!$z.__!k_$~ڷ^"^> 7\kzzoHau9i,WZu4YSR{=߿y2ړGuآMsT)^Y~ך}ksXGFVًKiAue`StdZ[ч}4[~@mt^o9sk|K$eOZEaxVu{x+Do[__v×^!֣"MSFta\]G{g5mw_O!O?/n}_R)j_#m>KOj~}jR~Zsnֵ /5-.Bm6Z]kK[}:wwďVڷ?e_~e/~ޥc ~)VVd4nn/n ҼA&|cZC &]/Rּ7 x)oG_ɥ-+k6w|aiV <~/o \i>[GĚVx V7O{}|&^jVkgSҦӚ#CҴڇ//'n|5Y6c5BAxkK3x\?/1 ,okG_ůk1]G᜺D6.BXK -FM~M3M-u{(t{e{;ӯm̬y?1mR?eC.%k^'ՆEn&~k Ozfyk:_߲u}אo_rr=^++8J/|;]|[&Ϳw66LԿbO Z-#I׵a߇+K:~CKư;[k}ԧ𝶑^|[-5#}3W7tD"՗]l^7{g5mu >?ߗ1&Uխ?H–zoysTӵadoB /jW_s2Kj[Ҵk+ ^Ěu߻ӻ_WlV?e/xo ioqkSѵ~-f/w_>},LxŎMRG5ƺ[`IyxP״u)z( ( ( (?8?்'m+ A#bSyp.-m.#.㘭b. `~:/$_~2jܧig~:F\kk[s~YrZ}woβ+2O'??o9g[Ã%SQ;/g"lDM{%ϥevEw]_u%k}%ޑ]jkZO'Oa럷ܿ /~:pb,&1//F QZh%⺟PѼ?s^jVV.;[k}Gc!ҬuAgiSiv}C}:ww㾹y?O >FD^/ Ҿ;d/7#סMc6qu\:v%Ϋ 67/Z'~h误_-zij_O?S* xK?|^8|Kk:-OKgx258Yn(] }{q{jkZj餺ߦkX]:mOwWƵ~ Y{isyNo'agޡ]:N CQ[&y^L 7puG1lBLJ j[[_BѼ=nCiZuMkoJxg^fO+úd/v={C5K{;[=>Q ecY  P@P@P@P@W~?_ML|Y{&O`iV-8vj?~̾0< ?LFO|Is//Z›M7ɗ\lZ[O}qk P[Mgtu2'/˨ߏ;ߏC?-}$ď7zԓ:uv6ċwNh7v6[Xܷ{tu}אz,ڇٯ~؟ ᯈn5>Y$>SG]=Ʃk`M^\"㿖 ϧ+߲ٚ&>! f|o 5#Eɗ#V>Zv7:uXC;IIJm.u{;ӯSKԿo?߲\/urxsWƉa'WU,ˆ^#Mm^kFM nZ-k?بw\YSA{[Ha<«yl: \iPo-Y^Ymwy2@_F|G-A?jM'oww>*?_RYk=džJP[^Ь͚iu߻{ڿ(#|p\q>#7"Ҿ#|l%iEy>]IV ŝƕmKtk9Ӯ{gN~mS~xC?Igi_4M w m E3Km}$ڪ Ahpߚ;uRNo|K?l/߀ |%NC7~=tM;s/%?xoIźUpM}jzbZU餺ߦkX]:S$>wN ( ( ( ( _ANw?3Df\I5N͆j%jzd۝BV-ca e  /=~^\|.k}^߆|ybi7ĸ{{ ]>s3C,sqNmi|P?h%??c nYjV ~8;E}⏃~'Z_j|8.'hnmףpP~|x^D>6<_|q}O;|[t"Kk[]«\ 7:_ێmףpP~k`D>0O|Tx>|qy_/~-ZXdmF‘,\<_iHnz;>;w+kXA5OoG/¯|*vŖ^/4[a_i_ZW9ۿ^B~%_#T c#_߇Gӫno4+7>gI{#,$ٲͻm(Zc2-o~ R|v5OD_h5{.Αy/3^3Ԯ`G]BHfi՟;^~~`?Poz]vm]|gGgۘ5J?RژLrCe.TKWèXYMz&[ !'K7ؾo?'e ~8Z_ Ӯ}3 y|)^;+kew妽|Buo/_&CǾ< >7~?#Ƕé|OM=7$a%Qq'{RNw妽|J(w>-] ׾!jZ|1mY%HUkԒhidqkvi4jy/#7#R|A;mUx?j^5_xN^'?Z<;./մ [VšFo4ɿ5?+++M6N ++KtXm-bH-@XHEQT TP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@PK!iqppt/viewProps.xmlˊ0в2i* R@2+򱣩nH'8s";ۧwH >HkJZ䔀)dAIT\Y%=BwϟBH%vlNV?B7Z=ԑ4ƺm6w#'(Y+֪# w˪P DDuM'~-x2χI/vF b[ inszHC% +%7Vh(>,ڈ[B ڇbqr IуwC|ep|Ie8O ^q?E>Ey޽EPK!ppt/tableStyles.xml I0@Ὁwh}-CQ$ +w*!@he/?JXd45ݤ{c@qqi` yߥ&{p|o@XpQQ)(tiѰӓZo0uI=7"tl ɶo ;U{nwK˪V_-gylƤ |OlM$Pz,Gr҃7G\^bPK!ah-docProps/app.xml (TM0Wrj``!UZqXHdg7m.w!9{GU-X'F "RIFS!" R+F;p#V^#BiTxo&J> \Jxt<)uh0Ae!a2Nf:so`Ü%ڋ2 G}6s|4z`41LGERV;{T^lcEI\͟O|z. N'7_@dbc)rtٺ8~b/c`h0Bf=-RߚlfESl>XH8R-q7n8"?ZiV Q.ɍ" T + k1G UbMKpPT**Ӵt ]' ގ!1{ΰQw3 + v{ {9LP;<3zY$z.i a!7ŏedV Է-hdl6j!OeJTdS']K%$Nqզx VLV`8o[16%J ⾻pVٿcCToCg-}XmȏƋ,䖒&Gbo7nSޤ4&3P /T PK!n$(ppt/printerSettings/printerSettings1.binYOs@H몱13V0Q;SfK,kSEuX@@b{H2ݷokjٯ)$kPTڲD,ꆵ:ID>4z.٦2I]~MGDhh&AhKl:_H@KY0fFF|TaktA<HlǰXK+2WŰyM\p,8}a-!QG+.u߫z.Iq6"O`  xZ,N6N7#aF&&^~P"YgVDC 4WAV%. E<]2jj(P5l)W@#  @QP!F?",D .nn~1ú7~KꅪUwDurDe#&ܠuEFrݯS'#3#*dkƣ,0iÍa&zZT/]aObp,T{C~2k2Z ȁUҨGx='O<&7iKkvNv 0ݳg[Yb RGi Vp%cA]l=jua"mՅi֫  ˹T&nViNEvՅ2Ichp&yy^xnv؃ݑUtIV9ӌySI ;j5}e6r l#l\C+$#[)ߔRa_&(#p-?̡5I 茨I0t\j N*K??労Da؂W1rq@!{A-PR*CpH {'Gǽ~a7V$%G%>y(/,8˂{xN~= PK-!#{.E[Content_Types].xmlPK-!&  g_rels/.relsPK-!c\#7 ppt/slides/_rels/slide1.xml.relsPK-!K=7 ppt/slides/_rels/slide2.xml.relsPK-!K=7 ppt/slides/_rels/slide3.xml.relsPK-!K=7 ppt/slides/_rels/slide4.xml.relsPK-!K=7 ppt/slides/_rels/slide5.xml.relsPK-!K=7 ppt/slides/_rels/slide6.xml.relsPK-!AM ppt/_rels/presentation.xml.relsPK-!h 'ppt/presentation.xmlPK-!Մ ppt/slides/slide6.xmlPK-!6.(#ppt/slides/slide4.xmlPK-!Yx-3g (Rppt/slides/slide3.xmlPK-!bvppt/slides/slide5.xmlPK-!zi`}ppt/slides/slide1.xmlPK-!,&y,nppt/slides/slide2.xmlPK-!>3`d!ppt/slideLayouts/slideLayout4.xmlPK-!ђ7,ppt/slideLayouts/_rels/slideLayout4.xml.relsPK-!ђ7,ppt/slideLayouts/_rels/slideLayout3.xml.relsPK-!ђ7,ppt/slideLayouts/_rels/slideLayout2.xml.relsPK-!ђ7,ppt/slideLayouts/_rels/slideLayout1.xml.relsPK-!ђ7,ppt/slideLayouts/_rels/slideLayout5.xml.relsPK-!ђ7,ppt/slideLayouts/_rels/slideLayout6.xml.relsPK-!ђ7,ppt/slideLayouts/_rels/slideLayout7.xml.relsPK-!ђ7-ppt/slideLayouts/_rels/slideLayout11.xml.relsPK-!ђ7-ppt/slideLayouts/_rels/slideLayout10.xml.relsPK-!ђ7,ppt/slideLayouts/_rels/slideLayout9.xml.relsPK-!ђ7,ppt/slideLayouts/_rels/slideLayout8.xml.relsPK-!{UbU!ppt/slideLayouts/slideLayout3.xmlPK-!4͹,ppt/slideMasters/_rels/slideMaster1.xml.relsPK-!wYg.!`ppt/slideMasters/slideMaster1.xmlPK-!P3!jppt/slideLayouts/slideLayout5.xmlPK-!J$!gppt/slideLayouts/slideLayout6.xmlPK-!c!ppt/slideLayouts/slideLayout7.xmlPK-!q>! ppt/slideLayouts/slideLayout8.xmlPK-!x-!xppt/slideLayouts/slideLayout9.xmlPK-!}כ!ppt/slideLayouts/slideLayout1.xmlPK-!yM "xppt/slideLayouts/slideLayout10.xmlPK-!š !oppt/slideLayouts/slideLayout2.xmlPK-![jm "I"ppt/slideLayouts/slideLayout11.xmlPK-!f&ppt/theme/theme1.xmlPK- !^d׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx pHYs   IDATx]D>pIoRDXAaoEEE 6l`G,Xh (U"B lv7L.{\6̜̼3y39sfN>IA@5ڝF  !^ 2E]Dʕ-[FTkΝ4}tڱcGD|m۶ɓi޼ytX"W\I3g2g̘ʄCUnf{9~뭷TYʗ/O ,ʀϚ5VXa;W_|~ӛ2nJӦMٳgSNN~TTMy/_N+VTy"??ФIhr❸+=[~O|gV|nz D^lONwJ7pC58n3~#++˨VQ@K.qo 7mXvmoAg<Vwwa}^y啈$cƌQR`Ag˖-k5JF%Kzhw}ג?~gԩW_MK(Ton޼hԨq뭷Zi^k7=}F %K(Q 5N)~B B߾}UΒ0`@D\n}{ϟ;40s#FdEpI'*U0t\%^z衈 }-bš f;5kfvmhuΟƟ|׫믿Vq `ȭD_|QmQFo^T7T#wsTL}n,]dƎjĖ`$^/y˅ /3ui&Kd#s3 }gGc _ N514{>7BQ'Oq>hѢEV\V믷SNs_le"qQG{0R͚5 5gΙ|1;?3(bpU#4~UMZ8p`viK >g7ƒw1Ǩcsc]<ADy?&1jx]+( :L *"mnŵk׎XbX_H&^xe=z{XG%JtY)N;XRGTjՈ"5jO8:ST9x4H<%U/7}ޣ/l|Iģ4zU w)N>>~[ x?:냽f.׈,QC79T3<imV~gzgԛ'k"ҙ'n+h?{!hтXCmڴ!VMXyiS{g}΂Q'!CX@| p ʚ'6?>r2ЁOu|@ܬ뮻x7n >gDQ x<!;UN>~[ 'ֿ++%4/i2Â'V@GK}aQ$GdF xŻ>p9眣F1Ff#˖ij0t>&t@<٧<8?09Bǎh.Frΐ >_jP`k8R>~C' &(@(;+ Ҕ)S"-F^+rH= aN)wNoj3O 趽Md+Ff T:)ƲQ;~&x='^axv| իW~p -8MM`;Y`Pjv'̬2T LYL`gqVyfLAfwy$&X-&b a: f7ۣŲ O{u̫U>XZ}Qvi,}< 'x }"̇*b# FW_}u:.r͜L_E 鍀oz^!4l4) 7)GP9Zj6!&d`^X|,v YXl 06Fyű|/o-#ҏXXF:KZ`QegwI;#JK(ټ[~L4ݏXm$楗Y|晌R&nݺʣY([}2s X5ՑM_bj̗K3D`?caܸ?Sq4WPWzQZv 6f'QzZRŀIy!`e_W>҃(<> p?pľ~]xI}=FyO)w/)gǙx/?vKQqZnYA7W>4s*w1Xarmυsi3o&g>t斆vݙű[z,'Ċ%w-#4rSLbqu+= xbKi9Z-=۔3=g>%~;ŋ>|K׫D̙ %ec\әljcq^ ȌO:G/C^}SxM_?^ңcT؏#< A=Im_cxڬMnO'~\ Jw2˳|*x2㥗^[$X%prK,=~ǭ&t#-n:[z|ﱙ>~ͺC/+@/ M޼)VXy4_~i3$>)p.^v jwtO˫#מxbCq䵼"5@,L>zeg8wKj|Jo&M":5z*]&^KzC#^PG8 F"l뇇Rz.Ha<# B8&7>87eAXL7.,( N{Iog*L=ȳ|*}W9lmÍʷ~JU,+|ʙ!+ +x3z t Hx"yLͫ|J½ٕI{̏X!n UBh޼yQXRO(1_d#Gzu&X!/2>)EtG?c]v|[Z&F#:VWJPU-p|L&99e9|)R$jp~oÆ u9*UC WB^|SJ =VDԡ3# ^5Kڧk۶'ƞ%?XTѳgO+n '{_R`A@|" 0I.@Px"(A@O$ A A'B>䂀 E@7(_L  !ޠJ~A@|"u': ko\[,7Qpe m #`Y*;ul)!u{<"6> ̙C鼖2B}t)Q~/ *KA8_`z9oKK(Y6e}x+7*}ü䏕f׮]͊΀ Qxɒ%ͻ~=xeeS EDuf%r>{ x{x|܇ s/xuQOΓڵk穚Z{뭷 WUmsΤ}i-(zT-^֍/^Dw/u} ~Y$ޒ|ըoɁ;|{g^b|@=}RR;ӑga:9k2xP.HsΥ^A +7PoguQ#G*ÇOUG͒:?x?灌 j{WC!Ci{PI txS 8&6jܘ nvۥ㡐w br3IO[_k={9oILt^-.I>9t_;=󬳩\r DvmذKltAE vuz rs =qnǎ)"t1J̑.Hꫯ%̑.HkHnc']]>ᜤKec']\2 t~U`5;ݪ9E֭M96kL\s mI6 ttQ;;a !C%]HIxt5 k'Axa4tu &tzkHNWzaɒ%j"-z1N:&Ҡթ^ذaHӭ^;&LBtA?*t x1n tRՇթ^?G5[0fJnf.NC5͛?x3,Ter^{yfߩES]'`{Fa=4ujWݻ)*U$}3ǟZ_ 0BnҤ)/_> Yuǎ|?8e}~L &@ɐʲiF6Q&D~38tzg錀Yg`}]+WkRӦEeH/YϛGlտAhdt?0>hv̖iMCiժUn'Y?䓣严3ˮqB$,R$+~畻֭['j}% b[\ amku-͝:s)dhb뮻%{;.cӻկ .]:q~I.+rJs'q&$pOT ;x[teI ]8˳VZuN}/EϞ5tnd?~\; 9^z[ؽ\~װwP#c4D(vgeeSuvE;ؼeڴAGwyav y@VTQѢEh8iӦZfg刺{{]PyR"]bnݪaGl't 6z~A)`]T)znZ"^<]Ԛ:IM!=^zNiޜ.B3JsݞFߠE)^Geˁd83ޤz /]<(ۛo < 6ϿBoڽ yg۴{~x3ߘ!}tĈ/huwGmmA}-g=3Z^=OLim&@bxc$)A@ЊV8E MA@+BZa $F@71FBjS  !I A@" īN&@bxc$)A@ЊV8E M{ D#cOGJ#v؍u`lnwuCC.-ٽv6L>!v'9r{N #]MZ ziBHe'O҄~2kΎPO}"wm~:Rj`EcU+ &CnٺE開N/ÿ2 ?t7}v6͛;^0VXA[l,B@W]uu ]t) 7`bݗֳK%rs,.$̞TzjZC5ZAf+Vd7׋uӒݲcna.ͷ-:K*TX#)~Z*t}HiTD PZ2y駟P*Xq:Pޑ#Қup$ٰa@UZU[6oAZ} wܩ:{v//5o"OzBW_퉶L/}_CL2 [\ҥK[z :{ ?׽~/wt{:ݗ^10h2 {;lKq4s}Wfa-H&86jěIJ]A@Ho"  A B낀 hF@W3"ND&BH  !^̀8A@! ě!.fx5*A@Ho"  A Bu=ƞd+g˗/S}"ݫ֭[3$ o{fr|NNڛwo5ڝ̫3Wtc/^ hNN7RޮF5W뼃oݼe35)'͛hڵع6mڤ]f.Y; :\v ;ۡ]m[OE灧kФIMy} MMJ3g ם*OkA,OfΤѣGSP҅pm><*U@\qn {csQ!~&19n4io{0dWT)ŞAK.M&X'ϟ/M. aÆM7rh5jիX,!H"c*_O쬬T~}*<둉sʅ^{rǎKK, ,)rOJ& ,}ʕ+e-+auWڣ}ܹtgp1}޿6+;_ 0|w;,khSO=52s2wI/]JKW>_װKZi~W/ 7H#Ǘ_~6jdC /hEW:d0-]yw jժ)#dknj'o=xW]꼜m[̈O'@xhp!.=ʋ+ҫT)=CUQP aׂ;F P^C ڷNX)V^^vq8jp3I/j'Q#G!ô=((;H/ t:jܸ&vÞ%Jh t͡.O\vI}_吝/ bk'M6>ՇH7]wu4:IK*us6隤[Danf͒̈IANvҭ]rHۄwO67ޒl#]n67<"줫/9IW'9bkngӉt+%1g n!A${?${dt# $BZ7(BJRċ4t^H.&5 2M˫#]#tb:]SFS{& H_ZI#{;u$T[RMɆNW'̫vbX{6ݻќ9s4lA>ªב{ tf4q38/EՋ T`6aXE‰Qi>zUi5k֌(]̿=l(l%BKS{Qi|Suuh16m2; [nV_Mގ֯SN0j&3#F|A6;E] чz%-0|?`:Ҽ7+?6PԠ/Vg)sXT>gueҴC**:TLf 1wVM?Ipj I$@D@7oZ BG| MxfKA" {[ @D@7oZ BG| MxfKA" {[ @D@7oZ BG| Mxlx;JŻ2>a[E o9j\H91۷o_V3nO_6˖-={vu:!wd}XĻw7ox?:WDŽĻ O 6{lڶm[!uXĻqZz͞=;V}m ;G5s *j:0 ﶛ\[m>й]GٟM,1_NBe˖u+NfąviW7WNkpo%InoO%K 9LҭV:o~frB$W iӦה{(3#n'&^tQk::j+ .vmذ{"t۷s>It~1*Qxrv=<'ⵣın"$/I7U I7[PDu[z!]̡~o%dP!GS҅,Ļo8 c" :]Q/`&x}VtaiLE #]xBN0n2;w?|66ɓ-uϟOp_vܩ/>jzNlBw68; |o㎣k7"'|fHc¬33~wtͻq桖˗Fwܡaٲezq^t^o!p+N\s-5n4,W_xIKG>~U+m۶ժeO$Z҅f͚Qjըۤ_뮷;/KSv˲ $A@B:P @@XT@Qd !^`IRA@t īE!x}%IA@ЁE >=li1v2xfGܐ0'Z{dlegqz^xg a aB*vN w{%dm31ĻFcfmSX9 i3om맏 &C *;t`w&qܨr пa/슖Av|w'v?CkOJ dEo}o>:)fj$ݛBř`2IZ'@91 N0I[Qu.OVv=f1RIW{w{ftq0IvۋFf%; 1Gz!] O%CN$^B0.. tlB H>t} - n,^{.5t1 ?h9~b; K믿RŊgq5\7$΅t-N!8$yIH7Ibd B)XB^NHN~R A+qڠ;711SƄ& oV:]Q/$aT&!(HE ]@7fsFs"MtIh!<ֶm[ҵpwyN(*+20Ww>r빘Fb'rkshٸqq֬5iڔӧU9s*:sLsrrT}ud…1N!8φ Q sfϞMO>$K=ԯ_?}t޼\5 >zL 装 kR2eviϏ>qeXw_={%VM6?̾ LO3/E)SZ~!6pp3tkܹs|+W3g*sDW:|͉Ą~Re)_< 0InSW6Q=zguVLug5ZnmKHrÆ jHB/_>SN vI'd*T F"EbbMѾ}{mIU{ ֭s˞kqro.]TߩV/0xB2ū[Fվ2x1QV-mh]V}fTxuVywayW"3@{ g˖-kb1+M}fB h>ctϞ=ƹkԩSǼ P@ ~ppbȼ ^ J&YѸnKx k%\bUG@6`зo_E$5aq(ӨY"F3ⷼ3:3wm4hXdRccy+R_PVٺuf: xF׮]n'=@Wb@wqꩧFeƀ"rD3ϟ?_wީcNK.j0:H7)^w'yxY5kfvm~k3uU-1h_ Bfy_b>bə.UχNZN;*A!`w5?za7|w< F@{ai2H[=Xzy{ Z_/؟Sh_mbi| _PL{a<} vynǘ<- uܹz(YW=;Pv,7H`&!=<yL`lppgAպ{3_2R|ya|o%QYEudorJ\XO8  Zh15rHL|>t饗q IDAT^n*rz 0XO#O> 'tYg;8GJk9LD@?hJcݟmJh%pakҽמozEy&R1O;eYRBNj/V%=3yOՀk`K&é~Jfo_mqU:ޜ{93]Rnk6tO>m 6{,믿nRPC&rneJed8lg`:vh KpǞ| ^{KDH:v#^lX#䣗eMoϻ}v5a*<D2/vyxxُ/&0a1*{uL .|zUC”/ᵑ鉗t l=JZױ>ܶgkܸJ+W|>KHT&/2T }V<=8쒡|^iOc'*ϡ&2CG6=E}aC~oz=S} ~9%/:7W,32#W8 G3>Sjfx851fKBrUWV 򰉏51tlDl Bl;o :M;!&нIeLKAufY_ +FpE϶t-bo+T  zQ蘟{9EVX́9 :an=v_~Y>KRUO?){Y`ׁ_}x8xإXxB-ց<>"$:fĞ) C>뮋0Jj@6 ٺk2"ޒ3[kӸ7V Rx%0'\jqcOk˄Ou ͔~[oUbxAիW)3nM?ȫWCۣIJ {W&^p@'N'?0a ecbXH~F];]y]:F|\7nKT#L'abO}يAZ#03TL<!?7OtiP:0&ÿ#KEյ~&L@5jo*YH]|?0ɟJׇr`n_ТA\Ē xmv^(kǽHV3XYjܡf!WA >9{6nyVc*լ)ʪp&ŃЁ˭s9A@HE$*.Doj'Ddp (' Q]=Ê_0>XQ[L- {Vnʯ 켩F#Ӣ2V?ǻ\ lswUЂ`A^ 0aFaNYX&QMBf3{a˝m eʕx?Jgdٗ{.ZRȾ  %Vz40l~~-ؾ#n?⥇[l>a߅^HND_KcD,YK/L{G//^\0EkfX4gǜy$utKZ3s X%RSLo}2}rzlRX|17Tze37,5pu[qT 8au0^bjX76]0֪ ҷiӆc?y =B̀E^8C=d^M3T RF칀: "b# l -lNBƾ? /L|wjEϙYmjyGmK9#Ztq}r\8ϝL=B׀~ə~x3#{=fUUΊb/`<^[z~Υ^[L{y1u7ٵI\G`2'݊rsg;)םXb& n鱜+˚װZn5KJ6 xbG=3^ $Xx"-=۔_26>jL5T\0hTB]ڿq2y!Ė-!T g. WrO+{Z{I""x~ x bGJՐ6Qz,1 $|ҰaÈ*뺣/ٱqPcGl22mċܵ֍~ Y(XөdxpņlSw;`3  9hYshǴo{)DkPD]K&B+iگ=+4~(\ ۾U"e(.hQ%"mȗ /TVBr-ZWDڔ^P#{]3Ov{:m=#5gv5Qv`jnޮrgv.F VP,ݮEchӄ޴sX3J~)tԱTK*^WS6Dʮ%?޵xg!,_(E~ CE*͵BՙѡR;+!o"PzTGE* doyN{ٖeB>x3u[^n˅V\!^{slY¿oRfdjٻ{ٞT Yib2Քwprh znWK?$myEO_Re.%6N4M1-\)/"NTmu͍J=Rl~tϊikXMVT嚡hkvO_>wlt9Klǫ3_"Tr*$oINݦF&"0Qޢ2!1S+! /͹\DЉN4EVbϏԂm{ږ;>|y }WA|,}B:gF9BB@7$`El|g_~<5<"aFR[FoNtW ufFA BqK#՟QaOƭFF=B~Q-W;"J~ïXn^ɕTaݨt>V> + ލ@(R$q,]}WdLItShE@FZaAؿao4}6/]o~ǾwGG(J6 ?dP1;u %GQv`ˋ)fX3.2?W}rEX\t(iCE@7TxE_h6oZɓoz]gnOoPWyAĕL94BGQ99kO巁yͿYI{CHR !Tj )@+ޠ*[rwe]`? c߿@Jyy*@ ě2M!#hY، ^4O].ݺVaUu.@ ě*-!Bdx߄sl> u֥ /^jˁ JRkHYtk llЉx5̗E.sO&A@.7Wlz;uoA UMՖrY?;m<:FB CYur?`A UMՖrE P6grWlM^|u.@" ě-#@ _b5Y_Cmswf:&>ŠA M6@t+l/Gx.}|o*-8̗U8uŅ+gˁ rH"WŠٷ:.^XTG@7[H@zE'oʯ |I~jNJȁ BPcHQ#PQ`f&&`F@7G@RU@ȭTI|ҕђTE@zk+&+5VRÈs9R!To!)_Ԉ+P:<⢜)o 6)>KWH<('@ " ě"E@",IDHAxSQH_LDEJGˉ z I_hD<⢜)o 6)>ċ$GҩR<@J%=, dˁ 38CA d jȔz@ ě6M%LA@7SZR!io4T2!LiI  BiTRPA@x3% 6Z@1m44h+w̙3iϞ=Ԣadž:]p!UXʔ\TҥKiΝԴiӠ"رE˖-)_|ׂ,Z*T@e˖ "&*իi߾}tGG] uъæMhTvmrOvRLg-X *߿J( ̛MmڴVZ9/G ֭[S2bMsΣٳgSSO&eT{/TVYj5;N:rϟO~)|)|,mA&L&8^FE48V G}DժЊK/}L:]f- >/_U.)S:u⻄IwܸqT*؟}L7pC'Y7ۥtt#iӦҐuM?38q"FjP@C n=Ogq_laj4K_nߠFKnљgM_E&MC2FS}Ư~pxglѣGѯNԊè_^q5nk֬.JZj6$7L}iI2N/<=ۭv6t xYmm} ;xPHgi'AL4;7C!n>CO=v}s?Mۿ?٫w(Η!E" 5jj#]!]"!C]*In]V1h MKXSSJg=nP/HzAFDP/=M)RO++km }B #] ux&+s_7o>Ӌ)=cͣ^=_S:ͥoA|iW^RxTPh:u* ZO:(-ZL/xt}=-94 P^~TxqMR-]F?kTREmrsr zkv.&:O~"(!(P .oٲeT\9W`l|A&d qMTti*YdT8B ,Xt>Q8 :".S8ر6mHJR2%{h >{hgv3c?!MVwJμ1 !sHwAG8ٳ֭[ؖ~vdq\$l7nܨ <p}Й~w^Zv-ehc!^'"5i҄n-[4:K_JI]{-/_s/ v =֥+5nKrir4x+x믥>}_g띡Ci G+iϗK#nlsʫTr'wف:uN8ᄠ"UW%`IDB'7^ٛUSLTAR&ADB(/n"7(C4BWq)V8,V! xSRA@2&IDAT!ތhF BZRVA@x3 NSkIYA #͈fJ@:! ěN%e@@7#Q*!鄀o:U2!ތhF BZRVA@x=7czm%a > va@¶m]γׄx=6}jN^T/JQa!8B78rI! '3 @R˅Nz0!L3Ϫ!$t~ Ni[!]M0K)< [&:޺0e)rxϞ=ZO~tNB#xN`3Xw/Bx)މr\G}:Uu^2o<@̉9SL F\_:~gQx A@uQ-hڵ.t)PFHOQGEg}ҡngqFׯȇ!(H$BFzap7+ݼy"v㫕%\B͚5m۶FΛ6mSO=՞:zN$G7Br]FmсSlyaۭ[7ڰaaٹsg: ѣGӵ^FS_UcǎU[nEǤ&ߖ/_۶mK}СC.fx#FPg)1JDP Gk֬ŋӒ%K"Ru"0WHNC]q2X*]NX88)VX%`rkQ 9dkYfȑ#,c ҥ"` =z(ȃ7aT#(R ըQK5V ?wj,]/Lc^^;Zag@b432;x:uJҮ8Vuni:ۑ#捚}ih$|;W^y{9HԹF@kC9 7Tn*~-b,_6!+3^T ND2<$j`}YZ\X AR[EVNK.UI=`oj':v[N҅t Zg.a$GOm?-c)[*'I!`."^n;IQrJ53^tQD`t;aNH4˨wwb89.6_lL/4PV-5Y RJ 1plx#WA *NttƗ/L/$ae'rrXM0VHgMe30$vQy/+9l_IPh#*κiE!fSc$Sl?MnXp_Yv8bV(/E_pnk_t“/2 l NSp]NiND*:Fwݶmo!CQݓè}vԧTlu}s&Ml))JH+4}$rubCCPSSч6!RC|\HK` ^<xHE-bm87'hg<ߖ3g.k͞u{^?TS=T!h]Y-ﱹܛ >;Щ|wժiVKNuj*ۖ@[vRaϞnUM{aÆ l1(Ix n/0"`r!"Dsu͛z$^T(_[ITZqI_0<-Ԉ{XX'\`=p.9u6?vf(%%Dz-w[]-_`ƘstB;ydqEr[|;=ٳjݺu} guQ~`L04q5fܹsn~8ˁ}q $< ~60?&P !\ ȒI "0;vLxE0 MDSȈ/ύ i{uE0\rEW?t 1 w%$ylREYWWӝ- $@V "ʲeˊ@JㅼzZ@Boo+U@7*^ptf`F܃H` ]|.&ŋ֭[}jڵ3qƌuqV75C$D}B~ӦM БU_ xxtHX_x?,4P, $Oonnve|з37La୨&FgHз +)MMMJ@Hw'玎wy߾} .zoiͥI/G.H7*1O$8ᅗΛ aLN`E?pñ?`CAׂ_|hPp+nw'O֭we\.*DeEϟW;vrq_^#{7Pewl_i*Û29eVF_?Sr]PzP3iܹS^:P䄲d,NUvgܿ]_PK.=-?c2-Q B?opCVc7kwZ _K.\sH-tȂ/G}I3;f@$ F@ݺ' *K!_v/U+Ps Bi566n}SZk.ySM K@8;lq{+*}8ch9sZO7T+2֦Tmmmt U~*UΚ]֪*)(N:AĄ^R0TuuYW|98ܱ9hɂPSS#fA J lGH=O_pUKK, Ys$ $ 7IڬHcFigIENDB`ga-5-3/python/docs/scipy_11/papers/jeff_daily/image3_crop.png0000640005473000001440000011601311576434157023000 0ustar d3n000usersPNG  IHDRA씟iCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx pHYs   IDATx]|TE$J{ "(U"JQ+PPf>"] "4QAH7 B wv%! ʼٝ6@0 aFZZZZZZwtGδ6t#%;u܊~gqҧ7o{wO&V+T=)Rwƌjcܴi=ƭ\r8xʟ??ծ]xd;n8ʗ/;s̡-[?N=hȑThQ]F!!!J?=J@z?mիWٳg|.̞=Zn-B@@Ȟ=;5lPoѥKx]o֬Yd8%\5k?~ נ [<իWuu&!!XbTZ5[uWN:ETR%t rE{Kks}زe *dE]x'EFFJ(͛Kq>K\x1\|֬YC*[R*Udd{իWŅn-\xvرcTjU' ݺuy4 + oN_NDуrK17hsTB t "cv''MD_5,XVx{nQW@Y_xCpKx SAgΜ;p@Qi,qke˖@x`޽tT'/jܸey}mƍʕ+#H GEЉl߾]H#Fv4iwynˁ*Dyrqfo[NHO!Y9E\~M al߾=͟?֭kc<| 3g/\ȢfZXә2e c=闗Vׯߠ;STT4_ׯS007\R V45fC_p>jy@\菬@gŊ~]]^qUq):6_ ~ "|o߉KteѣpCs>Tܰe }@ o'm&ڽcR.]XFs۶miɒ%ޚ"|}{=-[6;TQwI=ŃtI|/_N7vUVA?zh背,*ʻ=ߡXjaa҆%5{TMo8i{Vb6Ю |Tza?~JۦCR|4ͲoQx,c T ~p4uA +fFGZ^}sjS!վ]3|7QJ;u#li߾}b%W\FiO?A>և}@yև{ҷ,;SlgEjmm;MGC=c*̄LrR}@:vh3%AM9?ޭ+ 1cm XTdIg2k˜j )hDž><4ufk:vh/& fs-[YWa@~uLW^Y̒u<ޥs'zNԢ勎f0ڵmͫUぃ lΜhϞN<"ФWI ?vFt&VFj;+ OT6.F]vUb,VBGbM2F#5v! ^{K Pppς<$IK:l;f4-u?Q\0 daT dRsr03@0k%h}l؍@ӧOYf҈ 5kS>k\9@_,hkx3$t)dm9t;ׇb)G:;@]a+[@ws1`x 駟p@4@O?lPUhԙ `s#S0^@*ݧl-^ u鬃@o(@AXT Թ>8@]/@`)S>xT:0`@}̳)kꃳRmGNPhP:t42<1.\8/ v+@*TT6]NjZ(@ٸ!D5²b$`2E/]yV ¹Q #tԦ%:shĖBߑe1,MkjYX>^*ںuEr%?cOΟ{qBC*p7 %.gOЬ98 F_'HL#/^(#?wa!'ϑ#mx>TSܙlܸn\'9r Pvh*_~F2eDY&2zO?-9m(ӧO^Z|V<0r/>7N_4TDU+c? J{r ÝőYL]{bo$R)0xItcg8lNuo??r0EEFѽ"x 27~d}>Er]n-۴mOccĈT^=G02E=xnv{-F,coe9{+=KsX^,LmLϕPJ'ʛ7/}ᅨ$ Ys岟i_H3 ʉe%_,).q>f<4vuR.<ԡ+9ܹs9#EU.FUxޤ$3mIT<:fgtTNA<[dێ\< ^x\hܦlRԱcGG0DYȇxnuq8A+WȮ/\#uTT)>{XlF@%x%`}g.{x`.\XH^>`uATϰr˖.%JPYBgV)+Xn/CΛCpACbb\lzm[ͯ>Cz.Ag+RII-+w/&Tˊ^pfN o JJ^l@ ٻGP(Y %G(oƎ H1_}U1ݟ#|yԔܒ1Ha=*:F6m/s]ldf7o뻘>_„*@ HR\o cwSHݴ]Jxo-p|YތYO<%~èw=/Iv5r7>P0`YQJ,mxcиq3 4P% (^0>xы6СԠAC%^fҥ2b5xPRdb yMTI(etJ#V'Rذ*ן}^Y9tʺw%*,̙ӕpA3J>s aA'+Fأ ^g͚mG?q,BlmҮ;paL`V@.wV i:K?\5']6|u|v?`=QA;;+.I`@EFY4m) H`w,_Txſ("ロEun{{R= {yBa˖J,N3V`g*0Rʠ'V4RlÚ6o[VAQHߒK|딵RIe:#(-}%۷4ZZZZZZ6R!<+r?t 9r4*GjIK-kY>pi6M~4=gaɼK?Nc"Eej9yիIǡ-qS:SC8{=ޏ!ĿKxPxu\sc8>wjAN @& 2"\`"q#&#'eh@ ѱsDOO nCPN:IsMM}kQ>(>FOVFh'}(BaU:"os_S󣩛(O-Z؇p<՗d8,ڈCujuB!Y^шIO7sRԺM[0a\OZ%}SR\$O'O kz 'm_} DsL%Ç+룱BL;{cVxGX%5= Qe&KU5Ev_Eנ$*ϟ?a3RJ}j{iY>^%I2ʕ+D8v;ДS0 z؟(2 Z]8u& SUq$f xET*(9sW=H@o"-? 81K94oѱ t+e<5@7ǽ1FE'N%QۑXCu4T!b0#Ӻf/~K#h7{@1)<v;SuǷ^3? `0o;DGP VDB7Ӻt)ƌȗHߟH7Çhiop _3@}_t& $PRtSPfm6b?)IN+\qr  N!BCrpkxgEy:\!7pܹ"V]PJW4Afa'.:>vO?݈ 554*:3xe!W 큁 xE@[&M}̄}h\7dOKI8p/D'U (oE1!*> uފevp."Y}<^cbѨQI}%"uz:g/H%\eF=g2t41b4%C lƤILU_Au,CvtaWsx$\[@Q) '[`$?F#޲E36WmZL~fai/I5f%{ד&MV _!C)ɝC9lת>HyFR1a89j U|Ic3wtD(HW }ں0&SGf+@b,s@0RT1b?Xs~Ѯ]`ka3PNJ-vs20ܻw{&Oj-ӗ_}6c܆/-XB~'a3 Bcك&6Y( 䠰X>Ki&Zϻx0"⪃'TiXv_Yv;.yIk>]!=p1hT%Q!DO}MVq|R꩚Z˨Nm,/,*%%%%%%$T:/ZZZZZZFR#/ѐ$Z:ZZZޓq2{}G e#ȓ=.8hOPq`{7+v}%Zx03گzAlb)멢cUd%6,3r8OO~q$Gh.+t'߻:[wqz;;ũ?3-\'cOd 0FWhѢca +3sOգʸ!{1uoSq،ݸx1S;Z>>95Nff>\|I)˫O Olxr:,Mnc/DYCC3N 3cQY]K ׳"GSÌs6_]F6unkOOq@9\Tj.:ō:Gߓ(64a_id6_|F3Ϥ%5$38ΩnݺIclO")l:#h$?DQT1=M 3vhϦMSOx5@F67H鸺ؖ4|4W',>1D \H-+Q\P2t <<w򙋎;t)O+W^tPS:2Ю3~p 沌}#.]:pDB c ' !_-|FWJAkB%x5v<9DjSՏ*JR~$$&6['Xr+6Fuxa!D@0{ԍ` ̃R/L#+2H o Ͼq7:Q1<҄q#kr IDATyM޷a.w΃U8H'(&ѐD$J (kTPBz ڣ{eJN;J} *i;xUle_޾:՗`hS%}"QcG.K3gNJ[Y_q/ m A|D?>\M\Ӳ J5Lhnu3 2U7W ~BB#7/u2lիJV e6xЇxs-<\mמ+D=vD `}M:bW?_d6ѣ4[L1:>p7n@ӧOH~lr) o *c^evlNqŕ+k1:{,[U{ʎeF'P&D"Mɏ’{  '*H ^eS0R9CQ5kҒ6ZP4xp \';o+26of~˖-m6%^z/Q졿e,'tG!Os]C2] :^wfz,Ea11Lc}j{qTE :~O=#-7's1e|a`*J +@J#@k*(u㕇ΏHSR][7FTWtaT"w KЃU)a3A5l.^4IU (K+V a3`Aŕftz#}GBv4Ӱ'Ow|Z:4ּ6TR“W])dD6#$:l]wEx9G%Ffhl~\ynO[}gͰ3T"Fpa3{͘)76oNW'Oܺ>!3eCWa35A;(S4|OV Q}x"-{=l9&0ǝD،'*T 0O>ӜStZm۴{6N*W̺UV9lFo:FIf >`c>C6;4a3q@@،?.4ct}TZ*mp&%O6e(ǙA,p gekŭvr~+ytcoyH-"_Q=WxUw|1$( h#*nY------C2$( h#(4JH5h h h h n68i',_mحÑ@޿˜ݤgds,Ø"5'p(… '!iR@;#|EDP&z1v[pet@ 7gpdg Lɪ`#Y7+G ,_~ahlimOEy@;鱇гϦY^Qap#O=F3؇ TV-]y%}&^xJ7;B[# ~ * ٳfҀ|W@~;N·IЗof肀4ɓ'+'I1}0j֬Hӆ?ʕ+o@iRhBKSA%m>t=o]{$m82O … ddw:z;q;^'`9oͼp3S@%AeғmL8 I| ~:th/e'aN3RBbhJe EPZSf 1#.Uv#o@{S.2ǥULd<<zFڞ#lyr aEyo G~E@7 " 7 'e'O- _hѢE"(i:K9ߖ* 3f( x#mI{DO̝Uhf@ p.2~Z?R }}T@KEXɟ?TXgΜ˗e ӆ31|-[s*1i)z}qrhR7)Dƾ"28{pk ~4}@2Pl!*F]JW9 mC rh"_tޒUf><)gح[7/,:tHRWCTxE.x߅l3~>}e<d\rEt2sЉ1T1S^2eʨ++4[*U|C,V i:y$=öX<}-|bfp4VA l \l0ahh+ez\ߧ7A #,`2D<=GU1 T PUueUpa)].tXJGٵk}*dE(KӡcUOd6Zܐ66[@o؀|2o,UOx_dIe~aՓž ; #0@TǎYO `S5d ZZZZZZZEs%:ZZZZZZZnxÆ #GJP0e4yL߿_L/Hl: K^^߶m[o1٫W/駟K38B޼yX\a344Ti?ў={'WXP#CqF5bc5A|s+%Z޹s'azFr)~1=ڸqcg;@}Bv{zꖨk׮_|Q,teO9|X8uЖ̄^` 6x'*THZo \Ȗf,̙3Zha3G裴p"Uؾ|A,.YDVbCoTܠ7wTd }@#XJ=sݒLF@hѢҺ%k|yd`љ~?P!>V䤉/⍜vyzzvAԮ]J)K} #'1?pU\ڵ`_|0~/U4c6DT`{1\E}խ[v8h@/Sw(7;Uv`xԩSMv4x j޼լU }ҽCWe ~[~tRjժVWs)EF ݩ|G}H4jtEcIbiӦѻ+tWtԴiSi1ܘ&{厲BuA"ɡC]h4\Xlدɧqcqe0rzk7c9{7iRJۃ3~4_W%>wf%*NA^0:{=cNEIY`G}@oӃpW,g W ;N-{lgf:6r+r'OO?eQQsDvo6} /znFxۣ]|2xn{'{=zKD;c CW[_Hhz|Jݠ ^1hT+A-[vRY0:uzE4HȜl44~D `#a#4\~zf(gWGU6@I;._nj'׬YM#_{#M zBίR\cճԤsjRw~2h׶ [/2׋BfΠ-Z N0䆣^I晲o0ֹ { fڴ~6ٸ[v:w+\I7=-o:߻ǖ_V|J>X/nC0}rĊ}V3 Æ~C?hĈQ<,g}٧ԣǻSOӧ7 % Fa >B7!͸ THWa ??w Cɮsj__K 4GisY3g4lH.cޭ-^է T>۴֭[m0R) ~!W-gG}Vh{pS'f2 vmI9v=Ơ믇ҽ(ݻc7ߖۑ  4`%AݺmVw5p`1¶̒ݻG4bYyn$V/f+|zpVtwZ UFȧt])QF kGӁ1zW-b ﹦M驧__DX1vz#AB24i"u Q;s(wݺuŌ?bǩk׷,;vhOTY^u <~.-]:q%,iӆ>sшqD4vK_3W_>ݦM;v0T&Lcڥ]Xq;ܝ< ׯuųv`?vdof/,/Y~3NvF󐯿={C%Kݵk<(_|%:[;sxċo/:=;﹎Ϝ1kXý|ݽ82a9uϛyVFe6KN>hK%LYɟ~Z`Zn` !Di+jFTP`V 2OgS駟҈#i8aŎM;|m :Yc_8*+:`TFc}lj/9.@Xm^ڙUG:*(3^9 yO>ƍtg0d":3f#2JQ\P(t:(ʿ}>?4J 3YNg0$! wy@1ɨSП9sfӛux-onvMM#]@ƫ'BE^nݖg'NύpQ'a_'r/o&+OxEEnۮW_~Nkj{9\30>"\,c ~/7nŒ> iY&ꎬ>|)ߠe޼< U#bJ>f^>sDŽ5mY6_OxQ2趼3A?{q<ԥK%}0x#Fݲ|UY^ "XedCð *-qcOeX ,WxՋMj2ʮ[qVRz*m X3`zIcqOL?e`wiFŜ]-[4ϳwy;l?hÃpr [6m0͈ܰWhty1BUڷoKs}3n6;$: 긱ג\_@v^ =7 jL(lNY'>DFF͹71y \"#H-"  aq-J.^@fPv\tIiB[)-]EMۄ3hjqn o/ !s!: {j&h'p#uQr6mdD4 Xbsߣ; #[XL` }6[ʞ#9S%Nz9#QnsgЛ {R< Rl9 jTқ|zJ˟E{8ŕ7QˮK,M>%s(t^sߋ`ّh䕓2rʨ0xhŸ, }H (92# y(;@ϝCŊQ=FFF f/cY+OG2߿2WFݿZ%t?" 8 l֬YdǺlR؛7kE8_ǙJ-[&p4\뮊". F=f?wAQS+W`Rkb& ~(n?,i^q+|!l `ZM281' ӑ2^ %~).8ZfQKy$-O .NR#d/WZqְpYP^hZjMժWa3xMg.k`]E+~hd%J`\{匸wy&q3ĽJ8Qo21>;_L0Sv \N?Fο{\gUxEvyev3Is\0~~"\~gÆJboӧ&gRnĉtDZe`o*yk}gY4$8+7(PyY?!m*UICnosҴ}Ƕl `5;:zP A| |g߾}|UxžSQлw/a\ҋ D?*bӉ'} 91'ʰt_Yc$ŧq'|u>epqBp4?Rv|RgC`1fAUR IDATP9,20a\A-9R}]<$VXQFVrt`a(Ao GWo0iL]XXInŌNIqa.H026yNIvN̸:59=p`?8oʤdɒ>;f08V ;F 2f 1Tx0DVm;P͚5Yg0PJ* ^ƒ2FԨBٚ6ߊ\<{M=,^v\,fLFp…巇$ ~wQ qP_RS֭<biGm@TլJ5&‘Y\Q_/m?ΟW6)<2mР! ("v4T"Q `ɓW)v,*GDDU.vΏ;Z*m/2[tد;lR1 /Tỵ;g bCwk*0 W\y%^;l͚l뵊| Zlڍ0{*PF˕+fWk'4رѸna"bŊ+a yJ&6 W!a{쑱)ޫKA*`bZIu91=R0tjeyOj0Uk> >]RvggϞb ]sL .bZZ5a Ǖ*#vZnUp& /ed܍6P@%Ƒpρ/2yRDK@K@K@K@K@K h#aiT------#me9@1H*x*`;Mkbn8t,אmZHW]WI8uV#vy«8D{ǎ"s#TgK>Mr9&~㴫G5.׭u.+vMmZ gH}X%gj޽gta3JUd/ǧh4Î2* a6Y`AX-(-+i4={GߧzgnV:v(B$OxIhDFcrȈ`o" nʨLo|CݩϧWLii\駷.5kNSդOD,C;6mz˴C/,Y訑#)02<\Ѩ[) 8bi#_~Ȟxf4@$A,Y|> # 5*G=o>r>v0^z{'REY\"dD@$ɒ%Ġ@V.Yt`}#+\b{OF1xr~$#eF W_{%qx-C|8TɜT2qrg dgEp,,];={v<3Y :pKgX߇/F{1h-bfAf^uFWAѢ(8{jn{n ai+{ߕ K]ް ӦN%[.p, ow;#rj 7p;HN,~;Eɓ NwcH )<>Fv:uiΜK(_ XZr>"m ;F泇X/iS,X@ ^[+:GjM\¨Uٽ{7:%^K*&iɭ[^@y)fzG _tSV`'ЇBBX^Ej#мysS|"vrQcZhgO20}~CMw@9!\TxEߌ/eG2Xl@yDؾH6̩ E]W÷\@)wz`}BBbK*AU8  ;44qnN"]D;ͷXђx q6Tx\r++LPP>}xVHaʙ3LW,s-ZL ^=<ߧ/ ) Te\ap#Qn<`DPV:b@v T]ive +0Hs=] =MwW +HEJБ00 p*,Y=?liWc"WDW^Y)`C@P?٨&2"x)hѢJ0X1hm#@%mc?BOĬ (0 )~b3gN+BUx-kgˎ*A9,Q /\x}T5@[BըE- 7V;1,͸VXAXXN*UR،= )Ēl Ɔ U"'AuxJ،Cnzk7YD~}HUft~UD)lF~}r*ԢEK)1i)^Z!~o*ҹW tbB O`+NV .yJa3R@%lJBIDV;ԩR،_`( 9Eq\tZ ?CV}ktv bk;+x."j،M7%-ޡ|R<f;_P 1Ja3ʖ->f hfLo޴:v|E)lu$6(E"+ QX;LBNi@ZZZP;2TnFm66̤i h h h h h dz h#(Πd&LK@K@K@K@K@K KtcMx{<7fz)y!wW/ϔD"o\&aI8~TϦyi?$yi歒w*}ʀ&a$pj+w'J+y^~O%C P7m&#h׭[+Bg5lmJO"x|WEb(<)Ÿha@V*xMn}R ]6Ov_%Uܾ,Xg3{.;SCňs>7R>}l磏>d/E $;zlBjxbBE2gq1ǽbŊrxh2ȟ?Q5&*͚5^z%[C z)!NULY[\_2^իWw1(1PG )QJPx WE2NC_}GUj$k}VΰXp˕+9q*Y #a2r#CqV7m\h`SF(N7(g|lpz` 9sBD  + ;앂~L膇yZ3XhRfnE6 b `Vw]Z~a'ez70W K Q>|8)'^rnɒ%>  0֭N|0@Ĩу|!@.m9;> F1׊ njӦ ; +ql`_ _FDte y摝TWD3}ۥxLyi\a~FƠ׎z޼4q_.}xp{]Hq$<ґ O:7m&rZ(TtpPEGMd/_#M}%$p|tiR֢Sn lejQ+&% "EmM R*c YR5y?|o2Vޛ5pzp%\K; - lR>dlelZ' iZ@ /y\J}05deI eb(5o"Itm fz7]8%]K;H@FΛ@7y^1YxDHۛihZZv5ALL |@LJ+lC "CH o{v0/:syR~ )xj -4.F }aHe@E>,HM(K|>u%wD_"~! 4弯N>r{vG_$ij ܒbt|+|-߈ g}=.g<FKa)֑!wK#/K|A f8q/Sw.<0#\ܩdnҙ_ޣI'@zHOI#exN] ǽ/.lOYrp>7%™-t@" ,AѮ{ K#Hy ;ݸxq/CpwzBsSxw | >t~ BOבPэzP@h^ǽ/.)ÏOg }%Uްo@ǺS@dx_[#L 4ځ wǦWR:UUZAG7Lk?H@H :(Yf`X![%3FY%on pN!Tw\G8 -4w<1e^͑\u I)m5]H$;;iƇNHK%so:mJdxx/b2qt4vr[䥙™ s%k \;Nn쒝 j6C,A (kD?𪄍xBudBC{Gr OGbN[T1≝ fcHpFGs9|*3Ay˱!4/wOؕNЉI@ZHK9M's~?\Sf _9MGקkw9^cԑʋ^=^"\_h xK 8R'.;K .[йn MzK4~`"nUmڍƍ!z9te.ЫT.&r:5銥SXѿZ%.dr=ؖgEq+8wytllHKv#| W|R@HNNWiəmwt|Z(c)q(~؋<3D}clonĺp8븈 {\ޜ`C#yB߿z(;oD,Jy~bC~qGy0C,'\NzMSW7.+7 ~NO舳gP2NYPTWF`\Ա$}`_C!:IIgvOFl¾ Bb\3p!KB떍 #,]VеS(f82;$r6 H!E7r;>_@vx܏g 2|!yoS )Vk,rpH1T1bmx/E(.93ҥs<&l^fd}(Srpn!ǩ6gw;eZKWXr YBr@n&Lm.l=jM%Lzoӑ#GD6l@VZUܗ+WL:3;ʞaRb~ 9/4¼e-0*k)|oQ3aW.I҇ ]^?P7{n XuqOևf h#HMNJXgvЩy|L[贜7?x|q:4]I}'^RLO_KFI{I,YB6h@ *Uy[@uֳlqS2`.E+rIq 4.m#svaЗg7clg/_w\l9CznY:'|\9*k ]幾\\f_q&YsYq8Z$Y8_sRAL_JaIA IDATcOKG4r ݃ I@A+7.ckqc?tFTs+~{`„&@<{믿L ̒֬YSp|/*G1,rqwؘ5€X| 7"FPehA!QTc}pqyBvw.CTJ^!v<@VI&&MT{xlM$yo:HF=8V #h빔;hȌ=| R1}:~u}K=胔͝y( pٯLoj( .TER1HU|z'~6 AyWA^39agnDH^#),ٯ!M$=Ӑ{XO}ϯ fxӟ;@f@ow*]k(C4;$N,dɑt#}* h#(Uׁxap8q >CBK SK{2S[@PّL-#;G! >%D>vݣ6/S7~^+y '=iy4ҍqk#/v,p\,HhZ]+<~rdYp8}}U h#ȫ4'lgK_2P̟ Z>eV+z k@:H 7|0ZK}K@A겺eLLgL!N A-gZZZүxF7 ]{H#d2I:CI|\Lx_LM)y֒)@2DhG8D3iuL%B8>i o<pq8 3;Z])~dWV"էJ: )AyJeH>5SZi!@!-p$S(D׎BK@8$U-!@t6CAi#gpvGjA);^ -;@~n:u(tEK h}O_>+qDɎB)`%W}%pIbmt8HU2! }qI 1.wd;6|#WMUK@K@K@K@K@K K@/ei h h h h h FY|C֜)k֬/ݞ8q)$$Mk׮H")_<ٿ?+M߷o/_%=8ʒE?~pPНQ|Æ TX1%)ڵn%\OΝ;GS'Odq*Q1Uf\Bٳ'ݳWR``3TLSڝ(ŋ\vMwݕsKox6O޽{B J,:tJR;] =p-ЎyONȑÎ-Sn|lԩC7nH~hq( &YFQhhR%xȓ'AAAlekǗ.]%ׯ_Xʖ-.\ B;.P h+#d ""i/'3L+ te*226mJϗݛfΜ),cPWFU``@"i):t;@uu(3+W.iA c 0tMxRg2!v@;!+f/,X ܓ G"YYL?wܶeیACC19suݎiN9nJ ?Agwz7o^;T%h` 7M @jբwMիWбcǨKNԣOо-U~n{>LOVQ#G9s_h4adC]s|]6Tn=֭-.*`ǎ@4tpA}W_П+WJGsΡ)'Ѩcx$kooذG~=v,}w/Q^iN/?׭Y.?0ƏuIQ,t!= "(`Q"JJ 3Oɨ$=Nrwcoovv?ݙښ꯫kzz1rU^#(m۶vytkG֚~Qᥠz1~Y*[,H:x@T,̘>\~A?XYd1 6}0z U &Jv5^5,&;kբ7|+,Nvxƍk+/l(OZF ^uߪ@8>-Zt7d_}t͵;N:q7Hd:$i<,YFz_ۇ-]|uΜل>1m ^ da!繵`F#@xᇩkר`**Uoګ|SƍÿJAodɒAH!tJ ^h^Ĩu6A9HIy>Wth I__TԢEKqea3GNhA9%PVyu+Gh2'4yv4 /m9PMP"E= &L<oj g{ ܽ"V?@N9<z];m਽p 8+N4i^JgyE͗(8i8?a8ӧ6J(p!*W1@mڼ"yvαXb:[P+vB~.$,17kl7WvN:t,٫v wQw^-x^a_?+#n;+h. OySn-i>ѻwT/+W…?P/͝;F  V_*`<5kС`6089c W^D<|忩{"6mƫԣ`P`fAv޻裍-SxGl c{紁-& 6p_k G٧w_oHv~8~+k3{/o>zGUfLN'OW:r[k#PٲwтQ֐h֬+HwC}6jl֭aмsTªhC? nՍCz \0΍9Ԧu[ >QmܸA{.X_ ̄>}Qݻ>#hQ~#S&J{V* V7i{YԹ/_ym!,_^ׇ߯A p h̘1H}ۙNS6lXOGywܩ$n>nTl,W%v6WDMԋ~Iِ<$1 w~np|Rl^&,fr&Tnj#j7}ڵ3Qo<;O|%~UAX< P\.AҶbr3b2Yj7)cX?G췑Xʏ)J.Cݢ+ aλkLοjժmP^UܮUTM$./dxwUǿ~TzT8t,6->70WRUD?/^HY)\oVh1TՉUJɟ/8}׿ٽ[L9Xkhl3&LLƝK< <<ԠACuٌ?ԯw2?p]kּ9qU@8d~'V&P0`A@~_Z|;qgQM{23z;Wn3Pŋ~Vx߃|r !pᄗ߱lf'ŋ)}N<9' 7oexwڵTn=5g?@<*^zy%ݢe+©S'FXwӦ}B}U1bƭq`PҵD?w2 *wL2qQQ=?Ue`Tj"YU˧y#T6.^lOZ=C]׷7ծsKʜF;Z?aѼjo38^y%jҴiwA>ue/h-"O|C$xE,G/؁*<=4lHx|+3gΠYOX$'~ЙjHY a2ƞ4[T駚^7hxǐXC+v]BϷ~CW=xïg(,tlIn=X>GWIsXW>֊lqcEnƏ(Yև_ *!2%6k"[w6c-ΖDJM+.#,3ݶ-0Blz_HFٞ-cX,ESl)VE"`X, Be]E"`x <*X, [, Z$ޜrFvH템ILdMlY* 6["`?"xV Up+HCAA[R!/]Kxo[OҟɅV$XMzd>Md=2 9,p<, ~LusI_$`R¢Ff!LdC)'WGPˡQв",F]@/D-5I 7 {?73ōt[D dbC!q_;LLjY,#l5*q?]i x{<ܑOqF0%Hy-Eʵ\d0 $A+HxyS׹.2{Jtc]*kb^xH셣f,PY|="! c؀$ъf-gHt+U_o$>?c_,o⋠|l/MdD3qq4stZ+ڌ' uExE[kf-Yf,l4ߕyJE"YwsllEȤ.)5`oU6cذa1cK(G&V*s( F,R{S?ń<qrّRʪ&`{1-(I2mIB[ۓ$+&lٲA1|rYFH^@'sܱ@0tSujEBLMJd78D, GI/|J6?Dcs'~A͉|p$~1^v!c+–6w]f\e"䓏h@6yΛ/%;wH͛?Rl3f4%;tK.$C1u|V-h5Kh3ڵkKo5PHчi3h3@ڌN 54hfΚ-zTIWyy3mVC19+rS?X^hۚ mXC1żIO|m-)n]"d01blf_&M"hѲ6c?_k]juh3Vݣtlm1Eyl4xHf̛7; {g~mƸmW_+ @!!R]X#Z{5>S ܾLJ{6 MMno c׎گ58y:R 0e0{$$^T&ޟJhA y[WE"`X)E"`6J+u-E"`HSlۋ[,E"VVb"+VʯeQ1 ^oflٲʌ lȹY1[*ub˝;<ڶmnukn1yО^ y(g.zCqo)7B.in;jMD ̯޿0E#pMdC,YvO1\)+V ЊPy+^TƍUy*T \hA|B̙3i|BjצH䭨?N^)g3 c5+ƏO̪Li`N_+ d¢}d}?xJq}?[l߃V%@2\"k rU4{MGUdml`EjvE"?{Hg>qH?~V7o^| Z3h )&`-;-[.Cf`H<^et&X;wN:)ҋ'sΡC7ϷQ3f?`|ѭzOb\grlw3S'\֭]G/ߙ_=F7}G.GٟtFg]4%=GիWOzO?D7mN_u9Ю]i3ݫXvt+ȘdNj7|_P!seKعsds4'O^,. ˗QÍ7VP>sAJّ7o>;ݳ_T$w`ەe&*wYȢq_\9Q_ҥˈ%Kف0Hl+s(Daby,ɈZb%wƮ"0]ŋ?S +Ȃ@"YpeϞ]$ #aCr"#F(\JUmrA`lc~z5Hd2/_>^ȪU! xa*eE"`X,눀 #RE"`6 X,E"pAu^"`X,A '.&bH46q(+rlхyU9 }<'bMd:^} .3gC5io4H[% /jhS𦦡1IDATFq[>JlLL O]]̤S`N$}U/8GLU4^>D7x\o:@e("od%"ag" P hœTrْr<:^ )o/3_C?Ub@x[Bq>7ɵ7")iZ 2Xr90%@J~cP42(Ee kaů?0[2~v:~)ȓǥ11ڵY6$_& 5*shDD6ի8A]ʟ7=ƍN{UڵpIR3gNsF߭"Y k׮UwNlܸA%CBŽ~X'> dY :e'fX^^f_\MU9"wL7qW$. GIV8\~]YD-Ȫ,[XfJ?>\JInN_N%|+ !H_ǒ%~ǎ;wꇄk,`# RD$ ԕիVQʕ)/'7L,JxlFVDQV%_( w޽!,~"۷_g>>SUxD v I@4K3<@vm#?|twRa'I+r&*dfu]\`]H4TĔdT}pp.!KK]^rqfX]STdI-$U:'۷oɞ`>#d5 D 鞆Dr/OTGUiu%SL{.Q{$獜kYxȣE#,xEd-JMZ0+^\$br5J4m7(~Q r ޣ.h.$HdVՂ/ȹsfS=t+SfZ͝ժie&5jف&Lj<ʓF@8̜1׃"ڌ3_VzwRx|LUGVXQ݋-\H|:k&Ojwڿ|"ڌE~VfQƉlՖ͛DD6㡇f̞= $]) ڏMxe@Wv,V4moDYf|"Y\xل%Ki/6cF]b9Yob%zQS'S&MD7ׯbZ'(jeX,E"` ` @E"`X,vX,E@ 4E"`OB+2JPѥq,˫%F{?%7ڒzxJQW3EY6O6/~ rl*6o |kFM[h21Jn\H+(xrŊ4gw3_da^ɆZ  kb( cRAAUs^%5?eWQ;Z|;OsNKd(]&90_&u4& deK CE-4  PAKU# ^pA@-TbEӟ[kD#F+/[v.J Um`ofG=2G {5]<Gv,dD?8.G*dnñ#D]ď^ƏG9'(j TO@ǏNM6j3bpCV#@`IN:JdQ3L1iQB#n'OT6o$rHLt_!Db 9p#fd_-VƏpG#4udEEKUvhWd`}M/>ox&/.k'NI&R9o׮Lo'۽G˖-SǍi48pTR?dX1Ę׭SMow/ 5a8ʖ՗Ƚ0a<,X0Q PIrA/4k ŋ)q.7m=٨Ua p=vgDd'MIiݓ'MROWmvTj[𜩓嗕j?CY|uʰo>Q z}B=壼FOpyTRe:'#!.VtI}Q YdHt\Mպp^o3қ#xf͚,]f2S&׷"k֬yb}JNǻu.ZXru`_̗OQ{nzZU:"k |N h3m* iV3͛7fEvb>(ImH1%ȉqGEHY !y" k^Dѩ+L+PD1jH\ Eh3W{w}b~+ŅW@*-3>+ӻ'.͛mUd3h39L݅>[Q?ץ֞Re{9^JZ, .]+E"`%6 fF[,E"p ZX,E , (s50NSFS0F[R/1Ue]F3QkP~gCjY~>/ hMLp^[3`! HN:ӧH&Ǜ"lb)_x5rah DIŨn))9bbbi~("odtl71YJl%y=ѩ o#"H"L.6.ڴn-i3_&y&tI>^z&[DRīӧ}ڵk_ {߄|cD\[lO>Ym‹b8{aPA}IKֺ6r+E8u Zn+ʛ@MX!?d I (Ξ9 Cr${+AH/^Hk#GK}{9'gXZF:pMllTH+X׏3bFb.,ӧN,eŭ[A9! k( $v`A9ۥk7G>]G=Ɋ\,'[-3#h' ÝD6hQY"{^ݓȢ:x*kiǟ;(z Ξĉ";gؼwW"1%~wj7ݤcz@Xj1cYWsVǏӒŋuܦg#x!,|X,DIf`Y8ţB,Ї+/B}^\?tuF/P͚7gѫrwT󢢢h֬O)O=2xD %WOrVp|g+5p[CYp'N<|U/7?zs̙y;p\,˗?PYDP\dRZY~Ź~f\>AˑVAFfqW%~BX ;\&sGi;f4tP==;Rh*! 9'HŸy~CPFHO㛓̙/r_C S@/ d"້Da?ŋ /sRwӋ! Pȑ 8SAd5>(#i19\}Aw{T'|囿hP-({ C%Ch=0&&xV"Yap3_˹rRɢCȜY&)chUl7;8qejead'ecp_Ey$m26`\Σe{^Px+Al`,@vpC[c}h3^lߎufۛԹwe}ub "T'Fh3^((yf`_7Xp |C-nNo k/mM={f4`ʄƍhmmƎ?biꇻ'xƎ fHVELhĈQ_ "$ZZ4@1)mUh[okư'SS-[<̈́o$c.о][٫6Ĵ׭!C vyuxXM?BG뉘Ey=InBPkߩY,pFe%6 (ljX,@j"`DX,E lAP45"`X,DAeX,@ `ik(r^-7[,S>2H#Ϛ-IgƳ! (4Ǝ\=kokM2f͜IUV X-׈rMZ`A 0mCs~>.PwqUMllF6eDoBWt/YN>Y? #?8ىOP@92k 7o'.)flٲסoQ[m8 TR5<3?齡W`dzIJeRV*Wg8 R)RL۷og٨|'`_R%3ɿ7 i+T܃oU+~W(TP ٵkʤZL3ɿB/te߾}ꫯnz!NӿOd6 0]DŖ+W.6{ #/0AT\9T)d˖-9?&+$'W9J< 2p~ ۷)E ]ƠP<aMp]"QL$X(L 55UKM4;dg+h"L';P~% =IrIܐ`-S?` ][)]4,N@O":h*VOЇwq~ {kժLm4J E"`X, | ZE"`XBB+X,E"` Cn/hX,@( `PhkE"`X,]w-E"`l `mX,E#jYaIENDB`ga-5-3/python/docs/scipy_11/papers/jeff_daily/image2_crop.png0000640005473000001440000011243211576434157023000 0ustar d3n000usersPNG  IHDR׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx pHYs   IDATx]|UK zX(6,PQBb,(6]P "T D:^Bz=Kd/W$~7ovvy?=p,t1annnnnn / jܠ6w;-----pZ;7-----b 222 00){vv6*yy9dffBHH*/1899FQMLLPEbzz:c|1994ibdqM6HJ8wo^EȚ 999аaC 9 aT+W\-[2rvvfm|PW э9tk|}|UՎOJO? }孨O>OGrէw%6!r{!ԩ}ysβt:0i $z㟿T`jZxyzym۶t*IZFzJeB{$TH՛ErO?]uww%µr̚)DlNPn d$`УgoHONB (AH99AW 9?jٳg-beΕl&ŗccbrxI׊2߹K78u,10螻DL%y.N(gISH_{k7nÆRYɣ55j/9P#%6l\R֯pϝ9P_껿S?sV.ڟ B6XEKuP4|5  ayT DD;wRgbrtnCA.fsb Xt)̞=[Чi a]$yIJH=4>$ɒz|~gWoha&Au=  zwprDma&} '9HL-/+S!ͽp*]S#;@ߊ.Cvn}':trU22c xwL;Z%b[ZVИV ꫯ^7ydo]3xN}0edc)YjvV,4 IQ~YQ62B:< 2 tl%'RHO.g^!0fwc`ot*$'&%`3aй@MvGfCn8.]ǽx  K` 4n[E #^HUCp`HUGo/CJyx)WIٰH, ݤ :+J`̦({aMG G} p)_c?U(;b :-Y%KS–iШcv$H&Wo*hG2.l}٨¥ 9-̸A>/A~QHSqq1w};wQbrXz%n^[&@t\_5$Op[Su7_h}Rz|r5ņG):fv©:e%"3KK;,~ *VyXY,~:+p*) c]뱋GԲpIpFzѕD$F4h(;$e#wvT]E}8 ZrpwU &>};dPvD]:T9.._39_~1^|i,JTqʱQԭD# H; JÆ: :n~Q( _x/e=p w˪\Ndii@#b칋w[4tD`9~4~=Mm[شxr0W&UXލQc֡cgC~c/7z=Uy3z3w C߰>|FЭ{,x*]BX#"/)vj55`+HS՗d @I(Z.y_^;n#"Y] Ō] ? ]yhM#YC8#M*.rF4YaҨ(أP\ 2Oq0c'By'NOл5ud>ihsj] ~fڵS~2>S,*=m_E C..qiCA^.0n팼Rk K[T cZyBsgH+ c94Y]$S1&W;IL!Zck{Сc䊽PZcN'O0g[n nPzv=d$e ]&NR]c69= r Ӎ`:I|4Iw 6 ZŋЫW/p K?NW %YS W Ӎ 2-*_^I'Ժ}Q9kDaPJΊms}k|۶m0Mk )ئ}T3uU-[2 ̫Fu/~PSd siyUx{pǩJ%^֍G㠹 Xk֔ϝ;{pj\B:3{5S#q %ap*j0fːĪx !hR@>)QAЕ_NzP\]${%y)-g}hC04LV㱂4CRgF1ȉ= y:R/ +?tnhZ_E][t/ZӐz4mp8䜀n];C+,ۗYɘ<}*2c#n1@sjG+?NY*4&83 ?& E~go@Q.];iQi AXHW "S'O ÇteB|h+Imޢ?QW-w5Mcf~@D|&:}55x 0kNseHefLôN;Y07Ly] 6dq>{Lݫ7#xrF敏U{4gOSWᾮ|W5Sƍ6~2R-rz 5fNl9:SsR"-bQ:¢d0J˅X6… d <xg͞+vq@A R#MjlѡxprեL&U.S@ɐp']Ð,R\-h|[Ay=b3n"΂`]k,{nzȐ 10%i:;Ca/m^P܍JJ"سǶw `g[$l2@zvö1zmS"3|L1R T+a>On :oj, Av 6&!9cK`Wa+n)j^r6CeA׭+B@=i+[#:]B=#:4!b>f%پY(cʱg Ha4>켬Zx' '? &_6/Ki4{%\p^U5oj} Uf6bC'* "Aψ0XFSyXG%Wct=.Ԋ] 2 1L!9fh@WǖÓ<@+3TVVVGN&%А29cƾß Qg.1]bYb> /FG oIHfivT;ʐsKN%..$TK)Fx %8P+t.NLJP=q$C~Gm۶Vjt ?Y74 ?& B8 a/p"AjK AC;Qfzt*@bG$5di{k&#MG1sYm L cl%!8W~zƷv9S],)}۵kxOaMO\8!; !!!p .$f'q6J5NۧK0~V)D.t 2X.sN$0BSΤk}"!\t^X,#&"4Bk (\ۼ!"+[F^ޔY (- M6cmѢYjZpsYx!xG`S  C=uHIe7x̢`0:9D'NFhusV~Ie <4-֋6n#e#g#kX >=Sīh [1΀3}yS21 Vt{گ|L?t?Ϣ.Kt^0t9*&bvsv?~U-H^7`/XAA~Iu e2cU稷ܧ"'\Hybo2ێS祵 ' sxoBl*qU^JzVrd9-Uc/B6kFgC7~UThrݜ  y\-i\0-SwSuCt Q)>!-ihi*l:Ыgwx28Sx۴=z KpF@j &7( ^o(WW)i3_dPbI|*R*/1mlHuZgp뭷TelGf'4`F,႙X& +:M"xbZ8F™u%ri34,h,W#wb?08,4sJDܱkbWqC^-O8Rr_wque%Z!zɵ' |zNP wuS ya@JP.O^ C˂=^7S * ; DmQPYħd 2̯)kdϹ p'yFwn,;>JqE!ml@X;@A${8c]nSTJ q?*~_9'.,,C7tj4>YUj2^<2RS3)qXa'%1R׌6ڷ}uϬrt:rj@uL~Zռo^kuY2rRDmW˖-ct=aXA"^ yp1+r_{{DONWmSmlKKMw6܋q}%(۾/ל ~[}A^n5v/آaۆ۷|kJ2,mܔX Ya=D11WavC Ɯ*C6vAKK HCWbi*̚Ms!5|%<]wݥ8pU hϕpFmv#+u{# |_ǤJ'h<cl4Um2SjǟU>ڴYۖmANB|CSvznca0Ï3ܽǑHPW t 6֑o\79>^qf͚0[j D-DBBF{鯰Fm9q]*@wKp$B;a1uRP+(J!=@T<@4@#}CtfJ|[Ω?B)ԗ@鐡%J oG3c AYp 0 UhիLDQ=8F7nDؾ}d d==aw!h\a5J= h4" L3K:G }iɸpB}SOԠh8wz5_RdC>,7W[|$BtkMH q`GM#NE$ʜкu٫W FɨT/JBDx1F"] p3u^4 `pW "fbL~336ѴK ѭD`B.4!)]~y~V]iA:I0?A&K\ 1v`ḧ́ĽB |;r9คD4U \3 <<ܸ(h 'Cu aDRIIICnv[(}wQ1m $ O)Rl}SbBz)& Ez^nMjQ*qDs+TE):B>T Lu:yRzCͤW 5r?i>iy.տX: ?qK|U T3Ua:},SCE0lS\[@y!! T*aYN8]й]|Z IDATL}20\ݬP~ OV mZtfe _#z w *t %'@85KʁUASӋyq"ªSCF.933!ԻoPPI0e40=zUPPq<DRl`=q؉z*_)ŭ ˆaHK:hWCE轊̈́{< avkIWt()ʹ1Hwt@;TW5+)CwacBg`]D@h.^|&cu0IxS%µbh޼>[lUuвEsxe,K50 VWfv ag36j3*_ ܧO_`4 OC#$va?a6بЅBvzd¡0¡9#G0k6`o9|%a=i0PBK@I16As+0U#OK-[Y׸` ٳ'4;PҥK`rc6njV;x>U^Ma,bA1B&vrbI몖ȫ?L~0h3AS^&+)r 5nB/9"=^p3Ӄ oJõpa K гg/1h96ٳ׹>NlLPb qjަm8Sk%b6|G %3)Ƥ2hk*w|ޮGgMyZ`gE-]{EY-*q p p p p p \N5ظ5wjnC.[[[[[wDt/;ɋp8 eB:sV7`+VڍRb͍rYYD{z뭎*m@RP~h:'nk,;v S|ڵkmjRB ^WD](7<Һ]ʫI!ߡ`%5sݚM`ײ}/*5W@кqwWz0{+:ީgc{Ρu-K\0엮BQN"bx$)mڴta6$k ЃGpKؼiCX 7x;lHR%@$A^ Xޯw|p/J@ڻ I'lݺqD(0 9XJ=s"`3 dQ.'q嫗OF[0UV1Sc}òeE.k4aJ`;|>ƎE ;!uipHPEeUe2@jy%AH隋PFM3#_VVk#A]Q4ߓ-a ^(|!tPde9*::-<*(AQ1л ~ 68W1V:(FDJ`k=wAEE9ر|}d;j`\2b KNBڼPQY[ :t[`BtkX/B0)X6.QIZI>Dky"?)/f/D-T/=>RТ r`Eg\(;#f]\2#)WJJ):)i@M,BJgN`s0$ !::zqyy @S2.'f0aX OZTTM1It >-Z"[!?6)Q/ 88XU1gIćU!r(ܳ@"o0;M h,gg@ eli6xelF.`@JY-=z꣐!\xZu|RV@pBߩPRU~gлrEw%S vUi*ߚcZ(ŏ۷oNJȂ^PU@ˮ|S)wsl}Ye!4h\m۶vZ|wΈbq64J>w)EI31jW0L| XPnE]?~w$k׮pJDK,Qb1\#CA iJթt2 0[UzRRRBLZƱE.~/\ p ,Kw}|"lbȣt!U5nXMFU("3p p r͚5LR$=`Rt=zOcD%bLW^^.PVAS˗s!w$h}MM iA ݈#^#M8ѱ[r% >\ht:h 4GόhU"sq?=/7%" g: ^?զFX``jݡ5ٟiR= G'P2^j <=|(( )={nV h0J;KvC K[JԩSa̙Ld]^{C|)lŇ,'xTa^p"MеMRG{\Y?w^m>RgY.4hUmH~d_w(QNN/Yf)SLX6 >RDSLiB4n~$˜ܦO> akg. <%LF%ȗv,d'qa+|ᇒFy_yulqtnsyI'pCNU_Qr SX嗆 CX㦲N@O=ΣAaR ʗf==VeOG]n"UXt1|7{1?5A͛܏ÒB^mMir͉{tlo&@̝3;#qMM2|̜5D9C&\7߬=zfD ʋuC vtp a.i(_ ZAʊ]U*h Pr x5-.h 3Ρw@Xx$$$$WsO>SC  6m&Ys&atStșxehy ^y`8D&GtT0p@Cj&5{.0w9ph[5r g^&/Nw{Q%GTtjB@nh{9%Bz;U|ri@V+*̜5=g.еKW)Wu܁1WMIm20OEi;tV2vF~\xGsgϘ0[@V ?>P8)! {Kؘ(L;mQW5 NHZ kԻ #PhQr(3rr믿ers;z T#\J]BWjh7|qgTu{p9XGf`!>>޸XJ`uѸc䈆,&>pĂ ٧0r tjK`Hɓ]{NSBҴ>عsL: .HrTXT΁ƍt--}['8@?(l& ay%+ZH/Ύ]!?[q qԐx@9@ԫk_T:vIEf0I^̘iK8*&K f7O+ʵ~z .G  w&O"l#r ~ L:$rT?V,_;z;u5a}Wa0n8JtܲHؘOْK?{@Ѵ iݽk!=;'GZWt1~5P-56.F ԁarDy(rӣ#0ǯ+A$-J!;5rOBluQQEd\pl7}ey! 4/A?jDm#>swBdG(3M=(Z Q5v̋>ktC:)/]59>L4YyɮaEw&ਝQGh5vf'@X^z>|A :4OW%P\dSw՗Mׂˠd$ B{, i+ 8Ӯ=/-xQ۠/"">RpԢ*,E[,zp%.h\ j򱤫=ba3O}]y[qoXCm]k]S q p p p p p \Nܸ5wjlB.[[[[[ڴwƵ+ĮEF--pZs8FV9*(c*9٘ύ;[6.ڶcJuWi9uf((TMGꊊU$>"kۈb#|ذaTԦP .wdՖM|u+blmh@`HgJ@Ǵh最J;)ɶܷyi(6'O(ն]礸Db՚K} eU>bŊ/HDw2\,blذ^D <2l6Eqp}1e&+w=N$},ց40絣 KW\Xkp=vS)VXg e(6&au"8.RpǝyßWUh}VD:!*8z?TMڽWT3 WW_"to:m^l̙= O~h79[lTQ8@T7!Zz )N6Efĭ"kF7~zUI%@t۳ `L1Vt厩_CJb#,_4lؐ-3NY=MýW>R<ׁF0cR|WgJ\8"DHz-Ƀ/(qֈXyiHX/ ڸqRD%4d"{4ċ I^KQl;(*pG AtOzAR(%3 /&"*" +)V,e˫$_l4 [G\hliBE=º037a&tr˙y˱!\~5M,JO5𛯿Bp=dQ;Ydg)f!-D6 /rA!0Yx5T},rdu*/ `HW8L/F`#\Dbx~7Bac8H588 bbc$' t5:Zj.u*_eRPdggh1[ qk„'4 /mR*56}Ii88Ϧ+}bVjGAv&{wzNbw1R&?UoI}"PW^Z>uzK[xMebȢѫۨ.J Rtp!$ղYMCO<^PU%/?"DՃK]6It($]De/UI3IrBc(3a?zh%D +[ZC?А&u@/#U+---ʆ3C|Rǥ8eDp#{0xL' 6Y~`Yތ(J|u.kme{¯9#_3 ˢIچiw tݻ73l$ jlb'E1&^-Ac @JN L"f%9{)S/5чO>΄ު& .@I418\μ>)N?@a:/r: Q iBW;WեX9[v:o&aBv:/.Uk޼9 p'5ECB0 5(yMOԈbwS1/_x 6wނ N E~Pcms~LؠY496 k}HNH}krΐr.˫3dOC p'Es p p p p 8O-----PN@wy9ވԨZ9LNJ9u!܎uQ2G@>ƍHZm"![aCE!fUKL_cԋ#2eZ"^UU\[fE**2mkkn333ql,WӢf[[Cu-m>r@Q"5pp{aJr.VRMQHoi*UacacoܸQ%e+̤,HjqIſxl]ser2 1nYeӍu̸ v4**B3%5qUL Vz1{wQPݻa؏|־n?o[h%zPJs6(:rMsA{j۠rjNF}A";wjO n'$Zn-G0AH̚<=.F$jX{ֆsB+AQdu־.D~XZp\폨&84hj֒fD͛= mʵV굓@0m۶JATg s>B>J9_̟7ܧiaHp?x^6ܶ@~-\\1rtd?+D#,$$C[o3h:ʶbPp (I!99??ZbyEH`kDƋ ad"_XgfUj/G -X$ &Eb /ηȥmD{ R_ LXpI.Z0U C!X[\3OH4K(" /Mdffop:Q&΁bu]baHVix ~[gnQ=FaÇ3O>c3 TyYЇ"#[ pR 9rqh}T)ӦBPHWJә(i †׫5vж]{-\u;X4\ouԌaԇصbpV,@;E@Ҵ~ yT}x"(2RɊH'ޮUO1p5IeuQW)zH#ۃ\?f~}[ߣwyd/!=Jw :*T.2 1GLȑϪOPnj}6W?&YLA mbV0;%4{חᇝ>y+G,yC|4aA\[b`aB 11BПLzz^ď<-FHW9^jB#>A9s,xyI8D"nOETu|)[Q#MD/)/(Kbr  ]͞= x /RzzIv%}ѢLzk_Ν/~|[J53 Ԙ,|?1TU @9$$F~QpB4m*@u늍@U^ZiFPbvR}Whp%>ٙ^Ži, (C 92ԦMpqB3љAʶK-Å/@ȎIvl4خ(joѳV$wbn{C e l 2!ҕI^$.gRqv=vXdkr1:biegCA/U֏FLFG坿z5-lb$OhaYʍ:9ٲ" E ΖQ=aEX.)%^nGN wu}xg]!5:Qp[@+el[[[[[[-~8\5nnnnn󚀺Tp\ c -EG$VmQ:D"TċW0H}P mrj*"Ֆ\@X@q2W$rpl@\l,|So2\ `CΑc bN6]Ÿ )tlhp!&,ۏmlLzmM[i WpԳ\+B H8@Ǿ1p=4LJ9KeJ+iyRrssO) NHZA)hLWVptK~ifN,:1;/ .Х"}Lww- }&ZjHv2{ l'*Y'TJq(nI8L+6[Ͽ>9;`[>{CA۶mؘ4U7|75|U,Ξ[ti ̙ ##PEP1> xem?7|3kClL(/~G=qkd-PZ,FQ9k"kmbUO`?6ر#Kia_|¨QySॗ^Uh MM5d*%[&88pc$ݽu&@-C)-D*d0Lvd0S1kF+|8ZԕUV}Wצ D%%`5h ࿃iJw% k9{74pTN p@v)@ZqF[l 6(! /"֯(15w eG\AIJ6:#(.6}꤯\Kh /!(a捲aqM&"azIWZ$K:@ CO@QzԓXx!'6r6XsYe U^Tue/t:#*Jk436[͎s­A$_$G}|͟ m۴U͝{Re!F =..Y&Cr9ՈP&?SGAJt 6;wVu˖-|~BK= T:]%3u+^ %oYïy 1L<;udvp%HiSrUʗW75.q,;F8n [k+!#$Tj~ͅGIv"۸H`d AbOiG]߇]|Zl)tFf~{UIsQT͊1sA *li- clk@8$߾qxzZ2UNxxQUSkx Ͼ  !mJnt-JW/eMF܊*--Nw BдioY3W2^PL__z05O^!CoƤ+5;( <~4OjKF`/s~C*]!W>'R<a[0Yeà&z.&"U';}D7tj[jdYcSd?* jtCCG E~j#TO>-"-Yt~I Y+ɤR4,-:Gkcbi9(x4n8A橐{ ƭa$zxBŸN>iahIRDM0* QdVGm9Rtc%H]HW^yEa3f*kslռ/4!fuN +|+Ce e]n<\8pM/n 5=%>Qq@nVea>D9{CYSYa-;ЏK;M֢|V=8bb24 7%#g9h MJ->m5c$ӎՠ0?,w7zPhez *Ia1(kr-$4T9mdHY''Xes 8hJ$Ў.ʯ[p[poT]R+rnڴ@I(M=oqm:T#-MNTu(_逢;ceYW*~ݞ2A@ A . -H7ߠuyp^[N~ (?p ]^ԞnK ԭ\ A3w~f!'p ԧ2wuk[%w.(1EJxڴwbA#>uAm^GƠ ~f;a_ =ƍjPx p ԧ*8P"C5z`mFPąwb˧j\H0ʭe 7cTruzQ A[,+@ oƥru)$Rc[,u/Ứʦyʠ;6wŻ^7 4[>- T$rVkѤ=k*e dGX]zǔ` odP$46c [>,G`σ{hy]8!ks ˋr  ՐiKB)"]|A-/D7u{.>]0?9GFp Y }`(տ12g{Ҵ}?(˴MK=ln[ ~8F?}JGOA|P^i8kpUQPi/q&Ϭg&j8 ,{&P=̅ WÇ'4HMM>TL WDuPr‡Em(c* ~J 02h!{Yn2$ʧ c I gdE Qx_ ;^1B<(O!%q (Z@vR6N@SғO>)@.]ڬE N,F#@XjE°{&vI~PbѰC»L#x5G#~xm},Y!Blz6*'EBa(/ Jvk!8oV8{ ('B5΢)dRD(}yY(:kOG㐏}Y H:BG^S'ʢQuc Jɢ]ZhS:H.>16w:8EpHIImbcw^Weɵ lc!_; X+V#d RW}@kswpQZe,ΏQ1gWN , mm%qp VWzߓ{j*:$j'ЊC8ᘹ*"iz $xE;!?W(8./@#ú`8+=6۹6+!u (^Q"@opöAZt+.:?Pm$ ~v,Dab`HkÇ [-=P%pi2v|S\OI!rc i>]4~-P[31L5k<{aa_D \~A;p'MI?܍C ?3)l|ݐ̩,@=!"T >4^h6zᜂAEnAX`0?,NCDa`\Xpa $mۢƗ@][08__4oxVs'Gx޴uhtmo~y_!?,@ c)H?2w~*&a/@Z@ 5`yC IDATJLwm)ihq0;ċ P{W0C٩0zm~-P0XߎH_o F /P %lhا:6A;4p #E>mJҸ`Gx! GA@4p Կ{<#":NMSQc]'] ӣ%34'ڃX:?,@aM)9uzi7⥇Jt p (p hjrL =-gR|;?qTgWKd5ےe7 ĸBxI $ $$S10`BsȽIlْ{_w]jw5;V{vwsn3wf%Q{}0@]; פs`KAߥ y9}wl_$x6UʾO*KIW~W=U{QVz,EXA zO{d@2  Hl @ɀd@2  S3e%ɀd@2 m@2 (sAbkFرf͚% =%IBBB)cǎɓXb644@hh6''w:Z[[ l)T>"##NuUI||<~{vp}޽p jj̿FnkkӧOĉj~@KK&ƾsp㍝Ufg!$iLeggATd XuL G2}v FkW^YI74􄲚&t)!4L6<.^Aq!2*Z͜˶9`@L Ƣfh,6%''s$@U:(//K T+xEv⊊xQD99`8peu˗C=P?xc?]pݴXG9}OaZZR /_4IdgN3ɓh`x$Ì#Vmٳׄ]: 2vsP]SgBPpϖ*Ó #^kk  Cg` mQ9.jk x FƋxV^ Ӧ1N{ ?> Ja8i_=rX yEZp^Ǣ6nNY۹~,& n1V,Mݻvi1b]E[saA8), |>n6\,>)+Cg< Z@uP^O4U-Hf mA! "Fݢ]* fN߲s%KFG2ժw-Ɠof R'䓏ņ満Up 7~-8Hj% :Λ4(++_O`۶Ï]hî'u/c~Ƀk᝷m/b^0{Ҿ ?y}vS;p?Z[am@P Jpv e#܄X[A(8in-Z?`@,:];`$Bg0+r`Oqd?jzѢEpb.<4q?_e튰4}_86sq8/{c\~~WX\+_^|g &%?^mټ "#] >VݎWa Ojv"2(>x}ue a'R\·j~o!Rmi?ܸ b0JRg>OW ٛQAG@+T5Nj_5n|>|{ǹgukKaiʒ"Xj`!jmjjISgMm5?vƎB3>f(x?8\엿 vxq``saM5Y" . w2,/7!mo, Fߊb6 }^@(GX 30K\ {hSHZA=zj"GX ֬^%Ь`q, hgܺGڀ(- =_TIO_@(O9-.yd-rQ q`eKAᕽ 2]$M] r> 1,Mտrǖ9/EG;hPYY O0Z\= \ZZ 2̛f^]voj0pow`ِW ̃^3sݺuds^pDuW/q쪧 8h1c2 Mҭp3mx:D8+6'O@axEp=ݏ?t a.vs<ܻ?x *n3lHpjX| Z "i2^`Ќ,h*8;`Zpڽ<8ƎP+i6)<(X 8 cpVx~V>_kF,vۯ sE'B}쿃)hDV| k~ {tKWx[VSNA+z?mmVvOAcǎvKB 1b$#?46]Dj:el7jɴbĤ$, B6u@v#3=ڹ +Jrkjm Ǐ}h Gӟ>Ju`o8瞜qȮ;چ ^ Kӿ-?}vhbϗc؏SRRg ] K8S:'_vX89e0C>gٲe82 9mE͂Qr9iKIg #Gj!C4Q~$jO 7A%x ٻƒӠ.(u{O7u{nA kN@qhl%% U*X핖s4`o( ^Y~ ԴoN&ul]-s/;l餮c),x f:fFi '^:fSV@Y *!VnLԻP:NCM/GL|ֱ#ӵ/؁?;yL%6Oͧ%a.({…`t\5̛_>cq%eJQ,xkBxg9řd{̔ڏ5i>!,S;3%2䐡)S3"""`>8>hʑh% ZDHEo)B18 x%o<^~ R T 5VkTNKA\|W 1]YJP"{,}RЂaJHHu2/߷=4xP=Ј]z#ilIq> xRKN~S?k^K=qwdeӬXL2 vd5$ H$ɀA bYɀd@2  x;2I$ɀd d`Ҭd@2['}|=dWd ߮ ;϶:ꀊoCZ-.̬L]c@O5;}T4,hZg8iPRZ롶 *y~"U?XfC8olxZݻwQ_t7MGv>b?+='`X*=]BzZv۝=edل>+pq%2ݮTu# Ц[;wlg=Pߞ ÚcXZO!I}!;VLFOk\_rP9B"Q=HeK:RpuUU EM&̰Nvʈ W"Ilk95 E~n?xi.~REx,MG"XrT IDD1V%Z0]5 imB!\ S"vi+eq CC,eEc;[P @0%݂ |?G$K^XxJ%H+r\o^iUUl.,)m,9I2;;SH1gg7@Zz:.Q,2 ?3<>;K4ba)6] zU.F vv<jXڣ m5${˸y 8b@*nP>T|r򱭮H p&\\NholdWK˰uj_ ;is7Y:-F5-j"#Nzdt0a__;4+}PUWU3\hXmkV\[!aiQy MsRTФJ,[VuHҵ-_LK[OYBHYyS4hͮkȊO(;Q KۨElcII(nۂH+dAvmj5M8]'ܹ|RV>c3L `Ok\0K[G'PS?nW}Ω-UxH,U7Y}P/ΰmcb}WueKIʹ:8 v2C5ȰRX g?y}ZBX:Nq/w@TcMq!1LUM`8WY]5"bJŸr_NNd{wqL:}s;Lrb4PZzʔi NE 4$=O_!B?XS3d7!8MoRGT?. ?%c2.JTH6xŻAM4.;g3_E)`jO(/>_î', >U?Ar;%U,7-(i8{^oeSSSaΛ-؇:ՀO~Q{\Ђ]Kx'c;]P':i}^# up=~nH['Ry)n*dTBba.D4&J%HI\cAk:"XZ;СBXoHMMZ;4쓇 Z;:R,%3L.&.B$1qYܵQɀd@2  QdG+N- H$2 2( H$@e@}ے̀c}}HW{zQ@oջ =I_E-:ېsW{dzfE=S}a ]X<*VSUk֬= X= Chlljj[[پ&tصKvPktm ]ʽ|N ng]?]Өg}|ѤK z,.tH҆OV.]}@+@Ӣd̠6| u͛7O.t.ć^PqBbLټƪqwbIxc!0(" \MJ4w!l`&t5K[}R Ip3>NQ0"(nt>H- !1UjpdF++ ! HzhXkkpZ$J"X*!W$+ :`"^,+:쎈>],%.HAmc*)uIRS%DT4#(ƨ-ڥ(MЭ):إt=}nӱQ.P6|LC@R dlO> /@~yaGGM(5焰,TJ)Mg;%Bh΢QO`!"OP*(ȇ)Xu=Mt;+dO$qJrI K 36Φ԰40ֆUҌ+&fcaYxڀЊڧ(QN3PP6`rnRK>xR>|Fk#L%VE &`+cG}6ÂlvwڧOtƒTvitnD/a) ,7)J@7$ `$T3QX u0@D% e9~\.4 MoPT,EPz܌&, ֢X?tmx-H\,럓&NnJw_tHjD?.mv"w$5 "" 7U}O{EM6ys +-462Q6xss+.,e²?\=kX{Z&pui-"Gzێ? ίpj[= yL)K@ >,Xi@@6. yy貍쳃e ^rW=eW6CH6xGk 5uë鼍dI~BCf/\ԟnU }@%+vNj'̃J$d@>XHɀd@2 a@",Id@2  H|`"I$ɀd@+Gtڡîhl8슁vN#SÝ6+ꑞꓲ:dqsuU _ !zAuQWWLoeY,ضmcQ_v`TaWlFUn-A%rJv=ThYSAH !c0V…7TVEĮS܌*kܳg=˸yEqcb#7m8Ir+xa=Pd P qe1ph'pڗ[7CxD8@G2~MyQ":).ZH]Il:'`ta[-1ŭڐ(:}@T aNœNN j:ҌTh`M7:;`ez)xi\?Ϧ>&$l, miu.S}\\.e1vFW9Q+S@nmTJ3fvW @qQ\{.H۝a-]{_w7/Avi(.Ifȑ(*4vlkll;=g.>u.? Η~DIfIDjocJIa]4dz'+3JۢD~Ɓ5(5h$L9$^ |yQ5 $/wNJmR' 5ŕ\,V5(, uC5mՊoCc ҏ%:G S'r "= xK$_q=/T@](Wl\̹g=Pn>\ N#Fr[|a!plؾ}wOvkkka+g?%>AV5sq͍|Yon*@IDATW>S%PF=ʷN> 0o|,.d Կ8N |o!RRRp͓``l,`6LXhPXHH{uQvRqFM_j92 Bv)#/9Hl> 2 﫝G_ 66`؃` \mz^kΙT>aU,e\E_9UTToY%R $)Q,lC[r&1U.* zTي跐ϭ8c˗rvk%2Em"Xʘ*G[[+4 ٦-)G JK!,</=sK_8q222 88[M&%uIJgKQfEf&.RhK>\&QObMV\ô1TWt` 3p`V (O!,z@Q(%h>ǎm[gŎDhʉԷ7ۿ &7_:v:Sjjj2m'#R:MvDx'Lq 7IaPow,̼F݂+p`^}b.6|\C._ \ AA\6BCwAŚrW> v&[\NN^ |91,Y;a$m"&))&OR$@Bӯ:&L?YDI۸؊2'rxpגw}{ϝKށo?uӌÇ64$ Vvl}.F|Y^<%ɀd@2 qd %ɀd@2 ;Az! H$g@=NP2  H$ d=惕^WO4}.vkmқXΩBvз^L~ljՁlGbQ|rÆ S'ƴN9z׎Wj2RWNL=ǀ23+mO'C=fkطٷί_%t]^D*YΞYf~tX 8_ Y#B+ ,&Fa}ݤNN@Ӣn#|v =˸t@o`%ązΑ~Wmx:Nό.Oy *ٻT:, 0d1A?I޲W lWP+VUa8#bAibu q8-,%Xʘղ?h>OgXEK8ķ0/a$ER!j,hm"~ոr`ee.Ć\t &;(>[J-p)"BnBy-.*DzO:Ir%Ԃm#@ ~Ip͠,+Hpӧל۬׸X}~+udv=ԃC_VׅwP10eʦjJߦ0(‰>-77k uxeοغɦIu'Hd :ڹz#,I Xv] 8azgMP?&42/~$s[ M[C<Pc/؉wU^-_#iC OA9{qX+*΢̖Ta_{XV⣃Xyer{C5Ƒ7"}{wkb={HC 8!1E b$MSB|'s!!N)!,_|IK\))gMk:2Ur,cTmj*E0PRvq>@ۖbX::\r?BZR/%"<[}lLL [<̏$9 G AdKe=@R{x1G[rX5" FYgD{4  Q lǬ)Z[0 EG4e`e L" k>,s %:d0XXt;jz2ȾSYzB/펅zrgC>^!`i-3gN a)0~$:g2Cs(P\ @BP~?C9 P&\Cˮ: >bΦ] 1 R"cٳ!-m8\*/C0}L.H!Y>Q\\HRS WWWr}5tYlymzVV|zX-o%ōԑrd@2  5vؖJ$ɀdAUtE2  H$=ɀ zmd@2  HxQeHW$ɀd@2Г 'ٖyydߣ_58:14_5Ӊ @HH466Ά^Ag\ ʁU" ʀ*:NiȃOa-̙3GEH4(|ݻ_Nd ΕDO]vq A ,,(^,G1" z" +Mve=EIX7r0'$^H xZ[[mJpUUSd,KR"X2'e@w %4y M o!TwZd 2 ]0q+2P9 gW <t7Ic"Σ ^jDlueP-))fKzeIBK>x~t1it (?:ifpw@X$_6DĂ#K6U@@pkӖl%2jq1 $,+T_WP,o3[S>Ҏ!E-I/kFZe2c짍%35ІkUPUq!glEM!LMJJ(tXB@_PP`jraaalGEh۴]:8'Nke_[$ ? R¤J4cD} ܙ3g࣏>ʊI4vL]jbzZ<)#b ˗TqDdXTOg7COc'򙕕#G[-; kOd:}P_\H$@ ~C$ɀd@2 0ܱHɀd@2  2eɀd@2 udU  H$@0 ]* H$^g@^ɀd@2  HW0PIENDB`ga-5-3/python/docs/scipy_11/papers/jeff_daily/laplace_results.txt0000640005473000001440000000061711577323416024023 0ustar d3n000userscores N numeric wall 1 (np) 1000 7.14 64 1000 4.53 7 1 (np) 10000 843.43 32 10000 183.74 95 64 10000 99.31 53 128 10000 53.33 34 256 10000 29.67 28 512 10000 18.01 33 1024 10000 13.17 57 2048 10000 11.78 111 512 100000 1348.93 1024 100000 670.04 2048 100000 353.70 ga-5-3/python/docs/scipy_11/papers/jeff_daily/image4b_crop.png0000640005473000001440000005516011576475201023143 0ustar d3n000usersPNG  IHDR^iCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx pHYs   IDATx]|>7@Wby**<{yק (V{WT#(ޓonv2ܛ܄9rv7s~XHB@!P( 1u0N*J B@!('2B@!PYI"P(qu tWh"ꫯgM]vq[O;w.q[t6l@ԣGRO?Dnݺ5}5fKMxɒ%uV tꩧRjjjM5ͳ˖-͛7 O;ü<]6mQGē$={ԆQ5k&hw/k<6m4  eeeӵO>$8̤}ڣ>7N[jE .a;;<ꪫc9&M0 |s=u ]O淲aU9'֭[Kڶm,*=vq JKKm͙3G_|Acƌ=}牻M&vfsnn.M:~鯿v޽{w( 0 wCҗ_~ͣJbi}8 k4]bu{ 6Xa|AGIB3۷oO{.ٳg<{vAg6E.Dv\ Yni2<D6pda_wurJ:_U'1XtiDT< (k}^ y v '38f̘aB1%ݐ(w{WD]"gx衇ݻqFF~[zٌҰaD_f͚ g݆9:7iŊ;sL1 O=!\"4lhi!]ױcG>#{Wd878F} ZzHh'wY2yd[ϟO˗/"ErS<` ?:묳hҤI{d28yNz7a׵Tbx իQ^ TB~hHG`/Z)^ '*e<nhIGg yx"%N6m&%86KO?im۶-xc\ 5XC| k3ZppC wOлwo)vܙN>dт՝Z"keee!,-XWE.BrvEC>x 3)w}gPϏxtOp0~`l&Ä&Dǯ`?#cعi\czfүrKg)Ƶ<@>InF ni<VdT&D^^"l%*v˄*dm@Sa_Bj+ *hx*Y;w:V&/$K&/! Z=[ d4n9z^F4|DE;s{ZĜ$4Ż1 2b5*y \6 oc6 ő?yώLMN+Pޅ0܊Ho')CZ`@&plà+vkbvP:,W_`&-qjB"dѣGmQʾ롢{dc%Lt HHMH|\6xѷ nuWqSWS(ս4U1R( J B"N<Y 4@Zߝ~Q5s*+)?' iR+ nRN^ 촤u9RIi ۑG)/+-+B%f=dRL\%'‡'w/ugQZZLY-̬@vᚯ͛7y]'&.1Ib&ɤR2PqYJ3^;=!^asfK= )&`-lMo%l*b8Lb,EyT\RJ ˴2˥X9)]/Ay^Z/me4%EETTGׯɳ2ax~הwl:驧avcL ̲rۭС7f2d0rit]u7 ",7^?O،ʁ` '-ܩ/u?u:.j~s;hͷRnSi^VVJN S׳BC'(1&$&\tRR (NoKG^[!y63]CMr|0GįAcͷl0%P"zKq/D7̝H%Kc(>ٽ"sה}&s_({,1Pɽ;t<޽f.6`<ŧ۞c,3t97bqaj8ENõbXƎ|7(Y'|=x ŗn^ٱ [!=]vۋߌ iΧ̷ֽB3_3f=o Vj6̷BQ=J/ng?NV"6JDz􎺓 |;u+YE{upX N&/^7nV.9..+ɗwp;82NӇe 0xҿ?s8"!=Yewp{:8~?\AʡTu.iH9ຟ󄴃k~\bV.?C`WdnSR3tJ6q]wppn_r+l|:5ʄY,+a A|<[ ^]Әq]tǝwyz8/sf#_{[7S+^&KEd}F_z宵/sڻGR\m0{{MF;8@$Z{^JMq̘3ϢO9MUt5"\I0쟞i .)'э7­t}.d7{Ngq7s&ucGԮߍMVf5vפ4|swg8ב`FAKК5gam,q7;2/,uL[5cnwJEYcvZ+Z)_ʺdrMBE.bQl*- kRPD]_x-^3-,hB@!K('WRSE!P(,('gC( @]B@94U D!&,旇'??tۚ<˾}Ãl; [> ds/73V%4y*_If?6)OK.MdL*եڜ\ ݀pzLcAUYOb@C|4U}bz?a]?y_ȏBhɉE[>4idijLG/ ۯ-Z:880q)TmNN,WiD)(Ċ-62J̊q[)q'UiD0:ZnQnx 4JksbpF4)!SC_d72Af".⏰A+kГ I !c'.XK?pEIq ԯq4K I~wqb93{  1 {el@MPV6˅ cv{Of[JC<"F2FJl &`'Ŕ0#~g QȫɒpHxi}"?ɦ#bκ"ʤGt瀥(簥l(YF7XHqMcT:eƒ"? dR2|+ͺ[ TN Rp ;j"sp ]0 Tdt#*'2qC`q/XkdiH.o!(VD!>p> .,*IÊaj2vZv+a3+V gP12 u?1㥹+L%wdu.?ED~B`Cڠׂ7;LO^"4'm!%~vm"`JKKpy,Ͼ*0~ѰzM27,?z?CiZ&Jz 2)Z _M녭{` IDATDOT}z R 'D]^ k?:;l=dҤ 9w$z?E%lW< }y҅ykǿӜ(Lň/Fۻ^K-ZXY*LADʐȸ-oGt$Nڶoh`?u0Zr\m5Rbx;jǏDnDjER#62ar\>?-ٔҴrrёVD&;#=mwIƭ^z ⶦD̗~АOޛ6ns\xi4h6!\ǑI"R_ʣjQ&/&x11.:$2ߘ?x.aK@F d%0&2Xh233aÆԼy )柝;wRfEg l*t]].;@9%%Qt]7Ξ=y1 f8%U`ছ, lEFF?';Џo^a<݇cYZ(?'(-[Pv]Lrrr(77W*z7AÆ]˩ *Kaxڵ5j?3~;ws:FK"pH@;x31kם &ߊRq 0Ɩ|. *"/(ߊx Le-+"e:rpǯ0 b0p1'hqؠ9c>JOШ;Ϗ$+=1r(pp=iL |R.=Þ0jVZڼz u^^G r a{ _fK yZ {F%-G ]iM^rJ,KEHmik\P6~l-M(蜓zҙg;~{۶4?>p}uT3gi!T\t85 'DvШ7Y4tЊG7m7|㗛GO<8Ӆy+^i긕OI!q~";8; xB={jr NgϞRN; 64iLJ_$),N H"lѹs)JįKRܕ_۶h%Io-Re=dZO.$\ԌH&c;K3w*]dlOJJ.fh[FF˽CRܕI?5iiiRƎ7Rjj=)GpD,]8$JkFBI\(SZqWK^MMJavZ ^}(o|%U6R6c|UVR&Y`\2XbHrE2[~jvB@!P(j=$TP( 'sBF]W( Zrr> U B jsr֫" "E[{f(EV8RD`#b/WQO=? ӯWXرc']ӑBCkV&P7Yt֭[E!-gVո[??B,EBltqfċ1œ!#{fs*.2P ]>O&~yyj*)]/Z=Zш߽~oqjZcJ-J_rMKzY&`ł͢6Z.Os.e&˖-4upfeK le◾6K7~HC=SaXsPN递ҩ$cEyx@^1LZ( xI_8Oڲ&ǂCf eE胩hժRi7Gq i@Bl+VݻOtQހ;8.]iJⷋ7o,?alw#Tә0;`6)ZGùx >}aELAi\xѦA;w-[GẕuwߒlNܻ 'w)RV{H:&vhCĀ>Ŕ_ZZTd◗I#7lXOW]=H0RFzMs,b֓ >JJv)LriI)mݺE r''OK89 ]tӧ RS˛6nv۳y:)4o >1ՔLGO@f1,[JҎ"-Ȫa:MB*fG5oNlmN'jڏi(՞+&'`(p/rA&mCF*m:7K1ܕ%p‰Ԯ]{/UŽuxIA~ܹC*~NN{Ģr''ǦE+˥ulJoف-DTLD^t$/Lx|Tdߩ[RvD26ϟ7.\ 1tιJz}"ӵlc391OgxAA6mMJ̙w)='KY~5X@ZZ|3<.g~t =ݵk'IׯoU&;oKª?PTV@%̙͕^>]z ''AePB@!PEu1*N B@!pP A* BD@93U A@9HJ<5"'h9~ >0|' O4k%<]0F0X"J )|gmp0\lY؉2a}V:9S٧fĿ~rhTf_D@TZ1xZ"D.B Ky!.6.d2tz3KǡxmO>H,5)JFQc]fHS"/0mNLի>}^umPJԡC#7Fӏ\K.҃Zۜ_~ GGjmn$~"aC Ղ5?S "ʍxFJZ<`ba,322(^ye(|'nl\wV IY8IL]YuM]Ϭ;vlW&@LEt7;:JǺ~^UjּrIwǎ4ud L\ڳf͢‚&cƭ[֬Y-"5zǟ g?R k΋a7P:+u.a; S/ݭLs7S3dv ?b<lɦ5K.\覧nۊbE~BrlڲeEEE2A+!׫_04ff>܏( .蠨g"Jvr-ϥ@^z˦ kR?@F1ˎ[ kۡ?e={Zv2 yϬgefƜ6PoM|JLJ4ݱ? A%Xfժ?=?3^!S%z_@'qrGJ@%HPy',ӻ3Qkذ-(2 5/]p56i҄.x7)<Ӑ2}26#J|HRR2XD~"l\ΞFHhD3&PRT¼,3r@R~^P@I4 mx*Ll+gslS~l݇ nTV^fhHo<`S=%,wp6')Hxm.VJu]Z.2z'tMCOQC9tw ZL**sQފ +ܕ7t3zutI'IzM2gKA* Z/dtב#U`sވ5eBVxHqt'JzM:lRvzO&כ<{wW #c {sF|.h`L[oZle69iK+iʫY^lKRΗ}ir^ǒVQ +^p\`wAt9 v}:]'[r1rxVǒxqڎ{U`m_1;nQw@R^?2EeNuP*=X吪-pf:1ڐW/R( Zrr* B@!t BV!PmNSd#rMxXXjW&m>U?W*~BʬڥeqY5:9!U5Y?!tqaY'dyݢ5VxKW->4M$ L~X39-T,*,X^{=|DTBU/s~gP3RM9믿6.,!0k1dU^g&N&B{3~g~. -ZH~0],\ g1,qd*F*l1\`Z7(.1 oU͏U{6hLGܚ vx=E]d]m-95| _WaCMb0=-o jc:/ZFY i^Jj범D/?؜\&Zi,-9,ٳGwܹsNuA법2gxo> ʐc޽~K``] ZO)xr /^ !WȔc"4oXGL% Z/! mJ7lSǎw_^6Ul;)1icR؄m6wل WȕC65?"Jj$,VebBK& \>ZggۤpÒ}t۷8so s@ҸqŹ_D^yUk C#"Bn=YZS'/O4fR^ |)Z;K/B {ў6k֬驧E[o_ԅh`Ś"h^ڟ/Q! <Qus&Ex'DG<Ŝ&odUG{3)Y%޺ =G.~p\ n%%޼N#%1a˥i˛Ҷ:0er^%xui^{v83z}c## n#:^Sj{ނ֫^܊C_Wү8E;R^LUh^yKRYhcJ]Oɺ?$K»~[D®Wɬ^P( p!\T( @!\%2H!P(…rrBRP(QrrQ$oaiRZ%Ė)QT e ~Q*X.z ꫯTu(Rv~B\ts=R(%#L!e4x֥rr ܜ\>=3RWRvpo9ŖauC!@{@CX,Ӄ?EFݰ~=^A-;,2u.b Py/eRL* $[;؜+Y&\Dh? J;80:w'&! 2=V&a8IȄ,+"ĺvB2~|2m nrp9]`3eB+ݿJ_.JvI nd5G/2O>$r%ybf<DJXT#vq.N?xZ/83<%( Aծ];RZ~Q]\jS]uq۾quS*,*My=;lߡGy;֯K RMp("׭/_|j B@!ٕ4 B@!rr) B@!('WKNP(('獑P( Zrr4 B@!rr) B@!('WKNP(('獑# XzuC|P`ooŋ{Eg` ˖-7|Cn4y3 ެQ:Z ^QOV֮]K ,}/K.Kv3`}ѣ}t SL;vЃ>ߛmݺ5G` F 3 EtSff Q-γ\s:+p+UVҥK騣"R`ږV\I3gΤ,ٳ' 8P'4/fm:묳Xn#h( J;c}n/O@egg*=\C1q|rI'{IaaMNNׯor)vkjk)))" , ;7w~]Mh"=&PcJFq|Gk̹+l+VИrQ HuWV_BP3|ԨQ#:s`ѭʅ~ĕx \Z;j5kc駟N'NÇ;uo qG%uC GF/F%7+N*e]wEW\qt/;3TB?B=XE0- sXn7#nuQ.]<ٵkNݐGy$ߟbv_8p~{6Edǘ?,Uz'p_Pƴ 3g[`wDR:N@ zJl[nŶ+=P!C:ƍӌ3ǰc: ]}ǏwurшVܹsmhqi51BZW_6`$tPz-B $Dlcնm[Q6mq'*?55U`rM6|;#e]ztyF[g["=5'x4a!xG&M4vpwk{/{Zոil/zו|hƎ*ioOd&d>R-pWKTx,M6%l6}v*%ѝnym{뭷O?$0^ƳɫE֣~]E grV&;;q k 3r q [ת f5!^x˦0<`1t7A y<M2"ʤz&t_ 1SƷ[]p/"ay OF0~ӱcG;vc>9ic8wJ17f fAn*~$\o۶tmWx^x?Q9"X7 u: f,ufbK/k^~H#ՒN.bC f +EhM}lIT0xmv &|gRc0#r޼ydq=8>"#fjb׷lbwז,Y"8ê(pd H/UČ^88|0Y`y,7|<27'i~8H3U @tx͎Ũ^*c'x \qƉ|q19[6xƭ9'g]bbҤIwOj(N:i\`MƳ?E|;Sqv.c, <9b̏'hVƭEO?kra:9cr/8g+ĽW^yŸfq3nxuu-]tEbb4{.##0\s5xQظvqkL8;0dŤ{Qhω'R+FfO1 uƑh@1 /i<&BG*/&`Ƣ. K|DbIe_u#NmuӧGcdݾhĬ<}DST( jA@uWV % B@!P('Ww* @ \^P(5rr5zB@!PT U %c_9] j0Y^/vomƧ6 dm8ydK#tVÉ]`z.x_S1e%<\VMUݶ_|A { kkC~tt]=$`C\L3&a<+?av}LFO)vgRBZ!ȈW~P؎Dڵ}WFҥK騣"8;l.xhܓZJ2VDx(9䐰c tawc_NZH~vUetÕ\\SQF{ァ_:(#?-_\`W_=Z\c8* FHO>Y6IuM#BawtAuWJUB>p @K oĉ4|put w^'ީVUFA{.bx]ZOwl} h4u 2y95^H˝+4tPk`Ag2 ov6?AAy*' RZ9s`G'X0>[?Of1 bDw#Ÿ6mZ.x7݊#s]wpw1̙CNv"c=+ ڃY0~i݈sx/.BC=dQo%z :{׿[hm(Х8ϪrrUAO=[+5k @'L@<%Ώ?8qWwW' )(asX2;CԤy3}D-Zw/yBn2:vڃ15kqP\J~BW^tm#,+?`-x\7xbZj|rWԜx 7N"xT5?RA]`̘wݻW:y''$xN ]￟]F(NO%|3駄ު){Q C 3pnv]tcL1H"G%2 |8}tSU`BXM ftZq3ynݺ&k ̂5ϧQF4c /7?1yKc0· ?0tM%%'LlX%**qu]!PnCE/7nY#>rasvГ7nGzDBc*1r0T5?q7_;D͕G#,e<'W8GB51[p9 h]ᚧq -?p.4n2LhO/8-bP0.Y UՎ,RJO!AFJFD4hr\RC )\qPN.${ B@!PWPKJJx( @qtCr6oIENDB`ga-5-3/python/docs/scipy_11/papers/jeff_daily/image6_crop.png0000640005473000001440000004636211576475201023007 0ustar d3n000usersPNG  IHDRVxdiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx pHYs   IDATx]|ƍ8  ܽk)RJBKWj[K-I!o= pOؽ7F3ofA']t %pI*JT]t % $`EVBUUVdeeiӦrN8mF52 7`ڐ2---ugJZQQQ4M't"PQQ3gh?OJ/iCCQm5Q5RĦW[oU**L G'U]SSDJ]`>C]pUعٳ'PMcv^i7]tx7QNC!6*!EUKY{OWZw0Y$9..!!!}ҥxs⑑6mWwYj`ǵx۶"<:;ob֋/cT氳Uݩ<8T#jǚ]@[b w?iįÇo㎄<:tlUk.TVVbApT}xg5&tѺ!#1y ^m9x2 U^7cZ{a֬YBC;[e˭Sc4r FYȽppQns;~cj FRT+GSPYULn"5|{9P:PԨ(9ju&5iбcGUqܦy\PPwww(+J;oBùxTD{t VD&`PZ,XHuַo^<%~%*J+K/BxxwYx3q7t0 z+2L8 Ok{RSڹ9 'Ϲ (cz!|7\v """0w2c9y3f(G (PEYt8^CrN˫m_Äv('3W_MXD|yپl$?<BgGqǗy} 9ONYIн3/X4_ZM,=tF6QL=S3ѭڶm+/Gk)ϊyAsϽ[XQRR [oˎ,cN V`a\V'16].1+7ww/\S_0p-\0jg{ \=?SerppĀџjμɿކ#5F7-/5* գfeW&^Q {C.ׇs?R%\`zGUg% \EE;nӐkуAkol1?AlMgkS5W^q!eqm \3fe]+L4YUUÇcuS\h^+붶G< _l)F^sւGvGM7BsN;RIɅwK4cf酁+,, ]qJ؟1ݼAȶT 6 iBE#!* KJ+)\O7GR / #NDF!44h-B''#֝\xF$,n޼ Æ j ⌃kGTw"55p,> :>t2;i(9FF5w:'rqS_4΁ֶ0Ε! H_;TMmhRȌRp'h)m2hZtnJd,ڗw,x8$7xC4 ʪIΝ Li៩Mjou:C`ZWڬ¸e!ORR1?^xrfgz]/ `̴ǫC/ltm4RhycEYML9.SC)z?kg=ZkEa.+oIY`6P0P8 MTo T4Ơ,KTۑJƠ,=Ǵ.2-18s-Qz|˲>6*Ģ.]t h@}}6:EJ{tdn|UE"hvE{%K@Jm\P2Qf]iN;> ׹]R^d.N wO^d%KRKw:{ط? u~BAhWwkhV ^K+,[" [Jk5/Kbҿ%pKg] ^UeEɍB [Kzo&2:Q’ a 7>5 xƒw= a&%5VКMZI2ݛO)vy0>ig!cף7mXćM\'F)C%m%"gKJȄRV IJJW9ۃ5PUI.l6?Ď✨5J/[a'lQ6l\$tXА1\ҲҞH ٝ(Z28\|zYʰuXdՂ˒ H)P޸q+K?^ª˕OхͿy}"/kuѶ6ljUIѨ%Sd_Nk|:9g &O{DiGkL8ܙ0yI hzO ~>X*Y_~hKB6bcح{ j\'_KV Ɉ=gy k!q͋p[~X:'k*Kx׭%Ytl=ku صg?Zje~_PgxeիW W-`{qlI[B*.[۫;oJD-A܋Fr:UyMVZ~%>#-bw#ZeejF-U /޽k'k.tFrGB:[DaƦ t0\< Qk޸ lzr%Eϸv.LBWC}5,X~f.:\7*j&{].xuc'7O(- L9Ҋ*ycb,uU%8@--Tb}A$}XBBZ&QM62 YGmItEH-6Q*fVl]0/>g:o-Z$[P߲]GQ&gs[meyX9t/(~6SKN\G "YoBf MDC/.-C9,JPD]|vVALHq_ &N4'Fl;bXFן_OD8lOndRadw'd+ e琞j$`E^vo߃g^xXފas>b6:ĦŴZd{֭1M ˈUyض ^\oCZ1/f~?zF×F~Fe'/@ %j239ÒU {q%K?-Í^RZ6x{S-n LKU]/ bu#+q e:۠JK@.GRdž"[:Q2IFB%Plk~×_|(q\cUyvh2%H$]RFȊ5DrU  0I})O]t \>Psss3\BMdg^.`68{fFLCڨZAP}/tCYl 2ե"Ooj3uIx߸Dx)o k"ǫv@H@b%K%k, 0K(;\*jK4$!E8nPMzE1a 11;Nc8̑ RES.]WRI";󺒉 y1xolS 3]v[?[0h&<: BH.][)[yy29rD{8@B 6W 7G`P1A SO.]&}hl0[K7+GrA˗2yM8 gggu4/pj!V7nQӹsgZgmmܸ웥|;{x'V,d4uqo~c,G- icoޥz|#uf6ZMQ qY;zR#GDpjz+.re6S}`Z':>}haUKQ<7[bbPan—n;Nߠ2+F4t|drQIfIl:d&[;}9Kw'|ԡ,[ wq噎ʝkdd$RѳgOxy)_(nF1t07߬Rh3Oa0_s7NCcl8;єV@n`B69_ gƉPolٲETN߹s8&1fXU0ˁkGąs3@Y`dX0UpB:2 KaZ)&M"8h9qqgEc)_Lyn(G~t cλ[|_<]5E{ŸqH6&Z:Dgy-7b/@k_eRtMĆ ;BI%m^ ^*J{4tĻRm+m);9E3 ̔+ҥ/Bvv8{y9pD<#=^();牸 ޿GW' 5}T'x*7'ߗ耰JICBV9n2ؠ0C>K׮Xa }8p^sVfK(h/Hj=wc׮]ԩ3Lo^B^p-ڞī 01 ^'g#M.>;4;-͜O,׻:hڀkce)zTOpe' v؆ǞxJ3pQbL3. :{hJ5wL yz:uV:F}٠!4/er~f+ \n}׀ʂ:gKTsp1~^X߫W/1eB) yqՅprϸ +x6c)@5 g*VMu41C9zJ[aRA<>bVKA>YuaÆcɒ?57кL]:{6'|]?p`?)Tlĩ*\n-FhMa"xԣ{8k7V*'-HAf.䌷'R}rҚC(,pO,ؒ.x 42KbP#{ooot$Qa>Q^j%: ˎTPH?{5ڷoc޼PE^Vر]|aYD_}OQ܎%g!)[b$ZlgdZ.yg_s`cgpԥ lJ`OA w.߫Wf{o4k֜>rr.Hdmnݱ}V4`Øh :T^pTL}POƛzxÎswD"?]/m|3TjL]dtTN-рEɓ'#{Jw qօwXƞ}o5Jػ70`%"dd];1nuBrsԸfk{ׅK\gΕ.Rh&^kʔ)ܻLAƚT9HE@!Ӡ,QceZ+`Keg*=6Jl!kZQ@+Ǝl^:}`í酀 :ɢUAը?%K*,xqRj-0%^՗T5(<#E)Ԉ5e!* dOt j !T%1K'“+P{"C%K@ZAV}&a4*?H\^- U;zr22,i >VA-萧aUtL,Ё@!̛!fXG矲.^bffTpd1nIjԛo?dXbu+Ħ ޝda Z>O]t \`LwkѴ@a}xwEm4}w+ucF#" vPM|qsWáB%/ٻ9YP|d0'Ν5|pچE,Zd$ ӏJ[{( %@ڎ=Y7##]*>rEx\l1;4-d>n1+P\ZA %媉0JJyN p,]_Sc%(%sg &h9*dj^C>EK.ss@W70qHT͑8]y7􀯫 -2nƴ'쨔P UO)?xi&%} ;>(wb JmPa8i?jվdx[eefY*iw '>{.C CdƬΜZOLR]Cw7љ0k#>I/ƒXUJjQL7m+MEމt)чԾtc+McYT[ap޵kVu XV(F 4{qD۸%hN }6\Q-)kO6=Ҽӄ36dQ׊C&^?xoEmǟ|Z7 Й?i!ÅR cq !zۚ_>pcG駟ZUR7mڈH<#[MڸzÇbV.N_}Y^ދ[Ug nWx9}ξtp:GQƕOM,H^xe8 e| |؟תxw!ױ#pz-/WTX# ^W{Dwǥ[ W|/SD1h[O߿dyu20W;"L@}3gbkNKqF$'N#F(d[[[#w=|ȲFZY\Zv'=Z7$.XfBBB*۷oXk-DUMWNCd*R1 f̘a-"3cOn-blYUr:w˗ 1Wπ.H!}W)vrZC}d$Zb9]_09kG m劥h^ m#BrR"nypO Re& 6{dǪQ,iX/!Zp;Y6 ,7@ؽ{T$Y oZZr<fdH.te(FK*l[Zxsѩ\|gZƣK>T/u" &%>D{(ʍ>)pR9͒Qqԉllj4Q..GFyO &OQ@uI= [/}M$cٻw/\Ru -2@YQKWR]Kd>s?PvFl7Sm߾7L+mI֦qɂh,i2 G;M$# hpx#Vijk7y6SQ*jTh꿒faSYq(M,֬\SOa]Q^ I4pRfΝ;ǎv<{%K-y5,Z8p +0"Uz%-yٱAfW0X 3Lj2l{Qy ܓs;r]34͎'ud{FWVԨ8e 41c_*LCdJ|ʫžY@ĝ=#l=*%eA *PSeyI@ zhHpˌǧ#&*JbFP *eʼLi&;#95 {G_C Æ C7R=o,L1ȵmۖgjL؇,}z&L;cWM2鿯ҕkL*( וq{F<َRhؽU&;ѝqӬ.mL}auq_Ye#Qڧ.]t h Bԃ%K@.+.+4S]`u %e/ 2>xG9mD Zɔ[4,j [%K@.s X xжΖAߙ]w1mC4쬺d %K@\x4ߞ)z6yt %$ TåǦ]vjl52:aBs,9i3Xc7$ * \͚5Gh()V*i8ɴ뿪jh:.]]e@0eL?)e(NnD\Xb~YKVy5(șxvEP{Pe||<Q?EW]$>_Ckn?j`*QqޡfJא'@x 0;`aΫK@.NRf[|pYz쉒#[S,+J&s6SR֤T`^_W4R={M; o_[HHL'P~޾O[pSE~2#r;f<\t//+/T=yt 4XR&=uj/y:WGl:fJ5l`rDbs*E#p/_Jt %py%p-l\]\# w-:WpA֎:h50t j$`3/>dJ4 t:u_'gP|}6/Rvv޸R$Alq pMx-GΝkߴ^PPP CߋwB|_"o3gvh|˖-1b]y.ҥ"X\\ztӶ)-^|71MLSNڐ2ݷo[/ \ܶ4i"\[2ex>]N4ߟoY|Gyh_رC{0ս͒ǣtk͜-|[RRRD][_4ѐG2d{Ր^\Ȼv쌋EjHZWG?/2Z7/^ #Y,3 .rH;!ֽONqe`tl=KaY%vMy$b-k dӧOGdo<5 *42# J+n`uskBIA;:ǗdԛoBQqD٘CPbQsgDd⧚2yMd"W_1cp&6=zK[ */&}eotyٽkur|-wV<{QbLX [ (.Dޡ-f10RI&*_NXZQʔ{; D*ݷ7 ^n\Gc*r:yR m21p ݽp.`UDKG9Սjol-N&s lzLT`KL nF?^@?qDeWqvڧO_8\CvTGpTm[y*ΗnX.#_Ε#2mljHZ4l f0;wM|r]t]$sбZAvq=58=91sh Ueѕ0} $Vׯ#+H4o/G7!>;t~Ĵ;R=g w csY0p%ً׆l)q9\stK ˈ3 ~n3bb`r'7h kqRTdrs?xg~@e>㪳G EkRis0J/4s0 xd`I꼻04 BoU.۾_n(hb8eʳ3xw ,oB;Te|R 릗Mi/i@ Çfp ];B€>xb ޏ:VޮxstӚm1ih*@yكq㖩w}MCx tCGs5iE^vk2hL1 W , ܐ ,"P|9!i"W^}-0~>KZ @`U&Bl$ЬaxnH{uMuFw5J$z隀kxţ_npym.Ch.,? 6gzWFQOCSfhcz^$BWk.;1j˗bȰfk ޻6L~;%'=Ty&m\6ya0"wޭ JKKk9~hݺH̸ B(ߊi6T? \<8bo1͆WrR[ޮz uq!ƥ P.ņ:z}ӤzF7PUr{*N2xՠ ن̯aL.G }rh"/%&X_|!t줬VbǏ{Njp-a4uj%f:@>|0fuHO QQQ8y*dž]vag{Ta J}P/T}uP0Pfv$;|\Dު黋K}A9ME+/yx)w L<δ-Sx~lܹ HDQO}AeUL,h +֊.SQQNez h؅F998{&3Yf{PSlRƧA8:ѻhkTws/1Nr:!,ĄigFF߆?,Bve)ITiVHchMw Ux3.Z9ARAZCI"{k|^^&JFza z6l %RMBWR{y8Q=&^[.;n 5H)Ɔ@l뀗F{>B6xlI#R#ʕiA>շhwM\NMI\+l>Uz У~[d =tA01UPT{$ Yq}c>2 qޏsB #<<^|Et"-\? lT4ӷ  '篒԰ǎE@@ }kbDL=ZR{{Ҡl.],d2$p%ilPXogSl RXZyS~YHWHaHOgggP%NOrEaa8ajM w68`cHU"yXr"ٳ2uM%Cΰ:IhJMex IDATue F Yg-FT(7'W۴mJ 6+Wgf;lb-}62Բe+*J\2Iu`0(ڨW6G'Ô߯^xtf 𲧶M&:Sؓ]EJ>*E:Ɲژvlg̰D3C?G5)yr~~xӆk~6AqK>$ e64J w$*ڔP?~-2JM=fvF#[oSGF< cKy:j* UWPyi4}k Tr|vyfˆ㤵鬩LRegΤM"Np͛Fgz КsPo k ٦<lں ={ď?h i8y5d-tYk!> W㇟~M5k°o-"3c /roXW%=0P% &?%MzjkI*S^z5J,W>cښ7$w]sZxQBar؀9yE(~a6T2ͼyy+.ϸ&ғ\qٲb#3~fϞmf`ʿ[Wr8xڵiCySOԟ,Ty3B\'L8a=HLxM%lh{Ə^x ӢE >s}Aܦ -}XdKݛΡK@.] WN׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx pHYs   IDATx]`Waʘ23sI^zޕ!+)3c4mӤar̖%Y,KU۲Z>v޼y6 $]Wϧ%%Y(i]l].m-drcI BΈ]Z~G뤩NFњ"Ɇ(!tqee{J u][] V[|5XZ"2| R%)99VX(iw\Q "KIW8hyqiXW$RyQ5 ٩q)/W]GF822e ݰ%JlZ*M U_F׋ z`炍+ ͙+i5S iPnV, K`ߗ&ژc|56-n˜0p oT_fG-mjoϺ?SCil"@pgf`uJIK ^!UUWɟKK~1¬`<ҴUr1,լ"|C1m&eD˖  2c*q_ ÆIOh̙rQG $\x|6cmI^&L`^WUEɬi0aXW!kʎ;$%ZS}Xw^X Z&MzDv_})q:69-C؞[sΓS'N ;v*cƌ*RjִZ~ ??J [By ILA?xB 4ydwJJ( ;z;g{O ؼ5?̑G? xR+-niVWW5WMvGA폾Aނ ϪY=_3{VfA:Iˉq{Jeŗ`gw}ٽ%`ZA~;ZTPpeXkЧO믿Ï_~Y|^ -}sސO]/e#e= N\h.{])8Rҕ}/jZ+#%HrY;˽;vDe_v~z[nѣGw>X|]>HaXϝ;Gm{advGݰ5Gz33+n< S=w2Oأ`97P Z[ Uʒ%K}ݧ˖-3T(LAɱg z8U=АW+-SV*zk- Z9tlZzp}jk_g D[;qA  `?~kxFW3"r#AlJOGHQ" y]53eS}3bk~ڥb,4*2d p=2o<}w; &{ml#uջq%u6*5;ݻyw)u%,zKj0裏',ÇǞPv I:fI %@={5\#zjdWتf>A3tb^hP#ԥm\&<9:ExNԺIkhv8NwP8;'ڽt+F'ȊrYWtwUk>~)yd hI8Hm%*D06"5L(W#rȆQOֵM GRJE|5f&~z藿A ŎVs|D9NAΜ .a*eY]~_-׸6G*++čXY׆nF0AZS+3\Z]|,Xl :35 _U£ٶUThHX"~āN341#eYW[#WHsԤ)P+<#!T?µXV8񾪀\ſ\lsաP¹O xPC+ʳE iӽLԝ|4<[kCXDCv~کy_)JDȏc٣r1;q!πGs%0'_8de! 5=S!?\v9-,'f˞wȓ.<ƶ?s SBEVe!߀A.g碛)W :u,*:B~2Kޒ tQmߦ=Vcشژ,4[b ~9Nn_VlruϤ&YhO t:pg笲I m-\Sˁgs\q%ve(hw'+Sy͊e>7u5HYWJk<𝲀/MUr6[\f%| pHV $ 6Bfo}XObΔDጨEOk ' JR/J\j:7Y  l;i+yuljBujB (C.KY6a8s"sP}}}HZS\O_{55kru9餓dvk#B#?\>Cxː!CTwyGͼvi2n84LvZd='矗Q!8WoG}$r9ɣG>X :_J`PYr%ZU Uw0@zg_g3tol`.6^|.4dCȏD~Ԕi/e?5B'~͚5w<>f`{ky2ydyd c/^ΡDjajSCVc^xHgځ?C vwk\vX=8\~[Cd R+%vѱ %|T5Jx?3/hLA'ۻ*(-/%}µ.2]ۏ)m^9c?XnҥrUWT=y@u!IfmBY:4p8'1E5U. [JQ6mf獣axj_R  1p֐P$dB&%~)[o!^tCҮ "K~_ '_Lmd 2gݍg}Vdf=5~S\9 H*bzfkʻ曱NrW* ɫZg|"%X*v)`^~Eq# G*eĊY'4;A/.VKr$^Yax }oU'l9E[w?nQ}ġ6?ߴi~2m4uQ{JsUCs=W nZ~H-Svqƙ`O~/J=*?KǚF_W[L0|*]yUB!?$\)v,o"=%'+E.,0lTɁy}PO.ohC~bC7ĝĠŶ3yX\w#O˷^{)v f5=묳$8@|Iebo-VxH"U %\"z0Q$g9$ey9‰GΒ"_Qf&|%&vnhj:?-ʲk^%[g#u#l ^u57qD`~_ xrJ;ҁ%~.U!)Q$'E1b3dر 8H>xs?7,'ڬߦ5hU%(q(!\Hj+(te O3T$jhKqv/=?,wu6Q' nl_a+]$,JaHڴ9;ep;b'I}ܥ;z1i$1vEEM5ynG#meIL6'&5f'b<fnFvu4JocϢvFк1m<γ66J2ECy"Ε& s[av¦Ɍ6?OL'[Dxug ijďU 1Iyr:ā. 9a7(ZcR2}zo%;iŒ=yo%r?NOU7?`5 %Ư; FkD<0ހSdpɛ5ˮ%)pIÌfpHE2rEާ&7O^8 ^z4Zk^;:Tz̿gPyߚZ^#.?B}PI]"IuJVBú"5 tIS^БWܮhYWk?K{DnG\g.V?a3Mh4xy6ց[VeGJQAջoMU=z=R0h 3q eV>5@>HL@h kH~\D)gNAKXC!{#7qJyy}Cb5NI)F9k;^zNCw}WDBV!pQjXjw-3tVNXie:k'hyk rb-Td"wҖki% ^WZd FIV(?S/N={~+ʰ_*<%?OFνJ%#X9N{@G=Qw!p>]cRfiG* HrͬSxڴV8hoz{^a-_&߭X-}{~|7&^$lI4p%UkYi0Ѐ0롞1W2:)3e̒T hٕ#MJa! v95(^;Ȏ2yEf8_Fz_T[QZ:L^0 .'>fUP?VhW6-|Ezor?ύޅwX ĸ:++ɍrK`34!1rj3OӤBs17HBHAn$qFo\> R"haب4槚Lf&z/^\&y_;@OR[BRp 1UC; }o+N\. ;6V?g*|}R=%5+W)YjT:>Ζ,oCzqAT[pv ]ed&AZO/RII@j藚=,h=n7'y~E#>&#FZ̭$>TA#!Cg^a.K"Y㎉˃%W7!Y0GSSdʵ_ޘ ~9uÕWKS8q`4O){춋lXձӧK) 3ԗڲ7tR_?y隖n"hrKaqˬEn$I5B#=C0 ТzSNg/IN_NaFN"P ",C:7V# c\.jAHR^}~98XEkiph|^DMAjn AﱻY\R6q頕[sUoX=#hM|dޗk+sWͼGOIO[!gN,3R9$<|=O9K'&aqrqyyk IDATZ R匯EVM4+)$%7/eu:dϽ[?++gk4ݍÕ"}0lh(j|tfko"syd߽5A :`АΡ[}jy)R0d@Uuhv KړZ=9hav)|hQ3KĞ=T GJT"x7r"='ו_;Lr7jLO9I )+_xIjȫJ#MNK.u衇b*W*!ţ+Td~ש1 7 AcӞtoXlRíN?՛N^>^h#0 ?4-4)>7n.;qcb[/ZHq9dFBPg _bYY8UgKW"wnBs~h 'TyKvEDE&mW[̔mj6ظ a >[Fɬ3#H?8W 5hc+^\OM>%x3GyNm_|׽ȿ'd_뻣#/>a&uGbqEm'mdC0u3 -6h„ ȆY$O?Dodpo xĽc)Ň69%%#G{ cᇅilY+xV.UR8LoKVY"'4?MÇǕ?uqAQ&OM{Hz!,'2ռ%eUR]tUG^ИkQ=ڢ-VKr-S .iڴ_j%07 *4|}q6N?TɌk(PmC/ ȱ I;NWogK`InsrsfV<@[oT/\ֺ@]Z@R7kHݬI;%gt!S7_ݵ 8™ݣ;GA4^nA6M,$j$^h|q#.μ\ Da^r 'ʫ_nsZ ݴV7Mʢ0\ceS&C>([rg*J%vք0V~ȴu"d 9 |weȉ"gF?c,t 6檰7m\kLm ]I\S;oe.mD?8~}HX1.WrGcABpmadg Qvl$°wuH\_Q$YHjVAJ}ssJU&I]2ĹBR*4n]OeAH `*f" nVPA/*$pVzP.`QJ,";nWDo<zL`N'V"Y'%ݰX̄:ّv<18,-Y&z5.U*'PqHJ<:1'Mz! *"p1w< ȅ/wJ)C^6??Դ,R6YuIkX-9%}_2[AW')a N]luH~P 6.q5'u#b Z RZd5Zlq+Ժ.AʓWݾ ez0.ӧ2Vլja*PuA\EbiZW0pB jZ&JfJ_EӁ+xm/𔎤DʷYF%OSyaag&@%M)f`Walx%=T񇩚})qJ#u4_eo` |S(1ئ◟LG;΄TѧV؁kqSxd MqEJ>i%'xq9¯! j>\usy5g`o%XQ|"+c"0姟j #έF9pLWT1zZ!IoDˢ&1WdC97^~tT +ZXB+dhjSm>&5.-գGN҄5ےڞe@+k(r'zoo:C~dVOU+gzhM}v_|=aΜ9m6 [JYWL Y!**eʔXIQV'E(G[jK/,UϚ5K4,%j]H_TВEWEb+d͚ߌ*V \_V;@Od5VpY6z#^tVE佃sV6TXa|@߯&1Ǒ*,qMĜLdIQ&{jvncJt33|'b29sf.y3Oϐ")f.|Ǜ88@(L(yC=@x/_j.d=7&6^z U1a 4OxrkB+/WR{T:Nͫ+3K"t/yB+\zJZ d&X_Jf&HZB[o!!`lsNh'դ`\:-S9lf~#˼}Z j-Jϕ}%*K ɓDUryKJUվxJKJcK+hXAm3ZT~Z\hA|XL3 n  pM3šI5ĪUaLFEگ7 <+2ʮ*@C2]"KFl2srޒ䊌 +eB= {7i /~p$ڴ8ȕFTХ^,Gqh +4E)~!rpSNb ?dXR"+WHCVa`$ CiPiZoR Lo )U3Yd1%m.I"jZ$иv,`ЎA~J\(W] *VLRǒ /#|hPiZI ZQU{ݕ cx]\J֟d@BM9l '##S0,֐B4 `xj^0 2 \6gd?4\p[.%%$ˎl).8¸#rl'cD mY;mq-*p!w3C-_!u ޗGkm[T /š6nzh;6sFvN*M+R@l+?hkW=Xz0W闷Һ…Xn:2$gSNn 5ll*c«͙&=2$9R3ֆ%Δ@HoCM1&fmbk U\W"ڰ$7ˆw. Uȗ{_mmt .:{晣% 6, t剡V[xbOX$ۗ)0ԟjj?uB K"1ӥn2G'&ZeI j4_|lq r_!{YKM5h/•7@]8#B'YB=mUO(:NWN\+i6, l. <5R4aòY2¯$UUNibh-zx_6Ljо#ㄘFnb63̞gz ɷ)4_x6oJe[\[Ri\/2w;% ]ki\;la"1Yݜ&xےSR܊^>M1 LksO+ܮfw½!f>pWߕ.`uژUhT^V~aRV4,d<(njm+ᒷY|sBZV~Xh' X)/8_V*yL_RY msf>Gދ[$&9B²6, \&e ޻R*{$t ]1GdCtix2>$bmXh+CX{J><$\b6I:.jZ9㏑~lVHrֆ%+\6yoQeճ []Ⱦ1xWtL 6, X. e3HR߱VC]WpȀ_ŌaX6pkÒ@'Iv<3Ȯתr.eVY Syַ%KÚ,o[WE4+f a5 ;f2Zg$`IE"vڲ!]˰3:hž{ÈoV;*J9ۜ ѶA5xqXUXd X"4.ʐ1Ga0T%`6 GQlB, lixԔ>6LKH6"i)F u;S$VOے^~ejgvoQ puUE(+%Vљ;M(wz-[&O>D~ywI\k}C;sZC; KȐ!CȞ{)^{|gtpuufju6, @EEgcܵ;/"td֭[',YD6mZwZB+!qm֦:[d?DkKVvqGyl7W;^j{SS8qN$P1魦iGgR{ʢo_kbSy$??_fΜ) YnLDq/s̑#u4|>ﭕ̬h,}_RЋ*)(0^k Z4IFvU%''GRR'+++Ct*.Ar2Ty#V[JrzcW;En<}HV~y}̱2id}wjx?x JFOI3p(^.? >B2?$S w9Wz +*3]2z匫% 7ܠ4Xy+OwZzX\U*4 Zm=VnvSBIjN=u"@kR\Y蠕owV|kvDAkLVCSRzjq$.6Zƍ/çTbC2 r1y5OV?^81yy瞗kA 8OJ bP%k^.\>x/2h xm5HOǟAqenhng[.f?%yrI'?Ė)G<qWPX.+˿LիWO,ޢ5k䩧;MƊjmz٧ҨeJc9YͱH`ݝ5_)/wK7kLQ4d ER݆?^vyBINx^̛n(>MeduХnͶ;+^ tfDÏ?%dž+-8a_x#ojDE?99Կh. HlKY" $di-sɜ9uu8SA9͑/seح%=YVE:dl$cG IKD;%m&6PgMO7@l^wr9ÌpW7a w ENhW+//OOx8rOU4կsorv;>Z<'h1*״ HF.l~KiTKVFS&Cѧ|,%dq~+Vo_咾Ӳ8DYXȬY:L;vl[eQHqkIԚW֞b/{巵AoorIZ@k5"Ii5˒%K+\ֶ%K]Bpud5H7&P~PyW+>ni;T=qAfSOmrpm, 9N7]FM>]M`y*FH&&t /;m!778_+K-70,g!C7qBbEC[o5?Z2[. kےfMz^w]zBf&?xgة-1^qc|p zO:U,X GyqBE曅oFoNʨ>LߵQ:p0Un`5]&hÍjV ,2V_ 6E>u(..VK.U.V7_|u# .@wvioq|M=C: ᨣ /6AGkʁ('//(aÆǘ!?T矯4!.裏d]w M7q+B !/_S޿KE~ӟ>02|=SMN. JehVp9J'mL5is1qD{a&V6Γ}Gw}IQ&O,;ShgXC!}͞=[8TEԂ|̸=*w߭<ϪDj0̌ʌX1aȐ!lC-R|x&S"1H,sZҎd4~"qAר]ln)STV_CVXX(~ޡ m~7Ѐv#tF 7|csgi5S.yce#ƨ\]TᝌWEè͉žXu5Ũ<ڌ1*6V6evj04Wmaq~!eUj x饗 &vU=A0 F]]GO!]ðSp6?׮;Nή54dWm? 5Zm}^paoT%]5.~務'|Bh[&oKiӞl{,kMͿFzB~ U,>mtpLAsICϫOcGOm|Ǣ[o75륇ha!?ʕ%Kv!QVѸNR3f矒y$8y'=a6M(<]rxTڻh[bh.L;N^{rS3!ZgIv~EMMnGU p1G'@rA ~꼑ߔA-s8$Ўcݢ4DՌ3OMA⡇Rh6l%.1"df[nENࢭ6y-Aw (C ~Op\oQx$Qir3$}iP:cQ ,<_]rEXa7]'h ׎t>jwL'5瘣 RgmMGx>)Vq~XWX|Iwi`Q;6CpbᠥBm$9pHG Qk!`RЉõp~"s\-}n.qQ?\U6=rKJ2-+\ֶ% p)0~8}O-G2DmC{>2WʦsqicFP2ZġY6/97t6, mI BYc"mpjW*48tՇ nJ"SӔ2ɘ@b!YJl!>1 5rH.bLk1'-p8&h}zZTӝF@rWn C6“njYp~Z%WԨ0ru:13TqdCR[<#yBycV Z@; A-)A\ +bc,#rr NYW%%,̴6**L~T۪\@@2ڎnEiz׳gA%ZeZg<̘26o9 ,C3-i*]Ns=oiYE:[(Tc>x_f)m18ZvjIzgr5\!#[DEe_Ej;)uks͎.nc;f7"Ί8gSؖN3-)SomMɍRXĮUOŗ\-##ʚANg:ɽ^2j7AˢC7u.ZrC t+Y M4֏xIg: t=\Y@@ '3"}东wꩧp.6ƌ1^ފ$ :S~E|5LClL*Hp(j#3==K̗6KLbUbK)rU":4+ ;`3~j $ $QKC˿ cBƻ+ 2j( :[}u+i=toKI$g 3Cve,;M/Ő"}ov*韾駟wBe.epl3g*wO<s#ʡ^0484^bAgc׮CZ- X0'LSa h"Ka2c 9ĢS+*icbXc9$?5$ 7,1LgMmN~s_dXZ*\J$!>lP4{g`0=Mx*e1f22a"Y6ssJ҃WLĂ ׸b"x- t qFM#̞湏6TB-v/l4X׭[3~a\&3 uԺt5!%jz[KMPϚO.BMS$cmдc^%bӪ!oV_LT%h8g2OC7 ġ8yhfnü̩O%1?҇)H5HeίО_ƺˤ2 a8ѶƏNҘ*++jzTyS\8ۈșɅE{7[.;@_6}\زGfOiލcU:|rYМXKˑq9fڼh- Y|n;@uGk37g"i9gQ6+ bӃ\3g.+1xn%Hx?&u(Hy|~P<)jBTJ4NEZC/Y(#}ZqD 0Q71i']#יlW^;lvm3"b"ޖZ Ίdwl[P=.-`?Q.^u:E%NZ4^趦F6PVgJZ[bu)|s+|w~Jn< h7&g'ƿm&Tʸ.ɡV/ ^)‚5w7A%Vlp. ?s2gHYI&XGQ<_/J-1~U@axlꘆ MBĹpOS!?ie`N3!?~4d2<ְ4Sm囹MBT~i\_>BDLmZ w6cѬᅲl>B)꽲-kTv).xܾ;tHnfꔌ4^e6:ϒ@wmZR"h6oP.kѹ@MBOfV k*ɒhx5ig52VTBjжeUZL< ;R6A 2bOM˔ŇɯʮF55==nYIY|6Ubh[RYj6~ii2b V,[f߆ Hrg6FԐ@E*t, ڰ$оPWn R*M3&AGtMPʘX-曤tL{Pr,^:z^{`-KO.D,H 4Zqa ':_vwb0`5xt+LN@d &h:q"F/Y&]%&*p!)V9O^J'vw&-MAN||} oc{رdƷwc\fH>]񚒐VUcxfw"]gC쩧N4<3E)~kP4Ty=nd.U<.B,aw1GC;o@+n]`r.d?WO 선+]/8/EGO@))QW3UQ6Bu؝]oTTVΌ̞3[4UP$#?kZx;(ۉm+bs6_u4epe梣˂Jz O_jȌo|X4-T.ˈV6ShՋĶrzq0d\6mիr$I-2 PT oKµ-b2#@9жVXFDIUlt8Fϖ@k!)NIqUMEI]kرHcP=XFʄk)uhٚc=5KPU` ~ݍ11fETzYH'YhL x13`vJO9YAxLDI\.uOM+=!Np.ώhl;(xa_| Y,`c[C~fWc14cL =\ȏ{u_tKi v1˄ y1s yUȏgiY8TOc3sjF63Q1_7}5t7"䆿-JB';Dΰ$e$@M28HH"Yȕ5+aY'X4 ("Xcl0-(Y'Yd $A=T˂>lZpm- t3湑{%uu2v׃9;x8t=6jPBdo$Xǣ-ڿ`'͇OD@# 0#<7H|e"M$7S\ 8O5fkk3Lb媕ea1Y%[ a|#^ EVIyxƔ,VFlE%R}­'*iLfWUѣ|E$̈ԪuC"+Zq;7Z`ІOQ^!mm[B+MǺn:U"Vve7\֡*@Ao Ng-TWW?(+ 3BSKifZa[OIDATdgRlY[ofxMQM$GiZiy =[/ ӎɵp,3L7?Qhc:7M۝%t鐟~2#o@|aS <6ZS!?ȝwݕ@ρC~vf:mcȏ}eq '䅦B~RsW zYTk>'!?Я-D `w#Gk:jǫ7ڦhjG&k%C $n-1 w=Xwy/٩]5d>K[|߄d`ԴH'%Өq%?lE7l%n/fJmbٰgalUKFVV@.KAKA prV;/Hv%#+ [(pYw%-@(TU%NCJ9WKZ]2R:,ndbz_J" %._\pQ-C$`@:iL-,$[BxR>mFd#g9ז*7ڝ^r)]dfkoen}=Wv;|(GL9.陓*tv5/aXh'3X`K@/>-A& 8|I:$V@@0vu#E˒X ? >T 1t] 5;_!_TkAS0sּnn;!n\P\۶Mlw>$<衜Z(g_~YaLy#ͻ$)11S>VsRí٩k, ɴF}7yJs D7G rp$2`kG20队%ȯX+\ $Y^{ S\~t#O-t5-j^a#-J}V5V(B/SIENDB`ga-5-3/python/docs/scipy_11/papers/jeff_daily/laplace.gnuplot0000640005473000001440000000114011604000647023070 0ustar d3n000users#set terminal png giant set terminal png font "/usr/X11/lib/X11/fonts/TTF/Vera.ttf,16" set output 'laplace.png' set key out vert bottom center set title "laplace.py Strong Scaling" set logscale xy set xlabel "Cores" set ylabel "Time (s)" set pointsize 2 plot \ "laplace.dat" u 1:2 t "N=10,000" w linespoints, \ "laplace.dat" u 1:4 t "N=100,000" w linespoints #"laplace.dat" u 1:2 t "Solver Time, N=10,000" w linespoints, \ #"laplace.dat" u 1:4 t "Solver Time, N=100,000" w linespoints #"laplace.dat" u 1:3 t "Wall Time, N=10,000" w linespoints, \ #"laplace.dat" u 1:5 t "Wall Time, N=100,000" w linespoints ga-5-3/python/docs/scipy_11/papers/jeff_daily/laplace.png0000640005473000001440000001263111604000647022173 0ustar d3n000usersPNG  IHDR,2PLTE@Ai @0`@ԥ**@333MMMfff22U݂d"".Wp͇PErz挽k ܠ ݠݐP@Uk/@@``@@`pͷ|@ ߟ___???/n"IDATxڪ Fi߅7Gv>QYȌ gR~al.'6i+}cf0MU!,X$FjռCwU>0MbQ]8 vf 4㢫F-_)nVGuܾ,?jZ#6S˫nޟ}e4tFmhn'xskfi? Q㭍=lY=`jmuUm{;T9;@=?W;q*#K)`z|J@+]nSXz>K@ov|[_@p9t7Hu@hC;l$,}JLh6ffLrBo:Vދu+Jj2qc:d[Kͤu+qjgfL6}<^2N`uK3 q~O͉[ ?LW~)$q4c 3b%z>桊we2= =ޟ>Uf5bkSЫLWFߢ$ ]Tm33nÅvۨ13`_~ڙt3`hj3θanU[G!wL6# 4Xب{t@0>kuc`=m8.vEX@8ڛ};zզ[G*ȅKIVnoP{GjAjrעczS-fw Hl}"b$$X,";ucqg7 B#)mpInHF?PAh$ B#)mpInH8 uFR9>B#gLoS BzOX ׄ*8h/5 .Lo0D& 0E*I.ӓ`)I|``j&XNE 0\7L9P!H7Wc(Pl " M: ,Y&)0 " 8 $F! S` 48 5_v?6)0?˕n`b@""DL,CQ ACQSe7  Y:)k8K6'K[!D(F|#",F(XAWX!x9SҪJ*r#o,+i.tDI/%!kܥ@y7݆{ A+%7@So #3 AxO!V`H$ _>㜖y+7*Y̆q5\z}q4vv9Hz. A|ߐIIn9$E@L#AKh!3 nIݪ'@ "Cݹn &^Rl/D?@Hszv;f!WxƱ?{-pDmŻ쵷3kB BpW$[UvH=kB B+gV9`RZEj^z@3b(n B#)(pXaBj4P`הj_{.J:M܆ be|_QT-q˳B#)- /4BޤEKB#)m^)4Bv)~H u{g#B#)=HIn1dYFRl6ŮGn]y;jǕq:3VI/$kBR=%5.Y=eX|H0tvFKskvFCpVuWi٪A-xf/H6\~ۃ~gSV}$5woZP ؓ<#F5(HIn'G PϓMXh$}lW. PϓmK/]X\"eEA5 9H̱s 8='#=[d7>)гԁr"Y9Q3Scpd@HVprR 0HRu4p\džnX@a˰0bCt% z I D@B#)WH u;<(4Bݾ In_p`FHV "B#)틐We]6,4Bݾ;'d ypc~,|V{;!@ݜ&Nڸh$o!?6]/t'hMۙ]"oΜQ=m_z3] {9!sT8/7ۏ A., z nnV T~]a\82z)#TW0 YHW/ `o(\$ B0H2L)Vcӊݩl0$uvInGb.`0Ҫ;O˖Qy&jDh$4' P}vd B#)itBGnGfV^JInGƐ]2InG\InG+5)4BNu1! o8 u;U>iҿړ+ը{tj6q[ޖOs[Ou![a,nړ(U5W% cwS՞D`U{K 瑩="fW옺![a,nړ(t?dÇljO(E u{lQ܁V=h@?=!k$中 s se/>l9S)S4 m-o'M%<\t6i+(WsSRm2G7(jXW+?bc#iGOOOT&{ uek$,ǼDTje/DoѨNwkOx_nXe>TJ{RgJ@{cd5-4Z[pS#Bêk2nkc ^֗ ݻ:H%B\/hC쑐u+xH$ͻA4wNc~1Ig$? @سaV#!$cjFB`Ay#u̷OZҘ_)6Lq{ ~۴s$֗v <:[4xBѵN֗v c-ӗDӇnѕոb3qgNQ5=p! |b3q` my\/鏃Vk<]Km}iL?sDZ~ϠCSB`m  ϵCzC݂iC`'KWGH? fVgm/c=?]Zš=eȱ`?1Z[wlߨb ?H[#R.Vxuk%o)X k|Vo|;A>>+f8Kq~FO>+x|K.rg%*o)|V3^!#|Vok]w_Zg%}J,Y |[?`u׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx pHYs   IDATx]xE>7! %^l]b {O콁RJ %^?]2{sC 3ϓ3gΙ9s材@:h h h h h T Ԩ&Xlծ]6mzN;V9M:.*%(+VڵkФ1ϧ~0VlѢp1Gee'yG-[߿^ (6>gZzcZj|;MYYY 裏ioI:غwNz(KdeXdIbhƌyfҥ yTfMOБ{"p?S?>5h@*nݺdgϖ\<(1!CҥK?T\?N?t:CЯef#޹sl .LzaR$1ڰa>SΝ&]wE~-;]($Űa8gu8蠃NMz"))IhYO_atGsӧYh֬+IQF oѲB7|sX\"ܜ{ V?Y;v̏j=Θ &MdVqƲq.CU'6~n!Q>""KDQQlo ED'ʼn~k>#nae93YfI5k@?.s<}!7҂ hѢET~}5jn"=#zjǎKhO0bۦM{NI  TeVmٲ xG'tuAe*$# aڱBnݚN;4cyX?6p@JNNrsswߕO?$Yc oL0a K#;;[ 6m"7|#ׄ8 Jxx{gW?Nb={$mĉuVY.<?G&I;8FZzrz=oX`ǟ֭+)SQwYbжm[ 46G8>h9NYaa޼yr&_"{! iҤI?Cg}gKPD/zq>X( \o߾x,?PwbN/1K ^ 7xc۶mR*k'^2hx̘1rd?!FBDy9#JDa ftPl%w!_6;}t;wnXqu 6oo&N*ڗ^zt9ceBt Ndu)ΚMrw[uX|9xrȦ@i{OD>A۸hi#.Um#~V^֭['n+#S2{2 JLEVmQ\\,ӰR<=F! :̗M~gP?IÝQ` g.d OdGvސq Z2kwy\cN ,sX}:IٳI .HʁzD|ߕy/\TuzL  /RSSϤ²`*|c(2(<]`Q5:.:*L&7t\7&(` W<]{>V\Il3_{ltȔGHr`:}<5 L y]_uh5DkzVRZM \SI`8#CW$`8vQ\b'zq?^sfAhlt Q3=!0OL:4f3fu Ad4fQ *2L3pfN'F"@yՁcaMdi3^{5 03zxb;d6a/J zROAt uN0E^ϰ'eW>1h7xklNqrtp!c„ r/;G{}-2摏|7w$l"khڻƍK`qk.pz O$aeډU@FxOzzt ;n8gbf4_ڵk't)#L!/#YRJ0B' 3qϞ#Ŵiz${/"ݓ+5>J5zfwya=ςoYTm u~X9`-63qps*ְQf^kla+3{ |Oc|ƚo miM+`>W- B`L XLޘDH؜ S;Џ?h kRI{M|r8*lq{!G)_u'|ƻ`=%$"5v 4Q a:Cz#kd fpm)grA&1{{'5A07 aQ>y`J\cUպwzֆf5+`]T'X)vkq$9rYhp4R"e_c+8iEϊi*}_r<"lI^ -ˀًS 5n%!5y>De},uUd+̒I y<{Fn1lfbsK<+3xսی amяor 3/kgNqbY[G:=ccX64cSũ_qjckl03fF\E1:=Y%1{3( 6pctph|@Z?S"sfM)ZIb3BKq۷P!E6[ J~>ѧ (A+2Q | pZ MA̸pÇi ֱoAKx#-NH PC 2$\yb9ԣE_pt,K Uckb)w~6#f kJ~oTrquZZXZUE%M{c2k h h Tc :k.* pAQ6z r{"7y bS@`oٲ5l'e|'n6rčƈ#׳g/65z)4h[YxvI ^Zl\Fޝ|>ݺPDZ ~FzG7ߜ<9;Yig5vA)[y}L֭]M%EԎxG=.ZڰLӽ )`%RPȿΗ/s-((/3'>5o[%!vNQx۶PAi.P -CmPMpoO[ʨ0ϜYK1Rkz 0/N;RjI2jҸ!ի߇̛;ǶTno,^ˮ.oN %ڷW(,,`ԼYSw-/R(5Lۄ2y;ZE?֤q#jy_o۸q=mٴQ~~4g6o6-VHuY+QjPj}0lWZMONx;.Wўk|` 6<|(;!}Ć1_ь}k~~ޅ~l/zxMxqlB?<୨1Blx0_9G@]u\^2|,bvwPD~^{U\I-4uII)[/ΪǔTu#ł?5hw$:=#3jեRacS6X?rϦk>f%K)>>Qa*p"WV{2*܃} *?.~ӹu (KbA kcڙۺ6޹о=?=L {zʢVN}j7NIz%9+9 { Q$:/DtGe-䧴VN{j5D5I fN) (yT=n\%ҨWc<MJZQ, wrq[Oֽ=.)A+{9:Ivg)vsv( >PrMj{8fxN[7v_vMjk04L%"n,=#Z.9ȋ̙MO=_|po/R {t 'CJm z3Z#A^3* .:!s%z80 sQ~㹃}rņEcO-".1 S6}3mskD5qԄ;>.bٗSV-g^|>ZfpHB|Tj)yvV7p#'I \D>O<Ժ]*5xqw1c=̬IS￧Y5^~ƴO>9E I(N{yI'+)6RCz㢋RnY}jmL:*ԨYדv?Sh w}=i6nVj7Q-RMkhź\thJJ m[1U*:~Օ訣˖x1t7~gQ6ֿ:q M~HΦGy3[nCQz3}yٮ4ƃɓߣEcǍ7\ceW냁? 4{7fz*yݻK??~M]Ė[ mIDD*iH)"Ht pt'lY_^i=CgVNt?&Hzq;e}r󋉗0BB2TC0 ~+ּQY~V~+:,F;G9 y 8 MSI@C/=gx0ً%%%%Њ-1Ms%%%%"\SZ%fi\$G[pvuaEW+C3(,*43A]A.ϋ+-  Yl4!;1dbYyOwU AxsA>{D(&@ZH]  歷&RƼ a#.,8ʔH%˩l,ⓧ+$:j, UF"/f(|seջs*j%Hqsb'1b*)apĜ*ϰ+`1gVOəN|Cwߪs$: g%}Mƀ[nIY.dQ4Z؁7|UeսMJFOޠ*e@T\9M3 v,JO{jǾ|<>HBG`dϣ F/5?@ lËg`5lP![/ZR֢eK_YX؋ݺs|Q@"SYY|9e 5ލR>d#tTRn(Q'<8Npuc*ɢp;Qf%Yy6$xԦ>a=Dž IPU"6(Tc0H : 9+R-JӍ+9#W=7yIe6Z1^en G"_i7ZdctPZPENd| 'Y>QkyʷR:|bZPR#;QGE5H,{5l th>fze|Y6sS*>1|B@N`cJ߾}}88/4l؈%YlܸQ79_x/a1Rd;`+mkb6<lmvSf2E6$2iv PbZkQ(Nf 58a)Vx"(Xv3zT˷+h5RLÊm IDATu)^$X s4̷`3QIksJ(Zj!#bd;VpcZ%H[t!Ÿ$&0R(GC >Lؔm1\7O6p;Co@;bQh{$DK9R)iR˨(df akloV{C4Bݷt*aE\kNgqOk`ECOXNDM~]WŠOXÔ";uATs+g)Ѣ| <4sƆ8`|%oM/=1hk15?yX$" 7P?X-_dG嘇 XI"] +2gzJG #`EnFe}B1|T:_hȭevVƊ n(ѡjX%ѰV嘋*X1sPH(+r-* P>n{JXng5h-[DKx0- ()O@"kuT$"j1X-----Vl Zqm----g h,%%%%Њ-A+N%%%%,=؂łZ H-5V7d[C'WmPog6]YT}Akڞ%!Жˍ?8X~q :XUK٣ x8UlN2P"VxPcfIl?xa!n: Dw3jO;4{1AJ[Jvc˨%D¾eTdQl..ȥY( B6 'WGYT. D윅[l<@jiG wo *,̆Sx?7o.uJb!CX2 Ǡ,NY)JJ)Cg3Ϩ>q xx߰^*RS6Ƌ5q'}[ԨnWQGaS7 ~&)q'jPI. VjzcEo2&䔗@W_RJ,l߶26IիWKw7O,[3 펝;$< -xı,-aӺ_M͞)кux/;[|6o"Z>0:y{Jc9sfS鬙tuUkhy(Q>(H$ -D Ж2pDh`bxOQb}M 1S-B7t+\pGc!a6?R]SV;5M!lHd3Ɵ_z Fmv0 9$R#wJ`Z^֙_ g%.ʟ(,J|\Hv*NPkI> Ֆ Ziɒ%t]2%3]~k'+K( r j԰Qyi7pg(ᘄBR Q5bg_{%u\ZB r%t\*t` nj,~ "EDJD)c !Lo؉ R xq@MpD9 };Hno < m5$ m假JjJ2l3O*TNў&Qo{Uh"5YmOa؝ZJU,KF;^?.GԲH@jmM%h 'Iw>~D.+,IsdX#q_Kg_4lpѓ&I~Jݑ.WZG" # LwG=h5:vL"ū&MЈ#LPrd= ҋق ż@jlԞ~g ΃OV70μNNVA;w[a^A[3yQ/--~R ՆBSV^EW_wrhƵ*AjeAy3})Yhʬ?7 (DD%%%%%!<i h h h $bK:k h h h xH`(܃SCIn2` %/ ȭ4RK{ x@""ʣM@+M%Er7ɻ=v$T}RƁȁ`OS llͱ[! ʪ^*St@Y [3^uyA&PAtcVePHAV+3=˗/w4bwR{6WpJSd2LtZi]-ZH2a_bDX '%6@D[iСUW䀼󾗪|s<`2Sz{VM5ө]v{?xQH 7YBTv9lM$Z"2ܩ2G_`Z#LQFM}(-4U|IPf#v&Ą|iAH;[ RR@pn| 3ƎO҂Z>֘1Qu54iJ cc(ߥ/3+oeHY$䞟 g p>*ϫeZ, IsR`Z(_3%ZIya?Z(TQ),o+!E Z (ס}~R@+CjQÕ! 6\}l>FGm@j)c1EDL4w4Z?m@H ߳,-B/|h;yiWTLK!D$!la|H7VvL@wg 8f]a͝L?H hŖPVldZZZZ!Wl̑U=Y Q6jCsPۭiOvEr@Z]^'@UQ+6k+^p<-A[5I'Rݒ-VFt.>r7*H&MIqoF^$ mZ!T֨$y;DI.3̡/" P ATZ|ӫ,*@|DD SOfR!*k$J 4mbvǯQ7γ?E$Ґ! !?AAivgmo71 Ai)!b*jYAaTj'xԪ'&Q6D%gvQB:|#tB-CMUQ Մ?2js ŋ.:dž ' _@_/;]v떭T*۷o0Y*ౄC@ٶogDPʨ&9;v(!e@*|ܱ0Vl ^*FqYƝ;h7t'O?Nf N,%ThK Pϩ .哻/FL+wecZYAYE!_*Q*dB+&,5Ds 1(ށrfx%%>X"g%l@%w޻7_[>2Kub$ \Q?*uvS opg*\R+@ިz6 o+(G|hGyVW]HWRjv,I [?WS (55U!'LX_6bjJ Z@g0nݺjԨAu2DϮ|Oء` !))L[U;--ĦsEC3r+|ut*Zv8Kbo5TY>šB@yɤWPɜ/BáˊYAp'^ǩpf2 kGIJYV|$Ѐ8/x.`B5(-@`Zdy; YEȩ|EX_`e̦]@HRjZ:U^&7Y (EF"ʷKJQ'̯ѶdPZfk*j9DƨBjX0aQ7 g% ׺LeTὀ;QԹUNnNQɩnRb)A iA׍ huB\2W,lrCujogSYyN%Z2y;è7pZ=27n+k!kex4 Ǝ{H R2Ժᆛb`3g S zw s?uI%[~=^_fhz$,Zʻ[(?R˕GI3Gw޴e|;p@!22}\j=$ Rˍ=CgLÆ w~%3wcXZ5iqG#蕗0z H73 +\w5RBffn{#chAj |ﴀegr}cȐZ2uurÀ:`/.i9a#KZ h \yvr4g]&ϮRv8<RaZnZu"[u>Њԥ.K@+6 bVթ %%%%nZZZZB%nIQ+6Tp3,H ytU>#_l0=,MeXZAMž4#񶓏?ظoމt AB!vK)/w^E,fTذmF58L s|5 p q~cjʷC&+Vfyc;N0Ҍc/0[Fq7@WfYP7IצSRR$If+|?Q7оf}ģ>؆lbRG%ޖѨ RlACɶT+#D2,ӓ'5hʫ+Aj]ut!5i}3aڵ4rO%;zZjKHS)Z/ .  Z~2Vv|y4lPkm%jz5zD͉,Z΄+!f~+3Z(ϋ?$:,ZnZAjRKM9֦+Ac0O2R-a1xx7!g@/-ZnNZnĐZi U ҕ ^"eH[ luve}re@j~~Yu}+j}$H-RNb޻@jh?e'13ּNy!kl!l ê!T(jZ? NNnu#A*Xe`C,tKH !%'Bi%4@"H@+D%ͣbS&g ,Zs-)o6N۷i:h TP!>zݐmN'ߋ% D)BpTw܋^.`D+tI'Q۶mX*$P(\DZщ7F7~ZnZMYV*^zҤI$[I @eANF:#8Ԝ p֧gKqi,RIZ  +V2:I$R2oԮuX 6ʷe0Z~C/,Ԛ(ߝ[Rݙy/Z̻jݨӂ*)ה۞!H;+^Z.oʧ",))8y)V#JM-t9Rn]:ƪTŠ+-Sa׉[ ,X@ݻw&w[nϭQյkWk5֞Bu%<2qyVTT H SiPb˗/Fy^c4 *uޥK;}eգ <\ mڴ NsrrlZr;zj+L+"+)Dj xϑ;~-----Њ-4@|K@+͝@@ hP`\K@K@K@K %[|׏NK@K@K@K b (0M%%%%Њ-Gs%%%%PZ&^ԏM̙C}ekO^u_~@/rU>ޛOlCf͊+ffpه BK.?su@,>#IΝ wW$4b;8jѢM8/B3f̐?s5 <.~7B@V93 h2nIDATOiԠA:{"*:ۻ=?O?9B?^O^!Tt#8sGޥOp *?#XQ(W!;w.Ĕ)SLr { 9&JaiXo9,nod}ر, "ЦȸzhU_|Ēw}ׯO'x-+_d3aÆ4N_=M:0c fWkccteE$?F K2x`be'q"C-ʓ>hdsv@g{=šDWv1z˖-r@77H]zz:viԮ];wL6{)q϶a0|5gO&H014=Œ8rH 诿:(,@1.ٳ',0pI38F--LU]QiG2(o:bs~R  }m۶uO]r%ӧO'69r52Nv<f͓>hǼȫZ:`y3U:|es^|~{eW_}%eJ٤ye8\? <'OҌ; =묳%VZA !~,yn/i}l$6l"Yvpx,\1 f 9c/Xg]tEp^ٖ1Kc ՜&ᰁBڻO# +2k3ho[Řd`|뭷0~Ċ\߳OJ_Oޱ)vd} :v^)J _{od%:i?W9бKP=}Gr=nijt"~0JNS᱆f[r|م_&2 0gY!4om^#}R7#{A;'x"lϚ<<[ĵES%/Op'/(Dwم`w )n)okQ&LeE}z `Sƺώd:"W^yD'M͍<+"^oЋ5>v]w7Ӊ,;󎤳n.g\e2Vݝ:ule:]\`O[.x^5d^5jD {^Jw,^ҎTe $J0W%G$3VdIG t< . Hxeg ?(ݻtgC=MaEz8]s=&!9^0 4bdOJ #PXQ ͜fZIg}[$ {,ٛС`ˈ_?yW*ȐyDU{Z^G"Xg$A`t[#Gp0(7|0=#F]~=anZ9&8# ʅ'y,7M9/Xs̩րːZځ^ +==Vph͵ӚƫacǚOO$-y`;?ˬ΋RUF`G&SՄѦ`2n6/U^Θ1¿lRP WdI/^,7N^AW-6=nkl46 H2 62*e["XhSd,`vAc}w*\@ABK@+>ͼ]iHh hŖէK@+6D@BK@+>ͼ]Z%X 3Dm@O3bx/i{\r"K/~g/hH? {K*ƳѣkJ(??LCd7#[CN͇{م=+ ˀ=qD3[qw8ΰj &?X֝JP4 ;8!l5xC@^o< ୓k TK N*z뭘PtAayK||/RpWB/AzM7IHF@JUxH+Z ^ X-% pcoO'tBL9;w)S|QHEy䑂$J +: ڏ>Ȑy\{=o ''90o},3,{Vh`ܰHOʰGGkS$u:h I(%$;V#WWhL F8k#m d/fxNga |Dbg'r3GVe gz';0~N=T9df|&ZB;¬˰7ژWqH|Dq=b(6L e'"h_8",l4A+hT  nC`7%x~t?0b <[f?iҤӦn|0ɑO0IfJ~Wzۡ88Ԫ`ż@ֳ`:B8xd/;Tt{sPmO|4 [e6=Ҕ{k'I?߿ h3L09R*3.BxO>d7ymħgSݡ4⛀hVlHMa8A[Gmt%u ،(1Fǎ59659t0b!1ޠONz"( klAvQaטQA|EpZ;8Al #no AO?Mw})* PW]uA9Da9.QG%ڱu텏ӑР/W{ ͗N_4 m{ʴN:@kgeਡ`CIHE"mFFgQ)>`|`A7oT*PnFq681pL1;3#sk̙38=<]Jcz05;bj]v<0+C]c&7̈|H4 l^CJ 8#8,p`B[L/EhE#5&%(ς<W!?#y6>j4t0` A! P0XކCbqȋ1J{ ^0wEYJ늴'>HCzJ&C(3X0KM}ٲ2PRdԏ=3jOP>0ZSmI+6苽IO?Ih>ZUeExt"@fK{䁧 :XΎ`F0`.N;4bo9zRCL +#15fFFYp$*Ҟ0H`=`ņ%S-| hX %e2B[B'a~&X(H$(KmI+6$^%J@t12fo~g9|kb𛕕EFa|OƠkajH%6m*|b=ޛ7JU}}81 +IڷoʆRЌu?P9b"XbkXwd<$n P;JIdX/Bd|WcN6unE:u TT2hŦ^4@H@'@%i%4@HZ4(/IENDB`ga-5-3/python/docs/scipy_11/make_all.sh0000750005473000001440000000010011576434157016604 0ustar d3n000users#!/bin/bash for d in papers/*; do ./make_paper.sh $d done ga-5-3/python/docs/scipy_11/README.txt0000640005473000001440000000241111576434157016206 0ustar d3n000usersSciPy Proceedings ================= Paper Format ------------ General Guidelines `````````````````` - All figures and tables should have captions. - License conditions on images and figures must be respected (Creative Commons, etc.). - Code snippets should be formatted to fit inside a single column without overflow. - Try to use as little custom LaTeX markup as possible. - The paper abstract should be a single paragraph. Authors and affiliations ```````````````````````` Define the fields in the beginning of the paper:: :author: My Name :email: myname@myplace.com :institution: Some University :author: Author Two :email: two@myplace.com :institution: Some University Other markup ------------ Please refer to the example paper in ``papers/00_vanderwalt`` for examples of how to: - Label figures, equations and tables - Use math markup - Include code snippets Build Process ------------- :: ./make_paper.sh papers/my_paper_dir Building the entire Proceedings ------------------------------- :: ./make_all.sh ./build_index.py ./make_all.sh ./concat_proceedings_pdf.sh Requirements ------------ - IEEETran and AMSmath LaTeX classes - **Latest** docutils (development version, they haven't released in years) - Pygments for code highlighting ga-5-3/python/docs/scipy_11/scipy_proc.cfg0000640005473000001440000000012511666263131017333 0ustar d3n000users[default] proceedings_title = PROC. OF THE 10th PYTHON IN SCIENCE CONF. (SCIPY 2011) ga-5-3/python/docs/scipy_11/publisher/0000750005473000001440000000000012275260523016475 5ustar d3n000usersga-5-3/python/docs/scipy_11/publisher/code_block.py0000640005473000001440000000160311576434157021145 0ustar d3n000users# --- Code-block directive from Sphinx --- from docutils import nodes from docutils.parsers.rst import Directive, directives class CodeBlock(Directive): """ Directive for a code block with special highlighting or line numbering settings. """ has_content = True required_arguments = 1 optional_arguments = 0 final_argument_whitespace = False option_spec = { 'linenos': directives.flag, 'linenostart': directives.nonnegative_int, } def run(self): code = u'\n'.join(self.content) literal = nodes.literal_block(code, code) literal['language'] = self.arguments[0] literal['linenos'] = 'linenos' in self.options literal['linenostart'] = self.options.get('linenostart', 1) return [literal] directives.register_directive('code-block', CodeBlock) # --- End code-block directive from Sphinx --- ga-5-3/python/docs/scipy_11/publisher/build_paper.py0000750005473000001440000000602611576434157021355 0ustar d3n000users#!/usr/bin/env python import docutils.core as dc from writer import writer import os.path import sys import glob if len(sys.argv) != 3: print "Usage: build_paper.py paper_directory target_directory" sys.exit(-1) in_path, out_path = sys.argv[1:] for p in (in_path, out_path): if not os.path.isdir(p): print("Cannot open directory: %s" % p) sys.exit(-1) print "Building:", in_path paper_id = os.path.basename(out_path) preamble = r''' % These preamble commands are from build_paper.py % PDF Standard Fonts \usepackage{mathptmx} \usepackage[scaled=.90]{helvet} \usepackage{courier} % Make verbatim environment smaller \makeatletter \g@addto@macro\@verbatim\footnotesize \makeatother % Do not indent code sections \renewcommand{\quote}{} % Provide AMS mathematical commands such as "align" \usepackage{amsmath} \usepackage{amsfonts} \usepackage{bm} % Define colours for hyperref \usepackage{color} \definecolor{orange}{cmyk}{0,0.4,0.8,0.2} \definecolor{darkorange}{rgb}{.71,0.21,0.01} \definecolor{darkblue}{rgb}{.01,0.21,0.71} \definecolor{darkgreen}{rgb}{.1,.52,.09} \usepackage{hyperref} \hypersetup{pdftex, % needed for pdflatex breaklinks=true, % so long urls are correctly broken across lines colorlinks=true, urlcolor=blue, linkcolor=darkblue, citecolor=darkgreen, } % Include graphics for authors who raw-inlined figures % (then docutils won't automatically add the package) \usepackage{graphicx} \ifthenelse{\isundefined{\longtable}}{}{ \renewenvironment{longtable}{\begin{center}\begin{tabular}}% {\end{tabular}\end{center}\vspace{2mm}} } % Packages required for code highlighting \usepackage{fancyvrb} ''' # Add the LaTeX commands required by Pygments to do syntax highlighting try: import pygments except ImportError: import warnings warnings.warn(RuntimeWarning('Could not import Pygments. ' 'Syntax highlighting will fail.')) pygments = None if pygments: from pygments.formatters import LatexFormatter from sphinx_highlight import SphinxStyle preamble += LatexFormatter(style=SphinxStyle).get_style_defs() settings = {'documentclass': 'IEEEtran', 'use_verbatim_when_possible': True, 'use_latex_citations': True, 'latex_preamble': preamble, 'documentoptions': 'letterpaper,compsoc,twoside'} try: rst, = glob.glob(os.path.join(in_path, '*.rst')) except ValueError: raise RuntimeError("Found more than one input .rst--not sure which one to use.") content = open(rst, 'r').read() content = r''' .. role:: ref .. role:: label .. raw:: latex \input{page_numbers.tex} \newcommand*{\docutilsroleref}{\ref} \newcommand*{\docutilsrolelabel}{\label} ''' + content tex = dc.publish_string(source=content, writer=writer, settings_overrides=settings) out = open(os.path.join(out_path, 'paper.tex'), 'w') out.write(tex) out.close() page_nr_f = os.path.join(out_path, 'page_numbers.tex') if not os.path.exists(page_nr_f): out = open(page_nr_f, 'w') out.close() ga-5-3/python/docs/scipy_11/publisher/sphinx_highlight.py0000640005473000001440000000073511576434157022426 0ustar d3n000usersfrom pygments.style import Style from pygments.styles.friendly import FriendlyStyle from pygments.token import Generic, Comment, Number class SphinxStyle(Style): """ Like friendly, but a bit darker to enhance contrast on the green background. """ background_color = '#eeffcc' default_style = '' styles = FriendlyStyle.styles styles.update({ Generic.Output: '#333', Comment: 'italic #408090', Number: '#208050', }) ga-5-3/python/docs/scipy_11/publisher/writer.py0000640005473000001440000001725111576434157020403 0ustar d3n000users__all__ = ['writer'] import docutils.core as dc import docutils.writers from docutils import nodes from docutils.writers.latex2e import (Writer, LaTeXTranslator, PreambleCmds) from rstmath import mathEnv import code_block from options import options PreambleCmds.float_settings = ''' \\usepackage[font={small,it},labelfont=bf]{caption} \\usepackage{float} ''' class Translator(LaTeXTranslator): def __init__(self, *args, **kwargs): LaTeXTranslator.__init__(self, *args, **kwargs) # Handle author declarations current_field = '' author_names = [] author_institutions = [] author_emails = [] paper_title = '' table_caption = [] abstract_in_progress = False non_breaking_paragraph = False def visit_docinfo(self, node): pass def depart_docinfo(self, node): pass def visit_author(self, node): self.author_names.append(self.encode(node.astext())) raise nodes.SkipNode def depart_author(self, node): pass def visit_classifier(self, node): pass def depart_classifier(self, node): pass def visit_field_name(self, node): self.current_field = node.astext() raise nodes.SkipNode def visit_field_body(self, node): text = self.encode(node.astext()) if self.current_field == 'email': self.author_emails.append(text) elif self.current_field == 'institution': self.author_institutions.append(text) self.current_field = '' raise nodes.SkipNode def depart_field_body(self, node): raise nodes.SkipNode def depart_document(self, node): LaTeXTranslator.depart_document(self, node) title = self.paper_title authors = ', '.join(self.author_names) author_notes = [''' The corresponding author is with %s, e-mail: \protect\href{%s}{%s}. ''' % (self.author_institutions[0], 'mailto:' + self.author_emails[0], self.author_emails[0])] author_notes = ''.join('\\thanks{%s}' % n for n in author_notes) title_template = '\\title{%s}\\author{%s%s}\\maketitle' title_template = title_template % (title, authors, author_notes) marks = r''' \renewcommand{\leftmark}{%s} \renewcommand{\rightmark}{%s} ''' % (options['proceedings_title'], title.upper()) title_template += marks self.body_pre_docinfo = [title_template] def end_open_abstract(self, node): if 'abstract' not in node['classes'] and self.abstract_in_progress: self.out.append('\\end{abstract}') self.abstract_in_progress = False def visit_title(self, node): self.end_open_abstract(node) if self.section_level == 1: if self.paper_title: import warnings warnings.warn(RuntimeWarning("Title set twice--ignored. " "Could be due to ReST" "error.)")) else: self.paper_title = self.encode(node.astext()) raise nodes.SkipNode elif node.astext() == 'References': raise nodes.SkipNode LaTeXTranslator.visit_title(self, node) def visit_paragraph(self, node): self.end_open_abstract(node) if 'abstract' in node['classes'] and not self.abstract_in_progress: self.out.append('\\begin{abstract}') self.abstract_in_progress = True elif 'keywords' in node['classes']: self.out.append('\\begin{IEEEkeywords}') elif self.non_breaking_paragraph: self.non_breaking_paragraph = False else: self.out.append('\n\n') def depart_paragraph(self, node): if 'keywords' in node['classes']: self.out.append('\\end{IEEEkeywords}') def visit_figure(self, node): self.requirements['float_settings'] = PreambleCmds.float_settings if 'classes' in node.attributes: placements = ''.join(node.attributes['classes']) self.out.append('\\begin{figure}[%s]'%placements) else: self.out.append('\\begin{figure}') if node.get('ids'): self.out += ['\n'] + self.ids_to_labels(node) def visit_image(self, node): attrs = node.attributes # Only add \columnwidth if scale or width have not been specified. if 'scale' not in node.attributes and 'width' not in node.attributes: node.attributes['width'] = '\columnwidth' node.attributes['align'] = 'left' LaTeXTranslator.visit_image(self, node) def visit_footnote(self, node): # Work-around for a bug in docutils where # "%" is prepended to footnote text LaTeXTranslator.visit_footnote(self, node) self.out[-1] = self.out[1].strip('%') self.non_breaking_paragraph = True def visit_table(self, node): self.out.append(r'\begin{table}') LaTeXTranslator.visit_table(self, node) def depart_table(self, node): LaTeXTranslator.depart_table(self, node) self.out.append(r'\caption{%s}' % ''.join(self.table_caption)) self.table_caption = [] self.out.append(r'\end{table}') self.active_table.set('preamble written', 1) def visit_thead(self, node): # Store table caption locally and then remove it # from the table so that docutils doesn't render it # (in the wrong place) self.table_caption = self.active_table.caption self.active_table.caption = [] LaTeXTranslator.visit_thead(self, node) def depart_thead(self, node): LaTeXTranslator.depart_thead(self, node) def visit_literal_block(self, node): self.non_breaking_paragraph = True if 'language' in node.attributes: # do highlighting from pygments import highlight from pygments.lexers import PythonLexer, get_lexer_by_name from pygments.formatters import LatexFormatter extra_opts = 'fontsize=\\footnotesize' linenos = node.attributes.get('linenos', False) linenostart = node.attributes.get('linenostart', 1) if linenos: extra_opts += ',xleftmargin=2.25mm,numbersep=3pt' lexer = get_lexer_by_name(node.attributes['language']) tex = highlight(node.astext(), lexer, LatexFormatter(linenos=linenos, linenostart=linenostart, verboptions=extra_opts)) self.out.append(tex) raise nodes.SkipNode else: LaTeXTranslator.visit_literal_block(self, node) def depart_literal_block(self, node): LaTeXTranslator.depart_literal_block(self, node) # Math directives from rstex def visit_InlineMath(self, node): self.requirements['amsmath'] = r'\usepackage{amsmath}' self.body.append('$' + node['latex'] + '$') raise nodes.SkipNode def visit_PartMath(self, node): self.requirements['amsmath'] = r'\usepackage{amsmath}' self.body.append(mathEnv(node['latex'], node['label'], node['type'])) self.non_breaking_paragraph = True raise nodes.SkipNode def visit_PartLaTeX(self, node): if node["usepackage"]: for package in node["usepackage"]: self.requirements[package] = r'\usepackage{%s}' % package self.body.append("\n" + node['latex'] + "\n") raise nodes.SkipNode writer = Writer() writer.translator_class = Translator ga-5-3/python/docs/scipy_11/publisher/options.py0000640005473000001440000000125611576434157020560 0ustar d3n000users""" Expose options from scipy_conf.cfg as a dictionary. """ __all__ = ['options'] from ConfigParser import ConfigParser import os.path default_filename = os.path.join(os.path.dirname(__file__), '../scipy_proc.cfg') def cfg2dict(filename=default_filename): """Return the content of a .ini file as a dictionary. """ options = {} if not os.path.isfile(filename): print "*** Warning: Could not load config file '%s'." % filename else: cp = ConfigParser() cp.read(filename) for key in cp.options('default'): options[key] = cp.get('default', key) return options options = cfg2dict() ga-5-3/python/docs/scipy_11/publisher/rstmath.py0000640005473000001440000000460211576434157020545 0ustar d3n000users# This code is from: http://pypi.python.org/pypi/rstex/ #!/usr/bin/python2 from docutils import utils, nodes from docutils.core import publish_cmdline from docutils.writers.latex2e import Writer, LaTeXTranslator from docutils.parsers.rst import roles, Directive, directives class InlineMath(nodes.Inline, nodes.TextElement): pass class PartMath(nodes.Part, nodes.Element): pass class PartLaTeX(nodes.Part, nodes.Element): pass def mathEnv(math, label, type): if label: eqn_star = '' else: eqn_star = '*' if type in ("split", "gathered"): begin = "\\begin{equation%s}\n\\begin{%s}\n" % (type, eqn_star) end = "\\end{%s}\n\\end{equation%s}\n" % (type, eqn_star) else: begin = "\\begin{%s%s}\n" % (type, eqn_star) end = "\\end{%s%s}" % (type, eqn_star) if label: begin += "\\label{%s}\n" % label return begin + math + '\n' + end def mathRole(role, rawtext, text, lineno, inliner, options={}, content=[]): latex = utils.unescape(text, restore_backslashes=True) return [InlineMath(latex=latex)], [] class MathDirective(Directive): has_content = True required_arguments = 0 optional_arguments = 2 final_argument_whitespace = True option_spec = { 'type': directives.unchanged, 'label': directives.unchanged, } def run(self): latex = '\n'.join(self.content) if self.arguments and self.arguments[0]: latex = self.arguments[0] + '\n\n' + latex node = PartMath() node['latex'] = latex node['label'] = self.options.get('label', None) node['type'] = self.options.get('type', "equation") ret = [node] return ret class LaTeXDirective(Directive): has_content = True required_arguments = 0 optional_arguments = 1 final_argument_whitespace = True option_spec = { 'usepackage': directives.unchanged } def run(self): latex = '\n'.join(self.content) if self.arguments and self.arguments[0]: latex = self.arguments[0] + '\n\n' + latex node = PartLaTeX() node['latex'] = latex node['usepackage'] = self.options.get("usepackage", "").split(",") ret = [node] return ret roles.register_local_role("math", mathRole) directives.register_directive("math", MathDirective) directives.register_directive("latex", LaTeXDirective) ga-5-3/python/docs/scipy_11/publisher/paper_cut.py0000640005473000001440000000056311576434157021047 0ustar d3n000users""" Parse pdflatex output for paper count, and store in a .ini file. """ import sys import re regexp = re.compile('Output written on paper.pdf \((\d+) pages') f = open('paper_stats.cfg', 'w') line = '' for line in sys.stdin: m = regexp.match(line) if m: pages = m.groups()[0] f.writelines(['[default]\n', 'pages = %s\n' % pages]) f.close() ga-5-3/python/docs/scipy_11/make_paper.sh0000750005473000001440000000071711576434157017161 0ustar d3n000users#!/bin/bash DIR=$1 WD=`pwd` if [[ ! -d $DIR ]]; then echo "Usage: make_paper.sh source_dir" exit -1 fi if [[ ! -d output ]]; then mkdir output fi AUTHOR=`basename $DIR` OUTDIR="output/$AUTHOR" mkdir -p $OUTDIR cp $DIR/* $OUTDIR python publisher/build_paper.py $DIR $OUTDIR if [ "$?" -ne "0" ]; then echo "Error building paper $DIR. Aborting." exit 1 fi cd $OUTDIR pdflatex paper.tex && pdflatex paper.tex | (python $WD/publisher/paper_cut.py) ga-5-3/python/docs/scipy_11/build_index.py0000750005473000001440000000134011576434157017352 0ustar d3n000users#!/usr/bin/env python import glob import os import sys sys.path.insert(0, 'publisher') import options output_dir = 'output' dirs = [d for d in glob.glob('%s/*' % output_dir) if os.path.isdir(d)] pages = [] cum_pages = [1] for d in sorted(dirs): try: stats = options.cfg2dict(os.path.join(d, 'paper_stats.cfg')) pages.append(int(stats['pages'])) cum_pages.append(cum_pages[-1] + pages[-1]) print '"%s" from p. %s to %s' % (os.path.basename(d), cum_pages[-2], cum_pages[-1] - 1) f = open(os.path.join(d, 'page_numbers.tex'), 'w') f.write('\setcounter{page}{%s}' % cum_pages[-2]) f.close() except IOError, e: continue ga-5-3/python/docs/scipy_11/LICENSE.txt0000640005473000001440000000314611576434157016341 0ustar d3n000usersCopyright (c) 2010-2011 SciPy Developers. All rights reserved. The files code_block.py, rstmath.py and sphinx_highlight.py are adapted from the Sphinx project and are Copyright (c) 2007-2010 by the Sphinx team (see http://sphinx.pocoo.org). Modifications to rstmath.py are Copyright (c) 2010 Marcin Cieslik The following BSD license holds for all the above code: Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ga-5-3/python/docs/scipy_11/concat_proceedings_pdf.sh0000750005473000001440000000013611576434157021532 0ustar d3n000usersPDFS=`find ./output -name "paper.pdf" | sort` pdftk $PDFS cat output output/proceedings.pdf ga-5-3/python/docs/sc_11/0000750005473000001440000000000012275260522013755 5ustar d3n000usersga-5-3/python/docs/sc_11/Daily_SC11_Poster_GAiN.pdf0000640005473000001440001130615211667476202020455 0ustar d3n000users%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream x۶$q%_Á*q_f TSCJPZ,@D`")3[3ݶGxdFd*juWO_63~S}|6O=w5~w?~⯵zw9n;6i.Cm?o~׏/{Ͽ޾ R~[=~WgB?nP:6-O:H^IB,T:.8zѕw{m]w6xeMzWOm.s+ym?Xu~&yxiO` |0y|5j`)=3yh=V?ޚ}eAG?Tc]k}꽍[M^Y|Q8mҞlml;Ngך׹[6_˹TN. \ hv&59AۄEKןt٦ե]ZmZmsͅX6[?NqZ06wu3F*{CMbJ~&Id%+ըΟ$ej(qPuL\{<4#SOPT[/6skUPPs9롋T=|OdʰU~Pev:O6y6=k$R1]O.c?/(º*P?yo0dl4Y/h{:O^T5=rPdI龁Mm`;[7(_-o:٨xڍavLi{[䐱^cڃMU/Ah&*s,9s$`%&s4cNvp9JsY?)Wkuks`` @<[*G>m*h4[21 vԾ- lᴝsބiwPe*8Nj;C3Pި]GyW ^]j=n} 2GʱKgOܢ7}Gۮ܊8|5[ K6jlw``Ăl; ?YT?w몲?s]Ӝl?/9OJ_*?!rǹ?'7c~RGq '5ý{?w΂߲62y-tfǚ#RV|E'am^ ħlbC܊MZLF0lnQPh7ʌ>^v8jcw#‚#WOm>Wq7..&ny5{GP&],6bz85(y[)}w}nEj-:/WA_5BmY>Ϸu߭SPj25i"Jݨ]ñ5;7lJ?س\y48ܝ6s<m#LAەF7p7 xCտ7.%wfr'm)Ȩo=z~gB-}ՕCjyrΪ~ƥǟ$ixFWKTMlI-]]KpwܻEZo$N=lbSŧ nnE`2mѸt<^^I[Ї勉,8)ڝ^G25PcsR+̀m"G0= 8-God,"8ƕc:VWnݱpi~p5N 4n♱[;o۩m1ȅ\#,?:a0Z&7le}4 H89r5hiE -5/kSs\.QcpG;iԃin* NpÝqn\\ÐB4l#ĕ0&` H~|A&:h=F^̀gR3o/G<~t4udz*=^\s7579Lۙv2hVbԽ6?䆂#zrWtbZ߫wwVޅ}vT-H7<78THO>5=+<1ɆȤlǾF4"^ܦ'1ʡYCO؛z`mIu-,cC_V}+=(vV#mvwkx]Z5Y'fɘ&BC$T\sP (6kyH :Gx W"cuq=eB{m2/ZoYs(Omfj/GСL7e?jlx9Rsq%5JS]Țw EscF#}Pa׉V=iZH"g̀4rN ?8PhW/4]k ܴOuKݦuLWknz nbsLi5mjcht!kykkOB,?!7Mhnl+n54[]P/NtЗG4X59(а Nfv\UQ QrwSr,g )a?N,~ü8W+[/w^i/Sü[S#f菾87Z_9/V3b xqb`4~y_OVZf ң!!gJ֢Z6Ar{n ےt^"Z9!UT{lqUhm7ڄD ϲ^dRX=\,[e(r@_V2k*'Luߖ p;) I cĎhݣg )D==SG"!2<[#.]Qh:8A<'߾zݷlD*&T)aT%pJqn i,~Wl?*{n #W -Űɨ_3D)PF\2V@kUxqEȳ;V@{> }W/7mw߿oW߽ 633^\kiGNƠ 8?+5 [K>r Kم~wyP;1Ѿ5G,ֹmܽ?3O{mnBfnz?۩ue1kִ4}0Z6KMX&yy?-+Kk4m&p ,#Z`̆iݙ5μȺٻ 2;vy.>*ؒ&'zgC0 2q_Z%Wo`{-.~BxM:8䆐'-fl~ ~b4+y=[^W9^|LJ.8PYQWmzcW -iZ'9C UO_ -z5_YbB ZP(D&(퇎˰BxA!(_ Zz I 7OΗì#3Z@|&3ZIv` Z`}Z`9 (A秀S\esh9"hKݭEWkѩޯ魋?ANLqd:&WAo4RzH SF?OkehgxSpYkМ:vm5D݊Z-:3CBhn *Q ϸ[r>5*xWը)GlW64Z_{>^RS+޶PCqbUs3bqg'Fh3B4 Gm70͍\`V6R%#ٮ#Hc=e I gњOI϶ ۋ(_nn Inr@ 1^GN<ƉE[bF{ e %^zķ ,: PO*3~O~{Wgҽ] ==ɯp]XmJ^|tWzlYL׫tev\j ݟv5>4+ Ϥj6DTatW"aJ_Fm} IMa4~&&!m2}fZT5ѤU֚cKå_E=g=҃1VMsSϠHY-6Æ|g+M߭dT=g\m=bOHG䂎ErI 2t8ZY-.瑶&|F^w2s:d[|wޤM:o5P}?YGЭEXH5͡wR eDr7Gn W2TPGvh-RX-&㦈B>CRE9@՛7ZQ?;آ/ #9ÝuD?k+hˌYx6\h[ rGj 7c~įHR[ZEe§a<7k࿷ sĤqJ֘sBsejзО]7 ~h?,.moě_7vi"9mn>,G"7l쵵? ?svp݅~?]=w; ɴ(%{iȷaF3mΓc`k &YLc{ ]߃ xTaNQ>vwGA!o-T|ҨcXÎ-qrǾ!ˎn^M,mرpcŮbr_q?bV]==0F-+G5&Џ?zܧ<^z>N:31'ymeӥעH1/?!'Ӆ4\[6EEm^!qOGcԝǾqLS~>lbxڦg\bR6\E{/XZf?y wx I֡.WS_637w惏_~|ݛ?~fE Ef^V< SŖq/yj:ysa`JݽsnIƺCג1I2ں~hv& taS4ك1 HGxݦn>a4 `6=|\!Sv5mwԠg ^mg=q}ן=smxb\2x~?o(*zC]};3 ml1qn1#e1;7;}`v'4aR˝-~9Sodh:yi۽r5hZ>~>߼;«`=9^uZsG9y" w[@.+]59%KNІze71v5p78QLK;=mrģr}Wڶq Ya!ɽ=[A]5{5v5U>_Βp;KNPu-x+"|a<|8c|Pq|h%=~٭T;!a;j1M ɩ'yHUdxma4w9'3_/ #w_?^}`!߃2~9MŶip,xޡCELM| 7>E} ~{0𣙀/P!VbfW߽=@/ǿȹ8_\\ϓp,{oR7sh#2*aw`?`-ehdk,aۯ~"\эpn <6RmqmrB7~W_7_} Ǯn(ZG`LB"in :IpWG# m_o'\w1|U_wˋq$Y{`}0 Cj< (s&_#{[h~:Oi%cVtY\?jnzu'eT矂t-.sF{X V.-ۆHì9`Z =/ڈǺSmqt5-#>/+Ռ>% -b!7ǧX| W=vI=D73 f|J 65cUTeܠnhr"[+ oq:b|VT!_[]3i>crKƷ7i|ew0.!D%ЋCr/{m1kir²[ws}.ߡL^vȎ3yζ y9vc + Nyٞb;5@%d]wؽ (F _>XRms&6×Ml4o[n>j.\4\ ^EU:oVqQn=tcz6. L=9m8HHӲq2wwֽip(l8Z:I@mܾ(ea:M\} $ I1Ru،YYvgnCf[c!c(5Ûo1r(87|y&JQ5z wt-,0 o sʼn٠ ݸGrx;a770X"9)i];y{^tam|_ 68'۶#eobUK !Di7rxZ3&aPO (x3Nyź @8ge0w?4u8 |h;܎:^m;흷 fk_{׍Qkn؉_&'>34# sl"K} Rm u7 mxG|)Vr'j7| om Y=ä>茸y_^?"h:۠#S xU=z5םOoͶ}y wjPS2&X25 TO`6T%K%,˴wK%M [_g|Qf"&c3p!a2КKun*Js#0e7(Zi@% _5̽CHP€  К p$β& T(?Cw(|nDB^ / u+0BpiK x.-"rbp^PŵӼ J!BK81-$b\a@.UB| s T9 B,w[r5`rg$EruI:t"U] C/,˥H^&a,V)B]\KHTc1EsLJE %1'S+lKܓt"eՅZ fz(P/K: @'Pr(${$Z@K׊@'B~\DWrFrTIvrUd*82gAH9 Us0ﶂ:Z"QZ\H*,#1|UDbP0|&4) <ts%ta$vZA-O$tK+nx͚EFbL%1T0󧤳VP"t"/R"jdZ&pIJ @} M$oׄ2!ë$6XL!@/ bQJ kHiU@@;xJdE.` @j5P0@=r5P0\^@PrÎm ;2* 0\AV{@-䆕RA(Qዩ&{T䘂<UdsIpbu}l#A2e})y@|AcEh(w ~mp#9MĚA/)׎@d*+޷8D,rJ͇t竒]J.PPƭ=(_,"pxYq>$Z-k)#ΕOH2_B>Z';p\j(x NDh:a 4s/֠̋H < X6^Hr)F ֯9aG0e)C`~@4*"X*.IaIԷ]IxpܓQٷVEn_k'PxTD-T"o>` B<%b̂P \{ɪO;JHАw?uR 2#5?ZRVF߾t RP}UZ.PAjK7HM||J{lQ%'51Ӗ)rQHpIM'HDjkФ쒬gTJKũ`Bx1GZCbqd:+zE"ț'tO |fY^!_4/* d>NfAYM̬8pW;ڑX*E  ͳ eC"sTAf0 B cDu3`iϚeŷ]}3E6.>Ǝ(0M I[Iv_oZDk9:Vg%hIRpڶgpKyQ/[N P""2mE3Vs9fu0H)+v dUpP^y/~y)iXEJRƚMUd JW$U@YQBv,p!#9=*Ͳe.;wJY@Mh,BkogX̯[ y__RU J\pKLTIn7JC=Srjr_k!tz| B,tC"s@E0 Bg fq=jXi4…d\ .deAZu9B ˩= w~rݣQyOCSyOڋ)ܓr1dƀ]q Q6)cE!Sǚ 6iU|L@)2X!sI>y $2թďr ܾrǻ_.Xq :3# vOXyȤLcD`ESiU@4x|R,1n+w[(7ԁ$K!Z)xM4MsO=EZLήVșm /]ùxGJť2O?B??ɗ %X֧ZLSf""Sp1"seE,'ϑ-m\GF^MK(d^H'f˖e*BC˺ ?: B΅"Tz2MΒw+RU.2IC T*,`~R&uʄO*n^PKdw̖X:bUR2*IΖå D&UjE %AE @lEF`LV%*2-1t)` X /3XX8g0 #-1BRCOF=^! !"T!.g+Ad'PEੂ(s-Q7t tH*w] e*ȌfA(R%ҩN%FB'KٽPF.{ĪT&{B5kdtQ Ǟ%ɯftҔܧ,Y˷dPrzbpc&yS?pB"jށᆪkBJ[k@#̢ }A<]"-H/b@(Wa\ݐ."b*"q+$B}8>X|νą%)ɗV?J!ȗn䥼'( @^&V:T%ɗSK&:D4ab$"/eC"sW)se颂CcppCxzP迅..^ e9܋g)wٙVD/^tHDy:xIr[g*AUeb%Y5'#Du=eoWDz=X)GfPXO^D0Sڦ ezU]˴ S0 <_Bt207֙e/s? w@jyCǥXDFKD;cv.qwͳ($q4TyJ?/f&+q2սBK &:*RcYΓ<R`X0ql/J'9a̓EFaLVuUd (9 B P&_KI,֒9ryP#}sgJ('2*SIT$fg'ұ}^ᅯ']g/8,^»=SbM2%Lt=S"D'*Et4!DaaQLfJ _i+)`~`qO!"2AV(5QJJ%Lx0 (Ls%:^NJ!$ Q̕X@"UBb)q$U@%Kb]fON1,Dz=m+T+rX'_Jf""U Lf eEs|_wggP_EvJT[z!{ՄƲ^UTN1uRI=AكL"}LVu&Rqo)r;`d[H_aٜ< WMh,IYw`$$'Ix!$֊@J/)s}JR2)W!s"EYŅ  J Vˌ*NA0.ID:!\"[ dU"");ˊ9AŃ,1,уu2LbH 7ieGQE)"LRx9Ϫv &gZQ=1N|l"yJi;—^P޴*ՄzRZ !.ڣ"ȁ2ZwGaoaX\˼uL*3e+K6jd^J=g6\@:뮶٦MI}˔FRCm"w@,$:E 1C,Zu!B CESSe.4i5(E4H]%X"(yOP"^:K $%>$ Li#~һGgNrޟ;"!4c.Bw@C"F [*2U:^0-*&E׮1W9.5Bl+G2YD~,;" !)NF{7nx D8:XYXIꮂ ŽyC1IR< {+Es|Eੂ(s|2@$ef >Roa[SD'茅E@$dU'YxeĈT#"Ft!"SGqkËJSق8E9B֝q8%b:ayC!$VHVw2R)rPa| ]&BNb9 BXRfqUD1Q2  n|(cDѪ.([D1X n eWGYLl_aͷH$E;L,&ZR~ؓU'#.UݓW+e2+eO"Ѵ? xa$&@;2O?`EUaWG9ďP(k"Ǐ ,†dU8fO ~XDÏ2茵' O ga%CcUO(} 1*(M@٫*"9z~W2,~.U@^*R2gxBYXABEҺ,r>\ÇLOYuw~.rmW^1tDJ]>BU- AfBÆBɪWdȜQNnwRʈ {| p,A&;A'>l @\Xz#\vyA^2YTi*)`0.dZ!&G>_ڗK/2GPAaD˩Kz B8luB _T:ᶿRBR@sωVuUd%" VzdĂLc_ TÒ/ yLXEh(uw ~P;NBхwB;ͳ($= _9x 1 D<(A)_L؃n^A {.P0Zʔtc(xWaG-']U@JDb>q1yA)o2YT)&HTPJ|1E6GRa5lU"U1sO*E! 3ЕeC"sTa9 BؓXF&:cl|V2s~|9pምy(9 ?B2;aj3Ӄ8b*Etj1ݛ8l(SI#_9xVȜ?zƁuȄR2Ǫށ?`u eGD^  ;Y`Q:)"ǏI|2r*CSVYI KLޮΑhR&+&Eex y%qp<˭`K'):U{³z(e%&EXHDF;hYnEb1}dX)U]PgW)sxD|^rpw*vOBs>ч/Q . *YUww-#GE#݂NKgBɪS O XD$h/=o'_{.r6ο+B_Ô MA, Ju#( |ŅzO=^dlpuW`VDu '!6XH^40BWwG,JAHrAA^uA?ql5y"o8x`zWQ)ruIJ"y/Td"stje2O^q E_HTX^jBcѮU] gwbQ*EēQP{,,2Y՝SQ,$.,f +1cP"b RĐHebVwQ蜲%1ҕ"BH(aADXsXX6( ⼖7#A ܰ"isБ$]r- ()/"~kKď ~OOnQ/6jH(c$B|ѓ+ރѣU\vC;p>RDIڌ>KgY>RCmB"w0(dRn ]䂻+Y inI@}7sRM\ yLw5̄Zw׀Hg\NϞTEڐkgY=ѥj `:*ROBTL&e"Cw!K\4ZuB2d5NO1yb\&sd5^Ls|#+LvBX )` hJ SJ&cYd2|S譗|YnL&WbHNR9$\NO e C8gcPfKUP R_9W/ :W)r ,fNt^qT;z @22 Hy8hJГpT&JW{|^F]dua$8G{ǮFDUefkTM`ɼ2B,7R( &BT71`"u TZ :IA,<2>U$uљ6:q3)<,ys1yT3MXʘ8gNċS#2f>H,3Mj@b _\3'P;&P9:QJ&o2LyMΪmiW#ɨ2iRz0H̜%DeN%NŴ܉"%ɝX+"W4%ō]jMUBBf%w_BQ)Cȝ7[ HKBcY@Z/CSH%X ZH8G0|==1`F]%{^*aMElDu"qSXgR΋s&{4)ʘ2e!"/c(%ϐċٽZZwE<1; r^8s2xb(wᆧ3Tȝ{#ͳWQ#%lt}E)A(`zR ͟6JmA,el0C TSvHĀMv5H eB!34vckhN$34=W3YUd#B7LC)`DkD {7ЭwD>sc}1w wu&4: AŲNq<TQ\M:" "ULRD*!Z"SȴLWU\D_z;ce817 dcr˲r/ KM&YkRCrXzC +at+x°VPX5L&ͳ8ɪWd2+eSAMڕ&84uY}-=EbX7u :AJ$&Db`ĚPzU$A81E ExC@,r H.' 'zX VuQ@iS V$D!HY@̔*KN::_6/sy܋F4` {ar$ Ec.4tD9,vx~OW\{HM!+2CѨ,t=锻LU)IMKŽE ]&I_9x XȜ~ WSj"z"p̉p^FY;S?.3i Mqĉ͞Q1\ ͞Co> ]&:( t'V*R,B%:`*,@Bȹ@ 9jBCY^ b9|RbJ(bdUGPE)QA,Y*9`@ ̝g#0YēC^țQyVEޮAJH I}x'WoAQS.W4R sTA`9=JrbqIBk QrBj/fω~i9)LkD+L T"KW^}(G9HÊvє{r&V5&3LTtS5'S&\X],O urP/suWȘ$IfcJQ  LT9x`/ʜD[vメ TxǓ\"GAL z'Y HLz9l"1wYD9!y%l(SI4{2O 2!(1X"UZ ID_DZz#ށ ߥ&5LI,x P${W@eM pQB)"G2Q|@2&Q#h E0 A@嬉О4גYò)` ~M$k!M{d2mbEh(Bcy|$qM Q:@/%>0]%p$W0)t+ pJ#j\WPzxGs3o̘t1l\Nȼ|ynwl; 6]I_(0cMgcdh{D≄s3u d{SQ,Lg(g@fHZ4y\7+ IUjWMh,vx$oFw hϘeyɛH~Zy34# WSsuh,2*T*p0A%tA)uX̔X 0,A=)T ʌ;loUHjh.İ&55@;I'"Xtr*ț|) ͘XʜkJ89~}! /:Ӂ782FavNF_OƂ pߍ_,`|uJQpI%t5Tf*w+2jN 2OE5=v \ɔI+}{J+}De~PsGyDb*waLnIW>GR&Jƕg,U>U]&2g'~g b+TkerWրEn^DA(&3?䖸$XF*E?Y2Xؼ/o ӪTd*Լ撼{73k`e[;|wwHa'դ25Ə2njw%SD)UyW~I,G d;H`Yhh!RfMe@V7x9E`=PLh #l"x(a&ZIljYRW%~2D)`&~(x"[g/ ukLa( aT{zAJ2&m\p| 3E@AQh8b ms3 d#"s9)ࣧvodFhޠ0Z-[PzƑI5|O/H>}*ip[>_;/}O=!n??EfJmR\l4tۑdd[/6鴛ܮS󱙜qt>S"i>LǦ\Y2h 8711ǟ^|:6s1cP>lxv׊"VaiGĄ ;KwBW]o\x`c<xm#m]9y(Ǭ#]0CyqU}vY>&'];FKb7ӮZW'dc>ep!G75 r84?+h1n_%įy`܄Uí`#oԼ?/4-i_g+wMaʩam +{k͗gR1/V.?>7 R L|lwc64\PFY|7POQ~ٷhE1wae0fHew IpZW[y K\M.iyAȟǷ`alzpQiLޠ4C9Vu*Xo9Xa3ejL$bnٌepm@΍Jzؽ'cSi_g:OYuM˲أ@Lcf n/Mb#wriH{$ަ+le\S۷#y9ҕEAڋha9_G_hnxB6 wSTe ;/.-MUCLC!9񇩚Gte{#sp#܀5-Bԧ,}CyS =YC|E&<1b+m[O燲Y:|lv*HggV䐕jcw@g SR ֿZxՕE~f;ѷxOp?~o[M&n4qfQ?W~0 N6Z`W!3Ɡ6J>n>k)˔ O<q$*d3[s{dLC͂@j 5'̖ Uݵ-Yslk[b 9 'ˆl7qTWd敥LWG6 Cfi\8IHy7Ep\4cfFat?PM~ [L Df^9SpUI"q2##`yiZ¹ 1:K)SsNb{k>5y`q9l'mdu :X .ZV5vv#{cY @O ln{5?1XY 0;\;Hgu졹;IJ: |N;Qy4 \o@@9rצ*)ꔲe zllIY[xk:GHlf?}cE?/mN[*mW+x}p{fsĩAG+`o-˜U| Sq'=}~?3,c{4̓[ ǙMi9)9E!a 6ejy㠴gekus'GY|spynwSC6lbͯ<.o1ٿ/o}p4w: '(wgb{>_XHoEZYi4;l> ) 7eXQףS FO3T^!V1q 9>}ݗ`@-wyѳ+x,!'*bEIpH%cߺ&M)JS ">+ i"j OV.g{/q:S 6#44GZByeЅݙ):$"3fksgDmըm# iޖ 44Qpk\2b+o.j-nY$+uWo}ș}eC7 ¿%ģEd#ï?yz{l'`|uZ֘- ]Z^rM4Qm7z֜G|`h&iw gig>{†'|;l1 f"NnaXEĹBƀ \=nl>wׄۿ\}>d ҄M?+ xMɔKk8| #4ZjH葀,O"Kdb56ȇH\?>>xm'BV ނ+ 7 eCO}q}wb.G|2z.;&1\@33_ǘfHk漦}~ ^T| oLj/r{[RKsܠO̓0_|@Z>iKl.2azHX;ː̟Dhx.I^>t/zbˊ{Ϥ,w3Ԟ\$`Rؕ[Kȏ垥O]w8#e6c/A|*1L˞sq;]~>G؅rYl eE{;ob{^.Ǭd||'2|ܽ_ |];<|iM+},=u ="8υ2@!y{ >>xe^{<ԧ?y{Ƞ{tAy{=hIPC^2o3y{nYA/7L]@XHᏜ-=f$ZL؞; ֒s/ϒwTvaw|U6Gq&}2Dym̹mՂ=HcM/' `bKW2~d/>6sjh:AK^|6FW߂9keA$d a[C@R/"3.AZQ7|n, ![އ9Ut s _<_ v[ʟ#Y |pe̹R r$<$eܜ&n ,i%mXD0bۄ=2 Jޝĸf\ v@N+dKҸA4fם'萂#Zkj8C}PRRx _9 s3 njS.m {*j4gn4LbhsfY)\A> ̴A6Mr^~{Ms6p+%SELzv!\$1 ;) z4meyNdOޙhN7\Yhˆi%ͺ gfn2+ G !MْUۻ M2ϹLu7G/5k6D; c,&&fqzLcսDP?Y[Kf1 ·58? uܬ2bp8g^S~)=[2b5f"):RJԓ/>eֈ-dnsf抍Wp l{3}֫4-!E6(pYBj0Qe-yDKT fB c4A>d%grDZ sC>J 0;GĊ`s4aԻ0ڐn0n\e*px_fOSrZ j1(۴ >ZZ/]CiWV"^.qoh0T/+Y?8(b`yG͡2 :ath  z3.n{*ȎQճ;_K-ي˺AѼ+ʜ.-9KpjxW[Pv>a-NOBgb: Ҳ0ȖRI0T JDʼp|RoXf%++X\ƂoF`23pWs i7>؄8B BYV }26D,|K$DhI;&Jd=GVfslq0Y=_u+qd,n }'yyޑsq-/^3H-k?%B XV䅧[1+3ᤨ97 ˳g29-p-O f`|h{#siaNpDC-a@-NH'|uw -;K e8&\R u.Q&7-w$CZF9#VP(CN K#`yt$,D)b 3Ց<9Qsz-)2vѯA۽8^%8Z>VMeĸ~HL .GѠ$HM )"[!p{#=e9o),/ӓl);c% n<+z+++F[/qyca?gB'u`0 c''x&=QQ7)~6#* HE=V5SAxy7K XXQllZ`3I@ UySXjwќƌbs!\>+y7p͉\p9Xsbcst9Mǥ^p-F?e<`̍2y6ЈXSjK Nh.Hb [_tGNKߤ9x!.&3pb6 vԞɕN93F8:3|_&ˊDaP,9ecBV"H,Rw)t}vpJ\ycҀtgOLscƞ4y|n{R7N1xtg4@%}-gi"՜E|'.ћVQ`V>zf d{p#܇hzxS"+6Ll.Xq >+<@x28!'׎yzfhK`咘K(O, ` T7]:'t}+{ukyIN8gQY×؞-F{Y?D+(Me^Y%IyB塱0G>h#k=|Eoٯ4 /W!,kㅸA>,dvBx8ՈO>D)ު\{]Aч ^^xt0 jz&'6 ^\#)&G>>*{.bT;h)7"foE*{\IJ|gP=Б-Cًr"{uhwvf蝡atan7Qoܓl~Rr5Po2puնNRn4}Rvq8I#Cۢ7h-EKS9+9Rn8}Ujٯ2G !|=y-^EClM9 ]f*ˡ#KN;_P, g//·~ӗN[s P]YlT<3w@TTN0p  uf=m[fGHWtq 6MrF[rKb_x7Yo岾ns3UR3/zQn8}E[ g6+D3p?oYJ\e9HHq@(ݺ^ م'ݹ:Ud`^q^~}[pZ![z`\'9}eIЅYm 7^':η Ҳ4nwH+?۹S4]oH#, ៉.9\8%q|P L]ai V *Ap~87#K#HGGfGJ01#JDIfshڃ9 PK^˔3O1CG =C g(y@ r9CݐYe#sj u2Ca}:{rDn4CBb䙡r6\HX^rQi(a gVH]9 {;c^.QrQ927'xhl"%\"ՕrGk\>Q#j99?=6#o;(C Cp虄]hY.rO$GG@o!`sݹEʟe X ol3'NWO ;rBx}Z=ɡ9! ֪=T>&1{8ѰP)M3h)\$ovD]zUʧLGϠT-S$^hUgLksL3l*U'9J>hA:λ'N)Z')A_ќS R֧{4=l.esL3MaBMXr/L<tE C6E)Mql{E6*ɦZ.LJVz[5 eSMVL&KE@eмO|w}пg Ͳ5NA)VɳQeқΩPV {4>|CB'4-[Xo7H(n#F_=)C:ҽЈF-|S{ѪFU A7nlƴ e);gY 8;;ׯNC\\S{L^dZW-ĤeRNBlJ)8uZKy*GCɧza13iK8*~g(.4"Wq-(~Rxz΃q)hU*\D}zcڄR9^tL8(EfJFR՜%db3j *Q4;w3I$6KN=!ZHqܗ"^I^yPJ>эA3;2u;if$PBŖMfma J8({g)E<+'D~ NzjUѪMpJJZFǴZK 8Eb)̛xô? pt@we;eC& euȈr)PX55Ѽ=/]094s{Dk:1 x+F4! `biH; &܇LŏpHN8 +(hUJ˃S8D^CZ5п"YBo< "3&(O1+'˯GҧCݑMޞ_eQ)`xg6AZa;pJ9T>ٴk\>k;VxeͼFxs!UU_ʄD6)*| @Ӡ7Ng)uN,[rc C٫NxhUѪlypJJ8R6 8EO8_mm,)\T7[NGxe 6M |KꖔHRJRWEFz l@iX ${79Ià͖ξrA3jIv[F!y%ҒYyz֒==jX]nݯ7A-Qd*qd1+$I}7W#KIx gkR7sAŤ_av&6 {:[t`/ޛA{nhp9Ft,ZY{X'er׼\'2?]˝\ A2~a{k5! be^=p>X"a4LptFINkc_7hbC ߞnu2˨%`ڮģ:ӌUhMvm4F] qNkM3 ZZ4KH*qFr~ߙh&ݓ|Pƒ31 Z]r!dWl`<')ڐ250;mLfbrar-[CHnGh$z/-oر ޏrJ"4Ղs# >]pfw e} fG$9<;yIfY8F," RzF1x5f":- OM#44I|f^4f=hK̝Lh&7G@h&P8N4sJ~r3'yJ|)((W-5{z.qfNT Iw9?{ {Gb~&~ '{v7QO׿Mꗼ/p-0YZ%wNC-{wGJgJ>ecxE':͚\ï=:RguI?|bֆCIo i=p"'bX/ϻ 1ep1pF [$ O҇;%zߦs~F|z?1^|~C/.ॡ}bDW.{K:7~M{ۋDYu6\(&#}?ü4 Iߖ*iVm $ WyV#‰Wn$ۺYk&J\W?}oo޶GLڶ_ 3?<<Y[I!)`R R֤nQd.XErd1y*6[n\9%lQI{¶68PO!3NzHSIl?WP%*0 t<Ƣ% ݝf9ǧ ifMy0#_AKyϞEJy0{| ^ІTWI#d!픱8c\of؁Xbb>B kuk'dcO [B72ԯX$^*/.wJE9C 9 IMw.G~2',aF i"bhc!5HZ#;JC+h)$f.;Fbr<{V6قy^N?% T?^㔔VNMJaX {B=Z[Rѽ`4/n!Tk>'l4[}cZ=WI H}7CQLgFZjTrɢFcoFՠ]ŌR[bR}9S 1pS򝮣tYg2)!Xɝے W2N<^xh]>1Xסz E܋:TE>t_m~z|@VB8 m'o9F[ fg7+uCIj;P !5'(grWwѼOF7fAԸ혽qY^捺R UoZE-8مqf^o4ӚW5FXYkߛ{y.Vui?Q4k}:9րǶ"{<t\)eUW_j=@fg(}&"ʍ`CF$.gr,Yڷi5K HX?5$!mi>kW}R –P 25k.-<,.e'9-2,:aS#Sa; Al!B }ʵsk}=  {|~f0:T8iZ-׸f5HFl;C4]=Wv_mU<g-g࠳kRG~Գ& ݠ$mI0F6n_A']I;˔ HW s(:SξG[Z6*R,GT}Ծ5y"Cp`7@Y {M]Zռcp0jD'8 ə^bZ&>;S4A 6jwkȺd ]{ '|<\G≽xK&NN!Aw*9m%?706K<`(ٰC_F .:-L 溎Eui endstream endobj 5 0 obj 40163 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 792 612] >> endobj 6 0 obj << /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /ColorSpace << /Cs1 7 0 R /Cs2 16 0 R >> /Font << /F4.0 27 0 R /F6.0 29 0 R /F7.0 30 0 R /F2.0 18 0 R /F3.1 20 0 R /F5.0 28 0 R /F1.0 17 0 R >> /XObject << /Im15 45 0 R /Im34 83 0 R /Im2 10 0 R /Im13 41 0 R /Im9 33 0 R /Im11 37 0 R /Im16 47 0 R /Im10 35 0 R /Im27 69 0 R /Im26 67 0 R /Im30 75 0 R /Im32 79 0 R /Im23 61 0 R /Im22 59 0 R /Im35 85 0 R /Im39 93 0 R /Im7 25 0 R /Im33 81 0 R /Im5 21 0 R /Im29 73 0 R /Im28 71 0 R /Im37 89 0 R /Im8 31 0 R /Im1 8 0 R /Im36 87 0 R /Im6 23 0 R /Im14 43 0 R /Im3 12 0 R /Im25 65 0 R /Im41 97 0 R /Im12 39 0 R /Im20 55 0 R /Im4 14 0 R /Im24 63 0 R /Im38 91 0 R /Im17 49 0 R /Im18 51 0 R /Im31 77 0 R /Im21 57 0 R /Im19 53 0 R /Im40 95 0 R >> /Shading << /Sh33 131 0 R /Sh14 112 0 R /Sh3 101 0 R /Sh26 124 0 R /Sh27 125 0 R /Sh21 119 0 R /Sh31 129 0 R /Sh15 113 0 R /Sh7 105 0 R /Sh2 100 0 R /Sh18 116 0 R /Sh8 106 0 R /Sh9 107 0 R /Sh10 108 0 R /Sh12 110 0 R /Sh20 118 0 R /Sh32 130 0 R /Sh28 126 0 R /Sh23 121 0 R /Sh16 114 0 R /Sh11 109 0 R /Sh22 120 0 R /Sh29 127 0 R /Sh13 111 0 R /Sh5 103 0 R /Sh25 123 0 R /Sh17 115 0 R /Sh4 102 0 R /Sh19 117 0 R /Sh24 122 0 R /Sh1 99 0 R /Sh30 128 0 R /Sh6 104 0 R >> >> endobj 131 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18981272 15147659 18981272 15261959 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 132 0 R >> endobj 112 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18735872 13514389 18735872 13628689 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 133 0 R >> endobj 101 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18684100 13500278 18684100 13614578 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 134 0 R >> endobj 124 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 19046516 13500278 19046516 13614578 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 135 0 R >> endobj 125 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 19460708 13443833 19460708 13558133 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 136 0 R >> endobj 119 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18645268 13514389 18645268 13628689 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 137 0 R >> endobj 129 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18981272 14734377 18981272 14848677 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 138 0 R >> endobj 113 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18839420 13500278 18839420 13614578 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 139 0 R >> endobj 105 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 19460708 13147497 19460708 13261797 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 140 0 R >> endobj 100 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18658212 13514389 18658212 13628689 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 141 0 R >> endobj 116 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 20289092 13345054 20289092 13459354 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 142 0 R >> endobj 106 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 20289092 12724160 20289092 12838460 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 143 0 R >> endobj 107 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 21945860 11835152 21945860 11949452 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 144 0 R >> endobj 108 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 25259392 10155915 25259392 10270215 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 145 0 R >> endobj 110 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18658212 13514389 18658212 13628689 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 146 0 R >> endobj 118 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 25259392 12935828 25259392 13050128 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 147 0 R >> endobj 130 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 22073326 14734377 22073326 14848677 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 148 0 R >> endobj 126 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 20289092 13429721 20289092 13544021 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 149 0 R >> endobj 121 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18684100 13514389 18684100 13628689 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 150 0 R >> endobj 114 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 19046516 13500278 19046516 13614578 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 151 0 R >> endobj 109 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18645268 13514389 18645268 13628689 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 152 0 R >> endobj 120 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18658212 13514389 18658212 13628689 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 153 0 R >> endobj 127 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 21945860 13330943 21945860 13445243 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 154 0 R >> endobj 111 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18684100 13514389 18684100 13628689 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 155 0 R >> endobj 103 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18839420 13415610 18839420 13529910 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 156 0 R >> endobj 123 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18839420 13514389 18839420 13628689 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 157 0 R >> endobj 115 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 19460708 13401499 19460708 13515799 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 158 0 R >> endobj 102 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18735872 13472055 18735872 13586355 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 159 0 R >> endobj 117 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 21945860 13189830 21945860 13304130 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 160 0 R >> endobj 122 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18735872 13514389 18735872 13628689 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 161 0 R >> endobj 99 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 18645268 13500278 18645268 13614578 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 162 0 R >> endobj 128 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 25259392 13091052 25259392 13205352 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 163 0 R >> endobj 104 0 obj << /ColorSpace 7 0 R /ShadingType 2 /Coords [ 19046516 13316831 19046516 13431131 ] /Domain [ 0 1 ] /Extend [ true true ] /Function 164 0 R >> endobj 45 0 obj << /Length 46 0 R /Type /XObject /Subtype /Image /Width 16 /Height 16 /Interpolate true /ColorSpace 7 0 R /SMask 165 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`!0rC endstream endobj 46 0 obj 17 endobj 83 0 obj << /Length 84 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /Interpolate true /ColorSpace 7 0 R /SMask 167 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`!0Ć0 endstream endobj 84 0 obj 19 endobj 10 0 obj << /Length 11 0 R /Type /XObject /Subtype /Image /Width 5400 /Height 1425 /Interpolate true /ColorSpace 16 0 R /BitsPerComponent 8 /Filter /DCTDecode >> stream JFIFBExifMM*bj(1r2i`'`'Adobe Photoshop CS3 Macintosh2009:06:08 14:29:58&(. HHJFIFHH Adobe_CMAdobed            *" ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?k6z{,o\>]co\7_zJtȣ+9}*{r(%E_o$?qGWn1q $"b_Qی\BI)ȣ+9}J{r(%E_o$?qGWn1q $"b_Qی\BI)ȣ+9}J~7wԮK^=uXW%MWm$E I$RI$I%)$4r@IKWoZoS4Epx%.@8]BOXJbxmgAwJvlu8cK%s}cu\K,Xv?um]I)}L#k}Z3_ uo{H^*x:qw>R;Նv/?ԩ}I-Tl](e8J;?@o9Z?bRAN ~Yo8wJwզYs岒Jsk81mr+zEoSX+$zoNgť ?鶴}߀$I%)$IJI$S$Photoshop 3.08BIM8BIM%\/{gdպ8BIM com.apple.print.PageFormat.PMHorizontalRes com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMHorizontalRes 72 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMOrientation com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMOrientation 1 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMScaling com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMScaling 1 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalRes com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalRes 72 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalScaling com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalScaling 1 com.apple.print.ticket.stateFlag 0 com.apple.print.subTicket.paper_info_ticket PMPPDPaperCodeName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray PMPPDPaperCodeName Letter com.apple.print.ticket.stateFlag 0 PMTiogaPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray PMTiogaPaperName na-letter com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPageRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPaperRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPaperRect -18 -18 774 594 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMPaperName na-letter com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPageRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPaperRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPaperRect -18 -18 774 594 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.ppd.PMPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.ppd.PMPaperName US Letter com.apple.print.ticket.stateFlag 0 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.type com.apple.print.PaperInfoTicket com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.type com.apple.print.PageFormatTicket 8BIM8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@`K\ 8BIM8BIM+72x48_PNNL_Science_Poster_Template_06-08-09nullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM8BIM (*N JFIFHH Adobe_CMAdobed            *" ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?k6z{,o\>]co\7_zJtȣ+9}*{r(%E_o$?qGWn1q $"b_Qی\BI)ȣ+9}J{r(%E_o$?qGWn1q $"b_Qی\BI)ȣ+9}J~7wԮK^=uXW%MWm$E I$RI$I%)$4r@IKWoZoS4Epx%.@8]BOXJbxmgAwJvlu8cK%s}cu\K,Xv?um]I)}L#k}Z3_ uo{H^*x:qw>R;Նv/?ԩ}I-Tl](e8J;?@o9Z?bRAN ~Yo8wJwզYs岒Jsk81mr+zEoSX+$zoNgť ?鶴}߀$I%)$IJI$S8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlong;=FStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslong;=LCntlong8BIMRoll8BIMmfri8BIMhttp://ns.adobe.com/xap/1.0/ Adobed@     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^_y=k%~KF}Ō$S?%up.|Zr`/{#;&3b~r4l^׺386\=<-e9&7u5 ]H~x^ ce*L<hIH`YChႚi\r(6=u>: $Ps#ip9!c8 1=tݒE#8fI#) 1?'U{=쨝kٮӻ*$x ~8<RO䟠_TzEȽS;2~t=;%YC/ϐ쬪U`F+G>}zN|Nav;$_@U|Z%{zd$'ͭz־z.ȱG!|MQ=UzFO0sׯP<-̪>ٕAhvj,ts=zN_0Ďes߼DON/-\ 7TG H.=O^sR~4ѩgM]Ęj7mc=z֓Ӎ7}dZEj{xۘjӋ}O^:/ʥc? {QK)asc<$;޼eN#f! `6` oP mp_azu4𝯑[Ht0h4/~W? T zu_ɾw^0zNqUu'_}{GR?9ݨOca/t,nu+ Z_߼a״|@)߼o^8ۗJu*PcA" =>"N&iW̪ުo.4Dz>}Mpj?4׌}: ¦Q/&]=7A"M&`@!}=ue^',/ENt𜾮 wWln% 9&0>^3)A?~^Ӕ_XIf LJ8#wC)uCIzNt@|i"O_a:%|f K e.*pؑ66ޝ{H?]WؗxZ\:;Lg@nʲtNG~״?>Ss{oH bI/Pﮭ b,}nu?I=3~״|s_F.c߼f{@/;ߐ҆3 +u#?{F7^:hTwCM/mO씴1ҀO`_FR{{HM?5vӧ;pE#/WZ^+#?tx^:g}qHoDZL 6{Hx _9~ub<'e__kNuŘ0zq6ПmXy+#?ǿ˟}6?xzǿ˟}6?xz?DDnQLw'u$*,dFQMz׭h^(-o״]6U =` ʵ6?Cc+i^h׈oH?S}^ufx?pwe>?^: l,Xc`۰}Z͸I'n>ִ 0;{~dG^r[?X_xz#P'NskJW{2Ve*@?[: g׏~ׯi{o+;?^:4/Wٟv^=^u=?1;" ,ik4v?ՙ?##_˗7~ׯi{cr&_##L._޳׏^u*R.eeOI(fM^/#\Y+jde [#՟˯ {ַG^]]3ߵ^:5gBdz׿?_L;'~o״R+C|AѯϴiNg{L_=&/mר:6OA1oko^A׿D }[z ?z'@L_ׯPulx?b~޽zd/F8-߀xamU>TなׯPugǟ{K[z 3z^xE^o~޽zs @i7ko^A׿ |yWߵ^?><_MׯPunU/mר:7??*S{{gǟ{K[zߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uݏ?폿u$[{^돑J׺j)]@*?۟~`l=Uu骪׺ٌBV[R-·] G\^*q`ZBTD.4&=uk&W@gK׺q!U\Nj4r?qx<4~< V\RlMVc dw\)qODA?_~ҊZ*?]U*&P0RWߪ=zOUB*)>-|9#.Ρ=RC҂/?4gEZ1^X"㣌,/>}zNq+?~GY+}V&8 } _Qרzyww>_>]:oz֞z_+/}EMd'Ms*=>*+U?5,뢧tum$&"z-Ғ*$HE@Hjxɯ$rc^"z'x?W)^T4sU,6oI/eSiSQܽqo_VJs"z'EiTw&¶[kI,A| I%GǺYPMۡ䌆 jz}n,},{AG'I>1#_ToˑXjHvycs~}{IOw/=3jMOAkxzӤ?_i]?.0;a&~ӭ=}>A M x(>DZ٠S,k?uק82C7 ^ ʰwY"9d*J7N(?8`b9#l%]ʼn}:׸/״tO *\vHNoPqQ[PXA[Cu: ?*zIZd<'Nef7<u= eyI|~c/o.q W6m1zOw>0=2zpOzGHPllO߼fOTO(Rt_׌.t'TA݋vZ~،` AA {.t'qrpXr0&Jࢎ,{H?OōT+JT!`Dt z_i; [^tkZʿ%`@w$G @?[_߼GGNP'~5$j]Y-zN|}ZYVznyV] J6#\ ߪ}zNPJW[̚MJi:PE 8ꞷN ~f[.dX6)T0dEߪzNm=M*M<ɫDaJKi8cӤX|,P*_LSAim.$~L׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^v?>׺GՇq{XX'ߺXZ/,luTB?^fpķ^Bl׺⹬;FWWS=7a}{˒Wxs^u:V Q+\FGU'>׺Ҭ؛c/lMU }&Om7{{G^GI͐b)U#ɘJ4bWb?TzT?~MCUq?4"{F_,Au#ӊ[~ԣu ~eW v+zb"AϿj_Qz}CC]/6od#붟<{RC҂}ݿ`|FޢodEǽkO^CҢZ1+ķ$ :곪5soi״ _Ժg6UnE18W^"z'?fd {AZQV,=zޓ?Lc/ א{^qa:O^E6ͶRBkTkG:Ҟ4q22ؗQ6:Ғvu?b|^>M&97i'ʾ TlӒ>/ϯi=?A t纾8S?f֗7:ɅakZ{>M (ѴR5>oI)?z^zPQt{3O1-UHu7gΒߌ=:ގ_!#O:+#Pݱi޼o^GO mJk>gNJOt? MQA;=u<qvXSGӻrZ=_%Tkq {:~u+{b[}M?]~OJWno{u)(:FkGwZ2uMF͆@Λ7_1zJJOO4 )U'5Քjbjck]k@C'dLn?X@TuKX:~}o[:y|=~AkG{ntEݵ=F-m((6޼WGJjO_W{,f6(!*!j0{oHEI4a% q2Vw/tyImi yz֑҂feI)eV0/{UES?޼G}oHA-aO>_ SY;]j̆Q+!an-n=^A?]|GiK+齼bM?^t_=[#_ni O->} vjoר:SR/"Eҕ-Vn9_!mϽkoSרJ:_ h-K$S2Z&*hO+]b?ZׯPtM/QgH-7L #(~޽z7ǞhZz, M{.Ut*b@^[qǿT麏h֏zd!ZmYEEL.@=nmh-G#SZsM@`Bbixm׺{0Aq1`XFu{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uݏ?폿uQe{m< rDruH^;dХ)L=uF_X}UrʫߺYW'k警{N =u>'Q+tm}aIn2){3e~{%&ߙ׽fB\1BG={^?{-\(Ϧ;6$iEQzXP|Ji3ɊHb4 rDsj_QרzSR|\|>)ʿw;tbei*ߵ/=)iOϚ ?!06#)_f?*,miרzVQ+O%\3aI]:ʀU?i״U1c(B~z2@H'ܠ[aǽx״tkO_Gz;2+8oWpڸ"z'5/:b&nǏ"joK`1ꋪAq>^zVP!oUD x"&fu7*.!#5~:4ʗOÁoI?{׊.t|Gn/9 2cUx<f)ڽo^:RQ!o F+EeMȂ߰q{ܟW_i* &0svԢקo6nOox״tokӂ-hǹJ^MA޼GGJ )hn̯ )ɤUx״JC)4vNNRhk{[׭*?:#!A^DTo?]`**n4I'}[`57*kqU~x徧}SzAҞqCބ3GҝkLc0`O^OEq/1]g|1Gt{O^OGg뭋Afx>h_ %/:$r?T,Ub$"c)Mp|!Ep=C=t{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~wco~p.?`=uc9SN_4k{&[_S{yr* 96&J,ՒGGOQW! NNϿu{GyݱF&ö6Գq /=`k~,qrny#AE=>"O$4b=ׯq҇'ˬ 1NWѬ rDJZ=RCҶWZ MÛ!}gōd\a N&{ֵ=*o]dym Pҍ\Z&VRȸ=zK|c"wXbƖսO^L̚Iw/O _ ]77@}O^H?bAzLa{16tCP<{׊{IkB>S},hZ5Bqv~۔~Zx״4_OZ0 wv|ɦ=XSǽxJjOOʙw|}>56v>L OTt{\/zJNu)<ݕv=P6[Hzu'r8O1<uUamkj7״|Tq1GۆvN?0 e:T}u*i?9}ZG_m.Z ׸bPDUGSe߼c״tv5c)!»_/[F_oTi [,>7[:WQzBvwʸ}Ԑ*%эԏB?'߼fu=/#]c=o +m%^doh2lsT ~ή۞o޼WGK*h +1d${ɯ$=f^tNj(Ob!g*J}N<şߋ߼GzGJj_A)?H꙽(9l9y?oh~׭i^?{>8ޛ|U֛ny"$Oznӥυ҆7h9Xz޽zuMu4uO[cblmJA*xTcmP(v2$dRbh)H5?z>{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u߿u<}x_~c2ĿXwQ}uxd(ctOuk ɖ9u+1=u&:YV ECUQ)wg:QQa Ic{^GGw^JHv7FDHRIp?@x<^m0\OCI0(g'&HI =׭=ω'+RAIa~Xt5Bq&e7ޠ4ZׯP, SH{|K1@Y$~'ϿkO^O̗"UJ_(Zs^*u''ZUόxL>S_U >$Yr5/ϯi=+h<+z|zN('+bs6>S2u7ݒ2Kմ5 ِe+yknpzu'>+#L.ˍ I(]?|]]lXcz{mɏOTk`ܖ 8߼o^һ r'=Bl- D,:~oz^6+ M՘۫ D=Oz🟃~u[콹Mo64.tC_S ?;vƬ\X1[y MÖ}܇Plc-+#ut[T@0*W_%s.Hb͕GXE {׈oHYCV=ԓ2zt-(vq'hʘ*`0G¶)ꞽҦ!A<1A,DpƑ ,u1I_~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ]؟u@o{OSM ,j?۱7L1 gSsg4d7_I'9?6?=tEA^;?+qPIbB@^kn˝8L7^ŭF5>1y~t=8,V+Ɍt/iNW}G^kE>G>ο9LGo mkרz\c? ʟoOrW#؎R1!'n; ?Sp9i״d4-']#FxTCq͏6׈{IeAn7Uu'V&jMGX }-.9:ޓ~èy2'6^*u''@FvLbù;G+4z+G֦BTr4bx׌>O?Ap5%VZ=@9ޯ~^z_c9]'^>]mCi?yC5- {kCqG à_|O8w~ 5Crp4}u,?9R-kZc6_^⃏U aS{=?_Wxӯh}X'##49nćҖHmSSr9:G}oA?>w˕ 읯Jd(&ݣϿx״87p:YO. iыAiosϽx״ O[C9nd$仓:0~y[##[-m:);#4 fᅹ >}sxw1M>b _1jrLE*ZWzB7W J|BҺJOIu| <+ҵr@l=Szt~1br|ih:q//>zKTun$uet8h:'Y~ڙlBA>S:ZQ1((b #0F!U[ q~=u/ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ]>ǿu4'/,koUs{E.OJh_ߺ]&_'1deU ߺNT3l^7-7al^#'7E () Gs!p;Yboc~ĮS%61K~#ߪ=zB.7?lKIIeI\FŤlXP $j_Qz\̡QG ب_ؓOs҅ZQZׯP+/%w/ǧ%G}Z߼DOB?52j_n0Z39W"2'yDzOKlw:bu>cu.0Wq4w]0H>?BW^*u'>uWk7OƬ!?Q]=TW/i?W?N}_^z\Py~Xo]QvVfހV|e` x״xNrK=iG#koիqkoGB'ٲ2׋mq//c:]{GKjNO]% u_ k7Nc״t ;g~E}_cW؋am{nދŽoATo4~y[ݏu~;qێW޼fu#7/ U{w4Gdxr)G}~t!ܠUtG,|pl!JmحyW^:Z(ÏƩs6Oy}_rߞ9ϧ^##+h…?zm?}\_?Rk<{ֶ qN3oƪ'OtgX|7]{=z7A#:o޵ٔ67mDު}zK~ژ {qV '/Gy^C{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ]^B~׺TыQcѠV>׺ٜ:-k5=u":IR ҡ݂ޡ ĒH׺Uci7c]{+UE-省oߪ:B6',S.SЩ 5Rr48CЇ)(TQ|>% KBbpAJ?<ֵ=/q_'fJnԧ b1QpB f_A #ߵ^zq@e>2?^[:V+YpK(_{{׈oIuGZTuV|qa_ .Ƀ?ǁ:Џ@;rMnہ,J;~VcbqRpl@[n./mx״O[y|xƂ9{'7c`xn>?.eB+R;`rd[pR\}9zuxNz[1&[ha*2LCn Ž|XNgTǤ~Suq[/ k\vǤn^1>} OĨGo6=ؔ>*jNm`ف=o^:]*2 fOh Ղ8XwtDapC]VzGB#.fMWVRdM_i4ɿmcVX[{3ɕ3/6 ϽxXc1,/NJ'4V7lӓʏ ^:a6FԒO}u]20&JO^Df߄HSUPT,{u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uݯQ ߺQ䭢],_Ң$añ*\kWR/F'N4z2)MCYm*thq޺K_Vpn挋#"CY(i`A~ ؿ/3a[?E%ZpK2u35Ff֥n7x|i/5v& ZMWHW VZׯPt&b?i~,n:]Bf{pdpSqEo~zׯi=XseZ{`z.Tzd>$?!^3$׿X]%t *.n[z𞯘3+1`Wd{?:.>QmsmC׌{I@tb;pcrIF]f80z:1I|ɔ< mBjqȸ X>39]]a\Fesޥ{/I"^Й|K/-a}DNn̫'`,.<EμfzKwFVwnre͈u l8X^:1s4So _svofbM׊{HC'幍Zwhn ؓ;?-zޑЃXoьG7vdVّ9&97I:zCb>'mȖ+=/GuU zy n?Mר:q] ӝUuDŽ<@(K?}=׭t"b18ьc((C0N9 ]{~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^v'/{ 迩߿uI{!C Zxv׺|\hS '޺J n;nn|ޯl :SKOЕq~fьgJuVNjGT>CЙ1o/l_[Q&᧤P=CH#ul?ay?g#iCoP%G@bz֞z;.GIo4oEyh">r5'[z1ȻEn}k[R`K?_zSi= ؿOZ쯌TkkE=IvICk_^z_𝟐9S1oZv>06Jʼx}U|7jqƿXsaZ׭#⿗QCU\>o c)X_I?):֞zSaC񖶂2l_7]/)Z wMoOc?P~'^zJ lqa\9oW?I?_:ޓЧ|*Gzi}iU;%:/HQce_޼T' )9Ȯ)#+j(5oAx׌{ARq,pR7kA:9;_$ x. ~YMpL + krU2[kou>?':%qm_a$nE uX>7zB>3|Vwz_]zVWWx?[:p˯~1~;ޝ?zhfjOk^AЧo= i?Pu0F(]޵1zBv'bl|QٻS  (-{IU^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^v'/{ 迩߿uI{'ֶ?G\ )NX`!I]{+do={عeDyu6]C(7'{^V|O__caMϒ YlZn mZuO(1|B[l]zldVQ{9kkZz'W qRJ9Lz8{k cy >_!c'޼D}{IK$/1]~mG7X) @Y6.B߼TzOB# -o{.NPy״W'kmAO#O'gÃmY64t8' oGB'uVƣuCWu#SlB u ֆX"?']{׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uݯ-/߿uIBm.O3s;Ͽu[KTȔ-dGj$'#Jpŏ}{'{3p]ݧ2{.k/{G^\|: O%1!gH5qZu?`9E0"L.qNu(ִ= 82|sD;\^OEHz׭= oWrv6z5[-_\{X8,~kN,=1괶c5Qvv~t_Ψn%< H~}oAPt{r_=mRFϚd_MK9CW->6׌=:l_'N{&?\IapU)_|'_6'~swX_W1zB+nn_{߫fuc=6o^+u#S?F#GuNܺtsvy4鿓>^nmo k^t'?|V5ls䟩GzGB wہW㵐ĺf 휤'ko^Aзn~v3G[7ZׯPt*b.& ^}8]9y>Sz׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^< <׺%],"T?Gn{^*1.c`lV*yXV6'ߺJ ^#7!p;{r؛y/pO1'ߺB o=!_z?+<CЫ_;sz|>?v,gꖇOV_z֞zs }U~.ݷbƥxd!P`}O^)ahڎ{pR<`I@x:\x?'xGƝ3h5X ֎&?W״ /'[?&~y !Q~{ xӭ\qۃ=tA )k_<-״t):}Nw'.̨ Ș|OZÍB3>*徿su O%>GG=ۛ >7˭ /o~7I?6s{?l[z_i x :|?ev[7F?s˗U׭ xOm?Fe9y}YJ~O$޵ _Sz,Pzcu ?cCz/ J_* E޺N׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u_uJhE娂!d4؏~E\%جy<| YO+ ^GFmn\c}6Q?uOU[]؞ ˭YLxU_3zt|?u>Qs`zjykO^CпP_̇8$q5&Ø Ji7L&ߟzׯi= Oer̂jtFv5/x˟ N/?=2k46g6`i3]*c۴g#Gx״l'CYxPK3zMBO=C/e0oGB'+ƿNm #W:_5m$7<1:_ߌʃr5]WsnlJll>7o@T #/{nM,_jhK@״/W[؄Q7AVKZ}]\ǂx@j^##O tGPO" +&o U\㞬 ~~׭t3a> 8?$dW2I6N nh(jmk:BT1mǧ~(Z-wvVٵ:ִOB%1AS}}Õۋx^R'|TzOC%Iky!ޝ_B>/ϯi= ON}T2k(mp]dd1xӭ`qi_1rԩSܵ6c6^7:0ԥ -a!ŀ>7^: ?G,=ˤ(oݧI,Yxe<6ǽx N\uQUٝppCFO⿯^:ʣv9h~%u=LKq-rUW^#|hF0_9c% )4U37sZ,'Wu뭉v;)}?A p8޺^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~w{ `^׺|TlL9zerB?t@%J Rf'auGXqЫ^݌ rȫ5zCqcZGO?~|no(n![޵OC& F1¨38{꤂py,L޼DOB1 ٽESz={׊oId{cֈ7?pJQ:hA? 6޼o^ɃGD;IR6| $0x6 Fo^_xWm:@ %_tۏz_ x0 0'[]]$`,n@@>s^##o.?[_O?ΛWm7xi޵t 8?vǏ}-Dfʝ@Ǒoz޽zk!lN6O>:O Tʫz}O׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~y^Xո{9X{B_=]<6=uʞ:9ҶI⡽d7Lq҇,{YkoF =:%H{ qt= o_6w>dw^ށůj74Qj_Qר}:cQ~*xqq}MGԙ5"a_=zB 1l 뮲 j}8 Z Eh27ǿx/'xGvgͺ}+"6 ;n=5?/_~}{A`ڨ+Yט$kow&y[-cP޼a:ގ,7'hG|d>A:jO1z]{GC6&.'mR>RlK04T)׌.t.࿐26Gm*a;xDXXnIAGn=~t2?h1|a[] $`,YYʨ@=^t2mCj_hlT a`DZ}[Ǿ?=wo.٘}v=׭t*QZZ JZdpEMqoLPQA]{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u߿u˺ ]Lk}o~Bl%Lrͣ5Co{=b2yX>s?)!|X_7- xPL?{÷3jj@J6#;:K\]/rIRרz_˗x "'iƺ&_h<CV62,!APK;shb oho=z˷ϜS5Fkw6I^ޡ`OxzOCf XE$yFneW.?[ތ:ՄV71$ oݦ}O/jX׍}oGC|~(w_Ⱦ "(zlc5l^ycFc:ށɅ@O%R{VxOȻ?B?^:0_coWf֨ܝ2)=3_x?ַ>e~t1mvä%, mWdme+GCݫ66 ApU'ϯPt26x08<> i1XشѢ ǭ{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u߿us$}K׿u%[Ai,5=tfܻBt-@zy?u}c6Dk`²͍̖ ,lXO`?޵/[e-o]ğMMcѺH=Zz' cA6GC^† ${o!?x>u/9m/K7ZxyULؚ7a zWi= N~Tz~Lu3qv{D?dJP{׌=:ގ/'| =KX~c}u {nS#7 W̟Ym$`nڣ]VOYA_ށˁC_,7pŸgrSG'/Gx״/v[M/x}˽Gt ]9ʘ/{׈oHkX %7=2,*\06koSר:vD6MV[6^m0O@Qk~-U't  ]k 0cX{^^۟EohwϬ;7"ƇA޵5A(Ĥ|ڢ﫠eދ=?ȳ7?(pm}ODB?!zׯi= [s 9z[;P.g^Q6ګR5ڿ>[zp?𝯑UOwJ6;E7͇SoQzu Ţ60 XVX;# `]x.nw~0*zVpUcbZ#3zt3`?CF; #3;*r;xN*?%gq'^z69b9A=Mco/Er_|TzOCCgVa<`uG6YHj}:ݷ9;dF/t cn4 xރkۿtmk34"s5_]!״''0B.3$fD^+u#? Ou{dFNʗH357޼WGC^Yi2>#'ET\^v+2Zt;wOIw&ǤY|h"LxACS&6ISPCINJC{^_u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^_׺-e@>(r=uŸ!EXʔU0;BI4XߺBMXG~̤l߉^á >)'KHl̎_ͼ~nmu<}d#/ ߽;C;Z89o^"z'm!¿ŇAֹ{$:.KϽx״'sS(auȣB'Ȝ0ox:сnYz@AO(ֳn,o _oGC~|\DȽ*^KnCDr@$F_:ޑ۷º>Om+mCq9-ϮQ^+# AM6=072oϟ^:6?{IcoJ !s`Go9 gֶ=nou\=Lj{jా28?{O[K_~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^_ik) f(w#ߺXղT58V<ʱ6ĞߺB-mm݇]_6?"5XG^s|չ .'/ +g6nA;oWi}Z>CṄp,R4A/mڝK-h3UUK'[z6 s6XnJ/s$A 퍹X{_V޼UOCx$k:weom"ɓë[P_=oAtqiO [pHM0%x,s3|c:M B#4Zn>۔SXYC_[޼fzGCE=ػ̩NURmjB޼WGCM.ICC뤄r7qcK^z#n5|Gl[*q3tվ^1f#YMר:0{Sk툼om6:txpx|v&-: {[ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u߿uI41e8P{kŻ%C+CW#b=tkFK'uy7 qpRL= AWTuϚۜD?#jCC=wTnK*pha#|zԾ:7BG-',Ln+3ƣp1uׯi=k0, 7e#v]4@LyC7xL'{[E X$ywȣ"|a]kC=N5 XuN->L^+A[YM2^7˯hu۟I}3rʺKv_,׺vVMFVlOIv\-3Զ1cUZq=nm,'Ė.eȹWQAhȫ5fo/xӭu?NtmGw |G\m"ޡV2ηjf׌}:ށ_Aw1-y1_,[*ǯi/+lԱ]վ;Cu ԴE?a ⿯^:6/5b{GzW9zȈ4uٚ:%[zAр}_{7뽋| {K Oz?ڸ V6r~tSG,?${}nm(9%ŘB&]]K C-%^u dA>Fpc$&+7zSi=w.\feۛK|_90(/N=81}kݿԉ>w5ьB]#7˯hzۿ𞟈87jS` > ?p>fo :ޑ?^lݝ2oO)Cѧkq^+#m+_$l_Ğ+ir`R#w]o:0oƍc;CFc6۝Ky A֦I\׺l\R,Φ w[BFO{;{cw<濺a%͆XPܐު:C΍co Ȗ7 3KnOzԣuXvnn22Ko4_|DOCA?:hg7] dU '6ԑ9Σ}N=mNpUHmvVnmǫL ?zӭzۿ𜾵hwydm8bLۧ?O[[}|^:🿃f?}ȹnb 7 uR~HT}~t>mExs;7s[~f8)=^t=_?f ~u`nTnZz~uj^Aш]9[36UCc.-?=ׯPt#[׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺>ͽu)5/sd`ߺN̶U<.s/ap\BWȡ7X;7Evoa|ZÃsl`IhauIcxݕ͙XGTm7C~Mv U%!o=z/\G.wu|tjLo񟭌p{l~AQxOCQS~V 6֛O7dYsYXnxAm_zuoo/}Qo,[_f=] 4ݽ>{GC@q&6e@o"\h㔃r#,~}nt?G~~x Qwin13}4>?[:0[W +äSUԛ'/]Q`34uIs]l|Fm^Ћ6ګ5{_ 4V=~׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{@{WK6<yV?^u-nML^;'x@i dB }ttofٱ}UصqV(jZt2%uC:uX"r-Jl2o_#FQ(o~8σ_#%\;06GtT#1P|, ͉^8$X^y^3Sbr3Z1aMCiHmsg9}t]xW^T>1'hcqj dZĎmuh!l jY%ѥAA:s t|+鏆8Uىbr-tM%l0\OߺB/Bf-ƣxPBeuN@7@=t"bV53av5Hؼ*VH@&ou׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺uI<1J>$X~wI4;Ejrl Đ,~-1}wٱ+ar*Lh6F1UxM{bU<#+BC`x =t|(_nm*!IF[wZEZioFn9~?&K{u8?4$]^zZ E\ߺB;uَޝ<},9ND5(U0$Bx^y_[1 \J9imfBjt"؃I/{?[g9Tewof8cc:q{/> stream xc`!0Ć0 endstream endobj 42 0 obj 19 endobj 33 0 obj << /Length 34 0 R /Type /XObject /Subtype /Image /Width 2007 /Height 494 /Interpolate true /ColorSpace 171 0 R /Intent /Perceptual /SMask 172 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x콱~w)"L `B UB8eːq҅;Wnܻ8_0HFHk栥WK3h?HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHoͿ??gFb _ݖ`L$@$@$@$@$@$@$@$@$@$@.q+? <&o D$@$@$@$@$Ke9vm`u\Ӣ$@$@$@[po%HB~O|Xߞ 1   Lo^PRNyvmN   p7VE,~6)@J^ĉfdtA$@$@$`Kx8!,&Yj^) O߃7AeH;m2/PPU   Ѧ[?%W"#  r(oT2/w+';x oI#OFgR  T  OAb{C`_QFP@R<?p8R_>|ſJ$@$@oX'!)rq>oX}Y o.ye3/E$@$@$@$0"_pÌcH~T\݂EM5YXXWd'{ /&oޓ?0\HXy da$wa hJ.0aD@[wԐ p=:* ' <ˏHHH8NjO;{8QBO"    _@L.>G,#x ʑ$'j"g L̓RnΓyF, *)NI$@$@$"vjV{ф(]w_y\]LmX*L$@$@$@oHލ.sK}ԜS9J#~<3o }˅HHHHjT _~yQp?L)]P4HHxsPZ_Cc X2MΤY   ('Lr}6'|,Pqk9C(8- 'ġ{x^{gj 0uRy&IS   TQ5+GCGMcK]7mV$@$@$@19(RD;^Ǿ$PBqRA-ILk#sO$@$@$@@1U\o_G|,HHH@T;W| 0W{ sBxh3Z{Y-a7AƳA$@$@$@?nt~G:(9h!ATHH~ NMj^?@89D?~g9 xϡHQ_F#~F"V1:Š~nԄHH~7NwG ?r y|THHHHfk%ԗ_ ~ƟGIHH`D?{+hu$/Gc? oMr({yL]Cq$@$@$@@jh; Qt9IHH7HF7_ S~ mjOE/ 5,[io?j? y@?zIb!Oר- '|/n8Վ ?v2fN٫(e>WO$pVJ[5=%v5x )/\:1aK_9SI l0MaI?zIN.PB$},56sHk5'~\O?rŰQYQ'nu>πӨ9'a앰:UXMX\kӚ`Nйb_f rQs^#mYb&f}q4OOi{ 1MjSTi[ ;d$@1O .|5jsT".f^IPDlΌg[ #_s_t`fwr܏НBZs0?ص?hmrJCin#aq!BS΅څrr [(v֡*O<_lAM;2H6 ~g$m簛I GdaܘB@*\RZr?rJ'Sґ], p~0YlCi YɲG49E)k Y\ccj$V.;[p .\˨/"=+ ps_xZx~fj}$0MVys)F[UT Sy>BrY8gT^Og]NP\v}ͻ3h"UDJ^79* 1O~%mȧJ?eܮO솒Ƀ-̨"N7Fa_Zhmv4W" !&nqC ǽ_Xr']aK.P _͘׳.׼̖W`g$DbXzmyfӪ{R\&zvQl-ͷySj/X=tdW7[0h'ʜí-)!GܮsG>7*qȣm߱ώ4) $iK5J>'ډ*oX]6 4S?P|=5 N7'YQ2@Ϋ@<^:ЊlߏaD #VG!秒96O,kS0_!40`vx|8Ȃ[Cp)>.V #f-` .Λxa-!w]1m?; g}',$=y V./|5feyVjz64,,yq:RW ÿ~Gޮ*Z6kT'v@gDlfp>B^H"!!c~A}JV#KGvqas\NRD]~yޙFdQcΑӵv= _=~k#OYTSLl1 P#T0N=FYr~ZI @]δ VRTr_#3$wlnqμcȄ3~c22U茸zܑ1ѣĞ I(Pb[X8`oPO(GePJB$+6<䓱S=&n+"$G!Vѣ/ X##D5 ÒI* V.OS *AXCvՎβǍV[̖Y)6"1f":#GaIV^\ 40r*]gzֆ8!}^ݓLBNANk0s2c7 ȏ= qdd8( =e|#723O1aJX )SJN.9䀟Hq K_(p{5Yhc? uՆb+ }:2<΄~|[\(6aa#cifL5Q`Qf7PNd8=i3+ʋaAf2x0a_Z(ehBγ1R5A->2 S 46wD~2Eh04F I'maί2'XkgLYXDxt|֖TVUM.mWe\2zm|B ,kn I뙿{^H7WP 4XgxlC) e^ x@6; R3~Gu}7!33#0Q8}hM{YJP..͊LUGX;bd{t wxy qh#BF, ^G$%GL,ݙ ;h??PMP2dۡQ͊ 1޾y2Lr`.d^z2E4˝(E%XJ׾@f(/ç=.W, 2#[f'& CfO\&ߤ?wiChOG4d{AZrz->p{,1vX^P0=PkF('9Z߮@UKH4 Sj/hjmI.X4:(|tj ґ^2fck)6\W[⊛`:* df4՛Ll#A"^Q;dT#ekb4Slj(- ֧=zzI{ x^:GVfdm4i۟~qy+)q8ٯ2;]L65ut/FNfO,gxйYSIn#2:Q>8%]FW+]Ҳ;R&ㅮSgRfm\g=Ivcoh3!6rVsN=`rzܭ-L9jWt(cK?7[Vp:GwocHp!8R)$ FJf'Cc>8Z޿ҳsaUpb#V଑;yB6y{/-6$E許sAAJ~?X/4,ys xn쬣MUfnFPQ{ ?5sb݆$C/.t;1<2RXyYlW<\枘139%(|qXԌ8hȕNI{}гphr {[կ6;7l"jބv넝n658B]2xMq~ bc<ɂWkwUsaGڗ}6]=G_ʲ^G_%y[ie Mk:-a}'w;ڭ rޕF, kݥWSY5( GQB73N Yg1&`Άޥ$J;pπSrgG4QXkDRN>DuZU^B+s7ӠÀ|X>4٠vGGBSjFu?YcWOm#'=;y53#5ؽ:XexM;ȋLm{ "BE$;=h灛x,k [lTro5zv*@4 /,ǜ 1{I[e>OnjW.='>0*e:tByzFL|6P <.%!,x4oWGtی(&2U)qS>6n#=}ߎG ;n2qU&~L䣩'=ȢScɥ֮Vj'uB"Sj+2#K7[ 3cvV&6jߔ2 B[38~݌a#]f9jW͆hǧGHϿUcN*>j_Ha;_5DiVIz݃ήua֏dIͰf4F3kuVhRڵ7F-b=I-֍d.u# 'h<%^ ˾/Aq'Ԇ::٭~QZ3޵5-^Z_"02F!~Q{f3 -ÝL2'N9~V1^3ǒa*8>Bf j'7Q>mM2. <|2)Y u ,8Q^I Ɇ'gBWi3EfzDQDL-:ރF%Y UcTZ`GǯgHBc}kug2QQnˑsQgGDw`uV^;g|wChUBGHy-„idk{ F,V,F@)ҍEi`Rʨu.L.m/ꑢnRqWn%_>yFјGT{dN?tayS%On 㾸FGy/%Gm14=W@Q?F,aG "h+2o1ZH oUsFNUղF=೎WL^IAs oʽkր!fY=Cz{[Mv^8-k!D=[24]]MIOa~z%ORQ^݆.'JLv>8R;i6t.=70D<a_\<yxO}jBWnưG =G*=v/1yLȔIU;,ѩlG1 @N1=zN[s8K@F%y|MW3js"18mݱ KI'Ye:薷tcgÝ}*avf Q86ʌ +.3JvQrݩ;3{b {rގ!"2b k# JԜQZUS8z[4R S4>j/("h)$̴HD-iD{Wݨs /g6_,Ƨ,_gup6!-ٛx:m<["byg )\hyAQC룑&(t7Ro*UfmX},Vt~it{c8YHwiQ1 '&(#Zu9Oݵ%Yi j蕮v8Qf`gbd1X#d*?)?4G&]CMF+np-; )zUgaF.; D<\+s8(9FP$`6NN|@^Bɑ?,nZНK>ֽe%XOUU(y`;H$FzQ0hCgu;Gbia-R{41Qvүv7i6WilHJ}?DafB/4_i[.L0vEVd+Ewb/hhY6~[VzUbL:A(VL+ 2u 5bwd" rI>\kG%GQO=2'YiC2Gؾrl31XW^`ִxi~B156ck+wmc~rߓ0D4BC# ˙4]V8_YAM{ӯ_t.cH@K;PN09}.b)Iآq?*tEgbdcaeçk3գK7cӶ|9j?3gj*<]<Sɀ3ߟ^4y ߧG_&|A!3F .+uu^#+̝=hjS2jeǝI_>XmI [xGL}~ -4@0ewwj'G =;eW~.˿0ժ>ցr|u+3+/(i{֢B`-_3)fɮ]_ZkS$ںӼb }̄Y>Tjͪ*^LFn#\iQ۸p`0:6۞Ǫ)9n^jy} Q tQHT2wnF1_ Y{kwG%G!dZ&xP?]t8v׋(E)| IS1̅~Y h O-ts f5!H µlkh7۞Ǫ 1YrObcQ 5DQPݟ1~%h_ m̗&St-=4WG%g/p-i4rP?Z#mv*kž\cfs6agwSw}pLhmP/#EL}~)K|C,:0oЙ ~cyTɑ|`5ݠˤ_+M̕ L Mq'P S!tyߺ]hkwg*nMٹ%O~=d*03n;+BKDZgbd0f]H%5[ߘ]uG+6cR#zDHc#SR frdkay$ʮHA@>ZKfYY=zZ 1JM6GWBC~Qx HOt_xU}*7/&'hڙf,V39*y+DgւYnj 3uB͓]呏(Og2t.#wct϶H~cm^͔ 6WUcyc&=BWnHnU9jT%3!&3Ln{f]]x\He>_!C!C8- hvbDEo|)^P32Ϗ5J?oRF:;W ̞͞ˌ'h$c7'b=w2ŪMǑVS+w+0?Bg󏏞]ֳE]yqԉt׵>5r_^x/ͼ* (܌ n ^Y+. Pbz^]`ΔI'hQDx'ݛOHkLaoh;MzBxx4tTn]a }$<`mo5#;UV-ɮn8=Qemˬ^Wڏ{-jGHoZTTwۛL=#K7ۅ'=XO=# y5yo(L1,W稱&8{avn#5cp!odlGt=|nF ]tpU4{",(qޕ vp[̆5AV&JdV 6W*~2`3{ 'h$#"CFXFcLMo񵄖n<G}h &L~6飽va I,_;ucxlxfŽTtF5Bw?6/hjS x6Ӭ6QM&YiGͧrRM<jx&F*^Aa"?!4sv? ]n3e9DQcS!xwC4u0(St}?p''RH̙ S$E1r__H#2y듩5izr[!*G j7sP޴+ZH[_d$1F\a j{@/-1lckWWo3!I y ɯ_~xb@X&oZXGb˝#K7+y([#vrgbdD^l'PQ yjՖhGMEW2n `FjAuOHn?2\ =X#hBA$25cZ{R ?jl&$g{<Gy $UEXS=j*~ʘN)x% SE֚ѹ=&LLxXM~9XЮ?M}myvMm'0g8Dc23GH\3kLv*LC曯C3@0G*=hy(a}sd]>“vMaN,[lk$ L,<ȫd98ú_ABWİd>DQcG zǐud!buq4`2b%)+`Lx h{%@ftQwg4bR^41=~·W 7 7畝a/kS ,ɋ@<~$& 'Ԗ;j2):'J+e} Mʘ8/v%UHSln,+1'#]jqSg:}S$5~N3ŀW)NJH7-B0r,ݴGx޴ɳȫ831x"d/f(ϱwbX+s_a|ݼm#kmso}J$Ι1$Vu:r,6y` pU5/q)BxXc(Nԁnx'O[O[쉅2 ,lͧɪ[v)Y9uWB8y,\':ǍP}1/zevh^+#9NۂTf cT՚hg}ǙJ[OLET==*ׯ!aRV-inݏQe&];Gn#9 i y_Հ&;{n<g #>fq{){Lvrq??*D3C.ϥ= x;|ߴVAQ{Gzo~4t.SFaɧV 3x5Ԏ{&FO2jlعRP]aP=Ge *75{)q!AFD,7!O'?"o&Qf)9[83 4n5$L̊Kֹ4c"3;̜fU5[yWC仢;3һ*_ +ۮ9*70 hXR42|sUv] "FEO+:T,4E],Cp%vYq&c{_̪ܞߦ4eDkfci^}GWLg&a^^ql )PGU?k׫gDcSSvg.uu :Qr4t.᳦oۘgg,˜`2 E+8 ]Z S?f;DQcM ;B˪:AbfТMoU7Cc=f|SbYȟ3@̇~3)k{qR0S xH x-}Ӻ(@[,ݴGf n* j^L,<˫8L)*)Q 9B/z=o7 O׹&pd15鶧&6޽ʗ5   zp<뷰B-|Gs>?"C 6c5SGn#|N@8;Iol?l{&F1fSL,iؿ5 ]+cPw/CT9jA$E\zAw6DVIfF@JFy|m؉R~ HPI%3u wp 5$M>$sH&2570hhs؛N)>8`'JAS,K>;"O2țNA-':hFb`JQXL^~gbd\^$8hz{)]zGv`pSLiUgafHYkd/K$]{)(]nYD蕲zh;]Q^76gU9*uۛz&}}q:Ol܁QaO&$vD ̒ gLNx*hFb`JM{+muyk=,+pc~\Kfk'-4hǓMoQw+ːCGQjgҝsIZ#qӢw_χbB,MǙJuNE-~jZ^xv)JU=MGˆvu&ȵmѼ%$3}!hPzTla "~vl#fmC^0 ˏky /L}€Vvi d6ZdD]v,R|c{3ӫ*y2p8WSFPc>f‚9O0eɾL/^^gA7IA:r•xڧ(?ɦ+GۨǎzfM^=J 3e5ǙPs܂3̳~_gZ><@m# 99ld]>7,^q \dXǿYxbUvy/`.wk;QQE*YW1qu9dE͟,dX^wFa ;_x7cB B'" d('uXjv_yjh$.Ekj*ؓdPvF=g2vƜ1>s>?AÔ%%"2kވȊ$&ˁ3s; I'Ͱ3qߢgR`ek2LY{<#_0i#^OX21V[$bgѾo,G; ]{ڑ.>JLX؀Bq'ʜ ĺ {9&+\:^.1GEHԍQz߹1sb ͯh"N9Hk[3 COQfO,82 ,anNmmSxD1މk@(DK/iÄ JCxY;˴1)&`l;Ds_Ϳ y<'cݦ\jS:&95L1UZ"M-oZ/2Y`"RYic3W\y5Jnx&F7ۣ-daMPal7݋CJ<׀GVك)kV<`63Ev ĸY~ n` ;ȓ(2KReTb,e;WJTݴ3TơG42[X0g42hbcS#㝸Nja^йHG?:D,Uq{2s~gW|ç ?f'sHG,nk皽wU0(U2L+M}|a#ku?b#'bt?8kLFr,ݴGxi R‘V<UjcㅼYof=P]Soy/rx /4lʳDɡz|i[{a˯G۵sYw@;>V= ;fV#oE3mKd~ldE`^Ȝ w};?h=`'hPv@*wbJO&0ƈУ8\V2 ݑmݧ$yP~g-B'%@- ɄǙԽ'%«LCrQ k K(i&Rx&F/̷ _^iq-P]a{CJ<8{$ӳCW\xY=kvWg _RԽb)zB #dn:==g/uoll;9/Tݍgng%+oe;?t;~܄J L}~Y"To $㝸66v#un*X# C4#KGj߄}EL@=S1f!y6tohdhȄJun .CŰׯWv/Aq?R03"_WM t~B̤+~M|fI|mݙI L,<^ȫ5focK+Mcl=9j!Dq9 5L{4 gv-/kKi2?Q d mNFPݓw :Θ=hjz}X>3cZJj 7QSdpw6ݹ2+F| dm̟Qc& )ӑaq0?T L^pQ)4`ug~j G7ŀW)gct7-B0r,ݴGxiX2 .m#=# *|> raBW4ى J5ġ@;mh>hSk{4`GSt!-K@j*vߩMl3*e P61Ձln缠mۺ*\+S ܈FfY+1Saʒ"|}]lwb 6#i;;ܴFިJSCI6.?x!x_H=͟)CvbB=G`ʏў*Six8˕рɠ^G8 $OwݧPEn>iר Gæu]Rc9o] %䨝0>.\k Hr%2{b2Z4LYrB`3)Cn㝸X},S!ׂ3ǟRFrFb\Ŭ]*+9k7ޟ<|R2Qn&W }fI?:<>*}6?}D!0r,ݴG Ӧ*Cx5 L, iyߴG̀Gg{qd]>f7~;bڞG)LX<!2w+F+T7ct=G_|\# Zs:`]SkjZל]TOZHgοdmECOS}>-kKr&ikmkm+_޳3 Gt/2{baO0e -2|>z HBx'^5˵G/^sFӍtzm+!:k2Y{<}I򕩍1)4iΧM5Q/[j:nTv59י[ׯ^<^xM+2}DdCTLj2lTmGH,oL0#qa [z&FUmK洛9o^[t3eC{<)d\r>я 8Tϣy|2EWУjǯ8%Q<>:;kJ@T4+/\Ƅ1W1 iGH'*'̙ S! 8wwG̹0fʺЍ -z%D3GF/:ڶCц<OxZ#Ѿν> Lɷig)id~ٲFد_ѽ)JlwZÒ?W:xD|ӄV ?I}f˟024Yx!sL\73fX?.R S7ׂS=pӓ!_bg~Һo ~q,y|:Q.脢[qrH(>ꦠT\z>[/|#ZCG5q}kM"F1'̙ Nx3ffoX;P@Umcэ <~wL.>}1X՟_AqO.עÉy{=4د_|y.} ]S xG?e@>݁O1r ?]UKHmf|G]!L,<J]+,v_ԝ"ퟞMT}ܵw X(־0o n56P_&??/]_[;^;lnVi:x=G;QOm_ N3{baO0=!°*FdX⋭nOUL-z x<4c;L+k[T&JCݴ3TGc9V\؋AϚ cf ~\0~h,ҏA]vFC)O{N|jpڒ|e|;oFWe Y̙)&<qӨ|X* mn7ptWv 6~9i0"NA]ok6an, ]tgaIO0e >J4Ơҽ1y,VGË>GǘEOa%N%Cuhp? Zy_Gؕ2W3jTE9,%3Om(n&y7c8>'28%~OKd'ye}|df >nK^?C3zYz&F1Pb<6mf_uXOz2l},N_~EŨgJ/LfǙ2#I u&T'l-I~`ސfNp}\7ٶ@fav|1#Y7MϋY:'̙ S 6_cn4n)qх#L Pvoh>Ǐⵠ1Y0LעEާUDz7D\=:(Pq_wς+g<2MbAng9GnFڞM>_/營 =Ip2 z~n {\?fbb\\gbdݏn>'}!=?OWg!~0Ƽ{2Hc5K~9`2&?rqw25Ad{ W G Y+}S9audѝx[[#/qgbdc)V^3Jfcb~z2Z}=e_ ˆk]U0A*NQ{Ը_|8(ir!}U!j2Z;Jbģ&]%wIq`gc<ߥ,mBTҍ‚9Saʒ"$~|#ـ]Ǖ(_FL{. ‘h/c%ø Did8RVָ%"-pq73Љ0rb@YkT,f$|{ Y93<ĭYxĘlUn?bEPx=G56p} f/LexuW<%z~l_hHlACߛiR2xŰE k{2*/kulISnOUnlfO,,3 ,9!"v(;uCBRN}e%'MԘDOa Mop̭}˻"CyɅyod9o}Wn)nȾS%ݯ_-1S x>-Vy!gj~{= Wl?֘L,<3Q}X>⏼~ l~joѯgĦ}9`2.|lzW8߇F ?K o[xJ#c~ 51ʉ>Cé_2 %gv>+F~5/oAH+/,3 ,9!">ʠṉjڢ0$+1d̺k H`4)|+D5omm#'o01f󾈥tj5W:tѾ'3_5pD&os~nqaDog~ͺ#P%.9)JS9*)4@"ț?Y>}<9mԪpXfge'2^.31rzM*x3Qbɀ+pgn-Fz|ͰV;bn>N!Z@t ԝzZn{>jk$?^ZfMP]ir쨬Z^k8vGJjsŒy_c~r!cz c*3?AÔ%'DdGNvҥMf 1̮…A=oə Q&sʴš+"N~*N L+i\{|W_bS xl@;ZIFg =k00l:][Љ2igf#|sMb3`Y31J e5KʭO+]7=6MśTL g)M'-V~Siu{vwkͻλ@(_R[[|P锥_:ucyo2 f7'wqA#Y`>pS^۩&V2Saʒ"bS_{cTl45RȨZoʄăo䳐P ؿf/=/i6Y p-zW:q~K;Lsnp)F+/\Ǩ!\JȬq֧d،J>“ZCn_q"~ hѭJQ0ms~jNm[f1t?n=ELɹp]|}6HZl#3o5,o卷PO'Y-;k\)KԏLM45fF(` $62[QTzGy4^ҙ喷10+4LY"p BGG 2`v¡,|7$>zĀAVjF;wif[ *l?r[H#~BeGY}A+ͯG*̵,gx?q~4U 2y7<?Z>Oi|O/r KxPURy2OqZsabLjۆ}'_$ {[,#ܥ_(21W1г|*Lѥ%;W8߇F Ly̦-yiO_1F*In5vI?^%W.U@ftfO\ n`*z8AÔ%'Dtuf3[;<.!%05Ze}p1>m:/ Pc2Z|lBA4.p- 8xZ)V|-ᚩwԢ4G즙k/xG;3 ƎPgըͫF1sc7wb͏D>x|eDo4pZ\WmtN풏؟)'Ԁˤw2Y*Bv\Mtuim"FO5Jv-2|z[iS'&|b쉅sX:Aì"L?>nsvehֿ00Z{K8aH~*=BJ߽"+0.Xm0~!5+d9i{bg{ T4WLxZG)Di G|5#p:';GzhԸ_ uTrėאmkTSU2N)<$v Dhq;3tfO*HSiû4LYrBؘodօFP;Mrz+DVԣ#1,ss:+bSՒQu$"( S Z- 62Gz崃 ؅Us F#2O2tL1 , L :O!SxD{UW,5B}̰Y#b8Ə+s.nΒ|:cl?O54nF?g )dn?5AwTLlfs[ã]k5çWTG?3h 9X2W쉅3 ü}=3Q=NSw|wy9c]qɮz3ܝl eD/:*m߽R41/o ƢjBK숌OlVAj>@:$^y8y9ďy']G ̬z)85Oaxqm´| 6GfyFT\'cgݡ2Qa/Q<)ZI#3wƈڣjQ<'gQzSϣ] v8u{ t9qt nB۔n^#U=`Δ'hg/7SUMm51 KGUnMA2D,/|}g\cP^U1C?VkF?ap?)2|gkzW8߁CM~.]<DM=ed&5>⌳fly1Kg-DFWϏpB9ɟFxהAA:bXH62ɳixf/DEП&.C: ynݣ@%%3v?En %K}VZv[^Y:+3`uֵΟ=U.%45c+y:_y{zUogolav/ 7sde? &@fho=]+ώ,Z;:ROˀՙ=qW3 `4W<`AlN]&#*JәLAkEy*_!~3Σ2!,IdյC#hƵI״k{_WЎ> `n; (b#%_483q#7 r~u?mVb0GU0%,C=>"mh\gMhOA0иBꯧ-gڏ&C3`O pGnxw;?Ykt.ݢE2Ĝ1:t_)IxtH^دZ=(ҮF`MNuvX.(#皿^ .ۅ `UHKP|v)mq-ztCzv#μٙA8uqYk8ԍMד32Ls%Y~l/ [vl;+kd Ԟ%}o__|),QcjC?y2|hȝmdD֖![fR8an6 LՄ:O6mܰit{ms6*hw³.25gwg_e=ʥtNuBQ8A /%}YoOfJs\* *\{fVӵy7O+}ԙ94ΌԭFFuRPKt|h$l <4RljFȟ!H6Q\\{SMf jݡP}^ kl݌'Z0 wB>i#ǒsͱ^.z#mZɮnQ[O2j=ݟjy@ҐI`@fJKymيbf'Lc<:dn"@'ne7LVEQ6ub/"Fr8jDΦ냍@Zή}+ l/IF b /^$0JԑlvGfk1ro?fyDC6E~2_2NׅjZ$n` Z.̺Q?7)8ؖ֩p3ு`I%0N U_ RC]8ovH3kUxt&-_]Q,U6Bj;К`Lv_ iG,`/DG>c|u=]8YZ. s|2lLbɫU>F=5O7̒,Q4G|6g>7AWhWM /hrypr-vUMC#XR+#[4* $󕙷 _f4{Jd 3m#G6 >hv}R.'jPQ nl @YWP|\ 6^Va`Tu/^@; GcEt/ eU0*`;88` ϝAyWUH =X΅{Tz~ y#@y6J|0' 7E@Ftlyi]YA~{ ЪP1B,4a_t- o+!jh>"Tf" v]至bcj@֬]$aBBSWL!ݫ$=uCc0Yc%t6r_b۽Y\ͥ<ΧPW:" Gn w%!5{%DXX_K mk 46`{a9d)|܍YH)"% GAAs]0F'l7GcHmc…rȫڒ'`Z8h9j>ޅdUxtf? TrKrԃZ%<ȱ#H uMvG À}j:a6aGعlm#4 ŵ!C=ިH%uNJA/J3ɘWBTj eY;IJh($^(nkpP ?B-_)TϿnݗgV7."OZק:AU˷;x<8f1TF~3c1yXOQ*xͧ$:"F ;'FZƭpr?'B#*JnN8Ij{OG,)Q^a@-TPh[C&%MED8ZU:xИ~o!q^>:]0=4n}~Ʈ<چܚ ՝6> q<~9Q^X"֎[L,1ݡaio(~ǰjJ=iur򪟲 G7hjHIڳPγ3L?_yeڷfO@?h:N=eR` g? ߸a_ S~8- ?(bvESHnkK>;K'6}tzYwiHhyƮ9 P\ kQ{Zd?LQX7﯄p N:ECG%krO@-2It3qaܯ7*ijڭlbfUjh>K0 kKUoX3˚>-ǚd9{̗S%<2w+) g3dG/N@ oGcH'O42;L0s$Lbܑr]ls0 V?]$⤝73g=Ȩ$/ΙqH_ma`/YbXۺy\Dxe 7AxWCٕ˶'Uy~_$/Xsmչ4ѡ=bףIHT9-IPW;J*e8 &rKRYiMG"Ȭgg#_ MR&h?G+N'~ ۟i7@m7`U|Z#oB2w=!H矢AcI~Lx;Dnj:O՚ts_Yg\aµa`Ta`D_t " Q$ h`2$4 h0BbQ/VkԮ򩵏OkU7b  @ ?B2)'M:dw Mzm7:IN4#W4&'[ @Sfm՗R v߭S*"@.%5?(go.sۡ1H FY\[$١#M\DJ+\shx;B˚?KL.7{cicxH~O='t-$@^[eOt8R?th0xޘGHs˚,ytaeԜuo:=dr c@\J`&T\ikwi @X[d򓛙lG޽<¥5vo @/U`Ѳ?f=ۙ.S $zyIDV7Oj56}'@ @<@߼yY ~ʚ gegz`h|3[L g'˚JF=GT*]/ @ @ @KH>R_ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @\A?ϫh{UP:K @*;x׸U ;_K Jg  @ @[v/W [8vo @ @?[ @ @`I`w/q"p5_%_D SٽYI @ @Kxͯ_$(֌ 쳟{I#V_ @ @ \7~{ZK @ @$ާߺH\K  @ @O'I"UEn@j0 @ @^~5-Qm3/xKB @ @¯&òC,'?S H &@ @ @K·~S~ͯ3 ;KB @ @—h}va μ H &@ @ @K·!oϔrf-PS^j%U}!@ @ @ ۙߕӲpUO7 5 @ @/I@_FY=,? zrj/i  @ @N@߈Z4|̊r@M9zL @ @$ oZ4Yf8ES/P(^X @ @<~)'/k$/电h>+o<݀` @ @$!R^֢/|_ w^KB @ @/%e-_K9~3>[i  @ @KQhrG QftzO/4 @ @_$̧ǿO]`Y&wtEQj$@`*}?c)vtk @xBESz-u'>ާZ Fjo}w]y_ɹ$W8Q #~Ͱ_v?SNvՉ7BQ @ pO!4N]nA?lOўY'/My4S6$t?¨[SFE D蝑j8[{Ա7qeMuu7PxM+ U=7`_[b|;r @~k'x/e 㜟fV7'UeRU.S3\=?酩4ޅS6>Lu^Y!a|l_c֤1R|yr(&QJN[0ܴ0Ϙ<>}SK@ @ @`~]'. ÇZ4ٙ}˙G1g}Md]2js#{.>o՜{t`zETvԩ$3aSay|rBI 381gX:~pޑRN-hQh SZUJg^]7ۣ5vrG~Ϩ M#_ߊqw$,$GZ @ p7!(ע)ytj?׫e&OKynXy|{w.F΄IVӧ2`3&OVӀIQiҐfwn ![.?=LJ:٭T1wv8mU?rbs~P =ijƓP]G~Ijz;7%焞4r+/#|6 YSƦ@`9!2;wB%@ @—L{~n޾t$/ їXjI e03p/KO%wgi=[ҞYmYiOhnAgI j]{b9-'o*'ޓ8$?= [\ 'Ts:پZkhROx3jv܎4rGu=vOhܨ)]p3zسgxƞrN㻹1ځN|?:yc烌ԵT¦_MeΞgo0kOaơ~* @ @u|ռu ixk֨j6SOiحNojMsYcj?—䳳ƞҀM܎܋rGR)q˨Ƈ|L0oݰPFYzڟ.GJ,Y",ÝPnN/\?jǞkQ;?f]'I @&zBL2e dmJ6}筬-I_jo^ogәh'(rޞ3^ mw;2_^u y|`#,|GcI3Pݑa6%}RoG.ߎq V /0' @ @+>vٙ^/n%k 37$3ӣv^ؗ127RTOl8$Qf_:l^Wgn:{VCt:=^nZ׾7Zs{t3E]j6bq.'ۈ|5vv xΡծh1JG  @ @E^pe\4 c)HꞬ>KмJ޹S~9ieԒyhƹЌF9T:v5J9CݞܻZcRѭ|Qs7,3WiQq۱ moeRFav̶m> Trhu6j 'Lo_N#@ @\eٙ5l朗fgnu9>ng5xԍiRWZo}szumm(xSK9׫njÎN"Hǯma?u8tR});:9^KJ)Ga;gv dhL晏:Ȝ3;2s8+K@ @ BLfOMxb^4gu> kt|u.Yr޺sȭq~.YbfQL!gE*)Egu<;zjHiDhOv7:# @ ӑu3%R7bQ~YT0dPN^!Ov}MSB 9xV [|\;O!|=7i~ N)ÞS*J!:ߴԪvtdRKSN9_= nwrNյt^4 @ X:>>,ޘܞCU9ڍχ?ALb5n:4% 6UN%Bu2>7* 61N\]'<%.0>-,ݝWYӼ\>RS43,G)x/lW:aԘ{  F${:UOu9u-W9 @Υ5sJSqV]uE9n53G+`]Oyݯc~CG@QCɫ*7DiBH{JўSݝA&_3z*ԿN @ @go~G5i-!~{.9yPV.>egrUhJOl|w/ב]I![vhQӏg%YwǙDU$Q.=aiV; >n*7\Rc瞒gIvTWWW1)g9žFF: @<\BK/`b&胫yLd9bcZ=%v+ϹYR6Ӟ:=KVc*j3?4kgJyUi 3g\RFsfFx~>uXA%87Zjt2|{mOٙ-5,lJH=zhu_my))g{]z1XWAK!`W~s#C @ 9'nhQrn4ZMGN7zbϳޞκq0M#ϪhJzʞMua=#D`q2; G]VTssz֞}Q8 @ĈD)z*˧򲳱H<*3~_>[g+ݺ>ݒ wwĞgeS=ungUuuKˋ){:sJXWsV5~N?ߎإ냤嫏?Z  @ @SnwӒX%2̪U/}0ޓ'x_-a u]תutnTW4ݾ`FB=~zo'̣xye:=Q߾5os=vp7ڣ  @ pMw$dig*~**Y ~8NQոsh2|#E=1:SYJYxcR{mxT =}9j^]WɽؼT=;Iϸ*DA @ @G \9, OWWI^ߙ~}WȺ'n,9I},g#aai_/\?{?G!|jCEnj[bu*X_Z4a7F2N6_47=-~9M  @ @uX}<=ǡ~K+o]&okMӇ [KT]NnG{!97:'Z?5]~)%o7Q @ 2nij'ԥ>gS7 kȼJ[7kڿnm;C[Ğg3QOKvWioG)\piG=Q=4lsG->Z?|qWCFzoah;J @M!֌uqэ+ӞT<UuNi-6:))V;:q-4dwK:;yZ¥"v ߵzn;WhiÑN.Vj7O @t \'O^lJ]'gi=u K;6JB%7pCk5~t5<%ӫ;xp;P~KWk^.HܸQqi5ͧ7;T(en8wԝ @ @EBuhjyMj#9| !O}B)xJ£m!dc{L4=wl(r;VX ҙ#,5uu8Y}Ui447  @ WaFdzz56xWJhy4U GBN9|j6xbwJRWsqR=Zf_a_K~ĉN=͞δķWq @@ G=?Y&uDҀgu:okjy.0k;{wӄ=M笆l'fztR7X~!qр~/u!nGgQXqUo# 1Mmp_{O'O-MsF @Cn$W_Zaf)-=|zAkH)' oLD{c[Hǡ ;Ox/%f=wa{l=u>wOcVUnӹ&[K~F{$~/Qf,,S/z34E @˝ar;QDi937^k=y=?mƳ·oJ2Fu%Vezm()R!/`Ml|݆C/Z*^ɯvQ6vwjͪi @Z!(z!Nۗ GjMɇW\5{δ oYvǧ XĞ*JciVWlU@/ڥnG(3̈́oQ>K+'jɯhC֨}'fhƳ\3;WhiOw'SH~3[~nۆyӯtv%@ @GwNM_ǤnR;ۆgٹ?>gԏ{實ퟜI 3sDW3KݎQg̞(o0G_np9xmvqdeC @V`u\[pҖe#v _ڜsUuZ[O @sTǧ T{bϼg05~j:.mgO_/u;Fyzig4>V`u\fzn;o Rifݽ4[.!@ @)Pwșw/ S/~/Nϟ/?Fݗ~ !|ؾ/,> ;CӏfJzA2qV)A߾_pܑEK7mvơ)/iZړང Nk/?Fk?$ѪÝlp5״;թe)_} 2-8hu\ɜOhL?M͸)H2ς6r|$@ @Wg镬S%Yfzi㴥C)M=qc_O5|.!uB' ~#JƝYWoj k6,$q¶{F}WltktmҝsSu/ /e:D @.pϐ9[uȴíω{)HE/S=y=YW3ڝ]:To{=R.<+Cei!59ҩR>Ҥ9~vT  @ pYHY$[M;UK9Oq [Ppv1W[魖z;ߔѥqR>ҤrQZn @ ?O}0חN[ڟK7Z=zKzB6evO.R{V3Jn_ ARB%ᗣK#̞I}L=[sxmI @xHyG$yBWrnQ<{b[{szbշn*љX-a5=a|JiF}1{Fcގ2N6Ff_d_z_,Q2|3  @ @w ,LY}wDp2|qǛa6#vQG]*!F]]sW(rلmuRq[v8;21o(Z+Wr @ gFz`G>Jfl^%\u_՟7ӫ,ޑU;,J F%TmFް:5{j|Mv\ Z w\zZK @i\́/]#d0|GB^mlkf_:uFB*,?8d,3}Zj$MmXWoj nhԻO襮h3sΦp=VFcn+_dGv\3tQK @ @xTh:%/e#{._eUUryZx;[;{𳷣g.J F%HmFހtRWI2߸su5F`)k_SC1ܝǎFx @"\gc:}6mޱf{'NiL='ں orм*M=eSZWIYOhw!Bt/|~ @ @5 wKY(f7N^*g!S6LƗC7ի/t7wӎF˛3ݡhkƣJ/#diܑEK3wYJ!P$@ @kuM:Zeǚu-{.gb2M/]f_=C眞swd)߈e5Q=sV\ */׿ ̥g4 ߾_;ӏ/ZnG3ҤTcf IT @ pC>vG/i{i_G%^ZQlzQ.̹d!?wYF(q4snuLOjt$2z{j;ol# zϲtYnwm=}9g 嬎tG'^R6c<:֓tݬe*'>tXyRpz#(o߯:kRl]l(r w6~[\wWq B H >=G߲й#g4s8t=ԵTHQڶT @ @!7 WC&ݝuez6W;='ޔ^4!}!JN{*Q*¦HՇչzVi;'ݬ̈́oV/ZnGXt܎/5Tظvw @ @81ϫoY]FGͺMLʹ,n*dz0SlO<1'<uN/k8o5oGK4!^9t7ۖ(uzFc W6l*WYWqȿh?8y攺B @]߳l|nKi2](SΗ|ӞI'u_W>Aswe"MfF=|r=z54uuѡQ:;T{4V:^<2SŴ#OGy"ufFNI=sy=]·oҗ?w~Ro 8m-/´d{ @ @ngxBzU7V ZIݬC2_ ?j' ;hRljߌ/Z_3GkY2:3uuuJ#m @ @+(WYf=oq'ԝZH`ȃO/ 3vR oGO^٪uE#l=s#CЗt1~\MYNJzl[ZgTˎ+ @^@KϦ;vO KeGTT/)SE5sviiYk=Gkz"!:fF[L^t6v洋ƨ=􌐞r":nq}ܑ鰩Ht߳Qc|$@ @[ {KM^}k_VϯG'Գg3:A۳]>뾌\hQBU>&:8_t5id,l͜0MSː(uS笎V6= e6dCL=qcӪoMqbwE @Pର[<9'ޔ^ڹc}mtyRR9=K?QE 7pHr@7uɛr/v72.3{ْ/Zp{h2uyHtߌђ8znm @ p5:X uW1 ~0dZrhg==!RF21(dR#b~mX.[[i֗z>;:; мGלv-{n6's^-'̢;.|Ηbg}/ۧ?[}pAp @xR:X^MtWO82=sgx96 .3k\ݰ%)L%sHqYB3AlIϔђEŎN+%46F\cz8t9gu*iU8zMƭ>=!|;^̗6F{v%72_Kӎ8Wrk%@ @W%pV;$ Nm(Ixc*D٤7lt>h8,)ĆC tnuNOOo KYYfGolOy`pkkF]3;Rz1n=3/=d%xkl;1FiʸK> xh! @ 08+M(mFc쥥Wk,!֖˳5gV})OW'RcSQըmmM{b? F-̪휁no{Υ?2z".q?1AS 2/]N55<2G}u Q{\$@ @w:X>9x~K2^ASB}}lN{3K~'ghML\Kt#'rSc=xLgl6e7Ro6zO8T{;tMkMG# #!%t~``$1ޅ7F[[Z[Qfǝ7' @ @#%VJFu#f_?m[]}ү}u*%dcJO'<؄NY(_J3AY;ӌQ폍`3ZZn5V|k i,4=w?;1wa_1ތq e44,jS1V(>wؤ ݌T7=T2F1imjO^03u 3ӌӏr9]T;b!@ @w8%'?y` GSB=юs1 ɑvt6X==J&2[-_ohR/E ܎ݻNR7E?, 4 ͡䴭d:n4#qqHgSNr|84?:óANQvڿcf eAUuC~-<9> @ @; %޷IB:;J(}ܗg{)aظQuoF5!.I4NܓjS{F')[|l_ZOqo_搽'h/jǙGc|ye,LC[cΉ==Mw @ @R}e|Z~nG! B^#im}v>bibOݹE-|>^>(L< ߗMbsK O>ի$~o3e @ @|/ z|}—L{_oFM7?T[;qI&=ܸC=g9g.Iú=)$ އM~ݑz8pV90~kViXx\H @H^)RYn=>,ؑ~>](fwQKt|G6ER;o-|2cFEŇu򇅲roJo)8"!/Ő>i ϞZ @ pM'#_ >󱳔LuzҧҰ-ikLsiWn= 舘 d*{F)SOf$@ @hz5NXM3G={ə` ת~.0;M=pF %E]hvդG#z  @ @8WN&Igmi`~0sݥ=[g^/=[twT7&۳hk_h @ @[fXl/ngϫ =m+Q9K;7v,_q !Enf @ @ pP`iv4d!u֙0gw?ZfXT)[~(PZ2lțjsm`Tc΅B -!@ @ @@cvw-){x)j4ЖIwg-Df}]UBK!@ @ @zоQM)mXf` s ɇJ FrҤ='&iI:e|wG @ @$pn\l$Ԓu]]3Pluϟ Mi n*"@ @ @垲zG\z{\w-iuEuD9=#=G;j2=4[\B_ZK @ @@[y>vwVzZ~~뮃vr4AwݯVQ7`%;7s3=I uV tB$i.Gۡ1 @ @MooeM\ LR=]_]Nt_B2saCuJS/\L!o @ @ I q-MmIcf'ulg}ьk{v ؑ2x#psqV  @ @wWb?k7Our }u>2oPiC6>MZQ?5|BMI @ @@@)1o~Qߘѽ)O mj)a]xӄOq4 @ @Myjgsڟ?]OtLg g.KGz:s._zt !5V @ @ pD ;'foJӵvRi-qm+y6h3;>c @ @W(G"תH&\-&ձG|νvJo}'ιsTG @ @Yx>$5O^Uhvw 3;\gq?:8֥'9[G @ @8KsGO7oV9z S$iy-iSya_7Gg ~ @ @ @DҎ/~%k":~>Ywi0(eg?75˼o M{ @ @;{7%GZ*'r朼pʹyS?;V{Zև?~ښ͛7 @ @(O~:-0n`{n/y2kBS9zs !--)ɱVy 6g>S4M-; @ @x,Z s6ܷ4~dg_~UjiÒ8S$VgO[7Nu~v4zs. @ @W.ÉCgy5N*.9=X~kGu# ;:mi!ᕦ]>1{g @ @wI2gjdFQcLbi/ݡS'V-3:ZyمhK&ʉ?(!J#@ @ @'}CkLﬔ>SߓϮy5>. COʝi>[?iOǚ[*mW_h @ @wHo;=O?9G?3%~Ih:_E@ h!RN}6Ҍ<(,xˮE A @ @VI~;(Mv,$N=dE9>)R:MFfaX&wkjx1ԇR) @ @H4:LΊⳋ$gȥ|~H?ئz|IP=Pdrlj'?=N @ @x@Y'$r(Ixv3Q4-Ӂ./>?=N @ @xۿ wi6sQ?̙KcpY&}溏.>ՙ>zCn_^ZM @ @^:DKg9ٰEY>o䰔U֯3 @ @jzU,)ѲEQn5+vV?SuʍA @ @M^zIkZ(Mos)]3%φi @ @=d亙hd~B9-"Q iN @ @\M^~Z(e~l$[t/R  @ @ p)uufٓ&'>unlJ7hO @ @&%61G|K~:>K㏗η @ @&Pwܤ}qx&/Y|  @ @ @?O7鷖e{[9G @ @ @-wk~'mvT |Y#sKO @ @WHw'_g>Mi KYpfzB4Kb @ @ @)f'`'mYSūZ۩{}g)|)F @ @ @@C`)~_mUgo~} ?no1R @ @ @.53|=W?C @ @m?}2)YqFj[X&{`vl7C @ @ pMKp5ǟoqCL4~MGQC @ @ pe׾*u:0"$w?iaGo\ @ @<@;o5KH_g>Ma|4ԃG  @ @ @`U AqQiXo'? C @ @xy9|r?}qm|ypȋVY o9D @ @,gvo޼i߽෵C44 @ @^j93ۋȷ쳟kO_]F>:H @ @Uɉ?Y&Ee,2V?7:G=/0t @ @G'4ɯgᳺNit3#W,r4)} @ @ @U d7N{iLy(>oU|8J @ @M s{rշf)_᳖N4>kvO?+h @ @ZrJ=QZeJ|Viw-'o( @ @fη&sfJ•įNFVy*< @ @j'y9Y&pO|Q|ci˞u򃰺T~) @ @@VVY">$d?箓gӸ˙vz Ѩ! @ @xyi3y u)!+$m8J @ @[NnQS*N4Cvg9J @ @{ĿJ|ivN$d @ @8Kidԫ/*跿zogJ|?zٞgr%hڒ @ @ @nZVgqvEʗnghF.d~uFE @ @ @UD ;Se[gn'ow7ۥ9J @ @ ͂39|ZrJT¹9|ֺɊ7JӅwngW]hT @ @!rr˷ |$;J @ @N,Nx{p?2%>1~v7( @ @\JX{Z'o}kn @ @ @ ȒYsox[`Y<J]#@ @ @ $WOޙg\4~3  iX;XfN&7Js @ @hџ8 '!J;"~Q(8Qta]!J?U8'Gt|pu}!\&A5-JWiRQ!p+G|^7M!1j8:!sbS(D?4j>:N pQ{ϣ\E(=^V'K#"LJf'P p?F)! ,~@6h%PA H`e)!&(XAN@Ox@mDI p'R?7WgT%r4sc/  Eɿ|-kE|oqG]գ lyʳe\x1J~Խzj-Lj|%݇lY(\%?Q= 8˖$wKe<bX= ;#G[9@‹Qb(,[@4sW{])E!)mQ9g2Jͻz,r>MiXŸ5f*g?"'HӔ(яǜkf*Od8@E~T9'; Ug+8Byi |%Q) ,X@4sWI>[,jH#Ӕ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'UۧvGkHӔ(яU5/v'U)A @ @ @K? endstream endobj 26 0 obj 3849 endobj 81 0 obj << /Length 82 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /Interpolate true /ColorSpace 7 0 R /SMask 198 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`!0Ć0 endstream endobj 82 0 obj 19 endobj 21 0 obj << /Length 22 0 R /Type /XObject /Subtype /Image /Width 281 /Height 281 /Interpolate true /ColorSpace 16 0 R /SMask 200 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x]nt gYj3q`la- GM,G$  H@$  H@$ j0jܒWTar)x>5,;%U}?'N'X+i5opu׿rH`E%UU5ԹJ`|QYamFsZaIuXEw+k0_5H`4(B,¹=Y W k3# KpsO*5[YamFsAbIuXE 9_T`jX|VXRs{VW k3# KpsO*!Uڌ’*ܓ%@o V`jX|hPXRs{VA5f$0GT\,UzkpUڌG"Ē*ܓ%@r|հ6#9{ :d "[5f$0G?!T\,UBEe 櫆 k%U8׹'K`ܭ|հ6#9Ѡ :d "/*k0_5H`^+,¹=Yne 櫆 E%U8׹'K`|QYamFsZaIuXEw+k0_5H`4(B,¹=Y W k3# KpsO*5[YamFsAbIuXE 9_T`jX|VXRs{VW k3# KpsO*!Uڌ’*ܓ%@o V`jX|hPXRs{VA5f$0GT\,UzkpUڌG"Ē*ܓ%@r|հ6#9{ :d "[5f$0G?!T\,UBEe 櫆 k%U8׹'K`ܭ|հ6#9Ѡ :d "/*k0_5H`^+,¹=Yne 櫆 E%U8׹'K`|QYamFsZaIuXEw+k0_5H`4(B,¹=Y W k3# KpsO*5[YamFsAbIuXE 9_T`jX|VXRs{VW k3# KpsO*!Uڌ’*ܓ%@o V`jX|hPXRs{VA5f$0GT\,UzkpUڌG"Ē*ܓ%@r|հ6#9{ :d "[5f$0G?!T\,UBEe 櫆 k%U8׹'K`ܭ|հ6#9Ѡ :d "/*k0_5H`^+,¹=Yne 櫆 E%U8׹'K`|QYamFsZaIuXEw+k0_5H`4(B,¹=Y W k3# KpsO*5[YamFsAbIuXE 9_T`jX|VXRs{VW k3# KpsO*!Uڌ’*ܓ%@o V`jX|hPXRs{G5o~$0M)B/m{v%};Ǵ+ @/Ӕ4-L>l$N?zrVK M/y#I MOS^ߡ7J#Gl#w>b"xr+z>K}?lRBit/y#&I )/׿ҡJ#&%+\J^* R>b"xr+z8odA@>d |yJFG/e Gdo <%^_?> stream xc`!0Ć0 endstream endobj 74 0 obj 19 endobj 71 0 obj << /Length 72 0 R /Type /XObject /Subtype /Image /Width 16 /Height 17 /Interpolate true /ColorSpace 7 0 R /SMask 204 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`!0Ć0 endstream endobj 72 0 obj 19 endobj 89 0 obj << /Length 90 0 R /Type /XObject /Subtype /Image /Width 16 /Height 17 /Interpolate true /ColorSpace 7 0 R /SMask 206 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`!0Ć0 endstream endobj 90 0 obj 19 endobj 31 0 obj << /Length 32 0 R /Type /XObject /Subtype /Image /Width 1379 /Height 823 /Interpolate true /ColorSpace 171 0 R /Intent /Perceptual /SMask 208 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xEq QL @DT΀L(PQO,9 Q,"DHPH %{w{vvVwWUW}ww@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XzٳgOjt![k322&NغuO>}נA-[2oݰaC58H+IdC@@~Ɵxqj@@@$&@LM{cǎoxdɒ+W|ݺuuQU(Wֺ<.Aq@@ htz]c# Dtꫯ'V~СP(ThQ]P`75;rM(  @XC4Ұ3y@ޘ(\<, +>soʕG SNl&Pʧ]YZ'\Nl@@ $ uaO$u뚆"x뭷6nh*O?=æjs̲ͦIj=]X|p :/^D@@ :'FWsJ%@bf'*UiߣGH:}_6Gm-Bj=]XrnEN@@ $ Ѕ_{۷[G{鑼ZiӦ" &1땍Y/ru">rEf@@X Do&6nXV۪Vz-Ȼ{oŊ~M8pW^O?7, {GeRD`jmܸqx^{,otu6Ty4nkjժ6l׮]6…&Loɑ#GLEds޽G?GdYTJX]ϪU<)\M/BUbܹꨴwpM7=~uAkB) s?9~Zȯ%'N233%׿ի׫WCSL2'ĩS,Xзoߗ^zF2CwJV46@ҋ-ʱZk?,jW.? |p͘1 f@~@@ 8cUJQ|"EL)Ӧ,,?k,]ʔ8묳e2pDC:-zf컠O-c.KtS Ξ=[9sPX=+>\!í#uP1TDsQ"CK9sL04nJᅲ% d4c Zg°{."dSGyD~Ɨ&<*U.syl~/)_%e˖UKbŊC:-n&鶩ڵk#ݓ^x J&u*! S=N6z '.'y׋=  y%Qiv# M#LJJNkZq|e˖ƾ ?s*ݭ[W;e2k#omj9!dtҦFu9>j/{ټKd3ak^ $8VP!kd2HoӦM0κ1Uv (/ JZjU@5Yy '.'y>LM@@pL'61MC| vTkGm֬u矿uV+T m/dk{ bmIII1fOKfaq[FZ+KDj|_X1S~Y)26U7喻뮻y-o3*ߓ@ɏ54i'N76;IȬyXN[GiiiN<2EcJH\a%2Ŕ3ϯS^zIIAKF@@ !* p@m` .a2ƪʆPطZž mNY7_mR2;1sŗ@:n,#k'u *qʕ+n}O<ĠA~WS MO=2=5#Dl_nA$y!RBm.D ͐Ͱ_~9l9/N>nz~=`d@@P%iD 㑖-[9i+Yo2!ڵHc߽{wJ߿_|7M'M95,hm_yD]e[#7rʔ)GzkS0`ux氛[/|/ԏ?-Z3ǝ˖-Mlʺ|6XSfMS%:$B!0Ƃ9ʕ,.%/ҘSnytB˃2?[+0uJ_OY8y1qYӘGU&PJIk0{I84w%2ȺzKa%MȦ2y f]~Ck%=K1aݔ93VbJ;=b@A ;ud ɵ3W[B'k`Zl&#D$L9e6©SɄkKޛ`].RԲ&P z '.'y< 0ݓl" ^2}ZeRn]AZ.#^:v7ߘMB:1 cnjDӞyQwSS{z)S>}D)!x W ԩvmy+}6lhBQt%aSY(:$#D&L>X{9S#m4y4:}@5ɫ+/ f'.'y%s s@@WFj?~^dfˈcժUֱj.]LybDENg.X{c{%bꗼ V*ua '2f_*R`|n*Ere#|<nj[&֭[gu*7fkbYgO>`}My.t6Uoʟ}YQySkW_X> |p9# 6/$@@pݠA ¸GV6}-G7l`ju*/7۵kg< 삼^ٌtJJ\~YP+!]ticd|=a4W46@z-SNQm>cju@#'!CLMYS@4eMYQ`Mz" ª{IIiA֛=  1p򇨬&3 ԦdiΝ;(IÙ9YуW_}T.ȗJ2G&Z0ݳgOS=ݔsl@K|]^kjjބ LMT򶋦M֯__aW7U+E+{1S6%K*4ns"&ꫯy_|T[o5fGi`L(%2O>X)(]Ya~:rGmWb@@ o!jBVˢj2'Y2^wᢋ.2cUך6@N;c܅5jd:5v]+/矄9~p< ;@@D ?D ehRJajgIA'JH_[_'+ɺĸ SL1Ȧ,:glJc%gzzi]G YATVJyt}ذa uWG5 Z7'N5!Bޗ)"d&_uB"5"ַ7JY$T;#la[TVM0/ YÔS6W# A"Eގ;L:tuQtW%NH6ooL7  y(ͳnfϞmj?hyJY;V{IˈzjWұL65LViiiYٲ)g}1M'ɛ2f.]LA*jۻwo]J <7A/`]Ayޘ?2:uZ. 6%!oȅؾ}LGiذaRzu]'Aӵ9sfدu nTl:q y!leMό:ߔ#~!Ԥ};wQ x~UW]V꠼2l3L;K(atE(StefO~a$t $Ώ u/  @ 8C4Ҧ!lʗsiwXUf8,?#.I:d=ra>bGևTX߶9G7|jSQﱮ֝w}!y "zϢETA7AYU-c(5/MﻬJѴiSQuVm_'~:uG Ρ  ߬U.\Pr-Tq:0MU߱cdžɅ]M(b/MYTP&!,[ DljPKsUN<ǷvJZ#5=3f̰כ!7{.R-кG/2P Z`W^kcm#DUЩSHk)! 4i]++-OB'NH| Ρ  WouD#ȓ: ֙3ڰcU ɫK*e*.ۏ1ccw$<"߽FzjooJlٲeʕMWnݵkoM8q YΪ!R?^p4=\Zvm6.X(&E 4[^gxd߾}֜9.|Av}-/g'6YA'1-ZȻ.Q{rY_~СC={p~BHn7߳gB֝!<4Ĕ?6_}US@>y.٢g7^|:Jٙ_˕  @" =VM$++'0 eS#T蓀Va矫q]6,Ǐ?`.Jޕ{MF   ~ ?I.G    /5/Y|pIU֭[z!=oժ/.VPjՅ `®]:wwytY*D TYo9l0Sޭw,#AUD@@Tv4855U j͸mO-W沸Ǐ?T@@@ 飆1clg)RD=> oe7olSM6*g*Ut6u=~$J   /_¦ӦM9s߾}zϜ9slʾK*gڵu6u=~$J   /}v=ҥMybffyEC ){뭷l\9C \R@@@ TPA{1^hBeKuG}TlРiJddd *ԩSG]7Vm@Ԇ   ŗ-[a[~jժlo3rHϗoL,YC.6M[OjC@@G˗/?+0vA@-X@:t萼PmٲޯA0T4i<$P!&U!  ;_]_ՑRJ u5}lNGM7EݲeJ,nГ= Qe@@@Ga{$J@w!   %P@iR3 @@@D  xr3P    "P`N`T@;@@@OE:4@'7     L p'#   @ "M'0N* P@%   yf:qRd@@@<@P-w|: T   @< rN' 6Q\M@@@p)ρ' T(   m`)KK|ͬK@@@lomK I`wlz!@@@Q  k?~2N*Cs2@@@@ @dgEy+X*G#    @H6,tr5@@@@ @~HtE V$9U ^kv"   @ m_<L ]1c&xɀ   @H}Q $~s [v!   @b N^ZF ?b~s@@@$F@::P ![K @@@" $L?B &޹=FA@@@ @ 8[(*U \rv!   Y eӱyU;   6(:v`EY:V0+TevG   Y re|d w@@@l>PG֩՝.ӱCeCwؘp@@@+?8jHbx> (W#   `#P_>C %"%?ٰp@@@)P@Ƿ/]cB5ڶtɂy5    H@t`erR`S~@@@ @ >۪u+B)i{+ם^#  h׿'##C2&d׮]իWZeV^~'N4fvY݅:V07tA@k<@@@|* /[wZGNJJ9˔)Sre)Zj>|8⑪u@ @$k{q,   @ \wujh_f'm묳@^Y ~2Cvڲ`˖-ǎw^kgUJ]h5ӴiSo;](;H{m;j ?u"  L`Æ j_PbŊzg}fjҌ3t{*gٲeNu=~$ r u/ֱe4gD@@Cq}B^[ .L0A7tb*8:P B^ @@ӧRF@.}I|iiiӦMGL]vÇ ;&FkRy\{"; a˄ ~huݮѱEɥCf}>ས{   ?\@"Уks<+V<}UK*e-e#-S9rē=OGf/@$F& VZ95"  ěĉ;vW^6}t=U 0j(]\?xy@Hn,K.|effzL=   Z੧Rs9GuD^$%%wmذa*g%tNu=~$]+VұdRN@@@|''Ȑ۶m~jϓ%1T\r.zH(P;K V&'4jޢÇ0N@@@%wߩ;uTi]l޼٦;mڴQ9T,#A@>cMR:Vu2 }h?̩@@@  ,YD}=s̱K/r֮][gsY\G@Vm;({͂7o٢3@@@H$YZP# _ O?To߮\tEj!C–R;oVvE9䲸]"POeX^ .|;ܳw_   @" L*O?kSC   kv/X``~+1@@@Kwx(P-TлO?RE@@@ (mp,M. ,;3.@@@8 Pۋr׹:P -(Rm-U@@@x P6q+X\U5߷UQ@@@ P8wԢ:VE ,6    ? ;hxAmw:ydtR @@@x PU!PJھ}   O_߹K>Y $N "    ZHbP~šTKY@@@J@;M}nұšɁ+ܥ[VV)   @(p~t,(DzV5`w]Lq@@@b/@uu"-K 5GWN    R@{{֮N-c_Q F}:}Ԁ   @,xs:P %V,|-O%   F@'Ι{ֶ.cBԤxR?    ^9](D*VÏ :    O_߹K>/IUǏ,ԃ    <=(ĠjR&yxB@@@?fos,I.h*`r;wyz"*C@@@޲4[ $EM*'6@@@ Pt`yrVT`ٲ垟 @@@V@RɽWձU}ΧNtT    |Hbh t533Ӯ$@@@#o:VSr*V3|=/#   :)I:VY(HIm;l   L@ԿHNjxY SS?    P[?5iuЕ*P ]>@@@_ʫ*uH`}+ܥS   8 P*Y'p ],bg|uD@@@s@$T-dUÃa@@@ (yvƞXɁ*V0|'1jA@@@ '9 yv<:P -*P cUCϘ@@@W|,Gu`yrVX   ~ (K6\'[ZT &ғ >3\ !   S1]ցIt C RR[8{@@@0 (0uvXEoU٩@@@{>~=0H!ªUk8#u"   P@C(/eн,J.x[ :tri/E]   F@An<˛k(DzV=˩xv*B@@p!ЩSn_MFFF׮]իWZeV^~'N̴/,(pnmέֱC)i{\Ԇ   [pgO~lK\r*ߺu?~ܦrYܾ((͓"'IT   C.r= =:))I,SLʕ$jժuHpY52dȥ^a`Pk#mժU*OѢEwi沸*o g@$ƄnГ z#wiuR@@@ =zq@ nv9؜|*Tn沸*o m?c+XEW'@@@r%|r2\{n)k(8uTU@49QzT l.zH(C5u}:V0-thPhDG@@+p y@ &P?E֩v6mTu6u=~$E{ic#FGQ!E@@@ 4kL 5jK f̘{Eݻe˖G]D8v۟cN66 c!}ˆ5X̛7?   Q )DoMJJ_~0&P0a(l2x`SU\DXn4gϞz |(Ĉ:PҼAbN  )p(ؿ d,_Ps3  6GrʿYYY*ֳxG55t&Pзo_UTRR>L 9,n: tYۉ?n^X &@A0]\Oq@@@fF'O4M`jo|T\m5J C .=W; x%U=;'xV Y@@@`ӦMgu孈+V >c5 { r(QBwY\G@n:]u B:V0n*,   ̼GaYl?ٯ_?url.zH(CeׁI|O Zliqy#  Y@˔)ӭ[7X=\5'Q,{ɿ7olӦYJeq] ~3;sc:V,xj-+12mG@@ @-H?WG ޾}t9spK*gڵu6u=~$cՁI|V $j@@@ E]"C [Uv,n4o==mc u}8=<5U!   /0y9ewz8裏@ "qedd)RDe:u1ƪM(NޱY:V0;|@|>a*@@@byȑ*pK@Z\,Y<.6M[Ook7HbP(Rl @@@(`(8t萼P Zli,ҒA0T4ibಸ67 x}UY6tZ 5/hcu땕I@@@}* vȶnI-Z-[GUeqk!P 0C $1>Hb@@@.cĉիWױZjuuܸqM6T?p.N O/VaU-w@@(9 E xtLhժ65G}@At1+x5-KXW5_T̚lj@@@Dp(gggs*T0E j֬9k֬q\ϱf P[<ɿoVW(qUCyaU@@@(s)S_ބqF!'iŝIN>ϟW59tj-XAjZ[6@@@  (/膙ISZU $1ÏKGh'   @< (cjo3 a,Y)?   V@An0;ֶ.cZ]tUy7Xg~6qRAJwrn@@(x[lnG-x~1X|;~ZZD 6]XAgee G@@'0|p{jR>(5UHb?j(A)_N&rz@@(HC]Ν; ^@A|7tJ ֤8 JݸW[A   F.g}ӧU@yUV7/cnnXAN]N8W   Pnzw3у/\5k,T:ZRu: 7Λ3T $N4c }igE@@+0f%x衇_h7Xb*ϓO>rG>i٧ +XӪ>3 $xOyFN  Z`ƍ( {(=z&t֭@Ť bœ7'9a$+2cimߟ7   PL6ƣVZ*gʕmq0m%;[ $}fc%a  $,Gp:cǎf(KkNZNE+V,(/ T  (S\2l9eYr/@aא(w1V oKe8C@@[F/fӧ'E\@A\]czaϬ]i ~0|DF   P`4iK۴io޼yΝ+VOׯ.\ȑ#V,6'P=K#{W&ĊySI7 4o_ %9%-o@@@ L#_!zD ޮO9q z,llʔF   Pd+^ٳ 2WlN 6p]I(xMdt@A<\Aڀ  @ [؞~i'"EL4)G Ԥ6WY '|IB   .AݺukCK~ז/_Ul9Nrl XH~qri   ,e˖ofZzWL<9"oF oc=_@$> h DJ(   @(:1,@@%N69Rb[1'@ Ƈ diRl4@@xL{~5kXxUo%gX'4 6Q@@ @Ŋu@BV*X(+ovڭW!xI04 [o@@ @ t`޼y]{m|nҥA[0U)@AJs?6FQ=    @ݻ P㻫 Ģu;ƾlNhx 6:C ֿSqܸX,3W"  8={v-%K,kSf@A^X+*V> 0 -6l&r@@H\ƍā$.zF ..C^4t(X#+hզE9'  $O><>sر#A PWv9NIo[rXA:}r@@HP^'9ҥK6m^z_|-ҤIŋ;9,صkzUVM^z'Np5xŝyέ)gf %iUF I+GvKIdT"@@ԩSwnԨQB+d/lΛ^\eǏ)+\< @K"'wO sE%P:M:>IX7Ӧ'}@@@*p믿^%\PJPhQbŊ0z褤$L2+W֛UÇ#,Z7 KY\I V$^EVVVf~^@@XgU… 7kLO8ѡCbŊwqAL .Tڵs:pwZ~' \ñ- Vձ˜ܻ.#hwc)[n[;5@@HTN/C{k7 3LnP]NuT$۷T|Ĉ|P̙c:*.[+dO@$6t}]Rcmw|`6&;v}N;>ǹ$T\8ιS|c P $U*訢{3̮V+X~xe>wA;}yK>t @@" W^=s̷~?}4 ((hƍoI?+>@P4I{g*忇>nJ^{MݩlXx6+>$("VUMmVP433e6+"_  N@npՋn݆Ao6H2p+~uuʱ2 tlzzRFfkj= (Cٚ+5+X,cF-eOuH:  T &2JoQe={FYf-9~*p9uɓ'}R򩧞Rp[lBQtog[{mV0eg~A"/@@z-mZZZd7tZgLήZ7}ԧjjjL6w\ɓbc [:n%q/koIgk\A|ͦ/W幹6m/Kx뭷dxqqqʳcǎ={VvuCb2"<tE gӮ95\JJ\ d{ǎy  C0D?M7rʕ͛MGyDΥaP+?ښ,X{)'A*)**JHH򗿬^滺GGG+7j7ԛ,<\[շ N$웥`_G=>!QlٺIL&   Iॗ^R'L~n?OvZZ26~W=dNcbbn%-<\Pu:K_fEKr_nꍈes   xzz?ul߾]LTMG QVܐYdE/vtt8… cNbNRgO *~$}gf.S3n"  6mRٸ*++ϝ;qW_}U]}@{fVnbzJ͇V_Xhjx___C=zlAP` U穳4g]ڬ!utw6+p.*.vz   G?R/Z[ QWWW'UHa⤲hR^PYxZ-6 lTuN 2k +0R"T3mVPWF/e6&  \uHbo 2l`Æ >>>O@@@ognhh0bŕ [UW C_~Y[Xm@eyO hޙ6V ,w@ Ξ O#  c kv?~a:;T/e2V#K*g?SOnj O!7V}2@=Jxg^ 2i:Ji貂9# @@%z!9oN=  $~ 4^)YxI[I΋z@@J69Tɮ!(pȗn;U{hȆ܏Q*OHevv^Y"?   QQQrCYţG:t~^ 'iI嶏YAߤt[ty.+X$2t@@|wq g;NP0NmV|^LDE/ @@^СC˖-XKddΝ;eݮ:HP`W/4h ڬz˥==QuY%%Cp  \U'n+X]mVH_{tuu_ "s@@@6@J:= <"wvv/eq+VʜfUM!@@gϞݰaӯLeƟ"@PpU9"Z6+(\Ny}Nh.+_HV@@ }YLΝSz0oo="(WXx6+({rߕ [[ۂ鳂g{_@@G[_}U]D}Z-̆- lJ 4Yv6+TvO??! hо+7&O#w۲e3ZxR!qQ!LeAl~A.+jkRN!  UUUӟƎc&N>V;^z Vem0RhhH]>Nzw}үꚀ`]V_PP8;N@@@{^O4;{C5k֌3F-y7?Cx盛 TXx@Z=u$]Y>7iwtT(MGB/  8/^׿ۥ Lr~~:뮻N)*TVV=݁C 7Z; ,7,?emV[616.A7@f;ܻo@@M >>^,X`} [)#&={V[旿?.#O+uC 7*{ H%#X6+p|[ep}}}j6@@@`UedF- -ܢ3gZFBeСC~￯y״euY!A11:Xv/=ve..Zd)JÇ^   H~r!i_?ObbG}TݩHOOWʌ?Bk6Au=Aֽ ^nU: CDn   WqɵLXDPodzCep㮻RjpmU&('9@;icqAo4+},/ }gĪ#)@@FG,sXP:(*o믿^ٹn:X)l&NgSR 4IN̺ⳕCY ā}   PSS3qDb_ܹsɓ-fT㣏>RJ>Sj WA-Tӑ gMfbK'JY a@_@@pf>@N:P۷O)I s*%'Op[lB:L&'7AmV6gS̨lep5 Aw@@p*G*žLi=))I >uƒ%Kr cM 0Y'@`vhaϯj\@Ew $0 #B@@AL_㚑CL Ț_җn!33S-;vF||RRnFOdNi,f϶mێ9bO!gM+_eK_hoQ pC9A9   *` Ŭ" k"s=55kdS hn]VE)`gn="&U9@ͧ~ o=%J+*+g63v=  hp6% ӵ<::ZP+44԰ J1c>0azlAP` Utx#~C 2&6_بtg9Z3t@@`ȔǏW.eåKmv6Bghe… Nb uysffAP   `3gT.7x\2Ç% *&}}}=ZzlAP` Ut%?f]}N  # y_OKK3ѻZprroR^PYxZ-6 lJN$S}]VPA3HaDg*  tuuWR/yY`fq!ݞ*uZx*nXדڜS kqAۗn8;^# ؃%?Oi؋/o TU&:PܹS[õUYw-[2nf^75mDʦ)evMP:  p>C5%xW mL{8i$ WW78qbcck6Au=͙:N̺G\z"ן)QɩWח }B@@J`֭jJYP9@) *$p]mV|HP`ELBl4@ /jnn1,A@@ؾ}{TT7䛋-]0\vaV0jqkkC)@@C;|Qhc :@ 27Yv𑣲N..5KJ2l    (-5; #TT+ge@@@(@P`ELB@,?x*ޜY7i U - 8a@@A$a t7{Bv7{ڕ:#ys֡m  X_Ԉ[KW.+x_G"fee{ep܆`@@pdG~uc %Rڸ j/#.2 B̫R   (0S؛@[wj.[uD a.Suq47cS;@@P_ 벂Gjգs| !6.]-   `(@P`h]jT]VsSӹj˛?3(?@-    (Ё"|1)]\P/J6=s꡻ AnLؽg<;ZzJ;@@@`$ FRs!`]++'{\{zA@.oP  (=eWnC8FWGGG܊YSgbl   "@PhL *6Cܽ DIbl   8;@WUz^7uY܆Uzpìf`nnZ @@pfg~黃 w{[dzxj[}ꦋ dm?gՒl   s 8NXT| t}js.MepNhxEeZ @@pB'| tUg= .TmFg82sC,B  8+NDjek\ܯ"{-XU[[c@@Gy^kzgު j/2 <=ht@@' (p7wx‚edlS.7tTø`ejI6@@Q*pDܰf[?J{J\rCj@{wd] *6EJP_VV2gaV5d)  hK0\𓏺gXJ9es4Mm,($RHucPl  ӎn`Խ4؊VĤ*\d+ ./((])ehMP˳ ؿAF~ 絠%@Éř^74 ޸iyы7%@@FAxh A3I貂,[OksiF@YQڒl# v.@P`/ͳ+z9h #'ₒZ6k$C "Ԫ%@@Y_foFRYݚCXJpN֜ݗƔ_.NvꑴyK(:[^# `( 2zIAL@ …tp R,V5m..Ԑ\;ɡ(̝E3Ls޸ism]3hG;Ξ0a뮻n&Z;†^z饎5Xxʇ,A08Id>Y{|_ MF Mm@XLOS|T>cmmm@PW ֬Y3f5"|AlRJ>SSc [R'hݗa\[cs.G,}C)@L ^>lB*?uZ_`Р`߾}jPPSScsUJNX `CO*R=!.HPc@Kg""XxYV>U4(V.7mQ& 7z"k$($ MgW_a\ *V}^bZVmT '$`; 1cLw4&&F)9abԉ;70.fAA땅]_1,Z,93_DpV3#UvzعkOKK"o4(FaBa…JPpw,<\PNPjGø@VQ<ʡwHS&e)a@`#6@p߽gt7FpHL 'AÇ M*%z!bԉVi*-LS`NqO\]\O,aQw}cvM[**iWJ@PxUYP T⥲pv.!OAZ5(HNNqF[o)%_xi WA-T(USz5jnLi񔟸pS~A9 "e,%1[Ţ*@Q- N6}4wkFuOi< H%wq,]D>RO[õUYwԆ68_h7NM^Pu yiݶm;jjkmrE@d-j@[RpF@;Jo tq)vܩ-fڪMP`]OjC t-.=4Tv݆iBk?eeE'Ӻm*G@~d̬e\~3j.X l?/-sx%4iFn0qDY`T[õUYwԆ# uab;GOFiU^~,hb]'P#K;(_@R@&*ܻoYn{e)@TIV buu#)΅ s._e:60[2h.[o%hTWWO+ώ?HmZeAU@Kv50p_|mKŚl)AxG6QFv"O Ƶed 2-/+A,#Y?,~G{ѢEF[kF|'AԀWK oҧY Ad-]Z{)7|ud-߼gi;; ؛@__߅ 2 !^~[nej H_~Y 7MM< Mǁ puL'fvAMg\9rWZ#c=8I ::: \u nj!'dߞ?^AP}w}.%xg<8h,<|Z`bG;0g8a\3+f ux|j҆F%1;RSX(j L# I23?'RRV.J>2Z?{wƤ -PQQ}(Y 1//oXxPO7Pyd؏,0 kbY~DeLf{LDPZZ&C7g>}8'4|=%eA6"ؗ%h@;{{{/\LU uw-**/ d_A~8? Y` ϭi>`sj>Țmwdh8ać>i\~|xxLTS C bVzxM1ܖQ rdVCDl  L,ء@CʒtncW4BEGIjieD]P<̘6p5n3kI 6%m1sLehɁɕU&)@=!so`@  U 0zj>ϙuѸ@vf\cPq^ZmF@ 38w+& jK@ LMeeNH@Z֒e雋L y`pOO7?x2T s N`,({\@ffF궧u.75@Y 啦 0@w]^Վi~ 2-qcZl_gu|[Fx?"wNsV?p^d,URRʧ)BO`AOHx1Cf5t>0z (," \bLK^mtw {zz6ob:(>+-]q(,@h0AD@F\F0g.V9c@Aq" sC(.Yӿ(cSmm#GemkCzXiPT\ 8Summm'N$2<2 FQ!@P0*^&#/^p|;Y>7H &5{>БqѶퟄR=ANص3<gD0S@޳7bALYC3)C (@{ڛέ-{9Z1([vKsJP[[N9vFMP>=ʧ96&:}ީ^:^ڣGe2`lHi@s;h؉@_{}ÉŅ7J•|n.]3:oy}}CJɕV2S~3cbY@Ǭ[!o%@,hko?{d3f7:& L `(X\{hNgL 02.aݑ#_9HI]fP?@NdɴS5&b.pk'Yp6V(ܾcWؼ,_vHwg{w_FL`Ĩ98@OCQ]rhA䳦HhXNd3'?T_ ;@ ]{22NZOrt<8L2 Mi!sm߱PY醠*t"@P0Z^)ډv+XRw8`w3ܮ1= Y`dLOsP#W.oݶc!} U?dC Mܤ 0!߂ /G@@_.b80?@:ܢsGP?nO4# t'>rݧV[<$(+Q `2l 02jҿr@pHMeL k}a i><XK@% d,[f .|k:bmhkk̒dȫ>Y`د"tvvɗgZJ80G-_hmmN @K8@_O{+ ?5JPNsS[WwYIAfD~ʵdFC_p(E;;$tH (`L/rL) J$;jzNC@ s `޶ڦsk7w)>s\i0ې:˒6;"/\|Zv"~|8[K^E ȿNrd.V˂k%|OX;fb@` FΚ3!&jG$6o,{`H{Ndwww~~|ZԒcL\pZz @ _. 3ϚS ֬ TVVYuԄػABQl]rXq쯲|o134 ;]/li*6#N'mYO!l^%!--ܽ;W@`@£Gߘ w^)\gF/Zy6F{8@EeeII?6y_˒'No0$7,Z,UT r[@``؍ء@gc KWON2 ?tBWM XNwa5^.Q/ 3ԇd=ꘕ-akij\-ܼ!ayS(Nɮ1+d0\%23jjk-o!5 '@Px)=B'/u*6%/13WOPPg{|[2V Npr ʱ<~V6dNdnYQF T7/YkL:uSROJu!! j#eB~~)2Hf~.d@mmPDy@  E x}ͭ9{j> VHKA_r¡mݭA2@pP򈲌xΥ\YwLf _  bROȜy1=c'a,^Mz X7(2C ;f]xB/o0is憯\fC9ltݾF4 AU' {tH 2f).vi]\\~A t G {e~<6.!p k* Uԟ&˖⏺fCi î^83@U~fVa)i RO 0}ӧ W @B 9sd:Ĝwl:6eͺAsBÇ* (w-N^[- ~3#"V99vbFYYy[MVܰwp4OaHS 5(Kxw|@eILZXTiʰf@`T ꗏ#Ci,vL-\LfE>_ƒsmmmVN*?(7,_M47YA!2ɹL 9*#G{!.VTT0vƴ1fPۧ:'r?wvvxp`IUjˬubr?8$,jђVoٺ]J;vJt&ɀ3Y.V02vݦEˤeY\I@q1bxOI('CȨ윆QdES@ (p"=2P&` ks~$ջOŷkr^XXtY>}M nYpK!%IXݸi8z|+kITUUײZ iQWr:r5;@1y=>rK 2Z]&/dgMl!+q]@ (pח!gܙ>mŲ&D>+6Z^psУH$MOϔ ;vH eT7/3/[L^?vqRQ0諬- AS 0AA{{,*$ݞzR@ّ,t^\[q:A( hߟl#E`RIc^ZU;$;e{& \{`ҟoxfL tI^a^ @k` K">gB.)_rG8{|NNnII,:7w2LQ_ R"se}.{uSUkd& Cn%J{x 0* FD#@08AE_eje? Xdރl8MИۚblMM2⅋rm.f2jzẙy#gn m7S.GMr߽].ˍɇȗ˒-dfffii|,S=#UeWAAOOi0kd2|y!HMM6ڔE QA^ e ^lTR?Y W&ʀsמC:A U H% # 3@pXbr!^xTT8WWfGto~D`NL.} ;2 BE2!eiKƶWZeaV)üe΁ܼ3g%>ݲJ²8IfΚ=溾!]Y^X&$F"ʅ!+u7&m޲M.c|O+?rxJI]rCr \__/ ooe:Z0dAL%!K~RQY)=r9sIHgϜ9'~*ܕ~Ofۺm|/HI,# d C$oouij9QK;ʂqId4i#Eك Q2H@`>N0%ARK'G#*~t%=L d+5KrEUw HhHYҜZopKtww\mgdrø\]*7c=Śɩ7Hg?zpw'[iAe\մ|o2wܰr B.eRf~#;#>rT"H!3I{u襳zejF%(@އ:#aHeed;Cz   (-Gl!U=9 ß-rtvu큠M.E^#Y>7/QS\ /?i9iڷvL=ҘגC%t7wY; W=Xc;<`xhC [Ş. #$"7,,]+1 1ǎCN,a&aq  0 FEk@kﹲ-u6uUfjH]V_c~7 @.R `ILֽ][]r( iz.u@NpC8 Ȳ2\]>#diNYd.+/Z@/jW ܳ .dt ;Y_f0[cYZVWW?ԑCz(,7xM+f:&j)@ (ۗ! (P^|bR>\BqΙYCd`fMb {Rdn(Mc_#@N 畸pPPGud龸TGe|,eVFy~æ,]! Õ-3Osb0f_ngYPߟ37\Y - VY/ d; vL #%n!A;hߟl#  @O@EhrGC]ߕYd` 84`؇c=^Ҍ5n[0_t_OpAC ,|5e~njd~?Id{vvŋ2̷ @ uU 6nϗ1 -8@Q\.V {WXkJQA)JUPz (RDAһ|CvϞ7df2INNN>)wSkGX ?0uuaF#3,(h0u_y+U_3(H+{ ޳˯%0@ K@A:_@ c$A4l&Jċ+Fv^kf79}z+fA6Tu_+95Ks M3NF2ڙ1#Qa@ P'*!];6qI=qhvwAQ374⊯9iv( ni&4R4 @(țŚ"d^@[N0cf]\M%_ 0S-~p s? hǼj J׃_@P ((TA( ~lZ¼6Wk(Y;˦G&vkWJ={Mh!_|@dE@ ?y(@rH`׎-9|j"рnn+^;QVO>{B;ذ,ʲe5sAff'L|'l @! PPO0 {T+2ݍ޺Xtk'Z9%ٍO 3kYNޗ}m^0ndžʰ@ ByZ9(@pLלyzѰNX7ϟ5_fq@BkY|VSBO,Xìf۵yOY;G@ ((Hg"|@ F9V5z @ц-jyVI!waE}$1}ܙa՘V\7oBtdF@ o@"0۪9ilڟ~q浹ffLOBu1s[_8r?^[s4Q"wlQoZ(o}A@ II± I ' ?GI'vܾfSdޏ䪙 Ӽ 1Dց FY3÷.}Io# Ǻ_zee  P qvPWsF@p cj.E[UMX7uCP#=hTD'Z#o$)!\<+ @!knڟh5KAzߟ^MNz>lH5ܸfb 3nY81?ZTD'\)wU"BB.:_,T%a"j)Y'XBD^"P_Fܼ`>OlU/cݢ,4'piTUiNH B7t%83Vt;v{:FԳ(Hݐ@@ zz~\65h2Y=f5:eF#L{,+iAQc_tY*^?avs>B\E DLB@, iNDiT僉 ~Uz5W;˦nYC@M˲FjqBQ?H"Ԥ_\/~֏j󯟹#ankaKcE]L%ӹF9+;i,K  =wXmۊ+DzStJl=OW(@@  _eqji"(f S{x9&TS #9o۫սhW:{v3vLN4W̤I}]GyGYP_5:h:HEVEy=2' *@oC-0b(XbE5jYdIl!"P"&E! [ ҜQ_\ ~pS<`1vE$T,eǖ]7EzlY)!"*qEdDfƶKQpǖz_C3M婩14(j4DFT/H_rUc6QAlʍ"п(P7(9M6NNuUﲔ?PgZN{/=֭[zʦԈ@.]H@{葾={J8z<ʫnӺ|.<#zݿ[<|od&rVA߁sz?4|j8)Fx}zPBT80.Ԕ S%з}ާeQy F] frC@fQ+о}yE]"nsHcƌo Ynyۡ@ uLB(S! ’Z,!.$P"(^(3jQ @AXQ@jwwcWOKc ޿\$FF?eB 4ҕ#(k>*uy/R!jw}s@AXQ!P%ą BEk!bF-@AT(K2j9(ZႵ0K8u0s6Pd@L  r$]%{0C=|iٲ((]OW([IK*@ $܏ Fk!bz"P5 qI. B<,ͿtKA7md1֮ Ē)Gm:̝;z-' '-U BEkzJ#P #p=(𚄸@AޢxMB\B D̨El jm BTxʕ&P0j(>bŊ>B\E DLoQ &.!P4.p?([IK-@$% BČZ,a-$PdST)'ɰ|TB'&u*!bz"P5 w p=](p@AxMB\B DLoQ &!.!P"fԢDe k!$s[nʼn<aÆ_rzJ#P #I  N*@ $܏ tFGzzK#P5 q 1sN:9C9DU2#~k֬' B' $P`k#M L" P$P`k&P:] [#4I](p@AY/mڵЉԬY[eN_|ћ!MK )@AZyU8 (H+/pi&PV^i%PV^N  ʛʼnճ{ڽ{޼yڴ7nܸe˖" ߾}uY Ǿjժt"W[@Z}۶mׯO.pitN.p={ -}WN.|}ݱcG> iӦ3,sZ|y++6lاO*U)S,3\1v   YPnZjeb@@@"k.;8#]Q?ȑY;E@@@ ,YdZLgz}                                                                                                                @AWIuڵ9ghѢ~r˗/Uԥ^Oo~ǎ9[\X&M/~!?شixO,S̵^ /L4)x 8ĉTrs1Gq\/N0!!5j}gz{>ȼyP賅{9?3I͘1`6l6,U _Dt5lذRJrJɒ%58p`/`IQrUJ(^" u~=-[z} nH8߳>{ܸqRӧメ,Zh l޼w;cElVZBgٲe‘CT}Rgy<+\~֭[}J(BOutREv|&saIB~*]t[osP)ޒsђD|JB.vڲe˚*Tc=f$:KzG>|x*ȫm,X`. ss9F[裏6KꪫPȨ7nxg ]'p~s{BY-Y$ꁯ\򨣎29PO?}^tE۷oZB_nԯBNov7PݑϓT|[/IH@ѣG"EeYDrʙJ\y֭z\bsq>&DTQX@.(HIw9EܹK.zr֪^gٳg -Z_ϟ 7SVa4Gz:j/K[l[x\rNr-P.\ݵk2\|fm~sg>'ʇsT""u^zN@A'w +yE5?~r2YN+ЊF˾}q _~7bQɠ|z7,K[oM#OLoN:͛7npQ "ۇsgzN6vXCgIwϾ*Y d=|M79pNcǎܨQ\kS;\;Lׅ|L? 7:HV5V-K ߬@wĈQ yꩧ{X@mꫯvm۶N@ArFc:z]~}Bڵkg}Mno 5p%W-9*(0Hmb]q MeYb)|8Ʒz+j'sJcP.ۇsҷg>S'sO$t;{w$LfNT2[׿@ ʹ8_y0-5B;Li9NS52&(Q>/.=WXք)ɓSof׿50gnjSXq}\eʔqϨ/7Q[h(z(ݵ͝ý\ \yNHjhݭZ ~{wos&c3[׿]즓PbŊ9z*Żi.?>PxII(OφYА;j<- ԇ@ALw'nڴU?l桫^k-:t$P`fn>5oh{֭v]j<-+V0O&µ1/"듧}8=GƓׅڹsgz[bErVfM=i\xwx ϝ%I؇߮F kLקF*Uk8q|gCMU*BhΣ@A?C[˩:t8U2k tձ=cU5iq,t;5 <ɩ^z%ce?PWSJh9ˏJr6-7Yf9w{G/MBS*9>&ŵA4|FL5j,YY0sw8%w 7i"R!_ ^lY3%PJ˕+gfn\HF e `Yg}U.2s \ ]SZA /4GO&RN0m z.?+!ʻ$Oo"s"\OTG )o'=9$i0/Yrr?[nŘ8G}4165i0F5[j\~<^ An _yKB֨QC#ɨY (/&Cڵ(w)-gIQdemt=(_I{@Bg(`F57\(p$Q6=f oji>)}M$^{A6_V5nƍ 3ժUs( fU&ʗ// 3njFT>ꨣ=z$y!9Yw" D`q=K IAL 0{D>G߿Y\D@C8UUs; ;›"Q>?/i" jdt @ Z7H?N0A+x͐zչH{?ox7r;&F⊚'ju{4FjAv@͌nX~pu=cm|~z$Tz~j  |{;R;b.'ݵAZn\xq;hdcsi(O :oD|J`Μ9ΐjw' xMZbuI#B軓GJßPy9ek '>r3w͐KV^} h7pC4ɖW <=[:87']K4poPgOF]lڶm럿MaۧwpQ]`rwDE^? \ h{7os˖-/KɦUArQ*d- gc%> : ywɍn DiFr_ Sgwrj>l2A'4k֛0?(6HCo {t$Q+/-OrpH>W8֒oΝSzy 'd xwܧwtRM(?>'H@S4=\:*Vhl߾o#ϜKH _}QU?Yhns>9so|4LA2Û-rpTv I\NOkpPfeNWA\? \ +W4W+}꬙}+V- >:@(ԉd!HVMw z-Zp㛞>3n8-faY{¢Ej |J3- 4,L҅XZje$U3N 7A!3 r>_^r{B&ÜOh+J*\x*TdE1ѻ==@sM(_PPDo꩒ٍƎs!BjU Gy{m?['[![eFo>G:e˖ue~IZ[v+O~LUHg<&Ujno甽NN}0ْ;L 9H2p=V'Og}?Cmj㣏>P\XAoV| =AP?^`k׮ŋw2ؿvy:3cW[uj՜@kYź U%w9Yީry晚ݾUzuP;*õl}L'V3s{.,"ԳN:)^zv509k65Nw/W:ޡ`Ҽ.ǸD5a 9(V:Z6lhN)^jA2_KwU>g{f"}E>Ԩi%KrxW13((+fՔ2>P4y&?\ Ѯ]t5펢g}v0ly@2vG{., "`xUl4W"a`r. D5a 9(Vj`ԪRJ1 76mڔu*%=9޽{}pWV[y.xN1_Աۭ[;ix7DϓE/|~8C> ;D" >r޻^1ئM$#))'׿k1]OkԒLa.?ȑvN0eD.QѣGO&<۷oݺZjt\~fq5ο&Z/͛7׻+)VP˖ fB5~or%+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[]v}G*U\O>ٰaÑ#G*Op   ѣGݨQ#yuap   )ТExq[֮]J5   y")$Huhz:ân蚁Q{ 9U2$@@@HZ(hӦM \&O-_د2qF_K4]·~6Qiƨ5͛7טv9JYDA@@@$(O}z+1UXUe9    >~ݮ\>/K{0x]v?Β-^a 8SW\auceb\5#   A(Xz[4ۚ=av4`2s17ov2,[L5U{g׮]m TtYfRJ-_o /[|_]3?:.YPT @@@RHw@{gi߾FJ|+f֭}D!4V@Ŋ|*U{Άlڗbj^Ef͚7iD%^j`Ҩ*ꦛn0`[M6L4⁓?$U2B@@@2(زe 7n_k.VZuAlU?D]ʕ+Yc|A{\;ʬM2P%s $@@@HQ p]t2J{񽇣 e˖u?vjʔ)!jzfڵkG,T W\fgtWԍ   ) 2hѢ~I6lXAnΝ;zL2v{~wӶՐjPD u~=ꪫFݯ:(;8zclذAq;̕_!u4PEB͆i @@@Rؾ}o~ŋ@ Ʉ 4@;9sޠo;w?\MXSkĉ={l۶m>}8^Ps.iF' Ec>&lDd4                                                                                                                    qiӦ9gϞ:t2d͛sNp@@@TƌsI&K7ni$_~7oժUmC{mfnZr]h֬jժ2T5J`}u]WhѿEwa=#zZ~}dRU7};k 5ksOqUI,Y277:th]'6;zgĵ|fa%V;0ep ]1O6lPfbŊ?Qti4صkW}R2_t1}>w @ ~ܲeK@s9lhcǎ mfϦMnh-q3ck^ 'O>#PpvGχ >v 䡀aaٲeEԩS'6_{AJ.Oז7}o5/q w9s~f-[VDZn]&R2Y+}9@7fz4h @ΝV%J0ids P`6Q>Ury⾶w]tQq5SO2^ ۷o?G믿~ذa+V{-̙36m+W_mL7W7Tk@@ lݺmȗC 'NJ[nơ-xloF*áj6Yd4GqQre? q_[fHeζIkJȈYOZoN9s(9sϙ P$7L=[n+k%ȵ3B}@@1#@u%w,ݿwN:I~aDoJ2md7C*{w- u\.aݔ>'V$-^&J q71RH؛kDD6 PiV vv D Ԡ~h۶?ݰٙpP=pM "&7жKqmזR6- u.awsj{8|wҫW\@+Ig trvC9{j  k <_|yׯ2&AF'5TߝF}0`g}kV|ƍ7t}m!^d-`}iҤƨڵ?sXU]~W_}ݻwW(@_|կ_aÆ:to+[hDՊب[nNQB M47.Yf}4Шn7, P+PJ D׳n ;ڿ#"+ɤ% N~@@ d,P {ǼSA[zF,t2^k׮u2ozC)Qc_x2eʘ{e]HbNfpOc*oꚡ$w}w{p|ZGX:W6*pH ^k.\pŊA]wygBbPSL1[x83&ֆ\>t„ wmAZ԰T}bUjڴ] 1EQV|dVDW}0P⪫2H=#" M   @ |t'Zڵ\8+֚GyfC޶mv=V}fsMqYwFA z9zhvԩZjxMi6>-NҒK'%"pywN8J sS, e O<άtf͢8Ǘ^zIl[WH˖-}m(E]yt/ i]ٿ׉ΔF>hLG iR5P+~iIt뭷s17PjcLy]~F@uIB@nJ 6%I?"r OPl Mzh Hx>3曰)G5TsGt]#oYOF-3ynW6kPX-SO=egk\LcoWB/Z[M\]*UdNZ뭷2d 8kk*s|P_oY\3 ^-@)Q^c5ƻ]m *Vb o ĕ,YҮrz#_Cq꠽j WqځkuQUVJpgU~DAG  @!q&Mիo~7[J7 wKFhw[~W/FA7y+C-ZZ|S;dW˛4aFsFZE`t"1M4SAzwq,]90Kϕ߮_#%۲![}^ HŒeYޘ_mueh'k ɯ6Q_cٺbGgso o( gggdByɒ%fTmJ5W7P j,'oRoUճ0q3|q2@@ ̘XۃoĀ$Y KBmy;sLV r*58~3̞=\A {m~jobw0_[-nST҉D_4O=]-ZT򫣇ͫP;Z,}&ګV;7*߯57OYeo`'@ƍAo'Gv ޽+W Ż_mo.<7v)-, &ZPi]M8JiJ$烠tt (@((ﺠmټ婳~seG~Kre{hwr\DQ GP Eԉ*#&"^.%{g޼Tm̚.JSk^+l*'M T+2-!S^xAh?*4KO~.G>*Y6mkV9w\ժU~NMȵ4]@7"F(3(A,i:AS  Pp2( 38#*MP hZcGWCڅ8鸯-q3xLtIoQ"Uz RUV>ǢVvάVXCٛ(m_Eܙޕ'?jN jT`Lt-)&ۿ'•b5=S}:+.4HV7% ,Ii̶  @!Hh~_}:"˪:/.A=̪o^ejyLQFU˖-35B9L:UMq5^)$p O5Y(\zc ްJ*f_%G E4*غ"r޸qԯ.͹S W_zV:u:5m=\׆a@A6mL s:t:"{&V}!xځ7K2(!}'(  -[4w~7vԏu֦@B2 lJ\z~gU:]!s/fS"ّ P?T]M'"V@G& DzvK=Kkkڇ³nݺt댸 TK~;CB=JBޕ(PDQ-L!޽>ܬսh"^wځ /е4}L c)P,  @|TOdo6˽zꙜRj͚5%W8SN[n3z^Xy<)V\$Лk^cSkTIMiVMeʔq(P%S7Xx)gƍjdVD@;P=5@AƞJ J뉠p@@z_s~ܲeNXs DYŇrypF3Xz%p5۶mQKz(׈vښoKC7#%dE@- t. ^ ,l׮ݓO>\X\?}^{5SثǬs940)K.nzD蔾+@OEANNH  dRo7_Wo{odo^הB̒Xo=½x&zEDށǎk:ZזN$sШ h{[ 5̆\ϴItvfs1dVM}{Q ~C)gʱjgbV0uKH(H 2 @@L l|Q7yZc%$1neڷoow}otoRBՒ_j`ovq_[f(=(ƜOԄ~}mǚgĿՌb&o2YpMΝBzvK("V}t(0g$@ZNP  i'8xhڗY]]Cr_tEfzKPbŊ<!MK\K!mԺ}m$>@wmΗ:[j믿jP$$gC^%bIo34;qՌGsbUN"~84 6qnLH(H   0MK*4ѹQM}:5O&z&&`hL۩XU߾}2tזe&P 7on7n8KV~ޭ[ [a5)]RB $ zeVAkc5՜9s\9vjJ**6mU1MW sFR i@@L ҆'3֮]kOA"%JFIClkB8Êy+<~v~]rIǽ\6C/61q(08@NS:N9$@@2,滢8qbK{FE5лF*{_QkmKhٲeNZy 7D@,Y>zы:oS}RMdf32,W&)д^ 6|wuM ihܸqCoޛNA-\ +@9 q'K@@2&P|yuIva@@\xᅮ<=z{T ʕ+E]Ai@cE57x.I}m[fK k@x´wN:j8ʕ+*ںukWmҹsD3۶mJh]4@]s5o}q#8b޼y\+('aXx$&]ؾє$Jq WuhS~(0"@NS'Ȝz  x饗E'&T D*5躷G}Ե>t<ܻwoiy-3kK 2]RԩSS4K4]E_3/^%8&O쯧32}f-LRWKſp@\(Й ٧4  @l.:D:ujm*x:íΠ]7$>@@FRDJkH6m$a,X;uԨQC^: I(Z֬YSf7ҥKfBڣZ2»*+@9a tBkNZ#I$au׻g嵗,Ԯ]{̙ hD5-p hՐ#> stream JFIFMExifMM*bj(1r2i`'`'Adobe Photoshop CS3 Macintosh2009:06:08 14:30:20&(.HHJFIFHH Adobe_CMAdobed            *" ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?ȣ+9}*{r(%E_o$?qGWn1q $"b_Qی\BI)ȣ+9}J{r(%E_o$@6V>LojC5_%`f3"&*3G;FN.OF:1'Ynb_ޯڗUmqe csɘ-˩My{_ /OXaɪ廞3k"~_*e40mpZSsq9pËZ9NZ_, Ξ{p{VEkj4Ak_>?]wԟ9?;.q ;D1s|xL#I?.MdE0IHpLZ>-wE%,bcG.JdOF?W )Ixp?4)I$Jt;tӲKVU[]$k1wŬ_Wfw;f'_3H ey'zN!xjEB?/bݳk}/`9O%{;:cvpHnv7h1 O:kyofuC:4ޗ]{kkm5Xhs~w*813M-!}:I_8Oeo"̒ C>_fbF=BW/rTA斝 }?Okskm~Aϩ?r+ݓ=痘TI%)$IJI$SW[C ``Ji;tw},g|jaq~TԵhwQz}C R~іVGn!755X7;_L?FiԺp<~/~r}<|48{pO<Ǐ1П"?GTGˬIW/q?wΪ>8yEW\gX?gyOw ?}>{gAU},;K_OnEOƖ6V$n[)y}{G'kk7'g&Photoshop 3.08BIM8BIM%\/{gdպ8BIM com.apple.print.PageFormat.PMHorizontalRes com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMHorizontalRes 72 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMOrientation com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMOrientation 1 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMScaling com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMScaling 1 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalRes com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalRes 72 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalScaling com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalScaling 1 com.apple.print.ticket.stateFlag 0 com.apple.print.subTicket.paper_info_ticket PMPPDPaperCodeName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray PMPPDPaperCodeName Letter com.apple.print.ticket.stateFlag 0 PMTiogaPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray PMTiogaPaperName na-letter com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPageRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPaperRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPaperRect -18 -18 774 594 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMPaperName na-letter com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPageRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPaperRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPaperRect -18 -18 774 594 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.ppd.PMPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.ppd.PMPaperName US Letter com.apple.print.ticket.stateFlag 0 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.type com.apple.print.PaperInfoTicket com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.type com.apple.print.PageFormatTicket 8BIM8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@`\ 8BIM8BIMi72-Inch_Poster_Header_LeftnullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM8BIM 3*NJFIFHH Adobe_CMAdobed            *" ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?ȣ+9}*{r(%E_o$?qGWn1q $"b_Qی\BI)ȣ+9}J{r(%E_o$@6V>LojC5_%`f3"&*3G;FN.OF:1'Ynb_ޯڗUmqe csɘ-˩My{_ /OXaɪ廞3k"~_*e40mpZSsq9pËZ9NZ_, Ξ{p{VEkj4Ak_>?]wԟ9?;.q ;D1s|xL#I?.MdE0IHpLZ>-wE%,bcG.JdOF?W )Ixp?4)I$Jt;tӲKVU[]$k1wŬ_Wfw;f'_3H ey'zN!xjEB?/bݳk}/`9O%{;:cvpHnv7h1 O:kyofuC:4ޗ]{kkm5Xhs~w*813M-!}:I_8Oeo"̒ C>_fbF=BW/rTA斝 }?Okskm~Aϩ?r+ݓ=痘TI%)$IJI$SW[C ``Ji;tw},g|jaq~TԵhwQz}C R~іVGn!755X7;_L?FiԺp<~/~r}<|48{pO<Ǐ1П"?GTGˬIW/q?wΪ>8yEW\gX?gyOw ?}>{gAU},;K_OnEOƖ6V$n[)y}{G'kk7'g8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlong;=FStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslong;=LCntlong8BIMRoll8BIMmfri8BIMhttp://ns.adobe.com/xap/1.0/ Adobed@     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u{jIطoֵ=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :җn6>=K'ݷ^'7Oq}qd}?w.g< qN?N]PwULϢoւ-6ybիU4R_s??vcO/~نl]?hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XWF뫻GbFv_Zg'r |F%sqg]Zu.ec77r>r5X]xjx_dE$n+J;'o1׶{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uBIrI}M^nʣG՝o Tp͵6G)%!DT#ϕ}wu~Tc 2Hq*dw9Q͜qxϸXO*#HDcх{6tӼw'Qt/G=Vj [~ڈSRtyvf*( S?_;r?/>vB3Gmst᷆.˱%A,Q# Ԉcyx]m gE9 *OYHIT ă mOǯ{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺKu^ݽ*bZ&<e/5a~<=J^N0cCnU=[.a[+_,#< *3SH~QV˻_d{{m~=\So- O54b) ,ULd ?_%#Cmu .ߺw]{zUK–1,TS _p~^ּ̝.k;I ُwq,;NΧhw&^ƉIXme  dWRI}1oynvildA&t4yxqm*g# p&HS ܋ohciW)"5x2w{;]7n͓s&Gp\vo3X׸r/$Gc G q`pu弹FcNe^ݷm=mEV $P T7~~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^JxQ[iq4V+$:c^Y] $6wW-m,UTK1'q' M<4fbT%UԐ:X*RdjFlfy ái:2"['o;[aY W-}c(Ä@uܶt+bۥƞ\bgݲٱT#Rl$9 YJ巼U?'I] i a6$:9Y?1jd5x&TB?'Qp?]^j|&AS9=c,A۶. QL#*@POv|G Ư}#m!$%׍:O'k XGM[:<"lJ{RjLi6ԣIђTVH9ϟs^rjdbn2c~8dCU2:B+hbQ)$|wdjWS %_[2)er9FV-VC#ZMO'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ UݵY.9 ʌ5L%6S6ƪ?w^s縗Aɻ\ QiTTxXɥtS]ySl7lPTHߨPK6ѺLٺIal>1Jk0ewj L*,tvs;s1m,@{ƄC2L8<ij]qU8KhS2IWQ\GL|`_ԋSqgn2d7naJkGt=g"{G϶7i@32\lO@ȏA!]ݡ~XN멩2C[&.14J}E3=ƾ}IfcuRd¢OSZXQ&N> {n}ޛݖC7a iQ`~,/޿W6_겪7[G& d'ɷ=Gh̲2)q3UX!Yvn9üj3bZU2xΧQSQPIHS#YĒy'*$ cz&A:k{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ\^HRF;E_ٸt$!cE=Ά1_Gd6nۻ:=[WjK!x'ɧK匑f~l#l "@T4de<5[(QI^o}\^%mt8ad>Y=ŖvG3#l-@ #8#]IKbr܇~SWnևKj)1B/ hzNyϔbMkR&a3:?=Zomݣ|lm\>~QDb^ձXGlY(CE/ƁQG:pݯsKMZI]ϫ;~OU#rvM(kaVSI-ߎ$i:XeLl42F3ۡ%7*6<a\MwGEAVĈ5'o}6kύtJ\dcaD!/}6 f]MYUR0`yIJX:V<"}=w?73]^-+2RgmJF"REa=Eݝߦ~, TaYT 'H% ,hBYGpfg:K5cS/u]{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uچy`$d7V=-4!IK[s( hMϭ1 #$$$ՍW%;f7^691h%}O^{ol~~sЎAؽo*|d$`fVSTCmRj<;VoI.dY84?.vf7d&zUIipZ 5 C#g_mDwqY~J )V5cF/3Ra_>=%]~ze%ij0FxׇG͙QYݕǀ#YhI>]A:W$Z#?'Ǯjk;a6M}7[X=ſ GSp%dGo4w\}:7Tt@ YݗGk.Tξ[Ud5iL(Ap>BIqۿxɵ-^[lmyiX T]. :xo|O/K=Qv򗸼"wC Qp{tjW0oXpq =07"F((UP>Tp=1cI^$뗽u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^m?d3R};GR}_hy'׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺR J ds9Ka*|K%>?@O3Gow ; V ƥUU 'tŽ^HHʑ6v!T|Oӳ=5ϜEPqU{/#L$7>ϲͨK\x@P&gY#lc_g$rֻPC]FLvhxTG58%Äë?>6 q+wC.u3j4q%>2*js`|WEjFmMڊ5P#kKt6" XGϞ{3s RjSy<$43Я۸ wcRy!m+&kP{(hʝK,ª6zUxm}߾5-]LH¢QN*,mA$H z_n~s؏pF>=ʰ lI' L VSê Won6b6UvZ][95GMs3oǹ,+\,k%|$I;q4Yqj:d%DHz'UPTU ,u1=KĒjrz޺^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u;grg I|R͒ǤLq~۵[{v3R8ݏDPY*O=1uukak% O$Ɗ<܅Q$ul?wo/n.7A96̗ք٪t q{Sd_qfotzƅsA2۬T c\m{Q6Tn(|DeeaOn>86NjeٝPdv4O:pntÏA뙪XF4? kìt9Koh@oR#rsц&a~66C]~@R2T`0Xfe0Hd5AHxeݟ> l.xQvKiT^mqwCmz ˌw ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺRhru8] vW-䲙:ɛD4uĀČ=;ۡy敂"ff4UUp'=5'n3E__̾BñwjUnɩ;]aﬢ?"- ֳ%5=;Xi0>{qF :a%rc#(DHƔP3y$O"33YIcS/u]{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u` /%!5RM4(anlOȢgĥ'y$2I>@yë5q2M{Quqc3T52sWF]e:RN\c=^oŶ!7r-xGlJs4T$˃~yίTu2Q,fj<:CTL t_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ]3*+;,*Ibx,h 4@|j ' Ψ#^fͳ9c0іZ[$qݻKeʲ*mWIJCJ<ѷP>K+rZe,q.RªuCQaz*QpX&ݑ J*;3{GK; DRa'PQCP蚢{_R}i$q] gnX(tI4GI{;n'vDyx_v_j4? Źw>٘,>xjfgLN#J)!\krar@$e[|sTh8UQ n_Gm0Isq1Q#<ފ <:F2?"<`Rۻ4x*f#M6XI\4u1 Qo|aa^.%ʝt"5<+on®sQ%Pyu~.&s04j#:܃L)o'sWo~ ù/[X SxmyOeݦ$cQpK3"뎢TQoFsIgE#S7cKaԎ!nDG:.[jUFqcVUc5jIc֡lx6 &˛&ݴI(Ê*+psmܬ7MQ=9#P*xt쫥{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ǹInE+3TEst3bN ZZ wZ8R(&(ܡ,^TRo4̳4:eu #G@x/^DWF5:]=57uR_dSb`AqY$OpVH`qo}H{q,{6wAC'zGW"'\u~9ǜ|MlsT w2Y<0ÌpJ-UQUU*"ʪ0B(]c%=r;[Ӵv=qC^﯅֣50'` u=ZWʪ}bNe-vVӓ6Vo%O kIz|B+xdgxCTgq3f6Hp.n+ J O sD{y|Q?cij fkg3[3lc8j,N.T:?ԛi2X H毻/~_|#jF5FLJEzɞ_{W}ǖFd8&LIυEPkҒY|$\[c?_mi,Ϋt_/ޞn;'C𥥜SOL =GA_䃮hzP]Gd% ٬mS_>{d`yY[+\-B W pDI\ǻ6+f 3WeIFN魁dᥫSn̝8-訣aS{xWU̿.bX?wyZmP-@2vɣTF*2*p@b/yx$Xi$3<#pKw.Z~VqS%ڛNds퍦TS(Fܛ9?hUvp^9ɬ{sɥdݞSΞ<2HYG#H$h*&fg: ,jƧ^ֺu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^{ygOg3;t|FꜶg#(SP+9Ti$`5A b7fٶ Ynm)H;@ 4‚x-r۶k wM;[hEdW 1,h@-(9fU%⫧ͧ`,0}o,cICWzf~)J0۠2;KB(H:>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u2,*r@ROI^:I=gy)k6 Hl?n9xaMERcRӟy-(CdD_lsoǔB/w+{ T,D++%ovMC[f6_߽X# KJU18low[\ J%t~#ɡΒ9sWxyVu}5|/Y d">=WOx^Ԋ![qg]+CG7PIN1AϾ{g K~!eu=)WWjƤp?r4] 1[ [C_@Z0c0xk#Ac)ferv>3-Eeuu[$QE$@$=ۭ$%H K$"; %I[[ۄV ]݉UUOg{[#Q>2ObVJ;'v&N Qj'ُ y7# ߗf}s2U!Z)eƀ(FdmHwKu}ɸ}Um nh|摃?&h _*;T^Tjx*t[mݵ}MUWN~& s?>|Tx-*1*/H p:V_N&ͳ&DfZKtU(.cb2 #V'I=ޚ4=:K3PZpuz^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~tHPYP$OIh:z*ғ:xoi4lV-ߕ4s"j?}MR-_Jձ}!?iDH0{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^?TRtQTH݇lU, ]Gɼ.9eO2FJg>omDʎTіUgFYEqo|Fݺ;nK}%XUZgb„)!RG&'?݃93G[Q7n2Lجnvym3,qHOS~r9V DR9?MŠ+f4>?g.hDdkxd gP+\氹ˆŇVsxd9o"xa}&ټKis i)tp¢uW[{4w6 QGBUOM˺S׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^қfl=y762 6d3'jѸ}Zi#Q0)s76߮6\6DpD+MZQXEK=o;˶Gr lm$$J~J\MV<'= }}K3os$ѕqڤ '& 91G% <:"A^~܅k[yڼ>9}[M,oFi+vTݭirjw4 PR8ƺV=N?u!}pw{E+2Rب?&8}}pCz6fDžb &Ҝ\N4TQQ)144=%RR zx"T{8-൅-Qc0Q@UUT@ iV˻1,Ğ$RI=IM~{ߺMymr9Ŗ`pXIٜu.3O%EfC!Z1"^I(Xm62{[@WXUUP2KJl76y`jQf'm'LVJ,ue[ܔzon+O,`a| ܱVMDEN;sAL0!97E"tdۣrDQToe3\w;gsɲ9j)d*Tzcf"ΐ)h 6q;n U-DhCM#IO#[ qޓȪV;;FHQHn xڝuZF wH[52(]z_ʫzxd7GQKUqQ~5m_˪bƅ̟x>|B]orՌhr{]VYz?m~|=B@9[3O0C-TkJO0a\GToE=\?H'~-ݻ99rˀ5+`./Eudc@=tۿԻɉkmj F3Ta,Jº"s}vm..!bfSO>SduLg6v~/@iiƲJzǖbI>#gyRm|cn |;x%'͘ 'jOXo2^^dG EJ(thy!ic(RK,@UP f&r};HeUM$p$q`1*I<dOB>Dz&gMK[pYVɁEpi㫩bP aw~Zw$m` LWEQ7Vi)E*P^cSѓ`䩍5-)UPnfl1HENmϸbE/YOJu ZjZ|#n5"U+=8k)>WHa0)(vUK*׎ϧ]}/^[9>*eVNY]`Z ijCFID#XYULO{w"9}g3kkTkkH5Bʞ$ci;_iytZOw-V:/%a*Xϔ4;v]ydFJ߻U4$JC1E7ō-=0f}y[/hšB+Bҿl}k-#L2 O'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺG`f8_XrL3};FUP $ ) 9guAr9O5,}ږ3%hM5EO֙fuQǨ3guy[Wk:4JYYRLJ[g\׺u{E/C3ÝٲBE'glzj<$e Mӎ R`@e_:肦I}}z).:o,A. zLtG4jMfm=m,ݴ;Z0+;vIkk{|YDwA{F w Opj0 T`03 Gvq}>kD P(S\ J-C=ω`f]•k)ʬ&.P2FAr?B|Թ׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^N+-2 Vep8k%P +3g}mVǷm\Lc$iڄDPYHU`top-U8z #E_+ݘ(]_AѻVqƂw7bSǷZ:Z7j6_yw>i*lVCǍv˃c*Ɩ9#l\cd篽o!{.UԤhee2KN4= 8L8t ֣twa7f犡e GN6fo}'b;m[E曉*!@xbha={W?o}-`_I2L>SI @sPHػVmFܤ͘= !i3DpDG>V$d\;sn}ĞEKy*#[E©8ck9np5+JQEQ@꡻7͗Wع({49u|~f2J#(r~ܭ6luT JX{n%^!ͫ/Xu? E?^.ɷ5aͼ'ΠO5"/or<3#_DJDg6tVg^Iq,S쫓,|qlNuǷEHu2 ]3ܤ%EY$Y2'u%QXb.3I>Λ݅G v(ISxbi&UR_5]TM)#}+r-N/vVp0rŞYIj Li'38now%ܿ T *"DUE@}EXhf*zzxy"bC$M,*,ϺI$pQA,Āp$80Y$$Röonj~O*!xd;R ڊ[]h/o}~{7-gچKkxQr%d`m.QW2=;Dž凲:Y,)s07n/|&$gvIN5 *̍_?Wa=]vu6 xҦl5f\R9cR~޶)m΋s|ϼ7La ƣwXUVh, *#42MINV2O H+kkס?ػ^׽ujJ:cQMSO0d9:8! ^HR++ 2 NE,Jee$25A# uM*ƺwZn<}w^eNaL*gr[JE58/O\%߽dگYSƑPcSE"~߽nx{/"+%H[bq&I ^E+/gmݘM6#7Na!r8ݔ(p@7O5r&2G$ZT@d`JHT6hބ0Yɰnԛ-]{k' #5t:99EWk'W{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u`P.ۏ}Ym|UNVMVBHHQ8ܯɼΛma5Hcg Tͤ( v3N|ט!:'Vv>HտtrPl|ShnɗW3IqGRE[p}5wrRYFhM$I 0q 'aϥ8ǼA^v%64~$ ͢==ml6l^PVw+r'Tc0pϟ7 nj)$ U GICw@]\nvgSΒ>:htxYXjw {Qϰ7<{Ⱦ~M F:C@X<ϗCv2i:3?n`~7l !NJjlMiJFDn>}nW>&]LyvI|Q[FCdZ]Ncfo!}6Mޛ&Д, z*XuXx\/ȯ]2z_c)jNjv62 ꢸ1,I d8by ؉Y{嵍kvd:Ջ;)8Årbgad[}oLUk-fR |=Z=g[ڝLaT9"T>z+SMA/'tOa߹F.2ml?ѸZC*Gw>c^V7ċ@y"F{n{^_Of˽_tSf ~rn1#l`>jYP"0y"4'fWb,⟧UڥC1aJX 9MllgPPxH{QpiŜ1/v9UuL8v&OtS&j{7M\h!Cgȿ|ԒamcnuΠᮤ2W!CL'S#[7N2-c5N3VfXD{rI5=Ojzu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽t{y{T#M6le*q9 7zJ)ZwIMPBF|{,^cu$24mBAe%H%: tY?1mϴo^ڿE+Uq] |pqa?'-IN;OacwVŇLdôETY($k}ugr\/*=Ԓx:JƧ}Y\w>Ӗ5e=I1lurmջI28*4uRQԨ#KWs'{*s+sԻ(ElTHQs'*'Ms5W $Zj5#e$C!cЅM^׽tw_A?m.흡Y zLܯYR45J *d }}NVIwt14Q`VKEt%H9݆ʷom.U&H8`J ퟏ)ou7U[CE6;ͺ8m4)}yLlv %E-2 mO|>9G^%XZ[A܊-Ez :i$3; cP\-ϧ ^[h\<?pf6[Fܵve]X!|ca䚩nH AhX..ZOJ=^gkGE t>~RmØ[khY%c) ev*SAsnR-1;UU ֽwWYDln *_V9)$xhL?v^ Xf HEj:m˵Wj=A9W+]]]E)Yl>\fce@XWSPz*9>Ӗ9G93m],aZMD jv9^Blza~a^e\JQG/}"׺%?!p_; [znH$;d2c8> J 9a.o7Fju/=׮*(U~ (@y9sݮ6q(|uTyw7>~ܻ//1ORe E2*…x[-Nb+;%kdcJTjr0fqbnϱ[)1-Q*>Ol%nɓpbW{wnʧv}ng@^J|7񢴑)5q"s'm>6f?af|(2V1$qfC3עM:6հ-]!<uy<:UUhZu%u NϏ[2bFբxxsd*YŒXrw6j{VEq,q*F/nC=9{B3,o] qd`gsz\`{V7[u;Ges"xeOB?v=5Q,t 67Fܻber-ɷ8>-<}ǻ.$kW8 ,mWKkCK-m^s ,r7Lˮ#FI ~b-ed4`Az^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺKػKW!n$Z2q%&B SWA,G>ܟ|;o\-cTm@µj!4&9b4苘glm⾶jJ*HQzpx[gp[1;iCm㥏eVѫp4t3cmSNY"t>ϻx[/ )_[4 RFM^Yؑ 1ܟ=g9,leYΐy$9((W96w67.-f';e*W%V#BE*\>Ͻu7;-fuк *  #5vhm`$Fd`OG ä]{ߺ^W|WmOߝB횓%]dPQz{V0,-CY+XWf%eÏ|8ϼLB;9ȊL23eH%YZyć]hKV|HpS@(#%:SvGI ͅڻG)wE"GD+B$1&[oeSd(݁ QK#7G d@nw9줳 8u5JH PV|ΛBovύKFJK Q4ȪHyЇ{^׺u{{^׺u{{^׺u{{^׺u{{^׺uK<4Q@I.O D{G$z K}.-rh͸`U,~I~?>"3#ZY8$s`)* ^[Kj$!KA_\kBQʏs.L|R[ԫ\KZ9O*1unxofzN<#l|5{?1W.ٰIJ<2b)JSM[ 71n6j|$_]Hb+bu|^DԻ.{xÁn!z}m?te}wd[kavʁ(r?&B>-y@-&(mkJo>_ϨusLe35`gяʗv r rIIn2oSR`j4r5lP.vɯiFu5d[=*G˨s{ɸ{lǤ5*J _Fl11u-#v~Vs>؟f i;sS+{ֽw/x݉` s$JȴR-b-݈. FbCv-f]Ec~U }jܮ>=(_׽tv~J%vhl&ILuQP*8ƦhՔIECYIA|7"r/9vPYYTJ $B2ʅA&Ȝe*<;E2! ФX2:,yw L{AGae_l-q#o+9> si>3e?ļyaA-ŤNâͮl? 4= #Z}}ָK ,fz|cYl&tٌJSPčHя {g,r}q3/YURpYI8t}1ɸog*^Ic;q*$Oݛ;;ŒPvPݔ!`>j;ců^ZՉyּ-mV#ʵשA~^(4?mʝ@L?3mٟO'?#~6eX&h7ӧoMu_Pi2>SFOK;_SWV#}XyX?>p_g ȶdCenT2S"d1_SC*7I"U=OFbyGV!v Pj^'GȬ2PD-ylH2[Sadk)u i5yfbarR~KO v6S+[҃O_NtSVNPyFZF'E .%c []П{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺNown v"?w&R bWr tTHf>v *+04v]Ϙk}f.XYUQI7 ms`FYQUh$XLKjgjzv{Wi>S%JaD-3?nw䵸p ۙW43Ã0:du8g_|[ek\a/LjSjU>%SgA.m02U˴145ISSidv+ /WjjUxm$(I>L~Nr[MBR#ȕ翼.=sG*ʴutuPsẼDBs՟.pS*RRMyf+A{Z׺u^ j6?kJ-ɉ,ƽ.wm]4&cl)QET\,Σ.lرܻկB[Og*ok?kOh>#|k9OΉˏY(gnVE>mlE,MN&;+T|G(2zu>OG?+7kٛlGL-pagSD`ӕyc̈́D;͹v{J;tZFoә14z{{%0L4M=i ?ßmp{ߺ^׽u~{ߺ^׽u@&}I{^n`7LJٻ{po +i"ͥTQabNOv,6K9n! , zI~nn"^yeϣWb'*ef;DBplaaǏs+}~k\ixoar?(5wWYv/್%;)oݣ l_]J?n5 ͊o"ygG/8s0Gi 4lW&Pbr,ޏw:?8YIokeܘٕ(dZ},ɎɈMdŅ%CdPf"m w%7;SnmS՚L5o:a;oSŒ٘:з^vk<:>{[%_c$N}4O0+7"~gVAVX UPUTYUTpAE(${]"7fu]ӊVǦ)Yvȝ/R>bxC\-{>û7r+F%mnSnn!,x8tu1saqz)2LkթmrQ:snPvz{em$0<_QSÄW =UvRುϸ?7[..7i<`bڬjH#NvU5Eq63[E!ҺR"s## oq5TUxUDck%\Kx/fe{thaS,X΄=.ǏQ5q3EUS@+|uVԪ}@g3׽tw/uw?m.Рe:;!vzI[]/ 2@oʭ9~Il{VQt+RE*"k$TWJ\.D}vrr ke0ƾW"#{}~Ry}H1nS̸Ap6i l,9ߣhvƣ %ی| FiIsFg't]ٴn^OP4%{#ve{4IQ#;u$"9 JhgjNڣjg5$ IDCD;[{^7Y0KXgl{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺVA!۲`vg4ݣR-Ώ!_^ȣ_+s׉!7>]cޡzYWkQqOζ"/C򮞶s׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^s7n%n=sB~ASu>G߫fj$mЇnk)shhun_ud>lj)%$]r%?ͪ?o}}*/yn+@ZZ`}ԡmBK^OsfY0U}M`YJH؏J7Q.O+޾~ngU7LϽǺ@-ށlQo$"j䘡faFPo^ ~G1T@q@o1ZN^B9+_dIWA}G[ rQ?.6y6wa5qmY:W44V7︷Z[YnC:V }v>gFBo8H_ E7{|=UpgR5}鉉L| [s'}׽MlZԬtPp$ g}uGEq*xVz*Z*ĦO*ú*'zzCS%t7vY㜧蟞_6zGqSZyf>RWed9MRceC/]khbm=x?bv& C( 6hحo-axGIcHT~CSp-n\^YG?k9,oO̺Ej1a֔[>;ݹȕl{_w[x{- eZ剩H^}Gܛ<G($]ʟ͙ە=ܻ3*~6G!5U9ڽu``Z޿~}ÿMw{ж,bVlցɧj,D½J>{Em&ͷn5=$0?Ovhu /z-7Wq,.B/ؙty)䂑jJ5,G[ݽR'W5y;6 K)V* D 7fc}(ETc?4!%SgOuIm6oTwRhQ9J%]uIU[<3\X[-* P41ifzcĕ@:geMͷi $I葪 >]:Go]2ϱ7^ fmlZj>:7*^:hr ɤi ,ȹ67g/Y"E]ڔH3E$ӣ}`rgYo.c dYڊ,@Tmc՜{Lad ~glje!Fwgv_h`x\ -5[8*C WFͯmEϭ~\\O%.8Cw ;xoϞ{&Gn˒e&E7NԓS(DU{1s?0sn&̗LjM#HǍXkD^:gv 6+;X@=M,Vc$Cя^r~׺_SdzRrjw9IwCZ$B&btjXPj\LlU9_ոhj(fP`x}l"}o odb7T=)4: D)Ĭv{>뎋8޽ڻc_V'_**Ufs)O[[>UT0 KWaF,bwH+$`.!TQUTsC9z{l*(AE5҈JHWo{^귾j1M ݏ؝-=lKxSduG a"Lg4ȓTG˱l=˘ @ 0ڒ;Z퐃0VYYh]W"o:o{ƽdb)-RXP& @: c/wq{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺJ=7_v^boͥ F%DgPc)5G4NH1oZ;[^YȲ"Ҫj0AVS#*JhwdaqRg#*ѕF Czξu;cMktwUK _ zZMUIUBywGw}-iE-uUѡ˄Ms? sM7+o0F$ݤ2f$#8;-~@rjcm0*7jG\ƚ?Oύ>}'a5>~_]0L)^u|ߧ}CIqmͭ}/,dѿ1?a~ȷ/zTr@Ne$?zzqgߟtLVFm }7:v=սCAqۖ]fI2i*V?FP;<Ž 6a.suD'1)FT1;Q wiҥm#/,fǚ3FH 5n5x~woeZ*^g _Kd]pVcNRHܩ:7 -k;yGBۮ"x'r+#*2:s{ߺ^}wgO]]MbV)vlߋm+YU )䧎YBWV4{Ok7n֮ŌS,6[O/TT`*oS%-o((%"&p%4FÌQW<6V-X zEg*=տԶ&PZ!W<>g0Cұ:L< Cb"r?تc`'J{`A˟wV-;$ˡS?^ +wM1{L`m,IU3=; {<϶[`?fN\c-e~ՇC.:u_~epy&G79w~.Z>yk;jqa:}t 蛯{^׺u>3%|9Y1Rd顒"5}=^v*{ЩvV;hD H$/).GFOܫu j*jʈ))) Xদ3,B"@M4[ff *,'dxiTTI$I' E|me%>?|@M䨙:Uݓ%F>vD#%3 "ܜ%ٽT޷Q MRuLd+K YeOyGsdaeS[`}f < Polwo,M)SU k;r% dK4=swSn+ JiU% jh*WQRsϔy'ymvQijR?ҵdjm+F: :~v4i*zx I**'qDG!4R{v&`RTx:*] II$2I=^wO]Q8WdvHԱ%%F$ Z/}' 9YF$ln>h׾j?ҷޟ [xt)6ɖʼOԑO8Vn֎IKAAKOCCCOSRQSD!*GhUҨ E8*"U@Pcin%ib3YbjI$ԓrzޛCO FM4αC 1)y%G *`9>$K+UM$p$ȏ#RI$wO(W;D1wWIg4HA4"FO*;Q?&{?8w5I5-_UVYPфnj|ibrTMC5DU3WWYQ=eee\UVVUJgfYvgY1,ĒOf\\^=۴K31%$I>g:"EDUTUP(TP* ?lun{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~1Y[`W3M^w$C*UW yq5,~PRf4ShpfAPa c*ITDž{?ɞڑC*O_xC|7]lgL|96ۛ*7XnYF0En/Cx~PPPTGO# [v9qE32Ҙf" xm{8[w]/v"+C__R?h|6F{^-.~>-GvH cY%ƅi3{)QT,7t`;'+{K\hVdTQz%(PH T0dfV8"q,\x4HT=FFT`j+c|M˞zҹ ŋ PRT%0KSr JWOwe㟿v^hnk"ۆ#+^,WJ0EW7k&f>{=/{j,$ cƵԷlEZ[V9tKDk,Bփ$S/9u+)0XLVC?Ha0ڼbW6XxyXD0vviKm(;qҪojoeH U86w!W=XO*i9HI[)7 fazH"_K򳐾>ssĻ-PvYJ!m.na'\h; WQxgW?u[s40)@6RO:*-ps?W+rJ۞nRX m(鐀JVϟybnշB߉`>&A_TqZR̩iूh|S/QjjY䑬٘ĒO$%:@T4ijq,I)toUy\E.٭S:e0}F{ͻ֯3D7uSҗٿEETcTt *xj*aoE4Ul[[@ַq#e`xV";J;G")*(Ah.ψ=jr}C9`W!7jۭ>y 嚮kI$9{+94ʶITf>m$.kSש>~ry._+.MRG9pWj%;Sm&R/ҋIc_1;ƻo?20+$`k"y[l`m+p~R7K~fϿhvOUCsa*ꆂ)V)5dԭJ1C 1\t{卵Ȝ."W3j 5Fk7T-B:e<MC"ݳHEPT"u[gǶn=>Fslנիe)ZX`x+zˮ) co-uAFAO,+4 u ?vjz>,"p(ECFYՑʮׯ{^|1.ۻZM55fc4^JJPG=k jxj ww7:U,`!jY hu1g;*&ݪ{8+ D>)g0TH^7󏽾Rc^iv\4zhm։t׶J4\}LZ+ꐔW*%Ʒ\?WӺpZ+\u<= IOR{{^W.ۅ}yxMaT*%T԰%媬 0^YE[9w9w$m)b$hgw*gvTV`Uo7-mSorvK! $hݨ7?ó>9E^MO\#j>DQljS-hY3Ƴ0S%4fA7`>u^\(n;- -Հ-x0ԠicF>7pN_v 4+ZOwC\'L~kn20]w.zƞ{{;o|NJ{Knѽ~g;Zj*8EݤW++K4D#^b=i.]RK!fvb#@#DVf̛;&nWw 8f> *BBF6-&Ke6E ^ Gfݝ6Qd7 wZAȏG}:Yy[%[:g❔1 JyZV=+[{r1h 0W ;xBU }ԚB]2M ~7f^lnD[\'hFSUeu!e A=ݥi.߸DI"Ut`U?mLq]uX(>*OvPR,6Jx D)$'rQcpj Uz}/LJhHV']ƣO 1FŘYHew89w ,8ct)t׺,w@7evݠӬM.ޏ*&Z58@"&|\\ӼA`D|{iíJF†O'{E/>i6d1 M)Djq! uTSoAu$TwafVRj}粐}Q8WϟWgC-R8Gر`Z̹!m;{;;w^c RnSSٺ*˶vTRU^f$.}\\Ӽ-ta h!F4Xbr-m0C2Dt#(x% iƪ?Hu9$ԂYՍz@"?폺LÇ]G]|]tN$<ؤI"hVp_̗IcU>|֦ s PીGV#)dL6ˊ*cpoLQĘJOUo~yJJ)@X|h|tuo~{Y!z6eHI/lbb~d#z}zϳ(a't 4 HPy?t6‘s%M~8BF9>CۍT%ԗ1*?GOg /Svq^E M= [dE6 liNr{9pٷ [Ε¾G9ұڹj #~NoaFunܒO8ږ!+B%?"ZuTToY$UpWcZ{Ao$hZ/!VЭ}̳i-Q C=Ï!QFqj:mS[U|Nmٔ9zjuޝn]SǩhqsKo`Ei*|(AGMR.o}~y&?Oi> ⦴2LG3M#s'Qo^wVeس4Ի{oc:ϼ2L63Su2@In! Yc%hج P)&(]pxVm&6&(bBf*HiA5`m/Q=ھh_e eF?9%}(DQf6*O}cC#pPI$zR~ >]YT^$$iT+0)if|ᆳ`l*v0h6f2Ӌ coO"ɷE۵řZI .TQV!2|ۻ,wyaEnNx t (UE8_t|W_wE;.f튳*d{sk G@B(UX"0*& w$n[˔.$JϡaGbdb0$nZI,Mϼxwy \XW=럺u{{^׺uM<'{_uhFթ{OsQqu*6^TSfWK^:Du)5\odlcʷQgSe:\8!jRYbÓ=owJU,a* ĔeCVHWGîn}kiqv>dwT-b1Ҭ#uڏcy]wnj=̵@jfJ<#s>4ZV+Hy%8)wA0~V?{e`=EJ]Ռbbv:1Zز{$Ϥc)˺ezRT_u[vWgKi÷Ph棫L@YYexXݣo;]дrr~Bx@A5E_R3ԴGZ窜Fע8eM$a^Xeg\OBƻ E>= WvvyT4߻xl[14[&>}m2SU7^閞* 3j $Ri!~ e>Xm1LܦCPPrn;=&7itajw/+9_&Љr[G.^addX!_LMM }⏹rjIyˊ%c֮(o,8&G:-9j ~sT˻ARgJS::4ԨF9kм'Ns>{r$?ޖ SZ 5-+4zTVFh8+d'N{m‘_JkIp茤*̦̦B>Ghed4aNMGk\oSs]=(y23@{hpVzz2M㥗%}sOۊc^/N0)S{%QM w/{Se-2@@F)$Jj6랆ؘK6(486C-TV39o5euAU3Tň 4D^G#rǷ|,Œ^G W$E py%fkqStJ( jʼn=z ~6VT0QK6j54 7-J8LrPdWY p'_xRWhawNE|(5#TWe~b[rmv Z>#,JFPWV}}~d;wۃp+SPƯM8q)n\NJ:('H-$y$vy~{;MN[->^{qef2%F*$jO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺF ~mJnlmCOmIs5 MaZY9#)ud(d°>}Nd6mo'QVXɢA_cU_jRO{٣Lb ^I(Cx0 !# ˮԝ#Ǧ>;`v&#l`,sk^xZpzud#_d(K( {[Ȟnͺ+JW&Vv5Uj$F'8}% )t(V1PeٍOCW^Q/z=Gv_]E.]njr8 Bo"Ig^DFHݔr2s:r[nֿdզC5TTP{dV5$dVuR W9uv˟ݑ sคjuBqT B_Ǡ^M|\8NZlfz nQ_MtLTyD'sb!tTy_K;M2{itS#}Di; Ps`wzKcZƛu#Y uttJZ Zzx(訨! 5--4!R8ETDE ? X8P*UAiIfbjY$RNIGzoëz goݩTR>W7^TxU]VQ4Nn5gx=[B5W1L@t.QY9+w]viH#AN@'U\/AԵx|1~]˜9\u,pl%EUDm^R{qamꭥwpM*1 'AI.:%GݫyFjZ[ⲺL0@h⍆X,q((UQəcR|Y.IcV5=v@`U`E AA@j:zk;7xl;N0Y$U/Ѳ[K$'g~{}q\Ywj(b^*8t~Ht{m(DeН4̟dZ_M9~}3 6s.*rodled 9?c"PcN2 OAj#80/F%Arz|[}nzvVen;KEKeF2[y?xh=Xٷhׄ[OELR5z.s/F6붼-!LcY#:ݟ~/w^ro鐥n]US[(*EEN?sZAijU O Yv{iD&I T+HΫЊg>r%m&lPp8Ve=ʨDe4qPM.x }mݹをU#E@~m6vPEDAUTrsa73\NF.%$~Vί+8:Ӭ$o }eTZnƅ Txt`5SC j1 =^WvK`uhl 4LA-I1sXCljj5)Gl@$"D[so˚{?;q־C;s5%`ZY,#* jĉ=0<ռ\opWwN^Idbh2O*@[^նl{l;>Z[Q~C$ԳYؖbXX={^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{GK߿=#w;޹I۽Z~}PO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺW1al==U8 is[#!J|GH77#)V1F-X/_݃Hn\eeD)x%h&%hdXPHe`AVr=z9TC+AA 8.pUЃ#z6lun{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{GK߿=#w;޹I۽Z~}PO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ\]E)"*pn?yՙMTH5,;8D9<ڍTp=:ԞI$޺^׈@ "~Q׺?c}|iSz/cyz`S*XzTY*Upϙw0{a$< Pg F'}v?qMXot$4v}.EO 6r{Shw]\^;UsԵDʎH'EQM:$ȭ+(-s6,Q\" 񺬑(߶ i>`{Kv(rXeIGRXމ"6>쯖KiMmA$[<(RCx02T*$f!RSx/{ױP%lZЀUΐYf$[# 43{ս{Sx2jXZA :1P(HKޝUy؛zj=V(8ZO--m\%ԕMGӊ\<,E^ZA+) ̌zo74s/-՝E*h"20!=&c%ᱹ k1[7QTlS15yF $qc=muy߶Bʉj@UTPYUA,H@KaRI#DE,*I _1]%$E_**t-iGE'zET%*oDVjuŶ`y~y"o%d̖`zYyw#ɸ8v/A47cq|}+1P4)hhU#(U#5 6v}v6$B""*"( X9ssqypwr4ŝ݋;31%I$NOS}鞐[6S}vNݧ]vg5R ;aKSS1i)iZnag]佚nali$4!U@-$J$qHq/r{[.Zyu11¢/w*2zD)z==]S rJh{}R1+(a1kK!.'4G*}s;cۣ&׵/76,?RVI致_vM|-{(5Z[7.%Sn<%4ЌUe5DHQ:1WR|MFG+WJ 1ܩhhۊR=m}y pKHmΗVn+%ʚq2*Hq7',ӔU% GiE&>q{ߺX*xyc#ygX(#TYtDYX*$h$'VDyG,@ O>C~q4C17WRܯ21g1"C _МjHjFyTRޢxM7(;s8xЙ |;Zx鈭t?Ҷe`"G.o#H|_Ӊ,͍Ow]K6Dչ$jz 0;}Q{eݭ<=;y@OV X&3j<@/u{yzl5"촐A1%I3| aX헉J%Sd>ҠJ8ioEegpx 䓓y`јk: }j*$Bw&ZDP)FNŸW]12Si{ts8StpU(xY9=Oܾ-؈nO@OE$꒪On@7Ȁm\5",e'P ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~/-Gn9Qkg}֙Jɢۻ@JWPC: ^e}ewXLlb!x`> $zxicMwnS׈ x ~?Nl87Yf LQ4TndT۟g?#1RX1dgtH$9ol}vyq9ָBE|9C(hi_p=omw$բ*F ^_ _}GslQ cP[uGOi*2Y契E7rt~U-O@Yf$Fx ,SM{˼Q5rkJxAeQɍ?2 bID0X-"bqcy)`9#ً%A}[TjdJ3SZ#I$eov=tM-YFFw3,'%X]B{ߺDo~׬Y}aX ; :q}7wwVƿu:شUP|]eYCN}v?g ReNi;@EKGO^{pǮcIt{eA CFmrds׺oxfC7Pa؊*W-qPH(՞Id`@roo4K#*G ,*K3&?kku}sm4ҰDDRƊ 31 $uϏ/I G$Yc}m2)G 5b?nMXHS3'o{}OBP4v@wOH*E͜Ͻ(;Y.'ꩀx2I&׺epj +gSN/;aXʄ7Y2xXXǵnlב;MĖڒHц# +R=1wkki%I<LuV^qyx;U$_òQ"}<5@'$}6^XCD$* /)LoBv^q^e^[":13]^,!CiޝI<S(vT]H;äp}թZjqT  MW5 3$Qyf8?f7UJv-ePcGo~8~l[C=|ъZRdX],"m90u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gBw\޿-z?>O'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺBKdy߸, l-@z0Q5VݘTRU,S Ȓsw2ɆdáER]ʚO",ԍ2 $n{9YC̾#E-d57lhR%84T()dY6]aKƱwwᡎ-RShg}kC"Ar(`>}޹gMPsxGhLXI;iUym{ۧ5ZmM_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~fUScV+&t4T42QgbA&ZZ]_GeeK4ffb$TTX8RB*3K1 *M:τ?Ə 0KΆ)zZA["jskMa/vYMh yZ1s!v, ?5ᛕ=)6Y$eGgį#PKDH#8UDDPJ*=9UQBpuĖ%Ԟ'^ֺuٟ"z'zp{Pɶ56BfhuK%]E$R5JFce>soOmp/ҫP6i) o(%U&;yN~o-ϙ죞aዖBر8r2L2L,R :mef3#CYb*<^Bj3#A;RWc J:V;K)fGGRVVX Au).meUWGF + VR $j:/Nu~{ߺ^׽t)K7W`3c*g28hn]ӓ$0jY Ar$qۿnyfN<Ƣ(cki(DqGQI%c^Y#\[6a@i%a j`T*.쨬l?^8m9)ߝ_IY[ִt <]; <|nBWvWܺ6ݥEʦ &qTgÁO'畞^_YE1§7f% B TS׽t:gw`,nj9̬:ZXC0M42COM ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~l'm]m튦n_uL5QX0=GёUs$k`s/'{U.+5Ȗa1Ii%Y#SMIF}eO,+[uJ :#Q##V:bJ]}{ߺD.#sLw7afi%huِaLVwZ I6WJx%S?ޟ~7mͻܥB1+h++$K~{7>%6kX $RbB xJ#F7@ SMw.b9kk8Sp3O[dNI'yi!(%)B3x@wo-7RskAvҦd%`/k]ei/I4m4.](Fd^u_]1j/mЋvUu2x1@`g9os9޻꼷sw%;vVdX?w'qtKK8RV8nHuFɮZ:J$lC+}et=RU{Z׺u~N#ظ޶'1R.^iߴ>|. WLKu*:#ML!1X1%ye~sw zI1[DMtiڀ)` "?rQ^;Cct7cg6t!%Gcc5u2i%I>|ͼܿsrvݸQ抈fbr,|ܽ\6EwcDgv!UA$ӭOd.7T[kM:ԣDhu&*ѻ8NYz)}>^mX-lp+L=é"XQQ`$P{͏}Lzn[8 $ @'<#^>{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u߿uXa+;4U;xaVⲘPT%r/3~hWk~mmq=Ѹ ıaU,]*Z7_y^\6/v+" ɅͼteP@ѲYI_y-[|c;s91Jv Z(GHghSx߽FTRr)HcPMJH8 qOwp>e"zGᆿ>OqC\ASE[}n\޹ݛ7Ty,QPeR8%X,q"F<[5rww.^Idbh8 U *:Km[fǶó%(J"',Ėv%$m+pG09L9+' !7AI.պ;&6G$lQІVVRYX OYnI=$Fdu8*G^cOQM k+qT1^sqd45E84қvܜ̮nDDiQEYAiP"Go̟~}Uاzjfq ljA9٧:SMAMzژ?khg2Y1=jj+x'Sroq/܍[tJȌi")uE.~;{oͳVc;BxoXdž{|Z^#{^t߱M=\5ۧt+moܱS5(фR Yb=wc 5[Zr<sj .^ӗ9VZTG<B4ƹ5%U/u_ՑH[qo<G6g7U覦KEO@[{Wʾ|qO;KLy ;cSAV,Oq}/sy`zUoj#Ow=7srW@.{߶{o`t~Ge ]pPTUOy*k&b11ZڗzhT(b|?4sUZ[;5=;Tg4PW7u![kaUG$p˻/_ߖf3?uzo/^Uy)xg'Uܥ::>sm2V%5#˨h_YlQ<#ǒ{dw'87-#3,M4;I,LIW%݉gv$I$x,O!f,͒NI`(` ׽tf6cvW#&_UCheqՐUanɸûm3=ͻtt!VV A{;M]p'9#C$ŒH?{b>N` {oƑP;D9v٧[$u SXaf?y9]`TE­(EP̑(ZC_~}hlj^"> CAehhxN?%SC[A(kUcfXR K+hfVI#u :*J A{I)b`J2UYHA z GUQѻ!R"Zej/W!g1͈f-QJwn+}/}۹}^{ߺAn̓3-nF[ @U[U%f76P̡^u^\.9n',k(EG͘+0)A˜sQG$#As=IWkπؘ bμEhe/۪UGoX @8￾W1mr5V5?܏EP>OS'utEVЕ@N,{ެ@RU׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^Ӿnͷr4|{PԙYxM3KL!Hҋ<6>a/`|0|+xU%$,ƬVrI|"׺_Iף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽ta~*^ظu>#4-6[sny miXWyE#O>rǸ_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^җf{ml==~b쑵fJ樔<5’K!A,-HK9TTVUAwe@XM C(hY UPI>|P?zi/3+[a+Q pZjGD52 'ߺ1- *pn@P Ie(TI,Wtouy[QYA,b'hf|Ԁh?sOQW^ wyJ|&ڸl'c0z7WN!VrETVck($wݶjyDHA!#Kh${e[\Fk(ZU䑂*XR@ILo|.7qcCnӭ͝5Y:d%:ZJ{P@(M%Lq3mY;}-4.*nn%Zw )lbMq_e}=Kin ATлap!M{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^&>n~SQUֻO60Ə+u5RRԚU?}yBrn4\E Et['`A}yoMتS,?Z#zp(u{[䳙# *hf>%cbGYd`lqeH-ѤI"G)gwf!UUAfb@M:Qkks}um42hY܅TU,ItrOst;eejsz*hHꨤ4y,>wE&IDQ/h L.JOON$.!d,6Dzu$Kͼ^cbʴ`AVHBU cDed jeGn $臰޿=֕wX9DeŴԅٌRBKϧzd%]2v]̼֍Rw[1=ڠ,K/#H鷰G(ao *)ҁ3C+T{N{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ջ'몷-}..>ڵ`ޛ*z֦,"ϐԵ8b.O<4SS4TI=ED$P HdiUUI$i" %TN$ՑG 3$jg{+Q7E_O`c;s&aEٻK&-,tBbDSAoo_۞A׳#=!TaBoiGKy[wc_mW9F0?M &..ec:N ?_fǻ0¯5Q3b0XwAƤ"/$P4"@^{+͋[mҗՠ0Mk&S4LiBY $v峵]SYܑ U%iEAd]u=~15;AOz{Fd}Te_,RSNg娝RaUH#+w;CoO+\eʑ1eUi:$k9=,O}Eqe!ؚx1S$uX: (XE*ZWPٵ7;do d]״3Y SENiR9W$Oa-O'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^j̏K %x&Itu! 3Ko*t5G=he*A A`0zϾc 5>kßR7:zRuykV #=?+}孽voܒ0%ES3 Jιtz77_ l]Ym&1DMsHd0xi"%>h=]&Ԩ{RhmZ,C! F{oܻvuun61X xM-#o&{5 ]T]/ ٧O4XbH'Mrz~X'oY_{ٶNG&ƳVK3] ʨjXWUD D_b?2 EH*I ʈ5Kq(^ҫd@.#oI&cHܕ$FT6xɷ~4Yl}N;o& ,E]tI6zQ2*voy }٭})xd EuÊg˫ZۨW۸\C̚^Y-@U 7V[*MeB`{̮{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~Y>>/_- $֯#)GP`+ <9J1ݻt{n[HG'P +`fӘ>2Qg/w}x<ŷLʔWp71k +_d}u&V<+t&z <.9OQĽoORB\R+-O ǖU[9%B%\ 2%EI XvǘDM9Z&Z'a d+{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ\Q"*QBXI&=r׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׸q׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{GK߿=#w;޹I۽Z~}PO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~py#^GDTovUf‚~ζ<z_Iڽuoozȳh "7C)q~]eN׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~̶}q[mhuw"Ck䑂"3<[U(YdjHf4@'AբuW'5_dvONd3Tw&b6cA7[f%}OͷV,M)aupEx,)pc'4}Eː\n '$-Q(1Dҝߙ|NmZ4hO76\'wt\oiqN$!"CPL5h{jd0l~$3ODzϛso=vvcp :.KHR0Eff7$|VNY2p‹h<$¢dNI9oojMuKvY]GoQVv%T8;?{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺFn3zQlJ&W`fPÍƭteY$L]'U7S{ͷ<K2o!>8mU4Jf/kj9nck-5DAx^T %ݻ%yg&駋ȟ:Ǐ4vgen #v_MO?u4vgen #v_MO?u4vgen #v_MO?u4vgeno䙼BOmI2j ˝$ Hoz?Su+^؟z*vi|gzudI1͍BDUD ~|goe_+lY1_VSt|TfvgD@Q/m6 5+O7F' *w.1?{w߸ǽ[TF]w#:Xj?>;G]Ŵ_Ϳ5tLi_DGzcz^:m$f8y&_xOs=Aߵ\%Un@KOZ 0N\\PWr *ȃ4?۠3K׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tygMu|_mz{1_+AUniF6Ԧ7O=={m>&f impIkz|߹Vn⓱ĥL"dME0EOW g|ľKB=gKG3^ g|ľ޿B=g%/Ze3O5s5GM5&RZjxK6U]LI6$;[n ( @MO=uNG 5g6c¥I4$M˺S׽t%u7OWy:=;NvjxiSpŔC.kq*-OCFBqȎ%VXm^so{|owpm" jY 8֠vQ.oG~曥SQQ$#:T`U76u/|epjlG| [㒀ùOj;r_rk{b)P@W!Z j8=|`9, ܪrތ#)Ķ/;)Ωm5}kө[++ #9'yK{ BaZktPS[4o~|t |kcxSqcǗB_?G:4ں4[N?ik[{߷o ۇ]ZOAcݗCSJW]ufǙl@: {,{3K;u#> GGF6{hڭ?>ۑGC?36lM[jҥ[zemˑzhĆh]% ͂+si;?Sr#C sE݀YR"I|ٺi_O}4 2[D(*FHzjz!_vXެ\^/6x\pi]Zu5ؒrsk}ڹ6o7BI~-^'d71ƺcE^MXqO{s][cMi&X]+A@`|/ :w{?m#_=ٝ\??-wNCqf{cr9vq?i2u.)ȑ Q_X} ۄp;MՈ\WMĨ*0JАr~sۇb"xRAqnC lhℕiP|5:u{{^׺u{{^׺u{{^׺u{{^׺uǤأ\ߦ `:'6)2pLf 4c 7'< ?}||`I3hS_㮪zgX_zͻpi9.w.4kסC/wF/{ɽ7i'?h?el3fnܹ,emVoOk2Ti1/1PpD*T$3 t`n.v`8٢4BWiSY $j _._CMmƄќF RFtAuLy,nK asX>o :y(X28̅$4sA2w jlchgvHJ:1WFVVV1mmfdY#d7ц AA}=׽u~{ߺ\%qo%-ovE=H}z7N7{ScSnBJ=J3 u[VNZ_s.mœB ͉O$E~jӪ+Aì;^ɽ^ll֓qx#GNiMiSJҧJdyWMO?tWLZ[uٙN2{ CK k/ծcOײ6ϼ;_ m" <_F9ZN c3KvKشV\xp#xF ||JV)zȞ{{^׺u{{^׺u{{^׺u{{^׺u{{^׺x[wq\[eüHp{K ܙyPiy$ }s *A# Y$rGH-n٭gyyW쾣쾛apr;66srP}YRVQM3ҳQTԈ54aYI7>Aooq{ 8$j̀E GjWIRJyo9o-f{Ľf6Q$eVeP,u&5bA:E׽u~U?9utob-La//\l׺ӻwȏ={7ޛ0uQoa_zu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{:F+cajZ67M!?[cYt"gjV%h*znh--Ei$eDQ(iMmuzmttbrI0QSO-2Ƶtjhj*sg\Ȼudt[@'_ G0~%ar&M>,yx6HjG.9gpK!&DA)plFJf :~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^׽u~{ߺ^׽t՛a76&0ӵ&S e9*W 5~:$hͅD Ohne7kx]2E2,HnYO:Ue}{Lu$$Ã+ zT7\cv9?u0R⠟-f|+J^e 4GfGM_dctnp}VVu={K /[z̒X˵$-lv.o s% ґG (1SO0-*QR:ȋ"0du >.RUGYASCu޺^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~YŤQ73~[xnXDk;a~hr˸u?K7_Qq'[짥}:`yќ}->g6* yy|xMd \/s>̶}~ݭM35ܱkMO$j@TbzK}}gϹ2ys#K[7Tbv&ނsVKM!~ݍd@(4N2Ie}9skE{U{ː;.)j@"(+;T,/u==w-Z[׶ Gi**rQ^׽túw&'fǻ"09}ɚ KdHb#Yn<ۣvPq3 PI#ypE'^wnvEXI\"͘y-[yv6z5Vyd_L[).U#HU5DUolÙx\ICU4#f:E @i˛%/XcaV}V$T~mMDO[N+O!ecM{i=r9OvKghVXGꟿXu6KXܿ['ZuEuѾ{{^׺u{{^׺u{{^׺u{{^׺u~o~Ï[;k} }?7{ca,׺Ï3P.]ӈ :hF[dD/ȟ|ϻ,oaJ0k ]2*bZJeo#ǚ&MW4LՉLJ3DĦDFje!ee \G| C:ϲ4=w]{{^׺W*o}=nd7I"oh{_NϗYahu~}zHw렟U5'-}YC*.[qWzc7^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^99*wEO[QVOP-ً×4 6IOZڛ`QR4g5bݛ;?sej878'gJF ?32rqNa_ޣMkKX38?҈E b{Ccl& bm ئ'j`{Q}˻,ٍ,m E~tXo{to˹&?ӳ|ָ_ʛbwGQ}?mǮ}?oD=Y[׽u~U?9utob-La//\l׺ӻwȏ={7ޛ0uQoa_zu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺6A~' ,Oz+ؙ}y,g&c#}=,5Ud$YPJt/iNJ9י>k B6 z($I4%*PJ~{iӔsln%$BYF5\jZDk4m΢ޥƌOXt4XaTe~2NċOIL6[m@ BGU!Y٘G9p< ZbU@uL|gmmf/ܳ~dIcꄽ׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^i+hstHĎ U<=񶇑T"^XeqT,wTw]?އ ,wTw}]?އ )x&d R$JBEARH`l?1NU׺uDfzm^_lc~i)b7*V}E$kU5>J(+DHFڻnmgEojnbUHKPWPs /]M7eyyV !OwOã5)kǷ'~k#hRo]YSIq|Bm.71 e}=BǼomr(x{W)|Lbp}Tu}wyvf?Tq$~LzWm/^O|h_u?Y{3d'vR ,S7SYM fXޣ̲{ؽfYoA<&h$"h/<*D4,qGvMӟhy۷T‰@C#ݵXGbn3Q$̗Xm(^ip[JՊL۞[n=Z|ycK}}-wd~)n(*%ǴM6Gko\TLQl&)&.DjZL(Dc*d5w_A|yjw䶾OBJYCE)VVa((>~k{5Y8-WH:YT:ETOxկ\h6LD}FԟrIm;uVk;~ }Z5ui)}Ǒ.Ϗygӧjӫ_s~~u}G~. ի VI{cb'N2?Uo@/ 4N/lt;o3n=gxoUޡ}+^WϦ[~VfF|mZik߻wfӪXe׫f<-:t n{.7{^׺u{{^׺u{{^׺u{{^׺u{[ߺ8(_wr<0{sz:u$Ȫ::GFYY[LUATSB8bc [n^lƊum JzSWi*0@% x!i7nxiNtZ\Y&:V coWzj$h8L+(%i{~G{^׺W*o}=nd7I"oh{_NϗYahu~}zHw렟U5'-}YC*.[qWzc7^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^z 7vW񏷭n*_о?X/\2Q=k5쩶' t{OJ{Mz'-&K.c u{ߺ^сeQYWMV//+ozN[yVν{;}g|އy g}_]v/;(o{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{׽=lqsH `G9XmZ^/=b]ngӪ w? ?kpvnxoʟ/r%z~{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^m?d3R};GR}_hy'׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^֦>dٌZrGٔұ]Se5?U?{__=d={)_={[QKQ*uʨ1+jQ7 Moo[ZL64r/SFa54q\FbEu ?w;jmY_ܘ铪vuF(#cpZؗ]fi)Y#cɖ99iMcEuvш_\; LNB$ǻwO-pX^$d3DFZYB!RYR67.:um \Au٤Ŭ<>U}ltxGЕlQ^coDbV%#+n[sY%є$ַ~Ee4|>?!eja5Y~X2{u٪`Z?RzO忓?J\b7wa*tZ)YJe{X<;[,“k}BZWԯц?F|/rqV[t\t4n@/a%MGO5WTw;:hp0yw6ؖKq*/674wm7&oL߆+^hQ ҧ5O/6Xda/̱~^aݿF*ܶؤl^x3[331n4fQRT4U rЯ>_f}E[l"9$CMx=^"]r9'+s?)n r5<&F<} Zz~{ߺ^&ܞќ__">Ix:`ԝ 9=2xjZV:7l>U(d~+LUuHj=ϗ`2oU3$pD&ZT-lm8uORSXlNצhY 6 VHkeCpSd:h/\6ۜ L~%}J@zWg*YeN:7R_\\MSwv/b_G-/]G ?lt6r5#~(}9>ݔ:d7VG'N[zs|tB̓3d$={-˰s73\Aqpʶ<9e.10$1:4$_}C=m!p"Y#bjH@9$ǩ{^닺F:(,TfnVcEIlƃ'п>NU벦8zYZUa1+ Jyx((_ykݯs!qVce c]-4Q:KnҺOb>ۭahAz:B\A>loE@,$!Aé($UqHa~zu{{^׺u{{^8?#6{- ?=r{=Ǻ6>ν{{^]s;wa߸{Gxbq HZzIǪi:J4qʄ:';r*"3~sH,H tw˜ûrk{GQ?:pOZx|-gwCMv<gO9*?*e?PdG^~-n`nĵ=Ic"t #/q6sRe) խ'8_FEhCԁ׽uUk+ON[7yL(Ӛ}UϿ]ҶǾ=n{.ʈBIVcEI`4\'@/_ sؽO{czYu-NmC:t:M'jmr2cC|+qxZ hka^iSTqྲྀ^PmQRYc [Ⱦquh{,uEtҠ\|_&~Swv/beA? [{}淯FV-O{lF7mfAmNB*)b:Mqtcpڞ {9 pKB3*, duo6^^PcRnق ƕ'ϊ ;UEv˦}Y1T5ʢI~ekR @ 7QQQ:+ƾ}ykY퐶ofE uiAFF^@G~N%xfuGg !^IX? 0.1Xj%N}9\[XzVd {_9w!Ehuf Q Ḹ`>^/)^}95m-QW]^Fˢ)SrG;){Ks| f?5K6fx*k[%)|=ߟ.;wV*-]}ڹ==dC 1) K~~m{#'06ymhv剟 P)xxfJ~~vܭJxuS)J5BI;ge ^=o6K0O'P90'j?=$MOKMg0Vb#n*|:TVqiGzo;Owrm`mN"u.lvg)daE#ZS͞ŧ4lW֖jVv9t*+:KPqJ{r/oVWW2y%h<-xյ AJעM ~MԽM/dgոٿm!?tKAoq'^ոٿm겻:cT u6&R&[7pe]8U5$,rN{ɓ{{Wܛsu#y`.b.L6RꃽẔs,YsM_!#O[*3h,TH? -hqgGN]e]7y[C7a//\l׺ߝ} 16o(({o㪲ٜI1Qc}"m(PH7dݹlwSܪHHࡢh an{[Cj$\1T$M:5=1;zQ;z`:~Q1! KQOv]aS?pwKz!Ѩ|_p)Qy~(/&l5(KxMoQ@53& XmͶr2 &# P~{Ƚ}{\+ȕ(.27'}*y<a$1̷o[;9-&d#GeoSo?@}5tw;s{b+O0H 0?16{t!`nm5#PD|D߸?7d*Ivv $ɴw:-jE67qI>6f (ϸ/1XA%{ZmpM)ac\mo*ʪ?7 wۛ+7lۃamC%NȾH&1=HfKIL,J=?_h-g==z> γ;qUy1+]M$rbjjBH"u(b=AyΛ\1\,lJ Rª9hh*op'ߔ(UT $VEAqC{{^]ꮂ=z?kj 0bq3cc+SL2e KȾsB'mZhi<]z*YwxoJW=yy7<͛V&_$Kzu֤TW{_;\,LQ΂_43֞#fk2ob*)+2G&@Ę"TԨo g=-Ϝlms;*\ Zj$TiP4܍ηRr'*j QiZ+J?qCN{{^L^dKs;1&g-Cl|MKT1UTO!V$.bU${sΞ˷r]$(Zb`NH@kǕ.+kFQK *M(1SR*7 ;{v럹/~鞟/'~}%=(Ab-ʢܳdOǿ$?_~} OEiD]$P9eapl$s71*1GR!ax< ȑyQE@&\SVcEOV|:/pJj,>ѥ-_uۧdI]I,k4u8O YDexe AgdtwÆ=.e% |ZkƱ`W724J'H줻m  `H"I, A`#WǶgQ'bQMM.[iңwJ!D{_V0ycBEC1pn#2os4D_NSO= +, wzemZʦ ͂3pf]O Zmz}<ʯϠv%>>1SyjH"Q1w$OZ"?>}vg4Do-On##\: ~SuE=^cmӷ)Q撣M >˪Tk=ko {TkqkgU''N{a2%$5Pv'rLָjj:' +hQI[IP$R"Sċk99#%YXU#ȂzȔt5&+) !C)z펭׽u~JqTlR ^'ESdDXu焎$f?]w <#KUTY@$2zjy൷{(Rqgv!UGbκ_KZL۽!ȴەeܻ]baON@]e<4#fOqt9Hv+w隲PІ WRM4)#9Y.J{ KNTyx8]s}\#;׵ot֨S!>ް(U?+uGKp?mm_ߛu L?Oo:]0IQ9ym]gUicOO_WwEWenmjP[~cG?ꇰ&;ZkC7FHbROB8''oTۧE{{DP+MhR%.dp%apfF>z{˱) pT?Or@@3;dcUTcJ}d٦j N>ާbQ(6 KZV&ig2cv`s[[re6sx WȤs ?UbXr}PͰ]OcA?1 K~~}>c-._n̟Peth1/6|KC:ȯ`=}v}<>[W]4_.W{'{=O_;w_F_j?e:k7w퓯_j?CPfwۧ74{O,(q5%5Y fʶ }?n%,owp]=\UQ d3 tܭ=naޓα#ن%QZӢF׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^֧3s?O)GOtvoT~yi{.{^׺43Tiy*JSSCj%U@-Ty.#RH~@ zںF|I rI'O[ )]]>: .e/S 2;y-v?_n dHXֵ`_<[[dQبIN>or]>YG"'%DI r܏Пxܒ$>U[Mcv&~jWe hZl{Cz펺xyxeaqpeLVT0+-,)%UeK!9$n Kwv;NVLArX +;Ef"߷ݧ6[a&ZZ!G9 ;  l?٦vRw]e5򮪌ҎScQb*,$i"ۏc~|ВA]2%./Yj+5j|w޾cOrhݚiB[A,fJTB{ߺ^׽u~0n-nmTrZ :d`VREՀe! w`&ٷx.DJ׍MF*0 z_˸E 9cb<ՅA j j>IC1]kc+gTVI%efRlIH2KK,qE~>{Mrg0y Hդл䎠xOx=K]Jo;x_ j\)-2/jHU*ʨ::HK3P.IRrO[z%wG ԥrA}1;T4Ã{GFjh:iiٵշ҅npIn"-u >緸NRpCR[Efx(\kP%{礤i)iSS#4PP0A )mlqTEUUEUEYib3YI$䓒rzޛ׺u{~[){kw@`0QL,DsƲ QO:ਅX`G\sv.֑^(J0GS 5XѾǿo\ErԖP1V #*$u?OyY &OrFs!UVV:1[)Z<Qz}C;(6R9j@~W]j]w\pF|Q13FPoqb:|KQ{cGt*+,]*doVki?o{߸>5}7Zfi}}{ߺZ"/8'j=o\>hV׭Ͼ).mӿ19T6hPuOt-/.^rW@N{{^׺uWn~{҆n:&17^mMe >Z#P>Nop}CmʰW\d8HodDsN2kIE"[ՇɠEZrq%Ɖܒt'{v.x__bϭQòf}{Sջ+~#MuO·Ϭ:^gNl_y[}n_ҭ:"RhrU8e nS)xYY<|KAQSi8K3$UeewaaM4̩h݈UUUTĀ$h-{XY݂"ƁUTHO["X[ݣ},pd*i7duӬ)Y zzy8Vh֮N}'$ZA͞HK{#JaxwCeKΟz4M7,rgRKwCnH4"l@c zu{{^׺ {zͫؽ۟ 8覝<9{o5 (jӍ3SǏ oCܝqK JI O >( G E|{o|v-5kў Cܴ`_o]|RUUTݓ6ߍNK3Ai"/Mj,5p<*  %Kz8: V$Ċ{;Fs Vըr;b9 $;1u~{ߺ^׽u~{ߺ^?Cuǭ pQ ~ykxa>=ѱ0tZ~W|_}WOUxVcwN>Qɍ35Dԋ%m$R&1K'HgjIyhD][GpHeWPu r̠YB>;rSxms$.~$Ft3T IۛlwQn TYk'%@*)*bՀe7VA6}en-.Yb>GR+B1XSU`#>&>ѻB\;G,n(h~82 ̺AMWm|Z͛\xzZog}3OX+cr %Ԛ&T3 G%ɰ݅T7 Pa*̠5̠0J:J{{Ui@[)j5xXҍT$$jnm7xjvZL1$d8+-uJۏkֳIsv fs>I5~S-Nm 8i&yYc4v[vM<)wwv 31 1 L\[yy" *$Qfwc@I4uo呵: ^e%ڕoٝg)Jt&S3\_Mw.vsWݴodpTS)=擺( m?9}n,ܵrIeqX/ICn߆!Gs1Oy'u~{ߺ^׽uO?9?F,k|x㶗jC<šZ|f@e4tJ|^jAsLz)*!L}v^tmmyPd Ŵ.G.}\4<w;f8 G-5CY"\J¬c2t5.fc2T-~;#ERHgThE K+[ fI#u(J A)D RXUtt`20$2U 7;%? ?{s慿\~*=_n.3m?cu]&ٻf9+1Ի >&bIHupG9`[rihcܭn-ZD-O :J*q.rcn!TjvE+,TLКu˯͑bapGgax,U"="IR3ꚦBdgydfٍk6nP-9gvQq 1;Hļ3;InϽ\3Owy#I+xUEQQyGUO1_v'벞NZY[=YGD/+tS?_}#g?%gV_ywj-/N^{{^׺u[yb:cosd|0`q.V#-H,@쓙w>We+m\N%!`?B2@]gahO Tpn<;ynpo kugrKKy9s9'%?p.O{`/7KɥW$]ڄ[$~i>޺`8#ċ _?>6r/齏2ӯ?VՇt@q{^ؽ =y'z&>.[wn쏎5$QSR1ulcbJXRCeyS$`=^[-˛vpw-B>I 1RN g*E=s.ܯpFߵǢ%WZ*joC{^׺ugK[-=v ]WZfzZSP6r1q⨌ =;d1[Ų3Y\a| N3xC#̞YI1fje[jxѩ!8VK'aYLsSarY .o]վ;)A>׸F[HȌ4:1VV*Amsm{mXfD7SUxC =m7;żֹ֚5o-Tz+%qbBO/I/׸#.UDS V|1Gҹ&ُ u&U}ΟsM6ʋ+r`e>e}gXc=0?qF Ki$b6Se-^RPY޳&J4^K̟[Xޓ-bMW;r0Il=N3oG&N-4\'T?oZ#GUtaeaX=𭔫lYH*J#^ֺ II'h:W2zdh.ڪbT= t6E  %k On|Hb4oI- C[s? zX}yݭTYGCn*nE⨙,GPu(kv #sx(9ҭ^17A_yA{?mG][Fo-57l?ߓCUˏR<9t[\?y⑖o&?O=f9P%$C:So r\b\׭u~lzg3*Ss28vtvzjQ=YV)`,=rg4Z/@L0TO6kf4!XSpYl~ d~Gj:y)I_v?F|U\:MY&LJgB CZl?N?9g7Mu|CoĹV!YCqk&vGnMvd\ nC#I1"=$=j5e3<6xs5m*J̞[)_2qXK,?$H۶;׶DWR,qƊYI*3@$:ێ**K#1Uzٻ}Gqc[eHr+OjuH64ŮJD!4}9wKH9M`x,,Ku9iB0 oKM75}o;IMCh)Dk-4MIL8 R5<68ny6/Q|E> XG@ $)BчI}yIJfv[FjIl)FNȑjUU~qa`6u"4kQI]AT:^::y qc9C~Ncne-}) ]IWFWRUr0lղ/.,\n1C+/UoG_Z )ԭ% %U5*(grX]ewضhZ{(Zjwv *@b$ p,v}t`FR42h&Hm*ln;%(F Wc-HG7Ug`f!|4>"^o'ZHZJ,&(!ooiniߡj 58昒f8Gdu:ν{{^׺uo7wl;bXe]BvuiꚎ(Yif yяr/{A~%Y)чg/zmߝ6KhN Avmo[cr\ӼJ4HW{׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^ָ3Oncw\C't2nEGWQQd"2 RFڣ.,}E_Mwg"[La[Eԫj" n9Wڻxm.'YK(yٔ1)P^W 3wmǯ}zgS7;M ;{v럿3E[:{;M.7n|L!=F[{:0f0]ћ+_/M 2 TՒZ5?.~ZImxoA؁>)7_ݷ[.Qn;Nz 0dwᬆ9#<}/,m5CDO.Y*~c/s.!f C#\B#qIh!Xo{+y.Ѣp#a.+1E%L2)`"E}uCoz.鞭h~-W H`4$Brǔٹ%60E> !&oO1ZOwzš.묘 Fڪ"&F9m9f;*'Rd_sNO IoU?ϥvY5.No 4mÎ9@^xl 1QH9|!ݾ2C)X޾<_6mYɫaUG[{/J1{jd!rx̩w%&Ӝ{~G~"B $; fPK{:tKGW>KKMj{/nNɮz,_!ܥ?pUе&9G-9{'Ne_Dԫ#ك3,gLHc ovv{b],Mh%ѩP5`ʬ0?p}x ]n Cլ+]ٵɾk_=L>6|~rXjh2ZQ5`PܻK~z96͙D*SR)r[YRV)ůro-'r{:,QW`+Sԣhau>{>M<nxݹ5|rɅ%F_vg@ qI-dhz%.?vy%];V"\KLV8P+d`+ECH۝=Ļk^S{$iV54JWJUw\RVQvܻsg<T u5~ A + {;ON,\4!njcn΂Meb.mO)D9l=^}Yf&gZ3~ yk:A̻M'o[>Q{&]ua^Kgo%r nK{{kS^ޘ=$h ~Z*PjV:RE* @'2CO߹>+Vƨԍ@tKÕAB g.dѶniEt0Tn I! pzz޻7l&{yb)sWvaYEbjQ"̎C]]TbڹeqiyE,mZ28*Ê2go/+Auk"] A#ɔ0%XHKϐ=5݁g} 6Z93W#6u]uP T$%@;{n\zK IOSŁx$/#2!*zw s?ru6ـW2 5Nz%VNZ2:;FWo }C_{tM=ֿٺ_c^ֈ/-7.mO1յs_Kw3N?Mq/yKKKܕ{^׺u{ tݴDT3uF5x]zcVxMUU%'[UFKd԰9)v.Jn $0At(vEhM{WX#׽tU~A=UdWI6+=S43͈!(Q#Gs~}L<~ Kiܰ" AQxt1#G=r[,jpG$l,+#*;=l>=<9d"*ý۬+A*x7-C9]giDP~BB>}d5ܿyxCn{RS+(>$|~] ]o?nZ|clϹ"5%5TjQGR.I__~k[;(0'v@;y T9_t~`k^4|0Zf(x$ʽZ޻G+x]Ʌ[7N*YbbGUR.`RXU;.Q^ZN*4"MH*hwwٷn_e7i-.4xBU4# `AJf #7SPPLsfT@VIQD$Q"kɊWR+6os.wJUsuF$D/y 7_oӚu?zV4-aȕ^IܪFkg6#uQ;?euQ3^܇dL?գ~w2u^=g˿X>}IлuOrJSS? >欿musz_k1}tR_0~R|g/h*F\>7^'t1Ѭ.RH{i#:: GYdwMx}إ :_pe'% r*\j. '@)]ggW]?d#`'?%cqw]ոz{P^cyo]כs% ͒,&'FtFV&b(,B f ~ygly!\:ƋS@51*3 tg۷0n1;w3$Q#;A4,x('9_>Pս*vK"uc UE]qR9R=\~i4,wj '3❩#tݠoxhAD -PZصڻ %430(3/m=a" Sp]ϠAtS 5 wOly}iyk),nUe:dxH_&-DB`&mɷ6 >,UXyv$UՏ}%hݬ Wc]<KA A #ؔEGD\0zIr:û6 Zt3ꤥG*c^7@Xa{pi[n2 ,I 0W`JJTz2ٷ}#>i4ZiƄ>ҟXɿv?>V9?_j=q['hnvlY~JmRۣrV"L|?t*}vg'6+..7i" wHPz#Q&)R2/[ߺo;-23 * ()i'˭dӮt`~&T|l_{2>ӯ?VՇt@q{^ EDOUU<4QSSQ"C<iBfbm0D@Y@$'uxy]bK3$8[־+u~F{M,: *ݳ\NUyfj('^?dQ<إ|f6,'z *4 xHG -šҵ L׺i'h[č~#~Y0}J -1VNb?ѝOc|Za2+݁mIQ[Kt .z&Ixɦ4ЩjraX)1"_yndBΟRVM 20R#mn oll|ݘM͹b",@QU3X/gxݬL;ͼWf̢Y;ZgejLZԚ 4?%Xg_vc~lwBK/=EdO!~dAKKaWriߣsRekG⹯ rgVU PUcQ3z,'}Kau%GDY#Y$::8GzeWR*9#*C)ZZ|?ݭiS0;!6's ;L$u G#ȼ |{m[) [5 ?dA# x׈ vOo^{jmSOYW"Sq7Cޅz*5Fݸfbje5֤՗$֟OY*܁(~JOqvN^"_!Z-xI%CO.Hϛ%l`w 3R;t?xvz*zJ:HDD*F8J ;x-PGJ*<\7 ^I15,jI>dI>JMu~i/'ɎZQINyvDGJqJRjJ$8Lß}὿[ovn^?gQ>p%D*7/{k}wpM+#58YE'ԙҫbe}mo߻1 A)f ]1EL31c>|˗,m{JT4*.jĀ }ެod dJą9y;g:fm=.ٛs Ixxtx!+(k]}ra .mjV'D((,xRrzw-i&]*MJguwty1K=bF![|ouj<:R";;XfhŜܛ \ycɿ6RQ(ĂG. ~ jq[WV͕;TaJb]OU%ʬ C_ZDf,$~4n Ы;ǹd#K&‹ygxosGzν{3;4,w^Ǐ@&yPd{{íĚWJCOZ~9W]ṛU8 uyῲ4xNnޗVʰGP6JM! Un| X=u  I2 \O4R[mD$\yT~l6{K WHP? rCj45YJ*<2#c5WQU*)+(G,RȌU ymsoyoݤ,R:0dt`YYI *Au=mrWFYYMYM AWkk){;dﭫk-VxCrjL9:w|1w;0 ֠[aGG~sfi쉪Rje qkł?SL{/-sX]O_8XCz@Xgw9!EЃ|0z'W:{;/L1.a6XTHMk،r-{<ަpTpC"T)`k{nj Qm'u䚞pZ*H/uήM44QQ,TI4" 0ĥY\UU`9>$K+UH*I'Nȏ#RI O1ww뽩Z emtvu]L2yRW)I"?뉤K{.^eyn}J$ ,<@$W6栐tf/%}9up]vhH)/Q?)+TG߾m_臧>>z>k/'Ũٶ4ꧦ~ziNߑtSqoJZ|~}nt;%[InlyJE>ؙ:݀5z[){=\TϿ-_%;+P$M L'L?8?mr~ nc6Gʯ,ez߳?}o=)s8Z4+>/Qﯿ^MAA2ѺpK@tQd1Ք #eE5LD`AWV A .$YbWF ! 2$&ki9)AR]1fN"=ǂ(o/ N)| Mz/mB[;>pJJZTVExkܷ-_M^nkZj +CJ)m~e^MAA̿nw;b~߷߿p7k/*ՎeuMo;-#v0 C$#*0x"x,-U"C|Fjps/5g׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^׽u~{ߺ^׽u~7es,F ef:sH$y%*${eۖ*Aon$HR8K;UPYZZ\EceK4Ω ,B*3$u?w'a}['Mj*xMX4>Rj\i$P9&//݃W[EjjX һ<T2xu`5eȖ7qv„aEXb*>NeVXS p} F:$Sek0 mc!Z\.+Yf`,MSȐU uV 20ٝA֖sʱQ H`5@ #x&%7dVx%hH%H_?@vpTuJf꠩eXs{K)E]y?N~ܱ/-wQIʰIWq!r4|ȼciѥf28g? l;")luK$j܇f]ݲɽ@7u"?L >µz_gvk<|0ojt]M\63xnM<a_rN߼ wՄ'><wzxoV=Xzn~C6ܫ۔[&mEOU=|j;įQqd윬}o=/wY7 {-CRME$c_#^igŴg;Jz0!fՕ{ˠ)ΥuS׻ҞdWn9${ I?$o0H*cv|.NFvS V}d#i&g{&}"μɪ_7#4G]u\26#Ο14O;Zs$sMwzxe8C?ay&o9}SD' V#1T\vormV|f x?J*zjT5z*2O>(W%nRm5RȐ7}}4=xE1K[^LQYb>}}ܰkiUe6pJpH.PdGR]1l( K]̠V8B֣ő ͬDn{yܙ-ݼOf3Y1_M=$ hhRQӢC`$h=𳚹y|K˖,HjIUQEDETj;ųign4 ~'s仱,ēOs^{m+ghVymF 6+7f/yV6w(M>[7}o}ybUܱ^߈},crA" '\//oQ} m5;dHXU4:Yn??VѥIl0 6wbot{_r1r^="KR 'iNb.7iJͻ0 ;Hv#jK*$od4?;mRPTZۃrO /OQ?@.lڣj Y©_B%p擯.}=2Oe.*;əC&G|"ۛu홪ܛs-㸫V$Kp檣tA<6 Q€=>~ۯ0O}rWVPFg4'NfյklְۥJi`$"POOV-i?o{o><7Zfi}}{ߺZ$gܟr/O~omIF/-h;1T4XWrv/qޔu+MGCACKZC 1QTP@b_s=ı}Qc4TD@HTNMn{e;;34d1$I$kՒ*җ{7^~8ϾwNŚ+1 U0GѩnlEϼ9s~ݯ/aw s4hQ\cs,m>5ӶZZCm O]q Ehh+7u~Z^eUdU{S}UZU@]ߺ^r0n@A;s[:,\'d* G+?w?M_[s[:ɷj 7.ݹ7Ǹ7^jH)dlO?J>K-,о7o?xos^N@_yW[j+@0:osfq;o \{!'2_N]l Ou*EUk& ~}tJls:aGs:ǯ]Q[#6K b|.ƑBj>< 4AQC* j sS-㧯}upE'>w[Sl}\H;mnX+bVU!ѿ/ǚfdsun2O=~) ]FS_yYlz˘_?̆/D]mmk+,?.Ͽ_wit.tꦿ9/[Ahwe_+n?Zu?]d;{zrOY[~5glmNS1җ6M`x}SvJҡaP,*yjL?O]a.X9K yg"?&6w-pCnvܠXpE>?Lv6ntE hsc]1 Q cEU@g\Yw pu$2\#v?6bIzza>#twV'vObbe]͎liǡTCA(u Dv0,\S7]2L- d&4쬢E%I$T/\KμmG .K@~(`RFVԂD:** (%Yݵ;K1$rI'|wyH '_`뗺"Mdt7Fd)b`MC#AR$.$a<uGm˘.q[I&o %{8jg;H{ =ܭnI۾L䴗V F$dI$j4,LIDҷ6>~Yr67BrvG@ muB#)3Ă2҂5}X{wm\ڻej([svo;Vb3T/S͵#ÐyeϷu$ QʅWȕcB2Fz0wKݓtv1ZJDÊS0oZDVWcoޱJj2}7Ъ(Ƚ%MUWN"O狞ybrK˷` d֠#ԞA[sO/Xs-S@̟j1d?5=[P ܟ.sз%}^?zuDe%3]rl,迥U?mᔌ~Kw]7x&JI@ Q9~-=yܛYӲHF 猔f4qJ @/|6{kq4wonU"i^QixA aq6_cu4^4x' }"h-DYb͊Б>G:U y(o]x:Ϭw?[xPT?a~=@G\-r37ڎY/9IIQaӸ4E+N #3Mj=GM}:?I @7GD_Co7o~CKKNIa"r<)#'=UOIY:0??>6r/o[m@u+o?_^׽uwJejz{ a0NLyy F$uiuO}]Ϛ]sWB?#y5GkNu_+5aU;GX%Dq鬌\ߎO^Y퉸Ւ>wN߮6_TfdžGdʇFdk˖=gui4r8eb<` 8mɺ 7U< r)V 6.ߛ#gobo=^=54n,D9zU5Z9^[{&ߙyvØ"-AZ'eQ\W 3ͪmz.MdX˺)6ǖTu_TP&CNuETvO<-kqUryZF*ިa#2oY-vD)c8k1vLvY|^d!bUq5hc7a{>y!T9G#qX_f啦g6۸ 7T<9TUv Guu']Ƹ1s'`2yX(zIo su>^4 [)Pj#M>fCZО|wɼ׸r|K䊧O>RFVEb=P颒Ge/sQϹv5\Wjg2@#6>-ܫ4[ ?ltԇs1%~u9ƫ z_[ ʏxy,{_Y&N/{;2e:pg﫦%Lu=+$F~[EU-PYےS4y*B~it~]aw~f9no.9 GVaS>?u{6s3oJmd&-2+/&_iUTYbȥU0$;>ߋݓj":hV1>mُ)*5!n#E׺>ϹH%xJǨ'$b+3HVݴ)CiFn"H&vf=nֻ ս}mDv6mlXO-.Nfg䴌I$TPVm[ $ ܂x$I\Ǿ>{[I;G-Wt(Kobzoqftw\d˵k;Jm}E% U"IzDRSVWx\#źr_-A\#Gnq"T-A]]U1ՔU5]-DM$#G.mdA$S+# #H#tbFсVR >D>i]m7NwgTVM3s4VZ5imֽ|tR=JMDXM3SSƮDRpc%=u^K4Q9h RBGYC$f? qSiiW̠/3KF %-@[ow[sn<ºL*|2 a5ֳԳտ::W]羃"{/eqw>J ;e͗EO%I295,e?ͻs_*|$ܭ.-L4b@% 7aL70\\* iMWꡦ6,=9 W@;^H21P Er*eg*mvú[)%fuXrkZ+7]D导 Ir #s-yj>*!Yeܭ/\-$v?ˤ"UR#}Qe_ueFR :=1Ȣ=[k-*lv`5v颣b`/OLgYx.fNkd7 m72HYewOG Iü_Zn{77 ^I#WxY$p @pu  X*=I,u1=IzcOG4wD%pGQՙ P~X+cqOD_o jM~_ޏB$>6,h1Q*(ª=ؒO\OZ뎞cSFܱg ;jj/qO2] rCik^NrJw!PhhwTy |Y*Dt1Kw ξ9)|7o~7:}ꮿ߯<GM lI9={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^׽u~{ߺ^׽tW;wc;;w:#f-Ӿ*n;I-1sY^["~ڿm& 2t[4SdPiQ(zy/qyTö5+s00|iWxN j:׏g O1l| O\U;m5JŽ$MCW2Tg`gJZ$ KTrO2{˻*6ٱܕ5Gq@B _G1Tw_{q%HaF[dl iޒĬ&u]e))++kj`Q -%:+f ($7 ih,0UU3$ITH⍦"B3P2I iտiQt9YԛfCSE[ٙ IH?լBż?uvIBsV[s*)od,{0zur=Y :j\i"~fj#TT}Ocq.pM-{qvW [}Hk?cE>=?! a+ۅW*5?$ғzuQ~7׺u{{^׺uGb(qo}-<7?ᏬjӢo0uHù?_%_mzjSҾGb(qo}-<7?ᏬjӢo0u:Yd:O5d]͇'tuN׺uVCEkߥ#zWsVЭy5?:'>q{:m%Ym9ҶOJ`0~9cf&Uni-5oův=.[T%SU2m>aCBl/vHB?>%ގ׽u)=Dv4򶥢beZ7#~q̾n#oY?!A/-q 'w %w)2~#/DO1u9u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u?{^zoENW=aٿsQgU?wok}7Sӆ?潯]dwSՆU|P}(Z)ꬣIIOSygL<378KqrIسj''ZHETT׽}{ߺ^z 7vW񏷭n*_о?X/\2Q=k5쩶' t{OJ{Mz'-&K.c u{ߺ^сeQYWMV//+ozN[yVν{;}g|އy g}_]v/;(o{^PGǽ=xqrτC!e͇Gy ӎÎ V}VN~bdE)Hϣv{J%Mp@ǏL+sXaveI߿Sc92QW]O&iJ%jrß: **渀HjҢ6u5 W ~m|Ĉ,m)<τTSi P$ 9ЬK Fy 2Ax'6 Ξ|:P2PB3_N7dWQ=YzFco'=BhS=r{EFc!sr{d-d<dQ[ ~Ri3m==E=-GٟK\;_-"o I< ^:c0%|BāzY{K⏧opio^!" T ӽ߰wh?Qhkc60I4XȚy#1'(ۣ?+Lq8eLĈ ʽ&J J~r\}rdk}nogJIm#Gpaiklj~twDjO :IzlYji1eM]ZLrdqӵ&Fukhep~O+,.X+ 0`hU`pA8I i= #+# G ovϊ4k;=m$UnxڢRto~|[o~9ٍNnZN Ŗd? &*O\t)e 8~opҐÊi$aw^2ş"4:ebW; M9HS(0V>U}7[ [[fyMeN7yr}NhZd73O词(̗ / MّL^f?g!o|ekJ!bkz͂W 3,j۟rt ܧ7DV;-rhrZ ZH(vTF=S=:rTf[͕pU-ʨe V' u{{^׺ wEYF>0msn-7qGG ?{^{̄^t֐HT;FX m<{ 7k@8nf}U#E:'=o|NuFMl2=urxە :r8U?َ~sOeWk{ v&KI~>$1\"^>^l{bpX)U vюl-"IPf QӠiqI+2l͖*y}9חs7`e.Efhҵ,D#,p14&9ma62ԓAB/"^_!9 >cq|N3-R%T agTV/Ms煊'cc[z_?C;y=Ng?[kV<{OcauW[;Y4?k.mg/ܳ~dIcꄽ׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^ֻ>SfjFb㰑mM-!+s< @s{ۇ-r֖0HK#K6XҴ?a}˜=j[dWrLʃLS" ( +M?pտc]o$^MrOax8?~ M%MÑ`4r>CoqYqظZ< GWK^a g?8Cх6~ܜ|oq a ~J]ݝ 6% ,JR؎G|_ܾe߷r$Yo# GC-`q.ɲڸr/wc8bic(]M?}䟷afo׬ֺ#H՝jf'j*,B'?S ~v*8W9W6ZMA%,fdT?G_~w=oq.}n/T*UnCY y{9w9fbEБhŘq"A#/ڿK÷?y'u~:êq)}6 qpFF=kCFXw!VbxadNQ5vr5tD^DjC Oa^eA ˦QHQbϢ+'ýrʩMAalJewi>^-p^,zUR?ԛ7Pwn`#!oj[Oˣ snϗ]6>c흈YM[n|8TtN_R@ X*}>{<{\Qm5er41$R%$ cH`ifzܥ*Hy5 HZ&=Z?:Aw?Q3οuVXn?uR"oOo/}uFrJ(=LHR}u{?m|!`vbmcA2[{(]{ߺZ7 N+9Y}oi2:+~=۷i,W/X[ʧ,$}quoUw^5|V(@~>d^׽u~{ߺ^׽uf;FWo }cWuvn׽uF{>.n,F]m4bkWf;FWo }cWuvn׽u_ #{s$Lzl?G?㣬t^׽u'/Xv_,Ͼ6?׿s*ooՄ{ɮ>9'\/ m/:o{`̿j%VèX&# T[}v6}^-qW zDZ7rpKcM z({{^׺u{{^׺u{{^׺u~o~Ï[;k} }?7{ca,?G߭|pۇ׵{ju{^pGk`{Scj&;smj6T&[l]C/f(oRL<[\o͛xKK 5i[KhR@ȣO\4`*"9iR-G2TTPv.יO[uP-]#ȫ ~>70dpEgVβSUBXeǼ\{iͼ/ivBUEEUJ?6:l}?:wG-t/{(#!}-<x̍TOM$Q!a%~u{˜ @Y2`?-.m捧!<$1HҴ CEGl_WIG6cil-rcW%h^uW09+kn=+hM6 \XZPH`Hܡ $JTӹ[o<͸a=Wu BF5PZ'苪rJSS? >欿musz_W}q˖]EF\nlJEm.{?uPs]5yC}mژNn6ai[@\׺s&;YgBXi2CQ+)'K ʿ,yl[Inw>cꥣ}(Gn.۽>Y~D[Ƭ?ڰ*~` {:~{ߺC|UFk,e*K7wSelBQ7OO,ܩuۇSulnzߘRo&v _ 騟#">*Ϳ/USұFjaF5d;*wMH}? ~'yOCP ܟ/B?@ow]ոz{P@ʖh5=/Mv}J.K"UבG=Y%68ZLx017?p,>i}ay5IY:u{o!?گՓo[APT}'Z_eq?=MzkSlO@_~.ȟ=O;ZMh]TǼ+zu{3ʣg'.ޮܭ_>^Vi[1Ҷ?[덝{ߺZw||&j>79_vtQ=R^׏xqqG?mo߯9^Zz9{ftl}=EQ_e_s>TM?o̟,]Pco]MuvMW'|{&\S'Ads9Zh1xJGAANUs8ѝk]]P$TDR*Ot1ڡYYQqfbT| =w'ȜɜkM曵=OPffژM}5.=1SpM {n~$y0BRzțf>JTSQ2=w nٛO~mt6&3=)Dd {7Upy3l6\ǶEqUSC3ҧEkMUA,{/VUoNYV_('UA[R5}:Xx=trdXs$|u.ػ ({cXny@oyz'ZTZKQ=lC 541SAi0CUU@UU,=z85Uu7w̒ĒI$NI'/^/eW*Z Q:.68JʪJlf@}qOĿ׏xl_Ut&,n _R aƑՏw&T=t@}h TM+13T>7E[fi)?Sdt!p"`:1$[v?%u{{^׺u{{^׺ֻӢ|!,R}ee5{cs6w6KuxGxѯ̌}<q$}m?A:,e?B+!u5GWGe:_fvGOv*7n5C& &*h*c0}Iv +~R]d,q_^x` 9T\5W [oR'̄.tA#ၘԘj{%Mus?ta?]w0Ē/KW[~s]#~T{)s&ݗP xR)x ,FtʈX7̼r9lp߶،swKW‚^TnhD EwOyo# -b-(Hh\,l •&_(ڻ#!Ԓ*02Ԥ_|de*[`r 'cÏ^z_?C;y=Ng?[kV<{OcauW[;Y4?k.mg/ܳ~dIcꄽ׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^֧3s?O)GOtvoT~yi{.{^׺u{{^Lz.3y ֧w1Jj )Ϲs~Qw6.ZA$#L*C f2=_k}1^o\j&&VY<:^/3O;禳}ҹۻnRncfUhE]Q/S=s#"hE=}["IIJ݀I :V@Q$eS&c}=9HhI!&x—b,@Ī.׏5\f|9!Y:ny+Yb-!xݷ7[$Gv'v%Y';+KM6HE5T@:췥{ߺWن5F q_@?wJ8b7|xڴl}si̱o0<*nLݮ2m9]2D(wn$f`97 %N>ߦ>sDJxAι>)D:u{w7 ƍ$;)Q ,ąUPI$ >o+TW8ԓNe(3} }U^3v m*6?'1U0k": *;y l#gHJ[踕Kc%t1iVjWwi Kw7eW6uξ FP+BUkN_يv)>#?e!`H+.;)S/Smt[Ge ?"RͶn/6RȒ'Yޡ.Gb(qo}-<7?ᏬjӢo0uHù?_%_mzjSҾGb(qo}-<7?ᏬjӢo0u:Yd:O5d]͇'tuN׺uVCEkߥ#zWsVЭy5?:'>q{:m%Ym9ҶOJ^ލ`l"oqe#>E+-̠惉&IBP y׮s69^?:|=ѱ0uZͣvֿ{?8mkG}?Z=Xn^׽u~X/Wco:74Jb%MuJ*.SFF ꚕRPKIouro3l;rO)&MTQg5YdE.P oF6n"5 V,hUm}GYIcꩫ+*JJT0I#])<P%իHԆVVVV  ArheJ*hUATwu{rJSS? >欿musz_R?˧_!%>u,:xqgUS-=U]-SlW7h/޽vm0I?SE tl]E/'GK[޶iRR^ՖJzϭ}Au~kz!}OܸweXy\eKGp_iH>&>}^ [(Υi]]*sݿ0r#ruÏٙ9{I85*L5#XU7)u{kQ = s+>8GELdd8UEUMISx<߸ǶW{>-dYltј ,#I$zQjw~|orL|n7wGu-!p2\;{Ͽͪravȟі8VA'5o~,VQn&"KkSO!O.C(FOVw9h[>l?uVa}B럽_%>@o+~ӧTn_7COmln(AO?:^׽uM>݇Uz|c||o[? /O/ ?'tZ9*}kҞwI<c}KI˪=eo^׽t`~&T|l_{2>ӯ?VՇt@q{^N_Y"?Czo<5G];~n'}[׺=n7O"^+_\0l w? ?kpvnxoʟ/r%z~ƓG$R ]]tݑ8u Gԕ`Èp_oNBUByܻ6Z&2Z~L ?7[{ݷ?V4%ݪ}ѮT44&Fc}vE}]n p!Ov/&ZN|=)t[_!a[e{I Ov6斁~;wgW$s4\hT0A'5w5ٟo2\ Y?=*=tYu4n=W3wa*6>ĈXJP"55u32+Ϩ߽=R,19C=WFI!cZdA9GiV\D-~pNQ 8vQYFlIznŦnfrm9ىwPD>)d~\9v嫗sLb% M 1>qRӀt.S,pwZ !,(d$fWI-5Y@`pLw;mbbrC,Q>}i(+BZ>,7Tн3frmyU]+fM q~%QKX}^s^{sA q![53zZ&CmyB^{筳R.Q)V(zZVU2MU]S-mu\VW%Emu\yYYv&}]\KwrSwbY&f5$I''˪GP* (Pt)tN{t+v{,t7;j2Tl~C8S9fĒJa/[?%nw'1=n쬬V\GC`,A~ֺ׃u};m7n?gd/;pPcqm,X)&ْ٨%'ߣyy#hw PV5_ y=t {.wv;MIBXfuo_['>/slmd{ng3|׿slmd{ng3|׿slmdKܝ\~Ư/rXglMSҤCM5gE, VZo~2HQFTҺT3*4EjEYn k=fWhmԼAV!VBMwe` =UE_#C| cͳCeodw޿ ?U>߹oBx\ϗeLZx`dC>FI]Q-H$er,;(.ň&U$zUokkh-"HT*xTLTA!V\K*~I$$9eVsEO[wvdÍɃ]_jXكz= ƳQS451r#.xGEI ]uihAÔ'Zі22[~|Lv;D'Ŏ`C! xU c7ܹ8&*L妛#c)ZTϽG=jrB;rJGSQ/ujZXld|4g$Qnm۾8'JE)54 gjU7oAĈVYn<1B:7/D}hO^ }Nv[fg-sbcMv޸mHܱc3Ըb? K[as/.n{kR#p>@us a-żE{۠}XO?~PUUs۳QLH&!i(*_&h[+=_w9Ni=ST…@o Y T2{1Ɨli#h[$\B( {^H]ױ1[K{ aQPp p,r೿%EđAثiwm{:CZF_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^֧3s?O)GOtvoT~yi{.{^׺u{{^.LAVWHUXXٛH5aߞ^i@Go rҥc;^UԚu }m&_}Ro!K弌%Rzs:^ֶwS|a2yޛcnbu?s)lRR I)jJ&XG߇ڮd˰ybYPXA%b5n\:-X.ZitM<qWkj?/|M Kmd[#wܓAI_q:/z1p*,:$ |w<\_P A ,j2H$tM.[a~+`vA$ g {OG;M>?u-t O TIBGHѵ9%)e& V{Z@(hIFnc?=}#bGȟyF `&"0JfIꍡO"wxLY5)aDŌ0F I\>lpGh +#@R5$yr"^Mٕ o | TN/H>ca=yTxy]NbŻP4tnܩӷx۩wP1[25Y}M#_[ }R vVZi8^(֯ǹ"O6wi!RF1%¸w <:'%y{C۲,s0p\G_6d+uuA1nC 25x̮/#M n?%jZ : ;G,R)VRUi,7Ivx'FHCtu`Ue Pŕwr4RJ:…YXAʏ){O7ݟ|JɦNe7Y K&;6Z+LQ֢舊cOz><ŶoXž srUV qI..) O iv -ܲlB#=(ГW"+7=ރ?ѝljFe0u!3A<o$O=m{^bpH-hiU-Ծd:k.}M=ʇo-_PdOɀ#{Ǭj$Q0H,[r~j[}oP7kF_*THx=Zm~%2OGoOz/{ =onMKjl dlDKM)rJv4S $578,{ukkyipfuHO8XMʼ[|P\!UIB54mpF#za87{C۷obw붢xfE<p}[_]p.`u0+xdftmo/}^y=DQ!O?{mߏ? vhiɊ[Q+n̽ =\T?ȣ }LD~~mGgceH$1<Ev`UbL,_?d:ݖϷr]^VuBUVfd12UNJi?o{>[xn@/:&_m/s{^D|;]oY:hVצe=+w-'"ysƯ:&_m/s{^CGs_}I"GX=ν{{^lOid?_Y}>l>U}?nl ߫]@}SsN_7Ӧ?k^usx+dNeWVGԫ)abETG]Qؿ?`ߌ[JuwCW-G3%˲Wb7멆\o}ovVHeTkݢ5T27C1=r#rr_WWV݋^@@ #V! s!GGV&zE/^lqm ۍTfh&A2GQKQ,̉,l9cc._~d[+,m*YHWG $n "oϽ/"Eve(֒7E( bI ]"Y)^MwGw..: !^5 t15< }}${k/sr #aSQ D?om'C'\qRz7yi%xš~RTDsE$GBx=/|pY766TӾEЄsE4^O04ݼ+H]~Ccdu}VP2=usQ)$llZ* IZe*0 5ê98Kޟ&t6xoٕ5)5/hU 2@{c=כZtXT\10U*5%-Q׽u~{ߺ^׽u?{^zoENW=aٿsQgU?wok}7Sӆ?潯]dwSՆU|P}{ߺ^׾uOU4~)]EtAN&)'=/}?wIdϓ]\uc%2K+ܴ;(8T~B)},u{rJSS? >欿musz_k,]YCw\yS`\ bj!ʚr^Q9&0ۜy"xv,5Gu&N12I&;%%>&Sn PNĵBmf( &=ג_v꒍EY-3񔁩:7?yo9!)F}@&mWxFW)!):CaMEO FCխĭ4}޺hWJ1;Һ֔DV1vPVo*R`644"+=Eg"}{ױ]As- ԋۃI3AkDt43z/oZH9fA҈j[To&rZ:`K]Cdmϭ`ۥ0Qi*fs=~[-['fyj$:؞u97-W EY夑G5flgG9yu߮93\XUQQa#EQFfz$?~Jb O*Tʫ[{)J_b,5!Sδ1t?}}؇lﭥѹ ֶ 8֏p$ hɐ1R7n~~bE#Č4M)A#=jHԱAf,ڝ$'yvbX֦%c%? ?{s慿\~*=_n.%_!.w:~hFhst4&KI&1zѾ>OY}Ӫ~{ߺQZZ<{vLxdQG[mr8 B+ `CUDC ^ßH\mQed6xdg_[G#U?tI:]CwmgP2\7mzES5jOHydJhU6F/O8KmZxĸcy&F֚n.R6--%Y`|4@DYc+!TCBtoyE^ةzG#ɤ'ǿVoYG6j?=-n r% p} WJk ޶i_ ;7=4qa>ojIc{֟Ա'_E) 1ʓDZeϘ-.]St΃I㠆[d#ۗcN/X@ANueM$K$ld8,m]UtԡQ2Q]25͂~{U̞s^ViouJn6u~i;G?c=MOը뷰yyDK}{ߺ^?Cuǭ pQ ~ykxa>=ѱ0uD|gm pS6xY2]uB^vu~\_q{vRN+_ޭ cޛ&R/5nSkA}oJE[MW-bFv\lILGf>TzzVg^׽uM8.It$9)1PBߔi^.o߿~{iVXvXstY3 ]$nA֓oږ>S ӪeoVKuʼNU> v«;:njۋeO45Xn[cnO>TߋcMڰ&&Ė|˙#j1_z>Q].n6yViߥpBL(#?˾{{^tZ.T7koXc?JZ3>32VYRaS>9´}z4܁Q5l p"Fsy6sa@'L,>a| <}z|:",Ԓ##2=X\*C#Z~յade=\$Zipr1)X&i+Ts{Ocr}Y m*wJM_MƤ QByp+E 9kMZ؁L Pe,FDf&?{ꍍ˱6 Zd\Ujz)&Tt$Py1\s-r3B'],82j#gL25ICʜӽ^o̼1٪"7RU< ZX#k+_[p5׾g|fkfG>w&Mɱc"JQf0VyH-}*J=EImVVh0tϷk;nj[yW')<s@2[Cxk;57 [in,monZ1K[LXX[6ˏlgZD5s,)mlEҺ'ZzW"}KvW쎞ڹ_vLU~PSfP1h!iɜys f"ʤiy) 75&[H[1QE4z[(|+G%l55׳5,{yIB!Y١biIW)3X W_w݃>_uo G x Rj= 0_zwu46{m?Knҳ`)GR^Iʫ;w7W3U*k3K`|z̜Hmh#V(lA l$!snٚ´~;)!"# R+⼘ gVD/2 |}#pSj DcY)`VGtxy}/z|m[0]AƠ O x]@U9ȱ/;_Ok>sk!")N Fcj|9T!dmpt|ZGݥaw4êw:OL_%1DRK*dU->}=; {0Nkq_^!Ku.K{]P .H‰9 ? \V5&,~J;'3+%&B8R"}׸ i *GR>9M6D'&CuOH? ݕb;)<8ݳn dsdDC4ǧڍ`ˡcZKw;piׅc_* ߵ@n[b\D@ґ>ka޺pu}?lfp{'eey*"98xi(( +$)}ӓryBklUM$l#,! UQ>r1rf[$spCq93HUt9c}o׺G}[8~L&N6ꪏ252DT{ky} Đn %ďF^G6[&reIBE[yиc=n?_ ?*(UziQbHqw[(BBxg =(ڹ7?cѭ0u\̣9~n:pT=͆c;rmjHa%-U+"OvA/1k]#AYU}k6!|hP&YUdb:$F.Bܽۅ)nQTDmpUAfAWG &-&[l>g{G)y<Ŵ)Zj7Uc$G>{/}Y^ri9T` *H#s"_[ =Hynr a#Ѓ|Cie]v- k̘6udXrJ x%І:|/2#_oMz/Ğ݇k{(,u,R6CLF'8D"qS/U=/__H%*!_MWKjA܁(uAfin`5A RջG=Zυ8Ȫ&iVJf!휺**DӋ|Z7Fooyd#,`zybՂJ~8H`decƎvߐ5Yc9hRTY4+UuduWGR++ 2#aPx SQ:"Uϐ꒹6j`KQN[$܁mpnd2.l-׎xD9ÛD"n1~m#ˆpt RQc颣tAKITР$PBT0AK,hTP=}K4fdI?2rzޛ׺u}M%o]8M'zO6}r0X?`IEpӏSZ:U? ]ɭ̇՛'O1tr?ݥ;kaz3j]05)c.]5- *,(@/pkϜvބDL8e\4ӍNna>AuNv?\;^nn:(ؘj!&挤"9~ܭ4Hmt3/e? |2%$BF /. Z]jb\ERhXHcF8WRA׽u~{ߺ^׽uT̃mFmLuVr*x䱕 s#3Y<$Uq54D -V}>~l?(B4m]~6eHP!).7sy%>d8An?]#ZŬj"Ɗp%f$I&}јl>U}?nl ߫]@}SsN_7Ӧ?k^usx+dNȮ7џwrQw`LPH=%HB2ƹ,tH̷>ZvuSnM~w~43 K h0(\G$/v}۽)6 ]DLR@IQ(ƙ/uZV퓁>4;hJ5e(\b@SYeEhUe#s9S ~f勔]I"~GSFIdt`U -|r?/ []6FLT:0#*C) ؇N{{^׺u{!h_;1͎\Vy]ջ5*:ޱWSܬ:`DT%78~_y+8l}YIJ˪=6Edn:A:ٮ,q{DH;qUޓ "Fd.9=go^׽u~{ߺ^׽u?{^zoENW=aٿsQgU?wok}7Sӆ?潯]dwSՆU|P}{ߺ^׽u$!yji憦i)*BC,R*C+ճ2YIAꬨcCVR(U8 'ɝ#}V8dܗ1wێEHiEUkڏ׿{cߥQHEU*KFYEbN]}mlNɸ9xj rSlV{ߺU5'-}YC*.[qWzc7FsgC7ߊlC`bum+ҴDY:gԵH*&l'mnrMTS嶪,ֵKJjSUIQ?u=gدȆ"dLRC(fO0OSv~4kgaU9UCWyPV1̪Qb ?&.s/ArVF-$J"A# E ]Rq=.ک?:y%_L 'TK4<"pxy^ak _il R$-R9%吊 1,QGok}=Xm>,DWQ$+c+V5݉m u#uuCfO26r~3\?oW0ʽE[ ~ |pKN?Q =bI?C,?oϿ~_t{ߺ^ #Yc'IaUKݕ0u g[RU,ܢo}C|4=}*)7NĦM^k/W0dPU1ч}9מ7(\ֶep* ,֊%84).h9)n{)Xn&k (e]>6fJ6]sQ'^׽u~j쮱6Gy|zm]릟tt[tN>&T|l_{b-LouJn6u~i;G?c=MOը뷰yyDK}{ߺ^?Cuǭ pQ ~ykxa>=ѱ0uD|gm pS6xY2]uB^vu~-ϰ=IguZuvWŊq2s㭥3?)+bDG 6L8&7#!$ϢNe>kY7IWAu!$ȿQSsa{n-vݘF֨3xڐ9eFw ~Ķ)nHڞUVqcto6mgEŤC" 9G)?3Lqbv?T8-,k ' A&K%TG Noec7[2O3 (HQI[{oX.H_F {~Wggu `no%INb~5[;=9v;¥BPy(`uھ]ح9_yj+#Oxjݵ9,zF{ sӦ?ڙەOEoGylT<(O{4k݇y W4N8tqFXY3[HeS 8Տ[uWaag6f6uQD%Y3Xdӏ-;A0:0 菓ϜSn-)"h،jGe#+sFwʼ}w, iM^ H=/:!RM4 1+qEkI$TI&r}#C$*$h$z;@I& O=ig$]<7型iSdm pGW*tұbO{jh'5?Q 8]X?ly=yvV*kxCOLSϟ01E?8(y׽tf&|{npϘy("v&IV4U<T}nc&[IS u2avL\ q6}ѱ}ۊsmL8-<dS=⩥VHus9Gw ~f{PUMRE%h2#Ls?,onV挭7GRUAA%胯{^׺u{{^]{ yxES:Q-D,TdT(*%f4IQ!i'\l&?qn6(УWJ‡(0cJfe_{FǾGqnxo=3>)>"T(b\S3r3m kB3H[ۚb3ogW[;/Hm- 6:Q З SM(ktTy,me.C!QKYGUNZ9b6WDbH }ͽwv,Jрeee$2 Ai0ki9#b 2 ER]{ߺX <1L4C@`G9F0 ewCT$] P'0I ,h 7'J9"FcG˯3NI?<ݺ^}1/`^Gne<ԵD`HkLdAE{Q^tm92ڮ;f[ښGD *-'J">|]kU%?u]m{b{^Nzqt"jFٵ2l)>ⶆ.~r -${Nd}ykX7[DZrq YxqPf}9V} c[ТA:cS)M-3b={ߺ^׽uB._9G:9wY׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?O.ݝp{nWYRԴu9T؝U+KQ(1{߹:"suv6ms²II]Pi jV7a zO)s/9 r_\GE+G Q΃aÁ|.O^d飵Xox鞼c_ #>ׯ~//hk 3ן]k»cv tbw65 9Tc64UG3*ݢJ8wY7͸otjX뤔dR89R 8;2*p|%~é{^׺u{{^׺5avĭS9&ޝm hP@2F #Jآuu0ΉwGoOuiv])5i*b"J?hcmmjA*C M lLn]~/w-5.P*(Yjbr bDcY$XQuۯ[i0m14 %,kRC)Z \珻ﹼ+-nZ\ن4G F0G)b(D%XdX]qp6#A$V A 0AP+#pAGGsn{g\=݉6~QYw#o*76RhlBwf<OͼvW3o*/˨N::yoyy~JL)njRhU45Νfr*pd){by*wbTkcp+_|iɱK]5huI"G@-Cu|J盥f9*OtG6ңYU:&6_*F/ٸy=T[~$ʽuoSzAG5,u yZ(81}1{wOt4ڥ@2=a(e|VH/sضkuqIo'M2WjcW1D@v ˫q]y֟{/"־?azq |W,o"HFH+#$tuhAzoGH" [_aF x!AzRۛsh嶶vﭡY*msvm֐g{nZ,ÄmJ m%:nI D6cfdUk2p O=>V/FAxAe,KG8̟lV{t̷NepBFeu%M(VVV䫫:ܞS)[Se2Uu,FS=fC#_V,^IevfbI$]w%43;gwrY,ij1$I$g 6%,QDB"* @ oizwC:Ӵ7~cXys=P''5rEVP@!*K>1s榚ЫQכ=cޭ/!7fHԚ.kD#XP0ory]{U ,j >Hk]YO GG wwZ_~//hkXox鞼coɮ[scho+܆#oKU[Mfg1dFTDSĵH1|[nQǯPZ)~a@sL{mϜۏ5mS-,U2g2N1OʴQ]g'^я,nI}cL&Zh;>l qUCV(H4OM2{G=7Y=%*R#dSNth_k9C l& T[k\ I@Orz8k>ؕX㨢Dlꛇ8_ѲP!q"ۘem \URE.ͮWW\Xd{_EHk~ۀZuXOzc1>ݘBk5.)]X"Fso Ғ[њQfS_,ӺwQ&qN5W Jf~`=ۻKYmsIX#ڻpUVvIHN1O:Om9cO""Tu#~siH"63<#41_kr'z']\dmeL)$m'O5[驧<;*M2&|dA8Ճ, j8aR@G7$<,ō['$S/z{ߺ^׽u~{ߺ^׏^g߈4~).{˽;k6+=d劻 UCY$mar/$X{-林{ϻ\ĒF&p2J$gf{;[lwS]H )ՐFGF3 wwZ_O//hk=Xox鞼c1?]gܻ'yʭװ0\Lf肯!411+J8pnd ݖ$ש RMH΀?wj/sd,Vid@3ʠ&3ּ~5A:u{{^׺\d>_z*phdW!!ޖ7CG ki) $j͊VQg$s3sg-ٸuǵvG)_\ z w( 8aD}Mu捪&I*FݕkST'gg^oaݒn"ލYf6<"7襒 Y"3*cgj}g|sHJ2ejtȌ,E^{k>mCl}M> t[rLrjдN' SV4ŮnuH&ءl>Db<e{j=K_TK_ݐ nUZ\IZӫ(ۇMeMb )2z\:2.$wUb=eaZ:Uec{\ 3R4gv>T?>A5Ϗ=WO] M u"bPU/doQVLuLw1;gܑ|'PKUo"$uGӬ]+Q{gUr H?iEtm'F=sWAMXRipdqVty\tc}]G{ߺP29Lfr ]*5t4]EK*?q}*C2?oO!sQK1'[?e6KinLR6W;7GMffTUc$xXfH]v;/cK#gXUur05##6i[imdkU7 V8*J  W{p~ݛ)I{g6{?Cu @:c5gsn?/ەґshpKն\\]EkyUUeu8ϼjK;_Z{L^]y֟{~GkU?_^Xox鞼cXߙ[kvn޻#=Orn*+M.I5,X,66N읱"Mv^ ׫ Li t>??Zv7(WgZ+WޟOYoVr䉷ͺkrb/B1p5ӭk?z{{^a/6W,Xhm͋}mj|ǯaMK1W(娪h}Y'l>W++i#2%)IX$xdyxNe䭲[7YGr aQOQ%gC]y֟{ɏ"־?. ۳.Γ]gcG)Kk皯wNJ*gZ|Ǐ#/Fݣ݄%GL9ԁJ8[֥g$ &k5ܒNedD(2Ng(<,u^׽u~_ӽqUUݗvnoYܕRR&Shnvh#k4)r(k~䭃7yⱗnZ2paKeK<DXTP<+b_ #>ׯyU__O=7_^1AtV>i0Nge zcbh6lU~fε|KKj`n@ ~y?o}Òo74ԩ=Vw$(G+GL({5'<{ʽx756Ko- RX)Xmr{/FڮtǤ]{ߺEWl|bz;gmMeѳZnQ'}·&7AYP5eu6 D')r{SeF-7m224qidBX~cUDUDE *U*f,K1=d$/z{ߺGw_ M!GR,[!=4o5LpŘ5F RM'sϴ6yݦRMSV6In]2DIv1xdo7ݻġ*H&]Bu}=5ʾ&4taYvk6 .㨑!!En/K9[<«v;r؂~ cR@y(Ȼy헄5puDy19,.OT T ]m6BuCUHV>q[d&^7WC2z.6ב<2/u*VӇ]'׺ {zi%b4UfaRٛ s'=_'doBA2 I p©᧺~Omo^+D9XMF[uu@ {{:&Yn%TZqb"wmo,`Nn&Y2YH+\v:R J:pJSQFD O0Üw鹓sVw#UTDQDUEUUP.^ݓ6xv]KKH4;%G9yc/^n851ݧ_<&gVA^ԺN*:o|5:u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{GK߿=#w;޹I۽Z~}PO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ]^?Z?^~}{ߺ^׽u~{ߺ^׽u~qxJH":Su) uJWـ.ߛh"a;oB T—?M~q_];sd M$Y}n;ż6gx"U^Bi=ܹXJr*Mʔu};O7KۙytUk܏dM&[+e?.ʍUO][$1y+FoU3]\#;9MXS= #08*>ui^w?Z?^~}{ߺ^׽uJG6mQF¼uTdR?5H$ed5R R,ft= mVh#U@>Gq(HH}5TQlSON,jƧ~ֺ~Tz~uo{^׺uֺ>ר:u׽u~w{\Sj{[~{ߺ^~׺>֨:u׽u~{ߺ^׽u3\ޮor:W58!?ٕsH%ʰ3wmmD 2ȿбM3U?oG iFN[M~ xp6JQw  |NuMmխM5ˏI }=۶AS)W,m_d{=0Fawk@w>? |e6Q} YiJ>nmsz-Ҍp: pض>Ԝt͘H\n\[B) zY|}IbMOB[KK;a p/Qc"(!RnV(0O!^I!XҦwsW$dN׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽t[tUMCƲm`eXzLD3HtC#(]L{ ѱo[kMy*.Hcy( !!AeRq KQH)j3tcs,Fչ|8U2ՙ,$pGH`MÑj}sڮTEEYV!ENIds._-k<]1s Ptf@ :G{ s׽u~{ߺO7SG6RP2WG6kpCC2SZx&1,!Hu0s H by4 hxӢiڂw z3KAeEEiZTWQXۮ8ˁ*X| $)eb_mKX؛i]vخzj*4o:XCiܠxb$J#RZW=4-_^׽tl}iz*jGS[vt%OW4#كiekXD[G(Nn{&sw$%hA=o*^ڻ Af(HIZ**wmnmS;kVSZ=́mA)SSf!:2" [}k7uԫ4o2ԍ@8+ #;ٺFmw0",ʒ+ـ4i=tܻj讧5;kk*Փb!D;Be[܀Mzk]kQuCA ( Zo K7׿ܣGk+{vk߿/2_,^ruE{_E~[_p}d{?vc;P$MI'{[Op}dx(S]lEPaqK5UT4lv:1S]a%>.wJ0h2I Z훍PI-˶BGSZ[5̩*GuXšQ ddg;^ӱסZ:z˴ߢhu/M o)DwҬm`H4Gv u6H#R'HgP PN4t|IL]ӨV╂ EQ؅R Ԏýu~py##Af Uo''ݕYWfŠbďOM[zrxRf2X#0Q -.[wWr,7D\y$NY# NM7rQ϶\G"4i'"F+)0''c ?Lꏹ Koń};h5miN?gN5z~?oSqMu5M~j>5UO_M "?r|M>^E^Ty aW^g`I68yX]q:H#R0`pT%dd:\PYMS~ֺu8=E$ 7RSd6Ykc'ZE4ѬD+fQٯ6M%bI8E 0 ք1Ums }B5xb+R+Pzj-#͝dhn۱N%DT/Lѫ+:IPA6{ox~dI7 5 u{{^׺u{{^7&諓il~3G*A%lxaY$VPTh;YnU.RFRPPO }m-Thއ ` z[g}c.㸈"H#RZ1Z>{^׺Ua6o|nltu2Qɑ{?qCK5iJ$lї)".#y?c{m7p(^dC RȤjZЃ:*߶ao[[H@`OLTiwS@4 ?oϡ}_dY[G?Wo[:"={_dYn;X]l苷]>ђf:cev][ڔ0MoU:~p@^,A@&jo935y,P:r.iiGfx$I^eM%;S u,%H }X)$dy#}J T# `}k{^׺]UB}r`YX"53UxV,~]z'd =I3ї V<Vmz}R,,& )-5^G~}̜ymxQ鑁dQZ,hR) Ãn?#C[d?Ϭ<]R6oHGcƍ<*kP/vE>}g菙WFu=5EacM%VyFgnS*^qmYCen?Aq5{)%D<ɱ]ShGFF:rsToեįrE/!?bN=QȒxdF]2x.(GrT {Z׺Way]׻qbhbxfD11tz]COOrW7Vh`b@(%t$qH$y^s/ӛ]pJKq nddpvk K7_w(g^D]>Zo K7׿ܣGk+{vk߿/2_,^rtוӚ]vUu)W3VѤjG8mPkdI͔Z/_I?sʹ'th,r:[Cio-o4WףV_Ot]{ߺ^׽t |x48'!M 2y*fY#_T9${1{;=S0$G4@A8OIo/l 4vy]c@N,Tpsc{nI]{*!len|.2jdE6C'K*9 B}˒yfkkh * $U@8HŮݸZJA!"G d`d㤇FfZJJH%COMKMgI#1H݂ Kkd2I#UPK31U$h=RI#6f 31U@,MdhOK=8=C=kc/ K7OuE{_Ez[_p}d{?v׿oϡ}m}%@uw(g^D]>Zo K7׿ܣGk+{vk߿/2_,^ruE{_E~[_p}d{?vS5ڭͷk$GTDžrfdP墆SpJ ݶ]a[լ h6kFPӣ[-o+W\R$R -EEEj*+Ǧe,n/dp,^O;`Xl:1rlIgAC~ݵn[XPIq4J$hԭTƙbٯoH!L:Ƌ܅m_37zQB˩_bLTyy ^%?p~ yr͇ڷ@zO~}ûko~t-?N$@1[rA&52%fB>.~?x;h̭P*t949?bEVyen\FBGۨ +Բ"vXξY_ ^\V*KErHP{yێ|[E݀'JK9MBa탛SԷ,v dwQ/e`ߑ]u$(,$`OITt;bjijia4%xBl׮(eam1 *JA GD|rnJH ۂ4 %APpz}kC K7ܣGk+{vk߿/2_,^ruE{_E~[_p}d{?vo9wfFa.ɹ6KICt~c;Ō4,mO_FV;Ӻmp\HfSGIuu5j,l r e"/ygwIcC4,Qu*he Cu\Ȳ NC+)*FA2Q={{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽unɏWGܗ?yEMi=boK$[dz|d7N%giQU gjڷ ISYC:階멋&6VJߩw<۩q]V>$`" RtFJן7Y O 4[r0V$bHކTVwB jzwzu< U=Ro(yRv:O]ٮkiU~:>a6.mxoMQuO\ܝQS*qW96zuM*Mw2'd%׀n=>{' '2G+S)5 /l}V%3*xR@r+S̟K6p͛YGCY\zO])rDS%~qsޛnBkR͕d "*4yWW835F^4j+gR<|yvݕp=3Rn΄'{Ⱥ7__Eak{)7_N?gZ;ͧE|<'󷥲o+R=Thg-bU)WZlI%;?h$5'1*x9=fmvi0ۢF 2 0h7{`ٔ:qbBE͏9D.8q_xctSuz?tc:|sUo^p+vm *3{g]\ Iģ(J{US2Cq}E&$@MR|@fQZGGgyz{}F ԍř*^7]ۻ?F-`1U0ڌU[AwG \ܟϴ~l߿ҙ!|6YK~9&XԐ9a5BNrrn>-Ť mX1ҕX-(j>:g:8v.K7^1_ۻ, &u*42IמA{w4K4E*O$,9 d+ &^zq9z>dKLJ- %]Ht$~㞆l;{ Nwqs{O2pUGkz˧f܆N3{oAqJz&VnVVRGPV<A&xؽ5E"9y#^IhD䅘+ie'֌H` PegӘ-heheV"2*cp)$twWMﮀ]@n eFT>5, `C"/ 󘽯ۮQXMnݮ*c#1\r.Tj*J9c[^]ʚxȴ!Hɡe+"} :u{hI -THQk/$}`Io_t˿P;yՄ[>fnFf,K31ߙY>-0dd|]7Y4]>={ߺC7Ǟ|[O {9n >&f#9=ߙFrZp<1ǹ+/o}l:Lݹ] m44kO1Y)TG3윘Ζ .h5h=Z$Qos/6ATh+b$}D$dsEC8o+j266~I68aSsꓞn}=̖~ {)lMxnUQպ_/>˯o[rҿ> 츧}׺uYCjY=?/Wo?w'?o֦NܤIیy$$>]Um4bkOu~{ߺ^׽u~{ߺ^ճ&*msO{r=b-!Kޕ?Θê3d {>2 ?EsQ :|0:u{{^׺u{tm(n}E}+QW&>J煉^@9#Vc`:͇qϗv[٣%5<Ex(,j8H7Mcw;k8i[8ԻPy (X2zgm 'vFk9M[vbu~;+T&-랋r!'YQ}Z!Fch6n({דd /ss%R<3PsYg[EχooIdE i BvU~? |^Kߏ ]Ñ'PA8̼! _+>1OX;n[]JׄWP*!\6[781'`P2kt{^׺ٟ6+-opa>?kqh=sgOB~Wƞ-{ڲn=ۙ1;6 %G*Eg\Ʒẅ́ 8!(Y-rVЕZ=yo?4|ɶId-YpԢc :Oa:}|_Oom}o{+g껗@Lw]=e;_^_e/Z:{7_JvVڎFՙKN|c'/dz=m.gS[H$H>^.H1ݠc0~:6ï"#7]w&Uhd86ڵRFZ/␭>kSe֐a,. >a{{ Ⱥ.*݈>w#.:C{v{<mPrteBpֶ_5~%~#v;YrwuVsU|1_Y TX&gTq4 \{{7sޫIe;H|hK(J?>g+ƶ,wp)%UԖL%H8PORF7Yܝ8^*:Zr&xjLpRj.?;EO0{55{̿[å "H z0:elI4G~˞w2K)eBR Tf`Uen?˛|mXJ5q_gp<qRf&812z7]9+f~ٖeܯ )?l:X'q5`f[uե*2X.ZBʌYl]O, ӭ&j- ^yeɺy#U͢>q{ics2pihgYgDё$Z s-WS/ɖ">SΞ`l_/?H>йDԪ `#?PO}ƫߩcO܍G+lrؼ>d:vyQuuѿ)1vR%ݔ%umטӭTt(i~E{KW)>;N[mLhMxAj(KҴF ogL Pq> C|)$rpV$ǟ~}שP[*j.%R1]]j}}j;.;v:ل6GʒV4Ze'Kbn>{g~6]EPЈ$qB}Q`I5e٘7n Ien ҫUAT  )V9$?3{kv ,OqaV ʽ%Nkya9nq=2RT&YX}ڋL1? 6$۲A$ArOl>aOuWO\=㻧XN7dnײsNLܹJN&_ne%䒖!XиI#Vksn, @$F|AQM :{ [yi[w$$IbKh$EyVGWm<ϴc`o:^2 JC+]qڕ@qOC޽{{^`'d޲T.iedV@JF}oOYrKD^~'>GR(+V3\pBd,$,N(kNú8e?OqMԟwO,ú8e?O~[Iq[: ?.?] ^٧m|YW ibBKYާV[h9dKTdM:I30Sb8Ng|!.*F-y4‘eR*UcaL|>=Y=f㥊5;޺oC ֱ$ fZh)/ 12L <}xM0=hvV,"l_KT |+eaTI K 4p)VevD)_9_{z[Cn54<91*Cjhk$}9uu ]'Z %֒8=ƖaRkZ&40A~;jjBZĥ %hγ+&z;|nD:cn˄QGXh!OUJco1x(Yc}A#Uv5;*q p' gS$.HfZ,+HgBsLі]sab ʸf:<9@z-`R2rɸj |؀Kܴd/$*er?OG?,!mw&7n6qITʙjW>8g|[݅<E=m7T] pBr:K! ,DW~to[۝S`ɦ;2yh6n>chr_I7%撛nG8m $TڞbO~>c]b+1Y|FRj ')jJnJ,e`AK}cy^Kn43ttb+++u[{{x$YaU2:8 *YH*A[P?oG:Uu>xho+!y))䭬\VpOMIYD0Hזk{՗.{Ia{amaAs1U.K,TeJ(8uwm|{X# Bn4u08=n U[3?Fp ?ΦM|1/u;ÏvW=5'"~J@,zqYnm<{{M I֏;ciet"oS}ʘi;{%Hԛln*?icƢ06a5P<b}U26ѽM-T\Eꦹ pA>Ɔm8UcC1#JH_ˇȽU:ϱіcKOT*hWu`U/jPI:P׻ul=wD-mƠY|h&]U7HLʾ{qo7EyI-75csI/$C!1+:ZXj;/{E䤨luFi)Fn\KRӻFL5T qȇTt!ᔃȸjܴM&ݻ R5,LUFu4*þ)P|H؆|eTڷHL)pA"4ck_"C%ae.U~NDfLNV$陘 9/kK~I%Q<nvFUBķΡ-G[I se94Aqq/k2`YT.Ñ+7yω}.߈WdvnWwEXid jݧ+d^DV 1URG(~n>sB]SO9B%D=Z^V=*^¸5!CpVbwzu{5[ {3!yXĴuPM;Ή 'Le|r $0o/ojE,T֪R g^nO/MpCFSKv4X MQ0h|_ضfƫ Uӧ)dmZ24\<e'Rd=/އogW6"c"E %!8ҫ1Y#lJ{9/wl #e-7CN˔ ZTUUUW+*9 G!S5nC!_Y3TWWVTiIe3I>wws}u%㴲K333IbI$I9&u(%8P**UP_{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{GK߿=#w;޹I۽Z~}PO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽unɏW߸=]3eXq?[v]֬G8+/ nW7񝩟?KV,e-3Cާ~a#s.IX6q$dxZĆU7#Yr^+sj}r)A*ZxsOBN8:+!7#vVz<K{w1L1d t Ym.f]{ypB=P D3BT2Y-տ;½mH& g& 20eMWU4s7>Z!4OޛRwAhhI!fm*vh~TߗV& B\@ĈJ@H+:e#u/od# }4D 8Tj$e\R%1k׽ux?/>nCޟQe >?I{7,ZEsr⿿O>oԅNDu]d^ՙ*ߏd0T&<<}.ԏN\}Rӆd̯g_s51\dT5'ȂpVnlsK,MZN+j7-8)e^lO*Ƴ}2>ƚi(v."jMz9ǹyIK$#R[DH45"I^6`Q=2d"> ?eZ…!VęxѫWKޟWw\7/O*uW_cVп)WK.9e8bފfoBܟhG,f@7kualYiO IJ[5,-ٛ-TamY{|;a*YJ)M"dZ|ώ=M,upO"Sϖmi>aˏ|}ܽ˕7ӤKgj^[Q[!$adQ>r-5)4ɢG๋aO IPr'EG{^׺أ)̠J{'=VW{}?nٿ煿"NkËl_?a,e74&ש{^*珻/?>]Qgyy]t?N}c tg-bKΰsOrliֶ0Q%oBHw-(I"vx\jac1`ߛ?O!oxaczKre&&I0Եvw PO!`Z{ﯵ&dsy?[΀1`/{E/i>q4r#/UŌPHzԁȊY5J:D?FS<{ᛩF(|: &_˭?`v}?n?XҮJ:>cg';OlR6߄KQ."e*z>sId@c*EJg*{}7'iv;q[r8cΠ14dHga_dypمxڬMH>"ֲ܇1Z5B4o=W1yݝžst`O V2 y m^|6b/YPO/=A$lپ^rW$6BmB9RE;H( ʺŊ\I{-ٞowOOp`C n jMcm\\HÆRUBOwse!k{gh)u+-lgE)dUr A:jWҮ{߲8mk/>/Z~ڟWyW']oQOW4]^ zuN? e"=,#`<#}ŕ7Z+}8e:e?ql?trtr-mjHȶB+[5;_N6mq2{kTҗM3I1 閚s~^_sw RGSP.-5ƒUnTqT(`~v\0a /0]y1 "d $ǗWG|(@)hl*| Ys٘9|I3#8z: ,)4`ߣۭh_HN{OêuC)P m;RmO 9 ~D5*j37A>+7X1c31(܉ 9"qT;]mȌ(Je <#[^G{dXfE7\FRC{ߺ[p,!nߕ_#/\?Zgܟr/OnN1յOJu{{^׺u{{^G6?yҞvKN%JM3Ǧ>Ͽ W}x<}ͿI??GS~u{ߺ^׽u~{ߺ^'!sFLWE>/4m Îv,ؼD ~Qq?9:`ړO`A+/dCT}yO.[{bs"{V'5?Zu ẉo~?rou]q.],T+(7|}QS{ng%m܀ps(*mei9vJnf:si$)qus$M-nY̿dmظy%MqQXuPRYx5&v r^5 j]cȯR{3Vulu ™j(Sȇ#C%5t7DA&n~s۸{ 2@*ArHh&9=t9o.Z歯 VPDHƨ|:ugMJSﰟpsWz+mTkW%ho>ef߳?wxb tX}I}{ߺ^^}O6* ݌YV7tAL# Hhk~޾3cV8nV &[I;#n0~\d Q Rtď\L?oP[c>:9ltb((jt$tgS)JGļ}om7;n#2C};?dqL% Lo%q^%V&?GH_>/m{aK=ìq<ى2@뢗76V޸Q*O-ֽg'ԋ{v|vw6$S$7IØuHnTO7X㰀)YJEt%j"CF,ܓ.cO}}佔[XN!1 5dp5MXvyTb2z`y0{/RdtV^xC$S$P i7=V&aif|#1rflQ"H[˾+m %uvV\?% Sw>ܖpRW^׽u`pn_;wNR)'>TigK$N\*R,r͖_vvFL܁e9g?DTj46H ?dsy7]%~BaQ~(q8 X C#R ]''ω 5݁h++15fq9ܛN:aIj`$TCYF GFUf^}^bڑdxT3[<5P"u#eYՆw?r.w7hEGNg9)4'}@Jj"ȌUчѕՇJV$#߲﹇8mk./Z ׷?{Ǽ_yD=wҶb3׺uw=Կ+: U?_}csũm'7O^7g(~>o<۶LEȖw:!bhfuuzjUQYViAxO957[TfR;Tn:%Pd7^l*Ĺ<`Y iqlMzwq*O%mm|-~M[]lEI:kjSQ8}=>S<,`BVA^y򣮁u~.7pv>ͦ 1rǍMyLRD x1iQ]P@8[ػCspCgZ2DU=8\q$#+ytEŷ.FayXTE55K!XN:ړ'b߄_ j0E4*Fc["UyFoS?x9j=oeRiF8[f񶬿\Ǘz}YIW*IU-$P0Tqg+;u۝B]j&:~-hmi60 H J ҟ~&;"6fxc"*}Ǘy:bzoIɧ|e!܀ `]D&ktP}4Ưozr߷Yn-rmjL  2{Y׽u~XG?6/xʏy[/;Cgi v|p×?K$nY G捧\˾ӯ{^uѹO߰-EȽfMXXn.f/QMT)r>&H}Sȣ+xyYCVR~>󽷷|}͗;ۦ#n\Ht‡+뒙'; vw E%龺y)+20co?|=fFVUv?ݿqgOƆ%[Mj:K1D\X32fF<ב|=x+ u]X DTieb#iOcv6>ܕxi+aYx1x$*ptSQS*%יy~9 Y EkDDUD˻').[-7v=H^G%4a^u$ȋ"0#ea =Y)cTMW~w>0>v|.R&뚬y򴕴4Q-S%DFCBZQ%"Oqn|3 F%ՀŜ~4p)lXnH#>Gc7|: xֈQ〥e/Ï6.ǭ,7fv5,dEUQS*"e k;7Glqive1+H.M H8U df#ˋMB4{ [qP(%Oio|շr#Lg4?'a㻷7sf;#=+ݩOu<!QЃѾOY}Ӫ~{%{Ckuק읧ES3د; sP⧯5&HfYU政J^GXB4qL 3-tBCl6z56s3)/D{2$"[m-@vV˪(E|O)՞Jtqߧdڽ[e k~nkQO̞onq{M ۈ#2CqOi-n2,,^)5)-z\/ GX9OsPtS&"CʣR/ۣ;ӵ+~ޡ671q;J}cQRI2 .. x't}{{a#wF) c.WLk$^]ʒc P$ƒHAftSQ`m]k$Y׹dIxj% -LjFPr$bϚZK+b +U`q9 ʚ$kwR$~e-M).*B!*.PĺW+GgfM;;/vAU $J*(|8&Fc )!JƠggv<3g2M]]f9 QB-NUZWr-lܟrihP`/$IAV&A t{׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽unɏW߸=]3eXq??ea?mw?|6?ޕG,o~%vy+avѤ>Ij񰱎u`!W%EL&JVe/Dw}7Oen$>xV;prRLTBXTp^&hĆD}o[ jlsB3@}2t?'UѨᑀ`GId]ux?/>nCޟQe >?I{7,ZEsr⿿O>oԅNDu]d\dq<R*v(O<{f <ڍD : = ^`sGT.+#QZuP#_Ax$tC~ /0C&帳61.Hkx"uRTʒ2|}r{.mwwb>,vzàBL(&,֮ۻG~n:4SHe8|jgocc-c^/g PtF(DRJT-sN3l#,9Oo%$5iN+;|5ZI+{(llB>( L馪>ﺏoşɣo?jh%e5!W˜F!X|`)}6mYj|h2|XuQG"E:o۟ pBMԕ /-rES797tP,T~k|m6nf\P Og3QI, *(,ѹG4\ru$8[T#xRx .'׽u~lQPwo%zh=Ny+=l'UM?@Ŷa/0XNc`STx׽tj coĕsݗ.Rt<<:'>q{߿:m%Xo9ҶOJu7f|荷_sh7l% щ`*Hj"`C$t2 'عfkǗەWR°W08:pOY'-In0IB 7R%|G`FE*2:5CeKTvXsu@1qIn&6z;_ߗ,DY=Z \ l~jNXgEwop9u.lyC~Q`2:{'^׽u~{ߺ[>(ѬvVRkz|f6ʻW+Mѻ:`jڪ(WAr>r_gs_66{ J`,'8G4Q@r;'.4z$c=PhxXR\ftt"p#rF(}@<5>\(;- i@"]*FHE_9oj-f-!X{fkfb|uOW};{G NwqaWe*ިgOO !^\n?Y;>\]Շ,?#sȴ]oSڗ^RvlC909!)+h*^H2}{=6˗?G;Yݪcr~yܒ[fic_g, alnE|Sjeb?ebNTRDݻJoc.@1dJ~UN ҍR~}Op> vqE5 >;PQ(Tn#T޺[P)#e_Ssp׺^}]=X^?u,&N5lh : uGY͋P0C骄O2b&30ICMt~c&~s@$`YQILq idvNi?+P q~n:ګ/d߄Hm^,ak gTQf),u?=`l'kkx5HQy"$r²Su˟lyspLq4Ց-(j&U@gy/,ygcvfU$,FƽuМ>@y&=Z2*;3VwP%OTL[L-JWK]OW{z"[S5TETC;XbK5˵P l}Qv A;ʚz쁂5ZzA>≕?O*CKB2N+X_I}{Ͽ W}x<}ͿI??GS~u{ߺ^׽u~{ߺRq,~?)(ql]**y|RPc1ȼ'HAX{[{cK5ìh*BbHyP$T>m3Gh4.®۾7fGK9K<@Gv9wn>ŨSfi`>q +JoǾgPl-S CnYiĉ=j;7^~n;w]Wn}2pUd/|h<8PpG&Ny[-M#RW. ax õmVmmk(}#B-}XV>lI9=Y!u Դz?3L*UjA Fxc$Rj6{ˏ/nNde*@ vTB[QWx1z~B[$wJh2֒P\/!'Q%[5?x% O^h#i*?Xsɒ?],Z^"5 8m?I{+ygS-C2D~ru~l?_'-a>m?͟= _VKnݕ-~FUQYK?j礧ڻ#KOSOLȧxN]=;[9(6+dc(F=fg<p#@O5l\~DW޿ow?R{|(67ROSmsw@ԞS@qSmN^5)Is7DLO\ :uGوw V j]EgﮋfΕ:4TA^ΜFewuw?*OWIcl.鶭VҎkrdqcjZT_y&3sbu3r3A7趲Z6z2NP""f2i>NC%Quw? 7pG#*:yOmIQ򵧮ĭKStmYn DS("?,rLҩNKk oCqatė [@$~"<hH-0_6 6ի_L*sv=Tl.U&o~Ô[cCc2鵽o0"60)r`jQ2}w6gCih3HQSnvv1- ]r$R2N`l~:E.K#KTHssڹ3iF*7Im'vF^Iă j)l7˺m$0p辧SNcv򃮃~{ߺ^׈@ "{42:^og?4يkiEmMK^zb1k Yrt\}2z].mO 0Gm41yY}۽BE$wi Mqp>KA1w;-@a! I]b'хc=t96aK;y$?@lv}O?m^wT'=\G!ul?'co=vcmuO[Ϲ|V%J).٦Ty~PL)nc<ӽՏݫkxW L" Z$dyT4T;vSݮ]96wMD2$L-S1RBDHz9v@cGh~|9,h*D7|v>,|Sj*2,?ŎPi}2(m:s] FGs^YYwr Q,cز=?Py {7Y׽uyɻ4ϻ^3ƤV:iipLs]pkI#C\̵cd$BC n#9C}9oeM7w?Umjzs2HwN.VFA]uh+qC^㕞3fHx Sj>֯p䍺MV{}'w.   0O\zn ⶑXFxxd V&Y͟vόO9ܻw"7L2ߕY]keG8w]ޭ7C͜Dр8%YC Wvo74-xeOE(Rh|[qnLfRAۻ1S;7}"K69FsG}23u>^ЫY"5$[jwE.#%t듻u7Wm IZR{gG_Q֢Y,fSⳘ9#o_|+6͟qj#hQъe DYmq,282G ׺gemv__Okwq??Z/d%'Hܳ5/g.0O7T }g^%MQԩx 8i8rrM<`f 9O>Q\\8̝ZDѕ[[l|쑧z '?7Юޟ)`  6nMD$-NzEES$\E;~ns}^V~d0ƸDEIo~ԃN6olTxĒ|vh"OHOuW^𯬜׺u{xWg5s wsF?3L* Or)~ո];o"Ih2Oŭ$thB*9a~޷|w;çz7n26/?q6{o-ɥ;XAϾZARw]GKnP:W*Rzo.Iq6k5wCxVs!/zuSMb\t?URֿF._F | 4I?@?Լ}?XM v~9`?>5@F^g=eG?M-z^GJ_~އ-]L44zkdHih+fG 50ydvbQx߆EٙU4zM=jADM؊*ݪK&ľ:mݧ?96f[Nf2ټ2QzJjILә%DсgVguD[A"m,{xqާm%XK,di'ꉧ+q8D˺BV:hϗۮ Sn;YLCE6c UYw-> C)=K#Ǜ}칷dh+Ai%Eq<и9 9b勞[[)&4O8?dB>'u]XSw޹ @7Lnd-'DuHG<oUK72WyF;"t xUH<1Fq~h6> 70Z*d,Yn_>[qm;'>SspLU W MS:A=Wy_b{99wm#oV1,VP.b#_3C,nt+{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^m?d3R};GR}_hy'׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽unɏW߸=]3eXq??ea?mw?|6?ޕGYOի-_-л;?._rᕜ)zMdaێZl?s_o%쟣,c;~ iM<`N7K_xd=m| w8V4s ӧt ,Nn\dI{ %:KڴeUl?Sy YzYu/>_wO5r@oza@s`Z&Zάcovr^X@'_SP- %^+&FE,SA42IE=DgP9#ud7R{$uFؒyuy>U UbQB%C zKEHts(7Ev <7Kq]E8**&%xJֿw=Gg}ɶ34mň6,*6VGa9={onmw-VO7ĩ+A)*R0\PuV{?rɽoimd;3\$],o|dVCn‚ ]H%Glc兩 9vܟu'UvNe":y4> 14)/$&#a`3ӕ~INMz; fL^ :r*ԵA"\͏<_So6nO4F*3@Q5:hwwR#;7Z틸j1t&r;_>-]>fCʐ8#_qϛ&9{)U(X% Z=vy˞yNÛ,( ÔU&mʮ0GAgB{?įAM}??ܿez3Vx[$ꩿ8?%S}lJoJazu_,{!xO{NغCd?pn/yM/D ?7/ViVV;[Rdq?ѭfOWJϾEΚM*z9sJʴwP#WG[t}M&ܚ׷ӿ+Z] w0iVߧZ<厂Neelz v.[2:ξ{{^׺uIPT *}aSDn U6ݫ*.h.G6"A_ ;a}5*Lwn_|b ҙc տDѢͦ2q[Z}yŽ< u+JO_SS݄횸x>N*V;{KAϾ'<UiWP?)~C4:~v|JE%$FEX]YXY`hG@5G[,/vv"m ݕq*j{ jb26!|6@+ ֶ}3߼3c EgeyeRs6#s콷&w?jD>e>7GwJr]Ǘ;obS%XͣA#|LEtJTvO޼w-rˑ/x% IS\R+tx~mt|羺9u :oh7َJDTW*B~]h53CU$ [8UB;f"ɷbCN'!'P8J8u .E,4sA:6)4ܫADJ(H #믽*CFA >c{ouVOY}>r[]>={>.fj7z$o[^{^׺u{{^׺u4So@~.p?{ۗ)?7nli^tk{w?gT{q7Y׽u~{ߺ^׽uj_kge=>Fj|db ҭVIʒb옏XrkIZWMC$-xAdmQIuz~*rnQrqf89HEp#_򿮱=f;;#~ E7Mr OXue(OG=ky9Z.Rmva,!CPfh {ITs 7\!ۗ) -W63I ZF`(Œ0G]7}mwݩ^DDe$P],8GId]?lW}Ӛc6~?-[oW;Xvd[c*v<_2)Uid:}wVWPUuZ$T zݯgح9j^ƲZ5m ZjS8zFú8e?Od?k{)7_N?gG?'{Ⱥ;ÏvW=5'"پdjVxo\lʦ/{PZl?65Ģ9 Ok+B%ا_u_x2Ego9;}_Ete=aߪ>/$t5רw6}+M5N6YDlj)!ǯYa9>E'eU sʱ]K"`." Ѩ̾sE9J&,-v uIjkaU:?`7Pot͑lɥ*M&ǕII+i]ZıM2ewso|o}mwPB),cu/fXQJtڟuysMl6͈-EC"7 D nhf]EMi7?'F͟pP뿸oXpW_k~ϥ-:u=RAհ`hI-5pn,t!W$\mo2xҷԲҿxs)"<>1ulO|Pz|3:u{{^׺'.T>嗊2,5>vukﮟpHnwI?g\ lGz?#uuOS/?O>HظW}_&_=ްF=>O֪˯`L٭I>}?S)#e_Ssp׺{O l|?tn9Iw4g/Z횓;&F3PզjA5y=W76ϻ4V׆YYn;5 k4jBwUMJǷ%wo ɵv?pU퍉\JxJI0cbe6;ܶoe}Mq8IdX$l3F`VE{v7m[&sqDRΥj-Xs ћ_j{{0CbCi VFG4M$HU}Df]Gsv{ AeԒݺHвDH3>Zvao> 9QVV%fH?E=%,)=%4vHEA$9~ce^^>UT D@*"( r//-WLh3K31˻.rI=#=z9kmlkdmJ3?zZr1"V<,j '.l;4o|1-ip+AfQN:AsnYJޑƥڞ8 SΥM쮡ٳEOI:4W  4*2ZG=c߻olM(D2*1D,A#6˽{E=M-VLZ|dxѸiOtm^gJ畹.zcgi4ԼJ )`YK+(sߔoU@JO&0a}U?)u#Ynu]eGuyrֳ;8{ 7,KY˿?FM{Y׽uYZq]sJ'v&@krm.(:SBA 9{aI/kh? Pw"ٝ"Oe[4D:1~{ߺ^׿{^q4R/OV=4P #S゙Dc?Rkc_e6 l/\"P)JOϭ7}>ʧO=U?ů/G]JBG[uX >lwdxy7ܱn.MfcG;Q9T1鿿.QMOk6Y6l. &hQ0F=^ ~ՊŎckڌnLZQrx=4iM9@HˊNKMk[Z?WLOqnw_=ss_s?]t'_ _޿tn )<97?ڝ{UYQ[S?> 5S)%HVΪ9{߹7v>^X{l()# gmӝ}Yb}Ѥu}uE+EEq׷o`>S['}+&.b^w5,:TBjԯ[mg$m{ #ab˩atfGZJ^ڶw=ьďX $`5ê[1U}xyߺW>m5< O'= յJi0CʆVD3ċqlC럢g>Dudj5#^ˇ UG<9žߍ;{y|mZ>X:zܒ Xu1ZX/f34϶{];G>^afƱ&4W\0&jx`$.$vv|{v϶XGwuP J5f6O|nٺS/Ml<M{1ԥDGLlTCjCUHu7Ϸܟq]CK\j >;xD49Az}KΜ7J7qZr +te5S^{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽unɏW߸=]3eXq??ea?mw?|6?ޕGYOLJYXY> RpG^QuW|_6 ^YI˶XRv$(![cSJD=Nk5.PtG5*cG~~_s9Ji[Vdc")XC$>[dlʎi|wmL]?.MX(G./HI w5.=(²npF0Tp( nfPgb76Y;"RNC J A۝\AΐAʿ8??F}m<9msn?X6}~}+<6ᓩ N;UHY݉UQ3U,W$u!FIkzF#=;s[Jfsp5R-0DcMMP stl[{w[ۆj&$)!>3#K<~a^McijCȭ1*3$E"":K&'ro ;.'a'  ]&yY|VRksL,`{u~V=&)kgJ1J+O2WJ6~Myhs.,ltB(3=_=k?hCO/mM{M!3_^;=žvhO0dZJ X\dc$hqFۖ}$TDf`DWLA`MMdqWy՛=7m#kla<mM3~+=x@+^%1'ߡFzZ/<#?S[I|to_v>qii{@f-m)Fx]][dT?ۍn+wiSBī*(<}׺أ)̠J{'=VW{}?nٿ煿"NkËl_?a,e74&ש{^*珻/?>]Qgyy]t?N}c tg-bKΰsOrli8|k |7'jv6FYG E8jA%DQ+f$x_x9S-pm1M9oO %Gd$&2{n5I"ɭ;<ɉ$P8f^7rz=銥59XXYS!K6(e=tX7䫞hłkfKcn(P<2p*0^杞ǻ۽BC_xo6GZ7]4׺u{nOrI{^jG5q; ҽ&[6c3TŷiH8` J}9~ߒj|s>!I佣 2ʐFjjA߽74^ahaΠT7/WiG|ɾv*V7ac-5U;/94o3lCFn(-UmQԌxWѺ_f6 9cڽhJ-ΧӽRto]~G&W5XTT0b,f#O,r͜g{<~-րj:Vjb(pGam7[-yo0f՚TydR`$[:*ZX}FܺE=*Vn4.,/ӻwRrblaV'\j. *aF9mod4ޮcAiXҊJFw̺*TUMB~ gjj )eB(\!n>M;9ChH>J(>J'ļjP[,h,iV>d?ycHvWOo^Euz{CLycHvWOo&O/mG}ݘ{NsIW17#Dc 1`]^:4zsNsk̋^B hEKbI7!Gj0GFw[3Zm@zGs]*`sosLPmݑvh)GE>#<M`hYcDמAN]=~"f-7JZ"A%<9ۘ5_lmehhMΆ5hjrZ'=WY ?{?[?f}?o?w'?o֦w'wS6%못_mzjSҾ{{^׺u{{^׺eMn_rn_ݻRӱ?{ҧDd?EsoRwTf^׽u~{ߺ^:͖8We C,H!wbrIr} O< br~ν2($2I>@ :_QOcԸj6qf$:}Y%C`鋤,lLH͵~/[gknInRc&զ$H_a J$=w}Ԛh 2M,vV8@٦`x<+Aֺv;emrMr`l`**p٩DI3r}^g?zx^cvih`Ga14Q5RMMV$lwk6l6{kۈ"DĚ($4 3*Z. |颺{=?~o^g?e~k?h^Yh靴ެ`|ܛ{DZ3{'jqj-fkoRAO)_i+V`2͜<6Rh+ЗvT۠E #dzr}7NEC V9[S6bJpM'EvD0lDT/u 8 BO=oꓐ|e!܀ `]D&ktP}4Ưzr߷Yn-rmjL  2{Yɳ_ur_`=Nj\еm_~j^|ı̿qWg7. _nO/{^׺:[7wݷ+팅4Z( =ӶB>{i㏉+i*Yퟸ9Ys_/J-=TI,$`9i|TaЬsjw0F j x^6R5Q?FҮCS>ڑJgx U9'8߽'坳=ݦu m-o!1uY|SLЎb_r[d:ugo I 7 jzO4WX q?ml 2 T?so~mlfd`йxmQN3~_sD;g:h- P=L/9kO>޺-׽u~{ߺ]3*+;TE,M z'UVu.R?=vvk$ozR,WGYHc%dk/?܊I[V jV ;yݝ{6 )g[ ?TAk֯ w7ir=lfݗmy6ICdUA 18{2۶o/n$ZW0: l2"8-=%Q9YK/=+z}kӆ]=sWOy? Zf'{taN\GN{,3gR~I'a.ZSqMmOC?O?=/{K^yX4RDQx\>DOj~SN oMzWwSeg'9[l-Iv?x>%WYd`mpd79+~^AkKS/d@Aԥc4Ž@:}=9d.tK&o]ZLpaF )^S[W^Euz_O/mM{M!3_`_/6ۻ73Gjf%6+sSOE*U٣ueשH`]QVۼQA,nÕU4R`QVB~M|-5VTjp ҄zؿY1l`nNɿ]w=;ڍν0l2͉L{;OJ'5ݼ{uFZɫ1 R_m9qgݨy%K+#g<*6U:)֡@H.-<zycܫA{<<2 2 #U9R290FA{]{V[geQ+~6yhwc5!:>=rGq_?R}Ar(Ѵu@wzu~^Q԰f;&fBiv>̴ 6m. p?J'Ld+ 8>#6hNodKYV].)F}ǟ~Jg*לO}5?ŨXdS iFw_on9a!_?`U|۪e_^׽u~;ޛ6+nMmG,9]+KPX_|ض[ɣ$5#E`;ͷo敏J]ʚzuoep~ )jxvir8}KhSizI O?^s՗^MihR%ڂsC$%5lT~R'5k&xҁ$$~#]i4fTГŎ2ߖ)LT^}wpkuؤmw!Xeo@ R?}?v{s!ri${lGN))<C$xO믯$q|Y~ғUiLOt6 gޠMZEvIprh7U5@#ť NTA2ޛg-0_F 5blʢbd)(&f!(}6d4Ĵ€,9 tP5EA];jоKUK%r< TLOҬKAN%Dmہ6Rm>m ̮LWHkU. d=̼<{} {YX4eͣP50#Ri**h*+j(k+fheVXVR\{ݭ͍̖wht`UІV p@=uf9"5Y#pYHeeaUea*F {Ou{TTR/RO=%e%m],SQR8XU9Vy"sFADgq|:=U*Œ H C.jݗHf\T#:HuwWp̤M{{y2ΰHj@1p$PO\y[IWcC(+E5 NETDDP*}1,ś$ז$NI뗽u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽unɏW߸=]3eXq??ea?mw?|6?ޕGYO׽u#䱵fOS-Cj28 J,RVP=㾱UєYYHe`@! ܱCq ܢ2:0*jYI _ʞٛ\|]ٱ0Cq8axÿqtѢwd-M觪qeH*i헼ܮv]os >DLRUn&5Ͽ{].;-n$K6j$`9K?1;罷^4uGm`evۡUlňgnYl+!ư ­%+.bA'O'0o6+w hF` ^I%&۟rycڷMmR\,HS1f*҇qūQ?7+~}+<6ᓬӢ_? +V}JZ~٪VTY+Z u@.{aXq밶?Uy\o REAےRzϣۿnwMm=D &Ԋ_oHz_}vVk6@: )VN %Lr2M] a=}]"W e|7KsBMʺX{e}DZsʦR!SǭWUU@UPUEI&$BI5>}w]{{^=5]v>#RdyW1cxH+$3"J Ucyq^Eh2  rOmtHVGFʲ0*Ge$zwVS`Ghu0h&▏# Vc``&;'(hGU\1Ȧ&_ܶBRy#yknHD]OjP%b$Qƥ& =jGqn=mnmc2YaTjz|UtoTR+|7&hJ1]HXԍJ:a:ѱkm}M*Q68e#ˤFlQPwo%zh=Ny+=l'UM?@Ŷa/0XNc`STx׽tj coĕsݗ.Rt<<:'>q{߿:m%Xo9ҶOJ[MRWiiZz=5DL$ 7ч!#% UGņ cޭM;[K}QmP)Q`~8x֯ z$r3uH@\}I>t |*7f3snle~0nmR6s^M:ZL9 'MRCTR1vnBܽnfԆ䡡"X+$@%Ar@{ߴaKm,D0 \\ nI*#^ߓ8/UGv.Tl䧧,tKCS* +2{-LnW5 zPEӢE6(|_29ecS]4}^X,XBXR]8*sG&tPBUu;r1y9噏,ǒy>h]'S_~_.\LLu;vaJ?*Ge?Sq{旽Ot{aNϗ?Waht:~ }=ۻ;mv]dVsmkAyLW-3𲙨k9&huy5w,\[0%Nc3UUaU`t+kKd]~aĶZTS\N> &dM"2?ZbevnKЭ/uQu5xa_YR\@+0rKwOc'unX-+-Nbm&Q*헝=9 WN%A jUh|H A3uw)KpY`#l)r!_F84ҢVSeIlєb~_WǒewFknjFZV7*{pT<=r9cAZ6|9RTViI Bj|/L#{O7e{i2uNFd}Eգ't&ׄxj6fy&* 2x-Lkz6̿9 :ömjH?UmބC1XݜkmċhPK Q8c/6_ƝZk'bHԬ3H25I,UK{4{.o}ڤ黽G!e13+0 M܍(:-*8D ̣ȇ,*pG2n 8zn{{^vݵۮr8ݻ d.q?/ҕ]2[ܫ째wstee pS[X] UVPJ W%# %zc.c GeT%~-櫶Tٲ)n[0sTe1cdFj5/׷v{;q6{$w%x Meu`y_n=ΆԘmoX+U|=NH)pXUGK%%IdF]u)|:e(4?]Ze*OYCj+3ﹿtG^Kyw =׾;~4ù?_,F]Um4bkW~{ߺ^׽u~{ߺ^ճ&*mtO{r=b-!Kޕ?ΛgL'`}x'y,ʓt:|0:u{{^׺O޶ZMJS﮿psWz+mTkW%ho>ef߳?wxb tX}I}{ߺ^П5~A^m/멠EmM ku%SeDDFi1|ː;4DDqH3tF s8lw<վ+ubH <&8"FWSX~s?U,S-5 G"rww]F{yHM2&RȀzU͵W%thCt?&RAzqoUck ݉[Go g}W)n._YH #wszo/_Q{H.k]֤)Ubʏ_@YN'$99/qVr:_V(Rە)X& 't IL4ٟ_o66/8p)(KBAK4{;\SP aC$p*F/ W0O>Clv*lm*IkvҫN(P4x%KVHFn}=ɹwn zCnI;5CU[o0 @/wαیd[K3٧SpN$ BZDH$hQQ}TiU|Tf,ś$BI5>}mGv}O}?m^ywlͧdRBDbjDw T;7ƇӏpSjFxŠŸoePzQY-|B>XާUNTQ#V~!sVQ#@K4qM34{_VƊ{5@i"%Fk4I2ŏ?KyW}FӺL{m9cR)_F`"IGP|ie([uB e?%33Y# C%VO/J f>$H?k6ݾu!,cifuEYUUlI3Av^^8Q w'T~CúglWO#6&Kvo8I[HdeI)9TӯGr^ű{Vg{Z-S, PyIX+D8"w}ZK-.rZkpE+G+ WĐ'G/7nv &ǿwGrdI,4{%0ԍ)- 2Q {qMIYXL@;Qxuv~~svv]6Wh(Mg NK@X]WGH!gemv__Okwq??Z/d%'Hܳ5/g.0O7T }g^r{b* BJMφkKٙs" B z+U )(7E>l 0i MJ2JJBt#m}S`p3CLɉ=m;]?;~8CnNo{YZ\+xsav `*hhAxgu HEd"o3{!d՞Ο"Gr,*kڝvOvGC]ګ;%3:.qcVCY*PoL9)^$6{g3r6Z JeH Dt^7=l+ܭͻPIҦ)1Ⱦjpù !V!7B^{QygD(Yi[DP*I}RL8gy$$2p:/e|-CC0Sw4tU {-Cq隖z),iSP5E$ΫP?S~vU~(~@U7 X|fH")y?}7Y=ŇFj ,>(idU 1?o?)ʌOŽ<6Juw]'Fq$BjDnK_/bϸ2mIL-HE?aqdDP̍F q0D3iƊ oBT֖"?pCn;w7*6k|ܞý3/ڛA_-}Zsbe=nO?O:^)%o{([%}c%~ݧW#3M.0k!M R:(#G;#3O[I;%֧$M>H-*G3,{h]SYi|E;KqWlLwpciu,8mR 7"T ^J ^~>r4`"Gp*\v$,>L]v>o[Zګ=̐ hdTV+{_Y׽u~F?_v_uO_!n"{'*[^>IWZ[׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gBw\޿-z?>O'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽unɌJIܐoyEMi=boK$[jĩ'h {E%I?jzUA ]t?YT׺umϨw쾽IG MrzyU]S)_=l Քm$NᴰrW9o܁֜s.:Gв:23)9v~mخyoOiv|ǚ6q`EAɽ1} cstDSؚw-q7ᒃZ0IVHӒ{k]2Y!jmp{\qIGUT m`TWeT'pE2~ Jmd=~hNդ)O='h{NrTC(JJ.&ԕ -rk${ejc}gȡ[4-?WSZkX Qσl$gOCrKz ?1#k^^ X l?3DLޑ)?z_t?kˋuw Q\ŒUyZI@Z$|)^{qigt/wuQFWGGe%2tJ=SG^׽u~\s=~7.^+6䁓m+V')ؠ>8[3ޠ#x#øq6d17IT*w- c+/u.h^fX S &%ey'Z.b_. ̣$7}b䦧cX=BlJy`\{/O/Y^#߳qoHbJc`Tõ%[짟 ~ Ac`oKN>{Y\II0~n sݐ.R_D?v.Ы=fIElXVneA?c?~@._b;}H\]yҭ:"zBGwdu,oeveq(OZׂUmlOeeu ʁ^~s4\srlZ$duV dD s$r\'-4>$u#J 4.AR AWRQՔߓxH~u>35ֽ>>L5)ᨤۛ$JʱU0zM#Sumgm|9JeE,C:=t +dFp>{kzw}d,`ZCPĄ*]KD0DlE#j2<lKI4֙pHBln|:\A:Xp)9g6\5DK7J6c 'DQ$%O,xwXր}dEyx4R!'5I0Th}uO}yqw]_.zxQZZCiԃw2tgŸΪƿѐYiY{['DE/i!`_jWRN}nEʼ9O[۫Yyc:^0ip"N-8>s,-giqeB)Ḩkœ:Ail:Giv2qoKtlpz,|tQ5PSƧȞ[Sw;qv "ݷÊ͓4dQztQkHTdN׷_wop=ü]|I6;F%ҷ0cV0Vz}'ZnnvohgkrSIM۸X$g{g▆[MLHw\\7,?W^C?(J?Y|5sΏl?*?.qC{{^<[%+q5/6]4 [%eeIfwX.ǰnqmh 1QVt.,^{YO}OepGR+ &Y@I (ޛW[#7Ep9s\rpM E"r"HsFm; sgwZ2 25WF#9-ۧ/n [ڻG,n;A2qs[nL~&grYc)Qs$G}O{o>o;6Mss]Ch*$nnBϮ흇[N*oi,1qF*:Ǯ15S^5ze)$u7-]J.K)4cJ'+hXx;-MriܐdAzf+usP(Erטw=uk5>6tۡ V ,0iH"I\WMI |*B jqy9vcCg~{{^_<>׺OwvǏij5TI<5 ![CiኧX5.0󷵣{榥_SZY-Ete_e}9r?;$i+O@HB.<݊NIf |=RwߏMb &ߏ/cuEJ*|V~Fm}U0GKJԎ Z}V-n7gAEXc@| D*Tbay{ͥ̚iiuS^%rԡJO[,o~?n?'2G| .O>=U jj'V8P U;Lv a&{ <4TjOќ_zyaap*(Q'k@ uG/ LYu[z/#={G/{F)}_GkZz5?;F_a߿62emRGjw뗿me˯׿1iZ;G;v&פmlcoQOUU]5& O%mk<%vvϾCmV˻QA7>ގ eMwaUOe:ۏ}ؿm`yfŒDjg#uv®E}9J A,R\.A>jw뗸o`/]ކRGjw뗿me˯׿1i ?/}/~4e_K?b;_׿Ϲ_2^?i.o^8dvg?z+,P팞ߪ{sۣsn5`c8s5 ,4AY߽{U|d:JZya()#ZlV2g<{ּt k /XaK7^BҢo|܋u=ܹ};cFmd+(NJ0ܑ|ax,?Դi|5"C:/.{ߺ^׽uɫ~>5I%Geu!:J:c#X--|E%mC~q7k7)*'\8*s-Ú~f)LcJQ,ֿ:O{qn}vةed*;R0i_JL5R !KsNI~O{)`糔dՅ&8Ǽ\P?^,z= _V%^].w!j?+`VNUg* HED=Y_wۮdv%‚ŘYHPp }彖ח裵E[g*Zf9I=$Ϲ_2^62em _y֞ O}їr LYu[z/#=:ck VLY~쪨>rdB,M+mXHj*>`^\}Ww`G,}:Xv;b =CZZbo ]:2[wkFR~LkQUiU[}qwc6lݨ 云ULAFYH ?zܒscWL5JFE| G|ˌ3d6L -rRs{6az(v슍)cXhbEYefI$c}7Ŵm=ff|y–@KHd,}T.$Ҡ>113)`$UUU ~_8hwN4w)LY#,G[S;1BѼK*{I6{;̫%QS utj` -6qZ҂kyIvH+.=mUmsԋA:k"E˴DXir7?LSrjX \{?npx-TG6۸xee-8̠CvA* J1N>FeŸXåh>5ķeMW}KvM-i{ͱ.n^f'j34ITҔstoGckR{az ,fګWݯQB($ܛzyVko,ġFH={uŔO'*8pQLk|۳T@H`oݟ7NjY6ySjD0?r~uN{w{#pT] E=s.DxoiVq>H'U׽uYXð2Ǽ`\ΧnMD} udbt3׺#YX]YXie#jX2*C ̝=Wh.&qk}m $k1nc,Sfy*%+د׾_m][f#UŚHd$UrHґOɼ9cNٺ֪;m.c!*~!?C{xzrUSPҘ6/b՗`tDK]V(70c@_|>:u{{^}j)'ˌn3Ca HӷS)?rϲw{g6)o)\붒̺AFу*߄t; wU`Y` o6<9岡zҧ\̘%N._-Dd4o_}ro^Qqydɣ2B^4( Oo a?sԞ`&^#$ L3*GIDY]C) .8>jU#Tuao, sjϼ{_Ӽ;?Ncq֟/nwぱݎ p ^Y?Y˿#iW&=׺u;^M]N|j%a{b~3LVuSƣQ}߾\mc%j<$4jBџӖN"T3bZ_cBcJJrQ%Z<>=1>*v줂}mj Ǔc!@R=E9V,7de,m.K (̱FSǁ5G3.z˗=/{ҷ;cn`b-MU<|)FqE_{&ߍښW 3njbwNI$GMꢨ&Eןp0}.f۵pdhTg?pI6_1[ťAhF t%>_=ݽ Pl%C.@Vt ?-w D!] i3";5ON$_W|;*Xl1-Gjv~))T"" SpmzcR͸n4dcXb[ HH=C^J6)f9EO蘡Iǝ%i(r3ٰxܧ_|T9\rdXv )#QdւH% F7{6Ig&77Npe+^GpI%Dk@Ѭs5[+@2m)] G$%UU]u]^C!YW*rBj܆G![;TԳI4J$ŝf$|.V.;131$I$I5&gQEIonqTDU@UUQ@:n5 SZ[-܈/GJ!?GΤ>iJnQk_}yVeSu->_cNh?C, I}=u3U׺xۇ=w v\N s|nX.jk" um.9wG^K=&W>Sy^ZSn No(Tβymk:8NYϼ^’ q 62,", ,#䯸|'/Xm[ JZӭ1̤iƒʯqg5u}ftFtnW1%UU5Y( 3dQn;{&=i-)=U eG zcoo2Y~  $֨\E׺Y*儿!'?Ӑjhpx&ֽԚNуB,_z{Zdmm5>0^ݔrO!Z~[z׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gBw\޿-z?>O'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u:'WQ$F j0JMD%IUbp$3m<I(IRA#ʠ|L\Zݠ$A"@p@4$V#Y}z kkT"H*h*i\{G{ߺ^׽t0;Y3,KTlKK cԶ6X 6Ө>l7}k 6 MZi´Jt(9OI5R+A^bdrK%1$-U#U^Int }{_n3}E4ScATyuh-Sµ"JLhTMC6YM ]Wfm,e=\~T@-j4ӎ8#rlio[1,)q(͍^qġ44óYdxJ~P,1FpEkyW "aO{}C츗}<{??Qt]ڴvGrVo.-r?Cnc 7sGm3op^S<% ~aq"n]^$ $j4TETE ?U{5'סy%X޺^ӵpajlFXzg$gi*6z|t#HUUKBkc;d& XPEQʍTmn$fn@@]Ip'Ϧ٦ijgY'Z5EEDŞIgwbI$}44wrYԒ|9'ץ(P0^׽u~_/x3͆13O a\t3oPV$ͯ}ϷN%"ʠtŭڄ9"#xTLTfsfsYs fyL$Zcdf ̴%,0TK^ks4~um5JiǪZj8cU5xqzZWBҦ^nmяV: ,vPQSs+(4 T\O$Sm{ kiy4qt$h*I'kreĆkX$v LƂI |C-~s?97f+o'-=s_[9S~f+o'-=s_[9S~f+o'-=s_[9S~f+o'{e߿)F?^ͳ@t<5MUEE]UL=MU\UT+kz<ĒI쇣{{^׺uQWjRbcY:]u^647[{g޿uB$cX|yс>Й{i2%įI"J~b!0žlKoՋI_$;O)_a oUx "[dV{[p raC=_pWt_4ݙ۝Y̟wU`Cɷb:<L>q4{':)7ɯ-įCUƆӡʭrie%)Ek->re?(DUEQeUU@ƬjOBI5=w]{{^rnle:b>QI/rg1q+kH(j#Y,nO&ŧ0o k+bI!UO>}"mnd2[C+g7bY:jYgY&y$zdiX<ŝؖgbI$IW,+O3w%$O'$#A`* `8u}[{^׺E]_JfC!$:]}^6#tMUмrqèk0ڻ;ݺasa+C ȡAs4 WUut"]8VM͓j,J)9dnLJIa:$J1[kn|,lA*I 4<;nm $1xʠtÉqa餔KM1T)č!UU.Z t7#u,(NAjZJ_N=vKx`( F4Ԑ+SA%Rh0KCpE \j1 Q Ap`=̛/^CQ&܅*x6}zs-/cRFm'?NT3J>oW5SѰ[ {ΚF&x{y3(SⶄC m_kE٫'"ac Q$?ho]*2o ^%7U Pa.lˁw(q<0 #3 RI6חm#?ѧkq5" xE4iN)˜ڶ[HWUZ5juVkӁA쓥{ߺ^׽tUPfTЂ!j!!@sk\27]2@1ZҴ8Ҧ>&G6#I4֕jVh+ײcs9h҉sO'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^Ыz+W[.ߛȶ#!ڛ~/EGJX_Q<,+?Qy{/rwAm$K*+ P+YM >c<)e̻'<2TԬ+O,Q|mm:HOX>Q}}k;'gQYڈԻs('t__4(ǭoC7q<vYZޫ'= {r+/MH#T?Eչ}Efmjg|yPFmjB~VTHc=ݾlsw˗.+H WN~ĵg'zwnA 0[nsNB2際#Pc2Th\pm= 4dQe`#Qԫo=ݺ]HC I+Uu%X|=Ezu{{^׺u{{^׺u{{^׺u{{^׺6wmGuNg={v%$1ekh*,+#C={U|vvk`/KiFЯJ*%Bi-{qAnַwW1xѥ )˼C)Dɚ 6oX,~.jFÛ)NؚzS]=U>{7.y~9"(̯2 ,4ECxL:72^ vY&w܄>!m!LQƵ"q^I Ld43IJf&jgb0ӬxǾu\*$H$ }f^)q ҹkJ^]a;?ofil]QRWVɇO  \USL!pVRrW^ů8mVV  xs<.ͫZ0uPhA矼#r?-_{w}lȖ+*#YP$0AGRJӑџaW  7D-S%YQEdISUR"Rq>O&n\|ĤmMAlO"!1F4t2K1XXduzo5j-WpQE ^tMETޠ/T^W:]{{^׺u{{^׺ufURBYI$ &ǫ>4|ΟS!10NGvGƾ5hb?#ܟɾ{DmB>]it%E*b/NЄI0U|l})1o٘\ HG/!}hqo;ͳ eЅ<{[x E$ tuTYw;7p0VSGco^܁O f7Hcv sRޚmmگl/l'#:SG/ݻms}esn3Ẩ}6Frlo]vv P [) g2*op6˻,߾6sY\MQO"ִԒ* *|krnbX$Ic?-hH&t웥{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺGG> v]=Ip%!ȑQqX -GQ! g_vl7כl-o2E.Z&ԁK h8\,r[]+(uƄ* hs~m}6#ٝonaf5<P'ƣnĀ${/)ͼ`ǷZ\6!i4]{ d'Lإ~$\iYv՚A:M'}rb _ClW-\L }%.:J R5ag>کxo+̟t/)s K0][(O9'#n6[2M GFjd@~ΪWz `n]K\}M"jd㑿!ѹ#~1&ܘdݻp;.ۣ&)23[E @4Ξ9lyۛnm~. Ios;4 M }ܮ{>X[ZKpni]& Ò)mR0s@ iN7u^q}&EG,R0`=˻3 r׷2WLPFԥHD W=L۞Mo71Yۧ,$Q W !?cL;bʹ049LZlO_!YJIM=j*Kiيd҅2,+9sc].;*FIT%+PiW\3ZIl$VbMrx b .I ~EwCmiwmEr!WoʩV$gT3-5-,SMF7[wvvAiFOEiR|8Yr&q~~r,X\.︀BlWp@,fIkK0T[|EQQWE4UuUmQHA, ӛv97ՙ㳹ffXd*ii6;-uVLʵҭ,K!Uh +qIa:u{{^׺u{{^׺g$GY!7zq4 <*"HaU.h$Z$*bPI$2I'Nz_b[gijkl'_F9PTbr6J:ﺯle5o(s:LQzMpOP5܍iC%'8 Xd,GJmϔ jЊCԧ\TDZJe3o?p4ΏYni\*M(= 3yV-v04AđS^펡n=Ny,~* =K<p5{q|?{MՁ-Zhdݔ$aPEjR/w*sd~/,nVdC2;h$O6''gnC۟|SRf0Ģ):hH<{&޹_l@aqd.Ya3$BXUdȪ$COnٽ׍7*KJ+XN=CȺ4닺FvTf6Uhlx tjFW"Ab Ge4aNAr׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^Xax)ix)iiQ54 ,H쨊aUKTĞRI'HBI I$$G; >(>9v\!K1eG6t ?ݷ}ڽ6ܷxFmoayovͩwx(p|9[.ٛk!)e;;7r4ɎuՎwvr4{GϞ{/3s,md-ЛYYx@H'dNM@3ܣWysO3oq,hȌKc@:,Ꭴk* nXUԓjWIl_* o KܭiҳڹO\c dD'j \`6Nq},VɊˡdX6X~_&+Do`X &j_# ذGo r]I;+uaݱUsQJ$A${]/kܻNWoL@86HQ kD۸dH}x#kUGI'go#w^5&omŋRHP!d 2>-epj-x #e4 р4 =KeOմ©,NF] SN=4{+_^׽udjڙ騨镥F$Hбj-nof[{HIUPI,Ɗd3dt6f**K1 (d:9|xu f,MQ6k3^SU8)anr@#@[blakB-Z:;pΡZfC߿w?DNMvQtXQ^5I^Wӻ~,S>7oiqS~&ցDJm-TbPUKu{ ߳{@.9dܤ2ͭ\!gDF4eiOXp6v&eBښh+3;j 6quu"t:m$wDvY(XLjWVbᬡY{]X}G#{d6w}-\rGk;$VT Lhzn>u˵啽 RHUчe<=w =O3־_mP / oc~۩Cfk'4~eme6. j7DIH "s{y];yfMj5̶āYAԅҵaTdgyfww[-dSL4@IRw8Fsۘ\\qXF&+SMNZ8䨎6* YIsncFmk[R"FX* ] Or+4,+hHFb 9-=ѧ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^Ѕ;z[쾿VUR7ڸ܏%3d+(u0G,([J*c\9RٶUޯe}mź3[,2"Qw s;U-*Ni]D ROq7ƎY.Þܙj'۰ff䫙Ui3~q%u; $v+I,IomGomQE *FE@!j}iӾcznHr|nJ#_E\s(:yDXxUEUU9w7lgY.f (M.lv{7-Xr焍hdVZTA,$wIz6wn]QNrFtLSueLڤ_3~}=s7w}Pv`~Ϯ[r]3u<2/Q_?wnS{VA1Z#Gid& >/6aAA7Ӄ?}1SgBfon$+P)H%h T"{퇷ynmTKq-4ঢѤ"_G81<ξsj{kyWZ@ jY RHfuP>o 9Xq;mfrw?lno_&/+A)H\p}+xگ-e1\JʍMI$lQѨHԬ A=u6ssƒ"F镁t컥]{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽ub%MZbM.>W,ن 6@:bEp8MvQܭ8Us 1'aei?||6xn춉nJNzTETgPBV}۷=ZӴbXݜS )#\N}nR|{/ɤ`pY4} v>3iÐ V.RJZR.O7پ\}عh@@4\zUz߃ik{9yVWCCl{/)jDy߸,,$kj3?*i1?"kP>X w+Z/Y8 Hɾʵi@|?f4X|q}{ߺ^׽u~{ߺ^׽t[ v!7N0Tq䪍gGe4VFXј;۽ñ@7wN#4ff42H[|2!Y\Q'**7J *~;nŗ!9^ٕR2dBsy&e)aI3*SFW'R{cg*I/C}wnGI@{Kv8Xَ\4ebG-ql +k|4 e)~EG+%DAC0>s@yiMhjAfRGZҹoOw uVڵف$d'4lIܣzzu,b@b@$&++deeapC)GTх^ C~׺u{{^׺u{{^׺u{{^׺u{{^[{{a7 [Əd2`)azRHy}zBk۟cjʻ}J<$(+ : s#Znbl\&cjI-+SJW0 r<=H , C׽u~{ߺ^׽u~{ߺJ؇{ZvΌ#]ɟ08y `W%3~6ۅ੡iV0"q=9o{6biǩP)փ=m;~Z}iHHR%L^eX􏢛-|c'$_tAo*S̯vWrOxQ F~<o$Ծ{{^;$RI;,R!ԒE,d2[Ƙ-I _س˼4{%D϶ w=Eݥ4`tOZ:Fwv<k?MKOB7F?E%fWQR*Cc55m-P4* /`eMhxi9WUDX*!&jsS!^4\r78eX*I 9}қ [n\TY,rQSng!'tm먤o$2/ 5E*2K.{ʷ\mj @"9bc$r^'th}cn^<ђ5*(8GRJߵ[w폚xelո~VZdvfl%l<3^fygr5#\24oBrF4>c=vWh-{C{3C<ɣfZ ؽK'$l\7]m#2KOKCOO<}F"{- t++>0A$Ǭg^m}ک![格C%SS;K펡T"L6>F>8aɍGE%G>Qj7 yJ~@]"H/?!&'Co5>d$âD|ukuKhz*i7>ifONw '#3T{ƏqK7\׵Ȗ .c+5$&u"JRFJgג}&9_qInhI47 >#G'>||_]Y8\&Oqdo`-Y̞j):wgE:{UO4nTo4L̐P$zdtr ),{^_<̌ "DUGҊΊt.*,T~tzz˷wnړw͜ujɳ% j9eFHd(5*{ [g$ Z+@Yc5! 1HK ]",=9fȀFYGm L Ȫ cPjhI+Ga鍭k_/ia7\%ڙ%DPTbh30CRp@ {I̞r +\A5˺'q qJN@cF8oA5-G@Hy"t:2Hh][u{+!;EY+Y8?ۡAK]YZOCA9e!uf~QeQWi!1 BA}ttĸ[_QHRYVYAjHR]MpzaWYCzMGPSLbp)갰#{~noQ)YI}w-H1fbB")#TTeL{)RowX2HxE1Ƭ憃_佺2t4>]S2E,K1g*VDVo J"S)3<.VTⰭq!DW^ _F8|}w䭤ܪncV*U 9ѓ#k2(x.*mܓ{vq_&J!m><vcTs<+;3#Gܝuzg+(wF#v|17}R"աEr)rp*DX:euWFWGVR.H*Jd9հ&jj[YJ.5TrM rIIRmQE+&70,EЂQo9)=E c.Io]JOj3p'TK"{_f  0kƣ1U|<@e [p$֍I_F_u]J6Q?íQ}--_JjzmVXj6tRB%LfS#pC?laF[K* HxuϽ 1ReSBEU2q`ڞ])׷o%~ڻ׹_l9GUxm?>8<os[kl᲻qk#0* g-]-RcjJ,($6}uK,qD$ǀTPYOlrK{x#EYyd Vҟ϶6o+)cYi*}QrxqTRi}gopm-pqiVx\O5D# >0Ȧs;YreyXZiq MkGlw\yaH*-0hߜ7]KOJ+.usS{q[$Wwn^=ၡ*pض] :+I#c5MPR* 41s*IrEF 4+ KHiQ_ڂ8 h&CrW2\&vR5&jJI OF/*^H ii"C E5U<^9cud7PA~{Y r!!#xzʅeu! C*"2$gu~{ߺ^$(,HI<${A׀$u]wWt`ؙN۴A4bGlnSԂ泑x"%D4bQRj:r_}\-j+&FVĨJHdIcDU2sE'Nb)i)R@V{fco+k>K/Mn{Z;"lA+XBF9F`^Y ¯?} 7dv;-ՈM@Xc_2H2X?!{yʾm)rź[.qydMJƤG4EH7dV;y-̕͵(gCt)xgGݻz-[{NFIHeoGa}mmڽ\ 2,dpG:ؗm|=Ւ?;ֺ5Ud6Am)ia|2꣍E]4s4ʵ<=S}7qn?)mFirBHԴL ѿOUu :ή@\ _ڼYS9ۅ':zi֍b+_V8sSTfY}+-Ue4/2M9#pYg8C+@DІc"+ٽ1&{!i# wfSa+UEJ%< UR"4sw!s3n\‘\OZC,X"GY]r8]gid$5ٖ0?*1 V ڑHep׺u{{^׺u{{^׺u{{^׺u{{^E%]MeBfVdhj)zz @1Ȋ0"GZ]Ocsh& <CsE/o0Ԓ+# #[ߘ-oRush+E~O< ,cqMD xdF}z=h{in$6OBVT1-Ajb_{QѳG+ yn"<̬B0"tejnMYsun"Kl.)dKf_} x ?MG?c 9}B1z~bε$(,*%\O+$uW +:G:T{ff/5J*idQ6Ft fdU Rvody_۞Bo}͉Ze-E-K:ǐ3 LДV< ~`^n{x"y47W c+m We*֨Rϖ޿pG> *PI1R|YkpǕ{W^aƲ^*Nm,ކI5L-sM7}݋v,r!5O<Riy{{u{wJ,ć $ANPG"ёg'ffO.ۏ40$󵤒,_5R̔u+OV24\:#b@X\qZ,a:YkЕhH+)LZ또aV n :E2yiܴĖy4Mىcsd21$MO|Ϭ뢌 :}{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^9i嬍FzQA~'aM io3?ڋDwcPI$XO抝?nڕ>ëc7tFSbL kX@HyEh774մ\銛{6ZdP>du~Wܭ)ENC{,OJZXT1GHK$aI?}LgdfmR32z?Fl vdLƎ;& V$ {^ƭ_OܩثE7"+5>^3M_W`}}kzkk[C-?ߞ? GʝPS?1>FO?U`o9ފ'^|˛#14}\įWY쀹r_-+F`J͌5}Mcn*\G_ ~)EeW/cOZȽos}u'[E~R]H(GÂQ1\|Zo_ʌ&4}WxGǴ?r?sq?q>Uܼ*U6IVj[*MP9:h~wb*zq}wGȭ-&?*{`Z2`O?h͏kg{aphPXy>Ɓm r=)VnD)t'Vq}T+u{{^׺u{{^c#_ |Ȧ}e]-\:=yA-HJeWإ8N/ܻ맾BṆK@ PJd`6LnE<{qooVo*zN&"RHxx&LhAh'tV $2n.ɦV;RAfB\@><䜑ulr4ZA:eZLgTVWx ^'pro%Wя{,ѡOJSVcV?1%u{YvN}hwY%<ŕ՘HcOz)X{r77ldrBD-eg^Gܹ/^rc@JkqHD>LOV/%KZ˳q='~t&$!t366 m=e%mOc6 >5_hJW)Ӛ7/g֎[m+a<)D"Ji#G*іPZ7x؏Tn? ?rhx>ŒEkzWs'u/̟B3q;w+ػMn kUJɞ:fc4Y\GMWϗ6R_?to[0Ann ,e13¯}}.yT72ʖ7@FbTƠIeћR Ur=`e{swmm1QO2Rd–BG!@p7$ٿ\sG3ڢK}q4챀ZY QAcSv~^٭6V/1@ĖaĒIjj9}:Ltg׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~s!,tO>K%QOA$EAkg@ګio/" #UX|^hmѮ.ܞTb~AA=mCruSΝz$ifX3kBň'Q{Sa-kK+M# M.Mf_PlZi!nͲ w,_U2UڈtU>aݷ^VD$_䑂bZ;6{~OmLRӟ%4k~Ap3fr.u=ZC4#F0XjMbؑ-bHdOgGDV:-gvWteh"}6vAmFP$8& 9Y_shm+w+X&s2:б0ک '?:ܿ_/nm0+(F5h4JօBom?-ۻ;Q% L3wT9J#Qc-}$Κdz~^趴bY&TQLQKKD%l>%~@oCPKI(B)45]R`nMWhnzN7.-'qS&!]n1kVh^+EH}_vv-7#xۙ&OsC,I xYƝ*kMk.YmI0ȓLY3GuwSI 09*~wo d5̶''MjJ}r4r4NVHB-<~5iskuWDH*#+4#e5zۻqU C+)YXT2*Z6?zl6h6mRmJ嫆iRdjhqyAMvϾL{H?xn#+-e``a3x%K;j;>GI9;f忼{Vkk*7N N$YȠ X*o`|߀ͫV̎ޘcp͎ǪP,$Pys0u6;#],J EQh?:*᧾k"Z #Hۺ cw :Cion,lvl" 9LqQALV]|(aoW߽O||M͸El",ήܤQ3ƕ}}ݽr9c攑ⱖuI7F m-QW8tZ(;{|n6BhL6{o&ߊ* ݷN*bIW>n4~k+Z TTg&ylO=k8;y$ŗ%RJi3^=:Giv^Uhwӥz1s89W%N9Hd_X8[;sv\eK1lc./-pUk< {+l^fa G߲id<'M띅2ϒrGػGj`TY=ݺ GQ_ 0u y\-|[܉%^O1T H,g>gwf"im^!*f%#Uc~{g٧Joԭ>d)#O6^dHeS2Դ dx ysǿ퇷Mdm}u,Vf0UK2 ZmP"ϓvb6-cw[r[譥Z#RPMĥ070rY|y' JO]۟=9y79S45Jȡ'Qx%@0GݣxgV + ¹Yv+ `H kRѲ=eW2c۴ͼmV(f R_ş-_ J1UyS{p 6øZ1JIJKM,r?g;NrWy+:.##VHɣUQʟsNr[R:I&1O#JRDuSB?Vz{c#[C⶧d&#Q=&j')HNk}=.`VA,H D  H\!k?uu9b9c6"R1hHA֬UZ9"YYeMn_/Sn_|?v6?/z'sǷ?G =yEї8smOTOe_i7U6Ăۿ^]IӜ潧'[fO\G.qnw콭lBf6*$xw=Roj<﮿P-Bxٗt|.|t I}Tӫl, r iTF$:fl <k;jNa-yY׾'5QCs@ uo %ϸ|&ŲF`b {n\5 "^Gx}+~L[~,S[[Ⱦ#HfWLQ*Xve6~3.e 8*Unn( *]TV[_G'f P7S>VjqMWZz$E6sw]յxs+D݌MJcCuص|1k h]~FVSAh_/ܐQcSkh=A3Of-ɤSYTAQ؍v|ޮK{V=ndQ_X&+QYHqI"~=ZjHvi6imYY4%sFtoOG|ؘ*+۽ICK+"*TTb{'b쭊X'EuqT+x,G] KrHxw=_JdM.jc)hxrhw2:Ύ{{^5n<?9oA_4\>|E2>"M]H"5xaÑiJqTI<F "cqyG*r Z( +hRBcDH \x.gŇ3k}ЖUgd*K f`IMښj~JUcx̅Z}yb2PЈFPŅ'9}7v8?:6ꦞp;Mwm;>mk( 衊+AUC] 4pz)6f F1:x梁M:gKbSlqݏ֒ʬ'ƝĞ'ÒcST=k7t{^5uC'ɬY28jz%ᎮqԱrGM~xMfF$ƇmeJ[~l~JȦ/Shb|۔SȌERؕ;#iHM^)x}-_|Q^?@o4Lu3nr-U>bGH?ɾO@ɗ:hd~Hϡة(crJF*C]ϖBDWŔčJ Uy(˦@ܞ}} j@pCZ xڏ'4im[i꒷O#죙9j9Xq71c{cAgks=/ j:2u ?r(o+s6 R GU?`-]o 1s$yk VZO̞`v{9[ayDO,eD<0~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^йl΍nHwpu:@BlU I܇._u-g=\FO+~C?Gg=uSCoav'be🼦IU6iӍZZc7?WE>'e@]AOrۿy{Ͳ!Xds-In>:ePYURH>T&=up:01KmUψ`bm*goߪfSŎi*e"5H^s׻{mܹhX Ym'ĒCUVW(rGMDIR:T44$N=+>7mNG P-鞑䞿ugص%FFZqg*}s4PXßU-[H]vv-YdSP;I4ڵ/:Ї|nPkq?wuC[(yR CX%3f6O_Ncvnv7cKe+6ϑ;mvUW`zNwEC0da jMPT,Acr:yk_f}ܝj9w o qk$ʬRJc "#!0{g{;fYnbBf2/UY_{糶^_-մg &* ᩅTy9ۮa9խnWSn WFd%jAghyeyjn& * CFEԌ *QN_peobrj,~9zioFۓ` 6zl-亸HHpfbpA$z7$%K{xTʑƣ; z:nO}qf~iXLu&PAP]`}WPYBՇWhYW;sFf& X\j,qM*(*|坖rmISq#"CK(a@e ?YOչ'+f1[ Yڡehκ֭سO^&\\ňFG SaK.4%hL>Zɶm34m~6 WZFQWnvEeU:!7ىLG#(V8@w[c7/zR~k]vآkeViL#FpDJ)Ti={9vm e[ebwDB RF\4V\עp[gxEqgu=CO)p90%yZ>dr?_x̻U7-ybIt(RX@pI"N=im)M,j2(bAR+Ap$'}qǣzɪ-׎랲!w M#U$ԏfԻ)Q}^ OJ]\U6jcpr(r'>;'sAq1D}P %~G*ʭ~Vvgo $f4o]W Uk,̲!RCqW̞ivOݶAwcr!=l\ȗs9^m?x\̲JTpfE`APGGwb|w;_pPw\p;7+%bn[r롛7HISO>6uDr$EC(\{YVu/"ovKv٭-.&xlKuF]:󄜭oȼ۳~빞.D\ͥDm]fKFe pR7ܿ'ʧOQY璟?` xGS߽=Ե؞q+/;<B})'}v/\o2-rrV/R{޲?_ڈTo§۴/. sD]'!FG{GvsTUkRȇxvZl-LJ~~0?[^%[2mOu5L5h[N H! 4Tt(`|wwЙ_¶ +zPu~lI^$DmijBE,MI4*|OOrU 5CS~EObQ*'2h1 Ǫ:IZDeGr `r>O+%H#ae$Sǿq~vu% Y.谶/%2 My&`C$j&5gU1f7W)ji6F7I ڻ T` QIQ&+m Oc.kpSK$P{F%e=[ 5bѱ@b]Z0u=^HyR$ex@S*B#RaDUI"cRO=MJ`  R+ASTiWo`obPn휵Ll('jE G2E'L>r{ /< fxuP%S&_WQIr{n2)V@}{^mvj-OT]rH {:͢;:xד TTk #)-qgnw!wK m!izs hh7Y=cM۸,4S8yko6 Ŷў+oJ",^p,ؼbgIُZO$ZCQ[U4r$M$=w]\s+gbK1,ēʼn$rzH(" *0=^~{ߺ^5SKUNKGsyCvmr{Zo8}nsr"/.`A@uɏMV>o,R{hfoԆ>x!hgȞژn X7MMf>kD21m6(7čGH.]4sybn dќ7"#,to6G'SMCd2S (?,Ȋ>6^^EknG,I:ۣ\1 <,zڳ-GNݕEn, 1<ݮc1 K."#.f!XӨ{ rrscZGpԍ4E䵆rAg8\fXex&ݮd#Sĕ]݈UUx*)WvܴN Nm#}S ^kI qQ}7=8.}c$vQ 44qd;}6Imm}`$Iw/?U_Np²Ju-}9R[?^o,v. n3,mńZxhhf>PXtN6%)cip%($2Ei1EĚDbBY[_>XGc]ۻ$DTJ7Vd)Q)IH#R FbQЏY* j<#F닺ƬʈYUUQrǀXQRz L/~]7nfm|sZ:5;X2UX9R:}A>:̮'uNq_<7PĨ$7WѶHખV%t:ZMC'}N^G)scT(1qPX!Btᴺw _c>C23C1=\m}֍ԭ7M\4:DB&ʉw"}wNb{:ėi &G!WRK#"ETiP35nc W֛|NwGl.KˋYg%9b3^8Yٽ-Cqگ3G(2Z@J2@6 gnEܭ<,Ņ U]jӹ ><|Q_Y^Avc{+uI6'ab: 3U*eDH7eiw~suICWpvQgQW>r&1o,K4JNtksivAEΒAd.DS[#*ʨ$?{>v~^+r1nO$!#+K5(JEU[-_\3ջcxsܵ2xlj\EdbeXJĠ.oO<9Yܫ,k{jh7%eD$:}=;Ϙb.l|ЩD5IB,I8!^wۡ?W!&7zvZzڼ-3}#nZ:tաcL˟}¹6_ 3GБP%(2 ~t.K\^=cuK'DnG`f)]멱lJrus jlimX+zXٹ.Y )$Q2A,BX3j'_r}d͖qtagy%y zde l|==Qfٙ.Waa̮S(2[$0~6jsMx!)$|N\b)EdO ,h AҢ4'~m{eo#X#22B$F@$կ|kZ=.[:7z`kk %KjS7OMG <%APG#6q6u[{du]+̡lV!]rN{V[G4 (gS,;0>rBKSHO]:+>BtHb>O{zS &>jF)MmX2 zMٶUylbi.Yo<(5ē+Pw>j=Ϙ!7 -gXCH%H7 44S1A?#<·rm_Sߕ[p*Mh)JG.ܮI!$qs /ΞbW,o5mfa"OxZ 9#NOښL d]חov7"&B0D?O@-BqZb28>_i>&#$Rc5ygV!R(б?A/#^yeHY݈UTEUU$ԑqqogo% 1)y$v**$V#K*bQ6Jˇp~n@]62F6sPm9oiSrso,Cwy)PC TTyZ0Z8ir#-kMncIˋ[8F+b s*迋 >Mn;15|<ݍ6TX=M p_G0#R[O9;*Tf>n&oۭ&0͠([iZG7(F/skNf捏kۋr K,%HP5T:" ~0Kw5QPQĬɉ[c%,(*v=5U41O,~9dowgy^QHBM:'r%PhܯcTn=c h^ )h،0⚑fTVweD@YUU噏XQRzI=X/[]_UJ*}Ӿhf#PsM$qITU$dK3Y{SCM9{=iu*L bPyd7B9MF>{~FmmW޷5mf$丣WiHcWۨ?^TTmʯٛGN=IUWWҊ:T-X_0rG;e5n[gKam ̫*\H`9 ~r۶۸c'`EEUZ*I g ueYmewV w.׸ikvvKcûW2 [$3SIyeNMWym"c\[ fjtNE+yp9v۹#HRKyї‚X$USR2If4w̽C@띹z#wfb%+rH}e{{h4{d6G&q̧Y'aؿr?c;.7n. 8^?׺uhjjmKEIE j]歪qOI "YePԛ{~'8QK`4y׵Lt՘*ƿ lOq+Vr?Yl[3n쥣럴ZH}u%')mjf665h Iq,JAw`h Yq=F ˝I,qEIwFb#TG)b*{`|r13v VsjKedc%vMq}HH'kzэ"kF/v>v8d6,sSh^"y7逯]GUpCֵQԫ5Ң)#"^aMygSûX4*(Y$R22͍{yf u1,rJfPB ȯF*GVKM_ԇ5Drx.C&q%.&W\zVyXZ4>k?VQn~6(^+}iL~ Ec1 QPϸzͳao 5ݼ-Š|EiCI{wP+oD汃$C)b n$S.|9?xy3#x͹߲v\Fe Z!*Z7%nv|l;hf>Sl&Jɉ做;ɱr0r{ 巓IѾAQH4fѺZEc_WhE Iя^jz:ixGWU?1WHtQPrf4r ~YzS#D_|Xr!`By" b%c7l[6gY췋mQ흕$Sե0j5TWW3V8"y\Ef*+AMwv#oP['"O3 >@T!ՅgTQ(_Pc*=gpxe_X71UWS o&}Ƚߌw[lT.&)^5Xz7Ja#5b{WJcvOGÊpc4G 86bez :6TԴHI 1[so6V:H^ҠVi1R\@OMD>rTߋ=OO{m==twyN%Vuv}Oӆ]=cOޯՅ8sLj>sw.-pE;J*ˠ&_uG[NŊm@?0Oa7(Sṷ5ԓ#-x)O_tuT-?U`<.֩%buB}zwa@iho[C?w'ձ1dZοʽT?z =ߛ2ԫSE[R<&iyT51tDޖ>܋9(d 0xqh@.9Eruͳl܉iɒvi ?08R5DW,0K,TI-L])yP3KPO$}gxy#B점A$ORpĪ*;X֊ 4q45{}ӹ輕FynLYn,zNs$~=Sye߯9qY/yF%s# 53M߯bMeX,"E7s\[d"}o+ɯ훫U3tj͗]Ukf Vuo`Ć2դic<{ݾlbV󽬶I ЕӅ#99fܹ6o'."zx3E{zi*kLT|~ܛ/]dd/4`)KoQS@Nl 9}nk-^BiVZ9 F5 Jr8؞h-¸1]~-Fu.k2|H'afS?~W O܏=ۺ̏ +흊#t/z3sǷ?G =yEї8smOTOe_i7U6Ăۿ^]IӜ潧'[fO\TωCIS#R-nٝ=fڦ|-T24n zԂ XyWqmzK[ ٔ0Edk9 kCԟt^Owh./,l`hAA!R2[HjJWW[u˟6;p^?r]r}p޽mKNԱͱUnf9aZzaZc$p9u[%=r=ycimfdoUUĆ(ܩU: Dic}9nyX!==q3Rnu%@n| "L]u!ɯ훫 YT|{ޯ;t_ϺNVr+6Nv*Əҫ, +>g7Wߵwg$NEDhy?}Dno#ArhI{ JSܝO؝YX~m iRCWxDIS᪈l񩱷ULF7 ia E|7e>{D܃?cjκgjĨ1i-5eb0dh**1YPNԕ0H;7Ik2xةSH<p=v%tYΨXSun{C)VVR."} Gׁ u;'Ǿ;o`iIOcD zHȔGd5ʭR)F~soѬ6iVxPhx^HNCo=s6~YMĆx+ \OY-̂տ&wܭ]SCQn %,;o#X%K$uH6ɞI&`ߺE> VNp2,#E ImbMqO{@8LjZ6F ?u]$ݭ)02U}3\;1XpEYd)If&V{O]bRk!(KG*1 ~BSɷ ewQ"No I{{^q]'9U k(1%;9Pp{fѲ^ryѣjZuYUfsǺkֵ u)mi#JU RqrKw̷:${|ywf~4Vҿ'TTaPZ5R_d^ >omޯty\ Y:|L9_F!z*YUC͞}yl.O[Q ʲ,lE<ĒۼX Dj14eJ4xڟ̻TV-reX&b6}y~`y $]xv# _Gw>s ߯wl b!%+< 'd 2ok[}nJh2Ae0*Eé_yۮDpD^7I5&`T+F?SwB/U/cvW;tj^G +f QJz(ٕZERcMr# 9}>\ 7TAMRHBG2UPC͜[;tiYޕċWB!,PXO>61-S.R}TiiuhE]I0YY.+*2|{e=R͢+2m{*5+1FTP@7<5ԱQ5M A*FPi Q]gzն>+wWf{lm7L;&p1U5t[bҤuTdU2S~S<{_-8ݭQ4j0T++;!2^lrm2Ms#4RgUh.T%Qȣ ͩ6&;'x*pip; VcyJ |s恚9cn$x6I#fGRqSyw]痷FXڕWBTUFK# 23)[No]L'eET>L+tMMS[UIACKU_US+RPQR4ҹ Q31A'uvvQʈ 33I,I ,PDqfv!UUEY% Չ?~hl;clO´8|ϳ2OSml\dݖj zXl=Rعmyޭߕ,"Ch[hNN<`97X}ݷ_jvkDaof3cS#,Q5@I[P=>tƯ?#7}G=#ؕfg|=d2bh("̖7 4"FGn*$u g?\Z~n \{hDrwFݚJ/43GW<5rH6$6Zޝn#hYCP$ DI( mJ^{CvdxZ71OP G P*::u{{^fYȭCPzjR~YF5Ru]1(}Dpu} ĥ/lpw;oS=歸=K{ {Z5F\T_ /}^^qoi;ԭ[ۅvS҆sN |Nܴ?ǭɕ:lf;vl5SXi)s9䬙TPGFo{˛ ګdVrNE%iԏ>ZIapUEjxE8Ѥ2smNڳceun[D8 XCHcssӻ %Fs6ɱ)Z;Cs6ZP"?/'+EdVmkv&jUoE*;Ǿ|u KϬBhzN:Ր=]]>Ѡ՗\}Lj>uap]Q_ZX$}{q,k';]9Ht Vݚ4Zyh%[=aӝ.O]0 u:(EQ@>":#3aw=ݵتZM6CP`6_>wݙ_sUս]uUV h* =`KHBmk$0[E I̶d* ]`K]%fsifP)"YT@\EP;r,=Y{/Ȟhit=6ij-G ̈X>0":ط0L6gvA/hnDuh;yؚ:oo_i컮ռ2MZ fJ1ФT*tn /E&{vE&|)j<(D$*$Rd@NO9'Ǹ>_ `tYh`qUexiBŧHmO F'H}Xs~y+˾+lXC4h%$}@BҲ+PoAxsHtp>m]++秦njbim=K@pS`r\sl}nV8i1K/E., Y`A&O*}cj .{vW'xy9r9F+@34(}#>}=M#[eŚF0!ܐ>c޷9_l簲(h)|8cA$+EXI9>}U[' ͲǤRm NlZ* Rکb`5{Os~r5.:oQX۫%ʨvbĎ,ܸ`B{}Ƕ!K(Nʅ~sp4ƥ7:YXAA9edm,(GY&A=w{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^\e7On2:ۻg6폑B52{O>͉j7XDP+r;g;Ԋh,sa8ß˫f=սu~>SݛwvvfEG`NCr?⚢Dz$SJT$*6K}y9K{v=q} "+;(àȬMPuv[~a竆M5ŭ󵤊fTĄT!TAv՝kvJJz[ㅋi2WGyqnzZ&´˩%iTEyf{"+"E6+|tbnm<}7Sc:f㧤肓'%=5R?|xw[lOi(б *;EGt/#6_/e+E oVHVdǭz kr2rp59lfyJ!<л_w}|sn%I,H@5;fv YcASeeeǷmoQ"DDT}t=}=No~3ymNAih)kjh̪qPD-墑ю{/ZgrTKFX*T@JУȆw\/o%g{v1'3(jN=ʮeR6K:L/̍ ӷ㢋FcEꚦc}Lm7Vn֠.F0Cȼ_|}/9nڔլ 4ҸS F'@M7Qf9>=n=1{OzE^G{v&"W䥩40Xus6Ž^7mEy)W2L=J#1ch`S"^_ܶ>l&7-eV %PjLPx re/N,KWkomV}]fѶ[zmM&1cN'5-MkHPAmӝbw}v*_cYk!*8өk^K3.[e#ohmဈW"Eѭ;A:٣ĭվw=56Kwc6;õsv7ip+\h⭩Bj]O_ yWƏ{ q(#UѢChi"H vEi_ls3+k]mfYm]0[ZKY hgTQvgoN lݵ[_ i>JLnC!& tBvw拾kI7NXjKhEҪM+K_vnM-gmT*jvr@ަ s[p$-tD)~2t4̆U{˻I]Z?Ȏ0:26-o7[FJ$QCP|˭?_T ִkvVjJ,xE ɩ~9Ky\7Y>\YDڶUƯ"ic1ItSj7u!km/[` O]UҴ*ח;ngv#1cXk"Ը ʊ2st /9>X/a01I,jYX]њ& %Hn<4BZK,BY#FT |D` "gV/Ղ{_߻ɗݝ9\g)nm%vO%$e1E{_>z"^ߧ[mһI#KLKP|o{LQ[Emσ$h#$1DT~.Ndȶyw-h zuF`z(3?Qr}* ]y/H;ew\9HnИxyZۅQW\hU{~?sGq5IW40dT4\_u>RmiW}+!ol\`ԟ>X8bGs$$o$~,nO)g:3XCyj7 `v.;zw"F~!\ت<+PV")Z)2~~Ro4lS(1:nMa>F8֒N+RecO? n^F﹫[`J4%G n$2%M7Rd'ԙFTCsx9 Sh]oNh*$RFc5q tSШX ;"0ƻi6ɸ. 0WwbҏV*LmB4%#b.93R^E6qCMB`C :1*5$YM_PgOmςۓ7V?WbQn>79$XT:nmw6޿cos"KBc]#uOm7iﶳm?Mz}y4ZӎQWj;4QʟXE_qXJSiե+7Un(7;K3UBLmS4O(m=U-dPٯ7^Lw7bWmvǍƠ4D@ݬҵFUkyy9×}kqY#Ư cx噩Ur de-ǘ<ˉs3Yy_)˕?|>sn;kGڔřTiSǏY+ggmY÷YCoEH"Tt췥={ߺCOP?ӷV=y#4oC ~MSFCy"?/>,=2v^o ?ʽljfKH5j@GvzJo`O^b\qۣ~ZX^x%`Y)A;A+/ |;O^׽u~t쨬@DRO*'o{ O[A-Y~ |}۹טWY ޓKTp 6@V~=?.{%{lkE {rx`r /|7v>SE[pE0AT1C֪_%۟"Mw'cTOQtԏȢG?Ǽۤ;׻Ǻ[M^dphC~hT}u#}m۽l8>NaFa3t6|]$z'5-֛o>ܒ@nSx18zڋG5]u]=<1ŮVVA <$}}{Ojݮʏ1V7f4̂5u;f ᤎ~gn+krVC0EQHѝD C*;w몳Qأr(%;kkŅےT%VFZ"< ":șٶ] E< Oc yIH6T絛<;0sD&nR8HYT Ko:목Vֿ-_Z'g'5UyN/-ϗI%CI~C.Џ|wmMq{[S#;1%ēF--V$V(R5^ʔf='ww?L͏5ttwYZ+2M% 4d)>V/$1Cݺ/[yNco6I"A+]WI.̺*Yiq޶(Vwݢ@UƢH [b;?2;`5,@,pUol ^I5NW{A7/ʁW04YH N'\=Ա[iZ8C>dtn??ld>Dv",uӬռ12n<ޙq2邒բV@οs/5[I4Y@Tuy0C T(Y+:K}ke1_]Ǯd4x qD:՝!Z~`eJvKfã7WڸYH^$dJauRdT_qޯߛtyN]'#a$dQ.eZݶC,4o4ᇿwh}x!r^gao j1)Bt+>G8:s{'p"R`(%5V VePDrZIie}=*69jV]^RMC jmm9Y{{wwˏK{8H5i}­ "e_CSlOz/v-4e&**MY vOym;cۤYV A R[Ē:2/hD!nr{#EoqSXQ\荡HՆ̀f3-vwaהS>较)Ű/S9Lux @.TqI$8?+qRHҭ>#%Шe:&fJr//074?DܔmUW5+2V%U@6呵Yx6ds[DkoN-P-LAN$eT*H$m{7/-yIWoe{ 乒׏H0=F9y;WD G[ʐ#ӊ+%sTj{#^nov.:q;z=na+ꧧHyd h9yu워ֱ$q+HQ@R5\] [}!/qy|Q$1-$$-bHPMnV%xy(37K3rtj%O<ӬM(\ wvؓ 4?7^%4; d[0w`(:C3*Ʋnϰ|l\e.;hc \JX"P+@:ov{IڹHЮĶtP7]1Z1 ՎR騯%,)(Wb.kx=n!bgE~f_X8xȈ8[=>zAO۫v4]~P|=ēuNR&+m͂ _T/aiYiV QRFqVo,[8m-a3G[ Gc~: wퟱG(Npay apF"Ht]/u}3 4K%6wH+ Ȯrhh[W=ݍ` ȳC⊚S, #~]H>s o7ލ ?貧:/E_z:R;*5z#ɃA/ ? :Eq{7w }jphc"Q1c >|ݺ4cjK0GE :5$VIdFdu ?+pG6u)cT_,umj6#[# $teM"Mg;˒V%lmMU#]ԅqАjZ7XwYmWhuƣ[ A^rG)揿/$x Tt^e@?AhM>_ZՏk 4 ІY:~[ lXݷb|&(Q:#DR \oDkv 2Oϩb=lsWvyFeU#%|MWSA8ݽ^Ie4Xo?Z>rױK??QұJ8,m㙹\܎Rm褅 GV60> iF:&5g{C'y6ZɎ8tжzʀg/3UW^̞stϿB+Go'DQ.21ikv7==~Yv@iGyrqT҈ 6;>=n-U#ln֯Z$pQFXcc䩎PBF)ycuOpےXƹ6Exw.ӎ{_p6W^ӨσoxPf4 ,$*%]>Whu٧v⤕'Z<^[qu-%T-4̒x?{sOr}-r 춸fSTY$6tz1REJR@z>r++cv0B$QxO#@?7qf;0zdf-$)S]SKF;pӲ+ Z7YGg9]oôײBI l<)4L3E =(٧!r+L,hG,%e4ٝ3=]lὡ[H|JciM جCseYUdGyg {}xڟQr lh »2 ~>Y,s ! d4BT #N`=rzKLl_n?com'?:ve%entˎܳbfsstűc+kiEgu?^ϻՆoml]0|Bu7hoy3# 7^KOrTJUp=/yw^gz⇊Ҵ~Aui] 单9ov]}J6MzC{ ty׽u~[g-NTظ͕E}%D-|wo<Es<;ZʇB~g=fB8.B>`˫?_ʝ`Mu^̆)*/km|t9̖ZuVJ*j% &Joߴrw=+qZKhb@4$e4?YcHRHgvϻ̈fԈ*ҹh]$k?֌ MJ*3*v;M%NK3e5R_<~$r_7O7u{;IawŒIb*Ġ&$2U"4^>C,2!]TFNBZiwSz_0Es85lYf(kyē֫ }ba].`o+.x."@ԫEL}Ϸ7^MyRgڡ rFR#7IM2u,4,Oqn{w6kv7_⛋).g ԉfp>`/7kɤBy\UbM>}dݷm;ueQHc_ʊ죥{ߺQM?'۰ft^!YT|z j^gevꞼA ѣ͍/H>rLjWmuNyq/:@g!tOR|~׭k2<Мb0Zsmm؋ߖ}ܛ/#'IsAM)tM>n~^i۠٘e-kzr)J(꛱9~bbi~FT88U| ZnVh%_FG ep02ʿr덾R>]eDz>]BKaXPY#oEe?0A?GΌ\f=M틍I_jfsԌl YgZZ: 1%"Ϻ2[_uH1)hU0k0c&XjdL{!kͶl;FCX5b57W$w>||8 GIݻW[{DT#UeW_*ZJ )̭ITPj#Q'l$%M (ZG-[,(؟w}Teu[DdEc4,k?V c RXH i)(H)E5) 1Vmg$R+*A4#ZSϮ+#x20 R*H<)^o?,37c|| =|<_Jq9饴RWNdHz :G_ܒ;~iZHjy L;5 E޴\ׄv}HAP&867 ҿvKcq}}u9b (ENJ)$/wies39ka^rV{ [D9F8v:y"xeTVru9z彂 ydXi uK(.UHPYAjgDٶeeIo&g$ i]cR!A`X$ ?$^DW[Nj-uX۷_'%M׏}usS)_>}vd?_)_.9})׿>ѻx{usL[|dǂ`w5b5[W(# IMwm~n{r۷zC,cU2Sp&cEh>N8Zڡ:MOqǼ~8=.O>[&{'ozCsǷ?G =yEї8smOTOe_i7U6Ăۿ^]IӜ潧'[fO\_uK6]ֲSIO`Z[RO?H\vG" >̢ˬJ)kSoOo[GXN_ƌ.c3=x<[XMj6F\e[C 1MhkjU7 /W{V6sn$ԷTUTZ}=ȼ+DѤYD Б^9})׿Cϳn?(O=uyόAN߿wïwgغ<^S|;Fc׿;3Sul]k9^ttxMϾQ㩫y#YeXu VabyQ[ͻ#Gmwu<+cVdW YC 0VaPhH] 6W*Q$G*He%j*Iau{qDOSK<5T4OSKUO *A-ͳB A VUthVRVR(U A`s_c>\~:0<QvMŪ kx\sX/\l݊|bԾE|VzH*bǹu^Ps&n6k֩ZF{zf-QW=?,6C!x-jW~w B-B:,OO8V0,cWrW^{˒\r6.iKpA@{Z˥o"f2#k':AĖ0{XHRw \Xehj {-_aZfhK1i*7e{4jMD,)Hr?Fc yd*N$A37ٟ]s]\ώNKQ|rJ]f/Kt}kWomKճf7VGcW&#^20Yʱ Ir/p"Z&$vW+`)V.Fy_5淲5a[]R` !.9SP[9O僎Aڟ"!S (Q8!k/CoǾl=vX5K7n|4}OԆuXO6֌QZ( DŹץ}=TA~Ԧjqץm nޭqXFj<!Xlfֆ77&'@I#n|.ݵn 4r#@FU\PQ$ӱ*Cd.n$y w6Z**zSG+~ߛtomi]g%鷎c [A [ĕ@$qO2wٹm-exĖ E2,`[%Tdw7]Yrߘ=eKLmedT3@=kMٟ#;opnqr0=GהnPxh1'2d}3dZܖ'#Nz[q^] M:vER-1%$I1#I-{w?u2j]qX~ dlnaO.L5U (?a1aHo㱾$ҏ޺7-q&@%֦7C7 DRDžc` hkmjsw,pS#DZ530UTfjtdJGv?bh2x ןs;Ś t9,$Spg0sMq4 <`<&^GؙR9"Cp71#@ xq[$y9+{}) ;i ^Aq")%E]b~]|k>9 2?}uy E dP,4"UTqә9zy.$1@UP:[m^l-$UQ٘՝ؖw%$rsp'Om>~ힷٛ'>ݘlF8 }}u/KK"ek**SI$ZJ=>>rs({g; ,j+[]"M ,؉;zoOg)-}ep0@UyZb+L'>G_-U)e;9ZjqF-V́&Urm<`[+2Z[TWb&rid$Ef'l<uqJ5s#SU:])o{~w?|UTQOǜMw. ,:Ca*㨫ft'!򶜉{WܣGlPF&bZqgrD!۱;r4Npl&+XY 3vmf`T́L>Da[PzHg2迸FSii4=G/ZRR>w?E:2˨X21I7^UXr#2QԔ oNЕ>Ee0ݭ۔^WE*1&vUg uhتoxKUM6T{Jx7Vv+A"M (7͌o64,JYNGeΖI$7dEKy}0̤$2E5DӠe|BG5m$]v"JŽeg褐}ר<@=A ӇЯzo>ٚpHf[Zne׀:@amA[do/]֛Cw`*rrPcjbCc 4D]=y>,;#ɴ\]4dRYQ ck*Ny[{ϱ,7+-mVE P4 D-[4j9}Ǒ;11pn\kqejfk$j&r9{$S< LYڞE'=uommA d$ġnuAaNll!z}QظJubW~Iu xRm{DVqY(㒿&\,9=rs \}dDܷGdZy/uLQ$1G $Qh?QtWs#n$>]$׮~ֺc6vmf尻)m~H xcG]o%%FWTTJ-] êpq9+ywmΒDw)ä?繐=sQm<ʹ S_#3i3ZR>!EMU SǪ`E':ڛƤ$vJ}(;Z~\A]Ojܕ\j)A+MnI%A$zMV:oly^vh拂kqgڞZU@#ƒ.]n C A+2xt)l)۶e,,X=ۘ oT.>djV_:sF}PDSȑĬ#guei^$o4Ncڭ/ RAWJO\Wnߘ^"sdؽ bLmۅIUDJhR N$9fnA7[^"^,)@z0XƽxlϬa7vv9ߐmmCshdf #VB̾"H]IIJ~;αܛ7Mw+g72^$5";"Kި"sPFhoVʼeϻ+{׊.J 5,r伤/̼yĆi6 ݍ[eԾ'%`u*MUQcP*{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ձ'oqxNf28 kG7#hkuoGZ-5/퍥>ۑnSCwGC c}okLJΎ[k{#vVB&+ P-}>q2sÂ@3O#Dn{^׺ʊ*L{کf 8u kUYX+?5 7z}PT m$jN NnVG IZl;MOmKxHW &/u^lQN]G {fKwaORx֩FCn#Ew?Wpo&t($z!uԷ!OGr?(rpvGpo#olݵUc'SP~{ߺg/[W+Y$ =2G>'ͦKL(mV9p9uFSQTQQΪlcjܽ-@V G>?Smܓr Tn73NMrKwq)v,(T^ }[$'ǔ^IO˭~il? Äv͊)+压j2Gժd $﹞kʿw n %>Z:´ӮN{94;M >(2N5><\O}uPl]~Ҋy=r; &m:Ib_}iP%cZҎ-Q傞dm64:W{RUӡ f>C5zՖzMVW)3Te2ՕylCOQT~Bwoyv'}pkۗ2I+3$Ա'O Xt  }mջ?:ΛPﭫduhhFװPDZ rܼW+PoPYU 5j'z%>XǙ$amv,RnBBO{Omvq}13*+;*)f'.O0 p>?{c= 튴]Y G29֥2}(~_j~V{=>RK֝ڥX<(^܏=,{V*Gpv@4<𰵞qhfAP<ɧ[7ؘ'ĿJ HCQ-){*h0$[yjs>,6YsiZRJX|q륝{ߺ[O)U^ׯ)z$]ՋU~ Z}4 _گ1XmыgP%n5n-*\fzѸot)62@|kֳkwloPUrgg_b1t1=UvJ6E `VUaoEso*nꭅwh)je?fbIi7'v⬤ًSem!bEI#{=䍷Ȧ[F䑵V]T_mK$vQ%$TG< ךoݐ]qFn afU=_x׽u~*& efamcTv;WpY=E`!yIɻ䜱͛g1ĥ heYYG~Sد0ۚx]u)l}!n u ˮ~ֺu{EG:z1\Y}Y`̕YM fn ML)rײ^{FʐA%ӭGk 3m@fhҠw;{w34HcSOԺ@AZ˭>^w/?=ڒ1G25ٺvmJ*:Qe1RgKO3 /{}ǘedJ@*32- .}䛯r=±ؤ =ۚ-!flN?MI,W׽/؝:'rW_[L Zͩ˅(*NyzHX_fgmllIpãxڌGME;$g(!7X`.^Ϫ-Ҥ( UVw6#R"J%n?'zSwrM2 ^eٽs<~ߕAJ*IfLMQSfvqm}{,kj=̊"pdvCi$x9+,.r;4%.XH`ol hAuU@$qaKoӼagq̒uٻ"jWVɾ2#XlP~xy_ߞO!mV֢ICtyj rǍSIz8/XQ;^:U~TMQǪdo[$]MCI"qװvm?_Ȭm(`q}'k~^MOg-vq#-Du} 7n_ٔ.ay"+gU7m&#mC6jH&O)NN#mD1{{wX4V C+hR`~i(^#ٵM9*n Ig}j?u|]ܸ҃mzgƛg5Ȼo)-I9?Osa ml4xasvKpxHn.4X5vכrr !X@ǭ};|.čXΓ:tÆ>.J6* 0!ygW1K˱S7EZЈTe0diVM(&]~c}~h k9Pe(Z6oV|vy>ce==r) ,QY]2dSӠPVq毼%{OʭܢpuZiKiŕc‘b}h I&<Q 5Xeb#I$]Z++r5p&~o )ttg ?7(lw[w.ZKs GEo{<^ CIOM:Oo*>yOט_ v=C;kn,X)dL1/){9rxk\[Z")H`5ҭo mO)8'py* c4k娙 a}񯮘l>%7;s4S1|v A\SE,6VXuQc%e`CJ=?vlO{ K[+x(JB!ܲSP:=m7i8j⠂ad-h?Sjp؎׷e]GF>  pbV)IELG/pڶڽP]ܢUAHvB((hWfrlw{ۀ$ݛdOJ4 Z@xAwuk17M;IE՝qM ɾkW`N:_r}ùPn<ɪ=B3 @#\vm(]a _Jtݻ ]U{w$ZDoʣGQFe~il1H"e 8sħi6^ֶtPi [IM]{¾w?̣믇dBB4sn ;ň/aﲟrS(л; -q]*H򐑂:wާx]ί {UQ4娙9kw};#Ҥ1lţI0(#~kܹR[q#H Ɣǧ]ضxywbucX$WZw>뜕:an 7J͹u )(eϱo^\xH..̌*4GA_*=9yG۝mDZb dX|W{otg\uB{ORLP;a65./_&R|T$j7w3mmܥ`X>tY!U%4HFa7`9qK ҈M(\u8'Z15Uqwۭ:FO%mvucv0|2 N'j}.?}G/lCMS^3h)U'&{+kxd@4VḼ F}Dv/џ1XѷacV fݘAuyųG̷R$!Y%۾}.d[kmqrIJ,y XzČ^4ҬcO`-ywv< `RW NuYS*uZS8Ah vH(яP~"*~ǬAHզfbf+uu[^\{叉xe{5-5S8Xc$H#AJvMo]Xf,ŏZ׺u7lȝ)}srPT[M߹)74[gs'qriT4{mU>k=̊KY߾1q ꬰfڊMt}]OjhV-峋.J#[CK%>?~>g;lѱѴ[ۑuʤ\5?`Gb:nL(Dzm}#dV6]NK)?U暠!h+X\]3?4d]6n>oeJ,(дo3Q;v/by$@tt1CԳE4{&#dw߹ȩi)& n dF7/rFci$Au%40-z">$oq%|6fa5\V]So}=m'̻/oȲ{zV7c*޸%3l;G'6}CSԐ.i[Ut/\l-b[[6|TM?o̟,]PcXSّQ=~LV&*ƑY %~}ܖ{Ƚں$Yi W:Ǐ4V{7xSR\4u?>~IWZ'خq;5K||TWm<+,$7EiȬv"ȠMcFqỷxcuHG=O4.A"=#NFȆM~85$#Kz.c!?x|ZlROnli*N+uʚt"9*Ҧ(ge&:X'~~<&eY崂H_1O3fʮUcL,X{}Wv[FqK56~KXrGS}9Smw A6nY'ٔzItk˻}޶S;Sݿ-sFO^e}Y뜽iwc?(hLRvcau7W?*i2ه?9v^VWHʋ g #?0AiclvYk(cs _Dwu!u~{ߺ^׽u~(6;/ٻo93RWWŅ۸ʬRJ,]3VҊ^CI+eQsewcni5WaVj*+3PI{-.c2WX3Vb2zO++2"쨂t ]^DpYp[*mrfseYkv䢍Uc„7RdEr?s/o`qO?Z TQ/69ܵ豥D\: q~}6/j-9Vق>t68j@<}}_q.qvW!H*j|_PkZZ|σ{WˮMIGwM$Mpw^ͽJ7%n /Շ?ֿ{{maTn[]6[KJg_>{ 퍺S]-#+624˫IuLJn!ݝ }+C6Οmi?cTK$r-r5X`jHIr+C1}̶כ4Hm5]_ê ëLigkv>|D%o||G(p<%WpQ7|Ӽen`r)[5l̟IO*Dkۇli&$|tUeF4{\a}Drtd2B|.mNc/k2or?Rݳ?"iqio_ⶈoMS-E7W=ٿ1$G34/%!"~( ŶR_.ZOvzl*r$_0цw_i%[sԑ>1hnqOU4ӫ M}]T;[oM" AyP2x/3nNȍ#Es#ab=cgJF_s-$hp Z!UUi_6͞s`T1XHz t,/^vxuYW8ػ[T:]$܊VG?@}y^pL7BA%e#!2̴@SNTۙ ei4ׇUxl! 7ŬK9{?֫#&n}WANkAf>Ig{&gbhu.( 4B̖j0p .t?vZ2I>4̰+I+T`_ߣ?] ESKI|_gB4xͯ9+ic.|k%tA<'||/r5VV{}--ἌL?z߿&Ihy}5Vh;O"MQ8[KPce.|ހn8VT}b( ;7Lawz!z헲z0Pxj xI+iHwDDI.߽No{ic1F+oEhְ5TETDPP>{bijLI=r׽u~{ߺ[c+I5rqϾ}kTMM:s4qS'?{l] YLxQjxUwܽb^n-P3[EFq֪=.;uNnչw,9Q:{2no{K$F.ԚmvkL X!}F>쓥qtG:u:<9̦i#Fk|Cqv>bX)1,QA`"-lk+@ s,p>Hue\`V5g,lՌ^ZnwӝSWvrje?sc`EǻUB*jj{:ii"Րwkr\syl[QK.%GVx.f*@wޝÑ=yG(v;ojΈE..T{{VJHYmJ1E+ Gxq&qr*8*귌OTGK,0VPOP/OG5@R$XP[|԰x㼎IEUX=@§rJȑ0iRiɓ~𧀿5U4:\>Jhi~O)ZO=p&j:uOJox⾿N鏝߾'N{Ix:7C-6#1jjYI 1GE/tl%7\͹B"YF. hgP/m_Um~ZODgeh7j&⢩xyd޺WZa髖Kj9uDGn]Cw䂅U/Zu7}mfWdÌ{˂~}x׽th>̮w檤 6i}՛r-I?V͟w-{lE^;yӵqs/?Q70ݐ쥄WKA=r/czbо^tn5:3b81"uY錑1=Inx&k/Pfkw ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^$'ȭ$@=w(+ eO;[>w;Ga̻5} }K?=P 7*2.az?/ oG&Lg/jr+oࣤkquktvݩMRmK{>Ϳ > AI>{^׺Yuɩ|mM [;*P$X$O#;_,H} pG3JRp$tM{\˻1M[OqgQـq$gq}hh۲7qc|)kC~_Y~|-&iDsonb[=T KSU띟tMY7i.ska4ӭcǮtr`z/Jg33.#5l*u(ex*yb9hCp$V{^Uc}O+1C%U<A\;͕GE,gYhI?d>8nA60zYL)N)IhahԈ\=?mG*jڲxUm# ?˯`9n&P+ԣ?A?^4:.GJ=j'=S_ZCdrC頫`ϺwW^cu,D;ӷTAV3L dεuyGR@׻Vdf$xX;W>Q䱛⥘9<6d\, &!*4vPw{[\n]no+D":b4L w;r7=#@% Q~Ҳ6_a ,\KVV#pQmx[M5#E&J3#XoCI7[mǑЛHq%+IqV+cî)_pqSjadi~#4]t-58OE# v T缸l9]i&wO6E#0kҨsopn}9*eV vd0bs4%RzXKt#n{6]%k-*ѼlѸp ;]He$zʋ oܢ7[eW1DDBH֌(Z9CzI3Cs#F9#s}op>;Va(6Ue٬f8MdS\ &|+$nvͣku+Qx׭BX<6bwWmg0-Tܫ4n 7gݮv&Y#7G"9WF#<Zol;X=A-,HH=8=Wwvظrvm@5^A"}X>#ok9WdNe,{cL`:Mnql{Eq\7Xcig曺NkgQhxwB0(qwƗ G~P }1+#&;S(G\SsGYB|ܯiՇW=j.QXKQ:$FdԺ7[ r* HS|@A=t(iCֆ:O{9Yhzgo :Ƞkd.oC>OqU6k"ڲ\"5Ju}CG-E8 n$Q:1Χ|>IGklmɽ?T,x*5$XZ7 orssFhO$>E< ُ b#e-2>D-}J jV*UR~6:l WO#Fccn|^Yh7q<^*MJWR@e$Q}zc<{nJ96BKqnM`jY+|S觢wc<*.QYͳnùól=êGjYݘ $ krK{ku/,0T% uKKNvw}mu:6flv沚jFX]cDJU^{w`qKp<;x+lZQXB*ȱG07vSYl s ĸη(FtJMiT̓Z_Ol9+i: VMWR?)UXQӿ4) 4:nj[}[&Y-c82=2JSQj;JfDZUˍeԋFR&H-#%5DcnGcoeOݰo|u޽S3(iiݓnoJ׌o'_>ګb4x[U*3ܯ8~pRmizMp+~ؼݣ}ž;xn:mV<鎅i[Ef{s@b}yq2W$؈W͈r'\J+Kx"ƾ)L+jlEns\o౱| :*Xݝʢe9v6hZ8AVgr@ms`FYQUI[UmXvgAH_8NyD/ͻW-IcjpTX_B!aߑwm".}^p P 5g^xzmjr_%de_ I.Kp\gwlg{=_ fl{)|R;}orޯ`dnnyv^Y\RYARO]Hl6m<+h"KxpHhT_ϭCgWw|R޻fl=']Pٻ7܏)T4Kut񲴲h ~n~^6amGoosʡ.!55P|]reo7M.O hu,1B#3/ߐ9*lko<7o!bmPRZ5T$&fP<5 8H,1X+8Yc|\n|a6$/q.I>4LN=0uX^MW~zP48Jv(TeQe]R2#r?#s/|,\iER;pH]؅QtbnbKeN^2J'Bcu?gezboʇiPc0t m6? ݋K G;VH$vԁU*K{\'+rw1gqϠ,FV) I* BA j.a,n䷇Yy>mp@ 4QI]%E22YN7qr"X 8,2y:)Kpl}˟sW<;xԚ@Eh#L=4\nkyר-qDm2n|G$0j?/`>%Vhl!s ƥB*|<쁀!'S(FشpZ_ mC %x7Q`nX9n"BG᷌c5ƒRx=\Y\yiWpk =x9Oh<= )"Νa(RuJFM~_ '/C Q8 `1-Mȶf$%Dѱucc}x3mxmC, )0f* @ucn&{X``FPB2zeEgvTEUP.YJQIfo y ۛUw5!RUl ȑUTM֠<2]%=73n&Y# @A!I-F~Y$Ry >`n^eY1PQu3z|2+!==)$ý{wg@T4S`xQ>. ``{{sL:K˩")p_>]g"NIypgkO AyI4"O<.C,?2!eO< ~к5 " us(\jVz9#&6刢5GJܓϨ}[m9쯶t-o+I\yin)F5\}Ayq޷;T9+wWpZ~1u( ,.O=ޤԞ A>f|d]wv kY6Ggyk]]t>k{˷Z;e~o:ϻ=[] I?x$LO3/{:hl|{M&?xPil·&R]YEC9#H19_י6ǞRk9.fۖ3[xҼ1򺺒R pk9sE(%v6ci Wn؊"JV:YoM#qݛ{=YlOSIRi5: cE̼|Is=RRM#H$"ԄAڃZ_l7.ɴlYZ(QcJ *gcbz6|r_ 6FF]{]}En=$J)4⒍u?2d_h=}$o3n;[[seÌU#Y{r*}f|D[}f[܄NѕXr!.t_DXEH6fO+%kdst0YL uR&/XgI< #v*-=}-G'q (IFΊΪ(]UU0l{km&H%* ZXXi$>gKU_lwjDQlcdΔ/RcQ)[wx]enKQ$q$H޹CZuݎ{wToCJ[ I:%]i0zӰ Ts-5D/$45P9d)"n wJ #XBM 09 P0At0xot^vvΠD> 1[qFYЁc!{A'yĊ%*Zڞtܵ[kgpHl~S~} 1v?gcH5ecg5¯~9ԏ}4s1ڽ_L_6gyKfΰG}w7T۬I%xkV EgʰIQehH ) 2AdREE**EGdy4>"׽׺u{6>Þ;2V[ qP(@O[}/r&ulwd4ɹhV8-]ki,9}٫0FİGw>>IZj]{+v!IA# >3s'{d}q^O$F+_=1iP}Y[_^aF|0Қ|g'"wXԳao,ēeUU$O_|WZ&uNĽúӱ:y- 32d&%h%9 )f ~}y+l{+w|K;[CLĠV*Lb` nAeg{wּCIjUi\ɕxS@M5mܱ6K|geiD1koG087{[:nCLҖT8 hQ*F,3 By'99Kn:!zSĐJFiJh!| =}+rdu죀%+AdT@OPMv'===KZ"u.9{xQ% 42 Y?gAw mዥߌ_(6}ָnefUUG1S9vǷ{S5վDӢlȠsk]5/♤m(tmKK[׸׵Dkw}dmh0YE$hޢYv?UAθFM|Ii+ ճf/XC-6^*~O2]"oc_{g XnVd*/&3t?3er$u?Ů Ꭶ1]PJh!'4WF>!wSQF5%DTU: |Tut9qen.bN@Gznn,awVQy|z+'LԳ/Ibuu? sxeYnIb UC#)e <;}6׹D[G$l(JR=kCѾ'~-g[_X?RMSM7PX7>hu6R`2Ւ鍧x VXr:[4N,-BfGjyZ0*H~~m6܍ΩD5ͪb5<+OՄh[MR`SQ {{]Z4Pu kCѰ~QiVݬSR]Ǐؚ4qfيЦQP3zĴ*>=rvf۵5oGq)A D!2ҬUG퍋pSukb;u_?P1_ dj!\|O!L_e *$hV'Ri刮 ׋؃v!^my@/PQޠUZ$$_ލݭTh fh3Q%B>cs+MiG&Zgb Z)z'1LNǩanyp(\\vy`Fڟ/$Uom2>ŵ>:#8EINxŵ̔ѮA7k _Y76!Vԅ4tY*=+!POPTKU$C;yǎ3eD_#~q{I?R+{@>gSO>M+:spo}$gcI>sl[ ڿUE\H0T*5J\G^A6^sV͎,ִpGJ֪jݿd/n-ywtv tjYk|Apΐ=߽]{[cխFuc"We"d[Idօdf{\=`1BAxd%Jc\OTb;Zв2_:ȜwiʆXc?XJ:h`@o3t}ssR P[<(C<$&E&',!70q!#j»Ҡ/|)"2eCm_myuk$`%hҭuVŪu.2 *}A )T*AYcpt5:z?p|tovnCqj9v>ډRVn="xU)2T S${s>{V0 YhKM)cAMdp$z)ۏ6^-)!f>K bN51u]}t)m㒞*<&[noz)bBjqU_"@up{9[sNx7 Gr,o (XFV DE>}t[_6di[e5ҴO:\׺uc~$;7ѳ(dLܘ=:0t̨UAff6UU,I`4'I=m_Or|\[}0e.55'S{nXAqY]RȹU[~=XwjicgqwO%-$Q h ;ӮZw&ckmC h"SO8$c OZV+rMyC5uɒe+;>r٩J5&UQ`;;aHD"_Y5.\KwI]cIQ 9/ߞ70̤dz*(ȇi]} u~<ѳi&uDyPCkHTO_sۻqS׸*g8w>? fE7=>h@~h"tO|%qA . }`2}QL%sGa>k3U3Q᪣op.Y{Av5Wu pc}$mQVJpQk{? -Yl`hM>mbL!<-'\MWj1ǚrRCgb?6׌(ɯ!~DAyQ8!]m v/>  )OqLȩ4{ Ld?T8E=L`+[f;Mw_^ kqxPP L I?x}<_ۡ2 d>}uBt>w{oil[%YmWdS͵~O5$b5 K\|&.ewF`䬓9C$ƁA5a^õ퍖ʒ$FZ[+0H#'Bh Vew^;pQnnZ 7pH#r͢&V[e˅kxʒ>C i=cojpK-O'c)DcWL/ethi_nf6^W%Ufsnj*ҏWM_S$} ӘNrTfٖI!Yc,#!/5m$5q ]haf#ā _uJ~ffzg>{6cw6uwHu)U&%MwdI=Qj+Zj!L,T:Dfo7>|߮Fϰ퐻5іOM0@$jG4qV{&|/(Ž |2-eh~,c֭jZ{pR[122MSAELqE e2_:sWlr%u5YpI1~LEplpG8mgLԞ'72WZo>!+PjXTsO䔌)' &`2O=uF#7??^Ч/_ { e) 'DŽ8X;tWD4ƣc$$Xa߷>s?jmӹj:A%:,c륥rG4߸w]ka56pI8K>ʭKG,)d&,mIl?JkcHicWadu4i2GPAVVVR>>TlH tHYUTjfbr}TQRp:' ml'Ïy.[rmS7uPN_E3cm⑕OH_+ 6_ɷ{yy9Wܮi#uH Z̢66!{u|Kw쏔W`[*IFuf{4 0+Aֵz{+}oNAW=wV{w墌pdȵ E"o;oÚ7Y  4#B"Ul[--v\acP!Wqn,\t]eYzMc(UE6Oh7K$qD$ǂ ,|A'^Yr;oo Y]R4Qŝ؅Q[ EYn_)xbfA ^V2.ېR9Ia "j%꧱.}n;}? cԮ#w4* &נƈh;sݟp7ol } xeUh[UIFHr߆]O/_~!l ^mNwVolO1L3zVdƇ>Zm5n~Xƶ-|-\uO%y"^cǠ1%O. 0r6Ԡ-Ӂ+Q:8}KU 5ݡ27onmf3onInL-, :,}<F%Aij̿xh}bamJo獣S+K1Ji |A$?'G<ּ,Y* D)8;5k:tSN|n\9ɺ>J13ID Z (QQ<&ijĒ]nb׊UQJ9AoʵSr= WTyQ:ٻ +/slnl\ooii3s*vVvPΉ[㥥.! nﯱ~Zvqlf5v6CxP>nȶG+uz ^kx8yB L\Q|2$ww^Ktڬm4de4fAeܞTvW~^ݚ5vc+$wHQe l)b:\||ϻ͗r^M;E$h:cV4EQASr.l\űrݪYB;c@rp ^I\x3{r_4LMn ~WL]gcUGjUjz}R0yS4rdsIIG* oi+8.KS$h;{#nXdxFB]ĵ(:Gj+vPA!3]M]< um階EH%%DFISj҈}ν kFE 4-^ Y( ]!P A?h9_f縵F:!fV"ƌIbq$*K[$tx?Xa*>KwjwJ6An w4}LIvmk.LӬma۱c2!=Lϼ|;?@\wkMn+ :IR^;`\>0)<<7dz7k;N-Ӌ~# m=&82PSB@_d+;Y=O+3|ݽ-,6n(YR)C(W}H3ۻ[JB۔/"9r% Ƙ&Z+'<|>;/g_QwUl]4V*QryA E}uZLP`3':=ܶڬ-lh)S#4Ie\We#Fg-\ŗ# {ˍvtbӔH2Ejm VpIrUL }~,6'vWRn[9YO9@"WQKe&sΛ|:Ÿ[xq0b"ȍʫWJ(b)ʰnZGH$z5b5ʊtG?Wޔ%6Nݞj<⭫fi/9Z(/ݭ'7n qChM#jө4&A=}%x[l3K,  J@E! &{~VN*L.+ڡIclbࣧ2W$3<;}৸?+nc:閛ۛyj25R<V7y -a9 V Hq4tA*wcTGv$ZCn ~OdۭkDD ƎK1&IOsD^#dMkkw%òQZzM{*\iy8u2EKԩ׽u~{ߺ^Ӷ?ڙ>ܻ{!WIE䩍ᬢar Բ:3)4wחwH7wpte5A%c6ٺB RXPx0@ pC~Du}5ˬj0&v\Q28̼q}.JU|j]5Dh)l*DM(ƍ(t ] @db6u+bu}3nK 밻c&&Io@ĞUUd:'=ϷzLgs:ޕ޴3^**|!USfkVDE }>YYWsM K@Jִ^6D{>6|Ԁ jpxo|.ڪWvgOojvhtH2=6>_?`2 yv}5_\-{˺`M߯n55+uY/@`wȾޫ4uǾ 'ԠT>㥥Lf=ŃOPy* $Zows2LZD0(ijFo5dPYeҭ=ow(=/m*ږħbw3J5бԯU_?w|D{5OٸiW;:髮v]⟻x?p} EgO̥NL_+[x%:;}cڿg}^ՙscMˉnjE6jX)08J)⡩@H*sSi&7rsT#,P"-ԇ1::Nw0˻0` CIgGR Ugn}$m6G_aj&N5KK8V(QY4.(,C =ϛ}FὑogEdP99̒+\EH8ɟl=jVv@f@(*# >@>&grX?pR_W].ꍙ蟐uuudG[adi: f1㫡DHJA2Đџdmo=͑ⷶ^yBFI>ꡤҌi"2a{s9x9K5աe f* 2zg*_r5ݕޱەYf)eÕ=L# T)k&v%Kc+so$yNh-䘗mo'E24gaY濽o-  P(eG G͎ꭏ:C~4&J Pd;DUx6ny3rI$nșlL F<{%rϷvtWCùȷCt*,%Tbr,ɾ4v k}2< gX ) H&EBŘdƧͿ΄ɹ{czwg7<.J,>qe,⢑bNTr xɱ7 poe*TPUs߹;vճ1M9hB `Zf$@NG̮)]&i6RT66* dR02'H~X{{CJo>0!NTHPC\pGܛu>mBY',j\6((1-O9₲G֦X[M} bZs tđA $g!e6euR3vr:/g+$SWq|9)3G &7}$5';p|O}E3}WgJ;hۣ7r4jES`U`CCG0F䭞=>.x.k}9QKCo ;5P჈RNY~g6sGKo lgoNge*Ȇ5$CO2u_rê>EUM1 (>QösSY~cI;o+w.P,FSpv;nRgJ?1Cq5BBs>ow=Y7Y&i[o*?)!Z9{m߂z-i iwSj#=Hs!d$mfËq@ k?7o E-QiUFCr -{@rAks_ƒaU{aZrYmœE9]G6dM(E=Cj`$oW`YQ ŤDMc  d%C41Df2ƨ#2QI\O-?wZ/Zo-Y{w{QݏLyQՈj<8#ڝM:z_/qQy_ݷ\ Y PUSEE5b<&? s>_2ceIY"Xyjr 5E=",ob+Mb-=ix܏y%`bc qx #Nh~r=s9r}tG%ӷt3)puYE(ڄrJJW>_nr sgܑm=A_wCrGRwSCrP; KPci['ݳywfڒo۶eyQDJqZ* YZ<3ٶaM3nвĐ[h$!KCHaKvxlw6f6]2>Y&b]|C{{5ݵlaH`Q5(d mnI'PY#eEe9 DzXnY店ÚXj1UFܖI# 77f-N+pƻlu6"lE@Ȫ;$F̰Fdyggwi( ݵAfX,E3LA*hJ}Si[7ILnN SDHd]D%˩{^߿v~ܝSi:Z?GIA$b#(ay$vTM|}·Xvo侕amy*"<UDgfb@b?[Q#h;K T fUI$O9/וpKW]=Uun*FJԨSS30xy.8Yl1FUee4YIJ4BYnf}"$ ۅ&Pb1vLi3xJp=+忻*ڞ#[-~eHOoOQM~ʉus8`c]띧 $y?QTMV _6vtJJ0QI!#ui>ɾn~v˦rxjZØ7݊Z+IY 2VO l_y9ou[h#Y h񠪞j: C^ٵ>'#T]=50iU;2&"1{jZ nݜ +սt at[`,{7纳žV{j&/&?Va5"ji& ={dw.Z}{3I2ˊT*TPJb&yGsM#p9%nޠgO,V)-FUt+K"P^%s;UvݞpH()5%$URD!"V|{z6V_U#.8-ؼܵ;:1<"'t &,06ÿs~|=?\C?O4'bӨZit]^]l糖;A<2ŭ&"m&DPZ(z}ov}_s1\e~ܕ۪!CWZ,m[C)H[^y^QS`ط>b-#Y9oRD73\ityC+(X()6|~o{ݳ_L$vwC2GPA zktb\l=&kﭭ2J"UTÎ1Hְ[aȏ>|\A}+{i Cs!#dЀ847rsmwpKes5GH^DU1VҕK9k鷷lu;7 alPIQU:$|j@ \e͜ɾ<Y\_O9U|+xFEp PQվbIWvV!XfIm&P{]~"w}Ի=_vFrUؼ>ZEZM+$q3x?p?fmy-Ւ(^GhP1fc à'A$fv*$UO|LX>+Exھ9flU cWN͏[Z S#*!iK$l7grn[ 1a Mjwc.Iwޭ &=cm.߽ f*L7!EnUA`UpWISEl/ò1߸؞۽KY+ie1EZs% j YHyw?W6wm+{rQEwYȞ#~rtܪl i1sZ#yӦY*cfCCS.gKU73G6&)k$~>sK}nWcqI35,UfaYۮao0;Di"4Nnk +;s/EAldSbc\銯s婡aP8:i$g(j=36:gy'@Z[= c$)w=y7qsDm⨂* i]I%ڀ#aKH3ۯl9K Zǹ#@'$ꆁ9R$g_vuYm7{ih&Yxx\xdZ ȵ B>O%_Z{6Jv֯$y3HOxp{̼.Kjxӷ b.c}^_=2?ibtW¾RoO&/ze%o{f;"!.ԕ' <x\O{|5Zsm!!dDXRb==G}嫝'q I 1B{"}CjO=/C8؝Efzū#m;yV*Fu~ލ3,#>]KVQ4E!RBPdQGl^=߉۵讐H&u5) v>$Ԑ{ƞή?PX~{%+-4ؼk"44ZjFGfho/ gͷɷ]Ò(DJ*4*K]>?{ϼ>?*mjT/gS!!:"1Zg?cw`w/Ǎ[޽s4j~zjhq4z'-[OEQW=o|axgCab@ #}d*+:]C@Nncvn5i5Yq]Iե.(iO+R5@{ w{tq%O+T $]B*f'J*@ ۬-6 oO4%,Ϧ8".,Ejf,xOV~_|h{qc PvfRx:LV߉I7WNUZ$7-t{/lH۽l # YE 4a\J{KGesVIcej#RFL$) 4KR3\6==_!ߝE NfK& D~TB)y]:O{9x,RtcWtO<"A2zMؿ+ci,G"FFz FPtV")= A.t|#tcv>uC0Oۀem\mlmuZ"w٣1>'\vϑvoq÷ Q@MlD +JI9e=l㜹{nx}o<<4~2Lzd0d=Kx&W)u̴rRn'z7:P4rW34l5@vuϞsq_'].HkH!`X`L~#@ *Iv\"-au @%l=:z^#ݛ/7GWeQ55DM%5\,2Iᏸxd歆Sݔ,mS],?0t=,o̻5/QRUCGF⮪#W/.6>O-MI؝,&Vm Iy(]-t?]F] 'W=h,e@-:J$s,3iټ'86`<ึbHċXH,[Lͺ$ W뭳˧MTIG$6[25 i Kwwemp;^-ڳ/rQ)|.H42^{qmv#j sZGhPy?)UڸmAսo%.6jJlSKZEKOb6x#Q6'jG.m A,ˤ@ZO?WS]ڤ1"c,vf2L3U#Bxox$Nu$H*@e`nr=r4N$CByG`>0:_z◫XVvn ӊl\v.JQ/2<5up'G)]˼SOf\|KqiB]cDT[w'R:|;\M#|h]8macHڞ EWt~/׷*Y.mv?sATԔggVd\`tUU=y4U 4[J <D msql|O.v!eMqp?'v\?4l(zSf:pM =QHLqqOBr=B%t,~7y;uNkk&hGQ8'<viusi8 %:@ڻ*jT.^-}zڷnSG)NC(J ̐2"Y$sܮY#k綼u^{9"W,)V4ՁFe^ṛn|m6_ ǷYIҞCFS'9*^.>ξ}hiwoX)ZcR*Cu(F$[$m<ʜlV6${*[[e>5%QڧS*f6plMaujoӶ2=I8U4$ܟ!rOȮ¡7|QK0ʊ]h5$q:lܾ|W-ȟw[&h.wVe FpB+ɦhV] >pn U}՘Z[5$42i PVG#9K!f+j2Y^%d2d2yyF%I?xinۭ䛎3O33$K3;,K31%$I=dvvQ0¡#5(*P{2E];ZvSV)Z#m[(xrQ2a,Sh"}onvzG3**еG2F)4" 9{'d^,GJ0̢-ܤ. $r/vfzm_r5;[rmv׮=6ݸxcGVG$G:$g"{%=O vƤ%ByD_ WtTy~QMyrm*d*`̔!$/?S~4=!UrX.轫w. ;ME6(CtI O$y!{r_&߽cOs9.ad ̦\m [Hh/75sɰ/˰ʔpܧbF0I4(WB]R2~uv'ˌ&"Zz^2`SVVK% TzdUhmM zPO[UGe}Q[+g` nJBFQCrHo=]]κe+Q J! kv&Ih+i#lT3SN*i~6m|Ք0xd|x5\o1tT eDAݺlfG4=&g-Jn!G%'[NL 6ZLvQsa WHtb? qً>& 㑏rVҭwrwEA9$Qi$|"_>/,e(ێCL썙oMZR{xMp>E^UFԻ~)z̫/\9|wm\͢9+:l.v%QkDKQĮ~/}w^J*18ҩj8T3 L NBr%"9R,4.VIXpij驈Zt{t(׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^m?d3R};GR}_hy'׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~uo{ [ ST߽u{{^׺u{{^׺u{{^޽x]{{^׺uWdqxܮW+[Ibdӭ>kc{e۸h4nliuvN4GYIM6>Q{?/[0V/"FNV [c|yEt.~j]W sI`\c_Z[z/^׽u~{ߺ]i[w]{{^׺u{{^6\opw]{X^_o~u{{^@$} {O^׺u{XdǯWu~{ߺ^׽uI׺u{{^׺⑤`,B(PYS?'}홛,kKq5@?$p]zq]{{^׺MMW]UIArtv:Z̆G!]:( 4(jl.VYUUAfbHI8,Apqgv!UAffc@ bMrRĞ:NSfh'l"mИYQzH,&#OKSǔ"'qbޖDe&,Z2Qlub[sE>F_ǹw*FǴ4l#'s1[bzu{{^׺E>׺?/=Sz?/=Sz?/=SzXA]{{^׺u'Q RJSJW~ֺG(H@ tWPݕ Pc+4"LQE"!#G|;'abI2I&5$I$p( l;o]Q!GꨪہE݅ 'EzEMlOԲ)?#`BTF?=컑BOeOt{ߺ^^렪9 O׺޺^9![ybM7E{_m@H :f_ӬiI*&?~ռI?F'PnUYVEu:OϪ`j XғUiLOw6xꪊU@UT%XBI5=w]{{^뎄{}zO\u~{ߺ^׽u~{ߺ]VX#=v?Iu{{^׺u{{^׺u{ ^Iw ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~McrY?39m.3dr\|KCye(R >XnwmtO=j; ; 3$776v^^HAfwf!UTYIGKmw}p|tx.*k70'^)5tPHg*xMо[fOR+nVkbmed̎*u`T%YgG7r~<$jVMAWQHMl5H՞DDw~) ՕVQÒ`W׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~Jbrn'-ʙhX>j2XxTIb*{Ue{wEXH3# 2YHe  zj{{{5)U2:0*jYIV:'h|ޔ[s3ob*I7 A[=1Y95BJGO {9{GY!8Q#_$TP 4Y#@@"{>lr&8vv#3%#y*ՋH {z~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ }1><[73t\gk/R=7*أ-\H~ǹuyڻDSÑy&iq ;*: 6pi۹5fK&I(ď:Whvn/wj e.K2F!f&3X =-$+10.,wvbOΜFp)uƀG Gjjf&<&r-[[8K\PܗF%QE~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ԊZ}]&Ccꩫeo7r$KQXjhxLQ3#;kХ HP_%##4k׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gBw\޿-z?>O'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!RCޙRCߺ^֟J׺TP׵u?/=ui{kOK%~{Z_({^RCߺ^֟J׺TP׵u?/=ui{kOK%~{Z_({^RCߺ^֟J׺Rߺ^׮?n=u?ۏ~zߺ^׮?n=uy}u~zߺ^׬l}u~zߺ^׬l}uߺ]{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{c/3k3qF;1޽{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^m?d3R};GR}_hy'׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uܣgǟ{K[z 3z^xE^o~޽zs @i7ko^A׿ |yWߵ^?><_MׯPunU/mר:7??*S{{gǟ{K[z 3z^xE^o~޽zs @i7ko^A׿ |yWߵ^?><_MׯPunU/mר:7??*S{{gǟ{K[z 3z^xE^o~޽zU_kFz +"x:HYII7'ߵZ'6OA1oko^A׿D }[z ?z'@L_ׯPulx?b~޽zd/F{'~ O7ߵ^鶣Y.y~!tM:[]i E ul1a`vdִ 0;{~dGXMbhm%Ijnz9}& 78{H'3m8;z׭{j6Ox״M4kZvkZh;c{s*}^uGnχȽ^z2{{J$. #=DÙi;oHMl{J {oݳ׏~_׭_N {oݳ׏~_ׯi_NT#Q):ﰩ/ºE?SvZZ: S^:/&^rE$i>J?`'qkn?ڔo0'r?x״ 1?Iܟ:7+#2 #kGPΣ_:>{GPu{H=5]jQ[},4_O1>}arzϲ\l1:noN6,~^@Eق,}HQ>Nrqv07jLG9gM/YA1:@2s_"?{ߍ}{GϨpOՑShꙚj}Qo*O~]{GX?#gN W:~c'*A+I`7_oQj9bߚm`xv:<;Co״^9}ysJf(״^&AO򷮞ߴ&fK}d<*߀~^:Nv,D٧ԶJݐBVd5#i={GP?o?}7{߼aִI (8WFK6I6G[~d)#~0OQXMP9}Fdsq]Q{Iǟ{{Aza`1 ͓f[Ym#5S=^z?'zhnRo!rv-@jTj7[^2>6-Jʌ>VEgفA?@I{A7??=_^6O~yE3cTjF#y$OŏR{ߊ{A_N7f*O#v5{r0A>Z{߈{I)y7h: =_nF!͖o6N}Zz'rA&ԻÀ\Oߵ^.b{=7?Ḣ[2={nKXB~־z ~ICfu쩎zh6]X{ԾP o4/:ij}?z"_WU{ֵ=7=FQj$i4bnE.W}zMTP,o]w"J#j(úUՊϿj_Qרzh215gOT'ύ $(f}lj_^CUGI$M=WEw4T4tf$j],qK֨zkZ7~2M?Sv40 ˌ u{6>Yz5/$(EJo~6ѣI&$GrGhS<=( l=tըˢ"w|>QFwvl={?yMq-o{{G^Z׺[; ?+{ư[5koN?޺YO+$$~sO'{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^D ApAuT㊐T*T#Oߏ~5;Ol*Tʕ"H}S׺k=_d=wJTX b}Ў-u={]0QJ bM%#{OZ饾9{thߢ:iu(aide46 >zM/WR|oI"9#~֍aѱ "zMR|74o 7RHxFb AO^o_ gt'Uֽ,Pa#޵7^鞧~-魃M%ѵ.#7?CǽoS״Njz3|A,=i_R?v{scmר:dWֵ9 ~"6u%#jW$k^AEG]:5GhjtZCCUnmk{{H鶣F.F["T LR 2%R06zdm?/mΐiwjQEe v4m7?#>t/eZPFZJ~JXF 4Snt~Qs##Jmw^ĬQ'xBd~.I{_׭i^Gˡ@Q.+Eݱ-`щ2.o+#I/'6ghS;E?s;on+#SL8}Aw.>L?Џ~_i5T _ڌ&2_Zߍ[+u#>pj)5۳= KܝGMz}2rwamLOtfJzDko$s״zw]N ~ܐHծ8?{=:v>C,n`/J.4ѹJJߟ~Zzj|ESKP>(V2pj7GeM3z>^M# zΣp7Q x9_;|O)>.NbxvLTfd9~}kA鎧|!$;ekUA{'ﮫiX~}WU':7`^ ,KF{v2M>^z`1^eitZ[Dw . KS_@Os*u'YW=i]yTڔxiiyl~Vx״gK̒UNuaQzNЈom (Z'^zi92|k:Ŭ>q(A}P$$7(K{I銫I18I>,C@UT:mE߼DZOLU?R!g`R$fβߎE?>=zޓv)Gs -VϢEIwqk^o7iDMQ_;8]g%<'Ak<{ޥzZ?1)e6`tj" O}l}zLu?PFM_?E>-⾆}zI*8j*hc`K7MvZFϡC1v~=2TufR2_VvDJY|j/ǿTz'J[KxҬګhnZeha9tx!cM*i bb5k{!DU inMZ}u1KmY*׺s }?q!m'#FTueMrxMm3[}-]{]DYJi?Ic?:zr`}usn}uݏ?u׿u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺1?2w?ƾK:ί7iotc׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tQՉV/R* E4p0HU:{Uf~=F?Xiek^S׺a^3Υ*STg5ƗizI+DbIUWTJ{k1h a{}}׭PtUEi|ZVju}ɪjo9u}u_ߵ7[?UO-f?gǫGƟV&>OZ7YW Q^oݧF}FhMzIsZ6I^5e_҂YΥd `H{޷GI+*VEo1svrbi߼GGL'P{mUtޝCv5'/`=^tQ?OR`Z^dXܨnv[^tU%D$]=C&'r3ONjS$_n=^tD?ڡcXkPbY;}>Aa@߼WGL5?/Tow?3F}__o~_i2O =+#C>Gх2A[jUm?ߌ.tQ rE/l!]YTF5IK_߼Vu_'s>Eҡ%MgWVmn5s}oNtwSj6ZV /mŦ{ӭh'9cK[֛*$zQMQL]J {}:*?8bEk:C V[S=>ooHPߍ:bTG3ie$/|yh@;ox.fma%oKU4]-*_n}{GIN}#|`k:yH$2[j6Oa״.^E㵴OQmo=:G'R+^TQJho#<{bZ@R?h=0Vr y|f4o{PA1F=&r߼e'_Nʰ'AWJ~D FE^ݍnnߊ{A/?$&mO:GqS^?Z؏~֞z_6q;2?[[2o'no6ޥz . ') Q ڑLN+yڗ׭PyFH֣;:6xٝCbOTzg5}S4RDF; HT]3Q]D\\u8=D VDC jݫiJ/x_Wǿue:F$)H*o"׺\b_]}iZ"M?"׺s }'1 ǥ4j=%}{˕ŷcߛzk)ozgZgJU6ߺYC:~r9[~wb>^~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ю1K}5r_Mu}ɸOK{go^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺXU? >Vjω5+T?VcV7eC.(ߵ7^+W xG?X5'/kJ$UMz:G+^T|A #>qff2G~^AjI.:C' VƛAbsqaz~7-Z2!dw&2oOۊ-)߼GGIAFfYPw't_Q}??Z:H"Yl]w?a _{[7u\B=~tA_kGIگN9df_/ϯi=#뿑?/؎ƿk5DQYx7?O״_##޺;w.ԱQ{NĒ6~Esm״?ɣӐ:2^z^W)!:[a=zbJ1o;]nE]5_bRid߼DZOHڿ!̚}HOqIr O^C^|x_mQ:2Yί=&|Π ~OđDɫ#QcAkr \}H_^CS!'SWȜQΎ|k!6}XR>C>k.ObdI~Fѫ"G[1Uܔ~ݸXWMBVkaWJ{tx<{Z)bufFIH]] e}Gu%m'@Aa7f{3_FB׺R[YK%*"ki>׺$$C}usn}u݈{^~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tc>e{|Su_rn<R^{?Y׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺX' 4TPO s$Xcn8V]uhTtlj@I @7={o΄h +zfUXODKt9>S֨:H|=29DA]=gWXh @*{ަ=zY=wgHt_EvGA>zHMGo]G@5n_?{GI:jSadt+mXGP~##_d[avF$wPH*ǫBO?^:H?2x:yb^ _}V#WZGH)S{ &>ܒW$*2KQd_}~tOH·]T%FOn [O}o^:Kx$ʮ1f n>Ȅ5FҀ#<=nttT/zP"~-6+O:?>k@#W M?vw?U1zIzNI|͔0i!`i7ZPXxou$rŌ+ͪDr]-&" ]= >{=:𝟑Q])Xlm> vƯ~^zJz~`'!걌8 -boƑ}ZzKW /vhYGoæ֬@2J+<y?GOHzY?6,g2d,m@Z"z'FC[1jgaNrJF;=ֹ6PY׻״}C9QyIVTj/ׯPIRudG2 <_(fF&}ZC;# 3e~4HcYѽTq9-3p?ߵ/="zõ1ɒ^ƺH2:ȕ+TjzUx<3XbV-Z<Ր ~5/t6I3InߺX?na[!HV{^2dQI6zIߦXΧ^ 7s~wb>׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺF;_.gx7gY&?-wc{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gBw\޿-z?>O'{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺMU,&Hb}%Q22(2}Udhk6جSVI䏥Se_B͓ЙwY^BHƣ`~޽jU߄Y5d񜆎H[Q9IM(k~MzHL_YRYyFMƍqlUׯPtQ_˂ŧ/|ClVVe?^:KV%XK/FrݵeMܞ5S!P\xִH|/]O׽&6@YC[ WGH6M?|a);jz r5GM:q+#g'eٿ'qhҚ7\VDUJF&XH_]{H|q dVBɁSkr8ؙZ:Crzߖ]NlNKv>F)hq@:No' [%TUゴ{;7[X>^Gرf Q9.PtI9 ‹9$}=ch [ %#::bhNdFh&+` Ha״ϙQ^)v)0V)جNQ{kAB?=h}K\G[QsgQGlC&_NGZ_*T{A\%T1Q_~SinUɗGՍ^AM^AW5Ht7Ͻ״9Aq`*n,o7ReI>/r, rx=z֓rƗ_~[ 60l?~}ZzU~l5_L8C}1rQMcՇ[ }G^g |icrkz7`8ϯڗׯPk+ս<';mjrukd5x+1S%HYdHC䏭{^鱲W9Q_#{ yl[ɐses{iWK'w~o~f  {^땏?u׿u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uw]|񯃒oxγMǚ[k|;zu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{GK߿=#w;޹I۽Z~}PO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ] AE>׺M͟Y/?3qMΟ#2[z&J8̭ XT5ƯU矯S̃T}3zif\3X]{ަ=zSp j߈.ˬv,jxxx@Ͽk^ztS˖OgO[?X{xMkj߫WzB2-Q9Wvuz5] J/״uQcIWx*({ajM*>Oj?[=~t|8惵>N㘕֕Ъ*B^2\1&Cxߌ.tt[ %V_Ye-5b)Wӯh"+8I/6]y.K  Ǝ,-^ޟ~Z7! "|ȡ!<@IOf6d=\E>}G^ǾxĆONΧ)}x4z :] سIQH ktS'O'{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~Cdc0(h*b2[ZXY.-͇u>|ֿ=aיo'Oem~`[ =tKc?ܷd'=s_2%X׾l/ڛ׭Pt志\q_ OlQ>U8(H [$޶}z#VQjONҗ.جvOבBVSNi䭉7߈{H_CYo4NK6'#iNn( 97{HF˳#nߘ=fR;Nj?Y:kM~+#CuկOvNӪի{nty~ ήq]k#y4yWX0ʹʯ")&o^:2ŭ5m*݁?plV-o{Z:Cq0ͫGMM,&V{{-[M"7˯h 卑yG_GU6x>&ch=N8u ѹO=6[iE~2uM'5fc(,q\Do'Kݿϼe''?%?g?k)o+^׋ߊ{I ]]/2 뻵б fF{rE.FTOH\cf #ؽ1chUn9 6q=z֓w\??q%gqb[:P;h fYy7 r-zׯP|'rMBIO{)fjEDvXױK:A[>A`uߘeJu67r~=ׯP3{bm+N2Ĺ khcZb ؉DAIk{^ pt[[HӮ8Ԩe*yۚ7IpC~b׿uZ_~u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^||%>9/:yю~{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺM .,2fMl-jZ\_~>,aޫXdiWS}hq^{_7/&}z]i1 0<xMzA_j|9=<}^` k{#pdI2V4 C.ZQa ״?ԭ7Fb{UqCpTpw⿯Z:2_SisGp@;u8oqǿx״OwM8v$H7_@`tY @y$ߌ.t:9o$;.4 ;:@)ԪߎA? ZAC>`nn=?sne@m];5can8C~7:A9%_06k1謎41;꽁mzuNY|j>3{u4@EaiE%Fsb״Y(Kxz#of4~ꡮhpGj>'^zrʗu}-U 7pU3pIGԏ{׭i=9>@%㧀 6zP7 \^ >)|ƪ%WDvz}f0VdŲ0$X2HK:AK_ fpWSUv9UJ54P4׿xQֺDV${Su#^8M 3>?25YT! x׸Ҫ9?֨: s˻td> v6O E$㏧zACI.'^z C]'mO_Gp>/97?BϽO^C}AW QK;tƈgypu*^I&ߏ}G^6t/m˜Y?fx;!dŀ,U>Qרzr8lW񝹹Ev -J+RLEw!GT_!:]ǕoK-*i/$1Ե62#YO׿uX^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺1?2w?ƾK:ί7iotc׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽t쭛oimƻ+d5 WfSu={+ft{rKS,bX9,j~@<@>֨: s?yYr?~8hzwbbtC}? ^.)͖gjcJf8dxٙ]MnX-n-V8GAS+-̒f.;V!pXy׭iO-QbYl'w$jXos~A \{ߊ{H?zUlgf9ա#yKE'% ܒOfu- iev[?Q~1AGJu/̌6 R$q&>N# yo=(Wg`K v< q}:փkC?>񡿇T\ ohn:-fNknSےG?^z rWcx:_g4 a;Xנּ6ߊ{I8)5we^L2qo{޴ZOAG~|~|;cM qݚQ }zA_ʌ]%UcѦ ,+2O^/}o ,$5׻#rJ -'RS%LL$JT*"NAo~`L"BV<5pU+YCߺSRxdhI}u^׺u{{^׺u{{^׺u{{^׺u{{^||%>9/:yю~{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~6dlf'J2%*G~OkۀtQf˒\f䋒nK}ߞyA_#:o\t]QԽ ӏ [zAOT˳2:[,b>?߈{H;%巓Wy#7˯iNMŰ'LxihB=>{@9q2*Џk r)ma Ox./ C9%AM݇f~A_mozu?O̺mMu_g? ;8XmV%?YGl=/ϭi=S1 )]WH, sZQ^z ɣu2|}fnKe cho?~"z'5^A :탸{Li_{ևϯi=?60A)Ǩ%Oow ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~qtIUՑ2:0G~!_֛_ع&'񍥀5 iOԎYy'p9-&dWe,8P7&>OZ%,KE9f- pBMZVzdg%җ"#sm]ؘq'o,i?gmܯh9IJ^|k7ӑ4~?)>?6=~󧶍ty>mC uh(P֖ڴAصwhL5iR+Ϲ'BCyo4ȤXY[1&E vGzc`7l<aL_a{7OSo5/H]߶>Q\WDzr3a?[Cm yuFL^q~>7 w(Io1IP?m_${WCd>U"v|Y>"u ܒD_[q{aSkaM [&|G/|:2cF8꼄#`vmSS\9j?䟾5xK^[9ܽ?'D./sna馤Җw jأR~=.>5EK[߱]ョkM/vn?#!jУ<#dfG3IDˏ{ }[ޛٹ.aOi!2t. AN,ǛqO;ɾt_'/ѺGt3[D^'kz3{[%oe[7n.u5S/ﻏx>7-_=?PI7ZW/B oyVB)WϤ&[L F|Awv&k_.A#o ?&H{ :wm'צ!>K}lOk1NܞݘU/; q(8'SF?^dkx)\lt 6{ 랓OWKڈ~눿e&l* A+g%e$檩s)>L0Al(~GᕿKdǦz]{u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gBw\޿-z?>O'{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~4e68<AL6 phǴw[v|4h6t{6> 6¨`?n~5,m_=nx[?x%z~G2em{ w ?/٫?+_ݜ0դN{fk1n?;td<)~asnMϧq{ _}k<{ȿSCoߦorT_ l`^ߺM؞W՞/a ͽAo_໹ji%Pjykޞ& ~_俓E;Uij^;߸fO;g'B ﺐk7{iZ?J34}ۘxymqI}>۸?C 5< ?OZ?͢O?'ˤC#3|EoLyn{qz/zm5ly?OOˣrr6Iz=OqK wƮlc%rEժH-or9 Oo$_מ^ZlwQz3|}uڧ1qsN*R>wp/tяnT)ѿ`aÁ;v[H?i/ˠ#e| e}GEKx9 ݗKLܹt}/^_/QЂhns #?zAd~4G$OCWTOO>td#C)s쿻uXP3݅z0}[>6'my2;'|aѥl]/\ȒZHr@G&f vۘB wW.!랒OUO$VO% O'{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tݒ3|/`PWB~XꕗilWE)*:W6ͮF?ȎEt} yޜgn9$<k(} ƧpvIJG^u+,Yװ.O샠3F}B~7tzna`?M×>{5t('ӳІul-v9-τySyn}MWӷV&IسիEo=f|H^A_O,ɮb; {'^յmaW56mw O$ϣ_/oស;_$<&ߊnE; za{j6:x:<#ybEsAڟ7?ο>6{tt_q:KfFjca7E!y% ^}=pF߼G2)5?'z@W$e#bLΉ'PTpUQ(W_lZ˚%}Wh_Aoғ+y'ںڼ+{Y)jk4s`lo6 ^w3?YOJOІʯwq?GH pUGQn˔7FxDC1_R U6({߱}[={=#4m~tg%j#=>HIzFq(P^drO}-AkK{Z,:t#{9q$?l\6 1V=m̏Z؏\IvUt}kZ=-#mn#)m2?׳kw5`ͿnYYhbН7Ir}]W-?{ ]Sm&)ŲF#S跽j^̎;)Ř0,#%W{ ^l/:B{;[I$=4:ZKD$1opEB1 OJR Oz̳B7UՁXp˭e'u^{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^y=t$2L "HP9#W!ZsٌV]C^/b/_Ўm z+83zG9:S,-?{ }a#hm'rk?^'E7/H; K=EXs2ZَGz$#v"_^EЎ~g.NHKqJ 0? vU|!} *Vm7%RT_x/y`H%>^%d-> !MӴ{2Q-mQߘFqE6s.}n^FnT)яLІ(-?ˠ%>gM6ȎF3by %RR /} cB+_g񧼃=?nI:rk&'kk"h]c@t1` kReiwb.=-{OOtd|ázݸ-ͰہnV.ݷWIҽ.v{MwOE_ tz#ptosa}S<H2=nBVw(~W"^w6 fYף$zu{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~$2}sI.oc IJK&SmarH=\Or}-R+)?z5w xiH/3fw g^t徤ե~)u,mNWЈ0B;_sȲ4y) nUeZ1b'7>94ᡅvcE.ZfXg$t{` e2&N#7U2vWe,ߞ1GW_s߻>Г旗Kq"*t!n{T-,Xe?=^oc2ko^}i\Ck/B;o׺SK v̵SGsJ-Q)mݿGcg\>c-yw#~_]m>\ _]SgϠ#l?z"-uIUC[yػ斌yƅOB;yˈ8Y?[IϠ'{z)w[MN=>ẂB-e>^,R?"j>v|V;ci y_'ttvp:)7^򡩐'ߎ%'o)}}.CVky7{l& \ZnP6?jW3gU6q6xvVWׅ'{ }AuOݲeӡ-ޏٛxKI?u^5pL-8=3 ^}ߗ4 KІ[+_7Q%3F%: =mPX੊}}~bf}Ѿicu zH>v{]v?CQ#!3ug`X}cxve:xJ0-or=o筰l?'PzZsG+;}[vCifJi (}CH?}71:Èg#5!bJ9xC#e'Z Fh#\(~G~b׶#TǮu~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gBw\޿-z?>O'{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺP K?릮j{b{kkYє0Ӱ=kIt:/w x9yɹ1׻K&Κ7+}߷yl[}߶VǢ=m9Ӝl);4N97+d7+pX1a"߱$卵+%{/9p4;d/'#K/Dc)abBE%.1@}\B?үt$l(?Z䁏2(0(ʔa f` _&7KWW`-.mkcOe#{oOjZD+8ʝ_ʢ'n UAl\4b\\s5wZFOKh>,ѿk"oe(P]eI[^Ep?#7] \_`3mv0;|rsAZ,߷M5] m~~ =|;cG-:s_7|mߑS#9ζb$qRw8L|K7;=B+O~/ӼI?7Ɋw_btvNG=DɃE?yJ6&t_tImAKqE-FAOO|ljM.Q< )h_5/mⴺ#sf1:t$=qvRП$s OSйZϭS7וf^[qAwEYl .X]=~~]&ב6 4;e WmV^n!;hVB^i7,n/4'F m}b/f:{g 2 OW7 "B,-ϰ~mbxzZs'n jC{TJWUA-uz>lpӇs2SAvooč¡r_d7 mr_ 9?O/ٻD%Vpl(=>ؐmp] ;:mzZ}}jZD+8ʝo΢^ MK_%^gbX}` vk:,kMt&~B6$of(P]cI;f@?4&p[Xc2~B|r̓AY߷M?KkV]IK~9kImߐ;% fuk+7:AL~Z@<\Nx̰|KWϡ?dz~=u]?~xaY3WP 03ĄA}/>DIܶTpJ"B[o]XnQ~R3[T51Mv>x GrJA6>~كDZgӡ5ޟ˚xw6R?I _˿<{㒸|}#Oa Ϻg zBOi7yB;O/o%ߐ]y?_*pnQK;Pu@ƫ TV {7+mO8nd_aOiЖݟksݟ&3%d=^ gzױ𦜰9}KIYFOa+A}v>BkNfa^_L􆒦Iʰ6a=*G0?} :LΏLT}+QRj_g4oB h#_HYQ=S{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tٓp}g>NN=O}`GJ-]F*h#1[i|Zl̛ },մN}/}s5ܹ{lǢ= -9l);}'vAU!;,W|rYA~Ƙ3Lx׿we7VnZ@QxdOˡEXA73KWu2+98Xz4J7ae,%Iԟ`˿6#4Z3В1UY:#7V_y'c3w:S!ϡ=+^]^WiP/1d }WNnPEbzOB3JS^}q\|[ВoEj;1,Oא'Nej5nbq"'x}~xF>ʳIycks)MkV暷g)-.Hd_YG =wё"$1bh [zGonv|Lx}Fg:t';9W]D3t/|W=4bBS"5Ζ==Gn]ܠ[x~} m9Kn$'x3Xi~3a֟1sB(6ix[ԩ} m/9z"?uMBYJ[GEI6RO^tz[mGH#]Z׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uŕ]YUсVVSʬ >GT`~.{6/6If'fϪaJֿ6+m`n=YG2J9φ7 b, cla%'v MN~%wصN!εQgv4~bq5?c |_Zrgl5 v%MSEqTrmw<obQܢTˡE3ޛADdq _,z r3Ij,Gcm)c6nd =@@NoܧثEեW$γ^zwjZD+8?N \S =A7d2;9J>p_jd{g%#Ki3;gKأ+0~Ig(㱴yްd' ύcT~/G#2vZg3K_B__rO=0<;ۯ2q?l3?ra$s5u;}! y0uņXGO} ]EE'z8 3?6#.;?{eM_ Co)_.-8 qpIiКylی頁KO.+O՘,I[-Ӹ+1{_=4ڣY3О;MX?楝bIGAnc|̕;oL፴|']RdqV}݇mq˗-O(V@#ОOgWbJ~}!6F=}هSWVgy`g7]"4AOzZ{JOWxt1, ="yMC{_{7+i >)_ӡ=譕S\c/Qjt?A7x禭 OZt—RѿK+Xm#T "r׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uA\x (z4 &c뭋57;&gpo}WOWis^>-2Wև>d-`yS:à7~ÓҥXg덫fj=4a d}ZL~֊4oЦݿtlna@];]_.I D06ۑ?it`[kAR.6xzm}2i}y$5'锓v6jd >+ >^-n+,G:Lmz߶=ԴWqx_ʝٯ51[^*݉! {W &t'%&k=?f0\O.?b+#6^-'DYέ-oHjnk}.D'#.vo3CK'5 ?gB{_ؠ{ye>V8<g O3gtL斊\tnqx|Tq\X -Cc}/I?{rPȣ2c{ KCu|Z_Ο>{jM.!-oo 8X>΂wXQvG][YlC}6яʱyevxI8>}/k+p)&*͈Rn2M-QW#Q ` ǧ1ω_ʽ l0ي*%: 3}[d}#ܘ-ջ05^Sn n<ہF M{^1^**s=6RS:uDv Dub=nv)|7sК ]v$\~$u+h:cԤ3›NN>zPbd H#mGǯ{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uzx*zz!U+,ƓC"r$q̆9T2 AAVGx6|~A}4i"DO ;U/x#4t6?s0~;;?W(+?6zh.漶RKY]?6pj9ZM\J5( ,Ai}Ť*WТ]K: 2~Sa%ûcIE;7L>kp0UCn㧰MV73N%,ndQ"eδSinbۉ>MwgJ*t6FF;}`&),͙Fl$H[v y/pN\S J|ASgo<;_:{m-Tʑav!?`'oIT)),nУuZ(:Wu~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tm mõxk X5Iſ/Mu-!أ>{線\ӑ:GA&g='3+~ّXODH ^{;--wS_Ajb YFOƟ!_G\ @ Rěr{l1'S!# ܾ_.?朷Pՙв 5[O7^ _[VI$m[,X>o 'TiXf.maqi_ԌGn뚵b)OR?}:YSeQ؟ئ9*-w@wv)-n.| YݼrmY1Mn>ǰVujr|K?YW^V~O|V"ɼ:IJC:v.S3b_R ?ğ`opvN_ZƵ*}DSЦǛCsxxwv_AEL̕MR3 EnRC"hЊ?P*CQQJ/Dnm0G)h=fǶ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^nOӚL+&'CK_NO0իǴVVw7.0#mĵoTbA^kǽ!ptONg&!ϖ-m3;_{Wڷ\'K W?mZ"A^~Aa^\( t|x9-$:|ٔ7>)vM#'Eۨ+uv^,I?*t-+v~2Wg?¬`nab0lFn`ﹷ7@}[Zwr$ lZn\[K_u(&o;aw`{nM$~GӸ5U/i}@OZ?] ܨHv[tqя!䓶n3#{S̓[m]Ct@IK~) O)o|l J?cX%6Lq?V?c,n)OB/o-IO[^RmKXC[0^loOp$?_`{߸g6{eNmaPUg Br-obOOfucuѸhof[;/r%']ckݞ|"Gz ~]`!]P'?HQז >@Z +W]VB ?X:{ĭ H 9PI =i8֓ODSЪ˜;rz-;!6X&HY#WxpVD Tis+CQ=O0?u4ҋQ,n?۩>hCGR>GWh_HA7^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺM<>'5Nh8vZ\5}9'`W_iobI]U`GO\ڿk#FިO[C6螜NUϖ-Vꨝ ͵<޲XZAh zp{$Q@?.[ǝJ1g|ym('9M?!}Ofm7u]岃~B #к߿xsd#(*w Cwfײѷ+|,݅s#}?E;"kҾq9Uޛ[Ov8A.g1|oc>T9&6wffh7 ]I? } r^p!cm]S]xh/,6Ҹ:䑃Hn 3i;?w+Wji`Xit+ O4<35vwX)?lvJ堗&#'N\?7I[~ЮʒSw42ְ|y67@ #|hJ\7\86`{︇'ۮPIYt+Otiqm&J s?K'ISf޹ș|UM=ox"HT;&؂t+{-xBXKkvXB?޺~Xn 2{϶jD`}Vt;I$qвjmWp7ZuܝoػxҒ'9f%)VߝG#q>uԶځƷ:}H 칗w ݹZ\WuY KS &$&iEBi Gu%@ K(AG\0#~ GY=ת~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~0f܁WpyT5e,Bomu]7#XAOK=o:.%#t[joKWIUESuΆC'#MFH=o}p%gkvn-kB/t=۩[Bɐ- O@"/oMSl_uawSb=?BO?@鞟By*Ӷ?`IA\BS_ r.AH o`}O]"ο~sסe޿Pַ?V1_ S;:6Ok @m_cn%f#@@@ϰ5 )ٻn1i~Ю1cm A.LHTMMKINKA-yK>8I6?lxB?pϵ?Ƀ=1Ss)bI}ܗ*Rˏrq#?xۥֹĵ?ϡmsoIv_nuЦǑ}/ ,nP~9вU{j-X^_K^565)m[;w*Qegi5GݵK\m?iz=?ߡO?rf5q>{v$MW?Wo9h(䅇-mo-nhōO GYg_ e}eouo: rAypyl,hp6=jsݽ$Bt,]VN?r'qevЕt"Byu04w-+=I7*A{l8={޺^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^LXe`YXX}GaPz$q龡,{p;3lef?Vkd My7٬nƴnۣ.m歶;zp&J}\tg ?ܒyrz7WVhv7/>w-͂mac_[wWƟˇ +O)#vf5[;UTS }@Ԧ1Q^%y#t,{fFg[[F!W?tf?wŚy1[*|pP F Y;<`]#ܭO{r؏-{նp<[ʇ\F>]ٟ䗳 qX?6VʼS:{-<[T T[eޒv y}|+b$%ͧ_~l\*s?V 2J@O1[|[y F= ,~ܻ s!'ߖؤt%c7Lsfg0t?,{j [m#Gq0oƶAl~ޅ_{jM.`-m.?lw,O:?/Nfƣ=yZ%_)+2tL{nseQئH$[gZwv)mnt>kl8;[tk{n_w{6KY$6N?l(жjomW:W>\vFisubMqRsvbZ8mۗ! nMݭ8O:u2w+K𮠓,zH*D@$ yB~O:=XaUYHme:V\N{Z~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺI{=sT7l4} eNg(=/wMo :G@{?ŭɚMPIbmA_#rE='=n7\n,6F_cu>7Y.Efne*mƄip9ZxIQ`mK^EoXo"X?"|}負MI~m5~,.zs_&L?}{<`=IKԟd ?9.kO6W?R O%wv"Cs7&4RQK]?n?z̐O[``[ce7RM^K0m;[H~,mk=mS$h-Ks=~#[erzz풟G5>OP,aIp ,!?OUUp{-[d859 ]grq1?1p1~mHnۛlI};0ܕ87S }}4b]/^#]gbqm'+0 ~9vtw11S mzǐC }A75סm:rf$wK!2h]o6)$ua^7t AE$120e58CGRף EGbi0G̎#7u^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tוsi4eq{_ b:}sȊ0#חvo73)A!bݹi7At^z)-]oYkOMy)`{hؾ[\XZ?":Aa䷗|M'9cUjѐůjIvF݃}aJk??.6x_y@Ն/Ylv/6?&^)-ι$#Z+nrbvu|ܖ#7 9.{hHAJ'RvqBIM=7^ }}H}#7ۡm+a7Q.IGHUMiwUI_JYZeގ*o4+z,%)_:}mrQb+ &ofV/JgaD,!d>8WD R:'l6ɐ1uϡu۩/mQا*8 {Srzvf9\`O{r~,M,!WvW!оG5~Li8Dˠ{;_.i#ӱOHجiڷdis(?= }qdG?>Iwn`oRXox(ꨡ{*[u7 P<泸F yߒwLmՅӼc/(*T2%X}RXB#2K;0^+CQ= $S V)QO *8ne HAY}zu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺM\.;OyN31I}_kS*="ot]c:Qmwuf-z?H=Yߌ7;M&>:嫮==qVj/2W}/tb-s1Maj_ PAem p% t flWDAfݨIoFP`m>ky˰5A{Gmkv:GۻRI"=IڛnHT˝ YDG8-ִZ>")aav<;wz 䪦xj@Ri7!$ HiЍ\+D)1 :?>du>׊h'^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tɚ;oqƐEqf4H] ]uO t}%$,w O$ ڤt g&_ P3zbJMEXmK6J:ٯi7"Zvfr$j>{Sw08/NWWt f;{n)̰|[G.|O*r+<~~}YItnь)y3%?'o/~խo6ۑyßKk ~ܐV-.. 9Y70by?Y)Աۛ dpbĦ'A5N_y_eh`c-et f~ 6R{-!UQ6ƠN;ޝy}n֝ lm[~xHOIf.ޛcY'zmôw4irt-(sN vJqxϡt;exxW_#Ohh5t4ѫ=5hjzoKJ? 2! {l8B~׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺHYz:dnOj?Lc<Y?*uZ]׏m utsc\eŽ8xSI> :?q` X}܋[nJI=crR%x6۟n"?ou}/0d~KK֛[ri۽ttչ:t_p}VekwoY'1'CdkV)mm[\m7M?ޝ׷&u"8w>PS3CQ T?~]s'̃kMgr_|s ۮ0̌8G$o~P[b3ޕbSn?{5ve-Էp~Ά6_}@/E!1]Go_Ϡ[9ƛY}9sƨ<B7Oh˾X|q<|8)OCW&IO[5>M5+G@K|<Mڑ ;iZ=E~ sڥPܨn] Q%յO_^Xo}mx!Œ2(vFc=rX$RUA7Nuim.w.PBgf>k[Ob"O}s2wFڣ+CF ǙNpGt>\,~ÓD-~URDeʊҢA&O׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u endstream endobj 9 0 obj 892417 endobj 87 0 obj << /Length 88 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /Interpolate true /ColorSpace 7 0 R /SMask 210 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`!0Ć0 endstream endobj 88 0 obj 19 endobj 23 0 obj << /Length 24 0 R /Type /XObject /Subtype /Image /Width 281 /Height 281 /Interpolate true /ColorSpace 16 0 R /SMask 212 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xj|K$B/2?P۟ @ @ @WP!W&"T3rЏn+pl7ۢyqAxʒ6eM|o. |ZG, 8_ #@ dS܎ 0\4lʜ{f}2&Ms;bOOp )snG .@6e=>E@Ȧ̹'@`'hٔ9#dM 2vĞY "@ dS܎ 0\4lʜ{f}2&Ms;bOOp )snG .@6e=>E@Ȧ̹'@`'hٔ9#dM 2vĞY "@ dS܎ 0\4lʜ{f}2&Ms;bOOp )snG .@6e=>E@Ȧ̹'@`'hٔ9#dM 2vĞY "@ dS܎ 0\4lʜ{f}2&Ms;bOOp )snG .@6e=>E@Ȧ̹'@`'hٔ9#dM 2vĞY "@ dS܎ 0\4lʜ{f}2&Ms;bOOp )snG .@6e=>E@Ȧ̹'@`'hٔ9#dM 2vĞY "@ dS܎ 0\4lʜ{f}2&Ms;bOOp )snG .@6e=>E@Ȧ̹'@`'hٔ9#dM 2vĞY "@ dS܎ 0\4lʜ{f}2&Ms;bOOp )snG .@6e=>E@Ȧ̹'@`'hٔ9#dM 2vĞY "@ dS܎ 0\4lʜ{f}2&Ms;bOOp )snG .@6e=>E@Ȧ̹'@`'hٔ9#dM 2vĞY "@ dS܎ 0\4lʜ{f}2&Ms;bOOp )snG .@6e=>E@Ȧ̹'@`'hٔ9#dM 2vĞY "@ dS܎ 0\4lʜ{f}2&Ms;bOOp )snG .@6e=>E@Ȧ̹'@`'hٔ9#dM 2vĞY "@ dS܎ 0\4lʜ{f}2&Ms;bOOp )snG .@6e=>E@Ȧ̹'@`'hٔ9#dM 2vĞY "@ dS܎ 0\4lʜ{f}2&Ms;bOOp )snG .@6e=>E@Ȧ̹'@`'hٔ9#dM 2vĞY "@ dS܎ 0\4lʜ{f}2&Ms;bOOp )snG .@6e=>E@Ȧ̹'@`'hٔ9#dM 2vĞY "@ dS܎ 0\4lʜ{f}2&Ms;bOOp )snG .@6e=>E@Ȧ̹'@`'hٔ9#dM 2vĞY "@ dS܎ 0\4lʜ{f}2&Ms;bOOp )snG .@6e=>E@Ȧ̹'@`'hٔ9#dM 2vĞY "@ dS܎ 0\4lʜ{f}2&Ms;bOOp )snG .@6e=>E@Ȧ̹'@`'hٔovǞ793G\ޝ@Zg5{8ztJGR]o٣cԠ|9ߍx wR  @ @ @Q  endstream endobj 24 0 obj 2380 endobj 43 0 obj << /Length 44 0 R /Type /XObject /Subtype /Image /Width 17 /Height 17 /Interpolate true /ColorSpace 7 0 R /SMask 214 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`!04 c endstream endobj 44 0 obj 19 endobj 12 0 obj << /Length 13 0 R /Type /XObject /Subtype /Image /Width 5400 /Height 600 /Interpolate true /ColorSpace 16 0 R /BitsPerComponent 8 /Filter /DCTDecode >> stream JFIFCExifMM*bj(1r2i`'`'Adobe Photoshop CS3 Macintosh2009:06:08 14:31:03X&(. HHJFIFHH Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?\o.7_a}b_ ]ScNqq'W{ۮ /_[wIMq:ޗ8_}U/nH%0ouA%6?z_uW_X u\o.7_a}b_ ]ScNqq'W{ۮ /_[wIN?]Ǡ ??=?{Vo[e,c bR?~!O\?pCwHH9 cE?޷>uk=Vk` YsCێKKUunk7&yx{\~m};)Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$$|Photoshop 3.08BIM8BIM%\/{gdպ8BIM com.apple.print.PageFormat.PMHorizontalRes com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMHorizontalRes 72 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMOrientation com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMOrientation 1 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMScaling com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMScaling 1 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalRes com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalRes 72 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalScaling com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalScaling 1 com.apple.print.ticket.stateFlag 0 com.apple.print.subTicket.paper_info_ticket PMPPDPaperCodeName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray PMPPDPaperCodeName Letter com.apple.print.ticket.stateFlag 0 PMTiogaPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray PMTiogaPaperName na-letter com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPageRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPaperRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPaperRect -18 -18 774 594 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMPaperName na-letter com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPageRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPaperRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPaperRect -18 -18 774 594 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.ppd.PMPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.ppd.PMPaperName US Letter com.apple.print.ticket.stateFlag 0 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.type com.apple.print.PaperInfoTicket com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.type com.apple.print.PageFormatTicket 8BIM8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@`# 8BIM8BIMiX72-Inch_Poster_Footer_LeftXnullboundsObjcRct1Top longLeftlongBtomlongXRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongXRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM8BIM )! JFIFHH Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?\o.7_a}b_ ]ScNqq'W{ۮ /_[wIMq:ޗ8_}U/nH%0ouA%6?z_uW_X u\o.7_a}b_ ]ScNqq'W{ۮ /_[wIN?]Ǡ ??=?{Vo[e,c bR?~!O\?pCwHH9 cE?޷>uk=Vk` YsCێKKUunk7&yx{\~m};)Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlong;=FStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslong;=LCntlong8BIMRoll8BIMmfri8BIMhttp://ns.adobe.com/xap/1.0/ Adobed@X     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u)_[?w/맵3׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~ҟ=z?>7gWEV^A [ryٮ{kVݺui"u5+§׬vyn6hݧŊ9tkVZ ҕщHݓ?/aO:s?-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[C%%\c'j??dܶFY!EMƚUUP/Br`%iK3SrQRrhuo}ͽI kHQlm *I&$rz='C{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺCO!יzvl.Żyg dRz:YvՀbUD*s-xՀ^d%H`%pJT@osWzd-%0 I`JA"xI>mybYzooZz~B]ܽ轱Cٽc79vܨ&Ȳb)#`_sr1l$vr2 t >G̼R/odpWZDc9,;0[1?|`r 4MBƝs^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV%vn{efݒ!6}v< O7ܧf;7TXAu9KpO>t=cދrAZ ??( ~Uk}]}m|(ľ:7hR sB9:_6}7s{LM |]B+ѶmUPRS|7={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺW7wvo?1m޵ۻ\M͒],2ԏws4q'gIFa/sXyGe٫f#ro[\\Hg]A\cUΌTTQm[o2{#u_ss庑k`4£0ϭn}3~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[%=ԝUՐ{3#{Pd@5%'}]`m7W[ ιӲrL~ۉ?n?WU?Nv;To/{!¶` l͛b "U5A s彉Zna'xI#lOY0<=ޏ,ְH߷JA_{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{GK߿=#w;޹I۽Z~}PO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u?g2&_frx>GQ岹1EygWH%,B$U{ݷDj$;HE݈TU@鋫ki/odXaY"" ,*,$ƾ9_o"_o,??h/{ϓ}s'2/G^\l VQc+1J~GWUc椮khki*ʍVX]Ze{C4LQԫ++AHB+.mdEWGRYX*XA#^eGjL *lDv6ܛUS!> uG@]B ^@g.;t2\r{G kiqpMHa“C@&D5-qsi`҂ȷ7]A*%u,"tes_/_o,_k[zMnΐ̓qoΚ}?:v,Uu(df)!dHٸPO?qf^bw U!LWPD Ĉ inK߯߱o7AwQV!#&'?^D $${A׸t4c~7|3}eh2X3v;'jrjh&HH>[?g-"h'E9#ۯ9dtu) ) z\ݝĖ{3#[+*eYX@ S\?x'; _o,3G}m?ȬTɉH5cz|WIT5&OT.#Z)r7\{Ii;2ۯ,I#m0. 2!"?q/umEC)dquH*2$u?ϓ}s_Lr4{_ސ׬;7[6+NwH7Dz<oDmkp1O8lگ6Ϩ}]&:?4ףZj]:*{?-s kx:|O^'m:TեZu~8bq9lWYfjy|JA &?Wyr8BMokضݮ.n'eHI$w!Uwf!UTb@NXZ}*A*^I$eDDQVwv!UTd ǡϓ}sCY?x?Y}Z:_k[z+'Da߿O/e7_֎G}mWb5.difr4-v>VHgTxE XYr_ 2IQЕdt`YX  XUtt`2XU 4';׽t]cٝ8߮7aɅZ6̦v!r&Ql.~7}-a?.rO8Sگ7?%>ZO5GLrgMeDcuݴL|eWU|X񋢖IQ&+h_SXs${ou (n&C>m 4(_ofKwOتj:W[ hQOS\?x'; _o,'\l#v_{,V'EUe2]Mqu U[__[S@ 1#I,0UPY{gذwX`I$nDwwhB*BqeVTDKfwv!UUVRY@$0A9ArA4={޺^Ы#7sl嶲 Rŵ:x{QUbe4ra)!DLl@{[t{Mocu4O6#сSB+#엯[Յzu=ݼR yRaP*:es_/4Y?x?Y}Z:AG}m zgH^faNۇi ƈDbS<oDmBcr ͦl^mhӯMz55ӭuSP̞/sq< >'\E?V~Z[NWI_޽{y !(i櫮ZZ**JpK4ҺGQgf W1YFM+DE,hf8I鹦u8՝݈UUPY*XW>O5dSxehG}mq7wh'Oq<><rI6쯼(wI;e?ǹ1Ix`pEfA:޺^׽u*'[ErY*\v7AM5e~C!]:PPӆY8K; {Qiiuum42F]؀3@5<[@7. 33U$$㡫ϓ}sGY?x?Y}Z:_k[zn|uY,.U9Duˏ>+a XI4_z/yU:Op? 2lnػsHG>F!&VE2PO6^ Vzt?2.e:;lh[ʰ^'u{ߺ^׽u~{ߺ^׽t[}v^`[~./g2{cci* }9sF}:-Vj"5b\*$E[ݧ =ĩu\xS?]O\cpT,o~z*Kz͑"ڎXy ݐKqGdB 6}Q%y yfhr閠0i%5*H)flzEWov-UnW葜5 oƩR=_}m Y%=HUĂ9n.%3105UvC!]UBC1#I,0TPYi=cowX`I$nDwwhB*BoqeVTDKfwv!UUVRY I A9)φ:u{{^mױS#&'v$-LCod\%[ESҭȻɷg,/8s 2K /P4lw0@TO9ԝ>{o2,O3bfh&c\,N*E$E7Yуꬼq#+!„y 0뗽u{'grv&.l^ho%=|ت;tSQ!$#`]0$e6Y6%ncimln#V(^Cub H r^\YXGqu.PՊBT|kg'2/GE_4{_ޑϨ{s(}=܍g~G{]ϵ(+ :,79$#Ҭְ'0}|jӲmKKtg:U @M(:8ٹgH[%3Be؅R>`={ߺ^v;#|}v[/q8JO)T--;AH,+p3; 6roy8K$Qgv!UTf In.-伻b%gwv 31 f$$ӡϓ}sEY?x?Y}Z:_k[z^:|mUO"䳻c}I&ޏ,ܫ<v^֎=Кb _`7\q4=׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tG9ݸ,N6DfFJ3F/پ]lbtk4r}2ɀ?Io ݬ'nbH\zѷcx aw*_>/?fqZ4HG"mq}ɵCusF}RDV!O_M KFF* wI:km>!2;0,P()9q !˾&1Kz}].@u)`=݆//R?;VkcVEcԣ $Xy^cFv$QvU.4j(z'Bǿkhy_:2TCwdTMJ|eQbr Sx>ns{vYv HMV(\9ܛڟ0Xk)2L< G;;)bA5VjZk-#3Dc?1{6h;.AEq!j7OS7w]=i)-ֿR>`uO?C?Zu/Nq&ˌ{ n ӢbUA!}s/^휨U$e4[E1ֹFdR9}G~x큡s/d8$j ===<CKKK T$  UP-1E,(D@U@ `0qI$FV,I$I$ԒNI'${q_:3;k$!nop=J̒ 1kF}~g9i/k#pNC22jV%E= 䫯pÕ-q%fqn\VhBŇU;?+z>2[)UZ;OںA6^гOxkiu/ _M /53~&v=O{YyhviE~j,zp{I6m[vV KGZiiV(=ObKonb Wx+O.imf'w6ld, \|롽{ߺV:'yvLb@T&#)W8Q:@Aw}W>eM0 Y."fcP{^yPrmx}Rӊ@`xɖ9W=lﭝs{{^N;AGovM ߏxz"B<=w9^ט쀧t?iU .^7hv jcs6=1->T>}p7R\]4gv ǀU=lM3ۤ>1̞b7nfn,htYzDM.)i:E'o~^ڏo}MK٪;r(hɠ`2aXe땟y.{UͽA6?Q :ԡF}:y;??p"u;ֳV!]srdy)(lHsnp=YYɫnn[kOikiw) x*mbR\ >qpݭrlw,6.-cl+$qƃSϸ[o6Eu'K+DKcRFnu7b]E$.=RD(ɏK6ٶ7sI-I20e`uV2Y]Cv ]V>2 Hs t)D;+<p0{ w)Y:09ҏg `v8qa3&>i0\;4v6gܯۏ5- \M4pt(×tmQI#DuTt7Y#Q}*}12;(eؔln=t:̲d=WܧA^Zwl bEu{a8jjsWۣ>+lZ8i}}VB#!5G{Z̓ o^fi{A4%dQ@=ƬI"An{{:Dlz{j;I_Epm|Ǣ ̅ih" t,$N۞Q?p[X A,P_V9RHܕ<-FɊdb:69S܌? zGt|t;Q[Yk"_'MgXv$jo =voy3v:ͳV)BYp)TiK(gTEّ]ru=+>lƄR2jaa&* qz Tt1닸C`?@\K0Q玶HϭmQ(y Rԛ'#W]-C?pdQU c7>ڗesl'o =bOx7O>sjR4HGJ |2~չw2yE/amhllE&1|o#}ә/Avҟˮ{ _]+A*^{{^׺u{.3D}IR*,h8ov'LE[BS6SSKSv񐄥F.ULXڦ):Is"K{Ixv-ҩkx##iIں|L6C//,{ncJ ! !LkY\T"K]K?Y-׻Ko콵EJL.Qh5$4hI(2&$>fbO-r*mrՔ6650P5;RWsbI=`fo\ɸ>ys'$7h EŠ*Jg}~5g0XMψɇ ^J,7rts KI_I!6Hqv]v;iԤJ$r!⮎ 0Y_^q=0d6dpeu!"=P?.Az]D!{1;lVKA"=55D ]%BRō-@ZvvIoܯݗ${q3@Icj:(c2Fhg^=yxKm˘6^hp7HQv F p#&@=`7E m>Z9L٤`-J>nѴ.'Rک؇oo}n[ӹoZ@N@I"I6 &>r[zme38ȤaRA֮** ?I,jrO]9$S~׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u\AH5x G[/m݅rγav! $u={e&6gʸ'?v~co/_ґWb֌ #hD_B.n >AeAsPZ7ݠ6v2i%LĿ咚2|{Cm40JL++]2n_\s %HSiidG?D'&Q2M6jU.#R`ˑʽ ,Njȿ綿兝zl]T( (4.Ñez=^__>v4"IՃ<#$J#׽t[dUhm7.ը8iyΙ4',<54_[5xRx#_mt}}ޣ9Sbdzz(gijH૥U)zu?F9Hܺ2!=G].3UnG |z펵ǡuBfe.˖hȒ k2մђ$RP@ٽ#yJܭ:\nmk )I#mמ{z6|dmQ=e gpxut7[NwnTpn}H|IF8L@GL4nOw=咊=0I3c*2qNVdkax_d~_s$NQc+ K-@"_e 2g7dy[BAuE R#!<(r uᠨ,⢬Jk/OW,yxóvbI7>Cw{;9VEs.o\>]u{K{y6x3D04:*h=[Arc[P}TlYJ3l yF[m{a+&d\{>Ϻ\7_$/l}zP5迭2>emؿ,>CmBspxɽV$*}˞s&Eesq#S= ھ_5j?ELkZ6SX?>Wg#O}٪3& 1Ϸvxj{vдuP1p"ȷ[! W}=;8]G[} VFYK)|"E!ґH~*`M!Gˣۡ>1l<XUd%$G ֪qظ% PsQv1ܿnj`*Q2xPp'~9ܫ]'mCRoA1ՆLf0~]Aj>B_$foZ*u_5-^/Xw}/O$j&[ԩH|3{Kmw U\„x򴒣ahcuN@>{skev/wu_^EGx0V^S)D8u3~{ߺ^Ւ)ݰf,^H?_d!0s}܇f*v[4Fԟt;{=qjM լzf#ڣg:X(hHvC,,JchL-n9#O#XTTp4"БQHA H (~b~AlOVt^דxl`Y ~HVWԕ z8%H-H$ϟ9Cݤ|B$JEg%"G`'*o4s6UzT$Dq'VHUFuWgojH*ew&k )jIJZe/V#n ~}Q<䍾v[TyV9]ݒʂ)Rls^iI;ŭ r]2Tyvz_[drSv'HoK ǖ -CFG#zcfys9>b}6 k.S+i8OX๽}ݤAC%oekUkŀV=߳UVIN+HQWB6c2)jU SK)9G\{ X,H))"iejie'wعP)7RRH EjGWAމΏt_#~:o} To]CQڭc/WM$4t8|عh/!;otvQ{luf@UF]5@kP s~pWM k^o+~ptR,G*DW]Va#=Yԣ>Fuٔ>]s^ӿWkm(=` }uE@o}lɵgx.̣B׮_}7?+kX>.eϬo鞩;v9kcq+$%6.b'NQ:zhT48XNHQͶmQ\&;dyj4,*F抋Ҹ$|!zC9!#ARK*?7@lViheb{*wNcsy%eRC08E,o -^ɷrŬԑkf BH$B [0Fe')yz[dgW8iq~XSa:g)h{/w^TN͹6iZ̖ cUFRTJE!!^Ur%5lsm;zkN^-v57߹0Y4:eKE$gMG552ۻ]ӶrYͻt9g:Te1Y*e8hC=6o޶7}e%D5W2B?7 ilܢh.-ݣ7dt%YXy ϵ#~ȢtfS!ޝjL\nXrDMQ ǐ}3vk"\e"x~]Qkd>^zl=*y*tzX%VV1ыyokaGu =X$6!V@X]Um7ح GOmR6cȤO7-@5IXZ}}ib9~;d$m Kvr''yS6]&--< @|IQօbڰ.KVbAv7!i¯I_T=Ŗ=KVxYwOP?-c{7ܶC[~c{'DevGՂ|oB-3$u S%}SO=EH [αI$1$e_y?kۙvݒ7ab*|WxfxD r`K@7Vd 4PU$EB*::E,"Yaq,R׳+~G>DqGAȮA?h |zՙ T1Esn]7/rᣗAvӠ?砡zʌ@m??{*B] [ʴY5KEB~oKqWez:\i冞xii(!zʺDtK,YP.}mm=Z)y$!UTI8RIΑV 31U@f'@p$G=˲wA.u6&D{o؅dڢt=<0}}޶hv=|dV6¿K £ BƊ˟}'ymd܈+N720s#gG~Uu#;m'ooVԥ3GƸ-Q %6xĚ40R^5:Fm:٣CWR( #J`# k˒pwr2SqD xfr 0f㪲λh`tF4H!N bE> 䊤܏&n yJ[`Uv uG˘&>[ZxKsOgk`O*= /=}躋5:}uCg0LgabKV!OM7!PIf߃S&r״\mj)V4IqͶV7-ۃ('Ñ䄴j>ZEl;Fxm,|fs Vts:fKY&sL,N9QJf9g9b;9RXi0{^7 #R߶ YvN`GEЏ&VWRUԆRAމo񚃰:~Amrh䚞?_QV*)2>yӻ0ɕm_}oh-jl J鬙TwI!R&$1ѧ,~Os_ qCw'+jp.|w?pZ|?K&5w%8,o#6:rOsay Y%̎VɾAQTH'MPgxE RռW%_nﺽr?wa;`en;iW]Ai7"lDo1ann84lV;-]E[Olg'<7~_߬_,uM zѮ]e"h2j6RjYu?{ܬ6{ 1 2*H*~`h /-NURE}A=9ژݜN fc3V41;f0i  9r}ӗ7 H8TU4 ts6]yd[ZFJc4QŘ2zJ]5:nja)XR-tۆI,Y|h}c[w|r^F[8#ŝ疄UI:L`@:w}{U%B$1*GAc= _Scx:K![4ttP5Mee]D$qE@Uakwwmak-0I# 3Up$--P,fbX$ӭ4[9;˴J/*my4ɧ5{Z BR=(~\U4OfD*KO"Ղ4N'grvRdRR5'$[==H{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~li7Nힺϱ*pS)$q;A)dLA.ڞ&>Z$oˮx}6O-QolG%}usϬ=׎L$fq;)֐?%/ؚM91A[}L !I}:?Kavi"~,u:|;ٿG@럏EyP{2u0Y*벡H}{kO=7Am!Ԑ 7s4ڗDTv5>a[7Ȇ6K\9pЊG'uiL; N")UȰ)ڮVc4gv< u#I#"wc䪠|-m/ncC$";y$<'9o1X}OUʳUGxDUPP,u lܾHkMW5#f O, X4F#$Uwy f1uVrҎ)3w;)~N?${hE {bn]D O>lGN?uٯlcunu46b6pv`잰کp͊J<М@ZܽJ P j '?a~HM˞9o=uOk;;-@$IQds#\P,ĕP ,HboȜ}|a{~PԯK)Dy֕qwt׾SsnSr5|F™da=o{fIs@ZIH8v_n۬v}hEmkCj@*xRrz2?7믗}TRl섒"Z¡cH I2YRscɍK95xR]G^c}߶*j V ֞}nEr׹vwCB/3NޛV( 3N.0yTa>}ۙykuM4F|0 |WkIS#ʊkGjVwi0d_2h0U\uBGvtOxETkWzЧh!4i%-D[r/t=)9O O+{_wGj"_ 3PUI%x^)4F[gy[сO Gz0dhn}득m[X۬uC5WIqGcSPTV, j>/ݯ(#O#TUzEm3zX5f0I3^G\Ejt:{uF?h ^޻&W.Sn lr?Cat?saeAAo5ͻS2$`LGzϹr߶oaQ4dxNJ:|=z>t(ٽ?7D#ÐFzNuRK?Y/q>wǦzrem b8}Kt ч\sn'КP#@'W`|/bM=.K2°S^9 m)ǏǺq&mBMUt9 2_Ƿ^B<|o7²T[%$SR45NAx#=_Y9_˃}ϥ*܀-}8\SAOI {k3{Ւ'aHao#L61ü‹;>S֐}xPZ7vʚa.[RJ<ջ2Î? Sߟb]ޟHRf {JW-]:n}o ~Ez|X$PBW:"HM*ę,@KN' :?jitoLw'I fLl.{ ~{]rKw¦pEboiW„q>yop96&_j5HC3'AF={&| qLOTJ f kf>ѬRbqo璷rܗZYGU|Y]pŪĕ m = PN/e\VzTjA= ̍ccZ~R#CP/teau_ZEpeu }ZkK-.L3#2#jmm"M7veb#q`*1=}}s9n[?гˣ~Wݎ̻vl`qJϽhN$B$hJ̋U ,90*iWv%8goaK͝*?`djJVLAηiX~y{h=co/#,-O݂SoRc`xڝ&8u_n/.ф"I(<5"ǭ}wDtAȆp!]7]s *Qn]L7&)zPm_~l6RhwPv4u)ZDHYHIvs︶=ve.j* .~(Zp=jW,Qh4hPiQ{1v.$}umbX=r^׽u~{ߺWWޥA\ٻR76Vf'U\a&K Gw̳s'0;S%?mXe.[PqH?Ͼ]~6宦T,e3H1Xf=Bkifwԑ kkj$=C3w6{̳s/5\^BDq`$Gy 3GWG$G.{G| eq%(fݼ5FOqBν{osxmЙ*uq[gpfGl}~ج'+JkigP$1 鵈$}Eea2A'C@[2顬X IL`XNV>)% Fn* n { ׽uwZ]}(bcov6#ONjݵmEA¨h ǿ_v6xyd]nF)@#DPz' |oR\ZH浫_U~}lK\,B>Ty?vg_6]2ڙʅ+u.W_ +__~We[lS]3Ӆ ~}qޭǻxXZ|ˣM_0]17lKvL Ϻ0c뤈6髧jH-_o-sKဖ8Z(%53ւKhtuۼA+, &pR6ITf_^zŬMQ\۸1), 2xAGWҿERq`;v,6顋1I3Ҿ41L:e۽χsPqY)G(|=Zzi_ lXjƚ4ؽ KЂ<(_=ӯۆ_5v>CDkgCŭ͵$?qO=5l$\InwPRK_c=彸.mиgamqS }H$nI߻~]xY0m-XUYJDE_##ܽnw3Gۯ%_#;y k>EEG+Ί$ZCb-#,$y+p$jdmR32z׽u~{ߺ^ҳalfoh7C-=^w ?8dwq$O(r8sFh@idT.jƀNYry;0; ir(fzׯTl >Ps z\m2uoQ%DzHzNZ;y[eM1T.$jJ1=q{ǚwc]44+ZQQx*EE=%732C4~2߾uϓ{wNe'}Y:mڲL639_ )WRY6{wn+`Odh~jtknv}vm3ZџGéAEuN Y0ZޯXړ^]k {+Hn#;~ d_#Wcbzl2'钟%kq߂Fau5Wc'VW_H5 >cuE (xpU$u?Sooh[(mKLs3QrC@4.2y/Q9wX.4]XuϾF0 b: 狰zc1sWLy c p=G?|wHԬW3Z&[W bumxƲA |Ԇvk1,m0D>.v_wu?[V'g5~5Ԃ-㹩E YJĽ7׻;_iP=Ӻ~Æ"J{w$ϸAkIIo4PZ"*X9Y:kPTܾJ7_uf36@ûjҲT:TrrCG^\>T2?ntK}&GȦ0hEqz9sU@*<~x#ϭlu~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~[WqCoޛI؝]Y54Z(A6$P/ C{˒'*?h$O~3(?{j}}"pLlssm=/n4 '^CUmT',O GCw22콘w@]dGwoٱ-nv}k=G뮠|J\nJˉ4=ۚPx&6 'ՇNWמ{m*ogUwZKWP yt!tKyבCpۺe :)5ȧI>]nb0T0bx ^? ҩJlv+H8u$0ƑAvemm;dk i Q8PUP:{6|YwGn.ŝ͘~gmz=W0n۳x$)QE׸^&6bJ\AVx 3>Kr&BA[HBU)&uuNCsi(TT5Ԛr?d4I\7Lɿ|ױi*sڅ>wcwEMZl zx7$2[gmWa4i|IgcqwZ&e'Xo?<y(gW go O^ސYt)Udˆ%by.}6]Rrʂ%$}m!?:ԯ7?g-V?*Qp)FW7t7EfM<{2QVn:ᖥ{=6JjkEmBWܻ ^1,A$1*鋽ڍN=7W?'M2qsй趫q/5ZW`n%RUXT uI~iu#YdhXZ<:Tqd15)?emp9"ueaXC~G=R[xn{;XVǪazdnqk7NfgzSKqCh\~zZ+rm%{V} X-C|Q΀h9WUƦCPn\oX$VWwhmUc67s#=4|- rU1 { uضuCkgE$cURO8}Ame"F>lϒYwn9*)JJ 〛lx+@ᡰ"'^۞7G(ܖ 6ꦕa=tnl_%7X-5u\7[S}G]Z͓hynyEl 4y?A[o^mͭʎ&!<:ﺮ [Bh/7 iZW{R"e\qqU3w>*->rf;mտ#5ҵVZR шtǓ9b!itMn;b,#6nɴvcm]cbv >V+j I} l>˻5'ke pDtA_2EI99{;%ܯ41v?..{g@v|C.W}4 )*hfa}Ǿ{o_ۗ73( V:aI fA))$s,D%m|_&eLڊꚪ\ B!U;KU5]}}Tr31<wwr^ݻI,]ffcRYKxI''=v($Aq**< :7NuV&;e[ (f:փ}"V'v i.y}Zd|rZ+_KT_$~,}?3lƣv@VQ%W[=aT#춀Y<0ǰ6>F[EXHME?~}_&1r2DUo+} !_Gnħ0leCtFD{V)E[3㋳?5STdq5k]YϕմN-$skn2;5/f4:KV9B/ms++_M[8iũ 0j@yc=mﶝr|}&_=5a+[~8{ yqR WG%@}ynkޗ#WR&y]XuSr)(iiQ=̣ȆqJ#Ùx[~{y|մ.[ yv=l伒cF-ի3ļ.n`Rm&M5fj:SZc}vFiRE[R]osWQOZJ| ;&(*m;i#.aO50z؇-{h#H)gqmS/osɼ\ڳAEauo{>Qxw?xdbƴڢPhHWO%vLm25)#=GGy9pP !B;Ld,L};c7ʅ^ w(Vj#"(GhbZ2~JjUz{iQWeqӘo(6%=<|NϷXIn5ZACUyfGJ +$@u[on`M7(/F& HD*=~{ߺ^׽uX⋥{y2i}z]&BlC}-{J5_U$Sa_PG\n~79882<*us^Ӭ<]?uNꞗem=QxqV5;w q_Iz**ہZ_:O{G [[8yw8jnTփsWۗ7NrZqi#+(ɤI$g;̾{{^-uʲ*.~޷%?:rV=o55?5y]_*b䵒_k'|}5!lW{ 6ux稚qyu$ NDS'ػZZ|'m;+C'wv= 88RXP$CE'? [m\ >slRiMit+|xtl=o1BbEAuMrܥ%Vdrx؝O4ϲwI5_:qc~Tq7cf/'Y^@*J:(Q ;KhDO$!׺g3dϾsR+(=׹$$Q6P?qJ^%7ג}F)_% g&M~n<OXֹΟt=oq] WIw\J?|MY3_>]t3k,<4Poe~Wk_xDS YK*}Шr>*rP:Tv=i,fYd:>[fw8]IkIX~i =m]r)7/g?wʓsi7xcu!#<}7}"4yRkA8oP ydS?>¾׽u~{ߺ^׽ueoaż~_ⳕ1G-7Yl PK1Z}#P#ȫ; z0d{£j[PAֵSPʂ1W>$1r44:UD}CPuoY|?eEvja$twm̨G7 MX5j8y? _DۣG`3yԏ1%S_.ϻG,̾5҇nY/XPZ?o)֧p$RI5={޺^׽u?S CK'k㒆-@rZV?ojFBk.h6쨴En%}XoֵgrZ9^#,jW^Wa=ڶE5Km$$0x#9;~te(T?f}e[Q)OUv[ =20C 9A{!6[wi.qsu%x2}*-M*Myyߤ=ݺ[&q_ O!|IOP+@:y_8?z:o֫Q Cz<{5(>㇅or5|ߺr96[xGGke# |w+m2-C}_zUW>{{^$3STRT4_M[CS@-u=ZMDШP{Ue,]5"E ^!8:JG_*=T_=[hu̥Ӿw;mbdvf֘+KGOCx_x!ܫ3s}2D4@bB gn=e-ly80^/#R4G[UmݍB" SL%TfUIs_Y$$er,,=''m^~ɻ( ygƷj(:O8sFμ}[q#acO=*+ҳuynp=ÞTcz7U!"J蠒w۹hwy6qI4kD5.ARhI8V׶_o[϶Fe"F < 'iq";}w}&u-Lnb UOHjYT *^y!縛\U2 2j!HbT3(Q#ꔍNGLyFŒ-Sd賿t榏!:'LaqC{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^m?d3R};GR}_hy'׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~;fZzgLfDiK+RhA1?@msW] v|]F5Xv>QڝlS G{R*T֜:ܳ{EkW3ɗaaQAhE9{Q>&ק[6s"/Fg~rFMl;h۫?۪L=C?%34wHz˯d0GFf7fHI'8B0U{3xc ŹGFblm5@ i"G\)UnlQF_VS\M:}!z}&7rA%,skU nn[S$ѹ5c >t=ؿܬad~Ђ *Yi.$/b}r/.TPU+C B8\ww/pu̳"SNhݔ2;>qG,})|_<ǎ랦I[QIk W/r6_veDU%GuE6{udx;P2%9+,z*'b?T s)CJTV%]TrĞs|ǁv;Yȱ_5=qż".;DI#dGDuݩk:=闫PAԆ>G#Yub2HE[rUmT; ˃s"@u]'h9_̜r5?ohLjEf:{16& ~+CIPR"S-4Kh>Vvvu[}k"("EQ䪠<772^]YYٍK;I$?w5hq5sORG^*̢ɤOU掉 ~V9Dۤwe{V5 4NVH3PH+͒ҮǸ]G1m*M_Yc=طzXo[J'SfE.S#KScۭȡo8qLqt3']lWx5 ċm}~] Kh8IYO 0`_}0|~}vfW_sƼTHU{ߗ?':A.MI{@, V#VCǮ}ӹszn*L@"ǔ3&HaI{^?]7';AO).wh䩷%?R?,<{o}9_; DE_Iүqoqwtm&')o')4[p|FqGgۢi/ NjS f#f*x}Nn 3NHKZ}K0d/voc=Y܏ΐ0 VtCuƚ 阡4ük 4mU>sKع.GسX) .l4;aownh5}0YF 3ܡS >D@q7og`n[/oe>r^,f1]rXQya&y[`MZC$*"B(2Bۇ1o6Ԟ%j|V<A'&Cpv>MHˑܕW]lbv 0b[waqVѥ6I$$0Ƒ'mͶ\BkH($h%E >Cp_]wnWeY1gcf$|8͇ZMm+Q4ҬBCUuY0i2Cmp^{~ox{K:22Tt"JAbK>|=mMvW~gkR8vaHbBسܖ?RO$}>,j|k{^׺u{vw_[V)>8+f"zhd' ~=w~jKIu3: S8PrA]j??'Չ{Z |Tz)wS,.K%+<ȿ6w,ۋy^ۮNp\{F խQǡeAUY-׽u~ 9^~>9 S`u7!{Aw2Yx .qXWpWHymyl }$,cDSp)ध(থ*zx"PC(#(pTB1E,T@@ q~IYYIfbI'$ԓ'ݘfJ 9 `1k(쳘7>[oyq4k m#M>}/ٶw,F&ǫF|fre*Ų/y6bI9BLuS;znw}u`\H; řO>oigikH$HewȞڲG7]uOX|u.eI馂fٽrWRM٫YH$,z tSFs ~e[{}nCyw@4mu9Uu# W¼] $ބ歳e~z"hH GMYo:Sfb*iWvB WM>.ou~mv1xU;uI]JA6[mnva6(qq3|K38Dc_y=^oۘ _oA}j73n{f^pY"vԢ%20?|Vo-{fME)xw^^F݄sc&}\O^-]-Pno OZI7 ?홧VS@>U斞od?}]}TgɌղvMwWcv* *c6׼#n;=&]1Go#Cus{{0m<dZo|={ߺ^׽u~{ߺW5c'xʦhj$NZ6i?GeH6o5D#Xuf =b}* Z~ʚ}?yT?3od2098疗hw&G7f>Lu8ɌZ91Pjcqu7S=ۯg63k WPF+p,« u<)&o^8- 2 SҺ!ԋe6;/mñ9Vʢߍ5B~{}[Tvh vʹH8Nϭž ? 8:znId:4i]os'QOZ2Mv#vZM kO],MoG5扭m@fVJ׉ȕ*{u}9w=n3j%J3ZUT|؎!kALDrV-_nhEtOK `z sm]{ܐB]՛io-ٹR->U$І?{ď+`FrEMͽȠ*ڰY#J}?0hXQqZ 履E';m.ܖuwљ޹auxq{H#,k Cz#yF_w0-O຾|ȭ C:a7X)8_cv%]ҩzMCZ[kml| Y4gK)c߫ݿ{5<-SX!8"HgWA9t_nMq^ei&/+R5{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~rJʼldS,f~6uYcFj.fo8 >cUhbF@QUVA#veo~A6ݔA *)76yi[w2[b= KYqUG2S^$=Mۗ 2( _ !Ic4:|9ܛHn]9sQUdÈLcFShF ґ(ʠңb]I%cs?WEIw_W fM؟"RP8J_2Yas1a5?dsݲKt/es8'SHt I^}/*N×Tm v`m\`PRebZ96oMtwP:F $1\):@pOBZ=ӕkp7Ai+VcDxXvJ :!>˷kdvhXy {jD|8C ᇾkЖ^mR黽}j-j Zgⶑxv=җ Σ73-GXO3:N{{^ao䩾o^wY*lo}=XJ$2 ҃~z߼\]Ct*xLf& ED ׋g|͐C;/2 rmc_k+sABӀ.N4ޢRېKf6c2/ck÷G"iH[D;R2^ys/ 'm{55yU#QQzփH$`DY]#4i$F5;'n̨܀'ēEU8q'5~dw̿#EvdSIQb]בHbbmydAYwOղ[x_r?tcYOf3E@eNC]2 ~*w.ȁnG73)# bϢYX]YJ AqIj:?6~{yVPlZMkO<=Ĥ,?⦅va^gC7jbM,!rulclPiI.Z}4*܊|O)ѹja4 C,2I# 5sFJ+9B`n$Aqd [kP^o,}QEUUTI㌐VVM=K(b^HP}}ێLͥeidvi%2JA!A U\s6^ny& Ƥƪⴭ3O^|v̲Q&4{v\f VXc!Kk!n˝/4ZD|ڴ ӻKJAێK,9NҪ.d+ <FT3^,:-n,_qn,F_pK?U)־K-syI{ݷ;t7)kYdl#wb)Vf%'ZYm֐|b{tHE¤qDAUe(׺15I[ɪ~Җ6)R[JŅr6̻? [27*{˻έ*M;x Wy9h Yzn`|t}=].m;iYJDI*fXSWB[+^Io93r e`Tjb9:r77_r5Zsnځ.ȬHRZ74G>Z:J\}%-4t44RQĐSRRD! #*"oc AqTUUUET AyVv.K31$RI9$RNIo}vgxv]T{{E KOvx8FBFnp+h9N]J\n..@"k IVSbй0zmS#eF8`$Laֺ=B:˾gu"*]th??< ˟~XvJ[YWQOp`=b7cE7ZጟH$-kK3'Im@"FT<]<48DmאC;]<*ĂJ jܱtZ6ۑR1q%H5#+Λr!ᄑ& `D#kVh y;V?O2ea+~ctlu/"&C{Jo- ASscG#))^}nZۤaZ\>V T{]Cr;ޯSMV;-cYAQl޲;77s|VEE0OsKSCp5F'\p9fhdZ*HٕYw7W3_߼-ıY@rRӨ+3FDqXgIV{0O(JqTdr V?B |?ubN ~O ZC-OR_skO-~_M>%=kkM4Q&3tUCy`dk'H>jX*ZXe B,kǒ"e}6hEx5D3C2%] ) $O&S{qw+{nYM5Jdz7"ȥEԇ dE,lF1?]2j50_SNHFl3c`lDXǓm|UH~__ohko+mwK K/Tv덾z3ܫIuLȟ^?;g":r%5oM 6{m3]t n66{;,5ԩ:nQ|嘼Mhv%iQI :ɏWV^1Im{鷸JoH3G1錃,3TSTC=-]%DԕuPKYEWO!pE4n IXo|fn" B>`Ϯ++GT2e# Aq[j]Ͼ&+f썽ݻ98ݿC.G+]')F=STJR(`wܷ^˶]\6$.xPpYPYu6͋nxޮ#U啂"cUjh uw5}]{|`BUwʕ|hd|j'#H9$ݓ;+ 3-m%[q]LYUu:5,~,CsMd b M̋FVQ2{ʞ۪o!iv/M \)C"}iZX4+c+XEh}tnBOo@ފ}EEj wN(r8I7)"$a%R(|J٪.>;Yiw7͎pP?l Mme)xw_~weZ-g7܎ѮM6aƏ۾y(z%?[rYߵ'(%X+oMEDuXm`}y~s9x#v1? z{h=`aQ9xd8>tP~aMQ7[NX܉uʩ@FU >l鵆;C!nu?_b*P.kh,5;>[bӗw^n1!?2wڵR/Vʏ-oc΁iss FYD5=1Ih6M='- l}߽yyCj}cg3ƋO]m/iNHAzG'톦=Z;.s}m=hȀg 6}Rw>` W6rXěų-0mBzΨt3d!KC\0JWEr~3'w^ZlL$kta_r0,0iy8{Ytݕ3T IR*,h2OVSwot1װ3=#JſF%k(̤-jU]:[گ7=s7IZNWr@*сT|^BO/&rm6oWP4rQQ6V_??JMh5w]MW^ΛOxm 1!qKܴpE< UҤETD͖%%ܠ)RBM̚EcM_ʵ _|-yg{goEqW,Q٩8l`as\ Ke-IWS),2# &>Ѻ\HK#t`hC+9f=gʳ΋$r!ԒF2:5e 쿥=YԻCU҈Z[F%M6ǂ[Ɩ"?%9hv_yhj {t^*'%2*Ic7avlfnߖb'Jwu~ֻ[x~zͱU,BT%WṞRT4{9WhX-5_=)k5H,RM ),sH1+b@U$< 'mǷۗom].keu>z&srTs0?g,bjU8UO/usu-Mewe64>I3ۂ_Cm9/۫qs:wӆ6nXf$`Ϗ!OА;m9y;6n-e|CqxҼ V rCK{vE"ܣ31QcT>N`﫰ypmtUe6J2TY-En"j4ȦIE(Oo>r&qۣ1\@ZgGEuI;@B>^۹N~Ei +9 7%B2H 5$EEuIEԌ\YNFA<}Eё뢤hzk]ߍ=grwE.soV (jڹ#1Sܩg%ǵ#ĄDR\ z&bOh}KTҡ#QVF1mkcG]=~ҷ7eJh+fMR"1I ",3*;Yv#nKZxt |TRK4AQrx/}ZjԶ55wS\PfjI?y ' 84O~.z걻R~Β}uF7d@ȐP~vMPefK-Z[}Ce!YCQ-Ϲt@keQ1Q]XuCu~;,t>Ij; j MXfGJP-.GK>poveqAuǂ5ao[->TtO\Idhx@eGgAn?z:+Rhh;eM6EiL[g2AK+*-$%LJt^Gg9fߜGs;q^6E) 3F:=9On9Og]oaq *T?2Q7zmG_kCFDQdjle*Ӛie"JK1>^Z;y[fM1T.Hy3<ǿ<ӿ^soey9]ҵ(@Q}w;y VEg*(AAED5Rb2M" 出sw4<7׾>[WȫiHI\q#SW],kgMw7H3@X嘊j߅ZXgn]{}gsU d U!Um%%E= 8'JM$s9s;j B.8ԜqFz4E$Ӯr,v\[#S@ ZIX kBS;^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[k,7̃=יM;C?QI7gصWXӹ/[46lĶVWh~ϳQ?ܞnLw++H7?/^ ׺s'[7E !jjY,u]U Y*lClRlg9& 5l7$vHnj+=u ȃM4oen+l}Q2Z~o cy-n{2YRyϳ^n=y4h𤑸d5kKo.EcHFThۏɺޏ 8\F/c3 :~'Hr=Q o_n|j43(u?z}CL;Fё=:{Yn6WlM۾v۹]˚] 0Qd#(yt 23s<{走I"ƥ$jw ,kZQ:8qmӗs{*C#J*(KwqvFM;q,Xjy > }t0\os8n7 Yy@OdhN|8Lq<:+ePbSJ#/#SK!iNzA{t}׽u~ZWCl|sJV:raV5mGLkm>KMxkX\ Ǭ`쟼Mvy G2 >#C[A{'\׺y308jK{YmeDҙwz%>%*J4u5T[{=M7ޫ8@#R7-* u)8zOO!\Ȃ5Yl]PtimMG*p TUETE UTX*|I$,'IzltGe3l.ϗ)No%=}*$ko{ؖ< sO2~r_Tu ġ9-oc:!睻QEM8m#+HG{ή{^\i|X>+^cHce7MClmKz_~t{lk85ԩjj8ne4&TaTC۟poғDm^+k:ϔ|W|}{ߺ^ $ VSڦTb];yeG^AYX"Ҵ7 *R AROӔU[ ~`d]v1OSwF#A1X^ AGLӚCjt=lbVmºI:ƪ)vǮ{cQ{{Ȼ*4aw2kφ<z6wϘ]gMރcW]Fٰ݅ TdV?b1kjEM+Z _%3P|M`}ԯm]n >e#uhHq_}{ߺEO5|xM4I*iu<[rE%6_B>R6h)e[܏p߿~EG;4#u{0iVXF@nUdd4֐ԣ YrMi !+ Sí8 K#<UQ4OSUP-EULj%n^Iݏ%'-q1,I$I'Ԛ^BFU@@P<\X(Z\WY2ҫ`O {TiZT~}ii4D*O:3BFꝣK =o= I/SibxgҡQUGsɛ'lVQ*3C4YrɩϒJEUZ~noyvb"}$ 5$,t/W6'Hg ڻ];"} c2tHldKX "08mwʋ ۞̬ ŭ*_[[er'ZC¢U" }tétG]^bytaɻَ̣eqn}H:f; io@+}s1\N:CEKۥiߥHVZen4 *(TT~@uqq-ėS՘OOS*,*f'oc@:hMIꮌXVRYX\2}SPzVτ@Ϝ쎯TX[z%\$O_ۓS5iEWW?{ ?W }[Dovn"gbhi&Q1 :()(rg e˻yU'y̮#x=lwE\UTYVOyįai10ԕ?j=Ėr?chgZÒBSұC?)+GREɠ{8Z֖[_txK>6|_QuU}^*˛ʬgTky!YuS%">On %pX+襦u^y@9Iq}.y\ٸz˕WjFbzkqG?'֙<LHNswn)gK!Zʒ!dfHcwϵǹ;©md[? (ϧXܾݻlSCu~U kj:WZ:U?778 f}1C 5 0a=߫ym٨6ocaCq)?GYQB~TYN4 }dr>ֲ~JzuKoK~0+۳wmmGٷzdLH}Ka^O+N:pOHEFw9iQ4[DH,qƊiDE^XUQB uff,ƤzR᱙sqT*8>:Zv{}I6r\G 4}ֶ\iʊ=YP?iDF{!նO%{]VnLCn{^n;٬HՉ:X-c$/X J:쿧zgImsq2muM;2}lɵkzṇ-?kOˮ`}?z{Pj,m`+g'X֯t Z lL{#&DٜWrT?3ASJ*߻wPX#boq_>:#l/jn7?0GꭽOY=Ճ,wGʬnJl *Ebyi2|>R )j<[-JCsu$+|(ʝWB"Rl߸zw]փtÉ~\1ep[L1n Jj"<bKlgh獩P7R HNV=;FEŻ&[ȞW)"%O F <7SmnU y_g >Cjn4TmlRdQ4MD`4l]>LƉ֒Ǫo:&BARU|H9xr!5W_ N w6{ qm{vm&dcd0{AE{1(U6t#vm;턛^k 嬢 8hVF"KvqnpڧxRHO~:(O/[%}O@mzir-Μ^#ML qkq ܛ]9{Sp 1én="Gr6i^aWAnIUf~E$MZ 9>?j}i*ls( L(G&G.G>x\ͻ^GyXEQ+*]jMWQ,&Zx3GFzI)\G.HDz N*V!TT*$O@f4&h |$u۝SӝcqzMj:G1d&~=1}o[[6wOZC,$g?z]ɺnvl_ıĿl3։U5x5.TLL䨮sW<,I8I-ԒLŜ$'~@,`(F? :7^?ʼ;!?^?!{WjnɥHyq *I D#^}нaѼY-B| ؜,c[1PxԀ)o챙7M\"Zx<  Ҳ(Iexj#y~}[~_zW홐lFؼYi0tOjyjsq/sK -qno#5gFDRy,n]}}{T۶m͞1E$PJQ䱲/ˠ Ҳ/9ؙhqCRڽwܗ+ |9nt=+pH oC߽P`و]龫l}Svbj6*'4!U9eOW4XUܥܟȖm  i +K!0w`1Zc394}0+ *#O54sNb5v_͒D5G`ʖNv %R JSi^^j2\wH~ҵj) U^(Yjcٝm3-}U>AQGuV%>$Вj]6޻?wv^pnՖ,i_]##["5q* oNwr4@dP8*Y6Ϳe۠6V(^(5$$1,ı'?d.׺4~he|jU,CQƄzN繾8td;T7&F`Ӓ^MAo݋OKHW 9.*Od>,Cт&t׺#۟vyL7O#.Jxb*Zjc$/@`9pqm/lZ.w 'ڄ\:*-=~=ǹ}kuLЊppGTmf^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[%ɢb[e4 [o|⣮3C0mɚ;)aHLS*~_}y[~[R!ms ku]F6M5 -^@>3'1ZgʩjyZJ}:6j?vJr~O7EOݽ= ؝EV75O޹NiUɒ(J)OjۍӚb{b)l\fEt?ß9o婡;ydpYt[5uS PCd}i,USOW_U=u}mEEm}uSU5MmmLrM+17,U׷2]ܱy$bK1$ԖcRI6K)Ô6VBUQTl)MTR8uy"qje_yn߽ۻHmHѻڦMAhGJo:_}y^fo}R!J4eR<ѽm0;GC9S%۸< n/lC1MW.뒛~vL굝#xjm R~%zha$hϿWPA{]ήץnJ0`!šjUHyUaUx vh}ѽ;q7hJPa֕E8D38☠?|=:u{{^|QcMt6QQb{?lisW6wk,9 _ܳW2T#%bh \E;WkM'̫峙ZTa_ >fHsv$9ZAPG|NCuO lI9=1{&w^׽u~m_C>u;':հk#Ea3Ҹʪkl;kH; ͪۘ=uS+K `%.k国 h *EdVLs$XmAϵ|vJr qy?VOAzjgi%USѱMQ; Lgx6k_K/(m|ou9Kک9wgFߋ[QXnude4%'r{wq^@eQqޤ&2|p@?Zp@4}{ߺRn,cY=nl}IWǖeİَsnh ѿՁVLA[K܊pUJ7c{o۸ C-bsK&V8PGoǿ-iYeEu}uǗmpm 56(^`A_=~?*ʟHv?'fȈk躳nd#!M=Le=sZ$^:i^9)||bVF(Y.gjQZc]QNO]%|ܫe/wd x^cJjC EWd]'SU& ?UE}{蠵}ʻ&Egk4kWr Ԝ ͯi7͞KM(v?%PI}j>kRo &뗫3UؼT4SQN7Y ZgѤ̳TM*( i-r16fW!NF9FTE@ W‹wf.=fy/U]AjGp1RP,[|G_D'^JJ ]^ZwMyyj C=cdAƍ_Q;k%l.OLH[{\od'uuF}S9uUAj((DP${^`ۯd_@>gayf@_ZҴKR~CE̱u6G|VPQav'l459 Zj !9UQbGHQ>۶M@=vR(#tP[ADDV(QD/~~<\s1K-5$.'T55Z"IvQ=p{oSA۹Z&;_].G$9K}(wuU&D6x)X훖x~o%fȧH0O̺C) xiz %/,M! fbm,PFL,@ $I8%,@ Ndxo|hzV!znXS6FB};YhE7 Z1W_%:ﻐX\5t+Ɛ0 :Dwgzy2ܩm&ŽښNJojW#[o15ٸ6'lbeC6K$U^O{9{n5nD1FI-#j<+q +ѧp)gj"J(XE)3i׽u}cϐ{']l؛Zk))h1UY[K6Z0J[O~{~[ܱ@T ;Ҥ=`*r6dwaGր~}^mAϵ|;GC9S v?''u;O?Emۑ x,u`ł^JxE9rm<%2]#]h&4pngl $Qp#^F{qO7%nl HkY; Xj'}wloYa}˾sf+iZJ3'衧.K3{;9dLckS"Qff 7)ɜeʻ0"1MNĖW5#WKXr vgeV1]QU51HҖCp* 9W߾jܾ ]ڞ9nd<#@ґ*R^?n6ծBRmOسK"T1Oώ]\l8b iѾ!mr|˸Jt0הR)P){%ݞ_^E3ri֛P}BX{I%c_ɩztʬVV)*A{Q:$g=ܽu_wf7Uc">:accQ..x* fEjhy L$b (nm@1HR4i⟼v}fJhwIIy~k9gA'~,hbF6]Q]7X7cmJ"TSb2Q5Kiә۵, ܏۬r==_p&_PQ2Ł,hxc=`74/8rMV=VCӕk.{׺:ǩq &($Vuh eLTǀ 79&Z}w56|D&yR2R7Ƭǀ_^e滱cVKQU'M|ܨ!gq/0s.s) OA?ڻ>GY_(hɥ4*OTOwӴ.r }+pڄkGZ5zm׳Ktm4yֱľL"lDun}3zn {rJFH ӿ  jDcTsC9z}ndbK#fcAkUUU@Ug6׵mѳ[(* 8rjijĞ}t{^׺u4N]VwlRLݭGNv[e]ʒA'vn*I ;*vԊhgv#+<aq3k?j 4^?ҟ?oz }?T??.+n(7 ;Ͽ'F6L[8IhyJGf"L孬up c#z_-ɛ7\E*DYcYTbudB).ݪOBI=󝹮Ǖx@##i1,Z GgF#2w}wFVd6᮶)jEq _Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺX)m$ZewOuev_Ӭ_gI*Ԥ{7z/4G HޚYQQ=fT׺u5ޮHHʴ)?gKG#!4D["akX׮~ֺu{{^ x { oh?Z=G#zʴ-?GKG (P@U`{lMOMNO]^׺"gPݕ TfSU4ʴ)?gKG)i$+C,jp@,(HzђFbOY:u{{^׺JuI nK+YQXϫHʴ)?gKG8!(BKZGVw׬zu{撕&I&4$ۢiczpK c_gI*Ԥ{7z/ԅUE GT{lƬjzlMO]^׺MQSCWOi]&GUQAsjZ6Ic?=nlhCUe$G~|zt{^ÿ;_֘|[kdvjSHIr ?r͘~mv#o,B>t~nMk?"zjD7a~wAYU;k Q}&o>hޤ;loԒe~~%"A8|Cu9vӹ{ͳ*4mu? ԗ :J]w_>O`oM߱220ik^jrypsd#;6sG,nysq $/AkSJtYl.߬+SC3~[O= P7Tϥ#ydqx+ہMſދε{N]@y/Jto^N{~ĦM74Huj<~NJub~-s5Nf7\8SZ>+P.{7*.ibO11Y1|@(TUUQeUU@DƬjOGĒjz޺^׽uH!,QG+"a gVWuM:tJOxxe(EF"FwVvo׬zu+WP~5SC*j1h?R=gKGii$,jXFiXQ,(Xou~G4K5<$I&5$$ۢi@czpK  z?ZO~3O^#zP,$$׽t۟ktmt&ooWt9<+! Kmk^ag?HɫEE1C!̩a)G)ZgȭLt4[U4uO䪮Zک&JʂHN+v$ĒIM|ϙb"EEª(n{{^늺>m,oϽe+#^tI# 2:VЫp}YSB=:%MTܻm;otĚ6`,m:8- QڈqG 4#EE*{#gg:}Nz1ff5cS7Iwd|Ѳ)fMgru#oGM &,ML}Q{yq&zC ElHid)$ξaQ+ܑUH-^NYpāV=8 l%什`T;ZOuNQUFu-QZG,ZkDx%Zdyowۥ@3/l #\N 3y}7̿[1?;O )(`25iQ]r}Wu~{ߺ^Jig#AQSRz\>z 3WѲMVv3-ŜԬ<8,q [΢H +B t>a>X|۔aEw5-$H#grA+g%r~﷼{Rxv|͹iZGHUG@ {W;[^ى"(>Ϯy)=6[gsM*傗~0Mh\ԏkߏy74rEKۄR)J20>aYQ텃-y{oVbW˕Wf23y\~lA䙿'>+ryՙس1brO;m`ļ5TA*`:u{{^׺u RIo kmwWt gVWdM:tJOxxsJjx2A02ƠzieaFbG֌0z׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽urgl=otwF1oP;𿾃w4q9~,_*}iAPH:!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tr|?- c]Qi*{3yүhx6ڞEdlz !jdVo3WMޞhUUfח gMj P*B)Rþ{Q˿R4ϺvH`" HԁU-Nh }׻nl윭 nd.21WzQzJ^wgN{PqynӕgvVYO v?)%M|M&a3MrI\nƊJV'(W]p{r|zI_Pfp/+6 wQ2-"NXck>s;۹n+uA7 S.䪍EU4UD7?)_uZ*鸏$ IQ@ں8 Ur)Ă0G\$F%$T<v#ݒ9W3('kw|c+)0y=/<f{Grcf^Gu9sN)"_gzc|[Ͼ_xĆe*nr+OԊK$uZ~ZK %B?u`a! zgKu Nc)SH5\u-sJ( 3#@Q@:]VVRc*hhi笭*jJ:Jh5UU3H*$ k]:jY݈UUQVfc@I *q0q*w!UT*RI& ֜4C7ɯð'Ml@S VFUKU*RǾ>{160RGE++aVBh{5ې-6 +qvEġu%EA5atU==J}{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gBw\޿-z?>O'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uR旬;z;Y%gmH;m?,sܟ_Ϯ}w1/30?=Sq9Jb~ή@.v[gvDnCc a12 Z󩿧dxN$jL$ds $OEG6;{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{>aw6ڛsrn~7VUk nr" 62AQ*m[v̖[Fzu-̊ΐ0 #*eZPiB*Y^=5;luRV5f,qZҬSWFu7[tWmNz*h6f7 UF2;!Unb1/UR5yWFϗ95XĊ *9u<የ JƩ/9ߚ~-y#d  HcHCBXb-CAe(hX5t hk(&*Zdu6R={Khdu=XGȎ{Y9YIVSAr|0*ڻ)ϧdr$o<$v' '}7~7{/7,mNX$'$VC[ na 8و!ş *KӸ)GӸ7 Of?˻t3!- iTFFF&^ ݽ}o…m|8Cr7@^{}w΋_yqYhaEW^m|$iݔf"E:=MZnYȒ'쿻]Aͬ.>(~-dϏ;TZ=]L` mn?Yc8~=c׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{GK߿=#w;޹I۽Z~}PO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u1>/a6a^[5wFh2Ͷ'x %$ɥx p:OGڞAvl{Kۋ扼Mhڄ EZ8 eq_;6lWVpA}'W,7I]y֟{?"־?.f۱}ӊ;7nu~wTg)GFձG)*/u|^~p=ӆ. q$z4M@dʓOO.{${u%1Z4R/ HH{{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{j6Oִ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)zҗn)UO'&>W6Oq}݁d=x~` qV?V=Tws?UL?oт]~xӧMuwV_l?%dOm?_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/F뫺buZ`['m '}F%Ury*꧛m:UQ7(!*rZ^$eygF$iZ (D817:> stream xc`!0rC endstream endobj 66 0 obj 17 endobj 97 0 obj << /Length 98 0 R /Type /XObject /Subtype /Image /Width 452 /Height 82 /Interpolate true /ColorSpace 7 0 R /SMask 218 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`~g endstream endobj 98 0 obj 507 endobj 39 0 obj << /Length 40 0 R /Type /XObject /Subtype /Image /Width 16 /Height 16 /Interpolate true /ColorSpace 7 0 R /SMask 220 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`!0rC endstream endobj 40 0 obj 17 endobj 55 0 obj << /Length 56 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /Interpolate true /ColorSpace 7 0 R /SMask 222 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`!0Ć0 endstream endobj 56 0 obj 19 endobj 14 0 obj << /Length 15 0 R /Type /XObject /Subtype /Image /Width 5400 /Height 600 /Interpolate true /ColorSpace 16 0 R /BitsPerComponent 8 /Filter /DCTDecode >> stream JFIFExifMM*bj(1r2i`'`'Adobe Photoshop CS3 Macintosh2009:06:08 14:30:42X&(.HHJFIFHH Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?nn*umkGwOa='TٟE.v][]c#1 6K9ٮX[Viww;SD}|릯Tal|׏D:}2K?r~fe~F&CGȎ?WJY'v~wg詨r0l$z|Ϫ[k - k+s}&[a}bJl.7z0ouA/ۮ )'W{\ou/nH$8_}KNqq ]_X u/q:ޫ/_[wKa}bJl.7z0ouA/ۮ )'W{\ou/nH$8_}KNqq ]_X Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$$6Photoshop 3.08BIM8BIM%\/{gdպ8BIM com.apple.print.PageFormat.PMHorizontalRes com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMHorizontalRes 72 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMOrientation com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMOrientation 1 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMScaling com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMScaling 1 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalRes com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalRes 72 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalScaling com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalScaling 1 com.apple.print.ticket.stateFlag 0 com.apple.print.subTicket.paper_info_ticket PMPPDPaperCodeName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray PMPPDPaperCodeName Letter com.apple.print.ticket.stateFlag 0 PMTiogaPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray PMTiogaPaperName na-letter com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPageRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPaperRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPaperRect -18 -18 774 594 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMPaperName na-letter com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPageRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPaperRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPaperRect -18 -18 774 594 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.ppd.PMPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.ppd.PMPaperName US Letter com.apple.print.ticket.stateFlag 0 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.type com.apple.print.PaperInfoTicket com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.type com.apple.print.PageFormatTicket 8BIM8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@`K# 8BIM8BIMkX72-Inch_Poster_Header_RightXnullboundsObjcRct1Top longLeftlongBtomlongXRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongXRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM8BIM !JFIFHH Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?nn*umkGwOa='TٟE.v][]c#1 6K9ٮX[Viww;SD}|릯Tal|׏D:}2K?r~fe~F&CGȎ?WJY'v~wg詨r0l$z|Ϫ[k - k+s}&[a}bJl.7z0ouA/ۮ )'W{\ou/nH$8_}KNqq ]_X u/q:ޫ/_[wKa}bJl.7z0ouA/ۮ )'W{\ou/nH$8_}KNqq ]_X Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlong;=FStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslong;=LCntlong8BIMRoll8BIMmfri8BIMhttp://ns.adobe.com/xap/1.0/ Adobed@X     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^k}WYC۰++1qtUx |FIR+iapH<=uIލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuGev^ˤnEK((l\xi(Ijffm*.ē'ڨ(+mǢsr{U[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzuߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^'c%}MZ1Z-Z=tEGqP0rͤ*hn5[*ȪN'e.SƲYlQǛs{q.cE6h᪂IFDbA\{^gu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽t0Ǿ)i'U9Jxu=뺾˦:NEO|61$ʮ Y;nEpjƴwR Es~4$׵#`Χ)-p]c>;LGUS6wRҫ qL*JM\pFSDE#|[.+1jcM3' n=گܐ:vEWY4a1u?};OY421!%>̟gM❡۠Q}WkxtIZGQi{3&-运 7EL_?\GI$) 1i#Y |S9;*++r0z|6Sk֓:Vc!x!2[,̈́ըl"wf̏~?mߏ4jڽםM3[rI`5r]5-2,R4n3*rPv59=hI/b~6v/#L^]we:#TX^䋧˦Lh!_-vW:䃙dt}j׈V9{;ȞyUo>G[CqoJZl>5هu}ltTWdgDHi䦤dPo:+yu[{SO*\X/$Gfu`]7<؁FT-6v ?)ׁM*>ŭ[{pt/glF&vNodnںAWK[qO2Tt֢H@l^"˼.Ka|;QU7 _wl7.y%Wo?$ijtѺESc,c,utz۸;KN97[w^I-;GMOσٕX]xibXn4bYӭ{C~ZǷ3W&\syKA*< !"MJn0=: /_JuH`6Wi޽}me7CVnÿ6j hw-OG0JS<6.Wֱѧ 6+bh)*2O#(mqTl,TY!)Ⱥch*Uӥ?lH;3Cؽz״jom꜒ o?G(hij+,Q/ϯNo~>v]|Vh9Gw^i7~KwNl߬aVTIg U$FV! $֕XtT7L<zfmKec:ΛclN֘ɐǷUSMMja7EZkp9]ǺzcM ۗᬤol.*EYTE[~if癤xZ'J^X͇v^{z wG$M8Jݽ8]玂@TKV!dYS%5ڽ:,{oovϖ.7}7an6ŢW`b%ܙ}S[,xgL,48~IdEhcT!t̟ƷVxWmn=Ϻ䷧^˜fC&7#Usb)zi?S[QMW%M{ٸ^^}g19.=ힶ l䷆r0{wK-cL2[3s:2bkd uud99흝mU]i3s).+F-[,IS8T#ߊdR:;8Ex=$tʝ GxJmh FLj b$ޞ2oWS^]r۷d|mIK6k3%_oqс$\>D[$qT*&bk+^<:/ëzss~ݛ}K}No|ݏ ck=wގٴqԫE7)=[buYǐzXvj/8rg(;g>@EԸڜ,Y?zmndh_Fm_R-NV4QM2:oGU/~;lGrRo9ʌ&q1ċy5 /gQ E :; ?>sb||]n]npf-2{D C%NŏR4B켄him4aj+іw6^g5kbYof$p qc?{k_nKԝ*jRnMT{ZJ-ZTSέO%"*yv<[6x4RI[+>#Y+8 4a?t trƔEi,`>^|d/#w6!O8,+]fF %4TKHP\('M.:ZT/OȞlbm[d11cf{c;^9%;NU9YVX[V+ֈWy~.M[ul˿6YC,>|RfG]шіu`ka{9).\QME5c\c,FJT7]^ޮ+:% @LNjy:vu~ϣY]Tc3(H_6F+׈WSG ZY)'ž,A|0@g30T {ZOVӖG׸ j [T 8΢3tL"4]ZokGxӯh>zO1z>۝7m㪺lݓq8g=b <=U\V1D+`Σj=TtKۭt=j-c}-+k+姞imM:S啧gHdfH)F(`W_'譓E5Xmљ#\N#v EE.{M X-5!մ^ܿ͟6o{ Hsٻ?4ۙ骨88M_QBicU#Frrbi{×7KO|ت}뺩6zj9vZ2D*P74C&l r4,T7fo#SMeC.?KVWl7/jNۣt{"o`@ŚvEΪH/bRM)׊PWojJJOTSA;Gr|m4BFBmTGu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^^+/b63qen14Yn jc0\]$wi**eP}Y.}uz=gUn+1 ɍ"͛qIIz{^WT4%;WfC>FhwMuc=T>;M쟏]k6c6Dyytűv)Ր<#k^R:CO!oΡp_ذMUoݽ[1ي͇ M./k$fiy7:[>o: Eʍ֟t}6V{gg\N˭L'uIixydž=Tgx㧢J$G=xg'YGز`]N\g#qύr!ۖfl&*+JFUG5 x&u>O^'uRIGB٥IrK<7j{KܻW{mL 6C0H1 *)׫_^G>}vn5T=ikSN#qȬ$ *ԣ:A,i$n" _2vSlF㹷x$3J7Z飂RTX("+=J G^w|ci(7N3c`h]YEURb- ;MccVB:kԮ?$;jFMǹwHb{/2]K]R<.㦣ZZ~!l|uTxi|>qæݝ/K$7۽u&B9꭭.ٝ[֘lßu΃Vt &E{ʧF~FvOWY~6=꺞緖'i[b;S1\;+oP54F%2wULǭP_=Ol10Rp8jIi-L)UREL :|f=[>(煃*, 5)q#۽S׺u{{^jNg?vj?lMutVm>xMWêu?b;xUn޳ 87 >ꖦQO chz׺87ձ: NϳZoغ}7Xc)t涆LKOm΂ SUBۧ:z tM6au>9-ە{jTmL[bce!kc *Z9JcYgoDDqFh8uA%G;>@b][Ab/ OR#'g-#y S۪:9 ׽u!j{^<:ۯOO>JbGȽeEAD;i߇Ty{|LVeّ+TQEa>JZŌLï4SA„Mtf(+Gx],d}g Yi_O^'uf?We$o_;WP%Z[ôw*I$ƞ)'WDA JqUW1ln_뽹/Uz~嗣hnm»7nofl26ܵut3p16Bi!qX0DS}3}M>cݭZ*6=Ϻ ZDj*g%D#;JX|!?WY|-w[yٛyn.t{*2%T4uBqAH5{o]GWvmۺ) ez&ޕ8f׏ R |6ripMaaG}Y|2t3SJpdHf&8 R I,u~V8sۛ;d=>C}jX(}czK/ 1%,g*Du@4ߧ%G;Zr<Q䨧(*j\eR\}CQdqO|R}|6(7sɵrnbbZdDjWJ,qp)t(W:ޫ:{n71vA[AUOU[d6nR˗0U办itUcHAzíU+13MIM,).Ca4C>9Q"aW-􀇎?ӧu\Tĵ=41&( uN!/3Ii10X:ړwNX۔)GtFCmX֪[q{@d##fFvUm!vfu }:ѵ nv9xnH)R5jLin׈ m,v%BbZZ +!e|?M=n>v7Ͻ;[wo^*ە`G]Gsiq2(v2] ߏiR|r|mF; {w_NE_d04 ωܫHU`6"oѓ6ctKv*3o[+ w5v[15auch( b噔l }v|sy͵:42o2ɳi. V6::CtT"B%GWRzZ޸t2Ꝺ6٥l FPON,?ǷkT˭g{~F #uyXĪyᩱv0]8c\ n ^ɯoĮݽcg쪍Sss&T[C\ҰJ^c%bZ0u0 ^YT^^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^-m:V Hr vѮzx۱;9L0YfbՐbi)/Q>/R#}Xcӵg3 kbgo=Ô#]Ѵ(avu%;;k1ژŠ4TQ jNz<='{kǎ_ֿ'~ߘnONOQ {f q+d%bi'z(VM:o¥٘YyvM. r ۀT0s"yL_ jPzTm'/뎶S@KӦ VX3|?n=ŋ!z*f։Uk{^׺-dFfT(ciF 0C.B ,@uEZc6/MntP'osצ\omlM~_nfJWɽN4P)qUiFC+Zu.]O];^[+qe:gb\l|O!`T<j$׼>dR}ٴr[dVNwig)K6|' ZĨQki䢞5E ʧzSXn׽u~Zwol4K~v|29Yd1rԙq۳kipֺʰ)-۩V<:++m+/}]˺].5n .<5-떒 qRIj qəj]K^Jn>Wvmꏔ{[~~/xSNӈ@U>h!mIX0턎/XxrCI=CA>x>~Ja=|vt|g{gm(Va evlVEhj(]24C4^j:{h6O_1&'޹A ݷ2Zve5ReSVѢ*0C'M<_w]{ߺ^׽u'/w ^I[K~=ֻƵxLܪUH13*Mb qTw^dj=þxlכ56F۹S۹: φ\}jJ~!QNn*0k^A[|՟?' ):Qc}ɻy ɁVR:( ;:.5V:kk6^=_[尙M67#ԜH!>qUQ`R}L\SϷT@+æ;=]ô{3|ͻ6l[GnZE =e>6,PlEGZ>Q&;/rwo6[DQsO6 |XgyeHS4e9Y*tW+W~mڟ;sr61tfN${:Fu͒0U:SH~s22ҟuæ8\^gK·F:n{X+dr 6 7C=/7q:g {tootjs.Sɳ+ccrsdQkU>-(!pMZz->ֺ5_޽nqzs;J-{[[pd{ >w'6^ZxZCƹ~}=8£WOT.:wOKn wK'txXUM6ۻkn+L,5UrA}-fRnMEWE;1\X̶瞢h1 Q 4[zѯ[Q/mz ;fd6O|޻S)%JӪ=\~;Cs]۾^ Ǻrwvň8 g+g!-xPF}k[|쟁3u/dulhzy7 h1f;9j$i,bpز=>e)?jSW{!MK% /Vomݹe4 rZ5цey+k̯JZ|_5rZb|Ǝ))tcژh*2~,˪*~ gTaCzۯ`~ޛqv=Ykx,f))2XQMr>\|=!d{΢]%FrxVM,kisQ 5ENұ~ļWLnDԽiO7Mӷ(;1#2ubz쬝{ً2!y9289k&itGWHK-o%}BZaC^&)?CWgۂ?~εu^_M(u% /}H7V{S1>T|JGۮ26όʼ걝N_7lMTSeuFT~tFb:s80oÿ᪎煵ɶOs=j و(:=j.hݽoxg({;rTo8)qyXplz(dRm:Y՘K32yl@ϴ\S{? 0e=YH*F@AooV?UBw&ݛ}Um]wn&tM-&#M1O9.L1f%w?L_gZpolz\pav6O UFCGQKSS/qq|yub_Bu >]чÎrT;a<) W0HTF9&g-$za^y-k?V_|QGg|>ŦS8xڧ+fn?˫?ִ{ߺ[S;fn^nV# U7M݁tòL[R-})8>ؔ-|X?/~;{ڝ#9qjIRŵ!D5u#S9EkH#7Ľ?;faQ&on~di+7ueEB\}]] M#AR|̍^=kY;9m4r{#(Ӎ5VJ,R`jxdܓϷD˪`ۨ{_/֛tWGmǚmULjY̎RŚDֽm֛y-rgv7z92O|v{k$x`L`*L":ٔU Z׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺOKh^K] -6x{ueba┏byo ^pw&kgMMMUOfn$o\;5ZSO]SWX,rI53՚=:Z=՟ {7c*e&{0퍕o+G;?juf5&'͋h袦Vz_^MW-;2&Z[mn_)7Xn]ߴ7DyVUp O.<4VPh{Zz3̟vWW45?F|rwnCnu5M9&<]{fB"67F)@ gχ[&T':^Ԫu+A_)V*%+%RPcJO<#$fb@~ r?{o/GV(іejDi-` =?_7ݙŶzyuR N}5]&A5s흵2`ۑUrg-V=%57Uiƽlz5a~n}n/]N l{ubj;;nn/ ܵmL9 ʸtG]{>蝯OջovtnntvH[Scj>mn۔JX,bm}Mt)`+b$w8%Uvdٽ6vm]Jb'ӺZ3 :Jݽɺ"ڹ'mVMKQUNïbW\}2$0n,0G[ $_sxhDҝ)9Q֨z ƥ7e<U:2C)YH /~t@`Ue`C)ǿu0ϋ۟jV;9./Y[Bk"i)ɧ!l,h@JV 0u}XdP!po=_}azgb|i]vVPu4!0IAS'?E3GJ*:id?qЩN]c'm^ggf-ݔ޿]ٽzk6⦩g<a@ଢqQ5#Wˤs2_[?)jez֗vlDH"'TQM`?W2)/A( $~DV1J%E4gu7WS ޫO~{ߺ^Нӽڟ{ 1r ~ <5i`9 {Ii2fz:6dE ,qȞ C׳տc?A?5h՚ec䫑SHnb}NSPWյg͏47#9޻Ž^]+vbaLVI15~FFLQLlZ$No.׏ Qڹ\5~w1;zJueuz8LR k{(aCׁI>N&n͋nþۣ;auWV( 2}RjahE;|s`}q)*q]kڸ:ɀے5xznS<:֤ȔJ_Lz$pwjo =[WWwNٛ9(LX67Z|l0DI?nwsn[r}єgw.Wϔgyiګ%dI5D3; u^i1]wjA}`E]a0]އԑQõMfr-QL򸡃(S# ounZ,I~>׺8O(bpHYtƁ=̫*{o^v_`t:“#J^# L2[/-6$S >"A׵YfzڪYWyfWgwbK}ߪfo7'f]F97fym]2_24(^BE4ǡN ՍOV F:{οM?xK7󆧮)7dgrudM̜LE#U/# OܸbYT/I=,|_;^ߧ;?=d];j'U,6^ qP9^cd ϊ)mGTҝP/eP[(u}4vl mWg~w >ߛ13YC#UST)d#wץ[iaCK?/``;#*6񭭴cxf`v?VleLxm|yj=iDCߕBMzn=w`mwf{wz| n 7hM c&΅pzG#ᅴwfu q[6kcqPK>'-lS3FCAyiXP/Mzρc#6j.=+[VĚiC s5yı.M[:'tV>SJtC▞h*+(璖UxeTQ#@>ֺk*~Cv[rbzK{ll 6| CQY\梩*L \5$See*m>ֺ?ʾJv|WÝGim;|VooKSڭ.z/=9gR}@A 6iNu&||>|6ݛRz~3znʽ噒-e 8=*Uuիҝ+~.4OƣgI뤓{m b[b|8ں< N*#j▕,,yV5=xA=1vxTv6nigjT*(eIjv!(ln|^:+MK*76W;:!xjd̴z,>RD^w{1Nս7Y~; $7y P[smK:-7wd/^z={Ez&ygPTyzzjZH84QtF'Q/te_0_7 ݴ}iKC9ۭvkoԵnsR岹!,K5E$nҠ^lzAL =GUv[ktኮm-or5 >#T *RQQ (n=x:K)?-r;f O2[onmZf" ֡qGALs)I*[BMMz }gzzvtuڝ/M5n%79æRX$S&&.7"tf>_o5]wYyO7XA ?ۢDo1XrY|~ ^⪡xuI5n׽t[y[=ԭ#7fدUf =DwWhᩦfh䍙O\n~8S"nݸ u\&QYZuڏDa2vnlV#%UumkiZ:TƞDI)f)ey=QW#Oy]6f:vƾoig #j)F)d[ݎE:FϾ^AԝqLcWk6;g3QSeW(lKֺ̪u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺVVܧٟ) zCzw&^g7vS [46 UKaQF$7' #ϫ/|1=w 5~S_":vu~n|ߩC{(YDd`)ht֟:ו}z.]}?|2v.)~Nu}m,>-v-[쌔;;OE^U9Z*fDJ"xxw+.1kTR~DtVZѻvC]ֽv3Vv^H;{֏ooͫiqrsӵl鑥Zx+)cjg^=bޝ֝)g…޽#z}}vNgiLyLu.Y\O,G?Axׯq6{:~M3NN߽G}U{nvUN7- NSS/COtit \q,;7̟#bݿ7XvӝɚvO+,fVKz+~tvۻ'ڽvuvǾ#Txmڊ hdk(ꖶZ|jHq#F ^U%Kڝq[1bYf(r31ys+"Pg2[joW=)[*TLJZ=IPoܽq_&~:u/Y[P U-MSSgxUz:_Jyz|Q6wPN>(tV /)ݻؔrzlTsjG؝G!u}*چ 5k *➞%fq *׫5BVۛg|O[C#KI'Vvv|%.٪>ovÆn\N~|-C; D*zM:+W&ScWEMO?Sv$9&sbu, xD4:zGm>poA>-|Y=<zWXB]?/OAKj5UrG0#,h=׵f,O9=>*[s;c%3K&. ,r;vY$ZXeS׵*5a=O^z24 7?gk#\y>^mUAY}6c21SGy&:dэTTϔkj`x_^Ua8ͱlLF+'QZ}]"E@28Dff:aqEOEO繢"Ha5!# E6IZ|#u{=>uBa[zQ|()7+ ^#2gp=ݮ+Ncї+`^N.Lnu|>v:R=Lj(]iR*igdiY%tv?@W=jKQAvY-[olobIl Pj5'SYM)jn~,SzSk7a$mQ<a>r}zu{R˟mݛ+*'}&t|G*(j{>eKR9S[g[w!h+um#?{F7^:[w!h+u#?{F7^:[w!h+u#?{F7^:(<Ŀ{z+[ׯ6+)to wU_8q4ᩒ%_UdP ElOGW:[\4̚ƨ.SzW|,^Nf{,3Q{+KLڴ>!peΕ24E:? Go~[W/6Osoc﯍lL? & dR ,t4?# 4R5bI 4nV|}:uH/^ф'tv5OYn-۟=Mz]ˆJhl 7rVQ^-;ߐ4qfߊ[H9?wV~5J@8\hj]h5-{{HNlUJJi,;X}龶 U_o;{#ڴ[[aSG7&6J'TL\ #H-HAՕAYW[w!h+um#?{F7^:[w!h+u#?{F7^:[w!h+u#?{F7^: ̷N]?twoTzy7]ਢ;;=ӻC>6 u33% F FfE@]M,U:){10aKARar6 =:h Oϐ;Gac?9u[w!h+u#?{F7^:[w!h+u#'V?IRBE(|)QpG{{H"ߟ~Ǭ~Cf˭sChvK \1hW(9=pL37RCtvz<ƍ,XSƒ\B"8uuWQѤH"H^7FVG[ws׽uŜ&,G hK4H"by$vT4U=ut?ɟ^\% u4; 5E$[Ii$pT R.J=X)=^W#OvN|F\f꿻"mݍ&jJ9esմ/^GM.1DCQh7bSV^G7'r}[{C.m DuvyĚkv>cyl:%p@#rTqVH/k{߈{H;y*.['6I%.;:㤋ua`ca</kq1C]?_;~aw_d6NZnfc<޴OY}Z4WNEM4$Az1V uib8m'cͽuy>lp=E\F]ݩDa}5QSQ.u$\i,ף3yi‚+ 7oYnu~C߼VGZ0oY&7GR&S#׹mۓ-$3RFj ]:IWGQa`1"yPT"v]{ߺV_Ɋ3n{y`GtE'kmwMrthi~UjךD)v pZCZt'ʿ.͝3o4YIb;5,SHXB_K]DtIuvTݽG/`IX.[ R\׵6nlear=xU=u~}o+-9|j#9l&rʟ?$?srlkiK9*\N66%RjRhj5Vms ԧΛ7V %ɹrUaJ_UQ4x,JefdZ`8.-qI ?j .V}_osՔkl5jWk2 vϝ;f)F&U|?m}~u#S)w (zŚ6*#+:/;?kcq1K^Sd8mey.立XZ |G+eS@"M47f *zs͋!(/\>KUJ{eu K "b)b54TTTӘQֻ#>w2U{쮚_&zfώHuZ}1w3(U֏ϻu{JL-6Em;#{rQz24MGSĕ*xϳͱmvcOSJ>;cW`RnXi*vrEcc12HB<;%cϣ+ٻ!ifzvuSW뾁%c{ڟúkSv]t=ryL SC0+ԔUNXT[9.;wd5?km=B Q`,>3Zǒ}הߎ%G^=To:^׽u'3eLC}&:u϶z^׽u~{ߺ^n7vʏ36 ?:г'܇@;{U]},1|r?ѷztpx.۸=߷Ksktarwpr nLn[]pS$R:_=ߛ? Ioތ ڭC4{ hr֯zUUPSNYI3Еj4E :*~ֺ/<y&:uzHnkcnT{׺ϊu㯵3_/"M/ؿmlM~]8:ln{{^׺u{yz+?r/۟<ԞԞ7G.׺u{{^׺u$vmt}'˞AsA]w`{ GLm>_3ۺMi[sfu~l*MO[U @GRPhs`!4ʕ "~i&(w~SC4S3va wH\}UD)g ibR.ν{o cs#؃|cut4ÎWu8[9|+%,AIl%]wr6oUaQ֍ML1TB47HM#>R#jz<}VO%_UKc(!jS!PXe:zy#,r}uG)sJr dJh/GR3 iqPGMu:^ D{v(:=^Hv][wdo&{nVV l^D [V8Dhݬ4{o>֕t1lW7쎵¼ͤ@A,P;5U`WHMS^{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~7f$1b2X[u;F1=faCta8 S'~ъM?qYLJ]ٵ+kSC^םyC%TJN X 2_VxuS()+F:܊ČG$tWp_j\Ff5Vy,n,^3'Tԙ%bO:\=u~}o+-9|-Mͯ5X.rO}xu,f -{+>;rEܛrn &1GMP(h("bz 㲳2ɹ7^F|:iKw &*EnP"TBj@8u_oxݝT*`$5q:JiBȆGG7RzF;FϤn}rrخ훋UfRc|VVԉeiV1UW X=lzݗ~Gqd1GAQUrx;hD#/7tȐDJvxHJbōONAhw\^[Hdq://sU*%Lc#Ϻs1A%G4XGL)t٭s;˧,7]'=91/_??Q|#=v]{ߺFjM_^9<^=EKqn}^I64? ʟ=(M&6%W˚Vu(dZ sWHI^׺r]>OaJ:Gݼ.5)۞kPO vN5jKKe-=D ÐHJS{ר%H:xan!j_G5?{SF|fz*JDSA,G47tW"|P7.G>6Æߙz:Rln켅\n֣,YKj:XSA6zo:u 6l;+kY֚pֲ 1w FWʝBM4A`A#aK`uӪ?mi"6s6Ӈjhivz JH  |ѯ>|{'10lų;-d*(rR!!Xl}ӫu~TwG nc~籾9-go![6t8xj5_AUEHH{r3Fz u50WT#dYK Rl u|>Z_[}2T4s{ߺZ47χcʌژC 6Zh,vݍXvfÄDkO[SVPIZGqJUj_P3# ?"CY?t[asG{!K;n\dvO3׎lcXCej >yEMzܿ~׺|j/ cAQM"MI랲h%aD} eK.T׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~58Lr@M=u~3]>g2 _ zbv<`LُwnEQ\| " bb?oVG/֪=:;':u6^ͺ;calL}|Qĕ)E]HDW̪3񘨩`U`eafWXPA۽W׺uw|HĕuY>׏A/,? ?e=>׏?UvllʡuЛ}ٺPUG$T@jڣC(FT|`bVg,;,D̀!*}׽nԟ~X3~sw@ڱn="񅭮I>BeMU;E8`aHfefU@+զ1濶zj?yvۛ'_n5cv' L1Ɇ%dHo]DhJj[HYu\^%mvWfSfc4T cN_C'm~ǏDݺ^ьuG6GĪ?uSUHʼ#Fv}ǣc|xOmlH,}+wn퍷C\sP&y :bf>E݉[=O׼hb}u</_~sWGWK<[rW{ŏ&/_};6Nu{S&\lY^lcuY;_%j`u [SU+pHfBFڗ=Z'=oy9mudel~ݟ2װݿǯu=şj/_k:gʿ>_D_؛q8uz>/Smo]o'~!ï%GY]I׼hb}u</_~sWWFVԆ׺y۟<Ԟxu>t^ֶo?%Gz'?Z{u~m nψKS6ۿ F?a H(i6~51x"e**4E~{O7ӋëV׺?[>K|oӦk~ΙwtI7`j1N6?9PMLpllM)Qvbɥ5oPun};G8K9Lb&ǽ|0OAKe0n$ui,tFy+뤩ٛA*^\Xƨ2nڦ6DVbnB&{]qt7Xh% jyT0xdX20 uP_0-+SL{3]>Cu+7xTQcfHk^[KW/]T&B>v%5}eԚ/~=#Z$uDҖHRKG%"IFh³!'I6]5їku|> ҲmV+}9G{urH[]fdc]Bl+؛jvf}sTfo[[;Bԙlv2XDYDHQ: $"zU^1t4>-~ŏFOvݣ)+k,Ra)ꤔ#Iv6ZaQЉ:7Y (gbM%uDfIHPZ*H}Q^u}ϙ(ώ݁{ac7em`zvh5tRY,a H*t*juh+sxo ؛vvMwy}߻󓀯YƮTGb;x@V8E_N;{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~aOO<42GT(E^yݷvYג&+ 5FM}{{^+xwďIYoYu=mxM~SߓxȿGn8{2ݥ͔=tv]I3U>31pKUT|&c YdX%zQŴ6pŌvWgͩC^O8զ5@PP ֏ n;3a;ean;1Xs5iGrVa6SWV% %$M,Dhkk`,O9OT[WuC{-G=K;nk{ny&?]W2Q\ʭ]Fb >ֵ0}{a+:Q:r5kPddjkuq^'T*j uǪtl~E|Tvs!;tT6L_ɌFNϊBZ-El>:6k+{>wo.Uv49)zʊ q&qSt % ioV'^ECzݓhZ׺Wd/sx6v-sfXzc 4\q)FoΞv9l@쎗31{nmKe'OV #CL+ ߝA˭е뱿Q)Ȟ|TtVv~RǖVz9NOU%Ϋ׽u~m_ G.mG퉸ls힯)a) IaP,3E *J c{¿'UU(M֨:/ :>z^doQ֟~޽zA Ojo^Aֳϣ;WN3έP;3YCPe-*TIK*2p>߈ zuA??q۽Sŏ&/_};6Nu{ ]oΚ՘qU54Ta뙛BES*^tm-^EGU7 ̦2(rT5x?uf;)@ VSdy i=QTSOMryuTel~ݟ2װݿǯu=şj/_k:gʿ>_D_؛q8uz>6p؍ňp9mv7FNX6^j] DfGR~{Zꪀ:P,z]A Ojo^A׿ [x{DTߵ7^|-B?ڛׯPu_޲/w:vXmߍS;Yhm필~Ub=4UI5

pw3o Ť}}i xtvR>ZMʦ}FA^uA-.JXd-Q4E3 `-r^G5ۧv<e}Y4};#dSĀipQ"`hO׺ؕG͠h`lܤ(Zo``ێQ0tQH/ȿbjuV֙tF'#>m-MͱKOɏ*=vbcFPn{e^'O_kx_{׈{Ih+]MQGMm#ru#%;ak|ʽm)WՀ5iM5-][r3I_y]-ޙ&wml³rJ!X h8ȟ( ez_~"z';b2yL6RZ +'beD2XJlHݾ}W~׺ٿ|+o\g,%/ؽiN]>FpcbUL$GMfUCglu~{{^׺kf{sN-gK|rf62Z*aDc1h'1֏jc]+S۝W{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV٫'m%o;-J(TeiwUvSX%/6pkYV屉[4u\+~N_˿;nyޥqڧq9[j+#wguTk$W\TU5NZI%Ѣ_N*rz*_(16buG{SY}ݛ;kF۰tjn;3UCaqdSVECB!x˧*:҇u/n̨ߔ]׽볲I_5N J3\$&|@ӭzw{ߺFߚ7NxqL\L4xӖ.cc,HϽ0Ѕ̶%w]|]_*o'#_/t*e lL[hꦂ&7(׏{]{ߺW>;~tU)~=yl&Sڝ`<5ڂڸnLϫ.*zMOvI|x8ϔ?{c{Odͯaadj28i5l.IijD*'Oi:s3;vN 6흺zϰu޿̽zoZ[nH`eSM0Yc ^cӭTytc~EΥ'|-$1?KIۮA=fB}1U Ϋ׽u~m_ G.mG퉸ls힯׽u~{ߺ^׽u(gOF> =Q''܇@;{{u~d?P{Fá޺Ano[9^h7mmn[IIgSz(H {z:u~ΛGNΖ+_t[|7,b=7tp}պu{{^׺ul*ߵ==6zNgMIêu{{^׺usw&bvPTsyF(3drL<iTU{^K(hol?V UZoFV14urH$ǽ+Ň$࢚5c< J4=6ƽTV S m+?W9qW=_~>}6}{vET7D|j?$]햎xY~nS,OIx:7ؿ/$;?=7:q8uz^׽u~|Ի[fqe9Ok=!=t;v2]1hfQDխeBxM& 4$N ;*(z_B&={޻HEFw>0n͸*#ٛ ҭ*ůIX}34!BLHT5{[׺Ob_갛3?;7%kJߎ̋H5$ED6x[^5gUcNmĊv,Qk'Xڮ/u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺW ^鿟eWwwJ۝MK,Ƨ:x⎕%%km ȎGnLXd`~׫y[7eGMg[~KW6S#OXYBU5&>ԓ/bT'd3쯉_`eݥ[+1|Q<қmemW|oPC%<4Z4dMU }z]5?^%5T9:559ƽEx܍#mTjq}|2|Wꚁ A nu^{=3QDJG[ i+!eB*f,q,`EQLh^'{m;XV9KzsG`t;sjƬlfa7U4]Fj\f梤%N)4jy4hGT o쟑Y޹n clL&wn-Ϻr)MA}+*fi<ꨖ{E{';߽?E e?6{o2/qw O[C)2Tl11uLdS:MTkjNuAz{Z|Tg=[Rl{7r[ Gm7c8#E[ʞ{W}q}# s:kmRW3pUZ}4BK@XȺg>7||sѭ9ε~z#5[z:@g!Iv5$+֩):WSH9ez5THo%Dgk}z{sJE$4g+4= irDžP.Ir}u{չfEٽ 5q;_dkNNwPM1I<) 4 XV8tl={oa/|siu/hm4{#[aVdz3R}6Pi1UtQG +8dSqU77g$KrS6AU~T=sYAfX~F)*gqbZ{?@/jpz7G_B~}M,eøs! -%-Qk֛UIk{^׺ڿ2?&]ڏq]:=_Db1\ ^6"im8j -Hb8um7)jP>5%DF#}G[[y?h}{:;FGx'ׯkA7Z=>{_U)}~.ݘΪuX-6E_ucwK[teqiR҈D.-m{_^ѽ uw֏~O^21X㵻9>nuFo穫{驑."ڬt uRk&۟<Ԟxu>t^c#Z}WG^RnciRO^V2MO⎦'T#FbTeR: qM':߯G8_\ UB H2 2"? V))#D48á޺^֯Ͽ>Q.+`mᄒ&3tuBv s1rfy*E_5S㫥HQ T"+Ϫ0=k/,cZLK<3u]E3ñ$Y;6V-Z}׶Ȗ̵{Fpi~׺/ջfGuctkc֕ eUQS9W"?2,E҄"4jzVKOjzo:_!~Iw{botpb?ln{{^׺vۿrzB{^׺;ʃw92sz~ګD{Kx]>gI Vc}- 0=]=:k_{^C/[˴?r"3ؘDCL&o顑I ":i\ֺu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺF~[']Lj7-N%׹y6`BiWU%:o:x?83[z΍|NurϔB[]-HZbuF˯CAh1tSl.v'O.Jv5ۨi+ÕTLH*a>ըQEL;fRן0;?1+xEWac~ޏ+Ĭ#(4&\>NZ( =Vuעw-_YmcK/b||QdT i㞯>v ZsG[`6_>EDݺ^տ+>;拸W?Mu]^*o,FK*宭As܀ǗV_N;:w|{}z;6,cX34Vup&;-FErkHpC E1ӷ[1 Nswl귇7?3v^;v{3K4|MdGV2Jk*h:zr|Y=28؊2U5s^6K78[ST&*4VIKei_.w?巖],t[v ]ݟ\[~mO\zZ~ ƽD9xf*j_*KCWuQmOGSg}Jn-׸骽]2gr/rBٍUWu{{^jNg?vj?lMutcl~[<wur^zbُ:=鞜=u~{ߺ^[rW{ŏ&/_};6N }>3ooCG"c)c|e w٪+GS.&"sJ-_GG unMZC˭)pis{^׺Cv^v |W}鞷*oY~3l{bogt\b#ry?v_}h5CkWu{{^׺w۟<Ԟxu>t^ִ_ ={~1_=۴;۬*\ܩrRi񝉱jVܛ p!$#JĂ+I>`PPhkЋ{wbUNLln۴;oֲu)OVjq:hSuŋAQ7PBouemN`oٻ;odih38,dJX,;.ee>e`4|mO ~E.Yې=WH e@ӼSDYZ^"?CuJ]OۿzoVљLKndmTȘIuv*4f9>QGzqxum"{+6mM{S=76>Sxq9VV#@nԣz|;ut_fRWO}QRm󂗔u4W1IdF +V *:htWXuwg^ݿ3c!G][SS ?N:'L=x8ta?㿙_5П{ׄoQO-6ȝ+|d; 7]z>}njy7Xm6Fh^v K'`o}567kgEs]*AZR,S{*RX^WWfel|Rs~t^μfqտsۃ/; r+[jiA$cz:}SAK7OWZ|ɗA=}6LAU|Ur9V WZ/Dаaf ׺OTUUVV(*%Nt9 L42 AߺW疡r eQ2_F vi1=rޝٕEQݻ%ږQ髳GH ׷ =QS+qeq,Kpn--_%e*%Isf6Uu?ş0=-w%u]$sduDTiNb,%) $LEO[Zy}W}w?8;7^ٳ6Oaaub>Jʹ'XdTB.; 36n'V>LvG|ݛdz~;`v_O~ݑo=+d驩uT{i{39-5'4r*e ¼|ZV;wuC_q_";_gȪe MV'LmzuMMQKh Ϯ ʔG:3F,Mzq cn L{=)|Ύu•CWr"c0Ek.p)0{w~{ߺ^)2~؛>Acc28:| ^>wgHk)ښWVPX,_ߺTQ'}<ڟ* CDU]Dl|WGY?>Ss{{HG)9½nuO_a^^:1?e{HNJ ?SEZ?䘝G>t_H?L_wm:=(|-_gkއֳTy }]Kf1UYl6c3dp]Zd19l}Ld4u<2))OoN]?/40Ω</5vFߥekiTEEH3PBAT2E%:jt5u}{ߺHnkcnT{׺ϊu㯵3_/"M/ؿmlM~]8:ln];wNJ+ul<^jjl.#w*UEl5R;@"+-*v zT'QrFmeW׏nxt= | ׿?>Ss{{HG)9½ntO'budo|Wf|l텼7V6%:lt rPMi!Q*21[y4EE:fYS w>Ũp6ࣕڃêuuǭ>gxj";:b =yܙC[[,bkvD`䶐R*] ~JTFe3ZCni^U6o}VWdaַO﷍!M*(Rnډ 񑦡%?.#m'<: hd(V0  G=7%_?>R֛&-eUVUJ"z5TX$YSWSB0CrǗVSC>t^o7/~_lT=ﱨV:jݵ|FyZD~ǔDs *b1ݕ@~;1s03}޽zzLv4ŚyKhyE+|ꎷܛ2n旿Ctvf19;[O~Tu0ROM.섴3<CSiIo?>޿Τg[#o|[rul=m]AZԵILr7S$B=F6Z|MSR gRzuꃃǪ>)=_Vw̪[?=F% I_74.؛"C`TȖJf>*zyOn+Tc?B/Qb7e]>!ĭ5-DR'jUd -K_G!$LlREDëNoߘ?v;k#cZ뷽O_ONV< ig0)9^]l:'%vVcsg۟ #ڭdGl,ޝQVڪ QJiE TYj#SѬe=ڟ;ͼw.S=b8s޻UQv 4"VDFC G@V5"5cǪkyv}ؙ&Ownˠ+39iGGL))GKEL)P{t Gߺ^׽u~m_ G.mG퉸ls힯׽u~{ߺ^׽u~|*?[PU#Z8t_HL_wm:=(|-_gkއֲY'Hډ(+JPVLxIRmM[Kӽ{ߺHnkcnT{׺ϊu㯵3_/"M/ؿmlM~]8:ln{{^׺u{sOzk~!֏p.]u_æq{E{ߺZŽo3]6‡r47ʼnVdu?Ute`lU nu^R/m>7|ܱP8Oug*cOYl4Z&>JSZ} {?S3lZ:ҷ#fry\^ܾW=h9܌lsALfjDh=7?~{ߺW Ukejoud^^Ͽ`d;Z|?u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽ue_&ߔT'w|&Z'^Y!}0*Y2Gi餂-ISFSGR{mvs,=GI[f_zot%4ROKFԑݿGXA bAQu\^oLȯ= 񫬷63uv"2o8 eDk'6H#IYIXE@g=G^ngi[]WfT3kyϟ,`(5bZhhi%iC (q=+qug]ߏgm 8uy쬽Vz,=qMnޙv}%̭ 51r 6Ą8^xuTݑ{pu̍a{mevUO.R4&YcpC+A.۟(?3]ߺrnܔF%z6sEXWwJ m;;6o,򖨪zyYIgeev;'>NƶS~̦*qi8i@4QROA0If.DHۭu~{ߺ^׽uGZrm>YG&*2-MR y*#xI$ȱRYY@ó._.׏=ῧW:;??x߼7ڇ^g\]gP{{P˗ˬ~ӯj{rYuAuCó._.׏=Nul˔.sɠ :ւC#⪡U-$>#{{T:k>?4?;zGh_}s{_zogU>j1.ˢ1:_$38SsrYuA^uC x?,~:|흳+w{#|6ѐq=4׷v%e&Q<:n^s," ѼRܫ"ta$~m@ ~[w> oz[.Q6~a%A1fG2e4aRa:ó._.׏=NtWxv>cVuFC):N =efjzhRWv ԓaϿhNu&*) cJK ,r!VSoG]7ɗߍ?f^mr=UϜM{_CAQCK2x喒{23`yuu m_˗ˬmoյ,^? :׿/Yῧ^:;??x߼7ڇ^g\]gP{{P˗ˬ~ӯj}8o߸<6:\ԫC\H'@Z,)֏{@~ǒ֒,nked%i$Ԟ~3Կ`$1pHqB"\{I:wPu?y{?I^}CuCx+8|ۿ 6Gjuhھl%&gTף"IDJ} HGTbU׺:oG]ڱu_]~dwNܢO5Y*l IO)IU}RӭC^?͛rcˬt_˗ˬ~ӯj0o[UPWnlmQfٝ&fݱabDJrfovUu5Zg&xfzYeI`jM A!砩!|9HԅZHjZJz*Jhki&5̒<2*:0 {Ǧ͏[mT %&(ӉMF3r[LRP9%筩M9zΤo)uj&jXIk4L<~Z)2~uXcq|Z3xĩS 6Eԯ#mZת:d,-l%$:#mm{ka%?TqQ^;"'/Xzܟ_XRGw̐aj+1Px~yxQ 5IM];(MNxjP_E&OhZy6b+ڙ W*c@bJ`f dyubQK:*k"奖Y摙Y̳O+$K#ijI>r׽u~[Wc ~Uo݅M;= `ܕݏ4)5s cno`[K ue g;??x>u}Có._.׏=NuΝKoɎA6.sWsb͍lc(mT$nS ݐ\ʼnPTn׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~Z_{J߄9pxM;srU?y֘3rmJEpsE S&FzI&4e5ԼՁ<:i/# ]f+~6oOY$vlX1ˠb7vOA&SMT 9DZH6Z"{G{Q|H|mC{v:vmgCS%V]ջ:Gqjw-N#hW$y."T]{z>Boo{s|o랬ؽ!\Yweouw?Z}Nh~&)s/$uTqZ#4ycϭ\Pur6wP>>,"y\5 ;zGw%&bm׶4}d:Qd$zpDcYt?n)zgF208|VX(05]L̵S>onTWOSDhfI=BhG^!9wBjv7stf i*0hdtQ\ٴU['W_Nmhw&v~b=A6Z 534OEg6^xY$ Ju^z wynb]Ӹz̾))eF9m_TMPljek ߇A׻z/k5_>NЯ;0cڣj  N 2g^/ cq\svfyR#r{::)6{-](yijEl^t6?×鿁ڙÐM1TGlLM *^+%K:PTBx|'ɑsvO?È.of3Ei%Z3#$K5G"z5ۭu~{ߺ^׽u~wr>׺?ϿusOs{\S^?>׺?ϿusOs{\Sߺ]{^뻟^?>׺^׺uCo~zߺ^uw#m{\S^?>׺?ϿusOs{\S^?>׺?u׿u׮n}u7^׺u{o{\S^?^׺u{ A.^LF&bZlV6f&奠 Hqczj *r?0RSƣߺS=u~{ߺ^׽u~w{\S^?>׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺG/4n`py}7`|tO_*llTË 榒JyqQL'+UYg`vnù>F%O{î ;'.[2q{f  h *\x&EB1 to}Û𝏲7?e͞yNMnu܋.7!O G$t?%hZsԎLϟ2;||xv>Csy6T euO r̖XC&$Ӱ3 +oνE_.,cv%?ɯNV[aWvU6ͫfUB./UXF^'E/??e%omf7/{]EbvSL9ZES#E*O4qN Yp:_w/tw>qZ_J}[cN­NC\'ZCMB=ּ<׆G@Kٸ;w!,^91~@u_I]O;|,hz#O9g0bI 9^9[U:xףּ}wyVE;݃ѻyLu~Kt }2I`L^گz3WU4ELb1 t ׅ+H^]SUT_ߐþ=OOQKMw8Ց Cadl|)i#H嫦NG^mc4:vjtQllg2Y.;xw%vɼ9.'H)hrtq-nC?A}.>ޚx_A;>ỻ-[c{2)[WspmMnt?-IPѡiwxY+N:yn|OqSQ6gm, sSegmu0D͘ ?0UjzǪuWi-j<^N]A=s״b3Of4_>^:tL*hz)ֺu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^{e<>{?wݩvmL~ܘJfqrE7zWdowaIb6Ot()$FCp{ 3x*X׏Tм^VBkZFD'in˗)7=-}GËj.jFR)]T v"#%RU=;CcwƯ=wwBNfu踥ޝSK9SMC&TM$ĴKj'rmԟe:?m\vzoRnz^ݝaw%ۓ`#x#^{I^\6WfuφI]wvw}|ݏ2fiO}/TR#QՏ::;촦znwwo|6 2ydȜljľrt[5dA“?Ū*YnQߌQ&ܮGɎ]i0kwV.Ar )!VFE>޽E} _9wY쯃#WTٻS7"z̶* tk|e1N={W:i#'UTd2y:T5O#RM4yf'\=u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~b U0CQ4 _~}_kH7Pwp>F wxm1\Zs&*`ڟΧ툢퍓#ACzg,bf&GM!f<ܟuӭ=-ev_#9RY/&N .@xCȞw'?f.wlQAJ:@תz 8c44,q(}k~׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^_y͵;k%7~7wW}Wœ+xbDlnɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^[}.oM3s_eO%;?ñb{E<Gq-ݮē`T3m8;{ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u endstream endobj 15 0 obj 305298 endobj 63 0 obj << /Length 64 0 R /Type /XObject /Subtype /Image /Width 16 /Height 16 /Interpolate true /ColorSpace 7 0 R /SMask 224 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`!0rC endstream endobj 64 0 obj 17 endobj 91 0 obj << /Length 92 0 R /Type /XObject /Subtype /Image /Width 17 /Height 17 /Interpolate true /ColorSpace 7 0 R /SMask 226 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`!04 c endstream endobj 92 0 obj 19 endobj 49 0 obj << /Length 50 0 R /Type /XObject /Subtype /Image /Width 16 /Height 17 /Interpolate true /ColorSpace 7 0 R /SMask 228 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`!0Ć0 endstream endobj 50 0 obj 19 endobj 51 0 obj << /Length 52 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /Interpolate true /ColorSpace 7 0 R /SMask 230 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`!0Ć0 endstream endobj 52 0 obj 19 endobj 77 0 obj << /Length 78 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /Interpolate true /ColorSpace 7 0 R /SMask 232 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`!0Ć0 endstream endobj 78 0 obj 19 endobj 57 0 obj << /Length 58 0 R /Type /XObject /Subtype /Image /Width 16 /Height 16 /Interpolate true /ColorSpace 7 0 R /SMask 234 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`!0rC endstream endobj 58 0 obj 17 endobj 53 0 obj << /Length 54 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /Interpolate true /ColorSpace 7 0 R /SMask 236 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`!0Ć0 endstream endobj 54 0 obj 19 endobj 95 0 obj << /Length 96 0 R /Type /XObject /Subtype /Image /Width 452 /Height 82 /Interpolate true /ColorSpace 7 0 R /SMask 238 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`~g endstream endobj 96 0 obj 507 endobj 165 0 obj << /Length 166 0 R /Type /XObject /Subtype /Image /Width 16 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 022122HH-T`@*3Xm@xx2HY',22Dk`d4 2b!in"CB[[e``d*[Ȅ\ endstream endobj 166 0 obj 139 endobj 232 0 obj << /Length 233 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`%X98XB<*"LPE|*ή&\5 a!>f`%L>ᑑ%̢VA@6Y"0$ ` vT&e'SRK 4&vqIQ>V G&\ endstream endobj 233 0 obj 163 endobj 178 0 obj << /Length 179 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0223")ed`C0jkE|=W?W=1#kpx+X#CPDdD'T@6(h``p rd")1(Q3TA"> stream x1  VgSѤH  0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0``k0`] endstream endobj 209 0 obj 4977 endobj 224 0 obj << /Length 225 0 R /Type /XObject /Subtype /Image /Width 16 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xN0]JK-NX^gޜ1dI/Ç{0r*JAAOdsY*kwveC> stream xc` 0213312q q@Ee mMX*9d-Cx@L>aV >Mp$(qL` \U@|fȈ`9vG9(,,He``ֶsp28U@VM]QlH3;77y -@ Թ endstream endobj 207 0 obj 163 endobj 172 0 obj << /Length 173 0 R /Type /XObject /Subtype /Image /Width 2007 /Height 494 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream x  o( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` < - endstream endobj 173 0 obj 4346 endobj 198 0 obj << /Length 199 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`%Y88XB\b * b\PEL> stream x i) nُ3cLsѦwBp5 - PJHSiF)ԔxqZf{$Q_g!ݕ~)H~C!6`Zǜ}# endstream endobj 203 0 obj 146 endobj 169 0 obj << /Length 170 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 013!ddea 1  D|-'_'-sPx X#]`DdD'X#CH^**#MTEG n /w*Ff&z{q1Kl endstream endobj 170 0 obj 134 endobj 186 0 obj << /Length 187 0 R /Type /XObject /Subtype /Image /Width 16 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` ll0FV~ieeA6DW904,MG de`DddD+* N  XC |yvY?<22> stream xc`%99XBLrʊ<,PUFΖ5,!avJ`%JN!~&B`cy4=# F [# $d% `j ,c)MDP 4FV^QI AFf& endstream endobj 195 0 obj 162 endobj 192 0 obj << /Length 193 0 R /Type /XObject /Subtype /Image /Width 16 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` X98X`B| PVaMkgg-#s`hh?1Ȉ@k  M!4B؁&!`,"jR`)Rȭb 6E@\U, T-"%%s #3++32' endstream endobj 193 0 obj 157 endobj 212 0 obj << /Length 213 0 R /Type /XObject /Subtype /Image /Width 281 /Height 281 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream x@EQJJSJ$J~~t5r 0sye37CsMǤ(c3徯ד guߗ6ߣ2m\ y ̴_AĻ&"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B ŀ &"[ l1`B 3.>@x`xn 01くeY'e!.˲]=,hۧ?s5 @'G endstream endobj 213 0 obj 865 endobj 204 0 obj << /Length 205 0 R /Type /XObject /Subtype /Image /Width 16 /Height 17 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xM0 ĊTTc_&r9cvf߀(O# o,*6 089jJPG_)3@lnW+ udC)TsڭUs@ib8h ? endstream endobj 205 0 obj 145 endobj 190 0 obj << /Length 191 0 R /Type /XObject /Subtype /Image /Width 16 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream x Eh˖65ly%gaoA 9)ە(!±0?>߮9j*&ȳh;5納0,1XcP'D.πl97 endstream endobj 191 0 obj 139 endobj 180 0 obj << /Length 181 0 R /Type /XObject /Subtype /Image /Width 16 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream x0w "S@ME$m=2ٝo`1 Y Ucf7Z}vK>AٰuX9f?YG0l՗?]N}= e Wr3 $[n!6 endstream endobj 181 0 obj 143 endobj 226 0 obj << /Length 227 0 R /Type /XObject /Subtype /Image /Width 17 /Height 17 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0R&V.^nv&3  T3D ohxX2X #khddd&^mp@d(XH "B,!gY@?$D b/#$'̱,b"|l202133> endstream endobj 227 0 obj 163 endobj 188 0 obj << /Length 189 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xN 0 ($ r*l-Ic:XXHe4Eu4̌l܃ { (v͋P>%w)󤛅çxnvsv,)k_ŚmTc?ǎ endstream endobj 189 0 obj 140 endobj 218 0 obj << /Length 219 0 R /Type /XObject /Subtype /Image /Width 452 /Height 82 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xks@9&((AVchI3LM?m3M3t Kav @EXŒ( R, "r"FE3x2U,b &y3]Qmog*@` o|r[`@5vfw-Z(uzLҺRB<-`ΰ -4 G~\#B                ¡zy5 @*I`!ms ϵ%<ƒ%:azpg[Wm\`e]) iq~TPxj :ǁ[S*iM 1cE    pH LVp4NE$t&HL2 ֐FgLttBN;PFrqlQ$T PXk:zo"cɘFhHeK<ўIv\{*h endstream endobj 219 0 obj 952 endobj 176 0 obj << /Length 177 0 R /Type /XObject /Subtype /Image /Width 17 /Height 17 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 02*dbdEbTD0q˛;KE|+`/SiFvKP/cqVɌ<ꮡMr6alyC}乘XZs ̼rH|;B3PӰQƋ endstream endobj 177 0 obj 137 endobj 222 0 obj << /Length 223 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xN tWZڅC"%z*B2]!"40 hPdmrMiH|W|;+X5oR竮y/ΥRf%*L79(Y4Ve{ `o>MǴ endstream endobj 223 0 obj 141 endobj 167 0 obj << /Length 168 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`%X98XB<*"LPE|*ήƲ5 a!>b`%L>ᑑ.*\`%̢VA@6Y20( ` rPkad6 tb%c`co)s(/+ s'_ endstream endobj 168 0 obj 164 endobj 236 0 obj << /Length 237 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`QXYD9"ZV&\0 _9.,c.1]: "2"CU7<2"I"ĭ`# u uL'?L=LpH> endstream endobj 237 0 obj 138 endobj 228 0 obj << /Length 229 0 R /Type /XObject /Subtype /Image /Width 16 /Height 17 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 02"+cdf`A0 \+;Q3}@.TK.0<"U[d(wXdd$ȣi 3i9{KCl`dҴw6[*&`6Al$D endstream endobj 229 0 obj 140 endobj 214 0 obj << /Length 215 0 R /Type /XObject /Subtype /Image /Width 17 /Height 17 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 021"dd`B0(krE|u{Kyg%Qȥdk& 6W-4"2"N,.c'K7@ &n93[=qvKBV.΂ 1 endstream endobj 215 0 obj 140 endobj 182 0 obj << /Length 183 0 R /Type /XObject /Subtype /Image /Width 17 /Height 17 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xA0 ۵,0ؘq.&ͻ]{C *IHˡ]iʤ> stream xc`%Y88XB\b * b\PEL fNNf L`Fvi+аP?+iv.F^mϰ0Om^P DI/(g$`Vs qU*fa, CBZW4F6~1I1~6 G& endstream endobj 185 0 obj 165 endobj 234 0 obj << /Length 235 0 R /Type /XObject /Subtype /Image /Width 16 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xM0 kҮ2 D7. !_F_Wq86!M_Xp (7/m*4aq:Mz^˰e!Y>$^K3l(cj= -~ޙ!mBd(J H;~ endstream endobj 235 0 obj 147 endobj 216 0 obj << /Length 217 0 R /Type /XObject /Subtype /Image /Width 16 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream x C ?m4_O ~aHƩ^Ʌي阏Y6G|=riki͛sNiI Ahb纍_ endstream endobj 217 0 obj 133 endobj 220 0 obj << /Length 221 0 R /Type /XObject /Subtype /Image /Width 16 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 00!cf 0q˛*\+?[e#_Xx"7 f!Cp?SQLa>"`٥LC|-8V0rJyzYCp.PC@فLL`  endstream endobj 221 0 obj 133 endobj 200 0 obj << /Length 201 0 R /Type /XObject /Subtype /Image /Width 281 /Height 281 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xu@ P@ R Q%($aFGG|ǏOSHHH$<ic.*47ӯu4?2w.3N\h6t_ҧf{/r' 7i/&?bUvW0704%04e040t40d450T4u0D40440$4-04m040ia L &(LH4R0h`H„ D# F&L4Z04z040404040404604V0p4v0`40P40@40040 4#` hЌqO39H4caӌqK3)4>`xqG'W4`xqC G4>axNf0g4axFf  4(04804H04X04h0f4x0F40&404040404040j40J4`Thb(D#L F& M41x0B4aDhbD馉 I&6LMtf04 0M40 4,04<04L0U4\04l04|040E4040/ixa^0L#Ktf0,aXtDf #F%K41X0,`DYDgFFFFFFFƀƄƈ ƌ Ɛ ƔƘƜf 0X c 33P0Y g # 0NXa+?0XcK0NYFøe e$kq0YFg2 EEEEEE E&Ly ,0aXdaH„b "E& LH~,0aY`fi   5 )4}=:-4Lveò ;4mN 22GA&YfGdfd\6c;))))@\0 endstream endobj 201 0 obj 1284 endobj 196 0 obj << /Length 197 0 R /Type /XObject /Subtype /Image /Width 281 /Height 281 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream x{ Ǎ@"F0h`#"D0z _s`wU>|wex $@HG?!8Z!8/2zªZH(E]1*]蜤Et&:e˦uĉ'(3o3rn'8y-~ TFfQ!ՅdP[řXcꚆ&ŤWCp_O1 坻wvF6klb@<Yh<)2QȮSIp3yg"E |A\^2rL\$7DJ{rSyZQ[v\n!<`+sAdƙ}.f!v%݅+WD׏F^7mRp=*IHEPWL*𙔄w+8by`u&9 ,3 HG! 6˫Ti4SDlKu>gdid 9`Jf ן9I7#͠Nff}S -{t>9Ӕ{XWazK1WKSzLRr(er?2F?(92s.av 82|=)3ȃ2K;x׌.wCoñ& SIZGom؂XwX]Qo XIO`ԭeGR߯HXI}K#i-艅{6݈;ƣ:>orJwK%oABٓ'ux{4W"#a[Pa. |40B'0* E՗̊ . :Bc !dNK2v;-`[P8TAĆ`p 918pcTgxOd` |/ξeh tFXXfCb* ba!U@0B0 ``8T( ,pQ,YP .TMh̅*p&>@'6"ԟlbF(QD&!%Hf `(@eY`J3W1_0cȷiip ;)e-vR2`ۑ4r ׭Y֠4ɲN09ɝ`Pd\ûxqK _b2 ]d!>]3 \=2;^a~2qP.saɳcS@er2.voA ̘[uR ,}=#}Y-3(ߧ]d:7l6eWi%Li nf:f?*RUbns+?IrT۬sv<^,0#dw+o#=L)i w_#3ܦkɬ͔PWI$5]&>ȫ 8%qf#Fe+f7|"^Kd/|&ʬ}S^JqdAaٌ3hcPwe!/P-߲psy 4ɮ^hVgN򢘑é~^^p0ل^F3\]5?ݛgܐF7yh.re4ጃ7,1Mg{&x )Twr> stream xR@d a)m \P'2:5|Npfj*$ Tݷ0Cx)2  DV0π7p w$Z-ƃh e􏱪J$ Ì |A}}}>BC3X( YPc>@Ïc4t:1 )Z[v(9)BB?Hxrf^TybY  p&Ж5B!YF<6@Zi[k!ڭ!l}̃aImM lKY׎ZmZ׎=IO> stream xc` 0210312ID9-!"lAn,`MLNJ`%fzL %"A@~dX_'( !gk.q 3<7Xq%U1.f s(X W d\ endstream endobj 211 0 obj 169 endobj 174 0 obj << /Length 175 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 023")e`E0rHXjD|O#gHx F Ȉ@[Y&FnpK)),BAavʼYm|Yy@LL0W!y endstream endobj 175 0 obj 138 endobj 230 0 obj << /Length 231 0 R /Type /XObject /Subtype /Image /Width 17 /Height 16 /ColorSpace /DeviceGray /Interpolate true /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 020")ed`0 kYpD|mgo3sPx;FvȈ7M^_xdD*7&f%ۀ gmaV=̼J6^N@>)̼ H|fN~> stream xTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoE endstream endobj 241 0 obj 737 endobj 171 0 obj [ /ICCBased 240 0 R ] endobj 242 0 obj << /Length 243 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoE endstream endobj 243 0 obj 737 endobj 7 0 obj [ /ICCBased 242 0 R ] endobj 244 0 obj << /Length 245 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xwTl/]"e齷.H& KYe7D"V$(bh(+X "J F;'Nw>}w(!a@P"f'0D6p(h@_63u_ -Z[3C+K;?r!YLD)c#c1 ʪ2N|bO h{yIHD.VV>RV:|{ [RF ”"MF1L1[Te'Jx%C%_%RJ#4GcӸu:(G73%Ie%e{SC add1T4UT*TTTUzUUUoScemUkS{Q7UPWߣ~A}b}9Հ5L5"5iјi<9Ъ:5MvhWh~Tfz1U.椎NTgNΌ|ݵͺHz,T NI}mPw ,tӆF -5j4oL50^l\k|g24mr6u0M713fͱBZA EEŰ%2res+}VV(٬Ԗk[c{Îjgʮ=~mCNNb&q'}d]N,:+Uʺuv^|o]5˟[7wM׍mȝ}CǃQSϓY9eu빷ػ{^>*}7l6 8`k`f 7!p2)hEPW0%8*:Qi8# z<ἶ0-AQ#p5#m"GvGѢG.7xt~g|LbLCtOlyPU܊|BLB}&:$%Zh`EꋲJO$O&&N~ rRSvLrgIsKۖ6^>!` /22fLge̜͊j&d'g* 3]9Z99"3Qhh'\(wanLHyy5yoc( z.ٴdloaqu.Yf WB+SVv[UjtCkHk2zmWbuj.Y￾HH\4uލ6W|ĺ})76T}39usocٞ---zl=TX|d[ fEqūI/WWA!1TRվS疝ӫox4صin={j-n`[k k+x\S-ۆzEjpjh8qn6Ik:8w7ޜw[nn?uݼ3V/~ڟM~nr:53(ѽȳ_ry?ZrL{퓓~מ.x:LlfW_w=7~oLM˃_uNO=|zfڛCoYož_Cggg endstream endobj 245 0 obj 2615 endobj 16 0 obj [ /ICCBased 244 0 R ] endobj 158 0 obj << /Length 246 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream xul۶m۶m۶mv}\:m[~?|oW"SQ>{y7Z^/> stream x} ;SaHJ"{"הk"\I$1ll٦"ERJ=;9s{v;:1jcR-ulfL&ol7 c0;PnN9:cdpպoC5mwV'UnT[J%BźP07r\*}ݐ6Rz]*eJ$PxX-} gk_}}{{W<ުCݽB_Fvu-C;;;;KO Ǐmm ڸ= nioiq}pyy9 ޻}Dwuy,a-v}[L}̝;຺:ӄӵokj_WWVUFOUU޺5䮨xy%%rಲeeׯ?><}ZRBv \\uy$aQdQѶ|׼<47~H|<5.46vEh ϝFGDGSH##5tud$Y54"B1 U*24ytVp+O S䄁rgY` ɓ2nRV?1 O'EG>>"V![}W?z ɧyzr8ݿыۇ} endstream endobj 247 0 obj 881 endobj 143 0 obj << /Length 248 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream xRP ^Bi鍞J o!B8s޶ޠ6kmv؟gsxmc]67uPkƾvr.6]U'qe^YzlY凞ճs|iizYU%Ee QTLʋɂdZ0Tt8_xfj9+X, /2<Ig TLOMEc!5;R0ON$ĘOgpGp wL~ 67Ÿ(7ȎQ0A3A0 ҃u.Lќu YdC Z$٠E&HZ̵m)?ׇS1w!nQ{!EoA 7ACoCw3anCݳwQ1E~wᄈcN~TGu|<{?* endstream endobj 248 0 obj 460 endobj 132 0 obj << /Length 249 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream x} ;SaHJ"{"הk"\I$1ll٦"ERJ=;9s{v;:1jcR-ulfL&ol7 c0;PnN9:cdpպoC5mwV'UnT[J%BźP07r\*}ݐ6Rz]*eJ$PxX-} gk_}}{{W<ުCݽB_Fvu-C;;;;KO Ǐmm ڸ= nioiq}pyy9 ޻}Dwuy,a-v}[L}̝;຺:ӄӵokj_WWVUFOUU޺5䮨xy%%rಲeeׯ?><}ZRBv \\uy$aQdQѶ|׼<47~H|<5.46vEh ϝFGDGSH##5tud$Y54"B1 U*24ytVp+O S䄁rgY` ɓ2nRV?1 O'EG>>"V![}W?z ɧyzr8ݿыۇ} endstream endobj 249 0 obj 881 endobj 148 0 obj << /Length 250 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream xul۶m۶m۶mv}\:m[~?|oW"SQ>{y7Z^/> stream xul۶m۶m۶mv}\:m[~?|oW"SQ>{y7Z^/> stream xul۶m۶m۶mv}\:m[~?|oW"SQ>{y7Z^/> stream xul۶m۶m۶mv}\:m[~?|oW"SQ>{y7Z^/> stream x} ;SaHJ"{"הk"\I$1ll٦"ERJ=;9s{v;:1jcR-ulfL&ol7 c0;PnN9:cdpպoC5mwV'UnT[J%BźP07r\*}ݐ6Rz]*eJ$PxX-} gk_}}{{W<ުCݽB_Fvu-C;;;;KO Ǐmm ڸ= nioiq}pyy9 ޻}Dwuy,a-v}[L}̝;຺:ӄӵokj_WWVUFOUU޺5䮨xy%%rಲeeׯ?><}ZRBv \\uy$aQdQѶ|׼<47~H|<5.46vEh ϝFGDGSH##5tud$Y54"B1 U*24ytVp+O S䄁rgY` ɓ2nRV?1 O'EG>>"V![}W?z ɧyzr8ݿыۇ} endstream endobj 254 0 obj 881 endobj 155 0 obj << /Length 255 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream xul۶m۶m۶mv}\:m[~?|oW"SQ>{y7Z^/> stream xRP ^Bi鍞J o!B8s޶ޠ6kmv؟gsxmc]67uPkƾvr.6]U'qe^YzlY凞ճs|iizYU%Ee QTLʋɂdZ0Tt8_xfj9+X, /2<Ig TLOMEc!5;R0ON$ĘOgpGp wL~ 67Ÿ(7ȎQ0A3A0 ҃u.Lќu YdC Z$٠E&HZ̵m)?ׇS1w!nQ{!EoA 7ACoCw3anCݳwQ1E~wᄈcN~TGu|<{?* endstream endobj 256 0 obj 460 endobj 160 0 obj << /Length 257 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream xul۶m۶m۶mv}\:m[~?|oW"SQ>{y7Z^/> stream xul۶m۶m۶mv}\:m[~?|oW"SQ>{y7Z^/> stream xRP ^Bi鍞J o!B8s޶ޠ6kmv؟gsxmc]67uPkƾvr.6]U'qe^YzlY凞ճs|iizYU%Ee QTLʋɂdZ0Tt8_xfj9+X, /2<Ig TLOMEc!5;R0ON$ĘOgpGp wL~ 67Ÿ(7ȎQ0A3A0 ҃u.Lќu YdC Z$٠E&HZ̵m)?ׇS1w!nQ{!EoA 7ACoCw3anCݳwQ1E~wᄈcN~TGu|<{?* endstream endobj 259 0 obj 460 endobj 141 0 obj << /Length 260 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream xRP ^Bi鍞J o!B8s޶ޠ6kmv؟gsxmc]67uPkƾvr.6]U'qe^YzlY凞ճs|iizYU%Ee QTLʋɂdZ0Tt8_xfj9+X, /2<Ig TLOMEc!5;R0ON$ĘOgpGp wL~ 67Ÿ(7ȎQ0A3A0 ҃u.Lќu YdC Z$٠E&HZ̵m)?ׇS1w!nQ{!EoA 7ACoCw3anCݳwQ1E~wᄈcN~TGu|<{?* endstream endobj 260 0 obj 460 endobj 150 0 obj << /Length 261 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream x} ;SaHJ"{"הk"\I$1ll٦"ERJ=;9s{v;:1jcR-ulfL&ol7 c0;PnN9:cdpպoC5mwV'UnT[J%BźP07r\*}ݐ6Rz]*eJ$PxX-} gk_}}{{W<ުCݽB_Fvu-C;;;;KO Ǐmm ڸ= nioiq}pyy9 ޻}Dwuy,a-v}[L}̝;຺:ӄӵokj_WWVUFOUU޺5䮨xy%%rಲeeׯ?><}ZRBv \\uy$aQdQѶ|׼<47~H|<5.46vEh ϝFGDGSH##5tud$Y54"B1 U*24ytVp+O S䄁rgY` ɓ2nRV?1 O'EG>>"V![}W?z ɧyzr8ݿыۇ} endstream endobj 261 0 obj 881 endobj 142 0 obj << /Length 262 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream xul۶m۶m۶mv}\:m[~?|oW"SQ>{y7Z^/> stream xRP ^Bi鍞J o!B8s޶ޠ6kmv؟gsxmc]67uPkƾvr.6]U'qe^YzlY凞ճs|iizYU%Ee QTLʋɂdZ0Tt8_xfj9+X, /2<Ig TLOMEc!5;R0ON$ĘOgpGp wL~ 67Ÿ(7ȎQ0A3A0 ҃u.Lќu YdC Z$٠E&HZ̵m)?ׇS1w!nQ{!EoA 7ACoCw3anCݳwQ1E~wᄈcN~TGu|<{?* endstream endobj 263 0 obj 460 endobj 144 0 obj << /Length 264 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream xRP ^Bi鍞J o!B8s޶ޠ6kmv؟gsxmc]67uPkƾvr.6]U'qe^YzlY凞ճs|iizYU%Ee QTLʋɂdZ0Tt8_xfj9+X, /2<Ig TLOMEc!5;R0ON$ĘOgpGp wL~ 67Ÿ(7ȎQ0A3A0 ҃u.Lќu YdC Z$٠E&HZ̵m)?ׇS1w!nQ{!EoA 7ACoCw3anCݳwQ1E~wᄈcN~TGu|<{?* endstream endobj 264 0 obj 460 endobj 140 0 obj << /Length 265 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream xRP ^Bi鍞J o!B8s޶ޠ6kmv؟gsxmc]67uPkƾvr.6]U'qe^YzlY凞ճs|iizYU%Ee QTLʋɂdZ0Tt8_xfj9+X, /2<Ig TLOMEc!5;R0ON$ĘOgpGp wL~ 67Ÿ(7ȎQ0A3A0 ҃u.Lќu YdC Z$٠E&HZ̵m)?ׇS1w!nQ{!EoA 7ACoCw3anCݳwQ1E~wᄈcN~TGu|<{?* endstream endobj 265 0 obj 460 endobj 156 0 obj << /Length 266 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream xRP ^Bi鍞J o!B8s޶ޠ6kmv؟gsxmc]67uPkƾvr.6]U'qe^YzlY凞ճs|iizYU%Ee QTLʋɂdZ0Tt8_xfj9+X, /2<Ig TLOMEc!5;R0ON$ĘOgpGp wL~ 67Ÿ(7ȎQ0A3A0 ҃u.Lќu YdC Z$٠E&HZ̵m)?ׇS1w!nQ{!EoA 7ACoCw3anCݳwQ1E~wᄈcN~TGu|<{?* endstream endobj 266 0 obj 460 endobj 154 0 obj << /Length 267 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream x} ;SaHJ"{"הk"\I$1ll٦"ERJ=;9s{v;:1jcR-ulfL&ol7 c0;PnN9:cdpպoC5mwV'UnT[J%BźP07r\*}ݐ6Rz]*eJ$PxX-} gk_}}{{W<ުCݽB_Fvu-C;;;;KO Ǐmm ڸ= nioiq}pyy9 ޻}Dwuy,a-v}[L}̝;຺:ӄӵokj_WWVUFOUU޺5䮨xy%%rಲeeׯ?><}ZRBv \\uy$aQdQѶ|׼<47~H|<5.46vEh ϝFGDGSH##5tud$Y54"B1 U*24ytVp+O S䄁rgY` ɓ2nRV?1 O'EG>>"V![}W?z ɧyzr8ݿыۇ} endstream endobj 267 0 obj 881 endobj 164 0 obj << /Length 268 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream xRP ^Bi鍞J o!B8s޶ޠ6kmv؟gsxmc]67uPkƾvr.6]U'qe^YzlY凞ճs|iizYU%Ee QTLʋɂdZ0Tt8_xfj9+X, /2<Ig TLOMEc!5;R0ON$ĘOgpGp wL~ 67Ÿ(7ȎQ0A3A0 ҃u.Lќu YdC Z$٠E&HZ̵m)?ׇS1w!nQ{!EoA 7ACoCw3anCݳwQ1E~wᄈcN~TGu|<{?* endstream endobj 268 0 obj 460 endobj 135 0 obj << /Length 269 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream x} ;SaHJ"{"הk"\I$1ll٦"ERJ=;9s{v;:1jcR-ulfL&ol7 c0;PnN9:cdpպoC5mwV'UnT[J%BźP07r\*}ݐ6Rz]*eJ$PxX-} gk_}}{{W<ުCݽB_Fvu-C;;;;KO Ǐmm ڸ= nioiq}pyy9 ޻}Dwuy,a-v}[L}̝;຺:ӄӵokj_WWVUFOUU޺5䮨xy%%rಲeeׯ?><}ZRBv \\uy$aQdQѶ|׼<47~H|<5.46vEh ϝFGDGSH##5tud$Y54"B1 U*24ytVp+O S䄁rgY` ɓ2nRV?1 O'EG>>"V![}W?z ɧyzr8ݿыۇ} endstream endobj 269 0 obj 881 endobj 161 0 obj << /Length 270 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream x} ;SaHJ"{"הk"\I$1ll٦"ERJ=;9s{v;:1jcR-ulfL&ol7 c0;PnN9:cdpպoC5mwV'UnT[J%BźP07r\*}ݐ6Rz]*eJ$PxX-} gk_}}{{W<ުCݽB_Fvu-C;;;;KO Ǐmm ڸ= nioiq}pyy9 ޻}Dwuy,a-v}[L}̝;຺:ӄӵokj_WWVUFOUU޺5䮨xy%%rಲeeׯ?><}ZRBv \\uy$aQdQѶ|׼<47~H|<5.46vEh ϝFGDGSH##5tud$Y54"B1 U*24ytVp+O S䄁rgY` ɓ2nRV?1 O'EG>>"V![}W?z ɧyzr8ݿыۇ} endstream endobj 270 0 obj 881 endobj 163 0 obj << /Length 271 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream x} ;SaHJ"{"הk"\I$1ll٦"ERJ=;9s{v;:1jcR-ulfL&ol7 c0;PnN9:cdpպoC5mwV'UnT[J%BźP07r\*}ݐ6Rz]*eJ$PxX-} gk_}}{{W<ުCݽB_Fvu-C;;;;KO Ǐmm ڸ= nioiq}pyy9 ޻}Dwuy,a-v}[L}̝;຺:ӄӵokj_WWVUFOUU޺5䮨xy%%rಲeeׯ?><}ZRBv \\uy$aQdQѶ|׼<47~H|<5.46vEh ϝFGDGSH##5tud$Y54"B1 U*24ytVp+O S䄁rgY` ɓ2nRV?1 O'EG>>"V![}W?z ɧyzr8ݿыۇ} endstream endobj 271 0 obj 881 endobj 157 0 obj << /Length 272 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream x} ;SaHJ"{"הk"\I$1ll٦"ERJ=;9s{v;:1jcR-ulfL&ol7 c0;PnN9:cdpպoC5mwV'UnT[J%BźP07r\*}ݐ6Rz]*eJ$PxX-} gk_}}{{W<ުCݽB_Fvu-C;;;;KO Ǐmm ڸ= nioiq}pyy9 ޻}Dwuy,a-v}[L}̝;຺:ӄӵokj_WWVUFOUU޺5䮨xy%%rಲeeׯ?><}ZRBv \\uy$aQdQѶ|׼<47~H|<5.46vEh ϝFGDGSH##5tud$Y54"B1 U*24ytVp+O S䄁rgY` ɓ2nRV?1 O'EG>>"V![}W?z ɧyzr8ݿыۇ} endstream endobj 272 0 obj 881 endobj 136 0 obj << /Length 273 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream x} ;SaHJ"{"הk"\I$1ll٦"ERJ=;9s{v;:1jcR-ulfL&ol7 c0;PnN9:cdpպoC5mwV'UnT[J%BźP07r\*}ݐ6Rz]*eJ$PxX-} gk_}}{{W<ުCݽB_Fvu-C;;;;KO Ǐmm ڸ= nioiq}pyy9 ޻}Dwuy,a-v}[L}̝;຺:ӄӵokj_WWVUFOUU޺5䮨xy%%rಲeeׯ?><}ZRBv \\uy$aQdQѶ|׼<47~H|<5.46vEh ϝFGDGSH##5tud$Y54"B1 U*24ytVp+O S䄁rgY` ɓ2nRV?1 O'EG>>"V![}W?z ɧyzr8ݿыۇ} endstream endobj 273 0 obj 881 endobj 147 0 obj << /Length 274 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream xul۶m۶m۶mv}\:m[~?|oW"SQ>{y7Z^/> stream xul۶m۶m۶mv}\:m[~?|oW"SQ>{y7Z^/> stream xRP ^Bi鍞J o!B8s޶ޠ6kmv؟gsxmc]67uPkƾvr.6]U'qe^YzlY凞ճs|iizYU%Ee QTLʋɂdZ0Tt8_xfj9+X, /2<Ig TLOMEc!5;R0ON$ĘOgpGp wL~ 67Ÿ(7ȎQ0A3A0 ҃u.Lќu YdC Z$٠E&HZ̵m)?ׇS1w!nQ{!EoA 7ACoCw3anCݳwQ1E~wᄈcN~TGu|<{?* endstream endobj 276 0 obj 460 endobj 153 0 obj << /Length 277 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream x} ;SaHJ"{"הk"\I$1ll٦"ERJ=;9s{v;:1jcR-ulfL&ol7 c0;PnN9:cdpպoC5mwV'UnT[J%BźP07r\*}ݐ6Rz]*eJ$PxX-} gk_}}{{W<ުCݽB_Fvu-C;;;;KO Ǐmm ڸ= nioiq}pyy9 ޻}Dwuy,a-v}[L}̝;຺:ӄӵokj_WWVUFOUU޺5䮨xy%%rಲeeׯ?><}ZRBv \\uy$aQdQѶ|׼<47~H|<5.46vEh ϝFGDGSH##5tud$Y54"B1 U*24ytVp+O S䄁rgY` ɓ2nRV?1 O'EG>>"V![}W?z ɧyzr8ݿыۇ} endstream endobj 277 0 obj 881 endobj 145 0 obj << /Length 278 0 R /FunctionType 0 /BitsPerSample 8 /Size [ 1365 ] /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 ] /Filter /FlateDecode >> stream xRP ^Bi鍞J o!B8s޶ޠ6kmv؟gsxmc]67uPkƾvr.6]U'qe^YzlY凞ճs|iizYU%Ee QTLʋɂdZ0Tt8_xfj9+X, /2<Ig TLOMEc!5;R0ON$ĘOgpGp wL~ 67Ÿ(7ȎQ0A3A0 ҃u.Lќu YdC Z$٠E&HZ̵m)?ׇS1w!nQ{!EoA 7ACoCw3anCݳwQ1E~wᄈcN~TGu|<{?* endstream endobj 278 0 obj 460 endobj 3 0 obj << /Type /Pages /MediaBox [0 0 792 612] /Count 1 /Kids [ 2 0 R ] >> endobj 279 0 obj << /Type /Catalog /Pages 3 0 R /Version /1.4 >> endobj 280 0 obj << /Length 281 0 R /Length1 18584 /Filter /FlateDecode >> stream x|y`ExUu}t& 98"$\"CXD]9 52$TEUXwA([﫞IH}V_f!ң. i+w_ڟ6_rdBexu2ތP/ G!._ <Cxy VOջ|7ޏ>gs/LO˳WX: XyT{܂vwn04"!4݁ 1O(f"^PWcIQ˝ N_$T^PB#-wb%T C5rapόRrk(l =hM!spEs \*aRQZz/(p]ZrJ@(9%Qaf_OfוQ}E lB}U*8ʷ-̦T Ms b 3e@hP8y/ocQ%͈؟}dBK6x}RA+ȞTC;ڶ `:'vQBt$JLibXު9.-OiX.1\2'rL9>u0B VJK0hK4 -͆l3dxٰ rZ p/!Z{0 a14ezGj*`ݛl붅b6DS-xO_ȗ,LFK,fg <՛9*I5JUWeTʧ56jZVY5Q#5ߗ8-8WH #VNs!&h"YF8m,nc秉}X;eVL!1K#j>5ScƘe7B.F6a4'hѝe?8-TJf-~]TG5C. ]s^JBt&鱇ĞIoD"yv~RI v\UlP^ 4!?m .Hd;;1B}nd1r1#,ffQ #_bpi$miyxmͰ\8vX_x?O][Pt6]G$ǘ̎yx>|R\X']Gbn~zºzqn]k︹ύx݃۝;__K˥']q]w=G5N'Kz@K5Z;;#s+el[=Xt֘^3PDϯɯU@eŦTֈ9,E%uoժT"?UVjUZ-[z t*+|A^o>Ɣ7o,hfժHUk}j Rj W D_9jq%[4$U*a:U<~REd}| A)HNMGBB"ʂc@GL`DCc;k"50xa*2CN0!;}~`OO$v&b'ޖS ;ЎV y A~w(:7>V,Iyu'Ǘ&‰I[ (].g4` c$zv$; J܂;bĝ&|3|( )D6!'1dnb1{wFvT2]E} ^&)Jd.q(%R"c+Zs.tzk  `7'[-{|&LWó/;q~Ư7[}`}<jGN#&Ϙ/Ybv}C((RPQUU)CO!6yfn}Ro!oH:~ޖ43ͤD@7:XJA)q:Nl&GE"EtL9Ff{?[?pyTjp5v(žCGTĐX~ `a"$BO 0?if3He6 |AĿ}z7ǘbt+P$ovlʽ{AF,c .|+r oDyxFoP9^ȼ|5M~v 웠|_LUc 0I32&)q@O@f,CK#I jB U?aJa7UR#E" Îd1{Jq;M30 !>Ga hi<Ux l"q%Iv%X^(,Wጄw&tx `UnbdװJ\y=^iȭ,X+`5gY2<euh,p P׌~\j3 q, *w5Z @B݄n_6xG!OF#KЧS FW:4 l) o]A͉m9? T &q2ہ0ޯa+Ǣo(5+RzLUdʊpiIqQaA~^(7';+3!ϛqZ̜hJ`Q^evLq|Ba1?5l~sjDK Z^}YK)Rj9׋ر:߇gMi:ӓV9m @sq?;oûuZv6? T!܍XNG 1XWsasĚy5?/kbj! _STkKb5hw፛84#_ .;%̅1c.X{y) ~xX\⧍7n\uOi#Z[a K ՛a#wJЙW%/;cqxzvK޿qz(Ģun]nmzcKFɅm4zBXdTԡt℘53i*im_ z,ij;6ri9|") Y27U r?!ZIdbx`: rs)jaOar,?>D\!5m]/t7Ihdb]SZy?AR! ͠5]5C;D=D d38~ibY-)m>" uTZx0r- YCM ӢAzAJ X)`C [S_,%G>#6:hrڱȈ72Ӂ6nԎkfqcoرqn_kčAܸPrG6yb [Sр- SvKxôY-0Tڎ1 A|m p+@Gx oXp9p?@BI ؏R%?R"հ$=hfe&, W׆/^lrC BB *p#YC&ȗ̯nLBj:WSnqgߛqo'WaBvh 5V~2K *0ĭQѲ}M79CsU&s&qȮP\TjA,,bE?s@= o;5+Ƣq7J''<]]84>38F/o Y&+(fLTk,iֶ}=29HFrQ6qح$[<E7r*mưEfִ-RCa(Hѐ0ͱ`Ki'巕&dM,.O7OVO$imVgj+KPuX_$?Ow=m{;s羅8@9}K3Ν8X|VTX UClxAqnLi (%JQdJ1+:̲pyiDyy)0*:JvD0,_zno0]~,.EKZݾ_ —Vn,^LZ<5MK)Zrx"rN.^Rr=I0QL?R$sщČ3?3? `[~! f3UYɓh05GmțȈ pݞ^N.fzJwE&r_BZ1hCjr[oԗ PaȉҘ @7*<^[{7[((U 6fOIHh wZ#T&fNpxŤ B`& x3׿ xVWKlvYwY*YQV~]v.-)/ } $B7 ;VYejq7%*tX- Q>a˯ܻ^m)ߖ*}.{msf|ڴ@-0-g5Oy=l]+jg`p(~ זJW4: h#Mp@T/G/lϷ8 e  0<..-ctX+Y-a b郎 *D eoȺn9K|`P=je\{a'( RLdFFe T9z2'~dyWP>վ&vd1_aaxB"hh{aX5x)݀#?L#mLC2aqQzNϐ$|vX֦>PCƝ!bI;) P;PeX_;D\?~:Q5:PK̓0Rl1 |?@AGiLk8E[ [+.%uY++)BY)riWlk;LSTϜh􆦮yΡ5M^| &_o|tL܆Gi}| 9Wf)23P {{:S֗8/A gONN ʰefۃv}UVzY 9\%r>~43-fTmt9L@f`rT^V+ uko;2%&ڝM̭BGjt2g҉n6vv6ǠE@]lZmAeaTZ¼A8g5ƙ ͇|;EƘ=F8Hӧ ʷ=~>PCf^Q<ȢT:)JQ?,I"_ލ7곇ʏ|zc )荧ڣS'd/''X.XBdDJK6RBƒGnS˧'t,0zK JfEmЫ!Cmr\@.@Ÿ 5Xƀl]NF .Jrp7e|P2$Jۻ6*['Iq+Ǣ n&8#Aa/IWY40=ODJᓍ@R?ڒBI 6'>gi!c7(~>fW-XVP%~+{+`f*^_ɓτ gskr/_psNg朮s+ݙ]zk$j BP5bsa/mł_жL:Bp~tkbƤi(4K*v1=$OgEVts@Va?z(,G0!3aX|y;q'W]җGW .Q MrA~Ae#.Rxr+/\-%Yskt3:3+gO&x}}]܇ڲز-rQc>6l| 5cw/F>cǀ'h_+ow_VO%ڧVQUXuʭroxONw8BZ˛]WX4oMA pI IҐ*Kh8P9i ]XUkSN rII7 CENjHQwԸVLF˧jy;2n%z2.)a4*$(TʠGa*-I@)!Lx@+nYA1DIMI/)Sͻ{USY|kf.C".ٯ.Wo߇i[~Z&_^l+`uRnU\S]]]?w^ӢP4׃6[ y) z-9ПkdYcޕ>el$Se  =6zd|gˬ4aP7w8?y=n')0TPlyۏr`#h8zyKM]tVr$s`ANn8lTF48&'^/uW[h-ߔIoKv;EeF(9L KWїo@Kez)*j2NX5uڀcyss;teq9999@^0#/ `pf#GpZ+D"ef$4Gt#hyjhVX|41FA(1 w?\3aJV~Wj45EXqď-BmN*! @[dn _Vb׳![D* >iUrgGZz-G !l ćgWl sUF5qם{M0LttR!sIA:d-``EGbAW؟!<8R\8%S9 /&E ^ C2(̍'T,-7R{;.Q!]un$偢] ϳaoZI-TG8m'a㚸Cù\_y}#9 *ϗ>R z+U*LQѦ*d5k,rOO16O5/mju\UVOR+yj4P=z@ ?/ylyrr" g,h[Gp(H`yQ+% E.$TINyj,$ %%ڥe֫j ,Uzlý&WT9 \'QB3mV,w/zdo%h ;IhQjwUȃf8㍼@ P 5x^EZyi`>hJx*!fG5O+oi#Z-(kj䫢WGb ΐJ֤gz$y[g|9p,6Gg_şO=S7`9S !_kMݰÞ(17^['O>)JV킫763ۙgndc0JKؓRJg9:B$ Sr M[Z0X(9ƪ/Tf &5VK57I_ΦJ斔U;jH˧ U ,xYf([_tv=v=71ğvgC{.8 MilD I 욛_xoS <#O f٫_7x!D؈-[{8pޝyg1׃+&7qIrnCǭ*Yt)Mc;@X4)>֔=9#;;錼|]M2e9i3Rj0N۩њTg ̝xIlRt syNj>&pN*a= į9E{nIKC+ /TuZ7ԓZU *v«eCo򽵃̼X趂M*[vXclbtY.(1Jhߐ QSj]s\*FtW!ցL|`Bs3P-yp-p4I{dEeX?-h :m> ?G>pV^r_c.!&Oe<=>M{15ru<|ހD| 5JPQ#<;;9 츎\ǃFǁ^BAr4'2N;WG|>,r0<+3#SQܜ|)H[&GU7w;oNmKOuOc'=τARoQ4)<, F9@_[(nra?j:j9ޏЛR6xvU3Zuƻm|]wRtrv65˪ę-¥OJfo$#C+:N$>/5 6s5 `!v{:[CZއhۂiȓ&pmf j:)P ʌrM+x4޹y xЙf0(q7a^2 ¤kH!-mDױ ֱ^;ɶc7e/Tuvjr8_}\27ٗ#a!!巔b( %~ ꠩ $wp:ZRf('Кb/!%=_d{Sq)0w={&iZkx6|/7=V۲x2udF`!Hå~Ag!JL3P-+bGw,oo~֤o#`KR+r~7%"gǸ$\kXB0(ShKD#HI$#"FrFj#ep$"F++UPmUpQ8:<-y0V+Qb(%P+>71hV)0)]uZ[(:U }c>:wqPt Ga]ɝ 뇿zB斖z fN1pAl/8 >kiE/SUd51"\93'AON 8/PfkvLa8KvK_+M|!i@6{AV_H!afR][D1 j+QL )jy) bSTЦ&Jxr2~4^dX@L$_.r2Yy)82`xzْJEnM7j&7{dķşɀ N/~9%PQ v(Jr%LcUoWU=#@U%E)DN322\fn2H 4Fb|~Ka)KZ2;Ph68svv/X#ɺCҕB%VM_؞<`pfG; o %tyVV?֒ nX. #Wa m (DeF$8 KVzO{RM)ܬ¯X88P*\B :o Nf\QY9FW^bJr1hC YpHEH!\*My2@׺nENiT1ss|wȸFCb NsٝD!@ /Gj;&oIk-Vyd ZTJ2]F:kjL ?!Fl7=6ȡd_v6bF+c˹&II^HIFQR8UpI0ur  {_Q, -%A_e '7Ӓ 7#H|L:ȵFtI6W7(/| %ϦͰ7U pz> endobj 283 0 obj [ 600 0 0 600 600 0 0 0 0 0 0 0 600 600 600 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 600 0 600 600 600 600 600 600 600 0 600 600 600 600 600 600 0 600 600 600 600 0 0 600 600 600 ] endobj 27 0 obj << /Type /Font /Subtype /TrueType /BaseFont /YPZKHJ+CourierNewPSMT /FontDescriptor 282 0 R /Widths 283 0 R /FirstChar 32 /LastChar 122 /Encoding /MacRomanEncoding >> endobj 284 0 obj << /Length 285 0 R /Length1 7620 /Filter /FlateDecode >> stream x9{\Te3fsDfAraEnJByAEC+elw[Kw5r.nږmۯ]k+vsLo>\>^ڰ `;p\#ʞ[KF -+;W-/[zx to{[Q^NŔg(Yn8?Q%ܱ{35m1}|纍]ϔ mblϡ $ȇ,ꁧOV/nm7J8[,&[m55@of5Aa eE;<(%j oL`}8>CٔREa}wi}KlanvBgk kc9>cyA&wh0ԭ cx%1<3!':̧t%:?4fJҪLI-`I ;`Llla>,:AKuam:?z >|t8[t}!}A;d(cP!4eXAKXTɅe?2ksk+%?)!ϔ_="ԽrD$u 7Žm.y -*:kE^NrBrrLCĬ΍ rQ^Pz\D OdIhqy"uƛM{}b6R*bo{41h7JF1h672#"3A)IeA^/KL+  fձӱN=)4mR nt:WR_*YGHT ,GЭnMUU!ZUwjy;9 ا%T/E'T~~(j9[hÃ|H|B{5WC]i=uijV5֩wW1|$T=jYcxcyW76r :=e$g| r<伺]LΡW:Qjrst].yaoKda]f8֖Zu/$!@"*."#ӚQk~|^d<֌5|/be+mleNhpZ:@0}_jNW-|R q@$f%S=mô֥?ʫ̫XdZCV"YmS=xx%9`]]PGMyԩܦp(`Ku# Y,Hd8 ǝX㍭x~O ~v,|= ؃Ga#lCT~fo't¯\ ^ӰDD` q~5E*T<8} #.3 yp͢q'@2 h%4iÛcC;tS[`7]mbS{ dl4OЌ,˹}c}=D3P !Dy^?O\+-:y*1A!POn  wsc_QˣQB9ͿtutcNZxe"+c7C+Wqoqp|7`D_H2,js \ 4kFvj>q  B+T)' kf4嚨C~#McwQkt GQҦL:"Aڨ[az<J0I缿LINIXsp.6*-x^)Ci4R30Y<65Ulec)^fٛ]KಹZn&[us[m9=!bmûw$2a."ŸDN+77i~?~gm{ʹjgC*7fHsp3>A<O'fݼ GYck Inu N*X$xNuz%/X/]jR >$H\E~2 ]縕{"eTCFd ܋x<):lge F=B= [C;gJȞ@-p<4Nyil=xkQv3o&_xZ(wkn\wGC?J ߎ3([8 n{7,pF*e?&{Mf"/5 cn&-`4 UDwpT0 S|V.]V1lJEOr'Lfx9=mBjt$'%$5>b6E@ykZ5E峽ym%BU!R2k%EA\$1yI +!QinwV{uD/e>[G xrW+*(!fs{O:Ϗs͜~*Nog?:^`Py?ij:TB+9sáT1ϯbr2 ٧@ލ*Tލҡt`?sGDe-K*Jm[:uRt*q!7 :MgnGkڠ, ]48mTbj4JUjN\B ң¼-P aG z[''Aϼ-⾘b qH1^ŵRݼDmDtP $쥉L@Y>NFZ ZT#ktR%,ɫ|ޑ.S, Иq70[/>مXE Ic7GXSO 愩Zcy>VuW$Q p@0mEPlszv+d՘}&9C*:v[_7[GG4%2nu .b|M7⍗Ī04ӦKt.Y⒦"T>ݒWDD#NAFZjc;ʿ~ҳOC-46luEEËPau zzj(xHt2"y{쁞؊FûR՚;i*XNv`zwM!A*;鍍yъ2`aDi5 hvZVzCMQ]Eu m4@hL'ٔtv9oqV~ϭiF5AYEg$NEV:>r`1Q0h|V ?C/+F+sK < ,t{wA| s2tGNKe&s2O 9zU1fCtЊqM!>_-,8m.QgGGV/,^&`ss*+"u7_%n&Fv&%0:ia/)̟X؝xJ)D*%&-vmL"}T͹!N`" !'ckw/Oa"s?{rMʎ4YHMΎ 4ȔTs@\|j?~v^D[`jb)S)d봽C=M/bgTӬEguW$k{ۆ&:lΞYT٘lL3,Ĕ%psO#}o>o_|t,-Wwy0Ovo+nsc)0/&}\Zwn/; ,g +(Zm{ SQȂrP efd!hMvvoBS D]$/aYWt@m^Csr0zn :6GQH3z`,ip$0 |V2GD݁E͙9yW2{fʚ?]yWFitG,6HA9͸Tϳ/muc[8{4j*r5N N8 a̠Ggc^"d"NJE<ɒ%Я `> +’R%?5*%eOO2'Cr30٘՟k=L&atn 5<+MpR>G"'ꎪǾ̉];"mZsh_r('f/eç.00ipRSH5hF]?rn)#"=F| mSmh\^mI@ې &i h?0/>qgl?>Y{:> endobj 287 0 obj [ 278 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 0 556 556 0 0 0 0 0 0 0 0 0 0 0 0 333 500 0 556 ] endobj 29 0 obj << /Type /Font /Subtype /TrueType /BaseFont /HUAOJR+Arial-ItalicMT /FontDescriptor 286 0 R /Widths 287 0 R /FirstChar 32 /LastChar 117 /Encoding /MacRomanEncoding >> endobj 288 0 obj << /Length 289 0 R /Length1 13852 /Filter /FlateDecode >> stream x{{|T̜\v~1glBI6 A$fD@MQQ! D-%޵zXPK|B֥ZKA_U;.<ߙygW$2H$[}~"zfUdIBK^ۮ#нv5b>oXF<} byZxʺ7_˻C^k;i4- 6į\"ݏMB[h+p"\-L W2{CL($"zF"mw^#v)J<@9 /^ |&pٓh7J!n@ƭgsDxbXdAvi+)F;Ȑ5qN!>M pHKܳhI%i˯H p< HW0iAK#gb̻ ^ʃrO'tC8ٳ "4V|ZYٰBP<~6?o7+x|a< 2;|2WcW<Ώj<Вi E瘾)4))̨%ȏ0LdX #Ded)Dž\鸐 ~@ْaG JL)jO svr: 9CP(!@Q.jqD:9A*Py9Iz5ׇYOh3 B0~D: YÐuwÐuX:!i}LP^Xc4THMKj€0Uj$#<0XT#j!-1FZ%7)uBRxٻ~q$ eg UY 7Bu|^ULEu18{Dp(000;cl#M> ~,Z{ Y)ή#[(kpl3p%J#5l6 H]\E:$>GApGApA֏AuApGCj=p)9A^ \l Mo6o6! ۄ6o6okZȯZȯk!k!VȯZȯZ!k!kYpTm Axx@x@Gx@1{ !?,!? a aC~B~Ð0!?,!? a ZғS0l5."cJ`(@p(YT ,%K$K'x ' ' x'.Bjp x [T'^<<OO/xz+xz: ^Lm&?` &?`/`&`&?&?F_xS `5h  /8 /8 /8+8<(pxGpxpxpxpxGp[GapGapapGXpGaGap9>ʮ9S57F#+k3&xJ<~Q (_\|x^[ll-d^}T}A_wkea+zڄס_)Y..t*[˶5ۀPc4W'S @!$#f)V!3<dw"JE*Z_fG Cގ9ɵ)mK޵-m+%mKnܖܰ-f[mU7Z^CrJ^,:"ѺP21ѓ!G=}"#:rBDQe>JxcӇCQPȱڐ%!GƐ Q3r׎1,?86v5G^UQl_+^x4VR+YjJ5 ѽi_rð0\l.0 O1 y4cQ1IѨ7Ff$ƴ_ N+<فY{eMrk|I }4%(~0b"bYyڽKhOCK]{շ4eyݵ7{y[ L;8D;lޮGv]yF[-ͣ6MmFo3"ڌHBĤԙ!8Rg&?߶)mN7R}(Y,Y[Z-gKn߲.K\{,U&V^}c4kf9-zylik--nql_pmt޵&ra^}ks ke=Q#inZX} ݘ.0ˑ-w^'n-٨%;JJxWQlWemGW)(: \[WKg6/MK9.hsVsn>Ms_ Ymڼ`&7@lӦn^ެ[(M㓄R7 (7oB;ctMD+k"ĕn"Ih8?FwKZ2a7젷lQzyV~l/8))BM.$r)~Nq)OE}ȿLgy̎"hTH-t;/Gɏ%ѧHu.cj+ )-G%cgR|}t7\B wgh_Sh06No#D`耮8\@f/YA+>T&GG!M i;X"Ni3=$HF7% B$˔)dVܽ$H6)zyVj̚Yb/I۠9JL%I6}ut}GDxH Oz0ޝԫ JуKh^OHG)ϕ?^ eJqBR Sdًl}b|aJ.G2HUћD z$vt'"Bsw!E.:i#~~Od?O;4’ٓtY>yJy(29mvGOc|ȍVry< {´Χr[m1 s@JJK*F%'7Z݄+j!di:d=,l!Waο,>wb?/s#o$5djyt6FE7;/'n6-dk)Tz^:$3RXcS:ozߟ?"E! }:R*)].O]Ga5c?t7+B ހs#>Orc<8=(0z]®eK,"%JY'aNvHb oKKr\ ϒ'SVUzNaιh |F8 $?gRx6*m$|?Zƚǰ z7}IxsS/#!l- ?2_>gH'_;1%Z6Iod+"NdZʻ_.z f+-YX.+/ALOm1 lw~^qw~Ҁ^O%I]P`3oC$O |t̉w{{w/*34̗N5y("Eױb)҇d.ގuc.- ?nVDϛ:Tנa5^ #u =mխ-ֵt3t"Cp{Ka;29]N>9*@] J $T̓d;qN5D;H$r2R#"ߍ F#Oӣ_NEz+ˣ_ҢD#ҝLĺz0 +ͥ (f%Ʈ"r#w<ƸUa} 9 JŌχNVJi_&?> -Q2ybS;M3䙉1?ANov!w;kYel~ы"aMzo~ײ v.Yÿmwv}ݬښ3UV{JKES \Sn˻ 7';+3#=-5ŪXI &A%FIIsN@ \;+Q򜂀hm4߷U%h鋵iIԕ-NU;TE]HV"@IFjKֺfUEePK&&49JKhB"HiQ9leĘ1j9-ۉ[!Fr\u,jiu8KK4ڴڹJ#A-&A4Qk]-cL!55+WtiJhѬn6k[?:p<86WjZCC;TmdQ9:n5'04w@U4˃{r.U5ѹn38B99#$Er:4o{eidh5{}j5%56fK<|n3)ќN蜧`GUˉAL2z&fW7]afj )SI5KqC' mpQW,U!}xdMR^38Ys vMB3(-j5Tۗ8q y^.V'xJKmr7mX$ja+iLW&f`)єX؝pi,z%Ňպu[u^% IXhX{򡡄괅n-ɥ\-٥E:0/u9b9$UvڥjXY겎{ipw-{!AE tʢJ麚zO֑YӣBKS\U3\l+Up 5$ɷz;}2]Z+(u$>h4ZOZڥ§06_/&~v=P\s/H 2oVi)"Rj(FNGX4 y(\u50@ҩ-)j.@A7nvv9NuP`hXtpSUC{ )cIIǢn \Gk18ꤷ.[,ڋsPήXSgWAv1d- 44`r1dg`=%b,o% oзOs.HWJMz]z3.E9.B7Y>pO :DrL8%k u &*_-P&ꈷn|au929J}:r ,ҷaISw"qLDxX/CeD]p4(wUӧUfHss]=~(_z o3hXG˨nztto-/|٤S/_S?9riȗfgM-/O-ExFURJXt籩UJBG% &Go В4_ieUZ_hCNL7˞q|~)%ћS|-|fݠ !{Y1HwQ}=ʏ,tWYl3rYsʋߧUNIUSg?3 8j+ѰΊb$$ͺt鄙*ttPAgNXT_BbUy$T,$r}N#9DBL u%ePrz2ln1fH#`LHNȰii?ex/g4՜cWJTrL* Uv u,C^{T׫' #MgN X2Nb7@u^S:$&&`sdHKW:Gj3C褮*Hu3ޘC @wAs~/t. 0uSsV_њҲo״ nt/J?!.RA՘ Y3$e&9R*RScW:*"Qɵ\ޤS OOH,䚮zGpGnЗDY9>)R&:hJT6/- %-#ǓQb)r8 {ysU4%ULmzڴI7$c$Sδ@ KyA]jPWuUfW[;ib6#M#Q(|3Fx5pk ߲2[~q~EvZj|+r/8 47猾L-t9uSEu;n qwZӰB->4εiq΋ Ouw'#?}+*&26<% הA3K#}t`#5~R;V /+A,sɳWe:&KYR٢XSR$Yx5;?kv w'k8&蓓tϡ4 [WbHOWiRZvc :O@gE9| 2;8#M'i'%V~.#N4 K<9 sj3IaS|&_GFF>q|Sݥeeo-}&㷪b n;WVq )_6φ}Vz2!bIThURCprf؈ϥlCɞJπxES=qjKms\b.Xc{W|U|3Xy4Q';Uc0Fjqؚ•g'Qp#x&b:[|w݂|bal*ScZEaNE:be3|i/@%![H7ʙ4X)ŷ] k.ջ :'ᑻx=*JoyƎt)FrE'Fƒ nlە {X]H!cyвѓu#>ZYX],ˍNYA1E{zz;A^=vm,z8'-כ7|KQ w@ؙz6q7i3z- _b\ 2Ӎn75.(h|Bz"*osp/7^^)^Um4p|30RDߍ`Q|z^Ѐ"Nwo^ (h3m"(c$[-Wn\߷qaUKJ," endstream endobj 289 0 obj 9040 endobj 290 0 obj << /Type /FontDescriptor /Ascent 833 /CapHeight 592 /Descent -300 /Flags 32 /FontBBox [-192 -710 702 1222] /FontName /HLGWUO+CourierNewPS-BoldMT /ItalicAngle 0 /StemV 0 /AvgWidth 600 /MaxWidth 600 /XHeight 443 /FontFile2 288 0 R >> endobj 291 0 obj [ 600 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 600 0 0 600 0 600 0 0 0 0 600 0 0 0 600 0 0 0 0 0 0 600 ] endobj 30 0 obj << /Type /Font /Subtype /TrueType /BaseFont /HLGWUO+CourierNewPS-BoldMT /FontDescriptor 290 0 R /Widths 291 0 R /FirstChar 32 /LastChar 121 /Encoding /MacRomanEncoding >> endobj 292 0 obj << /Length 293 0 R /Length1 37096 /Filter /FlateDecode >> stream xԽy`E?^U=s̑I&r"iH8  rP$(讬7x Ipʫ+z.QEt}_zyzj,^:H 2 翛zeK©cY g_:v\Mo:&93H("uLKPfιfcdܿ{q{OSjx%=:G.ӞbS\on#&ߑ*FdR@&"Ӊc~^b[n)֪ui<<^ .2љpWN;0y"\N=}rbk\r ![HoR:hUdGjFi$L8+#_ԂkHBaHۑN!it!Ƀ}|ԍ$HS mGҨxUHG i"xZ,F=ԢmEFmbC5&Uj?լ_IT*YE-y\tt[p%B#VJI\$tUQ{[fhA$T`%3H@[ͶA;%vb߰fmtA:$O;;YN1G^Io4~Xهi v#H"iهe71jj$\f>@nez}Z^Yt@=@(vwQ{\`T 3 :$dXhUsCmxhǠB&I 1M*=Yu0Ja#"O"}yy{xn^ m9L[ҖiLrmYM[hU%N[%H[rV`(ZJK[ӖݴhKmɤ-aZtHPhĉE.ceh8O8$RzQ8#eF[^uo.e/0 /DL @pp;+j)HGEFҠuc[ U#MAZ-Fη # .Q;Vi4?b/_Et9 K-j +'n7ݦuP?`&Azv;B1[{-?:ݭCA.uh Ҭח{ eQk`.C_?St@EPpH[Co7B/tPs8AQ M*BMWĽx?20<4?:qU3khllRRoh`ZHi=WRJ5CB<桳Ѡzú:GnkGk˴E|mDҦkӴN]',:Π4:QtD>ԨM28 l9aTe$FӑiĹqj3)!Eӄ}$9~p">C=6Q^YP`;(_Ay՚}HBmmiYs[CU{mÆIlƽĶO7$8Н02qwLh? Ռ #; 00v$ ݛj.hד,]^)o9fLdh fM'6dz& ڸ[qqw o&@ 24~P_m|ڤɆ M6ORQ 1mc>638spsơ6 $#30 ',`3޻Pa!x޴di3KzJisě{vq>XjՒ8Xt'ϑernwOiAbr(?r Q=L9D1 F2KR:EݣO7q=zi% $St3GO; =*$V'1nF)T'yFsld$EZ&q~}W~F`7JxQ=X0.w&ENX.[d.n#~fb'Għ_4SHG Q34Lm6MaOߋ׵SWkm) :^ItCOlo9"`Ɖ-Zid}Xג1]Ar*Q#ZGo&z}h;~%{ J4, l1$߳I^c_!ąRJhW넭.œb7ƹH&mvJOIKg4&X_=HW^GI\ܖlMw0X=USCޠ&сr:.c$oԾ?CcޡߢfPܗl4~Wl;Y;{,h`\B0\hf KmBBxUPD8'ǯ[4!1Cqq8E\*>(~.~.M^>4hj:4T3P[mn׾kv@g)aP##b/)d0SN,S^3 W3b c"α(:#X 5NI@U S>0H/0rE8Ľ >!'kƳ2[PpXj^I%'t&vI^;$-d'],*hri;) 68΢^~`fJF2Two~ ؝{4ܜXVf4#i~v9vlMF^H(ɯk 'bM 1>8:SUєjo$8 ZJr%UO~&N wIc64Nt(ުf.x 'hS&1lٜ5MCӽFÐ萙>d(.K= 0OMxń?:&RFȪ:#Q;fhZ$'?ALNK.)&dfHB>&<2Nl ?qsL5M33NOSq-Mx^%>{e[j`Z=k`&=uN9RH0zR;Ulf830#s!MHR o_fjO&KO.ZNx"/v}_х2g4ZԆHOLAeL}8L5kgq3-g.\&s}؅V?A3SGhԃ#(u( zcHP!&gSrogthuJ%KSy!顙EgUjqHt4Ā{`9 ƍߜz9Cя$H(3 rTԐP0d83TV7aZE 'xƍâa6Nn э kR}pSZbQ~^7L[eC7iaC :!1c/6tĞ$+x&Q$A(C& x(H#I ҄.i&Df!=ad\vG)hM$mǹ{C('}agMHٸ2O-aH#Q@9i}/u?(-x:^4q]&nȊAAqHq$0xS ekzF =B؈8 Y<@6QƓA$dA FM<ЇU/,@^BD)&%Aҟ <| LXd2 'B#"WuqY -qT|}]GhI44)s}SgUߥe}Ho wx|dHFzѷ3[];]s?(#}c?nweѼ{>,kŬ*u8 ElY`$D~!a(?? #M%kEee"uڂƲyuEZ n/ut2gsg~8Z2OW6y#qFdz1q#n ב d'0yw ت(>ȼ&y݅[^g&@V6 Ɏd*2MԬc/[$e5]wLvMMo5הvN̸ܺNsv}mVo+hIg![3Ka,l rN7.s_6.!Ql/+.r 2M4#;Ee69j濱cYx8kŊ]nZqY#{%O&/Y@ߞut7sr\ @(aA1J拫vN|ZzNq-V^JP'ԢN(FYu~&I1[Kޑ(he&i]CR(q<Q] jO%FDmTX~i?|RDq3ÏOV\݂\dԙ;϶l*e@A( A~6LRL zX8]ʚ?P1[Ai4~g :@0eMmmz>D+e&C 6uȣ!ːgL}0/`L8M!;ʹ8g/X𺪪;R V֔b,b/T\X9f\*]chErzowsƹKxݻUM?zӱOg'jw]?0eBg =gyU&ܨl5YC+)5>,aVB>7pvH'EE{|,^EɑnsyYM-Kƺ9gop5otnH{lvF"j)6/p\bj2D/k}l^J<% ^msLM1Jbrggb[x;hE ]7^VΞ9B'fqu Ȯ_9[o {iv) ?Ȑ Rf71kez$].\n(؁Ĥ(h ~\ fLfQ+Bj@DMqf=+I%=Tb|PYdDK-RV+bYBL)Y`,t:_,g/Ug!埫UA\7.dT[3|{%xܛRS)U Q&Xij4)JSFeJ Uۊ]Q`l[׭߽b{NyLǒkDz28aUkU7os&:dew8[N $8xG=z*78)a=e[dQxU"R╽ Mwk~". UEe"X.K#(A#6* NKE2>WE~C6d^tK-$X]\}s7캝[8JuKn;."ot{[GW?N.<חh=ťQ9x^:ɣ{^JCp 4-'ٌ%1M:͆ %Y2 %A|<=܉7O;F>}Pd/ͳ/- ѭ {mӆ9dhBSU'Dv86Z3C?SD{ yB}YͲ:Ѕdh=x3r)Qޚol.H+wgggG@(yO i {`߹a& 13D=xBFE,huߪk7„j *>0"5bQըW45zWT_j0"h2|ossdp6?|WҞ+3z`+d$&y$0V׷=H9A97YIq+c9H NPOZX+SJ VzWtRRՃ)-WQ+=ɳjGTwiU3Z|. ސ?# ^|^S=Qu"NAne/y%]!.-2.6-5/l"fqnVZmWm/:@ϋp}XO)ܰĄnK/$|DOl"Ǜ kfXe+v;yPq5+ȇ]Ҝk !r|5.^D54Pn+It פC-#Gͺے{/yikYaGlzW=!=ocwJnys-S|oɝ, 3)YcK@ 9uJ.(9|F6uJmiƜ RfZ+ xcPHaeyŝKcXnrHoC F4L静5+wy5[7E|Bq|)7X FfԺK/yгi80(/4ӪvbkLkfPuAgꊼLד({PчKi~" )OD,w.tv6BX? n<ɏ3sh)/RtW^f/-aa﷋L5b4#33ϋD ~dU͎AN*.* 7 zhLι|x⃕m[y*WɕoE=iL>Ϗ??c9}*?Mݚ:9y|ŊE,<29Nw\x_ִKjy4>Ms_ӻ_yy+ɏ~z5?s#ɜ/:wfn}CϬ,UӔ2 lνҘEi(ezEa$(*Wi6JkLlynswv5WņL?3z8pM6Q#Ck?l ѤdV2}ټt }LP#pIz 5}+WzJx|@h7d~NWbO y[^ n#OѾ~pN(i{S̏Zs*UaONl%TLsMBZP1e$,ybaA|m8\hJugj-PS3p(!`"?IO;ܷyo4l#0_׾),^·q(\yg0ڊT)] ;mrJt貞T^E*cFZX?.Q:5?^Q Ѓr .Ҵػ$ay^1@,n4i'Bd^] B[{ dj1ndEfEzlOOMaI8&VXQW˧%O{"5hwY/ɝb[O'ͻ9A6%,W? c~ߊQ3*$G |9.tLc~‡?eZf׀C9\)^sPI"v">a>j2'7UFRez0Uzj mU. K[=f bD,/3DQwШrޞՏSˠIX]nՊwk ƆEzXЁ mGBޱsa*Fv)L6[-լ7i*9uPbV>f0bFn=S!.T \E5&v(ZGCt.U/5}NqQj BW8O{|)exմGpy97# Hc9WI%(dW 2pDa]fxOxK!ꢐ#m7JO_$HKŷE)Eoaal3U"ĤTu=H ʣmv7Hćgfe]|i7H(%Nj j 2) 0#b:X o)!N!P23jigB+@Y0^]e =\ EyZDI52(>U*^iXRg%}Y])_N6بEs8"3~m{K]I׹3\N3f}6HUJHD(%vb2rAA?S]D#.tuv'w#ԊtI}.4,fx`Qr8ds*& a:Btzf0jTEĈJ?W WY~ѐBF9n$Gʯv{8ߧ W iU~QsAE53) Yx ~#*c%V5L#:H%=UpM@&(fZ}R%?[\ǐS/WM/!x),M'.35Ciaar,s^R\f޲ά32IWi.f#zt̃-=66N άK@Li3 ONo0[,5[~턟_F]?`Ši%-Ԉ3*FuL0ٰ$HXJ6pTjƥjN7BG0pRrB_RUUQ^TIHLݿ vmoȄ ԟRǽS{\oTZ#[vy\Am54ʭSVN# /mwc'ؕnT:'Y/;.O80_JSpbsE Rt^;V!D:\%:ɭ@P"(nu0} :Ș^0?Q[Y 2R&54 Tq(u^a#Pʍ[`֫q Kʘjs@Tg,.  fANV {tJR*\Xym43gVj-N$?>0=tqǽm񨤃),൘_'1aU_Z6қO#ǕZ:e3͓&4zi.~ˋpbQR~\gs}AAzW,̭}28Q_@ʗg xߒNӭ1>uRrSjnJ6n;*up-C;NSIZBڨwOSZ6/iUg;HyJJh4b!/Wֈ\WJ*ܯ^u7n_/ce:8|`z-,\Bgؠ\[ewΆo/'?xy[Jvu=-ͫ&2sy4 W"vBtׄ`N͵j W'^ |755`)I_L[Fv 1g_m%οۖKG{Fri.g pV1;N4 Z=%u_3G9UE%gV\\4 2[A89T ) @fhtq";DdLe=4vqج`HIB |MH_?/|~oa#SGM{^ݝ%a t`O]0DFNL*'lj *,h BSin~ Z:ࡧ= ss^%6a$Lr2&/h&3ut&8@ΜZmm?̔)n'R l$A#Yfl‚5EAMk{ "CoYoX&|u=c^/y0/Mv/I.0>~F)tAry&>۰$,ۜlM:K"b0tIh:k# Ax =CĄ܅ uM{SA7 d形f.$\eԯKjîg* md8N <8)Y̻= 5m&ERЈ#F #;L|0k>3W|BCWgejL.mjBӸ9%,מ먠BB_ao); v7!yhZڞ\jmu:#c%f//Սu,Lqnqe}\e9֊ wg//սgy g|bHvܨ9HGX]`4!V̅ P,5|E1?i6,DBCT6*øgf`rT#3p{b[&i2 Hd3z+@33l–8<6l557t(M"'e(09]G8_qlS_gcg#mcl*_'Eyt2VU:9{k>Q;,zU5r[ra֛V ִJGi0dUbq T: HfS尻=D@]>R a4#P288drxPC PoR.7n){IBʓϩa\FWIn E[yյ隮Qb>$tSr.d8e<#JYP5E#isL]F"Iy.(B78W;殟޻?);9OV<jd vQB3񰩳4R Ei'{ޖ{&#@/g}|Y3ryy0k473k*h^{>.+k\*=zd~ߡc9> uSl: ⃘eSe:~J2xi]C|nn|i6td)n+/PQ.,E) rYnRmbnH-{,"&S@fQ8-0FOޅP|*~U6cTy*͊@W:e3hi UG5.S}SefRd+|WN8V*A,U\ޏu9ʣlG%|Vfdќ԰Z4X<㵐{y4rp/!Sӯ 8LnqK4U]O?i>KmQOIUJ?a Ra\-f8@Oph Fx( U3sxxߟMk֯!= 러ϴc &]3wñ[=W8-ff>4,.4RzY aN@Upiӕ/-|jrLLTP"B!4U*^o5뭍tWXu_?z}'=_~*kP*Zi~ϲIvYD #i,WbffQ5(b4*UGފ3*fN Q |KNꢪ Y'w=C7%^K8s*PUv*A| DS8) ?q{U*O7,†bFdlHM{Y$eO?tpY}eoo?@t^<X ~姓zt*+)w8/W[Zo@w\Z{Zha5D%o*͂]{ꮽz 8x9yM}½GG&g 󤥦}}&N01ź*XIZ҄nm[zb1gZt|-ixLc<YNΥ9peҐyHk*{K+9֣r/g*aqGsԍ\ ;'+ɍO`Tg*)EBoy?/7[hoդO>zϳ'i:5}|oߧ*CH?]DIdRHVch`mTgz"S`1"+ `# I-A,Y~Fe7Zl M)9LE3YcM%XB1#n7*QgǶĞyѓk"`US9BӦ.KZu%E:/P':#AM'PtƽKR\МgCgBcZ:[u^챝7^7v*l3Y~_=l$htœS(spk980-zY :+ }ͻ:9ǜ>>9PI,u!{0lwRgC=Y"yy'~%TPVB} 'bjoQmpH*I.]Nh*|*<I|7*0vp`UR7nsZNk5:HH2\ĦQx ׀Ns!0Mnt=۷;,|rZEء'O n^4dDaM6#|່(MF7f9/785t_z1̏V˜9'hs?wYFFf_5G,R[?8,R;>2>wvzdznS~K_D~m5='Ъ+#-(>8T@j nWqV!}Ceix|X]Qٚ*Qlͣ5!R0W)[ =l y2%VE2BG'[bZmN+x6a?rR5uV_<I7 ;;u>n:r܏<< T x-@4@_&X4d^ ]̵g~O_;w/~gLVьIMû)|wy?)!G‹/pkyĨN=Omsyx) M]X4jUģ)i HZ'^JqYIS7FչNN PVl|#^E '=H 9_`^[\=%e% 7[Nݢ9r:ч3xػ^ U!\SnT+u]ρ'Wc/hWzкݾhr=& i *}iJ࣪=guf{'dLIA$h"d@PTв)VDl DR۲M3jBŊC'ZZZJ4N Xs%s?mA]W%X7.һt .Xz9] JyEnJ.sIp&˾ǣ7d\d[p ?¿hQڷk4FSiPR&EFjV7<'Wfk4{vw7˵&`Pe.]M >Jwh*jAZ zYXcbl2XeH=Sb`5 @}@}L_ O!V(yRHZ|J֮5@hUF5 ,MB@"@Cwv~t@.}K _+i4^ߠ^L~1je2IX+8QƁ .| (W۷;uxU{+D qD\V"AYES(g7>U'VTY^9Wo 7feڬ*/ >Q~W9Uɀ̉E @Sf}>+SXCFޟ+AYHG_Rd@@j8@fVY%-e##ƾhq=Yc],' L> R2mM݀A91{9a!īTZC@skx|`d3> 4 [Ff 2%YH,|'x<ZLO3ˊ Й DQϵyy%ۓ|nrcrK-)'c8wzt!xka;\>G7*!x)\ (@s)/,DuC3T@72\#SJ )%9W4ī6t`꣣ma +mx~v,w0炵ot!*ъa)fvGHd`ХxQTh2L4k+34 O^lpF/N[)Δ994{3'>-y3ӕ`xricrhv`zp1;d$ d5 +OOZt4p(PA\I j@: J@9R."@ M8 !7j!D$ss R\}@a OX%-}lp~M]^ )D1zsQ4{_ŗ~yίl[uwچ-)*W/cw"~7zVuΐKЂttVܘْř^~y /,Y%/M\n&Z-ڬ {NbV-v@@Ece22ڮ/'ٟ_vf4s%\62/oF_-aF8*PS^ D[8F˰o5 \F)ppn8U{;/Q ؼbg3ucOE_w4݅y^׸̖Y\'_ʊtMQ=,4f!!zd&f\?}E{APBa TN(ghw@L& p$Og)_`P!i)c |D yѻ6?q_x+cErţ zrh؊ZHxKX R}H'gd>&iq3-Zb-Lm>Әi VVZO2iӪ-aa'Uӡ*~/W=BYw ^C$^C*P( NQ$22LEl]OATTc)uUjs͔bS7ԃ)zm~!n9* 36v狩f{,^G1vvKB^X+&( HH,\pY .jysu5-n1Zp;SzWJ,SN!|M-(כ(|mQz@ዝ4L{?U}j~ߊ~9aߌ_`IP|L% %փ1"*3^֦Ɂ9H[maʅLg:E_C4@&Kp?bUUT"j;kp&-Uj¡(ӒHYZ* FUn(rZ* VG*0@{W~;`=B)eʊJUعuEa*Y.]WiI-3͌k+_X7a+;`C+Kf }%UÖ^eQ^{IG@, V@ e 4SwR/luSչ\ xN٦:̴pCEᯂ+W= W}2Q O^, n〭(NÓhJ! 0Yx͐⍩R}*O@X#ve r;ꪢG7Oį};@#S [v-d؉<uc3n'ڽZ'VWr͍7Wx6DX$*%e'@BRl/'shpB,8q~kK(õyy4os7oʗI3& 댾O?I-hwM94+m`]MlG΀0]Pjs5^ B˗H "Ci)E}*>,Մ@#`q;W>df1cVnI9Mۿ1c.e(pc/r|DP Ma)q9u`MuO1g]L*dz: ~0xӋJ*pvӁHqp:)%U!^o ԬMԯc }2$_-o6VU=}OC/M.ugSt1RܨHBIx]].A[[y5AR65[\`Ȅ9P 66~VﭖjN u!B D7e~vjpBy@o;<@Y`iRq_.8;@\O~u/0X뱄ًQ*,|=E ,Wp?AXy{K^.G.?v3'#k̊f'ZĹ 0Hm  N`G1*({9 ow^{HEqэ<r/_] _LbCRb vO/. 酱*.*i=b"oZsl -mbU{klG*:Ra^d ^L.wfAzgrPۣ.${?e(#Tx'Oy]!q1"8:n6"HQM ne#0 eHV*כ Y4*0ˍ}Q#j~Ð[ۓ^i?9>LǴՠQ nFg]gXo*S 1s6!YSmh18jՑ5+s`I̸dĎa65L@x7{&hf Ith tfA6UHfO`ؑylʔ$ٔws>ή7LDh[Nl9 !IH׾V?P #ԍֵoJbCDZAt׺mU3UWI0l}NlX}Ծۤs9IV/pix_t##gH}^pE ҵ'd|KP3 8 s.^݄ *lDs>(>gCvnl}^p5~CN~ȗכ4< 7@VGZ#jO}ӻ,YVSdH+-ئ[ηAl8Wj917֛"o df8݃ w'j%p,w{%x2F!Lu ]A w ٟ[V>{ ʲ)+Ee{ . MsJ jE_)B"/ ,Meb:?Y`?Bi'[& DAs#".Oda=_ zB#XY偙^R.z 4LDsP҂+;䱳 d:*ybh kOv:.m*/#>Rh,l[T\ er}%US ?azt$l ޜkm@<4HoMH :pҩ4+CGfS7;ns g;#o($zK얼Epp72m?}6XWAQwfAZX+AI>'TRJ@d!iǁ琊n1b8V P4 6 ݿT` xn޸B]x|g6:ïr^nvNJaQP`tKdU\K|Fk: AD$kNay_#yK "+ ij=Cԥ`(mbĖM9hḪ#drjz= ّ$`?".>n%O Kb4 v[As΋K?m}Aye:ڮ*Oϲ 媎Gn}">7_<*؞W CU; ?@'Q·׊KQū tc8_ כ6&Z~-`lT݅$IV^Z^L{4ZvyuN~ i>H78bYƑ\)A1K͏yͫ#RVLA9P*59Pt EFVD#A BXdӛjtYJY2VŮ;p)Ը4؟a WRczڵ<04a$v inݵQ]]TTQ.8porGv!#F#l[Af# KmD=)ՔjK &v6u%3ٗk+?&wlo|X&׽ .?t.A}.ߠnp._.wIdf$mRP\M Ӕ։H9 50G{5m;2X6On%"71\P5".kmu9-I^La( 11lW&~AQV7sbg`]$n+NPSCGૢ>Fjci,\O6[-.ߤnrZuPp\u˧kc|66WSV Hg\PUAe1.e@.506P_Puo*%A)j ᠜z3U$!ϬS4T}& ՂU]7Փ  *h^CW=]""76FހkCe_yR+ORg\SYpЛm`ڹ SY'2'B?]rO榰u v TSl fD.*V?UV* !ӱ45OhSm!㌯k 6;)R.uW[1?UIJ\ӄkhXVj=UUTk@P=s%[vCڄt1ا}4^R3'co)8;vFB]ӏiᗍ_}W9-} endstream endobj 293 0 obj 26251 endobj 294 0 obj << /Type /FontDescriptor /Ascent 905 /CapHeight 716 /Descent -212 /Flags 32 /FontBBox [-665 -325 2000 1006] /FontName /HXILSU+ArialMT /ItalicAngle 0 /StemV 0 /AvgWidth 441 /Leading 33 /MaxWidth 2000 /XHeight 519 /FontFile2 292 0 R >> endobj 295 0 obj [ 278 0 0 0 556 0 0 191 333 333 0 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 0 0 0 556 1015 667 667 722 722 667 611 778 0 278 500 667 556 833 722 778 667 0 722 667 611 722 667 944 667 0 0 278 0 278 0 0 0 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 222 222 ] endobj 18 0 obj << /Type /Font /Subtype /TrueType /BaseFont /HXILSU+ArialMT /FontDescriptor 294 0 R /Widths 295 0 R /FirstChar 32 /LastChar 213 /Encoding /MacRomanEncoding >> endobj 296 0 obj << /Length 297 0 R /Length1 5084 /Filter /FlateDecode >> stream xXpqw!IrI8vˑ_!Q)J..$$` @.$`H Qr "TQ+ra*VVEi(W#cQl?o/9 L`7o?{y^QG1aEks;#]I;krRsO"qMk-I -k6 zh%/ gpGfCNi#igfmPB@fK &XlP-j ŕN'~QEjgi6ԇQvV?۞ltIY8Ǥ+vQM{'XV,I1q~Ej+\:@]1TѺ3v 1L9ɼL;|TZ|Pj,7$g&] U~E9ڛ ,D1kk& 6$zS: (-V~!&Y/+3f\+ ]WJ_R!Tte*\Mvg`>*bqn_m=c5{ k=:?[7+eb{}mϳg;cc`IT(*@Ko  vrCrrdؼ {4kP,fC}I!"qMqÝh>F[pVd͜U[؊ ߋr21t2psXFٽhUqqݒ }=]k(jXcMzT]njn2ջ_%VG54x'z|=-5U[5bmU}XUu|&%c&>*>*>VO>Xu{7vhSFv񊠮FB~==!?Mrrio2Cy4%cQy+G0It3=D/WQ:&ӵ8{%2LUj_"Nn:BcѦ& y̍}ЛhsB3zfםt<`!AE?2M8"72'-F[yլ7SyB'G|l#'#gcv;j=i,&Q#&vK0Da0_(8ZVv݂OK8*m'~  i>J N{@?=K'SP:a|&QA1Nlk`؃l7{]( A‡"qA|]]J;l4\t͘):Mϙ&1+gUf'_h`pc ,&BKN /na4W6M_6ͳ8bT"ZM̶aPc՞E&9,b-DYnd=ʎOBiB0Q$4 MBbbX$.WQ^ψ ,&HZ!uJ{Q+,yH^.mY~U>cliK>b}}VEg$66jf~D{Y]-^E*q8_pnKhҟS֠Z"3]4h zhq8'8'^3!{|VfƸcv,#o@԰.MjjJE\㧬#st 4"ӇK2}L_*eshNW h_S bq}~-,}o㠻hm~Uga5Wa@ǘ/?8|;i^dX3z9tDO Ң7,ynw>1F]N>Ekn)̵ʠ.FB}e5>qίa-㢠.x#x o s+V]nζ;M><UOӪxGҒ`"חk:59(;71ʒJ.IIk\:7?.dݒ36[h;ߢ3)<< 1LxeOmD5h';\!TB~81+ M:x'2y2NE`mNo5g"lN ǬgtjMz Jkalg`V~oF˷Z(QvW|q5^W6l&cI40O#By)5 F?x?hx=t i}^ϐ^w>2ˌ.N M/%DoS`amm&'2{ʆz͡Vg4?ll endstream endobj 297 0 obj 2724 endobj 298 0 obj << /Type /FontDescriptor /Ascent 770 /CapHeight 717 /Descent -230 /Flags 4 /FontBBox [-951 -481 1445 1122] /FontName /JMIIXA+Helvetica /ItalicAngle 0 /StemV 0 /AvgWidth -441 /MaxWidth 1500 /XHeight 523 /FontFile2 296 0 R >> endobj 299 0 obj [ 278 139 ] endobj 300 0 obj << /Length 301 0 R /Filter /FlateDecode >> stream x]n {bKq!E"?XHָsRl|0O 1׸Ep$.=`qj]Lf\ kN.NPWvȁf8}^Ǧ[J_ eЗMz1 lypy?/'ҨJ6:\Ȇf봺ݴ@r{to_Jvc.mZZ WbpL endstream endobj 301 0 obj 222 endobj 20 0 obj << /Type /Font /Subtype /TrueType /BaseFont /JMIIXA+Helvetica /FontDescriptor 298 0 R /Widths 299 0 R /FirstChar 33 /LastChar 34 /ToUnicode 300 0 R >> endobj 302 0 obj << /Length 303 0 R /Length1 10896 /Filter /FlateDecode >> stream xzi`[ŵW%]ɲ%ّte;;b%Ntc[vȉbqV ` ,C e/%vX6=hZQ^BX4mZ-%3Wrگ=;399gΜц˯X Y 8P}_m j(zUui$at%WJYٻ")Lk`F'UY4K.ݗ L!⥽V=_~C/ƴ~҉\@ :P #:v}m4m)by{Wկ66i??WWF83t9 -8!;=0C[\1 ;1p[dPܪ5nedE^P"0Feѥ_GsGhKIR8m Fv5gWs bZmŰ -[ZEة1P, m&(0P14β31 vb8A=t+l@Uazet l@1p,=`(1'-te@ $N8?0U@P0ۍ"u:lmVd1~-SGY_vY >k\-~غ`ubklvzbtutZ%->OjqPs $1|gY t7H-CW/JI.$|",g$PNd|`Q4mǑ"/(5G Ci)Ɇ"Pa(d .(m,h4ꍼJ*6\z%zż a )j6B[IzZ7r,Qur=Q-QQEZB6Ң.&.Tzs@GgX֍sʪ,]]19g9M 2{#g~3 B-mWn-~J5TCdž|C`!02 g c!ԐVjRCadž9*٥<>N)_ZE=..j}utuM_75vu(5>(ב3+t㣋|} 3+G;_K|>ϗ3jIa #hxr@kK0(Hd8ws+iHY 3 !Ki| SpРv;'xW mR Q!#&\I6_ރp?%,x%RlNΣQll溹RwNfKy8LLhZ.X. 8NhXcG* B%ڣ{a/=:H;Tk` ٜ E#_ng0TZ%Wt~]>K%- F{AcBd2 h9An 4/sv~>OSv~Vݐ$:%3Mdp8JY|`\- Kأ>_s<_M5V>U, 0.Mp< :yd '?h]B m)O6u 뚎}ǚz`-x :# ~&=18yoalh|JVrźЉY/l~m[q ;o`ȅ r/y%ڍv:H?/=CsgS+RSO 9+گ%os#d=1aHj2l&mdy|Kyu|4Zz-fp3K^>Ct7??ԁNm1ou{!m(u58:A-c2G^#go(g m .AW*[YCmzN d ->2-U΢t1+U*]z7>>Bgm9>8c\ʸ\W暹N|Vq-Nn|~g/n˺/~5=ӆ'SIKP70G;Hn›:Vr+/c=9FPOL2u.|KWK+xB=J/9j=9\}/079Z)!ykEnSg5^j'/KP#Up_d6 6%_?u&kɥ)ΰ;n~:vKKc 7kmchoko)I3Ό ֓qwE]#A\0u qJZS q j>ߛa mߠmE3P|Ad ZZVt.qډgĹ1mBL#-]Y,Ϟڃ{*r1)O==Lo~ ]"aVw)OdAm`k&؉kԽ0[B{W]57@|չE %i͚Y7czvZuUe)%PĀ7)?q渲nfY&A9J$.7jas2\Ō޳2zTQEVIp*ȹ{JS9IJKĸ,e1I,DxG%5UB ""IXB{4*j52l17 +ͥ%0l hAHu=huǧVƊߨɍq+cQ {Wm :UZ>y gh,Р5T֌Vρ[C%XZ!]کrXG\uDFս lj>7vQ}xAYe%VCWցeig EE$ "&8|։źKI#n[ЙEX?JQMPr1ʶ =23l9krk$W-r˂%b|'-`i:P7e 5˧LFEM\4 "Y*WiIz.$e&P2uҒ32Nd::e r-hhhKǒA94좬Cd>0 #" uљe х2SœE'%M$B==wn-Z>#-ڵRM;zBTGOh[%nE#_/멪YZUX36!h/։oN85W׵lh?'sg*W$b&Oh6_*76Ӟȃ=j{Q |=]Xc#G^5XWQ0dOvUyu/uDٜyQDՎ0}Y+X:fS"VZs #n)t?[d$SoWnYCaP?, +%-o]ECO}WW)j ,+ > Dc0i`B><0q}?}(<d{JLZI~ޘ0=88 {MtHVpJRt!MerbRk7r:,ULaކНʊآ,QgEhBk1gU93zWcso?`_f>\'ƤFj|xccmiGO7qS/oo99.l2[L&}$3R%;KE"h{D<}EƬr>G/Y?)'(Ò]׶=yxq!xH{|\lVnO_wsl6#ffZ SŃ@#`4dOM107*LEbh,{Q!u=oI}9OtIVN᳙zZ| 6Ֆ0վB_¢B\惐m) bJlIr" įM.*!%=zGٷ<6_fY뱓Q1GNC GtN1K|ueɌ63jN;l/:RUUQ] 3M IzؕBFEih07g6S.#9ق`s64Y+PB!-lʲ9jLu) Q!JhM:XW My;=>wnS9o\Ee9~v{B+>}UY'}OJT.q/a2nw01yr:kL4W{ܑ0T !%[YVʫJ~JprV7NkF_f 305.o adSr VHnw]n5'u7FMXDH7efД+gYcNиeL)M fۘqC?39/LXgӆv͓::b+Hr6W"tܕ͈aĢXg$SouLٙ¥_KGYë3i#iI,Zpc, (+}fud&i]iϲ}Rye3(*ڼdFkK#qo7W}BCǧy+>!IL DZ["A p&2%"ۙ=|epue`jS(M}7"M ϝn/hPrQjF}$G̟'m|}w"͵jbCSb^<4bEA˘6>i]9X8~_H>{nx]yɛn~Tj$ٱ߶wOs[^0s f1ƌDՏՈx#YM%\"أVR"q_KuS+R XK j/d4g3䷔'9R O"zT^ɛVJqQ[P &%!JKM̖P6YiBAMM՘d\_Y$7 f6zx;vI1m pL`@++':±ر)ںC#`@(OAtj!sїy^{uL _9mvЍu_l^z{jszgY[W>D@ޟmnGt=Ddr%yh_yNс2CRVmN+[ !|1yBGɭ:5˭uwXS1|ދ=(UJUy܄QȳIP|feټ_v&h ʲ\y0gX D(n!? v[`g; 'gJNHL&LFjd"&`7.30'Phllh?rBBj_̆plPқF͚,3>јYH!*zۇюm2wS7W\a\MWn7^ӑ?V\.E"0#'>q 3[)|΍QC.V:eϱCzי^.Wls8,H'P!íf{EN)I 4M=dRokZQ6%w9di`N3̜ Ը\P 3LSq7'˦\IӑD!&RSB$W|%{*1@7 i/8 bph23=0[ӶO 1[9 _FDn;ͯI >QC+._+lk/}Xe endstream endobj 303 0 obj 7669 endobj 304 0 obj << /Type /FontDescriptor /Ascent 833 /CapHeight 571 /Descent -300 /Flags 96 /FontBBox [-124 -274 800 1000] /FontName /QUAVUC+CourierNewPS-ItalicMT /ItalicAngle -6 /StemV 0 /AvgWidth 600 /MaxWidth 600 /XHeight 423 /FontFile2 302 0 R >> endobj 305 0 obj [ 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 0 0 0 0 0 0 0 600 600 0 600 0 0 0 600 600 0 0 0 600 ] endobj 28 0 obj << /Type /Font /Subtype /TrueType /BaseFont /QUAVUC+CourierNewPS-ItalicMT /FontDescriptor 304 0 R /Widths 305 0 R /FirstChar 32 /LastChar 121 /Encoding /MacRomanEncoding >> endobj 306 0 obj << /Length 307 0 R /Length1 22224 /Filter /FlateDecode >> stream x |T?~ι;d,3>dBDrI#V4 qes  [ bR.Jj+oET{Ŷ&99ܳ=9rfVZM,D=wkV31( \ze&HtW\,xK3yrprd4Xf{Xy/׎O|Wvg/)Yym'w6B(jzr #RA"^&E/L'\=|1yPW5S&fW_]ȴğh#00B?&Zxn@V郀.XPzXx.9(/Ea'YDQ39ЛxՓ2bc]j hj]"N!BAvO$[BxSx-R2u$^ų˅\l 8iA~^R4?9CZFU N,F[&T"T"0z#6#++ #&<ل:GXK"lG' ,(؏( 63ҕeTXlU ,!Vʌgs$, Kr@DP1<'$6_n&rj:PfS8<ܘ>v^!xl>{ w_ 8X /y=4GV/,{%M Gф[X^f//ax8Vg5dQ3"'qK&$m O$k~v 8YE!~dnըi;=J]=/ٚ|1b[V_BeaeyB0\ ?nt;@3_q- 3PmJ>F q"F?=nحd;!GCGn0JV#a-I0z=F[F.`tF0e`vhF0ڀf` mh30ڀ6C C ЁC70*Q J`TF%0* J`T# 00Fa`60#l`8 0p`80000㰁qq 8 lnPρr(r@9C@9C!ʡѡ3 aw0p;l0p 0H#a`$F #0F?0~F~`[[ V`lVzi؍݄R'py׀7>yڀ#7zRkȀXj&!Mj^YV"lG؅pA1Ro"!B]lWv)irXavy]%]a`-.Q8D7GqY\w ^F,2zWmTٹT48]2Lm-EC"OgsgPh|hz v#HӼk*["n4\u-M&2 b~g'sZ'HTD:5qECάMCAGsxԁjGjfbP4y5)(S4+)2iVHyvN!!u-$giw"Ԋi;EۣacƋB!T)G*5KT|[pJ7UjLq.Ao'-=%FƭYJsw+܍ЕrroI8{ \݉5ĺhSx86&4kݔk.nhooN[iߴU_j0Fjm5 F[+8ݷ6)S0ʎtL:z&s'c KtJŠ77Gg Gu"G;Sș 5Q35JB5~Ҽ ȯ6Wy#Yfի]MHklnkblDQTWSƞ)l60Nռ9fP׈L/+kU+@nXuM”/*5uHZ*;ˑZ|kmay{Fai~&+g&ltx2'h'bԘ3F9N,h|6^ۘacgHX #SprXx$s)tP'vr?yduht*NNI_C!O_7ȫz81kLԟO'G#01 L&9Kwq/~?} Mx_=i$ҧI]*>O&$R>bw"A~HCbtXF"rr+yW O hjGLNC?(!q/MbMhu%[yCorK/I BB b8V'iLt4W!^RGXI#e#"Djk%]s3k09U-Fh m3"Mo=A}#X#nv -c`r = Q!& 00݂[xVxSx[8*|,êz9DzoWKo!'HU:'Q\J.f6A`$*~ilÊ>G>?"_Q)n\vsN؏p+7*Æ^+O'?'>Ppӣ?kaedrr.vGEx ,pӉץW_+:~E#Q%-؇ SK0i!~8&]#mH?~%lBE ԬaߐOɗԄ 1$N@C8@ -2:0{b?8>q)g0Kо i .Puҟ)#cR3 Θ4qzesh/za8F"59T-am K#.^47&S?ib݄ښxuոʊcbe%EH8 }^;tmVYSM,dLs+(JEiy>*JQ:0[GߩgjԤp=/nj&w4E;‰cFzjHG"@77+ܜhf殦1tYڭ!53fhnL5O͈Ɋ!&ѦD TF(l^46);(S/.I.ƌ*dLBPf+ &Ȗ1Ûot%]1'xGsCM Gfr~-lnʛ7o'go; [6۱R\J[;V4 eUf|MpBN.|Y&9A\IP0 67kF юM9dz8'cv;m&,ֳݘ3#eT9,}N<_FOڣuO /++"N1D /( z,- _7ϤX2k>N65cd=FC$m+0_-:YLov{&&KDĺ,`g>w7]QPn Ûռ|bzݙsn͛Fuwr|B1ox6JdMmxe SE L%!_@F $]2qnTLg! s,|6:h?3NLN;lZy 7o־lhesŃ%Ѱ#y=Þ .Y-ى;0t"Ȗ)t:u&yIFԮ)amNJ v@7 ԎGLEOt'u1+.ej`K) L'1ӧ=KXxo\qlw;5Y3&4ml\jv>\GSКF~WWkr " ]-:""x;B,J R+5X.#nat`?O|MUEE4LBEVE1,nIM̝&ܸVA7E DGL/HbXAbRiڧ2u+ "jaJŗ!18{?2/C@Cc ŠX~46ᆟm@qovl=j\I4Ӛ0`cnT$j)ݲ8:hog,A~7ԫl+ūtFj@wz3 8}T$3oS77y 5!jZ.֨I&%K|RV&JJs@g 8= ans0ȵ_.l.Yvj=}rMn[@>'ƫ94SܯPR*,us3;LGN`suq2I;;;$0q:H$htxƋ 44%RLm8XZCk~ye_xzW_hYu˧R~}Apzu \_m|uirT!!iY 9 qjf SxB9aHݮgEh8Ra+LŽJs -qud 6X+g|3+RX]AFv2Ec/t8U^lKy|i믘;yi_N˩~KZB˧kl?ٽ\`;#U*$/*aSCXa b!^+ [+aheb嶌[^usT>0!"ܜ6̭ɠvgՁu3$$󷍖&ZzwEiAU qd=t;c$CDV%墅ܾ8tMKRHz'1HLx 09Cȉ*qܙ\5:d]ނdiW-G4}T" glL]a]Xޱɡh7q>a{”ui͟4FFpƱޓg9q$C$4t+/*.8saOpOC}JO W.d%}uYI1@:G)|":1RV7:t g<8,_ *0r fPd*2C4X>]͙'U8FdX"Ug3MUMb9C iQ6F zeZvO;~y[ګٻ;{Qf]^noVo׶2./UkװDMjv]SZ-&qu`SfeU<,(T%s8!LJEm*Ca65n1J7⸙G(zTw$@ŞҠ8@&hvqBǧVs.{0=I/G+aѤUnLJ`H2FY4H8)dAj}lAvf7w^\Rte*0*QDBjᯱ}8{,s>p.(pEPP~WZbW҇w\DK[Pn iy7ˢB_LK}s?A~Zě^hAp(hJm $W1denh80"J1$SD>bX߄Ʒ]@7Bf9LR궹sjqqY<Bj `szU#* L!&?xQog1vNpl4$x*AV Lx x).L22#l7 L ɜ!눐;[+,#]t526!2j䅑CdbgOÊIZt"@Q,[/q/cvT3o]W8=#_Nu]ضܪKE1~ΐs0woɫcD ojZ,D-|r2ץ%Y{[\4/PgG_)*Fo̿1_cZ ZgG[VkSeu7Y7?=cݑjUΗ-`+Q*RWJv?c$Q)f21=s ǭa8/[ԃuxCTiYU). ;x[Ό(kT͠D1I*.NtƎdp 9D>#;w2(s2.7.;]uְN3},(i~  b;Dm&8:5%|tbfDBq s5ߊnqAE\;97u9LJkGOIu 7N3&\s{L}z~sfǧgNZpOz^Y_X{/ɯV,u@_C/ $hZ)VJmj4֭"Sە W\y -5Y g3ud >,`y.#nͰ*>RӍsvb3þajxGjS_Bf/@d>A1)깦sUuc烞G8^|R6[-GJaj1o@۲lή)$p20\ Ŝ fA¶663 Lu -ݟ:w._LXx~"NRֱNYW`c؂YhZwń6WE"S햾@, d9@d9#<͍aD D$'Q˗?/-kko!c|;J;,iuQ+KZxv4jm0Q_E2Q%`>Wp9YKl Xd#AH00?cH1<F﹩1p4l;ͨf;p!ڌlvr# $,@Jiw Z/eGSh)|~j$i_bMOar%hʑrL/C:>hYҢۊ |:8Zl,[=^9-K=6l9r 9X x_(_Ypr]iɥ$בG;Vv:s =ہGpyQX1v̀xl@6+2%֎eALCm޸%8+N]9wVbK#|C[[|*pch+f1X gaBe:YK{; /d,-`n1-ؠXrəw1Xu"{P܂Dq_h| NzV!0١Ӟ|Gm+[ыZPt~s4:6sjƅwsf7OJOZPUT[Ѝ)jϐzrcCĕ>3f\ GΗ\#NNʪn[Y)'A,BRR|-f;|S'9JP\n=r2 CH_fB2lN i"0Mme222b['\dr]Ԙ2X{oJJ ][wŧ_y-v}޿QVԬ;>Ք{vB>Y;µ{˫WwDI'Srք \y[e[Jk;\x\{S?;.wVm%θuh3LtT%:ꭠ}`_"} 4B*;gF].ܴxbS:ǟB,Z [+_?u*ï.r֧QC{'kȰ}R'GsmvcS!^ >9'H:y@pNe;7XsZNXi={faMӦF>à0F|I~7aQѳ֠m*SzH\Bj^G$ ..8tÂ/ND_Spfѩ0U32WŲx.lܤK~+ +=4sVaoxɳbuK;R{_ ]*~Et,U?/di2ӴLA]|D|TzX~XyؤDcR\*bA&ƤI,:~l6)Aif\JRJ<8p>B+`iިW38[B7m?3՟MBuQs.YsnN S[qዛ윤פ?r1`S94j54z)_KxeXCzpEa5Ȭobcp_V``F}1x\N"D[8,k qS6fS)jtUWIiDå6RZQچK?,K`N>㡤DD%ˏp IYST"S_X+AHErsP2v=0Ap+IH1F;`W8ǣŨZ7"#Nj+,XR.,NŁ?g6,ߧl!Ñtl]\s4x#s4ZlXVă=Z.blow:*l^剋<+vK23u-|mׇ1R+iӣ/􈯱aHu8d-v` crT:*lu>EnQq)lmtzQ2B;W駮p,̾/N}iwa snGSo|vO4۩9z|[RW`'c'dMbPgˊg7 ӭӳrrRG6+zf>:Km6{a(*hg;NK9ig)+<ҹ*ƕZx9ݷP' Q:=~,,eKnK7biۖ35:ze'yb;r!B1zUmtLZ# vr[KT%dawY`eaƵV/UзdWJsE5޵ֻvDqWnf&xؿ C4'#BOvfdPv:ܛSыp㨆mPygf"#N)zM]{Τ9b7|1`gX^ևe5胮_*7s^|=e=/Z[p=?dQzASѥK66o˿@-j[Yg["S((.D%@5ɩFbK~~~T)\m}5e==칿lOPُcd_īGqoh{M» Yύ1K붍ch:&/R頎j1$ZpfJ\@A~5,W919JRziQHKd-+|'11g%YV + .,:z&tf/ qG3{= x@ n#y=˭t|~K|9o"edzRͥ_y8z.>#+]w.0?Q3ˋ3^$H C]VtקC5qLRDx2o~P`jҶ`:FoÌM;nyQd ,^|:3L o`/ALZgq[x2i^Ow _6es`QW n@d3+>PTI.홞zuoKR_: ї:O|͙_S<;<%yrz=o%Bc8~ T7>vî1ɸNspr04\ M'\ʃ(p;)Y7Wk}|Ҹ)t9|7ҠXt85XNeճO0sja8,4ERN\ryb1xQsP'O ʆXv̹B(JjDK6 ^ɭ4%%bThŖq>zwpqۏu83Wp]XgEffhL̄w&8&PH'ja7M-aE EYD.h2&ϼ#3݊MK޵6X|Ohj©o=30fL4\rN֫;8ė!w0:c B"IθF)Ԥ/)՚ε'~Vlxx"j~|ք'UNhZay8VC =VŀPȡ^ȥB;.+}]1ÐՙK1U>V.ރ,TCx}---&.[r3 ߻^ D*YF8l#M)^qՊWOYy8- endstream endobj 307 0 obj 16082 endobj 308 0 obj << /Type /FontDescriptor /Ascent 905 /CapHeight 716 /Descent -212 /Flags 32 /FontBBox [-628 -376 2000 1011] /FontName /HREELT+Arial-BoldMT /ItalicAngle 0 /StemV 0 /AvgWidth 479 /Leading 33 /MaxWidth 2000 /XHeight 519 /FontFile2 306 0 R >> endobj 309 0 obj [ 278 0 474 0 0 0 0 0 333 333 0 0 0 333 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 722 722 0 611 778 722 278 556 0 611 833 722 0 667 0 0 667 611 722 0 944 0 0 0 0 0 0 0 0 0 556 611 556 611 556 333 611 611 278 0 556 278 889 611 611 611 0 389 556 333 611 556 778 0 556 500 ] endobj 17 0 obj << /Type /Font /Subtype /TrueType /BaseFont /HREELT+Arial-BoldMT /FontDescriptor 308 0 R /Widths 309 0 R /FirstChar 32 /LastChar 122 /Encoding /MacRomanEncoding >> endobj 310 0 obj (Mac OS X 10.6.8 Quartz PDFContext) endobj 311 0 obj (Daily, Jeff A) endobj 312 0 obj (Microsoft PowerPoint) endobj 313 0 obj (D:20111206193328Z00'00') endobj 314 0 obj () endobj 315 0 obj [ ] endobj 1 0 obj << /Author 311 0 R /Producer 310 0 R /Creator 312 0 R /CreationDate 313 0 R /ModDate 313 0 R /Keywords 314 0 R /AAPL:Keywords 315 0 R >> endobj xref 0 316 0000000000 65535 f 0002454143 00000 n 0000040280 00000 n 0002367661 00000 n 0000000022 00000 n 0000040259 00000 n 0000040384 00000 n 0002340039 00000 n 0000771840 00000 n 0001664442 00000 n 0000047353 00000 n 0000623449 00000 n 0001667541 00000 n 0002000956 00000 n 0002002413 00000 n 0002307897 00000 n 0002342818 00000 n 0002453753 00000 n 0002424793 00000 n 0000000000 00000 n 0002428397 00000 n 0000690188 00000 n 0000694372 00000 n 0001664701 00000 n 0001667283 00000 n 0000685879 00000 n 0000689930 00000 n 0002381307 00000 n 0002436819 00000 n 0002387641 00000 n 0002397446 00000 n 0000695104 00000 n 0000771818 00000 n 0000623709 00000 n 0000683258 00000 n 0000683754 00000 n 0000683972 00000 n 0000683280 00000 n 0000683498 00000 n 0002001941 00000 n 0002002157 00000 n 0000623472 00000 n 0000623690 00000 n 0001667304 00000 n 0001667522 00000 n 0000046881 00000 n 0000047097 00000 n 0000683517 00000 n 0000683735 00000 n 0002308392 00000 n 0002308610 00000 n 0002308629 00000 n 0002308847 00000 n 0002309338 00000 n 0002309556 00000 n 0002002176 00000 n 0002002394 00000 n 0002309103 00000 n 0002309319 00000 n 0000685172 00000 n 0000685388 00000 n 0000684935 00000 n 0000685153 00000 n 0002307920 00000 n 0002308136 00000 n 0002000979 00000 n 0002001195 00000 n 0000684226 00000 n 0000684444 00000 n 0000683991 00000 n 0000684207 00000 n 0000694630 00000 n 0000694848 00000 n 0000694393 00000 n 0000694611 00000 n 0000684463 00000 n 0000684681 00000 n 0002308866 00000 n 0002309084 00000 n 0000684700 00000 n 0000684916 00000 n 0000689951 00000 n 0000690169 00000 n 0000047116 00000 n 0000047334 00000 n 0000685407 00000 n 0000685623 00000 n 0001664464 00000 n 0001664682 00000 n 0000694867 00000 n 0000695085 00000 n 0002308155 00000 n 0002308373 00000 n 0000685642 00000 n 0000685860 00000 n 0002309575 00000 n 0002310282 00000 n 0002001214 00000 n 0002001921 00000 n 0000046402 00000 n 0000043042 00000 n 0000041922 00000 n 0000045922 00000 n 0000045442 00000 n 0000046721 00000 n 0000042882 00000 n 0000043362 00000 n 0000043522 00000 n 0000043682 00000 n 0000044802 00000 n 0000043842 00000 n 0000045282 00000 n 0000041762 00000 n 0000042722 00000 n 0000044642 00000 n 0000045762 00000 n 0000043202 00000 n 0000046082 00000 n 0000044002 00000 n 0000042402 00000 n 0000044962 00000 n 0000044482 00000 n 0000046242 00000 n 0000045602 00000 n 0000042082 00000 n 0000042242 00000 n 0000044322 00000 n 0000045122 00000 n 0000046561 00000 n 0000042562 00000 n 0000044162 00000 n 0000041602 00000 n 0002345111 00000 n 0002347804 00000 n 0002354586 00000 n 0002358883 00000 n 0002363151 00000 n 0002348346 00000 n 0002349955 00000 n 0002346720 00000 n 0002355878 00000 n 0002352331 00000 n 0002354044 00000 n 0002344465 00000 n 0002355232 00000 n 0002367015 00000 n 0002364760 00000 n 0002364218 00000 n 0002346178 00000 n 0002343398 00000 n 0002352977 00000 n 0002351143 00000 n 0002347262 00000 n 0002365948 00000 n 0002357170 00000 n 0002349413 00000 n 0002356524 00000 n 0002362084 00000 n 0002342856 00000 n 0002365302 00000 n 0002350601 00000 n 0002359950 00000 n 0002351685 00000 n 0002361017 00000 n 0002358237 00000 n 0002310302 00000 n 0002310633 00000 n 0002328820 00000 n 0002329176 00000 n 0002322609 00000 n 0002322935 00000 n 0002339137 00000 n 0002317309 00000 n 0002321850 00000 n 0002337576 00000 n 0002337906 00000 n 0002328116 00000 n 0002328445 00000 n 0002311030 00000 n 0002311357 00000 n 0002325865 00000 n 0002326200 00000 n 0002330254 00000 n 0002330590 00000 n 0002330611 00000 n 0002330968 00000 n 0002322956 00000 n 0002323309 00000 n 0002326597 00000 n 0002326929 00000 n 0002325513 00000 n 0002325844 00000 n 0002323705 00000 n 0002324054 00000 n 0002323330 00000 n 0002323684 00000 n 0002333541 00000 n 0002335927 00000 n 0002321872 00000 n 0002322229 00000 n 0002332041 00000 n 0002333519 00000 n 0002322250 00000 n 0002322588 00000 n 0002325155 00000 n 0002325492 00000 n 0002316933 00000 n 0002317288 00000 n 0002311378 00000 n 0002316550 00000 n 0002337194 00000 n 0002337555 00000 n 0002324075 00000 n 0002325134 00000 n 0002329901 00000 n 0002330233 00000 n 0002331349 00000 n 0002331674 00000 n 0002326950 00000 n 0002328095 00000 n 0002331695 00000 n 0002332020 00000 n 0002328466 00000 n 0002328799 00000 n 0002316572 00000 n 0002316912 00000 n 0002326221 00000 n 0002326576 00000 n 0002329548 00000 n 0002329880 00000 n 0002337927 00000 n 0002338253 00000 n 0002310654 00000 n 0002311009 00000 n 0002330989 00000 n 0002331328 00000 n 0002329197 00000 n 0002329527 00000 n 0002335949 00000 n 0002337172 00000 n 0002338274 00000 n 0002339116 00000 n 0002339176 00000 n 0002340018 00000 n 0002340076 00000 n 0002342796 00000 n 0002343377 00000 n 0002344444 00000 n 0002345090 00000 n 0002346157 00000 n 0002346699 00000 n 0002347241 00000 n 0002347783 00000 n 0002348325 00000 n 0002349392 00000 n 0002349934 00000 n 0002350580 00000 n 0002351122 00000 n 0002351664 00000 n 0002352310 00000 n 0002352956 00000 n 0002354023 00000 n 0002354565 00000 n 0002355211 00000 n 0002355857 00000 n 0002356503 00000 n 0002357149 00000 n 0002358216 00000 n 0002358862 00000 n 0002359929 00000 n 0002360996 00000 n 0002362063 00000 n 0002363130 00000 n 0002364197 00000 n 0002364739 00000 n 0002365281 00000 n 0002365927 00000 n 0002366994 00000 n 0002367640 00000 n 0002367744 00000 n 0002367809 00000 n 0002380779 00000 n 0002380802 00000 n 0002381046 00000 n 0002381489 00000 n 0002387150 00000 n 0002387172 00000 n 0002387430 00000 n 0002387823 00000 n 0002396956 00000 n 0002396978 00000 n 0002397227 00000 n 0002397633 00000 n 0002423977 00000 n 0002424000 00000 n 0002424251 00000 n 0002424968 00000 n 0002427784 00000 n 0002427806 00000 n 0002428047 00000 n 0002428076 00000 n 0002428376 00000 n 0002428564 00000 n 0002436326 00000 n 0002436348 00000 n 0002436600 00000 n 0002437008 00000 n 0002453183 00000 n 0002453206 00000 n 0002453462 00000 n 0002453933 00000 n 0002453986 00000 n 0002454019 00000 n 0002454059 00000 n 0002454102 00000 n 0002454122 00000 n trailer << /Size 316 /Root 279 0 R /Info 1 0 R /ID [ <3be3450078ca6f558627d383d7cd94fc> <3be3450078ca6f558627d383d7cd94fc> ] >> startxref 2454295 %%EOF ga-5-3/python/docs/sc_11/laplace.dat0000640005473000001440000000122011665255050016046 0ustar d3n000users#Cores Solver Time (s) Wall Time (s) Solver Time (s) Wall Time (s) 4 560.03 564 ? ? 8 322.81 333 ? ? 16 180.35 191 ? ? 32 86.71 97 ? ? 64 44.43 56 ? ? 128 28.67 38 ? ? 256 12.15 34 ? ? 512 7.38 43 567.46 602 1024 5.31 72 299.48 366 2048 4.84 131 150.36 270 ga-5-3/python/docs/sc_11/post174-daily.tex0000640005473000001440000002267111667476202017041 0ustar d3n000users\documentclass{sig-alt-release2} \usepackage{graphics} \begin{document} % --- Author Metadata here --- \conferenceinfo{SC'11 Companion,} {November 12--18, 2011, Seattle, Washington, USA.} \CopyrightYear{2011} \crdata{978-1-4503-1030-7/11/11} \clubpenalty=10000 \widowpenalty = 10000 % --- End of Author Metadata --- \title{Poster: Automatic Parallelization of Numerical Python Applications Using the Global Arrays Toolkit} \auwidth=1.12\textwidth \numberofauthors{2} \author{ % 1st. author \alignauthor Jeff Daily\\ \affaddr{Pacific Northwest National Laboratory}\\ \affaddr{P.O. Box 999}\\ \affaddr{MS K7-90}\\ \affaddr{Richland, WA}\\ \email{jeff.daily@pnnl.gov} % 2nd. author \alignauthor Robert R. Lewis\\ \affaddr{School of Electrical Engineering and Computer Science}\\ \affaddr{Washington State University Tricities}\\ \affaddr{2710 Crimson Way}\\ \affaddr{Richland, WA 99354}\\ \email{bobl@tricity.wsu.edu} %\and % use '\and' if you need 'another row' of author names } \maketitle % citations aren't typically found in an abstract, right? \begin{abstract} Global Arrays is a software system from Pacific Northwest National Laboratory that enables an efficient, portable, and parallel shared-memory programming interface to manipulate distributed dense arrays. The NumPy module is the de facto standard for numerical calculation in the Python programming language, a language whose use is growing rapidly in the scientific and engineering communities. NumPy provides a powerful N-dimensional array class as well as other scientific computing capabilities. However, like the majority of the core Python modules, NumPy is inherently serial. Using a combination of Global Arrays and NumPy, we have reimplemented NumPy as a distributed drop-in replacement called Global Arrays in NumPy (GAiN). Serial NumPy applications can become parallel, scalable GAiN applications with only minor source code changes. Scalability studies of several different GAiN applications will be presented showing the utility of developing serial NumPy codes which can later run on more capable clusters or supercomputers. \end{abstract} \category{D.1.3}{Programming Techniques}{Concurrent Programming} \category{D.2.2}{Software Engineering}{Design Tools and Techniques}[software libraries, user interfaces] %\category{D.2.8}{Software Engineering}{Metrics} \category{E.1}{Data Structures}{arrays, distributed data structures} \terms{Design, Performance} \keywords{Global Arrays, PGAS, Python, NumPy, GAiN} \section{Introduction} Scientific computing with Python\cite{Ros90} typically involves using the NumPy\cite{Oli06} package. NumPy provides an efficient multi-dimensional array and array processing routines. Unfortunately, like many Python programs, NumPy is serial in nature. This limits both the size of the arrays as well as the speed with which the arrays can be processed to the available resources on a single compute node. %For the most part, NumPy programs are written, debugged, and run in %singly-threaded environments. This may be sufficient for certain problem %domains. However, NumPy may also be used to develop prototype software. Such %software is usually ported to a different, compiled language and/or explicitly %parallelized to take advantage of additional hardware. The Global Arrays (GA) toolkit \cite{Nie06,Pnl11} is a software system from Pacific Northwest National Laboratory (PNNL) that enables an efficient, portable, and parallel shared-memory programming interface to manipulate physically distributed dense multidimensional arrays, without the need for explicit cooperation by other processes. GA compliments the message-passing programming model and is compatible with MPI\cite{Gro99a} so that the programmer can use both in the same program. GA has supported Python bindings since version 5.0. GA has been leveraged in several large computational chemistry codes and has been shown to scale well \cite{Apr09}. Global Arrays in NumPy (GAiN)\cite{Dai09,Dai11} is an extension to Python that provides parallel, distributed processing of arrays. It implements a subset of the NumPy API so that for some programs, by simply importing GAiN in place of NumPy they may be able to take advantage of parallel processing transparently. Other programs may require slight modification. This allows those programs to take advantage of the additional cores available on single compute nodes and to increase problem sizes by distributing across clustered environments. \section{Approach} The success of GAiN hinges on its ability to enable distributed array processing in NumPy, to transparently enable this processing, and most importantly to efficiently accomplish those goals. Performance Python \cite{Ram08} ``perfpy'' was conceived to demonstrate the ways Python can be used for high performance computing. It evaluates NumPy and the relative performance of various Python extensions to NumPy. It represents an important benchmark by which any additional high performance numerical Python module should be measured. The original program \texttt{laplace.py} was modified by importing \texttt{ga.gain} in place of \texttt{numpy} and then stripping the additional test codes so that only the \texttt{gain} (\texttt{numpy}) test remained. %The latter modification makes no impact on the timing results since all tests %are run independently but was necessary because \texttt{gain} is run on %multiple processes while the original test suite is serial. The program was run on the chinook supercomputer at the Environmental Molecular Sciences Laboratory (EMSL), part of Pacific Northwest National Laboratory (PNNL). Chinook consists of 2310 HP DL185 nodes with dual socket, 64-bit, Quad-core AMD 2.2 GHz Opteron processors. Each node has 32 Gbytes of memory for 4 Gbytes per core and a local scratch disk. %Fast communication between the nodes is obtained using a single rail %Infiniband interconnect from Voltaire (switches) and Melanox (NICs). The %system runs a version of Linux based on Red Hat Linux Advanced Server. GAiN utilized up to 512 nodes of the cluster, using 4 cores per node. We noted during initial evaluations of \texttt{laplace.py} that the wall clock time did not compare favorably with the timer for the solver. Figure \ref{fig:laplace} quantifies this behavior using a strong scaling test of the two timers. Although the solver is shown to scale up to 2K cores on a modest problem size, the overall time to run the application exhibits inverse scaling. Previous research \cite{Scu11,Man11} confirms our results and indicates the problem is due to Python's excessive access of the file system during the import of modules. In a serial environment, this is reasonable behavior. For a shared filesystem on a cluster, all Python interpreters are thrashing the on same module files. \begin{figure} \centering \includegraphics[width=0.48\textwidth]{laplace.eps} %\epsfig{file=laplace,width=0.48\textwidth} \caption{laplace.py Strong Scaling for 10K$^2$ Matrix} \label{fig:laplace} \end{figure} Our solution to the problem is unique to clusters where the compute nodes have local scratch disks such as EMSL's chinook system. The Python interpreter and its associated modules and shared libraries are bundled and broadcast from node zero to the remaining nodes, the master process on each node unbundles the files, and the Python interpreter is run locally from each compute node. This limits disk access to the local scratch disks where only eight processes compete for the local filesystem. Our tests execute the simple Python program ``\texttt{import numpy}''. Figure \ref{fig:python} compares the cost of running a global-filesystem shared Python interpreter, the individual cost of the broadcast, the individual cost of running a node-local Python interpreter, as well as the cumulative cost of the proposed solution. The proposed solution performs better than the global filesystem case. \begin{figure} \centering \includegraphics[width=0.48\textwidth]{python.eps} %\epsfig{file=python,width=0.48\textwidth} \caption{`import numpy' Strong Scaling} \label{fig:python} \end{figure} \section{Conclusion} GAiN succeeds in its ability to grow problem sizes beyond a single compute node. The performance of the perfpy code and the ability to drop-in GAiN without modification of the core implementation demonstrates its utility. However, the scalability of the Python interpreter on a cluster using a shared filesystem limits the utility of Python. Our proposed solution, as well as the related solutions\cite{Scu11,Man11}, alleviate the cost of using Python at scale until a more robust solution can be found. \section{Acknowledgments} A portion of the research was performed using the Molecular Science Computing (MSC) capability at EMSL, a national scientific user facility sponsored by the Department of Energy's Office of Biological and Environmental Research and located at Pacific Northwest National Laboratory (PNNL). %PNNL is operated by %Battelle for the U.S. Department of Energy under contract DE-AC05-76RL01830. % % The following two commands are all you need in the % initial runs of your .tex file to % produce the bibliography for the citations in your paper. \bibliographystyle{abbrv} \bibliography{post174-daily} % You must have a proper ".bib" file % and remember to run: % latex bibtex latex latex % to resolve all references % % ACM needs 'a single self-contained file'! % % That's all folks! \end{document} ga-5-3/python/docs/sc_11/Daily_SC11_Poster_GAiN.ppt0000640005473000001440001336100011667476202020502 0ustar d3n000usersࡱ> .     z}  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~RdO)VMPictures'PowerPoint Document( .SummaryInformation({       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~n~a]*fߠfNVšXPNG  IHDRc7XBiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx pHYsgR IDATx oϲ\ * ^(T(E &hDx<&>D"5 ") }-˱ovz{ٙO^d 5UF<@@@@@W8     %@0@@@@H$ s @@@@@`,     I@     X@@@@@ c-@@@@@     @&[     cy@@@@@$M2@@@@@     I dn    @@@@@ @06 @@@@ ;    $A`l     @0w@@@@H$ s @@@@@`,     I@     X@@@@@ c-@@@@@     @&[     cy@@@@@$M2@@@@@*@ @Y _^tiӦRn"XA&jf>ѣGe̙tRٽ{ݻW<(ח&Mo3J]|[hzA-@%`#V%# E]$q_y>|xL, G5iѢE?A̙#q=%\"O<ϒ'Oy_^f6 KC.IߒD맣 }F@ X G>! ) ^o6+ծϟ?_z)}+ViM&m۶g}XsQz {j@E`lD@(p1߿|jrڵkƍ{O4Q~+?<) ز  @ z뭲pRw}'_ڟюÇo͆:ujPx2B@` YYY] 6zYym߾]6myn_Bx :/<39ee*O &@06F  e,0zhhVs4k֬H+Wʃ>(~sZ0fyǤqƮ),w;CS]t)RF ҳ%@@ #fΜO={ョ細cǎ2qDݻ[O>` e{ܗ`Сɽ!wC@K5cy@@losmW]3QB_YmѢE8Q~x 7fƖy@ eܸq_9pԨQCj֬i9o߾@L0AN:zg8ҩНuCwvvtӽ{wׯq;,Ōn;x5{?[ʞ={,FYܮ];cAљ&MUVɮ]Zβf\ObU O?zg"е^Y?rL6\^N:bf[^Ν;nݺ^֭[K˖-eƍvY(~軫Xzu);}w|Ŋevu _l/D7>}ݻW9я~$7|my%]|뭷dÆ ~Wyhڴp[;^mD#;~TTI `>}Zf̘!Ǐ-[Xj;ud 8'Oe˖ҥKDժU5j|AKk~Gf:wWYA@D@@@BwȟW^y%fBܡ=h+r[Zfs̉vՋi~۾V\H1"x Dw*UD}ܹsÛ6A5\4xw]6S!c9׭[W_?zh\mU2Am_r%|ˊ +V{_:4k]5ZnƱc\߿Uw t143 Aɸ>ge\!h" t ͵w&iEx?Qn0,ac}37g NXWYƵÆ kdw^=$jVVl^ # T ~ ?/ X j05- 裏%J3d۶mv`:mP =oϧ~:LԟlpQۈXK |AvU?pkCbO Y] /غ<y?'2sl?CA.|Bi?w+KNeΦzo @c> @ ?ͯxfn 2]-־G|нk׮4閪a4 =_7 >(jL؛>y::&H1UA!cwgϞ'x"h[dk{袋b"\#ǃ1 l\gݦ[+XI~{nJkf;]ߟuw+Kf~gS}|# x @qcP,nAPu:6T3Z- ={nOT5k- ,Y}YPz֯JG;o ԯ֑_x=Bv曮Wڣ}>ZA-ZpW5?O]As=梦 z5T(q[JD )O}[n3 b+jK{j%,Z;zDN&ߟuw+Kf|gS}|# @?W n4p"5Z?ZW Ȕ)S *O"] h3<#fE7B 3xfmY^| u6\/ӵ7s}R1_B@NZfKt#77W^uk#68Iͅ"~bή,.ռcKyov͠osf6oZsí v*%LnfͬwG |t nU~}洵 W: /9җ^z4s1S+buB}okðPYfkmg',لnyr bzM6cQnpf.b=n#]3YgJfگw6ds/@ 0@@u#?mbfBF3ׇ:~23ʤntg>G>}:0lȵs̀k]$L7kq;/_nd~vIe{-iժgulKw/#NqWo>{ٗ_~9e?^B۷kP:ٳtnS5#Xa(K7䓠Ҝx2߻d|%߭D-IOYv@ +2JQ@Ǡ~X7Z3fLP $h5 ݷosE ș\ u] c*W݂6W :M4q\m]r% f^ю#G:Ӝ9%s+ w;4zLT%.ӵ4K+W]uUP׺vT@xtpԢm۶ _xe Y瞷oxldtz.kYhkH{:}d%H;np  @ɿf?9@)-۷JSO=e}U\'ֳ 21g繞ׯV'rAE+^WCK vsbt=*4VbdWu] ƅ.]usc+[B07r+.2?sk*Z[oumfJ}3PX&uYnb5P̋Zn-ϸe]ŏ)L=zOR \pR ^3]On͛݊\WM\υ ͍ EI摬s>Bf~fSV?KMܹ/ @z Mq Q̝]y17s3/kEKnuꫯ:e7nX:ud_|ExַtI 6nڷ.]j0U߿ZnGkF*U PF;4kGLȢR5~k?uCzi䡁o1T ]Tc|u|YSV;3uT1f(~j,3c]isRA?0jԴ"cuo#}+eΎt(3g(KVϺxJ}Wl~. @f ojCf4 i.`, ,smXEr'O ~\jrE-mE@i(j_g?U?1xĪVCRL5^{ԬYڤ,jrJMBԃX暪RNP5_j_o6OAAw\՚zvֆkxOk&w>}סg˖-hܭ̫N\7ص8r/L"^u,*:/l$t_}@S`lzFʽx y׬ W"_X _/]oonZhr :SmFh<_D^:/Kԥ ƒ^K <ȵ(о?Q5esy.CccDiAq5iHn޼y\mh%{쉻 s٘u˱ظ^kdxm/.u~}fߣҥfZVc}@RWe Rwl t-XX]Pv5{Śk}EsP`bnz?s"D 5ǡ_s _7VY_:xh>WۑȻ55]ϴ:te B׆~ +͟~w yGY,w6]ײ %@06Ƌ"^@#M|7=-4uFeku&nv$:3vn)oiAf\)@f~tճzy"WMΝ;Kv{Ue˖YY-8kjW?s9rh={-Zn&2[x'~Cn?:K^uYF3g}6;Bբܺuk%9YV]2>ֵؗΦZZf P~X=O#m# &;:O7 yL4okI0'2~XJ# 6m4i+mΜ9\<^AxUw{- d,Q^xHޓ_׮ {֚ud~_Çږ-[yxMt۠~.Gַxk?e%Nx;ߖ ̌1 @Яv}];W^?X@"u; X"+pQ`l 6,lɓ'[kץf @ }ƦXS@ :njNא:+nݼG+Y^u ,uօs#h&Y^ }~BϢ3(׬Y#ƍDX :ZʮЯک:% ҹיFO~luWDvk@gu=V3ؽf{= zlwodW4.~zKe?h+݊VvykٲpBsGy@(ϲzKgcRmZ6@ Ʀ @ xyC"?5ȡA!5>ڡkeU\Ynʒe5Ogn]t&o&:]O>v><g?5\c]v6s{׋j#x\1 1^^ShzX^f:jCP5/aڎ,OӃ^s&L^Ǘ_~)Gv=U_B,~_$7xn{g]>}$ $sp;@  a ,5R7V7ol~&kСCĉ6L},H6n:}z.dKұcGkFhxԨQV[nV@P8ۡb+W8u饗E]i9k,+ݡCѵjX2Sל>|}2~nDKij,Β>u׌TjCgj1^M[e4,Y8Y7?nYx{ ^jO?{>Xr[{Xo!CxM{g]2? T~_O#T ^4a, ɜ=UnnF Mzk}\ׇډ G S@6r;9cP+rנ+=̙E$̱1իcz@`eֿDϛKY}5=ͯy^g1l׋7a.m^"ln3&fW*k~u]E{.3P4cj IDATԮי3g/ѓeiKֿ[~%Z_Φ& $*2@H] zvX& ute]f:5;Վn 5ʓi볚;Qկ_lK׈u;:Ӵ$3u$f9Yc߶m[k{GX%/"یLc] ID-ZζرcG<ՊU痿U^3xiTgKI&^\[;[oy.N{g]2?0R}Mg[ Pv93 @9hҤMZ?X[`_vknUTq;]Lzu"Mu|}YR>}tiذa#8.~-^P_"#FHbM '#P̙3էzZkM^y3yG5p7o~ۘi 6]?ώY?hĉ㏋Ze"xKgviQ5״ )%@06 #pu׉md׮]@yLZ5#?Oe͚5V*vuNNj'8L2 4Wfh:WH}ѢE<.nꥳ#5kִ麡v2d7|]qI{lݬKJ5{ugvLk>Cָ`kX^i {u/e#7sYTѠ}ߗdϩtg ]oܸ\y֚9z b,x~O~~%3;tk:yW@0t]=@@xv=ۻw5[CgI&`… _]5X'nvgZ 'Y_^7fi0tϞ=VMgiL֮]ҸunvZk) ֫Wzu9+]e|"Ϣ=EK Y]xKgv3tYřD(q @ prx0:kQ\nҥKE@" O? k_g&|ёKxp PI[ &}T-A@2\ָ[&CYL n̡C5m50KJ<3SE~9rZv SNnŔ!P"q1 @ M{  P~tiaÆevqnŔ!S@?N:%Ԉ;wIWϞ=ëC7|cC ȰM6,?(5R!@ B@@ tϚxgȦMdznO%i:ڍ5ֻun]gm۶KuZͺ.qurݮZ&Ms .>@TX7ԗј{ZF UxGG e@?s= _vnVgI27+te+c˓!] Px~@@,49tM7T#G[n|"'^z%Q7aׄɸ@ MƦ@M@< |:Ȍ3D@\nz2f^6xx_㕢 @: fl:}EH;G*U,"a{ Ʈ]Uy2b͓VZBɑ~Z^I&ynv-dV^zH#o4 P[@ʷ={d_[W\dqƢ@/17_ʺuDG%ǭغ^;u$k318 cb$    -}?    ش&:    .@06G#    @ZMa     c}?    ش&:    .@06G#    @ZMa     c}?    ش&:    .@06G#    @ZMa     c}?    ش&:    .@06G#    @ZMa     c}?    @e vrѢExbYtرcrJV;:G/,ƍeR~}iӦ|rWKVVViE?LTF@@@@4G Ǐ[^{5z@@ &ӟf͚رc;wz0`7Nrrr<넟I#    @c0۶m\wul2UJ-d߾}W_ݻ̘1sVXoF J^^lڴV^dĉRzuGydƏ6#A@@@@`8/UT?ϲ~Ybl߾ӷo_Yfɣ>j2d ,YbKLQFaeg϶+o#2G     `fln#F_|Ѫ)SVu; $ouRJ֬YA~_Nj3gΔڵkWo :TN>m͛'\rIzZG7@@@@`fld|Vѣ=Zggΐ ?VZeb\nX=7x`+i=t/Ï6C    O`lnkhfj˖-eQ:K/ Hv /3f={n#GǏwˏ6훒@@@@@ ޲k:v+k>LnGE>}iD6m?y;HU?,r @@@@@ccН8qB/_nݻ.NB#fwn[rքm:n@@@@@J,P-dx6lSNYOYreҥ`P40yf+ کS'iѢ166mj%7nl^nքm:n@@@@@J,@065kyyyRB),,6z饗d˖-yMTVMzy%77qN3{u5iđ4l>m6; ?tܠ2w7RVVFo\P @@@@S /:Q]v5jժ%kV͛g'9"̙3GY/@ÇgFW&<?h3Hhq5+u@@@@Hq1(??߮Qzu@lz[nrZ3d/^lmڥlݺUt}Ye˖v:4􂜜:]@g熖CMfhРAiӦIڵ-R=     Pcc Ax0vVT//)O?TRnA7z衇r]OVgu]2k,Nx{VGRJ3}$Ѧfd@@@@@;Mh |-{yX-YG?񏚵ٳg[lЯ{D f    '@06SWK}ʿon:-b51p@\Uo>y'3{.6lDn*'hӾ) @@@@(@֣QV2]u׮]RQWǎ+_%'O 0@~GJ*YϗlٳO>zj\[X?tt&/š~;m&͛7-[ȬYZk֬ׄҥK|W^rUWYiV'ؾ}{贼+2|p;{$#?m4kSupq_    cٮ:^yh'O,[;^z!r^h^~Kv@@@@Re ʲfmV6o,~laaZjɯ~+?)5r (]7١o~푗hF>L4    Pf̌-. gɊ+5N4i";w7J;wʲeˬ 6m*-[f͚%ڌm:nC>$    @ -!c#E#   d@ g@@@@@R]`lC@@@@ C     @ M     c3by@@@@Hu>B@@@@2B`lF #    .P!;HHgݻw˂0,F @^_9}FZЩci֬9 @@@@K`lzM3VaEzX"ٲoA3{qEd(@@@@Se su h`5OV7>Z70ļ*͞"   x +$GYw|M#   TP*IXxj&ed@@@@2K`lf'ObCevlH    @ ܱRPmVl̎ I@@@L9I̎M    @ZMa,Ȭs؎ǡ,?@@@@2@`l " ϊ =M Y-O e    c|~j T9+b#Dg;#<    @ TH~mB~&m5êQ{}R1j3JkJH"   t=y-Jވqs}vrP}R+@I6 @@@@ Mx۫R 2|G@@@@ F3PFݳdOV[ȖÇd@@@@O`l=`7=)8é2y[22    '@06ƌg uy91^Wٴi     @z M@p'mc:    +zZ y]NKR(We3/    fcln=jua[d͌ʡCd@@@@C`lz,n~I rO DG@@@@ D/ˡ@Ru9Î'ikM_8    #zX^q!X f^2    @ M1Z$ǥIlP!   #zXjKb.F#c^9QؼQN@@@@ 5Ʀ+4>Q#0K&f^2    @j MqW0*V}pגRc cG9@@@@ zcBȻ.9U|gc`qA@@@H-5F@zQ>1G&OyQN@@@@ Ʀxb T=d5X*͖/('    :cSg, q 4e Yvn?aA    @M'-PN 6QA ^">Y('    cSc q)̮Bc?m|w옣     @ -1K PԿꏎkJd@@@@^`lُ=@u.[Mw3ɒE ouA@@@([e(@ [GՌr,yq     z@ _츶|u,[QN@@@@Ɩ=wFD] IDAT"a-'P&O*'NI    ز@ΙK:ke-2Ùr2    e#@0lܹ+.P( 9v{`̝@g@@@@( esMwI#FUz^wQyeѢEqFٽ{ԯ__ڴi#7|\}Ւy ?te#P!,7?ڝj([$2r    0ۦ{9{Ν;%//c}'Z0`7Nrr~UWh3JܴiӤvҭ[n: <*j&GwϺ?XW&Æ 6[$@@@@+2 x\Y;k[nqbsssE^M4I'rm݇0\AXj{ښ{3$@@@@)2 hcufÆ mFedȐ!ܪU+y7SN֒v^{M|Aٳ ͛yO?'RV.yˉ]k>v ,֏R    @X N낂V:uʺb%}eԩV[:t3gZ_͏h*K"Yy?tυ,SPrࣛ>m^hhy"Y[~[@@@@X Nkځ *H㼲hUVفX=/b`Ѝ?te!PEުdd)SwA@@@H8×(h۶mܛi5?f]vҳgO;9r]<~x~j)PEg'K`,]Bm۞E@@@@4!Rc;w\[.ZȾO>v+ѦMiРuɓ2v"UhM(H+JyI}ninU3[O('    8WXa,I0V˗/ѣ޽}:<0~iߌDZ ԻbTj?afv%$@@@@-`PtMѥK y u$++K:vhˤN:ꎟׯǏeM67O? ot dU˓[vg_Vtо]ܰ%    S`lL"-[H~~U3. puW_}zԩVvEnyݻQ֤IG+ӰaCԶm&hq2i-P}+r7sMgkI    '@06e eĈQڷo 4Ht-X+;;ۮa;5j8^\ԑ#G&hqRlذAf͚WK}!K.>b ԯ[Zɿ습d0׏3ǐxGJ$@@@@4.*n3u{B^l[]v|K$˓5kٳ^ 1n8iݺ<#СCvZ6'\999v.sYzѦ}RJr n3ݚ?n߾iʊ# 9{}urdeW2v9 @@@@ ]R9cxgj72zhǕ8馛dȐ!F4h۶U?܁f\2*UrjժYe~Y)dլyu*_l[R9"%|KڽGk>G@@@@ZYfT:o]{"_N8!|xtvyDdmO9?::>DGd)9*A@@@(3c 0`x/\~ӟʻk]xblV-(((c%tiQre~?3KOI_J#[NJgc[M[ {]Y    )$XCc+8 d wy18r/?ڴoF"*嵕݆:\s#^3>)    ҳtԪU+G^7#r]v9ye:Ѧd2J@Ū3YsSo@@@@(]i0Xuuk&I۷o׬Y3GU?t܀LF T@\v9R.[!|' A@@@)@06ɓ'%/_.|h>cƍjkז<n%6l`ѣքm:n@&j_kmx kɎ0QN@@@@tplÆ srUWɂ b\i3ϴ֭3gJ=zT.]j޽%h36?3OȮ*\AQ--}W޷:@@@@/@06e]&vߏONk믷ӧO0a:uʪRJ T"7 zox.|ɒS2etk YI2    % Zj,+"6mzըQ R 'xQRrel߾}O:·g>,=]4l0Q%h36?3TȒzW?xjF3J~~p@@@@ d=j%k"nԨ_2 ʉ'drWJ͚5Wz!ӟd~rwyMTTIN>-% =}۳gOGK>}dVy뭷\~L3_| :+w-Xrؿg|+er~Rj @@@@ f1Xϕ:;Xg,.]Ξ]l+W]͓ueDAAu5kBE躴͛7Ҧu+sv9 @@@@ NcsfƺSN2uT_gU]`2qD::6|PyO?ڌy~ mqC7bȻwȡ`-~Pi\ @@@@ flna?o|=Y=,Y$j V{~%_grbja91zB߯ct7Z7ad) 51̓    I`fl19"7n 63`=\i׮]1[ٹs܁.MдiSiٲ4k֬~Yq13c@鿓M.Ivϖe^]i@@@(?cX͓-*,8,_>GNcw`OWxȃol$    $Ee2W P)Wyuo^?.Sޟ8G@@@@ 1yQ}T݌y%uW;v#    @ *H~Y8$m%     /@06~+j"P.wTmܬ|c$/ɲ+ʅ   =2@ g0 I*It ,򓧼/'Nϑ@@@@O`l|NB\ 4&np Tnq.ɖlNjd7rT"   `yD'`H^gˑc*;}f^ 2    PnƖAH@=% ,jr*fYj<@@@@<-3"dz#+۾kv~)rI;O@@@(c($YbR_8z^Zegv'   dLa2%0fٳʾ}< @@@@ f|@VRwo|-MϭSNɄ    ,@06GgCj]+X݌kvzY~<@@@@ Sf\@VE7ѓ\㠴 ,&7IN>8k@@@@2P`l*@* ToS"G:K%9fݻOtX@@@@ f|@kG ð{RQ 8s3J5ayÇ    CYv߳ṯ9< @@@@ ƦTbR»of|.vه͒y    @: Mѣ@=,v<L3N8!ߛ8O@@@HW:r T)u/~,    cKqx iݺgرq|Qyꩧ?wyRn]i׮ 4H&M$OPE? OJ[j+z~fJ59d͞=WkI    &`#:]p\zv__1AOvYw2n8~6;=m4]t[~ lv<}Ֆ`KYx?e k0;O@@@H'fƖh>|XnV;o`[\iѢ ۯ_?weh>!P+.l3c40eo$+V$@@@@t [ _JnݚPK˖-!CHhbrVdɒ%kcnܸ Ў5J ðڝ={\}QGQoIJYnGB:V/4f!v{&< @@@@ ]Ɩpyy7nG:Ȃ k׮e< ?:h^#@ w㎦k{lÇi3u     @0_íU&@<ǪUdԩv_|Z#.K Ծ~ǝ2Icc]v1yv    Rsطx@tf޽?|Z/lҤI\7lЮm6; ?tܠ2w IDAT4;x`\-=zT*T ~m\VC$0wc6׊Mi& !   @\>wUyǿ7=PBMz "lˮ "bAAP+U@J{/ &!yܙ̙3_&3D2,п{fE|Cĉ%KtsM v1sN͝;7_#۵kmۖt*e[ĸ-jg3Tvu\v   \|ȯ9|~g9}Z>PLLL>>v%88Xv=BD3eN70?k.V^=\3gT\\ӝ>^`X-7mX3(!_RbVn:@@@@ gl># ݻO=:t;Nz6`u򭅇;N@C gtqͱڷ#F@@@(L$c?~>3g- /㮜P=WFFx}(^Jxbm:U;fd)v    PHƞ;uV=V/0apWvcJJ]>SlM"##cLϳDED9>iǶlݦE@@@@$@26Yiwʳ /&MqǙYYYNuwRRݜ/i?D (ʹWiT!}~ȝ@@@@ @f>@(̏9r.\hM166:4_u'N~GNr+[Q#S\f.ޗ?2Ettt{J޳žR렟)UŠ_\L:]C@@@( $c.ڵn5ֿ/vL)S|y|J6l>wؑdj׮)Z*W*B4W2ocWTK[Qv    h)(@\\*T`?uv9ºumeSǘPA DRųkk#ٔJMMuĨ    `elڵʣ4n8{+R͚5BBNS/̙r*$&&jɒ%vS6m첧1=c@a(5\;M'^_߫,^:zf|z݇    H@΢>[n2_On'c{쩇~8[{a'cg͚%lʱ N:UV{%tǘ>!@!uz됲Y{Rgg৅^   Jm  -(22zÇ+: W/>Aެ-YO"+s6! ${ϭ @@@@ @$c|e9Ν;kÆ VShh Uǘ9> E (};لfe={j@@@@ $c~O?&MOguW^'xB-[t;tPU^ݾ'{cfu @:Wd) e;oСC    -r_5kj 6,=c=o ݻM ic,gΜ8Cɸ8@]LM S{هyuj둇}(    -؂zZK/J*^-&!9gΜ|%b]l(!PBJVU.X]a^MhᢟC@@@@`elr}iҥڱcjժzvytVyGw3+cϛ 3Mh*9_Sٝ(    ~ 'X=wnw1yjlmy`kHK}kܨQA@@@ Bm Bg J餒-{9S+}*v9bkeW8bT@@@@ [< DB)8"ΑLGlӕx/G#@@@@O$c˰ P!1T:\"eZ%$$j@@@@$c- PeVDg|E#f*X_F*     u2vO mU*~j}K\ڡ'N˅   @@'Nӵm6qƎwꫯ*++7Ckц |  7[!H. Ptx\Z;^,lX]ޠ#f*_~8'   @to_]we{ζ_ʕ5} `Uc}2ҭXVz.=~YN&Riiz wX6 @@@8+$cgϞEDζҥKu!-[lo? ` Wj֡ٯ")G]5sַzv_     eWBeg3훞j G\(|}OoKk:cڏjm>q    @~ϳϫOɒ%Y{^܌F=@fZ 9233OSA@@@#m :u+Bi}-[Wnݺ> VXḑWN+VTH_הiCb(YʴTe]ҶzpW9rDOBwK@@@ȏ+}3ydnԩSn;Qls+TXAo9f    P5 x'c5kL}ѵ^UZ{:tHWx}C@@@@X2v׮]믿uQ.]&@\yn~_^Nj˥,EVk]Vs{w!   @6޽9'b= 3 P94rbfm R@@@}7dɒ󖏉918Y+_xͱA@@@(Mŋsnذ*U$Y͞9C(EU1xJ-n:թSGʕW6m{) -U^J;SQڵMJ7;D@@@+}[YgϞ "|Aa@lvUgJ]1VPOLHHq(-=   G "sA9A/_'xB_j֬*Um۶zǵtҳN2u]7i0y睚>}91Ÿb(x@G\.)7ϩZ6]vO&    @6fKvz7kzg4n8effzު#G|4L4IC oY|"""<1|nd pV #Uf]mr~H6|;:M[h3Vv'   E[ آHv)kN+Wu*$$D7nTZZVZ5/X^0 ^z{XUPϻN4m4i5?GAI2((̤#fKwBvH{5m>S&|o6ldi5o   E[ Eۉ`=<ׯך5ktITxxz;wT=r}UA>}Dl 9lÆ Jٗ_~JʘAfϞ]:iǘy>F8@PdUOk~J?I}`]8}ҤOd-B@@@#@269s?{zTMom[`~]?+Լys]vL\fugKOl2_]3gG DVo7!#vп6$ǎӉ'QA@@@+P(f |饗ԯ_?]uU+eV꫚2elsz)OY/3IuB޽-Olذac:@Kt*u}1RO/}[fVB6-=;L@@@_ IDAT_ճN5+KM}ܹ7oƎkۭG}dYAM5##J{׽{w{'uvl90a2ݎ; O<6}uOcz.@G*r `'~sW_Ν- 7QA@@@")dl{YjV}}o߮[W\qJڂf/֯Z{]wޫxܸh"OQ]t˹5jJ*Y搰VcCMj}(s3ѩ?ty6>Xf}O   -%cX-O?6g;^~WZU7p~i5l/v- L$S-[fm.UhtfŊ* pBKRջ'%AVfvMSwo%u?M}eSSSǹ\._Çy'%K:Ubccl  P1Z*_#ܹSNQW}TbBN7ؒqv,D'߮ i&&&ꍷe*,,9F@@@?|&sTa5IƗ^z>ڵ5tP9k֭Swo3v:jW>}rH/? %C~9 ;1]BxxʔqZSTTT6q @v'Wz=R*Rr޲u}MSܩc(    P@fda|0ۍ7OVs'k0c5`sDIzq?? 2> ;iޗIF{ǘϺ/W~Ç+..N .@NVԮOTԒp 8|oج}uĩ    @Ȟ˗ELR1/mQ?~III2N0A+Wm/xnʳwrc9@ 4Es@Fqw2׫U>\*MrO   N$c4ibk,_\M.ZȾ4htUV*]ի{՚5kԾ}{{*xbYj1;P^ykc0B GsWɖOH9Q&2tw]Tfϙ?96t"   B XgϞʾ5Ό34vX;l_]/,RJɬ-Q=_|.{'N؝r('ϕ/y Pp{Qd֎&lNb ۿ_/_n*Sk#t"   H2ukga̙[^{5͟?_[loiʔ)VnSZZ VZ5{T;XH f[3_ϵpBOgTCϼ{z/RG B"U xoدcT½*|~>v鸏    .$coVu!a\}ձcGP+y5yd:Or [Yf;f-k 6㦰cG=wڵk;cL @ VQ>SxkΜ9bZdަM)cL|"@ ly^鉇cL:M薛9Mȑ#NzӉ   D `Xݺuƍ3("""OshS֬W^}/dcާs=lt-{[V)îϚ5K&ٚ5uT3s0_c<@^QLL9Q;*eg^yedd@@@@ 4k^;&&F/v4|p`nkّ#GZͭ[/Ý(<+3tP1;C^ЦMݻeS[Ç+8ڽ+'NЋ/h ~(+HUHUI2_'ԭ y(iشi&LHYYY;OE@@@ݗO49֭uuYw]s5Ke^ZkРƏo2KII… u7*661t_< sK/gfŚg+}92nܥKZ >qX=,DJ*X@p)M:ۧL>a1e:ԸQCܵ[9ڿQ}@@@@ p.wҐeS6ll4t=2[-V\/R+Vd;L2vS0I]x^z'N:W:udf{;v#FРAz?Ϝ9:{܂x.@0 Md\Uz+55MxO۷yoN]S@@@$d뭃N:e4IRJȰ~kuYΝ;w9g^}Uw#1IU9p,lA`cڴiu>c![cf{߫$cN@Y)+^0JԾʽ ~]8p {]=}xO    w$cd{EԶm_$ׯ}f٫.^6lc=oƞw$_zZ6 Mݽ{O?:\oOl~+/qGho\j=Haczk0?~zK9((HK-Z4sK@@@ N Xs(׃>hYjdꫯtMO7X uIZvոqc5iDK>)dҥK$?^z~Ͻ$cDY`?9R ]Q{a#d~}>jؠw2   @@+p3֭[UF3e]%KX*/m$?@:Ddl@yhQԮ w꩎YGViUPx6o٪QZZO Av8@@@@sؕ^z=)33NA  R^Y2&^]t2RUv-}jX+՝5}ڽ;L@@@ @ X'dɒ?ccc}u4PA+uo;F^=b;UF7:ǃQF@@@ +d%\bs5!!U_lQࠂ@pT9Bb*8?[V-[nuJBBmH@@@"d9sO>ֶXN&MҬYMM6uԩ @h_+8"置#8mԭ vS9v옆_ @@@@J -Z8&9eСC/h׮]\V_|[oU{vc,ϡ_ P J+UsCo_tb$+d_!1Z7QG@@@ ,r_x3(u֭g[_cǎͭx9s_߂#P''&Ak5ɟME}&WZU=@EDD@@@@ #QQQV"r[ԪUKo9M @qmyw}zYi5v%c;nUfΝ܇zUJJj&    p5sꪫ4l02vM8;g(qO:|R;ܠke~ vwqㆎ>mv=Viii>m@@@@5S衇aOAAyO%22RO?6oެvڝ3 PL*tJv鉇}Tj}_l޲Unj9\ @@@.@@8uiƍΝ;UbEծ][uQVT|n%V3}CydjǸ[~aqU 4wQcifGSiؠ`6    pn&{n(@28~Wy@drVx|D&\EQjjF7}6GSiҤ 3ύ@@@@ G EAZBPDe]Vk{٬i~^+^V&~,6    p&{I\RƎkמp C (j F& +#EzR^SY7M1 Y   @)7ou0ŋ}fo͚5 ztqk/gyF111>(lSPAH?S[>kcroQ>BxJÆ޽}LUr|    @2633S={ԕW^fK,wW^omQ@[ d5 <Ěii_)+SQQ%݇%l![@@@@,}W5y|O566V\slo\aeY[Gt(_|6Rttyhʕ-c*˗5B@@@H2vŊzz^{}o&, @+ +دkܱ,G r9$dWuQA@@@,5tlժ>cЮ}x;dN^j] ?Umb7]rvӯFzi#   ,~$xNr @ V[tCJ,x@իW};=:uʧ   @@;n8k|̡]cƌQPff "-PcNPTZ5}ܵ[;R'O&@@@@bX2րK7o_=]z4ig_@_司}gك߿z=[ݧ ѣ|    p1 d؜=uiƍ׾}TZ5ծ][uQFTdɜn%V3}Cy"/pwʃʾxNO Zck >[T)kmre}    p1 dńλ-@26oZ_hg}qWQqLk} PJ|    p? ˮ]V3fЄ xb%%%L2*QDa*Mu*U0:C"DTi25rgd!/RfQE׿˻Ef:tWjj/_ujT)ۆ2   #WMHHpZ-eZ LU?vر>=wyuxWTTTnCG@KJ`23^2Ӓˎ}"{.\/ֆ%1L@@@b(m LEm 6~]N:kŊPM6_|a%cE^m ('ݟq'd3oZTV4Lrfϙc*!!!s=@@@@8 &OH^}9&b pDj*@ U{{+-]%2YkV7U7\ ݇}?~~uO@@@_~lAӵ`}G95[t:6F ~mS\0dzNvﮬd+~m~Mr\~m>xr+g    P]hMeҥ].]7?0?_x@ntHO>C;vUVjxEk?YGGwleՌ@@@(~Kƚ=`y7fK@@@,dlB+<8*Tn*͚5K/wI;wv6oSA(xTWpd)OFQ IDATYF\}Vi&z``?ED;ʢſh*#y(OG   a%c˕+޶mY:e/賿ԲeKGM69T@#Yj>8[!H޻J[uPmVuCg*J6   %ca-jղ̡[.u1{>ڰaCtMnH羄ǏwSA@x|Dn݊WZE ~XK;WҚ 7imh]    EToXѸqc˵^GyDC Q-fG̙3bF@F~m}t|pD≉ڱcDGGZ>m@@@(~]۾}{u%_.>|x;eʔQӦM56@ V 8{9*Q'c:£J葇PL9lH_   EQX2zhCe ;foo]6nݺ)(w<  @"Jo]KS~~,,,LUK[ Qci>m@@@(j~fV^]f~D>>fkyi>m-[4j(OJ>v @pF_) fefhtYq˵{SWwT222O4{<6   %"==:kٲe֞M4QZr=s裏رc*Y `%w=|/-^OK +SxDG*;Νi_PN[wnw!@@@(-"Mb-{ʝ㥠Pmѧ֪읛7k{K!!!ٛ#   PMA~{& P庼Jߑ+۞Ǘc*35V-[+<8G!ozxI;eʔv'dV͚5Lĉz}z6   6;|@H ʥ5x8:={˂v/Q~5kTRRR5z8-ZO@@@ `. E(Ztt+}U+;Jff>f|=˧   EdlaN0@"*omYBVfNyHf>gr7떛YeGgwfkď:    o@0(U;]vtj]u} l 1J|    HW ׬YI&iƍݻUF 5hTz|Zbb EiÆ :p*VF{Q׮]LGyV83gT\\cnE,pu|^!Ug"JYm[mט㭟y;/_N yR&{u@@@"@2,M4z<4sO|I2D˵7߬O>DnǘL2Œ@8Xpxkie?H(BѮ=|1되 ~Wǡ_Fm۷;^=բy36   {Sw$b=Ciʕ:q№-[OpBٚG.]T}f_~EG*0+e_~eٳg[5]hC-U:|hBKVv<*~mqNQQQzԼYSG?SIKK&g@@@@ X &wvϡCjvݻ`V~:u6{$iͽ[n1c3m?O_~W\Uǘ9>AV(wjخJ޻1{WP*ʴ̎q\]h26B@@@h>ħOcjV>#r4j(,Yꓑ߬$bMoc"ִ$Iz.sWN?9@@/P%8}KYVMnT\?Fd8T@@@(P6Q=$\>mڴ,_.Yi빚6m;z9~>v|ʔ)91R@ @PxZ.g6tWVZ6ؿp6lқoO@@@)@2 ;vPxx}Wƍp͵jղmܸ.¢Ez.]rnFRJVpҤI>]1C  UcU|~1vrtmQ'ZlРJ.3덷;|    /g^LB6%%Zڮ]3Gڵk~p.e/նm[O1O+VpǘPA @٫*>TPskҮe:4^)~f\RE=`UZ 4l{ZbO@@@!@26気 *(,,w:t:1>>Sث{)B5w10  @!mK5^!QqۥmvPV<6&FyHM4r3ˬ ?ҷF@@@ -@2B{u){dմ&Q}լYӻkZjv)cL T f|d]aFI|&]ǡaa׷ G?SYIȅ   B5:… 5rHZjʮ8q.Bɒ%*vZcz!ʫV_Lb$DfϞtBB3R|IfcdefhZ8sDuSclLN&vgwae֗w,?esc\XN@@@? ORhhp~C=??fnIV<**Jozppp㈈KNNVff ǘ.P|v%Εk ߻)K/4.@_?ʏmqXU9AhmJX^H7|g\@@@S0'bͫ=ovsu]#GxB3f2 'O۽v0Bx BtI49l}_O:yR܈L BC;ԆY;U+MzDFsvt8?   E*zjo^vG{uwuO!$tl&;91=(jeBJ޳R[+y*e|YE]/   @ {߯Q:tp$b'qdjVx6k&\ 1Y|"EQ ݪ1DuL?^mqNbţCŅ   Hƞ t{F(8;qjNv'%%ǘ( ET F{zgoxS5o+n~v=@@@s~饗ԻwoY#5`4s_Ssݺuv{۶m)cL E] (DnOW %nUIב@@@ 8EZ'zW_}eOkO?ի۱nfE홮D-Yߦo6m|nǘ>!q2Z syDMPv7ڠA_Y>m@@@82dLmsK=l[3s͚5K&ٚ5uTdJ(/ܧ?y@D7Y5RUo]4Y \+x>;wVmwR @@@ /Roݳs裏jΦp-(22ҺzWrĉzvs@Xɒ%1=c7-U_YՂ+QrW6 M%/Z-pyu쉓'PA@@@ 'WN 0+RvcǎY >\:x`̽f_W /?߽B˝رyuEVc2c:&SM6Y+TROQ p ǨT{zpRx =*^ N!Js'fH%:MUf )Sڧ   WT8q>߆ԨQC۶msܑ֭[kvSNUN+Ak'رc>b 4Ȯg/c(̙3>\@lXs?i.@%?)Jf)ؽUANٶ{U3Uwٲ,=.{wHHB d!, 6KdYHB a NRKܻ%[zҴ;f4fs5z4(߱嶩C䍇_y*++#g@@@@@@@|ƺR?t萗4I/~}iW:TaWvŚCD XjIo[>G6Ooo%ֱ|ʜvOڽ-61Ln WWWӮ]k"2e 넡XsXc2 C@J@5-M狉Hdr57{M`}V*(чIb|a}cp >AU~}L{ >s3N1u^7y6      0F M}mO6K}_zrSs^5M((]8uL&7A      0@s7   0 skr:g{kߦ3urR}[ߠE8]+HO)pmF@@@@@@`;8n@@;bmV3JjݻV5t:goo??A=9{A@@@@@cA6A@|*ֱbkow&5eKo+%&&89˦fzK;vt      0v@;w   0@b/S_#kO*))7.P2/ҋ/Jţ      Kbl>[wo_-v :b25WCI :emG-^      } F3Hy>0?:JU z=} G)zǨ       U46NQuG'n:Ƞ F@"@O^:a{jPF+A+u4ɓgFvWH5W^N/^ڌ:@e4nbl44@@ Rh(?~dSmj3?xmh"{]4iRX-n 8@y '0G76j߽*v5D7N%2@-xQڳwZc  Q@^~dRʅ#oSoRٝO3F"O=_ҋ/@@@@@˜0~88@thܫ"NvsM˩iSN=TRlslٺTSSڌ:@S ?N4nܸ1J   PB*j?Y{۝kZ[dj8AS/g@111`G%%ŮͨXƎhl?X #A.!RmUMݚ۪yȐ:b樮Zhҩg\ڹkL&%jV      B !\,=47n-JUAM{ ]$ic}`SKK͵2n\>}SnNk3      !$16p@7~uGn xܬ1,Ŏ__|ls+ ]ji4.A@@@@@B@n BK fD/]B&. snn LZC,O\}2 *WFz:?܃{YV:VZM*)85q      \ .O D, D/},]82gHxACc#}tdxi15WK{G# @>Cdc ˁD-S):qlʿ8*gf~?bqu 6u }s7QJJ %@ض}m޲mHjt5khH1)0c#@b@ Cf_dcS;(_쪬RVUU6J\\p54\fA@@@@”7 PUkO]rPbNpp"QeIH'k$?:}rz~_?ZZZP_d   WQQ>t$~oRVfi8|(ϯ;>ڏF@ F@ƥ[_s,&ytVoBߣ˗oJ_,̹*      ;(" "v*#e_}}^KƿRzzݵrX)Ӗ]Q`a(D cd*fOHչB瞻>sY:}S&OݴlV=KOPX8aD^x2f{t⡙v5ghnvpV?V~DVk?       @   5 ۂ:+dn3*_ Y[%%|V\NZDxz3y<FR*#F@D2<&7 xxu'djAٞsd`ee=oߤ^\T@@@@@BOGt1cZ +͇+u(_]3LR  0f X:joP 04 -rd2wߧo$lw7]OӧMumF@@@@@ khMkֆZs}ꒋ Ab0dd @Y @`h U]^1}"J).}5Yv׋ ̦뮻R]Q&]Jˆtp7cp@FXjY{mC#1vh0+ Ɔ. 4xjq/Y[=fR9ׯ(ҥ|mLޑ_=A>-Z]\N ^Ǡ@@@@@Ye6ڸq z~ӦMrupa F Dž;2@ [PKSw;bʻdt`(*_} ڷy(>dRzVp:@@@@@ H܏o;vB[y.R"lnNϱc#YB37  aZvj޼'b)Sƪ{W_:yyytuI%&     5Μ9K}A*XV%o-_De ] F󌊻7 ,Ty߼alw(nr~~&zt] fΜA^}effD"Ç(YYt\:"؈z\ccs]D6oRoI JWt.xͷ|Fztl>s٧     aL@ vC%lMM͠'-.H/^E\0]VtD4c@IOC6 Ja5 ,/?I/*yy=3}.&uPA     A6p06ǔϷf^@^E&"16HG'K]GG=uV*--Zͥ3f-Bk֬! $b@Xá  0N]xU!G @@ lj8սt{ZhtX~er/mL>M5P*))fQJX     #JJv߾>?ʡ+. ?fEb0ٳgiʕtg^ b_H,)99rrrѤիW믿yuXjX@BGZI5o~ZuCr%_tG]]'{a>׆ ̦5W^ _PP1GGҲEZI %=r k, ;\^^N_~pk.Zl|}ڴi3ܹsKqO}kWXA6lġXsB16p4woSouuSLxӧ?Yq߳dBS611c 4@0 \w累onvY\\AV f8P"1vV+=cJ(_1zK>g(#=t@{m9EQ[ Ś uP  02ln迩!cSVGiIٟyqin:'+ܽm]#@0 +Jsqfjii嚩r |E%16ga׾F۶m:1v߾}Ǭc+WNO=j>G=\!5=6#ۀ/7OȤ+~N FѺ5l}'~.bZ|) @G9.qhLz3c@@@@@SS_P.r@C裃;/~A?O9ktM7߯c^z衇Yfy|.Ӕ64km0cG6$~M~{Pu9{#_ڣ{ڲumAܐD%$?x`>溶\&A@@@3g*WKތr- } oG ~M;i4cF`?n\K/uyyyd2ڵk=bMM   8j*-jw>K3ד׬|нkGv]t҈$. ^yuںm^'!pzÿ_ڳgO!6++n'b@;Nq`,2Xh=䏐ڟwv6/^YU=_{55d޽nCC b(SAnC_XkmJ_OH#}/*xk݀l}4p. &`2;iMT[[7(Π\ yc#l2;. `#GϻngcQQRXX)k:>uҋyC庠6s/5Zv=CY'-:9;u*;~^.UTr    Ӧ[T`.5+9rqB }'5W_ `n'Nt袠u/XӹY*T]]j---`ii_1@@ 'y{,;Cv3:zWYpi ?/W|tV Cihnn& 9% 8HǏC wi)4{LѺl2 gen+"J^''';۝ubM p!]ZIJ6c@4L)ܚ(vim>[md{NjKJ_΄)7]R4Rle[(ha(hnaZOoG2>asHQY żq b%!ƎOG_jY:́DSyIXӹY*A?iݺu>.\p*_#Sc9ռj=ǝ%ɥ?Y7R?'c(k3=rc mM7^p3_瓝ia!vKZA^D @@ utXlq֥I-km Ab嗩 _]gvzzej;:>}?sc䕤ܜaP(biVںu;uv2X6uar#AbHPvC|8 [85m   0VRwvPm{L[~K;L˾KqincꢄcNF81oDy+WPn/GpL8 vX===~@\8R\\{P %. %<%ϼ>I!;$lCA9lMt=vXb=xbg]*Xm\@0fNq_XKLu좠'MԴrz6R,.@ֱL&Z'IoiɒE?@@@@CY"ضjoot4 v$v@ \ @'pBz71StttΝ;c-Z;*Xӱ6Jw1hFgvP;Q{?=*::bl#9{1ܣe~>xB+;gl2 c    9VZF7oG,29] ÂQx 7|S}wHքN_(l}ԡXc4@-XH>jAJ)ybu¬Ɗ_l֬a.6ӁH^'U~ g"-*m8@@@@\w젭vPCCKb_/_B+) ` ӳE̱^~e馛y%rwW D+GH~]](w=ކ]`~裏z ŚPúuE)XֈI7n$MrJu_cc#]zt$c{9JIIq qXӹW?Nb&ƨ\&POOvgg'?AزV^3M$DH` $Z8 z3&!_4[K]{5xõ#G@ R 26O.PXR~?>xiw%'%v|./QI:Lֲ,m&"/D3zQvE 9z/+6˖.gQ4k16O|(bl+nVzu%ֶ<@fPI Ɔ01D[t髆|)}(y֍DZ߮vǎ5Sި6m 5< H PU]M;w&qO8t$@ @ +[)sz'9h7%ZbM7@A%@@@bfH-wRڢIŅy@@@`$0i}}ÐE  8Wq޳>ٹΞ9M/% ײ%)//@F1ڵkrMPTTDSLa0k@~L$ pbm5S/Q;(&BoC$2kuu! &+Qv3(55p@@I\ 5Rffszoo/{^'_ vtхsT,` D:c@@` *V%}|&i to ߤ9#~pU*Qv[6x[rqIDٙcv<ב@@@@`8G>f ^U{a4%&&|]h A @G716!@Fpb GQGbŧSQ¬1sϱ)O}iCm9Jvi4}ThD0W> N`bٳߌGh Ӧ{t,H 0V @O>bl? @"@󎧨;YwʻaJ[ug?aQ7ԺEY̥h(x.M%I+O?gA/I o-&{[~}IBR]SDك3rBU )YB 'p   c@x3{&e ؒ"7@ ZGQA@"`j,mG͟pcg  LKmPlXZ->5R)/RҴ+t2tD9IGR]oxKIIM*)f b!فh@@jHO~X7tWҥh4 kLHbX|a~cx  > oٖ]2cSn7+Y:٣t1:"Pfe8 LYiǏQ%_򗸇/s}'?{);;k` Ǝŧ 16  7MJm"YOȠ .!fmbXd;VJet\efg]M,z!I@xl1, *N& fLXk;֞x/xH8"@@l.vc&YKm֑_zM\VUax @ =c  0z]M$-{N'7eMĩ8{-%YmlnʎW¬2u(;QYNdfJ tZVz+[666?9#!" ƎG716| N  \3Բy%vV*a6i5dH~$555ywDQgYqo ?\3bJܡ <1~-eWqE4 4}4ڹk__tc"va;@X07/ )6o6%N_ÖWP|3;tTc%rd=[SS;l64aBJfvBA%$nmmϯ/ٸqtw/&hp '+mCIy4c4`tX @?C    }J_q斳,̾'n%UIrMJ|%Mح>)ϏIKK$UsdEdad):s,Dp>zʎ232@+" ޠcB2L P?*g|zX9Vu+%%LLSNVeRR_!fKa  Fs]D0}xJ_~ʖj;j;:urXZ+>i%_>f)[Q ֙PY&ZEٳ0+0V:"gk@k`q yj7QֳJeYĀ   0*Yx=7RUV Kǘ#)v67'g{Z}Jtq @OpS'( 9pS0r@d:}%̶@kn(1JV))1{FPnY:YQqZY=wnȖ<2b.Ύ'Vfg:${ `lTb|u|Y_0䥵ZW`%|  FsS;7n@@`lV:ڏyuW ACJ>%LKXMB0XϞdagO>CuXzXk@>LX?%[$gΜVp*oITRRL'O8Ac#QB;w   <*80ֳ7fNr bAK h7V~)=՗>`G2AI @YϞ=~Ϸ,653?-%I%%v_&k%16B\4bl4?]jv[]33dMbvkYJcHzs싶d nkAuÁ ! [U%uC8(?NT9>>э@ @ 16"@@ X:b}m:_'.W1kjk`ZF:r-HZ̞|/S^ Z QIK!X8)NAQ 7^@MKb  O@yc2wU2,ey-eϲ3gTZZ332(\>媜G+L}@xhjjb*\QJƦZ~dZȁ&R@.cهC GD%T'>ΓlKw)n<gR|3Є?9P78_D5$%mnX+n@@"@ww7U[U,VVW˪j`$PP@&s!ZDGC- h(&o+Ϛ},n dlty:OmUo!O]Lq)vܠ[VZ2ڧ6VzV_XJvMIII}ֳAUr\RB@ Z TԐdqj2V ,Xt  oX8WaSSS(A@+^@@@(V"*q-N{*Ylj9Sj5^gcYȞ 1s_k4]54SZS%y Dm6ZjkkcJV^7UL_S`h1 @ (?I?!`< yFhUZÂ,A"sܱǝ=^0 Jbl0@@@͝rڒo;75UPWf=5٠v@[b=uij-]|:,gr}!&,VjZr}m^1_]홾/`kk@D| i233(++,.3:S% B`K ᦎN]YpW{yX_ tԔΜ|4  X2MT9[ kOuF](7]fH c`LDYfc9Ǎ(*6maif^cQ3gp WWUɕUUʪJ 'c_ZVr%pXFz:N?  , 7Pm]vuulg_J|eu*(@ Iɗl?zk ,ҲPSs/YXӽVGIJkZ[rz֦b]Cw 4yRʎqg /}H^EWrj)%%Y ,ЦEXMSb4TzB2@_ok]}=RMMA7v oh>Jxͅh7uG;@>'(!!ctSܦ`;lj#Y-dk8FSXw9XHG]7X\oֱ)ʩI>eftN0:"&EW0ڭd:Qɔ.,[Xu|8d =rP[G*و @7?+1h^tVn.[a5G]zLL@S #Jbf    06 h_ZeshwY)$kyqJY(Qꭋ:kSQGȐ1h(6'Q%&PE̯׊cC]Uh1#M ,@-R25%ªDb #A=|i&](J=/7bcc`lX@@@@/J"~B=?֞vv%+E,]ej`#!9B6    cFKq qp)dzNL_sdd18۬PLU-6%HPgE id_Ronn"sC{̱|&p+.DVZ%rľľz|\G{\/X6+eff@k6jemG+EluR6u(Jłb񚕕A[ 4  u F# @Yzayk'zj>!CY2JXl]kH/"}9$Qaw+A^&l_l&"-. F* D5n+p6&΃D@ՐX_# @+֎NB;کs__H]\@;l .n<Ѡ@`;FK{֧#.QŲTr~wZ9hg'g BNZ΂oEliĝdG=..b9DZq;?h1$NײiV;[ky~ 1BbyиMtb[N} a= &uSK(ں2-빺Lg H2 GbUkp(rMu?O+;jUuhu\Z[Mv$ n5 Y2A,v+MmC' EhZZ-T?M_ >W޵Aq8ŸEøQYY'0>'8ſq|=N.dum ,rk  y F3ÉA@@@`0fNi?%X"Ej .oi%sYfϰ_ڳz92VQRAQw{Y&~$1.֊-vK[p!:oBVkcUUEڭbS,7'h)KS:|2U.:ϑbO IDAT%@rLI^y(*.| ccp=p ' rb*u.x{x.r5#=a( Ə4%16j-n @@@6.\E=icɘ=COn%s[5ڪXZը>` d`k"?%Yti,:$w6pc2L/iEeV۞M.T&9q{/fccR7Pޣ9^,O WuH&AٜunkJ |}~z?}Ј "T쮭]},,ΚYtԪR]גsolb Sd|.iZ4q6suݬbec}n:H?JRAT) &Q\o9U8EWq~Y,VV}@VfVoqyއ}J}{<_-f9KP1ZOZ ,3Z_?~كq2G3\ަ>+&ui j,@$ O g& Flm;X:(+¬CtԹձwen>r:,bL>m]!bp]$xП^Sh͕@@FQmA@@@@ 42>V}.*[;]%v[$֘YjQ'ncQT3ﱐ l]Jؤwn@     @V!c4l욠ZqpM?ʅ_|m7Pmc4[Oj?it3ىJ5J.u! it@@@BNblc6/4>C]&p`f[+Aʸ4:-gYg?]{U')ʂgӋU^ί6+   XX     "f3M[KU/bBe:Z# vkډʺH!:$j0l`+dp.lA63"^OOSdj>VZMæ6eV8-kDZq .!{g.^22҇t|b/pΐbD pNB;\}k,ص~ )VD^j*B*۬=^h5PO]iJuVmZTeggѧ.8*7   16T&Vbl=vm> Ŏ_ే.1$,_kiYU N:u@SsDeoƄ>TXLM+T6/l}nŎ;!;Dp     0<[m! սc}x,v<,uJaBm?6nD9Ch q,Nli dP .԰nk;z[Tp˔4>+  "16Td.O?Pֱ"Ҋ6vq! ٛ-;%qO^qkm!:jꢞc*; - JM@z H:K{{=O01c@ȾS}`HѐR0Ca'yelV[gY@Fh>Clf1+htq)!Eڂx33CxHcL:7M; S}u쬛B&aL>!7[#f…|9 a `(A سXZa[hV⬁H)n Iy'iiV=,mvZ-dOEu+\ljg.&\s@Oհ@@@@@“yTTbYV'Ҳ8˖R7,XB-UJ\MIzgY's٤KL­UjehX<ڭ]MT)}#8+ nʖq\:W-Na!КN+VZK{aEJs{TZJ`WYgWߍK}Kg㨝v7jIF:ouRJN%ml b于ѧ_#D@bK;Ԏ5ݱM_M%! yy)stƑ @k=CnQ__O^xz)66m .@@@@@"4<]],ОS¬t~}^ dHU d<HBm2r eR\r]cZ8@a5C[U?uyHg:b(l~}GԼ3(ma"PuE`jRrr2PYY۩V^M:%%%,cG ` eEYs+gꪬQ5쾠VnZ i}"mZZ-;K}L_;n}Zv*ҵj>U7vL,8[3U{=""k}V ||+ٌ)V^Do)ƪ|O XƎk.;m4zghܹ%AMM =t}1}rWaÆ D63/JeqV|֊Y 5O֞6sôAl,-ӆsbl}"!J{MD\{dx Gs̑]}6m*qo̕wsp|G"j+Ƕ:aaAQ7[U|aȵ2vX|z-Ϝ9s> }Eb{-b^zXƎ g    "дIz[~/^2fOSl%pX^Z[l@B-u.|88eY, bR~O fAڸ͈6q7]pv뗶^Mr9ދjuGuЈ*V'9cGY2vtm}9XY*J߭J6mzJ.Upcա?$`饺>HK|%@۱uTFay.k>9KyTwu}dwܳ_7ϯ)ϦMJ̖ҞϷ֮ 49u vkg;U%7ֱpa; ('{顇Rk͚5sÇ\ :}43R)@@@@O PX "%ͺq9cwK8S-׭kS7 &%<)u.m.ek8.e YL #J@t/0W*OeMէ_yڱv_sJxe x"2{0s^/ZyXzbXƎ$uV^z>PeƌGUUUd2hڵtw4      08@b+E[?c1Fnaaa Fxg,ȺvVܾ,bQoK%zi9Nvq.BDd$DRv>ؠvxֱ3 !<ˋ{nV/v}U-ZDw^_C     h'2V:c>Dm^  /U!!,oWWkl뇊2J_~.}ϗBJv rKu-nK{_]B7 }sP  (uًDL1| `?ruww;ORTT:m F2N%Po$2–@G]zeʽ!qIJl=\.}⭍KۯO_?tƸ#y.r&Ǻκ{,<Xtrɐw?u"e߹])ui>~Q/dFcGVc=D\K}}ۙ'Nv=EAAԩS:*      0 FXŊH_E9k~ȴyJ (:;gq3t$J9HAFđsmP;@X3m.°KAtQ?-}KsZ.gOΤg}OmpߗIvWu/:!R#xkkF)))n]$'';۝PT***O>kiϞ "( P{C{Ɔ毢ѨhŮ(أE;(ETPE@PkvݻۻklyٙA" S lݺuFőիMz˘9F vsg[J>} {wٞزb 77. h[jiܸqHn2UV{e#РA3uZ6Uˁ=lnݪ Jodڴi}+V?uEӪW>S@EzNO?5;v4]v,eӓaUZ]=c39WGsL*;5`zWD2nuϦ1/[%&Nh:ud߃>9Oh~$ֻY+"E+*vZO /![n5x=Ts)7!  TMzlm ]ic6YQN(TX_k=JvVoô2S^$[J`/sfܸqF̞=]wSO=՝g@@@@ #@00%۪ 8cѣ3W\ c2     @3]ylڴU]o>A׼bS@@@@20ey>`76]v5lI    @u []jD@@@@ MAI9    Tե9O@@@@(ؒs@@@@.cKMs     PR%g     P]V<@@@@@cK@@@@@.5y"    @IƖ#    @u []jD@@@@ -)?;G@@@@"@04    % [R~v    E`lui@@@@J*@0@@@@RӜ'    T`lI9    Tե9O@@@@(ؒs@@@@.cKMs     PR%g     P]V<@@@@@cK@@@@@.5y"    @IƖ#    @u []jD@@@@ .9C5?==dsG"S!s1w}_|a.\hvjuf~{s1ǘZjUT6l5W~}hѢ&L`{=3i$履~2m|I'djK}1b:uvZӡCӯ_?sǚ޽{gH ǔ)Ṣ>jf̘a}f6SukcǎR)Pk8km{O-tvg>:r}F-WDڃ(Oux)O{ IDAT:J[ʕ+watL>,XmtuQfРAY_%D Ӆ*DC>uo'H PR'`]º$?òΣ [.q-$4i֝S^z%&Nm*i 4^zY &N<Ĵ_f)XdIۧ@m{zDŽFIwꩧiaÆ믿>z(%Oż͢b"fZl}OJuʹl޼y_DATȊBz]aYiqչ># +:B'[ӅN<:7L!@-[x}c] N՛c/;lMj[kێ(UoweoVK_=޷z2ӷ\v-/& Xט"=aHԩSǷN1wܴ;ZE'6pC_9[V[neqIZ.+ 7zD͙=PQk/(TXO($;3b>,[Dtؙv<W?QlڴiK.evu>j9](4,:QLJ06k(@/Ic JƟz)ߗe&On_~IXN؁?ڵK,^DfΜE4`zwj)9|p_Kٳg'{\q;*?O*8}W_}uBu\;cZͫ2w߹e~ć~a|S(b_S|U]Is:.(Dh1˹7qGq~9^aZIu}Ys뮻0`@ZB'R? aU:Me,˵u3lD "O_P/z%[X7ua+ڵky>Xe' t6s9ǭSbx9ܼǏ?Ǝzt]wN}nM&= ǡYM$J8R)T1w o"g1)v_qYU.U!4hS|:^kZ( (`]3K.2l]#۝dٌ؝3uwgf͚5<f|ͻztXQ'x cZ[}kE ;l_<4֗Y. QFGvmA8UZ8:]5sx B&" 7rd=ןs:cuBԁjܝo~|źOd{\?Ny=JrO]=wi'w>y., wޙ(}پ^t! Q^{g::בJ06M@W5=kJs'Ƕm6Txkw'Zz& bb ƺEFyz\X=e} Vnb ·MX֛9sO?hߤ.ǼFi͸!1M7`RpjmG,)筁3fp^XMX兪 JyKu>kޓ-{4y„ t؄р>/k!UBY]^wtuW3QyɁy ee]foe3sO[xH}TkKv25XRxW3]DfkL/Ktk'wnN3Q4֟58ZN8guYN;;v[+[] F~J?w6aRm]DZb]S|W{O-t*-T- >]2rvzo,U0wUH>v^o _ yp|Nªu{_> f6"X<:UI6mIJm6R<=ޮTE]dcӠAЗoO XO?^ylԩކZ]oVz2BR&䅞Gakp/_BP=f^*HqM+{sdq_|N;_}&~'Rȑ# ~ .bZnN>_U?Qx+e>./x >ɓb6rW{pvZq'mW8 YqhWfMB"ngd@wx2ohԨ[gT4F}-[th ŋg)SOeGyߩS'PQo7dwkOkpN8!lٲ8me@/Vgs3l"j ߶5H )7b\S|V7>^|NL:/Hvm:˜I;a qH ^Trs%U ;ו^~"M7䖳~T&]( |udU:uٙ_Q2  ,Q2|r 8*bf E_x֒ {bܹq^ k֫5dɒ5(;k^_LHxsL0/Qn]N{V؄W,;W=jTp~ֱln}ge{O貽V8su}/8(w OvVEfJgn*ٺ>3w]s)vYe#]* )R$ )`lO.I|4iҤdEDM:i0ʷ>4Г 3e'b t |(rDof{@i.ڨY յkWwL'&ƌA 2d@zwZW[ kPAʞs::Ϧ:GѧOvuIna&Ol4#n%u֭ꪫb w'Ul"NrW[crw@ 4V-ntMQlS6uU?ZN U|FrlɅ r!/\rI26%K.6Jr) [-n1G4ӣyO?tٞOu=l[ <حW=vgXrQ-.bE뮾<'[N8V٘է7qŻ(iZ;0w"Gϼ1biذC;ikgե~gsd*q_S|Fl^|NWAG` vw}g}pw„O ߗH3~鴊ƍBFFII֏dl:Ngk]>^ѭȉ@d˼;vMڝ[-(C[-(u/fs9'g0DPGN+׶mۚ3<8A kDм(oݻG:`]3f0k׮\>ul澢"}W PRtjEM֭}N3efIkK]U\:N U|:5`lt+r"Y5_h袋"5jџN;4F_gΜr-tlZ F&U7#wZ8 #M}z0bw){:b[n̞=;R0VduL|ͧt>V~uZ:שtS݊ PV\ XEI`[}YF)F2ٳA|a3/=j2mڴ 4!7ֈ&ݓMx:*YU<U2T`1,㚊l"qՁއ~h^yi(G5}t_6& Kƙ30 qb8DV| >M霬1-|m;"qYN 5|fܴތd߿93s2_QٝwRCN}+?}xp/8 nːڵkgڷoo{"&p ȒPPt=p .W^|ħ~xM-ygB-Z:i2#G4Bz^7:)έ`o?@x 뮻aJ'Va*/KBkl_73f}o9hK?.qXy+!:-T뭱ٍEn(՗;wQ]|Ժ7xcZ_2}TLvZх^֥ՇS$Z-TV߲nY.` Bw嗇gߚիW'?2|p2VnmCMX-Rea썷.sέNqAN:=uz!aX}eJyH?i8+-O.>{-Y*%k`)75i)e8)wba~NmU:MA(jDqɘ  Pp7;(` ZoSLI[0(QfM_YY<\Z,}}7azqyjMgjJ[.s+)s=c(N6JyMٛW%Z餪Iu0`ju H{ {3}gOBfrrG9JʓbQV^_fzU1U*}"~*sVӠu|6uobcS ds+ꁱ$O>$a *~iIX1%ӂc&:tҥK_Sn OwT֮7h}G Iǂ$R]S|&UE^ s:z5^{5[ou⫯J:0K/y'&ӂR'RL/,S.?qVl]?^{*u }zEYDӽVt!tuAcds+7pE_^Zѣ7|sC7.++\:m n{?zk+qm%8z=&6w`}juuح^UC I>\7tzuļR}WSH1"O'6xJ,X >`*`aNLZIuuM];YA瞛رow>QJ.Uu:tQuo(e I$,@+/WoG8jy/{7tWDE6Xש;w!\y啾ܝe믿Ny'tR:tUoRͿ޼[Ziö́O~WsB{1㏖OB;rg{~#8ނW\qo ߎRTtԡ>C)VԴ.D @Vfjghn R(\rw6{w<,LQ.c5#G4 惩e˖/6'N4ݺu f>Q-c)ԩyGK/d4*$TyC1ju` xjN~zz(,ͰaJ|Z}"-oe!};s<Cyc=g'RW߾}͛oi暔뵐 IZQh4c\ot FNN@ ֣t=O#cDkzm2+ _|a_#\Gz4ϴhѢ̏K'5Nu 9XݍǶ:uYdQu63={yg'?Y3|={3]fM6)Cr:7r Ɔ۰@@@@Mn bdC     @p       !    cmX    &@066J6      a      (     .@06܆5     @lccdC     @p       !    cmX    &@066J6      a      (     .@06܆5     @lccdC     @p       !    cmX    &@066J6      a      (     .@06܆5     @lccdC     @p  K IDAT      !    cmX    &@066J6      a      (     .@06܆5     @lccdC     @p       !    W@@ $ scǚ_5i3͚53]t13;QFR>   P5/r=8 @@? 0 w{ . (Y  Ro@@WO>qL|f0˗/R<  T`lI9  @cƌ1]tQ<   [pbv  ?OfO?s'x3is{ɶemFX  @# .PvmSNS~}Ӷm[sa^{lƾjѣG1  @ -x@@ iqIyN[/c9r!s1˖-+hۻwo;ۮ];3|p_9gF>3/ܹiҤի9#W_mtʦz]r6l97mԴo 8u]fժU~g;if~{]t1x2dݼ&&Md?x{뭷iРhsիCSV-s=9V  d@@(MX}w}wzg}Tnw}yz-ܒQoy}43{<6׫W/qu%֮] c&ּiױcDŽs@kGi[-CM[-睰 +0v:'S>em@(-co$@@I&$-.@_^x|{ඞy__ݗ/ՌZ^vef]w5*!U׿evm7_Z.p睉{L2YUVZ giz꩔e ?S=OYm!X @v .@@K࣏>J*[&-.馛uҊ+'vi,ףliذ8qY|~?~1b9|ϟo.䒤޽a2&upgۃ9յYgej+sϜfȑieL]x>cwWsouxWLZr- 9N@@cKϮ@@X`A~^{icVvs뭷6~Q_Nޤ>]|IӸqc{Z^qFyI~vYVAdn͚5\yuv,^]@o,<餓̀sq);8wu5ѡC ;IA߯*n>er8yE@J-R G@@ 0wyI-iJJ`_|E[-9ꨣ2-rX-k֬i~b_|akOL{5ѭ[7媶$CjO?t;ҥK?w^bL-[/bW&L`W)7nnC|ʖ9xϝi@@ ,Qo@@R{yvԶm* ֭k~a7byW5Pog zWEj0}iӦ8 pbznsu)ث>ii=κөh9s%KL<6Or9sc9  PlZ[! D駟’vjXgy-aiI~e΂vt_f̘Ls3M*?|pƪUIUXuŠԂ֛ﭷ޲*S߲ ,e<)rsb@(Rɳ_@@jԨaϪ6xH L,*p ֩SǬ]])ۮ];7oT;S1wror9Knuݠ<-spΕW@@cK]@@ T@iSN`[Z6ۘݻeży󒊩5iD"foigAd@b 2o:3m˳:h`RG}uApp\˖9ϗy@@cK>@@" \r%sfСC&L\k?hyWn 9sVZOun?) EX־j?uO0x`%պ'H *Cee@(@]"  Pv;wN:8|r}?7.X,y 5~xvʔ)lCƓ$  ؘA  @e f͚~^-;c>6~YثW/#VzG,1cfmfZwmҤ;C g]bo|o3Sn] ojOr9d@@J,@0@@Cy/̚5ḱhN;4<9sԠWwk1_~$k+4wӧ[h]!CPY83qD{ .u}oaÆmW}jt-0 0;UVCԯ_?w6r0 X'C`=  @PQzwߝ^py͵n B W[Κ5+&;`ԅK}5J:c͈#ܬ ofƌ('p=Hc1?3kO?[9}|+^9 -cˡ8@@WyWM#gy]&ZhayG{˧.Fe[im۶,no^3u1O?U|ʪ|9 r@@X*$ԩ3k|5Z;&vU W^y >ܞ۞QkզM&eYm믿n 52v„ 殻2nap;`V[me;{饗51x`e:!URO4'O6˛)l  @覠5@@\u֙%KP*].U}j{$mcڴifԩQFv *KR}Qjful:u[? ֥Ҁ[={L+x|?gŦe˖vsIY6RC8G@-@0@@@@@n?WK*N@@@@]`lvD@@@@" LEF@@@@@ wQ@@@@,@062@@@@@nGI@@@@@ TdD@@@@r %@@@@@c#S@@@@]`lvD@@@@" LEF@@@@@ wQ@@@@,@062@@@@@nGI@@@@@ TdD@@@@r %@@@@@c#S@@@@]`lvD@@@@" LEF@@@@@ wQ@@@@,@062@@@@@nGI@@@@@ TdD@@@@r %@@@@@c#S@@@@]`lvD@@@@" LEF@@@@@ wڹ$  Z`ժUf֬Yff槟~2뭷iӦ5icQz`  @cPd Exw9Ga?|߲393no[( >3sI'p O-+̱kNꠃ2\r;&\i̙33em1c>l{{_رcmz<w}gFe^x[oիW4 _7nV^SVP{0r|7pL  @0jc@,Э[7_~-Snݜ=Q@6ksu?O6.2?eY޽ɤl&N`FJ첋/W[v1@9 \\o6?sCT#Fm۶HRF;S5>J_+q"[癊-@h֬ӧo&MJj̗90K/6h"կ_ 0@ (駟6 :4r 6y?v# V`li; @{챇%pdje^~U7no 4-c 5>c{btzolze6] &]X· f@@J+@7g 9(|vKl6ꫯOԴiS|rg({WQ&8%K|Yk/|uQ/tk׮5ѣ9S|ͤ!]9!P*uفӹs&{m.B6ۘVZ!o5?ZzG}d<@Snez܃^rF -@0돣G*fZcfֈlU.E}e~{ӰaCƝo;_-_=\s5׸'NhV[l.4vI꜎:ȧQX u_gfW0@:|d~#ӼωźG5ӦMms 6R6,즛nj;}lˎ5kՋUԬ7=7&ڵk,b {s̱UYFmdo# x[ڹWc;?&P kޖO >9mM2%MF/}M6SNfb_WMOj-ݬY3ѷo_ӠA**^Ju˹ M`luq" n'pht~]'ծ]8-mdP?~{88Jߍ. zk;h'ի$Æ U/]Se#ߺ;iɪ =,GGXާO;O?mSXkd>l{1AI_{F4) Lʯ4x\F3?[o5z פI3p@OQqLEi VNBۮ]R7*Nkl欳276NֻO>1?sʽjK.ɹ[TUV˨i5Q̧@ԍ7 K.F-3cZ[` ־KEZKKs9INp\co쥗^d} uZۦ*d;SOpS.SM7g[{0{NNR˥u޼j +f/W .]5ʽҋ/h=X% ?z/* TX$=M'4z?3-3?LzVwjf ~!IՠiDSYrni2׏?x;2XuGșE&转SC?T5"u]vkL2b-LVN?`#|׵Z%{X*u|r1"$ҥKM_yYT^)*p@b $A*I૯6#8hpg0hP7L0Ȟn3 J:C"{QktiҤI(NWFwmFmZlHY7|=5K6ݖ>wFgwqG;D~n&~>| .8ٗu jE nΝ)2'h_Kʉ't,j*;X֚ͨ VJC~XIus]w5;vtfk9_JxN&WNn VRZpY|zh?sLwy``0Vk[QR I=F. 5lnݏ#@ N;dزzdW->[p}.f:&.ȼ6pC{`$T/>Q?t=؏+VRߏ 2z|\̾;^3͛//rR#W]tIv4>IDATڏ޷ `"y?k[j~فL_mzWBg9yMɭ2 vy'ZW+W~{11x=l`WeG^쀡We̘1{\Njw5B>I]|ž7y넨N}6U*uu7Z:N*,+lK^ u9 C0w P 6QEZ5i81`06e-KsT7 48I] UΣ622u9> 6n1e_~`W$i'n`rȐ!cΞ=ÝYV՛Z@:#'*sW;뮻.4zj{ fCuyӶnk*u gRSλ r=M7tOyxjVѺ?xZ t= dG3 Vi` VuѺuk_q=eEf2G}EGX T7s ݛ2]w8)`l{FR_WsU ` 9n8s}%{Tr{7T7խ9_@igsءgg5̲֙ـ֬UӴl"roc ƪըOV?a#O(P+U@Ce`9gkelXrS~cj 2Y3 HŤTX'utjѬ 9Rh ]$7p0dy"Uz_+4uRn*[-ryrԩ^78vVٜڥ_lM.MհiϦf=~ouרQ!Gu ?Wכ4(鶩`ޏnWt:t?`y6 U m]Xw,?7zT.թjN[XvuVTN_AWFتR 5&͘1λ) \]~žeΨ SI}H~`NrᨠZZGW6I-μz43ϴ`.oMA˼.VzI|e7ߜvg tYo0V^ V[ Mz;. VJ͂xAfGЍۊZuMf-=Q?G ]:۴4S%}2٬S|]_~yw{ +z/ /$I2暴X'2o;`o۶m mU ށO.JtMij WR. /`}$! Pp뭷Mg_FZjsM@.*V f &=ZOjŦxׯ_ 2/|׽}+˺=HwO~\}C6]N-x&{z.jOe(ޠoeY1yY=oJ@`/ׂ臥 .?N::.\hT}駟[>rH߼f vɑɳ@4y3׀^$& X@]zb\+WK{tQ{w!@*U`lǍ ހɚ#N@-WLR0P)/6XɷV[ُY|T5~GzYk<z F윃Jc,Jkt G$Lj%)ۨQ#_@JZlݵkלFvj۾3Yu :ٕ^ՒS}1̝;niA iW>ek&% 7_  )v2vK-l9~eJC& +ryTTiU89@xj侹Z屁4qԈJj7eӳ'`'=`0`ufԩ3ݕ'@5ӧO7ӦM־ZF*@k6{ET9`UscRe'͘1ÙoiWk$jftSucʩmՂU`:L}ezR5ոqc`lW޽jl2W/ٳ$0Q4|#zĕԂx'д `Y#$@9ud^+1 P[5q#] c3l<\U?U@|͑O~gn|MwLV J=߷txRZ=z}}TQF`}|PSWޤԏ7O?]dRr}N>,YW qnl@-9{D(%j޼_6GeخZ?Q fbCtpZi[ })6H=TpuUvr][-v0`*'꼺 _r?Qmڴ15ߤލ7ht`-Z𮶧uT?ܹ`Vl[FO3 }ou]ɝԪU+;I\WI$,b@F!@rPARgIu}~q:JGZN8ޗ,S@#O?r!I~}nd˗/Oڼ"UmTA34J^HmFѠ:fM;=}ֹI+YPeva߹|}+(h/)SNSUcaÆŲ7@ԥKD&8sI~}ٳw6iwm7v!|IŋZgJ\WX^q$xEW`lG(]:3i$liǀ՝A6I#q{ _ g^b;𗖩%mK*Ke`J 0weQfhA[laZnm{(E;lڶm1c̸q|r1bmGI :l%QSd'cIh$(J q K u[}gFvR#uw^^{G}Uz5UT}yb<) ԗ#އ]w/Sζo,V>O iЩ?ؙU]  ~IJ+I= ygvm>MfMn=A?uQnt\WtX`@ Q@X-;L2{fnZc2cxm0ntRsu;8ת'73>묳 ;/8cޛaYif#FfuRlPٹswyI|eݻޤNzﴎ5U@Ya"?O)⻗0Qr) {%@" LEF@J';z<;u5jfm-̍7[jF}8*`_Zm/_r9 Z,[oRoe8c bߴZs_uUo-נ4{o3hڴy衇,u}] :L<94009CM>}ٳ}ywn8 2CjMM]tPpAoݛ/ĉn20 Lwwua>LJ @Mf" PzW}a \il9Bf/rR}&lKd-P7x÷K/Gˌ&uֵ׫{s=kGW^ng޼y4U[}vn}T0JSO=~<\߿+ l0Q~jX~gwytp +_=\ƍ͒%K… s D}^+PۤIm; nz֛${K-Q~>}{He[li~aSf|螫=\{ZFLZnU:yxx5FU`lrC([uU*5TL]8Ss*8ȑ#PE/OqkT}Ժ[3|ɾF6lXd[o}ё󓱰N}+֨[Q&lb4Uǎ3Q iukvڴiI6^UZn0=&lŪo~+շ9s@ .d@,t [jÇ,I}Ι3'e v=4CIVԂ7˪yU^lsɶ( ,GNj>.^?Jm喑{1ӪUeXKݷۂb$]vQ=V+xa @&X Pq;SRjM4I:Vj~|4j~dX #]V8q̫L~qAGy$XYvqG;p{7`嬺.H8| (nyꩧnPͦkPguԃWzL-j} oQFޤ2WSMs]RaY*+TX E5s"JF  @j ;sL/O~7vD}}vhа ƻSVeΝkz-u_~Ν:uJ WY*vbj1.Zoٲev VtV]-`7t\Ѫjuh?![l'a\Wb ^ፀ U`lT)!    yMAxE@@@@ *E>@@@@@ yQ@@@@*@06@@@@@<GQ@@@@@ بRC@@@@ E@@@@@cJ@@@@C`lxE@@@@ *E>@@@@@ yQ@@@@*@06@@@@@<GQ@@@@@ بRC@@@@ E@@@@@cJ@@@@C`lxE@@@@ *E>@@@@@ yQ@@@@*@06@@@@@<GQ@@@@@ @m+¨ɇ     SIENDB`F r*~95, JFIFMExifMM*bj(1r2i`'`'Adobe Photoshop CS3 Macintosh2009:06:08 14:30:20&(.      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~HHJFIFHH Adobe_CMAdobed            *" ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?ȣ+9}*{r(%E_o$?qGWn1q $"b_Qی\BI)ȣ+9}J{r(%E_o$@6V>LojC5_%`f3"&*3G;FN.OF:1'Ynb_ޯڗUmqe csɘ-˩My{_ /OXaɪ廞3k"~_*e40mpZSsq9pËZ9NZ_, Ξ{p{VEkj4Ak_>?]wԟ9?;.q ;D1s|xL#I?.MdE0IHpLZ>-wE%,bcG.JdOF?W )Ixp?4)I$Jt;tӲKVU[]$k1wŬ_Wfw;f'_3H ey'zN!xjEB?/bݳk}/`9O%{;:cvpHnv7h1 O:kyofuC:4ޗ]{kkm5Xhs~w*813M-!}:I_8Oeo"̒ C>_fbF=BW/rTA斝 }?Okskm~Aϩ?r+ݓ=痘TI%)$IJI$SW[C ``Ji;tw},g|jaq~TԵhwQz}C R~іVGn!755X7;_L?FiԺp<~/~r}<|48{pO<Ǐ1П"?GTGˬIW/q?wΪ>8yEW\gX?gyOw ?}>{gAU},;K_OnEOƖ6V$n[)y}{G'kk7'g&Photoshop 3.08BIM8BIM%\/{gdպ8BIM com.apple.print.PageFormat.PMHorizontalRes com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMHorizontalRes 72 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMOrientation com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMOrientation 1 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMScaling com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMScaling 1 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalRes com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalRes 72 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalScaling com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalScaling 1 com.apple.print.ticket.stateFlag 0 com.apple.print.subTicket.paper_info_ticket PMPPDPaperCodeName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray PMPPDPaperCodeName Letter com.apple.print.ticket.stateFlag 0 PMTiogaPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray PMTiogaPaperName na-letter com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPageRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPaperRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPaperRect -18 -18 774 594 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMPaperName na-letter com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPageRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPaperRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPaperRect -18 -18 774 594 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.ppd.PMPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.ppd.PMPaperName US Letter com.apple.print.ticket.stateFlag 0 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.type com.apple.print.PaperInfoTicket com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.type com.apple.print.PageFormatTicket 8BIM8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@`\ 8BIM8BIMi72-Inch_Poster_Header_LeftnullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM8BIM 3*NJFIFHH Adobe_CMAdobed            *" ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?ȣ+9}*{r(%E_o$?qGWn1q $"b_Qی\BI)ȣ+9}J{r(%E_o$@6V>LojC5_%`f3"&*3G;FN.OF:1'Ynb_ޯڗUmqe csɘ-˩My{_ /OXaɪ廞3k"~_*e40mpZSsq9pËZ9NZ_, Ξ{p{VEkj4Ak_>?]wԟ9?;.q ;D1s|xL#I?.MdE0IHpLZ>-wE%,bcG.JdOF?W )Ixp?4)I$Jt;tӲKVU[]$k1wŬ_Wfw;f'_3H ey'zN!xjEB?/bݳk}/`9O%{;:cvpHnv7h1 O:kyofuC:4ޗ]{kkm5Xhs~w*813M-!}:I_8Oeo"̒ C>_fbF=BW/rTA斝 }?Okskm~Aϩ?r+ݓ=痘TI%)$IJI$SW[C ``Ji;tw},g|jaq~TԵhwQz}C R~іVGn!755X7;_L?FiԺp<~/~r}<|48{pO<Ǐ1П"?GTGˬIW/q?wΪ>8yEW\gX?gyOw ?}>{gAU},;K_OnEOƖ6V$n[)y}{G'kk7'g8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlong;=FStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslong;=LCntlong8BIMRoll8BIMmfri8BIMhttp://ns.adobe.com/xap/1.0/ Adobed@     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u{jIطoֵ=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :׿翖?{{PSHŽNuyy$?Obῧ^:<'o~ӯj{{jIطxo׵=?$[߼7ڇ^ZCD}-uC-O! :җn6>=K'ݷ^'7Oq}qd}?w.g< qN?N]PwULϢoւ-6ybիU4R_s??vcO/~نl]?hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XW^?3?ao?^ غ ї,?ßӷ/~نl]{{g׿ iwhs.Gej4 ߻4?a^2us??vc0틯oں9 ;~Mn׿hyam]{{w7?b4{F_<gN߿Cfu=/XWF뫻GbFv_Zg'r |F%sqg]Zu.ec77r>r5X]xjx_dE$n+J;'o1׶{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uBIrI}M^nʣG՝o Tp͵6G)%!DT#ϕ}wu~Tc 2Hq*dw9Q͜qxϸXO*#HDcх{6tӼw'Qt/G=Vj [~ڈSRtyvf*( S?_;r?/>vB3Gmst᷆.˱%A,Q# Ԉcyx]m gE9 *OYHIT ă mOǯ{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺKu^ݽ*bZ&<e/5a~<=J^N0cCnU=[.a[+_,#< *3SH~QV˻_d{{m~=\So- O54b) ,ULd ?_%#Cmu .ߺw]{zUK–1,TS _p~^ּ̝.k;I ُwq,;NΧhw&^ƉIXme  dWRI}1oynvildA&t4yxqm*g# p&HS ܋ohciW)"5x2w{;]7n͓s&Gp\vo3X׸r/$Gc G q`pu弹FcNe^ݷm=mEV $P T7~~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^JxQ[iq4V+$:c^Y] $6wW-m,UTK1'q' M<4fbT%UԐ:X*RdjFlfy ái:2"['o;[aY W-}c(Ä@uܶt+bۥƞ\bgݲٱT#Rl$9 YJ巼U?'I] i a6$:9Y?1jd5x&TB?'Qp?]^j|&AS9=c,A۶. QL#*@POv|G Ư}#m!$%׍:O'k XGM[:<"lJ{RjLi6ԣIђTVH9ϟs^rjdbn2c~8dCU2:B+hbQ)$|wdjWS %_[2)er9FV-VC#ZMO'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ UݵY.9 ʌ5L%6S6ƪ?w^s縗Aɻ\ QiTTxXɥtS]ySl7lPTHߨPK6ѺLٺIal>1Jk0ewj L*,tvs;s1m,@{ƄC2L8<ij]qU8KhS2IWQ\GL|`_ԋSqgn2d7naJkGt=g"{G϶7i@32\lO@ȏA!]ݡ~XN멩2C[&.14J}E3=ƾ}IfcuRd¢OSZXQ&N> {n}ޛݖC7a iQ`~,/޿W6_겪7[G& d'ɷ=Gh̲2)q3UX!Yvn9üj3bZU2xΧQSQPIHS#YĒy'*$ cz&A:k{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ\^HRF;E_ٸt$!cE=Ά1_Gd6nۻ:=[WjK!x'ɧK匑f~l#l "@T4de<5[(QI^o}\^%mt8ad>Y=ŖvG3#l-@ #8#]IKbr܇~SWnևKj)1B/ hzNyϔbMkR&a3:?=Zomݣ|lm\>~QDb^ձXGlY(CE/ƁQG:pݯsKMZI]ϫ;~OU#rvM(kaVSI-ߎ$i:XeLl42F3ۡ%7*6<a\MwGEAVĈ5'o}6kύtJ\dcaD!/}6 f]MYUR0`yIJX:V<"}=w?73]^-+2RgmJF"REa=Eݝߦ~, TaYT 'H% ,hBYGpfg:K5cS/u]{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uچy`$d7V=-4!IK[s( hMϭ1 #$$$ՍW%;f7^691h%}O^{ol~~sЎAؽo*|d$`fVSTCmRj<;VoI.dY84?.vf7d&zUIipZ 5 C#g_mDwqY~J )V5cF/3Ra_>=%]~ze%ij0FxׇG͙QYݕǀ#YhI>]A:W$Z#?'Ǯjk;a6M}7[X=ſ GSp%dGo4w\}:7Tt@ YݗGk.Tξ[Ud5iL(Ap>BIqۿxɵ-^[lmyiX T]. :xo|O/K=Qv򗸼"wC Qp{tjW0oXpq =07"F((UP>Tp=1cI^$뗽u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^m?d3R};GR}_hy'׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺR J ds9Ka*|K%>?@O3Gow ; V ƥUU 'tŽ^HHʑ6v!T|Oӳ=5ϜEPqU{/#L$7>ϲͨK\x@P&gY#lc_g$rֻPC]FLvhxTG58%Äë?>6 q+wC.u3j4q%>2*js`|WEjFmMڊ5P#kKt6" XGϞ{3s RjSy<$43Я۸ wcRy!m+&kP{(hʝK,ª6zUxm}߾5-]LH¢QN*,mA$H z_n~s؏pF>=ʰ lI' L VSê Won6b6UvZ][95GMs3oǹ,+\,k%|$I;q4Yqj:d%DHz'UPTU ,u1=KĒjrz޺^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u;grg I|R͒ǤLq~۵[{v3R8ݏDPY*O=1uukak% O$Ɗ<܅Q$ul?wo/n.7A96̗ք٪t q{Sd_qfotzƅsA2۬T c\m{Q6Tn(|DeeaOn>86NjeٝPdv4O:pntÏA뙪XF4? kìt9Koh@oR#rsц&a~66C]~@R2T`0Xfe0Hd5AHxeݟ> l.xQvKiT^mqwCmz ˌw ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺRhru8] vW-䲙:ɛD4uĀČ=;ۡy敂"ff4UUp'=5'n3E__̾BñwjUnɩ;]aﬢ?"- ֳ%5=;Xi0>{qF :a%rc#(DHƔP3y$O"33YIcS/u]{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u` /%!5RM4(anlOȢgĥ'y$2I>@yë5q2M{Quqc3T52sWF]e:RN\c=^oŶ!7r-xGlJs4T$˃~yίTu2Q,fj<:CTL t_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ]3*+;,*Ibx,h 4@|j ' Ψ#^fͳ9c0іZ[$qݻKeʲ*mWIJCJ<ѷP>K+rZe,q.RªuCQaz*QpX&ݑ J*;3{GK; DRa'PQCP蚢{_R}i$q] gnX(tI4GI{;n'vDyx_v_j4? Źw>٘,>xjfgLN#J)!\krar@$e[|sTh8UQ n_Gm0Isq1Q#<ފ <:F2?"<`Rۻ4x*f#M6XI\4u1 Qo|aa^.%ʝt"5<+on®sQ%Pyu~.&s04j#:܃L)o'sWo~ ù/[X SxmyOeݦ$cQpK3"뎢TQoFsIgE#S7cKaԎ!nDG:.[jUFqcVUc5jIc֡lx6 &˛&ݴI(Ê*+psmܬ7MQ=9#P*xt쫥{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ǹInE+3TEst3bN ZZ wZ8R(&(ܡ,^TRo4̳4:eu #G@x/^DWF5:]=57uR_dSb`AqY$OpVH`qo}H{q,{6wAC'zGW"'\u~9ǜ|MlsT w2Y<0ÌpJ-UQUU*"ʪ0B(]c%=r;[Ӵv=qC^﯅֣50'` u=ZWʪ}bNe-vVӓ6Vo%O kIz|B+xdgxCTgq3f6Hp.n+ J O sD{y|Q?cij fkg3[3lc8j,N.T:?ԛi2X H毻/~_|#jF5FLJEzɞ_{W}ǖFd8&LIυEPkҒY|$\[c?_mi,Ϋt_/ޞn;'C𥥜SOL =GA_䃮hzP]Gd% ٬mS_>{d`yY[+\-B W pDI\ǻ6+f 3WeIFN魁dᥫSn̝8-訣aS{xWU̿.bX?wyZmP-@2vɣTF*2*p@b/yx$Xi$3<#pKw.Z~VqS%ڛNds퍦TS(Fܛ9?hUvp^9ɬ{sɥdݞSΞ<2HYG#H$h*&fg: ,jƧ^ֺu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^{ygOg3;t|FꜶg#(SP+9Ti$`5A b7fٶ Ynm)H;@ 4‚x-r۶k wM;[hEdW 1,h@-(9fU%⫧ͧ`,0}o,cICWzf~)J0۠2;KB(H:>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u2,*r@ROI^:I=gy)k6 Hl?n9xaMERcRӟy-(CdD_lsoǔB/w+{ T,D++%ovMC[f6_߽X# KJU18low[\ J%t~#ɡΒ9sWxyVu}5|/Y d">=WOx^Ԋ![qg]+CG7PIN1AϾ{g K~!eu=)WWjƤp?r4] 1[ [C_@Z0c0xk#Ac)ferv>3-Eeuu[$QE$@$=ۭ$%H K$"; %I[[ۄV ]݉UUOg{[#Q>2ObVJ;'v&N Qj'ُ y7# ߗf}s2U!Z)eƀ(FdmHwKu}ɸ}Um nh|摃?&h _*;T^Tjx*t[mݵ}MUWN~& s?>|Tx-*1*/H p:V_N&ͳ&DfZKtU(.cb2 #V'I=ޚ4=:K3PZpuz^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~tHPYP$OIh:z*ғ:xoi4lV-ߕ4s"j?}MR-_Jձ}!?iDH0{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^?TRtQTH݇lU, ]Gɼ.9eO2FJg>omDʎTіUgFYEqo|Fݺ;nK}%XUZgb„)!RG&'?݃93G[Q7n2Lجnvym3,qHOS~r9V DR9?MŠ+f4>?g.hDdkxd gP+\氹ˆŇVsxd9o"xa}&ټKis i)tp¢uW[{4w6 QGBUOM˺S׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^қfl=y762 6d3'jѸ}Zi#Q0)s76߮6\6DpD+MZQXEK=o;˶Gr lm$$J~J\MV<'= }}K3os$ѕqڤ '& 91G% <:"A^~܅k[yڼ>9}[M,oFi+vTݭirjw4 PR8ƺV=N?u!}pw{E+2Rب?&8}}pCz6fDžb &Ҝ\N4TQQ)144=%RR zx"T{8-൅-Qc0Q@UUT@ iV˻1,Ğ$RI=IM~{ߺMymr9Ŗ`pXIٜu.3O%EfC!Z1"^I(Xm62{[@WXUUP2KJl76y`jQf'm'LVJ,ue[ܔzon+O,`a| ܱVMDEN;sAL0!97E"tdۣrDQToe3\w;gsɲ9j)d*Tzcf"ΐ)h 6q;n U-DhCM#IO#[ qޓȪV;;FHQHn xڝuZF wH[52(]z_ʫzxd7GQKUqQ~5m_˪bƅ̟x>|B]orՌhr{]VYz?m~|=B@9[3O0C-TkJO0a\GToE=\?H'~-ݻ99rˀ5+`./Eudc@=tۿԻɉkmj F3Ta,Jº"s}vm..!bfSO>SduLg6v~/@iiƲJzǖbI>#gyRm|cn |;x%'͘ 'jOXo2^^dG EJ(thy!ic(RK,@UP f&r};HeUM$p$q`1*I<dOB>Dz&gMK[pYVɁEpi㫩bP aw~Zw$m` LWEQ7Vi)E*P^cSѓ`䩍5-)UPnfl1HENmϸbE/YOJu ZjZ|#n5"U+=8k)>WHa0)(vUK*׎ϧ]}/^[9>*eVNY]`Z ijCFID#XYULO{w"9}g3kkTkkH5Bʞ$ci;_iytZOw-V:/%a*Xϔ4;v]ydFJ߻U4$JC1E7ō-=0f}y[/hšB+Bҿl}k-#L2 O'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺG`f8_XrL3};FUP $ ) 9guAr9O5,}ږ3%hM5EO֙fuQǨ3guy[Wk:4JYYRLJ[g\׺u{E/C3ÝٲBE'glzj<$e Mӎ R`@e_:肦I}}z).:o,A. zLtG4jMfm=m,ݴ;Z0+;vIkk{|YDwA{F w Opj0 T`03 Gvq}>kD P(S\ J-C=ω`f]•k)ʬ&.P2FAr?B|Թ׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^N+-2 Vep8k%P +3g}mVǷm\Lc$iڄDPYHU`top-U8z #E_+ݘ(]_AѻVqƂw7bSǷZ:Z7j6_yw>i*lVCǍv˃c*Ɩ9#l\cd篽o!{.UԤhee2KN4= 8L8t ֣twa7f犡e GN6fo}'b;m[E曉*!@xbha={W?o}-`_I2L>SI @sPHػVmFܤ͘= !i3DpDG>V$d\;sn}ĞEKy*#[E©8ck9np5+JQEQ@꡻7͗Wع({49u|~f2J#(r~ܭ6luT JX{n%^!ͫ/Xu? E?^.ɷ5aͼ'ΠO5"/or<3#_DJDg6tVg^Iq,S쫓,|qlNuǷEHu2 ]3ܤ%EY$Y2'u%QXb.3I>Λ݅G v(ISxbi&UR_5]TM)#}+r-N/vVp0rŞYIj Li'38now%ܿ T *"DUE@}EXhf*zzxy"bC$M,*,ϺI$pQA,Āp$80Y$$Röonj~O*!xd;R ڊ[]h/o}~{7-gچKkxQr%d`m.QW2=;Dž凲:Y,)s07n/|&$gvIN5 *̍_?Wa=]vu6 xҦl5f\R9cR~޶)m΋s|ϼ7La ƣwXUVh, *#42MINV2O H+kkס?ػ^׽ujJ:cQMSO0d9:8! ^HR++ 2 NE,Jee$25A# uM*ƺwZn<}w^eNaL*gr[JE58/O\%߽dگYSƑPcSE"~߽nx{/"+%H[bq&I ^E+/gmݘM6#7Na!r8ݔ(p@7O5r&2G$ZT@d`JHT6hބ0Yɰnԛ-]{k' #5t:99EWk'W{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u`P.ۏ}Ym|UNVMVBHHQ8ܯɼΛma5Hcg Tͤ( v3N|ט!:'Vv>HտtrPl|ShnɗW3IqGRE[p}5wrRYFhM$I 0q 'aϥ8ǼA^v%64~$ ͢==ml6l^PVw+r'Tc0pϟ7 nj)$ U GICw@]\nvgSΒ>:htxYXjw {Qϰ7<{Ⱦ~M F:C@X<ϗCv2i:3?n`~7l !NJjlMiJFDn>}nW>&]LyvI|Q[FCdZ]Ncfo!}6Mޛ&Д, z*XuXx\/ȯ]2z_c)jNjv62 ꢸ1,I d8by ؉Y{嵍kvd:Ջ;)8Årbgad[}oLUk-fR |=Z=g[ڝLaT9"T>z+SMA/'tOa߹F.2ml?ѸZC*Gw>c^V7ċ@y"F{n{^_Of˽_tSf ~rn1#l`>jYP"0y"4'fWb,⟧UڥC1aJX 9MllgPPxH{QpiŜ1/v9UuL8v&OtS&j{7M\h!Cgȿ|ԒamcnuΠᮤ2W!CL'S#[7N2-c5N3VfXD{rI5=Ojzu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽t{y{T#M6le*q9 7zJ)ZwIMPBF|{,^cu$24mBAe%H%: tY?1mϴo^ڿE+Uq] |pqa?'-IN;OacwVŇLdôETY($k}ugr\/*=Ԓx:JƧ}Y\w>Ӗ5e=I1lurmջI28*4uRQԨ#KWs'{*s+sԻ(ElTHQs'*'Ms5W $Zj5#e$C!cЅM^׽tw_A?m.흡Y zLܯYR45J *d }}NVIwt14Q`VKEt%H9݆ʷom.U&H8`J ퟏ)ou7U[CE6;ͺ8m4)}yLlv %E-2 mO|>9G^%XZ[A܊-Ez :i$3; cP\-ϧ ^[h\<?pf6[Fܵve]X!|ca䚩nH AhX..ZOJ=^gkGE t>~RmØ[khY%c) ev*SAsnR-1;UU ֽwWYDln *_V9)$xhL?v^ Xf HEj:m˵Wj=A9W+]]]E)Yl>\fce@XWSPz*9>Ӗ9G93m],aZMD jv9^Blza~a^e\JQG/}"׺%?!p_; [znH$;d2c8> J 9a.o7Fju/=׮*(U~ (@y9sݮ6q(|uTyw7>~ܻ//1ORe E2*…x[-Nb+;%kdcJTjr0fqbnϱ[)1-Q*>Ol%nɓpbW{wnʧv}ng@^J|7񢴑)5q"s'm>6f?af|(2V1$qfC3עM:6հ-]!<uy<:UUhZu%u NϏ[2bFբxxsd*YŒXrw6j{VEq,q*F/nC=9{B3,o] qd`gsz\`{V7[u;Ges"xeOB?v=5Q,t 67Fܻber-ɷ8>-<}ǻ.$kW8 ,mWKkCK-m^s ,r7Lˮ#FI ~b-ed4`Az^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺKػKW!n$Z2q%&B SWA,G>ܟ|;o\-cTm@µj!4&9b4苘glm⾶jJ*HQzpx[gp[1;iCm㥏eVѫp4t3cmSNY"t>ϻx[/ )_[4 RFM^Yؑ 1ܟ=g9,leYΐy$9((W96w67.-f';e*W%V#BE*\>Ͻu7;-fuк *  #5vhm`$Fd`OG ä]{ߺ^W|WmOߝB횓%]dPQz{V0,-CY+XWf%eÏ|8ϼLB;9ȊL23eH%YZyć]hKV|HpS@(#%:SvGI ͅڻG)wE"GD+B$1&[oeSd(݁ QK#7G d@nw9줳 8u5JH PV|ΛBovύKFJK Q4ȪHyЇ{^׺u{{^׺u{{^׺u{{^׺u{{^׺uK<4Q@I.O D{G$z K}.-rh͸`U,~I~?>"3#ZY8$s`)* ^[Kj$!KA_\kBQʏs.L|R[ԫ\KZ9O*1unxofzN<#l|5{?1W.ٰIJ<2b)JSM[ 71n6j|$_]Hb+bu|^DԻ.{xÁn!z}m?te}wd[kavʁ(r?&B>-y@-&(mkJo>_ϨusLe35`gяʗv r rIIn2oSR`j4r5lP.vɯiFu5d[=*G˨s{ɸ{lǤ5*J _Fl11u-#v~Vs>؟f i;sS+{ֽw/x݉` s$JȴR-b-݈. FbCv-f]Ec~U }jܮ>=(_׽tv~J%vhl&ILuQP*8ƦhՔIECYIA|7"r/9vPYYTJ $B2ʅA&Ȝe*<;E2! ФX2:,yw L{AGae_l-q#o+9> si>3e?ļyaA-ŤNâͮl? 4= #Z}}ָK ,fz|cYl&tٌJSPčHя {g,r}q3/YURpYI8t}1ɸog*^Ic;q*$Oݛ;;ŒPvPݔ!`>j;ců^ZՉyּ-mV#ʵשA~^(4?mʝ@L?3mٟO'?#~6eX&h7ӧoMu_Pi2>SFOK;_SWV#}XyX?>p_g ȶdCenT2S"d1_SC*7I"U=OFbyGV!v Pj^'GȬ2PD-ylH2[Sadk)u i5yfbarR~KO v6S+[҃O_NtSVNPyFZF'E .%c []П{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺNown v"?w&R bWr tTHf>v *+04v]Ϙk}f.XYUQI7 ms`FYQUh$XLKjgjzv{Wi>S%JaD-3?nw䵸p ۙW43Ã0:du8g_|[ek\a/LjSjU>%SgA.m02U˴145ISSidv+ /WjjUxm$(I>L~Nr[MBR#ȕ翼.=sG*ʴutuPsẼDBs՟.pS*RRMyf+A{Z׺u^ j6?kJ-ɉ,ƽ.wm]4&cl)QET\,Σ.lرܻկB[Og*ok?kOh>#|k9OΉˏY(gnVE>mlE,MN&;+T|G(2zu>OG?+7kٛlGL-pagSD`ӕyc̈́D;͹v{J;tZFoә14z{{%0L4M=i ?ßmp{ߺ^׽u~{ߺ^׽u@&}I{^n`7LJٻ{po +i"ͥTQabNOv,6K9n! , zI~nn"^yeϣWb'*ef;DBplaaǏs+}~k\ixoar?(5wWYv/್%;)oݣ l_]J?n5 ͊o"ygG/8s0Gi 4lW&Pbr,ޏw:?8YIokeܘٕ(dZ},ɎɈMdŅ%CdPf"m w%7;SnmS՚L5o:a;oSŒ٘:з^vk<:>{[%_c$N}4O0+7"~gVAVX UPUTYUTpAE(${]"7fu]ӊVǦ)Yvȝ/R>bxC\-{>û7r+F%mnSnn!,x8tu1saqz)2LkթmrQ:snPvz{em$0<_QSÄW =UvRುϸ?7[..7i<`bڬjH#NvU5Eq63[E!ҺR"s## oq5TUxUDck%\Kx/fe{thaS,X΄=.ǏQ5q3EUS@+|uVԪ}@g3׽tw/uw?m.Рe:;!vzI[]/ 2@oʭ9~Il{VQt+RE*"k$TWJ\.D}vrr ke0ƾW"#{}~Ry}H1nS̸Ap6i l,9ߣhvƣ %ی| FiIsFg't]ٴn^OP4%{#ve{4IQ#;u$"9 JhgjNڣjg5$ IDCD;[{^7Y0KXgl{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺVA!۲`vg4ݣR-Ώ!_^ȣ_+s׉!7>]cޡzYWkQqOζ"/C򮞶s׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^s7n%n=sB~ASu>G߫fj$mЇnk)shhun_ud>lj)%$]r%?ͪ?o}}*/yn+@ZZ`}ԡmBK^OsfY0U}M`YJH؏J7Q.O+޾~ngU7LϽǺ@-ށlQo$"j䘡faFPo^ ~G1T@q@o1ZN^B9+_dIWA}G[ rQ?.6y6wa5qmY:W44V7︷Z[YnC:V }v>gFBo8H_ E7{|=UpgR5}鉉L| [s'}׽MlZԬtPp$ g}uGEq*xVz*Z*ĦO*ú*'zzCS%t7vY㜧蟞_6zGqSZyf>RWed9MRceC/]khbm=x?bv& C( 6hحo-axGIcHT~CSp-n\^YG?k9,oO̺Ej1a֔[>;ݹȕl{_w[x{- eZ剩H^}Gܛ<G($]ʟ͙ە=ܻ3*~6G!5U9ڽu``Z޿~}ÿMw{ж,bVlցɧj,D½J>{Em&ͷn5=$0?Ovhu /z-7Wq,.B/ؙty)䂑jJ5,G[ݽR'W5y;6 K)V* D 7fc}(ETc?4!%SgOuIm6oTwRhQ9J%]uIU[<3\X[-* P41ifzcĕ@:geMͷi $I葪 >]:Go]2ϱ7^ fmlZj>:7*^:hr ɤi ,ȹ67g/Y"E]ڔH3E$ӣ}`rgYo.c dYڊ,@Tmc՜{Lad ~glje!Fwgv_h`x\ -5[8*C WFͯmEϭ~\\O%.8Cw ;xoϞ{&Gn˒e&E7NԓS(DU{1s?0sn&̗LjM#HǍXkD^:gv 6+;X@=M,Vc$Cя^r~׺_SdzRrjw9IwCZ$B&btjXPj\LlU9_ոhj(fP`x}l"}o odb7T=)4: D)Ĭv{>뎋8޽ڻc_V'_**Ufs)O[[>UT0 KWaF,bwH+$`.!TQUTsC9z{l*(AE5҈JHWo{^귾j1M ݏ؝-=lKxSduG a"Lg4ȓTG˱l=˘ @ 0ڒ;Z퐃0VYYh]W"o:o{ƽdb)-RXP& @: c/wq{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺJ=7_v^boͥ F%DgPc)5G4NH1oZ;[^YȲ"Ҫj0AVS#*JhwdaqRg#*ѕF Czξu;cMktwUK _ zZMUIUBywGw}-iE-uUѡ˄Ms? sM7+o0F$ݤ2f$#8;-~@rjcm0*7jG\ƚ?Oύ>}'a5>~_]0L)^u|ߧ}CIqmͭ}/,dѿ1?a~ȷ/zTr@Ne$?zzqgߟtLVFm }7:v=սCAqۖ]fI2i*V?FP;<Ž 6a.suD'1)FT1;Q wiҥm#/,fǚ3FH 5n5x~woeZ*^g _Kd]pVcNRHܩ:7 -k;yGBۮ"x'r+#*2:s{ߺ^}wgO]]MbV)vlߋm+YU )䧎YBWV4{Ok7n֮ŌS,6[O/TT`*oS%-o((%"&p%4FÌQW<6V-X zEg*=տԶ&PZ!W<>g0Cұ:L< Cb"r?تc`'J{`A˟wV-;$ˡS?^ +wM1{L`m,IU3=; {<϶[`?fN\c-e~ՇC.:u_~epy&G79w~.Z>yk;jqa:}t 蛯{^׺u>3%|9Y1Rd顒"5}=
^v*{ЩvV;hD H$/).GFOܫu j*jʈ))) Xদ3,B"@M4[ff *,'dxiTTI$I' E|me%>?|@M䨙:Uݓ%F>vD#%3 "ܜ%ٽT޷Q MRuLd+K YeOyGsdaeS[`}f < Polwo,M)SU k;r% dK4=swSn+ JiU% jh*WQRsϔy'ymvQijR?ҵdjm+F: :~v4i*zx I**'qDG!4R{v&`RTx:*] II$2I=^wO]Q8WdvHԱ%%F$ Z/}' 9YF$ln>h׾j?ҷޟ [xt)6ɖʼOԑO8Vn֎IKAAKOCCCOSRQSD!*GhUҨ E8*"U@Pcin%ib3YbjI$ԓrzޛCO FM4αC 1)y%G *`9>$K+UM$p$ȏ#RI$wO(W;D1wWIg4HA4"FO*;Q?&{?8w5I5-_UVYPфnj|ibrTMC5DU3WWYQ=eee\UVVUJgfYvgY1,ĒOf\\^=۴K31%$I>g:"EDUTUP(TP* ?lun{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~1Y[`W3M^w$C*UW yq5,~PRf4ShpfAPa c*ITDž{?ɞڑC*O_xC|7]lgL|96ۛ*7XnYF0En/Cx~PPPTGO# [v9qE32Ҙf" xm{8[w]/v"+C__R?h|6F{^-.~>-GvH cY%ƅi3{)QT,7t`;'+{K\hVdTQz%(PH T0dfV8"q,\x4HT=FFT`j+c|M˞zҹ ŋ PRT%0KSr JWOwe㟿v^hnk"ۆ#+^,WJ0EW7k&f>{=/{j,$ cƵԷlEZ[V9tKDk,Bփ$S/9u+)0XLVC?Ha0ڼbW6XxyXD0vviKm(;qҪojoeH U86w!W=XO*i9HI[)7 fazH"_K򳐾>ssĻ-PvYJ!m.na'\h; WQxgW?u[s40)@6RO:*-ps?W+rJ۞nRX m(鐀JVϟybnշB߉`>&A_TqZR̩iूh|S/QjjY䑬٘ĒO$%:@T4ijq,I)toUy\E.٭S:e0}F{ͻ֯3D7uSҗٿEETcTt *xj*aoE4Ul[[@ַq#e`xV";J;G")*(Ah.ψ=jr}C9`W!7jۭ>y 嚮kI$9{+94ʶITf>m$.kSש>~ry._+.MRG9pWj%;Sm&R/ҋIc_1;ƻo?20+$`k"y[l`m+p~R7K~fϿhvOUCsa*ꆂ)V)5dԭJ1C 1\t{卵Ȝ."W3j 5Fk7T-B:e<MC"ݳHEPT"u[gǶn=>Fslנիe)ZX`x+zˮ) co-uAFAO,+4 u ?vjz>,"p(ECFYՑʮׯ{^|1.ۻZM55fc4^JJPG=k jxj ww7:U,`!jY hu1g;*&ݪ{8+ D>)g0TH^7󏽾Rc^iv\4zhm։t׶J4\}LZ+ꐔW*%Ʒ\?WӺpZ+\u<= IOR{{^W.ۅ}yxMaT*%T԰%媬 0^YE[9w9w$m)b$hgw*gvTV`Uo7-mSorvK! $hݨ7?ó>9E^MO\#j>DQljS-hY3Ƴ0S%4fA7`>u^\(n;- -Հ-x0ԠicF>7pN_v 4+ZOwC\'L~kn20]w.zƞ{{;o|NJ{Knѽ~g;Zj*8EݤW++K4D#^b=i.]RK!fvb#@#DVf̛;&nWw 8f> *BBF6-&Ke6E ^ Gfݝ6Qd7 wZAȏG}:Yy[%[:g❔1 JyZV=+[{r1h 0W ;xBU }ԚB]2M ~7f^lnD[\'hFSUeu!e A=ݥi.߸DI"Ut`U?mLq]uX(>*OvPR,6Jx D)$'rQcpj Uz}/LJhHV']ƣO 1FŘYHew89w ,8ct)t׺,w@7evݠӬM.ޏ*&Z58@"&|\\ӼA`D|{iíJF†O'{E/>i6d1 M)Djq! uTSoAu$TwafVRj}粐}Q8WϟWgC-R8Gر`Z̹!m;{;;w^c RnSSٺ*˶vTRU^f$.}\\Ӽ-ta h!F4Xbr-m0C2Dt#(x% iƪ?Hu9$ԂYՍz@"?폺LÇ]G]|]tN$<ؤI"hVp_̗IcU>|֦ s PીGV#)dL6ˊ*cpoLQĘJOUo~yJJ)@X|h|tuo~{Y!z6eHI/lbb~d#z}zϳ(a't 4 HPy?t6‘s%M~8BF9>CۍT%ԗ1*?GOg /Svq^E M= [dE6 liNr{9pٷ [Ε¾G9ұڹj #~NoaFunܒO8ږ!+B%?"ZuTToY$UpWcZ{Ao$hZ/!VЭ}̳i-Q C=Ï!QFqj:mS[U|Nmٔ9zjuޝn]SǩhqsKo`Ei*|(AGMR.o}~y&?Oi> ⦴2LG3M#s'Qo^wVeس4Ի{oc:ϼ2L63Su2@In! Yc%hج P)&(]pxVm&6&(bBf*HiA5`m/Q=ھh_e eF?9%}(DQf6*O}cC#pPI$zR~ >]YT^$$iT+0)if|ᆳ`l*v0h6f2Ӌ coO"ɷE۵řZI .TQV!2|ۻ,wyaEnNx t (UE8_t|W_wE;.f튳*d{sk G@B(UX"0*& w$n[˔.$JϡaGbdb0$nZI,Mϼxwy \XW=럺u{{^׺uM<'{_uhFթ{OsQqu*6^TSfWK^:Du)5\odlcʷQgSe:\8!jRYbÓ=owJU,a* ĔeCVHWGîn}kiqv>dwT-b1Ҭ#uڏcy]wnj=̵@jfJ<#s>4ZV+Hy%8)wA0~V?{e`=EJ]Ռbbv:1Zز{$Ϥc)˺ezRT_u[vWgKi÷Ph棫L@YYexXݣo;]дrr~Bx@A5E_R3ԴGZ窜Fע8eM$a^Xeg\OBƻ E>= WvvyT4߻xl[14[&>}m2SU7^閞* 3j $Ri!~ e>Xm1LܦCPPrn;=&7itajw/+9_&Љr[G.^addX!_LMM }⏹rjIyˊ%c֮(o,8&G:-9j ~sT˻ARgJS::4ԨF9kм'Ns>{r$?ޖ SZ 5-+4zTVFh8+d'N{m‘_JkIp茤*̦̦B>Ghed4aNMGk\oSs]=(y23@{hpVzz2M㥗%}sOۊc^/N0)S{%QM w/{Se-2@@F)$Jj6랆ؘK6(486C-TV39o5euAU3Tň 4D^G#rǷ|,Œ^G W$E py%fkqStJ( jʼn=z ~6VT0QK6j54 7-J8LrPdWY p'_xRWhawNE|(5#TWe~b[rmv Z>#,JFPWV}}~d;wۃp+SPƯM8q)n\NJ:('H-$y$vy~{;MN[->^{qef2%F*$jO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺF ~mJnlmCOmIs5 MaZY9#)ud(d°>}Nd6mo'QVXɢA_cU_jRO{٣Lb ^I(Cx0 !# ˮԝ#Ǧ>;`v&#l`,sk^xZpzud#_d(K( {[Ȟnͺ+JW&Vv5Uj$F'8}% )t(V1PeٍOCW^Q/z=Gv_]E.]njr8 Bo"Ig^DFHݔr2s:r[nֿdզC5TTP{dV5$dVuR W9uv˟ݑ sคjuBqT B_Ǡ^M|\8NZlfz nQ_MtLTyD'sb!tTy_K;M2{itS#}Di; Ps`wzKcZƛu#Y uttJZ Zzx(訨! 5--4!R8ETDE ? X8P*UAiIfbjY$RNIGzoëz goݩTR>W7^TxU]VQ4Nn5gx=[B5W1L@t.QY9+w]viH#AN@'U\/AԵx|1~]˜9\u,pl%EUDm^R{qamꭥwpM*1 'AI.:%GݫyFjZ[ⲺL0@h⍆X,q((UQəcR|Y.IcV5=v@`U`E AA@j:zk;7xl;N0Y$U/Ѳ[K$'g~{}q\Ywj(b^*8t~Ht{m(DeН4̟dZ_M9~}3 6s.*rodled 9?c"PcN2 OAj#80/F%Arz|[}nzvVen;KEKeF2[y?xh=Xٷhׄ[OELR5z.s/F6붼-!LcY#:ݟ~/w^ro鐥n]US[(*EEN?sZAijU O Yv{iD&I T+HΫЊg>r%m&lPp8Ve=ʨDe4qPM.x }mݹをU#E@~m6vPEDAUTrsa73\NF.%$~Vί+8:Ӭ$o }eTZnƅ Txt`5SC j1 =^WvK`uhl 4LA-I1sXCljj5)Gl@$"D[so˚{?;q־C;s5%`ZY,#* jĉ=0<ռ\opWwN^Idbh2O*@[^նl{l;>Z[Q~C$ԳYؖbXX={^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{GK߿=#w;޹I۽Z~}PO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺW1al==U8 is[#!J|GH77#)V1F-X/_݃Hn\eeD)x%h&%hdXPHe`AVr=z9TC+AA 8.pUЃ#z6lun{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{GK߿=#w;޹I۽Z~}PO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ\]E)"*pn?yՙMTH5,;8D9<ڍTp=:ԞI$޺^׈@ "~Q׺?c}|iSz/cyz`S*XzTY*Upϙw0{a$< Pg F'}v?qMXot$4v}.EO 6r{Shw]\^;UsԵDʎH'EQM:$ȭ+(-s6,Q\" 񺬑(߶ i>`{Kv(rXeIGRXމ"6>쯖KiMmA$[<(RCx02T*$f!RSx/{ױP%lZЀUΐYf$[# 43{ս{Sx2jXZA :1P(HKޝUy؛zj=V(8ZO--m\%ԕMGӊ\<,E^ZA+) ̌zo74s/-՝E*h"20!=&c%ᱹ k1[7QTlS15yF $qc=muy߶Bʉj@UTPYUA,H@KaRI#DE,*I _1]%$E_**t-iGE'zET%*oDVjuŶ`y~y"o%d̖`zYyw#ɸ8v/A47cq|}+1P4)hhU#(U#5 6v}v6$B""*"( X9ssqypwr4ŝ݋;31%I$NOS}鞐[6S}vNݧ]vg5R ;aKSS1i)iZnag]佚nali$4!U@-$J$qHq/r{[.Zyu11¢/w*2zD)z==]S rJh{}R1+(a1kK!.'4G*}s;cۣ&׵/76,?RVI致_vM|-{(5Z[7.%Sn<%4ЌUe5DHQ:1WR|MFG+WJ 1ܩhhۊR=m}y pKHmΗVn+%ʚq2*Hq7',ӔU% GiE&>q{ߺX*xyc#ygX(#TYtDYX*$h$'VDyG,@ O>C~q4C17WRܯ21g1"C _МjHjFyTRޢxM7(;s8xЙ |;Zx鈭t?Ҷe`"G.o#H|_Ӊ,͍Ow]K6Dչ$jz 0;}Q{eݭ<=;y@OV X&3j<@/u{yzl5"촐A1%I3| aX헉J%Sd>ҠJ8ioEegpx 䓓y`јk: }j*$Bw&ZDP)FNŸW]12Si{ts8StpU(xY9=Oܾ-؈nO@OE$꒪On@7Ȁm\5",e'P ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~/-Gn9Qkg}֙Jɢۻ@JWPC: ^e}ewXLlb!x`> $zxicMwnS׈ x ~?Nl87Yf LQ4TndT۟g?#1RX1dgtH$9ol}vyq9ָBE|9C(hi_p=omw$բ*F ^_ _}GslQ cP[uGOi*2Y契E7rt~U-O@Yf$Fx ,SM{˼Q5rkJxAeQɍ?2 bID0X-"bqcy)`9#ً%A}[TjdJ3SZ#I$eov=tM-YFFw3,'%X]B{ߺDo~׬Y}aX ; :q}7wwVƿu:شUP|]eYCN}v?g ReNi;@EKGO^{pǮcIt{eA CFmrds׺oxfC7Pa؊*W-qPH(՞Id`@roo4K#*G ,*K3&?kku}sm4ҰDDRƊ 31 $uϏ/I G$Yc}m2)G 5b?nMXHS3'o{}OBP4v@wOH*E͜Ͻ(;Y.'ꩀx2I&׺epj +gSN/;aXʄ7Y2xXXǵnlב;MĖڒHц# +R=1wkki%I<LuV^qyx;U$_òQ"}<5@'$}6^XCD$* /)LoBv^q^e^[":13]^,!CiޝI<S(vT]H;äp}թZjqT  MW5 3$Qyf8?f7UJv-ePcGo~8~l[C=|ъZRdX],"m90u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gBw\޿-z?>O'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺBKdy߸, l-@z0Q5VݘTRU,S Ȓsw2ɆdáER]ʚO",ԍ2 $n{9YC̾#E-d57lhR%84T()dY6]aKƱwwᡎ-RShg}kC"Ar(`>}޹gMPsxGhLXI;iUym{ۧ5ZmM_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~fUScV+&t4T42QgbA&ZZ]_GeeK4ffb$TTX8RB*3K1 *M:τ?Ə 0KΆ)zZA["jskMa/vYMh yZ1s!v, ?5ᛕ=)6Y$eGgį#PKDH#8UDDPJ*=9UQBpuĖ%Ԟ'^ֺuٟ"z'zp{Pɶ56BfhuK%]E$R5JFce>soOmp/ҫP6i) o(%U&;yN~o-ϙ죞aዖBر8r2L2L,R :mef3#CYb*<^Bj3#A;RWc J:V;K)fGGRVVX Au).meUWGF + VR $j:/Nu~{ߺ^׽t)K7W`3c*g28hn]ӓ$0jY Ar$qۿnyfN<Ƣ(cki(DqGQI%c^Y#\[6a@i%a j`T*.쨬l?^8m9)ߝ_IY[ִt <]; <|nBWvWܺ6ݥEʦ &qTgÁO'畞^_YE1§7f% B TS׽t:gw`,nj9̬:ZXC0M42COM ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~l'm]m튦n_uL5QX0=GёUs$k`s/'{U.+5Ȗa1Ii%Y#SMIF}eO,+[uJ :#Q##V:bJ]}{ߺD.#sLw7afi%huِaLVwZ I6WJx%S?ޟ~7mͻܥB1+h++$K~{7>%6kX $RbB xJ#F7@ SMw.b9kk8Sp3O[dNI'yi!(%)B3x@wo-7RskAvҦd%`/k]ei/I4m4.](Fd^u_]1j/mЋvUu2x1@`g9os9޻꼷sw%;vVdX?w'qtKK8RV8nHuFɮZ:J$lC+}et=RU{Z׺u~N#ظ޶'1R.^iߴ>|. WLKu*:#ML!1X1%ye~sw zI1[DMtiڀ)` "?rQ^;Cct7cg6t!%Gcc5u2i%I>|ͼܿsrvݸQ抈fbr,|ܽ\6EwcDgv!UA$ӭOd.7T[kM:ԣDhu&*ѻ8NYz)}>^mX-lp+L=é"XQQ`$P{͏}Lzn[8 $ @'<#^>{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u߿uXa+;4U;xaVⲘPT%r/3~hWk~mmq=Ѹ ıaU,]*Z7_y^\6/v+" ɅͼteP@ѲYI_y-[|c;s91Jv Z(GHghSx߽FTRr)HcPMJH8 qOwp>e"zGᆿ>OqC\ASE[}n\޹ݛ7Ty,QPeR8%X,q"F<[5rww.^Idbh8 U *:Km[fǶó%(J"',Ėv%$m+pG09L9+' !7AI.պ;&6G$lQІVVRYX OYnI=$Fdu8*G^cOQM k+qT1^sqd45E84қvܜ̮nDDiQEYAiP"Go̟~}Uاzjfq ljA9٧:SMAMzژ?khg2Y1=jj+x'Sroq/܍[tJȌi")uE.~;{oͳVc;BxoXdž{|Z^#{^t߱M=\5ۧt+moܱS5(фR Yb=wc 5[Zr<sj .^ӗ9VZTG<B4ƹ5%U/u_ՑH[qo<G6g7U覦KEO@[{Wʾ|qO;KLy ;cSAV,Oq}/sy`zUoj#Ow=7srW@.{߶{o`t~Ge ]pPTUOy*k&b11ZڗzhT(b|?4sUZ[;5=;Tg4PW7u![kaUG$p˻/_ߖf3?uzo/^Uy)xg'Uܥ::>sm2V%5#˨h_YlQ<#ǒ{dw'87-#3,M4;I,LIW%݉gv$I$x,O!f,͒NI`(` ׽tf6cvW#&_UCheqՐUanɸûm3=ͻtt!VV A{;M]p'9#C$ŒH?{b>N` {oƑP;D9v٧[$u SXaf?y9]`TE­(EP̑(ZC_~}hlj^"> CAehhxN?%SC[A(kUcfXR K+hfVI#u :*J A{I)b`J2UYHA z GUQѻ!R"Zej/W!g1͈f-QJwn+}/}۹}^{ߺAn̓3-nF[ @U[U%f76P̡^u^\.9n',k(EG͘+0)A˜sQG$#As=IWkπؘ bμEhe/۪UGoX @8￾W1mr5V5?܏EP>OS'utEVЕ@N,{ެ@RU׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^Ӿnͷr4|{PԙYxM3KL!Hҋ<6>a/`|0|+xU%$,ƬVrI|"׺_Iף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽ta~*^ظu>#4-6[sny miXWyE#O>rǸ_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^җf{ml==~b쑵fJ樔<5’K!A,-HK9TTVUAwe@XM C(hY UPI>|P?zi/3+[a+Q pZjGD52 'ߺ1- *pn@P Ie(TI,Wtouy[QYA,b'hf|Ԁh?sOQW^ wyJ|&ڸl'c0z7WN!VrETVck($wݶjyDHA!#Kh${e[\Fk(ZU䑂*XR@ILo|.7qcCnӭ͝5Y:d%:ZJ{P@(M%Lq3mY;}-4.*nn%Zw )lbMq_e}=Kin ATлap!M{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^&>n~SQUֻO60Ə+u5RRԚU?}yBrn4\E Et['`A}yoMتS,?Z#zp(u{[䳙# *hf>%cbGYd`lqeH-ѤI"G)gwf!UUAfb@M:Qkks}um42hY܅TU,ItrOst;eejsz*hHꨤ4y,>wE&IDQ/h L.JOON$.!d,6Dzu$Kͼ^cbʴ`AVHBU cDed jeGn $臰޿=֕wX9DeŴԅٌRBKϧzd%]2v]̼֍Rw[1=ڠ,K/#H鷰G(ao *)ҁ3C+T{N{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ջ'몷-}..>ڵ`ޛ*z֦,"ϐԵ8b.O<4SS4TI=ED$P HdiUUI$i" %TN$ՑG 3$jg{+Q7E_O`c;s&aEٻK&-,tBbDSAoo_۞A׳#=!TaBoiGKy[wc_mW9F0?M &..ec:N ?_fǻ0¯5Q3b0XwAƤ"/$P4"@^{+͋[mҗՠ0Mk&S4LiBY $v峵]SYܑ U%iEAd]u=~15;AOz{Fd}Te_,RSNg娝RaUH#+w;CoO+\eʑ1eUi:$k9=,O}Eqe!ؚx1S$uX: (XE*ZWPٵ7;do d]״3Y SENiR9W$Oa-O'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^j̏K %x&Itu! 3Ko*t5G=he*A A`0zϾc 5>kßR7:zRuykV #=?+}孽voܒ0%ES3 Jιtz77_ l]Ym&1DMsHd0xi"%>h=]&Ԩ{RhmZ,C! F{oܻvuun61X xM-#o&{5 ]T]/ ٧O4XbH'Mrz~X'oY_{ٶNG&ƳVK3] ʨjXWUD D_b?2 EH*I ʈ5Kq(^ҫd@.#oI&cHܕ$FT6xɷ~4Yl}N;o& ,E]tI6zQ2*voy }٭})xd EuÊg˫ZۨW۸\C̚^Y-@U 7V[*MeB`{̮{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~Y>>/_- $֯#)GP`+ <9J1ݻt{n[HG'P +`fӘ>2Qg/w}x<ŷLʔWp71k +_d}u&V<+t&z <.9OQĽoORB\R+-O ǖU[9%B%\ 2%EI XvǘDM9Z&Z'a d+{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ\Q"*QBXI&=r׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׸q׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{GK߿=#w;޹I۽Z~}PO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~py#^GDTovUf‚~ζ<z_Iڽuoozȳh "7C)q~]eN׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~̶}q[mhuw"Ck䑂"3<[U(YdjHf4@'AբuW'5_dvONd3Tw&b6cA7[f%}OͷV,M)aupEx,)pc'4}Eː\n '$-Q(1Dҝߙ|NmZ4hO76\'wt\oiqN$!"CPL5h{jd0l~$3ODzϛso=vvcp :.KHR0Eff7$|VNY2p‹h<$¢dNI9oojMuKvY]GoQVv%T8;?{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺFn3zQlJ&W`fPÍƭteY$L]'U7S{ͷ<K2o!>8mU4Jf/kj9nck-5DAx^T %ݻ%yg&駋ȟ:Ǐ4vgen #v_MO?u4vgen #v_MO?u4vgen #v_MO?u4vgeno䙼BOmI2j ˝$ Hoz?Su+^؟z*vi|gzudI1͍BDUD ~|goe_+lY1_VSt|TfvgD@Q/m6 5+O7F' *w.1?{w߸ǽ[TF]w#:Xj?>;G]Ŵ_Ϳ5tLi_DGzcz^:m$f8y&_xOs=Aߵ\%Un@KOZ 0N\\PWr *ȃ4?۠3K׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tygMu|_mz{1_+AUniF6Ԧ7O=={m>&f impIkz|߹Vn⓱ĥL"dME0EOW g|ľKB=gKG3^ g|ľ޿B=g%/Ze3O5s5GM5&RZjxK6U]LI6$;[n ( @MO=uNG 5g6c¥I4$M˺S׽t%u7OWy:=;NvjxiSpŔC.kq*-OCFBqȎ%VXm^so{|owpm" jY 8֠vQ.oG~曥SQQ$#:T`U76u/|epjlG| [㒀ùOj;r_rk{b)P@W!Z j8=|`9, ܪrތ#)Ķ/;)Ωm5}kө[++ #9'yK{ BaZktPS[4o~|t |kcxSqcǗB_?G:4ں4[N?ik[{߷o ۇ]ZOAcݗCSJW]ufǙl@: {,{3K;u#> GGF6{hڭ?>ۑGC?36lM[jҥ[zemˑzhĆh]% ͂+si;?Sr#C sE݀YR"I|ٺi_O}4 2[D(*FHzjz!_vXެ\^/6x\pi]Zu5ؒrsk}ڹ6o7BI~-^'d71ƺcE^MXqO{s][cMi&X]+A@`|/ :w{?m#_=ٝ\??-wNCqf{cr9vq?i2u.)ȑ Q_X} ۄp;MՈ\WMĨ*0JАr~sۇb"xRAqnC lhℕiP|5:u{{^׺u{{^׺u{{^׺u{{^׺uǤأ\ߦ `:'6)2pLf 4c 7'< ?}||`I3hS_㮪zgX_zͻpi9.w.4kסC/wF/{ɽ7i'?h?el3fnܹ,emVoOk2Ti1/1PpD*T$3 t`n.v`8٢4BWiSY $j _._CMmƄќF RFtAuLy,nK asX>o :y(X28̅$4sA2w jlchgvHJ:1WFVVV1mmfdY#d7ц AA}=׽u~{ߺ\%qo%-ovE=H}z7N7{ScSnBJ=J3 u[VNZ_s.mœB ͉O$E~jӪ+Aì;^ɽ^ll֓qx#GNiMiSJҧJdyWMO?tWLZ[uٙN2{ CK k/ծcOײ6ϼ;_ m" <_F9ZN c3KvKشV\xp#xF ||JV)zȞ{{^׺u{{^׺u{{^׺u{{^׺u{{^׺x[wq\[eüHp{K ܙyPiy$ }s *A# Y$rGH-n٭gyyW쾣쾛apr;66srP}YRVQM3ҳQTԈ54aYI7>Aooq{ 8$j̀E GjWIRJyo9o-f{Ľf6Q$eVeP,u&5bA:E׽u~U?9utob-La//\l׺ӻwȏ={7ޛ0uQoa_zu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{:F+cajZ67M!?[cYt"gjV%h*znh--Ei$eDQ(iMmuzmttbrI0QSO-2Ƶtjhj*sg\Ȼudt[@'_ G0~%ar&M>,yx6HjG.9gpK!&DA)plFJf :~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^׽u~{ߺ^׽t՛a76&0ӵ&S e9*W 5~:$hͅD Ohne7kx]2E2,HnYO:Ue}{Lu$$Ã+ zT7\cv9?u0R⠟-f|+J^e 4GfGM_dctnp}VVu={K /[z̒X˵$-lv.o s% ґG (1SO0-*QR:ȋ"0du >.RUGYASCu޺^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~YŤQ73~[xnXDk;a~hr˸u?K7_Qq'[짥}:`yќ}->g6* yy|xMd \/s>̶}~ݭM35ܱkMO$j@TbzK}}gϹ2ys#K[7Tbv&ނsVKM!~ݍd@(4N2Ie}9skE{U{ː;.)j@"(+;T,/u==w-Z[׶ Gi**rQ^׽túw&'fǻ"09}ɚ KdHb#Yn<ۣvPq3 PI#ypE'^wnvEXI\"͘y-[yv6z5Vyd_L[).U#HU5DUolÙx\ICU4#f:E @i˛%/XcaV}V$T~mMDO[N+O!ecM{i=r9OvKghVXGꟿXu6KXܿ['ZuEuѾ{{^׺u{{^׺u{{^׺u{{^׺u~o~Ï[;k} }?7{ca,׺Ï3P.]ӈ :hF[dD/ȟ|ϻ,oaJ0k ]2*bZJeo#ǚ&MW4LՉLJ3DĦDFje!ee \G| C:ϲ4=w]{{^׺W*o}=nd7I"oh{_NϗYahu~}zHw렟U5'-}YC*.[qWzc7^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^99*wEO[QVOP-ً×4 6IOZڛ`QR4g5bݛ;?sej878'gJF ?32rqNa_ޣMkKX38?҈E b{Ccl& bm ئ'j`{Q}˻,ٍ,m E~tXo{to˹&?ӳ|ָ_ʛbwGQ}?mǮ}?oD=Y[׽u~U?9utob-La//\l׺ӻwȏ={7ޛ0uQoa_zu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺6A~' ,Oz+ؙ}y,g&c#}=,5Ud$YPJt/iNJ9י>k B6 z($I4%*PJ~{iӔsln%$BYF5\jZDk4m΢ޥƌOXt4XaTe~2NċOIL6[m@ BGU!Y٘G9p< ZbU@uL|gmmf/ܳ~dIcꄽ׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^i+hstHĎ U<=񶇑T"^XeqT,wTw]?އ ,wTw}]?އ )x&d R$JBEARH`l?1NU׺uDfzm^_lc~i)b7*V}E$kU5>J(+DHFڻnmgEojnbUHKPWPs /]M7eyyV !OwOã5)kǷ'~k#hRo]YSIq|Bm.71 e}=BǼomr(x{W)|Lbp}Tu}wyvf?Tq$~LzWm/^O|h_u?Y{3d'vR ,S7SYM fXޣ̲{ؽfYoA<&h$"h/<*D4,qGvMӟhy۷T‰@C#ݵXGbn3Q$̗Xm(^ip[JՊL۞[n=Z|ycK}}-wd~)n(*%ǴM6Gko\TLQl&)&.DjZL(Dc*d5w_A|yjw䶾OBJYCE)VVa((>~k{5Y8-WH:YT:ETOxկ\h6LD}FԟrIm;uVk;~ }Z5ui)}Ǒ.Ϗygӧjӫ_s~~u}G~. ի VI{cb'N2?Uo@/ 4N/lt;o3n=gxoUޡ}+^WϦ[~VfF|mZik߻wfӪXe׫f<-:t n{.7{^׺u{{^׺u{{^׺u{{^׺u{[ߺ8(_wr<0{sz:u$Ȫ::GFYY[LUATSB8bc [n^lƊum JzSWi*0@% x!i7nxiNtZ\Y&:V coWzj$h8L+(%i{~G{^׺W*o}=nd7I"oh{_NϗYahu~}zHw렟U5'-}YC*.[qWzc7^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^z 7vW񏷭n*_о?X/\2Q=k5쩶' t{OJ{Mz'-&K.c u{ߺ^сeQYWMV//+ozN[yVν{;}g|އy g}_]v/;(o{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{׽=lqsH `G9XmZ^/=b]ngӪ w? ?kpvnxoʟ/r%z~{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^m?d3R};GR}_hy'׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^֦>dٌZrGٔұ]Se5?U?{__=d={)_={[QKQ*uʨ1+jQ7 Moo[ZL64r/SFa54q\FbEu ?w;jmY_ܘ铪vuF(#cpZؗ]fi)Y#cɖ99iMcEuvш_\; LNB$ǻwO-pX^$d3DFZYB!RYR67.:um \Au٤Ŭ<>U}ltxGЕlQ^coDbV%#+n[sY%є$ַ~Ee4|>?!eja5Y~X2{u٪`Z?RzO忓?J\b7wa*tZ)YJe{X<;[,“k}BZWԯц?F|/rqV[t\t4n@/a%MGO5WTw;:hp0yw6ؖKq*/674wm7&oL߆+^hQ ҧ5O/6Xda/̱~^aݿF*ܶؤl^x3[331n4fQRT4U rЯ>_f}E[l"9$CMx=^"]r9'+s?)n r5<&F<} Zz~{ߺ^&ܞќ__">Ix:`ԝ 9=2xjZV:7l>U(d~+LUuHj=ϗ`2oU3$pD&ZT-lm8uORSXlNצhY 6 VHkeCpSd:h/\6ۜ L~%}J@zWg*YeN:7R_\\MSwv/b_G-/]G ?lt6r5#~(}9>ݔ:d7VG'N[zs|tB̓3d$={-˰s73\Aqpʶ<9e.10$1:4$_}C=m!p"Y#bjH@9$ǩ{^닺F:(,TfnVcEIlƃ'п>NU벦8zYZUa1+ Jyx((_ykݯs!qVce c]-4Q:KnҺOb>ۭahAz:B\A>loE@,$!Aé($UqHa~zu{{^׺u{{^8?#6{- ?=r{=Ǻ6>ν{{^]s;wa߸{Gxbq HZzIǪi:J4qʄ:';r*"3~sH,H tw˜ûrk{GQ?:pOZx|-gwCMv<gO9*?*e?PdG^~-n`nĵ=Ic"t #/q6sRe) խ'8_FEhCԁ׽uUk+ON[7yL(Ӛ}UϿ]ҶǾ=n{.ʈBIVcEI`4\'@/_ sؽO{czYu-NmC:t:M'jmr2cC|+qxZ hka^iSTqྲྀ^PmQRYc [Ⱦquh{,uEtҠ\|_&~Swv/beA? [{}淯FV-O{lF7mfAmNB*)b:Mqtcpڞ {9 pKB3*, duo6^^PcRnق ƕ'ϊ ;UEv˦}Y1T5ʢI~ekR @ 7QQQ:+ƾ}ykY퐶ofE uiAFF^@G~N%xfuGg !^IX? 0.1Xj%N}9\[XzVd {_9w!Ehuf Q Ḹ`>^/)^}95m-QW]^Fˢ)SrG;){Ks| f?5K6fx*k[%)|=ߟ.;wV*-]}ڹ==dC 1) K~~m{#'06ymhv剟 P)xxfJ~~vܭJxuS)J5BI;ge ^=o6K0O'P90'j?=$MOKMg0Vb#n*|:TVqiGzo;Owrm`mN"u.lvg)daE#ZS͞ŧ4lW֖jVv9t*+:KPqJ{r/oVWW2y%h<-xյ AJעM ~MԽM/dgոٿm!?tKAoq'^ոٿm겻:cT u6&R&[7pe]8U5$,rN{ɓ{{Wܛsu#y`.b.L6RꃽẔs,YsM_!#O[*3h,TH? -hqgGN]e]7y[C7a//\l׺ߝ} 16o(({o㪲ٜI1Qc}"m(PH7dݹlwSܪHHࡢh an{[Cj$\1T$M:5=1;zQ;z`:~Q1! KQOv]aS?pwKz!Ѩ|_p)Qy~(/&l5(KxMoQ@53& XmͶr2 &# P~{Ƚ}{\+ȕ(.27'}*y<a$1̷o[;9-&d#GeoSo?@}5tw;s{b+O0H 0?16{t!`nm5#PD|D߸?7d*Ivv $ɴw:-jE67qI>6f (ϸ/1XA%{ZmpM)ac\mo*ʪ?7 wۛ+7lۃamC%NȾH&1=HfKIL,J=?_h-g==z> γ;qUy1+]M$rbjjBH"u(b=AyΛ\1\,lJ Rª9hh*op'ߔ(UT $VEAqC{{^]ꮂ=z?kj 0bq3cc+SL2e KȾsB'mZhi<]z*YwxoJW=yy7<͛V&_$Kzu֤TW{_;\,LQ΂_43֞#fk2ob*)+2G&@Ę"TԨo g=-Ϝlms;*\ Zj$TiP4܍ηRr'*j QiZ+J?qCN{{^L^dKs;1&g-Cl|MKT1UTO!V$.bU${sΞ˷r]$(Zb`NH@kǕ.+kFQK *M(1SR*7 ;{v럹/~鞟/'~}%=(Ab-ʢܳdOǿ$?_~} OEiD]$P9eapl$s71*1GR!ax< ȑyQE@&\SVcEOV|:/pJj,>ѥ-_uۧdI]I,k4u8O YDexe AgdtwÆ=.e% |ZkƱ`W724J'H줻m  `H"I, A`#WǶgQ'bQMM.[iңwJ!D{_V0ycBEC1pn#2os4D_NSO= +, wzemZʦ ͂3pf]O Zmz}<ʯϠv%>>1SyjH"Q1w$OZ"?>}vg4Do-On##\: ~SuE=^cmӷ)Q撣M >˪Tk=ko {TkqkgU''N{a2%$5Pv'rLָjj:' +hQI[IP$R"Sċk99#%YXU#ȂzȔt5&+) !C)z펭׽u~JqTlR ^'ESdDXu焎$f?]w <#KUTY@$2zjy൷{(Rqgv!UGbκ_KZL۽!ȴەeܻ]baON@]e<4#fOqt9Hv+w隲PІ WRM4)#9Y.J{ KNTyx8]s}\#;׵ot֨S!>ް(U?+uGKp?mm_ߛu L?Oo:]0IQ9ym]gUicOO_WwEWenmjP[~cG?ꇰ&;ZkC7FHbROB8''oTۧE{{DP+MhR%.dp%apfF>z{˱) pT?Or@@3;dcUTcJ}d٦j N>ާbQ(6 KZV&ig2cv`s[[re6sx WȤs ?UbXr}PͰ]OcA?1 K~~}>c-._n̟Peth1/6|KC:ȯ`=}v}<>[W]4_.W{'{=O_;w_F_j?e:k7w퓯_j?CPfwۧ74{O,(q5%5Y fʶ }?n%,owp]=\UQ d3 tܭ=naޓα#ن%QZӢF׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^֧3s?O)GOtvoT~yi{.{^׺43Tiy*JSSCj%U@-Ty.#RH~@ zںF|I rI'O[ )]]>: .e/S 2;y-v?_n dHXֵ`_<[[dQبIN>or]>YG"'%DI r܏Пxܒ$>U[Mcv&~jWe hZl{Cz펺xyxeaqpeLVT0+-,)%UeK!9$n Kwv;NVLArX +;Ef"߷ݧ6[a&ZZ!G9 ;  l?٦vRw]e5򮪌ҎScQb*,$i"ۏc~|ВA]2%./Yj+5j|w޾cOrhݚiB[A,fJTB{ߺ^׽u~0n-nmTrZ :d`VREՀe! w`&ٷx.DJ׍MF*0 z_˸E 9cb<ՅA j j>IC1]kc+gTVI%efRlIH2KK,qE~>{Mrg0y Hդл䎠xOx=K]Jo;x_ j\)-2/jHU*ʨ::HK3P.IRrO[z%wG ԥrA}1;T4Ã{GFjh:iiٵշ҅npIn"-u >緸NRpCR[Efx(\kP%{礤i)iSS#4PP0A )mlqTEUUEUEYib3YI$䓒rzޛ׺u{~[){kw@`0QL,DsƲ QO:ਅX`G\sv.֑^(J0GS 5XѾǿo\ErԖP1V #*$u?OyY &OrFs!UVV:1[)Z<Qz}C;(6R9j@~W]j]w\pF|Q13FPoqb:|KQ{cGt*+,]*doVki?o{߸>5}7Zfi}}{ߺZ"/8'j=o\>hV׭Ͼ).mӿ19T6hPuOt-/.^rW@N{{^׺uWn~{҆n:&17^mMe >Z#P>Nop}CmʰW\d8HodDsN2kIE"[ՇɠEZrq%Ɖܒt'{v.x__bϭQòf}{Sջ+~#MuO·Ϭ:^gNl_y[}n_ҭ:"RhrU8e nS)xYY<|KAQSi8K3$UeewaaM4̩h݈UUUTĀ$h-{XY݂"ƁUTHO["X[ݣ},pd*i7duӬ)Y zzy8Vh֮N}'$ZA͞HK{#JaxwCeKΟz4M7,rgRKwCnH4"l@c zu{{^׺ {zͫؽ۟ 8覝<9{o5 (jӍ3SǏ oCܝqK JI O >( G E|{o|v-5kў Cܴ`_o]|RUUTݓ6ߍNK3Ai"/Mj,5p<*  %Kz8: V$Ċ{;Fs Vըr;b9 $;1u~{ߺ^׽u~{ߺ^?Cuǭ pQ ~ykxa>=ѱ0tZ~W|_}WOUxVcwN>Qɍ35Dԋ%m$R&1K'HgjIyhD][GpHeWPu r̠YB>;rSxms$.~$Ft3T IۛlwQn TYk'%@*)*bՀe7VA6}en-.Yb>GR+B1XSU`#>&>ѻB\;G,n(h~82 ̺AMWm|Z͛\xzZog}3OX+cr %Ԛ&T3 G%ɰ݅T7 Pa*̠5̠0J:J{{Ui@[)j5xXҍT$$jnm7xjvZL1$d8+-uJۏkֳIsv fs>I5~S-Nm 8i&yYc4v[vM<)wwv 31 1 L\[yy" *$Qfwc@I4uo呵: ^e%ڕoٝg)Jt&S3\_Mw.vsWݴodpTS)=擺( m?9}n,ܵrIeqX/ICn߆!Gs1Oy'u~{ߺ^׽uO?9?F,k|x㶗jC<šZ|f@e4tJ|^jAsLz)*!L}v^tmmyPd Ŵ.G.}\4<w;f8 G-5CY"\J¬c2t5.fc2T-~;#ERHgThE K+[ fI#u(J A)D RXUtt`20$2U 7;%? ?{s慿\~*=_n.3m?cu]&ٻf9+1Ի >&bIHupG9`[rihcܭn-ZD-O :J*q.rcn!TjvE+,TLКu˯͑bapGgax,U"="IR3ꚦBdgydfٍk6nP-9gvQq 1;Hļ3;InϽ\3Owy#I+xUEQQyGUO1_v'벞NZY[=YGD/+tS?_}#g?%gV_ywj-/N^{{^׺u[yb:cosd|0`q.V#-H,@쓙w>We+m\N%!`?B2@]gahO Tpn<;ynpo kugrKKy9s9'%?p.O{`/7KɥW$]ڄ[$~i>޺`8#ċ _?>6r/齏2ӯ?VՇt@q{^ؽ =y'z&>.[wn쏎5$QSR1ulcbJXRCeyS$`=^[-˛vpw-B>I 1RN g*E=s.ܯpFߵǢ%WZ*joC{^׺ugK[-=v ]WZfzZSP6r1q⨌ =;d1[Ų3Y\a| N3xC#̞YI1fje[jxѩ!8VK'aYLsSarY .o]վ;)A>׸F[HȌ4:1VV*Amsm{mXfD7SUxC =m7;żֹ֚5o-Tz+%qbBO/I/׸#.UDS V|1Gҹ&ُ u&U}ΟsM6ʋ+r`e>e}gXc=0?qF Ki$b6Se-^RPY޳&J4^K̟[Xޓ-bMW;r0Il=N3oG&N-4\'T?oZ#GUtaeaX=𭔫lYH*J#^ֺ II'h:W2zdh.ڪbT= t6E  %k On|Hb4oI- C[s? zX}yݭTYGCn*nE⨙,GPu(kv #sx(9ҭ^17A_yA{?mG][Fo-57l?ߓCUˏR<9t[\?y⑖o&?O=f9P%$C:So r\b\׭u~lzg3*Ss28vtvzjQ=YV)`,=rg4Z/@L0TO6kf4!XSpYl~ d~Gj:y)I_v?F|U\:MY&LJgB CZl?N?9g7Mu|CoĹV!YCqk&vGnMvd\ nC#I1"=$=j5e3<6xs5m*J̞[)_2qXK,?$H۶;׶DWR,qƊYI*3@$:ێ**K#1Uzٻ}Gqc[eHr+OjuH64ŮJD!4}9wKH9M`x,,Ku9iB0 oKM75}o;IMCh)Dk-4MIL8 R5<68ny6/Q|E> XG@ $)BчI}yIJfv[FjIl)FNȑjUU~qa`6u"4kQI]AT:^::y qc9C~Ncne-}) ]IWFWRUr0lղ/.,\n1C+/UoG_Z )ԭ% %U5*(grX]ewضhZ{(Zjwv *@b$ p,v}t`FR42h&Hm*ln;%(F Wc-HG7Ug`f!|4>"^o'ZHZJ,&(!ooiniߡj 58昒f8Gdu:ν{{^׺uo7wl;bXe]BvuiꚎ(Yif yяr/{A~%Y)чg/zmߝ6KhN Avmo[cr\ӼJ4HW{׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^ָ3Oncw\C't2nEGWQQd"2 RFڣ.,}E_Mwg"[La[Eԫj" n9Wڻxm.'YK(yٔ1)P^W 3wmǯ}zgS7;M ;{v럿3E[:{;M.7n|L!=F[{:0f0]ћ+_/M 2 TՒZ5?.~ZImxoA؁>)7_ݷ[.Qn;Nz 0dwᬆ9#<}/,m5CDO.Y*~c/s.!f C#\B#qIh!Xo{+y.Ѣp#a.+1E%L2)`"E}uCoz.鞭h~-W H`4$Brǔٹ%60E> !&oO1ZOwzš.묘 Fڪ"&F9m9f;*'Rd_sNO IoU?ϥvY5.No 4mÎ9@^xl 1QH9|!ݾ2C)X޾<_6mYɫaUG[{/J1{jd!rx̩w%&Ӝ{~G~"B $; fPK{:tKGW>KKMj{/nNɮz,_!ܥ?pUе&9G-9{'Ne_Dԫ#ك3,gLHc ovv{b],Mh%ѩP5`ʬ0?p}x ]n Cլ+]ٵɾk_=L>6|~rXjh2ZQ5`PܻK~z96͙D*SR)r[YRV)ůro-'r{:,QW`+Sԣhau>{>M<nxݹ5|rɅ%F_vg@ qI-dhz%.?vy%];V"\KLV8P+d`+ECH۝=Ļk^S{$iV54JWJUw\RVQvܻsg<T u5~ A + {;ON,\4!njcn΂Meb.mO)D9l=^}Yf&gZ3~ yk:A̻M'o[>Q{&]ua^Kgo%r nK{{kS^ޘ=$h ~Z*PjV:RE* @'2CO߹>+Vƨԍ@tKÕAB g.dѶniEt0Tn I! pzz޻7l&{yb)sWvaYEbjQ"̎C]]TbڹeqiyE,mZ28*Ê2go/+Auk"] A#ɔ0%XHKϐ=5݁g} 6Z93W#6u]uP T$%@;{n\zK IOSŁx$/#2!*zw s?ru6ـW2 5Nz%VNZ2:;FWo }C_{tM=ֿٺ_c^ֈ/-7.mO1յs_Kw3N?Mq/yKKKܕ{^׺u{ tݴDT3uF5x]zcVxMUU%'[UFKd԰9)v.Jn $0At(vEhM{WX#׽tU~A=UdWI6+=S43͈!(Q#Gs~}L<~ Kiܰ" AQxt1#G=r[,jpG$l,+#*;=l>=<9d"*ý۬+A*x7-C9]giDP~BB>}d5ܿyxCn{RS+(>$|~] ]o?nZ|clϹ"5%5TjQGR.I__~k[;(0'v@;y T9_t~`k^4|0Zf(x$ʽZ޻G+x]Ʌ[7N*YbbGUR.`RXU;.Q^ZN*4"MH*hwwٷn_e7i-.4xBU4# `AJf #7SPPLsfT@VIQD$Q"kɊWR+6os.wJUsuF$D/y 7_oӚu?zV4-aȕ^IܪFkg6#uQ;?euQ3^܇dL?գ~w2u^=g˿X>}IлuOrJSS? >欿musz_k1}tR_0~R|g/h*F\>7^'t1Ѭ.RH{i#:: GYdwMx}إ :_pe'% r*\j. '@)]ggW]?d#`'?%cqw]ոz{P^cyo]כs% ͒,&'FtFV&b(,B f ~ygly!\:ƋS@51*3 tg۷0n1;w3$Q#;A4,x('9_>Pս*vK"uc UE]qR9R=\~i4,wj '3❩#tݠoxhAD -PZصڻ %430(3/m=a" Sp]ϠAtS 5 wOly}iyk),nUe:dxH_&-DB`&mɷ6 >,UXyv$UՏ}%hݬ Wc]<KA A #ؔEGD\0zIr:û6 Zt3ꤥG*c^7@Xa{pi[n2 ,I 0W`JJTz2ٷ}#>i4ZiƄ>ҟXɿv?>V9?_j=q['hnvlY~JmRۣrV"L|?t*}vg'6+..7i" wHPz#Q&)R2/[ߺo;-23 * ()i'˭dӮt`~&T|l_{2>ӯ?VՇt@q{^ EDOUU<4QSSQ"C<iBfbm0D@Y@$'uxy]bK3$8[־+u~F{M,: *ݳ\NUyfj('^?dQ<إ|f6,'z *4 xHG -šҵ L׺i'h[č~#~Y0}J -1VNb?ѝOc|Za2+݁mIQ[Kt .z&Ixɦ4ЩjraX)1"_yndBΟRVM 20R#mn oll|ݘM͹b",@QU3X/gxݬL;ͼWf̢Y;ZgejLZԚ 4?%Xg_vc~lwBK/=EdO!~dAKKaWriߣsRekG⹯ rgVU PUcQ3z,'}Kau%GDY#Y$::8GzeWR*9#*C)ZZ|?ݭiS0;!6's ;L$u G#ȼ |{m[) [5 ?dA# x׈ vOo^{jmSOYW"Sq7Cޅz*5Fݸfbje5֤՗$֟OY*܁(~JOqvN^"_!Z-xI%CO.Hϛ%l`w 3R;t?xvz*zJ:HDD*F8J ;x-PGJ*<\7 ^I15,jI>dI>JMu~i/'ɎZQINyvDGJqJRjJ$8Lß}὿[ovn^?gQ>p%D*7/{k}wpM+#58YE'ԙҫbe}mo߻1 A)f ]1EL31c>|˗,m{JT4*.jĀ }ެod dJą9y;g:fm=.ٛs Ixxtx!+(k]}ra .mjV'D((,xRrzw-i&]*MJguwty1K=bF![|ouj<:R";;XfhŜܛ \ycɿ6RQ(ĂG. ~ jq[WV͕;TaJb]OU%ʬ C_ZDf,$~4n Ы;ǹd#K&‹ygxosGzν{3;4,w^Ǐ@&yPd{{íĚWJCOZ~9W]ṛU8 uyῲ4xNnޗVʰGP6JM! Un| X=u  I2 \O4R[mD$\yT~l6{K WHP? rCj45YJ*<2#c5WQU*)+(G,RȌU ymsoyoݤ,R:0dt`YYI *Au=mrWFYYMYM AWkk){;dﭫk-VxCrjL9:w|1w;0 ֠[aGG~sfi쉪Rje qkł?SL{/-sX]O_8XCz@Xgw9!EЃ|0z'W:{;/L1.a6XTHMk،r-{<ަpTpC"T)`k{nj Qm'u䚞pZ*H/uήM44QQ,TI4" 0ĥY\UU`9>$K+UH*I'Nȏ#RI O1ww뽩Z emtvu]L2yRW)I"?뉤K{.^eyn}J$ ,<@$W6栐tf/%}9up]vhH)/Q?)+TG߾m_臧>>z>k/'Ũٶ4ꧦ~ziNߑtSqoJZ|~}nt;%[InlyJE>ؙ:݀5z[){=\TϿ-_%;+P$M L'L?8?mr~ nc6Gʯ,ez߳?}o=)s8Z4+>/Qﯿ^MAA2ѺpK@tQd1Ք #eE5LD`AWV A .$YbWF ! 2$&ki9)AR]1fN"=ǂ(o/ N)| Mz/mB[;>pJJZTVExkܷ-_M^nkZj +CJ)m~e^MAA̿nw;b~߷߿p7k/*ՎeuMo;-#v0 C$#*0x"x,-U"C|Fjps/5g׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^׽u~{ߺ^׽u~7es,F ef:sH$y%*${eۖ*Aon$HR8K;UPYZZ\EceK4Ω ,B*3$u?w'a}['Mj*xMX4>Rj\i$P9&//݃W[EjjX һ<T2xu`5eȖ7qv„aEXb*>NeVXS p} F:$Sek0 mc!Z\.+Yf`,MSȐU uV 20ٝA֖sʱQ H`5@ #x&%7dVx%hH%H_?@vpTuJf꠩eXs{K)E]y?N~ܱ/-wQIʰIWq!r4|ȼciѥf28g? l;")luK$j܇f]ݲɽ@7u"?L >µz_gvk<|0ojt]M\63xnM<a_rN߼ wՄ'><wzxoV=Xzn~C6ܫ۔[&mEOU=|j;įQqd윬}o=/wY7 {-CRME$c_#^igŴg;Jz0!fՕ{ˠ)ΥuS׻ҞdWn9${ I?$o0H*cv|.NFvS V}d#i&g{&}"μɪ_7#4G]u\26#Ο14O;Zs$sMwzxe8C?ay&o9}SD' V#1T\vormV|f x?J*zjT5z*2O>(W%nRm5RȐ7}}4=xE1K[^LQYb>}}ܰkiUe6pJpH.PdGR]1l( K]̠V8B֣ő ͬDn{yܙ-ݼOf3Y1_M=$ hhRQӢC`$h=𳚹y|K˖,HjIUQEDETj;ųign4 ~'s仱,ēOs^{m+ghVymF 6+7f/yV6w(M>[7}o}ybUܱ^߈},crA" '\//oQ} m5;dHXU4:Yn??VѥIl0 6wbot{_r1r^="KR 'iNb.7iJͻ0 ;Hv#jK*$od4?;mRPTZۃrO /OQ?@.lڣj Y©_B%p擯.}=2Oe.*;əC&G|"ۛu홪ܛs-㸫V$Kp檣tA<6 Q€=>~ۯ0O}rWVPFg4'NfյklְۥJi`$"POOV-i?o{o><7Zfi}}{ߺZ$gܟr/O~omIF/-h;1T4XWrv/qޔu+MGCACKZC 1QTP@b_s=ı}Qc4TD@HTNMn{e;;34d1$I$kՒ*җ{7^~8ϾwNŚ+1 U0GѩnlEϼ9s~ݯ/aw s4hQ\cs,m>5ӶZZCm O]q Ehh+7u~Z^eUdU{S}UZU@]ߺ^r0n@A;s[:,\'d* G+?w?M_[s[:ɷj 7.ݹ7Ǹ7^jH)dlO?J>K-,о7o?xos^N@_yW[j+@0:osfq;o \{!'2_N]l Ou*EUk& ~}tJls:aGs:ǯ]Q[#6K b|.ƑBj>< 4AQC* j sS-㧯}upE'>w[Sl}\H;mnX+bVU!ѿ/ǚfdsun2O=~) ]FS_yYlz˘_?̆/D]mmk+,?.Ͽ_wit.tꦿ9/[Ahwe_+n?Zu?]d;{zrOY[~5glmNS1җ6M`x}SvJҡaP,*yjL?O]a.X9K yg"?&6w-pCnvܠXpE>?Lv6ntE hsc]1 Q cEU@g\Yw pu$2\#v?6bIzza>#twV'vObbe]͎liǡTCA(u Dv0,\S7]2L- d&4쬢E%I$T/\KμmG .K@~(`RFVԂD:** (%Yݵ;K1$rI'|wyH '_`뗺"Mdt7Fd)b`MC#AR$.$a<uGm˘.q[I&o %{8jg;H{ =ܭnI۾L䴗V F$dI$j4,LIDҷ6>~Yr67BrvG@ muB#)3Ă2҂5}X{wm\ڻej([svo;Vb3T/S͵#ÐyeϷu$ QʅWȕcB2Fz0wKݓtv1ZJDÊS0oZDVWcoޱJj2}7Ъ(Ƚ%MUWN"O狞ybrK˷` d֠#ԞA[sO/Xs-S@̟j1d?5=[P ܟ.sз%}^?zuDe%3]rl,迥U?mᔌ~Kw]7x&JI@ Q9~-=yܛYӲHF 猔f4qJ @/|6{kq4wonU"i^QixA aq6_cu4^4x' }"h-DYb͊Б>G:U y(o]x:Ϭw?[xPT?a~=@G\-r37ڎY/9IIQaӸ4E+N #3Mj=GM}:?I @7GD_Co7o~CKKNIa"r<)#'=UOIY:0??>6r/o[m@u+o?_^׽uwJejz{ a0NLyy F$uiuO}]Ϛ]sWB?#y5GkNu_+5aU;GX%Dq鬌\ߎO^Y퉸Ւ>wN߮6_TfdžGdʇFdk˖=gui4r8eb<` 8mɺ 7U< r)V 6.ߛ#gobo=^=54n,D9zU5Z9^[{&ߙyvØ"-AZ'eQ\W 3ͪmz.MdX˺)6ǖTu_TP&CNuETvO<-kqUryZF*ިa#2oY-vD)c8k1vLvY|^d!bUq5hc7a{>y!T9G#qX_f啦g6۸ 7T<9TUv Guu']Ƹ1s'`2yX(zIo su>^4 [)Pj#M>fCZО|wɼ׸r|K䊧O>RFVEb=P颒Ge/sQϹv5\Wjg2@#6>-ܫ4[ ?ltԇs1%~u9ƫ z_[ ʏxy,{_Y&N/{;2e:pg﫦%Lu=+$F~[EU-PYےS4y*B~it~]aw~f9no.9 GVaS>?u{6s3oJmd&-2+/&_iUTYbȥU0$;>ߋݓj":hV1>mُ)*5!n#E׺>ϹH%xJǨ'$b+3HVݴ)CiFn"H&vf=nֻ ս}mDv6mlXO-.Nfg䴌I$TPVm[ $ ܂x$I\Ǿ>{[I;G-Wt(Kobzoqftw\d˵k;Jm}E% U"IzDRSVWx\#źr_-A\#Gnq"T-A]]U1ՔU5]-DM$#G.mdA$S+# #H#tbFсVR >D>i]m7NwgTVM3s4VZ5imֽ|tR=JMDXM3SSƮDRpc%=u^K4Q9h RBGYC$f? qSiiW̠/3KF %-@[ow[sn<ºL*|2 a5ֳԳտ::W]羃"{/eqw>J ;e͗EO%I295,e?ͻs_*|$ܭ.-L4b@% 7aL70\\* iMWꡦ6,=9 W@;^H21P Er*eg*mvú[)%fuXrkZ+7]D导 Ir #s-yj>*!Yeܭ/\-$v?ˤ"UR#}Qe_ueFR :=1Ȣ=[k-*lv`5v颣b`/OLgYx.fNkd7 m72HYewOG Iü_Zn{77 ^I#WxY$p @pu  X*=I,u1=IzcOG4wD%pGQՙ P~X+cqOD_o jM~_ޏB$>6,h1Q*(ª=ؒO\OZ뎞cSFܱg ;jj/qO2] rCik^NrJw!PhhwTy |Y*Dt1Kw ξ9)|7o~7:}ꮿ߯<GM lI9={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^׽u~{ߺ^׽tW;wc;;w:#f-Ӿ*n;I-1sY^["~ڿm& 2t[4SdPiQ(zy/qyTö5+s00|iWxN j:׏g O1l| O\U;m5JŽ$MCW2Tg`gJZ$ KTrO2{˻*6ٱܕ5Gq@B _G1Tw_{q%HaF[dl iޒĬ&u]e))++kj`Q -%:+f ($7 ih,0UU3$ITH⍦"B3P2I iտiQt9YԛfCSE[ٙ IH?լBż?uvIBsV[s*)od,{0zur=Y :j\i"~fj#TT}Ocq.pM-{qvW [}Hk?cE>=?! a+ۅW*5?$ғzuQ~7׺u{{^׺uGb(qo}-<7?ᏬjӢo0uHù?_%_mzjSҾGb(qo}-<7?ᏬjӢo0u:Yd:O5d]͇'tuN׺uVCEkߥ#zWsVЭy5?:'>q{:m%Ym9ҶOJ`0~9cf&Uni-5oův=.[T%SU2m>aCBl/vHB?>%ގ׽u)=Dv4򶥢beZ7#~q̾n#oY?!A/-q 'w %w)2~#/DO1u9u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u?{^zoENW=aٿsQgU?wok}7Sӆ?潯]dwSՆU|P}(Z)ꬣIIOSygL<378KqrIسj''ZHETT׽}{ߺ^z 7vW񏷭n*_о?X/\2Q=k5쩶' t{OJ{Mz'-&K.c u{ߺ^сeQYWMV//+ozN[yVν{;}g|އy g}_]v/;(o{^PGǽ=xqrτC!e͇Gy ӎÎ V}VN~bdE)Hϣv{J%Mp@ǏL+sXaveI߿Sc92QW]O&iJ%jrß: **渀HjҢ6u5 W ~m|Ĉ,m)<τTSi P$ 9ЬK Fy 2Ax'6 Ξ|:P2PB3_N7dWQ=YzFco'=BhS=r{EFc!sr{d-d<dQ[ ~Ri3m==E=-GٟK\;_-"o I< ^:c0%|BāzY{K⏧opio^!" T ӽ߰wh?Qhkc60I4XȚy#1'(ۣ?+Lq8eLĈ ʽ&J J~r\}rdk}nogJIm#Gpaiklj~twDjO :IzlYji1eM]ZLrdqӵ&Fukhep~O+,.X+ 0`hU`pA8I i= #+# G ovϊ4k;=m$UnxڢRto~|[o~9ٍNnZN Ŗd? &*O\t)e 8~opҐÊi$aw^2ş"4:ebW; M9HS(0V>U}7[ [[fyMeN7yr}NhZd73O词(̗ / MّL^f?g!o|ekJ!bkz͂W 3,j۟rt ܧ7DV;-rhrZ ZH(vTF=S=:rTf[͕pU-ʨe V' u{{^׺ wEYF>0msn-7qGG ?{^{̄^t֐HT;FX m<{ 7k@8nf}U#E:'=o|NuFMl2=urxە :r8U?َ~sOeWk{ v&KI~>$1\"^>^l{bpX)U vюl-"IPf QӠiqI+2l͖*y}9חs7`e.Efhҵ,D#,p14&9ma62ԓAB/"^_!9 >cq|N3-R%T agTV/Ms煊'cc[z_?C;y=Ng?[kV<{OcauW[;Y4?k.mg/ܳ~dIcꄽ׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^ֻ>SfjFb㰑mM-!+s< @s{ۇ-r֖0HK#K6XҴ?a}˜=j[dWrLʃLS" ( +M?pտc]o$^MrOax8?~ M%MÑ`4r>CoqYqظZ< GWK^a g?8Cх6~ܜ|oq a ~J]ݝ 6% ,JR؎G|_ܾe߷r$Yo# GC-`q.ɲڸr/wc8bic(]M?}䟷afo׬ֺ#H՝jf'j*,B'?S ~v*8W9W6ZMA%,fdT?G_~w=oq.}n/T*UnCY y{9w9fbEБhŘq"A#/ڿK÷?y'u~:êq)}6 qpFF=kCFXw!VbxadNQ5vr5tD^DjC Oa^eA ˦QHQbϢ+'ýrʩMAalJewi>^-p^,zUR?ԛ7Pwn`#!oj[Oˣ snϗ]6>c흈YM[n|8TtN_R@ X*}>{<{\Qm5er41$R%$ cH`ifzܥ*Hy5 HZ&=Z?:Aw?Q3οuVXn?uR"oOo/}uFrJ(=LHR}u{?m|!`vbmcA2[{(]{ߺZ7 N+9Y}oi2:+~=۷i,W/X[ʧ,$}quoUw^5|V(@~>d^׽u~{ߺ^׽uf;FWo }cWuvn׽uF{>.n,F]m4bkWf;FWo }cWuvn׽u_ #{s$Lzl?G?㣬t^׽u'/Xv_,Ͼ6?׿s*ooՄ{ɮ>9'\/ m/:o{`̿j%VèX&# T[}v6}^-qW zDZ7rpKcM z({{^׺u{{^׺u{{^׺u~o~Ï[;k} }?7{ca,?G߭|pۇ׵{ju{^pGk`{Scj&;smj6T&[l]C/f(oRL<[\o͛xKK 5i[KhR@ȣO\4`*"9iR-G2TTPv.יO[uP-]#ȫ ~>70dpEgVβSUBXeǼ\{iͼ/ivBUEEUJ?6:l}?:wG-t/{(#!}-<x̍TOM$Q!a%~u{˜ @Y2`?-.m捧!<$1HҴ CEGl_WIG6cil-rcW%h^uW09+kn=+hM6 \XZPH`Hܡ $JTӹ[o<͸a=Wu BF5PZ'苪rJSS? >欿musz_W}q˖]EF\nlJEm.{?uPs]5yC}mژNn6ai[@\׺s&;YgBXi2CQ+)'K ʿ,yl[Inw>cꥣ}(Gn.۽>Y~D[Ƭ?ڰ*~` {:~{ߺC|UFk,e*K7wSelBQ7OO,ܩuۇSulnzߘRo&v _ 騟#">*Ϳ/USұFjaF5d;*wMH}? ~'yOCP ܟ/B?@ow]ոz{P@ʖh5=/Mv}J.K"UבG=Y%68ZLx017?p,>i}ay5IY:u{o!?گՓo[APT}'Z_eq?=MzkSlO@_~.ȟ=O;ZMh]TǼ+zu{3ʣg'.ޮܭ_>^Vi[1Ҷ?[덝{ߺZw||&j>79_vtQ=R^׏xqqG?mo߯9^Zz9{ftl}=EQ_e_s>TM?o̟,]Pco]MuvMW'|{&\S'Ads9Zh1xJGAANUs8ѝk]]P$TDR*Ot1ڡYYQqfbT| =w'ȜɜkM曵=OPffژM}5.=1SpM {n~$y0BRzțf>JTSQ2=w nٛO~mt6&3=)Dd {7Upy3l6\ǶEqUSC3ҧEkMUA,{/VUoNYV_('UA[R5}:Xx=trdXs$|u.ػ ({cXny@oyz'ZTZKQ=lC 541SAi0CUU@UU,=z85Uu7w̒ĒI$NI'/^/eW*Z Q:.68JʪJlf@}qOĿ׏xl_Ut&,n _R aƑՏw&T=t@}h TM+13T>7E[fi)?Sdt!p"`:1$[v?%u{{^׺u{{^׺ֻӢ|!,R}ee5{cs6w6KuxGxѯ̌}<q$}m?A:,e?B+!u5GWGe:_fvGOv*7n5C& &*h*c0}Iv +~R]d,q_^x` 9T\5W [oR'̄.tA#ၘԘj{%Mus?ta?]w0Ē/KW[~s]#~T{)s&ݗP xR)x ,FtʈX7̼r9lp߶،swKW‚^TnhD EwOyo# -b-(Hh\,l •&_(ڻ#!Ԓ*02Ԥ_|de*[`r 'cÏ^z_?C;y=Ng?[kV<{OcauW[;Y4?k.mg/ܳ~dIcꄽ׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^֧3s?O)GOtvoT~yi{.{^׺u{{^Lz.3y ֧w1Jj )Ϲs~Qw6.ZA$#L*C f2=_k}1^o\j&&VY<:^/3O;禳}ҹۻnRncfUhE]Q/S=s#"hE=}["IIJ݀I :V@Q$eS&c}=9HhI!&x—b,@Ī.׏5\f|9!Y:ny+Yb-!xݷ7[$Gv'v%Y';+KM6HE5T@:췥{ߺWن5F q_@?wJ8b7|xڴl}si̱o0<*nLݮ2m9]2D(wn$f`97 %N>ߦ>sDJxAι>)D:u{w7 ƍ$;)Q ,ąUPI$ >o+TW8ԓNe(3} }U^3v m*6?'1U0k": *;y l#gHJ[踕Kc%t1iVjWwi Kw7eW6uξ FP+BUkN_يv)>#?e!`H+.;)S/Smt[Ge ?"RͶn/6RȒ'Yޡ.Gb(qo}-<7?ᏬjӢo0uHù?_%_mzjSҾGb(qo}-<7?ᏬjӢo0u:Yd:O5d]͇'tuN׺uVCEkߥ#zWsVЭy5?:'>q{:m%Ym9ҶOJ^ލ`l"oqe#>E+-̠惉&IBP y׮s69^?:|=ѱ0uZͣvֿ{?8mkG}?Z=Xn^׽u~X/Wco:74Jb%MuJ*.SFF ꚕRPKIouro3l;rO)&MTQg5YdE.P oF6n"5 V,hUm}GYIcꩫ+*JJT0I#])<P%իHԆVVVV  ArheJ*hUATwu{rJSS? >欿musz_R?˧_!%>u,:xqgUS-=U]-SlW7h/޽vm0I?SE tl]E/'GK[޶iRR^ՖJzϭ}Au~kz!}OܸweXy\eKGp_iH>&>}^ [(Υi]]*sݿ0r#ruÏٙ9{I85*L5#XU7)u{kQ = s+>8GELdd8UEUMISx<߸ǶW{>-dYltј ,#I$zQjw~|orL|n7wGu-!p2\;{Ͽͪravȟі8VA'5o~,VQn&"KkSO!O.C(FOVw9h[>l?uVa}B럽_%>@o+~ӧTn_7COmln(AO?:^׽uM>݇Uz|c||o[? /O/ ?'tZ9*}kҞwI<c}KI˪=eo^׽t`~&T|l_{2>ӯ?VՇt@q{^N_Y"?Czo<5G];~n'}[׺=n7O"^+_\0l w? ?kpvnxoʟ/r%z~ƓG$R ]]tݑ8u Gԕ`Èp_oNBUByܻ6Z&2Z~L ?7[{ݷ?V4%ݪ}ѮT44&Fc}vE}]n p!Ov/&ZN|=)t[_!a[e{I Ov6斁~;wgW$s4\hT0A'5w5ٟo2\ Y?=*=tYu4n=W3wa*6>ĈXJP"55u32+Ϩ߽=R,19C=WFI!cZdA9GiV\D-~pNQ 8vQYFlIznŦnfrm9ىwPD>)d~\9v嫗sLb% M 1>qRӀt.S,pwZ !,(d$fWI-5Y@`pLw;mbbrC,Q>}i(+BZ>,7Tн3frmyU]+fM q~%QKX}^s^{sA q![53zZ&CmyB^{筳R.Q)V(zZVU2MU]S-mu\VW%Emu\yYYv&}]\KwrSwbY&f5$I''˪GP* (Pt)tN{t+v{,t7;j2Tl~C8S9fĒJa/[?%nw'1=n쬬V\GC`,A~ֺ׃u};m7n?gd/;pPcqm,X)&ْ٨%'ߣyy#hw PV5_ y=t {.wv;MIBXfuo_['>/slmd{ng3|׿slmd{ng3|׿slmdKܝ\~Ư/rXglMSҤCM5gE, VZo~2HQFTҺT3*4EjEYn k=fWhmԼAV!VBMwe` =UE_#C| cͳCeodw޿ ?U>߹oBx\ϗeLZx`dC>FI]Q-H$er,;(.ň&U$zUokkh-"HT*xTLTA!V\K*~I$$9eVsEO[wvdÍɃ]_jXكz= ƳQS451r#.xGEI ]uihAÔ'Zі22[~|Lv;D'Ŏ`C! xU c7ܹ8&*L妛#c)ZTϽG=jrB;rJGSQ/ujZXld|4g$Qnm۾8'JE)54 gjU7oAĈVYn<1B:7/D}hO^ }Nv[fg-sbcMv޸mHܱc3Ըb? K[as/.n{kR#p>@us a-żE{۠}XO?~PUUs۳QLH&!i(*_&h[+=_w9Ni=ST…@o Y T2{1Ɨli#h[$\B( {^H]ױ1[K{ aQPp p,r೿%EđAثiwm{:CZF_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?쩷 k_=u_|?v6?/zٗ]^֧3s?O)GOtvoT~yi{.{^׺u{{^.LAVWHUXXٛH5aߞ^i@Go rҥc;^UԚu }m&_}Ro!K弌%Rzs:^ֶwS|a2yޛcnbu?s)lRR I)jJ&XG߇ڮd˰ybYPXA%b5n\:-X.ZitM<qWkj?/|M Kmd[#wܓAI_q:/z1p*,:$ |w<\_P A ,j2H$tM.[a~+`vA$ g {OG;M>?u-t O TIBGHѵ9%)e& V{Z@(hIFnc?=}#bGȟyF `&"0JfIꍡO"wxLY5)aDŌ0F I\>lpGh +#@R5$yr"^Mٕ o | TN/H>ca=yTxy]NbŻP4tnܩӷx۩wP1[25Y}M#_[ }R vVZi8^(֯ǹ"O6wi!RF1%¸w <:'%y{C۲,s0p\G_6d+uuA1nC 25x̮/#M n?%jZ : ;G,R)VRUi,7Ivx'FHCtu`Ue Pŕwr4RJ:…YXAʏ){O7ݟ|JɦNe7Y K&;6Z+LQ֢舊cOz><ŶoXž srUV qI..) O iv -ܲlB#=(ГW"+7=ރ?ѝljFe0u!3A<o$O=m{^bpH-hiU-Ծd:k.}M=ʇo-_PdOɀ#{Ǭj$Q0H,[r~j[}oP7kF_*THx=Zm~%2OGoOz/{ =onMKjl dlDKM)rJv4S $578,{ukkyipfuHO8XMʼ[|P\!UIB54mpF#za87{C۷obw붢xfE<p}[_]p.`u0+xdftmo/}^y=DQ!O?{mߏ? vhiɊ[Q+n̽ =\T?ȣ }LD~~mGgceH$1<Ev`UbL,_?d:ݖϷr]^VuBUVfd12UNJi?o{>[xn@/:&_m/s{^D|;]oY:hVצe=+w-'"ysƯ:&_m/s{^CGs_}I"GX=ν{{^lOid?_Y}>l>U}?nl ߫]@}SsN_7Ӧ?k^usx+dNeWVGԫ)abETG]Qؿ?`ߌ[JuwCW-G3%˲Wb7멆\o}ovVHeTkݢ5T27C1=r#rr_WWV݋^@@ #V! s!GGV&zE/^lqm ۍTfh&A2GQKQ,̉,l9cc._~d[+,m*YHWG $n "oϽ/"Eve(֒7E( bI ]"Y)^MwGw..: !^5 t15< }}${k/sr #aSQ D?om'C'\qRz7yi%xš~RTDsE$GBx=/|pY766TӾEЄsE4^O04ݼ+H]~Ccdu}VP2=usQ)$llZ* IZe*0 5ê98Kޟ&t6xoٕ5)5/hU 2@{c=כZtXT\10U*5%-Q׽u~{ߺ^׽u?{^zoENW=aٿsQgU?wok}7Sӆ?潯]dwSՆU|P}{ߺ^׾uOU4~)]EtAN&)'=/}?wIdϓ]\uc%2K+ܴ;(8T~B)},u{rJSS? >欿musz_k,]YCw\yS`\ bj!ʚr^Q9&0ۜy"xv,5Gu&N12I&;%%>&Sn PNĵBmf( &=ג_v꒍EY-3񔁩:7?yo9!)F}@&mWxFW)!):CaMEO FCխĭ4}޺hWJ1;Һ֔DV1vPVo*R`644"+=Eg"}{ױ]As- ԋۃI3AkDt43z/oZH9fA҈j[To&rZ:`K]Cdmϭ`ۥ0Qi*fs=~[-['fyj$:؞u97-W EY夑G5flgG9yu߮93\XUQQa#EQFfz$?~Jb O*Tʫ[{)J_b,5!Sδ1t?}}؇lﭥѹ ֶ 8֏p$ hɐ1R7n~~bE#Č4M)A#=jHԱAf,ڝ$'yvbX֦%c%? ?{s慿\~*=_n.%_!.w:~hFhst4&KI&1zѾ>OY}Ӫ~{ߺQZZ<{vLxdQG[mr8 B+ `CUDC ^ßH\mQed6xdg_[G#U?tI:]CwmgP2\7mzES5jOHydJhU6F/O8KmZxĸcy&F֚n.R6--%Y`|4@DYc+!TCBtoyE^ةzG#ɤ'ǿVoYG6j?=-n r% p} WJk ޶i_ ;7=4qa>ojIc{֟Ա'_E) 1ʓDZeϘ-.]St΃I㠆[d#ۗcN/X@ANueM$K$ld8,m]UtԡQ2Q]25͂~{U̞s^ViouJn6u~i;G?c=MOը뷰yyDK}{ߺ^?Cuǭ pQ ~ykxa>=ѱ0uD|gm pS6xY2]uB^vu~\_q{vRN+_ޭ cޛ&R/5nSkA}oJE[MW-bFv\lILGf>TzzVg^׽uM8.It$9)1PBߔi^.o߿~{iVXvXstY3 ]$nA֓oږ>S ӪeoVKuʼNU> v«;:njۋeO45Xn[cnO>TߋcMڰ&&Ė|˙#j1_z>Q].n6yViߥpBL(#?˾{{^tZ.T7koXc?JZ3>32VYRaS>9´}z4܁Q5l p"Fsy6sa@'L,>a| <}z|:",Ԓ##2=X\*C#Z~յade=\$Zipr1)X&i+Ts{Ocr}Y m*wJM_MƤ QByp+E 9kMZ؁L Pe,FDf&?{ꍍ˱6 Zd\Ujz)&Tt$Py1\s-r3B'],82j#gL25ICʜӽ^o̼1٪"7RU< ZX#k+_[p5׾g|fkfG>w&Mɱc"JQf0VyH-}*J=EImVVh0tϷk;nj[yW')<s@2[Cxk;57 [in,monZ1K[LXX[6ˏlgZD5s,)mlEҺ'ZzW"}KvW쎞ڹ_vLU~PSfP1h!iɜys f"ʤiy) 75&[H[1QE4z[(|+G%l55׳5,{yIB!Y١biIW)3X W_w݃>_uo G x Rj= 0_zwu46{m?Knҳ`)GR^Iʫ;w7W3U*k3K`|z̜Hmh#V(lA l$!snٚ´~;)!"# R+⼘ gVD/2 |}#pSj DcY)`VGtxy}/z|m[0]AƠ O x]@U9ȱ/;_Ok>sk!")N Fcj|9T!dmpt|ZGݥaw4êw:OL_%1DRK*dU->}=; {0Nkq_^!Ku.K{]P .H‰9 ? \V5&,~J;'3+%&B8R"}׸ i *GR>9M6D'&CuOH? ݕb;)<8ݳn dsdDC4ǧڍ`ˡcZKw;piׅc_* ߵ@n[b\D@ґ>ka޺pu}?lfp{'eey*"98xi(( +$)}ӓryBklUM$l#,! UQ>r1rf[$spCq93HUt9c}o׺G}[8~L&N6ꪏ252DT{ky} Đn %ďF^G6[&reIBE[yиc=n?_ ?*(UziQbHqw[(BBxg =(ڹ7?cѭ0u\̣9~n:pT=͆c;rmjHa%-U+"OvA/1k]#AYU}k6!|hP&YUdb:$F.Bܽۅ)nQTDmpUAfAWG &-&[l>g{G)y<Ŵ)Zj7Uc$G>{/}Y^ri9T` *H#s"_[ =Hynr a#Ѓ|Cie]v- k̘6udXrJ x%І:|/2#_oMz/Ğ݇k{(,u,R6CLF'8D"qS/U=/__H%*!_MWKjA܁(uAfin`5A RջG=Zυ8Ȫ&iVJf!휺**DӋ|Z7Fooyd#,`zybՂJ~8H`decƎvߐ5Yc9hRTY4+UuduWGR++ 2#aPx SQ:"Uϐ꒹6j`KQN[$܁mpnd2.l-׎xD9ÛD"n1~m#ˆpt RQc颣tAKITР$PBT0AK,hTP=}K4fdI?2rzޛ׺u}M%o]8M'zO6}r0X?`IEpӏSZ:U? ]ɭ̇՛'O1tr?ݥ;kaz3j]05)c.]5- *,(@/pkϜvބDL8e\4ӍNna>AuNv?\;^nn:(ؘj!&挤"9~ܭ4Hmt3/e? |2%$BF /. Z]jb\ERhXHcF8WRA׽u~{ߺ^׽uT̃mFmLuVr*x䱕 s#3Y<$Uq54D -V}>~l?(B4m]~6eHP!).7sy%>d8An?]#ZŬj"Ɗp%f$I&}јl>U}?nl ߫]@}SsN_7Ӧ?k^usx+dNȮ7џwrQw`LPH=%HB2ƹ,tH̷>ZvuSnM~w~43 K h0(\G$/v}۽)6 ]DLR@IQ(ƙ/uZV퓁>4;hJ5e(\b@SYeEhUe#s9S ~f勔]I"~GSFIdt`U -|r?/ []6FLT:0#*C) ؇N{{^׺u{!h_;1͎\Vy]ջ5*:ޱWSܬ:`DT%78~_y+8l}YIJ˪=6Edn:A:ٮ,q{DH;qUޓ "Fd.9=go^׽u~{ߺ^׽u?{^zoENW=aٿsQgU?wok}7Sӆ?潯]dwSՆU|P}{ߺ^׽u$!yji憦i)*BC,R*C+ճ2YIAꬨcCVR(U8 'ɝ#}V8dܗ1wێEHiEUkڏ׿{cߥQHEU*KFYEbN]}mlNɸ9xj rSlV{ߺU5'-}YC*.[qWzc7FsgC7ߊlC`bum+ҴDY:gԵH*&l'mnrMTS嶪,ֵKJjSUIQ?u=gدȆ"dLRC(fO0OSv~4kgaU9UCWyPV1̪Qb ?&.s/ArVF-$J"A# E ]Rq=.ک?:y%_L 'TK4<"pxy^ak _il R$-R9%吊 1,QGok}=Xm>,DWQ$+c+V5݉m u#uuCfO26r~3\?oW0ʽE[ ~ |pKN?Q =bI?C,?oϿ~_t{ߺ^ #Yc'IaUKݕ0u g[RU,ܢo}C|4=}*)7NĦM^k/W0dPU1ч}9מ7(\ֶep* ,֊%84).h9)n{)Xn&k (e]>6fJ6]sQ'^׽u~j쮱6Gy|zm]릟tt[tN>&T|l_{b-LouJn6u~i;G?c=MOը뷰yyDK}{ߺ^?Cuǭ pQ ~ykxa>=ѱ0uD|gm pS6xY2]uB^vu~-ϰ=IguZuvWŊq2s㭥3?)+bDG 6L8&7#!$ϢNe>kY7IWAu!$ȿQSsa{n-vݘF֨3xڐ9eFw ~Ķ)nHڞUVqcto6mgEŤC" 9G)?3Lqbv?T8-,k ' A&K%TG Noec7[2O3 (HQI[{oX.H_F {~Wggu `no%INb~5[;=9v;¥BPy(`uھ]ح9_yj+#Oxjݵ9,zF{ sӦ?ڙەOEoGylT<(O{4k݇y W4N8tqFXY3[HeS 8Տ[uWaag6f6uQD%Y3Xdӏ-;A0:0 菓ϜSn-)"h،jGe#+sFwʼ}w, iM^ H=/:!RM4 1+qEkI$TI&r}#C$*$h$z;@I& O=ig$]<7型iSdm pGW*tұbO{jh'5?Q 8]X?ly=yvV*kxCOLSϟ01E?8(y׽tf&|{npϘy("v&IV4U<T}nc&[IS u2avL\ q6}ѱ}ۊsmL8-<dS=⩥VHus9Gw ~f{PUMRE%h2#Ls?,onV挭7GRUAA%胯{^׺u{{^]{ yxES:Q-D,TdT(*%f4IQ!i'\l&?qn6(УWJ‡(0cJfe_{FǾGqnxo=3>)>"T(b\S3r3m kB3H[ۚb3ogW[;/Hm- 6:Q З SM(ktTy,me.C!QKYGUNZ9b6WDbH }ͽwv,Jрeee$2 Ai0ki9#b 2 ER]{ߺX <1L4C@`G9F0 ewCT$] P'0I ,h 7'J9"FcG˯3NI?<ݺ^}1/`^Gne<ԵD`HkLdAE{Q^tm92ڮ;f[ښGD *-'J">|]kU%?u]m{b{^Nzqt"jFٵ2l)>ⶆ.~r -${Nd}ykX7[DZrq YxqPf}9V} c[ТA:cS)M-3b={ߺ^׽uB._9G:9wY׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV?O.ݝp{nWYRԴu9T؝U+KQ(1{߹:"suv6ms²II]Pi jV7a zO)s/9 r_\GE+G Q΃aÁ|.O^d飵Xox鞼c_ #>ׯ~//hk 3ן]k»cv tbw65 9Tc64UG3*ݢJ8wY7͸otjX뤔dR89R 8;2*p|%~é{^׺u{{^׺5avĭS9&ޝm hP@2F #Jآuu0ΉwGoOuiv])5i*b"J?hcmmjA*C M lLn]~/w-5.P*(Yjbr bDcY$XQuۯ[i0m14 %,kRC)Z \珻ﹼ+-nZ\ن4G F0G)b(D%XdX]qp6#A$V A 0AP+#pAGGsn{g\=݉6~QYw#o*76RhlBwf<OͼvW3o*/˨N::yoyy~JL)njRhU45Νfr*pd){by*wbTkcp+_|iɱK]5huI"G@-Cu|J盥f9*OtG6ңYU:&6_*F/ٸy=T[~$ʽuoSzAG5,u yZ(81}1{wOt4ڥ@2=a(e|VH/sضkuqIo'M2WjcW1D@v ˫q]y֟{/"־?azq |W,o"HFH+#$tuhAzoGH" [_aF x!AzRۛsh嶶vﭡY*msvm֐g{nZ,ÄmJ m%:nI D6cfdUk2p O=>V/FAxAe,KG8̟lV{t̷NepBFeu%M(VVV䫫:ܞS)[Se2Uu,FS=fC#_V,^IevfbI$]w%43;gwrY,ij1$I$g 6%,QDB"* @ oizwC:Ӵ7~cXys=P''5rEVP@!*K>1s榚ЫQכ=cޭ/!7fHԚ.kD#XP0ory]{U ,j >Hk]YO GG wwZ_~//hkXox鞼coɮ[scho+܆#oKU[Mfg1dFTDSĵH1|[nQǯPZ)~a@sL{mϜۏ5mS-,U2g2N1OʴQ]g'^я,nI}cL&Zh;>l qUCV(H4OM2{G=7Y=%*R#dSNth_k9C l& T[k\ I@Orz8k>ؕX㨢Dlꛇ8_ѲP!q"ۘem \URE.ͮWW\Xd{_EHk~ۀZuXOzc1>ݘBk5.)]X"Fso Ғ[њQfS_,ӺwQ&qN5W Jf~`=ۻKYmsIX#ڻpUVvIHN1O:Om9cO""Tu#~siH"63<#41_kr'z']\dmeL)$m'O5[驧<;*M2&|dA8Ճ, j8aR@G7$<,ō['$S/z{ߺ^׽u~{ߺ^׏^g߈4~).{˽;k6+=d劻 UCY$mar/$X{-林{ϻ\ĒF&p2J$gf{;[lwS]H )ՐFGF3 wwZ_O//hk=Xox鞼c1?]gܻ'yʭװ0\Lf肯!411+J8pnd ݖ$ש RMH΀?wj/sd,Vid@3ʠ&3ּ~5A:u{{^׺\d>_z*phdW!!ޖ7CG ki) $j͊VQg$s3sg-ٸuǵvG)_\ z w( 8aD}Mu捪&I*FݕkST'gg^oaݒn"ލYf6<"7襒 Y"3*cgj}g|sHJ2ejtȌ,E^{k>mCl}M> t[rLrjдN' SV4ŮnuH&ءl>Db<e{j=K_TK_ݐ nUZ\IZӫ(ۇMeMb )2z\:2.$wUb=eaZ:Uec{\ 3R4gv>T?>A5Ϗ=WO] M u"bPU/doQVLuLw1;gܑ|'PKUo"$uGӬ]+Q{gUr H?iEtm'F=sWAMXRipdqVty\tc}]G{ߺP29Lfr ]*5t4]EK*?q}*C2?oO!sQK1'[?e6KinLR6W;7GMffTUc$xXfH]v;/cK#gXUur05##6i[imdkU7 V8*J  W{p~ݛ)I{g6{?Cu @:c5gsn?/ەґshpKն\\]EkyUUeu8ϼjK;_Z{L^]y֟{~GkU?_^Xox鞼cXߙ[kvn޻#=Orn*+M.I5,X,66N읱"Mv^ ׫ Li t>??Zv7(WgZ+WޟOYoVr䉷ͺkrb/B1p5ӭk?z{{^a/6W,Xhm͋}mj|ǯaMK1W(娪h}Y'l>W++i#2%)IX$xdyxNe䭲[7YGr aQOQ%gC]y֟{ɏ"־?. ۳.Γ]gcG)Kk皯wNJ*gZ|Ǐ#/Fݣ݄%GL9ԁJ8[֥g$ &k5ܒNedD(2Ng(<,u^׽u~_ӽqUUݗvnoYܕRR&Shnvh#k4)r(k~䭃7yⱗnZ2paKeK<DXTP<+b_ #>ׯyU__O=7_^1AtV>i0Nge zcbh6lU~fε|KKj`n@ ~y?o}Òo74ԩ=Vw$(G+GL({5'<{ʽx756Ko- RX)Xmr{/FڮtǤ]{ߺEWl|bz;gmMeѳZnQ'}·&7AYP5eu6 D')r{SeF-7m224qidBX~cUDUDE *U*f,K1=d$/z{ߺGw_ M!GR,[!=4o5LpŘ5F RM'sϴ6yݦRMSV6In]2DIv1xdo7ݻġ*H&]Bu}=5ʾ&4taYvk6 .㨑!!En/K9[<«v;r؂~ cR@y(Ȼy헄5puDy19,.OT T ]m6BuCUHV>q[d&^7WC2z.6ב<2/u*VӇ]'׺ {zi%b4UfaRٛ s'=_'doBA2 I p©᧺~Omo^+D9XMF[uu@ {{:&Yn%TZqb"wmo,`Nn&Y2YH+\v:R J:pJSQFD O0Üw鹓sVw#UTDQDUEUUP.^ݓ6xv]KKH4;%G9yc/^n851ݧ_<&gVA^ԺN*:o|5:u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{GK߿=#w;޹I۽Z~}PO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ]^?Z?^~}{ߺ^׽u~{ߺ^׽u~qxJH":Su) uJWـ.ߛh"a;oB T—?M~q_];sd M$Y}n;ż6gx"U^Bi=ܹXJr*Mʔu};O7KۙytUk܏dM&[+e?.ʍUO][$1y+FoU3]\#;9MXS= #08*>ui^w?Z?^~}{ߺ^׽uJG6mQF¼uTdR?5H$ed5R R,ft= mVh#U@>Gq(HH}5TQlSON,jƧ~ֺ~Tz~uo{^׺uֺ>ר:u׽u~w{\Sj{[~{ߺ^~׺>֨:u׽u~{ߺ^׽u3\ޮor:W58!?ٕsH%ʰ3wmmD 2ȿбM3U?oG iFN[M~ xp6JQw  |NuMmխM5ˏI }=۶AS)W,m_d{=0Fawk@w>? |e6Q} YiJ>nmsz-Ҍp: pض>Ԝt͘H\n\[B) zY|}IbMOB[KK;a p/Qc"(!RnV(0O!^I!XҦwsW$dN׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽t[tUMCƲm`eXzLD3HtC#(]L{ ѱo[kMy*.Hcy( !!AeRq KQH)j3tcs,Fչ|8U2ՙ,$pGH`MÑj}sڮTEEYV!ENIds._-k<]1s Ptf@ :G{ s׽u~{ߺO7SG6RP2WG6kpCC2SZx&1,!Hu0s H by4 hxӢiڂw z3KAeEEiZTWQXۮ8ˁ*X| $)eb_mKX؛i]vخzj*4o:XCiܠxb$J#RZW=4-_^׽tl}iz*jGS[vt%OW4#كiekXD[G(Nn{&sw$%hA=o*^ڻ Af(HIZ**wmnmS;kVSZ=́mA)SSf!:2" [}k7uԫ4o2ԍ@8+ #;ٺFmw0",ʒ+ـ4i=tܻj讧5;kk*Փb!D;Be[܀Mzk]kQuCA ( Zo K7׿ܣGk+{vk߿/2_,^ruE{_E~[_p}d{?vc;P$MI'{[Op}dx(S]lEPaqK5UT4lv:1S]a%>.wJ0h2I Z훍PI-˶BGSZ[5̩*GuXšQ ddg;^ӱסZ:z˴ߢhu/M o)DwҬm`H4Gv u6H#R'HgP PN4t|IL]ӨV╂ EQ؅R Ԏýu~py##Af Uo''ݕYWfŠbďOM[zrxRf2X#0Q -.[wWr,7D\y$NY# NM7rQ϶\G"4i'"F+)0''c ?Lꏹ Koń};h5miN?gN5z~?oSqMu5M~j>5UO_M "?r|M>^E^Ty aW^g`I68yX]q:H#R0`pT%dd:\PYMS~ֺu8=E$ 7RSd6Ykc'ZE4ѬD+fQٯ6M%bI8E 0 ք1Ums }B5xb+R+Pzj-#͝dhn۱N%DT/Lѫ+:IPA6{ox~dI7 5 u{{^׺u{{^7&諓il~3G*A%lxaY$VPTh;YnU.RFRPPO }m-Thއ ` z[g}c.㸈"H#RZ1Z>{^׺Ua6o|nltu2Qɑ{?qCK5iJ$lї)".#y?c{m7p(^dC RȤjZЃ:*߶ao[[H@`OLTiwS@4 ?oϡ}_dY[G?Wo[:"={_dYn;X]l苷]>ђf:cev][ڔ0MoU:~p@^,A@&jo935y,P:r.iiGfx$I^eM%;S u,%H }X)$dy#}J T# `}k{^׺]UB}r`YX"53UxV,~]z'd =I3ї V<Vmz}R,,& )-5^G~}̜ymxQ鑁dQZ,hR) Ãn?#C[d?Ϭ<]R6oHGcƍ<*kP/vE>}g菙WFu=5EacM%VyFgnS*^qmYCen?Aq5{)%D<ɱ]ShGFF:rsToեįrE/!?bN=QȒxdF]2x.(GrT {Z׺Way]׻qbhbxfD11tz]COOrW7Vh`b@(%t$qH$y^s/ӛ]pJKq nddpvk K7_w(g^D]>Zo K7׿ܣGk+{vk߿/2_,^rtוӚ]vUu)W3VѤjG8mPkdI͔Z/_I?sʹ'th,r:[Cio-o4WףV_Ot]{ߺ^׽t |x48'!M 2y*fY#_T9${1{;=S0$G4@A8OIo/l 4vy]c@N,Tpsc{nI]{*!len|.2jdE6C'K*9 B}˒yfkkh * $U@8HŮݸZJA!"G d`d㤇FfZJJH%COMKMgI#1H݂ Kkd2I#UPK31U$h=RI#6f 31U@,MdhOK=8=C=kc/ K7OuE{_Ez[_p}d{?v׿oϡ}m}%@uw(g^D]>Zo K7׿ܣGk+{vk߿/2_,^ruE{_E~[_p}d{?vS5ڭͷk$GTDžrfdP墆SpJ ݶ]a[լ h6kFPӣ[-o+W\R$R -EEEj*+Ǧe,n/dp,^O;`Xl:1rlIgAC~ݵn[XPIq4J$hԭTƙbٯoH!L:Ƌ܅m_37zQB˩_bLTyy ^%?p~ yr͇ڷ@zO~}ûko~t-?N$@1[rA&52%fB>.~?x;h̭P*t949?bEVyen\FBGۨ +Բ"vXξY_ ^\V*KErHP{yێ|[E݀'JK9MBa탛SԷ,v dwQ/e`ߑ]u$(,$`OITt;bjijia4%xBl׮(eam1 *JA GD|rnJH ۂ4 %APpz}kC K7ܣGk+{vk߿/2_,^ruE{_E~[_p}d{?vo9wfFa.ɹ6KICt~c;Ō4,mO_FV;Ӻmp\HfSGIuu5j,l r e"/ygwIcC4,Qu*he Cu\Ȳ NC+)*FA2Q={{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽unɏWGܗ?yEMi=boK$[dz|d7N%giQU gjڷ ISYC:階멋&6VJߩw<۩q]V>$`" RtFJן7Y O 4[r0V$bHކTVwB jzwzu< U=Ro(yRv:O]ٮkiU~:>a6.mxoMQuO\ܝQS*qW96zuM*Mw2'd%׀n=>{' '2G+S)5 /l}V%3*xR@r+S̟K6p͛YGCY\zO])rDS%~qsޛnBkR͕d "*4yWW835F^4j+gR<|yvݕp=3Rn΄'{Ⱥ7__Eak{)7_N?gZ;ͧE|<'󷥲o+R=Thg-bU)WZlI%;?h$5'1*x9=fmvi0ۢF 2 0h7{`ٔ:qbBE͏9D.8q_xctSuz?tc:|sUo^p+vm *3{g]\ Iģ(J{US2Cq}E&$@MR|@fQZGGgyz{}F ԍř*^7]ۻ?F-`1U0ڌU[AwG \ܟϴ~l߿ҙ!|6YK~9&XԐ9a5BNrrn>-Ť mX1ҕX-(j>:g:8v.K7^1_ۻ, &u*42IמA{w4K4E*O$,9 d+ &^zq9z>dKLJ- %]Ht$~㞆l;{ Nwqs{O2pUGkz˧f܆N3{oAqJz&VnVVRGPV<A&xؽ5E"9y#^IhD䅘+ie'֌H` PegӘ-heheV"2*cp)$twWMﮀ]@n eFT>5, `C"/ 󘽯ۮQXMnݮ*c#1\r.Tj*J9c[^]ʚxȴ!Hɡe+"} :u{hI -THQk/$}`Io_t˿P;yՄ[>fnFf,K31ߙY>-0dd|]7Y4]>={ߺC7Ǟ|[O {9n >&f#9=ߙFrZp<1ǹ+/o}l:Lݹ] m44kO1Y)TG3윘Ζ .h5h=Z$Qos/6ATh+b$}D$dsEC8o+j266~I68aSsꓞn}=̖~ {)lMxnUQպ_/>˯o[rҿ> 츧}׺uYCjY=?/Wo?w'?o֦NܤIیy$$>]Um4bkOu~{ߺ^׽u~{ߺ^ճ&*msO{r=b-!Kޕ?Θê3d {>2 ?EsQ :|0:u{{^׺u{tm(n}E}+QW&>J煉^@9#Vc`:͇qϗv[٣%5<Ex(,j8H7Mcw;k8i[8ԻPy (X2zgm 'vFk9M[vbu~;+T&-랋r!'YQ}Z!Fch6n({דd /ss%R<3PsYg[EχooIdE i BvU~? |^Kߏ ]Ñ'PA8̼! _+>1OX;n[]JׄWP*!\6[781'`P2kt{^׺ٟ6+-opa>?kqh=sgOB~Wƞ-{ڲn=ۙ1;6 %G*Eg\Ʒẅ́ 8!(Y-rVЕZ=yo?4|ɶId-YpԢc :Oa:}|_Oom}o{+g껗@Lw]=e;_^_e/Z:{7_JvVڎFՙKN|c'/dz=m.gS[H$H>^.H1ݠc0~:6ï"#7]w&Uhd86ڵRFZ/␭>kSe֐a,. >a{{ Ⱥ.*݈>w#.:C{v{<mPrteBpֶ_5~%~#v;YrwuVsU|1_Y TX&gTq4 \{{7sޫIe;H|hK(J?>g+ƶ,wp)%UԖL%H8PORF7Yܝ8^*:Zr&xjLpRj.?;EO0{55{̿[å "H z0:elI4G~˞w2K)eBR Tf`Uen?˛|mXJ5q_gp<qRf&812z7]9+f~ٖeܯ )?l:X'q5`f[uե*2X.ZBʌYl]O, ӭ&j- ^yeɺy#U͢>q{ics2pihgYgDё$Z s-WS/ɖ">SΞ`l_/?H>йDԪ `#?PO}ƫߩcO܍G+lrؼ>d:vyQuuѿ)1vR%ݔ%umטӭTt(i~E{KW)>;N[mLhMxAj(KҴF ogL Pq> C|)$rpV$ǟ~}שP[*j.%R1]]j}}j;.;v:ل6GʒV4Ze'Kbn>{g~6]EPЈ$qB}Q`I5e٘7n Ien ҫUAT  )V9$?3{kv ,OqaV ʽ%Nkya9nq=2RT&YX}ڋL1? 6$۲A$ArOl>aOuWO\=㻧XN7dnײsNLܹJN&_ne%䒖!XиI#Vksn, @$F|AQM :{ [yi[w$$IbKh$EyVGWm<ϴc`o:^2 JC+]qڕ@qOC޽{{^`'d޲T.iedV@JF}oOYrKD^~'>GR(+V3\pBd,$,N(kNú8e?OqMԟwO,ú8e?O~[Iq[: ?.?] ^٧m|YW ibBKYާV[h9dKTdM:I30Sb8Ng|!.*F-y4‘eR*UcaL|>=Y=f㥊5;޺oC ֱ$ fZh)/ 12L <}xM0=hvV,"l_KT |+eaTI K 4p)VevD)_9_{z[Cn54<91*Cjhk$}9uu ]'Z %֒8=ƖaRkZ&40A~;jjBZĥ %hγ+&z;|nD:cn˄QGXh!OUJco1x(Yc}A#Uv5;*q p' gS$.HfZ,+HgBsLі]sab ʸf:<9@z-`R2rɸj |؀Kܴd/$*er?OG?,!mw&7n6qITʙjW>8g|[݅<E=m7T] pBr:K! ,DW~to[۝S`ɦ;2yh6n>chr_I7%撛nG8m $TڞbO~>c]b+1Y|FRj ')jJnJ,e`AK}cy^Kn43ttb+++u[{{x$YaU2:8 *YH*A[P?oG:Uu>xho+!y))䭬\VpOMIYD0Hזk{՗.{Ia{amaAs1U.K,TeJ(8uwm|{X# Bn4u08=n U[3?Fp ?ΦM|1/u;ÏvW=5'"~J@,zqYnm<{{M I֏;ciet"oS}ʘi;{%Hԛln*?icƢ06a5P<b}U26ѽM-T\Eꦹ pA>Ɔm8UcC1#JH_ˇȽU:ϱіcKOT*hWu`U/jPI:P׻ul=wD-mƠY|h&]U7HLʾ{qo7EyI-75csI/$C!1+:ZXj;/{E䤨luFi)Fn\KRӻFL5T qȇTt!ᔃȸjܴM&ݻ R5,LUFu4*þ)P|H؆|eTڷHL)pA"4ck_"C%ae.U~NDfLNV$陘 9/kK~I%Q<nvFUBķΡ-G[I se94Aqq/k2`YT.Ñ+7yω}.߈WdvnWwEXid jݧ+d^DV 1URG(~n>sB]SO9B%D=Z^V=*^¸5!CpVbwzu{5[ {3!yXĴuPM;Ή 'Le|r $0o/ojE,T֪R g^nO/MpCFSKv4X MQ0h|_ضfƫ Uӧ)dmZ24\<e'Rd=/އogW6"c"E %!8ҫ1Y#lJ{9/wl #e-7CN˔ ZTUUUW+*9 G!S5nC!_Y3TWWVTiIe3I>wws}u%㴲K333IbI$I9&u(%8P**UP_{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{GK߿=#w;޹I۽Z~}PO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽unɏW߸=]3eXq?[v]֬G8+/ nW7񝩟?KV,e-3Cާ~a#s.IX6q$dxZĆU7#Yr^+sj}r)A*ZxsOBN8:+!7#vVz<K{w1L1d t Ym.f]{ypB=P D3BT2Y-տ;½mH& g& 20eMWU4s7>Z!4OޛRwAhhI!fm*vh~TߗV& B\@ĈJ@H+:e#u/od# }4D 8Tj$e\R%1k׽ux?/>nCޟQe >?I{7,ZEsr⿿O>oԅNDu]d^ՙ*ߏd0T&<<}.ԏN\}Rӆd̯g_s51\dT5'ȂpVnlsK,MZN+j7-8)e^lO*Ƴ}2>ƚi(v."jMz9ǹyIK$#R[DH45"I^6`Q=2d"> ?eZ…!VęxѫWKޟWw\7/O*uW_cVп)WK.9e8bފfoBܟhG,f@7kualYiO IJ[5,-ٛ-TamY{|;a*YJ)M"dZ|ώ=M,upO"Sϖmi>aˏ|}ܽ˕7ӤKgj^[Q[!$adQ>r-5)4ɢG๋aO IPr'EG{^׺أ)̠J{'=VW{}?nٿ煿"NkËl_?a,e74&ש{^*珻/?>]Qgyy]t?N}c tg-bKΰsOrliֶ0Q%oBHw-(I"vx\jac1`ߛ?O!oxaczKre&&I0Եvw PO!`Z{ﯵ&dsy?[΀1`/{E/i>q4r#/UŌPHzԁȊY5J:D?FS<{ᛩF(|: &_˭?`v}?n?XҮJ:>cg';OlR6߄KQ."e*z>sId@c*EJg*{}7'iv;q[r8cΠ14dHga_dypمxڬMH>"ֲ܇1Z5B4o=W1yݝžst`O V2 y m^|6b/YPO/=A$lپ^rW$6BmB9RE;H( ʺŊ\I{-ٞowOOp`C n jMcm\\HÆRUBOwse!k{gh)u+-lgE)dUr A:jWҮ{߲8mk/>/Z~ڟWyW']oQOW4]^ zuN? e"=,#`<#}ŕ7Z+}8e:e?ql?trtr-mjHȶB+[5;_N6mq2{kTҗM3I1 閚s~^_sw RGSP.-5ƒUnTqT(`~v\0a /0]y1 "d $ǗWG|(@)hl*| Ys٘9|I3#8z: ,)4`ߣۭh_HN{OêuC)P m;RmO 9 ~D5*j37A>+7X1c31(܉ 9"qT;]mȌ(Je <#[^G{dXfE7\FRC{ߺ[p,!nߕ_#/\?Zgܟr/OnN1յOJu{{^׺u{{^G6?yҞvKN%JM3Ǧ>Ͽ W}x<}ͿI??GS~u{ߺ^׽u~{ߺ^'!sFLWE>/4m Îv,ؼD ~Qq?9:`ړO`A+/dCT}yO.[{bs"{V'5?Zu ẉo~?rou]q.],T+(7|}QS{ng%m܀ps(*mei9vJnf:si$)qus$M-nY̿dmظy%MqQXuPRYx5&v r^5 j]cȯR{3Vulu ™j(Sȇ#C%5t7DA&n~s۸{ 2@*ArHh&9=t9o.Z歯 VPDHƨ|:ugMJSﰟpsWz+mTkW%ho>ef߳?wxb tX}I}{ߺ^^}O6* ݌YV7tAL# Hhk~޾3cV8nV &[I;#n0~\d Q Rtď\L?oP[c>:9ltb((jt$tgS)JGļ}om7;n#2C};?dqL% Lo%q^%V&?GH_>/m{aK=ìq<ى2@뢗76V޸Q*O-ֽg'ԋ{v|vw6$S$7IØuHnTO7X㰀)YJEt%j"CF,ܓ.cO}}佔[XN!1 5dp5MXvyTb2z`y0{/RdtV^xC$S$P i7=V&aif|#1rflQ"H[˾+m %uvV\?% Sw>ܖpRW^׽u`pn_;wNR)'>TigK$N\*R,r͖_vvFL܁e9g?DTj46H ?dsy7]%~BaQ~(q8 X C#R ]''ω 5݁h++15fq9ܛN:aIj`$TCYF GFUf^}^bڑdxT3[<5P"u#eYՆw?r.w7hEGNg9)4'}@Jj"ȌUчѕՇJV$#߲﹇8mk./Z ׷?{Ǽ_yD=wҶb3׺uw=Կ+: U?_}csũm'7O^7g(~>o<۶LEȖw:!bhfuuzjUQYViAxO957[TfR;Tn:%Pd7^l*Ĺ<`Y iqlMzwq*O%mm|-~M[]lEI:kjSQ8}=>S<,`BVA^y򣮁u~.7pv>ͦ 1rǍMyLRD x1iQ]P@8[ػCspCgZ2DU=8\q$#+ytEŷ.FayXTE55K!XN:ړ'b߄_ j0E4*Fc["UyFoS?x9j=oeRiF8[f񶬿\Ǘz}YIW*IU-$P0Tqg+;u۝B]j&:~-hmi60 H J ҟ~&;"6fxc"*}Ǘy:bzoIɧ|e!܀ `]D&ktP}4Ưozr߷Yn-rmjL  2{Y׽u~XG?6/xʏy[/;Cgi v|p×?K$nY G捧\˾ӯ{^uѹO߰-EȽfMXXn.f/QMT)r>&H}Sȣ+xyYCVR~>󽷷|}͗;ۦ#n\Ht‡+뒙'; vw E%龺y)+20co?|=fFVUv?ݿqgOƆ%[Mj:K1D\X32fF<ב|=x+ u]X DTieb#iOcv6>ܕxi+aYx1x$*ptSQS*%יy~9 Y EkDDUD˻').[-7v=H^G%4a^u$ȋ"0#ea =Y)cTMW~w>0>v|.R&뚬y򴕴4Q-S%DFCBZQ%"Oqn|3 F%ՀŜ~4p)lXnH#>Gc7|: xֈQ〥e/Ï6.ǭ,7fv5,dEUQS*"e k;7Glqive1+H.M H8U df#ˋMB4{ [qP(%Oio|շr#Lg4?'a㻷7sf;#=+ݩOu<!QЃѾOY}Ӫ~{%{Ckuק읧ES3د; sP⧯5&HfYU政J^GXB4qL 3-tBCl6z56s3)/D{2$"[m-@vV˪(E|O)՞Jtqߧdڽ[e k~nkQO̞onq{M ۈ#2CqOi-n2,,^)5)-z\/ GX9OsPtS&"CʣR/ۣ;ӵ+~ޡ671q;J}cQRI2 .. x't}{{a#wF) c.WLk$^]ʒc P$ƒHAftSQ`m]k$Y׹dIxj% -LjFPr$bϚZK+b +U`q9 ʚ$kwR$~e-M).*B!*.PĺW+GgfM;;/vAU $J*(|8&Fc )!JƠggv<3g2M]]f9 QB-NUZWr-lܟrihP`/$IAV&A t{׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽unɏW߸=]3eXq??ea?mw?|6?ޕG,o~%vy+avѤ>Ij񰱎u`!W%EL&JVe/Dw}7Oen$>xV;prRLTBXTp^&hĆD}o[ jlsB3@}2t?'UѨᑀ`GId]ux?/>nCޟQe >?I{7,ZEsr⿿O>oԅNDu]d\dq<R*v(O<{f <ڍD : = ^`sGT.+#QZuP#_Ax$tC~ /0C&帳61.Hkx"uRTʒ2|}r{.mwwb>,vzàBL(&,֮ۻG~n:4SHe8|jgocc-c^/g PtF(DRJT-sN3l#,9Oo%$5iN+;|5ZI+{(llB>( L馪>ﺏoşɣo?jh%e5!W˜F!X|`)}6mYj|h2|XuQG"E:o۟ pBMԕ /-rES797tP,T~k|m6nf\P Og3QI, *(,ѹG4\ru$8[T#xRx .'׽u~lQPwo%zh=Ny+=l'UM?@Ŷa/0XNc`STx׽tj coĕsݗ.Rt<<:'>q{߿:m%Xo9ҶOJu7f|荷_sh7l% щ`*Hj"`C$t2 'عfkǗەWR°W08:pOY'-In0IB 7R%|G`FE*2:5CeKTvXsu@1qIn&6z;_ߗ,DY=Z \ l~jNXgEwop9u.lyC~Q`2:{'^׽u~{ߺ[>(ѬvVRkz|f6ʻW+Mѻ:`jڪ(WAr>r_gs_66{ J`,'8G4Q@r;'.4z$c=PhxXR\ftt"p#rF(}@<5>\(;- i@"]*FHE_9oj-f-!X{fkfb|uOW};{G NwqaWe*ިgOO !^\n?Y;>\]Շ,?#sȴ]oSڗ^RvlC909!)+h*^H2}{=6˗?G;Yݪcr~yܒ[fic_g, alnE|Sjeb?ebNTRDݻJoc.@1dJ~UN ҍR~}Op> vqE5 >;PQ(Tn#T޺[P)#e_Ssp׺^}]=X^?u,&N5lh : uGY͋P0C骄O2b&30ICMt~c&~s@$`YQILq idvNi?+P q~n:ګ/d߄Hm^,ak gTQf),u?=`l'kkx5HQy"$r²Su˟lyspLq4Ց-(j&U@gy/,ygcvfU$,FƽuМ>@y&=Z2*;3VwP%OTL[L-JWK]OW{z"[S5TETC;XbK5˵P l}Qv A;ʚz쁂5ZzA>≕?O*CKB2N+X_I}{Ͽ W}x<}ͿI??GS~u{ߺ^׽u~{ߺRq,~?)(ql]**y|RPc1ȼ'HAX{[{cK5ìh*BbHyP$T>m3Gh4.®۾7fGK9K<@Gv9wn>ŨSfi`>q +JoǾgPl-S CnYiĉ=j;7^~n;w]Wn}2pUd/|h<8PpG&Ny[-M#RW. ax õmVmmk(}#B-}XV>lI9=Y!u Դz?3L*UjA Fxc$Rj6{ˏ/nNde*@ vTB[QWx1z~B[$wJh2֒P\/!'Q%[5?x% O^h#i*?Xsɒ?],Z^"5 8m?I{+ygS-C2D~ru~l?_'-a>m?͟= _VKnݕ-~FUQYK?j礧ڻ#KOSOLȧxN]=;[9(6+dc(F=fg<p#@O5l\~DW޿ow?R{|(67ROSmsw@ԞS@qSmN^5)Is7DLO\ :uGوw V j]EgﮋfΕ:4TA^ΜFewuw?*OWIcl.鶭VҎkrdqcjZT_y&3sbu3r3A7趲Z6z2NP""f2i>NC%Quw? 7pG#*:yOmIQ򵧮ĭKStmYn DS("?,rLҩNKk oCqatė [@$~"<hH-0_6 6ի_L*sv=Tl.U&o~Ô[cCc2鵽o0"60)r`jQ2}w6gCih3HQSnvv1- ]r$R2N`l~:E.K#KTHssڹ3iF*7Im'vF^Iă j)l7˺m$0p辧SNcv򃮃~{ߺ^׈@ "{42:^og?4يkiEmMK^zb1k Yrt\}2z].mO 0Gm41yY}۽BE$wi Mqp>KA1w;-@a! I]b'хc=t96aK;y$?@lv}O?m^wT'=\G!ul?'co=vcmuO[Ϲ|V%J).٦Ty~PL)nc<ӽՏݫkxW L" Z$dyT4T;vSݮ]96wMD2$L-S1RBDHz9v@cGh~|9,h*D7|v>,|Sj*2,?ŎPi}2(m:s] FGs^YYwr Q,cز=?Py {7Y׽uyɻ4ϻ^3ƤV:iipLs]pkI#C\̵cd$BC n#9C}9oeM7w?Umjzs2HwN.VFA]uh+qC^㕞3fHx Sj>֯p䍺MV{}'w.   0O\zn ⶑXFxxd V&Y͟vόO9ܻw"7L2ߕY]keG8w]ޭ7C͜Dр8%YC Wvo74-xeOE(Rh|[qnLfRAۻ1S;7}"K69FsG}23u>^ЫY"5$[jwE.#%t듻u7Wm IZR{gG_Q֢Y,fSⳘ9#o_|+6͟qj#hQъe DYmq,282G ׺gemv__Okwq??Z/d%'Hܳ5/g.0O7T }g^%MQԩx 8i8rrM<`f 9O>Q\\8̝ZDѕ[[l|쑧z '?7Юޟ)`  6nMD$-NzEES$\E;~ns}^V~d0ƸDEIo~ԃN6olTxĒ|vh"OHOuW^𯬜׺u{xWg5s wsF?3L* Or)~ո];o"Ih2Oŭ$thB*9a~޷|w;çz7n26/?q6{o-ɥ;XAϾZARw]GKnP:W*Rzo.Iq6k5wCxVs!/zuSMb\t?URֿF._F | 4I?@?Լ}?XM v~9`?>5@F^g=eG?M-z^GJ_~އ-]L44zkdHih+fG 50ydvbQx߆EٙU4zM=jADM؊*ݪK&ľ:mݧ?96f[Nf2ټ2QzJjILә%DсgVguD[A"m,{xqާm%XK,di'ꉧ+q8D˺BV:hϗۮ Sn;YLCE6c UYw-> C)=K#Ǜ}칷dh+Ai%Eq<и9 9b勞[[)&4O8?dB>'u]XSw޹ @7Lnd-'DuHG<oUK72WyF;"t xUH<1Fq~h6> 70Z*d,Yn_>[qm;'>SspLU W MS:A=Wy_b{99wm#oV1,VP.b#_3C,nt+{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^m?d3R};GR}_hy'׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽unɏW߸=]3eXq??ea?mw?|6?ޕGYOի-_-л;?._rᕜ)zMdaێZl?s_o%쟣,c;~ iM<`N7K_xd=m| w8V4s ӧt ,Nn\dI{ %:KڴeUl?Sy YzYu/>_wO5r@oza@s`Z&Zάcovr^X@'_SP- %^+&FE,SA42IE=DgP9#ud7R{$uFؒyuy>U UbQB%C zKEHts(7Ev <7Kq]E8**&%xJֿw=Gg}ɶ34mň6,*6VGa9={onmw-VO7ĩ+A)*R0\PuV{?rɽoimd;3\$],o|dVCn‚ ]H%Glc兩 9vܟu'UvNe":y4> 14)/$&#a`3ӕ~INMz; fL^ :r*ԵA"\͏<_So6nO4F*3@Q5:hwwR#;7Z틸j1t&r;_>-]>fCʐ8#_qϛ&9{)U(X% Z=vy˞yNÛ,( ÔU&mʮ0GAgB{?įAM}??ܿez3Vx[$ꩿ8?%S}lJoJazu_,{!xO{NغCd?pn/yM/D ?7/ViVV;[Rdq?ѭfOWJϾEΚM*z9sJʴwP#WG[t}M&ܚ׷ӿ+Z] w0iVߧZ<厂Neelz v.[2:ξ{{^׺uIPT *}aSDn U6ݫ*.h.G6"A_ ;a}5*Lwn_|b ҙc տDѢͦ2q[Z}yŽ< u+JO_SS݄횸x>N*V;{KAϾ'<UiWP?)~C4:~v|JE%$FEX]YXY`hG@5G[,/vv"m ݕq*j{ jb26!|6@+ ֶ}3߼3c EgeyeRs6#s콷&w?jD>e>7GwJr]Ǘ;obS%XͣA#|LEtJTvO޼w-rˑ/x% IS\R+tx~mt|羺9u :oh7َJDTW*B~]h53CU$ [8UB;f"ɷbCN'!'P8J8u .E,4sA:6)4ܫADJ(H #믽*CFA >c{ouVOY}>r[]>={>.fj7z$o[^{^׺u{{^׺u4So@~.p?{ۗ)?7nli^tk{w?gT{q7Y׽u~{ߺ^׽uj_kge=>Fj|db ҭVIʒb옏XrkIZWMC$-xAdmQIuz~*rnQrqf89HEp#_򿮱=f;;#~ E7Mr OXue(OG=ky9Z.Rmva,!CPfh {ITs 7\!ۗ) -W63I ZF`(Œ0G]7}mwݩ^DDe$P],8GId]?lW}Ӛc6~?-[oW;Xvd[c*v<_2)Uid:}wVWPUuZ$T zݯgح9j^ƲZ5m ZjS8zFú8e?Od?k{)7_N?gG?'{Ⱥ;ÏvW=5'"پdjVxo\lʦ/{PZl?65Ģ9 Ok+B%ا_u_x2Ego9;}_Ete=aߪ>/$t5רw6}+M5N6YDlj)!ǯYa9>E'eU sʱ]K"`." Ѩ̾sE9J&,-v uIjkaU:?`7Pot͑lɥ*M&ǕII+i]ZıM2ewso|o}mwPB),cu/fXQJtڟuysMl6͈-EC"7 D nhf]EMi7?'F͟pP뿸oXpW_k~ϥ-:u=RAհ`hI-5pn,t!W$\mo2xҷԲҿxs)"<>1ulO|Pz|3:u{{^׺'.T>嗊2,5>vukﮟpHnwI?g\ lGz?#uuOS/?O>HظW}_&_=ްF=>O֪˯`L٭I>}?S)#e_Ssp׺{O l|?tn9Iw4g/Z횓;&F3PզjA5y=W76ϻ4V׆YYn;5 k4jBwUMJǷ%wo ɵv?pU퍉\JxJI0cbe6;ܶoe}Mq8IdX$l3F`VE{v7m[&sqDRΥj-Xs ћ_j{{0CbCi VFG4M$HU}Df]Gsv{ AeԒݺHвDH3>Zvao> 9QVV%fH?E=%,)=%4vHEA$9~ce^^>UT D@*"( r//-WLh3K31˻.rI=#=z9kmlkdmJ3?zZr1"V<,j '.l;4o|1-ip+AfQN:AsnYJޑƥڞ8 SΥM쮡ٳEOI:4W  4*2ZG=c߻olM(D2*1D,A#6˽{E=M-VLZ|dxѸiOtm^gJ畹.zcgi4ԼJ )`YK+(sߔoU@JO&0a}U?)u#Ynu]eGuyrֳ;8{ 7,KY˿?FM{Y׽uYZq]sJ'v&@krm.(:SBA 9{aI/kh? Pw"ٝ"Oe[4D:1~{ߺ^׿{^q4R/OV=4P #S゙Dc?Rkc_e6 l/\"P)JOϭ7}>ʧO=U?ů/G]JBG[uX >lwdxy7ܱn.MfcG;Q9T1鿿.QMOk6Y6l. &hQ0F=^ ~ՊŎckڌnLZQrx=4iM9@HˊNKMk[Z?WLOqnw_=ss_s?]t'_ _޿tn )<97?ڝ{UYQ[S?> 5S)%HVΪ9{߹7v>^X{l()# gmӝ}Yb}Ѥu}uE+EEq׷o`>S['}+&.b^w5,:TBjԯ[mg$m{ #ab˩atfGZJ^ڶw=ьďX $`5ê[1U}xyߺW>m5< O'= յJi0CʆVD3ċqlC럢g>Dudj5#^ˇ UG<9žߍ;{y|mZ>X:zܒ Xu1ZX/f34϶{];G>^afƱ&4W\0&jx`$.$vv|{v϶XGwuP J5f6O|nٺS/Ml<M{1ԥDGLlTCjCUHu7Ϸܟq]CK\j >;xD49Az}KΜ7J7qZr +te5S^{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽unɏW߸=]3eXq??ea?mw?|6?ޕGYOLJYXY> RpG^QuW|_6 ^YI˶XRv$(![cSJD=Nk5.PtG5*cG~~_s9Ji[Vdc")XC$>[dlʎi|wmL]?.MX(G./HI w5.=(²npF0Tp( nfPgb76Y;"RNC J A۝\AΐAʿ8??F}m<9msn?X6}~}+<6ᓩ N;UHY݉UQ3U,W$u!FIkzF#=;s[Jfsp5R-0DcMMP stl[{w[ۆj&$)!>3#K<~a^McijCȭ1*3$E"":K&'ro ;.'a'  ]&yY|VRksL,`{u~V=&)kgJ1J+O2WJ6~Myhs.,ltB(3=_=k?hCO/mM{M!3_^;=žvhO0dZJ X\dc$hqFۖ}$TDf`DWLA`MMdqWy՛=7m#kla<mM3~+=x@+^%1'ߡFzZ/<#?S[I|to_v>qii{@f-m)Fx]][dT?ۍn+wiSBī*(<}׺أ)̠J{'=VW{}?nٿ煿"NkËl_?a,e74&ש{^*珻/?>]Qgyy]t?N}c tg-bKΰsOrli8|k |7'jv6FYG E8jA%DQ+f$x_x9S-pm1M9oO %Gd$&2{n5I"ɭ;<ɉ$P8f^7rz=銥59XXYS!K6(e=tX7䫞hłkfKcn(P<2p*0^杞ǻ۽BC_xo6GZ7]4׺u{nOrI{^jG5q; ҽ&[6c3TŷiH8` J}9~ߒj|s>!I佣 2ʐFjjA߽74^ahaΠT7/WiG|ɾv*V7ac-5U;/94o3lCFn(-UmQԌxWѺ_f6 9cڽhJ-ΧӽRto]~G&W5XTT0b,f#O,r͜g{<~-րj:Vjb(pGam7[-yo0f՚TydR`$[:*ZX}FܺE=*Vn4.,/ӻwRrblaV'\j. *aF9mod4ޮcAiXҊJFw̺*TUMB~ gjj )eB(\!n>M;9ChH>J(>J'ļjP[,h,iV>d?ycHvWOo^Euz{CLycHvWOo&O/mG}ݘ{NsIW17#Dc 1`]^:4zsNsk̋^B hEKbI7!Gj0GFw[3Zm@zGs]*`sosLPmݑvh)GE>#<M`hYcDמAN]=~"f-7JZ"A%<9ۘ5_lmehhMΆ5hjrZ'=WY ?{?[?f}?o?w'?o֦w'wS6%못_mzjSҾ{{^׺u{{^׺eMn_rn_ݻRӱ?{ҧDd?EsoRwTf^׽u~{ߺ^:͖8We C,H!wbrIr} O< br~ν2($2I>@ :_QOcԸj6qf$:}Y%C`鋤,lLH͵~/[gknInRc&զ$H_a J$=w}Ԛh 2M,vV8@٦`x<+Aֺv;emrMr`l`**p٩DI3r}^g?zx^cvih`Ga14Q5RMMV$lwk6l6{kۈ"DĚ($4 3*Z. |颺{=?~o^g?e~k?h^Yh靴ެ`|ܛ{DZ3{'jqj-fkoRAO)_i+V`2͜<6Rh+ЗvT۠E #dzr}7NEC V9[S6bJpM'EvD0lDT/u 8 BO=oꓐ|e!܀ `]D&ktP}4Ưzr߷Yn-rmjL  2{Yɳ_ur_`=Nj\еm_~j^|ı̿qWg7. _nO/{^׺:[7wݷ+팅4Z( =ӶB>{i㏉+i*Yퟸ9Ys_/J-=TI,$`9i|TaЬsjw0F j x^6R5Q?FҮCS>ڑJgx U9'8߽'坳=ݦu m-o!1uY|SLЎb_r[d:ugo I 7 jzO4WX q?ml 2 T?so~mlfd`йxmQN3~_sD;g:h- P=L/9kO>޺-׽u~{ߺ]3*+;TE,M z'UVu.R?=vvk$ozR,WGYHc%dk/?܊I[V jV ;yݝ{6 )g[ ?TAk֯ w7ir=lfݗmy6ICdUA 18{2۶o/n$ZW0: l2"8-=%Q9YK/=+z}kӆ]=sWOy? Zf'{taN\GN{,3gR~I'a.ZSqMmOC?O?=/{K^yX4RDQx\>DOj~SN oMzWwSeg'9[l-Iv?x>%WYd`mpd79+~^AkKS/d@Aԥc4Ž@:}=9d.tK&o]ZLpaF )^S[W^Euz_O/mM{M!3_`_/6ۻ73Gjf%6+sSOE*U٣ueשH`]QVۼQA,nÕU4R`QVB~M|-5VTjp ҄zؿY1l`nNɿ]w=;ڍν0l2͉L{;OJ'5ݼ{uFZɫ1 R_m9qgݨy%K+#g<*6U:)֡@H.-<zycܫA{<<2 2 #U9R290FA{]{V[geQ+~6yhwc5!:>=rGq_?R}Ar(Ѵu@wzu~^Q԰f;&fBiv>̴ 6m. p?J'Ld+ 8>#6hNodKYV].)F}ǟ~Jg*לO}5?ŨXdS iFw_on9a!_?`U|۪e_^׽u~;ޛ6+nMmG,9]+KPX_|ض[ɣ$5#E`;ͷo敏J]ʚzuoep~ )jxvir8}KhSizI O?^s՗^MihR%ڂsC$%5lT~R'5k&xҁ$$~#]i4fTГŎ2ߖ)LT^}wpkuؤmw!Xeo@ R?}?v{s!ri${lGN))<C$xO믯$q|Y~ғUiLOt6 gޠMZEvIprh7U5@#ť NTA2ޛg-0_F 5blʢbd)(&f!(}6d4Ĵ€,9 tP5EA];jоKUK%r< TLOҬKAN%Dmہ6Rm>m ̮LWHkU. d=̼<{} {YX4eͣP50#Ri**h*+j(k+fheVXVR\{ݭ͍̖wht`UІV p@=uf9"5Y#pYHeeaUea*F {Ou{TTR/RO=%e%m],SQR8XU9Vy"sFADgq|:=U*Œ H C.jݗHf\T#:HuwWp̤M{{y2ΰHj@1p$PO\y[IWcC(+E5 NETDDP*}1,ś$ז$NI뗽u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽unɏW߸=]3eXq??ea?mw?|6?ޕGYO׽u#䱵fOS-Cj28 J,RVP=㾱UєYYHe`@! ܱCq ܢ2:0*jYI _ʞٛ\|]ٱ0Cq8axÿqtѢwd-M觪qeH*i헼ܮv]os >DLRUn&5Ͽ{].;-n$K6j$`9K?1;罷^4uGm`evۡUlňgnYl+!ư ­%+.bA'O'0o6+w hF` ^I%&۟rycڷMmR\,HS1f*҇qūQ?7+~}+<6ᓬӢ_? +V}JZ~٪VTY+Z u@.{aXq밶?Uy\o REAےRzϣۿnwMm=D &Ԋ_oHz_}vVk6@: )VN %Lr2M] a=}]"W e|7KsBMʺX{e}DZsʦR!SǭWUU@UPUEI&$BI5>}w]{{^=5]v>#RdyW1cxH+$3"J Ucyq^Eh2  rOmtHVGFʲ0*Ge$zwVS`Ghu0h&▏# Vc``&;'(hGU\1Ȧ&_ܶBRy#yknHD]OjP%b$Qƥ& =jGqn=mnmc2YaTjz|UtoTR+|7&hJ1]HXԍJ:a:ѱkm}M*Q68e#ˤFlQPwo%zh=Ny+=l'UM?@Ŷa/0XNc`STx׽tj coĕsݗ.Rt<<:'>q{߿:m%Xo9ҶOJ[MRWiiZz=5DL$ 7ч!#% UGņ cޭM;[K}QmP)Q`~8x֯ z$r3uH@\}I>t |*7f3snle~0nmR6s^M:ZL9 'MRCTR1vnBܽnfԆ䡡"X+$@%Ar@{ߴaKm,D0 \\ nI*#^ߓ8/UGv.Tl䧧,tKCS* +2{-LnW5 zPEӢE6(|_29ecS]4}^X,XBXR]8*sG&tPBUu;r1y9噏,ǒy>h]'S_~_.\LLu;vaJ?*Ge?Sq{旽Ot{aNϗ?Waht:~ }=ۻ;mv]dVsmkAyLW-3𲙨k9&huy5w,\[0%Nc3UUaU`t+kKd]~aĶZTS\N> &dM"2?ZbevnKЭ/uQu5xa_YR\@+0rKwOc'unX-+-Nbm&Q*헝=9 WN%A jUh|H A3uw)KpY`#l)r!_F84ҢVSeIlєb~_WǒewFknjFZV7*{pT<=r9cAZ6|9RTViI Bj|/L#{O7e{i2uNFd}Eգ't&ׄxj6fy&* 2x-Lkz6̿9 :ömjH?UmބC1XݜkmċhPK Q8c/6_ƝZk'bHԬ3H25I,UK{4{.o}ڤ黽G!e13+0 M܍(:-*8D ̣ȇ,*pG2n 8zn{{^vݵۮr8ݻ d.q?/ҕ]2[ܫ째wstee pS[X] UVPJ W%# %zc.c GeT%~-櫶Tٲ)n[0sTe1cdFj5/׷v{;q6{$w%x Meu`y_n=ΆԘmoX+U|=NH)pXUGK%%IdF]u)|:e(4?]Ze*OYCj+3ﹿtG^Kyw =׾;~4ù?_,F]Um4bkW~{ߺ^׽u~{ߺ^ճ&*mtO{r=b-!Kޕ?ΛgL'`}x'y,ʓt:|0:u{{^׺O޶ZMJS﮿psWz+mTkW%ho>ef߳?wxb tX}I}{ߺ^П5~A^m/멠EmM ku%SeDDFi1|ː;4DDqH3tF s8lw<վ+ubH <&8"FWSX~s?U,S-5 G"rww]F{yHM2&RȀzU͵W%thCt?&RAzqoUck ݉[Go g}W)n._YH #wszo/_Q{H.k]֤)Ubʏ_@YN'$99/qVr:_V(Rە)X& 't IL4ٟ_o66/8p)(KBAK4{;\SP aC$p*F/ W0O>Clv*lm*IkvҫN(P4x%KVHFn}=ɹwn zCnI;5CU[o0 @/wαیd[K3٧SpN$ BZDH$hQQ}TiU|Tf,ś$BI5>}mGv}O}?m^ywlͧdRBDbjDw T;7ƇӏpSjFxŠŸoePzQY-|B>XާUNTQ#V~!sVQ#@K4qM34{_VƊ{5@i"%Fk4I2ŏ?KyW}FӺL{m9cR)_F`"IGP|ie([uB e?%33Y# C%VO/J f>$H?k6ݾu!,cifuEYUUlI3Av^^8Q w'T~CúglWO#6&Kvo8I[HdeI)9TӯGr^ű{Vg{Z-S, PyIX+D8"w}ZK-.rZkpE+G+ WĐ'G/7nv &ǿwGrdI,4{%0ԍ)- 2Q {qMIYXL@;Qxuv~~svv]6Wh(Mg NK@X]WGH!gemv__Okwq??Z/d%'Hܳ5/g.0O7T }g^r{b* BJMφkKٙs" B z+U )(7E>l 0i MJ2JJBt#m}S`p3CLɉ=m;]?;~8CnNo{YZ\+xsav `*hhAxgu HEd"o3{!d՞Ο"Gr,*kڝvOvGC]ګ;%3:.qcVCY*PoL9)^$6{g3r6Z JeH Dt^7=l+ܭͻPIҦ)1Ⱦjpù !V!7B^{QygD(Yi[DP*I}RL8gy$$2p:/e|-CC0Sw4tU {-Cq隖z),iSP5E$ΫP?S~vU~(~@U7 X|fH")y?}7Y=ŇFj ,>(idU 1?o?)ʌOŽ<6Juw]'Fq$BjDnK_/bϸ2mIL-HE?aqdDP̍F q0D3iƊ oBT֖"?pCn;w7*6k|ܞý3/ڛA_-}Zsbe=nO?O:^)%o{([%}c%~ݧW#3M.0k!M R:(#G;#3O[I;%֧$M>H-*G3,{h]SYi|E;KqWlLwpciu,8mR 7"T ^J ^~>r4`"Gp*\v$,>L]v>o[Zګ=̐ hdTV+{_Y׽u~F?_v_uO_!n"{'*[^>IWZ[׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gBw\޿-z?>O'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽unɌJIܐoyEMi=boK$[jĩ'h {E%I?jzUA ]t?YT׺umϨw쾽IG MrzyU]S)_=l Քm$NᴰrW9o܁֜s.:Gв:23)9v~mخyoOiv|ǚ6q`EAɽ1} cstDSؚw-q7ᒃZ0IVHӒ{k]2Y!jmp{\qIGUT m`TWeT'pE2~ Jmd=~hNդ)O='h{NrTC(JJ.&ԕ -rk${ejc}gȡ[4-?WSZkX Qσl$gOCrKz ?1#k^^ X l?3DLޑ)?z_t?kˋuw Q\ŒUyZI@Z$|)^{qigt/wuQFWGGe%2tJ=SG^׽u~\s=~7.^+6䁓m+V')ؠ>8[3ޠ#x#øq6d17IT*w- c+/u.h^fX S &%ey'Z.b_. ̣$7}b䦧cX=BlJy`\{/O/Y^#߳qoHbJc`Tõ%[짟 ~ Ac`oKN>{Y\II0~n sݐ.R_D?v.Ы=fIElXVneA?c?~@._b;}H\]yҭ:"zBGwdu,oeveq(OZׂUmlOeeu ʁ^~s4\srlZ$duV dD s$r\'-4>$u#J 4.AR AWRQՔߓxH~u>35ֽ>>L5)ᨤۛ$JʱU0zM#Sumgm|9JeE,C:=t +dFp>{kzw}d,`ZCPĄ*]KD0DlE#j2<lKI4֙pHBln|:\A:Xp)9g6\5DK7J6c 'DQ$%O,xwXր}dEyx4R!'5I0Th}uO}yqw]_.zxQZZCiԃw2tgŸΪƿѐYiY{['DE/i!`_jWRN}nEʼ9O[۫Yyc:^0ip"N-8>s,-giqeB)Ḩkœ:Ail:Giv2qoKtlpz,|tQ5PSƧȞ[Sw;qv "ݷÊ͓4dQztQkHTdN׷_wop=ü]|I6;F%ҷ0cV0Vz}'ZnnvohgkrSIM۸X$g{g▆[MLHw\\7,?W^C?(J?Y|5sΏl?*?.qC{{^<[%+q5/6]4 [%eeIfwX.ǰnqmh 1QVt.,^{YO}OepGR+ &Y@I (ޛW[#7Ep9s\rpM E"r"HsFm; sgwZ2 25WF#9-ۧ/n [ڻG,n;A2qs[nL~&grYc)Qs$G}O{o>o;6Mss]Ch*$nnBϮ흇[N*oi,1qF*:Ǯ15S^5ze)$u7-]J.K)4cJ'+hXx;-MriܐdAzf+usP(Erטw=uk5>6tۡ V ,0iH"I\WMI |*B jqy9vcCg~{{^_<>׺OwvǏij5TI<5 ![CiኧX5.0󷵣{榥_SZY-Ete_e}9r?;$i+O@HB.<݊NIf |=RwߏMb &ߏ/cuEJ*|V~Fm}U0GKJԎ Z}V-n7gAEXc@| D*Tbay{ͥ̚iiuS^%rԡJO[,o~?n?'2G| .O>=U jj'V8P U;Lv a&{ <4TjOќ_zyaap*(Q'k@ uG/ LYu[z/#={G/{F)}_GkZz5?;F_a߿62emRGjw뗿me˯׿1iZ;G;v&פmlcoQOUU]5& O%mk<%vvϾCmV˻QA7>ގ eMwaUOe:ۏ}ؿm`yfŒDjg#uv®E}9J A,R\.A>jw뗸o`/]ކRGjw뗿me˯׿1i ?/}/~4e_K?b;_׿Ϲ_2^?i.o^8dvg?z+,P팞ߪ{sۣsn5`c8s5 ,4AY߽{U|d:JZya()#ZlV2g<{ּt k /XaK7^BҢo|܋u=ܹ};cFmd+(NJ0ܑ|ax,?Դi|5"C:/.{ߺ^׽uɫ~>5I%Geu!:J:c#X--|E%mC~q7k7)*'\8*s-Ú~f)LcJQ,ֿ:O{qn}vةed*;R0i_JL5R !KsNI~O{)`糔dՅ&8Ǽ\P?^,z= _V%^].w!j?+`VNUg* HED=Y_wۮdv%‚ŘYHPp }彖ח裵E[g*Zf9I=$Ϲ_2^62em _y֞ O}їr LYu[z/#=:ck VLY~쪨>rdB,M+mXHj*>`^\}Ww`G,}:Xv;b =CZZbo ]:2[wkFR~LkQUiU[}qwc6lݨ 云ULAFYH ?zܒscWL5JFE| G|ˌ3d6L -rRs{6az(v슍)cXhbEYefI$c}7Ŵm=ff|y–@KHd,}T.$Ҡ>113)`$UUU ~_8hwN4w)LY#,G[S;1BѼK*{I6{;̫%QS utj` -6qZ҂kyIvH+.=mUmsԋA:k"E˴DXir7?LSrjX \{?npx-TG6۸xee-8̠CvA* J1N>FeŸXåh>5ķeMW}KvM-i{ͱ.n^f'j34ITҔstoGckR{az ,fګWݯQB($ܛzyVko,ġFH={uŔO'*8pQLk|۳T@H`oݟ7NjY6ySjD0?r~uN{w{#pT] E=s.DxoiVq>H'U׽uYXð2Ǽ`\ΧnMD} udbt3׺#YX]YXie#jX2*C ̝=Wh.&qk}m $k1nc,Sfy*%+د׾_m][f#UŚHd$UrHґOɼ9cNٺ֪;m.c!*~!?C{xzrUSPҘ6/b՗`tDK]V(70c@_|>:u{{^}j)'ˌn3Ca HӷS)?rϲw{g6)o)\붒̺AFу*߄t; wU`Y` o6<9岡zҧ\̘%N._-Dd4o_}ro^Qqydɣ2B^4( Oo a?sԞ`&^#$ L3*GIDY]C) .8>jU#Tuao, sjϼ{_Ӽ;?Ncq֟/nwぱݎ p ^Y?Y˿#iW&=׺u;^M]N|j%a{b~3LVuSƣQ}߾\mc%j<$4jBџӖN"T3bZ_cBcJJrQ%Z<>=1>*v줂}mj Ǔc!@R=E9V,7de,m.K (̱FSǁ5G3.z˗=/{ҷ;cn`b-MU<|)FqE_{&ߍښW 3njbwNI$GMꢨ&Eןp0}.f۵pdhTg?pI6_1[ťAhF t%>_=ݽ Pl%C.@Vt ?-w D!] i3";5ON$_W|;*Xl1-Gjv~))T"" SpmzcR͸n4dcXb[ HH=C^J6)f9EO蘡Iǝ%i(r3ٰxܧ_|T9\rdXv )#QdւH% F7{6Ig&77Npe+^GpI%Dk@Ѭs5[+@2m)] G$%UU]u]^C!YW*rBj܆G![;TԳI4J$ŝf$|.V.;131$I$I5&gQEIonqTDU@UUQ@:n5 SZ[-܈/GJ!?GΤ>iJnQk_}yVeSu->_cNh?C, I}=u3U׺xۇ=w v\N s|nX.jk" um.9wG^K=&W>Sy^ZSn No(Tβymk:8NYϼ^’ q 62,", ,#䯸|'/Xm[ JZӭ1̤iƒʯqg5u}ftFtnW1%UU5Y( 3dQn;{&=i-)=U eG zcoo2Y~  $֨\E׺Y*儿!'?Ӑjhpx&ֽԚNуB,_z{Zdmm5>0^ݔrO!Z~[z׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gBw\޿-z?>O'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u:'WQ$F j0JMD%IUbp$3m<I(IRA#ʠ|L\Zݠ$A"@p@4$V#Y}z kkT"H*h*i\{G{ߺ^׽t0;Y3,KTlKK cԶ6X 6Ө>l7}k 6 MZi´Jt(9OI5R+A^bdrK%1$-U#U^Int }{_n3}E4ScATyuh-Sµ"JLhTMC6YM ]Wfm,e=\~T@-j4ӎ8#rlio[1,)q(͍^qġ44óYdxJ~P,1FpEkyW "aO{}C츗}<{??Qt]ڴvGrVo.-r?Cnc 7sGm3op^S<% ~aq"n]^$ $j4TETE ?U{5'סy%X޺^ӵpajlFXzg$gi*6z|t#HUUKBkc;d& XPEQʍTmn$fn@@]Ip'Ϧ٦ijgY'Z5EEDŞIgwbI$}44wrYԒ|9'ץ(P0^׽u~_/x3͆13O a\t3oPV$ͯ}ϷN%"ʠtŭڄ9"#xTLTfsfsYs fyL$Zcdf ̴%,0TK^ks4~um5JiǪZj8cU5xqzZWBҦ^nmяV: ,vPQSs+(4 T\O$Sm{ kiy4qt$h*I'kreĆkX$v LƂI |C-~s?97f+o'-=s_[9S~f+o'-=s_[9S~f+o'-=s_[9S~f+o'{e߿)F?^ͳ@t<5MUEE]UL=MU\UT+kz<ĒI쇣{{^׺uQWjRbcY:]u^647[{g޿uB$cX|yс>Й{i2%įI"J~b!0žlKoՋI_$;O)_a oUx "[dV{[p raC=_pWt_4ݙ۝Y̟wU`Cɷb:<L>q4{':)7ɯ-įCUƆӡʭrie%)Ek->re?(DUEQeUU@ƬjOBI5=w]{{^rnle:b>QI/rg1q+kH(j#Y,nO&ŧ0o k+bI!UO>}"mnd2[C+g7bY:jYgY&y$zdiX<ŝؖgbI$IW,+O3w%$O'$#A`* `8u}[{^׺E]_JfC!$:]}^6#tMUмrqèk0ڻ;ݺasa+C ȡAs4 WUut"]8VM͓j,J)9dnLJIa:$J1[kn|,lA*I 4<;nm $1xʠtÉqa餔KM1T)č!UU.Z t7#u,(NAjZJ_N=vKx`( F4Ԑ+SA%Rh0KCpE \j1 Q Ap`=̛/^CQ&܅*x6}zs-/cRFm'?NT3J>oW5SѰ[ {ΚF&x{y3(SⶄC m_kE٫'"ac Q$?ho]*2o ^%7U Pa.lˁw(q<0 #3 RI6חm#?ѧkq5" xE4iN)˜ڶ[HWUZ5juVkӁA쓥{ߺ^׽tUPfTЂ!j!!@sk\27]2@1ZҴ8Ҧ>&G6#I4֕jVh+ײcs9h҉sO'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^Ыz+W[.ߛȶ#!ڛ~/EGJX_Q<,+?Qy{/rwAm$K*+ P+YM >c<)e̻'<2TԬ+O,Q|mm:HOX>Q}}k;'gQYڈԻs('t__4(ǭoC7q<vYZޫ'= {r+/MH#T?Eչ}Efmjg|yPFmjB~VTHc=ݾlsw˗.+H WN~ĵg'zwnA 0[nsNB2際#Pc2Th\pm= 4dQe`#Qԫo=ݺ]HC I+Uu%X|=Ezu{{^׺u{{^׺u{{^׺u{{^׺6wmGuNg={v%$1ekh*,+#C={U|vvk`/KiFЯJ*%Bi-{qAnַwW1xѥ )˼C)Dɚ 6oX,~.jFÛ)NؚzS]=U>{7.y~9"(̯2 ,4ECxL:72^ vY&w܄>!m!LQƵ"q^I Ld43IJf&jgb0ӬxǾu\*$H$ }f^)q ҹkJ^]a;?ofil]QRWVɇO  \USL!pVRrW^ů8mVV  xs<.ͫZ0uPhA矼#r?-_{w}lȖ+*#YP$0AGRJӑџaW  7D-S%YQEdISUR"Rq>O&n\|ĤmMAlO"!1F4t2K1XXduzo5j-WpQE ^tMETޠ/T^W:]{{^׺u{{^׺ufURBYI$ &ǫ>4|ΟS!10NGvGƾ5hb?#ܟɾ{DmB>]it%E*b/NЄI0U|l})1o٘\ HG/!}hqo;ͳ eЅ<{[x E$ tuTYw;7p0VSGco^܁O f7Hcv sRޚmmگl/l'#:SG/ݻms}esn3Ẩ}6Frlo]vv P [) g2*op6˻,߾6sY\MQO"ִԒ* *|krnbX$Ic?-hH&t웥{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺGG> v]=Ip%!ȑQqX -GQ! g_vl7כl-o2E.Z&ԁK h8\,r[]+(uƄ* hs~m}6#ٝonaf5<P'ƣnĀ${/)ͼ`ǷZ\6!i4]{ d'Lإ~$\iYv՚A:M'}rb _ClW-\L }%.:J R5ag>کxo+̟t/)s K0][(O9'#n6[2M GFjd@~ΪWz `n]K\}M"jd㑿!ѹ#~1&ܘdݻp;.ۣ&)23[E @4Ξ9lyۛnm~. Ios;4 M }ܮ{>X[ZKpni]& Ò)mR0s@ iN7u^q}&EG,R0`=˻3 r׷2WLPFԥHD W=L۞Mo71Yۧ,$Q W !?cL;bʹ049LZlO_!YJIM=j*Kiيd҅2,+9sc].;*FIT%+PiW\3ZIl$VbMrx b .I ~EwCmiwmEr!WoʩV$gT3-5-,SMF7[wvvAiFOEiR|8Yr&q~~r,X\.︀BlWp@,fIkK0T[|EQQWE4UuUmQHA, ӛv97ՙ㳹ffXd*ii6;-uVLʵҭ,K!Uh +qIa:u{{^׺u{{^׺g$GY!7zq4 <*"HaU.h$Z$*bPI$2I'Nz_b[gijkl'_F9PTbr6J:ﺯle5o(s:LQzMpOP5܍iC%'8 Xd,GJmϔ jЊCԧ\TDZJe3o?p4ΏYni\*M(= 3yV-v04AđS^펡n=Ny,~* =K<p5{q|?{MՁ-Zhdݔ$aPEjR/w*sd~/,nVdC2;h$O6''gnC۟|SRf0Ģ):hH<{&޹_l@aqd.Ya3$BXUdȪ$COnٽ׍7*KJ+XN=CȺ4닺FvTf6Uhlx tjFW"Ab Ge4aNAr׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^Xax)ix)iiQ54 ,H쨊aUKTĞRI'HBI I$$G; >(>9v\!K1eG6t ?ݷ}ڽ6ܷxFmoayovͩwx(p|9[.ٛk!)e;;7r4ɎuՎwvr4{GϞ{/3s,md-ЛYYx@H'dNM@3ܣWysO3oq,hȌKc@:,Ꭴk* nXUԓjWIl_* o KܭiҳڹO\c dD'j \`6Nq},VɊˡdX6X~_&+Do`X &j_# ذGo r]I;+uaݱUsQJ$A${]/kܻNWoL@86HQ kD۸dH}x#kUGI'go#w^5&omŋRHP!d 2>-epj-x #e4 р4 =KeOմ©,NF] SN=4{+_^׽udjڙ騨镥F$Hбj-nof[{HIUPI,Ɗd3dt6f**K1 (d:9|xu f,MQ6k3^SU8)anr@#@[blakB-Z:;pΡZfC߿w?DNMvQtXQ^5I^Wӻ~,S>7oiqS~&ցDJm-TbPUKu{ ߳{@.9dܤ2ͭ\!gDF4eiOXp6v&eBښh+3;j 6quu"t:m$wDvY(XLjWVbᬡY{]X}G#{d6w}-\rGk;$VT Lhzn>u˵啽 RHUчe<=w =O3־_mP / oc~۩Cfk'4~eme6. j7DIH "s{y];yfMj5̶āYAԅҵaTdgyfww[-dSL4@IRw8Fsۘ\\qXF&+SMNZ8䨎6* YIsncFmk[R"FX* ] Or+4,+hHFb 9-=ѧ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^Ѕ;z[쾿VUR7ڸ܏%3d+(u0G,([J*c\9RٶUޯe}mź3[,2"Qw s;U-*Ni]D ROq7ƎY.Þܙj'۰ff䫙Ui3~q%u; $v+I,IomGomQE *FE@!j}iӾcznHr|nJ#_E\s(:yDXxUEUU9w7lgY.f (M.lv{7-Xr焍hdVZTA,$wIz6wn]QNrFtLSueLڤ_3~}=s7w}Pv`~Ϯ[r]3u<2/Q_?wnS{VA1Z#Gid& >/6aAA7Ӄ?}1SgBfon$+P)H%h T"{퇷ynmTKq-4ঢѤ"_G81<ξsj{kyWZ@ jY RHfuP>o 9Xq;mfrw?lno_&/+A)H\p}+xگ-e1\JʍMI$lQѨHԬ A=u6ssƒ"F镁t컥]{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽ub%MZbM.>W,ن 6@:bEp8MvQܭ8Us 1'aei?||6xn춉nJNzTETgPBV}۷=ZӴbXݜS )#\N}nR|{/ɤ`pY4} v>3iÐ V.RJZR.O7پ\}عh@@4\zUz߃ik{9yVWCCl{/)jDy߸,,$kj3?*i1?"kP>X w+Z/Y8 Hɾʵi@|?f4X|q}{ߺ^׽u~{ߺ^׽t[ v!7N0Tq䪍gGe4VFXј;۽ñ@7wN#4ff42H[|2!Y\Q'**7J *~;nŗ!9^ٕR2dBsy&e)aI3*SFW'R{cg*I/C}wnGI@{Kv8Xَ\4ebG-ql +k|4 e)~EG+%DAC0>s@yiMhjAfRGZҹoOw uVڵف$d'4lIܣzzu,b@b@$&++deeapC)GTх^ C~׺u{{^׺u{{^׺u{{^׺u{{^[{{a7 [Əd2`)azRHy}zBk۟cjʻ}J<$(+ : s#Znbl\&cjI-+SJW0 r<=H , C׽u~{ߺ^׽u~{ߺJ؇{ZvΌ#]ɟ08y `W%3~6ۅ੡iV0"q=9o{6biǩP)փ=m;~Z}iHHR%L^eX􏢛-|c'$_tAo*S̯vWrOxQ F~<o$Ծ{{^;$RI;,R!ԒE,d2[Ƙ-I _س˼4{%D϶ w=Eݥ4`tOZ:Fwv<k?MKOB7F?E%fWQR*Cc55m-P4* /`eMhxi9WUDX*!&jsS!^4\r78eX*I 9}қ [n\TY,rQSng!'tm먤o$2/ 5E*2K.{ʷ\mj @"9bc$r^'th}cn^<ђ5*(8GRJߵ[w폚xelո~VZdvfl%l<3^fygr5#\24oBrF4>c=vWh-{C{3C<ɣfZ ؽK'$l\7]m#2KOKCOO<}F"{- t++>0A$Ǭg^m}ک![格C%SS;K펡T"L6>F>8aɍGE%G>Qj7 yJ~@]"H/?!&'Co5>d$âD|ukuKhz*i7>ifONw '#3T{ƏqK7\׵Ȗ .c+5$&u"JRFJgג}&9_qInhI47 >#G'>||_]Y8\&Oqdo`-Y̞j):wgE:{UO4nTo4L̐P$zdtr ),{^_<̌ "DUGҊΊt.*,T~tzz˷wnړw͜ujɳ% j9eFHd(5*{ [g$ Z+@Yc5! 1HK ]",=9fȀFYGm L Ȫ cPjhI+Ga鍭k_/ia7\%ڙ%DPTbh30CRp@ {I̞r +\A5˺'q qJN@cF8oA5-G@Hy"t:2Hh][u{+!;EY+Y8?ۡAK]YZOCA9e!uf~QeQWi!1 BA}ttĸ[_QHRYVYAjHR]MpzaWYCzMGPSLbp)갰#{~noQ)YI}w-H1fbB")#TTeL{)RowX2HxE1Ƭ憃_佺2t4>]S2E,K1g*VDVo J"S)3<.VTⰭq!DW^ _F8|}w䭤ܪncV*U 9ѓ#k2(x.*mܓ{vq_&J!m><vcTs<+;3#Gܝuzg+(wF#v|17}R"աEr)rp*DX:euWFWGVR.H*Jd9հ&jj[YJ.5TrM rIIRmQE+&70,EЂQo9)=E c.Io]JOj3p'TK"{_f  0kƣ1U|<@e [p$֍I_F_u]J6Q?íQ}--_JjzmVXj6tRB%LfS#pC?laF[K* HxuϽ 1ReSBEU2q`ڞ])׷o%~ڻ׹_l9GUxm?>8<os[kl᲻qk#0* g-]-RcjJ,($6}uK,qD$ǀTPYOlrK{x#EYyd Vҟ϶6o+)cYi*}QrxqTRi}gopm-pqiVx\O5D# >0Ȧs;YreyXZiq MkGlw\yaH*-0hߜ7]KOJ+.usS{q[$Wwn^=ၡ*pض] :+I#c5MPR* 41s*IrEF 4+ KHiQ_ڂ8 h&CrW2\&vR5&jJI OF/*^H ii"C E5U<^9cud7PA~{Y r!!#xzʅeu! C*"2$gu~{ߺ^$(,HI<${A׀$u]wWt`ؙN۴A4bGlnSԂ泑x"%D4bQRj:r_}\-j+&FVĨJHdIcDU2sE'Nb)i)R@V{fco+k>K/Mn{Z;"lA+XBF9F`^Y ¯?} 7dv;-ՈM@Xc_2H2X?!{yʾm)rź[.qydMJƤG4EH7dV;y-̕͵(gCt)xgGݻz-[{NFIHeoGa}mmڽ\ 2,dpG:ؗm|=Ւ?;ֺ5Ud6Am)ia|2꣍E]4s4ʵ<=S}7qn?)mFirBHԴL ѿOUu :ή@\ _ڼYS9ۅ':zi֍b+_V8sSTfY}+-Ue4/2M9#pYg8C+@DІc"+ٽ1&{!i# wfSa+UEJ%< UR"4sw!s3n\‘\OZC,X"GY]r8]gid$5ٖ0?*1 V ڑHep׺u{{^׺u{{^׺u{{^׺u{{^E%]MeBfVdhj)zz @1Ȋ0"GZ]Ocsh& <CsE/o0Ԓ+# #[ߘ-oRush+E~O< ,cqMD xdF}z=h{in$6OBVT1-Ajb_{QѳG+ yn"<̬B0"tejnMYsun"Kl.)dKf_} x ?MG?c 9}B1z~bε$(,*%\O+$uW +:G:T{ff/5J*idQ6Ft fdU Rvody_۞Bo}͉Ze-E-K:ǐ3 LДV< ~`^n{x"y47W c+m We*֨Rϖ޿pG> *PI1R|YkpǕ{W^aƲ^*Nm,ކI5L-sM7}݋v,r!5O<Riy{{u{wJ,ć $ANPG"ёg'ffO.ۏ40$󵤒,_5R̔u+OV24\:#b@X\qZ,a:YkЕhH+)LZ또aV n :E2yiܴĖy4Mىcsd21$MO|Ϭ뢌 :}{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^9i嬍FzQA~'aM io3?ڋDwcPI$XO抝?nڕ>ëc7tFSbL kX@HyEh774մ\銛{6ZdP>du~Wܭ)ENC{,OJZXT1GHK$aI?}LgdfmR32z?Fl vdLƎ;& V$ {^ƭ_OܩثE7"+5>^3M_W`}}kzkk[C-?ߞ? GʝPS?1>FO?U`o9ފ'^|˛#14}\įWY쀹r_-+F`J͌5}Mcn*\G_ ~)EeW/cOZȽos}u'[E~R]H(GÂQ1\|Zo_ʌ&4}WxGǴ?r?sq?q>Uܼ*U6IVj[*MP9:h~wb*zq}wGȭ-&?*{`Z2`O?h͏kg{aphPXy>Ɓm r=)VnD)t'Vq}T+u{{^׺u{{^c#_ |Ȧ}e]-\:=yA-HJeWإ8N/ܻ맾BṆK@ PJd`6LnE<{qooVo*zN&"RHxx&LhAh'tV $2n.ɦV;RAfB\@><䜑ulr4ZA:eZLgTVWx ^'pro%Wя{,ѡOJSVcV?1%u{YvN}hwY%<ŕ՘HcOz)X{r77ldrBD-eg^Gܹ/^rc@JkqHD>LOV/%KZ˳q='~t&$!t366 m=e%mOc6 >5_hJW)Ӛ7/g֎[m+a<)D"Ji#G*іPZ7x؏Tn? ?rhx>ŒEkzWs'u/̟B3q;w+ػMn kUJɞ:fc4Y\GMWϗ6R_?to[0Ann ,e13¯}}.yT72ʖ7@FbTƠIeћR Ur=`e{swmm1QO2Rd–BG!@p7$ٿ\sG3ڢK}q4챀ZY QAcSv~^٭6V/1@ĖaĒIjj9}:Ltg׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~s!,tO>K%QOA$EAkg@ګio/" #UX|^hmѮ.ܞTb~AA=mCruSΝz$ifX3kBň'Q{Sa-kK+M# M.Mf_PlZi!nͲ w,_U2UڈtU>aݷ^VD$_䑂bZ;6{~OmLRӟ%4k~Ap3fr.u=ZC4#F0XjMbؑ-bHdOgGDV:-gvWteh"}6vAmFP$8& 9Y_shm+w+X&s2:б0ک '?:ܿ_/nm0+(F5h4JօBom?-ۻ;Q% L3wT9J#Qc-}$Κdz~^趴bY&TQLQKKD%l>%~@oCPKI(B)45]R`nMWhnzN7.-'qS&!]n1kVh^+EH}_vv-7#xۙ&OsC,I xYƝ*kMk.YmI0ȓLY3GuwSI 09*~wo d5̶''MjJ}r4r4NVHB-<~5iskuWDH*#+4#e5zۻqU C+)YXT2*Z6?zl6h6mRmJ嫆iRdjhqyAMvϾL{H?xn#+-e``a3x%K;j;>GI9;f忼{Vkk*7N N$YȠ X*o`|߀ͫV̎ޘcp͎ǪP,$Pys0u6;#],J EQh?:*᧾k"Z #Hۺ cw :Cion,lvl" 9LqQALV]|(aoW߽O||M͸El",ήܤQ3ƕ}}ݽr9c攑ⱖuI7F m-QW8tZ(;{|n6BhL6{o&ߊ* ݷN*bIW>n4~k+Z TTg&ylO=k8;y$ŗ%RJi3^=:Giv^Uhwӥz1s89W%N9Hd_X8[;sv\eK1lc./-pUk< {+l^fa G߲id<'M띅2ϒrGػGj`TY=ݺ GQ_ 0u y\-|[܉%^O1T H,g>gwf"im^!*f%#Uc~{g٧Joԭ>d)#O6^dHeS2Դ dx ysǿ퇷Mdm}u,Vf0UK2 ZmP"ϓvb6-cw[r[譥Z#RPMĥ070rY|y' JO]۟=9y79S45Jȡ'Qx%@0GݣxgV + ¹Yv+ `H kRѲ=eW2c۴ͼmV(f R_ş-_ J1UyS{p 6øZ1JIJKM,r?g;NrWy+:.##VHɣUQʟsNr[R:I&1O#JRDuSB?Vz{c#[C⶧d&#Q=&j')HNk}=.`VA,H D  H\!k?uu9b9c6"R1hHA֬UZ9"YYeMn_/Sn_|?v6?/z'sǷ?G =yEї8smOTOe_i7U6Ăۿ^]IӜ潧'[fO\G.qnw콭lBf6*$xw=Roj<﮿P-Bxٗt|.|t I}Tӫl, r iTF$:fl <k;jNa-yY׾'5QCs@ uo %ϸ|&ŲF`b {n\5 "^Gx}+~L[~,S[[Ⱦ#HfWLQ*Xve6~3.e 8*Unn( *]TV[_G'f P7S>VjqMWZz$E6sw]յxs+D݌MJcCuص|1k h]~FVSAh_/ܐQcSkh=A3Of-ɤSYTAQ؍v|ޮK{V=ndQ_X&+QYHqI"~=ZjHvi6imYY4%sFtoOG|ؘ*+۽ICK+"*TTb{'b쭊X'EuqT+x,G] KrHxw=_JdM.jc)hxrhw2:Ύ{{^5n<?9oA_4\>|E2>"M]H"5xaÑiJqTI<F "cqyG*r Z( +hRBcDH \x.gŇ3k}ЖUgd*K f`IMښj~JUcx̅Z}yb2PЈFPŅ'9}7v8?:6ꦞp;Mwm;>mk( 衊+AUC] 4pz)6f F1:x梁M:gKbSlqݏ֒ʬ'ƝĞ'ÒcST=k7t{^5uC'ɬY28jz%ᎮqԱrGM~xMfF$ƇmeJ[~l~JȦ/Shb|۔SȌERؕ;#iHM^)x}-_|Q^?@o4Lu3nr-U>bGH?ɾO@ɗ:hd~Hϡة(crJF*C]ϖBDWŔčJ Uy(˦@ܞ}} j@pCZ xڏ'4im[i꒷O#죙9j9Xq71c{cAgks=/ j:2u ?r(o+s6 R GU?`-]o 1s$yk VZO̞`v{9[ayDO,eD<0~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^йl΍nHwpu:@BlU I܇._u-g=\FO+~C?Gg=uSCoav'be🼦IU6iӍZZc7?WE>'e@]AOrۿy{Ͳ!Xds-In>:ePYURH>T&=up:01KmUψ`bm*goߪfSŎi*e"5H^s׻{mܹhX Ym'ĒCUVW(rGMDIR:T44$N=+>7mNG P-鞑䞿ugص%FFZqg*}s4PXßU-[H]vv-YdSP;I4ڵ/:Ї|nPkq?wuC[(yR CX%3f6O_Ncvnv7cKe+6ϑ;mvUW`zNwEC0da jMPT,Acr:yk_f}ܝj9w o qk$ʬRJc "#!0{g{;fYnbBf2/UY_{糶^_-մg &* ᩅTy9ۮa9խnWSn WFd%jAghyeyjn& * CFEԌ *QN_peobrj,~9zioFۓ` 6zl-亸HHpfbpA$z7$%K{xTʑƣ; z:nO}qf~iXLu&PAP]`}WPYBՇWhYW;sFf& X\j,qM*(*|坖rmISq#"CK(a@e ?YOչ'+f1[ Yڡehκ֭سO^&\\ňFG SaK.4%hL>Zɶm34m~6 WZFQWnvEeU:!7ىLG#(V8@w[c7/zR~k]vآkeViL#FpDJ)Ti={9vm e[ebwDB RF\4V\עp[gxEqgu=CO)p90%yZ>dr?_x̻U7-ybIt(RX@pI"N=im)M,j2(bAR+Ap$'}qǣzɪ-׎랲!w M#U$ԏfԻ)Q}^ OJ]\U6jcpr(r'>;'sAq1D}P %~G*ʭ~Vvgo $f4o]W Uk,̲!RCqW̞ivOݶAwcr!=l\ȗs9^m?x\̲JTpfE`APGGwb|w;_pPw\p;7+%bn[r롛7HISO>6uDr$EC(\{YVu/"ovKv٭-.&xlKuF]:󄜭oȼ۳~빞.D\ͥDm]fKFe pR7ܿ'ʧOQY璟?` xGS߽=Ե؞q+/;<B})'}v/\o2-rrV/R{޲?_ڈTo§۴/. sD]'!FG{GvsTUkRȇxvZl-LJ~~0?[^%[2mOu5L5h[N H! 4Tt(`|wwЙ_¶ +zPu~lI^$DmijBE,MI4*|OOrU 5CS~EObQ*'2h1 Ǫ:IZDeGr `r>O+%H#ae$Sǿq~vu% Y.谶/%2 My&`C$j&5gU1f7W)ji6F7I ڻ T` QIQ&+m Oc.kpSK$P{F%e=[ 5bѱ@b]Z0u=^HyR$ex@S*B#RaDUI"cRO=MJ`  R+ASTiWo`obPn휵Ll('jE G2E'L>r{ /< fxuP%S&_WQIr{n2)V@}{^mvj-OT]rH {:͢;:xד TTk #)-qgnw!wK m!izs hh7Y=cM۸,4S8yko6 Ŷў+oJ",^p,ؼbgIُZO$ZCQ[U4r$M$=w]\s+gbK1,ēʼn$rzH(" *0=^~{ߺ^5SKUNKGsyCvmr{Zo8}nsr"/.`A@uɏMV>o,R{hfoԆ>x!hgȞژn X7MMf>kD21m6(7čGH.]4sybn dќ7"#,to6G'SMCd2S (?,Ȋ>6^^EknG,I:ۣ\1 <,zڳ-GNݕEn, 1<ݮc1 K."#.f!XӨ{ rrscZGpԍ4E䵆rAg8\fXex&ݮd#Sĕ]݈UUx*)WvܴN Nm#}S ^kI qQ}7=8.}c$vQ 44qd;}6Imm}`$Iw/?U_Np²Ju-}9R[?^o,v. n3,mńZxhhf>PXtN6%)cip%($2Ei1EĚDbBY[_>XGc]ۻ$DTJ7Vd)Q)IH#R FbQЏY* j<#F닺ƬʈYUUQrǀXQRz L/~]7nfm|sZ:5;X2UX9R:}A>:̮'uNq_<7PĨ$7WѶHખV%t:ZMC'}N^G)scT(1qPX!Btᴺw _c>C23C1=\m}֍ԭ7M\4:DB&ʉw"}wNb{:ėi &G!WRK#"ETiP35nc W֛|NwGl.KˋYg%9b3^8Yٽ-Cqگ3G(2Z@J2@6 gnEܭ<,Ņ U]jӹ ><|Q_Y^Avc{+uI6'ab: 3U*eDH7eiw~suICWpvQgQW>r&1o,K4JNtksivAEΒAd.DS[#*ʨ$?{>v~^+r1nO$!#+K5(JEU[-_\3ջcxsܵ2xlj\EdbeXJĠ.oO<9Yܫ,k{jh7%eD$:}=;Ϙb.l|ЩD5IB,I8!^wۡ?W!&7zvZzڼ-3}#nZ:tաcL˟}¹6_ 3GБP%(2 ~t.K\^=cuK'DnG`f)]멱lJrus jlimX+zXٹ.Y )$Q2A,BX3j'_r}d͖qtagy%y zde l|==Qfٙ.Waa̮S(2[$0~6jsMx!)$|N\b)EdO ,h AҢ4'~m{eo#X#22B$F@$կ|kZ=.[:7z`kk %KjS7OMG <%APG#6q6u[{du]+̡lV!]rN{V[G4 (gS,;0>rBKSHO]:+>BtHb>O{zS &>jF)MmX2 zMٶUylbi.Yo<(5ē+Pw>j=Ϙ!7 -gXCH%H7 44S1A?#<·rm_Sߕ[p*Mh)JG.ܮI!$qs /ΞbW,o5mfa"OxZ 9#NOښL d]חov7"&B0D?O@-BqZb28>_i>&#$Rc5ygV!R(б?A/#^yeHY݈UTEUU$ԑqqogo% 1)y$v**$V#K*bQ6Jˇp~n@]62F6sPm9oiSrso,Cwy)PC TTyZ0Z8ir#-kMncIˋ[8F+b s*迋 >Mn;15|<ݍ6TX=M p_G0#R[O9;*Tf>n&oۭ&0͠([iZG7(F/skNf捏kۋr K,%HP5T:" ~0Kw5QPQĬɉ[c%,(*v=5U41O,~9dowgy^QHBM:'r%PhܯcTn=c h^ )h،0⚑fTVweD@YUU噏XQRzI=X/[]_UJ*}Ӿhf#PsM$qITU$dK3Y{SCM9{=iu*L bPyd7B9MF>{~FmmW޷5mf$丣WiHcWۨ?^TTmʯٛGN=IUWWҊ:T-X_0rG;e5n[gKam ̫*\H`9 ~r۶۸c'`EEUZ*I g ueYmewV w.׸ikvvKcûW2 [$3SIyeNMWym"c\[ fjtNE+yp9v۹#HRKyї‚X$USR2If4w̽C@띹z#wfb%+rH}e{{h4{d6G&q̧Y'aؿr?c;.7n. 8^?׺uhjjmKEIE j]歪qOI "YePԛ{~'8QK`4y׵Lt՘*ƿ lOq+Vr?Yl[3n쥣럴ZH}u%')mjf665h Iq,JAw`h Yq=F ˝I,qEIwFb#TG)b*{`|r13v VsjKedc%vMq}HH'kzэ"kF/v>v8d6,sSh^"y7逯]GUpCֵQԫ5Ң)#"^aMygSûX4*(Y$R22͍{yf u1,rJfPB ȯF*GVKM_ԇ5Drx.C&q%.&W\zVyXZ4>k?VQn~6(^+}iL~ Ec1 QPϸzͳao 5ݼ-Š|EiCI{wP+oD汃$C)b n$S.|9?xy3#x͹߲v\Fe Z!*Z7%nv|l;hf>Sl&Jɉ做;ɱr0r{ 巓IѾAQH4fѺZEc_WhE Iя^jz:ixGWU?1WHtQPrf4r ~YzS#D_|Xr!`By" b%c7l[6gY췋mQ흕$Sե0j5TWW3V8"y\Ef*+AMwv#oP['"O3 >@T!ՅgTQ(_Pc*=gpxe_X71UWS o&}Ƚߌw[lT.&)^5Xz7Ja#5b{WJcvOGÊpc4G 86bez :6TԴHI 1[so6V:H^ҠVi1R\@OMD>rTߋ=OO{m==twyN%Vuv}Oӆ]=cOޯՅ8sLj>sw.-pE;J*ˠ&_uG[NŊm@?0Oa7(Sṷ5ԓ#-x)O_tuT-?U`<.֩%buB}zwa@iho[C?w'ձ1dZοʽT?z =ߛ2ԫSE[R<&iyT51tDޖ>܋9(d 0xqh@.9Eruͳl܉iɒvi ?08R5DW,0K,TI-L])yP3KPO$}gxy#B점A$ORpĪ*;X֊ 4q45{}ӹ輕FynLYn,zNs$~=Sye߯9qY/yF%s# 53M߯bMeX,"E7s\[d"}o+ɯ훫U3tj͗]Ukf Vuo`Ć2դic<{ݾlbV󽬶I ЕӅ#99fܹ6o'."zx3E{zi*kLT|~ܛ/]dd/4`)KoQS@Nl 9}nk-^BiVZ9 F5 Jr8؞h-¸1]~-Fu.k2|H'afS?~W O܏=ۺ̏ +흊#t/z3sǷ?G =yEї8smOTOe_i7U6Ăۿ^]IӜ潧'[fO\TωCIS#R-nٝ=fڦ|-T24n zԂ XyWqmzK[ ٔ0Edk9 kCԟt^Owh./,l`hAA!R2[HjJWW[u˟6;p^?r]r}p޽mKNԱͱUnf9aZzaZc$p9u[%=r=ycimfdoUUĆ(ܩU: Dic}9nyX!==q3Rnu%@n| "L]u!ɯ훫 YT|{ޯ;t_ϺNVr+6Nv*Əҫ, +>g7Wߵwg$NEDhy?}Dno#ArhI{ JSܝO؝YX~m iRCWxDIS᪈l񩱷ULF7 ia E|7e>{D܃?cjκgjĨ1i-5eb0dh**1YPNԕ0H;7Ik2xةSH<p=v%tYΨXSun{C)VVR."} Gׁ u;'Ǿ;o`iIOcD zHȔGd5ʭR)F~soѬ6iVxPhx^HNCo=s6~YMĆx+ \OY-̂տ&wܭ]SCQn %,;o#X%K$uH6ɞI&`ߺE> VNp2,#E ImbMqO{@8LjZ6F ?u]$ݭ)02U}3\;1XpEYd)If&V{O]bRk!(KG*1 ~BSɷ ewQ"No I{{^q]'9U k(1%;9Pp{fѲ^ryѣjZuYUfsǺkֵ u)mi#JU RqrKw̷:${|ywf~4Vҿ'TTaPZ5R_d^ >omޯty\ Y:|L9_F!z*YUC͞}yl.O[Q ʲ,lE<ĒۼX Dj14eJ4xڟ̻TV-reX&b6}y~`y $]xv# _Gw>s ߯wl b!%+< 'd 2ok[}nJh2Ae0*Eé_yۮDpD^7I5&`T+F?SwB/U/cvW;tj^G +f QJz(ٕZERcMr# 9}>\ 7TAMRHBG2UPC͜[;tiYޕċWB!,PXO>61-S.R}TiiuhE]I0YY.+*2|{e=R͢+2m{*5+1FTP@7<5ԱQ5M A*FPi Q]gzն>+wWf{lm7L;&p1U5t[bҤuTdU2S~S<{_-8ݭQ4j0T++;!2^lrm2Ms#4RgUh.T%Qȣ ͩ6&;'x*pip; VcyJ |s恚9cn$x6I#fGRqSyw]痷FXڕWBTUFK# 23)[No]L'eET>L+tMMS[UIACKU_US+RPQR4ҹ Q31A'uvvQʈ 33I,I ,PDqfv!UUEY% Չ?~hl;clO´8|ϳ2OSml\dݖj zXl=Rعmyޭߕ,"Ch[hNN<`97X}ݷ_jvkDaof3cS#,Q5@I[P=>tƯ?#7}G=#ؕfg|=d2bh("̖7 4"FGn*$u g?\Z~n \{hDrwFݚJ/43GW<5rH6$6Zޝn#hYCP$ DI( mJ^{CvdxZ71OP G P*::u{{^fYȭCPzjR~YF5Ru]1(}Dpu} ĥ/lpw;oS=歸=K{ {Z5F\T_ /}^^qoi;ԭ[ۅvS҆sN |Nܴ?ǭɕ:lf;vl5SXi)s9䬙TPGFo{˛ ګdVrNE%iԏ>ZIapUEjxE8Ѥ2smNڳceun[D8 XCHcssӻ %Fs6ɱ)Z;Cs6ZP"?/'+EdVmkv&jUoE*;Ǿ|u KϬBhzN:Ր=]]>Ѡ՗\}Lj>uap]Q_ZX$}{q,k';]9Ht Vݚ4Zyh%[=aӝ.O]0 u:(EQ@>":#3aw=ݵتZM6CP`6_>wݙ_sUս]uUV h* =`KHBmk$0[E I̶d* ]`K]%fsifP)"YT@\EP;r,=Y{/Ȟhit=6ij-G ̈X>0":ط0L6gvA/hnDuh;yؚ:oo_i컮ռ2MZ fJ1ФT*tn /E&{vE&|)j<(D$*$Rd@NO9'Ǹ>_ `tYh`qUexiBŧHmO F'H}Xs~y+˾+lXC4h%$}@BҲ+PoAxsHtp>m]++秦njbim=K@pS`r\sl}nV8i1K/E., Y`A&O*}cj .{vW'xy9r9F+@34(}#>}=M#[eŚF0!ܐ>c޷9_l簲(h)|8cA$+EXI9>}U[' ͲǤRm NlZ* Rکb`5{Os~r5.:oQX۫%ʨvbĎ,ܸ`B{}Ƕ!K(Nʅ~sp4ƥ7:YXAA9edm,(GY&A=w{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^\e7On2:ۻg6폑B52{O>͉j7XDP+r;g;Ԋh,sa8ß˫f=սu~>SݛwvvfEG`NCr?⚢Dz$SJT$*6K}y9K{v=q} "+;(àȬMPuv[~a竆M5ŭ󵤊fTĄT!TAv՝kvJJz[ㅋi2WGyqnzZ&´˩%iTEyf{"+"E6+|tbnm<}7Sc:f㧤肓'%=5R?|xw[lOi(б *;EGt/#6_/e+E oVHVdǭz kr2rp59lfyJ!<л_w}|sn%I,H@5;fv YcASeeeǷmoQ"DDT}t=}=No~3ymNAih)kjh̪qPD-墑ю{/ZgrTKFX*T@JУȆw\/o%g{v1'3(jN=ʮeR6K:L/̍ ӷ㢋FcEꚦc}Lm7Vn֠.F0Cȼ_|}/9nڔլ 4ҸS F'@M7Qf9>=n=1{OzE^G{v&"W䥩40Xus6Ž^7mEy)W2L=J#1ch`S"^_ܶ>l&7-eV %PjLPx re/N,KWkomV}]fѶ[zmM&1cN'5-MkHPAmӝbw}v*_cYk!*8өk^K3.[e#ohmဈW"Eѭ;A:٣ĭվw=56Kwc6;õsv7ip+\h⭩Bj]O_ yWƏ{ q(#UѢChi"H vEi_ls3+k]mfYm]0[ZKY hgTQvgoN lݵ[_ i>JLnC!& tBvw拾kI7NXjKhEҪM+K_vnM-gmT*jvr@ަ s[p$-tD)~2t4̆U{˻I]Z?Ȏ0:26-o7[FJ$QCP|˭?_T ִkvVjJ,xE ɩ~9Ky\7Y>\YDڶUƯ"ic1ItSj7u!km/[` O]UҴ*ח;ngv#1cXk"Ը ʊ2st /9>X/a01I,jYX]њ& %Hn<4BZK,BY#FT |D` "gV/Ղ{_߻ɗݝ9\g)nm%vO%$e1E{_>z"^ߧ[mһI#KLKP|o{LQ[Emσ$h#$1DT~.Ndȶyw-h zuF`z(3?Qr}* ]y/H;ew\9HnИxyZۅQW\hU{~?sGq5IW40dT4\_u>RmiW}+!ol\`ԟ>X8bGs$$o$~,nO)g:3XCyj7 `v.;zw"F~!\ت<+PV")Z)2~~Ro4lS(1:nMa>F8֒N+RecO? n^F﹫[`J4%G n$2%M7Rd'ԙFTCsx9 Sh]oNh*$RFc5q tSШX ;"0ƻi6ɸ. 0WwbҏV*LmB4%#b.93R^E6qCMB`C :1*5$YM_PgOmςۓ7V?WbQn>79$XT:nmw6޿cos"KBc]#uOm7iﶳm?Mz}y4ZӎQWj;4QʟXE_qXJSiե+7Un(7;K3UBLmS4O(m=U-dPٯ7^Lw7bWmvǍƠ4D@ݬҵFUkyy9×}kqY#Ư cx噩Ur de-ǘ<ˉs3Yy_)˕?|>sn;kGڔřTiSǏY+ggmY÷YCoEH"Tt췥={ߺCOP?ӷV=y#4oC ~MSFCy"?/>,=2v^o ?ʽljfKH5j@GvzJo`O^b\qۣ~ZX^x%`Y)A;A+/ |;O^׽u~t쨬@DRO*'o{ O[A-Y~ |}۹טWY ޓKTp 6@V~=?.{%{lkE {rx`r /|7v>SE[pE0AT1C֪_%۟"Mw'cTOQtԏȢG?Ǽۤ;׻Ǻ[M^dphC~hT}u#}m۽l8>NaFa3t6|]$z'5-֛o>ܒ@nSx18zڋG5]u]=<1ŮVVA <$}}{Ojݮʏ1V7f4̂5u;f ᤎ~gn+krVC0EQHѝD C*;w몳Qأr(%;kkŅےT%VFZ"< ":șٶ] E< Oc yIH6T絛<;0sD&nR8HYT Ko:목Vֿ-_Z'g'5UyN/-ϗI%CI~C.Џ|wmMq{[S#;1%ēF--V$V(R5^ʔf='ww?L͏5ttwYZ+2M% 4d)>V/$1Cݺ/[yNco6I"A+]WI.̺*Yiq޶(Vwݢ@UƢH [b;?2;`5,@,pUol ^I5NW{A7/ʁW04YH N'\=Ա[iZ8C>dtn??ld>Dv",uӬռ12n<ޙq2邒բV@οs/5[I4Y@Tuy0C T(Y+:K}ke1_]Ǯd4x qD:՝!Z~`eJvKfã7WڸYH^$dJauRdT_qޯߛtyN]'#a$dQ.eZݶC,4o4ᇿwh}x!r^gao j1)Bt+>G8:s{'p"R`(%5V VePDrZIie}=*69jV]^RMC jmm9Y{{wwˏK{8H5i}­ "e_CSlOz/v-4e&**MY vOym;cۤYV A R[Ē:2/hD!nr{#EoqSXQ\荡HՆ̀f3-vwaהS>较)Ű/S9Lux @.TqI$8?+qRHҭ>#%Шe:&fJr//074?DܔmUW5+2V%U@6呵Yx6ds[DkoN-P-LAN$eT*H$m{7/-yIWoe{ 乒׏H0=F9y;WD G[ʐ#ӊ+%sTj{#^nov.:q;z=na+ꧧHyd h9yu워ֱ$q+HQ@R5\] [}!/qy|Q$1-$$-bHPMnV%xy(37K3rtj%O<ӬM(\ wvؓ 4?7^%4; d[0w`(:C3*Ʋnϰ|l\e.;hc \JX"P+@:ov{IڹHЮĶtP7]1Z1 ՎR騯%,)(Wb.kx=n!bgE~f_X8xȈ8[=>zAO۫v4]~P|=ēuNR&+m͂ _T/aiYiV QRFqVo,[8m-a3G[ Gc~: wퟱG(Npay apF"Ht]/u}3 4K%6wH+ Ȯrhh[W=ݍ` ȳC⊚S, #~]H>s o7ލ ?貧:/E_z:R;*5z#ɃA/ ? :Eq{7w }jphc"Q1c >|ݺ4cjK0GE :5$VIdFdu ?+pG6u)cT_,umj6#[# $teM"Mg;˒V%lmMU#]ԅqАjZ7XwYmWhuƣ[ A^rG)揿/$x Tt^e@?AhM>_ZՏk 4 ІY:~[ lXݷb|&(Q:#DR \oDkv 2Oϩb=lsWvyFeU#%|MWSA8ݽ^Ie4Xo?Z>rױK??QұJ8,m㙹\܎Rm褅 GV60> iF:&5g{C'y6ZɎ8tжzʀg/3UW^̞stϿB+Go'DQ.21ikv7==~Yv@iGyrqT҈ 6;>=n-U#ln֯Z$pQFXcc䩎PBF)ycuOpےXƹ6Exw.ӎ{_p6W^ӨσoxPf4 ,$*%]>Whu٧v⤕'Z<^[qu-%T-4̒x?{sOr}-r 춸fSTY$6tz1REJR@z>r++cv0B$QxO#@?7qf;0zdf-$)S]SKF;pӲ+ Z7YGg9]oôײBI l<)4L3E =(٧!r+L,hG,%e4ٝ3=]lὡ[H|JciM جCseYUdGyg {}xڟQr lh »2 ~>Y,s ! d4BT #N`=rzKLl_n?com'?:ve%entˎܳbfsstűc+kiEgu?^ϻՆoml]0|Bu7hoy3# 7^KOrTJUp=/yw^gz⇊Ҵ~Aui] 单9ov]}J6MzC{ ty׽u~[g-NTظ͕E}%D-|wo<Es<;ZʇB~g=fB8.B>`˫?_ʝ`Mu^̆)*/km|t9̖ZuVJ*j% &Joߴrw=+qZKhb@4$e4?YcHRHgvϻ̈fԈ*ҹh]$k?֌ MJ*3*v;M%NK3e5R_<~$r_7O7u{;IawŒIb*Ġ&$2U"4^>C,2!]TFNBZiwSz_0Es85lYf(kyē֫ }ba].`o+.x."@ԫEL}Ϸ7^MyRgڡ rFR#7IM2u,4,Oqn{w6kv7_⛋).g ԉfp>`/7kɤBy\UbM>}dݷm;ueQHc_ʊ죥{ߺQM?'۰ft^!YT|z j^gevꞼA ѣ͍/H>rLjWmuNyq/:@g!tOR|~׭k2<Мb0Zsmm؋ߖ}ܛ/#'IsAM)tM>n~^i۠٘e-kzr)J(꛱9~bbi~FT88U| ZnVh%_FG ep02ʿr덾R>]eDz>]BKaXPY#oEe?0A?GΌ\f=M틍I_jfsԌl YgZZ: 1%"Ϻ2[_uH1)hU0k0c&XjdL{!kͶl;FCX5b57W$w>||8 GIݻW[{DT#UeW_*ZJ )̭ITPj#Q'l$%M (ZG-[,(؟w}Teu[DdEc4,k?V c RXH i)(H)E5) 1Vmg$R+*A4#ZSϮ+#x20 R*H<)^o?,37c|| =|<_Jq9饴RWNdHz :G_ܒ;~iZHjy L;5 E޴\ׄv}HAP&867 ҿvKcq}}u9b (ENJ)$/wies39ka^rV{ [D9F8v:y"xeTVru9z彂 ydXi uK(.UHPYAjgDٶeeIo&g$ i]cR!A`X$ ?$^DW[Nj-uX۷_'%M׏}usS)_>}vd?_)_.9})׿>ѻx{usL[|dǂ`w5b5[W(# IMwm~n{r۷zC,cU2Sp&cEh>N8Zڡ:MOqǼ~8=.O>[&{'ozCsǷ?G =yEї8smOTOe_i7U6Ăۿ^]IӜ潧'[fO\_uK6]ֲSIO`Z[RO?H\vG" >̢ˬJ)kSoOo[GXN_ƌ.c3=x<[XMj6F\e[C 1MhkjU7 /W{V6sn$ԷTUTZ}=ȼ+DѤYD Б^9})׿Cϳn?(O=uyόAN߿wïwgغ<^S|;Fc׿;3Sul]k9^ttxMϾQ㩫y#YeXu VabyQ[ͻ#Gmwu<+cVdW YC 0VaPhH] 6W*Q$G*He%j*Iau{qDOSK<5T4OSKUO *A-ͳB A VUthVRVR(U A`s_c>\~:0<QvMŪ kx\sX/\l݊|bԾE|VzH*bǹu^Ps&n6k֩ZF{zf-QW=?,6C!x-jW~w B-B:,OO8V0,cWrW^{˒\r6.iKpA@{Z˥o"f2#k':AĖ0{XHRw \Xehj {-_aZfhK1i*7e{4jMD,)Hr?Fc yd*N$A37ٟ]s]\ώNKQ|rJ]f/Kt}kWomKճf7VGcW&#^20Yʱ Ir/p"Z&$vW+`)V.Fy_5淲5a[]R` !.9SP[9O僎Aڟ"!S (Q8!k/CoǾl=vX5K7n|4}OԆuXO6֌QZ( DŹץ}=TA~Ԧjqץm nޭqXFj<!Xlfֆ77&'@I#n|.ݵn 4r#@FU\PQ$ӱ*Cd.n$y w6Z**zSG+~ߛtomi]g%鷎c [A [ĕ@$qO2wٹm-exĖ E2,`[%Tdw7]Yrߘ=eKLmedT3@=kMٟ#;opnqr0=GהnPxh1'2d}3dZܖ'#Nz[q^] M:vER-1%$I1#I-{w?u2j]qX~ dlnaO.L5U (?a1aHo㱾$ҏ޺7-q&@%֦7C7 DRDžc` hkmjsw,pS#DZ530UTfjtdJGv?bh2x ןs;Ś t9,$Spg0sMq4 <`<&^GؙR9"Cp71#@ xq[$y9+{}) ;i ^Aq")%E]b~]|k>9 2?}uy E dP,4"UTqә9zy.$1@UP:[m^l-$UQ٘՝ؖw%$rsp'Om>~ힷٛ'>ݘlF8 }}u/KK"ek**SI$ZJ=>>rs({g; ,j+[]"M ,؉;zoOg)-}ep0@UyZb+L'>G_-U)e;9ZjqF-V́&Urm<`[+2Z[TWb&rid$Ef'l<uqJ5s#SU:])o{~w?|UTQOǜMw. ,:Ca*㨫ft'!򶜉{WܣGlPF&bZqgrD!۱;r4Npl&+XY 3vmf`T́L>Da[PzHg2迸FSii4=G/ZRR>w?E:2˨X21I7^UXr#2QԔ oNЕ>Ee0ݭ۔^WE*1&vUg uhتoxKUM6T{Jx7Vv+A"M (7͌o64,JYNGeΖI$7dEKy}0̤$2E5DӠe|BG5m$]v"JŽeg褐}ר<@=A ӇЯzo>ٚpHf[Zne׀:@amA[do/]֛Cw`*rrPcjbCc 4D]=y>,;#ɴ\]4dRYQ ck*Ny[{ϱ,7+-mVE P4 D-[4j9}Ǒ;11pn\kqejfk$j&r9{$S< LYڞE'=uommA d$ġnuAaNll!z}QظJubW~Iu xRm{DVqY(㒿&\,9=rs \}dDܷGdZy/uLQ$1G $Qh?QtWs#n$>]$׮~ֺc6vmf尻)m~H xcG]o%%FWTTJ-] êpq9+ywmΒDw)ä?繐=sQm<ʹ S_#3i3ZR>!EMU SǪ`E':ڛƤ$vJ}(;Z~\A]Ojܕ\j)A+MnI%A$zMV:oly^vh拂kqgڞZU@#ƒ.]n C A+2xt)l)۶e,,X=ۘ oT.>djV_:sF}PDSȑĬ#guei^$o4Ncڭ/ RAWJO\Wnߘ^"sdؽ bLmۅIUDJhR N$9fnA7[^"^,)@z0XƽxlϬa7vv9ߐmmCshdf #VB̾"H]IIJ~;αܛ7Mw+g72^$5";"Kި"sPFhoVʼeϻ+{׊.J 5,r伤/̼yĆi6 ݍ[eԾ'%`u*MUQcP*{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ձ'oqxNf28 kG7#hkuoGZ-5/퍥>ۑnSCwGC c}okLJΎ[k{#vVB&+ P-}>q2sÂ@3O#Dn{^׺ʊ*L{کf 8u kUYX+?5 7z}PT m$jN NnVG IZl;MOmKxHW &/u^lQN]G {fKwaORx֩FCn#Ew?Wpo&t($z!uԷ!OGr?(rpvGpo#olݵUc'SP~{ߺg/[W+Y$ =2G>'ͦKL(mV9p9uFSQTQQΪlcjܽ-@V G>?Smܓr Tn73NMrKwq)v,(T^ }[$'ǔ^IO˭~il? Äv͊)+压j2Gժd $﹞kʿw n %>Z:´ӮN{94;M >(2N5><\O}uPl]~Ҋy=r; &m:Ib_}iP%cZҎ-Q傞dm64:W{RUӡ f>C5zՖzMVW)3Te2ՕylCOQT~Bwoyv'}pkۗ2I+3$Ա'O Xt  }mջ?:ΛPﭫduhhFװPDZ rܼW+PoPYU 5j'z%>XǙ$amv,RnBBO{Omvq}13*+;*)f'.O0 p>?{c= 튴]Y G29֥2}(~_j~V{=>RK֝ڥX<(^܏=,{V*Gpv@4<𰵞qhfAP<ɧ[7ؘ'ĿJ HCQ-){*h0$[yjs>,6YsiZRJX|q륝{ߺ[O)U^ׯ)z$]ՋU~ Z}4 _گ1XmыgP%n5n-*\fzѸot)62@|kֳkwloPUrgg_b1t1=UvJ6E `VUaoEso*nꭅwh)je?fbIi7'v⬤ًSem!bEI#{=䍷Ȧ[F䑵V]T_mK$vQ%$TG< ךoݐ]qFn afU=_x׽u~*& efamcTv;WpY=E`!yIɻ䜱͛g1ĥ heYYG~Sد0ۚx]u)l}!n u ˮ~ֺu{EG:z1\Y}Y`̕YM fn ML)rײ^{FʐA%ӭGk 3m@fhҠw;{w34HcSOԺ@AZ˭>^w/?=ڒ1G25ٺvmJ*:Qe1RgKO3 /{}ǘedJ@*32- .}䛯r=±ؤ =ۚ-!flN?MI,W׽/؝:'rW_[L Zͩ˅(*NyzHX_fgmllIpãxڌGME;$g(!7X`.^Ϫ-Ҥ( UVw6#R"J%n?'zSwrM2 ^eٽs<~ߕAJ*IfLMQSfvqm}{,kj=̊"pdvCi$x9+,.r;4%.XH`ol hAuU@$qaKoӼagq̒uٻ"jWVɾ2#XlP~xy_ߞO!mV֢ICtyj rǍSIz8/XQ;^:U~TMQǪdo[$]MCI"qװvm?_Ȭm(`q}'k~^MOg-vq#-Du} 7n_ٔ.ay"+gU7m&#mC6jH&O)NN#mD1{{wX4V C+hR`~i(^#ٵM9*n Ig}j?u|]ܸ҃mzgƛg5Ȼo)-I9?Osa ml4xasvKpxHn.4X5vכrr !X@ǭ};|.čXΓ:tÆ>.J6* 0!ygW1K˱S7EZЈTe0diVM(&]~c}~h k9Pe(Z6oV|vy>ce==r) ,QY]2dSӠPVq毼%{OʭܢpuZiKiŕc‘b}h I&<Q 5Xeb#I$]Z++r5p&~o )ttg ?7(lw[w.ZKs GEo{<^ CIOM:Oo*>yOט_ v=C;kn,X)dL1/){9rxk\[Z")H`5ҭo mO)8'py* c4k娙 a}񯮘l>%7;s4S1|v A\SE,6VXuQc%e`CJ=?vlO{ K[+x(JB!ܲSP:=m7i8j⠂ad-h?Sjp؎׷e]GF>  pbV)IELG/pڶڽP]ܢUAHvB((hWfrlw{ۀ$ݛdOJ4 Z@xAwuk17M;IE՝qM ɾkW`N:_r}ùPn<ɪ=B3 @#\vm(]a _Jtݻ ]U{w$ZDoʣGQFe~il1H"e 8sħi6^ֶtPi [IM]{¾w?̣믇dBB4sn ;ň/aﲟrS(л; -q]*H򐑂:wާx]ί {UQ4娙9kw};#Ҥ1lţI0(#~kܹR[q#H Ɣǧ]ضxywbucX$WZw>뜕:an 7J͹u )(eϱo^\xH..̌*4GA_*=9yG۝mDZb dX|W{otg\uB{ORLP;a65./_&R|T$j7w3mmܥ`X>tY!U%4HFa7`9qK ҈M(\u8'Z15Uqwۭ:FO%mvucv0|2 N'j}.?}G/lCMS^3h)U'&{+kxd@4VḼ F}Dv/џ1XѷacV fݘAuyųG̷R$!Y%۾}.d[kmqrIJ,y XzČ^4ҬcO`-ywv< `RW NuYS*uZS8Ah vH(яP~"*~ǬAHզfbf+uu[^\{叉xe{5-5S8Xc$H#AJvMo]Xf,ŏZ׺u7lȝ)}srPT[M߹)74[gs'qriT4{mU>k=̊KY߾1q ꬰfڊMt}]OjhV-峋.J#[CK%>?~>g;lѱѴ[ۑuʤ\5?`Gb:nL(Dzm}#dV6]NK)?U暠!h+X\]3?4d]6n>oeJ,(дo3Q;v/by$@tt1CԳE4{&#dw߹ȩi)& n dF7/rFci$Au%40-z">$oq%|6fa5\V]So}=m'̻/oȲ{zV7c*޸%3l;G'6}CSԐ.i[Ut/\l-b[[6|TM?o̟,]PcXSّQ=~LV&*ƑY %~}ܖ{Ƚں$Yi W:Ǐ4V{7xSR\4u?>~IWZ'خq;5K||TWm<+,$7EiȬv"ȠMcFqỷxcuHG=O4.A"=#NFȆM~85$#Kz.c!?x|ZlROnli*N+uʚt"9*Ҧ(ge&:X'~~<&eY崂H_1O3fʮUcL,X{}Wv[FqK56~KXrGS}9Smw A6nY'ٔzItk˻}޶S;Sݿ-sFO^e}Y뜽iwc?(hLRvcau7W?*i2ه?9v^VWHʋ g #?0AiclvYk(cs _Dwu!u~{ߺ^׽u~(6;/ٻo93RWWŅ۸ʬRJ,]3VҊ^CI+eQsewcni5WaVj*+3PI{-.c2WX3Vb2zO++2"쨂t ]^DpYp[*mrfseYkv䢍Uc„7RdEr?s/o`qO?Z TQ/69ܵ豥D\: q~}6/j-9Vق>t68j@<}}_q.qvW!H*j|_PkZZ|σ{WˮMIGwM$Mpw^ͽJ7%n /Շ?ֿ{{maTn[]6[KJg_>{ 퍺S]-#+624˫IuLJn!ݝ }+C6Οmi?cTK$r-r5X`jHIr+C1}̶כ4Hm5]_ê ëLigkv>|D%o||G(p<%WpQ7|Ӽen`r)[5l̟IO*Dkۇli&$|tUeF4{\a}Drtd2B|.mNc/k2or?Rݳ?"iqio_ⶈoMS-E7W=ٿ1$G34/%!"~( ŶR_.ZOvzl*r$_0цw_i%[sԑ>1hnqOU4ӫ M}]T;[oM" AyP2x/3nNȍ#Es#ab=cgJF_s-$hp Z!UUi_6͞s`T1XHz t,/^vxuYW8ػ[T:]$܊VG?@}y^pL7BA%e#!2̴@SNTۙ ei4ׇUxl! 7ŬK9{?֫#&n}WANkAf>Ig{&gbhu.( 4B̖j0p .t?vZ2I>4̰+I+T`_ߣ?] ESKI|_gB4xͯ9+ic.|k%tA<'||/r5VV{}--ἌL?z߿&Ihy}5Vh;O"MQ8[KPce.|ހn8VT}b( ;7Lawz!z헲z0Pxj xI+iHwDDI.߽No{ic1F+oEhְ5TETDPP>{bijLI=r׽u~{ߺ[c+I5rqϾ}kTMM:s4qS'?{l] YLxQjxUwܽb^n-P3[EFq֪=.;uNnչw,9Q:{2no{K$F.ԚmvkL X!}F>쓥qtG:u:<9̦i#Fk|Cqv>bX)1,QA`"-lk+@ s,p>Hue\`V5g,lՌ^ZnwӝSWvrje?sc`EǻUB*jj{:ii"Րwkr\syl[QK.%GVx.f*@wޝÑ=yG(v;ojΈE..T{{VJHYmJ1E+ Gxq&qr*8*귌OTGK,0VPOP/OG5@R$XP[|԰x㼎IEUX=@§rJȑ0iRiɓ~𧀿5U4:\>Jhi~O)ZO=p&j:uOJox⾿N鏝߾'N{Ix:7C-6#1jjYI 1GE/tl%7\͹B"YF. hgP/m_Um~ZODgeh7j&⢩xyd޺WZa髖Kj9uDGn]Cw䂅U/Zu7}mfWdÌ{˂~}x׽th>̮w檤 6i}՛r-I?V͟w-{lE^;yӵqs/?Q70ݐ쥄WKA=r/czbо^tn5:3b81"uY錑1=Inx&k/Pfkw ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^$'ȭ$@=w(+ eO;[>w;Ga̻5} }K?=P 7*2.az?/ oG&Lg/jr+oࣤkquktvݩMRmK{>Ϳ > AI>{^׺Yuɩ|mM [;*P$X$O#;_,H} pG3JRp$tM{\˻1M[OqgQـq$gq}hh۲7qc|)kC~_Y~|-&iDsonb[=T KSU띟tMY7i.ska4ӭcǮtr`z/Jg33.#5l*u(ex*yb9hCp$V{^Uc}O+1C%U<A\;͕GE,gYhI?d>8nA60zYL)N)IhahԈ\=?mG*jڲxUm# ?˯`9n&P+ԣ?A?^4:.GJ=j'=S_ZCdrC頫`ϺwW^cu,D;ӷTAV3L dεuyGR@׻Vdf$xX;W>Q䱛⥘9<6d\, &!*4vPw{[\n]no+D":b4L w;r7=#@% Q~Ҳ6_a ,\KVV#pQmx[M5#E&J3#XoCI7[mǑЛHq%+IqV+cî)_pqSjadi~#4]t-58OE# v T缸l9]i&wO6E#0kҨsopn}9*eV vd0bs4%RzXKt#n{6]%k-*ѼlѸp ;]He$zʋ oܢ7[eW1DDBH֌(Z9CzI3Cs#F9#s}op>;Va(6Ue٬f8MdS\ &|+$nvͣku+Qx׭BX<6bwWmg0-Tܫ4n 7gݮv&Y#7G"9WF#<Zol;X=A-,HH=8=Wwvظrvm@5^A"}X>#ok9WdNe,{cL`:Mnql{Eq\7Xcig曺NkgQhxwB0(qwƗ G~P }1+#&;S(G\SsGYB|ܯiՇW=j.QXKQ:$FdԺ7[ r* HS|@A=t(iCֆ:O{9Yhzgo :Ƞkd.oC>OqU6k"ڲ\"5Ju}CG-E8 n$Q:1Χ|>IGklmɽ?T,x*5$XZ7 orssFhO$>E< ُ b#e-2>D-}J jV*UR~6:l WO#Fccn|^Yh7q<^*MJWR@e$Q}zc<{nJ96BKqnM`jY+|S觢wc<*.QYͳnùól=êGjYݘ $ krK{ku/,0T% uKKNvw}mu:6flv沚jFX]cDJU^{w`qKp<;x+lZQXB*ȱG07vSYl s ĸη(FtJMiT̓Z_Ol9+i: VMWR?)UXQӿ4) 4:nj[}[&Y-c82=2JSQj;JfDZUˍeԋFR&H-#%5DcnGcoeOݰo|u޽S3(iiݓnoJ׌o'_>ګb4x[U*3ܯ8~pRmizMp+~ؼݣ}ž;xn:mV<鎅i[Ef{s@b}yq2W$؈W͈r'\J+Kx"ƾ)L+jlEns\o౱| :*Xݝʢe9v6hZ8AVgr@ms`FYQUI[UmXvgAH_8NyD/ͻW-IcjpTX_B!aߑwm".}^p P 5g^xzmjr_%de_ I.Kp\gwlg{=_ fl{)|R;}orޯ`dnnyv^Y\RYARO]Hl6m<+h"KxpHhT_ϭCgWw|R޻fl=']Pٻ7܏)T4Kut񲴲h ~n~^6amGoosʡ.!55P|]reo7M.O hu,1B#3/ߐ9*lko<7o!bmPRZ5T$&fP<5 8H,1X+8Yc|\n|a6$/q.I>4LN=0uX^MW~zP48Jv(TeQe]R2#r?#s/|,\iER;pH]؅QtbnbKeN^2J'Bcu?gezboʇiPc0t m6? ݋K G;VH$vԁU*K{\'+rw1gqϠ,FV) I* BA j.a,n䷇Yy>mp@ 4QI]%E22YN7qr"X 8,2y:)Kpl}˟sW<;xԚ@Eh#L=4\nkyר-qDm2n|G$0j?/`>%Vhl!s ƥB*|<쁀!'S(FشpZ_ mC %x7Q`nX9n"BG᷌c5ƒRx=\Y\yiWpk =x9Oh<= )"Νa(RuJFM~_ '/C Q8 `1-Mȶf$%Dѱucc}x3mxmC, )0f* @ucn&{X``FPB2zeEgvTEUP.YJQIfo y ۛUw5!RUl ȑUTM֠<2]%=73n&Y# @A!I-F~Y$Ry >`n^eY1PQu3z|2+!==)$ý{wg@T4S`xQ>. ``{{sL:K˩")p_>]g"NIypgkO AyI4"O<.C,?2!eO< ~к5 " us(\jVz9#&6刢5GJܓϨ}[m9쯶t-o+I\yin)F5\}Ayq޷;T9+wWpZ~1u( ,.O=ޤԞ A>f|d]wv kY6Ggyk]]t>k{˷Z;e~o:ϻ=[] I?x$LO3/{:hl|{M&?xPil·&R]YEC9#H19_י6ǞRk9.fۖ3[xҼ1򺺒R pk9sE(%v6ci Wn؊"JV:YoM#qݛ{=YlOSIRi5: cE̼|Is=RRM#H$"ԄAڃZ_l7.ɴlYZ(QcJ *gcbz6|r_ 6FF]{]}En=$J)4⒍u?2d_h=}$o3n;[[seÌU#Y{r*}f|D[}f[܄NѕXr!.t_DXEH6fO+%kdst0YL uR&/XgI< #v*-=}-G'q (IFΊΪ(]UU0l{km&H%* ZXXi$>gKU_lwjDQlcdΔ/RcQ)[wx]enKQ$q$H޹CZuݎ{wToCJ[ I:%]i0zӰ Ts-5D/$45P9d)"n wJ #XBM 09 P0At0xot^vvΠD> 1[qFYЁc!{A'yĊ%*Zڞtܵ[kgpHl~S~} 1v?gcH5ecg5¯~9ԏ}4s1ڽ_L_6gyKfΰG}w7T۬I%xkV EgʰIQehH ) 2AdREE**EGdy4>"׽׺u{6>Þ;2V[ qP(@O[}/r&ulwd4ɹhV8-]ki,9}٫0FİGw>>IZj]{+v!IA# >3s'{d}q^O$F+_=1iP}Y[_^aF|0Қ|g'"wXԳao,ēeUU$O_|WZ&uNĽúӱ:y- 32d&%h%9 )f ~}y+l{+w|K;[CLĠV*Lb` nAeg{wּCIjUi\ɕxS@M5mܱ6K|geiD1koG087{[:nCLҖT8 hQ*F,3 By'99Kn:!zSĐJFiJh!| =}+rdu죀%+AdT@OPMv'===KZ"u.9{xQ% 42 Y?gAw mዥߌ_(6}ָnefUUG1S9vǷ{S5վDӢlȠsk]5/♤m(tmKK[׸׵Dkw}dmh0YE$hޢYv?UAθFM|Ii+ ճf/XC-6^*~O2]"oc_{g XnVd*/&3t?3er$u?Ů Ꭶ1]PJh!'4WF>!wSQF5%DTU: |Tut9qen.bN@Gznn,awVQy|z+'LԳ/Ibuu? sxeYnIb UC#)e <;}6׹D[G$l(JR=kCѾ'~-g[_X?RMSM7PX7>hu6R`2Ւ鍧x VXr:[4N,-BfGjyZ0*H~~m6܍ΩD5ͪb5<+OՄh[MR`SQ {{]Z4Pu kCѰ~QiVݬSR]Ǐؚ4qfيЦQP3zĴ*>=rvf۵5oGq)A D!2ҬUG퍋pSukb;u_?P1_ dj!\|O!L_e *$hV'Ri刮 ׋؃v!^my@/PQޠUZ$$_ލݭTh fh3Q%B>cs+MiG&Zgb Z)z'1LNǩanyp(\\vy`Fڟ/$Uom2>ŵ>:#8EINxŵ̔ѮA7k _Y76!Vԅ4tY*=+!POPTKU$C;yǎ3eD_#~q{I?R+{@>gSO>M+:spo}$gcI>sl[ ڿUE\H0T*5J\G^A6^sV͎,ִpGJ֪jݿd/n-ywtv tjYk|Apΐ=߽]{[cխFuc"We"d[Idօdf{\=`1BAxd%Jc\OTb;Zв2_:ȜwiʆXc?XJ:h`@o3t}ssR P[<(C<$&E&',!70q!#j»Ҡ/|)"2eCm_myuk$`%hҭuVŪu.2 *}A )T*AYcpt5:z?p|tovnCqj9v>ډRVn="xU)2T S${s>{V0 YhKM)cAMdp$z)ۏ6^-)!f>K bN51u]}t)m㒞*<&[noz)bBjqU_"@up{9[sNx7 Gr,o (XFV DE>}t[_6di[e5ҴO:\׺uc~$;7ѳ(dLܘ=:0t̨UAff6UU,I`4'I=m_Or|\[}0e.55'S{nXAqY]RȹU[~=XwjicgqwO%-$Q h ;ӮZw&ckmC h"SO8$c OZV+rMyC5uɒe+;>r٩J5&UQ`;;aHD"_Y5.\KwI]cIQ 9/ߞ70̤dz*(ȇi]} u~<ѳi&uDyPCkHTO_sۻqS׸*g8w>? fE7=>h@~h"tO|%qA . }`2}QL%sGa>k3U3Q᪣op.Y{Av5Wu pc}$mQVJpQk{? -Yl`hM>mbL!<-'\MWj1ǚrRCgb?6׌(ɯ!~DAyQ8!]m v/>  )OqLȩ4{ Ld?T8E=L`+[f;Mw_^ kqxPP L I?x}<_ۡ2 d>}uBt>w{oil[%YmWdS͵~O5$b5 K\|&.ewF`䬓9C$ƁA5a^õ퍖ʒ$FZ[+0H#'Bh Vew^;pQnnZ 7pH#r͢&V[e˅kxʒ>C i=cojpK-O'c)DcWL/ethi_nf6^W%Ufsnj*ҏWM_S$} ӘNrTfٖI!Yc,#!/5m$5q ]haf#ā _uJ~ffzg>{6cw6uwHu)U&%MwdI=Qj+Zj!L,T:Dfo7>|߮Fϰ퐻5іOM0@$jG4qV{&|/(Ž |2-eh~,c֭jZ{pR[122MSAELqE e2_:sWlr%u5YpI1~LEplpG8mgLԞ'72WZo>!+PjXTsO䔌)' &`2O=uF#7??^Ч/_ { e) 'DŽ8X;tWD4ƣc$$Xa߷>s?jmӹj:A%:,c륥rG4߸w]ka56pI8K>ʭKG,)d&,mIl?JkcHicWadu4i2GPAVVVR>>TlH tHYUTjfbr}TQRp:' ml'Ïy.[rmS7uPN_E3cm⑕OH_+ 6_ɷ{yy9Wܮi#uH Z̢66!{u|Kw쏔W`[*IFuf{4 0+Aֵz{+}oNAW=wV{w墌pdȵ E"o;oÚ7Y  4#B"Ul[--v\acP!Wqn,\t]eYzMc(UE6Oh7K$qD$ǂ ,|A'^Yr;oo Y]R4Qŝ؅Q[ EYn_)xbfA ^V2.ېR9Ia "j%꧱.}n;}? cԮ#w4* &נƈh;sݟp7ol } xeUh[UIFHr߆]O/_~!l ^mNwVolO1L3zVdƇ>Zm5n~Xƶ-|-\uO%y"^cǠ1%O. 0r6Ԡ-Ӂ+Q:8}KU 5ݡ27onmf3onInL-, :,}<F%Aij̿xh}bamJo獣S+K1Ji |A$?'G<ּ,Y* D)8;5k:tSN|n\9ɺ>J13ID Z (QQ<&ijĒ]nb׊UQJ9AoʵSr= WTyQ:ٻ +/slnl\ooii3s*vVvPΉ[㥥.! nﯱ~Zvqlf5v6CxP>nȶG+uz ^kx8yB L\Q|2$ww^Ktڬm4de4fAeܞTvW~^ݚ5vc+$wHQe l)b:\||ϻ͗r^M;E$h:cV4EQASr.l\űrݪYB;c@rp ^I\x3{r_4LMn ~WL]gcUGjUjz}R0yS4rdsIIG* oi+8.KS$h;{#nXdxFB]ĵ(:Gj+vPA!3]M]< um階EH%%DFISj҈}ν kFE 4-^ Y( ]!P A?h9_f縵F:!fV"ƌIbq$*K[$tx?Xa*>KwjwJ6An w4}LIvmk.LӬma۱c2!=Lϼ|;?@\wkMn+ :IR^;`\>0)<<7dz7k;N-Ӌ~# m=&82PSB@_d+;Y=O+3|ݽ-,6n(YR)C(W}H3ۻ[JB۔/"9r% Ƙ&Z+'<|>;/g_QwUl]4V*QryA E}uZLP`3':=ܶڬ-lh)S#4Ie\We#Fg-\ŗ# {ˍvtbӔH2Ejm VpIrUL }~,6'vWRn[9YO9@"WQKe&sΛ|:Ÿ[xq0b"ȍʫWJ(b)ʰnZGH$z5b5ʊtG?Wޔ%6Nݞj<⭫fi/9Z(/ݭ'7n qChM#jө4&A=}%x[l3K,  J@E! &{~VN*L.+ڡIclbࣧ2W$3<;}৸?+nc:閛ۛyj25R<V7y -a9 V Hq4tA*wcTGv$ZCn ~OdۭkDD ƎK1&IOsD^#dMkkw%òQZzM{*\iy8u2EKԩ׽u~{ߺ^Ӷ?ڙ>ܻ{!WIE䩍ᬢar Բ:3)4wחwH7wpte5A%c6ٺB RXPx0@ pC~Du}5ˬj0&v\Q28̼q}.JU|j]5Dh)l*DM(ƍ(t ] @db6u+bu}3nK 밻c&&Io@ĞUUd:'=ϷzLgs:ޕ޴3^**|!USfkVDE }>YYWsM K@Jִ^6D{>6|Ԁ jpxo|.ڪWvgOojvhtH2=6>_?`2 yv}5_\-{˺`M߯n55+uY/@`wȾޫ4uǾ 'ԠT>㥥Lf=ŃOPy* $Zows2LZD0(ijFo5dPYeҭ=ow(=/m*ږħbw3J5бԯU_?w|D{5OٸiW;:髮v]⟻x?p} EgO̥NL_+[x%:;}cڿg}^ՙscMˉnjE6jX)08J)⡩@H*sSi&7rsT#,P"-ԇ1::Nw0˻0` CIgGR Ugn}$m6G_aj&N5KK8V(QY4.(,C =ϛ}FὑogEdP99̒+\EH8ɟl=jVv@f@(*# >@>&grX?pR_W].ꍙ蟐uuudG[adi: f1㫡DHJA2Đџdmo=͑ⷶ^yBFI>ꡤҌi"2a{s9x9K5աe f* 2zg*_r5ݕޱەYf)eÕ=L# T)k&v%Kc+so$yNh-䘗mo'E24gaY濽o-  P(eG G͎ꭏ:C~4&J Pd;DUx6ny3rI$nșlL F<{%rϷvtWCùȷCt*,%Tbr,ɾ4v k}2< gX ) H&EBŘdƧͿ΄ɹ{czwg7<.J,>qe,⢑bNTr xɱ7 poe*TPUs߹;vճ1M9hB `Zf$@NG̮)]&i6RT66* dR02'H~X{{CJo>0!NTHPC\pGܛu>mBY',j\6((1-O9₲G֦X[M} bZs tđA $g!e6euR3vr:/g+$SWq|9)3G &7}$5';p|O}E3}WgJ;hۣ7r4jES`U`CCG0F䭞=>.x.k}9QKCo ;5P჈RNY~g6sGKo lgoNge*Ȇ5$CO2u_rê>EUM1 (>QösSY~cI;o+w.P,FSpv;nRgJ?1Cq5BBs>ow=Y7Y&i[o*?)!Z9{m߂z-i iwSj#=Hs!d$mfËq@ k?7o E-QiUFCr -{@rAks_ƒaU{aZrYmœE9]G6dM(E=Cj`$oW`YQ ŤDMc  d%C41Df2ƨ#2QI\O-?wZ/Zo-Y{w{QݏLyQՈj<8#ڝM:z_/qQy_ݷ\ Y PUSEE5b<&? s>_2ceIY"Xyjr 5E=",ob+Mb-=ix܏y%`bc qx #Nh~r=s9r}tG%ӷt3)puYE(ڄrJJW>_nr sgܑm=A_wCrGRwSCrP; KPci['ݳywfڒo۶eyQDJqZ* YZ<3ٶaM3nвĐ[h$!KCHaKvxlw6f6]2>Y&b]|C{{5ݵlaH`Q5(d mnI'PY#eEe9 DzXnY店ÚXj1UFܖI# 77f-N+pƻlu6"lE@Ȫ;$F̰Fdyggwi( ݵAfX,E3LA*hJ}Si[7ILnN SDHd]D%˩{^߿v~ܝSi:Z?GIA$b#(ay$vTM|}·Xvo侕amy*"<UDgfb@b?[Q#h;K T fUI$O9/וpKW]=Uun*FJԨSS30xy.8Yl1FUee4YIJ4BYnf}"$ ۅ&Pb1vLi3xJp=+忻*ڞ#[-~eHOoOQM~ʉus8`c]띧 $y?QTMV _6vtJJ0QI!#ui>ɾn~v˦rxjZØ7݊Z+IY 2VO l_y9ou[h#Y h񠪞j: C^ٵ>'#T]=50iU;2&"1{jZ nݜ +սt at[`,{7纳žV{j&/&?Va5"ji& ={dw.Z}{3I2ˊT*TPJb&yGsM#p9%nޠgO,V)-FUt+K"P^%s;UvݞpH()5%$URD!"V|{z6V_U#.8-ؼܵ;:1<"'t &,06ÿs~|=?\C?O4'bӨZit]^]l糖;A<2ŭ&"m&DPZ(z}ov}_s1\e~ܕ۪!CWZ,m[C)H[^y^QS`ط>b-#Y9oRD73\ityC+(X()6|~o{ݳ_L$vwC2GPA zktb\l=&kﭭ2J"UTÎ1Hְ[aȏ>|\A}+{i Cs!#dЀ847rsmwpKes5GH^DU1VҕK9k鷷lu;7 alPIQU:$|j@ \e͜ɾ<Y\_O9U|+xFEp PQվbIWvV!XfIm&P{]~"w}Ի=_vFrUؼ>ZEZM+$q3x?p?fmy-Ւ(^GhP1fc à'A$fv*$UO|LX>+Exھ9flU cWN͏[Z S#*!iK$l7grn[ 1a Mjwc.Iwޭ &=cm.߽ f*L7!EnUA`UpWISEl/ò1߸؞۽KY+ie1EZs% j YHyw?W6wm+{rQEwYȞ#~rtܪl i1sZ#yӦY*cfCCS.gKU73G6&)k$~>sK}nWcqI35,UfaYۮao0;Di"4Nnk +;s/EAldSbc\銯s婡aP8:i$g(j=36:gy'@Z[= c$)w=y7qsDm⨂* i]I%ڀ#aKH3ۯl9K Zǹ#@'$ꆁ9R$g_vuYm7{ih&Yxx\xdZ ȵ B>O%_Z{6Jv֯$y3HOxp{̼.Kjxӷ b.c}^_=2?ibtW¾RoO&/ze%o{f;"!.ԕ' <x\O{|5Zsm!!dDXRb==G}嫝'q I 1B{"}CjO=/C8؝Efzū#m;yV*Fu~ލ3,#>]KVQ4E!RBPdQGl^=߉۵讐H&u5) v>$Ԑ{ƞή?PX~{%+-4ؼk"44ZjFGfho/ gͷɷ]Ò(DJ*4*K]>?{ϼ>?*mjT/gS!!:"1Zg?cw`w/Ǎ[޽s4j~zjhq4z'-[OEQW=o|axgCab@ #}d*+:]C@Nncvn5i5Yq]Iե.(iO+R5@{ w{tq%O+T $]B*f'J*@ ۬-6 oO4%,Ϧ8".,Ejf,xOV~_|h{qc PvfRx:LV߉I7WNUZ$7-t{/lH۽l # YE 4a\J{KGesVIcej#RFL$) 4KR3\6==_!ߝE NfK& D~TB)y]:O{9x,RtcWtO<"A2zMؿ+ci,G"FFz FPtV")= A.t|#tcv>uC0Oۀem\mlmuZ"w٣1>'\vϑvoq÷ Q@MlD +JI9e=l㜹{nx}o<<4~2Lzd0d=Kx&W)u̴rRn'z7:P4rW34l5@vuϞsq_'].HkH!`X`L~#@ *Iv\"-au @%l=:z^#ݛ/7GWeQ55DM%5\,2Iᏸxd歆Sݔ,mS],?0t=,o̻5/QRUCGF⮪#W/.6>O-MI؝,&Vm Iy(]-t?]F] 'W=h,e@-:J$s,3iټ'86`<ึbHċXH,[Lͺ$ W뭳˧MTIG$6[25 i Kwwemp;^-ڳ/rQ)|.H42^{qmv#j sZGhPy?)UڸmAսo%.6jJlSKZEKOb6x#Q6'jG.m A,ˤ@ZO?WS]ڤ1"c,vf2L3U#Bxox$Nu$H*@e`nr=r4N$CByG`>0:_z◫XVvn ӊl\v.JQ/2<5up'G)]˼SOf\|KqiB]cDT[w'R:|;\M#|h]8macHڞ EWt~/׷*Y.mv?sATԔggVd\`tUU=y4U 4[J <D msql|O.v!eMqp?'v\?4l(zSf:pM =QHLqqOBr=B%t,~7y;uNkk&hGQ8'<viusi8 %:@ڻ*jT.^-}zڷnSG)NC(J ̐2"Y$sܮY#k綼u^{9"W,)V4ՁFe^ṛn|m6_ ǷYIҞCFS'9*^.>ξ}hiwoX)ZcR*Cu(F$[$m<ʜlV6${*[[e>5%QڧS*f6plMaujoӶ2=I8U4$ܟ!rOȮ¡7|QK0ʊ]h5$q:lܾ|W-ȟw[&h.wVe FpB+ɦhV] >pn U}՘Z[5$42i PVG#9K!f+j2Y^%d2d2yyF%I?xinۭ䛎3O33$K3;,K31%$I=dvvQ0¡#5(*P{2E];ZvSV)Z#m[(xrQ2a,Sh"}onvzG3**еG2F)4" 9{'d^,GJ0̢-ܤ. $r/vfzm_r5;[rmv׮=6ݸxcGVG$G:$g"{%=O vƤ%ByD_ WtTy~QMyrm*d*`̔!$/?S~4=!UrX.轫w. ;ME6(CtI O$y!{r_&߽cOs9.ad ̦\m [Hh/75sɰ/˰ʔpܧbF0I4(WB]R2~uv'ˌ&"Zz^2`SVVK% TzdUhmM zPO[UGe}Q[+g` nJBFQCrHo=]]κe+Q J! kv&Ih+i#lT3SN*i~6m|Ք0xd|x5\o1tT eDAݺlfG4=&g-Jn!G%'[NL 6ZLvQsa WHtb? qً>& 㑏rVҭwrwEA9$Qi$|"_>/,e(ێCL썙oMZR{xMp>E^UFԻ~)z̫/\9|wm\͢9+:l.v%QkDKQĮ~/}w^J*18ҩj8T3 L NBr%"9R,4.VIXpij驈Zt{t(׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^m?d3R};GR}_hy'׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~uo{ [ ST߽u{{^׺u{{^׺u{{^޽x]{{^׺uWdqxܮW+[Ibdӭ>kc{e۸h4nliuvN4GYIM6>Q{?/[0V/"FNV [c|yEt.~j]W sI`\c_Z[z/^׽u~{ߺ]i[w]{{^׺u{{^6\opw]{X^_o~u{{^@$} {O^׺u{XdǯWu~{ߺ^׽uI׺u{{^׺⑤`,B(PYS?'}홛,kKq5@?$p]zq]{{^׺MMW]UIArtv:Z̆G!]:( 4(jl.VYUUAfbHI8,Apqgv!UAffc@ bMrRĞ:NSfh'l"mИYQzH,&#OKSǔ"'qbޖDe&,Z2Qlub[sE>F_ǹw*FǴ4l#'s1[bzu{{^׺E>׺?/=Sz?/=Sz?/=SzXA]{{^׺u'Q RJSJW~ֺG(H@ tWPݕ Pc+4"LQE"!#G|;'abI2I&5$I$p( l;o]Q!GꨪہE݅ 'EzEMlOԲ)?#`BTF?=컑BOeOt{ߺ^^렪9 O׺޺^9![ybM7E{_m@H :f_ӬiI*&?~ռI?F'PnUYVEu:OϪ`j XғUiLOw6xꪊU@UT%XBI5=w]{{^뎄{}zO\u~{ߺ^׽u~{ߺ]VX#=v?Iu{{^׺u{{^׺u{ ^Iw ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~McrY?39m.3dr\|KCye(R >XnwmtO=j; ; 3$776v^^HAfwf!UTYIGKmw}p|tx.*k70'^)5tPHg*xMо[fOR+nVkbmed̎*u`T%YgG7r~<$jVMAWQHMl5H՞DDw~) ՕVQÒ`W׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~Jbrn'-ʙhX>j2XxTIb*{Ue{wEXH3# 2YHe  zj{{{5)U2:0*jYIV:'h|ޔ[s3ob*I7 A[=1Y95BJGO {9{GY!8Q#_$TP 4Y#@@"{>lr&8vv#3%#y*ՋH {z~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ }1><[73t\gk/R=7*أ-\H~ǹuyڻDSÑy&iq ;*: 6pi۹5fK&I(ď:Whvn/wj e.K2F!f&3X =-$+10.,wvbOΜFp)uƀG Gjjf&<&r-[[8K\PܗF%QE~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ԊZ}]&Ccꩫeo7r$KQXjhxLQ3#;kХ HP_%##4k׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gBw\޿-z?>O'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!RCޙRCߺ^֟J׺TP׵u?/=ui{kOK%~{Z_({^RCߺ^֟J׺TP׵u?/=ui{kOK%~{Z_({^RCߺ^֟J׺Rߺ^׮?n=u?ۏ~zߺ^׮?n=uy}u~zߺ^׬l}u~zߺ^׬l}uߺ]{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{c/3k3qF;1޽{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^m?d3R};GR}_hy'׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uܣgǟ{K[z 3z^xE^o~޽zs @i7ko^A׿ |yWߵ^?><_MׯPunU/mר:7??*S{{gǟ{K[z 3z^xE^o~޽zs @i7ko^A׿ |yWߵ^?><_MׯPunU/mר:7??*S{{gǟ{K[z 3z^xE^o~޽zU_kFz +"x:HYII7'ߵZ'6OA1oko^A׿D }[z ?z'@L_ׯPulx?b~޽zd/F{'~ O7ߵ^鶣Y.y~!tM:[]i E ul1a`vdִ 0;{~dGXMbhm%Ijnz9}& 78{H'3m8;z׭{j6Ox״M4kZvkZh;c{s*}^uGnχȽ^z2{{J$. #=DÙi;oHMl{J {oݳ׏~_׭_N {oݳ׏~_ׯi_NT#Q):ﰩ/ºE?SvZZ: S^:/&^rE$i>J?`'qkn?ڔo0'r?x״ 1?Iܟ:7+#2 #kGPΣ_:>{GPu{H=5]jQ[},4_O1>}arzϲ\l1:noN6,~^@Eق,}HQ>Nrqv07jLG9gM/YA1:@2s_"?{ߍ}{GϨpOՑShꙚj}Qo*O~]{GX?#gN W:~c'*A+I`7_oQj9bߚm`xv:<;Co״^9}ysJf(״^&AO򷮞ߴ&fK}d<*߀~^:Nv,D٧ԶJݐBVd5#i={GP?o?}7{߼aִI (8WFK6I6G[~d)#~0OQXMP9}Fdsq]Q{Iǟ{{Aza`1 ͓f[Ym#5S=^z?'zhnRo!rv-@jTj7[^2>6-Jʌ>VEgفA?@I{A7??=_^6O~yE3cTjF#y$OŏR{ߊ{A_N7f*O#v5{r0A>Z{߈{I)y7h: =_nF!͖o6N}Zz'rA&ԻÀ\Oߵ^.b{=7?Ḣ[2={nKXB~־z ~ICfu쩎zh6]X{ԾP o4/:ij}?z"_WU{ֵ=7=FQj$i4bnE.W}zMTP,o]w"J#j(úUՊϿj_Qרzh215gOT'ύ $(f}lj_^CUGI$M=WEw4T4tf$j],qK֨zkZ7~2M?Sv40 ˌ u{6>Yz5/$(EJo~6ѣI&$GrGhS<=( l=tըˢ"w|>QFwvl={?yMq-o{{G^Z׺[; ?+{ư[5koN?޺YO+$$~sO'{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^D ApAuT㊐T*T#Oߏ~5;Ol*Tʕ"H}S׺k=_d=wJTX b}Ў-u={]0QJ bM%#{OZ饾9{thߢ:iu(aide46 >zM/WR|oI"9#~֍aѱ "zMR|74o 7RHxFb AO^o_ gt'Uֽ,Pa#޵7^鞧~-魃M%ѵ.#7?CǽoS״Njz3|A,=i_R?v{scmר:dWֵ9 ~"6u%#jW$k^AEG]:5GhjtZCCUnmk{{H鶣F.F["T LR 2%R06zdm?/mΐiwjQEe v4m7?#>t/eZPFZJ~JXF 4Snt~Qs##Jmw^ĬQ'xBd~.I{_׭i^Gˡ@Q.+Eݱ-`щ2.o+#I/'6ghS;E?s;on+#SL8}Aw.>L?Џ~_i5T _ڌ&2_Zߍ[+u#>pj)5۳= KܝGMz}2rwamLOtfJzDko$s״zw]N ~ܐHծ8?{=:v>C,n`/J.4ѹJJߟ~Zzj|ESKP>(V2pj7GeM3z>^M# zΣp7Q x9_;|O)>.NbxvLTfd9~}kA鎧|!$;ekUA{'ﮫiX~}WU':7`^ ,KF{v2M>^z`1^eitZ[Dw . KS_@Os*u'YW=i]yTڔxiiyl~Vx״gK̒UNuaQzNЈom (Z'^zi92|k:Ŭ>q(A}P$$7(K{I銫I18I>,C@UT:mE߼DZOLU?R!g`R$fβߎE?>=zޓv)Gs -VϢEIwqk^o7iDMQ_;8]g%<'Ak<{ޥzZ?1)e6`tj" O}l}zLu?PFM_?E>-⾆}zI*8j*hc`K7MvZFϡC1v~=2TufR2_VvDJY|j/ǿTz'J[KxҬګhnZeha9tx!cM*i bb5k{!DU inMZ}u1KmY*׺s }?q!m'#FTueMrxMm3[}-]{]DYJi?Ic?:zr`}usn}uݏ?u׿u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺1?2w?ƾK:ί7iotc׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tQՉV/R* E4p0HU:{Uf~=F?Xiek^S׺a^3Υ*STg5ƗizI+DbIUWTJ{k1h a{}}׭PtUEi|ZVju}ɪjo9u}u_ߵ7[?UO-f?gǫGƟV&>OZ7YW Q^oݧF}FhMzIsZ6I^5e_҂YΥd `H{޷GI+*VEo1svrbi߼GGL'P{mUtޝCv5'/`=^tQ?OR`Z^dXܨnv[^tU%D$]=C&'r3ONjS$_n=^tD?ڡcXkPbY;}>Aa@߼WGL5?/Tow?3F}__o~_i2O =+#C>Gх2A[jUm?ߌ.tQ rE/l!]YTF5IK_߼Vu_'s>Eҡ%MgWVmn5s}oNtwSj6ZV /mŦ{ӭh'9cK[֛*$zQMQL]J {}:*?8bEk:C V[S=>ooHPߍ:bTG3ie$/|yh@;ox.fma%oKU4]-*_n}{GIN}#|`k:yH$2[j6Oa״.^E㵴OQmo=:G'R+^TQJho#<{bZ@R?h=0Vr y|f4o{PA1F=&r߼e'_Nʰ'AWJ~D FE^ݍnnߊ{A/?$&mO:GqS^?Z؏~֞z_6q;2?[[2o'no6ޥz . ') Q ڑLN+yڗ׭PyFH֣;:6xٝCbOTzg5}S4RDF; HT]3Q]D\\u8=D VDC jݫiJ/x_Wǿue:F$)H*o"׺\b_]}iZ"M?"׺s }'1 ǥ4j=%}{˕ŷcߛzk)ozgZgJU6ߺYC:~r9[~wb>^~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ю1K}5r_Mu}ɸOK{go^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺXU? >Vjω5+T?VcV7eC.(ߵ7^+W xG?X5'/kJ$UMz:G+^T|A #>qff2G~^AjI.:C' VƛAbsqaz~7-Z2!dw&2oOۊ-)߼GGIAFfYPw't_Q}??Z:H"Yl]w?a _{[7u\B=~tA_kGIگN9df_/ϯi=#뿑?/؎ƿk5DQYx7?O״_##޺;w.ԱQ{NĒ6~Esm״?ɣӐ:2^z^W)!:[a=zbJ1o;]nE]5_bRid߼DZOHڿ!̚}HOqIr O^C^|x_mQ:2Yί=&|Π ~OđDɫ#QcAkr \}H_^CS!'SWȜQΎ|k!6}XR>C>k.ObdI~Fѫ"G[1Uܔ~ݸXWMBVkaWJ{tx<{Z)bufFIH]] e}Gu%m'@Aa7f{3_FB׺R[YK%*"ki>׺$$C}usn}u݈{^~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tc>e{|Su_rn<R^{?Y׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺX' 4TPO s$Xcn8V]uhTtlj@I @7={o΄h +zfUXODKt9>S֨:H|=29DA]=gWXh @*{ަ=zY=wgHt_EvGA>zHMGo]G@5n_?{GI:jSadt+mXGP~##_d[avF$wPH*ǫBO?^:H?2x:yb^ _}V#WZGH)S{ &>ܒW$*2KQd_}~tOH·]T%FOn [O}o^:Kx$ʮ1f n>Ȅ5FҀ#<=nttT/zP"~-6+O:?>k@#W M?vw?U1zIzNI|͔0i!`i7ZPXxou$rŌ+ͪDr]-&" ]= >{=:𝟑Q])Xlm> vƯ~^zJz~`'!걌8 -boƑ}ZzKW /vhYGoæ֬@2J+<y?GOHzY?6,g2d,m@Z"z'FC[1jgaNrJF;=ֹ6PY׻״}C9QyIVTj/ׯPIRudG2 <_(fF&}ZC;# 3e~4HcYѽTq9-3p?ߵ/="zõ1ɒ^ƺH2:ȕ+TjzUx<3XbV-Z<Ր ~5/t6I3InߺX?na[!HV{^2dQI6zIߦXΧ^ 7s~wb>׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺF;_.gx7gY&?-wc{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gBw\޿-z?>O'{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺMU,&Hb}%Q22(2}Udhk6جSVI䏥Se_B͓ЙwY^BHƣ`~޽jU߄Y5d񜆎H[Q9IM(k~MzHL_YRYyFMƍqlUׯPtQ_˂ŧ/|ClVVe?^:KV%XK/FrݵeMܞ5S!P\xִH|/]O׽&6@YC[ WGH6M?|a);jz r5GM:q+#g'eٿ'qhҚ7\VDUJF&XH_]{H|q dVBɁSkr8ؙZ:Crzߖ]NlNKv>F)hq@:No' [%TUゴ{;7[X>^Gرf Q9.PtI9 ‹9$}=ch [ %#::bhNdFh&+` Ha״ϙQ^)v)0V)جNQ{kAB?=h}K\G[QsgQGlC&_NGZ_*T{A\%T1Q_~SinUɗGՍ^AM^AW5Ht7Ͻ״9Aq`*n,o7ReI>/r, rx=z֓rƗ_~[ 60l?~}ZzU~l5_L8C}1rQMcՇ[ }G^g |icrkz7`8ϯڗׯPk+ս<';mjrukd5x+1S%HYdHC䏭{^鱲W9Q_#{ yl[ɐses{iWK'w~o~f  {^땏?u׿u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uw]|񯃒oxγMǚ[k|;zu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{GK߿=#w;޹I۽Z~}PO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ] AE>׺M͟Y/?3qMΟ#2[z&J8̭ XT5ƯU矯S̃T}3zif\3X]{ަ=zSp j߈.ˬv,jxxx@Ͽk^ztS˖OgO[?X{xMkj߫WzB2-Q9Wvuz5] J/״uQcIWx*({ajM*>Oj?[=~t|8惵>N㘕֕Ъ*B^2\1&Cxߌ.tt[ %V_Ye-5b)Wӯh"+8I/6]y.K  Ǝ,-^ޟ~Z7! "|ȡ!<@IOf6d=\E>}G^ǾxĆONΧ)}x4z :] سIQH ktS'O'{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~Cdc0(h*b2[ZXY.-͇u>|ֿ=aיo'Oem~`[ =tKc?ܷd'=s_2%X׾l/ڛ׭Pt志\q_ OlQ>U8(H [$޶}z#VQjONҗ.جvOבBVSNi䭉7߈{H_CYo4NK6'#iNn( 97{HF˳#nߘ=fR;Nj?Y:kM~+#CuկOvNӪի{nty~ ήq]k#y4yWX0ʹʯ")&o^:2ŭ5m*݁?plV-o{Z:Cq0ͫGMM,&V{{-[M"7˯h 卑yG_GU6x>&ch=N8u ѹO=6[iE~2uM'5fc(,q\Do'Kݿϼe''?%?g?k)o+^׋ߊ{I ]]/2 뻵б fF{rE.FTOH\cf #ؽ1chUn9 6q=z֓w\??q%gqb[:P;h fYy7 r-zׯP|'rMBIO{)fjEDvXױK:A[>A`uߘeJu67r~=ׯP3{bm+N2Ĺ khcZb ؉DAIk{^ pt[[HӮ8Ԩe*yۚ7IpC~b׿uZ_~u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^||%>9/:yю~{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺM .,2fMl-jZ\_~>,aޫXdiWS}hq^{_7/&}z]i1 0<xMzA_j|9=<}^` k{#pdI2V4 C.ZQa ״?ԭ7Fb{UqCpTpw⿯Z:2_SisGp@;u8oqǿx״OwM8v$H7_@`tY @y$ߌ.t:9o$;.4 ;:@)ԪߎA? ZAC>`nn=?sne@m];5can8C~7:A9%_06k1謎41;꽁mzuNY|j>3{u4@EaiE%Fsb״Y(Kxz#of4~ꡮhpGj>'^zrʗu}-U 7pU3pIGԏ{׭i=9>@%㧀 6zP7 \^ >)|ƪ%WDvz}f0VdŲ0$X2HK:AK_ fpWSUv9UJ54P4׿xQֺDV${Su#^8M 3>?25YT! x׸Ҫ9?֨: s˻td> v6O E$㏧zACI.'^z C]'mO_Gp>/97?BϽO^C}AW QK;tƈgypu*^I&ߏ}G^6t/m˜Y?fx;!dŀ,U>Qרzr8lW񝹹Ev -J+RLEw!GT_!:]ǕoK-*i/$1Ե62#YO׿uX^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺1?2w?ƾK:ί7iotc׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽t쭛oimƻ+d5 WfSu={+ft{rKS,bX9,j~@<@>֨: s?yYr?~8hzwbbtC}? ^.)͖gjcJf8dxٙ]MnX-n-V8GAS+-̒f.;V!pXy׭iO-QbYl'w$jXos~A \{ߊ{H?zUlgf9ա#yKE'% ܒOfu- iev[?Q~1AGJu/̌6 R$q&>N# yo=(Wg`K v< q}:փkC?>񡿇T\ ohn:-fNknSےG?^z rWcx:_g4 a;Xנּ6ߊ{I8)5we^L2qo{޴ZOAG~|~|;cM qݚQ }zA_ʌ]%UcѦ ,+2O^/}o ,$5׻#rJ -'RS%LL$JT*"NAo~`L"BV<5pU+YCߺSRxdhI}u^׺u{{^׺u{{^׺u{{^׺u{{^||%>9/:yю~{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~6dlf'J2%*G~OkۀtQf˒\f䋒nK}ߞyA_#:o\t]QԽ ӏ [zAOT˳2:[,b>?߈{H;%巓Wy#7˯iNMŰ'LxihB=>{@9q2*Џk r)ma Ox./ C9%AM݇f~A_mozu?O̺mMu_g? ;8XmV%?YGl=/ϭi=S1 )]WH, sZQ^z ɣu2|}fnKe cho?~"z'5^A :탸{Li_{ևϯi=?60A)Ǩ%Oow ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~qtIUՑ2:0G~!_֛_ع&'񍥀5 iOԎYy'p9-&dWe,8P7&>OZ%,KE9f- pBMZVzdg%җ"#sm]ؘq'o,i?gmܯh9IJ^|k7ӑ4~?)>?6=~󧶍ty>mC uh(P֖ڴAصwhL5iR+Ϲ'BCyo4ȤXY[1&E vGzc`7l<aL_a{7OSo5/H]߶>Q\WDzr3a?[Cm yuFL^q~>7 w(Io1IP?m_${WCd>U"v|Y>"u ܒD_[q{aSkaM [&|G/|:2cF8꼄#`vmSS\9j?䟾5xK^[9ܽ?'D./sna馤Җw jأR~=.>5EK[߱]ョkM/vn?#!jУ<#dfG3IDˏ{ }[ޛٹ.aOi!2t. AN,ǛqO;ɾt_'/ѺGt3[D^'kz3{[%oe[7n.u5S/ﻏx>7-_=?PI7ZW/B oyVB)WϤ&[L F|Awv&k_.A#o ?&H{ :wm'צ!>K}lOk1NܞݘU/; q(8'SF?^dkx)\lt 6{ 랓OWKڈ~눿e&l* A+g%e$檩s)>L0Al(~GᕿKdǦz]{u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gBw\޿-z?>O'{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~4e68<AL6 phǴw[v|4h6t{6> 6¨`?n~5,m_=nx[?x%z~G2em{ w ?/٫?+_ݜ0դN{fk1n?;td<)~asnMϧq{ _}k<{ȿSCoߦorT_ l`^ߺM؞W՞/a ͽAo_໹ji%Pjykޞ& ~_俓E;Uij^;߸fO;g'B ﺐk7{iZ?J34}ۘxymqI}>۸?C 5< ?OZ?͢O?'ˤC#3|EoLyn{qz/zm5ly?OOˣrr6Iz=OqK wƮlc%rEժH-or9 Oo$_מ^ZlwQz3|}uڧ1qsN*R>wp/tяnT)ѿ`aÁ;v[H?i/ˠ#e| e}GEKx9 ݗKLܹt}/^_/QЂhns #?zAd~4G$OCWTOO>td#C)s쿻uXP3݅z0}[>6'my2;'|aѥl]/\ȒZHr@G&f vۘB wW.!랒OUO$VO% O'{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tݒ3|/`PWB~XꕗilWE)*:W6ͮF?ȎEt} yޜgn9$<k(} ƧpvIJG^u+,Yװ.O샠3F}B~7tzna`?M×>{5t('ӳІul-v9-τySyn}MWӷV&IسիEo=f|H^A_O,ɮb; {'^յmaW56mw O$ϣ_/oស;_$<&ߊnE; za{j6:x:<#ybEsAڟ7?ο>6{tt_q:KfFjca7E!y% ^}=pF߼G2)5?'z@W$e#bLΉ'PTpUQ(W_lZ˚%}Wh_Aoғ+y'ںڼ+{Y)jk4s`lo6 ^w3?YOJOІʯwq?GH pUGQn˔7FxDC1_R U6({߱}[={=#4m~tg%j#=>HIzFq(P^drO}-AkK{Z,:t#{9q$?l\6 1V=m̏Z؏\IvUt}kZ=-#mn#)m2?׳kw5`ͿnYYhbН7Ir}]W-?{ ]Sm&)ŲF#S跽j^̎;)Ř0,#%W{ ^l/:B{;[I$=4:ZKD$1opEB1 OJR Oz̳B7UՁXp˭e'u^{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^y=t$2L "HP9#W!ZsٌV]C^/b/_Ўm z+83zG9:S,-?{ }a#hm'rk?^'E7/H; K=EXs2ZَGz$#v"_^EЎ~g.NHKqJ 0? vU|!} *Vm7%RT_x/y`H%>^%d-> !MӴ{2Q-mQߘFqE6s.}n^FnT)яLІ(-?ˠ%>gM6ȎF3by %RR /} cB+_g񧼃=?nI:rk&'kk"h]c@t1` kReiwb.=-{OOtd|ázݸ-ͰہnV.ݷWIҽ.v{MwOE_ tz#ptosa}S<H2=nBVw(~W"^w6 fYף$zu{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~$2}sI.oc IJK&SmarH=\Or}-R+)?z5w xiH/3fw g^t徤ե~)u,mNWЈ0B;_sȲ4y) nUeZ1b'7>94ᡅvcE.ZfXg$t{` e2&N#7U2vWe,ߞ1GW_s߻>Г旗Kq"*t!n{T-,Xe?=^oc2ko^}i\Ck/B;o׺SK v̵SGsJ-Q)mݿGcg\>c-yw#~_]m>\ _]SgϠ#l?z"-uIUC[yػ斌yƅOB;yˈ8Y?[IϠ'{z)w[MN=>ẂB-e>^,R?"j>v|V;ci y_'ttvp:)7^򡩐'ߎ%'o)}}.CVky7{l& \ZnP6?jW3gU6q6xvVWׅ'{ }AuOݲeӡ-ޏٛxKI?u^5pL-8=3 ^}ߗ4 KІ[+_7Q%3F%: =mPX੊}}~bf}Ѿicu zH>v{]v?CQ#!3ug`X}cxve:xJ0-or=o筰l?'PzZsG+;}[vCifJi (}CH?}71:Èg#5!bJ9xC#e'Z Fh#\(~G~b׶#TǮu~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gBw\޿-z?>O'{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺP K?릮j{b{kkYє0Ӱ=kIt:/w x9yɹ1׻K&Κ7+}߷yl[}߶VǢ=m9Ӝl);4N97+d7+pX1a"߱$卵+%{/9p4;d/'#K/Dc)abBE%.1@}\B?үt$l(?Z䁏2(0(ʔa f` _&7KWW`-.mkcOe#{oOjZD+8ʝ_ʢ'n UAl\4b\\s5wZFOKh>,ѿk"oe(P]eI[^Ep?#7] \_`3mv0;|rsAZ,߷M5] m~~ =|;cG-:s_7|mߑS#9ζb$qRw8L|K7;=B+O~/ӼI?7Ɋw_btvNG=DɃE?yJ6&t_tImAKqE-FAOO|ljM.Q< )h_5/mⴺ#sf1:t$=qvRП$s OSйZϭS7וf^[qAwEYl .X]=~~]&ב6 4;e WmV^n!;hVB^i7,n/4'F m}b/f:{g 2 OW7 "B,-ϰ~mbxzZs'n jC{TJWUA-uz>lpӇs2SAvooč¡r_d7 mr_ 9?O/ٻD%Vpl(=>ؐmp] ;:mzZ}}jZD+8ʝo΢^ MK_%^gbX}` vk:,kMt&~B6$of(P]cI;f@?4&p[Xc2~B|r̓AY߷M?KkV]IK~9kImߐ;% fuk+7:AL~Z@<\Nx̰|KWϡ?dz~=u]?~xaY3WP 03ĄA}/>DIܶTpJ"B[o]XnQ~R3[T51Mv>x GrJA6>~كDZgӡ5ޟ˚xw6R?I _˿<{㒸|}#Oa Ϻg zBOi7yB;O/o%ߐ]y?_*pnQK;Pu@ƫ TV {7+mO8nd_aOiЖݟksݟ&3%d=^ gzױ𦜰9}KIYFOa+A}v>BkNfa^_L􆒦Iʰ6a=*G0?} :LΏLT}+QRj_g4oB h#_HYQ=S{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tٓp}g>NN=O}`GJ-]F*h#1[i|Zl̛ },մN}/}s5ܹ{lǢ= -9l);}'vAU!;,W|rYA~Ƙ3Lx׿we7VnZ@QxdOˡEXA73KWu2+98Xz4J7ae,%Iԟ`˿6#4Z3В1UY:#7V_y'c3w:S!ϡ=+^]^WiP/1d }WNnPEbzOB3JS^}q\|[ВoEj;1,Oא'Nej5nbq"'x}~xF>ʳIycks)MkV暷g)-.Hd_YG =wё"$1bh [zGonv|Lx}Fg:t';9W]D3t/|W=4bBS"5Ζ==Gn]ܠ[x~} m9Kn$'x3Xi~3a֟1sB(6ix[ԩ} m/9z"?uMBYJ[GEI6RO^tz[mGH#]Z׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uŕ]YUсVVSʬ >GT`~.{6/6If'fϪaJֿ6+m`n=YG2J9φ7 b, cla%'v MN~%wصN!εQgv4~bq5?c |_Zrgl5 v%MSEqTrmw<obQܢTˡE3ޛADdq _,z r3Ij,Gcm)c6nd =@@NoܧثEեW$γ^zwjZD+8?N \S =A7d2;9J>p_jd{g%#Ki3;gKأ+0~Ig(㱴yްd' ύcT~/G#2vZg3K_B__rO=0<;ۯ2q?l3?ra$s5u;}! y0uņXGO} ]EE'z8 3?6#.;?{eM_ Co)_.-8 qpIiКylی頁KO.+O՘,I[-Ӹ+1{_=4ڣY3О;MX?楝bIGAnc|̕;oL፴|']RdqV}݇mq˗-O(V@#ОOgWbJ~}!6F=}هSWVgy`g7]"4AOzZ{JOWxt1, ="yMC{_{7+i >)_ӡ=譕S\c/Qjt?A7x禭 OZt—RѿK+Xm#T "r׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uA\x (z4 &c뭋57;&gpo}WOWis^>-2Wև>d-`yS:à7~ÓҥXg덫fj=4a d}ZL~֊4oЦݿtlna@];]_.I D06ۑ?it`[kAR.6xzm}2i}y$5'锓v6jd >+ >^-n+,G:Lmz߶=ԴWqx_ʝٯ51[^*݉! {W &t'%&k=?f0\O.?b+#6^-'DYέ-oHjnk}.D'#.vo3CK'5 ?gB{_ؠ{ye>V8<g O3gtL斊\tnqx|Tq\X -Cc}/I?{rPȣ2c{ KCu|Z_Ο>{jM.!-oo 8X>΂wXQvG][YlC}6яʱyevxI8>}/k+p)&*͈Rn2M-QW#Q ` ǧ1ω_ʽ l0ي*%: 3}[d}#ܘ-ջ05^Sn n<ہF M{^1^**s=6RS:uDv Dub=nv)|7sК ]v$\~$u+h:cԤ3›NN>zPbd H#mGǯ{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uzx*zz!U+,ƓC"r$q̆9T2 AAVGx6|~A}4i"DO ;U/x#4t6?s0~;;?W(+?6zh.漶RKY]?6pj9ZM\J5( ,Ai}Ť*WТ]K: 2~Sa%ûcIE;7L>kp0UCn㧰MV73N%,ndQ"eδSinbۉ>MwgJ*t6FF;}`&),͙Fl$H[v y/pN\S J|ASgo<;_:{m-Tʑav!?`'oIT)),nУuZ(:Wu~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tm mõxk X5Iſ/Mu-!أ>{線\ӑ:GA&g='3+~ّXODH ^{;--wS_Ajb YFOƟ!_G\ @ Rěr{l1'S!# ܾ_.?朷Pՙв 5[O7^ _[VI$m[,X>o 'TiXf.maqi_ԌGn뚵b)OR?}:YSeQ؟ئ9*-w@wv)-n.| YݼrmY1Mn>ǰVujr|K?YW^V~O|V"ɼ:IJC:v.S3b_R ?ğ`opvN_ZƵ*}DSЦǛCsxxwv_AEL̕MR3 EnRC"hЊ?P*CQQJ/Dnm0G)h=fǶ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^nOӚL+&'CK_NO0իǴVVw7.0#mĵoTbA^kǽ!ptONg&!ϖ-m3;_{Wڷ\'K W?mZ"A^~Aa^\( t|x9-$:|ٔ7>)vM#'Eۨ+uv^,I?*t-+v~2Wg?¬`nab0lFn`ﹷ7@}[Zwr$ lZn\[K_u(&o;aw`{nM$~GӸ5U/i}@OZ?] ܨHv[tqя!䓶n3#{S̓[m]Ct@IK~) O)o|l J?cX%6Lq?V?c,n)OB/o-IO[^RmKXC[0^loOp$?_`{߸g6{eNmaPUg Br-obOOfucuѸhof[;/r%']ckݞ|"Gz ~]`!]P'?HQז >@Z +W]VB ?X:{ĭ H 9PI =i8֓ODSЪ˜;rz-;!6X&HY#WxpVD Tis+CQ=O0?u4ҋQ,n?۩>hCGR>GWh_HA7^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺM<>'5Nh8vZ\5}9'`W_iobI]U`GO\ڿk#FިO[C6螜NUϖ-Vꨝ ͵<޲XZAh zp{$Q@?.[ǝJ1g|ym('9M?!}Ofm7u]岃~B #к߿xsd#(*w Cwfײѷ+|,݅s#}?E;"kҾq9Uޛ[Ov8A.g1|oc>T9&6wffh7 ]I? } r^p!cm]S]xh/,6Ҹ:䑃Hn 3i;?w+Wji`Xit+ O4<35vwX)?lvJ堗&#'N\?7I[~ЮʒSw42ְ|y67@ #|hJ\7\86`{︇'ۮPIYt+Otiqm&J s?K'ISf޹ș|UM=ox"HT;&؂t+{-xBXKkvXB?޺~Xn 2{϶jD`}Vt;I$qвjmWp7ZuܝoػxҒ'9f%)VߝG#q>uԶځƷ:}H 칗w ݹZ\WuY KS &$&iEBi Gu%@ K(AG\0#~ GY=ת~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~0f܁WpyT5e,Bomu]7#XAOK=o:.%#t[joKWIUESuΆC'#MFH=o}p%gkvn-kB/t=۩[Bɐ- O@"/oMSl_uawSb=?BO?@鞟By*Ӷ?`IA\BS_ r.AH o`}O]"ο~sסe޿Pַ?V1_ S;:6Ok @m_cn%f#@@@ϰ5 )ٻn1i~Ю1cm A.LHTMMKINKA-yK>8I6?lxB?pϵ?Ƀ=1Ss)bI}ܗ*Rˏrq#?xۥֹĵ?ϡmsoIv_nuЦǑ}/ ,nP~9вU{j-X^_K^565)m[;w*Qegi5GݵK\m?iz=?ߡO?rf5q>{v$MW?Wo9h(䅇-mo-nhōO GYg_ e}eouo: rAypyl,hp6=jsݽ$Bt,]VN?r'qevЕt"Byu04w-+=I7*A{l8={޺^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^LXe`YXX}GaPz$q龡,{p;3lef?Vkd My7٬nƴnۣ.m歶;zp&J}\tg ?ܒyrz7WVhv7/>w-͂mac_[wWƟˇ +O)#vf5[;UTS }@Ԧ1Q^%y#t,{fFg[[F!W?tf?wŚy1[*|pP F Y;<`]#ܭO{r؏-{նp<[ʇ\F>]ٟ䗳 qX?6VʼS:{-<[T T[eޒv y}|+b$%ͧ_~l\*s?V 2J@O1[|[y F= ,~ܻ s!'ߖؤt%c7Lsfg0t?,{j [m#Gq0oƶAl~ޅ_{jM.`-m.?lw,O:?/Nfƣ=yZ%_)+2tL{nseQئH$[gZwv)mnt>kl8;[tk{n_w{6KY$6N?l(жjomW:W>\vFisubMqRsvbZ8mۗ! nMݭ8O:u2w+K𮠓,zH*D@$ yB~O:=XaUYHme:V\N{Z~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺI{=sT7l4} eNg(=/wMo :G@{?ŭɚMPIbmA_#rE='=n7\n,6F_cu>7Y.Efne*mƄip9ZxIQ`mK^EoXo"X?"|}負MI~m5~,.zs_&L?}{<`=IKԟd ?9.kO6W?R O%wv"Cs7&4RQK]?n?z̐O[``[ce7RM^K0m;[H~,mk=mS$h-Ks=~#[erzz풟G5>OP,aIp ,!?OUUp{-[d859 ]grq1?1p1~mHnۛlI};0ܕ87S }}4b]/^#]gbqm'+0 ~9vtw11S mzǐC }A75סm:rf$wK!2h]o6)$ua^7t AE$120e58CGRף EGbi0G̎#7u^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tוsi4eq{_ b:}sȊ0#חvo73)A!bݹi7At^z)-]oYkOMy)`{hؾ[\XZ?":Aa䷗|M'9cUjѐůjIvF݃}aJk??.6x_y@Ն/Ylv/6?&^)-ι$#Z+nrbvu|ܖ#7 9.{hHAJ'RvqBIM=7^ }}H}#7ۡm+a7Q.IGHUMiwUI_JYZeގ*o4+z,%)_:}mrQb+ &ofV/JgaD,!d>8WD R:'l6ɐ1uϡu۩/mQا*8 {Srzvf9\`O{r~,M,!WvW!оG5~Li8Dˠ{;_.i#ӱOHجiڷdis(?= }qdG?>Iwn`oRXox(ꨡ{*[u7 P<泸F yߒwLmՅӼc/(*T2%X}RXB#2K;0^+CQ= $S V)QO *8ne HAY}zu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺM\.;OyN31I}_kS*="ot]c:Qmwuf-z?H=Yߌ7;M&>:嫮==qVj/2W}/tb-s1Maj_ PAem p% t flWDAfݨIoFP`m>ky˰5A{Gmkv:GۻRI"=IڛnHT˝ YDG8-ִZ>")aav<;wz 䪦xj@Ri7!$ HiЍ\+D)1 :?>du>׊h'^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tɚ;oqƐEqf4H] ]uO t}%$,w O$ ڤt g&_ P3zbJMEXmK6J:ٯi7"Zvfr$j>{Sw08/NWWt f;{n)̰|[G.|O*r+<~~}YItnь)y3%?'o/~խo6ۑyßKk ~ܐV-.. 9Y70by?Y)Աۛ dpbĦ'A5N_y_eh`c-et f~ 6R{-!UQ6ƠN;ޝy}n֝ lm[~xHOIf.ޛcY'zmôw4irt-(sN vJqxϡt;exxW_#Ohh5t4ѫ=5hjzoKJ? 2! {l8B~׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺHYz:dnOj?Lc<Y?*uZ]׏m utsc\eŽ8xSI> :?q` X}܋[nJI=crR%x6۟n"?ou}/0d~KK֛[ri۽ttչ:t_p}VekwoY'1'CdkV)mm[\m7M?ޝ׷&u"8w>PS3CQ T?~]s'̃kMgr_|s ۮ0̌8G$o~P[b3ޕbSn?{5ve-Էp~Ά6_}@/E!1]Go_Ϡ[9ƛY}9sƨ<B7Oh˾X|q<|8)OCW&IO[5>M5+G@K|<Mڑ ;iZ=E~ sڥPܨn] Q%յO_^Xo}mx!Œ2(vFc=rX$RUA7Nuim.w.PBgf>k[Ob"O}s2wFڣ+CF ǙNpGt>\,~ÓD-~URDeʊҢA&O׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u٠Fb:wQB1mJFIFBExifMM*bj(1r2i`'`'Adobe Photoshop CS3 Macintosh2009:06:08 14:29:58&      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                       ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  (. HHJFIFHH Adobe_CMAdobed            *" ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?k6z{,o\>]co\7_zJtȣ+9}*{r(%E_o$?qGWn1q $"b_Qی\BI)ȣ+9}J{r(%E_o$?qGWn1q $"b_Qی\BI)ȣ+9}J~7wԮK^=uXW%MWm$E I$RI$I%)$4r@IKWoZoS4Epx%.@8]BOXJbxmgAwJvlu8cK%s}cu\K,Xv?um]I)}L#k}Z3_ uo{H^*x:qw>R;Նv/?ԩ}I-Tl](e8J;?@o9Z?bRAN ~Yo8wJwզYs岒Jsk81mr+zEoSX+$zoNgť ?鶴}߀$I%)$IJI$S$Photoshop 3.08BIM8BIM%\/{gdպ8BIM com.apple.print.PageFormat.PMHorizontalRes com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMHorizontalRes 72 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMOrientation com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMOrientation 1 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMScaling com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMScaling 1 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalRes com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalRes 72 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalScaling com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalScaling 1 com.apple.print.ticket.stateFlag 0 com.apple.print.subTicket.paper_info_ticket PMPPDPaperCodeName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray PMPPDPaperCodeName Letter com.apple.print.ticket.stateFlag 0 PMTiogaPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray PMTiogaPaperName na-letter com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPageRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPaperRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPaperRect -18 -18 774 594 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMPaperName na-letter com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPageRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPaperRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPaperRect -18 -18 774 594 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.ppd.PMPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.ppd.PMPaperName US Letter com.apple.print.ticket.stateFlag 0 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.type com.apple.print.PaperInfoTicket com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.type com.apple.print.PageFormatTicket 8BIM8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@`K\ 8BIM8BIM+72x48_PNNL_Science_Poster_Template_06-08-09nullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM8BIM (*N JFIFHH Adobe_CMAdobed            *" ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?k6z{,o\>]co\7_zJtȣ+9}*{r(%E_o$?qGWn1q $"b_Qی\BI)ȣ+9}J{r(%E_o$?qGWn1q $"b_Qی\BI)ȣ+9}J~7wԮK^=uXW%MWm$E I$RI$I%)$4r@IKWoZoS4Epx%.@8]BOXJbxmgAwJvlu8cK%s}cu\K,Xv?um]I)}L#k}Z3_ uo{H^*x:qw>R;Նv/?ԩ}I-Tl](e8J;?@o9Z?bRAN ~Yo8wJwզYs岒Jsk81mr+zEoSX+$zoNgť ?鶴}߀$I%)$IJI$S8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlong;=FStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslong;=LCntlong8BIMRoll8BIMmfri8BIMhttp://ns.adobe.com/xap/1.0/ Adobed@     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^_y=k%~KF}Ō$S?%up.|Zr`/{#;&3b~r4l^׺386\=<-e9&7u5 ]H~x^ ce*L<hIH`YChႚi\r(6=u>: $Ps#ip9!c8 1=tݒE#8fI#) 1?'U{=쨝kٮӻ*$x ~8<RO䟠_TzEȽS;2~t=;%YC/ϐ쬪U`F+G>}zN|Nav;$_@U|Z%{zd$'ͭz־z.ȱG!|MQ=UzFO0sׯP<-̪>ٕAhvj,ts=zN_0Ďes߼DON/-\ 7TG H.=O^sR~4ѩgM]Ęj7mc=z֓Ӎ7}dZEj{xۘjӋ}O^:/ʥc? {QK)asc<$;޼eN#f! `6` oP mp_azu4𝯑[Ht0h4/~W? T zu_ɾw^0zNqUu'_}{GR?9ݨOca/t,nu+ Z_߼a״|@)߼o^8ۗJu*PcA" =>"N&iW̪ުo.4Dz>}Mpj?4׌}: ¦Q/&]=7A"M&`@!}=ue^',/ENt𜾮 wWln% 9&0>^3)A?~^Ӕ_XIf LJ8#wC)uCIzNt@|i"O_a:%|f K e.*pؑ66ޝ{H?]WؗxZ\:;Lg@nʲtNG~״?>Ss{oH bI/Pﮭ b,}nu?I=3~״|s_F.c߼f{@/;ߐ҆3 +u#?{F7^:hTwCM/mO씴1ҀO`_FR{{HM?5vӧ;pE#/WZ^+#?tx^:g}qHoDZL 6{Hx _9~ub<'e__kNuŘ0zq6ПmXy+#?ǿ˟}6?xzǿ˟}6?xz?DDnQLw'u$*,dFQMz׭h^(-o״]6U =` ʵ6?Cc+i^h׈oH?S}^ufx?pwe>?^: l,Xc`۰}Z͸I'n>ִ 0;{~dG^r[?X_xz#P'NskJW{2Ve*@?[: g׏~ׯi{o+;?^:4/Wٟv^=^u=?1;" ,ik4v?ՙ?##_˗7~ׯi{cr&_##L._޳׏^u*R.eeOI(fM^/#\Y+jde [#՟˯ {ַG^]]3ߵ^:5gBdz׿?_L;'~o״R+C|AѯϴiNg{L_=&/mר:6OA1oko^A׿D }[z ?z'@L_ׯPulx?b~޽zd/F8-߀xamU>TなׯPugǟ{K[z 3z^xE^o~޽zs @i7ko^A׿ |yWߵ^?><_MׯPunU/mר:7??*S{{gǟ{K[zߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uݏ?폿u$[{^돑J׺j)]@*?۟~`l=Uu骪׺ٌBV[R-·] G\^*q`ZBTD.4&=uk&W@gK׺q!U\Nj4r?qx<4~< V\RlMVc dw\)qODA?_~ҊZ*?]U*&P0RWߪ=zOUB*)>-|9#.Ρ=RC҂/?4gEZ1^X"㣌,/>}zNq+?~GY+}V&8 } _Qרzyww>_>]:oz֞z_+/}EMd'Ms*=>*+U?5,뢧tum$&"z-Ғ*$HE@Hjxɯ$rc^"z'x?W)^T4sU,6oI/eSiSQܽqo_VJs"z'EiTw&¶[kI,A| I%GǺYPMۡ䌆 jz}n,},{AG'I>1#_ToˑXjHvycs~}{IOw/=3jMOAkxzӤ?_i]?.0;a&~ӭ=}>A M x(>DZ٠S,k?uק82C7 ^ ʰwY"9d*J7N(?8`b9#l%]ʼn}:׸/״tO *\vHNoPqQ[PXA[Cu: ?*zIZd<'Nef7<u= eyI|~c/o.q W6m1zOw>0=2zpOzGHPllO߼fOTO(Rt_׌.t'TA݋vZ~،` AA {.t'qrpXr0&Jࢎ,{H?OōT+JT!`Dt z_i; [^tkZʿ%`@w$G @?[_߼GGNP'~5$j]Y-zN|}ZYVznyV] J6#\ ߪ}zNPJW[̚MJi:PE 8ꞷN ~f[.dX6)T0dEߪzNm=M*M<ɫDaJKi8cӤX|,P*_LSAim.$~L׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^v?>׺GՇq{XX'ߺXZ/,luTB?^fpķ^Bl׺⹬;FWWS=7a}{˒Wxs^u:V Q+\FGU'>׺Ҭ؛c/lMU }&Om7{{G^GI͐b)U#ɘJ4bWb?TzT?~MCUq?4"{F_,Au#ӊ[~ԣu ~eW v+zb"AϿj_Qz}CC]/6od#붟<{RC҂}ݿ`|FޢodEǽkO^CҢZ1+ķ$ :곪5soi״ _Ժg6UnE18W^"z'?fd {AZQV,=zޓ?Lc/ א{^qa:O^E6ͶRBkTkG:Ҟ4q22ؗQ6:Ғvu?b|^>M&97i'ʾ TlӒ>/ϯi=?A t纾8S?f֗7:ɅakZ{>M (ѴR5>oI)?z^zPQt{3O1-UHu7gΒߌ=:ގ_!#O:+#Pݱi޼o^GO mJk>gNJOt? MQA;=u<qvXSGӻrZ=_%Tkq {:~u+{b[}M?]~OJWno{u)(:FkGwZ2uMF͆@Λ7_1zJJOO4 )U'5Քjbjck]k@C'dLn?X@TuKX:~}o[:y|=~AkG{ntEݵ=F-m((6޼WGJjO_W{,f6(!*!j0{oHEI4a% q2Vw/tyImi yz֑҂feI)eV0/{UES?޼G}oHA-aO>_ SY;]j̆Q+!an-n=^A?]|GiK+齼bM?^t_=[#_ni O->} vjoר:SR/"Eҕ-Vn9_!mϽkoSרJ:_ h-K$S2Z&*hO+]b?ZׯPtM/QgH-7L #(~޽z7ǞhZz, M{.Ut*b@^[qǿT麏h֏zd!ZmYEEL.@=nmh-G#SZsM@`Bbixm׺{0Aq1`XFu{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uݏ?폿uQe{m< rDruH^;dХ)L=uF_X}UrʫߺYW'k警{N =u>'Q+tm}aIn2){3e~{%&ߙ׽fB\1BG={^?{-\(Ϧ;6$iEQzXP|Ji3ɊHb4 rDsj_QרzSR|\|>)ʿw;tbei*ߵ/=)iOϚ ?!06#)_f?*,miרzVQ+O%\3aI]:ʀU?i״U1c(B~z2@H'ܠ[aǽx״tkO_Gz;2+8oWpڸ"z'5/:b&nǏ"joK`1ꋪAq>^zVP!oUD x"&fu7*.!#5~:4ʗOÁoI?{׊.t|Gn/9 2cUx<f)ڽo^:RQ!o F+EeMȂ߰q{ܟW_i* &0svԢקo6nOox״tokӂ-hǹJ^MA޼GGJ )hn̯ )ɤUx״JC)4vNNRhk{[׭*?:#!A^DTo?]`**n4I'}[`57*kqU~x徧}SzAҞqCބ3GҝkLc0`O^OEq/1]g|1Gt{O^OGg뭋Afx>h_ %/:$r?T,Ub$"c)Mp|!Ep=C=t{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~wco~p.?`=uc9SN_4k{&[_S{yr* 96&J,ՒGGOQW! NNϿu{GyݱF&ö6Գq /=`k~,qrny#AE=>"O$4b=ׯq҇'ˬ 1NWѬ rDJZ=RCҶWZ MÛ!}gōd\a N&{ֵ=*o]dym Pҍ\Z&VRȸ=zK|c"wXbƖսO^L̚Iw/O _ ]77@}O^H?bAzLa{16tCP<{׊{IkB>S},hZ5Bqv~۔~Zx״4_OZ0 wv|ɦ=XSǽxJjOOʙw|}>56v>L OTt{\/zJNu)<ݕv=P6[Hzu'r8O1<uUamkj7״|Tq1GۆvN?0 e:T}u*i?9}ZG_m.Z ׸bPDUGSe߼c״tv5c)!»_/[F_oTi [,>7[:WQzBvwʸ}Ԑ*%эԏB?'߼fu=/#]c=o +m%^doh2lsT ~ή۞o޼WGK*h +1d${ɯ$=f^tNj(Ob!g*J}N<şߋ߼GzGJj_A)?H꙽(9l9y?oh~׭i^?{>8ޛ|U֛ny"$Oznӥυ҆7h9Xz޽zuMu4uO[cblmJA*xTcmP(v2$dRbh)H5?z>{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u߿u<}x_~c2ĿXwQ}uxd(ctOuk ɖ9u+1=u&:YV ECUQ)wg:QQa Ic{^GGw^JHv7FDHRIp?@x<^m0\OCI0(g'&HI =׭=ω'+RAIa~Xt5Bq&e7ޠ4ZׯP, SH{|K1@Y$~'ϿkO^O̗"UJ_(Zs^*u''ZUόxL>S_U >$Yr5/ϯi=+h<+z|zN('+bs6>S2u7ݒ2Kմ5 ِe+yknpzu'>+#L.ˍ I(]?|]]lXcz{mɏOTk`ܖ 8߼o^һ r'=Bl- D,:~oz^6+ M՘۫ D=Oz🟃~u[콹Mo64.tC_S ?;vƬ\X1[y MÖ}܇Plc-+#ut[T@0*W_%s.Hb͕GXE {׈oHYCV=ԓ2zt-(vq'hʘ*`0G¶)ꞽҦ!A<1A,DpƑ ,u1I_~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ]؟u@o{OSM ,j?۱7L1 gSsg4d7_I'9?6?=tEA^;?+qPIbB@^kn˝8L7^ŭF5>1y~t=8,V+Ɍt/iNW}G^kE>G>ο9LGo mkרz\c? ʟoOrW#؎R1!'n; ?Sp9i״d4-']#FxTCq͏6׈{IeAn7Uu'V&jMGX }-.9:ޓ~èy2'6^*u''@FvLbù;G+4z+G֦BTr4bx׌>O?Ap5%VZ=@9ޯ~^z_c9]'^>]mCi?yC5- {kCqG à_|O8w~ 5Crp4}u,?9R-kZc6_^⃏U aS{=?_Wxӯh}X'##49nćҖHmSSr9:G}oA?>w˕ 읯Jd(&ݣϿx״87p:YO. iыAiosϽx״ O[C9nd$仓:0~y[##[-m:);#4 fᅹ >}sxw1M>b _1jrLE*ZWzB7W J|BҺJOIu| <+ҵr@l=Szt~1br|ih:q//>zKTun$uet8h:'Y~ڙlBA>S:ZQ1((b #0F!U[ q~=u/ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ]>ǿu4'/,koUs{E.OJh_ߺ]&_'1deU ߺNT3l^7-7al^#'7E () Gs!p;Yboc~ĮS%61K~#ߪ=zB.7?lKIIeI\FŤlXP $j_Qz\̡QG ب_ؓOs҅ZQZׯP+/%w/ǧ%G}Z߼DOB?52j_n0Z39W"2'yDzOKlw:bu>cu.0Wq4w]0H>?BW^*u'>uWk7OƬ!?Q]=TW/i?W?N}_^z\Py~Xo]QvVfހV|e` x״xNrK=iG#koիqkoGB'ٲ2׋mq//c:]{GKjNO]% u_ k7Nc״t ;g~E}_cW؋am{nދŽoATo4~y[ݏu~;qێW޼fu#7/ U{w4Gdxr)G}~t!ܠUtG,|pl!JmحyW^:Z(ÏƩs6Oy}_rߞ9ϧ^##+h…?zm?}\_?Rk<{ֶ qN3oƪ'OtgX|7]{=z7A#:o޵ٔ67mDު}zK~ژ {qV '/Gy^C{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ]^B~׺TыQcѠV>׺ٜ:-k5=u":IR ҡ݂ޡ ĒH׺Uci7c]{+UE-省oߪ:B6',S.SЩ 5Rr48CЇ)(TQ|>% KBbpAJ?<ֵ=/q_'fJnԧ b1QpB f_A #ߵ^zq@e>2?^[:V+YpK(_{{׈oIuGZTuV|qa_ .Ƀ?ǁ:Џ@;rMnہ,J;~VcbqRpl@[n./mx״O[y|xƂ9{'7c`xn>?.eB+R;`rd[pR\}9zuxNz[1&[ha*2LCn Ž|XNgTǤ~Suq[/ k\vǤn^1>} OĨGo6=ؔ>*jNm`ف=o^:]*2 fOh Ղ8XwtDapC]VzGB#.fMWVRdM_i4ɿmcVX[{3ɕ3/6 ϽxXc1,/NJ'4V7lӓʏ ^:a6FԒO}u]20&JO^Df߄HSUPT,{u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uݯQ ߺQ䭢],_Ң$añ*\kWR/F'N4z2)MCYm*thq޺K_Vpn挋#"CY(i`A~ ؿ/3a[?E%ZpK2u35Ff֥n7x|i/5v& ZMWHW VZׯPt&b?i~,n:]Bf{pdpSqEo~zׯi=XseZ{`z.Tzd>$?!^3$׿X]%t *.n[z𞯘3+1`Wd{?:.>QmsmC׌{I@tb;pcrIF]f80z:1I|ɔ< mBjqȸ X>39]]a\Fesޥ{/I"^Й|K/-a}DNn̫'`,.<EμfzKwFVwnre͈u l8X^:1s4So _svofbM׊{HC'幍Zwhn ؓ;?-zޑЃXoьG7vdVّ9&97I:zCb>'mȖ+=/GuU zy n?Mר:q] ӝUuDŽ<@(K?}=׭t"b18ьc((C0N9 ]{~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^v'/{ 迩߿uI{!C Zxv׺|\hS '޺J n;nn|ޯl :SKOЕq~fьgJuVNjGT>CЙ1o/l_[Q&᧤P=CH#ul?ay?g#iCoP%G@bz֞z;.GIo4oEyh">r5'[z1ȻEn}k[R`K?_zSi= ؿOZ쯌TkkE=IvICk_^z_𝟐9S1oZv>06Jʼx}U|7jqƿXsaZ׭#⿗QCU\>o c)X_I?):֞zSaC񖶂2l_7]/)Z wMoOc?P~'^zJ lqa\9oW?I?_:ޓЧ|*Gzi}iU;%:/HQce_޼T' )9Ȯ)#+j(5oAx׌{ARq,pR7kA:9;_$ x. ~YMpL + krU2[kou>?':%qm_a$nE uX>7zB>3|Vwz_]zVWWx?[:p˯~1~;ޝ?zhfjOk^AЧo= i?Pu0F(]޵1zBv'bl|QٻS  (-{IU^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^v'/{ 迩߿uI{'ֶ?G\ )NX`!I]{+do={عeDyu6]C(7'{^V|O__caMϒ YlZn mZuO(1|B[l]zldVQ{9kkZz'W qRJ9Lz8{k cy >_!c'޼D}{IK$/1]~mG7X) @Y6.B߼TzOB# -o{.NPy״W'kmAO#O'gÃmY64t8' oGB'uVƣuCWu#SlB u ֆX"?']{׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uݯ-/߿uIBm.O3s;Ͽu[KTȔ-dGj$'#Jpŏ}{'{3p]ݧ2{.k/{G^\|: O%1!gH5qZu?`9E0"L.qNu(ִ= 82|sD;\^OEHz׭= oWrv6z5[-_\{X8,~kN,=1괶c5Qvv~t_Ψn%< H~}oAPt{r_=mRFϚd_MK9CW->6׌=:l_'N{&?\IapU)_|'_6'~swX_W1zB+nn_{߫fuc=6o^+u#S?F#GuNܺtsvy4鿓>^nmo k^t'?|V5ls䟩GzGB wہW㵐ĺf 휤'ko^Aзn~v3G[7ZׯPt*b.& ^}8]9y>Sz׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^< <׺%],"T?Gn{^*1.c`lV*yXV6'ߺJ ^#7!p;{r؛y/pO1'ߺB o=!_z?+<CЫ_;sz|>?v,gꖇOV_z֞zs }U~.ݷbƥxd!P`}O^)ahڎ{pR<`I@x:\x?'xGƝ3h5X ֎&?W״ /'[?&~y !Q~{ xӭ\qۃ=tA )k_<-״t):}Nw'.̨ Ș|OZÍB3>*徿su O%>GG=ۛ >7˭ /o~7I?6s{?l[z_i x :|?ev[7F?s˗U׭ xOm?Fe9y}YJ~O$޵ _Sz,Pzcu ?cCz/ J_* E޺N׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u_uJhE娂!d4؏~E\%جy<| YO+ ^GFmn\c}6Q?uOU[]؞ ˭YLxU_3zt|?u>Qs`zjykO^CпP_̇8$q5&Ø Ji7L&ߟzׯi= Oer̂jtFv5/x˟ N/?=2k46g6`i3]*c۴g#Gx״l'CYxPK3zMBO=C/e0oGB'+ƿNm #W:_5m$7<1:_ߌʃr5]WsnlJll>7o@T #/{nM,_jhK@״/W[؄Q7AVKZ}]\ǂx@j^##O tGPO" +&o U\㞬 ~~׭t3a> 8?$dW2I6N nh(jmk:BT1mǧ~(Z-wvVٵ:ִOB%1AS}}Õۋx^R'|TzOC%Iky!ޝ_B>/ϯi= ON}T2k(mp]dd1xӭ`qi_1rԩSܵ6c6^7:0ԥ -a!ŀ>7^: ?G,=ˤ(oݧI,Yxe<6ǽx N\uQUٝppCFO⿯^:ʣv9h~%u=LKq-rUW^#|hF0_9c% )4U37sZ,'Wu뭉v;)}?A p8޺^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~w{ `^׺|TlL9zerB?t@%J Rf'auGXqЫ^݌ rȫ5zCqcZGO?~|no(n![޵OC& F1¨38{꤂py,L޼DOB1 ٽESz={׊oId{cֈ7?pJQ:hA? 6޼o^ɃGD;IR6| $0x6 Fo^_xWm:@ %_tۏz_ x0 0'[]]$`,n@@>s^##o.?[_O?ΛWm7xi޵t 8?vǏ}-Dfʝ@Ǒoz޽zk!lN6O>:O Tʫz}O׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~y^Xո{9X{B_=]<6=uʞ:9ҶI⡽d7Lq҇,{YkoF =:%H{ qt= o_6w>dw^ށůj74Qj_Qר}:cQ~*xqq}MGԙ5"a_=zB 1l 뮲 j}8 Z Eh27ǿx/'xGvgͺ}+"6 ;n=5?/_~}{A`ڨ+Yט$kow&y[-cP޼a:ގ,7'hG|d>A:jO1z]{GC6&.'mR>RlK04T)׌.t.࿐26Gm*a;xDXXnIAGn=~t2?h1|a[] $`,YYʨ@=^t2mCj_hlT a`DZ}[Ǿ?=wo.٘}v=׭t*QZZ JZdpEMqoLPQA]{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u߿u˺ ]Lk}o~Bl%Lrͣ5Co{=b2yX>s?)!|X_7- xPL?{÷3jj@J6#;:K\]/rIRרz_˗x "'iƺ&_h<CV62,!APK;shb oho=z˷ϜS5Fkw6I^ޡ`OxzOCf XE$yFneW.?[ތ:ՄV71$ oݦ}O/jX׍}oGC|~(w_Ⱦ "(zlc5l^ycFc:ށɅ@O%R{VxOȻ?B?^:0_coWf֨ܝ2)=3_x?ַ>e~t1mvä%, mWdme+GCݫ66 ApU'ϯPt26x08<> i1XشѢ ǭ{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u߿us$}K׿u%[Ai,5=tfܻBt-@zy?u}c6Dk`²͍̖ ,lXO`?޵/[e-o]ğMMcѺH=Zz' cA6GC^† ${o!?x>u/9m/K7ZxyULؚ7a zWi= N~Tz~Lu3qv{D?dJP{׌=:ގ/'| =KX~c}u {nS#7 W̟Ym$`nڣ]VOYA_ށˁC_,7pŸgrSG'/Gx״/v[M/x}˽Gt ]9ʘ/{׈oHkX %7=2,*\06koSר:vD6MV[6^m0O@Qk~-U't  ]k 0cX{^^۟EohwϬ;7"ƇA޵5A(Ĥ|ڢ﫠eދ=?ȳ7?(pm}ODB?!zׯi= [s 9z[;P.g^Q6ګR5ڿ>[zp?𝯑UOwJ6;E7͇SoQzu Ţ60 XVX;# `]x.nw~0*zVpUcbZ#3zt3`?CF; #3;*r;xN*?%gq'^z69b9A=Mco/Er_|TzOCCgVa<`uG6YHj}:ݷ9;dF/t cn4 xރkۿtmk34"s5_]!״''0B.3$fD^+u#? Ou{dFNʗH357޼WGC^Yi2>#'ET\^v+2Zt;wOIw&ǤY|h"LxACS&6ISPCINJC{^_u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^_׺-e@>(r=uŸ!EXʔU0;BI4XߺBMXG~̤l߉^á >)'KHl̎_ͼ~nmu<}d#/ ߽;C;Z89o^"z'm!¿ŇAֹ{$:.KϽx״'sS(auȣB'Ȝ0ox:сnYz@AO(ֳn,o _oGC~|\DȽ*^KnCDr@$F_:ޑ۷º>Om+mCq9-ϮQ^+# AM6=072oϟ^:6?{IcoJ !s`Go9 gֶ=nou\=Lj{jా28?{O[K_~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^_ik) f(w#ߺXղT58V<ʱ6ĞߺB-mm݇]_6?"5XG^s|չ .'/ +g6nA;oWi}Z>CṄp,R4A/mڝK-h3UUK'[z6 s6XnJ/s$A 퍹X{_V޼UOCx$k:weom"ɓë[P_=oAtqiO [pHM0%x,s3|c:M B#4Zn>۔SXYC_[޼fzGCE=ػ̩NURmjB޼WGCM.ICC뤄r7qcK^z#n5|Gl[*q3tվ^1f#YMר:0{Sk툼om6:txpx|v&-: {[ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u߿uI41e8P{kŻ%C+CW#b=tkFK'uy7 qpRL= AWTuϚۜD?#jCC=wTnK*pha#|zԾ:7BG-',Ln+3ƣp1uׯi=k0, 7e#v]4@LyC7xL'{[E X$ywȣ"|a]kC=N5 XuN->L^+A[YM2^7˯hu۟I}3rʺKv_,׺vVMFVlOIv\-3Զ1cUZq=nm,'Ė.eȹWQAhȫ5fo/xӭu?NtmGw |G\m"ޡV2ηjf׌}:ށ_Aw1-y1_,[*ǯi/+lԱ]վ;Cu ԴE?a ⿯^:6/5b{GzW9zȈ4uٚ:%[zAр}_{7뽋| {K Oz?ڸ V6r~tSG,?${}nm(9%ŘB&]]K C-%^u dA>Fpc$&+7zSi=w.\feۛK|_90(/N=81}kݿԉ>w5ьB]#7˯hzۿ𞟈87jS` > ?p>fo :ޑ?^lݝ2oO)Cѧkq^+#m+_$l_Ğ+ir`R#w]o:0oƍc;CFc6۝Ky A֦I\׺l\R,Φ w[BFO{;{cw<濺a%͆XPܐު:C΍co Ȗ7 3KnOzԣuXvnn22Ko4_|DOCA?:hg7] dU '6ԑ9Σ}N=mNpUHmvVnmǫL ?zӭzۿ𜾵hwydm8bLۧ?O[[}|^:🿃f?}ȹnb 7 uR~HT}~t>mExs;7s[~f8)=^t=_?f ~u`nTnZz~uj^Aш]9[36UCc.-?=ׯPt#[׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺>ͽu)5/sd`ߺN̶U<.s/ap\BWȡ7X;7Evoa|ZÃsl`IhauIcxݕ͙XGTm7C~Mv U%!o=z/\G.wu|tjLo񟭌p{l~AQxOCQS~V 6֛O7dYsYXnxAm_zuoo/}Qo,[_f=] 4ݽ>{GC@q&6e@o"\h㔃r#,~}nt?G~~x Qwin13}4>?[:0[W +äSUԛ'/]Q`34uIs]l|Fm^Ћ6ګ5{_ 4V=~׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{@{WK6<yV?^u-nML^;'x@i dB }ttofٱ}UصqV(jZt2%uC:uX"r-Jl2o_#FQ(o~8σ_#%\;06GtT#1P|, ͉^8$X^y^3Sbr3Z1aMCiHmsg9}t]xW^T>1'hcqj dZĎmuh!l jY%ѥAA:s t|+鏆8Uىbr-tM%l0\OߺB/Bf-ƣxPBeuN@7@=t"bV53av5Hؼ*VH@&ou׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺uI<1J>$X~wI4;Ejrl Đ,~-1}wٱ+ar*Lh6F1UxM{bU<#+BC`x =t|(_nm*!IF[wZEZioFn9~?&K{u8?4$]^zZ E\ߺB;uَޝ<},9ND5(U0$Bx^y_[1 \J9imfBjt"؃I/{?[g9Tewof8cc:q{/ ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~HH Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?\o.7_a}b_ ]ScNqq'W{ۮ /_[wIMq:ޗ8_}U/nH%0ouA%6?z_uW_X u\o.7_a}b_ ]ScNqq'W{ۮ /_[wIN?]Ǡ ??=?{Vo[e,c bR?~!O\?pCwHH9 cE?޷>uk=Vk` YsCێKKUunk7&yx{\~m};)Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$$|Photoshop 3.08BIM8BIM%\/{gdպ8BIM com.apple.print.PageFormat.PMHorizontalRes com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMHorizontalRes 72 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMOrientation com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMOrientation 1 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMScaling com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMScaling 1 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalRes com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalRes 72 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalScaling com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalScaling 1 com.apple.print.ticket.stateFlag 0 com.apple.print.subTicket.paper_info_ticket PMPPDPaperCodeName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray PMPPDPaperCodeName Letter com.apple.print.ticket.stateFlag 0 PMTiogaPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray PMTiogaPaperName na-letter com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPageRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPaperRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPaperRect -18 -18 774 594 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMPaperName na-letter com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPageRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPaperRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPaperRect -18 -18 774 594 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.ppd.PMPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.ppd.PMPaperName US Letter com.apple.print.ticket.stateFlag 0 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.type com.apple.print.PaperInfoTicket com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.type com.apple.print.PageFormatTicket 8BIM8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@`# 8BIM8BIMiX72-Inch_Poster_Footer_LeftXnullboundsObjcRct1Top longLeftlongBtomlongXRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongXRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM8BIM )! JFIFHH Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?\o.7_a}b_ ]ScNqq'W{ۮ /_[wIMq:ޗ8_}U/nH%0ouA%6?z_uW_X u\o.7_a}b_ ]ScNqq'W{ۮ /_[wIN?]Ǡ ??=?{Vo[e,c bR?~!O\?pCwHH9 cE?޷>uk=Vk` YsCێKKUunk7&yx{\~m};)Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlong;=FStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslong;=LCntlong8BIMRoll8BIMmfri8BIMhttp://ns.adobe.com/xap/1.0/ Adobed@X     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u)_[?w/맵3׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~{+v.ѻ?tN׿ҷn_O~ҟ=z?>7gWEV^A [ryٮ{kVݺui"u5+§׬vyn6hݧŊ9tkVZ ҕщHݓ?/aO:s?-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[׿7d{οu~\6-k_=}_:g?^rl?/F~n3W9oKoZF}zw_y_׿F?%}{#vOч?߿G[[m־'~_eޟ]u-Ѷm_^Hݓ?/aO:s?sgdn0W{u9{m[C%%\c'j??dܶFY!EMƚUUP/Br`%iK3SrQRrhuo}ͽI kHQlm *I&$rz='C{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺCO!יzvl.Żyg dRz:YvՀbUD*s-xՀ^d%H`%pJT@osWzd-%0 I`JA"xI>mybYzooZz~B]ܽ轱Cٽc79vܨ&Ȳb)#`_sr1l$vr2 t >G̼R/odpWZDc9,;0[1?|`r 4MBƝs^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV%vn{efݒ!6}v< O7ܧf;7TXAu9KpO>t=cދrAZ ??( ~Uk}]}m|(ľ:7hR sB9:_6}7s{LM |]B+ѶmUPRS|7={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺW7wvo?1m޵ۻ\M͒],2ԏws4q'gIFa/sXyGe٫f#ro[\\Hg]A\cUΌTTQm[o2{#u_ss庑k`4£0ϭn}3~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[%=ԝUՐ{3#{Pd@5%'}]`m7W[ ιӲrL~ۉ?n?WU?Nv;To/{!¶` l͛b "U5A s彉Zna'xI#lOY0<=ޏ,ְH߷JA_{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{GK߿=#w;޹I۽Z~}PO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u?g2&_frx>GQ岹1EygWH%,B$U{ݷDj$;HE݈TU@鋫ki/odXaY"" ,*,$ƾ9_o"_o,??h/{ϓ}s'2/G^\l VQc+1J~GWUc椮khki*ʍVX]Ze{C4LQԫ++AHB+.mdEWGRYX*XA#^eGjL *lDv6ܛUS!> uG@]B ^@g.;t2\r{G kiqpMHa“C@&D5-qsi`҂ȷ7]A*%u,"tes_/_o,_k[zMnΐ̓qoΚ}?:v,Uu(df)!dHٸPO?qf^bw U!LWPD Ĉ inK߯߱o7AwQV!#&'?^D $${A׸t4c~7|3}eh2X3v;'jrjh&HH>[?g-"h'E9#ۯ9dtu) ) z\ݝĖ{3#[+*eYX@ S\?x'; _o,3G}m?ȬTɉH5cz|WIT5&OT.#Z)r7\{Ii;2ۯ,I#m0. 2!"?q/umEC)dquH*2$u?ϓ}s_Lr4{_ސ׬;7[6+NwH7Dz<oDmkp1O8lگ6Ϩ}]&:?4ףZj]:*{?-s kx:|O^'m:TեZu~8bq9lWYfjy|JA &?Wyr8BMokضݮ.n'eHI$w!Uwf!UTb@NXZ}*A*^I$eDDQVwv!UTd ǡϓ}sCY?x?Y}Z:_k[z+'Da߿O/e7_֎G}mWb5.difr4-v>VHgTxE XYr_ 2IQЕdt`YX  XUtt`2XU 4';׽t]cٝ8߮7aɅZ6̦v!r&Ql.~7}-a?.rO8Sگ7?%>ZO5GLrgMeDcuݴL|eWU|X񋢖IQ&+h_SXs${ou (n&C>m 4(_ofKwOتj:W[ hQOS\?x'; _o,'\l#v_{,V'EUe2]Mqu U[__[S@ 1#I,0UPY{gذwX`I$nDwwhB*BqeVTDKfwv!UUVRY@$0A9ArA4={޺^Ы#7sl嶲 Rŵ:x{QUbe4ra)!DLl@{[t{Mocu4O6#сSB+#엯[Յzu=ݼR yRaP*:es_/4Y?x?Y}Z:AG}m zgH^faNۇi ƈDbS<oDmBcr ͦl^mhӯMz55ӭuSP̞/sq< >'\E?V~Z[NWI_޽{y !(i櫮ZZ**JpK4ҺGQgf W1YFM+DE,hf8I鹦u8՝݈UUPY*XW>O5dSxehG}mq7wh'Oq<><rI6쯼(wI;e?ǹ1Ix`pEfA:޺^׽u*'[ErY*\v7AM5e~C!]:PPӆY8K; {Qiiuum42F]؀3@5<[@7. 33U$$㡫ϓ}sGY?x?Y}Z:_k[zn|uY,.U9Duˏ>+a XI4_z/yU:Op? 2lnػsHG>F!&VE2PO6^ Vzt?2.e:;lh[ʰ^'u{ߺ^׽u~{ߺ^׽t[}v^`[~./g2{cci* }9sF}:-Vj"5b\*$E[ݧ =ĩu\xS?]O\cpT,o~z*Kz͑"ڎXy ݐKqGdB 6}Q%y yfhr閠0i%5*H)flzEWov-UnW葜5 oƩR=_}m Y%=HUĂ9n.%3105UvC!]UBC1#I,0TPYi=cowX`I$nDwwhB*BoqeVTDKfwv!UUVRY I A9)φ:u{{^mױS#&'v$-LCod\%[ESҭȻɷg,/8s 2K /P4lw0@TO9ԝ>{o2,O3bfh&c\,N*E$E7Yуꬼq#+!„y 0뗽u{'grv&.l^ho%=|ت;tSQ!$#`]0$e6Y6%ncimln#V(^Cub H r^\YXGqu.PՊBT|kg'2/GE_4{_ޑϨ{s(}=܍g~G{]ϵ(+ :,79$#Ҭְ'0}|jӲmKKtg:U @M(:8ٹgH[%3Be؅R>`={ߺ^v;#|}v[/q8JO)T--;AH,+p3; 6roy8K$Qgv!UTf In.-伻b%gwv 31 f$$ӡϓ}sEY?x?Y}Z:_k[z^:|mUO"䳻c}I&ޏ,ܫ<v^֎=Кb _`7\q4=׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tG9ݸ,N6DfFJ3F/پ]lbtk4r}2ɀ?Io ݬ'nbH\zѷcx aw*_>/?fqZ4HG"mq}ɵCusF}RDV!O_M KFF* wI:km>!2;0,P()9q !˾&1Kz}].@u)`=݆//R?;VkcVEcԣ $Xy^cFv$QvU.4j(z'Bǿkhy_:2TCwdTMJ|eQbr Sx>ns{vYv HMV(\9ܛڟ0Xk)2L< G;;)bA5VjZk-#3Dc?1{6h;.AEq!j7OS7w]=i)-ֿR>`uO?C?Zu/Nq&ˌ{ n ӢbUA!}s/^휨U$e4[E1ֹFdR9}G~x큡s/d8$j ===<CKKK T$  UP-1E,(D@U@ `0qI$FV,I$I$ԒNI'${q_:3;k$!nop=J̒ 1kF}~g9i/k#pNC22jV%E= 䫯pÕ-q%fqn\VhBŇU;?+z>2[)UZ;OںA6^гOxkiu/ _M /53~&v=O{YyhviE~j,zp{I6m[vV KGZiiV(=ObKonb Wx+O.imf'w6ld, \|롽{ߺV:'yvLb@T&#)W8Q:@Aw}W>eM0 Y."fcP{^yPrmx}Rӊ@`xɖ9W=lﭝs{{^N;AGovM ߏxz"B<=w9^ט쀧t?iU .^7hv jcs6=1->T>}p7R\]4gv ǀU=lM3ۤ>1̞b7nfn,htYzDM.)i:E'o~^ڏo}MK٪;r(hɠ`2aXe땟y.{UͽA6?Q :ԡF}:y;??p"u;ֳV!]srdy)(lHsnp=YYɫnn[kOikiw) x*mbR\ >qpݭrlw,6.-cl+$qƃSϸ[o6Eu'K+DKcRFnu7b]E$.=RD(ɏK6ٶ7sI-I20e`uV2Y]Cv ]V>2 Hs t)D;+<p0{ w)Y:09ҏg `v8qa3&>i0\;4v6gܯۏ5- \M4pt(×tmQI#DuTt7Y#Q}*}12;(eؔln=t:̲d=WܧA^Zwl bEu{a8jjsWۣ>+lZ8i}}VB#!5G{Z̓ o^fi{A4%dQ@=ƬI"An{{:Dlz{j;I_Epm|Ǣ ̅ih" t,$N۞Q?p[X A,P_V9RHܕ<-FɊdb:69S܌? zGt|t;Q[Yk"_'MgXv$jo =voy3v:ͳV)BYp)TiK(gTEّ]ru=+>lƄR2jaa&* qz Tt1닸C`?@\K0Q玶HϭmQ(y Rԛ'#W]-C?pdQU c7>ڗesl'o =bOx7O>sjR4HGJ |2~չw2yE/amhllE&1|o#}ә/Avҟˮ{ _]+A*^{{^׺u{.3D}IR*,h8ov'LE[BS6SSKSv񐄥F.ULXڦ):Is"K{Ixv-ҩkx##iIں|L6C//,{ncJ ! !LkY\T"K]K?Y-׻Ko콵EJL.Qh5$4hI(2&$>fbO-r*mrՔ6650P5;RWsbI=`fo\ɸ>ys'$7h EŠ*Jg}~5g0XMψɇ ^J,7rts KI_I!6Hqv]v;iԤJ$r!⮎ 0Y_^q=0d6dpeu!"=P?.Az]D!{1;lVKA"=55D ]%BRō-@ZvvIoܯݗ${q3@Icj:(c2Fhg^=yxKm˘6^hp7HQv F p#&@=`7E m>Z9L٤`-J>nѴ.'Rک؇oo}n[ӹoZ@N@I"I6 &>r[zme38ȤaRA֮** ?I,jrO]9$S~׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺O` Tr>_Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u\AH5x G[/m݅rγav! $u={e&6gʸ'?v~co/_ґWb֌ #hD_B.n >AeAsPZ7ݠ6v2i%LĿ咚2|{Cm40JL++]2n_\s %HSiidG?D'&Q2M6jU.#R`ˑʽ ,Njȿ綿兝zl]T( (4.Ñez=^__>v4"IՃ<#$J#׽t[dUhm7.ը8iyΙ4',<54_[5xRx#_mt}}ޣ9Sbdzz(gijH૥U)zu?F9Hܺ2!=G].3UnG |z펵ǡuBfe.˖hȒ k2մђ$RP@ٽ#yJܭ:\nmk )I#mמ{z6|dmQ=e gpxut7[NwnTpn}H|IF8L@GL4nOw=咊=0I3c*2qNVdkax_d~_s$NQc+ K-@"_e 2g7dy[BAuE R#!<(r uᠨ,⢬Jk/OW,yxóvbI7>Cw{;9VEs.o\>]u{K{y6x3D04:*h=[Arc[P}TlYJ3l yF[m{a+&d\{>Ϻ\7_$/l}zP5迭2>emؿ,>CmBspxɽV$*}˞s&Eesq#S= ھ_5j?ELkZ6SX?>Wg#O}٪3& 1Ϸvxj{vдuP1p"ȷ[! W}=;8]G[} VFYK)|"E!ґH~*`M!Gˣۡ>1l<XUd%$G ֪qظ% PsQv1ܿnj`*Q2xPp'~9ܫ]'mCRoA1ՆLf0~]Aj>B_$foZ*u_5-^/Xw}/O$j&[ԩH|3{Kmw U\„x򴒣ahcuN@>{skev/wu_^EGx0V^S)D8u3~{ߺ^Ւ)ݰf,^H?_d!0s}܇f*v[4Fԟt;{=qjM լzf#ڣg:X(hHvC,,JchL-n9#O#XTTp4"БQHA H (~b~AlOVt^דxl`Y ~HVWԕ z8%H-H$ϟ9Cݤ|B$JEg%"G`'*o4s6UzT$Dq'VHUFuWgojH*ew&k )jIJZe/V#n ~}Q<䍾v[TyV9]ݒʂ)Rls^iI;ŭ r]2Tyvz_[drSv'HoK ǖ -CFG#zcfys9>b}6 k.S+i8OX๽}ݤAC%oekUkŀV=߳UVIN+HQWB6c2)jU SK)9G\{ X,H))"iejie'wعP)7RRH EjGWAމΏt_#~:o} To]CQڭc/WM$4t8|عh/!;otvQ{luf@UF]5@kP s~pWM k^o+~ptR,G*DW]Va#=Yԣ>Fuٔ>]s^ӿWkm(=` }uE@o}lɵgx.̣B׮_}7?+kX>.eϬo鞩;v9kcq+$%6.b'NQ:zhT48XNHQͶmQ\&;dyj4,*F抋Ҹ$|!zC9!#ARK*?7@lViheb{*wNcsy%eRC08E,o -^ɷrŬԑkf BH$B [0Fe')yz[dgW8iq~XSa:g)h{/w^TN͹6iZ̖ cUFRTJE!!^Ur%5lsm;zkN^-v57߹0Y4:eKE$gMG552ۻ]ӶrYͻt9g:Te1Y*e8hC=6o޶7}e%D5W2B?7 ilܢh.-ݣ7dt%YXy ϵ#~ȢtfS!ޝjL\nXrDMQ ǐ}3vk"\e"x~]Qkd>^zl=*y*tzX%VV1ыyokaGu =X$6!V@X]Um7ح GOmR6cȤO7-@5IXZ}}ib9~;d$m Kvr''yS6]&--< @|IQօbڰ.KVbAv7!i¯I_T=Ŗ=KVxYwOP?-c{7ܶC[~c{'DevGՂ|oB-3$u S%}SO=EH [αI$1$e_y?kۙvݒ7ab*|WxfxD r`K@7Vd 4PU$EB*::E,"Yaq,R׳+~G>DqGAȮA?h |zՙ T1Esn]7/rᣗAvӠ?砡zʌ@m??{*B] [ʴY5KEB~oKqWez:\i冞xii(!zʺDtK,YP.}mm=Z)y$!UTI8RIΑV 31U@f'@p$G=˲wA.u6&D{o؅dڢt=<0}}޶hv=|dV6¿K £ BƊ˟}'ymd܈+N720s#gG~Uu#;m'ooVԥ3GƸ-Q %6xĚ40R^5:Fm:٣CWR( #J`# k˒pwr2SqD xfr 0f㪲λh`tF4H!N bE> 䊤܏&n yJ[`Uv uG˘&>[ZxKsOgk`O*= /=}躋5:}uCg0LgabKV!OM7!PIf߃S&r״\mj)V4IqͶV7-ۃ('Ñ䄴j>ZEl;Fxm,|fs Vts:fKY&sL,N9QJf9g9b;9RXi0{^7 #R߶ YvN`GEЏ&VWRUԆRAމo񚃰:~Amrh䚞?_QV*)2>yӻ0ɕm_}oh-jl J鬙TwI!R&$1ѧ,~Os_ qCw'+jp.|w?pZ|?K&5w%8,o#6:rOsay Y%̎VɾAQTH'MPgxE RռW%_nﺽr?wa;`en;iW]Ai7"lDo1ann84lV;-]E[Olg'<7~_߬_,uM zѮ]e"h2j6RjYu?{ܬ6{ 1 2*H*~`h /-NURE}A=9ژݜN fc3V41;f0i  9r}ӗ7 H8TU4 ts6]yd[ZFJc4QŘ2zJ]5:nja)XR-tۆI,Y|h}c[w|r^F[8#ŝ疄UI:L`@:w}{U%B$1*GAc= _Scx:K![4ttP5Mee]D$qE@Uakwwmak-0I# 3Up$--P,fbX$ӭ4[9;˴J/*my4ɧ5{Z BR=(~\U4OfD*KO"Ղ4N'grvRdRR5'$[==H{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~li7Nힺϱ*pS)$q;A)dLA.ڞ&>Z$oˮx}6O-QolG%}usϬ=׎L$fq;)֐?%/ؚM91A[}L !I}:?Kavi"~,u:|;ٿG@럏EyP{2u0Y*벡H}{kO=7Am!Ԑ 7s4ڗDTv5>a[7Ȇ6K\9pЊG'uiL; N")UȰ)ڮVc4gv< u#I#"wc䪠|-m/ncC$";y$<'9o1X}OUʳUGxDUPP,u lܾHkMW5#f O, X4F#$Uwy f1uVrҎ)3w;)~N?${hE {bn]D O>lGN?uٯlcunu46b6pv`잰کp͊J<М@ZܽJ P j '?a~HM˞9o=uOk;;-@$IQds#\P,ĕP ,HboȜ}|a{~PԯK)Dy֕qwt׾SsnSr5|F™da=o{fIs@ZIH8v_n۬v}hEmkCj@*xRrz2?7믗}TRl섒"Z¡cH I2YRscɍK95xR]G^c}߶*j V ֞}nEr׹vwCB/3NޛV( 3N.0yTa>}ۙykuM4F|0 |WkIS#ʊkGjVwi0d_2h0U\uBGvtOxETkWzЧh!4i%-D[r/t=)9O O+{_wGj"_ 3PUI%x^)4F[gy[сO Gz0dhn}득m[X۬uC5WIqGcSPTV, j>/ݯ(#O#TUzEm3zX5f0I3^G\Ejt:{uF?h ^޻&W.Sn lr?Cat?saeAAo5ͻS2$`LGzϹr߶oaQ4dxNJ:|=z>t(ٽ?7D#ÐFzNuRK?Y/q>wǦzrem b8}Kt ч\sn'КP#@'W`|/bM=.K2°S^9 m)ǏǺq&mBMUt9 2_Ƿ^B<|o7²T[%$SR45NAx#=_Y9_˃}ϥ*܀-}8\SAOI {k3{Ւ'aHao#L61ü‹;>S֐}xPZ7vʚa.[RJ<ջ2Î? Sߟb]ޟHRf {JW-]:n}o ~Ez|X$PBW:"HM*ę,@KN' :?jitoLw'I fLl.{ ~{]rKw¦pEboiW„q>yop96&_j5HC3'AF={&| qLOTJ f kf>ѬRbqo璷rܗZYGU|Y]pŪĕ m = PN/e\VzTjA= ̍ccZ~R#CP/teau_ZEpeu }ZkK-.L3#2#jmm"M7veb#q`*1=}}s9n[?гˣ~Wݎ̻vl`qJϽhN$B$hJ̋U ,90*iWv%8goaK͝*?`djJVLAηiX~y{h=co/#,-O݂SoRc`xڝ&8u_n/.ф"I(<5"ǭ}wDtAȆp!]7]s *Qn]L7&)zPm_~l6RhwPv4u)ZDHYHIvs︶=ve.j* .~(Zp=jW,Qh4hPiQ{1v.$}umbX=r^׽u~{ߺWWޥA\ٻR76Vf'U\a&K Gw̳s'0;S%?mXe.[PqH?Ͼ]~6宦T,e3H1Xf=Bkifwԑ kkj$=C3w6{̳s/5\^BDq`$Gy 3GWG$G.{G| eq%(fݼ5FOqBν{osxmЙ*uq[gpfGl}~ج'+JkigP$1 鵈$}Eea2A'C@[2顬X IL`XNV>)% Fn* n { ׽uwZ]}(bcov6#ONjݵmEA¨h ǿ_v6xyd]nF)@#DPz' |oR\ZH浫_U~}lK\,B>Ty?vg_6]2ڙʅ+u.W_ +__~We[lS]3Ӆ ~}qޭǻxXZ|ˣM_0]17lKvL Ϻ0c뤈6髧jH-_o-sKဖ8Z(%53ւKhtuۼA+, &pR6ITf_^zŬMQ\۸1), 2xAGWҿERq`;v,6顋1I3Ҿ41L:e۽χsPqY)G(|=Zzi_ lXjƚ4ؽ KЂ<(_=ӯۆ_5v>CDkgCŭ͵$?qO=5l$\InwPRK_c=彸.mиgamqS }H$nI߻~]xY0m-XUYJDE_##ܽnw3Gۯ%_#;y k>EEG+Ί$ZCb-#,$y+p$jdmR32z׽u~{ߺ^ҳalfoh7C-=^w ?8dwq$O(r8sFh@idT.jƀNYry;0; ir(fzׯTl >Ps z\m2uoQ%DzHzNZ;y[eM1T.$jJ1=q{ǚwc]44+ZQQx*EE=%732C4~2߾uϓ{wNe'}Y:mڲL639_ )WRY6{wn+`Odh~jtknv}vm3ZџGéAEuN Y0ZޯXړ^]k {+Hn#;~ d_#Wcbzl2'钟%kq߂Fau5Wc'VW_H5 >cuE (xpU$u?Sooh[(mKLs3QrC@4.2y/Q9wX.4]XuϾF0 b: 狰zc1sWLy c p=G?|wHԬW3Z&[W bumxƲA |Ԇvk1,m0D>.v_wu?[V'g5~5Ԃ-㹩E YJĽ7׻;_iP=Ӻ~Æ"J{w$ϸAkIIo4PZ"*X9Y:kPTܾJ7_uf36@ûjҲT:TrrCG^\>T2?ntK}&GȦ0hEqz9sU@*<~x#ϭlu~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~[WqCoޛI؝]Y54Z(A6$P/ C{˒'*?h$O~3(?{j}}"pLlssm=/n4 '^CUmT',O GCw22콘w@]dGwoٱ-nv}k=G뮠|J\nJˉ4=ۚPx&6 'ՇNWמ{m*ogUwZKWP yt!tKyבCpۺe :)5ȧI>]nb0T0bx ^? ҩJlv+H8u$0ƑAvemm;dk i Q8PUP:{6|YwGn.ŝ͘~gmz=W0n۳x$)QE׸^&6bJ\AVx 3>Kr&BA[HBU)&uuNCsi(TT5Ԛr?d4I\7Lɿ|ױi*sڅ>wcwEMZl zx7$2[gmWa4i|IgcqwZ&e'Xo?<y(gW go O^ސYt)Udˆ%by.}6]Rrʂ%$}m!?:ԯ7?g-V?*Qp)FW7t7EfM<{2QVn:ᖥ{=6JjkEmBWܻ ^1,A$1*鋽ڍN=7W?'M2qsй趫q/5ZW`n%RUXT uI~iu#YdhXZ<:Tqd15)?emp9"ueaXC~G=R[xn{;XVǪazdnqk7NfgzSKqCh\~zZ+rm%{V} X-C|Q΀h9WUƦCPn\oX$VWwhmUc67s#=4|- rU1 { uضuCkgE$cURO8}Ame"F>lϒYwn9*)JJ 〛lx+@ᡰ"'^۞7G(ܖ 6ꦕa=tnl_%7X-5u\7[S}G]Z͓hynyEl 4y?A[o^mͭʎ&!<:ﺮ [Bh/7 iZW{R"e\qqU3w>*->rf;mտ#5ҵVZR шtǓ9b!itMn;b,#6nɴvcm]cbv >V+j I} l>˻5'ke pDtA_2EI99{;%ܯ41v?..{g@v|C.W}4 )*hfa}Ǿ{o_ۗ73( V:aI fA))$s,D%m|_&eLڊꚪ\ B!U;KU5]}}Tr31<wwr^ݻI,]ffcRYKxI''=v($Aq**< :7NuV&;e[ (f:փ}"V'v i.y}Zd|rZ+_KT_$~,}?3lƣv@VQ%W[=aT#춀Y<0ǰ6>F[EXHME?~}_&1r2DUo+} !_Gnħ0leCtFD{V)E[3㋳?5STdq5k]YϕմN-$skn2;5/f4:KV9B/ms++_M[8iũ 0j@yc=mﶝr|}&_=5a+[~8{ yqR WG%@}ynkޗ#WR&y]XuSr)(iiQ=̣ȆqJ#Ùx[~{y|մ.[ yv=l伒cF-ի3ļ.n`Rm&M5fj:SZc}vFiRE[R]osWQOZJ| ;&(*m;i#.aO50z؇-{h#H)gqmS/osɼ\ڳAEauo{>Qxw?xdbƴڢPhHWO%vLm25)#=GGy9pP !B;Ld,L};c7ʅ^ w(Vj#"(GhbZ2~JjUz{iQWeqӘo(6%=<|NϷXIn5ZACUyfGJ +$@u[on`M7(/F& HD*=~{ߺ^׽uX⋥{y2i}z]&BlC}-{J5_U$Sa_PG\n~79882<*us^Ӭ<]?uNꞗem=QxqV5;w q_Iz**ہZ_:O{G [[8yw8jnTփsWۗ7NrZqi#+(ɤI$g;̾{{^-uʲ*.~޷%?:rV=o55?5y]_*b䵒_k'|}5!lW{ 6ux稚qyu$ NDS'ػZZ|'m;+C'wv= 88RXP$CE'? [m\ >slRiMit+|xtl=o1BbEAuMrܥ%Vdrx؝O4ϲwI5_:qc~Tq7cf/'Y^@*J:(Q ;KhDO$!׺g3dϾsR+(=׹$$Q6P?qJ^%7ג}F)_% g&M~n<OXֹΟt=oq] WIw\J?|MY3_>]t3k,<4Poe~Wk_xDS YK*}Шr>*rP:Tv=i,fYd:>[fw8]IkIX~i =m]r)7/g?wʓsi7xcu!#<}7}"4yRkA8oP ydS?>¾׽u~{ߺ^׽ueoaż~_ⳕ1G-7Yl PK1Z}#P#ȫ; z0d{£j[PAֵSPʂ1W>$1r44:UD}CPuoY|?eEvja$twm̨G7 MX5j8y? _DۣG`3yԏ1%S_.ϻG,̾5҇nY/XPZ?o)֧p$RI5={޺^׽u?S CK'k㒆-@rZV?ojFBk.h6쨴En%}XoֵgrZ9^#,jW^Wa=ڶE5Km$$0x#9;~te(T?f}e[Q)OUv[ =20C 9A{!6[wi.qsu%x2}*-M*Myyߤ=ݺ[&q_ O!|IOP+@:y_8?z:o֫Q Cz<{5(>㇅or5|ߺr96[xGGke# |w+m2-C}_zUW>{{^$3STRT4_M[CS@-u=ZMDШP{Ue,]5"E ^!8:JG_*=T_=[hu̥Ӿw;mbdvf֘+KGOCx_x!ܫ3s}2D4@bB gn=e-ly80^/#R4G[UmݍB" SL%TfUIs_Y$$er,,=''m^~ɻ( ygƷj(:O8sFμ}[q#acO=*+ҳuynp=ÞTcz7U!"J蠒w۹hwy6qI4kD5.ARhI8V׶_o[϶Fe"F < 'iq";}w}&u-Lnb UOHjYT *^y!縛\U2 2j!HbT3(Q#ꔍNGLyFŒ-Sd賿t榏!:'LaqC{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^m?d3R};GR}_hy'׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~;fZzgLfDiK+RhA1?@msW] v|]F5Xv>QڝlS G{R*T֜:ܳ{EkW3ɗaaQAhE9{Q>&ק[6s"/Fg~rFMl;h۫?۪L=C?%34wHz˯d0GFf7fHI'8B0U{3xc ŹGFblm5@ i"G\)UnlQF_VS\M:}!z}&7rA%,skU nn[S$ѹ5c >t=ؿܬad~Ђ *Yi.$/b}r/.TPU+C B8\ww/pu̳"SNhݔ2;>qG,})|_<ǎ랦I[QIk W/r6_veDU%GuE6{udx;P2%9+,z*'b?T s)CJTV%]TrĞs|ǁv;Yȱ_5=qż".;DI#dGDuݩk:=闫PAԆ>G#Yub2HE[rUmT; ˃s"@u]'h9_̜r5?ohLjEf:{16& ~+CIPR"S-4Kh>Vvvu[}k"("EQ䪠<772^]YYٍK;I$?w5hq5sORG^*̢ɤOU掉 ~V9Dۤwe{V5 4NVH3PH+͒ҮǸ]G1m*M_Yc=طzXo[J'SfE.S#KScۭȡo8qLqt3']lWx5 ċm}~] Kh8IYO 0`_}0|~}vfW_sƼTHU{ߗ?':A.MI{@, V#VCǮ}ӹszn*L@"ǔ3&HaI{^?]7';AO).wh䩷%?R?,<{o}9_; DE_Iүqoqwtm&')o')4[p|FqGgۢi/ NjS f#f*x}Nn 3NHKZ}K0d/voc=Y܏ΐ0 VtCuƚ 阡4ük 4mU>sKع.GسX) .l4;aownh5}0YF 3ܡS >D@q7og`n[/oe>r^,f1]rXQya&y[`MZC$*"B(2Bۇ1o6Ԟ%j|V<A'&Cpv>MHˑܕW]lbv 0b[waqVѥ6I$$0Ƒ'mͶ\BkH($h%E >Cp_]wnWeY1gcf$|8͇ZMm+Q4ҬBCUuY0i2Cmp^{~ox{K:22Tt"JAbK>|=mMvW~gkR8vaHbBسܖ?RO$}>,j|k{^׺u{vw_[V)>8+f"zhd' ~=w~jKIu3: S8PrA]j??'Չ{Z |Tz)wS,.K%+<ȿ6w,ۋy^ۮNp\{F խQǡeAUY-׽u~ 9^~>9 S`u7!{Aw2Yx .qXWpWHymyl }$,cDSp)ध(থ*zx"PC(#(pTB1E,T@@ q~IYYIfbI'$ԓ'ݘfJ 9 `1k(쳘7>[oyq4k m#M>}/ٶw,F&ǫF|fre*Ų/y6bI9BLuS;znw}u`\H; řO>oigikH$HewȞڲG7]uOX|u.eI馂fٽrWRM٫YH$,z tSFs ~e[{}nCyw@4mu9Uu# W¼] $ބ歳e~z"hH GMYo:Sfb*iWvB WM>.ou~mv1xU;uI]JA6[mnva6(qq3|K38Dc_y=^oۘ _oA}j73n{f^pY"vԢ%20?|Vo-{fME)xw^^F݄sc&}\O^-]-Pno OZI7 ?홧VS@>U斞od?}]}TgɌղvMwWcv* *c6׼#n;=&]1Go#Cus{{0m<dZo|={ߺ^׽u~{ߺW5c'xʦhj$NZ6i?GeH6o5D#Xuf =b}* Z~ʚ}?yT?3od2098疗hw&G7f>Lu8ɌZ91Pjcqu7S=ۯg63k WPF+p,« u<)&o^8- 2 SҺ!ԋe6;/mñ9Vʢߍ5B~{}[Tvh vʹH8Nϭž ? 8:znId:4i]os'QOZ2Mv#vZM kO],MoG5扭m@fVJ׉ȕ*{u}9w=n3j%J3ZUT|؎!kALDrV-_nhEtOK `z sm]{ܐB]՛io-ٹR->U$І?{ď+`FrEMͽȠ*ڰY#J}?0hXQqZ 履E';m.ܖuwљ޹auxq{H#,k Cz#yF_w0-O຾|ȭ C:a7X)8_cv%]ҩzMCZ[kml| Y4gK)c߫ݿ{5<-SX!8"HgWA9t_nMq^ei&/+R5{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uXC=/~܏#/z'_nPk}A={ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~rJʼldS,f~6uYcFj.fo8 >cUhbF@QUVA#veo~A6ݔA *)76yi[w2[b= KYqUG2S^$=Mۗ 2( _ !Ic4:|9ܛHn]9sQUdÈLcFShF ґ(ʠңb]I%cs?WEIw_W fM؟"RP8J_2Yas1a5?dsݲKt/es8'SHt I^}/*N×Tm v`m\`PRebZ96oMtwP:F $1\):@pOBZ=ӕkp7Ai+VcDxXvJ :!>˷kdvhXy {jD|8C ᇾkЖ^mR黽}j-j Zgⶑxv=җ Σ73-GXO3:N{{^ao䩾o^wY*lo}=XJ$2 ҃~z߼\]Ct*xLf& ED ׋g|͐C;/2 rmc_k+sABӀ.N4ޢRېKf6c2/ck÷G"iH[D;R2^ys/ 'm{55yU#QQzփH$`DY]#4i$F5;'n̨܀'ēEU8q'5~dw̿#EvdSIQb]בHbbmydAYwOղ[x_r?tcYOf3E@eNC]2 ~*w.ȁnG73)# bϢYX]YJ AqIj:?6~{yVPlZMkO<=Ĥ,?⦅va^gC7jbM,!rulclPiI.Z}4*܊|O)ѹja4 C,2I# 5sFJ+9B`n$Aqd [kP^o,}QEUUTI㌐VVM=K(b^HP}}ێLͥeidvi%2JA!A U\s6^ny& Ƥƪⴭ3O^|v̲Q&4{v\f VXc!Kk!n˝/4ZD|ڴ ӻKJAێK,9NҪ.d+ <FT3^,:-n,_qn,F_pK?U)־K-syI{ݷ;t7)kYdl#wb)Vf%'ZYm֐|b{tHE¤qDAUe(׺15I[ɪ~Җ6)R[JŅr6̻? [27*{˻έ*M;x Wy9h Yzn`|t}=].m;iYJDI*fXSWB[+^Io93r e`Tjb9:r77_r5Zsnځ.ȬHRZ74G>Z:J\}%-4t44RQĐSRRD! #*"oc AqTUUUET AyVv.K31$RI9$RNIo}vgxv]T{{E KOvx8FBFnp+h9N]J\n..@"k IVSbй0zmS#eF8`$Laֺ=B:˾gu"*]th??< ˟~XvJ[YWQOp`=b7cE7ZጟH$-kK3'Im@"FT<]<48DmאC;]<*ĂJ jܱtZ6ۑR1q%H5#+Λr!ᄑ& `D#kVh y;V?O2ea+~ctlu/"&C{Jo- ASscG#))^}nZۤaZ\>V T{]Cr;ޯSMV;-cYAQl޲;77s|VEE0OsKSCp5F'\p9fhdZ*HٕYw7W3_߼-ıY@rRӨ+3FDqXgIV{0O(JqTdr V?B |?ubN ~O ZC-OR_skO-~_M>%=kkM4Q&3tUCy`dk'H>jX*ZXe B,kǒ"e}6hEx5D3C2%] ) $O&S{qw+{nYM5Jdz7"ȥEԇ dE,lF1?]2j50_SNHFl3c`lDXǓm|UH~__ohko+mwK K/Tv덾z3ܫIuLȟ^?;g":r%5oM 6{m3]t n66{;,5ԩ:nQ|嘼Mhv%iQI :ɏWV^1Im{鷸JoH3G1錃,3TSTC=-]%DԕuPKYEWO!pE4n IXo|fn" B>`Ϯ++GT2e# Aq[j]Ͼ&+f썽ݻ98ݿC.G+]')F=STJR(`wܷ^˶]\6$.xPpYPYu6͋nxޮ#U啂"cUjh uw5}]{|`BUwʕ|hd|j'#H9$ݓ;+ 3-m%[q]LYUu:5,~,CsMd b M̋FVQ2{ʞ۪o!iv/M \)C"}iZX4+c+XEh}tnBOo@ފ}EEj wN(r8I7)"$a%R(|J٪.>;Yiw7͎pP?l Mme)xw_~weZ-g7܎ѮM6aƏ۾y(z%?[rYߵ'(%X+oMEDuXm`}y~s9x#v1? z{h=`aQ9xd8>tP~aMQ7[NX܉uʩ@FU >l鵆;C!nu?_b*P.kh,5;>[bӗw^n1!?2wڵR/Vʏ-oc΁iss FYD5=1Ih6M='- l}߽yyCj}cg3ƋO]m/iNHAzG'톦=Z;.s}m=hȀg 6}Rw>` W6rXěų-0mBzΨt3d!KC\0JWEr~3'w^ZlL$kta_r0,0iy8{Ytݕ3T IR*,h2OVSwot1װ3=#JſF%k(̤-jU]:[گ7=s7IZNWr@*сT|^BO/&rm6oWP4rQQ6V_??JMh5w]MW^ΛOxm 1!qKܴpE< UҤETD͖%%ܠ)RBM̚EcM_ʵ _|-yg{goEqW,Q٩8l`as\ Ke-IWS),2# &>Ѻ\HK#t`hC+9f=gʳ΋$r!ԒF2:5e 쿥=YԻCU҈Z[F%M6ǂ[Ɩ"?%9hv_yhj {t^*'%2*Ic7avlfnߖb'Jwu~ֻ[x~zͱU,BT%WṞRT4{9WhX-5_=)k5H,RM ),sH1+b@U$< 'mǷۗom].keu>z&srTs0?g,bjU8UO/usu-Mewe64>I3ۂ_Cm9/۫qs:wӆ6nXf$`Ϗ!OА;m9y;6n-e|CqxҼ V rCK{vE"ܣ31QcT>N`﫰ypmtUe6J2TY-En"j4ȦIE(Oo>r&qۣ1\@ZgGEuI;@B>^۹N~Ei +9 7%B2H 5$EEuIEԌ\YNFA<}Eё뢤hzk]ߍ=grwE.soV (jڹ#1Sܩg%ǵ#ĄDR\ z&bOh}KTҡ#QVF1mkcG]=~ҷ7eJh+fMR"1I ",3*;Yv#nKZxt |TRK4AQrx/}ZjԶ55wS\PfjI?y ' 84O~.z걻R~Β}uF7d@ȐP~vMPefK-Z[}Ce!YCQ-Ϲt@keQ1Q]XuCu~;,t>Ij; j MXfGJP-.GK>poveqAuǂ5ao[->TtO\Idhx@eGgAn?z:+Rhh;eM6EiL[g2AK+*-$%LJt^Gg9fߜGs;q^6E) 3F:=9On9Og]oaq *T?2Q7zmG_kCFDQdjle*Ӛie"JK1>^Z;y[fM1T.Hy3<ǿ<ӿ^soey9]ҵ(@Q}w;y VEg*(AAED5Rb2M" 出sw4<7׾>[WȫiHI\q#SW],kgMw7H3@X嘊j߅ZXgn]{}gsU d U!Um%%E= 8'JM$s9s;j B.8ԜqFz4E$Ӯr,v\[#S@ ZIX kBS;^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~m?z?*_t/G~^O>ף$zu{{^׺u{{^׺u{{^׺u{{^׺u!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[k,7̃=יM;C?QI7gصWXӹ/[46lĶVWh~ϳQ?ܞnLw++H7?/^ ׺s'[7E !jjY,u]U Y*lClRlg9& 5l7$vHnj+=u ȃM4oen+l}Q2Z~o cy-n{2YRyϳ^n=y4h𤑸d5kKo.EcHFThۏɺޏ 8\F/c3 :~'Hr=Q o_n|j43(u?z}CL;Fё=:{Yn6WlM۾v۹]˚] 0Qd#(yt 23s<{走I"ƥ$jw ,kZQ:8qmӗs{*C#J*(KwqvFM;q,Xjy > }t0\os8n7 Yy@OdhN|8Lq<:+ePbSJ#/#SK!iNzA{t}׽u~ZWCl|sJV:raV5mGLkm>KMxkX\ Ǭ`쟼Mvy G2 >#C[A{'\׺y308jK{YmeDҙwz%>%*J4u5T[{=M7ޫ8@#R7-* u)8zOO!\Ȃ5Yl]PtimMG*p TUETE UTX*|I$,'IzltGe3l.ϗ)No%=}*$ko{ؖ< sO2~r_Tu ġ9-oc:!睻QEM8m#+HG{ή{^\i|X>+^cHce7MClmKz_~t{lk85ԩjj8ne4&TaTC۟poғDm^+k:ϔ|W|}{ߺ^ $ VSڦTb];yeG^AYX"Ҵ7 *R AROӔU[ ~`d]v1OSwF#A1X^ AGLӚCjt=lbVmºI:ƪ)vǮ{cQ{{Ȼ*4aw2kφ<z6wϘ]gMރcW]Fٰ݅ TdV?b1kjEM+Z _%3P|M`}ԯm]n >e#uhHq_}{ߺEO5|xM4I*iu<[rE%6_B>R6h)e[܏p߿~EG;4#u{0iVXF@nUdd4֐ԣ YrMi !+ Sí8 K#<UQ4OSUP-EULj%n^Iݏ%'-q1,I$I'Ԛ^BFU@@P<\X(Z\WY2ҫ`O {TiZT~}ii4D*O:3BFꝣK =o= I/SibxgҡQUGsɛ'lVQ*3C4YrɩϒJEUZ~noyvb"}$ 5$,t/W6'Hg ڻ];"} c2tHldKX "08mwʋ ۞̬ ŭ*_[[er'ZC¢U" }tétG]^bytaɻَ̣eqn}H:f; io@+}s1\N:CEKۥiߥHVZen4 *(TT~@uqq-ėS՘OOS*,*f'oc@:hMIꮌXVRYX\2}SPzVτ@Ϝ쎯TX[z%\$O_ۓS5iEWW?{ ?W }[Dovn"gbhi&Q1 :()(rg e˻yU'y̮#x=lwE\UTYVOyįai10ԕ?j=Ėr?chgZÒBSұC?)+GREɠ{8Z֖[_txK>6|_QuU}^*˛ʬgTky!YuS%">On %pX+襦u^y@9Iq}.y\ٸz˕WjFbzkqG?'֙<LHNswn)gK!Zʒ!dfHcwϵǹ;©md[? (ϧXܾݻlSCu~U kj:WZ:U?778 f}1C 5 0a=߫ym٨6ocaCq)?GYQB~TYN4 }dr>ֲ~JzuKoK~0+۳wmmGٷzdLH}Ka^O+N:pOHEFw9iQ4[DH,qƊiDE^XUQB uff,ƤzR᱙sqT*8>:Zv{}I6r\G 4}ֶ\iʊ=YP?iDF{!նO%{]VnLCn{^n;٬HՉ:X-c$/X J:쿧zgImsq2muM;2}lɵkzṇ-?kOˮ`}?z{Pj,m`+g'X֯t Z lL{#&DٜWrT?3ASJ*߻wPX#boq_>:#l/jn7?0GꭽOY=Ճ,wGʬnJl *Ebyi2|>R )j<[-JCsu$+|(ʝWB"Rl߸zw]փtÉ~\1ep[L1n Jj"<bKlgh獩P7R HNV=;FEŻ&[ȞW)"%O F <7SmnU y_g >Cjn4TmlRdQ4MD`4l]>LƉ֒Ǫo:&BARU|H9xr!5W_ N w6{ qm{vm&dcd0{AE{1(U6t#vm;턛^k 嬢 8hVF"KvqnpڧxRHO~:(O/[%}O@mzir-Μ^#ML qkq ܛ]9{Sp 1én="Gr6i^aWAnIUf~E$MZ 9>?j}i*ls( L(G&G.G>x\ͻ^GyXEQ+*]jMWQ,&Zx3GFzI)\G.HDz N*V!TT*$O@f4&h |$u۝SӝcqzMj:G1d&~=1}o[[6wOZC,$g?z]ɺnvl_ıĿl3։U5x5.TLL䨮sW<,I8I-ԒLŜ$'~@,`(F? :7^?ʼ;!?^?!{WjnɥHyq *I D#^}нaѼY-B| ؜,c[1PxԀ)o챙7M\"Zx<  Ҳ(Iexj#y~}[~_zW홐lFؼYi0tOjyjsq/sK -qno#5gFDRy,n]}}{T۶m͞1E$PJQ䱲/ˠ Ҳ/9ؙhqCRڽwܗ+ |9nt=+pH oC߽P`و]龫l}Svbj6*'4!U9eOW4XUܥܟȖm  i +K!0w`1Zc394}0+ *#O54sNb5v_͒D5G`ʖNv %R JSi^^j2\wH~ҵj) U^(Yjcٝm3-}U>AQGuV%>$Вj]6޻?wv^pnՖ,i_]##["5q* oNwr4@dP8*Y6Ϳe۠6V(^(5$$1,ı'?d.׺4~he|jU,CQƄzN繾8td;T7&F`Ӓ^MAo݋OKHW 9.*Od>,Cт&t׺#۟vyL7O#.Jxb*Zjc$/@`9pqm/lZ.w 'ڄ\:*-=~=ǹ}kuLЊppGTmf^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[%ɢb[e4 [o|⣮3C0mɚ;)aHLS*~_}y[~[R!ms ku]F6M5 -^@>3'1ZgʩjyZJ}:6j?vJr~O7EOݽ= ؝EV75O޹NiUɒ(J)OjۍӚb{b)l\fEt?ß9o婡;ydpYt[5uS PCd}i,USOW_U=u}mEEm}uSU5MmmLrM+17,U׷2]ܱy$bK1$ԖcRI6K)Ô6VBUQTl)MTR8uy"qje_yn߽ۻHmHѻڦMAhGJo:_}y^fo}R!J4eR<ѽm0;GC9S%۸< n/lC1MW.뒛~vL굝#xjm R~%zha$hϿWPA{]ήץnJ0`!šjUHyUaUx vh}ѽ;q7hJPa֕E8D38☠?|=:u{{^|QcMt6QQb{?lisW6wk,9 _ܳW2T#%bh \E;WkM'̫峙ZTa_ >fHsv$9ZAPG|NCuO lI9=1{&w^׽u~m_C>u;':հk#Ea3Ҹʪkl;kH; ͪۘ=uS+K `%.k国 h *EdVLs$XmAϵ|vJr qy?VOAzjgi%USѱMQ; Lgx6k_K/(m|ou9Kک9wgFߋ[QXnude4%'r{wq^@eQqޤ&2|p@?Zp@4}{ߺRn,cY=nl}IWǖeİَsnh ѿՁVLA[K܊pUJ7c{o۸ C-bsK&V8PGoǿ-iYeEu}uǗmpm 56(^`A_=~?*ʟHv?'fȈk躳nd#!M=Le=sZ$^:i^9)||bVF(Y.gjQZc]QNO]%|ܫe/wd x^cJjC EWd]'SU& ?UE}{蠵}ʻ&Egk4kWr Ԝ ͯi7͞KM(v?%PI}j>kRo &뗫3UؼT4SQN7Y ZgѤ̳TM*( i-r16fW!NF9FTE@ W‹wf.=fy/U]AjGp1RP,[|G_D'^JJ ]^ZwMyyj C=cdAƍ_Q;k%l.OLH[{\od'uuF}S9uUAj((DP${^`ۯd_@>gayf@_ZҴKR~CE̱u6G|VPQav'l459 Zj !9UQbGHQ>۶M@=vR(#tP[ADDV(QD/~~<\s1K-5$.'T55Z"IvQ=p{oSA۹Z&;_].G$9K}(wuU&D6x)X훖x~o%fȧH0O̺C) xiz %/,M! fbm,PFL,@ $I8%,@ Ndxo|hzV!znXS6FB};YhE7 Z1W_%:ﻐX\5t+Ɛ0 :Dwgzy2ܩm&ŽښNJojW#[o15ٸ6'lbeC6K$U^O{9{n5nD1FI-#j<+q +ѧp)gj"J(XE)3i׽u}cϐ{']l؛Zk))h1UY[K6Z0J[O~{~[ܱ@T ;Ҥ=`*r6dwaGր~}^mAϵ|;GC9S v?''u;O?Emۑ x,u`ł^JxE9rm<%2]#]h&4pngl $Qp#^F{qO7%nl HkY; Xj'}wloYa}˾sf+iZJ3'衧.K3{;9dLckS"Qff 7)ɜeʻ0"1MNĖW5#WKXr vgeV1]QU51HҖCp* 9W߾jܾ ]ڞ9nd<#@ґ*R^?n6ծBRmOسK"T1Oώ]\l8b iѾ!mr|˸Jt0הR)P){%ݞ_^E3ri֛P}BX{I%c_ɩztʬVV)*A{Q:$g=ܽu_wf7Uc">:accQ..x* fEjhy L$b (nm@1HR4i⟼v}fJhwIIy~k9gA'~,hbF6]Q]7X7cmJ"TSb2Q5Kiә۵, ܏۬r==_p&_PQ2Ł,hxc=`74/8rMV=VCӕk.{׺:ǩq &($Vuh eLTǀ 79&Z}w56|D&yR2R7Ƭǀ_^e滱cVKQU'M|ܨ!gq/0s.s) OA?ڻ>GY_(hɥ4*OTOwӴ.r }+pڄkGZ5zm׳Ktm4yֱľL"lDun}3zn {rJFH ӿ  jDcTsC9z}ndbK#fcAkUUU@Ug6׵mѳ[(* 8rjijĞ}t{^׺u4N]VwlRLݭGNv[e]ʒA'vn*I ;*vԊhgv#+<aq3k?j 4^?ҟ?oz }?T??.+n(7 ;Ͽ'F6L[8IhyJGf"L孬up c#z_-ɛ7\E*DYcYTbudB).ݪOBI=󝹮Ǖx@##i1,Z GgF#2w}wFVd6᮶)jEq _Qs딟y}AGI~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺX)m$ZewOuev_Ӭ_gI*Ԥ{7z/4G HޚYQQ=fT׺u5ޮHHʴ)?gKG#!4D["akX׮~ֺu{{^ x { oh?Z=G#zʴ-?GKG (P@U`{lMOMNO]^׺"gPݕ TfSU4ʴ)?gKG)i$+C,jp@,(HzђFbOY:u{{^׺JuI nK+YQXϫHʴ)?gKG8!(BKZGVw׬zu{撕&I&4$ۢiczpK c_gI*Ԥ{7z/ԅUE GT{lƬjzlMO]^׺MQSCWOi]&GUQAsjZ6Ic?=nlhCUe$G~|zt{^ÿ;_֘|[kdvjSHIr ?r͘~mv#o,B>t~nMk?"zjD7a~wAYU;k Q}&o>hޤ;loԒe~~%"A8|Cu9vӹ{ͳ*4mu? ԗ :J]w_>O`oM߱220ik^jrypsd#;6sG,nysq $/AkSJtYl.߬+SC3~[O= P7Tϥ#ydqx+ہMſދε{N]@y/Jto^N{~ĦM74Huj<~NJub~-s5Nf7\8SZ>+P.{7*.ibO11Y1|@(TUUQeUU@DƬjOGĒjz޺^׽uH!,QG+"a gVWuM:tJOxxe(EF"FwVvo׬zu+WP~5SC*j1h?R=gKGii$,jXFiXQ,(Xou~G4K5<$I&5$$ۢi@czpK  z?ZO~3O^#zP,$$׽t۟ktmt&ooWt9<+! Kmk^ag?HɫEE1C!̩a)G)ZgȭLt4[U4uO䪮Zک&JʂHN+v$ĒIM|ϙb"EEª(n{{^늺>m,oϽe+#^tI# 2:VЫp}YSB=:%MTܻm;otĚ6`,m:8- QڈqG 4#EE*{#gg:}Nz1ff5cS7Iwd|Ѳ)fMgru#oGM &,ML}Q{yq&zC ElHid)$ξaQ+ܑUH-^NYpāV=8 l%什`T;ZOuNQUFu-QZG,ZkDx%Zdyowۥ@3/l #\N 3y}7̿[1?;O )(`25iQ]r}Wu~{ߺ^Jig#AQSRz\>z 3WѲMVv3-ŜԬ<8,q [΢H +B t>a>X|۔aEw5-$H#grA+g%r~﷼{Rxv|͹iZGHUG@ {W;[^ى"(>Ϯy)=6[gsM*傗~0Mh\ԏkߏy74rEKۄR)J20>aYQ텃-y{oVbW˕Wf23y\~lA䙿'>+ryՙس1brO;m`ļ5TA*`:u{{^׺u RIo kmwWt gVWdM:tJOxxsJjx2A02ƠzieaFbG֌0z׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u}п{{)>w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽urgl=otwF1oP;𿾃w4q9~,_*}iAPH:!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tr|?- c]Qi*{3yүhx6ڞEdlz !jdVo3WMޞhUUfח gMj P*B)Rþ{Q˿R4ϺvH`" HԁU-Nh }׻nl윭 nd.21WzQzJ^wgN{PqynӕgvVYO v?)%M|M&a3MrI\nƊJV'(W]p{r|zI_Pfp/+6 wQ2-"NXck>s;۹n+uA7 S.䪍EU4UD7?)_uZ*鸏$ IQ@ں8 Ur)Ă0G\$F%$T<v#ݒ9W3('kw|c+)0y=/<f{Grcf^Gu9sN)"_gzc|[Ͼ_xĆe*nr+OԊK$uZ~ZK %B?u`a! zgKu Nc)SH5\u-sJ( 3#@Q@:]VVRc*hhi笭*jJ:Jh5UU3H*$ k]:jY݈UUQVfc@I *q0q*w!UT*RI& ֜4C7ɯð'Ml@S VFUKU*RǾ>{160RGE++aVBh{5ې-6 +qvEġu%EA5atU==J}{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gBw\޿-z?>O'{^׺u{{^׺u{{^׺u{{^׺u{{^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uR旬;z;Y%gmH;m?,sܟ_Ϯ}w1/30?=Sq9Jb~ή@.v[gvDnCc a12 Z󩿧dxN$jL$ds $OEG6;{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{>aw6ڛsrn~7VUk nr" 62AQ*m[v̖[Fzu-̊ΐ0 #*eZPiB*Y^=5;luRV5f,qZҬSWFu7[tWmNz*h6f7 UF2;!Unb1/UR5yWFϗ95XĊ *9u<የ JƩ/9ߚ~-y#d  HcHCBXb-CAe(hX5t hk(&*Zdu6R={Khdu=XGȎ{Y9YIVSAr|0*ڻ)ϧdr$o<$v' '}7~7{/7,mNX$'$VC[ na 8و!ş *KӸ)GӸ7 Of?˻t3!- iTFFF&^ ݽ}o…m|8Cr7@^{}w΋_yqYhaEW^m|$iݔf"E:=MZnYȒ'쿻]Aͬ.>(~-dϏ;TZ=]L` mn?Yc8~=c׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{GK߿=#w;޹I۽Z~}PO^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u1>/a6a^[5wFh2Ͷ'x %$ɥx p:OGڞAvl{Kۋ扼Mhڄ EZ8 eq_;6lWVpA}'W,7I]y֟{?"־?.f۱}ӊ;7nu~wTg)GFձG)*/u|^~p=ӆ. q$z4M@dʓOO.{${u%1Z4R/ HH{{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺w ^ϼ ׺u{{^׺u{{^׺u{{^׺u{{^׺!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{!^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~_%gWܛ4Է׺1v~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ[i,!ʗp{G ߗ?wr/Oz?@>{{^׺u{{^׺u{{^׺u{{^׺u{j6Oִ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)zҗn)UO'&>W6Oq}݁d=x~` qV?V=Tws?UL?oт]~xӧMuwV_l?%dOm?_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/^3>?b_oA!}z?헯`|/ m{ {fv׿> Ϗؗ{_wgs޽z;eK=/3o^_=ٝl?%d?/oz6~ L׿_gal{}w{?mKG3^ g|ľ߿B=g%/F뫺buZ`['m '}F%Ury*꧛m:UQ7(!*rZ^$eygF$iZ (D817:?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~        " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?nn*umkGwOa='TٟE.v][]c#1 6K9ٮX[Viww;SD}|릯Tal|׏D:}2K?r~fe~F&CGȎ?WJY'v~wg詨r0l$z|Ϫ[k - k+s}&[a}bJl.7z0ouA/ۮ )'W{\ou/nH$8_}KNqq ]_X u/q:ޫ/_[wKa}bJl.7z0ouA/ۮ )'W{\ou/nH$8_}KNqq ]_X Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$$6Photoshop 3.08BIM8BIM%\/{gdպ8BIM com.apple.print.PageFormat.PMHorizontalRes com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMHorizontalRes 72 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMOrientation com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMOrientation 1 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMScaling com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMScaling 1 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalRes com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalRes 72 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMVerticalScaling com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMVerticalScaling 1 com.apple.print.ticket.stateFlag 0 com.apple.print.subTicket.paper_info_ticket PMPPDPaperCodeName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray PMPPDPaperCodeName Letter com.apple.print.ticket.stateFlag 0 PMTiogaPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray PMTiogaPaperName na-letter com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPageRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.stateFlag 0 com.apple.print.PageFormat.PMAdjustedPaperRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PageFormat.PMAdjustedPaperRect -18 -18 774 594 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMPaperName na-letter com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPageRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPageRect 0.0 0.0 734 576 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.PMUnadjustedPaperRect com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.PMUnadjustedPaperRect -18 -18 774 594 com.apple.print.ticket.stateFlag 0 com.apple.print.PaperInfo.ppd.PMPaperName com.apple.print.ticket.creator com.apple.jobticket com.apple.print.ticket.itemArray com.apple.print.PaperInfo.ppd.PMPaperName US Letter com.apple.print.ticket.stateFlag 0 com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.type com.apple.print.PaperInfoTicket com.apple.print.ticket.APIVersion 00.20 com.apple.print.ticket.type com.apple.print.PageFormatTicket 8BIM8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@`K# 8BIM8BIMkX72-Inch_Poster_Header_RightXnullboundsObjcRct1Top longLeftlongBtomlongXRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongXRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM8BIM !JFIFHH Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?nn*umkGwOa='TٟE.v][]c#1 6K9ٮX[Viww;SD}|릯Tal|׏D:}2K?r~fe~F&CGȎ?WJY'v~wg詨r0l$z|Ϫ[k - k+s}&[a}bJl.7z0ouA/ۮ )'W{\ou/nH$8_}KNqq ]_X u/q:ޫ/_[wKa}bJl.7z0ouA/ۮ )'W{\ou/nH$8_}KNqq ]_X Tʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$ꤗʩ$8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlong;=FStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslong;=LCntlong8BIMRoll8BIMmfri8BIMhttp://ns.adobe.com/xap/1.0/ Adobed@X     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^k}WYC۰++1qtUx |FIR+iapH<=uIލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuݟo wU{^ލ=зqWuGev^ˤnEK((l\xi(Ijffm*.ē'ڨ(+mǢsr{U[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzusr{^[?w/맿Pzuߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^'c%}MZ1Z-Z=tEGqP0rͤ*hn5[*ȪN'e.SƲYlQǛs{q.cE6h᪂IFDbA\{^gu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽t0Ǿ)i'U9Jxu=뺾˦:NEO|61$ʮ Y;nEpjƴwR Es~4$׵#`Χ)-p]c>;LGUS6wRҫ qL*JM\pFSDE#|[.+1jcM3' n=گܐ:vEWY4a1u?};OY421!%>̟gM❡۠Q}WkxtIZGQi{3&-运 7EL_?\GI$) 1i#Y |S9;*++r0z|6Sk֓:Vc!x!2[,̈́ըl"wf̏~?mߏ4jڽםM3[rI`5r]5-2,R4n3*rPv59=hI/b~6v/#L^]we:#TX^䋧˦Lh!_-vW:䃙dt}j׈V9{;ȞyUo>G[CqoJZl>5هu}ltTWdgDHi䦤dPo:+yu[{SO*\X/$Gfu`]7<؁FT-6v ?)ׁM*>ŭ[{pt/glF&vNodnںAWK[qO2Tt֢H@l^"˼.Ka|;QU7 _wl7.y%Wo?$ijtѺESc,c,utz۸;KN97[w^I-;GMOσٕX]xibXn4bYӭ{C~ZǷ3W&\syKA*< !"MJn0=: /_JuH`6Wi޽}me7CVnÿ6j hw-OG0JS<6.Wֱѧ 6+bh)*2O#(mqTl,TY!)Ⱥch*Uӥ?lH;3Cؽz״jom꜒ o?G(hij+,Q/ϯNo~>v]|Vh9Gw^i7~KwNl߬aVTIg U$FV! $֕XtT7L<zfmKec:ΛclN֘ɐǷUSMMja7EZkp9]ǺzcM ۗᬤol.*EYTE[~if癤xZ'J^X͇v^{z wG$M8Jݽ8]玂@TKV!dYS%5ڽ:,{oovϖ.7}7an6ŢW`b%ܙ}S[,xgL,48~IdEhcT!t̟ƷVxWmn=Ϻ䷧^˜fC&7#Usb)zi?S[QMW%M{ٸ^^}g19.=ힶ l䷆r0{wK-cL2[3s:2bkd uud99흝mU]i3s).+F-[,IS8T#ߊdR:;8Ex=$tʝ GxJmh FLj b$ޞ2oWS^]r۷d|mIK6k3%_oqс$\>D[$qT*&bk+^<:/ëzss~ݛ}K}No|ݏ ck=wގٴqԫE7)=[buYǐzXvj/8rg(;g>@EԸڜ,Y?zmndh_Fm_R-NV4QM2:oGU/~;lGrRo9ʌ&q1ċy5 /gQ E :; ?>sb||]n]npf-2{D C%NŏR4B켄him4aj+іw6^g5kbYof$p qc?{k_nKԝ*jRnMT{ZJ-ZTSέO%"*yv<[6x4RI[+>#Y+8 4a?t trƔEi,`>^|d/#w6!O8,+]fF %4TKHP\('M.:ZT/OȞlbm[d11cf{c;^9%;NU9YVX[V+ֈWy~.M[ul˿6YC,>|RfG]шіu`ka{9).\QME5c\c,FJT7]^ޮ+:% @LNjy:vu~ϣY]Tc3(H_6F+׈WSG ZY)'ž,A|0@g30T {ZOVӖG׸ j [T 8΢3tL"4]ZokGxӯh>zO1z>۝7m㪺lݓq8g=b <=U\V1D+`Σj=TtKۭt=j-c}-+k+姞imM:S啧gHdfH)F(`W_'譓E5Xmљ#\N#v EE.{M X-5!մ^ܿ͟6o{ Hsٻ?4ۙ骨88M_QBicU#Frrbi{×7KO|ت}뺩6zj9vZ2D*P74C&l r4,T7fo#SMeC.?KVWl7/jNۣt{"o`@ŚvEΪH/bRM)׊PWojJJOTSA;Gr|m4BFBmTGu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^^+/b63qen14Yn jc0\]$wi**eP}Y.}uz=gUn+1 ɍ"͛qIIz{^WT4%;WfC>FhwMuc=T>;M쟏]k6c6Dyytűv)Ր<#k^R:CO!oΡp_ذMUoݽ[1ي͇ M./k$fiy7:[>o: Eʍ֟t}6V{gg\N˭L'uIixydž=Tgx㧢J$G=xg'YGز`]N\g#qύr!ۖfl&*+JFUG5 x&u>O^'uRIGB٥IrK<7j{KܻW{mL 6C0H1 *)׫_^G>}vn5T=ikSN#qȬ$ *ԣ:A,i$n" _2vSlF㹷x$3J7Z飂RTX("+=J G^w|ci(7N3c`h]YEURb- ;MccVB:kԮ?$;jFMǹwHb{/2]K]R<.㦣ZZ~!l|uTxi|>qæݝ/K$7۽u&B9꭭.ٝ[֘lßu΃Vt &E{ʧF~FvOWY~6=꺞緖'i[b;S1\;+oP54F%2wULǭP_=Ol10Rp8jIi-L)UREL :|f=[>(煃*, 5)q#۽S׺u{{^jNg?vj?lMutVm>xMWêu?b;xUn޳ 87 >ꖦQO chz׺87ձ: NϳZoغ}7Xc)t涆LKOm΂ SUBۧ:z tM6au>9-ە{jTmL[bce!kc *Z9JcYgoDDqFh8uA%G;>@b][Ab/ OR#'g-#y S۪:9 ׽u!j{^<:ۯOO>JbGȽeEAD;i߇Ty{|LVeّ+TQEa>JZŌLï4SA„Mtf(+Gx],d}g Yi_O^'uf?We$o_;WP%Z[ôw*I$ƞ)'WDA JqUW1ln_뽹/Uz~嗣hnm»7nofl26ܵut3p16Bi!qX0DS}3}M>cݭZ*6=Ϻ ZDj*g%D#;JX|!?WY|-w[yٛyn.t{*2%T4uBqAH5{o]GWvmۺ) ez&ޕ8f׏ R |6ripMaaG}Y|2t3SJpdHf&8 R I,u~V8sۛ;d=>C}jX(}czK/ 1%,g*Du@4ߧ%G;Zr<Q䨧(*j\eR\}CQdqO|R}|6(7sɵrnbbZdDjWJ,qp)t(W:ޫ:{n71vA[AUOU[d6nR˗0U办itUcHAzíU+13MIM,).Ca4C>9Q"aW-􀇎?ӧu\Tĵ=41&( uN!/3Ii10X:ړwNX۔)GtFCmX֪[q{@d##fFvUm!vfu }:ѵ nv9xnH)R5jLin׈ m,v%BbZZ +!e|?M=n>v7Ͻ;[wo^*ە`G]Gsiq2(v2] ߏiR|r|mF; {w_NE_d04 ωܫHU`6"oѓ6ctKv*3o[+ w5v[15auch( b噔l }v|sy͵:42o2ɳi. V6::CtT"B%GWRzZ޸t2Ꝺ6٥l FPON,?ǷkT˭g{~F #uyXĪyᩱv0]8c\ n ^ɯoĮݽcg쪍Sss&T[C\ҰJ^c%bZ0u0 ^YT^^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^-m:V Hr vѮzx۱;9L0YfbՐbi)/Q>/R#}Xcӵg3 kbgo=Ô#]Ѵ(avu%;;k1ژŠ4TQ jNz<='{kǎ_ֿ'~ߘnONOQ {f q+d%bi'z(VM:o¥٘YyvM. r ۀT0s"yL_ jPzTm'/뎶S@KӦ VX3|?n=ŋ!z*f։Uk{^׺-dFfT(ciF 0C.B ,@uEZc6/MntP'osצ\omlM~_nfJWɽN4P)qUiFC+Zu.]O];^[+qe:gb\l|O!`T<j$׼>dR}ٴr[dVNwig)K6|' ZĨQki䢞5E ʧzSXn׽u~Zwol4K~v|29Yd1rԙq۳kipֺʰ)-۩V<:++m+/}]˺].5n .<5-떒 qRIj qəj]K^Jn>Wvmꏔ{[~~/xSNӈ@U>h!mIX0턎/XxrCI=CA>x>~Ja=|vt|g{gm(Va evlVEhj(]24C4^j:{h6O_1&'޹A ݷ2Zve5ReSVѢ*0C'M<_w]{ߺ^׽u'/w ^I[K~=ֻƵxLܪUH13*Mb qTw^dj=þxlכ56F۹S۹: φ\}jJ~!QNn*0k^A[|՟?' ):Qc}ɻy ɁVR:( ;:.5V:kk6^=_[尙M67#ԜH!>qUQ`R}L\SϷT@+æ;=]ô{3|ͻ6l[GnZE =e>6,PlEGZ>Q&;/rwo6[DQsO6 |XgyeHS4e9Y*tW+W~mڟ;sr61tfN${:Fu͒0U:SH~s22ҟuæ8\^gK·F:n{X+dr 6 7C=/7q:g {tootjs.Sɳ+ccrsdQkU>-(!pMZz->ֺ5_޽nqzs;J-{[[pd{ >w'6^ZxZCƹ~}=8£WOT.:wOKn wK'txXUM6ۻkn+L,5UrA}-fRnMEWE;1\X̶瞢h1 Q 4[zѯ[Q/mz ;fd6O|޻S)%JӪ=\~;Cs]۾^ Ǻrwvň8 g+g!-xPF}k[|쟁3u/dulhzy7 h1f;9j$i,bpز=>e)?jSW{!MK% /Vomݹe4 rZ5цey+k̯JZ|_5rZb|Ǝ))tcژh*2~,˪*~ gTaCzۯ`~ޛqv=Ykx,f))2XQMr>\|=!d{΢]%FrxVM,kisQ 5ENұ~ļWLnDԽiO7Mӷ(;1#2ubz쬝{ً2!y9289k&itGWHK-o%}BZaC^&)?CWgۂ?~εu^_M(u% /}H7V{S1>T|JGۮ26όʼ걝N_7lMTSeuFT~tFb:s80oÿ᪎煵ɶOs=j و(:=j.hݽoxg({;rTo8)qyXplz(dRm:Y՘K32yl@ϴ\S{? 0e=YH*F@AooV?UBw&ݛ}Um]wn&tM-&#M1O9.L1f%w?L_gZpolz\pav6O UFCGQKSS/qq|yub_Bu >]чÎrT;a<) W0HTF9&g-$za^y-k?V_|QGg|>ŦS8xڧ+fn?˫?ִ{ߺ[S;fn^nV# U7M݁tòL[R-})8>ؔ-|X?/~;{ڝ#9qjIRŵ!D5u#S9EkH#7Ľ?;faQ&on~di+7ueEB\}]] M#AR|̍^=kY;9m4r{#(Ӎ5VJ,R`jxdܓϷD˪`ۨ{_/֛tWGmǚmULjY̎RŚDֽm֛y-rgv7z92O|v{k$x`L`*L":ٔU Z׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺOKh^K] -6x{ueba┏byo ^pw&kgMMMUOfn$o\;5ZSO]SWX,rI53՚=:Z=՟ {7c*e&{0퍕o+G;?juf5&'͋h袦Vz_^MW-;2&Z[mn_)7Xn]ߴ7DyVUp O.<4VPh{Zz3̟vWW45?F|rwnCnu5M9&<]{fB"67F)@ gχ[&T':^Ԫu+A_)V*%+%RPcJO<#$fb@~ r?{o/GV(іejDi-` =?_7ݙŶzyuR N}5]&A5s흵2`ۑUrg-V=%57Uiƽlz5a~n}n/]N l{ubj;;nn/ ܵmL9 ʸtG]{>蝯OջovtnntvH[Scj>mn۔JX,bm}Mt)`+b$w8%Uvdٽ6vm]Jb'ӺZ3 :Jݽɺ"ڹ'mVMKQUNïbW\}2$0n,0G[ $_sxhDҝ)9Q֨z ƥ7e<U:2C)YH /~t@`Ue`C)ǿu0ϋ۟jV;9./Y[Bk"i)ɧ!l,h@JV 0u}XdP!po=_}azgb|i]vVPu4!0IAS'?E3GJ*:id?qЩN]c'm^ggf-ݔ޿]ٽzk6⦩g<a@ଢqQ5#Wˤs2_[?)jez֗vlDH"'TQM`?W2)/A( $~DV1J%E4gu7WS ޫO~{ߺ^Нӽڟ{ 1r ~ <5i`9 {Ii2fz:6dE ,qȞ C׳տc?A?5h՚ec䫑SHnb}NSPWյg͏47#9޻Ž^]+vbaLVI15~FFLQLlZ$No.׏ Qڹ\5~w1;zJueuz8LR k{(aCׁI>N&n͋nþۣ;auWV( 2}RjahE;|s`}q)*q]kڸ:ɀے5xznS<:֤ȔJ_Lz$pwjo =[WWwNٛ9(LX67Z|l0DI?nwsn[r}єgw.Wϔgyiګ%dI5D3; u^i1]wjA}`E]a0]އԑQõMfr-QL򸡃(S# ounZ,I~>׺8O(bpHYtƁ=̫*{o^v_`t:“#J^# L2[/-6$S >"A׵YfzڪYWyfWgwbK}ߪfo7'f]F97fym]2_24(^BE4ǡN ՍOV F:{οM?xK7󆧮)7dgrudM̜LE#U/# OܸbYT/I=,|_;^ߧ;?=d];j'U,6^ qP9^cd ϊ)mGTҝP/eP[(u}4vl mWg~w >ߛ13YC#UST)d#wץ[iaCK?/``;#*6񭭴cxf`v?VleLxm|yj=iDCߕBMzn=w`mwf{wz| n 7hM c&΅pzG#ᅴwfu q[6kcqPK>'-lS3FCAyiXP/Mzρc#6j.=+[VĚiC s5yı.M[:'tV>SJtC▞h*+(璖UxeTQ#@>ֺk*~Cv[rbzK{ll 6| CQY\梩*L \5$See*m>ֺ?ʾJv|WÝGim;|VooKSڭ.z/=9gR}@A 6iNu&||>|6ݛRz~3znʽ噒-e 8=*Uuիҝ+~.4OƣgI뤓{m b[b|8ں< N*#j▕,,yV5=xA=1vxTv6nigjT*(eIjv!(ln|^:+MK*76W;:!xjd̴z,>RD^w{1Nս7Y~; $7y P[smK:-7wd/^z={Ez&ygPTyzzjZH84QtF'Q/te_0_7 ݴ}iKC9ۭvkoԵnsR岹!,K5E$nҠ^lzAL =GUv[ktኮm-or5 >#T *RQQ (n=x:K)?-r;f O2[onmZf" ֡qGALs)I*[BMMz }gzzvtuڝ/M5n%79æRX$S&&.7"tf>_o5]wYyO7XA ?ۢDo1XrY|~ ^⪡xuI5n׽t[y[=ԭ#7fدUf =DwWhᩦfh䍙O\n~8S"nݸ u\&QYZuڏDa2vnlV#%UumkiZ:TƞDI)f)ey=QW#Oy]6f:vƾoig #j)F)d[ݎE:FϾ^AԝqLcWk6;g3QSeW(lKֺ̪u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺVVܧٟ) zCzw&^g7vS [46 UKaQF$7' #ϫ/|1=w 5~S_":vu~n|ߩC{(YDd`)ht֟:ו}z.]}?|2v.)~Nu}m,>-v-[쌔;;OE^U9Z*fDJ"xxw+.1kTR~DtVZѻvC]ֽv3Vv^H;{֏ooͫiqrsӵl鑥Zx+)cjg^=bޝ֝)g…޽#z}}vNgiLyLu.Y\O,G?Axׯq6{:~M3NN߽G}U{nvUN7- NSS/COtit \q,;7̟#bݿ7XvӝɚvO+,fVKz+~tvۻ'ڽvuvǾ#Txmڊ hdk(ꖶZ|jHq#F ^U%Kڝq[1bYf(r31ys+"Pg2[joW=)[*TLJZ=IPoܽq_&~:u/Y[P U-MSSgxUz:_Jyz|Q6wPN>(tV /)ݻؔrzlTsjG؝G!u}*چ 5k *➞%fq *׫5BVۛg|O[C#KI'Vvv|%.٪>ovÆn\N~|-C; D*zM:+W&ScWEMO?Sv$9&sbu, xD4:zGm>poA>-|Y=<zWXB]?/OAKj5UrG0#,h=׵f,O9=>*[s;c%3K&. ,r;vY$ZXeS׵*5a=O^z24 7?gk#\y>^mUAY}6c21SGy&:dэTTϔkj`x_^Ua8ͱlLF+'QZ}]"E@28Dff:aqEOEO繢"Ha5!# E6IZ|#u{=>uBa[zQ|()7+ ^#2gp=ݮ+Ncї+`^N.Lnu|>v:R=Lj(]iR*igdiY%tv?@W=jKQAvY-[olobIl Pj5'SYM)jn~,SzSk7a$mQ<a>r}zu{R˟mݛ+*'}&t|G*(j{>eKR9S[g[w!h+um#?{F7^:[w!h+u#?{F7^:[w!h+u#?{F7^:(<Ŀ{z+[ׯ6+)to wU_8q4ᩒ%_UdP ElOGW:[\4̚ƨ.SzW|,^Nf{,3Q{+KLڴ>!peΕ24E:? Go~[W/6Osoc﯍lL? & dR ,t4?# 4R5bI 4nV|}:uH/^ф'tv5OYn-۟=Mz]ˆJhl 7rVQ^-;ߐ4qfߊ[H9?wV~5J@8\hj]h5-{{HNlUJJi,;X}龶 U_o;{#ڴ[[aSG7&6J'TL\ #H-HAՕAYW[w!h+um#?{F7^:[w!h+u#?{F7^:[w!h+u#?{F7^: ̷N]?twoTzy7]ਢ;;=ӻC>6 u33% F FfE@]M,U:){10aKARar6 =:h Oϐ;Gac?9u[w!h+u#?{F7^:[w!h+u#'V?IRBE(|)QpG{{H"ߟ~Ǭ~Cf˭sChvK \1hW(9=pL37RCtvz<ƍ,XSƒ\B"8uuWQѤH"H^7FVG[ws׽uŜ&,G hK4H"by$vT4U=ut?ɟ^\% u4; 5E$[Ii$pT R.J=X)=^W#OvN|F\f꿻"mݍ&jJ9esմ/^GM.1DCQh7bSV^G7'r}[{C.m DuvyĚkv>cyl:%p@#rTqVH/k{߈{H;y*.['6I%.;:㤋ua`ca</kq1C]?_;~aw_d6NZnfc<޴OY}Z4WNEM4$Az1V uib8m'cͽuy>lp=E\F]ݩDa}5QSQ.u$\i,ף3yi‚+ 7oYnu~C߼VGZ0oY&7GR&S#׹mۓ-$3RFj ]:IWGQa`1"yPT"v]{ߺV_Ɋ3n{y`GtE'kmwMrthi~UjךD)v pZCZt'ʿ.͝3o4YIb;5,SHXB_K]DtIuvTݽG/`IX.[ R\׵6nlear=xU=u~}o+-9|j#9l&rʟ?$?srlkiK9*\N66%RjRhj5Vms ԧΛ7V %ɹrUaJ_UQ4x,JefdZ`8.-qI ?j .V}_osՔkl5jWk2 vϝ;f)F&U|?m}~u#S)w (zŚ6*#+:/;?kcq1K^Sd8mey.立XZ |G+eS@"M47f *zs͋!(/\>KUJ{eu K "b)b54TTTӘQֻ#>w2U{쮚_&zfώHuZ}1w3(U֏ϻu{JL-6Em;#{rQz24MGSĕ*xϳͱmvcOSJ>;cW`RnXi*vrEcc12HB<;%cϣ+ٻ!ifzvuSW뾁%c{ڟúkSv]t=ryL SC0+ԔUNXT[9.;wd5?km=B Q`,>3Zǒ}הߎ%G^=To:^׽u'3eLC}&:u϶z^׽u~{ߺ^n7vʏ36 ?:г'܇@;{U]},1|r?ѷztpx.۸=߷Ksktarwpr nLn[]pS$R:_=ߛ? Ioތ ڭC4{ hr֯zUUPSNYI3Еj4E :*~ֺ/<y&:uzHnkcnT{׺ϊu㯵3_/"M/ؿmlM~]8:ln{{^׺u{yz+?r/۟<ԞԞ7G.׺u{{^׺u$vmt}'˞AsA]w`{ GLm>_3ۺMi[sfu~l*MO[U @GRPhs`!4ʕ "~i&(w~SC4S3va wH\}UD)g ibR.ν{o cs#؃|cut4ÎWu8[9|+%,AIl%]wr6oUaQ֍ML1TB47HM#>R#jz<}VO%_UKc(!jS!PXe:zy#,r}uG)sJr dJh/GR3 iqPGMu:^ D{v(:=^Hv][wdo&{nVV l^D [V8Dhݬ4{o>֕t1lW7쎵¼ͤ@A,P;5U`WHMS^{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~7f$1b2X[u;F1=faCta8 S'~ъM?qYLJ]ٵ+kSC^םyC%TJN X 2_VxuS()+F:܊ČG$tWp_j\Ff5Vy,n,^3'Tԙ%bO:\=u~}o+-9|-Mͯ5X.rO}xu,f -{+>;rEܛrn &1GMP(h("bz 㲳2ɹ7^F|:iKw &*EnP"TBj@8u_oxݝT*`$5q:JiBȆGG7RzF;FϤn}rrخ훋UfRc|VVԉeiV1UW X=lzݗ~Gqd1GAQUrx;hD#/7tȐDJvxHJbōONAhw\^[Hdq://sU*%Lc#Ϻs1A%G4XGL)t٭s;˧,7]'=91/_??Q|#=v]{ߺFjM_^9<^=EKqn}^I64? ʟ=(M&6%W˚Vu(dZ sWHI^׺r]>OaJ:Gݼ.5)۞kPO vN5jKKe-=D ÐHJS{ר%H:xan!j_G5?{SF|fz*JDSA,G47tW"|P7.G>6Æߙz:Rln켅\n֣,YKj:XSA6zo:u 6l;+kY֚pֲ 1w FWʝBM4A`A#aK`uӪ?mi"6s6Ӈjhivz JH  |ѯ>|{'10lų;-d*(rR!!Xl}ӫu~TwG nc~籾9-go![6t8xj5_AUEHH{r3Fz u50WT#dYK Rl u|>Z_[}2T4s{ߺZ47χcʌژC 6Zh,vݍXvfÄDkO[SVPIZGqJUj_P3# ?"CY?t[asG{!K;n\dvO3׎lcXCej >yEMzܿ~׺|j/ cAQM"MI랲h%aD} eK.T׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~58Lr@M=u~3]>g2 _ zbv<`LُwnEQ\| " bb?oVG/֪=:;':u6^ͺ;calL}|Qĕ)E]HDW̪3񘨩`U`eafWXPA۽W׺uw|HĕuY>׏A/,? ?e=>׏?UvllʡuЛ}ٺPUG$T@jڣC(FT|`bVg,;,D̀!*}׽nԟ~X3~sw@ڱn="񅭮I>BeMU;E8`aHfefU@+զ1濶zj?yvۛ'_n5cv' L1Ɇ%dHo]DhJj[HYu\^%mvWfSfc4T cN_C'm~ǏDݺ^ьuG6GĪ?uSUHʼ#Fv}ǣc|xOmlH,}+wn퍷C\sP&y :bf>E݉[=O׼hb}u</_~sWGWK<[rW{ŏ&/_};6Nu{S&\lY^lcuY;_%j`u [SU+pHfBFڗ=Z'=oy9mudel~ݟ2װݿǯu=şj/_k:gʿ>_D_؛q8uz>/Smo]o'~!ï%GY]I׼hb}u</_~sWWFVԆ׺y۟<Ԟxu>t^ֶo?%Gz'?Z{u~m nψKS6ۿ F?a H(i6~51x"e**4E~{O7ӋëV׺?[>K|oӦk~ΙwtI7`j1N6?9PMLpllM)Qvbɥ5oPun};G8K9Lb&ǽ|0OAKe0n$ui,tFy+뤩ٛA*^\Xƨ2nڦ6DVbnB&{]qt7Xh% jyT0xdX20 uP_0-+SL{3]>Cu+7xTQcfHk^[KW/]T&B>v%5}eԚ/~=#Z$uDҖHRKG%"IFh³!'I6]5їku|> ҲmV+}9G{urH[]fdc]Bl+؛jvf}sTfo[[;Bԙlv2XDYDHQ: $"zU^1t4>-~ŏFOvݣ)+k,Ra)ꤔ#Iv6ZaQЉ:7Y (gbM%uDfIHPZ*H}Q^u}ϙ(ώ݁{ac7em`zvh5tRY,a H*t*juh+sxo ؛vvMwy}߻󓀯YƮTGb;x@V8E_N;{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~aOO<42GT(E^yݷvYג&+ 5FM}{{^+xwďIYoYu=mxM~SߓxȿGn8{2ݥ͔=tv]I3U>31pKUT|&c YdX%zQŴ6pŌvWgͩC^O8զ5@PP ֏ n;3a;ean;1Xs5iGrVa6SWV% %$M,Dhkk`,O9OT[WuC{-G=K;nk{ny&?]W2Q\ʭ]Fb >ֵ0}{a+:Q:r5kPddjkuq^'T*j uǪtl~E|Tvs!;tT6L_ɌFNϊBZ-El>:6k+{>wo.Uv49)zʊ q&qSt % ioV'^ECzݓhZ׺Wd/sx6v-sfXzc 4\q)FoΞv9l@쎗31{nmKe'OV #CL+ ߝA˭е뱿Q)Ȟ|TtVv~RǖVz9NOU%Ϋ׽u~m_ G.mG퉸ls힯)a) IaP,3E *J c{¿'UU(M֨:/ :>z^doQ֟~޽zA Ojo^Aֳϣ;WN3έP;3YCPe-*TIK*2p>߈ zuA??q۽Sŏ&/_};6Nu{ ]oΚ՘qU54Ta뙛BES*^tm-^EGU7 ̦2(rT5x?uf;)@ VSdy i=QTSOMryuTel~ݟ2װݿǯu=şj/_k:gʿ>_D_؛q8uz>6p؍ňp9mv7FNX6^j] DfGR~{Zꪀ:P,z]A Ojo^A׿ [x{DTߵ7^|-B?ڛׯPu_޲/w:vXmߍS;Yhm필~Ub=4UI5

pw3o Ť}}i xtvR>ZMʦ}FA^uA-.JXd-Q4E3 `-r^G5ۧv<e}Y4};#dSĀipQ"`hO׺ؕG͠h`lܤ(Zo``ێQ0tQH/ȿbjuV֙tF'#>m-MͱKOɏ*=vbcFPn{e^'O_kx_{׈{Ih+]MQGMm#ru#%;ak|ʽm)WՀ5iM5-][r3I_y]-ޙ&wml³rJ!X h8ȟ( ez_~"z';b2yL6RZ +'beD2XJlHݾ}W~׺ٿ|+o\g,%/ؽiN]>FpcbUL$GMfUCglu~{{^׺kf{sN-gK|rf62Z*aDc1h'1֏jc]+S۝W{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺV٫'m%o;-J(TeiwUvSX%/6pkYV屉[4u\+~N_˿;nyޥqڧq9[j+#wguTk$W\TU5NZI%Ѣ_N*rz*_(16buG{SY}ݛ;kF۰tjn;3UCaqdSVECB!x˧*:҇u/n̨ߔ]׽볲I_5N J3\$&|@ӭzw{ߺFߚ7NxqL\L4xӖ.cc,HϽ0Ѕ̶%w]|]_*o'#_/t*e lL[hꦂ&7(׏{]{ߺW>;~tU)~=yl&Sڝ`<5ڂڸnLϫ.*zMOvI|x8ϔ?{c{Odͯaadj28i5l.IijD*'Oi:s3;vN 6흺zϰu޿̽zoZ[nH`eSM0Yc ^cӭTytc~EΥ'|-$1?KIۮA=fB}1U Ϋ׽u~m_ G.mG퉸ls힯׽u~{ߺ^׽u(gOF> =Q''܇@;{{u~d?P{Fá޺Ano[9^h7mmn[IIgSz(H {z:u~ΛGNΖ+_t[|7,b=7tp}պu{{^׺ul*ߵ==6zNgMIêu{{^׺usw&bvPTsyF(3drL<iTU{^K(hol?V UZoFV14urH$ǽ+Ň$࢚5c< J4=6ƽTV S m+?W9qW=_~>}6}{vET7D|j?$]햎xY~nS,OIx:7ؿ/$;?=7:q8uz^׽u~|Ի[fqe9Ok=!=t;v2]1hfQDխeBxM& 4$N ;*(z_B&={޻HEFw>0n͸*#ٛ ҭ*ůIX}34!BLHT5{[׺Ob_갛3?;7%kJߎ̋H5$ED6x[^5gUcNmĊv,Qk'Xڮ/u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺW ^鿟eWwwJ۝MK,Ƨ:x⎕%%km ȎGnLXd`~׫y[7eGMg[~KW6S#OXYBU5&>ԓ/bT'd3쯉_`eݥ[+1|Q<қmemW|oPC%<4Z4dMU }z]5?^%5T9:559ƽEx܍#mTjq}|2|Wꚁ A nu^{=3QDJG[ i+!eB*f,q,`EQLh^'{m;XV9KzsG`t;sjƬlfa7U4]Fj\f梤%N)4jy4hGT o쟑Y޹n clL&wn-Ϻr)MA}+*fi<ꨖ{E{';߽?E e?6{o2/qw O[C)2Tl11uLdS:MTkjNuAz{Z|Tg=[Rl{7r[ Gm7c8#E[ʞ{W}q}# s:kmRW3pUZ}4BK@XȺg>7||sѭ9ε~z#5[z:@g!Iv5$+֩):WSH9ez5THo%Dgk}z{sJE$4g+4= irDžP.Ir}u{չfEٽ 5q;_dkNNwPM1I<) 4 XV8tl={oa/|siu/hm4{#[aVdz3R}6Pi1UtQG +8dSqU77g$KrS6AU~T=sYAfX~F)*gqbZ{?@/jpz7G_B~}M,eøs! -%-Qk֛UIk{^׺ڿ2?&]ڏq]:=_Db1\ ^6"im8j -Hb8um7)jP>5%DF#}G[[y?h}{:;FGx'ׯkA7Z=>{_U)}~.ݘΪuX-6E_ucwK[teqiR҈D.-m{_^ѽ uw֏~O^21X㵻9>nuFo穫{驑."ڬt uRk&۟<Ԟxu>t^c#Z}WG^RnciRO^V2MO⎦'T#FbTeR: qM':߯G8_\ UB H2 2"? V))#D48á޺^֯Ͽ>Q.+`mᄒ&3tuBv s1rfy*E_5S㫥HQ T"+Ϫ0=k/,cZLK<3u]E3ñ$Y;6V-Z}׶Ȗ̵{Fpi~׺/ջfGuctkc֕ eUQS9W"?2,E҄"4jzVKOjzo:_!~Iw{botpb?ln{{^׺vۿrzB{^׺;ʃw92sz~ګD{Kx]>gI Vc}- 0=]=:k_{^C/[˴?r"3ؘDCL&o顑I ":i\ֺu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺF~[']Lj7-N%׹y6`BiWU%:o:x?83[z΍|NurϔB[]-HZbuF˯CAh1tSl.v'O.Jv5ۨi+ÕTLH*a>ըQEL;fRן0;?1+xEWac~ޏ+Ĭ#(4&\>NZ( =Vuעw-_YmcK/b||QdT i㞯>v ZsG[`6_>EDݺ^տ+>;拸W?Mu]^*o,FK*宭As܀ǗV_N;:w|{}z;6,cX34Vup&;-FErkHpC E1ӷ[1 Nswl귇7?3v^;v{3K4|MdGV2Jk*h:zr|Y=28؊2U5s^6K78[ST&*4VIKei_.w?巖],t[v ]ݟ\[~mO\zZ~ ƽD9xf*j_*KCWuQmOGSg}Jn-׸骽]2gr/rBٍUWu{{^jNg?vj?lMutcl~[<wur^zbُ:=鞜=u~{ߺ^[rW{ŏ&/_};6N }>3ooCG"c)c|e w٪+GS.&"sJ-_GG unMZC˭)pis{^׺Cv^v |W}鞷*oY~3l{bogt\b#ry?v_}h5CkWu{{^׺w۟<Ԟxu>t^ִ_ ={~1_=۴;۬*\ܩrRi񝉱jVܛ p!$#JĂ+I>`PPhkЋ{wbUNLln۴;oֲu)OVjq:hSuŋAQ7PBouemN`oٻ;odih38,dJX,;.ee>e`4|mO ~E.Yې=WH e@ӼSDYZ^"?CuJ]OۿzoVљLKndmTȘIuv*4f9>QGzqxum"{+6mM{S=76>Sxq9VV#@nԣz|;ut_fRWO}QRm󂗔u4W1IdF +V *:htWXuwg^ݿ3c!G][SS ?N:'L=x8ta?㿙_5П{ׄoQO-6ȝ+|d; 7]z>}njy7Xm6Fh^v K'`o}567kgEs]*AZR,S{*RX^WWfel|Rs~t^μfqտsۃ/; r+[jiA$cz:}SAK7OWZ|ɗA=}6LAU|Ur9V WZ/Dаaf ׺OTUUVV(*%Nt9 L42 AߺW疡r eQ2_F vi1=rޝٕEQݻ%ږQ髳GH ׷ =QS+qeq,Kpn--_%e*%Isf6Uu?ş0=-w%u]$sduDTiNb,%) $LEO[Zy}W}w?8;7^ٳ6Oaaub>Jʹ'XdTB.; 36n'V>LvG|ݛdz~;`v_O~ݑo=+d驩uT{i{39-5'4r*e ¼|ZV;wuC_q_";_gȪe MV'LmzuMMQKh Ϯ ʔG:3F,Mzq cn L{=)|Ύu•CWr"c0Ek.p)0{w~{ߺ^)2~؛>Acc28:| ^>wgHk)ښWVPX,_ߺTQ'}<ڟ* CDU]Dl|WGY?>Ss{{HG)9½nuO_a^^:1?e{HNJ ?SEZ?䘝G>t_H?L_wm:=(|-_gkއֳTy }]Kf1UYl6c3dp]Zd19l}Ld4u<2))OoN]?/40Ω</5vFߥekiTEEH3PBAT2E%:jt5u}{ߺHnkcnT{׺ϊu㯵3_/"M/ؿmlM~]8:ln];wNJ+ul<^jjl.#w*UEl5R;@"+-*v zT'QrFmeW׏nxt= | ׿?>Ss{{HG)9½ntO'budo|Wf|l텼7V6%:lt rPMi!Q*21[y4EE:fYS w>Ũp6ࣕڃêuuǭ>gxj";:b =yܙC[[,bkvD`䶐R*] ~JTFe3ZCni^U6o}VWdaַO﷍!M*(Rnډ 񑦡%?.#m'<: hd(V0  G=7%_?>R֛&-eUVUJ"z5TX$YSWSB0CrǗVSC>t^o7/~_lT=ﱨV:jݵ|FyZD~ǔDs *b1ݕ@~;1s03}޽zzLv4ŚyKhyE+|ꎷܛ2n旿Ctvf19;[O~Tu0ROM.섴3<CSiIo?>޿Τg[#o|[rul=m]AZԵILr7S$B=F6Z|MSR gRzuꃃǪ>)=_Vw̪[?=F% I_74.؛"C`TȖJf>*zyOn+Tc?B/Qb7e]>!ĭ5-DR'jUd -K_G!$LlREDëNoߘ?v;k#cZ뷽O_ONV< ig0)9^]l:'%vVcsg۟ #ڭdGl,ޝQVڪ QJiE TYj#SѬe=ڟ;ͼw.S=b8s޻UQv 4"VDFC G@V5"5cǪkyv}ؙ&Ownˠ+39iGGL))GKEL)P{t Gߺ^׽u~m_ G.mG퉸ls힯׽u~{ߺ^׽u~|*?[PU#Z8t_HL_wm:=(|-_gkއֲY'Hډ(+JPVLxIRmM[Kӽ{ߺHnkcnT{׺ϊu㯵3_/"M/ؿmlM~]8:ln{{^׺u{sOzk~!֏p.]u_æq{E{ߺZŽo3]6‡r47ʼnVdu?Ute`lU nu^R/m>7|ܱP8Oug*cOYl4Z&>JSZ} {?S3lZ:ҷ#fry\^ܾW=h9܌lsALfjDh=7?~{ߺW Ukejoud^^Ͽ`d;Z|?u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽ue_&ߔT'w|&Z'^Y!}0*Y2Gi餂-ISFSGR{mvs,=GI[f_zot%4ROKFԑݿGXA bAQu\^oLȯ= 񫬷63uv"2o8 eDk'6H#IYIXE@g=G^ngi[]WfT3kyϟ,`(5bZhhi%iC (q=+qug]ߏgm 8uy쬽Vz,=qMnޙv}%̭ 51r 6Ą8^xuTݑ{pu̍a{mevUO.R4&YcpC+A.۟(?3]ߺrnܔF%z6sEXWwJ m;;6o,򖨪zyYIgeev;'>NƶS~̦*qi8i@4QROA0If.DHۭu~{ߺ^׽uGZrm>YG&*2-MR y*#xI$ȱRYY@ó._.׏=ῧW:;??x߼7ڇ^g\]gP{{P˗ˬ~ӯj{rYuAuCó._.׏=Nul˔.sɠ :ւC#⪡U-$>#{{T:k>?4?;zGh_}s{_zogU>j1.ˢ1:_$38SsrYuA^uC x?,~:|흳+w{#|6ѐq=4׷v%e&Q<:n^s," ѼRܫ"ta$~m@ ~[w> oz[.Q6~a%A1fG2e4aRa:ó._.׏=NtWxv>cVuFC):N =efjzhRWv ԓaϿhNu&*) cJK ,r!VSoG]7ɗߍ?f^mr=UϜM{_CAQCK2x喒{23`yuu m_˗ˬmoյ,^? :׿/Yῧ^:;??x߼7ڇ^g\]gP{{P˗ˬ~ӯj}8o߸<6:\ԫC\H'@Z,)֏{@~ǒ֒,nked%i$Ԟ~3Կ`$1pHqB"\{I:wPu?y{?I^}CuCx+8|ۿ 6Gjuhھl%&gTף"IDJ} HGTbU׺:oG]ڱu_]~dwNܢO5Y*l IO)IU}RӭC^?͛rcˬt_˗ˬ~ӯj0o[UPWnlmQfٝ&fݱabDJrfovUu5Zg&xfzYeI`jM A!砩!|9HԅZHjZJz*Jhki&5̒<2*:0 {Ǧ͏[mT %&(ӉMF3r[LRP9%筩M9zΤo)uj&jXIk4L<~Z)2~uXcq|Z3xĩS 6Eԯ#mZת:d,-l%$:#mm{ka%?TqQ^;"'/Xzܟ_XRGw̐aj+1Px~yxQ 5IM];(MNxjP_E&OhZy6b+ڙ W*c@bJ`f dyubQK:*k"奖Y摙Y̳O+$K#ijI>r׽u~[Wc ~Uo݅M;= `ܕݏ4)5s cno`[K ue g;??x>u}Có._.׏=NuΝKoɎA6.sWsb͍lc(mT$nS ݐ\ʼnPTn׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~Z_{J߄9pxM;srU?y֘3rmJEpsE S&FzI&4e5ԼՁ<:i/# ]f+~6oOY$vlX1ˠb7vOA&SMT 9DZH6Z"{G{Q|H|mC{v:vmgCS%V]ջ:Gqjw-N#hW$y."T]{z>Boo{s|o랬ؽ!\Yweouw?Z}Nh~&)s/$uTqZ#4ycϭ\Pur6wP>>,"y\5 ;zGw%&bm׶4}d:Qd$zpDcYt?n)zgF208|VX(05]L̵S>onTWOSDhfI=BhG^!9wBjv7stf i*0hdtQ\ٴU['W_Nmhw&v~b=A6Z 534OEg6^xY$ Ju^z wynb]Ӹz̾))eF9m_TMPljek ߇A׻z/k5_>NЯ;0cڣj  N 2g^/ cq\svfyR#r{::)6{-](yijEl^t6?×鿁ڙÐM1TGlLM *^+%K:PTBx|'ɑsvO?È.of3Ei%Z3#$K5G"z5ۭu~{ߺ^׽u~wr>׺?ϿusOs{\S^?>׺?ϿusOs{\Sߺ]{^뻟^?>׺^׺uCo~zߺ^uw#m{\S^?>׺?ϿusOs{\S^?>׺?u׿u׮n}u7^׺u{o{\S^?^׺u{ A.^LF&bZlV6f&奠 Hqczj *r?0RSƣߺS=u~{ߺ^׽u~w{\S^?>׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺG/4n`py}7`|tO_*llTË 榒JyqQL'+UYg`vnù>F%O{î ;'.[2q{f  h *\x&EB1 to}Û𝏲7?e͞yNMnu܋.7!O G$t?%hZsԎLϟ2;||xv>Csy6T euO r̖XC&$Ӱ3 +oνE_.,cv%?ɯNV[aWvU6ͫfUB./UXF^'E/??e%omf7/{]EbvSL9ZES#E*O4qN Yp:_w/tw>qZ_J}[cN­NC\'ZCMB=ּ<׆G@Kٸ;w!,^91~@u_I]O;|,hz#O9g0bI 9^9[U:xףּ}wyVE;݃ѻyLu~Kt }2I`L^گz3WU4ELb1 t ׅ+H^]SUT_ߐþ=OOQKMw8Ց Cadl|)i#H嫦NG^mc4:vjtQllg2Y.;xw%vɼ9.'H)hrtq-nC?A}.>ޚx_A;>ỻ-[c{2)[WspmMnt?-IPѡiwxY+N:yn|OqSQ6gm, sSegmu0D͘ ?0UjzǪuWi-j<^N]A=s״b3Of4_>^:tL*hz)ֺu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^{e<>{?wݩvmL~ܘJfqrE7zWdowaIb6Ot()$FCp{ 3x*X׏Tм^VBkZFD'in˗)7=-}GËj.jFR)]T v"#%RU=;CcwƯ=wwBNfu踥ޝSK9SMC&TM$ĴKj'rmԟe:?m\vzoRnz^ݝaw%ۓ`#x#^{I^\6WfuφI]wvw}|ݏ2fiO}/TR#QՏ::;촦znwwo|6 2ydȜljľrt[5dA“?Ū*YnQߌQ&ܮGɎ]i0kwV.Ar )!VFE>޽E} _9wY쯃#WTٻS7"z̶* tk|e1N={W:i#'UTd2y:T5O#RM4yf'\=u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~b U0CQ4 _~}_kH7Pwp>F wxm1\Zs&*`ڟΧ툢퍓#ACzg,bf&GM!f<ܟuӭ=-ev_#9RY/&N .@xCȞw'?f.wlQAJ:@תz 8c44,q(}k~׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^cd(y^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^~iNI_^Gn=w{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^_y͵;k%7~7wW}Wœ+xbDlnɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^os~맿uɿ?{^[}.oM3s_eO%;?ñb{E<Gq-ݮē`T3m8;{ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ ?G߼GG^aZG}S##0-O)z׿h{H?S}^ufx?pwe>?^:3m8;~ׯi{j6Ox״ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽un"P{)[N:PNG  IHDR%DiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx pHYs   IDATx UYg!QQA -6YM7al"#F@EdDiٛAN DBbX$Bd ie[ﭪ{oݪ='yꮟv@ @ @ @@&< @ @ @ @ \F @ @ @ @^ @ @ @  @ @ @ ( q @ @ @ r{ @ @ @ P@z NC @ @ @Ps@ @ @ @ \/i@ @ @ @u@ @ @ @@8 @ @ @ @@=@ @ @ @( r!@ @ @ @(׹ @ @ @ @P4 @ @ @ @: @ @ @ @@ @ @ @ \ @ @ @ @^ @ @ @  @ @ @ ( q @ @ @ r{ @ @ @ P@z NC @ @ @Ps@ @ @ @ \/i@ @ @ @u@ @ @ @@8 @ @ @ @@=@ @ @ @( r!@ @ @ @(׹ @ @ @ @P4 @ @ @ @: @ @ @ @@ @ @ @ \ @ @ @ @^ @ @ @  @ @ @ ( q @ @ @ r{ @ @ @ P@z NC @ @ @Ps@ @ @ @ \/i@ @ @ @u@ @ @ @@8 @ @ @ @@=@ @ @ @( r!@ @ @ @(׹ @ @ @ @P4 @ @ @ @: @ @ @ @@ @ @ @ \ @ @ @ @^ @ @ @  @ @ @ ( q @ @ @ r{ @ @ @ P@z NC @ @ @Ps@ @ @ @ \/i@ @ @ @u@ @ @ @@8 @ @ @ @@=@ @ @ @( r!@ @ @ @(׹ @ @ @ @P4 @ @ @ @: @ @ @ @@ @ @ @ \ @ @ @ @^ @ @ @  @ @ @ ( q @ @ @ r{ @ @ @ P@z NC @ @ @Ps@ @ @ @ \/i@ @ @ @u@ @ @ @@8 @ @ @ @@=@ @ @ @( r!@ @ @ @(׹ @ @ @ @P4 @ @ @ @: @ @ @ @4 @ @'^~7ވ^\,{E/Z3}*9r`GYghQoYaY2@ @ ,?RIC @" e܇-ye/E~aG6b@>&~ZkE[M{pT@ @&끮E?2{V]5wx]uq~嫍N:! @@)o7?elmՖ(+L_z;r#]- Wh*{O!@@ ,|MMoz!jʢnH@ "pDuolٲR*~MΊ.:;hz -._&(׵-HINr=S @,7FXL @ gR_7Kk:(+!@ @#(b7}[є$35b1@ RX7S%& @ @ "r=PH(?zť_͘1c5X#ZWRc_Ιڬw6Z{>zVXQ7&F}zuW @h~~wh_텾&G بQƨVR'z:zP7@`_rBMN#V=zFtt / @@9wՍfyw$q mhyWA:̚+37?=`Q M1e{^_AR @@(錳s6>螻1e R)XгQ/護߉^~A5RYgA7̢"K_0ƌSiLN  @m(xU%wO;8HR4 JFKvb:k'Ctsh9Я @ p,j:響ߔyO|tU|<nƘYE,r @!hٲeN9;Y{~ uA&kxCk̊h̰>e< @XIJ~}I]sO*@'k]6“bC >$piZy6.!m2 A'!@*!rv}aִ_~5@gVG_\ZٳSs @ pM8WMݧ}|# @$z=C @ ԯPSNS|A~]hw]_ֻ~ \D @1y}!^hބ$ 6ؠ ](W{ЎkeFcy[" @3_j'0u=׫oTjB<kcE@^;/sR!{*A{gsϭF5FS|:K`ޯ=dl<=c,뮻n}r{ͼRb䯁˯Ɩ>=pzkc8J H @p%rݕXhA)]6QpwX~ ar`ٲLb%C=s32>sQ4ˈ~+ѻCT< %`R8#GF[N"B$g@D@Jo;ѳϿ0Epesww.jg)Lk\+k=:I@vI\`Á<B@r텏?1D撵^VT#F -^# 2޶\m f@ހ}}^&mSkgt}sZ\/3^۪sU.{jjۀ,)% 8ĈFDna"@\')/\Uӿf=8uTvO{yʤ}Љψ;cFcUtxLo4f}UZf/l\~K4`Uz}NUZ@~]+Wl7 GőFTd=d{T(Gzi[^#$ٷLr;zq/eW]בWn-ZhQl_t&%2Ru1PTz)ыgPuQg32FUeQWEֱމo{iK->iܸ_!C'YIe߆$2 IDAT'ɴ^׾bbL{k=O63ܳ)s{V}:g7rik Z PlYIϡ?D(sH*wi调G$w?!ts>`z(<ȑ#-M=}{q$ lj7<}׆TFcV'PzNϭ$w< qNum׍U}}?>àx{6>k.>vkVXiz^Ջx u>x\/5~ Bju#9EHO}N_kC3VYwqdoka|*9CsN D9|lgR'Kss3l?) pI!5hA{(!R^"O*!~93NRڑWQl^ xB}Wv[\[ђg-XJYj#[9~s64H?VI$=VC&O/t=uohC&k6D;ݰ//gWZ}?nB;~R΋s)e2Nt+-)](^$ս ۤN>LۮUBx]w{.wѻE ~3:9Ü⤷*RnE@eTOt%) ";^Bm2e{&2]s#.lŊw<$t1 o΃{?hiqwH܌JL=fn.thxCM*ْK#e~l/wx[s#. v5M۫ie?h[Oe4#_m(bc}9$Ye=xYKb>kۍ?=}xfi@1г0@!Yw뽬%~\G{TQ}u';:wl6<%S6uJѯQ7O9mIU(m%l{4yIVn}BHk=xI&O^Zvq Y4~-v}&&6cۉXJl$O7jk%ů?Ɨۤ91e'gи\ E|zky[c,py)'9?|=kp3t^yWJUTn>nRUXv[omfѯ+i=x=¥W\λ}}zȀ08UԆ_aV?X_/G.dau-N:m;o{żGf6{'&81zfHf+56QѵݼgSg]}[g׏^_fz\O3Ͻ%G_'v4}A|]^]Be$sQ9oxz=e[G=_C]׍ \_Q4Ѱl[Mi/@*^;?cUׯ|ms~E|hݥwX=g3M5?s I2Uk99ޅgA%N;7 דiZۏ"ty3}ַH111yWfk9k}*/fM}N߾R4O}Q |ǯtݫK/j=wZcXc{s^u4ldeNH?4Wy9|K 2&e/t$׵Gz1}?>_۳Y|q1/u%-|^#z>Il֫_^_;&_(z$Y5=ɣ +ib׆k|s ^$Ak%o*3VxAK bٗl'YVVu$׽hb,f%~tI!|EY0EG!|弬}۔(ɃVyL2|q' Zy]%_쒕a 엩nd{V,ۦQ[W̼pmMȧ߰ \&Z\Q;.bYJ2U]Ơ߅~Zܻ%%)Y'/Mӣwmu+z^yUê{VUzCucV[փ?"\tA5VN"\W M 6xNW$A~z4 U֑n.D?u؊Rm>P?c:yE;B۶%YT2o1M=G$; 5S+Γ'no{e>2Es7=4Cr >w*9N:!WUt~N.\6ja#d$ra7IIټ RfQ6mHNv_˫S55I詐I6u<H[e?fmjӦlE1:T vjBE~wqX -N8g1R.2);&K0+:teb^vg7LBQ W 07,Z=Ϻw?GN3ӏ l8]}SXUCr}'mN=г9i^]ChݘU~cOdr:#\.CzoJ«)!>em4;b|xWa;`OyMUmS"%:etMz%Ync7YY\._ ]dPU(%v_6 Ӌmf()J +ns3[d+߲PP7aߙkT~\O 7 a(Yȓ@Fhyߤ}>,|UNHIiG^B+0#axpkzjOFY6FYyB(صyAL+@y(U_Z<~eą. ,FYj&=k,E,Knn Kwd  rVǵb( a 6zzdU3Uk=oY{.mWR{Rhݘ՘tw/P)XtNot;4ljֱY*>d_ɛ~+yHq>m>NO|W6 2:]ʠbyKyy%[;ej}t >>L7Y6kڕTε1Ǹ¦^sV^ʜz=G^7|_M26 1ϳ\3Mb`/B;D"AQ!D[:d E̛Z2k^L.SENJ/u(}m:Zܔ[R]'+yљFȬpBws̪CZL?xOw4.%(¿̸JnZj>l%-hL|I}* 7LQ='CRr37`YE]ѐw#hVM(s38,|޺؁V"k,þL5мWch$(k+B Չz:f#_ųK]׋[Nէ2Yu6x}kEM\7~H`@Fe객gT>_[Eר#e='MmMϒetqmwnV@ElO>8سyfFz%g00\t|'OH-iLhd)֋4I> P:ךk~2y)V~nRh̕**NW'o^5qeO M K[ ۢucQE뭢:p%RSzWBK [-hpVk8|:wcOuYsLc湶RD6 ƹ=T*R1&I&S뚴+k{Ǖ7U"=ڔL{빖N"m/߇&ԝG /ӘzX:h0M}W!pVlMqR: w\Zw78QzpKZq_\lX6i{X_'nm:dEs濤z \Uk[M S xStfC$f;`#Ǥ;+&4<-gU}{VHS!z;$PɡUSu ^pϬ)c'aL^ NTZi_vu(֕_FM1l-۶-F2v|sZ ڤ`7 o(N; viݘ1m4!އ>B۴tm26]6 QtLgmSE+[9=utml٦=m]rbWy:')]| 2~ZraULau8pͳj[M@ZxzC/H[p`fzЛ~&{f%z51o?Я 2LYZ噔C[ UMI}U'K3U-#Gfw7^Bw/2lxo!.%37!EIkK@usELoܧs85PH]6G+w})ܲ/&uyiȦucb|]&4~H_cH=>Q;'3$ u9:Ty}j̣ugeپ {(M3t*}??-aO4&;MZaHX%;f2u1^W􆺽] J"x&}t}ťǞC&ϓ<;j1._[!]W0Yem1Z]Dz*f2sa޺ATE` 㣽oiUjzӭft^!kw!(!߻%˴Pұ . mRe}] ;csB}R=\9yj=ͥ|x.6657b8W:Ȧ/ag?%a[hlg{r Ys^=S%}sGaMi'wX??6N1)mSLG&ոi{ˮ/񐿒E ^ĭ.c AMHj$>’q}R򦏕VHVj[Y=I|crpPuO - p%䋡ӡ5S~2C cHpsqz.=׾ Uhp E$rQ&lꗽ930yNKm];`㲫u)bWߙ!Dw`F]+py`OW_7]yq6~*zE,(r55NEd>l1iSwk  c_ᒊ"\2靬zنW?Ƭ yҞ+O(aUyWxcxqm6u5՚u=;!ܫiՏUrh!Զ٦Yjhl4<Ż)ج;N'Z{i$=p^5m 2vD.'JyǍ׭+{IίBhxe[۴ns]Wh:9~NW5*>ʿYOV^vc^ؿ U'EI` _5PC8hydYlI HQAo . k$sy#~7f4{!kݘVW.'EQs]^n۱&C1q#GVBUK=& cia XZ]m:\xKwaV ߤuYri5No'y IDAT'ahPJ]N a\C.#o$w~^Q4.m7-M"l5a7/-{>sE9>ܚS"L|L &XqH+kR4<5S]ce !PWeB%sJy ʫ}'(('/g֊2s35U9k3:7 TAsz{I^[Xf>yA@!M_ (C>IMuʸnhQG<<^e?h[ h6594{]M9>R?7q1뽾92K޻I^O9gnfm'e?nXNK}. ;l'Sne9)cڢI 7ke1 ]'5L#8NVz>zP{rYs}!kW;X^.a7a!ےmg5}Q/=~~e^6ε"n;ON_5@ `,hsCǞM‚E]193r9|"hkGΐ81˰Bԑ7C"{{[\ol~xL/r7[W{Yd_,s^B 4to΃ê̲C+qnqF/Ӌ~ %}k~]LRuϽCqS&OZBb3^yu֣s5?pQbRV齮6N;-m5J/QؼVl?iqϹnLF[#)4KRhx &XW|\elj A QMN䬣2$.Wy+?UhzGQ7n٦^=|^B "A"oM nmz 6=sR }sPA9N9Ku}[&܃ $\HEx_u.@HcӦSoD 4|&JN@ !PX-Sr!p5!4",[,1>j&V:G@פyO95ٕ+;Ks79R!{AkP2/"*FF(nǫU!oULPMEVaƥHJyEՔ TG[osƛl4)? mZ*+=͉?VW xW] HE97mnuama50"eT]djLh^| !PXZ[Tm8|)$ Y!*4Er)l(`&5 i#FH^F#G*wVT{촓S-<)^欺dw 9P7Zdd 3坨8ه=:䳬ӊ%C K^HsS^Tda%v <6M6J|ɍUW}pZI¿d|@{ )g^|).ZzVsdӶE}_Ι4&lᔿ-}h1ItЂU\u֡`'LpM?n + 6zdfI2" !Bc_fPKǎzAzvCǪ˟{oO[zt>loU^zDjͺ#פYCq(JB}0˃*vթ(Yg"`'(ಷ}]׌εbA&*3삮 }' }͡\Od{W5AEO<g\4*PC.l )F("jKAs̍&[|FA @YcO;0p|dY 4eҎ5MS?VqqU_ >IGQQ?2 u{_uFYd2 yP7{}n|R]Cۼfvփ:Wt=˻|ACP^֟&E&;{u]34qIz;k ߻HC%gy]]748ŃҩdxX(YΘei :QavGG{ӏ{r0 ]ʮxFG ,syM*#PXK~VYߨ؍oTIǩ2̒%!)$O\?;XQ WFEb MNuOfuqMu#Dk`Ճ7*_:ӒgK{ք,nu\W3)}S"yc5a]';M kԑρX=ʴ@JH[sO @M|cj*D 4|$o.(c,-eᒛq7% i/BÛd {aҍϿhሉQj:|LSOð֙l ~MZ􃱓hZ>M"q6$=E,mCƢI<`:Xb_VSiSq,]Btj!%!ëI _NqFP+$t@?JH# cB?^m4~o$Ђr5556M9N{V)Y.Eg(yd\!KurfگKI''[ ='eGWN7.5.QRW2?mAozQ\ Uq&mJGUa5\nboޯZe:̪3]ϣ hBI&!454xQxk_Γf$t@J~iK]f?nG}\ahz\giQ5 xO?h'.ceEu 0E"4<ԱƇ4zE oPʭj\U[O2:KՂ2lV!CWWSJG`T z+vW^{]>aҶqP7:XbTŏ<Ъ~L&n.dl۸Y,/̪Euya'nݰc6>F&qɿSN롒5a5 .$"ByۺQI+V)VBFyyxz⊙VŎ75:֍(LrEh$9$t}?^u/binWYZT54e2.c:tοm.wU2'>{W':<1 //J4/C5\XUC+15]=%PeW_k욌NBG?66RTi J@Y%4a˲>Yݸq_=Td)g?8HMU ];6 \kMet/Ħ~S-./:Э4Փ>&*?8,s]+Ev ,ksMOmע4Y&*ǪHs }:O<h.9q뭣oUiOz)jϜZ7 s+4zMҫr-h#{I y \A\m\˒? ZƦ ?k}i]ǻtot]i,޵S&OB ~~eӦɧG|""X/$ }u_&tog%m]fJfy${gakq<u9;g2XyzPC!YXVdKO1oɯLq1.K{y蓲0m>7_/=}ﭮj_}Ygs Y>e>Qp7(Qi-~%H'xӫcY׬/ve@Q4w7vnLhkh{))o}LQ{O;I@l,SJiE w),*eit7${ʩNFyU]ԛ:Gp8s-gN84I(|&{ˮ0EJ2J9X <+Z]}a+/o%<[~="Pփ:Bw:)wxS_81e'SvcpI~eU`@mUR0H,sJ}Ť>yo2vRBp~NsbYwGОwK rRt33J#H){IË]_|ik NeT܇5~K(8:^עv86CY"OGU\0]}D]e򸛌ݔ_!edHoE~rR5'" #^@'m9JZ|n㍃y5jZbE;.Qst2RAz;^Jַ <&'e=W:A ]rKS=]UСM0 v&dݡW-&^fuQ@67cHZd-IAO|RH0m1wV(b=[G˯K;M}2.\  K~ڿEJB[K_-42]Ueh,'iS1w!Gy2"Γ5ɲRFW!֢2 L|{j{C#reqNN,ߑ6cC<`H^c&6as):±&)@C{dpm(AW<}S!dm7\wEw֗HHQ1!Tӏ ?ꁀM*hAÈ2@Ki|0*'@&45 [~:nVX1 '@ 5%J^=m>|.I72.m3߷GH]IGѾJ5ݎX{οj6= %HI.u[o[]-MqzKaS9yC֟ [>j-.5($O骰|u$W!JO +j˼4!N*Gjkh4YuʹH~g╤.o7Td속^,Խ@X7qPbU&܏ο0:gW?uHP5=7m\:B,;֍&/*5"4|u OW]cJ6 7{.[c0Iw'[+ի9gq￟xj(٦iNyqC/c*2No꾭rVf^zyDjގ.)iW_gZS}XmiMyMZr]Rh꼶&nB  @{֠40$Y&3<:k#PRLirxŀ&H2."%)L\R e1*2|>]F>Wυj^pԑG3/(?=&fX'䀌ôeeW^l(QHgK"PnLH[C%T5jSx @`m]{>K-Z4PE엵%28fhR=A9EkudJDJS{W(CouKwBWabbv}s2Cԙ ]Tu^T,hJr~w|\]45i"=FGHȲ)xh>0mhrEH#F]mOcFy5/xkS!|)К$BKM1<ARWƻW5c IDATTW[oGªX(I1~5W ] I~.x-(.ɟeeg-TR]`.~kjB>>e)@RT)ɝ֍&#*Ϻ*ZSDHG~׼5d M!fc0[(4|$)dbc:nغ^{﹇?9?5]ksBۢ`!N$yQUi>Kj/v j!1^U2iG,#0+^!ӂEUv,Z[dpouI0!YZ4ed_@L@ JI-Ot7Rh&]|N:a0چZ NT]S9Omr{ 0)jfϬV LQm|<48mQhZI)X"ogNX9Ӻ1tTt]'+khnuZoi X^޾ikgХYwm̮m65A9caW(چRIkd{?.t.թCjRi^w]`7_}-]x-]3>k.%|aYP/Hr#`Z7VL4ȸ]צv]6 9}}R}2.RoJ~9^vM4\w>Ք~hܒȑlR;пFN];PJSP¥TuVzyX5)}t,'e}Ҹ5*ĭv  %ࢋ'ʄJ[JEq\ q2r.ks8wCYWpX bes Bٕ> \։Mnuq~7 WG.g<Ⱟy6{yRfr+8xJuZkh =" \_C^KSOuQ,m>IMM:>Hb-P1Q<֠%Y^H&7>.IV``f3ӋWI*IB6J@$Lwy_u~׽}=GѢOjFޘ5qM]۩"B$)q}xE;!vɖoN+ ֍"=?th{1:`E3}j0ndP 3ǵp].2tswᤌ}$tKM~LSg+}GJ}R8[ߴkue`pԑ;Ty CD`V3X\oKw7%>^] I<MpnH0EPmJ;e$oumy7DAD@w==.tujc{Pw -JxF2+җl *,R_饭|<#Lt4'cKtmF,~Mk3ńW1XkE{>jN+}v_qǍ >]LzNVCQMV I8Ri/~BX녬zDzlVa} lya&nM5q;^$q ՔGw Ϧ Hy>&ߖo@P>j ѭ2zɺZW9nHjTV4e{(ːjNt 9 <h_L%Gi2O~ֺFu_vl;SS{YXolZ߯Iw昶 >3EPM)[IE@ ECҲTN@ M=DZ]^6g ,Okt=z퓩K$P@X$5S\>dp!|P:my&4/ק? {귕Uh"-Fy\-{]UDƶ%پmdY>w v1iɳϹiEW^{ݩ.BBk,'piś!.9풣0͓ 6l2raǫ>/Wd)TOF9O5i:vm_ˋe+pg,E`kqG3/Ԫ\vE4~ܸbȑJ` h5뭾|u~[G3=aT=Rw=\Wex*?lv_*9y{:5Q+aI&Ì#J,!u?=nkѾ&gI3pV<9v͌.>Jh;tbO5&:{Lqų(x׼A.:sM] 1ʣ 6'zwmyw h%^5r>|@H,*i81=`1^cFD:k?9 K آdq]ZJNr[4]~7+ |}g@@ ߁@10R!AI;\<1mFR\ Pɴ׽8*%_ĪWmWOV,tm|hPzxʆ[x-O5ʼǻ-W"h.֥$!}ul%uE &ݧesBЖy߮mTc6.B Ux_}qqއ\e,m16!)),](2qa)R Cfm0σdxx/vpt\mk$E^E}JX7vw:*yբ} %TV[&o1WwOe/84c3&]zF@ =*YgŒ΍nxgcTU1ZK@Mۂt)=Bm,c;_!Ő*97akɯ| ` A+NdWûO(6w5|˻l b=ޯ^M5nVrUK  ?{/sp52Ux.v^͕@ IzF?kY'sjw8 oZC>{քfapϲ إJo36q^BmP>V䫮ѧhnW"8X!eוb|".Uxw ys:)j}.e.;4ou;+7^s5[V?@z:i\>Bn|dS[0hW] {U%&h<֝DỖ\s 0HzGn_3:F5)҃:C2G)~,<\Vw.'/-vi6uw|^/ꟍ|=$on%ķ_{]{ $ %1c? 7(c@鮺Lmwy<RW-F[5+$l$"eꍷ0\6vZ F`qn57'( k ?GGh,G EΖ2m-amr? ]~sy0j@uJ-ɳر^= TVB.ӞR#-+IتIJgᴩT$|t zϯM0wܗX@ʄJʫ EÙ^^~eh溷tQ_8~{ Lq^=ϵA׽cr8^ϙ*ň_{+qy/ ^:$|H6/Y\'E?=ĤgoZbo֖ A ȼ&seY?M\lX$w39P}JVnݨIXv)$l"gDY W^{W{a7?1 &wʄJy噑B|F+o㎻}L x'd$\ɺuY:w\ϙr@*Pնqu#v[Y\~D8_JHjuHu^ݸNvʓBJFDN`do/䇄2wgc .8tغE&ǟ߬wm,G@0/rXZ-4+]yu56)jv][o5S~qB\}ZX-Mv['eg]V&n] Km}ٌ*k~N'3 4i"-|OA 6i+6oJ:sqUl7RyYw.-՞oĺ'h3$ D{XamJяZL1ߐkXƸ&w[<0oNqWm$ϡyV̤-{_ژ>ާy֝-U\\U= W#eSݪH0Eirrɳ d䘗6hlNudwt2.w3cc܂gn$W9iE#l9a09|bKB}Je<OCp߯|5IvW |$N'-5nbr{;vLE dz|=Ux/A|C%ށzkaN?D/=%vG/JJKLZE@uӏvz߷r5ʻ߫(h ޸F2VRAWcemYdnԾ&uAx8uvL0勾\jtOKb=\ InN#rJM۷}CtY7yָw{F6@tj@\o5+mZǔgD3/tj^$o[Z3[o3}Kt&O>B* %U|3:;xI ~M\F}C;K^[><Ǝ:pAHp3]@ ,pIAta* :L2аְcM;+8~ 'xҡM 0Lu˚i⹦K7M} ~SoމoΰfGǰN'5ޛIQ /ȰHmA6AT!+ȣB\#ƄPA g4**zQ,&(,# 5mSmuOWwںwgN=Sy'Mo>3eLc{bG͢@ `(Du{t>H%4; @zV_Վ^ NHg%`'/͵47HP)EiT'_|NHWn^^;˂m;v:KFZø ;>ۀXZhe5s|p/ 8@X"[a8ntw)0ATemɓ&=]fG*\ `ݞ΂,ܻ1}Ԩ~& a,fGxͽ"jC.52CîEj=׍ALt˕r VvǪ,!!r=2s"((eo <[֠"̝0~lMӰ+juV^ b0@fR|j:D<:dz)n,ǽ٩KMJ ڰX~yOQ)˩% >Q.Ky%6}VExyqaΞʹ DaN- իx#Ӥ/꺆7ơt{LŰyv3 Dٱk\,̻(N0Y:mtr+1aeӦ8e]yxgٹw{ W##*ؼ׌(G=NKUҶ2@ IDATG}Zo-M_͛:_S-m>D꺦N͘FyJ2 x#P~3FCR,Xg)Z(X v--!m&0X~7/%<6XQɚaɓ'V07vWY=U:=2M< rRI䞦ҹOڊV~ȀbSKw(yp3tq5n]!r\݌V`:i0,ϗtqܔ9oϙbA-2AI!btJ ڳGwLx`JE?[IHzzI֞, R0w^/\-&ZZ5EMkie- ɏeKqY?Hkvxq;I-XY-[er9g!K!s!i)N-mo;(5nFȌe.?.}?l`g dz`onjuX:׊Q]8}~sx2(m={wT:8PEE9YXPܣtѵ*?ܴ%'y f͚i)cNF[ffJ2HC/=؎\a褰LNBwyLӕ8^*d3 >}ϙ'L(b.W+#,qrW[s8S?80Rwj=~ՋىN͞6EaN^ө VW˶fMQ#n|0ʴkrNް8v:|vC ty*Y,tcᗎYy;J A]V`w>O/<I3DˤSuN\[ @*+x}x>v)KE%e5#SkH2Jqt[{R3 kWcV Z4oӄlf$h+As^olz^7=ʉ0]%dve-߉ =ue;}.&1zq^!e:YRN-!0E dˋ`u+Ir۵gGl 8Ɏs)4uÜqEqDa)ܩq^XЮļh{-_Ф(<|ˤ/짂]bj'ȇ(L2H-_w 4 Mmqlխ#-N7>~ d^xx#͢qJ܊"dRlB'u t3aFIƹi ֩LV+l8Y&>i쥹m%j<>uws##^@.uqའMP.ee\&b'_qΗ7+NLg9I9E팧3ٽXʚ\OPV/ 5׼l}Mt3"/m7qx0˦t0:Kź|FѶ~e(̃2(:a㇛t;J[[ζ|HMNU<&_mKb+su Vi乡,5X\a?e K\@m{d\2 UR<òS2G V wrE!8 ׈`[I'Z|iVlE{V0ob)S 94<-{'۽<]rsQ܏dRd6 edįLr3!7(%`t49YoUAX˹W#QyMoԓ_1:BLWu:y&pm&y)4ml R vC\v+WrO rxS}}*:/\OqǛo鈗{vl 6Afo޲U[ u j cnjAd<|ڵ{Eчtܘ6sZA?7uqqz!=5[b'v17ֽNqz(a;2#_}-BXL2ʱݱ5Vk= q#䭥ٚZOcϋ]ίWe2S ׺WS29wP*T.0yeiCY| ;V?=:E(_޻"!7I[6!˯_y_p3ɧz %SwM5o8k:7 }kԿG@t絋}_7j_E17lԪCOn/Wu0KO!n߇'7-):;x /ōMF8T%ϩ瓹n7qsZlVf~4fޖI띿ͬײo'Rƾ&_iUN=OQd׈k?o-۳Wvzo,O,$Xf.yx%S=AKC;/Hd|Nd Oӝ%\q#d^\e)Y#ߘXk]%Խ;o~٨f#n](d=*l(muZl"W牰Qnjdf-iڶii,qn˶/?ڹ3ѶE,u87oX9tߥ.6 1?IƹW37qr.l_;}usT΋ܻWU￯b=77kJ@]$rנ}zD[ 閉ԣ571E.s䥱A%Q^=[mˋ */8g7j@ʓS=yn r-3 /ϲ9t0M֍=Yn&ɴ-/au IDA"/P:; tL5 :r9z$q\jUue},_x ^"/*1o¨=,1o1\7xv8?Z4o/$6x)|ا+W·n1 k0 ⼘f UVMYCrAR~{oqI_u6aAt:2)uI.=tE&,S"Lqkɠn˽($͚4+S=<\yH|1Es閏 { z} J Lv5<{oyiո_X}/Eْi1%q-Vr&gJ6?Q,ı-r~=m CB燼kįÇ?9f&p2?wؽZxKYOmo rpjXjeՖt;~1Q(5K0g5v/trMY5mNl t&M.6+30әYJK4%xuק\21(,^~Y&{O>=xX1 KL <:rnPS-)gZQP۝%cY93ź% ~)Y΍rZSGe\L,=xЭ:5Wܖy^%]]:q/X4&7*iE.8yLW8(^ɷxtfSX|kwSφ;f&NwILp͏U[F/zgc/ /_2J~ؔO״L((`[rC aq=AvD. %|ű5bx[srwr-Ark]f:X̢/Oʖ&N]-#嫸]>|K7vy"Gs1®%(Bd?W0)lrSG@ +Aj126"'Љ0vӞ _r"y d銒F7Fu]DkBΝEqE_,kwrS:2s,& ^x՜5< "r=3mk5v5UYGNɨSFjZ?LüZ5&׶1!&A-knvvhW"h~ȶQDjij5gMKs+0xP;t5JY1# ̒`lٶ]}R#@}^u_}heb-35۵7n ,|d|hɺk˕M-](<t 3E\E׽2&ϙºq 7rjX^麌HxFQ*t]XKQVByu+i," ź*vh'g 8ץS&~cN=E"JV=.Pڤkq ^nͭ2TX&@t99xE=vA "`yr{\"KfQK,8 ?/J-^B-ZVh b~e}X#OIZ@"Gz̝r V#o殂[w='0"ڷ @ Cie6#T.立.w S 9Ė\R9__}/ @@( \e  @ vTm;v徭+V-[1g>8'-# 5oP29jYgJPT@ u@ @ZV]9v,tU'NH*,_jUX0_P*(Ϊsf,,'Ȱ@;r.?}ȑ#*f͚U3TMq(  @ @(MU @ @u0 @ 9(#e @ @ @ @A+>@ @ @ @@\Z!/ @ @ @ Nzȩ @ @ @Fzz y!@ @ @ @ p(GN @ @ @ 5(ףc @ @ @ @@8r* @ @ @ @C^@c& IDAT @ @ @S! @ @ @ D&0Bla@DUГo\>߾ݓ( @ @ ^M"|I .rOg*4ANޛܓ( @ @ ^M"n'i @ @ @ Foh) @ @ @n'iRVzXv!;Vgj@oW׳( @ @ ^=$ÿo,Sh  To>w?D8Xߪjuv @ @ @ \wϐ jG-}t^eD&Ф[Ϸw#i @ @ @yO5i`e's#1X @ @ @ \wϐ zͽ[:Eh>Ʉ@ @ @ @@u]b@ RJBu'i @ @ @rQn>  ꪆ%ޛA"@ kKʷlOjYkN짺O` @ @ @ PWKxiߞJ%]؀ @ @ @  %{GM4߻ju" @ @ @ p@~A*@ ]YfRt6 @ @ @$r=T@0w-:~5հMl@ @ @ N(/HD%4e52-6Hg @ @ @ |~>@ ]Kk %gkm6 @ V][AFW'+i'BbuWN  @ PI\$M3!` ]›.KV0NcuZSG4r@ ڷO}sLڳW8qB(W'OFf͚jժQ:gMs[&{'*@|uf_22*UZTAAmմI:Y3&&HB@ @@\_  qkju&ZaV7hDl4i?;*4T?GM8\e~l%>ݺVg7U9V^3V9Nai/Pmٶ]}R݊ѣGICQQmVOϞC{]-_^'4_Fٹɐ#$7 "sQWi*G9"e{שM[gq*T5VZ.e{OJd @ JGzr MMnIU-L:vAפHQ^{>WN#Ie2ܤwwհIe@vu'%۫VkYHH" %CcdmԾݣ{`zSD癐P_R xMs@RMybjf=?;x(Y* [~CNe P"oRa+!`6 ?Z}CA``Dd퍅Z+Qwh]e\ <5KP L?QϘtF2iI7ȹe6Çb]{`"ݶgKߨ~dϿ27[rWE~lyI(NFۜL836 @ @!r=<}$@A~dBVWPm_*]Sf 2aR:٪mԆ껕{,ǕGʺ2}ን}őZEvʲF9)^GIs{tVue<2+rJJS"UxؒY8q"컢`oӲ¶Y& N"o׵}C%Iq?eS XgȽTwI^+#\OFU^Wy~?Y!zX7'Jzf"lC @Kzt! ȚuΪsg\gluת@}{D+y5U^'ҥnZ庬ܺyթ+li Z]şȑ#Z9ΙZL13<0s"RNꐉ17&>bK!&GP>o5ͳYBׂZugźV{cciiv-ORvb [%JlepHYa5 *_do2ABxD܁2P @ @ \wϐ <" ?=W6Hn}zK։}Ќ3*2xSC-ϳ)3>}7m7J=wѣG=K+׉EI#Zϋ]uRv*wZNw>5^ja dmk;2Zd4N&\邸k-߂Lf"Ǝ{(mc2 N&դ*Ux\ds(KJ|!r~L4i#[;8@ @@ \}  U^~<4Ov.(o[5/nF>ش+tR?Q:TVгV] *}ͺ :-@B 9!ŝkECzA( uZlA_b -ZיN_7mR\9"V邜bAM&m윷K۝;t #3$SqQi)[ @ KrHI"u3c-W$)m8L,bZ݆|E_!G]GA.^;!7;m+Bd}le}|xuZHB밫XsWUU[:|U^h9V7*G.* :&\SitU'v'iʳz 20@ @l\l=N{!8s.mz=4Ft@UY˓⯚2:27D"$f,OK4(l\3^.k.J#3*En']JcJ! ꏓ&'5$); WKgLIm4XvzE @ r=y$5xޫi"+#$ vxФ(ߋ/E]eʘTbyHN@~r{LC{GZ-_Vz{C@G.(d=YOڎ0+J[[$tR+ٵ/vumע}umuLw߹Ӭ @ @ \qP=  Y/̪$n;xd`Ze|kQ"**߸cj[=W@[v#n>شRQ~EڻGwwbW_)0$C@x9D>BΩj-WkC%uq ?ڹS5%m[^Ue21h]Bv@ @rAz.S' Y+݀'L}C$KE9/k)dRŇ^o7VplrI%֚Q*q /]6*Jb]OY\EGjZ\^h:QuLZkF=/Օw|-zO9e~6ڳm}&&C @ EZH DeS{d.Kn3JMte({Ӆ5j>qV.{76#{v= Ӹ,R-rO嵜ڪQ#nմLh:*պa!̊[Qޖ4n‰'d53Wa( @ \@Tzס}Tωhcҟ{%IQ9q|V+Zx}{й7.#e&sl B~yVUv$+26?O{R[nDžԹQJgЩ};5f`dRY֍>u#GCDAz^P~3/U3V$ @ @w(}GL@ TW<:V5uvA&kwv2e..V%]2ew|lYsFQ zړt. 9،o&E2p2vz[MJD{t|.#^Aʶֺvw ׫mȘOmΖ{:%@ @Ez i! ι)Z݆R?qڣۣ%62dC7?ڽn:Xzq[ň+=:Nw*ɣDVJWȣV)9soD$5# gz:ݡq\Բ|ѣGӶ7,"*'{_,.,.kYnQroH" @ @@^;C w+KOWI~ؠ};_Ovݼn߆y USFACuMCi!_ThXQ]ގ*%S! O8iꎼf͚W A'AOf{3s^V#oS( @ @D~Tr;roFĮV=꿇R-ʼ~]PT[5,)V%TZ5QS߷^?x{_AW^>*~H޻/.( .뿟4~o4@ @FGI"usOV =Lxftiկ.>lug;gkْDxyLZO%~:Kc^zJTj]ZP$| L@IjڅoMjk @ &r=A / siK5xޫ퓷I*$gY=AU25X_r59U2o󺱙w_Ku#TZ b諒ն;%?~<-7צ]V8R9 ]m ?畹zjLqL @ $r=?VA o xXP~s,Wmطg$6ʢ^,E1glX]"dvPg6-gmo޴VzC#0g곃₋{讞euIpD~q`wL @ !Z3/?w뷫kxc/5PsxB[Z(ٗwOj*(]!TF5㳵MVْp\+4s(ն +U -ɶA\_Խbe qV2Q@ @@%r=-@X)hj],eyf7SZw[;* Mwg/T7Js(@@mw`;- X~T];ϴ& g JըQYfS.qԮ}LlB @ P\LM[!qKd0/̎[g#ZqQ~LeĘ Kف@e$ .%|=+#&,[n*_abqJ@YY {ɭoruߨkzR@ @ -(ף_H JE@1/=K^3Gl߃Õi$Q+ 9_p'@?X}i/P3[B`kYv2@"7ֱqa77E$d?NuV" @ @*땣i%"GI:r] \;6 ACUɭwbiʺϰdl?lD]b. pnP_; hX@oc)kŏ37 @ @@ \!!*SjX]SvvA,E㕸V7k˺FطƦ/";|xh\Vʇ@6:.+l@qvjժi! ro^n]u-臉n&~en"? @ @ r=lRݭNE*5ˍ }sqk֛zq/ߞ17^ܡ, 9yٖ̅jkl%YX7m@~cJܫd{j.t5qA7 @ @S On]f<Īq mq/;SeJC*'J@e+%G9k:rMe}M@&<z6s{it-{q !@ @'r=}4Dqo86ujvqr|u6H*3|A;'tY5W>w\ӟ~Ɩe૯Rl-_>v,|B! 8Qϙ1jן‘7 SndWA\J$IWQ[;UG5_N@ @ ry!* jjaNk7+J]{ݭ^C b *Gd]Ys@C_&j2!k @ < r=:&@ 귫n5|Eɳa]}]C@fS&<<1=b]::%k @fba.V^.n8ir2\ @ DngH #ڴ1ۣiɖyMeO~lɵ.^}_~Zf,,,TFܬ*1k$ G뇝k^u uI%Q 9͚Iyܳ2W}k7^Sv2 / @ @D @jxPO~ | <0\፫TAI-^kԶ;M179=9ѿz}.me  %LZ|Z]i8RاNZ2l䘱/%k @ @/@еZ罪hwuiT^Ş)O;wF QUۭ_uﮆ %]h 1Q"_T,ȸ|ջ.Nbo׶2)O=S<4gޡ@ @@Xs=XV3(qUש$-ޭoÁف!PTTfNy,:ց0kzYeA!! ߎi!ˉqmnZ:ƏaذIe|m@ 2pv&D"C%QT{`.uߨըF(6`wK @ >xR͍7b! !ύW\;V:FVۙE{AQmeXq(_@ ۷W.aXn;4Ĵ3UbڢOSW`J"M@,Rϗ J=Ua:AN @ #;~hs(8k8'aIqR/Ng@AAmխcG[#hjPp3 N 4mRKˬ ^|Qd["fzد VMxm1 @ @ X* T1aLUG[ff-O$w ( @Wu,ZoT]WgM >Y}X-9-f.&/7K) G]j+s%a3N?]Mw8q%7ajeJ  @  A o Vrj]n3CV_*IAC2>nFoj߮n|p6 F4LZƖK~Sbd(**ti,]{:F@ B:E?if?+fzZӬ d@ @I@^cߩ=K^bG*Y7M(hz>wSy! ֞ RJ8q"b!" s! 35turI5uLWe @  \/Ci|{;Tju%}pb9$_b@Z ؀\v3W\'PXPҠ$ ^(طƞS+׮M)]@ @BzXz9 P / v7(ҭSR+T=t'|#.Oc_ʦP_n)ӟhѼ˜  )g7$%d; ko,: @ -y۵4  e6 tN*GINv ۷q͗<_;wvE dmvURyyYҒ;M8s$@ dd;(^9qSz}׾} @ \-%CiA5$KEGtQbm?566q~dlѯR&rJ` Cu,Z{{y9qm @ |ؾc1d @ @?(cK@FR6V\2GVPohRvI*>qUbF +b߮wI5 wI}r ~FFIEٸ]>C-8[IS{Ѷe>d#0ËK| ,M9MkZIڷO5__+!X*]W<&  @ @"[xN@ ŽfGCN J/wDÒ*0;i_wxФ,6IA4$~ڥ=z42];c2\V'$m\8 `Mo-M:hz}ێI؁ @ @N \wJ|-^ĥIX3Tמo&FC;wxPuΥ-~m%[t5,)*ʅ@( x(8?L(dg!*Džݴ(ðvY2ߓRj9 ;HC@&ȤshXy7]~+l4m#BD@ @@ \t!<M@\s]I_tIIu5wsr{>cnS%tAzDXWKoT -Cb}#n5AjSgԯ,9duպڮmKh%o- H+I;Ga:iC$ @ @#r=wyO@VǃM\.h^3'R-ͿȵfWN+|#ǫ.[V}v FըwϘt^ZHe]#oi֭j/j c/J=Izv \;$**ldi 1R;!@ @.\w5Yۻz[)O~uE>yFƦTW{WN*Kw]RW;Ia˓ V3񡉏h!>n;:r?oHZº]!4_X)U+M>شl}So6-.nJ@ @@V(׳"" @](u({tK<Ӵn17Qo妺t e+}?_p uIyADB  VW<;uv䇉NQb ?5h,5}@ ?ުh^PP;%UϞ%?[.Y,{˒ @ \PN9Q֊wqIY ['7qw"G4m1ꩂ]Ei.';NO0>_DǻcB=mQsH*eTw[7P V]O v,N~Ls[̔c @ Z3V.IzJCrj:?߾=i_wGf?HҺDn`sA3t₼e.PdG`QS˺˿0Kk(sin֫6YVVkDAv`v& @ @\wǏ@ VFqLN&’.r]mx|k++}N x${Z2TjeyM`' )ӟʩɓ2 I (L7M|R&֪@r&uyШ~tkDKJH]{V2 I6Vt @ @ Z7`M%fZ5 _ڛd'%f,;՝.LϘ_eõόtoqfM~!D _O2eQK!Q5x.S?q*S_:YoF+yrhX~CN%xIt&Ȅ)xT3iاF7wߑq @ tb@O\+gxV|~=Uѣ<+IAjt-c5nήV7<w/;XBxPdCwaU xnkqf>2S%8`(;oڸ'(HT;BKL2m5~9vشCE-{yiҙ#y&䂷Lpr^P[r~nU\^iu8)J*;G) @ @/$gR z74%ݮXlp'*Iu~h it#j4iۣߩM*޲qEX_tgl]$Q KJm;v"(.\;Q]kׯWQ^s&'J\(2-}4n̽j(t IDATXb]T9G{H~YK9ObÇ?Ho=o  æ۵[?*Fb'}&q%{ĸ2((]+tr?S܃ڷAs O @ @ P!P]]%0/VfEN.75˴E3~ɶڕP{U,V^%(NRr ҧgO%: s^Zqx -\'FvhUXXnu꺯*6%I+_;Aڨk*˦[H4,QʵkmMF0uPn/yk\~/ut{ ;&ut\"^m2oW.~5n%% @ @'r=}pMrrzUVf=PmHu+k{2Q u=zdoe!kkmS(e(ۿKWP|Ɏaj=WS:{~l |_d$ӞԪC&/L 6CX!;&usVdu1אAur/2K{D-d/'Kʔ14ֳazXڿb?6f.##njU2 N%JdQ$'  @ @! o !  %sCVZn=quJ}?'--Nkվ Nu@R\;d^xy%O划m"}k㢢"5u׬DR~pͶ!Vr»MVUY**tJlna?˘]52nFɵqƂuP,KڶVF\NaM#,󲒉:ks{Dun֪mVy'ʴ5oPkoj]kü-(زlG'jmqu nuּIur|}lٶ1CC&! Fbj㇛cfFŪi"׽׬ɶI"6cM.|$?~\޻OrN7^{ˮyvU{h={ڜ;o SU; @ @A4xEO庸yW.W}TN*C`pެdRD\ '}6O*Ei45fYz NJ],kWRzdi?y0c7n(J'OV% Ͳ!J*UW=KBnPe(]jYuΌO0m;v> QA ,^ ^{caNU/ufp +ߍﺝhbZԸ1fKx8^2KBv%JPH b-z$:U & 'zCf>5OI VnʄiO(7r}%  @ @/R( * {\{+XѱiXut O~4Vﭺe%%.W26kLHg-fQ!QnzBWeqh[ڳ7aÁlV¨2(SM eq~74n}B2,y.3>:38b=(FA|N)׽T ɤtAAZˑ\^]TeYe` @ @>A"xNZ݆)v'pEp,?yw5)Oh(m<6K uyc~E~_E_[ / 5Xy[(_]قK(˚?wYz Y!? 3@ @@\Ro!+\Z[KR.+ԁJcO}Uښe^|ϘeGIN|UbFd zJ6)VO/҆#gXq{f-"cVs @ @>ȪN;Mdv$Sv81#h0t"` GDj2JleDCTP@@BljP2QC8=.m6cb#~;{nۇTy_^&޴ZJqx}%wzۮ+7v*ݵ'ql# EM:<8\{z'Qw_Jxc嶂MwgXicNdtW6m @ @ @@ w+@ nw$>连~o²_ 5.=}tkso`N~GG?}DE:uS_}P/RϸohwuRUTע+Ǫm @ @ @@O$) ;;rqu w&tqW~Emv<-|ۚi=k9I >z?6i]Nh vl3g[ @ @ @zz_B \ SuY餅ߵd1X:/>ltgBÿZ޻kOxw9"tR}6})}+K @ @*.2JtG9z=퐎T;7`ԥG>,9SusP'Qᆋ @ @ E,9("3 뽯l<6MsKyjmN ӫXwvx!. @ @ @@׳D y\^ok,|-_T_Z-;~R=~ח @ @ a;;L"/𗣇Rvuwdq7sTP`WJc?L܈I{^Om+~qՓ{t {ӡa @ @ u]gee/0ώIϹl`=vvuk;6H9`E% UUF͘\Qk=Q lXp S#$_6Ɯy &|8|7-uU/ߐ֬mno?*8򃂓3gN+~w~LS`~/91/ ~O-2455lk ]V]᯾ gVUև @ @ @dɜ"a{ø1bP7K_]sm/UW6w/;wA_Tw sˌ<357]p9nb kSφ8{ۋÏ> NCw&H_ӭr:\ @ @ @ge%̓@x^s1{ڀp=^}`^Eg+.#oP=إˋ19S"ugwǔhɲ4C @ @ @ Kgi5ͅ@155x~'Vn[cMu_cR?6ʖ?ֳCç"'/T|A/]Kg/7H[SY{7|>⋾V @ @ @('rƁ3葰}{jBײ_9P|S>?τŸL8}`{)ewB RS!f (t]I>R(T?}ڹ}c&ںk"Y$!h{oGv>bذE#@ @ @Js,E dA (n /_D8K_ 'wj;6ƝZ[n3cm7|[}ȋ hӹ7~9c1ue g :sHv<*t=pk`=v{Rs~|ϯ @ @ @sW@z@;g֞ys #S,K^ޏv>ZX> G$;)k%s gn1=6<>0? @ @ @Ys= hJ9d_p Sw+Ol9|53V*m; Z;qm?:B{^۳_~mǐ ݱV/I_.n`=K?2>lPrX8c @ @ @Rs=uR ~|x_ߵdaxGGrGTO/Ti/ci/T+Ms ;nnK @ @dI@p=Ki.J8:wyGhlxs֔ЋU I`}91p? @ @ @Pp̆L@ _2&Āzuyݎo-P,gВe9l• @ @ @ \V"P\~¸cs {܍,r\$ ϙPcGKܵ.| @ @ @ c[P!P W*1w wޞN}$a Zn @ @ @@2dNJȬk>fn1w'wOd{ż%IV9fFÆk @ @ @ gmE͇@cjjBL}~' O\;7׻?7L\;'L @ @ ,9߹9o IF]̹6\fmc-XƍVU[K @ @ @@׳@18:y[I`Kmb`=oj/^YY&O @ @ @2# 4)!K]I}OnxpcSkӳm3~{nz&@ @ @tz7@9 `i b[oߟu`?ޮbοkպ'V'?gР[ @ @ @ g~M@r,p7 Vhjj gi7+3cCU>_xPkvD{לy? y`A-N/ @ @ Q?+s3-:(qz"̨VtW6Ç 5y7 |n\bV,+p^8_v @ @ 5HA YS;BMyޅmKd0ΙUtͻp:&@ @ @z@X_L1IDATy npv:yanL|yjmxc嶢HOjiẍkB4o/\~߃- ]a+= @ @ @ _b$y? ;vmω}„+l kgmWV7._~1+BSSSѲ19EmH @ @ @@3@xi⟯R|uwͳ7Se g.-:영`SO=_=6$^S @ @ @8\?t tV{ jI>h, /^>nCѲ Q`sB%葰E뉘"@ @ @3lM@c)˜];C}ENd0 %U @ @8N׏Ӆ7m(%y0uDwomMb&>:\vEꥤX'cR @ @ @@J)Aj(VI<6pΠAE}ecxnnx-{</* 9t?ؿ?7 @ @ @@0 P@<{9qIb߳~UtLba cZuO=]G 0bذD}(D @ @ *-Yw(݊0nZ8%]|+bvZx{bE{RvG|8nPUYYM1s)*K @ @ȺzWuO <[rc/naJz, /^>nC\hsBfGθr}A(@ @ @8׏7])><ђR񕲻:b;K;o;뤪aYWOnX뻸[}ö׶-{tR>Z8{ @ @ @i @ml _P9}Nƍ&O*{.Rv,<477'h+kL cjj%@ @ @耀@S/zC;߹9 *{^L34WlO8{j v1%B @ @ @X@p8^|S'=+][[?[RY~pVkh銒wuy0cݽ#@ @ @dV@p=KkbSil {~Nn+sus{~h(w_TwU>sv?2lrGH  @ @ @\ORK T1x|-# K橵ፕBUCN W,>h~Hhhh(Z?{ @ @ @.^_Zh8tPɽ|Ua] ÇJ$G! @ @ @K7S>ؿ?aw^a9-] N oo)bm{Se g.:Y4xhɲPcG$7aFݴDIS @ @ @ z~O fU 6o.y{L?n0yUFk?$*ߑBCƟF/6hZ>*pQhnn.ZÆ Dg]= @ @ @@iy)M@  455Ka꤉vY*lka@)#إiְ|]>`"@ @ @H, JA['Vmm/0mA=oox;KI~RU0uᬫ'#%BE] V;7UUGrO @ @ M:.>,Yxhnn.W\&O*Q3WnJTʵ+^<:rÔDcR @ @ @׻V(ٝ}W4{_n7Mƅ ͮǗ>@"@ @ @蔀zT&@:sfyIaLMM!JB'ĵsÀQmpoKh٣ ح~{ @ @ @@ % ]=pؽ{w5Cy0uD7O oGՐu$Ja aSOC4pSaİa%S @ @ @׻Xt@Gwr}U_Y[t/: @ @ @R\OTt@L %w; W\/_aCsss٭^  @ @ @@Y r XɰiSWWW+QBc[ʰy˅^|>hРoT @ @ @ UT95F@O ]_JF)˜uw% Na @ @ @TS ѝÆ D;7lz!{wۭ^B @ @ Pzfj ڽ;,Z] u9-)]{᰻R;~ر^J @ @ @t^@pZ @Lb |ö׶<±0%d㡹9y0k0XQ  @ @ @T@pLưHO Zh)ܫ߹5(TLK @ @ @% ]!@G:SRO/ߣ:'@ @ @(Y@pd2=6m\.Rk= ^ں5◿ 3 Go @ @ @i % @ @ @Ȭ'2;3#@ @ @ @)  @ @ @Ȯzv @ @ @ @ % 5C @ @ @\ښ @ @ @$ f @ @ @ @ ][3#@ @ @ @S  @ @ @dW@p=kkf @ @ @ zJ!@ @ @ @ gwm͌ @ @ @R\O R3 @ @ @ ]쮭 @ @ @ @@J)Aj @ @ @+ ݵ53 @ @ @HI@p=%H @ @ @ @@v׳fF @ @ @)  @ @ @Ȯzv @ @ @ @ % 5C @ @ @\ښ @ @ @$ f @ @ @ @ ][3#@ @ @ @S  @ @ @dW@p=kkf @ @ @ zJ!@ @ @ @ gwm͌ @ @ @R\O R3 @ @ @ ]쮭 @ @ @ @@J)Aj @ @ @+ ݵ53 @ @ @HI@p=%H @ @ @ @@v׳fF @ @ @)  @ @ @Ȯzv @ @ @ @ % 5C @ @ @\ښ @ @ @$ f @ @ @ @ ][3#@ @ @ @S  @ @ @dW@p=kkf @ @ @ zJ!@ @ @ @ gwm͌ @ @ @R\O R3 @ @ @ ]쮭 @ @ @ @@J)Aj @ @ @+ ݵ53 @ @ @HI@p=%H @ @ @ @@v׳fF @ @ @)  @ @ @Ȯzv @ @ @ @ % 5C @ @ @\ښ @ @ @$ f @ @ @ @ ][3#@ @ @ @S  @ @ @dW@p=kkf @ @ @ zJ!@ @ @ @ gwm͌ @ @ @R\O R3 @ @ @ ]쮭 @ @ @ @@J)Aj @ @ @+ ݵ53 @ @ @HI@p=%H @ @ @ @@v׳fF @ @ @)  @ @ @Ȯzv @ @ @ @ % 5C @ @ @\ښ @ @ @$ f @ @ @ @ ][3#@ @ @ @S  @ @ @dW@p=kkf @ @ @ zJ!@ @ @ @ gwm͌ @ @ @R\O R3 @ @ @ ]쮭 @ @ @ @@J)Aj @ @ @+ ݵ53 @ @ @HI@p=%H @ @ @ @@v?o7`IENDB`n:F-\E/׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx pHYsgR IDATxA Avq[;3 @ @ @ @ @ @ @ @(BH  @ @ @ @ @ @ @ @|cz@ @ @ @ @ @ @ @ 0y @ @ @ @ @ @ @ @6t @ @ @ @ @ @ @ @ #`l#jA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @@FFՂ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @̫%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @cW J @ @ @ @ @ @ @ `lC @ @ @ @ @ @ @ @262 @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @dmd^-( @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ȼZP @ @ @ @ @ @ @ @c:@ @ @ @ @ @ @ @ 0y @ @ @ @ @ @ @ @6t @ @ @ @ @ @ @ @ #`l#jA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @@FFՂ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @̫%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @cW J @ @ @ @ @ @ @ `lC @ @ @ @ @ @ @ @262 @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @dmd^-( @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ȼZP @ @ @ @ @ @ @ @c:@ @ @ @ @ @ @ @ 0y @ @ @ @ @ @ @ @6t @ @ @ @ @ @ @ @ #`l#jA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @@FFՂ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @̫%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @cW J @ @ @ @ @ @ @ `lC @ @ @ @ @ @ @ @262 @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @dmd^-( @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ȼZP @ @ @ @ @ @ @ @c:@ @ @ @ @ @ @ @ 0y @ @ @ @ @ @ @ @6t @ @ @ @ @ @ @ @ #`l#jA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @@FFՂ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @̫%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @cW J @ @ @ @ @ @ @ `lC @ @ @ @ @ @ @ @262 @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @dmd^-( @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ȼZP @ @ @ @ @ @ @ @c:@ @ @ @ @ @ @ @ 0y @ @ @ @ @ @ @ @6t @ @ @ @ @ @ @ @ #`l#jA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @@FFՂ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @̫%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @cW J @ @ @ @ @ @ @ `lC @ @ @ @ @ @ @ @262 @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @dmd^-( @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ȼZP @ @ @ @ @ @ @ @c:@ @ @ @ @ @ @ @ 0y @ @ @ @ @ @ @ @6t @ @ @ @ @ @ @ @ #`l#jA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @@FFՂ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @̫%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @cW J @ @ @ @ @ @ @ `lC @ @ @ @ @ @ @ @262 @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @dmd^-( @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ȼZP @ @ @ @ @ @ @ @c:@ @ @ @ @ @ @ @ 0y @ @ @ @ @ @ @ @6t @ @ @ @ @ @ @ @ #`l#jA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @@FFՂ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @̫%@ @ x@ IDAT@ @ @ @ @ @0 @ @ @ @ @ @ @ @cW J @ @ @ @ @ @ @ `lC @ @ @ @ @ @ @ @262 @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @dmd^-( @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ȼZP @ @ @ @ @ @ @ @c:@ @ @ @ @ @ @ @ 0y @ @ @ @ @ @ @ @6t @ @ @ @ @ @ @ @ #`l#jA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @@FFՂ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @̫%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @cW J @ @ @ @ @ @ @ `lC @ @ @ @ @ @ @ @262 @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @dmd^-( @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ȼZP @ @ @ @ @ @ @ @c:@ @ @ @ @ @ @ @ 0y @ @ @ @ @ @ @ @6t @ @ @ @ @ @ @ @ #`l#jA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @@FFՂ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @̫%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @cW J @ @ @ @ @ @ @ `lC @ @ @ @ @ @ @ @262 @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @dmd^-( @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ȼZP @ @ @ @ @ @ @ @c:@ @ @ @ @ @ @ @ 0y @ @ @ @ @ @ @ @6t @ @ @ @ @ @ @ @ #`l#jA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @@FFՂ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @̫%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @cW J @ @ @ @ @ @ @ `lC @ @ @ @ @ @ @ @262 @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @dmd^-( @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ȼZP @ @ @ @ @ @ @ @c:@ @ @ @ @ @ @ @ 0y @ @ @ @ @ @ @ @6t @ @ @ @ @ @ @ @ #`l#jA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @@FFՂ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @̫%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @cW J @ @ @ @ @ @ @ `lC @ @ @ @ @ @ @ @262 @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @dmd^-( @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ȼZP @ @ @ @ @ @ @ @c:@ @ @ @ @ @ @ @ 0y @ @ @ @ @ @ @ @6t @ @ @ @ @ @ @ @ #`l#jA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @@FFՂ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @̫%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @cW J @ @ @ @ @ @ @ `lC @ @ @ @ @ @ @ @262 @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @dmd^-( @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ȼZP @ @ @ @ @ @ @ @c:@ @ @ @ @ @ @ @ 0y @ @ @ @ @ @ @ @6t @ @ @ @ @ @ @ @ #`l#jA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @@FFՂ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @̫%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @cW J @ @ @ @ @ @ @ `lC @ @ @ @ @ @ @ @262 @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @dmd^-( @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ȼZP @ @ @ @ @ @ @ @c:@ @ @ @ @ @ @ @y IDAT 0y @ @ @ @ @ @ @ @6t @ @ @ @ @ @ @ @ #`l#jA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @@FFՂ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @̫%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @cW J @ @ @ @ @ @ @ `lC @ @ @ @ @ @ @ @262 @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @dmd^-( @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ȼZP @ @ @ @ @ @ @ @c:@ @ @ @ @ @ @ @ 0y @ @ @ @ @ @ @ @6t @ @ @ @ @ @ @ @ #`l#jA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @@FFՂ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @̫%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @cW J @ @ @ @ @ @ @ `lC @ @ @ @ @ @ @ @262 @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @dmd^-( @ @ @ @ @ @ @ @  @ @ @ @ @ @ @ @ȼZP @ @ @ @ @ @ @ @c:@ @ @ @ @ @ @ @ 0y @ @ @ @ @ @ @ @6t @ @ @e oM- @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ N IDAT@ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ݕeD IDAT @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @ pZP @ @ @ @ @ @ @ @g6@ @ @ @ @ @ @ @b oM-666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @A IDAT @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @X IDAT @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @ @ @ @ @ l @ @ @ @ @ @ @ @666U J @ @ @s& @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @U' IDAT @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ l IDAT@ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @&> IDAT @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @FƦjA  @ @ @ @ @ @ @ @s0 F76l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @| IDAT @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @03 IDAT @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @`# yC  @ @ @ @ @ @ @ @6l @ @ @ @ v50;sRXk܅EX," 7b10d}!ɘywso!@ @ @ @T-( @ @ @ @ @ @ @ @ 7@ @ @ @ @ @ @ @ 0ZP @ @ @ @ @ @ @ @cn @ @ @ @ @ @ @ @ #`l#S @ @ @ @ @ @ @ @6 @ @ @ @ @ @ @ @@FFjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @LՂ @ @ @ @ @ @ @ @p @ @ @ @ @ @ @ @c%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @262U J @ @ @ @ @ @ @ `l  @ @ @ @ @ @ @ @dmd @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @T-( @ @ @ @ @ @ @ @ 7@ @ @ @ @ @ @ @ 0ZP @ @ @ @ @ @ @ @cn @ @ @ @ @ @ @ @ #`l#S @ @ @ @ @ @ @ @6 @ @ @ @ @ @ @ @@FFjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @LՂ @ @ @ @ @ @ @ @p @ @ @ @ @ @ @ @c%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @262U J @ @ @ @ @ @ @ `l  @ @ @ @ @ @ @ @dmd @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @T-( @ @ @ @ @ @ @ @ 7@ @ @ @ @ @ @ @ 0ZP @ @ @ @ @ @ @ @cn @ @ @ @ @ @ @ @ #`l#S @ @ @ @ @ @ @ @6 @ @ @ @ @ @ @ @@FFjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @LՂ @ @ @ @ @ @ @ @p @ @ @ @ @ @ @ @c%@ @ @ @ @ @ @ @0 @ IDAT @ @ @ @ @ @ @262U J @ @ @ @ @ @ @ `l  @ @ @ @ @ @ @ @dmd @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @T-( @ @ @ @ @ @ @ @ 7@ @ @ @ @ @ @ @ 0ZP @ @ @ @ @ @ @ @cn @ @ @ @ @ @ @ @ #`l#S @ @ @ @ @ @ @ @6 @ @ @ @ @ @ @ @@FFjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @LՂ @ @ @ @ @ @ @ @p @ @ @ @ @ @ @ @c%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @262U J @ @ @ @ @ @ @ `l  @ @ @ @ @ @ @ @dmd @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @T-( @ @ @ @ @ @ @ @ 7@ @ @ @ @ @ @ @ 0ZP @ @ @ @ @ @ @ @cn @ @ @ @ @ @ @ @ #`l#S @ @ @ @ @ @ @ @6 @ @ @ @ @ @ @ @@FFjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @LՂ @ @ @ @ @ @ @ @p @ @ @ @ @ @ @ @c%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @262U J @ @ @ @ @ @ @ `l  @ @ @ @ @ @ @ @dmd @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @T-( @ @ @ @ @ @ @ @ 7@ @ @ @ @ @ @ @ 0ZP @ @ @ @ @ @ @ @cn @ @ @ @ @ @ @ @ #`l#S @ @ @ @ @ @ @ @6 @ @ @ @ @ @ @ @@FFjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @LՂ @ @ @ @ @ @ @ @p @ @ @ @ @ @ @ @c%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @262U J @ @ @ @ @ @ @ `l  @ @ @ @ @ @ @ @dmd @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @T-( @ @ @ @ @ @ @ @ 7@ @ @ @ @ @ @ @ 0ZP @ @ @ @ @ @ @ @cn @ @ @ @ @ @ @ @ #`l#S @ @ @ @ @ @ @ @6 @ @ @ @ @ @ @ @@FFjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @LՂ @ @ @ @ @ @ @ @p @ @ @ @ @ @ @ @c%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @262U J @ @ @ @ @ @ @ `l  @ @ @ @ @ @ @ @dmd @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @T-( @ @ @ @ @ @ @ @ 7@ @ @ @ @ @ @ @ 0ZP @ @ @ @ @ @ @ @cn @ @ @ @ @ @ @ @ #`l#S @ @ @ @ @ @ @ @6 @ @ @ @ @ @ @ @@FFjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @LՂ @ @ @ @ @ @ @ @p @ @ @ @ @ @ @ @c%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @262U J @ @ @ @ @ @ @ `l  @ @ @ @ @ @ @ @dmd @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @T-( @ @ @ @ @ @ @ @ 7@ @ @ @ @ @ @ @ 0ZP @ @ @ @ @ @ @ @cn @ @ @ @ @ @ @ @ #`l#S @ @ @ @ @ @ @ @6 @ @ @ @ @ @ @ @@FFjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @LՂ @ @ @ @ @ @ @ @p @ @ @ @ @ @ @ @c%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @262U J @ @ @ @ @ @ @ `l  @ @ @ @ @ @ @ @dmd @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @T-( @ @ @ @ @ @ @ @ 7@ @ @ @ @ @ @ @ 0ZP @ @ @ @ @ @ @ @cn @ @ @ @ @ @ @ @ #`l#S @ @ @ @ @ @: IDAT @ @6 @ @ @ @ @ @ @ @@FFjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @LՂ @ @ @ @ @ @ @ @p @ @ @ @ @ @ @ @c%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @262U J @ @ @ @ @ @ @ `l  @ @ @ @ @ @ @ @dmd @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @T-( @ @ @ @ @ @ @ @ 7@ @ @ @ @ @ @ @ 0ZP @ @ @ @ @ @ @ @cn @ @ @ @ @ @ @ @ #`l#S @ @ @ @ @ @ @ @6 @ @ @ @ @ @ @ @@FFjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @LՂ @ @ @ @ @ @ @ @p @ @ @ @ @ @ @ @c%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @262U J @ @ @ @ @ @ @ `l  @ @ @ @ @ @ @ @dmd @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @T-( @ @ @ @ @ @ @ @ 7@ @ @ @ @ @ @ @ 0ZP @ @ @ @ @ @ @ @cn @ @ @ @ @ @ @ @ #`l#S @ @ @ @ @ @ @ @6 @ @ @ @ @ @ @ @@FFjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @LՂ @ @ @ @ @ @ @ @p @ @ @ @ @ @ @ @c%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @262U J @ @ @ @ @ @ @ `l  @ @ @ @ @ @ @ @dmd @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @T-( @ @ @ @ @ @ @ @ 7@ @ @ @ @ @ @ @ 0ZP @ @ @ @ @ @ @ @cn @ @ @ @ @ @ @ @ #`l#S @ @ @ @ @ @ @ @6 @ @ @ @ @ @ @ @@FFjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @LՂ @ @ @ @ @ @ @ @p @ @ @ @ @ @ @ @c%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @262U J @ @ @ @ @ @ @ `l  @ @ @ @ @ @ @ @dmd @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @T-( @ @ @ @ @ @ @ @ 7@ @ @ @ @ @ @ @ 0ZP @ @ @ @ @ @ @ @cn @ @ @ @ @ @ @ @ #`l#S @ @ @ @ @ @ @ @6 @ @ @ @ @ @ @ @@FFjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @LՂ @ @ @ @ @ @ @ @p @ @ @ @ @ @ @ @c%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @262U J @ @ @ @ @ @ @ `l  @ @ @ @ @ @ @ @dmd @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @T-( @ @ @ @ @ @ @ @ 7@ @ @ @ @ @ @ @ 0ZP @ @ @ @ @ @ @ @cn @ @ @ @ @ @ @ @ #`l#S @ @ @ @ @ @ @ @6 @ @ @ @ @ @ @ @@FFjA  @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @LՂ @ @ @ @ @ @ @ @p @ @ @ @ @ @ @ @c%@ @ @ @ @ @ @ @0 @ @ @ @ @ @ @ @262U J @ @ @ @ @ @ @ `l  @ @ @ @ @ @ @ @dmd @ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @d J @ @ @ @ @ @8Rju:o<^ݿşf^އ[-&xosDxq5]<7ϟm?7ۼf_?u#0=3xޥwrLOⱙ?{1xs7z/nMv?p[8xdvo% 8 g @ @ @ @}RFAK@5v+w>gf͚9Y @u"/r*K{'O @ @ @ @ @ 0Hv9oJ1'X߀qܳ;eN<=B#756<M~W^ٛX[m @ @ @ @ @ @l@@5_[n0v#@`F3"pd^P}3{m FMuSz{&Fz c`  @ @ @ @ @ @G`G۳}ֽ%3l5îߥ٭ X;tڳ߬k]-B{S*.J1&H5H<*S«OhV JߪV^iw1.A,& @ @F IDAT @ @ @ @ @` |7'tI(vjoiۼyG)K_N~/VlSC~sNn՗1Yu~*sh4'^؎kݼhv!@jJ @ @ @ @ @ @̮Q\{,\`߃Ws@ewXhcK״V+ qSW5ٸNfIT`uz^N @ @ @ @ @ @``έݎG]~l80q_H|"}Nv}Ǥg[ܨ~WJޒa]k7O俞c}lDީ{m?K|q8K~HG%kUK|=Q1Ovɔq_qlWJEگͣwLs8+Q>r=lʹ)fE3}8ݛuɿ+g1ߚߋCa]=X}.~WԵޕw<%ʽ>͒kbF]s1VMX]6L9lO:s.\N|*qBNkϥs͊v/CΡwq+%kon;')Ʃ&N#Cݼ- @yXi ? @ @ @ @ @ @@g#S.>V۰X>qecaef̲ϛu_3}n/_ffj1yb1M9f:)7ICRnFg4ٌU>2D|:*]#qG.5x{kgO%Kgk|}HFqrXŷ|ļT:5/|Zrm9ޭӧ,3Lz׌{AHB6߲036u;nЬKҧm2,QKI3ޏKc)Mozo6IE= [fk ysbfC&8i7`>9ǩ=w9? 5ؖT٪[,fM)XqivϮv~f%0fN~/Zfd1{R_WP~_yҶ*̯gsOڟ*u[=wa{X]6L9zd~ߚacyT^5KbfŸ{jBm9^W*nWUwvώѭ-ŌdڶۼoKqߺL$P @ @ @ @ @ @LIGKʇ:3[ue!Ň+R~[JTm̜ȎeQ mq_N¨;CL^>}A"}۲F_&F-QE!N7.H9r/'9kߛ3'I8*1/d}6lh{ˌDَJ9߫%^|Yf|]>^IXj7́ߐ}&zyZ$}'.YߋZgX|I2{UD1*VS,,3sٲ`I9*6tfW"KG$j5ޒ{2ڽs]gbv[Ja z֐ѡ  >KA"@ @ @ @ @ @ 0JUi(R8,Wg;CaeYúٖITMÆ GW&a(1Nj:s{Zs}$qZu7שKk6UK|JC3Ӄ2+cd3wCm{Rϟ/A[0{+QحVGqX{Un={ߗvV)?]ŢDaK,*ת<y>|~/9mxloR'-{yU;{geoPtc=?(PV  @ @ @ @ @ @~t(aY{vevN6ʼݣ/Mh]Sv%nEvzDX YTx~Hk]Q97L )4cBo KaD; $}SKUސKxYQSD׿rn^>]2kՃEt#NS'Zbߏ#Ü eksy_'jŲ( xtDI嚴v|/lgs7R?M\?w] K{jXX!  v\wg @ @ @ @ @ @(3݇)|$|]%ɜ(S}˂ [RQJٖ1v_Fof;u%[E(~ɗ.کe-)$I<Қ'kΔE+'71.N卺!q'KarZ:'۷̹,V|ćZT<:ƄO˹dF[ר{aCu%{Vyp-_Ig\.E,.2ةݨý8}dj>3sY|DyN[-8ir2|9lw-~x*ÅhSqlW ;vֽИ_XwXY+S(9(r֠\6?L߲ Kۨ,\L^BbYe7#@ظ  @ @ @ @ @ @t-pD>l.e}&rM/~heSwVE)Ue;]r࿝ЮH|dԌFEkY0ʇgdw2evjbUڜS-^^ٔx_⥉%f58jecZT*_[ih<'+I=Ã=H\R홉sI__ʼn\Kj#r:O7'ʹ/yqwrZ6t\1*WwR5{wqza,u'0+_jקwXe3  0ۘ @ @ @ @ @ @U_DC;kUw͇ Gi#8L-8NҬ9͛uaRPVjZ{j9RvJݲUϝ#睾X׬ ~TnXU3k%(x8f5}.f4'~9{Øig8s-b1q5s ^>]],xn~RM:056-U,oC9r:߯I4Tř&>F(Ɖ'P[ͪuw&c @`= Xlc=]MB @ @ @ @ @^Qæ'i+{;SE+>Xqiflڪ{X\iϗ[ukK,JbU{b /VOFI Y!}"(ۓ.;oUcr咽8Vb1sVŊ|oS=S=d%߅u =~jGUj>w]c. '.z弊+@&"oOwRi|R&l;5sZ9\߆.T\fRRv彰*,cVg%IEIeYv>nq]?a̵Jr @ @ @ @ @ @94y۩!QN)/~$3/Z}ʂhuY-dF; ?Է4b4lv~eyIT^7~5llmk}[],nZ*cL?r̵Zn N1}8&wf'n821j?I۴r~O#潹R߬ݣN S}ﶃI{k$X**VKY8K5W @ @ @ @ @ @UڇVfԵ?S>Լڠݥ߱t G,z8Кs)SURyJ]7VVyW98Re3}нܽpK63xbɓ\i>w-؇{pHwpnco\:S%8,}LZ{1oee{ⷡpʙ_R׮ZhWtQ0wqœ$ʢi OL+[i* @  + @ @ @ @ @ @@9~. E3i՗u:{Xꇕ WU}ֱUwAܷ) 푏skfWqjiJ7]*3Yji>w}?b+V9}8.oS''BK^[NlsJP˞.{ⷡ ^.}s_eZ{a*9#*'~Vޞxr↉%>hiƴ1.Q'V&܋eM @ @ @ @ @ }YU{H>,*}Zme϶)N__w9]e}6}NZj5h;5"u<>hlI1o$Ͻđ~V&3cf_~ƘV]ߪtiaB4i? .QqW!s|qQ8/ժU, bުX9\߆֩nWqS-%F{tZ}Mq/L]|PN{&j4Ɏ)03FxC7=1gW=]4mnrr]K*CO*Ry7~2r_g~O^gcp~*+ʼ˻=۵SwѮB1w+JoZm׺>?}1/̚?fD̗ @ @ @ @ @ @`jǦ:yI!*uͪF_?ߵ!cSZuAe])q>]W2S-d1qPBWi˔֪ *n>m_17'n<lGoi)n@p>ʜV\+bʳcⅩxblg]KcFFR\'&vvCO vzm"|6P!٦lpgH-q_ *'Z{wO+'8yS7>x3ㄦOq` @ @ @ @ @ @3 pGxlK*{"omW6YD'é?Uަq.8?KCC7|[>CSMKYq?q~ڿmYlbRS8g ͹|*rv)ӳ='|N+[`gxԛ߀^{o3R'b4)Mt6!r;y4\|\XOF{}~T7pLq5k& rO6eR(ܔhSevW^]\kRxKŴ,tāZڣV9Ku}f\  W2D @ @ @ @ @ @`@Yb|zD0uA]ssQ Ͷv,L1*]wjl՗kiT.$QkRS3nYvM(KEOo-qR?b?+=ާ߀7Gt.YeHpSGbSaӡwIs?#)ses?wo-߆IbEޒǶHyy*-VƽC7g?k&{xⓉ`́%tvŌp(i @u0  @ @ @ @ @ @@_>=61cGl?m7b]aZ7M,5y>:ab}:Sa&xq+{hΞ\> } -/Om(}t];uy{ga@lJ{a:uDrR){;Q>mqABaZ緉geq8VY _GY9%DYH} d(&+m'ggp=7`ܫy'H]ٯ~߷.ytvt8d8jnuM<%Ǽ~_/sġ{:2}UW #aZ T1qh(֟I,Q5y^bs^Hgɺ ={<]NʐK[Ʈ7wJodVS~Dn&9M?3 gB~{2 @ @ @ @E@#g IDAT @ @XKI9+[sx_?yа.}vMk'8)=MKxFR+cNkt> Q2&q.vRK~`b2f;i`R>.Q\|lc`lo>e}3^s-3}%>lg.}u.Yk2~Vꉲ`Sy/W{lW2<9{圎 Z .ojM\ƽМL.8o'J,!ViZF՟$ @ @ @ @ @ @c >d:41VF#\ͷQz2f"_D/֓|%(!@?i]q)j\WsYg#/+b\ٔ8mϓ(TKO7)QyWfs_͸g/ @` `  @ @ @ @ @ @X '.G.qt*ޟN|z+}}_}t]uxQs';i'L @ @ @ @ @ S{Vi䣭3{ٞ("3P`ZӲ L>.iO7W~'*qNO%ޝ[.V"(Y!@L Xlc. @ @ @ @ @ @ @ @L"qK @ @ @ @ @ @ @ @`,1KW\  @ @ @ @ @ @ @ @&D|v&@ @ @ @ @ @ @ @%m2W @ @ @ @ @ @ @ @,1  @ @ @ @ @ @ @ @fIbt̕ @ @ @ @ @ @ @ @`"mLgg @ @ @ @ @ @ @ @Y,]-s%@ @ @ @ @ @ @ @Hbٙ @ @ @ @ @ @ @ @`,1KW\  @ @ @ @ @ @ @ @&D|v&@ @ @ @ @ @ @ @%m2W @ @ @ @ @ @ @ @,1  @ @ @ @ @ @ @ @fIbt̕ @ @ @ @ @ @ @ @`"mLgg @ @ @ @ @ @ @ @Y,]-s%@ @ @ @ @ @ @ @Hbٙ @ @ @ @ @ @ @ @`,1KW\  @ @ @ @ @ @ @ @&D|v&@ @ @ @ @ @ @ @%m2W @ @ @ @ @ @ @ @,1  @ @ @ @ @ @ @ @fIbt̕ @ @ @ @ @ @ @ @`"mLgg @ @ @ @ @ @ @ @Yq&k @ @ @ @ @ 0e$7=#ћ7or+Js'H8e܋;Mc̱# @ @B`!8'A @ @ @ @ @+e'ؘ- OY:43):gʇd߶iY=J @ @ֵ6ur @ @ @ @ @-+.Jܤ俗(tF2?VԶԿ=h?7$ʘt| ̘jV} e @ @C`UCY @ @ @ @ @ @`~ޔS.qqI\1 _80'^ Q5nɍOŸEޒ.qrN\9c힉$6'Jk-Ƙ# @ @9XX9  @ @ @ @ @ @),b6}+6l{~Q^̦Sk?_0Ȥߣ}sbA՝ӃVi @ @+suN @ @ @ @ @ 3~=V,Tܨ<_fQ0\h?FiHٔ6Ls;1 @ @ 0ۘk  @ @ @ @ @s,`C`xoQeԨܿof(|=c~QeQkFyƘñm  @ @CmEw @ @ @ @ @̷`a[Dac٥gofo(|f3oGƝ=qcV @ @yƼ\iI @ @ @ @ @@AÉ#n4޺pr#%P˸yR/4ooƘ  @ @Omuw @ @ @ @ @[ ^ iF~~2 ٞ/=xFd1f @ @̛vΗ @ @ @ @ @"{_$͛7o|<^el7ʣg4mKvc1YxK2c}u#@ @ 0-3;MkYbp̑ @ @ @ @ @$6Cn$JڜxSOJЪe5 1pl[ @ @O`3&@ @ @ @ @ @@xq7JݔC>_2Ϲ_&%}ѾU4  @ @̍ssN @ @ @ @ @Y;i峽~]L|#d}6g)q}&g41W4  @ @XXI @ @ @ @ @ @`r,fr &p0Bqu6`Ƙ]X @ @W`cff @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mtS IDATi4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @ @ @ @ @豀6z|qL @ @ @ @ @ @ @ @[mti4 @ @ @ @ @ @ @ @ Xl @ @ @ @ @ @ @ @FF#@ @ @ @޽U_ɓ< @ @ @ @ 0m @ @ @ @ @ @ @ @i7 @ @ @ @ @ @ @ @1, lc F @ @ @ @ @ @ @ ppm\O @ @ @ @ @ @ @ @a1l @ @ @ @ @FH ˲VzZfި;Z<~ثNs{9ˑ#z {Q.苳 @ @   @ @ @ @ @:C +UGE٭1ho0<VDc^6EcudOzMgckK @ @5 @ @ @ @ @ ЙJqDwUx(EmjS2꫱nSڋֹЈ*ml>O7K @ @NL @ @ @ @ @ p |$^ <,NEpQϋ*ߊꎺ(ms~y(ofя㎨?5/7F*u]  @ @xq @ @ @ @ @ @3"xWx_G_c Zחowb|Rt{ b"p@F,.-/=ًD{cVƽGգ^PE{ySrע6FuFjQڨG5NYj &h5f19ޡkZń 6<&uWԃo  @ @)? IDATa?ϺwX6Gf{q=* @ @ @ @ @@qoDW݌3w&.*w7cwQOj i1V?ŜwFV6}m_X^~v իWl6^… oٟ @ @ > @ @ @ @ @889^ Q堍ZQrE uBm1='q&y]Z[jK5ݾ @ @ 96:[{S @ @ @ @ @ J B0^o҂yqYG36o{}Lւ[ԟTj94akܧ$@ @ @j^ @ @ @ @ @J~qNt["bCilPq~9l#.eҴ=SJ#ښ @ @H6K@ @ @ @ @ @;"h\5ER]26ltGMO.,1{m$ @ @t@Wg&@ @ @ @ @ @@lCQolGwJctEsvԽ3 @ @  @ @ @ @ @\ژorP6b QEfAo~holR{_g.Tjk @ @ @@؆ @ @ @ @ @ Щ~MK_"`~/F=?j0G9Ѹ[tKR{faq٥7ښ @ @ @ @ @ @ @txWh</6ZL)MR{f+M_-Zkg`"R[ @ @h H @ @ @ @ @ @@ Dh+UzQ(]w3m7f-RKJlDŝf4? 9-ꓱ߫c=}Q ,=ļKWEػ8Ek{B:5^o @ @ [R @ @ @ @ @tu/hLޘ!B/XQD}7Ʈ6GQŵqG4yu4Ύ:5pIh1ꮨD5;}s_L @ @3 @ @ @ @ @:GEGD35%꼨ƅ3#6!mp^՚wF$|h  @ @ PC@ @ @ @ @ @'ppq\_DݰD='?y;/ŜM8+w[bE1=/!@ @.J} =K` tE @ @ @ @ @c_ (N{-iq>1QO*5~#C:bM VӢfGø|w @ @#$P$l]˛kc[:36̧  @ @ @ @ @8*6[ڪoqAF @ @hlĂCy}WS|R=n|_EF^dq4#(P{ @ @ @ @ @ @ @ 0ZAYB ԘuqSkĮW(GӋcJ@Ƙ @ @ @ @ @ @ @Mrצ=ᨯf~rmا<%6&Ltؔ}nB@؆  @ @ @ @ @ @ @ @} 8Yo(6~)SR)61wnL17I( E|&@ @ @ @ @ @ @ @c]`oAGΚU0ir]z=uݘ0AX|6:{s @ @ @ @ @ @ @ OmYLyv̛8rqHO^GI@(- @ @ @ @ @ @ @{ cuMR_3}nč+O|b.pc,}6a8 @ @ @ @ @ @ @X`oA3>fgF35vUtvo4YVKslntM2cg?xg݊bl;%06 @ @ @ @ @ @ @ @(mdk>㏜5{̣)o5P~绮jz:_n|E!pcph>Cz+ @ @ @ @ @ @ @ p Y,~1R~æj&f_35vvu8+ϲ4yz7yF;@רM  @ @ @ @ @ @ @ @1'^S}Ǘox }j4ey$eӮvq.b=Vv߶鱇l/~ei Yrqop a# @ @ @ @ @ @ @ @`|򓟬}oI_\9Kw|Kjnftشxv>FQwo<_4ɵ?O~1Ug1nF @ @ @ @ @ @ @ƞ@Ѩ=?R~aOGFL0u)6R\JY ;ҶGiغYvF+|7m/ lc݁ @ @ @ @ @ @ @I"d[_ ψrc0ܘ2%:y'mۼc˖qѼ[O"\CFijwkw&@ @ @ @ @ @ @ @FI 3=imy3&3hnjJtIRkI=[kFoO¶VsOT9p##+ lcdݍ @ @ @ @ @ @ @yK_gqj{ՇoWt~䑧Sۛmq,oAFՌJ6/#) lc$݋ @ @ @ @ @ @ @S~ZmwO|k;v0hn4{">1xUEwmT|X p6R @ @ @ @ @ @ @ 0V.\ԗ7RʟS9"Kw|ZmS9pc֭ v˷~smlQQEFw+;TQB @ @ @ @ @ @ @ 0.X;y޼("1NtY+Kӧ~lLE>A9hѼm^^_1^k6A=1, Ǩ 5z7&@ @ @ @ @ @ @ @O`ޢeg4"d#~]eӦmwwwoGUގ7z EƎ"\㱨"pFSF8FU@ƨ9 @ @ @ @ @ @ @800,.S;eEƊgxG=ܞ>E0Ʈ+;NjzT;lc[ A{67D @ @ @ @ @ @ @ @`s.}^l^y/MȲtSKFQkFMۣ]T_Q̋)V;b(~񋘿aB ]zCY[e`*j֌O @ @ @ @ @ @ @-hѢgKYΎZx$^6+gժUT" lS$@ @ @ @ @ @ @ @1%hO0eRl)|٦Z-{i7tww?\aKt^ @ @ @ @ @ @ @FS`%OM= <>^)c#e,e>e7& lc}1K @ @ @ @ @ @ @R B6N{ R/PXsoK/*{XCmtޟ @ @ @ @ @ @ @U`ɒ%Oپ#??e Q-Z 5_6'p T! @ @ @ @ @ @ @ @ ,^x|Y?&|f)mMY)WXq;XA@aE  @ @ @ @ @ @ @ @,Zli7E*[eY-ڪVi=!@``a%@ @ @ @ @ @ @ @CXĞmKޒR>)U,2ܵr%_ekط}J @ @ @ @ @ @ @)0gٲ_Ͷ5,?7O}N,vD@LJ|¥]L3LAqmA @ @ @ @ @ @ @'lٲcn[򔦤G'KR׊u.zK!N @ @ @ @ @ @ @-tң46)ShdYWue.Y{a mTs @ @ @ @ @ @ @:L`Ƒ|wy:eYZk\|W=,#@m @ @ @ @ @ @ @ p m4:/6o;-޹/K5] EƝv" l0ڄ @ @ @ @ @ @ @5%K|nJ#hcz˲W_*{XCqp=F @ @ @ @ @ @ @OP& IDAT\`3{9yE̊,}rB=߯e a@% @ @ @ @ @ @ @?F1M[O>7ogYԕoXa1&@ @ @ @ @ @ @ @/hњ齽+R2J'γz|U2F@@  @ @ @ @ @ @ @=F1G3Oi~<)V#B6>U/_fſUXn #, lcݎ @ @ @ @ @ @ @FW`u#K8dYv]-e֭N=#@`m; @ @ @ @ @ @ @ @(̽)=”ϐe_ [XG ={w&@ @ @ @ @ @ @ @(B6|y3[R~L[f)R֕w_ꦪ{XG o  @ @ @ @ @ @ @ @`M"dүFFdY,Oׯf ,"@`L S @ @ @ @ @ @ @ @ \~oRZ*lTwoXs'@`;“ @ @ @ @ @ @ @ @46m}S3KK#`ڨvd?eڅqc "@`, _dz @ @ @ @ @ @ @ @~ w?|YlNUS6Su_v?& 0nmO  @ @ @ @ @ @ @ F[ސ7#d)5zJ֭r=,$@`7ʃ @ @ @ @ @ @ @ @@! 8'EF Q &nnl\_m6W @ @ @ @ @ @ @@k~ӿ|}邈xjՐ,ogz5~2 @ @ @ @ @ @ @ @h4M<=Fƭ-߰va_@ހ @ @ @ @ @ @ @@^ۗ/˲!26OE @ @ @ @ @ @ @ pd-yM3)ϬVY׭[#uZ6m @ @ @ @ @ @ @ 09agTE"dyllXS8Dmk @ @ @ @ @ @ @ @` d/:/ڨk)k̘1fM,#@q`G @ @ @ @ @ @ @,0wWy<5NYAe͜6B6*+ZHcmţ @ @ @ @ @ @ @;̗)fҝ9횳>> Q6:s{Y @ @ @ @ @ @ @K?kDƳ+?IR>j!-$б6:{q @ @ @ @ @ @ @܅K^ȟSYNӦ~> 6:{{ @ @ @ @ @ @ @ ^ڗR#7~lFFuE+ % lÿ  @ @ @ @ @ @ @ p[<6W},B6q9s{c%~) lZ @ @ @ @ @ @ @ p ,yQ_yQlVYZ.1c_www屮@@( @ @ @ @ @ @ @ @`h/~a_J/_Rvt<ɳ<gi' @ @ @ @ @ @ @t@l<!yGOZjƴ)Wtwwou(C @ @ @ @ @ @ @X`y0N+dB6g2 l,%@ @ @ @ @ @ @ @@ Ds[![ݳ,,ښ43gk}#@@aUԬ!@ @ @ @ @ @ @ @@ ̟z_Y-[;swwwo. l @ @ @ @ @ @ @8"dfj./ee)gG^v*c!h  @ @ @ @ @ @ @j-95O,=W˦[`F_@O@ @ @ @ @ @ @ @a_m^?ԫlm&MKka# @ @ @ @ @ @ @iKzy^w˳쯺Ҕkvl 0q8Ğ @ @ @ @ @ @ @ pK,y7TȲm$MYfMTv @1v'!@ @ @ @ @ @ @ @@eŋћ/gɄWj{-ˮhNlŊV"qacy< @ @ @ @ @ @ @K`޼g=KSA5w׊+]+_rƽq  @ @ @ @ @ @ @(0gmeo!˲)PO+V^!o`ơq<2 @ @ @ @ @@bI룞֪Yq7V}4=#<,&#z {Q.s77 @EOۺ8~>7iReTy,KؕVZzH?W5K6, @ @ @ @ @a(0.zsT폊[cKc}1XulGFD}66o΀s$@ @cT`Ʊͭ?OOuo8bʕ?56 @ @ @ @ @(\sD,Nqx(G5umjWF"vBOok|S\m ^.nƨ^W~hǞ{ @˖-;fE)ߖ4cg.^{a aʗ @ @ @ @ @GbI9h_EF_)2Nc @ @`"d#oN)$̽?e?__3dcݥ4W @- l-L @ @ @ @ @Ug/|T/*{!7*2~tR{_͛&R8{&@ @%x=}ٜ/fV|"dSXv) l#?&@ @ @ @ @ @@rcsd;4Rh>3jriR{_{KapY& @YF1Gs'+=Rٸ @mt @ @ @ @ @94v,8Ǐʝ}\RhǞnq`.lV__DuLkα֭;~]'@ @CK`ǎt?{gęU߮e_:e{f<~Ƭ*i;̙s'+  @ @ @ @ @ 0,~+4KAEsF#{n*]Vjس-}WG vy @ 0gƴueԌvcĮt)iBWK{zzneR:BF'}N @ @ @ @ @DƳbh{e*o_2`g[iqZmƆcJser v*GpM!@ @q,l;z^?N;l&MHğ=)v/  @ @ @ @ @ @`hgNJ룞PZ%;JvszrFix~S56{݁u/^z3[.\x`֘C @OhL}xַǓ/L)?d)}1b/׭^yK=#@ ػ+ @ @ @ @ @X89^ QǕF'Jrԩk[=< @ @! ̽)O6ybCޠ Kٗ{7U:ؿA @ @ @ @ @ ߨAKJ5'&l{ñgi{M @ p`Fc[ޖ򴨙ұqtdY!ջ76$ lcH\& @ @ @ @ @ @s :jBM{qeS9#&ǚm{\Rj?Rjس-t  @ @Z!lqkwص"K髩3dU. lcfV @GUt IDAT @ @ @ @ @..\vBilo]8&ڍy8w ] @ 0x/|?$B6fp[!7VXn  @ @ @ @ @] B6[7h<6SW.Ύ`6yvu=B @_hLܴi뛚YZU؈d?GuoXW3 @`m }  @ @ @ @ @ 0"hcb<槢^^zۣ}fmWg3>{mIǴ&>=_]QsSc @ @`W\qńy͝!SŔ @ ~cw @ @ @ @ @ @_)N5Q堍/ETo5h{Ql< .]n7c @ @`@"d? YjN`R=ްfeƈ1!< @ @ @ @ @FA`}ե^A=4acସ{[Ǟ @HhtmڴOy~yEٸŊ[XF(Ca  @ @ @ @ @ @` DFs?pP[D$=tʸ#~9{v&@ @;M7zNH"hґ-߰vu6FD@ƈ0  @ @ @ @ @Ǝ@]'z4ڗD==p;3)֯Fk|Y{B:5NñnC @-Pl|}}7/Sٸ5 \GzyaCyL @ @ @ @ @D^Ǘi21vvɭkDKŨ^uVq^j p=! @FQ{m”'U_{ @ @ d/:ӯW}ٸOf}#@% lcl}OC @ @ @ @ @ @ @]UҸo F @Pq(|E@ @ @ @ @ @ @ @C,X|f̗)=2ARg_-d76ͧ @ @ @ @ @ @ @?{egU x3IHBToTT*ZVVZTdrNN \& ֊jkojkV* {pd$|ke-ΰr]֤͒T6*]9Rx1dS0 @ @ @ @ @ @ @XlIQRyju#~$$@Tlc9&@ @ @ @ @ @ @ E|N*d_~|]$'?a>T_LmLg @ @ @ @ @ @ @+JGZI,z~WuL$@i! ƴxA @ @ @ @ @ @ @`z ,^YipzVՓo()tq8y 0$ۘ^i @ @ @ @ @ @ @LiHqF+F$8A"ƍ%plTU4W@n @ @ @ @ @ @ @Xls򜪛9(bys^﮺y 0$ۘ @ @ @ @ @ @ @Lj%˗? FJ;77}EvU\46E;& @ @ @ @ @ @ @$x'ԈϋD71Ο;*.btd] @ @ @ @ @ @ @X'=$ϯOsQo{{u#@l;߻S @ @ @ @ @ @ @8~bn)sJZ_0oez}gu#@l߿ @ @ @ @ @ @ @8˖~ K'K2cQo޸qَ˘Fl @ @ @ @ @ @ @&\`է6הTΊs6.9bKkF% ƽ8T @ @ @ @ @ @ @Hq`R^TJ 6ntfOdÆ ~%@mt @ @ @ @ @ @ @ 0nUif+˜\)FL^?[0oz~7adc@2 @ @ @ @ @ @ @"ɃiœK#FmQ{o9Dsloh @`$??  @ @ @ @ @ @ @t%%嗥j%~;#gׯ_A/ @ @ @ @ @ @ @ еW|D\RyE-"94gs^ m @ @ @ @ @ @ @E lTDR^g$U|G=y͛7UY m쯠 @ @ @ @ @ *qUj  @8+WgvƍV\4 p@$8 %@ @ @ @ @ @"YF+q"1t: Ήz{S+YK:;  @ @X|ǥ{V_JU]%wΪ7]_e s @l@ [ @ @ @ @ @nx[t8F̏>x|hAK)_] @ @`B/o k#~7M9u=7t̎$^ @LիuT9%9UV]b{go|wa8Tm*y%@ @ @ @ @ @`: <0ۢH3|{oUEq\ydW+jU\ @ @`VZ;45)L9/]kFd  @ @ @ @ @&8V~7%nXmNl%"@ @m,wFzsKIW\p04vk_T\4 0)$ۘ& @ @ @ @ @6ZI6I @ @ @ @ @8t׵=RiDYZ/+GF:HJ @ DdMuG?SYyk:R'mLh @ @ @ @ @L wCDvNG{x.h}jV(H1N @ ,_i[G:p$Jqއ%@C@ @ @ @ @ @C+7 #zqR*wj㾼3WЮ @-h4myyzKJGVfgf7mZߕ0LA6Ke @ @ @ @ @&@$vιD/ v$Ю @Ko-[J:*I#T[kGdS; @ @ @ @ @I'GEҍ#AǎnhH @Rј{]e)T&{RG/V^D 0 $ۘ/ @ @ @ @ @8$Hqz=/FE1憎k7F @ /dNsd9bF7o^kHde:  @ @ @ @ @V tkHqdܟqX'qZ4~;bKH @ @@ 4ٷǑ`cE)UO[7| @( t|D @ @ @ @ @!>>M6a! @ ]va߽EW=r$T-zy @`: H1߮ @ @ @ @ @ 0$ژԯ @ pƬwQ3Ud!USLoݴ3U0td𖝑 @ @ @ @ @ @ @` \q3w^lFTDծsᖍ>]m @@w H]i  @ @ @ @ @(s^SPqRKV. @Fcƭ;vaNKI'T=gs}OV]< Ѝmt[wf @ @ @ @ @N26*B @.Jq;^J asWrZ߿0td] @ @ @ @ @ @ @@ l۶/~f0l4#ƍm}i( mQ/Ek:T  @ @ ,^Y%lR6*]dߺG?wIQ$ p@$8'@ @ @ @ @ @K>lF;/ʫZ_#ߏhqdDX$C @8HqFlD3>%|CdX\wU]< @ Hq`}N @ @ @ @ @@DrDBqG9hQڛ[ 9ioP&@ @+dɊ_)95wT~RN?vqWwywV^D @HqP= @ @ @ @ @.XgՈgDTZ_Z_ds @ @`|Kz@i6R*Me|sG~Jq9o뻇  @- ~?vG @ @ @ @ @$9bk#Ύl_k|). @845_1d\rܱoݺhѮGCCO%@ @ @ @ @ @d7VI7Ẻk"ļ4@ @Le^PuHӔk7-zGZ6 @ @ @ @ @ 0 [Ʊ^I7rqR#E|'"E @P`Ɋ5ʚTYsr9~?b#Ϊ˘GL6&{  @ @ @ @ @@$h}ơixDG"@ @Xt)5%&[}EşR97.1L @&d @ @ @ @ @ @ @@Uif=.lļ[#%G̟si^^e @W@n @ @ @ @ @)*_z@l1qBػc @!I6NL_W1mhޞs4l\I6nmP$@4: @ @ @ @ @ @`"Ʃ芈D$U @ؽaqrݙS3{fmXa!@d: @ @ @ @ @_G$:T  @ @` ˖58ܵ"qIegH;g  @@W Hկ  @ @ @ @ @ b" @A`1i,RR3)# ٓszi݆ i6 @d  @ @ @ @ @ @`-e涕  @ @`/KڵYҹ)hcWy }o @td] @ @ @ @ @$XΰQ=˲ @#ݽ`㼈y5r~_/kFtc;. @ @ @ @ @&NW7ĊQoU?  @ @`XhD7FqsNQuѦM}{s '@\@. @ @ @ @ @LXԈߎxHė"ƟCtָ @ +V8=MҢ=*1YRY/ @$g @ @ @ @ @)_zB,̈FJGSwD슸+DzŗΞ4j @L173xcۋ#T9A߭R߿U0 0, ư; @ @ @ @ @ Se1  @Fh̻mǮsS)K#Ƒ^rټy50 p/6šB @ @ @ @ @ @ ?dcm;w!Rѕõy͖ Ry   @#H1& @ @ @ @ @ @ @ ,9醛I"l3ٿsHͨ_iUhU"@Ldgi% @ @ @ @ @ @ @@ \ve}85ʃ*=)Xy   @clc H @ @ @ @ @ @`cn @L+F1_JYUR:.Y)SQ[6ntS @lcd& @ @ @ @ @ @k. @L{+bkwեV=pSVpQu  @U$ۨf @ @ @ @ @ @ @ƌvOX9rga @`$=s  @ @ @ @ @ 0_^ǻ(bwG11vXǷxmcã OxT1?z_G|4 @ ضm[ϕW^ʒ%"Fss}OU[, @H11V!@ @ @ @ @ @xPE|5H 1Iyž[,Ẻ=q=jˣK;Vm%9%%^;ƨ @ 0NFQuԬVRJWNZ.oJ D` ~ @ @ @ @ @ 0="kdk#4 1s#1 9$ͱă?JQz|I{Jm#ڿQXahH @ZI6n۹%z*1NﰜؓR=l}; @dޓ  @ @ @ @ @aqG>7+ϊ83,;"9Dǜ{9)J:Gի="?BG{:=2b87l0k"EƜшgF @@^ԻŹ5%ǎ}ڽGƇR-ٺy?ܻG 09$ۘ. @ @ @ @ @CI!>G;cxv1oBkFVgGsX4_r@y+bFD+YJwkq|k,UlXmFps~4@m @Ywo4KY1T!rcKlT48#ك#@ @ @ @ @ @' p#üS#ΈxhƈD_J{A(/g'xKԟnOkO{Z[+|[qh̸|t @2忾xɊ򱪉6woZ~9e˖D]q  @T1` @ @ @ @ @O=tcS$~)G1xpgf bow'U}&WC+Yֻb,g hO9 @Lk%WY.O#ڧpi p @lcZ^#@ @ @ @ @ @ 񜫢>HlqS$xUt|AI[ہ,G,x?Cb߭ h:, #ZI8BſsѮ_mm+3] @Vw3$'Rx] @lcڼJ!@ @ @ @ @ @ <$cڧcmkV'hbw&pœbs4F<4͑͡ml+VnQ^ܴiӋbaysNxC @z|`)ZfGVk%<_2?[lه&N&$8DK @ @ @ @ @xDiQ&b=<%F3'EjQHţqVŠWŞA :uGnoVb\~XX @T30nt]ǾZOΝf6/`$ 0 J1ߒ @ @ @ @ @ @` $=R[yZO:iv' S"ΌxMD+!Gzi7"JuD[9A$hWqw[mvbnm"g͜9sό/'/a_ @?f;_?08SIόw<أg:t'@&@$mgrzS3O @ @=s IDAT @ @ @..s0<wV|~tZo*^0Xvu>ٺG{se @Q@V @ @ @ @ @&6(__V{C$(m*F{5=_h*+bWFqu6}urh̬G\p'@ 0\yRS.H2ߓZ)}9KgH[7l !ݸL @d: @ @ @ @ @D dܔsx#TU1gEyS}Jg2rJX2dqw  @@o'F;#ƛ~6o @)PՁܒ  @ @ @ @ @ 05"g#8mxw}C=9jh{fl؈c"8ϞzTǀocͱZu=:.mW  @Lz˗?d`Z]Jl|.s$ظ=]><L @Ls6 v< @ @ @ @ @@$F$xJ<5x(;3!1㣌J:OWroO#,~1?_;#xR[ʊ @&իTspecUhNiW{M7UY @@7H o  @ @ @ @ @80H㭭{+ĉ=d:rkdODw_Ϗ{M1u_#6ךnO;6wG @Xq`ٵ"rN39U6w3oӦa @b7Y  @ @ @ @ @ p"1ĵVL+ι3we򌡃+{9{P|0a]/2\xA[;  @L%Z,ܔ*ww3oa @$Ʒ @ @ @ @ @80X"j"6Hx(sE[ﲯXqOcJq״.F!*[u?gOD' #b519qyqo##~qm5bN+ǺVĺG|7[ @Rŗ\2'p*njk @" (0  @ @ @ @ @ 0VHc/a ѷ dpn88UC1alju[I;>:a Z @~ \ve}82ĵUZI6>SYy󺫫,` @$ط @ @ @ @ @ؗ}1fGt&L)5F_FE2ިL @h4n۱U!9}$څ[W5#@dcs2 @ @ @ @ @{8\/#wWGQHqW۱1. @&@$٘}W7USx-.k%s @6G @ @ @ @ @ 0N8GK>.쉄Eۋ#e6@  @Lm۶\yU,\^>I66o^J D PY@t& @ @ @ @ @ @ 7n/}+6ϵ  @8Fv/KYWr`OU]< @lcbB @ @ @ @ @@w \bӢɶ݉y|ǀvU  @8dcYY%U}|N?k9]߿U0 @`b$ۘXO @ @ @ @ @ Н1Gmo#̌w7:T  @8Kk3>6tUN=-[ @6U  @ @ @ @ @.k:{x?4wG\_k%Hc#ΊX1vw{2 @Gws%-<9H߿W0 @ Hq-O @ @ @ @ @@W|2NN{(ׇb0l8ʵcqiSNeӞr_-\p^* @Z@Izl @ @ @ @ @$ 76FkcϗD8?.7c @Sw\[Rz~J•s~I?=z} @b6 x @ @ @ @ @@$p$Djyī##:;"VŜvv @ 0qK>u 4"YWZI̟HqWuL$@8mW` @ @ @ @ @L7H+δxcN񨈣"7[ǸjvLv @ oUi暒葒sӏ"N{V< @mL7g @ @ @ @ @L:HDZ ? 7l %@ UV:jKSN疒rҮRoIs6nTe s @dS= @ @ @ @ @D e<,c;_|:n\ѮJ @ܽJJSpݙSevm%Xa) @D@i" @ @ @ @ @C' 2Z7 FϢmG}1Q?m4] @X|=1-߯"jiƺ-[.A5L#@FmL( @ @ @ @ @2gƓOGM#E?ˆG^?/֦H @[w:7,rTꁘf}}}߫9 @S@^ @ @ @ @ @+pZ>_Tſ/r\1w[74Tw#@ 5dcwl)c<>c7SIO3sck_TY @- ~NG @ @ @ @ @LQ[-Ÿˀm/nk?1ʒm( @LoH1_[Rsu$xp$ڨr)k6n* C mt{vJ @ @ @ @ @@gq_60 @dcƭ;vaNKI'T>DNg7o^wu5L$@6U;( @ @ @ @ @PO;V}lG-uU @J`۶m=W~˯h6˅)}̸M뮪i @]( FtG&@ @ @ @ @ @`Z_{z۪DsΏw QG] @tK|IeM)ʇk=-7^Yy   @V@}N @ @ @ @ @ WZ$?F|{1iQyw{S/  @w'P]u)2LN$ F /éG bMAC' < ($  @ ;= +骓>g}o?'kq6]]~U/RRy6* @) O @ @ @ @ @{cuLǿepƲ5qѾ?Z|/x8tB @3X`mφ(*/#Պys($@ 0, l?  @ @ @ @ @xi~TgF]/>mu{ @3Y`ڍ?C7"]]u;cV۲gW۪Ρ @Ha#E @ @ @ @ @ @@n>7J_]+= @(g5ټH"hږSo`M @m @ @ @ @ @WEQh??=66TSB @`Z}FQ<OZnU:^% @1'^E @ @ @ @ @ 0qo9=m8X  @LKOj5/U1rʟى IDATƊel#@ 0i6& @ @ @ @ @Uܸ*u؟h?F @` tumxJ+gsXO#dcj @W@xŌ'@ @ @ @ @ @opC! @f@O˛}Eʿ{kU:|Wsl[|G*s!@ PU@FU9u @ @ @ @ @ @ @` tumDHƯE wjŎQl0 @Y@c&4 @ @ @ @ @&s.-[c4 @myhcJũ(TH9+u!Njܙ @@*l @ @ @ @ @ PU 4.+"8]n磽<3͏VnU6 @EqN\HRF?~YPsps @mas[= @ @ @ @ @3lOv~.vΊ7E./>BCI @ i4vGƵړR- WmU @&G@业 @ @ @ @ @Y*O3\ Ƹ1Ѿ-کṙqN @`2ƊZR^A+#4kչXs`w=UPC @`mL  @ @ @ @ @5ݱG[8bQۈ;%h=GaO @`5.R|ࢡyLynEmXJvjцH-v}T]'@ p:mN}&@ @ @ @ @ @`  (װc}U^Q 1_p @9.P&ox{sNG}h4xoZy]l[X u/TC @)1nF @ @ @ @ @L8D{po~^{.ڭў%EWOav @(W׾O_zvF~KqQnwbS]̹4?]wύx @S`t>{ @ @ @ @ @ @` `GoW7(ZLj87LJ?1a+ @xTZm|e+mweQK_iqz۫??\x᥿t7EQ'>"zA}AΝ7va @6d @ @ @ @ @L/xcq8oAǻ/boɳ;/㫢}! @Gtm񩋖./6Vw %ֿrV,{W=_ExTce[Q @^< @ @ @ @ @H >b, G<ҟ ڧ>8 (/;bS @'tm:Ioy``N9 @3@@ xI @ @ @ @ @.PmG<ŻFO>qydQt @8.02hc:/Kfm6VN^K‘;ӓ4=Qig'@ 0m̆h  @ @ @ @ @L%#q"Qˮ2cbds @AǟA}*bLJE\.xR/:p#\۴wnbO @`6 ۘMoZ @ @ @ @ @J{k(} @hA8'kf)aW8^K_⨁1ʱyϮ6 @U`swպ @ @ @ @ @ PUk>iltw;$@ FڨEy(ʟ[ajE_Qc+7w_77~Պ⺽{w9~ȟ @fYB- @ @ @ @ @I{Y};/WBÇQSky @` tm|+w;rvϭZ=5͔NQm]s:}_Jq5nM/~]v| @1k#@ @ @ @ @ @Go F ya|}kߴFo(7ZLjaN  @@Q;oժLV3q}\[ǃ82:w`9vG˹ Gr1Y%@s܊- @ @ @ @ @e+;J_#pch?q}XۈoVb{ @~k6Z}}2zR,YpLF?.Ƿ?~Eơ+zVrpq @BaZ @ @ @ @ @"hG q(7ć#d8~{oiؗ9n @` tu5Zg]d`"~[.*)ZV?ځ%K+25Ğ` (6F 0mo @ @ @ @ @ @ 6nx#͍tXPek\̫޸jժX(kPeF(r @1'_E @ @ @ @ @ @ @ch4gwpOέWFtJZ^׽/-C2ƵunVh<Q^/RF 0mo @ @ @ @ @ @ 0^߉Ԋ=36ƿ|o`=WoVtn!eF~BAdsD 0mo @ @ @ @ @ @ 0vFྃ/)玽sd>{wΞWpFQk5NsB @sT@}M @ @ @ @ @ @c[jEEc:qT` `т{O:1g4&, @_@VH @ @ @ @ @ @ڵ[7"]AUf9juł 7n*!@ @`bmL @ @ @ @ @ @ @`tuVJۊT|Ws(_{ g% @56fͫ @ @ @ @ @ @x_tMչr3^l޹s秫Ρ @1yf&@ @ @ @ @ @ @"ӳiC͡m񼪏!a``ǪΡ @1@ @ @ @ @ @ @TgCcEcFRqUWC @ ۘZow#@ @ @ @ @ @ @i {ᱡ%5~=6}k'RΛi$@ @ '7 @ @ @ @ @ @L'Y<>T,J./Q]aS @' lc,D @ @ @ @ @ @TwC9MJBF~!ԸWɪUt @S8 @ @ @ @ @ @ 0sn馅o8j.k @6s@ @ @ @ @ @ @N[nQ[EƓ-0H8s6* @F< @ @ @ @ @ @<gbѮH) -_co_?  @v< @ @ @ @ @ @Y`MVWāRʯ?o;w}K @-6f˛ @ @ @ @ @ @Q[ "gU!9"oٵ̡۫ @# lc+OJ @ @ @ @ @ @k֭t,mtt06!KqL @1c_'@ @ @ @ @ @ @tq>E*jUrJwPz5 @\a3yr @ @ @ @ @ @)8e IDAT9)R(ƿx- ;i* @ 6f[ @ @ @ @ @L@yuL{CEQ5[DҨyEvNDT?֘1o1on  pƊp5,U y_i;nT-ߍ  @`a j: @ @ @ @ @(1E[mybv^έ h?cG';9Ov/ @馛q]h!*=U_L)7~߰jժq}U" @i"H @ @ @ @ @I B-.  VhDq|w;g-ƿ 7v?p2|Mt @F[nQ[)=)rN"o_|k5{O @13ߛ&@ @ @ @ @ @De1qqiDUQAFxj4qmVyVFhn17IL ޟnHŕUB6'DFe#@ @ 6NpB @ @ @ @ @)X+!KB#jG$B6mw]}zkq<6sv} @iXۻYPsG3R#-mi\[ @ 0mL @ @ @ @ @ 0QS{˽bF;xegFG ^2?"lc2| @Xݳ^9rRߎ;>_qe @!ase[* @ @ @ @ @F DźkD[q?MѮt djKhg9/j2bd9N  @!ӳc7"\R 9]=7 R" @椀9- @ @ @ @ @ ΠWyW?qh}rx:NƜ;&@VhyTw^\>X {wmU @ @!aI @ @ @ @ @ @@,#d~1ϢǏvxgŧt1[8%@&[`͍7..ڈZ9W~/yӞo 1U @*_Nfڬ @ @ @ @ @* ?Ǭv$ z;ώwwt5tzuk{ɘ=Do߾3TZΏpV{wպT]'@D ?pe߿%U֔kВEk钅G !@ H/_sgY @ @ @ @ @ @$ 1#Ovz²p2q|zupf;x  @L8|؂\l*}U%Zx`N( @ `OO43zJ2W  @ @ @ @ @ @`2蘴c 8Q(CZԶ&cΎ=@p,ܹzg{zz=c @LXۻYPsGgT{|(+-w_9T @ @m< @ @ @ @ @ 06:4:G=<2wI?07sS @`"֮]]\lOE*EPJ늅n*s!@ @XmU8 @ @ @ @ @x4@ѩF ߘ9ODF @cX~eű(xa*Rs7UM{7 @ @`mL  @ @ @ @ @ 0XŽS.0Xűɘcz @@U9bpKoKcU)߸kǫԫ!@ @@UaU @ @ @ @ @ @@@g0FmQ||{sIwq\NƜ#n@oǚ_*&bxjc#dE-߻{?  @ 06R۽ @ @ @ @ @ 0{s}ہ~2q  @XƂ>OƜ#n8@^ݵSQlKN1v9r-5W~ժUQ$@ @ ۘBl"@ @ @ @ @ @l(ޜݱsxEu 뽲ċ;މs~ @ tu{nH;#d㩏>rEJ;޴gG%@ @ ۘzsw$@ @ @ @ @ @lh,'ñwi\8nNƜ  @QOh팠gr]92XXxG__},0 @S, lcݎ @ @ @ @ @XX[;l+4xQSqߵ2v26 @͗5m+RޚP,ޭ[w @L@۹  @ @ @ @ @bʿ~q'D[mSGlı":7w\x]sq>9s @!8X1%%Q훳\OB%@ @t/>}U @ @ @ @ @\ 2DƎqc|0u>L=>)c3||n2<N @ݵ|hIEZZTrmR @C@PwO @ @ @ @ @^UѾ}x[#\GnvMvQvmj|}2~26 @h4  @ @ @ @ @ @B{`igmJEWS rw}^ @a=Z @ @ @ @ @ @sPh;p`%"h*9~``۫ԫ!@ @L1ޘ%@ @ @ @ @ @ @@GHVKW,[}}}a#@ @17޳U @ @ @ @ @ @ 0K`3]HϬ=ѶEk"dh9 @ @`& ۘoϳ @ @ @ @ @ @ 0g֬[miQǫ-:J|튐PE @/ lcC+ @ @ @ @ @ @ @` ٴ(^ˬWXj3bQm۾\^  @fY:- @ @ @ @ @ @"nݺ3u;ŕ֕S}@ @ @` ۘ/Ւ @ @ @ @ @ @FcHicmPl-E j[o @6۷v @ @ @ @ @ @T`;r>2^7^R19忬vܰ @ @@J6S@ @ @ @ @ @ @I馛K#hqUns={l*j @ @!aI @ @ @ @ @ @ @ ~(qq\ݵ @ @ 6NpB @ @ @ @ @ @wFwU1tgocUPC @H= @ @ @ @ @ @,vݺҮHxN7R.?kT~ @ 0QYt @ @ @ @ @ @ @`|֭P(/Ge_u|89n:c[o< @M@؜"@ @ @ @ @ @ @FqFƢQ=JglrQ߼g/ @ @ 8mnL @ @ @ @ @ @d EshwJj)_Jw3UV5'9K @` N'>"A Lw? @ @ @ @ @ @&M{X|q|w³gl;tE' @pFoQcκrё{nEN?11A @ @ @ @ @ @ i4n">[0ޛ~C{wW[o< @&ڈuբ}O5i#.䢖<5ͯ/zİabWUCFHئ\@Ɣ! @ @ @ @ @ @%h4kVkCyfys~s|~Ϟ} @eAXZ(RtM"Lvw|k L)v3 @ @ @ @ @ @&H ˩hm*sׂE3U @eF-Z1UZ}6 \">;S" lcJ݄ @ @ @ @ @ @XӽGSQ]3ກoT @,8~a mLܚ˰p+C6mL( lcP @ @ @ @ @ @ pz7~P,C6[Iעqů6* @sB *9uiAH2lX7yk5  @ @ @ @ @ @ 6 ߯FFksˇR-߸;wg @@Q.6r(sʹۿ{5yE@X!@ @ @ @ @ @ @`Ɗ^_޽*[\fNO[eξ/Mܐ @ ϼ'<\+[te<ӕ~leGg'0i6& @ @ @ @ @ @Tz~3bKԟU壾 mڼݻWgPC @` DƢC[rN+S+W",ϋ"]xA15]G[+.)/b9ӝpZz^:=צy9NyRď8/6nt8raSN @ @ @ @ @ @6\*Z;T7})m^|\{GSk, @ p@^zь0@ҙ5 }anۣzS OIƣOWIǺ@`2mL  @ @ @ @ @ @U`ƍ.{qmTHoZ0/o߾=7l @f@#TPh EZ+;qɌ]o;h*zZM  @ @ @ @ @ @KZ_느hi'YXQ/rq`;Sh, @-oS89lEFMg*5.l|vOk:c1v+#  @ @ @ @ @ @(p-?FJFLq^s\{vmxPF @`h3J+"P#GF@Qfʩ>Axg'hͦf6 8 @ @ @ @ @ @fڵg[;rz=;^^ @ @EӷԊtEPlArE:"Nb&%J䔎kWgJz›+ݳt;&43gn" lc A @ @ @ @ @ @` twoxf_]S3]ѶXOl @Nk c eFjEvGjGdDmL-4Z_5"ZK]1/ݙV-Q ڒhgtUEo%[;pcz LI6= @ @ @ @ @ @&f'c(~og^=XmU @&p{#L+Zie]!jɑsYΏF`ǃy9o ۘB;ϼέ.uVKݲ,yj; qț0d2ofxI $Ā-[vj@HM̞` c6WlySlުy떯ZKTws~η+8O(@@@@@@@@@@@@f]wݕ={{buo]۷}@@` xw;B%RpFR @ M$aD:hOiU Pݣ~Wa+&U Ϩ %[FAOmPݶ}MJINJmXXU7T>C] +@z4@@@@@@@@@@@@f55r6 yוs;wn"@@-D/SpF!}V)an 6E4Ps q~y.\iamXF^5 HۜavjiƀYFƑV(LaS@@@@@@@@@@@@k֭{ETkY뛐{ˢ-Ew@@Y*}g$P#rH ((L%Ð7&5}Gy$њwᅛgtiGaa-B6~O6AiFz4p#? ~e 1~L@@@@@@@@@@@@XfvXMαp)Lr;a             0%bq#qtͫkwo~kהL" ޢ_XpPPBA(}qNly^jasa[ ]mΌ13~6^            M6#Z󌅭>@@`*nUYa j,9xih$Hùj(P#\rK|`F*@X8@@@@@@@@@@@@i.p7ҭ`ޗxs䊛7o~fs>  顣BSSB3lgx1A @Ha2P@U[O\gQ@Q 1j*ND@@@@@@@@@@@@`z lܸm`(j&Z9 y)oر=c @@N*еίPZ^ Pƅ0xᒾƩM'|VQ aA]ϩ[yM<8C 0[ۘ?y            0kC"uZ{&-߭z.B@H-3\0 LB3V)b w/. cj6h[|'@` 1~@@@@@@@@@@@@`(dߍ#xy=ػ`[P\ FjpFi蝬ö41鐣45)P#E..dsT< @ ?"            ~o)(cs^"}+^O^}#~o  (ΏK޷ Q ^UA}4 j(p5'jIsr.ewu{aCVJq            @6HnӢȟY9?zƂ?U P}Efʑ44:HQP0 hN;h@xf540w] 總;#3QSeN            Z^XW/ *i?^v|UG#?lݺ^y  L8P󻏺 PB5,PC޾s̾,=ZPk{b@U ]Nչp@) lcy0             ! e_Yr8mذҕ[3 8'"]W>ݴkml" XN.RDwͦ`U!˓( Ѩ&id5qzh1ԛpF99um ͦ:F=cBN            AK_h߹ ho7=|O7^j ܈,p}77SF]t/|no~6:  ~ߍ+]' t J(]671&ӥQ s }΅f댇l0 0u%z@@@@@@@@@@@@QcE_UF.5ϝ?z>~7_:o7Pyέyxmݱc7v!g# !D/SF5PCE ((bN IDAT4􎤷$̖C Wa'Ը@*$ ;ǽ 1H6fi            LOAK%Agw~.좨,_Ţ;rww~RlC9lܹs?w=W! '}nʕ] _ ְ %#$h$tORƠOsӨk]x߉3@NGZ@@@@@@@@@@@@NC qjm|Eag{n.ܜl-hcZy-q'Ƿz'/L@@` J ӈ\4Lq~ vm6 ҈FjjsM=:Aΰ@Y#@ƬQ3Q@@@@@@@@@@@@FeIFۊsr9s\TQ&FmiubwƙgYs_LTzs|sX@@`v 7}{g'  0E?g[Y(DCz_ӰP-KT H4s+zzX750PWϻp[b]@R            J8A_EK%AQ%UDzZ?k2oQOGqpwl" cy4rp R\7 4{ +Uj$\뒹+ 0[ۘ-?i            (ZrK-.|E di;V]gؕ*i%R.a;-M  0aѷG!Q zjԛDK2Q^*Isz 5$T#VF>…ݞeGt/NFm-C@@@@@@@@@@@h$$r2 ַC}KڝׯWa)fZ5bӀ L@+(wʩ*5S@@` <;[U(LCz(M4PF+Wl@sث  s@ qw 4a3aD            3Tk,iLVݹWv9Vb"ҤMv\ipz>R}ÿOεBv}mlr@@)PMu@A@ tx ptɋAvk*i*T# ,T5wy^w( %@F]l\            na]:Njҵݏ>7vgk5ej9lj=~ [_mZzrz mR@@`t+4ODQ~Aq&m Flƻg4P js.\*PcAGͰ@a@@@@@@@@@@@@WX,9|]q6ig,Eg$ǤmuNmeh = =ğt~ @@`Ej0Cϻ ]UZBҐRFܰ~CP'U]vE*mR@@~7w+u_7x#a_WKݻ! a% Ps /?h?ƃ 0ۘ?f          Ltua xR=kĽ۵}U?~[#a45k7fToKƲB6 8eWă |VmIF8hc}4!AՒjYB7@)(`;O(۹#]AAZI}ʤjGA ]DC|BmjhaP9 Xy{]MaC @M@@@@@@@@@@@qqO6OjMWVU=_Et@ un+y>{}ӗ5o+=5 쓯Rr$h׭=ѯZnXFF_QR@J+#i$Xc8P#v+^Мbx}ͣǂ4,PCoa΂5\89=( Lk6#           ) ۸G#||8yZ|rj[z֑Wt|oWݬj\E՟W .p _Y-Z u>,#ݣ[}Ͽ徣7P6hYc!G-xВmL%%@i$pp|Ea@8 pt*m]^# ,Tù. X0ׅt9" 0ۘ?U          L/6$kaS8m?Tu-FOϨUޯc9h5: ) \~K]mgQ٧|j1Ou7|[5ʮ_n H6,hcHjHڤ  ݏ Zp+Dp) 8dh$󔝤4Š4QjBB%y^|{^lp<@) lc y4           0~JsJә3.o=Z?^ 췕_}Z6H@`\֮rZ}uo+;-آ{l)_tɥ[o]A_B6Ҡ &hC@F'}x[W\GEa+PCa5.T3_eE;CFj(\#)PC];M /=@@@@@@@@@@@_3>EzG3~@;ӰPY>@`W obߍ]T[~Mwܾ|yw[}pϫ'Պ}a}վmZ[3o:P) LO6G+ Ҩj[B5VK>9rHޣ1zRW70nO7- ZSq           ae'<#5 UoUC-qƶR>w&u-"X}>|FwmcosTIJ꠪mXІo!  x[J_Ԉ,LCU_}_/5$jEQKPݧ9|5Z.psi3s@Wn           l"pZaZna/;ɺ_ 85C^$nݎku.| W\8㝝Q+ OaK-lηB ۰ װ hC@Y PAWٝ\5j(PC{:} ])Hq Ұ@Xm.Puu4\g|0C@`: 1~Z@@@@@@@@@@h`-gxv5kjU x-A~M̻?QDZ2O},sОIA$P,[X}LWO'>߂mB6, iFI4l7Ґ B WgV])LÂ4@حV/i/n 7uXs]q [總t'|?M LaFˍ@@@@@@@@@@@Y'pf:k[JտU=/mX(F8~3"'PFӡށ.ɹ-s^;Żo_;ܰZQ T-lö-(m 0(L0jFk8wF:ZT=&=g;@h =ok$G! ?1t@ 5ғ[Pyi~ԝWVۓё\ uCsgTm壹ʑ򑠽,-k- ؽ~Ոy@@@@@@@@@@@fǙý_S}FRU?]uxsCElY٨h1ac#-ZՂ{uOu/ayCϞ|# 87JT9hΜ# Xs gK4*vx7B`^܂Ђwwi?E}Ž}~I彽GqS{ @zLvNA@@@@@@@@@@@t 3١vs_O[9:9Gul~zd{MHf{һ۷ocE_B_ZvW'}<^$p ~Gůxy7MA;n3KFBF2}(A@`b^+(=`UFΛاO {Hwlq΅K[ܞS1wE@ 4o'@@@@@@@@@@@CN]ՋTz:M#t+sݩ5L?韪;S]q=7ܰg+qe־ }~}7MmD1Q@`fTI4:B11qöB4=OeM s.3~v:́1" 1@@@@@@@@@@5ZyMꨊN'VqvsnK~=٦T_hy7ڹ[ރ@*s]I$T[w+"4 & Hi]B5`]s%@8a'a7           |UOI6P9 xl؆ŨZ3",XUhŸo1ϟoc/j@@`¢o5H4g+1JiM sLO5PJ5b\:sT?8@fa,@@@@@@@@@@@F=b`j; qlxv^ZZ]kxcߦu9Ӯ[vv1[@Fxr++%p( (hKF}:jh}5Ђ5\8_y[FΉm@@tXG@@@@@@@@@@@ 1qy(ӷy ۰pڡE!p 3+qBf?^Ƿ,ZWد @NS.` >JB4:@ 9vSok.mOzweQ 540F.\fB@@ l@@@@@@@@@@@N[{MTq\R{b};[vG}Fv_+Hz'cuw2} 06lذx_yL;*o>ca v\ ) Tk^5vZ.VݠQԶOy9{ZM55:.vwS3p JYf           OwgOc*`'ޣ\ j?RQ8-2s>]bq}SІ;)j!A;oB6  p"E?4W wV)5[X.MHځh4= @ pig|F̈@NG@EmrRQ1[Uae/[uCP           _AI5_xړmT1~z5;.O6^oh!5#W{ l#PFˡށ?ghi}G?wm۶ S@ONЕ]5 >N-G^T;ӕc_\߰N*t>#ԜB >Z.psiyi IDATݛ@@& l 2OFv;T_e;6{\ .q17D@@@@@@@@@@=ZqD#:wiNs:vNM9_UMߨo)s#z>3 t wygko#wSb[5ϋػњmٲo V џ\A#HaZ5!B(.TjFT ǚj.{׵e1wu\iԱ3.@ߛ,ÊOQ3/Q[29~TvU =~U5P]&L            (j[Nm|joh#׊Uv: `f;jaMvo+ݯ7Ծ%/BuIjf@X S!3%}V죮vz5 3_~QYa v*(. Ь wy@6Pch-t@B-u50g5/s{Ϲ6p;   c|Dם`OU?K*'8[=];6ٵ/tQwvC(fͦŮr[WԻZ!_vMM~}р1#^'# 4ׂ5V{did4HxVsRZ ЂЮUs>^3@[.-4#-ַ`ѢExѶr)?s>8gΜy:@u__?>O6֪oV@sf 1@@@@@@@@@@^<2櫵U>ڥ?R;kl1fYj_z#?Xڵ_67kΝ۾^=@~7w+hD--ضڀY{FMgx@)#F{וSm5BaW^yC뿵XmW\϶\V6[ҥKsxɳ>+Vp PUz{{-`ETӠH}Vf:|skؔ$@Li2@@@@@@@@@@@V∆tt_ ݐ! \+]tz_s[{p T xzw` hxiDaޝeȕ 4׻dC+ P:ON8GQ.;\.J% H2ԶEQg$fmvN$s@m}#KvߢE pO>n hY`76+#QV-t#܇?L6&Sg!           [q9c-1v?VMwܾx)#V@ cpr/^1#Z4{E>QKzj!/jnҚ(y#G^;۶cdІv-Z)'% Hk;٧ju:~ӴdT"<+=zܹsc_B6/J*h![[T?w<  #@F(            0q߭sGk䴤hҜwoݺQ]I  eHM+_=vdM\_-q =K0P&댏]Y= +m$4taB4,01P¥j% ٦'mQ D~^v:GUAjض~V?pW뮻M~>gU?wc=6G}{? תe&êcPtd dg!           4 T=uUcZ ?[ݾٱ] im*_FTR幡Vvyn9 6V*glwZ` nmz\ HWkT"s * QXFҦ۹\.ַ`ggêtw^{/ x'T׫U+)TU{U- APN            X~R_EZWh}ՐH>׺y' 3Y?6JC(rhj-c]ݔsO9kbCj]Zs9eA - L3Z`F-4CI)Qݶդ 8vzs(VZm'4j nZFnqꇌ =' tiqשZ^=\m$Ůbn9TZ P 1e<@@@@@@@@@@@XP|F]G뙅k꓁ku\~!W(\VvD:HɖsmKk5yE!{th}Б3փ-׆>PS߻-o zeDQhh_ڐl}s;f4#9ƨd?kN72@#ٿ`Шn>I'ibxAIEZ)=߮I_o7&v{v?|:@A`2^A8            OX,?|-^3-"][\LOѝ+ шU4s&+T폓:\K?/?u9mr>qsNrȆ:ޥeaNX󗹽\:!KAhT*fX]1v`Jt?Qfvݺ2 ϰ|>o۶4q܏j?[֞ՏUM6Ґa&-K7>eT6^ #4 /@rG@@@@@@@@@@@@`F pyZu@9X?;\4ޢ_ 525 հV_U[Iz}'h];OvmI5A}~UGqvA -( YXB2B3tIcm/qZ`E0r{lTP543-Cm\oŊ=w}I8sZІeߣw_i47D3ZXU'ea۶OQ7)9icܑ&UIa            @ \ϾK,dcY#}ͻvm~:@`*huT"ZZZj"4YH]OG3OF9fUW]t%IP*J8Qhd?};8r{ ~%' $@C-oy@"b,Tܭ mՎ[lW?ssy6&"           O ZtV3Њ |pΝ[\L@yZUP |8f*Aw@AC#6 VjVC-(#5mQՎiZoaT5پyY? Е2:ޣWw.,4,5W!5acʞMksD)a            @XȆגuW}o޵k۷gv8P󻏺j}֭ގ$TùUZZs. t3~LOK/oaY[\nS(C?Qh׹pdҐ1'1fyZ0c_'vwsssO(3CAI`_@ۗf|Hx9s~ڵ'=_R6&Ǚ             '`!n3کQΪwZ-o7ܹރ@~ߍ[Ϧ$T+\c8X{Fl:Kjȡ֔y=v64,-v{r.;CRB3j H%Ӯ5^ hX~dOiG-y%a'af$m_wKKgFN#,#[˹EQ+l%ڻw'u^Zav}zL] /@D@@@@@@@@@@@@`J,d?ky:-D;dy ywOx8:Gep*:@ !gZA<IujiELmF֥v*bh[z}{q) 0!&7A`\uUM\L`f hv6DcsbXMKoFnўZ@_ %YXFO54GQݟg455%v[:;;R<+ Bk~鬷J:LN͹+7^1jmuяΑav=N !@d( @@@@@@@@@@@@ÇߥLkU;$-6:}W!Wg>j2ZyeZEjإ|AW]Wlw5(GdQ#qbimA,tnVjrmwQTjOknmTmB1FmP$ЧO_-4C?0 - o H6w`_&^ IDAT344QhK.9/8%n޼?zzݻ_S;{W\fmԀ} @m            LCuR7h]S! ~UyΝLa wC|@ .QF6\c0YY[hweF}D4.YtE v>&O+\kIxd[Гc}ZzlIYIh#C4ljsw?IȆ&\t}˖-mqұa>ɟuV{[^|V޽߮s1w S"@ƔP@@@@@@@@@@@@`֭۱Q5ZV%oe׎-_rgi X:%Z>[5qN:cU!mည515. q=T5wȕ{~U[jk6#oڴo}bQ'vFihhW@gg>bv-"om Hoǵ<9|G={P ÐN?ihU{|OSSS<3q Μ:3O-h jy oxAgz9ggA?>;^[?=_{?W 0ʔ KxFÃ@@@@@@@@@@@@X~R-jV뜴೾ZMu_[/=.D-PM[Y(LCAq` Is H@ITz\P]s- ZP ̰aao8`cx;ס5^o}`Mn Sફj:x~ H1$am-(OB4t0G^6$@r[@@@@@@@@@@@@`+j{3l!S=B6wzy]ՕH]R ӸD3X5o3}>}.[V:.vv_?;OeXdAַ jWaצ;ַ} 3FK/,QPF{TJ2; Ȱ kOlk"U[X^[Dn}+#߱FnşϛCO3O2-442jwR CE=Q@`Cmgťŋr^)^(yX Hv}kӒ5ի/=ྟ?w:fH*@Ƥr0@@@@@@@@@@@@`6nܸt`(NkޭM 꾳jIi۷}{p!Lk6A.2%ZxvP]rcu.b;ۻxZ.ոP-jsI7` [͚mXnҐ k4pcH,l#=fs(4Ub+xᘰ {fjmGyavGngϧ?j$C=N϶-4j+~! L;p鳱6P[2dk;ۺ%z[hM:2Sb|yWʲemNanΜ;QM?aϼUu Q'!           +EBh)nh4 ݴi\eIҊ;];|{pL#|{EWin>.Q$jeW<7JGYq}jP +P>wwlF?Z a`o/wL\;jzoYkSpk=p@[آ$1Ѧw$(ö^>k+`Cͱ%]==,F+ k[Eoj;iggfX9szlx^|~D ݑH6GmΧ! ge}fV8V(c5oK?GWۗ뛶\Xp+*ztv}حVԔJH^d9uD1@@@@@@&pUsnU/ ; at$4qF4bѐDDf4`ʼn1#AM2lgؑzj=TWttOo>۽[|HHHHHHHHHHHf $m#||7`IF\r..3A̶/fܐ$@+mgT6z9R ԛpBy洗 M9}PFBAᇤZ] -.ZvҠTW:.}[\ݵuܫZVWܸDI@559j3@$y&0l3in&ȎI~TaE2pm[a+PqSO=58i"v ,(󖯔J q +r Wxz @]ci'}'c̷ʼk5n3vjѯ-n2lc$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$%# "?xZCW{.x[Ukp 6K+!ETBg IvA X䐜y /_Ns~"NHd¾#z[5ފh CT /I3ZL~ҟK:Jwg>qASO-b*Y4C9j/g+p۳> 2TkЅ}P([ollڵktNG$@s"`,2Z%3 0ghi%*ȭXFd~gQ'ݘDBz: D4x FöLHHHHHHHHHHHHHHHHHHHHHHHV> Yhc"Hn 扉D"soVQfK}ZǸghy ;wKW%T*̀$#%f{ 'аmh@!R2>1u܃M՗;#{Rh@}lѾ{DVцmfL$pX PqXq`$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@k"uEAe}#E_F<;(7^>@GǼp1? BVyMHsL?," q8h(+@cYcݭXc+Ikc˯rb-͛7$VJ@?i蘫_+n~M7986WIFhOhJ3t={ L$֝,Ï ##Űr ԵtlJ3D"~"'к&2n?"G*'mwfVmr}ww_}}>~d&X2m,zHHHHHHHHHHHHHHHHHHHHHHH`-@WEyXц{h^72^X8Ҵ[ 9 7poH˙@5D?P#MxOz8qݹǖ5oh[j)Byg͙H`8sB.hw->jvVTQ68 L*M?ն XAyD 5Bekk@voVH9玐 VI2f*΀D#$X9ڹ HEw+sGg}LK7G^?1(!<>Kʦi;i=@L90گn{$(X <& #uhm p_EƓGH_VdEgos0$@IjyL F6k>lTϦzv`To/I-" -'2X"@9cX-kd >EٶaJ,N68Ժ& 0f:$; ]Z"4 We8PC%OyLOO8yPIuzz*%~J8?T֋rz"%H"                      X;TIDAYmIDM\0AԒ4n3 7R݄羸}k,ϔ?Mqwl g o{"MXM^*'D>_ko(ւ@QH˦x-UY̷EOT䳐Ԇ&̡]3{19tەlRH$Ta*kQG5.ўTgv5>CҌ.ԭ$hh_mmmGYx$(_VN 3Rb@, 3О(5|A$K2)V0[wnj #[F/$2 0iQƽpT=oa޿?PՌ:ojG׬[}}U9vI }nN:(YG#                       I I޿suyCQZS цJ68osL"I*9Ng2ѡ;&0^7gH`ax%d49Yf>rQ7zKXkD @҂kf྄@ۢSO/B.E XԧMhƆF}ȳ-Iںuk:J4kT ,3j㙾©;}.pCgDׅl[wߵo߾yc& 6jyJ %i A] RNM9?tރ?+cS6>^nD!2PWiFi4C4мhl}.EҋYo IT|f(Ttiu323&x^!N-2lm9u|I: Le5D$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$d5:{w]˻.((22̈́M‰6D2K FE]qg)xicw?6 MHBjyLbTBMd#J;Un):eԟ8bm-xUi( \pE@%ȥ}NS޲9'ݾ:AY詩 } agvȺlT̞@8 3sD)Θ=_nI!`Q"~H3R/TIU 2TJλQ?NGuWii^ی0#0Ê3ЖL]oːX_ ^-!o޲2\.t+b 2$sۯ"گ߉ IDAT}L4k;8Sk}߷ |ì0:zEf_S'2͋0rҌ@I3Ћ+P =RrߡɕiI8t\qm~JL$p Pq$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@UW]UOʅ~|x:zDDmF H%HD`-56i?HcŅ_CƁhSnL$z֬ROK4R P#3 O nZVH<{E2|ػ~Æ ~ f"{6b?/..~d/\s<6cR__9m> >c0 ޅzVm6-u\O= ̇zX⿮?V-R\7~em yD р8c|B30-$8FCdڧ ߫3Q11ͺl._X!Ӫ%@ƪ<1                       "pmL$aAůuzUQXd#=`6fy'>M k˺֙H`EhGr썚q3oĉhy쒉'ov<]HB 5Z-A N<I`:zj:ĚBբnK755hjoooZN7E3'@T_ZKg*@z~~~W$ڳgOZs'C%7w(HI0TYF 1|H4<#6h)wVc'&)vqgI@f3!'кxi@aQ)w?ӡY͖1|+L,S\Fd*pYe*2Dԇ< ۶mc|Vm梼(}Å.J/iQbx ӲnE*pH̤N 5Ok,0g!G%TCB #'UzQYMe,kf!&O򌢡u*3ZQ-~f϶1"!%}8F+ IX @ߤF!;цomt;8 ,)6?N$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$ \}#q#K}(~*xz3+6/,p$Ɖ6F181xC40!RU&M:oyc?i``+OJ%pm/^cFr"Lw 8q[y@vAJ :9)ŚPklA5ٻS>Lk $uTehv kx\Ib[ N[iJg:@tj] vڥM& 90*SeH5 Q*ɰ 32@ }])]sl͚$(#GIHÃ( z$p7 7j om}56n;WR[ eK˟G'                      X.S| > Bƌ[obdd'ķJqkg+V;MC|Ih#4-{~qO^MFsk 4%( L 4_ˆJ6TiKnWZɆm{Q bG mupŁoDEb;&ٍ;a6I`Pdy`                       B+v.b&_yF |;v$C @|nԮ{c/|u'/&Ev 'ڈOI!ۀ&* KHshZ%raN"[ц *-8?ٷԤ ?=}n"kMк殸X^<8VIzd7LMJUL&@+} gh"=elMwl9U_vpWrE# @xV*ʰ2 p -#HO>ً' ^dZI2  0V(C )2is WfbP {*#p -3" c.fpT"^w|Dk~KO7=s4XJm,%}HHHHHHHHHHHHHHHHHHHHHHH`\v)|@7.BaJk*L7@!?yϱ?a;jhmA{N,*MȄqM@ .$tO߰~a wlȆ#HHyrsf?o]SGSc˸& { _Z7w.lzjJ2}߷ fq2V0bqעDцƽ"[|!ܨǽ ?@f@@2΢ݻw7H`.y2T W1Ff GJ3TZw_1(.[h;>io[ށܙ]Z8pwc wHϡO{P*o#;!&X̻n+d$3Ҍ$Vqf22uru!-]]\ݕn{s&` temdJ81=3d·$@$@eHHHHHHHHHHHHHHHHHHHHHHH@K2rn y|}6P* _ _Y'% ^F*GPU@B+кFqjt:\@-]zS_XcVޫ7~N> Tf4 :dr,9ꮜrVn6oHtx NNwD"ΧzFc~?uuuzZ~?.EɅE`Z9wIP$ՒC|1)߃Ed}܏(-汈i&GDᆆhjPK5ZNu6a5ϖW$dž4i&K9}dT$Ks`eg0ؼys| uxJ4W&J4T1!/gbyOc .Vzl=Svj;jkk;vڥ9%DPƵ?@V&8l62]ߠ?GtrJĚHg) @ΞJI%H@aF3T!qeH4 dg̭{vO9ԿF1EF +@Qyf3L**yyQu~.E8Up  6慍; ,W]vT<"n!։!s[Ȅ _SsSӱV 5Yeگm)%.u!_68#pa7Fyrr=.^\ $Eާ%R 5\'F  dkאih[>^D= űw& pi:\ieuu޽{Q}Wfm4#_?C֋M-I_Z 749'Pujn?$0_lY.8!oiqe@@þP:-я9I.M*nY޵SsW1 -0gN#>@-~w ݅ ,56 $@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@LꫯMl'\K#kyau@i5AN ־dC4dZR&4J5*@@#>}=z;HX/KMwJ$ܦS~CvN慸3Sn^t_gy=UF-,}G7m͝$UxXVyF+nLYfwJZ+I\yF;e3R-KJJ:!XX~+4wkUQdM:#[t\kd 7i2󖯔Jʃ0#fT8#8C@#1qJIo1Mz{jtG̗1)pB 3DE*i~/*pT TrL$@$@$P.7OHHHHHHHHHHHHHHHHHHHHHHVm۶G .}y  n7A㖛?+(S:h\@˅%•܏HꔑZ>@Z}u8j.:ɹ2٫7ye{˿v7 eyws8ȳh?,"=Fُjg6R98ijjܡUшGAZjz:r W 06Wǘ3T :ZZZ1Rkf0W1d=w 5hvf'f7ǧPW)dFY\t"`u[&$Ç(##0Zhk4 4ܸe]˖qef ͱY5c 'ʀ4 4T!aJ3c¨<^'YC$@$@k_$x$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@NpXZXɜqG}=Z~LUu> ]EO'2'!,c+liƌb9 ghkiE:A=-~w d"  X$m,XNK$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$0F _kwÏ܊?O?woaM~Ws@060 ;ny#:[LvXXv7^S_x0ΘqDF>F^Ɯ_ӝfb厵|Kc:IqW\JM24e%R^VeZ2PmQ/r@%mlLJ3)B˵Y˭gY&36M|Ўv6L{'s!#φ?dF,=*gyi'Pۙs/C>aR +%^{w%'7ga{`RƓ28"mH@J]SW(%u?7fEgغLC wخ܍r]t g\#>Sh3MOlܸϖ 3Ri_aFudٙr^[YFvp U,TgXBP[2l?{w boD娥fk8Ɇo˦ӽim_]w۸>̎f$*gL!0SIXYhX]דinWn[s#_U"}9*H3<2A@AQc았15 r#`#r;1HHHHHHHHHHHHHHHHHHHHHHH`i  ]?o{N_^]#Uusr3ڌ1n]v@88F6.Coޢ.Fʜ2k^6(ZcAlE0Q G@U*%{TbJP9+1]9r0VP2e̦)VlXY Ly4`7o\9Fc"PYih[E%*h@7Yn}mW[pm(UaEyAD"8ﶧz*U53r }?k=uGwۍ 3<Ϭ5 pɟ$CR+ӭ5לq#aVI7HJ%hHxMA4Ruh].!L=4 3T#G%JmeOp{HHH` lc _|: ,f;9wG9x+Vц^!ܗ</H,bXjx]gsfmD\ 9|ApsWRcnv X:Ϋe ݸ4Nۑɸ٘#=6&}98cI`^\.O_+Sh44TdZw珺JjlӕȭmWswU7YN6he[AAAۓO>ٳ9ssϸJM^6+u3XmˋqEF*ڔJE.(-=兒W?~*ȝsH{;J$IDId+!PQ 34L5>-0Fe&9CaiHSq;<411bA7'c@H.E%J3PPBAϡq$@$@$f Pf/=OHHHHHHHHHHHHHHHHHHHHHH@F8[Ƈ>|N J׭d*XFō'(iI_L;Ӕ~D$(4V ^7`+0b_'7|3v *aARȓ#?/ܜdZCIqa6O׍i0i4xt=餗⠼cf?L#::[n޼ 1 dREYiUa%^p)7?Ws .1sJe@}LC:1h=7\kn}g!ڸ7~Cyya|kE'TcY/}%"_ gru^ Y) 'ƀ4àK%޳dն-ZGe[ [-snnܵYΓOzpr*p [X4fsy vz^}%RZ]_1VCy+w`>?0ǿ+o y򮐑w=> ?<^%ȶ3}vLȞ`b<|鏄NI?b6ި R|l]ҏ| NF䣑SdgoVGCۓz䫑K &vʴuyW fWϔehp&WNgl@z@J4@qqAJ4VgLJ7|-[x?ϫkN>ɻœ++GJ~rc@aZzȐi(Ch?*&-dTj+{՜,3HHHH`lc\*.HHHHHHHHHHHHHHHHHHHHHH'jfwWPZ*J"&TG ucZ"_Iu b};~ wwL,/+y5 yN]u"[&wݹI \dFېKa-?WT9~㥅:vZ" i!: 2xEAlӧeue\7C!dnh֤iuU% ]XXXC}^^^~8.LuMMM-EuF@"gVs 6zy@#+C+ֈD"O>ٳ9?EUW *%c^wg%d OX wePII}}$cϴ>ivϲk*+˥Xb##S8ӕ30}6dh <#j:H4 v9qHHHH`PP$9 A]]>}u߇7lyq#d{U0Ur2O }8'V^wwPנf9}^cސJ{qzEL)w*rb׸_vu$ƍ6B6gUl؁@. .,c2H_$)xJ3pfL M@jVɆ 84XJ#}Z9 d#UXQ.9xf]}k%t>mCza"&52<Ȋ5ҟd}{mY*kk*dæ6>{2I;:*kS}ֳuqhHAʗK}!d@F b㰧}W-P~|],VRθΓѭgvB JAXh<-6f0-%͛7@Q5T755iYv: kQ֠DJReb؟A!vG/mHmm@ā@)fm( 3pߧ`fڷw^ S693(oTr0+cXA4\ݠ/PqF~z̭f |w[ؿT= x'dMNCV1q~J~0C@exZv(]/??*Ug6'   O<"                      ⍒4W!'Ǣ;M #T1픢 SN'ujh]t 8Ќt-U0*+86&ۺ+ĶM9QD$HXx AAh%%!6fJ|\$V)Tx UW9VdXYge(*cKqm0nw\9R&YϘj蠫k)w|hHMx.t2iFZ!e<4!о 3Õz%HHHH&lc"IHHHHHHHHHHHHHHHHHHHHHH&+߃k{i:r#ݒWZn<ΜG _oTR*sZҗđ񊑗UzG"dmtꩧAQ 2- 9mhX)^2Ds|6ÕGoK/[Fii-`ugd6l;DSO=ALk9B*% +Ň0c$CUTif9hZ)40>iXW-4# Yȼ:00$)/$Ii[G/TF%ZWQJ2mzl]"RFa]OwǦ$@$@$@$@$(XK @ `\m6 A2U 7AԮ r760`E7q♜@F]kmgH:S5 ;a^z3l2! ZTvhn޼93 2J!Ћo(Kߍ~diFc5k꯹Rl6n iHTIN\6pkCl"H$'xbh3syB<_!>*ǰ 'v8C[ʽm?Ja>ו~B链!39tpd%enJR288="o.y +閇>^ J'@J\? @H[;'^yn} {[|;.6#8;0!͡X<̃wm4tʩ8(61vm׎mٽӶ] -45D#YtR똖\=D]L7ɾ[Տ<ҫ˽ D$@$@$@$@eZLHHHHHHHHHHHHHHHHHHHHHHH`jTC@TY֝<`5_oIyMc>?Oҋ߹(~Px}S/_h_RYN%Cuo8نF9Uao+̛0` CR%{o) UNQygwQ5;[ijj*uA_5E5$ U(2+ч`{ZG {^/ͼw((/W߉HccDJhpQj5iB*рs,1-cx+%%ӗr+o Чb m'v*!m7l\nؕc[Iz~7غ"ݸ Pb˴}C=2/_"R*GeA8 6 IDATo󋳫18L?IoJ >yׯ{3 $@ƪ<)                      NN}/|%#W^2~{߼K.@f䓲s;*v׀l>Ww@!*ܐ@|?x??p?SJ6TYTd>Kی:,(_&db En<  p{AR7 DUQ՝p P\}y*lM.ڕ:6]=w?+\{E_P_+'|0ߘ#/꾎DA:a]16y""i*H 0uWH2&][XФW%?粎Av[8|{qUYFcYFFB6i zspr.k/0MWA~_.Мjkο46wroo ~;>SvJex8 T7cP8sZg"    Iyٸh                      @&(Ww ȣ_Ҁ֯/u&$~ƙG M_@]w ܸ{7N9弇 mq]]][!S۰ah~~h~\-Jaa444؀i 0-״uA{Bx5X=zzOg``h{hK(Tf=18&sq g^GmIB}}==,J݆?+~E'+񜍔IR +$H3(àԾ$C~++[I%xNMF <=Re!Esae)fzo~KK.-,\_WWGBo\kR9j:3uZOW{iFUny|ڵzҥ>+hI F*Ł֭?{oﵾ H  +@][f            hmΟh#^ZR6sT=;C\fpC#>x}Ϸ;`Cܰ:۬lcs^wN6\Y4Vvk?hRIDˣ:: )eXr3 0ͭOR*Ԕqw;Cҥ5FܦMskvʷ+Wzm \s)Ym-0Fr\_sss_~.Ϗ|.jj/~RKKGWZFF ]_u}9._۷%p#?jq[rˌ+G \ c\V $UgtkZ[dDGesiC*nX@?U$d,(γeɰc庂f(`F9u~\7yR4p43H,,M ??H6q})nB #˻ܓt[~o3D=,Ez4X`JV/zJ[*0Fήq!Sվm_-YrS!^ĩY}*D arһ#O>XeK^gdV`|;#Nl͜yűT- aee za1"'`h4t-˰` &ULw|rݩNm%n_5@FIY1,S a2ͪci[z]g7\'%,zY>,KRGk}W]>ȕ}ڍ([_vG*  @c lח!          46ʹ]~Zz6hU6lomdhvE+t}7ܘq,lO!]K$l ^6P˕3mÿdw(vS0`D4+\qօzCCCJ` ]_٬QtN?8Poxx|JKWl֭{ٞ&qm,Fec}y&Ӱx`PۤiW9wK:ݽ0{`#-[e+Jَk*[%O| mPg7*u|W˗'W+|}P72 *1ګDƨPj )PF`^ӱוTԬY]ʾ-@ZTor{d_ a6FmHB@@k @@@@@@@@@@@R*~ꦛNsK;T}_0%kO~6;.˖KwѾO]v{]ߖSOZ;~v-7K_mʍ;<fN~?ܝ\-k̦AyD[ RزṊYҢW^ܑ]C++|S=yŎ^9H/иߤM;is~Tc/pg}vӦMN+<.`18P?Hw)ǺqϬaLs_Dʸ?4ozz-ck;ԟتzV_l֎=:T4d{6}W_}ua~X͸W\cRέWnMCZq|)6\&wY:6mR/g6Z&+G-E t,NU9M;wьUvO˔Gd= >Ԕwt@f(E=c dð@7ބ2ή)8^&s}3]w>:ޫ Ygw{Lþع m77@MHMH  4@Lѧq           Bг3N23k?s*Iv6UULnˬmm65RY|/U۹[#p]O"ȹcF_)WWRx;|?f.P 6ؽqǵFUV})4d:۽tW@PgVv];'hEۚ6*CR|Eŗ>2K2lEY[^]e*e]:=\u3(߁coV}eBW+OiqTPem-WceUT:Senhb 0TL{e2*Jj@vde\ZpV۸ϓR'Tp>4gHnmlx>ȆWU&!  _lcXf&           &p]wiM?nڗxۺa֎Οky _x__-^z>a?m"֗'Zm mw׳?/ھ:P;&`[%؇{4]ZsZЈJ2Ku}__Wys0L3P^r0Nw GU# `ϴe;iCg}|[禦C;!(&k9ġWzlX9V{>ٺP/ciM]RGZ9 J_ɎkTt P~csױ``]ɔ TdeDcl2pJeG]As= }z}@*b]k_T  ~#@f(           @6ZxzKGr\Ï5ÏmZȢ~v`7j{2!{o=!s&ۀΪˮ]t̟9Tm-ʅ+v`cX*۱o6ͼ*Nl#ν *?i<IrowuA-fۼ;˚V1bӕrcXSIvzp-[Z 0PwYb2c[\[i 7= !o6u##J&>"ίh[앲^L%>&-0Ȩ-۹G v=Smw}uU Xp}l߯-Fm UUR۽J8  ~#oD@@@@@@@@@@@W@^-NK/l/(ŗsO=uSm1:fW(F.T飹ŭ8.9S7F\ֵvm-mndɮ܆5C[:Z QwNꜭmy؝ʍ 30~Gßi/2.)F%F5F1\cuntl)|.3%BNl| gkD|q`RZWzB~\/'ɔ_Tр>,P'`Xè\קWr]tM(cQG>#I }ɨa$!`?KLa`}_u$@@;mwK΄@@@@@@@@@@@pӽH[W?ySwСKޕ_} W=~M# :o.9Kn@.ՕͮչvYE]KqԵnȂ6͎]~=TEwVnnر`cEba7rZ۲ྭOգ+{"47[ .UvUQěȵ]Xј.=_n2\nbaeCMjBSuCCcy)x.wAu9/##CƂdnǵ`Ykrr4Ѯ@쳄 _s}jN@@دbOhE@@@@@@@@@@@`@5І|9sJR|W=t|iM.:׺#]0GЍw]wOx ȋ:n~=~KZWQvmsc%צ-hve?7&n8Z r^Izxt=zha[02 8\c"5C;ڎb {7=07J`u ~ѱ`{jhd͕DzG]T ?$CA0fX(cYG S -.eU&8ƌEA41<@@y%@y @@@@@@@@@@@ MA 4>⺺4c]6Ve`bF̔pɍv$;2<ؕyx`qnj.ѤcVH2~D1Ɔ.5) `3SX99iG4hDc#M ouCCr+) gװ@@@/,Z3S@@@@@@@@@@@ |ޡIY c+oR_+jOyIǽ,BNG{1l#u7niqM]yY l39״\=p];Q{B.wc7W?pe=V5pZ4:ݶm݂ fL-~sߌ)S 0VQ%:]&2eJ:J@ ̔ IDAT6EH!ZK(d*Q!\p=fmlbɷ)T0Bcqk`c*GW9k;X)1Q ]8AԾʙ]TSsd(EuҘڏr\X+Lq-ȏF儃iV`4C^L򼞞Yjk`==:tw* 5!!   @mA @@@@@@@@@@@` h5*2 +\ݓMzl{BF'*:!o}Y8oĀEpꢣ}G^#O~*/?rxʓ7Rmv5=R}kәsFN3#so_η+Auwwl6_;a,+dWi"p )>FOr)*+nE.`k^ecBtY@J b@\i۶o_쁁(mTK bq<;2LJli}*@@@@V`"#          ; xe0C7+ӟC mP } ж 3N<]=c4~ >_pƆg.1clPM.S=?P)g_6Z[|lv8>І-` }}=\.fGRrrAYMTIJ6[=˗'.ojZ'W(pƍ߸N]+c24H   lS@@@@@@@@@@@%OՈT6PuwiyIWK*?K9d)WmJ9gN!Lv%kQR-8pvN3[+_}(|7keԕ4^ӄ֩5.q.|k=Gnn8wʋmkN޼d•9%UdVfz0GR7VfA|0놔 zQ}G,W|pcXp)kEQe~O+:8Cnkܵ,Xpǜu.kT* k~sx߰Z` {',ynTm;z   lS@@@@@@@@@@@y%pn0{oy⿩x6=56/Ye჏먩rpy^J?R!e7ս?jYX}]f|nBGCqQ^.$IR[ Wncc߲l ^Ri,%wHA:Q6k"G##ټ.u݂)X_ÂmX)!Mɂ_Lc a3| e[lQq-[{{*\tXTMB@@@zۨB           |8#Orݢ߯u@fW+L9dm#|ˣ㞭=e;_?e"ST tlo1~|RygߟRQ@5t7nz#&$칶`> ##m~+>q rF>\u.DQqP~tt;z{s>g,ІTE j~z4iw>G,:[_ -8{e} a& s    F@@@@@@@@@@@fXSg*F_\mp(f߳~|t+>>m奫kwͿ{?ZnpЫs°kK_<nE_px=~K6qU{rk͎lI,l !rW(b+tpW\4Ki c` òݰ vڔS`a bkm~,;eVݐ @@@1@@@@@@@@@@@9A96gYe/{Q׭[whda,Y?4_̑l&*(~;.^UX.Zh|}Cs^/wT*eFFFrccc; 4&`ms`(Xlii)455::::;;/^\hmm-ykgDDŽޅb̩;&w#ҺK3(u,577흰ltt&AB@@N@[|dC=6Uf           @: |‚{qժUWG5kc_v}u. PPΎ8qww-SҦ)ZGtbqzX.\0zmg>W,\)D%P8m@cAA**8[dIe6naslz< ̷1D3*︽ ]]];}mqvB?   3w_ujf }` L@@@@@@@@@@H`%mB/3Gڄս뻬7vSvD{GM :\s6*8">YBkkYݽvp/s]]k vX0}}yi%H@ڦT*ͣ0dɯ^mԳÏg>I ,.fb.ϿBu^I }-\ns4yLz?.9{g䓯Ge]{:;Kh|KcMx']KB lvS]ÿ{}p[ gʧ+Aдm1Fz>#..};hZhe:            jjuȦO}SVcNz Ssc7hcrA_eoQlWJ/j_mx޾L&-ĭjrFFErmr~jޮ]aLC:U {ec&p&fa6ln%e+luK?K|__m'4}s_~Z^5E]EF;q矿f'W܅^~ߘʹj8K4) q'D-nM.ߡ-Ʒ/vnj(}N gDC-MF@@@@@@@@@@@SL+wUm[|cW` F>iCK܅7-Zl<,6E}ۮ0j]{͔voK4>>꺷~K6qr6kC_%lƕ۞E˖qL.מdZd#;jnؕJ# Q,nM7kVs(Ǣޡbf4ۗT[؍_?*GSCC=n|Ɣ{366wG(_cϪ.3ag2â`}і-?*,@MEe pan)YPp¡GީXyX\n/oԹkk;pQ6۞/F6Y` K {۰gSilPTu|I     l#!XE@@@@@@@@@@c5=s d|Z -e h@땏gȺuKM- 6}ڶl+;Qxtq nb`¢qX0uFy a4&۪W= VhAP| ϲ[{{cJ{{^#мH    {Y`{!          N@WaZq7UA[rE LlT~2# }][|ŋpXeh@֢rVȔuR)`Gml%EBaՏE Lac`:([ڭ=w…ܼle6Z. 6R`,^bPe a.l^v݂dT]8]֏cGlLeh0X}V}^?X ꭝGE    '@s.@@@@@@@@@@@#pgGr݃st©X y‚J@[U`׷@V?ܼmmq "Ѽid ߇:a-^k7EAйvl(| Rar%@E4ݾ:[?²۰@ztɮY6ߞoa6€vOܲWy.ơf$@@@@f >\E@@@@@@@@@@ط>[0 [ ӥ[_OpO5 \aCX ѯl$-pEg{{{ג%KV%۰6ye Jaa-[z;UXl<>uwgGŝZX0 ?߷ўlVg~>؆gg?';$@@@@X=@@@@@@@@@@@H@?)/U'w+a*\Bq $²< ae ѭںT6tcVY [ aeD^X1hîlA*,Y>Іk\X{ߧ=?|>hʵYUn-?}.= 3K@Wz/,@ (}خl$g;188hI8};aH8n{a?plvLv}.3 6f1ƜB@@@@@@@@@@hm"D`2ܩMίS>Zo"vV9H[EfjѲv|m @>ukke Yޮ\BEg0-8hϴvc͜~jR?U-/Ѳvַ?Z}*ϟ8›(#    PO`TC@@@@@@* IDAT@@@@7 `A+P>1 *XT~a>3|֟$u L ТI9ϰl3h>x| +)cϷևϳ SR`2^'VmZ$lL@@@@`܎           8,SRY< YI\=Z zaG aA/| k]X " :Mc\:ϹZ>Az|{ʳNq_Ds@\NZyU57oһpsJIX9A]k~ލv iY$9[N}1O$3fH5+Zm:>l?O|^:*%a>g4 1 zG'-83IS\xS>^8R^ke}cN] ?95L)̟*?E$({?fNKFaF3\           U@lGWptІK h,omC֢u.Kb\c[9[)rn1cޏU.Ž~qgL]2o3;& [fh3y) 9ЀiZ7*ώ7lKbmdb>c\ct%awq7Eec?;~Zy e]B" u6%a>EdkAVnanXpRZ/q oUށgh3y) ɧ  *#U{7wg]IXO`q(           UmLx PUWtNB(J h/QRl#uNKɯNOR=;&+ m|V5q_@s k趾W}Mn+zm1NӻW;&a>y4J`b{MmV6Ҳ~IӐҞrݘǴ6ϸ y{llCSA{eYРފ?W~j+IXzio6Ҳ~I3 뿫1 jvFe \=nbqw;!B.h?Q~JZe{'9띰=$g]ݬ)nvm           ژ`l3f*)wimX|rllk+%kZ' `ܝ&isw=_Ԙ@s}.S _)t 'Ǹ/lIYk>Іmb *%Kǔ-|M4?IXiH̜weg-~96˂,&3H:>CZdcnV6U~a*[OQIxL:-}),wk̳ aU'VN%1Z4e냱[`paoV!K*U9Oqwu\1 >Y>[Ez'NԱS/;q?i;$N{Xa܎           & ?Uu8,&a>'5xuuYgOVe$B ri8]kn7v;%awqXF|Bò)-YT.?ju^QMKvz^9$a>CF/kMg+7|އ sO%1Z4}ڝ_+/T;2yqwSR|"s4SSZ`? CW7NNK{zn           {( ' qz{6Eh.6[ _ǕkmIsZ5n}tp>S oT^8ϫ'q_@s ݅WÿWSz>Wbis Z5-lł.viY$9[;Ac*߳'cN:>oO۽9Hc vP#ڨ:,ps*?IXa?)_y- { K6:zT*\83(OӰ~Iq SUo;ڰ6L \M$NKC\em%I?           $^߂ʗjsbm[({Ip>b뜖>gk4=+o~ wufG;9(bw6$OQ <࿭.!ҧc|昄uZhS+J%MliY$94yJ0Y1N1 qX&b!eRQޗQyv:L9LIXСVr&`wyXL%1!]]L$|w%_}qwuW KO FTҾXjU uZ6Ԥ/@@@@@@@@@@@Y`? u@q.ئ;Kʯ' pҧu~\S뜖>j5kmnS.VYA^q&ѧ* .iOUSe 5]%`NK<΂kS\1Iem0Ɲ12 M Fr> yݢڜ|0%a>C-gP>H N%1XRs~~^l'&v~g o$awq㱚ڷX$ 9ԟ'a>AlGmFIG           6PنSg*&n )(`&Ƿ('i35g]iUׅW*2{ (/lIa/W^=.X}i3pi/kuRW8 e\R`{l# .E&gɤNK{{/Ԙs)eN}П^s^{^ߨwc0lu}_8(Kt ڝIXOo)@@@@@@@@@@@P8bO.뵛0KPW?q'{O뜖>nܮ69n͈h=5h{[PbwI`8ջpfjZ|cZ/q QԚ[`(e8NKF d41Q}7^: a?٦V/lSyKby~厨|@]yOP@|w)suSi.HU8Rs(Nr{p^[L%1ZTk}Ѻ[`&;ću3gƔzy}iJ$30*DEbh3k!=IXπ!b_           %`ô6p4d4+~,Ӳ~Is4l CX_ogAYe *e{?,8?R)M' >u:int7IsZ7 MgYo mp+8bwINRJق<mD*_:LiY$9s5;0%a>j5_?%rm[@^O%1 {Kt~ǕkmXSʿU[6%a>k-\k~&`bϒ=1-8t3 _ R<т&|IKg뾞ϸ*5?|S#9U\saq< YC)6q@@@@@@@@@@@[`Q06󙊣Vmb뜖>r$7$}-޿l}ؒmJi?q_hsB㝽ZS:W |0+U~>A]XL:-}.6~I9\V~|@IiY$ƹ;^ͮ6ەU')F+U؟$3駾>jQo+oPH~ϗc|EuZh feA=8Kbә^?;Xps&Ц` >}Y?QM昄u}_ AzO`gm0{Z`#{zuZ!#           ƻ0ƮTjלs:X9V"ha:eiGBM{φD5 wj-~6y]-Q IDATNKu8R[Y?`&iY$ƹl֧ԌމӔߥS{F{cAyqbpn$3jR}C PpCO}1S-$a>EGmIg           m)+ncmڍsGHbO&moȯa1?k}XkMKn}ps7([hѻNKS%Rzu{p*iY$ƹti$Io…ӍL,0yk?+ϸ HR_l f_kfyAޗK9< 04dUSufC:~lL%1Yf|rsuT\X e % pMJEOqw_ԚYy0|u+/Q~eIق>F9L}Փ$g[3C:B@@@@@@@@@@@`? lz)ܰ7bf{#@뜖> |67=Gϳ҇}.?^&gCCkRyU r'([ ޡwtNKC*Z#5OVoڏdҲ~Isz7(ۮF6׫7ve+&awqWC)54/Ō>k6/IXπ~bv,POg6cZ/q&5ߦ>/s;+5uܢ|ڜ|]ޟcu}ݟ{#ߤɬ &tW*NG)[([0VONKGle#!           ?&јg>T9?$9-}οՈqD ?V^T nW]ϔQ` l*$awqc RZ?6_z>!?{}dҰNAV03NK5;6Ӿg鲮/ fxNM;>e7L< `/ǻ3z(hw>3IXπh? wUL%1]٤dW0E|I>\|IPbqw5qW }?P (Nt]rQÕ}U]T=I:-}zXvLg           Gkz;v>V uNKvQvw`jj>"e3ݟ=>g2ik\KkIXπ%CQ[ *T ,*&IKiY$9!_3< `/A3l2W[4?)oTN:-}$S| |WŴ_ܕM?!Gn .Tߠfޣzo6W뒰ϸ 8^}??Ϊ,քEEQjR*k[ťuK]Z(jQW* dɓ;{yf?99Ϲ|;~?vMmd5 @ @ @ @ @TU6~Dޱ6˃8~qΩ&Џܔ9ڽj=+QsW&vA++}z~9Q:!#./0TǼgnKMFѨ揳M"TvwvUsڔ׏u(DIDy~"LmI>']^jlk*?Roՙ$h~X7eζt:>ϫ'Zm:'j4U]PYOFIqieRu|56&J&dVsTeh~X7e Kom, @ @ @ @ @ @ _>9)3q2T7]߻2)yJdsNh*-YYX=Qs5뛥U}nʜjX-?_Ot\+զܿ~FѸf++Jcu*'_p,Iڥ<@u'V}R/~X7eŴhd^rYM4cjς*zD>^_}SO^*$%;(I>VڝI#'s|mACc>1=n^st^nʜ5i|he'Sm:'4{$EeaCrjM5Iy߫~Xz^t8~csUkUst%y_-o7Fnʜ5 oJf @ @ @ @ @ @kVxmX-Ș~#cC;Lq~9ozS$WϹ{O0yȺc24(%]#(I>A!N=a~ú)s-4c=pRQfU|=ܪ39qrN녕a~Xz^W7hr;6?T_^bTOOWs}5K_q1geZTsFvlfʹ1nʜc4;ݼ7ND:>h?IoNUpƵjzd u49Wͨ+UuS0:l2 @ @ @ @ @ @,#6_O+ONh(''W#"a̿0[]E?sS:4gf͟u_^9z}z=_Yo?;4Ⱥ_Y3q^1%T{vGYu܏˳^xm:siʹKzL;_x`$\~N>X:ֽؔMg&ZƯR?-Q~{Q'&TMm01X^}z=jS_?9a)<0.^Ybqo%a=$$JY8,júszA91xke~jQ&Q;ȼw:Ms lc]N @ @ @ @ @y@<|Dj-yx7eMpz-FuLQ|XZNc}RSlVƼ0ݗ7)e[NQY /N;=.$UmMfnoM`%1yOnnʜc4?(?0nє׏uvk6Uɬ7%1˒g^h؉%J򝿙KrGP~ú)sʼnê @ @ @ @ @ @=g''^fi#2V1zw?sSfܷ1g@7qyC^x8^O&J}9. >ٔ׏u6Ǥg?%+g6{=g+.%6+}Dy zeݜw${bD~X7eβiRv주.']m:'5.`,މ/'c{m2~C/u|c5;.?)Q~_TnMd츉63:˼*\!@ @ @ @ @ @jˠ填&LX{q_2q24=J_+ǜ=Edy$.-9v]aݔ9F6cM1*{/qĂDIqQ>'~cץֽu5/YA'%.O2;stuS4 )l-aDrao0VrΜ^u|W#b2+;bğ=Q3rm_ۮsw[$Vu @ @ @ @ @ @ @ @(O @ @ @ @ @ @ @ @3B@qm @ @ @ @ @ @ @ @H}@ @ @ @ @ @ @ @ 0c$ۘ1F  @ @ @ @ @ @ @ @$ @ @ @ @ @ @ @ @1m̘[m @ @ @ @ @ @ @ @mx @ @ @ @ @ @ @ @6f̭Q @ @ @ @ @ @ @ @6 @ @ @ @ @ @ @ @fd3V( @ @ @ @ @ @ @ @d @ @ @ @ @ @ @ @3F@sm @ @ @ @ @ @ @ @@  @ @ @ @ @ @ @ @# ƌ6J @ @ @ @ @ @ @ ن @ @ @ @ @ @ @ @lcj%@ @ @ @ @ @ @ @l{ @ @ @ @ @ @ @ @`H1cn @ @ @ @ @ @ @ @H=@ @ @ @ @ @ @ @ 0c$ۘ1F  @ @ @ @ @ @ @ @$ @ @ @ @ @ @ @ @1m̘[m @ @ @ @ @ @ @ @mx @ @ @ @ @ @ @ @6f̭Q @ @ @ @ @ @ @ @6 @ @ @ @ @ @ @ @fd3V( @ @ @ @ @ @ @ @d @ @ @ @ @ @ @ @3F@sm @ @ @ @ @ @ @ @@  @ @ @ @ @ @ @ @# ƌ6J @ @ @ @ @ @ @ ن @ @ @ @ @ @ @ @3cvj @ @ @ @ @ @ @˔3ĝʼn .G @$0_7Ky @ @ @ @ @ @ 0l$^ڀy\J @fMpa @ @ @ @ @ @ @@2?L}z?  @ HQ&@ b IDAT@ @ @ @ @ @_ny3pciH @`f ̙Y۵[ @ @ @ @ @ @ QWY:JY[&)Y @z&0044ԳLD @ @ @ @ @ @f;y-qDG|2sސzKkTw{ @ ݺ  @ @ @ @ @ @ @&HRowX~y~]$}hǟ+GﶛOlG̱$xbH_PG9yJ&(I0*%'eTDI1^cN9:ޠr.s$d^iQ~g2%s7%{կ[3yKuJ竾Twu @& j⭝ @ @ @ @ @ @4X1~Dg$ID=Fy_%Mh#|ML%(I1N(c1{'>k^cǒs;$%1x6M*K⒎%ˉ'U<#\udkϟyt$@L6] @ @ @ @ @ @h@+?aE_=F46vT꟩K2{jɘs}Iѱܓrm;ݹ8:uofxS9-wp]X\:,NK_/kTw{ @ H[h @ @ @ @ @ @ $$84=/úCkJu*2qIY\^$\:}7J9QT/[#eww8wG^8:''e 7gr-iƱ"OxtD=U2߂t5Tei7N;$_Hqcvg;^# @`̙. @ @ @ @ @ @ 0> KGS囟(+McuCm{J4b0WQܻ6yi߷WL"׭hoJ_j̹gGk'W5?>UJ$xl1k2_uMf2;GV3D^>1;S_smzPbDIDR,.)nߑ 0-$ۘ& @ @ @ @ @ @ @` z>utb~M*%Hg9CUϥYNK"zƔ{3O5}=}pDIbQ^ܘhCR_1r\IV[^2O6jͫ'Gڲ/g;S_:evMwA l6} @ @ @ @ @ @Ob+%QƧ:91$JQsbd 3.Oel[GʩvyL3J}J]yƏ&hwc/:nIuJAz.ny?''JdrzZMx& @' Fn @ @ @ @ @ @ @4X?qJ=ľ7g=;Lߏ:ve󒄢$rsMmxm*ZW)VYqԫ6v9yUeLYvK(n3sZ\NR^W^4e{2K>mL{i' @ @ @ @ @ @ 0uRVVsW+%_$>̿WWZW.ˀ\ZJN "'0:w[Hpc׬.L\U9KU:UK#qco z=_S]!P%@4[Ҩ @ @ @ @ @ @ @xd4]So/J|k$}f}'$LE"qJu`k̾ @& Hg @ @ @ @ @ @ 0SVN`㝒ml;&Yčc]rn/]\R%u[wל{DYC}L|#^T춝~kK$wJ<|$ة<5k%h|w{ @ _\ @ @ @ @ @ @ @Y'ܒcEqwv jGw% 6N{YmLi>C_TNOdw$ŅO)ākUsDI1 G$*$QoOX&,j\S(Cz5_]$@4R@F6&@ @ @ @ @ @ @.0'ĭ^D{v/ $vNt8̷ݟPnWs+H*e;*}KCs!1Ӹ.oJ ċÉ1r(8NK.Q|T˳2KGkTw{ @" tA @ @ @ @ @ @] Il$8'.N5OONf%I:\sX]R9ON߫hS;>.4}ONR^^Tw{ @ 0k:l @ @ @ @ @ @ @I@qg( ':&p{v}Zbkrڌ;0?9qL]'F ᭉҞ`yy['F6%U=}Q}|k?^# @`:H1= @ @ @ @ @ @ @qayrHc~]OO'?5Ƙ3y\$Xր?7se+ܽn-K%(B:SپyyVDrg }dEsҵuC`m Í]S)5xhgo;w%@t'PCY!@ @ @ @ @ @ @` !'v[%},}6/۴ @` ̙F{ @ @ @ @ @ @` |Gm}-=3}h X >%,n{ 4A g zC֛y/t]($~P @==4 @ @ @ @ @É6Z7j >w5O{g]rfErłLYdeg']a}T#F t}sD~:}{'YQ%NXa. @@ck: @ @ @ @ @ @DCwuQkfl}I  8Wf+gupc$s7&ا6`yگHb;j @ HsR @ @ @ @ @ @!V l]{6pcf@&yTb 7j6\WN#[ֵ/{Z& @/mդ @ @ @ @ @ @`z Tm,un\5eϽfϙ٬`KcvN[CP㒩̚i=f/Uw>O/&ZCCem6'|M6nq'>k?WIKWpމ{Dغ!qy'Yc_2H,L,K]cJ^#EU9P^QeEբ?ĥS3Ģۇ'vKlXhʱ'e|S 7'M\h)+W|T~w~Zdgs.\m٦,[n|&>g֬YK-Zt+xrepp|O|K.)._߿ln=e;|>qJ^c|uBD1Q~)> @_@ @ @ @ @ @ tIܶ΃Ls|[mEkwj*6gc5+zYpᬛh{>[ok~ݟCi+O|)58_1q\b29{V9;sxn7ڍ^Z|oL71/ѩ,͸3smY/: L_%)Q]dȯyOsr }EDyy2}ėiƻO粦eGWzvf˳7'$^(:_gsfU/c%L'm9?g|奩8ݑcIQ-ϵt\?ɓLtz&i0csϜ_ɱ9 YBsJyNKߏf3>@Hi Ǯ[v}ֵ^ۺ^<'̛#lٲeoUvms=Neu|_̑ǁw\^|e&:}6U;c}[hu;4S^x8+/]M 2fM{C+WRȌ'X+ @}P @=(P @ @ @ @ @ @`ܾdDsIϡkm`56ܪ5848CCRq`֬ւEfݬCf.xСmW{{<_/ovJQLfƟ<`A%H%o$ f!jkN*\szbs{srx3~A\q%Ȑ/%~wq*{anVk0X6rUU|:\OTs4T_)ܫɖ's{^z<++򾯖r緫Ts$((:%(. +IL1~V:yYo'J/;,Q>CHlB`J /gKg׻曷-ZT 'X|y$ڸZg.6ZI1y;\0;k~_>-YGWOِShߡyyIh,gJb'.˵ةt}SݫYZLRߦ @6TB @ @ @ @ @ @3@Ov5pd:hc;6e#ѮcbգROֶҚqe<;oʡgWמ@K)I_c%^Ү?'J}+Yۋ3dJyеܧd1739W--W=0DskLLR|3[١t8'6!ʩIL暵~V͒$F9>1ĄJ6Jӧ'DB!0%3\X=Fm.7Go;qY/]*emd̒;4UdL%d.K&{ @&LHj~ @ @ @ @ @C`hhCCwMY.lm`yZsb8F%J2_92[y8:.}[n}kŭEW4zj̺GmlI/ȗ$%O&N(ȷliW%RbLD̗sJRw3yS-G^vIpN(.(I%ڥ$N1^↬$+w‘K$M,N;QX.PW_/3cz*)TޝK_M(e?%^G]vMSrV:JTLc3^mzhە1Q#%{ĞT}4[ZX%c6+k%^,Ir.KӏLىj۬M瞧^GI`|;&VK~]A+_MyLRs5;C>QUKޘߡ3A5^_"]>*qD+k%eN*βT3)婩nxISv^Ukk @z"P~Q @ @ @ @ @ @ 0V.Y<KΛvo6 wmmֲۢnmm6<+&FGZ 딑Vl-UZW=240<:\H}Xk;F ה_L幊NyhDzXLCyt)O_6xDg%%9g3{r,e~EǿK_yZ~:j(sJG^ܗ%_iWJI1ՒmTYgS^w~gO\yʹS/|No9s'xm!'PZ[T& F\dszeLY[7CđX85Qu(cʽJt*nSm5,r:ÏJR!Wڪ@IX^.fٲeo5gΜZ7pp}^qgp~;.?$eg'][R~)ߧs/5wF:#wJg5S]vH|޽ݑ9\7\W~\J’].%ING @@?5I @ @ @ @ @L7 ˲Nv)C+~-\ZtInZzUkuKcr,q׊VuZv뭓]ByysN\Xg̭DCri< )nV$8( 36F\I8qoG;TÓk}ify6FKy<5WjԯL)ގYr|a.c^iO{D5K|ssMYSTN}cu=vSYGvʼ qʋM8l>¦ʿd%6F+(1ڹoZ&M.;{hk͞=n-ZT$6,_˗* = Oyj񴏌i=谜|XS.'Jsc~>?Z;%9ߏv<$@4^@B @ @ @ @ @ @v-N5h()&\ 7Vܱ|ɒD%FpK zֲoJ]'h \65ؓO>yA<{,ѵ!d㖌)^> 8dOMQZ|yruƾv}iءorq_3KW&&WSO3ϘIDc3nuQѡoSwַiUƔSH,/͹&eB6\TDu>ΜZ߼WIR{~j EOw^Nדlǹ)DK.b~gНzs6|~$(GϹ05;.{|]Kw׸%cNɀz>7w#j^擕%6YJ* @~i- @ @ @ @ @ 0q7 we~[V7C/`m+ 1[soj%@9R;/ZZqm1w~e12080400t[o񓬻$4h'+#k}c6ђ1cS;\ZmTaȟ2փwߜ;7^䌝C#wn&;2z] |8H,̱@n-%AlUw掉#.ח3ɕIߜtO͸Wg*}Ϯu4;'|"t+]Sgo>1ߺ.q޼y%ap?~kv=c^Wi޲`?Oz[^xaIn1^o>n,߇oPlyf#};4U@3dWS @K@u? @ @ @ @ @LH|Xb[/^yι[y粿̳s54gg[.Y=48xǬYs|/Ť_h P;<zQo}ͷd@?m<¿IZDAdG$&lr$ʿe*˃{%J'KٝtYMU$pJWml;/Q}il#9'jxRw81VRk'Ч nBbS~F_(HB+;͓qg{IqB⨌=Ӹ;EII#Eq(\ocZqY˟Z\7Bl @ @ @ @ @֪=;iI˗Vݹl8F%V^ZdM8YܳDy@tlꁵ-IZ19ՉkzhkscuwoN}S1='prAe9^:, R){i:Kj ޥrOQ,k]2K"td2~VVda>p[kҜjb:,Q g$z$8"mYs|%9Y9;ڢKk}6ىumt0.飉'%0F @`FH1#nM @ @ @ @ @ @ QMbyk;ZIj$N1:}vגqM\2vYߪ 6nX?ubsd6ƚ/nȃ'xj⒌/{:eP]KMc_ IDAT8Z;sGgW%yk[&3aSmTY2krwguI1Dhc&wܮk;4Y;tMy'&a. @/ݴ @ @ @ @ @ @.pDna哝kqeߡ&LyxksmH~ow  @`Z ̚) @ @ @ @ @ @`{&F5šUwPf?m=-}ה(~ *~"W&{V3xg:uJ4qtbD].nXge(NRLS*aoWէ}ڟi 4U,wdM}Tbe9~sw 'ߚ'ټF=Yu=,D/+2We[ @*0 n @ @ @ @ @ @`j1pc`͙֬5:_qeK:]@Ð}IVy㯚" **JP5-h\] 3Lk*QPD 00=3]3=՟UeZMv1~iՕncvGv;)7o/KCbN&^xTbз.°E5U~ H9IuU}0WWe);tX{L:v2FflN ~LgܒDs+ "gh>;/`=,?xf @y#PΛ( @ @ @ @ @ 08ʂУ\c.eK)C]{)ڭjt]/;GuO+n Wۼ29O/D5s>6T}5 4$WisX]~F'=>ۿϷlD榿fU I+r7"mc13KW淶,ehg,34,o+~7(94}bTc9H9 @` tG6%@ @ @ @ @ @eƐU&Fń*wVS d;T'ʗ6OsS/g"-Omӥݥl.݈MN\uwU[6xLu8^?)7}~ hu[lc.yD 3Vgh#xkQN7Hyw @*P^l @ @ @ @ @ @y!ɡ++NgaUs$WZn(^4c-t.,eȥgd mۗT[s1jNSN;%EH~C?677ڕE;?.ӫ|ʽ2Bg\]jnZ+&M<0Q?gHeэ_mbb6 @Xlch>J!@ @ @ @ @ @ FWH̄Mɲ &kS}&&~R5~`54,.4635AxUf,Ke˫{u9.tdE R;ccvi729@ʼi \Qq9gG~ʵ~Oc&nH_f_~nxPҏ^FwU^ 0"5 @ @ @ @ @ @}@uݓvU6n6N6ظoWMga'u+'<[E-K^Q]UoV})rWWee`I,?.bjËcSOTUeQv39gYmjC 94qUg&X_&YS|p˜~4M @/nU @ @ @ @ @ @TU)@7>?Ww9u[s8a9y~Wee;QeUW~U{szl1LeV\Z%[@^;qE>jV7sSyQIs>QVeU 6s=^ E l<Θo}oq3ce~Xgm[MsGUG{ @z^k C @ @ @ @ @$L,@*b˦)xz3IoT?ʺfӿ2-]*_\e [j*wUe)88hml K}Y\bж2'O֩)v&ΪliU]=QvM_l{I֓׽cV н2+sRfU`6qǧV)ʺf,8!GW]34+sWevk 0=zƽ%) 5wĦf:uG%_/tIltgV/^ޫ*_/.UZo?o}&@؆/ @ @ @ @ @ 0_ɗ~K&\wɗ^lwh#=dD( Xt[)/8*Sbs$H49!iN^1V_L].'K=uXήᵝL]ޘk?nMD~9yV%8yspvE;'I[MԋS& |e7YWrTUMOgʼn M߲pm.D 3.IץY]?s_Na&M&l˒8&绹S03>/w'ʻHySb#LYsFSY?ϛfG  @%= @ @ @ @ @ @`> dO2)qIeeчJV58<񣪮3*z6}{[VI{w)^q9oוxumbDCǍEvnZ14ڔ:I}z,$Hc')YL.ߩ]:Ug%&۾GOd8 NKQ]ڜsKdE_IsD&~5qױ3"0kϸһ&, clRƶHE^ͧ;o{&(~''Jzƶ\9Y>kLwfKDYtʜnK~  0@~+f׼oRV~Cs,@qX\IOi9--X=[eLϴ & @ Tb 7l @ @ @ @ @ 2+/d@./k](;^~'@ @6^`Ɵ @ @ @ @ @ @zO՞XO#8w=xpsUŲ*\ƕ=p1 @ ,>dC$@ @ @ @ @ @C&pCsTcLf;gqi(_*%o HU&K @l@! @ @ @ @ @ @`> V?*(Tޫj*/KY\E16 @ @ Xlc  @ @ @ @ @r몫 QM& UZ'_U,Ywp]<OK \3]Ξ @9%3w*g"@ @ @ @ @ @M\h׳PUR~}5nݶ:gfQ[֕H]rzY+&l$ۺ=ƒ @ @3/`7uF @ @ @ @ @ @`8'XrWW:$l+9wzi 2)sz| U @ @!`s( @ @ @ @ @ 0'$Wb)䲴J4Ӝ 6&H['j @8Ew  @ @ @ @ @ @s#2\})'H꿒xf~9B-[3֛ql=߻rn/UiS6 @ @`Y: @ @ @ @ @ @'njwO-Q=qX2(~ 仺m:p(L9~ޒ @em2 @ @ @ @ @ @ @ @ @YF @ @ @ @ @ @ @ @`AXlcA|I @ @ @ @ @ @ @ P,{@ @ @ @ @ @ @ @ `,`>j%@ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @Ƃ  @ @ @ @ @ @ @ @b @ @ @ @ @ @ @ @ Fb 6P @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @,m,@  @ @ @ @ @ @ @ @,;@ @ @ @ @ @ @ @ `,`>j%@ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @Ƃ  @ @ @ @ @ @ @ @b @ @ @ @ @ @ @ @ Fb 6P @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @,m,@  @ @ @ @ @ @ @ @,;@ @ @ @ @ @ @ @ `,( @ @ @ @ @ @ @@ ~wIܐMq IDATGeo#@̈6fI @ @ @ @ @ @~ d2r}d_K#/9gS?FoF^ B @9=|e#/90) )8uCU콫'y;n],& @ @ @ @ @ @ zFo%g^Ffrᢜ}$+5\HK @`! 6XHocnrLY\'S~7{ w܍v83+P'F @ @ @ @ @ @, db@Ļw8-3xֽ3l2\q6* /% @ @ @ @ @ @%>oz?>yhhuv{tHv%K^@GsF5};-iuˮ:vi-_Dew;4zDm tu9Q8u)I1qQF L!  \b ` @ @ @ @ @ @`?яW5ϣ-]d;yV[mZ|eon~ʕNSl^ڋz S2 m ɇiY`yuhΉx^Oh5Q wݡĄTtuwۺ)"@`{(+`8 @ @ @ @ @h&@6FZ~ŋi--Z?Z'ZzS~nWt @ ܫ6*Y @`V,1+NJ @ @ @ @ @Oa{ܲ|=h5+l,_j.]߷~-:lv㍷|z___ؠ @(u5+UY߲v\/N,$@$eciTB @ @ @ @ @̸^8`ʕĪU#tr-ZnU*ާs; @Q`WW~gw\蟀6gJ @ @ @ @ @ @` ??$}{k]ֺeVtN]ٗXzuaZjYy @3)ЮN @fM`ɬى  @ @ @ @ @ @hre+^j.X϶\4:zܫ]hnv*ueٖ.ݴu{藿mXNã}w'hQUgc{$2kW$q\ksn]7%.I\u:r2wͳ/)qU\gYjN3s⏉V⒌i0ţ|H=]o? E6ޗ\sǤ(c+̍8mL&pJ{/_GYdl#etvE~SMtLQ~3~-,ry~g,^('ʻOyG;aYx }{4c~`G`mL @ @ @ @ @ @ޫj.fU+ZskѢE+_q b.QcVhmrcXIok8CNs_U<9q@bDִR*%aisDⅉ%m+zk*-׺[r\dwei4(T7aSn|]屍3==]R%^(/t~voJř9fU,mʄ_&WrSKTk/*fǝBsKWk'L؇)CRΜOk9fy wJ'Swhv(nIwSmt[ڛ߲y~EF\kYϗHf܋^Ծj:n[:Q~3v45V?YYWyyi}4m(ϑx[#S~帓r\yVvz!Ǥ ʱ}YGz<û]>f,N 7F =e @YF @ @ @ @ @,UeLeάSkٲo_n_u4۔t',٤ffSX׷~qdԽMى$ /$''1Iܩn0Q>L}Qn xV9oMߴ>Ѵiy(',+yⓉomtbFl5x]b6R*U|0sRmd[S߉u1w~'L6,D)+2!mL~fxxge1%-?4O\-g9o#rL>)c;8qv44iizBU gq4&f]~ߙ iZb{ءx~g;f,$>hTyfEޔ,>v٦+3/(ަu5 }f'{n=w9{ϝ{Y ̈xS=#'w @ @ @ @ @ @`p?MܠKVg[tikʵ 5 2aE ĩF[lֺ$}nnP>izrdg)yJ“㨌IhL%@Goxk3n/ =|)q z+|9[*ng'+SV&^)vlוcӲj|j|V\\{wuٲ LY,2i\}f/}?)On,i4ֆm?֪=->ҭZq҄6cE7\8an#k>/ǔgdYg*ϭ;6ӗ$=vCX`BPeᑩneOO'zg0']{Za~-#+/A`0,1^ @ @ @ @ @ @XzZd5}YrueL\Fٗ--1:ΌKhk.=eR* Kg?H^&>8g'I93Dd>8?QUX_&-\ 5ɔ>BN\(&*Q8S7H[ҙV>&(xNmbDg[_Ϙ˘g[o.~W#?a29 ϫ?IKۺJjH?(ߡ&vMxFyd['ŧKf-mvT}89?o!]YD āʼn5EBi ]tueَK~L'hK*/[ 3|J/Yk"a#0 ht @ @ @ @ @I!XZ2S9Vokxwk뭷27!,Q*;/[‹~ٺioӚ)gQ{{19=qu^ȯL2󇉥U{}U&Dy,pD`bF)SK)D<=E06rSRDsA9< m2j%đi;$_/H44 \oJc{MK#iRqy]Ku?Ϯۗ|y]vTՕ ؗVe]9,F/rHlM2mK]Y"g0c&99s+ ->Gwc{n)niYqIX+pKg'U_SQ⶧^vmkOlNиQnv7>S{,pX'_? */{]՝'Wek9fcWTc}Y|~Wc6MFs{e{cqS~֕s܇{j\_uoL^ qO?6}I=wmߞeP'cc{_SN`s'qcߥ>gӽyG`&~;= @ @ @ @ @ ?ѯ?jUW{%ee?ZrjȚo;m;e˗jq勗t[6[ʦyM. 3.QNƁ KIOjH^h,ff:ug&fY&PWeW&tα v1(ɏI?:v% (L+G\ܞ1=YHHw$z?jsFBUȾ$yQrevH,?y^?/BY|c{Vƶe#/I` ,iNj[+Q~&5'͜L0ktmC5w$_{,QڥWٕgK]~3Sݶa{~?w2Bm˳ى_|c;,~?Ç>O{O`qX4Nb @ @ @ @ @ @`FwoR]V,^Zx֍7lي W)+fn{7fnhk٦[zWYG~9w~ZfR;O%kReS+ni4.^ޥvk2/ɗLAz@dtʮ7 WmikGۚH嘲FY-mxICRNY'{'?{X2_ev9&9GǬ,.Ľb웓bt+m`oθ{'qTF%Yvh-q5ʺ%뉸_tk8et6з7,jmߥL/{Krhѯ'{K^!1閧 ##S&mCŋZRM[oֺ'Y(QtK^>)[= a|~osIgb;&@ɻxHb&7c){G9ɏF\',B+0R1b?tkMwǫR~Eͻ)"@ {aJL] 6hu8zYͧҬ<OiO6)Kh.<5wM|6ϲ`-צm d>ak{\eKE=ф @ @ @ @ @X_Iw,YzjtkFn,|M~u^lE/o)7G/~̄25$^{uX)U5 }⛉ v`}l]YL)1hmٟS.ʂ(l9)XUԱ5u&\uGig+yY{N^SڗGXcO8:Udm.]TD 8+xXC$>c(MئKE@`xէ=w0zϝ;u (0hc5#@ @ @ @ @ @-_;{gZ+?p-dm/^i+Zf_InZuKk;JWv.ws^Q{f\2x5%y*_ɖL {'IIl>lj'ݐq:hS#]'OKswMٍfYLҟ5of#4}CYz}t_Nen x orLi7-/4COO,xxlc%]ycQmtyc-Ly_0F ~w#?^Ub\<Ç>gS{]+4es'c%s|}'@ @ @ @ @ @%{lVxʛv[rL/se,1Wh&q~2۝\.eɚ7oHU>VN%M5vME< 1-[1/ tzbh쿕4qN~6ƌi4&"N?umss)#@`Ċ_Fsk֕ay~eRqAu?7"$I|=v]noGOl y.6۸ڞxA%巬l[?kYᲉ7n˳P=;}o>˳,{Xzr$&vN&:@ݜ >}WL;#;/KbvoǐIDAT @ @ @ @ @ 0D?IebKvY}V{ŭwy V uniÇ>k+x݀dF }h睌 )+ @ @ @ @ @ @JK^WrAХS]{)ڭjt]'_&fBj8e,{43uWܐǥ4I_>Y#oLqLt\av'$n|پG HLW{_ qws?6Q'MdqS9,X6n+Xn\xg'e}^/[=\_]PJ|*H @ @ @ @ @EDzm/ٽ_[oJ~Vds'y!__΄[hۦKeK\:Ջfqٹ:wU[6xLu8^?)7}~ hg%[۰ \<}2 Y@mr.% /ۘ/~ @ @ @ @ @ @SȤѲOX{> " L߫b[Tef~4xOc&nH_fʾ\nl/7?/c](,W6d.}gi%{H89?歕 00FO=uwa['8W<{SYp1{Vy9gP's1zϝE9?fqDNMl ?8 @ @ @ @ @X߮~`&ISNr'V͒?*,4hI c}9gsR&n>K%]h|Nb*+Ǧ,\5Y=m]jm\,rTݨLY8u6UUIǜ E *}|`#J< ץCθM\11ę[ylseW 9wNAu9l~?Ç>/}\hˌ  @ @ @ @ @ @ pz>.F{W9LF*;;`rjtMUwsߏuT~h/͹QKuɽv }H*?n6F͓.|b$_'.lZ:{zR 0eNv{_/1l3qOum UY';ϺN?mz3|.|}-:׫yUjv[ 0e @ @ @ @ @ @21L8Fu}U5me[TnBu{ڝZ)ʺfsRqtUnשCUpkWe]i]*>XܥAY\bж2'O֩)v&ΪliU'h욤' ד{9Ǭ1kpb_w,46wKTV%5l+S1gU5vۤGUg]˻CIiuv釷sgC1CqjfQb @ @ @ @ @ @4=YY_3-u=0 ^W66;-ٗE[+ʧ&6m6ө;*zqKRfɮKY߄X#{ӰL%u,uāU2liP&bwch.Bsu-U뱺>_̋h~Ko({P~wMUebs|l{чWj7YotW'kDyaO;@ 0ۘqR'$@ @ @ @ @ @M &˄n 6<3gbɉ;%K<'NbDs1rΑfa'._rW$K7ql}6qDg[19͝UdߘsO,'m'RDs,;w]9c8;$-u&e&z-e/nXu?nUf3} 0+UL~C˳/$8.wcm;Lm'SK8O1zww;%H<2_8"ܾ\5;;L~?Ç>믃Y}PYX2KuZ @ @ @ @ @ @@ d2Uݥj.{YR\]W%sr祪,IIZ9O)+q)N,pX,XdVx~15%?H[[eSe%&۾Gid ǩ?-Gu;?yɊMN=;wM{2c $ o;%#?~sCs)6B8ܡ @ @ @ @ @ @-n1C,zQ(q~^Li36vA]eEcqy:)m9gcJE=~D||mWo-T2ϥ'G6zN>[']zY(&qqҮgl˵^q5J漛_*qe}c}?@hFm#qlcCXݳ%QI"dߌݭOkݳnZ}o[8>76sgu#c#pfIb @ @ @ @ @ @ L6 3m\3\(;xNƞ @@s{Ҏ(+ @ @ @ @ @ @X+ m\ @s̬6f @ @ @ @ @ @UOd  @7_fUb @ @ @ @ @ @EnOm%  @;#a `>  @ @ @ @ @ @dM:=JzӒB9ѫ;  @ AtAX2h @ @ @ @ @ @,pXLF,}E6mݞxcI @M^bs @ @ @ @ @ @@ʼ&FGG/^ @A;h 0Q#@ @ @ @ @ @ 0CeD|D  @@)`\ @ @ @ @ @ ǹojm0::zCJ<;mFfK .` /|~ @ @ @ @ @ @vmNt(9ksK6 @R{t9$ @ @ @ @ @ @ @ @U7m @ @ @ @ @ @ @ @6l @ @ @ @ @ @ @ @Eb @ @ @ @ @ @ @ @ Fb 6P @ @ @ @ @ @ @ @m @ @ @ @ @ @ @ @,m,@  @ @ @ @ @ @ @ @,;@ @ @ @ @ @ @ @ `,`>j%@ @ @ @ @ @ @ @؆ @ @ @ @ @ @ @ @RnMFIENDB`n&& dK1PNG  IHDRiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy{|}~4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx pHYsgR IDATx gz0 1}mDAf5DQt܈(bvɮ+'"p (s00WL53#-Ut[+?Mt[߷]5ӥ/WmmU4>vqZPVNh>4uۭnEfCrVC1}!%:S\u+W7SVnL)JՑn6Sw5̛pnzx4*ۗMՒPfuԠZ>]ݾ6.ZퟜޫnU:mT]·Xgrmx3Θ7EDGT _Z;?A[gGTj\YY) <'cJ.]Oժ#^O^^iٲ5n$'%ESCy/?/Nj#^^/^${7#G*}N-zE6lLg\*(++swk^:vݻwmһ>3cϗ瞛/&R3+&On&3RUlڴI;F>֗0?郮?k_Q*(..'PQ&8x}5ZufqwZ{{+_1zްa,\3s:tg͘/Z ޙϒ# {dɒCO=4Zy/ѣo7.]Dqq}>4wŗQۑ#Gd VS<_}u"n*/̸ ާڵ1k}ْfƇ?H^~Uv g|YYY}G6|m![XCzcjkjj|ڵ}AG[Lm۶;q802x}vukZ|A޽bj8p `bnܸz34-xIJJ O>1:5*x?XOG>qco;p$t-K#^1>%xݙGs7}K:K~iՙ6%xX9aFTFg ^P#xa8%xB5[T#o3M?0SK0q 6,bSrٹ^RSL+=a?:Uשn^7Zb}T׫o/ۘ<̩RjnlSΜ/ũ9̩RNxvM—Yέ% ^[=^%έ/6xu`)Μ/bUscf@H:@:"^u ;x];}999tnbPEE<];U]D?%\*%s:׿IRR|ǜiٲ7ر?7)EٳGny)%xIYK.c&߸Q'^ @ <~u._$$X[[ G@ ۺu 4X| @S̪@wKB=>g/= D$4ZʜC#X)@qe  |C  |Z@)@ @#@FǕ" R I DG+kE@ '@W֊ @H7$ O  7:@oH@@ :ot\Y+ !ߐ4< @t踲V@B !ix@qe  |C  |Z@)@ @#@FǕ"p*|re @㟘Cq,T݇FaD@Nkm˕uj + z!.s߾3ٓ}~sRWW'@Jcg&KGIIIrq]r֎ p& 4މ&KJjJ# 3 ۪UVM8@NzodƴF@ ($x„o@p7|gZ" ` ^݀eA@ 0"@x 5Dغ:QjUEEdٲ7C-8 G1.}=4[j[zZ&SZZbR]ScBIrsZm=<벫=k.IOK3n;+(ȗ*={W[^^9]{ _^^noٲE*@L6odEFIYܬTQG賴OVWܨPkJ7Q  99]d^R}@L|z}IzO=+(IHvv!jkd/~ufg2w5.= 6\.2DZhaLmr%''ǘt!)UUՁg_ܳʦMdZ`şoҿq˭dſ.}Vٳ7#G_PCEEE2ud:tWJAGzK^5z4֭1fv!?T:?-eoҾYot7um ҺukԩјW/gʨԿSNNQaxBZgg[CڶmgTmOz{ g U8=@,— @ 1;@_@b,@@ |@cpC@e@@ o@—m@ 1;@_@b,@@ |@cpC@e@@ o@—m@ 1;@_@lj.R۝;%J `FJx YɺC7Rv#>q۶ʺuk_Me| fԱu>เDݪto@L755w o@N@7~WN)A@4Vm D&pk'|#35 A'&|d  =;@KM/  ^ݕ?>igW$<}FKF6u _'jW͡nnעClٛ#GWW]]呗Ӹ֬^-quZZZb=R]SsEXnVwƭu\TT$UmgF֥ g֮T5o?V["eI&aMߗMѹYYyעE qV}rW>B=|@8=#?.]"|47WM4rzR d)F}HeQ#o/DnՍ'^8|g2o1b{'Æ ˇ IєW_^.t:fzXT L^_jĻ}V6m$g̐֒hΟ5R #nU췸xlݺU[ˇĿ ٕS&˕W+R2 :\|ګ2e4޽1fv!?}u@tdi>^z#uψz"jkk6mHǎ퇍o۶Ts.]ϚSګg^FXEde_yFוi?l}zz Y׮].B;O훺iݺt.׈_tɨ}3)TsNN0#"=zHv쇍pZm@@ |@cpC@e@@ o@—m@ 1;@_@b,@@ |@cpC@e@@ o@—m@ 1;@_@b,@@ |@cpC@e@@ o@9}5GՋ_wn_!p: }z P!| a8^?_U7 l  DL4h|q}ֶdݺlgGZ/ Kw^(iiFզWOjjjm>$We N[h;Q帬{{>F݇Fk2.]Kח(&hlLHO;i3{2.]S>Pu4v]M j7ɋ}שZbbg.]XVZUtw{s ȣ{b3}G;5Wï[nw+b }4~ߌreAQݪ e2jhzO5K,E,,Z"QN,q0K?lYf,^4=_ϮF >fQl[d2a$KؓU7$7Z]e]p2;vg}6U̸|[:x+**$99Y^O]J_qBͧ['< M'M99]t^R}@L|wwޣرw4]k<)ܷOnmt8lILϒǷZzdAߊqy饅7r9}?}j?'袋U8Wt7> w5N:wr f&Mlԯ.|QY1cJNN[I&L'}oQR :˲M͟?W~}2C5TPT\$=\zer/֭ޑ/QGK^`L]v!yZ**x]sLѳN#[j%%tCQ]z3f;u$稝ܤs:t0j`ɖJ*++r؛׸v/tiÆ ּ [eJJJ %kؕg_%-55 3z2n;;x`TW3WIO7mj5LeV);v0l6zꓕi YRI_*x2S D5\- 4PymU]5l&x*"^_ڔIi3LQutRjuiHMduPO?0o]kUDu+W jTCg5MLrT!-١kL)L[[2BfL hφbVfTJN84q*PKjIENDB`:g(Q6   t { Excel.Chart.80Excel.Chart.8Hhttp://www.emsl.pnl.gov/docs/global/Hhttp://www.emsl.pnl.gov/docs/global/Hhttp://www.emsl.pnl.gov/docs/global/Hhttp://www.emsl.pnl.gov/docs/global// 0DArialHlhhD-3 00000lhh DCourier Newlhh@ .  @n?" dd@  @@`` bZ@     }`b$a]*fߠfNVšX~R$r*~95,  ~R$b:wQB1mR$sJ8\gR$T*QerdVb$P{)[N:"!b$F-\E/l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`znp- }x='Zu8iƀ"PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB` znp- }x='Zu8iƀ"PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB`08n.)HD}u!DoaxPNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxKv2.wi0^A+HX60 pVp `JgJ:Wn*Iw'=TR< !!@_^9 ݙm?=[; xKX]ۖl Ȯ8XE¥ wC~*l;,{n2Bb2ISj@|@>6 M.C~8Ys< J>K? ;ɛ͟vh2<,/b쎝gad\s7L~/ :6*Mf1XއTb䁳do2DMk*_?&)|?&h[&\ |̷~.:d9aϦ8y6MfxbH4dF.MfMFMFim~.\&6aDmLz'ؙkmAomŪnV{ύ&9[x CHwhdޅџ3LfCT";d4N0& x.j2vAy?흿yHnׯq-`h| -$dV2̽a[~fNy[}:v\48XBr 4UխiR>MɌG<|ʛMw]_M}!ex67'S j%5j/dvsb?Lu ^pA"xr;椫&)Z]0\n=h|vv1h(x&39حVv%KZ MF@A٥ &&Lۆd. |[p0/nu-^Gc̭wM~e[E`*+~U^~m|ʶKMf7aG(3̶EM&u2!xSdOa^}0PomWziM&Y3 T2ۥOqo~'i|Cŗ^M٥hIzNCuҜLaVw4M4&|4559$hctpVɌzN=0О3n2Y웇Ngd,ng>Ld-&qs:1hZ&-u,`fKƵNAOo >ϰ颏&Lb aqkRݤZ >lz'՟.5\jɼ0İ]M9ܫi@oӷs\!)5y8]M|~LBO?}[핝F,4Sʯ6bҖL(. gk2Z Ld~Ih106yb`m&&LMF䚌l35)k䚌g`T*=I _ %``Ö/706]ӵL6Tguɼp<`k}[A:0Z6aj_d pi:ϯ/F02]2\bs2:@j];58T0 xwd &cL5/ &ŀ6jb_$tWzv)*$؄,S.e1256\Z3} V94PX [ٕrtؿ@6S1JYP[jZ']idfJJgB&c(* e> Jgo+*>[ `RٰuNFLl2?ٗAzo23XT6i2Bh'd72񨉤]Cf>dĶqg #MB]s2@dZ.i2@M%VF. d! d! d!!@@B.dĶfu2p u6O!P'# ^K.2œ PG9}ɈXi3@Ɛ %dvB&6wuJeC&} Q*4&#dvB&o2O~_l?ĕM&`]Ȕ[Lh3l1/΄Mfa3Tyۍ_`o&M&˘*gA&c[Q>c4dd@92.U\dv &a٩6} ӵ_y+ x ;6{> neôܻu],#6mƆKdb>I_0T=\z6cJK2dCzå.|~~80Zme&̀S{iN&KF5^w iRMƚ0Tfu2El\swjmc5]kNγLoŶ489c{6f.&jm2, ?`kyj^LL>0lo sZMFd6h16mbn2 $d~Ih30|)A̺3&}L*6o~n2_jұ$̟QvA4|ms2]Z'-n>+~˳L'X'S=hC?*w[[]~p>eۅs:z^5!8a>EQXݿeJ2'xٚj/a ~LDˠVk2K c?g44>!CoL:kC(} ~OIq}M>\ތi8ɤwa<Fj54-cU6 /?&3&#l&6oQCRНDh2)`8d鸪GR CɶNE'sE-W1Pi2Bv>n1l~Ͷ]p*C*^Arױia!Ug P2p9Zmen|̱h2lu2Aܦ:PV4!~Y~ UF<˸eh2to/4g&y]Ph2EX2Uج(,^m}+]>U0&'6= !!@ `[OIENDB`@8n.)HD}u!DoaxPNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxKv2.wi0^A+HX60 pVp `JgJ:Wn*Iw'=TR< !!@_^9 ݙm?=[; xKX]ۖl Ȯ8XE¥ wC~*l;,{n2Bb2ISj@|@>6 M.C~8Ys< J>K? ;ɛ͟vh2<,/b쎝gad\s7L~/ :6*Mf1XއTb䁳do2DMk*_?&)|?&h[&\ |̷~.:d9aϦ8y6MfxbH4dF.MfMFMFim~.\&6aDmLz'ؙkmAomŪnV{ύ&9[x CHwhdޅџ3LfCT";d4N0& x.j2vAy?흿yHnׯq-`h| -$dV2̽a[~fNy[}:v\48XBr 4UխiR>MɌG<|ʛMw]_M}!ex67'S j%5j/dvsb?Lu ^pA"xr;椫&)Z]0\n=h|vv1h(x&39حVv%KZ MF@A٥ &&Lۆd. |[p0/nu-^Gc̭wM~e[E`*+~U^~m|ʶKMf7aG(3̶EM&u2!xSdOa^}0PomWziM&Y3 T2ۥOqo~'i|Cŗ^M٥hIzNCuҜLaVw4M4&|4559$hctpVɌzN=0О3n2Y웇Ngd,ng>Ld-&qs:1hZ&-u,`fKƵNAOo >ϰ颏&Lb aqkRݤZ >lz'՟.5\jɼ0İ]M9ܫi@oӷs\!)5y8]M|~LBO?}[핝F,4Sʯ6bҖL(. gk2Z Ld~Ih106yb`m&&LMF䚌l35)k䚌g`T*=I _ %``Ö/706]ӵL6Tguɼp<`k}[A:0Z6aj_d pi:ϯ/F02]2\bs2:@j];58T0 xwd &cL5/ &ŀ6jb_$tWzv)*$؄,S.e1256\Z3} V94PX [ٕrtؿ@6S1JYP[jZ']idfJJgB&c(* e> Jgo+*>[ `RٰuNFLl2?ٗAzo23XT6i2Bh'd72񨉤]Cf>dĶqg #MB]s2@dZ.i2@M%VF. d! d! d!!@@B.dĶfu2p u6O!P'# ^K.2œ PG9}ɈXi3@Ɛ %dvB&6wuJeC&} Q*4&#dvB&o2O~_l?ĕM&`]Ȕ[Lh3l1/΄Mfa3Tyۍ_`o&M&˘*gA&c[Q>c4dd@92.U\dv &a٩6} ӵ_y+ x ;6{> neôܻu],#6mƆKdb>I_0T=\z6cJK2dCzå.|~~80Zme&̀S{iN&KF5^w iRMƚ0Tfu2El\swjmc5]kNγLoŶ489c{6f.&jm2, ?`kyj^LL>0lo sZMFd6h16mbn2 $d~Ih30|)A̺3&}L*6o~n2_jұ$̟QvA4|ms2]Z'-n>+~˳L'X'S=hC?*w[[]~p>eۅs:z^5!8a>EQXݿeJ2'xٚj/a ~LDˠVk2K c?g44>!CoL:kC(} ~OIq}M>\ތi8ɤwa<Fj54-cU6 /?&3&#l&6oQCRНDh2)`8d鸪GR CɶNE'sE-W1Pi2Bv>n1l~Ͷ]p*C*^Arױia!Ug P2p9Zmen|̱h2lu2Aܦ:PV4!~Y~ UF<˸eh2to/4g&y]Ph2EX2Uج(,^m}+]>U0&'6= !!@ `[OIENDB`PdnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB``znp- }x='Zu8iƀ"PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB`pznp- }x='Zu8iƀ"PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB`dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`znp- }x='Zu8iƀ"PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB`znp- }x='Zu8iƀ"PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB` znp- }x='Zu8iƀ"PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB`0dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`@znp- }x='Zu8iƀ"PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB`Pznp- }x='Zu8iƀ"PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB``znp- }x='Zu8iƀ"PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB`pdnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`znp- }x='Zu8iƀ"PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB`znp- }x='Zu8iƀ"PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB`znp- }x='Zu8iƀ"PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB`znp- }x='Zu8iƀ"PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB`znp- }x='Zu8iƀ"PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB`8n.)HD}u!DoaxPNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxKv2.wi0^A+HX60 pVp `JgJ:Wn*Iw'=TR< !!@_^9 ݙm?=[; xKX]ۖl Ȯ8XE¥ wC~*l;,{n2Bb2ISj@|@>6 M.C~8Ys< J>K? ;ɛ͟vh2<,/b쎝gad\s7L~/ :6*Mf1XއTb䁳do2DMk*_?&)|?&h[&\ |̷~.:d9aϦ8y6MfxbH4dF.MfMFMFim~.\&6aDmLz'ؙkmAomŪnV{ύ&9[x CHwhdޅџ3LfCT";d4N0& x.j2vAy?흿yHnׯq-`h| -$dV2̽a[~fNy[}:v\48XBr 4UխiR>MɌG<|ʛMw]_M}!ex67'S j%5j/dvsb?Lu ^pA"xr;椫&)Z]0\n=h|vv1h(x&39حVv%KZ MF@A٥ &&Lۆd. |[p0/nu-^Gc̭wM~e[E`*+~U^~m|ʶKMf7aG(3̶EM&u2!xSdOa^}0PomWziM&Y3 T2ۥOqo~'i|Cŗ^M٥hIzNCuҜLaVw4M4&|4559$hctpVɌzN=0О3n2Y웇Ngd,ng>Ld-&qs:1hZ&-u,`fKƵNAOo >ϰ颏&Lb aqkRݤZ >lz'՟.5\jɼ0İ]M9ܫi@oӷs\!)5y8]M|~LBO?}[핝F,4Sʯ6bҖL(. gk2Z Ld~Ih106yb`m&&LMF䚌l35)k䚌g`T*=I _ %``Ö/706]ӵL6Tguɼp<`k}[A:0Z6aj_d pi:ϯ/F02]2\bs2:@j];58T0 xwd &cL5/ &ŀ6jb_$tWzv)*$؄,S.e1256\Z3} V94PX [ٕrtؿ@6S1JYP[jZ']idfJJgB&c(* e> Jgo+*>[ `RٰuNFLl2?ٗAzo23XT6i2Bh'd72񨉤]Cf>dĶqg #MB]s2@dZ.i2@M%VF. d! d! d!!@@B.dĶfu2p u6O!P'# ^K.2œ PG9}ɈXi3@Ɛ %dvB&6wuJeC&} Q*4&#dvB&o2O~_l?ĕM&`]Ȕ[Lh3l1/΄Mfa3Tyۍ_`o&M&˘*gA&c[Q>c4dd@92.U\dv &a٩6} ӵ_y+ x ;6{> neôܻu],#6mƆKdb>I_0T=\z6cJK2dCzå.|~~80Zme&̀S{iN&KF5^w iRMƚ0Tfu2El\swjmc5]kNγLoŶ489c{6f.&jm2, ?`kyj^LL>0lo sZMFd6h16mbn2 $d~Ih30|)A̺3&}L*6o~n2_jұ$̟QvA4|ms2]Z'-n>+~˳L'X'S=hC?*w[[]~p>eۅs:z^5!8a>EQXݿeJ2'xٚj/a ~LDˠVk2K c?g44>!CoL:kC(} ~OIq}M>\ތi8ɤwa<Fj54-cU6 /?&3&#l&6oQCRНDh2)`8d鸪GR CɶNE'sE-W1Pi2Bv>n1l~Ͷ]p*C*^Arױia!Ug P2p9Zmen|̱h2lu2Aܦ:PV4!~Y~ UF<˸eh2to/4g&y]Ph2EX2Uج(,^m}+]>U0&'6= !!@ `[OIENDB`8n.)HD}u!DoaxPNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxKv2.wi0^A+HX60 pVp `JgJ:Wn*Iw'=TR< !!@_^9 ݙm?=[; xKX]ۖl Ȯ8XE¥ wC~*l;,{n2Bb2ISj@|@>6 M.C~8Ys< J>K? ;ɛ͟vh2<,/b쎝gad\s7L~/ :6*Mf1XއTb䁳do2DMk*_?&)|?&h[&\ |̷~.:d9aϦ8y6MfxbH4dF.MfMFMFim~.\&6aDmLz'ؙkmAomŪnV{ύ&9[x CHwhdޅџ3LfCT";d4N0& x.j2vAy?흿yHnׯq-`h| -$dV2̽a[~fNy[}:v\48XBr 4UխiR>MɌG<|ʛMw]_M}!ex67'S j%5j/dvsb?Lu ^pA"xr;椫&)Z]0\n=h|vv1h(x&39حVv%KZ MF@A٥ &&Lۆd. |[p0/nu-^Gc̭wM~e[E`*+~U^~m|ʶKMf7aG(3̶EM&u2!xSdOa^}0PomWziM&Y3 T2ۥOqo~'i|Cŗ^M٥hIzNCuҜLaVw4M4&|4559$hctpVɌzN=0О3n2Y웇Ngd,ng>Ld-&qs:1hZ&-u,`fKƵNAOo >ϰ颏&Lb aqkRݤZ >lz'՟.5\jɼ0İ]M9ܫi@oӷs\!)5y8]M|~LBO?}[핝F,4Sʯ6bҖL(. gk2Z Ld~Ih106yb`m&&LMF䚌l35)k䚌g`T*=I _ %``Ö/706]ӵL6Tguɼp<`k}[A:0Z6aj_d pi:ϯ/F02]2\bs2:@j];58T0 xwd &cL5/ &ŀ6jb_$tWzv)*$؄,S.e1256\Z3} V94PX [ٕrtؿ@6S1JYP[jZ']idfJJgB&c(* e> Jgo+*>[ `RٰuNFLl2?ٗAzo23XT6i2Bh'd72񨉤]Cf>dĶqg #MB]s2@dZ.i2@M%VF. d! d! d!!@@B.dĶfu2p u6O!P'# ^K.2œ PG9}ɈXi3@Ɛ %dvB&6wuJeC&} Q*4&#dvB&o2O~_l?ĕM&`]Ȕ[Lh3l1/΄Mfa3Tyۍ_`o&M&˘*gA&c[Q>c4dd@92.U\dv &a٩6} ӵ_y+ x ;6{> neôܻu],#6mƆKdb>I_0T=\z6cJK2dCzå.|~~80Zme&̀S{iN&KF5^w iRMƚ0Tfu2El\swjmc5]kNγLoŶ489c{6f.&jm2, ?`kyj^LL>0lo sZMFd6h16mbn2 $d~Ih30|)A̺3&}L*6o~n2_jұ$̟QvA4|ms2]Z'-n>+~˳L'X'S=hC?*w[[]~p>eۅs:z^5!8a>EQXݿeJ2'xٚj/a ~LDˠVk2K c?g44>!CoL:kC(} ~OIq}M>\ތi8ɤwa<Fj54-cU6 /?&3&#l&6oQCRНDh2)`8d鸪GR CɶNE'sE-W1Pi2Bv>n1l~Ͷ]p*C*^Arױia!Ug P2p9Zmen|̱h2lu2Aܦ:PV4!~Y~ UF<˸eh2to/4g&y]Ph2EX2Uج(,^m}+]>U0&'6= !!@ `[OIENDB`8n.)HD}u!DoaxPNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxKv2.wi0^A+HX60 pVp `JgJ:Wn*Iw'=TR< !!@_^9 ݙm?=[; xKX]ۖl Ȯ8XE¥ wC~*l;,{n2Bb2ISj@|@>6 M.C~8Ys< J>K? ;ɛ͟vh2<,/b쎝gad\s7L~/ :6*Mf1XއTb䁳do2DMk*_?&)|?&h[&\ |̷~.:d9aϦ8y6MfxbH4dF.MfMFMFim~.\&6aDmLz'ؙkmAomŪnV{ύ&9[x CHwhdޅџ3LfCT";d4N0& x.j2vAy?흿yHnׯq-`h| -$dV2̽a[~fNy[}:v\48XBr 4UխiR>MɌG<|ʛMw]_M}!ex67'S j%5j/dvsb?Lu ^pA"xr;椫&)Z]0\n=h|vv1h(x&39حVv%KZ MF@A٥ &&Lۆd. |[p0/nu-^Gc̭wM~e[E`*+~U^~m|ʶKMf7aG(3̶EM&u2!xSdOa^}0PomWziM&Y3 T2ۥOqo~'i|Cŗ^M٥hIzNCuҜLaVw4M4&|4559$hctpVɌzN=0О3n2Y웇Ngd,ng>Ld-&qs:1hZ&-u,`fKƵNAOo >ϰ颏&Lb aqkRݤZ >lz'՟.5\jɼ0İ]M9ܫi@oӷs\!)5y8]M|~LBO?}[핝F,4Sʯ6bҖL(. gk2Z Ld~Ih106yb`m&&LMF䚌l35)k䚌g`T*=I _ %``Ö/706]ӵL6Tguɼp<`k}[A:0Z6aj_d pi:ϯ/F02]2\bs2:@j];58T0 xwd &cL5/ &ŀ6jb_$tWzv)*$؄,S.e1256\Z3} V94PX [ٕrtؿ@6S1JYP[jZ']idfJJgB&c(* e> Jgo+*>[ `RٰuNFLl2?ٗAzo23XT6i2Bh'd72񨉤]Cf>dĶqg #MB]s2@dZ.i2@M%VF. d! d! d!!@@B.dĶfu2p u6O!P'# ^K.2œ PG9}ɈXi3@Ɛ %dvB&6wuJeC&} Q*4&#dvB&o2O~_l?ĕM&`]Ȕ[Lh3l1/΄Mfa3Tyۍ_`o&M&˘*gA&c[Q>c4dd@92.U\dv &a٩6} ӵ_y+ x ;6{> neôܻu],#6mƆKdb>I_0T=\z6cJK2dCzå.|~~80Zme&̀S{iN&KF5^w iRMƚ0Tfu2El\swjmc5]kNγLoŶ489c{6f.&jm2, ?`kyj^LL>0lo sZMFd6h16mbn2 $d~Ih30|)A̺3&}L*6o~n2_jұ$̟QvA4|ms2]Z'-n>+~˳L'X'S=hC?*w[[]~p>eۅs:z^5!8a>EQXݿeJ2'xٚj/a ~LDˠVk2K c?g44>!CoL:kC(} ~OIq}M>\ތi8ɤwa<Fj54-cU6 /?&3&#l&6oQCRНDh2)`8d鸪GR CɶNE'sE-W1Pi2Bv>n1l~Ͷ]p*C*^Arױia!Ug P2p9Zmen|̱h2lu2Aܦ:PV4!~Y~ UF<˸eh2to/4g&y]Ph2EX2Uج(,^m}+]>U0&'6= !!@ `[OIENDB`dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB` dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`0dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`@dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`PdnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB``dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`pdnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`dnZet\__7_PNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`/ 0? O /(PK!J[Content_Types].xml (|N0EH-X tc HIb/yU8i{4ja&C+oU-{V~_)!bV䪻jև$:P+'5 = C 1{Q'0Q610x]l}I\JHY\@]^Q|@7J3|;CRMvGZah𩔑J]2SoNg3:~&UKM6o^PK! K& _rels/.rels ( 0nS=H^DtiUۛc a)hěBUrdk)Dd gIDr*dS("QlT3Q4b̜'օ9I]e3\0ťQ.D=vtr5aƓI+D#V0;f[e!/PK!tableStyles.xml I0@Ὁwh}-CQ$ +w*!@he/?JXd45ݤ{c@qqi` yߥ9y`Ӣ` 3f3ff` 3f3FKf` hk]wwwfܹ` ff>>\`Y{ff` R>&- {p_/̴>?" dds~?" dd7T "I" b? U 4J p?" dd@    @@``@n?" dd   @@``PR      ` p>LC900>E=2++#vPK![Content_Types].xml|j0EжXr(΢]ylF wJjǝ{za&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT[}Q.b&dۣ\>33ir<|*yR/ah3Q)#q]PSgFLzPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!l/FT)!drs/slideMasters/slideMaster1.xmlZM6.[(֯I dat2eCQE㮊rH.:%sB%#KJdLmk'3}' Uq?֐BXNc6 g\`64e$@+'Gߜd<+JrB AIiFE)O|6r3Nд 1Cz4|0Qbq%./I!&1Ū Ђ3z$5Ci$?L(RaR'0Jŝ1'9Kr*' Ar9Lax-FXPR0:>]R=sP )^/2,M35`  2~Ξ:J8-VMpN2l,,rgSUWP(K\NH|d^5 [6t݆KRObJ23˯>KrHC' 97.¼1Ur[3Ux@piОCgg8*@yH ȕ6׿^Un\ysͫW7W|<nU YMd"=0r%VO+ȵ{r\hEP 5Y#ڱi42ܾ/Ʀbӹc-G{6dVlwlꦣ{:Vtz5:]u{:N!(m_ 't2 S4]7) 7J .d g?JX\y4(윺wPն؇~Z`BIYeɸaı·SF^q|=F>)KaS5D=S>0MI^z&̛=rƞx[*\.8<֛qVk;㾳!ݲrhB' d:5q ~v-ֳzhFNbNF,"L}y^wSxU[hmJz:R pbnE9P)z!/M[.` Lɲ\[ >͆b:^1Oh Pwoq PwEm띊^AuXj1W*@ŀӚZ7O#KOiPK!qԉ=drs/shapexml.xmlUN1W;XC ҖKfBGm΄JuVq/Gg[Y*BX~rQյvOM'+p-צfܪB9pN*PRa50JgÊ,8SPb bc)>o5>ޝlhϰȒ/:P;1;M$ I83p(<:<?18tܱ?t6؉w'Ε'A17u!*Y!妕SRmz Bw{ mr Ͳ~[5 i:CY-gf@Ƽ`??Z =2V1}Ts U3)0A!_ݕæ@> S=-|a6j4 jz8JħKLItuC0!B{'`4h\!gHBe(BdI2 ^0ڥ5.x 諞{;%v&`0B=.OPP-JxG J 0WyDwWOsf5qTFs5rox.q$ʳMe0ٴ.R+Xs̅ں%u$ Mz5_֙bJ6$00X+TŵLtYݕsosDjK!VK}`U{jlMVgLYS]"(U֎_o[gv; f>KH|;\XV!]օ Oȥsh]Hg3߶PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!c Ctheme/theme/theme1.xml[nH/@1D4 @fֈ=s$%1<]`K&WتئEʱHV]]U_Uuuw\yVuV3UNSHEVf73GU E:Sߥ?9l&U$3u4ˋ:nRWn-jCZ.y n C U)sR*WUZEC`F}!rhjH'Hŭuy!LGx\r8M$5HLN!b&|\WoxD9K2գ(bJIhgmZ\pdY?Ve `?86N kWę>jX.Xu0u+8ӧM3M^NY6)-]2谿4l R+uBtrgT-dM)SQNu'L 0T8iR3AB/@.>򢋭PT2,UIv.UAsJUHX4Q,Rkۯ}تtMJ񶪛kC*/p&ƿaMNf_选|3.@j2M;=(;{rפzVLq=nf*4~f*J>}+k$Q8ɷk½os93rj-[=Xۃ=~)S-k`8H\+ ^gjY5v%q9`- x *}-1p<[WJ2'ͺJ+pKFyaCEuحy&oUe N 7OJwA(]I> ąZDeH}݅}4r! Neb́[PT :|fK eUӛV8 X3jDZs{X'3&S'΂y 9x~G M$,ras Kf}E ݇(t->*V)%r¶mBo۫J=+Ȯ)[V|Z.uq︃v( t$@ȉ+ɮnu BZB4+no0=erFLja)ۀ %Sf݃SHeU:%XL-ڤߤ -)lQʆd1 RyԌ wp~e&YwtuAL*>wMP EB͠ovRn@/m Rmym~*Eie y͒Cl/,nCtNhX@6F (.o=_,.¯ni;I6P޻ rkFM:wDLាuld[*Bg:Z|wmb7 Hv6댮ꓐųa 2 |rP*d'n˰=`d YOKcSLDDXN象G?" |ɼrJt{:wm\4c?GDZbl95At#ka2ˆK E"Nݒ; EӒwv.(:Ȃw/b"A=c:n4=:xm'@Ӗ3tFM dǢy;`:g /qn/G(X6UJ'=MfQm:7\M QXO?N)p %l8lڃA/Ѩ1CǓ tD?p}2-éǣfgecB2=˳h  j2G|:jC7qtNlC2Aء2y;:??44:; tlÞihZG3AGBh`@FB؋vheHNh:q :Ahiը@m4n;Q(*KiA_:^;5ܻ3tP6$ǡT9f1ujOK<\3Љnyd4x_e׌:0xx1i8"lxNz^GgוxT\_?Aر۷qz¾G26Ws5Gvۃq47rϗ3fl ?3~35ؕ;qm0v"7 "9쌆(>"jN[cshHńM4Fck;8;" v;1q|^\8)v|p'|25+ҹ8vPm?cg;/kƉ'laF9[#v`OEqv؊ Vs6߄8Wd; Ǘ?G,C~ ĝ V5<',H؁"|^n^./ PK! ѐ'theme/theme/_rels/themeManager.xml.relsM 0wooӺ&݈Э5 6?$Q ,.aic21h:qm@RN;d`o7gK(M&$R(.1r'JЊT8V"AȻHu}|$b{P8g/]QAsم(#L[PK-![Content_Types].xmlPK-!֧6 /_rels/.relsPK-!kytheme/theme/themeManager.xmlPK-!c Ctheme/theme/theme1.xmlPK-! ѐ'theme/theme/_rels/themeManager.xml.relsPK]: LPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!U!drs/slideLayouts/slideLayout1.xmlVn0?<pWdWièiVI"pvg^ T2V3<8c9WM1r W&s"#yed M$Lw Sl$m[H~Hnm|pʾjL2AXZ|{#:i7Mu9ö 904}rHi(8>-j(>c TkiAZ&mj]luРhyt9ܾhd?O0ed8>OGqg,ceZ+IF;C$kCx5W!r f$t!_J L2\ Xpx0Ck.~~-8}B^#s̢38j2\d*_K~!7#/4}G[BYETBV@hܑ`䭁[aSûNd:?VK#Qh Pt{an{j8 +q;zo3q=7>y(l/ 8dXFJGu\2FBCF1PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!U!drs/slideLayouts/slideLayout1.xmlPKmQPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!0.v!drs/slideLayouts/slideLayout1.xmlV]o0}`q 6*T[Vݻq /&]; B@{=\'[)PɬZMpc#ιZOsDDh&xwa2'[CLpɒтI>j<[i+[NrK~IIumW+NM7)_X&]k$m'}ژĒ wtSNƪn#99$4+HZiKHe\Y-'-_n9UX373˙E<h5 NuXUgdە ph;]BɠDEzX Btl7k?Iv*RzP>94گڣez@>[U#M61)(C7pU^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!YI!drs/slideLayouts/slideLayout1.xmlXr6}Lvm(&R>ApAt]/2,g~6 |w.J28?\b, Jyp&x/ElDUZtl--ϩy .a-U: ;`b]^N9dS4C2 jfA)p9ջ`*/bw"ϘVF9eq,Q*M7WnflSZnp).N9a :QUdl3wAH[H2cԜ|ClL֜>bU,P-5/x3( g$S\Fu_DcՓe//ز/X /ZGv'jYgVpM)l](3D*ݯcU>#|%u-Byzţ7.A䲎G8Nh8%tN8 hӂ؏\|cB^iLxt7&.MaTr@ \CO`lcW %4B# ޕ+Ly mA8 C ˋo+h5O2K>Sc&.Иdup\&K)ߔ6ih)([%8D!Rk&APlP Hx2|Ep2i9rNA` /puL&p0js5hU^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!tJi'!drs/slideLayouts/slideLayout1.xmlWn6w t9 % q-[i,iHUOCJtd7Yv{>J.0"\2a}ZGX*3*hM.ԈpHe[[a9/y*.ntI-~Agpb AI uj)]mɥmH4~ l%CWR.*+P Qؽ'=heںtQL+6IKҺ)YTT~NsuVƽJ U +G"w8jv_,{,0BrؽȈ%` kZPyVs{]Wwo4)2GRDE ?%`xlL4mtyuIS$jkbM,U|?Ap(ʲj<֝$*$>x@)(hTӹ߸n@|vUN[G⚗>o|LH4|6qP־ey_An>AG PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!tJi'!drs/slideLayouts/slideLayout1.xmlPKpPK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!!drs/slideLayouts/slideLayout1.xmlRN0}G,?TRhSi,| 3v+bϜsf6(ڻ-9SNF].~qw棊r}z "/O<\P. *NYg>(G֣DWU y[S\./* I}jr`@cCݬ<a! dF~ 5щi}maAά;٠ ;%>S0dʀ__-jm W j#MXFcxAr; a8l&k' D+WG4 ľE^-}3$OL@naWs(XK < 4ЖbRxU@0d3PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!!drs/slideLayouts/slideLayout1.xmlPK`PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!EDu!drs/slideLayouts/slideLayout1.xmlTn0?<p86myukrZ.)ir(rvvfڋ˽ѬQ!Ζ3ej)ÏgVU%oU.JE(*HaST~d<jx^R}srgŎ$( Hq`3=tΏ3(Vͤ`Eoidj\tkL1€ќ)~n T$EPQF}A j*#iQleհ kꖳ |G>ɥC 2,DJ+\E`u@^=,ZѢx@/@Pؾt jLvyWn7Ő&WL;]:(P荓OYG>Ξk9-=;1tzd69N_er>L'SRmg83%J"47gHnR' uU+zS鿧 ::[r 2=! eGK}Kq~k1Un! ,MDDa)+^|V=Wwkiv:܂o2)z< ϐ1 _PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!EDu!drs/slideLayouts/slideLayout1.xmlPKP.PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!_5q!drs/slideLayouts/slideLayout1.xmlYn6?`@Ԗ, q-[iiHO{)іm[ѥ|~sR23)&&bdy}]<  Rf{OEyrOripщSDSSNLT95S=wE_;睠tr ^ڬEe̙0b_Y[˩zYW g<3kK)'Rv*b%\\4ʜ{$?Tt!Hyi<)*ٯƨl4L]@aQ3e^l5{=bpGȤw)a7(xA#ޠ?tm6>ӨP|`2k3 dF Bl*SȬ~sLCTϕ\Ys(  [U%qn҄Ci OSrFA`07<_%!6LcstXG,%Ua]>: U.ަ8Y*ycAA2:<±ma? P5>n8U%PCLR! 3h!>_>zQUџ'^B] RaW!<- mXHv@Ec?aGHU[V7a[[!wC\5mA; FֆVZvili`دjavZgXmi}ʎjqسS\VoU>{ʣGj`4V #AE-VTц g*uicL忈 0g*` Z+i>xJnC'EM`N`XC֩F[G "XXkړXēXl^4:omBp-oo,"!i}zUojn wrLjrx-XM'Cl2%U0 iFΆ89'Q/s2'z&='˜_͉D5=_ЪBxrV eV̊?~?]fE|uXcc#gE2zS:ݾ#-K;0S3n!*PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!_5q!drs/slideLayouts/slideLayout1.xmlPKO@PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!~&!drs/slideLayouts/slideLayout1.xmlWn8}_`-Y!vMb1 $)ѹyc;hf̡t~#8jc$Ue-'duD+&x,~?3]X^^Z;d+tYZ1A;{+eqpj{!-x/ zszZՔ}Tt-t-a8VMc17k}B@ytGLȢKD(Vί)E#8F\KeȒCD 4oL\;fȭP{Bn;Fԡs^"I\X*tpãd蹞k33.=C,JADʈ)@,`詭E`h{],>A CutҘ΢vdU %R<}mzk|Ξ^W+pP1]%<d>fây:ʡGIQ>u>^hkے8>t{8L``͞b1D`6;:a#-%&"DߜMoa4_`sF,g GЇ}a^~UGyj/;쌯sjj ۟$7 >go9=k~Ep7[l Ml{Y ' u ᒆQ ;߷ӟPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!~&!drs/slideLayouts/slideLayout1.xmlPK0PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK! ) !drs/slideLayouts/slideLayout1.xmlێ6 ]XAmQoh[XHZ|H75sRZZW=wqĤ&/f}yp7\\-gAoUTfe|m^ω,{g*lml=n[R8J^ooB?ؕRbmQVkp%/NbUgM,5ά=J.T+EFW E*밲I[߽j祣Gێ]]aECU KG,T9ӼR #CiSW=[)Nm6lz9AQ}К[ 3\۾H<ۯm9:/6L=͢8WlW{Dpt IVMFO'y.,9f՘rl}41m'ߤ'F9ڲP]0ԣw]J8PdxԿ,K:Nt Π? sUҔhȢ+x|cڙ65TaY^coZb&T3U06*_,o2UW?'UH;' *5xGr 5 G$ZtDpp":&i?Ni^B5~&0 ce /ȳ3}TfJlPf(8i 7MS][HxIuQπtBy$J i:A7g}O.R&J D)@p4>GX{tzaM0Ԛ7<.S )e?sbfCXIFBɄ'?PK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-! ) !drs/slideLayouts/slideLayout1.xmlPK :PK!a[Content_Types].xml|N0EH-@% #{X%S5 Phwig[5gU-ܽTQ-jvsDbEcAJR#: "CrKA} >U^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!x(/p!drs/slideLayouts/slideLayout1.xmlVko0>iI] ZPml&1ī_MvPnMڗ8{νW[%QŝFq}#)^#.4{|5y/[3C{BǸ ,r V)ѭdw:LQq7`auA4_ [4ŎS=m3RHv tSiҔtsƛU9DQF*%1R|YkRHJ+3=wM>"Zl{ CAtH>W-,e0JA8'` i`a! DS ogvR}5sHY K&{n(ٮ\R~C[(ۀX|x%_      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|~ ~SH[Wk9y[N-Gw_UJ!ְ':cuyjbޖV>DeeңIӖ^?{0UP?<%惋|QԦ7۾fJ0Ǝ*%!?$j*GSb~i|/Q>NdI 4\=DPa*94LR' JTH$Ō:rC>nق8Ixid$XDkfZ퇿yͻhKth4+[!Og֌-U_-'4ۜ3'G8~Q wU^vy&󡔏$Eqnj9h\@ҕ]^> 7peJDl)'وk^cB:bR+͉- -]8[(W+MPK!p8ܾ8 _rels/.rels 0Dnz x%ٶ6 (тqLݾQ(NAU ioo'tGHL m^W16 AJMȅ8a22~`Or[;,lij@搛}YMGBh ]pϔ{J Loc!"rPK!rVm\ !drs/slideLayouts/slideLayout1.xmln0 ]h;>hRlV b@ĨN/ӏ;Q&eɟ}yuV9NΧ1IU{xVad J9>0_]!`H[9:-Ğ+$<[+#[4|t:-&G^Wt't=0NoM1;}FЀXu=b9YǔDKjO-;1ʐ".f[L9fωP{t!_r `{x%o$Za1o$ޠ'A4 bf z6bqIj ZlinŖn?z2l7n}FHY\o}H*ӧߧGsxE}թ3M$ eb=#͊*/f$EeZ1i>CyZnuslu,IwkdcѵۿS[Ԇ[e~ApY JjH~?< 5g&F-yKS5Cu Zzʅ7r >D=D ePϾחUgc0h8Je[*ñjg2HlVd l(p4P8ȝS5OeLpf[ o@je B [hY鉕%zF=%g'Ee# JHDbXU51XiZA1X>!l0ՉqcHxB,r20<Lkaod0L.`^% _O3OPK-!a[Content_Types].xmlPK-!p8ܾ8 ._rels/.relsPK-!rVm\ !drs/slideLayouts/slideLayout1.xmlPK $Blank PresentationSI# 850584(  8c  8 Hy+?Rectangle 2"PK!(&[Content_Types].xmlAN0EH%,BM #{X$ccB{{&m TƫvՌ}Z_VH68O}6ōV;dnV]DVBz9v I&]Hd9DУkce\%C7;DpZCE,S+pL]q4+܇#_d5;Tϐ#La\b'%ӚKE:olW:QpfCPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!Ihdrs/shapexml.xmlUn7;;BցmI,9r[q Տ m~ WREEՐ _YZ̕5KLf$ޑ>A[R^97/?jYЌz=6Ya] 8 Q{~U4efH.'@ܸ w^TZ6ͮf"8FƖ /JQb!B+6>͏*6,B[Zw+SR V`9`p'isdh5A(\Qغ06&#u\/?k:٥Шc>8k )>jouXcMTJ!,SlkAƢt23oMt*2Jp^1-?/wzuio0<,?rٷyoPK!dudrs/downrev.xmlDMK1E!m+gJ=J ;T2?I;MJnGWj}{3l@DWr)PoFÃZAoL!אl>PK-!(&[Content_Types].xmlPK-!]  ,_rels/.relsPK-!Ih(drs/shapexml.xmlPK-!dudrs/downrev.xmlPKP   |<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 N   V]8Xxc  8 H(^?Rectangle 3"PK!(&[Content_Types].xmlAN0EH%,BM #{X$ccB{{&m TƫvՌ}Z_VH68O}6ōV;dnV]DVBz9v I&]Hd9DУkce\%C7;DpZCE,S+pL]q4+܇#_d5;Tϐ#La\b'%ӚKE:olW:QpfCPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!-qdrs/shapexml.xmlUn7}/ H%ۈ!XLrG{hoJAU̙ٝ3yk*g3{ՕBǛ˽!*[(J4adrc3tB>յ \-txmTjv_wjUYy Wv>nFj>*2y=>ªQu FY 0.5-X H_0u=2!">-Z>#nmZ %,TUE@' ,>TWe] ?,ALv e9T'ǽ>rɌ2KȲ!ng<eңtCL6!(u1&9Ns]E텩L<l&QU&Xn*6uH\bENHsSXx k)z;&kؼt6qjإv6jm GysEe~`ԭŹ.,jv^٘gi<\RY$5H%WHyEuUOU"9gR۽c\SIbm&--uciOwoʜhmH-XLuW"Ttn+INh.>s ߞO?[af܉sXᐡ&>2 Y srbLx<%B{i`O _ŷPUOR*//#HcB_z3nD:}"y I/&QPK-!(&[Content_Types].xmlPK-!]  ,_rels/.relsPK-!-q(drs/shapexml.xmlPK-!CVdrs/downrev.xmlPK   |<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 P   V]8Xx 8 H ?Rectangle 4    8 HX-,?Rectangle 5"ÐPK!(&[Content_Types].xmlAN0EH%,BM #{X$ccB{{&m TƫvՌ}Z_VH68O}6ōV;dnV]DVBz9v I&]Hd9DУkce\%C7;DpZCE,S+pL]q4+܇#_d5;Tϐ#La\b'%ӚKE:olW:QpfCPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!.ߥa)drs/shapexml.xmlXQO#7~` rp#rvdI=U+R_7BEq&x<|3d߽WMu)O޴9:3yShc3΅2ZB:~=W3l֮W|}k\6poL-5 c+qk[Nj/<TnmU|tX,It`Y|͙N=|8WmB-po["/3 Hi8M[kfc)rGqn+tUS3Qˑ/enr2G$quf?E yaCvLQ0tm$"M|!#ѓs2o;gi$Iw'j'Z[?HlJE>Cbw]AisT*\BJ? ­Vp8z,W%RTYQVAŋRE**RNee ڱͬ@-;Cə^CpMwk++ |:Ք{΢xqGbZ). t"UvlcQx a #۟ IK}6!,†p5@9Z[:GU8!~Gm)Nza[FQjՠY0!Ipu6< ]B[iV +? 5Pyv /#rwsa`(2\) 4UY+N&;"ڤ\Mwj3 giiņF,X(R"Wf*/w`W%M6$cDe/n'Ψ2Т'ILIhkɢ@[",0J }[ R]l|$R;o$]n,"Rv{?nקl$ؽ2L!H,!>ĿẐi*G[buж/Ŵ_7j.M72G#^vv5ִ{3 .N/\nM{itv#u׼[ǻwx|{PK!-&drs/downrev.xmlDMK1E!j1W*@ŀӚZ7O#KOiPK!Avdrs/shapexml.xmlUn7;; YQC<˵Xq-Տ m~ WEU!9fwڈA;.oNl Yɕ ٫6lð4fbj],UqzWAզjV);4cORq={Lo 5zQb3J^nb:,_W0u=F2@rԹn1UPF=Ʒj)ai"DYEɺo-pe&Iml \סe]!;GJW<9oOX`QxzjKNpF48_B*J!.ÂlkAE;]Z2<<k2*b9 t~"??=ӧOOl]쟤iV﹇lmhJ[<|Bs7PK! #drs/downrev.xmlDN0DHHܨ *ԭP *Jpᶍ7ElGIܿլ[oD>hg% l㔶*%  \_RnGNcbCNJd0,H6gc>}Ǖ9K!ܠǑv=5_o#aZ?b|)7XgQV_zUC/gC$/!e, |PK-!(&[Content_Types].xmlPK-!]  ,_rels/.relsPK-!Av(drs/shapexml.xmlPK-! #drs/downrev.xmlPK`P  |<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 N   V]8Xx  8 N(?Rectangle 7"hbPK!(&[Content_Types].xmlAN0EH%,BM #{X$ccB{{&m TƫvՌ}Z_VH68O}6ōV;dnV]DVBz9v I&]Hd9DУkce\%C7;DpZCE,S+pL]q4+܇#_d5;Tϐ#La\b'%ӚKE:olW:QpfCPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!o drs/shapexml.xmlVKn#75ؖ%a'C<2VlCq< 6>WdR Ƴb$Ul^ի*UBZWgR&+M]_9/t&2kz]\pXQըv\½2ˍ-޴++^x8*Uۥ(4?)VKRzXVd 9Ӣ+Í쐷xBؤ" ̊% [HiN&5˹6P5jJ˺DS-#Ulv͖ߙ D "Fܖ/_oVa,I8Sbr'q[!6T(q8uG ds8o0[<2b j:蹣6i_z^Ͳ,Vɗ"Iy}EJ\/wt+QoJ­{֬C$/!e, |PK-!(&[Content_Types].xmlPK-!]  ,_rels/.relsPK-!o (drs/shapexml.xmlPK-!;Qdrs/downrev.xmlPKW`  |<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 f*   V]8Xx6 8 S  ? 3380___PPT10.Yu"KY PK![Content_Types].xmlj0 u$Nwc$ans@8JbVKS(.Y$8MVgLYS]"(U֎_o[gv; f>KH|;\XV!]օ Oȥsh]Hg3߶PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!titheme/theme/theme1.xmlYo5#?XsoMFT6mθG7P{DBBTj%. A/lL J͌{~ ahIy W"i'4ƕI f<%`Ndpcw O R‚ a˫<#)|n4?WO>eg~_~O_~o>W#}ƕ(F1U48z9f؃[' 9{#ocEX OGq4)}4w[q-~oy">1Udbd>쐦q܅h+|8=)q}z5G#GOfBSgkzSbX> wYM m}[{|=)Zq,_=ٌɉ26TsFnK30Kh XtGXe^\$A1`ny<9HK8ԙe/o) ʞQvPX1m'2bfp͚V4RV >5aA0eC fdnpuq}.ʵxBwEWRםϚh a¢8c^°Fjnwbk1@!κpd4g7"xs*a\4vqUF^*'3!U<]RxM(`R!D1)ktJBUuveE敐xl&v0lP oLB #uLYZ.knBUݼίR3Ut;{={Vn9T,ᆀojD ꢻ- {CscppS;4BB;Q dʒS5cYLDUĕ{LkpbuSM44R7U=dkwJNHސ=~p4%]+i~N, kmŪiZ,/N1G5X, ?*Bf?:;P[| l @ګ1=vfewȇSmY_T{Z".(w;']ع[۵M OQXͩY~"Ƀl[ 'PK![Content_Types].xml|j0EжXr(΢]ylF wJjǝ{za&C+W c+7oգT bV亻i6$XS)Ik2z  1{(Q'0?0mb(JUk^p+u# ˥x>V5PT[}Q.b&dۣ\>33ir<|*yR/ah3Q)#q]PSgFLzPK!*8 _rels/.rels 0DnzЃXmlo0of5OIw AN{cݠv=m 838yG 6U} ShLq`L)d=Ҍ\@.;3, ;$e͂): vq}j:zɥ'k茜(f,ƁXA6\m>PK!.*!drs/slideMasters/slideMaster1.xmlj0{ˍq&Sҍ a@QXTd.lMsgQz1B+)>IX::j1W*@ŀӚZ7O#KOiPK!JYƋhdrs/shapexml.xmlUN#9`!@D-JYМtovGyF3Ҍކ!j4"ClǧZr&=)l^D^J5*K?7ClIdB3|Vmº.}q+ Z{{j#\735c]z@u9;t npp8X}VKAB:/Dم`dݔ k_I8B&βqk26@M$&gÀ}-\.еƹ* x}zVui{["m'%Ʒ4NeKuU?*Hev&q2"HMA'xjS KRLBd;"U6nzt~%+zl-HW,wUNc7Q!*O  vd:Z2<5dЙ(+y3 6t^><}/O>?㧍K;af=dkMS$gj盓PK!Adrs/downrev.xmlDKK1!\MIelZj(tQ n; I{ ];|h;q&ZstZD;Ǥa s.|H9jhbs)Cِ0w=q*-}-!m'3ŖC=*NVCUjV}j1W*@ŀӚZ7O#KOiPK!)~drs/shapexml.xmlUn7;;d;ۨ!XzvV\rKrTfb_ msWT&/Rl:+䛓z B#p؆Ai͠ T*pЕ*tQEMSq3$Uɣn@ jD90-dgmN(|X`)Z ֽȤ|h{jUƷj4SW P\fVDdd;Wjj,}k6Ǖ@~%ؖb}B 2nT9tGȌLȲ!ng<eңCL6!(u1&9Q'd칮P\a: D*5/`*dpi,w%.\l'G!کR,B@-͢uqf\cesx$:o.nTqQ+߬Kdnʣ+*Ssn-tf9V{Zoح%Ƥ>H7z|&i=A*-F+䬭Q%Rs&{?N{k,&i~BWfX֍Yb=])s!8j`*3խ_tSхȺw$9Lϧݙ|MJ*C\ ++]ؘ.ڡ]sՒ̕T9JT̩Vl?>zÇOu{#LxxnМPK!غdrs/downrev.xmlDKK0!\$S ks${ ];|d{1c A\9qD{Ǥas\XF$51jbX8uc1m/3nŎC=T}VC]jQ<^e[%w>?v "M*KՌ/h^e wkHzI6PK-!(&[Content_Types].xmlPK-!]  ,_rels/.relsPK-!)~(drs/shapexml.xmlPK-!غdrs/downrev.xmlPK   |<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 P   V]8Xxo  4 N]t?Rectangle 4"PK!(&[Content_Types].xmlAN0EH%,BM #{X$ccB{{&m TƫvՌ}Z_VH68O}6ōV;dnV]DVBz9v I&]Hd9DУkce\%C7;DpZCE,S+pL]q4+܇#_d5;Tϐ#La\b'%ӚKE:olW:QpfCPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!.v“vdrs/shapexml.xmlUn7;;Bցmi,=r-F\rKrj1W*@ŀӚZ7O#KOiPK!' drs/shapexml.xmlVn7;+$Bցi,=.ڊKnI$yZoHR(z7 ͺTl)+NxU3S6o.Μ:h;/x] ]pXaհt\½2ˍ-6++^x8*Uj(4?)VKRzXVd ;=δ(Zp$F-16m%bi"6|9ɑf5"s~RR͙ҩ.P exfv;fw&Q{:}dBFH{VVաL}Q'n,sfwf;.ύ !t qs)+zZ-V=L碒x @FS~?0%RɄňC&kNmj]Èe )`Rq e-t-N7b6@m}Ԗb"FQm&Qw40&NWԳ _*8TNLr/zY}:Ƭ޿eqf>80RH sQbQ6n1hNvxty28.Bot\cPZ VuY"|%\i>,u5hƶ6 q0kSj"t!^~D*Z {kLN2Y1Ud4C龕hЯ5bdcnX&5ȡjBrB: '!ŞϏ_~zÇ_5ڝAs`PIǟ~GD& =Htp/M)NClPK-!(&[Content_Types].xmlPK-!]  ,_rels/.relsPK-!' (drs/shapexml.xmlPK-!@Qdrs/downrev.xmlPKU`  |<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 f*   V]8Xx6 4 S  ? 3380___PPT10.YuNY PK![Content_Types].xmlj0 u$Nwc$ans@8JbVKS(.Y$8MVgLYS]"(U֎_o[gv; f>KH|;\XV!]օ Oȥsh]Hg3߶PK!֧6 _rels/.relsj0 }Q%v/C/}(h"O = C?hv=Ʌ%[xp{۵_Pѣ<1H0ORBdJE4b$q_6LR7`0̞O,En7Lib/SeеPK!kytheme/theme/themeManager.xml M @}w7c(EbˮCAǠҟ7՛K Y, e.|,H,lxɴIsQ}#Ր ֵ+!,^$j=GW)E+& 8PK!titheme/theme/theme1.xmlYo5#?XsoMFT6mθG7P{DBBTj%. A/lL J͌{~ ahIy W"i'4ƕI f<%`Ndpcw O R‚ a˫<#)|n4?WO>eg~_~O_~o>W#}ƕ(F1U48z9f؃[' 9{#ocEX OGq4)}4w[q-~oy">1Udbd>쐦q܅h+|8=)q}z5G#GOfBSgkzSbX> wYM m}[{|=)Zq,_=ٌɉ26TsFnK30Kh XtGXe^\$A1`ny<9HK8ԙe/o) ʞQvPX1m'2bfp͚V4RV >5aA0eC fdnpuq}.ʵxBwEWRםϚh a¢8c^°Fjnwbk1@!κpd4g7"xs*a\4vqUF^*'3!U<]RxM(`R!D1)ktJBUuveE敐xl&v0lP oLB #uLYZ.knBUݼίR3Ut;{={Vn9T,ᆀojD ꢻ- {CscppS;4BB;Q dʒS5cYLDUĕ{LkpbuSM44R7U=dkwJNHސ=~p4%]+i~N, kmŪiZ,/N1G5X, ?*Bf?:;P[| l @ګ1=vfewȇSmY_T{Z".(w;']ع[۵M OQXͩY~"Ƀl[  ZR||<(  <3 < `yOaOa?Rectangle 7`?h___PPT11H(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography 8___PPT10 uAutomatic Parallelization of Numerical Python Applications using the Global Arrays Toolkit Jeff Daily, Robert R Lewis*v[H$ v;V]8Xx~B < VԔ?Line 8 @A@A0. < Xx\s?Title 1"ôPK!(&[Content_Types].xmlAN0EH%,BM #{X$ccB{{&m TƫvՌ}Z_VH68O}6ōV;dnV]DVBz9v I&]Hd9DУkce\%C7;DpZCE,S+pL]q4+܇#_d5;Tϐ#La\b'%ӚKE:olW:QpfCPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!ʹPdrs/shapexml.xmlUn1#($٦mVQ@ UD8"71ږIyH q |nH6xof<=^U,uBvw(*ׅPӔ8TVw v8e7$HЎ6`?n=; @c #Ui]ӇJtY$%zIrxg$y? %9<{IthAo:|s\}~}ӧ/)D n 18ƧMu!_P{ȇ'ԉ iLg~PK!-{drs/downrev.xmlDOK1!רk)0OB$1$ejIxacUͥsHkKߟ Sݟlv])u7<(4gFqsJi0J ?e<PK-!(&[Content_Types].xmlPK-!]  ,_rels/.relsPK-!ʹP(drs/shapexml.xmlPK-!-{drs/downrev.xmlPK P |<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 X Motivation  U p# V]8XxE6 < t?,Content Placeholder 2"[(U(PK!,j [Content_Types].xmlKN0H,BM =I,<&gR *Zx\͐KQs^cCuf博o=?[6cVJ#8"DtӇTcdT] Z3\E2_xpvUU*SPYn\g]-s"jسJQ9ҕ&4'i }o5.aG $ "EM "eq"Px-^\nPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!5tY:drs/shapexml.xml[_O8?龃6P(ՆղwܮĮ-{DN\;rRxd?No+܌ m魋:ϟL&I.Ș2S2WMJUɓ~9:PR&&!=%}nY,nҁ1E(YJ\µT8'BK (n,t~؊?{dIHw(,[SH,%I@5$f&>LƀCˊ9 sf9 O͚\~T 0FFY&Οz{\JS `{[vg]>1$Vg{gf{l["'HZՓ"8QH5])2NL.RȧNCNCږaǙ9 Xr`?NΒ_dbI ˄k*GCKp8gxA!4uC׍jԪPj`U9#QH%#M:Jշ-J\Q>c*b%1 윿h GRRm'6MO59R,ACCfRb) g-ѡ4iJb B OB|vח˿.׫?))2X XF 0]rtVqSS֦9>>/AcKkS5~^M,bQYgNPp3@fcC)@>@`^H_bC ÷Vk )dp3 :XrI}M BPia9hLt@>+ {d*Isܓs`{@kxXQC+'{xdDzo%iZVT99miMD&+k_uRװQ)rV2^~އ5ЬOIfk]>/V\iӻrW. 6>Ote[~:Ӛ귘-wm1Hp n_(-XT@ Aj0E"-!IWIh!,YƂ$iyJ tB5v -t3@>6 M.C~8Ys< J>K? ;ɛ͟vh2<,/b쎝gad\s7L~/ :6*Mf1XއTb䁳do2DMk*_?&)|?&h[&\ |̷~.:d9aϦ8y6MfxbH4dF.MfMFMFim~.\&6aDmLz'ؙkmAomŪnV{ύ&9[x CHwhdޅџ3LfCT";d4N0& x.j2vAy?흿yHnׯq-`h| -$dV2̽a[~fNy[}:v\48XBr 4UխiR>MɌG<|ʛMw]_M}!ex67'S j%5j/dvsb?Lu ^pA"xr;椫&)Z]0\n=h|vv1h(x&39حVv%KZ MF@A٥ &&Lۆd. |[p0/nu-^Gc̭wM~e[E`*+~U^~m|ʶKMf7aG(3̶EM&u2!xSdOa^}0PomWziM&Y3 T2ۥOqo~'i|Cŗ^M٥hIzNCuҜLaVw4M4&|4559$hctpVɌzN=0О3n2Y웇Ngd,ng>Ld-&qs:1hZ&-u,`fKƵNAOo >ϰ颏&Lb aqkRݤZ >lz'՟.5\jɼ0İ]M9ܫi@oӷs\!)5y8]M|~LBO?}[핝F,4Sʯ6bҖL(. gk2Z Ld~Ih106yb`m&&LMF䚌l35)k䚌g`T*=I _ %``Ö/706]ӵL6Tguɼp<`k}[A:0Z6aj_d pi:ϯ/F02]2\bs2:@j];58T0 xwd &cL5/ &ŀ6jb_$tWzv)*$؄,S.e1256\Z3} V94PX [ٕrtؿ@6S1JYP[jZ']idfJJgB&c(* e> Jgo+*>[ `RٰuNFLl2?ٗAzo23XT6i2Bh'd72񨉤]Cf>dĶqg #MB]s2@dZ.i2@M%VF. d! d! d!!@@B.dĶfu2p u6O!P'# ^K.2œ PG9}ɈXi3@Ɛ %dvB&6wuJeC&} Q*4&#dvB&o2O~_l?ĕM&`]Ȕ[Lh3l1/΄Mfa3Tyۍ_`o&M&˘*gA&c[Q>c4dd@92.U\dv &a٩6} ӵ_y+ x ;6{> neôܻu],#6mƆKdb>I_0T=\z6cJK2dCzå.|~~80Zme&̀S{iN&KF5^w iRMƚ0Tfu2El\swjmc5]kNγLoŶ489c{6f.&jm2, ?`kyj^LL>0lo sZMFd6h16mbn2 $d~Ih30|)A̺3&}L*6o~n2_jұ$̟QvA4|ms2]Z'-n>+~˳L'X'S=hC?*w[[]~p>eۅs:z^5!8a>EQXݿeJ2'xٚj/a ~LDˠVk2K c?g44>!CoL:kC(} ~OIq}M>\ތi8ɤwa<Fj54-cU6 /?&3&#l&6oQCRНDh2)`8d鸪GR CɶNE'sE-W1Pi2Bv>n1l~Ͷ]p*C*^Arױia!Ug P2p9Zmen|̱h2lu2Aܦ:PV4!~Y~ UF<˸eh2to/4g&y]Ph2EX2Uج(,^m}+]>U0&'6= !!@ `[OIENDB`PK !&__drs/media/image2.pngPNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB`PK !Ủ>IIdrs/media/image1.pngPNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`PK!x$;drs/downrev.xmlDj0D@obF $W獴W̬6ąB<+X ڛ[/ bB68x&7Y߭2 ]±B62jK܏;0eZi^3 (ÎsőjK?]?ۦ/~?}oz.zMWnu,/jo,AvcL1QPrPK-!,j [Content_Types].xmlPK-!]  <_rels/.relsPK-!5tY:8drs/shapexml.xmlPK-! #y+)drs/_rels/shapexml.xml.relsPK- ! drs/media/image3.pngPK- !&__.drs/media/image2.pngPK- !Ủ>IIdrs/media/image1.pngPK-!x$;:%drs/downrev.xmlPK;&   ___PPT11   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography h___PPT10H@___PPT9xp PLots of NumPy applications NumPy (and Python) are for the most part single-threaded Resources underutilized Computers have multiple cores Academic/business clusters are common Lots of parallel libraries or programming languages Message Passing Interface (MPI), Global Arrays (GA), X10, Co-Array Fortran, OpenMP, Unified Parallel C, Chapel, Titianium, Cilk Can we transparently parallelize NumPy?%0 U9m0 PUm0 PUm0 <sssU&m0 <sssU4%0 Um0 PU(m0 PU9  &4(t "Xx < X?Title 1"PK!(&[Content_Types].xmlAN0EH%,BM #{X$ccB{{&m TƫvՌ}Z_VH68O}6ōV;dnV]DVBz9v I&]Hd9DУkce\%C7;DpZCE,S+pL]q4+܇#_d5;Tϐ#La\b'%ӚKE:olW:QpfCPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!?drs/shapexml.xmlWn7?V+BAm"=]ĈK$%K>:S@ ݵ"({X.7ofo6$kn* %\jΐ*Ԋt}s7ʍLJޛQ{ WX+ǣw+<d$/"ZO+XO, (VЙ6͙ ut % ˮЍZ8 h;.] @c+#MiC$H( cWG'Ɠ~2cx2. X`P$J幏pBC9JuhrRAY\ -IjR߫"x&dmKbC -WlC 肺݈I5lkdіrYã .t Ծj!t~귘AGcZ`bv>r-P"L!N3MQ`ڛ:ˠʿ[28%elY05OV*GZ?<`r&䞬s8cHp_I;DV_pWzb.]SIl0T^ f"I ԅxwv}se ]jYU*iX~ⷆ,摒9e-zϻ>}#|8gȡK^}:/}ֵ2\N 4(4U6y?>j#/e&Os+zoNT+&oO3PK!kdrs/downrev.xmlDMK1E!$mz.ty9]ogS1X.*`T6 >_VrAK bf-/sWF)25ge˼b}L^i: ɽUĽ.9Π7nƓiz7zJX{wU5IV5pJV2Lhm%|PK-!(&[Content_Types].xmlPK-!]  ,_rels/.relsPK-!?(drs/shapexml.xmlPK-!kdrs/downrev.xmlPK~|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 (Design for Global Arrays in NumPy (GAiN)) U)p#, V]8Xxe- < t?,Content Placeholder 2"@:PK!,j [Content_Types].xmlKN0H,BM =I,<&gR *Zx\͐KQs^cCuf博o=?[6cVJ#8"DtӇTcdT] Z3\E2_xpvUU*SPYn\g]-s"jسJQ9ҕ&4'i }o5.aG $ "EM "eq"Px-^\nPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!gibAdrs/shapexml.xml[n6w x;I8F"ɖ@Vu]DŜ)Rhe<ln6yIъ`3 wH;;szr4*gR .F&"&\ ;zy{YZgF#4%+QRV]52Es*4Pfs&1T%&UnWŠK )4z&IDT6n(S9BP.d4 *Ŋ\C4V#Rܴ^"cPL>y$nw1A~cOztQVw`Dv;fi$gT1T>[-d* ]%\|9!I.[ a֜2 Y #4!%O""0a,&a07g.:C88X+jEX\x(/`hwr0$} 'k)j*Uڎn#u>0{;|홉 ;^+-QLKnޞ)+CɅ8U#C(&9EBS8(^C!WG&\ ȨgQ?hBn0k)MEw](TQJ$zY,o[Z)8p&Frj1 )g(sZXD8wĭ8)!rMC ƭFAMB w |d| ?,17`*v> m i, $WȁhDMTG$n{k}%ebc4pi{Oi0()$~@hl)U"=h/?bkM+W:}>~? 30`Fb+ET x7!ח-ָl3N%ENgeA> )\uRS6cBqD1yU0š o> XksU,o>[šOYxe'UCjB;zD:{\Vb <ճGԊr=7K~/%fsӀ,o u+-@MH3ڱ%kf{if=szmU>; _ꯚ9v*S۩lg8Y$UkV̭7l>VbBI? [?7HuV/[_x=*Oŕ}luVq* ѿUKn0 mv""q v(fMINyhnr W萒l'dE c4pސJ 6J39Ԑu-K!KM$-y 6\Ҷ]$B-jÏI BX$;x8(*ZƧP%W>>BeTRR یCmUFGTZӘRXPSY(bWR 9r5`٣C"Ly<#P,8Ƨe:oќIJ )ԪaV4/kl Ң9ǷS)"U>;KU%YS#-erKa"eFrC1s>$]涅Z̯ZhF"2#E;Q6UZ![G8'2,.0Rh1@1ÕέUKaMR'=(b42=n?Wg&8^j }R{LJïݟ'%FxE(Ų7mH0HcY I-#&@?=*~)eXA״ u0{ "dk`RQq}gZQ^\̢R8+XJ_Rf܄H\9$ʈm2=3`xa(H@\X<;MIIdrs/media/image1.pngPNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`PK-!,j [Content_Types].xmlPK-!]  <_rels/.relsPK-!gibA8drs/shapexml.xmlPK-!&!1 drs/_rels/shapexml.xml.relsPK-!-]& drs/downrev.xmlPK- !Ủ>II) drs/media/image1.pngPK!___PPT11`@   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography ___PPT10     B___PPT9$             YAll documented NumPy functions are collective. GAiN programs run in SPMD fashion. Not all arrays should be distributed. GAiN operations should allow mixed NumPy/GAiN inputs. Reuse as much of NumPy as possible (obviously). Distributed nature of arrays should be transparent to user. Use owner-computes rule to attempt data locality optimizations.@/%0 U#%0 U&%0 U6%0 U0%0 U<%0 U@%0 U#    .  -$$((6,,0014488<<    618Xxz #/=0SPq  <C ,Group 207"Rp* {< Xh*.?Title 1"PK!(&[Content_Types].xmlAN0EH%,BM #{X$ccB{{&m TƫvՌ}Z_VH68O}6ōV;dnV]DVBz9v I&]Hd9DУkce\%C7;DpZCE,S+pL]q4+܇#_d5;Tϐ#La\b'%ӚKE:olW:QpfCPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!'!R|[ drs/shapexml.xmlVn9_`vE(ijfw%Bg.{dLJ[7y<@^aB]rU3mGk\`PK!-dVdrs/downrev.xmlDAk@eF ARW5ަc =fr=^(;iuϏ#^=?-4*S-Xb Rʨ~ 1re:@ۆtwZ~ctwm.v)27o 鿼UÒE|T2PK-!(&[Content_Types].xmlPK-!]  ,_rels/.relsPK-!'!R|[ (drs/shapexml.xmlPK-!-dVdrs/downrev.xmlPK#/=0SPL|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 How to Use GAiN Up#  V]8Xx |< t(K$?,Content Placeholder 2#&YIPq___PPT11ld   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography P___PPT100( -Ideally, change one line in your script: #import numpy import ga.gain as numpy Run using the MPI process manager: $ mpiexec -np 4 python script.pyV$0 U) &a # !a V]8Xx)  < tU~?,Content Placeholder 2"PK!,j [Content_Types].xmlKN0H,BM =I,<&gR *Zx\͐KQs^cCuf博o=?[6cVJ#8"DtӇTcdT] Z3\E2_xpvUU*SPYn\g]-s"jسJQ9ҕ&4'i }o5.aG $ "EM "eq"Px-^\nPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!+5drs/shapexml.xmlZn7;~,ٲu`u Awk .%>:S@:C.k hI7fHy.ɌRh%\%:,N}JJTʤV<e1( U9(":4e29+_+xi3 Us, /@lvZf΄ЕRn64D~rVڒd krC:YcSbGz;dRV걇vs^ h:r t?..qlj`|q&:Nkowݡ"nـ-I@z^;^ *+.(Zz('͕NJ CpJ )75TvC#-5s=‚/I[VsR'b އ^^`1<xVm(PBt+3E?xGcV0؉,^HJ =u7-` xp``I*&h#H0y%)Iyv%v g'LHTrĬH $U&c΀S M W0dƠ~rK# ~R0weÚm<}-נ)r+W jR-X<]&fIQ`G1<+C8H$GLs0gnpZcQ`cmަFa@bl  |k  ?"׿ 7QFԎ4NྦྷU0>1UzJL<* $%`GhJ֙+XҖ[Om+&P)=y0Ś2``鉪b7Uy% E\5ʋo??o\u&c Sh[`13%ǥ}WI&o}<yB:_+qs=|xpPK![Rdrs/downrev.xmlDN0DHkQ'U ԭ( ΋Mvdm׳&;+y _f io:(x{|:w`n7W TЦ4RFݒŸ#9fg,&&v,{;ZlI7!uAߙRD)3%/9s52PK !Ủ>IIdrs/media/image1.pngPNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`PK !&__drs/media/image2.pngPNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB`PK-!,j [Content_Types].xmlPK-!]  <_rels/.relsPK-!+58drs/shapexml.xmlPK-!nR drs/_rels/shapexml.xml.relsPK-![R drs/downrev.xmlPK- !Ủ>II drs/media/image1.pngPK- !&__{drs/media/image2.pngPK n {+@:  ___PPT11   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography h___PPT10H@___PPT9xp xDiskless compute nodes e.g. BlueGene/P Walla library by William Scullin of Argonne Use Python s  import hooks or modified interpreter Process 0 reads from disk, broadcasts libraries and modules Compute nodes with local disks e.g. chinook at EMSL Process 0 broadcasts installed Python and required modules to local disks on compute nodes ( bcastf below) Run Python from local compute nodes disks Reduces contention utilizing local disk copies '%0 U,m0 PU4m0 PU<m0 PU4%0 Ulm0 PU+m0 PU/m0 PU',4< 4l+/Pfc8Xx  < Xx?Title 1` {+@ L___PPT11,   hdman`  Arial&Monotype Typography 0___PPT10 ~Scaling the Python Interpreter Up#  V]8XxJNz #Pq0SX߸  <C ,Group 208" p* y< X)?Title 1#Pq0Sq|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 GAiN is a Functioning Prototype  U p#  V]8XxK z< tX?,Content Placeholder 4"=+7+PK!,j [Content_Types].xmlKN0H,BM =I,<&gR *Zx\͐KQs^cCuf博o=?[6cVJ#8"DtӇTcdT] Z3\E2_xpvUU*SPYn\g]-s"jسJQ9ҕ&4'i }o5.aG $ "EM "eq"Px-^\nPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!FWR kdrs/shapexml.xml\n6w t;Fɖ@u]DŚ)Rhe<ln6yIɶ q8&-Y99;?$$hLDrujo"~λӣ)g\yN#̒NuRƝJ%$.",VWbA$QD+jm%!s)6=qOZڻb8N9P(ȀSp*iyU@%he&)yx|/`9ʠ(#mݽ} $L={5ծZoˮӪ5VK wD" .ʃVJTpG"hjI=T<>N*BuQHc@6.`&P[B Df̬a."qH5%eZ$ϕ)/h]90!%], ]EoX)3$ pL)KJK V`1HpVw_|1!NVs- _)ei4Te!Mف*p@ ] q:3Bj@U /> *.# )jl@g`= 6\ϻL݈zJV7BN0!AywbFbğ*Ý@Dەܑ֭E"=,(YK(GkP_lk7HiH8!  s3϶Y ޚBG^Y:XjvE-ロw 1w.zmL ~uO{Ce-emY[Zf*aZfk71qEքv!ryƠ#qtDm\ g]seQ)$34szn,8hԶn`ss^ dêMl_6:`a T:& Lqn}~no{=pŹ;=˳f?$t.,Xό'݇[ӧ؇Rʋ 'u^,{6:[4H&=g0=JJ)hj \7ӳ.gg ZXֶkxqƣ5VQVI|zƥ=KKC62s\*1‹Gu9,Z 2BmZg5yl;Xb1cx[6d@%}>T%_[^b#υȳVj0~9IҚ:tMw=d8Ѣ#my&o+H&( F /lOPRYB;(m$μ WFF·snkX,{+}ʅGQSisU6 'K&j](( 찲cq=Tr4m,W^P vkpd17r[~62c9$2Suf LUZiF-h|ćwxC52dVK.''$·1F&>'>C*=-Jf`Gf\>/4l*1Ο1no Whd.bЩeE^XZW8hIvDGqSD%3Ä]uU ;A9hLL0?%9,c~v`c`C503x!Nl)ָqw6U:.3wFTQfARZPlCwBq5@ڜ5m*z֊Y,7r)ve TmB1z-]<:%>PfNj #L!Oy&-K$a^!\h@>6 M.C~8Ys< J>K? ;ɛ͟vh2<,/b쎝gad\s7L~/ :6*Mf1XއTb䁳do2DMk*_?&)|?&h[&\ |̷~.:d9aϦ8y6MfxbH4dF.MfMFMFim~.\&6aDmLz'ؙkmAomŪnV{ύ&9[x CHwhdޅџ3LfCT";d4N0& x.j2vAy?흿yHnׯq-`h| -$dV2̽a[~fNy[}:v\48XBr 4UխiR>MɌG<|ʛMw]_M}!ex67'S j%5j/dvsb?Lu ^pA"xr;椫&)Z]0\n=h|vv1h(x&39حVv%KZ MF@A٥ &&Lۆd. |[p0/nu-^Gc̭wM~e[E`*+~U^~m|ʶKMf7aG(3̶EM&u2!xSdOa^}0PomWziM&Y3 T2ۥOqo~'i|Cŗ^M٥hIzNCuҜLaVw4M4&|4559$hctpVɌzN=0О3n2Y웇Ngd,ng>Ld-&qs:1hZ&-u,`fKƵNAOo >ϰ颏&Lb aqkRݤZ >lz'՟.5\jɼ0İ]M9ܫi@oӷs\!)5y8]M|~LBO?}[핝F,4Sʯ6bҖL(. gk2Z Ld~Ih106yb`m&&LMF䚌l35)k䚌g`T*=I _ %``Ö/706]ӵL6Tguɼp<`k}[A:0Z6aj_d pi:ϯ/F02]2\bs2:@j];58T0 xwd &cL5/ &ŀ6jb_$tWzv)*$؄,S.e1256\Z3} V94PX [ٕrtؿ@6S1JYP[jZ']idfJJgB&c(* e> Jgo+*>[ `RٰuNFLl2?ٗAzo23XT6i2Bh'd72񨉤]Cf>dĶqg #MB]s2@dZ.i2@M%VF. d! d! d!!@@B.dĶfu2p u6O!P'# ^K.2œ PG9}ɈXi3@Ɛ %dvB&6wuJeC&} Q*4&#dvB&o2O~_l?ĕM&`]Ȕ[Lh3l1/΄Mfa3Tyۍ_`o&M&˘*gA&c[Q>c4dd@92.U\dv &a٩6} ӵ_y+ x ;6{> neôܻu],#6mƆKdb>I_0T=\z6cJK2dCzå.|~~80Zme&̀S{iN&KF5^w iRMƚ0Tfu2El\swjmc5]kNγLoŶ489c{6f.&jm2, ?`kyj^LL>0lo sZMFd6h16mbn2 $d~Ih30|)A̺3&}L*6o~n2_jұ$̟QvA4|ms2]Z'-n>+~˳L'X'S=hC?*w[[]~p>eۅs:z^5!8a>EQXݿeJ2'xٚj/a ~LDˠVk2K c?g44>!CoL:kC(} ~OIq}M>\ތi8ɤwa<Fj54-cU6 /?&3&#l&6oQCRНDh2)`8d鸪GR CɶNE'sE-W1Pi2Bv>n1l~Ͷ]p*C*^Arױia!Ug P2p9Zmen|̱h2lu2Aܦ:PV4!~Y~ UF<˸eh2to/4g&y]Ph2EX2Uج(,^m}+]>U0&'6= !!@ `[OIENDB`PK !&__drs/media/image2.pngPNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxIBQao4#ZP3n#As>\5;" " @k*.Ø~̵cYg jzAUU_~w2qpviLjl~-2{KX^bV Bjg2iI#0VjKi$D`M_hzS&x#0F3-d":OM15эE F"퀢FZD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDDD@dD@dD@dD@d@d@d@d@d@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d@dD@dD@dD@dD@dDDDDD@dD@dD@dD@dD@d@d@d@d"rD@I#rY:C̝!P҈LqY8Gl.LUU28O`fۆut;Ӫ M&Ml%4N`Zd>'6t^38Wo/+) M! c1NV 2fCަd#P D@dD@dMMm IENDB`PK !Ủ>IIdrs/media/image1.pngPNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`PK!ydrs/downrev.xmlDN0DHHܨSUUɁCS{Dv۔g7z3_' Nt i]`v"&t{H",Ws̍?NT &!2,Ɖ1;`1q 4,ϲGiu| n{FOuwlnq?{w͸zhLrQ௪4,y~q(._5DA@.~PK-!,j [Content_Types].xmlPK-!]  <_rels/.relsPK-!FWR k8drs/shapexml.xmlPK-! #y+) drs/_rels/shapexml.xml.relsPK- ! drs/media/image3.pngPK- !&__ drs/media/image2.pngPK- !Ủ>II drs/media/image1.pngPK-!y(drs/downrev.xmlPK)#lo|X߸z___PPT11T   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography ___PPT10     ___PPT9h`                ! ! !  ,Released with Global Arrays 5.1 What s finished: Ufuncs (all, but not reduceat or outer) ndarray (mostly) flatiter numpy dtypes are reused! Various array creation and other functions: zeros, zeros_like, ones, ones_like, empty, empty_like eye, identity, fromfunction, arange, linspace, logspace dot, diag, clip, asarray Everything else doesn t yet exist, including column-major (i.e. Fortran) array ordering %0 U%0 U(m0 PUm0 PU m0 PUm0 PU,m0 PU6m0 <sssU8m0 <sssUm0 <sssUX%0 U  c cc   $c$ (c(,", 00,4468c88j1W*@ŀӚZ7O#KOiPK!5e drs/shapexml.xmlVn7;~,Ų9-B G˕qɕ%) z HZA-=HÙog7$knjLO:pLŘXTƤV|L?ْలrLΕvۦK^0D\]Mn͢]nr!Q!۽Ni`BcRY95JSCD,G}J+t.K۵w&ns7pC,l }̰KT$h 4ٓ?uhr: 7D9AY^o-J{xg#q$ǰEJR zޡF,uq7, ĺI)}&ܗPT! eY\ ERe,8&dTa$|˶ߘ?Nm-yR xӒQɋn>o}%pBBa[X2c9 c~G/Ρz;t`V6S] ?n/$cеp=[?@M4*rMaLezTׯmAUK|?PK! drs/downrev.xmlDN0DHHܨ!uj)bo(n8qFow B1u+(:η >w RFop\)zu{ڄ7t9Vħ؜Zʤ-9L0gv a[i"N,w|,'|H[K?JݟmW0Voz.7 2ܖy3`XR8_3 LQ@~PK-!(&[Content_Types].xmlPK-!]  ,_rels/.relsPK-!5e (drs/shapexml.xmlPK-! drs/downrev.xmlPK@Jv_yd___PPT11D<   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography @___PPT10  The gain.ndarray in a NutshellD Up# gp#p# V]8Xx$ < t"?,Content Placeholder 2"wqPK!,j [Content_Types].xmlKN0H,BM =I,<&gR *Zx\͐KQs^cCuf博o=?[6cVJ#8"DtӇTcdT] Z3\E2_xpvUU*SPYn\g]-s"jسJQ9ҕ&4'i }o5.aG $ "EM "eq"Px-^\nPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!Y̏$drs/shapexml.xmlXn7;~,)uu@5Awk .W|tho+#kn vtXpf87\z%YrS "}ѡDBEqk22蚗_*eAY"skq]&s.ZM,]^re\{ΰ3T嬘7JNSCD _FJaH+d*YZܐmn+C&clEY^j9|3h{| ?n.QVY=Xe&yweG}J֘ F×6+K{`أ$H}9tD3N0';FXX6jL8sJ )HGt4 39$E9KSL0F,IPw.]F&xtNEf`A\(OW?2S`XY?IuJdigv-SQjGBsf&FxȥB &\g,]n6p6Qfd7~KJN#z[LJ`$ЉT"qE2M,Y2b#pȳ{M^A*6o2{__WH"װՑ+$8iV V,f+I\㴷C) (wy7D¿I# wӪD<9XۼKډƠeq`6H\ qxE\$"\>ЁjC$* M5(#_g~Dɂ$LS-U$'庒4@JO֙Xpiדۚ "u< )e`& DUNM=YIZ^DUKښ7W_/ӧ_()M,Ghu;#bL]t{AUR>@_&@gG< <\܈>; ϏV~SUkzܮZm3'uKtv+wib#]~eov m߶ݮT:eι^p/t?g(n]zQ߼e߾WN0~,maDeBLk8'WǶ <&1i7MWر& AU%;6y!sm wN"Gͫz·ȂdNhUN))1)d .j رtX:8ldkYo#KfU! U$CdjPP;_Ɣ7 uМR%Ti쬘CX%`R~iRi)~+=Z硜 }OR*TDHYϾZ}sɧPɄy59p:ypMi޹k98#+~e1÷LJ{cqsqkqwNOOX!$`9O-jo+]-@l͌듋 _ZV'F, A2f :g( a('2ˮV GuaBwz{f%z Be(H\Q`rKJPf,l{A8%KI; xx͡כf~ę*qnkGDZY<oBwBKßG9% iM+W+-5vOPϒ!_Wmt{ߍV{qW[}1L]MIPK!&!drs/_rels/shapexml.xml.relsAj0EA>E(Ų7mH0HcY I-#&@?=*~)eXA״ u0{ "dk`RQq}gZQ^\̢R8+XJ_Rf܄H\9$ʈm2=3`xa(H@\X<;MxR0Qf W_JT`sJ)0@)DclxecQ,,xvƾlnU߅Rwc"ӘˡZN%'[Sc: PK !Ủ>IIdrs/media/image1.pngPNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`PK-!,j [Content_Types].xmlPK-!]  <_rels/.relsPK-!Y̏$8drs/shapexml.xmlPK-!&!i drs/_rels/shapexml.xml.relsPK-! ޝ^ drs/downrev.xmlPK- !Ủ>II` drs/media/image1.pngPK:*d \  ___PPT11     hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography ___PPT10`X  ___PPT9"""##$%%%%% Global shape and P local shapes Memory allocated from Global Arrays library, wrapped in local numpy.ndarray The memory distribution is static Global operations translate to P local numpy operations %0 UL%0 U"%0 U8%0 U > a"    $a$ ( (,^ J V]8Xx ]7N] <C ,Group 195"pxU8Po TZ ڍpcP\{n <C .Group 1467"Y!{?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ypography 0___PPT10 L  V]8Xxf `< V8F/?Cube 1450\?bțe|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf a< V=?Cube 1451Ll_[ 3c|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf b< V(r#?Cube 1452cl_} 3c|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf c< Vu*?Cube 1453\l_ț 3c|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf d< Vx*?Cube 1454P\[w`|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf e< V'?Cube 1455c\ w`|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf f< V(?Cube 1456`\țw`|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxj L\țe T<C .Group 1457"hpcP\{nf U< V ?Cube 1458L?b[e|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf V< V8 ?Cube 1459c?b| e|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf W< V?Cube 1460\?bțe|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf X< V.'?Cube 1461Ll_[ 3c|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf Y< VX?Cube 1462cl_} 3c|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf Z< VH:#?Cube 1463\l_ț 3c|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf [< V&?Cube 1464P\[w`|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf \< V$?Cube 1465c\ w`|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf ]< V'?Cube 1466`\țw`|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8XxTZ `-0Z-e <C .Group 1508"{< V/%?Cube 1497`\țw`|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxj L\țe ,<C .Group 1498"80Z-ef -< Vx!?Cube 1499L?b[e|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf .< V&?Cube 1500c?b| e|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf /< VK!?Cube 1501\?bțe|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf 0< VhK&?Cube 1502Ll_[ 3c|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf 1< VHR?Cube 1503cl_} 3c|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf 2< V#?Cube 1504\l_ț 3c|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf 3< V,&?Cube 1505P\[w`|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf 4< V#?Cube 1506c\ w`|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8Xxf 5< V8%?Cube 1507`\țw`|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 L  V]8XxB < c ABC$DE~FQ>R"UVWuo? woo$og] @    $Freeform 4 W2L}I@|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 Pu  V]8Xx < C .AGroup 1632#"5)PK!l4[Content_Types].xmlAN0EH%,BI Ib-cePK{׫<[G,+)3F)8a#wr՞G&nU3povFgφ6[Rm}knGwWtP~n^襶uفi^y﬜> ȶrjƱ9n"_7z~4"N qٰ/H6Q[77[GݕMY>Ɨk՗ec]2yw᰻i7GYzyl@  h'rj>O0OB?K( 嘨%18>F4x?G0Lmij{률K[ļŗR"[5n\X~L?Ǘzt3*^80*koQ7mw^vKn(s:F ".l~W.dożb* '$,EG/5Zje[\y?4UәDɋI^_h9B}ԏu!gk:W#ֶXVY+ղ.-e~ew4=NrE/Zi34ĩHM4s,|֡۷ӽ5Ir |&pnhg(+qyfѳ.mso?3O3v4pҌf4 0*MhFz e %'fWc{LlhF|hFeA3z-rHn6r h53a>fX4󌚙٠`ƥnifE? F|F\GqPY6^rGNG7b;/PP7/ң_`&aHWL9ЋӱAbVMã4ĈNs?\5xjS+!Ff륞%= *6Hifl҆l$4H3>c6ZHH3z6gAbV t>g Ҧ-Mc@T6HGZvRv@f)lmE" aB]']wXsd BKΘrrFB# 1*;co4H3zi>a3B# 1Ҍ̀&1Z2.Հf3E3&>c 4m  3"V aICj*;;;\$ӋΡBVM/m`c4( ;#>ϡHC463&>c 4# 8a3lf * >3BV >g"gYIC4 ͜D3Z<vc'pLU-`E&hf4g@3|&0ifl0iFe3PgPgV90Z:#1f23iπ:C3'̽v,g 4BK@hrrzB# 1*>;cj4H3zi>3HC4g3hf Fb`giNR9~y|VMf 1 ;g|V agu3Z`gh$vV֎ؙՓGOv ;[+Qzh<_Z.}fzI<_"[;+&aFdja%31/ت?noˇc|n޼>:teT)hfew8L[K{!i︌g4V,@ke2<\3+3Hd |Ɗ8#A03J3z2f،Ag z汢g hSn0ФDa.qi+$`IlwסʩhlOfgvmiy^fó&sUp{ -kCvU9=̀NGɊbIB g_ po7PMlʄ ctUƒuYkKeptl۲I\/g|UJNH(|sV#l·&ݦ ^cRPCK}rwR eT^v.q'x "L`S`А{ f&wʳqzcc(3~&y>ޞLRӰxqxQ5--Δ3 DʤKж8{Dn q|7? PK!c{drs/downrev.xmltN0 x(Hminʲi7<@ָ?Ц! x{uw?سũm;-(;URзQJR+tGۛTw/p2)hsyt΀FVtS[2e `ZYkPI W+yijn>7F9!NJ<~Rh-94( p]_o:qŔ,tL) $ӀGa0_$cYAp}PK-!l4[Content_Types].xmlPK-!V 2_rels/.relsPK-!rs 05drs/groupshapexml.xmlPK-!c{ drs/downrev.xmlPKCyB=]  < H]?TextBox 200]7FIL___PPT11,   hdman`  Arial&Monotype Typography 0___PPT10 g[0:3,0:3] (3,3)  V]8Xx !< H?TextBox 201v2]7)L___PPT11,   hdman`  Arial&Monotype Typography 0___PPT10 g[0:3,3:6] (3,3)  V]8Xx "< HO"?TextBox 202E']79L___PPT11,   hdman`  Arial&Monotype Typography 0___PPT10 g[0:3,6:9] (3,3)  V]8Xx #< H(n#?TextBox 2036]7)eKL___PPT11,   hdman`  Arial&Monotype Typography 0___PPT10 h[0:3,9:12] (3,3)  V]8Xx $< H("?TextBox 2049/GI:L___PPT11,   hdman`  Arial&Monotype Typography 0___PPT10 g[3:6,0:3] (3,3)  V]8Xx %< Hh&?TextBox 205w29/):L___PPT11,   hdman`  Arial&Monotype Typography 0___PPT10 g[3:6,3:6] (3,3)  V]8Xx &< H?TextBox 206H'9/9:L___PPT11,   hdman`  Arial&Monotype Typography 0___PPT10 g[3:6,6:9] (3,3)  V]8Xx '< H8#?TextBox 20769/)eK:L___PPT11,   hdman`  Arial&Monotype Typography 0___PPT10 h[3:6,9:12] (3,3)  V]8Xx (< H($"?TextBox 208m9;zKNuVL___PPT11,   hdman`  Arial&Monotype Typography 0___PPT10 i[0:6,0:12] (6,12)  V]8Xx < XRz?Title 1p*0!|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 }Scaling of Python Interpreter Up#  V]8Xx < c 8A ?Chart 374" %*x1 y! < t6?,Content Placeholder 2"icPK!,j [Content_Types].xmlKN0H,BM =I,<&gR *Zx\͐KQs^cCuf博o=?[6cVJ#8"DtӇTcdT] Z3\E2_xpvUU*SPYn\g]-s"jسJQ9ҕ&4'i }o5.aG $ "EM "eq"Px-^\nPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK![a drs/shapexml.xmlWn7;~lu`u Awk +>:S@ ܕ7@ݨe:hp837W$sn*]Jt.YB?m (IxB/U5feGUBUNfS^2BW\aЦdSs֩ \9pP);nedB=RI56~ 9l)QġZ9%c2>2i[[6Ae:<r'N5Nre?`0{OtQ5/.nwL` #$v`e^d8!^F/Z~zmWP3|ecQ8!8)պj9 G˂R8%")g*" LjT!'<>|O$B,/8"*Pځii3h2>pZ٩,"=eAm[ZXȡ#_Cl.EoP>LЀj?@$uBzOFJOˆ7H 14F+囒M4@JE8p)r8M^HGK{ Rnц)^`60jf| T[E/׿nǛ_)˦Glhٔ} *P}pDiSq~Ij̆濮}#Ѳ\ڋ&+G;t^>d t 6ΟBf4q0mn`DX<p49HlR39"K?U ֥6& ^:(tJb+$ eJ@4(7RDcT.q0T3Kp8^:O0 ĕo.s&-L(g7 >kɩY%xQ;K2b%F KD.6kݳԡ+f> a:N}CBq\@mV@C'vPLpj|`Y5Xc$ΪS8m'LTen2aK쓢U )3NIBcVf,O: fauzAUUR}5@D|cd1 FYY%X* ZgyiF<%CiODoY}@a9JREܸk??:B๟ -Cn݆Q(um@lfk BwKbFz}Κ;<%%phxNbj_aօ<4+] 7.j5OJ(:ȖD0;ˣ;LCO>-]&-. &˖~ح* PK!&!drs/_rels/shapexml.xml.relsAj0EA>E(Ų7mH0HcY I-#&@?=*~)eXA״ u0{ "dk`RQq}gZQ^\̢R8+XJ_Rf܄H\9$ʈm2=3`xa(H@\X<;MIIdrs/media/image1.pngPNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`PK-!,j [Content_Types].xmlPK-!]  <_rels/.relsPK-![a 8drs/shapexml.xmlPK-!&!Z drs/_rels/shapexml.xml.relsPK-!,O drs/downrev.xmlPK- !Ủ>IIR drs/media/image1.pngPK p*%: 2  ___PPT110   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography h___PPT10H@___PPT9&& & ' ' ( ( )  "laplace.py: Laplace equation using an iterative finite difference scheme. Wall clock and iterative solver times are compared. Discrepancy caused by many Python instances reading and writing same files on shared file system during module loading. J%0 U4%0 Ux%0 U%0 UB%  o B 8%o V]8Xx~ < VA??Picture 199(`BpP+  < `(d?Rectangle 9P BON"ld___PPT118   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography `___PPT10@8 About Pacific Northwest National Laboratory The Pacific Northwest National Laboratory, located in southeastern Washington State, is a U.S. Department of Energy Office of Science laboratory that solves complex problems in energy, national security and the environment, and advances scientific frontiers in the chemical, biological, materials, environmental and computational sciences. The Laboratory employs 4,000 staff members, has a $760 million annual budget, and has been managed by Ohio-based Battelle since 1965. For more information about the science you see here, please contact: Jeff Daily Pacific Northwest National Laboratory P.O. Box 999, MS-K7-90 Richland, WA 99352 (509) 372-6548 jeff.daily@pnl.gov-xHn}x,tqrv qrv=  qrv ttrqrv ;V]8Xx'  < `p?Rectangle 9"BO0'H@___PPT110x   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography X___PPT1080 GESoftware Website http://www.emsl.pnl.gov/docs/global/ Collaboratorsz&xntqrv%qrv  qrv tqrv$6;V]8Xx < C ,AChart 201#"ÖPK!7^[Content_Types].xmlRn0W?XV؁CUUI84V˞,"^1 8Y[lw3pڛ5Y^8äQwP _M)JP*V%F7ȲgK,+նOlsv B;cU'bP(a+uaq t[r:wH\fq3^o-% LT;b"%nE"7 g㕼Ǭ rZ lg9PK!#j _rels/.relsj0 }qN/k؊c[F2e~"Kl`0;1 (6{PF783.#c(Y ̵W͘tT0Dlm#]ڀzgͿ0n @]nStLBS%M=lݑm7rf9`5Y4Բ~G>~WoPK!_9drs/downrev.xmltN@M|fL6-Ań5k;.P)j01^|s̙+爝)-spP'MZ\~4 1VTUF h`]_U6'clsL 6d$ʌ5jervDu<}VRӆBP`j "_z/ 6p_=K<_ށco:q0"0) eCYGy>甘<.3?3݀.oR!pyd PK!}!N/drs/e2oDoc.xmlRn0W?XT$QD¡C+!b;Z Mz@,WG۱`+|&9Nڸ]ɿ>7O9g!N_U˾xMjF.}BZm!|5-Djq'zAl')Sa8^;!Q#3q"3up戯/-`ds18:HؠP-koJ:;q"I$N%ϳy }w(bȳL41SĐfrAtwewv^Al֨aGVU$Ji[hFW{Ka; u7.a1d 1Cjb2 $PK!F"drs/_rels/e2oDoc.xml.rels 0nz&ЫXIFooЋqvov1ONGgYqh{كYRC׫La,Ų!F@3r|˒UZpL ˬ(1,.Eà="v[ Rl6RD&Vk˳d9D񌥛 (&JQȞbϿ(LR|=ȯt@d;OA `?t@,A: U Ȗ-A:hbFXۉ,=fe,=;5u^5rtO39AAB9d{Cu8*)ܞ`=% ?H>")ȧ$2d2:&1$ /Pm 2Wuy94vR`V݅ȯA~jA07&Zl<bF#{$F]GtuK0ZLA1ea0AQjW27dW]kgPVl=mhJ23-/^僊Maz+\|y.޶2:Min1؊'SFpZUE<|WfjޒKdi:AA9r/1,r.S,L]e6C+ܨ]ccj a^OHHD.G1~ϳb P߹HObkFSdm#k=TY{Cx1/NS TLZE,r̓7誵IglQUTWx6M7>}sṕ9E qc'O]PK-!7^[Content_Types].xmlPK-!#j O_rels/.relsPK-!_9Odrs/downrev.xmlPK-!}!N/drs/e2oDoc.xmlPK-!F" drs/_rels/e2oDoc.xml.relsPK-!T drs/charts/_rels/chart1.xml.relsPK-!^ktdrs/charts/chart1.xmlPK @&q < `?Rectangle 9@,BOQ0L___PPT11,   hdman`  Arial&Monotype Typography 0___PPT10 E(A portion of) The research was performed using EMSL, a national scientific user facility sponsored by the Department of Energy's Office of Biological and Environmental Research and located at Pacific Northwest National Laboratory.xprv ;V]8Xx < tX?,Content Placeholder 2"ÕPK!,j [Content_Types].xmlKN0H,BM =I,<&gR *Zx\͐KQs^cCuf博o=?[6cVJ#8"DtӇTcdT] Z3\E2_xpvUU*SPYn\g]-s"jسJQ9ҕ&4'i }o5.aG $ "EM "eq"Px-^\nPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!lQB%Rdrs/shapexml.xmlXn7;lYn(91r-V\rAreGyh\6~BgȥdF`DZ;$g /$ n*gJt.EB?XTΤV<+n鋓x^lE`*3Qm/}+]MtE2r嘃Ju:vɄ'ZLVn11D u(V¦r0L$L˜ңE(Ų7mH0HcY I-#&@?=*~)eXA״ u0{ "dk`RQq}gZQ^\̢R8+XJ_Rf܄H\9$ʈm2=3`xa(H@\X<;Mj c1v%DAB~?PK !Ủ>IIdrs/media/image1.pngPNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`PK-!,j [Content_Types].xmlPK-!]  <_rels/.relsPK-!lQB%R8drs/shapexml.xmlPK-!&!drs/_rels/shapexml.xml.relsPK-!UnAdrs/downrev.xmlPK- !Ủ>IIdrs/media/image1.pngPK-{+@P1P___PPT110(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography 8___PPT10B___PPT9$*+ FPerformance comparison between import hooks, modifying the Python interpreter, and bcastf to local disks DOE SBIR proposal to further develop GAiN is under review>i%0 U:%0 Ui:,S5V]8Xx4 < X.)?Title 1"ùPK!(&[Content_Types].xmlAN0EH%,BM #{X$ccB{{&m TƫvՌ}Z_VH68O}6ōV;dnV]DVBz9v I&]Hd9DУkce\%C7;DpZCE,S+pL]q4+܇#_d5;Tϐ#La\b'%ӚKE:olW:QpfCPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!3Vdrs/shapexml.xmlUN1W;XV!!bAJ[)E zmNH8TJ6y^3 ?8fѼdƭZ%QUsF 5:8TΤV< W uMBޛn1/҆++-5+<\Tf;%B(5E+;-yBQLb%\:^rҢ9@ t6q5 @eאoXfM:hlu@0/l. i{qM(mǻH'tx/e߉wɺ=u"(g>f=瑖xgBMI9Jir %kd!r)cCcfiڝ*Tsjg|~0Qh o/PK!LŦdrs/downrev.xmlDAO1&xBĬB}lݾnƃ'3ff}/SXt@`[n4>F 5JdyL0\dlx)p˙Rc˥@[G;|맦;o11÷n<40ǯ\0S 3Ɣ)j(RrPK-!(&[Content_Types].xmlPK-!]  ,_rels/.relsPK-!3V(drs/shapexml.xmlPK-!LŦdrs/downrev.xmlPKz,{+@.|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 Y Future Work  U p# V]8Xxv < tU?,Content Placeholder 2"ÆPK!,j [Content_Types].xmlKN0H,BM =I,<&gR *Zx\͐KQs^cCuf博o=?[6cVJ#8"DtӇTcdT] Z3\E2_xpvUU*SPYn\g]-s"jسJQ9ҕ&4'i }o5.aG $ "EM "eq"Px-^\nPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!/drs/shapexml.xmlWn7;~lٲuu@ Awk +K>:S@ܕl7#: ,pf7WR%7Vh%\e:"N;#Jc*gR+5?ƶ"جJܹjlKf_+ڔaj.+*ewtK&=)USrj:JF+d*YZܐ6~+qB0Dg ۸Ǟ^n%b~Z|/[zz( SzDa(Ycr0@n>lWdPG!Ry,{gje#PB \-'ţ#qJ )wBR]͐˄!'Y\ bD{:,EA1!\J£ϗ]ѦQ F|sNلF Fh<[LՀPl*5Ln7":Ԓ7BKf&  ?!2B堂vZ &/\g,]l\DRK^-) FR2̙LkH'R̻ͪgl9d0;6bp‹Ǫ{m]A& XkVDa'WItj\ZZϮV>Eɉ7bl07OF:K>R>qZٹ,2=e]xX҇H#8>.EoP:g@u McgP Яҳ QE<3hUYx|W⊿ S_#C]Ѻr.}4a=}!jS@MH=Q @7ȡ*[W@KOH{ w7|&w7^ӧ(槬!t#bΌh*O0}D19?>~zC7]Tejh~5 X}@})Bisn'so~[~C/,卸F!跢9V}t>chPK!&!drs/_rels/shapexml.xml.relsAj0EA>E(Ų7mH0HcY I-#&@?=*~)eXA״ u0{ "dk`RQq}gZQ^\̢R8+XJ_Rf܄H\9$ʈm2=3`xa(H@\X<;MUIIdrs/media/image1.pngPNG  IHDRQgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxAN"y*8ՍGp0'8ADž 9B@Fro|5Fh*(yLD mN@7 2 2v'=]G{8su|=q]~ %qw\k0" &qFd`{Nn~"sNZ, Ss)얏ӖLu"U` :b;>l$2d>\̠=6 ~db%G͟aM b}\2l@ϖ閾w,m%#6`"2b؀%?d,Ub؀%#6`Ɉ؀%#6`d,KFd,KFlKFd,KKFld,KFd,KKAldDFlAld,KAldDFlAld,Ald,Ald,KƒAld,Al,KAldDAld@l,Ald,KFd,Kƒd,KFd,Fl,KFd,KƒKƒd,KƒKƒdDƒd@l,d@l,d@l,KFd@l,KسX2 6 X2 6 X2 6 X2 6 X2 6 X2 6dX2@jl, 56 KH%ƒRccdX2@jl, 56O0{ɔˊIC:VfbsrS5Up yxQ<u"FdxNkgtrS?s2@MB#2:n#4"dT Y32#2@ ӑ[%2"DdLc2+2@ڊ"%y`bD0jn/I.ĥ1 R"2¸&Mʕ 0\Z3ez={aY'(ηjT1Yt,`^bЈ 0.mDd@\dX2@j\, 5. KH%ŒRbqd@\Rbɀl%b݋%bݍ%bݍ%bݍ%bݍ%bɀt%bɀX2"bɀX2 .ȀX2 . %cɀX2 . %cɀX2 . .X2 . %#2 %bɈ %bɀX2 %bɈ %`ɀX2"` .X2 . .X2 %c .X2 .%` .X2"` .X2 .X2 %#2 %`X2 %#2 %#2 %#2 %cɈ X2Ȉ %#.`Ɉ X2"#.`Ɉ X2Ȉ X2%#2%#.`X2%ӗȈ X2%Ȉ X2%%#.`Ɉ X2:Xq2M` w|vڲ*2cq^2ME懸%$N/.%fq^2%srU`.˿}A q ȒY12r#<<^_ .lu{hbTon ,6̛깙Q9scq~ X2e";p" " ?+"7IENDB`PK-!,j [Content_Types].xmlPK-!]  <_rels/.relsPK-!/8drs/shapexml.xmlPK-!&!~drs/_rels/shapexml.xml.relsPK-!/sdrs/downrev.xmlPK- !Ủ>IIudrs/media/image1.pngPK'{+@F+P___PPT110(   hdman`  Arial&Monotype Typography    hdman`  Arial&Monotype Typography 8___PPT10B___PPT9$,- LThe above test only loads standard Python modules and all numpy modules Contention for the global python case would only get worse as additional modules are loaded; not so for local disk>H%0 Us%0 UHs:|V]8Xx0 < X(?Title 1"øPK!(&[Content_Types].xmlAN0EH%,BM #{X$ccB{{&m TƫvՌ}Z_VH68O}6ōV;dnV]DVBz9v I&]Hd9DУkce\%C7;DpZCE,S+pL]q4+܇#_d5;Tϐ#La\b'%ӚKE:olW:QpfCPK!]  _rels/.relsj1 @h_B֐BWaLΖ5yB/dˠA 0xM e`J FG2p%}iRdITD10Z)4(I9`mtB{ƁmtπnTg 險,ܗr>j1W*@ŀӚZ7O#KOiPK!CrUdrs/shapexml.xmlUn7?V-)BAm"=]ĈK$%K>:S@HFM[Ajv9yf}#Ɏ['YF WZ7y*&9=pG_^~ 3urSӵfrijmjW}c3DloPna6Xnnr: (QAҥ20`rZ@KUݢϰ A?b(I]^+@c[#}mSӇJt]Px4Ggr1, ){Re2>py>/CMi?p}2.Zn|Jե锾RJBQSÐ[rJbFxn kΪU]<2R8aU/!WO?)Stw팢5V.0kfx^Փ! A *:mW 7ѐ; dr}T^bq[9+ @jx`S";=ƕ5S+|JO"”3dvrNHn~<}UkOkij]}2Qŧo;EZ?6o@aÀizͶ~'(8\. ,EHVrT!E{+66Ѣd-ȇɠ)'4^;c| tKS]պv%NeqXRuz5wZ*H$ͮ j Z}̍5tcd;S-cc?^ؾkoᷧ>x;%Fr}!QCo=kfI U/{ަKk `rQ|<ә˿PK!Sdrs/downrev.xmlDN0DHHܨB(ԭהbo($8q473z1RLm E +%nnoX0#7"C|Pe*)0-@>{r&ᮗˢx[,j՛ gL3h|3Q`Y WlM)*\rPK-!(&[Content_Types].xmlPK-!]  ,_rels/.relsPK-!CrU(drs/shapexml.xmlPK-!Sdrs/downrev.xmlPKp&{+@(|<___PPT11   hdman`  Arial&Monotype Typography 0___PPT10 VAnalysis  U p# V]8Xx$ < #  ? 3380___PPT10.YuHv"P# @(  @ @  r0e0e8?Rectangle 2    @  ~(^0e0e8?Rectangle 3 @   vNote: File must be printed at 200% scale to achieve final output size of 72 wide x 48 tall. Contact Digital Duplicating (375-2969, http://digitalduplicating.pnl.gov) to order poster printing services. Remember to have your poster cleared for public display/distribution through the ERICA Information Release system (http://erica.pnl.gov). Sidebar  About PNNL content is optional, and can be removed if space is needed for technical content.   V]8Xx$ @ #  ? 3380___PPT10.YuLiVx< xTՕ%&# LJ0l 8H40L&0a&iŴE `ti ֶU1*iS:JğE=2o$ [rs߻{{}wsfɯ/}h\#Ĩq2$ShTAG/ *} 0Ey  0 `,s0   %K p&\:  vU:9Qda<xjޥ7mycW/t|$kH#YDVգn9xFZo|Z??Y14ϔ{$߆!nzr Z'4zFyQy;CK\ 0 `:@@!`@U31͆MNh/{E;.Rt:4jdO?}H/.եp xxQ[r_D{|k :o&Or/a~.xM3 gk&onO})(1M7f|rueQRJ2ht\)6ȑVkD6::E#T"M%YYl4I#(U>5/Fd}ps؇RNOG;!!<.Nc@N搽E&Ip(hniykeIq܌1~H?|-mk:}=Fn_g$HT'Z}Dq$.p+˧( \X'rpzkdŘˁ2rM\i2,X ޯ@TҲ\\>EnXA͔:oTW(%$1ַhTMD̄˪jTP9fفor7",P|5XgB/OWgm/#JNTyi3Iozю^RT%E~"tR[AՒZ+" bE-JoܪFBw$V4 9m]lUяN68'#2 1@'ImWG)q|~=̒kTF 6j9GQR=mI:tD4g=7|kَۯ.߱xǝpg;HMJ]?Ag0yxգs=2>w}X{G^9y3kL_F(_ɝ@8G A#Ñ4Y@7nb;@V6Џdthl߇e2ݨýL#fׇ4l(;ߵ-M-G6#,W#~]V 3az)+JaӃ媷o4= y{:kS6u{q8,c;KM_2b@G|iDSo2r_f?7=N+Dˤ#nx:WcXp0[~8]2U]ƽ? ->b|Q2OkM6覸 b!̘KX-½:&vWJc>|PpL ▘m9MqKE+v9ֈQg HOGC)2LJ9IHKD K0U`mQRo QY#,$;oF/@?)[XJf7 |KgMR;Pn^\6wLwԸ8d]jkjj,)(֝ ֬_*V*7xifdxkК/Wv@bwȍ n7R9u0ȧP)|B>ܧHh}>>1{}Ă>7:WAo *tT# JNqQr~DÆfI1NǸųR[cHjZ%7M;„u!wsuօϪ/rﹸ`\ 0 ~(;ID% $E1re͋~r:&@N_Qv9]*{;<ҺE Je6a (Y%s4rV%@]=7AWe/Mrw1u5s`Ay5 'wXn鳺]ϰ .Ŀ;,Cy<.W/Ǒ&s8:$:Vѱ&S!ӺnvIY(N1u D(%^tA3Uv֮LghR/!uIX fyA,",1B .=^IJxWw]^]. zj'V}w`y3#;,xt0 6POt8bWxWU>oBP2 .5PߋJzlnP}?sd!MC>MZ$/ǘi'(ihJ2ޑe;G2]$B=l x(ˎ[4W/yTG L yeHQb:RI j8} '6N?8q(.NsbE )!Jd"'ɓ~fo'>=%fmR۳YLA(Qa??21(|@oÚ0!(<(З%d&^?gHW +H+c_Et Uqe3*[Ar!!\xq'k;[߷~ϝzYf&(J SuzC7n s8:d ~K!~zz,:T`l߷M_(SӵZ;CWEfW qTpIZ4HPNBM}i=݄ %kt"zp.P`b_xӺ}Pic`(Y%cNQd 2`t*y2`o.1cP1N|4$O4u"c8 &Yų]p*BkݺAmsMZm>jVy˴n]%hEK2~Y8r%ʅ#ߠ ~W]>DNgKדÑPB+ õp)c9 Q <>7kg8(|Kj>WKvQ v7Yq8%l9ҁRَaj s}6[_%s`WKjim7[Km-\܊\Y;(`%wsm}>g;$uzIf v3̓{q>BIv1]DIBG^[_jw ,7W9gQd#ՠ^Og Wx=PCǑ8lw7w7wcI[}9vln>h/MG\l([dw]DS06*)p;uN#CrUn>Z,[qק-Q]slI2p$b?^6wK;`Y<٥KʭvlYx9ڍ#d~O S G?J~%8\)"0iu&&IYHTע.D^B-4o{P!N8p !P_V_ޭ}?Bd(0%)egʭ-Q<cn\P:K)uwETÉ:JsU#Ufb|sÑ`,Bn CHHzji)==mds Oh+'0\{ `h   'PowerPoint PresentationStaff Member Jeff Daily37 Microsoft Macintosh PowerPoint@eF@G^@PMiG>zPICTz6x HHx xxHH  xxβγεG Oĸ}zzx Ĺ~{{~ Ĺr)('4[ſvssq ſwttw ſ{xxzj#$#,cſwttr ſxuux ſ|yy{k#4B-#,wſwttr ſxuux ſ|yy{k# &#"##"#@dS&#,tſwttr ſxuux ¥þ ſ|yy{k#8V;F].#,mſwttr ſxuux̪ ſ|yy{k#6_"#,mſwttr ſxuux¡ ſ|yy{k#mL"#,ſwttr ſxuux ſ|yy{k#&+""$+&#$%#"#%(C"#,ſwttr ſxuuxͻʽ ſ|yy{k##"msn]7syjqxc"#,ſwttr ſxuux ſ|yy{k##"KH|e[ib.^}xViXqzsS#,ſwttr ſxuux ſ|yy{k#"#"3KNLKGK).CVHSIIKZA#,ſwttr ſxuux ſ|yy{k#&0*,.//,-,30-,)/,'#,ſwttr ſxuuxſ|yy{k#$#$#$##,ſwtsrstrſxutstux"ſ|yxwxy{k#AB@P4FK?FCC=y}|=F@3HK,##,ſwtsrqqppoonmnoopqrstuvwyz{|}~~}|{zyxwutsrqpponmn ooppqqrrsstr ſxutssrqqpponnopqqrstuvwxz{|}~~}|{zyxvutsrqqponno ppqqrrssttux%ſ|yxwwvuuttstuuvwxyz{|}~}{zyxwvvutts ttuuvvwwxxy{k#$&))%(+')'&&,-++%&)%$%$##,ſwt4ssrqpponnmnnoqsux|-þ}yvsqonl ſxu4ttsrrqpoonooprtvy}2ÿ~zwtrpoor ſ|yxxwvvuts(tvxz}/~{xvusud"#, ſwt"srqponnmnoqtx~ ſxu"tsrqpoonopruy~!ƿ ſ|yxwwvttstvy}ɺ{l^PC7-'$#"#,Ɓſrnmnoquz ſsoprv{'ɿſxstvzʻwdRB3)$#"##,ş#Š#øţʸ|fQ>.2@ "   ܺժ޺Ʋ*  ܫʹ ~"Ŀɽ!̵ҪثӮĿɽ!̵ҪثӮĿɽ!̵ҪثӮ޻ɱ̸q    汽Ļ ۢǿι̥ǿūɼù 汽Ļ ۢǿι̥ǿūɼù汽Ļ ۢǿι̥ǿūɼù^ȸȽڰȸȽڰȸȽڰ߁ 𻸬ڼ٭' 𻸬ڼ٭' 𻸬ڼ٭'(ꞹȭͩݲȴڳ̻ޮҬ'ҽֵκζׯ(ꞹȭͩݲȴڳ̻ޮҬ'ҽֵκζׯ(ꞹȭͩݲȴڳ̻ޮҬ'ҽֵκζׯp&&&Xγ޷ʷ'ɺ±Ⱦڱѳ嶯ҭϱγ޷ʷ'ɺ±Ⱦڱѳ嶯ҭϱγ޷ʷ'ɺ±Ⱦڱѳ嶯ҭϱɹǹɼ̿ɿɹǹɼ̿ɿɹǹɼ̿ɿ\(()ɱöԳ̻˲*̻òҫ޽ֲࣱõ԰ֺɱöԳ̻˲*̻òҫ޽ֲࣱõ԰ֺɱöԳ̻˲*̻òҫ޽ֲࣱõ԰ֺUց(ǰưź¾ҰƬ'Ӿûרɛ٫)ǰưź¾ҰƬ'Ӿûרɛ٫)ǰưź¾ҰƬ'Ӿûרɛ٫(#I)#5)$4)Ά$PݺƼ±Իۺ;)Ά$PݺƼ±Իۺ;)Ά$OݺƼ±Իۺ;)ӻýܼ$&)ӻýܼ$&)ӻýܼ$%%ʽæЮԹ"ЮӳزɼѾʷĽܹ൶%ʽæЮԹ"ЮӳزɼѾʷĽܹ൶%ʽæЮԹ"ЮӳزɼѾʷĽܹ൶^ ݽ! ݽ! ݽ! +ĻۻܸҽдŻѿ"ؾ۽ +ĻۻܸҽдŻѿ"ؾ۽ ,ĻۻܸҽдŻѿ"ؾ۽΁*"*"+"(տ˾Ͼحdz߱տ˾Ͼحdz߱տ˾Ͼحdz߱ ĹڷĹڷĹڷˁ䍄іyu೗䍄іyuൗ䍄іyu% ƹ Ÿؾ՗Φ + ۽ ۽ ۴۽+,ɻǽҸþ޾ӸԲú,ɫͧwи͛٨ ,,´ ´ ´ մ ˾մ ˿մ ˿=&оϤ 绐'оϤ 罒'оϤ 迕R& 滑' 罒' 迖カ᡹カ᡹カ᡹Fˬ ˬ̯u羔uuණݧ̢ϭü۱z潖ණݧ̢ϭü۱z濗ණݧ̢ϭü۱z^޷խ޷խ޷խa*dz⪺dzո᰹о~ָ+dz⪺dzո᰹о~׸+dz⪺dzո᰹о~ػԾH괠$&į#(аνӼȰ湿ٲʽѱʿƺܾǟPаνӼȰ湿ٲʽѱʿƺܾȠPаνӼȰ湿ٲʽѱʿƺܾɣ'(쳾 )쳾 )쳾:-ֿ׼ҧ .ֿ׼ҩ .ֿ׼Ԭ ޾.۳ /ܳ ǽ/ݶ Ưku'ѽ ٧,(Իͷϼ̽˹ºѽ9ڹǽĹ(읮ѽ ں,Ʋq\C/Jh'ƫհθʪշ̷ְʣ@¼ĹyohaFc(ƫհθʪշ̷ְʣ¼!zsmgKc(ƫհθʪշ̷ְʣ@¼qj_QE4%/@Q^mz~xupZg%ʿ~odZPD8-)26=?66%ɷ|xqf^SI?>HOX\;4%߸q]H6ucp|ztjb^`q|\ 'ūwfO72-69?=<90* 3EXg{M4'¢|{zsxjlljbTG:8RX]_``[VLO_m{U2'jg_f`qoGPY`bcb{wҙA'ڤ¤țȷ٪٫í­דwhbvu/*&"(3D97p}'ڤ¤țȷ٪٫í­׌xecad_UTSQT\k75(ڤ¤țȷ٪٫í­זnsK^fm{tѰ=Ҿo0LUѰ=诙r.KUѰ=ꛉx~W<˺ͺ軾ʼٻտⶻ<˺ͺ軾ʼٻտⶻ<˺ͺ軾ʼٻտⶻc",ͺӹٵ忶ﱽ̹#ϳ̾¸,ͺӹٵ忶ﱽ̹#ޮĬ˼౛,ͺӹٵ忶ﱽ̹O"#淳˺դשμøм##淳˺դשμøм#$淳˺դשμøмҁԷԷʸԷᖺ|˜)պŻԬ¦ԳִƯνƳ )պŻԬ¦ԳִƯνƳ *պŻԬ¦ԳִƯνƳ =ϻ* ɻþ*bϻ* ˬɻþ*bϻ* ˮɻþ-dbY~rwʷZ*רǿз˾ͻ ᲓbY~rwʷZ*רǿз˾ͻ ޣbY~rwʷZ*רǿз˾ͻ гۏm{{{{{{ ;mɰ㿺ֳɴߵƠ|||||| =tɰîֳɴ~~~~~~ ɰ󔙺ֳɴ"~λʵ̾ 4Gֵ߬²~λʵ̾ 2I՚߬²~λʵ̾ x߬²¯˴Žɵʲ¯˴Žɵʲ¯˴Žɵʲ ջѾһ w̛lĿ٤ȿlĿ٤ȿlĿ٤ȿ1۰ɿαڱ³ƭ̿ۼɰȿIJٰ1۰ɿαڱ³ƭ̿ۼɰȿIJٰ1۰ɿαڱ³ƭ̿ۼɰȿIJٰ=ޤȾ#ޤȾ #ޤȾ $)kk й';; й& й#)&2uu2x#4ȻĶýϲԿijƭɸ"vu|u4ȻĶýϲԿijƭɸ b4ȻĶýϲԿijƭɸҮΰ٭/ vuҮΰ٭/ Үΰ٭0 ZՍ'ɩ̪ؤЮ㽟ٱңо ׶Qu'ɩ̪ؤЮ㽟ٱңо x'ɩ̪ؤЮ㽟ٱңо ‡0YVVZ"߼0YVVZ"߼0YX[#߼ЁRSGRSGRTGȁ*QCئ*QCئ*RDئB]CB]DC]Dغҫ׷~*TDλĻ*TDλĻ ٽ*TEλĻ  ÙƦ롵'SE(SF(TFPUE?PUE$?PVF"?d(ZWYWYWXWX$MȽιĺҺϺҮd(ZWYWYWXWX$OȽιĺҺϺҮd([XZXZXYXY$OȽιĺҺϺҮî˻ű$"ԻȿƼ6î˻ű$"ԻȿƼ6î˻ű$"ԻȿƼ# "$೻"$ൻ"# E೻EൻE9DڭȵؾEڭȵؾEڭȵؾkŻŻŻ"೺"iŖƗƚRPOOPO\þsovtvy{|{ypnþtpwuwz|}|yqtþyu{y{~}uwg"#"(ſwrûstr ſxsĻtuxſ|wŽxy{k# T]_[a>Z\kAYYZD#,ſwrqtr ſxsruxïſ|wvy{k# _`i\m^zZ[Pj^G#,Ŀtqqwuoomnoqo Ŀurrxvppnopru Ŀyvv|zttrtsuwvxh"#"##""#("#")V݁ ܁ ݁ ՜.+,D՜.+,D    zCustomPNNL!,w ArialMS Pゴシック Courier NewBlank PresentationExcel.Chart.8Slide 1  Fonts UsedDesign TemplateEmbedded OLE Servers Slide TitlesL 8@ _PID_HLINKSA %http://www.emsl.pnl.gov/docs/global/%http://www.emsl.pnl.gov/docs/global/"_- Jeff DailyJeff Dailyga-5-3/python/docs/sc_11/laplace.gnuplot0000640005473000001440000000070611665255050016776 0ustar d3n000usersset terminal png font "./FreeSerif.ttf,16" set output 'laplace.png' #set terminal epslatex #set output 'laplace.eps' set key inside left bottom horizontal #set title "laplace.py Strong Scaling for 10K x 10K Matrix" set logscale xy set xlabel "Cores" set ylabel "Time (s)" set pointsize 1.5 plot \ "laplace.dat" u 1:2 t "Solver Time" w linespoints lt 1 pt 3 lc rgb "#D57500", \ "laplace.dat" u 1:3 t "Wall Time" w linespoints lt 2 pt 5 lc rgb "#707276" ga-5-3/python/docs/sc_11/post174-daily.bib0000640005473000001440000000651311665255050016764 0ustar d3n000users@misc{Oli06, author = {Travis E. Oliphant}, title = {Guide to NumPy}, year = {2006}, howpublished = {http://www.tramy.us/} } @misc{Ram08, title = {Performance Python}, author = {Prabu Ramachandran}, howpublished = {http://www.scipy.org/PerformancePython}, month = {May}, year = {2008} } @misc{Nie10, author = {Jarek Nieplocha and Manojkumar Krishnan and Bruce Palmer and Vinod Tipparaju and J. Ju}, title = {The Gobal Arrays User's Manual}, year = {2010}, howpublished = {http://www.emsl.pnl.gov/docs/global/um/UG-PDF/GA-UserManual-Main.pdf} } @misc{Pnl11, title = {Global Arrays Webpage}, year = {2011}, howpublished = {http://www.emsl.pnl.gov/docs/global/} } @misc{Ros90, title = {Python programming language}, year = {1990-2011}, howpublished = {http://www.python.org/} } @article{Nie06, author = {Nieplocha, Jarek and Palmer, Bruce and Tipparaju, Vinod and Krishnan, Manojkumar and Trease, Harold and Aprà, Edoardo}, title = {Advances, Applications and Performance of the Global Arrays Shared Memory Programming Toolkit}, volume = {20}, number = {2}, pages = {203-231}, year = {Summer 2006}, doi = {10.1177/1094342006064503}, URL = {http://hpc.sagepub.com/content/20/2/203.abstract}, eprint = {http://hpc.sagepub.com/content/20/2/203.full.pdf+html}, journal = {International Journal of High Performance Computing Applications} } @techreport{Dai09, author = {Jeff Daily}, title = {GAiN: Distributed Array Computation with Python}, institution = {Pacific Northwest National Laboratory}, year = {2009}, number = {PNNL-18355} } @inproceedings{Dai11, author = {Jeff Daily and Robert R. Lewis}, title = {Using the Global Arrays Toolkit to Reimplement NumPy for Distributed Computation}, booktitle = {Proceedings of the 10th Python in Science Conference}, year = {2011}, } @inproceedings{Man11, author = {Kyle Mandli and Manuel Quezada and Amal Alghamdi and Aron Ahmadia and David Ketcheson and William Scullin and Matthew Knepley and Lisandro Dalcin}, title = {Using Python to Construct a Scalable Parallel Nonlinear Wave Solver}, booktitle = {Proceedings of the 10th Python in Science Conference}, year = {2011}, } @misc{Scu11, title = {Tools and libraries for exploiting the Blue Gene architecture for faster load times}, year = {2011}, howpublished = {https://bitbucket.org/wscullin/walla/wiki/Home/}, } @book{Gro99a, author = {William Gropp and Ewing Lusk and Anthony Skjellum}, title = {Using MPI: Portable Parallel Programming with the Message-Passing Interface}, publisher = {MIT Press}, year = {1999}, edition = {2}, month = {November}, isbn = {978-0-262-57132-6} } @inproceedings{Apr09, author = {Edoardo Apr\'{a} and Alistair P. Rendell and Robert J. Harrison and Vinod Tipparaju and Wibe A. deJong and Sotiris S. Xantheas}, booktitle = {SC}, interhash = {99cb2eb568650e760996ff46b941154e}, intrahash = {038d82070304c4a246d44f81af06ba17}, publisher = {ACM}, title = {Liquid water: obtaining the right answer for the right reasons.}, year = 2009, timestamp = {2009-11-23T00:00:00.000+0100}, keywords = {dblp}, ee = {http://doi.acm.org/10.1145/1654059.1654127}, added-at = {2009-11-23T00:00:00.000+0100}, description = {dblp}, isbn = {978-1-60558-744-8}, biburl = {http://www.bibsonomy.org/bibtex/2038d82070304c4a246d44f81af06ba17/dblp}, date = {2009-11-23} } ga-5-3/python/docs/sc_11/FreeSerif.ttf0000640005473000001440000633773411665255050016400 0ustar d3n000users0FFTMT¥GDEF2hGPOS(sNLrGSUB7lcXOS/285FVcmap" bcvt 2fpgm/<egasp glyfBA6TheadJ<6hheaY%t$hmtxkernز Sloca+x8maxp$; nameﱟkA,rpost VRprepaN]Ih_<ȻȻZ"##@ZS /]1哮P(GNU @  8,`XXMM,A= *0M0ME48M'Fo+  "8QP444Dtc ,  M "c y  ",",*c c MX(M"M%M  M3  dC(M`5 CFM4M'M 94@@M]$KM4@C6%yc c c c MMM M """""4&"@ %%%%%%%4    %%%vc c c c c       MM MMM "c c c c c    ,"""yMMM,*3,*%,*3,*'c c c       c c c M @ +.>'c uf8  MP*" """ ,*3sP rxc -c ,gC^CX/M5 y ,W   %M "     %%y%   """5   %y%"%c c MuM""MM ,*3c #, L5#c %c """"U{ c c3''c  *#YME^p)))ap F   2T&l,   TW )+PSRStt  3P  X-'''")o bq''% %  *cLM+,H M^MPMxMtMuv<v<<<M M dM M]MdM M2M3TTMtMuM M M%M MMvMCM@M~P`K "L ,22SM 7<<&&G@MQ Q Q F)B'l"cq x~~ 9s  *}sGb.LP FM B 2]gJ c c M"y  t=",sc) (M)G))AG)A,)'3A AK#2,) ()),Kl)l+!,R,  /:"P  D $RJ Q4$z !))"i)i)@y ;ee:"QQ;  @r: e D{"@"`  _@      x     r [    { ~  f" & &m"cRIG  2 ,4 JoD -< ""`32  b)b)M  j#{xQ  { vo    D n  """    <_r<  ,z#)} ,7  "  V (2 >  (Z(Xj(Z (jL(`J xx 3(8,!2 2Q ^waz;X4zQ)M9cR.SJ~8q^V^'^0^7^=J^:^/   !-c6^UA TIW~|{zzWrrHK||-&qZ!y%yI6,63,X5 NG)rdeI.O/8M,NrzRjyZF T<p vR2(=w s .*$$+-+-2--Z-b-]St^^))UP<x.BuuaLgm??PPmga9UUU:bbqggUUUUpp.a<22g9u9aar^..9m,/8NR1\6D*\,l.:O') ' 'c  &!9d  \60J"& \))meCtDDDZ@.. " Tab~xd744jh0<0T\h0POcZZ=_gM0q)$af+k+YAH~ L( =M]Z')aU1-MM8LLLL:HHORNNLJNNNJMMGL+LJHJLRMJMMMNL LMMMO JJJMMOMLM,JMLMJHJwHMC,(zJz;LL.LYLOI`/IFNJJJQNQQJ J<LfL`MqMMN\L LbJ((h((((r(g((U((((((("((((~(((((B((((((((((((c) ((((((((((((\((((((((LI??WWI(&(5((( (((:..: :G. \.....8.8. }.:.:: 0A.:[.*0*0,@,@\.\.8.:@ 888.:f. :B..::..Yzhghg$bl@ @M.zfI6B88;R8w9x88U858g.e!MP"MkMNMMMMMJNMLMMML&D1MDGLvMMMMMLMM MNKRMMM!! !u!!!!!!!4!!!!!!! !0!!s!!!!!!!F!!!!!!! !! SGEE0  G EV1211G82d-k1191119q:+..)+;MI.?>=SkC1;qG0RG101G--0G--,G,-G-G-1.1N$1(@@@@?AN@7@>@$AN7       %%%"#%%;;;11:1X8;d11dG7k01Gk l*?]*2?%IHH3+636G//6/G//G(G/*BAB*JA*N*B>>QQ>    k   q  kT @k@77K@4*NN<G<;AdC """ """"&&&&&H&&0 00d%d040d%k+1++%%Q1+%%%4%%%4 ###dd#G' 3N##*%1# dG 1???1>?11??7?q?q?* ?4?c?FG6F8FFGF8GFG6FG8FFGF8Z[G""G"AdCII?1*"&&&1 &C1&1.0G:: ; 0002d#LL2GOQOG2%fHG6C1%d2Gk0\-  %t%Y> {(S~p~5 ,# 9 w_#Us3j (7  3z6mE  eAA'/.)tB44V>G?;*:;*.?) 2)MB-:::::::<F9+=8=4 649=5[/=A1,R$1F$p$)<O35jM< S  S zt     xc '  t   S   Szt    x))O OO)) OO O O)OOF  O a+A eA OO a+A a!A  M MM   M "M3Z%}N/))Nh~ O %Q+OB 6  vJI"8XPCN E % b"%c c c c c , M      MM """c c c c y  y  y      """",,MMMM,*3,*3,*3,*',*3c c cc       c c c  %MM M,%%%%%%%%%%%c c c c ce c c MM"""""""""""        "VG)G)G)G)G)G)G)G)-1)))))O[$<.@,28/i'6092}))))))))DKG)G)))A))G)G)G)G)G)G)G)G)xytv@@)))))))) JBG)G)G)G)G)G)G)y9Lff =}sFl`MM Oe]22))0<M M )))))@<OTMdM'M'%J\87888778;:^(^(lluKSccuD,5:DM+XXxD D EPrE, Wl l (m 4((o@ @ @@@ @ @,2,2,2 O @@C@@@ @@@ @ @,2,2,2 @0TQ * 7,     - e<""c< Yk ,*c* ''l|vv ~!>P0#%,< H&2"682Be * p@<M|#! !A"Ne2#kKV9, ^'  J"}# * )))) ) ))1)MS  V c y  :BE> >->->>>>;>->/E>EHE>-E>->>>> >P->>>>- - D>ll>>->>->H->>H->H->>>>>>&>&>&>>>>>>D D -->->->T->T-R,R,R,S-T-T.><>T->J->>>>>>>>>>KlK,K,dd440440P77444|C|C>>%%%|U4>?/#P@P@44>>70;)V7;7VVV5#8#Ku@44|8|8|8f||8|8|7|7|4|4|4|8|8|8|8|8|3|A|A4444#444444X4444|B|>|>|@|>|@|E|@|E>|3|@|>|@|>|8|5|8|5|>|>|>|>|>|>|>|>|=|>|>|>|4|4|4|4|4|3|4|3|4|3>>>|T|4|T|T|U|U||||||||||=|=|=|=X>X>>>>>S>L>>>S>T>L>|>|>|>|>|>|>>>>4rl446:.F=<*J@u9|2|2|@0404|6| | |4|4EN>44433|>|>|>|>|>|>|>|>|T|T|T|T|8|8|8|8|>|>|>|>FuutY-44444Y4444X= >>>>4l##Q 033 }4 Fx2}{L >> T    II  * 7 7 7 7 7 ,  k "   " c F 5$$$$  5   ' $  (((XXX77--L11\]]yyIyyyy 6 o#S818 ) Y O 7 7 7 > 2         J J J J J ) O 7 9  B A      J- K##########yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyhyyhyhyyyyyhyhyyyyyhyhyyyyyyyyyyyyyyyyyyyyyyyyyyyXyXy|}}#########9##|#|#|^|^//|^|^|#|#|^|\//|^|^#$$#########^###########^(#####|#|#|#u ###########:s:p#  2 4 7+ 0 'C      !    (E    6           v A  3 !  \     X2X2X2X2X2X2X2X2            ` ] !($ G   9  x   ( z  L 8PK 7DkIz kIz  M&&&&s8y82  e         !( (  ^  # # # # # #M L L L       **   *   )  [ 2  "''''Y''']'c6c6 777u73K'cTi ,)ZTD,,,b########%W!#####"N$##;$#####(##A########7##I#7#A#0#?#####"##########:#/###!$##"###$i##########"#$# 8 "#####=#=#########N#N######################""#######~########B#i#<####"##s#D#D#c#c###j#j###"a#"x"#x"?#i$##"!X!"II--P N->p\\\<=>>20000880000899999DD  N0N099'   @@h h6VVt1t1M"9#9((S((S(((((B(B(((D(B(((((((S(((~(l(((5((((9((j((s(((((S~ ~D&qr&Pr)4Ea&~Rh RM4V;9c!s,%/  "c #y 3q- (/S  }g  $Q$=  $(*t  3 M "$z"  )w$g  $  $ C$ c i $@9W3+B<# 7|2B'bM+_ c  [p*A &y"$"     &  { {s  ""0"Rdlim  [J    ; ` ! `  >>>>>>>>32323232323232323232v<44b,b,VVV44+  , 5P X5zz%%A%J%J%<%" """ ic! ""P,"@@" Uccc  UM QZZ, ,y Mc2QwHJFJJD+JUJAH+JJJJJJJJJJJFfJFJJMM'H'H'HJJJJJJJJJJJJMMMJMMMMMMMJJJJJJJMM MHHHMMMMM;;;;HHHHHHHNyLyLyLH<FHFFFKFKFKFMMMGLGL}HGLGLDLGLHHH)L)LMHHMoLoLoLJJJJJJJJJJJJHH/LxJxJxJ'HM>M>MnM'JL1LLLNFFFLLMLPPPUMUMDDDM>P7P5PLM'M:MTMTMTMJJJ@FFFnJnJnJMMMMHMMMMMMMMMMgJgJgJMMMHHHLJHHHJJJNLLLLQ.H.H.HJMHJNLNLNLMMMHDL+LFFFH;HJJJHHHMLUHDHAF^H}M}M}M}MJJJ L L LFFFH HFFFFFFFFFFFQQQ Y YMMMMMMMMMMUHMMMJMHHHHHHHHHHHH J J JJJJMMJ-MMMMMMMMnFnFnF&JJM$OHFFH#HJJJHHHHHHHHHHHHHHHHLLLHDHHHFFF+H+H+H5MJJJpHpHpH M M M J J J J J J J J J J J J J J J N J J J J J JHHH J J J J J J J J J JJJJJJJJJJJJJJJJJJJJJJDJDJDJJJJJJJJJJJJJMJJJJJJJJJJJJJJJJJJJJJJJJJwJxJJJJHJ J%JJJJMMHHMMLHHHMIJIJIJHHHQHHHMMMOO$OOOOOOOHOOOOOOOOOOOOOOOOOOOOOOOOOJJ[JMMJMMMMH=JMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMLLHaHWHYHLLLLLLFHM]J]J]JHJeJCJJMMMMMMMEHEHEHMMMMMMMMMMJJMJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ/J/J/JLLHLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLeMeMeMLLLLLLLLLLLLLLLLJJFJLeJJJJM_J_J_JJJJ)J)JFL6J6JMMMF9y(&MMMMMJ%B D%JMFMMJBMMMMMMMMMM MMLLLLL*(JMMLdLBJHJ4LMJ;M MMMlL;LMAMM)O}J JcJ"MTMmOXM2LMJ2ML#MJHJu Z i\'R=8>o Y2Ud'gCDhUtO'h   8::|rL3wE+\Wq!:!2 imee pp[E'z'$111E##X'I'''t666p%%NL  pck..B&<8>jLUU;%%H$jj;-@BB@/ SL)444z ?U:O ' 'sqOO^C?; j.*NNFCWm":O'* ' 'c  >%ZM+[Mhq{15Ewf;$+*f\e:o .&%FA_KgM?0qo}L)aaZw]'@!\K5!FbLXb4af0[....' '''Y38Y.\\\L\}^^DA@Z&$*(((((((((''((((( (((((X(((''(((''((((((((''(((''(\\lk\((''(((''(((((X(((''((('(($$$((''(((''(((##((('((&&&((''(((((( ( ( ( ( (((''(((''(cccc((''(((''(((''(((''(((''(((((((((((B((((((((((((((+(((((''(((((((((''((''(B(B(B(B((((''(((''((((((((##(~(~(~(~(~(~(((((B((((((((((c( (((((((((((((((((((((C  K2.> k  VH Hc5.0vpUV{ibh\~XaXPOPWEE &tt7$jM%J3^=k 4^'^0^^=J^/  ^0rr44{}DDRRjyjyII00?E,6,,,6,3,,,XA  TkIIWP-~~%%|nh{{44**zz>>zzXXp}TTrrrrHHKK||XX||77%%--&&&q?|&ZA|BA!!,,yy>>%%yyCCn II(  z{e{z{44444/,0,A,#7%D%g,<,0#1,2,/ ,,%<,xP%9,%u@C,,%z'B'sLJ}:`x4IZB$RDJ$Ii> R,QDQqEbgD0lRRJh/3`Y  * <33J<>WWt'WJ\Btvzl'BB\#| ":-6]'wE& T{ T{QQ``T RRh< @5Y,,-&1&      Oxxx.KKK,zZ %Y8xy}y122EE~ ~ ~ 2722222;=;3;5;>;>;!;!;!;!;!;!;!;!;!;!;/;/;2;2;-;&;&!!6&&;&;&&&&&&ei&i&i&<    =)**cc- MW[[NN;%***3333|4-/3/229'2 .000 eJ;3;3;3;33333TTTTT000000;00;@&UVVFVUVUVVV4VVV5VVV/V 1c % #c #,#,,M,M,A,,,"M, ccB\c4S,<<[;h,;fcLAGc,N,m1( -%*  af,c2CAyAcIcMW,C ,,\E1%F\;6y+gPRP /il)++!,ChyL*#0 ,/AP0:DaP##]\^b[\]2"T=PS{g7`6iV1\oHSP,UuS]p}9Be3FTee# (#'b(/.e@cQ3J33 (BA?c53,"c%z(&^5iZqa431I0<f#Hff 42B-1/;fC)$f/o<)[:1/d))#)3!)()1& "3'93d"jjI,SjS6S)M]jIJFF#jT#Vj,6Ojkjj 6'2%A=6?AA!24@  < L)GjI6E'?:E6J=?%jF(Jj6 Fjk jj667 64 6 6>>7>886:6 666h:4 66 ]_k808rf88h]!LA]`q~_ ]_#"$" 33$ $"`E4 1HNLcGjI6Ec?:7E6J=?bjFeJjF6njkjj6.67G6I;4S66>>7>886:6L6 6Ch:84^6Rxo" 3J333J>c3J <3<3lU/ /<yUcJJ{J3lJl >UJcy33##<<1 c  # : #,c# d4+8]%&8&&&$/] &2JA` ]1 ,&%]&+(&"&'  #.(]&,&+Ec c^(MA 2c<TETc,J4 " # `  j   K  }c y cm<DZN$ &$  @4M u 2M&&LLIT?:E6=?U%xF&oK I#43$.6 a'"aI, HD , H6  sIs u|ssE9V  C5; 5`,,: h6 @3M;@-M< 2cAOto`t[fD['] '*"#>yyZgpgpy,X, `~uz~#V_ :KUikt~ 9 N U r    ( 0 3 6 9 < B H M Q \ ^ u   ( 9 D H M W c u  :[FHMVX]FZ|6mtEMWY[]} d q !ADOY}ptvxz| z~1Ya !AM`kt~ < P X y     * 2 5 8 < > G K Q Y ^ f     * = F J W ` f y ?HJPXZ` Ha Pp HPY[]_ p t !!>!A!J!M!P!###G#P#W#^##########$$#$`%% %P&&''' ')'M'O'V'X'a''''** **?+++P,,#,.,0,S,^,`,q,,,,,-.@b|Vdy)8>@CFVzptvxz|wife_^TSKB;*F}zywqc\[ZYXUTSJB@=;:76530,+* pE,*}{ywutsrqonmkjhgf[YXML5&%$D`_]\[ZWVTQP)%%#/+ `_\[ZWVUSE?'5mmmmmmtmcl 6D; % ~ubzz8~~9:ABV#1VY_a*,c~  !:AKMU`ikktt~~ 9 < N1 P UD X rJ y e l o w y                  ( * 0 2 3 5 6 8 9 < < > B G H K M Q Q Y \ ^ ^ f u    ! % ' ( * , / ; @ C G H I  ^  `  h  (k * 9 = D F H J M W W ` c f u y             : ?[GdFHHJMPV XX Z] `  5 6 : Y Z ^ e f j q x     F HZ a|   6 ePm |pt     }  E HM PW YY [[ ]] _}   $ 3 A G Z ] d f p q t  !!<&!>!?c!A!De!J!Ki!M!Nk!P!m!### ##,#G#H;#P#P=#W#W>#^#^?##@##D##I##J##N##i##n##t##v##~$$!$#$$$`$i%%% %K%P&&&@&&]''a'' e' ''i')'K'M'M'O'R'V'V'X'^'a'''''''''**%* * ,**-*?*?.++ /++/=+P+T[,,!`,#,*,.,.,0,Q,S,Z,^,^,`,o,q,},,,,,,,, ,,--..5@_6bsV|hQVWdgy )68<>>@ACDFOVY$z}(,.267pp8tt9vv:xx;zz<||=>CG0J&)TVԜԞԟKԢԢMԥԦNԩԬPԮԹTԻԻ`Խah  9;>@DFFJPR֥֨!="a+"0"   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a rdei xpkHvjw5s{|gw(&sBl|\cn1T_m} b y z ~ l:  y qz,K*PXJvY#?+X=YK*PX}Y ԰.-, ڰ +-,KRXE#Y!-,i @PX!@Y-,+X!#!zXYKRXXY#!+XFvYXYYY-, \Z-,"PX \\Y-,$PX@\\Y-, 9/- , }+XY %I# &JPXea PX8!!Ya RX8!!YY- ,+X!!Y- , Ұ +- , /+\X G#Faj X db8!!Y!Y- , 9/ GFa# #JPX#RX@8!Y#PX@e8!YY-,+X=!! ֊KRX #I UX8!!Y!!YY-,# /+\X# XKS!YX&I## I#a8!!!!Y!!!!!Y-, ڰ+-, Ұ+-, /+\X G#Faj G#F#aj` X db8!!Y!!Y-, %Jd# PX<Y-,@@BBKcKc UX RX#b #Bb #BY @RX CcB CcB ce!Y!!Y-,Cc#Cc#-KPXYF+X!YKRX!Y+\X E+D Eg++D E ++D E 9++D E++D E"++D E++D E8++D E 2++D E ++D E+D E6+Fv+D E#+Fv+D E+Fv+D E+Fv+D E+Fv+D E#+Fv+D E+Fv+D E+Fv+D EI+Fv+D E,+Fv+DY+),&&6<IfNUU\fgns((((pP@X$h0l  0 X l  t X \h4@HhX 0l lhTl L ! !"D"##h####$$%H%&H&p'D'\'x( ($(D(T(p((()H))*D**+$+d++,<,------..(./l//////00,00001 1$1<1p12 2$2<2T2l23|333334 45|555556 6$6@66677 787P78848L8d8|89909H9`9x9::;;;0;H;`;x;;;;;(>@>X>p>>>>>???4?L?@h@@@@@@AdABBDB\BtBBBBCpCCCCCDDD0DDEE,EDE\EtEEF@FFFGG(G@GXHHHHHHII,IDI\ItIJPKK0KHKLhLLLM\MtMMMMMNNN4NLNOhOOOOOOPP(P@PXPpPQLR RRSS|STTTU0UV(V<VVWDWX,XYhZ0ZpZ[d\\\\]^^^_|_`a,abLbcXccdhdeHeffg<gPghPhiHiijXjk<kllmmmmmmnn,nDn\ntnnnnnooo4oLodo|oooopppqq0qDqdqqqqqrxsds|ssstPtttu u$u<uTuluuuv`vvwwwwxx(x@xXxpxxxxxyyy0yHy`yxyyyyyzz z8zPzhzzzzz{T{{||}0}~~0H` ,D\|@hXL$<l(<<PhH\$<D<$ d t,dTd(<P0XlD$8X@,L\DLxT0\8l0DTd$|4Hl0`D`@L`t Hl(<Pd4Xx¤¸$8L`ì,H\pĄĘ(HdŜŰ,|@TǔǨǼ4XxȬ0L`|ɐɨ(Pʰ$8L`t˸(@\̴,TTh|͐ͤ͸,@TxΤ hϘdд XѼ҈ӠTԬ8Ո<l֘h׀פ׼4L\l ٨ٸ,<LDT۬ۼDTlބޜ޴ߘ8Dl(ldttpHt x 8Pd(@HLtHpt xl|0@p $<0(x 8  D \             ( @tHxHP|t(<DLX D T d | !0!"T"l""##$%|&&'(4()*D*+l,H-.//01\12\223345T5566,6D6T67@7788`89 :;<==> >>?D?@@A0B`ClD DEF$FGHXIIJhJK|L LMDMNOOP8PPPQlQRlS ST,TU(UV@VWLW\WX|YYYYYZ[\\]0]^D^_H_`P``aaa0aHaXahaaab b$b<bTblbbbccc4cLcdc|ccdDd\dtdddddeee4eLedeff0fHfg|h0hij jjk4klpmmxmno(opPpq8qrrsst(tuvhw0xxxxxxyzd{8||}~~ $(,$pL<DTP4 ,HXtl|@H,d p`Pd<40,0|,\ D|$8||0D\0DXl0Lp(HptpdTP`HDxH4`8h<X40ˆppx dƸX$ȰTɰ ʐ˨X<ͤtt,dhѴ4dҼ@Ӽ8Ԭ Ր0֬TdDٰ4ڴL<ܐ`ppD|8l4\<  | |LhptX|8 x   x   0  x|8t0`\x8TH 0    !!0!H!`","D"\"t"""$P%&h'L'|'(0()*<*+x,X,-x.$..../0 018223 3445D6(7789t9:;L>?h@@pAABpClDDE8EF FG(GHH\HIIJlJKHKL`MMN0NNOlOP(PQQQR RS(STTUlUVpVWXlYZ([`[\$\\]^8^_D_``atabbDbcHcxcd@ee`effg4ghhhhhitijjdjkDkl,lm mnnnodopHpqqpqr0rrs`stHttuvdvw<wwwx xlxxy$yPyyzzHzpz{h{|T|}$}|}~t~HL<x8P,H,l|H0T4d($ d``4l$4HPP $l,,pt8Ȍ( d̬Hhϼ<д(рҴd|4ՐL<؀٤tڬthH|ޔެߤHXTD$d\xh<@`xxL`\thXH0|   0   D$`\p<hTl$lT P !T!l!!""#t#$4%%|&&'H'())*@*+,,-../h0T1(12d23t3455p56@6778L89x::;,;x?$?@`@AAADA\AABxBC(CCDpDDEtF FFGH<HdHIpIJJJJK4KL|M4NNOPpQ8QRV\VW\WXYYZTZ[X[\]]^$^_<_`Pa$abc cd de<efHfgh hihj8jk`llmmn(nohppq,qrrspstuuv4vwpx xyxz(z{D{|X|}D~,~H `,p|<l<t t0D8P(lph44Hdː0ϰ҄\ּ0ـt(p4 P H\8Hpl`   xXPxd($l0 !#$$%'(d)+--./0123456789:;=>@?d@AC\DF`GI,JLMOQhRTUpVWXpYtZ[|\\^^_`a0bc$d(efg(ghik|m n<oqrtuTvDwHwyyz{}$~dp|,TD00t<$h(\|X4x,Lh,T\\\ǜȀɰ̈́h`ЀDTp<լthd$۬ܘ޼4` xlxt8|Dd@8x @   0 p4`X\h40 P !@!"X"#T#$\%4%&T&'((p()t**T*++,-,../t/01 1223l34@45L56P6747899`9:H:;\;?L@@A8AB<BCDTDExFFDFFG,G`GGHHLHHHI0ILIIJ0J\JxJJJKKLLLM\MN0NOP,PQpQRS0STUV$VpVW$WdWX,X\XY(YYZ\Z[0[\X\]<]T]^ ^__x``L`d`|a0ab8bccd8deeefffg8ggghhhhiii,i@iTidixiiiij,j@jTjpjjjjk k k4kHk\kpkkkkklll(lm4mHm\mpmmmmmmmnn$n8nLn`ntnnnnno8oooooopp$p8pLp`pqHq\qpqqqqqqqrr$r8rLr`rtrrrrrrsss(s<sPsdsxsssssstu@uvwxLy yzLz{||$|8|}}~H~pLhHT H(t`(@d,@Th|0DXl  4H\p $<Tl,l,D\t4Ld|8Ph0Tl,D\t4Ld|Tl,D\tx 8Ph(@Xp0H`x 8Ph( ,Dd|lXp, 4Ld|<T(@Xp0Ph(@Xp0H`x 8PhhDXt4Ld| $<Tl0H`x $<Tl,D\t¨ 8PhÀØð(@XpĈĠĸ0Ld|ŔŬ $<TlƄƜƴ,D\tnjǤǼ4Ld|ȔȬ $<TlɄɜɴ,D\tʌʤʼ4Ld|˔ˬ $<Tl̴̜̄,D\t͌ͤͼ@Ph΀Θΰ0Ld|ϔϬ $<TlЄРи0H`xѐѨ (ҌҜ(@XtӌӤӼ,<LhԄԔԨԼDՄ,֬ׄװ,,,,,,,,,0ڨPhۈ۬ܤܼ\p݄ݼ$Dޠ,Dt4HPdx8`0DxDt8Pt(<Pdx,@`0Px`0 (D40Th  <d(<PT\ L8H L @   , T p @$lTXhX@| 0@8  t   !8!L"8"L"h"""""##0#P#h####$$$($@$`$x$$$$%%%(%H%X%h%x%%%%%%&&0&X&p&&&&&&&'(0)0))*T*+X,,--,-@-\----..$.d./////0 0H0\000001,1l12<233T3333444h4455\5556606D6X6t66667$7@7T7p7778l899909L999::(:D::;,;<<<\>x>?4??@@@d@@APAAAB B B|BBBC4CDD@DE(EPEdEFFtFGG\GlGH HlHHHHHIIJJ<JTJlK KKKL4LtLLLM,MHMdMMNN4NTO PXR8RSTxTTTUU U@UpUUV VVVW@WXWlWWXtXY YYYZZ|Z[[4[T[t[[[\0\H\d\\\\\]]4]t]]^<^T^l^^__X_p_```a4aabbbcc8cTcd@dddddeeffDfXfg g8gPgh<hhiHidiiiiijj(jjkLkklpmXmnnHn|noo,o@oho|oopp4ptppq0q|qrXrlrrrrsDsXssttt4tLttttuuDupuuv$vhvvvww0wLwhwwxxxlxxxyy$ypyyz,z{{|h|} }d}}}}~ ~\~ pH`x p(L pdD,L`d@T<,x4X0T L\|d<Pdx D| (< Tp  ,Hdt(Px@h(Hh0X@`8Xhx0Lh(Hh(Hh8d4`,X(LtHt,\ TL|$P 8d$T$d<l8(H4Pd,Hd (D`x$¼$8\xÜð 8Ĥ,ƄƠD`ȌȨ,Xlɔɰ  Hdʐʤʸ0DXxˬdT Pϔ`М0ќHdxҔ4LӘ HԈ$tռhքִ֘ 8T׀ל׸،t0Dݘ@ޤ޸`l|@4lP<8`\8|<XPpH| \     8  pDD<tP\t !#x#$%&,&'4'( ()()X*p++++,\,,-D.D.0<123356678:;p<=4=t=><>?\@@AALAAAB B$B<BTBBDDEFH\HIJKMOPQQ(QRST TU@UVVdVVWXlY$YdZZXZZ[P[\ \h\\]]X^a,b|dehf8giijklmo0ppqrTssxttXtuXvDvvwwTwwx8xyDyz{X|h|}d}~~X~T``\ (h\4pD<8lPlH(8|4`8`hx(@h`hd\DtDl0Tx$HtLp(l0x(Xh$<Tdt xpÜ4lļ$h|(Ɛtnj$hȬɜɸHdˀ$8TDẌ́͘(DpψϬ LtМHdрѬhҤTӄ,Ԑ0ք֘؈<l,۸hݤ(ް8ߘ߬4xx0 <<8l`$8L`t(<Pdx,@Th|lp<8Ddx  4H\ppL$l0h tD        ,   t @T\xh$d4P8(L Xp,D\t   0 D \ t     !!!0!H!p!"d##$$$$%P%&&'x(())0)H***+l,,-L-.\//0@01p2 23(340444566(6H8`89949::0:D:t:;<,<=L>h?h@@ABCCDDdEPF$FGLGH\HITJKtKKKKKKLLL0LLLhLLLLLLMMM(M<MPMdMMMMMNN$N8NLNxNO$OOP@PQTQRLRS@SSSTT$T8TUVlW0WXYYZ`[,[\]]^L^_`Ha ab4bbcPcdHde|f<fgPghiij jk@klllm|mmmmn4nnoHooppp$pTp|pq`qrrrs$sdsst|ttuuv4w w@wxyxzd{}~L D8X0p|D4 \\h$@p8$8dL<`4|D@̰t8 DDԨըֈ0T8 xHTP|x@$0l    P     X (      T     t D  ! " $ & ( ) +x -( .D / 0 2$ 3@ 4 6 7L 8 9 :  > ?p @l A4 A B D D E` F\ G8 HP I Jd Kp L M N O Qh R R T, Uh V W X Y Z \ ]X ^ _l `d a bT cH dp eP fd g hl id j k l n o pD q r s u vt w` x| y z { }L ~ $ D 8  l  < p  d d 8 P X $ ( p | l X p <   ( ” Ŕ  ʜ ̈ ͌ 4 x h ׀ T D  4 t ,   d $ p 0  @  p X \ H      P  D        d (  H   `   D   ! " $ $ %T &@ '8 (L )P *, +@ , - . 0` 2 3 4 5 6 7 9 :d ; < = ?4 @T A C0 DH E G4 H J K M N\ O` P@ Q R Tx U W Y4 [ \ ^ _ al bl c e f, g h i kd lH ml n p q| s s u vX wl xx y {H |T }  H  l (  t ( p    8  h d   X p x 8 4 h ĸ 4 X 8 H ˌ ̤ π М x ׌ @ \ ۰ 8 p 8  h @ D p $  4 D  , $ D 0  X d    L \    T X |          < D  !p ", " # $ %0 %H %` %x % % % % % & & &8 &P &h & & & & & & ' '( '@ 'X 'p ' ' ' ' ' ( ( (0 (H (` (x ( )T ) *@ *` * + + , , , - . . /0 / 0 1< 1 2d 2 3 3 3 4P 4 5 5 6 6 7 7 7 88 8 9 9 :$ : ;D ; ; <\ < = >P ? ? @ A$ B C D D E F G( G H I` J J Kx L@ M M N0 N O Pd QP R R S T U8 U W X Y( Z [ \x ] ^ `@ aH bx c< d e$ f g hL i j j k l m n o p q r tL v w( xP y { } ~@ X t D < T p D  < ( < < L 8 < H  H 8 \ p x  L D ¬ T X Ř Ƭ Ǹ ȼ t 4 D   X < ӈ x Ր ּ $ @ ۀ ܼ h ވ l   0  0  0 L , ,  T X |    t d   x  h    0 t  H  " # $ &t (P )t * + -X .t /T 0| 2 3 4 6< 7P 8 9 : ; =@ >H ? A B B C DT E G G H I J K L L M N OD P P R R S T U V X YT Zt [ ]4 ^ `< b< d e` f h iT j@ kt l m o@ p r sp t vT w y` z { } ~8 | x < 4 ,  ( @  h d T $ (   X  h x $  L L   x  ð < < Ǵ D ɬ ʌ @ ʹ H τ @ 8 ` H Մ 0 ָ 4 ה x < 0 8 D ܜ L ݔ ހ  ߀ $ ` | ( | x   X   8 P h  ( @ X p T   D 4 0 \ ( <<xdD  | <  T4Hl@Xp@Xp(4DH|<t  d!<"(#%&D'(*x+-.@/1@3,5@709L;,<=x>\?d@DAHBBCDE\FdGHXI|JKlLMxNOPQSTTUhVWY Z`[\l]^d_\`Ha bbcdleDf,gghiTjjkkklXmpnopqrtu\vwxzz{|}~,( <$Dt`pLTp|@ TX0Hd8$ DȘɨ̜p4԰ P٨PݨP,$4X@p@@(h |  t8,t !#$\%&()@*+-8.d/(0012L3T4p5t678:;x<=?T@ACdEFdGI,JLNP8QRSUhVXZ8[h\<]X^_a bXcddf$gihjklnoprshthuwwx<xyPz zh{L{l{{{{|||0|\|}}(}T}|}\,4P $H\\\H,l4` 8Ph(@Xp\($x4Ph(@Xp0H`x8 d`Xp ǀx Xɤ˸l̠4͔`pΈΠθp(h \јѨ0ҘHӐx(8@֐֠Lאdx$p(l۰Tݜ(޴߀L4Lx`D4<8|p4h0P($`@pP<$<4t,D\t||xd40X @   x 4  `0HL pD\$4pD<X <x H!!p!""##$|%(%&'p(0)4* +\,0,--x./P0P1(2034557799:;;<`=>d@<@@AAtABCD D$DlDEE0EF FxGGDGtGHH`HHI@IJ8JK8KKLTLMNNOOP@PQR0SST4UUW<WX4XYZZ[0[t[\\H\]$]x]]^P^__`a4bc,cdd\ddeHeffTfffg\gh@hi|ij`jkdl llmnTnoPp`qqqrrs\stvPvwwxzLz{@{|(|}@}~4~P|T(Tx400Ph0@8Ld \ 4H$DdP4LlH4L$P|X`t\<lpHl, H4Tl\0p\$ Pl dT,Ld|@|´dHŤ8`t`Ȥ, Tʠt0`̰̐ @dͬH\ЈHdѬ4TҐ(DxӜTH`xՐը8ָ֠pׄ,ؐ,tِ٨xڔl\ܸ,ݠ ޠD4T<@Xd\(lL|$P@0\x@0<(t80 H8$t\4|lT@ 0  |  d  \  8 \DD@4tP@t80, p@ ! !d!"8"##$4$%&&'()*+<+,-x.P//0123t45,56@67x889(9:L;<;>? ?@lAABCHDDEEF`GGHdIIJLK KLPLMNdOOPPPQlR(RSTTTUUV|W$WXXY$YZ<Z[8[\0\] ]^^L^_,_`4aabcLd(def\fhhij|kdklmXn@op0q qtqrDrssttu uxv0vwwwxdxy8yzz{ {|<|}L~~@8D,$x(DX0 Hd8pH80<`0|8,Hp,x4`t(T(0(„ÈøDdĘXŸ(ƴ8pǨȘ8Ɍ0ʤLˀ˜D̈,`PtάLπ<xШ4dрѼDtҼ\LpԴDl՜$xpװ \؄p٬HڔLی$Tܤ݄TބH߈(\t@h(dXt (tX<,|@ttHx @ T 0h` l@lt D|( L0L<,8@$P X H   H     T   p L |TdthxT<T|x$0d@   !t!"|##$0$%H%&<&'H'X'h'((((8(H(())))*4*D*++x++,-D-T.l///0|112D23x3445@5647 7t88949:(:;;<??p@@@@A<AhAxAAB4BDBTBBBCdCtDDDDDEtF4FDG4GGHLHIJJK`KL\LMLMN8NOOPQ(QRDRSSTTU$UUVWDWXDXXY Y0YXYhYxYYZZZ@ZPZ`ZZZZ[P[[[\@\P\]]]x]^4^__p_`8`h`aa`abbbdbc@ccd,deeTefDfggghhi,iijj8jljk$k@kxkkllLllmDmmnnPnoohoophqq\qrLrsssttpttu|uv<vw,wwx8xyyzzz{h{|\|}x}~~h|0tX,xhpt((00XLd|,Hd(P@Xp@@(@Xp`<d<\| L <t| Ll\ T\d\t 0Lh,Hd (D`|$@\x <Xt8TXd3!%!!X @tf!X 7#.546322#"&4  5 ', zV#*PT ..MK'  ##7##7#537#53733733#'#3m:!:!ktnv::ai&7777,(.446753#.'#5.'53.5654&4ZX"q0 F? 9, a`"?N-RGcOg)ar,@N ?? (o@A  (KOWWOI7W-R#2`.9= 5E2#"&5462>54&#"232673##"'#"&546"32654'.16.(3B6B+L)).J"&/)/E('0_4:'wV1EV0a!=f  s83:r)3G:^Li0!/hm $x&Or ]K4_I"U *.9C654&'533267#"'#"&54>7&54632>54&#"327&FU*I0:SA[0 #&54632e #%0O0.54>7$8G6%%2M2! ,6226,-P[EHUO&$:]Y]_<"O ME C465#"54>7.546324&5462>32#".'#"&'2$&E '[#/ #5(X#D'5#. W98#*9X  S;9"99Y 533##5#5BBBB8sf#"&54632'654  !".>2 R 3&-T82'3#'?Fd 72#"&546}!" !d" "#DN "&54632" 4&`||jb|BĚ<o"57!5>546$;8'Q[$//>323267!57654&#" !)I.Nk"! 7zN?4?"A+"fKq+ z?N9I+-7232654.#5>54&#"'>32#"&546Q["7L*:3"16=1/GYREW*4#QKj  %##5!53#fM:,N@@CW (%4.#"54?3267+#"&5432326e/CS= m &*%9KE#8B+Y;P5R-  Y Uuq;\8$ !%>c"!"&54>7>32"32654&e{6Vev/0!VfumD/LB58G)WoXE qq`g<;tYR^g ##"'7A)+ ;rT38):#"&5467.5463232654.7>54&#""ZAkZUk1QO-lRKa<,$F91= "/&  <3/=:sC[:M\\I3E=ED1DZP>3Hc#F0AP=1 "U !4=8+*J#'>7#"&546322>=4#";rJLQcwYa|3RV01, Cz9p[e|(Ts[J" %'!68YiQ' g Ps& g%5% \ BHx!5!5BBBB4D#/2#4>7654&#"#"462#"&546Ll""%2%?-%:&0]L UF$K/-@Z "' /UG2F& 0|S! t)2>"327#"&54632#"&'#"&546327332654&4&#"326~Yk I[5՘nJ$36G%3qS EA'1P)_ 0H0!Đ̩|a(!HA/Z& .zKpoQ'.%#5>54/!3#5>73%3().D%). 8t+`u)5m7Q,7%#!5>54&'5! 2>54.#32654&+"Q3dE>"!?4="-B:,N<2_FMZV,:9# 87!3 ; :+)9I?;CFy46323273#&#"327#"&@p !  7m-LQ.vi.UE!!⺢WAe=B%#!5>54&'5!24.#"3 6TX9;[W9m,FrI>N-V\C, 67)AYV6+OQ:% U)7;2673!5>54&'5!#.+"32673#.+!Hk\%-7 7 6U @%  &>P3Q!55!C& '8>" "$%#.+!5>54&'5!#.+"32673 (=!:9 7 6U <) =#=$#>5!C& #< ."326=4&'5!#".5463232673#.9X6" z6O9,@-ZbJ1:q  `|)@VO(#8,,0IzN!N]+!54&'5!!5>=!!5>54&'5!/:: 8: 8:::g66D5 "?5 "?66;74&'5!!5>s!@)?#$>?"m7 7D7!  r723254&'5!#"&546; & ==XQ+8l B77^g( "75!!52>54&/!5>54&'5!7654&'"431D2'  I9j :; :=N1I"`8i7#>5!7͡H  V %2>53!5>54&'5!3b-"   07 7;"7'  !55!!5' _$ ##5>54&'533!5>5$:>#!>8 7; =&mL1/M7 5D5!#> ##5>5.#534&'53 F$:>## %;3+&xL1/M#QL/" !"&546324.#"32>cG+:71N- ,W<=Y-VHpD,*?VO)3bb<54&'5!2%3254&#" #:dB'#;98-TS2"`e06'7!!?6&J:MI"N 4#".'.546 4&#"32>%306!=V&G76$+" drs_2N. (BE&1M. K7`A6  OG  " $"•)?TM(XB)@UP *2##!5>54&'5>54&#"%+NS2%8 :88yqY^#J5!46 #>5Mi"[V?Q#"#7!#.+!5>56T949U6">> l.RS-7 !@%73267654&'53#"&54&'5!Ka8Z$:> 5iM{;<dg+$+]K1,L;XO*}876#.'5!#654&'5%'& .) ) ;%B%[o0,# #.'53'.'5!654&'5(S:?''& k!"+ M}&'ߦYF+ R<" FS- 3!5>54/#5>?'.'5!7654&'515/())$3_w4 ,'*@mF=2.0U*q()!:+ LA Og4 v;2 $!5>='.'5!7654&'5'8+$CD!24"G'-B9!AI? U%2>73!5#"#7!. 3B! P& ) a,$!Xd+ #3#"3+Z12`4(3#CDN"d>M)#3#\D754#"#"&54632327#"&'#"&75327>%$18 L*aGR> 'V<.;ZH("' a =S/AOQ!"'I,)( #>32#"&54&#"56732654&#"N.KecDE;'<%0}\k)\S[m.!74632#"/.#"3267#"&X?[" =KWD+>$ '&>!Sko=*.aMVm*4 4 }*'5#"&5463254&#"567327#26=4&#"X0PSfzV63[8&3>(9DL @Cw`j+#+(5#53>32U 9{z =6RRP^-;DYt 87: py#&*8F7467.54632;##"'#"&5467.32654&#"4.#"326I>2+aF'YMS]? -(N7B_Gf-5JPBUh8Dey,#'@&#(6 :>/D_!'+)EV*:/Ha9(7'(% !(6+0=)2,VN1 )#5>54&#"567>32#5>=4#",+ GG#D,{)+K3W45 -'4 3j"567#5>=4&2#"&46>FU140#66!"*&#567#"&5463232654&2#"&46M-PLVS)5207jp<>M{ "*15677654&'53"#5254./#5>54&#"UF2C15!( 46o\z 6-&! $  '$567#5>54&#"c<0/o)(#=567>32632#5>=4&#"#5>=4#"#5>=4&#"HD>0=/ *i)$*567>32#5>=4#"#5>=4&#"J@3;#7?%&I*$&&O0!OG%"/a"+% 2"&54632654&#"`|}{!N?8@P?5Àbhegk`UgV',567632#"&'#5>54&#"32654&#" ?Q@PI^yY + 8,E#6CC8#C MOx]m/'#<,gSWi,'$73#5>=#"&546323276=4#"h6 )5$DYFZ^6>12$]@J  *Jx_l+PC "dgO#"&#"#5>=4&#"567>32(,2"30PD%4j#:+ &!\5)3\.273#.#"#"&#"#5332654/.54632 2+"++l-'S:T   9&-4:@5M;!: C8&+@7%4L F)'!-!$B*6E C#327#"5#&54>7672e 0HY5* /+# L- 2# t (%'5#"&=4&'5332>=4&'533N; "7B$* '/"2S  G;#-%%##"'.'53654'5 x  fc/22/M$ /.'537654&'53"/#"'.'53_!#TZ{ [pc6P) .* 1+',V&2>54'533#5>54/3#5>?'.#53  (3S%[O(r^+.0)*x! { E&(2654'&'53654#53#"&54632>, '  sa0 (O2 *2| X  hl\!%2>7!5#"#7!'.  - [ "#!7vkdK^.=4&'>=4>7^XM#22#.7,4'&88&'46T4..4,7  68>44>86 C3CBNK|^(@23267#"&#"'>2~#6"6#2~#6"6@D 0%D 0%`&M5vC"+7&5463273"&'3267#"'#7&#"t],#/K& e ,@' &$;!1"Ps=K Be|6 ,89 C ]M6J =H%#"&'#"&54632654'#53&54632"&'&#"3#32>322654&#"'D( =3*%2)lkjY8J,7-2 }yTA"2e##3 -2$##""* -$!k5((4IB,]-!##y+  %: Z&'7&547'76327'#"'"2654&b))b2`=BE8b0`''`0b9DA>`?WWzUUl`;CE9b0`''`0b:CB=`2b))bX?>YX@>X27#535'#53'.'537654#533#3##5>5_)*#A vpA'5\ 02(L(J*03(L(I5$%>C33CBBBFlBN4654&#"#"'#"&5463232654.54632.54632#"4&#"326"$&/"YA3 8&OA:P"+(/6LL6B1 <(M>7ID&'1)%&" ' *qJQ5D1;&9F:*$"*# =5:T03D2<(6D8*4w&2x( <n"c&m&&f+5#"&54632327#"&'#"&54>76754#"26=L =/i 0+(,' $ 5&q   &`s ,&" *M!'  l%5!5!JlB'/5&fm #BY!! 7Y69W 2#"&547"32654&xST=:S+==*+>>S=323267#57>54&#"2:ITVy %b$-+6 - -;/ISU Ok'Q-F*%4&#"5>54&#"'>32"5462326?4+$?.-?5^dcn:9::>86@\mbW65!"??[_TK 2#"&546{(4)73632#"'732654&#"b)# (.C:-'% ccA% '- C#5>54#"57 %v&  70 2#"&5463254&#"@QXA?RU ,%G-$ 'K;?UO<@Ok=QW9H(!'  % #%##5#53#5# #5>54#"577F/F>1 %v9ZZ1 N  73 # #5>54#"57>323267#57654&#"X>1 %v2:I&.Vy %bQ+6 N  7  -;/%D-U UkW2-F 7%##5#53#5# 4&#"5>54&#"'>32"54623267F/F>1? 5+$?/-?=Wo4%9ZZ1 N,)%!3,0#'+#N:N2'%&w"z#$z#$v#$F#$C#j$#$_9<%.+;2673!5>=#3#5>7654&'5!#.+"32673%3$71LQI+,9 @5!  )14ELWoG77-%0R75}!. 0)#>F?)y7327#"'632#"'732654&#"'7.546323273#&#"-LQ.vi-U  (.C:-'% %}@p !  7mRWAe=B4% '- Y!!⺢ Uz#( Uz#( Uv#( UB#j(;z#,=z#, Bv#,<C#j,-#!5>=#5354&'5!24.#"3#3 6TX9SS;[W9m*CwN>N-V\C, 6,7)AYV6'IT=), F#1"y#2"z#2"v#2"F#2"C#j2& 7'77''00000000"!)7.5463273#"'# 32654 &#"+XWH1X,[TO1Obs;"B_91k D^:2tl54&'5!32%3254&#" #:dB(#;98<Px"`g _06(47!!?6#< bMH 3#"&546323254'&547654&#"#5>54>32hK+6@ _0+'/&%I4N\9y#Rq)   vAJ:1(r2LC$SE6?%"8D%"7D%"8D%r"6D%k"j9D%":D%w6CJ"&54632>32!3267#"'#"&54>76754&#"'.=2673.#"(\DA4"3"LL/!+A$ '_?Q03@%3A;FU$( [:'8J=%(+(  .>-Va'3A&,5UJI*=1'>#$?0,54!2-$3$A;:)674632#"/.#"3267632#"'732654&#"'7.Y?[# =KWD+>$'V= (.C:-'$ &L[o=*.aMVm*4 OI7% '- [ y"8H"7H"8Hm"j7H""'"n&6&(#"&54632.''7&'7732654&#"}c]}zZ$4& *,{!y>G*1A&_![N@9?P@5A~de#7K-A@, 20jaVfVr"TQ"TR"TR"TRq"TRk"jSR%!5!'2#"&5462#"&546!" !!" !B" "a" "'"7&5463273#"'#3264&#"}`{a,09'Ab_/.A% #/8?ޟ%+5ANyfm}Fzh{*b0$VFf "?X "TX "GX m"jLX&"T\',567632#"&'#5>54&#"32654&#"]4AOI^yY + 8, E#6CC8#CoNx]m/',gSWi,&q"jd\#$%H":D}#$%":D[*-#"&547#5>54/!3#5>73#3235;*6().D%).",tIL, .++`u)5m8#"n%[?K2327327#"&547&'#"&54>754#"#"&5465327>R> +5;*6V<.;$18 L*aZH("' OQ!$L, .++I,)( yz#&"LFyv#&"GFyC#&n"6Fyv#&"LFw#'f&G~%2#5354&#"5673#327'5#"&5463254&#"326Tyy[8LL0PSfzV63>(9DL>(1" x"c#4@Cw`j+(54&'5!#.+"32673#.+;2673#32Q5;*6*7 7 6U @%  &>!Hk\%-,IL, .+!55!C& '8>"3Q#"[&,3267327#"&547#"&54632%3.#"a010G$6."+6;*5Weu\LT *.Z?[-09*G'1$L, .* xho[\ A2 Uv#(":H u#*&"HJ k#*&"TJ C#*&k"DJ ')*&+~J#+ z#RK3!5!#534&'5!!4&'5!3#!5>=!!5>5/kWW::/::WW 8: 8:'6  66  6'l5 "?5 "? 14#"#5>5#5354&#"5673#>32#5>5WK3,+@@ l"#D,{)+,j"45'  m'-'4 3K>#,.f" B#,$H";}#,"[#!327#"&547#5>54&'5!; $+5;*6?"!@)?#$>.$L, .+ 87 7D7![#."57#"327#"&547#5>=4&2#"&46> 1!++5;*64076*$L, .+6!!*;C#,"57#5>=4&> 14766!#-:,&#ML ~#<-&2& "').'N6#"&#"#'&+#5>54&'533267>32) %"26"}" 3665C)0$+51 9b & '' %wHF& V#%/&~#O V'/'UO V"/~|"O~ V'y;G/'yGO V(%2>53!5>=5754&'5!73b-"   07 WW 7;"7'  !52125!!5Y1Y54&#"5677#5>=5bc<MM0/Nj#5,5)(6, |#1"TQ '1'Q t#1"TQ"Q1~84.#"!5>54&#"567632#"&5463232>>.$qO$76  6 g$9<'vi+8 YC&)"+Aj4*3-LZ(  3b&02654#"#5>=4&#"567>32#"&54632$I*$&&J@3;#7?VS)52>Maa"+%O0!OGjp<"#2H"TR"}#2"TR"z#2"TRu/<23!#.+"32673#.+;2673!"#"&54>4&#"326V t+F =b3*hF9'4/@', (?UR/4[ca\5/C&%=;(8HO|K172/!+43267#"&'#"&54632>32%"3254&34.#" 5'$;# 'R:.;C3[sqY/D%:)=^C-@xg;P*?J)(0QD,33,dg"**"QfIWpx|&#*5O"U'5O'-Uv#5O"U*|#p63n"1V*v#q6%\"V*)G.#"+632#"'732654&#"'7.#"#'332654.546323273c<.:DOcXuU  (.C:-'$ $!O %bC7DB^]BgF*b XT4)(H,5g>Mi3% '- X[V?2/I47V9L_""3)\H273#.#"+632#"'732654&#"'7.#"#5332654/.54632 2+"++l-'S8  (.C:-'% '!  9&-4:@5M;!: C8&+@7%4L7% '- ] F)'!-!$B*6E*w#p6'^"V)Q0!632#"'732654&#"'7#5>5#"#7!#.+B (.C:-'% )> 6T949U6">A% '- c!@.RS-7  )C4632#"'732654&#"'7&5#&54>76723#327 (.C:-'% &B5*ee , 7% '- \m- 2# t /+# FQx#7 &W~Q#53#"#7!#.+3#!5>5rr6T949U6rr">> :-.RS--7 !@ C$#535#&54>76723#3#327#"5F995*eeee 0HY-b 2# t b-/+# L>#8 m"GX#8 H"IX}#8 "PX#8 "BX|#8 "TX[173254&'53327#"&547#"&54&'5!Pb$:> &;<+6;*34,~{;<chK1,L[[12,$L, -) ~876 [4%327#"&5475#"&=4&'5332>=4&'533 L+5;* "7B$* '/%$7+$L, i  G;#-%%%w#.:#Zw#<&"W\C#j< U{#="8] UC#=k"7] Uv#="8]".#"!5>5#53>32U 8 =6 P^-;DY287: py#,5354&#"57673#>32#"&532654&#"F C1N.KecDE;'<" x"%0}\k)\S[m.+;F%#!5>54&+"#"&543! 2>54.#32654&+"3dE>"9 $3<4="-B:&)D8+_FMZV,:9# 83#25)!3 ; :+"2  I?;CF"  &32654&#"7&'&+>32#"&54!:'>DE;'< )N.Kec#576732#!5>54&%=9 #&66!(ee:KqA( 3gFg,> !BjHH &51<=%#(Y">32#"&54&+5632654&#"N.KecDE;'<%0}\k)Iq~\S[m.y &&6*2327432#"&#"#&#"327#"&546k?r  )52#7m-LQ.vi.U!!<3$WAe=B*:174632632#"&#"#"/.#"3267#"&X1& x)52#" =KWD+>$ '&>!Sko<3$3.aMVm*4 4 }34.#"3 #!5>54&+"#"&54;2,FrI>m6TX9/ $3<[W9G+OQ:%)-V\C, 61#25))AYV'`&74>;#"#7!"3!"&7327&#"'<{VF~<%&;q{\L&##3J&!<>%s':9<&h^IX%-/ .726=4&#""#7!"327'5#"&546325%4>(9DL .!0PSfzV63**(=#"#5 $A U6 7 7-%\k4, >& 9& &C!5D5!Q3 ">,3"327#"&54>7&546323273#&#"^g_m =,gEJi$/!oR1i,8NM!CT14a mX'?$ !Od̥-74k+23254&'5!#.+"32673#.+#"&5467 & 7 6U <)  (=XQ+8R B5!C& #<=#^g( &&>32#".#"3##"&546323265#5P_-;9zzVS)52Rqx#&%Yt ^jp<;P  06;%4&'5!#".546323265432#"&#"#.#"32659,@-ZbJ1:q )52# `W9X6" z6O8,,0IzN! <3$N])@VO(#(5#"&54>7&'5!7654'534'321E9VH=I &, %m{=X! .(K [T(BGPM>%* 2.'({+#(2 J#".54654&#"#5>54&#"567363232>54.546322X8&7 .67,, i%9W .%.J#%%4g[8 30 H=r!@)?#rr$>?":-7 7-7! 8"7#"&54&#"!5654./!5>54&'5!7632%;:'XF!.?-"8;#7:"^P/h $%:*> 15C,6!%=6 8XK8"&#"7654&'53#"#53254./#5>5>32A79%S>5! 6P^-<DKYz  9:&!  'ppy#5673##5>=#5354&#"c<cc0/aa o-)(-#+%#"./##4&'57&#"#432732673C:Uyp2$L" e[\[e'S,MZ5z5 E,>E% >%2>54&'5!327'5#"'#"54/5!3274&'5!Y'F""0 3"YQ LH(a ]i4 5(4O5$445 #"2[,"[9$fflD4K:J8(3&%4&'53##"&546323265.#53%; F3N)52# L/3+&tf<;Py#8*567>32#5>54#"#5>=4&#"J@3;#7?%&I*$&&O0!OGS%"/a"+%" &6 !32>%!4."ڴ&BV/V8.K/ V!/JZJ/!(7dX5&=OOP"IL<&%;KJ"24.#"32>4&54632#"&54632326>+:71N- ,W<=Y-d<lX?U3AHHpD,*?VO)3bb<54&#" &6327>3234."2>* .M,DڴD}- #$5$3,;@/WtW/.WvW.(24:Y(41  'B/%9&86g_99_g67f_99_f'"3#5>54.#"#"&546326324.#"32>* E'_byx`w>MUv(u;';; ;),8+$93H`daTTY&$KK/^>&QU6>L 43254&#"#"'!5>54&#"#"&54;29#`eT #:dB'#;97$3<-TS2OMI06'7!!?3#25)&J' 132654&#"7"&#"632#"&'#5>5>32E#6CC8#C78@PI^yY + 8,P^-;N,gSWi,KYOx]m/'Epy# .72654&#"723#!5>54&'5!\E6D,dbSz%8 :8!@)?#<(#7K/V"4T6 #>7 7g*/"#733263232673#.#"#"&54>54&7653#&7 T:S'-l++"+2 9";M5@:4-&"2  L4%7@+&8C E6*B$!-!'1$ 2VB@%#"&5#"&463232>324&"2@29If)>7672e 3N)52 ,Y5 % /+# Btf<;P=-- t`!#.+!5>5#"#"&549U6">> !6<S-7 !@&25)r "&#"3#327#"5#53>32H79{z 0HYRRP^-;DKYt /+# L- py#4Q2>2#"&5#"#7!#.+ (8+QX6T949U6  (g^s.RS-0B673267654&'5332654&54632#"'#"&54&'5!Ka8Z$: $&<0)$(5iM{;<dg+$+]K125)6@T;XO*}876 (<%'5#"&=4&'5332>=4&'5332654&54632#"'3N; "7B$* '/<.#"2S  G;#-%%E#25)?A# \,#"#&54&'5332>54'.'.54632!9Q]._M0   +"5?5$I87 I^c,Lr@CF  $4Ip,!5>='&#"#"&546327654#53 8(??&A/,o42YE(!&; ;_30J6+!&3#".#""&5463232654./&'537632 %= #28- / ?#r &/ s<>s(WF*# D#y!8G( U %2>73!5#53#"#7!3#. Tt3B! a& ) +- ,$!-%2>7!57#537#"#7!3#'. Vtk- [v_}y "#-!7v-"#7!2#"&'732654&#T91DyXU.iv5WB^l.RAN&^xB=eBDYJ%#"327#"&54>3!#.g^BW5vi.UXyD19lJYDBe=Bx^&NAR./j467'7!.+32632#"&W[/#WR20a(;EaMx u#uH2G<8*pl0#"&54>54&#"7#"'7!63232>32XAH=a5KL5(%0#/&'#D9RR94$ 1+>:*>%)#u 22,B)$0# % $%!5767#53654&#"'>323#32677z7^uMB9=kWMh/a$$ :2,73ANC?ZmhLDK,%D$%#"&'73264&+54&'5!#.+"32D5tSU=eyMmmMZ"5 =B' 9\!AK/CDpcc5!D% I'+#"&5463232654.'"547327&+'zj4^ B7+.=*6nY Ui{..!)!eH&;$  {C+%#"&#"#5332654.=#&5476723#{W:M 6<#./BC/5 9,ee+l**w9H CI&#-#'@)P 8V t ..@5'(3#5>54&#"567>324&#">9be9$4* IGf5V2,'E\9>zfO"&1("3L,>>*=C{3C8C#__/)%##5#535#53533#3)22222'v#?'t#@'#@G #-c/ &%#Mc/&#MO D#-1 &#M1&#MQv#$%",D @v#,$""v#2"NRr#8 ":X#+#!8 "@x#Xc0I%#!8  "Sz"j@X C2#"&54632#"&5467#'3732>=4&'53#"&54&'5!7k5khhKa6L%#;=!5iM{;<((SSBUW$;!@(%A2KD#kn ..  "@~"j@X#!c1)+8  "$z"j@X H#*# $%"7x"j7D#+"$%"7x"D-_"#f%wY# 3232673#&#"326=#534&'5!3##".546v>j ??a7|)`EE:0;;Mv03`cH.!ӫ7\m<t,8 $4,"1NR &=IPT23263##"&#"3##".547#5367&'&54>7&5464&#"326.'!2 _1$ S_@ $ .N4E+B8;&+2(  ]b51%&2'&#hO0$:"'*2@S172,3> ( ,#  )YJ]7k3NF;8 +,8 v#*&"7J"v#.O#\N"[0#"&547.54632324.#"32>5;*'+:71N- ,W<=Y-IL, ($ HpD,*?VO)3bb<54&'5!!54&'5!326=4& ,O7 8:::/:: &>77'9@)r5 "?6666*.Na!%!5654&'5676324&#">.A[D$4*T#,XLDP`1=:S%2q\a="&I(*B21)WC z#1"TQ :=#76322#"&546"3264&#52654/!3#5>73%3'<(r);;)*9;)'&''C().D%).9tٔ `;R::*):"&6'&6'W !IY)SxM*%":"DG_z#f%w#"{#"Uv#$#kDl#$%#D Uv#(#mH Ul#(#H;v#!,u# ;l#M,#/"v#2#s R"l# 2#Rv#5O#Ul#5O#JUv#8#\Xl#!8 #X*'63\'VQ'7 C'bW#&%'654&''654&#"#4&5332>32/A>96#?  &@">\1#sڲF7%0 3099: -K7:j*,-)%'>54&''>54&#"'654&57>32AeJPY^P(#98P3:W !6;%F.P1&28 (SU**  E64,2B' Av#+ R#^K8+567>32!5>54&#"!5>54&#"> Hc4PS!46"<7&I3$76 E0tD3sh6(4FFG$/f)"+Aj4*B /<4#"326'632#"''675#"&5463254&#"56726=4&#""a9'z7M7(9DLsS&z3A3-F6R!JCw`j++(545#"&5467&5432654. QM*07K&  !:#~mka8_ 34@@ ,3 5E&%*'& *.&# L^vlSJhLY-t.F%P<$ .=>54&#"'7#"&547.5432654.'&,5!$)88#+ *0.,!e0 9$Aw%%"9!S}eUrB`5^%xOUDH!4- 9Y%2#654&#!5#"#7!ˎR1L+&P3B! P&F&bP9!a,$!9%2#654&+5#"#7! Q1L-' - [C%] P8!!7vk4#$%n"-D )UB7;2673#632#"'732654&#"'7!5>54&'5!#.+"32673#.+!Hk\%- (.C:-'% )7 7 6U @%  &>P3QA% '- c!55!C& '8>")33.#"3267632#"'732654&#"'7.54632c *.Z010G$`> (.C:-'% %R^u\LT 5A2?[-09JU8% '- Yxdo[\"##+2#L"jSR"#+#2#L"MR"B#2n"SR"#+#2#L"SR!#<&O"c\ &3264&#"7632#"''67&54&#"5675.&55&9*.40CD/w(). !c<r-/6J6&C0/DVPL^M&<E#B.8#"''674#"#5>=4.#"567>326324#"326B776723#5.&55&9*/30CD/w(). 5*eer-/6J6& C0/DVPL^M&= 2# t &567#"&5463232654M-PLVS)527jp<>M{< -:%32654&#">32#"&5#"&5463254&#"564&#"3265:'>DE;'<N.Kec=h0PSfzV63 [>(9DL>&3F\S[m.i%0}\k*Cw`j+ (=#"&5463232654&#"n>12$]@J5@PI^yY + 85$DYFZ^6=AE#6CC8#C+PC "dgMOx]m/*Jx_l$,gSWi, $+.%#5>54/#3##7#5>7373'37#3() "1s%).R.:sSwI.=d+`,,5m8u޵u1]y (4632733273#&'327#"'#7&&#"DA+.2!  >Bvi.U}V@1RZ('2mEAM!f.)ae=BDb}]e"+7463273#"'3267#"'#7&7.#"X.&,.8$'3+>$ '&>!4*$14?q=KoI^% *4 4 53!5>5#5354&'5!3#3b-"   07 XX 7;"yy7'  !56k5!!5k6Q$#"#7!733#.'!5>=#?&+6T9'.') ">> 1fs&6l.R;;34 7 !@_L39\I273#.#"#"'327.5462#".'&#"#5332654/.54632 2+"++l-'S: "0*5  9&-4:@5M;!: C8&+@7%4L. ,%:- F)'!-!$B*6E9#27.5462#".+5#"#7!2S "0,"$2Z - [#@'/,);:)!7vk?K?'%2#5>=232654&#"#"&546ZdP0/ DWK= "[n^|z)(mVMa.*='%2#5>=232654&#"#"&546\hL// HSI? "[^X9j* )ZCF>=.*=Q =32654&+"2>54'&#3#%#!5>=#534&'5! _FMZV,?-B:T0ee`3dE>"ll!?4="n?;CF :+\#<6:9# 8g67!3 ; 4732>=!+5354&'5!!54&'533##"&5Ka'>' fZZ;<i$:> ^^5iM{dg*!26h76hBK1,LB6;XO*}9 U 7#7&+"733#&'>73#.';2673!#7#5>54&'5Byk4  . b* #4z(k\%-17 7G: &@@?'2;$3Q,,!55! %)&#"3#73#3267#"'#7&546323&Zl`.!MP&70G$nG1'"1.>u\1 s Y6C>K%#09QVOi=toPG. r"5354&'5!3##"&54632325P` ==ZZXQ+8 & j77j ^g(  BE& *2#"&465673##"&546323265#5354--PLUUVS)52*6jp<>M6D<#8'$527.5462#".=#"&54>32733267654#" ".!?]3cgUZ+K2:H 0I, D_~, :D*]lhb/L4_ "JL<'1-'V-27.5462#"&=#"&54632733276=4#""/bQDYFZ^6=6 >12$]@J ,NN}Jx_l$ s+PC "dg$.2##!5>=#5354&'53654&#"%+NS2%8 :8UU8'Y^#J5!46 #>65!CFCO+"&#"3##5>=#5354&#"567>32(,2"30GGPD%4j#:16z+ &6D!\5)-03#!5>='#53.'5!#37654&'5#'8+o$CD!z5/" .'T-B69!A6K(*.~&142654/#53'&'5337654#533##"&54632#>,,r@ '  /x-0 /^rW)N2 *2L+|O\6 h |6l\!Z_ D(%'5#".54632>7323'54#"3268SX,9N~a3> `FA=-,;$S%1F`8c#  McvL,P?$ E (32654&#"7"&#">32#"&5>32:'>DE;'<79N.Kec7.54632#".#"6324#"326}?9+ >?|d2c ?B10T:;&+L%U=d[ HrGf7.""oC:cx4e/&[ 1726=4&#"7#"&5463254&#"56732632#"&5%4>(9DL0PSfzV63[825)SV**((9DL790PSfzV63-<**(32#"&'732>5&#"` TL\ueVGn$G010Z.* \[ogyVQ90-[_s2A H39A#".54654"#"'&#"'632>32327.54624'3260" ;'&|dI=-L/BJ~T9&',$ !"'1?Bw,&'6 @--4Jf0F1- H/-0. F+1 3),o)h6?32654&#"#"&5463232654&#"#"&54>32#"(Z3<-$ .  1#(*# "61AhE*/GgCl ]>3%45 +9$#=<(5A.@E)3a#".54654#"#"'732654&#"#"&5463232654&#"#"&54>32>32327.54620"E*/GgC+(Z3<-$ .  2#(*# >A!S0 $!"w,&'5!!(5A.@Ev ]>3%45 +9$ ( (&$'. F+1 )0%#"&546324&#"#"&543232654&#"326=L'WmnV'L=G//G\-$ . " . $-+)J]\K)+k(8ZX8(.AA%44%+=}MN=&W5673##"&54632326=#534-PLKKVS)52eeW jp<>M- .<&m.<"&#"#".54632326?#"&546325>323276=4#"C79/\@2)+7DYFZ^.2P^-;>12$]@JDKY'GD(CHmJx_lpy#+PC "dg& /73276=4#"".54632326=#"&5463273n>12$]@JZ2)+9DYFZ^6=6 0\+PC "dgCHmJx_l$ 7'GD('%#"&546323273#&#"32=4&'53saQ*j*?"SSK&!~r`t&AH(Vl#m% 1F#"&54>7&'53>54&'534.'32'p! <=42 !>D'     !:*> 6,@XT8  !0JmmO '(   #8) ..#"#".547&#"'6326324&'32>)g6V@-0 , /BJ~!#~/.,.' / 5R<+k`9TLX=1- 8a32#5>=4#"#5>5>32879#D,{)+K3,+P^-<DKY-'4 3j"45\py# &4"&#">32#"&5463232654#"#5>5>32879#D,{VS)52K3,+P^-<DKY-'jp<;PYj"45\py# %2#"&46"573##5>=#5354&. RR14PP*7?\66\?M!0"57327#"=4&>  0HY7/+# L!7#5>=4&'534444f6666O*56732673#"'#5>5&#"#>3254&#".c< 0)0/# 4& o 91)( .14# ",##5>=.5463254&#"5673#.#" `,+""" b=`!!0*) %) &i32632#"&54&#"56725)SV c<*P;<pj4#/,4&'7!#5>54&#"567!#"&432326SV0/c<>[WaF:(a/32Hu)(# xMZp*80=/ *i )$$&A4&#"#5>=4#"#5>=4&#"567632632#"&54632326n +B+++BC3(*HDFUONUtVS)52-W>0=/ *i;)$KMTTjp<;&K04&#"567>32#5>=4#"#"&54632326J@3;#7?%&I*$VS)52-%O0!OG%"/a"jp<; &T1%54#"#5>=4&#"567>3232632#"&5MI*$&&J@3;#7?25)SVca"+%O0!OGP;<pj##5>5.#5354&'53, -~-/l !0- / %&6%!"&54632;#&+"32673#.+;2674&#"326uVjsh^ @pY()Y2Q%/(#1 7)'rrWj bD'(%-()E="(XM)7%#"&'##"&54>32&"32>54&543232>54`R9??9R`\Kuu '",/.+1WI;;IWMy=.546754&'53>54.'kcj0/kj0/EQG5TGPQ |aiy k)(hyj^~ w)( zI*PH g nPKxM URM >R&)72326=4&'5332632#"&'5#"&546*,2"3025)QW%4X#:+ &eP;<kg\5)8O#"&#"#5>54&#"567>32(,2"30PD%4j#:W+ &!\5)&S)"&#"32632#"&54&#"567>32(,225)SVPD%4j#:P;<pjN!\5)q"'.#"!5>=432G 9 =6-;f# Y87|"8o"#"&54632!5>54;-/F#6= "&3H.78Y 5+ '3#5>54&'5373'3254&ǻ&&'&m{"86Y}M $'* %  [$3 ٧ ]8)3&\;273#.#"#"&'32632#"&=332654/.54632 2+"++l-'S:Q25)M4 9&-4:@5M;!: C8&+@7%4L5P;<drF)'!-!$B*6E&>32#".#"#"&546323265P_-;9VS)52qx#&%Yjp<;P"".#"3##"&546232=#53432$<{{"B$54#53%f*,Y      0'+v)$0*,+*/$&U"%2>732632#"&5!5#"#7!'. 25)N3 - [ "#P;<ft!7vk&%+'>7#5#"#7!36324&#"326c7I * '  /[9m@"S!7*S6WE C&2vkX2A/j4&'7#"'7!#"&432326$SV#0[WaF:(a/32Hu#u xMZp*8&.DU:6D/0CP@F *3_VX6EsW5&%63'%2#5>=232654&#"#"&546ZdP0/ DWK= "[n^|z)(mVMa.*='&2#"/.#"32>3#5>=.546?[" =KWD /0Pd=*.aMVm()z|^n' WV#4632#"/.#"3267#"&5X?[" =KWD+>$ '&>!Sko=*.aMUl*4 4 |a"&2y])  j3#"&#"#&#"32=4&'53#"&546324632j'#**j*?"SSK&sa'.oL";k<{;xt&AH(Vl#m%!~r` _[ $.#"&54632##"&5434.#"5673#"325 RS4'/DOMS'#0'9xS(8C#D/sN7 0#3 N45"32>73!5265h /2# }/ _,)(7 "|''n 173276=4#"%"&#"#5>=#"&546325>32n>12$]@J79)5$DYFZ^01P^-;+PC "dgKY=  *Jx_lpy#'-23##5>=#535232654&#"#"&546ZdPff0/^^ DWK= "[n^|:1)( 1mVMa.*='.2#"/.#"32>33##5>=#535.546?[" =KWD ^^/0ffPd=*.aMVm1 ()1:|^n%-<%"&#"'5##"&5463254&#"567!3267#"'54&#"3268*WY]vY:0 V=LE-k0$V?(,;B1= =@]\+k(E(0(M%+'>7#"'5##"&5463254&#"567!3632'#"%4#"326%54&#"326 c7I * ' *WY]vY91 V=L9m@"0$E$6Z7*Se?(,;B1=6WE C =@]\+k(04 A(76723#;2654.546323273#&#"W:\5 :]]3#./BC/S9=  T.0FE0w9H-T t T&#-#'@)8B {$1#&< "-4".#"#"&546232=#"5#'>76723432#32"$<"B$<,<\5<p"Bp3 n&%Yt@&%Y8-V tUU CHQ%#"''>7&'#"5#'>76723#32>7&54632#".#"6324#"326}?9+ G 2X\5<ee3     |d2c ?B10T:;&+L%U=d[ HHq-V t S (/f7.""oC:cx4e/&M".#"327>32#"&5463232654#"#5>=4+!5>5#53>32A 9{e"3;#7?VS)52I*$&&=z =6RRP^-;DYt O0!OGjp<>Maa"+P87: py#45673254.546323273#&#"#!5>54&#"c<0iQ/BC/S9=  T.0FE0V;/o)?-#'@)8B {$1#%<(8@(# 567!32>7!5>54&#"#"c<K'. /݊, ok "#(#P-[77.'537654#53#"/#"/&'537.'537654#53#"/#"/&'53~3; *2 PP  ;I  Ru3; *2 PP  ;I  Ruzw!ir   $ yzw!ir   $ e%#"'7!.#"'7!.l((((V2%326754&'53327'#"=4#"#"&5462K3,+ l""E,{21;D5#j"45)  0-'c<1.C4:%32754&'5332632".=#"=4#"#"&54632M85--21;D6# :X|21;"#7$ j?0#!1Bc<.*?,!Rc<7+J*GK*G(*|M2*CU*<uJ|(==*-<C*=Z* {?<\*  ^7632#"&5467   !".>2 R] 3&-T82P}9x".54632#"'R 2>."!  u28T-&3 tuM52#5032654&#"#"&546m5N<02 )4-% 7RB9JUB3/:   %42#"/.#"32>3#5.546%7 $.4)30gg B#'37B}>|"yzggd" #BYq]=vCd#5322 gBqD2 #'&54>;2( a 3 7>;23  aT3#73n77n7dhdTh3Tn7dt 72#5264&#u*9;)'':*):"&6'uM 3A 7533!56i66 /A7#5!##7666%4'6 %##5#5353'f6ff66ff6ff B7!! 763 3#"&'3326|8Q 50,.FW2/(v n 2#"&546n(C  2#"&546"3264&);;)*9;)'&'';R::*(;"&6'&6'@[#"&5473325;*6.,IL, .+#"Kr3#"/&#"#>32326.0) 1# 4&$" r91 .14 y&<,C3(>32327.5462#".54654"&',$ !"0" E /-0. F+1 ,&'6 K&%P '77''_``_```qG<%* O*" EV* A<[*W* #!50 0 #!5!50V a0 #!5!0V 0^ #5!5!0V 03 !5!zV 02 3!20g #0233!!20e08E= 5B&qq7 <C <C &@''eAL9Q 3## b66 #5#56b6 533 6b76 #5353b676 8D53!5366vv 8D!!53C66 B!'7!B<bb<HffHCvg#Yq#Y!!"Y6) n nj #>54#"#"&54632"'"# 1"4: 0(   *#'4DBt#5322'&RlY']}~" m"#"&54632'>548&$ R ,&<)/Z ;*C/)v.#5353#666]#3366m]6v#5#5v66nGB2654&546322'0<C625)4<U533!5666#5!##76t66 ##5#5353Uf6ff66ff6ff}c.+5367"&5462326590 -B."  !.- .1327.5462"&=73 ".B- 0 -.! U" 4632#"&y! qV 4632#"&74632#"&qx! ! #"&54632'654  !".>2 R 3&-T82)z[ ;#5322x8H"'#"=3326=332=3+(M6 66 W----!!-.U~&#'37K}>|"yz3gg~#'#73K"zy"|>gg%3#"&=332>t:P_& >NJa"$.#"#54632e &_P:"aJN^3#"/&#"#>32326S (2'4.#8) .(= ~!!7L6 B 8'B B (%3#+P%!!3+9mP-9n's*#3%'p UF8y5#'!!6$ 2"&#"#".#"#"54>32>y!/, " *% (+/#+#$*$  +)(, '77''e_``_```:4&5467'64/; 5446 5/& 7% ' &V *#"&54632'>54  !".93 %)~ 3&-C .;#"=33265Q]JLXOc.N}s<&"&L&3#5#3273326H0)"C1# 4&!>-91 :Q .14 6N #K#4#qG '7!'7!'7b:;bb;7:fHHffHH5'7'HffH<bb<w"ak 73#'57'5r"r$__ιHHWeV n' %5m 33#7#A#9?'d_= #"&'7327qTAsn8>M QQ #"&'7327qTAsn>M QQ$O!!<O+r!!7#"&#"'>Y.q$.TC-q($ "1O@ N4@ Q2  &#"'>32nsAT QQ M> 5!'7'7<bb<HffHy/:4>754#"#"&54632327#"&'#"&753276   !   *#  $k*  "   #   !#S  > 3267#"&54632'3.#"'?%+2(? W&o3*G3,09Nw"57#5>=472#"&46 B e    c{  n 2"&54632654&#")57Q55!"6*,<8+-8O.?)$,7$"5#"&=4&'533276=4&'533u$ >  D  %l  d  g4632#"/&#"327#"&8%'  %!!3#.S/:  )!%/)C5('5#"&5463254&+567;#26=4&#"!#,4% ) f 3).?C   c+%'/'#5>=4&+5767632#5>=4#" \ #5Z g  $DU  U->567>32632#5>=4&#"3#5>=4#"#526=4&#"" !%1 ^  _  _     $$LX Zl ]-y  l  "&#"#5>=4#"567>32 g "  `  j 'c#327#"=#&54>7672, &   {& 6 2#"/.'537654'5 73 T,* {!  mn 1>54'533#5>54/3#5>?'.+53 C #7V '! > 1( Y~  3T<5  G=  74&'5!!!!5>s!@)?#($>?"m7 7e,7! 46323##4&#"#/97/TJ;>;91,{ #!5>5##!#5?$>?"88j7! 8 #5####5!888ťj- '>32 @2<".! #"&547 @2<"8(#"=33265(]JLpXOENPsF0 #7632#$- %# 865) @  2#"&54632#"&546#76323i: " RO"" ":EB`"&462"2""22""2"":֨Iw":֩K":֫M":֪S^M":֫XK":֩\}";l$Q% "#.+"!5>54&'5!"+)( $79!6%,6"';5!v)3 v6 # U( U=+. &6 4."32>#4&+"#53;26=3[2oo0&5N.8\8\HeeH*UP>%9[j-#(*!;,". !#532>54' 3#5>73D  1O**05 _0 1=; !-#4&#!"#5!#4+"#53;2654'3!533!26=3;&/0b; %bVC"&/,'4IB""I[1#"2)5>5!!5>54&'5!:"6: 87!"6&<5"&<7 6D5"32) !#.+"!26=32L dB .GD?1#)LI@R1GC=2#Q7)04.#""54632>32#".#"3!52>53(#-Z'UQ_Z&L .# (/+"%Tx?""?rw># #>uP'07=#"';!525'#"&54>324+5!&#"6324&#26"a^S ,' W q!8IO(T *1# 3bT4jkU^bYcZ55 (/^xl+J3#X)11U7Uc|mm^X ;S"#"5463234.'5!2654&54632#"&#"#"'3!526=#"&54>54&f'61>%Ka ZaK%>16'"nE$@n"!S 8=8|$I8Y@8I$|8=8 ,$A&?_q1%!q_?&A$, *73;'.546323273!7654.#"!&(!E?(k^K z(A@!\q} $$+&?c:ye+H'Jl6o.<D#jM)B#jX).#:d)":xh #:jA":l#;x).'8%#".5##"&546323733265'4.#"32>.9  d:Zks\AJ  T#+<-$2 9,.<ku  8H\^cG{r<B~,UF0LD"+OAOZA79%#"&'332>54.#"#"546232>54&#"#4>32gW,G8'4 / &)$ 51#/R,R9HeTcXt0)'@K&:9$! 061J!<5"dU5\U1IEd/ _ ,4>54&#"#4323>5>32#"&t1K&*&^^5[9 =' :?S:F \tn |H*+,%3%#"&546327.54632#.#"4.#"32}db{xU( =,/>15YG*(0GTG0]@0@> :'ya}^Rs $,/8C2(6)&;AdM-M:T@#EC))6%#"&54675.54632#".#"32632#"&#"327+CgG/*EhA16" #*(#1  . $-<3Z(lvE@.A5(<=#$9+ 54%3>]'>?#"543232654#"#"&547.54632&#"632#"'32632yIC'C5W9 dSn0[N1 (; @W#Q&6/.12( ( @<-FO&)7ch8*,)$0?3O1> . (#4#"#4.#"#4323>32T>U*[  F='4 &c@gd   D`27%3)".54>2"#2>5 .PhP. 0L`L0 \-:-U0WbG//GbW0+VZD,,DZV"!*M5775M*A%#"&5332>=3/97/To;>;9Y # +>32#"&#"3#5254.'#4ȷm*+0 %%%,/,+H%-\>O' &*:53Q-&*%#"./##.#"#5463232673C:U $$( b[e'4 *5*@+1E%A  +%#".5##"'##"53324&53325 \ G" &P/M*,!"8G5/83;O/hN.#- $4K&P][I1\2D)$$"L,oM(455$ / !-5 :M2)  !5"7^/4M68$''+3*2?AA&#- ,R#(/+32653#"&5##".53325#"#>32327(*6*i21f R24  BP11#< EN*@3A,#%$0L-2#*%#"'#>54&54>324.#"32>wfE6 T1V8ct\ 8&| :%!/ h+ST/ " 665_P/$IN1"IE,!89,72654&#"#"&54632#"&#"32632#"&54632J)+QI`{+ L-C"C6 ^%6 "D,#. 0*!( yaj "4/=V"1)6@-") "#"'#"&546323274.#"32 5/"*2x]b}~h~2 ;*=4yS _4^bh (JQ1gD %#"'3253#"&5&#"#>3232740: (+=00;&&"9(w(+6+!=9$#"&54654#"#463232654&54632HP#0(610$2=F=?1XI$$9\:FO4|6@g@($("Z)42#7.54632.#"&54>4.#">(: zhT4L<+TK'(-)QQ $: +]\i'@A"l "4_=V!iKdB,FV@867"/3#"./#'.#"#&54632733273  +Y-   4$# /{W"+Y+'*yu  N#)?)?>F+S }C0#7.54654#"#54323>54&54632 ^ _w!2d/2D?EV3 -X h^s8_O1x?G5 rH( *";lgF)@%#"&'##"&546732>54&543232>=4.'5`R9>>9R`j]*  #",/.+1!+ &]jWI;;IW_#9(  8&(0323>324#">4#"32|cqn4'R$5 6-C'=%fBawP7E+2$-  '8 GAduhOh#"& Rm>Ji;)dB Z$>@%Dn93D#4##".546=4#"#4>3232="546322/.#"9A3D *'#"-"kQ:$2'  BU!!"@B.LTV#*;:+ 2 &22Ѹ:L88X)% !b>#"&54654&#"3!52>=<54.'.54;2>32b"$"R/+" /2kQ! (4 $9? 7!) K'#9SAA.  LB',!*B*+<#:־bC"j+ U@%#7.546?34&'>UoFojjTZPJXPZWJlzzlg~ss~gRuc|tSM| J##"&'##"&5467#>3!54.+"32654&543232>5m66`R9>>9R`33#* K)] %$ #1,/.+1!+qBWI;;IW@o/S 5!# "2! 8&(W6"t88s7V*L6&!ZS"&5463232>54'##"54>5#"&54>7654#"#54>3267>323273v4 W`*#"? &Z5Q$]?2 ###""!5, H+R?6j- 4,)1<67OM6iKDd9" %)5>=#".54>3!4&#"329%!"4YT00QV/59!7)P72J& 5O<%8 $ 32654&#"72#5.546wN?8@P?5A`|eOTOb{k`UgVrb[Yg024.#";2!5>=4&#".54>32#"&546*'U[Z:I;9% GT8"AtH_ !:rKQV:!7 'Q7#JF-U;&&!>2"5463232654.'&54>323273#"&#"NJ)E4MPA &X<X% */:GV=MN;'6' 97AxW1.bG+'!'OX ""#.+"!#./!5>54&'5!"+)( +<$79"5%,މ;#6"';4" &9#"&#"6323273#"&#"#"&54>7>=4>32327 310/ ;H' (/ 6#$  $U:A0 3,+%:&=Q2-3%)6   "!6iOw0"#"&5432%32>2#"5477>54SY$2!e#h" S#@v!`u zhs" C%$F=7ID-/K\*4#"#"&546232#"&547#".54?6  :$ ;' y'!?T.&(&Z00b 94!#52>54.'3#567>7'3#5>73 .: )!+WkL:   )7-6dM* QKj **05L,3%#"./#'##4.#"#5463232673,C    W%W  %%(! '`j   *[,) 7,B+%1 ()("%N#".'#".546732>54&5463232>5'5#"&#"#4632326KW$ !:)R{7#H1%5 3*7|(>%B6i271B(X@^23trO#,^fB'BA$&-"$.,BVK##ƋqJ= ,I)]%E%#"&'#".546732>574&54323254.'5#"&#"#463232>"+LH/$8S&f[kf$$TTf *\fz,a%!K T4.g#-N& Mi6_!,+(!+7"!_8&%A1JN K%4&5462'>=#".546332653*nbZ'Ot3yk3I"='CJ."Rf :NQ#Ml;` C!FE,^/$'4&5432'>=#".54>33265#T%$0V+7Y5&aI<<F07Rg(8Tv2 :NQ.$-HQ(>dFsK)ZLe3 H$27"54&5462>32"#"&547>7>54.#"3*n3*nJ-nxV|6#3? 5'8C."R."R!mr(. V*JO/[2)3463267#".#"#463232>54'#"&7327&#"dP;-7 P^c8$!(6,`&(K:HT4(1 ;R=>"'GqpDJ">6%OET&+F *$/".5>54&#"#".546323267O9_ LZW:@2(F .0tg]t=YZGAe'SZw6< ?|`YZ'A=0<7&19[N:\CEkE 50 R*".5>54#"#"&546323267'dA3<:&H+ 7NG?P(;=/_'8 .Q%(+TA==U "* '%!'>5(>-/I/? # *,/.546327>322#"&#!"&546323  6#9!yd $L2!.2 !%Ǹ"/( w#!3#!3C;),.54327>322#"&#!"5463237' %> $ ND $4(38y` "qk   P 2##շ$<'%#".54>32#"&#"%32>54& xwOt5A[Vy"#tet>$?',=odX/tkF&"/!Ίk(_^>Nh9G''%#"&54>32#"&#"'32654&^SRj'HzIR) +UR  5#+'XMgd(feE& 63 #+%XJa@>{ KZ &2#"&+'>5#"#"&546;54&54622 !.Uc Z.! 23*n#!3g :PO3!#."R$6(2#"&+'>5#"#"&546;54&54632r;#0 = i"$'+A #Tv2 ;OO# 8!;%#"547#"&54>7654#"#54>3267>323273 !W`*#"? &Z5Q$]?2 +'&H+R?6j- 4,!"1<67OM6iK) !2%#"&'##54.'&546324.#"32>wfDh 39>8.+EKN0qpct\ 8&| :%!/ hRA#39D4. 64gu$IN1"IE,!89)%#"&54632.#"3267=kb}~hd=;1t - 2=LVbhV( !+F*!)&M"a)L!#"&54632&#"3#327K)b}~h  q'" bh  &4&#)L3732>5#53&#"'632#"* "'q  h~}b)#&4&  hb, %32654&#"#4#"#432632#"&E#6CC8#CT *[/,AOI^yY +N,gSWi,=dE6Nx]my%#"&54632&#"327y(NL(l>]5|y{gq54&'533!5>5$:>#!>8 7; [}\_L1/M7F 5D5!#>;,232653#"&=4.#"#"54654.#"#46323>32K*i21 !Q./(ITLF3<380EN*@3!- s88u"!<0DYJ:>F&3%4.#"32>7#".'#7#"&=574>32 8&| :%!/ \wf1:0  qd 0``.jJct$IN1"IE,!89Dh >*s?  $ 8 $GzTy?32654.#"'>32#"&g{y|5]>l(LNqe~9i[6i;DĕCy&y&]&C]R'j3"&543232654.#"#5>5#"#7!#.+>32/;+)/'2#%K > 6T949U6P/fps '+$Yg&12!@.RS- -sOl*'~"8"632327#"&#"327#".54>323273#.k6D-p?# 7Q)x"5$%7V6vi.U#L`J37NbJII!  "+H|40E0&LM;%e=B.G~QUI. !&:$6=,>N",jm-7B5!32#!5>54&+"#"&54632327>54&32654#":EBd:# 3ST,:  (F3&4 3se`# 8'603K&"?}w=)P86IM3>%>=!!5>54&'5!!54&'5!32#!732654#": 8:::/:;#EBe9# 2SU,e`#"?5 "?666!7'603K&GIM',!5>5#"#7!#.+632!5>=4#"c">> 6T949U6HSfk::hR-7 !@/RS.=gYj66k'#C a&[V/;2654&'5!!#4.'!5>54&'5! :8 :(::9)"?" 5D6 U%$0] 6?" $" +#"32#!5>54&'5!#.3254&#"MiEBe9# $5JA"899YU"q"(93.G(6?!T1JST%*#.+"!5>54&'5!* @L $79!6G%"6"';5! Vw0764&'5!#.+"#7267;2654&+":: ::FMME/07  9  m}?66W6PZYQ! *A]( k"#52>?675.'&#"#"&54632;54&'5!3267>32#"'.#"#3#'&'&+!5>=# O%C3!&%+N83 == 38N+% 3D$O " # :: C,  * C  V@PJJLP77PLJJP@V  C * < 77&/%26544>54&#"#7332632#"&'7 HZgg#=;#R6' z)a"5-OH](Q@GQ% ?,8@RN%>%N5YrU42:)%!5>54&'5!4&'5!!5>5*:::/:: 8:("?66l#6D5 "?T#a&6@#"'."#"323#'&'&+!5>54&'5!327>32V  @8*X-1(*! :; := k(N+%fP:^ BJ"B7#>5!7JJ/"&54632327>54&'5!!5>54&+"b&4 3:: 8: (G )P866D5 "?}v~>g0+"2T"3"&P7 ,%.#5!654#53#"&5432326R .(C,B$&@:/;+')%n $R7#$RLRG'+, )Y ;V+4&'5!#.#!5>54&'5!;265 8::"9): 8:  )5 "?b6'5465 "?-(32754&'5!!5>=#"&=4&'5!hRL:: 8:HSfk::=66D5 "?=gYj6674&'5!!5>54&'5!;2654&'5!;265 8::P: 8:  8<  )5 "?O665 "?-5 >%V=4&'5!#.#!5>54&'5!;2654&'5!;265 8::"9): 8:  8< )5 "?b6'5465 "?-5 >%"-"#7!632#!5>54&#3254&#"S:;#'Be9# $5JA"8 YU#p1S!7(93.G(6JSO'"'32#!5>54&'5!3254&#"EBe9# $5JA"89;#YU"(93.G(6?!!7JSq:"#73327632#"&'732>5#"&#"'>323274.,H+"  !JHJbN73J`L#U.iv"?E2!5@)t"1 L!(o ?0o|$:&! .IUQ~G.B=e+DsK3/%/?qP$92#".5#!5>54&'5!3462>54."q}NzB!n 8:::n?\(+7.(,8++5/›Hlk-5 "?66}raJIsB+*AtJFoB, t(3&54>3!!5>=#"#52>7>?54&#"3-2RO(88: % 2(7:K'?4M'5O># 6*WJ= *<D.%4.#"32>%4767>737632#"&};';; ;),8KA ; 1J.`|^dw$KK/^>&QU6>LbU%  \$ 0bh",2+5>54&'54&#";6'32654+"C27Xnh((NFH )y399sn'5 46G84)+2 1%Rv!#.+"#5>54&'b!,W(((}8'44) +7;2654+"'4&'5!#&+"#7>76x%e&%(TT%0H $0./"*-}}KH \%"#5>7>75.#"#"&54632;54&'53327>32#"'&#"#'.##5>5! ^!"*#  3%,((,%3  #*"!^ ((  G1* G: 7+hm))mh+7 :G *1G  v44 x,72654.#5254&#"#7332632#"&'71< 4$k2)h" LFa<"0-b^=^7:- $]%1x=;'26$:P6 >)74&'537.'53#5>=#5>P((#(((#(X))#)))#'I674&'533267>32#"'&#"#'&##5>P((4 3 $%7@ !} 0((X))m=&+< 5G7p )-#"#"&543232654&'5!#5>541_ 0#&" $&(((ILp]/# /")))0h(3#5>5#"&'#5>54&'53((( ((&)))92p))/"+74&'53354&'53#5>=##5>P((((((((X))mm))44v)R##5>54+"#5>54&'5(((((()))0))) 'SF#"#7!#.+#5>55,!!,5(('8}}8'44&\) A32654&#"4&#"3265#5>=#"&463254&#"567632#"2"4;;6!1T1!6;;4"2T0/'BEjjEB' ?Q'BEjjEBh*rWZo**oZWr*.)(66# 6 [&35>54&'53;254&'53#&#(((((&T)))0))/"}-326?54&'53#5>=#".=.'53)$3'(()8E*.''!+}')46m# ,R*)3)5>54&'53;254&'53;254&'53,((((((((4))0))0))46)5>54&'53;254&'53;254&'53#&q(((&(((&4))0&)0))/"} '7;2654#"'!32+5>54+"#''1_(0c_'U<(,!ؑ)9#f)lC7(,4"'8b7%4&'53#5>%;2654#"'332+5>54&'((((''1_(0c_'U<((f))4)9#f)lC7(,4)%332+5>54&';2654#"(0c_'U<(( ''1_)lC7(,4)ۑ 9#f -.#"#73327632#"'7325#"&#"'632326@E-O  ,8mx[jCH .O "/P"B\;=j_Y% * ."32654&'5334>32#"&5##5>34~34-((A*V:^or]\oA((YDYD))m?G0~dibv4$/#5>=#"#5>7>75.5463#";54&(('# J#2,0Sie$):E(2)43.O%  W.:09K5Z1 "CJ&jC&B87#5>5#5354&#"5673#>32#"&5463232>54&#"((== i%"E,R8)5!0*3X))%  u%-'yxg =nV"v&/,%267#"&5463232?3#.#"632327#"&#"#DCja}}h8,  O-#%L$ =P^$Y}sS=; 2\bBVL"j:&M =%;2654#"'32+5>54+"#"&54632326=4&'5!''1_"0c_'U<(_C3&  &(ؑ9#fC7(,)0~  ~Na/")0;!5>=##5>54&'53354&'5332#';2654#"((((((((0c_'U<*''1_4v))))mm))lC7(,ؑ)9#f0%#5>=4#"#5>5#5354&#"5673#3632&(M67((== i%9W|X$!)j?))%  u%R&/&Cv&'I+7;254&'53##&'#5>54&'53((( (((:0))4?\")))T%##".54632#"&5474654&#"326=4&'5!32654&#"#"&54632#"&KIJp?n;K BZZTD4!@)@"tTZZB K;n?pJIKN-/@iv><)("  G-6796t  "()<ˊ>vi@/W"&54632#"'##".54632"&54654#"32=4&'5332>54.#",+Sb&T8_  _8T&bS+,&+ L((  +&)f7jMQQMj7f) ;Q?0!'h )* $'!0?Q;0;"#73.'5!3#.+"32#!5>54&#3254&#"U9 ".4% L@* EBe9# $5JA"8 YU#!(D!#?.q(93.G(6'JS 87;2654#"'4+"#7354&#"5673#.+"32+5>5 ''1_$h- ?Q  $-0c_'U<(ؑ9#f'8}n# }9&C7(,4L"632327#"&#"327#".5#!5>54&'5!346323273#.k6D-p?# 7Q)x"5$%7V6vi.U"M_K3m 8:::nƈHJ!  "+H|40E0&LM;%e=B-F{N5 "?66ƒ !&:$nF%267#"&5##5>54&'5334>3232?3#.#"632327#"&#"#DCja}@((((A "0S38,  O-#%L$ =P^$Y~hv44))m ,=4%=; 2\b {0!!5254/#!5>=#3#52673 P=$.%=>#D B#.,:<   $"?Qk6"!7ku)*K u07263'#5254/"#4.#3#526739,9cP(  #!$3 &+   * *6 =..> T .h  >A%!5254/#!5>=#3#526?!!5>54&'5!!3%!=$.%=>#D B#.,/ 8:::Y< P"?Qk6"!7ku)*KPk5 "?66: $tAH%#5254/"#4.#3#526?##5>54&'5333%263't(  #!$3 &+ ((((    T9,9c *6 =..> T .5)44)) * 67!323#'&'&+!5>=#"#52>?6;!ܻ7SO " # :: # O4m~5) * < 77,  * ^*-7#32#'.##5>="#5>7>;'!\cȄ +<%!_((" _!&8&}T+5P  v44v P5+ M7!323#'&'&+!5>=#"#52>?675!!5>54&'5!!!Aܼ7SO " # ;; # Oh 8:::-5) * < 77,  * 5 "?66*B7#32#'.##5>="#5>7>75!#5>54&'53!'!YcȄ +<%!_((" _!7((((w}T+5P  v44v wv44))m,Xj2>32#"&5463232654.#"#732>54.#"#"&5463'37632#"&#"2632#"&#"+A&(vGSG-[15.+#t,&"+. iDpU\3.3=% -Gsd< )6. [T L#)+2ZK87P.*A 6+=+$4  !#7KZD4JXL3Z  %<#_h-'8HnRY2>32#"&54>54&#"#732>54&#"#"&5467'37>32#"&#"232+ W09U,?>,; M#:*K7mGR/ %  -:' "('54/.'53;4.'5!326?>&4 ,!&1E$@10 U%% U2 Z' )sDcp1%!p4"U@9NQT!)X#5>=#5>54'.'53;4&#"567326?67>32#"'.#"#0/$!8!(8 + ?Q,   "&"    )( '  # v I 54O%*#  '!5'? " 34632#".732>=#".#">32327.#"":p^9s'dI;W.E$*C; B"F*H@ 6%0R5:W.K+S9Cz]9_f7%$$&$$&3[R09^e /2"&54632>54'#"&#"'632327.#"`|}{ 2,8!-I  %,C$ 3;;̀bheg#=8!>L+'  *!:4^>$#&'&'5!>32#".#"^  7  7%I '$I   c%@  ,#"'&5.'53>32#".1&#" x  fc:!# e2M$  (* r'&''&,@H&54?.'.'53>32#".1&#"4."2> &6 ( A3= "x  fc:!#  *DVD* *NjN*ree.B ? /\K& (* >+RS>''>SR+7g^99^g"&,8H&54?.'.'53>32#".1&#"#"&546324.#"32># A3= "x  fc:!# ma[psU]tZ=-24 5$"1ee.B ? /\K& (* dd`2cT^>&QU6=O"K7".54>34622#"&54622654.#"&5"|[d)FZa0"4!765nC9SkX?[" =KWDS$0 L++}bo=*.aMVmOR!),2,{"46?'767'767''#" <>BK! "MS MG%L"& '* '$& 546;2546;2+"/+"&   $    $  P EL  P DL I #632#.#"aLJo!XPRV]O155&54632#"54654#" >*4;*-#%*<=4/'&"654&#"#"&546324#-*;4*> "&'/4=<*%F`!#"&546323:3"#"&'.#"xi_\ +%F h4EP; ) :ZG40B*z Y'33''f'F'3'y'Dyn'>Ul#"&54632'6547632#"&54674."#"&54632'62>7632#"&5472>4.'&54632#"'7"#"&54632&'&54632#"&'732%#"&54632&#"#.&=9#.&= $-  $-   >-  >-'"?)& '"?)& '"?)& '"?)&   >-  >- $-  $- h#.&=8#.&= na!S"&54632326232654&54632!5>54&'5!4.'5!#'7#5>5tY :::/(: 8z&Y:'6.   ))  ."?66l6D5 'k"?Tn!N"&54632326232654&546324&'537.'53'7#5>=#5>BtY ((#((z&Y(#(6.     . ))#))'k)# '53533#32#!5>53254&#"#=fHHEBe9# $5JA"8fYU"6ww6_(93.G(6|^JS%53533#32+5>=;2654#"5T;;0c_'U<(T ''1_76UU69C7(,4_ 9#f#-327'7654&#"72'#"'!5>54&'5"G+U'U`eN-TS2JO'Z5^'#;98OU&U!2MI3&J4[6O&Z7!!?6'4327'7654&#"4&#"567632'#"&'#5>5E#%e'_C8#CT ?Q@PI^GW'Z-4 + 8,N,e&_0EWi,# MOx]xJW&Z/' "!"!5>54&'5!2673 !:9 7eU6 p"6!#>5!&C2673#"#5>54&'5- (((!7v44)" 5354&'5!#.+"3#!5>=c!6 @L cc$79>)5!G%)6"';z!#.+"3##5>=#5354&'b!,WPP((PP(}8'!v44v!m)&M82654.#"!5>54&'5!#.+">32#"&54632&M*X8#.!:9 7 6U *5!C& -"=`r8Tp <&3%4#"#5>=4&'5!#.+>32#"&54632326bc %&&k -v'1+0Dj`#;2%,; p%"//"}7!0 Kg;s <Vq%2#.+'&'&+!5>=#"#52>?675.'&#"#"&54632;54&'5!3267>32#"'.#"# %4"9)" # :: # O$D3!&%+N83 == 38N+% 3D$&'54< 77,  * C  V@PJJLP77PLJJP@V  Cd!'.##5>="#5>7>75.#"#"&54632;54&'53327>32#"'&#"2#&#^ (( ^!"*#  3%,((,%3  #%.*   T v44v  G1* G: 7+hm))mh+7 :G ?a },(A"&'7326544>54&#"#7332632#"'732654&:'(=HZgg#=;#R6' z)a"5-OHoj ?6J&.""I@2:Q@GQ% ?,8@RN%>%N5Oo  36VE!'&'&+!5>54&'5!327>32#"'."#"#.*! :; := k(N+%  @:(X&LB7#>5!7JJP:^ B!fD8!'&##5>54&'533267>32#"'&#"#&#^} 0((((4 3 $%5? $&T))))m=&+< 5G5n,}G#"'.#"323#'.##5#!5>54&'5!35367>32  ?8*X-1(  +0 :; :=0+^&M+%fP:^ BJ" (tt7#>5!7ttJJ =74&'53353>7>32#"'&#"#'&'#5##5>P((#3 3 $%7@ !} #((X))mVV=%+< 5G7p UV)H5354&'5!3#327>32#"'."#"323#'&'&+!5>5 N :=NN k(N+%  ?8*X-1(*! :;65!76tJJP:^ BJ"B7#>h?5354&'533#3267>32#"'&#"#'.##5>=B((??4 3 $%7@ !}((16))64=&+< 5G7p  ))#E!327>32#"'."#"323#'&'&+!5>54&+"#= k(N+%  @8*X-1(*! :; S:7JJP:^ BJ"B7#>1S2:3267>32#"'&#"#'&##5>54+"#7.(4 3 $%7@ !} 1((,!)m=&+< 5G7p ))0'8}V1!5>=!!5>54&'5!!54&'5!#.#: 8:::/:::"9)"?5 "?6666W6'54.!5>=##5>54&'53354&'53#&#((((((((&T4v))))mm))/"}0!#.+"!5>=!!5>54&'5!!54&' 9Kd 8: 8:::/:G%"5 "?5 "?666~/#.+"#5>=##5>54&'53354&'5z)M(((((((}8'44v))))mm)&?2654.#"!5>5!!5>54&'5!>32#"&54632&M*X8#. 8: 8:::*5##5>=4&'5!>32#"&54632326ec %&%&&%'1+0Dj`#;2%,; p%"/:%"//"%0 Kg;s <" <%654&#"32>7#"'#"&5463"327.54>32Z-53X+  D;.2@E̒1T6&,W<1$CW+D>jjWDM{u@rL8K!9,DWU'3bb< .UZBuq$,%3267#"'#"&5463"327&54632654#"pC"%(*^}f N>e[4@O>O;7F  :eo{jFgjeODu 9v",223273#.#"327#"'732654.'.546v8o $  rVTBS|y{g#Q!@5J&.!.1YW5!!Ud=Me5E 33=L%&%! (LV[1%#"'732654&#"&54632#"/.#"326 00*;5+ ErX?[" =KWD+> 0(, ,L$'vio=*.aMVm*P!#5>5#"#7!#.+#. n> 6T949U6:>!@.RS-6H9%#.+5>5#"#7!#.+ &+,eD-  -Dc/"{84 L!7}}7!<'.$5>=.'53654'53,$$ / ,'@H(  C#"',3#!5>=#53'.'5!#7654&'5'8+$CD!}24" .'-B)9!A)I?'-*5>=#53.'53654'533#,$$ /,'b!@H(  C$!!b' V>!563654/#5>?'.'5!7654&'53#.#23_w4 ,'*@mF=2.0U*q()15/  + "9)LA Og4 v;2 !:! '543!567654.'3#5>?'.'53"654'533#&#!#P(r^!+5#"#7!#.+c 8::>Q:6T949U6,5 "?b6H96.RS-'!4&'53#.#!5>5#"#7!#.#%&&+,F%D-  -L%"//"{84%L!7}}7! V.!5>=#"&=4&'5!32754&'5!#.#x:HSfk::hRL:::"9)"?=gYj66k=66W6'540!5>=#".=4&'53326?54&'53#&#)8E*.(()$3((&T5m# ,R++P!+}+)/"}1%#5.=4&'5!5326754&'5!!5>=z+g|::A<+'L:: 8:N#qiVj66k?Stt$66D5 "? 4%#5#".=4&'53353>?54&'53#5>=#<9((0%#. ('(('5]T3'R)+P!+\Z}*)33m(%4#"!5>54&'5!632!5>5hRL:: 8:HSfk::ؓ=665 "?=gYj66K@ 3.#".54632>32!327#"&54 *K/Vlsa<<6JzIvB/0NP)zh*Q+E3&zd08'76s1CW=7U|?e;D"",2!3267#".47.546323>.'"^MK3G!A5M(Q.=eo ,&- ̷cw72*EIN!+;'77(NGE,'@,6.54632>32!327#5.54%.#"a<<6JzIvB/0NP)zh&L2 *K/Vl08'76s1CW=7U|?e6Ctt"5+E3&zd /.'"72!3267#5.547.546323> ,&- MK3G!;2=MQ.=eo5E,'cw72xxLY3'!+;'77(NG;, a' '!I&VX#"'."#"#"&54632327>54.'#!5>54&'5!327>32V  ?0M1$  "4X7)52   0<2+ :; := k(N+%fP:^ *#-*T\F-<)4/O/,F( 7#>5!7JJ%B74&'533267>32#"'&#"#"&5463232654.##5>P((4 3 $@ohQ)D21!B-((X))m=&+< 5GOhs54&'5!#'7#5>54&+"t&4 3:: 8y&X:  (G )P866D5 'j"?}w~=n1#"#"&543232654&'5!#'7#5>541_ 0#&" $&((z&Y(ILp]/# /"))'k)0O22325!!5>54&'5!!54&'5!#"&546 & 8:::/::XQ+87 B5 "?6666^g( &1265##5>=4&'53354&'53#"&54632"%&&%&%VS)52;P%"//"%tb/"%jp<n/!54&'5!#'7#5>=!!5>54&'5!/:: 8z&Y: 8:::g66D5 'k"?5 "?66o-45"3545'7#526=##565Y*&$(!!)z&X%'It)!"'ts'#(+"'j!'*E/32754&'5!#"#7>3>=#"&=4&'5!hRL:: 8kQ> HSfk::=66D5 9H'4=gYj660326?54&'53#"#7>=#".=4&'53)$3('"Y,+(8E85'("*})(448{ 2m#2(R()ng' ##5>54&'533'7#5>5$:>#!>8 7z&Y; =&mL1/M7 5D5!'k#>nh,3#'7#5>5#"&'#5>54&'53((z&Y( ((&))'k)92p))/"=r a&4'I T&jj&j0 i j]a&'IH#"&'!654.#"'>32!3262sR{g*N=ahYZhĠ$QWe54&'5!* @L $7>Qj9!6G%"6"H9';5!v!#.+"#.+5>54&'b!,W(+,g((}8'4{844)OP'j bk'j*9#5354&'5!#.+"3#3>7"&5462326=!5>5kQQ!6 @L $70  -B." 96i5!G%66"  !.- ';v6!#.+"3#367"&5462326=!5>=#5354&'b!,WOO(. -B." (00(}8'f64 !.- 46H) O?%#"&5463232=4&/#5>?'.'5!7654&'53c_S+8 &uw4 ,'*@mF=2.0U*q()15/,Y\(  BHHA Og4w;2 !:(`&;!#"&54632326=4/3#5>?'.+53>54'53VS)52.=O(r^  +.  (3SKDjp<;P- G^{ #E)*xsi ;#!563654/#5>?'#53'.'5!7654&'53a()23_w4 ,'*@DF=2.0U*q()15/6+LA O6dg4w;2 !:9#3#5>54/3#5>?'#53'.+53>54'53g#[O(rk9  +.  (3H6" { 6X#E)*h#74>354&'5!!"&'"326 #:dBE%98 4rT9Zk 06'6"#=N6YIOGj*4%26=4!"#!"&54>354&'5!''"326*?2/536-Lcr #:dBE%9769Zk 3:3-!%*MRY\06'6"$6&V/K6O({U54Y%1<*=@U= 7*^ C)K[/A)CE%o+(('/536-Ra)48dQe`=9bQAD#)09 +$0S-!%*OS $VCDJ!9Q54&'5!326=4!"#"&54&+"t&4 3::%$/536-LdUP  (G )P866cA8:D-!%*_CGY}w~=d9#"#"&543232654&'5!32654'5#"&541_ 0#&" $&%7 (3@4DfILp]/# /")0?+^ C)ITBE!7!54&'5!32=4!"#"&=!!5>54&'5!/::# A/536-O\ 8:::g66d2C{-!%*ON5 "?666%#"&=##56545"354532654'5H7=^'K")&$(!4")2K\NJq*E)!"'ts'#($27*^ C +.#"32654!#"&546323273_2H.v"5E?T>;-jľ9p &27EmA*RmI. (gCg!!%%2654&'5#"&54632#".#"2==(\\Vi[,B0=KU>(0  Vt{bm% *$,$`NXk("&5#"#7!#.+326=4!"^K6.6" 4 >>4$&/536-M G_ "*)600?JHE-!%*aK#&'&+2654'5#"&5#"#7! *K.R2I7>\K, T6$(7*^ C)J]HFK)3||,-3#"327#"&54>7.546323273#&#"]hcS =,gEJj"1EBnS1i@6MG!U;/2a hW'>"LBO^̥K%3"327#"&547&546323273#&#"G0G==.MO JiSk{ZM'D ^*7`5*<)08= VH>fP4=.O7%#"&5463232554&+"#"&54632327>54&'5!R+8 &  (G3&4 3::(  B}w~=)P866&4!#"&54632326554+"#"&543232654&'5!XS)52_ 0#&" $&(iq<?'.'#"5463232>=4+5!7654&'515/()23_w4 ,'*@m@;%V";#W 0U*q()!:+LA O]:?(6[^3Pw;2 uC>54'533#5>54/3#5>?'.##"5463232=4&'5!  (3S#[O(r^89@ # /02+.0)*x" { $qW8#+$E '5@!563654/#"'!5>54&'5!27654&'53254&#"15/()23q>^'#;98-TS25()"`e!:+L7!!?6&J4A2 GMI' I32654&#"'567632>54'533#5>54/#"&'#5>54&#"E#6CC8#C?Q@P8T (3Q~#9hA + 8,N,gSWi,% MOI>  *u" WFT/'#BN&54>3!#.+"32673#.+;2673!567>=#"#52>7>7&#";5452RO( 6U @%  &> Qk\%-"$2(7| :K';?4M'C&6'8>"6 3Q$*(WJ=6*<5  ;#";54&3.#"3267#"&'#"#5>7>75.546;6326$):E(2 W *.Z010G$nGRd& J#2,0Sie#LT 5Z1oA2?[-09QVn`%  W.:09K [\"N4'T : ZF3>32#"'."#"#'323#'&'&+!5>54&'5!327$C*G&%Da58*X-1(*! :; := e)O'::BZ.G BJ"B7#>5!7<3>32#"'&#"#'#'&##5>54&'533267C / Dd%7@ !} 0((((*&2 (|S*7p ))))m*&O"&54632327>54&'5!>32#"&5463232654.#"!5>54&+"b&4 3::*&K#"#"&543232654&'5!>32#"&5463232654#"#5>541_ 0#&" $&('1+0Dj`#;2%,c ((ILp]/# /")0 Kg;s =!!5>54&'5!!54&'5!>32#"&54632&M*X8#- 8: 8:::/::);/6Z81oL#;2B{S5 "?5 "?6666,!=`r8Tp <&G74&'53354&'53>32#"&5463232654#"#5>=##5>P((((&0+0Dj`#;2%,c!((((X))mm)). Kg;s 54632!5>54&|aK< X:G&<;{a':;Gxgd )##678}tI/&7,e"-%!5>=#"&5463232#".#'54&#"3 ;<ee{H X:G&Ka.FKJ76saZx} )## dgi=T` L-%4&#"!5>5463232#".+!5>Ka-G;:'a{H X:G&:;<m@dge,7&/It} )##7-32654&'5!#"&54&'5!!2#".#Ka-G;:'a{;<< X:G&dge,7&/It}876q )##(%37367#"&546 !2#".#!#%2>54&#"4Z] 0M]]M< X:G&Z4M'nIX_`\)0K{x}1`JC0#  )##*,ED"hsTR%34&'5!!2#".#!!2#".#p!@)?#1 X:G& X:G&)7 7c )##z )##2#4632!5>54&#"!2#".#!2{a':;G-aK< X:G&l}tI/&7,egds )##*3.#"!5>54632#".'#"546326@54&'5!632!5>54&#"$>?"!@)?#:[a':;G-aK7! 87 7V tI/&7,eg7!2#".#!4&'5! X:G&!@)?#  )##)7 7/374&'5!332>54&'5!#".5#!5>p!@)?#,S);:'0X?5J-N$>?"m7 7o3x!DQ;7&/?bQ+ 7`gL7!  :4.#"32>"&5467#".546323!2#".+*=3=X--W<2M/ ۋVN^ X:G& X:G&kMW#Gj9" 1TZ32YU2"5JGe# )## )##$h(32754&'5!!5>=#"&=4&'5!hRL:: 8:HSfk::C=k665 "?I=gY66  7!#'!'73!% u7>"f=KWZ(| .727&#"7654&#"46 #".'#"&54632cQDn$$TnIQ]s"+G  >/HLSG| NM2.|rhsqNx}z2 )/&)?+CIP#4&#"!5>5463232#".+Ka-G;:'a{H X:G&dge,7&/It}{ )##($-%#&'#"&547&'5>32#"&#"&'32LClGekeeAT! W%Uv83l:H8  MQ?l)7R2^,G<Mk}/7N+"#"&54&'5!32654&'532#".k{;<JYAM< X:G&v/j}876chtW@6 )##(L?4;2>54&#"#7332632#".543232654&+"#"&(*%:="R6' z)aQH6`>..+A4HZie.Aj ;,8@RNn%&V5Yr"05$ $%Q@Ia: K#%32654&'5!#"&5#".54632;jKa-G;:'a{H X:G&dge,7&/It}w )##3"32>?#"&54>32&#"#"&54632&e=X--W<-H.!sBeq2(-a!DY)T^R =81TZ32YU2,??$GyL**:'7M!2!5>54&#"!5>546k{;<JYAM<;}76@chtW678j"%732>54.#">32# GJ1=X--W<-H.!sǡ ii! 1TZ32YU2,??$5463 !5>54''7;<`AW>Kr76@ED{^)(8%654&#"32>54&#"&546 !2#".#!#536?nIX_R(8H Wi0M]]M< X:G&ZZ?}rhsT9(8( ,dWx}1`JC0#  )##*)`/232#".+!5>54&#"!5>546k{H X:G&:;<JYAM<;} )##76@chtW678j!"&54&'5!32654&'5!d{;<JYAM<;}876chtW@67jB,%32#".+5#"&=4&'5!3274&'5!9W X:G&HSfk::hRL::  )##=gY66=<66(*".'732654.546323273#.#"=Z3 sA566B^]BgF*b c<.:EbbE|4.54632!5>54&#"<;{a':;G-aKm678}tI/&7,egdB1=4632#".543232654&#"#"&543&2654&#"w{W^~QH6`>..+A4HZie&5AUB6A3);7B^QOn%&V5Yr"05$ $%Q@Ia:%%P<:>F2?M;(74&'5!6323#".#"!5>p!@)?#K15=*(/B*$>?"m7 7W*<<*!+3+7! Y  =2654&#"".54632;54632#"'!2#".+!5>=JKF.aKQ X:G&{eeh- X:G&<;`T=igd;T )##}xZasL )##67 !"&546324.#"32>_G+:71N- ,W<=Y-VHpD,*?VO)3bb<54&*,G%)\?#,.K),6hI8.+9, ,QLCdXa !-?S 7$4"Uv"04% %()^1"I/<>> P4CGPwPx ( 3#5467> ?/% >0$!#&.&!#&. 732654#"#>32#"&'TF^b8:087&.aDY,$* #"&54632#";2/BC/1''&%624&'5332754&'5332>54&'53327'5#"'#"5S( +B++B:(HD>0=/ i$K/TT8.%#5>=4#"!!#5>54&#"567>32%&I*$ 8,J@3;#7?%"/2a" k/'%O0!OG8 (732>=4#"?33##5>=#"&54632n>1&.]@J6 kk)5$DYFZ^6+PC% dg_ W |  *Jx_l8.567>323##5>54#"#5>=4&#"J@3;#7?kk%&I*$&&O0!OG w%"/a"+%24&#"567!!32>=4&'53;'5#"&5S[8* '/"^0   7B= -&%#L  G;8$73#5>=#"&546323276=4#"h6 )5$DYFZ^6>12$]@J  *Jx_l+PC "dg4&#"567!!32#".+S[8{ X:G&= ^ )##8$4&#"567>32#5>=4#"!!OJ@3;#7?%&I*$R%O0!OG%"/a" 8.7%3##"&546;.#"#5>54&#"567632#"3247 cM/DC0jC6#C 8, ?Q@PI^Vj%.1%b YqD/0GR`,G/'# MOx]*1&%1 ##"3265#"&546;54&#"5673Rf9DL>&3THSfzVi[8kcT\o+FXw`jq 8*#5>54&#"5767>32#5>=4#",+ D/#D,{)+K3WG45 -'4 3j84&#"57[ ):!7.8=567332>=4&'533'5#"&=4&+#5>54&#"c<* '/%N; "7B(1<0/ o-&%&S  G;#)(# !"3254'3#"&546;&'73235AN@x$W'}c]}zZXIF<:>/wVFjiKFM~deu dRQC8)#5>=#"&54&'5332>=4&'530/ "7B$* '/t)(  G;#-&%*#5>54&#"5767>32#5>=4#",+ D/#D,{)+K3W45 -'4 3j )%54#"3263'5#".546?'7V`FA=-,;VJ`8SX,9NpWWdx 9`cvL,P?$uhX$S%1F`8\ +d<`8&4#"#5>=4&#"567>323#SI*$&&J@3;#7?$94a"+%O0!OGS&+5#"&#";'5#".547467>32326=4- 11* 8SX,9N>`iKN*'qs,;G '>S%1F`8B*y$(74&#"3'5#"&=4&'5332>=4.54632 / %N; "7B$* '5/2O?$9"F0&S  G;#-&*68.'F"%&567#"&5463232654M-PLVS)527jp<>M{<26"32>=4&'53;'5#"&=467.546;#"3+* '$#N;=!7B%;;%UX-<.&=[-&%#IG;<; 0$.50!383 &54>54&#"'67632V}8OO8:<21 1oKWEREz  '(8KyIDT5MI_mO9bY*567>32#5>=4#"#5>=4&#"J@3;#7?%&I*$&&O0!OG%"/a"+%8$3 &54>54.54>73$33$?K?V}N_N3=3!%C  %3MPr2  '\X_9&& &8 1"'#"=4&'5332754&'5332>54&'53#5>=ONUt( +B++B:(0/= TT>0=/ i)(V8.7654&#"'4.54>323 &54>@:<:I'88'!9C9)R9KWEREV}%44%(VmDT-2<,% 5)&CA&mO9bY  '$F)!>54&#"#5>=4&#"567>323%0'*$&&J@3;#9KGR}.01"+%O0!QEg %%'5#"&=4&'5332>=4&'533N;>!7B$* '/"2LG;#-&%#8%3##"&=4&'5332>54&#"#567S;!7B$* 'c< G;#-&#=4ȷ>32#5>=4#"3'5#"&=4&'5332>5SM+47"7?%&I)$2F- )7B$* 'P'H1!OG%"/a"&H- G;#-&8*%#5>=4#"#5>54&#"567>32&&I*$&&J@3;#7?C+a"+%O0!OG& /73276=4#"".54632326=#"&5463273o>12$]@JZ2)+9DYFZ^6=6 0\+PC "dgCHmJx_l$ 7'GD(34&#"57Z ):N!7.8B%#"&=4&'5332>54&#"5767>32#5>=4#"#5>5S, )7B$* ' D/47"7?%&I)$,+@, G;#-& 1!OG%"/a"B458 232654&#"'567632#"&'!!#5>5#534&#"E#6CC8#C?Q@PI^yY +#=.5432654'%'*=9":(fU.5(*? Uu,+*K0#.++vvxK53<L "CWE0  3[jS45Y',- )*) _6.732>=4&#"57#5#"&54&#"567* ' ):   7B[8|-&!7.E  G;Q%232673#"&54>65 ?.:6 %8$.C5 E 546;2+"=4&"+"=4   w5 5''''1 O'T'T>Ty/'&54;'&54;'&54;2++++".E# 9A <;I ,5@A=    - +  %  ,     ^O'T T _O'Xw'T&T<".'42! #*(.Q0 #1=w%c .'>7%))) *+ -.a1)&#"32#"&463232654&#"&54632#"'  -,!M   -,!  +>%E   + $<o1l632#"/&47 wr ; 20 J zWOza2"5>_(*#a=1# 0Q.a7a&7 7us&;D(;s ("2654&#"&#"#"/&54?654&54632" . <32#$.R!""1&/' )% 2/LT326=4;2++"=4;2" ;  $/"0,ZX-;546;2+"&=463   l    45mz 7lQ 6&@9@p+"=4;'&=4;2+a | [W | ZZGo1las ("2654&4632#"/&#"#"& . "i.$#23R""!1#/2 %) '/M,)I?M0H>u9113H"264&2"&4>( ( YJ11J1& ( (B1J11J#&OO c"~&Oa&O&Oc&OOR#[&O@&O@ FR33@.[&S &O@ O@{"5462! ! N&O3 O $W&O&O< O }_53ȃ44\ 53##"547U! }44&GE-Sx .4632}x  zd` h'OMY&OO #9$"&4632 &  +#5344ՠJ_l73J88_KKy_R43#3444o .4632o  8o\qI+i %.'67.'>7+.  C$*+$  ($  / % C%'U'% !,o\?u[ 2#"&546,-*V/V "&#"3#4&5&54746;27>5$7+%8 ' !%lSbn P-  25#r #"&54654+"&=46;2+"*&,  ,& & % ! ! H[64&547.546;237".54632#"'./2+".'.##>32>G%? & aX3'(,1:18 1$32#/|W%(/(s %3H3$< "dBG/6 (2(=/M*4H#>*(A'cC(:.=  V"&547;23!7!4&#s((0G6#C#r10!67=Pll.'(V8"&547"&".'.5##54?>5>54'54&#" 7;    >vx  ' .B   /2E  3)ew )T 3!2++'"5465!"&545;$  1&T!' < )(8V83!2+#"'"5465!"54#'"#"54654&54>324;*  Z4 V!A .V1M;$2 0 )G# d0V&2+".554&#"#"&5467323261 .!!  3&( M E5#8 7 V7"&547#"&54654&54>7"#"&547     17 t  !'.% ! + ?/W*6( '&V$".567"&5473!2+#"&5!i-' ;+ 3230-1 Ac -7VF!654&#""546763632!65654&54>7".54674&#F^/T='$X  ,B% p+3+ P C( K8$)1*#Y0FBRD9"/ 1 4g#/J$40!9:=Aw"&546732632#4>54&#"v " "# )$6 )%4)43!2+#"'".5!"546> E*&  V4&&8FZ.,E6V$"547;2#!7!2654&=4&#eF%1+=$B3=W569'EUJSl,8 1-E.J422!2#"54>54'.#%"547>54&54h # 2+;  L[L 4 7*A"27+8 IGU j " V"2!>;"!4&#"#!"&4673!:>  "~/(%36>SN 5D((45 WI%!267!754&#"".=4&5467.5467327>3(@u_,H)  %.( H >P'  Hjy[u&7B4 b#B  ]6'"/   /"&@A.T=:4#"&547+"5>54#"z#$U " 3,0!0!9 <C%J 8/V "&547;2#7354&#"$! ' 8%+7$#52  -P nbSl %V3;232>54&#!7&547;2+".=4;&?! +A+!/[S#1^Q "I:[E?uH?&=4$ . !<6+F` XH2>57.4>?#"&547324.#267>54&#"&5467&P SS   !3K   '!$$4*K  P >1"'$N K' .'U235 ' =  337"'.54>?.547;2#"54654&+"#32632N#<!KA  : !/2, $C #M fP &%V87"'.54>5.547;2!7!'.'.+"#32632M #<-A"!_#1& *9 "+ 2( $B#'7VC,dl(5$$ 5)!4J.#"##"&574654.5467>7>7.5467C/(1( 9 #-%(=  i0,&Eĉ 7  /$]> &,-/  . VA4'!67!4'.54654&+"&54677&546q!)!1( L0:G:4!$ '*V &!,#   .%2S ## D,#3  N<M.345N%4.+".'&547;2#"5467>"4654&=4>32(0.  -6" *G<!lB4!"   >F$  2AGB  /&# ! J&(dJ\xq0 (%+V2#"&544&+"&5473P0J  :-* 38D^=82 U7!0<Vi467324&#65"&546732&#3>54&'.5467!4&5.54>?"  * k"  |*@  75* 8: $  !+3!?  #%b  6  *1Y ' -8  VB;2#"&54&#"#!+&54632.547"&54G8#&G  / V   S a !":$2#C5$%*,h?1%9V%M2+".554&#"#"&546732326!2+".54&#"#"&5467323260 +$!  0 ('!   3'1M E7": ((N E:#8  !V <2#".554&#"#"&54673"&546732632#7654&#"1 -""   "!# *3(+1lWP E5"9 v%5 *$2'Aw6"&546732632#7654&#"!"&546732632#4654&#"] " "$ ) " "# ($6 )"2($6 *$/2))2#"5467>GL @ $fFz$-Z2#"5467>32#"5467>GM @GM A $gF{# $fF|#c7"&54767632 9#,62"  8<!R7 ,-6 7"&5472+"54&3mE# : 5F8,^E.  IIDFED!,4632"&54654&#"#.'&#"&4632C7C5"!'@#.2CF.$ & #>. Q;#?F,.UI%"&#"32>767.54672(1# L+6' D0@8F6 4u<0 $$5Z<( e&T"6I#W# o(#54'7 *.qUY~A'7%4&'7!"&547444N A287F 4*665RF@)S*7M~ h%% | #'#".54>7'32654&7'7'7HG- 1$$EA*4#?_777f877lP'$1 &7&< &P. d7777777{'7'7!"&547!4&'ACCACC?K56D )vBBCCBBC'P )5Lx%T# PD "'7'?'74.'7!"&547@CC@CCABBWA777F 3*WBBCCBBC7CCB8@N?)R*7K~c)&zm1)-237#"327#"&54>7.#">'7J pY|tN(N6n%Qvx.K%<2 !"55441 >7PgV%$A=%,.5r`HfF  !o553zl1(237"327#"&54>7.#">J pY~uM(N6n%nzQvx.K%<2 !"51 >6QfV&$A=%,.6RHfF  !Wp ,0237#"327#".54>7.#">7'7' pY|tN(N6n%9E7%Qvx.K%<2 !"5r,++5 >7PgV%$A=%,.6 -M0HfF  !,,+rl%&'&'&'7+"=7~ 05"87 Nc O )8hCN`&rD'7&'&'&'7+"=7/977 1 4!76  997 a N (7gBM_&Y%76?>54'E 16hSEF$EOH H 1 dcR&-WY%76?>54'7'7E 16hSEF$;8;;EOH H 1 dcR&-W885|8%254'7#"&'#"#".5473267654'732=7s4(-&% #$:1-?Y"2@(R CRm? *! k( $JZ$e44$ "-E&!  <*@e9FH*-MC1H8@D8%|8<@D%254'7#"&'#"#".5473267654'732=7'7''7'7s4(-&% #$:1-?Y"1@(R CRm? *! k( $/11"/11$/11JZ$e44$ "-E&! =*@e9FH*-MC1H8@D8%---:..,---! %.2##"567>54'7764#"232@$&W\%FS8QkA\-?",x54'7764#"2636'7@$& G]%FS8QkA\-?",x73.>>W#qS5D L b. 7kD#Iioh:54K*=m*8%Q"CK{HL.A$8]8$(467&'54763&#"32>73.'7>>W#A8K5D L b. 7kD#Iioh:01154K*@91*8%Q"CK{HL.A$8G000+3$-1%4632#%.'6723263265.73274&''7P:/*HV+""21!!4$7%e$U*/122:~{B\/K6LN$"  p =1`223/;'7'7#.54733>54&#""5467'"2654.777f877G[;R+3 >tZ/5C# _<)76pRj7777777N,8 $#2$`zaF,8, .3&xb0l#y5+#%".5473!4&/&'&546?%#8QP8*'5#Ob=>= "4[~W <\qMe M7C@-(MD@BA4 $?0oAJ.2[-y2%'72>5&'7#"&547;::W[N&(: \Bki)777'M; `Gt"a"jg\aJ:+:8l".54>7'32654&HG 6,1$$EA*4#?lP'2  &7&< &P. dI74632+5>7654'#&7.#"@5Kj3t5!Y*"c*-gBUUaA 2 "7$G42f( | (,02&#"32632#".547$7&#"546'7'7!!"]P ?NjRv<S 4h^..ceACCACC  V)g#;>"ksbS]8ABBC"BBC6fC7>7>; $ ; $& J   T J   ,8 7>?>; - ; - J   a J   6C7>; $& J   3%'#67. 546324&#"6 2"]G5  3"  '* @$'I "2)   ,8 7>; - J   Xl#"'#"&5473326732654'7 !  $+ #-   25a#"546732654's!( 5 )a9"#I"  e23267#"&#">6 "(/7: 1@9#0R$77E(NeNGvrPKG%'7Kojj|}zNT ".'O-6&TL}5dl2>7#"'#".'7,! ",K3    5)<00 & &aE~J|6^D$ep.32>3232>5>32&'#"'#"&54654&'/#$  M< ' &@p> ' #1x-&_r!$k%G|I*2632+#"'.'732>32#&#"a%'DUD !A.! 1!D #= ->kգ_/))" &!.=("&54>7'7#"'32>3232>54&;(WT4+,:;:<3Ea7  $%D IG3v9@Fql:Ia<5b0Q + 2O2'2>7#"5467.54632#"&#" L9TC[?.B w7#2 /.C'g $- .L 2! B!/>77#"&54/q>aW#v[Z~0](8a  '67:6C$&ClWdGaV Ml#.5#"&54>32327.#""'k"&5463267O'#  + 8'90+NeN"&#"32>767.54672   !1e%,)$- " !L$"#:'%rB#'7%4.'7!"&547'?'7455 B,79G 4*4555557743C' @(U+7O}e*&7749774zm1)-15237#"327#"&54>7.#">'7'7'7J pY|tN(N6n%Qvx.K%<2 !"5u>??>??>??1 >7PgV%$A=%,.5r`HfF  !w??==??===>k+ %'7''7'77> 7654'k455466455 16h  %!221G220221EOH H ),9!65-Wy-1#!".5473!654/&'&546?'6%#8QP8*3"Ob}= "4[~TW <[qN22#K4C@-'MD yA4 "ksbS]8AZT767&Z && &&&% %& fi#"&54632>72($%0WOX# Nr^%.;'o#2632##"&54>23>7&54632@P * 1'7>-+ ( 2+ %87 & @ S" ) +Ag/'"546;26765.54632326232632#"&#"F6 1"  -* >  j6$!'^+. ]   *9 $A#%Lp(+%"543>7&5463>3*.AE4%.H)SH"3 ڤ$+B4 -  +  ^a'22#"&5467>4#">7>67&v2*pGNWA"15U1  &+6 a1@}0=,RM@G  $ K f+232632"54632326767654#"5460$/   k/ } E,f$  (> A>T|k)267>232#"&54>54'>+\P 5& \(_*F  . $   8X72>32#"'4654#"#"5460'aLV=)C x$(AMA% # hvO!V#2#"5463232767&546"32654T),V<60E:_<=SV (,9, /).Y;. 4,f "#".54>72#"&'46;2>5&:,.."#7.54>763##"&54>?.  ;   0   /**;'9. $C         %&u }>%2654.54327>32#"'#"&546323:>767&'632`4" )  G>;:  R& -+      2E7"  2+,*V1=7#".'54>322674.54>32#"&'"7274.'"YZ   $-T?#$1#*8 4j!  &g"9  RO,* '/4 _ o/#"54>32>7>7#&5767>321B:V21    5 !A(##&6n/ k  $   ^m'746722674&'467+"&! F'*L h ,,   08   +"`N%'"&57>75.5>7237>23>32"#".'#"327>;2*$[  0 $)  $  v Qq99! 7B, "   $  H `; ha(7".54>7".'>32!67>32#K    #! K }*#2   &HLv0e4632#"&54>7.w{"" 37 z7M e)Q"  M)  8 *1  m22>72#"&'32632#".5467&546t" + =I U/0I&x3=O1Ni &A <   V)(6'/C92z6?K#'32>72#"&5467.5467>724#"7>32674#"IbR&X9UDB\#]J,1  ?>  '$ R&5 )0& "=$.8 (  :6#(@ '?     =$ # [54632>;2#"&54>767"#"&'>32>765&!,.; 77 b-X  $h %+ $  : $$IK    ; I%"&54632'4>7.54>763##"&54>?.    ;   0    L $Cz7"$           N' (eU4632##"'3272672#".5467>3232654.#".4&4&4q  <7'Ai-263254&54>7>"3674 gy @/*'4 (*(# ! 1:a!+0F 5\    >$#)*CSq !  NZ4632"&'".546322"&46#".=463226?4.54>7632#".'"7274&#"s% ^ %"Y[   !'O5>@## :840j"#k &H%&"8    &>#-**B 4 _! fi %"&546327#"&54>72>72  ($JT:S%w $ r^2$; ] 4632"&#"&5432>726 &W'&N=5J*F% % kq^2.1  R2"&462674.'4>727>72#"'".546323267&'632a"1      G>;g  % -"     2EbP   ]*, ( 5"&54632"543>7&5463>3*.K  0E4%.H)SH"3 &Ĥ$+B4 -  +   h G"&54632'".46324632"&".54>7"&'6322!27>32#   Z   % K  ;   $ K }*J%W%@ % #2   7 HL Oha*37".54>7".'6322!27>32#2"&46K  =   $ K }* %#2  7 HL>%w*2"&46.'4632!>7>72"#!.'> %*/    E 5&  '!B  $W1  -V0<F7#".'54>32274.54>32#"&'"7274.'"4632"&YZ   L T?#$1#*8 4j!  &  & g"9 ) RO,* '/4 _  %!0<F7#".'54>32274.54>32#"&'"7274.'"7"&54632YZ   M T?#$1#*8 4j!  &   g"9 ) RO,* '/4 _ $ X&72>32#"'4654#"#"5464632#"0'aLV=)C x$(  %AMA% # hvO!O%8&72>32#"'4654#"#"546"&546320'aLV=)C x$(Z  AMA% # hvO! &^ '1;746722674&'467+"&4632"&'4632"&! F&*L h ,,O & r &    08   +"d &  &  *5".546322#"543232767&546"32654O), #, *5/%P:^== Q$ J (  `,&  7(.Y;. +#.=467>7632      h =#&5&54>7632463>7632#&5-G  #* G4>[!)2"54>7>^"-a!*<6 `V%(*(2#"54>76"&5476722 % p  0M , #   `4S   ,"4>32#"&'4>7&#"#*.F8+>i9T8EC F& 8o#/"  2a7>32#"&54>54#"""%4632#".54>764.#"#"Z7+9a) gg(  +P=DTl !A!6-'#' 064SA  $ 272#".546721D(.-( a9A  *6p -'!ZO0#"546?632;263226;2#"57>72>*8C B  , |p 34MB( a  3BmP bG-"5432>3232#".5#"54>?"B4F4 # .O:D .,&%=& +&" )\ /  $i "cu4>2"&5654&#"32632#"&hjEy \D; ( N$*>i3X6.EX D1?+'#)A   4632#"7"32654u?+4{4d(6FbD[0*A[@ 8#]'7'2#"54654&#"#4>888(5/ 12] "$;[8880/$3"FK >C1S'".5232654&5432888l0[;$" ]21 /58881C> KF"3$/0$'888$888t7''SRTSSRTSSTSSTZ';b_23676=#".'!2+"&=##".'43232>74&#"+"&'&'41'432654#"#"&54632W MM C 3>@S;K>2mM4 .4) 2/ Qp9QV3(Uz U  '%"? :&;PJaU J5'( $  e# !> o238bb23>=*"#"&'!+.5#"&=##".'43232>74&#"#".5432654#"#"&54632W -y% >`>>d@S;K>2mM4 .4) 2// Qp9)Q43(Uz U (?? : :&;PJaU J5'( $%!e# > o23PbF463235#"&'!2+"&#"2632"/.'#".5463232>7"#"&KIQ&9@ [E>g Be++4  -8%@#,'0 hBa|0%E=<*b1"; +^* 6$$-!fPW]463235#"&'!.54632#".#"32+"&#"2632"/.'#".5463232>7"#"&KIQ&9O X3)"U5*&3/? [E>g Be++4  -8%@#,'0 hBa|0%E= _,(549 4",<*b1"; +]+ 6$$-!f|bH4&#*#!"&'!2#"&+#"&'.'47632326=4&#*+"#"&54;26p &9C#=  %)#4BL] 3  ;* 32#"&54?654&#"#".'.'43232654'&+"&'&'3CO   F ?)%,     H1 @)%,  E91^D83EC$Y 6 ;)$ +;.ERD 6SIM9#  bb25!"#"&'!32#!7&5>32"&#"32632#"&54632'"&=#"&5467.#"#"#.54>=c9 = ?ϵ U(T $8 =*V{W.]W$ A,=$X"$4<'E13?? % Ms"85<  q+.HP; G > |  = cbl>35!"#"&'!2#*#!;2>32".54>54&#"#"&54654&#"'"'&546323 dIW <3='0'&7:/ ' 23(G,*<=*5Q( AT#*5$'A L7),O!J 7.)R2FYo.:s#:CZ';cA2654'%.=.'!2632#*1##"&5436=##"&'&5432# O47x >9#>W 14/!#:)635;B =5@  c  #E/7&<8p":8Z';W8~}2+.5#"&=##".'43232>74&#"+"&'&'&5432654#"#"&46322367>504=#"#"&'!&'&#"&54323@ >d@S;K>2mM4 .4) 2/ Qp9QV3(Uz  XBC >\ S>Y[6m" b<: :&;PJaU J5'( $  d" !>o23   % ?1?7"m9 8+.5#"&=##".'43232>74&#"#"&'&'41'432654#"#"&5463223676=#".'!.'".54324&'./.5432328>d@S;K>2mM4"#8# 2/ Qp9)R33"Uz  XB C 3Y&H#\A ++& 7 vY=: :&;PJaU):;)( $  e# > o23   %%"2A`L([  : ^Y<b9H25#"&'!2#!632#"'.547654&#"".=#"&54>2654&#":/&9=Z&C 4,W"%,P)<3325!&/&2654&=4#"33 =E <=@Y%6,F89<XVF Nz6I7?>#6+6(c443246=4&=.'&#*#"+.'!2632#*1#.5##"&7   7 ;>+2,d47 )u ;C : jNYc"D.54654'&'!2632#*1#.=#"&54327>=+"32632#"Y/+ ;>BXQ}O(if  #5 (  )3D#)=) C =.}96 \   %+c@D463235!"#"&'!2632#*#!"&#"2632#".'4323267"#"&%'cJGS<> XG> [FaoR;nG-&sEhiD`878{1&E?@ +b/;I:TM-R8?e)777c.;.=#"&547#".543!:325!#.'!2632#*1#"326=#?H9!2&<iw<$#>@ >',ib%.54635!"#"&'!32#!#"&54?> 54.'#"&54654/&5463:32#"&#&#"32>7632"32>72>54&5"&#" &n9-U=n > W +\  >     It dc:,; #1EP?6& Vi U96*8$+ v9+-*A'= $;& Ub;72654&/.5!5!"&'!2#*1#.=##".'432"+  3,<%=>](/UbZ  `3(A s>? < dT&9*OU  Z_ibG\463235#"&'!2#*1#"&="#"/.'#".5463232>7"#"&26=#"&#"263232KIQ&99=A>C# *)5  -8%@#,'0 hBa [E>)I$3Z|0%E=? :$ != *\- 6$$-!f *cF2>75!#.'!2632#*1#"&=#"'#"&54322654&#"#"&'&5432G,(-9>AD0) *{ 3 2A & ($a*0 >@ ;"2K!rL' #aI!  6Ac='4>35#*#"&'&'!2632#*#!#"32>7632#".7Z[/  a ? -YU58J!,-  l`=oH*0E#s  A #D,"   "60HOc(;'4>325#"#"'&'!2632#*#!#".%4&'"&#32>:tO  1a ?[zZ:nJ-$" r"::W(63s(A p2BY/FQ 6WH$ %6,+cA463235!"#"&'!2632#*1#"&#"2632#".54323267"#"&cJGS<w > XG> [FaoR3`C3&sEhiD`{1&E?B +b/;I,AH7 -R8?eb1<4>;5!"#"&'!2#"&+#"&54632#".2>54'#JWBH =N&;  ECYJ#8^(X./mQe! ?;'p.> $(C : #7":]3fU>!*&b046;5!"./!2+.5#"#"&'&4C)x2 >$2 3 8  I#2Oo&<"'&S7  r%[c=K4327.54632#326=#"&'!30212#*1#.=#".74&#"2326 '943( +]H Qt;M%&?-O9mD) #%\*C($-rKAR  o=@4 <u';NE )sbP463235#"&'!32#*1##*#"&#"&+"32634632#"#"&/4&#"#"#".XZN':; ?" XW  51&%4 4 9   :iD(V?/Q:@ .>. ,62'#I+3MXcD7"&547&54632"32632#"327>=#"&'!30212#*1#.=Q}2Z3=-. '  )3D#(if ;M%&>B}96L<*(@+! % \ @4 =.c'46;!5!"#"&'!2632#*1#.=##"& %  =x >>%$b6&?B :("_c"1"b+%"&5<547.'!32#*1#.='26=+"T'T =?!k8T   / @ ; O9YLN;b7E.=#"'.5<547.'!2#!632#"'.54>54'4&#"'26=+"?$C82>' ?Y$B"0 (/!7U&; 5*W  / @ l {K[w  4 Gh-  3!8Y#{ b#4=25!"#"'&'!32#*1#.=#"&54632654'&#"327TH 1Z =>4]cMS '%#G &''@(? =DC8JZw;'   %B" c44&'"&'235#"&'!30212#*1#".=##"&546;u(#<aP ;M%&$$#_4-?Y$81D@4 /8  ]%c#'46;5#"&'!2632#*1#".=##"&735#4< ;$%$_?C /8]Pc(=4&+"&'!2632#*1#.=#"&'&56263>26=## G; ;?2GU&'8 5Qt-V> ?C <u({Z #0%o=5:>T  fb232>7#"&5!32#*#!".'.U%8/ > 1"@DA- "R,D$ (Z6>> 'JH-(L81, F.NAQfb"1':bD4632327>35!"#"&'!2#*1#.=#"&=4654#".?&XF#l:W < = N$/ ..#ql<80F #o?? < D? #(&+Q:0) owb)8P>35!"&'!2#!#"&'#"&54632'"32>?4&2>54&#"L R)d%8O? !odI;u8T@M?+-5u7N! ?*!L(>#&5!>'&  +#A=?   \\E^FdYF\ +ZA2$);: &/# (*(/F wb#1L*b#725!"#"'&'!32#*1#.=#"&546"32654.'&TH 1Z =>4]c/<(   C[$@(? =DC8JO 6% A@cQ"32654&5.'&#"&'.546322>7#"&5467#"#"&'!2632#*1#.5##6.  F  j&1 ! -22H2#( =x >>;c_M ^S:#%) <' 1 ! &N;4]@0/?B :( _]p5#b,%"&5<547.'!32#*1#.=532>7T'T =?!"("  / @ ; X<&j b*62>7#"&'!2+.=#"'#".26=# - T<> ?A#Gc -RT WbN3u/%Y=?? :%-5za[&  ]0 /bO46;5#"#"'&'!32#*+#*+"32632#"&54>7&#"&'.547.m3 1N =3 '[;>"%:Tv,#I#* 2_U#0%@(@ 9q2'H> 1'E7'$"  7-R4./.54>76;2;2#"&#"&+"#"&'4'432%9    " ~`5BV#4)E  > ("1* &.o7' =57" -j5*> t@K|c.5"&'!:32;#*1#}>;0  >&: ?? ~0.5"&'3=4632.#"3:32#"&+}>;U8H3F* X>/K &: ? 7:2) 0 +),3V !|~).5"&'3.'&#"#"&54632;2#"&+}>;S 6<2R ?aJT/@  &: ?({9* :-bn = MC%'4632#".'&54332654&#"+"&D4jG-HZa& !)7X5:22' ( 'b82*+Y=(55%5 ' +:BX%'4632#".#"32632#"&4).t^D (19M(&21  +&=y #)G`T-@@-&  (  qbNC4>32#"32632#"&'<8( IdN&5#C]& , .% * jbD<467&54>32632#0"#"32>32#"&#"32>72#"& 47@ ' Bg)(#/ (N#((X&=& +$E$Rv 4*% ! & , #() cps".523>54&54320[;$$ ]21.51C>!KC 3$/0eZ#4&#"#"&5332632FS*PARJ*Q#."e&3 SS'D 8a~#".'"&#"&'2 %0@i> <xVi(:;->qa"#"'&'"&#"&'2.'"#".'&56323  =agUB *c/e d:8:N< " x|s#:h3|Z';3|~(.5"&'3.'+"&56;2;2#"&+}>;S!9S;>U[6m" @  &: ?-9;#?7"m9<|224&'./.543232#*+.5"&'3.'"&#"&54\A ++& 6 vY= >;P&H ?)`L([  : ^Y<: ?2A= / .'"&52 %B*'<>b .5!+>>&: -? k!'#"&'&'32>=4&5432>32#"'&54>7654#"#".543232654./&#"#"&54>7654&#"#"&54>32{878'N>^;3c#&;$$0 IV28c<"#$  P#878^2_sb 9"1*3)6$0C@ # -*(  ,67 /50A<  ?+  A$ >  3C<4; #&54632 #%p!5!p}2l#'&5432[("ap#7632(#Ŕ pos&:Fb&1 Eb6CG>5#"&'!2+.=#"&54>325!#".26=4#"' . S=>?Y%6,F8>: FS QZGz6H7><\9!0 1 g}/xq[6+6(878c&16Ub'1c&1bUb'1ke;b&1"c&1&,b25!"#"&'!32#!7&5>32.#"32632#"&1"32>32#".5465.54632&'""&=#"&54>?>7.#"#"&'&54>76>c8 = ?ϵ U(- %> / _!:>   822?? % Ms" "@ ! &  )95++)90; I > ccb>35!"#"&'!2#*#!;2>32#"'";2676;2#"&54>54'&54>54&#"#"&54654&#"'"'&546323 dIW <3='0'&7:/ ' 2H! !9 ,7 +)#20"- .' > 7.)R2FYo.:2 JC2>32#"&54654#"#"&5474&#""&5463232>320 )/0C2 !# + #5 >.1(&3TT9 * P=)   %7"T$Ef2.JU"32632#"&=465'&54654#"#"&'4654#"#"&54>3232>322>2& # )- 4L 2"4 *0+>/#''2T0   + \=)!  &>& U$'*e1:  ga 2.=54l >=aB < a 2.=5432.=54 >= >=a?< B < gk 4>32#"&2>54&#""3+G#3+G&: ' 3A)>I)>@"1+$!( '.$b,9&'>?67&'.'&54?67.546322654#"'&Z? V$iM =x?60  $/r-" ,#' aC N n5KF`)JK4) %2"00S"3'i98#"&'.'&#"#"&54632;2>54&'&#"#.54632F, 6d1 O'>D2)'/1U=pXgKj671N+J+ = e+izEH%#".'&#"#"&546323654&+"&543:;2>5&+".54;2z   9DGD ,"N<)p? s)4 , m4!M CbZfQ2S&= +'##'>*7 MK:a!174>7.542?632#.>54.53#" cF  @*R.63oe%S 5% b: > TP&9q%  GJ `>'46733267#"&'&=4323267>?432+".'#"&F.  ] > &P  > @..*0b=V(C[-)@@=B}=c9"$2> kA+8<7HiiS%"&547.54>3:32"&#"32632#"3267654&543#"&'.'"H%P%>9 ") , oU   !==49*:('G 1 2 'I3+ `,&5  G0 = S*%  #B" Bj0 W;a&94323267"&54632#".'4&"32654&5.'& ; +"--)b$RJ-I|Z.@?B5(?6 #R [; R`? $0?G@7wm %8_wfD*,0 F*!2#!"32632#"&54>7"#"&547654.'= ? !r9G[( = :t'Oi$$@ w(e <>  )q%eO%fb);"'#"&'&543:;>54'&/547>322654'"&#"AB3!K5&4  $I J*Dr*N786e/K54 $L6k$'u[@6' .2 4>32#"&2>54&#"21=l21=lt.1 . +:s7+:s76(& $'888$888s':/iUb'1'1vy&1c)@I4&+"&'!2632#*1#.=#"&'&56263>"#3267.'632=# G; ;?2GU&'8 EL1 Hm *` TH ?C <<u({Z #0%h+6  Z8 M@R<%c*46;!5!"#"&'!2632+'!"#"&'!##"& %  =x > =%$b6&?B ?"_Ub?72654&/.5!5!"&'!2#*1#!"#"&'!##".'432"+  3,<%= =.](/UbZ  `3(A s>? ?GdT&9*OU  Z_9".=2>54&'&#"#.54632#>CJ4('/1U=pX/FF&: +J* = e+.O0cQ463235!"#"&'!2632#*#!"&#"263232632#*#!"#"&'3.'4323267"#"&cJGS<> XG> [Fa7>Y<@Z&sEhiD`{1&E?@ +b/:%@ ?&)-R8?eb;327'>54.#"'25!"'&'!32+;2#!"&'!5#"&546G+/''Ga TH!1Z = ="Cm4]c`%B /Y@(? =? 16C8J~  #"&'722672'#"&54632E# +T -$!B !0 ]8!7   /V #2654&#"5&4>32#"&sG*$0/04v))/=7(,C]7-%q)1 9A+{p#0L)'GTN# !-732674&#"72654&#""&54>32#"&54632z$="%6D+#31-?3&53;*'IK'Eo75!5-#*FU,+.P)KK531?f.,2!5!#./.'#"&'32654&##"&54>Ql:z[ )YQ(M.&!!-1qXeI22. M y0"'92! ;4#&/.'#"&'32654&##"&54>32!5!2'4&53#'|$]S)M.&&(1Ti:#=9b`2b$K y0"!?2! sVeI26KrZ324U23!./3267.#"#"'67.'#5!2>54.#"#".5463232..$10" .(+@s<>N5^) ?"/k &  !X-7%W :(2;)j+ (DD}'110'4(S" 2   /!(U67'&547"&'4>732654&#"#"&5467'#5!654&#"#"&'4>?326323""3VR1E,*()Z@'(3 !P %.u} &,R  OPf 1#H(6(LRNgUSKv: >) 7S#' )% +'2 <2  ) 2>0U23!32632#".'32>54'#"&=#5!>54&#"#".54>3326( "9&z G (6dS*F0'#/O0&;  V*&f  7-A+? ,7^>.2(\m6Tg -O>c5.B^K5,& #H.#2(  !7L J23!3>7#.'&'2654'#"&=!5!254&#"#"&547326Ra &,YqX%827)W/[ .L02 ;9#  ' %q=26753#'. ''./>7&##"&546J!/D^6B&)4262tt    7]84G+P$V1 41R?2'20%<2l   ;F5K.')$!&"6L12654.'47#654&#"32#"&5464HVDcdOL,KjkKJ%8 $2=.N>>D&1>/2$ !) +Y@C2@;5  ?#-<*3<2.'&#"#"&547326324'632#"&5465 FhHW* 9( >  &1&  $%.3;-ePJ:+7%'  l  5  (/"L,?Q^'.#.547326324'632#"&5>72654.'.5>7?4 '(*4!)CO( 0N %!1(0;*C 1#'8!+"G7B% &1+ 6- $@+P52/-E h  M5 +8,G+ W (3   ")+964632#".'&'32654'#"'4632654&#"#"&F7E',RAClQ$"36Te-?8. $,#M3'CUG5@-)?54.5467 +!) /9< &1"W@4]A;%/].9%"%%;2R({^85&&IhiI"!    ,D0#221=8G6RykBw1.&!$ .6&$$+=YN *F(0B54F. -%675!5!#2#"&54>32654&#'.'*Ij*" |VBy1#)NF*vRL " s#'22&vU(4',Qpkb23#&'./32654'"&54632>7ST 7S>S=v9f*%0)&%  H'Z=S2 "*04! g9)E '-* "#L *_43#'.'632'>54&#"#"&5>32&=[[2$B*--((6 :I Q#Q>[e^# 2-),7*+,!!$#AL *+3RgVh. .*27#"'47#5!#.'.#'67#"&26RfA =]DJ1 BQ*:'5 Nlx0:22 $%7 DT =>2654##".'32654'"&'5&'7632#"'6*<Qw -XB?e:( '4F4 \-J  &W*3I86'A> 29*CQEb|[&5&'#"&5#5!x-1!&7EE.<>Q-E'))3)"GBp22. <265.'%./32654&#"&=#5!!7|G&1*FQ $ );m410,?(,?F3Hp2$5 9*   1I#   ")'?T\P5/ ">'22A %5-d.J47#5!!327"'&47#"&'3>32#".54732654&'#"&~Hs  (82KT'% % ;s $%L $"K<8V. &M1#H F3F{7J22 McrMN @7. !7#)#D#;N9OeE G[C* S =,;#'&'&'.#'>75!5!378_PCUT,/F%C-/3>p+& &)~,2In*3 7(T2>),Y%2674'#"&4633254&#7#.''.#"#"&47.#632#"54>72>7!*"!%( 2a ]*":9$-fM\*.>N .K `U]#1S/*B'&.!*X78I'20:)i1(2oHI.( \8d03p8OG65!?J923!3267#"&54632#"&5#5!4.#"#"&547326-/L+m /1>U7JJ "i 2]% / m ;*2$k-#!69FR%;2 <23   *_E72>54'#".547>54'#53.5473!7>#5.!60&:7*>16$ ĭ  4; dV-7+_J0,N3,39:W-&80-E'(2&$!!A"3  3x2=#.'#"&'5#5!!>7#".52654R&-$F[ !N8;_5$ 3R4@RRF'22D"3r5H0Dby^$8ea;N+"I.!7"'#5!!267#"&54632)/Y!`!%) 2E>IOd22 f1'$//5[5..=3#'4&#"3&54632#"&54632R G^6O:>  /$4IWA+# d >285c.3)& & \BCW+$;D=.*.2#.'&'264&#"#"&546%!!B/I(kI6[5; !00H)1_A 1$0HJ$2>-Ol666N O6M2(Wn3$("6-+<^2 *3#&#'2654&#"#"&54>325+"`# WTzO`,(-%#*=22L'<' N2 :2h[.- %(%8 P.'#5!!>7'&54?CnCBq* '$!WA#+[m>E22"   ApvNNqf@'4'32?53#'./7"&'4632#"'FeN}6! }T3:^4;~.8*10 +H@]T&IB2"P:1O^1( 0 .2!5!#'.'#"&546/]W#*7&#*"4LbA 22LwB- #(+35?#p 3&#"2;#'&''764&#""&5632'5;4 "%!  DM2#G+   1?t $ 9  2-e .* i^~ r.84&#"'./7.'.'#5!!632#"&546323279, -4N+: )#,5J{,b Od/% C!)x(7*S~    22I+gH7X_H(0! ".%675!5!#'.'@]dwJ֗\ #<`9H2qk."22&9C/L'.(,2>7#.'&'32654'#"&546'!!$): nnV5W47 @8C*8NP>,?&6$8=!:./b2.%24.'&'#5!#'.'#"&54>?U9-6A #]U,'0-%$+wA9+\ ,:&226p,4#$. .'#5!#'.#'>N3#[\*WEJ:D1G/D!z~W%229Q%T+6.""&54>32675!5!#'.'@]eCb%%tX (A`4Jd1R$UB!22?K30.925!5!#'.#.'"&54632#"&54>3246H U?b2-".0#7 % )&;P(" D&+ 221%.++*1 ! )%O@&9 >*63#'4&#"#"&'#"&'67.+'32>32'5 CZ2C4&, #   L A2m2KK$'K 2.?` 5'/@#  3($%:dDu!. -&'5".'#5!#. '.#'>7&Y&+$hK6T("Y @Dp 0&2_z$O)B(22 #dX c. 825#6&#".'#5!#'5.'"#".'726760 @)B]    ',e2  ,6    ! )$_'?o 229! 3=3   @).-&/32654&#""&5>74'#5!#~BLeq7Dg,_*- 7''2%* $*+@0J 0D$.8*3!;  226e8 #"&54632#%](* .-20&/3674&#""&4>74&'#5  +,>0nm7@k~ *- 7'!/4."" 8",+>{D/.G3!; 4/ 232&'3#'4&+Q>"5ZX2@D.14ev824{1-'6767.#"3#'#53.4/oX4 /, /1DV r2Z^ t8?L= %  [)+2/2 -'23#'#53.#"32#>54#"&54B_ rr2UUa2fG5 {ET-;xL222cj!/2 $1(dN#a )>54.#"765.'#"&54>+*<W$#5)'%8  " dJ*D3 N-%  RK##"&54632'&#"367?,:!-E    )";r5)('0   rQ?.)n 0\+A#UKj2QN <%%'*1N_H.'.'?'?tn*J C5X 6)nsO5N;%5 5 j" j2QNT%:. ;&'467#"&547#5!:*E1%' $ 5"L_eF.>oF*> #1mry2 C <23#"&5<14>32#.547#53654/.5473;|)MS<8\/,?1= +A$iN-@; A D1 2]=LH#" /.>M6f2 &  ,+* 34&+5732&'3#'&'>7#"&547#5!@D1 . UU0Lg)@3)5"N^fF1-293U724avDCX")1td{2J N4&+576;2&'3#'23&#&54632#".'67#53654./&547@D1!7UU0kiWS ,|& m ("7+1F!  _ #A/* 1-295U3240G2<,Et 14>^Cn2   *,^.3#3#66FN3.2 4 :4&#"267>54/&/&'4632#"&'" 65 ###Qg%  } ZG': b/D    ))$,) )  e 4+ ?A^*" dO-.  $N4%.3#'#53654&+"&54732632 hh2RR -k^RcDH 262E+!#;". <4632#"&"'5#5!!>3#".'2>54'%(#0<1 2(1fL1R8,%0L/.4$S5* "":W22  *#g9Yt(>VQX8/NZ>. 6$!D. +4672#"&#"/#5!!3>7#"&54632{  1 A."Z/N $*$2(0#?!kAX>22 V1 'H%. -4632#"&'.+#'67&/&/&'#5!#,0<oF#' !~FC:Z #:'b: 5&"qV"$GQqU=C  #22oM26753#'&/&//&''&/?./>7'&##".'4>J1:)^6B&F-272rr n *'2>w$64G+P  ^+1R?P1"-%<2l :2;N%+'Hj  K.')!6Lk%#654#"632#"&54>3265654.'5+654.'"2#"&54632654&/.'47+-@@-" 4    #'7(:;. % #$2=04HV>2?ZQL,KjkKeB!4&$ #@   & !$L)$2@.  ?#->D',=12$ !) +Y@4j#6'#654&#"632#"&54>3265654.'467 )+k!A     "'7=JD #N( #$  ! !$K)! (#* w#:q#64&#"632#"&546326754.'467%#654&#"632#"&54>3265654.'467! +!("!   "%&8(:;.1 )+k!A     "'7=JD-   / $ H  %9L*$+2 #N( #$  ! !$K)! (#* 07 4&#"326%4632#".'&~-6Ij8-!$ /A.0G%.- >}"1!&/265&/.54632K?qC$ 1_G"Ec5 "0?'3?EP5&@*/(I+ $!" 0J%$%#".'32654&'#"&54632 )I.1H@>,M2`*E4'$3J:9s/?3$5Sd{U54.#"&'>7.54>2)7[( A&)+N!5'-+<,>(Z>6f C*33#H^E4U. Q(+ %+9&!* K9+6%R:5= G)/7& /& !F #074>7.'3.327#"&5467-%'/F^-=;&e )(?G112)6u^R+G-;"!K#@'FG 1M+'>j_ (4#.'32>54'"&/"&4632>p_$@(;e=, #0G*)<  @!$>! BFv!$:*Lgy[ *I=@/ !1')!,1*""+#A\!$"36=4/.#&=#"&/46322!N !0Pk28q1T-!!(A  DG"=gt7' 74.#"2657""&'"54632>72>7 ",) k  5)e[: 9& 9 & 9C dB   73FZ8.Kj73'654&#"#"&54>32Jj  <~NVs/" 1(! 3FUGDBFC"?&3*-!1 c) <>732>73#"&54322332654&"#"&54632#'#"@-"8bC8! !2TQ3L>  8/%0'0?!1'F-DbVe7Zh6FI2!    ')4J5'9 /'73#"54#632h &(&%9TG&7N-S(("+"=4#6232?>323#"=4">#%F   % $&O_OO&6HF&2! K 8S# 72>74#"'4>32#"&5|+:?!2 0 /(+< Z34S**H(! =V&9 )(=R733&+"467#"54632- '0   Eb  %-6  / /1"*4e  J'4$ %0! u2>y #"&54632732>7"& /'  5C "  ^; #"&54632aC1 "-%#"&54632&"32654#"&54632&"326541E21FF13D]4&'&7E21FF13D]4&'&v1ED23DE"##1ED23DE"##0%#"54674&'#"5474&'#53>733##5(19"< MV(262U8 e##8r2@AJ490g nR#+%:AS,9+ U D?3 9#t4###5##"54674&'#"5474&'#53>73!T@n@(19"< MV(262U8 e##8#AJ490g nR#+%:AS,9+ U D?3 9:5!26;#"/467&'###5354632#54&"!##&#":7%f! l=h?g9#N\@22K12J@!6!,)03C7 .f75_`BW2S*[7#9.1FH1$%,9*.B4:####&#"326;#"/467&'#5!54&"#5463235!2@R,)03C7 .f! l=h?g9#N !6!@K12J27%#*.B`BW2S*[79,$%2GG0.ߦ5_aD#0 D#0# #D#-3#"!##"&'.'#5362654'!!!> Ff 9'$_MQ# ++A>$#'CG:9? .BJTrL-<9Y8+*!3H0t#*&74632>5!5!##&'#"&7267.#"#_L1~@&@B&3L]E7Zs m#-7*>gA(q.2D.G9r#D*J0;`O-9Cu[=+.pfrK-1w'0!!2#&'#"&54632654&#!5#5!.#"32N,15L FIW>_YAs9@+# N)PSVt@3b7 !=D548F.39L!85##"&5#463!5!5!3254'!e_Vl83EbK8hweD-89@v @"*3#!"3!2#"'.547&5463!5!5!4+326%;5#"@2--2&,nh<$- :0*2@h^-1&43)/-%9ݕ+B2+D F./#0/;\9]@!%###5##67#&543235!5!2@@8` #!#:\89.5!3267#'#"&5463232654.#"#"/7&'#5!%RJP C<;8 KY.W;70 6#%z :z'3>.݋?L//"J*G <&&0/ !%@99$#!"3!#3263#"5"&547.5#5!5! )=9G7J? >`&ݚ0 9k9>2DM9a,5(7>;5!5!#&# 32>;#". );7T9/$X-+ 0%3# q9'[O4"399U ,#?[,F674635#5!#2#"&2654&""BBli9skktHx{99{xHLba%G)9KL8*F0%.#"3223265!5!##"54632654&#"#"54Sj)@qFl09x22D5hHS;=u327&'!5!#.'&#"327#". l>0)6&". 5$+-S;,?EzTuX?TVGO3Z99(aG$f$+#5O|Sd #M&23265!5!##"&'6732654&#"#"54l09'OhXQzTu?N<)uLFe>;;;h7K=gK>O3)(8-. %5!32'!5!'#5!##5#"&'654TbP_ 2@-CI'i(,T2299#\*Z4:][%#"&'#546;35!5!#!32>3j?gk 8(4nB4 AYu7,G9910 7327!'#5!##5#"&'64jTbP$$i 2@-CI'T?IFA99#z*Z4: $74675#5!##532654&'3?"&]o l^mM #Ir89sJ"MoDiEg99gChG@F;57o o65;H73273##5#"&'64'#53jTbP$r2@-CI'' V.T?I9#z*Z4:+9ReD$"&54;5!5!#!">274#"326@ulT=\vR\&V'E<%&; Y~v99F:>*4715 "&546;5!5!#326=#BR;0h 2VuA*1 Y2?99?Rpo5,~297467&'#5!##"32654&'.'327#"&!>2AS#Ɔ#RBkO20^K'M""N'K^.Nn ]00`3K8j99j6K5F`9F)&M89N%*E9`<29C7467&'#5!##"32654&'.'327#"&!>2"&462AS#Ɔ#RBkO20^K'M""N'K^.Nn ]00`)3K8j99j6K5F`9F)&M89N%*E9`< ##!"3!#3263#".'.546;5!5! F^J92BmH9QD2nݚ9;79"N791.;a9#!32#"&4"546?&'#5!##5# 9% H2@ R ,@'T(B99#z#:!3"546?&'#5!##5#9% H2@ R@'T(B99#z#:7325!5!##"&'&546;#"a\H~}2FV/,D54849l199%=:<6D9Tr7#5nrrr##53|@<99*#54&"3###5354632*@!6!<<@22K12J($%,9#9.1FH1###5354&"#5463232@<s1 SZkx  #"54632&#"#"5432.- X gmD%F>&V@%4".Zd< #&+"'3;2D4_08,<@F=7 "&5465337632#524&"3#]v ==\@  @rF9 I)o$"#4H2 &##"543532SW"H@WM -$4b2 3632#"&SW"H8fM ->'##5#"&'654'#53!535!322"&462@-CI'' V*rrTbP#\*Z4:][+9T]}53T4 Z )%5#"32!5!####"'&546;2"&46(%/+$LZ2@zZ=9B8a( //+99#}f=9L;F "##5##67#&543235!5!2"&462@@8` #!#:\89& /23265!5!##'#"'#'&543232654&#"#"54$K.@ )OIHH2!LD@,(3I6&N1]a W/990W0JI1L: $TZ% 2*)")/9$."&54;5!5!#!">274#"3262"&46@ulT=\vR\&V'E<%&; Y~v99F:>*471554&#"76yJ:Nur'3OLv72F5,d$wbA]x6*R9EC8Q-F:74&#"5632#'#"/"&5432654&#"#"#"54632326XS_k;Bdi$:Td( Euj?I 8r W4L[%7!4#EJQ98++?1F&("?)6%%/2>54&'52+"&547&54632654&"R=9-I]P8aC,Bb8P]I.8FhFIbI" +29QCN2)CAUW?C)2NDP93* ",12+&))72653#5#"&'654'32[@@&YMz"B3&$91`;HMDVFG:@%"&#"3!!"&547.54>7&546323"&#"2#"&#"32632d(.#:K9#5/.;'x\3r8)A& r"BX:0 *7%!#9B7G @'- >-;5;F5&$ $&1) (*( &54632#52>7654&#"r jQUqNn_T M87C "!!LZcO9 /V87FA5  ".5#463!!;uW$P9W|+JvT.2hdX9X9EbW3;%!3#".5#4633&54632&#"iU@Vu.\Q/H7QWkV 3C=5]4[lE9"9\dDN2HIeKM97>e#654&#"#&5462( 2 &@V@>0 & #((# >732767"   'B 5  0 ^%%26;#"/467&'#5!##&#"5!,! l=h?g9#N ,)03C7 .f~7%.`BW2S*[799*.B 5_D)16323##"&'.'#5!.#"!!>2654'! +l 9'$_MQ# uIGe z$#'+A>i[9? .BJTrL-<92OG:C3H0t8+*!+@IQ[#54#"&#"!##"'.'&'#53>32632".54632#"&=%!3>4'#326%4&"26@9uC+20H 1" RBD=1- `D*#Yi)F*@\;?X`B<"&@ !+6n'55B55B5O(c:X595g)7?I5*j_G19OxN0"s,&6HE9l :Wf);,c%0'('(8Y 327"&'5  => $' &/5M[L32>54.#"4632#"&!%$8H31C@88?- /25;,7@=E''X`l:EO32>73#"5##"&5463!654'&'#"54>3234>32654'"327!- %8||_<) . a,*8K<* !"#):UC"Q, !/FOcTC&.M30!c#2 (>pH7Es i$%9+j 0 J _jx5463!654'&'#"54>3234>7632#".54>3232>54&#"3273#"=##"&32654'"32>7!_<) . a,*8K<* '6:G)JzHA@) +C31C8')"! D8|| !"#):UC):*' Q&.M30!c#2 (>pH7Es N5$OF. 2   &$@(1%PEmOcT$%9+j 0 5%k-L r~254&'"7#"546;2#"&'#"5467&=4>32273#"54.#"632654.'.'32%32654&'&#">9E*2 6&uP>9=- +'??$a%TS:/-8JsF@gC205!5MP.-L6+ #`mCA20, =4,.@?e31 )a3[[G'A:>-#62?-""'Jt:Z7# -*9)6VS-.2CD4"(+30&kF7"<,)d/#f* F%4>7#"&%4>7#"&#"547!"#32632#"547!32632   0)7, y ' 7    & Ox9EBD  32!#!"54>7654&'w*(*1 5&t#A+5S. "9lKZ 3$=DO*I//7,$?= d $"0<+(7,.  +"0;9[> Yf%4#"32674&#"632#".54>326;+"32>1#"=463#"32>7#"5%4'"326#!"54>7654&'#"54>32v@( &d0. 5G*7H9/ *H,X#: N 5B;6((3 ( 3#=DP*I//D:t#A+5S. ":kKF! !!)(& 36-:F%/ +7.*'&#@+!@6 -$   ,!1:9[:,.c$"1;,(7,-53>54>3!+"3265#"&5463#"632#".32654#"2eCD C  "&&># N&BL:#5B*-C8O^A! & #/(/8$0@(A:DLV$2>**H6Y$57F%#".54>3!+"#"54>5467#"63232>54#"K8$6 #3X6D C $1,&.& '=#N "% C !!JX$2>);M@, %9#)y$/A(A 43 $#Y $ r74&"3267#"&54632632!"&#"32>323254.54?32#"'#"&543232>54&#"327#"=4&#"632B&&):M47AnU\<s0B (M*$ )8 -#kHKYR2DoH^"l&3P1%@1"9 -57>(= H*7&"8*/A?YANrJH#<:! u&; $54$:D:g.T42HbcpI*U;D` #J@60$36 }732654#"%32>54.#"632#"&54>32#".547372#"#"&54632325463.54632E'%I$!  % 1FuF.I>8 !W;9U7GY^VP=.WgPMO/;V3(@% *" /*$3  % ,'I<32#".547372#".54>3232>5467.546322>$.)'%&!&4I-OJ1,2' !W4A /,GY^VB6*@!gPMO/;V3(@% *" /*$3 I=?% , '# &,!Q=G^  "  +C'H! C732=#"%547#"".54>3543!"#32#"547>54&+BP=|!  $2M+  , yjN@?/ 2BL0:jW$Kt!t -)+ tM  tD<  88fR7#"5463!"#>3232654>7#!"54;>54&#"#"=47#"32612~ "7 y5# "'!  0*7+ "  P "$EB"+  0) 9%$=)Q }1"N3*8#% !: 4732=#"%547#"!+#".54>35463!"+BP=|!   2M+ $  y0:jW$Kt!tf -)%0t"+  t|43232654.#"#".54322>54&#"327#"=4.#"632#"&54>32632!"&#"3267632#"&4&#"326k)78%$A$+;5)A' "m5*7*,A1&! 5 1!!5H,5I89?(I/[= r&;"(MCB*$ %<2+= 9(?P!!&!#- ?L&"'2-  ,B)F] *!@ ' 36-8H[?)9.!JH%4. <9&; 1=`()&&>&"*Bix%4.#"3267#"&54>3#"632#".54>3!+"632#".'454763232>%32>54#" !' &>" N!"L:#5 #3X6DC .( #]i;W7/Nci2N{J0% D !"\"0 _& #/(/8 $/A(A 4%LV%2>);MA, '5#AlFiMBwW@!'73' S0  '%%)V | do732654&#"7#".5463263263!+"327#"5463#"".5467&#"#".547&#">32732654732654.E,,%#L>*< LRDVBU3AD C!@1o=N: 0'=E?nQA+> \7:/C6+G)&B%/7, 2A+$0  I7 "6LW2J8m&&"!#'(32T8V7=*0F<5m(EXk2J9xO*N3-9!e27hI]{9w,0:(O>1#!  X732=#"%547#"4.+#".54>35463!"#32#!"#"5463!2>BP=|!  /L2M+   yjGR3_@ %8%;# 0:jW$Kt!t +"f -)+ t#*  t_E1B1" #  W//".*  Q7267#"5463!"+>32+"#"546;2654&#"#"547#"  !7 y4#! !3U6 $9W\( #! 3 "$EB"+  1'279)#  V//?Q,6#D l!i Ta732654#"".5467&#">32#".5463263!+"32>5#"5463#"74'326E-+ C8y'; ,-187V0! G)&BN8+> BN4?D C 8@7o\%a@( 6I8X$+C>'{-"1=+-:DKW2J8n " & fU8EVhI|-,;%D%#!"&54>7;2654>7 00   S1"%)V |Q M !%2>54#"#4632#!"&54>731}@>?>aTeM0  '>U(\!FFf_z%)V |s'%#!"&'#&54>73274>7;2654>7r 0)".EQ33   S1"7MV O98 |Q 372>32#"5463!+"#"54>54>1#"R  )7k C %/* $*$3 3EB!+" $:" *x &A72325432632+"#"546;26=4#"#"54#"#".54 |L=#BP4 $9_JH!'?;7# S&h(';R+#  W/.ZTr0.((&\\G#! b8H%#".54>3232=4.'632#"=4&#">324&#"32>,--C0NZ/)5 ZD&)!8/./+D%G*!"="%, .D!DZ-Di=27*e7: KY`i@A#.>(- 4?'1  ++%O_%2632#"5463#"32632#"54#">32#".54>32>3!+"%4#"32>  #7 wJ  "8X-ZCG*!"-,#6';JC\''" C WG! % 3  "#EC\  "#FY-_>. 4$.C#$2>(6\;*:"*TY $ $_ W%2>54#".5#"&54>7;4632+;2+"#".5463232>2@#0  >?5H(+5%C2<> F$"*C*&;"  <1+9'=R#\{ $&%)V |!FF;J3>a4! %&%% '  *8*,(ET%4.#">32#".54>3232654>7#!"54>4#"32> ":$&7-%7&!"-,#6%9HG.H+ $  02#"F!+,7- -R5*# 4$.C"%2>(3Z<,*84,N7# Q }1" ,K9Y +* #")"5463232543!2#"5##"54#"#325"$7;?z|z| wz;?;G[\&()؂h6h%[\;74#"32>">54&+#"'67>7#"54>54.#">32#".54>323>7.54>32'3254.'&F!+, >+ $ 3m6*fN%%5$3## ":$&7-%7&!"++#8'Dg:.H+ '+ D@$, #7.<1M.Y +* #=( 3N "0<(   >-  >GX2#"=4#"#"54.#">32#".54>3263232=4&'64&#"32>9,9 ### *C% G)!"L?-C #3X7[*)JG2ZE';%!%! $ TO`i <'%'%7 #/>(- 5$KWDY/4>54.#">32#".54>323265432632#!"#"5463!2>=4#"#"54#"+"G!+ J## ":$&7-%8&!"M:#7%Bh=.H+ #  |K?#CO3 $9a2D$H '?<"/3Y** $g -K.,7.-S5+" 4$IZ%2>) *\P3)94+M8$ h)';S+ #KW/01;(s0.)(&\[! /72#"5463!+"32632#"54>3#"326| "7k C  #8  S !$EB ,!  !$EB & j}&"#&5463232632#"54.1E!+R$hE^3  "8!.)+)/%+;d$H[? "#Eq7T0 "%3254&#"&54>32#"&54c33#S1E+ D*=4X5$"+4#<.!' A  F2('e&.&*m354'#"&=4'!2>3!2# * 7 !$&u  Mu @ P9?'232>54.#"32+"&=#26;632#".547354+).U9>N>*,;/Kg7* @c9$ K`FKT&& )?nFHn=& [DMu%%'+B\V0Z`/H% V& A%2654&#"4.#".54632#".546323267#"5L###:TH%JJ/+Q6!G37Q(P7Dk< .T6 Q@ :F4.#"3262#"&54>32#"&5467.5462654&#""#%C,+aP~(?RM'ZF)*7I N|.Q3!G=##" &;23+F 9'LZ™N|K2RL*= N:,@ s.b]BM*;:20-<+31<"[h732>54.#"7#".54>32632#"54>54&#"#".5467&#">324&#"326E % ")-$7(HpBHQ8M4Q1 C; !"hJ#.nPA$6--96.D6+G) " F7/'+ #%$+B$$0<)4`L.$#*73A~0#0I*QfFXk#1<*'v+*N3- 4 Ihw4"G6Zd';@&A;'4@ ".54632x!, > * %$&#/(%$ *  "&54632%32>54.#"632#"&54632#".547372#"#"&=43235432+"=4#"3265463.5463232654#"54#"  ? )2FuF.I>8 !W;9U7HX̄%YmW;$5./ S":6*$/2mkM>=H>= __=_ +JYH? -"%I 8  ''/!4$8C9&*R6>Q<.WfQt)?mF1J#*# I$3  % :KQ;B4A>24A+C..3(5')('Q=G^T&'1 S!$..$((N^%2632#"54#">32#".54>32>3!+"32632#"5463#"'4#"32>  "6Z-ZCG*!"-,#6'Dg:[''" C   #7wJG! % 3  ""EY-_>. 4$.C"$1>(.^M1;!*  ""DR]TY $ $  3"&54632"2654euuibtw$|MMzMf^|h]tQJuvJU$$0%#!"54>7.54>327>54&#" ]3! ,;)M3/K* !:lJ;CPJ.5F9+     DCCF-"0<,(6,-5RF;__H?\YI7#"5463!"#>3232!"54;>54&#"#"=47#"32612~ "7 y5# "'! s*7+ "  P "$EB"+  0) 9%$=)%N3*8#% !$-73".54>3543!"#326=467+547#"32=#">W)%, y 8 0= hP=| 42&0tM&te 0#ft!t~0:jW$Z%.#"3267#"&54>3#"32632#"5463!+"632#".=476322>9% !& )7C 0& ",Ը\Z/W 7fTNwD* \?5_&  #/(/8 & 3EB!+  ' =*AmHiMmW'?#"=463#"32>7#"=47##".54>35463!"+K hP=|  & 5B;6l>W)$  yt!t~0:jW$K& #@+  @f42%1t"+'t5`k 3D7327!3273#"5#"&5463!.5463234>3654.#">:UC"Q %8aM[?$?@- "7819(7K5 0 ,!/FNdTC&!KI_)@lG2Js d+ VAD:C68! Wa732=#"%547#""54>54.#"632#".5467##".54>35463!"+32'4#"32BP=|   ." (+'1"* |>W)$  y!1 5)#0:jW$Kt!t4!./ 7'.#'4,7/>f42%1t"+'t&&6" O5*4"5463232543232=4&/.5432#"'#"54#""$7;?'!H21%#26E=L| ;G[\&().0s:]&) "pM')h%?%262#"54#"#"&54232543263!+"32632#"5463#"N $"6?;7$" |E8" C $"7wJ3 :E\\G:&h+%!* :DRZjBIS\f%4.+#"&54>;5##".54>35463!"+!+32+"#"546;26%32=#"'547#"32=#" $-mE5  >W)$  yL?*0 @. "4,0#I{ hP=| 6"%54.#">32#".546323F& -+ y3&,&":$3C27&'A++,> r.H* B&Y  H7g !)Y7,7-*^A+";C.C"4L8b*84Ou/AJU%47>7&546323#"54>54.#"632#"'#!"&54673!2654#"4#"326s)ZD?6'." !+'22eM0 8 T+<}@)'!C 9cJ\E4!//1-#'3-:%4 z%)V |zA\5+!8%4.#">32#".54>323265463!"+>32!#".=4>$323273#"=4$! !32654&#"#"547#"+"54>4#"326D":$3C27&'A-,+> 7TZ'.H* A' y4# !(afqG%ga&4,( &+! 02%-%F& -+ ,7-*^A+";C.C"4M7@i>"*84Rq5"+'1' 9'+HzQ7+#"54;5#"54#"32=#"V"$7;? p   0zY_x$| *|!;G[\(Q |0#>)?zSL h%BG4 it74#"3264#">32#".54632>;+"3>3232=467+"54>54.#"632#"&'##"&%4#"32G& + ZHH)%B-,+= s[ ('2 JRd1@6>!." (+'3(&R  )"Y  *,7H4Yo[.;C.C"3L7b;!]@IJ.S2 3"// 7'.#'4,A&G =5*;%3254.+#"'67>7#"54>54.#*#".5467&#".54632#".54632632367.54>32">54&4'3262654&#"M.e6*fN%$6++3&,&":$  k++,> 5/v!PG0+Q6!G37Q(P7Dk<VD(   Xg !)Y7,7-^.C"4L86n'y*Fi85fcCM+;9@J64@hv>?J"*84OuH+[3*? !1&00&@( 4M /*0<֎b'c@d77+/:+31<%.#"3267#"&54>3#"32632#"5463!+"632#".=4>7&546323#"54>54.#"632#"'2>4#"3269% !& )7C 0& ",Ը\Z/0WeLZD?6'." !+'22wfTNwD* )\?5_&  #/(/8 & 3EB!+  ' =*AmHNvWI7  9cJ\E4!//1-#'3-:XmW'7&546323#"54>54.#"632#"'3"+>32+"#"546;2654&#"#"547#"4#"326 "7)ZD?6'." !+'22y4# !(2aC $9V]( &+!s)3 "$EB"+C 9cJ\E4!//1-#'3-:&2'1' 9'&CA&#KV//?Q,6 ' D l"&5+!MH 2#"&5462654&#"HaaHIac`BC/0CHdddFIaC/0AA0/8 )2#"&5462#"&546&264&"2654&#"%./$#0/$%./$#0/""0F0/$#00F0/$#0$$L@K_%#"&467&#"#4&+#".547&#".54>32632632326542654&+53264&'TC6HWI#Q(ITQ4A;LN53J ^TX'!151T6G)4Hv.3^_f"E4J?W/~K|S!=6rF-VI,RRE9$NX65& $"-82 k83\L`R]r"'732654&'#"&5467&#"#4&+#"&547&#".54632632632'2654'$4&'32654+532D4 *Y8-SD7GXH#Q&KTQ4A;LN5MP^1H#'!15v`F(7Ew-3[z@WY'(;N.i,01 **S-`5\40^taCAe D((4J ?>"E4JyLH,DA"=6rFpRRrSwX780G8(J82 k7..'D"L`;E3!!"&5463!2>54&#"#54&#"632"&54632632#!"6264&#"Z;5:6t+>M?&2TI54Z "78x0CcyNqkL3$68;B:;J!!$#cbcz*I0-<+eor9M56JR"5<61#!2H`&d7OJ-8CV#"'3 5#"&54632#"&547&546322654&#"%3254&#"2>54.#"U9,:&,eK )9?8A3FLxx8\`4wwND3A% <%'LJ./G=?cJ1I=E6.>.4>R/6EnF%_+>LJ])GmE5 44XT8X36 ,+/%- R)4=7462632#".5467&#"#4&#"#"&2>54' 2654'R=BloPE0E<.00+S*0/.>F2354>32'654.#"33#"&5#5654&#"&54>26=#Df${1OR*e2y%<=46*S?3AOH<+)E.VN@PX%4>32#"/32654&+532654.#"33"&5#5654&#"&54>32326=#"5FC!g~H,0FA !-.!$ C."A@'SChWH<+)E:JL>&hNJ5A%#"/32654&+532654&#"632#"&54>322654&#"$,T.1 !-(/(( X3"?F0,@7<:-=O$8MH'S '$!/+ =(<> <"'!;(%*9)[BGT780xP<_9$Pn0" 4',-&N&kDN'@kJ,4?H232#"/32654&##"'#"&546;4>4.#"3265#32=#"#7  C@GA,-&";C @+S& >?IOY$ ;~0%2- ()=$">!c,9*L8:K/: ;"IK0PPU;G2=?(:5Z0I-/Ng G$A`UM)52!3!5>54&#"632#"&54>"32654&5_VSH+2 hB 5*&-8:?;.?F-IKF/+ '%wjgXHV2Vb(Q7HV78.jOMr;',-&/#"2M+"#".547326=462'>54&%;]@5M'{60F?%8f[ =-%4 DKYKLT.IG$D XIKi;HSV`yV:LD6?/DhLG&/%4632!!3!5#5654&#"&5463237"!5.v`SJ9'#;,;`;@b%wCU#=[nH,H16:>9!2RYMSO4(RI7XeL+=H%#"/3254&+532654&#"#4&#"632#"&54>326322654&#"")#65' .^A*'$8-=,-BSO0YV -:?8;C>F/MS,n-1gEd!*% .8J7 :P"0,2$)*$,(6hbGWdVkNLr;OMHt1#"0'-RJ233!532654&#"#&54N7Sr/4(#%* , (SCB.H"C'(624H.823&54632"&547&#"!532654&"#&542654'vR2JJT]4632632+"32$32"&547'#"&546;2654&"#54&#"62#"&3264&"$3254#"NrUT:!HIk+W<31 8>223T; 0 a08[_AC9D6RA75$2/+,*3&N**,FN55P>./*t7 "/0Z3+*FJ-0203Vg&-& /$":5$&!34LGR"'#"&=4&#"#".5467&#"&546326323265332654&'2>54'X*: j:.S>b=<'mNG/E;-/SX^!kojA2,NQQ@$(;S8"=K>6E"-We2AE1`LL^Pa:Q[Bu@O&Am$ tQ<MafH\P@. D<6lCFf26mJQm-MMRCMW>32632'654&#"#"&5467&#"#4&#"632#"&546322654'%"264&29 5+8Du6'0Wh]m]76Z9/*'LSO0YV ,:<=8A?Jl'V$:Wf8*-->$&s$ b->=ErX [|_]X_32&#"36SI&;8Ha60N.4a>G&;9E6h:Q%$H,*?H &,(H2)=G8--$M 64632#"'32654&#"Mwec_a`dFGa_IHbqƉʁGgbGFf^M8"&=4&#".546323265332654&'7"'@h5!2Uo*: vA01G),=S5!2Z>1)8 v:4 bTVI5cW>e@D0hLLM>I2#"'#"&=4&#".54632326533265#"&546"2654&?E/V7bD6UBh5!54&#"#4&#"#4&#"632#"&5463263262654&#"M >++35T2&4SA)*:SO0YV ,?.FI0AIno-/Yj.*.,-+{l7D=n@`W-#2C%",(6hbGN~EmOOMHJm)(),(+,'L *374632632'654.#""&5467&#"&2654'LZ:81@yC72V(\? /@^nY<,"#Fe^!kF;WekbCl!Cp6bF 'p@`\Y^>m#yQ~?M>BmJQm>M4632!33"!54.FvQ$F?&qT;W$./\b2X9jlSKι1J&M-%#"/2654&+532654&#"&54>32((bQ %`8?;,*=5<467"(/<9Z\8!6V7*"!7,. 3.]?Kd oO<`:'Q/?M'#"'#"&54673265332654&'`eO'2'654&#"#4&#".546326%^gKC"_H?&4R=&>Kp)7m[,N ,Œ\H| >Je-#78gE3AE0`*!KJ 2!3!5654&#"&54>Ka&8TH50-F4E$98)cx,H -M*:323546"!54&$F>&GH=+*F4E9K*Fg%wj>P#^1W7-O3454.#"#4&#"632#"&54632>32"32654&UHn/3 6%(:RH.XV ,<575>;Jj\CK)4M'**#%HHy@42+#,(6iaHYhQmPuP#+*CC:(,*)0!"4M@%372#"/32>54&'.54632654&#"&54>32#"&#"M;+8QQMI E6+6<*34*c@F65!* /?7`f-& =$'1&$=/ "/ 5/^@54.#""327.54.!]fK%Xs8-5Af=(UGJ,@TAT>150$769*.0`A&3B#"~WnBN{h &9IBRpVVlBLe;!?7^49j/R7"DF,~6,-M 2#"&547&#"&5462654'&aW49Qo"(KYWqt@+;fĄ|lbUI]}Xo@HcpB<+Tc2L2'>54&#".54֬~QG(/ ^<=_ 5,BGsqK(H5USWS;I!uHrM74>32!!3!"!54.M+95SSlwG0>*A7C645M%02#"'732654'"&5473&546>54&#"u=UJQ >5c%3!crK$"B>,P"@:-$2W:8\*4F$qNP4"-;<[@JQDM),7.2ML233!5654&#".546!]SSvk_AEQ6/(8urjg[HMcTXf>@^ BD0aM+64632#"&547&#"#"&546732652654&'[oX&PK/N=;Sx(/-IcCApMB%4 R-'<&%!k6^d2K\73!5654&#"&54>3235"&5463273"54EpH=+*F4E9K*Fg%A^M+:Af5=.EH-O34H5%4.'7#"&=4&"#4&#"&54632632326 4%-< YUCfCT54&#"!5>54&".546323&546Y ?,-4b@AbH=@ );TA5!$eCFd&Ntq;C8(W6UWWHJd <-+392G!L(MOQ,HkozHb|Z)2#"574"#"546323267676L " !/*  9)Z&+$>\j;0qG\{1M2#"&'332654&#"#46Lf#H0>X3)3A=1 '[ƒf#IJ/^B(54'.5473#".54622654&"&2./!'Q954'.5473#".546322654&#"   5&2./!'Q94&#"327:dG5'1W!4739*-8:?7A@J-HN"%#%(!%0qQ,BAAx5R,)V;HY64OrPGm;<72!#0L$092#"&547&#"327&54632#"&5462654&'">44Ee:"#<*IMMI+=%"8cErxw *** A8.)).+$su+,.&,8@\]( ,p/).L.'&<X&<&FXX2654'3#"&5473k4*Z39QL-)' F@A; 8&L12#".5332>54&#"#54&#"#&=46326Ioi=?' 5;2H%S0!-T3"'F d>S+8gk{ 5$* '>? VX&"h?0OE *XbIKOK0;FZ{#"'3265#"&54632#".547&546322654&#"%3254&#"2>54.#"'4632632'654&#"#54#"&U7?:'4gNx)9?8A3FLxx9YV)PyC) xxND3A # =%'LJ./I<;[71I=:31!/08O5(9.=)>GE/R>'4-EX>R/6EmG)_*>*$`+GmE753WS7W36 ,+-!- h&'.&WL'Im:FP"&54632632#72654'#"&5467&#"#4.#"%32>54'2654'FPkYCCeMxFPm^FOZE/37NA$b'RS+"-.=!:%" .J]2,eV, sLiQR_GwXT{;iGr& (-WDK:;` n+#5/&pA;9%212$6AO-jTGq/S` C2654&#"!254&#"'4&#"632#"&54632632#"&46327.#"#-"(R !#L2+-1M#" *-'*((~e#+2+6&IBBI&6+2+#144?H"&54632632#72654'#"&5467&#"#54&#"732654'2654'wF)D6,"!37 #*.-"- %#*)6  22+9&5R)*( ;,&8-!:$;%"@#) ,? *%4B'5)#9I.k7463!#!"32654'3#"&IKHR10+1*+/"? SI4^Cs&+P+0GJ54#.HjdFg$";#"&54>;54632"!54&,8!N|L\vAW*N# )8+$ MWr\K<ݲDnN23!5654.#".54pSl >+IUm8Q‚cbY"Ob65WLxA"wEkJ,2!!5654&#"#4&#".54>326*QjNNH?%4S;(>K1#)7']AY97Ì]mK""@}Jf-$69gE-=6AE08gLLKJ)2#"&5".5463532654&#~7dT2&Y>;cGs 0 >]i:S49nR48^;4aFC>iG-(+ ~Fi[5Ra!J?OB74>3 #654.#"3254.'ᒆ&#".54632#"&J&J~Q1 D #6Z9Di>9vN! 0)>#Ka$)d$K:=VꌙNyH .-6|.ZaJ/=h{DM](1h% qLMR !JDf9'\oQB2%#"/32>54#"#4#"#4#"&5432626325sJL3/A:R*[@:D'TI#X3(%)EHGk9;ek=( ^"#XLXE@8=NB$/"&54>32"/32>54&#"62'32654&"Td9\j6|;n5 1H3P/fUn1\fA%$,0DBzTAg> 5pmED/N]1icSCN~T&@9$%1(QB(233#"/32>5!654&#"&546/atUTt)Z )E5 .iQEFYk|Á^}GCkL"< 0"6CcaEoJBdQk)02#".="#4&#"&54>3263534#322H% 4", QG/"e^ gN7B'.<5kk'D3QQ)"DC)"8434#.}?Q7eMFFPOB633265332654.'7#"'#"'#"/32>58TF:%4S;(>K1#)7']AY98Q;.t)Z )E5 .CV-$>69gE-=6AE08gLLK'%kL"< 0"JB2%#"/32>54&#"#4&#".54>32632DWL3/ACe878;S;(>K1#)7']AY91DWJbp9326323.54632+74&#"326TC6HWI#Q(IS;(>K1#)7']AX=2Z:an)T9:HsQc,&%3.&'/+E9$NX656Xsbc D*&69gE-=6AE08gLOK<4.*.3!!">32#"&2654&#"< 8&B/E/$#+..*Jp#&&11R2* !'." 6I)"%'L[ K72654&#"%2654&'#"&547&#"632#"&54>32654&#"'>32.,-+Z-k7Z-/U46Tx%Fy ,?.FI0AI:\l6`:0$3!H027 /)(),(+,'=J4[Vf2@ZqBl^VH_y]GN~EmOBkB#$"-&%,83!Lf[ NY72654&#"#4&#"632#"&54632>32654&#"'>32#"&547&#"2654&'.,-+NSO0YV ,?.FI0AInj-":+&20$3!H027 -/U46Tx%3':-k7/)(),(+,',(6hbGN~EmOG%" "-&%,83!qBl^VH_-=J4[Vf2@M`,623##"&546;.#"#4&#".54632632=#""Ip |x@20AMAP4+2S,#?Uu7OmUg&&V%C*@qH+3`SS57R0W*&0@jGoS!C]HH$,*Mq\T_k#"&547&#"#4&#"#4&#"632#"&54>32632632654&#"'>322654'2654&#"-0-.3Os>+6>CK3DE$UC5]\2:\1. 6 4 L.*D  A28)>.% ' !'&#x98S+LCl#)>8'!,(6hbGT91SmQ<`<(OMJL+%'#/2: @Kg322>54'-0F19DsG#:S('BRu6PjXg&0V@.4 3!J.27k ) 8)>%#x9.YEY8n#)(GlDoT+vEYJJ"(&$-51)h4:h;"n7$BN\,72#"&547&#".547632654&#"'>2654&'w+B*\[64Op/T`_%3??f;/8 3N(4e2\2:'7TvmeTJ]|Nt:?@+cJK*&'.$?G'bSd98L\YALV#"&547&#"#".5467&#".54632632654&#"'>32254&' 2654'03 9'5Mj3q3'kQH.C;--RY1-!47pi>58\v>9!5S(+AnL!!"61\0R*;z'y>53KAyg6[xLr@Q(>n" tQ7326=4>32654&#"'>322654&'-/U46Tx%2F0eCU[ =-%4 A8(A&H3O70$3!H027 <-k7qBl^VH_]a1FdEN9%@;#""-&%,83!=J4[Vf2@JbZ>IQW`%2#"&547##"'#"&54>;4>32>54&#"'>322654&+'4.#"265#'32=#"JAKF=@ I6R' B:J2'$ ;(+? , D15$4H,+H )8 J-+12 ~0$2-]7/å$">!cP.6T^726bNPPT54&'(_B;;+;8%8V6  #Y>FEBP/5nu13ImyR(=2DH)Tt/C5 &E6~ )*4@ ( , g4W"">"#44#. eOcyi`>.<91#1/%&/ dO]EW .&'4''4(aA 'AI#"&4632"3264&$"&46232654&#"7632#"&547>7"264a/()..)(( !! "".R..RjFpxVs>@hvpV=0]<7*G^>"">"F44F4'4''4'kF44F4JgcL`y_wdrFC8sc5 C)O]K'4''4()%42#"&54>32.#"#"&54632&#"326ڔ{tB>W7QM7SXa{x} yxWI 4BL)*hQ3,bw(-' (`l4632#"&5467.#"53%32654232654&+54632#"&'#"&546;.#"#"&54632#"%32>54&#"G1FO0HqS02,2$P7=YY=8PW=fM;(+,,5cK5KK5LcfEO)" +!:Wf7'732>7&/7>32#"&'#"./#".54>3227&#"632654.#"27&#"ZM&  +.1J DQJ>  "!: /">JdYDc.&YA-:"#"%+:-AY&.dCYdB+85,((,3:1nf4*H,'7)&% 93?4 '   e4?l^SR`0,   ,0`RS^;T,,TX29 %&)7',H*4BT,,)+({' (}<E"4;.#"#"&54632#"32654'#"&547#"&5467%&'323 )" +!;Vf/'/F+2"8B8b+8#2]BR:'4dW\f&E6`[ A,%+54&#"#"547>32#"&'#"&546$"264\C46 ."**"1:DFՖGzl>J<54.#"#"54?'&547632#"&'#"&546$"2647.#"632 \C46 ."**"1:Df<)< -6֓DymAJ<7&#"#"&54632632#"'732654&#"n6I0@C',AY/P602;b;81SH 9 "1R16!!A.2Sp 4$03w1K3 !(4(Nf*@5rXKl1)Z .TYh(>#*# .?6-cy,OI+ _>u(?G"#"547632#&#"'>7>54&#"&54632#"&5462>54&"264Bb f*R:*&/F.ySRz4)!"(("DMVn22X ^܏Hxm># + 21 CPPCk5 +*@*VbbKIz**(4#"32654&#">32#"432654&#"#"&5463 WuyS,@- )3^ta XtySc4*8QA]u`aNi7)!+ -,Q+1ojaNiD,Looj( ]32>54&#""4;.#"#"&54632#"327546232654&+54632#"'754&"#"&5467P!-(< )" +!;Pf32#"&'#"&5467#"&54632#"32654232>54&3.#"6#264&#"[L. 2Q*P65KK5Cl3) )N4FkFՖGzl>J<O"32>54&#">32#"432654&#"#".54>32'"#"&547>7&,^0AJ%-$;V58N!` Wt]D?g*7j4=. ,5FP vIb^Ha) !+ 7U]3SxGjaJmL= C,Ve )G.(3P4<#`?d '  :{2<e(="#"547632#".5467#"4;.#"#"&54632#"32654&Fb fŏ.^a>/'K )" +!;Pf54'#"&5476#327&'2654&#"" (/y.^a>eFO)" +!;PfC|"S   ](BHT2#".546;.#"#"&54632#"2>54&+47>7"63&=732654&"+0-7y.^a>eFO)" +!;PfO? *&C())(cz"#"547>32#"&'#"&'#"&'#".#"#"54>7.#"#"&54632632#"32654232>54&32654232654&#"%&#"632>L. 2Q+O75KK57Q 9-1SH 9 #1T1 .!!A.5V~i PoN:=YY=7J,!7I0@C',AYqYdʕCKHyaB9 >FՖGzl>J<32.#"#"&547632%"327#"&547#"&'#"&'#"&/"#"=&546326!2&]B',AYHO0B5tK(SoL(&r%>32.#"#"&547%"#"&547>7&#"&547#"&'#"&54>32"32>54&#">32&#"32V<8-&:Oz&6 tFk* * ".@C48Lr dV *5Aa0AJ%-Tf^0AT,1DfG9VRg0B5hJ9 '  :{1=e&&=K;  ?,b\bGN[bL*>Q9;%]BWOa) !+ Sv:oLS%2"&54>32#"!2>54&+567>7"6&!$$BQ9O)" %NP+0-7 );Pf>W9UW/X=f1lM$Fp())*&0+8@/|'.6$/ T4_mm_+3O/:]BP:} 5(:ON0Oy>O? (-"#"547632#"&54632#"'.#"32654&Fb fŏ{|Y>l b8PopX ^܏֧x\<5 06xTZju(};&'32#"&54632#"3265423254'#"&547#"&/F+2"7K5P_|Y PoP9=YY=^.%21J#;<#'5K SC3C&.32#"&'#"&5467#"4;.#"#"&54632#"32654232>54&[L. 2Q*P65KK5If/'K )" +!;PfFՖGzl>J<32#"&'#"&'#".#"#"54767&546326732654&#"3254.#"Y&"u ;(.2!%-@8?\aZTQ$>?/D>- TEY%`AB8/= :*6W>55A"! U]lgMBځ-&$.-%$/,+= -/R-%/%* [I cC{!'8!+=5*$-5,uXmOMp0K.9wREeI::A0Sg,>>, ;9Lp*eDI+3H=)3I>>;T}'+<Y)<KP"#"547>32#"&'#"&54>32#"32654232>54&"#"&=3.67#[L. 1Q+O75KK5Kc1#@Qf32#"&'#"&54632#"32654232>54&[L. 2Q*P65KK5P_|Y PoO:=YY=)?$B9 >FՖGzl>J<[H6 6H/O^4q C32654&#"7632#"&'732767&#"#"&54632632#"'732654&#"O0LeUyZA6 JgoH,  E6!!A.2Sp>/% 06wMOq=?=B]jK\p@:l>#*# .?6-cy;gM `=u(/A"327#"&547#"&54>32&>32.#"#"&547/DhI8UH   * "-AD49Ru(dIBS*i<;8,&;F^S54&+4>32"&546;.#"#"&54632#"%32>54&#"?9UW/X=f()+-,6jAO)" +!:Wf54&#"&54632#"&546232>54&"264Bbf4\<'9&-&ySRz4)!"(("DM&-&Jp822X^ÌKsC2%'CPPCl5 +*@*Vbb/ `V**(I"4;&#"#"&54632"32>54&#">32#"432654&#"#".54673 614&4GJcoK#=6- "!/]t` WtxSc4*8Y<@*6-bdM'9`U]F13 '!+ ) L#6ojaNiD,Qj'M45\(<D"#"547632#"&5463232654'"&4632#"&'32654&"264Fb fŏ|A? \C46 *D**"1:D32#"'754&"#"&5467632654'"&4632#"&'327546232>54&#"#""264H0>]1*P68()8)(8Q^A9\C46 *D**"1:D*-!$$!-*fF|)Ij;( ,,@,C.1HiKR{A`*11*/O^4B9W , ,(3?%2654&+54632#"&'#"&54632#"32654232>54&#" 8PW=fM;(+,,5cK5KK5P_|Y PoO:=YYP!-(<[I5:OA^M6" T3RzJ<[H6 6H .P !32654&#"7632#"&547>7:bNpxVb,'hvpZ43'+x KpcL`v y_wduG3bb7*.EE(02+32654&#"326542#"&54632#"&'#"4;T t3$'5{TȤ}ڔlA1-@u 3'4<*@Fx܁i yӔWR3IB/(5 "&5476 #"&546;.#"#"&54632#"32654a h&ŏydGO)" +!;Pf=X/WV9dkՖm_Ge+8#2]BO:(5 u(:D#"32654&#">32#"&54632654&#"#"&5463&#"32 WuyS,@-  &^t&2E1.!ySc4*8QA]u`z/(8&RaNi7)!+ "A5$ o9'/@"3NiD,Looj~$4%+(}IRZ%#"5432654'#54632"&546;.#"#"&54632#"2>54&''3254&#""3254ꗘ>!`N:)+-,6dGO)" +!54&#"3 )" +!;Pf=XQ8=YY=8PW=fM;(+,,5cK5KK5Kd/(.P!-(<b+8#2]BO:5IH6 6HI5:OA^M6! T3RzJ<54&#">32#"432654&#"s*8YOraM4 3'5AHelN#=6- ""/]t` WtxSc3 C,QjdJ[b e ' ,A]B_@62 '!+ '"J%6ojaNi(I""'.#"63!.#"&'326542#"&546754632>32!"327632()>  >(4A'+9!+@#_3x}ڔD:N='CD'8Gg,# {T. 0''0Y?;R$!c>dwi yxO"Gg)"")g<VuQ(}.72#"&54632>32#"432654&#""=4&#" `uZQ1A@1QZu` UjK:7MN7:KjoiG::GiohCcL7W W7LcChL;'#"'32654&6, '-+8UoM%#"#פ*B+!4632#"&5332654&#"G1FOOF1G,4004,-;<-!hJKh!V?x#532327#"&54>ű JD3 (C=O+,b 9U 7eE/`V?x#7+"4?#53232327#"&546S())L iF1 (C;QV WY |e2F 7W=57"432654."32#"&5462 $:EbxbE9$ ;LޝL)-==-)W-W*#"'.#"#"&4632#"'&#"32>3253( [73{}7.44."0  6%''%)`Kc+2X 2<:::P:" /->-$,$.(+!4632#"&5467.#"53G1FO0HqS02,2$-;[0'@LHa! X&5(3<"&54>32#"&54632#"'.#"3 7.#"'"264&/P/"50OsR|Flc+ (]x[eFW"">"!##44#- dMDh1hzjZ TdlM_DV .&'4''4'(&;'&(!'('(:-6js4632 #"'#"&5332654&#"32654&"&54>32#"&54632#"'.#"3 7.#"'"264&\G1- ( %  & +,3OF1G,4004,8./P/"50OsR|Flc+ (]x[eFW"">"!-; j  Bm[<-!hJKh!*B2#44#- dMDh1hzjZ TdlM_DV .&'4''4'(' ?+34632#"&5332654&#"632#"&54732654&#"G1FOOF1G+4004*&*+754&#"632#"&54732654&#"+-0g1G1FOOF1G,6O04*&*+ -;<-%*  Kh1*S;3+#,(9 (QqV$263232>7632#".#"#"&#"#"&"#"&#"#"&#"#"'&546232>3232>323263232632' " C /1 &-) ! ( . # +) ,'  '$*,54  //*w7ZY0h--  % 985lg5:2#4&##467.'>ZwSP7^8&B  O(0-1r`OSNB<  '-  6F.+7%#!5354>54&#"#"&54632326534&#"326#5$$#!##=7>C##BTL-+B!,',.- .EF,%32&%o%%%%.7C463263232653#!5354>54&#"#4&#"#"&74&#"326.I%!+;ET#3%!##a:8'&A/-.%=-+B!, ',.- %%%%:#-34.54632#4&#"4>32#"'4&"26sV]tSF?DO#- '!'J  Cf4L-Qhtc[}Px=)/0#),%%%%:.84632632#4#"#4&#"4632#"'#4.74&"26:L76!>6=S8!#)8 36&!'O   TSh22`O|i%%S*.8P0#)Ad4N%%%%.=IR46326323#.'#"&46754>54&#"#4&#"#"&74&#"32632=.I%!+9*[SS %9$K404,%*!##a !:8'&@0-.86 0<(jRFR> +B!, =',.- %%%%01S&a462#7#"&74&"26#V6O#`   .2-PZ+-%%%%  *2#4&'#"&5463254.#"'>4&"26XwT.!!#)"A6))g=jO  aNv$ 0-"-B,)< X9C%%%%..(/;2#"=#5#"&4632>754&#"'>254'%4&#"326Zw,414Jq0O#$*,6[*KAn@r1!A`O =)(GRj->/2-57qAOY 5G)0G S1&&%%.2*6A%#!5354>54&#"#"&54626=3%4&#"32654'326#3$$#!##=n@#T./]#BDL-+B!,',.- .E7'Z>9 w%%%%\P-%.27BN46326326=3#!5354>54&#"#4&#"#"&54'3264&#"326.I%!*5$T./]#3%  !##T#GE:8'&8%]?8 v-+B!,  ',.-["N/%e%%%%.;BL23#4&'#"&546754&#"632#"&=467.'>32=4&"26ZwG*SR6  - .2-'-  6FY01S j%%%%.'`W.:FQ2#&'#"&546326534&#"#"&546325467.'>4&#"326&#"326&[wT"3 @$3A=843)P7_:X% )#).3*2NB>; /?1-#-  5G5%%%%!&.?KV2#'#4'#"&5463265374&#"#"&546325467.'>4&#"326&#"326&[wK3+% 4)51-*+$*P7_:X% ; /?1-", 5G5%%%%!%  &\[.=<H%632#4&#"#54>54&#"#4&#"#"&54632632'4&#"326HK;"4P'&!T !##I%!*.8s4 @%^{mv+B!, ',.- :8'&?1,V,%%%%:DPW2#.546326323#4.'#"&546754&#"#&#">7"&5464&#"32632=%$+$U#"P,; >67G*SS6)J414,! 6'.. %"!@( !Ag5D <-%>K<(IP. , 0M%%%%01S .9@J2673#"=#4&#"632#"&=467.'>254'%4&"26Zw*GO,414J<6RP7_;'D ##+,6(0-1r!A]  `O+, =)(GRjm@SNB>  - .2-'-  6F)0G S1 %%%%:(43.54632#4&#">7.546324&#"326#"sU]tSH=4U. $ "!&%$+$JJra6OmtcZ~LK(IP =,1.JA]*,%%%%:0<2#.54632632#4&#"#&#"7.5464&#"326%$+$U#"Y#; >7=T! 6'.. 4"!@z.JA]*Fs`1^g22`O|;.%>K<(IP\,1N%%%%0&02#4&#"632#"&=467.'>4&"26ZwSP7_;'D##+,6(0-1r-  `OSNB> - .2-'-  6F6%%%%. ,7632#4&#"##"&54632'4&#"326GK;#4Q%'O##+,5Ns4 @%^iw- .2-%%%%: "+22673#"&#"632+53>54&#326d  )[G82Ng## Z87J.(= CM-PHcE7*%.- (44632>73#"&=##"&254.'4&#"326.#+,6=2T,414#,l0N#@  .2-%5, =)(G*(j-0 &SX%%%%0%463232653#!53#"&74&#"3260#+,6T#3#a .2-f%=-p-%%%%0%463232653#!53#"&74&#"3260#+,6T#3#a .2-f%b-p-%%%%@ 2#"'73#'#464&#"326*$#TTyW6d/>--2N%%%%@ 2#"'73#'#464&#"326*$#TTyW6d/>--2N%%%%.!46323# ##"&74&#"326.#+,6uuT^klX#a .2-=n-%%%%.!46323# ##"&74&#"326.#+,6uuT^klX#a .2-=n-%%%%.'32#4&#"#"&463254>7.'>4&#"326&[wTP7_:X% 6,*$#$,rX`OSNB>; -2/>- 5G5%%%%:!-646323#.'#"&4675#"&74&#"32632=:#+,64?TS %9$K404,#a@! .2-5% 0<(jRFR> -%%%%01S&@,62653"&=467.=4632#"'74&"2612 :T:Sjj;"6-7-+$#K  l!"  37-'77'\0DD0/9? 6&79/ -;%%%%  (222673#"&#"632#"&463254#">4&"26d  )[F73a=6,*$#4,Z  .(= FI-2/>-_ Hc=%%%%8&02#4&#"632#"&=467.'>4&"26ZwSP7_;'D##+,6(0-1r-  `O4NB> - .2-'-  6F6%%%%8)32#5.#"632#"&=463254.#"'>4&"26XwT B,1##+,6JC[.))g=j4  aN0A>;Q- .2,DRN4)< X9C7%%%%.$02#4&#"#"&4632547.'>4&#"326&[wTP7_:X% 6,*$#J$,rX`O5NB>; -2/>-F 5G5%%%%&4.#"'>32#"&546324&#"326L*(g=j6Vw6,*$&U*< X9CZR-2/#)>%%%%:, /934.54632673#4'#"'267&#"4>4&"26sVT9 U&S &'#/VDO#-O  Cf4L-Qh2#,K10A1& #)z XPx=*.N%%%%.83=I4632326=#.54632#"'3273673#!53#"&4&"26'4&#"326.#+,6 :C+(##' T2N#3#B   .2-f%|K/#1->-,2Cm>-p-X%%&&%%%%:+.5?%#"&=463267.#"'>32673#5.#"632754'4&"26#+,6JC* @%g=j6S;T#T B,1#f g  F .2,DR 'X9C+,E1"[0A>;Q-* %%%%.%/;7>7&462#4&#"##"&5463274&"26%4&#"326$0$+<*R)A/T##+,7  X}z+ F11#* %&- .2-%%%%%%%%.{$-92653# ##"&54632"&546"354&4&#"326)8#<4)^klX##+,6uu... F(((;,Mn- .2-=1,$ 8>"%%%%:(22#"&=4632#"'326=4.#"'>4&"26XwjLKj6,*$#;)*:))g=j3  aN0DD0-20-s'77')< X9C&&%%:9+6@4632653#"&=4632#"'326=4'#"7"327&4&"26:qG@=7//jLKj6,*$#;)*:P~P&-/ >4%,  R##)<*/D0DD0,2/>-`'77'7$'_  %%%%.","&4632#"'32767632#4&#"'4&"26:5+(##9)P  *  ENJ2->-GA 1#@p6$&7~%%&&.d'==YO `: !#4&#"'632:T"(:7S\,G{/0R |BP_&a>%h" "#"54632&.#"32-W@kRI:%0{k#MI3N#g!!"#"5463253&.#"32,X@1*;kRH:%0yj#MJ)SI4M#h  *"#"5463254632&64&"2.#"32-W@ ",kDI:%0)2Ii#M $+kIu3N#g  "#"54675353&.#"32-V>:;pWH:%0%/Ni"M6=J-OI4M#$ 4632#5#"&74&#"326")'*;#a/2-n- %%%%&463226=3+"&=#"74&#"326")'*;H>>/2-j  «..(M%%%%bY "&54627"$!*u'"'/7>%+#5#5>54&'5353'4'65"#"4.'6&#',X; =9 9=(~nn+&'!2&33yz/!f ֬$2  @ 7#"&536324&#"326#+,6O#E .2-q-%%%%@'HH+52632"&54#"463232673#"&#"64&"263A "#V6=#j<%#  )XS1!  )/# ,@.2-,_ Ef +> @%%%%|&2<$"&54&#"&54632#"&546326324&#"3264&"26|#V69"!/##"(ER;:U  e@.2-)>=*!.-!,S1;RS:/%%%%%%%%z)>32632"&54&#"&54324&"26A?)#5"#V6+Y~  UL6!Q,@.2-&C%%%%   #4&#"'632 S")97P_,F[/0R |BP.5@4632>32#7>54&#"#.#"632#"&4&"326.:+   ./ /Q0  &$-!##&%q 8E 5;^L2II;5&-> #->-j%%%&z7v7A4>3232657#"632327.54632#".#".%4&"26z >,9 )+.!)&/ ""%!8,   6<  ''$' + '*; )"+<-?H"&&%%fO#".5V OHOOLe$232>73#"'527#"&44&#"32(!$7mt<M  e"3& >,Kk"$2' Id.9463263232>73#"'5654&#"#4#"#"&74&#"326I: "%7`]4 "O  /- (' >,Im 97 #$$ 6E ##5#5353373*66*377'66~"4632326?"#"&74&#"3261:$)6$%g  %7'# *%)Paa$4632&#"&#"327#"&54632& "5$ % - -- /N' ;#*-3%$31BP#$4&"26"&4624&"27#"&54632\zz=& B!0'3S."$  #(9  5'2l~GRszR OG 0r6Q%hDIc,%->/M%%%%X8B7"&54632>32 &=4&'7326=4&#"#.#"63274&"26$2@3, >:^c!?+PPYE%(#!   qX-8S' iE{`VPDNC26A16K /7, - /P$$%%87A".54632632'>54&#"#&'&#"327.5463274&"264>*`?8%I+U?- %!,( *.'! ##L5  (Q5SrONbT#RRmADL"07 h7-F" )--4;o%%&&9JZCM74>767>573263&5432#"'&#"#"&%4&"269 ,6 V## CF"a!}%L]  +" .<*&  )1B$La->.!! "!Sn$$%%8TK@JT74>7&5462>57#3263&5432#"'&#"#"&4&#"64&"268"?*M%.B.,> &6@0`H=[J@ >V## CF"a!}%M^P-=  !8#%+!..! .4),F) *$A%.C$La->.!! "!V\!$$%%W-774632#"'32654&#"'654&'7632#".74&"268.##.?2@@2I)A,GQ68NnnN4L$t  '0/-BcIJb $)@p H%ss&7-%%%%8`JT'>54&#"#&'&#"327.54632#".54632632>54.'4&"26{7Y9* v%!,( *.'! ##L,4>*`?8%I+U#"=>-]B+  `'0?6>"t mADL"07 h7-F" )--4;(Q5SrONbT(d"}O/ZbL %%&&8<V=I27#"&#"&5432327#"&4632#".#".5>324&#"326j7*#%$8OR##!2% %UB!&:"fIR> #3=nX"w:5:9.>-42!0 +*# (2'Oa)%%%%8V<F2657#"&#"#.'.#"&54632#".546326324&"26!' 6 q1K *.B##5)0I#`?81 4  s\w 3Kw/W +/6&&6&h7HV#--+,.D:SrON %%%%.$'1#2>32#4&#"#"&54632#"'74&"26$Q!& $ -P  3:5+(##  5>5*)@p6$!' M&%2->-X%%&&!K $,4<DMT^gp>7&54632>7&5462>7&54627&546327&54267&5476;#"#"547'"547.'"&547&'"&547'"&547.'"&547.'"&547&'#".54>32#"&54632#"'32654&#"32>7&546324#"6'4#"64'2'4#"6654''"6544'32'4#"6654''54#"64'24&+"64'324'32/# !  $    *      &   ! !#! (#!$e1?4#)>@ 57 +');- '&*FX@;9%0<46\?* )#4  N   V n       w  'IB G,.  #5#5"-  *# . 5   / .%!    !  $ !#  (<3 '  - / 6 &3  (4%R1/ HA':f@El<%N85O%,5'9  4+OYZJ8e?;^7%5Zc7P0  j      "*# #;<%$  (6 M &4.547#"&54632265n#12#I!D(4Tm'!9N9*,F,(4E#0 )+%Z$fjX"<_"'&#P#1%#"&546754.'.54754&#"326pQMr^G& ## iKWd7+&903&8MpqOHk    Hp(97)G:M 21#".54632#".5467326=4&'54#"; EMKG\3H;*za;>Z6,fQA13 *"7Nyc=Sz(J/ThM1a?;G3d32632#"&'.5'.#"54&#"26BIwGrP>!"G28;1AD`E_*[((P]=$`%MH1 #B/3#1g'*11255DB..8! i8D(!H3] <% N )%"&54>332654&#"#"&54632Xl 4$9*(<3#$4?"_QZko ]N"*"&&""'%$/)/BO[gUmM >%"&54>3326=4&+5326=4&#"#"&54632Vk:) 9(';11$5"#2(]L`b'N aI20  '%"t *%#1 '!BPj.2N( M )62#"&=4>=4&#"3"5463254&#"327N7>*VkNs2GF2),+aHI`0;&A9'a)0J#=(a>#%#%$%M "0%#654&'"#"&546326324&#"326FG12$:lUSmgZFLB8!3&>"&;=#':Xj,4!*3)Pnh\*Nf11"C-l1*!#.)M (732#".54>32#7>54&#" )9)R84M( 8-%7ET)387"#9< % *&"M)#"&54>3326=4&+5326=44a#>mRca:*8$"B009%b 9&@Z^L20(3x!(N ME%.'ᘀ.5432632>326=4&#"#54&#"#54&#"M5fxiVa-3.9/&I<0/(F2/%#.H,)S''Dm9 =Q6+-H,//0=<#$x!'*``/%#``1/Z%B-pM #1%#"&463254.#"#"&546354&#"326%T9MrqP6* *%8'wGPp`02&87+&87F0qr "6) ((9^oPG6*'99L %3#"&'"632#".5432324&#"3265 ,+a 0/*:= %S=%<+ C2E5,)6<%(6/ "O<(>C%&M4R"&#%'!1)M .%#654&##54&#"632#.54632632N?17!$0I;%&; 4@pQX-4P5:(Tm&8-$$1*!M3(wG2Bn$$)H+M ;%#".54632326=4&+532=4.'&5467)P<:A-%;%*8110 =$'W*<+`*@8!@()() +$< (  7 $M )2673#"54633265+5326=*N0(=';=8$50">':S? J6+)!&O/x )4G5- L <%#6=4&#"#54&"#"&546?67>32632BP25!$1I:L:('*?Ix-. *J4X9 Q:V)+W4H"Zd0.-#%!'," _{w.b'!?100$/&&&?< $#".55763232654.543,8)1U";(!RbV-5"'J1 5!%/')!6fD 0CP%#"&54672>=4.#326=4632#"&547.54632'54&#"3260$5V4pc,%]4@9&0 -"+AO)&=,j#sX0>B2!^l%l1B8$* */  6*P './1d#,k1/1#M 082#"&546732654&#"#54&#"#"&5432#"'26326CRSn9@;%':.Ha%g&PBVS(N(z)%#%$I``) I+ LG @;I#"&546326=4&+532=4&#"#"54>3263254&#"326@bb'T;Ul@:9N;010$  $O7B%<$$BLG"  tV_ ;?%[K%S"&&"0H%, &7F$$=!L 3%#"&54>332654&#"2#"&54632557673'Q8Rm 2%'.33% 8"g@3.010*.9>TR%&6 M :%.'ȳ.=4632632#6=4&"#54&#"BJvFrP>, cAI/1B#54FL1+:,U+* F?x3 'A/1!:!h9E11 FfI-""ll# [+(3%,UcM)%#".4>3265#"&54>332>=3Ͻ7S):*9N9/GO\ 3%4' 1aͿ);3&20"&&"7X1.20!M +9%#"&5463254&"#54#""&463263254&#"326)O7WjlU4-&H*+NN=",#"BR`>#&;8- =$>8 ZfWjII085X4?FB/+ !'&M !-%#>=4&#"#46326324&#"2>eC 1:VaSV>S"S,A(( 3..726=4&+532654.5472t#*#T(/X?6(CjB$$$!; %1 :!$>&4PB#.9J21  p8WV9w2..'6 L $%#".5463254&'5254&#"326qQ*8/!qO2/7*Hza7,&77*'8Ns )H,Nr'8tN+66*(99M -1;#>=4&#"#54&#"632+463263254'"2-   "I 078 :7!aIH;$$7*6%U 6L`  1yyI$G1qfBB$$*a`E M 1<4632'4#"#"&'326327672#"/#5#".5&#"32MS7)B(!*3*"1.TV .`&66%7.G<& 1-! ,*: lR :7 k (%#"&557632637354.#"326qQOq0\*7/00` *%:+&8NqqP ah'ܒ "9' #9M{/-%"'#674/#'763273#*#"7/0(xr6 0%~7 7.T`##s*#0r V; @*W'$$ + N M37632#"&5463232>=4&+532654&+532654&#"5467 '0'. U/2)R8Om$% a HH%HH'5R& 6><65 CH.H x,$(%$7K DM#"&5463232=4.+532654&+532654&5467>54#"g % %)''N)%&T;WeG8*0F3gZ !!!: 3(' "$5:M03MOEQp;1<= $&($ OdGK0IR 3$8%#"'#"5432327&54632326'4&"2>3-HD26,/#;&}\CE[W/<+q,8,! SIG+  GVh*OG2*a20j' M.2+>54&/4?"#".547232>iD1Noo$@\<%Q9 A9.#5,L+ %:C3];# (BR%#F '5" &M @2#"546332=4+532>=4.54632".'"%2A '?(@9;&`** +5+A("D %2;2.43 U&!I+j ?+&+/*-! 8M )2##"&54635".546323#3'54&#"5"32IJU@YX'8<&YCEWIII#7BD5<=5OICY;`7'DJCA`x ($$`&"Ǩ.`H! (#".5432326=4'&54>7.4.[i33265 =)/0KE:UDKne+GI& . Y6'i(/!.03(5HB5a?SxgX6O(%a:=H0!T>J2#".=4&'".'563.=4>32654&#"2636"VP$-"+ ! 0'\% "6%>zέ<*! J60$-+HH/ <)3G6"<" )/A(`d: <#f!/0؄ <% !*#".5>73>54&##"&546326N&8)7,&86!$.*^JO$5!/1 '&!5#$/*AO!:#"&5467"326=4&+532>=4&#"#"&54632gWVn:< B!$:113#,(%'YO^cb+9RRm\M+K *(s"'*0"&AOIGn :-! 1?%#"&=47>=4&#""5463254&#"326[fUlq4! +,$bG58$80'6(`:%&<>",5:VKEaR2 m "I  nF= 7$(*5!&% #&!  +7432>32#6=4#"#"%54#"26!#3 ++?!GI/Q3&Zh)b`=F?׸  ';.Vh10G/.JSpaII.0! )2#7>=4&##".546)9/!'1 ?#$;$3 o)J/3L$ "0*/-D6Zl!*#".5467326=4&+532=4&'52lQ4S>@8 9&(90;%4*c\a(9SZeK=2Iz!%#$1x!%HIQ2=K.'.'5632.5432632632#2>=4&#"#54&#"#54&#"Dz9t7-;+.=,,B<0-FFI ( !&H+1S#)34YA7D_* 7S6,,005[ x.)``*+``,00b% 2G`! !/%"&5463254&#"#"&5467254&'"26oQQpqP6*7)5 +mQ]e`5+*66*)7NqrNPq&9C "'@LqM-38('8;! "02327"&'"632#".54>54&#"326 R$:@Fi'8#A;$d_$=<# :/5,)61.6+ ;/*N4nV'Q9R/>"&#%#%,! 27"&54>32632#6=4&'"#54&"6321<&QI> #<40 #6-%gYM5V  #.+$<$)!,73265#+5326=32653".546;%">&:*S< `.b/%M53N*: .y '-G # M##='!48#R! ;26=4&#"#54&#"2#"&=46?67>326IU F.36!+)I=#&:#<-9]bE}!XIDN  1])#Ma)\L?-*/+##3<,Rg(<C[N06+ &&! '%#".55763232654.5463!:@&+9)1U !;(!T&&:2$#2 'J2 5!%0&>P$(95&=!.!=J#"&54632>=4.'32=432#"&547.5432'54&"3267`;t{M:?8$7%0 P18N+#kh)k^(##OJ1^j?5f7%$6  /$ >5*P $6\W3% j00A2632#".54673254&#"#54&#"#"&54632#"'32>')2@H&K3>>(>:<([G X!   )-PB)9&#A)4F(y"$G%#,__*E  $$!DQ%##"&54>3326=4&#"54326=4&'""&5467263254&#"26   aoSLu/ 9&(9(()'DEIM?WA#BGM6!% &D^WfaK " !%#$ #!H@N?QFG$(C4!!/25572>73#"&54>332654'"#"546.E01 0TmSl 7' <#*7T60HP$e[OZ "-$&x '%#3$#-f*H!RA%>=4&"#54&#"&'&'563.=4632>32 &+8,T+ 9T@ 6%MU :'"\F&,$4)>]Gl.""kk" S$!0%! (/D)r.X9"f7F3370Q!'#"&'4>3265#"&546332>=3_^Ot9(9N9/GTWD4<#0aT\c]L22 '&"6S=8Y1! />743254&'"#54&'""&5463672#".%4.#"3265F4-$H,MCH%)2)Q7-7(##&-6?%@/II1:*#: <;#(G# -&"*! ","#4632>726=4&74&#"26(-aPY?R164$WRI2( 61_tL]D6<;)`"L!54632"&=4>72=4&+532654.!&(#)#3,0Yubs7'/wv###"O% ."?IAoue.8I0138ux6(-)! !%#"&5463254&'5254&#"326qQNrqO2/7*Osa7,&76+'8NsrQNr'8qQ)86*(9:),#'>5."#54&#"!#&54>32>32#DG$("H )- 7(P&)#bJ); /5xx! {, #&G!LX$"/#"=467326=4.'5#"&5463254&#"#".5326327632/&#"32  0%/T\@8B*$/":NE8# 7 '91 HS0  TT < 0$g3U#(?!;d"#/!` M-3E * 9 V< lS k! (%"&557>32637354&'"26rNSo0 *7/00_7)+68)*6QorO ah&ݒ&89'(8:F6%"&/#52654ȷ'&#"&5467267#7327F;.L=4&'";C=03AD> <&SU02%#(+RH,  ITH&SD5H^? 00x-(x+!-2>32#>54.'67"#".5432$WA hD0Cet4'+N,#Q)8DG/#0/ !=4.+5326=4.54632 " 07WB'K2!;@&;>E ! **-,4,<+%*E(^;"c):* "G3&M3z"%  +6%6. ) ! %/##"&54635#"54623#3'54&#"5"326IUJBWesYYIII 6BD4<"@DNIGB`DJI;`x*$$`&"Ǩ.`H+! 3A4&#"326=463632#"'#5>=#"&54632326=4&#"B8'+67&,7sO*7/2OqrN4-sO*7/2OqrN48'+67&,7':9(*68)yQq8'rNQryQq8'rNQr':9(*68)!6%54&#"#"&54632326=4.##"&54>B3#+)%'YO^c;TU;:$!B <:nVWg;0E573267654.547>?2#"&54654.54>37632#&52++3P^-?Z&  '(^4j~D'!5?GS1U&6% EI%#"&5""#"&574654.5463232>54.54>376322>722)9:  21>32#".#"#!H"+ 8(y+ @ @M@   C% ;)8# G6P /!V  &P"N0*&#  *"X87"547#"&546543632327654'4&5456?632+!H"+H!y :7  gg  06P .!U a %^<  (2,Y=L747+".54654&547>32327>54&547>3232#"&74#"'326#$ K K3 8 O -l*56m. F 3K# U  +J%|% *+j+N )+,  <aB3232>54654&54'&54632#".5465#"54>54&547>323!4g!;8! [ 7>54.'&5476726.#">j#$*N /;-?T" "! ))%/   U X$  %D'((:'5&-#%U    :"()PRy)!!   G" %011!\074674.=4?2632+".'+"1J5 '*.,W %GO S cmM*3u\z2 -Ta88Q& 2\=7467.54722672#"&'+".'.'+"2R 'V 52/*h$)'89+T 2K Y`r!@  %F1[: 2 1-S  Wp# o%* 1\@7467.54723>467632#"'"+"/.'.'+"&1Q 'V !' !#;.1H#=  2g Jck @ <$2$3%Z'O(  *!2 2~t1`* &8#\4+"&54>767&546?2632+".'.?9\ H 2(9 6  ?##V l7 42#B+- P4?+;7  ) 2\3@7467.547>?232"#"+".'&'+"%4&+32652Q ' &*.P&5N'M1E"( 2pI9(/ &bn!@ P0V% /c! ^Q-MU;G7467&54632+"&'.'&#">32#"&732654&#"-RDJ 0%+ W $  KTE(3'%,$ /,d$#Hv!W 1 .)P0)iC- -3Ft1 8%'  >4*, 1uULX74>7.546?632>3>7>32#"#"547+".'.'+""32654&1@b0& 7  ! T> 7 ! '3u0?W(@E#"/qI!!cIz?  09 7&[Y @  + !a! M ( !9v\\7"&54>7&546?26232>72632#"&5#"&54654&546767.'.'#T 4K>9 6   F !  c 0-8'%71%..S?)c )4a@'P L1tA  1 6)00 / D8EU.JS74>3654.547>322+"&5>54.#+"5467"+"&5Rwd" O WqP6,.3  M)+G7)EpBd1 "&T8I  7#8  ?j$ ; )S72$ -Jn74>36=4.547>322367>32#"&5+"54654.#+"547>7"+"&5Rwd" O M[O/>1/ )(;c I4M8 M)BQ7EpBd1  "3    1 5+ $ D  &G0C ?j$ ; %S9 +  -Jh+"54>37>=4.547>323263>32#"'#"&+"54654&'+"&54>gG_-H#5GAB"  O  2? D. 3,GH @o_ E3,A=&%U.M1& ,+\  KZ U " 2 3&T DO@h% $ {mId7+".5467>3>54'.547>37632+"&5>7'.#+"/&5467, <1){4   "Fe +:I5 @  7'6# ,6/R)  (P1 W C/"2 b  ])JR^74>3654.547>3222++"54654.#+"547"+"&5%232654&Rwd" O [kLRd^KE4M8 M)BQ7 E) pBd1 "'M2*# + (E/C @h% ;%S9+ -ME"e4.'632>322+"&5>54.#+"54>7"+"&=4>3>54#"#'6 -'"* 1'WqP6,.3  M) +G7)ERwd"O")6F     = &T8I  7#8  ?j$ ;Wy)S7# -0Bd1 IQ74>3>54&54?6322+"5474&'*+"&547+"&58O_G&" _oN7[o B:S+ Np5W2" ;o! @))?    %@#'9)'/(tIs7+".5467>3>54'.547>376322>32#"&5"#'#"54654&#+"/&5467#".54654&54767272632, <1){4   "\qONB )(9 $}] @  7'6#29, U57   ,6/R)  'Q5C   0 6+%QEU b  ]) 'K69\]Ofx%".#"0&#"#"&54>323276323632363632#"5+"&54?>54'&#"&#"326326?64+"6323>k U(0&DsB '  $%.  ?>,i) =  .@$ - % ,^ P9 .  (1a3(LQ; *7Q/!  m% $)U+. "',@&#2M1 {:\OXo%0.#"0&#"#"&5467632326323632326327>323#"'#'&+"54?>54#"&#"326326?63232654&+"k U(0W*HR1B6$.  0 E.9I, .J;.@, )/#s?$ - % ,^   )=1a2&5m248" /  40B %# *"',@&#2v2.(`Shr4&#"##"54>?6363233263767>323"#"'+"547""+"&5464.#"#326767632?,  >\SmHDfZ ' C$    NH N"[$) B'$ E9$&X!fNJ/]I / \9X) 9312. 3JM'Z  W) <>(#E.dAdn%467"#".'&54654'&#"###"54>?3263232+"4&+"##3:3263263:32676;?4#Ll%$ ';\SmH  A!  *$  )  fNJ/]IJ&D  %c ) \9X) %42'! Y >H(#E+dKn|%>7"#".'&54654'&#"###"54>?32632322+"#"&+"54&+"##3:3263263:326763023?"326=4'"&#?Ll%$ ';\SmH  1> Nq&6,   1  *$  )  f  NJ/]I %"5[-"  %c ) \9X) , 0##*  A! Y >H #E+ );dGYg3"5467>7&547>763>32#".=4&'"+"#"+"4&#"#326=2>=J 3,D 3&lDEw?toR$E<  %  'R&  1 %355"  JR* 6 ;,B ^81%(V?6G ) !^ /JN&O0'/1376323#".=4.5+"&4&#"#326=%34>.+7N."| 0$VCx 1/72>323>321+"&5##"&54654&546767&4&#"#3263267632?[$%&A'$RI?PzY$ 7M /*;[Tj9,./R?) 3> $&Z  eNM[~HP +Y! 9#2K&&3/!  * 4-&I 2'W*CL$O>Uh#"'#"&'.54654&54;26323232637>7>54&5467>4&54;232654.5476;2632(T54&54;26323254&5476;232632*(:9   6k)H4G 5M L 5D+  hC5m    7+ 6- #2  !0! *   L( 7U   =H .* L9%4>7"'&#"#+#"&54654&56;22662>765<147654&'454;263234674.5476;2326363>32#".#"+"#"#"&+"%`>  {&$, ;&   ' !B-  A t  "G+/2$  .  $M0pb -$U  _ !  ) , (7  ]#7"65!- 9]%467".1"##"&54654&56;232>76?>54&54326323>74.54;2+"&6*"  W$, KF  !B- Kt BT0 -$U  _ A" &9  04 7! !CEDo}%467"'&#"###"#"&54654&5476;2;2634676474>54&5476;23>54'&43021;232+"#"&+"7.#&#326= )  +II#+ , # / % 3 @ ] XcDO%  1"#- V+?1#V a %>  &:439 4/54'4;23654&5476;232654'&54;2#".#"#"#"/&#"+"vw>) ,"!=< gL%02b<$X>, "4  #'[  n5D >1' 27.+"&5465454&56;232632726?654&5476;23274&5456;26:#"'+"`:kH%"+=" 3  0 ot 3  -aAZ8ED8 7b1#^  !N' U.)2 f;  0;(`\cvG8%467"&#"#+#"&54654&56;22662>7>54&5454;23>74&5476;237>32#"&5+"#"&'&54654'&546767&57>372327>32I5#MdvK1  G $9DE9$0(915(  * , B7^T 4&$#  -M71.0A%+5   RP&@7467"&54>=46;232>32#"&5#"+"&9TGTG > /BB/7L765 0 '9.9 r0;* $- y!4O$@9K k  #@-, IS% 2!% ,3'F6%) GM0'P%#"&5#"&54>76=46;2632327>;>32()::$  f<;\B_aJ -  7MPN7+#!) Oyi 5," & '5=6W>;P0 -J5/< %)$/'=" 11+GS%2#"'#.54>7<>2637263232>7&547>7>32654&#"3%6% % @ A&78!?\]F 8 ;9NL(/,!$ $Hy+$4(0  2#3V@?V2 ,J8)2=M"= #/ i*,!-'H%"'#".5&54&5>7272632;2#"&5"32>7>73I0J1*,sd:/ X 1+A)5"H3 1@( * , 2$& 2 +3F $ "#  -~IHV%"'#".5&54&5>727263232632#"&#"#".47+3263>732654.#"I0J1*,nh1 *"E%73<9"-  >MU)G@( *! $ , 2$$ 4 5(&9 )'rQ'"#  ( #0{v".54>5"&#"#"&54654.54632;>2;23>32#"&+327>;>32#"&5/.FdcF6. (= .AHF* ) +6,#32KWK2a!) Oy):* U / ;Y;=\=   -$  )4 #  6[9:.A$_'=" 4 5,) %-HS4674'4&54>26?26322##"&=>54&#"#"=4&-sO C   9G)45!3& KZ0   1 ~"  J 71'M5 & CQ C -Hs4674'4&54>26?26323;2632#"&5#"#"5465>54&#"#"=4&-sO C  Ha 1*9] ;E-D] 3& KZ0   1 t6 2 6, ?; j8/_M % >J C ,Hg4674'4&54>26?263223276726767>;23#"'#"'&565>54&#"#"=.,vM C  gO  @" : @Kr< F+B` 2 'J\0   1 FB% + 4^!80aM% ) BK C0U/,HV4674'4&54>26?26322##.5<5>54&#"#".5.,f] C   (A//;) 3  %7b0   1 ~" n-6!I2)7 &4-HZh4674'4&54>26?263222+"#"&5465>54&#"#&=4&4&+;26-sO C   &6,1 F, "0' 4% ;"1 'K[0   1 }M j80$A)Z\@! 0 -GL467./&'&543763263:32#"5465>54&#"+"=4&-h= 6& VYE*Bb 2 & GZ  = a# v~580`N% ) BK A -H]4>74'4&54>26?26323"##"54654&#"#"&=474&-CS, C  IR9 @/19'  %8  "1N& 0   1 ?7c/+6!E.; $+ 9: ;3.t Gg467&546?26322332632#"&5''#"'&54654&47>34654&#"##".'4&.B C     ((:;8T2%()E+19'   7  $Cb8' 4{5/- 1 8) 11.  D80"F\A  >pk2>7>;2#".#"632#"=4&5>54&#"#"&/&546?6=##"'>54'46?6@ ?;N!C* $F%* 1$=22 9&.5$ Z 6E(,P1 !X3 # 0 ]5*" ( +6)#G/# +E;;2M Z! #  2>7>;2#".#"2632632#"&5"#*#"#"54&54654&#"#"&/&546?6=##"'>54'46?6@ ?;N!C* $F%* 1 M;?o (+7 )  T9&.5$ Z 6E(,P1 !X3 # 0 ]=) -, 2 8(u 0#1*#G/# +E;;2M Z! # 02>7>;2#".#"63232?>264676323+"'#"&54654&#"3#"&/&54676=##"'>54'46?6@ ?;N!C* $F%* 10- = Q  4 P C'! <#-5$ Z XK,P1 !X3 # 0 ] /@; * 1 3 0*"F.5 +E;;FM Z! # p\2>7>32#".#"2632#"&54654&#"2#.54>75##"'>54'4>@ ?;N!C*! $F%* 1 \ 9+:h42F:,P1 !)X3 # 0 ^p-* *,&.\CLH0(D&d! # z26726;67323#".'&#"322+"#"'&546=4&#"2#"'&5&54675##"'>54.'6;234&+;2658C9^ /0# 7FR %6,_ 8) "+#Z! mGBO1    &.! "/ '& 8  /  ]52~M 25$, $=&\1   OM_ e"#  73 $q4'6323263>76323#".#3263#"&54654&#"#"&54&54>7&/##"'>[; Y8(!#) 5$#' % 0 Y 9&>Y <  );5; 1 "l ! !   - 8 ,#  F+4(^K((*]5%A'ZA#pt2>7>;2#".#"2632#"'&54&54654&#"##"&'&5&54>76=##"'>54'46?6@ ?;N!C* $F%* 1 =] R8& ",$  R  6-!,P1 !X3 # 0 ]3;\ . e#,":$'  !0 %;' Z! # (4>75#"#"'"54654&546323:32>72723>32##"&+2632;2632#"&5+"''##"'&54654'&54763:32;&546=4&#"2#".J2G:,%-  '08   " HC1 *  ))"5#$V +(9. 9U9,+?<>=&G[7)E'c   ! 5A $ Rp:  1 7+8C*  6( .)h8GA4@{GBXd"=4>7#"&=4>54654.5476372632###3263>7 %4&#">-  '0R7L[P  _ &J@-YQ  *|K    L9!!))GP +; M 2L-# $P=(>Y  1+& "@GNam"&5>7#".54>7>54.546372632#>32>323#"'"'263>7 %4&#">+'0?9L[P  _ 5;$*YQ %6)+3J GV@    K9!!)$i+; V  2L, $\,41 >Y  3\+& "@GQgs"54>7#"&=4>54654.5476372632#3:367>32#"'&#"#3263>7 %4&#">,  '0R7L[P  _ &J@-YQ # C- ;*5COK    L9!!)5 K4 +; M 2L-# $R?!,!* (>Y  1+& "GL]e4>3>54.5476372632##"&54654&4763232;267>5"5473272765654.'w>]K _/X#O03 $3Rj8)3   A -U:)x% !0 m",+> -3 38#*8))> 0 %  6}* >&@{G:P\k"54>7#"&=4>54654.5476372632#2+3263>7 %4&#">4&+;265,  '0R7L[P  _ &J@-YQ@>4K    L9!!)!, *4 J5 +; M 2L-# $;L% (>Y  1+& ") ?{Sbn4&'632632632####"=4>7#"&54654>54654&#"#"'>3263>7%4&#">B34 %- &J@-YQ  *  ,1N6LZQ +) K C$L9!!)X 5J-# $P=)GP +: T &>Y22+& "A3KXdu%"&=47"&'.54>765654&54>32632#654&#"32?4&#""2>7>5N84 FTI>"F.**?+ 0"I^ &>K  .#7 &k( % -4  2< F / .&, ,(=(     7   nS$.Y MY$U  @GYo{"=47#"&=4>54654.5476372632#32326;2632+"#".547#3263>7 %4&#">32654&#".!'0R7L[P  _ &J@-YQB )+Q )52; %F(W QK    L9!!).#$) +; M 2L-# $&6(%7! I(>Y  1+& "*")!@Gz"=4>7#"546547:3274654.54763726;22>54.5476;2232632#"&5"&+"54?####32?%4&#">.  8+~   _ 0b 8 A R 4'8/$  OzGoz7"&547467>7>54.54763722#;2+"&54654#"#"&#"#"#"&'&54654&476723>7&547732767"267654.'LNtM (   _ w^$$WT 4 .   8 '&9 % # ^ 4{JzI %:F 7/6?8 7& ,  T$4  4   H j 1zL2* lzGSoz$467#"&54>7>54.54763722#32"'"&"#"&54654&547>7'263767>57">5&'4&+;265 !WB2IH7  ^ w]2XO-1:(.|u  ^;,&%yG[ "L.M="'$ +<j"!0D? 16@8#!>M 1  #32)  ).S :@Gr"=4>7#"&=4>54654.54763726323:3274654&5476;2>32#"&547####3263>7 %4&#">-  '0R7L[P  _ ?Q /   D '+*4/Y  1+& "mx4'6323263:32>7>3232#"'6;2"#"54?65"#"54654>?#"&#>32637%&#">L'/ ! !l#! @" 5+JA' !0BX T!66R?@! V1"kA&Mb L:- 3] ` #   <5 @.<%7 ! "- ,K,oz4'6323263267>32#"'63267>323#"'#"#"565"#"54>?#"&#>32637%&#">L'/ ! !l#"K A#5+JA"Nf&8"# :7)+3J'.   S 62OA @! V1"kA&Mb L: - 3] 3+ Q,4  4<)< ! "- ,K,x4'6323263:32>7>3232#"'6;2";67>32#"'&#"##"5465"#"54654>?#"&#>32637%&#">L'/ ! !l#! @" 5+JA' b  # C- ;*5CN 66R?@! V1"kA&Mb L:- 3] ` ** ']  !,!* 0<%7 ! "- ,K,lu4'6323263:32>7>3232#"'632##"&54654&4763233265#"547:326=#"&#>2>54&#2635)- ! !l#! @" 5+J`e6 C%? "-Xj8)3   !GCe21 @" V1"D %.; ?/'- 3 b%3   !4,)> 0 @L 8x_! "-141grz4'6323263:32>7>3232#"'632#"2+#"5465"#"54654>?#"&#>32637%&#">4&+;265L'/ ! !l#! @" 5+JA"Fq9D4@>.D! 66R?@! V1"kA&Mb L:!-% *- 3] .4"  "K& 4<%7 ! "- ,K,1 $%"&=4>?#"&547"&+"54654&54632;2326;26?>7632#".#""7632632####"547"'32637>5.# T:6U8: n) )&8C!  - -')"   )9"'(G !<;# YU  +" +'@5&$(;5 %6 ; 5" 3#  9   (    1I.T"-Aby4'6322>32"632+"&=47"&'.54>765654.5467&'#"'26%4&54;2632#"&546654&#"32?4&#""2>7>-'"*&*5H3&0"I^ &>K  XN84 FTI &&-5#V <  8'#t.#7 &k( % -4  2< l!  9* '!(     7   F / 7 (#   !2 #S$.Y MY$U  4'6323263:32>7>3232#"'632"32326;2632+"#".547##"54?65"#"54654>?#"&#>32637%&#">32654&#"L'/ ! !l#! @" 5+JA( 9=$1v( G (!R 18O (_,!66R?@! V1"kA&Mb L:-#$- 3] ( %  "$;! 9 5 @.<%7 ! "- ,K,*")!4'6323263:32>7>3232#"'6322>54.5476;2232632#"&5"&+"54?#"#"54?65"#"&=4>?#"&#>;7%4&+">M)- ! !l#! @" 5+JA!7>3232#"'632";2632+"&54?."&#"#"&""#"&5>7654&54;263&5465#'.54676?#"&#>;67>=4&#L'/ ! !l#! @" 5+JA( 3?."HT 5 0  <  7  F'`  6P /.FB@! V1"iH,$,=<- 3H %    3)    >: "  35j! "1|8- ."9+O4'6323263:32>7>3232#"'632"#"32+"'#"&54654&54>7&5465#'.54676?#"&#>;67>=4&#4&+;265L'/ ! !l#! @" 5+JA#>?&"CL  F] %7* -# ^;+%.0[' 6P /.FB@! V1"iH,$,=N 1  35j! "1|8- ."9+1 4'6323263:32>7>3232#"'2>323:3274654&5476;2>32#"&547#"#"54?65"#"54654>?#"&#>32637%&#">L'/ ! !l#! @" 5+JA *J>/   D '+*4/ T!66R?@! V1!kA&Mb L:- 3] 1& E V  2 BK  <5 @.<%7 ! !- ,K,4I74&54632#"#"&=465>54654.#"2"#&546 vOd ,--;`#%ag|I<45" . $3&4dt ' =4T%"'"#"&54654&#"#"4&54>3267>32wK 0 >0/1  )' 2EV=Nc* G)# <3  d4 -E?4?+W;PqT5S- F: j "/ 4Y"'"&546?54.#"#"54&'467632327>3>323I' 002 & 2HRQ)LA  G./&4")#E / -X=)8' ;EG>`#)?248 !-  4E4>32#"#"5474654654.#"0#&54654&2GV<Od ,&' AW P $ Z4R. I<45H,  / oQf '  ?P4EU232#"#"&=46?4654&#"#"54&54>4&+;26,:;%K^ "4&"W@1%1  0 ' 0DT=0"3! '4 7&-  #";%E+>(R7'{vA?6T/ $ 1  4R"&54&'#".54654&547>726?>32##"=4654'&#"29 `B$ Gj K]H*K?$ ( !E//@!*3% 3A3 4L"@1*( D 04.;+X; 414>32"&=4654&#"#"&=4&1DT<+LA E.D.+5$ 4% Q7U/ @2(& #%0='R8  !"*t4f#"'&54654'&5476727&5465465.#"0#"=4&54>3232632#"&5'&#"#$8-)x3!5)@V F) 1FU=*L>"z ((:<A 8 &I,  #67++oR59)  A W4R- @146 ' 1 6*7)s226372>7632#"'##"ʎ./64&54632#"#"&=465>54654.#"2"#&546ED6  :+4H$$ S26. vOd ,--;`#%2    )"3  " / g|I<45" . $3&4dt ' =)226372>7632#"'##"ʎ./6"'"#"&=465>=4&#"#"=4&54>3267>32ED6  :+4H$$ S26.WK  0 >0/10 ' 2EV=Nc* G)# <2    )"3  " / D3  d4! $ - "5 4?+W;@>5S- F:h"/ )226372>7632#"'##"ʎ./6"'"&546?54.#"#"54&'467632327>3>323ED6  :+4H$$ S26.fI' 002 & 2HRQ)LA  G./2    )"3  " / 14")#E / -X=)8' ;EG>`#)?248 !-  7)o226372>7632#"'##"ʎ./64>32#"#"5474654654.#"0#&54654&ED6  :+4H$$ S26.2GV<Od ,&' AW P $ 2    )"3  " / 4R. I<45H,  / oQf '  ?P)m}226372>7632#"'##"ʎ./6232#"#"&=46?54&#"#"54&54>4&+;26ED6  :+4H$$ S26. :;%K^ "4&"W95 %1  0 ' 0DT=0"3! '2    )"3  " / u 7&-  $ "E'E(R7'{vA?6T/ $ 1  /)|226372>7632#"'##"ʎ./6"&54&'#".54654&547>726?>32##"=4654'&#"2=D6  :+4H$$ S26.! `B$ Gj K]H*K?$ ( !E//@2    )"3  " / S!*3% 3A3 4L"@1*( D 04.;+X; 7)[226372>7632#"'##"ʎ./64>32"&=4654&#"#"&=4&ED6  :+4H$$ S26.1DT<+LA E.D.+5$ 4% 2    )"3  " / 7U/ @2(& #%0='R8  !"*t)226372>7632#"'##"ʎ./6#"'&54654'&5476727&5465465.#"0#"=4&54>3232?632#"&5'&#"#ED6  :+4H$$ S26.8-)x3!5)@V F) "9@E0Oc69, *':!8C 8 2    )"3  " / :&I,  #67++oR59)  A]+G-!I<46 1 6+%GR%467#"&54654&54>7265>54.547>3227>32#"&5##" i3%&).Z* RU= : 1*9#:'  E. - 01 2  *7  d 1 7*%Ge%467#"&54654&54>7265>54.54632267632#"&5#>7632#"'#"#" i3%&).Z* Rj2& 1*9&>0Y!)5K  G,5 01 2  *7   ` 1 7* -. 3 #%Go"54#"&54654&54>7265>54.547>32267632#"&5#327263>32#".##- &i3%&).Z* Rh7!  1*9%>   C- +5& 1! 01 2  *7  d 1 7*  `p *#G_4>74654.546322632#"&5#"##"&54654&543232>7>5#"&54654&25X A +(87 $5Up$ 2 #N7I&A% )Vr !#V, 7* a-6+,  . 06'< $3  3 %GXi%47#"&54654&54>7265>54.547>32267632#"&5#2+#"7";26564'4# !i3%&).Z* R`9  1*9%5A>' ~ $'H4 $ 01 2  *7  b 1 7*(L% *'%o>54.5+"#"54654&54632;2>7>32#"&5#"'###"547#"&54654'&54672>38  <  #041 # w :  1);+3   3$l +,/Z-5 v W" 6V  3 8)H  .   #( 1 3Q^"&54>7#".54654&546767265654.54>32#>267672#"&5#654&#"0 cG %54.547>32267632#"&5#263632#".5&#""'#".54654'&547673>3& &iA$(*W?) Rh:"  2*92 "3%0 # 4W  g <1  4A 2  *7  b 2 7*1  3 *' ., ;z|26;>7>323#".#"#>7632#"&5"'##"&547#"&54654'&547>;>?##"'2654'7>323&o& :C6;*8% H x8! "+8d  Hf$ &J L [ t ! "" !$,#3h !9(   +  !2  *   A$!;z26;>7>323#".#"#>7632#"&5"'67272>32#".#"2##"&54?>7#"&54654'&547>;>?##"'2654'>323&o& :C6;*8% H x8! "+8d& 5)!  0% < E f$ &J L [ t !"" !$,#3h !9(  1  5  C''  !2  *   A$  ;z273263>323#"'.#">7632#"&5"'32?2>3#"&'#"#"&545#"&54654'&547>;>?##"'>54'4>@ 6 C6   :; x8! "+8d <4$$ 8%0 $ f$ &J L  v  *S3% 2 " 3h !9(  /U  /  '  !2  *   A# 1z63237>323#"#"&'>7632#"&'#"'##"&54654'&5432332676?#"&54654&54732>3267474654654&#+#"'7>54'4>32  YC6." $. 7  u=  /(74)Vz9(2A 3[b2%(n',  Ou  )D $- s # 7*dV%0.: .  %?e  21 4 ;A  :nz63276?6323#"'>7>72#"&5#"'32+"#"&545#".54654&546;>?"#""ਫ਼'4>324&#"#326;265 W H:02Fa d ,+'(;G.Ep&6,/f$ D(L "! ;,!*B' .! '. '"3    06) #) &  "4 1 #! 6X74654&547673>?#"&5467"&+"54654&4>32;2>;7>323#".'32>7>32#"&5#"'+"545#"&u  dL : o) (:3 K 5#:-"-R 8 28 8( )*:H @Ee3%'7 7 ( 7,   0'  S FN  $  ?2 OI 2  878>54'5>3223:;&54654&54763:;2#"'>72#"&5+"5467#0#"&54654&5476327654.54>?.#"#"4.#"32>$  #)    Q    ?0$+W-_B9 (,9A   O0 ,#  -%&4>U  08 =0C#'#   *  (+71J 8 >4" _' '/  9   (,  A T%,,;nz26;>7>323#".#"#>7632#"&5"'32632#"&'#"'""'#"&'&54654'&54>7&547#"&54654'&547>;>?##"'2654'7>323&o& :C6;*8% H x8! "+8d &,7*  0V% )-x( f$ &J L [ t ! "" !$,#3h !9(    400 #3  1  #  !2  *   A$!,CY43232632632654&54;2;2+"&546754'#"/&#"#"&="#".54654'4&5U!g  7 A:E7   ++ C  % S % *  *8 4  Cb43232632654&54;2;232672#"&5#"+"&54654'#"&#"&="#".54654&4V!wG : ,?0 (*95 E: ' $  , 'L#!$1 7+ *!  "1 ,Cy4;2326326326=4&1476;23:;232?267632+"'"#""&+"54?464'#"&#"#"&="#".54654'&4J ! d  3  (":& \ 0" M -0 -  $  , 'L .0 0 . 3?6  "1 , %C_4&546?632654&54;23:32##"&54654'&546;232>54&'.+"5465#"&'&546LN}) 7 ? 2@n;$1 J-WX6 3 R*% *  C  % S w-+?!7$1 ,   A-f!  $5  9C]j43232632632654&54;2;22++"&546754'#"/&#"#"&="#".54654'4&326=4U!g  7 @CB#@8   ++  .(&8C  % S %KRL% ,   *8 4  ( 7DU"5465"#*+"&546762725654&547632;2;2+"&546754'#"/&#"I0Z 0 V  5  A:E7  !=8  I`  %N % * 0Nfr47#"&54654&547>727>32633>72632#"&#"#"&5473273632+"&54654&#"+"%2654&#"(DG+5i1 h-#?<,/5 . #,),+N*   = X* @!"=,$=8 1  &,-C $$ !E0=>z  -&C|43263:32654&54;2;23263232632#"&#"#"&547#*#"+"&546754'#"/&#"#"&="#".54654'&2654&#"5W.U  7 BA! ( 8*56- / 3'47   E7   l2%2  C  % S ) 6'(67&! bJ ,  00 / !!'C432632654&546;2;2324654.54;232632#"&5#"54>7#"&#"+"&54654'#"&#"#"&="#".4654&5W. Y  3 (!4 $'90h2'<   E: ,  l15 )!  L ,1  4 n , 7, $09-0 *!  "P 2TC437263:326=4&1476;2;23:;2#"&+"&54654+"'#".4654&54>7&54654'#"&#"#"&="#"'&54654'&5W.< 3  ;1; 7   4 '!& <-  <  1 l15,, 'L 8 %.  T  ,T2   "P1 C{43263:32654&54;2;22"#"#"&+"'"'&54654'.547>7&54654'#"&#"#"&="#".54654'&4&+"32655W.U  7 ?M^"5$ $ o2J+2d6 ;  2 l2%) $)&C  % S ' e  872      00 / 6 >C43263:32654&54;2;23>54&547632;2>32#"&547+"&546754'#"/&#"#"&="#".54654'&5W.U  7 B9   7 E 130  G8   l2%C  % S !+ VZ 1 A 2t,(*   00 / 1ZB7;2#"#"&5454.+'&'4654.#&4636BAe 5 _!  8B$m /     kA[%"&5#*#""&=454&#"#"54654&54;632263232632*7,   I ' & C") i *6, %%    ! k  k M ! lAD"'##"&547654.'&"#"54654&54;6326327>3}J;F u ' & COI,"/3  ! k  k  "-  ?)I#"&'32632632+"54654&#""+#"54>7267263213(7"*:3(  l' <8 3 ?*O2 5 \ 6) a:@D  )  R'5," /]AAP%++"54765&#"#"54?4654.54763:36327226=4&#;(:-#91w0 #G,J^(!+ V! % " @ ! i  ]8)W -2'R4&#"#"&54654&54>?632;2#"'4?>54'&#*+"54?66 !2#&3N=n  P9*m  G  t N     56 3   4 Z# ?   D!?fT`"&54732>72>;632+"'4654#""+"54>726332>32#"&#"72654&#"u",),+ ) ?.( C@$3@/#7.?> ' ; .>!"y'! !E0=> ( $Q+F( - ! -&%tk)h46727&4654&#"#"54>7>32632#"&'3263263237>32#"&5##".4654&;2R4! Y+E)X< 2(5"*:3(  l)B(  ((<=Uj<0   S5A0( 2 6) a:@?d    4, 1E0 Izv4'4>323>7232>56;23#".'"#"#"#32637632+#"&5454&##"&54?654#"+#"'>* b &[..&  " & z#$s !"  /.  F    NA#Hz2>7232>5672#".'&"#"#3263232632#"&5#*#"##"&54>76545.'"54654#"#"&##"'2654'46?6A 2&B &NE%  #   0% i  **7(Y  <D&E1z "S3 +/ _   5 ! 6,  +V% j@$" Hz2>7232>5672#".'&"#"#32?26323272>73#"'+"#"&54>?>545.'"54654#"#"&##"'2654'46?6A 2&B &NE%  # &$F 5 /*$:+3N Q 5 OE1z "S3 +/ _  D5  )"3   ! % j@$" 3v2>7>3#".'"32632#".'"&#"32632+"&54654�#"54>7>7##"'>54'6E9cN !* "$ "$W, #H4E&x(D AF@& 4 O1  o2  .  :  * +V?>=   Q6$  !$+j}2>72>72326763232#"'326372632++".'4>?65.#"&54654'"&#>54'56"32632>5654&#&D ( + 8  Q 6+GI'*(:.#9 b H;-"0A-$a32 / 4k  O9 @! #  i #!,]  6v&54>7#"#"'"54654/&54322326;:3267>32##"&+"2;2#*#"#&546?674+"54?654&'"#"&54654&47>3,*   5)GV. >'&  .)! 4) Q1 6s(!J!  3&&v   6( ",     ] " # 6 8  55 2  3r~4'632723263>32#"&'23732632#"&#"#"&547.#"32632+"#"&54654&#"546747##"'>2654&#"i 2B   , N"3+ 4E -:*4&!/# 6 *%<4D&!Z )  ! I@w: 4 Q0 $$ 2$0 >) &)"$ X@;A    TF[E"$+6t7"54>76567#"+&54654&5432;2;26;23267>32##"#*#"&+"2632#".'"&#"+"#"'3272>373263237>32#"&5##"&54654&546727&4654&#"+?:DA2 ,' 5)F3 0  ?'    !*  T! # % ',%B(  ((<=Uj<0$2R4! ? P5J! !5( "-   & 4 + (/$<$   4, 1E 0   /8T7467#"&'&'&54;2322+".'.#"#"&+"#"&5/gvX  L)7  ,;,  H 47 ,' ;  $Gk4& u 4.U%   %=!&El+! /8Y7467#"&'&'&54;232232672#"&5#+"&'&'.#"#"&+"#"&5/gvX  L)8+rT *?01*94+B  63 -( ;  $Gk4& u )5J 2 5+#t #LI"Im)! /*8c7467#"&'&'&54;2322272>7632#"'"&+"&'&'&'.#"1#"&+"&5/gvX  L)8+, 6#)5K:  M /# 2 ; $Gk4& u )' Z/  ) 1!JH  &s7!/8T7467#"&'&54;2322+"&'&'.'"&#"&#"5#"&+*1"5&5/VTL)8;'3B.(A   %  BL,)^ u(  <= KP   32  /8Vb7467#"&'&'&54;2322632++"#"&'&'&'&#*#"#"&+"#"&5%4&+23265/gvX  L)8++ CV&7/A   I : ;  E#$4 %$Gk4& u )-L  &IC, _V Ei(Ln4'>32#"'>4>7#*+"54?>32;263:;2+"&'&'&'&'"&#"#"&+"#")!hN-3rbe +1  2  '  /7-  4  9 [ 72# 5?d  -      5.d, KM. sO% / 8O7467#"&'&'&54;2322+*#".'.#"+"&5/fwX  L)7  '@-    2  :5HL !Hl4& u  #" %"&>  }4'632326;>7632#"&'322+".'.#"#"&+"#"&5467#"'.'&#"##"'#"8#! 1'B! b   9&/07  ,;,  P 47 ,' ;  gvK(}#1 1 L/ 4.U%   %=!&El+   GkT @#Bm\7467#"'&54?65454.1&5463637632632#"=46=4.#"#".'454&B:   $'OQ33 #& )# 4Q #)  LbS!  *k/ 5$  B.+(v  nAmk7467#"54?65454.1&546?632632672#"&5#"&54654&#"2#"5'.A;    $'OR%B7'*99  &  7'7P.& J` S!  *k/=0?   6* )# !(-8wF,UBmZ7467#"54654&546723>3263232727>32#"'#"54654&##".'454&B:   'MR>b 1 C#! "9M G=);%5O? Lb *k/;C# ,3 D;91y  nJmT47"#"'&5654'.'&5463637632632"#"=46=4&#"#"&JG% $GX14 #(7'8J H ]=   c( 6&57C  ,5qX!& 0AmYg7467#"'&54?65454.1&54636376326322#"&546=4&#"2#&5'.26=4&#3A;   $'OQ%B8 5N(%@7S $ ''1J`S!  *k/32u= B    $' XE43 + )7,29   %   \ F7 |) .A( 5#08?>/5 [6"*P0  BmX7467#"'&54?65454.1&5463637632632##"&54654.#"##"&5'&B;  $'OR22  %")&6R  (  LaS!  *k/ 4#b  %r&0 s ""0Q>Cv4&54;2#*+"546"&547#+".'&54654.#"+"54&5'&54>32:32;26;232632#"&#"7"32654&L  0 1r)5]7 .#7M9  "1V5Jq * /  ( 2 +54+ 5 .9"!#  7S Lw5'yY  E92;22B$ 6F9'SH6(&7!! >Cu4&546;2+"54647#+"&54654.#"+"&54&5&54>232>76;2;2632#"&5#+"L 0 1*i ; )7M 9  "2VjQ(fP9[ 0.8.G9 R L &2Z352; $*A$ 6F:(&8.', Y  2 7* QoCs4&54;2#*+"546232?674654654&+"+"&54>3232+"&54674'"&#"#"&'&54654&547632_  0 1i@XO ) 8 *L0Wx9  6  =$(    7S LC kOK8QC ;PA.s]  1  / :22QCy4&54;2#"&+"546##"&#"&#"#"&54654'&54323267654&546=4654&##*+"&54654>32324&+326_<  3x\H (/:#2$E`A2-0 8 )U8Wy!.:(f%5  V L   *.,  $ %&IY7    M[?t^ l>hC4&54;2#"&+"546"&5"#+".'&54654&#"+"&5.5>763223:;254654.'&54;22632L<  3(8 7 5*'.!  7 =08F4[ N% T* V L9) 33PY    ?J,+(L*W9[`  Cn &-) 6  <,3  63237>322#".'&#"#632#"=46=4.#"#".'454&5467#"'&54?465454#&##"+"'2654'5632} gD) 00& 1OQ33 #& )# 4Q #)  : . $_&#/*=#. n/ 5$  =.+(v  nLbV .%  63237>322#".'&#"#632672#"&5##"&54654&#"2#"5'.5467#"'&54?465454#&##"+"'2654'5632} gD) 00& 1OR%B7'*99     7'7P.& ; . $_&#/*=#. n/=0?   6* R ) # !(-8wF,UJ`V .%  4./632>?>32#"'63232767>32#"'#"54654654&##".'4&5467#"54?654#""#"'26?#/*-? v"/  7)I: MR>b0 C#! "9M G=) ;%5OL  :   : $m &$   . 4(1 /;C#' ,3 D 91y   nLbV . ~63237>322#".'&#"#632"#"=46=4&#"#"&547"#"'&54654#"##"+"'2654'5632} gD) 00& 1GX14 #(7'8J H G%. $_&#/*=#. 'J( 6&57C  ,5qX!& 0E]=r .%  Z63237>322#".'&#"#6322#"&546=4&#"2#&5'.5467#"'&54?465454#&##"+"'2654'563226=4&#3} gD) 00& 1OQ%B8 5N(%@7S $ ; . $_&#/*''1=#. n/322#".'&#"#632##"54654&#">32#"&5&547#"'&547#"'&54?654'&##"+"'2654'5632} gD) 00& 1XE43 + )6,29   %  = B  . $_&#/*=#. L ( 5#08?>/5 [6"*P0    \ F7J% .%  63237>322#".'&#"#632##"&54654.#"##"&5'&5467#"'&54?465454#&##"+"'2654'5632} gD) 00& 1OR22  %")&6R  (  ;. $_&#/*=#. n/ 4#b  %r&0 s ""0QLaV .%  663237>322#".'&#"#63222636322632#"&#"#"&547#*#"#"=654&#"#".'454&5467#"'&54?465454#&##"+"'2654'56322>4.#"} gD) 00& 1OQ32V+  /0 )55+2 0 )4: / ):%5Q$)  : . $_&#/*#=#. n/ 6% 6$)77'@:2v nLbV .% D " e2>72326;>32#".'&#"#"63232>763:;23:;232632#"&5#+"&546547###"&=4654654&#"2#"&'&54>7"#"5>54#"#"&#+"'>54'6323 ?. [ C1   #' &\G21] P8 a  -)9.L^  >"4S.  "6  2O-  7 >%.  V. 6%((* T    7+  $! 7/x,FV6V" v ! # 267263>32#".'"#63232+"&54674.5##"&54654&54323274754.#"+"&5467#"4654##"&#+"'2654'56323:APD*! &% 5+8'CA&9  F Ig8+*'C'(4 7 9&)$ #O-'#3! > #. _#2eH  0  / 1; * @8 7$&{;2  7b ! #/23263>32#".#"#63232##"&#"#"&54654&54322>76=4&++"&567#"4654##"&##"'2654'56323264&+26, Z D*  & 1.3W|!.:(\H' Y7--D4.C)$14H)$ %)O- '#3! 9%8#P#. _#q[1   > 5  =\wi-b ! # Hl  63237>322#".'&#"#6323265654'&54;:322632#"&5###"54654&#"2#"5'.5467#"'&54?465454#&##"+"'2654'5632} gD) 00& 1OR8]) M P2*8    ( %<#5QG' ; . $_&#/*=#. n/30-  <  2 6+35I.25/v F,UJ`V .% @Y,:I2>;2;+"*#"#"&#"##"&54>&#"326%4&#"32>@ 12 XZ""-a !  *  6NT #5_5;  3, !/:&: "076323#".'"#"&5"#"#"&#"#"5467632764&#"%4&#"327>.7J hf//. c9 :%( G= %  -K&$@$R<8 (:& = " ;UAv / /  h($@;  "*'{A2 _e\c73Qc2672632#"&543232654&#"3263>32#"'+".5>7#"&54>32>7"&#"('4-@T %?', ?(#   HC.3,FU04)134 "M&,&73>S"547#"&54>32>3>7>32#"543232654&#"32>767"&#"!;!?J4L=   3=VhLA  =&  !7~)"  $7" =2/DM9C` <@*9h`  g" ,&Kv4DR^"54?67#"&54673263>2>762"#"5463>74&#"2#"32>7"2654'4&+:=Hwk  "P=5 G  )<!"=<$=9!D+  :S#"*# !%{: ;2BY!1))-$#S5lxY %  g" !#@!Y L @YP]u26;327>32#".#""#"#*#"+"#"&#"##"#"&5467>&#"326%4&#"327>A %pYG C-   -3! !%<(!  <!PR#s2<  3, !08& ->"HE       6K',90p%1:#?5a4)6AM7"=4676?67"&54>7326;2#*#"+32674&+2326DBc 'n_ /S6 'Wi_9%  !E. 5 9G3$*3 3# 2?> :$"/'P?>T  + ;6 !=58&A2N8".54767632632+"73>76=4654.'!*;|   .0P8J" s *:%  (SAM8{A[  EP2h' e  !(:8%2EN5Q"&54>76326322672#".5+*73>76=4654.'/ +?9#  -&-)  2&0 R4M R*:%  (TwxAb;&  6$7 0 *( p (=  !(:8%2F<WPf4.547#*#"&+"&54632326327>3#"'"&+".'4654?6%32632>54&#"  4@z(?  E ]H,"2%T:  B  <" 1+4Nb( :,L^v'M#    "- 2   @!,S./K<0W1G%"5474?654.547#*#"&+"&54632;2#32632>54&#"# R  4@z(F g  " 1+4Nb" :,L^v'M  !,S./K;NCUd4&5465+"#"&5467632;23+"#"&+"&54>?>'2654&#"3724&'"&"3256#!95&?OY#C * #A?  8 6 ?4L#*"+   K1H <(1=#F-P  @$   }$!::?$6 .& #1Q% A0/D7467&/.5&54;2"2"#"&73267654654.'A@Z @  (Z :,n #8g: E1+ot, . 5%$:$$+ #OX{^4 -; >R@C+N*97"&54>767&=47>32+"+2>54#"t!C.Mr>YO H1A{  #4u 8E@N)($,Q63?+S + =(~x ]"T7>54.54>:172632#"&=67###"5454'0.547>32  $ . 80  % &/ B*H K)#$"" !#BJ$"f7>54'.54763632>72#"&5#"&547###"5454'0.547>32  !#g. *(;=  $#  % &/ B*H K$ !"0 5+M.(*!#BJ$"b7>54.54>326323272>7>32#"'.##"&54>7##"&5454.5432    (. (  C%   *1=a  F/ Z*H K"#!2     " (. !-X5  %J"S7>54.54>:172632#"&=67"#"#"5654.547636372 $ . 80EJ$  K(. 9 d K)#$"" D  ? $"Rf7>54'.547>322#"#"&547###"5454'0.547>3226=4654&+"3  = "4&!E$  % &/ B*"+"!+  H K$ & %BK   !#BJ$(% f2>74654'.54763632#"&=4>5##"54?654&+"#"&54654&546326B& *  O###!&qx  #BCA "% %6  1"97>54.54632#"547#"5454.5432   E). [( @&/ Z*H<1  >9&g  BJ"tr7>54.543263232632#"&5"#"'#"'#"&54654&54>7632727&54?""#"5654.54372 B+/ $ )*9 0  : W -)  &    K(. !9 d L B"$17) !) 2 ?D  ?  $&5`?>7>32#"&'#"&=467#"#"5454&#"#"&54654&54>7632 ='-h0.&8, E    *+'/<+':S4a#M%.( 2 5' P(  S D.$#?2632#"&'>2#"&5"#"&=467#"#"54?654&#"#".=4654'4&54>76;2 =' s1.&8 7f* *(; $#      ! '  <+ :S*3##M%.+ 2 5' #%90 5+$!" =`"#D FA $# ?2632#"&'3276707>32#".#"#"=4>7#"#"54?654&#"#".=4654'4&54>76;2 =' s1%&8% ! D 9+   ,6$ _(    ! '  <+ :S*3##M%.+ 3 5'F     B ~P =`"#D FA $# ?2632#"&'#&=4671#&'4&5>54&#"#"&54654&54>763.\C =' s1.&8 , *#$ FTI   & *4L *@ M%.+ 2 5' +*(A  $/;]&!  &9  2 &5{?>?2632#"&'2+"##"54>7#"#"54?654&#"#".=4654'4&54>76;226=4654&+"3 =' s1.&8% %5- #)     ! '  <+ :S*3##+"!+  #M%.+ 2 5'0;n?M AVy& =`"#D FA $# 7635#"#"'"54654&54323:;2326;23267>32#*##"&+#67267>?2>72#".'#"54&4>7"#"#"5454#"(4S ,'+  4'>, - #  A'3 %(!6 #]KD, @2(#,, 0 %# ')f  ^%.-$ 3   A   !+# "-#  8 ,! "'3 &  -&   @ dz  !96=< &9 &42>72>?>7>32#"&'#"&5467#"#"54?654&#"#".=4654'4&54>76;2CN *r0 3&9" (!'   ! '  <+ :S*3##)' 1 5'  2k=`"#D FA $# ?2632#"&'32632#"&5"#'"#"'#"&'&54654'&547>;263&=467#&'4&5>54&#"+"&54654&547>763:.\C =' s1.&8#   } +(: '  . I& & A6 !FT I   & +7D *@ M%.+ 2 5' nG  8 6*#3 0    $ /;]&!  &9  2 0(-;##"&+"&=4.54>;2'">74} %  '! #:eB;2#327272632">74)9   - 15qQ65'4F-! ## e *'3"7Q%i5,` 9d"6)!;<$$(@$     1  E/'5).0(Yg%"&5<5#+"&=4.54>;2#254.47632;232632#"&5">74U C )7sQ @3} &B  7) i1*:'3"7Q%z B &T1#!::"'Mf# ; 7+ E/'5).%OD+=723267.54632#"&"#"ʎ'56">54&!E 4"o] 7  BTC6*K!4)8- g ^W-`v\Mg  5." ,7&!:%&0L(M^k%"&#"+"&547&'+"&=4.54!32#3326322632">54&"32654. = ( #<"   4 <1y$  1$ 0. !'% )!.G'"X ' L ' T /&'Ne&  '&">( #+  4iDQ]7232327.54632#;254.54763:;2+"'#'&#""&54654'&5463:"654&m6.,nz !)@  + 7>)F#- 5(*  (; | %4Xu]Mf&9& O8 !&  #> 2 +@2$%0(GU"&5"#"&##+"&=4.54>;2>32%">74X*9< $-Y5% +8oM<-+J 2'3"7Q%8)"] 'S'8*::$&5.   E/'5).%26GS72327.5<547632#32632#"&5'#"&54654'4&5&54">54&VA(B AGEu ; U .':4:)1%,D3?+% _F$+ "-Lg\2 6, 0< 3 Uh"B++GD}2327&54>32#326?63232632#"&5#*#"#"#"54654&##".#"#"&54654&5476%2>54&#"W"B6*DE$ $'$" ,3i )):6H l  ;#3 .6'(./ ; 86+>Z& #  6, )'  #  +2 1.7")<,7+/D2327&54>32# 26372632326372>32#".'&#"#"#"&54?64&+#".#"#"&54654&5476%2>54&#"W"B6*DE$ $'$" ($ H =3& 4&' ($ ,  L  ;#3 .6'(./ ; 86+>Z&      -  &v  +2 1.7")<,7+`Dds22327&54>32#32637632#*#"#"&54?674#"#".#"#"&54654&5476%2>54&#"V*< 0*DE$ $'$"   #("  43  0n  <(1 .6'(./ : 86+>Z&       (  (8 8 /7")<,7%6IU_72327.5<547632#332>32#"&#"#"&547'#"&54654'4&5&54">54&"264&VA(B AGEu ; " ,'C;(! 2 ) (5:)1%,D3?+%, _F$+ "-Lg\  >%!))" 0< 3 Uh"B+c"*%6bn72327.5<=4>3232672#"&5#"'"#32632#"&5'#"&54654'4&5&54">54&VA(A 0eIHF,1B. *+7A  $)T4 ; U /':4:)1%,D3?+% ]C#?A'"-41 2 7*\3 6, 0< 3 Uh"B+QEDT7467&54>3232632#"&5"/.#+"&">54&QmbA .T5A`:WD  :, B" 0,:: =K *c/?)<(/IAL$3*)04L%  * 5. }D XD #!( '+tD2327&54>32327>36323:32632#"&5#"&#"##"&'&54654&5467263&54?654#""#"'&#"#"&54654&5476%2>54&#"W"B6*DE$$5C4   "H0  )):B6 3 15(1T6 ;o$  9&1 .6'(./ ; 86+>[$7  1 6+#Q 2    +(5 1.7")<,7%l.Zc46;2+"&5232>7'&54632#7>32#"./.#"#"&54654&54"654&1 @  D #>!aQ97!i1s7 )  '98, 031 %D/  E  C dF1Tp +FS' 2    F 3:h#0=4632;2#*+"&5<52327.54632#3263263232672#"&5#"2#"547>54+#"&'4654&5476"2>54&  1  1-;-)+v_k &:51B. *(9 . Q7 %81# , &..  &%  7  s'BQZFS'  2 8*0 %  )  2=<-0 )f=4632;2#*+"&5<54654&54763223>7.54632#3263?2632676323+"'"+"#"54?654.#*#"#"&"2>54&  0  1 =#%&-xb1M5"## % %.+  T  1 N%*9 =w!<(1D &  (%  9 #3 w'CR\*= ? >0.3   )9 3"6 "&=g{4632;2#*+"&5<52327.54632#326376322#"547>54+#"&'4654&5476"2>54&  1  1-;-)+v_k '"#; Q7 %81# , &..  &%  7  s'BQZFS>" %  )  2=<-0 )%S.T^h46;2+"&5232>7'&54632#32>32#"&#"#"&547'#"&54654&54"654&"264&1 .  >#>!aQ97!i' E<(! . & ',031 %'/* <  B dF1Tp +FSv *>&!))6( F 3  TM$h#00,%.mv46;2+"&5045232>7.54>3232632#"&5##7>32#"./&'"#"&54654&54"654&1 B  @ #>!&J3 0U!)8De1s7 )   031 %D/  G B XK#??(]  5,>R' 2  ' F 3  :h#04=Xl4632;2#*+"&5<5467.54632#32632#"&5"/&#"#"&+"&"2>54&N  1  1hh!!zbk2d2 G ,'7831Y  &b..  &%  7 Jz!`#EO[ES*  3 9* tR  <-0 )Xv46;2#*+"&5<52127275.54632#326323023262#"&5#"#"'&54654'&547>3&4?654#"#"&54654'&54?>54&#"326 0  0)8*&-ycl%A66 - +'9y$C2%'.+h)9+18Y%'5 _ 8  v'DQ\DS? 2 6+  000   $k$     < 3x B4(559%A2>7>;2>?2>762#"'"+*#"5467""&#>54'>232>7'&54632#7>32#"./&'"#"&54654&5&54"654&B 1 8 < $8L 7 B 5'Z! 37#>!aQ97!i1s7 )   031%D/_3   03 O 1)#"  dF1Tp +FS' 2  & F 3  :h#0/2?327>;2#"'+"&54>7##"'>54'62327.54632#3263263232672#"&5#"2#"547>54+#"&'4654&5476"2>54&BI'wD* ;+4IS 8 4P2  -;-)+v_k &:51B. *(9 . Q7 %81# , &..  &n3 # ,!3L "! $ s'BQZFS'  2 8*0 %  )  2=<-0 )fE2>32>;2".'&#"#*+"&547"#"'>54'6323264654&54763223>7.54632#3263?2632676323+"'"+"#"54?654.#*#"#"&"2>54&D-=D*$ 8:& "  7  S!  3"# 2& =#%&-xb1M5"## % %.-  T  1 N%*9 =w!<(1D &  (K#/ D 7# 3 w'CR\*= ? >0 .3   )9 3"6 "&/z2?327>;2#"'+"&54>7##"'>54'62327.54632#326376322#"547>54+#"&'4654&5476"2>54&BI'wD* ;+4IS 8 4P2  -;-)+v_k '"#; Q7 %81# , &..  &n3 # ,!3L "! $ s'BQZFS>" %  )  2=<-0 )%SM2>7>;2636?2>76322+"'"#*+*#"'&5467""&#>54'>232>7'&54632#2637632#"&#"#"&547'#"&54654&54"654&"264&B 1 )     $. L 7  9  5'Z! 37#>!aQ97!i'  E<(! . & ',031 %D/*_3   03 71)#"  dF1Tp +FSv *>&!))6( F 3  $h#00,%M2>7>;2636?2>76322+"'"#*+*#"'&5467""&#>54'>232>7.54>3232632#"&5##7>32#"./&/&/"&#"#"&54654&54"654&B 1 )     $. L 7  9  5'Z! 37#>!&J3 0U!)8De1s7 )  .%7  031 %D/_3   03 71)#"  XK#??(]  5,>R' 2     F 3 $h#04/k2?327>;2#"'+"&54>7##"'>54'6467.54632#32632#"&5"/&#"#"&+"&"2>54&BI'wD* ;+4IS 8 4P2  Vhh!!zbk2d2 G ,'7831Y  &b..  &n3 # ,!3L "! $NJz!`#EO[ES*  3 9* tR  <-0 ) XE4'632323?26;>2>7>32#".#"#*+"&5<=#"'>2327275.54632#326323023262#"&5#"#"'&54654'&547>3&4?654#"#"&54654'&54?>54&#"326E)-"  -, B&   %  ? 86 V0 "(8*&-ycl%A66 - +'9y$C2%'.+h)9+18Y%'5 M 1  : 2"# v'DQ\DS? 2 6+  000   $k$     < 3x B4(559#55%45.'"".54654&54673>3"#"G4$9+ )?'61LH  (3d$: -J0  K0 #5J"54765.'"#".54654&547263>72#".'"(& 44$B# {T&0MF]$ 3 #3   6B $: 5D4 K0 1 *   #5>%45.'"".54654&5467376323267>323#".#"H4$:+ +=-,.TH 6E4:+4& )3l $: .J0  G8  % '%B2I4.#"#"&'&5467654&54>7632##"&54654&547>;2>54&5" H& *j%$+$M )8^iO;+,g1Ke6 0  >: , :0Y:Q;$*P 4 "CO6!!#E5;I2#"##"54?654&##".=4654&546732634&+;262#<'*4 *;HE7 )3PH4#"#".546=4&547672765<=4.47>322"&54?>i  + X+ EJJ > U) . %+2   + & H&F"  T )#@5Xe%45.'"#".4654&547673>3;267232632#"&#"#"&547#""#""32654&G4$B# U)71LU & 9 *47- - 0 )3e*  ( +!3d$: 5D2  I6Z  6R38%  6###<5n%46?4&'"#".4654&547263;2464.547632;222632#"&5"&+"5467###.$5$2%{T&5H A  ) ,6P-*9;# B/  M1 [\'9 33 2Q+(22p 1 7, 5+ %5_4'"&##".54654&5473263232+"#"&=4654'&+"#"&'4654&54>?>II G ^y0G76?67654&#""#".54654&54673>;22#"74./"32561GD2&$$B , ^7$!"&  (?/E 5KLG_&7/<  (FY  88 4     = 4 %5 2  H& *! M =% #5d%46?4&'"#".4654&5472633:326746=4&5476;2632#"&5+"+##.$5$2%{T&5H 8  C U3,7 !W/  M1 [\'9 33 2Q+(H ,= 1 9/+ %T1f4'56323?2>7>;23#".'"#"45.'""&54654&54673>3"#"-),/,  D' ;$' >+7G4$9+')?'61LH  (^!  -  d$: -J 0  K0 .w4'56323?2>7>32#".'"#""54765.'"#".54654&547263>72#".'"-),/,  D' ;$' >+75& 44$B# {T&0M F]$ 3 #3   ^!  -  6B $: 5D4 K0 1 *   1p4'56323?2>7>;23#".'"#"45.'"".54654&5467376323267>323#".#"-),/,  D' ;$' <,7H4$:+ +=-,.TH 6E4:+4& )^!  -  l $: .J0  G8  % '%92267:62>7>32#".'##"#"ʎ'56"##"&'&54654'&54632632##"&54654&547>7654&=4&!)   D%   *1'  ZQ$+6) $ ' I*^!2R2a{`;+, i|8         2!!2 *  ?H CX; *P 4 .00Z <41ft4'56323?2>7>;23#".'"#"45.'"#".54654&54726322+"#"74&+;265-),/,  D' ;$' >+7H4$ +z\-Q2K` %8,#)# +^!  -  c $:  %*1 H6  !`9T2fr22672>7>32#".##"#">54'56#&56?65.#"##"&#"#"&546322>322654&#"d@   H :*6 $  ZQ8, * &$02'!6+5 'cK&:;5LH2   )" " 7L $;")6 )":G Q*6*)Fk267>77>;2+".#2"&54?>54#"#".546=4&5463267654&=+"'>54'6U@ ( - 8A1   *4#  &JJ > U) i B$R &6 Q0 !p3%   [&F"  T ).5D3   >"#?k463>32632###.=4&'&#"#"&5465?#"=46567>d 259g ".F)  C  =)  =/& +    *r]3   "   G   >V-O^?463>326327673233#".'"#"#"##&=4&54.'&#"#"&5465?#"=46567>d 44(8/$A ^   )6%    #&$ ,:  C  =)  %E,7    D" . 4PX' &    G   >V-O^?463>3263232?>76;2#".#""#&=4.'&#"##"&5465?#"=46567>d ):6a    0& 52% -7 F  =)  6..    1  ;3Z`( G   >V-O^>Q4>74>7232##"'454&'"54?67"#"#"&>8ab9 WpL (*9_R' B) :E3349R*92   ,]-6 5 -e#"F.* ,?j|263232+##".=4'.#"#"&5465?#"=46567>3463>4&+;265 -67c#3E/&8)) $B)!F  =)W  "0' (7/)x # $( G   >V-O^   1G465"#*+"=>32#*+"=.'32+"&546?#"&62?+ 0BcO: 3 +0)) 9  ( Ua/ E0 (Ij(M2  "4 ;R K )65?X"=4674326;232623##"54654'"##"54>7"e&;  BQH $,  % (%5,#  <  2'a 9lc  1 9Xn '>sK/?Wz463>32>323263#"&5"#'"#"'#"&54654&543263&54.#"#"#"&546567#"#&546d  1&  ~ 3(:*  . ;34*y- 0 ,'( Zb ;l   %4$A'&', 7)Q 0#*AL60 ,n$  ! P] C  n?)mx263232+#"#&=4.'&#"32+#"54654672+#"#&5467>34632>4&+32546%4&+325464&#"#326 ;M+K1 SO!0& 8%4H; XM!0& Z) V^P!0& 8%"z %2 #?4%#?P'#$,*$+m/! 9-JZ3 4 . 0 ("lU-! =H[$1Tl+ -?+ l?a263263:;2672#"&5#32+#"#&=4.'&#"32+#"54654672+#"#&5467>34632>4&+32546%4&+325464&#"#326 =J9k KD'-)9jSO!0& 8%4H; XM!0& Z) V^P!0& 8%"z %2 #?4%#?P'#$,6* 2 6,2r/! 9-JZ3 4 . 0 ("lU-! =H[$1Tl+ -?+ l?ko{2632;2632#"&5"&#"#"&=4.'&#"32+#"54654672+#"#&5467>34632>4&+325464&#"#326 =JM[ *(: - !* 3I": XM!0& Z) V^P!0& 8%"z %#?P'#$,\Y8o,  1 8*,_e 3#. 0 ("lU-! =H[$1T-?+ l*et>34637632232632322+#.5?=4#:32;#+"&5467#2##"&546574#"326546!4&+232654&+326514QX&$ $UL87J  -  !.VF**$ _o=QVFZ> &_'(B"& "&N//  } /% ;b'L "*  4 *#") + /- ll?26323:;>3>32+"#"&5#32+#"#&=4.'&#"32+#"54654672+#"#&5467>34632>"32654&4&+32546%4&+325464&#"#326 =K|I ;# B'53<O "9JSO!0& 8%4H; XM!0& Z) V^P!0& 8%"z [! "!%2 #?4%#?P'#$,m 7)#8.5Q>(#".)"w& )S0=Wj8&-0 7I /") ;b45 F 7 ' I[E/% ; '!&Fu 0  + ?Qi46376326323262#"&5#"'"#"'#"&54654&5473>7&=4'.#"32##"#"5465"2##"&54>4&#"&#"46326%4.#"#326 , 9NM ( )(<*  , <9+/q %R.BUJMO:& O2G!5!H!M") 6$B)l ,^Y?h+ 0 5+*D 0&%(- T.1 $ o  >]J'p #lF6^Wd7467.54>765<=46;22#"&#"#".5.'4&+"+"2654&#"FY698*11 8 8ZM`NP  >F ..\B%/ 67@A('4  +  991*>$*)   D v6 2=$(%'# $3G^Ta7467.54>=46;2232672#"&5+"&'.'4.+"+"2654&#"GW798*11 G 8ZM`DU&m .-9C ?13F I,\B%/ 65BA('4 + 991*>$ 1 7(J! 8E u:  2=$(%'# $3F%^o|7467.54>765<=46;223272>7632#"'"#""&+".5.'4&+"+"2654&#"FY698*11 8 8ZM`nP )5K%   ?L #,/\B%/ 67@A('4  +  991*>$%G  - 1  R mA 2=$(%'# $386^HU74>7.54726=46;22+"&'.'4&+"&5+".72654&#"8#2) (7Az304 @&I  ;M;!(*54 <)]65 W /  dd  5F    6*#- + #5F^Yft7467.54>765<=46;2232+"#"&#*+./.'4&+"+"&2654&#"4&#"#3265FY698*11 8 8ZM`RQM^^(   $MF <\B%/ 6s' $5BA('4  +  991*>$ * "N w5 =$(%'# $3,+F^u7467.54>765<=46;2;2632#"&5#*#"2#"&#"#".5.'4&+"+"2654&#"FY698*11 8 +0; \ 1*9:NP  >F ..\B%/ 67@A('4  +  9 +1 5+ /4*)   D v6 2=$(%'# $3F^MZ7467.54>765<=46;22#*+"&'4&54&+"+"&2654&#"FY698*11 8 8ZM`ZY -/OE <\B%/ 65BA('4  +  991*>$ /  x5 =$(%'# $38v^74>7.547265<=46;2237>32#"&'"/##"&'&54654'&54>762>7&=4&'4&+"&5<5+".72654&#"8#2) (7 0 z304zV"N)&6,< I$ &  C3%N   ;M;!(*54 <)]. % W / 'D00 8&  "2 2   P   6*#- + #5F6 HU7467.54>322#"&#"#".5.'4&+"+"2654&#"FY698'??" >?&,/INO  >F ..\B%/ 67@B($5 1!2 *)   D v6 2=$(%'# $3G P]7467.54>32232672#"&5+"&'.'4.+"+"2654&#"GW798'??" >?&,/I$&m .-9C ?13F I,\B%/ 65BB($5 1!2 1 7(J! 4F u:  2=$(%'# $3F% `m7467.54>3223272>7632#"'"#""&+".5.'4&+"+"2654&#"FY698'??" >?&,/InP )5K%   ?L #,/\B%/ 67@B($5 1!2%G  - 1  R mA 2=$(%'# $386 :H74>7.546322+".'.+"&5+".72654&#"8#2) *4[jXl214 3&H  ;M;! "54 >(1NA8 0   $RC    6*#-%#5F JWe7467.54>32232+"#"&#*+./.'4&+"+"&2654&#"4&#"#3265FY698'??" >?&,/IRQM^^(   $MF <\B%/ 6s' $5BB($5 1!2 * "N w5 =$(%'# $3,+F `m7467.54>32;2632#"&5#*#"2#"&#"#".5.'4&+"+"2654&#"FY67:'??"Xk; \ 1*9:NP  >F ..\B%/ 67@B($5 ?41 5+ /4*)   D v6 2=$(%'# $3F >K7467.54>322#*+"&'4&54&+"+"&2654&#"FY698'??" >?&,/IZY -/OE <\B%/ 65BB($5 1!2 /  x5 =$(%'# $38v ~74>7.54632237>32#"&'"/##"&'&54654'&54>762>7&=4&'4&+"&5<5+".72654&#"8#2) *4[jXl214zV"N)&6,< I$ &  C3%N   ;M;! "54 >(1NA8 0 'D00 8&  "2 2   P   6*#-%#5Z4G74&547632632+*#"#"#".7>?26=4.'32676=]( /L'+( % o] # #   ^%9:@J7|(7=E "!!+!b/)=& %#[4HW%#"&5+"#"'.54>326322672%>?26=4.'37>765)(9A+:$ K .?85EDu] #  ! 3(+% 6+U +UeCj@)I="` /[ "*7 ) 3G-@f ""A&6NZ7"&54>7>7"&54>726327>3#"'#"&#4.#">7263:32765 7j!G/*AT FXH-!"2,J(     I0 "  )!z8-(2'[0 >:-  !, 3      ;,%M&"&(;D7"54>7"&54>72632+4.">72632765&"h H2()@  4 NX( w 8H #!N7".546726322+"+"&544.#">7263:32765"232654& %LM0YM(?W\Lr%6+  E    I0 " *"s B) +2W Y- $#*       ;,%M& +*  A00GQ2"2#"'.54767&'46;2654&'.'>2=! (Z .-@$/ >)% @ $     VP:0. 5%&A#2 (@49% {  A  ' T'/ @7C+N*3>7"&54>767&=47>32+"+.#">=t!C.Mr>YO H1A{   tN#7D8 8E@N)($,Q63?+S % sM6 -ZIFHV%#".+*+#"&4>54.'&54?632>26;:>46763%32654&#""*6 '775IA\\A $9 '!;;J!6T" ($]! 7D2;+' 6+a?j]GEW0A)G:.8-"!7Q)#203!GIG[p7"'54?>7#"&54>54./&476376326;27>32#"'2+;2>7654'  !=/9(88( #*KB !.P-"   *2J S:  Q5F  ,  $  C +$";+)5  949 <0     , s + %  IG[263236;265463:;2+"##"&54>54.'&476?6.#"#""3265' 6L6$,)$9( @ E("1_,:NA\\A 9 T 2    7(7$I?&'/="0*#97  ?W$B54^GFX0  ,,'"*(%!/IGh}%"&'4&5>7"#"&54>54&/&54763726>;2332672#"&5"&#*#"+"37>54+1 EB9*==* H %5_ +!&  R 2*9 )    ~-$<)(2 2*>=    D 1 6,` E,  " #9IUcp"&547"&#"#"&#"#"&4>54.'&54?632632632;26323263#"&#"%32654&#"2654.#"A-+ #'' .6';MA\\A $9 ' 2C:1E.  !$-A,2;;29#;"%5* $)QA Aj]HEW0> !#)6#7!*!2J8 +$#63(  #1't%"54?>7"#"&=4>7632;2632#"&547#"2>54.54;2;2632#"&5#"+ >R8/RN:F7   4)AH*: ++E*6 Hd  ();`  ?%,O)-7Q0  -(85*K! #?1 7+ G# *JR\l%#".+"##"&5&54>7263232632#"&#"#".5476326;2>322654&"32654&#":+1$ +%-K).I(9Q367&5>7"#"&54>54.543632>;2>72632#"&5"32632#".5"+"&##"&546"37>54#"A  $/EB9*==*S 5_ $0<  8X1*9 (f! 3%0 = 9 @$2  &% ^-$<)(2  *>=  ? . 6+| 0 *'3C0|,  " #&dB%45#"&54654&5476?>323>;2#"&5#"*R1%,u FB2 W(): Y !E 25 3   2 5, ] &dZ%4?#"&54654&5476?>323>;2#"&5767323#".#"#"&+R1%,u FB2 W(): ; ]:*0!) * J L" 25 3   2 5, i6  '%j & #&d[%4>7#"&54654&5476?>323>;2#"&532636723#"'#"&#"#"#"&+R1%,u FB2 W():$5 m  /JG  8IOٖ 25 3   2 5, B:= 1  3  Y[47""#"&'467654&54726323>32#"&5##"&54654&54763:;6367>5p;& %m]w& ro 2+8 d:$%  Wp=X>#4  (2 7( y)\8J[2, #?K?&dDS%45#"&54654&5476?>323>;2#"&52#"574&+;265+R1%,u FB2 W(): J_<&")F"+ (I 25 3   2 5, -: B) CeZ67#"&54654&547>7>37>323>32632#"&532#*#".547#"Iz2$&Sv% & U  -*:*V(* 2 9%k  01 2  2 5, &50 <(d["&54>7674'#"&54674&546;2?>?>323>;2#"&5##E;]dc 2%*GF& X():O7Z_f$ 716V5292  11 ,    2 5,3,32;&545#"&54654&5476?>323>;2#"&532632#"&5#@#/  %&R1%,u FB2 W():%`  (<B9 3  25 3   2 5, ]  3 6,1qe2>7>;2>7264676322+"'3267654&47>32#"&54>7>5"#"&#>54'56A 1 )' ! 1 N63td/! L  32#+"&+6363>3:32321#"&+"&'&54>7"*#"&4&'.54654'4.#"#"&#"##"#".%4#"#"#326363>2637.*>" !/8  :' HE(%  *)"4 &   .  "4s$ 4^N%7 e$D"@I7Q3ZI[A    5  &7 #  >9,-! B*E ^ ) +"`5 X 3; 5# 1qkz2>7>;2?264676322#"'6326;265463:;2+"#"&54>5#"&#>54'56"32654&#"< 0 ) : ! :0F2/6e'EG- 9( ? F(#*\-:N,BLB,7 T2!,?!7(="2)I3   '" 3 ,T4W (5( 97 =X#B6*O;C;O)"%|<((%&;+(0.437632#"#"=4>3>72#"=0Q > ;  i  >  ?  E C3GY4376;2"#"="5<=46?632#"467672##"=7467672#"= S ? A =."  L 1  i  > ?W> >   3  A 3A:X\D0C2##"54672364672"#"=43762#&=H  )_*ĥ X  ; PA D    2  A ??:2] +<2"#"54762#"=4347632#"5"54>?632D P *A _ : ~M Q I  ;i-5Q>32+"5<=42#"#"54>>32+"=4d &   %~  ,*@9Sd      / @     /@ 0.E437632"#"=4&#"#"54?>724672"#"=4&0L $ ?L*)_!X  :  > @ x |  2 A0(n,F2#"=4>72632##"=46"=467676;2##"  M L L    >n  5   C  A  A ? ?  0(n6Pl2#"=<5467632#"&5<1=4376!2#"&5<=437632##"5<=<54>764672"#"=4&467672"#"54376;2##"=  L { &  L &  L [ H!X  : 5  : L  W n 5 Ab> ?  > ?  qA  @  2A   2 " =  ?2t|'Od"&'#"&54654'&5432632++"&5467>54./&546;22>54.+"3:3"&5#".5467654&5476326329(8 % *g  3VhU /81-S( ;3",4%"+  l   *8 + R *3. #3  3 ' >O6Da '" )$$4-23&6+ #(%' 1 #t2)Xb#"&5#".54654'&54323>2#"';2654&+"5476;2+".'.54>32"254&#"&5#".54654&547>;263221,8BO13 v j#!, H,M#)!1/FecQ 32"&5+"&57>3:;2632632"&5#"&54654&5476;2632M1(<=K9.+b _~)$ a*9p B  D x[ & ):9-, Yi** 5+ 'K 1   07+ %  *g6+ 'K 0' 0 LtM,@Pv#"&5#"&54654'&5476323>324>3#".7"32654&'&"&5#"&54654&5476;2632M1(<=K9.+b _~)$ 2J>7E.u]4Q- o !5,A  ):9-, Yi** 5+ 'K 1   03M&'O532#"'#"&54>54632;232632#"&5#*#*323763>323"&5#".54654'&5476;263231)<=L9-b _~)$  B&0A'77'  5/T1*95 X'f I-*89- Yi*) 4, (J /  A ,%>- ;./=" / 1 7+E7% #'$-6+ (K1 ' 1 `2&i{#"&5#"&54654&5476;26324.'6322726322#+".'4&547>7654'+#"&#>4&#";2564#"&5#".54654&54763263220,9\ZH. Wj #3  n LD_\HB 3 % M/#F,  Q',9\Z% O|  6(  ;8 /' 0   . *"  6U !#) % 6(  "3 3' 2O`&q2632#"&'#"&54654&5464&#"#"&54654&547>3263263232727>32#".'""#"5476#"&5#".54654&5432632i+-7\Z$ )B % 2%,J[1( /I% ;)8& 0I/ 0-8Z]++^} d' 3 6(  "2  5   32 2  6    *"=( 6(  *8 1' 1QZ(>32#"&5#"&54654&5476;2"&54654'&54>7#"&54654'&54326;2632#".'2632#"&5##"&5#".54654&54763232632V}t   (<{A$, L' &+Y+PA&)vM1K* #R0 .*8TW_3,,8|?' > ( h  u  3 6+D: 3 x 0  * 0C . + + 16* 01T 9( *C 3  'OtO)Zm#"&5#"&54654&5476726323263222>?>54.54>32#"&54654&54?63232>7"&'#".54>7654&54>32632O2)99-* I A  ?D N-=\3@X$) 5   )8 + '&.C ,) 5+ (J 3 ( 247 @(CQG0X  &#)/ #Z2. #(  '2 2`2'Mt#"&5#".54654&5476;2632>54.54763732+"&'4&#"&5#".54654&54763263220,9\ZH Wj 9 ; &5 #1`',9\Z% O|  6(  ;8.' 0s  6     6(  "3 3' 2%d&2632#"&5#".54654&54324>54'#".54654&54;2$76;2#"&52#*+"&'4+"+"&5"&5#".54654&54;2>32e ));G!Xv,,`2%j (*#  1+9a  5C+ 7 d T  Aw+9j09-M \{B 1r")5, :735+,;!  112  6+   */*%Ald'#6+ (I2  fd&l"&5#".54654&54323263246;2#*+*#"&'&54654&#"#"&546323265"&'#"&54654&5476;2632^)9 *!X^*]H XR * ,"65Ccg8  !%*8f37,2 Hx  0 6+  "'3" 1 FT6Iu $t36H)#2J$ZGTm $8"(aP@3. 'J2 !1 Hf)"&5#"&54654&54&5476;2632"5&54?67&'#"&546545&54;232635465.54;2>54&54;2+#"&5#".54654'&5476;2632A.72$, N#f  )P  .?;dJ*$ 5  :  5 HDJC>)(;f3&  O#c6) .. 1  !2 W #3  ,G  B #V  # : U!   5* "1 /  ! 26f+t#"&5#".54654&54;26323>324>7#"&54654&5476;2326?632>54.5476;+"&#"&5#".54654&54;263232632-7|++Io 3'" 8 !3C ID0-8|HKQ  7(  )72&; 7S 2F Q   a   )   6)  :7 2! 1Cd,v#"&5#"&54654&5476323>32"5467#"&54654'&5476326;2632#"&5"#"#"#*#".54654'.5467>3>;22>32632#"&5+"#"&5#"&54654&54;2632v  (<$ * HTp&$]% *'=N1g .,6;   5\ N  7  o 3(:2J% k91);f32$+ Jk  3 6+  "1  2   Q  !2  0 1 :' 8  5  Z9s$ 6+&Il 5,// 3 ! (1d.s>32#"&5#"&'454654&54;2"'#".54>3>3232632#"&#"#".547"32>7>32"32654."&5#".54654'&54763:;2632So%$/';$ &M  K2F2:0(7K79 C !19 :#- TST2" /  :* "):f3$   I k 2r  5 6+ !2  3 , 6)Lp9$ ($9 '%nQ  '%"$6+ "2 0  ! 2 %fb'#"&5#"&54654&5463232632"54?>7#".54654&54323>;26;>72#".'#"+"&5467##"&5#"&54654&5463232632 +,9 *+ /5s U0 ^2$ c"5 8&~ KKA-- $'    E4/ `)-82$(/5p x1 7(  "( 2 !/Gu4 12 3  1 ) Ej'! 6 6)  ./ 0 ! 22d#,a#"&5#"&'454654&547632326324&547>32#"&+"54654&#"#"&546"&'4?>32;2#"&5#"&54654&54&5476;2632#-(<*`% & C!^I;43 "3#*   =,'c 3Q 1*:f3 ++ He  & 6+"3 0 " 4  3 B  *R 0   (}   5, "' 2  !d#*Sa"&5#"&54654'&547632326322##*+"&54654.546">54&#"&5#".4654'4&54;2632+81Z ** E ] -.TM2   1W| 'MR1)"&54654.'#*+"&54654.54632!>7&5474632!+"654&!"654&"'#".54654'&54>323>32.c/)9A ** RPb   /^wYD!6`t" ,(D)D[Y H9-0(q.#  -} 5 5, "' 0  9  &<.AG5%}?0 # >BZ| 6 6>$Z&57 ['a (I/    %#!5>54&'5!24.#"3 6TX9;[W9m,FrI>N-V\C, 67)AYV6+OQ:%0:2232673#".+3!52654&'52654&#"'+NS2%>(0 +9M/"9&8!978xrY^#J5'= '?CD.O2A]^A7#%@5>SFCH#"#7!#.+!5>56T949U6">> l.RS-7 !@2=%2=4&#""&5467>7.'5!#"5432"32654&)SWOV8?YY;3wU(;,;(\ *J0HH 9%#&,t_E T;IttI8SLg ?-,>i'HP;'SW9, tLM;B;U ?4.#"32>57#"&5!232654#"#"54632#"'+2$(=$  !4!+? d{}76D$(  (9:JB/+T[w<0/M0( $(K-: "0M<+/ÚK?9d  3M?FZ 3!5>5"&462Wd<<n#2##2@  @2##2# B732654.'#53&54>32#"&54654&#"3##"&54632(,6.#xP 32#"&54>3232654.>54."l4 ]Uxd|B/KA`G?0>N'T*#|qFAކ4dN@GDx4AI~TAD7,G7:%7326?#"&'!5>54&'5!6<Z02<<<" @FFF##![L)EG@  @@ <726?. '5!7654&'53#"&54632#20"    ")#|~(- <OO2%"*!=W?G     #-W4).(!'&%#5>54/!3#5>73%3().D%).8t+`u)5m8g723254&'5!#"&5460 & ==XQ+8l B77^g( [)7;2673!5>54&'5!#.+"32673#.+!Hk\%-7 7 6U @%  &>P3Q!55!C& '8>"  '*3254&#"##"&54632354&'5!3#7L,%G-$ '?T;?RUD:P>!@)?#Ef{=QW9H(U6FO<@O@47 7>%+>54&#"#"&54632!5>=4&'53:*/9"%4m53R.(<<((</ O>Jk#*-$3G.FI 4((44(==E'4632#32>76732#"&54632#3265##"&%4.#" 2%"+  -]1]:%F.<@2%"+ ! ; <6 -29y).(!'. 0)B0OcQ8qlCR5).(!'T"\ P0hdA%!5>54&'5!32673#.+><<,<d@  @d!?@  @<<@ (#.+"!5>54&'5!(+)( $79!6%,6"';5!74&"6.546323254&'5!#"'#"&5463232n,04`/9R:d!:@P*::*VJEI9=Eo< 5/#iiXt~B>l9?j  NNnh8hc%WW,# #.'53'.'5!654&'5(S:?''& k!"+ M}&'ߦYF+ R<" FS- !0&54632#"&54#"#"&54632.#"32>54 *0KK 2 (W?HXa?04 0(F!/5!G_Z562G6*"u\dq) #YBG[,G*#"&5463232654&#"!5>54632F@4c4%"6H9BR<<w{UeQvG3$-*#UK5gXt@ !?A|orx,"#5332#"&546323273#&#"3>54&7!  &>OI@p !  7m-LQ.MQ.F'8>"GXgw!!⺢WAR>FAc$ ##5>54&'533!5>5$:>#!>8 7; =&mL1/M7 5D5!#>(4"#"&54632!5>=#".#"#5332;4&"%4m5Ru55?%"""8:|#*-$3GaDy?!!?d;;,= HQ654&'5!32>32#"47>54&#"#"'#"54>7&#"#"&546323254 D,D )%A)90]X+2(1/M)<-8Q;P "`(qW C.(zWKC"!@)=I=F@:q I-*;ERE=\0Mu|?pN*( Oy_z5!3G$9"&54632354&'5!!5>=#"2>54.H}NzB!n 8:::n?\(+7.(,8++5/›Hlk-5 "?O66}aJIsB+*AtJFoB,+!54&'5!!5>=!!5>54&'5!/:: 8: 8:::g66D5 "?5 "?66;6%2>54&#"#"&5432326754&'5!#"&546327,? jT%;/+4 "-!C,C!uo5m4%'>8Qc7u@  @r nM^G3$-*#>332676?. '5!7654'53#".54&'K#,+     ")#{U 2:/:'%O-;%!4."ڴ&BV/V8.K/ V!/JZJ/!(7dX5&=OOP"IL<&%;KJf$%5!#5#"&=#53533#326?4&:,D d 'j,04xxd F  @P 1_r((V?-@ ."326=4&'5!#".5463232673#.{9X6" z6O9,@-ZbJ1:q  `|)@VO(#8,,0IzN!N],62>32!5>54&#"#"&54632uD& 'V@QE DD *T&  EA4c4%HttH{@  @~BTDG3$-*#X2%4#"!5>54&'5!>32!5>5J//: 8:  cP:/ؓ865 "?  c]j68a%2>73!5#"#7!. 3B! P& ) a,$! 53326=4&#"#5>54632!5>=#"&54&' /,.+;:+.,": YH\l55A%HX :;3o@P?a3; 8T^V?!!?m,T8v44.#"32>"&546327326?#"&'0+:71N- ,W<=Y-ۇ~W0+HHpD,*?VO)3bb<4.#"#"54632#".#"#"&54>3232>32326[/J! #$(Y=9_9)M63:  E05k+:(+%2!/)+3E@7r);;)27Hkq0Evj=CPCCPCVD&jL(d-=I\n\\n\>2654'743232654&#"#"467.#""&54632632#"&,/5' T5 4/9Q;d! !'< UK@N=9!GG-L21iiVwQ /1GIWB>l:>* yTT,Q4=B*MT"&5463232654&'3>7.5463232>32#"47>54&#"#"'#./%654"4c4%"&1pe)C #." #15&0]X+2( 7'" 8L1 G3$-*##3`/G 0+9"'>EREF@:q I-*;-AA-Nkq%EDD%%'K"32654.#"#"54632#".#"#"&54>3232>32#"&4&]+-K/J! #$(Y=9_9)M6-G' /$@`+:(E ",M0-@<&_p7s*;;*27Hkq0Ewl>&65&9E9VH&jL(d-FdeFS< 1:19"&54&#";2+"32654.54632#"&5467.54632/5:>UA lHC2"(" ;Yipxj6-KV^V'N>/I  0V:( L.C[cKDrW-?u>& +732>=!5!54&'53#"&54&'5!B`1G$U$:> 4[>~s;<gd *B,UBwK1,L0GI/|876 9D""&54632#"'#"'"546323267.'5332654&"32654&u5/V^dU(>:0.%$>,m$'&>  Oe(/( 4">_lHsi3B\32673#.#!5>=#358<>& )" 7 7h!'32#!5>54&'5!3254&#"EBe9# $5JA"89;#YU#(93.G(6?!!7JS8232754&'5!632"&547&#"!5>=#".546, 3!C,C!*&/P$:!CC!*#()  @  @   @  @  AK"32654.#"&4632#".=.54632>32#"47>54&4.#" 4.4Y9  .JG1/ -88,02a@S'0]X+2(N -/)26+  e54&#!5>54&'5!2#2!5>54&2?Vr555,X\QEDe55QG()%G888G%UIMQh88W326?632#".=4&'5!LA3 "wACX@::)rm.)CHc6!33# #.'537'.'534i%-wi%|'&OL'&E ;r ;:%B% ΫB%9732654.5432!5>54&#"3##"&54632(,61GG1IRL' d&&'Q ;B+Oh2%&*k6J<DBDM"U7  0x8%#2O=:O)m3).$%B'2#"&54&+"#7!#"32654&#"&54LJvH]M2(#x$P);#. uN]~nh~ 4D(օ=S< t)#"&54632#32>=4&'5!!5>5LOO2%"+3LL D,D D& oW4).(!'&b7@  @\@ ">t054+"#5!!5>=#"&54632#32>P (D D&LOO2%"+3LLs1B= @\@ ">oW4).(!'&#.'5!#654&'5%'& .) ) ;%B%[o0.%4.546323273#.#"#"&#"#'3326{B]^BgF*b c<.:DOcXvV2g %bC7D/I47V9L_""XT4)(H,5g>Mi"[V?/32%#".' #"&54>32>32#"47>54&#"v:0>^  *=bHDIUd(\E0]X+2(AZ}&-Sbiܓ]x4DF@:q I-+:fz 5?H654&#"#"&54>7&54632#"&547.'32654%3254*.55x=O!8C OBJ9?MP7E+=;GE:rI H02.$,/0+.?YF;-/"03 :(4632#"/.#";2>53!5>5KX?[" o7C-"   07 o=*.x  !5\ %2>53!5>54&'5!3h-"   07 7;"7'  !55!!5'q46323273#&#"327#"&@p !  7m-LQ.vi.UE!!⺢WAe=B)054#"32+ =.5463254&'5!&'25(&~nncQ?9.6@t!C,C!dmGVb3;><&(PeRO@VMI @  @ 772654'7#"467&#"!5>54632632#"54654&#"H,04`/9R:d!:@P*::*VJEI9=Eo< 5/#iiXt~B>l9?j  NNnh8hc%WW!'#"'!5>54&'5!2%3254&#"! #:dB'#;98-TS2#`e06'7!!?6&J:MIX6%265#"&54632#"&54>32#5>5.#"1Ua)3&.5!5>54&'5!>32&'E  D.Hx.D D,D :Q8+6)"@ !?&'/54&'5!7654&'"431D2' *I9j :; :=N1I"`8i7#>5!7͡H  54&'5!#"&54632&#"265 D,D _UJj^B<(((+%0@0k@  @PrvLbfBQOGSrd7%''#".4>3277''.#"32677754&#"32654&'5!2=432#"'#".54>32G3%-*" 946B1!xFL@55^BGEEMH,DWS&Gb3c44& > )ByPu?Q882)[]EEYFVX<R1<F2#"'#".54323267.54623267.54>654&#"%654&#"t4BHn0Zq`G*B#<(#=%3?JpJA'S,VT^:.$$x')&Ha=Xܜ~~2LK!xdHB;C@RR}A`cgD+^ILkcVhj@,}J:Hv:O*4.#">#"&5!2.'325"?F,(Mi4 F7d=2]p& LG٪TZ{? ## ,ȚT &--&$,/84632#".546323265#"632#"&>54#"NB+A#LjWG"jJxI@(O:g\% )1 1:)(dA|4U\0my=kKR668ב/.,"./vZl #."'.546323267.54632654&#"=+*>3 #&F#>CHr>oEht @l\ K-1SI)'/''$ddGI@agyR~L54&#" :fdddd{bUm3 #&!R5%2D9(K=dP`vY@'/''>5CX8D"@\bD'777'32654.#"#"54632#".#"#"&54>3232*KX2d32"'>54.#">54&T) &  _  \y" ";7_?FPlHFA>+/PHFO   M<FT&&Jm?MTQG` @+#/.9T SA<@9%32654&#"#'.'53>754&'5!#"&54632#"5;):RzX_dPF$/2 kG D,D n$8[9IWXIK&9"#JN98uW@!!@V}M!@C3 W>BX< Fb2632!5>=4&#"!5>54632#"/.#"HIeb::%9HL::[Aw" 3=PZ=fZj66kHK=66?mC).fM(2"326=4&'5!#".5463277''.z8X4# z6O9,@-ZbJ15DZ2d<d2d$=}*@UP(#8,,0IzN(1Pddx6dddB?Q*5%#!5>54&'5! 2>54'&#32654&+"Q3dE>"!?4="-B:T0_FMZV,:9# 87!3 ; :+\#I?;CF 7##/$-k5:iWA0 7#'#/$-kӏ$5:iWA0v& %!#57#.f)!')\)#>32#'%654&#"6$-".1 (/->+?|$ Fu6"X105'*   k3E"  73#/l./ERRE 3'#F*b$ư-[ib$a  733 W'B))0 RF@ 3##753/$-ut(ViW[ 33273##"'###3-C)*:09-*GG'wEDy '##53?b$ư-;E ib$a6'!#!)EY~'##537' a$|-;!UE?a$6' 73## /[./38{*RRlZe!!(737#7#/l. 11./E;ƬBR#"'#'733267%/+[3-k#/M5 ": 2 PkA0$:i$%&%7'737#7#/[. 11./lZ"{*;ƬBR#L|$eD^iW3#((%3#'(dO[7>7[6XuG`ZqϦkR1 <SA 'V(V\A `''V(VV(V\\-'4#"#".'&'67>32#r4 SO   !  #X"%8Osz98  7 #:#. b'26C3>32#5#".54>354.#"#".'&'6465&#"326H# 1S !-PI1&4 0gL'   F&LR>F> 05&#, ,"%74 q H"c!1Ap/->32#4&#"#4'62:\@=6N=MWL62$;Pf `^ % .Q+9H2#5#".5&#"#"54654'6;2>2>2674#""8K .2#,/  #. $$3..,F8 $*%+&'  D3H.8.$ 0  1 3   "}f$)Z,.#5#"54#"#"&'&'632>3232674'632ZL/)$( 3 (@/#- -  6/I.6.!5AN1,#0%B+4'6274'632#''K 8 JQ`4*1@2#4&#"5#"&54.'632>32>2654&#"%!I  "l)(T5$? 1*%% E$N H.l !F 4/)=-%1-'4*2AN2>32#5#"&'#".54.'632>2654&/"%32654&#"5  #50(N,6*: +*  "_= :(>$#?9?*  $;M^*.& 9'Z ""#G*k *9&R%.#=0%d>-#7'3326=33274'632#5#"'#"D9#"R4F #H= $V.IwX XYIM  : ?.##5#".54'63232>54'632Ne 4I# -7*@ 28/,/, A:'17;u/>O2#5#"&'#"&54'6322>547632>26=4&#"B0;  .P >61L " (D* S+%%  #* +f "F;;4$)KAL1$00-A*  %# IJ%/,T%:-&"#"54'632354'632#32>7.2h  1N0:' +0h\,t%(*;B_(=J&'>5"'#".54'63232654>5632>32"326754&_"0 ':U,%+. G",E##  -6j"ZI5 4F:,<" ,mH+* 0#  O  5I*T=(.!,2#5#"&54.'632>4&#"3267T+RPS.>Z /%$2H)'q.?'N !-(4,44m  2 i@5-#"?x-7C>32#4&#"#"326=#"&'='>?2>3226=4&#"wX.% P2G+;*) 2>'6L /'@&.0@(6#+]&9_.C "C7r*@.O *-."%$4"_=)\,;"&'&'&'672>32>32#4&#"#"'46732654#"r    8 B'''A"O)e%74 !: $&i.  2-+%a& =_rD"N*B"["d`-6-2#/HW4'>32>32#7>=#".=4>7'&'4>763254&#"#"&675&#"H  # '2*/&AE')W !4?  Uh6(4@*:I 85 &!!&! B_0L@` # .  4+2+1'%#7)6K/6#4&'>=#"&54#""&'&'672>3232674'632KmJJ'.JK;#-.  , 1=-,&;M^QZ-WLX/7/= $U-4&F  B+632672"&##4B $+ 0L ^.!!-7#"&5&'6732327&- ,  );  ):~"46;2#.54>74&+"#:$JF#NPw,Q5O%<^VD[76fT!GF4B7/;_PG`:~46;2#4&+"#:$JF#NO[76fB7/;:~+4>;2#"'>532>54.+"#:*& %I0& "/ P41.*0*/.J:+*EA"67 +L$:-;!"&52!&54 ,$ -0a :#- ;!"&5@-sV -4:0;253+".5>SEN$b $% 0Z:S43YCa:~$+54&+";!"&546;2#.54>^ ". "%?A*NRu,Q6?[YAnCAm:6 9VQVaS!GF4) aRIh<~"4&+";#"&54>;2#^wnT9 #" NvNSrlMbCL= =B:qFv"#&46;2M??'H7SB /9g/34'632>3232653#"&'#"'73254#"#">  ?(' h KS-g(93k #0, 93#PG,&;"(@"@b.8.+G-!23267#"&54&+'>n+./ M_*1"c,E'!n22)?9 @> Ɔ=.&%2+".546;2!;26'54&+"2''#*ED' (*!*O$"Z ">DC=)L{+5/y,"#3q=--:%27#"'+".54>324&522&#"3267#! 8"9$  />3.{+1.+*L)  *;K0FW>  j!#hp{T 44$-4632#"&5332>='.7H%A&554}GN+R)!  (0ER k'-& .\Y@(' #w3,'6-(%2>72+"&546;2.'&+"3N +;"0/  7/  <+GE:$/  'Ae9%"72"&54>672"& >*R =1  9S̞."0.) !8#C /! (̏"=LZ'  5~767/67.#"&5qo 0.WGONO_0 F jT*hF/+%#".#"#"&546767>32#".#"Y NWj%6&+ 7G 6*_NA$ @C^*;5o =H=5A5KO $X3HK3 =H=Ans="LZ'%265.'67#".#"".'632y$M>'7nWu=ONU &;'S  1,rZ$+Q.8vy+SxRbRD/i #:AcY*7.'67.54632#.#".'~!!+nB;fT K@0X78=) "!5 @zXw  S=G5*?6> ~ ^1-23>72.'4E-L\%%`Fd  W{75pW' S}[:7&'46332>7.5632#".'&'"&,-$H- ,{*2/ ]`M HZ/!T:L  =';"AH~ #f."#n\R &.?//C $""54>3.o)qn/t2%sfN vAz1"ev1-' 1 $'   B%$<%".#".5>323265.'67>3#&'&#.xYUUe CIJLX c9FI TV:   J a _DSDjc@N@$$P@J173M[1 )1m b B7%#&'&#""&'>32"&'433267.54>3dV:J)e/L8'F-'$ 4tQZJ0xU 2s4D d}]/<7u,' _,-mRH  !v5C$%#".'.56$7'4&#2XU?.5-V9!fMQc&SL_i7CAt6' o 'm: h9.%&'.'"'>7>7"&'63232>32S$"#,Lc!%"K5I >  !"8%ZD  " y 0T++ x {<|W4!&!))0M)rs@%"'>7&#.5>32>32#.#"#.'GQ7*A$n]a/r>&>9HO!HL6M !"\2D/.I   H#B?$K4=IXX  v'5='-VFm&u=1.?H >4o& '  i<z 0%#".#""&54>32".#""'>32z 8;R# YHBc1<ET!"'/1;N$#DU IWI>J>#rYQQ$- *(<8(>b% g'A%.'"#"&54>32>72%4>3.'"#"&1  .Dl8@(S7:7E`0$G0N."=BTl""JBR@,78?P(I:4  ?:? BPB8LG2I@; .B 4$aD5L|oR  QffO 2;2 o2%.#"".'.'>732>32 nc;NM ;.N   W4@%nTCRCOQ 7>7"&>54.'O9KSB0%P/&x {+ |?`~G% 02j8"Vo' n 5'3>7.'.5>267.'>7.'=HT ?s$A=>afM:QaG1,.i Y&j$U 5K 8R {4I /V\8+DwWv%@db-H [( Gj67&j3*2+J(+# >67&3*2+(+# #.5> ~Sf`  U`]<wLDZ% %PCBE-7>3.'"".+THb* H>9- v(fx{ EUR;lM r>74.54>3&s 5#,4, G83?$B" <01  94_1 *' 9' h 7<>4>75.#".'.'.'732>?<UE9&i 4/  !8'g 30  !+?%zN_.A& [ N ].@'  .) $*C*g*&* '* *(*9L-*.**C0*533"#5>5#4.'s*'   3E 3 !2`"2* &R@@,@]*7#4632#.#"cL{`_{L-.); eg;U+(BB  l3*C 5 7* 8*X@|@P@ 9*q:*=* My*'33654&#"#"&54632#5326?632#"&5467[@@H "[?mnJC[@@H "[?mnJCC3N>>.*=H^@T!w?3N>>.*=H^@T!)2>32#"&'#"&54632>7&546U`|*f%/.HE/0%j({b^*T"%`QNc&"V)kgnG* O* T* lU* [** $*C* %** '*(* P *** +* ,*-*.*/*C0*1*533"#5>5#4&'s*'   3E 4 "2`6 "&5463274.#"32>[|{``{|0-.); :)(<gehe;V,)BC#"AB((AB]* l3* 5* 7* 8*q:*)BD *B D*: AB *B  *:$>32#"&54&#"576732654&#"g 42D[B)F &(')./'( S>Hb\    >7=II*'5#"&5463254&#"567327#26=4&#"!57EQ:%"  J  #*&-3+-P@Gdi    (D9=KBH * B * B *A *};EJ*j5 *SN* CP* {C *;AR *B *  {;BS *W *A:X * >J * :1 * @=Y*  )+Ee * w5Cf*Ig *wCy * O5z* k5Lk*kUk*dAXk* a@Yk*+E0ek* 5fk*!Gtk*yk* 5zk* 83.#"632!3267#"''5#"&=4&'533276=4&'53 *.Z8QLT 010G$nG=,*+++<7B$*.*/5A26[\?[-09QV S++G;#-"&% <32654&#"'&#"'>3254&#"57673267#"'>32#"&5:'>DE;'3254&#"5673267#"'327&3>(9DL0PSfzV63()[8 () *+(=&#"'>325#53>32U 9{z() =6() RRP^-;DYt # 87#b py#  GS^567>3263267#5>=#"'#5>=&#"#5>='6754&#"3254#"54&#"32HD>0=n4>567>3267#5>=.'#5>='6754&#"54#"J@3;#7? "&%&)p&&'.%mI*$O0!OGP'#Y%"/C'+s"*M%(]a"' D32654&#"'567632#"&'3267#"'#5>=&#"'>324&#"E#6CC8#C?Q@PI^yY +() 8, ()N,gSWi,% MOx]m` # /'8#j#O;"&#"3267#"'#5>=&#"'>3254&#"567>32(,2()"30() PD%4j#:I# d+ &#:!\5)4".#"3267#"'!5>=&#"'>32>7>32V 9() =6()  L/-;fYg# U87{#%/"'# d<273#.#"67#"&#"#5332654/&'"#"'67&54632 2+"++l(S:T   9&-4:!( M;!: C8&+@  .4L F)'!-!. $6E,C4#3267#"'327#"=&#"'>325#&54>7672e() 0HY () 5* # 8/+# Lm# 1# t+%2>7!57&#"'>327#"#7!3267#"''. ()f- [ ()i "## !7v# &J * 0732654&#""#7!#"#"&5467.54>7PBPCK1;M- s,-UP,M{_Gf-5-DDg% !(2/J!7v+AB&SV9(7' @D9-S#754&#"576773>32#5>=4#"#5>=327#"'#7&5#&54>7672e Q"HC#D,{)+K3,+ 0H. DQ5*  W=-'4 3j"45 # L"&b- 1# t  5354&'533##5>= S44YY44 $/66/$660#327#"=#5354&#"57R 0HYPP ?>/+# LM?M!7'(085676323##"&'#5>5#5354&#"#326'.#" ?Q@PI^ uO + 8,CCnE#6CA2#C MOx]$^z/'Q$_#v,ewIU,\&175354&'53354&'533##"&=32676=#>((')??#F4VRD2A&< $$ $g2! 3g$$';5TV-2CE>*'2753654#"#46323.546323##"&547!#32654q#0(6102?"HP,$2=F$\"9\:FO49y"!$XI$6@g@ 932654&#">32"&5462326=#"&54&#"5767:'>DE;'<N.Ke0-B." C^5#53>32#".#"3#>7-B." 96RRP^-; 9{z   !.- 7: py#Yt +!  f4.#"32632654&#"'467.54632;##"'"'367"&5462326=##"&5467.I,#'9-#(PBUh8De>2+aF((MS]? (N< -B." 7TyGf-5 0=)2,HY1% !(6+E :>/D_ '+)EV*  !.- 8-D9(7'Y#"&5462326=#53254.'##5> 54&#"567>54#*#53"67-!0" C[    h30$/.6;D(+ !., ![v   $`(!+*B3 +#"&5462326=#5>54&#"567>7-!0" +" b= !., !)%   T%67"&5462326=#5>=4&#"#5>=4#"#5>=4&#"567>32632 -B." , +B+++B:(*HD>0=/ *i)$K/TT3B#"&5462326=#5>=4#"#5>54#"567>327-!0" (M(;" &# K?;&3 !., !&+a9!(9O">9&eU   A32654&#"'567632"&5462326=#"&'#5>54&#"E#6CC8#C?Q@PI^2-B." :M + 8,N,gSWi,% MOx]`I!.- :/'#O;#"&5462326=#5>=4&#"567>32#"&#">7-!0" 0PD%4,2 !., ! &!\5)#:" 3\A273#.#""&546232657#"&#"#5332654/.54632 2+"++l-'-B." ,IT   9&-4:@5M;!: C8&+@7%!.- 9 F)'!-!$B*6E8>32#".#"367"&5462326=##"&546323265gP_-;9 -B." VS)52qx#&%Y !.- jp<;P5367"&5462326=#"'.'53654'5+ -B." E x# fc/2  !.- /N$ T#"&5462326=#52>54.'3#5>?'&'.#"#53">54'5367-!0"  (r^ +<(4S5/; !., ! *#()%, \'!*xWJL '%2>7"&5462326=!5#"#7!'. -B."  - [ "#!.- !7vk%@ P%5327>4>754#"#"&54632327327.5462#"&=#"&'#"&ZH%!( $18 L*aGR> ""0!/$V<.;{!>, -  =S/AOQ!! ,.!"'I<e <%54#"326327.5462#"&='5#".54632>7323M`FA=-,;""0!/*HX,9N~a3> cvL,P?$! ,.! S%1F`8c#  q5B"&#"327327.5462#"&='5#"&54632763226=4&#"C79""0!/z0PSfzV63-<%4>(9DLDKY<#! ,.!+@Cw`j+.#*(])K7327.5462#"&5732654&#"#"&5463232654&#"#"&54>32#"B""0!/(Z3<-$ .  1#(*# "61AhE*/GgCq<! ,.! ]>3%45 +9$#=<(5A.@Ee.4##"&'!.#"'>323327.5462#"&327,hFLT 4010G$nGVe=""0!/ *.Z%GP[\?[-09QVyg!! ,.FA2s 12#"&46"57327.5462#"&=#5>=4&. 1""0!/4*76! ,.!6!5%#"'327.5462#"&5'463232654&#"'>32XP/""0!/" =KWD+>$ '&>!Sko-! ,.!.aMVm*4 4 }44632#".#"327.5462#"&=.546323265R_-;9KH""0!/(32py#&%YHco=! ,.!<<;P e6%'5#"&=4&'533276=4&'533327.5462#"&5;5++<7B$*.*/%""0!/S++G;#-"&%%! ,.!j1%#"'327.5462#"&=43232654&'7#"'7!jbF!""0!/(a02M\#/`ROPaM! ,.!{<:&-9#u = AC(5326=7632#"&'&732>54.#"  )#AT3':)-'(+ @&  dB&@/!8K*6 8*BBF * B *= *C * I * I<PJ*D'x*  * *B+ *6@,,+ 3 8)_&*~/*r B*6a) {C3* k 62*{C4*{C5*D56*9B7 *: *"zAD *7 E@*|m*T;K *F:L *=6  * 7CM* @EN*<]*{<R*<S*w2T*"Dk*'8$%'DQ1#%"wEkQ#`%k#D`EQ#qi%#qEeE)y#v~)"v0#'">Gk#`'k#\`G#qo'#q\fG,=4.#"3 !5>54&'5!2632#"'732654&#"'>,FrI>9;[W93MS (.C:-'% H+OQ:%% 67)AYV/,SYD.?% '- ' B726=4&#"'5632#"'732654&#"'7.5463254&#"567327&3>(9DL(9 (.C:-'% &QczV63[8*+(54&'5!#.+"32>73#.+("n7* )3k\%-7 7 6U ") &>a6.I//="  8 "CAz U 9#7632!!;2673!5>54&'5!#.+"32>73#.+(#7* )3k\%-7 7 6U ") &>ٔ t6.I//="  8 "vDz %U#*(#: H `U#X(V#:NH )U[#)": ",#p)9#"I #*&6"qRJ-#+  #fKk#`+ k#O`K.#j+ 9#jQK*C!54&'5!!5>=!632#"'732654&#"'7#5>54&'5!/:: 8: 8 (.C:-'% ):::g66D5 "?5 @% '- b"?66 *B632#"'732654&#"'7#5>54&#"5767>32#5>=4#", (.C:-'% )+ Q"#D,{)+K3W4@% '- b5  -'4 3j;#@+ ;#R@K^K#V,^+#VL T2#76322#"&54632#"&5464&'5!!5>(#{!@)?#$>?"ٔ `((21p1D-&6&"v"i#v.#vGN"k#`.k#X`N"#qo.#qZdN kV#`/k#`O kV# k%# V#qm/&#qnO %V#*/%&#*O _i#v0#vP _+#0b#P k_#`0k#`P ,#1a"SQ j#_1k#R`Q #qb1#qTjQ #1%#T*Q",D#76323#"/&#"#>32326".546324.#"32>h(#0) 1# 4&$" XXG+:71N- -M01N. ٔ ]91 .14 2L\4Ae='%:MG%$FL9%%9LF!"T"Rvd{"#"2j "T"RjR" 1#'&5432!!".546324.#"32>("[7ɔXXG+:71N- -M01N. a6cL\4Ae='%:MG%$FL9%%9LF "CGz" 1#7632!!".546324.#"32>D(#7ɔXXG+:71N- -M01N. ٔ t6cL\4Ae='%:MG%$FL9%%9LF "v,zi#vJ3'"v S,#p3'e"FS,#5O`"Uk#`5kO#`Uk# kO>"q #qj5O#qiU*9#c63\g" V*g#c\63k\# `V* B2#"&546#76324.546323273#.#"#"&#"#'3326(#B^]BgF*b c<.:DOcXvV2g %bC7D( *B.2N2EUOL/%%@(/]8E_ RM83n#* @2#"&546#'374.546323273#.#"#"&#"#'3326}>|"yzB^]BgF*b c<.:DOcXvV2g %bC7D(TggJ*B.2N2EUOL/%%@(/]8E_ RM8'^9##*g9#c 3k\c"  Q!#7 "`WkQ#`7 kC#`WQ#qk7.C#qgW%Q#*7.C# Wg#j\8 k#jM`XK#C8 X#NPX#8 #N XF#76323#"/&#"#>3232632676=4&'53#"&54&'5!(#0) 1# 5%## Ka8Z$:> "7]>{;<ٔ c91 .14 Z]' 'SC,(D*BA*qu10 1#vi+#q"8j "jMi-&#9h"RYj#_9k#Q`Yi#CR:#CZi#v:#vZ-#j.:l#jZ+#-:e#Zj#-_:k#`Z ,#;a"P[ !#j;M"jQ[-#<&i"N\ Ue#="8] kU#`=k#6`] U#qg=#q8c] #qRK'"j`W#Z&"N\%#D9#"A %".#"7!5>=575#53>32U 9ii =6[[RRP^-;DYG1G87>1>U py#%".#"3#!5>5#5347#53632U 9{{ =6RRV\-;DY h87: " #q5#"&546323254'&547654&#"!5>54632qL+6@ _@-LQ$>?"zR|8y"Qr)   v?K_7! 8YaVB6?,gk#`$%k#H`Dn#$%#D#"$v% #vz#"$C "Czh#"$% #p9<3#"/&#"#>32326#'#73#5>54/!3#5>73%3'0) 1# 4&$"  "zy"|><().D$ 8t91 .14 gg &Vi%:E2%4#JkP# %k"I 14#76323#"&'3326#5>54/!3#5>73%3'U(#|8Q 50,.().D$ 8tٔ .FW2/(> &Vi%:E2%8#vF14#'&54323#"&'3326#5>54/!3#5>73%3'("|8Q 50,.().D$ 8taZFW2/(8 &Vi%:E2%P#C6%AD#>54#"#"&5463273#"&'3326#5>54/!3#5>73%3'u"'"# 1"4:_|8Q 50,.().D$ 8t0(   *#'4*FW2/(1 &Vi%:E2%0##?B3#"/&#"#>323263#"&'3326#5>54/!3#5>73%3'0) 1# 4&$"  |8Q 50,.().D$ 8t91 .14 [FW2/(> &Vi%:E2%#JkU# %k"I  kU#`(k#9`H Uf#(#H U"#(j":H }#h"(v@!#v{U#"(C "Cz ee#"( #p UJ3#"/&#"#>32326#'#73;2673!5>54&'5!#.+"32>73#.+0) 1# 5%##  "zy"|> )3k\%-7 7 6U ") &>91 .14 gg;.I//="  84#: kUe# 5k": 6;y#H,#0u;#j,u#jL"k#`2k#R`R"#2#R"#"2v# #vz#"2C "Cz"h#"2 #8p"*B3#"/&#"#>32326#'#73".546324.#"32>0) 1# 5%## "zy"|>#XXG+:71N- -M01N. 91 .14 ggL\4Ae='%:MG%$FL9%%9LF4#T"kU# Ik"S J"#b"{c"#b"Kc"#b#c"M#bj"]c"S#HbW(#PLck#`8 k#L`X# 8 #X#q &rK#q "ir# q #r9"q t"rJk#`q k(#=`ri#C<&"Cr\k#`<&#^\#<&#\#<&a"N\ .%2>53!5>54&'5!32654&#"-"   0?"!@C;"77 :>$%'   87!5'$68""8D7# '/5354&#"567354&#"5673#!5>53#265 Wc<c<KK0(/^6v#v#6)(1**"7#"&54>73265402ru]e{:e@ N]LB58n1cag.kofHmtYRn? y+/%&#"32#"&546327'.'5!7654&'5 L3-0&-6'8+)>;9BK:5^6G6%G'0/N%~-B08I$>01G4Yi27 /&#"3267#"&546324'&'53654#53:9-01"$BT$^89BK:;J- '  sa0 %3($-Ng^yB12K) Z  )."d -)."d e)."d :)."d G)."d ;)."d H).!"d <).!"d I& +E"E e["EZ : "E^ G"E* ;"E, H"E <"E I)"h -)"h e"h :)"h G)"h ;)"h H& +I#I e9w#I" :#I4 G#II ;#ID H "j - "j e "j : "j G "j ; "j H  "j <  "j I>& +KL#K e3#K  :#K% G#K5 ;#K8 H#K <#K I$"l -|<"l e|"l :1"l" G"l ;#"l H@$"l <9!"l I& +M#M e:X#M :o#M4 Gq#M6 ;v#M; H #M <#M I"r -"r e"r :"r G"r ;"r H & +S\"Sj e:#S :#S G#S ;#S H"x -"x e"x :"x G"x ;"x H "x <  "x I#"X~ e8#X( G#X)B H@5@p#X I)"| -g)"| eg)"| :g)"| Gg)"| ;g)"| Hg)!"| A"l d"r Y"r d"x Y"x d)"| Y:)"| ds)8." " -)8." " e)8." " :)8." " G)8." " ;)8." " H)8. " " <)8. " " Ii"  ,Aj"  ,B"  ,"  ,"  ,x"  ,}e"  ,=g"  ,? " 1 - " 1 e " 1 : " 1 G " 1 ; " 1 H "" 1 < !" 1 I# , # , r# ,J # ,d # ,t # ,x 1# ,  1# ,  )8" [ -g)8" [ eg)8" [ :g)8" [ Gg)8" [ ;g)8" [ Hg)8%" [ 54#"#"&54632CF/!-"/4/B -6fWeOf('Zjj " 1 Y &8j " 1 d$ "j . " 1 .'I Y?# dCI)# Y<Kkn# d>Kd# ,<KFn& Y3 -l& - d=`"m' . -&lz&!l"l W&l;,"l .|,"l /|;["M B"Mq"Mk Y<#M d<O& YN ee& d< e]j& eQ&oxz&X!x"x Wr&x;z2#"t -2#"t e"x ."x /)E"X)"Xq!"X| Y<-#X d;#U e9 C  2#"&54632#"&546'&54321[_ " :mO "" @;; 432#'.&" #,*18)8" [ Y)8'8|)8" [ dv)"| .g)8" [ .g "S] Y;<P#S dg+"\] Y;5"\g d@"\ ,iU:[4632#"&#".4/"-!/F'6- B'3#'?' v y!! ?!!? zJ*U\< 87632#"&5467m   !".>2 R 3&-T827#"&54632'654   !".>2 R< 3&-T828sf#"&54632'654  !".>2 R 3&-T828"&#".54>32&, R $&9; Z/)8' ~ ~7'  7sf'  8'  ;k,"&'#54'65#"546324&5462>32\&*(+*)S , T,$$-R+h{{u%+"@d *F0"&:gO>32#"&'>32#"&'#"&5465#"&46324&'>5#"546324&54632)$&\ \%)%\  [&$$&[ [%)S , [&$vg?"&LK)"?f g?"&NMGQ+">f (6 2#"&546:NP78ONO:6OO98N(67(/gdyJd'y6Jy=Jurd'yJ'yxJy*JKy*6BN[232673##"'#"&54632654.2#"&546"32654&%2#"&546"32654&"0 ,5C,R/5(#)`F2DtK '95O '@.2d@3FuT0Q 3S#D.2d?4FuS&? 3S"B, OO:U~A'V=8[P:PH(O&2=8[P;P]d(O'1L 1?N\ky #'#"'#".54632326732654.'2#".546"32>54&%2#".546"32>54&%2#".546"32>54&7R/ 4%+_G $rN#2",7?C 5M  2 .3e>%)wQ3*B#C.3e>%)wQ3*B#C.3e>%)wQ3*B#,Q:&E#>-C  =H54&#"#"54632"&54632-/)02<6!<&2g<-3'" ""?7:V2x$TRw@:"_2M% ,?EK#= #UB, 5>32&!"5Fׁ</Nmp5us I87#3#PDCrrDD`' '  +!*#5!*XK #K>1NXK74675.=463"&5X$77$OV3(#22#(3VOy:9  9:S8 9622 2269 8TK(%#5>=4&'>=4&'52(OV3(#22#(3VO$77$yT8 9622 2269 8S:9  9DZ#""D#"#"M #"'7!)+ ;r3Ff ###5>54&'5!2>54&::9:ncd^@68?"!5S6Wbm\lT_[?, ,#32#!5>=4&'5::3paap99o[[!55!E Ps".54632#"'2#"&546R 4<."! ! "!28T-&32" "c!'  ٝEk'  'yA'y %3#"&/&#"#>32326+H>/-##5+O854$0 #91  .14 , i) >&y4'y$yJI' e' '  a'y'yJ'ylyl b>'y4'y$'y!'yJyJ( 'yyJ 6a"'y]&y]'yy'yh'yhI'yI&y( 'yJ'yy( 'y'yJ'yy*;4>32#".7"32654&21GTYB21P+%"$!:U+s^\u,YZZbR]Y L* ; ##5#53#5;7F/F9ZZ1 /##"546232654&'&#"54657327+/nZS4 429> KdfEU2',*6B%J9"&54>7632'"32654&GW &=kF'@JPQ,,&!+aP9@0%|G<@N&*?@3,5; 5 ##"'75G  x[_ 3!-#"&5467.54632'3254'>54&#"G-RL;M35N=:L*S'&( E> ,#'('6&09:-&%))+83&*^&-%,<&$"(8 ?2}E ##5#5353K2KK22KK2KK2#5222,#57#522d22  (*   ECQ*0; *C8{*86t*0*u* 8; *0/ *09 * 85 * 03 *.8 *2e 2 2L  *  *0-pD7+0!pH7+0@pR7+ 8Fj[8+ 0p7+7E";54&'5!#.+"32673#./32673!5>=#"&546323273#.$23^F#i'8\ i++iKA>#^^$RM+W;ff~% a- ')%4s &tul8Euy/5>327#"'#7&'#7&54>3273733273#&'&'$.zh/;]4&#.$1 9$?:`yA)$*%/$2& fc'IJ-6Ye)#\QT.vy !dB C@W|OyI"6=4.#"5673>32#"&#"327#".54>323273#.y<@0J? NF"7' 2zh/;]4WM&:`yA5x& p|+BoGi  Y3(#:-e)#:cxDQT.!!Sf "-.+3267#.+!5>54&'5!#.+"3267 +0zz0,),:z$78#4 9T z;+Z h/7!$>8B'  +  Q72654&#"%#"'#"&54632654'#53.'#5354632#"&54#"3#3#32>2N!&/cG7W&(3* uohdoT=4.#"3##54&#"#52>=4.#"567>329C010v) )' &Do %9"" HD&$6B-&u"rNS45! K 159=A#535#535.#53354&'533#3####5>57'#7'#5#35mVVVV$ '9 RRQQ&8;&8[Y7%B.F.$YQ+2+Y.F.uL2.NFFtootFF.SS  s3254&#"#3275332654/.5463232>73#.#"#"&#"#5#"5##"'#5>54&'53267672QV V %!&,26-A20  +$$$\&!F2G  '8K-&!30/9=.'1OMI /+#N+'!-!$B*6EC8&+@7%4L 9?-7!!?6 'A*S t#V}5  GKORVY.'5337'.'53"37654.'533#3##&'##&'#53'#5'#%#3#'7##     -#A! 0jy0 N_U 9w}P3{?0A!' -R<& Eec*.+.uZ.F.tFFFF.N|FF.K<X%67673#32#.#!#V7W jDWCT@W*WL ':@Qw E-W"(57!!%'5#"&546325#534&#"5673#327#26=4&#"La 0PSfzV63oo[8II&3>(9DL>?n@Cw`j+_?j?r#+(32&#"!!!!327(MK1F9~H) l(?3. qqxf{gq;D{. .u?6h,V9.  .c|e";5!!!!563654&/!5>=#5354&'5!37654&'"431(D2' *I9j :;YY :=5|N10I"`8i7#>05!7qH Q'#"#7!#.+77!5>=575576T949U6">> l.RS-O7OQO7Of7 !@$H7HQH7H1 &Xl#"&'#6?>324.#"32>%#"&#"&#"'>32>7>7#"&54>324&#"326 q.#@e1*h-A L)1K&*0K&?- F,   %3!@` 3d;|jzl) QYmW("r_o}"4-%-@_W! .?\U*'&'44/,J*6*9pB+B@b3p#/J4J o+ ;5>54&#">54.''#7.54632 <0B o4*9c8P"  X@$2%"G+"^9.))-p}&I85R|ss<3) D;:7>&jAW(EbM)07=534&'5!23#3##"'!5>5#535!#3654'&#"#32F7#EF9?14E:'#;9FFJ'"q-5 ,- -g7!!?-II=G%< a.8#5.54675332673#.'>=4&'53'g-&HM9%{-"J  &7",?1%qc*C' a 2IvI"14#8,)%^.?RK&}*.1%#5>54/!3#5>?#537#5333#3#/#73'().D%).N_yeS0*I+`u)5m!)<)<)<)n8<54&#"#73326323#3!D7Cb% g2VvC 2;4:.*-2?V["iM4,**$?$)4TX""_L7+*#*<*"*4323273#.#232>7#5$4670" M!    *  /[F"*; &=?!!'+1 >=JIAK.O`Be8-567354&#"5673#327#"5##5>54&#"c<j c<ee 0HYj/ or#st /+# L-^(# ###5!%5!I:HKBB'X0'R0'O*3(Mw'O3(6"&#"#7>32"%cWu>!Agec5> "A@Jl>32?#?.#"l+egA!>uWc+J@A" >5cP$)0P2 |r $2654&"7#"&5462T;;T$I"#*.45<>23:<."#*23:>4 <-zdePVl0B!  <.ycdfa|,= , 5+k\Z\Xp(7  :$tR_ILd*< lKb!1 4%VB?NO^$/  0"aECT* *UCET) . L98^/?#!"&5463!24&#!"3!26'#!"&5463!24&#!"3!26^C@C^^CC^#W7#"&547#"&54>32?'4&#"32>%#s/L$'"4! $G,8>Z$0    -*5B*&,Fl36 1G "?)%O1W>1HLe0*1$.(?9^%" 6"HK3/*=S/'=SO!WxnN%'LY]"&#"#7332654&546323273#&#"2>7#"547#"&54632?'4&#"326%# 7  '!!_5,2  >11A   -+ 5B*&,O7 1G,O'8mW>194"#z'(0o\BI!.:z 6"!KK3/*^/'" fp N+2<"32>32#"&63232632#".'&5#"'%&54n8P#)I1=a/$-Hm6)~   0%= R`iW_}]O?hT.$+$ /0#6,,':(Y1*!jnPԾ#&,r<#7.54>753#&'6733!51H$%G18t9BJ97>>/FE#$FF1OOMjR1e_MJ^H =A%#"&54>322>54&#""3267#"&54632#"&54654%#=p>6@Eo;3?*K'(M,"0K$&#4! $G,8>Z$0 *>15sR<4=uH?Xt1")Uv4!(Le0*1#.(?9^% N2,NR4ȷ327>733267#"&547#"54?"3267#"&54632#"&54654%#6BI 'J";?  ))$DP+*0K$&#4! $G,8>Z$0 *>1  u,:]:':$sR,OrLe0*1#.(?9^% NR"4"#73327632#"&'732>5#"#53;4&,H+"  !JHJbN73J`L#U.iv6V7%=(  )<ʂ|$:&! .IUQ~G.B=e#9KJ&#=<#N#),r([)5<2?67#"&54>76?#"&547'>2>54#"327 '!xpDdV ^r'J)"B5' %>;&0 0HVs.h='.HEW AI[*4 $q ~ R*$RG9*'07C(v/{6 O&hs23267#"&54>7#"&5463232>7'6767#"&54>54#"'63232?76764&#">76&0OM'Q}+s& *w3*.*<3vI`/%(."O*, &&[T TlR^{+ > RW6(;l=*?oHj|&) #H;,!:h5:jH6&U)+ F=&8 &,F,$E I'p_6' 3"E 5f#g2, -bQbp;&#"'632654&#"''7654/&54?327#"'6c{,BD< FA+! U?2FvjJ'GF?lJ$ lK,&G&Cz7=9BL*MJ=peOX/R<;9Y; V:!',5Z:7K@j:/g65GN:=DP\%26=#32#!"5432654&#"543!2#"354&#"543!2#"32#!"543&547#!&547#%%&$$&#%& %f  e%# $ $  $ !!!!!!23267#"&54?654&#"#654&#"+567632Q  ( -?&7 Z'!K LQx^%v  2 A1K R;.XsV  @%;%#"5454&#"#'7654+5677>3232>7;-R ^ Ksa y!&PM. ='@H Qi$&(.2 d)/]m#!+y :!C7K/   4@%.546$7">54'7#"&5463232>767>YAU~0F/*?C[@"_eR&Ga1'#"("L&'=5Ze@?JdU4tX@]O7gh.Y3"#AcD_-H<'72$@)2  4;:1Kg 4 I267#".#"327#"&546324632&#"#".#"'>3232654& , L5)XU&)92# .;aC44N)29(*& 65e)A( A&0*E)-,Ig@1$7K555*$.>.;S5*=&Ue'Xq'''"2'I'@)-*T;JV2327#"'#"&5463267#"&547632&#"327>>54#"32>7&#"%6^E>S4bo yq3^Oa4R:(@g$0 Puujo%/(&tPRJC-\KK4=d8' 34## -/&7`=1'M, Sc.(,1%!!*CnoNjLD  QRpAEhZ8nWRR3 -$0L0#*+%0327#"&54>7'7>324&#">-S7**F?[8/5\ o%(?%$/=#+#+H%X$LI*\&v=W32#"&5##5>5#532>54&#"b ]BX9<N3U]4eA,o-- KD)8 @?!C4#u u.:Y%PP3'N*(.$<5Ou%044&#"54;2#"'32+"543265&#"54;25#-,) a,##h#,.%P*#x\'&=/R+F133@/3l+m<-=Qh4>7.54>7>7>32#"&5463232>54#"#"&2654.'<) !6(= [1# RG!1y(8V/Nu>6A &&4f=C$ 8Fp'   /O8"="#%H8<%,:N87 Z aH%2KX-voLA2&@oDgG/&%; G'&+#-3  *=G%-8D2#"&+32#!"54327654'&#"5434'62654&#"#3&54Mrk" ((  %z|<+)>he [[V`& '# j&a[+",HHLE!!$$!U$,5?#"&'.5476 32632'>54&''#"32&54&'#"'32+U l^]4]^uW62OXZNG%M[E}I3"Jw]J_``_,9#ih!X6P"fMYq] ~#n4>3267327#"&54654'#"5432>54'#"&54632327>767&#"327673#"&uNQ+ ~.X:3# )j uT'2L  9V;)!(9$oLb2'%"("O'N9'!Cf5Jy(!(.{ t^4CyRX  0[/(*0C2')C=# '5^?kp*E?&6"$?CC7LWL#+"[.&c~6EW4.5463267327&=4.#"''7>54#"'67> 54&#"(0(aE<\ YUN$}  kN96N0=! j<j&9;0$/& $ <(G A(:%Dh;--=<%6S91?3"58U,!2?zn4ERG4"$1"ZE =   )<+4*2=CO232+"'#32#!"54327654&#"5434'6'4&#"3276&'#3&54el/ "& "#|6F5\"G#i f ^U$#  $ b!,WY(eKC$AF!$!! D4#"2>#'3#5>?'!5>54&'5!2654'53'$,K,#ݡ5(8 ::6)KV4$=h((31J$3:@D&4#%<6 !K6&< 8 *Q[-:'+09#'##7#5>54&'5!27'5'654'&#"27t$=$3I0K-:64- 8He@*B'6)r&< - ]]%<6 B?,Q=f6=/0J+6+!Sg/!+;g(!+;F733@ /7+0+:%%#.'5!'5654.'53#-L-`'% .)J4$" WB% [?,Q,to9 "9`"&*.%#!"5#"#"=763!2326?632#6%#3%3` nH5 Ek ;,]\(<X]$D6;$9"/j#4&'7#737#"'7!3#"&432326$`#0aaF:(a/32?|5#u EZp*8#".#"#>323254#"'67&'732654.#"&54632Wh-D#%6';$7":{F5. #28>!?,Go Pda/sZn'.'2#01[1E3* 9VC#?:"X?L[iSB^AlP".}s4>3267#"&54732>54'#"5432>54'#"&5463232>?>7&#"326?#"&zH|kSL-#b":6{ROU!*i)8I8&)'.C#*! (’Na0'%!)!N)!<))?9h9N~' B w]7D1jY9  ,P :,2_RHF&W9H&Q96=9,!A)-HE@(4.$$;, w7UE ,t*h~42V/3273#"&5476327327#"''654&547.#".lO3@$0XDKI*(>J%="hY ^(%ed`m̓k[zN^/#Y "$&RM)#*1>.#%#"&4632!3267%!.#"~ObbT%54&#"#&54632#"&54>7&54632#"&54732654&4&#"32@Dn H'0AMn0O2"#-U U=)5mh0R\4;cKX?/&M ;'5;o)"!xH!"&`{-6/ (hU>V3&PtU1R6" 5@J]CA3O+!:/ 2:I,1>  9$lr2327#"&#"327654'7#"&547632>?'>76767>3267#"&546324#"6G3)" >L+/Ie,!8B3"rM2=g@/";')"_J /R:i     )(% 7XN[S1'&!(!  -! ]LNB%0cM;"K=Mi7.eXr'!=(#GH ,)T =ag     Q. 9F 0`Z8R1&7 1 D ").V'326?67>2>76323267#"&54767#"&54>7#"&54632B*FpEi;yFi*5P) nrU5'K!g{@&(@Pt!&1_A:DLT@O2'$"1@RVLM^ #Pqv$KC* :{F2m.G'xZ3&"1/1ucYM|[cp@7);  [,"&547'632327#"'4#"327&543262> `e %P*% >'3D=,/DB2'\Xge+65zq<, mHcVd'(VeTf{!5>=4&'52"&544(42V==X;(((=X;;-+s4@ _f)33@g;!+;G$j!+; /5@F32+"5#+"5432=#"54>3!265432&=#27#!"633XZ7'j0, 8D˙(H)* i2MP #4.546323273#.#"#"&#"#'3326%#52654/#3#5>73%3'>1I(88(>*: <$#)/;5F4>  ;(!) )w} FN,!4".843+>%/? 73& 9F   A'!t){z)c @@|)' |)' y'{||)#u| #u"t  )# |"t#   "u#   " #   )# |" #   )# |"u#   " #   1#  " ' )X"{  ;,z",,?",#,?,~",9?9"9,;"9#,,w"9#,#,,< ",;I ; ";, >";#,, V/y&' _0L#LL#L#LL#YLY#LY#L#LY#L#L#LY#[L[#L[#L#L[OFGP* !032654&# 4>3!2#! 4.#"3 u"::"u5T[[W96TX,FrI>G/VYA))AYV/-V\C,G+OQ:%2:4.#"#3 #!5>54&'5!2654.'@,FrI9X6$ #6Y9>m6TX9;[W9!%I2G+OQ:%(*978;,&)-V\C, 67)AYV "<9&32KS[#!".54>3!24.#"#3 !265".54>754&#"%654.36TXXT69W[[W9m,FrIFf54gF#>>#Fg45fFIrF,r2I&f&IN-V\C,,C\V-/VYA))AYV6+OQ:%((BD&%FD*4"4*DF%&DB((%:QO&9<" | "<9&y#"&'732>54&#"#7332632yU.iv.QL-m7  ! p@EB=eAW!!!%#".'732654&#"#"&54632kS!>&' $>+DWK= "[?Xb} 4 4*mVMa.*=8}!%3#5#"&546323273#&#"3267 qq@d@p !  7m-LQ.->'!!⺢WA7'72!!ʁ))6*DK7654.'%#!5>54&'5!24.#"2#3 %654.' !3S55L((M56TX9;[W9m,FrIIsE- )BxO>v8+` !=>/ ,;=! >>.-V\C, 67)AYV6+OQ:% !4GE& ?M8' t!&A>43MTip4.#"2#3 #!".54>3!2!267".54>3.#"%654.'654.5.54>745,FrIIqE- )BwN>m6TXXT67UYYU7I>NwB) -EqIIrF,r+8vf !3S55L((M5v85M((L55S3! G+OQ:% "3GE& ?L9' )-V\C,,C\V-.WYA))AYW5 '9L? &EG3" %:QO>A&!9 !=>/ ,;=! >>.!&A>s.>> !=;, />=!& #u ">4%!'7!$ww!! G@>4-2@>4 '7!'7!'7vwwov !!"-]@>#!"-"i-@]%>]%>4%!#7!'7!73!o-2-ww(*2*妦!!>4'7!#7!5!73!'7w-2-{*2*w!8!;4'73232>32.#"#".+;w2jc*$E:;'7w*cj2-Q=:D$ XU-Q<:E$*cj2w!99/BB/  #Ub/BB/88!>4%!'#'737!wvwwxw!!!!-]@>4/]>4%'!'7!7vwwwU!!!!8H4E>4 %#5!'7!538ww84!!-1@>4-1I&: x>452#!'7!264&xwwwd"#8wx" "4"3!'7'7!"543#"dwwwx!<" "xw>4!##5!'7!54>324"32 5,8ww,1G9~??] .qq" +1F1??@>4!'7!#5".54632!'754"3w8,5 G1,w3~?!qq. 1F1+ !@??@ 4_.'7#"#".'#".+'7322>3232>;'7_wcx::9:@Cbwwb"F6:A3'+ 6D"cw!iT` `T45!!/.dc>K>./!>4'7!#7!'7!73!'7v-2-ww(*2*v !!"-# %7'7{7:Ma'tM l6V%kl> !##'738ww!!> '7##3'7w8w!!>> X5!3'31TpoT!7[nZuw@ # %#.#"7'74>32#AٙNk! LvIZfJosKnE # 76327'74.#" IvL !kNZEnKsoJfٙ> #!'!!"-_8"i-//l? &54732654&''?j"[4(">fiiӖq"a}8f>"ql? &547'7&' 654'7?jf? \\#iiӖq">@&`}a"o>%!7!x!>4%!'!>3^ @-^ @>x'V-^@>y'V>x%!'7'7!!!$wģw$uu;!̫!8-]@>x-]@>4&f>3&e>%!#7#'7373!!!%!3T2LL2g'X='7##7#'73733'7'#!%!3L2LL2L='=<]ii]]]]]JJI>'7##7!5!7!5!733'7'#!L2y'`2L=' ]ii88]]]J> %!'7!!!yLLJ=<]]8JI]@>] @> '7!'7!'7'!!L0LLL==<0^]^]JJJX@> %(0^ 'Q )\x3' _0(x]( >(@>>@>A%! !!!!!M5MCh'hq;]A@]8r8r>A 4$273232>322>323".#"#".#"#".+ wcA5:C@29B>A7#( '&4A5 ()2?A\w!/.cc`__`458">I>__;H;45! 4$2'7#"#".#"#".#"#52>322>3232>;'7$w\A?2)( 5A4&' (#7A>B92@C:5Acw!54;H;__>I>"854`__`cc./!-h535'7'3#3###535-!!88ww8<828<-h>4%#53#53#'73ࣣww8888!!-]@>4-]@4 %!'7!#3$ww88!!4>%!'7!5!55;8vv]]˓:8-&(>@>-]', @,& 7#'7#'33'35#5!\ \̔:88,8.vvGG8,& !5#3'3#53#'7#3g:8e8e\ \g=vv=8w,& 53#'7#3'5#3'#3#3'Ae\ \g8g:"!8eG$8w8== -' 53#'7#3'5#3'#3#Be\ \g8g:j8d8e8w8=_i[=-' 73'5753'3!#'75#'7##HJJH:8^z^^|^BD[GF&vvru#!w.& %753'3535#'75#'7##3'#!5#JH:8e^z^^|^gHJe^gGF&vvu#!wҭBD==>pjv@<`#!'!!#`"-$,"i-- >b-6' 7#7#3'3#'7#3'73:8:88^^^^ vvvv:>4$%#53>323'7'7##"&7#3267.#"R78Q ww R56Q 22 3! 2 85FE6!!2EC4$%T&'-] @>@!'7'7!5!'7!5!'>7!>wģw$ww$w'1 $!̫!88.;>?7'7!53!!#5wwY8K8!!8>?>?!'7'7!#5!'7!53ww8ww$8(!!!!>?@>?>?533'7'7##5##5#'73538ww8<8ww8(!!!!>4 75!'7!fTVα>4>475%55!'7ffVVVVαα2 #33#2*hhwK\lu`]%#"&54632#.#"3267` nhhn H ZOJghIN[ opghqPbhJ IhbO(74>32654&#"'632#"&%&#"326(R6&A0TH5?)M6oDa8PmT72>V0){'DP7&C(u 3Ǐ4=q7|Y>G ,)5!2=!5!54&#!5! p!<%2%%,z )#7#53#53!5!73354&+5#32#4$OG+%0%b E{N!%#%%#"&'7&546327#" 32654zERJKS˒z_=<\ɎgQUzytTEJKaS=7#53.#"5632{ !''9.%lR"4,lp ( %E-7Ep+ PP#3!5265!3!52654#5!"/21//22/_^u1  1K1  1rc#%3!5254!"!4!"^_/232/f/122/ccr1  1K1  1.#!!2673!!^!;1HVC6W K%'# %=ӥ75!BBz&)\'yrC6 C63#C.1N>?A74>7.546324&54632>32#".'"&465#"&>1U U; 3;  <5 0UU1 2;  <5 +5ce4)  +4ce3)>G #"&546324&#"32mMOllOMm0R8:QQ:9NllNMmmrQQ9:P]b 2#"&546+;<)*;:b;+);;+); '7p_x8A/3O  #u`1 # 91>a*6&#"327#".'&'#"&54632>32&'&#"32a!ZE!(++0,C-6@>RF@J$05-*%*.,50M0x =#/))'0 ).fCKGF#1_")I17n4>!&2#"'#"&546326324&#"326%.#"326!dOoa'w6GOfO;q#taGM9B7&f  36i-47A7&gP6XaHQT9`v;jO(+( D>8rE5;jO>)3!C>)!7]-773##4'!&'7?[S,p2 -R]ALD#!%'4'6P~ }HK2r0J1(XY)Px3P(N #'737(,J(-kQ,J%-P333P(P(NNT73##5#7373 Dd(P(!De(P(!hz\S"iS!@!@>P=!#4&#"#462PBzMPwB؜9KwqQ5no>P=@=78*%"&54623254632"&5467&#",C"'acQ,C"'ac.'\.'~\08'BWB)8'B'BOBV8z3:A%.546754632"&5467&#"#"&54623257>54&'#>nzbdQ,B"'aLm/adP,C"(`TbmyVTbmnaP\h2\.'2 Zo:g3\.'&LT]ST78wgkry2"&5467&#"!54632"&5467&#"#"&546232>=!#"&546232>=.5467546!!>54&',C"'% ]N,C"'%RmmR]N,B"'$]N,C"'%RmnQ]  _GG_XH^^H.'!?B-//[.'!?B-<=\.'&!?A.00\.'!?B-=Z\<[QPR78%#"&546232>=#"&546232>=&'#"&546232>=.46754632"&5467&#"6754632"&5467&#"54632"&5467&#">4&'&'67\J,C"(#yZMU"'#xZM,C"'$YddYYM,C"'#xZM#L"'#yYM,C"(#]hh]JSSJZwwNWWxxa.'& @@/]!8\/& @?08"_\.'& @@/{%frf%[.' A?/c"<\9 A?/<!a[.' A?/|%gvg%n!U`U!#x#!WbW>"("V8<'7.'#"&5462325#46754632"&5467&#"/c=HNdP,C"(`C`,bdQ,B"'a&=" uO?J\.'&7 Pd6h2\.'2*0V8G3>54/7.'.546754632"&5467&#"7#"&5462325>bmnaTbmb?Z4TnzbdQ,B"'a?I(adP,C"(`TSTTU.= \h2\.'2qrg3\.'&V8G3>54'7.'.546754632"&5467&#"#"&5462325>bmnaTbmJ)Z5TnzbdQ,B"'a@b?adP,C"(`TSTTu.? \h2\.'2oUg3\.'&#'y:'yb:y#'ye'y4yK'y2y@0'y4'y'y0y'y)'y"O'y#)'y'yM'y`M'ya)8E'yZ'yS8E@7632327#".#"8&w&TP T)TL O'77m 76Y8E@%&#"#"'732>32E'O LT)T PT&w Y67 m77vc'7.543232654&'5#"&/&#">Sm"=<7*U7 70;2E@A&M.??c"V-"0' .:>"\%9f >323267#"&'&'&#"1K'?O0I"D7-A0"S!H!C?L5{JPCTWG,H1iCbSO.@8hE#"'#7&#"'63273327E.6-6:6&N(&w+5/6<=$TG$m)X$i+l8E')"S7}DY|67D )#7#537. #"'63273327#"'!!D>;  T 8";DK O'&w!-B  m Y hB49A2'S &4A/&%!#7#537!5!733#632327#".#"32I!(2C%&B3'! [Z[Z 01N+%C3'!# # gg ff ') $ A::732653#"&'#%#4&"#53>23A):(23B):(t  {/?t  {'4J {9& WF`{ /I/H/G {/Pd { /" 6%!#7#537#5!733#F6F5F6F5BBBBB: !5!5!5:BBBBBB>>6%!#7#537#537!5!733#3#!>,6,..4,6,..;oo8r8r8oo8r8r>> !5!5!5!!5!!5!>:8r8t88@>y' yJ?$u>:' y??!"}@=' '$EA'!) '@:=#7#537!5!733#3!%5% E$9E9\UBBBBBB%BHE:A#7#537!5!733#3!5-5E#9E9\SBBDDBB.HHBc'Kb'!J!>V\!)&''67.547&'7>74'6\7A#2 4,,4 2#A7u1 "''" 1uIFFFF kE-  ))  -Eky)&&)yqqpp3I63%&+#7'>?.'7;7367IZ U6StG (*?$$?1%  Z U6TtG!*7)I0-F eP "&M" fQ  M'#@<h#7'5%737%'76a$N6BH4fRBåDHTuHSM>:h#75?%573776AHZ6bW3fDHTuHRBڂM@>#7#537'5%737'!!76%d}HK%6oT@AD?\]?^B]?2HCiHt?0^>:#7#5375?%573!!76%o8;8:6CD6'~\]?WHhHDBq?a98EW'S$S5BW&!"SS8E#&#7'6?'5%737'327#".'7D#?"#gB:6D'oT;G?T#BD/;\W M y YBa2HBiHs 5&m $5 "W5B#&#7'6?5?%573327#".'7D#A#$i)A*HDS<F>T"AE(\X O {gNH_|HEBr 4%m #5 d;>9<'$!"C>8<'!"$B>7<!#75?'57'5%737'776o@;6;L-̜242H=ZHb6hB^B;HFaHi6oBե]f>7<!#7'5?5?%5737%776.&/(6."-p[ɧ@B\FeHpHGBeFnHy|HZ3{J*>>'.'5>7> 06LTlE! ^ 4-/ +>>|>>^')(@>>_') A=Jo'SQ>K`'SB>>h$)#&'5673>70./76pZltg6[&?%  $,K+N +0A% (+$f;0-#"^$#*C6n^!!N! >>h$)#75>?&'503767&6Z&?$  $,J+N *0B$k6qZmu. (,%f-#"^%#)D6n^!  ;0s" 4H%!"&463!!"3!HggOagI"ʔBlKMj4H|4Hh#7.546;733#23!!"/#"E4CQg\,E,}"&FOa:f}JennBBN_lK8[4Hh#7#53&#!5!273+32654&E, .E6=JgM7Oa3fnBmBsyFelK5V4H;' yTA3H=' y3C4uH%#7#537.546;733#!!"'!!7#"EHa"H[gm$E$l NWOaDK?XOe\\BBK?elK=_3uH'#7#537#53&#!5!273+!!32654&Eh!'E18Cg;.Մ%Oa,K?LBjB d}!sCeL?lK0R4wH; #7#53733#7!"&463!!"3!HE"EggOagI"I?==?ʔBlKMj3wH= #7#53733#!2#!5!2654&#!E"Egg"OagIމI?==?}ʔBlKMj>P=332653"&5%#'73>BzMPwB؜wYY=KwqQ9no6ll>P=&0RP@=>P='@=TH%!!!!H L@4(|TH=' yTCTH;' yT AUG!3!G@p LUGk. "&462.''3#>5#k]-]\~]\.]k. "&462."!326k Ɣdc~bb.bk. "&462&#"4'/'32k(I[]G<<<hG][~i<<}GGG <k."&462&#"%4'326k(I[j<=Z->X==X~jҗԖ=XW|WYgV=7.546324&54632>32#".'"&465#"&kijji0V V; 3;  <5 0UV2 3:  <5 ~iԖԖ+5ce4) +4ce3)k. %!5!6"&4624&#"32!5!jxijjiLj.iԖԖ%.k."&4624&#"327!5!kijji[x~iԖԖ.=? )!5##5#5##5#?888孭孭=? )!5!5!?8nn孭孭=? )!!#''?`ɡPj8B(=?)!!$#"&5462?8n""!06n0!!">%!#3!`88> T>&!#!5!8L8>&&>%!#3!88> %!#3!!!888> %!#3!!!_88_8> %!#3!#388h88> %!#3!#3#388h88z88> %!#3!!!#3j88j888>3#33733##7#v88ΑCA8>33#3##7##3!7#CQPu_SASg88_}88˓%!#5#5#7373733 8B8 Kk8B8M ٟD[!!oD>3#33##7##33733#7#v88HNKM`88LMLLnY8}}8>>&075>54&#"#4>32#".5332654.>bcE8&+//+&8Ec+*+  #A2yx2A#  +*+>>&|>>-5%>2YX>>|>>>' yJB>>>&G y>>Y#"&'!#"&4632!>324&"2bF?]  ^>FbbF>]  ]>FEbEEbFaP<Y>Y #"&'!5!>324&"2bF?]  ]>F0EbEEbFaP<8!' y ?. )323#.'>FX6RyNQp;^w$ %"&5462"&5462'773#''7#5L" (!" (t%%%% %%8%%82J%7''77'8888UP]@2< 7%''77j)*88+@J|4! ' 7""B""B"BB"4! '""""B""6uC&Tw)" \>@ \>>@4H!%!"&5463!!"3!!"&463!!"3!H5IJ4+-ggQouK"J32K2,>,ʔ2vQRu4H|E7=I@N@ H@>P!##46753#4&'hBE`BaCaBbD kH5e f9Co %##5##5#535#533333##5#(P((P((PBBB""B'G43'j'B3>*> %5% !5!5-5>qqR24ɺ32>*> 5-5!5!%5% >qq 3242>>[ %5% 5%<\QBHK>>[ 5-57%5>\SHHBL>>y''.'5>75>7> 06LTlE! ^ 4-/ +; 03?05^>>y'5>7&'$'5> 06LTlE! ^ 4-/ +iN^50?30 >>|16#7&'57&'56?3>74.'.'?6_SboZc|E670E)H,$H '+6=2R;7#;:B ^)/Z6e^7M{^ =7D2 >>38#756?156?.'5736'67&>va6Q$pCC6IJUxaj);:6(*^eHN#!^w5&.(,^10: ;!J*x TuH#7#537#!733#!!!!7#EHaC$E$lN K?LZZ@BL?pTuH#7#537#53!5!733!!!3EHa~C$E$lN؋K?J@pB\\J?9pTwH= #7#53733#7!!!!HE"E LI?==?@TwH; #7#53733#!!5!!HE"E LI?==?{@p8FEW&$SX8FEW'X!"S8FEn&PX8FEj&LX>>h -#'5%7377>_6gU6I2HpYַKYX@M5>>h %#773'7'7>U6I_6g`p4ЈַKY 5b@>^>%#7#537'5%737'!'7>*6*h|W?M6AON2hRĆ:ih4c< yŜW1ϰ[?>^>%#7#53773!'/7>*6*h|C+a6iON`Z):ih4ZNxH*h}lOF'y'yIyur6'yu'yy*uq'y'yvy*Jtq'y)'yIyv-%%#"&'#53>;#"!!;%` II `Jlk pE]2]2eI2Jd4%#"&46;#"!53#5!;ggJl:11 pEʔ2eIgnJd4%#"&546;#"353#5#;]yv`6`11f1|ZVu2B>GG2II>M4'y')i4.5!#"&546;#"!!;4h]yv`6`#f166|ZVu2B>2>M')4%#"&46;#"!!!!;gg:]Zi`5ʔ2@42 24?4, Y4 4 ')i"4.5!32+53267!5!.+4h]yv`6`#f166D|ZVu2B>2>M= %!!!!!!YY8888o )%2>54''46327#"''7&"&.J) ,5dX@558aW@657.I) ,57!/:*D7,^766CUb766D!/:*D7,5''kk0qj~ ) '/t01> !#!<^> !#!5!<^<>  > !l7#!!`BJlBl %&"654'327&547#".'632LE@Q;U,5-(43RGGAD4/./ .0/3#l#l2!4>!.#"`_.c |ldae`| 1{ 632%7.#"+rw,s;753.'#5#>5#,=U\\U='9W\\U<'g9('&:g&;f9W:):V]]U;):W[':gg9()e9>e'8D!S%##5##5#535#53533533#3#5#!r((tttt((rrrٷssss((ssss(}4[-59AIQ2#"&=##"&546;5#"&54632354632+7254#"5#254+;54#"2=#"9+?>,/FhG.,>>,99+?=-/FhF/,>>,99889ZHg9889gg9889998>9889ln4F ,$4&#"322#"&546##"&547546232uzyvvĆÿ&l   l l    2F'W%6=4.54>=4&+"7#5;#3+53&=4>54.=4  "*"#### 6: "*" ;6 %.%##C?$"4 "=$299'!#2 4"$?0097%7) !.?00?6&7+#"-9_ !#!_<^]}!*"@8]* 7@{7*WL8 "#4>32#"&547&TJkS3GW?"7(!5`X'.&# 9!.Y>T<%&#"'7>32TZZ 01N+%C2(! ff * #>T<#".'7327T!'3C%&B3'! ZZ3 $ # ffTR*W?-AҾ-A-A'-8!!532;#".#jm6_@B4F$/T9A8Q-88;WgW;8;WgW;2#!"&54637'#3!'37'#7!&    [0lؔ  [ 37'3733'"&5463!2#CdRPf  }(  [ +7CO[gs'3?KWc%#!"&5463!24&#!"3!26+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2#!"=43!2%+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2:(*8:(;(:1;Q /     0  5 /    /  5   0  5  0  5 /   0 5 0  J m   14 0    11   `)8:')97+K K K  L  K K  L  KK K  L  K K  L  KK K  L    L  K:223AA:.'7.33(4* 7'3#%%%%k+##<DAcjptb7b#%#&'!!673!2#!!"&5463!2 (bHb(!EE q Sj66jV=(=   7b#&'3!!#67!"43!"&5463!2eE!(bHb(!EA q =Vj6h"h6jV=(T   7b$567&'!!!&5!"&5463!2p=Uo75qW;  L q E!+lk,!E";   7b$%&'547!!!6!"&5463!2*q57oU= H ; q G,kl+!Ev"E   7b463!2#!"&5"/#!7 q  }$H~  ",Vj-AҾ-A-AD+)/ zo0/ )/ \)/ )Da)k'?'F?/DS)D)"   uH<#<# jA<#<# <#<# <#<#' &t' tD )   # 3%!!7'5!5!}_D^D ^;cm5\^^`'01X!5!%32>;'7'7#"+}'G5347I)CwwA ;128>R/88?1N^^N1!!1N^^N1 "/49>CHMRW3767&''#67&''7&'567'767&&'27&'67'67&#767'4'u6J9X&b/DAAD/b&Y8I6J:W&]1/p(PT){R 2>@2u)WR@B2c&Z:I6J9X&a0 =CB>.[&U9L6J:W&].B>1r*QV)sO 2>A1u'VP&~W1?c."&462.#"373267#'desjddU~cc(ccF  !"&632!.#">54'!Ćÿ(wFDxqACo4=K~w:Dt5~'('(!()$  !5!! 7l7* g711*-$J$  !5!! %!7l7# g7111$L !!!!tSCWW&5C ;# gU ' 048<DS#5#532#53#53##54;#!"=#535''7543!5332#53#53#53#"=33!73"&'C(3Gnnnn (4 99*9z+(U(((((( 4( c2FnKTq: ((((( 4(Ei$$5mmm/dP(3. I! $ 7LTX\`h#5#532#53%#53#53#53##54;#535!353#5#"543!237&'#5ᘀ537+5353%#53#53#53#"=33(&((mm((((MH(\Dm ((9%,Zi(5 (h(&(((mmmm\(H3(nh(`nn3G((~"n$L> IBF(n}((((*-%#!"&=4675735##%54&'!3!26[Ȋ[OppOlp:]|^9Ex8yD[[@\8]#oo @sF-Fs@yDE %+0%#!"&=463!254&#!"3!26"''&''&5 [Ҋ[[.[(ExyDEx.yD;P, jrf֊[[[[yDDyyDES 7$ jx(8! #57>7RT"JT=.GiF%(8z 3#(RR (8 .'&53z: .=TJ"TR+ %FiG8X WX8X V8X!UYX8M#3#"L|^X8 #L XM ;#| ^78,4&+53|8, #,L 7, 3#53265L| 8 #4>7R #1J0O4#/>*0O&8 74&'5>=3#ZabYR $*%%*$ RR~"~Q~q$=/%  %/=$8 .55NB\0 D$P -3Q?28 3R-8 cX8 %#4>7.=3R $*%%*$ RYbaZo$=/%  %/=$q~Q~"~-8 aXL8 #S 18 #&'&#!#&543!$8qLX +6"T1: %!"5767'3!2767m ED^">o6v.l!5LG >x@H>@H'kWl80!PI8y!yy Ly|8yz6 ,8##"/&4?632343276325#"/376!"=54327G   fg (S SiRK eej ff SSRIHog! !5!!"C%Bk L@8k9 @'r"^@9s4^@] #&'&#!"#7!# AIIA #v9??94zO#)!!M4/%ESs;!,%"'%&547%62%"&4622654&#";  `` (L冾_NopMOnnQ    v޾^pMNooo8v#!"54763!2!!v  98  { (82!2#"&'!"547>#32%&#"0O1D5O1/O05NC56D76D89=;:6=;HpII)///8)1%Y/+/26KO/6A/;7,7/;/7,(37/(3/147/7/2(3>/./&$:2///(%,cBY/%w6heX/7e+vd`Z/)d/ydY/9x7ddVY/)w)df|Y/5f&reL[/6j6td+Y/,d6rJ/'E//6(J//&0'EJ/#/&0'EJ//&0'EJ/,/&0'E)/1%/.$O/</6A17/% /7,(39/1/$&0lQ/0tl(oB/% /8 64A/& /6;(=dQY/6i)wcQW/*p6hbQY/6g5weQ\/8{6jbUX/3b6qJ///(/'E- 73!2=3!5F  4cZ1VK// 1FM ##########yD!!yD0y\!!y\`8!3#00!8!3#``!8yD!!#g0D0$8y\!!#g0\`<8yD!!#`D0$8y\!!#`\`<8D#!50PD08\#!50P\`8D#!5`hD08\#!5`h\`y!3!0 #0y!%3!0%;`y!3!` #0y!%3!`%;`!!5!3 00!%!5!3 0`!!5!3`0!%!5!3``8y!3!!0g#0$8y!!!#3g00\`<8y! #3!!#`g0 #0$8y! 3!!#0`D#0$ 8y!!!#3``D0$8y! %#3!!#`g0%;`<8y! 3!!#0`\;`<$8y!3!!`;`<8!#!5!0P!08!#!5!0P!`8! !3##!`0PD$8! 3#!5!3`h0D08!#!5!`h!08! %!5!3##P`0`<8! 33#!50`h\;`8!#!5!`h!(`a8yD!!#!yg0PD0$8y\ #!5!!0P$`08y\ 5!!#!5g0PD`<08y\%!5!!#Pyg0``<8yD#!5!`hy$008y\ #!5!!`h$`08y\ !5!5!!#h`0`<8y\!!#!y`h\`<y!!5!3!y00#y! !!!5!3g 0D0`y! !!5!5!7P!;`0y!!!5!30\``y!3!!5`D#00y! !!!5!3`D0`y! !5!3!!h`0;`y!%!5!3!y``;8y! !5!3!!#P0g00#0$8y! #!5!3!0P0$`#08y! !!#!5!3g0P0\`<08y! !!#!5!3g0P0\`<`8y! 3!!#!5`g0PD#0$08y! #!5!3!`h0$0#08y! !5!3!!#h``0#0$8y! ##!5!3!0P`<`#08y! %#5!5!3!!#h`g00;`<8y! 3!!#!5!3`h0\0$`8y! 533!!#!50`hD;`<08y! %!5!3!!#P`g0`;`<8y! 3!!#!50`h\;`<`8y! #!5!3!`h`$`#08y! !5!3!!#h``0;`<8y! %!5!3!!#h```;`<y5!!5!!yy00h8(!3#3#h0000!8y !!!!#gg00`0lh8yD !!###h0`0D0$$h8y %263!+!!+o0`00lT08 #!5!5!50PP0`08(D ###!5(0`0D$08( %#!=!#0(0=0`0$y! %3!!!0gUk0`0hy! 333!h0`0Q ##0hy! %!373!y0`0Q0Uak0! %!5!5!5!3 P00`0(! !5!333(h0`00#(! 3!5'!5!30`hh0!0a08y! 3!!!!0ggk0`0lh8y! 3!!+30Q0`00!#0$h8y! 33!!!#h0`0Q0k0`0l8! #!5!5!5!0PP!0`08(! 3+!5!300`0h0!08(! 35!3#!5!0h00$0;08y !!!#!5yyg0P0`0l08yD !!###!y0`0D0$$8y !!!##!5!yy0`00`0l<0y! %!5!%5!3!yy00`0k0y! !5!333!yh0`0Q0##y! %!5!3!)5!3yy0Qh00%k00;8y!!5!3!!!!#!5!P0gg0P\0k0`0l08y!##!5!333!!#`0h0`0Q0$0##0$8y! #!5!3!!!#%5!30`0Q0h00%k0`0l`0;8y %#5463"0άɺ08 %44#00 yXy!yY7y ]/7y 7y7y  ' 7 y_`\\''$D!5!D0!#0!'yD!5!yD08_#0_'\!!D\`!%3`%y\!!D\`7\;XT5!!5!5T@P(8!33#0`\;$XTXX8!Y%!!8!5!}82!5!8!!w8,!!8!!q8&!!8!!k8 !!8 !!f8; !!;;8 !!$8} !!}}8 !!8 #38` #3```|8 !!} w  #'+/37;?CGKOSW[_cgkosw{#53#53%#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53%#53#53,>>~??>>~??|>>~??>>~??|>>~??|>>~??>>~??|>>~??|>>~??|>>~??>>~??|>>~??|>>~??>>~??|>>~??>>~??>>?>>>>9>>>>>>3>>>>>>>>3>>>>>>9>>>>?>>@w  #'+/37;?CGKOSW[_cgkosw{#53#53#53'#53#53#53%#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53%#53#53#53'#53#53#53??~>>~????|>>~??>>~??|>>~?? ??|>>~??|>>~??>>~??|>>~??|>>~????|>>~??|>>~??|>>~??>>~??|>>~??|>>~??|>>~??>>~??|>>~??|>>~??|>>>>~??|>>~??|>>~??>>~??|>>~??|>> >>~??|>>~??>>~??|>>>>~??~>>>>>>?>>>>>>>9>>>>>>>>>>>3>>>>>>>>>>>>>>>>>>>>>>3>>>>>>>>>>>9>>>>>>>?>>>>28 =AEIMQUY]aeimquy}##5##5##5##5##5##5##5##!#3#3#3#3#3#3#35##5#5#'5#5#5#%5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#5#%5#5#5#'5#5##5#>??>>??>>??>>??>>>>>>>>>>>>>>>}?>>??>?>?>?K?>?>?>?>?>?Q?>?>?>?Q?>?>?>?>?>?K?>?>?>??>?????????????????>?>?>?>?>?>?>?????}??}??}??}????}??}??}??w??}??}??}??}????}??}??}??}??}??q??}??}??}??}??}??}??q??}??}??}??}??}????}??}??}??}??w??}??}??}????}??}??}??}???? !5!}8 #3``8|,!!|, }8,8}}, 8}8 !!k 8 '8}88 !!!kr 8 ;X,| 88 '8}88 =X#)!M#)!!M ms#!%#!"&54763!24&#!"3!26eGHd/5H[Ge0I33"&H3[3IHddH[I.5dH[4H!'43II#&CB # 7!5!5!5%!5!!!!5!CsssMms }} #F@# #'+/37;?C735#535#3535!!35#35353535#35353535#353535CMǎ }}}}}}} }·M }}k}}k}} # !%#;'!!535'+55ᘴx!!!axh#h>z#Z)Z#Z% ! (5(xTx x%'!udeΗa^ ^:6d^ 7 4(LL8d/=XZ /;W@^; FXX@ ^< 7- (o#Z Zed?#Z %!sKM7d5(>d^k _W8^  >\% \>d/<bY /8W'@^= FbZ@ ^: ]~# hghg$% *+gg0*-gg$/h i/qv*=m 33' ѿ?yk:<5 "32654&'2#"&546ژ)ٙ֟#%+17AKQW]cio%&'772327#"&/"#"'632&'&'7&'&'7%'4545&545'67%67'6767'6767Y  [    3    O u D      2  3  ^       %   g   n !#"&546324'6&'6'ՙ՘1tt;DDuE;;ku[֘ՙ^_. x A^ !-2#"&546"264&'2#"&5467"32654&ژۚX{zzzR_bcfٙ֟բxVW{{{'abdbR# 2#"&546ԕՔ՗#2654&'2#"&546ԕn Ք՗#"32#"&546Ӗ‡ѕԕ#!4&#"4632#"&C Ք՗_ԕ#32654632#"&C‡NѕԕWӖ# 2#"&5463265!ԕ֓Ք՗ ¿#!"4632#"&CI Ք՗_Eԕ# &'.5463VA`yԑ1)j 32 y`AVՒj)^ "32654&7!8NO87PNvN89OO6:OM#  2#"&5467"32>54.!!RT`]\^]\\MUT[]_\\]\]O#Y "#!#4&2!46ɉ~ǑZ#X !2653!37"&5!vMȊ~rœZ#X "#4>3Y\ ccW[e`U~0@\~#`~@#X2#4.#"#4>`_ WWY\ cdaX[W[e`#^#!MM#)M#3!##!#M(6 "32654&'2#"&546'77('88(:NP78ON7'(88&(8(O:6OO98N# )!!M msW>=#)!!Mms#7!!!Cs M sm#!!!M # %!)!%!)9Z ss M#Z% !"&462 "(5(" #Z%! Ne(5>#Z%!(5( j "32654&'2#"&6ߨ➫wqԯ㤡)us# %!!!)!!MYZm s aR#@###@# 32654&'%!4632#"&F½{:y*Ք՗Q6ԕ#@##1@##@##) MdmF+a%!!!a7s+Us+a%!!a7+s%!!!YYp}%!!Y}Y#@ J763232+"/"&=&'"&4?&'#"&46;67'&5462675462G7U T.x x.T U5I  H7U U/w w/U U8G  w/U U7H  I5U T.x x.T U7G  G8U  U/w 2Jy &547>32>32632":.,4O+ !) M 6,JJC ;))4,)8%8# " *"&5332653>2&#"&#"&#"&#"Tp@<<&54&'654&'#'%H'%'%B'%}'%{'%'%4'%&'%m'%'%@48\0_TM9 6IL=cM\W4M/7?64GL \ I M   &   &  &&r  MR@VMgK;,0$H$0u # # # # #e #H # # #e #} #@ F     Z  &  H  (:/&lC>fZ5Ad4@%  a  f &&   1EoAgnJ<_7"9 97/AO7632#"&54'7632#"&547632#"&5432654.#"4>32#"&   s  sV *5% Hg$A)If)%4@/XXWb\ \  6*B$hG &3+gH3Q- ~}   !''!U YZ쪪  ''%77'7'bF<gH0> z|Ҕ'&#"'67'567 F#NRWQ++QO&C :+,+SVCu&#"'67'57!#7!67u F#NRWP=QO&C :+45SV  $4&#"322#"&546"&462uzyvvĆÿ"l"te t"-9#"&'.54623267.546324&#"26%4&#"326R?yx?Rfe_EhiF^eGJb1H35GHhGH35FF54G@` `@JbbJEcqrcEJbeG4GG43HF55FH34GH n)732654.#"4>32762#"&I*5% Hg$A)If)%4@/N; 2XW*B$hG &3+gH3Q- 2  =MY~} q0;2>54&#"".546327&54632#"'4&#"32 /I(sPQrsP8Y1 aPBV;b8X2 cR?W;uOPstOQD!/:*QrsPQr((9F2b2CY_(9F2`3CY^stOQr 64=IS^%+!"'"'>7654'#"'67>32#"'.''627&#""32654&%#"&'32%#"&'32?x  (AZY@(<<E):8)(99 =$2%,/ ,1!7=1D&  C!!D  h))N8()99(':    6 )P"264&&'.#"3!262327.'."327>#!"'>7654'#"'67>32#"'.''627&#"2#"&546%#"&'32%#"&'32h!/.@..2 # c0/ !:* A    +>1D&  C!!D  j$$N:'(99)(8   !C )!!74632327>763#".M T3  7z&#IU=;# msM]" ZoH.<, *rv*=C  % ' 7 ;;!;;;; ;; < (~ '1;EO]z#"546#"546'#"546#"546'#"546'#"546#"546#"546"&5332653>2&#"&#"&#"&#"SOkQ(p@<<&3264&#"7>%227&#"6"&'327'>5676=<6 9Dt<;&x<1<&!-@54O 4Kd ! Y [Z T!*  7-'`d{ d[UVTC  "- 0)Wy`,(%? E7*S=%K= *7)3#5=7$J0 ;.%3  J   i 8 '" H#)@1  g  sJ=#  )  'q1((? ) q1 E#".'&'>5#"&547&54632.54632>32>32%#+'Tc,+ 5I 'Q8A+HH*!H:S(O>* ; ,,+)45 3lW$ *H%#*)[h1 63(+; y:JT4632327>7>326;>4'32##"&547327.=#".%54&'   # G%)<85 '# &$./=^/$ ( >L!7 %mM>jH,2-/  !#&4%'.$$ "6 Z3)1 +S+%7MCV*E / z8&7"54>32#"'&547.547&5467'"%632#"'32654fZ2,c(5'M4:h64 l #1*$ $(B.[.U 6 '!_qPO]SK z8*;"&##"&'&'.54>7>32%327#"&546324l 46h:4M'5(  ,2ZݙR($ $*1# !' 6 U.&9[.B_KS]OPq /*.\f|%##"&547&547&547"&546326323275'#5#3"32?32?#32?>35"&32?&#"".'32654&#"2654&'.#"'32654&/&'&(,6X "i%*)|i S#6F?6#G$; +'2% C6 O.   ,0eG?E  ] !   b lg J# 82 $!. L" 1C@G  15*#  R=R    *!  1 "*$    *.[dz47&5463263263246323!'753.5!4/&#"''5.'&'#346"6544>7&#"32654&'3267>54&#"74&#"32?676;2 # / K" 0C?H  04+ #.  R<R   * "  1 #) #  `-6X "j&*)|h S#6F>6$"H"< ,(2$ B6 !  R,  ,e$HT  2[!"   b lf J"8 /*.[i}%".'#'732632632##"'33275.'.'#'7327'732654/&#"%327654'.#"#"'&#"327>4"327>54&"32654&4F6#S i |(+$i" X6, 6! .O 6C %2'+ ;$G#(4G''= !. ]N  (7  '  #J 1 Z "L .!$ 2C"  #*51  G!DR  ~% !* A&   Q $  -1^k4>7#5'7!##".5#"'#"'#"&547&!#3>7>757732?654'&'.327>54&'&547>54&#"324'&/.#"3264'./&'&#"326;0Z "L /# 2C" # +40  H"DR  ~$" * A&  R  # T4F5#T h |)*&'n_" X6-i7!-Q 6B $2(, <"H"%4H$#'< !/![1N   '7   "J  "_go#"/.5462#"/7326767632#"'#"'&'#"'"54>76367&'#"547&54323254#"3254#"3273254.:  ?ZY !  !  !$ C"W0 !'O?R, ?2<6."?I2+*%&%&&%$' {290?HI>&E0(--#5  ' ) 75"13$%  6 +.&)+.&N   t*%#!"&547654&#!#"'.'&543!23!2te}}x ! '  G# 'R;'N& q&Ko}4>3"&#"&54>7&%4&'2654.#"'654>2654'732732>7#"'#"'4>32&#""6=63&'2.54,5**< <* #/K?R$:, IL?*D( NO$4)K-# )< ?Q#  #F=  F=SB:Qm95: :4 /(0(ZD1 Y2A*D( %1'&2$) HV@(.:T*$CCN,6*%"i=5*!#*> D )#/'HW;!  !'3Z ..GE[C}) m =\`$V< bV!%)4@EJOT`kpux2767&'#"=654'!#".'"3#".#"3#".#"3&'#5'>7&547&547&547&47&547&'&'2654#"#"'2654"#"527254##"&=!#"'67&'5&54"67.546323254&4'6'4'654&54?654/&54?654&#"32632&54>&4'#57&'67&544'26'4'654'657.'7&544'6'4'65'#"5432#"54324#"32'4#"32= ),e" -G-!+5 ,$) $U"(*#$# #$#*("U$ &$, 7+!-:& H"e,)  =9%% $"!#$+^b7:2]3%" 2\2 9")" ' !C/ ')$m "%>+ #$ Y\  r  l  r     )>% # ! " !$F  \\  F$! " ! # %>)   F!   < <=#&! $  ! <<8<x  / / T * * ) _    +l    N!%'#5&54627%>54&#"!VڐNN4N4NM5M T J iNOh ,GK12JG %#5'75#535#53533#3#Qk"I\\Q\\j"ee2H!PPPPPPPP1H  _3254&#"#"'>54&'53#5>54/#5>=#5>?5'.+534&'532"FM "P=  2#d" T = |d  % !;6 u@8d!.7   #c Y!7 (; A {h (U8>!3###535#53533Q\\Q\9PzP9PTTP %#5!3#53!#53!#53#!534YY44YY4Y44YY44Y "32?#"&54632373'7zTXSs6V=Žh^aaONNmxwTX#!‹C\\8]99] <1u#"'#"&54332732672"547654'&'&5432#"'&'#"547>7.54763265454632654'&5432%#&'&547632O34/)0  & (4 [ 2V #sjV#R4T  T4OVjD    D12 [s# :1+ ## Hm+gjx#"lgm1!/ /" 1mxbX]cN.//.Nc]Xbw#E1BIjg+ml" |v4'6'.54675#7.5467&'7#>54&'&'"&547&'"5475"&547>77>54'( V+!  dH15$,H$J-AG5 ZZ 5GA-Jfr>(Ge  |3Z&l&Z4|!+V 5?Z'< E -.,#)Lx$!,-J*# ,&X4=Y .. Z=6V,`[;x#zK+-%//,`J   08v$**$v80   L <'Z?5+ C%"/#"&'#"'#"&54>?&5463273327''7654&'7 d>QDhD$    /!3`&6FXT.tKzBc * c'<1 k    -TDXU*SU+ }w>d  %#"&54632'6'7654.'Ćÿċ`TW-]Q3HG3Q\-JBD)FoAnQPoBoE) +732654&#"632#"&546324&#"3262#"&546mYCBYJt@* AZoRD\]C}5J^@XD_‹‹2& 35!%5!%5!2  dddddd2& 53%#55!%5!^ ddddd dddd2& 35!'53%#=!2dddddddddd2& 53%#553%#55!^,dddddddddddd2& 7#553!5!5,  dddddddddd2& 53%#553%#=!^,ddddd dddddddd2& %3+5373+53'!!^ddd dddddd2& 53%#553%#553%#5^,,ddddddddddddddd Yp %&'#"54323&'#"543247#"543267&542&5432#"'632#"'2632#"547"54&'&'&'26326326323#"'#"'#"'676767&547&547&5475&547&547&5472654&"7263263263&'67#"'#"'#"67&'&'&'676767&'`bF"!  A !! F !"GaBaG!"! F !! A !"!FbB-         + )/  0( $&{       9 /)  (0 @@  !"Ga!"ZN!"! @ !! @ !"!NZ"!aG"!  @ !!: )/ > /) +       {6 0(K )/ -         !*3$4&#"322#"&546&#"'>32'"&4622"&4632uzyvvĆÿ*:9,A('A""l''%--%" ""   )2#"&546324&#"32'#"&'726"&4632#"&462Ćÿ)uzyv E()E1zQ""J%++%%"" "  '2#"&546327'#"'264&":64&"jĆÿ#/SQ11675"""NBB$""  V"32654&'763232+"/"&=&'"&4?&'#"&46;67'&5462675462PloMNno9G7U T.x x.T U5I  H7U U/w w/U U8G  mONnoMNnw/U U7H  I5U T.x x.T U7G  G8U  U/w sI#%#"567>4&'&'432>54.'sԞ&GPPG&BUC/0EW?jCDk=*9 I#.464632#"&nBUC/0EW?jCDk=*9햹 44  )H32654&#".5467.54632326546232+"&=#"&46;I*5% HghGIf^fG68E  fIHg  E86GrQ    B*B$hGHgg J@li@ IffI @il?Uy    )032654&#".546232+"&=#"&46;I*5% HghGIf^frQ    B*B$hGHgg JY~XUy    4732654&#"#"&54675#"&46;546232+I*5% HghGIf%3@.WsQ    Kx*B$hGHggH3P- }ZUz     v n4732654.#"4>327#"&46;2"&=#"&I*5% Hg$A)If)%4@/N;ɒ   2XW*B$hG &3+gH3Q- 2   =MY~} u6>32356732+"=#"&54>54&#"#" W29= $ ( 33($ &(=FG:>I+R   e=*3-  ><"&5#"&5467356323+>32;2+"5454&=/B  I I H K!V#Un]Bj^U.B4   H F 4&Y1F  K%(Js @mAM##"547654'&5463235423>7632#"'&'##"&5467"32654&Zl gg :; Z(f 2C dd kf*>J0-M<(31 34|l^ eXX^  /Z>bb?L<  Taa] VtG+-MH2/A &1"!165 =ga%2+"=#"&46;5.="&54?632#"/5#"&54?632"'6=#"&54?62#"' }(w wXl 7 7   7 7   87 mV  ii  UP 88 y 88  u 88 PU(,%2#!"&546;2#4.#2> O 4@gAM,-LAdB29AbT<32#"5654&#"  `N8PgHEffEHgO8S[U ^M5-FdUDDUcF.5M '9%2>54&#"2#".5467.54322654&54$2O, }VW}~>VEAR+322654&"23267#"&5462#"'&546T;;T;C0;tE6 #;ST:;S[bPTTT;;T<0=vC6$;STtT[b <*+:;*+!(!^XTtST9VR*5:;*+;=)*!)!_WT9;ST:VR*o   V:B4632.54632265462#"&54>54&#"#"6264&" O8#R.ÂS_$33$8N7  O78O6A6tu6A6O78N77N7\pOm9t=zM0bSQ]+'77' 8NN8:}\w4`||`4w\}:8N(7N77N >NZ4>7&54&""&54&""&54&#"&4632>32>32>32#"'#"&7654&#"r)]+KjL  KjL  L5 0PP0/PO02S[:Jn  !% ҄U;?_ ,(35KK5 5KK5 5K  0((00((05,+9bIl   D f-7LN7$ X 17!2#!"&462!2#!&=654&#"!"&463!5464  l  }YZ{  (   љt  db  t K#"&54&""&54&""&54&#"&4632>32>32327#"&46;2"&5]ah>OKjL  KjL  L5 0PP0/PO0Fb<0OR: o  L?:5KK5 5KK5 5K  0((00((0bF%->  o  k*7#"&546;2"&=#"/#"&4?'&562y       y      )9"&463!2632#"&547"&4767>732654&#"4  "Z^z#',\ja v+o'7C2Lpt79   &N0pay}742i 2Od);\4" dM[v; [A%".#"#".#"#".5463232>232654&54632".#"#".#"#"&546322>3232654&54632(C-(.* #9$8*+9 3K  cC(B+(/) #:JD.F'2L  bC(D-).+!$7# 8*+8 3K cC(B+(04* #8$&D.F'3K  b#12# -. #12#I5  E`#12# -- 5?5I4 E`#21# -- #12#I5 E`#21# .- 5@5I4 E` C##"&547>7#"&46;.'&546323>763232+#"'.ya Wl lW axya Vl kW ayGj+  '^  ^&  +jj+  &^  ^'  +L.<H[hq2#"'.54>324675'53733>>54#"7"3>54&.'6326"25."3254. $-!#-% 11%)%  %)% 9)+1h*3!C  "P EegC$5g`+ 4"*"*O6CCFZ 2$#4 '/'$&&$+,  " ;;!QeQ4+(2&.22("&Qe   &.%232654&#"326&#"62&544  "32544&5462654&5463265'&54632#"&=4654&'&'&54632654.54626%"3254'"324!"324"3254&.'&'63267&547.z7_ {45z vOSWK == F;!. 6 !A!"."KIQA "."!@".!6D       63 RQ44 -  h@{":!!9#1`r:!!! *%:C*"!)( \ ::H*)!!$,A,($+ !!9s[S @222@ @7? (/b Fw//HW2 .?  +vK#';35'575'57335733573%!5%!'#'5#!75'##'5 fXZnZXf@BpBA8 D D 8A|EgM[[MgEO''c@@o87788'7Cc"'632&547"2654"3:3254&32>7.5#53533#23254&'.""326326732632.'.'632327&54654.5467&4632{F'OO/115$(u.I,oBI-:!q>""$""p>2)@,@;)-31AnG6*41!  _}YL=  !17)7Gs"'' u   j  h  G^.) .^,'++',"  ! <" ?$  0? "? 8"?i: !h?8POLt72#"547"54632'267&!654.+.'3263232767>3272!>7#"&'#"'>54'2636 ]&0 05J1C;< '9 i ,Q' 8H;)]!&#'7  0x>1 z $ ,[N.WT.@ )  #D#(B G =[a/%.H&9!1( <&%3"/ $QL+I!4.54>4.54654&#"&5467.547&5462V**e % @E D3F3E!EA (N6-G' ."!  #"" "We#2C"+,!D 1$dW! K 0?jy"#"54.#"32732>54&>32#"4#"32632324675'53733632#"'.'&546322#".546*-5&%6,)0D)'WY&9 0$ '6!>bBSpo&)% " $(#/24I''I341 %-="7''J/1L%,'DF)7/ ',$:"&-"  \+($%%$)-&D3)6!G1DD3O5)2E<!C,"/$ $,%"326323254"3247"324!"324"3254&#"&54654&54.'&54632654.54632654&5462654&54632654'4632"32544&#"3263232|?gsp8  k' ioQ\}K.!!@!!7!.6!!  @!!.K w=:{hy 2?22 2?2 A@W 2R+* !#-A)-%*  !&8s^2$; !8$2^r9" ! &,)A-!!(?k X uG#3'575'57335733573%35'35eNG&o&HNeGdMYYMdG""""7NZc%"254#'2654+"4.5467&4632372.'.'>3327&5467535#5##3"3254J331?%3n'(Lb3'(8]<G4-;#B^ : !8YE:E= # 0   *!#9j.&++&.DM1;L2654#">54'263632!>7#"5#'.7"26544.#322%}xO! 9H<)Z"'$&8  /#5>6cgd' $%&!/(=[a.%,G(:2) =  JZC 2uQL!&5467.547&5462E E@UAE E4F2B3#dW# #Vf"2 C!,,!k$%3!56767#"&54>7#"(,C$U,T 4R5K,FJHGKF-K5R4P* 8vPJ5-J=BkCBjB>J.5JI6.5463267632">54&#"#".'&OTP4U>U22F=W5QUL1=K]^DJF.84?/ 9Ekgh/?VK,6"8T;5qhkkF4+|m4/hX[c/398 /!*Jz &'67>7.8F!JE;;8-0>P<6jj1?0 8!5>7#"&54632&5462>32#" ".F--F/! O&@\S;""']]'  ;S\@n%%9%./$:#,"(_CA\ 82?ZZ?28 \AC_kC%3.'32654.'3263!56767#"&54>7#"!28"L2.@,740 ??;%@.K((,C$U,T 4R5K,FJHGKF-K5R?('t?.!7&//O09Z40='.?J4P* 8vPJ5-J=BkCBjB>J.5JI>32.54632Y6=W5QTMOTP4U>w0JFT;6phiBEkgh/?Vz &'68F!J0>P< /h%3.32654&#"654&#".#"32>!5>7#"&54632&5462>32#"!28"c`%G<$vLB44A2.+8!?D(.%  ".F--F/! O&@\S;""']]'  ;S\@n?('H538 l6&DF$e#A37G )(H%9%./$:#,"(_CA\ 82?ZZ?28 \AC_ _'<^'4654'&5474&5467'464654'&5467%#".5>732>54&'\'&2'(9N#'&2''%&'3Fd>_efofE2HH|L_sPK/=E00./ c,13-Pc*o C?.KK2 Yh`/21/'oI:1/0.K8:>.7iB7L 6**<>)(;&0&1&%#"&54632#"&54632}b;!2f9b;!2f9L\,8J'4Q\8J'4Q&74632!#"&54632!#"&!5!&f9b;!2f9b;!2g;4Q8J'4Q8J'@8I6 2764#">56;;+1T11 =#"#&'57654.'5673;54&'567332>7332673#.+#.#"#&''L*J   ! XI" & 'N U  0 Q$N#  %- T$   *Q&M/ ! WQ*   )%S   0  o $(48<'#&'675#&'6735'6737'5#5#'5#5##3355#5#o`l=3573"o` ""Xu?53<.=k] 7 &@@@&70:54/+'5327+'73'7&54?'3'3#"''&"737'H7#7''763: qa@)2u!9 @AR.Slk=AM )8l8-; D9 a@*-*8l9AM-e \ o H  # c[}oo(AApz,H !4' ebY o G'H! 4py' i)<E7+'732>54''7>327'7'."#"&54?'7'3#5>73#/v%ee/v01 n79g3$Bo79gO3 ,B!""@_ZBK"%*! 6$*" (! $U) i)<V7+'732>54''7>327'7'."#"&54?'7'36323#>?654&#"/v%ee/v01 n79g3$Bo79gr2@K2!*7.0(CB!""@_ZBK"%*! 6$*" (! $8{:.B)!,;@*&T i 6J]"#632#"'332654+52654&7+'732>54''7>327'7'."#"&54?'7'3B,l2:154''7>327'7'."#"&54?'7'3ؕ 55,nG/v%ee/v01 n79g3$Bo79g/(U}T!""@_ZBK"%*! 6$*" (! $ i4H[#632#".'332654&#"#77+'732>54''7>327'7'."#"&54?'7'3#3@D6,,9$)*#'(W/v%ee/v01 n79g3$Bo79g,bB48G$ ;,&(-!!""@_ZBK"%*! 6$*" (! $ i#9M`4>32#&#"632#"7"32654&?+'732>54''7>327'7'."#"&54?'7'3J*')5, 1&(5/>B2xz!))($/v%ee/v01 n79g3$Bo79g:Q'1+5FA(?14D*!"-,!$)!""@_ZBK"%*! 6$*" (! $ i 4G#>7#57+'732>54''7>327'7'."#"&54?'7'3-A= 04Fc/v%ee/v01 n79g3$Bo79g%WwQRae,c!""@_ZBK"%*! 6$*" (! $ i*A7#'73>7654''7>327'7'."#"&'&54?'7'3/v 5ee /v01 n79g3 6 o79g B!"@_ZB K"%*! 6 " (!  !Q&8AY2'7637327632#"4?'&#'77+#"/762324?3#"&/&54?'&5437#"/m- -wfa(72V tVwf@t!n i`%-3,| ;1[ {Lm2 _ m&0&9I6" ] ( *<Fat7'.#";7654#"'&+2654/7+54"32=327;5#'4?3254/"1%#".54>32adt' 2B#r U16%$=dtU@ ^g l!%,y  Y0: PejLjL kJ  ^2%j8% G31& [ PjLPeP ( (;E\o632'76?327632#"4?'&#'77+#"/763232&54?3#"/&54?'&5437#"/%#".54>324.#"32>h/ &p` j$30Q m Qp`7m g bZt# *"Fu 8.U t8PejLjLفzـz GgZ f!0$60DR XjLPePezفy  0Icp|2>32#"./#"&54>32>7.#"2654&#" 2#".5464&#"326  !"!'<R:+%!+(*9N;3-1    )11-1)    ΉgY۴ܴ   !0*5Y & Y5*0 = )%'#4546323#37#"&54673267>uK&'&# D;`;V|7. .T>;Rh+X&'6%i?/B-;xZ<]J+@:WM;# 6462"!!!&&< |&&Zz#$462"&462"!!!?&&&&]< |b&&&&Zz#6462"462"&462"!!!&&L&&&&]< |&&S&&&&Zz##'6"&4626"&462462"&462"!!!&&&&@&&&&]< |&&&&&&&&Zz#'+/6462""&4626"&462462"&462"!!!&&"&&&&@&&&&]< |&&5&&&&&&&&Zz#'/37$462"&462""&4626"&462462"&462"!!!@&&&&@&&&&@&&&&_< |&&&&0&&&&&&&&Zz - ##"&54>32%"32654."&54632-ҴW{zϏV&8&'IhnΐђWe6''& , !+#"&546324&#"326&"&54632#"&5462,塧䢧(ΐΐT&8&''&'6H䢧䢖ΐͬ6''&&8&'& , #"&546324&"326,塧䢧|'6''&H䢧&&8&' , #"&546324&"326%4&#"26,塧䢧|'6''&p'&&8&H䢧&&8&'&'6'' 7!5!T7] 7#53#53P7]]] &,_, &-_, &-,_ &--_*%#"$#"#3632327.#"632 :9h\..ba9:.5:5R<[i7'7'#5&''#53&5462654&"#A\7BA|r)uzAB8\<('&2&%A#$)/D&e7==7e&D)$'=&((& m<GP2#"/&547'654'#.54632767>364&#"32>%"27&_=RHL @82K@@K28    JKO@qQkXZIY:M+jR='LL}15+9W(}LH:*`9:2)235531)24`.=E[h^[BQ:%h[$,C>r*&+QC*t\:@OXaf"'#'#"54?'&'&54767'.5>74&<546324#"3 65.'654'";=N.TW0 =SoL;K4 8 g#  13 -8 &=   Y-!<b*+ fY [)-{1!,3(     | }&.BVfy}4&5432#6532'&#"'632'#'?3#"'7&543267&#"654'>32327".5432 '7&5432676"254%6T &* "C   B GG  "C    #  (%!)EF ΁J:Ԃ9Hl8*  != *SS'\ =   !  *H\   %,, $.2#"&54754&#">#'##5##?!%2#"&54afMNcB(* W05x.x50<Cl)&}^G_gS!N!F]!  7N26?>32'.'63263265.'.54623654&#"6326326:O-  '.' >E=9) ;*/ %*)"Il=+)7"   fA%; ""+3  %P=\0Md5I%(F6, +1"C$<%@]$:TL,4   7CN%#'#"'&'5&'#&'7&547'67367567632732654&#"6"&54632 h!% IJ $ g JJ g!$ JI!$"h JfdcF44#$4 %!h JJ h"$!IJ $!g JJ g $ JЗbdcd5#$33$# | AJPW2#"&46.547#"&'32632675327>32327#"'#"5"3254>4&'#*:$'g 7'% %'9!d(";* !##-#$*(RA1&QC1%09 OO9/%1BR$.D !!$+:--. Y; *29AKQagrz2#"'#"'#"547&543263264#"6'&#"6&'&'64'32&'64'&'6766"6767&&54&'6&'32'&'&'322#"&5464&'2#274>RYY)5:a_:3.YY.4>]`;6" <-F6PO6=GK] 2FJ(:$E)B $~>7 4 hAOYZNCf_1G/>JF/<"7%,/`1 3=GP77NR67D,,/-T# *13KedLd eIgeIf t\=L.-O "#:> % 394 i:S*3H@ !X*;'IDB F<$I&>= :./?P2*ED+,.#/$2/%R(  " BF&7S<\A**)((    o`2#"'654#"2#3254'632#"'.5#"&54632327".5463&#"#"&54632&54>762654&#"#4654.'#4&#"327&54632#";#"&532673654&533254'#"53254+4632t=aV6..$'  +-#, ==-!/* (%..7V`>H5 .66- 6Y+DO2LhB   AhM3MD+'7%'%2.5!!6.3%2'$8%!Z<6R24  , ."+ f f ,!0 ,42R6>X6,$"ONNN"$,6A*0HY#   ' WF2+@D*61 +0]; p44r :^0+g)E  l/=M'654&#"'632%.#"'>32#"'73254'%.547#"54732$79.-EDN @" Gd%8%J.>+K#}3 `6h;/!+W9yq!"#{ 9ṙ N̺XRKSP MU>#<"w(=VM?ehEI} %#'.546322#"&54!  )7 pN9  ,}  '8#QhzW'f)6<I23##5#535&'3##5#535.5463262654&#"&4'%327&47&#"Z~nR__0``@11@``0__Rn~ZN;=#467.#"327&'~Z.),VU+8-),VU+XYJp\|FbbFK:Wp(5(50K:V:H`bF]{L0K2K*BK1J1K@n]|TB~`IGa Ek2AP3P3Ej3AcFGa '8"0:H7.467>327'7'3##5#53>54&#"'4&'6%3267.547QouWqL-*+UV+XtXcC``0__?UbF8UNf0P=P=bF8UNf?Uy|DXK1J1JAnW|>UT0\\0]BGa=1 wQ@\ @] I`=1wQ ^'f(46327'7'3##5#535.264&#"'~Z.),VU+XoR``0__RnI``IH`b]{L0K2K@oTz S0\\0S zTbccFGa';%746327'77'7''#"&264&#"'~Z.)*SS$UV$SS)X|]\|I``IH`b\|I/*0?1J1?0)0HAnY~NbccFGa'M,8%.547''7'776327'7'3##5#5372654&#"KSnX)SS$VU$SS*)-.)fUVeXnS``/``Ha`IGab- zTn@H0*0?1J1?0*0H1J1AnUy T/]]/bGFbbFI`' $#"&54675#535#7#3#264&#"Sn|]\|mS__bzzb``I``IH`b zTY~ZTz S0II0.bccFGa'D?$2353355##5##"&546264&#"Tz T0HH0T zT\|~ZI``IH`bmS``bzzb__Sm~Z]{bccFGa6- %2654&#"%#"&54622X{SW}~Qpg؏{XM~VW|qkm6- #"&5462-pg؏qkm732654.#"4>32#"&`*5% Hg$A)If)%4@/XXW*B$hG &3+gH3Q- ~}7'8A4>32>32#"'#"&7327&547&#"%32654.#"654&7%4@/B6 DXXB77AW)*5% /(>>%2IfH>>.*Hg$A)0I6583Q- &~%%}Z*B$?X_:gO?XX>hG &3+04KP/5JK7#5C3#732654.#"4>32#"&%32654.#"4>32#"&((Y*5% Hg$A)If)%4@/XXWE*5% Hg$A)If)%4@/XXWP*B$hG &3+gH3Q- ~}Z*B$hG &3+gH3Q- ~}7>0B4>323>32#"&'##"&732654.#"32654.#"7%4@/R{ '4=+XXS}|SW)*5% Hg$A)IfX*5% Hg$A)If3Q- pR.H) ~qTSr}Z*B$hG &3+gH*B$hG &3+g3n.7'7%'%3F(*?D %EEmO:?G=K7#'.54>54&=>54.5465#+-.0 s .#+C!#++.-@(< (:;hAc'&e@h;/<(-kG%&99//Hh*'f2#5.546264&#"]|oR0Rn~ZI``IH`b~ZTz zT]{bccFGac8 4&#"'6323##5#53326uSFM%[]md=UsVr;0Hme ==uT8~3##5#535''~===i8f#'3##5#53'7#53'75373f+=++=+,==Z,=,ǀ,,Wn #3#'#5373#'#5373==[[wwN68==): %#"&546737'264&#"Ih{TQ~fJ=z**z4^a13_\RI:@MLA;Hcs,~-t,H,+%#-T8"'3##5#535.547632+|_:\.=Leec.:_|r==([_],e%! '!5!7!54A45A=,na )5373n99= $,na # '#5!n99B$$=bOa !5#!#3'!353aO=tvF 49?INSYiv~2#".=4>5656'2>54.#"5565#"'32'5''5''5&'2".4>2>4.#"7#"5432254&#"*HevPPue%$euPPv A (`lHHm`'&_mIHl` )(AGN:'8 * HPT65TPJOS66TMLbcdb%ScQPPQQ>))+ 6#&9 9i ~,i 5#!1 1!#5 z~~}~~ }~ ~  i" '6( (6' &8% ($&B''&9  V)/5;NTY_eotz2#".=4>2>5#".=%565656%2>54."56565656'5#"'3256%5&'5#"'32%5&''5&'5''5''5&'2".4>2>4.#"6#"432654&#"+FdwQOue&%euOQwaJeuPNue'&euNPu A L (`lHJn`H_nJHka $# 6 Z)(AGN:h# )(AGK=$ . '0 * HPT67UOFNU76TJRb`db%S`QPP .))V 6$&9 9&$6V 9%%9 9%%9h ,eh ~ 5#!1 1!#5 z~~~}~ ~~~~ ~~ h} ~~ ~~ h '6( (6' %8% ($%gLL9   F "(26<BR_gr%565567$2#".54>57567#"'5327'5&'5&=2>4."72".4>4#"32'2#"&546--THevPOue&%euOPvB3  6+&>JM;!0''E =11JPS66TPHOT66St%bdcbLac`azQPPQQ)>()'(  6#&9 9x   w)) (6' '6( %8& &8% L&&':   V $(-15KUZ_iouy5655675652#".54>5756757572>5#".=7#"'5327567%'5#"'5327%&'5&='5&'5&=%2>4."72".4>4#"352"&546--T T--FdwQNue'&euNQw@3# tA&euOOue&%euOOuev0!;MJ>&+6# ' +&>JJ>&+=11''E=11#OU76TPHOT68UN"%bd`bRa``azQPP). -)1('''C 6$%9 9%$6x  9% &9 9& %9  !  ;w)) v)) (6' '6) %8% %8% rLL9   #Gi3?K%632'#'"#"&546323267&'.54632'"32654&"32654& &?" $ _k^`\eb14(-D2#TE8091#.F_":"48%3!%0 ,!=7nr &2@*"2#_ ;&"0B*)!1 0!/$*#Qc3<H32%632 #"'%"&5463267&#"&4632&"3264"32654&&_&8<)&z'8-9dF '. %?.&")%'v(r'  #(65)/;%A9X76$:*&:-#'!$#Eg9EQ3727#"'%#"&54>3>7.#"#"&54632"32654&"32654&1ee\`m]" ='F."1 '$(YER#2D-(44":! 5> 2%#0%  ro6=+ )*B0"!  F##2"*@00!/!f/!*# #  *5Ax72"&546"32654&2"&46"3264&2#"&547"32654&'26327632 #"/#"&#"#"&547>4.'&546324&546327&#"+"3267327-4654&#";27&#"#"$44J55+&%#"$44J44*%%""&/  8!cJ*@%B5[CI03R?BQ@#{NS#9QB=W*F /3"& b9DKB63A8E",1D43AL?C:^  'G5$%44&%3&&&&5$%45J3%4%%4%   W _9 '=1~ ,+:LQCS) : *OBQN7%/, * >C>7CCh&&/1@E6:E 8 #@IR%"&#"32654& #"&54632#"&54?4&5467>32#"'67"'6ZE] "LՒכQm bD9>%- 3"7 )6ygOՕD3LM RyQ <1L D!# ".=%'>5%7&&#"76322"&5462#"&546"32654'.i!''C 1)("(;;T;<.ӕ֗eVËo,tV?&u>[nT'L ù<)*;<*);Փԗo^~Ċd(.#Q4&'"'7'7'7>37654654/3232+32+32+32++76x2sJ3!##!3J$=!%W% '=!1<J Fx]jJ<1!='  %W cv vc 8 7  F  cc  F  7 X#,!75'#"'!62v;9Fv,]) Ģ77g g773iw7463&54632.546327>32#"."'5332654."32654/&'32>3.'#.#"632>54&#"32654&'7&')0G% ++( g8W0 8, 3 !-h]e2R  >L ![%( 8  M</X K#-&&/ !&::TqAA#Yp,=z(8E2pT28:C|mS ' b % Loi ! 4 A| u* !;4x)_o~?67>776327#''#"'#"56?267327654/327#";2654.1432'7&"3677654&#"327326547326%#7654R# EL1=U J]&  \hc*O4Y8 C&B%K Bx;/:|   4X%>K ' w   <'O $xX iZ4KA8#`  T; Gg8 8!o& 8%(D FF5   $B Y :!  # V$^]>2UKO ;CN#3l  *17=2#"&5467#!"''??2654/654'%>7%>7 . 0_ $N)Q|E!yI#QBFn?q+Do ( *>>W  t|Y-%Rp/ ishGb$#&(-492"5'57!2"%5'%7654/'!!&!654'!!!6jNNee RRR(WaB|wD NOOvw   b__nmWP4()L#1l| ",39?2#"&546/763!27/4&+76%654''%.''%.'- /}Q)$U"Iy!E%FBQ p+ l ' b< =  v{r*/oQ";G ##&E7"&546;32>32#".#"7232675##"&5463235."#"'#";>8EJ:/',5hN5*$4G-&z'_0'(-_#w8(- =):8# 2U>CWK)0)xWH&-&Bb&-&:HI0"#2FK?)0)JE2-G##gL6E22#".5.#""#"'.5463232>76#&#"32?64a!8/4S3:W1,7$    1%.J?Rz1  !o *$$* HnL*?B:  ;#"&'."M T:Z-pQ%,)G4wf  7$+674&5<>76763232767632#"&'&'8 &  nm  B)4J7G k! %  ?'qW  R#J/;@/3 #  ' 7  ;; ;y;!; ; # ''7'77׮<I#"&'#"&54654&54>767.5&546323>367632>32<eBl [rT#    J H  p#[3 +  )  $S7#"&##".'#'74654"".54654.'67.'6732632>32Q Zy# .:O =   t2$M  4 D"  r  #;T hU, 2?,%O,K# #3##5#53573##5#535##33535#\ġp\\F## 3##5#535# !!'#3!5#!nnonno!nno!# 3#'53#5#5Wz# 33###53[[[][#33##'#'537#3335#5uLANkV8Z]GME|GLu|]c]# #33###53'33###537#3335#5[[2UbUʘbb#`S1;54&'5!#"732673#54.#!526=+"#;iV[HnF[ Oj,W<[HF] NkJZSnmS\G32SkiN ^Eo#  #3#'#7'337/373#/?#ZiffijffRRRRT?}A=<<==32#"&'#"&546=#"&54632.54625&'#"&546#/% 029P:2/ *&(1'99(1''3/  9P:2/3''2'990 )'(1'99(1''302:P92/$1!'99'0))2/2:(':#C%4>=#"&546323.54622>32#".##"& #*#!0,5OM5 0-!!MjM 6$3235#"&547&54632#"'3&4632632#"'#"&547#632"&547.546325##"&'#"&4632$($H&(%$%1!" 8%$$ (6' &$%% '&!%'&8 "' %&4$G $#D%$$ '& $$%% &2##"2#"'.'.'&54>7>76s x C.(& ;o12K ki 6v,(P833y* #(3#.'5>767>7.'.ǀz {-/agqT2*",)6Vf_6~ɀ|&VgX1JI0a# ''%7%77bF<gAdj # 2#"&546#7'7#ҕՒKOHՓӗ鑑#' %''7"264&R8qh'V.??X?> 俿 >,-??X?# $''%7632%'7./&547cE@f? !3hi"H$11 ,4B!&,+# 3'7'3!''!7#7'7#Ez7-tCkZMiXڨ=F'\cc\M܂܅# (23'7'372#"/#"'5'&543%7627'7'-x]"jn%Xt;=fH52uGMMGZ i qttq # !%'!5%#/%_f` aRSANY簰Scbc2b#x 3#'''!7#7'7#{R?ZVaQQKk#7'#5'7'75NNNNvmnuunmv# #553'77''7mm666V6Mz_zz_zz_zz_z#7%!'#'7!5'7 = 1%9 +;+ A"643274322#"/#"'#"54?%&543%'&5432f # #&),/7'#''7'57'777!'/'7?7'.|u 7 .xx:+15+jl/gֵ/4+ngk{6 1wv5 3yk5lܷ.6'flo16'#&#"/"/"54?'&5432762726666YPPPQ#;732#"#'#"/#"54?#"54?'&54;'&54327632+++,0',¿#7''77''٧٨⩩ک#7'''77'7''7G1}}12----2,26..62,#/3777!!'''#'7'7'7!5!'7'7'7l!`#j j#`!a$jj$ak#c!a$nn$a!c#k# ".8BK#"&54>7>32.54632#".2#"&547&54632"&54o<$*5L&1_#*5L&+H4($Z+H5'$^F22$#1U:  994 '&#iGW&#"&R"&W1F22$"DzLI|IJ#oy%4654.'&##"&54>54&54654.546323267>54&5463232>32#".#"#"&"2654&%$   *&9"BNBBNB"9()  #$#%   *(8#BNBBNB#8(* ! %#$=++<+*9w  )0'!$,   ,$!(1( +)>o   (1(!%+   +$!(1( k!)++>++ +#N%".'&5465#"'&54>7.5476324&5467>3282%@%CMMC$@$3#(>mmA8)z 6"%F6 (0&")%j$*"&0(% 22 %}3!( g  h &"|&#53"$|"& g  g (!3 $- DH5&+||+&5#Wa%4654"#"&467254#"#"&5463232654.546232>32#"/"3#"."3264& 8%:]T(  Y3 6%8II8A Y>9H C*7W$5,ICbEE`E# ?Rf{%#"&54>7#"&54632&5462>32#"'#"'&7632654&#"?3232654&#"32654.'#"/&#"327/&54323267'#"54?&>6L  )FUL5$A2%LlK%1B$5LUF)  L6q# !'6)*6^ V&8L7'KF1&6+",C>0-"+# =-&6HZ6&1!UEN6&-= #+~!3&6XJ E\ #4=Wk#"'#"'#"&547.4>7&4632632632%"264&#"&54?'32654/#"&54?'32?'#"&46327'&#"32?'&546327'&#"7'&546327654&#"76327654&#"7632#"/3264&#"#"/32654/*?+/SO/*@**>,.QP.*@)&66J55  )1"#1)f< _h02#5.>n "" nj "00" j _!; .5"2/hQ )1"#1)f< _h02"6.>n "" nj "00!j _ < . (#1/hx>-+JaaG +->-+:JaaH+5J55J5m "" mj "00" j_ < .3#1/gR, (1D1(f< _g02"5.>n "" nj "00" j_!< .4"20gR, (1D2(f< _g1#4. #  %*/4>2 &5466327#"'7.'%'%&47'>7'"264&ԓD!#$!EE%&<6 U6  >D 6JD 6QIdedeԓҔ C 6C 6RE J EE J 6 U6 `dHGeeg!:AGLSY^&547>32#"&'.547#"'&5467.547632%&#"654%>54&'3267%RRb0(IU[$5u 2&fPR/31'IT\$5s 2&ea* F\V * F!YW C9( KsW1%17/3#+[iD(& MsW1%17.3"+[d0#(ap'MG#(ap&KI$A7'/'#7'757'7'77''7'7'5'7'37?7'znadc!g Z&Z g!ceannaec!g Z&Z g!cdanXQ708 :k{QD;rr;DQ{k: 807QQ708 ;l{QD;rr;DQ{l; 807#LPTX\`d'4;73277632##"/'#'"57'#"/&54?'7'"4?6327577'5'75'7'Ä  }}  ~~rrrqssrrrqsscKKTDMLDTKKTDLMDTvCAABdBBACAABcAAB#A7'/'#7'7''7'7'77''7'7'77'7'37?7'ric\X42imM"Mmi24X\ciic\X42imM"Mmi24X\cU>"018f;yx+FhhF+xy;f810">="018f;yx+FhhF+xy;f810" " &2@N\k'>7#'&543'32.'7#"52#"&546#"'&54634>32#.2#".5476"&=>321    w  F####L & e ' tMx0N-IN-     j  ####Lx1N-|pLx1N-|% e% !   # %3@N7'7''762"&42#"&546"&54>32#".546324632#"&U8D00D0JF)' O4)F+()(4E1-!W7#D30.V;DT"By\1"!00DF1-W<!B10.#W5;T!BpF)(O3*D((*(4#P7&54632#"'62#"&547'#"&5475#"&54627'#"&546325&5462u5#%44$%H43%#4F4"#5G5#%45H #$43%#4F3F5GxM "22#$5 NN 5%#12"L=#54#>L "31#%5 NN!6%#13"M<$54#> # #-:GQ[g#'&546323#"&547'7632#"&547%57632#"'%#"&546327#"''&546322#"&546 1  X# X#l  ]  v # #&88'(88ޜ ] v # # 1  X#K X#8('88'(8$a'&546276327632#"/#"/#"&54?&'#"&54?&'#"&463267'&546326q "." m! * $$ * "m "# m  * $$* m $$* !m "." m"* $$* "m "." n  #F "&546324.#"326㱭j$hC3 k\z# 3!5#!!nil* haR!# )35!#!olHh!MfG # !'!!Vw3xs@!# )7!!Vw;@sW# ''7'7%7ŕęƕ#h#hEM##M#|!|M#e4>;#"32632#"&#'=fA W9( %4&#"#"&4632e|6R( %=T\DIZ u)# TzTc#y"#"632>;632#"'#"&546>K{&#T2eL)!>ZX@b.O1D[L8PeuN5Z~Xg.9eLp$z&'3267#"'+'267#"&54632>32_K|&$T2dJ )!>YX@c,O1D[ %:lL9OeuO6Z>?Xf-9eL8N>/#q%4<%".54676;573#"'#"&5463232>7#ERx=^K1E. ! %I Mxg:8.'&547>22#"&466L(%JJ%6G* 9SS;32.'&5462"&46( *6B, 0082:'B9SSvST"  L?%5%/()6*A?LNTtTTvR#(k2>2.'&'&546/K2bsM,9 ZM NZg#Ss96$ObuZ4K:(@>=A(-=mYt#y!.54632327&#"#"&5467NJiI5F(2#23 Z>[8IgJNdb:Hg-HMO!AH*J4?fI;b#9Df#"&54632563232654&54632#"'&54>7.#"654&#"632327632#"&54632Uq;5A""$1 52+" "?2 0 uh&8n$ 66N.B$5>5$#C `@{M;b3! 7.46;32&5463232654'632>54'j>Mm% 7!L> ( $/^=/.$& #' 58<)%G #  Q-2,H/VCM7%+S+ 1)3Z 6" $$.'%4&#!  '/ E*#d&'.54676\@)hh)@\(RccR0 ,nn, )dc*#c7'>54&#Z*QccQ,X_qp *cd) # 3#&54m"2Tm/\# 3#654&#mmT&^#3#ihhifY##hhgggYZ#!3ZY#3#3ZY#w3#dddZ#w#ddddZY#'7rrNN YY#7'7#r YY N#+/";"&'&'&=4'&'5676=47676+ . #f: ! B 0mF Fm,   ' *3  0<$#+/52#5327>=47>7&'&=4&'&#h7 # Bf" .   & )2 -<$  ,mF Fm2# 2 &546#32+!5#"&5$7vM "$( ԓӗ]H  ## (# 62#"&5464&54632!5#+>54&#"326ҕ[ &%C?su%IQN2eTDX Ւԗ 3)8Q.Vc /&&9$)D0@L>/!# L2#"&546#"'632#"&54654&#"32654.'&54>54&#"32654/>32ҕ>1&18>+  bK]y!1( ")"RMF] "*Ւӗ0:(8/5L !3C]G%8  1$7<4(  .# "#2 &546"&=35##3+!5rxxK4 Ւӗ17M"* ### :2#"&5464654&#"32654&#"732>7#"'632#"&ҕ*" _F_cMN1 1*.(5,!Ւӗ "-?bICX( ,#~6B27M# >2#"&5462#"&54632654&#"&5463232654&#"(15*+6;*ҕG-Z>VrVB[9@5 \F3Q0 oB84AC43ESՒӗ)RS4iOAURYx !+9'73326ҕե &yv! ~X%$Ւӗ4"AB&% qI )$# !9'&54632#"&542#"&546>54&#"32654&/6, !,AE;+,54&#"327#"&54654&#"+78V355ҕՇ?]/xbUpXFZ6@5![KC43DA74BwՒӗ7[[/sgNBRC\w%-;#.;2"2#"&546"&5#322+35265#"||Aӕh&D:9  ܓOXNR-7LLԔӔ"  &&.rNk:# %3##532672#"&5464.#"326%54&#"#54632'2#"&5464.#"326&<=: sG/3)(0=T@BWҕ5L]HdL-G.'.4 QK.=.-97- ?STՒӗJwF.bP#+7G"#>32#"&54?32654&+53232654&'2#"&5464.#"32616J<=PDQTCGJ8GW=MD4  d1'+.++-&-ՒӗJwF.bP# )##5#53'32#"&5464.#"326K888ҕ5L]HdL2vv24ՒӗJwF.bP#(8%254&#"#3#632#"&'72#"&5464.#"326`4*#/-@ASZE8F-0%ҕ5L]HdL.8+' 2,YGLdA8 %."ՒӗJwF.bP#$0<L4>324.#"632#".7"32654&2#"&5464.#"32664e3  19 L;LS>'+)67*&//ҕ5L]HdL\Jh1k  ^Q DSAE\ 2WZ=.3C<15?EՒӗJwF.bP# &!#>7#72#"&5464.#"3268SYDmMҕ5L]HdLH*yib\ՒӗJwF.bP#)5E"&547&54632'"32654&"2654&2#"&5464.#"326KUUSZHN<;I&..%&1.+)46P41&ҕ5L]HdLKX%".547632"3254%3##5>72#"&5464.#"326$(*'A..T.*R)54&#"&5462!5ӕQ 7@=)`IG]X(F++8L%<Ւӗ*)2H+DXVA  .55+(>"6/.A" ;2#"&5464.'654&#"4632#"'632#"547326ӕ6:WB-/R& #-'"' ),)"IRWDH[Ւӗ=!1 E;N ;* ,.)&#(=*&%.U :KT##2#"&546##3353{ҕ.KHRKՒԗk1Buu# &2 &5462#"&532654&#"535!36՚P+(#&GL?LcZJ(*Gԓӗm:>/+=FfPK\_AQ# 32#"&542#"&54627&#"32654&#">cD'& $/[ҕՑLr7;#55 D[R@4. 'x:1-5=.*ՒӗѠ q2kLJf1bIDY)XA# 2#"&546!3>75ҕJe_LOՓӗkA_eo2#  62#"&462"&5462#"&546>54&#"32654& $&#$&+,F-+*ҕ$R?@W@R\EF]!'("#+)F),N11'&-nՒӗ/$9KL7H !V@UXA'3# 02"&54672#"&546#"&'32>54.#"32$/.D'&0ҕ MLn79"55E[Q?;'=.*8:1-5Ւӗ"'w3lMJg1_IEY#(2#"&54'2#"&546#+33"32654GD"'ҕ5B.0SVQLNR%ƺi[Ւӗi(#6}y#:\z3 #7!5!Bz#^U7%7%{ENSUu3p#z'' 7#PwPCβB#^U7'%'%'{XpSzN^}q2t#t &'567#k>+ް+>pPXTDZQ#|!"'.546763!'&54632#"&47FY462/7%$%&70 +, 2.&%6 !7L0#{2!55!#}j#}1!55!#ן# !55!'3#'3#'3#6fLLS--Zgg#aFR 353#5#3#3#3#3#VQaGGZ22[!!^jN#!Kh#hL!55!#aa#Ryb'#V&b #Ryb7  %#&V$~[R #r #OV"S`37!5 5!"'&5<=K6R+#_:q`S=SS#T`%5!"#5467>3!5!H-*(4(%;_T Y HES# 5#35ZBY#FPm !53#5!# v]",]#+"3 #5!!7!! vvӜ##+"3 #5!!7!! tquԜ##e@M5!57!7!!%>D;;Mu\5HM#e@O%'!'5!57%!!C}]s:aeT\vL#, '5#'3-#3zTR?QUZO#,%5#7357%#3-RT&,iPQ?dP#KHe 5!'7'!7!!7; 2DD=7D e`A!92#KHe%5!7'7!57'!!;DDDD7KZA`ֽ3##".'! !67>32خ2_Y<b8)%H <)x=7&#"467'%67"%.}*3FM#1}0yS  i!6O`  7i dCw#>!&547#53&54!67!%!!&#)7a(PV6gS@< ' K"" "!"!1D+J1"$'7.5327.'%&%467%}1#(BH4*WPt i7  bM7!wI"U%&5467&#">7'&#"%632&54'&(7e*#DI^Ni5S3fM>MMTa,@=0F.U )d+ 72WBBK 67A#{8"!>7&'!;.'>7XfkO<{R .F=+ (x "ITgIl0>O" p?A2MY("U$%&547#"'%32?.'327.547)+*aTMM7#"&546325#:'') HD32&547&5467L?a<5@&26 2'(=1;nL?MJLL"S!0/!?4&.- //#'5R27 62O*#{9$4654+"+"&54?654/&54;2;254&54632#"w!Q(0 >;,6 $R$%yk",  ;  d [ B ' ne#Kg=7"&54?654/&546;23254&54632#"&54654#"#0/  ,1;1+' & #'%"! '/9K-Z8 $^!'#1N  G#'#'#U F0"ctP 3#>7.'3!5!.5!#>75>KW>=VZMl8k4#Hm{4f"8LPvlXYD8qO5t&-%`-%n9&eXd'>>"d'@@:27:.8:'77:'88-]' '#'#'#ސ "8h8@>8fxF x.Xz<32#"&'7326ٙNk! LvIw.D*^fJosKnEw_-0W!3267#"'6327'74.#"nٙ^*D.wIvL !kNّ_wEnKsoJf>. #(75!#>%#53>23'7'7#"&%5!3.' \[ jwwj  [  [[Z8ss!!s[[4%!'7!ww|!!4=!'7'7|ww8!!4 7'7!'7'7lwwww!!!! %!'7!!!LL'=<W]]8JI =!7'!5!'7'7W<='LL8IJ8]] 7'7!'7'7%!7'LLfLLk=<<=]]]]JIIJ4 %!'7!53#wwD88!!f4 7#3!'7'7888Dww!! %#5!'7!535!8LL88=<z]]|JI"4P<'7#"#".""."#".#"#52>3232>322>3232>;'7Pw\A?F:8D.D:6CG< 5H$A>F9 6BE66DI85Acw!54________cb..854`__``__`cc./!> 2#"&546$326&#"632#"!" !ɐӑ夥" "b N> 6632#"!!>7!!.夥򥤎@ H NC w> !6632#"'7'327'654'&#"夥fO}_}cPTܬc}{^ݸNa|QR߰a{}c PN<&yX=%#"&5332653533##5#5_Lv3[c3BBHNm-VQgBB>#!#!44x,( >* 7   'D0&'0'008&0'00'02 '77'7'j8888!pT0=,H2"'&#"#"&57>54/433264'&4?#"'763232?6`$_1 +`qyE?)j\( D $[` $_P!pa+ /<%D (]i&BE\0=/@0=/0=/ @80>[32+#"=4#!"#"'#&'./&4?>;23!2=4.'#!"=543!2>J+& K8'aa'8K!`?``(:G80$323!2#!"#"'#&'./&4?>   6]' ':c<*0  ]z  BC>&`4@`4(@0=,2"'&#"#"&57>54/43326`$_1 +`qy` $_P!pa+ /0=7@0=70=7 @80>32+#"=4#!"#"'#&'./&4?>;23!2=4J+& R;@9d!!!p0,9d=89d!!p0,.9d?8 |8|}8A9Ae@A@9d !%+159=AEIMQW#5#53#53#53'#53#53%#53#53#53#53##53#5353#53#53#53#53%#53#53%#53#53#5330JtJJt00JJ00JJ]00/KK001JFJ011JJ11vJJ11JJ11KKuJ1111JC1J1YJ,1JJp1J1,JY1J1CJ11JDm!!`_Dm!!!`1_ 7#53ۮ 7#535#0zܫzz0!0wG0 ! %!0w>zG9 %%%%WW1&VS9%%%WWV s!!tWW<#".54>32ԁ܃}܃}܃} @'7'ܗܘ @'7@@'7'iijj܋@@'7 u\'7\6u3'7'3~~BBAAWWVu '7 ~C&#".54>32CM{Dfz}cd|@h?"?{OP}=>}C&#".54>324."32>CM{Dfz}cd|1nnoUZi@h?"?{OP}=>}O@f33ff37e1D#".54>32D"?i@O|>9~R@i?`{M{e_M{1D#"'&547632'&#"327D>M~M>>M~M>19@`_@99@_`@yyxxlxxllxx2:= '7'37#'#7':AAAA=aaOMMv||||1[[9Z88Zj '7'372112a_^^_j '7'37#'#7'2112 . /&$%a_^^_1****9 %%GА9 %%GuА>zxz(]#3#4&+#5>=#"#5354&'5"d&&8!"7&&d!7J6876J8(936=4&'5336=4&'53!!#4&#!5>54&'5"!"!"!d&&"!7 6876 6878J678(+'3?326=4632#"'#".5#"&54632'"32654&!"32654&Q1+'.X?COY;:/IO+/$6_X?CO!'0$&!'0()D5AG;Na^IH]1"Sd &@(ZCNa^IcB(%88')?B(%89&'A( -9"32654&2#".5#7#"&54632676"32654&!'0$&>COY;10dr)D+ 6_X?COs[e5!'0$%RB(%88')?^IH]$C+JlH ZCNa^ITN)DB(%88')?(+bS:(X,753654'#"#5!.#"#6323##"&'33267߮LdF 3 ; aE{X_YeD}cB%5F +2\+HA%'hq*L6&8z`( H"32654&!"32654&%67&#"4632632&#"2#"&5467&'#"&546!'0$&p!'0()qtJ$-EZ'2dd2'ZE-$JqDNY;6_$ XV>Y;6_XB(%88')?B(%89&'ADS&!VhhV!&S#^IH]ZC0Mmk-`H]ZCMb(q(&2#"&5463232#"&547+32674&#""32654&N T2@URECOCOY;6_à *# *!'!'0()q»^IH]ZC>-MyzWaDB(%89&'A( *1="32654&'2#"&'#5>5'#"&5463#76%"32654&p!'0()COY;$I0!"A,D6_X?OXH!'0()RB($99&'AD^IH],&W87e8ZCNaD&36(B(%89&'A(%,8'!'#"&5463!2#"&'"32654&747#%"32654&*G-D6_X?COY;"D9!'0()F!'0()"7o9ZCNa^IH]'!` B(%89&'Ax>-%2WB(%89&'A(%"&5467!32>54&'#iyf؈jޛ,9,W<=Y-I9UjTBa+cFSiM9966!!65CN( 9C#5>546736732##5>54&'#5>54&3254&#"6!!FYQ) FQeP>(!!9!!!  T.) V:ZU43`zG=+;:9tRue34V]=HVR44L]X@!%(1!!#5>=4&'5!6=4'!5>=4&'5"^"!!"!W !77-8 6%87%8 6-5 3>?8(0 ,8A"32654&!##"&546;5463232#"&547"32654&'54&#"!'0()MY;6_X?,_KOI[COY;6_!'0().'+0B(%89&'A*9H]ZCNa;M]dS.^IH]ZC>-B(%89&'AD7;GA5C( _kw"32654&"32654&%2#"&=4&#"#"&54632546754.'##"&5463!2#"&547#6"32654&"32654&!'0*/;!'0$%COY;6_.'+0Y;6_X?D8KW=5`W@ZDNV>5`O`+(!'0$&!'0*/R9'!26$:qB(%88')?D^IH]ZC;GA5H]ZCNa@W) &D%4DWV=MXUHEVV=8)=, &1DB(%88')?9'!26$:( -3264&#"#"'!53;6=!53;54&'5!2#E.>L'#;)d%'W d%'c8gdOAz@i7!b#=%"32654&Ld!COY;6_x!"A!'0()_2\8^IH]ZC>- D87B(%89&'A(2#"'#4&'53632654&#"COY;2,f!))0$&!'K^IH]&%)8%%88')?B(k(J+ #/"32654&%2#"&547##"&5463"32654&!'0$&COY;6_Y;6_X?!'0()RB(%88')?D^IH]ZC>-*9H]ZCNaDB(%89&'A(W #/Qz"32654&"32654&"32654&"32654&"&546326545#"&54632!"&546326545#"&546323#4&#!'0*/!'0*/@!'0*/!'0*/5`W@5$(45`W@#6!  #515`W@3$'35`W@"2! d"" !1R9'!26$:9'!26$:^9'!26$:9'!26$:V=MX%" V=MX.5PF17OT8.V=MX$" V=MX$*D=.b!2CP45()07#"'#5>=#"&5463254&'53632%";2654&#a!" mj!"lVME^f[LTSKl 87 vojr 87 mNZ\gghdX`(V2#"&'4&'537632654&#"COY;2\!,0$%!'K^IH]P<5F%88')?B(D (4@#"&546322654'#"&47&546"32654&"32654&D~3:;,@.(H,*0>0A$ $ $#K@6 BQ 3A@\ "^w"5:B3+%(++%(+('3#5>54'##"&5463254&'5"32654&"!"!6_X?!!'0$&7D876 6D8ZCNa8rB(%88')?(>J36=4&'5336=4&'53!#"&5467!5>=4&'5"32654&"!"!"!!#Y;6_)""!N!'0$&7 6876 6878L0H]ZC3P78rB(%88')?(  /"32654&'3"#654&'53##"&546!'0$&~;Z ]*96_XRB(%88')?D^:$/u^*ZCNa( %+1"32654&'7#>733&53!2#"&5473&'#67#?!'0$&u4;ddXCOY;6_%Gk$>#B(%88')?6bQ=GE?^IH]ZCH,F4><6@2(6136=4&'5336=4&'53!5>=4&'5"!"!"!8"!7 6876 687878( 0<H"32654&%#"&54632#"&5463267!#"&5463!&"32654&"32654&$ $,=6_X?6_X??)A.(HA0!'0$&!'0$%+%(,p0ZCNaZCNa.!#-3AA-:BB(%88')?B(%88')?(*6"#5!&'#"&54632#"&5463267"32654&"32654&%'d,=6_X?6_X??)!'0$%!'0$&!\0ZCNaZCNa."#[B(%88')?B(%88')? ,/%!5>7.'53'654/#!36=4'#% %"")Ve.V?M 7+` 7'6 6'7 u 18##!2#"&547"32654&+J COY;6_!'0()asR^^IH]ZC>-B(%89&'A"((44632>32#.#"3#32673#"&'#"&7"32654&(@6 a|C` ;%8B,%Bc}DG} 9Ce$ $3:h'1RV1+QZ8&6LgXAp+%(,(B :"32654&'632>32#.#"3#32673#"&'#"&547"#56$ $6 a|C` ;%8B,%Bc}DG} 9CSdR+%(,# h'1RV1+QZ8&6LgXA0!2\(q !'-"32654&##"&54?#&'5':#>7'/!'0$&O 0Y;6_'R1%x2(EB(%88')?/RH]ZCH1Pl/=-D$^(KNZ753654'#"#5!.#"#632632>32#.#"3#32673#"&'#"'#"&'3326?"32654&߮LdF 3 ; aE{e1 a|C` ;%8B,%Bc}DG} D"MD}cB%5F $ $+2\+HA%'hh'1RV1+QZ8&6LgX-dxL6&8z`b+%(,( #Lj"32654&"32654&%"32654&4632>32#.#"3#32673#"&'#"&#"&546326545#"&54632!'0*/!'0*/$ $t@6 a|C` ;%8B,%Bc}DG} 9CT95`W@4$)35`W@=L\9'!26$:9'!26$:h+%(,@3:h'1RV1+QZ8&6LgXAc>KV=MX*'!V=MXE=Vrz( KWc>7'':632>32#.#"3#32673#"&'#"&547##"&54?#&'5"32654&%32654&#"2(ENR1%x D a|C` ;%8B,%Bc}DG} 9C0Y;6_'Y!'0$& $ $J-D$^l/=L,h'1RV1+QZ8&6LgXA0 /RH]ZCH1PrB(%88')?%(,+(")3#4&+#"&5#"#53>32.#"#326d&&*D%@U&&d%B+?Nc'&2*uJ6YX6JPPRX*Y(0#5>5473673#5>5'#5>577B!!y\4!9N4&'!!8B!!BzW43g>gpvv34"{Y1!3*`0H5a0!ab0cc0#ad0e0'f0g0h0VTi0Tj0 k03l0im0TLn0to0 p0vq0(r0Ds0 t0au0v0w0Jx0y0z05{0J|0}05~0v0v09000r00900000V0%2>53!5>=#535#5354&'5!3#3#3b-"   07 cccc 7;"7'  !5,?,g5!!5g,?,#5354&#"5673#3##5>=#535b c<````0/bb,r#,@,)(,@f7%2>53!5>5&#"#>32354&'5!32673#"#3r-"   07 # 4& 7;" 0)7'  !5.14a5!!591 /5354&'5!2#"'!5>533254&#"3d8-TS2 #:dB'#;9f"`e,96&J406'7!!?LyMI_,8,627.5462#".54&'5!2##>54&#"K ".!@\28+NS2%8GGyqY^, :D*)5#J5!44_?54#"#"&546327327>=.N 'V< 1. "3!*L*aGL"]6.$ !(  5!"'I#2=$ GS/A$5$2  !C #327#"'#7&5#&54>76727#! 0H'$1=5*KK /+# LS- 1# tȨV4!54&'5!#.+5>=!!5>54&'5!/::"9)h: 8:::g66W! '54"?5 "?66 -#5>54&#"5767>32#&+5>=4#",+ Q"#D,{)Qe+K3W45  -'4} 3j"V95!#.+563654&/!5>54&'5!7654&'"431D2'"9) *I9j :; :=N1I"'54`8i7#>5!7͡H 757677654&'53#"#&+53254./#5>54&#"W&%S>5!Qk 6o \z  9:&!}  '$ VE)5#"#7!!#.z3B! P"9a,$!'54%#&#!5#"#7!Q - [}!7vk#$'5#"&5463273327327654#"cgNZ:/V6C:_~dl5/:,]Y932- 4_+2325##5>54&'533#"&546- &$:>#!>8XQ+8R B&mL1/M7 5Zg( $y#".#"#"'.'53>32O&{ x# fcN9-;e-+2/N$ '0#'2".#"# #.'53'.'5!>32 3''& k!"+ M}  5"-;=ZYF+ "R<" FS0*#_8".#"#"/#"'.'537.'537>325$|[pc[!#TZ#4(-;e))1+',V&P) .$$$# '"654'2654'53#"/'7&546 ')f,xRc/eU`eU)L.&:8X22/ 3<.54&'5!32673 (= 8:::<) =#5 "?66#< ]+(Z)42#".54632.#"&54>4.#">(: &;^7'.'326%*(* ! 0Z?Xp69#.DP?  yCo!#'g!3r9FI1+;-i[U7 &>E+'n)432#"/#"&54>7'.'326B77+=B)QQR,Jm* -&s1f'1{N  )r/I %/4&54632632#"'#"54&+2632654.'S3*7 CkA;Q# ;SYR-3$HH0]cALB(X@."g>kTlT, 5'VF )RaF c$-4&54632632#".'"54&#262654.'8"!& HH1E>)2%P@9=!))$1%3#"&#"#52654.54632326H>A?&!@Z[@YQ;<@[Z@XR@A*3`O.!HCGY,ST?28@I^/ap>{#3#"&#"#52654.5463232[ 1*,`+*<=*>5#.BOB<8,X,!&T6)%*@':G 0.+S2BL* )$#".54>32;%#"&'&$#  9G(<!!/Ki";#!+L%#"54>32;722#"&'.#  & #}+ ( EW+/3 %4&54632!54&54632"5!"5S3*76K3*764*n4*n."R."R9."R."R(4&54632354&54632#"=##"58""'-#"'#$',$$'-f7R8–8$ ""&54632!32>%!.#"eGV-V:;X-X+AB#.I.K3^^89]_ZPu;$8NI "&546327!32>%!.#"\}ba}~)(9 N6 igjg$==CgP(4&54632"5[3*764*n."R8."R*4&5462#"&5L" V$#&g9 f 4&54632632#"&'#"'#S3*76$-IK$,Z!d."S,@B "-#4&546327632#"'#"/#8""'&  Tg"   w !7#"&54>7'.546323#"&' #!"j %> !#G 4b 4? B /@F8:'67#"&54>7'.546323"'o#g*$0%<#+ a&2Ed B4&5463232>76754&54632"5#".'"5S3*76 ?6-3*764*n)-#66&*$4*n."T]83) -HK&#."T9."R<B63!< ."R7A4&543232>754&54632#"=#".'&'#"&58"K+-,+-##&#$',  .'$#&f*9<$,@ @(#8   ,$!  %4&546324&54632"="5S3*76K3*764*n4*n."S%tp."S8."R."R'4&543254&5432#"&=#"&58"R$#R%#& $%!g)9)9 $5#".54>32;%632#"&'.#>54#"\<  9G)+l& !/:9Z4fSMW_$4>#!. $cT]3#"&54632;7632#"&'.#>54#"v(  & ߛJ|\  ! 0)hF #[E94``  #|c* C:? "Sr !2+"5!"5#"&5463b2 !4*n4*n! 2#!N."R&."R!##2##"&5##"&5"&5463!$%!$%"" oS )K%4&#26%4&54632632#"''>5kU^b3*7 3bT45FW1 bUc|m."1U6=].f :NQ$_#4#26'4&5432632#"''>5 y@9"R Lz),/ "01r=w) KG#8  sUu2 :NQ$c#%#"&54632#"&/.#"3267c*Jo{ =*7V2.W:JY.p='.54632%0D% b '9%d<:!# f ='.54632" r"0{ &/, Ut2 :NQ !$K 4;"34&546322632#"''>=#"&54>322654&#HYc3*76 3bT4"8HK% b q!8IO(d^bkU^X."R1U60Q5%+f 8OLHxl+J3#^m_Uc$6*1"3=4&546322#"''>=#"&5463254&#s3@##&bkvG !1Nri`Tv=9h{EGR?NRWv;B w/>323#"&'#"&54>?'.54632 #_,J&s%Ѓ#l 6#9!d( >H<6+' !0&>323"/#"54>?'.5432D $>@"|0[ #J_ %Pg  p]F #! K (4&54627632#"&''>='.54632<3*n/'( b 7"9%."R@"&f 8MN"0$6)4&54327632#"&''>='.54632#R&W"i"0{ & ](8,! Uu2 :NQ  r$A#".'#".546732>54&5463232>54.'57{RKW$ !:)R{7)?& "G1%5 3*7|1G"'D.MOrrO# 57I6!,]hA)C@"&/"$.@f^.-JQ:)#4%#"&'#".546732>=4&54323254.'5'U8LI0$8U'i\%0h$#M(Ti0%\i5jMMj5_(C3%,+ !)9*7>$ K4;%2632+'>5#"#"&546;4&54632632#"'4&#26.! 2_T&! 23*7 3bT45FW1 kU^bw3!#c 9a^3!#."1U6=].aIUc|m$[4:%2632+'>=#"#"&546;4&5432632#"'74#26V(!$0  G"T Lz),/ yy@92? Tv2 :NQ" ( KG#8  ?r=$#O"&54632;654&#"#".5463232#"&+3267#".5> 7|2 !&fL@2(F .0tg]t<=2 !.) ? 3Ae'SZ19_  ' *B#!3V;A=0<7&19[NO?#!3 03,A$ 50 6< ' ()+ ,qA7"&54632;>54#"#"&5463232#"&+3267#".5>7N 7 !H+ 7NG?P98!(1(_'8 .B'dA+'! "#6U "* '%!'>5>3 6)-3? #%(%M.$ $#"&54632'>54#"327$Rbu[a|3RdFXF0(3D8 ,YQdy|)\gS D^[3B*LaM$7#"&54632'>54&#"3279KX?C] %:kD.:,%+&% =6CTmS@VF9->e>WP!&6@,4&546327632#"'#"ȷ&/#9"$'+8P+ kHVg  J $LS54&54632#"='>=&'"54&546324&54632632#"'64&#26w#&%#&%.2().$L"&$+,"& Jl",7 0909>+N78<+ :NQG857@P KG*? <6:$BI2+#"5#'>5##"5#"546;54&54632632#"'74&#26!(#&%OBO$%&(""& Jl",7 i09>+ /8vyW 9QO8S/  KG*?#<6:$=u|%#"&54632#"/&#"3267#"&54632#"/&#"32672#"&#!'>5!"#"5463!54&54632632#"&#"'74&#26=kb}}hKT  ?GM<'2=%=kb}}hKT  ?GM<'2="((&("r"& (:>" 6-  BAE>LVbh?(.1yG!GG.)Vbh?(.1yG!GG.) /#7[v+ :NQ#/  0$(8 6%.$7>:#"&+'>5#"#"54>2;54&54632632#"'74&#26Q(/(4&(g"& Jl",7 i09>+/#y[v+ :NQ#/ KG*?#<6:$M4&#26'>=#"54>?5'.54324&54632632#"'7>323"/_,8>&d(? #F[ %P)"& Kp1G- I $>@"|0v<69[v+ :NQk { " ;I KG3G  p]F+7%#"&5467!"&467!2#"/&#"3267%32654&#"=kb}9638}v^KS  J0=<'13 N?8@P?5ALVbGlfBhʁ?'.,?M/!EF,*k`UgV ;#"'732654&54>$ Na*%,T 9  qE! x# '2#"&5467"&547#"&54632!" !d I  %$$" "  )    #"&54632#4&#"t/ 3&>]"CU=!".yM(^G!`#$G ?G7 8G4=GVGQGfG =Gp2G(G(*vG&"AG6p;G5"G G\GpG(6%+|Gp :1G&3AG6G?&GA!pG"GMGG\aG[oa+RU?57+@A@@A@ eA("/&#"#63232654&#!5#"#7!!2-D !1)!l20!-'.53B! P0p\ .e $a,$!B5Je'"/&#"#>3232654&#!5#"#5!32 #7& :*''# #& - [kJ .14 #!7vk:5J eA537#"#7!3#.#!2#"/&#"#63232654&#!5".(ݹ3B! ȉ :H0p\@+F !1)!l20!-'.5YFr,$!E$B5J .e $=  e637#"#5!3#.+32#"/&#"#>3232654&#!57+"& j- [vr!,#kJ3#7& :*''# #&,'!7v}8':5J .14 # .732673#.#"#"&5467>54&#"#7332632zD7Cb% g2VvXcOD:.g5,H()4TX""_L9V74I9.2632327653#&#"#"&546?654&#"#73P:!;M5@:4-&a  T:S'-l++"+2 E6*B$!-!' L4%7@+&8C *Zl^Al3%4&#"#5>=4>75#534&'5!3#!5>5Ka$:> %H4aa!@)?#bbtq;<dgK1,L2OI1 V)7 7)O}|E76 4%4.#"#5>=4675#534&'533##5>5h (,/9KII0/IIUE))#"/88$!91OeA))<ZaV! !P)F%#"&5467'.'53>32#"'&#"%32654&'&54?4&'kerNe  fc:!# oOq,E#>*BID0$ A3= ">jlY|L% (*$ws_31WM-sBMt].B ?(\"WH%##"&54>32#"&5474654&#"326732654&#"#"&54632#"&AyM3Uh7;K ChyW<54#"3254&#"*;-`bEBe9# $5JA"88 YU"D#~k8(93.G(6YJS  +%;2654#"'32+5>54#"#"&54632 ''1_"0c_'U<(8 ;-ؑ 9#fC7(,4Y#'',u J%3254&#"4&'5!3.'5!3#.+"32#!5>54&+!5>!YU#T!@)6'".4% L@* EBe9# $5JA"8 $>?"HJS7"!#?.q(93.G(6L7!  D%;2654#"%"#5>54&'5!54&#"5673#.+"32+5>54# ''1_(((4 ?Q  %,0c_'U<(ؑ9#f44)n# }9&C7(,4""".#5>=##"&54632354&'5332654&#"g((C {W^}{b`|A(( N?8@P?5A\))s\yegbr4}k`UgV 53#5>54/!3#5>?!!5>54&'5!!3tw().D%).? 8:::R+`u)5m5 "?66.8y O%5327>'>754#"#"&54632327#"&'#"&547##5>54&'53ZH(!( +ML*aGR> 'V<.;3t(((({!>,)(  =S/AOQ!"'I73%!2654/#FwM%). W\s5m8 .  73'!5>73%324/#]- ! ;q@n $JN~&  =!.#"?#!5>=4>7'!!5>=4'#!5>=#E@|<;2Tf99iW3;<%=>#5MQLM67E8\=%%=]9E76Mk6"!7k  ;7!.#"?##5>=467'!#5>=4'##5>=#mk31s^x))\i>u;gG+++(954/#!5>?!!5>54&'5!!33'W\1M%).? 8:::WfF.#5m5 "?66.8^ .1%324/#!5>?##5>54&'53373%3'o ;q@ *((((W!]-  $Je{44))l~&n)/#5>5#"5463232>73!567654'0/ 7%I !7  )( %@  1I   ? )7#5>5#"&54632132>7632#5>54/90/6:!#  x  ?)(Z(* A2M$   Vp 4#.+"#.+"#726764&'5!;2654&+"p @L :FMME//:: ;  9  G%HX6PZYQ!&~>6 *A l 14&'5;#.+"#&+"#7>76;2654+"&ꘑ!,W(TT%0x%e_/"}8':-}}KQ $0.3#.+"!5>54&+"#"&54632327>54&'5! @L 8: (G3&4 3:G%HE5 "?}v~>)P86l1#"#"&543232654&'5!#.+"#5>541_ 0#&" $& !,W((ILp]/# /"}8':))0 a(#.+"!5>5##5>54&'53!a @L 7; $:>#!>G%HE5!#>&mL1/M7,#5>5#"&'#5>54&'53!#.+"((( ((&6!,Wf))92p))/"P}8'"'y`2'yR" !42#"&54632#"&546".546 4.#"32>93Yi&f8tK=c99b<=c;z((xSeŘVK`=`i10g_=:]h !,2#"&546'2"&54632654&#"2#"&546U*c˜T66Q=9%QzN(7>N22j  @Z@-N3&@Z:2N4+AY@33+@Z@-=N:3=N3+@ZdG!546;2;26;2+"&=#+"&d   $  $ P  P  LL h'i'13'3''B'z'Bzk6n>@>@ h #/#53#53#53535353535353533##5#522c22229?>?222222222222^>?>> l 3#'#7'3#373'7#'NMMNPMMz?@{@>{?@|>iljjlikBjmM8B #"&'7327qItBs|n7=O QQ "#"54?654'&5476?32('  @ + 1 )3     " (   Vw,@726764ᓎ=46;23!"3#.+"#;2654&+"./: 82  g8 8 FMME9  &!&~>7#K J#7W8"PZYQۑR9 *A B(97267654Ȕ=4;23!3#&+"#;2654+"%/%% %'TTx%eI0$#K J*.}}h6$0-%4&'&546323273#.#"#"&#"#'3326dbLfF*b c<.:KH]^vV2g &bB7D9u-UM^""XT4)1(2CMh!\WAB 9273#.#"#"&#"#5332654/. 54632 2+"+>x S:T  9&-?y  M;!: C8&Fx*!4L F)'!F~  6E}l"&#"3#'&'&+3!526=##"&'7326544>54&#"#7332632354!"327>32$  ?8*X-/3*" !9: [](=HZgg#=;#R6' z)aI1!9;! j)N+%0P:^ BJ"B8"%@0XYrU42:Q@FP' ?,8@!RN:K7#"8JJ <b72654.#5254&#"#5;32632354&'533267>32#"'&#"3#'&##5>=##"&'71< 4$k2)h"  LFa%((4 3 $%7@  } 0((c5b^=^7:- %]%2y =;, l))m=&+< 5G7p ))"tP6 > ?32754!"3!526=#"'#"&=4!"3267&=4!"&hHL 88 !79HI5HIfk 88 h/V 88 =7##7D6$%@=S=gYj7##7k,#,j7##7L%#".=4&'53326?&=4&'53326?54&'53#5>=#"g *.(')$6(')$3'(()8ER  ,R))P!+ R))P!+}')46m# @T#726764!"3#"&'732654.#5254&#"#54&+";2654&+"#/0: 8 8 8V"LH/H +I%. -$R& O  ME9  !&~>7##7W8"B +:(.+!  D$Z% YR9 *A  ?P7267654!#"&'732654.#5254&#"#54&+"#;2654+"%0%%&/"LH/H +I%. -$R& O  fTx%eK0$*. ," +:(.+!  D$Z% }h6$0]1%#"&543232=4#"!5>5#"#7!#.+632tb/;+')_hRL">> 6T949U6HSfkNk'+,$ȑ=7 !@/RS.=eY B32=4#"#5>5##7!#.'#3632#"&54632eOO67((4,!!,69W}9B/)52nj?A))L&8}}8&RVs:<P7#"#7!#.+32>32#"&6T949U6( 8+QY.RS-B  (g #"#7!#.+32632#"&54,!!,625)SV'8}}8'M><pjZ#"&#"#"&5463232632#"&#"326323654&#!52654!";2654!"Qc'AhT==Z;m|3W+5 0*;1978 !79  !79 =0R)"0/=!$X'#76$%@-6$%@b A 0R"&#"#"&543232632#"&#"3263232>54#!5>54&'53;254&'53aHS?-wFJ"0P -*D$.@ c(((((p,'R#-'8)))0))' HNP4#"#7!#.+3##"/.#"3267#"&54632656T949U6$< /:C4!0 =Z@ReC l.RS-8$  D8=M%oYEOaF4765#"#7!#.+##"/.#"3267#"&546325,!!,5)]  /:C4!0 =Z@ReC ")>'8}}8'4   D8=M%oYEOa/#"#7!#.+326754!"3!526=#"&56T949U6M>/ 88 !791jl.RS->U$7##7D6$%@%kU1#"#7!#.+326?54&'53#5>=#".54,!!,6=&G'(()`E07$'8}}8'-}')46m# , -4632#"54#"6323!526=4#"3!5265gsc/;+')_HSfk 88 hRL#==!l'+,$c=gYj8""8k=8"$A/74>32#"&#"3632#5>=4#"#5>P;B/)42O9W|&(M67((X)Vr8=aR$!)j?)v4.#!52654!";2654!";2654!"#"&#"#"&5463232632#"&#"3263232>o #8 !7:  !7; !79  Qc'AhT==Z;m}3W+5 0*;12?-B  #76$%@-6$?%6$%@b  =0R)"0/=!$ .0`)5>54&'53;254&'53;254&'53#"&#"#"&543232632#"&#"3263232654P(((&(((pAHS?-wFJ"0P -+JJH4))0&)0))' HN,'R#-C)8$| ?$}_ '$ # $  '$ # $  $} >$}^ 2 '2 '.2 'd2 '2 &2&32 32 32 32 3          <(& O @ 'y)-A-AҾ-A6 OZBX3!5!BXB,O6!#7#ecOM,O6!bpVb!i)Vb!fVS fBX #'#5'`BBBE7^n' 753%5`B4pJE/732654#"#"54632#"'32654#"#"54632#"'0#78  D-LXW=4- /#78  D-LXW=4-( 3&A= UL=Z 2&B= VK=Z+/732654#"#"54632#"'32654#"#"54632#"'3"&'/4=<*%"&'/4=<*%#-*;4*> #-*;4*> s#"&54632#"&#"32bCJ\zo#5-!*,C^.F,(zad{' &N:>K7#"&54632#"&#"32 -4=WXL-D  87#/"Z=KV =B&2&1!!5>54&'5!!54&'5!#"&546323265 8:::/::^S*>2;5 "?6666iq <>M &/!#"&5463232654#"#5>54&#"5767>32*>2K3,+ D/#D,{ <>MYj"45 -'e'#"#7!#.+!32>7!5!!5>56T949U6'.  |">> l.RS-k "#7 !@ C(!32>7!5!327#"5#&54>7672'.  s 0HY5*k "#/+# L- 2# ,-3#"327#"&54>7.546323273#&#"]hcS =,gEJj"1EBnS1i@6MG!U;/2a hW'>"LBO^̥K'3"327#"&5467&546323273#&#"M*1>=.MO JiTjHF{[L'D ^+6>S2@%HR= V_YG\ IZF r#"&54632326=!53r*>2:" 2"A 54/!#5>54/!3#5>733%3tw(),"().D%).kt+`o7+`u)5m8% EQ[%5327>4>754#"#"&54632632327#"&'#"&'#"&%5327>'6754#"ZH("' $18 L*aGR!3SR> 'V<%6 X=.;ZH("' #L$. {!>,)(  =S/A*+OQ!"'I("K,)( 5=S-#P44.#"32>3>32#"&/!3#5>73+:71N- ,W<=Y-tqj).D%).HHpD,*?VO)3bb<754#"#"&54632632#"&'#"&%32654&#"5327>5%$18 L*aGb=_`|^;aa7.;TN?8@P?5AZZH(!( a =S/A>>bh9137,)( 225%267654&'53#"./!3#5>73%38Z$:> 5iM8Q0 ).D%). &t+$+]K1,L;XO*-&`u)5mJ +* %FS%'5#"&'#"&54>754#"#"&5463232>=4&'533%32>5N; "*; ^;.;$18 L*aGR>, '/"mZH(!2S  *%O,)(y #'!3#5>73654&'53y%`.D%). )s ;u)5mo0%: C%5327>4>754#"#"&54632654'53#".##"&ZH(!( $18 L*aGR>h/ V<.;{!>,)(  =S/AOQ2&'I<y%(33##'!3#5>733654&'5#Ks%tZ`.D%).Pm )G. ;)u)5m_0B7%:;GJ74>754#"#"&5463237654'533##".##"&75327>7#%$18 L*aGQ>N/U_a V<.;ZH(!( Da =S/AMND24&'I,)( &33654#53#"&546322>7'!3#5>73t0 -M2 *2   ].D%).d l\! u)5m%&, N%532>4>754#"#"&54632654#53#"&5463232654'#"&ZH(($18 L*aGR>a0 )N2 *2>6G!.;{!>,)( " =S/AOQ hl\!| +/%<" )2#"&546#"&'732>54&#"#7332632%!" !pU.iv.QL-m7  ! p@" "=B=eAW!! !-%#".'732654&#"#"&546322#"&546kS!>&' $>+DWK= "[?X!" !b} 4 4*mVMa.*=" ""?5354&'5!3#7654&'"'5!!52>54&/!5>5*R :=JJN 431D2'  I9j :;65!76H 1I"`8i7#>h95673#7654&'53"#5254./#5>5#5354&#"UFcc2C15!( 46KKo6z 6-&! $  '6$">5!73!52>54'#7/!5>54&'5!7654&'"431m,Y^UD2'  O YR j :; :=N1u%O[I"WE i7#>5!7͡H 95677654&'53"7#5254./'7'#5>54&#"UF2C1HOY-5!( Y54'#7/!5>5#5354&'5!3#7654&'"431m,Y^UD2'  O YR j :;RR :=JJN1u%O[I"WE i7#>h65!76H A5673#7654&'53"73#5254./#7'#5>5#5354&#"UFcc2C1HOY.5!( Y53!5>554&'5!#3f7C-"   07 f 7;"ffy  !5 5!!5T #5>5'54&#"#567 0/S c<y)("#V(%2>53!5>5#5354&'5!3#3b-"   07 cc 7;"7'  !5c,-5!!5-,5354&#"#5673##5>5b c<``0/,:#,)(w -!32>%!.#"#".'#53>323LV -L01M/ W+84-H.AtW4"# $F(MT>))?SNO?b;'"6KHO1VL((".#"!32654%>23##"&'#5 K55A J58@ xy ))}Z\{#N^VG-Vo`U5ZnpX-aa-".:4.#"32>"&54632>32#"'32654#">+:71N- ,W<=Y-ۇL,`=/<'M2 5KN3AHHpD,*?VO)3bb<32654#"wN?8@P?5A#-C1 {U^}{bn?H7'9;'1k`UgVq6*JGZtegQ$,$X4JM"+C4.#"32>%4.#"32>"&54632>32#"&'Z+:71N- ,W<=Y-+:71N- ,W<=Y-ۇW+,VQ+,HHpD,*?VO)3bb<=#534&'5!2"`eT #:dB'MM#;9OO8-TS2OMI06'k67!!? 6q6&J' 232654&#"'567632#"&'3##5>5#534&#"E#6CC8#C?Q@PI^yY +jj"5,DDN,gSWi,% MOx]md6- -6#"N84&#"32>773#"'#7.'.546 >s_2N. (BE&1M. r%306!ycLi~Y+cY dM)?TM(XB)@UP'7`A6  #Cd7#1 &"'> +73276=4#"?373#5>7#75#"&54632n>12$]@J6 2c)3%AcDYFZ^6+PC "dg_ S9  %$[Jx_l 13254&#"#"'!5>5#53.'5!3#32"`g T #:dB(#;9IG!./$PSPxMH06( 7!!?66,b' 432654&#"5673#632#"&'#5>5#5354&#"E#6CC8#C]4hhAOI^yY + 8,FF N,gSWi, 6bNx]m/'c6' 03254&#"#"'3#!5>7#534&'5!32"`g T #:dB(SQ&2/ GI8>PxMH06(36! 667b' 432654&#"567632#"&'3##5>=#534&#"E#6CC8#C]4AOI^yY +hh 8,FF N,gSWi, Nx]md6/' 6",3;2#"&5467#"#4.#"32>" (=]P(<) +:71N- ,W<=Y-=#i*#7>32A Ig6';L6M.&*4V#1*0( ! N<)%#8O"&#"3##4&#"567>32(,2TPD%4j#: !\5),(6"#7!"#"&546327.5474.#"32)< 'F) :'yp)%+$5:[5a}^Rs('1Z-M:T@#EC),K 6Q V/bO8"5>7>32".54#"#4&#"#8A KW3$6YRl$>5gI  tF16&7?3"156(8 567>32"&=4#"#4&#"J@3;#7?%Y8I*$TO0!OG%(;a"% 8"&#"#4&"5>7>32A Ig6';L6M.&*4V#i0( ! N<)%#8O"&#"#4&#"567>32(,2TPD%4j#:!\5)y"327#"&5467#5!~m-KR.vi.U[N]nT|Ae=Bh***!#"3267#"&5467#$ '&>!Tj=2o]LVh*4 4 yaIn BAQx F @Z 7#.54632  5 tz#*PxZw #.542 !bwmMP  "$753;54&+"#7!!5>=#"O )< U6 7 9:!=( <# &C!5O>#!6#='4>3!!5>=#".%4&#"3272ST-89;#'Bd:# Te`"4J&6O?!!7'60IM _$%4&'5!# #5>54&'533 ;7 8>!#>:$Y>#!5D5 7M/1Lm&; 74&'5!!5>s!@)?#$>?"mF7 77! #5>733654&'53# # % )% )  ;1  o0 ; /a!"&54632326232654&54632mtY 6.     .@Y 462#'&"#"0 !! &h#"&54632'654#.&='"?)& S '77'',,,,,,,B,,,,,,, #.+3#526=#"#7#%8c  c8%# =1**1=6"#"/.#"3267#"&546323!#.+#5>5$&" =KWD+>$ '&>!SkX_!,5((!'!.aMVm*4 4 }bo }8'44>#<" <#A<#r<#2b!#b0!!Q~:7473327#"&Q7!9z&* %#TCF°˕Vf-#"&5463232=332>54'&=3*3*RDd$'7 5)=8DMS7gC`2NR95((   6*IXblI6@"&547.5463232=332>54'&=3264&#"*3*C%E_EB`$'7 5)=8DMS 5"""7gC`2K- 8"3AB2#84((   6*IXbl#1$#5FX"&47.463232=332>54'&=3264&+2654'#"&'0SR~Q)"2$'7 5)=8DMS*3*  $*82(!/9!\?[X~& +<((   6*IXbl7gC`2T* X8)#&5' '6!533R<$Hb|Z&2#"54654#"#"5463232>7>76N$.&;*  9 Z&F~0XC\-gJ9?GP%#"/32654&+532654&+#"'#"&5476;463232%4&"2>5#'32=#"C& C @+R'!A=GDE$MA3Il 37Z2]* å(>!c +% !  #HK/PPU;S PqCT*#,m7SP: 8;"e$A`UF_CJPY%#!"3!!"&5463!2654&+532654&+#"'#"&546;463232'4&#"25#'32=#" +1T5.5.(&$#/ @+Q("@8LSQ(JDGS[308,3,]f/(>!c(4G;"(>"$9;%DDD68,E]_E)}1CH,CPT!3QBJ=CLW2#".54>32&#"32>54&+#"&'#"&54>;4632#4&"26=#26=#"mDW0IwKE] &eJ_K+5G4L/$@f=';2^?(=(B0L=0JZ6>[H>H:\%?9%(4(.{S$GL9% #%  %7F>=Wks.$RU?1)d]gZGDBIHL#G@(/U-02J=_ioz2#".54>32.#"32654&+#"&'#"&54;4>322'654&#"#54#"&5463264.#"265#26=#"m7O",_N1JD{B'_).3"XE|<0WF)>'C7E.4!3IT%  $ /$(\,8^ (&6$Jg99'#5 B  #$.{Qma}/#R\8u06)@T-u%  *: & :6 1)PZ6!U"(#?DF;BZakt~232#'#"&547&#"#54&#"#"&5467#"&54>3464&#"2654+#"'632632'265#2654'32=#"2654'*= *?/1=C51?N3H!M@/5CF$ 0G:?/I4+)13$Q%OFN$ G/5R01#'Q@/'BQ)>:-#!CMc< ,,& K=>J."B/4A!+b.H@b.B3.C#-J(>JQ\f>32'>54&#"32#"&547##"'#"&54>;4>322654&+'4&#"3265#26=#"xdS`|1)2^J8Q 5"/+6>:C/TER'.:J!5& ;(+? *)$?%402- (7/$D!(;Ro`h$f8LuU5 9+2Ot<$gP$T54&#"32#"&547##"'#"&54>;4>323632264&+'4.#"3265#32=#" -T4#+)'L-]fQ8;F*0R0@,S& B:J82& ;(+? ;.T$:&*"?0$#.-#7/$">!c,;A3(&)45.2EQL4ECVZ$"HL0PPS=(4<@(,E6SB%(/L3"A:42:H<6lI D%@`UH_DWcjr{2#!"3!!"&5463!2654&+532654&#"32#"&547##"'#"&546;46323>2654&+'4&#"325#32=#"vS{OLRGq7043J>$$ %E4B{CC9F/-I& @+S&"@9KTT$N@+? 1 >OJ&)%4(40.13+f(>!cH@:L=>G="&:7#/30 )+B;A'9=EM=?'DDD6:,F\$;-/E#' ,;-,FD.=1H :!3QGJ.Xdmt}>32#".54632&#"32654.#"2#"&547##"'#"&54>;4>322654&+'4.#"265#'32=#"x +,6!(RH-+SX>N8VTJ?(4(V[#}$:>1SCJ# 6>:C/ @+R'!A;I 2- ;(8Z*)$?%0$#.]7/.$">!c3M&%G{LElB#' Gn<ED'2Ot<$$IK.PPR>.=?([f/!(6")S:41:lIQde%@`UJDNZbhq2# 46732>54&#"32#".5465##"'#"&54>;46323>2654&+'4.#"265#'32=#"oy;ڗ(>5#6]ZO\9`L'<.!@,Q'B#0$*4\7/¥#"?!cŠd]m8lIe$A`UJ\ht|2#"&547# 46732>54&#"32#".5465##"'#"&54>;46323>2654&+2654&#"4.#"265#'32=#"oyp)7A.1@(>5#6]ZO\9`L'<.!@,Q'B#'&(&v0$*4\7/ $#"?!cŠdc@*0@A/0lI#9$e$A`UJXdnv2"&547# 46732>54&#"32#".5465##"'#"&54;46323>2654&+2654&#"4.#"2654'#"&'265#'32=#"oy{4EU{Tm(>5#6]ZO\9`L'<.!@,Q'B#* 50$*4&R:2#!1p7/¥#"?!cŠdc P7=US?%"9(# %1+!*-lIe$A`UJ-S[dm2#"/3264.+#"'#"&54>;4>324632&#";2#"'732654&+"&4.#"265#'32=#"?H?5&"& /I6S& B:J63#$ ;(+? KN0V.!E%4>62,5V,B#0 @'00$2-]7/)$">!cK>2N/5J, 6bNPPT<'3=?(,E64-0$1$//.:4Z0lI.E+e%@`UJ0^fmv2#"/32654.+#"'#"&54>;4>32#"&547&'732654&+"&54632&#";24.#"265#'32=#"2654&"?H?5&"& 8I6S& B:J2'$ ;(+? 620$2-]7/,$">!c&%7$$K>2N/5%(6bNPPT;4>32#"&547&'732654&+"&54632&#";24.#"265#'32=#"2654'#"'2654'#"&547?H?5&"&-9I6S& B:J/+$ ;(+?  I23I6/B#0 @'0L2T0#C%4>800$2-]7/)$">!c $6+*2K>2N/5%)16bNPPT<-=?(,E624GG4@% .#4-0%0::4Z0lI.E+e%@`U  P-# *+ (#-J*RZcl2#"/32654&+#"'#"&54;4>322#"&54732654&+"54632&#"34.#"265#'32=#"?H?5&"&(8I6S& B:J$ ;(+? N1;P9_8,kM)6 yV1R/#C#!cK>2N/5%/+6bNPPT&e%@`UJ*2;Ds}2#"/32654&+#"'#"&54;4>32#4.#"265#'32=#"2"&47.54732654&+"54632&#"3264&#"?H?5&"&(8I6S& B:J$ ;(+? D0$2-]7/($">!c1;34B]A#Hf8,kM)6 yV1R/#C#2N/5%/+6bNPPT&e%@`U4"- =0A@b! aCB8,7=[ N710$#!#8%&J*2;Du2#"/32654&+#"'#"&54;4>32#4.#"265#'32=#"2#"&547.54732654&+"54632&#"32654'#"'2654'#"&547?H?5&"&(8I6S& B:J$ ;(+? D0$2-]7/($">!c1;:9I23I0D^8,kM)6 yV1R/#C#2N/5%/+6bNPPT&e%@`U4"3%B5FH3<%]AB8,7=[ N710$#! P-# )* (#-J*2;Dz2#"/32654&+#"'#"&54;4>32#4.#"265#'32=#"2'654&#"#54&#"#54&#"632#"&5463263262654&#"?H?5&"&(8I6S& B:J$ ;(+? D0$2-]7/($">!c3Sa$H4 =(%>047%".0",2_LC!9C jK>2N/5%/+6bNPPT&e%@`USFm*-W<6ж(!9;&6)(0G5W^0.,.F*2;D~2#"/32654&+#"'#"&54;4>32#4.#"265#'32=#"2#"&547&#"#54&#"#54&#"632#"&5463263262654&'2654&#"?H?5&"&(8I6S& B:J$ ;(+? D0$2-]7/($">!cKT=%'. ')#.%*4.aA=/$>;#,m!@%K>2N/5%/+6bNPPT&e%@`UkE@<@:P5 Ҵ'!1$&;( 4N-Nf00-+"'F3F&$ J\i*2;D2#"/32654&+#"'#"&54;4>32#4.#"265#'32=#"4632632632#"'732654'#"&5467&#"#54&#"#54&#"632#"&2654'264&#"?H?5&"&(8I6S& B:J$ ;(+? D0$2-]7/($">!cCa@>/"=9$'>R%9;dD+&9T8 =$!99,2*@, =/ (1&$-%+4,V $,%K>2N/5%/+6bNPPT&e%@`U]Qd00--L V6Ob# X=ED?132E&Ҷ&" 80&;'5K&+'-#%,F@JRXa2'654&#"#".547&#"#5&##"'#"&5463>322>3262654'%4&#"25#'32=#"Hf-k0MWR^J=(;Y%R){Q oD ^LLW:K/Qn,F5TtwQ-lGKo*M6O28װHhc&=^RJ]Xbhpy"3!!"&5463!2654&#"#"&5467&#"#5'&##"'#"&546;4>322>32632#'2654'%."327#32=#"+#+26'IWXI!^J=:C3&8N* M;G#74@KO 4$&9  bD2,/=0L- #T;+%JV+*V&&*V 5T  M6,*9kOPlMeD\a;4\ Y?[e??E5;,24!%;+Ka/>:5bIxE&\;CZ'>%HD)?)M 8 2NEJ]`jqz2#!"3!!"&5463!2654&+532654&#"#"&547&#"#5&'#"'#"&546;4>322>3262654'%.#"327#32=#"ZuDEVW0%-46+SF"&& ES+^J=:CY8N*"!DH"74ALQ 4#'8  `C2/.C+%JV*),+& &W5TJ25%&C0S M6,*9<&)4%$8MeD\a;l? Y?K;:??C7;,24!$;+M]E&[54&#"#".5467&#"#5&##"'"&54;4>322>3262>54'%4.#"25#'32=#"it&MU>A)]E50:mO%Uw2`N^EB*<-,#;Z* 9&H"p=1 4$&9   eO6/2G' JW'$0PW'5T§zJrC#G# eSt [zGyDQ&9m& pD #HL/LLY9z32632#".54632.#"32>54.#"#".5467&#"#5&##"'#"&5434>3222'654&#"#54#"&546326'2>54'%4.#"265#'32=#"8 eO7.1;6S2! ,TVGE.]yC' `(?=9A"Lo8%N7^EB*;-,$;Z* 9&G#88= 4$'8 W$  #%' JW'#1P/(5TOz*D_`7QrB07FB  )<( Dnn85glB [zGyDQ&8n& oE #IK/LLY9z<@(,F5r& : & 15lGLn3-*-=IfJc C^RHD*Ycju~%>32632#".54673 7>5.#"#"&5467&#"#5'&+#"'#"&5463463222654'%4&#"32>5#32=#" eP6.1<[ "7^|nT/5 \ZɄk}oCZH>7F1,$DR* FAI! 64BRbB;s!%,F[,-)')+&!* "6TOzj 32632%2654'2654&#"4&#"32>5#32=#"*8<42?S/5 \%Vʄq1pDZH>7F1,$DR*FAI! 64BRbB;s! eP6.1<[-%,F[,&'%'-)'))'!* "6T>?+(HB.:&@gqLHo=ix>cT8D`W VNrrI4q' nF `LLU=L.Pp OzjVsIL3mFQi/I'&''/WN8J9T>I)M'<^RH*Zdo"&547#".54673 7654&#"#"&5467&#"#5&'#"'#"&546346322>32632%2654'2654&#"2654'#"&'4&#"#326%32=#"0?UxWĝT/5 \ZɄ0hpDZH>7F1,$DR*FAI! 64BRbB;s! eP6.1<[%,F[,, 2*92$!09-)')&(0"6TH O4?ST>"&&@gqLHo=ix`HaPY VNrrI4q' nF `LLU=L.Pp Ozj)L3mFQi/I:)$ %1,!*:8/WN8']5`'<^RJ*2;Dh2#"/32654&+#"'#"&54;4>32#4.#"265#'32=#"2'654&#"#54&#"&546326?H?5&"&(8I6S& B:J$ ;(+? D0$2-]7/($">!c7G4*?-)!8$(0KUF?9$%K>2N/5%/+6bNPPT&e%@`UZ@2P*Z.Bѵ 'B/[%/g=^10J*2;Dkv2#"/32654&+#"'#"&54;4>32#4.#"265#'32=#"2#"&547&#"#54&#".5463262654&'?H?5&"&(8I6S& B:J$ ;(+? D0$2-]7/($">!cMQ9($=D-8")2!+4%E=4'.l# B(K>2N/5%/+6bNPPT&e%@`UnE;A<>P8 Ѵ'"F1GT'>]0/$'$F6C('JX*2;D2#"/32654&+#"'#"&54;4>32#4.#"265#'32=#"4632632#"'732654'#"&5467&#"#54&#".264'?H?5&"&(8I6S& B:J$ ;(+? D0$2-]7/($">!c6P35&(>)E=9\N'% ?J; =$%3=,2N/5%/+6bNPPT&e%@`UtFU0.+ S2Dme=R$FA8/2D, ˵'"@7 G)-"Z)Z1$%#J*2;DLV^2#"/32654&+#"'#"&54;4>32#4.#"265#'32=#"4632!7354&'4&#"6?H?5&"&(8I6S& B:J$ ;(+? D0$2-]7/($">!cN:T96..*2AmK>2N/5%/+6bNPPT&e%@`URfZx*N-gK>!"TNJ .DLVdlu2#"/32654'&+#"'#"&54>;4>324>32##"&547#4.#"3265#54&'&'74&#"632=#"2654&'#?H?5&"&>I6S& B:J63!$ ;(+? k6&&B.1?&o'0$2--#7/ &*= =Am4$">!c4&K>2N/5%;6bNPPT<'3=?(,E6/$07 x0.BA/09:4Z0I;7lI g,4 -:= TN]%@`Ul$## J.DLVdlu2#"/32654'&+#"'#"&54>;4>324>32##"&547#4.#"3265#54&'&'74&#"632=#"2654&+"2654'"&547?H?5&"&>I6S& B:J44$$ ;(+? i6&*3I25G3c%0$2--#7/ &*= =Am2$">!c $6*<+2K>2N/5%;6bNPPT<&3 =?(,E6/$07 x#=4GH3=#9:4Z0I;7lI g,4 -:= TN]%@`U#P-# +*  (#-JD*1;D2!"&547327654&+#"'#"&54;462#4&#"3265#32=#";KzVFݯUT0&(XCO)!@1REHM F40-14*42% ?!cQB¸j!k|99*:lzPPHHyNslU4VNQfO0#B`UJ7>HT]#"&547#"&54732654&+#"'#"&54;4632324&#"3265#2654&#"32=#";,6@10@GpVFݯ0&(XCO)!@1REIDEM B:L40-14*42['&%%% ?!coA).CA.¸j!k|z+9lzPPHHyLulUOD%4VNQfO1%%''#B`UJp7>HUfo#"&547#"&547327654&+#"'#"&54;462324&#"3265#2654&+2654'#"&'32=#"6+:V=;V0FVFݯUT0&(XCO)!@1REHM B;K40-14*426  R92#3% ?!cs L2>TT>'#¸j!k|99*:lzPPHHyNslUQB)4VNQfOG c8+% %1)$,#B`UJ/Zblu2#"/32654'&+#"'#"&54>;4>32#"&=4&#"#"&5463232654.'4.#"3265#32=#"2654'?H?5&"&>I6S& B:J0*$ ;(+? `)K-*B-"N9"-4e@3K%6 & 0$2--#7/$">!c"EK>2N/5%;6bNPPT;4>32#"&547&=4&#"#"&5463232654.'74.#"3265#32=#"2654&#"'2654'?H?5&"&8< I6S& B:J2'$ ;(+? !B/.A-6-"N9"-4e@3K%6 & )0$2--#7/$">!c&%)$"EK>2N/5%: 6bNPPT;4>32"&547&=4&#"#"&5463232654.'74.#"3265#32=#"2654'#"'2654'#"&547'2654'?H?5&"&8< I6S& B:J63#$ ;(+? %GfI93-"N9"-4e@3K%6 & )0$2--#7/$">!c$  0%5,*2"EK>2N/5%: 6bNPPT<'3=?(,E6:$3HF5D"#E0+A?V36K6TZ@A+1)=2+5  +/%Q:4Z0I;7lI C%@`U  i-# ++ )#-+A8EOM9>JQ\g%>73!5>54&+#"'#"&546;4>323235"&5463273"54&4&#"3265#26=#"A-%* TER'"F5F?Q9 ;(+? *BG$LPB=,EMW . !402- (7/]&6.&AH@%5gPP[;-F=?(,E6R54"Y92HO_ %E\b(#r 2XZ0I-0lI ,4U4!%;MDDIU`gr}%>73##"&547!5>54&+#"'#"&546;4>323235"&5463273"54&2654&#"4&#"3265#26=#"AB20CP-%* TER'"F5F?Q9 ;(+? *BG$LPB=,EMW . !3###402- (7/]&6.&AH-0EB3,@%5gPP[;-F=?(,E6R54"Y92HO_ %E\b(#r #"#U2XZ0I-0lI ,4U4!%;MDIUbt{%>73##"&547!5>54&+#"'#"&546;4>323235"&5463273"54&2654&'#2654'#"&'4&#"3265#26=#"A(*R>?Q.t-%* TER'"F5F?Q9 ;(+? *BG$LPB=,EMW . !! $)94%2:402- (7/]&6.&AH">@ZX>A#@%5gPP[;-F=?(,E6R54"Y92HO_ %E\b(#r X8*" '3!" '52XZ0I-0lI ,4U4!%;JX^gmv%>73#".54632&#"3276=&=!5>54&##"'#"&54>346323235"&5463273"544&"3265#32=#"B 8c;o;fLZRNH.:uL:$#/8F @+R'!A:J95+IEDOC&8 $A^K3C2!x-B+U7Z24*42'>!cC7SP:H?QfO=%@`UM9pu%>73!5>54&+#"'#"&546;4>323235"&546324632632632'>54&#"#54&#"#54&#"632#"&3"54&4&#"3265#2654&#"26=#"A-%* TER'"F5F?Q9 ;(+? *BG$LPB=,EV^LD :G83()_!%6!!:)!":1 l -03+1NMW . !402- (7/Jj&6.&AH@%5gPP[;-F=?(,E6R54"Y92HO_ %XX]20-/+*Dm*H)>9ѵ ,#.1-.(H \b(#r 2XZ0I-0lI B,4U4!%; M9sx%>73!5>54&+#"'#"&546;4>323235"&546322"&5467&#"#54&#"#54&#"632#".546263263"54&2654&'4&#"3265#264&#"26=#"A-%* TER'"F5F?Q9 ;(+? *BG$LPB=,E[6K) 2:/"9/#,1)$+$)$-a.#?:%.MW . !#C(402- (7/&6.&AH@%5gPP[;-F=?(,E6R54"Y92HO_ %>M'?<<>'J Ӷ("!>3.;'4+3Lh22/.;\b(#r b"*!H6H&'2XZ0I-0lI -+"D,4U4!%; MY9%>73!5>54&+#"'#"&546;4>323235"&546324632632632#"'732654'#"&5467&#"#54&#"#54&#"632#"&3"54&2654'4&#"3265#26=#"2654&"A-%* TER'"F5F?Q9 ;(+? *BG$LPB=,E`@?/$<:$)<(>:9bD+#  ;#&2:.5-:.::0"'I)&)$)3-MW . !%0402- (7/]&6.&V)AH@%5gPP[;-F=?(,E6R54"Y92HO_ %UQe3300+! V7Mc [>J'D>6,4E,Ҷ(",":G-=$ 3M\b(#r a(,*0$!"2XZ0I-0lI ,4U4!%;" " M DIUbip{4>32!>73!5>54&+#"'#"&546;4>323235"&5463273"54&54'&'74#"64&#"3265#26=#"5&4A-%* TER'"F5F?Q9 ;(+? *BG$LPB=,EMW . !.7*= <,@l402- (7/]&6.&$/7 xAH@%5gPP[;-F=?(,E6R54"Y92HO_ %E\b(#r Yg@$% -:= 6TN2XZ0I-0lI ,4U4!%; M 9LQ]nv}%>73!5>54&+#"'#"&546;4>323235"&546324>32#"&547#3"54&54.'&'74&#"64&#"2654&'#3265#26=#"A-%* TER'"F5F?Q9 ;(+? *BG$LPB=,E>;/&B]A%nMW . !$ '*<Al402-8%! (7/]&6.&AH@%5gPP[;-F=?(,E6R54"Y92HO_ %M.9<x`@?1/`\b(#r Yg&3 .. !TN2XZ0G%#$K-0lI ,4U4!%; M9OT`nv}%>73!5>54&+#"'#"&546;4>323235"&546324>32##"&547#3"54&54&'&'74&#"64&#"2654&+"2654'"&5473265#26=#"A-%* TER'"F5F?Q9 ;(+? *BG$LPB=,E96&*3I25G3cMW . !) &*= =Am402- $6*<+2 (7/]&6.&AH@%5gPP[;-F=?(,E6R54"Y92HO_ %M$07 x#=4GH3=#`\b(#r Yg,4 -:= TN2XZ0n#P-# +*  (#--0lI ,4U4!%; M,9]bnx%>73!5>54&+#"'#"&546;4>323235"&546322>=#547632#"&54632.#"3"54&354&#'"654&4&#"3265#26=#"A-%* TER'"F5F?Q9 ;(+? *BG$LPB=,E_( /'7=\.PQ-G05MW . !/@30,` t402- (7/]&6.&AH@%5gPP[;-F=?(,E6R54"Y92HO_ %g#\& GP \b(#r $M6bR@$*0tS[$72XZ0I-0lI ,4U4!%;J.`hr{2#"/32654&+#"'#"&54>;4>32#"&=4&#"#54&#"&5463263232654&'4.#"3265#32=#"?H?5&"&8< I6S& B:J/*$ ;(+? d^<8-C-%9  6KWL28%"6+E+"*".0$2--#7/$">!cK>2N/5%: 6bNPPT< -=?(,E6-u:R<6190Ѵ"(:2c#-uAL//>39.,<0$M#:4Z0I;7lI C%@`UJ-goy2#"/32654&+#"'#"&54>;4>32#"&547&=4&#"#54&#"&5463263232654&'4.#"3265#32=#"2654&"?H?5&"&8< I6S& B:J70%$ ;(+? d^58B/.A18-%9  6KWL28%"6+E+"*".0$2--#7/$">!c&%7$$K>2N/5%: 6bNPPT<)4=?(,E6-uS' @0@?1;! D190Ѵ"(:2c#-uAL//>39.,<0$M#:4Z0I;7lI C%@`Ub$&&4&J -hpz2#"/32654&+#"'#"&54>;4>32"&547&=4&#"#54&#"&5463263232654&'74.#"3265#32=#"2654'#"'2654'#"&547?H?5&"&8< I6S& B:J71#$ ;(+?  GfI=5-%9  6KWL28%"6+E+"*".^0$2--#7/$">!c$ 0%5,*2K>2N/5%: 6bNPPT<(4=?(,E613HF5E%C190Ѵ"(:2c#-uAL//>39.,<0$M-uT:4Z0I;7lI C%@`U  i-# ++ )#-J*.z2#"/32654&+#"'#"&54>;4>322654'7#"&54632'&+"3265#"&'4'&#"#54&#".54626324.#"3265#32=#"?H?5&"&8< I6S& B:J2%$ ;(+? H%/DZ%=!cK>2N/5%: 6bNPPT;4>322'654&#".546!2'654&#".5464.#"3265#32=#"?H?5&"&>I6S& B:J36#$ ;(+? :8R8-B;'+:H (4\8R8-B;'+:H (4\0$2--#7/$">!cK>2N/5%;6bNPPT<%2 =?(,E6LJ5Q M56:3VN1KQLJ3S M56:3VN1KQ:4Z0I;7lI C%@`UJ *Ojr|2#"/32654&+#"'#"&54;4>32#"&5467'654&#".54632%2'>54&#".5464.#"3265#32=#"2654&#"?H?5&"&8< I6S& B:J$ ;(+? v&2A.0@)A;'&@ ) $, [:8R*8R8-#:(*; ) $, [&0$2--#7/$">!c %%%%K>2N/5%: 6bNPPT;4>32"&5467'654&#".54632%2'654&#".5464.#"3265#32=#"2654&''2654'#"&547?H?5&"&8< I6S& B:J0)$ ;(+? l,4GfI+#B;'+:H (4\:8R,8R8-B;'+:H (4[/0$2--#7/$">!c$0%5,*2K>2N/5%: 6bNPPT< /=?(,E6 D*3HF5(< M56:3VN1KQLJILJ3S M56:3VN1JR:4Z0I;7lI C%@`U i-# ++ )#-M61:F2!3##"&547#5>54&#"632#"&5476264&"%2654&#"7]VS&%C12C'+2 gD 5*&-<9<8@BGED0#!4"U(#&!**wflWH#fAD04"V2Uc(Q7HY61RiPGF#2#$5"1+&.'M2>O[2!3##"&547#5>54&#"632#"&54762654&#"2654'#"&'%2654&#"7]VS/.Q@?Q1+2 gD 5*&-<9<8@BGED! P:2' 0(#&!**wflWH'A@ZX>D(V2Uc(Q7HY61RiPGFX8*" %5& &5"1+&.'M<H7463233#".54632&#"32765!5654&#">32#"&2654&#"M~cbDGSR02{!HM1MNCG"$}U$d"b_IL_ +&0F?5CKy*' *,pCCV<}-0!%!#0(fGkNssV%#Y6;Fh0."&1.#"4H_>2#!"3!!"&5463!27654&#"#"&546732654&5466O(,\<4839M+,=8!48C$IqCJ?9Q1)7^'?A#QB^BR03Eda=pc4HQ>:7CJHbH4>32#!"3!!"&5463!2654&+532654&#"#".54673265W 55T04@@T]57394E7$#19$4a@+P>M@5CS0%;<%6 (*08$F2RH='$:3!3$+"6-5TLT#^ECm];LO5=H=2#".54632&#"32>54&#"#"&546732>=46anQ #?_7#>E*AlL(?K+K~Y~7L<\XDVdIE:@H@'U¯yo"-$"" ")cVhIl\MnBHc63"#YhMIk2#"&54>32.#"32>54&#"#".54732>=462'654&#"#54#"&5463265M*Z%Cc:W0IDyC'Y,1fYDAe='@=-6XE5M'{06 7&#f)%    # (<^P6}%0F1#4 B )*%-1Kfa3^OKC].IG$GVN9;%+*MKk& ! :  ' M)Q2'>54&#"#".54732=462'654&#"#".547326=46RZ >,:>D<%<^>5M'{60E@]gv9< 0'P-##@+.;V#",&#F{Y8LCn?IiKYKPP.IG$DXHMiSY],S94E%Y/@-80565?!h24/0C%,5><MX*d2'>54&#"#".547326=462+"3!!"&546;2654&#"#"&546732654&546RZ >,:>D<%;^?5M'{60E@$9gn/=I9$H!'"&0:($ A*0L-3*'6&?{Y8LCn?IiJZKMS.IG$DXHMi;HSY],08?f 2('N7+<*5!-3AB(K ?#03$) -2MZ*o2'>54&#"#".547326=462+"3!!"&546;264&+532654&#"#"&546732>=476RZ >,:>D<%;^?5M'{60E@%8gm5E((9>$Q"%' -$ ,#?,/L5*%,4 !"{Y8LCn?IiJZKMS.IG$DXHMi8KSY]+5"%,!6 2)"!* "737C@.H  <(,6"A.M,+`2'>54&#"#".547326=462#"54632&#"32>54&#"#"&546732=46RZ >,:>D<%;^?5M'{60@1$9g_@I;:lU-H4+/LQ2I%1'<:,8D(6-$/(:;{Y8LCn?IiJZKMS.IG$DXH(LB;HSY].tPdLL9+FD"C^3EV>)YL$/@k:F;/7%4632!!3!5#54#"#"&547326=463237"35&1YH`Ay8UU>G,UCA_[FYGImS0SImFTG7*z9(%45!-. (9;LT%4632!!3#".54>32&#"327>5!5#54#"#"&547326=4>3237"35&1YH`A{oHI&:4K6+3"LD$o]y87326?>32u$.m?* 1$:4(#!,+:'*BfCHf =,:>N.5.%:9Gn 7'DD<%+$:,.,I[LC[pn7F?lBWWT=;:R(J3AH;EO%"&547&/32654&+532654&#"#"&54>7326?>322654&"u$.9;D`E 1$:2*#!,+:'*BfCHf =,:>N.5.%:9Gn0#"2# 7'A%!D3AB2%"<%+$:,.,I[LC[pn7F?lBWWT=;:R(J3Ay#!#HESe%#"&547/32654&+532654&#"#"&54>7326?>322654'"+2654'#"&'u$.CBQA?P0 1$:5'#!,+:'*BfCHf =,:>N.5.%:9Gn#+84% 09 7'I$&O@ZW?D'<%+%9,.,I[LC[pn7F?lBWWT=;:R(J3A  X9)  '3& (4HDJ#".54632&#"32654&+532654&#"#"&5467326=463262xy_9@*[=W-"=Q;MPA8&&/7/6&)XDVdIE:@H@,/jW4N(7)H 3sQ"' *c?9O6;&4 !D05Il\MnBHc>V7]d,-Hl#"'#"&54>7>7654&#"#53264&#"#".54>7326=4>323265332654.'u;AlFI2Y45K   ( " %$=*-418*#0E*1"65@J7(7>7654&#"#53264&#"#".54>7326=4>323265332654.'7264&+"*D02B6$Y45K   ( " %$=*-418*#0E*1"65@J7(7>7654&#"#53264&#"#".54>7326=4>323265332654.'2654'+2654'#"&'u;A1($3R~Q6'Y45K   ( " %$=*-418*#0E*1"65@J7(3?\X>K&((-/*  *(,$?PO/F%0Y;0LF=A*LX?KI5L&E*7! 53 .,B;3^R);8%  !X9)" %5& &6Nz#".54632&#"32>5#"'#"&54>7654#"#532654#"#"&546732>76323265332654'J,"58C/vG)S&6lV5I'2AZ5iJ;' "H 4/I4,5I]F:kA2! >R8("P+JL&"5KkDxcJ|#"%" "@M32HS6# !0**3S F5SH%XyA]:;*81G 4  $-,C17654+53254&#"#"&546732>7>323265332O/#~t֍cb `]f\5i;K( #I,J#(K@J\H8jA4 0/8S7)['P2CM( )=7PnldQx]8a HS-,  /*E"?E.ErQI&Xy@^;:)=V);.H 1@"-*C2;L|y%4.'7"&547# '&5473267#"'#"&54>7654+53254&#"#"&546732>7>323265332264&#"O/#~l-7654+53254&#"#"&546732>7>3232653322654&#"2654'#"&'O/#~t 4HU=@R o֍cb `]a)]6h71( #I,J#(K@J\H8jA4 0/8S7)['P2CM( s 5,81#$/9)=7Pn R6?SU=&ldQx^=\ ES *"  /*E"?E.ErQI&Xy@^;:)=V);.H 1@"-*C2;1b9)" $2.):H<2'>54&#"#4&#"#"&54>7326=46326 Ox :*"0V1 3S<(*F_=i[f(M4;n&<15"- 1"N7S,2]732652654'PiH\8I\J\VLMg=6(&X|.%X54T\ER(0HS>RCb?I56 ;*#1L0%;O2;N1)KN77sLoLM*a9: +=h`SIKg"08:"-8EkRY;:l4HB5;,RbGUAEF&G92>F*4%4&547632!5>54&#"#".5467326%354&'UAAYbyjR.*@gB:7#GAlH*'@-FKE<)<Q/0wpZxL-'=5\Yb0^>L{ 7VQDDlB=Q)F;4>H%4&547632#"&547#5>54&#"#".5467326%354&'2654&"UAAYb!!D`E"jR.*@gB:7#GAlH*'@-FKE<)0#"2#<Q/0wp03AB2/ ZxL-'=5\Yb0^>L{ 7VQDDlB=Q)#!#F5?K\%4&547632##"&547#5>54&#"#".5467326%354&'2654&#"2654'#"&'UAAYb.,Q@?Q/jR.*@gB:7#GAlH*'@-FKE<)! P:2' 0<Q/0wp%A@ZX>A)ZxL-'=5\Yb0^>L{ 7VQDDlB=Q)3X8*" %5& &FFJ42#"&54732654&#"#"'&5467326=46V^ʻH#A*QV@;*=bBI54=7"07K-'>3.BO^H#A*QV@;*=bBI54=7"07K-'>S 1>H#A*QV@;*=bBI54=7"07K-'.  2(:2#39Z O6>TV<  ֺh\mBva9Ic8.GU87jI#q?TN93oO[e8e=:  8*#%1)$+8M*U^2'>54&#"#".547326=46#"&=4&#"#"&5463232654.'2654'RZ >,:>D<%<^>5M'{60E@%8g)K-*B-"N9#-3e@3K%7 & "E%{Y8LCn?IiKYKPP.IG$DXHMi:ISY]- +/%JG=:0+A?V36J7TZ@A+1):5+5 +A8'LOM*]hq2'>54&#"#".547326=46#"&547&=4&#"#"&5463232654.'72654&#"'2654'RZ >,:>D<%<^>5M'{60E@$9g9A.1?-6-"N9#-3e@3K%7 & )4&&)"E%{Y8LCn?IiKYKPP.IG$DXHMi;HSY]D0@A/: J0+A?V36J7TZ@A+1):5+5  +/%S$%#+A8'LOM*]j~2'>54&#"#".547326=46"&547&=4&#"#"&5463232654.'72654'#"'2654'#"&547'2654'RZ >,:>D<%;^?5M'{60E@$9g%GfI93-"N9#-3e@3K%7 & )$  0%5,*3"E%{Y8LCn?IiJZKMS.IG$DXHMi;HSY]:$3HF5D"#E0+A?V36J7TZ@A+1):5+5  +/%R  i-# ++ (#-+A8'LOL;O3<G2!!3#"&547!5#5654&#"&546323546"!5.2654&#"D(,H07:?8!1YPPSO4(7\m.SH7[bX9)" '3% &6HxEN23467632!!3!#"&54>32.#"325!5#5654&#"&546"!4'&Cb##5W<#"1SD+C=US$ L#uQ.I=+7? D[?EM(%+^D1+F]%6 02J5&M/%$*J)>H-2 1YA_*TI7u+4LGDfo2!!3#"&54632.#"326=!5#5654&#"&5463235462'654&#"#54&"&546326"!5.-) 9'(1KVDB9$#AU#@*N\;H,H07:?8!1YPPSO4(7\m(Z@#,)(\0@ѵ%"B/[%0f:a10SH7[bLG)NWb2!!3!5#5654&#"&5463235462"&547&#"#54&#".546326"!5.2654&'P8 Ѵ'"F1X"V%:a0/SH7[bR$'G6C)&LXG)bkt2!!3!5#5654&#"&5463235464632632#"'732654'#"&5467&#"#54&#"&"!5.264'"!4&Lk&a7O) S :GhZ>%)#6l^IC+,B6D!54DN)CXF0.- C1>7N,Ab71Z;Ö-H0676F1X-B!(VG7dpHRZf23432!!3#"&547!".5467!267675!5#5654&#"&54>"!4&2654&#"Lk&a7O) SB%0C.0@[2 ;(1@A.>bhAb71Z;Xw !E -H0676F1X-B!(VG7dp2'(%%HHMUcu23432!!3"&547# 467!2767675!5#5654&#"&54>"!4&2654&#"2654'#"&'Lk&a7O) SK*5VyUx%)#6+-? IC+,B6D!54DN)C *92#39XF0.- C1>e0I1=UV<.%Ab71Z;!E -H0676F1X-B!(VG7dpE c:)# %1)$,8L;+IT_%#"&547"/32654&+532654&#"#4&#"632#"&54>326322654&#"%2654&#" +86E00C 7"31:'$41B'-BSP/YV ,@6< 4#?F/NU.i-1gEdo%###"*%' *9%A$"A3AB2*:%+3,0,&*$,(6hbGR7+,jOMq<OMHt{""!4"7#.+&UL4HUfq%#"&547/32654&+532654&#"#4&#"632#"&54>326322654'+2654'#"&'%2654&#" +=FR?@Q0 7"31:'$41B'-BSP/YV ,@6< 4#?F/NU.i-1gEd!  P94% 0|*%' *9%D$#T?[X>B):%+3,0,&*$,(6hbGR7+,jOMq<OMHt! X8*# '3& &7#.+&UM07>HS2#"/32654&+#"&'#"&547.54632>32#4&#"265#';54#"26=#"v&8 E.!,'/ ^>!@ 9!2OB&K9H;%9cD@&$:7N?Ĥ.3#>%!H%!7,++*8P/;&"1g1# 0L?K' 1-JP ,cZE@?FICNW`l-'c*,4U4 +6H5<FPY%#"/3254+5324+#"'#"&547&5463263232%4&#"32>5#';54#"32=#">2:H9H&!?,P)#?9JBDT0G%OEV750,22+'09)$?)'?"b!"* !0."G*KF*PPP@P>4APPnSE^4VM=H5#';54#"32=#"|R9393}6*0DMHP)!A;HBDM7G%O,?@|/4R8:6.4,3+* Ħ=&#>))>!c4B7"':;0(-UgDDG3E4':BB#8/=,+.7@1CH,;5D.2[$"R""2QGM@HS^h2#"&54>32.#"32>54&+#"'#"&547&54632632#4&#"';54#"32>5#32=#"nIY!GZE/H@5>+(()*V]"=c<3/a9Q(!A,-#+ Ĥ##>!7,xU.[X7, " .KY.=XsnPPT32#"&5476326326322654&+532654&'$2654&#"-*`9'- ?,(/0*+$.5*LRU6E9KK=0./-#LqBC.!1;A8>AUU}b71>R)Q75TfLGHMMI1>*(.!2i:HA4 54<L;ocq%"&547&/;263654&+532654&#"#4&+#".5467&#">32#"&547632632632264&'"#%2654&+532654&'$2654&#"-*42D`E  ? 5(/0*+$.5*LRU6E9KK=0./-#LqBC.!1;A8>AUU}b715210))=5(=7"E0J(N5>R)Q75TfLGHMMI1>u#1!"*(.!2i:HA4 54<Lz`l~%"&547&/32654&+532654&#"#4&+#".5467&#">32#"&5476326326322654'#2654'#"&'%2654&+532654&'$2654&#"-*;FQ~Q8  ?,(/0*+$.5*LRU6E9KK=0./-#LqBC.!1;A8>AUU}b71>R)Q75TfLGHMMI1>" X8)!'3% '6*(.!2i:HA4 54<J7&0233##"&547!532654&"#&546264&#"7!532654&"#&5465#7!532654&"#&5465#2654&#"S233##"&547!5>7!532654&"#&5465#2654'#2654'#"&5465 6",5r&H{%B (V:H.H"E)&445Jg?F@71T> I7K( (! 0)<(,5E7&#"!53264&"#&546323&54632#'2654'd %(4&8 p&P1B!,( % +#'049G? =35BU/% "&Jjs}233!532654&"#&5462#!"3!!"&5463!254춮&#"&547&#"!532654&"#&546323&546322654'54'54'#"&5467&#"!532654&#"#&546323&233!532654&"#&5462654't(.$$!!"!2  /h<.C'1J.D`C "@9y7mR. %%!#($..K %" )ZIL7Sr12(J( , KT*61%&"$ !//$*=[2L=A.Q8 2(+>>+jL: ;?[t'V:2)L4$": A(E!,/ +. ",V:H.H"E)&445J1HUa2#!"3!!"&5463!2654&'#".54>7&#"!532654&#"#&546323&546262>54'fd$"-*>=+O`UF&B/0D.'#/Mf_((&$#- +H;@R2<}Ca$ &5I0}ge~J9*(:jMIc BH-ZG>M')F/ xLy:"D'&70$7&#"!532654&#"#&546323&5463262>54'UHJR8"#,<;*$&>."11/"Q?9J3.&;Lg2-(("(!/ +O4BP2<}\g=q 9M-{KH@(B6FI9)+=,%$6.$( DQLs]A,K1 $vN9^"D'#:-'CCZ%'+$1+ir] &&$7b9Yz`>J` 9sN=g"K)81% ;DO@B6VDO7>- 3$&LJ&zYe2# '&5467327>54.'#".5467&#"!532654&#"#&546323&5476322654'JZFlu=7 >*Oqt`o*K:*7L>*6DS,)$6"# * ?6:J*276Wv9 ''LTj+RYC+glRq/?e:aS')!N%;)(2W~;D!Fb2wH7f &J'46:FT<>7RdYGGtI;?,S(*"#Jzbn{2#"&547# '&5467327>54.'#".5467&#"!532654&#"#&546323&5476322654'264&#"JZ`)6B/.Bx=7 >*Oqt`o*K:*7L>*6DS,)$6"# * ?6:J*276Wv9 ''L9&% TjyW>*0A?1.glRq/?e:aS')!N%;)(2W~;D!Fb2wH7f &J'46:FT<>7RdYGGtI;?,S(*"#'6'Jpzbn}2#"&547# '&5467327>54.'#".5467&#"!532654&#"#&546323&5476322654'2654&#"2654'#"&'JZn/*Oqt`o*K:*7L>*6DS,)$6"# * ?6:J*276Wv9 ''L   *92#!19TjR M3?SU=glRq/?e:aS')!N%;)(2W~;D!Fb2wH7f &J'46:FT<>7RdYGGtI;?,S(*"# .c:)$ %1,!,8H0(ks|%2#!"3!!"&463!2654&'#"&547'#"&54;2654&#"#54&#"632#"&54632>32+"32>2654#"324#"UPNH*h7328EB0.7*&: ~p*+JJD;1#S@2>! /-$-7uAo1X!CX98s43V,.4Z**KZE;3<24- &(1*% C.1*H+->'P06% 0 $;8,AP7_;@-, $,>>.\fMv%2#"54732>54#52654&#"#"&547'#"&54>;2654&"#54&#"632#"&54632>32+"32>762654&#"3254#"7i**90\"SVkIF09 7+':Oh:1K+W<:]AV-S@3>  /-$,7rCq.X =[5TS)@&9"RWAg**98$ (. }} qk ;(6(!$.>2&K>M2''D;3+6A9O/6$ 0 '88,@Q7L?0E# *-A $#"I*43M ?mu~%2#"&54632&#"327654&'#"&547'#"&5476;2654&#"#54&#"632#"&54632>32+"32>2654#"324#"yaeMz{GnD76C*9J4z@A3)8*&: u*7A54hGF49,-S@3=! !--$,8uAo1\GQ`g>G(&,.3N**iDY-#*%' <;2654&#"#54&#"632#"&54632>32+"32?62'654&#"#54#"&54632672654#"324#"y"@?&̈-`M]zB' `(133XEm1,8*&: w+2F+DB :S=0/)S@3=! /-$,8uAn2X!@X)@?860-GM#% #Q.3N**#F0y9&7FB *%-l3H#)0*% H4A-#2 D8-5558@/7% 0 $;7-AP7Q@-A! $6!@!& 4:% & .\fMl%2#"&547'#"&546;2654#"#54&#"632#"'##"&5476;2654&#"#54&#"632#"&54632>32+";2>767>32>32+&#"32$2654#"324#"324#"(<7+#= I$KHN8Fnx$mg5R@3="/-$/vOWI('ZCN/8,-S@3=! /-$,8uAo1Y DX99o/9u9Ma)+oAo1\8b$1O6)?*$#?H/2F**D**4P2)''!2(,HC/b$#=.P/7% 0 $;WYF?&)\/"6:L S/7% 0 $;7-AP7Y8?0/ 4)A#.32+"32>54632>32+"32>2654#"3254#"3254#"=TZDX00D(86*n=/)'/ ]Z18EvU1MXLLH3 +* 'FhHnt2JWKN*75)( (1b?`,Q8Q''Wk]D`,O8Q,JL5_SI)dOa&+"" $$<0;E!5"($,Z0#&4." B,4+=C:,_|4^=$3&:#TL34Bc@*_44DA$0!(88-?S5R5>P{<@R5R5'8!(,&.&,X0101LD%2#!"3!!"&463!254#52654&+#"&547#"&54;2654#"#4'&#"632#"'#".54;2654#"#6=4&#"632#"&54632>32+";767654632>322654#"3254#""3267#"'#&$3254#"X`J(.%4% $11$%( -1'$2 VX'F5IVNK G2 +'"'bx7NH%/MWNN+82 )) (2c>a,N:OEm~af;_- Q6R'* !!#$>@)$/)$$#! **9,A'("#'3-#?40->(_|4\=$/"#=X[A 2%a=-_ DC$4'99,?S5Q64@Bd]@R5P7r%,," 01&!.l &01L0%2>32#"&54>32&#"32654'#"&547#"&54;2654#"#4'&#"632#"'#"'&54;2654#"#54&#"632#"&54632>32+"32767>32>32+"2654#"324#"324#": {1D1,a,P7RƱ0J43%}aa=`,N9OIJ&F/V'+####3;;&"Ky-% lhG#!*0-# >#4(9-_| \=$1 #=T^B9,]<._42FA$0!'98->T5Q6 Cb`CP5P7# --+&b""bL>32632'654&#"#"&5467&#"#4&#">32#".547+"&546;2654&#"#54&#"632#"&54632>32+";2676?>322>54'264&#"%324#"g:"8:C9o@AE70XgS$.@"=(AL:-+-=T4-+D' 0!4B>6); 8YD^?ZS]P7F/8--S@2:%!,-$,8tBs-Q%NL98b,&(*>y]O !-We1P*"#"))/**p" HIcHq!BzZx 'p@?<%vD32#".547#".54;2654#"#5654#"632#"&54632>32+";26?>76326326327654'2654&#"%2654&#"3254#"`tD@F+0C=+4[H!^I=7G5%&4M+)GT '+>07$5 <1E<.NWNNc2 &( (2e=`,K9QgU~~1g}>7OH'%H9+3-$*JW3# $"$$jUXF3=C-*AGNXx\yMrqI8t 2),(3j[X80R$:;xX ."l:,_p y$1 (8:+?S5Q6HX<7Wh,)1 .II1F-&+lHNg 0$1.!9&01NC%2#"'532654'"&547'654&#"#"&5467&#"#4&#">32#"&547#"&54;2654#"#54?4#"632#"&54632>32+";2>?>7632632632$2654'264&#"%2654&"324#">VcL=)%A(8N:&QYJ _J=:C.*&4M-(IR,.< ,>A?IHgk.OWOLd3 ((!'2c=c*L6ThU~*:[D-7PI&$J9+3;_u@J*JWLv!8$$$$$N>CTA18-0 )!1#.#Z^Yy[zPouE3r' 1*,+0nW(_1)*gP{-(.Cl:,_p  x#/"'97.>T5O8JV<7:;.,/#.IIiRUM2mGPk/ . "3-"6(bF&nw%2# '&54732>54&##"&547'#"&54>;2654&#"#54&#"632#"&54632632+"32>2654#"324#")Ehgi!^J\Mvd6-%;'"> }r+0H%<=9W>%"SB2;".-$-6hRc72U@['?;&J(-,.4P**HEnwgz"ntUR+(J6'/%&*!% C/A0!1 J8%1+@.8% /!'88,@N46H@*?('!AA//*fFy"&547# '&54732>54&##"&547'#"&54>;2654&#"#54&#"632#"&54632632+"32>32&2654#"264&#"324#")'A\CW{gi!^J\Mvd6-%;'"> }r+0H%<=9W>%"SB2;".-$-6hRc72U@['?;&J(->Eh,.4&%+&** ?/B@0gz"ntUR+(J6'/%&*!% C/A0!1 J8%1+@.8% /!'88,@N46H@*?('!AAHEdc//'6'"'h*fFIz#"&547# '&54732>54&##"&547'#"&54>;2654&#"#54&#"632#"&54632632+"32>32&2654#"324#"2654&#"2654'#"&'x(6U<>U?[gi!^J\Mvd6-%;'"> }r+0H%<=9W>%"SB2;".-$-6hRc72U@['?;&J(->Eh,.4P** 5R:2$!0J/?SU=/% gz"ntUR+(J6'/%&*!% C/A0!1 J8%1+@.8% /!'88,@N46H@*?('!AAHEnm//*f0b9)$ %1,! )LDQ^h"&547&'#"&=4&#"#"&5467&#"&54632623265332654.'2654&+%2654'X*9 G+AdBC2.S@`>;'mQH@L9/.RY^!kpiA2+S>(%;'mQH@L9/.RY^!kpiA2+S>(%4?[X>?)3L`Na:Q[yLrvCN:./Eg_!jx`>5:@C_ %(5SO@SX(+3We5+z=XsI) %($JJa?4ZzQmrG;n% pFFU_B**< +#CqiIZeK6nIQm0JLe%2654'7#"&54632.#"32>54'#"'#"'&=4&#"#".5467&#"&54632632326532'654&#"#54#".54632%2654'(BFtJJO)Bc;Y~]zC'^)?S.^,%   -1We33mH6!~v'+G07FB  )%-T|B8LL3*Q4_Y[yLr@Q(?m" sR=LecK;bO+#D/C% $:  S.nIMq.LP&^h#".54673267"'#"&'4&'&#"#"&5467&#"&5463263232653327654&'2654'r80a:_U)kK$ZxOquF5o( qCIX]_; T*"Co0<7NT%K4lGNl,LPhs}#"&547#".54673267"'#"&'4&'&#"#"&5467&#"&5463263232653327654&'7264&#"2654't+>>21@4xӞV08'=(Qwg0L&.H:K .% ]L<7F.+%a:_U)kK$ZxOquF5o( qCIX]_; T*"Co0<7P\ -hS'8%$'K4lGNl,LPft"&547#".54673267"'#"&'4&'&#"#"&5467&#"&5463263232653327654&'72654&#"2654'#"&'2654'`4FUxW }ӞV08'=(Qwg0L&.H:K .% ]L<7F.+%-4hmEk<>a:_U)kK$ZxOquF5o( qCIX]_; T*"Co0<7P\ -hS ,a9(# %1.*9wK4lGNl,LM:PMWco%#"&5467654'&#"#"&5467&#"#4&#">32#"&54632>32632%27654'2654&#"%2654&#"5B20C0H79V"mUC48Di4VWaq%"!%*' *,8/3AB2,7 PVX=A Z|OoqH32#"&54632>32627654'264&#"'327654'#"&'%2654&#"XiY[*)=?QL:F79V"mUC484VWaI=8*)5$2 f*' *,‡kbYbC+.X?=KPVX=A Z|OoqH54&#"#"&547&#"#4&#">32#"&547632>3262654'2654&#"[e_Sמ"/G;NO3,HM%0SL34:*-!7>6+CMJI`]H@)-$*A.F$*/I#$$! ))ƒY|FH"5:)HjHnFPEMt@0),)5)U;+\84+lOrOPO"+06b-U)53P3!"1.#7D;T^iu233#"&547!53>54&#"#"&547&#"#4&#">32#"&547632>3262654&"%2654'2654&#"[e_S$(D`E*"/G;NO3,HM%0SL34:*-!7>6+CMJI`]H@)-$*80#"2#.F$*/I#$$! ))ƒY|FH#03AB21""5:)HjHnFPEMt@0),)5)U;+\84+lOrOPO"+#!#06b-U)53P3!"1.#7DUar}233##"&547!53>54&#"#"&547&#"#4&#">32#"&547632>3262654&#"2654'#"&'2654'2654&#"[e_S'1Q@?Q2"/G;NO3,HM%0SL34:*-!7>6+CMJI`]H@)-$*+! P:4&1.F$*/I#$$! ))ƒY|FH&D@ZX>D*"5:)HjHnFPEMt@0),)5)U;+\84+lOrOPO"+X8*" '3% & 06b-U)53P3!"1.#7Mhs2!3#".54>32&#"326=!53>54&#"#"&5467&#"#4&#">32#"&54632>3262654'2654&#"SfZS?lq@AJ32IAlB=j!]H6o'4@;NN7:7(1/)SJ2+C' +&0F?5CKuj- B"8()G#)?%/*O*' *,xVp`!6O( !&[Q""d6HhPd?WU35P17",)4,<,%#Y6;FhQtM"+:,U3V$';P."&1.#"4P=Zep|2#"&547&#"!53>54&#"#"&547&#"#4&#"632#"&54632>326323&5462654&'%2654'2654&#"wWoF=1B_A]3%"-83CD3-8N("M?,GT%8/61=B{f[) ;0$$.H\L6s 'X' !6." !"˜_T`>\qM3n &g2EgOc;]O;eO4"+(3lXH3+2;GhQvJ-yUq[XUdwP3 hRa&IJ8+T0 \ ?P65/6P7|2#!"3!!"&5463!2654&'#"&5467&#"!5367654&#"#"&547&#"#4&#"632#"&54632>326323&5463262654'%2654'2654&#"Lfd4%"K*>=+MaVE&M=CKM9#/Mg3-޴!83CD3-8N("M?,GT%8/61=B{f[) ;0$$.H\L<~Z]Cd.&5I/ !6." !"}ge~J9*(:hOIc @JUymEBe wM9_"<.6EgOc;]O;eO4"+(3lXH3+2;GhQvJ-yU~TGv[C;IT9V8+HN8+T0 \ ?P65/6P 42#!"3!!"&'463!2654&+532654.+#"&54>7&#"!53>54&#"#"&547&#"#4&#"632#"&54632>32632322&5463262>54'%2654'2654&#"YUHJR8"K,<;*+:- "11/"Q?9J3.&;Mf2-"-83CD3-8N("M?,GT%8/61=B{f[) ;0$$.H\L3**<<}[i; r$2T- !6." !"KH@(B6EI9)+=-$$6.$( DQLs]A,K1 $vN9^&g2EgOc;]O;eO4"+(3lXH3+2;GhQvJ-yUq[Uh[J5C"O/TD+EY8+T0 \ ?P65/6L%4632#".54>32&#"32>54&'#"&5467&#"!53>54.#"#"&547&#"#4&#"3>32#"&54632>326323&2654'%2654'2654&#"qZl9HTv:K6POKF70( L^D`-.%H>3ADG":DZ6"&) , D@6.7M)"M<.%;! */;80h5vI:h &%g-6:%Mf9^P:cQ5!-'4+<*(]36MkPuJ-C:Sq[XFR29/k#LJ8,R2ZBP290<6Mow2+"32632"&547'#"&54>;2654#"#54&#"#"&547&#"#4&#">32#"&54632>3263262654#"$2654'2654&#"L>[->(?@-832#"&54632>32632632+"32>322654&"%2654'2654&#"(18S..4';:(,J5%8-">`[01Fs]1KfXT@251%(1" +HSN.+C' . 3C5?FHul+K):%)1s-m;^b@-I'4fFe39b&~***&!)) (31"! '&,$4%)2 % =(2/0 $3.# 6M<%"32>7632#!"3!!"&5463!2654ᒆ##"&547#"5476;2654#"#54&#"#"&547&#"#4&#">32#"&54632>32632632#2654#"%2654'2654&#"L+PP+>C!ME6A(),(\%66% (P8-"> %D)F. !5[f!T@251%(1" +HSN.+C' . 3C5?FHul+K):%)1s-m;^^X.2***&!))*/3!5 (&:1'#% *;%)2 %-"r`<6b "8@06G%=9+.'2+,,1,<,*Z52OkNvM$)44H:FY/*.=>0 $3.# 6MUiu2'654&#"#"&5467&#"#4&#"#"&547&#"#4&#">32#".54632632632>3262>54'!2654'2654&#"bp5'2XcZ ,A)(GAK<,(3ITE9(kOC /!(; sUB3U?03Ie:R%>,9Q#-W-82+3X,10+"$$ !))—c-?>BvR &r?J:;wC32#"&547632632632>3262654'2654&#'%2654'2654&#"bm4)%C21C&?89N mUCHY{LstB{W 0-,-,;,W8;GjPtLPLLZ#7uL5mKPo1I!" -$Q0y?m6+O/!&1.#8M^mw%"&5467654'&#"#"&5467&#"#4&#"#"&547&#"#4'&#">32#"&547632632632>326322654'2654&"2654'"&'%2654'2654&#"UW`UyTJ6F89N mUCHY{LstB{W 0-,-,;,W8;GjPtLPLLZ#7L5mKPo1I"X;'  *0),6Q0y?m6+O/!&1.#8J?092"&547&'732654&+"&54>32&#"3264&"6TH>"D`Es>_56L-5a=H&=> =j6h9R$%m0#!4"H,I+7 3AB2(? (*'G3)=' 8.,#$J0=N2#"&547&'732654&+"&54>32&#"32654&'#2654'#"&'6THJKQ@?Q+c._56L-5a=H&=> =j6h9R$%^$P:4&1H,S'#W@ZX>A&3 (*'G3)=' 8.,& X8*" '3% &J24>32&#"#".54632&#"3254&/.J*DB I)^@Y;+@@G$;(l9K%,@!E4+3.&XGY`##-*'6-R@?9\%2#"&'&54632.#"327654+.5467632&#"32'654&#"#4654#"&546326NRtXW{'ZiE^5 C$=:R-`<>i 4-#"  - &  F>7%#"&'532654&+53254&+"&54>32.#";2#.SaBui3B9%x6v32.#";22654&'#.11B31C|6i3B9%x6vJ[%"&547&'532654&+53254&+"&54>32.#";22654&#"2654'#"&'#.ICR~Q1h'i3B9%x6vF&6,$1C&$I2/.G6 # /!RX7+" '3% 'Jn/%2#".5473254&+#"54>32&#"327LUMzL1T #/4)B@ }F6h9Zw Q1$8NM)gN!W&kW#u,B G6046J3q6A%#"&547"&5473254&+#"54>32&#"327322654&#"0A;51@T #/4)B@ }F6h9Zw LU6&!' I&IA.(!gN!W&kW#u,B G6046Q1N&,"Jo6AR%#"&547.5473254&+#"54>32&#"327322654&#"2654'#"&'$KS?@R,T #/4)B@ }F6h9Zw LU5R92#3*U*gN!W&kW#u,B G6046Q1S 0c:)% %1)$*MT!.%"&547#"'&54632264&#"2654&+ (AdB _@@yaeFb_IHbc4"$  4 :&1CE/?>_ggbIbg_HGg#" M /A%#"&547.54632264&#"2654&+2654'#"&')7R>?Q"XoyaeFb_IHbc&)94% 09 A5@ZX>:" zYggu6bg_HGgX8*" '3& &6MDFQ#"&547&'#"&=4&#".546323265332654&'2654&#"V)8 L.A31BE23WBf5!1V0#*: wE0.G-)A)1L_WVI5#"'#".54754#".546323265332654&'N;J2OTQNsC6e)WM1EqD$4>c)3T87!S@Ip;KeUW(6SOCQD0'~DL}uP/'%#&# #+CJ"&JJ*R8 2mC{J"yKc}G+#CqdI9oM<n#"'#"&=4&#".546323265332654&'#"'#"&=4&#"&54632326=332654&'V)8 vMT93WDe4!1V0#*: wE0.G-), ;,E7&0J4&A=%=,':3#&> #*/)@D1hLL]YVI-ZG1V&X'9\9A07,ӹ#,?G8J1M<~#"'#"&=4&#".546323265332654&'2#"&547&'#"&=4#".54632326=33267#"&462654&#"2654&#"V)8 vMT93WCf4!1V0#*: wE0.G-) #*/)*4&&$@D1hLL^XVI-ZG1V&X'9\9A07,ӹ#,?G8J1$%&M<}#"'#"&=4&#".546323265332654&'"&547&'#"&=4#".54632326=33267#"&4632'2654&#"2654'#"'#2654'#"&547V)8 vMT93WAh4!1V0#*: wE0.G-) #*/!*.P3$ 0%5,*2@D1hLL]YVI-ZG1V&X'9\9A07,ӹ#,?G8J1L5gX i-# ++ )#-M<GT\#"'#"&=4&#".546323265332654&'4>32!754'&'74&#"6V)8 vMT93WBg4!1V0#*: wE0.G-)32##"&547#754'&'74#"62654&'#V)8 vMT93WAh4!1V0#*: wE0.G-)32##"&547#754'&'74#"62654&+"2654'"&547V)8 vMT93WA624!1V0#*: wE0.G-)=#547632#"&54632.#"354&#'"654&V)8 vMT93W>k4!1V0#*: wE0.G-)bK+?<FK3gu%K4WOB-#B7;iI(<7JgXe#"&547#".547! 7#&'#"&=4&#".546323265332654.'72654&#"+:@01@y8j!e0a'_/2VDh3!1V0$+:uH/.J,(;S7(bK+?<FK3gu%K4WOB-#B7;iI(<7,zE&' 'Ji]i{#"'&547"#".547! 7#&'#"&=4&#".546323265332654.'72654&#"2654'#"&'3CV=<*+$%9L*y8j!e0a'_/2VDh3!1V0$+:uH/.J,(;S7(bK+?<FK3gu%K4WOB-#B7;iI(<7,zEb:(& &1-!)9MFIT`2"&547&'#"&=4&#".54>323265332765#"&5462654&"2654&#"?E(*#-AdB]C6UBh5!I9"(,4+#!"$"$tP:t' :(1CD0 MNc]EL@nL+85BG35cKWcHTG0#@6E55k)T9323265332765#"&5462654&"2654&+#2654'#"&'?E11'9Q~Q&J46UBh5!I9"(,4+# ! &)94% 08tPC|% A6@ZX><&=Nc]EL@nL+85BG35cKWcHTG0#@6E55k)T95#"&2654&#"?6[2`}S?OjN<N$!`Z'u;Zq+1\PXS=Lo9MeU*;,)5SL9,A!*)3Dh@*('!B1MO0m{c,+%$%(i7LLqW?lEwM!|J^!+F/!$03.$?7D(CD%&!Z*,%!8,*HDYd2#".5473267#"'#"'&=4&#".546323265332>5#"&546264&#">N9|ґi_5b"^6[WB-1_?L,?>+3!)A=3SP5./&:3BAF"$&${Wcs<9Y[lXyNvI.7ER!-<)gAJ;?R&>iKY[G <;#0$?6E+Y>GX63K.F6)&=H_jt#"&547#".5473267#"'#"&=4&#".546323265332>5#"&54632'264&#"2654&"*+=>20B-gŚOb"^6[WB4*]AL,L\3!)A=3iKY[G?hR1#?6E+Y?GX63K%Gf.F6)&=@%'(Halv#"&547#".5473267#"'#".=4&#".546323265332>5#"&54632'264&#"2654&#"2654'#"&'4DV<=U jŚOb"^6[WB-1_?L,0E#3!)A=3SP5./&:3BA2>Nx"$&$,52*92#!19H P6=UV< 'XqlXyNvI.7ER!-)AA!AJ;?R&>iKY\F?6`0$?6E+Y>GX63K|V.F6)&=G0:)# %1+!,8L<GQ"&547632632632#"&5467&#"#4&#"#4&#"632%2654&'264&#"CMHIa_G9\Y8EXiMG:V?-/3JSI*&6SJ45:*-?-GE4+0#g9*,"'( nQrNONNJHpPh^Y>o#*(>7' ,*4)U;IPE32#".54632632>32#"&#"3262654&#"&&:AL*R0 ] _u-#%2) P :D;bSG-'3SK44:*.!6?6+(; `^H1\&T g:[b(&A %K-&!% "')%+%/3X)(0 01+:;'",)4(U;*Z:4+%;;uOM&4,.T4!-&y5#12>7H;lu%2#"&547&/324#"'&5463232654&#"#4&#"#4&#">32#".54632632>32#"&#"326264&"%2654&#"&&:60B10DB# ] _u."%2) P :D;bSG-'3SK44:*.!6?6+(; `^H1\&T g:[b(&A %K- "#2#$&!% "')%+0#<1CA3+3X)(0 01+:;'",)4(U;*Z:4+%;;uOM&4,.T4!-&$0#!4"5#12>7Hkx%2"&547&/324#"'&5463232654&#"#4&#"#4&#">32#".54632632>32#"&#"3262654&'#2654'#"&'%2654&#"&&:@@' 3X+(0 01+:;'",)4(U;*Z:4+%;;uOM&4,.T4!-&X9)" '3& (:5#12>7J5~%"32#".5467;>54&'&#"'&5463232654&#"#4&#"#4&#"632#".54632632632#"&264&#"l'?D44 (CwQwƪ81:*k3xٝ%&N/F+22)I0, O N(F`S@2$8SL0+C& +>5A 0!(; tj/.Z4SB)SB/ 9*"#!**"A2:+" ;sdDi9XSy_1  -'+#(4 ")%3(2C%$,,1+<,I\3*)%<;wLL3'ZA- 50@7.#!5J"&547!".5467;>54&'&#"'&5463232654&#"#4&#"#4&#"632#".54632632632#"&#"322654&"264&#"!/A^BzΪ81:*k3xٝ%&N/F+22)I0, O N(F`S@2$8SL0+C& +>5A 0!(; tj/.Z4SB)SB/ 9'?D44z''5'%*"#!** ;&1@?2!;sdDi9XSy_1  -'+#(4 ")%3(2C%$,,1+<,I\3*)%<;wLL3'ZA- 5"Af%'''M0@7.#!5J_%"32#"&547#".5467;>54&'&#"'&5463232654&#"#4&#"#4&#"632#".54632632632#"&2654&#"2654'#"&'264&#"l'?D44\(2V=;Vr81:*k3xٝ%&N/F+22)I0, O N(F`S@2$8SL0+C& +>5A 0!(; tj/.Z4SB)SB/ 9$4)92#!1:*"#!**"Ao5G/>TT>.%;sdDi9XSy_1  -'+#(4 ")%3(2C%$,,1+<,I\3*)%<;wLL3'ZA- 5/ b:(% %1-!)90@7.#!5LK<IS_74632632632'>54.#"#4&#"#4&#"632#"&2#"&546264&"2654&#"Lsj.0Xj.*TM| =++26++'3S@2":SP/YV +@-GI0@JPe43JHd]?4LJoJL,-**OMHJg7D=n@4L&,$1D%",(6hbGLB=FnpeLJ23_KOgLlOK59Nr,#+,+&.'LYe#"'#"&=4&"#4&#"#4&#"632#"&54632>326323265332654.'2654&#" (5jAL2+M=]3>)M?$!,NA)H[)50807326323265332654.'72654&+#%2654&#"T'E_E5#+M=]3>)M?$!,NA)H[)50807326323265332654.'72654&#"2654'#"&'%2654&#"D(1Q@?Q9'+M=]3>)M?$!,NA)H[)5080732&#"32767#"'#"&'&54#"#4&#"#4&#"632#"&5463263263232653327654'2654&#"$9<%76732>7#".'#"&'&54#"#4&#"#4&#"632#"&5476326326323265332654.'2654&#"4D)Gsz%4%&^[|} /*!3)K=R LPN8*/N?+NT$9.;9/9E8;m^**L],N8(" '$-MC/Q # ##$yGCdeF?&4],&ET7Msa="$H3JQBUZ4@(,(3}IH^2.+!B{tH"" ,!%017H1"&547! $54>76732>7#".'#"&'&54#"#4&#"#4&#"632#"&5476326326323265332654.'72654&#"2654&#"(=A^Bz%4%&^[|} /*!3)K=R LPN8*/N?+NT$9.;9/9E8;m^**L],N8(" '$-MC/Q 4D-J$%-'# ##\;/,D@0K4],&ET7Msa="$H3JQBUZ4@(,(3}IH^2.+!B{tH"" $yGu%%#%.,!%017Ht/#"&547# $54>76732>7#".'#"&'&54#"#4&#"#4&#"632#"&5476326326323265332654.'72654&#"2654'#"&'2654&#"2BT>?S:Oz%4%&^[|} /*!3)K=R LPN8*/N?+NT$9.;9/9E8;m^**L],N8(" '$-MC/Q 4D2j5R92#3 # ##j P4.+!B{tH"" $yGz 0b9)& %1)$+Q,!%017JWco2#"'#"&'&54#"#4&#"#4&#"632#"&547632632632326533265#"&5462654&#"2654&#"G?=g^`)&V>R JRM7,!,M@+IP )5-<18;C9>k[,*L_(!K0<J7L?5BD!80:9>'&"#w!!"tVqJJQ@ gY1A(,'3lXFZ61QlNoKVJJGG5VV\E1":/HqYCZ69E(& 8(2.,!#1,"5MHmx%#"&547"#"&'#".54#"#4&#"#4&#"632#"&546326326323265332>5#"&54632'264&#"2654&"$2654&#"~13G*,G&N&V 2  JRM6-/M?,)?!(6,=9.@0"%%J-%@(#Z2B',&5'4>$ HZ6;IkPvJJGG%*6 3 ;/H&?A$CZ5;ErXz.@8*4*! .$11<Hq}%#"'532654'"&547&'#"&=4#"#4&#"#4&#"632#".54632632632326533265#"&54632'2654&#"2654&#"%2654&#"t6FbM;*"C*74P8X&'UIRJQM7+ 0L>-D_(6-<8/$6 xj[,*M_(!K0;L4LC1CC 9,>9/Ik%&!"%# K5DSA0<). '?0#' BJZ9tZ2B(,'4sQH[68K(=;oJJGG2UTaE2";3ErYCW8;EG6M. <*)609,#5Ju2#"&54>32.#"3265#"&'#"'&=4#"#4'&#"#4&#"632#"&5463263263232653325#"&5462654&#"2654&#"G$4 W_54.#"#4&#"#4&#"632#"&2'654&#"#54&#"#54&#"632#"&546326326%2654&#"2654&#"Lsj.0Xj.*TM| =++26++'3S@2":SP/YV +@-GI0@Jl4Q .&F7! :) $:1 l +!,.#+1^LC! 9FB,-**BOMHJg7D=n@4L&,$1D%",(6hbGLB=FnvRG2;*Z=;ѵ"*#-5)'/H3X]21./C,#+,+&.'LK<y74632632632'>54.#"#4&#"#4&#"632#"&2#"&5467&#"#54&#"#54&#"632#".5463263262654&'2654&#"264&#"Lsj.0Xj.*TM| =++26++'3S@2":SP/YV +@-GI0@JI6K<$$>) 2:/"90! (*",#)$-b>@.#?<"/k#C%,-**OMHJg7D=n@4L&,$1D%",(6hbGLB=Fnw>M'?<<>'J Ӷ(" 7'.:( 3+3Oe22/.#) I6H"+G,#+,+&.'-+"LYX<74632632632'>54.#"#4&#"#4&#"632#"&4632632632#"'732654'#"&5467&#"#54&#"#54&#"632#"&2654'2654&#"2654&"Lsj.0Xj.*TM| =++26++'3S@2":SP/YV +@-GI0@Ja@>/$<:$(=(>9:bD+# ;T= ;$&2:.6-:.$:0"'I)",#)3-X%0>,-**)OMHJg7D=n@4L&,$1D%",(6hbGLB=FnRd3300+! X5Mc [>K$D>6,4E,Ҷ("":G-9( 3M"(,*0$!"H,#+,+&.'",!M2>IU>32!4&#"#4&#"632#"&547632632354.#'"654&2654&#"!SH#O.&5SH4+C' ,=0F>6BLDFt*F)5]3AMR42F - ,,'!))[32::%!,)4+<,IW89IhQwKO/L 0bEoKF`-2"8< '10 $3.#7MA<HS]i>32##"&47!4&#"#4&#"632#"&547632632354.#'"654&264&#"%2654&#"!SHD02B O.&5SH4+C' ,=0F>6BLDFt*F)5]3AMR42F - ,####,'!))[32,3AD`::%!,)4+<,IW89IhQwKO/L 0bEoKC`/2"8< '1#2##2#0 $3.#7M<EP\my>32#"&547!4&#"#4&#"632#"&547632632354#'"654&2654&#"2654'#"&'%2654&#"!SH.9R~Q:O.&5SH4+C' ,=0F>6BLDFt*F)5]3AMRF - ,p  $(:4%27,'!))[32 H?[X>J"::%!,)4+<,IW89IhQwKO/L 0bEoK2"8< '1 X8*" '3!" (:0 $3.#7H\?I74632632#!"3!!"&463!2654.'#"#"&5467&#".2654'Jqe866Fvx_Kl! 9<6;7j;H'O6nZ;9W>*2MT .&!0=,#;We9S}a[J'OeNPLN4^ cE1@_D58]=B^25D\MW#!"3!!"&5463!2654&+532654&#"#"&5467&#".546326322654' )K 8&J>'4,FF,eH>'&5BF2lZ;8X?*(LV5+!".{U=6:_\q$:Vf9D %&H++(J5,.5:$..2 $7Q`MROL3YfD4R68)]k <39[=C[33L@J2#".4>32&#"32>54&#"#"&5467&#".5463262654'U|9*SZId&#eL_N1#V9EJ3W:l^%oPIAK<,.N^4+!47Z:*3K-1We3[RB~kB ""`Rr [{KstD?m" rV54.#"#"&5467&#".5463262'654&#"#54#"&546326'2654'El@!cdV~^yC'Y,2e8B#]: !0K-8oI4CI80+Q[4+!47a5/0 %  "S-1We3Ak{?stF17FB )*( k['SXD, [{+RAvB2632'654&#"#"&5467&#"#4&#"#"&5467&#"&546326322654' 2654'Pf/6CnCDD61Znc1=^76[<.!1MSO7-?/16Y:-+F34_!l[@15;k##;Xf:F;Wfh(2JKcEm BuU (p>_]Y^;p#@8 ?H%p?3M)X_Lhs>BnIPn9@>BlKTj>F_ju3!!"&5463!2>54&#"#"&5467&#"#4&#"#"&5467&#"&5463262>32632#!"%2>54'!2>54'&Z.B@0-Fe*n_nLIDM=- 4JSM9-?MIFI:-)Jc_!lybA09nYO36,8Aq 8]6% #-Xf1#-Wf2}I2,.6Pl:]s \zIsmJ>m#C5 ;L%p?JrnIKc4((2q']W;/5nIPn/J15lKPn0IFmx2#!"3!!"&5463!2>54&+532654&#"#"&5467&#"#4&#"#"&5467&#"&54632632>3262>54'!2>54',!JO4RP87J_'&Z.B@0_'D9/#")c>7nLIDM=- 4JSK;lMIFI;,)Jc_!l{`A0795ZP26,;R#-Xf2#-Wf2 ;'G)*JE./I2,-7=/%:,< -9\zIsmJ?l#C5 9NZzJrnI>m# {K~?Lb4('3u15mJPn/J15lKPn0IH^gq74632632632632#".547632&#"32654&#"#"&5467&#"#4&#"#"&5467&#"&2654'2654'Hwa>4:Bh7$~%48BqEDBI/]A9\M0"U!]}nX&nOJ=P<-SE9&lI2=O;,,H13_!jV3WfK+3Wf6\ZZRPr"#+d [{HwrG;o$ u 9K[y,T?rG=m$ 88FGXM5mKRn,NM5mKQo/KH<"2'654&#"#54#"&5463264632632632632#".54632.#"32654.#"#"&5467&#"#4&#"#".5467&#"&2654'!2654'$  #dx`>4:Bj5$~&37M9_<*ccAL4]wE'Y,BU=B1[:+nTEBK<-SF8'lTE.C;,+Hd_!jG-1Wf4.0Wf2' ,: & n^ZZ3Pe`+lm 2!7FB 0#'0qqK ]yNqvC>m# u 9K[yNq@Q(?l# nHHVR0mKRn.LS/mKRn,NJF\gq2# 4732>54'&#"#".547&#"#4&#"#"&5467&#"&54632632>3262>54'!2654'0`w:es\%R:~ؖd[521R _L;+<ZlL85]M<:B.,!?UU!_gX6028]0D,8$3G' LV)V*&KV)jYU4wujhPz]1,FpKV@@\zPpEQ%N r 4OZxOqzA6o' s@GXZV&0w15kHNl'PT*kHNl+LJep{2#"&547# 4732>54'&#"#".547&#"#4&#"#"&5467&#"&54632632>3262>54'264&#"2654'0`wc)7A.1@\%R:~ؖd[521R _L;+<ZlL85]M<:B.,!?UU!_gX6028]0D,8$3G' LV)%%,&m*&KV)j[?*1@A.4wujhPz]1,FpKV@@\zPpEQ%N r 4OZxOqzA6o' s@GXZV&0w15kHNl'P'6'"'T*kHNl+LJep{2#"&547# 4732>54'&#"#".547&#"#4&#"#"&5467&#"&54632632>3262>54'2654&#"2654'#"&'2654'0`wr0AU=44HkwCxd6S#03&F;We.Y<?mV| \za\X_>m# vQ;c$wB_afJ\b4PLР8S,?BmKSm>HD@KW`2#"&547!5654&#"#"&5467&#".546326323546"!54.2654&'#$2654'"BB(AdB!=RbO&n^86Y;,.RZ2-!48qi>44HkwCxd6S#034"0F;We.Y<-1DE0/?mV| \za\X_>m# vQ;c$wB_afJ\b4PLР8S,#!!?BmKSm>H@KWhq2#"&547!5654&#"#"&5467&#".546326323546"!54.2654&#"2654'#"&'$2654'"BB($/R~Q1bRbO&n^86Y;,.RZ2-!48qi>44HkwCxd6S#03  #%)94% 094F;We.Y<C>\X>D"?mV| \za\X_>m# vQ;c$wB_afJ\b4PLР8S,X7+" '3& +7?BmKSm>MOV`2#".54>32&#"3265!5>54&#"#"&5467&#"&5463263235454#"%2654'm-MV2AK3VZ'YA!(O,TI7c_)*gK$oUD@L<,,Ge_!jx`>54Fa$S 0.We5rd9R*% "Xbe;N \zOptE?k$ nHFW^]7R4WǠǗS/lLQo1IL9B2'654&#"#4&#"#"&5467&#"&5463263262654'HJtKD+hU3&2SZ8o/08X;- F56_!kZ:67AhI:bF;WeńfI~ ?^V.$9K ]z3M)\\>n"@?M{?Mf KNo>BoIOp>HVen%2#"/3254./"&'&5463232654&#"#4&#"#"&5467&#"&54632632>32#"&#"3262654'+655KP/ V!d! -33)D:B;aSX=)&n/05Z;,$Hi_ kW;7=CuPg=Z`+%:)MmFHcDmw%2#!"3!!"&5463!2654&#"#"5463232654&#"#54.#"#"&5467&#".54632632632#"&#"3262654'(7BP " |<7<7?6)<Z;":>E#A2S-,+#mY:9X=,"Db5+ 1;zTE/?>kSE|Y12&) 9(M $#D]14FeF|%#!"3!!"&5463!254+532654&+"#"&5463232654.#"#54.#"#"&5467&#".54632632>32#"&#"326322654'> @l" {<6F, 41**! 4?2,(48,&F6S-,+#mY:9X>+ Fb4+ 1mS&u8YQ,# C D32$3#^gN($>%% !S29]>D]14H>`jt%2#"&54>32&#"32654&#"&54>32654&#"#4&#"#"&5467&#"&54632632632#"&#"%32654'JY "7bAG,>1^M3(M$#S"[^IP':1,(C0H]SOA0$nUB?N9.-Id_ ky`?49T;h>Hu\M.&5(.1XdQF,2$-"!#K\{OpsF;l' rDGW]!5'ZO>d. '1IS/lLOM~+4=F74632632632!54&#"#"&5467&#"&%354#'"654&2654'Mph;85?pHM~-iD%!o/16X<,!$P[^!jEZFA.(F;WeaZZMb[{3M)Y^?m"{Sy>M>qP1]T!7?BoISm>MD6?HS\74632632632##"&547!54&#"#"&5467&#"&%354#'"654&264&'#$2654'Mph;85?pHM~ C12B!iD%!o/16X<,!$P[^!jEZFA.(|4! F;WeaZZ,3BE0/Mb[{3M)Y^?m"{Sy>M>qP1]T!7#0 ?BoISm>M6?HSdm74632632632##"&547#54&#"#"&5467&#"&%354#'"654&264&#"2654'#"&'$2654'Mph;85?pHM~(.R>?Q1iD%!o/16X<,!$P[^!jEZFA.(e!!&)94% 09F;WeaZZC@ZX>D"Mb[{3M)Y^?m"{Sy>M>qP1]T!7 *X8*" '3& +7?BoISm>M~DOXb2#"&54>32&#"32765!54&#"#"&5467&#"&546326326354'&#'"654&2654'~tpH3MD^G5I'bX3q$$h`V%oUD@L<,,Ge_!jx`>57ClF6PO(+NF?/)0.We5`%(!)(mRX \zOptE?k$ nHFW^XXEqIx491V[!7S/lLQo1IJH6@2#"&547327654&#"#"&5467&#"&5463262654'nN.L˯[WoK&n-,<7Z=,(Hdd&jW=7o!rR=Ll u@BnIJu?;JAKV#"&547#"&547327654&#"#"&5467&#"&54632632%2654'2654&#"E*8=32?UpN.L˯[WoK&n-,<7Z=,(Hdd&jW=7o!rR=Ll x0@BnIJu?;%'&6'J~BL]o#"&547#"&547327654&#"#"&5467&#"&54632632%2654'2654&#"#2654'#"&'61>U=?S:ON.L˯[WoK&n-,<7Z=,(Hdd&jW=7o!rR=Ll x?@BnIJu?; ]9)$%1,!+8L -Wak74632632'654.#"#"&5467&#"&#"&=4&#"#"&5463232654.'%2654'2654'L[:82?uD62V'\@.A/07Y9/% Gd^!kR&. K-*B-"N9"-4e@3K%6 & $;We;3"EjdDl Cp5aH 'p@2M)Z]LT@2KG=:0+AAT36K6TZAA*1)=2+5 Y>BnIQm=<+A8EOL  -_ix74632632'654.#"#"&5467&#"&#"&547&=4&#"#"&5463232654.'%2654'2654&'+'2654'L[:82?xD62V'\@.A/07Y9/% Gd^!kR&. .LT@2O' C.BB.3!K0+AAT36K6TZAA*1)=2+5 Y>BnIQm=<$! %+A8EOL -_iw74632632'654.#"#"&5467&#"&"&547&=4&#"#"&5463232654.'72654'2654'##"'2654'#"&547'2654'L[:82?uD62V'\@.A/07Y9/% Gd^!kz(GfI<8-"N9"-4e@3K%6 & &. $;We;$ 0%5,*2"EjdDl Cp5aH 'p@2M)Z]L <%3HF5E#!I0+AAT36K6TZAA*1)=2+5 @2W9>BnIQm=<:  i-# ++ (!/+A8EOFIS%4.'7#"&=4&#"#4&#"#"&5467&#"&547632632>323262654'1# ~aS;]@(-HSI5'l^86Y;,$He_!lA@Z982Ja>N2C018#9C#;W`8*:6I_U\MSED4 9K[ya\X_?m"{Q{@NgDDZ)321ZEMAmj?BmKMs>;FDS^h%4.'7"&547.=4&#"#4&#"#"&5467&#"&547632632>323262654&#"%2654'1# ~B CbC2E@(-HSI5'l^86Y;,$He_!lA@Z982Ja>N2C018#9C`4"&'A#;W`8*:6Iu@02CC2& XLMSED4 9K[ya\X_?m"{Q{@NgDDZ)321ZEMAm#  ?BmKMs>;FT`pz%4.'7#"&547.=4&#"#4&#"#"&5467&#"&547632632>323262654&'#2654'#"&'%2654'1# ~++&/Q@?Q5,3@(-HSI5'l^86Y;,$He_!lA@Z982Ja>N2C018#9Cr'T82' 0#;W`8*:6I;H`j%4&'7#".54632&#"3265#"&'54&#"#4&#"#"&547&#"&54632632>323262654'H2 CQBJ2PtA9a+SH6+]1S<'7CSB?6 5O[yPsuHyU qEGU\Z$6)S9B6-ooM5mKNr2HH"2'654&#"#54#"&54632672654'7#".54>32.#"32654'#"&=4'&#"#4&#"#"&5467&#"&54632632>32$2654'%    #6Dp B< 1L|P*bT0IDyC'[,?="5/v/Q?c&&6DSF8'lRGAK;,-Ic_!jx`>4:Bj5S.56 71\0W`' , :  ' eN<l23=ifH,9(#4 B  )"t(g?QX0>7 9K[yMvyD>o! mIGV^Z(2*V<<,[S/mKPp+F T_i2!535464.'7#"&=4&#"#4&#"#"&5467&#"&547632632>32326%"!54.2654'S~ؒv1# ~aS;]@(-HSI5'l^86Y;,$He_!lA@Z982Ja>N2C018#9Ch7X#//>#;W`8om"[c*:6I_U\MSED4 9K[ya\X_?m"{Q{@NgDDZ)321ZEMAmRLι2J&?BmKMs>;FD_jt~2##"&547!535464.'7#"&=4&#"#4&#"#"&5467&#"&547632632>32326%"!54.2654'#%2654'S~D11Cv1# ~aS;]@(-HSI5'l^86Y;,$He_!lA@Z982Ja>N2C018#9Ch7X#//3#//H#;W`8om*2CD1)"[c*:6I_U\MSED4 9K[ya\X_?m"{Q{@NgDDZ)321ZEMAmRLι2J&#1 1?BmKMs>;F_jv2##"&547!535464.'7#"&=4&#"#4&#"#"&5467&#"&547632632>32326%"!54.2654&#"'327654'#"&'%2654'S~-Q@?Q0v1# ~aS;]@(-HSI5'l^86Y;,$He_!lA@Z982Ja>N2C018#9Ch7X#// ! >:(,4&1#;W`8om#A@ZX>C%"[c*:6I_U\MSED4 9K[ya\X_?m"{Q{@NgDDZ)321ZEMAmRLι2J&  +7'" '3%?BmKMs>;F'qz2##".54>32&#"3265!535464.'7#"&=4&#"#4&#"#"&5467&#"&547632632>32326%"!54&2654'&E@&xDK2V_+^G5H'd^/qPv1# ~aS;]@(-HSI5'l^86Y;,$He_!lA@Z982Ja>N2C018#9Ch7XU"#;W`8/Z?h & d\"[c*:6I_U\MSED4 9K[ya\X_?m"{Q{@NgDDZ)321ZEMAmRLιaR?BmKMs>;FImw%4.'7#"&=4&#"#4&#"#"&5467&#"&547632632>323262'654&#"#54&#"&546326%2654'1# ~aS;]@(-HSI5'l^86Y;,$He_!lA@Z982Ja>N2C018#9CU7G3,>-) 9'(1KVDB9$#I#;W`8*:6I_U\MSED4 9K[ya\X_?m"{Q{@NgDDZ)321ZEMAmZ@3N(\0@ѵ%"B/[%0f:a10K?BmKMs>;FIoy%4.'7#"&=4&#"#4&#"#"&5467&#"&547632632>323262#"&547&#"#54&#".5463262654&'2654'1# ~aS;]@(-HSI5'l^86Y;,$He_!lA@Z982Ja>N2C018#9CuJS>$(8D,9")2M3%C?6$.V-#BA#;W`8*:6I_U\MSED4 9K[ya\X_?m"{Q{@NgDDZ)321ZEMAmnE?=A9P8 Ѵ(!F1X"V%:a0/#(G6C((?BmKMs>;FXI%4.'7#"&=4&#"#4&#"#"&5467&#"&547632632>323264632632#"'732654'#"&5467&#"#54&#"&!264'2654'1# ~aS;]@(-HSI5'l^86Y;,$He_!lA@Z982Ja>N2C018#9CO45&*=&E=8\N'% ?K< =$%3;.:1:""9",Zx"%3!n#;W`8*:6I_U\MSED4 9K[ya\X_?m"{Q{@NgDDZ)321ZEMAmDW0.)"T1Elg;R "FA8/.H, ˵(!@7!G,)Z1H$O?BmKMs>;F T`hr4>32!4.'7#"&=4&#"#4&#"#"&5467&#"&547632632>3232654&'74&#"62654'6&1# ~aS;]@(-HSI5'l^86Y;,$He_!lA@Z982Ja>N2C018#9C'5*4=Am0#;W`8$07 x"*:6I_U\MSED4 9K[ya\X_?m"{Q{@NgDDZ)321ZEMAm@gDE.:4TN?BmKMs>;F I]iq~%4.'7#"&=4&#"#4&#"#"&5467&#"&547632632>323264>32##"&47#754&'74&#"62654&'#2654'1# ~aS;]@(-HSI5'l^86Y;,$He_!lA@Z982Ja>N2C018#9C;FI^ow%4.'7#"&=4&#"#4&#"#"&5467&#"&547632632>323264>32##"&547#754.'&'74&#"62654&+"2654'#"&5472654'1# ~aS;]@(-HSI5'l^86Y;,$He_!lA@Z982Ja>N2C018#9C;/*3I23I2b '*=Am $6(+28#;W`8*:6I_U\MSED4 9K[ya\X_?m"{Q{@NgDDZ)321ZEMAm.9<x$<5FH3=#g&3 .. TNP-#,*  (#-?BmKMs>;F,Ilw%4.'7#"&=4&#"#4&#"#"&5467&#"&547632632>32326"3276=#547632#"&4632.754'&#7"654&%2654'1# ~aS;]@(-HSI5'l^86Y;,$He_!lA@Z982Ja>N2C018#9Co6O3/&8\)UQ.8 .O:,<4$uL#;W`8*:6I_U\MSED4 9K[ya\X_?m"{Q{@NgDDZ)321ZEMAmE]&G((<  ^bC('"+<;QF]h#".5473267#"&=4&#"#4&#"#"&5467&#"&54632632>323254'2>54'~59sԅR_P323254'72654&"%2>54'(6B/1?ԅR_P323254'72654&#"2654'#"&'2>54'0=V=54#"2654'&#"T^l!"4-G T%@BϘ!##sc,1!"C1* j6M(bǙΜ'"%Y" ,>2##"&547!3354>54#"2654&#"2654'#"&'T^l)-T>;T/)T%@BϘ" $+84&#.9sc&@@YRCD&j6M(bǙΊW:'" )1+)8M 4=2!335462'654&#"#54&#"&546326"!54& RqTv=A -%?-)"8&)0 UF?9$%9X$\omj\b(`:/>)[.Bѵ"%A0 '$ /g=^10SKι]VM 3<G2!335462#"&547&#"#54&#".546326"!54&2654&' RqTvMQ9($=D-8")2!+4%E=4'.$9X$\#B(omj\b(nE;A<>P8 Ѵ'"F1GT'>]0/SKι]VX$'G6C('MX ENW2!335464632632#"'732654'#"&5467&#"#54&#"&"!54&264' RqTvO45&*=&E=8\N'% =L; <$%3<,"%3!omj\bDW0.)"R3Dmf32!"!54&54'&'74&#"6 RqTv32##"&547#"!54&54'&'74&#"62654&'# RqTvJ^2!335464>32#"&547#"!54&54'&'74&#"62654&+"2654'#"&547 RqTv3HF5=#SKι]VQg@$% -:= #TPk-# ++ )#-M, /8BK2!33546"32>=#547632#"&54632."!54&54&#7"654& RqTv5N"+/'7BV.PQ.F.:9X$\R20,R)tomj\b%\& MJ  SKι]VTbR@"+EF5?tS[$M=4>%#"&547&/32654&+532654&#"&547632264&"!B12B-83==,*;7<4C43(ED\P^LPk$#2$#6#1CD0% 7.!9,.!378pJe pNCCO1?K;"4!!#M2?P%"&547&/32654&+532654&#"&5476322654&+2654'#"&'PJLQ~Q3 -83==,*;7<4C43(ED\P^ &*84%!/9KH*!X?\X>F(7.!9,.!378pJe pNCCO1?X:(" '3%+7MF;%#"&54632&#"32654&+532654&#"&54>32{A:.=99k@M( 8[@!>ZHB,,4@9?I]( 1R4c[:W1-G* - & $HD6S4F+%=xfLc oO"DI6#Z7.MHU@c%#".54>32.#"32654&+532654.#"&546322'654&#"#4654#"&546326AX_`>B**ABq@%U)4X:;h~aQ664X4=!]l#0!|$IK/T"   ZKOP 1!"4 C  ,'( kPX4;5%/{cLb rL}<)8F& D +  # M@=%#"/32654&+532654&+532654&#"&54>32));E&I-%L*>8>44<:7;8855@,C32',HI&Dd+)..& 3'1?" !-"61.1$.78rAn xFKn9E76 D%!?MDO%"&547&/32654&+532654&+532654&#"&54>322654&#"))/1BdA2%L*>8>44<:7;8855@,C32',HI&Dd+)..&d1$#! 31"?0CD/)?" !-"61.1$.78rAn xFKn9E76 D%!?###MEEP`%#"&547&/32654&+532654&+532654&#"&54>322654&#"2654'#"&'))=AR?@Q3%L*>8>44<:7;8855@,C32',HI&Dd+)..&.!T84% 0 39%O>]X>D) ?" !-"61.1$.78rAn xFKn9E76 D%!?w9)" (2& ,JB2#"&54632&#"2>54#53254&#"53254&"&546%;eA'Q`.IJ&A|>?E%$8pKJ@53KM :X?!'pB1F$ &dB': -#$!"4(N&W4""P$**FH'>q uJxMKn%#"&54>32.#"32654&+53254.'&+5254&#"&54>322'654#"#4654#"&546326"8P]z:f"62Y2 D )FH+UjgG03#8J&*>"' .N28r  3(figA6#4 B !*(,'jKEH*W "P)%(CJ*An zE$EI6#?4F2" %"/  ! HM#"'#"&54>54+532654&#"&4>32#"32>5332654&'+< vLY:s@5N090S++(2&=e(,GJ%7654++532654&#"&4>32"32>53327654&'264&+"+< G'B30CI1s@5N*426 ++(2&?21(,GJ%7654++532654&#"&4>32"32>53327654&'2654&#"2654'#"&'+< \ZQ~Q0=&s@5N*426 ++(2&?21(,GJ%C(3!-(("" !,(!(89pJe vn:=30 %(" (B88/.U@i X:(" '3%(:Hs#"&5432&#"3267#"'#"&54>767654+532654&#"&54>3232>5332654&'!81  &$*.G^@3Duo9]Y:}35N+ S++)2&@b(*EL'32.#"3265#"'#"&54672654#532654&#"&54632#327653327654'2'654&#"#54#"&546326RG2KPIH00IDyC'Y,1ff1S0X;z51R01K3+(3%HZ(}e8X '025NM6 S6-C%&x%   #7lsV71#4 B )T)",L(&%+& #,'!(`Je vIv:6+'.!@"B1?66F3' ,:  & HOs#"'#"&54>54.+532654&#"&4>32"32>5332654&'2'654&#"#54&#"&546326+< vLY:s@5N090++(2&=e(,GJ%]10HNu#"'#"&54>54+532654&#"&4>32"32>5332654&'2"&547&#"#54&#".5463262654&'+< vLY:s@5N090S++(2&?21(,GJ%P8 Ѵ'"G0'3 V%>]0/$'$F6C)&HXN#"'#"&54>54&+532654&#"&4>32"32>5332654&'4632632#"'732654'#"&5467&#"#54&#".264'+< vLY:s@5N090*)++(2&=e(,GJ%54&+532654&#"&4>32"32>5332654&'4>32!754&#74#"6+< vLY:s@5N090&-++(2&=e(,GJ%54+532654&#"&4>32"32>5332654&'4>32##"&547#754&'74&#"62654&'#+< vLY:s@5N090S++(2&=e(,GJ%54&+532654&#"&4>32"32>5332654&'4>32#"&547#754&#74&#"62654&+"2654'#"&547+< vLY:s@5N090',++(2&=e(,GJ%3HF5=#gN= -!L8#TPP-# ++ (#-H,Mo|#"'#"&54>54+532654&#"&4>32"32>5332654&'"32>5#54632#"&54632.754&#7"654&+< vLY:s@5N090S++(2&=e(,GJ%"4@tS[$JD ^! 473267#"'#"&5467654+532654&#"&54>3232>5332>54&'?:2VP{-}=y:\/JZ+ +"5/D#)2^?0YB30I_*,S8.%7 0,(Dx}iq\Q= JV(0 -6#%#!.IG!XW fY.XS234A!.$!& &B0@#77;gJ"mw#"&547# 473267#"'#"&5467654+532654&#"&54>3232>5332>54&'7264&"*8B.0A:{;VP{-}=y:\/JZ+ +"5/D#)2^?0YB30I_*,S8.%7 0,?:''4)&J@+.BA/}iq\Q= JV(0 -6#%#!.IG!XW fY.XS234A!.$!& &B0@#77;g!(D%8&''J!kv#"&547# 473267#"'#"&5467654+532654&#"&54>3232>5332>54&'72654&#"2654'#"&'3BT=@SLnVP{-}=y:\/JZ+ +"5/D#)2^?0YB30I_*,S8.%7 0,?:. D+82#!19\ N6?SV54&+532654&#"&547632/9tT$R{1F$F555,D:@Uc,(*>=yR344 V;fs̩}m,-7T/C)'?VlC EysKL-,:(MJ@J%#"&547#"&54732>54&+532654&#"&547632264&#"/9N"+B/.BT$R{1F$F555,D:@Uc,(*>=yR344D'$%% V;m: :%0A@0!̩}m,-7T/C)'?VlC EysKL-,:(M%8%%6'JR>K]#"&547.54732>54&+532654&#"&5476322654&'2654'#"&'2%/R?>UT$R{1F$F555,D:@Uc,(*>=yR344'/9 &+82$!09F-=VV=.*˥}m,-7T/C)'?VlC EysKL-,:(M V;q Z9)$ %1,! ):MD0:%"&547&'#"'&54673265332654&'72654&".AdBJ26QK9:;O#,.K/*;S9#1U/@=C4"#2$& 7,1DE0 BLBBc;' p:_R3%9=5[\1l !zHu#""M0<M%"&547&'#"'&54673265332654&'72654&#"2654'#"&')2Q~Q08&6QK9:;O#,.K/*;S9#1U/@=C&*84% 09 C/?\X>E&3LBBc;' p:_R3%9=5[\1l !zH!X:(" '3&+7JE%4&'7#"&54>32&#"32>5#"'#"&54>73265332672DB6]k>M{+E;a<6QjI,*MJ-7NW77OJv =,".0)+#8S*(3];h2udQ&3"%1aC:LL~g7C>n>2I%)%D4>cMIm#".54632.#"326767#"'#"&54673265332>54&'2'654&#"#54&#"&546326`-C!JsGE.]yC'X.@=59bn$5 _@U;7PUiK?#--C7(=S+1,@=2n&  # RVe3pr07FB  )( G9S:JLLWMz l>Pa2&9+G>P)Ab) ,:  ' M'O#"'#"'&54673265332654&'2'654&#"#54&#"&546326`=CuIV:6QK9:;O#,.K/*;S9#1U/@=A -%?-)"8&)0 UF?9$%!zHpyLLBBc;' p:_R3%9=5[\1l C`:/>)[.Bѵ"%A0 '$ /g=^10M'NY#"'#"'&54673265332654&'2#"&547&#"#54&#".5463262654&'`=CuIV:6QK9:;O#,.K/*;S9#1U/@MQ9($=D-8")2!+4%E=4'.l#B(!zHpyLLBBc;' p:_R3%9=5[\1l CnE;A<>P8 Ѵ'"F1GT'>]0/$'G6C('MX'`i#"'#"'&54673265332654&'4632632#"'732654'#"&5467&#"#54&#"&!264'`=CuIV:6QK9:;O#,.K/*;S9#1U/@eO45&*=&E=8\N'% =L; <$%3<,F#"'#"'&54673265332654&'4>32!754'&'74&#"6`=CuIV:6QK9:;O#,.K/*;S9#1U/@32##"&547#754&'74&#"62654&'#`=CuIV:6QK9:;O#,.K/*;S9#1U/@32##"&547#754&'74&#"62654&#"2654'#"&547`=CuIV:6QK9:;O#,.K/*;S9#1U/@=#547632#"&54632.754&#7"654&`=CuIV:6QK9:;O#,.K/*;S9#1U/@ 5N"+/'7BV.PQ.F.O20,R)t!zHpyLLBBc;' p:_R3%9=5[\1l %\& MJ ^bR@"+EF5?tS[$FHp:%2654'&'7#"&5473267#"'#".546732653AO6|/Kkm>K"ErZw1&DY13S>['MC,gE<":R22`I=98mXS5нh[r_O=GLJJf6H@Jj'&D@2FpBM#"&547#"&5473267#"'#".54673265332654'&'72654&#"*8@00BRcK"ErZw1&DY13S>['MC,gE<":R2 AO6|8'(#Q@VFB/нh[r_O=GLJJf6H@Jj'&D@2`I=98m'')F~pCUg#"&547#"&5473267#"'#".54673265332654'&'72654&#"#"2654'#"&'2AU=>T9CK"ErZw1&DY13S>['MC,gE<":R2 AO6|  &*92#39` O5>UW<# нh[r_O=GLJJf6H@Jj'&D@2`I=98m Z:(! %1)$+8J%'22"&5467&#"#4&#".54763262654&'8h\m[=-0*IS5!@L=6>G65XT7H!7,(g?ŸpaZZ^>o#'-=4kL>e yI^EEIIs9<1o"Ti==JbAL74632632#"'732654&'#"&5467.#"#4&#".2654'JxMS8>^)9:\UGFs=5#,^v4-[74P]EJ,4ES5!:S7.): ; 4:P5iIG1$MhQQ*^;T +=jbRJLf!%0,=4gO=N?D3@FH(M878M=2#".54732&'#"32>54&#"#4&#".546326#Cc/K 9V2(YJQK&5AqT,Pp0\R%2S6!7U?6?GwNQ9;ZPk!+)D)$%]Nn+"=4fT>e!wHgLHO$Cf74632632#".54632.#"327654&'&#"#4&#".2'654&#"#54#"&546326OmZV:DW- ff@H0]wE'X.1f7>NO+,%5&IR4/'9 0#9F$  #bLJ8HF;WffJJEEmKEmUY}a\Y^@m!+'=3dS>g yZ?BlLRn=FeLV2#!"3!!"&5463!2>54&#"#"&5467&#"#54&#".5463263262654'Fg4lZ@8291K0E#bXmZ::V<,/.FS5!/T@6=IpJS7CW336N$:Wg9-HI&[?6!';$:;Q~ MgMQNL7Z""2+LJ9[iDYh=;39]=C]/7FeZd#!"3!!"&5463!2654&+532654&#"#"&5467&#"#54&#".546326326322654'!=FHBF82:0G8)Tn!mZ::V<,/.FS5!/T9=2@pJS7CW333G:Y3 }$:Wg93%*@,H?6!&<3 0,$?> MgMQNL7Z""2+LJ5^ID#Yh=;($39]=C]/7HQZ2#"&54>32&#"32654&#"#"&5467&#"#4&#".54763263262654'Tx7X$Bc9SYZ#YK+X5IV)ym`%n^86X;-4/*S4!6X?7>H;:NR9:Y*C4oF;WfZPo!+) % q Y}a\Y^@m! &=3dS>g yKdBBJHu?BlLRn=H&Tv2#".54632.#"32654.#"#"&5467&#"#4&#".546326322'654&#"#54&"&54632'2654'ʌnA!AK3~^yC(Y-1333D"3^;$n?*EI;-3/*S'.AM@6=IjYT7:Y+BC,% "M2,Wf2Cl}A 2!7FB *(2rpJ Z|;?'pG@m! &+EtCBcwNYJH&   :   & R/lLPp0IJC U%2654'%4632632632#".5473 4.#"#"&5467&#"#4&#".$:Vh:jYQ;kVybc7Z POm+]<*lOEGI<-,0,R(.3Z@5kj$:Vh:<&&$%8>,+E@07?]Uznai[U*,:lLZ|MpnI@n  (,DbUAdyMZJJl=DnJTl9@&$&%JT^m~"&547#".5473 4.#"#"&5467&#"#4&#".54632632632%2654'2654&#"#2654'#"&'43ATzVqbc7Z POm+]<*lOEGI<-,0,R(.3Z@5kj$:Vh:  R:2$!0J N7=TU< "?]Uznai[U*,:lLZ|MpnI@n  (,DbUAdyMZJJl!=DnJTl9@ Z9)$ &0,!)H4=2!5>54.#"#4&#".5476326323546"!54& "BB(O-0 6%'2S4!6X?7>H;:NR99NSj[xd6S"`.Y<,{82/,$=3dS>g yKdBBJJ[tP\b4PLРicHB?HR2##"&547!5>54.#"#4&#".5476326323546"!54&264&#" "BB(D02B -0 6%'2S4!6X?7>H;:NR99NSj[xd6S"`0##".Y<.3AD0.,{82/,$=3dS>g yKdBBJJ[tP\b4PLРic#2#$H?HTe2##"&547!5>54.#"#4&#".5476326323546"!54&2654&#"2654'#"&' "BB(.Q@?Q10-0 6%'2S4!6X?7>H;:NR99NSj[xd6S"`! $(:4% 07.YE#,{82/,$=3dS>g yKdBBJJ[tP\b4PLРic X8*" %5& ';HHO2#".4>32&#"325!5>54&#"#4&#"&547632632354654#"$_kF=AK21IBRG"2D'VH7}':G;3+S+$?Uv46Xg%)^Tk]n旋sc7,*"%i6Ik1-CjGqQk|ZAHHH^kPWebǗHKnw462#"&54632.#"32765!5>54.#"#4&#".54763263232'654&#"#54&#"&546326"!54&Exɉ]{~^yC' [/8_10H;:NR99NSj[q%   "~6S"`\bWH/7FB $,')NMs,{82/,$=3dS>g yKdBBJJ[tP&  ::   & PLРicH<2#"/32654&+532654&#"#4&#".54>3260CeCI"74',&76<%(60A)-BS4 @O=9*: (\@P::H:7$$G%7 :,("8,*+%*$;4jK?g?D28gJJHH;AL2"&547/32654&+532654&#"#4&#".54>3262654&#"0CeCI:8D`C,&76<%(60A)-BS4 @O=9*: (\@P::%###H:7$$GA&!C2BB2) :,("8,*+%*$;4jK?g?D28gJJH""!4"HBM]2"&547"&/32654&+532654&#"#4&#".54>3262654&#"2654'#"&'0CeCIBPR~Q4,&76<%(60A)-BS4 @O=9*: (\@P::e/!T74%2H:7$$% Z?]X?G':,("8,*+%*$;4jK?g?D28gJJHw8) '3!" (HM%#"&54>32&#"32654&+532654.#"#4&#".54>32>326,9EN-H?p<&2S/LD0r>J""B;*)/HS3!@O?7*: ']@Q9\0Ml'C5, )  fb2F4B( . +%=3jL@f?D27gKJ$$NALHDD%#".546732654+53254&#"#4&#".54632632"*:F{yU5,0&Z؝11p5E.DR4 @O8.>HkbZ(1j8M$/I1jp6UZIt9`~@Ur6k(=*$<4lK?KzL]JF0.0IHP^#"&547#".546732654+53254&#"#4&#".546326322654&+A 'A.0A J^F{yU5,0&Z؝11p5E.DR4 @O8.>HkbZ(1j8M$/%*:'' $x 9%.BA/ 6UZIt9`~@Ur6k(=*$<4lK?KzL]JF0.0II1b'&$'HfO\m"&547#".546732654+53254&#"#4&#".546326322654&#"2654'"&'0'/UxW3=F{yU5,0&Z؝11p5E.DR4 @O8.>HkbZ(1j8M$/%*:.  D):2H-:F.?ST>+'6UZIt9`~@Ur6k(=*$<4lK?KzL]JF0.0II1n%x9($ %1.*9HG#"'#"&=4'&#"#4&#".54>326323265332654&'h*: iYS:/Z>[ /(I=9@E3^LJNEU]+,3!=3lK=f?D27gKJH_OiM:6B<5gJ@iHDQ\%#"&547&'#"&=4'&#"#4&#".54>326323265332654&'72654&#"+D11CG2/Z>[ /(I=9*: 3###% <$2CD1  @JNEU]+,3!=3lK=f?D27gKJH_OiM:6B<5gJ@i@E3q#"#HQ]n#"&547&'#"&=4'&#"#4&#".54>326323265332654&'2654&#"2654'#"&'h*: 2)YQA?P06&/Z>[ /(I=9$,73%!/9@E3Ah`AZW?D'2JNEU]+,3!=3lK=f?D27gKJH_OiM:6B<5gJ@i X9)" (2% )9HX%4&'7#".4>32&#"3265#"'#"&'&54#"#4&#".54763263232653326F0Y`bYoM?]"^V*4ec*1U>St*6S+$?Uv=I46Xg%)bFY,<'7R &"H\\td9,&(0PZU8-N2%M8W:%$1N,5E.!vbMC5)J<]8#!-M"!0$%LQzT7 (F+@;Lkw#"&547"#".5473267#"'#"&=4'&#"#4&#"&54632632326533254.'72654&#"+6970A3AXtd9,&(0PZU1-N2%M8W'$1N,5E.!vbMC5)J<]8#!-M"!0$"9>&! '%K?,$LB. (F+@;%L&-%%Lju#"&547#".54732>7#"'#"&=4'&#"#4&#"&54632632326533254.'72654&#"2654'#"&'s/@V<=Uktd9,&(0PZUOv_-N2%M8W'$1N,5E.!vbMC5)J<]8#!-M"!0$"9>6&+82#!19W N4=UV<$ (F+@;%L 0Z9)" %1-! (:H42'654&#"#4&#"#4&#".546326326?TkNG'jH?&3SH-&4S4 AN@6*; g]S95][38ˆ_K}=Kh-#;:)";4iK@g?D4ZOMHHHF6A74632632632"&5467&#"#4&#"#4&#".2654&'HmVS:6\[3FX_HI]m[=,/*ISI,'3S3!@O>6*; \"6+(h?aNNJJNMoc_Z_>o#'-;;)#=3jL?g?E37>1n"Pl==HaKU74632632632#"'7327654&'#"&5467&#"#4&#"#4&#".3254'HiZS:6\[3CU6*;  1W7S^NNJJC0QhNO*ML]3[.BOuLNHeE.$;;)#=3jL?g?E495wH> JHN2#".54>32&#"32>54.#"#4&#"#4&#".5476326326?XmKeAJ10IBe<* S,TZ&Kg8 8&*4S?3*3S+$?UB2?I46Xg'0Wn+(r]p: 0b}X'JH,-#3B(#-CjG9j *zEZAHLLHHFFB2!".547327654.#"#4&#"#4.#".54632632^lɖN,*,E{vuE2#;SA1$9S &CQC1:MjXg'0Vn,]n0fxa_USnX&RR(L=%+3B#(/,lE=h'yIYLLHFO[#"&547#".547327654.#"#4&#"#4.#".54632632622654&#"%+9>2.CyɖN,*,E{vuE2#;SA1$9S &CQC1:MjXg'0Vn,(l(%$&:@+*F@020fxa_USnX&RR(L=%+3B#(/,lE=h'yIYLLHH]%'*$FNYj"&547#".547327654.#"#4&#"#4.#".54632632622654&#"2654'"&'5DUzUmɖN,*,E{vuE2#;SA1$9S &CQC1:MjXg'0Vn,(l 4&):3D0:K Q7g?E4]TV^.1L4d-"6HB2&3;F2##"&547!4&#".54632654'&#4&#"6264&#"OkrD02B3!@N<8*: lYU6EP"0F62W)#ih%%"$Ē{.2BD0.=3kK>g?E4]TV^.1L4d-"6#2#$"H6&3;FV2##"&547#4&#".54632654'&#4&#"62654&"2654'#"&'Okr$.R?@Q23!@N<8*: lYU6EP"0F62W)#iA!&"P94% 0Ē{!C?[X>E#=3kK>g?E4]TV^.1L4d-"6X8*# '3& +M04?G746323632#".54>32&#"326=!4&#".%354#4&#"6MmUl!1vAN54OGXJ 6H&ea*l[_,#?Uu:MU:%'FH*"i]RRf!!Tj0@jGmU(y'GG&$1<%3JF09A74>323632# 467!26=!4.#"&%354#4&#"6,M0m"4r44>:C'/*Z՜c &CQC1TIUFG+"i&ME+RRHIx=EFj:av5G/,lE=e `BoN0=$4J:GOZ74>323632#"&547# 467!26=!4.#"&%354'&'&#4&#"62654&#",M0m"4r44A%B.0A?L'/*Z՜c &CQC1TIU,;FG+"i4:%(+&ME+RRHIxT* 7"0BB/ Fj:av5G/,lE=e `BoNZA +0=$44$#! Ja9BJUg74>323632"&547# 467!26=!4.#"&%354#4&#"62654&"2654'#"&',M0m"4r44N",TzV7'/*Z՜c &CQC1TIUFG+"i',%+82$!0:&ME+RRHIxZ,E,=TU<1%Fj:av5G/,lE=e `BoN0=$4HZ9)$ %1-!)9HFr/2#"'&54732654&#"#4&#"&546326YrorB$:ŠXD'1T3!3\vvLS99£nloxnYgW,$?1cN2BeJJHr;I2#"&547#"'&54732654&#"#4&#"&546326264&#"Yrb)7A/0BQdorB$:ŠXD'1T3!3\vvLS99'' %£na>*2@B/loxnYgW,$?1cN2BeJJ@%8& 'H|r:IZ2"&547#"'&54732654&#"#4&#"&5463262654&#"2654'#"&'Yrt1@VyU>=orB$:ŠXD'1T3!3\vvLS99e   R92#3£n] N4?TV=# loxnYgW,$?1cN2BeJJH  Z:(% %1)$+M[8P\#"&547&#"#4&#".54632632654&#"'>322'654&#".54672>54'-0F19DsG#:S('BRu6PjXg&0V@.4 3!J.27Y8R8-B;'+:H (4\( ) 8)>%#x9.YEY8n#)(GlDoT+vEYJJ"(&$-51)LJ5Q M56:3VN1KQJ4:h;"n7$BM[8Zfq#"&547&#"#4&#".54632632654&#"'>322"&547'654&#".546322>54'264&#"-0F19DsG#:S('BRu6PjXg&0V@.4 3!J.27*,;2B;'+:H (4\:8R=7 ) 8)>%d!!#x9.YEY8n#)(GlDoT+vEYJJ"(&$-51)<+,;;,9 M56:3VN1KQLJR0b4:h;"n7$B !0"" M[8Zfq#"&547&#"#4&#".54632632654&#"'>322"&547'654&#".546322>54'2654&#"2654'#"&547'-0F19DsG#:S('BRu6PjXg&0V@.4 3!J.27?7LMlL.B;'(='! )3]98RL ) 8)>%0( 1+;. !,:#x9.YEY8n#)(GlDoT+vEYJJ"(&$-51).K77JK6='O5685)=N2LOLJ84:h;"n7$BJs8-" !+- +,9JA%/74632!3##"&47!5654&#"&264&#"JhGJ12&8T D02B H70,E4E[##$$PW21A7,H-3AD` .L,8=9A$4#2#$0$J&2C74632!3##"&547!5654&#"&2654&#"2654'#"&'JhGJ12&8T -Q@?Q0H70,E4E0  P:4% 0PW21A7,H#A@ZX>C% .L,8=9A$4X8*" %5& &J 32!3#"'&54>2&#"3265!5>54&#"&546La&>Na<=!c>,D-8<9B$4WPWJ 5X74632!3#"&54632.#"326=!5654&#"&2'654&#"#54&#"&546326JhGJ12&8TffN}^zC' Z07_YChQH70,E4E%   $PW21A7,4RSA67FB $,'$.f .L,8=9A$4%  ::  & J @74632!3!5654&#"&4632&#";2#"'732654&+"&JhGJ12&8TH70,E4EH6U.#D%4?52,5V,&K#0 @'0PW21A7,H .L,8=9A$4.30$1$//&.J HR74632!3!5654&#"&4632&#";2#"&547&'732654&+"&2654&"JhGJ12&8TH70,E4EH6U.#D%4?5298B/.A,3&K#0 @'0&%7$$PW21A7,H .L,8=9A$4.30$1:?0@?16 &.$&&4&J HUj74632!3!5654&#"&2#"&547&'732654&+"&54632&#"32654'#"'#2654'#"&5465JhGJ12&8TH70,E4ES52;=H43I8,&K#0 @'0H6U.#D%4 %  0%4*+2PW21A7,H .L,8=9A$41= D3HG4?" &.#.30$i-# +, '#-JEO74632!3!5654&#"&2'654&#"#"&5467&#"&5463262654'JhGJ12&8TH70,E4E&N]*'$:D<F<'$=(-C@HT<'$!2'8A%PW21A7,H .L,8=9A$41132&#"32>54&#"#"&5467&#"&5463262654'JhGJ12&8TH70,E4EU\{p2BB1>7$7#./";S"F= G41+3(3{Sa  B[4Jh=N1MM-'JK5R* 4^FW2!F15G3J]74632!3!5654&#"&4632632#"&54632.#"32>54.#"#"&547&#".2'654&#"#54&#"&546326'2654'JhGJ12&8TH70,E4EX@'"4Pem8YS@P, ;":.5N' ;(I7.+2D 5;> '     9!8D#PW21A7,H .L,8=9A$4?^du-"%-+ /KJ%BH/=P4JM-P8M5S) M  (   7J/6H!0J?74632!3!5654&#"&2'654&#"#54&#"&546326JhGJ12&8TH70,E4EQ7G3,>-) 9'(1KUG>9$#PW21A7,H .L,8=9A$4@Z@3N(\0@ѵ%"B/[%/g?\10JAK74632!3!5654&#"&2#"&547&#"#54&#"&5463262654&'JhGJ12&8TH70,E4E14J>$(8D,9")2MXC?6$.V-#BPW21A7,H .L,8=9A$4@54&#"&546La&7T\.#<+#.H-3@B!'62,E5Dh)cA7,: 2$(#+#979C+% B$+9=9B#3YPWJ>?J74632!3##"&547#5654&#"&54632!5!5654&#"&2654&#"JhGJ12&8T*B.1@*0#+$.G-2A BH70,E4E\$%%&PW21A7,D3.BA/3 2'($*";69B+% .L,8=9A$4P&%&5%J?K]74632!3##"&547#5654&#"&54632!5!5654&#"&2654&#"2654'#"&547JhGJ12&8T(3I23I30#+$.G-2A BH70,E4ED H6*+PW21A7,D$>5FF5>$ 2'($*";69B+% .L,8=9A$4xP-#++ (!JZ K74632!3#"&54632&#"3265!5654&#"&5463235!5654&#"&JhGJ12&8TJR/bK>2,+!+/"47/#-$.D02A9H70,E4EPW21A7,.:R 6D4)($*";4;?.$ .L,8=9A$4J :C74632!3!5654&#"&2!5654&#"&546323546"354&JhGKb&8TH70,E4E96S4.$-#.F./DmOD"8>PWd@7,H .L,8=9A$4>IF 2#(#-";5994$;C&23gE>JENX74632!3!5654&#"&2##"&547!5654&#"&546323546"354&264&"JhGKb&8TH70,E4E96S)B.1@*.$-#.F./DmOD"8>$$7%&PWd@7,H .L,8=9A$4>IF3.BA/3 2#(#-";5994$;C&23gE>x&4&&$JENYl74632!3!5654&#"&2##"&547!5654&#"&546323546"354&2654'#2654'"&547JhGKb&8TH70,E4E96S&4I23I3.$-#.F./DmOD"8>'$%5*<+2PWd@7,H .L,8=9A$4>IF=5FH3> 2#(#-";5994$;C&23gE> P-# +*  (#-HD22!3!".54732>=!5654&#"&546Df$9P=[P5vw-CP2#QG=)-E4Dh*SP>%@&Zs}q`ngH -/M44<9B$2YQVH>J"&547#".54732>=!5654&#"&54632!32654&#"Q-@`A;Q<[P5vw-CP2#QG=)-E4DhFDf$9P~'$*% 5),EB/! &Zs}q`ngH -/M44<9B$2YQVSP>%@N$*#'Hb@K]#"&547#".54732>=!5654&#"&54632!32654&#"2654'#"&'D! V=%@U1Z9($ %1+!*9JEO74632!3!5654&#"&#"&=4&#"#"&5463232654.'2654'JhGJ12&8TH70,E4El&/ J-,B,"N9".4f@3K%6 ' $DPW21A7,H .L,8=9A$4<>3LF>90,@AT27K6TZB@*1);4+5(!@9C@/JM\f74632!3!5654&#"&#"&547&=4&#"#"&5463232654.'2654&'+'2654'JhGJ12&8TH70,E4El&/ 77B.1@04,"N9".4f@3K%6 ' $#!&$DPW21A7,H .L,8=9A$4<>3U( @.BA/9!$D0,@AT27K6TZB@*1);4+5f&$$$(!@9C@/JOYcw74632!3!5654&#"&#"&5467&=4&#"#"&5463232654.'264&"'2654'2654'#"&547JhGJ12&8TH70,E4El&/ C%I23I*4,"N9".4f@3K%6 ' &$D$6+)3PW21A7,H .L,8=9A$4<>3a$:#5FF5%= F0,@AT27K6TZB@*1);4+5%(!@9C@/-# *+ (#-JL74632!3!5654&#"&4'7#"&=4&#"#54&#"&54632632326JhGJ12&8TH70,E4EQ^<7-C-%9# 7MVL28$"6-C,#)PW21A7,H .L,8=9A$4d$*y:Q>518/ѵ(!93b%.t@O0.>38.-?JTc74632!3!5654&#"&4'7#"&547&=4&#"#54&#"&546326323262654&'+JhGJ12&8TH70,E4EQ^09B.1@,7-%9# 7MVL28$"6-C,#)H$&PW21A7,H .L,8=9A$4d$*yN& @.BA/6"E18/ѵ(!93b%.t@O0.>38.-?&%$JT`t74632!3!5654&#"&4'7#"&547&=4&#"#54&#"&546326323262654'#"'2654'#"&547JhGJ12&8TH70,E4EQ^4;I23I18/ѵ(!93b%.t@O0.>38.-?  i-# ++ (#-J*c74632!3!5654&#"&2654'7#"54632&#"3265#"&'&'&#"#54&#".54632632JhGJ12&8TH70,E4EF)+DZ(N7\1F'E0RFO<70&:,/N(2D=5' 63?PW21A7,H .L,8=9A$4K)U'M*JE)3 XJ1Q/g ҵ,M*Z"P3:a0/Q,Q("=&.MJjy74632!3!5654&#"&#"&547#"&547327#"&=4&#"#54&#".5463263232654&'2654&#"JhGJ12&8TH70,E4Ej0*N ,A./A9A<9U-;0 ;#.(K).DA3# 9>1&*$)!%% %PW21A7,H .L,8=9A$4>$G/`> 3#*;<) gNB-&6!C+j95*,=<-" +FH%I=8=Q56FD.A 8#T'_3K(&5#F 4!%C  D&$# "&JD*5@2##"&547!5654&#"&546323546"!54.2654&'#Q~D11CH<+,E4EiEFg%xf6U#013#/mk*2CD1).N25=9A$4XPVVN7+\b6QKΠ8S+#! 1J)4?P2#"&547!5654&#"&546323546"!54.2654&#"2654'#"&'Q~ ,R~Q/-H<+,E4EiEFg%xf6U#01 , C*83%!0:mk$>?\W>C%.N25=9A$4XPVVN7+\b6QKΠ8S+u8)# &3%)4JMX`hq2!5654&#"&5463235462#"/32654&+"'#"&54>7632>32"!54..#"3265#32=#"Q~GH<+,E4EiEFg%x*0*#-1i,'0",#* 46U#01  #~j(>mk.N25=9A$4XPVVN7+\b1("3 # "!9]224* 5/-$QKΠ8S+#$4$0!;E/4*<8JR]dmv2!5654&#"&5463235462#"/32654&+53254+#"'#"&547634632"!54.4&#"3265#32=#"Q~GH<+,E4EiEFg%x$ #, *423+&1,E2+&386U#01$ $}j(>mk.N25=9A$4XPVVN7+\b  :JEP2!5654&#"&5463235464632&#";2#"'732654&+"&"!54.Q~GH<+,E4EiEFg%x!N0V.!E%4>62,5V,B#0 @'0E6U#01mk.N25=9A$4XPVVN7+\b4-0$1$//.$QKΠ8S+J Cb2654&#""!54.#"&547&'732654&+"&54632&#";22!5654&#"&5463235482""# 6U#/2d';,-;B%&K#0 @'0H6T0#D%4?52~GH<+,E4EiEFg%K""" QKΠ8S+M /%*>=+((&.#.30$1/mk.N25=9A$4XPVVN7+ZJP[l2!5654&#"&546323546#"&547&'732>7654&+"&54632&#";2"!54.2654&#"#2654'"&547#Q~GH<+,E4EiEFg%x)4M67J%?)$L   @(0N0W-'@%5?706U#01 *;.@-  9mk.N25=9A$4XPVVN7+\b* D-9IL64'&& 0!4-0%/'QKΠ8S+ Z;)%!+*"-*:JIT]2!5654&#"&5463235462'654&#"#"&5467&#"&546326"!54.2654'Q~GH<+,E4EiEFg%xqO\*'$9B<G<'&:(.A?GU;)""6U#01-&8Amk.N25=9A$4XPVVN7+\b,dB(K -I7Y32&#"32>54&#"#"&5467&#".546326"!54.2654'Q~GH<+,E4EiEFg%xlU\{p2BB1>7$9'';S"F> G41+3(2=?"&_;$"6U#01k!9?mk.N25=9A$4XPVVN7+\b*{Sa  B[4Jh=N1MM-'JI7R* O*GVQKΠ8S+\2!F15G3JCN2!5654&#"&5463235462'654&#"#54&#"&546326"!54.Q~GH<+,E4EiEFg%x7G4*>-) 9'(1KVDB9$#6U#01mk.N25=9A$4XPVVN7+\b(Z@2P(\0@ѵ%"B/[%0f:a10QKΠ8S+JEPZ2!5654&#"&5463235462#"&547&#"#54&#".546326"!54.2654&'Q~GH<+,E4EiEFg%xJS>$(8D,9")2M3%C?6$. 6U#01-$Bmk.N25=9A$4XPVVN7+\b(nE?=A9P8 Ѵ(!F1X"V%:a0/QKΠ8S+Z#(G6C'JXXcn2!5654&#"&5463235464632632#"'732654'#"&5467&#"#54&#"&"!54.2654'Q~GH<+,E4EiEFg%xN64&*=&E=8\N'% ?K< =$%3;.:1:""9",Z6U#01%"%3!mk.N25=9A$4XPVVN7+\bCX0.)"T1Elg;R "FA8/.H, ˵(!@7!G,QKΠ8S+Z)-*1$%#J:E2!5654&#"&546323546233!5654&#"&546"!54.Q~GH<+,E4EiEFg%xB3A;/#/$/G6U#01mk.N25=9A$4XPVVN7+\bB+$ 3(#)*";78QKΠ8S+JDOX2!5654&#"&546323546233##"&47#5654&#"&546"!54.264&"Q~GH<+,E4EiEFg%xB3A;%C..A#/#/$/G6U#017&%8#%mk.N25=9A$4XPVVN7+\bB+$ 10@@` 3(#)*";78QKΠ8S+%5&%6%JDOZm2!5654&#"&546323546233#"&547#5654&#"&546"!54.264&#"2654'#"&547Q~GH<+,E4EiEFg%xB3A;-5HgH4/#/$/G6U#01$6(+2mk.N25=9A$4XPVVN7+\bB+$ #A4GH3B" 3(#)*";78QKΠ8S+'P-#,*  '!/J)4EM2!5654&#"&5463235464>32!"!54.54.'&'74&#"6Q~GH<+,E4EiEFg%x;/h6U#01n '*<Almk.N25=9A$4XPVVN7+\bl.9<xQKΠ8S+Sg&3 .. !TNJ 2=NVb2!5654&#"&5463235464>32#"&547#"!54.54.'&'74&#"62654&'#Q~GH<+,E4EiEFg%x;/&B]A%nh6U#01n '*<Al8%mk.N25=9A$4XPVVN7+\bl.9<x`@?1/QKΠ8S+Sg&3 .. !TN%#$J3>OWcv2!5654&#"&5463235464>32#"&547#"!54.54.'&'74&#"62654&+"2654'#"&547Q~GH<+,E4EiEFg%x;/*3HgH2bh6U#01n '*<Al $6(+2mk.N25=9A$4XPVVN7+\bl.9<x$<4GH3=#QKΠ8S+Sg&3 .. !TN#P-#,*  (#-JDF=H2#".54673267!5654&#"&546323546"!54.v^r#3RNoW>|qC.6&3+;dr I;,2@4CbLK`%qK>N$ ?z^$9&%?dnJKt=4fC?\U55H0L.:C2B$1ZK\ZI=&Wh6YCΞ@C*JPCNZ#"&547# '&5467;2>75!5654&#"&54632354632"!54.2654&#"-:6/A Qxr-7&-1fhlwAI;,1A4CbLK`%pV]s>N$ ?6%&+'y 5+&IA.ZWLr>.dKHJ2&0L.:B3B$1ZJ]ZI=&Whz^EYCΞ@C*T%'! %JfOCNYj#"&547# '&5467;2>75!5654&#"&54632354632"!54.2654&"2654'#"&'%1V<=UEwr.6&3+fhmvAI;,2@4CbLK`%qU^r>N$ ? (!R:2$!0H-?SU=/#ZWKt=4fCHJ2&0L.:C2B$1ZK\ZI=&Whz^TYCΞ@C*d Y9($ %1, +JIT]2!5654&#"&546323546#"&=4&#"#"&5463232654.'"!54.2654'Q~GH<+,E4EiEFg%x&. K-*B-"N9#-3e@3K%7 & V6U#01"E%mk.N25=9A$4XPVVN7+\b,@2KG=:0+AAT36J7TZAA*1):5+5 QKΠ8S+`+A8'LOJQ\dm2!5654&#"&546323546#"&547&=4&#"#"&5463232654.'"!54.264&"'2654'Q~GH<+,E4EiEFg%x&. :5B/0?32-"N9#-3e@3K%7 & V6U#018%%8#"E%mk.N25=9A$4XPVVN7+\b,@2W(#=/AB.?!E0+AAT36J7TZAA*1):5+5 QKΠ8S+%5&&5+A8'LOJR]js2!5654&#"&546323546"&5467&=4&#"#"&5463232654.'"!54.2654'#"''2654'2654'"&547Q~GH<+,E4EiEFg%x&. ?"HgH'0-"N9#-3e@3K%7 & V6U#01# ""E%$6*<+2mk.N25=9A$4XPVVN7+\b,@2[(9!4GH3%:!C0+AAT36J7TZAA*1):5+5 QKΠ8S+  !}+A8'LO-# +*  (#-JT_2!5654&#"&546323546#"&=4&#"#54&#"&5463263232654&'"!54.Q~GH<+,E4EiEFg%x)=7/A-%9$ 7LWM17&!7+D,$(".R6U#01mk.N25=9A$4XPVVN7+\b' ,2&9R?418/ѵ]b%.tDK0.=48.->-%NQKΠ8S+J\gu2!5654&#"&546323546#"&547&=4&#"#54&#"&5463263232654&'"!54.2654&'#"'Q~GH<+,E4EiEFg%x)9/;-*=,7-%9$ 7LWM17&!7+D,$(".R6U#014"  mk.N25=9A$4XPVVN7+\b' ,2&U'8*<:,7E18/ѵ]b%.tDK0.=48.->-%NQKΠ8S+#! J]hu2!5654&#"&546323546#"&5467&=4&#"#54&#"&5463263232654&'"!54.2654'#"'2654'"&547Q~GH<+,E4EiEFg%x)6:L67K')-%9$ 7LWM17&!7+D,$(".R6U#01 ");.@-.:mk.N25=9A$4XPVVN7+\b' ,2&R($G7KL6&=;18/ѵ]b%.tDK0.=48.->-%NQKΠ8S+  #[:+% !+*" 4*;J*ju2!5654&#"&5463235462654'7#"54632&#"32>5#"=4&#"#54&#".54632632"!54.Q~GH<+,E4EiEFg%x)+DZ *E,Z2E)F2R+> *1k"#(9(3N(2D>5' 7'66U#01mk.N25=9A$4XPVVN7+\b!I+T(M <=-3 341y1:(ҵ-J-Z"O3:a0/1=!!8QKΠ8S+J8P[2!5654&#"&5463235462'654&#".546!2'654&#".546"!54.Q~GH<+,E4EiEFg%x3W8-A?#'>H $, [3W8-A?#'>H )2[N6U#01mk.N25=9A$4XPVVN7+\b(FP5Q M9276V<,*= B;'+:H (4[;8R,8R7.B;'&@ ) '[6U#012#"4"mk.N25=9A$4XPVVN7+\b$<,*<:X M56:3VN1JRLJ@LJ4R M563:!B (+"JRQKΠ8S+#$$JAZeo2!5654&#"&546323546#"&547'654&#".54632%2'654&#".546"!54.2654&#"2654'"&547Q~GH<+,E4EiEFg%x4LL67K8A?#*;G $, [:3W,3W8.A?#'>G $, [6U#01* X9.@- *mk.N25=9A$4XPVVN7+\b%JnKL6F% M9285V=.KQFP=FP4R M9276V=.KQQKΠ8S+(t<(%!+*"5*JB@JV%33##"&547#5>54.#"#4&#"632#"&547632>32264&#"%2654&#"+*HB12B/3 6%(:RG/YU +=483;AIDCi[DK)[^x$$##E#%**9l#H.1CE/.x?43+#,(6hbHU92RnOtNOP",{A"4"#2#1 !5))-(J ?K\h%33#"&547#5>54.#"#4&#"632#"&547632>322654&#"2654'#"&'%2654&#"+*H ,Q~Q0/3 6%(:RG/YU +=483;AIDCi[DK)[^O #P:4% 0#%**9l#H#A@ZX>C%x?43+#,(6hbHU92RnOtNOP",{UX8*" '3& &1 !5))-(MUa%33#".54632&#"326765!5654&#"#4&#">32#"&54632>322654&#",;'S%+$DOBN4W?J&P!m`,ABjJ=0*SH4+C' */G>6CKsk.K&Uo,''#)4f#H:L.  !, #)][iKg-!,)4+<,X79IjOxM"+0 %247J5^j%33!5>54.#"#4&#"632#"&547632>322'654&#"#".547326=46%2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^o4@*P,$#@*.;U#",&#F^#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{O=&1-%Y-B-80565?!i14/0C%,5>54.#"#4&#"632#"&547632>322+"3!!"&546;2654&#"#"&546732654&546%2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^g/<F<$H!'"&27($ >,-N-2*&6&=h#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{/9?f 2('P5+<*5!+5?D)J ?#03$) ,3E1 !5))-(JZ5z%33!5>54.#"#4&#"632#"&547632>322+"3!!"&546;2654&+532654&#"#"&5467326=476%2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^e5F)):=$Q"&$$-$&!?,-O6*%,6&#k#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{6!%- 7 2)'!"""737AB.H  <(/3!%A.F1 !5))-(J,5iu%33!5>54.#"#4&#"632#"&547632>322#"54632&#"32>54&#"#"&546732=46%2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^X@IxiU.G4+/LQ2I%2&;;,8D(6-$/(:;}#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{tPh9+FD"A`1GV>)YL$/@k:FC1 !5))-(J 5%33!5>54.#"#4&#"632#"&547632>322+"32632#"&547#"&546;2654&#"#54&#"632#"&5463262654&#"%324#"%2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^|+H@J!!% " #' _V"#;=*-'"5+ $ #J4>%X   8#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{3,$;L#!  ,&1/"#9D &#-4$$  D1 !5))-(JA5%33!5>54.#"#4&#"632#"&547632>322#!"3!!"&463!2654&'#"&547#"&54;2654&#"#54&#"632#"&54632>32+"3262654#"$324#"%2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^u84/2%i$" &)1 #&UU/0-&!6*") %J,J! :+;DR8: "  ~#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{10 '"' !  ,# V/)$34$&%+4#

R[ D1 !5))-(JN5%33!5>54.#"#4&#"632#"&547632>32232#!"3!!"&463!254춮&##"&547#"&54;2654#"#4'&#"632#"&54632>2654"'254""3267+&%2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^i(4X o W #   r)yh 2834 0# "@+@, 6..`'+m-#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{7!L-  &*  " O#V&?R 9(*''8"  !xI1 !5))-(J&5%33!5>54.#"#4&#"632#"&547632>322#"&4632&#"32>54&'#"&547#"&546;2654&#"#54&#"632#"&54632>32+"3262654#"$324#"%2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^e?Cdl$^S-H.&7N3.D#!#& YU$*BH/."&7*!* &L,K 9.6?E.* !  #%**9l#Hx?43+#,(6hbHU92RnOtNOP",{F-7\8 )+ .  /%/24* . *$&%+4#8&(A!VX D1 !5))-(J5`l%33!5>54.#"#4&#"632#"&547632>322#"/32654&+532654&#"&54>%2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^w4>.0=8% ((&##$(E2/C#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{6 (0": )$ !CN5>G73K$A1 !5))-(J 5jy%33!5>54.#"#4&#"632#"&547632>322#"&547'632654&+532654&#"&54>264&'#+2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^w4>.0.0A.0@7  +((&##$(E2/$  &@#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{6 (0/!;0@B.A  #$ !CN5>G73K$P&4" $1 !5))-(J5lz%33!5>54.#"#4&#"632#"&547632>322#"&5467'6;3654&+532654&#"&54>2654'##"'2654'#"&5472654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^w4>.0.;I23I&-((&##$(E2/$  0%5(+2S#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{6 (0/%C5FH3$;  $$ !CN5>G73K$ i-#,*  (#-1 !5))-(JP5nz%33!5>54.#"#4&#"632#"&547632>32#"&5432&#"32654&+532654&"&54>32%2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^*&/..Lq4&*B<(#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{ 9!$5 .   1+%5$-(4="7=K387";$51 !5))-(J 5[g%33!5>54.#"#4&#"632#"&547632>32#"'#"&54>7326=332654'%2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^TM183M ,% 1&:% 6J#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{.iHQ11SE1>J&=5!϶&#<;U%R1 !5))-(J 5dr~%33!5>54.#"#4&#"632#"&547632>32#"&547&'#"&54>7326=332654'2654&'+2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^T99<*,<$#51M ,% 1&:% 6J"4! d#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{.iX*@,;=*1 1SE1>J&=5!϶&#<;U%m#!1 !5))-(J 5es%33!5>54.#"#4&#"632#"&547632>32#"&5467&'#"&54>7326=332654'2654'"'"2654'"&5472654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^TA?J86L/ #51M ,% 1&:% 6J' )<.@.-;k#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{.i^)&K6LK7-: 1SE1>J&=5!϶&#<;U%# [:+" !++! 4+:#1 !5))-(J85s%33!5>54.#"#4&#"632#"&547632>32#"&5432&#"3265#"'#"&54>7326=332654'%2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^-++<1-WB& :E%>^#3;"&41M(>5 #76!?F"#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{"]O54.#"#4&#"632#"&547632>32#"&54632.#"32#"'#"&5467326=332654&'2'654&#"#54#"&5463262654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^s$2yn7XT=P, :*(< =,:$%57F2);%+(5!,-)!I    #%**9l#Hx?43+#,(6hbHU92RnOtNOP",{GU1u.!$.+&133_94P+[,H"϶1L.*B &  1 !5))-(J5^j%33!5>54.#"#4&#"632#"&547632>322'654&#"#54&#"&546326%2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^m7G(?-) 9')0 UF?9#&h#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{Z@#,()[.Bѵ%"A0 '$ /g=^10E1 !5))-(J5Zdp%33!5>54.#"#4&#"632#"&547632>322"&547&#"#54&#"&5463262654&'2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^NKR=H=D,8")2!+YC?5&.U-#Bb#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{oD@<<>P8 Ѵ(!F1G-h:a0/#(G6C("1 !5))-(JX5nw%33!5>54.#"#4&#"632#"&547632>324632632#"'732654'#"&5467&#"#54&#"&!264'2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^P35&*<'F=8\N'% ?J; <$%3<,7#5>54.#"#4&#"632#"&547632>325#%2654&#"+*H*8\7 /3 6%(:RG/YU +=483;AIDCi[DK)[^h+)#%**9l# /:-x?43+#,(6hbHU92RnOtNOP",{:91 !5))-(J| GOYe%33##"&547!5>7#5>54.#"#4&#"632#"&547632>325#2654&#"2654&#"+*HD02B8\7 /3 6%(:RG/YU +=483;AIDCi[DK)[^h+)4"$#d#%**9l# )2BE/, /:-x?43+#,(6hbHU92RnOtNOP",{:9$"$0K1 !5))-(J;EMXjv%33#"&547#5>7#5>54.#"#4&#"632#"&547632>325#2654&"2654'#"&'2654&#"+*H",Q~Q.8\7 /3 6%(:RG/YU +=483;AIDCi[DK)[^h+) (" $)94%1:o#%**9l##\X=A( /:-x?43+#,(6hbHU92RnOtNOP",{:9 X:)" '3% '71 !5))-(J5s%33!5>54.#"#4&#"632#"&547632>322#"/32654&"&'&5463232654&#"&4>32#"&#"326%2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^ !4;1.*/"! *3# + **-E1/=D/2#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{$(     #CS0CJhJ$;!  1 !5))-(JDyS^33#".547;2>7!5654&#"#4&#"632#".54>326322654&"XI~-IqtX/Y)',K~`>]f?gH=&4SM14L&-@7;=6 39^:aE8[N_&(@(# eHP^ 3UYp%2cLNpB& 3&\|D\,$,-1.J7GU7:K&3/1`R3OOk."#2.#5J_kv#"&547+".547;2>75!5>54&#"#4&#"632#".54>32632332654&#"2654&">"->21@ RgtX/Y)',K~`;UiC ,;H=&4SM14L&-@7;=6 39^:aE=VM`XI g(,(&X&(@(#s =&*E@/3UYp%2cLNpB& 1&'oBD\,$,-1.J7GU7:K&3/1`R3OOiPeBB%"#'J."#2.#5Jf\gx#"&547#".547;2>75!5>54&#"#4&#"632#".54632632332654&#"2654'#"&'2654&".*6V54.#"#4&#"632#"&547632>32#"&=4&#"#"&5463232654.'2654'2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^6*J-+B-"N9"-4f>1M&6 ' %F:#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{X,LF<;0+AAT27K6UY=E*0*;4+5) B7@# /C1 !5))-(J 5gr}%33!5>54.#"#4&#"632#"&547632>32#"&547&=4&#"#"&5463232654.'2654&"'2654'2654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^6*:!B.2>26-"N9"-4f>1M&6 ' &%7$$%F:#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{X,X'4 .BB.>#G0+AAT27K6UY=E*0*;4+5b$&'&) B7@# /C1 !5))-(J 5fr}%33!5>54.#"#4&#"632#"&547632>32"&5467&=4&#"#"&5463232654.'2654'#"''2654'2654'#"&5472654&#"+*Hn/3 6%(:RG/YU +=483;AIDCi[DK)[^6*?=GfI'0-"N9"-4f>1M&6 ' ,$ "%F%5,*3]#%**9l#Hx?43+#,(6hbHU92RnOtNOP",{X,]&#G3HF5%:!C0+AAT27K6UY=E*0*;4+5  !d) B7@# /-# ++ (#-1 !5))-(H`H%2+"3!!"&546;254#"#"5463232654&#"&54>32#"&#"327'>/8##>-@>/^=MW4'AU%*1^BF{1 G*L7/AD4(*2#"&#"326'%:&0LG!^_!!%Ez"u/*0DE02)AN)*1^z/!? &J*%+2!0H$vvkt3/gb;5*2 !*/ )%P_ uK2XQ/GB.'J F%2#"&54632&#"32654'&#"&54>32654&#"&54632#'"3_Pi~vJH<;-/)_W)OQ,K.&..<&:G;.9(){wUy&$PH&p]KjS2%()! +BV',5'!) .,;/W9CeuP~_G70,J'V|%2#".54>32&#"32654&#"#"&54>3232654&#"&54632#"&#"3262'654&#"#4654#".546326IVv7?+EI"s9"j&,/7\D::!+06/ ]/0J, )x0`G=2 6&8S     gcJu{&$.1-  c[8Q8$ + 334-=32#"&#"3H$ "7`>F*J9H66.& F >K6G= &;/8,K[2Mx,#M#--.3%÷m`w'<#-+=<$6.];rC J}Ch=R?'7 "'JQ]#"&547#"&5473254&#"&546323254&#"&54>32#"&#"322654&#"f'<4.CF*J9H66.& F >K6G= &;/8,K[2Mx,#M#L3H$ V%#('>%)G@0÷m`w'<#-+=<$6.];rC J}Ch=R?'7 "'-- /(&(#&JRMZl#"&547.5473254&#"&546323254&#"&54>32#"&#"322654&'2654'#"&'^$)U=?SF*J9H66.& F >K6G= &;/8,K[2Mx,#M#L3H$)&+82#!19 F0@RV<.(¶m`w'<#-+=<$6.];rC J}Ch=R?'7 "'--.S Z9)$%1,!+8MD %-82##"&547#54654.#4&#"62654&'#!'EG+B20C_.0!E-f &e[3#/6qP+0EB3*`DY*0H!<: 4݅z#! 1M$,6F2#"&547#54654.#4&#"62654&"2654'#"&'!'EG+$-QQ0_./"E-f &e0,+R94% 06qP#A@ZX>B&`DZ)0H!<: 4݅zu9)" '3&&H(2<2#"&54632.#"32>5!54>354&#4&#"6i~NqlS'Z?('PK+*8   ,EqJ^@VBC-&1wm0&'0 ( 84+7(/AlQok.:$4@J&H)L[c74632#"&54>32.#"326=!2'654&#"#4654#"&546326754.'&#4&#"6Mmgo2% BEoVk%;6^5 H"2/0:Vb    ,E/f%!eA2.D0u?DI1#5 B!" (*o\2w#  :,$ !/H% /Jfo)$0݅zM .=E2!5462'654&#"#54&#"&546326754'&#4&#"6!&FG+Na7G4*?-)!8$(0KUF?9$%fH&)E-f &e6pP(Z@2P*Z.Bѵ 'B/[%/g=^108!0I!<: 4݅zM  0>FP2!5464632632"&547&#"#54&#".54&#4&#"62654'!&FG+Na^@63!,5B&'8B8>&6$.G%-lMJE-f &e 1="6pP@Y//67E>=<=P7 ϳ( E1X"Oz]0I!<: 4݅zK#'M/4D#+LX  CQYc2!5464632632#"'732654'#"&5467&#"#54&#"&54&#4&#"62654'!&FG+Nab<*(!/?'#, I< /<./&0!0&- =FpMJE-f &e@&6pPCX0.K 95Fke=Q'G@:-1E, ˵&#:+W%,54.#"#4&#".54>326Sk[Ik-0 6%&3S4 @O=9*: (\@R88€ZvNH+{811-#;4jK?g?D27fJHHHB:F233##"&547#5>54.#"#4&#".54>3262654&#"Sk[I D02C!-0 6%&3S4 @O=9*: (\@R88"$"$€ZvNH/3AD0.+{811-#;4jK?g?D27fJHH$"$"H9DV233#"&547#5>54.#"#4&#".54>3262654&"2654'#"&'Sk[I$-R~Q0-0 6%&3S4 @O=9*: (\@R88Z* %*85%19€ZvNH#A?\W>D&+{811-#;4jK?g?D27fJHH W8)# '2% '6ME233#".54>32&#"32>5!5654&#"#4&#"&546326"Tl^NnAM5dcO@$T9Sa+'5% `F<+2S,#ASumUg&&]jQGc!' "10*`dKi*&0@iHoSl{]HHJ:KN233#".546732>765!5>54.#"#4&#".54>326Tj[N)1NAgE8|7.-'&0n‰bt=-0?1'1S4 @O 2#=G']@Q:7[uQB'=(6j[Ut93iOKpV- 5(+{9&@3,$<4lK.91zJ7gKJJJTVb#"&547##".546732>765!5>54.#"#4&#".54>32632332654&#"".>20A M|7.-'&0n‰bt=-0?1'1S4 @O 2#=G']@Q:7NTj[Ng#%$${A)*FB/6j[Ut93iOKpV- 5(+{9&@3,$<4lK.91zJ7gKJJ[uQB]')'%JbTUbs"&547#".546732>765!5>54.#"#4&#".54>32632332654&+2654'"&'&5UxW<|7.-'&0n‰bt=-0?1'1S4 @O 2#=G']@Q:7NTj[N *. D+82H-9T1?ST>+#6j[Ut93iOKpV- 5(+{9&@3,$<4lK.91zJ7gKJJ[uQB+G x9($ %1.):H'3=>32!54632354.#'"67654&354.#4&#"6vE\zXIz7GX24 F- L45)GX24 FI)"(23ANMY@mQF`.2#:9 8EFL"7j@mQF`.2<"7;L/HA$1;GQ>32##"&47!54632354.#'"67654&264&#"354.#4&#"6vE\ D02B!VzXIz7GX24 F- L45)####EGX24 FI)"(23AN-3AD`MY@mQF`.2#:9 8EFL"7#2##2#@mQF`.2<"7;L/H$1<MYc>32#"&547!54632354.#'"67654&2654&"2654'#"&'354.#4&#"6vE\&0Q~Q3zXIz7GX24 F- L45)v!&#P:4% 0GX24 FI)"(23ANE@ZX>E#MY@mQF`.2#:9 8EFL"7X8*" '3& &@mQF`.2<"7;L/Q'08AI2#"&4632&#"3265!54>326354#4&#"6%354#4&#"6xl~\~]W9/<:Ue'dO .C--!D[FI+!iD[FI)"jd-B-d[19K).AjT3:$4|AjT3:"6HD!/674>32#".547325!%54.#4#"6-X=t45AEtO{K0B$@?yUl >-F\&aAj0RJ+HIyb-./Lkl>graDqe:{#4KA!0I_X%N|H-;BM#"&547#".54732=!54>32'54&'&#4#"6264&#"^&>31?!O{K0B$@?yU-X=t45G&,(F\&aAje$$ % 7$-DC./Lkl>graDqe:v0RJ+HIyS|[c0I_X%N|4&6' 6'HZ+7>I[#"&547".54732=!54>32'54&#4#"62654&#"2654'#"&'S4U>>SO{K0B$@?yU-X=t45G@VF\&aAj< 4&(:2#39A3>TV<2&/Lkl>graDqe:v0RJ+HIy[nr0H_X%N|G/Z8*%%1)$+8M  3AIS2!546#"&=4&#"#"&5463232654.'754&#4&#"62654'!&FG+Na3%E)(>* I3"+0`;0F"1$MJE-f &el@6pP,[)KG<;0+AAT/:K6UYC?*1)=2)8Fz]0I!<: 4݅zP,B7C OM  ;IQ[e2!546#"&547&=4&#"#"&5463232654.'754&#4&#"62654&"'2654'!&FG+Na3%87B/.A9,* I3"+0`;0F"1$LKE-f &ev&%7$$@6pP,[)]$!?0@?1B !C0+AAT/:K6UYC?*1)=2)8F{[0H!<: 4݅z$&&4&,B7C OM  <JR_i|2!546#"&5467&=4&#"#"&5463232654.'754&#4&#"62654'"'"'2654'2654'"&547!&FG+Na3%>;I23I+#(* I3"+0`;0F"1$MJE-f &e\ @$6*<+26pP,[)c"%C4GG4(<!?0+AAT/:K6UYC?*1)=2)8Fz]0I!<: 4݅z },B7C O-# ++ (#-OU.<GZ%#"&547#"'#".5463263232654'7>54.#"264&#""327.54.%.A32B 9-5Af=(TGJ-ASAT^eK%X06 *49:!#$$G). !1S5&4A#6 ;)0CD/ %9IBRpVVmALVnBN{vGd?-2 [554.#"2654&#2654'#"&'"327.54.,;R~Q--5Af=(TGJ-ASAT^eK%X706 *49:R94%2). !1S5&4A#% A7>\X>3% %9IBRpVVmALVnBN{Cn d?-2 [532&#"3267#"'#"&5463263232654'>54.#"%327.54.#"7.0_{T;J5,HI%VD33wE9-5zOLK,ASATXkK.8 *499~h&4A#$1MmU%!!*#a yMuVVmAL{ZnBd@-2 [5=hcu}<)-.+O"P^qx%2654'7#"'#".546326322#"/32654&+#"'#"&54>;>32'>54.#""327.54..#"3265#32=#"!^eK%Xs9-5Af=(TGJ-ASAT*0+"-43+).#,#* 06 *49:). !1S5&4A#y! #~j(>"VnBN{g %9IBRpVVmAL1($1 # % 80.227' 5/-$d?-2 [554.#""327.54.4&#"3265#32=#"!^eK%Xs9-5Af=(TGJ-ASAT% #,  *1&3+'05225*45IU)d?-2 [554.#""327.54.4&#"3265#32=#"!^eK%Xs9-5Af=(TGJ-ASAT%$;!+1&7-'/:O."Xfy%2654'7#"'#".546326322#"&54632&#"32>54&+#"'#"&546;4632'>54.#""327.54.4&#"26=#26=#"!^eK%Xs9-5Af=(TGJ-ASAT.;/[>;GS;>4$."0>3M&%!A'4. 3'.0<$'>06 *49:). !1S5&4A#w'&;(z%d;"VnBN{g %9IBRpVVmALQ7;:$"63(7JF338*0B;4>323>'>54.#""327.54.2654&+'.#"327#26=#"!^eK%Xs9-5Af=(TGJ-ASATn@[S$<;1"5 #*$'-1&5)'1"-#* # Bt06 *49:). !1S5&4A#M&z! @~??"VnBN{g %9IBRpVVmAL6Y@SG6J0L3#('.M' ?7226(  5/."4JNd?-2 [554&#"32#"&547##"'#"&546;>326'>54.#""327.54.2654&+'.#"327#32=#"!^eK%Xs9-5Af=(TGJ-ASATs8Z,05( $ /54&'"32#"&=##"'#"&46;4632>76'>54.#""327.54.2654&+'.#"3265#32=#"!^eK%Xs9-5Af=(TGJ-ASATAC"%ʉGnC1˖x*$J-&!+0+1.'#,*<(-& D%06 *49:). !1S5&4A#M$v2 o_#7"VnBN{g %9IBRpVVmAL7D-1!,[s(K|LWI$?.wZF'*#035 .-9<"9_008R)-S/#:@Od?-2 [554.#""327.54.!^eK%Xs9-5Af=(TGJ-ASAT.4!8R$ 206 *49:). !1S5&4A#"VnBN{g %9IBRpVVmALs9(. )! $1d?-2 [554.#""327.54.2654&"!^eK%Xs9-5Af=(TGJ-ASAT.4!8#=+*=#$ 206 *49:). !1S5&4A#4"#2#"VnBN{g %9IBRpVVmALs9(. /-::-0)! $1d?-2 [554.#""327.54.2654&#"2654'"&547!^eK%Xs9-5Af=(TGJ-ASAT.4!8#4M57K4$ 206 *49:). !1S5&4A#* T;.@-,"VnBN{g %9IBRpVVmALs9(. (@8JL6@()! $1d?-2 [554.#""327.54.2654'!^eK%Xs9-5Af=(TGJ-ASAT`N]*'$:D<F<'$=(-C@HT<&%"u06 *49:). !1S5&4A#)'8A%"VnBN{g %9IBRpVVmAL4eA(K .H8X'I O3O- 4^EYLd?-2 [554.#""327.54.2654'!^eK%Xs9-5Af=(TGJ-ASATk-A!?3(v'%%''/ 2# G54.#""327.54.2654'!^eK%Xs9-5Af=(TGJ-ASAT/*0''s ,.0&L*!E<'&:%27?HS7, $@06 *49:). !1S5&4A#0'7B""VnBN{g %9IBRpVVmAL .#73$:&$!; 0C4543 :@,F 'U=FNd?-2 [532&#"32654&#"#"&5467&#".546326'>54.#""327.54.2654'!^eK%Xs9-5Af=(TGJ-ASATVU\6^<2BC0>7$7#./"WYF= G41+3)3M1MM-'JK5R* M.FWNd?-2 [554.#""327.54.2654' 2654'!^eK%Xs9-5Af=(TGJ-ASATBMG6D6A6@4=+1+">7 4< (=8=J4&#A": #06 *49:). !1S5&4A#Q"3:"(#3:"VnBN{g %9IBRpVVmAL4bB\/ ,LR6 +#(2

>;>S5N4R* 1`GU<:Ld?-2 [554.#""327.54.2654'2654'!^eK%Xs9-5Af=(TGJ-ASAT^P; C3r##+75?=5>39,33 <4 4 /-!#K2# ">+$:!~06 *49:). !1S5&4A#W/8& /7"VnBN{g %9IBRpVVmAL8..?a2&6&O5/K+L6325J' #'"-I7335@A)%: G&=E12_d?-2 [554.#""327.54.2654'2654'!^eK%Xs9-5Af=(TGJ-ASAT 0-/(z*,,$&)%;429.1/";327%78@H1"!=*$8!:.M06 *49:). !1S5&4A#K.5-7"VnBN{g %9IBRpVVmAL 6!:1#"% + 0F6425E,#$(,J6417I) >1M %Y>F32'wd?-2 [5$ %$A&*B&O,!"z%2654'7#"'#".546326322#"&54632&#"32654&#"#"&547&#"#54&#"#"&5467&#"&546326326326'>54.#""327.54.2654'!2654'!^eK%Xs9-5Af=(TGJ-ASAT@Qeg.N_9*.7HOM>5 @0)$-< L0( >1'&, ,98=F7'(= G06 *49:). !1S5&4A#O4:2; "VnBN{g %9IBRpVVmAL;gN{ ~g>b=O3JI0K<L(0;O6GN+#KK+V0 9a>T;;Sd?-2 [554.#""327.54.!^eK%Xs9-5Af=(TGJ-ASAT8F(?-) 9')0 UF?:"&06 *49:). !1S5&4A#"VnBN{g %9IBRpVVmAL8Z@#,((\/Aѵ%"A0 '$ .h=^10Pd?-2 [554.#"2654&'"327.54.!^eK%Xs9-5Af=(TGJ-ASATk4J>$'9D+9")2M3%C?6$/o06 *49: #B(=). !1S5&4A#"VnBN{g %9IBRpVVmAL854.#""327.54.2654'!^eK%Xs9-5Af=(TGJ-ASATO45&*=&F<9\N&& ?K< <$%3;.54.#""327.54.!^eK%Xs9-5Af=(TGJ-ASATX4@;/#,$0HF06 *49:). !1S5&4A#"VnBN{g %9IBRpVVmAL`B+% 2(($*";5:xd?-2 [554.#""327.54.264&"!^eK%Xs9-5Af=(TGJ-ASATX4@;%C\A#/#,$0HF06 *49:). !1S5&4A#&%8#%"VnBN{g %9IBRpVVmAL`B+% 10@?1/ 2(($*";5:xd?-2 [554.#""327.54.2654&#"2654'#"&547!^eK%Xs9-5Af=(TGJ-ASATX4@;-5I24H4/#,$0HF06 *49:). !1S5&4A#$6(+2"VnBN{g %9IBRpVVmAL`B+% #A5FH3B" 2(($*";5:xd?-2 [554.#""327.54.!^eK%Xs9-5Af=(TGJ-ASATV3A002

Disk Residend Arrays
Shared Files
Exclusive Access Files ga-5-3/pario/doc/EAFapi.html0000640005473000001440000000071511300316052014420 0ustar d3n000users EAF Programmers Interface <BODY> Viewing this page requires a browser capable of displaying frames. </BODY> ga-5-3/pario/doc/api_eaf.html0000640005473000001440000002306311300316052014720 0ustar d3n000users